ZGlmZiAtLWdpdCBhLy5ienJpZ25vcmUgYi8uYnpyaWdub3JlCmluZGV4IGM5YTM5YmMuLmU1ODg1OTUgMTAwNjQ0Ci0tLSBhLy5ienJpZ25vcmUKKysrIGIvLmJ6cmlnbm9yZQpAQCAtMTQsMzUgKzE0LDIyIEBACiBweWNvbmZpZy5oCiBsaWJweXRob24qLmEKIHB5dGhvbi5leGUKLUNQOTM2LlRYVAotU0hJRlRfSklTWDAyMTMuVFhUCi1KT0hBQi5UWFQKLUVVQy1KUC5UWFQKLU5vcm1hbGl6YXRpb25UZXN0LTMuMi4wLnR4dAotTm9ybWFsaXphdGlvblRlc3QudHh0Ci1CSUc1LlRYVAotQklHNUhLU0NTLTIwMDQuVFhUCi1DUDk0OS5UWFQKLUVVQy1DTi5UWFQKLUJJRzVIS1NDUy5UWFQKLVNISUZUSklTLlRYVAotRVVDLUtSLlRYVAotRVVDLUpJU1gwMjEzLlRYVAotQ1A5MzIuVFhUCi1DUDk1MC5UWFQKK3B5dGhvbi1nZGIucHkKIHJlZmxvZy50eHQKLWdiLTE4MDMwLTIwMDAueG1sCiB0YWdzCiBUQUdTCiAuZ2RiX2hpc3RvcnkKIERvYy90b29scy9zcGhpbngKIERvYy90b29scy9qaW5qYQorRG9jL3Rvb2xzL2ppbmphMgogRG9jL3Rvb2xzL3B5Z21lbnRzCiBEb2MvdG9vbHMvZG9jdXRpbHMKK01pc2MvcHl0aG9uLnBjCiBNb2R1bGVzL1NldHVwCiBNb2R1bGVzL1NldHVwLmNvbmZpZwogTW9kdWxlcy9TZXR1cC5sb2NhbAogTW9kdWxlcy9jb25maWcuYwogUGFyc2VyL3BnZW4KK0xpYi90ZXN0L2RhdGEvKgogTGliL2xpYjJ0bzMvR3JhbW1hcioucGlja2xlCiBMaWIvbGliMnRvMy9QYXR0ZXJuR3JhbW1hcioucGlja2xlCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggMDY2MTAzYS4uM2VkM2FlZiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMSw1MSArMSwzNyBAQAogLmdkYl9oaXN0b3J5CiAucHVyaWZ5Ci0uc3ZuCi1CSUc1LlRYVAotQklHNUhLU0NTLTIwMDQuVFhUCi1CSUc1SEtTQ1MuVFhUCi1DUDkzMi5UWFQKLUNQOTM2LlRYVAotQ1A5NDkuVFhUCi1DUDk1MC5UWFQKLUVVQy1DTi5UWFQKLUVVQy1KSVNYMDIxMy5UWFQKLUVVQy1KUC5UWFQKLUVVQy1LUi5UWFQKLUpPSEFCLlRYVAorLnN2bi8KIE1ha2VmaWxlJAogTWFrZWZpbGUucHJlJAotTm9ybWFsaXphdGlvblRlc3QtMy4yLjAudHh0Ci1Ob3JtYWxpemF0aW9uVGVzdC50eHQKLVNISUZUSklTLlRYVAotU0hJRlRfSklTWDAyMTMuVFhUCi1UQUdTCi1hdXRvbTR0ZS5jYWNoZQotYnVpbGQKLWJ1aWxkbm8KK1RBR1MkCithdXRvbTR0ZS5jYWNoZSQKK2J1aWxkLworYnVpbGRubyQKIGNvbmZpZy5jYWNoZQogY29uZmlnLmxvZwogY29uZmlnLnN0YXR1cwogY29uZmlnLnN0YXR1cy5saW5lbm8KIGRiX2hvbWUKLWdiLTE4MDMwLTIwMDAueG1sCi1wbGF0Zm9ybQotcHljb25maWcuaAotcHl0aG9uCi1weXRob24uZXhlCi1yZWZsb2cudHh0Ci10YWdzCitwbGF0Zm9ybSQKK3B5Y29uZmlnLmgkCitweXRob24kCitweXRob24uZXhlJAorcmVmbG9nLnR4dCQKK3RhZ3MkCiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogRG9jL3Rvb2xzL3NwaGlueC8KIERvYy90b29scy9kb2N1dGlscy8KIERvYy90b29scy9qaW5qYS8KK0RvYy90b29scy9qaW5qYTIvCiBEb2MvdG9vbHMvcHlnbWVudHMvCi1Nb2R1bGVzL1NldHVwCitNaXNjL3B5dGhvbi5wYworTW9kdWxlcy9TZXR1cCQKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCi1QYXJzZXIvcGdlbgotY29yZQorUGFyc2VyL3BnZW4kCiteY29yZQorXnB5dGhvbi1nZGIucHkKIAogc3ludGF4OiBnbG9iCiBsaWJweXRob24qLmEKQEAgLTU4LDYgKzQ0LDcgQEAKICoucmVqCiAqfgogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogUENidWlsZC8qLmV4ZQogUENidWlsZC8qLmRsbAogUENidWlsZC8qLnBkYgpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggMmZkNWZmNi4uZjQzZGY0YiAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC0xMzUsMyArMTM1LDEzIEBACiBjMWRjOWU3OTg2YTJhOGUxMDcwZWM3YmVlNzQ4NTIwZmViZWYzODJlIHYyLjYuNnJjMQogZTE4OWRjOGZkNjYxNTRlZjQ2ZDljZDIyNTg0ZDU2NjY5YjU0NGNhMyB2Mi42LjZyYzIKIDlmODc3MWUwOTA1Mjc3ZjhiM2MyNzk5MTEzYTA2MmZkYTQxNjQ5OTUgdjIuNi42CitiNDEwN2ViMDBiNDI3MWZiNzNhOWUxYjczNmQ0ZjIzNDYwOTUwNzc4IHYyLjdhMQorYWRjODVlYmM3MjcxY2MyMmUyNGU4MTY3ODJiYjJiOGQ3ZmEzYTZiMyB2Mi43YTIKKzQxODA1NTdiN2E5YmI5ZGQ1MzQxYTE4YWYxOTlmODQzZjE5OWU0NmUgdjIuN2EzCitkMmUxMDI3ZWRkZTg0YTAyODUzZmNmOTc5MGYzMTFmMTBmNDZjZjBhIHYyLjdhNAorNjE1NTBhMTMwMmIwN2E3MzE0MzZhODRiMmQ4NmViMmJhYjNiMmZiMCB2Mi43YjEKKzZiYjk4OTFkNDI3NWJkNDJhNjliM2Q5MDNkMTNiNjg3NTQzYzkxNWQgdjIuN2IyCiszODFjNWVlYjUxMTAzOGQwOTFkOGUwODA4YzRiODUwODdlZDJmNjg0IHYyLjdyYzEKKzEzZTViMGIyMDcxYTJhNDIwNjdmYjAzZmFjYzkzMTQwOWZhNmJhNTAgdjIuN3JjMgorNjNkOWYwMGZlYTA3MzBjMWM0MzdhNTBmNjRhNDJiNzc5MmJkY2JmYiB2Mi43cmMxCis1Mzk1Zjk2NTg4ZDRmMDE5OWQzMjljYjc5ZWIxMDk2NDhkYzRlZjVlIHYyLjcuMQpkaWZmIC0tZ2l0IGEvRGVtby9jZ2kvY2dpMS5weSBiL0RlbW8vY2dpL2NnaTEucHkKaW5kZXggOWQyNWM3ZC4uYzZmM2VmYSAxMDA3NTUKLS0tIGEvRGVtby9jZ2kvY2dpMS5weQorKysgYi9EZW1vL2NnaS9jZ2kxLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2xvY2FsL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiAiIiJDR0kgdGVzdCAxIC0gY2hlY2sgc2VydmVyIHNldHVwLiIiIgogCmRpZmYgLS1naXQgYS9EZW1vL2NnaS9jZ2kyLnB5IGIvRGVtby9jZ2kvY2dpMi5weQppbmRleCBkOTU2ZjY1Li44MDI2YzU1IDEwMDc1NQotLS0gYS9EZW1vL2NnaS9jZ2kyLnB5CisrKyBiL0RlbW8vY2dpL2NnaTIucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICIiIkNHSSB0ZXN0IDIgLSBiYXNpYyB1c2Ugb2YgY2dpIG1vZHVsZS4iIiIKIApkaWZmIC0tZ2l0IGEvRGVtby9jZ2kvY2dpMy5weSBiL0RlbW8vY2dpL2NnaTMucHkKaW5kZXggYTM0MjFiNS4uNjY5M2E4NiAxMDA3NTUKLS0tIGEvRGVtby9jZ2kvY2dpMy5weQorKysgYi9EZW1vL2NnaS9jZ2kzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2xvY2FsL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogCiAiIiJDR0kgdGVzdCAzIChwZXJzaXN0ZW50IGRhdGEpLiIiIgogCmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvQ29tcGxleC5weSBiL0RlbW8vY2xhc3Nlcy9Db21wbGV4LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9EYXRlcy5weSBiL0RlbW8vY2xhc3Nlcy9EYXRlcy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvRGJtLnB5IGIvRGVtby9jbGFzc2VzL0RibS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvUmFuZ2UucHkgYi9EZW1vL2NsYXNzZXMvUmFuZ2UucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9jbGFzc2VzL1Jldi5weSBiL0RlbW8vY2xhc3Nlcy9SZXYucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9jbGFzc2VzL1ZlYy5weSBiL0RlbW8vY2xhc3Nlcy9WZWMucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA1NmNiODM5Li5iODc3MWVhCi0tLSBhL0RlbW8vY2xhc3Nlcy9WZWMucHkKKysrIGIvRGVtby9jbGFzc2VzL1ZlYy5weQpAQCAtMSwyMyArMSw0MSBAQAotIyBBIHNpbXBsZSB2ZWN0b3IgY2xhc3MKLQotCi1kZWYgdmVjKCp2KToKLSAgICByZXR1cm4gVmVjKCp2KQotCi0KIGNsYXNzIFZlYzoKKyAgICAiIiIgQSBzaW1wbGUgdmVjdG9yIGNsYXNzCiAKKyAgICBJbnN0YW5jZXMgb2YgdGhlIFZlYyBjbGFzcyAgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gbnVtYmVycworCisgICAgPj4+IGEgPSBWZWMoMSwgMiwgMykKKyAgICA+Pj4gYiA9IFZlYygzLCAyLCAxKQorCisgICAgYWRkZWQKKyAgICA+Pj4gYSArIGIKKyAgICBWZWMoNCwgNCwgNCkKKworICAgIHN1YnRyYWN0ZWQKKyAgICA+Pj4gYSAtIGIKKyAgICBWZWMoLTIsIDAsIDIpCisKKyAgICBhbmQgbXVsdGlwbGllZCBieSBhIHNjYWxhciBvbiB0aGUgbGVmdAorICAgID4+PiAzLjAgKiBhCisgICAgVmVjKDMuMCwgNi4wLCA5LjApCisKKyAgICBvciBvbiB0aGUgcmlnaHQKKyAgICA+Pj4gYSAqIDMuMAorICAgIFZlYygzLjAsIDYuMCwgOS4wKQorICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqdik6CiAgICAgICAgIHNlbGYudiA9IGxpc3QodikKIAotICAgIGRlZiBmcm9tbGlzdChzZWxmLCB2KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWxpc3QoY2xzLCB2KToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodiwgbGlzdCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgc2VsZi52ID0gdls6XQotICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBpbnN0ID0gY2xzKCkKKyAgICAgICAgaW5zdC52ID0gdgorICAgICAgICByZXR1cm4gaW5zdAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3ZlYygnICsgcmVwcihzZWxmLnYpWzE6LTFdICsgJyknCisgICAgICAgIGFyZ3MgPSAnLCAnLmpvaW4ocmVwcih4KSBmb3IgeCBpbiBzZWxmLnYpCisgICAgICAgIHJldHVybiAnVmVjKHswfSknLmZvcm1hdChhcmdzKQogCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi52KQpAQCAtMjcsMjggKzQ1LDI0IEBACiAKICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICMgRWxlbWVudC13aXNlIGFkZGl0aW9uCi0gICAgICAgIHYgPSBtYXAobGFtYmRhIHgsIHk6IHgreSwgc2VsZiwgb3RoZXIpCi0gICAgICAgIHJldHVybiBWZWMoKS5mcm9tbGlzdCh2KQorICAgICAgICB2ID0gW3ggKyB5IGZvciB4LCB5IGluIHppcChzZWxmLnYsIG90aGVyLnYpXQorICAgICAgICByZXR1cm4gVmVjLmZyb21saXN0KHYpCiAKICAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICMgRWxlbWVudC13aXNlIHN1YnRyYWN0aW9uCi0gICAgICAgIHYgPSBtYXAobGFtYmRhIHgsIHk6IHgteSwgc2VsZiwgb3RoZXIpCi0gICAgICAgIHJldHVybiBWZWMoKS5mcm9tbGlzdCh2KQorICAgICAgICB2ID0gW3ggLSB5IGZvciB4LCB5IGluIHppcChzZWxmLnYsIG90aGVyLnYpXQorICAgICAgICByZXR1cm4gVmVjLmZyb21saXN0KHYpCiAKICAgICBkZWYgX19tdWxfXyhzZWxmLCBzY2FsYXIpOgogICAgICAgICAjIE11bHRpcGx5IGJ5IHNjYWxhcgotICAgICAgICB2ID0gbWFwKGxhbWJkYSB4OiB4KnNjYWxhciwgc2VsZi52KQotICAgICAgICByZXR1cm4gVmVjKCkuZnJvbWxpc3QodikKKyAgICAgICAgdiA9IFt4ICogc2NhbGFyIGZvciB4IGluIHNlbGYudl0KKyAgICAgICAgcmV0dXJuIFZlYy5mcm9tbGlzdCh2KQogCisgICAgX19ybXVsX18gPSBfX211bF9fCiAKIAogZGVmIHRlc3QoKToKLSAgICBhID0gdmVjKDEsIDIsIDMpCi0gICAgYiA9IHZlYygzLCAyLCAxKQotICAgIHByaW50IGEKLSAgICBwcmludCBiCi0gICAgcHJpbnQgYStiCi0gICAgcHJpbnQgYS1iCi0gICAgcHJpbnQgYSozLjAKKyAgICBpbXBvcnQgZG9jdGVzdAorICAgIGRvY3Rlc3QudGVzdG1vZCgpCiAKIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9jbGFzc2VzL2JpdHZlYy5weSBiL0RlbW8vY2xhc3Nlcy9iaXR2ZWMucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9lbWJlZC9NYWtlZmlsZSBiL0RlbW8vZW1iZWQvTWFrZWZpbGUKaW5kZXggZGRiZGQ5Mi4uMTliYTM0NCAxMDA2NDQKLS0tIGEvRGVtby9lbWJlZC9NYWtlZmlsZQorKysgYi9EZW1vL2VtYmVkL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgZW1iZWRkZWQgUHl0aG9uIHVzZSBkZW1vLgotIyAoVGhpcyB2ZXJzaW9uIHRhaWxvcmVkIGZvciBteSBSZWQgSGF0IExpbnV4IDYuMSBzZXR1cDsKKyMgKFRoaXMgdmVyc2lvbiBvcmlnaW5hbGx5IHdyaXR0ZW4gb24gUmVkIEhhdCBMaW51eCA2LjE7CiAjIGVkaXQgbGluZXMgbWFya2VkIHdpdGggWFhYLikKIAogIyBYWFggVGhlIGNvbXBpbGVyIHlvdSBhcmUgdXNpbmcKQEAgLTEwLDcgKzEwLDcgQEAKIHNyY2Rpcj0JCS4uLy4uCiAKICMgUHl0aG9uIHZlcnNpb24KLVZFUlNJT049CTIuNgorVkVSU0lPTj0JMi43CiAKICMgQ29tcGlsZXIgZmxhZ3MKIE9QVD0JCS1nCkBAIC0yMSw3ICsyMSw3IEBACiAjIFRoZSBQeXRob24gbGlicmFyeQogTElCUFlUSE9OPQkkKGJsZGRpcikvbGlicHl0aG9uJChWRVJTSU9OKS5hCiAKLSMgWFhYIGVkaXQgTElCUyAoaW4gcGFydGljdWxhcikgdG8gbWF0Y2ggJChibGRkaXIpL01vZHVsZXMvTWFrZWZpbGUKKyMgWFhYIGVkaXQgTElCUyAoaW4gcGFydGljdWxhcikgdG8gbWF0Y2ggJChibGRkaXIpL01ha2VmaWxlCiBMSUJTPQkJLWxuc2wgLWxkbCAtbHJlYWRsaW5lIC1sdGVybWNhcCAtbGllZWUgLWxwdGhyZWFkIC1sdXRpbAogTERGTEFHUz0JLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCiBTWVNMSUJTPQktbG0KZGlmZiAtLWdpdCBhL0RlbW8vZW1iZWQvZGVtby5jIGIvRGVtby9lbWJlZC9kZW1vLmMKaW5kZXggNTViYzgwOC4uMDBjNWEwZSAxMDA2NDQKLS0tIGEvRGVtby9lbWJlZC9kZW1vLmMKKysrIGIvRGVtby9lbWJlZC9kZW1vLmMKQEAgLTE2LDEwICsxNiwxOSBAQAogICAgIGluaXR4eXp6eSgpOwogCiAgICAgLyogRGVmaW5lIHN5cy5hcmd2LiAgSXQgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIGlmIHlvdQotICAgICAgIHdhbnQgdGhpczsgeW91IGNhbiBhbHNvIGxldCBpdCB1bmRlZmluZWQgKHNpbmNlIHRoZSBQeXRob24KKyAgICAgICB3YW50IHRoaXM7IHlvdSBjYW4gYWxzbyBsZWF2ZSBpdCB1bmRlZmluZWQgKHNpbmNlIHRoZSBQeXRob24KICAgICAgICBjb2RlIGlzIGdlbmVyYWxseSBub3QgYSBtYWluIHByb2dyYW0gaXQgaGFzIG5vIGJ1c2luZXNzCi0gICAgICAgdG91Y2hpbmcgc3lzLmFyZ3YuLi4pICovCi0gICAgUHlTeXNfU2V0QXJndihhcmdjLCBhcmd2KTsKKyAgICAgICB0b3VjaGluZyBzeXMuYXJndi4uLikgCisKKyAgICAgICBJZiB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdHJ1ZSwgc3lzLnBhdGggaXMgbW9kaWZpZWQgdG8gaW5jbHVkZQorICAgICAgIGVpdGhlciB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCBuYW1lZCBieSBhcmd2WzBdLCBvcgorICAgICAgIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgVGhpcyBjYW4gYmUgcmlza3k7IGlmIHlvdSBydW4KKyAgICAgICBhbiBhcHBsaWNhdGlvbiBlbWJlZGRpbmcgUHl0aG9uIGluIGEgZGlyZWN0b3J5IGNvbnRyb2xsZWQgYnkKKyAgICAgICBzb21lb25lIGVsc2UsIGF0dGFja2VycyBjb3VsZCBwdXQgYSBUcm9qYW4taG9yc2UgbW9kdWxlIGluIHRoZQorICAgICAgIGRpcmVjdG9yeSAoc2F5LCBhIGZpbGUgbmFtZWQgb3MucHkpIHRoYXQgeW91ciBhcHBsaWNhdGlvbiB3b3VsZAorICAgICAgIHRoZW4gaW1wb3J0IGFuZCBydW4uCisgICAgKi8KKyAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMCk7CiAKICAgICAvKiBEbyBzb21lIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgKi8KICAgICBwcmludGYoIkhlbGxvLCBicmF2ZSBuZXcgd29ybGRcblxuIik7CmRpZmYgLS1naXQgYS9EZW1vL2ltcHV0aWwvaW1wb3J0ZXJzLnB5IGIvRGVtby9pbXB1dGlsL2ltcG9ydGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY0ZmYwMi4uMDAwMDAwMAotLS0gYS9EZW1vL2ltcHV0aWwvaW1wb3J0ZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLSMKLSMgaW1wb3J0ZXJzLnB5Ci0jCi0jIERlbW9uc3RyYXRpb24gc3ViY2xhc3NlcyBvZiBpbXB1dGlsLkltcG9ydGVyCi0jCi0KLSMgVGhlcmUgc2hvdWxkIGJlIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbXBvcnRzIGJlbG93IGlmIGl0IGlzIGRlc2lyYWJsZQotIyB0byBoYXZlICJhbGwiIG1vZHVsZXMgYmUgaW1wb3J0ZWQgdGhyb3VnaCB0aGUgaW1wdXRpbCBzeXN0ZW0uCi0KLSMgdGhlc2UgYXJlIEMgZXh0ZW5zaW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IGltcAotaW1wb3J0IHN0cnVjdAotaW1wb3J0IG1hcnNoYWwKLQotIyB0aGVzZSBhcmUgLnB5IG1vZHVsZXMKLWltcG9ydCBpbXB1dGlsCi1pbXBvcnQgb3MKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1fVHVwbGVUeXBlID0gdHlwZSgoKSkKLV9TdHJpbmdUeXBlID0gdHlwZSgnJykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGJ5dGUtY29tcGlsZWQgZmlsZSBzdWZmaWMgY2hhcmFjdGVyCi1fc3VmZml4X2NoYXIgPSBfX2RlYnVnX18gYW5kICdjJyBvciAnbycKLQotIyBieXRlLWNvbXBpbGVkIGZpbGUgc3VmZml4Ci1fc3VmZml4ID0gJy5weScgKyBfc3VmZml4X2NoYXIKLQotIyB0aGUgQ19FWFRFTlNJT04gc3VmZml4ZXMKLV9jX3N1ZmZpeGVzID0gZmlsdGVyKGxhbWJkYSB4OiB4WzJdID09IGltcC5DX0VYVEVOU0lPTiwgaW1wLmdldF9zdWZmaXhlcygpKQotCi1kZWYgX3RpbWVzdGFtcChwYXRobmFtZSk6Ci0gICAgIlJldHVybiB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZSBhcyBhIExvbmcuIgotICAgIHRyeToKLSAgICAgICAgcyA9IG9zLnN0YXQocGF0aG5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgcmV0dXJuIGxvbmcoc1s4XSkKLQotZGVmIF9mc19pbXBvcnQoZGlyLCBtb2RuYW1lLCBmcW5hbWUpOgotICAgICJGZXRjaCBhIG1vZHVsZSBmcm9tIHRoZSBmaWxlc3lzdGVtLiIKLQotICAgIHBhdGhuYW1lID0gb3MucGF0aC5qb2luKGRpciwgbW9kbmFtZSkKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKToKLSAgICAgICAgdmFsdWVzID0geyAnX19wa2dkaXJfXycgOiBwYXRobmFtZSwgJ19fcGF0aF9fJyA6IFsgcGF0aG5hbWUgXSB9Ci0gICAgICAgIGlzcGtnID0gMQotICAgICAgICBwYXRobmFtZSA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgJ19faW5pdF9fJykKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSB7IH0KLSAgICAgICAgaXNwa2cgPSAwCi0KLSAgICAgICAgIyBsb29rIGZvciBkeW5sb2FkIG1vZHVsZXMKLSAgICAgICAgZm9yIGRlc2MgaW4gX2Nfc3VmZml4ZXM6Ci0gICAgICAgICAgICBmaWxlID0gcGF0aG5hbWUgKyBkZXNjWzBdCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUsIGRlc2NbMV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcC5sb2FkX21vZHVsZShmcW5hbWUsIGZwLCBmaWxlLCBkZXNjKQotICAgICAgICAgICAgICAgIHZhbHVlc1snX19maWxlX18nXSA9IGZpbGUKLSAgICAgICAgICAgICAgICByZXR1cm4gMCwgbW9kdWxlLCB2YWx1ZXMKLQotICAgIHRfcHkgPSBfdGltZXN0YW1wKHBhdGhuYW1lICsgJy5weScpCi0gICAgdF9weWMgPSBfdGltZXN0YW1wKHBhdGhuYW1lICsgX3N1ZmZpeCkKLSAgICBpZiB0X3B5IGlzIE5vbmUgYW5kIHRfcHljIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgY29kZSA9IE5vbmUKLSAgICBpZiB0X3B5IGlzIE5vbmUgb3IgKHRfcHljIGlzIG5vdCBOb25lIGFuZCB0X3B5YyA+PSB0X3B5KToKLSAgICAgICAgZmlsZSA9IHBhdGhuYW1lICsgX3N1ZmZpeAotICAgICAgICBmID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICBpZiBmLnJlYWQoNCkgPT0gaW1wLmdldF9tYWdpYygpOgotICAgICAgICAgICAgdCA9IHN0cnVjdC51bnBhY2soJzxJJywgZi5yZWFkKDQpKVswXQotICAgICAgICAgICAgaWYgdCA9PSB0X3B5OgotICAgICAgICAgICAgICAgIGNvZGUgPSBtYXJzaGFsLmxvYWQoZikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgaWYgY29kZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gcGF0aG5hbWUgKyAnLnB5JwotICAgICAgICBjb2RlID0gX2NvbXBpbGUoZmlsZSwgdF9weSkKLQotICAgIHZhbHVlc1snX19maWxlX18nXSA9IGZpbGUKLSAgICByZXR1cm4gaXNwa2csIGNvZGUsIHZhbHVlcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIFNpbXBsZSBmdW5jdGlvbi1iYXNlZCBpbXBvcnRlcgotIwotY2xhc3MgRnVuY0ltcG9ydGVyKGltcHV0aWwuSW1wb3J0ZXIpOgotICAgICJJbXBvcnRlciBzdWJjbGFzcyB0byBkZWxlZ2F0ZSB0byBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1ldGhvZCBvdmVycmlkZXMuIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jKToKLSAgICAgICAgc2VsZi5mdW5jID0gZnVuYwotICAgIGRlZiBnZXRfY29kZShzZWxmLCBwYXJlbnQsIG1vZG5hbWUsIGZxbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmZ1bmMocGFyZW50LCBtb2RuYW1lLCBmcW5hbWUpCi0KLWRlZiBpbnN0YWxsX3dpdGgoZnVuYyk6Ci0gICAgRnVuY0ltcG9ydGVyKGZ1bmMpLmluc3RhbGwoKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQmFzZSBjbGFzcyBmb3IgYXJjaGl2ZS1iYXNlZCBpbXBvcnRpbmcKLSMKLWNsYXNzIFBhY2thZ2VBcmNoaXZlSW1wb3J0ZXIoaW1wdXRpbC5JbXBvcnRlcik6Ci0gICAgIiIiSW1wb3J0ZXIgc3ViY2xhc3MgdG8gaW1wb3J0IGZyb20gKGZpbGUpIGFyY2hpdmVzLgotCi0gICAgVGhpcyBJbXBvcnRlciBoYW5kbGVzIGltcG9ydHMgb2YgdGhlIHN0eWxlIDxhcmNoaXZlPi48c3ViZmlsZT4sIHdoZXJlCi0gICAgPGFyY2hpdmU+IGNhbiBiZSBsb2NhdGVkIHVzaW5nIGEgc3ViY2xhc3Mtc3BlY2lmaWMgbWVjaGFuaXNtIGFuZCB0aGUKLSAgICA8c3ViZmlsZT4gaXMgZm91bmQgaW4gdGhlIGFyY2hpdmUgdXNpbmcgYSBzdWJjbGFzcy1zcGVjaWZpYyBtZWNoYW5pc20uCi0KLSAgICBUaGlzIGNsYXNzIGRlZmluZXMgdHdvIGhvb2tzIGZvciBzdWJjbGFzc2VzOiBvbmUgdG8gbG9jYXRlIGFuIGFyY2hpdmUKLSAgICAoYW5kIHBvc3NpYmx5IHJldHVybiBzb21lIGNvbnRleHQgZm9yIGZ1dHVyZSBzdWJmaWxlIGxvb2t1cHMpLCBhbmQgb25lCi0gICAgdG8gbG9jYXRlIHN1YmZpbGVzLgotICAgICIiIgotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIHBhcmVudCwgbW9kbmFtZSwgZnFuYW1lKToKLSAgICAgICAgaWYgcGFyZW50OgotICAgICAgICAgICAgIyB0aGUgSW1wb3J0ZXIuX2ZpbmlzaF9pbXBvcnQgbG9naWMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBpbXBvcnRzCi0gICAgICAgICAgICAjIHVuZGVyIHRoZSB0b3AgbGV2ZWwgbW9kdWxlIChwYWNrYWdlIC8gYXJjaGl2ZSkuCi0gICAgICAgICAgICBhc3NlcnQgcGFyZW50Ll9faW1wb3J0ZXJfXyA9PSBzZWxmCi0KLSAgICAgICAgICAgICMgaWYgYSBwYXJlbnQgInBhY2thZ2UiIGlzIHByb3ZpZGVkLCB0aGVuIHdlIGFyZSBpbXBvcnRpbmcgYQotICAgICAgICAgICAgIyBzdWItZmlsZSBmcm9tIHRoZSBhcmNoaXZlLgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXRfc3ViZmlsZShwYXJlbnQuX19hcmNoaXZlX18sIG1vZG5hbWUpCi0gICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIF9UdXBsZVR5cGUpOgotICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocmVzdWx0KSA9PSAyCi0gICAgICAgICAgICAgICAgcmV0dXJuICgwLCkgKyByZXN1bHQKLSAgICAgICAgICAgIHJldHVybiAwLCByZXN1bHQsIHt9Ci0KLSAgICAgICAgIyBubyBwYXJlbnQgd2FzIHByb3ZpZGVkLCBzbyB0aGUgYXJjaGl2ZSBzaG91bGQgZXhpc3Qgc29tZXdoZXJlIG9uIHRoZQotICAgICAgICAjIGRlZmF1bHQgInBhdGgiLgotICAgICAgICBhcmNoaXZlID0gc2VsZi5nZXRfYXJjaGl2ZShtb2RuYW1lKQotICAgICAgICBpZiBhcmNoaXZlIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gMSwgIiIsIHsnX19hcmNoaXZlX18nOmFyY2hpdmV9Ci0KLSAgICBkZWYgZ2V0X2FyY2hpdmUoc2VsZiwgbW9kbmFtZSk6Ci0gICAgICAgICIiIkdldCBhbiBhcmNoaXZlIG9mIG1vZHVsZXMuCi0KLSAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIGxvY2F0ZSBhbiBhcmNoaXZlIGFuZCByZXR1cm4gYSB2YWx1ZSB3aGljaCBjYW4gYmUKLSAgICAgICAgdXNlZCBieSBnZXRfc3ViZmlsZSB0byBsb2FkIG1vZHVsZXMgZnJvbSBpdC4gVGhlIHZhbHVlIG1heSBiZSBhIHNpbXBsZQotICAgICAgICBwYXRobmFtZSwgYW4gb3BlbiBmaWxlLCBvciBhIGNvbXBsZXggb2JqZWN0IHRoYXQgY2FjaGVzIGluZm9ybWF0aW9uCi0gICAgICAgIGZvciBmdXR1cmUgaW1wb3J0cy4KLQotICAgICAgICBSZXR1cm4gTm9uZSBpZiB0aGUgYXJjaGl2ZSB3YXMgbm90IGZvdW5kLgotICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiZ2V0X2FyY2hpdmUgbm90IGltcGxlbWVudGVkIgotCi0gICAgZGVmIGdldF9zdWJmaWxlKHNlbGYsIGFyY2hpdmUsIG1vZG5hbWUpOgotICAgICAgICAiIiJHZXQgY29kZSBmcm9tIGEgc3ViZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGFyY2hpdmUuCi0KLSAgICAgICAgR2l2ZW4gdGhlIHNwZWNpZmllZCBhcmNoaXZlIChhcyByZXR1cm5lZCBieSBnZXRfYXJjaGl2ZSgpKSwgbG9jYXRlCi0gICAgICAgIGFuZCByZXR1cm4gYSBjb2RlIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUgbmFtZS4KLQotICAgICAgICBBIDItdHVwbGUgbWF5IGJlIHJldHVybmVkLCBjb25zaXN0aW5nIG9mIGEgY29kZSBvYmplY3QgYW5kIGEgZGljdAotICAgICAgICBvZiBuYW1lL3ZhbHVlcyB0byBwbGFjZSBpbnRvIHRoZSB0YXJnZXQgbW9kdWxlLgotCi0gICAgICAgIFJldHVybiBOb25lIGlmIHRoZSBzdWJmaWxlIHdhcyBub3QgZm91bmQuCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJnZXRfc3ViZmlsZSBub3QgaW1wbGVtZW50ZWQiCi0KLQotY2xhc3MgUGFja2FnZUFyY2hpdmUoUGFja2FnZUFyY2hpdmVJbXBvcnRlcik6Ci0gICAgIlBhY2thZ2VBcmNoaXZlSW1wb3J0ZXIgc3ViY2xhc3MgdGhhdCByZWZlcnMgdG8gYSBzcGVjaWZpYyBhcmNoaXZlLiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RuYW1lLCBhcmNoaXZlX3BhdGhuYW1lKToKLSAgICAgICAgc2VsZi5fX21vZG5hbWUgPSBtb2RuYW1lCi0gICAgICAgIHNlbGYuX19wYXRoID0gYXJjaGl2ZV9wYXRobmFtZQotCi0gICAgZGVmIGdldF9hcmNoaXZlKHNlbGYsIG1vZG5hbWUpOgotICAgICAgICBpZiBtb2RuYW1lID09IHNlbGYuX19tb2RuYW1lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19wYXRoCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICAjIGdldF9zdWJmaWxlIGlzIHBhc3NlZCB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgYXJjaGl2ZQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgRW11bGF0ZSB0aGUgc3RhbmRhcmQgZGlyZWN0b3J5LWJhc2VkIGltcG9ydCBtZWNoYW5pc20KLSMKLWNsYXNzIERpcmVjdG9yeUltcG9ydGVyKGltcHV0aWwuSW1wb3J0ZXIpOgotICAgICJJbXBvcnRlciBzdWJjbGFzcyB0byBlbXVsYXRlIHRoZSBzdGFuZGFyZCBpbXBvcnRlci4iCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyKToKLSAgICAgICAgc2VsZi5kaXIgPSBkaXIKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBwYXJlbnQsIG1vZG5hbWUsIGZxbmFtZSk6Ci0gICAgICAgIGlmIHBhcmVudDoKLSAgICAgICAgICAgIGRpciA9IHBhcmVudC5fX3BrZ2Rpcl9fCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkaXIgPSBzZWxmLmRpcgotCi0gICAgICAgICMgUmV0dXJuIHRoZSBtb2R1bGUgKGFuZCBvdGhlciBpbmZvKSBpZiBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkCi0gICAgICAgICMgZGlyZWN0b3J5LiBPdGhlcndpc2UsIHJldHVybiBOb25lLgotICAgICAgICByZXR1cm4gX2ZzX2ltcG9ydChkaXIsIG1vZG5hbWUsIGZxbmFtZSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICc8JXMuJXMgZm9yICIlcyIgYXQgMHgleD4nICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZikpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBFbXVsYXRlIHRoZSBzdGFuZGFyZCBwYXRoLXN0eWxlIGltcG9ydCBtZWNoYW5pc20KLSMKLWNsYXNzIFBhdGhJbXBvcnRlcihpbXB1dGlsLkltcG9ydGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1zeXMucGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBwYXJlbnQsIG1vZG5hbWUsIGZxbmFtZSk6Ci0gICAgICAgIGlmIHBhcmVudDoKLSAgICAgICAgICAgICMgd2UgYXJlIGxvb2tpbmcgZm9yIGEgbW9kdWxlIGluc2lkZSBvZiBhIHNwZWNpZmljIHBhY2thZ2UKLSAgICAgICAgICAgIHJldHVybiBfZnNfaW1wb3J0KHBhcmVudC5fX3BrZ2Rpcl9fLCBtb2RuYW1lLCBmcW5hbWUpCi0KLSAgICAgICAgIyBzY2FuIHN5cy5wYXRoLCBsb29raW5nIGZvciB0aGUgcmVxdWVzdGVkIG1vZHVsZQotICAgICAgICBmb3IgZGlyIGluIHNlbGYucGF0aDoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGlyLCBfU3RyaW5nVHlwZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2ZzX2ltcG9ydChkaXIsIG1vZG5hbWUsIGZxbmFtZSkKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgICAjIG5vdCBmb3VuZAotICAgICAgICByZXR1cm4gTm9uZQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWRlZiBfdGVzdF9kaXIoKToKLSAgICAiRGVidWcvdGVzdCBmdW5jdGlvbiB0byBjcmVhdGUgRGlyZWN0b3J5SW1wb3J0ZXJzIGZyb20gc3lzLnBhdGguIgotICAgIGltcHV0aWwuSW1wb3J0TWFuYWdlcigpLmluc3RhbGwoKQotICAgIHBhdGggPSBzeXMucGF0aFs6XQotICAgIHBhdGgucmV2ZXJzZSgpCi0gICAgZm9yIGQgaW4gcGF0aDoKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIERpcmVjdG9yeUltcG9ydGVyKGQpKQotICAgIHN5cy5wYXRoLmluc2VydCgwLCBpbXB1dGlsLkJ1aWx0aW5JbXBvcnRlcigpKQotCi1kZWYgX3Rlc3RfcmV2YW1wKCk6Ci0gICAgIkRlYnVnL3Rlc3QgZnVuY3Rpb24gZm9yIHRoZSByZXZhbXBlZCBpbXBvcnQgc3lzdGVtLiIKLSAgICBpbXB1dGlsLkltcG9ydE1hbmFnZXIoKS5pbnN0YWxsKCkKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgUGF0aEltcG9ydGVyKCkpCi0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIGltcHV0aWwuQnVpbHRpbkltcG9ydGVyKCkpCmRpZmYgLS1naXQgYS9EZW1vL2ltcHV0aWwva25lZS5weSBiL0RlbW8vaW1wdXRpbC9rbmVlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDc2NGRhLi4wMDAwMDAwCi0tLSBhL0RlbW8vaW1wdXRpbC9rbmVlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSIiIkFuIFB5dGhvbiByZS1pbXBsZW1lbnRhdGlvbiBvZiBoaWVyYXJjaGljYWwgbW9kdWxlIGltcG9ydC4KLQotVGhpcyBjb2RlIGlzIGludGVuZGVkIHRvIGJlIHJlYWQsIG5vdCBleGVjdXRlZC4gIEhvd2V2ZXIsIGl0IGRvZXMgd29yawotLS0gYWxsIHlvdSBuZWVkIHRvIGRvIHRvIGVuYWJsZSBpdCBpcyAiaW1wb3J0IGtuZWUiLgotCi0oVGhlIG5hbWUgaXMgYSBwdW4gb24gdGhlIGtsdW5raWVyIHByZWRlY2Vzc29yIG9mIHRoaXMgbW9kdWxlLCAibmkiLikKLQotIiIiCi0KLWltcG9ydCBzeXMsIGltcCwgX19idWlsdGluX18KLQotCi0jIFJlcGxhY2VtZW50IGZvciBfX2ltcG9ydF9fKCkKLWRlZiBpbXBvcnRfaG9vayhuYW1lLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lLCBmcm9tbGlzdD1Ob25lKToKLSAgICBwYXJlbnQgPSBkZXRlcm1pbmVfcGFyZW50KGdsb2JhbHMpCi0gICAgcSwgdGFpbCA9IGZpbmRfaGVhZF9wYWNrYWdlKHBhcmVudCwgbmFtZSkKLSAgICBtID0gbG9hZF90YWlsKHEsIHRhaWwpCi0gICAgaWYgbm90IGZyb21saXN0OgotICAgICAgICByZXR1cm4gcQotICAgIGlmIGhhc2F0dHIobSwgIl9fcGF0aF9fIik6Ci0gICAgICAgIGVuc3VyZV9mcm9tbGlzdChtLCBmcm9tbGlzdCkKLSAgICByZXR1cm4gbQotCi1kZWYgZGV0ZXJtaW5lX3BhcmVudChnbG9iYWxzKToKLSAgICBpZiBub3QgZ2xvYmFscyBvciAgbm90IGdsb2JhbHMuaGFzX2tleSgiX19uYW1lX18iKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBwbmFtZSA9IGdsb2JhbHNbJ19fbmFtZV9fJ10KLSAgICBpZiBnbG9iYWxzLmhhc19rZXkoIl9fcGF0aF9fIik6Ci0gICAgICAgIHBhcmVudCA9IHN5cy5tb2R1bGVzW3BuYW1lXQotICAgICAgICBhc3NlcnQgZ2xvYmFscyBpcyBwYXJlbnQuX19kaWN0X18KLSAgICAgICAgcmV0dXJuIHBhcmVudAotICAgIGlmICcuJyBpbiBwbmFtZToKLSAgICAgICAgaSA9IHBuYW1lLnJmaW5kKCcuJykKLSAgICAgICAgcG5hbWUgPSBwbmFtZVs6aV0KLSAgICAgICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcG5hbWVdCi0gICAgICAgIGFzc2VydCBwYXJlbnQuX19uYW1lX18gPT0gcG5hbWUKLSAgICAgICAgcmV0dXJuIHBhcmVudAotICAgIHJldHVybiBOb25lCi0KLWRlZiBmaW5kX2hlYWRfcGFja2FnZShwYXJlbnQsIG5hbWUpOgotICAgIGlmICcuJyBpbiBuYW1lOgotICAgICAgICBpID0gbmFtZS5maW5kKCcuJykKLSAgICAgICAgaGVhZCA9IG5hbWVbOmldCi0gICAgICAgIHRhaWwgPSBuYW1lW2krMTpdCi0gICAgZWxzZToKLSAgICAgICAgaGVhZCA9IG5hbWUKLSAgICAgICAgdGFpbCA9ICIiCi0gICAgaWYgcGFyZW50OgotICAgICAgICBxbmFtZSA9ICIlcy4lcyIgJSAocGFyZW50Ll9fbmFtZV9fLCBoZWFkKQotICAgIGVsc2U6Ci0gICAgICAgIHFuYW1lID0gaGVhZAotICAgIHEgPSBpbXBvcnRfbW9kdWxlKGhlYWQsIHFuYW1lLCBwYXJlbnQpCi0gICAgaWYgcTogcmV0dXJuIHEsIHRhaWwKLSAgICBpZiBwYXJlbnQ6Ci0gICAgICAgIHFuYW1lID0gaGVhZAotICAgICAgICBwYXJlbnQgPSBOb25lCi0gICAgICAgIHEgPSBpbXBvcnRfbW9kdWxlKGhlYWQsIHFuYW1lLCBwYXJlbnQpCi0gICAgICAgIGlmIHE6IHJldHVybiBxLCB0YWlsCi0gICAgcmFpc2UgSW1wb3J0RXJyb3IsICJObyBtb2R1bGUgbmFtZWQgIiArIHFuYW1lCi0KLWRlZiBsb2FkX3RhaWwocSwgdGFpbCk6Ci0gICAgbSA9IHEKLSAgICB3aGlsZSB0YWlsOgotICAgICAgICBpID0gdGFpbC5maW5kKCcuJykKLSAgICAgICAgaWYgaSA8IDA6IGkgPSBsZW4odGFpbCkKLSAgICAgICAgaGVhZCwgdGFpbCA9IHRhaWxbOmldLCB0YWlsW2krMTpdCi0gICAgICAgIG1uYW1lID0gIiVzLiVzIiAlIChtLl9fbmFtZV9fLCBoZWFkKQotICAgICAgICBtID0gaW1wb3J0X21vZHVsZShoZWFkLCBtbmFtZSwgbSkKLSAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAiICsgbW5hbWUKLSAgICByZXR1cm4gbQotCi1kZWYgZW5zdXJlX2Zyb21saXN0KG0sIGZyb21saXN0LCByZWN1cnNpdmU9MCk6Ci0gICAgZm9yIHN1YiBpbiBmcm9tbGlzdDoKLSAgICAgICAgaWYgc3ViID09ICIqIjoKLSAgICAgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBhbGwgPSBtLl9fYWxsX18KLSAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlbnN1cmVfZnJvbWxpc3QobSwgYWxsLCAxKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgc3ViICE9ICIqIiBhbmQgbm90IGhhc2F0dHIobSwgc3ViKToKLSAgICAgICAgICAgIHN1Ym5hbWUgPSAiJXMuJXMiICUgKG0uX19uYW1lX18sIHN1YikKLSAgICAgICAgICAgIHN1Ym1vZCA9IGltcG9ydF9tb2R1bGUoc3ViLCBzdWJuYW1lLCBtKQotICAgICAgICAgICAgaWYgbm90IHN1Ym1vZDoKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAiICsgc3VibmFtZQotCi1kZWYgaW1wb3J0X21vZHVsZShwYXJ0bmFtZSwgZnFuYW1lLCBwYXJlbnQpOgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2ZxbmFtZV0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICB0cnk6Ci0gICAgICAgIGZwLCBwYXRobmFtZSwgc3R1ZmYgPSBpbXAuZmluZF9tb2R1bGUocGFydG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50IGFuZCBwYXJlbnQuX19wYXRoX18pCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHRyeToKLSAgICAgICAgbSA9IGltcC5sb2FkX21vZHVsZShmcW5hbWUsIGZwLCBwYXRobmFtZSwgc3R1ZmYpCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZnA6IGZwLmNsb3NlKCkKLSAgICBpZiBwYXJlbnQ6Ci0gICAgICAgIHNldGF0dHIocGFyZW50LCBwYXJ0bmFtZSwgbSkKLSAgICByZXR1cm4gbQotCi0KLSMgUmVwbGFjZW1lbnQgZm9yIHJlbG9hZCgpCi1kZWYgcmVsb2FkX2hvb2sobW9kdWxlKToKLSAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCi0gICAgaWYgJy4nIG5vdCBpbiBuYW1lOgotICAgICAgICByZXR1cm4gaW1wb3J0X21vZHVsZShuYW1lLCBuYW1lLCBOb25lKQotICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKLSAgICBwbmFtZSA9IG5hbWVbOmldCi0gICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcG5hbWVdCi0gICAgcmV0dXJuIGltcG9ydF9tb2R1bGUobmFtZVtpKzE6XSwgbmFtZSwgcGFyZW50KQotCi0KLSMgU2F2ZSB0aGUgb3JpZ2luYWwgaG9va3MKLW9yaWdpbmFsX2ltcG9ydCA9IF9fYnVpbHRpbl9fLl9faW1wb3J0X18KLW9yaWdpbmFsX3JlbG9hZCA9IF9fYnVpbHRpbl9fLnJlbG9hZAotCi0jIE5vdyBpbnN0YWxsIG91ciBob29rcwotX19idWlsdGluX18uX19pbXBvcnRfXyA9IGltcG9ydF9ob29rCi1fX2J1aWx0aW5fXy5yZWxvYWQgPSByZWxvYWRfaG9vawpkaWZmIC0tZ2l0IGEvRGVtby9tZDV0ZXN0L21kNWRyaXZlci5weSBiL0RlbW8vbWQ1dGVzdC9tZDVkcml2ZXIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wYXJzZXIvUkVBRE1FIGIvRGVtby9wYXJzZXIvUkVBRE1FCmluZGV4IGE1NzZkMzMuLmZkNWViMjUgMTAwNjQ0Ci0tLSBhL0RlbW8vcGFyc2VyL1JFQURNRQorKysgYi9EZW1vL3BhcnNlci9SRUFETUUKQEAgLTYsMjYgKzYsMjcgQEAKIEZpbGVzOgogLS0tLS0tCiAKLQlGSUxFUwkgICAgIC0tIGxpc3Qgb2YgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJzZXIgbW9kdWxlLgorICAgIEZJTEVTICAgICAgICAtLSBsaXN0IG9mIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGFyc2VyIG1vZHVsZS4KIAotCVJFQURNRQkgICAgIC0tIHRoaXMgZmlsZS4KKyAgICBSRUFETUUgICAgICAgLS0gdGhpcyBmaWxlLgogCi0JZXhhbXBsZS5weSAgIC0tCW1vZHVsZSB0aGF0IHVzZXMgdGhlIGBwYXJzZXInIG1vZHVsZSB0byBleHRyYWN0Ci0JCQlpbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXJzZSB0cmVlIG9mIFB5dGhvbiBzb3VyY2UKLQkJCWNvZGUuCisgICAgZG9jc3RyaW5nLnB5IC0tIHNhbXBsZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIG9ubHkgYSBtb2R1bGUgZG9jc3RyaW5nLgogCi0JZG9jc3RyaW5nLnB5IC0tIHNhbXBsZSBzb3VyY2UgZmlsZSBjb250YWluaW5nIG9ubHkgYSBtb2R1bGUgZG9jc3RyaW5nLgorICAgIGV4YW1wbGUucHkgICAtLSBtb2R1bGUgdGhhdCB1c2VzIHRoZSBgcGFyc2VyJyBtb2R1bGUgdG8gZXh0cmFjdAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXJzZSB0cmVlIG9mIFB5dGhvbiBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgY29kZS4KIAotCXNpbXBsZS5weSAgICAtLSBzYW1wbGUgc291cmNlIGNvbnRhaW5pbmcgYSAic2hvcnQgZm9ybSIgZGVmaW5pdGlvbi4KKyAgICBzaW1wbGUucHkgICAgLS0gc2FtcGxlIHNvdXJjZSBjb250YWluaW5nIGEgInNob3J0IGZvcm0iIGRlZmluaXRpb24uCiAKLQlzb3VyY2UucHkgICAgLS0Jc2FtcGxlIHNvdXJjZSBjb2RlIHVzZWQgdG8gZGVtb25zdHJhdGUgYWJpbGl0eSB0bwotCQkJaGFuZGxlIG5lc3RlZCBjb25zdHJ1Y3RzIGVhc2lseSB1c2luZyB0aGUgZnVuY3Rpb25zCi0JCQlhbmQgY2xhc3NlcyBpbiBleGFtcGxlLnB5LgorICAgIHNvdXJjZS5weSAgICAtLSBzYW1wbGUgc291cmNlIGNvZGUgdXNlZCB0byBkZW1vbnN0cmF0ZSBhYmlsaXR5IHRvCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSBuZXN0ZWQgY29uc3RydWN0cyBlYXNpbHkgdXNpbmcgdGhlIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAgICBhbmQgY2xhc3NlcyBpbiBleGFtcGxlLnB5LgogCi0JdGVzdF9wYXJzZXIucHkgIHByb2dyYW0gdG8gcHV0IHRoZSBwYXJzZXIgbW9kdWxlIHRocm91Z2ggaXRzIHBhY2VzLgorICAgIHRlc3RfcGFyc2VyLnB5ICBwcm9ncmFtIHRvIHB1dCB0aGUgcGFyc2VyIG1vZHVsZSB0aHJvdWdoIGl0cyBwYWNlcy4KIAotCXVucGFyc2UucHkJQVNUICgyLjUpIGJhc2VkIGV4YW1wbGUgdG8gcmVjcmVhdGUgc291cmNlIGNvZGUKLQkJCWZyb20gYW4gQVNULiBUaGlzIGlzIGluY29tcGxldGU7IGNvbnRyaWJ1dGlvbnMKLQkJCWFyZSB3ZWxjb21lLgorICAgIHRlc3RfdW5wYXJzZS5weSB0ZXN0cyBmb3IgdGhlIHVucGFyc2UgbW9kdWxlCisKKyAgICB1bnBhcnNlLnB5ICAgICAgQVNUICgyLjcpIGJhc2VkIGV4YW1wbGUgdG8gcmVjcmVhdGUgc291cmNlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBhbiBBU1QuCiAKIEVuam95IQpkaWZmIC0tZ2l0IGEvRGVtby9wYXJzZXIvdGVzdF9wYXJzZXIucHkgYi9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQppbmRleCBiZTM5YmNhLi5kYjRlNmZlIDEwMDc1NQotLS0gYS9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQorKysgYi9EZW1vL3BhcnNlci90ZXN0X3BhcnNlci5weQpAQCAtMTEsMTkgKzExLDE5IEBACiAgICAgZ2xvYmFsIF9udW1GYWlsZWQKICAgICBwcmludCAnLS0tLScsIGZpbGVOYW1lLAogICAgIHRyeToKLSAgICAgICAgYXN0ID0gcGFyc2VyLnN1aXRlKHQpCi0gICAgICAgIHR1cCA9IHBhcnNlci5hc3QydHVwbGUoYXN0KQotICAgICAgICAjIHRoaXMgZGlzY2FyZHMgdGhlIGZpcnN0IEFTVDsgYSBodWdlIG1lbW9yeSBzYXZpbmdzIHdoZW4gcnVubmluZworICAgICAgICBzdCA9IHBhcnNlci5zdWl0ZSh0KQorICAgICAgICB0dXAgPSBwYXJzZXIuc3QydHVwbGUoc3QpCisgICAgICAgICMgdGhpcyBkaXNjYXJkcyB0aGUgZmlyc3QgU1Q7IGEgaHVnZSBtZW1vcnkgc2F2aW5ncyB3aGVuIHJ1bm5pbmcKICAgICAgICAgIyBhZ2FpbnN0IGEgbGFyZ2Ugc291cmNlIGZpbGUgbGlrZSBUa2ludGVyLnB5LgotICAgICAgICBhc3QgPSBOb25lCi0gICAgICAgIG5ldyA9IHBhcnNlci50dXBsZTJhc3QodHVwKQorICAgICAgICBzdCA9IE5vbmUKKyAgICAgICAgbmV3ID0gcGFyc2VyLnR1cGxlMnN0KHR1cCkKICAgICBleGNlcHQgcGFyc2VyLlBhcnNlckVycm9yLCBlcnI6CiAgICAgICAgIHByaW50CiAgICAgICAgIHByaW50ICdwYXJzZXIgbW9kdWxlIHJhaXNlZCBleGNlcHRpb24gb24gaW5wdXQgZmlsZScsIGZpbGVOYW1lICsgJzonCiAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICBfbnVtRmFpbGVkID0gX251bUZhaWxlZCArIDEKICAgICBlbHNlOgotICAgICAgICBpZiB0dXAgIT0gcGFyc2VyLmFzdDJ0dXBsZShuZXcpOgorICAgICAgICBpZiB0dXAgIT0gcGFyc2VyLnN0MnR1cGxlKG5ldyk6CiAgICAgICAgICAgICBwcmludAogICAgICAgICAgICAgcHJpbnQgJ3BhcnNlciBtb2R1bGUgZmFpbGVkIG9uIGlucHV0IGZpbGUnLCBmaWxlTmFtZQogICAgICAgICAgICAgX251bUZhaWxlZCA9IF9udW1GYWlsZWQgKyAxCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci90ZXN0X3VucGFyc2UucHkgYi9EZW1vL3BhcnNlci90ZXN0X3VucGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjZmQzNwotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vcGFyc2VyL3Rlc3RfdW5wYXJzZS5weQpAQCAtMCwwICsxLDIxMyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdG9rZW5pemUKK2ltcG9ydCBhc3QKK2ltcG9ydCB1bnBhcnNlCisKK2RlZiByZWFkX3B5ZmlsZShmaWxlbmFtZSk6CisgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIFB5dGhvbiBzb3VyY2UgZmlsZSAoYXMgYQorICAgIHN0cmluZyksIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZpbGUgZW5jb2RpbmcuIiIiCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAiciIpIGFzIHB5ZmlsZToKKyAgICAgICAgc291cmNlID0gcHlmaWxlLnJlYWQoKQorICAgIHJldHVybiBzb3VyY2UKKworZm9yX2Vsc2UgPSAiIiJcCitkZWYgZigpOgorICAgIGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICB5ID0gMgorICAgIHogPSAzCisiIiIKKword2hpbGVfZWxzZSA9ICIiIlwKK2RlZiBnKCk6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICB5ID0gMgorICAgIHogPSAzCisiIiIKKworcmVsYXRpdmVfaW1wb3J0ID0gIiIiXAorZnJvbSAuIGltcG9ydCBmcmVkCitmcm9tIC4uIGltcG9ydCBiYXJuZXkKK2Zyb20gLmF1c3RyYWxpYSBpbXBvcnQgc2hyaW1wIGFzIHByYXducworIiIiCisKK2NsYXNzX2RlY29yYXRvciA9ICIiIlwKK0BmMShhcmcpCitAZjIKK2NsYXNzIEZvbzogcGFzcworIiIiCisKK2VsaWYxID0gIiIiXAoraWYgY29uZDE6CisgICAgc3VpdGUxCitlbGlmIGNvbmQyOgorICAgIHN1aXRlMgorZWxzZToKKyAgICBzdWl0ZTMKKyIiIgorCitlbGlmMiA9ICIiIlwKK2lmIGNvbmQxOgorICAgIHN1aXRlMQorZWxpZiBjb25kMjoKKyAgICBzdWl0ZTIKKyIiIgorCit0cnlfZXhjZXB0X2ZpbmFsbHkgPSAiIiJcCit0cnk6CisgICAgc3VpdGUxCitleGNlcHQgZXgxOgorICAgIHN1aXRlMgorZXhjZXB0IGV4MjoKKyAgICBzdWl0ZTMKK2Vsc2U6CisgICAgc3VpdGU0CitmaW5hbGx5OgorICAgIHN1aXRlNQorIiIiCisKK2NsYXNzIEFTVFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0QVNURXF1YWwoc2VsZiwgYXN0MSwgYXN0Mik6CisgICAgICAgIGR1bXAxID0gYXN0LmR1bXAoYXN0MSkKKyAgICAgICAgZHVtcDIgPSBhc3QuZHVtcChhc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKGFzdDEpLCBhc3QuZHVtcChhc3QyKSkKKworICAgIGRlZiBjaGVja19yb3VuZHRyaXAoc2VsZiwgY29kZTEsIGZpbGVuYW1lPSJpbnRlcm5hbCIpOgorICAgICAgICBhc3QxID0gY29tcGlsZShjb2RlMSwgZmlsZW5hbWUsICJleGVjIiwgYXN0LlB5Q0ZfT05MWV9BU1QpCisgICAgICAgIHVucGFyc2VfYnVmZmVyID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdW5wYXJzZS5VbnBhcnNlcihhc3QxLCB1bnBhcnNlX2J1ZmZlcikKKyAgICAgICAgY29kZTIgPSB1bnBhcnNlX2J1ZmZlci5nZXR2YWx1ZSgpCisgICAgICAgIGFzdDIgPSBjb21waWxlKGNvZGUyLCBmaWxlbmFtZSwgImV4ZWMiLCBhc3QuUHlDRl9PTkxZX0FTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRBU1RFcXVhbChhc3QxLCBhc3QyKQorCitjbGFzcyBVbnBhcnNlVGVzdENhc2UoQVNUVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHNwZWNpZmljIGJ1Z3MgZm91bmQgaW4gZWFybGllciB2ZXJzaW9ucyBvZiB1bnBhcnNlCisKKyAgICBkZWYgdGVzdF9kZWxfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVsIHgsIHksIHoiKQorCisgICAgZGVmIHRlc3Rfc2hpZnRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiNDUgPDwgMiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIxMyA+PiA3IikKKworICAgIGRlZiB0ZXN0X2Zvcl9lbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChmb3JfZWxzZSkKKworICAgIGRlZiB0ZXN0X3doaWxlX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHdoaWxlX2Vsc2UpCisKKyAgICBkZWYgdGVzdF91bmFyeV9wYXJlbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIoLTEpKio3IikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIigtMS4pKio4IikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIigtMWopKio2IikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIm5vdCBUcnVlIG9yIEZhbHNlIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIlRydWUgb3Igbm90IEZhbHNlIikKKworICAgIGRlZiB0ZXN0X2ludGVnZXJfcGFyZW5zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiMyAuX19hYnNfXygpIikKKworICAgIGRlZiB0ZXN0X2h1Z2VfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIxZTEwMDAiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTFlMTAwMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIxZTEwMDBqIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0xZTEwMDBqIikKKworICAgIGRlZiB0ZXN0X21pbl9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHN0cigtc3lzLm1heGludC0xKSkKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0oJXMpIiAlIChzeXMubWF4aW50ICsgMSkpCisKKyAgICBkZWYgdGVzdF9pbWFnaW5hcnlfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCI3aiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItN2oiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSg3aikiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiMGoiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTBqIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0oMGopIikKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX3plcm8oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItKDApIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0wYjAiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSgwYjApIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0wbzAiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSgwbzApIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0weDAiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLSgweDApIikKKworICAgIGRlZiB0ZXN0X2xhbWJkYV9wYXJlbnRoZXNlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIihsYW1iZGE6IGludCkoKSIpCisKKyAgICBkZWYgdGVzdF9jaGFpbmVkX2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiMSA8IDQgPD0gNSIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJhIGlzIGIgaXMgYyBpcyBub3QgZCIpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZigpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGEpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGIgPSAyKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZihhLCBiKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZihhLCBiID0gMik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYSA9IDUsIGIgPSAyKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZigqYXJncywgKiprd2FyZ3MpOiBwYXNzIikKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAocmVsYXRpdmVfaW1wb3J0KQorCisgICAgZGVmIHRlc3RfYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJiJzEyMyciKQorCisgICAgZGVmIHRlc3Rfc2V0X2xpdGVyYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJ7J2EnLCAnYicsICdjJ30iKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbXByZWhlbnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJ7eCBmb3IgeCBpbiByYW5nZSg1KX0iKQorCisgICAgZGVmIHRlc3RfZGljdF9jb21wcmVoZW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgie3g6IHgqeCBmb3IgeCBpbiByYW5nZSgxMCl9IikKKworICAgIGRlZiB0ZXN0X2NsYXNzX2RlY29yYXRvcnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGNsYXNzX2RlY29yYXRvcikKKworICAgIGRlZiB0ZXN0X2VsaWZzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChlbGlmMSkKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoZWxpZjIpCisKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0X2ZpbmFsbHkoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHRyeV9leGNlcHRfZmluYWxseSkKKworY2xhc3MgRGlyZWN0b3J5VGVzdENhc2UoQVNUVGVzdENhc2UpOgorICAgICIiIlRlc3Qgcm91bmR0cmlwIGJlaGF2aW91ciBvbiBhbGwgZmlsZXMgaW4gTGliIGFuZCBMaWIvdGVzdC4iIiIKKworICAgICMgdGVzdCBkaXJlY3RvcmllcywgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIGRpc3RyaWJ1dGlvbgorICAgIHRlc3RfZGlyZWN0b3JpZXMgPSAnTGliJywgb3MucGF0aC5qb2luKCdMaWInLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9maWxlcyhzZWxmKToKKyAgICAgICAgIyBnZXQgbmFtZXMgb2YgZmlsZXMgdG8gdGVzdAorICAgICAgICBkaXN0X2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBvcy5wYXJkaXIsIG9zLnBhcmRpcikKKworICAgICAgICBuYW1lcyA9IFtdCisgICAgICAgIGZvciBkIGluIHNlbGYudGVzdF9kaXJlY3RvcmllczoKKyAgICAgICAgICAgIHRlc3RfZGlyID0gb3MucGF0aC5qb2luKGRpc3RfZGlyLCBkKQorICAgICAgICAgICAgZm9yIG4gaW4gb3MubGlzdGRpcih0ZXN0X2Rpcik6CisgICAgICAgICAgICAgICAgaWYgbi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBuLnN0YXJ0c3dpdGgoJ2JhZCcpOgorICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQob3MucGF0aC5qb2luKHRlc3RfZGlyLCBuKSkKKworICAgICAgICBmb3IgZmlsZW5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgnVGVzdGluZyAlcycgJSBmaWxlbmFtZSkKKyAgICAgICAgICAgIHNvdXJjZSA9IHJlYWRfcHlmaWxlKGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc291cmNlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVucGFyc2VUZXN0Q2FzZSwgRGlyZWN0b3J5VGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3RleGlwcmUuZGF0IGIvRGVtby9wYXJzZXIvdGV4aXByZS5kYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDAzYTYuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvdGV4aXByZS5kYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotXGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCi1AYyAlKipzdGFydCBvZiBoZWFkZXIKLUBzZXRmaWxlbmFtZSBwYXJzZXIuaW5mbwotQHNldHRpdGxlIFB5dGhvbiBQYXJzZXIgTW9kdWxlIFJlZmVyZW5jZQotQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAotQGZvb3Rub3Rlc3R5bGUgZW5kCi1AYyAlKiplbmQgb2YgaGVhZGVyCi0KLUBpZmluZm8KLVRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMKLXB1Ymxpc2hlZCBieSB0aGUgb3B0aW9uYWwgQGNvZGV7cGFyc2VyfSBtb2R1bGUgYW5kIGdpdmVzIGV4YW1wbGVzIG9mCi1ob3cgdGhleSBtYXkgYmUgdXNlZC4gIEl0IGNvbnRhaW5zIHRoZSBzYW1lIHRleHQgYXMgdGhlIGNoYXB0ZXIgb24gdGhlCi1AY29kZXtwYXJzZXJ9IG1vZHVsZSBpbiB0aGUgQGNpdGV7UHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlfSwgYnV0IGlzCi1wcmVzZW50ZWQgYXMgYSBzZXBhcmF0ZSBkb2N1bWVudC4KLQotQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBGcmVkIEwuIERyYWtlLCBKci4sIFJlc3RvbiwgVmlyZ2luaWEsIFVTQSwgYW5kCi1WaXJnaW5pYSBQb2x5dGVjaG5pYyBJbnN0aXR1dGUgYW5kIFN0YXRlIFVuaXZlcnNpdHksIEJsYWNrc2J1cmcsCi1WaXJnaW5pYSwgVVNBLiAgUG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIGNvcHlyaWdodCAxOTkxLTE5OTUgYnkKLVN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMuICBDb3B5aW5nIGlzCi1wZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBQeXRob24gZGlzdHJpYnV0aW9uLAotd2l0aCB0aGUgYWRkaXRpb25hbCByZXN0cmljdGlvbiB0aGF0IHRoaXMgYWRkaXRpb25hbCBub3RpY2UgYmUgaW5jbHVkZWQKLWFuZCBtYWludGFpbmVkIG9uIGFsbCBkaXN0cmlidXRlZCBjb3BpZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIEZyZWQgTC4gRHJha2UsIEpyLiBhbmQKLVZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSBub3QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQotd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1GUkVEIEwuIERSQUtFLCBKUi4gQU5EIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQgU1RBVEUKLVVOSVZFUlNJVFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKLUlOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KLUVWRU5UIFNIQUxMIEZSRUQgTC4gRFJBS0UsIEpSLiBPUiBWSVJHSU5JQSBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgQU5ECi1TVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi1AZW5kIGlmaW5mbwotCi1AdGl0bGVwYWdlCi1AdGl0bGUgUHl0aG9uIFBhcnNlciBNb2R1bGUgUmVmZXJlbmNlCi1AYXV0aG9yIEZyZWQgTC4gRHJha2UsIEpyLgotCi1AYyAgVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgc3RhcnQgdGhlIGNvcHlyaWdodCBwYWdlLgotQHBhZ2UKLUB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKLUNvcHlyaWdodCAxOTk1LTE5OTYgYnkgRnJlZCBMLiBEcmFrZSwgSnIuLCBSZXN0b24sIFZpcmdpbmlhLCBVU0EsIGFuZAotVmlyZ2luaWEgUG9seXRlY2huaWMgSW5zdGl0dXRlIGFuZCBTdGF0ZSBVbml2ZXJzaXR5LCBCbGFja3NidXJnLAotVmlyZ2luaWEsIFVTQS4gIFBvcnRpb25zIG9mIHRoZSBzb2Z0d2FyZSBjb3B5cmlnaHQgMTk5MS0xOTk1IGJ5Ci1TdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwgVGhlIE5ldGhlcmxhbmRzLiAgQ29weWluZyBpcwotcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gUHl0aG9uIGRpc3RyaWJ1dGlvbiwKLXdpdGggdGhlIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gdGhhdCB0aGlzIGFkZGl0aW9uYWwgbm90aWNlIGJlIGluY2x1ZGVkCi1hbmQgbWFpbnRhaW5lZCBvbiBhbGwgZGlzdHJpYnV0ZWQgY29waWVzLgotCi1AY2VudGVyIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIEZyZWQgTC4gRHJha2UsIEpyLiBhbmQKLVZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSBub3QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQotd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1GUkVEIEwuIERSQUtFLCBKUi4gQU5EIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQgU1RBVEUKLVVOSVZFUlNJVFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKLUlOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KLUVWRU5UIFNIQUxMIEZSRUQgTC4gRFJBS0UsIEpSLiBPUiBWSVJHSU5JQSBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgQU5ECi1TVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi1AZW5kIHRpdGxlcGFnZQotCi0KLUBub2RlIFRvcCwgT3ZlcnZpZXcsIChkaXIpLCAoZGlyKQotQHRvcCBUaGUgUHl0aG9uIFBhcnNlciBNb2R1bGUKLQotQGlmaW5mbwotVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcwotcHVibGlzaGVkIGJ5IHRoZSBvcHRpb25hbCBAY29kZXtwYXJzZXJ9IG1vZHVsZSBhbmQgZ2l2ZXMgZXhhbXBsZXMgb2YKLWhvdyB0aGV5IG1heSBiZSB1c2VkLiAgSXQgY29udGFpbnMgdGhlIHNhbWUgdGV4dCBhcyB0aGUgY2hhcHRlciBvbiB0aGUKLUBjb2Rle3BhcnNlcn0gbW9kdWxlIGluIHRoZSBAY2l0ZXtQeXRob24gTGlicmFyeSBSZWZlcmVuY2V9LCBidXQgaXMKLXByZXNlbnRlZCBhcyBhIHNlcGFyYXRlIGRvY3VtZW50LgotCi1UaGlzIHZlcnNpb24gY29ycmVzcG9uZHMgdG8gUHl0aG9uIHZlcnNpb24gMS40ICgxIFNlcHQuIDE5OTYpLgotCi1AZW5kIGlmaW5mbwotCi1AYyBwbGFjZWhvbGRlciBmb3IgdGhlIG1hc3RlciBtZW51IC0tIHBhdGNoZWQgYnkgdGV4aW5mby1hbGwtbWVudXMtdXBkYXRlCi1AbWVudQotQGVuZCBtZW51CmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci91bnBhcnNlLnB5IGIvRGVtby9wYXJzZXIvdW5wYXJzZS5weQppbmRleCBiZmI4YTA5Li4xYjFmZjI5IDEwMDY0NAotLS0gYS9EZW1vL3BhcnNlci91bnBhcnNlLnB5CisrKyBiL0RlbW8vcGFyc2VyL3VucGFyc2UucHkKQEAgLTEsMTUgKzEsMTkgQEAKICJVc2FnZTogdW5wYXJzZS5weSA8cGF0aCB0byBzb3VyY2UgZmlsZT4iCiBpbXBvcnQgc3lzCi1pbXBvcnQgX2FzdAoraW1wb3J0IGFzdAogaW1wb3J0IGNTdHJpbmdJTwogaW1wb3J0IG9zCiAKKyMgTGFyZ2UgZmxvYXQgYW5kIGltYWdpbmFyeSBsaXRlcmFscyBnZXQgdHVybmVkIGludG8gaW5maW5pdGllcyBpbiB0aGUgQVNULgorIyBXZSB1bnBhcnNlIHRob3NlIGluZmluaXRpZXMgdG8gSU5GU1RSLgorSU5GU1RSID0gIjFlIiArIHJlcHIoc3lzLmZsb2F0X2luZm8ubWF4XzEwX2V4cCArIDEpCisKIGRlZiBpbnRlcmxlYXZlKGludGVyLCBmLCBzZXEpOgogICAgICIiIkNhbGwgZiBvbiBlYWNoIGl0ZW0gaW4gc2VxLCBjYWxsaW5nIGludGVyKCkgaW4gYmV0d2Vlbi4KICAgICAiIiIKICAgICBzZXEgPSBpdGVyKHNlcSkKICAgICB0cnk6Ci0gICAgICAgIGYoc2VxLm5leHQoKSkKKyAgICAgICAgZihuZXh0KHNlcSkpCiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgIHBhc3MKICAgICBlbHNlOgpAQCAtMjAsMTUgKzI0LDE2IEBACiBjbGFzcyBVbnBhcnNlcjoKICAgICAiIiJNZXRob2RzIGluIHRoaXMgY2xhc3MgcmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gQVNUIGFuZAogICAgIG91dHB1dCBzb3VyY2UgY29kZSBmb3IgdGhlIGFic3RyYWN0IHN5bnRheDsgb3JpZ2luYWwgZm9ybWF0dGluZwotICAgIGlzIGRpc3JlZ2FyZ2VkLiAiIiIKKyAgICBpcyBkaXNyZWdhcmRlZC4gIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdHJlZSwgZmlsZSA9IHN5cy5zdGRvdXQpOgogICAgICAgICAiIiJVbnBhcnNlcih0cmVlLCBmaWxlPXN5cy5zdGRvdXQpIC0+IE5vbmUuCiAgICAgICAgICBQcmludCB0aGUgc291cmNlIGZvciB0cmVlIHRvIGZpbGUuIiIiCiAgICAgICAgIHNlbGYuZiA9IGZpbGUKKyAgICAgICAgc2VsZi5mdXR1cmVfaW1wb3J0cyA9IFtdCiAgICAgICAgIHNlbGYuX2luZGVudCA9IDAKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0cmVlKQotICAgICAgICBwcmludCA+PnNlbGYuZiwiIgorICAgICAgICBzZWxmLmYud3JpdGUoIiIpCiAgICAgICAgIHNlbGYuZi5mbHVzaCgpCiAKICAgICBkZWYgZmlsbChzZWxmLCB0ZXh0ID0gIiIpOgpAQCAtNzksMTEgKzg0LDE2IEBACiAgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCBzZWxmLmRpc3BhdGNoLCB0Lm5hbWVzKQogCiAgICAgZGVmIF9JbXBvcnRGcm9tKHNlbGYsIHQpOgorICAgICAgICAjIEEgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBtYXkgYWZmZWN0IHVucGFyc2luZywgc28gcmVjb3JkIGl0LgorICAgICAgICBpZiB0Lm1vZHVsZSBhbmQgdC5tb2R1bGUgPT0gJ19fZnV0dXJlX18nOgorICAgICAgICAgICAgc2VsZi5mdXR1cmVfaW1wb3J0cy5leHRlbmQobi5uYW1lIGZvciBuIGluIHQubmFtZXMpCisKICAgICAgICAgc2VsZi5maWxsKCJmcm9tICIpCi0gICAgICAgIHNlbGYud3JpdGUodC5tb2R1bGUpCisgICAgICAgIHNlbGYud3JpdGUoIi4iICogdC5sZXZlbCkKKyAgICAgICAgaWYgdC5tb2R1bGU6CisgICAgICAgICAgICBzZWxmLndyaXRlKHQubW9kdWxlKQogICAgICAgICBzZWxmLndyaXRlKCIgaW1wb3J0ICIpCiAgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCBzZWxmLmRpc3BhdGNoLCB0Lm5hbWVzKQotICAgICAgICAjIFhYWChqcGUpIHdoYXQgaXMgbGV2ZWwgZm9yPwogCiAgICAgZGVmIF9Bc3NpZ24oc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgpCkBAIC0xMTUsNyArMTI1LDcgQEAKIAogICAgIGRlZiBfRGVsZXRlKHNlbGYsIHQpOgogICAgICAgICBzZWxmLmZpbGwoImRlbCAiKQotICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGFyZ2V0cykKKyAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQudGFyZ2V0cykKIAogICAgIGRlZiBfQXNzZXJ0KHNlbGYsIHQpOgogICAgICAgICBzZWxmLmZpbGwoImFzc2VydCAiKQpAQCAtMTg2LDEwICsxOTYsMTQgQEAKICAgICAgICAgICAgIHNlbGYubGVhdmUoKQogCiAgICAgZGVmIF9UcnlGaW5hbGx5KHNlbGYsIHQpOgotICAgICAgICBzZWxmLmZpbGwoInRyeSIpCi0gICAgICAgIHNlbGYuZW50ZXIoKQotICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKLSAgICAgICAgc2VsZi5sZWF2ZSgpCisgICAgICAgIGlmIGxlbih0LmJvZHkpID09IDEgYW5kIGlzaW5zdGFuY2UodC5ib2R5WzBdLCBhc3QuVHJ5RXhjZXB0KToKKyAgICAgICAgICAgICMgdHJ5LWV4Y2VwdC1maW5hbGx5CisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlsbCgidHJ5IikKKyAgICAgICAgICAgIHNlbGYuZW50ZXIoKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgICAgICBzZWxmLmxlYXZlKCkKIAogICAgICAgICBzZWxmLmZpbGwoImZpbmFsbHkiKQogICAgICAgICBzZWxmLmVudGVyKCkKQEAgLTIwMiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiICIpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudHlwZSkKICAgICAgICAgaWYgdC5uYW1lOgotICAgICAgICAgICAgc2VsZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgc2VsZi53cml0ZSgiIGFzICIpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQubmFtZSkKICAgICAgICAgc2VsZi5lbnRlcigpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQpAQCAtMjEwLDYgKzIyNCw5IEBACiAKICAgICBkZWYgX0NsYXNzRGVmKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCJcbiIpCisgICAgICAgIGZvciBkZWNvIGluIHQuZGVjb3JhdG9yX2xpc3Q6CisgICAgICAgICAgICBzZWxmLmZpbGwoIkAiKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChkZWNvKQogICAgICAgICBzZWxmLmZpbGwoImNsYXNzICIrdC5uYW1lKQogICAgICAgICBpZiB0LmJhc2VzOgogICAgICAgICAgICAgc2VsZi53cml0ZSgiKCIpCkBAIC0yNDUsMTUgKzI2MiwyNCBAQAogICAgICAgICAgICAgc2VsZi5maWxsKCJlbHNlIikKICAgICAgICAgICAgIHNlbGYuZW50ZXIoKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9yZWxzZSkKLSAgICAgICAgICAgIHNlbGYubGVhdmUKKyAgICAgICAgICAgIHNlbGYubGVhdmUoKQogCiAgICAgZGVmIF9JZihzZWxmLCB0KToKICAgICAgICAgc2VsZi5maWxsKCJpZiAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGVzdCkKICAgICAgICAgc2VsZi5lbnRlcigpCi0gICAgICAgICMgWFhYIGVsaWY/CiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQogICAgICAgICBzZWxmLmxlYXZlKCkKKyAgICAgICAgIyBjb2xsYXBzZSBuZXN0ZWQgaWZzIGludG8gZXF1aXZhbGVudCBlbGlmcy4KKyAgICAgICAgd2hpbGUgKHQub3JlbHNlIGFuZCBsZW4odC5vcmVsc2UpID09IDEgYW5kCisgICAgICAgICAgICAgICBpc2luc3RhbmNlKHQub3JlbHNlWzBdLCBhc3QuSWYpKToKKyAgICAgICAgICAgIHQgPSB0Lm9yZWxzZVswXQorICAgICAgICAgICAgc2VsZi5maWxsKCJlbGlmICIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGVzdCkKKyAgICAgICAgICAgIHNlbGYuZW50ZXIoKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgICAgICBzZWxmLmxlYXZlKCkKKyAgICAgICAgIyBmaW5hbCBlbHNlCiAgICAgICAgIGlmIHQub3JlbHNlOgogICAgICAgICAgICAgc2VsZi5maWxsKCJlbHNlIikKICAgICAgICAgICAgIHNlbGYuZW50ZXIoKQpAQCAtMjcwLDcgKzI5Niw3IEBACiAgICAgICAgICAgICBzZWxmLmZpbGwoImVsc2UiKQogICAgICAgICAgICAgc2VsZi5lbnRlcigpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3JlbHNlKQotICAgICAgICAgICAgc2VsZi5sZWF2ZQorICAgICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICBkZWYgX1dpdGgoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgid2l0aCAiKQpAQCAtMjg0LDcgKzMxMCwxNyBAQAogCiAgICAgIyBleHByCiAgICAgZGVmIF9TdHIoc2VsZiwgdHJlZSk6Ci0gICAgICAgIHNlbGYud3JpdGUocmVwcih0cmVlLnMpKQorICAgICAgICAjIGlmIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscyBpcyBpbiBlZmZlY3QsCisgICAgICAgICMgdGhlbiB3ZSB3YW50IHRvIG91dHB1dCBzdHJpbmcgbGl0ZXJhbHMgdXNpbmcgYSAnYicgcHJlZml4CisgICAgICAgICMgYW5kIHVuaWNvZGUgbGl0ZXJhbHMgd2l0aCBubyBwcmVmaXguCisgICAgICAgIGlmICJ1bmljb2RlX2xpdGVyYWxzIiBub3QgaW4gc2VsZi5mdXR1cmVfaW1wb3J0czoKKyAgICAgICAgICAgIHNlbGYud3JpdGUocmVwcih0cmVlLnMpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHJlZS5zLCBzdHIpOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiYiIgKyByZXByKHRyZWUucykpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0cmVlLnMsIHVuaWNvZGUpOgorICAgICAgICAgICAgc2VsZi53cml0ZShyZXByKHRyZWUucykubHN0cmlwKCJ1IikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJzaG91bGRuJ3QgZ2V0IGhlcmUiCiAKICAgICBkZWYgX05hbWUoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5pZCkKQEAgLTI5NSw3ICszMzEsMTQgQEAKICAgICAgICAgc2VsZi53cml0ZSgiYCIpCiAKICAgICBkZWYgX051bShzZWxmLCB0KToKLSAgICAgICAgc2VsZi53cml0ZShyZXByKHQubikpCisgICAgICAgIHJlcHJfbiA9IHJlcHIodC5uKQorICAgICAgICAjIFBhcmVudGhlc2l6ZSBuZWdhdGl2ZSBudW1iZXJzLCB0byBhdm9pZCB0dXJuaW5nICgtMSkqKjIgaW50byAtMSoqMi4KKyAgICAgICAgaWYgcmVwcl9uLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIigiKQorICAgICAgICAjIFN1YnN0aXR1dGUgb3ZlcmZsb3dpbmcgZGVjaW1hbCBsaXRlcmFsIGZvciBBU1QgaW5maW5pdGllcy4KKyAgICAgICAgc2VsZi53cml0ZShyZXByX24ucmVwbGFjZSgiaW5mIiwgSU5GU1RSKSkKKyAgICAgICAgaWYgcmVwcl9uLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIikiKQogCiAgICAgZGVmIF9MaXN0KHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCJbIikKQEAgLTMxNiw2ICszNTksMjIgQEAKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZ2VuKQogICAgICAgICBzZWxmLndyaXRlKCIpIikKIAorICAgIGRlZiBfU2V0Q29tcChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZSgieyIpCisgICAgICAgIHNlbGYuZGlzcGF0Y2godC5lbHQpCisgICAgICAgIGZvciBnZW4gaW4gdC5nZW5lcmF0b3JzOgorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChnZW4pCisgICAgICAgIHNlbGYud3JpdGUoIn0iKQorCisgICAgZGVmIF9EaWN0Q29tcChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZSgieyIpCisgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rZXkpCisgICAgICAgIHNlbGYud3JpdGUoIjogIikKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhbHVlKQorICAgICAgICBmb3IgZ2VuIGluIHQuZ2VuZXJhdG9yczoKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZ2VuKQorICAgICAgICBzZWxmLndyaXRlKCJ9IikKKwogICAgIGRlZiBfY29tcHJlaGVuc2lvbihzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSgiIGZvciAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGFyZ2V0KQpAQCAtMzM0LDEzICszOTMsMjAgQEAKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9yZWxzZSkKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKKyAgICBkZWYgX1NldChzZWxmLCB0KToKKyAgICAgICAgYXNzZXJ0KHQuZWx0cykgIyBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQKKyAgICAgICAgc2VsZi53cml0ZSgieyIpCisgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCBzZWxmLmRpc3BhdGNoLCB0LmVsdHMpCisgICAgICAgIHNlbGYud3JpdGUoIn0iKQorCiAgICAgZGVmIF9EaWN0KHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCJ7IikKLSAgICAgICAgZGVmIHdyaXRlbSgoaywgdikpOgorICAgICAgICBkZWYgd3JpdGVfcGFpcihwYWlyKToKKyAgICAgICAgICAgIChrLCB2KSA9IHBhaXIKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goaykKICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godikKLSAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHdyaXRlbSwgemlwKHQua2V5cywgdC52YWx1ZXMpKQorICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgd3JpdGVfcGFpciwgemlwKHQua2V5cywgdC52YWx1ZXMpKQogICAgICAgICBzZWxmLndyaXRlKCJ9IikKIAogICAgIGRlZiBfVHVwbGUoc2VsZiwgdCk6CkBAIC0zNTUsMTMgKzQyMSwyNCBAQAogCiAgICAgdW5vcCA9IHsiSW52ZXJ0IjoifiIsICJOb3QiOiAibm90IiwgIlVBZGQiOiIrIiwgIlVTdWIiOiItIn0KICAgICBkZWYgX1VuYXJ5T3Aoc2VsZiwgdCk6Ci0gICAgICAgIHNlbGYud3JpdGUoc2VsZi51bm9wW3Qub3AuX19jbGFzc19fLl9fbmFtZV9fXSkKICAgICAgICAgc2VsZi53cml0ZSgiKCIpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2godC5vcGVyYW5kKQorICAgICAgICBzZWxmLndyaXRlKHNlbGYudW5vcFt0Lm9wLl9fY2xhc3NfXy5fX25hbWVfX10pCisgICAgICAgIHNlbGYud3JpdGUoIiAiKQorICAgICAgICAjIElmIHdlJ3JlIGFwcGx5aW5nIHVuYXJ5IG1pbnVzIHRvIGEgbnVtYmVyLCBwYXJlbnRoZXNpemUgdGhlIG51bWJlci4KKyAgICAgICAgIyBUaGlzIGlzIG5lY2Vzc2FyeTogLTIxNDc0ODM2NDggaXMgZGlmZmVyZW50IGZyb20gLSgyMTQ3NDgzNjQ4KSBvbgorICAgICAgICAjIGEgMzItYml0IG1hY2hpbmUgKHRoZSBmaXJzdCBpcyBhbiBpbnQsIHRoZSBzZWNvbmQgYSBsb25nKSwgYW5kCisgICAgICAgICMgLTdqIGlzIGRpZmZlcmVudCBmcm9tIC0oN2opLiAgKFRoZSBmaXJzdCBoYXMgcmVhbCBwYXJ0IDAuMCwgdGhlIHNlY29uZAorICAgICAgICAjIGhhcyByZWFsIHBhcnQgLTAuMC4pCisgICAgICAgIGlmIGlzaW5zdGFuY2UodC5vcCwgYXN0LlVTdWIpIGFuZCBpc2luc3RhbmNlKHQub3BlcmFuZCwgYXN0Lk51bSk6CisgICAgICAgICAgICBzZWxmLndyaXRlKCIoIikKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5vcGVyYW5kKQorICAgICAgICAgICAgc2VsZi53cml0ZSgiKSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3BlcmFuZCkKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICBiaW5vcCA9IHsgIkFkZCI6IisiLCAiU3ViIjoiLSIsICJNdWx0IjoiKiIsICJEaXYiOiIvIiwgIk1vZCI6IiUiLAotICAgICAgICAgICAgICAgICAgICAiTFNoaWZ0IjoiPj4iLCAiUlNoaWZ0IjoiPDwiLCAiQml0T3IiOiJ8IiwgIkJpdFhvciI6Il4iLCAiQml0QW5kIjoiJiIsCisgICAgICAgICAgICAgICAgICAgICJMU2hpZnQiOiI8PCIsICJSU2hpZnQiOiI+PiIsICJCaXRPciI6InwiLCAiQml0WG9yIjoiXiIsICJCaXRBbmQiOiImIiwKICAgICAgICAgICAgICAgICAgICAgIkZsb29yRGl2IjoiLy8iLCAiUG93IjogIioqIn0KICAgICBkZWYgX0Jpbk9wKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCIoIikKQEAgLTM3OCw5ICs0NTUsOSBAQAogICAgICAgICBmb3IgbywgZSBpbiB6aXAodC5vcHMsIHQuY29tcGFyYXRvcnMpOgogICAgICAgICAgICAgc2VsZi53cml0ZSgiICIgKyBzZWxmLmNtcG9wc1tvLl9fY2xhc3NfXy5fX25hbWVfX10gKyAiICIpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGUpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCIpIikKKyAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKLSAgICBib29sb3BzID0ge19hc3QuQW5kOiAnYW5kJywgX2FzdC5PcjogJ29yJ30KKyAgICBib29sb3BzID0ge2FzdC5BbmQ6ICdhbmQnLCBhc3QuT3I6ICdvcid9CiAgICAgZGVmIF9Cb29sT3Aoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIigiKQogICAgICAgICBzID0gIiAlcyAiICUgc2VsZi5ib29sb3BzW3Qub3AuX19jbGFzc19fXQpAQCAtMzg5LDYgKzQ2NiwxMSBAQAogCiAgICAgZGVmIF9BdHRyaWJ1dGUoc2VsZix0KToKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhbHVlKQorICAgICAgICAjIFNwZWNpYWwgY2FzZTogMy5fX2Fic19fKCkgaXMgYSBzeW50YXggZXJyb3IsIHNvIGlmIHQudmFsdWUKKyAgICAgICAgIyBpcyBhbiBpbnRlZ2VyIGxpdGVyYWwgdGhlbiB3ZSBuZWVkIHRvIGVpdGhlciBwYXJlbnRoZXNpemUKKyAgICAgICAgIyBpdCBvciBhZGQgYW4gZXh0cmEgc3BhY2UgdG8gZ2V0IDMgLl9fYWJzX18oKS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0LnZhbHVlLCBhc3QuTnVtKSBhbmQgaXNpbnN0YW5jZSh0LnZhbHVlLm4sIGludCk6CisgICAgICAgICAgICBzZWxmLndyaXRlKCIgIikKICAgICAgICAgc2VsZi53cml0ZSgiLiIpCiAgICAgICAgIHNlbGYud3JpdGUodC5hdHRyKQogCkBAIC00NDUsMjEgKzUyNywyNCBAQAogICAgICMgb3RoZXJzCiAgICAgZGVmIF9hcmd1bWVudHMoc2VsZiwgdCk6CiAgICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBub25EZWYgPSBsZW4odC5hcmdzKS1sZW4odC5kZWZhdWx0cykKLSAgICAgICAgZm9yIGEgaW4gdC5hcmdzWzA6bm9uRGVmXToKLSAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goYSkKLSAgICAgICAgZm9yIGEsZCBpbiB6aXAodC5hcmdzW25vbkRlZjpdLCB0LmRlZmF1bHRzKToKKyAgICAgICAgIyBub3JtYWwgYXJndW1lbnRzCisgICAgICAgIGRlZmF1bHRzID0gW05vbmVdICogKGxlbih0LmFyZ3MpIC0gbGVuKHQuZGVmYXVsdHMpKSArIHQuZGVmYXVsdHMKKyAgICAgICAgZm9yIGEsZCBpbiB6aXAodC5hcmdzLCBkZWZhdWx0cyk6CiAgICAgICAgICAgICBpZiBmaXJzdDpmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGEpLAotICAgICAgICAgICAgc2VsZi53cml0ZSgiPSIpCi0gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGQpCisgICAgICAgICAgICBpZiBkOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIj0iKQorICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZCkKKworICAgICAgICAjIHZhcmFyZ3MKICAgICAgICAgaWYgdC52YXJhcmc6CiAgICAgICAgICAgICBpZiBmaXJzdDpmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCIqIit0LnZhcmFyZykKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIioiKQorICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZykKKworICAgICAgICAjIGt3YXJncwogICAgICAgICBpZiB0Lmt3YXJnOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQpAQCAtNDcxLDEwICs1NTYsMTIgQEAKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhbHVlKQogCiAgICAgZGVmIF9MYW1iZGEoc2VsZiwgdCk6CisgICAgICAgIHNlbGYud3JpdGUoIigiKQogICAgICAgICBzZWxmLndyaXRlKCJsYW1iZGEgIikKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmFyZ3MpCiAgICAgICAgIHNlbGYud3JpdGUoIjogIikKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgIHNlbGYud3JpdGUoIikiKQogCiAgICAgZGVmIF9hbGlhcyhzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0Lm5hbWUpCkBAIC00ODIsOCArNTY5LDkgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiBhcyAiK3QuYXNuYW1lKQogCiBkZWYgcm91bmR0cmlwKGZpbGVuYW1lLCBvdXRwdXQ9c3lzLnN0ZG91dCk6Ci0gICAgc291cmNlID0gb3BlbihmaWxlbmFtZSkucmVhZCgpCi0gICAgdHJlZSA9IGNvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgImV4ZWMiLCBfYXN0LlB5Q0ZfT05MWV9BU1QpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAiciIpIGFzIHB5ZmlsZToKKyAgICAgICAgc291cmNlID0gcHlmaWxlLnJlYWQoKQorICAgIHRyZWUgPSBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsICJleGVjIiwgYXN0LlB5Q0ZfT05MWV9BU1QpCiAgICAgVW5wYXJzZXIodHJlZSwgb3V0cHV0KQogCiAKQEAgLTQ5Miw3ICs1ODAsNyBAQAogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBbbiBmb3IgbiBpbiBvcy5saXN0ZGlyKGEpIGlmIG4uZW5kc3dpdGgoJy5weScpXQogICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiRGlyZWN0b3J5IG5vdCByZWFkYWJsZTogJXMiICUgYQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJEaXJlY3Rvcnkgbm90IHJlYWRhYmxlOiAlcyIgJSBhKQogICAgIGVsc2U6CiAgICAgICAgIGZvciBuIGluIG5hbWVzOgogICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oYSwgbikKQEAgLTUwMSw3ICs1ODksNyBAQAogICAgICAgICAgICAgICAgIHByaW50ICdUZXN0aW5nICVzJyAlIGZ1bGxuYW1lCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByb3VuZHRyaXAoZnVsbG5hbWUsIG91dHB1dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyAgRmFpbGVkIHRvIGNvbXBpbGUsIGV4Y2VwdGlvbiBpcyAlcycgJSByZXByKGUpCiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgogICAgICAgICAgICAgICAgIHRlc3RkaXIoZnVsbG5hbWUpCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L0ZTUHJveHkucHkgYi9EZW1vL3BkaXN0L0ZTUHJveHkucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBhMWFiNjM1Li44NzFjODRmCi0tLSBhL0RlbW8vcGRpc3QvRlNQcm94eS5weQorKysgYi9EZW1vL3BkaXN0L0ZTUHJveHkucHkKQEAgLTIzLDEyICsyMyw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IGZubWF0Y2gKIAotaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICBpbXBvcnQgbWFjZnMKLSAgICBtYXhuYW1lbGVuID0gMzEKLWVsc2U6Ci0gICAgbWFjZnMgPSBOb25lCi0gICAgbWF4bmFtZWxlbiA9IDI1NQorbWF4bmFtZWxlbiA9IDI1NQogCiBza2lwbmFtZXMgPSAob3MuY3VyZGlyLCBvcy5wYXJkaXIpCiAKQEAgLTYzLDE2ICs1OCwxMCBAQAogICAgICAgICByZXR1cm4gaWdub3JlCiAKICAgICBkZWYgX2hpZGRlbihzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIHJldHVybiBuYW1lWzBdID09ICcoJyBhbmQgbmFtZVstMV0gPT0gJyknCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gbmFtZVswXSA9PSAnLicKKyAgICAgICAgcmV0dXJuIG5hbWVbMF0gPT0gJy4nCiAKICAgICBkZWYgX2hpZGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICByZXR1cm4gJyglcyknICUgbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICcuJXMnICUgbmFtZQorICAgICAgICByZXR1cm4gJy4lcycgJSBuYW1lCiAKICAgICBkZWYgdmlzaWJsZShzZWxmLCBuYW1lKToKICAgICAgICAgaWYgbGVuKG5hbWUpID4gbWF4bmFtZWxlbjogcmV0dXJuIDAKQEAgLTgxLDE4ICs3MCw4IEBACiAgICAgICAgIGlmIHNlbGYuX2hpZGRlbihuYW1lKTogcmV0dXJuIDAKICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQobmFtZSkKICAgICAgICAgaWYgaGVhZCBvciBub3QgdGFpbDogcmV0dXJuIDAKLSAgICAgICAgaWYgbWFjZnM6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNkaXIobmFtZSk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcyA9IG1hY2ZzLkZTU3BlYyhuYW1lKQotICAgICAgICAgICAgICAgICAgICBjLCB0ID0gZnMuR2V0Q3JlYXRvclR5cGUoKQotICAgICAgICAgICAgICAgICAgICBpZiB0ICE9ICdURVhUJzogcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBleGNlcHQgbWFjZnMuZXJyb3IsIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIioqKiIsIG5hbWUsIG1zZwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsobmFtZSk6IHJldHVybiAwCi0gICAgICAgICAgICBpZiAnXDAnIGluIG9wZW4obmFtZSwgJ3JiJykucmVhZCg1MTIpOiByZXR1cm4gMAorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhuYW1lKTogcmV0dXJuIDAKKyAgICAgICAgaWYgJ1wwJyBpbiBvcGVuKG5hbWUsICdyYicpLnJlYWQoNTEyKTogcmV0dXJuIDAKICAgICAgICAgZm9yIGlnbiBpbiBzZWxmLl9pZ25vcmU6CiAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2gobmFtZSwgaWduKTogcmV0dXJuIDAKICAgICAgICAgcmV0dXJuIDEKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY2xpZW50LnB5IGIvRGVtby9wZGlzdC9jbGllbnQucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jbWRmdy5weSBiL0RlbW8vcGRpc3QvY21kZncucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jbXB0cmVlLnB5IGIvRGVtby9wZGlzdC9jbXB0cmVlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY3ZzbGliLnB5IGIvRGVtby9wZGlzdC9jdnNsaWIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jdnNsb2NrLnB5IGIvRGVtby9wZGlzdC9jdnNsb2NrLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvbWFjLnB5IGIvRGVtby9wZGlzdC9tYWMucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9yY3NjbGllbnQucHkgYi9EZW1vL3BkaXN0L3Jjc2NsaWVudC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3Jjc2xpYi5weSBiL0RlbW8vcGRpc3QvcmNzbGliLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3Qvc2VjdXJpdHkucHkgYi9EZW1vL3BkaXN0L3NlY3VyaXR5LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3Qvc2VydmVyLnB5IGIvRGVtby9wZGlzdC9zZXJ2ZXIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9zdW10cmVlLnB5IGIvRGVtby9wZGlzdC9zdW10cmVlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9SRUFETUUgYi9EZW1vL3NjcmlwdHMvUkVBRE1FCmluZGV4IGQ4NDM0ZTguLmQxOWNjODEgMTAwNjQ0Ci0tLSBhL0RlbW8vc2NyaXB0cy9SRUFETUUKKysrIGIvRGVtby9zY3JpcHRzL1JFQURNRQpAQCAtMiwxOCArMiwxNyBAQAogCiBTZWUgYWxzbyB0aGUgVG9vbHMvc2NyaXB0cyBkaXJlY3RvcnkhCiAKLWJlZXIucHkJCQlQcmludCB0aGUgY2xhc3NpYyAnYm90dGxlcyBvZiBiZWVyJyBsaXN0LgorYmVlci5weQkJCVByaW50IHRoZSBjbGFzc2ljICdib3R0bGVzIG9mIGJlZXInIGxpc3QKIGVxZml4LnB5CQlGaXggLnB5IGZpbGVzIHRvIHVzZSB0aGUgY29ycmVjdCBlcXVhbGl0eSB0ZXN0IG9wZXJhdG9yCiBmYWN0LnB5CQkJRmFjdG9yaXplIG51bWJlcnMKLWZpbmQtdW5hbWUucHkJCVNlYXJjaCBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIHVzaW5nIHJlZ2V4cHMuCitmaW5kLXVuYW1lLnB5CQlTZWFyY2ggZm9yIFVuaWNvZGUgY2hhcmFjdGVycyB1c2luZyByZWdleHBzCiBmcm9tLnB5CQkJU3VtbWFyaXplIG1haWxib3gKLWZ0cHN0YXRzLnB5CQlTdW1tYXJpemUgZnRwIGRhZW1vbiBsb2cgZmlsZQogbHB3YXRjaC5weQkJV2F0Y2ggQlNEIGxpbmUgcHJpbnRlciBxdWV1ZXMKIG1ha2VkaXIucHkJCUxpa2UgbWtkaXIgLXAKIG1hcmtvdi5weQkJTWFya292IGNoYWluIHNpbXVsYXRpb24gb2Ygd29yZHMgb3IgY2hhcmFjdGVycwotbWJveGNvbnZ2ZXJ0LnB5CQlDb252ZXJ0IE1IIG9yIE1NREYgbWFpbGJveGVzIHRvIHVuaXggbWFpbGJveCBmb3JtYXQKLW1rcmNzLnB5CQlGaXggc3ltbGlua3MgbmFtZWQgUkNTIGludG8gcGFyYWxsZWwgdHJlZQorbWJveGNvbnZlcnQucHkJCUNvbnZlcnQgTUggb3IgTU1ERiBtYWlsYm94ZXMgdG8gdW5peCBtYWlsYm94IGZvcm1hdAogbW9yc2UucHkJCVByb2R1Y2UgbW9yc2UgY29kZSAoYXVkaWJsZSBvciBvbiBBSUZGIGZpbGUpCituZXdzbGlzdC5weQkJTGlzdCBhbGwgbmV3c2dyb3VwcyBvbiBhIE5OVFAgc2VydmVyIGFzIEhUTUwgcGFnZXMKIHBpLnB5CQkJUHJpbnQgYWxsIGRpZ2l0cyBvZiBwaSAtLSBnaXZlbiBlbm91Z2ggdGltZSBhbmQgbWVtb3J5CiBwcC5weQkJCUVtdWxhdGUgc29tZSBQZXJsIGNvbW1hbmQgbGluZSBvcHRpb25zCiBwcmltZXMucHkJCVByaW50IHByaW1lIG51bWJlcnMKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9iZWVyLnB5IGIvRGVtby9zY3JpcHRzL2JlZXIucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxYjlhYzhiLi5lMzMxY2M5Ci0tLSBhL0RlbW8vc2NyaXB0cy9iZWVyLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9iZWVyLnB5CkBAIC0xLDE0ICsxLDIwIEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKICMgQnkgR3ZSLCBkZW15c3RpZmllZCBhZnRlciBhIHZlcnNpb24gYnkgRnJlZHJpayBMdW5kaC4KKwogaW1wb3J0IHN5cworCiBuID0gMTAwCi1pZiBzeXMuYXJndlsxOl06IG4gPSBpbnQoc3lzLmFyZ3ZbMV0pCitpZiBzeXMuYXJndlsxOl06CisgICAgbiA9IGludChzeXMuYXJndlsxXSkKKwogZGVmIGJvdHRsZShuKToKICAgICBpZiBuID09IDA6IHJldHVybiAibm8gbW9yZSBib3R0bGVzIG9mIGJlZXIiCiAgICAgaWYgbiA9PSAxOiByZXR1cm4gIm9uZSBib3R0bGUgb2YgYmVlciIKICAgICByZXR1cm4gc3RyKG4pICsgIiBib3R0bGVzIG9mIGJlZXIiCi1mb3IgaSBpbiByYW5nZShuKToKLSAgICBwcmludCBib3R0bGUobi1pKSwgIm9uIHRoZSB3YWxsLCIKLSAgICBwcmludCBib3R0bGUobi1pKSArICIuIgorCitmb3IgaSBpbiByYW5nZShuLCAwLCAtMSk6CisgICAgcHJpbnQgYm90dGxlKGkpLCAib24gdGhlIHdhbGwsIgorICAgIHByaW50IGJvdHRsZShpKSArICIuIgogICAgIHByaW50ICJUYWtlIG9uZSBkb3duLCBwYXNzIGl0IGFyb3VuZCwiCi0gICAgcHJpbnQgYm90dGxlKG4taS0xKSwgIm9uIHRoZSB3YWxsLiIKKyAgICBwcmludCBib3R0bGUoaS0xKSwgIm9uIHRoZSB3YWxsLiIKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9mYWN0LnB5IGIvRGVtby9zY3JpcHRzL2ZhY3QucHkKaW5kZXggYzAzMDE4Ny4uOGVlMjU4OCAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL2ZhY3QucHkKKysrIGIvRGVtby9zY3JpcHRzL2ZhY3QucHkKQEAgLTksMzkgKzksNDEgQEAKIGZyb20gbWF0aCBpbXBvcnQgc3FydAogCiBkZWYgZmFjdChuKToKLSAgICBpZiBuIDwgMTogcmFpc2UgVmFsdWVFcnJvciAjIGZhY3QoKSBhcmd1bWVudCBzaG91bGQgYmUgPj0gMQotICAgIGlmIG4gPT0gMTogcmV0dXJuIFtdICAgICMgc3BlY2lhbCBjYXNlCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZhY3QoKSBhcmd1bWVudCBzaG91bGQgYmUgPj0gMScpCisgICAgaWYgbiA9PSAxOgorICAgICAgICByZXR1cm4gW10gICMgc3BlY2lhbCBjYXNlCiAgICAgcmVzID0gW10KLSAgICAjIFRyZWF0IGV2ZW4gZmFjdG9ycyBzcGVjaWFsLCBzbyB3ZSBjYW4gdXNlIGkgPSBpKzIgbGF0ZXIKLSAgICB3aGlsZSBuJTIgPT0gMDoKKyAgICAjIFRyZWF0IGV2ZW4gZmFjdG9ycyBzcGVjaWFsLCBzbyB3ZSBjYW4gdXNlIGkgKz0gMiBsYXRlcgorICAgIHdoaWxlIG4gJSAyID09IDA6CiAgICAgICAgIHJlcy5hcHBlbmQoMikKLSAgICAgICAgbiA9IG4vLzIKKyAgICAgICAgbiAvLz0gMgogICAgICMgVHJ5IG9kZCBudW1iZXJzIHVwIHRvIHNxcnQobikKLSAgICBsaW1pdCA9IHNxcnQoZmxvYXQobisxKSkKKyAgICBsaW1pdCA9IHNxcnQobisxKQogICAgIGkgPSAzCiAgICAgd2hpbGUgaSA8PSBsaW1pdDoKLSAgICAgICAgaWYgbiVpID09IDA6CisgICAgICAgIGlmIG4gJSBpID09IDA6CiAgICAgICAgICAgICByZXMuYXBwZW5kKGkpCi0gICAgICAgICAgICBuID0gbi8vaQorICAgICAgICAgICAgbiAvLz0gaQogICAgICAgICAgICAgbGltaXQgPSBzcXJ0KG4rMSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGkgPSBpKzIKKyAgICAgICAgICAgIGkgKz0gMgogICAgIGlmIG4gIT0gMToKICAgICAgICAgcmVzLmFwcGVuZChuKQogICAgIHJldHVybiByZXMKIAogZGVmIG1haW4oKToKICAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKLSAgICAgICAgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06Ci0gICAgICAgICAgICBuID0gZXZhbChhcmcpCi0gICAgICAgICAgICBwcmludCBuLCBmYWN0KG4pCisgICAgICAgIHNvdXJjZSA9IHN5cy5hcmd2WzE6XQogICAgIGVsc2U6CisgICAgICAgIHNvdXJjZSA9IGl0ZXIocmF3X2lucHV0LCAnJykKKyAgICBmb3IgYXJnIGluIHNvdXJjZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBuID0gaW5wdXQoKQotICAgICAgICAgICAgICAgIHByaW50IG4sIGZhY3QobikKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbiA9IGludChhcmcpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcHJpbnQgYXJnLCAnaXMgbm90IGFuIGludGVnZXInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCBuLCBmYWN0KG4pCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvZmluZC11bmFtZS5weSBiL0RlbW8vc2NyaXB0cy9maW5kLXVuYW1lLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYjc2YjlmMC4uOTU4ZjhhNAotLS0gYS9EZW1vL3NjcmlwdHMvZmluZC11bmFtZS5weQorKysgYi9EZW1vL3NjcmlwdHMvZmluZC11bmFtZS5weQpAQCAtMjEsMjAgKzIxLDIwIEBACiBpbXBvcnQgcmUKIAogZGVmIG1haW4oYXJncyk6Ci0gICAgdW5pY29kZV9uYW1lcz0gW10KKyAgICB1bmljb2RlX25hbWVzID0gW10KICAgICBmb3IgaXggaW4gcmFuZ2Uoc3lzLm1heHVuaWNvZGUrMSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHVuaWNvZGVfbmFtZXMuYXBwZW5kKCAoaXgsIHVuaWNvZGVkYXRhLm5hbWUodW5pY2hyKGl4KSkpICkKKyAgICAgICAgICAgIHVuaWNvZGVfbmFtZXMuYXBwZW5kKChpeCwgdW5pY29kZWRhdGEubmFtZSh1bmljaHIoaXgpKSkpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiAjIG5vIG5hbWUgZm9yIHRoZSBjaGFyYWN0ZXIKICAgICAgICAgICAgIHBhc3MKICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYXJnLCByZS5JKQotICAgICAgICBtYXRjaGVzID0gWyh4LHkpIGZvciAoeCx5KSBpbiB1bmljb2RlX25hbWVzCi0gICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdC5zZWFyY2goeSkgaXMgbm90IE5vbmVdCisgICAgICAgIG1hdGNoZXMgPSBbKHkseCkgZm9yICh4LHkpIGluIHVuaWNvZGVfbmFtZXMKKyAgICAgICAgICAgICAgICAgICBpZiBwYXQuc2VhcmNoKHkpIGlzIG5vdCBOb25lXQogICAgICAgICBpZiBtYXRjaGVzOgogICAgICAgICAgICAgcHJpbnQgIioqKiIsIGFyZywgIm1hdGNoZXMiLCAiKioqIgotICAgICAgICAgICAgZm9yICh4LHkpIGluIG1hdGNoZXM6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIiVzICglZCkiICUgKHkseCkKKyAgICAgICAgICAgIGZvciBtYXRjaCBpbiBtYXRjaGVzOgorICAgICAgICAgICAgICAgIHByaW50ICIlcyAoJWQpIiAlIG1hdGNoCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvZnRwc3RhdHMucHkgYi9EZW1vL3NjcmlwdHMvZnRwc3RhdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDg4MWI3MTcuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL2Z0cHN0YXRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBFeHRyYWN0IHN0YXRpc3RpY3MgZnJvbSBmdHAgZGFlbW9uIGxvZy4KLQotIyBVc2FnZToKLSMgZnRwc3RhdHMgWy1tIG1heGl0ZW1zXSBbLXMgc2VhcmNoXSBbZmlsZV0KLSMgLW0gbWF4aXRlbXM6IHJlc3RyaWN0IG51bWJlciBvZiBpdGVtcyBpbiAidG9wLU4iIGxpc3RzLCBkZWZhdWx0IDI1LgotIyAtcyBzdHJpbmc6ICAgcmVzdHJpY3Qgc3RhdGlzdGljcyB0byBsaW5lcyBjb250YWluaW5nIHRoaXMgc3RyaW5nLgotIyBEZWZhdWx0IGZpbGUgaXMgL3Vzci9hZG0vZnRwZDsgIGEgIi0iIG1lYW5zIHJlYWQgc3RhbmRhcmQgaW5wdXQuCi0KLSMgVGhlIHNjcmlwdCBtdXN0IGJlIHJ1biBvbiB0aGUgaG9zdCB3aGVyZSB0aGUgZnRwIGRhZW1vbiBydW5zLgotIyAoQXQgQ1dJIHRoaXMgaXMgY3VycmVudGx5IGJ1aXplcmQuKQotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotaW1wb3J0IGdldG9wdAotCi1wYXQgPSAnXihbYS16QS1aMC05IDpdKikhKC4qKSEoLiopIShbPD5dLiopIShbMC05XSspIShbMC05XSspJCcKLXByb2cgPSByZS5jb21waWxlKHBhdCkKLQotZGVmIG1haW4oKToKLSAgICBtYXhpdGVtcyA9IDI1Ci0gICAgc2VhcmNoID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnbTpzOicpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgotICAgICAgICBwcmludCBtc2cKLSAgICAgICAgcHJpbnQgJ3VzYWdlOiBmdHBzdGF0cyBbLW0gbWF4aXRlbXNdIFtmaWxlXScKLSAgICAgICAgc3lzLmV4aXQoMikKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvID09ICctbSc6Ci0gICAgICAgICAgICBtYXhpdGVtcyA9IHN0cmluZy5hdG9pKGEpCi0gICAgICAgIGlmIG8gPT0gJy1zJzoKLSAgICAgICAgICAgIHNlYXJjaCA9IGEKLSAgICBmaWxlID0gJy91c3IvYWRtL2Z0cGQnCi0gICAgaWYgYXJnczogZmlsZSA9IGFyZ3NbMF0KLSAgICBpZiBmaWxlID09ICctJzoKLSAgICAgICAgZiA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKLSAgICAgICAgICAgIHByaW50IGZpbGUsICc6JywgbXNnCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGJ5ZGF0ZSA9IHt9Ci0gICAgYnl0aW1lID0ge30KLSAgICBieWZpbGUgPSB7fQotICAgIGJ5ZGlyID0ge30KLSAgICBieWhvc3QgPSB7fQotICAgIGJ5dXNlciA9IHt9Ci0gICAgYnl0eXBlID0ge30KLSAgICBsaW5lbm8gPSAwCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCi0gICAgICAgICAgICBpZiBzZWFyY2ggYW5kIHN0cmluZy5maW5kKGxpbmUsIHNlYXJjaCkgPCAwOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBwcm9nLm1hdGNoKGxpbmUpIDwgMDoKLSAgICAgICAgICAgICAgICBwcmludCAnQmFkIGxpbmUnLCBsaW5lbm8sICc6JywgcmVwcihsaW5lKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpdGVtcyA9IHByb2cuZ3JvdXAoMSwgMiwgMywgNCwgNSwgNikKLSAgICAgICAgICAgIChsb2d0aW1lLCBsb2d1c2VyLCBsb2dob3N0LCBsb2dmaWxlLCBsb2dieXRlcywKLSAgICAgICAgICAgICBsb2d4eHgyKSA9IGl0ZW1zCi0jIyAgICAgICAgICAgICAgICAgICAgICBwcmludCBsb2d0aW1lCi0jIyAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLS0+JywgbG9ndXNlcgotIyMgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJy0tPiAtLT4nLCBsb2dob3N0Ci0jIyAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLS0+IC0tPiAtLT4nLCBsb2dmaWxlCi0jIyAgICAgICAgICAgICAgICAgICAgICBwcmludCAnLS0+IC0tPiAtLT4gLS0+JywgbG9nYnl0ZXMKLSMjICAgICAgICAgICAgICAgICAgICAgIHByaW50ICctLT4gLS0+IC0tPiAtLT4gLS0+JywgbG9neHh4MgotIyMgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gbG9ndGltZSwgbG9naG9zdCwgbG9nYnl0ZXMsIGxvZ3h4eDI6Ci0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICchJyBpbiBpOiBwcmludCAnPz8/JywgaQotICAgICAgICAgICAgYWRkKGJ5ZGF0ZSwgbG9ndGltZVstNDpdICsgJyAnICsgbG9ndGltZVs6Nl0sIGl0ZW1zKQotICAgICAgICAgICAgYWRkKGJ5dGltZSwgbG9ndGltZVs3OjldICsgJzowMC01OScsIGl0ZW1zKQotICAgICAgICAgICAgZGlyZWN0aW9uLCBsb2dmaWxlID0gbG9nZmlsZVswXSwgbG9nZmlsZVsxOl0KLSAgICAgICAgICAgICMgVGhlIHJlYWwgcGF0aCBwcm9iYWJseSBzdGFydHMgYXQgdGhlIGxhc3QgLy8uLi4KLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgaSA9IHN0cmluZy5maW5kKGxvZ2ZpbGUsICcvLycpCi0gICAgICAgICAgICAgICAgaWYgaSA8IDA6IGJyZWFrCi0gICAgICAgICAgICAgICAgbG9nZmlsZSA9IGxvZ2ZpbGVbaSsxOl0KLSAgICAgICAgICAgIGFkZChieWZpbGUsIGxvZ2ZpbGUgKyAnICcgKyBkaXJlY3Rpb24sIGl0ZW1zKQotICAgICAgICAgICAgbG9nZGlyID0gb3MucGF0aC5kaXJuYW1lKGxvZ2ZpbGUpCi0jIyAgICAgICAgICAgICAgbG9nZGlyID0gb3MucGF0aC5ub3JtcGF0aChsb2dkaXIpICsgJy8uJwotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBhZGQoYnlkaXIsIGxvZ2RpciArICcgJyArIGRpcmVjdGlvbiwgaXRlbXMpCi0gICAgICAgICAgICAgICAgZGlyaGVhZCA9IG9zLnBhdGguZGlybmFtZShsb2dkaXIpCi0gICAgICAgICAgICAgICAgaWYgZGlyaGVhZCA9PSBsb2dkaXI6IGJyZWFrCi0gICAgICAgICAgICAgICAgbG9nZGlyID0gZGlyaGVhZAotICAgICAgICAgICAgYWRkKGJ5aG9zdCwgbG9naG9zdCwgaXRlbXMpCi0gICAgICAgICAgICBhZGQoYnl1c2VyLCBsb2d1c2VyLCBpdGVtcykKLSAgICAgICAgICAgIGFkZChieXR5cGUsIGRpcmVjdGlvbiwgaXRlbXMpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwcmludCAnSW50ZXJydXB0ZWQgYXQgbGluZScsIGxpbmVubwotICAgIHNob3coYnl0eXBlLCAnYnkgdHJhbnNmZXIgZGlyZWN0aW9uJywgbWF4aXRlbXMpCi0gICAgc2hvdyhieWRpciwgJ2J5IGRpcmVjdG9yeScsIG1heGl0ZW1zKQotICAgIHNob3coYnlmaWxlLCAnYnkgZmlsZScsIG1heGl0ZW1zKQotICAgIHNob3coYnlob3N0LCAnYnkgaG9zdCcsIG1heGl0ZW1zKQotICAgIHNob3coYnl1c2VyLCAnYnkgdXNlcicsIG1heGl0ZW1zKQotICAgIHNob3diYXIoYnlkYXRlLCAnYnkgZGF0ZScpCi0gICAgc2hvd2JhcihieXRpbWUsICdieSB0aW1lIG9mIGRheScpCi0KLWRlZiBzaG93YmFyKGRpY3QsIHRpdGxlKToKLSAgICBuID0gbGVuKHRpdGxlKQotICAgIHByaW50ICc9JyooKDcwLW4pLy8yKSwgdGl0bGUsICc9JyooKDcxLW4pLy8yKQotICAgIGxpc3QgPSBbXQotICAgIGtleXMgPSBkaWN0LmtleXMoKQotICAgIGtleXMuc29ydCgpCi0gICAgZm9yIGtleSBpbiBrZXlzOgotICAgICAgICBuID0gbGVuKHN0cihrZXkpKQotICAgICAgICBsaXN0LmFwcGVuZCgobGVuKGRpY3Rba2V5XSksIGtleSkpCi0gICAgbWF4a2V5bGVuZ3RoID0gMAotICAgIG1heGNvdW50ID0gMAotICAgIGZvciBjb3VudCwga2V5IGluIGxpc3Q6Ci0gICAgICAgIG1heGtleWxlbmd0aCA9IG1heChtYXhrZXlsZW5ndGgsIGxlbihrZXkpKQotICAgICAgICBtYXhjb3VudCA9IG1heChtYXhjb3VudCwgY291bnQpCi0gICAgbWF4YmFybGVuZ3RoID0gNzIgLSBtYXhrZXlsZW5ndGggLSA3Ci0gICAgZm9yIGNvdW50LCBrZXkgaW4gbGlzdDoKLSAgICAgICAgYmFybGVuZ3RoID0gaW50KHJvdW5kKG1heGJhcmxlbmd0aCpmbG9hdChjb3VudCkvbWF4Y291bnQpKQotICAgICAgICBiYXIgPSAnKicqYmFybGVuZ3RoCi0gICAgICAgIHByaW50ICclNWQgJS0qcyAlcycgJSAoY291bnQsIG1heGtleWxlbmd0aCwga2V5LCBiYXIpCi0KLWRlZiBzaG93KGRpY3QsIHRpdGxlLCBtYXhpdGVtcyk6Ci0gICAgaWYgbGVuKGRpY3QpID4gbWF4aXRlbXM6Ci0gICAgICAgIHRpdGxlID0gdGl0bGUgKyAnIChmaXJzdCAlZCknJW1heGl0ZW1zCi0gICAgbiA9IGxlbih0aXRsZSkKLSAgICBwcmludCAnPScqKCg3MC1uKS8vMiksIHRpdGxlLCAnPScqKCg3MS1uKS8vMikKLSAgICBsaXN0ID0gW10KLSAgICBrZXlzID0gZGljdC5rZXlzKCkKLSAgICBmb3Iga2V5IGluIGtleXM6Ci0gICAgICAgIGxpc3QuYXBwZW5kKCgtbGVuKGRpY3Rba2V5XSksIGtleSkpCi0gICAgbGlzdC5zb3J0KCkKLSAgICBmb3IgY291bnQsIGtleSBpbiBsaXN0WzptYXhpdGVtc106Ci0gICAgICAgIHByaW50ICclNWQgJXMnICUgKC1jb3VudCwga2V5KQotCi1kZWYgYWRkKGRpY3QsIGtleSwgaXRlbSk6Ci0gICAgaWYgZGljdC5oYXNfa2V5KGtleSk6Ci0gICAgICAgIGRpY3Rba2V5XS5hcHBlbmQoaXRlbSkKLSAgICBlbHNlOgotICAgICAgICBkaWN0W2tleV0gPSBbaXRlbV0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9scHdhdGNoLnB5IGIvRGVtby9zY3JpcHRzL2xwd2F0Y2gucHkKaW5kZXggNzE1Y2JiOC4uOWQyMDdiOSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL2xwd2F0Y2gucHkKKysrIGIvRGVtby9zY3JpcHRzL2xwd2F0Y2gucHkKQEAgLTMsMTAgKzMsOSBAQAogIyBXYXRjaCBsaW5lIHByaW50ZXIgcXVldWUocykuCiAjIEludGVuZGVkIGZvciBCU0QgNC4zIGxwcS4KIAotaW1wb3J0IHBvc2l4CitpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgc3RyaW5nCiAKIERFRl9QUklOVEVSID0gJ3BzYycKIERFRl9ERUxBWSA9IDEwCkBAIC0xNCw5NCArMTMsODcgQEAKIGRlZiBtYWluKCk6CiAgICAgZGVsYXkgPSBERUZfREVMQVkgIyBYWFggVXNlIGdldG9wdCgpIGxhdGVyCiAgICAgdHJ5OgotICAgICAgICB0aGlzdXNlciA9IHBvc2l4LmVudmlyb25bJ0xPR05BTUUnXQorICAgICAgICB0aGlzdXNlciA9IG9zLmVudmlyb25bJ0xPR05BTUUnXQogICAgIGV4Y2VwdDoKLSAgICAgICAgdGhpc3VzZXIgPSBwb3NpeC5lbnZpcm9uWydVU0VSJ10KKyAgICAgICAgdGhpc3VzZXIgPSBvcy5lbnZpcm9uWydVU0VSJ10KICAgICBwcmludGVycyA9IHN5cy5hcmd2WzE6XQogICAgIGlmIHByaW50ZXJzOgogICAgICAgICAjIFN0cmlwICctUCcgZnJvbSBwcmludGVyIG5hbWVzIGp1c3QgaW4gY2FzZQogICAgICAgICAjIHRoZSB1c2VyIHNwZWNpZmllZCBpdC4uLgotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJpbnRlcnMpKToKLSAgICAgICAgICAgIGlmIHByaW50ZXJzW2ldWzoyXSA9PSAnLVAnOgotICAgICAgICAgICAgICAgIHByaW50ZXJzW2ldID0gcHJpbnRlcnNbaV1bMjpdCisgICAgICAgIGZvciBpLCBuYW1lIGluIGVudW1lcmF0ZShwcmludGVycyk6CisgICAgICAgICAgICBpZiBuYW1lWzoyXSA9PSAnLVAnOgorICAgICAgICAgICAgICAgIHByaW50ZXJzW2ldID0gbmFtZVsyOl0KICAgICBlbHNlOgotICAgICAgICBpZiBwb3NpeC5lbnZpcm9uLmhhc19rZXkoJ1BSSU5URVInKToKLSAgICAgICAgICAgIHByaW50ZXJzID0gW3Bvc2l4LmVudmlyb25bJ1BSSU5URVInXV0KKyAgICAgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdQUklOVEVSJyk6CisgICAgICAgICAgICBwcmludGVycyA9IFtvcy5lbnZpcm9uWydQUklOVEVSJ11dCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludGVycyA9IFtERUZfUFJJTlRFUl0KLSAgICAjCi0gICAgY2xlYXJob21lID0gcG9zaXgucG9wZW4oJ2NsZWFyJywgJ3InKS5yZWFkKCkKLSAgICAjCi0gICAgd2hpbGUgMToKKworICAgIGNsZWFyaG9tZSA9IG9zLnBvcGVuKCdjbGVhcicsICdyJykucmVhZCgpCisKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICB0ZXh0ID0gY2xlYXJob21lCiAgICAgICAgIGZvciBuYW1lIGluIHByaW50ZXJzOgotICAgICAgICAgICAgdGV4dCA9IHRleHQgKyBtYWtlc3RhdHVzKG5hbWUsIHRoaXN1c2VyKSArICdcbicKKyAgICAgICAgICAgIHRleHQgKz0gbWFrZXN0YXR1cyhuYW1lLCB0aGlzdXNlcikgKyAnXG4nCiAgICAgICAgIHByaW50IHRleHQKICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKIAogZGVmIG1ha2VzdGF0dXMobmFtZSwgdGhpc3VzZXIpOgotICAgIHBpcGUgPSBwb3NpeC5wb3BlbignbHBxIC1QJyArIG5hbWUgKyAnIDI+JjEnLCAncicpCisgICAgcGlwZSA9IG9zLnBvcGVuKCdscHEgLVAnICsgbmFtZSArICcgMj4mMScsICdyJykKICAgICBsaW5lcyA9IFtdCiAgICAgdXNlcnMgPSB7fQogICAgIGFoZWFkYnl0ZXMgPSAwCiAgICAgYWhlYWRqb2JzID0gMAotICAgIHVzZXJzZWVuID0gMAorICAgIHVzZXJzZWVuID0gRmFsc2UKICAgICB0b3RhbGJ5dGVzID0gMAogICAgIHRvdGFsam9icyA9IDAKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gcGlwZS5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICBmaWVsZHMgPSBzdHJpbmcuc3BsaXQobGluZSkKKyAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKICAgICAgICAgbiA9IGxlbihmaWVsZHMpCiAgICAgICAgIGlmIGxlbihmaWVsZHMpID49IDYgYW5kIGZpZWxkc1tuLTFdID09ICdieXRlcyc6Ci0gICAgICAgICAgICByYW5rID0gZmllbGRzWzBdCi0gICAgICAgICAgICB1c2VyID0gZmllbGRzWzFdCi0gICAgICAgICAgICBqb2IgPSBmaWVsZHNbMl0KKyAgICAgICAgICAgIHJhbmssIHVzZXIsIGpvYiA9IGZpZWxkc1swOjNdCiAgICAgICAgICAgICBmaWxlcyA9IGZpZWxkc1szOi0yXQotICAgICAgICAgICAgYnl0ZXMgPSBldmFsKGZpZWxkc1tuLTJdKQorICAgICAgICAgICAgYnl0ZXMgPSBpbnQoZmllbGRzW24tMl0pCiAgICAgICAgICAgICBpZiB1c2VyID09IHRoaXN1c2VyOgotICAgICAgICAgICAgICAgIHVzZXJzZWVuID0gMQorICAgICAgICAgICAgICAgIHVzZXJzZWVuID0gVHJ1ZQogICAgICAgICAgICAgZWxpZiBub3QgdXNlcnNlZW46Ci0gICAgICAgICAgICAgICAgYWhlYWRieXRlcyA9IGFoZWFkYnl0ZXMgKyBieXRlcwotICAgICAgICAgICAgICAgIGFoZWFkam9icyA9IGFoZWFkam9icyArIDEKLSAgICAgICAgICAgIHRvdGFsYnl0ZXMgPSB0b3RhbGJ5dGVzICsgYnl0ZXMKLSAgICAgICAgICAgIHRvdGFsam9icyA9IHRvdGFsam9icyArIDEKLSAgICAgICAgICAgIGlmIHVzZXJzLmhhc19rZXkodXNlcik6Ci0gICAgICAgICAgICAgICAgdWpvYnMsIHVieXRlcyA9IHVzZXJzW3VzZXJdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHVqb2JzLCB1Ynl0ZXMgPSAwLCAwCi0gICAgICAgICAgICB1am9icyA9IHVqb2JzICsgMQotICAgICAgICAgICAgdWJ5dGVzID0gdWJ5dGVzICsgYnl0ZXMKKyAgICAgICAgICAgICAgICBhaGVhZGJ5dGVzICs9IGJ5dGVzCisgICAgICAgICAgICAgICAgYWhlYWRqb2JzICs9IDEKKyAgICAgICAgICAgIHRvdGFsYnl0ZXMgKz0gYnl0ZXMKKyAgICAgICAgICAgIHRvdGFsam9icyArPSAxCisgICAgICAgICAgICB1am9icywgdWJ5dGVzID0gdXNlcnMuZ2V0KHVzZXIsICgwLCAwKSkKKyAgICAgICAgICAgIHVqb2JzICs9IDEKKyAgICAgICAgICAgIHVieXRlcyArPSBieXRlcwogICAgICAgICAgICAgdXNlcnNbdXNlcl0gPSB1am9icywgdWJ5dGVzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBmaWVsZHMgYW5kIGZpZWxkc1swXSA8PiAnUmFuayc6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN0cmluZy5zdHJpcChsaW5lKQorICAgICAgICAgICAgaWYgZmllbGRzIGFuZCBmaWVsZHNbMF0gIT0gJ1JhbmsnOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdubyBlbnRyaWVzJzoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IG5hbWUgKyAnOiBpZGxlJwogICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMjI6XSA9PSAnIGlzIHJlYWR5IGFuZCBwcmludGluZyc6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBuYW1lCiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgIworCiAgICAgaWYgdG90YWxqb2JzOgotICAgICAgICBsaW5lID0gJyVkIEsnICUgKCh0b3RhbGJ5dGVzKzEwMjMpLy8xMDI0KQotICAgICAgICBpZiB0b3RhbGpvYnMgPD4gbGVuKHVzZXJzKToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJyAoJWQgam9icyknICUgdG90YWxqb2JzCisgICAgICAgIGxpbmUgPSAnJWQgSycgJSAoKHRvdGFsYnl0ZXMrMTAyMykgLy8gMTAyNCkKKyAgICAgICAgaWYgdG90YWxqb2JzICE9IGxlbih1c2Vycyk6CisgICAgICAgICAgICBsaW5lICs9ICcgKCVkIGpvYnMpJyAlIHRvdGFsam9icwogICAgICAgICBpZiBsZW4odXNlcnMpID09IDE6Ci0gICAgICAgICAgICBsaW5lID0gbGluZSArICcgZm9yICVzJyAlICh1c2Vycy5rZXlzKClbMF0sKQorICAgICAgICAgICAgbGluZSArPSAnIGZvciAlcycgJSAodXNlcnMua2V5cygpWzBdLCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJyBmb3IgJWQgdXNlcnMnICUgbGVuKHVzZXJzKQorICAgICAgICAgICAgbGluZSArPSAnIGZvciAlZCB1c2VycycgJSBsZW4odXNlcnMpCiAgICAgICAgICAgICBpZiB1c2Vyc2VlbjoKICAgICAgICAgICAgICAgICBpZiBhaGVhZGpvYnMgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9ICBsaW5lICsgJyAoJXMgZmlyc3QpJyAlIHRoaXN1c2VyCisgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gJyAoJXMgZmlyc3QpJyAlIHRoaXN1c2VyCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnICglZCBLIGJlZm9yZSAlcyknICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWhlYWRieXRlcysxMDIzKS8vMTAyNCwgdGhpc3VzZXIpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gJyAoJWQgSyBiZWZvcmUgJXMpJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIChhaGVhZGJ5dGVzKzEwMjMpIC8vIDEwMjQsIHRoaXN1c2VyKQogICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICAjCisKICAgICBzdHMgPSBwaXBlLmNsb3NlKCkKICAgICBpZiBzdHM6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnbHBxIGV4aXQgc3RhdHVzICVyJyAlIChzdHMsKSkKLSAgICByZXR1cm4gc3RyaW5nLmpvaW5maWVsZHMobGluZXMsICc6ICcpCisgICAgcmV0dXJuICc6ICcuam9pbihsaW5lcykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0cnk6CmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbWFya292LnB5IGIvRGVtby9zY3JpcHRzL21hcmtvdi5weQppbmRleCA3YTRmYzAxLi5kZjRkZWMwIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvbWFya292LnB5CisrKyBiL0RlbW8vc2NyaXB0cy9tYXJrb3YucHkKQEAgLTUsMTEgKzUsMTAgQEAKICAgICAgICAgc2VsZi5oaXN0c2l6ZSA9IGhpc3RzaXplCiAgICAgICAgIHNlbGYuY2hvaWNlID0gY2hvaWNlCiAgICAgICAgIHNlbGYudHJhbnMgPSB7fQorCiAgICAgZGVmIGFkZChzZWxmLCBzdGF0ZSwgbmV4dCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnRyYW5zLmhhc19rZXkoc3RhdGUpOgotICAgICAgICAgICAgc2VsZi50cmFuc1tzdGF0ZV0gPSBbbmV4dF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYudHJhbnNbc3RhdGVdLmFwcGVuZChuZXh0KQorICAgICAgICBzZWxmLnRyYW5zLnNldGRlZmF1bHQoc3RhdGUsIFtdKS5hcHBlbmQobmV4dCkKKwogICAgIGRlZiBwdXQoc2VsZiwgc2VxKToKICAgICAgICAgbiA9IHNlbGYuaGlzdHNpemUKICAgICAgICAgYWRkID0gc2VsZi5hZGQKQEAgLTE3LDI2ICsxNiwyOSBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VxKSk6CiAgICAgICAgICAgICBhZGQoc2VxW21heCgwLCBpLW4pOmldLCBzZXFbaTppKzFdKQogICAgICAgICBhZGQoc2VxW2xlbihzZXEpLW46XSwgTm9uZSkKKwogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIGNob2ljZSA9IHNlbGYuY2hvaWNlCiAgICAgICAgIHRyYW5zID0gc2VsZi50cmFucwogICAgICAgICBuID0gc2VsZi5oaXN0c2l6ZQogICAgICAgICBzZXEgPSBjaG9pY2UodHJhbnNbTm9uZV0pCi0gICAgICAgIHdoaWxlIDE6CisgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBzdWJzZXEgPSBzZXFbbWF4KDAsIGxlbihzZXEpLW4pOl0KICAgICAgICAgICAgIG9wdGlvbnMgPSB0cmFuc1tzdWJzZXFdCiAgICAgICAgICAgICBuZXh0ID0gY2hvaWNlKG9wdGlvbnMpCi0gICAgICAgICAgICBpZiBub3QgbmV4dDogYnJlYWsKLSAgICAgICAgICAgIHNlcSA9IHNlcSArIG5leHQKKyAgICAgICAgICAgIGlmIG5vdCBuZXh0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZXEgKz0gbmV4dAogICAgICAgICByZXR1cm4gc2VxCiAKKwogZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzLCBzdHJpbmcsIHJhbmRvbSwgZ2V0b3B0CisgICAgaW1wb3J0IHN5cywgcmFuZG9tLCBnZXRvcHQKICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCiAgICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAnMDEyMzQ1Njc4OWNkdycpCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICcwMTIzNDU2Nzg5Y2R3cScpCiAgICAgZXhjZXB0IGdldG9wdC5lcnJvcjoKLSAgICAgICAgcHJpbnQgJ1VzYWdlOiBtYXJrb3YgWy0jXSBbLWNkZHF3XSBbZmlsZV0gLi4uJworICAgICAgICBwcmludCAnVXNhZ2U6ICVzIFstI10gWy1jZGRxd10gW2ZpbGVdIC4uLicgJSBzeXMuYXJndlswXQogICAgICAgICBwcmludCAnT3B0aW9uczonCiAgICAgICAgIHByaW50ICctIzogMS1kaWdpdCBoaXN0b3J5IHNpemUgKGRlZmF1bHQgMiknCiAgICAgICAgIHByaW50ICctYzogY2hhcmFjdGVycyAoZGVmYXVsdCknCkBAIC00OSwxNiArNTEsMTkgQEAKICAgICAgICAgcHJpbnQgJ2V4YWN0bHkgb25lIHNwYWNlIHNlcGFyYXRpbmcgd29yZHMuJwogICAgICAgICBwcmludCAnT3V0cHV0IGNvbnNpc3RzIG9mIHBhcmFncmFwaHMgc2VwYXJhdGVkIGJ5IGJsYW5rJwogICAgICAgICBwcmludCAnbGluZXMsIHdoZXJlIGxpbmVzIGFyZSBubyBsb25nZXIgdGhhbiA3MiBjaGFyYWN0ZXJzLicKKyAgICAgICAgc3lzLmV4aXQoMikKICAgICBoaXN0c2l6ZSA9IDIKLSAgICBkb193b3JkcyA9IDAKKyAgICBkb193b3JkcyA9IEZhbHNlCiAgICAgZGVidWcgPSAxCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgJy0wJyA8PSBvIDw9ICctOSc6IGhpc3RzaXplID0gZXZhbChvWzE6XSkKLSAgICAgICAgaWYgbyA9PSAnLWMnOiBkb193b3JkcyA9IDAKLSAgICAgICAgaWYgbyA9PSAnLWQnOiBkZWJ1ZyA9IGRlYnVnICsgMQorICAgICAgICBpZiAnLTAnIDw9IG8gPD0gJy05JzogaGlzdHNpemUgPSBpbnQob1sxOl0pCisgICAgICAgIGlmIG8gPT0gJy1jJzogZG9fd29yZHMgPSBGYWxzZQorICAgICAgICBpZiBvID09ICctZCc6IGRlYnVnICs9IDEKICAgICAgICAgaWYgbyA9PSAnLXEnOiBkZWJ1ZyA9IDAKLSAgICAgICAgaWYgbyA9PSAnLXcnOiBkb193b3JkcyA9IDEKLSAgICBpZiBub3QgYXJnczogYXJncyA9IFsnLSddCisgICAgICAgIGlmIG8gPT0gJy13JzogZG9fd29yZHMgPSBUcnVlCisgICAgaWYgbm90IGFyZ3M6CisgICAgICAgIGFyZ3MgPSBbJy0nXQorCiAgICAgbSA9IE1hcmtvdihoaXN0c2l6ZSwgcmFuZG9tLmNob2ljZSkKICAgICB0cnk6CiAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzOgpAQCAtNzIsMTMgKzc3LDE1IEBACiAgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgJ3Byb2Nlc3NpbmcnLCBmaWxlbmFtZSwgJy4uLicKICAgICAgICAgICAgIHRleHQgPSBmLnJlYWQoKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBwYXJhbGlzdCA9IHN0cmluZy5zcGxpdGZpZWxkcyh0ZXh0LCAnXG5cbicpCisgICAgICAgICAgICBwYXJhbGlzdCA9IHRleHQuc3BsaXQoJ1xuXG4nKQogICAgICAgICAgICAgZm9yIHBhcmEgaW4gcGFyYWxpc3Q6CiAgICAgICAgICAgICAgICAgaWYgZGVidWcgPiAxOiBwcmludCAnZmVlZGluZyAuLi4nCi0gICAgICAgICAgICAgICAgd29yZHMgPSBzdHJpbmcuc3BsaXQocGFyYSkKKyAgICAgICAgICAgICAgICB3b3JkcyA9IHBhcmEuc3BsaXQoKQogICAgICAgICAgICAgICAgIGlmIHdvcmRzOgotICAgICAgICAgICAgICAgICAgICBpZiBkb193b3JkczogZGF0YSA9IHR1cGxlKHdvcmRzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOiBkYXRhID0gc3RyaW5nLmpvaW5maWVsZHMod29yZHMsICcgJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZG9fd29yZHM6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdHVwbGUod29yZHMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gJyAnLmpvaW4od29yZHMpCiAgICAgICAgICAgICAgICAgICAgIG0ucHV0KGRhdGEpCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICBwcmludCAnSW50ZXJydXB0ZWQgLS0gY29udGludWUgd2l0aCBkYXRhIHJlYWQgc28gZmFyJwpAQCAtODYsMTYgKzkzLDE5IEBACiAgICAgICAgIHByaW50ICdObyB2YWxpZCBpbnB1dCBmaWxlcycKICAgICAgICAgcmV0dXJuCiAgICAgaWYgZGVidWc6IHByaW50ICdkb25lLicKKwogICAgIGlmIGRlYnVnID4gMToKICAgICAgICAgZm9yIGtleSBpbiBtLnRyYW5zLmtleXMoKToKICAgICAgICAgICAgIGlmIGtleSBpcyBOb25lIG9yIGxlbihrZXkpIDwgaGlzdHNpemU6CiAgICAgICAgICAgICAgICAgcHJpbnQgcmVwcihrZXkpLCBtLnRyYW5zW2tleV0KICAgICAgICAgaWYgaGlzdHNpemUgPT0gMDogcHJpbnQgcmVwcignJyksIG0udHJhbnNbJyddCiAgICAgICAgIHByaW50Ci0gICAgd2hpbGUgMToKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICBkYXRhID0gbS5nZXQoKQotICAgICAgICBpZiBkb193b3Jkczogd29yZHMgPSBkYXRhCi0gICAgICAgIGVsc2U6IHdvcmRzID0gc3RyaW5nLnNwbGl0KGRhdGEpCisgICAgICAgIGlmIGRvX3dvcmRzOgorICAgICAgICAgICAgd29yZHMgPSBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JkcyA9IGRhdGEuc3BsaXQoKQogICAgICAgICBuID0gMAogICAgICAgICBsaW1pdCA9IDcyCiAgICAgICAgIGZvciB3IGluIHdvcmRzOgpAQCAtMTAzLDE1ICsxMTMsOSBAQAogICAgICAgICAgICAgICAgIHByaW50CiAgICAgICAgICAgICAgICAgbiA9IDAKICAgICAgICAgICAgIHByaW50IHcsCi0gICAgICAgICAgICBuID0gbiArIGxlbih3KSArIDEKKyAgICAgICAgICAgIG4gKz0gbGVuKHcpICsgMQogICAgICAgICBwcmludAogICAgICAgICBwcmludAogCi1kZWYgdHVwbGUobGlzdCk6Ci0gICAgaWYgbGVuKGxpc3QpID09IDA6IHJldHVybiAoKQotICAgIGlmIGxlbihsaXN0KSA9PSAxOiByZXR1cm4gKGxpc3RbMF0sKQotICAgIGkgPSBsZW4obGlzdCkvLzIKLSAgICByZXR1cm4gdHVwbGUobGlzdFs6aV0pICsgdHVwbGUobGlzdFtpOl0pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbWtyY3MucHkgYi9EZW1vL3NjcmlwdHMvbWtyY3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGNhY2RkYTAuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL21rcmNzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEEgcmF0aGVyIHNwZWNpYWxpemVkIHNjcmlwdCB0byBtYWtlIHN1cmUgdGhhdCBhIHN5bWJvbGljIGxpbmsgbmFtZWQKLSMgUkNTIGV4aXN0cyBwb2ludGluZyB0byBhIHJlYWwgUkNTIGRpcmVjdG9yeSBpbiBhIHBhcmFsbGVsIHRyZWUKLSMgcmVmZXJlbmNlZCBhcyBSQ1N0cmVlIGluIGFuIGFuY2VzdG9yIGRpcmVjdG9yeS4KLSMgKEkgdXNlIHRoaXMgYmVjYXVzZSBJIGxpa2UgbXkgUkNTIGZpbGVzIHRvIHJlc2lkZSBvbiBhIHBoeXNpY2FsbHkKLSMgZGlmZmVyZW50IG1hY2hpbmUpLgotCi1pbXBvcnQgb3MKLQotZGVmIG1haW4oKToKLSAgICByY3N0cmVlID0gJ1JDU3RyZWUnCi0gICAgcmNzID0gJ1JDUycKLSAgICBpZiBvcy5wYXRoLmlzbGluayhyY3MpOgotICAgICAgICBwcmludCAnJXIgaXMgYSBzeW1saW5rIHRvICVyJyAlIChyY3MsIG9zLnJlYWRsaW5rKHJjcykpCi0gICAgICAgIHJldHVybgotICAgIGlmIG9zLnBhdGguaXNkaXIocmNzKToKLSAgICAgICAgcHJpbnQgJyVyIGlzIGFuIG9yZGluYXJ5IGRpcmVjdG9yeScgJSAocmNzLCkKLSAgICAgICAgcmV0dXJuCi0gICAgaWYgb3MucGF0aC5leGlzdHMocmNzKToKLSAgICAgICAgcHJpbnQgJyVyIGlzIGEgZmlsZT8hPyEnICUgKHJjcywpCi0gICAgICAgIHJldHVybgotICAgICMKLSAgICBwID0gb3MuZ2V0Y3dkKCkKLSAgICB1cCA9ICcnCi0gICAgZG93biA9ICcnCi0gICAgIyBJbnZhcmlhbnRzOgotICAgICMgKDEpIGpvaW4ocCwgZG93bikgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Ci0gICAgIyAoMikgdXAgaXMgdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHAKLSAgICAjIEVyZ286Ci0gICAgIyAoMykgam9pbih1cCwgZG93bikgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Ci0gICAgI3ByaW50ICdwID0nLCByZXByKHApCi0gICAgd2hpbGUgbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHAsIHJjc3RyZWUpKToKLSAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQocCkKLSAgICAgICAgI3ByaW50ICdoZWFkID0gJXI7IHRhaWwgPSAlcicgJSAoaGVhZCwgdGFpbCkKLSAgICAgICAgaWYgbm90IHRhaWw6Ci0gICAgICAgICAgICBwcmludCAnU29ycnksIG5vIGFuY2VzdG9yIGRpciBjb250YWlucyAlcicgJSAocmNzdHJlZSwpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcCA9IGhlYWQKLSAgICAgICAgdXAgPSBvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCB1cCkKLSAgICAgICAgZG93biA9IG9zLnBhdGguam9pbih0YWlsLCBkb3duKQotICAgICAgICAjcHJpbnQgJ3AgPSAlcjsgdXAgPSAlcjsgZG93biA9ICVyJyAlIChwLCB1cCwgZG93bikKLSAgICB0aGVyZSA9IG9zLnBhdGguam9pbih1cCwgcmNzdHJlZSkKLSAgICB0aGVyZSA9IG9zLnBhdGguam9pbih0aGVyZSwgZG93bikKLSAgICB0aGVyZSA9IG9zLnBhdGguam9pbih0aGVyZSwgcmNzKQotICAgIGlmIG9zLnBhdGguaXNkaXIodGhlcmUpOgotICAgICAgICBwcmludCAnJXIgYWxyZWFkeSBleGlzdHMnICUgKHRoZXJlLCApCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQgJ21ha2luZyAlcicgJSAodGhlcmUsKQotICAgICAgICBtYWtlZGlycyh0aGVyZSkKLSAgICBwcmludCAnbWFraW5nIHN5bWxpbmsgJXIgLT4gJXInICUgKHJjcywgdGhlcmUpCi0gICAgb3Muc3ltbGluayh0aGVyZSwgcmNzKQotCi1kZWYgbWFrZWRpcnMocCk6Ci0gICAgaWYgbm90IG9zLnBhdGguaXNkaXIocCk6Ci0gICAgICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KHApCi0gICAgICAgIG1ha2VkaXJzKGhlYWQpCi0gICAgICAgIG9zLm1rZGlyKHAsIDA3NzcpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbW9yc2UucHkgYi9EZW1vL3NjcmlwdHMvbW9yc2UucHkKaW5kZXggM2RhNDlkYS4uMjY1ZmFlOSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL21vcnNlLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9tb3JzZS5weQpAQCAtMSwzICsxLDUgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKwogIyBEQUggc2hvdWxkIGJlIHRocmVlIERPVHMuCiAjIFNwYWNlIGJldHdlZW4gRE9UcyBhbmQgREFIcyBzaG91bGQgYmUgb25lIERPVC4KICMgU3BhY2UgYmV0d2VlbiB0d28gbGV0dGVycyBzaG91bGQgYmUgb25lIERBSC4KQEAgLTM2LDUzICszOCw0NCBAQAogICAgICAgICAnWCc6ICctLi4tJywgICAgICAgICAgICAneCc6ICctLi4tJywKICAgICAgICAgJ1knOiAnLS4tLScsICAgICAgICAgICAgJ3knOiAnLS4tLScsCiAgICAgICAgICdaJzogJy0tLi4nLCAgICAgICAgICAgICd6JzogJy0tLi4nLAotICAgICAgICAnMCc6ICctLS0tLScsCi0gICAgICAgICcxJzogJy4tLS0tJywKLSAgICAgICAgJzInOiAnLi4tLS0nLAotICAgICAgICAnMyc6ICcuLi4tLScsCi0gICAgICAgICc0JzogJy4uLi4tJywKLSAgICAgICAgJzUnOiAnLi4uLi4nLAotICAgICAgICAnNic6ICctLi4uLicsCi0gICAgICAgICc3JzogJy0tLi4uJywKLSAgICAgICAgJzgnOiAnLS0tLi4nLAotICAgICAgICAnOSc6ICctLS0tLicsCi0gICAgICAgICcsJzogJy0tLi4tLScsCi0gICAgICAgICcuJzogJy4tLi0uLScsCi0gICAgICAgICc/JzogJy4uLS0uLicsCi0gICAgICAgICc7JzogJy0uLS4tLicsCi0gICAgICAgICc6JzogJy0tLS4uLicsCi0gICAgICAgICInIjogJy4tLS0tLicsCi0gICAgICAgICctJzogJy0uLi4uLScsCi0gICAgICAgICcvJzogJy0uLi0uJywKLSAgICAgICAgJygnOiAnLS4tLS4tJywKLSAgICAgICAgJyknOiAnLS4tLS4tJywKLSAgICAgICAgJ18nOiAnLi4tLS4tJywKLSAgICAgICAgJyAnOiAnICcKKyAgICAgICAgJzAnOiAnLS0tLS0nLCAgICAgICAgICAgJywnOiAnLS0uLi0tJywKKyAgICAgICAgJzEnOiAnLi0tLS0nLCAgICAgICAgICAgJy4nOiAnLi0uLS4tJywKKyAgICAgICAgJzInOiAnLi4tLS0nLCAgICAgICAgICAgJz8nOiAnLi4tLS4uJywKKyAgICAgICAgJzMnOiAnLi4uLS0nLCAgICAgICAgICAgJzsnOiAnLS4tLi0uJywKKyAgICAgICAgJzQnOiAnLi4uLi0nLCAgICAgICAgICAgJzonOiAnLS0tLi4uJywKKyAgICAgICAgJzUnOiAnLi4uLi4nLCAgICAgICAgICAgIiciOiAnLi0tLS0uJywKKyAgICAgICAgJzYnOiAnLS4uLi4nLCAgICAgICAgICAgJy0nOiAnLS4uLi4tJywKKyAgICAgICAgJzcnOiAnLS0uLi4nLCAgICAgICAgICAgJy8nOiAnLS4uLS4nLAorICAgICAgICAnOCc6ICctLS0uLicsICAgICAgICAgICAnKCc6ICctLi0tLi0nLAorICAgICAgICAnOSc6ICctLS0tLicsICAgICAgICAgICAnKSc6ICctLi0tLi0nLAorICAgICAgICAnICc6ICcgJywgICAgICAgICAgICAgICAnXyc6ICcuLi0tLi0nLAogfQogCitub3dhdmUgPSAnXDAnICogMjAwCisKICMgSWYgd2UgcGxheSBhdCA0NC4xIGtIeiAod2hpY2ggd2UgZG8pLCB0aGVuIGlmIHdlIHByb2R1Y2Ugb25lIHNpbmUKICMgd2F2ZSBpbiAxMDAgc2FtcGxlcywgd2UgZ2V0IGEgdG9uZSBvZiA0NDEgSHouICBJZiB3ZSBwcm9kdWNlIHR3bwogIyBzaW5lIHdhdmVzIGluIHRoZXNlIDEwMCBzYW1wbGVzLCB3ZSBnZXQgYSB0b25lIG9mIDg4MiBIei4gIDg4MiBIegogIyBhcHBlYXJzIHRvIGJlIGEgbmljZSBvbmUgZm9yIHBsYXlpbmcgbW9yc2UgY29kZS4KIGRlZiBta3dhdmUob2N0YXZlKToKLSAgICBnbG9iYWwgc2luZXdhdmUsIG5vd2F2ZQogICAgIHNpbmV3YXZlID0gJycKICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgotICAgICAgICB2YWwgPSBpbnQobWF0aC5zaW4obWF0aC5waSAqIGZsb2F0KGkpICogb2N0YXZlIC8gNTAuMCkgKiAzMDAwMCkKLSAgICAgICAgc2luZXdhdmUgPSBzaW5ld2F2ZSArIGNocigodmFsID4+IDgpICYgMjU1KSArIGNocih2YWwgJiAyNTUpCi0gICAgbm93YXZlID0gJ1wwJyAqIDIwMAorICAgICAgICB2YWwgPSBpbnQobWF0aC5zaW4obWF0aC5waSAqIGkgKiBvY3RhdmUgLyA1MC4wKSAqIDMwMDAwKQorICAgICAgICBzaW5ld2F2ZSArPSBjaHIoKHZhbCA+PiA4KSAmIDI1NSkgKyBjaHIodmFsICYgMjU1KQorICAgIHJldHVybiBzaW5ld2F2ZQogCi1ta3dhdmUoT0NUQVZFKQorZGVmYXVsdHdhdmUgPSBta3dhdmUoT0NUQVZFKQogCiBkZWYgbWFpbigpOgotICAgIGltcG9ydCBnZXRvcHQsIHN0cmluZworICAgIGltcG9ydCBnZXRvcHQKICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ286cDonKQogICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1VzYWdlICcgKyBzeXMuYXJndlswXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBbIC1vIG91dGZpbGUgXSBbIGFyZ3MgXSAuLi5cbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgJyBbIC1vIG91dGZpbGUgXSBbIC1wIG9jdGF2ZSBdIFsgd29yZHMgXSAuLi5cbicpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgZGV2ID0gTm9uZQorICAgIHdhdmUgPSBkZWZhdWx0d2F2ZQogICAgIGZvciBvLCBhIGluIG9wdHM6CiAgICAgICAgIGlmIG8gPT0gJy1vJzoKICAgICAgICAgICAgIGltcG9ydCBhaWZjCkBAIC05MSw3ICs4NCw3IEBACiAgICAgICAgICAgICBkZXYuc2V0c2FtcHdpZHRoKDIpCiAgICAgICAgICAgICBkZXYuc2V0bmNoYW5uZWxzKDEpCiAgICAgICAgIGlmIG8gPT0gJy1wJzoKLSAgICAgICAgICAgIG1rd2F2ZShzdHJpbmcuYXRvaShhKSkKKyAgICAgICAgICAgIHdhdmUgPSBta3dhdmUoaW50KGEpKQogICAgIGlmIG5vdCBkZXY6CiAgICAgICAgIGltcG9ydCBhdWRpb2RldgogICAgICAgICBkZXYgPSBhdWRpb2Rldi5BdWRpb0RldigpCkBAIC0xMDEsMTggKzk0LDE0IEBACiAgICAgICAgIGRldi5jbG9zZSA9IGRldi5zdG9wCiAgICAgICAgIGRldi53cml0ZWZyYW1lc3JhdyA9IGRldi53cml0ZWZyYW1lcwogICAgIGlmIGFyZ3M6Ci0gICAgICAgIGxpbmUgPSBzdHJpbmcuam9pbihhcmdzKQorICAgICAgICBzb3VyY2UgPSBbJyAnLmpvaW4oYXJncyldCiAgICAgZWxzZToKLSAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCi0gICAgd2hpbGUgbGluZToKKyAgICAgICAgc291cmNlID0gaXRlcihzeXMuc3RkaW4ucmVhZGxpbmUsICcnKQorICAgIGZvciBsaW5lIGluIHNvdXJjZToKICAgICAgICAgbWxpbmUgPSBtb3JzZShsaW5lKQotICAgICAgICBwbGF5KG1saW5lLCBkZXYpCisgICAgICAgIHBsYXkobWxpbmUsIGRldiwgd2F2ZSkKICAgICAgICAgaWYgaGFzYXR0cihkZXYsICd3YWl0Jyk6CiAgICAgICAgICAgICBkZXYud2FpdCgpCi0gICAgICAgIGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lID0gJycKICAgICBkZXYuY2xvc2UoKQogCiAjIENvbnZlcnQgYSBzdHJpbmcgdG8gbW9yc2UgY29kZSB3aXRoIFwwMDEgYmV0d2VlbiB0aGUgY2hhcmFjdGVycyBpbgpAQCAtMTIxLDI5ICsxMTAsMjkgQEAKICAgICByZXMgPSAnJwogICAgIGZvciBjIGluIGxpbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlcyA9IHJlcyArIG1vcnNldGFiW2NdICsgJ1wwMDEnCisgICAgICAgICAgICByZXMgKz0gbW9yc2V0YWJbY10gKyAnXDAwMScKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXMKIAogIyBQbGF5IGEgbGluZSBvZiBtb3JzZSBjb2RlLgotZGVmIHBsYXkobGluZSwgZGV2KToKK2RlZiBwbGF5KGxpbmUsIGRldiwgd2F2ZSk6CiAgICAgZm9yIGMgaW4gbGluZToKICAgICAgICAgaWYgYyA9PSAnLic6Ci0gICAgICAgICAgICBzaW5lKGRldiwgRE9UKQorICAgICAgICAgICAgc2luZShkZXYsIERPVCwgd2F2ZSkKICAgICAgICAgZWxpZiBjID09ICctJzoKLSAgICAgICAgICAgIHNpbmUoZGV2LCBEQUgpCisgICAgICAgICAgICBzaW5lKGRldiwgREFILCB3YXZlKQogICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAjIHNwYWNlCiAgICAgICAgICAgICBwYXVzZShkZXYsIERBSCArIERPVCkKICAgICAgICAgcGF1c2UoZGV2LCBET1QpCiAKLWRlZiBzaW5lKGRldiwgbGVuZ3RoKToKK2RlZiBzaW5lKGRldiwgbGVuZ3RoLCB3YXZlKToKICAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgotICAgICAgICBkZXYud3JpdGVmcmFtZXNyYXcoc2luZXdhdmUpCisgICAgICAgIGRldi53cml0ZWZyYW1lc3Jhdyh3YXZlKQogCiBkZWYgcGF1c2UoZGV2LCBsZW5ndGgpOgogICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6CiAgICAgICAgIGRldi53cml0ZWZyYW1lc3Jhdyhub3dhdmUpCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXycgb3Igc3lzLmFyZ3ZbMF0gPT0gX19uYW1lX186CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL25ld3NsaXN0LnB5IGIvRGVtby9zY3JpcHRzL25ld3NsaXN0LnB5CmluZGV4IDFkYzhhZjIuLmE5MWU5MDEgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9uZXdzbGlzdC5weQorKysgYi9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkKQEAgLTMyLDIyICszMiwyMiBAQAogIyBmcmFzZXJAZXVyb3BhcmMueGVyb3guY29tICAgICAgICAgICAgICAgICAgICAgcXMxMDFAY2wuY2FtLmFjLnVrCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWltcG9ydCBzeXMsbm50cGxpYiwgc3RyaW5nLCBtYXJzaGFsLCB0aW1lLCBvcywgcG9zaXgsIHN0cmluZworaW1wb3J0IHN5cywgbm50cGxpYiwgbWFyc2hhbCwgdGltZSwgb3MKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ2hlY2sgdGhlc2UgdmFyaWFibGVzIGJlZm9yZSBydW5uaW5nISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAKICMgVG9wIGRpcmVjdG9yeS4KICMgRmlsZW5hbWVzIHdoaWNoIGRvbid0IHN0YXJ0IHdpdGggLyBhcmUgdGFrZW4gYXMgYmVpbmcgcmVsYXRpdmUgdG8gdGhpcy4KLXRvcGRpcj0nL2FuZnMvcXNiaWdkaXNjL3dlYi9odG1sL25ld3NwYWdlJwordG9wZGlyID0gb3MucGF0aC5leHBhbmR1c2VyKCd+L25ld3NwYWdlJykKIAogIyBUaGUgbmFtZSBvZiB5b3VyIE5OVFAgaG9zdAogIyBlZy4KICMgICAgbmV3c2hvc3QgPSAnbm50cC1zZXJ2LmNsLmNhbS5hYy51aycKICMgb3IgdXNlIGZvbGxvd2luZyB0byBnZXQgdGhlIG5hbWUgZnJvbSB0aGUgTk5UUFNFUlZFUiBlbnZpcm9ubWVudAogIyB2YXJpYWJsZToKLSMgICAgbmV3c2hvc3QgPSBwb3NpeC5lbnZpcm9uWydOTlRQU0VSVkVSJ10KLW5ld3Nob3N0ID0gJ25udHAtc2Vydi5jbC5jYW0uYWMudWsnCisjICAgIG5ld3Nob3N0ID0gb3MuZW52aXJvblsnTk5UUFNFUlZFUiddCituZXdzaG9zdCA9ICduZXdzLmV4YW1wbGUuY29tJwogCiAjIFRoZSBmaWxlbmFtZSBmb3IgYSBsb2NhbCBjYWNoZSBvZiB0aGUgbmV3c2dyb3VwIGxpc3QKIHRyZWVmaWxlID0gJ2dyb3VwdHJlZScKQEAgLTgxLDcgKzgxLDcgQEAKICMgcGFnZWxpbmtpY29uIGNhbiBjb250YWluIGh0bWwgdG8gcHV0IGFuIGljb24gYWZ0ZXIgbGlua3MgdG8KICMgZnVydGhlciBwYWdlcy4gVGhpcyBoZWxwcyB0byBtYWtlIGltcG9ydGFudCBsaW5rcyBzdGFuZCBvdXQuCiAjIFNldCB0byAnJyBpZiBub3Qgd2FudGVkLCBvciAnLi4uJyBpcyBxdWl0ZSBhIGdvb2Qgb25lLgotcGFnZWxpbmtpY29uPScuLi4gPGltZyBzcmM9Imh0dHA6Ly9wZWxpY2FuLmNsLmNhbS5hYy51ay9pY29ucy9wYWdlLnhibSI+ICcKK3BhZ2VsaW5raWNvbiA9ICcuLi4gPGltZyBzcmM9Imh0dHA6Ly9wZWxpY2FuLmNsLmNhbS5hYy51ay9pY29ucy9wYWdlLnhibSI+ICcKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgTGVzcyBpbXBvcnRhbnQgcGVyc29uYWwgcHJlZmVyZW5jZXM6CkBAIC0xMDYsNyArMTA2LDcgQEAKIGZyb20gc3RhdCBpbXBvcnQgKgogCiByY3NyZXYgPSAnJFJldmlzaW9uJCcKLXJjc3JldiA9IHN0cmluZy5qb2luKGZpbHRlcihsYW1iZGEgczogJyQnIG5vdCBpbiBzLCBzdHJpbmcuc3BsaXQocmNzcmV2KSkpCityY3NyZXYgPSAnICcuam9pbihmaWx0ZXIobGFtYmRhIHM6ICckJyBub3QgaW4gcywgcmNzcmV2LnNwbGl0KCkpKQogZGVzYyA9IHt9CiAKICMgTWFrZSAocG9zc2libHkpIHJlbGF0aXZlIGZpbGVuYW1lcyBpbnRvIGFic29sdXRlIG9uZXMKQEAgLTEyMCw3ICsxMjAsNyBAQAogZGVmIGFkZHRvdHJlZSh0cmVlLCBncm91cHMpOgogICAgIHByaW50ICdVcGRhdGluZyB0cmVlLi4uJwogICAgIGZvciBpIGluIGdyb3VwczoKLSAgICAgICAgcGFydHMgPSBzdHJpbmcuc3BsaXRmaWVsZHMoaSwnLicpCisgICAgICAgIHBhcnRzID0gaS5zcGxpdCgnLicpCiAgICAgICAgIG1ha2VsZWFmKHRyZWUsIHBhcnRzKQogCiAjIE1ha2VsZWFmIG1ha2VzIGEgbGVhZiBhbmQgdGhlIGJyYW5jaCBsZWFkaW5nIHRvIGl0IGlmIG5lY2Vzc2FyeQpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgaiA9IHBhdGhbMF0KICAgICBsID0gbGVuKHBhdGgpCiAKLSAgICBpZiBub3QgdHJlZS5oYXNfa2V5KGopOgorICAgIGlmIGogbm90IGluIHRyZWU6CiAgICAgICAgIHRyZWVbal0gPSB7fQogICAgIGlmIGwgPT0gMToKICAgICAgICAgdHJlZVtqXVsnLiddID0gJy4nCkBAIC0xNDEsMzQgKzE0MSwzOCBAQAogIyB0byB0aG9zZSBncm91cHMgYmVnaW5uaW5nIHdpdGggPHJvb3Q+LgogCiBkZWYgY3JlYXRlcGFnZShyb290LCB0cmVlLCBwKToKLSAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYWdlZGlyLHJvb3QrJy5odG1sJykKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYWdlZGlyLCByb290KycuaHRtbCcpCiAgICAgaWYgcm9vdCA9PSByb290cGFnZToKICAgICAgICAgZGV0YWlsID0gJycKICAgICBlbHNlOgogICAgICAgICBkZXRhaWwgPSAnIHVuZGVyICcgKyByb290Ci0gICAgZiA9IG9wZW4oZmlsZW5hbWUsJ3cnKQotICAgICMgZi53cml0ZSgnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcbicpCi0gICAgZi53cml0ZSgnPFRJVExFPk5ld3Nncm91cHMgYXZhaWxhYmxlJyArIGRldGFpbCArICc8L1RJVExFPlxuJykKLSAgICBmLndyaXRlKCc8SDE+TmV3c2dyb3VwcyBhdmFpbGFibGUnICsgZGV0YWlsICsnPC9IMT5cbicpCi0gICAgZi53cml0ZSgnPEEgSFJFRj0iJytodHRwcHJlZityb290cGFnZSsnLmh0bWwiPkJhY2sgdG8gdG9wIGxldmVsPC9BPjxQPlxuJykKLSAgICBwcmludHRyZWUoZix0cmVlLDAscCkKLSAgICBmLndyaXRlKCc8ST5UaGlzIHBhZ2UgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IFwnbmV3c2xpc3RcJyB2LiAnK3Jjc3JldisnLicpCi0gICAgZi53cml0ZSh0aW1lLmN0aW1lKHRpbWUudGltZSgpKSArICc8L0k+PFA+JykKLSAgICBmLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgIyBmLndyaXRlKCdDb250ZW50LVR5cGU6IHRleHQvaHRtbFxuJykKKyAgICAgICAgZi53cml0ZSgnPGh0bWw+XG48aGVhZD5cbicpCisgICAgICAgIGYud3JpdGUoJzx0aXRsZT5OZXdzZ3JvdXBzIGF2YWlsYWJsZSVzPC90aXRsZT5cbicgJSBkZXRhaWwpCisgICAgICAgIGYud3JpdGUoJzwvaGVhZD5cbjxib2R5PlxuJykKKyAgICAgICAgZi53cml0ZSgnPGgxPk5ld3Nncm91cHMgYXZhaWxhYmxlJXM8L2gxPlxuJyAlIGRldGFpbCkKKyAgICAgICAgZi53cml0ZSgnPGEgaHJlZj0iJXMlcy5odG1sIj5CYWNrIHRvIHRvcCBsZXZlbDwvYT48cD5cbicgJQorICAgICAgICAgICAgICAgIChodHRwcHJlZiwgcm9vdHBhZ2UpKQorICAgICAgICBwcmludHRyZWUoZiwgdHJlZSwgMCwgcCkKKyAgICAgICAgZi53cml0ZSgnXG48cD4nKQorICAgICAgICBmLndyaXRlKCI8aT5UaGlzIHBhZ2UgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5ICduZXdzbGlzdCcgdi4gJXMuIiAlCisgICAgICAgICAgICAgICAgcmNzcmV2KQorICAgICAgICBmLndyaXRlKHRpbWUuY3RpbWUodGltZS50aW1lKCkpICsgJzwvaT5cbicpCisgICAgICAgIGYud3JpdGUoJzwvYm9keT5cbjwvaHRtbD5cbicpCiAKICMgUHJpbnR0cmVlIHByaW50cyB0aGUgZ3JvdXBzIGFzIGEgYnVsbGV0ZWQgbGlzdC4gIEdyb3VwcyB3aXRoCiAjIG1vcmUgdGhhbiA8c3VibGlzdHNpemU+IHN1Ymdyb3VwcyB3aWxsIGJlIHB1dCBvbiBhIHNlcGFyYXRlIHBhZ2UuCiAjIE90aGVyIHNldHMgb2Ygc3ViZ3JvdXBzIGFyZSBqdXN0IGluZGVudGVkLgogCiBkZWYgcHJpbnR0cmVlKGYsIHRyZWUsIGluZGVudCwgcCk6Ci0gICAgZ2xvYmFsIGRlc2MKICAgICBsID0gbGVuKHRyZWUpCiAKLSAgICBpZiBsID4gc3VibGlzdHNpemUgYW5kIGluZGVudD4wOgorICAgIGlmIGwgPiBzdWJsaXN0c2l6ZSBhbmQgaW5kZW50ID4gMDoKICAgICAgICAgIyBDcmVhdGUgYSBuZXcgcGFnZSBhbmQgYSBsaW5rIHRvIGl0Ci0gICAgICAgIGYud3JpdGUoJzxMST48Qj48QSBIUkVGPSInK2h0dHBwcmVmK3BbMTpdKycuaHRtbCI+JykKLSAgICAgICAgZi53cml0ZShwWzE6XSsnLionKQotICAgICAgICBmLndyaXRlKCc8L0E+PC9CPicrcGFnZWxpbmtpY29uKydcbicpCisgICAgICAgIGYud3JpdGUoJzxsaT48Yj48YSBocmVmPSIlcyVzLmh0bWwiPicgJSAoaHR0cHByZWYsIHBbMTpdKSkKKyAgICAgICAgZi53cml0ZShwWzE6XSArICcuKicpCisgICAgICAgIGYud3JpdGUoJzwvYT48L2I+JXNcbicgJSBwYWdlbGlua2ljb24pCiAgICAgICAgIGNyZWF0ZXBhZ2UocFsxOl0sIHRyZWUsIHApCiAgICAgICAgIHJldHVybgogCkBAIC0xNzgsNjcgKzE4Miw2NCBAQAogICAgICAgICBrbC5zb3J0KCkKICAgICAgICAgaWYgaW5kZW50ID4gMDoKICAgICAgICAgICAgICMgQ3JlYXRlIGEgc3ViLWxpc3QKLSAgICAgICAgICAgIGYud3JpdGUoJzxMST4nK3BbMTpdKydcbjxVTD4nKQorICAgICAgICAgICAgZi53cml0ZSgnPGxpPiVzXG48dWw+JyAlIHBbMTpdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBDcmVhdGUgYSBtYWluIGxpc3QKLSAgICAgICAgICAgIGYud3JpdGUoJzxVTD4nKQorICAgICAgICAgICAgZi53cml0ZSgnPHVsPicpCiAgICAgICAgIGluZGVudCA9IGluZGVudCArIDEKIAogICAgIGZvciBpIGluIGtsOgogICAgICAgICBpZiBpID09ICcuJzoKICAgICAgICAgICAgICMgT3V0cHV0IGEgbmV3c2dyb3VwCi0gICAgICAgICAgICBmLndyaXRlKCc8TEk+PEEgSFJFRj0ibmV3czonICsgcFsxOl0gKyAnIj4nKyBwWzE6XSArICc8L0E+ICcpCi0gICAgICAgICAgICBpZiBkZXNjLmhhc19rZXkocFsxOl0pOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJyAgICAgPEk+JytkZXNjW3BbMTpdXSsnPC9JPlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJzxsaT48YSBocmVmPSJuZXdzOiVzIj4lczwvYT4gJyAlIChwWzE6XSwgcFsxOl0pKQorICAgICAgICAgICAgaWYgcFsxOl0gaW4gZGVzYzoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgIDxpPiVzPC9pPlxuJyAlIGRlc2NbcFsxOl1dKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIE91dHB1dCBhIGhpZXJhcmNoeQotICAgICAgICAgICAgcHJpbnR0cmVlKGYsdHJlZVtpXSwgaW5kZW50LCBwKycuJytpKQorICAgICAgICAgICAgcHJpbnR0cmVlKGYsIHRyZWVbaV0sIGluZGVudCwgcCsnLicraSkKIAogICAgIGlmIGwgPiAxOgotICAgICAgICBmLndyaXRlKCdcbjwvVUw+JykKKyAgICAgICAgZi53cml0ZSgnXG48L3VsPicpCiAKICMgUmVhZGluZyBkZXNjcmlwdGlvbnMgZmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyBUaGlzIHJldHVybnMgYW4gYXJyYXkgbWFwcGluZyBncm91cCBuYW1lIHRvIGl0cyBkZXNjcmlwdGlvbgorIyBUaGlzIHJldHVybnMgYSBkaWN0IG1hcHBpbmcgZ3JvdXAgbmFtZSB0byBpdHMgZGVzY3JpcHRpb24KIAogZGVmIHJlYWRkZXNjKGRlc2NmaWxlKToKICAgICBnbG9iYWwgZGVzYwotCiAgICAgZGVzYyA9IHt9CiAKICAgICBpZiBkZXNjZmlsZSA9PSAnJzoKICAgICAgICAgcmV0dXJuCiAKICAgICB0cnk6Ci0gICAgICAgIGQgPSBvcGVuKGRlc2NmaWxlLCAncicpCi0gICAgICAgIHByaW50ICdSZWFkaW5nIGRlc2NyaXB0aW9ucy4uLicKLSAgICBleGNlcHQgKElPRXJyb3IpOgorICAgICAgICB3aXRoIG9wZW4oZGVzY2ZpbGUsICdyJykgYXMgZDoKKyAgICAgICAgICAgIHByaW50ICdSZWFkaW5nIGRlc2NyaXB0aW9ucy4uLicKKyAgICAgICAgICAgIGZvciBsIGluIGQ6CisgICAgICAgICAgICAgICAgYml0cyA9IGwuc3BsaXQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZ3JwID0gYml0c1swXQorICAgICAgICAgICAgICAgICAgICBkc2MgPSAnICcuam9pbihiaXRzWzE6XSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRzYykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY1tncnBdID0gZHNjCisgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgcHJpbnQgJ0ZhaWxlZCB0byBvcGVuIGRlc2NyaXB0aW9uIGZpbGUgJyArIGRlc2NmaWxlCiAgICAgICAgIHJldHVybgotICAgIGwgPSBkLnJlYWRsaW5lKCkKLSAgICB3aGlsZSBsICE9ICcnOgotICAgICAgICBiaXRzID0gc3RyaW5nLnNwbGl0KGwpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGdycCA9IGJpdHNbMF0KLSAgICAgICAgICAgIGRzYyA9IHN0cmluZy5qb2luKGJpdHNbMTpdKQotICAgICAgICAgICAgaWYgbGVuKGRzYyk+MToKLSAgICAgICAgICAgICAgICBkZXNjW2dycF0gPSBkc2MKLSAgICAgICAgZXhjZXB0IChJbmRleEVycm9yKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbCA9IGQucmVhZGxpbmUoKQogCiAjIENoZWNrIHRoYXQgb3VwdXQgZGlyZWN0b3J5IGV4aXN0cywgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGFuZCBvZmZlciB0byBjcmVhdGUgaXQgaWYgbm90CiAKIGRlZiBjaGVja29wZGlyKHBhZ2VkaXIpOgogICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhZ2VkaXIpOgotICAgICAgICBwcmludCAnRGlyZWN0b3J5ICcrcGFnZWRpcisnIGRvZXMgbm90IGV4aXN0LicKKyAgICAgICAgcHJpbnQgJ0RpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdC4nICUgcGFnZWRpcgogICAgICAgICBwcmludCAnU2hhbGwgSSBjcmVhdGUgaXQgZm9yIHlvdT8gKHkvbiknCiAgICAgICAgIGlmIHN5cy5zdGRpbi5yZWFkbGluZSgpWzBdID09ICd5JzoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ta2RpcihwYWdlZGlyLDA3NzcpCisgICAgICAgICAgICAgICAgb3MubWtkaXIocGFnZWRpciwgMDc3NykKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBwcmludCAnU29ycnkgLSBmYWlsZWQhJwogICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCkBAIC0yNTgsMjMgKzI1OSwyMSBAQAogICAgICAgICBwcmludCAnSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSBydW4gbmV3c2xpc3QsIHRoZW4nCiAgICAgICAgIHByaW50ICd1c2UgdGhlIC1hIG9wdGlvbiB0byBjcmVhdGUgaXQuJwogICAgICAgICBzeXMuZXhpdCgxKQotICAgIHRyZWVkYXRlID0gJyUwMmQlMDJkJTAyZCcgJSAodHJlZXRpbWVbMF0gJSAxMDAgLHRyZWV0aW1lWzFdLCB0cmVldGltZVsyXSkKKyAgICB0cmVlZGF0ZSA9ICclMDJkJTAyZCUwMmQnICUgKHRyZWV0aW1lWzBdICUgMTAwLCB0cmVldGltZVsxXSwgdHJlZXRpbWVbMl0pCiAgICAgdHJ5OgotICAgICAgICBkdW1wID0gb3Blbih0cmVlZmlsZSwncicpCi0gICAgICAgIHRyZWUgPSBtYXJzaGFsLmxvYWQoZHVtcCkKLSAgICAgICAgZHVtcC5jbG9zZSgpCi0gICAgZXhjZXB0IChJT0Vycm9yKToKKyAgICAgICAgd2l0aCBvcGVuKHRyZWVmaWxlLCAncmInKSBhcyBkdW1wOgorICAgICAgICAgICAgdHJlZSA9IG1hcnNoYWwubG9hZChkdW1wKQorICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICBwcmludCAnQ2Fubm90IG9wZW4gbG9jYWwgZ3JvdXAgbGlzdCAnICsgdHJlZWZpbGUKICAgICByZXR1cm4gKHRyZWUsIHRyZWVkYXRlKQogCiBkZWYgd3JpdGVsb2NhbGxpc3QodHJlZWZpbGUsIHRyZWUpOgogICAgIHRyeToKLSAgICAgICAgZHVtcCA9IG9wZW4odHJlZWZpbGUsJ3cnKQotICAgICAgICBncm91cHMgPSBtYXJzaGFsLmR1bXAodHJlZSxkdW1wKQotICAgICAgICBkdW1wLmNsb3NlKCkKLSAgICAgICAgcHJpbnQgJ1NhdmVkIGxpc3QgdG8gJyt0cmVlZmlsZSsnXG4nCisgICAgICAgIHdpdGggb3Blbih0cmVlZmlsZSwgJ3diJykgYXMgZHVtcDoKKyAgICAgICAgICAgIGdyb3VwcyA9IG1hcnNoYWwuZHVtcCh0cmVlLCBkdW1wKQorICAgICAgICBwcmludCAnU2F2ZWQgbGlzdCB0byAlc1xuJyAlIHRyZWVmaWxlCiAgICAgZXhjZXB0OgotICAgICAgICBwcmludCAnU29ycnkgLSBmYWlsZWQgdG8gd3JpdGUgdG8gbG9jYWwgZ3JvdXAgY2FjaGUgJyt0cmVlZmlsZQorICAgICAgICBwcmludCAnU29ycnkgLSBmYWlsZWQgdG8gd3JpdGUgdG8gbG9jYWwgZ3JvdXAgY2FjaGUnLCB0cmVlZmlsZQogICAgICAgICBwcmludCAnRG9lcyBpdCAob3IgaXRzIGRpcmVjdG9yeSkgaGF2ZSB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucz8nCiAgICAgICAgIHN5cy5leGl0KDEpCiAKQEAgLTI4MiwxNiArMjgxLDE2IEBACiAKIGRlZiBnZXRhbGxncm91cHMoc2VydmVyKToKICAgICBwcmludCAnR2V0dGluZyBsaXN0IG9mIGFsbCBncm91cHMuLi4nCi0gICAgdHJlZWRhdGU9JzAxMDEwMScKKyAgICB0cmVlZGF0ZSA9ICcwMTAxMDEnCiAgICAgaW5mbyA9IHNlcnZlci5saXN0KClbMV0KICAgICBncm91cHMgPSBbXQogICAgIHByaW50ICdQcm9jZXNzaW5nLi4uJwogICAgIGlmIHNraXBlbXB0eToKICAgICAgICAgcHJpbnQgJ1xuSWdub3JpbmcgZm9sbG93aW5nIGVtcHR5IGdyb3VwczonCiAgICAgZm9yIGkgaW4gaW5mbzoKLSAgICAgICAgZ3JwbmFtZSA9IHN0cmluZy5zcGxpdChpWzBdKVswXQotICAgICAgICBpZiBza2lwZW1wdHkgYW5kIHN0cmluZy5hdG9pKGlbMV0pIDwgc3RyaW5nLmF0b2koaVsyXSk6Ci0gICAgICAgICAgICBwcmludCBncnBuYW1lKycgJywKKyAgICAgICAgZ3JwbmFtZSA9IGlbMF0uc3BsaXQoKVswXQorICAgICAgICBpZiBza2lwZW1wdHkgYW5kIGludChpWzFdKSA8IGludChpWzJdKToKKyAgICAgICAgICAgIHByaW50IGdycG5hbWUgKyAnICcsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBncm91cHMuYXBwZW5kKGdycG5hbWUpCiAgICAgcHJpbnQgJ1xuJwpAQCAtMzAyLDEzICszMDEsMTMgQEAKICMgUmV0dXJuIGxpc3Qgb2YgbmV3IGdyb3VwcyBvbiBzZXJ2ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogZGVmIGdldG5ld2dyb3VwcyhzZXJ2ZXIsIHRyZWVkYXRlKToKLSAgICBwcmludCAnR2V0dGluZyBsaXN0IG9mIG5ldyBncm91cHMgc2luY2Ugc3RhcnQgb2YgJyt0cmVlZGF0ZSsnLi4uJywKLSAgICBpbmZvID0gc2VydmVyLm5ld2dyb3Vwcyh0cmVlZGF0ZSwnMDAwMDAxJylbMV0KKyAgICBwcmludCAnR2V0dGluZyBsaXN0IG9mIG5ldyBncm91cHMgc2luY2Ugc3RhcnQgb2YgJXMuLi4nICUgdHJlZWRhdGUsCisgICAgaW5mbyA9IHNlcnZlci5uZXdncm91cHModHJlZWRhdGUsICcwMDAwMDEnKVsxXQogICAgIHByaW50ICdnb3QgJWQuJyAlIGxlbihpbmZvKQogICAgIHByaW50ICdQcm9jZXNzaW5nLi4uJywKICAgICBncm91cHMgPSBbXQogICAgIGZvciBpIGluIGluZm86Ci0gICAgICAgIGdycG5hbWUgPSBzdHJpbmcuc3BsaXQoaSlbMF0KKyAgICAgICAgZ3JwbmFtZSA9IGkuc3BsaXQoKVswXQogICAgICAgICBncm91cHMuYXBwZW5kKGdycG5hbWUpCiAgICAgcHJpbnQgJ0RvbmUnCiAgICAgcmV0dXJuIGdyb3VwcwpAQCAtMzE2LDI4ICszMTUsMjUgQEAKICMgTm93IHRoZSBtYWluIHByb2dyYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogZGVmIG1haW4oKToKLSAgICBnbG9iYWwgZGVzYwotCi0gICAgdHJlZT17fQorICAgIHRyZWUgPSB7fQogCiAgICAgIyBDaGVjayB0aGF0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0cwogICAgIGNoZWNrb3BkaXIocGFnZWRpcikKIAogICAgIHRyeToKLSAgICAgICAgcHJpbnQgJ0Nvbm5lY3RpbmcgdG8gJytuZXdzaG9zdCsnLi4uJworICAgICAgICBwcmludCAnQ29ubmVjdGluZyB0byAlcy4uLicgJSBuZXdzaG9zdAogICAgICAgICBpZiBzeXMudmVyc2lvblswXSA9PSAnMCc6CiAgICAgICAgICAgICBzID0gTk5UUC5pbml0KG5ld3Nob3N0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcyA9IE5OVFAobmV3c2hvc3QpCi0gICAgICAgIGNvbm5lY3RlZCA9IDEKKyAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQogICAgIGV4Y2VwdCAobm50cGxpYi5lcnJvcl90ZW1wLCBubnRwbGliLmVycm9yX3Blcm0pLCB4OgogICAgICAgICBwcmludCAnRXJyb3IgY29ubmVjdGluZyB0byBob3N0OicsIHgKICAgICAgICAgcHJpbnQgJ0lcJ2xsIHRyeSB0byB1c2UganVzdCB0aGUgbG9jYWwgbGlzdC4nCi0gICAgICAgIGNvbm5lY3RlZCA9IDAKKyAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKIAogICAgICMgSWYgLWEgaXMgc3BlY2lmaWVkLCByZWFkIHRoZSBmdWxsIGxpc3Qgb2YgZ3JvdXBzIGZyb20gc2VydmVyCiAgICAgaWYgY29ubmVjdGVkIGFuZCBsZW4oc3lzLmFyZ3YpID4gMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gJy1hJzoKLQogICAgICAgICBncm91cHMgPSBnZXRhbGxncm91cHMocykKIAogICAgICMgT3RoZXJ3aXNlIGp1c3QgcmVhZCB0aGUgbG9jYWwgZmlsZSBhbmQgdGhlbiBhZGQKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9waS5weSBiL0RlbW8vc2NyaXB0cy9waS5weQppbmRleCBlNmUzYjgyLi4wNzQwY2QwIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvcGkucHkKKysrIGIvRGVtby9zY3JpcHRzL3BpLnB5CkBAIC0xMSwyMSArMTEsMjAgQEAKIGltcG9ydCBzeXMKIAogZGVmIG1haW4oKToKLSAgICBrLCBhLCBiLCBhMSwgYjEgPSAyTCwgNEwsIDFMLCAxMkwsIDRMCi0gICAgd2hpbGUgMToKKyAgICBrLCBhLCBiLCBhMSwgYjEgPSAyLCA0LCAxLCAxMiwgNAorICAgIHdoaWxlIFRydWU6CiAgICAgICAgICMgTmV4dCBhcHByb3hpbWF0aW9uCi0gICAgICAgIHAsIHEsIGsgPSBrKmssIDJMKmsrMUwsIGsrMUwKKyAgICAgICAgcCwgcSwgayA9IGsqaywgMiprKzEsIGsrMQogICAgICAgICBhLCBiLCBhMSwgYjEgPSBhMSwgYjEsIHAqYStxKmExLCBwKmIrcSpiMQogICAgICAgICAjIFByaW50IGNvbW1vbiBkaWdpdHMKICAgICAgICAgZCwgZDEgPSBhLy9iLCBhMS8vYjEKICAgICAgICAgd2hpbGUgZCA9PSBkMToKICAgICAgICAgICAgIG91dHB1dChkKQotICAgICAgICAgICAgYSwgYTEgPSAxMEwqKGElYiksIDEwTCooYTElYjEpCisgICAgICAgICAgICBhLCBhMSA9IDEwKihhJWIpLCAxMCooYTElYjEpCiAgICAgICAgICAgICBkLCBkMSA9IGEvL2IsIGExLy9iMQogCiBkZWYgb3V0cHV0KGQpOgogICAgICMgVXNlIHdyaXRlKCkgdG8gYXZvaWQgc3BhY2VzIGJldHdlZW4gdGhlIGRpZ2l0cwotICAgICMgVXNlIHN0cigpIHRvIGF2b2lkIHRoZSAnTCcKICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihkKSkKICAgICAjIEZsdXNoIHNvIHRoZSBvdXRwdXQgaXMgc2VlbiBpbW1lZGlhdGVseQogICAgIHN5cy5zdGRvdXQuZmx1c2goKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3BwLnB5IGIvRGVtby9zY3JpcHRzL3BwLnB5CmluZGV4IDA0OTFmYTkuLmVmYmU1Y2YgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9wcC5weQorKysgYi9EZW1vL3NjcmlwdHMvcHAucHkKQEAgLTIyLDcgKzIyLDYgQEAKICMgLSBleGNlcHQgZm9yIC1uLy1wLCBydW4gZGlyZWN0bHkgZnJvbSB0aGUgZmlsZSBpZiBhdCBhbGwgcG9zc2libGUKIAogaW1wb3J0IHN5cwotaW1wb3J0IHN0cmluZwogaW1wb3J0IGdldG9wdAogCiBGUyA9ICcnCkBAIC0zNiw3ICszNSw3IEBACiB0cnk6CiAgICAgb3B0bGlzdCwgQVJHUyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYWNkZTpGOm5wJykKIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKLSAgICBzeXMuc3RkZXJyLndyaXRlKHN5cy5hcmd2WzBdICsgJzogJyArIG1zZyArICdcbicpCisgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6ICVzXG4nICUgKHN5cy5hcmd2WzBdLCBtc2cpKQogICAgIHN5cy5leGl0KDIpCiAKIGZvciBvcHRpb24sIG9wdGFyZyBpbiBvcHRsaXN0OgpAQCAtNDcsNyArNDYsNyBAQAogICAgIGVsaWYgb3B0aW9uID09ICctZCc6CiAgICAgICAgIERGTEFHID0gMQogICAgIGVsaWYgb3B0aW9uID09ICctZSc6Ci0gICAgICAgIGZvciBsaW5lIGluIHN0cmluZy5zcGxpdGZpZWxkcyhvcHRhcmcsICdcbicpOgorICAgICAgICBmb3IgbGluZSBpbiBvcHRhcmcuc3BsaXQoJ1xuJyk6CiAgICAgICAgICAgICBTQ1JJUFQuYXBwZW5kKGxpbmUpCiAgICAgZWxpZiBvcHRpb24gPT0gJy1GJzoKICAgICAgICAgRlMgPSBvcHRhcmcKQEAgLTgxLDMxICs4MCwzMSBAQAogZWxpZiBORkxBRzoKICAgICAjIE5vdGUgdGhhdCBpdCBpcyBvbiBwdXJwb3NlIHRoYXQgQUZMQUcgYW5kIFBGTEFHIGFyZQogICAgICMgdGVzdGVkIGR5bmFtaWNhbGx5IGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wCi0gICAgcHJvbG9ndWUgPSBbIFwKLSAgICAgICAgICAgICdMSU5FQ09VTlQgPSAwJywgXAotICAgICAgICAgICAgJ2ZvciBGSUxFIGluIEFSR1M6JywgXAotICAgICAgICAgICAgJyAgIFx0aWYgRklMRSA9PSBcJy1cJzonLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdEZQID0gc3lzLnN0ZGluJywgXAotICAgICAgICAgICAgJyAgIFx0ZWxzZTonLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdEZQID0gb3BlbihGSUxFLCBcJ3JcJyknLCBcCi0gICAgICAgICAgICAnICAgXHRMSU5FTk8gPSAwJywgXAotICAgICAgICAgICAgJyAgIFx0d2hpbGUgMTonLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdExJTkUgPSBGUC5yZWFkbGluZSgpJywgXAotICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBub3QgTElORTogYnJlYWsnLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdExJTkVOTyA9IExJTkVOTyArIDEnLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdExJTkVDT1VOVCA9IExJTkVDT1VOVCArIDEnLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdEwgPSBMSU5FWzotMV0nLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdGFmbGFnID0gQUZMQUcnLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdGlmIGFmbGFnOicsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRpZiBGUzogRiA9IHN0cmluZy5zcGxpdGZpZWxkcyhMLCBGUyknLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0ZWxzZTogRiA9IHN0cmluZy5zcGxpdChMKScgXAorICAgIHByb2xvZ3VlID0gWworICAgICAgICAgICAgJ0xJTkVDT1VOVCA9IDAnLAorICAgICAgICAgICAgJ2ZvciBGSUxFIGluIEFSR1M6JywKKyAgICAgICAgICAgICcgICBcdGlmIEZJTEUgPT0gXCctXCc6JywKKyAgICAgICAgICAgICcgICBcdCAgIFx0RlAgPSBzeXMuc3RkaW4nLAorICAgICAgICAgICAgJyAgIFx0ZWxzZTonLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRGUCA9IG9wZW4oRklMRSwgXCdyXCcpJywKKyAgICAgICAgICAgICcgICBcdExJTkVOTyA9IDAnLAorICAgICAgICAgICAgJyAgIFx0d2hpbGUgMTonLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRMSU5FID0gRlAucmVhZGxpbmUoKScsCisgICAgICAgICAgICAnICAgXHQgICBcdGlmIG5vdCBMSU5FOiBicmVhaycsCisgICAgICAgICAgICAnICAgXHQgICBcdExJTkVOTyA9IExJTkVOTyArIDEnLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRMSU5FQ09VTlQgPSBMSU5FQ09VTlQgKyAxJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0TCA9IExJTkVbOi0xXScsCisgICAgICAgICAgICAnICAgXHQgICBcdGFmbGFnID0gQUZMQUcnLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBhZmxhZzonLAorICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGlmIEZTOiBGID0gTC5zcGxpdChGUyknLAorICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGVsc2U6IEYgPSBMLnNwbGl0KCknCiAgICAgICAgICAgICBdCi0gICAgZXBpbG9ndWUgPSBbIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0aWYgbm90IFBGTEFHOiBjb250aW51ZScsIFwKLSAgICAgICAgICAgICcgICBcdCAgIFx0aWYgYWZsYWc6JywgXAotICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGlmIEZTOiBwcmludCBzdHJpbmcuam9pbmZpZWxkcyhGLCBGUyknLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdCAgIFx0ZWxzZTogcHJpbnQgc3RyaW5nLmpvaW4oRiknLCBcCi0gICAgICAgICAgICAnICAgXHQgICBcdGVsc2U6IHByaW50IEwnLCBcCisgICAgZXBpbG9ndWUgPSBbCisgICAgICAgICAgICAnICAgXHQgICBcdGlmIG5vdCBQRkxBRzogY29udGludWUnLAorICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBhZmxhZzonLAorICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGlmIEZTOiBwcmludCBGUy5qb2luKEYpJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRlbHNlOiBwcmludCBcJyBcJy5qb2luKEYpJywKKyAgICAgICAgICAgICcgICBcdCAgIFx0ZWxzZTogcHJpbnQgTCcsCiAgICAgICAgICAgICBdCiBlbHNlOgogICAgIHByb2xvZ3VlID0gWydpZiAxOiddCkBAIC0xMTQsMTAgKzExMywxMCBAQAogIyBOb3RlIHRoYXQgd2UgaW5kZW50IHVzaW5nIHRhYnMgb25seSwgc28gdGhhdCBhbnkgaW5kZW50YXRpb24gc3R5bGUKICMgdXNlZCBpbiAnY29tbWFuZCcgd2lsbCBjb21lIG91dCByaWdodCBhZnRlciByZS1pbmRlbnRhdGlvbi4KIAotcHJvZ3JhbSA9IHN0cmluZy5qb2luZmllbGRzKHByb2xvZ3VlLCAnXG4nKSArICdcbicKK3Byb2dyYW0gPSAnXG4nLmpvaW4ocHJvbG9ndWUpICsgJ1xuJwogZm9yIGxpbmUgaW4gU0NSSVBUOgotICAgIHByb2dyYW0gPSBwcm9ncmFtICsgKCcgICBcdCAgIFx0JyArIGxpbmUgKyAnXG4nKQotcHJvZ3JhbSA9IHByb2dyYW0gKyAoc3RyaW5nLmpvaW5maWVsZHMoZXBpbG9ndWUsICdcbicpICsgJ1xuJykKKyAgICBwcm9ncmFtICs9ICcgICBcdCAgIFx0JyArIGxpbmUgKyAnXG4nCitwcm9ncmFtICs9ICdcbicuam9pbihlcGlsb2d1ZSkgKyAnXG4nCiAKIGltcG9ydCB0ZW1wZmlsZQogZnAgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQpAQCAtMTI1LDYgKzEyNCw2IEBACiBmcC5mbHVzaCgpCiBpZiBERkxBRzoKICAgICBpbXBvcnQgcGRiCi0gICAgcGRiLnJ1bignZXhlY2ZpbGUoJXIpJyAlICh0Zm4sKSkKKyAgICBwZGIucnVuKCdleGVjZmlsZSglciknICUgKGZwLm5hbWUsKSkKIGVsc2U6Ci0gICAgZXhlY2ZpbGUodGZuKQorICAgIGV4ZWNmaWxlKGZwLm5hbWUpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvcHJpbWVzLnB5IGIvRGVtby9zY3JpcHRzL3ByaW1lcy5weQppbmRleCA1OTM1YTNjLi4yYmY1YmEyIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvcHJpbWVzLnB5CisrKyBiL0RlbW8vc2NyaXB0cy9wcmltZXMucHkKQEAgLTIsMjYgKzIsMjkgQEAKIAogIyBQcmludCBwcmltZSBudW1iZXJzIGluIGEgZ2l2ZW4gcmFuZ2UKIAotZGVmIG1haW4oKToKLSAgICBpbXBvcnQgc3lzCi0gICAgbWluLCBtYXggPSAyLCAweDdmZmZmZmZmCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBtaW4gPSBpbnQoZXZhbChzeXMuYXJndlsxXSkpCi0gICAgICAgIGlmIHN5cy5hcmd2WzI6XToKLSAgICAgICAgICAgIG1heCA9IGludChldmFsKHN5cy5hcmd2WzJdKSkKLSAgICBwcmltZXMobWluLCBtYXgpCi0KIGRlZiBwcmltZXMobWluLCBtYXgpOgotICAgIGlmIDIgPj0gbWluOiBwcmludCAyCisgICAgaWYgbWF4ID49IDIgPj0gbWluOgorICAgICAgICBwcmludCAyCiAgICAgcHJpbWVzID0gWzJdCiAgICAgaSA9IDMKICAgICB3aGlsZSBpIDw9IG1heDoKICAgICAgICAgZm9yIHAgaW4gcHJpbWVzOgotICAgICAgICAgICAgaWYgaSVwID09IDAgb3IgcCpwID4gaTogYnJlYWsKLSAgICAgICAgaWYgaSVwIDw+IDA6CisgICAgICAgICAgICBpZiBpICUgcCA9PSAwIG9yIHAqcCA+IGk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgaSAlIHAgIT0gMDoKICAgICAgICAgICAgIHByaW1lcy5hcHBlbmQoaSkKLSAgICAgICAgICAgIGlmIGkgPj0gbWluOiBwcmludCBpCi0gICAgICAgIGkgPSBpKzIKKyAgICAgICAgICAgIGlmIGkgPj0gbWluOgorICAgICAgICAgICAgICAgIHByaW50IGkKKyAgICAgICAgaSArPSAyCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IHN5cworICAgIG1pbiwgbWF4ID0gMiwgMHg3ZmZmZmZmZgorICAgIGlmIHN5cy5hcmd2WzE6XToKKyAgICAgICAgbWluID0gaW50KHN5cy5hcmd2WzFdKQorICAgICAgICBpZiBzeXMuYXJndlsyOl06CisgICAgICAgICAgICBtYXggPSBpbnQoc3lzLmFyZ3ZbMl0pCisgICAgcHJpbWVzKG1pbiwgbWF4KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3F1ZWVucy5weSBiL0RlbW8vc2NyaXB0cy9xdWVlbnMucHkKaW5kZXggNzQ3NTZiZS4uODY2YTdiMiAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL3F1ZWVucy5weQorKysgYi9EZW1vL3NjcmlwdHMvcXVlZW5zLnB5CkBAIC0xOSw4ICsxOSw4IEBACiAKICAgICBkZWYgcmVzZXQoc2VsZik6CiAgICAgICAgIG4gPSBzZWxmLm4KLSAgICAgICAgc2VsZi55ID0gW05vbmVdKm4gICAgICAgICAgICAgICAjIFdoZXJlIGlzIHRoZSBxdWVlbiBpbiBjb2x1bW4geAotICAgICAgICBzZWxmLnJvdyA9IFswXSpuICAgICAgICAgICAgICAgICMgSXMgcm93W3ldIHNhZmU/CisgICAgICAgIHNlbGYueSA9IFtOb25lXSAqIG4gICAgICAgICAgICAgIyBXaGVyZSBpcyB0aGUgcXVlZW4gaW4gY29sdW1uIHgKKyAgICAgICAgc2VsZi5yb3cgPSBbMF0gKiBuICAgICAgICAgICAgICAjIElzIHJvd1t5XSBzYWZlPwogICAgICAgICBzZWxmLnVwID0gWzBdICogKDIqbi0xKSAgICAgICAgICMgSXMgdXB3YXJkIGRpYWdvbmFsW3gteV0gc2FmZT8KICAgICAgICAgc2VsZi5kb3duID0gWzBdICogKDIqbi0xKSAgICAgICAjIElzIGRvd253YXJkIGRpYWdvbmFsW3greV0gc2FmZT8KICAgICAgICAgc2VsZi5uZm91bmQgPSAwICAgICAgICAgICAgICAgICAjIEluc3RydW1lbnRhdGlvbgpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICBzZWxmLnVwW3gteV0gPSAwCiAgICAgICAgIHNlbGYuZG93blt4K3ldID0gMAogCi0gICAgc2lsZW50ID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBzZXQsIGNvdW50IHNvbHV0aW9ucyBvbmx5CisgICAgc2lsZW50ID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiB0cnVlLCBjb3VudCBzb2x1dGlvbnMgb25seQogCiAgICAgZGVmIGRpc3BsYXkoc2VsZik6CiAgICAgICAgIHNlbGYubmZvdW5kID0gc2VsZi5uZm91bmQgKyAxCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvc2NyaXB0LnB5IGIvRGVtby9zY3JpcHRzL3NjcmlwdC5weQppbmRleCA2ZWFhN2FlLi5hOGFjYTRhIDEwMDc1NQotLS0gYS9EZW1vL3NjcmlwdHMvc2NyaXB0LnB5CisrKyBiL0RlbW8vc2NyaXB0cy9zY3JpcHQucHkKQEAgLTEsNCArMSw1IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKICMgc2NyaXB0LnB5IC0tIE1ha2UgdHlwZXNjcmlwdCBvZiB0ZXJtaW5hbCBzZXNzaW9uLgogIyBVc2FnZToKICMgICAgICAgLWEgICAgICBBcHBlbmQgdG8gdHlwZXNjcmlwdC4KQEAgLTYsMTIgKzcsMTIgQEAKICMgQXV0aG9yOiBTdGVlbiBMdW1ob2x0LgogCiAKLWltcG9ydCBvcywgdGltZSwgc3lzCitpbXBvcnQgb3MsIHRpbWUsIHN5cywgZ2V0b3B0CiBpbXBvcnQgcHR5CiAKIGRlZiByZWFkKGZkKToKICAgICBkYXRhID0gb3MucmVhZChmZCwgMTAyNCkKLSAgICBmaWxlLndyaXRlKGRhdGEpCisgICAgc2NyaXB0LndyaXRlKGRhdGEpCiAgICAgcmV0dXJuIGRhdGEKIAogc2hlbGwgPSAnc2gnCkBAIC0xOSwxNSArMjAsMjMgQEAKIG1vZGUgPSAndycKIGlmIG9zLmVudmlyb24uaGFzX2tleSgnU0hFTEwnKToKICAgICBzaGVsbCA9IG9zLmVudmlyb25bJ1NIRUxMJ10KLWlmICctYScgaW4gc3lzLmFyZ3Y6Ci0gICAgbW9kZSA9ICdhJwotaWYgJy1wJyBpbiBzeXMuYXJndjoKLSAgICBzaGVsbCA9ICdweXRob24nCiAKLWZpbGUgPSBvcGVuKGZpbGVuYW1lLCBtb2RlKQordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2FwJykKK2V4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICBwcmludCAnJXM6ICVzJyAlIChzeXMuYXJndlswXSwgbXNnKQorICAgIHN5cy5leGl0KDIpCisKK2ZvciBvLCBhIGluIG9wdHM6CisgICAgaWYgbyA9PSAnLWEnOgorICAgICAgICBtb2RlID0gJ2EnCisgICAgZWxpZiBvID09ICctcCc6CisgICAgICAgIHNoZWxsID0gJ3B5dGhvbicKKworc2NyaXB0ID0gb3BlbihmaWxlbmFtZSwgbW9kZSkKIAogc3lzLnN0ZG91dC53cml0ZSgnU2NyaXB0IHN0YXJ0ZWQsIGZpbGUgaXMgJXNcbicgJSBmaWxlbmFtZSkKLWZpbGUud3JpdGUoJ1NjcmlwdCBzdGFydGVkIG9uICVzXG4nICUgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkpCitzY3JpcHQud3JpdGUoJ1NjcmlwdCBzdGFydGVkIG9uICVzXG4nICUgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkpCiBwdHkuc3Bhd24oc2hlbGwsIHJlYWQpCi1maWxlLndyaXRlKCdTY3JpcHQgZG9uZSBvbiAlc1xuJyAlIHRpbWUuY3RpbWUodGltZS50aW1lKCkpKQorc2NyaXB0LndyaXRlKCdTY3JpcHQgZG9uZSBvbiAlc1xuJyAlIHRpbWUuY3RpbWUodGltZS50aW1lKCkpKQogc3lzLnN0ZG91dC53cml0ZSgnU2NyaXB0IGRvbmUsIGZpbGUgaXMgJXNcbicgJSBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy91bmJpcnRoZGF5LnB5IGIvRGVtby9zY3JpcHRzL3VuYmlydGhkYXkucHkKaW5kZXggOGVkOTA4NC4uMDU2YWQ0NCAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL3VuYmlydGhkYXkucHkKKysrIGIvRGVtby9zY3JpcHRzL3VuYmlydGhkYXkucHkKQEAgLTEwLDI5ICsxMCwyNiBAQAogaW1wb3J0IGNhbGVuZGFyCiAKIGRlZiBtYWluKCk6Ci0gICAgIyBOb3RlIHRoYXQgdGhlIHJhbmdlIGNoZWNrcyBiZWxvdyBhbHNvIGNoZWNrIGZvciBiYWQgdHlwZXMsCi0gICAgIyBlLmcuIDMuMTQgb3IgKCkuICBIb3dldmVyIHN5bnRhY3RpY2FsbHkgaW52YWxpZCByZXBsaWVzCi0gICAgIyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICBpZiBzeXMuYXJndlsxOl06CiAgICAgICAgIHllYXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCiAgICAgZWxzZToKICAgICAgICAgeWVhciA9IGludChyYXdfaW5wdXQoJ0luIHdoaWNoIHllYXIgd2VyZSB5b3UgYm9ybj8gJykpCi0gICAgaWYgMDw9eWVhcjwxMDA6CisgICAgaWYgMCA8PSB5ZWFyIDwgMTAwOgogICAgICAgICBwcmludCAiSSdsbCBhc3N1bWUgdGhhdCBieSIsIHllYXIsCiAgICAgICAgIHllYXIgPSB5ZWFyICsgMTkwMAogICAgICAgICBwcmludCAneW91IG1lYW4nLCB5ZWFyLCAnYW5kIG5vdCB0aGUgZWFybHkgQ2hyaXN0aWFuIGVyYScKLSAgICBlbGlmIG5vdCAoMTg1MDw9eWVhcjw9MjAwMik6CisgICAgZWxpZiBub3QgKDE4NTAgPD0geWVhciA8PSB0aW1lLmxvY2FsdGltZSgpWzBdKToKICAgICAgICAgcHJpbnQgIkl0J3MgaGFyZCB0byBiZWxpZXZlIHlvdSB3ZXJlIGJvcm4gaW4iLCB5ZWFyCiAgICAgICAgIHJldHVybgotICAgICMKKwogICAgIGlmIHN5cy5hcmd2WzI6XToKICAgICAgICAgbW9udGggPSBpbnQoc3lzLmFyZ3ZbMl0pCiAgICAgZWxzZToKICAgICAgICAgbW9udGggPSBpbnQocmF3X2lucHV0KCdBbmQgaW4gd2hpY2ggbW9udGg/ICgxLTEyKSAnKSkKLSAgICBpZiBub3QgKDE8PW1vbnRoPD0xMik6CisgICAgaWYgbm90ICgxIDw9IG1vbnRoIDw9IDEyKToKICAgICAgICAgcHJpbnQgJ1RoZXJlIGlzIG5vIG1vbnRoIG51bWJlcmVkJywgbW9udGgKICAgICAgICAgcmV0dXJuCi0gICAgIworCiAgICAgaWYgc3lzLmFyZ3ZbMzpdOgogICAgICAgICBkYXkgPSBpbnQoc3lzLmFyZ3ZbM10pCiAgICAgZWxzZToKQEAgLTQxLDM2ICszOCwzNiBAQAogICAgICAgICBtYXhkYXkgPSAyOQogICAgIGVsc2U6CiAgICAgICAgIG1heGRheSA9IGNhbGVuZGFyLm1kYXlzW21vbnRoXQotICAgIGlmIG5vdCAoMTw9ZGF5PD1tYXhkYXkpOgorICAgIGlmIG5vdCAoMSA8PSBkYXkgPD0gbWF4ZGF5KToKICAgICAgICAgcHJpbnQgJ1RoZXJlIGFyZSBubycsIGRheSwgJ2RheXMgaW4gdGhhdCBtb250aCEnCiAgICAgICAgIHJldHVybgotICAgICMKKwogICAgIGJkYXl0dXBsZSA9ICh5ZWFyLCBtb250aCwgZGF5KQogICAgIGJkYXlkYXRlID0gbWtkYXRlKGJkYXl0dXBsZSkKICAgICBwcmludCAnWW91IHdlcmUgYm9ybiBvbicsIGZvcm1hdChiZGF5dHVwbGUpCi0gICAgIworCiAgICAgdG9kYXl0dXBsZSA9IHRpbWUubG9jYWx0aW1lKClbOjNdCiAgICAgdG9kYXlkYXRlID0gbWtkYXRlKHRvZGF5dHVwbGUpCiAgICAgcHJpbnQgJ1RvZGF5IGlzJywgZm9ybWF0KHRvZGF5dHVwbGUpCi0gICAgIworCiAgICAgaWYgYmRheXR1cGxlID4gdG9kYXl0dXBsZToKICAgICAgICAgcHJpbnQgJ1lvdSBhcmUgYSB0aW1lIHRyYXZlbGVyLiAgR28gYmFjayB0byB0aGUgZnV0dXJlIScKICAgICAgICAgcmV0dXJuCi0gICAgIworCiAgICAgaWYgYmRheXR1cGxlID09IHRvZGF5dHVwbGU6CiAgICAgICAgIHByaW50ICdZb3Ugd2VyZSBib3JuIHRvZGF5LiAgSGF2ZSBhIG5pY2UgbGlmZSEnCiAgICAgICAgIHJldHVybgotICAgICMKKwogICAgIGRheXMgPSB0b2RheWRhdGUgLSBiZGF5ZGF0ZQogICAgIHByaW50ICdZb3UgaGF2ZSBsaXZlZCcsIGRheXMsICdkYXlzJwotICAgICMKKwogICAgIGFnZSA9IDAKICAgICBmb3IgeSBpbiByYW5nZSh5ZWFyLCB0b2RheXR1cGxlWzBdICsgMSk6CiAgICAgICAgIGlmIGJkYXl0dXBsZSA8ICh5LCBtb250aCwgZGF5KSA8PSB0b2RheXR1cGxlOgogICAgICAgICAgICAgYWdlID0gYWdlICsgMQotICAgICMKKwogICAgIHByaW50ICdZb3UgYXJlJywgYWdlLCAneWVhcnMgb2xkJwotICAgICMKKwogICAgIGlmIHRvZGF5dHVwbGVbMTpdID09IGJkYXl0dXBsZVsxOl06CiAgICAgICAgIHByaW50ICdDb25ncmF0dWxhdGlvbnMhICBUb2RheSBpcyB5b3VyJywgbnRoKGFnZSksICdiaXJ0aGRheScKICAgICAgICAgcHJpbnQgJ1llc3RlcmRheSB3YXMgeW91cicsCkBAIC04OCwxMCArODUsMTAgQEAKICAgICByZXR1cm4gJyVkdGgnICUgbgogCiBkZWYgbWtkYXRlKCh5ZWFyLCBtb250aCwgZGF5KSk6Ci0gICAgIyBKYW51YXJpIDFzdCwgaW4gMCBBLkQuIGlzIGFyYml0cmFyaWx5IGRlZmluZWQgdG8gYmUgZGF5IDEsCisgICAgIyBKYW51YXJ5IDFzdCwgaW4gMCBBLkQuIGlzIGFyYml0cmFyaWx5IGRlZmluZWQgdG8gYmUgZGF5IDEsCiAgICAgIyBldmVuIHRob3VnaCB0aGF0IGRheSBuZXZlciBhY3R1YWxseSBleGlzdGVkIGFuZCB0aGUgY2FsZW5kYXIKICAgICAjIHdhcyBkaWZmZXJlbnQgdGhlbi4uLgotICAgIGRheXMgPSB5ZWFyKjM2NSAgICAgICAgICAgICAgICAgIyB5ZWFycywgcm91Z2hseQorICAgIGRheXMgPSB5ZWFyKjM2NSAgICAgICAgICAgICAgICAgICMgeWVhcnMsIHJvdWdobHkKICAgICBkYXlzID0gZGF5cyArICh5ZWFyKzMpLy80ICAgICAgICAjIHBsdXMgbGVhcCB5ZWFycywgcm91Z2hseQogICAgIGRheXMgPSBkYXlzIC0gKHllYXIrOTkpLy8xMDAgICAgICMgbWludXMgbm9uLWxlYXAgeWVhcnMgZXZlcnkgY2VudHVyeQogICAgIGRheXMgPSBkYXlzICsgKHllYXIrMzk5KS8vNDAwICAgICMgcGx1cyBsZWFwIHllYXJzIGV2ZXJ5IDQgY2VudGlydWVzCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvd2gucHkgYi9EZW1vL3NjcmlwdHMvd2gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGI5YjA5ZWYuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL3doLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jIFRoaXMgaXMgaGVyZSBzbyBJIGNhbiB1c2UgJ3doJyBpbnN0ZWFkIG9mICd3aGljaCcgaW4gJ34vYmluL2dlbmVyaWNfcHl0aG9uJwotaW1wb3J0IHdoaWNoCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvUkVBRE1FIGIvRGVtby9zb2NrZXRzL1JFQURNRQppbmRleCBmNTQwNWFiLi5lYmE3YzIzIDEwMDY0NAotLS0gYS9EZW1vL3NvY2tldHMvUkVBRE1FCisrKyBiL0RlbW8vc29ja2V0cy9SRUFETUUKQEAgLTUsMTcgKzUsMTAgQEAKIGZpbmdlci5weQkJQ2xpZW50IGZvciB0aGUgJ2ZpbmdlcicgcHJvdG9jb2wuCiBmdHAucHkJCQlBIHZlcnkgc2ltcGxlIGZ0cCBjbGllbnQuCiBnb3BoZXIucHkJCUEgc2ltcGxlIGdvcGhlciBjbGllbnQuCittY2FzdC5weQkJSVB2NC92NiBtdWx0aWNhc3QgZXhhbXBsZQogcmFkaW8ucHkJCVJlY2VpdmUgdGltZSBicm9hZGNhc3RzIGZyb20gYnJvYWRjYXN0LnB5LgogdGVsbmV0LnB5CQlDbGllbnQgZm9yIHRoZSAndGVsbmV0JyBwcm90b2NvbC4KIHRocm91Z2hwdXQucHkJCUNsaWVudCBhbmQgc2VydmVyIHRvIG1lYXN1cmUgVENQIHRocm91Z2hwdXQuCiB1bml4Y2xpZW50LnB5CQlVbml4IHNvY2tldCBleGFtcGxlLCBjbGllbnQgc2lkZQogdW5peHNlcnZlci5weQkJVW5peCBzb2NrZXQgZXhhbXBsZSwgc2VydmVyIHNpZGUKIHVkcGVjaG8ucHkJCUNsaWVudCBhbmQgc2VydmVyIGZvciB0aGUgVURQIGVjaG8gcHJvdG9jb2wuCi0KLVRoZSBmb2xsb3dpbmcgZmlsZSBpcyBvbmx5IHJlbGV2YW50IG9uIFNHSSBtYWNoaW5lcyAob3Igb3RoZXIgc3lzdGVtcwotdGhhdCBzdXBwb3J0IG11bHRpY2FzdCk6Ci0KLW1jYXN0LnB5CQlBIFB5dGhvbiB0cmFuc2xhdGlvbiBvZgotCQkJL3Vzci9wZW9wbGUvNERnaWZ0cy9leGFtcGxlcy9uZXR3b3JrL21jYXN0LmMKLQkJCShOb3RlIHRoYXQgSU4ucHkgaXMgaW4gLi4vLi4vbGliL3NnaS4pCi0KZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9icm9hZGNhc3QucHkgYi9EZW1vL3NvY2tldHMvYnJvYWRjYXN0LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9mdHAucHkgYi9EZW1vL3NvY2tldHMvZnRwLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9tY2FzdC5weSBiL0RlbW8vc29ja2V0cy9tY2FzdC5weQppbmRleCAxYWJkMzA1Li4xODczOTU5IDEwMDc1NQotLS0gYS9EZW1vL3NvY2tldHMvbWNhc3QucHkKKysrIGIvRGVtby9zb2NrZXRzL21jYXN0LnB5CkBAIC0xLDkzICsxLDgwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKICMgU2VuZC9yZWNlaXZlIFVEUCBtdWx0aWNhc3QgcGFja2V0cy4KICMgUmVxdWlyZXMgdGhhdCB5b3VyIE9TIGtlcm5lbCBzdXBwb3J0cyBJUCBtdWx0aWNhc3QuCi0jIFRoaXMgaXMgYnVpbHQtaW4gb24gU0dJLCBzdGlsbCBvcHRpb25hbCBmb3IgbW9zdCBvdGhlciB2ZW5kb3JzLgogIwogIyBVc2FnZToKLSMgICBtY2FzdCAtcyAoc2VuZGVyKQotIyAgIG1jYXN0IC1iIChzZW5kZXIsIHVzaW5nIGJyb2FkY2FzdCBpbnN0ZWFkIG11bHRpY2FzdCkKLSMgICBtY2FzdCAgICAocmVjZWl2ZXJzKQorIyAgIG1jYXN0IC1zIChzZW5kZXIsIElQdjQpCisjICAgbWNhc3QgLXMgLTYgKHNlbmRlciwgSVB2NikKKyMgICBtY2FzdCAgICAocmVjZWl2ZXJzLCBJUHY0KQorIyAgIG1jYXN0ICAtNiAgKHJlY2VpdmVycywgSVB2NikKIAogTVlQT1JUID0gODEyMwotTVlHUk9VUCA9ICcyMjUuMC4wLjI1MCcKK01ZR1JPVVBfNCA9ICcyMjUuMC4wLjI1MCcKK01ZR1JPVVBfNiA9ICdmZjE1OjcwNzk6NzQ2ODo2ZjZlOjY0NjU6NmQ2Zjo2ZDYzOjYxNzMnCitNWVRUTCA9IDEgIyBJbmNyZWFzZSB0byByZWFjaCBvdGhlciBuZXR3b3JrcwogCi1pbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHN0cnVjdAotZnJvbSBzb2NrZXQgaW1wb3J0ICoKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKIAotCi0jIE1haW4gcHJvZ3JhbQogZGVmIG1haW4oKToKLSAgICBmbGFncyA9IHN5cy5hcmd2WzE6XQotICAgICMKLSAgICBpZiBmbGFnczoKLSAgICAgICAgc2VuZGVyKGZsYWdzWzBdKQorICAgIGdyb3VwID0gTVlHUk9VUF82IGlmICItNiIgaW4gc3lzLmFyZ3ZbMTpdIGVsc2UgTVlHUk9VUF80CisKKyAgICBpZiAiLXMiIGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgc2VuZGVyKGdyb3VwKQogICAgIGVsc2U6Ci0gICAgICAgIHJlY2VpdmVyKCkKKyAgICAgICAgcmVjZWl2ZXIoZ3JvdXApCiAKIAotIyBTZW5kZXIgc3Vicm91dGluZSAob25seSBvbmUgcGVyIGxvY2FsIGFyZWEgbmV0d29yaykKLWRlZiBzZW5kZXIoZmxhZyk6Ci0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKQotICAgIGlmIGZsYWcgPT0gJy1iJzoKLSAgICAgICAgcy5zZXRzb2Nrb3B0KFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgMSkKLSAgICAgICAgbXlncm91cCA9ICc8YnJvYWRjYXN0PicKK2RlZiBzZW5kZXIoZ3JvdXApOgorICAgIGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvKGdyb3VwLCBOb25lKVswXQorCisgICAgcyA9IHNvY2tldC5zb2NrZXQoYWRkcmluZm9bMF0sIHNvY2tldC5TT0NLX0RHUkFNKQorCisgICAgIyBTZXQgVGltZS10by1saXZlIChvcHRpb25hbCkKKyAgICB0dGxfYmluID0gc3RydWN0LnBhY2soJ0BpJywgTVlUVEwpCisgICAgaWYgYWRkcmluZm9bMF0gPT0gc29ja2V0LkFGX0lORVQ6ICMgSVB2NAorICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9NVUxUSUNBU1RfVFRMLCB0dGxfYmluKQogICAgIGVsc2U6Ci0gICAgICAgIG15Z3JvdXAgPSBNWUdST1VQCi0gICAgICAgIHR0bCA9IHN0cnVjdC5wYWNrKCdiJywgMSkgICAgICAgICAgICAgICAjIFRpbWUtdG8tbGl2ZQotICAgICAgICBzLnNldHNvY2tvcHQoSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX1RUTCwgdHRsKQotICAgIHdoaWxlIDE6CisgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgdHRsX2JpbikKKworICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGRhdGEgPSByZXByKHRpbWUudGltZSgpKQotIyMgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgKDE0MDAgLSBsZW4oZGF0YSkpICogJ1wwJwotICAgICAgICBzLnNlbmR0byhkYXRhLCAobXlncm91cCwgTVlQT1JUKSkKKyAgICAgICAgcy5zZW5kdG8oZGF0YSArICdcMCcsIChhZGRyaW5mb1s0XVswXSwgTVlQT1JUKSkKICAgICAgICAgdGltZS5zbGVlcCgxKQogCiAKLSMgUmVjZWl2ZXIgc3Vicm91dGluZSAoYXMgbWFueSBhcyB5b3UgbGlrZSkKLWRlZiByZWNlaXZlcigpOgotICAgICMgT3BlbiBhbmQgaW5pdGlhbGl6ZSB0aGUgc29ja2V0Ci0gICAgcyA9IG9wZW5tY2FzdHNvY2soTVlHUk9VUCwgTVlQT1JUKQotICAgICMKLSAgICAjIExvb3AsIHByaW50aW5nIGFueSBkYXRhIHdlIHJlY2VpdmUKLSAgICB3aGlsZSAxOgotICAgICAgICBkYXRhLCBzZW5kZXIgPSBzLnJlY3Zmcm9tKDE1MDApCi0gICAgICAgIHdoaWxlIGRhdGFbLTE6XSA9PSAnXDAnOiBkYXRhID0gZGF0YVs6LTFdICMgU3RyaXAgdHJhaWxpbmcgXDAncwotICAgICAgICBwcmludCBzZW5kZXIsICc6JywgcmVwcihkYXRhKQorZGVmIHJlY2VpdmVyKGdyb3VwKToKKyAgICAjIExvb2sgdXAgbXVsdGljYXN0IGdyb3VwIGFkZHJlc3MgaW4gbmFtZSBzZXJ2ZXIgYW5kIGZpbmQgb3V0IElQIHZlcnNpb24KKyAgICBhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbyhncm91cCwgTm9uZSlbMF0KIAotCi0jIE9wZW4gYSBVRFAgc29ja2V0LCBiaW5kIGl0IHRvIGEgcG9ydCBhbmQgc2VsZWN0IGEgbXVsdGljYXN0IGdyb3VwCi1kZWYgb3Blbm1jYXN0c29jayhncm91cCwgcG9ydCk6Ci0gICAgIyBJbXBvcnQgbW9kdWxlcyB1c2VkIG9ubHkgaGVyZQotICAgIGltcG9ydCBzdHJpbmcKLSAgICBpbXBvcnQgc3RydWN0Ci0gICAgIwogICAgICMgQ3JlYXRlIGEgc29ja2V0Ci0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKQotICAgICMKKyAgICBzID0gc29ja2V0LnNvY2tldChhZGRyaW5mb1swXSwgc29ja2V0LlNPQ0tfREdSQU0pCisKICAgICAjIEFsbG93IG11bHRpcGxlIGNvcGllcyBvZiB0aGlzIHByb2dyYW0gb24gb25lIG1hY2hpbmUKICAgICAjIChub3Qgc3RyaWN0bHkgbmVlZGVkKQotICAgIHMuc2V0c29ja29wdChTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIDEpCi0gICAgIworICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKwogICAgICMgQmluZCBpdCB0byB0aGUgcG9ydAotICAgIHMuYmluZCgoJycsIHBvcnQpKQotICAgICMKLSAgICAjIExvb2sgdXAgbXVsdGljYXN0IGdyb3VwIGFkZHJlc3MgaW4gbmFtZSBzZXJ2ZXIKLSAgICAjIChkb2Vzbid0IGh1cnQgaWYgaXQgaXMgYWxyZWFkeSBpbiBkZGQuZGRkLmRkZC5kZGQgZm9ybWF0KQotICAgIGdyb3VwID0gZ2V0aG9zdGJ5bmFtZShncm91cCkKLSAgICAjCi0gICAgIyBDb25zdHJ1Y3QgYmluYXJ5IGdyb3VwIGFkZHJlc3MKLSAgICBieXRlcyA9IG1hcChpbnQsIHN0cmluZy5zcGxpdChncm91cCwgIi4iKSkKLSAgICBncnBhZGRyID0gMAotICAgIGZvciBieXRlIGluIGJ5dGVzOiBncnBhZGRyID0gKGdycGFkZHIgPDwgOCkgfCBieXRlCi0gICAgIwotICAgICMgQ29uc3RydWN0IHN0cnVjdCBtcmVxIGZyb20gZ3JwYWRkciBhbmQgaWZhZGRyCi0gICAgaWZhZGRyID0gSU5BRERSX0FOWQotICAgIG1yZXEgPSBzdHJ1Y3QucGFjaygnbGwnLCBodG9ubChncnBhZGRyKSwgaHRvbmwoaWZhZGRyKSkKLSAgICAjCi0gICAgIyBBZGQgZ3JvdXAgbWVtYmVyc2hpcAotICAgIHMuc2V0c29ja29wdChJUFBST1RPX0lQLCBJUF9BRERfTUVNQkVSU0hJUCwgbXJlcSkKLSAgICAjCi0gICAgcmV0dXJuIHMKKyAgICBzLmJpbmQoKCcnLCBNWVBPUlQpKQorCisgICAgZ3JvdXBfYmluID0gc29ja2V0LmluZXRfcHRvbihhZGRyaW5mb1swXSwgYWRkcmluZm9bNF1bMF0pCisgICAgIyBKb2luIGdyb3VwCisgICAgaWYgYWRkcmluZm9bMF0gPT0gc29ja2V0LkFGX0lORVQ6ICMgSVB2NAorICAgICAgICBtcmVxID0gZ3JvdXBfYmluICsgc3RydWN0LnBhY2soJz1JJywgc29ja2V0LklOQUREUl9BTlkpCisgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX0FERF9NRU1CRVJTSElQLCBtcmVxKQorICAgIGVsc2U6CisgICAgICAgIG1yZXEgPSBncm91cF9iaW4gKyBzdHJ1Y3QucGFjaygnQEknLCAwKQorICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSk9JTl9HUk9VUCwgbXJlcSkKKworICAgICMgTG9vcCwgcHJpbnRpbmcgYW55IGRhdGEgd2UgcmVjZWl2ZQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGRhdGEsIHNlbmRlciA9IHMucmVjdmZyb20oMTUwMCkKKyAgICAgICAgd2hpbGUgZGF0YVstMTpdID09ICdcMCc6IGRhdGEgPSBkYXRhWzotMV0gIyBTdHJpcCB0cmFpbGluZyBcMCdzCisgICAgICAgIHByaW50IChzdHIoc2VuZGVyKSArICcgICcgKyByZXByKGRhdGEpKQogCiAKLW1haW4oKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9yYWRpby5weSBiL0RlbW8vc29ja2V0cy9yYWRpby5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0JhbGxvb24ucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0JhbGxvb24ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9CdG5Cb3gucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0J0bkJveC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0NtcEltZy5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQ21wSW1nLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQ29tYm9Cb3gucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0NvbWJvQm94LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQ29udHJvbC5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQ29udHJvbC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0Rpckxpc3QucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0Rpckxpc3QucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9EaXJUcmVlLnB5IGIvRGVtby90aXgvc2FtcGxlcy9EaXJUcmVlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvTm90ZUJvb2sucHkgYi9EZW1vL3RpeC9zYW1wbGVzL05vdGVCb29rLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvT3B0TWVudS5weSBiL0RlbW8vdGl4L3NhbXBsZXMvT3B0TWVudS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL1BhbmVkV2luLnB5IGIvRGVtby90aXgvc2FtcGxlcy9QYW5lZFdpbi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL1BvcE1lbnUucHkgYi9EZW1vL3RpeC9zYW1wbGVzL1BvcE1lbnUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9TSExpc3QxLnB5IGIvRGVtby90aXgvc2FtcGxlcy9TSExpc3QxLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0Mi5weSBiL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0Mi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL1RyZWUucHkgYi9EZW1vL3RpeC9zYW1wbGVzL1RyZWUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL1JFQURNRSBiL0RlbW8vdGtpbnRlci9SRUFETUUKaW5kZXggZjI0NWQxNi4uYzlmMThkZiAxMDA2NDQKLS0tIGEvRGVtby90a2ludGVyL1JFQURNRQorKysgYi9EZW1vL3RraW50ZXIvUkVBRE1FCkBAIC04LDMgKzgsNCBAQAogCiBndWlkbwkJbXkgb3JpZ2luYWwgZXhhbXBsZSBzZXQgKGZhaXJseSByYW5kb20gY29sbGVjdGlvbikKIG1hdHQJCU1hdHQgQ29ud2F5J3MgZXhhbXBsZXMsIHRvIGdvIHdpdGggaGlzIGxpZmVzYXZlciBkb2N1bWVudAordHRrICAgICAgICAgRXhhbXBsZXMgdXNpbmcgdGhlIHR0ayBtb2R1bGUKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9BdHRyRGlhbG9nLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL0F0dHJEaWFsb2cucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL01hblBhZ2UucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vTWFuUGFnZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vU2hlbGxXaW5kb3cucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vU2hlbGxXaW5kb3cucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2hhbm9pLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2hhbm9pLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9oZWxsby5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9oZWxsby5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2VkcmF3LnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2ltYWdlZHJhdy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2V2aWV3LnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2ltYWdldmlldy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vbGlzdHRyZWUucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vbGlzdHRyZWUucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3dpc2gucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vd2lzaC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2NvbWJvX3RoZW1lcy5weSBiL0RlbW8vdGtpbnRlci90dGsvY29tYm9fdGhlbWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjMxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL2NvbWJvX3RoZW1lcy5weQpAQCAtMCwwICsxLDQ2IEBACisiIiJUdGsgVGhlbWUgU2VsZWN0b3IuCisKK0FsdGhvdWdoIGl0IGlzIGEgdGhlbWUgc2VsZWN0b3IsIHlvdSB3b24ndCBub3RpY2UgbWFueSBjaGFuZ2VzIHNpbmNlCit0aGVyZSBpcyBvbmx5IGEgY29tYm9ib3ggYW5kIGEgZnJhbWUgYXJvdW5kLgorIiIiCitpbXBvcnQgdHRrCisKK2NsYXNzIEFwcCh0dGsuRnJhbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgICAgIHNlbGYuX3NldHVwX3dpZGdldHMoKQorCisgICAgZGVmIF9jaGFuZ2VfdGhlbWUoc2VsZiwgZXZlbnQpOgorICAgICAgICBpZiBldmVudC53aWRnZXQuY3VycmVudCgpOiAjIHZhbHVlICMwIGlzIG5vdCBhIHRoZW1lCisgICAgICAgICAgICBuZXd0aGVtZSA9IGV2ZW50LndpZGdldC5nZXQoKQorICAgICAgICAgICAgIyBjaGFuZ2UgdG8gdGhlIG5ldyB0aGVtZSBhbmQgcmVmcmVzaCBhbGwgdGhlIHdpZGdldHMKKyAgICAgICAgICAgIHNlbGYuc3R5bGUudGhlbWVfdXNlKG5ld3RoZW1lKQorCisgICAgZGVmIF9zZXR1cF93aWRnZXRzKHNlbGYpOgorICAgICAgICB0aGVtZXMgPSBsaXN0KHNlbGYuc3R5bGUudGhlbWVfbmFtZXMoKSkKKyAgICAgICAgdGhlbWVzLmluc2VydCgwLCAiUGljayBhIHRoZW1lIikKKyAgICAgICAgIyBDcmVhdGUgYSByZWFkb25seSBDb21ib2JveCB3aGljaCB3aWxsIGRpc3BsYXkgNCB2YWx1ZXMgYXQgbWF4LAorICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgaXQgdG8gY3JlYXRlIGEgc2Nyb2xsYmFyIGlmIHRoZXJlIGFyZSBtb3JlCisgICAgICAgICMgdGhhbiA0IHZhbHVlcyBpbiB0b3RhbC4KKyAgICAgICAgdGhlbWVzX2NvbWJvID0gdHRrLkNvbWJvYm94KHNlbGYsIHZhbHVlcz10aGVtZXMsIHN0YXRlPSJyZWFkb25seSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9NCkKKyAgICAgICAgdGhlbWVzX2NvbWJvLnNldCh0aGVtZXNbMF0pICMgc2V0cyB0aGUgY29tYm9ib3ggdmFsdWUgdG8gIlBpY2sgYSB0aGVtZSIKKyAgICAgICAgIyBDb21ib2JveCB3aWRnZXQgZ2VuZXJhdGVzIGEgPDxDb21ib2JveFNlbGVjdGVkPj4gdmlydHVhbCBldmVudAorICAgICAgICAjIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhbiBlbGVtZW50LiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBhZnRlcgorICAgICAgICAjIHRoZSBsaXN0Ym94IGlzIHVucG9zdGVkIChhZnRlciB5b3Ugc2VsZWN0IGFuIGl0ZW0sIHRoZSBjb21ib2JveCdzCisgICAgICAgICMgbGlzdGJveCBkaXNhcHBlYXJzLCB0aGVuIGl0IGlzIHNhaWQgdGhhdCBsaXN0Ym94IGlzIG5vdyB1bnBvc3RlZCkuCisgICAgICAgIHRoZW1lc19jb21iby5iaW5kKCI8PENvbWJvYm94U2VsZWN0ZWQ+PiIsIHNlbGYuX2NoYW5nZV90aGVtZSkKKyAgICAgICAgdGhlbWVzX2NvbWJvLnBhY2soZmlsbD0neCcpCisKKyAgICAgICAgc2VsZi5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKKworCitkZWYgbWFpbigpOgorICAgIGFwcCA9IEFwcCgpCisgICAgYXBwLm1hc3Rlci50aXRsZSgiVHRrIENvbWJvYm94IikKKyAgICBhcHAubWFpbmxvb3AoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9kaXJicm93c2VyLnB5IGIvRGVtby90a2ludGVyL3R0ay9kaXJicm93c2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Zjc5YmQKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL2RpcmJyb3dzZXIucHkKQEAgLTAsMCArMSw5MyBAQAorIiIiQSBkaXJlY3RvcnkgYnJvd3NlciB1c2luZyBUdGsgVHJlZXZpZXcuCisKK0Jhc2VkIG9uIHRoZSBkZW1vIGZvdW5kIGluIFRrIDguNSBsaWJyYXJ5L2RlbW9zL2Jyb3dzZQorIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBnbG9iCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCitkZWYgcG9wdWxhdGVfdHJlZSh0cmVlLCBub2RlKToKKyAgICBpZiB0cmVlLnNldChub2RlLCAidHlwZSIpICE9ICdkaXJlY3RvcnknOgorICAgICAgICByZXR1cm4KKworICAgIHBhdGggPSB0cmVlLnNldChub2RlLCAiZnVsbHBhdGgiKQorICAgIHRyZWUuZGVsZXRlKCp0cmVlLmdldF9jaGlsZHJlbihub2RlKSkKKworICAgIHBhcmVudCA9IHRyZWUucGFyZW50KG5vZGUpCisgICAgc3BlY2lhbF9kaXJzID0gW10gaWYgcGFyZW50IGVsc2UgZ2xvYi5nbG9iKCcuJykgKyBnbG9iLmdsb2IoJy4uJykKKworICAgIGZvciBwIGluIHNwZWNpYWxfZGlycyArIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgIHB0eXBlID0gTm9uZQorICAgICAgICBwID0gb3MucGF0aC5qb2luKHBhdGgsIHApLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHApOiBwdHlwZSA9ICJkaXJlY3RvcnkiCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUocCk6IHB0eXBlID0gImZpbGUiCisKKyAgICAgICAgZm5hbWUgPSBvcy5wYXRoLnNwbGl0KHApWzFdCisgICAgICAgIGlkID0gdHJlZS5pbnNlcnQobm9kZSwgImVuZCIsIHRleHQ9Zm5hbWUsIHZhbHVlcz1bcCwgcHR5cGVdKQorCisgICAgICAgIGlmIHB0eXBlID09ICdkaXJlY3RvcnknOgorICAgICAgICAgICAgaWYgZm5hbWUgbm90IGluICgnLicsICcuLicpOgorICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KGlkLCAwLCB0ZXh0PSJkdW1teSIpCisgICAgICAgICAgICAgICAgdHJlZS5pdGVtKGlkLCB0ZXh0PWZuYW1lKQorICAgICAgICBlbGlmIHB0eXBlID09ICdmaWxlJzoKKyAgICAgICAgICAgIHNpemUgPSBvcy5zdGF0KHApLnN0X3NpemUKKyAgICAgICAgICAgIHRyZWUuc2V0KGlkLCAic2l6ZSIsICIlZCBieXRlcyIgJSBzaXplKQorCisKK2RlZiBwb3B1bGF0ZV9yb290cyh0cmVlKToKKyAgICBkaXIgPSBvcy5wYXRoLmFic3BhdGgoJy4nKS5yZXBsYWNlKCdcXCcsICcvJykKKyAgICBub2RlID0gdHJlZS5pbnNlcnQoJycsICdlbmQnLCB0ZXh0PWRpciwgdmFsdWVzPVtkaXIsICJkaXJlY3RvcnkiXSkKKyAgICBwb3B1bGF0ZV90cmVlKHRyZWUsIG5vZGUpCisKK2RlZiB1cGRhdGVfdHJlZShldmVudCk6CisgICAgdHJlZSA9IGV2ZW50LndpZGdldAorICAgIHBvcHVsYXRlX3RyZWUodHJlZSwgdHJlZS5mb2N1cygpKQorCitkZWYgY2hhbmdlX2RpcihldmVudCk6CisgICAgdHJlZSA9IGV2ZW50LndpZGdldAorICAgIG5vZGUgPSB0cmVlLmZvY3VzKCkKKyAgICBpZiB0cmVlLnBhcmVudChub2RlKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aCh0cmVlLnNldChub2RlLCAiZnVsbHBhdGgiKSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIG9zLmNoZGlyKHBhdGgpCisgICAgICAgICAgICB0cmVlLmRlbGV0ZSh0cmVlLmdldF9jaGlsZHJlbignJykpCisgICAgICAgICAgICBwb3B1bGF0ZV9yb290cyh0cmVlKQorCitkZWYgYXV0b3Njcm9sbChzYmFyLCBmaXJzdCwgbGFzdCk6CisgICAgIiIiSGlkZSBhbmQgc2hvdyBzY3JvbGxiYXIgYXMgbmVlZGVkLiIiIgorICAgIGZpcnN0LCBsYXN0ID0gZmxvYXQoZmlyc3QpLCBmbG9hdChsYXN0KQorICAgIGlmIGZpcnN0IDw9IDAgYW5kIGxhc3QgPj0gMToKKyAgICAgICAgc2Jhci5ncmlkX3JlbW92ZSgpCisgICAgZWxzZToKKyAgICAgICAgc2Jhci5ncmlkKCkKKyAgICBzYmFyLnNldChmaXJzdCwgbGFzdCkKKworcm9vdCA9IFRraW50ZXIuVGsoKQorCit2c2IgPSB0dGsuU2Nyb2xsYmFyKG9yaWVudD0idmVydGljYWwiKQoraHNiID0gdHRrLlNjcm9sbGJhcihvcmllbnQ9Imhvcml6b250YWwiKQorCit0cmVlID0gdHRrLlRyZWV2aWV3KGNvbHVtbnM9KCJmdWxscGF0aCIsICJ0eXBlIiwgInNpemUiKSwKKyAgICBkaXNwbGF5Y29sdW1ucz0ic2l6ZSIsIHlzY3JvbGxjb21tYW5kPWxhbWJkYSBmLCBsOiBhdXRvc2Nyb2xsKHZzYiwgZiwgbCksCisgICAgeHNjcm9sbGNvbW1hbmQ9bGFtYmRhIGYsIGw6YXV0b3Njcm9sbChoc2IsIGYsIGwpKQorCit2c2JbJ2NvbW1hbmQnXSA9IHRyZWUueXZpZXcKK2hzYlsnY29tbWFuZCddID0gdHJlZS54dmlldworCit0cmVlLmhlYWRpbmcoIiMwIiwgdGV4dD0iRGlyZWN0b3J5IFN0cnVjdHVyZSIsIGFuY2hvcj0ndycpCit0cmVlLmhlYWRpbmcoInNpemUiLCB0ZXh0PSJGaWxlIFNpemUiLCBhbmNob3I9J3cnKQordHJlZS5jb2x1bW4oInNpemUiLCBzdHJldGNoPTAsIHdpZHRoPTEwMCkKKworcG9wdWxhdGVfcm9vdHModHJlZSkKK3RyZWUuYmluZCgnPDxUcmVldmlld09wZW4+PicsIHVwZGF0ZV90cmVlKQordHJlZS5iaW5kKCc8RG91YmxlLUJ1dHRvbi0xPicsIGNoYW5nZV9kaXIpCisKKyMgQXJyYW5nZSB0aGUgdHJlZSBhbmQgaXRzIHNjcm9sbGJhcnMgaW4gdGhlIHRvcGxldmVsCit0cmVlLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J25zd2UnKQordnNiLmdyaWQoY29sdW1uPTEsIHJvdz0wLCBzdGlja3k9J25zJykKK2hzYi5ncmlkKGNvbHVtbj0wLCByb3c9MSwgc3RpY2t5PSdldycpCityb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorcm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKworcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZS5naWYgYi9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjZjZjNwotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9hY3RpdmUuZ2lmIGIvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2VfYWN0aXZlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdmMzkyCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2VfYWN0aXZlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9wcmVzc2VkLmdpZiBiL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlX3ByZXNzZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTY5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9wcmVzc2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2xpc3Rib3hfc2Nyb2xsY21kLnB5IGIvRGVtby90a2ludGVyL3R0ay9saXN0Ym94X3Njcm9sbGNtZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmE1NmE0Ci0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9saXN0Ym94X3Njcm9sbGNtZC5weQpAQCAtMCwwICsxLDM3IEBACisiIiJTYW1wbGUgdGFrZW4gZnJvbTogaHR0cDovL3d3dy50a2RvY3MuY29tL3R1dG9yaWFsL21vcmV3aWRnZXRzLmh0bWwgYW5kCitjb252ZXJ0ZWQgdG8gUHl0aG9uLCBtYWlubHkgdG8gZGVtb25zdHJhdGUgeHNjcm9sbGNvbW1hbmQgb3B0aW9uLgorCitncmlkIFt0azo6bGlzdGJveCAubCAteXNjcm9sbGNvbW1hbmQgIi5zIHNldCIgLWhlaWdodCA1XSAtY29sdW1uIDAgLXJvdyAwIC1zdGlja3kgbndlcworZ3JpZCBbdHRrOjpzY3JvbGxiYXIgLnMgLWNvbW1hbmQgIi5sIHl2aWV3IiAtb3JpZW50IHZlcnRpY2FsXSAtY29sdW1uIDEgLXJvdyAwIC1zdGlja3kgbnMKK2dyaWQgW3R0azo6bGFiZWwgLnN0YXQgLXRleHQgIlN0YXR1cyBtZXNzYWdlIGhlcmUiIC1hbmNob3Igd10gLWNvbHVtbiAwIC1yb3cgMSAtc3RpY2t5IHdlCitncmlkIFt0dGs6OnNpemVncmlwIC5zel0gLWNvbHVtbiAxIC1yb3cgMSAtc3RpY2t5IHNlCitncmlkIGNvbHVtbmNvbmZpZ3VyZSAuIDAgLXdlaWdodCAxOyBncmlkIHJvd2NvbmZpZ3VyZSAuIDAgLXdlaWdodCAxCitmb3Ige3NldCBpIDB9IHskaTwxMDB9IHtpbmNyIGl9IHsKKyAgIC5sIGluc2VydCBlbmQgIkxpbmUgJGkgb2YgMTAwIgorICAgfQorIiIiCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCityb290ID0gVGtpbnRlci5UaygpCisKK2wgPSBUa2ludGVyLkxpc3Rib3goaGVpZ2h0PTUpCitsLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J253ZXMnKQorCitzID0gdHRrLlNjcm9sbGJhcihjb21tYW5kPWwueXZpZXcsIG9yaWVudD0ndmVydGljYWwnKQorbFsneXNjcm9sbGNvbW1hbmQnXSA9IHMuc2V0CitzLmdyaWQoY29sdW1uPTEsIHJvdz0wLCBzdGlja3k9Im5zIikKKworc3RhdCA9IHR0ay5MYWJlbCh0ZXh0PSJTdGF0dXMgbWVzc2FnZSBoZXJlIiwgYW5jaG9yPSd3JykKK3N0YXQuZ3JpZChjb2x1bW49MCwgcm93PTEsIHN0aWNreT0nd2UnKQorCitzeiA9IHR0ay5TaXplZ3JpcCgpCitzei5ncmlkKGNvbHVtbj0xLCByb3c9MSwgc3RpY2t5PSdzZScpCisKK3Jvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTEpCityb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorCitmb3IgaSBpbiByYW5nZSgxMDApOgorICAgIGwuaW5zZXJ0KCdlbmQnLCAiTGluZSAlZCBvZiAxMDAiICUgaSkKKworcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL21hY19zZWFyY2hlbnRyeS5weSBiL0RlbW8vdGtpbnRlci90dGsvbWFjX3NlYXJjaGVudHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDVhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL21hY19zZWFyY2hlbnRyeS5weQpAQCAtMCwwICsxLDc4IEBACisiIiJNYWMgc3R5bGUgc2VhcmNoIHdpZGdldAorCitUcmFuc2xhdGVkIGZyb20gVGNsIGNvZGUgYnkgU2NoZWx0ZSBCcm9uLCBodHRwOi8vd2lraS50Y2wudGsvMTgxODgKKyIiIgoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKKworcm9vdCA9IFRraW50ZXIuVGsoKQorCitkYXRhID0gIiIiCitSMGxHT0RsaEtnQWFBT2ZuQUZkWlZsbGJXRnBjV1Z0ZFdseGVXMTFmWEY5aFhtQmlYMlpuWldocFoybHJhR3h1YTI1d2JYSjAKK2NYUjJjM1YzZEhaNGRYaDZkM3grZTMxL2ZINkFmWVNHZzRlSmhvaUtoNHFNaVl1TmlvMlBqSG1VcW5xVnEzeVhyWkdUa0pLVQora1grYXNKU1drMzJjdUpXWGxJR2NzNWFZbFg2ZXVaZVpsb09ldFppYWw0U2Z0cHFibUlXZ3Q0R2h2WWFodUlLaXZwdWRtWWVpCit1WU9qdjV5ZW00aWp1b1Nrd0lXbHdZbWx1NTZnbllhbXdwK2hub2VudzR1bnZhQ2luNGlveEpDbnVaeWtySW1weFptbHNvYXEKK3pJMnB2Nktrb1pHb3VvcXF4cHFtczRlcnphT2xvbzZxd1l1cng1S3F1NXVudElpc3pxU21vNUNyd295c3lKZXF0cE9ydkp5bwordFpHc3c0MnR5cFNzdmFhb3BaS3R4Sld0dnA2cXQ0K3V5NmVwcHBPdXhaQ3Z6S2lxcDVxdXVaU3Z4b3l4MDZtcnFKV3d4NDJ5CisxSkt4enBtd3dhcXNxWmF4eUk2ejFacXh3cXV0cXBPeno0KzAxcXl1cTU2eXZwaXp5cFMwMEptMHk1VzEwWnExekphMjByQ3kKK3JwdTN6cWl6d2JHenI2QzN5Wnk0ejdLMHNhRzR5cDI1MExPMXNxSzV5NTY2MForNzBxTzd6S3k0eGFDODA2Uzh6YmE0dGFHOQorMUtXOXpxNjZ4Nis3eUxpNnQ2Uy8xckM4eXJtN3VMTzh4TEc5eTdxOHViUzl4YWJCMmFuQjA3Syt6TFcreHJPL3phN0N6clRBCit6cmpBeUxYQno3N0J2YmJDMEsvRzJMakQwYm5FMHJMSzI4VEd3OGJJeGNMTDA3dlAyOEhOMjhyTXljdk95ci9UMzhEVTRjblIKKzJzL1J6dEhUME5MVTBjVFk1TXJXNU12WDVkSFgyYzNaNTliWTFkUGI1TmJiM2RMZTdOdmQydDNmM05YaDc5N2czZDNqNWRubAorOU9QbDRlVG00K0xuNnR6bzl1WG41T2JvNWVEcDhlZnA1dUhxOHVYcTdlanE1K25yNk9QczlPdnU2dW51OE8zdjYrdnc4Kzd3Cis3ZXp4OU8veDd2RHk3L0h6OE8vMTkvUDE4dlQzOC9MMytmYjQ5UGY1OXZYNi9majY5L2I3L3ZuNytQcjgrZmY5Ly92OSt2ei8KKysvNy8vUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSlpBRC9BQ3dDCitBQUlBS0FBV0FBQUkvZ0QvQ1J6NGJ3VUdDZzhlUUZqSXNHSERCdzRpVExBUWdxQkZnaXN1ZVBDaXlKT3BVeUJEaWhScHlwTWkKK0x4OHFhTGhJTUl5R0ZaNXNBVXNtalpyTm16aHpXcE8yREpndFR5c3FmR0RweG9NYlc4ZWtlUXNYenR5NHAxQ2pSalVYcnBzMworYXNKc3VjbFE0dUtLU2JhbU1SM24xSnpaczJqUmtoMUh6dXhWWFg4eTRDRFlBd3F1YStESW5WclJ3TUdKVTJrRHAzMUtUaHkxCitYR1dHRGx4aGkxclRQQVVJQ0JCQW9FQWVzb0l6bjZWbTY4TUtnVkFVSGZ0bXpoT0NCQ3RRd1FLU29BQmd6Wm5KZFNNbXlJUEEKK0ZiQ290ZFVRQUloTmE5QjZEUENBR2JaYWMrU293VklNUlZlNHB3a0E0R3BxRGx3dUFBbU1aeDRuVHRmbmYxbU81SkVETnk0NgorTUhKa3hRRURnS0M0OXJQandDMGJxR2FadU9vWkFLakJQRTROZ0F6VXZZY1dPYzBRWkY5MWltQW5DREhKNUpGQUFKTjBJMkJhCis0aVJEVUMvZ09FVk5Ed0lVY0VBQkNBZ0FBQVRVVElnV09NQllSRnA4MGdoaUFRSUlWQUFFQXdKSVlJMkpablVqaTBYU1lBWU8KK05jc1FBOHd5MGhDVHdBQVNYR09pT05GY3hBdHBUb2tUSHpuZmlMTU5NQWtjQU11RTQzakRDMHZMZUdPV2UyUjVvNHNuMUxnSAorR3prV3N2VFBNZ0VPYUE0MzNBZzRUampNdURrUU1OaTB0WjEyc3FXb0owSEFUTVBOZmZBWlo2VTB3TEF5cUo2MlJHb0xMcmhJCithcW1scHp3YUVBQWgrUVFKWkFEL0FDd0FBQUFBS2dBYUFBQUkvZ0QvQ1J3NDBKRWhRb0VDK2ZHamNPSENNUkFqUmt4RHNLTEYKK2Y1WWNBY0lENTgyWmp5QkRKaG1aWklqSklVeVNFREhpQk1oRmdocnRkTm5SQWdTSG16aHo2c1RaUWNTTElUeCtDSG41YnhTaworTno1TUNNR3k1NUNqVFZDamJ1SkV0U3JWUTN1d3FEQlJRd3JGaTQ3NlNISHhvdzhxWGNlbVZiUEd0bTIxdDNDblRhUDI3Smd1CitWSHR1aUlqQnN1SW1Ra1JpaUVFRlRObzJjT1RNS1Y3TXVMRTVjTjY4UVVPR1Nnd0tHMUVxSnFKRFk4K3JadDhVanh0TnVuVGoKK2NZM0RnWk9XUzQ2S0lGZ0dqaUkwWklzcWFxTk5qV2pnWU1VcHg4QWRjM3YyYW9zTk1BSTFEYnF5STlXeWNPYjRJQWdnUUVBQgorQTNsUUJ4ZXQvVEc0Y01wSS90SHdZZVNmSXp4TTB1VEtOczdVZ0FRcllMMWFrYURBNyszYnVlVnFZNE5KbFVoSWNRTE5ZeDhFCitBSVEwMW13alRROERlTkFkZm91TkE4NDQwR0JDUXhKWTNNRUdENnA0WTg0NENRQ0FpemNTZ3BNTEFBbEF1SjAzcU95UVJCUjMKK25FSEVLK0JNR0tJdWk0a0REQUFJUEtpaVl1U1lTTVFRUkNEQ3hoaXppUE1ZQmdEa0VhRWFBR1FBM1krTWpVUE9MRm9Nb1VVaAorY0t4UkM0bmdlSUxpSDhRa2swY0NBVXpTRFpXcHpiTEVFMUV3Z2djWXFXQ2oyRE5BREZEQUFRVWdJQUFBRUZEREptUFlxTkpGCitGMXM0Y3NjVG1DRGpEVGpkU1BPSEJRZ2dVQUVRREFnZ2dUV0RQb1lNSmtGb1VkUm1kZHl5aldMZVVMTU1NY0FzSXcweDR3a00KK0lNRTFnMjV6eXhwSHhGWVVIbXlJZ2d3NEg0b2pJVG5maUxNTk1Ba2NBQXViNEJRamloUmRER1RKSG12YzRRbzF3RDZJbWplNgorZUlMYmorQlE0d3F1NVEzRUNTSjBGT0tLTXR2NG1CZzMzUHc0empiS3VCSUlFMXhZcElraGRRUWl5aTdPdEF1Y2o2ZHQ0OHd1CitvdFFoQlJhNlZ2U0pJUndoSWtvdHZnUlR6TVVZWjZ4eE1jajRRa3NwZUtEeHhSaEVtVWZJSFdqQWdRY2lqRURpc3N1WHZDeXoKK3pIN1E4WVFVUnhEaFVzbi9iQ0luUjNBRUxmVFFaQlJ0OUJCSmtDR0ZGVmhNd1ROQmxuQkNTQ0dFSUpRUUlBa2xaTVhXUkJBUgorUlJSV0VOSHdSUUVCQURzPSIiIgorCisKK3MxID0gVGtpbnRlci5QaG90b0ltYWdlKCJzZWFyY2gxIiwgZGF0YT1kYXRhLCBmb3JtYXQ9ImdpZiAtaW5kZXggMCIpCitzMiA9IFRraW50ZXIuUGhvdG9JbWFnZSgic2VhcmNoMiIsIGRhdGE9ZGF0YSwgZm9ybWF0PSJnaWYgLWluZGV4IDEiKQorCitzdHlsZSA9IHR0ay5TdHlsZSgpCisKK3N0eWxlLmVsZW1lbnRfY3JlYXRlKCJTZWFyY2guZmllbGQiLCAiaW1hZ2UiLCAic2VhcmNoMSIsCisgICAgKCJmb2N1cyIsICJzZWFyY2gyIiksIGJvcmRlcj1bMjIsIDcsIDE0XSwgc3RpY2t5PSJldyIpCisKK3N0eWxlLmxheW91dCgiU2VhcmNoLmVudHJ5IiwgWworICAgICgiU2VhcmNoLmZpZWxkIiwgeyJzdGlja3kiOiAibnN3ZSIsICJib3JkZXIiOiAxLCAiY2hpbGRyZW4iOgorICAgICAgICBbKCJFbnRyeS5wYWRkaW5nIiwgeyJzdGlja3kiOiAibnN3ZSIsICJjaGlsZHJlbiI6CisgICAgICAgICAgICBbKCJFbnRyeS50ZXh0YXJlYSIsIHsic3RpY2t5IjogIm5zd2UifSldCisgICAgICAgIH0pXQorICAgIH0pXQorKQorCitzdHlsZS5jb25maWd1cmUoIlNlYXJjaC5lbnRyeSIsIGJhY2tncm91bmQ9IiNiMmIyYjIiKQorCityb290LmNvbmZpZ3VyZShiYWNrZ3JvdW5kPSIjYjJiMmIyIikKKworZTEgPSB0dGsuRW50cnkoc3R5bGU9IlNlYXJjaC5lbnRyeSIsIHdpZHRoPTIwKQorZTIgPSB0dGsuRW50cnkoc3R5bGU9IlNlYXJjaC5lbnRyeSIsIHdpZHRoPTIwKQorCitlMS5ncmlkKHBhZHg9MTAsIHBhZHk9MTApCitlMi5ncmlkKHBhZHg9MTAsIHBhZHk9MTApCisKK3Jvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9ub3RlYm9va19jbG9zZWJ0bi5weSBiL0RlbW8vdGtpbnRlci90dGsvbm90ZWJvb2tfY2xvc2VidG4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0MTY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvbm90ZWJvb2tfY2xvc2VidG4ucHkKQEAgLTAsMCArMSw3OCBAQAorIiIiQSBUdGsgTm90ZWJvb2sgd2l0aCBjbG9zZSBidXR0b25zLgorCitCYXNlZCBvbiBhbiBleGFtcGxlIGJ5IHBhdHRob3l0cywgaHR0cDovL3Bhc3RlLnRjbGVycy50ay84OTYKKyIiIgoraW1wb3J0IG9zCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCityb290ID0gVGtpbnRlci5UaygpCisKK2ltZ2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnaW1nJykKK2kxID0gVGtpbnRlci5QaG90b0ltYWdlKCJpbWdfY2xvc2UiLCBmaWxlPW9zLnBhdGguam9pbihpbWdkaXIsICdjbG9zZS5naWYnKSkKK2kyID0gVGtpbnRlci5QaG90b0ltYWdlKCJpbWdfY2xvc2VhY3RpdmUiLAorICAgIGZpbGU9b3MucGF0aC5qb2luKGltZ2RpciwgJ2Nsb3NlX2FjdGl2ZS5naWYnKSkKK2kzID0gVGtpbnRlci5QaG90b0ltYWdlKCJpbWdfY2xvc2VwcmVzc2VkIiwKKyAgICBmaWxlPW9zLnBhdGguam9pbihpbWdkaXIsICdjbG9zZV9wcmVzc2VkLmdpZicpKQorCitzdHlsZSA9IHR0ay5TdHlsZSgpCisKK3N0eWxlLmVsZW1lbnRfY3JlYXRlKCJjbG9zZSIsICJpbWFnZSIsICJpbWdfY2xvc2UiLAorICAgICgiYWN0aXZlIiwgInByZXNzZWQiLCAiIWRpc2FibGVkIiwgImltZ19jbG9zZXByZXNzZWQiKSwKKyAgICAoImFjdGl2ZSIsICIhZGlzYWJsZWQiLCAiaW1nX2Nsb3NlYWN0aXZlIiksIGJvcmRlcj04LCBzdGlja3k9JycpCisKK3N0eWxlLmxheW91dCgiQnV0dG9uTm90ZWJvb2siLCBbKCJCdXR0b25Ob3RlYm9vay5jbGllbnQiLCB7InN0aWNreSI6ICJuc3dlIn0pXSkKK3N0eWxlLmxheW91dCgiQnV0dG9uTm90ZWJvb2suVGFiIiwgWworICAgICgiQnV0dG9uTm90ZWJvb2sudGFiIiwgeyJzdGlja3kiOiAibnN3ZSIsICJjaGlsZHJlbiI6CisgICAgICAgIFsoIkJ1dHRvbk5vdGVib29rLnBhZGRpbmciLCB7InNpZGUiOiAidG9wIiwgInN0aWNreSI6ICJuc3dlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iOgorICAgICAgICAgICAgWygiQnV0dG9uTm90ZWJvb2suZm9jdXMiLCB7InNpZGUiOiAidG9wIiwgInN0aWNreSI6ICJuc3dlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgWygiQnV0dG9uTm90ZWJvb2subGFiZWwiLCB7InNpZGUiOiAibGVmdCIsICJzdGlja3kiOiAnJ30pLAorICAgICAgICAgICAgICAgICAoIkJ1dHRvbk5vdGVib29rLmNsb3NlIiwgeyJzaWRlIjogImxlZnQiLCAic3RpY2t5IjogJyd9KV0KKyAgICAgICAgICAgIH0pXQorICAgICAgICB9KV0KKyAgICB9KV0KKykKKworZGVmIGJ0bl9wcmVzcyhldmVudCk6CisgICAgeCwgeSwgd2lkZ2V0ID0gZXZlbnQueCwgZXZlbnQueSwgZXZlbnQud2lkZ2V0CisgICAgZWxlbSA9IHdpZGdldC5pZGVudGlmeSh4LCB5KQorICAgIGluZGV4ID0gd2lkZ2V0LmluZGV4KCJAJWQsJWQiICUgKHgsIHkpKQorCisgICAgaWYgImNsb3NlIiBpbiBlbGVtOgorICAgICAgICB3aWRnZXQuc3RhdGUoWydwcmVzc2VkJ10pCisgICAgICAgIHdpZGdldC5wcmVzc2VkX2luZGV4ID0gaW5kZXgKKworZGVmIGJ0bl9yZWxlYXNlKGV2ZW50KToKKyAgICB4LCB5LCB3aWRnZXQgPSBldmVudC54LCBldmVudC55LCBldmVudC53aWRnZXQKKworICAgIGlmIG5vdCB3aWRnZXQuaW5zdGF0ZShbJ3ByZXNzZWQnXSk6CisgICAgICAgIHJldHVybgorCisgICAgZWxlbSA9ICB3aWRnZXQuaWRlbnRpZnkoeCwgeSkKKyAgICBpbmRleCA9IHdpZGdldC5pbmRleCgiQCVkLCVkIiAlICh4LCB5KSkKKworICAgIGlmICJjbG9zZSIgaW4gZWxlbSBhbmQgd2lkZ2V0LnByZXNzZWRfaW5kZXggPT0gaW5kZXg6CisgICAgICAgIHdpZGdldC5mb3JnZXQoaW5kZXgpCisgICAgICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgiPDxOb3RlYm9va0Nsb3NlZFRhYj4+IikKKworICAgIHdpZGdldC5zdGF0ZShbIiFwcmVzc2VkIl0pCisgICAgd2lkZ2V0LnByZXNzZWRfaW5kZXggPSBOb25lCisKKworcm9vdC5iaW5kX2NsYXNzKCJUTm90ZWJvb2siLCAiPEJ1dHRvblByZXNzLTE+IiwgYnRuX3ByZXNzLCBUcnVlKQorcm9vdC5iaW5kX2NsYXNzKCJUTm90ZWJvb2siLCAiPEJ1dHRvblJlbGVhc2UtMT4iLCBidG5fcmVsZWFzZSkKKworIyBjcmVhdGUgYSB0dGsgbm90ZWJvb2sgd2l0aCBvdXIgY3VzdG9tIHN0eWxlLCBhbmQgYWRkIHNvbWUgdGFicyB0byBpdAorbmIgPSB0dGsuTm90ZWJvb2sod2lkdGg9MjAwLCBoZWlnaHQ9MjAwLCBzdHlsZT0iQnV0dG9uTm90ZWJvb2siKQorbmIucHJlc3NlZF9pbmRleCA9IE5vbmUKK2YxID0gVGtpbnRlci5GcmFtZShuYiwgYmFja2dyb3VuZD0icmVkIikKK2YyID0gVGtpbnRlci5GcmFtZShuYiwgYmFja2dyb3VuZD0iZ3JlZW4iKQorZjMgPSBUa2ludGVyLkZyYW1lKG5iLCBiYWNrZ3JvdW5kPSJibHVlIikKK25iLmFkZChmMSwgdGV4dD0nUmVkJywgcGFkZGluZz0zKQorbmIuYWRkKGYyLCB0ZXh0PSdHcmVlbicsIHBhZGRpbmc9MykKK25iLmFkZChmMywgdGV4dD0nQmx1ZScsIHBhZGRpbmc9MykKK25iLnBhY2soZXhwYW5kPTEsIGZpbGw9J2JvdGgnKQorCityb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvcGxhc3Rpa190aGVtZS5weSBiL0RlbW8vdGtpbnRlci90dGsvcGxhc3Rpa190aGVtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTIyZDkwCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9wbGFzdGlrX3RoZW1lLnB5CkBAIC0wLDAgKzEsMjY5IEBACisiIiJUaGlzIGRlbW9uc3RyYXRlcyBnb29kIHBhcnQgb2YgdGhlIHN5bnRheCBhY2NlcHRlZCBieSB0aGVtZV9jcmVhdGUuCisKK1RoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBwbGFzdGlrLnRjbCB0byBweXRob24uCitZb3Ugd2lsbCBuZWVkIHRoZSBpbWFnZXMgdXNlZCBieSB0aGUgcGxhc3RpayB0aGVtZSB0byB0ZXN0IHRoaXMuIFRoZQoraW1hZ2VzIChhbmQgb3RoZXIgdGlsZSB0aGVtZXMpIGNhbiBiZSByZXRyaXZlZCBieSBkb2luZzoKKworJCBjdnMgLXozIC1kOnBzZXJ2ZXI6YW5vbnltb3VzQHRrdGFibGUuY3ZzLnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC90a3RhYmxlIFwKKyAgY28gdGlsZS10aGVtZXMKKworVG8gdGVzdCB0aGlzIG1vZHVsZSB5b3Ugc2hvdWxkIGRvLCBmb3IgZXhhbXBsZToKKworaW1wb3J0IFRraW50ZXIKK2ltcG9ydCBwbGFzdGlrX3RoZW1lCisKK3Jvb3QgPSBUa2ludGVyLlRrKCkKK3BsYXN0aWtfdGhlbWUuaW5zdGFsbChwbGFzdGlrX2ltYWdlX2RpcikKKy4uLgorCitXaGVyZSBwbGFzdGlrX2ltYWdlX2RpciBjb250YWlucyB0aGUgcGF0aCB0byB0aGUgaW1hZ2VzIGRpcmVjdG9yeSB1c2VkIGJ5Cit0aGUgcGxhc3RpayB0aGVtZSwgc29tZXRoaW5nIGxpa2U6IHRpbGUtdGhlbWVzL3BsYXN0aWsvcGxhc3RpaworIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBnbG9iCitpbXBvcnQgdHRrCitmcm9tIFRraW50ZXIgaW1wb3J0IFBob3RvSW1hZ2UKKworX19hbGxfXyA9IFsnaW5zdGFsbCddCisKK2NvbG9ycyA9IHsKKyAgICAiZnJhbWUiOiAiI2VmZWZlZiIsCisgICAgImRpc2FibGVkZmciOiAiI2FhYWFhYSIsCisgICAgInNlbGVjdGJnIjogIiM2NTdhOWUiLAorICAgICJzZWxlY3RmZyI6ICIjZmZmZmZmIgorICAgIH0KKworaW1ncyA9IHt9CitkZWYgX2xvYWRfaW1ncyhpbWdkaXIpOgorICAgIGltZ2RpciA9IG9zLnBhdGguZXhwYW5kdXNlcihpbWdkaXIpCisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoaW1nZGlyKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlciBpcyBub3QgYSBkaXJlY3RvcnksIGNhbid0IGxvYWQgaW1hZ2VzIiAlIGltZ2RpcikKKyAgICBmb3IgZiBpbiBnbG9iLmdsb2IoIiVzLyouZ2lmIiAlIGltZ2Rpcik6CisgICAgICAgIGltZyA9IG9zLnBhdGguc3BsaXQoZilbMV0KKyAgICAgICAgbmFtZSA9IGltZ1s6LTRdCisgICAgICAgIGltZ3NbbmFtZV0gPSBQaG90b0ltYWdlKG5hbWUsIGZpbGU9ZiwgZm9ybWF0PSJnaWY4OSIpCisKK2RlZiBpbnN0YWxsKGltZ2Rpcik6CisgICAgX2xvYWRfaW1ncyhpbWdkaXIpCisgICAgc3R5bGUgPSB0dGsuU3R5bGUoKQorICAgIHN0eWxlLnRoZW1lX2NyZWF0ZSgicGxhc3RpayIsICJkZWZhdWx0Iiwgc2V0dGluZ3M9eworICAgICAgICAiLiI6IHsKKyAgICAgICAgICAgICJjb25maWd1cmUiOgorICAgICAgICAgICAgICAgIHsiYmFja2dyb3VuZCI6IGNvbG9yc1snZnJhbWUnXSwKKyAgICAgICAgICAgICAgICAgInRyb3VnaGNvbG9yIjogY29sb3JzWydmcmFtZSddLAorICAgICAgICAgICAgICAgICAic2VsZWN0YmFja2dyb3VuZCI6IGNvbG9yc1snc2VsZWN0YmcnXSwKKyAgICAgICAgICAgICAgICAgInNlbGVjdGZvcmVncm91bmQiOiBjb2xvcnNbJ3NlbGVjdGZnJ10sCisgICAgICAgICAgICAgICAgICJmaWVsZGJhY2tncm91bmQiOiBjb2xvcnNbJ2ZyYW1lJ10sCisgICAgICAgICAgICAgICAgICJmb250IjogIlRrRGVmYXVsdEZvbnQiLAorICAgICAgICAgICAgICAgICAiYm9yZGVyd2lkdGgiOiAxfSwKKyAgICAgICAgICAgICJtYXAiOiB7ImZvcmVncm91bmQiOiBbKCJkaXNhYmxlZCIsIGNvbG9yc1snZGlzYWJsZWRmZyddKV19CisgICAgICAgIH0sCisKKyAgICAgICAgIlZlcnRpY2FsLlRTY3JvbGxiYXIiOiB7ImxheW91dCI6IFsKKyAgICAgICAgICAgICgiVmVydGljYWwuU2Nyb2xsYmFyLnVwYXJyb3ciLCB7InNpZGUiOiAidG9wIiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAoIlZlcnRpY2FsLlNjcm9sbGJhci5kb3duYXJyb3ciLCB7InNpZGUiOiAiYm90dG9tIiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAoIlZlcnRpY2FsLlNjcm9sbGJhci51cGFycm93IiwgeyJzaWRlIjogImJvdHRvbSIsICJzdGlja3kiOiAnJ30pLAorICAgICAgICAgICAgKCJWZXJ0aWNhbC5TY3JvbGxiYXIudHJvdWdoIiwgeyJzdGlja3kiOiAibnMiLCAiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgIFsoIlZlcnRpY2FsLlNjcm9sbGJhci50aHVtYiIsIHsiZXhwYW5kIjogMSwgInVuaXQiOiAxLAorICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iOiBbKCJWZXJ0aWNhbC5TY3JvbGxiYXIuZ3JpcCIsIHsic3RpY2t5IjogJyd9KV0KKyAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgIH0pXQorICAgICAgICB9LAorCisgICAgICAgICJIb3Jpem9udGFsLlRTY3JvbGxiYXIiOiB7ImxheW91dCI6IFsKKyAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIubGVmdGFycm93IiwgeyJzaWRlIjogImxlZnQiLCAic3RpY2t5IjogJyd9KSwKKyAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIucmlnaHRhcnJvdyIsCisgICAgICAgICAgICAgICAgeyJzaWRlIjogInJpZ2h0IiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAoIkhvcml6b250YWwuU2Nyb2xsYmFyLmxlZnRhcnJvdyIsCisgICAgICAgICAgICAgICAgeyJzaWRlIjogInJpZ2h0IiwgInN0aWNreSI6ICcnfSksCisgICAgICAgICAgICAoIkhvcml6b250YWwuU2Nyb2xsYmFyLnRyb3VnaCIsIHsic3RpY2t5IjogImV3IiwgImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICBbKCJIb3Jpem9udGFsLlNjcm9sbGJhci50aHVtYiIsIHsiZXhwYW5kIjogMSwgInVuaXQiOiAxLAorICAgICAgICAgICAgICAgICAgICAiY2hpbGRyZW4iOiBbKCJIb3Jpem9udGFsLlNjcm9sbGJhci5ncmlwIiwgeyJzdGlja3kiOiAnJ30pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldCisgICAgICAgIH0sCisKKyAgICAgICAgIlRCdXR0b24iOiB7CisgICAgICAgICAgICAiY29uZmlndXJlIjogeyJ3aWR0aCI6IDEwLCAiYW5jaG9yIjogImNlbnRlciJ9LAorICAgICAgICAgICAgImxheW91dCI6IFsKKyAgICAgICAgICAgICAgICAoIkJ1dHRvbi5idXR0b24iLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgWygiQnV0dG9uLmZvY3VzIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgICAgICBbKCJCdXR0b24ucGFkZGluZyIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoIkJ1dHRvbi5sYWJlbCIsIHsic2lkZSI6ICJsZWZ0IiwgImV4cGFuZCI6IDF9KV0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgXQorICAgICAgICB9LAorCisgICAgICAgICJUb29sYnV0dG9uIjogeworICAgICAgICAgICAgImNvbmZpZ3VyZSI6IHsiYW5jaG9yIjogImNlbnRlciJ9LAorICAgICAgICAgICAgImxheW91dCI6IFsKKyAgICAgICAgICAgICAgICAoIlRvb2xidXR0b24uYm9yZGVyIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgIFsoIlRvb2xidXR0b24uYnV0dG9uIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgICAgICBbKCJUb29sYnV0dG9uLnBhZGRpbmciLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJUb29sYnV0dG9uLmxhYmVsIiwgeyJzaWRlIjoibGVmdCIsICJleHBhbmQiOjF9KV0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgXQorICAgICAgICB9LAorCisgICAgICAgICJUTWVudWJ1dHRvbiI6IHsibGF5b3V0IjogWworICAgICAgICAgICAgKCJNZW51YnV0dG9uLmJ1dHRvbiIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgIFsoIk1lbnVidXR0b24uaW5kaWNhdG9yIiwgeyJzaWRlIjogInJpZ2h0In0pLAorICAgICAgICAgICAgICAgICAoIk1lbnVidXR0b24uZm9jdXMiLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5wYWRkaW5nIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLmxhYmVsIiwgeyJzaWRlIjogImxlZnQiLCAiZXhwYW5kIjogMX0pXQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgIH0pXQorICAgICAgICB9LAorCisgICAgICAgICJUTm90ZWJvb2siOiB7ImNvbmZpZ3VyZSI6IHsidGFibWFyZ2lucyI6IFswLCAyLCAwLCAwXX19LAorICAgICAgICAiVE5vdGVib29rLnRhYiI6IHsKKyAgICAgICAgICAgICJjb25maWd1cmUiOiB7InBhZGRpbmciOiBbNiwgMiwgNiwgMl0sICJleHBhbmQiOiBbMCwgMCwgMl19LAorICAgICAgICAgICAgIm1hcCI6IHsiZXhwYW5kIjogWygic2VsZWN0ZWQiLCBbMSwgMiwgNCwgMl0pXX0KKyAgICAgICAgfSwKKyAgICAgICAgIlRyZWV2aWV3IjogeyJjb25maWd1cmUiOiB7InBhZGRpbmciOiAwfX0sCisKKyAgICAgICAgIyBlbGVtZW50cworICAgICAgICAiQnV0dG9uLmJ1dHRvbiI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdidXR0b24tbicsCisgICAgICAgICAgICAgICAgKCJwcmVzc2VkIiwgJ2J1dHRvbi1wJyksICgiYWN0aXZlIiwgJ2J1dHRvbi1oJyksCisgICAgICAgICAgICAgICAgeyJib3JkZXIiOiBbNCwgMTBdLCAicGFkZGluZyI6IDQsICJzdGlja3kiOiJld25zIn0KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiVG9vbGJ1dHRvbi5idXR0b24iOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAndGJ1dHRvbi1uJywKKyAgICAgICAgICAgICAgICAoInNlbGVjdGVkIiwgJ3RidXR0b24tcCcpLCAoInByZXNzZWQiLCAndGJ1dHRvbi1wJyksCisgICAgICAgICAgICAgICAgKCJhY3RpdmUiLCAndGJ1dHRvbi1oJyksCisgICAgICAgICAgICAgICAgeyJib3JkZXIiOiBbNCwgOV0sICJwYWRkaW5nIjogMywgInN0aWNreSI6ICJuZXdzIn0KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiQ2hlY2tidXR0b24uaW5kaWNhdG9yIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2NoZWNrLW51JywKKyAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdzZWxlY3RlZCcsICdjaGVjay1oYycpLAorICAgICAgICAgICAgICAgICgncHJlc3NlZCcsICdzZWxlY3RlZCcsICdjaGVjay1wYycpLAorICAgICAgICAgICAgICAgICgnYWN0aXZlJywgJ2NoZWNrLWh1JyksCisgICAgICAgICAgICAgICAgKCJzZWxlY3RlZCIsICdjaGVjay1uYycpLAorICAgICAgICAgICAgICAgIHsic3RpY2t5IjogJyd9CisgICAgICAgICAgICApCisgICAgICAgIH0sCisKKyAgICAgICAgIlJhZGlvYnV0dG9uLmluZGljYXRvciI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdyYWRpby1udScsCisgICAgICAgICAgICAgICAgKCdhY3RpdmUnLCAnc2VsZWN0ZWQnLCAncmFkaW8taGMnKSwKKyAgICAgICAgICAgICAgICAoJ3ByZXNzZWQnLCAnc2VsZWN0ZWQnLCAncmFkaW8tcGMnKSwKKyAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdyYWRpby1odScpLCAoJ3NlbGVjdGVkJywgJ3JhZGlvLW5jJyksCisgICAgICAgICAgICAgICAgeyJzdGlja3kiOiAnJ30KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiSG9yaXpvbnRhbC5TY3JvbGxiYXIudGh1bWIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnaHNiLW4nLCB7ImJvcmRlciI6IDMsICJzdGlja3kiOiAiZXcifSkKKyAgICAgICAgfSwKKworICAgICAgICAiSG9yaXpvbnRhbC5TY3JvbGxiYXIuZ3JpcCI6IHsiZWxlbWVudCBjcmVhdGUiOiAoImltYWdlIiwgJ2hzYi1nJyl9LAorICAgICAgICAiSG9yaXpvbnRhbC5TY3JvbGxiYXIudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6ICgiaW1hZ2UiLCAnaHNiLXQnKX0sCisgICAgICAgICJWZXJ0aWNhbC5TY3JvbGxiYXIudGh1bWIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAndnNiLW4nLCB7ImJvcmRlciI6IDMsICJzdGlja3kiOiAibnMifSkKKyAgICAgICAgfSwKKyAgICAgICAgIlZlcnRpY2FsLlNjcm9sbGJhci5ncmlwIjogeyJlbGVtZW50IGNyZWF0ZSI6ICgiaW1hZ2UiLCAndnNiLWcnKX0sCisgICAgICAgICJWZXJ0aWNhbC5TY3JvbGxiYXIudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6ICgiaW1hZ2UiLCAndnNiLXQnKX0sCisgICAgICAgICJTY3JvbGxiYXIudXBhcnJvdyI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdhcnJvd3VwLW4nLCAoInByZXNzZWQiLCAnYXJyb3d1cC1wJyksIHsic3RpY2t5IjogJyd9KQorICAgICAgICB9LAorICAgICAgICAiU2Nyb2xsYmFyLmRvd25hcnJvdyI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdhcnJvd2Rvd24tbicsCisgICAgICAgICAgICAoInByZXNzZWQiLCAnYXJyb3dkb3duLXAnKSwgeydzdGlja3knOiAnJ30pCisgICAgICAgIH0sCisgICAgICAgICJTY3JvbGxiYXIubGVmdGFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93bGVmdC1uJywKKyAgICAgICAgICAgICgicHJlc3NlZCIsICdhcnJvd2xlZnQtcCcpLCB7J3N0aWNreSc6ICcnfSkKKyAgICAgICAgfSwKKyAgICAgICAgIlNjcm9sbGJhci5yaWdodGFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93cmlnaHQtbicsICgicHJlc3NlZCIsICdhcnJvd3JpZ2h0LXAnKSwKKyAgICAgICAgICAgIHsnc3RpY2t5JzogJyd9KQorICAgICAgICB9LAorCisgICAgICAgICJIb3Jpem9udGFsLlNjYWxlLnNsaWRlciI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdoc2xpZGVyLW4nLCB7J3N0aWNreSc6ICcnfSkKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWwuU2NhbGUudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2hzbGlkZXItdCcsIHsnYm9yZGVyJzogMSwgJ3BhZGRpbmcnOiAwfSkKKyAgICAgICAgfSwKKyAgICAgICAgIlZlcnRpY2FsLlNjYWxlLnNsaWRlciI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd2c2xpZGVyLW4nLCB7J3N0aWNreSc6ICcnfSkKKyAgICAgICAgfSwKKyAgICAgICAgIlZlcnRpY2FsLlNjYWxlLnRyb3VnaCI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICd2c2xpZGVyLXQnLCB7J2JvcmRlcic6IDEsICdwYWRkaW5nJzogMH0pCisgICAgICAgIH0sCisKKyAgICAgICAgIkVudHJ5LmZpZWxkIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2VudHJ5LW4nLAorICAgICAgICAgICAgICAgICgiZm9jdXMiLCAnZW50cnktZicpLAorICAgICAgICAgICAgICAgIHsnYm9yZGVyJzogMiwgJ3BhZGRpbmcnOiBbMywgNF0sICdzdGlja3knOiAnbmV3cyd9CisgICAgICAgICAgICApCisgICAgICAgIH0sCisKKyAgICAgICAgIkxhYmVsZnJhbWUuYm9yZGVyIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2JvcmRlcicsIHsnYm9yZGVyJzogNCwgJ3BhZGRpbmcnOiA0LCAnc3RpY2t5JzogJ25ld3MnfSkKKyAgICAgICAgfSwKKworICAgICAgICAiTWVudWJ1dHRvbi5idXR0b24iOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnY29tYm8tcicsCisgICAgICAgICAgICAgICAgKCdhY3RpdmUnLCAnY29tYm8tcmEnKSwKKyAgICAgICAgICAgICAgICB7J3N0aWNreSc6ICduZXdzJywgJ2JvcmRlcic6IFs0LCA2LCAyNCwgMTVdLAorICAgICAgICAgICAgICAgICAncGFkZGluZyc6IFs0LCA0LCA1XX0KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKyAgICAgICAgIk1lbnVidXR0b24uaW5kaWNhdG9yIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93LWQnLCB7InN0aWNreSI6ICJlIiwgImJvcmRlciI6IFsxNSwgMCwgMCwgMF19KQorICAgICAgICB9LAorCisgICAgICAgICJDb21ib2JveC5maWVsZCI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdjb21iby1uJywKKyAgICAgICAgICAgICAgICAoJ3JlYWRvbmx5JywgJ2FjdGl2ZScsICdjb21iby1yYScpLAorICAgICAgICAgICAgICAgICgnZm9jdXMnLCAnYWN0aXZlJywgJ2NvbWJvLWZhJyksCisgICAgICAgICAgICAgICAgKCdhY3RpdmUnLCAnY29tYm8tYScpLCAoJyFyZWFkb25seScsICdmb2N1cycsICdjb21iby1mJyksCisgICAgICAgICAgICAgICAgKCdyZWFkb25seScsICdjb21iby1yJyksCisgICAgICAgICAgICAgICAgeydib3JkZXInOiBbNCwgNiwgMjQsIDE1XSwgJ3BhZGRpbmcnOiBbNCwgNCwgNV0sCisgICAgICAgICAgICAgICAgICdzdGlja3knOiAnbmV3cyd9CisgICAgICAgICAgICApCisgICAgICAgIH0sCisgICAgICAgICJDb21ib2JveC5kb3duYXJyb3ciOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3ctZCcsIHsnc3RpY2t5JzogJ2UnLCAnYm9yZGVyJzogWzE1LCAwLCAwLCAwXX0pCisgICAgICAgICB9LAorCisgICAgICAgICJOb3RlYm9vay5jbGllbnQiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnbm90ZWJvb2stYycsIHsnYm9yZGVyJzogNH0pCisgICAgICAgIH0sCisgICAgICAgICJOb3RlYm9vay50YWIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAnbm90ZWJvb2stdG4nLAorICAgICAgICAgICAgICAgICgic2VsZWN0ZWQiLCAnbm90ZWJvb2stdHMnKSwgKCJhY3RpdmUiLCAnbm90ZWJvb2stdGEnKSwKKyAgICAgICAgICAgICAgICB7J3BhZGRpbmcnOiBbMCwgMiwgMCwgMF0sICdib3JkZXInOiBbNCwgMTAsIDQsIDEwXX0KKyAgICAgICAgICAgICkKKyAgICAgICAgfSwKKworICAgICAgICAiUHJvZ3Jlc3NiYXIudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6CisgICAgICAgICAgICAoImltYWdlIiwgJ2hwcm9ncmVzcy10Jywgeydib3JkZXInOiAyfSkKKyAgICAgICAgfSwKKyAgICAgICAgIkhvcml6b250YWwuUHJvZ3Jlc3NiYXIucGJhciI6IHsiZWxlbWVudCBjcmVhdGUiOgorICAgICAgICAgICAgKCJpbWFnZSIsICdocHJvZ3Jlc3MtYicsIHsnYm9yZGVyJzogWzIsIDldfSkKKyAgICAgICAgfSwKKyAgICAgICAgIlZlcnRpY2FsLlByb2dyZXNzYmFyLnBiYXIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAndnByb2dyZXNzLWInLCB7J2JvcmRlcic6IFs5LCAyXX0pCisgICAgICAgIH0sCisKKyAgICAgICAgIlRyZWVoZWFkaW5nLmNlbGwiOiB7ImVsZW1lbnQgY3JlYXRlIjoKKyAgICAgICAgICAgICgiaW1hZ2UiLCAndHJlZS1uJywKKyAgICAgICAgICAgICAgICAoInByZXNzZWQiLCAndHJlZS1wJyksCisgICAgICAgICAgICAgICAgeydib3JkZXInOiBbNCwgMTBdLCAncGFkZGluZyc6IDQsICdzdGlja3knOiAnbmV3cyd9CisgICAgICAgICAgICApCisgICAgICAgIH0KKworICAgIH0pCisgICAgc3R5bGUudGhlbWVfdXNlKCJwbGFzdGlrIikKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvcm91bmRmcmFtZS5weSBiL0RlbW8vdGtpbnRlci90dGsvcm91bmRmcmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDIxNDdhCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay9yb3VuZGZyYW1lLnB5CkBAIC0wLDAgKzEsMTExIEBACisiIiJUdGsgRnJhbWUgd2l0aCByb3VuZGVkIGNvcm5lcnMuCisKK0Jhc2VkIG9uIGFuIGV4YW1wbGUgYnkgQnJ5YW4gT2FrbGV5LCBmb3VuZCBhdDogaHR0cDovL3dpa2kudGNsLnRrLzIwMTUyIiIiCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCityb290ID0gVGtpbnRlci5UaygpCisKK2ltZzEgPSBUa2ludGVyLlBob3RvSW1hZ2UoImZyYW1lRm9jdXNCb3JkZXIiLCBkYXRhPSIiIgorUjBsR09EbGhRQUJBQVBjQUFIeCtmTVRDeEtTaXBPVGk1SlNTbE5UUzFMU3l0UFR5OUl5S2pNekt6S3lxCityT3pxN0p5YW5OemEzTHk2dlB6Ni9JU0NoTVRHeEtTbXBPVG01SlNXbE5UVzFMUzJ0UFQyOUl5T2pNek8KK3pLeXVyT3p1N0p5ZW5OemUzTHkrdlB6Ky9Pa0FLT1VBNUlFQUVud0FBQUN1UUFDVUFBRkJBQUIrQUZZZAorUUFDMEFBQkJBQUIrQUlqTUF1RUVBQklOQUFBQUFITWdBUUFBQUFBQUFBQUFBS2pTeE9JRUpCSUlwUUFBCitzUmdCTU80QUFKQUFBSHdDQUhBQUFBVUFBSkVBQUh3QUFQK2VFUDhDWi84QWlmOEFBRzBCREFVQUFKRUEKK0FId0FBSVhZQU9meEFJRVNBSHdBQUFCQU1RQWJNQlpHTUFBQUlFZ2dKUU1BSUFBQUFBQUFmcWdhWEVTSQorNUJkQkVnQitBR2dBTEdFQUFCWUFBQUFBQUFDc053QUVBQUFNTHdBQUFINjFNUUJJQUFCQ004QitBQUFVCitBQUFBQUFBQXBRQUFzZjhCcnY4QWxQOEFRZjhBZnY4QXpQOEExUDhBUWY4QWZnQUFyQUFBQkFBQURBQUEKK0FBQ1FEQURqQUFBU0FBQUFBQUNBQUFEVkFCWkJBQUIrQUxqTXdPSUVoeElOVUFBQUFOSWdBT1lBQUlFQQorQUh3QUFHalNBR0VFQUJZSUFBQUFBRW9CQitNQUFJRUFBSHdDQUNBQkFKc0FBRkFBQUFBQUFHakpBR0dMCitBQUZCRmdCK0FHbUlBQUFRQUFCSEFBQitBUFFvQU9FL0FCSUFBQUFBQUFEUUFBRGpBQUFTQUFBQUFQaUYKK0FQY3JBQktEQUFCOEFCZ0FHTzRBQUpBQXFYd0FBSEFBQUFVQUFKRUFBSHdBQVA4QUFQOEFBUDhBQVA4QQorQUcwcEl3VzNBSkdTQUh4OEFFb2NJL1FBQUlDcEFId0FBQUEwU0FCazZ4YURFZ0I4QUFELy93RC8vd0QvCisvd0QvLzJnQUFHRUFBQllBQUFBQUFBQzAvQUhqNUFBU0VnQUFBQUEwMWdCa1dBQ0RUQUI4QUZmNDNQVDMKKzVJQVNFbndBQU9BWWQrUHVNQktRVHdCOEFHZ0FFR0czNVJhU0VnQjhBT2ovTk9ML1pCTC9nd0QvZk1rYworcTRzQTVVR3BFbjRBQUlnMDJ4QmsvMGVELzM1OGZ4LzRpQURrNVFBU0VnQUFBQUxuSEFCa0FBQ0RxUUI4CitBTXlJTkFSa1pBMkRnd0I4ZkJBQkhMMEFBRVVBcVFBQUFJQXhLT01BUHhJd0FBQUFBSVNjQU9QeEFCSVMKK0FBQUFBSUlBblF3QS8wSUFSM2NBQUN3QUFBQUFRQUJBQUFBSS93QS9DQnhJc0tEQmd3Z1RLbHpJc0tGRAorZ3hjZU5ueEFzYUxGaXhnelVyekFzV1BGQ3c4a0RneTVFZVFEa0J4UG9seXBzbVhLbHgxaFhuUzQ4VUVICitDd29vTUNEQWdJSk9Dang5OWd6NmsralFua1dSOWxSZ1lZREprQWsvRGxBZ0lNSUNabGl6YXQzS3RhdFgKK3JBc2lDTkRndENKQ2xRa29GTWdxc3UzQXJCa29aRGdBOHVESkF3azRiR0RtdG05QlpnY1l6SzA3OG00RAorQ2dmNCtsMHNrTmtHQ2czb1VoUjRkNEdDRElvWk0yWldRTUVDeVpRdkxNZ2dJYlBtelFJeWZDWjVZY01FCitBd0ZNbi9iTExJS0JDUnRNSGxqUVFjRFYyWnFaVFJEUVlmV0ZBd01xVUpBTnZDOHpCaFVXYkRpNVlVQUIKK0JzeWJ0MlZHb1VLSDNBY21kUCtJbTEyN3hPY0ppaCtvWHNFRGR2T0x1UWZJTUdCRDlRd0Jsc09uemNCRAoraGZyc3VWZmVmZ3pKUjU5OUErQ25INEhiOWZjZmd1Mjl4NkJJQmdLWVlINERUb2pRYy81WkdHR0dHaHBVCitJWUlLZ2hnaVFSdytHS0NFSnhaSXdYd1dsdGhpUXlsNktPQ01Mc0pJSW9ZNExsUWpoRGYybU5DSTkvRW8KKzVJWU8yc2ppa1grOWVHQ1JDekw1VjVKQUxpbGxZMDdHYU9TVmIxRzVvb2t6RW5saGxGeCs4T09YWmI2VgorNVk1a2NubG1ja0dtS2FhTWFacnBKWnhXWGpubmxtVysrV0dkWnE1WlhRRWV0S21ubHhQZ2w2ZVVZaEpxCitLS09JMGltbm9OYkYyU2NGSFFKSndXOTlUc0JBQUFWWVdFQUFIRVFBWm9pMWNRRHFBQWVFVjBFQUNwVC8KK0pxY0FDZ1JRQVc2dU5XQ2JZS2N5eUV3R0RCZ1F3YTJ0VGxCQkFoWUlRTUZlakM1QWdRQVdKTkRBQkszeQorbG9FREVqQ2dWNi9hT2NZQkF3cDRrSUY2clZrWGdBRWM4SVFaVmlmQ0JSUUhHcXlhMjNIR0lwc1RCZ1NVCitPc0ZYL1BiclZWanBZc0NBQkE0a1FDeEh1MTFvZ0FRVUlPQXdBVHBCTERGUUZFOXNjY1VZUzB3QXhENWgKKzREQUNGRWdnYkFIazNqVkJBL2d0VElISEVBRGc4c3N3eHl6enpEUURBQUVFQ0dBUXNnSGlUaXNaUmVzTgorZ0xJSEJpandMUUVZZVB6eDBrdzM3ZlRTU2p1TXI3Wk16ZmNnWVpVWmk1OERHc1RLd2JkZ2F5dDIyR1NQCitiWGJZWTNNZ2dRSWFPTkR6QUo4UjlrRmxRaGVRUUFBT1dHQ0FBUnJ3ZHQyM0JuOEg3dmZnZ0JNdWVPRUcKK1dPQkJBQWtVMEVCOW9CR1VkWElGWkpCQUJBRUVzUGptbW5mTytlZWVoLzU1QkJFazBQaC9FOFE5bWVRcQorYmJEQUJBTjAwRUFERlJSUSsrMjI1NDc3N3JyM2pydmpGVFRRd1FDcHo3dTZRUnV0NS9vRXpBL2cvUFBRCitSeS85OU5Jei8vb0dyWnBVVUVBQU93PT0iIiIpCisKK2ltZzIgPSBUa2ludGVyLlBob3RvSW1hZ2UoImZyYW1lQm9yZGVyIiwgZGF0YT0iIiIKK1IwbEdPRGxoUUFCQUFQY0FBSHgrZk1UQ3hLU2lwT1RpNUpTU2xOVFMxTFN5dFBUeTlJeUtqTXpLekt5cQorck96cTdKeWFuTnphM0x5NnZQejYvSVNDaE1UR3hLU21wT1RtNUpTV2xOVFcxTFMydFBUMjlJeU9qTXpPCit6S3l1ck96dTdKeWVuTnplM0x5K3ZQeisvT2tBS09VQTVJRUFFbndBQUFDdVFBQ1VBQUZCQUFCK0FGWWQKK1FBQzBBQUJCQUFCK0FJak1BdUVFQUJJTkFBQUFBSE1nQVFBQUFBQUFBQUFBQUtqU3hPSUVKQklJcFFBQQorc1JnQk1PNEFBSkFBQUh3Q0FIQUFBQVVBQUpFQUFId0FBUCtlRVA4Q1ovOEFpZjhBQUcwQkRBVUFBSkVBCitBSHdBQUlYWUFPZnhBSUVTQUh3QUFBQkFNUUFiTUJaR01BQUFJRWdnSlFNQUlBQUFBQUFBZnFnYVhFU0kKKzVCZEJFZ0IrQUdnQUxHRUFBQllBQUFBQUFBQ3NOd0FFQUFBTUx3QUFBSDYxTVFCSUFBQkNNOEIrQUFBVQorQUFBQUFBQUFwUUFBc2Y4QnJ2OEFsUDhBUWY4QWZ2OEF6UDhBMVA4QVFmOEFmZ0FBckFBQUJBQUFEQUFBCitBQUNRREFEakFBQVNBQUFBQUFDQUFBRFZBQlpCQUFCK0FMak13T0lFaHhJTlVBQUFBTklnQU9ZQUFJRUEKK0FId0FBR2pTQUdFRUFCWUlBQUFBQUVvQkIrTUFBSUVBQUh3Q0FDQUJBSnNBQUZBQUFBQUFBR2pKQUdHTAorQUFGQkZnQitBR21JQUFBUUFBQkhBQUIrQVBRb0FPRS9BQklBQUFBQUFBRFFBQURqQUFBU0FBQUFBUGlGCitBUGNyQUJLREFBQjhBQmdBR080QUFKQUFxWHdBQUhBQUFBVUFBSkVBQUh3QUFQOEFBUDhBQVA4QUFQOEEKK0FHMHBJd1czQUpHU0FIeDhBRW9jSS9RQUFJQ3BBSHdBQUFBMFNBQms2eGFERWdCOEFBRC8vd0QvL3dELworL3dELy8yZ0FBR0VBQUJZQUFBQUFBQUMwL0FIajVBQVNFZ0FBQUFBMDFnQmtXQUNEVEFCOEFGZjQzUFQzCis1SUFTRW53QUFPQVlkK1B1TUJLUVR3QjhBR2dBRUdHMzVSYVNFZ0I4QU9qL05PTC9aQkwvZ3dEL2ZNa2MKK3E0c0E1VUdwRW40QUFJZzAyeEJrLzBlRC8zNThmeC80aUFEazVRQVNFZ0FBQUFMbkhBQmtBQUNEcVFCOAorQU15SU5BUmtaQTJEZ3dCOGZCQUJITDBBQUVVQXFRQUFBSUF4S09NQVB4SXdBQUFBQUlTY0FPUHhBQklTCitBQUFBQUlJQW5Rd0EvMElBUjNjQUFDd0FBQUFBUUFCQUFBQUkvd0EvQ0J4SXNLREJnd2dUS2x6SXNLRkQKK2d4Y2VObnhBc2FMRml4Z3pVcnpBc1dQRkN3OGtEZ3k1RWVRRGtCeFBvbHlwc21YS2x4MWhYblM0OFVFSAorQ3dvb01DREFnSUpPQ2p4OTlnejZrK2pRbmtXUjlsUmdZWURKa0FrL0RsQWdJTUlDa1ZnSExvZ2dRSVBUCitpZ2hWSnFCUUlLdlpnaGtvWkRnQTh1REpBd2s0YkRoTGQrQUJCbXZiam56YmdNS0J1b0EvYktEUWdDMUYKK2dXOFhLTWdRT0hBQkJRc01JNzZ3SUlPRXhvMEZaSWhNOHNLR0NRWUNZQTRjd2NDRURTWVBMT2dnNE9ybwordWhNRWRPQjg0Y0NBQ2hSZUIyWlFZY0dHa3hzR0ZHQ2dHekNGQ2gxUUg1alFJVzN4dWd3U3pENFF2SUlICis0cy9QVWdpUVljQ0c0QmtDNVAvT2JwYUJod3JlcTE4bmIzWjc5KzhEd285bkw5SThldmpXc2RPWDZENTkKK2ZQSDcxWGVlZi9rRnlCOTMvc2xuNEVQMkViamVnZzMxQjUrQ0VETFVJSDRQVnFpUWhPQUJxS0ZDRjZxbgorMzRjSGNmamZmQ1FhRk9KdEdhWllrSWtVdWxqUWlnWEsrQ0tDRTNwbzQwQTB0cmdqakRydStFR1BJLzZJCitZNGNvN2tpa2tBTUJtYVNOU3pMNWdaTlNEamtnaGtYYWFHSUJIandwWTRnVGhKZWxqRnQyV1NXWU1RcFoKKzVwZ3VVbkNsZWhTNHR1TUVEQVJRZ0g4RkJNQkJCRXhHd0lHZEF4eXdYQVVCS0hDWmtBSW9FRUFGcDMzVworUUdsNDdaZ0JBd1pFd0tpZ0UxU1FnQVVDVURDWGl3dFFJSUFGQ1RRd2dhQ3JaZUNBQkF6SWxlSUdIREQvCitvSUFIR1V6bm1YQUJHTUFCVDR4cG1CWUJIR2dBS0dxMVpicHBUaGdBRzhFRUFXNjFLd1lNU09CQUFwZHkKK3BOcC9Ca2hBQVFMY0VxQ1R0K0FDSlc2NDVJNXJMcmdFZU9zVEJ0d2lRSUVFbFJaZzYxc1ROQkJldGhTdworQ3dFQS9QYnI3NzhBQnl3d0FCQkFnQUFHN3hwQXE2bUdVVVRkQVBaNllJQUNzUktBQWJ2dFpxenh4aHhuCitqREczeWJiS0ZIZjM2WlZZcHVFNW9JR2hITVRxY3Fzd3Z5eHp6RFMvSERNSEVpaWdnUU1MRHhDWlhoOGsKK0JuRUJDUVRnZ0FVR0dLQ0Iwa3RyMFBUVFRFZnR0TlJRVDIyQUJSNEVrRUFCRFhnbkdVRW4zMVpBQmdsRQorRUVBQVdhZU45dHBxdDgzMjIyMUhFRUVDVzZNM3djK0hnYTNTQmd0TU9EQkFCdzAwVUVFQmd4ZE8rT0dHCitKNDc0NG9aelhVRURIUXh3TjdGNUc3UVJkWHhQb1BrQW5IZnUrZWVnaHc2NjVuMXZJS2hKQlFVRUFEcz0iIiIpCisKK3N0eWxlID0gdHRrLlN0eWxlKCkKKworc3R5bGUuZWxlbWVudF9jcmVhdGUoIlJvdW5kZWRGcmFtZSIsICJpbWFnZSIsICJmcmFtZUJvcmRlciIsCisgICAgKCJmb2N1cyIsICJmcmFtZUZvY3VzQm9yZGVyIiksIGJvcmRlcj0xNiwgc3RpY2t5PSJuc2V3IikKKworc3R5bGUubGF5b3V0KCJSb3VuZGVkRnJhbWUiLCBbKCJSb3VuZGVkRnJhbWUiLCB7InN0aWNreSI6ICJuc2V3In0pXSkKK3N0eWxlLmNvbmZpZ3VyZSgiVEVudHJ5IiwgYm9yZGVyd2lkdGg9MCkKKworZnJhbWUgPSB0dGsuRnJhbWUoc3R5bGU9IlJvdW5kZWRGcmFtZSIsIHBhZGRpbmc9MTApCitmcmFtZS5wYWNrKGZpbGw9J3gnKQorCitmcmFtZTIgPSB0dGsuRnJhbWUoc3R5bGU9IlJvdW5kZWRGcmFtZSIsIHBhZGRpbmc9MTApCitmcmFtZTIucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPTEpCisKK2VudHJ5ID0gdHRrLkVudHJ5KGZyYW1lLCB0ZXh0PSdUZXN0JykKK2VudHJ5LnBhY2soZmlsbD0neCcpCitlbnRyeS5iaW5kKCI8Rm9jdXNJbj4iLCBsYW1iZGEgZXZ0OiBmcmFtZS5zdGF0ZShbImZvY3VzIl0pKQorZW50cnkuYmluZCgiPEZvY3VzT3V0PiIsIGxhbWJkYSBldnQ6IGZyYW1lLnN0YXRlKFsiIWZvY3VzIl0pKQorCit0ZXh0ID0gVGtpbnRlci5UZXh0KGZyYW1lMiwgYm9yZGVyd2lkdGg9MCwgYmc9IndoaXRlIiwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCit0ZXh0LnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD0xKQordGV4dC5iaW5kKCI8Rm9jdXNJbj4iLCBsYW1iZGEgZXZ0OiBmcmFtZTIuc3RhdGUoWyJmb2N1cyJdKSkKK3RleHQuYmluZCgiPEZvY3VzT3V0PiIsIGxhbWJkYSBldnQ6IGZyYW1lMi5zdGF0ZShbIiFmb2N1cyJdKSkKKworcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL3RoZW1lX3NlbGVjdG9yLnB5IGIvRGVtby90a2ludGVyL3R0ay90aGVtZV9zZWxlY3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI4NDcyCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay90aGVtZV9zZWxlY3Rvci5weQpAQCAtMCwwICsxLDYxIEBACisiIiJUdGsgVGhlbWUgU2VsZWN0b3IgdjIuCisKK1RoaXMgaXMgYW4gaW1wcm92ZW1lbnQgZnJvbSB0aGUgb3RoZXIgdGhlbWUgc2VsZWN0b3IgKHRoZW1lc19jb21iby5weSkKK3NpbmNlIG5vdyB5b3UgY2FuIG5vdGljZSB0aGVtZSBjaGFuZ2VzIGluIFR0ayBDb21ib2JveCwgVHRrIEZyYW1lLAorVHRrIExhYmVsIGFuZCBUdGsgQnV0dG9uLgorIiIiCitpbXBvcnQgVGtpbnRlcgoraW1wb3J0IHR0aworCitjbGFzcyBBcHAodHRrLkZyYW1lKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHR0ay5GcmFtZS5fX2luaXRfXyhzZWxmLCBib3JkZXJ3aWR0aD0zKQorCisgICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQorCisgICAgICAgICMgWFhYIElkZWFsbHkgSSB3b3VsZG4ndCB3YW50IHRvIGNyZWF0ZSBhIFRraW50ZXIuSW50VmFyIHRvIG1ha2UKKyAgICAgICAgIyAgICAgaXQgd29ya3Mgd2l0aCBDaGVja2J1dHRvbiB2YXJpYWJsZSBvcHRpb24uCisgICAgICAgIHNlbGYudGhlbWVfYXV0b2NoYW5nZSA9IFRraW50ZXIuSW50VmFyKHNlbGYsIDApCisgICAgICAgIHNlbGYuX3NldHVwX3dpZGdldHMoKQorCisgICAgZGVmIF9jaGFuZ2VfdGhlbWUoc2VsZik6CisgICAgICAgIHNlbGYuc3R5bGUudGhlbWVfdXNlKHNlbGYudGhlbWVzX2NvbWJvLmdldCgpKQorCisgICAgZGVmIF90aGVtZV9zZWxfY2hhbmdlZChzZWxmLCB3aWRnZXQpOgorICAgICAgICBpZiBzZWxmLnRoZW1lX2F1dG9jaGFuZ2UuZ2V0KCk6CisgICAgICAgICAgICBzZWxmLl9jaGFuZ2VfdGhlbWUoKQorCisgICAgZGVmIF9zZXR1cF93aWRnZXRzKHNlbGYpOgorICAgICAgICB0aGVtZXNfbGJsID0gdHRrLkxhYmVsKHNlbGYsIHRleHQ9IlRoZW1lcyIpCisKKyAgICAgICAgdGhlbWVzID0gc2VsZi5zdHlsZS50aGVtZV9uYW1lcygpCisgICAgICAgIHNlbGYudGhlbWVzX2NvbWJvID0gdHRrLkNvbWJvYm94KHNlbGYsIHZhbHVlcz10aGVtZXMsIHN0YXRlPSJyZWFkb25seSIpCisgICAgICAgIHNlbGYudGhlbWVzX2NvbWJvLnNldCh0aGVtZXNbMF0pCisgICAgICAgIHNlbGYudGhlbWVzX2NvbWJvLmJpbmQoIjw8Q29tYm9ib3hTZWxlY3RlZD4+Iiwgc2VsZi5fdGhlbWVfc2VsX2NoYW5nZWQpCisKKyAgICAgICAgY2hhbmdlX2J0biA9IHR0ay5CdXR0b24oc2VsZiwgdGV4dD0nQ2hhbmdlIFRoZW1lJywKKyAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5fY2hhbmdlX3RoZW1lKQorCisgICAgICAgIHRoZW1lX2NoYW5nZV9jaGVja2J0biA9IHR0ay5DaGVja2J1dHRvbihzZWxmLAorICAgICAgICAgICAgdGV4dD0iQ2hhbmdlIHRoZW1lcyB3aGVuIGNvbWJvYm94IGl0ZW0gaXMgYWN0aXZhdGVkIiwKKyAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYudGhlbWVfYXV0b2NoYW5nZSkKKworICAgICAgICB0aGVtZXNfbGJsLmdyaWQoaXBhZHg9Niwgc3RpY2t5PSJ3IikKKyAgICAgICAgc2VsZi50aGVtZXNfY29tYm8uZ3JpZChyb3c9MCwgY29sdW1uPTEsIHBhZHg9Niwgc3RpY2t5PSJldyIpCisgICAgICAgIGNoYW5nZV9idG4uZ3JpZChyb3c9MCwgY29sdW1uPTIsIHBhZHg9Niwgc3RpY2t5PSJlIikKKyAgICAgICAgdGhlbWVfY2hhbmdlX2NoZWNrYnRuLmdyaWQocm93PTEsIGNvbHVtbnNwYW49Mywgc3RpY2t5PSJ3IiwgcGFkeT02KQorCisgICAgICAgIHRvcCA9IHNlbGYud2luZm9fdG9wbGV2ZWwoKQorICAgICAgICB0b3Aucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICB0b3AuY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmNvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MSkKKyAgICAgICAgc2VsZi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PSJuc2V3IiwgY29sdW1uc3Bhbj0zLCByb3dzcGFuPTIpCisKKworZGVmIG1haW4oKToKKyAgICBhcHAgPSBBcHAoKQorICAgIGFwcC5tYXN0ZXIudGl0bGUoIlRoZW1lIFNlbGVjdG9yIikKKyAgICBhcHAubWFpbmxvb3AoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay90cmVldmlld19tdWx0aWNvbHVtbi5weSBiL0RlbW8vdGtpbnRlci90dGsvdHJlZXZpZXdfbXVsdGljb2x1bW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlZGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdGtpbnRlci90dGsvdHJlZXZpZXdfbXVsdGljb2x1bW4ucHkKQEAgLTAsMCArMSwxMDcgQEAKKyIiIkRlbW8gYmFzZWQgb24gdGhlIGRlbW8gbWNsaXN0IGluY2x1ZGVkIHdpdGggdGsgc291cmNlIGRpc3RyaWJ1dGlvbi4iIiIKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdGtGb250CitpbXBvcnQgdHRrCisKK3RyZWVfY29sdW1ucyA9ICgiY291bnRyeSIsICJjYXBpdGFsIiwgImN1cnJlbmN5IikKK3RyZWVfZGF0YSA9IFsKKyAgICAoIkFyZ2VudGluYSIsICAgICAgIkJ1ZW5vcyBBaXJlcyIsICAgICAiQVJTIiksCisgICAgKCJBdXN0cmFsaWEiLCAgICAgICJDYW5iZXJyYSIsICAgICAgICAgIkFVRCIpLAorICAgICgiQnJhemlsIiwgICAgICAgICAiQnJhemlsaWEiLCAgICAgICAgICJCUkwiKSwKKyAgICAoIkNhbmFkYSIsICAgICAgICAgIk90dGF3YSIsICAgICAgICAgICAiQ0FEIiksCisgICAgKCJDaGluYSIsICAgICAgICAgICJCZWlqaW5nIiwgICAgICAgICAgIkNOWSIpLAorICAgICgiRnJhbmNlIiwgICAgICAgICAiUGFyaXMiLCAgICAgICAgICAgICJFVVIiKSwKKyAgICAoIkdlcm1hbnkiLCAgICAgICAgIkJlcmxpbiIsICAgICAgICAgICAiRVVSIiksCisgICAgKCJJbmRpYSIsICAgICAgICAgICJOZXcgRGVsaGkiLCAgICAgICAgIklOUiIpLAorICAgICgiSXRhbHkiLCAgICAgICAgICAiUm9tZSIsICAgICAgICAgICAgICJFVVIiKSwKKyAgICAoIkphcGFuIiwgICAgICAgICAgIlRva3lvIiwgICAgICAgICAgICAiSlBZIiksCisgICAgKCJNZXhpY28iLCAgICAgICAgICJNZXhpY28gQ2l0eSIsICAgICAgIk1YTiIpLAorICAgICgiUnVzc2lhIiwgICAgICAgICAiTW9zY293IiwgICAgICAgICAgICJSVUIiKSwKKyAgICAoIlNvdXRoIEFmcmljYSIsICAgIlByZXRvcmlhIiwgICAgICAgICAiWkFSIiksCisgICAgKCJVbml0ZWQgS2luZ2RvbSIsICJMb25kb24iLCAgICAgICAgICAgIkdCUCIpLAorICAgICgiVW5pdGVkIFN0YXRlcyIsICAiV2FzaGluZ3RvbiwgRC5DLiIsICJVU0QiKQorICAgIF0KKworZGVmIHNvcnRieSh0cmVlLCBjb2wsIGRlc2NlbmRpbmcpOgorICAgICIiIlNvcnQgdHJlZSBjb250ZW50cyB3aGVuIGEgY29sdW1uIGlzIGNsaWNrZWQgb24uIiIiCisgICAgIyBncmFiIHZhbHVlcyB0byBzb3J0CisgICAgZGF0YSA9IFsodHJlZS5zZXQoY2hpbGQsIGNvbCksIGNoaWxkKSBmb3IgY2hpbGQgaW4gdHJlZS5nZXRfY2hpbGRyZW4oJycpXQorCisgICAgIyByZW9yZGVyIGRhdGEKKyAgICBkYXRhLnNvcnQocmV2ZXJzZT1kZXNjZW5kaW5nKQorICAgIGZvciBpbmR4LCBpdGVtIGluIGVudW1lcmF0ZShkYXRhKToKKyAgICAgICAgdHJlZS5tb3ZlKGl0ZW1bMV0sICcnLCBpbmR4KQorCisgICAgIyBzd2l0Y2ggdGhlIGhlYWRpbmcgc28gdGhhdCBpdCB3aWxsIHNvcnQgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbgorICAgIHRyZWUuaGVhZGluZyhjb2wsCisgICAgICAgIGNvbW1hbmQ9bGFtYmRhIGNvbD1jb2w6IHNvcnRieSh0cmVlLCBjb2wsIGludChub3QgZGVzY2VuZGluZykpKQorCitjbGFzcyBBcHAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudHJlZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc2V0dXBfd2lkZ2V0cygpCisgICAgICAgIHNlbGYuX2J1aWxkX3RyZWUoKQorCisgICAgZGVmIF9zZXR1cF93aWRnZXRzKHNlbGYpOgorICAgICAgICBtc2cgPSB0dGsuTGFiZWwod3JhcGxlbmd0aD0iNGkiLCBqdXN0aWZ5PSJsZWZ0IiwgYW5jaG9yPSJuIiwKKyAgICAgICAgICAgIHBhZGRpbmc9KDEwLCAyLCAxMCwgNiksCisgICAgICAgICAgICB0ZXh0PSgiVHRrIGlzIHRoZSBuZXcgVGsgdGhlbWVkIHdpZGdldCBzZXQuIE9uZSBvZiB0aGUgd2lkZ2V0cyBpdCAiCisgICAgICAgICAgICAgICAgICAiaW5jbHVkZXMgaXMgYSB0cmVlIHdpZGdldCwgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgdG8gIgorICAgICAgICAgICAgICAgICAgImRpc3BsYXkgbXVsdGlwbGUgY29sdW1ucyBvZiBpbmZvcm1hdGlvbmFsIGRhdGEgd2l0aG91dCAiCisgICAgICAgICAgICAgICAgICAiZGlzcGxheWluZyB0aGUgdHJlZSBpdHNlbGYuIFRoaXMgaXMgYSBzaW1wbGUgd2F5IHRvIGJ1aWxkICIKKyAgICAgICAgICAgICAgICAgICJhIGxpc3Rib3ggdGhhdCBoYXMgbXVsdGlwbGUgY29sdW1ucy4gQ2xpY2tpbmcgb24gdGhlICIKKyAgICAgICAgICAgICAgICAgICJoZWFkaW5nIGZvciBhIGNvbHVtbiB3aWxsIHNvcnQgdGhlIGRhdGEgYnkgdGhhdCBjb2x1bW4uICIKKyAgICAgICAgICAgICAgICAgICJZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1ucyBieSBkcmFnZ2luZyAiCisgICAgICAgICAgICAgICAgICAidGhlIGJvdW5kYXJ5IGJldHdlZW4gdGhlbS4iKSkKKyAgICAgICAgbXNnLnBhY2soZmlsbD0neCcpCisKKyAgICAgICAgY29udGFpbmVyID0gdHRrLkZyYW1lKCkKKyAgICAgICAgY29udGFpbmVyLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD1UcnVlKQorCisgICAgICAgICMgWFhYIFNvdW5kcyBsaWtlIGEgZ29vZCBzdXBwb3J0IGNsYXNzIHdvdWxkIGJlIG9uZSBmb3IgY29uc3RydWN0aW5nCisgICAgICAgICMgICAgIGEgdHJlZXZpZXcgd2l0aCBzY3JvbGxiYXJzLgorICAgICAgICBzZWxmLnRyZWUgPSB0dGsuVHJlZXZpZXcoY29sdW1ucz10cmVlX2NvbHVtbnMsIHNob3c9ImhlYWRpbmdzIikKKyAgICAgICAgdnNiID0gdHRrLlNjcm9sbGJhcihvcmllbnQ9InZlcnRpY2FsIiwgY29tbWFuZD1zZWxmLnRyZWUueXZpZXcpCisgICAgICAgIGhzYiA9IHR0ay5TY3JvbGxiYXIob3JpZW50PSJob3Jpem9udGFsIiwgY29tbWFuZD1zZWxmLnRyZWUueHZpZXcpCisgICAgICAgIHNlbGYudHJlZS5jb25maWd1cmUoeXNjcm9sbGNvbW1hbmQ9dnNiLnNldCwgeHNjcm9sbGNvbW1hbmQ9aHNiLnNldCkKKyAgICAgICAgc2VsZi50cmVlLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J25zZXcnLCBpbl89Y29udGFpbmVyKQorICAgICAgICB2c2IuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0nbnMnLCBpbl89Y29udGFpbmVyKQorICAgICAgICBoc2IuZ3JpZChjb2x1bW49MCwgcm93PTEsIHN0aWNreT0nZXcnLCBpbl89Y29udGFpbmVyKQorCisgICAgICAgIGNvbnRhaW5lci5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgY29udGFpbmVyLmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorCisgICAgZGVmIF9idWlsZF90cmVlKHNlbGYpOgorICAgICAgICBmb3IgY29sIGluIHRyZWVfY29sdW1uczoKKyAgICAgICAgICAgIHNlbGYudHJlZS5oZWFkaW5nKGNvbCwgdGV4dD1jb2wudGl0bGUoKSwKKyAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYSBjPWNvbDogc29ydGJ5KHNlbGYudHJlZSwgYywgMCkpCisgICAgICAgICAgICAjIFhYWCB0a0ZvbnQuRm9udCgpLm1lYXN1cmUgZXhwZWN0ZWQgYXJncyBhcmUgaW5jb3JyZWN0IGFjY29yZGluZworICAgICAgICAgICAgIyAgICAgdG8gdGhlIFRrIGRvY3MKKyAgICAgICAgICAgIHNlbGYudHJlZS5jb2x1bW4oY29sLCB3aWR0aD10a0ZvbnQuRm9udCgpLm1lYXN1cmUoY29sLnRpdGxlKCkpKQorCisgICAgICAgIGZvciBpdGVtIGluIHRyZWVfZGF0YToKKyAgICAgICAgICAgIHNlbGYudHJlZS5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9aXRlbSkKKworICAgICAgICAgICAgIyBhZGp1c3QgY29sdW1ucyBsZW5naHRzIGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgZm9yIGluZHgsIHZhbCBpbiBlbnVtZXJhdGUoaXRlbSk6CisgICAgICAgICAgICAgICAgaWxlbiA9IHRrRm9udC5Gb250KCkubWVhc3VyZSh2YWwpCisgICAgICAgICAgICAgICAgaWYgc2VsZi50cmVlLmNvbHVtbih0cmVlX2NvbHVtbnNbaW5keF0sIHdpZHRoPU5vbmUpIDwgaWxlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50cmVlLmNvbHVtbih0cmVlX2NvbHVtbnNbaW5keF0sIHdpZHRoPWlsZW4pCisKK2RlZiBtYWluKCk6CisgICAgcm9vdCA9IFRraW50ZXIuVGsoKQorICAgIHJvb3Qud21fdGl0bGUoIk11bHRpLUNvbHVtbiBMaXN0IikKKyAgICByb290LndtX2ljb25uYW1lKCJtY2xpc3QiKQorCisgICAgaW1wb3J0IHBsYXN0aWtfdGhlbWUKKyAgICB0cnk6CisgICAgICAgIHBsYXN0aWtfdGhlbWUuaW5zdGFsbCgnfi90aWxlLXRoZW1lcy9wbGFzdGlrL3BsYXN0aWsnKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCJwbGFzdGlrIHRoZW1lIGJlaW5nIHVzZWQgd2l0aG91dCBpbWFnZXMiKQorCisgICAgYXBwID0gQXBwKCkKKyAgICByb290Lm1haW5sb29wKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvdHRrY2FsZW5kYXIucHkgYi9EZW1vL3RraW50ZXIvdHRrL3R0a2NhbGVuZGFyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTQ1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9EZW1vL3RraW50ZXIvdHRrL3R0a2NhbGVuZGFyLnB5CkBAIC0wLDAgKzEsMjMxIEBACisiIiIKK1NpbXBsZSBjYWxlbmRhciB1c2luZyB0dGsgVHJlZXZpZXcgdG9nZXRoZXIgd2l0aCBjYWxlbmRhciBhbmQgZGF0ZXRpbWUKK2NsYXNzZXMuCisiIiIKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0a0ZvbnQKK2ltcG9ydCB0dGsKKworZGVmIGdldF9jYWxlbmRhcihsb2NhbGUsIGZ3ZGF5KToKKyAgICAjIGluc3RhbnRpYXRlIHByb3BlciBjYWxlbmRhciBjbGFzcworICAgIGlmIGxvY2FsZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gY2FsZW5kYXIuVGV4dENhbGVuZGFyKGZ3ZGF5KQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXIoZndkYXksIGxvY2FsZSkKKworY2xhc3MgQ2FsZW5kYXIodHRrLkZyYW1lKToKKyAgICAjIFhYWCBUb0RvOiBjZ2V0IGFuZCBjb25maWd1cmUKKworICAgIGRhdGV0aW1lID0gY2FsZW5kYXIuZGF0ZXRpbWUuZGF0ZXRpbWUKKyAgICB0aW1lZGVsdGEgPSBjYWxlbmRhci5kYXRldGltZS50aW1lZGVsdGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIgorICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBsb2NhbGUsIGZpcnN0d2Vla2RheSwgeWVhciwgbW9udGgsIHNlbGVjdGJhY2tncm91bmQsCisgICAgICAgICAgICBzZWxlY3Rmb3JlZ3JvdW5kCisgICAgICAgICIiIgorICAgICAgICAjIHJlbW92ZSBjdXN0b20gb3B0aW9ucyBmcm9tIGt3IGJlZm9yZSBpbml0aWFsaXphdGluZyB0dGsuRnJhbWUKKyAgICAgICAgZndkYXkgPSBrdy5wb3AoJ2ZpcnN0d2Vla2RheScsIGNhbGVuZGFyLk1PTkRBWSkKKyAgICAgICAgeWVhciA9IGt3LnBvcCgneWVhcicsIHNlbGYuZGF0ZXRpbWUubm93KCkueWVhcikKKyAgICAgICAgbW9udGggPSBrdy5wb3AoJ21vbnRoJywgc2VsZi5kYXRldGltZS5ub3coKS5tb250aCkKKyAgICAgICAgbG9jYWxlID0ga3cucG9wKCdsb2NhbGUnLCBOb25lKQorICAgICAgICBzZWxfYmcgPSBrdy5wb3AoJ3NlbGVjdGJhY2tncm91bmQnLCAnI2VjZmZjNCcpCisgICAgICAgIHNlbF9mZyA9IGt3LnBvcCgnc2VsZWN0Zm9yZWdyb3VuZCcsICcjMDU2NDBlJykKKworICAgICAgICBzZWxmLl9kYXRlID0gc2VsZi5kYXRldGltZSh5ZWFyLCBtb250aCwgMSkKKyAgICAgICAgc2VsZi5fc2VsZWN0aW9uID0gTm9uZSAjIG5vIGRhdGUgc2VsZWN0ZWQKKworICAgICAgICB0dGsuRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyLCAqKmt3KQorCisgICAgICAgIHNlbGYuX2NhbCA9IGdldF9jYWxlbmRhcihsb2NhbGUsIGZ3ZGF5KQorCisgICAgICAgIHNlbGYuX19zZXR1cF9zdHlsZXMoKSAgICAgICAjIGNyZWF0ZXMgY3VzdG9tIHN0eWxlcworICAgICAgICBzZWxmLl9fcGxhY2Vfd2lkZ2V0cygpICAgICAgIyBwYWNrL2dyaWQgdXNlZCB3aWRnZXRzCisgICAgICAgIHNlbGYuX19jb25maWdfY2FsZW5kYXIoKSAgICAjIGFkanVzdCBjYWxlbmRhciBjb2x1bW5zIGFuZCBzZXR1cCB0YWdzCisgICAgICAgICMgY29uZmlndXJlIGEgY2FudmFzLCBhbmQgcHJvcGVyIGJpbmRpbmdzLCBmb3Igc2VsZWN0aW5nIGRhdGVzCisgICAgICAgIHNlbGYuX19zZXR1cF9zZWxlY3Rpb24oc2VsX2JnLCBzZWxfZmcpCisKKyAgICAgICAgIyBzdG9yZSBpdGVtcyBpZHMsIHVzZWQgZm9yIGluc2VydGlvbiBsYXRlcgorICAgICAgICBzZWxmLl9pdGVtcyA9IFtzZWxmLl9jYWxlbmRhci5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9JycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoNildCisgICAgICAgICMgaW5zZXJ0IGRhdGVzIGluIHRoZSBjdXJyZW50bHkgZW1wdHkgY2FsZW5kYXIKKyAgICAgICAgc2VsZi5fYnVpbGRfY2FsZW5kYXIoKQorCisgICAgICAgICMgc2V0IHRoZSBtaW5pbWFsIHNpemUgZm9yIHRoZSB3aWRnZXQKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIuYmluZCgnPE1hcD4nLCBzZWxmLl9fbWluc2l6ZSkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpdGVtLCB2YWx1ZSk6CisgICAgICAgIGlmIGl0ZW0gaW4gKCd5ZWFyJywgJ21vbnRoJyk6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYXR0cmlidXRlICclcycgaXMgbm90IHdyaXRlYWJsZSIgJSBpdGVtKQorICAgICAgICBlbGlmIGl0ZW0gPT0gJ3NlbGVjdGJhY2tncm91bmQnOgorICAgICAgICAgICAgc2VsZi5fY2FudmFzWydiYWNrZ3JvdW5kJ10gPSB2YWx1ZQorICAgICAgICBlbGlmIGl0ZW0gPT0gJ3NlbGVjdGZvcmVncm91bmQnOgorICAgICAgICAgICAgc2VsZi5fY2FudmFzLml0ZW1jb25maWd1cmUoc2VsZi5fY2FudmFzLnRleHQsIGl0ZW09dmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dGsuRnJhbWUuX19zZXRpdGVtX18oc2VsZiwgaXRlbSwgdmFsdWUpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CisgICAgICAgIGlmIGl0ZW0gaW4gKCd5ZWFyJywgJ21vbnRoJyk6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9kYXRlLCBpdGVtKQorICAgICAgICBlbGlmIGl0ZW0gPT0gJ3NlbGVjdGJhY2tncm91bmQnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbnZhc1snYmFja2dyb3VuZCddCisgICAgICAgIGVsaWYgaXRlbSA9PSAnc2VsZWN0Zm9yZWdyb3VuZCc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FudmFzLml0ZW1jZ2V0KHNlbGYuX2NhbnZhcy50ZXh0LCAnZmlsbCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByID0gdHRrLnRjbG9ianNfdG9fcHkoe2l0ZW06IHR0ay5GcmFtZS5fX2dldGl0ZW1fXyhzZWxmLCBpdGVtKX0pCisgICAgICAgICAgICByZXR1cm4gcltpdGVtXQorCisgICAgZGVmIF9fc2V0dXBfc3R5bGVzKHNlbGYpOgorICAgICAgICAjIGN1c3RvbSB0dGsgc3R5bGVzCisgICAgICAgIHN0eWxlID0gdHRrLlN0eWxlKHNlbGYubWFzdGVyKQorICAgICAgICBhcnJvd19sYXlvdXQgPSBsYW1iZGEgZGlyOiAoCisgICAgICAgICAgICBbKCdCdXR0b24uZm9jdXMnLCB7J2NoaWxkcmVuJzogWygnQnV0dG9uLiVzYXJyb3cnICUgZGlyLCBOb25lKV19KV0KKyAgICAgICAgKQorICAgICAgICBzdHlsZS5sYXlvdXQoJ0wuVEJ1dHRvbicsIGFycm93X2xheW91dCgnbGVmdCcpKQorICAgICAgICBzdHlsZS5sYXlvdXQoJ1IuVEJ1dHRvbicsIGFycm93X2xheW91dCgncmlnaHQnKSkKKworICAgIGRlZiBfX3BsYWNlX3dpZGdldHMoc2VsZik6CisgICAgICAgICMgaGVhZGVyIGZyYW1lIGFuZCBpdHMgd2lkZ2V0cworICAgICAgICBoZnJhbWUgPSB0dGsuRnJhbWUoc2VsZikKKyAgICAgICAgbGJ0biA9IHR0ay5CdXR0b24oaGZyYW1lLCBzdHlsZT0nTC5UQnV0dG9uJywgY29tbWFuZD1zZWxmLl9wcmV2X21vbnRoKQorICAgICAgICByYnRuID0gdHRrLkJ1dHRvbihoZnJhbWUsIHN0eWxlPSdSLlRCdXR0b24nLCBjb21tYW5kPXNlbGYuX25leHRfbW9udGgpCisgICAgICAgIHNlbGYuX2hlYWRlciA9IHR0ay5MYWJlbChoZnJhbWUsIHdpZHRoPTE1LCBhbmNob3I9J2NlbnRlcicpCisgICAgICAgICMgdGhlIGNhbGVuZGFyCisgICAgICAgIHNlbGYuX2NhbGVuZGFyID0gdHRrLlRyZWV2aWV3KHNob3c9JycsIHNlbGVjdG1vZGU9J25vbmUnLCBoZWlnaHQ9NykKKworICAgICAgICAjIHBhY2sgdGhlIHdpZGdldHMKKyAgICAgICAgaGZyYW1lLnBhY2soaW5fPXNlbGYsIHNpZGU9J3RvcCcsIHBhZHk9NCwgYW5jaG9yPSdjZW50ZXInKQorICAgICAgICBsYnRuLmdyaWQoaW5fPWhmcmFtZSkKKyAgICAgICAgc2VsZi5faGVhZGVyLmdyaWQoaW5fPWhmcmFtZSwgY29sdW1uPTEsIHJvdz0wLCBwYWR4PTEyKQorICAgICAgICByYnRuLmdyaWQoaW5fPWhmcmFtZSwgY29sdW1uPTIsIHJvdz0wKQorICAgICAgICBzZWxmLl9jYWxlbmRhci5wYWNrKGluXz1zZWxmLCBleHBhbmQ9MSwgZmlsbD0nYm90aCcsIHNpZGU9J2JvdHRvbScpCisKKyAgICBkZWYgX19jb25maWdfY2FsZW5kYXIoc2VsZik6CisgICAgICAgIGNvbHMgPSBzZWxmLl9jYWwuZm9ybWF0d2Vla2hlYWRlcigzKS5zcGxpdCgpCisgICAgICAgIHNlbGYuX2NhbGVuZGFyWydjb2x1bW5zJ10gPSBjb2xzCisgICAgICAgIHNlbGYuX2NhbGVuZGFyLnRhZ19jb25maWd1cmUoJ2hlYWRlcicsIGJhY2tncm91bmQ9J2dyZXk5MCcpCisgICAgICAgIHNlbGYuX2NhbGVuZGFyLmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1jb2xzLCB0YWc9J2hlYWRlcicpCisgICAgICAgICMgYWRqdXN0IGl0cyBjb2x1bW5zIHdpZHRoCisgICAgICAgIGZvbnQgPSB0a0ZvbnQuRm9udCgpCisgICAgICAgIG1heHdpZHRoID0gbWF4KGZvbnQubWVhc3VyZShjb2wpIGZvciBjb2wgaW4gY29scykKKyAgICAgICAgZm9yIGNvbCBpbiBjb2xzOgorICAgICAgICAgICAgc2VsZi5fY2FsZW5kYXIuY29sdW1uKGNvbCwgd2lkdGg9bWF4d2lkdGgsIG1pbndpZHRoPW1heHdpZHRoLAorICAgICAgICAgICAgICAgIGFuY2hvcj0nZScpCisKKyAgICBkZWYgX19zZXR1cF9zZWxlY3Rpb24oc2VsZiwgc2VsX2JnLCBzZWxfZmcpOgorICAgICAgICBzZWxmLl9mb250ID0gdGtGb250LkZvbnQoKQorICAgICAgICBzZWxmLl9jYW52YXMgPSBjYW52YXMgPSBUa2ludGVyLkNhbnZhcyhzZWxmLl9jYWxlbmRhciwKKyAgICAgICAgICAgIGJhY2tncm91bmQ9c2VsX2JnLCBib3JkZXJ3aWR0aD0wLCBoaWdobGlnaHR0aGlja25lc3M9MCkKKyAgICAgICAgY2FudmFzLnRleHQgPSBjYW52YXMuY3JlYXRlX3RleHQoMCwgMCwgZmlsbD1zZWxfZmcsIGFuY2hvcj0ndycpCisKKyAgICAgICAgY2FudmFzLmJpbmQoJzxCdXR0b25QcmVzcy0xPicsIGxhbWJkYSBldnQ6IGNhbnZhcy5wbGFjZV9mb3JnZXQoKSkKKyAgICAgICAgc2VsZi5fY2FsZW5kYXIuYmluZCgnPENvbmZpZ3VyZT4nLCBsYW1iZGEgZXZ0OiBjYW52YXMucGxhY2VfZm9yZ2V0KCkpCisgICAgICAgIHNlbGYuX2NhbGVuZGFyLmJpbmQoJzxCdXR0b25QcmVzcy0xPicsIHNlbGYuX3ByZXNzZWQpCisKKyAgICBkZWYgX19taW5zaXplKHNlbGYsIGV2dCk6CisgICAgICAgIHdpZHRoLCBoZWlnaHQgPSBzZWxmLl9jYWxlbmRhci5tYXN0ZXIuZ2VvbWV0cnkoKS5zcGxpdCgneCcpCisgICAgICAgIGhlaWdodCA9IGhlaWdodFs6aGVpZ2h0LmluZGV4KCcrJyldCisgICAgICAgIHNlbGYuX2NhbGVuZGFyLm1hc3Rlci5taW5zaXplKHdpZHRoLCBoZWlnaHQpCisKKyAgICBkZWYgX2J1aWxkX2NhbGVuZGFyKHNlbGYpOgorICAgICAgICB5ZWFyLCBtb250aCA9IHNlbGYuX2RhdGUueWVhciwgc2VsZi5fZGF0ZS5tb250aAorCisgICAgICAgICMgdXBkYXRlIGhlYWRlciB0ZXh0IChNb250aCwgWUVBUikKKyAgICAgICAgaGVhZGVyID0gc2VsZi5fY2FsLmZvcm1hdG1vbnRobmFtZSh5ZWFyLCBtb250aCwgMCkKKyAgICAgICAgc2VsZi5faGVhZGVyWyd0ZXh0J10gPSBoZWFkZXIudGl0bGUoKQorCisgICAgICAgICMgdXBkYXRlIGNhbGVuZGFyIHNob3duIGRhdGVzCisgICAgICAgIGNhbCA9IHNlbGYuX2NhbC5tb250aGRheXNjYWxlbmRhcih5ZWFyLCBtb250aCkKKyAgICAgICAgZm9yIGluZHgsIGl0ZW0gaW4gZW51bWVyYXRlKHNlbGYuX2l0ZW1zKToKKyAgICAgICAgICAgIHdlZWsgPSBjYWxbaW5keF0gaWYgaW5keCA8IGxlbihjYWwpIGVsc2UgW10KKyAgICAgICAgICAgIGZtdF93ZWVrID0gWygnJTAyZCcgJSBkYXkpIGlmIGRheSBlbHNlICcnIGZvciBkYXkgaW4gd2Vla10KKyAgICAgICAgICAgIHNlbGYuX2NhbGVuZGFyLml0ZW0oaXRlbSwgdmFsdWVzPWZtdF93ZWVrKQorCisgICAgZGVmIF9zaG93X3NlbGVjdGlvbihzZWxmLCB0ZXh0LCBiYm94KToKKyAgICAgICAgIiIiQ29uZmlndXJlIGNhbnZhcyBmb3IgYSBuZXcgc2VsZWN0aW9uLiIiIgorICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0ID0gYmJveAorCisgICAgICAgIHRleHR3ID0gc2VsZi5fZm9udC5tZWFzdXJlKHRleHQpCisKKyAgICAgICAgY2FudmFzID0gc2VsZi5fY2FudmFzCisgICAgICAgIGNhbnZhcy5jb25maWd1cmUod2lkdGg9d2lkdGgsIGhlaWdodD1oZWlnaHQpCisgICAgICAgIGNhbnZhcy5jb29yZHMoY2FudmFzLnRleHQsIHdpZHRoIC0gdGV4dHcsIGhlaWdodCAvIDIgLSAxKQorICAgICAgICBjYW52YXMuaXRlbWNvbmZpZ3VyZShjYW52YXMudGV4dCwgdGV4dD10ZXh0KQorICAgICAgICBjYW52YXMucGxhY2UoaW5fPXNlbGYuX2NhbGVuZGFyLCB4PXgsIHk9eSkKKworICAgICMgQ2FsbGJhY2tzCisKKyAgICBkZWYgX3ByZXNzZWQoc2VsZiwgZXZ0KToKKyAgICAgICAgIiIiQ2xpY2tlZCBzb21ld2hlcmUgaW4gdGhlIGNhbGVuZGFyLiIiIgorICAgICAgICB4LCB5LCB3aWRnZXQgPSBldnQueCwgZXZ0LnksIGV2dC53aWRnZXQKKyAgICAgICAgaXRlbSA9IHdpZGdldC5pZGVudGlmeV9yb3coeSkKKyAgICAgICAgY29sdW1uID0gd2lkZ2V0LmlkZW50aWZ5X2NvbHVtbih4KQorCisgICAgICAgIGlmIG5vdCBjb2x1bW4gb3Igbm90IGl0ZW0gaW4gc2VsZi5faXRlbXM6CisgICAgICAgICAgICAjIGNsaWNrZWQgaW4gdGhlIHdlZWtkYXlzIHJvdyBvciBqdXN0IG91dHNpZGUgdGhlIGNvbHVtbnMKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGl0ZW1fdmFsdWVzID0gd2lkZ2V0Lml0ZW0oaXRlbSlbJ3ZhbHVlcyddCisgICAgICAgIGlmIG5vdCBsZW4oaXRlbV92YWx1ZXMpOiAjIHJvdyBpcyBlbXB0eSBmb3IgdGhpcyBtb250aAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGV4dCA9IGl0ZW1fdmFsdWVzW2ludChjb2x1bW5bMV0pIC0gMV0KKyAgICAgICAgaWYgbm90IHRleHQ6ICMgZGF0ZSBpcyBlbXB0eQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYmJveCA9IHdpZGdldC5iYm94KGl0ZW0sIGNvbHVtbikKKyAgICAgICAgaWYgbm90IGJib3g6ICMgY2FsZW5kYXIgbm90IHZpc2libGUgeWV0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHVwZGF0ZSBhbmQgdGhlbiBzaG93IHNlbGVjdGlvbgorICAgICAgICB0ZXh0ID0gJyUwMmQnICUgdGV4dAorICAgICAgICBzZWxmLl9zZWxlY3Rpb24gPSAodGV4dCwgaXRlbSwgY29sdW1uKQorICAgICAgICBzZWxmLl9zaG93X3NlbGVjdGlvbih0ZXh0LCBiYm94KQorCisgICAgZGVmIF9wcmV2X21vbnRoKHNlbGYpOgorICAgICAgICAiIiJVcGRhdGVkIGNhbGVuZGFyIHRvIHNob3cgdGhlIHByZXZpb3VzIG1vbnRoLiIiIgorICAgICAgICBzZWxmLl9jYW52YXMucGxhY2VfZm9yZ2V0KCkKKworICAgICAgICBzZWxmLl9kYXRlID0gc2VsZi5fZGF0ZSAtIHNlbGYudGltZWRlbHRhKGRheXM9MSkKKyAgICAgICAgc2VsZi5fZGF0ZSA9IHNlbGYuZGF0ZXRpbWUoc2VsZi5fZGF0ZS55ZWFyLCBzZWxmLl9kYXRlLm1vbnRoLCAxKQorICAgICAgICBzZWxmLl9idWlsZF9jYWxlbmRhcigpICMgcmVjb25zdHVjdCBjYWxlbmRhcgorCisgICAgZGVmIF9uZXh0X21vbnRoKHNlbGYpOgorICAgICAgICAiIiJVcGRhdGUgY2FsZW5kYXIgdG8gc2hvdyB0aGUgbmV4dCBtb250aC4iIiIKKyAgICAgICAgc2VsZi5fY2FudmFzLnBsYWNlX2ZvcmdldCgpCisKKyAgICAgICAgeWVhciwgbW9udGggPSBzZWxmLl9kYXRlLnllYXIsIHNlbGYuX2RhdGUubW9udGgKKyAgICAgICAgc2VsZi5fZGF0ZSA9IHNlbGYuX2RhdGUgKyBzZWxmLnRpbWVkZWx0YSgKKyAgICAgICAgICAgIGRheXM9Y2FsZW5kYXIubW9udGhyYW5nZSh5ZWFyLCBtb250aClbMV0gKyAxKQorICAgICAgICBzZWxmLl9kYXRlID0gc2VsZi5kYXRldGltZShzZWxmLl9kYXRlLnllYXIsIHNlbGYuX2RhdGUubW9udGgsIDEpCisgICAgICAgIHNlbGYuX2J1aWxkX2NhbGVuZGFyKCkgIyByZWNvbnN0cnVjdCBjYWxlbmRhcgorCisgICAgIyBQcm9wZXJ0aWVzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBkYXRldGltZSByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZGF0ZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3NlbGVjdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgeWVhciwgbW9udGggPSBzZWxmLl9kYXRlLnllYXIsIHNlbGYuX2RhdGUubW9udGgKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0ZXRpbWUoeWVhciwgbW9udGgsIGludChzZWxmLl9zZWxlY3Rpb25bMF0pKQorCitkZWYgdGVzdCgpOgorICAgIGltcG9ydCBzeXMKKyAgICByb290ID0gVGtpbnRlci5UaygpCisgICAgcm9vdC50aXRsZSgnVHRrIENhbGVuZGFyJykKKyAgICB0dGtjYWwgPSBDYWxlbmRhcihmaXJzdHdlZWtkYXk9Y2FsZW5kYXIuU1VOREFZKQorICAgIHR0a2NhbC5wYWNrKGV4cGFuZD0xLCBmaWxsPSdib3RoJykKKworICAgIGlmICd3aW4nIG5vdCBpbiBzeXMucGxhdGZvcm06CisgICAgICAgIHN0eWxlID0gdHRrLlN0eWxlKCkKKyAgICAgICAgc3R5bGUudGhlbWVfdXNlKCdjbGFtJykKKworICAgIHJvb3QubWFpbmxvb3AoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay93aWRnZXRfc3RhdGUucHkgYi9EZW1vL3RraW50ZXIvdHRrL3dpZGdldF9zdGF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTJjMjhiCi0tLSAvZGV2L251bGwKKysrIGIvRGVtby90a2ludGVyL3R0ay93aWRnZXRfc3RhdGUucHkKQEAgLTAsMCArMSw4MyBAQAorIiIiU2FtcGxlIGRlbW8gc2hvd2luZyB3aWRnZXQgc3RhdGVzIGFuZCBzb21lIGZvbnQgc3R5bGluZy4iIiIKK2ltcG9ydCB0dGsKKworc3RhdGVzID0gWydhY3RpdmUnLCAnZGlzYWJsZWQnLCAnZm9jdXMnLCAncHJlc3NlZCcsICdzZWxlY3RlZCcsCisgICAgICAgICAgJ2JhY2tncm91bmQnLCAncmVhZG9ubHknLCAnYWx0ZXJuYXRlJywgJ2ludmFsaWQnXQorCitmb3Igc3RhdGUgaW4gc3RhdGVzWzpdOgorICAgIHN0YXRlcy5hcHBlbmQoIiEiICsgc3RhdGUpCisKK2RlZiByZXNldF9zdGF0ZSh3aWRnZXQpOgorICAgIG5vc3RhdGUgPSBzdGF0ZXNbbGVuKHN0YXRlcykgLy8gMjpdCisgICAgd2lkZ2V0LnN0YXRlKG5vc3RhdGUpCisKK2NsYXNzIEFwcCh0dGsuRnJhbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZT1Ob25lKToKKyAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsIGJvcmRlcndpZHRoPTYpCisgICAgICAgIHNlbGYubWFzdGVyLnRpdGxlKHRpdGxlKQorCisgICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQorCisgICAgICAgICMgZ2V0IGRlZmF1bHQgZm9udCBzaXplIGFuZCBmYW1pbHkKKyAgICAgICAgYnRuX2ZvbnQgPSBzZWxmLnN0eWxlLmxvb2t1cCgiVEJ1dHRvbiIsICJmb250IikKKyAgICAgICAgZnNpemUgPSBzdHIoc2VsZi50ay5ldmFsKCJmb250IGNvbmZpZ3VyZSAlcyAtc2l6ZSIgJSBidG5fZm9udCkpCisgICAgICAgIHNlbGYuZm9udF9mYW1pbHkgPSBzZWxmLnRrLmV2YWwoImZvbnQgY29uZmlndXJlICVzIC1mYW1pbHkiICUgYnRuX2ZvbnQpCisgICAgICAgIGlmICcgJyBpbiBzZWxmLmZvbnRfZmFtaWx5OgorICAgICAgICAgICAgc2VsZi5mb250X2ZhbWlseSA9ICd7JXN9JyAlIHNlbGYuZm9udF9mYW1pbHkKKyAgICAgICAgc2VsZi5mc2l6ZV9wcmVmaXggPSBmc2l6ZVswXSBpZiBmc2l6ZVswXSA9PSAnLScgZWxzZSAnJworICAgICAgICBzZWxmLmJhc2VfZnNpemUgPSBpbnQoZnNpemVbMSBpZiBmc2l6ZVswXSA9PSAnLScgZWxzZSAwOl0pCisKKyAgICAgICAgIyBhIGxpc3QgdG8gaG9sZCBhbGwgdGhlIHdpZGdldHMgdGhhdCB3aWxsIGhhdmUgdGhlaXIgc3RhdGVzIGNoYW5nZWQKKyAgICAgICAgc2VsZi51cGRhdGVfd2lkZ2V0cyA9IFtdCisKKyAgICAgICAgc2VsZi5fc2V0dXBfd2lkZ2V0cygpCisKKyAgICBkZWYgX3NldF9mb250KHNlbGYsIGV4dHJhPTApOgorICAgICAgICBzZWxmLnN0eWxlLmNvbmZpZ3VyZSgiVEJ1dHRvbiIsIGZvbnQ9IiVzICVzJWQiICUgKHNlbGYuZm9udF9mYW1pbHksCisgICAgICAgICAgICBzZWxmLmZzaXplX3ByZWZpeCwgc2VsZi5iYXNlX2ZzaXplICsgZXh0cmEpKQorCisgICAgZGVmIF9uZXdfc3RhdGUoc2VsZiwgd2lkZ2V0LCBuZXd0ZXh0KToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5uYW1ldG93aWRnZXQod2lkZ2V0KQorCisgICAgICAgIGlmIG5vdCBuZXd0ZXh0OgorICAgICAgICAgICAgZ29vZHN0YXRlcyA9IFsiZGlzYWJsZWQiXQorICAgICAgICAgICAgZm9udF9leHRyYSA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgc2V0IHdpZGdldCBzdGF0ZSBhY2NvcmRpbmcgdG8gd2hhdCBoYXMgYmVlbiBlbnRlcmVkIGluIHRoZSBlbnRyeQorICAgICAgICAgICAgbmV3c3RhdGVzID0gc2V0KG5ld3RleHQuc3BsaXQoKSkgIyBlbGltaW5hdGUgZHVwbGljYXRlcworCisgICAgICAgICAgICAjIGtlZXAgb25seSB0aGUgdmFsaWQgc3RhdGVzCisgICAgICAgICAgICBnb29kc3RhdGVzID0gW3N0YXRlIGZvciBzdGF0ZSBpbiBuZXdzdGF0ZXMgaWYgc3RhdGUgaW4gc3RhdGVzXQorICAgICAgICAgICAgIyBkZWZpbmUgYSBuZXcgZm9udCBzaXplIGJhc2VkIG9uIGFtb3VudCBvZiBzdGF0ZXMKKyAgICAgICAgICAgIGZvbnRfZXh0cmEgPSAyICogbGVuKGdvb2RzdGF0ZXMpCisKKyAgICAgICAgIyBzZXQgbmV3IHdpZGdldCBzdGF0ZQorICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYudXBkYXRlX3dpZGdldHM6CisgICAgICAgICAgICByZXNldF9zdGF0ZSh3aWRnZXQpICMgcmVtb3ZlIGFueSBwcmV2aW91cyBzdGF0ZSBmcm9tIHRoZSB3aWRnZXQKKyAgICAgICAgICAgIHdpZGdldC5zdGF0ZShnb29kc3RhdGVzKQorCisgICAgICAgICMgdXBkYXRlIFR0ayBCdXR0b24gZm9udCBzaXplCisgICAgICAgIHNlbGYuX3NldF9mb250KGZvbnRfZXh0cmEpCisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6CisgICAgICAgIGJ0biA9IHR0ay5CdXR0b24oc2VsZiwgdGV4dD0nRW50ZXIgc3RhdGVzIGFuZCB3YXRjaCcpCisKKyAgICAgICAgZW50cnkgPSB0dGsuRW50cnkoc2VsZiwgY3Vyc29yPSd4dGVybScsIHZhbGlkYXRlPSJrZXkiKQorICAgICAgICBlbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSAoc2VsZi5yZWdpc3RlcihzZWxmLl9uZXdfc3RhdGUpLCAnJVcnLCAnJVAnKQorICAgICAgICBlbnRyeS5mb2N1cygpCisKKyAgICAgICAgc2VsZi51cGRhdGVfd2lkZ2V0cy5hcHBlbmQoYnRuKQorICAgICAgICBlbnRyeS52YWxpZGF0ZSgpCisKKyAgICAgICAgZW50cnkucGFjayhmaWxsPSd4JywgcGFkeD02KQorICAgICAgICBidG4ucGFjayhzaWRlPSdsZWZ0JywgcGFkeT02LCBwYWR4PTYsIGFuY2hvcj0nbicpCisgICAgICAgIHNlbGYucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPTEpCisKKworZGVmIG1haW4oKToKKyAgICBhcHAgPSBBcHAoIldpZGdldCBTdGF0ZSBUZXN0ZXIiKQorICAgIGFwcC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19JX2RvbnRsaWtlX3RpbHRkZW1vLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fSV9kb250bGlrZV90aWx0ZGVtby5weQppbmRleCBhZGVjNTJiLi5jOWU2ZTY1IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19JX2RvbnRsaWtlX3RpbHRkZW1vLnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX0lfZG9udGxpa2VfdGlsdGRlbW8ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgdGRlbW8tSV9kb250X2xpa2VfdGlsdGRlbW8ucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2J5dGVkZXNpZ24ucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19ieXRlZGVzaWduLnB5CmluZGV4IDZmNTNlOWYuLmJlZDY3MWQgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX2J5dGVkZXNpZ24ucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fYnl0ZWRlc2lnbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgIHRkZW1vX2J5dGVkZXNpZ24ucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2Nsb2NrLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkKaW5kZXggMTFjMzdmMC4uYjYyODBiYiAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjIC0qLSBjb2Rpbmc6IGNwMTI1MiAtKi0KICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIApkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fZnJhY3RhbGN1cnZlcy5weSBiL0RlbW8vdHVydGxlL3RkZW1vX2ZyYWN0YWxjdXJ2ZXMucHkKaW5kZXggZjM0YzVmYy4uMmFjOGVjZCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fZnJhY3RhbGN1cnZlcy5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19mcmFjdGFsY3VydmVzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgdGRlbW9fZnJhY3RhbEN1cnZlcy5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fbGluZGVubWF5ZXJfaW5kaWFuLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fbGluZGVubWF5ZXJfaW5kaWFuLnB5CmluZGV4IDRmMjA3MTYuLjkyYzhjZmYgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX2xpbmRlbm1heWVyX2luZGlhbi5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19saW5kZW5tYXllcl9pbmRpYW4ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgeHR4X2xpbmRlbm1heWVyX2luZGlhbi5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fbWluaW1hbF9oYW5vaS5weSBiL0RlbW8vdHVydGxlL3RkZW1vX21pbmltYWxfaGFub2kucHkKaW5kZXggNGUyYWQ0OC4uOGExY2FhOCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fbWluaW1hbF9oYW5vaS5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19taW5pbWFsX2hhbm9pLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICB0ZGVtb19taW5pbWFsX2hhbm9pLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19uaW0ucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19uaW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2NmQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX25pbS5weQpAQCAtMCwwICsxLDIyNyBAQAorIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CisKKyAgICAgICAgICAgIHRkZW1vX25pbS5weQorICAgICAgICAgCitQbGF5IG5pbSBhZ2FpbnN0IHRoZSBjb21wdXRlci4gVGhlIHBsYXllcgord2hvIHRha2VzIHRoZSBsYXN0IHN0aWNrIGlzIHRoZSB3aW5uZXIuCisKK0ltcGxlbWVudHMgdGhlIG1vZGVsLXZpZXctY29udHJvbGxlcgorZGVzaWduIHBhdHRlcm4uCisiIiIKKworCitpbXBvcnQgdHVydGxlCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgdGltZQorCitTQ1JFRU5XSURUSCA9IDY0MAorU0NSRUVOSEVJR0hUID0gNDgwCisKK01JTlNUSUNLUyA9IDcKK01BWFNUSUNLUyA9IDMxCisKK0hVTklUID0gU0NSRUVOSEVJR0hUIC8vIDEyCitXVU5JVCA9IFNDUkVFTldJRFRIIC8vICgoTUFYU1RJQ0tTIC8vIDUpICogMTEgKyAoTUFYU1RJQ0tTICUgNSkgKiAyKQorCitTQ09MT1IgPSAoNjMsIDYzLCAzMSkKK0hDT0xPUiA9ICgyNTUsIDIwNCwgMjA0KQorQ09MT1IgPSAoMjA0LCAyMDQsIDI1NSkKKworZGVmIHJhbmRvbXJvdygpOgorICAgIHJldHVybiByYW5kb20ucmFuZGludChNSU5TVElDS1MsIE1BWFNUSUNLUykKKworZGVmIGNvbXB1dGVyenVnKHN0YXRlKToKKyAgICB4b3JlZCA9IHN0YXRlWzBdIF4gc3RhdGVbMV0gXiBzdGF0ZVsyXQorICAgIGlmIHhvcmVkID09IDA6CisgICAgICAgIHJldHVybiByYW5kb21tb3ZlKHN0YXRlKQorICAgIGZvciB6IGluIHJhbmdlKDMpOgorICAgICAgICBzID0gc3RhdGVbel0gXiB4b3JlZAorICAgICAgICBpZiBzIDw9IHN0YXRlW3pdOgorICAgICAgICAgICAgbW92ZSA9ICh6LCBzKQorICAgICAgICAgICAgcmV0dXJuIG1vdmUKKworZGVmIHJhbmRvbW1vdmUoc3RhdGUpOgorICAgIG0gPSBtYXgoc3RhdGUpICAgCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgeiA9IHJhbmRvbS5yYW5kaW50KDAsMikKKyAgICAgICAgaWYgc3RhdGVbel0gPiAobSA+IDEpOgorICAgICAgICAgICAgYnJlYWsKKyAgICByYW5kID0gcmFuZG9tLnJhbmRpbnQobSA+IDEsIHN0YXRlW3pdLTEpCisgICAgcmV0dXJuIHosIHJhbmQKKworCitjbGFzcyBOaW1Nb2RlbChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnYW1lKToKKyAgICAgICAgc2VsZi5nYW1lID0gZ2FtZQorCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdhbWUuc3RhdGUgbm90IGluIFtOaW0uQ1JFQVRFRCwgTmltLk9WRVJdOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuc3RpY2tzID0gW3JhbmRvbXJvdygpLCByYW5kb21yb3coKSwgcmFuZG9tcm93KCldCisgICAgICAgIHNlbGYucGxheWVyID0gMAorICAgICAgICBzZWxmLndpbm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5nYW1lLnZpZXcuc2V0dXAoKQorICAgICAgICBzZWxmLmdhbWUuc3RhdGUgPSBOaW0uUlVOTklORworICAgICAgICAKKyAgICBkZWYgbW92ZShzZWxmLCByb3csIGNvbCk6CisgICAgICAgIG1heHNwYWx0ZSA9IHNlbGYuc3RpY2tzW3Jvd10KKyAgICAgICAgc2VsZi5zdGlja3Nbcm93XSA9IGNvbAorICAgICAgICBzZWxmLmdhbWUudmlldy5ub3RpZnlfbW92ZShyb3csIGNvbCwgbWF4c3BhbHRlLCBzZWxmLnBsYXllcikKKyAgICAgICAgaWYgc2VsZi5nYW1lX292ZXIoKToKKyAgICAgICAgICAgIHNlbGYuZ2FtZS5zdGF0ZSA9IE5pbS5PVkVSCisgICAgICAgICAgICBzZWxmLndpbm5lciA9IHNlbGYucGxheWVyCisgICAgICAgICAgICBzZWxmLmdhbWUudmlldy5ub3RpZnlfb3ZlcigpCisgICAgICAgIGVsaWYgc2VsZi5wbGF5ZXIgPT0gMDoKKyAgICAgICAgICAgIHNlbGYucGxheWVyID0gMQorICAgICAgICAgICAgcm93LCBjb2wgPSBjb21wdXRlcnp1ZyhzZWxmLnN0aWNrcykKKyAgICAgICAgICAgIHNlbGYubW92ZShyb3csIGNvbCkKKyAgICAgICAgICAgIHNlbGYucGxheWVyID0gMAorICAgICAgICAKKyAgICBkZWYgZ2FtZV9vdmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zdGlja3MgPT0gWzAsIDAsIDBdCisKKyAgICBkZWYgbm90aWZ5X21vdmUoc2VsZiwgcm93LCBjb2wpOgorICAgICAgICBpZiBzZWxmLnN0aWNrc1tyb3ddIDw9IGNvbDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLm1vdmUocm93LCBjb2wpCisKKworY2xhc3MgU3RpY2sodHVydGxlLlR1cnRsZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdywgY29sLCBnYW1lKToKKyAgICAgICAgdHVydGxlLlR1cnRsZS5fX2luaXRfXyhzZWxmLCB2aXNpYmxlPUZhbHNlKQorICAgICAgICBzZWxmLnJvdyA9IHJvdworICAgICAgICBzZWxmLmNvbCA9IGNvbAorICAgICAgICBzZWxmLmdhbWUgPSBnYW1lCisgICAgICAgIHgsIHkgPSBzZWxmLmNvb3Jkcyhyb3csIGNvbCkKKyAgICAgICAgc2VsZi5zaGFwZSgic3F1YXJlIikKKyAgICAgICAgc2VsZi5zaGFwZXNpemUoSFVOSVQvMTAuMCwgV1VOSVQvMjAuMCkKKyAgICAgICAgc2VsZi5zcGVlZCgwKQorICAgICAgICBzZWxmLnB1KCkKKyAgICAgICAgc2VsZi5nb3RvKHgseSkKKyAgICAgICAgc2VsZi5jb2xvcigid2hpdGUiKQorICAgICAgICBzZWxmLnNob3d0dXJ0bGUoKQorICAgICAgICAgICAgCisgICAgZGVmIGNvb3JkcyhzZWxmLCByb3csIGNvbCk6CisgICAgICAgIHBhY2tldCwgcmVtYWluZGVyID0gZGl2bW9kKGNvbCwgNSkKKyAgICAgICAgeCA9ICgzICsgMTEgKiBwYWNrZXQgKyAyICogcmVtYWluZGVyKSAqIFdVTklUCisgICAgICAgIHkgPSAoMiArIDMgKiByb3cpICogSFVOSVQKKyAgICAgICAgcmV0dXJuIHggLSBTQ1JFRU5XSURUSCAvLyAyICsgV1VOSVQgLy8gMiwgU0NSRUVOSEVJR0hUIC8vIDIgLSB5IC0gSFVOSVQgLy8gMgorICAgICAgICAKKyAgICBkZWYgbWFrZW1vdmUoc2VsZiwgeCwgeSk6CisgICAgICAgIGlmIHNlbGYuZ2FtZS5zdGF0ZSAhPSBOaW0uUlVOTklORzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmdhbWUuY29udHJvbGxlci5ub3RpZnlfbW92ZShzZWxmLnJvdywgc2VsZi5jb2wpCisKKworY2xhc3MgTmltVmlldyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnYW1lKToKKyAgICAgICAgc2VsZi5nYW1lID0gZ2FtZQorICAgICAgICBzZWxmLnNjcmVlbiA9IGdhbWUuc2NyZWVuCisgICAgICAgIHNlbGYubW9kZWwgPSBnYW1lLm1vZGVsCisgICAgICAgIHNlbGYuc2NyZWVuLmNvbG9ybW9kZSgyNTUpCisgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihGYWxzZSkKKyAgICAgICAgc2VsZi5zY3JlZW4uYmdjb2xvcigoMjQwLCAyNDAsIDI1NSkpCisgICAgICAgIHNlbGYud3JpdGVyID0gdHVydGxlLlR1cnRsZSh2aXNpYmxlPUZhbHNlKQorICAgICAgICBzZWxmLndyaXRlci5wdSgpCisgICAgICAgIHNlbGYud3JpdGVyLnNwZWVkKDApCisgICAgICAgIHNlbGYuc3RpY2tzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGZvciBjb2wgaW4gcmFuZ2UoTUFYU1RJQ0tTKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0aWNrc1socm93LCBjb2wpXSA9IFN0aWNrKHJvdywgY29sLCBnYW1lKQorICAgICAgICBzZWxmLmRpc3BsYXkoIi4uLiBhIG1vbWVudCBwbGVhc2UgLi4uIikKKyAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKFRydWUpCisKKyAgICBkZWYgZGlzcGxheShzZWxmLCBtc2cxLCBtc2cyPU5vbmUpOgorICAgICAgICBzZWxmLnNjcmVlbi50cmFjZXIoRmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVyLmNsZWFyKCkKKyAgICAgICAgaWYgbXNnMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLmdvdG8oMCwgLSBTQ1JFRU5IRUlHSFQgLy8gMiArIDQ4KQorICAgICAgICAgICAgc2VsZi53cml0ZXIucGVuY29sb3IoInJlZCIpCisgICAgICAgICAgICBzZWxmLndyaXRlci53cml0ZShtc2cyLCBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLDE4LCJib2xkIikpCisgICAgICAgIHNlbGYud3JpdGVyLmdvdG8oMCwgLSBTQ1JFRU5IRUlHSFQgLy8gMiArIDIwKQorICAgICAgICBzZWxmLndyaXRlci5wZW5jb2xvcigiYmxhY2siKQorICAgICAgICBzZWxmLndyaXRlci53cml0ZShtc2cxLCBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLDE0LCJib2xkIikpCisgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihUcnVlKQorICAgICAgICAKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKEZhbHNlKQorICAgICAgICBmb3Igcm93IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgZm9yIGNvbCBpbiByYW5nZShzZWxmLm1vZGVsLnN0aWNrc1tyb3ddKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0aWNrc1socm93LCBjb2wpXS5jb2xvcihTQ09MT1IpCisgICAgICAgIGZvciByb3cgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBmb3IgY29sIGluIHJhbmdlKHNlbGYubW9kZWwuc3RpY2tzW3Jvd10sIE1BWFNUSUNLUyk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGlja3NbKHJvdywgY29sKV0uY29sb3IoIndoaXRlIikKKyAgICAgICAgc2VsZi5kaXNwbGF5KCJZb3VyIHR1cm4hIENsaWNrIGxlZnRtb3N0IHN0aWNrIHRvIHJlbW92ZS4iKQorICAgICAgICBzZWxmLnNjcmVlbi50cmFjZXIoVHJ1ZSkKKworICAgIGRlZiBub3RpZnlfbW92ZShzZWxmLCByb3csIGNvbCwgbWF4c3BhbHRlLCBwbGF5ZXIpOgorICAgICAgICBpZiBwbGF5ZXIgPT0gMDoKKyAgICAgICAgICAgIGZhcmJlID0gSENPTE9SCisgICAgICAgICAgICBmb3IgcyBpbiByYW5nZShjb2wsIG1heHNwYWx0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGlja3NbKHJvdywgcyldLmNvbG9yKGZhcmJlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaXNwbGF5KCIgLi4uIHRoaW5raW5nIC4uLiAgICAgICAgICIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgICAgIHNlbGYuZGlzcGxheSgiIC4uLiB0aGlua2luZyAuLi4gYWFhaCAuLi4iKQorICAgICAgICAgICAgZmFyYmUgPSBDT0xPUgorICAgICAgICAgICAgZm9yIHMgaW4gcmFuZ2UobWF4c3BhbHRlLTEsIGNvbC0xLCAtMSk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgICAgICAgICAgc2VsZi5zdGlja3NbKHJvdywgcyldLmNvbG9yKGZhcmJlKQorICAgICAgICAgICAgc2VsZi5kaXNwbGF5KCJZb3VyIHR1cm4hIENsaWNrIGxlZnRtb3N0IHN0aWNrIHRvIHJlbW92ZS4iKQorCisgICAgZGVmIG5vdGlmeV9vdmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdhbWUubW9kZWwud2lubmVyID09IDA6CisgICAgICAgICAgICBtc2cyID0gIkNvbmdyYXRzLiBZb3UncmUgdGhlIHdpbm5lciEhISIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZzIgPSAiU29ycnksIHRoZSBjb21wdXRlciBpcyB0aGUgd2lubmVyLiIKKyAgICAgICAgc2VsZi5kaXNwbGF5KCJUbyBwbGF5IGFnYWluIHByZXNzIHNwYWNlIGJhci4gVG8gbGVhdmUgcHJlc3MgRVNDLiIsIG1zZzIpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2FtZS5zdGF0ZSA9PSBOaW0uT1ZFUjoKKyAgICAgICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKKworY2xhc3MgTmltQ29udHJvbGxlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdhbWUpOgorICAgICAgICBzZWxmLmdhbWUgPSBnYW1lCisgICAgICAgIHNlbGYuc3RpY2tzID0gZ2FtZS52aWV3LnN0aWNrcworICAgICAgICBzZWxmLkJVU1kgPSBGYWxzZQorICAgICAgICBmb3Igc3RpY2sgaW4gc2VsZi5zdGlja3MudmFsdWVzKCk6CisgICAgICAgICAgICBzdGljay5vbmNsaWNrKHN0aWNrLm1ha2Vtb3ZlKQorICAgICAgICBzZWxmLmdhbWUuc2NyZWVuLm9ua2V5KHNlbGYuZ2FtZS5tb2RlbC5zZXR1cCwgInNwYWNlIikKKyAgICAgICAgc2VsZi5nYW1lLnNjcmVlbi5vbmtleShzZWxmLmdhbWUudmlldy5jbGVhciwgIkVzY2FwZSIpCisgICAgICAgIHNlbGYuZ2FtZS52aWV3LmRpc3BsYXkoIlByZXNzIHNwYWNlIGJhciB0byBzdGFydCBnYW1lIikKKyAgICAgICAgc2VsZi5nYW1lLnNjcmVlbi5saXN0ZW4oKQorCisgICAgZGVmIG5vdGlmeV9tb3ZlKHNlbGYsIHJvdywgY29sKToKKyAgICAgICAgaWYgc2VsZi5CVVNZOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuQlVTWSA9IFRydWUKKyAgICAgICAgc2VsZi5nYW1lLm1vZGVsLm5vdGlmeV9tb3ZlKHJvdywgY29sKQorICAgICAgICBzZWxmLkJVU1kgPSBGYWxzZQorICAgICAgICAgICAgICAgIAorY2xhc3MgTmltKG9iamVjdCk6CisgICAgQ1JFQVRFRCA9IDAKKyAgICBSVU5OSU5HID0gMQorICAgIE9WRVIgPSAyCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjcmVlbik6CisgICAgICAgIHNlbGYuc3RhdGUgPSBOaW0uQ1JFQVRFRCAKKyAgICAgICAgc2VsZi5zY3JlZW4gPSBzY3JlZW4KKyAgICAgICAgc2VsZi5tb2RlbCA9IE5pbU1vZGVsKHNlbGYpCisgICAgICAgIHNlbGYudmlldyA9IE5pbVZpZXcoc2VsZikKKyAgICAgICAgc2VsZi5jb250cm9sbGVyID0gTmltQ29udHJvbGxlcihzZWxmKQorICAgICAgICAKKworbWFpbnNjcmVlbiA9IHR1cnRsZS5TY3JlZW4oKQorbWFpbnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCittYWluc2NyZWVuLnNldHVwKFNDUkVFTldJRFRILCBTQ1JFRU5IRUlHSFQpCisKK2RlZiBtYWluKCk6CisgICAgbmltID0gTmltKG1haW5zY3JlZW4pCisgICAgcmV0dXJuICJFVkVOVExPT1AhIgorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQorICAgIHR1cnRsZS5tYWlubG9vcCgpCisgICAgCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19wYWludC5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5CmluZGV4IDY1NzQxZGEuLmUxZDYzMDMgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5CisrKyBiL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICAgICB0ZGVtb19wYWludC5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fcGVhY2UucHkgYi9EZW1vL3R1cnRsZS90ZGVtb19wZWFjZS5weQppbmRleCBlYTU3MDY5Li4xMzA0NGM5IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19wZWFjZS5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19wZWFjZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgICB0ZGVtb19wZWFjZS5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fcGVucm9zZS5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3BlbnJvc2UucHkKaW5kZXggNGQ4YTYxZS4uZjU4MjRkNyAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fcGVucm9zZS5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb19wZW5yb3NlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHh0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgIHh0eF9raXRlc19hbmRfZGFydHMucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3BsYW5ldF9hbmRfbW9vbi5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3BsYW5ldF9hbmRfbW9vbi5weQppbmRleCBlM2M4N2EwLi4yMjNkODdiIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19wbGFuZXRfYW5kX21vb24ucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fcGxhbmV0X2FuZF9tb29uLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgIHRkZW1vX3BsYW5ldHNfYW5kX21vb24ucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3RyZWUucHkgYi9EZW1vL3R1cnRsZS90ZGVtb190cmVlLnB5CmluZGV4IDNjNzE3OGMuLjZmYzg3MzUgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3RyZWUucHkKKysrIGIvRGVtby90dXJ0bGUvdGRlbW9fdHJlZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiIiAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICAgICAgdGRlbW9fdHJlZS5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9feWlueWFuZy5weSBiL0RlbW8vdHVydGxlL3RkZW1vX3lpbnlhbmcucHkKaW5kZXggNDdiOGIyZi4uMDRkZDc1OCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9feWlueWFuZy5weQorKysgYi9EZW1vL3R1cnRsZS90ZGVtb195aW55YW5nLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICAgICB0ZGVtb195aW55YW5nLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90dXJ0bGVEZW1vLnB5IGIvRGVtby90dXJ0bGUvdHVydGxlRGVtby5weQppbmRleCAzOGE0NGUwLi4zMGI1ZTViIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90dXJ0bGVEZW1vLnB5CisrKyBiL0RlbW8vdHVydGxlL3R1cnRsZURlbW8ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgICAgICAgICBzZWxmLnRleHQuZGVsZXRlKCIxLjAiLCAiZW5kIikKICAgICAgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoIjEuMCIsY2hhcnMpCiAgICAgICAgICAgICBkaXJlYywgZm5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQotICAgICAgICAgICAgc2VsZi5yb290LnRpdGxlKGZuYW1lWzY6LTNdKyIgLSBhbiB4dHVydGxlIGV4YW1wbGUiKQorICAgICAgICAgICAgc2VsZi5yb290LnRpdGxlKGZuYW1lWzY6LTNdKyIgLSBhIFB5dGhvbiB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSIpCiAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IF9faW1wb3J0X18oZm5hbWVbOi0zXSkKICAgICAgICAgICAgIHJlbG9hZChzZWxmLm1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQsCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90dXJ0bGVkZW1vX3R3b19jYW52YXNlcy5weSBiL0RlbW8vdHVydGxlL3R1cnRsZWRlbW9fdHdvX2NhbnZhc2VzLnB5CmluZGV4IDVjZGUwZWYuLjVhOTgzMWQgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3R1cnRsZWRlbW9fdHdvX2NhbnZhc2VzLnB5CisrKyBiL0RlbW8vdHVydGxlL3R1cnRsZWRlbW9fdHdvX2NhbnZhc2VzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbgogIyMgREVNT05TVFJBVEVTIFVTRSBPRiAyIENBTlZBU0VTLCBTTyBDQU5OT1QgQkUgUlVOIElOIERFTU9WSUVXRVIhCiAiIiJ0dXJ0bGUgZXhhbXBsZTogVXNpbmcgVHVydGxlU2NyZWVuIGFuZCBSYXdUdXJ0bGUKIGZvciBkcmF3aW5nIG9uIHR3byBkaXN0aW5jdCBjYW52YXNlcy4KZGlmZiAtLWdpdCBhL0RlbW8veG1sL2VsZW1fY291bnQucHkgYi9EZW1vL3htbC9lbGVtX2NvdW50LnB5CmluZGV4IDdiNTMxODkuLmY0ZTZlZjUgMTAwNjQ0Ci0tLSBhL0RlbW8veG1sL2VsZW1fY291bnQucHkKKysrIGIvRGVtby94bWwvZWxlbV9jb3VudC5weQpAQCAtMSw0ICsxLDEwIEBACisiIiIKK0Egc2ltcGxlIGRlbW8gdGhhdCByZWFkcyBpbiBhbiBYTUwgZG9jdW1lbnQgYW5kIGRpc3BsYXlzIHRoZSBudW1iZXIgb2YKK2VsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgYSB0YWxseSBvZiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBieSBuYW1lLgorIiIiCisKIGltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CiAKIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIsIGhhbmRsZXIKIApAQCAtNywxNiArMTMsMTYgQEAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2VsZW1zID0gMAogICAgICAgICBzZWxmLl9hdHRycyA9IDAKLSAgICAgICAgc2VsZi5fZWxlbV90eXBlcyA9IHt9Ci0gICAgICAgIHNlbGYuX2F0dHJfdHlwZXMgPSB7fQorICAgICAgICBzZWxmLl9lbGVtX3R5cGVzID0gZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBzZWxmLl9hdHRyX3R5cGVzID0gZGVmYXVsdGRpY3QoaW50KQogCiAgICAgZGVmIHN0YXJ0RWxlbWVudChzZWxmLCBuYW1lLCBhdHRycyk6Ci0gICAgICAgIHNlbGYuX2VsZW1zID0gc2VsZi5fZWxlbXMgKyAxCi0gICAgICAgIHNlbGYuX2F0dHJzID0gc2VsZi5fYXR0cnMgKyBsZW4oYXR0cnMpCi0gICAgICAgIHNlbGYuX2VsZW1fdHlwZXNbbmFtZV0gPSBzZWxmLl9lbGVtX3R5cGVzLmdldChuYW1lLCAwKSArIDEKKyAgICAgICAgc2VsZi5fZWxlbXMgKz0gMQorICAgICAgICBzZWxmLl9hdHRycyArPSBsZW4oYXR0cnMpCisgICAgICAgIHNlbGYuX2VsZW1fdHlwZXNbbmFtZV0gKz0gMQogCiAgICAgICAgIGZvciBuYW1lIGluIGF0dHJzLmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuX2F0dHJfdHlwZXNbbmFtZV0gPSBzZWxmLl9hdHRyX3R5cGVzLmdldChuYW1lLCAwKSArIDEKKyAgICAgICAgICAgIHNlbGYuX2F0dHJfdHlwZXNbbmFtZV0gKz0gMQogCiAgICAgZGVmIGVuZERvY3VtZW50KHNlbGYpOgogICAgICAgICBwcmludCAiVGhlcmUgd2VyZSIsIHNlbGYuX2VsZW1zLCAiZWxlbWVudHMuIgpAQCAtMzAsNyArMzYsNyBAQAogICAgICAgICBmb3IgcGFpciBpbiAgc2VsZi5fYXR0cl90eXBlcy5pdGVtcygpOgogICAgICAgICAgICAgcHJpbnQgIiUyMHMgJWQiICUgcGFpcgogCi0KLXBhcnNlciA9IG1ha2VfcGFyc2VyKCkKLXBhcnNlci5zZXRDb250ZW50SGFuZGxlcihGYW5jeUNvdW50ZXIoKSkKLXBhcnNlci5wYXJzZShzeXMuYXJndlsxXSkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gbWFrZV9wYXJzZXIoKQorICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihGYW5jeUNvdW50ZXIoKSkKKyAgICBwYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCmRpZmYgLS1naXQgYS9EZW1vL3htbC9yb3VuZHRyaXAucHkgYi9EZW1vL3htbC9yb3VuZHRyaXAucHkKaW5kZXggOGQ3ZDQzNy4uODAxYzAwOSAxMDA2NDQKLS0tIGEvRGVtby94bWwvcm91bmR0cmlwLnB5CisrKyBiL0RlbW8veG1sL3JvdW5kdHJpcC5weQpAQCAtMyw3ICszLDcgQEAKIGJ1dCBub3QgbmVjZXNzYXJpbHkgaWRlbnRpY2FsLCBkb2N1bWVudC4KICIiIgogCi1pbXBvcnQgc3lzLCBzdHJpbmcKK2ltcG9ydCBzeXMKIAogZnJvbSB4bWwuc2F4IGltcG9ydCBzYXh1dGlscywgaGFuZGxlciwgbWFrZV9wYXJzZXIKIApAQCAtMTEsNyArMTEsNyBAQAogCiBjbGFzcyBDb250ZW50R2VuZXJhdG9yKGhhbmRsZXIuQ29udGVudEhhbmRsZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dCA9IHN5cy5zdGRvdXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQ9c3lzLnN0ZG91dCk6CiAgICAgICAgIGhhbmRsZXIuQ29udGVudEhhbmRsZXIuX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5fb3V0ID0gb3V0CiAKQEAgLTQwLDYgKzQwLDcgQEAKIAogIyAtLS0gVGhlIG1haW4gcHJvZ3JhbQogCi1wYXJzZXIgPSBtYWtlX3BhcnNlcigpCi1wYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoQ29udGVudEdlbmVyYXRvcigpKQotcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzFdKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCisgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKENvbnRlbnRHZW5lcmF0b3IoKSkKKyAgICBwYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCmRpZmYgLS1naXQgYS9EZW1vL3htbC9yc3MyaHRtbC5weSBiL0RlbW8veG1sL3JzczJodG1sLnB5CmluZGV4IDE1Yzk4OTEuLmYyMDY3YTkgMTAwNjQ0Ci0tLSBhL0RlbW8veG1sL3JzczJodG1sLnB5CisrKyBiL0RlbW8veG1sL3JzczJodG1sLnB5CkBAIC0xLDQ1ICsxLDUwIEBACisiIiIKK0EgZGVtbyB0aGF0IHJlYWRzIGluIGFuIFJTUyBYTUwgZG9jdW1lbnQgYW5kIGVtaXRzIGFuIEhUTUwgZmlsZSBjb250YWluaW5nCithIGxpc3Qgb2YgdGhlIGluZGl2aWR1YWwgaXRlbXMgaW4gdGhlIGZlZWQuCisiIiIKKwogaW1wb3J0IHN5cworaW1wb3J0IGNvZGVjcwogCiBmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyLCBoYW5kbGVyCiAKICMgLS0tIFRlbXBsYXRlcwogCi10b3AgPSBcCi0iIiIKK3RvcCA9ICIiIlwKIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPgotICA8VElUTEU+JXM8L1RJVExFPgotPC9IRUFEPgorPGh0bWw+Cis8aGVhZD4KKyAgPHRpdGxlPiVzPC90aXRsZT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPC9oZWFkPgogCi08Qk9EWT4KLTxIMT4lczwvSDE+Cis8Ym9keT4KKzxoMT4lczwvaDE+CiAiIiIKIAotYm90dG9tID0gXAotIiIiCitib3R0b20gPSAiIiIKIDwvdWw+CiAKLTxIUj4KLTxBRERSRVNTPgotQ29udmVydGVkIHRvIEhUTUwgYnkgc2F4X3JzczJodG1sLnB5LgotPC9BRERSRVNTPgorPGhyPgorPGFkZHJlc3M+CitDb252ZXJ0ZWQgdG8gSFRNTCBieSByc3MyaHRtbC5weS4KKzwvYWRkcmVzcz4KIAotPC9CT0RZPgotPC9IVE1MPgorPC9ib2R5PgorPC9odG1sPgogIiIiCiAKICMgLS0tIFRoZSBDb250ZW50SGFuZGxlcgogCiBjbGFzcyBSU1NIYW5kbGVyKGhhbmRsZXIuQ29udGVudEhhbmRsZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dCA9IHN5cy5zdGRvdXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQ9c3lzLnN0ZG91dCk6CiAgICAgICAgIGhhbmRsZXIuQ29udGVudEhhbmRsZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fb3V0ID0gb3V0CisgICAgICAgIHNlbGYuX291dCA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04Jykob3V0KQogCiAgICAgICAgIHNlbGYuX3RleHQgPSAiIgogICAgICAgICBzZWxmLl9wYXJlbnQgPSBOb25lCi0gICAgICAgIHNlbGYuX2xpc3Rfc3RhcnRlZCA9IDAKKyAgICAgICAgc2VsZi5fbGlzdF9zdGFydGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5fdGl0bGUgPSBOb25lCiAgICAgICAgIHNlbGYuX2xpbmsgPSBOb25lCiAgICAgICAgIHNlbGYuX2Rlc2NyID0gIiIKQEAgLTY5LDcgKzc0LDcgQEAKICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiaXRlbSI6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2xpc3Rfc3RhcnRlZDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKCI8dWw+XG4iKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9saXN0X3N0YXJ0ZWQgPSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpc3Rfc3RhcnRlZCA9IFRydWUKIAogICAgICAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgnICA8bGk+PGEgaHJlZj0iJXMiPiVzPC9hPiAlc1xuJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9saW5rLCBzZWxmLl90aXRsZSwgc2VsZi5fZGVzY3IpKQpAQCAtODYsNiArOTEsNyBAQAogCiAjIC0tLSBNYWluIHByb2dyYW0KIAotcGFyc2VyID0gbWFrZV9wYXJzZXIoKQotcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKFJTU0hhbmRsZXIoKSkKLXBhcnNlci5wYXJzZShzeXMuYXJndlsxXSkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGFyc2VyID0gbWFrZV9wYXJzZXIoKQorICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihSU1NIYW5kbGVyKCkpCisgICAgcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzFdKQpkaWZmIC0tZ2l0IGEvRG9jL0FDS1MudHh0IGIvRG9jL0FDS1MudHh0CmluZGV4IDM4YzNkYzIuLjJhYTAzMTYgMTAwNjQ0Ci0tLSBhL0RvYy9BQ0tTLnR4dAorKysgYi9Eb2MvQUNLUy50eHQKQEAgLTE4LDYgKzE4LDcgQEAKICAgICogT2xpdmVyIEFuZHJpY2gKICAgICogSGVpZGkgQW5uZXhzdGFkCiAgICAqIEplc8O6cyBDZWEgQXZpw7NuCisgICAqIE1hbnVlbCBCYWxzZXJhCiAgICAqIERhbmllbCBCYXJjbGF5CiAgICAqIENocmlzIEJhcmtlcgogICAgKiBEb24gQmFzaGZvcmQKQEAgLTEwOSw2ICsxMTAsNyBAQAogICAgKiBBbmRyZXcgTS4gS3VjaGxpbmcKICAgICogRGF2ZSBLdWhsbWFuCiAgICAqIEVybm8gS3V1c2VsYQorICAgKiBSb3NzIExhZ2Vyd2FsbAogICAgKiBUaG9tYXMgTGFtYgogICAgKiBEZXRsZWYgTGFubmVydAogICAgKiBQaWVycyBMYXVkZXIKQEAgLTEyNiw2ICsxMjgsNyBAQAogICAgKiBBbmRyZXcgTWFjSW50eXJlCiAgICAqIFZsYWRpbWlyIE1hcmFuZ296b3YKICAgICogVmluY2VudCBNYXJjaGV0dGkKKyAgICogV2VzdGxleSBNYXJ0w61uZXoKICAgICogTGF1cmEgTWF0c29uCiAgICAqIERhbmllbCBNYXkKICAgICogUmViZWNjYSBNY0NyZWFyeQpAQCAtMTM2LDYgKzEzOSw3IEBACiAgICAqIFJvc3MgTW9vcmUKICAgICogU2pvZXJkIE11bGxlbmRlcgogICAgKiBEYWxlIE5hZ2F0YQorICAgKiBNaWNoYWwgTm93aWtvd3NraSAKICAgICogTmcgUGhlbmcgU2lvbmcKICAgICogS29yYXkgT25lcgogICAgKiBUb21hcyBPcHBlbHN0cnVwCkBAIC0xNTUsNiArMTU5LDcgQEAKICAgICogUGF1bCBQcmVzY29kCiAgICAqIEVyaWMgUy4gUmF5bW9uZAogICAgKiBFZHdhcmQgSy4gUmVhbQorICAgKiBUZXJyeSBKLiBSZWVkeQogICAgKiBTZWFuIFJlaWZzY2huZWlkZXIKICAgICogQmVybmhhcmQgUmVpdGVyCiAgICAqIEFybWluIFJpZ28KQEAgLTIwNSw2ICsyMTAsNyBAQAogICAgKiBNYXRzIFdpY2htYW5uCiAgICAqIEdlcnJ5IFdpZW5lcgogICAgKiBUaW1vdGh5IFdpbGQKKyAgICogUGF1bCBXaW5rbGVyCiAgICAqIENvbGxpbiBXaW50ZXIKICAgICogQmxha2UgV2ludG9uCiAgICAqIERhbiBXb2xmZQpkaWZmIC0tZ2l0IGEvRG9jL01ha2VmaWxlIGIvRG9jL01ha2VmaWxlCmluZGV4IGY5MDRlNWYuLjIwNDk5ODYgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZQorKysgYi9Eb2MvTWFrZWZpbGUKQEAgLTM0LDEyICszNCwxMyBAQAogCUBlY2hvICIgIGRpc3QgICAgICAgdG8gY3JlYXRlIGEgXCJkaXN0XCIgZGlyZWN0b3J5IHdpdGggYXJjaGl2ZWQgZG9jcyBmb3IgZG93bmxvYWQiCiAJQGVjaG8gIiAgc3VzcGljaW91cyB0byBjaGVjayBmb3Igc3VzcGljaW91cyBtYXJrdXAgaW4gb3V0cHV0IHRleHQiCiAJQGVjaG8gIiAgY2hlY2sgICAgICB0byBydW4gYSBjaGVjayBmb3IgZnJlcXVlbnQgbWFya3VwIGVycm9ycyIKKwlAZWNobyAiICBzZXJ2ZSAgICAgIHRvIHNlcnZlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBsb2NhbGhvc3QgKDgwMDApIgogCiAjIE5vdGU6IGlmIHlvdSB1cGRhdGUgdmVyc2lvbnMgaGVyZSwgZG8gdGhlIHNhbWUgaW4gbWFrZS5iYXQgYW5kIFJFQURNRS50eHQKIGNoZWNrb3V0OgogCUBpZiBbICEgLWQgdG9vbHMvc3BoaW54IF07IHRoZW4gXAogCSAgZWNobyAiQ2hlY2tpbmcgb3V0IFNwaGlueC4uLiI7IFwKLQkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL1NwaGlueC0wLjYuNS9zcGhpbnggdG9vbHMvc3BoaW54OyBcCisJICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9TcGhpbngtMC42Ljcvc3BoaW54IHRvb2xzL3NwaGlueDsgXAogCWZpCiAJQGlmIFsgISAtZCB0b29scy9kb2N1dGlscyBdOyB0aGVuIFwKIAkgIGVjaG8gIkNoZWNraW5nIG91dCBEb2N1dGlscy4uLiI7IFwKQEAgLTg2LDEzICs4NywxNCBAQAogCiBsaW5rY2hlY2s6IEJVSUxERVIgPSBsaW5rY2hlY2sKIGxpbmtjaGVjazogYnVpbGQKLQlAZWNobyAiTGluayBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0ICIgXAorCUBlY2hvICJMaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKIAkgICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9vdXRwdXQudHh0IgogCiBzdXNwaWNpb3VzOiBCVUlMREVSID0gc3VzcGljaW91cwogc3VzcGljaW91czogYnVpbGQKLQlAZWNobyAiU3VzcGljaW91cyBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0ICIgXAotCSAgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL3N1c3BpY2lvdXMudHh0IgorCUBlY2hvICJTdXNwaWNpb3VzIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKKwkgICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9zdXNwaWNpb3VzLmNzdi4gIElmIGFsbCBpc3N1ZXMgYXJlIGZhbHNlIiBcCisJICAgICAgInBvc2l0aXZlcywgYXBwZW5kIHRoYXQgZmlsZSB0byB0b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdi4iCiAKIGNvdmVyYWdlOiBCVUlMREVSID0gY292ZXJhZ2UKIGNvdmVyYWdlOiBidWlsZApAQCAtMTAwLDEzICsxMDIsMTMgQEAKIAogZG9jdGVzdDogQlVJTERFUiA9IGRvY3Rlc3QKIGRvY3Rlc3Q6IGJ1aWxkCi0JQGVjaG8gIlRlc3Rpbmcgb2YgZG9jdGVzdHMgaW4gdGhlIHNvdXJjZXMgZmluaXNoZWQsIGxvb2sgYXQgdGhlICIgXAorCUBlY2hvICJUZXN0aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVkLCBsb29rIGF0IHRoZSIgXAogCSAgICAgICJyZXN1bHRzIGluIGJ1aWxkL2RvY3Rlc3Qvb3V0cHV0LnR4dCIKIAogcHlkb2MtdG9waWNzOiBCVUlMREVSID0gcHlkb2MtdG9waWNzCiBweWRvYy10b3BpY3M6IGJ1aWxkCi0JQGVjaG8gIkJ1aWxkaW5nIGZpbmlzaGVkOyBub3cgY29weSBidWlsZC9weWRvYy10b3BpY3MvcHlkb2NfdG9waWNzLnB5ICIgXAotCSAgICAgICJpbnRvIHRoZSBMaWIvIGRpcmVjdG9yeSIKKwlAZWNobyAiQnVpbGRpbmcgZmluaXNoZWQ7IG5vdyBjb3B5IGJ1aWxkL3B5ZG9jLXRvcGljcy90b3BpY3MucHkiIFwKKwkgICAgICAidG8gTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5IgogCiBodG1sdmlldzogaHRtbAogCSAkKFBZVEhPTikgLWMgImltcG9ydCB3ZWJicm93c2VyOyB3ZWJicm93c2VyLm9wZW4oJ2J1aWxkL2h0bWwvaW5kZXguaHRtbCcpIgpAQCAtMTE5LDcgKzEyMSw3IEBACiAJLXJtIC1yZiB0b29scy9kb2N1dGlscwogCiBkaXN0OgotCS1ybSAtcmYgZGlzdAorCXJtIC1yZiBkaXN0CiAJbWtkaXIgLXAgZGlzdAogCiAJIyBhcmNoaXZlIHRoZSBIVE1MCkBAIC0xMzksOSArMTQxLDkgQEAKIAkoY2QgZGlzdDsgemlwIC1xIC1yIC05IHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLXRleHQuemlwIHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLXRleHQpCiAJcm0gLXIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy10ZXh0CiAJcm0gZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy10ZXh0LnRhcgotCQorCiAJIyBhcmNoaXZlIHRoZSBBNCBsYXRleAotCS1ybSAtciBidWlsZC9sYXRleAorCXJtIC1yZiBidWlsZC9sYXRleAogCW1ha2UgbGF0ZXggUEFQRVI9YTQKIAktc2VkIC1pICdzL21ha2VpbmRleC9tYWtlaW5kZXggLXEvJyBidWlsZC9sYXRleC9NYWtlZmlsZQogCShjZCBidWlsZC9sYXRleDsgbWFrZSBjbGVhbiAmJiBtYWtlIGFsbC1wZGYgJiYgbWFrZSBGTVQ9cGRmIHppcCBiejIpCkBAIC0xNDksNyArMTUxLDcgQEAKIAljcCBidWlsZC9sYXRleC9kb2NzLXBkZi50YXIuYnoyIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtcGRmLWE0LnRhci5iejIKIAogCSMgYXJjaGl2ZSB0aGUgbGV0dGVyIGxhdGV4Ci0Jcm0gLXIgYnVpbGQvbGF0ZXgKKwlybSAtcmYgYnVpbGQvbGF0ZXgKIAltYWtlIGxhdGV4IFBBUEVSPWxldHRlcgogCS1zZWQgLWkgJ3MvbWFrZWluZGV4L21ha2VpbmRleCAtcS8nIGJ1aWxkL2xhdGV4L01ha2VmaWxlCiAJKGNkIGJ1aWxkL2xhdGV4OyBtYWtlIGNsZWFuICYmIG1ha2UgYWxsLXBkZiAmJiBtYWtlIEZNVD1wZGYgemlwIGJ6MikKQEAgLTE1OSw2ICsxNjEsOSBAQAogY2hlY2s6CiAJJChQWVRIT04pIHRvb2xzL3JzdGxpbnQucHkgLWkgdG9vbHMKIAorc2VydmU6CisJLi4vVG9vbHMvc2NyaXB0cy9zZXJ2ZS5weSBidWlsZC9odG1sCisKICMgVGFyZ2V0cyBmb3IgZGFpbHkgYXV0b21hdGVkIGRvYyBidWlsZAogCiAjIGZvciBkZXZlbG9wbWVudCByZWxlYXNlczogYWx3YXlzIGJ1aWxkCmRpZmYgLS1naXQgYS9Eb2MvUkVBRE1FLnR4dCBiL0RvYy9SRUFETUUudHh0CmluZGV4IGQzMmQxZWQuLjBlNzBiZTUgMTAwNjQ0Ci0tLSBhL0RvYy9SRUFETUUudHh0CisrKyBiL0RvYy9SRUFETUUudHh0CkBAIC03Myw3ICs3Myw3IEBACiAKIFlvdSdsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFNwaGlueCBwYWNrYWdlLCBlaXRoZXIgYnkgY2hlY2tpbmcgaXQgb3V0IHZpYSA6OgogCi0gICBzdm4gY28gaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL1NwaGlueC0wLjYuNS9zcGhpbnggdG9vbHMvc3BoaW54CisgICBzdm4gY28gaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL1NwaGlueC0wLjYuNy9zcGhpbnggdG9vbHMvc3BoaW54CiAKIG9yIGJ5IGluc3RhbGxpbmcgaXQgZnJvbSBQeVBJLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnVmZmVyLnJzdCBiL0RvYy9jLWFwaS9idWZmZXIucnN0CmluZGV4IGRiZmFlNGYuLmVlNWQxN2EgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9idWZmZXIucnN0CisrKyBiL0RvYy9jLWFwaS9idWZmZXIucnN0CkBAIC0yLDEwICsyLDExIEBACiAKIC4uIF9idWZmZXJvYmplY3RzOgogCi1CdWZmZXIgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0KK0J1ZmZlcnMgYW5kIE1lbW9yeXZpZXcgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIHNlY3Rpb25hdXRob3I6OiBHcmVnIFN0ZWluIDxnc3RlaW5AbHlyYS5vcmc+CisuLiBzZWN0aW9uYXV0aG9yOjogQmVuamFtaW4gUGV0ZXJzb24KIAogCiAuLiBpbmRleDo6CkBAIC0zMDAsMTIgKzMwMSw1NiBAQAogICAgbGVuZ3RoLiAgUmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgKHdpdGggcmFpc2luZyBhbiBlcnJvcikgb24gZXJyb3IuCiAKIAorTWVtb3J5VmlldyBvYmplY3RzCis9PT09PT09PT09PT09PT09PT0KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKK0EgOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3QgZXhwb3NlcyB0aGUgbmV3IEMgbGV2ZWwgYnVmZmVyIGludGVyZmFjZSBhcyBhCitQeXRob24gb2JqZWN0IHdoaWNoIGNhbiB0aGVuIGJlIHBhc3NlZCBhcm91bmQgbGlrZSBhbnkgb3RoZXIgb2JqZWN0LgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QoUHlPYmplY3QgKm9iaikKKworICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3QgZnJvbSBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBuZXcgYnVmZmVyCisgICBpbnRlcmZhY2UuCisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QgKlB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKFB5X2J1ZmZlciAqdmlldykKKworICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3Qgd3JhcHBpbmcgdGhlIGdpdmVuIGJ1ZmZlci1pbmZvIHN0cnVjdHVyZSAqdmlldyouCisgICBUaGUgbWVtb3J5dmlldyBvYmplY3QgdGhlbiBvd25zIHRoZSBidWZmZXIsIHdoaWNoIG1lYW5zIHlvdSBzaG91bGRuJ3QKKyAgIHRyeSB0byByZWxlYXNlIGl0IHlvdXJzZWxmOiBpdCB3aWxsIGJlIHJlbGVhc2VkIG9uIGRlYWxsb2NhdGlvbiBvZiB0aGUKKyAgIG1lbW9yeXZpZXcgb2JqZWN0LgorCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cyhQeU9iamVjdCAqb2JqLCBpbnQgYnVmZmVydHlwZSwgY2hhciBvcmRlcikKKworICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3QgdG8gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAoaW4gZWl0aGVyCisgICAnQycgb3IgJ0Ynb3J0cmFuICpvcmRlciopIGZyb20gYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgYnVmZmVyCisgICBpbnRlcmZhY2UuIElmIG1lbW9yeSBpcyBjb250aWd1b3VzLCB0aGUgbWVtb3J5dmlldyBvYmplY3QgcG9pbnRzIHRvIHRoZQorICAgb3JpZ2luYWwgbWVtb3J5LiBPdGhlcndpc2UgY29weSBpcyBtYWRlIGFuZCB0aGUgbWVtb3J5dmlldyBwb2ludHMgdG8gYQorICAgbmV3IGJ5dGVzIG9iamVjdC4KKworCisuLiBjZnVuY3Rpb246OiBpbnQgUHlNZW1vcnlWaWV3X0NoZWNrKFB5T2JqZWN0ICpvYmopCisKKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgKm9iaiogaXMgYSBtZW1vcnl2aWV3IG9iamVjdC4gIEl0IGlzIG5vdAorICAgY3VycmVudGx5IGFsbG93ZWQgdG8gY3JlYXRlIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBtZW1vcnl2aWV3YC4KKworCisuLiBjZnVuY3Rpb246OiBQeV9idWZmZXIgKlB5TWVtb3J5Vmlld19HRVRfQlVGRkVSKFB5T2JqZWN0ICpvYmopCisKKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci1pbmZvIHN0cnVjdHVyZSB3cmFwcGVkIGJ5IHRoZSBnaXZlbgorICAgb2JqZWN0LiAgVGhlIG9iamVjdCAqKm11c3QqKiBiZSBhIG1lbW9yeXZpZXcgaW5zdGFuY2U7IHRoaXMgbWFjcm8gZG9lc24ndAorICAgY2hlY2sgaXRzIHR5cGUsIHlvdSBtdXN0IGRvIGl0IHlvdXJzZWxmIG9yIHlvdSB3aWxsIHJpc2sgY3Jhc2hlcy4KKworCiBPbGQtc3R5bGUgYnVmZmVyIG9iamVjdHMKID09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IHNpbmdsZTogUHlCdWZmZXJQcm9jcwogCi1Nb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBidWZmZXIgaW50ZXJmYWNlIGlzIHByb3ZpZGVkIGluIHRoZSBzZWN0aW9uCitNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBvbGQgYnVmZmVyIGludGVyZmFjZSBpcyBwcm92aWRlZCBpbiB0aGUgc2VjdGlvbgogOnJlZjpgYnVmZmVyLXN0cnVjdHNgLCB1bmRlciB0aGUgZGVzY3JpcHRpb24gZm9yIDpjdHlwZTpgUHlCdWZmZXJQcm9jc2AuCiAKIEEgImJ1ZmZlciBvYmplY3QiIGlzIGRlZmluZWQgaW4gdGhlIDpmaWxlOmBidWZmZXJvYmplY3QuaGAgaGVhZGVyIChpbmNsdWRlZCBieQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NhcHN1bGUucnN0IGIvRG9jL2MtYXBpL2NhcHN1bGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzkzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvYy1hcGkvY2Fwc3VsZS5yc3QKQEAgLTAsMCArMSwxNTAgQEAKKy4uIGhpZ2hsaWdodGxhbmc6OiBjCisKKy4uIF9jYXBzdWxlczoKKworQ2Fwc3VsZXMKKy0tLS0tLS0tCisKKy4uIGluZGV4Ojogb2JqZWN0OiBDYXBzdWxlCisKK1JlZmVyIHRvIDpyZWY6YHVzaW5nLWNhcHN1bGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGVzZSBvYmplY3RzLgorCisKKy4uIGN0eXBlOjogUHlDYXBzdWxlCisKKyAgIFRoaXMgc3VidHlwZSBvZiA6Y3R5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGFuIG9wYXF1ZSB2YWx1ZSwgdXNlZnVsIGZvciBDCisgICBleHRlbnNpb24gbW9kdWxlcyB3aG8gbmVlZCB0byBwYXNzIGFuIG9wYXF1ZSB2YWx1ZSAoYXMgYSA6Y3R5cGU6YHZvaWRcKmAKKyAgIHBvaW50ZXIpIHRocm91Z2ggUHl0aG9uIGNvZGUgdG8gb3RoZXIgQyBjb2RlLiAgSXQgaXMgb2Z0ZW4gdXNlZCB0byBtYWtlIGEgQworICAgZnVuY3Rpb24gcG9pbnRlciBkZWZpbmVkIGluIG9uZSBtb2R1bGUgYXZhaWxhYmxlIHRvIG90aGVyIG1vZHVsZXMsIHNvIHRoZQorICAgcmVndWxhciBpbXBvcnQgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBDIEFQSXMgZGVmaW5lZCBpbiBkeW5hbWljYWxseQorICAgbG9hZGVkIG1vZHVsZXMuCisKKy4uIGN0eXBlOjogUHlDYXBzdWxlX0Rlc3RydWN0b3IKKworICAgVGhlIHR5cGUgb2YgYSBkZXN0cnVjdG9yIGNhbGxiYWNrIGZvciBhIGNhcHN1bGUuICBEZWZpbmVkIGFzOjoKKworICAgICAgdHlwZWRlZiB2b2lkICgqUHlDYXBzdWxlX0Rlc3RydWN0b3IpKFB5T2JqZWN0ICopOworCisgICBTZWUgOmNmdW5jOmBQeUNhcHN1bGVfTmV3YCBmb3IgdGhlIHNlbWFudGljcyBvZiBQeUNhcHN1bGVfRGVzdHJ1Y3RvcgorICAgY2FsbGJhY2tzLgorCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKworICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmN0eXBlOmBQeUNhcHN1bGVgLgorCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNhcHN1bGVfTmV3KHZvaWQgKnBvaW50ZXIsIGNvbnN0IGNoYXIgKm5hbWUsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpCisKKyAgIENyZWF0ZSBhIDpjdHlwZTpgUHlDYXBzdWxlYCBlbmNhcHN1bGF0aW5nIHRoZSAqcG9pbnRlciouICBUaGUgKnBvaW50ZXIqCisgICBhcmd1bWVudCBtYXkgbm90IGJlICpOVUxMKi4KKworICAgT24gZmFpbHVyZSwgc2V0IGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgVGhlICpuYW1lKiBzdHJpbmcgbWF5IGVpdGhlciBiZSAqTlVMTCogb3IgYSBwb2ludGVyIHRvIGEgdmFsaWQgQyBzdHJpbmcuICBJZgorICAgbm9uLSpOVUxMKiwgdGhpcyBzdHJpbmcgbXVzdCBvdXRsaXZlIHRoZSBjYXBzdWxlLiAgKFRob3VnaCBpdCBpcyBwZXJtaXR0ZWQgdG8KKyAgIGZyZWUgaXQgaW5zaWRlIHRoZSAqZGVzdHJ1Y3RvciouKQorCisgICBJZiB0aGUgKmRlc3RydWN0b3IqIGFyZ3VtZW50IGlzIG5vdCAqTlVMTCosIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlCisgICBjYXBzdWxlIGFzIGl0cyBhcmd1bWVudCB3aGVuIGl0IGlzIGRlc3Ryb3llZC4KKworICAgSWYgdGhpcyBjYXBzdWxlIHdpbGwgYmUgc3RvcmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiBhIG1vZHVsZSwgdGhlICpuYW1lKiBzaG91bGQKKyAgIGJlIHNwZWNpZmllZCBhcyBgYG1vZHVsZW5hbWUuYXR0cmlidXRlbmFtZWBgLiAgVGhpcyB3aWxsIGVuYWJsZSBvdGhlciBtb2R1bGVzCisgICB0byBpbXBvcnQgdGhlIGNhcHN1bGUgdXNpbmcgOmNmdW5jOmBQeUNhcHN1bGVfSW1wb3J0YC4KKworCisuLiBjZnVuY3Rpb246OiB2b2lkKiBQeUNhcHN1bGVfR2V0UG9pbnRlcihQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSkKKworICAgUmV0cmlldmUgdGhlICpwb2ludGVyKiBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuICBPbiBmYWlsdXJlLCBzZXQgYW4gZXhjZXB0aW9uCisgICBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgVGhlICpuYW1lKiBwYXJhbWV0ZXIgbXVzdCBjb21wYXJlIGV4YWN0bHkgdG8gdGhlIG5hbWUgc3RvcmVkIGluIHRoZSBjYXBzdWxlLgorICAgSWYgdGhlIG5hbWUgc3RvcmVkIGluIHRoZSBjYXBzdWxlIGlzICpOVUxMKiwgdGhlICpuYW1lKiBwYXNzZWQgaW4gbXVzdCBhbHNvCisgICBiZSAqTlVMTCouICBQeXRob24gdXNlcyB0aGUgQyBmdW5jdGlvbiA6Y2Z1bmM6YHN0cmNtcGAgdG8gY29tcGFyZSBjYXBzdWxlCisgICBuYW1lcy4KKworCisuLiBjZnVuY3Rpb246OiBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IGRlc3RydWN0b3Igc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuCisgICBleGNlcHRpb24gYW5kIHJldHVybiAqTlVMTCouCisKKyAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBkZXN0cnVjdG9yLiAgVGhpcyBtYWtlcyBhICpOVUxMKgorICAgcmV0dXJuIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKKyAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKworCisuLiBjZnVuY3Rpb246OiB2b2lkKiBQeUNhcHN1bGVfR2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuCisgICBleGNlcHRpb24gYW5kIHJldHVybiAqTlVMTCouCisKKyAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBjb250ZXh0LiAgVGhpcyBtYWtlcyBhICpOVUxMKgorICAgcmV0dXJuIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKKyAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKworCisuLiBjZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeUNhcHN1bGVfR2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IG5hbWUgc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuIGV4Y2VwdGlvbgorICAgYW5kIHJldHVybiAqTlVMTCouCisKKyAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBuYW1lLiAgVGhpcyBtYWtlcyBhICpOVUxMKiByZXR1cm4KKyAgIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKKyAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKworCisuLiBjZnVuY3Rpb246OiB2b2lkKiBQeUNhcHN1bGVfSW1wb3J0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBub19ibG9jaykKKworICAgSW1wb3J0IGEgcG9pbnRlciB0byBhIEMgb2JqZWN0IGZyb20gYSBjYXBzdWxlIGF0dHJpYnV0ZSBpbiBhIG1vZHVsZS4gIFRoZQorICAgKm5hbWUqIHBhcmFtZXRlciBzaG91bGQgc3BlY2lmeSB0aGUgZnVsbCBuYW1lIHRvIHRoZSBhdHRyaWJ1dGUsIGFzIGluCisgICBgYG1vZHVsZS5hdHRyaWJ1dGVgYC4gIFRoZSAqbmFtZSogc3RvcmVkIGluIHRoZSBjYXBzdWxlIG11c3QgbWF0Y2ggdGhpcworICAgc3RyaW5nIGV4YWN0bHkuICBJZiAqbm9fYmxvY2sqIGlzIHRydWUsIGltcG9ydCB0aGUgbW9kdWxlIHdpdGhvdXQgYmxvY2tpbmcKKyAgICh1c2luZyA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tgKS4gIElmICpub19ibG9jayogaXMgZmFsc2UsCisgICBpbXBvcnQgdGhlIG1vZHVsZSBjb252ZW50aW9uYWxseSAodXNpbmcgOmNmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgKS4KKworICAgUmV0dXJuIHRoZSBjYXBzdWxlJ3MgaW50ZXJuYWwgKnBvaW50ZXIqIG9uIHN1Y2Nlc3MuICBPbiBmYWlsdXJlLCBzZXQgYW4KKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuICpOVUxMKi4gIEhvd2V2ZXIsIGlmIDpjZnVuYzpgUHlDYXBzdWxlX0ltcG9ydGAgZmFpbGVkIHRvCisgICBpbXBvcnQgdGhlIG1vZHVsZSwgYW5kICpub19ibG9jayogd2FzIHRydWUsIG5vIGV4Y2VwdGlvbiBpcyBzZXQuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfSXNWYWxpZChQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSkKKworICAgRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCAqY2Fwc3VsZSogaXMgYSB2YWxpZCBjYXBzdWxlLiAgQSB2YWxpZCBjYXBzdWxlIGlzCisgICBub24tKk5VTEwqLCBwYXNzZXMgOmNmdW5jOmBQeUNhcHN1bGVfQ2hlY2tFeGFjdGAsIGhhcyBhIG5vbi0qTlVMTCogcG9pbnRlcgorICAgc3RvcmVkIGluIGl0LCBhbmQgaXRzIGludGVybmFsIG5hbWUgbWF0Y2hlcyB0aGUgKm5hbWUqIHBhcmFtZXRlci4gIChTZWUKKyAgIDpjZnVuYzpgUHlDYXBzdWxlX0dldFBvaW50ZXJgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgY2Fwc3VsZSBuYW1lcyBhcmUKKyAgIGNvbXBhcmVkLikKKworICAgSW4gb3RoZXIgd29yZHMsIGlmIDpjZnVuYzpgUHlDYXBzdWxlX0lzVmFsaWRgIHJldHVybnMgYSB0cnVlIHZhbHVlLCBjYWxscyB0bworICAgYW55IG9mIHRoZSBhY2Nlc3NvcnMgKGFueSBmdW5jdGlvbiBzdGFydGluZyB3aXRoIDpjZnVuYzpgUHlDYXBzdWxlX0dldGApIGFyZQorICAgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgorCisgICBSZXR1cm4gYSBub256ZXJvIHZhbHVlIGlmIHRoZSBvYmplY3QgaXMgdmFsaWQgYW5kIG1hdGNoZXMgdGhlIG5hbWUgcGFzc2VkIGluLgorICAgUmV0dXJuIDAgb3RoZXJ3aXNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBmYWlsLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldENvbnRleHQoUHlPYmplY3QgKmNhcHN1bGUsIHZvaWQgKmNvbnRleHQpCisKKyAgIFNldCB0aGUgY29udGV4dCBwb2ludGVyIGluc2lkZSAqY2Fwc3VsZSogdG8gKmNvbnRleHQqLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgUmV0dXJuIG5vbnplcm8gYW5kIHNldCBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpjYXBzdWxlLCBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yKQorCisgICBTZXQgdGhlIGRlc3RydWN0b3IgaW5zaWRlICpjYXBzdWxlKiB0byAqZGVzdHJ1Y3RvciouCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MuICBSZXR1cm4gbm9uemVybyBhbmQgc2V0IGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldE5hbWUoUHlPYmplY3QgKmNhcHN1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCisKKyAgIFNldCB0aGUgbmFtZSBpbnNpZGUgKmNhcHN1bGUqIHRvICpuYW1lKi4gIElmIG5vbi0qTlVMTCosIHRoZSBuYW1lIG11c3QKKyAgIG91dGxpdmUgdGhlIGNhcHN1bGUuICBJZiB0aGUgcHJldmlvdXMgKm5hbWUqIHN0b3JlZCBpbiB0aGUgY2Fwc3VsZSB3YXMgbm90CisgICAqTlVMTCosIG5vIGF0dGVtcHQgaXMgbWFkZSB0byBmcmVlIGl0LgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgUmV0dXJuIG5vbnplcm8gYW5kIHNldCBhbiBleGNlcHRpb24gb24gZmFpbHVyZS4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q2Fwc3VsZV9TZXRQb2ludGVyKFB5T2JqZWN0ICpjYXBzdWxlLCB2b2lkICpwb2ludGVyKQorCisgICBTZXQgdGhlIHZvaWQgcG9pbnRlciBpbnNpZGUgKmNhcHN1bGUqIHRvICpwb2ludGVyKi4gIFRoZSBwb2ludGVyIG1heSBub3QgYmUKKyAgICpOVUxMKi4KKworICAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJldHVybiBub256ZXJvIGFuZCBzZXQgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29iamVjdC5yc3QgYi9Eb2MvYy1hcGkvY29iamVjdC5yc3QKaW5kZXggMTBmN2JiYS4uNzNmYmJmNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9jb2JqZWN0LnJzdApAQCAtNyw4ICs3LDExIEBACiAKIC4uIGluZGV4Ojogb2JqZWN0OiBDT2JqZWN0CiAKLVJlZmVyIHRvIDpyZWY6YHVzaW5nLWNvYmplY3RzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGVzZSBvYmplY3RzLgogCisuLiB3YXJuaW5nOjoKKworICAgVGhlIENPYmplY3QgQVBJIGlzIGRlcHJlY2F0ZWQgYXMgb2YgUHl0aG9uIDIuNy4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIG5ldworICAgOnJlZjpgY2Fwc3VsZXNgIEFQSS4KIAogLi4gY3R5cGU6OiBQeUNPYmplY3QKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvZGUucnN0IGIvRG9jL2MtYXBpL2NvZGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2Y2E4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvYy1hcGkvY29kZS5yc3QKQEAgLTAsMCArMSw1MCBAQAorLi4gaGlnaGxpZ2h0bGFuZzo6IGMKKworLi4gX2NvZGVvYmplY3RzOgorCitDb2RlIE9iamVjdHMKKy0tLS0tLS0tLS0tLQorCisuLiBzZWN0aW9uYXV0aG9yOjogSmVmZnJleSBZYXNza2luIDxqeWFzc2tpbkBnbWFpbC5jb20+CisKKworLi4gaW5kZXg6OgorICAgb2JqZWN0OiBjb2RlCisKK0NvZGUgb2JqZWN0cyBhcmUgYSBsb3ctbGV2ZWwgZGV0YWlsIG9mIHRoZSBDUHl0aG9uIGltcGxlbWVudGF0aW9uLgorRWFjaCBvbmUgcmVwcmVzZW50cyBhIGNodW5rIG9mIGV4ZWN1dGFibGUgY29kZSB0aGF0IGhhc24ndCB5ZXQgYmVlbgorYm91bmQgaW50byBhIGZ1bmN0aW9uLgorCisuLiBjdHlwZTo6IFB5Q29kZU9iamVjdAorCisgICBUaGUgQyBzdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdHMgdXNlZCB0byBkZXNjcmliZSBjb2RlIG9iamVjdHMuICBUaGUKKyAgIGZpZWxkcyBvZiB0aGlzIHR5cGUgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGF0IGFueSB0aW1lLgorCisKKy4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlDb2RlX1R5cGUKKworICAgVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50aW5nIHRoZSBQeXRob24KKyAgIDpjbGFzczpgY29kZWAgdHlwZS4KKworCisuLiBjZnVuY3Rpb246OiBpbnQgUHlDb2RlX0NoZWNrKFB5T2JqZWN0ICpjbykKKworICAgUmV0dXJuIHRydWUgaWYgKmNvKiBpcyBhIDpjbGFzczpgY29kZWAgb2JqZWN0CisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVfR2V0TnVtRnJlZShQeU9iamVjdCAqY28pCisKKyAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGZyZWUgdmFyaWFibGVzIGluICpjbyouCisKKy4uIGNmdW5jdGlvbjo6IFB5Q29kZU9iamVjdCAqUHlDb2RlX05ldyhpbnQgYXJnY291bnQsIGludCBubG9jYWxzLCBpbnQgc3RhY2tzaXplLCBpbnQgZmxhZ3MsIFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqY29uc3RzLCBQeU9iamVjdCAqbmFtZXMsIFB5T2JqZWN0ICp2YXJuYW1lcywgUHlPYmplY3QgKmZyZWV2YXJzLCBQeU9iamVjdCAqY2VsbHZhcnMsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKm5hbWUsIGludCBmaXJzdGxpbmVubywgUHlPYmplY3QgKmxub3RhYikKKworICAgUmV0dXJuIGEgbmV3IGNvZGUgb2JqZWN0LiAgSWYgeW91IG5lZWQgYSBkdW1teSBjb2RlIG9iamVjdCB0bworICAgY3JlYXRlIGEgZnJhbWUsIHVzZSA6Y2Z1bmM6YFB5Q29kZV9OZXdFbXB0eWAgaW5zdGVhZC4gIENhbGxpbmcKKyAgIDpjZnVuYzpgUHlDb2RlX05ld2AgZGlyZWN0bHkgY2FuIGJpbmQgeW91IHRvIGEgcHJlY2lzZSBQeXRob24KKyAgIHZlcnNpb24gc2luY2UgdGhlIGRlZmluaXRpb24gb2YgdGhlIGJ5dGVjb2RlIGNoYW5nZXMgb2Z0ZW4uCisKKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZV9OZXdFbXB0eShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVuY25hbWUsIGludCBmaXJzdGxpbmVubykKKworICAgUmV0dXJuIGEgbmV3IGVtcHR5IGNvZGUgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgIGZ1bmN0aW9uIG5hbWUsIGFuZCBmaXJzdCBsaW5lIG51bWJlci4gIEl0IGlzIGlsbGVnYWwgdG8KKyAgIDprZXl3b3JkOmBleGVjYCBvciA6ZnVuYzpgZXZhbGAgdGhlIHJlc3VsdGluZyBjb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb2RlYy5yc3QgYi9Eb2MvYy1hcGkvY29kZWMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTdkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvYy1hcGkvY29kZWMucnN0CkBAIC0wLDAgKzEsMTE4IEBACisuLiBfY29kZWMtcmVnaXN0cnk6CisKK0NvZGVjIHJlZ2lzdHJ5IGFuZCBzdXBwb3J0IGZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVjX1JlZ2lzdGVyKFB5T2JqZWN0ICpzZWFyY2hfZnVuY3Rpb24pCisKKyAgIFJlZ2lzdGVyIGEgbmV3IGNvZGVjIHNlYXJjaCBmdW5jdGlvbi4KKworICAgQXMgc2lkZSBlZmZlY3QsIHRoaXMgdHJpZXMgdG8gbG9hZCB0aGUgOm1vZDpgZW5jb2RpbmdzYCBwYWNrYWdlLCBpZiBub3QgeWV0CisgICBkb25lLCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBhbHdheXMgZmlyc3QgaW4gdGhlIGxpc3Qgb2Ygc2VhcmNoIGZ1bmN0aW9ucy4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZWNfS25vd25FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZykKKworICAgUmV0dXJuIGBgMWBgIG9yIGBgMGBgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIGlzIGEgcmVnaXN0ZXJlZCBjb2RlYyBmb3IKKyAgIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19FbmNvZGUoUHlPYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2VuZXJpYyBjb2RlYyBiYXNlZCBlbmNvZGluZyBBUEkuCisKKyAgICpvYmplY3QqIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBlbmNvZGVyIGZ1bmN0aW9uIGZvdW5kIGZvciB0aGUgZ2l2ZW4KKyAgICplbmNvZGluZyogdXNpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1ldGhvZCBkZWZpbmVkIGJ5ICplcnJvcnMqLiAgKmVycm9ycyogbWF5CisgICBiZSAqTlVMTCogdG8gdXNlIHRoZSBkZWZhdWx0IG1ldGhvZCBkZWZpbmVkIGZvciB0aGUgY29kZWMuICBSYWlzZXMgYQorICAgOmV4YzpgTG9va3VwRXJyb3JgIGlmIG5vIGVuY29kZXIgY2FuIGJlIGZvdW5kLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19EZWNvZGUoUHlPYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2VuZXJpYyBjb2RlYyBiYXNlZCBkZWNvZGluZyBBUEkuCisKKyAgICpvYmplY3QqIGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBkZWNvZGVyIGZ1bmN0aW9uIGZvdW5kIGZvciB0aGUgZ2l2ZW4KKyAgICplbmNvZGluZyogdXNpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1ldGhvZCBkZWZpbmVkIGJ5ICplcnJvcnMqLiAgKmVycm9ycyogbWF5CisgICBiZSAqTlVMTCogdG8gdXNlIHRoZSBkZWZhdWx0IG1ldGhvZCBkZWZpbmVkIGZvciB0aGUgY29kZWMuICBSYWlzZXMgYQorICAgOmV4YzpgTG9va3VwRXJyb3JgIGlmIG5vIGVuY29kZXIgY2FuIGJlIGZvdW5kLgorCisKK0NvZGVjIGxvb2t1cCBBUEkKKy0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIHRoZSAqZW5jb2RpbmcqIHN0cmluZyBpcyBsb29rZWQgdXAgY29udmVydGVkIHRvIGFsbAorbG93ZXItY2FzZSBjaGFyYWN0ZXJzLCB3aGljaCBtYWtlcyBlbmNvZGluZ3MgbG9va2VkIHVwIHRocm91Z2ggdGhpcyBtZWNoYW5pc20KK2VmZmVjdGl2ZWx5IGNhc2UtaW5zZW5zaXRpdmUuICBJZiBubyBjb2RlYyBpcyBmb3VuZCwgYSA6ZXhjOmBLZXlFcnJvcmAgaXMgc2V0CithbmQgKk5VTEwqIHJldHVybmVkLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19FbmNvZGVyKGNvbnN0IGNoYXIgKmVuY29kaW5nKQorCisgICBHZXQgYW4gZW5jb2RlciBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0RlY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCisKKyAgIEdldCBhIGRlY29kZXIgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2V0IGFuIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYCBvYmplY3QgZm9yIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2V0IGFuIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCBvYmplY3QgZm9yIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19TdHJlYW1SZWFkZXIoY29uc3QgY2hhciAqZW5jb2RpbmcsIFB5T2JqZWN0ICpzdHJlYW0sIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2V0IGEgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGZhY3RvcnkgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19TdHJlYW1Xcml0ZXIoY29uc3QgY2hhciAqZW5jb2RpbmcsIFB5T2JqZWN0ICpzdHJlYW0sIGNvbnN0IGNoYXIgKmVycm9ycykKKworICAgR2V0IGEgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGZhY3RvcnkgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgorCisKK1JlZ2lzdHJ5IEFQSSBmb3IgVW5pY29kZSBlbmNvZGluZyBlcnJvciBoYW5kbGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVjX1JlZ2lzdGVyRXJyb3IoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmVycm9yKQorCisgICBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gKmVycm9yKiB1bmRlciB0aGUgZ2l2ZW4gKm5hbWUqLgorICAgVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBhIGNvZGVjIHdoZW4gaXQgZW5jb3VudGVycworICAgdW5lbmNvZGFibGUgY2hhcmFjdGVycy91bmRlY29kYWJsZSBieXRlcyBhbmQgKm5hbWUqIGlzIHNwZWNpZmllZCBhcyB0aGUgZXJyb3IKKyAgIHBhcmFtZXRlciBpbiB0aGUgY2FsbCB0byB0aGUgZW5jb2RlL2RlY29kZSBmdW5jdGlvbi4KKworICAgVGhlIGNhbGxiYWNrIGdldHMgYSBzaW5nbGUgYXJndW1lbnQsIGFuIGluc3RhbmNlIG9mCisgICA6ZXhjOmBVbmljb2RlRW5jb2RlRXJyb3JgLCA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgIG9yCisgICA6ZXhjOmBVbmljb2RlVHJhbnNsYXRlRXJyb3JgIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2JsZW1hdGljCisgICBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIG9yIGJ5dGVzIGFuZCB0aGVpciBvZmZzZXQgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyAoc2VlCisgICA6cmVmOmB1bmljb2RlZXhjZXB0aW9uc2AgZm9yIGZ1bmN0aW9ucyB0byBleHRyYWN0IHRoaXMgaW5mb3JtYXRpb24pLiAgVGhlCisgICBjYWxsYmFjayBtdXN0IGVpdGhlciByYWlzZSB0aGUgZ2l2ZW4gZXhjZXB0aW9uLCBvciByZXR1cm4gYSB0d28taXRlbSB0dXBsZQorICAgY29udGFpbmluZyB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBwcm9ibGVtYXRpYyBzZXF1ZW5jZSwgYW5kIGFuIGludGVnZXIKKyAgIGdpdmluZyB0aGUgb2Zmc2V0IGluIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgd2hpY2ggZW5jb2RpbmcvZGVjb2Rpbmcgc2hvdWxkIGJlCisgICByZXN1bWVkLgorCisgICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcywgYGAtMWBgIG9uIGVycm9yLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19Mb29rdXBFcnJvcihjb25zdCBjaGFyICpuYW1lKQorCisgICBMb29rdXAgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgKm5hbWUqLiAgQXMgYQorICAgc3BlY2lhbCBjYXNlICpOVUxMKiBjYW4gYmUgcGFzc2VkLCBpbiB3aGljaCBjYXNlIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjaworICAgZm9yICJzdHJpY3QiIHdpbGwgYmUgcmV0dXJuZWQuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmljdEVycm9ycyhQeU9iamVjdCAqZXhjKQorCisgICBSYWlzZSAqZXhjKiBhcyBhbiBleGNlcHRpb24uCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0lnbm9yZUVycm9ycyhQeU9iamVjdCAqZXhjKQorCisgICBJZ25vcmUgdGhlIHVuaWNvZGUgZXJyb3IsIHNraXBwaW5nIHRoZSBmYXVsdHkgaW5wdXQuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1JlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKKworICAgUmVwbGFjZSB0aGUgdW5pY29kZSBlbmNvZGUgZXJyb3Igd2l0aCBgYD9gYCBvciBgYFUrRkZGRGBgLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQorCisgICBSZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQorCisgICBSZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIGJhY2tzbGFzaCBlc2NhcGVzIChgYFx4YGAsIGBgXHVgYCBhbmQKKyAgIGBgXFVgYCkuCisKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QgYi9Eb2MvYy1hcGkvY29uY3JldGUucnN0CmluZGV4IDY5NTg2NDYuLjVlZTYxMWIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKKysrIGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdApAQCAtMTAwLDggKzEwMCwxMCBAQAogICAgZGVzY3JpcHRvci5yc3QKICAgIHNsaWNlLnJzdAogICAgd2Vha3JlZi5yc3QKKyAgIGNhcHN1bGUucnN0CiAgICBjb2JqZWN0LnJzdAogICAgY2VsbC5yc3QKICAgIGdlbi5yc3QKICAgIGRhdGV0aW1lLnJzdAogICAgc2V0LnJzdAorICAgY29kZS5yc3QKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdCBiL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdAppbmRleCAwYzgxYmMwLi5iMzIxMDBiIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QKKysrIGIvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0CkBAIC01MSw2ICs1MSw0MCBAQAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSBsb2NhbGUtaW5kZXBlbmRlbnQgc3RyaW5nIHRvIG51bWJlciBjb252ZXJzaW9ucy4KIAogCisuLiBjZnVuY3Rpb246OiBkb3VibGUgUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0IGNoYXIgKnMsIGNoYXIgKiplbmRwdHIsIFB5T2JqZWN0ICpvdmVyZmxvd19leGNlcHRpb24pCisKKyAgIENvbnZlcnQgYSBzdHJpbmcgYGBzYGAgdG8gYSA6Y3R5cGU6YGRvdWJsZWAsIHJhaXNpbmcgYSBQeXRob24KKyAgIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLiAgVGhlIHNldCBvZiBhY2NlcHRlZCBzdHJpbmdzIGNvcnJlc3BvbmRzIHRvCisgICB0aGUgc2V0IG9mIHN0cmluZ3MgYWNjZXB0ZWQgYnkgUHl0aG9uJ3MgOmZ1bmM6YGZsb2F0YCBjb25zdHJ1Y3RvciwKKyAgIGV4Y2VwdCB0aGF0IGBgc2BgIG11c3Qgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgVGhlIGNvbnZlcnNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGN1cnJlbnQgbG9jYWxlLgorCisgICBJZiBgYGVuZHB0cmBgIGlzIGBgTlVMTGBgLCBjb252ZXJ0IHRoZSB3aG9sZSBzdHJpbmcuICBSYWlzZQorICAgVmFsdWVFcnJvciBhbmQgcmV0dXJuIGBgLTEuMGBgIGlmIHRoZSBzdHJpbmcgaXMgbm90IGEgdmFsaWQKKyAgIHJlcHJlc2VudGF0aW9uIG9mIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorCisgICBJZiBlbmRwdHIgaXMgbm90IGBgTlVMTGBgLCBjb252ZXJ0IGFzIG11Y2ggb2YgdGhlIHN0cmluZyBhcworICAgcG9zc2libGUgYW5kIHNldCBgYCplbmRwdHJgYCB0byBwb2ludCB0byB0aGUgZmlyc3QgdW5jb252ZXJ0ZWQKKyAgIGNoYXJhY3Rlci4gIElmIG5vIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgc3RyaW5nIGlzIHRoZSB2YWxpZAorICAgcmVwcmVzZW50YXRpb24gb2YgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIHNldCBgYCplbmRwdHJgYCB0byBwb2ludAorICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCByYWlzZSBWYWx1ZUVycm9yLCBhbmQgcmV0dXJuCisgICBgYC0xLjBgYC4KKworICAgSWYgYGBzYGAgcmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgaXMgdG9vIGxhcmdlIHRvIHN0b3JlIGluIGEgZmxvYXQKKyAgIChmb3IgZXhhbXBsZSwgYGAiMWU1MDAiYGAgaXMgc3VjaCBhIHN0cmluZyBvbiBtYW55IHBsYXRmb3JtcykgdGhlbgorICAgaWYgYGBvdmVyZmxvd19leGNlcHRpb25gYCBpcyBgYE5VTExgYCByZXR1cm4gYGBQeV9IVUdFX1ZBTGBgICh3aXRoCisgICBhbiBhcHByb3ByaWF0ZSBzaWduKSBhbmQgZG9uJ3Qgc2V0IGFueSBleGNlcHRpb24uICBPdGhlcndpc2UsCisgICBgYG92ZXJmbG93X2V4Y2VwdGlvbmBgIG11c3QgcG9pbnQgdG8gYSBQeXRob24gZXhjZXB0aW9uIG9iamVjdDsKKyAgIHJhaXNlIHRoYXQgZXhjZXB0aW9uIGFuZCByZXR1cm4gYGAtMS4wYGAuICBJbiBib3RoIGNhc2VzLCBzZXQKKyAgIGBgKmVuZHB0cmBgIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KKworICAgSWYgYW55IG90aGVyIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gKGZvciBleGFtcGxlIGFuCisgICBvdXQtb2YtbWVtb3J5IGVycm9yKSwgc2V0IHRoZSBhcHByb3ByaWF0ZSBQeXRob24gZXhjZXB0aW9uIGFuZAorICAgcmV0dXJuIGBgLTEuMGBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBjZnVuY3Rpb246OiBkb3VibGUgUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIAogICAgQ29udmVydCBhIHN0cmluZyB0byBhIDpjdHlwZTpgZG91YmxlYC4gVGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgdGhlIFN0YW5kYXJkIEMKQEAgLTYwLDEyICs5NCwxNiBAQAogICAgOmNmdW5jOmBQeU9TX2FzY2lpX3N0cnRvZGAgc2hvdWxkIHR5cGljYWxseSBiZSB1c2VkIGZvciByZWFkaW5nIGNvbmZpZ3VyYXRpb24KICAgIGZpbGVzIG9yIG90aGVyIG5vbi11c2VyIGlucHV0IHRoYXQgc2hvdWxkIGJlIGxvY2FsZSBpbmRlcGVuZGVudC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMi40Ci0KICAgIFNlZSB0aGUgVW5peCBtYW4gcGFnZSA6bWFucGFnZTpgc3RydG9kKDIpYCBmb3IgZGV0YWlscy4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMi40CiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIgKiBQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgY2hhciAqZm9ybWF0LCBkb3VibGUgZCkKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSA6Y2Z1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgaW5zdGVhZC4KKworCisKKy4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICpidWZmZXIsIHNpemVfdCBidWZfbGVuLCBjb25zdCBjaGFyICpmb3JtYXQsIGRvdWJsZSBkKQogCiAgICBDb252ZXJ0IGEgOmN0eXBlOmBkb3VibGVgIHRvIGEgc3RyaW5nIHVzaW5nIHRoZSBgYCcuJ2BgIGFzIHRoZSBkZWNpbWFsCiAgICBzZXBhcmF0b3IuICpmb3JtYXQqIGlzIGEgOmNmdW5jOmBwcmludGZgXCAtc3R5bGUgZm9ybWF0IHN0cmluZyBzcGVjaWZ5aW5nIHRoZQpAQCAtNzYsMTggKzExNCw1OCBAQAogICAgdGhlIGNvbnZlcnNpb24gZmFpbGVkLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMi43IGFuZCAzLjEuICBVc2UgOmZ1bmM6YFB5T1NfZG91YmxlX3RvX3N0cmluZ2AKKyAgICAgIGluc3RlYWQuCisKKworLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19kb3VibGVfdG9fc3RyaW5nKGRvdWJsZSB2YWwsIGNoYXIgZm9ybWF0X2NvZGUsIGludCBwcmVjaXNpb24sIGludCBmbGFncywgaW50ICpwdHlwZSkKKworICAgQ29udmVydCBhIDpjdHlwZTpgZG91YmxlYCAqdmFsKiB0byBhIHN0cmluZyB1c2luZyBzdXBwbGllZAorICAgKmZvcm1hdF9jb2RlKiwgKnByZWNpc2lvbiosIGFuZCAqZmxhZ3MqLgorCisgICAqZm9ybWF0X2NvZGUqIG11c3QgYmUgb25lIG9mIGBgJ2UnYGAsIGBgJ0UnYGAsIGBgJ2YnYGAsIGBgJ0YnYGAsCisgICBgYCdnJ2BgLCBgYCdHJ2BgIG9yIGBgJ3InYGAuICBGb3IgYGAncidgYCwgdGhlIHN1cHBsaWVkICpwcmVjaXNpb24qCisgICBtdXN0IGJlIDAgYW5kIGlzIGlnbm9yZWQuICBUaGUgYGAncidgYCBmb3JtYXQgY29kZSBzcGVjaWZpZXMgdGhlCisgICBzdGFuZGFyZCA6ZnVuYzpgcmVwcmAgZm9ybWF0LgorCisgICAqZmxhZ3MqIGNhbiBiZSB6ZXJvIG9yIG1vcmUgb2YgdGhlIHZhbHVlcyAqUHlfRFRTRl9TSUdOKiwKKyAgICpQeV9EVFNGX0FERF9ET1RfMCosIG9yICpQeV9EVFNGX0FMVCosIG9yLWVkIHRvZ2V0aGVyOgorCisgICAqICpQeV9EVFNGX1NJR04qIG1lYW5zIHRvIGFsd2F5cyBwcmVjZWRlIHRoZSByZXR1cm5lZCBzdHJpbmcgd2l0aCBhIHNpZ24KKyAgICAgY2hhcmFjdGVyLCBldmVuIGlmICp2YWwqIGlzIG5vbi1uZWdhdGl2ZS4KKworICAgKiAqUHlfRFRTRl9BRERfRE9UXzAqIG1lYW5zIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBub3QgbG9vaworICAgICBsaWtlIGFuIGludGVnZXIuCisKKyAgICogKlB5X0RUU0ZfQUxUKiBtZWFucyB0byBhcHBseSAiYWx0ZXJuYXRlIiBmb3JtYXR0aW5nIHJ1bGVzLiAgU2VlIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNmdW5jOmBQeU9TX3NucHJpbnRmYCBgYCcjJ2BgIHNwZWNpZmllciBmb3IKKyAgICAgZGV0YWlscy4KKworICAgSWYgKnB0eXBlKiBpcyBub24tTlVMTCwgdGhlbiB0aGUgdmFsdWUgaXQgcG9pbnRzIHRvIHdpbGwgYmUgc2V0IHRvIG9uZSBvZgorICAgKlB5X0RUU1RfRklOSVRFKiwgKlB5X0RUU1RfSU5GSU5JVEUqLCBvciAqUHlfRFRTVF9OQU4qLCBzaWduaWZ5aW5nIHRoYXQKKyAgICp2YWwqIGlzIGEgZmluaXRlIG51bWJlciwgYW4gaW5maW5pdGUgbnVtYmVyLCBvciBub3QgYSBudW1iZXIsIHJlc3BlY3RpdmVseS4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gKmJ1ZmZlciogd2l0aCB0aGUgY29udmVydGVkIHN0cmluZyBvcgorICAgKk5VTEwqIGlmIHRoZSBjb252ZXJzaW9uIGZhaWxlZC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUKKyAgIHJldHVybmVkIHN0cmluZyBieSBjYWxsaW5nIDpjZnVuYzpgUHlNZW1fRnJlZWAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAKIC4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeU9TX2FzY2lpX2F0b2YoY29uc3QgY2hhciAqbnB0cikKIAogICAgQ29udmVydCBhIHN0cmluZyB0byBhIDpjdHlwZTpgZG91YmxlYCBpbiBhIGxvY2FsZS1pbmRlcGVuZGVudCB3YXkuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAotCiAgICBTZWUgdGhlIFVuaXggbWFuIHBhZ2UgOm1hbnBhZ2U6YGF0b2YoMilgIGZvciBkZXRhaWxzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAotLi4gY2Z1bmN0aW9uOjogY2hhciAqIFB5T1Nfc3RyaWNtcChjaGFyICpzMSwgY2hhciAqczIpCisgICAuLiBkZXByZWNhdGVkOjogMy4xCisgICAgICBVc2UgOmNmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGluc3RlYWQuCisKKworLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19zdHJpY21wKGNoYXIgKnMxLCBjaGFyICpzMikKIAogICAgQ2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIHN0cmluZ3MuIFRoZSBmdW5jdGlvbiB3b3JrcyBhbG1vc3QKICAgIGlkZW50aWNhbGx5IHRvIDpjZnVuYzpgc3RyY21wYCBleGNlcHQgdGhhdCBpdCBpZ25vcmVzIHRoZSBjYXNlLgpAQCAtOTUsNyArMTczLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIgKiBQeU9TX3N0cm5pY21wKGNoYXIgKnMxLCBjaGFyICpzMiwgUHlfc3NpemVfdCAgc2l6ZSkKKy4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5T1Nfc3RybmljbXAoY2hhciAqczEsIGNoYXIgKnMyLCBQeV9zc2l6ZV90ICBzaXplKQogCiAgICBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Ygc3RyaW5ncy4gVGhlIGZ1bmN0aW9uIHdvcmtzIGFsbW9zdAogICAgaWRlbnRpY2FsbHkgdG8gOmNmdW5jOmBzdHJuY21wYCBleGNlcHQgdGhhdCBpdCBpZ25vcmVzIHRoZSBjYXNlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2RpY3QucnN0IGIvRG9jL2MtYXBpL2RpY3QucnN0CmluZGV4IGVkMDdmNjYuLjA2NmU3ZjEgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9kaWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvZGljdC5yc3QKQEAgLTE5OSw4ICsxOTksOCBAQAogLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9NZXJnZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvdmVycmlkZSkKIAogICAgSXRlcmF0ZSBvdmVyIG1hcHBpbmcgb2JqZWN0ICpiKiBhZGRpbmcga2V5LXZhbHVlIHBhaXJzIHRvIGRpY3Rpb25hcnkgKmEqLgotICAgKmIqIG1heSBiZSBhIGRpY3Rpb25hcnksIG9yIGFueSBvYmplY3Qgc3VwcG9ydGluZyA6ZnVuYzpgUHlNYXBwaW5nX0tleXNgCi0gICBhbmQgOmZ1bmM6YFB5T2JqZWN0X0dldEl0ZW1gLiBJZiAqb3ZlcnJpZGUqIGlzIHRydWUsIGV4aXN0aW5nIHBhaXJzIGluICphKgorICAgKmIqIG1heSBiZSBhIGRpY3Rpb25hcnksIG9yIGFueSBvYmplY3Qgc3VwcG9ydGluZyA6Y2Z1bmM6YFB5TWFwcGluZ19LZXlzYAorICAgYW5kIDpjZnVuYzpgUHlPYmplY3RfR2V0SXRlbWAuIElmICpvdmVycmlkZSogaXMgdHJ1ZSwgZXhpc3RpbmcgcGFpcnMgaW4gKmEqCiAgICB3aWxsIGJlIHJlcGxhY2VkIGlmIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kIGluICpiKiwgb3RoZXJ3aXNlIHBhaXJzIHdpbGwKICAgIG9ubHkgYmUgYWRkZWQgaWYgdGhlcmUgaXMgbm90IGEgbWF0Y2hpbmcga2V5IGluICphKi4gUmV0dXJuIGBgMGBgIG9uCiAgICBzdWNjZXNzIG9yIGBgLTFgYCBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdCBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdAppbmRleCAxNDFmMzU3Li5lOWNlZDBiIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CkBAIC0xNTEsNjQgKzE1MSwxMCBAQAogCiAuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfRm9ybWF0KFB5T2JqZWN0ICpleGNlcHRpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCi0gICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGVycm9yIGluZGljYXRvciBhbmQgcmV0dXJucyAqTlVMTCouICpleGNlcHRpb24qIHNob3VsZCBiZQotICAgYSBQeXRob24gZXhjZXB0aW9uIChjbGFzcywgbm90IGFuIGluc3RhbmNlKS4gICpmb3JtYXQqIHNob3VsZCBiZSBhIHN0cmluZywKLSAgIGNvbnRhaW5pbmcgZm9ybWF0IGNvZGVzLCBzaW1pbGFyIHRvIDpjZnVuYzpgcHJpbnRmYC4gVGhlIGBgd2lkdGgucHJlY2lzaW9uYGAKLSAgIGJlZm9yZSBhIGZvcm1hdCBjb2RlIGlzIHBhcnNlZCwgYnV0IHRoZSB3aWR0aCBwYXJ0IGlzIGlnbm9yZWQuCi0KLSAgIC4uICUgVGhpcyBzaG91bGQgYmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgdGFibGUgaW4gUHlTdHJpbmdfRnJvbUZvcm1hdC4KLSAgIC4uICUgT25lIHNob3VsZCBqdXN0IHJlZmVyIHRvIHRoZSBvdGhlci4KLSAgIC4uICUgVGhlIGRlc2NyaXB0aW9ucyBmb3IgJXpkIGFuZCAlenUgYXJlIHdyb25nLCBidXQgdGhlIHRydXRoIGlzIGNvbXBsaWNhdGVkCi0gICAuLiAlIGJlY2F1c2Ugbm90IGFsbCBjb21waWxlcnMgc3VwcG9ydCB0aGUgJXogd2lkdGggbW9kaWZpZXIgLS0gd2UgZmFrZSBpdAotICAgLi4gJSB3aGVuIG5lY2Vzc2FyeSB2aWEgaW50ZXJwb2xhdGluZyBQWV9GT1JNQVRfU0laRV9ULgotICAgLi4gJSAldSwgJWx1LCAlenUgc2hvdWxkIGhhdmUgIm5ldyBpbiBQeXRob24gMi41IiBibHVyYnMuCi0KLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgRm9ybWF0IENoYXJhY3RlcnMgfCBUeXBlICAgICAgICAgIHwgQ29tbWVudCAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLSAgIHwgOmF0dHI6YCUlYCAgICAgICAgfCAqbi9hKiAgICAgICAgIHwgVGhlIGxpdGVyYWwgJSBjaGFyYWN0ZXIuICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVjYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgQSBzaW5nbGUgY2hhcmFjdGVyLCAgICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgcmVwcmVzZW50ZWQgYXMgYW4gQyBpbnQuICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVkYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVkIilgYC4gICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCV1YCAgICAgICAgfCB1bnNpZ25lZCBpbnQgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV1IilgYC4gICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVsZGAgICAgICAgfCBsb25nICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsZCIpYGAuICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVsdWAgICAgICAgfCB1bnNpZ25lZCBsb25nIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsdSIpYGAuICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCV6ZGAgICAgICAgfCBQeV9zc2l6ZV90ICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6ZCIpYGAuICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCV6dWAgICAgICAgfCBzaXplX3QgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6dSIpYGAuICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVpYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVpIilgYC4gICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCV4YCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV4IilgYC4gICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVzYCAgICAgICAgfCBjaGFyXCogICAgICAgIHwgQSBudWxsLXRlcm1pbmF0ZWQgQyBjaGFyYWN0ZXIgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYXJyYXkuICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVwYCAgICAgICAgfCB2b2lkXCogICAgICAgIHwgVGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIEMgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgcG9pbnRlci4gTW9zdGx5IGVxdWl2YWxlbnQgdG8gIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVwIilgYCBleGNlcHQgdGhhdCAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgaXQgaXMgZ3VhcmFudGVlZCB0byBzdGFydCB3aXRoIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgdGhlIGxpdGVyYWwgYGAweGBgIHJlZ2FyZGxlc3MgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgb2Ygd2hhdCB0aGUgcGxhdGZvcm0ncyAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGZgYCB5aWVsZHMuICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgQW4gdW5yZWNvZ25pemVkIGZvcm1hdCBjaGFyYWN0ZXIgY2F1c2VzIGFsbCB0aGUgcmVzdCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBiZQotICAgY29waWVkIGFzLWlzIHRvIHRoZSByZXN1bHQgc3RyaW5nLCBhbmQgYW55IGV4dHJhIGFyZ3VtZW50cyBkaXNjYXJkZWQuCisgICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGVycm9yIGluZGljYXRvciBhbmQgcmV0dXJucyAqTlVMTCouICAqZXhjZXB0aW9uKgorICAgc2hvdWxkIGJlIGEgUHl0aG9uIGV4Y2VwdGlvbiBjbGFzcy4gIFRoZSAqZm9ybWF0KiBhbmQgc3Vic2VxdWVudAorICAgcGFyYW1ldGVycyBoZWxwIGZvcm1hdCB0aGUgZXJyb3IgbWVzc2FnZTsgdGhleSBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYW5kCisgICB2YWx1ZXMgYXMgaW4gOmNmdW5jOmBQeVN0cmluZ19Gcm9tRm9ybWF0YC4KIAogCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKnR5cGUpCkBAIC00MTcsNiArMzYzLDE1IEBACiAgICBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZGljdGlvbmFyeSBvZiBjbGFzcyB2YXJpYWJsZXMgYW5kIG1ldGhvZHMuCiAKIAorLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoY2hhciAqbmFtZSwgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpCisKKyAgIFNhbWUgYXMgOmNmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25gLCBleGNlcHQgdGhhdCB0aGUgbmV3IGV4Y2VwdGlvbiBjbGFzcyBjYW4KKyAgIGVhc2lseSBiZSBnaXZlbiBhIGRvY3N0cmluZzogSWYgKmRvYyogaXMgbm9uLSpOVUxMKiwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZQorICAgZG9jc3RyaW5nIGZvciB0aGUgZXhjZXB0aW9uIGNsYXNzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqb2JqKQogCiAgICBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlIHRvIGBgc3lzLnN0ZGVycmBgIHdoZW4gYW4KQEAgLTQyOSw2ICszODQsODMgQEAKICAgIHRoZSB3YXJuaW5nIG1lc3NhZ2UuCiAKIAorLi4gX3VuaWNvZGVleGNlcHRpb25zOgorCitVbmljb2RlIEV4Y2VwdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IFVuaWNvZGUgZXhjZXB0aW9ucyBmcm9tIEMuCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKm9iamVjdCwgUHlfc3NpemVfdCBsZW5ndGgsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBjb25zdCBjaGFyICpyZWFzb24pCisKKyAgIENyZWF0ZSBhIDpjbGFzczpgVW5pY29kZURlY29kZUVycm9yYCBvYmplY3Qgd2l0aCB0aGUgYXR0cmlidXRlcyAqZW5jb2RpbmcqLAorICAgKm9iamVjdCosICpsZW5ndGgqLCAqc3RhcnQqLCAqZW5kKiBhbmQgKnJlYXNvbiouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IFB5X1VOSUNPREUgKm9iamVjdCwgUHlfc3NpemVfdCBsZW5ndGgsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBjb25zdCBjaGFyICpyZWFzb24pCisKKyAgIENyZWF0ZSBhIDpjbGFzczpgVW5pY29kZUVuY29kZUVycm9yYCBvYmplY3Qgd2l0aCB0aGUgYXR0cmlidXRlcyAqZW5jb2RpbmcqLAorICAgKm9iamVjdCosICpsZW5ndGgqLCAqc3RhcnQqLCAqZW5kKiBhbmQgKnJlYXNvbiouCisKKy4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGUoY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKKworICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlVHJhbnNsYXRlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICpvYmplY3QqLAorICAgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nKFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcoUHlPYmplY3QgKmV4YykKKworICAgUmV0dXJuIHRoZSAqZW5jb2RpbmcqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdC4KKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdChQeU9iamVjdCAqZXhjKQorICAgICAgICAgICAgICAgUHlPYmplY3QqIFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdChQeU9iamVjdCAqZXhjKQorICAgICAgICAgICAgICAgUHlPYmplY3QqIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdChQeU9iamVjdCAqZXhjKQorCisgICBSZXR1cm4gdGhlICpvYmplY3QqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdC4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKnN0YXJ0KQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKnN0YXJ0KQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKnN0YXJ0KQorCisgICBHZXQgdGhlICpzdGFydCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IGFuZCBwbGFjZSBpdCBpbnRvCisgICAqXCpzdGFydCouICAqc3RhcnQqIG11c3Qgbm90IGJlICpOVUxMKi4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24KKyAgIGZhaWx1cmUuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3Qgc3RhcnQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBzdGFydCkKKworICAgU2V0IHRoZSAqc3RhcnQqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdCB0byAqc3RhcnQqLiAgUmV0dXJuCisgICBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24gZmFpbHVyZS4KKworLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKmVuZCkKKyAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqZW5kKQorCisgICBHZXQgdGhlICplbmQqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdCBhbmQgcGxhY2UgaXQgaW50bworICAgKlwqZW5kKi4gICplbmQqIG11c3Qgbm90IGJlICpOVUxMKi4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24KKyAgIGZhaWx1cmUuCisKKy4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBlbmQpCisgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgZW5kKQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IGVuZCkKKworICAgU2V0IHRoZSAqZW5kKiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QgdG8gKmVuZCouICBSZXR1cm4gYGAwYGAKKyAgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbiBmYWlsdXJlLgorCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uKFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uKFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uKFB5T2JqZWN0ICpleGMpCisKKyAgIFJldHVybiB0aGUgKnJlYXNvbiogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0LgorCisuLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKKyAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24oUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqcmVhc29uKQorICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbihQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpyZWFzb24pCisKKyAgIFNldCB0aGUgKnJlYXNvbiogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IHRvICpyZWFzb24qLiAgUmV0dXJuCisgICBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24gZmFpbHVyZS4KKworCiBSZWN1cnNpb24gQ29udHJvbAogPT09PT09PT09PT09PT09PT0KIApAQCAtNTc4LDE0ICs2MTAsMTAgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCiAKLURlcHJlY2F0aW9uIG9mIFN0cmluZyBFeGNlcHRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU3RyaW5nIEV4Y2VwdGlvbnMKKz09PT09PT09PT09PT09PT09CiAKLS4uIGluZGV4Ojogc2luZ2xlOiBCYXNlRXhjZXB0aW9uIChidWlsdC1pbiBleGNlcHRpb24pCi0KLUFsbCBleGNlcHRpb25zIGJ1aWx0IGludG8gUHl0aG9uIG9yIHByb3ZpZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBkZXJpdmVkCi1mcm9tIDpleGM6YEJhc2VFeGNlcHRpb25gLgotCi1TdHJpbmcgZXhjZXB0aW9ucyBhcmUgc3RpbGwgc3VwcG9ydGVkIGluIHRoZSBpbnRlcnByZXRlciB0byBhbGxvdyBleGlzdGluZyBjb2RlCi10byBydW4gdW5tb2RpZmllZCwgYnV0IHRoaXMgd2lsbCBhbHNvIGNoYW5nZSBpbiBhIGZ1dHVyZSByZWxlYXNlLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKKyAgIEFsbCBleGNlcHRpb25zIHRvIGJlIHJhaXNlZCBvciBjYXVnaHQgbXVzdCBiZSBkZXJpdmVkIGZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAuCisgICBUcnlpbmcgdG8gcmFpc2UgYSBzdHJpbmcgZXhjZXB0aW9uIG5vdyByYWlzZXMgOmV4YzpgVHlwZUVycm9yYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2ZpbGUucnN0IGIvRG9jL2MtYXBpL2ZpbGUucnN0CmluZGV4IDVkNzQzNTUuLmJkYjhjNDkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9maWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKQEAgLTYzLDcgKzYzLDcgQEAKICAgIFJldHVybiB0aGUgZmlsZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoICpwKiBhcyBhIDpjdHlwZTpgRklMRVwqYC4KIAogICAgSWYgdGhlIGNhbGxlciB3aWxsIGV2ZXIgdXNlIHRoZSByZXR1cm5lZCA6Y3R5cGU6YEZJTEVcKmAgb2JqZWN0IHdoaWxlCi0gICB0aGUgR0lMIGlzIHJlbGVhc2VkIGl0IG11c3QgYWxzbyBjYWxsIHRoZSA6Y2Z1bmM6YFB5RmlsZV9JbmNVc2VDb3VudGAgYW5kCisgICB0aGUgOnRlcm06YEdJTGAgaXMgcmVsZWFzZWQgaXQgbXVzdCBhbHNvIGNhbGwgdGhlIDpjZnVuYzpgUHlGaWxlX0luY1VzZUNvdW50YCBhbmQKICAgIDpjZnVuYzpgUHlGaWxlX0RlY1VzZUNvdW50YCBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93IGFzIGFwcHJvcHJpYXRlLgogCiAKQEAgLTc2LDEwICs3NiwxOSBAQAogICAgZmluaXNoZWQgd2l0aCB0aGUgOmN0eXBlOmBGSUxFXCpgLiAgT3RoZXJ3aXNlIHRoZSBmaWxlIG9iamVjdCB3aWxsCiAgICBuZXZlciBiZSBjbG9zZWQgYnkgUHl0aG9uLgogCi0gICBUaGUgR0lMIG11c3QgYmUgaGVsZCB3aGlsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICBUaGUgOnRlcm06YEdJTGAgbXVzdCBiZSBoZWxkIHdoaWxlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KIAotICAgVGhlIHN1Z2dlc3RlZCB1c2UgaXMgdG8gY2FsbCB0aGlzIGFmdGVyIDpjZnVuYzpgUHlGaWxlX0FzRmlsZWAganVzdCBiZWZvcmUKLSAgIHlvdSByZWxlYXNlIHRoZSBHSUwuCisgICBUaGUgc3VnZ2VzdGVkIHVzZSBpcyB0byBjYWxsIHRoaXMgYWZ0ZXIgOmNmdW5jOmBQeUZpbGVfQXNGaWxlYCBhbmQgYmVmb3JlCisgICB5b3UgcmVsZWFzZSB0aGUgR0lMOjoKKworICAgICAgRklMRSAqZnAgPSBQeUZpbGVfQXNGaWxlKHApOworICAgICAgUHlGaWxlX0luY1VzZUNvdW50KHApOworICAgICAgLyogLi4uICovCisgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICBkb19zb21ldGhpbmcoZnApOworICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgIC8qIC4uLiAqLworICAgICAgUHlGaWxlX0RlY1VzZUNvdW50KHApOwogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIApAQCAtOTAsNyArOTksOCBAQAogICAgaW5kaWNhdGUgdGhhdCB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCBpdHMgb3duIHVzZSBvZiB0aGUgOmN0eXBlOmBGSUxFXCpgLgogICAgVGhpcyBtYXkgb25seSBiZSBjYWxsZWQgdG8gdW5kbyBhIHByaW9yIGNhbGwgdG8gOmNmdW5jOmBQeUZpbGVfSW5jVXNlQ291bnRgLgogCi0gICBUaGUgR0lMIG11c3QgYmUgaGVsZCB3aGlsZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICBUaGUgOnRlcm06YEdJTGAgbXVzdCBiZSBoZWxkIHdoaWxlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAoc2VlIHRoZSBleGFtcGxlCisgICBhYm92ZSkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmxvYXQucnN0IGIvRG9jL2MtYXBpL2Zsb2F0LnJzdAppbmRleCBjNDA5OWEzLi4yOTVmYjkwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZmxvYXQucnN0CisrKyBiL0RvYy9jLWFwaS9mbG9hdC5yc3QKQEAgLTkyLDMgKzkyLDI3IEBACiAgICBiZSBmcmVlZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUZsb2F0X0FzU3RyaW5nKGNoYXIgKmJ1ZiwgUHlGbG9hdE9iamVjdCAqdikKKworICAgQ29udmVydCB0aGUgYXJndW1lbnQgKnYqIHRvIGEgc3RyaW5nLCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcworICAgOmZ1bmM6YHN0cmAuIFRoZSBsZW5ndGggb2YgKmJ1Ziogc2hvdWxkIGJlIGF0IGxlYXN0IDEwMC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyB1bnNhZmUgdG8gY2FsbCBiZWNhdXNlIGl0IHdyaXRlcyB0byBhIGJ1ZmZlciB3aG9zZQorICAgbGVuZ3RoIGl0IGRvZXMgbm90IGtub3cuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSA6ZnVuYzpgUHlPYmplY3RfU3RyYCBvciA6ZnVuYzpgUHlPU19kb3VibGVfdG9fc3RyaW5nYCBpbnN0ZWFkLgorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlGbG9hdF9Bc1JlcHJTdHJpbmcoY2hhciAqYnVmLCBQeUZsb2F0T2JqZWN0ICp2KQorCisgICBTYW1lIGFzIFB5RmxvYXRfQXNTdHJpbmcsIGV4Y2VwdCB1c2VzIHRoZSBzYW1lIHJ1bGVzIGFzCisgICA6ZnVuYzpgcmVwcmAuICBUaGUgbGVuZ3RoIG9mICpidWYqIHNob3VsZCBiZSBhdCBsZWFzdCAxMDAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdW5zYWZlIHRvIGNhbGwgYmVjYXVzZSBpdCB3cml0ZXMgdG8gYSBidWZmZXIgd2hvc2UKKyAgIGxlbmd0aCBpdCBkb2VzIG5vdCBrbm93LgorCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBVc2UgOmZ1bmM6YFB5T2JqZWN0X1JlcHJgIG9yIDpmdW5jOmBQeU9TX2RvdWJsZV90b19zdHJpbmdgIGluc3RlYWQuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDU1ODg5NmMuLjNkYTE0MTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0yNDEsNyArMjQxLDcgQEAKICAgIHRyaWNrcyB3aXRoIHRoaXMgdG8gcHJvdmlkZSBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKQorLi4gY2Z1bmN0aW9uOjogaW50IFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAoKmluaXRmdW5jKSh2b2lkKSkKIAogICAgQWRkIGEgc2luZ2xlIG1vZHVsZSB0byB0aGUgZXhpc3RpbmcgdGFibGUgb2YgYnVpbHQtaW4gbW9kdWxlcy4gIFRoaXMgaXMgYQogICAgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgOmNmdW5jOmBQeUltcG9ydF9FeHRlbmRJbml0dGFiYCwgcmV0dXJuaW5nIGBgLTFgYCBpZgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2luaXQucnN0IGIvRG9jL2MtYXBpL2luaXQucnN0CmluZGV4IDVkNGRhMjIuLmZkNmE5YTIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbml0LnJzdAorKysgYi9Eb2MvYy1hcGkvaW5pdC5yc3QKQEAgLTgsNiArOCwxMCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogCitJbml0aWFsaXppbmcgYW5kIGZpbmFsaXppbmcgdGhlIGludGVycHJldGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwogLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9Jbml0aWFsaXplKCkKIAogICAgLi4gaW5kZXg6OgpAQCAtODMsODUgKzg3LDggQEAKICAgIDpjZnVuYzpgUHlfRmluYWxpemVgIG1vcmUgdGhhbiBvbmNlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5X05ld0ludGVycHJldGVyKCkKLQotICAgLi4gaW5kZXg6OgotICAgICAgbW9kdWxlOiBfX2J1aWx0aW5fXwotICAgICAgbW9kdWxlOiBfX21haW5fXwotICAgICAgbW9kdWxlOiBzeXMKLSAgICAgIHNpbmdsZTogc3Rkb3V0IChpbiBtb2R1bGUgc3lzKQotICAgICAgc2luZ2xlOiBzdGRlcnIgKGluIG1vZHVsZSBzeXMpCi0gICAgICBzaW5nbGU6IHN0ZGluIChpbiBtb2R1bGUgc3lzKQotCi0gICBDcmVhdGUgYSBuZXcgc3ViLWludGVycHJldGVyLiAgVGhpcyBpcyBhbiAoYWxtb3N0KSB0b3RhbGx5IHNlcGFyYXRlIGVudmlyb25tZW50Ci0gICBmb3IgdGhlIGV4ZWN1dGlvbiBvZiBQeXRob24gY29kZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBuZXcgaW50ZXJwcmV0ZXIgaGFzCi0gICBzZXBhcmF0ZSwgaW5kZXBlbmRlbnQgdmVyc2lvbnMgb2YgYWxsIGltcG9ydGVkIG1vZHVsZXMsIGluY2x1ZGluZyB0aGUKLSAgIGZ1bmRhbWVudGFsIG1vZHVsZXMgOm1vZDpgX19idWlsdGluX19gLCA6bW9kOmBfX21haW5fX2AgYW5kIDptb2Q6YHN5c2AuICBUaGUKLSAgIHRhYmxlIG9mIGxvYWRlZCBtb2R1bGVzIChgYHN5cy5tb2R1bGVzYGApIGFuZCB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoCi0gICAoYGBzeXMucGF0aGBgKSBhcmUgYWxzbyBzZXBhcmF0ZS4gIFRoZSBuZXcgZW52aXJvbm1lbnQgaGFzIG5vIGBgc3lzLmFyZ3ZgYAotICAgdmFyaWFibGUuICBJdCBoYXMgbmV3IHN0YW5kYXJkIEkvTyBzdHJlYW0gZmlsZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsCi0gICBgYHN5cy5zdGRvdXRgYCBhbmQgYGBzeXMuc3RkZXJyYGAgKGhvd2V2ZXIgdGhlc2UgcmVmZXIgdG8gdGhlIHNhbWUgdW5kZXJseWluZwotICAgOmN0eXBlOmBGSUxFYCBzdHJ1Y3R1cmVzIGluIHRoZSBDIGxpYnJhcnkpLgotCi0gICBUaGUgcmV0dXJuIHZhbHVlIHBvaW50cyB0byB0aGUgZmlyc3QgdGhyZWFkIHN0YXRlIGNyZWF0ZWQgaW4gdGhlIG5ldwotICAgc3ViLWludGVycHJldGVyLiAgVGhpcyB0aHJlYWQgc3RhdGUgaXMgbWFkZSBpbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuCi0gICBOb3RlIHRoYXQgbm8gYWN0dWFsIHRocmVhZCBpcyBjcmVhdGVkOyBzZWUgdGhlIGRpc2N1c3Npb24gb2YgdGhyZWFkIHN0YXRlcwotICAgYmVsb3cuICBJZiBjcmVhdGlvbiBvZiB0aGUgbmV3IGludGVycHJldGVyIGlzIHVuc3VjY2Vzc2Z1bCwgKk5VTEwqIGlzCi0gICByZXR1cm5lZDsgbm8gZXhjZXB0aW9uIGlzIHNldCBzaW5jZSB0aGUgZXhjZXB0aW9uIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUKLSAgIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGFuZCB0aGVyZSBtYXkgbm90IGJlIGEgY3VycmVudCB0aHJlYWQgc3RhdGUuICAoTGlrZSBhbGwKLSAgIG90aGVyIFB5dGhvbi9DIEFQSSBmdW5jdGlvbnMsIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlCi0gICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGlzIHN0aWxsIGhlbGQgd2hlbiBpdCByZXR1cm5zOyBob3dldmVyLCB1bmxpa2UgbW9zdAotICAgb3RoZXIgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucywgdGhlcmUgbmVlZG4ndCBiZSBhIGN1cnJlbnQgdGhyZWFkIHN0YXRlIG9uCi0gICBlbnRyeS4pCi0KLSAgIC4uIGluZGV4OjoKLSAgICAgIHNpbmdsZTogUHlfRmluYWxpemUoKQotICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKLQotICAgRXh0ZW5zaW9uIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIChzdWItKWludGVycHJldGVycyBhcyBmb2xsb3dzOiB0aGUgZmlyc3QKLSAgIHRpbWUgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBpcyBpbXBvcnRlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgbm9ybWFsbHksIGFuZCBhCi0gICAoc2hhbGxvdykgY29weSBvZiBpdHMgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcyBzcXVpcnJlbGVkIGF3YXkuICBXaGVuIHRoZSBzYW1lCi0gICBleHRlbnNpb24gaXMgaW1wb3J0ZWQgYnkgYW5vdGhlciAoc3ViLSlpbnRlcnByZXRlciwgYSBuZXcgbW9kdWxlIGlzIGluaXRpYWxpemVkCi0gICBhbmQgZmlsbGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgY29weTsgdGhlIGV4dGVuc2lvbidzIGBgaW5pdGBgIGZ1bmN0aW9uIGlzCi0gICBub3QgY2FsbGVkLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gd2hhdCBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzCi0gICBpbXBvcnRlZCBhZnRlciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gY29tcGxldGVseSByZS1pbml0aWFsaXplZCBieSBjYWxsaW5nCi0gICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBhbmQgOmNmdW5jOmBQeV9Jbml0aWFsaXplYDsgaW4gdGhhdCBjYXNlLCB0aGUgZXh0ZW5zaW9uJ3MKLSAgIGBgaW5pdG1vZHVsZWBgIGZ1bmN0aW9uICppcyogY2FsbGVkIGFnYWluLgotCi0gICAuLiBpbmRleDo6IHNpbmdsZTogY2xvc2UoKSAoaW4gbW9kdWxlIG9zKQotCi0gICAqKkJ1Z3MgYW5kIGNhdmVhdHM6KiogQmVjYXVzZSBzdWItaW50ZXJwcmV0ZXJzIChhbmQgdGhlIG1haW4gaW50ZXJwcmV0ZXIpIGFyZQotICAgcGFydCBvZiB0aGUgc2FtZSBwcm9jZXNzLCB0aGUgaW5zdWxhdGlvbiBiZXR3ZWVuIHRoZW0gaXNuJ3QgcGVyZmVjdCAtLS0gZm9yCi0gICBleGFtcGxlLCB1c2luZyBsb3ctbGV2ZWwgZmlsZSBvcGVyYXRpb25zIGxpa2UgIDpmdW5jOmBvcy5jbG9zZWAgdGhleSBjYW4KLSAgIChhY2NpZGVudGFsbHkgb3IgbWFsaWNpb3VzbHkpIGFmZmVjdCBlYWNoIG90aGVyJ3Mgb3BlbiBmaWxlcy4gIEJlY2F1c2Ugb2YgdGhlCi0gICB3YXkgZXh0ZW5zaW9ucyBhcmUgc2hhcmVkIGJldHdlZW4gKHN1Yi0paW50ZXJwcmV0ZXJzLCBzb21lIGV4dGVuc2lvbnMgbWF5IG5vdAotICAgd29yayBwcm9wZXJseTsgdGhpcyBpcyBlc3BlY2lhbGx5IGxpa2VseSB3aGVuIHRoZSBleHRlbnNpb24gbWFrZXMgdXNlIG9mCi0gICAoc3RhdGljKSBnbG9iYWwgdmFyaWFibGVzLCBvciB3aGVuIHRoZSBleHRlbnNpb24gbWFuaXB1bGF0ZXMgaXRzIG1vZHVsZSdzCi0gICBkaWN0aW9uYXJ5IGFmdGVyIGl0cyBpbml0aWFsaXphdGlvbi4gIEl0IGlzIHBvc3NpYmxlIHRvIGluc2VydCBvYmplY3RzIGNyZWF0ZWQKLSAgIGluIG9uZSBzdWItaW50ZXJwcmV0ZXIgaW50byBhIG5hbWVzcGFjZSBvZiBhbm90aGVyIHN1Yi1pbnRlcnByZXRlcjsgdGhpcyBzaG91bGQKLSAgIGJlIGRvbmUgd2l0aCBncmVhdCBjYXJlIHRvIGF2b2lkIHNoYXJpbmcgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucywgbWV0aG9kcywKLSAgIGluc3RhbmNlcyBvciBjbGFzc2VzIGJldHdlZW4gc3ViLWludGVycHJldGVycywgc2luY2UgaW1wb3J0IG9wZXJhdGlvbnMgZXhlY3V0ZWQKLSAgIGJ5IHN1Y2ggb2JqZWN0cyBtYXkgYWZmZWN0IHRoZSB3cm9uZyAoc3ViLSlpbnRlcnByZXRlcidzIGRpY3Rpb25hcnkgb2YgbG9hZGVkCi0gICBtb2R1bGVzLiAgKFhYWCBUaGlzIGlzIGEgaGFyZC10by1maXggYnVnIHRoYXQgd2lsbCBiZSBhZGRyZXNzZWQgaW4gYSBmdXR1cmUKLSAgIHJlbGVhc2UuKQotCi0gICBBbHNvIG5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBleHRlbnNpb24KLSAgIG1vZHVsZXMgc3VjaCBhcyBQeU9iakMgYW5kIGN0eXBlcyB0aGF0IHVzZSB0aGUgOmNmdW5jOmBQeUdJTFN0YXRlX1wqYCBBUElzIChhbmQKLSAgIHRoaXMgaXMgaW5oZXJlbnQgaW4gdGhlIHdheSB0aGUgOmNmdW5jOmBQeUdJTFN0YXRlX1wqYCBmdW5jdGlvbnMgd29yaykuICBTaW1wbGUKLSAgIHRoaW5ncyBtYXkgd29yaywgYnV0IGNvbmZ1c2luZyBiZWhhdmlvciB3aWxsIGFsd2F5cyBiZSBuZWFyLgotCi0KLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfRW5kSW50ZXJwcmV0ZXIoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQotCi0gICAuLiBpbmRleDo6IHNpbmdsZTogUHlfRmluYWxpemUoKQotCi0gICBEZXN0cm95IHRoZSAoc3ViLSlpbnRlcnByZXRlciByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiBUaGUgZ2l2ZW4KLSAgIHRocmVhZCBzdGF0ZSBtdXN0IGJlIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aHJlYWQKLSAgIHN0YXRlcyBiZWxvdy4gIFdoZW4gdGhlIGNhbGwgcmV0dXJucywgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzICpOVUxMKi4gIEFsbAotICAgdGhyZWFkIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcnByZXRlciBhcmUgZGVzdHJveWVkLiAgKFRoZSBnbG9iYWwKLSAgIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGlzIHN0aWxsIGhlbGQKLSAgIHdoZW4gaXQgcmV0dXJucy4pICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCB3aWxsIGRlc3Ryb3kgYWxsIHN1Yi1pbnRlcnByZXRlcnMgdGhhdAotICAgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkgZGVzdHJveWVkIGF0IHRoYXQgcG9pbnQuCitQcm9jZXNzLXdpZGUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KIAogCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5X1NldFByb2dyYW1OYW1lKGNoYXIgKm5hbWUpCkBAIC0zODYsMTQgKzMxMywxNSBAQAogCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aCAqdXBkYXRlcGF0aCogc2V0IHRvIDEuCiAKIAogLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9TZXRQeXRob25Ib21lKGNoYXIgKmhvbWUpCiAKICAgIFNldCB0aGUgZGVmYXVsdCAiaG9tZSIgZGlyZWN0b3J5LCB0aGF0IGlzLCB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YW5kYXJkCi0gICBQeXRob24gbGlicmFyaWVzLiAgVGhlIGxpYnJhcmllcyBhcmUgc2VhcmNoZWQgaW4KLSAgIDpmaWxlOmB7aG9tZX0vbGliL3B5dGhvbnt2ZXJzaW9ufWAgYW5kIDpmaWxlOmB7aG9tZX0vbGliL3B5dGhvbnt2ZXJzaW9ufWAuCisgICBQeXRob24gbGlicmFyaWVzLiAgU2VlIDplbnZ2YXI6YFBZVEhPTkhPTUVgIGZvciB0aGUgbWVhbmluZyBvZiB0aGUKKyAgIGFyZ3VtZW50IHN0cmluZy4KKwogICAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIHplcm8tdGVybWluYXRlZCBjaGFyYWN0ZXIgc3RyaW5nIGluIHN0YXRpYwogICAgc3RvcmFnZSB3aG9zZSBjb250ZW50cyB3aWxsIG5vdCBjaGFuZ2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3JhbSdzCiAgICBleGVjdXRpb24uICBObyBjb2RlIGluIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mCkBAIC00MTMsMTMgKzM0MSwxNCBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OgorICAgc2luZ2xlOiBHSUwKICAgIHNpbmdsZTogZ2xvYmFsIGludGVycHJldGVyIGxvY2sKICAgIHNpbmdsZTogaW50ZXJwcmV0ZXIgbG9jawogICAgc2luZ2xlOiBsb2NrLCBpbnRlcnByZXRlcgogCi1UaGUgUHl0aG9uIGludGVycHJldGVyIGlzIG5vdCBmdWxseSB0aHJlYWQgc2FmZS4gIEluIG9yZGVyIHRvIHN1cHBvcnQKLW11bHRpLXRocmVhZGVkIFB5dGhvbiBwcm9ncmFtcywgdGhlcmUncyBhIGdsb2JhbCBsb2NrLCBjYWxsZWQgdGhlIDpkZm46YGdsb2JhbAotaW50ZXJwcmV0ZXIgbG9ja2Agb3IgOmRmbjpgR0lMYCwgdGhhdCBtdXN0IGJlIGhlbGQgYnkgdGhlIGN1cnJlbnQgdGhyZWFkIGJlZm9yZQorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyBub3QgZnVsbHkgdGhyZWFkLXNhZmUuICBJbiBvcmRlciB0byBzdXBwb3J0CittdWx0aS10aHJlYWRlZCBQeXRob24gcHJvZ3JhbXMsIHRoZXJlJ3MgYSBnbG9iYWwgbG9jaywgY2FsbGVkIHRoZSA6dGVybTpgZ2xvYmFsCitpbnRlcnByZXRlciBsb2NrYCBvciA6dGVybTpgR0lMYCwgdGhhdCBtdXN0IGJlIGhlbGQgYnkgdGhlIGN1cnJlbnQgdGhyZWFkIGJlZm9yZQogaXQgY2FuIHNhZmVseSBhY2Nlc3MgUHl0aG9uIG9iamVjdHMuIFdpdGhvdXQgdGhlIGxvY2ssIGV2ZW4gdGhlIHNpbXBsZXN0CiBvcGVyYXRpb25zIGNvdWxkIGNhdXNlIHByb2JsZW1zIGluIGEgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbTogZm9yIGV4YW1wbGUsIHdoZW4KIHR3byB0aHJlYWRzIHNpbXVsdGFuZW91c2x5IGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBzYW1lIG9iamVjdCwgdGhlCkBAIC00MjcsMzkgKzM1NiwzOCBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogc2V0Y2hlY2tpbnRlcnZhbCgpIChpbiBtb2R1bGUgc3lzKQogCi1UaGVyZWZvcmUsIHRoZSBydWxlIGV4aXN0cyB0aGF0IG9ubHkgdGhlIHRocmVhZCB0aGF0IGhhcyBhY3F1aXJlZCB0aGUgZ2xvYmFsCi1pbnRlcnByZXRlciBsb2NrIG1heSBvcGVyYXRlIG9uIFB5dGhvbiBvYmplY3RzIG9yIGNhbGwgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucy4KLUluIG9yZGVyIHRvIHN1cHBvcnQgbXVsdGktdGhyZWFkZWQgUHl0aG9uIHByb2dyYW1zLCB0aGUgaW50ZXJwcmV0ZXIgcmVndWxhcmx5Ci1yZWxlYXNlcyBhbmQgcmVhY3F1aXJlcyB0aGUgbG9jayAtLS0gYnkgZGVmYXVsdCwgZXZlcnkgMTAwIGJ5dGVjb2RlIGluc3RydWN0aW9ucwotKHRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCAgOmZ1bmM6YHN5cy5zZXRjaGVja2ludGVydmFsYCkuICBUaGUgbG9jayBpcyBhbHNvCi1yZWxlYXNlZCBhbmQgcmVhY3F1aXJlZCBhcm91bmQgcG90ZW50aWFsbHkgYmxvY2tpbmcgSS9PIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nCi1vciB3cml0aW5nIGEgZmlsZSwgc28gdGhhdCBvdGhlciB0aHJlYWRzIGNhbiBydW4gd2hpbGUgdGhlIHRocmVhZCB0aGF0IHJlcXVlc3RzCi10aGUgSS9PIGlzIHdhaXRpbmcgZm9yIHRoZSBJL08gb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorVGhlcmVmb3JlLCB0aGUgcnVsZSBleGlzdHMgdGhhdCBvbmx5IHRoZSB0aHJlYWQgdGhhdCBoYXMgYWNxdWlyZWQgdGhlCis6dGVybTpgR0lMYCBtYXkgb3BlcmF0ZSBvbiBQeXRob24gb2JqZWN0cyBvciBjYWxsIFB5dGhvbi9DIEFQSSBmdW5jdGlvbnMuCitJbiBvcmRlciB0byBlbXVsYXRlIGNvbmN1cnJlbmN5IG9mIGV4ZWN1dGlvbiwgdGhlIGludGVycHJldGVyIHJlZ3VsYXJseQordHJpZXMgdG8gc3dpdGNoIHRocmVhZHMgKHNlZSA6ZnVuYzpgc3lzLnNldGNoZWNraW50ZXJ2YWxgKS4gIFRoZSBsb2NrIGlzIGFsc28KK3JlbGVhc2VkIGFyb3VuZCBwb3RlbnRpYWxseSBibG9ja2luZyBJL08gb3BlcmF0aW9ucyBsaWtlIHJlYWRpbmcgb3Igd3JpdGluZworYSBmaWxlLCBzbyB0aGF0IG90aGVyIFB5dGhvbiB0aHJlYWRzIGNhbiBydW4gaW4gdGhlIG1lYW50aW1lLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IFB5VGhyZWFkU3RhdGUKICAgIHNpbmdsZTogUHlUaHJlYWRTdGF0ZQogCi1UaGUgUHl0aG9uIGludGVycHJldGVyIG5lZWRzIHRvIGtlZXAgc29tZSBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBzZXBhcmF0ZSBwZXIKLXRocmVhZCAtLS0gZm9yIHRoaXMgaXQgdXNlcyBhIGRhdGEgc3RydWN0dXJlIGNhbGxlZCA6Y3R5cGU6YFB5VGhyZWFkU3RhdGVgLgotVGhlcmUncyBvbmUgZ2xvYmFsIHZhcmlhYmxlLCBob3dldmVyOiB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudAotOmN0eXBlOmBQeVRocmVhZFN0YXRlYCBzdHJ1Y3R1cmUuICBCZWZvcmUgdGhlIGFkZGl0aW9uIG9mIDpkZm46YHRocmVhZC1sb2NhbAotc3RvcmFnZWAgKDpkZm46YFRMU2ApIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSBoYWQgdG8gYmUgbWFuaXB1bGF0ZWQKLWV4cGxpY2l0bHkuCitUaGUgUHl0aG9uIGludGVycHJldGVyIGtlZXBzIHNvbWUgdGhyZWFkLXNwZWNpZmljIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uCitpbnNpZGUgYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQgOmN0eXBlOmBQeVRocmVhZFN0YXRlYC4gIFRoZXJlJ3MgYWxzbyBvbmUKK2dsb2JhbCB2YXJpYWJsZSBwb2ludGluZyB0byB0aGUgY3VycmVudCA6Y3R5cGU6YFB5VGhyZWFkU3RhdGVgOiBpdCBjYW4KK2JlIHJldHJpZXZlZCB1c2luZyA6Y2Z1bmM6YFB5VGhyZWFkU3RhdGVfR2V0YC4KIAotVGhpcyBpcyBlYXN5IGVub3VnaCBpbiBtb3N0IGNhc2VzLiAgTW9zdCBjb2RlIG1hbmlwdWxhdGluZyB0aGUgZ2xvYmFsCi1pbnRlcnByZXRlciBsb2NrIGhhcyB0aGUgZm9sbG93aW5nIHNpbXBsZSBzdHJ1Y3R1cmU6OgorUmVsZWFzaW5nIHRoZSBHSUwgZnJvbSBleHRlbnNpb24gY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IGV4dGVuc2lvbiBjb2RlIG1hbmlwdWxhdGluZyB0aGUgOnRlcm06YEdJTGAgaGFzIHRoZSBmb2xsb3dpbmcgc2ltcGxlCitzdHJ1Y3R1cmU6OgogCiAgICBTYXZlIHRoZSB0aHJlYWQgc3RhdGUgaW4gYSBsb2NhbCB2YXJpYWJsZS4KICAgIFJlbGVhc2UgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLgotICAgLi4uRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uLi4uCisgICAuLi4gRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uIC4uLgogICAgUmVhY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4KICAgIFJlc3RvcmUgdGhlIHRocmVhZCBzdGF0ZSBmcm9tIHRoZSBsb2NhbCB2YXJpYWJsZS4KIAogVGhpcyBpcyBzbyBjb21tb24gdGhhdCBhIHBhaXIgb2YgbWFjcm9zIGV4aXN0cyB0byBzaW1wbGlmeSBpdDo6CiAKICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgIC4uLkRvIHNvbWUgYmxvY2tpbmcgSS9PIG9wZXJhdGlvbi4uLgorICAgLi4uIERvIHNvbWUgYmxvY2tpbmcgSS9PIG9wZXJhdGlvbiAuLi4KICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKIC4uIGluZGV4OjoKQEAgLTQ2OCw5ICszOTYsOCBAQAogCiBUaGUgOmNtYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AgbWFjcm8gb3BlbnMgYSBuZXcgYmxvY2sgYW5kIGRlY2xhcmVzIGEKIGhpZGRlbiBsb2NhbCB2YXJpYWJsZTsgdGhlIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNybyBjbG9zZXMgdGhlCi1ibG9jay4gIEFub3RoZXIgYWR2YW50YWdlIG9mIHVzaW5nIHRoZXNlIHR3byBtYWNyb3MgaXMgdGhhdCB3aGVuIFB5dGhvbiBpcwotY29tcGlsZWQgd2l0aG91dCB0aHJlYWQgc3VwcG9ydCwgdGhleSBhcmUgZGVmaW5lZCBlbXB0eSwgdGh1cyBzYXZpbmcgdGhlIHRocmVhZAotc3RhdGUgYW5kIEdJTCBtYW5pcHVsYXRpb25zLgorYmxvY2suICBUaGVzZSB0d28gbWFjcm9zIGFyZSBzdGlsbCBhdmFpbGFibGUgd2hlbiBQeXRob24gaXMgY29tcGlsZWQgd2l0aG91dAordGhyZWFkIHN1cHBvcnQgKHRoZXkgc2ltcGx5IGhhdmUgYW4gZW1wdHkgZXhwYW5zaW9uKS4KIAogV2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBlbmFibGVkLCB0aGUgYmxvY2sgYWJvdmUgZXhwYW5kcyB0byB0aGUgZm9sbG93aW5nIGNvZGU6OgogCkBAIC00ODAsNjUgKzQwNyw2MCBAQAogICAgLi4uRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uLi4uCiAgICBQeUV2YWxfUmVzdG9yZVRocmVhZChfc2F2ZSk7CiAKLVVzaW5nIGV2ZW4gbG93ZXIgbGV2ZWwgcHJpbWl0aXZlcywgd2UgY2FuIGdldCByb3VnaGx5IHRoZSBzYW1lIGVmZmVjdCBhcwotZm9sbG93czo6Ci0KLSAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwotCi0gICBfc2F2ZSA9IFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKLSAgIFB5RXZhbF9SZWxlYXNlTG9jaygpOwotICAgLi4uRG8gc29tZSBibG9ja2luZyBJL08gb3BlcmF0aW9uLi4uCi0gICBQeUV2YWxfQWNxdWlyZUxvY2soKTsKLSAgIFB5VGhyZWFkU3RhdGVfU3dhcChfc2F2ZSk7Ci0KIC4uIGluZGV4OjoKICAgIHNpbmdsZTogUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKQotICAgc2luZ2xlOiBlcnJubwogICAgc2luZ2xlOiBQeUV2YWxfU2F2ZVRocmVhZCgpCi0gICBzaW5nbGU6IFB5RXZhbF9SZWxlYXNlTG9jaygpCi0gICBzaW5nbGU6IFB5RXZhbF9BY3F1aXJlTG9jaygpCiAKLVRoZXJlIGFyZSBzb21lIHN1YnRsZSBkaWZmZXJlbmNlczsgaW4gcGFydGljdWxhciwgOmNmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAKLXNhdmVzIGFuZCByZXN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlICBnbG9iYWwgdmFyaWFibGUgOmNkYXRhOmBlcnJub2AsIHNpbmNlIHRoZQotbG9jayBtYW5pcHVsYXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgOmNkYXRhOmBlcnJub2AgaXMgbGVmdCBhbG9uZS4gIEFsc28sCi13aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkLCA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBhbmQKLTpjZnVuYzpgUHlFdmFsX1Jlc3RvcmVUaHJlYWRgIGRvbid0IG1hbmlwdWxhdGUgdGhlIEdJTDsgaW4gdGhpcyBjYXNlLAotOmNmdW5jOmBQeUV2YWxfUmVsZWFzZUxvY2tgIGFuZCA6Y2Z1bmM6YFB5RXZhbF9BY3F1aXJlTG9ja2AgYXJlIG5vdCBhdmFpbGFibGUuCi1UaGlzIGlzIGRvbmUgc28gdGhhdCBkeW5hbWljYWxseSBsb2FkZWQgZXh0ZW5zaW9ucyBjb21waWxlZCB3aXRoIHRocmVhZCBzdXBwb3J0Ci1lbmFibGVkIGNhbiBiZSBsb2FkZWQgYnkgYW4gaW50ZXJwcmV0ZXIgdGhhdCB3YXMgY29tcGlsZWQgd2l0aCBkaXNhYmxlZCB0aHJlYWQKLXN1cHBvcnQuCitIZXJlIGlzIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yazogdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgcG9pbnRlciB0byB0aGUKK2N1cnJlbnQgdGhyZWFkIHN0YXRlLiAgV2hlbiByZWxlYXNpbmcgdGhlIGxvY2sgYW5kIHNhdmluZyB0aGUgdGhyZWFkIHN0YXRlLAordGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHBvaW50ZXIgbXVzdCBiZSByZXRyaWV2ZWQgYmVmb3JlIHRoZSBsb2NrIGlzIHJlbGVhc2VkCisoc2luY2UgYW5vdGhlciB0aHJlYWQgY291bGQgaW1tZWRpYXRlbHkgYWNxdWlyZSB0aGUgbG9jayBhbmQgc3RvcmUgaXRzIG93biB0aHJlYWQKK3N0YXRlIGluIHRoZSBnbG9iYWwgdmFyaWFibGUpLiBDb252ZXJzZWx5LCB3aGVuIGFjcXVpcmluZyB0aGUgbG9jayBhbmQgcmVzdG9yaW5nCit0aGUgdGhyZWFkIHN0YXRlLCB0aGUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGJlZm9yZSBzdG9yaW5nIHRoZSB0aHJlYWQgc3RhdGUKK3BvaW50ZXIuCiAKLVRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgdGhyZWFkCi1zdGF0ZS4gIFdoZW4gcmVsZWFzaW5nIHRoZSBsb2NrIGFuZCBzYXZpbmcgdGhlIHRocmVhZCBzdGF0ZSwgdGhlIGN1cnJlbnQgdGhyZWFkCi1zdGF0ZSBwb2ludGVyIG11c3QgYmUgcmV0cmlldmVkIGJlZm9yZSB0aGUgbG9jayBpcyByZWxlYXNlZCAoc2luY2UgYW5vdGhlcgotdGhyZWFkIGNvdWxkIGltbWVkaWF0ZWx5IGFjcXVpcmUgdGhlIGxvY2sgYW5kIHN0b3JlIGl0cyBvd24gdGhyZWFkIHN0YXRlIGluIHRoZQotZ2xvYmFsIHZhcmlhYmxlKS4gQ29udmVyc2VseSwgd2hlbiBhY3F1aXJpbmcgdGhlIGxvY2sgYW5kIHJlc3RvcmluZyB0aGUgdGhyZWFkCi1zdGF0ZSwgdGhlIGxvY2sgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgc3RvcmluZyB0aGUgdGhyZWFkIHN0YXRlIHBvaW50ZXIuCisuLiBub3RlOjoKKyAgIENhbGxpbmcgc3lzdGVtIEkvTyBmdW5jdGlvbnMgaXMgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciByZWxlYXNpbmcKKyAgIHRoZSBHSUwsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VmdWwgYmVmb3JlIGNhbGxpbmcgbG9uZy1ydW5uaW5nIGNvbXB1dGF0aW9ucworICAgd2hpY2ggZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gUHl0aG9uIG9iamVjdHMsIHN1Y2ggYXMgY29tcHJlc3Npb24gb3IKKyAgIGNyeXB0b2dyYXBoaWMgZnVuY3Rpb25zIG9wZXJhdGluZyBvdmVyIG1lbW9yeSBidWZmZXJzLiAgRm9yIGV4YW1wbGUsIHRoZQorICAgc3RhbmRhcmQgOm1vZDpgemxpYmAgYW5kIDptb2Q6YGhhc2hsaWJgIG1vZHVsZXMgcmVsZWFzZSB0aGUgR0lMIHdoZW4KKyAgIGNvbXByZXNzaW5nIG9yIGhhc2hpbmcgZGF0YS4KIAotSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB3aGVuIHRocmVhZHMgYXJlIGNyZWF0ZWQgZnJvbSBDLCB0aGV5IGRvbid0IGhhdmUKLXRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaywgbm9yIGlzIHRoZXJlIGEgdGhyZWFkIHN0YXRlIGRhdGEgc3RydWN0dXJlIGZvcgotdGhlbS4gIFN1Y2ggdGhyZWFkcyBtdXN0IGJvb3RzdHJhcCB0aGVtc2VsdmVzIGludG8gZXhpc3RlbmNlLCBieSBmaXJzdAotY3JlYXRpbmcgYSB0aHJlYWQgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUsIHRoZW4gYWNxdWlyaW5nIHRoZSBsb2NrLCBhbmQgZmluYWxseQotc3RvcmluZyB0aGVpciB0aHJlYWQgc3RhdGUgcG9pbnRlciwgYmVmb3JlIHRoZXkgY2FuIHN0YXJ0IHVzaW5nIHRoZSBQeXRob24vQwotQVBJLiAgV2hlbiB0aGV5IGFyZSBkb25lLCB0aGV5IHNob3VsZCByZXNldCB0aGUgdGhyZWFkIHN0YXRlIHBvaW50ZXIsIHJlbGVhc2UKLXRoZSBsb2NrLCBhbmQgZmluYWxseSBmcmVlIHRoZWlyIHRocmVhZCBzdGF0ZSBkYXRhIHN0cnVjdHVyZS4KK05vbi1QeXRob24gY3JlYXRlZCB0aHJlYWRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1CZWdpbm5pbmcgd2l0aCB2ZXJzaW9uIDIuMywgdGhyZWFkcyBjYW4gbm93IHRha2UgYWR2YW50YWdlIG9mIHRoZQotOmNmdW5jOmBQeUdJTFN0YXRlX1wqYCBmdW5jdGlvbnMgdG8gZG8gYWxsIG9mIHRoZSBhYm92ZSBhdXRvbWF0aWNhbGx5LiAgVGhlCi10eXBpY2FsIGlkaW9tIGZvciBjYWxsaW5nIGludG8gUHl0aG9uIGZyb20gYSBDIHRocmVhZCBpcyBub3c6OgorV2hlbiB0aHJlYWRzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBkZWRpY2F0ZWQgUHl0aG9uIEFQSXMgKHN1Y2ggYXMgdGhlCis6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZSksIGEgdGhyZWFkIHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlZCB0byB0aGVtCithbmQgdGhlIGNvZGUgc2hvd2VkIGFib3ZlIGlzIHRoZXJlZm9yZSBjb3JyZWN0LiAgSG93ZXZlciwgd2hlbiB0aHJlYWRzIGFyZQorY3JlYXRlZCBmcm9tIEMgKGZvciBleGFtcGxlIGJ5IGEgdGhpcmQtcGFydHkgbGlicmFyeSB3aXRoIGl0cyBvd24gdGhyZWFkCittYW5hZ2VtZW50KSwgdGhleSBkb24ndCBob2xkIHRoZSBHSUwsIG5vciBpcyB0aGVyZSBhIHRocmVhZCBzdGF0ZSBzdHJ1Y3R1cmUKK2ZvciB0aGVtLgorCitJZiB5b3UgbmVlZCB0byBjYWxsIFB5dGhvbiBjb2RlIGZyb20gdGhlc2UgdGhyZWFkcyAob2Z0ZW4gdGhpcyB3aWxsIGJlIHBhcnQKK29mIGEgY2FsbGJhY2sgQVBJIHByb3ZpZGVkIGJ5IHRoZSBhZm9yZW1lbnRpb25lZCB0aGlyZC1wYXJ0eSBsaWJyYXJ5KSwKK3lvdSBtdXN0IGZpcnN0IHJlZ2lzdGVyIHRoZXNlIHRocmVhZHMgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgYnkKK2NyZWF0aW5nIGEgdGhyZWFkIHN0YXRlIGRhdGEgc3RydWN0dXJlLCB0aGVuIGFjcXVpcmluZyB0aGUgR0lMLCBhbmQgZmluYWxseQorc3RvcmluZyB0aGVpciB0aHJlYWQgc3RhdGUgcG9pbnRlciwgYmVmb3JlIHlvdSBjYW4gc3RhcnQgdXNpbmcgdGhlIFB5dGhvbi9DCitBUEkuICBXaGVuIHlvdSBhcmUgZG9uZSwgeW91IHNob3VsZCByZXNldCB0aGUgdGhyZWFkIHN0YXRlIHBvaW50ZXIsIHJlbGVhc2UKK3RoZSBHSUwsIGFuZCBmaW5hbGx5IGZyZWUgdGhlIHRocmVhZCBzdGF0ZSBkYXRhIHN0cnVjdHVyZS4KKworVGhlIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZCA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgZnVuY3Rpb25zIGRvCithbGwgb2YgdGhlIGFib3ZlIGF1dG9tYXRpY2FsbHkuICBUaGUgdHlwaWNhbCBpZGlvbSBmb3IgY2FsbGluZyBpbnRvIFB5dGhvbgorZnJvbSBhIEMgdGhyZWFkIGlzOjoKIAogICAgUHlHSUxTdGF0ZV9TVEFURSBnc3RhdGU7CiAgICBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogCi0gICAvKiBQZXJmb3JtIFB5dGhvbiBhY3Rpb25zIGhlcmUuICAqLworICAgLyogUGVyZm9ybSBQeXRob24gYWN0aW9ucyBoZXJlLiAqLwogICAgcmVzdWx0ID0gQ2FsbFNvbWVGdW5jdGlvbigpOwotICAgLyogZXZhbHVhdGUgcmVzdWx0ICovCisgICAvKiBldmFsdWF0ZSByZXN1bHQgb3IgaGFuZGxlIGV4Y2VwdGlvbiAqLwogCiAgICAvKiBSZWxlYXNlIHRoZSB0aHJlYWQuIE5vIFB5dGhvbiBBUEkgYWxsb3dlZCBiZXlvbmQgdGhpcyBwb2ludC4gKi8KICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOwogCiBOb3RlIHRoYXQgdGhlIDpjZnVuYzpgUHlHSUxTdGF0ZV9cKmAgZnVuY3Rpb25zIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9uZSBnbG9iYWwKLWludGVycHJldGVyIChjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCkuICBQeXRob24gc3RpbGwKK2ludGVycHJldGVyIChjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCkuICBQeXRob24KIHN1cHBvcnRzIHRoZSBjcmVhdGlvbiBvZiBhZGRpdGlvbmFsIGludGVycHJldGVycyAodXNpbmcKIDpjZnVuYzpgUHlfTmV3SW50ZXJwcmV0ZXJgKSwgYnV0IG1peGluZyBtdWx0aXBsZSBpbnRlcnByZXRlcnMgYW5kIHRoZQogOmNmdW5jOmBQeUdJTFN0YXRlX1wqYCBBUEkgaXMgdW5zdXBwb3J0ZWQuCkBAIC01NjAsNiArNDgyLDEzIEBACiA6Y2Z1bmM6YFB5T1NfQWZ0ZXJGb3JrYCB0cmllcyB0byByZXNldCB0aGUgbmVjZXNzYXJ5IGxvY2tzLCBidXQgaXMgbm90CiBhbHdheXMgYWJsZSB0by4KIAorCitIaWdoLWxldmVsIEFQSQorLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgdHlwZXMgYW5kIGZ1bmN0aW9ucyB3aGVuIHdyaXRpbmcgQyBleHRlbnNpb24KK2NvZGUsIG9yIHdoZW4gZW1iZWRkaW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXI6CisKIC4uIGN0eXBlOjogUHlJbnRlcnByZXRlclN0YXRlCiAKICAgIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgc3RhdGUgc2hhcmVkIGJ5IGEgbnVtYmVyIG9mIGNvb3BlcmF0aW5nCkBAIC02MDEsMjEgKzUzMCwyMiBAQAogCiAgICAuLiBpbmRleDo6IG1vZHVsZTogdGhyZWFkCiAKLSAgIFdoZW4gb25seSB0aGUgbWFpbiB0aHJlYWQgZXhpc3RzLCBubyBHSUwgb3BlcmF0aW9ucyBhcmUgbmVlZGVkLiBUaGlzIGlzIGEKLSAgIGNvbW1vbiBzaXR1YXRpb24gKG1vc3QgUHl0aG9uIHByb2dyYW1zIGRvIG5vdCB1c2UgdGhyZWFkcyksIGFuZCB0aGUgbG9jawotICAgb3BlcmF0aW9ucyBzbG93IHRoZSBpbnRlcnByZXRlciBkb3duIGEgYml0LiBUaGVyZWZvcmUsIHRoZSBsb2NrIGlzIG5vdAotICAgY3JlYXRlZCBpbml0aWFsbHkuICBUaGlzIHNpdHVhdGlvbiBpcyBlcXVpdmFsZW50IHRvIGhhdmluZyBhY3F1aXJlZCB0aGUgbG9jazoKLSAgIHdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0aHJlYWQsIGFsbCBvYmplY3QgYWNjZXNzZXMgYXJlIHNhZmUuICBUaGVyZWZvcmUsCi0gICB3aGVuIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLCBpdCBhbHNvIGFjcXVpcmVzCi0gICBpdC4gIEJlZm9yZSB0aGUgUHl0aG9uIDptb2Q6YHRocmVhZGAgbW9kdWxlIGNyZWF0ZXMgYSBuZXcgdGhyZWFkLCBrbm93aW5nCi0gICB0aGF0IGVpdGhlciBpdCBoYXMgdGhlIGxvY2sgb3IgdGhlIGxvY2sgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIGl0IGNhbGxzCi0gICA6Y2Z1bmM6YFB5RXZhbF9Jbml0VGhyZWFkc2AuICBXaGVuIHRoaXMgY2FsbCByZXR1cm5zLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKLSAgIHRoZSBsb2NrIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHRoYXQgdGhlIGNhbGxpbmcgdGhyZWFkIGhhcyBhY3F1aXJlZCBpdC4KKyAgIC4uIG5vdGU6OgorICAgICAgV2hlbiBvbmx5IHRoZSBtYWluIHRocmVhZCBleGlzdHMsIG5vIEdJTCBvcGVyYXRpb25zIGFyZSBuZWVkZWQuIFRoaXMgaXMgYQorICAgICAgY29tbW9uIHNpdHVhdGlvbiAobW9zdCBQeXRob24gcHJvZ3JhbXMgZG8gbm90IHVzZSB0aHJlYWRzKSwgYW5kIHRoZSBsb2NrCisgICAgICBvcGVyYXRpb25zIHNsb3cgdGhlIGludGVycHJldGVyIGRvd24gYSBiaXQuIFRoZXJlZm9yZSwgdGhlIGxvY2sgaXMgbm90CisgICAgICBjcmVhdGVkIGluaXRpYWxseS4gIFRoaXMgc2l0dWF0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaGF2aW5nIGFjcXVpcmVkIHRoZSBsb2NrOgorICAgICAgd2hlbiB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRocmVhZCwgYWxsIG9iamVjdCBhY2Nlc3NlcyBhcmUgc2FmZS4gIFRoZXJlZm9yZSwKKyAgICAgIHdoZW4gdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2ssIGl0IGFsc28gYWNxdWlyZXMKKyAgICAgIGl0LiAgQmVmb3JlIHRoZSBQeXRob24gOm1vZDpgX3RocmVhZGAgbW9kdWxlIGNyZWF0ZXMgYSBuZXcgdGhyZWFkLCBrbm93aW5nCisgICAgICB0aGF0IGVpdGhlciBpdCBoYXMgdGhlIGxvY2sgb3IgdGhlIGxvY2sgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIGl0IGNhbGxzCisgICAgICA6Y2Z1bmM6YFB5RXZhbF9Jbml0VGhyZWFkc2AuICBXaGVuIHRoaXMgY2FsbCByZXR1cm5zLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKKyAgICAgIHRoZSBsb2NrIGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHRoYXQgdGhlIGNhbGxpbmcgdGhyZWFkIGhhcyBhY3F1aXJlZCBpdC4KIAotICAgSXQgaXMgKipub3QqKiBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIGl0IGlzIHVua25vd24gd2hpY2ggdGhyZWFkIChpZgotICAgYW55KSBjdXJyZW50bHkgaGFzIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4KKyAgICAgIEl0IGlzICoqbm90Kiogc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBpdCBpcyB1bmtub3duIHdoaWNoIHRocmVhZCAoaWYKKyAgICAgIGFueSkgY3VycmVudGx5IGhhcyB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suCiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KIAogCiAuLiBjZnVuY3Rpb246OiBpbnQgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZCgpCkBAIC02MjgsMzcgKzU1OCw2IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9BY3F1aXJlTG9jaygpCi0KLSAgIEFjcXVpcmUgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgotICAgSWYgdGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2ssIGEgZGVhZGxvY2sgZW5zdWVzLiAgVGhpcyBmdW5jdGlvbiBpcyBub3QKLSAgIGF2YWlsYWJsZSB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KLQotCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZWxlYXNlTG9jaygpCi0KLSAgIFJlbGVhc2UgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgotICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLgotCi0KLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQotCi0gICBBY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBhbmQgc2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSB0bwotICAgKnRzdGF0ZSosIHdoaWNoIHNob3VsZCBub3QgYmUgKk5VTEwqLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgotICAgSWYgdGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2ssIGRlYWRsb2NrIGVuc3Vlcy4gIFRoaXMgZnVuY3Rpb24gaXMgbm90Ci0gICBhdmFpbGFibGUgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCi0KLQotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZVRocmVhZChQeVRocmVhZFN0YXRlICp0c3RhdGUpCi0KLSAgIFJlc2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSB0byAqTlVMTCogYW5kIHJlbGVhc2UgdGhlIGdsb2JhbCBpbnRlcnByZXRlcgotICAgbG9jay4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllciBhbmQgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjdXJyZW50Ci0gICB0aHJlYWQuICBUaGUgKnRzdGF0ZSogYXJndW1lbnQsIHdoaWNoIG11c3Qgbm90IGJlICpOVUxMKiwgaXMgb25seSB1c2VkIHRvIGNoZWNrCi0gICB0aGF0IGl0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIC0tLSBpZiBpdCBpc24ndCwgYSBmYXRhbCBlcnJvciBpcwotICAgcmVwb3J0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0Ci0gICBjb21waWxlIHRpbWUuCi0KLQogLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlFdmFsX1NhdmVUaHJlYWQoKQogCiAgICBSZWxlYXNlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayAoaWYgaXQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgdGhyZWFkCkBAIC02NzcsNiArNTc2LDIwIEBACiAgICB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4pCiAKIAorLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9HZXQoKQorCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZC4KKyAgIFdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzICpOVUxMKiwgdGhpcyBpc3N1ZXMgYSBmYXRhbCBlcnJvciAoc28gdGhhdAorICAgdGhlIGNhbGxlciBuZWVkbid0IGNoZWNrIGZvciAqTlVMTCopLgorCisKKy4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5VGhyZWFkU3RhdGVfU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUpCisKKyAgIFN3YXAgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHdpdGggdGhlIHRocmVhZCBzdGF0ZSBnaXZlbiBieSB0aGUgYXJndW1lbnQKKyAgICp0c3RhdGUqLCB3aGljaCBtYXkgYmUgKk5VTEwqLiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZAorICAgYW5kIGlzIG5vdCByZWxlYXNlZC4KKworCiAuLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZUluaXRUaHJlYWRzKCkKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSA6Y2Z1bmM6YFB5T1NfQWZ0ZXJGb3JrYCB0byBlbnN1cmUgdGhhdCBuZXdseQpAQCAtNjg0LDYgKzU5Nyw0NyBAQAogICAgYXJlIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLgogCiAKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHVzZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSwgYW5kIGFyZSBub3QgY29tcGF0aWJsZQord2l0aCBzdWItaW50ZXJwcmV0ZXJzOgorCisuLiBjZnVuY3Rpb246OiBQeUdJTFN0YXRlX1NUQVRFIFB5R0lMU3RhdGVfRW5zdXJlKCkKKworICAgRW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHJlYWR5IHRvIGNhbGwgdGhlIFB5dGhvbiBDIEFQSSByZWdhcmRsZXNzCisgICBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBQeXRob24sIG9yIG9mIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gVGhpcyBtYXkKKyAgIGJlIGNhbGxlZCBhcyBtYW55IHRpbWVzIGFzIGRlc2lyZWQgYnkgYSB0aHJlYWQgYXMgbG9uZyBhcyBlYWNoIGNhbGwgaXMKKyAgIG1hdGNoZWQgd2l0aCBhIGNhbGwgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLiBJbiBnZW5lcmFsLCBvdGhlcgorICAgdGhyZWFkLXJlbGF0ZWQgQVBJcyBtYXkgYmUgdXNlZCBiZXR3ZWVuIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZAorICAgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzIGFzIGxvbmcgYXMgdGhlIHRocmVhZCBzdGF0ZSBpcyByZXN0b3JlZCB0bworICAgaXRzIHByZXZpb3VzIHN0YXRlIGJlZm9yZSB0aGUgUmVsZWFzZSgpLiAgRm9yIGV4YW1wbGUsIG5vcm1hbCB1c2FnZSBvZiB0aGUKKyAgIDpjbWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIGFuZCA6Y21hY3JvOmBQeV9FTkRfQUxMT1dfVEhSRUFEU2AgbWFjcm9zIGlzCisgICBhY2NlcHRhYmxlLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIG9wYXF1ZSAiaGFuZGxlIiB0byB0aGUgdGhyZWFkIHN0YXRlIHdoZW4KKyAgIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIHdhcyBjYWxsZWQsIGFuZCBtdXN0IGJlIHBhc3NlZCB0bworICAgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIHRvIGVuc3VyZSBQeXRob24gaXMgbGVmdCBpbiB0aGUgc2FtZSBzdGF0ZS4gRXZlbgorICAgdGhvdWdoIHJlY3Vyc2l2ZSBjYWxscyBhcmUgYWxsb3dlZCwgdGhlc2UgaGFuZGxlcyAqY2Fubm90KiBiZSBzaGFyZWQgLSBlYWNoCisgICB1bmlxdWUgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBtdXN0IHNhdmUgdGhlIGhhbmRsZSBmb3IgaXRzIGNhbGwKKyAgIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYC4KKworICAgV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucywgdGhlIGN1cnJlbnQgdGhyZWFkIHdpbGwgaG9sZCB0aGUgR0lMIGFuZCBiZSBhYmxlCisgICB0byBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZS4gIEZhaWx1cmUgaXMgYSBmYXRhbCBlcnJvci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCisKKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUdJTFN0YXRlX1JlbGVhc2UoUHlHSUxTdGF0ZV9TVEFURSkKKworICAgUmVsZWFzZSBhbnkgcmVzb3VyY2VzIHByZXZpb3VzbHkgYWNxdWlyZWQuICBBZnRlciB0aGlzIGNhbGwsIFB5dGhvbidzIHN0YXRlIHdpbGwKKyAgIGJlIHRoZSBzYW1lIGFzIGl0IHdhcyBwcmlvciB0byB0aGUgY29ycmVzcG9uZGluZyA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBjYWxsCisgICAoYnV0IGdlbmVyYWxseSB0aGlzIHN0YXRlIHdpbGwgYmUgdW5rbm93biB0byB0aGUgY2FsbGVyLCBoZW5jZSB0aGUgdXNlIG9mIHRoZQorICAgR0lMU3RhdGUgQVBJKS4KKworICAgRXZlcnkgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBtdXN0IGJlIG1hdGNoZWQgYnkgYSBjYWxsIHRvCisgICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgb24gdGhlIHNhbWUgdGhyZWFkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKKworCiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbm9ybWFsbHkgdXNlZCB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uOyBsb29rIGZvcgogZXhhbXBsZSB1c2FnZSBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24uCiAKQEAgLTcxNyw2ICs2NzEsMTAgQEAKICAgIDpjbWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIHdpdGhvdXQgdGhlIG9wZW5pbmcgYnJhY2UgYW5kIHZhcmlhYmxlCiAgICBkZWNsYXJhdGlvbi4gIEl0IGlzIGEgbm8tb3Agd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCiAKKworTG93LWxldmVsIEFQSQorLS0tLS0tLS0tLS0tLQorCiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhyZWFkIHN1cHBvcnQgaXMgZW5hYmxlZAogYXQgY29tcGlsZSB0aW1lLCBhbmQgbXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBoYXMKIGJlZW4gY3JlYXRlZC4KQEAgLTc2MiwxOSArNzIwLDYgQEAKICAgIDpjZnVuYzpgUHlUaHJlYWRTdGF0ZV9DbGVhcmAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9HZXQoKQotCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZC4KLSAgIFdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzICpOVUxMKiwgdGhpcyBpc3N1ZXMgYSBmYXRhbCBlcnJvciAoc28gdGhhdAotICAgdGhlIGNhbGxlciBuZWVkbid0IGNoZWNrIGZvciAqTlVMTCopLgotCi0KLS4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5VGhyZWFkU3RhdGVfU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUpCi0KLSAgIFN3YXAgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHdpdGggdGhlIHRocmVhZCBzdGF0ZSBnaXZlbiBieSB0aGUgYXJndW1lbnQKLSAgICp0c3RhdGUqLCB3aGljaCBtYXkgYmUgKk5VTEwqLiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZC4KLQotCiAuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCkKIAogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBpbiB3aGljaCBleHRlbnNpb25zIGNhbiBzdG9yZSB0aHJlYWQtc3BlY2lmaWMgc3RhdGUKQEAgLTgwMSw0MiArNzQ2LDE5MCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlHSUxTdGF0ZV9TVEFURSBQeUdJTFN0YXRlX0Vuc3VyZSgpCisuLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9BY3F1aXJlVGhyZWFkKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIAotICAgRW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHJlYWR5IHRvIGNhbGwgdGhlIFB5dGhvbiBDIEFQSSByZWdhcmRsZXNzCi0gICBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBQeXRob24sIG9yIG9mIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gVGhpcyBtYXkKLSAgIGJlIGNhbGxlZCBhcyBtYW55IHRpbWVzIGFzIGRlc2lyZWQgYnkgYSB0aHJlYWQgYXMgbG9uZyBhcyBlYWNoIGNhbGwgaXMKLSAgIG1hdGNoZWQgd2l0aCBhIGNhbGwgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLiBJbiBnZW5lcmFsLCBvdGhlcgotICAgdGhyZWFkLXJlbGF0ZWQgQVBJcyBtYXkgYmUgdXNlZCBiZXR3ZWVuIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZAotICAgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzIGFzIGxvbmcgYXMgdGhlIHRocmVhZCBzdGF0ZSBpcyByZXN0b3JlZCB0bwotICAgaXRzIHByZXZpb3VzIHN0YXRlIGJlZm9yZSB0aGUgUmVsZWFzZSgpLiAgRm9yIGV4YW1wbGUsIG5vcm1hbCB1c2FnZSBvZiB0aGUKLSAgIDpjbWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIGFuZCA6Y21hY3JvOmBQeV9FTkRfQUxMT1dfVEhSRUFEU2AgbWFjcm9zIGlzCi0gICBhY2NlcHRhYmxlLgorICAgQWNxdWlyZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgYW5kIHNldCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgdG8KKyAgICp0c3RhdGUqLCB3aGljaCBzaG91bGQgbm90IGJlICpOVUxMKi4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllci4KKyAgIElmIHRoaXMgdGhyZWFkIGFscmVhZHkgaGFzIHRoZSBsb2NrLCBkZWFkbG9jayBlbnN1ZXMuCiAKLSAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb3BhcXVlICJoYW5kbGUiIHRvIHRoZSB0aHJlYWQgc3RhdGUgd2hlbgotICAgOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgd2FzIGNhbGxlZCwgYW5kIG11c3QgYmUgcGFzc2VkIHRvCi0gICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgdG8gZW5zdXJlIFB5dGhvbiBpcyBsZWZ0IGluIHRoZSBzYW1lIHN0YXRlLiBFdmVuCi0gICB0aG91Z2ggcmVjdXJzaXZlIGNhbGxzIGFyZSBhbGxvd2VkLCB0aGVzZSBoYW5kbGVzICpjYW5ub3QqIGJlIHNoYXJlZCAtIGVhY2gKLSAgIHVuaXF1ZSBjYWxsIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIG11c3Qgc2F2ZSB0aGUgaGFuZGxlIGZvciBpdHMgY2FsbAotICAgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLgotCi0gICBXaGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB0aGUgY3VycmVudCB0aHJlYWQgd2lsbCBob2xkIHRoZSBHSUwuIEZhaWx1cmUgaXMgYQotICAgZmF0YWwgZXJyb3IuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMworICAgOmNmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAgaXMgYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gd2hpY2ggaXMgYWx3YXlzCisgICBhdmFpbGFibGUgKGV2ZW4gd2hlbiB0aHJlYWQgc3VwcG9ydCBpc24ndCBlbmFibGVkIG9yIHdoZW4gdGhyZWFkcyBoYXZlCisgICBub3QgYmVlbiBpbml0aWFsaXplZCkuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUdJTFN0YXRlX1JlbGVhc2UoUHlHSUxTdGF0ZV9TVEFURSkKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1JlbGVhc2VUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogCi0gICBSZWxlYXNlIGFueSByZXNvdXJjZXMgcHJldmlvdXNseSBhY3F1aXJlZC4gIEFmdGVyIHRoaXMgY2FsbCwgUHl0aG9uJ3Mgc3RhdGUgd2lsbAotICAgYmUgdGhlIHNhbWUgYXMgaXQgd2FzIHByaW9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGNhbGwKLSAgIChidXQgZ2VuZXJhbGx5IHRoaXMgc3RhdGUgd2lsbCBiZSB1bmtub3duIHRvIHRoZSBjYWxsZXIsIGhlbmNlIHRoZSB1c2Ugb2YgdGhlCi0gICBHSUxTdGF0ZSBBUEkuKQorICAgUmVzZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHRvICpOVUxMKiBhbmQgcmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyCisgICBsb2NrLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyIGFuZCBtdXN0IGJlIGhlbGQgYnkgdGhlIGN1cnJlbnQKKyAgIHRocmVhZC4gIFRoZSAqdHN0YXRlKiBhcmd1bWVudCwgd2hpY2ggbXVzdCBub3QgYmUgKk5VTEwqLCBpcyBvbmx5IHVzZWQgdG8gY2hlY2sKKyAgIHRoYXQgaXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUgLS0tIGlmIGl0IGlzbid0LCBhIGZhdGFsIGVycm9yIGlzCisgICByZXBvcnRlZC4KIAotICAgRXZlcnkgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBtdXN0IGJlIG1hdGNoZWQgYnkgYSBjYWxsIHRvCi0gICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgb24gdGhlIHNhbWUgdGhyZWFkLgorICAgOmNmdW5jOmBQeUV2YWxfU2F2ZVRocmVhZGAgaXMgYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gd2hpY2ggaXMgYWx3YXlzCisgICBhdmFpbGFibGUgKGV2ZW4gd2hlbiB0aHJlYWQgc3VwcG9ydCBpc24ndCBlbmFibGVkIG9yIHdoZW4gdGhyZWFkcyBoYXZlCisgICBub3QgYmVlbiBpbml0aWFsaXplZCkuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMworCisuLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9BY3F1aXJlTG9jaygpCisKKyAgIEFjcXVpcmUgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgorICAgSWYgdGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2ssIGEgZGVhZGxvY2sgZW5zdWVzLgorCisgICAuLiB3YXJuaW5nOjoKKyAgICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIFBsZWFzZSB1c2UKKyAgICAgIDpjZnVuYzpgUHlFdmFsX1Jlc3RvcmVUaHJlYWRgIG9yIDpjZnVuYzpgUHlFdmFsX0FjcXVpcmVUaHJlYWRgCisgICAgICBpbnN0ZWFkLgorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1JlbGVhc2VMb2NrKCkKKworICAgUmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2suICBUaGUgbG9jayBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGVhcmxpZXIuCisKKyAgIC4uIHdhcm5pbmc6OgorICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgUGxlYXNlIHVzZQorICAgICAgOmNmdW5jOmBQeUV2YWxfU2F2ZVRocmVhZGAgb3IgOmNmdW5jOmBQeUV2YWxfUmVsZWFzZVRocmVhZGAKKyAgICAgIGluc3RlYWQuCisKKworU3ViLWludGVycHJldGVyIHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1doaWxlIGluIG1vc3QgdXNlcywgeW91IHdpbGwgb25seSBlbWJlZCBhIHNpbmdsZSBQeXRob24gaW50ZXJwcmV0ZXIsIHRoZXJlCithcmUgY2FzZXMgd2hlcmUgeW91IG5lZWQgdG8gY3JlYXRlIHNldmVyYWwgaW5kZXBlbmRlbnQgaW50ZXJwcmV0ZXJzIGluIHRoZQorc2FtZSBwcm9jZXNzIGFuZCBwZXJoYXBzIGV2ZW4gaW4gdGhlIHNhbWUgdGhyZWFkLiAgU3ViLWludGVycHJldGVycyBhbGxvdworeW91IHRvIGRvIHRoYXQuICBZb3UgY2FuIHN3aXRjaCBiZXR3ZWVuIHN1Yi1pbnRlcnByZXRlcnMgdXNpbmcgdGhlCis6Y2Z1bmM6YFB5VGhyZWFkU3RhdGVfU3dhcGAgZnVuY3Rpb24uICBZb3UgY2FuIGNyZWF0ZSBhbmQgZGVzdHJveSB0aGVtCit1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworCisuLiBjZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeV9OZXdJbnRlcnByZXRlcigpCisKKyAgIC4uIGluZGV4OjoKKyAgICAgIG1vZHVsZTogYnVpbHRpbnMKKyAgICAgIG1vZHVsZTogX19tYWluX18KKyAgICAgIG1vZHVsZTogc3lzCisgICAgICBzaW5nbGU6IHN0ZG91dCAoaW4gbW9kdWxlIHN5cykKKyAgICAgIHNpbmdsZTogc3RkZXJyIChpbiBtb2R1bGUgc3lzKQorICAgICAgc2luZ2xlOiBzdGRpbiAoaW4gbW9kdWxlIHN5cykKKworICAgQ3JlYXRlIGEgbmV3IHN1Yi1pbnRlcnByZXRlci4gIFRoaXMgaXMgYW4gKGFsbW9zdCkgdG90YWxseSBzZXBhcmF0ZSBlbnZpcm9ubWVudAorICAgZm9yIHRoZSBleGVjdXRpb24gb2YgUHl0aG9uIGNvZGUuICBJbiBwYXJ0aWN1bGFyLCB0aGUgbmV3IGludGVycHJldGVyIGhhcworICAgc2VwYXJhdGUsIGluZGVwZW5kZW50IHZlcnNpb25zIG9mIGFsbCBpbXBvcnRlZCBtb2R1bGVzLCBpbmNsdWRpbmcgdGhlCisgICBmdW5kYW1lbnRhbCBtb2R1bGVzIDptb2Q6YGJ1aWx0aW5zYCwgOm1vZDpgX19tYWluX19gIGFuZCA6bW9kOmBzeXNgLiAgVGhlCisgICB0YWJsZSBvZiBsb2FkZWQgbW9kdWxlcyAoYGBzeXMubW9kdWxlc2BgKSBhbmQgdGhlIG1vZHVsZSBzZWFyY2ggcGF0aAorICAgKGBgc3lzLnBhdGhgYCkgYXJlIGFsc28gc2VwYXJhdGUuICBUaGUgbmV3IGVudmlyb25tZW50IGhhcyBubyBgYHN5cy5hcmd2YGAKKyAgIHZhcmlhYmxlLiAgSXQgaGFzIG5ldyBzdGFuZGFyZCBJL08gc3RyZWFtIGZpbGUgb2JqZWN0cyBgYHN5cy5zdGRpbmBgLAorICAgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIChob3dldmVyIHRoZXNlIHJlZmVyIHRvIHRoZSBzYW1lIHVuZGVybHlpbmcKKyAgIGZpbGUgZGVzY3JpcHRvcnMpLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIHBvaW50cyB0byB0aGUgZmlyc3QgdGhyZWFkIHN0YXRlIGNyZWF0ZWQgaW4gdGhlIG5ldworICAgc3ViLWludGVycHJldGVyLiAgVGhpcyB0aHJlYWQgc3RhdGUgaXMgbWFkZSBpbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuCisgICBOb3RlIHRoYXQgbm8gYWN0dWFsIHRocmVhZCBpcyBjcmVhdGVkOyBzZWUgdGhlIGRpc2N1c3Npb24gb2YgdGhyZWFkIHN0YXRlcworICAgYmVsb3cuICBJZiBjcmVhdGlvbiBvZiB0aGUgbmV3IGludGVycHJldGVyIGlzIHVuc3VjY2Vzc2Z1bCwgKk5VTEwqIGlzCisgICByZXR1cm5lZDsgbm8gZXhjZXB0aW9uIGlzIHNldCBzaW5jZSB0aGUgZXhjZXB0aW9uIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUKKyAgIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGFuZCB0aGVyZSBtYXkgbm90IGJlIGEgY3VycmVudCB0aHJlYWQgc3RhdGUuICAoTGlrZSBhbGwKKyAgIG90aGVyIFB5dGhvbi9DIEFQSSBmdW5jdGlvbnMsIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlCisgICBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGlzIHN0aWxsIGhlbGQgd2hlbiBpdCByZXR1cm5zOyBob3dldmVyLCB1bmxpa2UgbW9zdAorICAgb3RoZXIgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucywgdGhlcmUgbmVlZG4ndCBiZSBhIGN1cnJlbnQgdGhyZWFkIHN0YXRlIG9uCisgICBlbnRyeS4pCisKKyAgIC4uIGluZGV4OjoKKyAgICAgIHNpbmdsZTogUHlfRmluYWxpemUoKQorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKworICAgRXh0ZW5zaW9uIG1vZHVsZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIChzdWItKWludGVycHJldGVycyBhcyBmb2xsb3dzOiB0aGUgZmlyc3QKKyAgIHRpbWUgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBpcyBpbXBvcnRlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgbm9ybWFsbHksIGFuZCBhCisgICAoc2hhbGxvdykgY29weSBvZiBpdHMgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcyBzcXVpcnJlbGVkIGF3YXkuICBXaGVuIHRoZSBzYW1lCisgICBleHRlbnNpb24gaXMgaW1wb3J0ZWQgYnkgYW5vdGhlciAoc3ViLSlpbnRlcnByZXRlciwgYSBuZXcgbW9kdWxlIGlzIGluaXRpYWxpemVkCisgICBhbmQgZmlsbGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgY29weTsgdGhlIGV4dGVuc2lvbidzIGBgaW5pdGBgIGZ1bmN0aW9uIGlzCisgICBub3QgY2FsbGVkLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gd2hhdCBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzCisgICBpbXBvcnRlZCBhZnRlciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gY29tcGxldGVseSByZS1pbml0aWFsaXplZCBieSBjYWxsaW5nCisgICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBhbmQgOmNmdW5jOmBQeV9Jbml0aWFsaXplYDsgaW4gdGhhdCBjYXNlLCB0aGUgZXh0ZW5zaW9uJ3MKKyAgIGBgaW5pdG1vZHVsZWBgIGZ1bmN0aW9uICppcyogY2FsbGVkIGFnYWluLgorCisgICAuLiBpbmRleDo6IHNpbmdsZTogY2xvc2UoKSAoaW4gbW9kdWxlIG9zKQorCisKKy4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfRW5kSW50ZXJwcmV0ZXIoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQorCisgICAuLiBpbmRleDo6IHNpbmdsZTogUHlfRmluYWxpemUoKQorCisgICBEZXN0cm95IHRoZSAoc3ViLSlpbnRlcnByZXRlciByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gdGhyZWFkIHN0YXRlLiBUaGUgZ2l2ZW4KKyAgIHRocmVhZCBzdGF0ZSBtdXN0IGJlIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiB0aHJlYWQKKyAgIHN0YXRlcyBiZWxvdy4gIFdoZW4gdGhlIGNhbGwgcmV0dXJucywgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzICpOVUxMKi4gIEFsbAorICAgdGhyZWFkIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnRlcnByZXRlciBhcmUgZGVzdHJveWVkLiAgKFRoZSBnbG9iYWwKKyAgIGludGVycHJldGVyIGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIGlzIHN0aWxsIGhlbGQKKyAgIHdoZW4gaXQgcmV0dXJucy4pICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCB3aWxsIGRlc3Ryb3kgYWxsIHN1Yi1pbnRlcnByZXRlcnMgdGhhdAorICAgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkgZGVzdHJveWVkIGF0IHRoYXQgcG9pbnQuCisKKworQnVncyBhbmQgY2F2ZWF0cworLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHN1Yi1pbnRlcnByZXRlcnMgKGFuZCB0aGUgbWFpbiBpbnRlcnByZXRlcikgYXJlIHBhcnQgb2YgdGhlIHNhbWUKK3Byb2Nlc3MsIHRoZSBpbnN1bGF0aW9uIGJldHdlZW4gdGhlbSBpc24ndCBwZXJmZWN0IC0tLSBmb3IgZXhhbXBsZSwgdXNpbmcKK2xvdy1sZXZlbCBmaWxlIG9wZXJhdGlvbnMgbGlrZSAgOmZ1bmM6YG9zLmNsb3NlYCB0aGV5IGNhbgorKGFjY2lkZW50YWxseSBvciBtYWxpY2lvdXNseSkgYWZmZWN0IGVhY2ggb3RoZXIncyBvcGVuIGZpbGVzLiAgQmVjYXVzZSBvZiB0aGUKK3dheSBleHRlbnNpb25zIGFyZSBzaGFyZWQgYmV0d2VlbiAoc3ViLSlpbnRlcnByZXRlcnMsIHNvbWUgZXh0ZW5zaW9ucyBtYXkgbm90Cit3b3JrIHByb3Blcmx5OyB0aGlzIGlzIGVzcGVjaWFsbHkgbGlrZWx5IHdoZW4gdGhlIGV4dGVuc2lvbiBtYWtlcyB1c2Ugb2YKKyhzdGF0aWMpIGdsb2JhbCB2YXJpYWJsZXMsIG9yIHdoZW4gdGhlIGV4dGVuc2lvbiBtYW5pcHVsYXRlcyBpdHMgbW9kdWxlJ3MKK2RpY3Rpb25hcnkgYWZ0ZXIgaXRzIGluaXRpYWxpemF0aW9uLiAgSXQgaXMgcG9zc2libGUgdG8gaW5zZXJ0IG9iamVjdHMgY3JlYXRlZAoraW4gb25lIHN1Yi1pbnRlcnByZXRlciBpbnRvIGEgbmFtZXNwYWNlIG9mIGFub3RoZXIgc3ViLWludGVycHJldGVyOyB0aGlzIHNob3VsZAorYmUgZG9uZSB3aXRoIGdyZWF0IGNhcmUgdG8gYXZvaWQgc2hhcmluZyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLCBtZXRob2RzLAoraW5zdGFuY2VzIG9yIGNsYXNzZXMgYmV0d2VlbiBzdWItaW50ZXJwcmV0ZXJzLCBzaW5jZSBpbXBvcnQgb3BlcmF0aW9ucyBleGVjdXRlZAorYnkgc3VjaCBvYmplY3RzIG1heSBhZmZlY3QgdGhlIHdyb25nIChzdWItKWludGVycHJldGVyJ3MgZGljdGlvbmFyeSBvZiBsb2FkZWQKK21vZHVsZXMuCisKK0Fsc28gbm90ZSB0aGF0IGNvbWJpbmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCA6Y2Z1bmM6YFB5R0lMU3RhdGVfXCpgIEFQSXMKK2lzIGRlbGljYXRlLCBiZWNvbWUgdGhlc2UgQVBJcyBhc3N1bWUgYSBiaWplY3Rpb24gYmV0d2VlbiBQeXRob24gdGhyZWFkIHN0YXRlcworYW5kIE9TLWxldmVsIHRocmVhZHMsIGFuIGFzc3VtcHRpb24gYnJva2VuIGJ5IHRoZSBwcmVzZW5jZSBvZiBzdWItaW50ZXJwcmV0ZXJzLgorSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IHN3aXRjaCBzdWItaW50ZXJwcmV0ZXJzIGJldHdlZW4gYSBwYWlyCitvZiBtYXRjaGluZyA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBhbmQgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzLgorRnVydGhlcm1vcmUsIGV4dGVuc2lvbnMgKHN1Y2ggYXMgOm1vZDpgY3R5cGVzYCkgdXNpbmcgdGhlc2UgQVBJcyB0byBhbGxvdyBjYWxsaW5nCitvZiBQeXRob24gY29kZSBmcm9tIG5vbi1QeXRob24gY3JlYXRlZCB0aHJlYWRzIHdpbGwgcHJvYmFibHkgYmUgYnJva2VuIHdoZW4gdXNpbmcKK3N1Yi1pbnRlcnByZXRlcnMuCisKKworQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgbWVjaGFuaXNtIGlzIHByb3ZpZGVkIHRvIG1ha2UgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4KK2ludGVycHJldGVyIHRocmVhZC4gIFRoZXNlIG5vdGlmaWNhdGlvbnMgdGFrZSB0aGUgZm9ybSBvZiBhIGZ1bmN0aW9uCitwb2ludGVyIGFuZCBhIHZvaWQgYXJndW1lbnQuCisKKy4uIGluZGV4Ojogc2luZ2xlOiBzZXRjaGVja2ludGVydmFsKCkgKGluIG1vZHVsZSBzeXMpCisKK0V2ZXJ5IGNoZWNrIGludGVydmFsLCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBpcyByZWxlYXNlZCBhbmQKK3JlYWNxdWlyZWQsIFB5dGhvbiB3aWxsIGFsc28gY2FsbCBhbnkgc3VjaCBwcm92aWRlZCBmdW5jdGlvbnMuICBUaGlzIGNhbiBiZSB1c2VkCitmb3IgZXhhbXBsZSBieSBhc3luY2hyb25vdXMgSU8gaGFuZGxlcnMuICBUaGUgbm90aWZpY2F0aW9uIGNhbiBiZSBzY2hlZHVsZWQgZnJvbQorYSB3b3JrZXIgdGhyZWFkIGFuZCB0aGUgYWN0dWFsIGNhbGwgdGhhbiBtYWRlIGF0IHRoZSBlYXJsaWVzdCBjb252ZW5pZW5jZSBieSB0aGUKK21haW4gdGhyZWFkIHdoZXJlIGl0IGhhcyBwb3NzZXNzaW9uIG9mIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBhbmQgY2FuCitwZXJmb3JtIGFueSBQeXRob24gQVBJIGNhbGxzLgorCisuLiBjZnVuY3Rpb246OiB2b2lkIFB5X0FkZFBlbmRpbmdDYWxsKCBpbnQgKCpmdW5jKSh2b2lkICosIHZvaWQgKmFyZykgKQorCisgICAuLiBpbmRleDo6IHNpbmdsZTogUHlfQWRkUGVuZGluZ0NhbGwoKQorCisgICBQb3N0IGEgbm90aWZpY2F0aW9uIHRvIHRoZSBQeXRob24gbWFpbiB0aHJlYWQuICBJZiBzdWNjZXNzZnVsLCAqZnVuYyogd2lsbCBiZQorICAgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50ICphcmcqIGF0IHRoZSBlYXJsaWVzdCBjb252ZW5pZW5jZS4gICpmdW5jKiB3aWxsIGJlCisgICBjYWxsZWQgaGF2aW5nIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBoZWxkIGFuZCBjYW4gdGh1cyB1c2UgdGhlIGZ1bGwKKyAgIFB5dGhvbiBBUEkgYW5kIGNhbiB0YWtlIGFueSBhY3Rpb24gc3VjaCBhcyBzZXR0aW5nIG9iamVjdCBhdHRyaWJ1dGVzIHRvCisgICBzaWduYWwgSU8gY29tcGxldGlvbi4gIEl0IG11c3QgcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgc2lnbmFsbGluZyBhbgorICAgZXhjZXB0aW9uLiAgVGhlIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiB3b24ndCBiZSBpbnRlcnJ1cHRlZCB0byBwZXJmb3JtIGFub3RoZXIKKyAgIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24gcmVjdXJzaXZlbHksIGJ1dCBpdCBjYW4gc3RpbGwgYmUgaW50ZXJydXB0ZWQgdG8KKyAgIHN3aXRjaCB0aHJlYWRzIGlmIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBpcyByZWxlYXNlZCwgZm9yIGV4YW1wbGUsIGlmIGl0CisgICBjYWxscyBiYWNrIGludG8gUHl0aG9uIGNvZGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgaW4gd2hpY2ggY2FzZSB0aGUgbm90aWZpY2F0aW9uIGhhcyBiZWVuCisgICBzY2hlZHVsZWQuICBPdGhlcndpc2UsIGZvciBleGFtcGxlIGlmIHRoZSBub3RpZmljYXRpb24gYnVmZmVyIGlzIGZ1bGwsIGl0CisgICByZXR1cm5zIC0xIHdpdGhvdXQgc2V0dGluZyBhbnkgZXhjZXB0aW9uLgorCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYmUgaXQgYSBQeXRob24gdGhyZWFkIG9yIHNvbWUKKyAgIG90aGVyIHN5c3RlbSB0aHJlYWQuICBJZiBpdCBpcyBhIFB5dGhvbiB0aHJlYWQsIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIGl0IGhvbGRzCisgICB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgb3Igbm90LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogCiAKIC4uIF9wcm9maWxpbmc6CkBAIC04ODEsMTMgKzk3NCwxNCBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmNvbnN0OmBQeVRyYWNlX0xJTkVgICAgICAgICB8IEFsd2F5cyAqTlVMTCouICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YFB5VHJhY2VfUkVUVVJOYCAgICAgIHwgVmFsdWUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gIHwKKyAgIHwgOmNvbnN0OmBQeVRyYWNlX1JFVFVSTmAgICAgICB8IFZhbHVlIGJlaW5nIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciAqTlVMTCogaWYgY2F1c2VkIGJ5IGFuIGV4Y2VwdGlvbi4gfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfQ0FMTGAgICAgICB8IE5hbWUgb2YgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLiAgICAgICB8CisgICB8IDpjb25zdDpgUHlUcmFjZV9DX0NBTExgICAgICAgfCBGdW5jdGlvbiBvYmplY3QgYmVpbmcgY2FsbGVkLiAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfRVhDRVBUSU9OYCB8IEFsd2F5cyAqTlVMTCouICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgUHlUcmFjZV9DX0VYQ0VQVElPTmAgfCBGdW5jdGlvbiBvYmplY3QgYmVpbmcgY2FsbGVkLiAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBQeVRyYWNlX0NfUkVUVVJOYCAgICB8IEFsd2F5cyAqTlVMTCouICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IDpjb25zdDpgUHlUcmFjZV9DX1JFVFVSTmAgICAgfCBGdW5jdGlvbiBvYmplY3QgYmVpbmcgY2FsbGVkLiAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC05MzIsNyArMTAyNiw3IEBACiAuLiBjdmFyOjogaW50IFB5VHJhY2VfQ19FWENFUFRJT04KIAogICAgVGhlIHZhbHVlIGZvciB0aGUgKndoYXQqIHBhcmFtZXRlciB0byA6Y3R5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb25zIHdoZW4gYSBDCi0gICBmdW5jdGlvbiBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgIGZ1bmN0aW9uIGhhcyByYWlzZWQgYW4gZXhjZXB0aW9uLgogCiAKIC4uIGN2YXI6OiBpbnQgUHlUcmFjZV9DX1JFVFVSTgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2ludHJvLnJzdCBiL0RvYy9jLWFwaS9pbnRyby5yc3QKaW5kZXggYzU2MDAwZS4uYTJlNDdkOSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ludHJvLnJzdAorKysgYi9Eb2MvYy1hcGkvaW50cm8ucnN0CkBAIC00MSw4ICs0MSw4IEBACiAgICAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKIFRoaXMgaW1wbGllcyBpbmNsdXNpb24gb2YgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBoZWFkZXJzOiBgYDxzdGRpby5oPmBgLAotYGA8c3RyaW5nLmg+YGAsIGBgPGVycm5vLmg+YGAsIGBgPGxpbWl0cy5oPmBgLCBhbmQgYGA8c3RkbGliLmg+YGAgKGlmCi1hdmFpbGFibGUpLgorYGA8c3RyaW5nLmg+YGAsIGBgPGVycm5vLmg+YGAsIGBgPGxpbWl0cy5oPmBgLCBgYDxhc3NlcnQuaD5gYCBhbmQgYGA8c3RkbGliLmg+YGAKKyhpZiBhdmFpbGFibGUpLgogCiAuLiBub3RlOjoKIApAQCAtMzYxLDE1ICszNjEsMTYgQEAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IFB5RXJyX09jY3VycmVkKCkKIAotRm9yIEMgcHJvZ3JhbW1lcnMsIGhvd2V2ZXIsIGVycm9yIGNoZWNraW5nIGFsd2F5cyBoYXMgdG8gYmUgZXhwbGljaXQuICAgQWxsCi1mdW5jdGlvbnMgaW4gdGhlIFB5dGhvbi9DIEFQSSBjYW4gcmFpc2UgZXhjZXB0aW9ucywgdW5sZXNzIGFuICBleHBsaWNpdCBjbGFpbSBpcwotbWFkZSBvdGhlcndpc2UgaW4gYSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24uICBJbiAgZ2VuZXJhbCwgd2hlbiBhIGZ1bmN0aW9uCi1lbmNvdW50ZXJzIGFuIGVycm9yLCBpdCBzZXRzIGFuIGV4Y2VwdGlvbiwgIGRpc2NhcmRzIGFueSBvYmplY3QgcmVmZXJlbmNlcyB0aGF0Ci1pdCBvd25zLCBhbmQgcmV0dXJucyBhbiAgZXJyb3IgaW5kaWNhdG9yIC0tLSB1c3VhbGx5ICpOVUxMKiBvciBgYC0xYGAuICBBIGZldwotZnVuY3Rpb25zICByZXR1cm4gYSBCb29sZWFuIHRydWUvZmFsc2UgcmVzdWx0LCB3aXRoIGZhbHNlIGluZGljYXRpbmcgYW4gZXJyb3IuCi1WZXJ5IGZldyBmdW5jdGlvbnMgcmV0dXJuIG5vIGV4cGxpY2l0IGVycm9yIGluZGljYXRvciBvciBoYXZlIGFuICBhbWJpZ3VvdXMKLXJldHVybiB2YWx1ZSwgYW5kIHJlcXVpcmUgZXhwbGljaXQgdGVzdGluZyBmb3IgZXJyb3JzIHdpdGgKLTpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgLgorRm9yIEMgcHJvZ3JhbW1lcnMsIGhvd2V2ZXIsIGVycm9yIGNoZWNraW5nIGFsd2F5cyBoYXMgdG8gYmUgZXhwbGljaXQuICBBbGwKK2Z1bmN0aW9ucyBpbiB0aGUgUHl0aG9uL0MgQVBJIGNhbiByYWlzZSBleGNlcHRpb25zLCB1bmxlc3MgYW4gZXhwbGljaXQgY2xhaW0gaXMKK21hZGUgb3RoZXJ3aXNlIGluIGEgZnVuY3Rpb24ncyBkb2N1bWVudGF0aW9uLiAgSW4gZ2VuZXJhbCwgd2hlbiBhIGZ1bmN0aW9uCitlbmNvdW50ZXJzIGFuIGVycm9yLCBpdCBzZXRzIGFuIGV4Y2VwdGlvbiwgZGlzY2FyZHMgYW55IG9iamVjdCByZWZlcmVuY2VzIHRoYXQKK2l0IG93bnMsIGFuZCByZXR1cm5zIGFuIGVycm9yIGluZGljYXRvci4gIElmIG5vdCBkb2N1bWVudGVkIG90aGVyd2lzZSwgdGhpcworaW5kaWNhdG9yIGlzIGVpdGhlciAqTlVMTCogb3IgYGAtMWBgLCBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUuCitBIGZldyBmdW5jdGlvbnMgcmV0dXJuIGEgQm9vbGVhbiB0cnVlL2ZhbHNlIHJlc3VsdCwgd2l0aCBmYWxzZSBpbmRpY2F0aW5nIGFuCitlcnJvci4gIFZlcnkgZmV3IGZ1bmN0aW9ucyByZXR1cm4gbm8gZXhwbGljaXQgZXJyb3IgaW5kaWNhdG9yIG9yIGhhdmUgYW4KK2FtYmlndW91cyByZXR1cm4gdmFsdWUsIGFuZCByZXF1aXJlIGV4cGxpY2l0IHRlc3RpbmcgZm9yIGVycm9ycyB3aXRoCis6Y2Z1bmM6YFB5RXJyX09jY3VycmVkYC4gIFRoZXNlIGV4Y2VwdGlvbnMgYXJlIGFsd2F5cyBleHBsaWNpdGx5IGRvY3VtZW50ZWQuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogUHlFcnJfU2V0U3RyaW5nKCkKQEAgLTUyNCwxMiArNTI1LDEyIEBACiA6bW9kOmBfX2J1aWx0aW5fX2AsIDptb2Q6YF9fbWFpbl9fYCwgOm1vZDpgc3lzYCwgYW5kIDptb2Q6YGV4Y2VwdGlvbnNgLiAgSXQgYWxzbwogaW5pdGlhbGl6ZXMgdGhlIG1vZHVsZSBzZWFyY2ggcGF0aCAoYGBzeXMucGF0aGBgKS4KIAotLi4gaW5kZXg6OiBzaW5nbGU6IFB5U3lzX1NldEFyZ3YoKQorLi4gaW5kZXg6OiBzaW5nbGU6IFB5U3lzX1NldEFyZ3ZFeCgpCiAKIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAgZG9lcyBub3Qgc2V0IHRoZSAic2NyaXB0IGFyZ3VtZW50IGxpc3QiICAoYGBzeXMuYXJndmBgKS4KLUlmIHRoaXMgdmFyaWFibGUgaXMgbmVlZGVkIGJ5IFB5dGhvbiBjb2RlIHRoYXQgIHdpbGwgYmUgZXhlY3V0ZWQgbGF0ZXIsIGl0IG11c3QKLWJlIHNldCBleHBsaWNpdGx5IHdpdGggYSBjYWxsIHRvICBgYFB5U3lzX1NldEFyZ3YoYXJnYywgYXJndilgYCBzdWJzZXF1ZW50IHRvCi10aGUgY2FsbCB0byA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgLgorSWYgdGhpcyB2YXJpYWJsZSBpcyBuZWVkZWQgYnkgUHl0aG9uIGNvZGUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGxhdGVyLCBpdCBtdXN0CitiZSBzZXQgZXhwbGljaXRseSB3aXRoIGEgY2FsbCB0byAgYGBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgdXBkYXRlcGF0aClgYAorYWZ0ZXIgdGhlIGNhbGwgdG8gOmNmdW5jOmBQeV9Jbml0aWFsaXplYC4KIAogT24gbW9zdCBzeXN0ZW1zIChpbiBwYXJ0aWN1bGFyLCBvbiBVbml4IGFuZCBXaW5kb3dzLCBhbHRob3VnaCB0aGUgZGV0YWlscyBhcmUKIHNsaWdodGx5IGRpZmZlcmVudCksIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAgY2FsY3VsYXRlcyB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbGlzdC5yc3QgYi9Eb2MvYy1hcGkvbGlzdC5yc3QKaW5kZXggMjQyYjRlNi4uZDI0YWE3MiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2xpc3QucnN0CisrKyBiL0RvYy9jLWFwaS9saXN0LnJzdApAQCAtNDIsNyArNDIsNyBAQAogCiAgICAuLiBub3RlOjoKIAotICAgICAgSWYgKmxlbmd0aCogaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSByZXR1cm5lZCBsaXN0IG9iamVjdCdzIGl0ZW1zIGFyZQorICAgICAgSWYgKmxlbiogaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSByZXR1cm5lZCBsaXN0IG9iamVjdCdzIGl0ZW1zIGFyZQogICAgICAgc2V0IHRvIGBgTlVMTGBgLiAgVGh1cyB5b3UgY2Fubm90IHVzZSBhYnN0cmFjdCBBUEkgZnVuY3Rpb25zIHN1Y2ggYXMKICAgICAgIDpjZnVuYzpgUHlTZXF1ZW5jZV9TZXRJdGVtYCAgb3IgZXhwb3NlIHRoZSBvYmplY3QgdG8gUHl0aG9uIGNvZGUgYmVmb3JlCiAgICAgICBzZXR0aW5nIGFsbCBpdGVtcyB0byBhIHJlYWwgb2JqZWN0IHdpdGggOmNmdW5jOmBQeUxpc3RfU2V0SXRlbWAuCkBAIC03NSw5ICs3NSw5IEBACiAKIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxpc3RfR2V0SXRlbShQeU9iamVjdCAqbGlzdCwgUHlfc3NpemVfdCBpbmRleCkKIAotICAgUmV0dXJuIHRoZSBvYmplY3QgYXQgcG9zaXRpb24gKnBvcyogaW4gdGhlIGxpc3QgcG9pbnRlZCB0byBieSAqcCouICBUaGUKKyAgIFJldHVybiB0aGUgb2JqZWN0IGF0IHBvc2l0aW9uICppbmRleCogaW4gdGhlIGxpc3QgcG9pbnRlZCB0byBieSAqbGlzdCouICBUaGUKICAgIHBvc2l0aW9uIG11c3QgYmUgcG9zaXRpdmUsIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgbGlzdCBpcyBub3QKLSAgIHN1cHBvcnRlZC4gIElmICpwb3MqIGlzIG91dCBvZiBib3VuZHMsIHJldHVybiAqTlVMTCogYW5kIHNldCBhbgorICAgc3VwcG9ydGVkLiAgSWYgKmluZGV4KiBpcyBvdXQgb2YgYm91bmRzLCByZXR1cm4gKk5VTEwqIGFuZCBzZXQgYW4KICAgIDpleGM6YEluZGV4RXJyb3JgIGV4Y2VwdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9sb25nLnJzdCBiL0RvYy9jLWFwaS9sb25nLnJzdAppbmRleCA5ZWI5ZjYwLi4xMWQyOTA4IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbG9uZy5yc3QKKysrIGIvRG9jL2MtYXBpL2xvbmcucnN0CkBAIC02NSw2ICs2NSwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKIAorLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3NpemVfdChQeV9zc2l6ZV90IHYpCisKKyAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IHdpdGggYSB2YWx1ZSBvZiAqdiosIG9yICpOVUxMKgorICAgb24gZmFpbHVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU2l6ZV90KHNpemVfdCB2KQorCisgICBSZXR1cm4gYSBuZXcgOmN0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCB3aXRoIGEgdmFsdWUgb2YgKnYqLCBvciAqTlVMTCoKKyAgIG9uIGZhaWx1cmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorCisKIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xPTkdfTE9ORyB2KQogCiAgICBSZXR1cm4gYSBuZXcgOmN0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tIGEgQyA6Y3R5cGU6YGxvbmcgbG9uZ2AsIG9yICpOVUxMKgpAQCAtODcsNyArMTAzLDcgQEAKIAogICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaCBpcwogICAgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKLSAgIGBgKnBlbmRgYCB3aWxsIHBvaW50IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gKnN0ciogd2hpY2ggZm9sbG93cyB0aGUKKyAgICpcKnBlbmQqIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiAqc3RyKiB3aGljaCBmb2xsb3dzIHRoZQogICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlci4gIElmICpiYXNlKiBpcyBgYDBgYCwgdGhlIHJhZGl4IHdpbGwgYmUgZGV0ZXJtaW5lZAogICAgYmFzZWQgb24gdGhlIGxlYWRpbmcgY2hhcmFjdGVycyBvZiAqc3RyKjogaWYgKnN0ciogc3RhcnRzIHdpdGggYGAnMHgnYGAgb3IKICAgIGBgJzBYJ2BgLCByYWRpeCAxNiB3aWxsIGJlIHVzZWQ7IGlmICpzdHIqIHN0YXJ0cyB3aXRoIGBgJzAnYGAsIHJhZGl4IDggd2lsbCBiZQpAQCAtMTMzLDYgKzE0OSwzMiBAQAogICAgYW5kIGBgLTFgYCB3aWxsIGJlIHJldHVybmVkLgogCiAKKy4uIGNmdW5jdGlvbjo6IGxvbmcgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICpweWxvbmcsIGludCAqb3ZlcmZsb3cpCisKKyAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YKKyAgICpweWxvbmcqLiAgSWYgKnB5bG9uZyogaXMgZ3JlYXRlciB0aGFuIDpjb25zdDpgTE9OR19NQVhgIG9yIGxlc3MKKyAgIHRoYW4gOmNvbnN0OmBMT05HX01JTmAsIHNldCAqXCpvdmVyZmxvdyogdG8gYGAxYGAgb3IgYGAtMWBgLAorICAgcmVzcGVjdGl2ZWx5LCBhbmQgcmV0dXJuIGBgLTFgYDsgb3RoZXJ3aXNlLCBzZXQgKlwqb3ZlcmZsb3cqIHRvCisgICBgYDBgYC4gIElmIGFueSBvdGhlciBleGNlcHRpb24gb2NjdXJzIChmb3IgZXhhbXBsZSBhIFR5cGVFcnJvciBvcgorICAgTWVtb3J5RXJyb3IpLCB0aGVuIGBgLTFgYCB3aWxsIGJlIHJldHVybmVkIGFuZCAqXCpvdmVyZmxvdyogd2lsbAorICAgYmUgYGAwYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGNmdW5jdGlvbjo6IFBZX0xPTkdfTE9ORyBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICpweWxvbmcsIGludCAqb3ZlcmZsb3cpCisKKyAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nIGxvbmdgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZgorICAgKnB5bG9uZyouICBJZiAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gOmNvbnN0OmBQWV9MTE9OR19NQVhgIG9yIGxlc3MKKyAgIHRoYW4gOmNvbnN0OmBQWV9MTE9OR19NSU5gLCBzZXQgKlwqb3ZlcmZsb3cqIHRvIGBgMWBgIG9yIGBgLTFgYCwKKyAgIHJlc3BlY3RpdmVseSwgYW5kIHJldHVybiBgYC0xYGA7IG90aGVyd2lzZSwgc2V0ICpcKm92ZXJmbG93KiB0bworICAgYGAwYGAuICBJZiBhbnkgb3RoZXIgZXhjZXB0aW9uIG9jY3VycyAoZm9yIGV4YW1wbGUgYSBUeXBlRXJyb3Igb3IKKyAgIE1lbW9yeUVycm9yKSwgdGhlbiBgYC0xYGAgd2lsbCBiZSByZXR1cm5lZCBhbmQgKlwqb3ZlcmZsb3cqIHdpbGwKKyAgIGJlIGBgMGBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnB5bG9uZykKIAogICAgLi4gaW5kZXg6OgpAQCAtMTU3LDIzICsxOTksNDYgQEAKICAgIHJhaXNlZC4KIAogCisuLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnB5bG9uZykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQWV9TU0laRV9UX01BWAorCisgICBSZXR1cm4gYSA6Y3R5cGU6YFB5X3NzaXplX3RgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4gIElmCisgICAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gOmNvbnN0OmBQWV9TU0laRV9UX01BWGAsIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzCisgICByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorCisKIC4uIGNmdW5jdGlvbjo6IFBZX0xPTkdfTE9ORyBQeUxvbmdfQXNMb25nTG9uZyhQeU9iamVjdCAqcHlsb25nKQogCi0gICBSZXR1cm4gYSBDIDpjdHlwZTpgbG9uZyBsb25nYCBmcm9tIGEgUHl0aG9uIGxvbmcgaW50ZWdlci4gIElmICpweWxvbmcqIGNhbm5vdCBiZQotICAgcmVwcmVzZW50ZWQgYXMgYSA6Y3R5cGU6YGxvbmcgbG9uZ2AsIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBPdmVyZmxvd0Vycm9yIChidWlsdC1pbiBleGNlcHRpb24pCisKKyAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nIGxvbmdgIGZyb20gYSBQeXRob24gbG9uZyBpbnRlZ2VyLiAgSWYKKyAgICpweWxvbmcqIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhIDpjdHlwZTpgbG9uZyBsb25nYCwgYW4KKyAgIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzIHJhaXNlZCBhbmQgYGAtMWBgIGlzIHJldHVybmVkLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKIAogCiAuLiBjZnVuY3Rpb246OiB1bnNpZ25lZCBQWV9MT05HX0xPTkcgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhQeU9iamVjdCAqcHlsb25nKQogCi0gICBSZXR1cm4gYSBDIDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCBmcm9tIGEgUHl0aG9uIGxvbmcgaW50ZWdlci4gSWYgKnB5bG9uZyoKLSAgIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhbiA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AsIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgCi0gICB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgdmFsdWUgaXMgcG9zaXRpdmUsIG9yIGEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZgotICAgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlLgorICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBPdmVyZmxvd0Vycm9yIChidWlsdC1pbiBleGNlcHRpb24pCisKKyAgIFJldHVybiBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIGZyb20gYSBQeXRob24gbG9uZyBpbnRlZ2VyLiBJZgorICAgKnB5bG9uZyogY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGFuIDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCwgYW4KKyAgIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzIHJhaXNlZCBhbmQgYGAodW5zaWduZWQgbG9uZyBsb25nKS0xYGAgaXMKKyAgIHJldHVybmVkLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEEgbmVnYXRpdmUgKnB5bG9uZyogbm93IHJhaXNlcyA6ZXhjOmBPdmVyZmxvd0Vycm9yYCwgbm90CisgICAgICA6ZXhjOmBUeXBlRXJyb3JgLgorCiAKIC4uIGNmdW5jdGlvbjo6IHVuc2lnbmVkIGxvbmcgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqaW8pCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9vYmpidWZmZXIucnN0IGIvRG9jL2MtYXBpL29iamJ1ZmZlci5yc3QKaW5kZXggMGY0ZGNjZi4uOTNmNWZmMCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL29iamJ1ZmZlci5yc3QKKysrIGIvRG9jL2MtYXBpL29iamJ1ZmZlci5yc3QKQEAgLTIsMTAgKzIsMTAgQEAKIAogLi4gX2Fic3RyYWN0LWJ1ZmZlcjoKIAorCiBPbGQgQnVmZmVyIFByb3RvY29sCiA9PT09PT09PT09PT09PT09PT09CiAKLQogVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbGVnYWN5IGJ1ZmZlciBwcm90b2NvbCwgd2hpY2ggaGFzIGJlZW4gaW50cm9kdWNlZAogaW4gUHl0aG9uIDEuNi4gSXQgaXMgc3RpbGwgc3VwcG9ydGVkIGJ1dCBkZXByZWNhdGVkIGluIHRoZSBQeXRob24gMi54IHNlcmllcy4KIFB5dGhvbiAzLjAgaW50cm9kdWNlcyBhIG5ldyBidWZmZXIgcHJvdG9jb2wgd2hpY2ggZml4ZXMgd2Vha25lc3NlcyBhbmQKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9yZWZsZWN0aW9uLnJzdCBiL0RvYy9jLWFwaS9yZWZsZWN0aW9uLnJzdAppbmRleCA4MjJjNTkzLi4zOTk2YzFmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvcmVmbGVjdGlvbi5yc3QKKysrIGIvRG9jL2MtYXBpL3JlZmxlY3Rpb24ucnN0CkBAIC0yOSw2ICsyOSwxMSBAQAogICAgY3VycmVudGx5IGV4ZWN1dGluZy4KIAogCisuLiBjZnVuY3Rpb246OiBpbnQgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKFB5RnJhbWVPYmplY3QgKmZyYW1lKQorCisgICBSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIHRoYXQgKmZyYW1lKiBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisKIC4uIGNmdW5jdGlvbjo6IGludCBQeUV2YWxfR2V0UmVzdHJpY3RlZCgpCiAKICAgIElmIHRoZXJlIGlzIGEgY3VycmVudCBmcmFtZSBhbmQgaXQgaXMgZXhlY3V0aW5nIGluIHJlc3RyaWN0ZWQgbW9kZSwgcmV0dXJuIHRydWUsCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvc3RyaW5nLnJzdCBiL0RvYy9jLWFwaS9zdHJpbmcucnN0CmluZGV4IGM3ZDI3YTMuLjliOTU4NTkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zdHJpbmcucnN0CisrKyBiL0RvYy9jLWFwaS9zdHJpbmcucnN0CkBAIC03OCw2ICs3OCw4IEBACiAgICAuLiAlIFRoZSBkZXNjcmlwdGlvbnMgZm9yICV6ZCBhbmQgJXp1IGFyZSB3cm9uZywgYnV0IHRoZSB0cnV0aCBpcyBjb21wbGljYXRlZAogICAgLi4gJSBiZWNhdXNlIG5vdCBhbGwgY29tcGlsZXJzIHN1cHBvcnQgdGhlICV6IHdpZHRoIG1vZGlmaWVyIC0tIHdlIGZha2UgaXQKICAgIC4uICUgd2hlbiBuZWNlc3NhcnkgdmlhIGludGVycG9sYXRpbmcgUFlfRk9STUFUX1NJWkVfVC4KKyAgIC4uICUgU2ltaWxhciBjb21tZW50cyBhcHBseSB0byB0aGUgJWxsIHdpZHRoIG1vZGlmaWVyIGFuZAorICAgLi4gJSBQWV9GT1JNQVRfTE9OR19MT05HLgogICAgLi4gJSAldSwgJWx1LCAlenUgc2hvdWxkIGhhdmUgIm5ldyBpbiBQeXRob24gMi41IiBibHVyYnMuCiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEwMCw2ICsxMDIsMTIgQEAKICAgIHwgOmF0dHI6YCVsdWAgICAgICAgfCB1bnNpZ25lZCBsb25nIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsdSIpYGAuICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsbGRgICAgICAgfCBsb25nIGxvbmcgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsbGQiKWBgLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsbHVgICAgICAgfCB1bnNpZ25lZCAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCBsb25nIGxvbmcgICAgIHwgYGBwcmludGYoIiVsbHUiKWBgLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmF0dHI6YCV6ZGAgICAgICAgfCBQeV9zc2l6ZV90ICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6ZCIpYGAuICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEyNyw2ICsxMzUsMTQgQEAKICAgIEFuIHVucmVjb2duaXplZCBmb3JtYXQgY2hhcmFjdGVyIGNhdXNlcyBhbGwgdGhlIHJlc3Qgb2YgdGhlIGZvcm1hdCBzdHJpbmcgdG8gYmUKICAgIGNvcGllZCBhcy1pcyB0byB0aGUgcmVzdWx0IHN0cmluZywgYW5kIGFueSBleHRyYSBhcmd1bWVudHMgZGlzY2FyZGVkLgogCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGAiJWxsZCJgIGFuZCBgIiVsbHUiYCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgb25seSBhdmFpbGFibGUKKyAgICAgIHdoZW4gOmNvbnN0OmBIQVZFX0xPTkdfTE9OR2AgaXMgZGVmaW5lZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIGAiJWxsZCJgIGFuZCBgIiVsbHUiYCBhZGRlZC4KKwogCiAuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTdHJpbmdfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QgYi9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKaW5kZXggNmVmMzFkMi4uNWJlODhhYyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CisrKyBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdApAQCAtMTM3LDEyICsxMzcsMTAgQEAKIAogICAgVGhpcyBpcyB0aGUgdHlwaWNhbCBjYWxsaW5nIGNvbnZlbnRpb24sIHdoZXJlIHRoZSBtZXRob2RzIGhhdmUgdGhlIHR5cGUKICAgIDpjdHlwZTpgUHlDRnVuY3Rpb25gLiBUaGUgZnVuY3Rpb24gZXhwZWN0cyB0d28gOmN0eXBlOmBQeU9iamVjdFwqYCB2YWx1ZXMuCi0gICBUaGUgZmlyc3Qgb25lIGlzIHRoZSAqc2VsZiogb2JqZWN0IGZvciBtZXRob2RzOyBmb3IgbW9kdWxlIGZ1bmN0aW9ucywgaXQKLSAgIGhhcyB0aGUgdmFsdWUgZ2l2ZW4gdG8gOmNmdW5jOmBQeV9Jbml0TW9kdWxlNGAgKG9yICpOVUxMKiBpZgotICAgOmNmdW5jOmBQeV9Jbml0TW9kdWxlYCB3YXMgdXNlZCkuICBUaGUgc2Vjb25kIHBhcmFtZXRlciAob2Z0ZW4gY2FsbGVkCi0gICAqYXJncyopIGlzIGEgdHVwbGUgb2JqZWN0IHJlcHJlc2VudGluZyBhbGwgYXJndW1lbnRzLiBUaGlzIHBhcmFtZXRlciBpcwotICAgdHlwaWNhbGx5IHByb2Nlc3NlZCB1c2luZyA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIG9yCi0gICA6Y2Z1bmM6YFB5QXJnX1VucGFja1R1cGxlYC4KKyAgIFRoZSBmaXJzdCBvbmUgaXMgdGhlICpzZWxmKiBvYmplY3QgZm9yIG1ldGhvZHM7IGZvciBtb2R1bGUgZnVuY3Rpb25zLCBpdCBpcworICAgdGhlIG1vZHVsZSBvYmplY3QuICBUaGUgc2Vjb25kIHBhcmFtZXRlciAob2Z0ZW4gY2FsbGVkICphcmdzKikgaXMgYSB0dXBsZQorICAgb2JqZWN0IHJlcHJlc2VudGluZyBhbGwgYXJndW1lbnRzLiAgVGhpcyBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IHByb2Nlc3NlZAorICAgdXNpbmcgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBvciA6Y2Z1bmM6YFB5QXJnX1VucGFja1R1cGxlYC4KIAogCiAuLiBkYXRhOjogTUVUSF9LRVlXT1JEUwpAQCAtMTU4LDkgKzE1Niw5IEBACiAKICAgIE1ldGhvZHMgd2l0aG91dCBwYXJhbWV0ZXJzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBhcmd1bWVudHMgYXJlIGdpdmVuIGlmCiAgICB0aGV5IGFyZSBsaXN0ZWQgd2l0aCB0aGUgOmNvbnN0OmBNRVRIX05PQVJHU2AgZmxhZy4gIFRoZXkgbmVlZCB0byBiZSBvZiB0eXBlCi0gICA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYC4gIFdoZW4gdXNlZCB3aXRoIG9iamVjdCBtZXRob2RzLCB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzCi0gICB0eXBpY2FsbHkgbmFtZWQgYGBzZWxmYGAgYW5kIHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGluc3RhbmNlLgotICAgSW4gYWxsIGNhc2VzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHdpbGwgYmUgKk5VTEwqLgorICAgOmN0eXBlOmBQeUNGdW5jdGlvbmAuICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHR5cGljYWxseSBuYW1lZCBgYHNlbGZgYCBhbmQKKyAgIHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgbW9kdWxlIG9yIG9iamVjdCBpbnN0YW5jZS4gIEluIGFsbCBjYXNlcyB0aGUKKyAgIHNlY29uZCBwYXJhbWV0ZXIgd2lsbCBiZSAqTlVMTCouCiAKIAogLi4gZGF0YTo6IE1FVEhfTwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3N5cy5yc3QgYi9Eb2MvYy1hcGkvc3lzLnJzdAppbmRleCBmNDZmYjlhLi42Nzg4YmM5IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3lzLnJzdAorKysgYi9Eb2MvYy1hcGkvc3lzLnJzdApAQCAtMTUsMTMgKzE1LDYgQEAKICAgIG9uZSBvZiB0aGUgc3RyaW5ncyBgYCc8c3RkaW4+J2BgIG9yIGBgJz8/PydgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBsb25nIFB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWUoY2hhciAqZmlsZW5hbWUpCi0KLSAgIFJldHVybiB0aGUgdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSAqZmlsZW5hbWUqLiBUaGUgcmVzdWx0IGlzCi0gICBlbmNvZGVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgdGltZXN0YW1wIHJldHVybmVkIGJ5IHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkKLSAgIGZ1bmN0aW9uIDpjZnVuYzpgdGltZWAuCi0KLQogLi4gY2Z1bmN0aW9uOjogdm9pZCBQeU9TX0FmdGVyRm9yaygpCiAKICAgIEZ1bmN0aW9uIHRvIHVwZGF0ZSBzb21lIGludGVybmFsIHN0YXRlIGFmdGVyIGEgcHJvY2VzcyBmb3JrOyB0aGlzIHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0IGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CmluZGV4IDg0ODljMzUuLjlhZjRjZmMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKQEAgLTgyMCw3ICs4MjAsOSBAQAogICAgVGhpcyBmaWVsZCBpcyBub3QgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzIChjb21wdXRlZCBhdHRyaWJ1dGVzIGFyZSBpbmhlcml0ZWQKICAgIHRocm91Z2ggYSBkaWZmZXJlbnQgbWVjaGFuaXNtKS4KIAotICAgRG9jcyBmb3IgUHlHZXRTZXREZWYgKFhYWCBiZWxvbmcgZWxzZXdoZXJlKTo6CisgICAuLiBYWFggYmVsb25ncyBlbHNld2hlcmUKKworICAgRG9jcyBmb3IgUHlHZXRTZXREZWY6OgogCiAgICAgICB0eXBlZGVmIFB5T2JqZWN0ICooKmdldHRlcikoUHlPYmplY3QgKiwgdm9pZCAqKTsKICAgICAgIHR5cGVkZWYgaW50ICgqc2V0dGVyKShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCB2b2lkICopOwpAQCAtODY3LDcgKzg2OSw3IEBACiAKICAgICAgIFB5T2JqZWN0ICogdHBfZGVzY3JfZ2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSk7CiAKLSAgIFhYWCBleHBsYWluLgorICAgLi4gWFhYIGV4cGxhaW4uCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCkBAIC04ODIsNyArODg0LDcgQEAKIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKLSAgIFhYWCBleHBsYWluLgorICAgLi4gWFhYIGV4cGxhaW4uCiAKIAogLi4gY21lbWJlcjo6IGxvbmcgUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXQKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS91bmljb2RlLnJzdCBiL0RvYy9jLWFwaS91bmljb2RlLnJzdAppbmRleCAwMjg4MjcxLi45NjRkMmM4IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKKysrIGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CkBAIC0yMDgsNyArMjA4LDcgQEAKIAogLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tVW5pY29kZShjb25zdCBQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IHNpemUpCiAKLSAgIENyZWF0ZSBhIFVuaWNvZGUgT2JqZWN0IGZyb20gdGhlIFB5X1VOSUNPREUgYnVmZmVyICp1KiBvZiB0aGUgZ2l2ZW4gc2l6ZS4gKnUqCisgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBmcm9tIHRoZSBQeV9VTklDT0RFIGJ1ZmZlciAqdSogb2YgdGhlIGdpdmVuIHNpemUuICp1KgogICAgbWF5IGJlICpOVUxMKiB3aGljaCBjYXVzZXMgdGhlIGNvbnRlbnRzIHRvIGJlIHVuZGVmaW5lZC4gSXQgaXMgdGhlIHVzZXIncwogICAgcmVzcG9uc2liaWxpdHkgdG8gZmlsbCBpbiB0aGUgbmVlZGVkIGRhdGEuICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcKICAgIG9iamVjdC4gSWYgdGhlIGJ1ZmZlciBpcyBub3QgKk5VTEwqLCB0aGUgcmV0dXJuIHZhbHVlIG1pZ2h0IGJlIGEgc2hhcmVkIG9iamVjdC4KQEAgLTIyMCw2ICsyMjAsMTExIEBACiAgICAgICBjaGFuZ2VzIGluIHlvdXIgY29kZSBmb3IgcHJvcGVybHkgc3VwcG9ydGluZyA2NC1iaXQgc3lzdGVtcy4KIAogCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKKworICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgZnJvbSB0aGUgY2hhciBidWZmZXIgKnUqLiAgVGhlIGJ5dGVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQKKyAgIGFzIGJlaW5nIFVURi04IGVuY29kZWQuICAqdSogbWF5IGFsc28gYmUgKk5VTEwqIHdoaWNoCisgICBjYXVzZXMgdGhlIGNvbnRlbnRzIHRvIGJlIHVuZGVmaW5lZC4gSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eSB0byBmaWxsIGluCisgICB0aGUgbmVlZGVkIGRhdGEuICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcgb2JqZWN0LiBJZiB0aGUgYnVmZmVyIGlzIG5vdAorICAgKk5VTEwqLCB0aGUgcmV0dXJuIHZhbHVlIG1pZ2h0IGJlIGEgc2hhcmVkIG9iamVjdC4gVGhlcmVmb3JlLCBtb2RpZmljYXRpb24gb2YKKyAgIHRoZSByZXN1bHRpbmcgVW5pY29kZSBvYmplY3QgaXMgb25seSBhbGxvd2VkIHdoZW4gKnUqIGlzICpOVUxMKi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QgKlB5VW5pY29kZV9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnUpCisKKyAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gYW4gVVRGLTggZW5jb2RlZCBudWxsLXRlcm1pbmF0ZWQgY2hhciBidWZmZXIKKyAgICp1Ki4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKworLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorCisgICBUYWtlIGEgQyA6Y2Z1bmM6YHByaW50ZmBcIC1zdHlsZSAqZm9ybWF0KiBzdHJpbmcgYW5kIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgICBhcmd1bWVudHMsIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIFB5dGhvbiB1bmljb2RlIHN0cmluZyBhbmQgcmV0dXJuCisgICBhIHN0cmluZyB3aXRoIHRoZSB2YWx1ZXMgZm9ybWF0dGVkIGludG8gaXQuICBUaGUgdmFyaWFibGUgYXJndW1lbnRzIG11c3QgYmUgQworICAgdHlwZXMgYW5kIG11c3QgY29ycmVzcG9uZCBleGFjdGx5IHRvIHRoZSBmb3JtYXQgY2hhcmFjdGVycyBpbiB0aGUgKmZvcm1hdCoKKyAgIHN0cmluZy4gIFRoZSBmb2xsb3dpbmcgZm9ybWF0IGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQ6CisKKyAgIC4uICUgVGhlIGRlc2NyaXB0aW9ucyBmb3IgJXpkIGFuZCAlenUgYXJlIHdyb25nLCBidXQgdGhlIHRydXRoIGlzIGNvbXBsaWNhdGVkCisgICAuLiAlIGJlY2F1c2Ugbm90IGFsbCBjb21waWxlcnMgc3VwcG9ydCB0aGUgJXogd2lkdGggbW9kaWZpZXIgLS0gd2UgZmFrZSBpdAorICAgLi4gJSB3aGVuIG5lY2Vzc2FyeSB2aWEgaW50ZXJwb2xhdGluZyBQWV9GT1JNQVRfU0laRV9ULgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEZvcm1hdCBDaGFyYWN0ZXJzIHwgVHlwZSAgICAgICAgICAgICAgICB8IENvbW1lbnQgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDphdHRyOmAlJWAgICAgICAgIHwgKm4vYSogICAgICAgICAgICAgICB8IFRoZSBsaXRlcmFsICUgY2hhcmFjdGVyLiAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlY2AgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICB8IEEgc2luZ2xlIGNoYXJhY3RlciwgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGVkIGFzIGFuIEMgaW50LiAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlZGAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlZCIpYGAuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAldWAgICAgICAgIHwgdW5zaWduZWQgaW50ICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIldSIpYGAuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlbGRgICAgICAgIHwgbG9uZyAgICAgICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlbGQiKWBgLiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlbHVgICAgICAgIHwgdW5zaWduZWQgbG9uZyAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlbHUiKWBgLiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlemRgICAgICAgIHwgUHlfc3NpemVfdCAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlemQiKWBgLiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlenVgICAgICAgIHwgc2l6ZV90ICAgICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlenUiKWBgLiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlaWAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlaSIpYGAuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAleGAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIleCIpYGAuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlc2AgICAgICAgIHwgY2hhclwqICAgICAgICAgICAgICB8IEEgbnVsbC10ZXJtaW5hdGVkIEMgY2hhcmFjdGVyICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGFycmF5LiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlcGAgICAgICAgIHwgdm9pZFwqICAgICAgICAgICAgICB8IFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgYSBDICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IHBvaW50ZXIuIE1vc3RseSBlcXVpdmFsZW50IHRvICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlcCIpYGAgZXhjZXB0IHRoYXQgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGl0IGlzIGd1YXJhbnRlZWQgdG8gc3RhcnQgd2l0aCB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IHRoZSBsaXRlcmFsIGBgMHhgYCByZWdhcmRsZXNzICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IG9mIHdoYXQgdGhlIHBsYXRmb3JtJ3MgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGBgcHJpbnRmYGAgeWllbGRzLiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlVWAgICAgICAgIHwgUHlPYmplY3RcKiAgICAgICAgICB8IEEgdW5pY29kZSBvYmplY3QuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlVmAgICAgICAgIHwgUHlPYmplY3RcKiwgY2hhciBcKiB8IEEgdW5pY29kZSBvYmplY3QgKHdoaWNoIG1heSBiZSB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICpOVUxMKikgYW5kIGEgbnVsbC10ZXJtaW5hdGVkICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IEMgY2hhcmFjdGVyIGFycmF5IGFzIGEgc2Vjb25kICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IHBhcmFtZXRlciAod2hpY2ggd2lsbCBiZSB1c2VkLCB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICpOVUxMKikuICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlU2AgICAgICAgIHwgUHlPYmplY3RcKiAgICAgICAgICB8IFRoZSByZXN1bHQgb2YgY2FsbGluZyAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBQeU9iamVjdF9Vbmljb2RlYC4gICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDphdHRyOmAlUmAgICAgICAgIHwgUHlPYmplY3RcKiAgICAgICAgICB8IFRoZSByZXN1bHQgb2YgY2FsbGluZyAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBQeU9iamVjdF9SZXByYC4gICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIEFuIHVucmVjb2duaXplZCBmb3JtYXQgY2hhcmFjdGVyIGNhdXNlcyBhbGwgdGhlIHJlc3Qgb2YgdGhlIGZvcm1hdCBzdHJpbmcgdG8gYmUKKyAgIGNvcGllZCBhcy1pcyB0byB0aGUgcmVzdWx0IHN0cmluZywgYW5kIGFueSBleHRyYSBhcmd1bWVudHMgZGlzY2FyZGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKKworICAgSWRlbnRpY2FsIHRvIDpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAgZXhjZXB0IHRoYXQgaXQgdGFrZXMgZXhhY3RseSB0d28KKyAgIGFyZ3VtZW50cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisKKwogLi4gY2Z1bmN0aW9uOjogUHlfVU5JQ09ERSogUHlVbmljb2RlX0FzVW5pY29kZShQeU9iamVjdCAqdW5pY29kZSkKIAogICAgUmV0dXJuIGEgcmVhZC1vbmx5IHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgb2JqZWN0J3MgaW50ZXJuYWwgOmN0eXBlOmBQeV9VTklDT0RFYApAQCAtNTc5LDcgKzY4NCw3IEBACiAgICAqcyouICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgUHlfc3NpemVfdCAqY29uc3VtZWQpCisuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgUHlfc3NpemVfdCAqY29uc3VtZWQpCiAKICAgIElmICpjb25zdW1lZCogaXMgKk5VTEwqLCBiZWhhdmUgbGlrZSA6Y2Z1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEY3YC4gIElmCiAgICAqY29uc3VtZWQqIGlzIG5vdCAqTlVMTCosIHRyYWlsaW5nIGluY29tcGxldGUgVVRGLTcgYmFzZS02NCBzZWN0aW9ucyB3aWxsIG5vdApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3V0aWxpdGllcy5yc3QgYi9Eb2MvYy1hcGkvdXRpbGl0aWVzLnJzdAppbmRleCA0OTlhNTEwLi5mNDM5MzNiIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdXRpbGl0aWVzLnJzdAorKysgYi9Eb2MvYy1hcGkvdXRpbGl0aWVzLnJzdApAQCAtMTksMyArMTksNCBAQAogICAgYXJnLnJzdAogICAgY29udmVyc2lvbi5yc3QKICAgIHJlZmxlY3Rpb24ucnN0CisgICBjb2RlYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDFjYTExY2IuLjIzZjdjODUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTIxLDEzICsxMjEsMTMgQEAKIAogLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCi0gICBSZWFkIGFuZCBleGVjdXRlIGEgc2luZ2xlIHN0YXRlbWVudCBmcm9tIGEgZmlsZSBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJhY3RpdmUKLSAgIGRldmljZSBhY2NvcmRpbmcgdG8gdGhlICpmbGFncyogYXJndW1lbnQuICBJZiAqZmlsZW5hbWUqIGlzICpOVUxMKiwgYGAiPz8/ImBgIGlzCi0gICB1c2VkIGluc3RlYWQuICBUaGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHVzaW5nIGBgc3lzLnBzMWBgIGFuZCBgYHN5cy5wczJgYC4KLSAgIFJldHVybnMgYGAwYGAgd2hlbiB0aGUgaW5wdXQgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgYGAtMWBgIGlmIHRoZXJlIHdhcyBhbgotICAgZXhjZXB0aW9uLCBvciBhbiBlcnJvciBjb2RlIGZyb20gdGhlIDpmaWxlOmBlcnJjb2RlLmhgIGluY2x1ZGUgZmlsZSBkaXN0cmlidXRlZAotICAgYXMgcGFydCBvZiBQeXRob24gaWYgdGhlcmUgd2FzIGEgcGFyc2UgZXJyb3IuICAoTm90ZSB0aGF0IDpmaWxlOmBlcnJjb2RlLmhgIGlzCi0gICBub3QgaW5jbHVkZWQgYnkgOmZpbGU6YFB5dGhvbi5oYCwgc28gbXVzdCBiZSBpbmNsdWRlZCBzcGVjaWZpY2FsbHkgaWYgbmVlZGVkLikKKyAgIFJlYWQgYW5kIGV4ZWN1dGUgYSBzaW5nbGUgc3RhdGVtZW50IGZyb20gYSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgaW50ZXJhY3RpdmUgZGV2aWNlIGFjY29yZGluZyB0byB0aGUgKmZsYWdzKiBhcmd1bWVudC4gIFRoZSB1c2VyIHdpbGwgYmUKKyAgIHByb21wdGVkIHVzaW5nIGBgc3lzLnBzMWBgIGFuZCBgYHN5cy5wczJgYC4gIFJldHVybnMgYGAwYGAgd2hlbiB0aGUgaW5wdXQgd2FzCisgICBleGVjdXRlZCBzdWNjZXNzZnVsbHksIGBgLTFgYCBpZiB0aGVyZSB3YXMgYW4gZXhjZXB0aW9uLCBvciBhbiBlcnJvciBjb2RlCisgICBmcm9tIHRoZSA6ZmlsZTpgZXJyY29kZS5oYCBpbmNsdWRlIGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBQeXRob24gaWYKKyAgIHRoZXJlIHdhcyBhIHBhcnNlIGVycm9yLiAgKE5vdGUgdGhhdCA6ZmlsZTpgZXJyY29kZS5oYCBpcyBub3QgaW5jbHVkZWQgYnkKKyAgIDpmaWxlOmBQeXRob24uaGAsIHNvIG11c3QgYmUgaW5jbHVkZWQgc3BlY2lmaWNhbGx5IGlmIG5lZWRlZC4pCiAKIAogLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0ludGVyYWN0aXZlTG9vcChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgbGVhdmluZyAqZmxhZ3MqIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzKEZJTEUgKmZwLCAgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCisuLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCiAgICBSZWFkIGFuZCBleGVjdXRlIHN0YXRlbWVudHMgZnJvbSBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyYWN0aXZlIGRldmljZQotICAgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBJZiAqZmlsZW5hbWUqIGlzICpOVUxMKiwgYGAiPz8/ImBgIGlzIHVzZWQgaW5zdGVhZC4gIFRoZQotICAgdXNlciB3aWxsIGJlIHByb21wdGVkIHVzaW5nIGBgc3lzLnBzMWBgIGFuZCBgYHN5cy5wczJgYC4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgorICAgdW50aWwgRU9GIGlzIHJlYWNoZWQuICBUaGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHVzaW5nIGBgc3lzLnBzMWBgIGFuZAorICAgYGBzeXMucHMyYGAuICBSZXR1cm5zIGBgMGBgIGF0IEVPRi4KIAogCiAuLiBjZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0KQpkaWZmIC0tZ2l0IGEvRG9jL2NvbmYucHkgYi9Eb2MvY29uZi5weQppbmRleCBhODRmOWMzLi5iNTE0YmZmIDEwMDY0NAotLS0gYS9Eb2MvY29uZi5weQorKysgYi9Eb2MvY29uZi5weQpAQCAtMTI1LDcgKzEyNSw5IEBACiAgICAgKCd0dXRvcmlhbC9pbmRleCcsICd0dXRvcmlhbC50ZXgnLAogICAgICAnUHl0aG9uIFR1dG9yaWFsJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAogICAgICgndXNpbmcvaW5kZXgnLCAndXNpbmcudGV4JywKLSAgICAgJ1VzaW5nIFB5dGhvbicsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKKyAgICAgJ1B5dGhvbiBTZXR1cCBhbmQgVXNhZ2UnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCisgICAgKCdmYXEvaW5kZXgnLCAnZmFxLnRleCcsCisgICAgICdQeXRob24gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCiAgICAgKCd3aGF0c25ldy8nICsgdmVyc2lvbiwgJ3doYXRzbmV3LnRleCcsCiAgICAgICdXaGF0XCdzIE5ldyBpbiBQeXRob24nLCAnQS4gTS4gS3VjaGxpbmcnLCAnaG93dG8nKSwKIF0KZGlmZiAtLWdpdCBhL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CmluZGV4IDkwYWQyYmYuLjFmYzg5NmYgMTAwNjQ0Ci0tLSBhL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKKysrIGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdApAQCAtNTUsNiArNTUsNDUgQEAKIFB5QnVmZmVyX05ldzpQeU9iamVjdCo6OisxOgogUHlCdWZmZXJfTmV3OmludDpzaXplOjoKIAorUHlDYXBzdWxlX0dldENvbnRleHQ6dm9pZCAqOjo6CitQeUNhcHN1bGVfR2V0Q29udGV4dDpQeU9iamVjdCo6c2VsZjowOgorCitQeUNhcHN1bGVfR2V0RGVzdHJ1Y3Rvcjp2b2lkICgqKShQeU9iamVjdCAqKTo6OgorUHlDYXBzdWxlX0dldERlc3RydWN0b3I6UHlPYmplY3QqOnNlbGY6MDoKKworUHlDYXBzdWxlX0dldE5hbWU6Y29uc3QgY2hhciAqOjo6CitQeUNhcHN1bGVfR2V0TmFtZTpQeU9iamVjdCo6c2VsZjowOgorCitQeUNhcHN1bGVfR2V0UG9pbnRlcjp2b2lkKjo6OgorUHlDYXBzdWxlX0dldFBvaW50ZXI6UHlPYmplY3QqOnNlbGY6MDoKK1B5Q2Fwc3VsZV9HZXRQb2ludGVyOmNvbnN0IGNoYXIgKjpuYW1lOjoKKworUHlDYXBzdWxlX0ltcG9ydDp2b2lkICo6OjoKK1B5Q2Fwc3VsZV9JbXBvcnQ6Y29uc3QgY2hhciAqOm5hbWU6OgorUHlDYXBzdWxlX0ltcG9ydDppbnQ6bm9fYmxvY2s6OgorCitQeUNhcHN1bGVfTmV3OlB5T2JqZWN0Kjo6KzE6CitQeUNhcHN1bGVfTmV3OnZvaWQqOnBvaW50ZXI6OgorUHlDYXBzdWxlX05ldzpjb25zdCBjaGFyICo6bmFtZTo6CitQeUNhcHN1bGVfTmV3Ojp2b2lkICgqIGRlc3RydWN0b3IpKFB5T2JqZWN0KiApOjoKKworUHlDYXBzdWxlX1NldENvbnRleHQ6aW50Ojo6CitQeUNhcHN1bGVfU2V0Q29udGV4dDpQeU9iamVjdCo6c2VsZjowOgorUHlDYXBzdWxlX1NldENvbnRleHQ6dm9pZCAqOmNvbnRleHQ6OgorCitQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcjppbnQ6OjoKK1B5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yOlB5T2JqZWN0KjpzZWxmOjA6CitQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcjp2b2lkICgqKShQeU9iamVjdCAqKTpkZXN0cnVjdG9yOjoKKworUHlDYXBzdWxlX1NldE5hbWU6aW50Ojo6CitQeUNhcHN1bGVfU2V0TmFtZTpQeU9iamVjdCo6c2VsZjowOgorUHlDYXBzdWxlX1NldE5hbWU6Y29uc3QgY2hhciAqOm5hbWU6OgorCitQeUNhcHN1bGVfU2V0UG9pbnRlcjppbnQ6OjoKK1B5Q2Fwc3VsZV9TZXRQb2ludGVyOlB5T2JqZWN0KjpzZWxmOjA6CitQeUNhcHN1bGVfU2V0UG9pbnRlcjp2b2lkKjpwb2ludGVyOjoKKworCiBQeUNPYmplY3RfQXNWb2lkUHRyOnZvaWQqOjo6CiBQeUNPYmplY3RfQXNWb2lkUHRyOlB5T2JqZWN0KjpzZWxmOjA6CiAKQEAgLTI0Miw2ICsyODEsMTIgQEAKIFB5RXJyX05ld0V4Y2VwdGlvbjpQeU9iamVjdCo6YmFzZTowOgogUHlFcnJfTmV3RXhjZXB0aW9uOlB5T2JqZWN0KjpkaWN0OjA6CiAKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M6UHlPYmplY3QqOjorMToKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M6Y2hhcio6bmFtZTo6CitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jOmNoYXIqOmRvYzo6CitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jOlB5T2JqZWN0KjpiYXNlOjA6CitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jOlB5T2JqZWN0KjpkaWN0OjA6CisKIFB5RXJyX05vTWVtb3J5OlB5T2JqZWN0Kjo6bnVsbDoKIAogUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uOnZvaWQ6OjoKQEAgLTU5Myw2ICs2MzgsOSBAQAogUHlMb25nX0FzTG9uZzpsb25nOjo6CiBQeUxvbmdfQXNMb25nOlB5T2JqZWN0KjpweWxvbmc6MDoKIAorUHlMb25nX0FzU3NpemVfdDpzc2l6ZV90Ojo6CitQeUxvbmdfQXNTc2l6ZV90OlB5T2JqZWN0KjpweWxvbmc6MDoKKwogUHlMb25nX0FzVW5zaWduZWRMb25nOnVuc2lnbmVkIGxvbmc6OjoKIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZzpQeU9iamVjdCo6cHlsb25nOjA6CiAKQEAgLTYxMSw2ICs2NTksMTIgQEAKIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZzpQeU9iamVjdCo6OisxOgogUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nOnVuc2lnbmVkIGxvbmcgbG9uZzp2OjoKIAorUHlMb25nX0Zyb21TaXplX3Q6UHlPYmplY3QqOjorMToKK1B5TG9uZ19Gcm9tU2l6ZV90OnNpemVfdDp2OjoKKworUHlMb25nX0Zyb21Tc2l6ZV90OlB5T2JqZWN0Kjo6KzE6CitQeUxvbmdfRnJvbVNzaXplX3Q6c3NpemVfdDp2OjoKKwogUHlMb25nX0Zyb21TdHJpbmc6UHlPYmplY3QqOjorMToKIFB5TG9uZ19Gcm9tU3RyaW5nOmNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CkBAIC04NTMsOSArOTA3LDYgQEAKIFB5TnVtYmVyX1hvcjpQeU9iamVjdCo6bzE6MDoKIFB5TnVtYmVyX1hvcjpQeU9iamVjdCo6bzI6MDoKIAotUHlPU19HZXRMYXN0TW9kaWZpY2F0aW9uVGltZTpsb25nOjo6Ci1QeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lOmNoYXIqOmZpbGVuYW1lOjoKLQogUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcjppbnQ6OjogCiBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOlB5T2JqZWN0KjpvOjA6CiAKQEAgLTE0MzEsNiArMTQ4MiwyMSBAQAogUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0OmNvbnN0IGNoYXIqOmVuY29kaW5nOjoKIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdDpjb25zdCBjaGFyKjplcnJvcnM6OgogCitQeVVuaWNvZGVfRnJvbUZvcm1hdDpQeU9iamVjdCo6OisxOgorUHlVbmljb2RlX0Zyb21Gb3JtYXQ6Y29uc3QgY2hhcio6Zm9ybWF0OjoKK1B5VW5pY29kZV9Gcm9tRm9ybWF0OjouLi46OgorCitQeVVuaWNvZGVfRnJvbUZvcm1hdFY6UHlPYmplY3QqOjorMToKK1B5VW5pY29kZV9Gcm9tRm9ybWF0Vjpjb25zdCBjaGFyKjpmb3JtYXQ6OgorUHlVbmljb2RlX0Zyb21Gb3JtYXRWOnZhX2xpc3Q6dmFyZ3M6OgorCitQeVVuaWNvZGVfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgorUHlVbmljb2RlX0Zyb21TdHJpbmc6Y29uc3QgY2hhcio6dTo6CisKK1B5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZTpQeU9iamVjdCo6OisxOgorUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplOmNvbnN0IGNoYXIqOnU6OgorUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplOnNzaXplX3Q6c2l6ZTo6CisKIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI6UHlPYmplY3QqOjorMToKIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI6Y29uc3Qgd2NoYXJfdCo6dzo6CiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyOmludDpzaXplOjoKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdCBiL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAppbmRleCAwYTg4NTk4Li5iMjhhM2FmIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CkBAIC04NDcsMjMgKzg0Nyw2IEBACiA6Y2xhc3M6YFVuaXhDQ29tcGlsZXJgIHRoYXQgaGFuZGxlcyB0aGUgRU1YIHBvcnQgb2YgdGhlIEdOVSBDIGNvbXBpbGVyIHRvIE9TLzIuCiAKIAotOm1vZDpgZGlzdHV0aWxzLm13ZXJrc2NvbXBpbGVyYCAtLS0gTWV0cm93ZXJrcyBDb2RlV2FycmlvciBzdXBwb3J0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLi4gbW9kdWxlOjogZGlzdHV0aWxzLm13ZXJrc2NvbXBpbGVyCi0gICA6c3lub3BzaXM6IE1ldHJvd2Vya3MgQ29kZVdhcnJpb3Igc3VwcG9ydAotCi0KLUNvbnRhaW5zIDpjbGFzczpgTVdlcmtzQ29tcGlsZXJgLCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWJzdHJhY3QKLTpjbGFzczpgQ0NvbXBpbGVyYCBjbGFzcyBmb3IgTWV0cm9XZXJrcyBDb2RlV2FycmlvciBvbiB0aGUgcHJlLU1hYyBPUyBYCi1NYWNpbnRvc2guIE5lZWRzIHdvcmsgdG8gc3VwcG9ydCBDVyBvbiBXaW5kb3dzIG9yIE1hYyBPUyBYLgotCi0uLiAlIFxzdWJzZWN0aW9ue1V0aWxpdHkgbW9kdWxlc30KLS4uICUKLS4uICUgVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFsbCBwcm92aWRlIGdlbmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMuIFRoZXkgaGF2ZW4ndAotLi4gJSBhbGwgYmVlbiBkb2N1bWVudGVkIHlldC4KLQotCiA6bW9kOmBkaXN0dXRpbHMuYXJjaGl2ZV91dGlsYCAtLS0gIEFyY2hpdmluZyB1dGlsaXRpZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05MDUsNyArODg4LDcgQEAKIC4uIGZ1bmN0aW9uOjogbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgYmFzZV9kaXJbLCB2ZXJib3NlPTAsIGRyeV9ydW49MF0pCiAKICAgIENyZWF0ZSBhIHppcCBmaWxlIGZyb20gYWxsIGZpbGVzIGluIGFuZCB1bmRlciAqYmFzZV9kaXIqLiAgVGhlIG91dHB1dCB6aXAgZmlsZQotICAgd2lsbCBiZSBuYW1lZCAqYmFzZV9kaXIqICsgOmZpbGU6YC56aXBgLiAgVXNlcyBlaXRoZXIgdGhlICA6bW9kOmB6aXBmaWxlYCBQeXRob24KKyAgIHdpbGwgYmUgbmFtZWQgKmJhc2VfbmFtZSogKyA6ZmlsZTpgLnppcGAuICBVc2VzIGVpdGhlciB0aGUgIDptb2Q6YHppcGZpbGVgIFB5dGhvbgogICAgbW9kdWxlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBJbmZvWklQIDpmaWxlOmB6aXBgICB1dGlsaXR5IChpZiBpbnN0YWxsZWQgYW5kCiAgICBmb3VuZCBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCkuICBJZiBuZWl0aGVyICB0b29sIGlzIGF2YWlsYWJsZSwgcmFpc2VzCiAgICA6ZXhjOmBEaXN0dXRpbHNFeGVjRXJyb3JgLiAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCB6aXAgZmlsZS4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBmMWRhZDc3Li44YzgzZDExIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC04MCw3ICs4MCw3IEBACiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHRhcmBgICAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApICAgICAgfCBcKDMpICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgemlwYGAgICAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgICAgICB8IFwoNCkgICAgfAorfCBgYHppcGBgICAgICB8IHppcCBmaWxlICg6ZmlsZTpgLnppcGApICAgICAgfCAoMiksKDQpIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgcnBtYGAgICAgIHwgUlBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwoNSkgICAgfAogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKQEAgLTkwLDkgKzkwLDEyIEBACiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHJwbWBgICAgICB8IFJQTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcKDUpICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgd2luaW5zdGBgIHwgc2VsZi1leHRyYWN0aW5nIFpJUCBmaWxlIGZvciB8ICgyKSwoNCkgfAorfCBgYHdpbmluc3RgYCB8IHNlbGYtZXh0cmFjdGluZyBaSVAgZmlsZSBmb3IgfCBcKDQpICAgIHwKIHwgICAgICAgICAgICAgfCBXaW5kb3dzICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKworfCBgYG1zaWBgICAgICB8IE1pY3Jvc29mdCBJbnN0YWxsZXIuICAgICAgICAgfCAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCisKIAogTm90ZXM6CiAKQEAgLTEwMiw4ICsxMDUsNiBAQAogKDIpCiAgICBkZWZhdWx0IG9uIFdpbmRvd3MKIAotICAgKipcKlwqKiogdG8tZG8hICoqXCpcKioqCi0KICgzKQogICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKICAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKQEAgLTEzMyw2ICsxMzQsOCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6Y29tbWFuZDpgYmRpc3Rfd2luaW5zdGAgfCB3aW5pbnN0ICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgYmRpc3RfbXNpYCAgICAgfCBtc2kgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGdpdmUgZGV0YWlscyBvbiB0aGUgaW5kaXZpZHVhbCA6Y29tbWFuZDpgYmRpc3RfXCpgCiBjb21tYW5kcy4KQEAgLTIzOCw3ICsyNDEsOCBAQAogY29uZmlndXJhdGlvbiBmaWxlLCA6ZmlsZTpgc2V0dXAuY2ZnYFwgLS0tc2VlIHNlY3Rpb24gOnJlZjpgc2V0dXAtY29uZmlnYC4gIElmCiB5b3UgZGlzdHJpYnV0ZSBvciBwYWNrYWdlIG1hbnkgUHl0aG9uIG1vZHVsZSBkaXN0cmlidXRpb25zLCB5b3UgbWlnaHQgd2FudCB0bwogcHV0IG9wdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgb2YgdGhlbSBpbiB5b3VyIHBlcnNvbmFsIERpc3R1dGlscyBjb25maWd1cmF0aW9uCi1maWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuCitmaWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuICBJZiB5b3Ugd2FudCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlCit0aGlzIGZpbGUsIHlvdSBjYW4gcGFzcyB0aGUgLS1uby11c2VyLWNmZyBvcHRpb24gdG8gc2V0dXAucHkuCiAKIFRoZXJlIGFyZSB0aHJlZSBzdGVwcyB0byBidWlsZGluZyBhIGJpbmFyeSBSUE0gcGFja2FnZSwgYWxsIG9mIHdoaWNoIGFyZQogaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBEaXN0dXRpbHM6CkBAIC0zMTgsNyArMzIyLDcgQEAKIG9wdGlvbi4KIAogQnkgZGVmYXVsdCB0aGUgaW5zdGFsbGVyIHdpbGwgZGlzcGxheSB0aGUgY29vbCAiUHl0aG9uIFBvd2VyZWQiIGxvZ28gd2hlbiBpdCBpcwotcnVuLCBidXQgeW91IGNhbiBhbHNvIHN1cHBseSB5b3VyIG93biAxNTJ4MTYxIGJpdG1hcCB3aGljaCBtdXN0IGJlIGEgV2luZG93cworcnVuLCBidXQgeW91IGNhbiBhbHNvIHN1cHBseSB5b3VyIG93biAxNTJ4MjYxIGJpdG1hcCB3aGljaCBtdXN0IGJlIGEgV2luZG93cwogOmZpbGU6YC5ibXBgIGZpbGUgd2l0aCB0aGUgOm9wdGlvbjpgLS1iaXRtYXBgIG9wdGlvbi4KIAogVGhlIGluc3RhbGxlciB3aWxsIGFsc28gZGlzcGxheSBhIGxhcmdlIHRpdGxlIG9uIHRoZSBkZXNrdG9wIGJhY2tncm91bmQgd2luZG93CkBAIC0zNTQsNyArMzU4LDcgQEAKIAogVG8gY3Jvc3MtY29tcGlsZSwgeW91IG11c3QgZG93bmxvYWQgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBhbmQgY3Jvc3MtY29tcGlsZQogUHl0aG9uIGl0c2VsZiBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdGFyZ2V0dGluZyAtIGl0IGlzIG5vdCBwb3NzaWJsZSBmcm9tIGEKLWJpbmFyeSBpbnN0YWxsdGlvbiBvZiBQeXRob24gKGFzIHRoZSAubGliIGV0YyBmaWxlIGZvciBvdGhlciBwbGF0Zm9ybXMgYXJlCitiaW5hcnkgaW5zdGFsbGF0aW9uIG9mIFB5dGhvbiAoYXMgdGhlIC5saWIgZXRjIGZpbGUgZm9yIG90aGVyIHBsYXRmb3JtcyBhcmUKIG5vdCBpbmNsdWRlZC4pICBJbiBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGUgdXNlciBvZiBhIDMyIGJpdCBvcGVyYXRpbmcKIHN5c3RlbSB3aWxsIG5lZWQgdG8gdXNlIFZpc3VhbCBTdHVkaW8gMjAwOCB0byBvcGVuIHRoZQogOmZpbGU6YFBDQnVpbGQvUENidWlsZC5zbG5gIHNvbHV0aW9uIGluIHRoZSBQeXRob24gc291cmNlIHRyZWUgYW5kIGJ1aWxkIHRoZQpAQCAtMzcxLDcgKzM3NSw3IEBACiBUaGUgUG9zdGluc3RhbGxhdGlvbiBzY3JpcHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TdGFydGluZyB3aXRoIFB5dGhvbiAyLjMsIGEgcG9zdGluc3RhbGxhdGlvbiBzY3JpcHQgY2FuIGJlIHNwZWNpZmllZCB3aGljaCB0aGUKK1N0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgYSBwb3N0aW5zdGFsbGF0aW9uIHNjcmlwdCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlCiA6b3B0aW9uOmAtLWluc3RhbGwtc2NyaXB0YCBvcHRpb24uICBUaGUgYmFzZW5hbWUgb2YgdGhlIHNjcmlwdCBtdXN0IGJlCiBzcGVjaWZpZWQsIGFuZCB0aGUgc2NyaXB0IGZpbGVuYW1lIG11c3QgYWxzbyBiZSBsaXN0ZWQgaW4gdGhlIHNjcmlwdHMgYXJndW1lbnQKIHRvIHRoZSBzZXR1cCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvY29tbWFuZHJlZi5yc3QgYi9Eb2MvZGlzdHV0aWxzL2NvbW1hbmRyZWYucnN0CmluZGV4IGZiZTQwZGUuLjcyODI5NjEgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvY29tbWFuZHJlZi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9jb21tYW5kcmVmLnJzdApAQCAtNDgsNTAgKzQ4LDYgQEAKIC4uICUgXGxhYmVse2NsZWFuLWNtZH0KIAogCi0uLiBfc2Rpc3QtY21kOgotCi1DcmVhdGluZyBhIHNvdXJjZSBkaXN0cmlidXRpb246IHRoZSA6Y29tbWFuZDpgc2Rpc3RgIGNvbW1hbmQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qKlwqXCoqKiBmcmFnbWVudCBtb3ZlZCBkb3duIGZyb20gYWJvdmU6IG5lZWRzIGNvbnRleHQhICoqXCpcKioqCi0KLVRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSBjb21tYW5kcyBhcmU6Ci0KLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgOmNvbW1hbmQ6YGluY2x1ZGUgcGF0MSBwYXQyIC4uLmAgICAgICAgICAgfCBpbmNsdWRlIGFsbCBmaWxlcyBtYXRjaGluZyBhbnkgb2YgdGhlIGxpc3RlZCAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBhdHRlcm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YGV4Y2x1ZGUgcGF0MSBwYXQyIC4uLmAgICAgICAgICAgfCBleGNsdWRlIGFsbCBmaWxlcyBtYXRjaGluZyBhbnkgb2YgdGhlIGxpc3RlZCAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBhdHRlcm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YHJlY3Vyc2l2ZS1pbmNsdWRlIGRpciBwYXQxIHBhdDIgfCBpbmNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiBtYXRjaGluZyBhbnkgb2YgfAotfCAuLi5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YHJlY3Vyc2l2ZS1leGNsdWRlIGRpciBwYXQxIHBhdDIgfCBleGNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiBtYXRjaGluZyBhbnkgb2YgfAotfCAuLi5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YGdsb2JhbC1pbmNsdWRlIHBhdDEgcGF0MiAuLi5gICAgfCBpbmNsdWRlIGFsbCBmaWxlcyBhbnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1hdGNoaW5nIC0tLSAmIGFueSBvZiB0aGUgbGlzdGVkIHBhdHRlcm5zICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YGdsb2JhbC1leGNsdWRlIHBhdDEgcGF0MiAuLi5gICAgfCBleGNsdWRlIGFsbCBmaWxlcyBhbnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1hdGNoaW5nIC0tLSAmIGFueSBvZiB0aGUgbGlzdGVkIHBhdHRlcm5zICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbW1hbmQ6YHBydW5lIGRpcmAgICAgICAgICAgICAgICAgICAgICAgfCBleGNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb21tYW5kOmBncmFmdCBkaXJgICAgICAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZSBhbGwgZmlsZXMgdW5kZXIgKmRpciogICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi1UaGUgcGF0dGVybnMgaGVyZSBhcmUgVW5peC1zdHlsZSAiZ2xvYiIgcGF0dGVybnM6IGBgKmBgIG1hdGNoZXMgYW55IHNlcXVlbmNlIG9mCi1yZWd1bGFyIGZpbGVuYW1lIGNoYXJhY3RlcnMsIGBgP2BgIG1hdGNoZXMgYW55IHNpbmdsZSByZWd1bGFyIGZpbGVuYW1lCi1jaGFyYWN0ZXIsIGFuZCBgYFtyYW5nZV1gYCBtYXRjaGVzIGFueSBvZiB0aGUgY2hhcmFjdGVycyBpbiAqcmFuZ2UqIChlLmcuLAotYGBhLXpgYCwgYGBhLXpBLVpgYCwgYGBhLWYwLTlfLmBgKS4gIFRoZSBkZWZpbml0aW9uIG9mICJyZWd1bGFyIGZpbGVuYW1lCi1jaGFyYWN0ZXIiIGlzIHBsYXRmb3JtLXNwZWNpZmljOiBvbiBVbml4IGl0IGlzIGFueXRoaW5nIGV4Y2VwdCBzbGFzaDsgb24gV2luZG93cwotYW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBvciBjb2xvbi4KLQotKipcKlwqKiogV2luZG93cyBzdXBwb3J0IG5vdCB0aGVyZSB5ZXQgKipcKlwqKioKLQogLi4gJSBcc2VjdGlvbntDcmVhdGluZyBhIGJ1aWx0IGRpc3RyaWJ1dGlvbjogdGhlCiAuLiAlIFxwcm90ZWN0XGNvbW1hbmR7YmRpc3R9IGNvbW1hbmQgZmFtaWx5fQogLi4gJSBcbGFiZWx7YmRpc3QtY21kc30KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdCBiL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdAppbmRleCA5MTIyNDhlLi4xNDk4Mzk0IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0CkBAIC04LDE3ICs4LDE3IEBACiBwYWNrYWdlZCB3aXRoIGRpc3R1dGlscy4gVGhlIGRpc3R1dGlscyBjb21tYW5kIDpjb21tYW5kOmByZWdpc3RlcmAgaXMgdXNlZCB0bwogc3VibWl0IHlvdXIgZGlzdHJpYnV0aW9uJ3MgbWV0YS1kYXRhIHRvIHRoZSBpbmRleC4gSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOjoKIAotICAgcHl0aG9uIHNldHVwLnB5IHJlZ2lzdGVyCisgICAgcHl0aG9uIHNldHVwLnB5IHJlZ2lzdGVyCiAKIERpc3R1dGlscyB3aWxsIHJlc3BvbmQgd2l0aCB0aGUgZm9sbG93aW5nIHByb21wdDo6CiAKLSAgIHJ1bm5pbmcgcmVnaXN0ZXIKLSAgIFdlIG5lZWQgdG8ga25vdyB3aG8geW91IGFyZSwgc28gcGxlYXNlIGNob29zZSBlaXRoZXI6Ci0gICAgMS4gdXNlIHlvdXIgZXhpc3RpbmcgbG9naW4sCi0gICAgMi4gcmVnaXN0ZXIgYXMgYSBuZXcgdXNlciwKLSAgICAzLiBoYXZlIHRoZSBzZXJ2ZXIgZ2VuZXJhdGUgYSBuZXcgcGFzc3dvcmQgZm9yIHlvdSAoYW5kIGVtYWlsIGl0IHRvIHlvdSksIG9yCi0gICAgNC4gcXVpdAotICAgWW91ciBzZWxlY3Rpb24gW2RlZmF1bHQgMV06CisgICAgcnVubmluZyByZWdpc3RlcgorICAgIFdlIG5lZWQgdG8ga25vdyB3aG8geW91IGFyZSwgc28gcGxlYXNlIGNob29zZSBlaXRoZXI6CisgICAgICAgIDEuIHVzZSB5b3VyIGV4aXN0aW5nIGxvZ2luLAorICAgICAgICAyLiByZWdpc3RlciBhcyBhIG5ldyB1c2VyLAorICAgICAgICAzLiBoYXZlIHRoZSBzZXJ2ZXIgZ2VuZXJhdGUgYSBuZXcgcGFzc3dvcmQgZm9yIHlvdSAoYW5kIGVtYWlsIGl0IHRvIHlvdSksIG9yCisgICAgICAgIDQuIHF1aXQKKyAgICBZb3VyIHNlbGVjdGlvbiBbZGVmYXVsdCAxXToKIAogTm90ZTogaWYgeW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHNhdmVkIGxvY2FsbHksIHlvdSB3aWxsIG5vdCBzZWUgdGhpcwogbWVudS4KQEAgLTU1LDM5ICs1NSw1MCBAQAogCiBUaGUgZm9ybWF0IG9mIHRoZSA6ZmlsZTpgLnB5cGlyY2AgZmlsZSBpcyBhcyBmb2xsb3dzOjoKIAotICAgW2Rpc3R1dGlsc10KLSAgIGluZGV4LXNlcnZlcnMgPQotICAgICBweXBpCisgICAgW2Rpc3R1dGlsc10KKyAgICBpbmRleC1zZXJ2ZXJzID0KKyAgICAgICAgcHlwaQogCi0gICBbcHlwaV0KLSAgIHJlcG9zaXRvcnk6IDxyZXBvc2l0b3J5LXVybD4KLSAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+Ci0gICBwYXNzd29yZDogPHBhc3N3b3JkPgorICAgIFtweXBpXQorICAgIHJlcG9zaXRvcnk6IDxyZXBvc2l0b3J5LXVybD4KKyAgICB1c2VybmFtZTogPHVzZXJuYW1lPgorICAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CiAKLSpyZXBvc2l0b3J5KiBjYW4gYmUgb21pdHRlZCBhbmQgZGVmYXVsdHMgdG8gYGBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHlwaWBgLgorVGhlICpkaXN0dXRpbHMqIHNlY3Rpb24gZGVmaW5lcyBhICppbmRleC1zZXJ2ZXJzKiB2YXJpYWJsZSB0aGF0IGxpc3RzIHRoZQorbmFtZSBvZiBhbGwgc2VjdGlvbnMgZGVzY3JpYmluZyBhIHJlcG9zaXRvcnkuCiAKLUlmIHlvdSB3YW50IHRvIGRlZmluZSBhbm90aGVyIHNlcnZlciBhIG5ldyBzZWN0aW9uIGNhbiBiZSBjcmVhdGVkOjoKK0VhY2ggc2VjdGlvbiBkZXNjcmliaW5nIGEgcmVwb3NpdG9yeSBkZWZpbmVzIHRocmVlIHZhcmlhYmxlczoKIAotICAgW2Rpc3R1dGlsc10KLSAgIGluZGV4LXNlcnZlcnMgPQotICAgICBweXBpCi0gICAgIG90aGVyCistICpyZXBvc2l0b3J5KiwgdGhhdCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIFB5UEkgc2VydmVyLiBEZWZhdWx0cyB0bworICAgIGBgaHR0cDovL3d3dy5weXRob24ub3JnL3B5cGlgYC4KKy0gKnVzZXJuYW1lKiwgd2hpY2ggaXMgdGhlIHJlZ2lzdGVyZWQgdXNlcm5hbWUgb24gdGhlIFB5UEkgc2VydmVyLgorLSAqcGFzc3dvcmQqLCB0aGF0IHdpbGwgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUuIElmIG9taXR0ZWQgdGhlIHVzZXIKKyAgICB3aWxsIGJlIHByb21wdCB0byB0eXBlIGl0IHdoZW4gbmVlZGVkLgogCi0gICBbcHlwaV0KLSAgIHJlcG9zaXRvcnk6IDxyZXBvc2l0b3J5LXVybD4KLSAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+Ci0gICBwYXNzd29yZDogPHBhc3N3b3JkPgorSWYgeW91IHdhbnQgdG8gZGVmaW5lIGFub3RoZXIgc2VydmVyIGEgbmV3IHNlY3Rpb24gY2FuIGJlIGNyZWF0ZWQgYW5kCitsaXN0ZWQgaW4gdGhlICppbmRleC1zZXJ2ZXJzKiB2YXJpYWJsZTo6CiAKLSAgIFtvdGhlcl0KLSAgIHJlcG9zaXRvcnk6IGh0dHA6Ly9leGFtcGxlLmNvbS9weXBpCi0gICB1c2VybmFtZTogPHVzZXJuYW1lPgotICAgcGFzc3dvcmQ6IDxwYXNzd29yZD4KKyAgICBbZGlzdHV0aWxzXQorICAgIGluZGV4LXNlcnZlcnMgPQorICAgICAgICBweXBpCisgICAgICAgIG90aGVyCiAKLVRoZSBjb21tYW5kIGNhbiB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZSAtciBvcHRpb246OgorICAgIFtweXBpXQorICAgIHJlcG9zaXRvcnk6IDxyZXBvc2l0b3J5LXVybD4KKyAgICB1c2VybmFtZTogPHVzZXJuYW1lPgorICAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CiAKLSAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQorICAgIFtvdGhlcl0KKyAgICByZXBvc2l0b3J5OiBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQorICAgIHVzZXJuYW1lOiA8dXNlcm5hbWU+CisgICAgcGFzc3dvcmQ6IDxwYXNzd29yZD4KIAotT3IgZXZlbiB3aXRoIHRoZSBzZWN0aW9uIG5hbWU6OgorOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjYW4gdGhlbiBiZSBjYWxsZWQgd2l0aCB0aGUgLXIgb3B0aW9uIHRvIHBvaW50IHRoZQorcmVwb3NpdG9yeSB0byB3b3JrIHdpdGg6OgogCi0gICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgb3RoZXIKKyAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKIAorRm9yIGNvbnZlbmllbmNlLCB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgcmVwb3NpdG9yeQorbWF5IGFsc28gYmUgdXNlZDo6CisKKyAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgb3RoZXIKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQucnN0IGIvRG9jL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5yc3QKaW5kZXggYjYzZTIwOS4uZTQ1NzkxOCAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5yc3QKQEAgLTE5LDE4ICsxOSwxOCBAQAogZGlzdHJpYnV0aW9ucy4gIFRoZSBEaXN0dXRpbHMnIG93biBzZXR1cCBzY3JpcHQsIHNob3duIGhlcmUsIGlzIHVzZWQgdG8gaW5zdGFsbAogdGhlIHBhY2thZ2UgaW50byBQeXRob24gMS41LjIuKSA6OgogCi0gICAjIS91c3IvYmluL2VudiBweXRob24KKyAgICAjIS91c3IvYmluL2VudiBweXRob24KIAotICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKKyAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAogCi0gICBzZXR1cChuYW1lPSdEaXN0dXRpbHMnLAotICAgICAgICAgdmVyc2lvbj0nMS4wJywKLSAgICAgICAgIGRlc2NyaXB0aW9uPSdQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcycsCi0gICAgICAgICBhdXRob3I9J0dyZWcgV2FyZCcsCi0gICAgICAgICBhdXRob3JfZW1haWw9J2d3YXJkQHB5dGhvbi5uZXQnLAotICAgICAgICAgdXJsPSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLycsCi0gICAgICAgICBwYWNrYWdlcz1bJ2Rpc3R1dGlscycsICdkaXN0dXRpbHMuY29tbWFuZCddLAotICAgICAgICApCisgICAgc2V0dXAobmFtZT0nRGlzdHV0aWxzJywKKyAgICAgICAgICB2ZXJzaW9uPScxLjAnLAorICAgICAgICAgIGRlc2NyaXB0aW9uPSdQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcycsCisgICAgICAgICAgYXV0aG9yPSdHcmVnIFdhcmQnLAorICAgICAgICAgIGF1dGhvcl9lbWFpbD0nZ3dhcmRAcHl0aG9uLm5ldCcsCisgICAgICAgICAgdXJsPSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLycsCisgICAgICAgICAgcGFja2FnZXM9WydkaXN0dXRpbHMnLCAnZGlzdHV0aWxzLmNvbW1hbmQnXSwKKyAgICAgICAgICkKIAogVGhlcmUgYXJlIG9ubHkgdHdvIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhpcyBhbmQgdGhlIHRyaXZpYWwgb25lLWZpbGUKIGRpc3RyaWJ1dGlvbiBwcmVzZW50ZWQgaW4gc2VjdGlvbiA6cmVmOmBkaXN0dXRpbHMtc2ltcGxlLWV4YW1wbGVgOiBtb3JlIG1ldGFkYXRhLCBhbmQgdGhlCkBAIC01Myw4ICs1Myw4IEBACiA6ZnVuYzpgb3MubGlzdGRpcmAgdG8gc3BlY2lmeSBmaWxlcywgeW91IHNob3VsZCBiZSBjYXJlZnVsIHRvIHdyaXRlIHBvcnRhYmxlCiBjb2RlIGluc3RlYWQgb2YgaGFyZGNvZGluZyBwYXRoIHNlcGFyYXRvcnM6OgogCi0gICBnbG9iLmdsb2Iob3MucGF0aC5qb2luKCdteWRpcicsICdzdWJkaXInLCAnKi5odG1sJykpCi0gICBvcy5saXN0ZGlyKG9zLnBhdGguam9pbignbXlkaXInLCAnc3ViZGlyJykpCisgICAgZ2xvYi5nbG9iKG9zLnBhdGguam9pbignbXlkaXInLCAnc3ViZGlyJywgJyouaHRtbCcpKQorICAgIG9zLmxpc3RkaXIob3MucGF0aC5qb2luKCdteWRpcicsICdzdWJkaXInKSkKIAogCiAuLiBfbGlzdGluZy1wYWNrYWdlczoKQEAgLTgxLDcgKzgxLDcgQEAKIHBhY2thZ2UgYXQgYWxsKSBhcmUgaW4gOmZpbGU6YGxpYmAsIG1vZHVsZXMgaW4gdGhlIDptb2Q6YGZvb2AgcGFja2FnZSBhcmUgaW4KIDpmaWxlOmBsaWIvZm9vYCwgYW5kIHNvIGZvcnRoLiAgVGhlbiB5b3Ugd291bGQgcHV0IDo6CiAKLSAgIHBhY2thZ2VfZGlyID0geycnOiAnbGliJ30KKyAgICBwYWNrYWdlX2RpciA9IHsnJzogJ2xpYid9CiAKIGluIHlvdXIgc2V0dXAgc2NyaXB0LiAgVGhlIGtleXMgdG8gdGhpcyBkaWN0aW9uYXJ5IGFyZSBwYWNrYWdlIG5hbWVzLCBhbmQgYW4KIGVtcHR5IHBhY2thZ2UgbmFtZSBzdGFuZHMgZm9yIHRoZSByb290IHBhY2thZ2UuICBUaGUgdmFsdWVzIGFyZSBkaXJlY3RvcnkgbmFtZXMKQEAgLTkyLDcgKzkyLDcgQEAKIDpmaWxlOmBsaWJgLCB0aGUgOm1vZDpgZm9vLmJhcmAgcGFja2FnZSBpbiA6ZmlsZTpgbGliL2JhcmAsIGV0Yy4gIFRoaXMgd291bGQgYmUKIHdyaXR0ZW4gaW4gdGhlIHNldHVwIHNjcmlwdCBhcyA6OgogCi0gICBwYWNrYWdlX2RpciA9IHsnZm9vJzogJ2xpYid9CisgICAgcGFja2FnZV9kaXIgPSB7J2Zvbyc6ICdsaWInfQogCiBBIGBgcGFja2FnZTogZGlyYGAgZW50cnkgaW4gdGhlIDpvcHRpb246YHBhY2thZ2VfZGlyYCBkaWN0aW9uYXJ5IGltcGxpY2l0bHkKIGFwcGxpZXMgdG8gYWxsIHBhY2thZ2VzIGJlbG93ICpwYWNrYWdlKiwgc28gdGhlIDptb2Q6YGZvby5iYXJgIGNhc2UgaXMKQEAgLTExNCw3ICsxMTQsNyBAQAogInJvb3QgcGFja2FnZSIgKGkuZS4sIG5vIHBhY2thZ2UgYXQgYWxsKS4gIFRoaXMgc2ltcGxlc3QgY2FzZSB3YXMgc2hvd24gaW4KIHNlY3Rpb24gOnJlZjpgZGlzdHV0aWxzLXNpbXBsZS1leGFtcGxlYDsgaGVyZSBpcyBhIHNsaWdodGx5IG1vcmUgaW52b2x2ZWQgZXhhbXBsZTo6CiAKLSAgIHB5X21vZHVsZXMgPSBbJ21vZDEnLCAncGtnLm1vZDInXQorICAgIHB5X21vZHVsZXMgPSBbJ21vZDEnLCAncGtnLm1vZDInXQogCiBUaGlzIGRlc2NyaWJlcyB0d28gbW9kdWxlcywgb25lIG9mIHRoZW0gaW4gdGhlICJyb290IiBwYWNrYWdlLCB0aGUgb3RoZXIgaW4gdGhlCiA6bW9kOmBwa2dgIHBhY2thZ2UuICBBZ2FpbiwgdGhlIGRlZmF1bHQgcGFja2FnZS9kaXJlY3RvcnkgbGF5b3V0IGltcGxpZXMgdGhhdApAQCAtMTQ0LDE3ICsxNDQsMTcgQEAKIGltcGxlbWVudGVkIGJ5IDpmaWxlOmBmb28uY2AuICBJZiBubyBhZGRpdGlvbmFsIGluc3RydWN0aW9ucyB0byB0aGUKIGNvbXBpbGVyL2xpbmtlciBhcmUgbmVlZGVkLCBkZXNjcmliaW5nIHRoaXMgZXh0ZW5zaW9uIGlzIHF1aXRlIHNpbXBsZTo6CiAKLSAgIEV4dGVuc2lvbignZm9vJywgWydmb28uYyddKQorICAgIEV4dGVuc2lvbignZm9vJywgWydmb28uYyddKQogCiBUaGUgOmNsYXNzOmBFeHRlbnNpb25gIGNsYXNzIGNhbiBiZSBpbXBvcnRlZCBmcm9tIDptb2Q6YGRpc3R1dGlscy5jb3JlYCBhbG9uZwogd2l0aCA6ZnVuYzpgc2V0dXBgLiAgVGh1cywgdGhlIHNldHVwIHNjcmlwdCBmb3IgYSBtb2R1bGUgZGlzdHJpYnV0aW9uIHRoYXQKIGNvbnRhaW5zIG9ubHkgdGhpcyBvbmUgZXh0ZW5zaW9uIGFuZCBub3RoaW5nIGVsc2UgbWlnaHQgYmU6OgogCi0gICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cCwgRXh0ZW5zaW9uCi0gICBzZXR1cChuYW1lPSdmb28nLAotICAgICAgICAgdmVyc2lvbj0nMS4wJywKLSAgICAgICAgIGV4dF9tb2R1bGVzPVtFeHRlbnNpb24oJ2ZvbycsIFsnZm9vLmMnXSldLAotICAgICAgICAgKQorICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KKyAgICBzZXR1cChuYW1lPSdmb28nLAorICAgICAgICAgIHZlcnNpb249JzEuMCcsCisgICAgICAgICAgZXh0X21vZHVsZXM9W0V4dGVuc2lvbignZm9vJywgWydmb28uYyddKV0sCisgICAgICAgICAgKQogCiBUaGUgOmNsYXNzOmBFeHRlbnNpb25gIGNsYXNzIChhY3R1YWxseSwgdGhlIHVuZGVybHlpbmcgZXh0ZW5zaW9uLWJ1aWxkaW5nCiBtYWNoaW5lcnkgaW1wbGVtZW50ZWQgYnkgdGhlIDpjb21tYW5kOmBidWlsZF9leHRgIGNvbW1hbmQpIHN1cHBvcnRzIGEgZ3JlYXQgZGVhbApAQCAtMTY4LDExICsxNjgsMTEgQEAKIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgOmNsYXNzOmBFeHRlbnNpb25gIGNvbnN0cnVjdG9yIGlzIGFsd2F5cyB0aGUgbmFtZSBvZgogdGhlIGV4dGVuc2lvbiwgaW5jbHVkaW5nIGFueSBwYWNrYWdlIG5hbWVzLiAgRm9yIGV4YW1wbGUsIDo6CiAKLSAgIEV4dGVuc2lvbignZm9vJywgWydzcmMvZm9vMS5jJywgJ3NyYy9mb28yLmMnXSkKKyAgICBFeHRlbnNpb24oJ2ZvbycsIFsnc3JjL2ZvbzEuYycsICdzcmMvZm9vMi5jJ10pCiAKIGRlc2NyaWJlcyBhbiBleHRlbnNpb24gdGhhdCBsaXZlcyBpbiB0aGUgcm9vdCBwYWNrYWdlLCB3aGlsZSA6OgogCi0gICBFeHRlbnNpb24oJ3BrZy5mb28nLCBbJ3NyYy9mb28xLmMnLCAnc3JjL2ZvbzIuYyddKQorICAgIEV4dGVuc2lvbigncGtnLmZvbycsIFsnc3JjL2ZvbzEuYycsICdzcmMvZm9vMi5jJ10pCiAKIGRlc2NyaWJlcyB0aGUgc2FtZSBleHRlbnNpb24gaW4gdGhlIDptb2Q6YHBrZ2AgcGFja2FnZS4gIFRoZSBzb3VyY2UgZmlsZXMgYW5kCiByZXN1bHRpbmcgb2JqZWN0IGNvZGUgYXJlIGlkZW50aWNhbCBpbiBib3RoIGNhc2VzOyB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHdoZXJlCkBAIC0xODMsMTEgKzE4MywxMSBAQAogc2FtZSBiYXNlIHBhY2thZ2UpLCB1c2UgdGhlIDpvcHRpb246YGV4dF9wYWNrYWdlYCBrZXl3b3JkIGFyZ3VtZW50IHRvCiA6ZnVuYzpgc2V0dXBgLiAgRm9yIGV4YW1wbGUsIDo6CiAKLSAgIHNldHVwKC4uLiwKLSAgICAgICAgIGV4dF9wYWNrYWdlPSdwa2cnLAotICAgICAgICAgZXh0X21vZHVsZXM9W0V4dGVuc2lvbignZm9vJywgWydmb28uYyddKSwKLSAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ3N1YnBrZy5iYXInLCBbJ2Jhci5jJ10pXSwKLSAgICAgICAgKQorICAgIHNldHVwKC4uLiwKKyAgICAgICAgICBleHRfcGFja2FnZT0ncGtnJywKKyAgICAgICAgICBleHRfbW9kdWxlcz1bRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10pLAorICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ3N1YnBrZy5iYXInLCBbJ2Jhci5jJ10pXSwKKyAgICAgICAgICkKIAogd2lsbCBjb21waWxlIDpmaWxlOmBmb28uY2AgdG8gdGhlIGV4dGVuc2lvbiA6bW9kOmBwa2cuZm9vYCwgYW5kIDpmaWxlOmBiYXIuY2AgdG8KIDptb2Q6YHBrZy5zdWJwa2cuYmFyYC4KQEAgLTIxMiwxNSArMjEyLDE1IEBACiBUaGlzIHdhcm5pbmcgbm90d2l0aHN0YW5kaW5nLCBvcHRpb25zIHRvIFNXSUcgY2FuIGJlIGN1cnJlbnRseSBwYXNzZWQgbGlrZQogdGhpczo6CiAKLSAgIHNldHVwKC4uLiwKLSAgICAgICAgIGV4dF9tb2R1bGVzPVtFeHRlbnNpb24oJ19mb28nLCBbJ2Zvby5pJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aWdfb3B0cz1bJy1tb2Rlcm4nLCAnLUkuLi9pbmNsdWRlJ10pXSwKLSAgICAgICAgIHB5X21vZHVsZXM9Wydmb28nXSwKLSAgICAgICAgKQorICAgIHNldHVwKC4uLiwKKyAgICAgICAgICBleHRfbW9kdWxlcz1bRXh0ZW5zaW9uKCdfZm9vJywgWydmb28uaSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpZ19vcHRzPVsnLW1vZGVybicsICctSS4uL2luY2x1ZGUnXSldLAorICAgICAgICAgIHB5X21vZHVsZXM9Wydmb28nXSwKKyAgICAgICAgICkKIAogT3Igb24gdGhlIGNvbW1hbmRsaW5lIGxpa2UgdGhpczo6CiAKLSAgID4gcHl0aG9uIHNldHVwLnB5IGJ1aWxkX2V4dCAtLXN3aWctb3B0cz0iLW1vZGVybiAtSS4uL2luY2x1ZGUiCisgICAgPiBweXRob24gc2V0dXAucHkgYnVpbGRfZXh0IC0tc3dpZy1vcHRzPSItbW9kZXJuIC1JLi4vaW5jbHVkZSIKIAogT24gc29tZSBwbGF0Zm9ybXMsIHlvdSBjYW4gaW5jbHVkZSBub24tc291cmNlIGZpbGVzIHRoYXQgYXJlIHByb2Nlc3NlZCBieSB0aGUKIGNvbXBpbGVyIGFuZCBpbmNsdWRlZCBpbiB5b3VyIGV4dGVuc2lvbi4gIEN1cnJlbnRseSwgdGhpcyBqdXN0IG1lYW5zIFdpbmRvd3MKQEAgLTIzOSwxOCArMjM5LDE4IEBACiBGb3IgZXhhbXBsZSwgaWYgeW91ciBleHRlbnNpb24gcmVxdWlyZXMgaGVhZGVyIGZpbGVzIGluIHRoZSA6ZmlsZTpgaW5jbHVkZWAKIGRpcmVjdG9yeSB1bmRlciB5b3VyIGRpc3RyaWJ1dGlvbiByb290LCB1c2UgdGhlIGBgaW5jbHVkZV9kaXJzYGAgb3B0aW9uOjoKIAotICAgRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10sIGluY2x1ZGVfZGlycz1bJ2luY2x1ZGUnXSkKKyAgICBFeHRlbnNpb24oJ2ZvbycsIFsnZm9vLmMnXSwgaW5jbHVkZV9kaXJzPVsnaW5jbHVkZSddKQogCiBZb3UgY2FuIHNwZWNpZnkgYWJzb2x1dGUgZGlyZWN0b3JpZXMgdGhlcmU7IGlmIHlvdSBrbm93IHRoYXQgeW91ciBleHRlbnNpb24gd2lsbAogb25seSBiZSBidWlsdCBvbiBVbml4IHN5c3RlbXMgd2l0aCBYMTFSNiBpbnN0YWxsZWQgdG8gOmZpbGU6YC91c3JgLCB5b3UgY2FuIGdldAogYXdheSB3aXRoIDo6CiAKLSAgIEV4dGVuc2lvbignZm9vJywgWydmb28uYyddLCBpbmNsdWRlX2RpcnM9WycvdXNyL2luY2x1ZGUvWDExJ10pCisgICAgRXh0ZW5zaW9uKCdmb28nLCBbJ2Zvby5jJ10sIGluY2x1ZGVfZGlycz1bJy91c3IvaW5jbHVkZS9YMTEnXSkKIAogWW91IHNob3VsZCBhdm9pZCB0aGlzIHNvcnQgb2Ygbm9uLXBvcnRhYmxlIHVzYWdlIGlmIHlvdSBwbGFuIHRvIGRpc3RyaWJ1dGUgeW91cgogY29kZTogaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gd3JpdGUgQyBjb2RlIGxpa2UgIDo6CiAKLSAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgorICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogCiBJZiB5b3UgbmVlZCB0byBpbmNsdWRlIGhlYWRlciBmaWxlcyBmcm9tIHNvbWUgb3RoZXIgUHl0aG9uIGV4dGVuc2lvbiwgeW91IGNhbgogdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBoZWFkZXIgZmlsZXMgYXJlIGluc3RhbGxlZCBpbiBhIGNvbnNpc3RlbnQgd2F5CkBAIC0yNjIsMTcgKzI2MiwxNyBAQAogaW5jbHVkZWQgaW4gdGhlIHNlYXJjaCBwYXRoIHdoZW4gYnVpbGRpbmcgUHl0aG9uIGV4dGVuc2lvbnMsIHRoZSBiZXN0IGFwcHJvYWNoCiBpcyB0byB3cml0ZSBDIGNvZGUgbGlrZSAgOjoKIAotICAgI2luY2x1ZGUgPE51bWVyaWNhbC9hcnJheW9iamVjdC5oPgorICAgICNpbmNsdWRlIDxOdW1lcmljYWwvYXJyYXlvYmplY3QuaD4KIAogSWYgeW91IG11c3QgcHV0IHRoZSA6ZmlsZTpgTnVtZXJpY2FsYCBpbmNsdWRlIGRpcmVjdG9yeSByaWdodCBpbnRvIHlvdXIgaGVhZGVyCiBzZWFyY2ggcGF0aCwgdGhvdWdoLCB5b3UgY2FuIGZpbmQgdGhhdCBkaXJlY3RvcnkgdXNpbmcgdGhlIERpc3R1dGlscwogOm1vZDpgZGlzdHV0aWxzLnN5c2NvbmZpZ2AgbW9kdWxlOjoKIAotICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBnZXRfcHl0aG9uX2luYwotICAgaW5jZGlyID0gb3MucGF0aC5qb2luKGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSksICdOdW1lcmljYWwnKQotICAgc2V0dXAoLi4uLAotICAgICAgICAgRXh0ZW5zaW9uKC4uLiwgaW5jbHVkZV9kaXJzPVtpbmNkaXJdKSwKLSAgICAgICAgICkKKyAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25faW5jCisgICAgaW5jZGlyID0gb3MucGF0aC5qb2luKGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSksICdOdW1lcmljYWwnKQorICAgIHNldHVwKC4uLiwKKyAgICAgICAgICBFeHRlbnNpb24oLi4uLCBpbmNsdWRlX2RpcnM9W2luY2Rpcl0pLAorICAgICAgICAgICkKIAogRXZlbiB0aG91Z2ggdGhpcyBpcyBxdWl0ZSBwb3J0YWJsZS0tLWl0IHdpbGwgd29yayBvbiBhbnkgUHl0aG9uIGluc3RhbGxhdGlvbiwKIHJlZ2FyZGxlc3Mgb2YgcGxhdGZvcm0tLS1pdCdzIHByb2JhYmx5IGVhc2llciB0byBqdXN0IHdyaXRlIHlvdXIgQyBjb2RlIGluIHRoZQpAQCAtMjg4LDE3ICsyODgsMTcgQEAKIAogRm9yIGV4YW1wbGU6OgogCi0gICBFeHRlbnNpb24oLi4uLAotICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnTkRFQlVHJywgJzEnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0hBVkVfU1RSRlRJTUUnLCBOb25lKV0sCi0gICAgICAgICAgICAgdW5kZWZfbWFjcm9zPVsnSEFWRV9GT08nLCAnSEFWRV9CQVInXSkKKyAgICBFeHRlbnNpb24oLi4uLAorICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ05ERUJVRycsICcxJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9TVFJGVElNRScsIE5vbmUpXSwKKyAgICAgICAgICAgICAgdW5kZWZfbWFjcm9zPVsnSEFWRV9GT08nLCAnSEFWRV9CQVInXSkKIAogaXMgdGhlIGVxdWl2YWxlbnQgb2YgaGF2aW5nIHRoaXMgYXQgdGhlIHRvcCBvZiBldmVyeSBDIHNvdXJjZSBmaWxlOjoKIAotICAgI2RlZmluZSBOREVCVUcgMQotICAgI2RlZmluZSBIQVZFX1NUUkZUSU1FCi0gICAjdW5kZWYgSEFWRV9GT08KLSAgICN1bmRlZiBIQVZFX0JBUgorICAgICNkZWZpbmUgTkRFQlVHIDEKKyAgICAjZGVmaW5lIEhBVkVfU1RSRlRJTUUKKyAgICAjdW5kZWYgSEFWRV9GT08KKyAgICAjdW5kZWYgSEFWRV9CQVIKIAogCiBMaWJyYXJ5IG9wdGlvbnMKQEAgLTMxMywxNSArMzEzLDE1IEBACiBGb3IgZXhhbXBsZSwgaWYgeW91IG5lZWQgdG8gbGluayBhZ2FpbnN0IGxpYnJhcmllcyBrbm93biB0byBiZSBpbiB0aGUgc3RhbmRhcmQKIGxpYnJhcnkgc2VhcmNoIHBhdGggb24gdGFyZ2V0IHN5c3RlbXMgOjoKIAotICAgRXh0ZW5zaW9uKC4uLiwKLSAgICAgICAgICAgICBsaWJyYXJpZXM9WydnZGJtJywgJ3JlYWRsaW5lJ10pCisgICAgRXh0ZW5zaW9uKC4uLiwKKyAgICAgICAgICAgICAgbGlicmFyaWVzPVsnZ2RibScsICdyZWFkbGluZSddKQogCiBJZiB5b3UgbmVlZCB0byBsaW5rIHdpdGggbGlicmFyaWVzIGluIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uLCB5b3UnbGwgaGF2ZSB0bwogaW5jbHVkZSB0aGUgbG9jYXRpb24gaW4gYGBsaWJyYXJ5X2RpcnNgYDo6CiAKLSAgIEV4dGVuc2lvbiguLi4sCi0gICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9YMTFSNi9saWInXSwKLSAgICAgICAgICAgICBsaWJyYXJpZXM9WydYMTEnLCAnWHQnXSkKKyAgICBFeHRlbnNpb24oLi4uLAorICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL1gxMVI2L2xpYiddLAorICAgICAgICAgICAgICBsaWJyYXJpZXM9WydYMTEnLCAnWHQnXSkKIAogKEFnYWluLCB0aGlzIHNvcnQgb2Ygbm9uLXBvcnRhYmxlIGNvbnN0cnVjdCBzaG91bGQgYmUgYXZvaWRlZCBpZiB5b3UgaW50ZW5kIHRvCiBkaXN0cmlidXRlIHlvdXIgY29kZS4pCkBAIC0zMzQsNiArMzM0LDEwIEBACiAKIFRoZXJlIGFyZSBzdGlsbCBzb21lIG90aGVyIG9wdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZXMuCiAKK1RoZSA6b3B0aW9uOmBvcHRpb25hbGAgb3B0aW9uIGlzIGEgYm9vbGVhbjsgaWYgaXQgaXMgdHJ1ZSwKK2EgYnVpbGQgZmFpbHVyZSBpbiB0aGUgZXh0ZW5zaW9uIHdpbGwgbm90IGFib3J0IHRoZSBidWlsZCBwcm9jZXNzLCBidXQKK2luc3RlYWQgc2ltcGx5IG5vdCBpbnN0YWxsIHRoZSBmYWlsaW5nIGV4dGVuc2lvbi4KKwogVGhlIDpvcHRpb246YGV4dHJhX29iamVjdHNgIG9wdGlvbiBpcyBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIHRvIGJlIHBhc3NlZCB0byB0aGUKIGxpbmtlci4gVGhlc2UgZmlsZXMgbXVzdCBub3QgaGF2ZSBleHRlbnNpb25zLCBhcyB0aGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIHRoZQogY29tcGlsZXIgaXMgdXNlZC4KQEAgLTM0Nyw2ICszNTEsMTAgQEAKIGJ1aWxkaW5nIGNvbXBpbGVkIGV4dGVuc2lvbnM6IERpc3R1dGlscyAgd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBgYGluaXRtb2R1bGVgYAogdG8gdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scy4KIAorVGhlIDpvcHRpb246YGRlcGVuZHNgIG9wdGlvbiBpcyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCB0aGUgZXh0ZW5zaW9uIGRlcGVuZHMgb24KKyhmb3IgZXhhbXBsZSBoZWFkZXIgZmlsZXMpLiBUaGUgYnVpbGQgY29tbWFuZCB3aWxsIGNhbGwgdGhlIGNvbXBpbGVyIG9uIHRoZQorc291cmNlcyB0byByZWJ1aWxkIGV4dGVuc2lvbiBpZiBhbnkgb24gdGhpcyBmaWxlcyBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUKK3ByZXZpb3VzIGJ1aWxkLgogCiBSZWxhdGlvbnNoaXBzIGJldHdlZW4gRGlzdHJpYnV0aW9ucyBhbmQgUGFja2FnZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzc1LDggKzM4Myw4IEBACiBwYXJlbnRoZXNlcy4gIEVhY2ggcXVhbGlmaWVyIG1heSBjb25zaXN0IG9mIGEgY29tcGFyaXNvbiBvcGVyYXRvciBhbmQgYSB2ZXJzaW9uCiBudW1iZXIuICBUaGUgYWNjZXB0ZWQgY29tcGFyaXNvbiBvcGVyYXRvcnMgYXJlOjoKIAotICAgPCAgICA+ICAgID09Ci0gICA8PSAgID49ICAgIT0KKyAgICA8ICAgID4gICAgPT0KKyAgICA8PSAgID49ICAgIT0KIAogVGhlc2UgY2FuIGJlIGNvbWJpbmVkIGJ5IHVzaW5nIG11bHRpcGxlIHF1YWxpZmllcnMgc2VwYXJhdGVkIGJ5IGNvbW1hcyAoYW5kCiBvcHRpb25hbCB3aGl0ZXNwYWNlKS4gIEluIHRoaXMgY2FzZSwgYWxsIG9mIHRoZSBxdWFsaWZpZXJzIG11c3QgYmUgbWF0Y2hlZDsgYQpAQCAtNDIzLDYgKzQzMSw3IEBACiBkaXN0cmlidXRpb24gYmVpbmcgZGVzY3JpYmVkLiAgSWYgbm8gcXVhbGlmaWVycyBhcmUgZ2l2ZW4sIGFsbCB2ZXJzaW9ucyBvZiB0aGUKIG5hbWVkIG1vZHVsZSBvciBwYWNrYWdlIGFyZSB1bmRlcnN0b29kIHRvIGJlIG9ic29sZXRlZC4KIAorLi4gX2Rpc3R1dGlscy1pbnN0YWxsaW5nLXNjcmlwdHM6CiAKIEluc3RhbGxpbmcgU2NyaXB0cwogPT09PT09PT09PT09PT09PT09CkBAIC00NDEsMTAgKzQ1MCwxNSBAQAogVGhlIDpvcHRpb246YHNjcmlwdHNgIG9wdGlvbiBzaW1wbHkgaXMgYSBsaXN0IG9mIGZpbGVzIHRvIGJlIGhhbmRsZWQgaW4gdGhpcwogd2F5LiAgRnJvbSB0aGUgUHlYTUwgc2V0dXAgc2NyaXB0OjoKIAotICAgc2V0dXAoLi4uLAotICAgICAgICAgc2NyaXB0cz1bJ3NjcmlwdHMveG1scHJvY19wYXJzZScsICdzY3JpcHRzL3htbHByb2NfdmFsJ10KLSAgICAgICAgICkKKyAgICBzZXR1cCguLi4sCisgICAgICAgICAgc2NyaXB0cz1bJ3NjcmlwdHMveG1scHJvY19wYXJzZScsICdzY3JpcHRzL3htbHByb2NfdmFsJ10KKyAgICAgICAgICApCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgQWxsIHRoZSBzY3JpcHRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgYGBNQU5JRkVTVGBgCisgICAgZmlsZSBpZiBubyB0ZW1wbGF0ZSBpcyBwcm92aWRlZC4gU2VlIDpyZWY6YG1hbmlmZXN0YC4KKworLi4gX2Rpc3R1dGlscy1pbnN0YWxsaW5nLXBhY2thZ2UtZGF0YToKIAogSW5zdGFsbGluZyBQYWNrYWdlIERhdGEKID09PT09PT09PT09PT09PT09PT09PT09CkBAIC00NjgsMjYgKzQ4MiwzMiBAQAogRm9yIGV4YW1wbGUsIGlmIGEgcGFja2FnZSBzaG91bGQgY29udGFpbiBhIHN1YmRpcmVjdG9yeSB3aXRoIHNldmVyYWwgZGF0YSBmaWxlcywKIHRoZSBmaWxlcyBjYW4gYmUgYXJyYW5nZWQgbGlrZSB0aGlzIGluIHRoZSBzb3VyY2UgdHJlZTo6CiAKLSAgIHNldHVwLnB5Ci0gICBzcmMvCi0gICAgICAgbXlwa2cvCi0gICAgICAgICAgIF9faW5pdF9fLnB5Ci0gICAgICAgICAgIG1vZHVsZS5weQotICAgICAgICAgICBkYXRhLwotICAgICAgICAgICAgICAgdGFibGVzLmRhdAotICAgICAgICAgICAgICAgc3Bvb25zLmRhdAotICAgICAgICAgICAgICAgZm9ya3MuZGF0CisgICAgc2V0dXAucHkKKyAgICBzcmMvCisgICAgICAgIG15cGtnLworICAgICAgICAgICAgX19pbml0X18ucHkKKyAgICAgICAgICAgIG1vZHVsZS5weQorICAgICAgICAgICAgZGF0YS8KKyAgICAgICAgICAgICAgICB0YWJsZXMuZGF0CisgICAgICAgICAgICAgICAgc3Bvb25zLmRhdAorICAgICAgICAgICAgICAgIGZvcmtzLmRhdAogCiBUaGUgY29ycmVzcG9uZGluZyBjYWxsIHRvIDpmdW5jOmBzZXR1cGAgbWlnaHQgYmU6OgogCi0gICBzZXR1cCguLi4sCi0gICAgICAgICBwYWNrYWdlcz1bJ215cGtnJ10sCi0gICAgICAgICBwYWNrYWdlX2Rpcj17J215cGtnJzogJ3NyYy9teXBrZyd9LAotICAgICAgICAgcGFja2FnZV9kYXRhPXsnbXlwa2cnOiBbJ2RhdGEvKi5kYXQnXX0sCi0gICAgICAgICApCisgICAgc2V0dXAoLi4uLAorICAgICAgICAgIHBhY2thZ2VzPVsnbXlwa2cnXSwKKyAgICAgICAgICBwYWNrYWdlX2Rpcj17J215cGtnJzogJ3NyYy9teXBrZyd9LAorICAgICAgICAgIHBhY2thZ2VfZGF0YT17J215cGtnJzogWydkYXRhLyouZGF0J119LAorICAgICAgICAgICkKIAogLi4gdmVyc2lvbmFkZGVkOjogMi40CiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgQWxsIHRoZSBmaWxlcyB0aGF0IG1hdGNoIGBgcGFja2FnZV9kYXRhYGAgd2lsbCBiZSBhZGRlZCB0byB0aGUgYGBNQU5JRkVTVGBgCisgICAgZmlsZSBpZiBubyB0ZW1wbGF0ZSBpcyBwcm92aWRlZC4gU2VlIDpyZWY6YG1hbmlmZXN0YC4KKworCisuLiBfZGlzdHV0aWxzLWFkZGl0aW9uYWwtZmlsZXM6CiAKIEluc3RhbGxpbmcgQWRkaXRpb25hbCBGaWxlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC00OTksMTEgKzUxOSwxMSBAQAogOm9wdGlvbjpgZGF0YV9maWxlc2Agc3BlY2lmaWVzIGEgc2VxdWVuY2Ugb2YgKCpkaXJlY3RvcnkqLCAqZmlsZXMqKSBwYWlycyBpbiB0aGUKIGZvbGxvd2luZyB3YXk6OgogCi0gICBzZXR1cCguLi4sCi0gICAgICAgICBkYXRhX2ZpbGVzPVsoJ2JpdG1hcHMnLCBbJ2JtL2IxLmdpZicsICdibS9iMi5naWYnXSksCi0gICAgICAgICAgICAgICAgICAgICAoJ2NvbmZpZycsIFsnY2ZnL2RhdGEuY2ZnJ10pLAotICAgICAgICAgICAgICAgICAgICAgKCcvZXRjL2luaXQuZCcsIFsnaW5pdC1zY3JpcHQnXSldCi0gICAgICAgICkKKyAgICBzZXR1cCguLi4sCisgICAgICAgICAgZGF0YV9maWxlcz1bKCdiaXRtYXBzJywgWydibS9iMS5naWYnLCAnYm0vYjIuZ2lmJ10pLAorICAgICAgICAgICAgICAgICAgICAgICgnY29uZmlnJywgWydjZmcvZGF0YS5jZmcnXSksCisgICAgICAgICAgICAgICAgICAgICAgKCcvZXRjL2luaXQuZCcsIFsnaW5pdC1zY3JpcHQnXSldCisgICAgICAgICApCiAKIE5vdGUgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIGRpcmVjdG9yeSBuYW1lcyB3aGVyZSB0aGUgZGF0YSBmaWxlcyB3aWxsIGJlCiBpbnN0YWxsZWQsIGJ1dCB5b3UgY2Fubm90IHJlbmFtZSB0aGUgZGF0YSBmaWxlcyB0aGVtc2VsdmVzLgpAQCAtNTIzLDYgKzU0MywxMSBAQAogZmlsZXMgZGlyZWN0bHkgaW4gdGhlIHRhcmdldCBkaXJlY3RvcnksIGFuIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgZ2l2ZW4gYXMgdGhlCiBkaXJlY3RvcnkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgQWxsIHRoZSBmaWxlcyB0aGF0IG1hdGNoIGBgZGF0YV9maWxlc2BgIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGBgTUFOSUZFU1RgYAorICAgIGZpbGUgaWYgbm8gdGVtcGxhdGUgaXMgcHJvdmlkZWQuIFNlZSA6cmVmOmBtYW5pZmVzdGAuCisKKwogCiAuLiBfbWV0YS1kYXRhOgogCkBAIC01NTUsNyArNTgwLDcgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgfCBkZXNjcmlwdGlvbiBvZiB0aGUgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgfCBwYWNrYWdlICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKLXwgYGBsb25nX2Rlc2NyaXB0aW9uYGAgfCBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIHwgbG9uZyBzdHJpbmcgICAgIHwgICAgICAgIHwKK3wgYGBsb25nX2Rlc2NyaXB0aW9uYGAgfCBsb25nZXIgZGVzY3JpcHRpb24gb2YgdGhlIHwgbG9uZyBzdHJpbmcgICAgIHwgXCg1KSAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgfCBwYWNrYWdlICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKIHwgYGBkb3dubG9hZF91cmxgYCAgICAgfCBsb2NhdGlvbiB3aGVyZSB0aGUgICAgICAgIHwgVVJMICAgICAgICAgICAgIHwgXCg0KSAgIHwKQEAgLTU3MSwxOCArNTk2LDIyIEBACiBOb3RlczoKIAogKDEpCi0gICBUaGVzZSBmaWVsZHMgYXJlIHJlcXVpcmVkLgorICAgIFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQuCiAKICgyKQotICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB2ZXJzaW9ucyB0YWtlIHRoZSBmb3JtICptYWpvci5taW5vclsucGF0Y2hbLnN1Yl1dKi4KKyAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHZlcnNpb25zIHRha2UgdGhlIGZvcm0gKm1ham9yLm1pbm9yWy5wYXRjaFsuc3ViXV0qLgogCiAoMykKLSAgIEVpdGhlciB0aGUgYXV0aG9yIG9yIHRoZSBtYWludGFpbmVyIG11c3QgYmUgaWRlbnRpZmllZC4KKyAgICBFaXRoZXIgdGhlIGF1dGhvciBvciB0aGUgbWFpbnRhaW5lciBtdXN0IGJlIGlkZW50aWZpZWQuCiAKICg0KQotICAgVGhlc2UgZmllbGRzIHNob3VsZCBub3QgYmUgdXNlZCBpZiB5b3VyIHBhY2thZ2UgaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbgotICAgdmVyc2lvbnMgcHJpb3IgdG8gMi4yLjMgb3IgMi4zLiAgVGhlIGxpc3QgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGBQeVBJIHdlYnNpdGUKLSAgIDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8uCisgICAgVGhlc2UgZmllbGRzIHNob3VsZCBub3QgYmUgdXNlZCBpZiB5b3VyIHBhY2thZ2UgaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbgorICAgIHZlcnNpb25zIHByaW9yIHRvIDIuMi4zIG9yIDIuMy4gIFRoZSBsaXN0IGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBgUHlQSSB3ZWJzaXRlCisgICAgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXy4KKworKDUpCisgICAgVGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIGZpZWxkIGlzIHVzZWQgYnkgUHlQSSB3aGVuIHlvdSBhcmUgcmVnaXN0ZXJpbmcgYQorICAgIHBhY2thZ2UsIHRvIGJ1aWxkIGl0cyBob21lIHBhZ2UuCiAKICg2KQogICAgIFRoZSBgYGxpY2Vuc2VgYCBmaWVsZCBpcyBhIHRleHQgaW5kaWNhdGluZyB0aGUgbGljZW5zZSBjb3ZlcmluZyB0aGUKQEAgLTU5MiwxNCArNjIxLDE0IEBACiAgICAgYWN0cyBhcyBhbiBhbGlhcyBmb3IgYGBsaWNlbnNlYGAuCiAKICdzaG9ydCBzdHJpbmcnCi0gICBBIHNpbmdsZSBsaW5lIG9mIHRleHQsIG5vdCBtb3JlIHRoYW4gMjAwIGNoYXJhY3RlcnMuCisgICAgQSBzaW5nbGUgbGluZSBvZiB0ZXh0LCBub3QgbW9yZSB0aGFuIDIwMCBjaGFyYWN0ZXJzLgogCiAnbG9uZyBzdHJpbmcnCi0gICBNdWx0aXBsZSBsaW5lcyBvZiBwbGFpbiB0ZXh0IGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0IChzZWUKLSAgIGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQvKS4KKyAgICBNdWx0aXBsZSBsaW5lcyBvZiBwbGFpbiB0ZXh0IGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0IChzZWUKKyAgICBodHRwOi8vZG9jdXRpbHMuc2YubmV0LykuCiAKICdsaXN0IG9mIHN0cmluZ3MnCi0gICBTZWUgYmVsb3cuCisgICAgU2VlIGJlbG93LgogCiBOb25lIG9mIHRoZSBzdHJpbmcgdmFsdWVzIG1heSBiZSBVbmljb2RlLgogCkBAIC02MTUsNDQgKzY0NCw0NCBAQAogKGZvciBmaW5hbCBwcmUtcmVsZWFzZSByZWxlYXNlIHRlc3RpbmcpLiBTb21lIGV4YW1wbGVzOgogCiAwLjEuMAotICAgdGhlIGZpcnN0LCBleHBlcmltZW50YWwgcmVsZWFzZSBvZiBhIHBhY2thZ2UKKyAgICB0aGUgZmlyc3QsIGV4cGVyaW1lbnRhbCByZWxlYXNlIG9mIGEgcGFja2FnZQogCiAxLjAuMWEyCi0gICB0aGUgc2Vjb25kIGFscGhhIHJlbGVhc2Ugb2YgdGhlIGZpcnN0IHBhdGNoIHZlcnNpb24gb2YgMS4wCisgICAgdGhlIHNlY29uZCBhbHBoYSByZWxlYXNlIG9mIHRoZSBmaXJzdCBwYXRjaCB2ZXJzaW9uIG9mIDEuMAogCiA6b3B0aW9uOmBjbGFzc2lmaWVyc2AgYXJlIHNwZWNpZmllZCBpbiBhIFB5dGhvbiBsaXN0OjoKIAotICAgc2V0dXAoLi4uLAotICAgICAgICAgY2xhc3NpZmllcnM9WwotICAgICAgICAgICAgICdEZXZlbG9wbWVudCBTdGF0dXMgOjogNCAtIEJldGEnLAotICAgICAgICAgICAgICdFbnZpcm9ubWVudCA6OiBDb25zb2xlJywKLSAgICAgICAgICAgICAnRW52aXJvbm1lbnQgOjogV2ViIEVudmlyb25tZW50JywKLSAgICAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogRW5kIFVzZXJzL0Rlc2t0b3AnLAotICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKLSAgICAgICAgICAgICAnSW50ZW5kZWQgQXVkaWVuY2UgOjogU3lzdGVtIEFkbWluaXN0cmF0b3JzJywKLSAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gTGljZW5zZScsCi0gICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWCcsCi0gICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogTWljcm9zb2Z0IDo6IFdpbmRvd3MnLAotICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IFBPU0lYJywKLSAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKLSAgICAgICAgICAgICAnVG9waWMgOjogQ29tbXVuaWNhdGlvbnMgOjogRW1haWwnLAotICAgICAgICAgICAgICdUb3BpYyA6OiBPZmZpY2UvQnVzaW5lc3MnLAotICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBCdWcgVHJhY2tpbmcnLAotICAgICAgICAgICAgIF0sCi0gICAgICAgICApCisgICAgc2V0dXAoLi4uLAorICAgICAgICAgIGNsYXNzaWZpZXJzPVsKKyAgICAgICAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsCisgICAgICAgICAgICAgICdFbnZpcm9ubWVudCA6OiBDb25zb2xlJywKKyAgICAgICAgICAgICAgJ0Vudmlyb25tZW50IDo6IFdlYiBFbnZpcm9ubWVudCcsCisgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBFbmQgVXNlcnMvRGVza3RvcCcsCisgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKKyAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IFN5c3RlbSBBZG1pbmlzdHJhdG9ycycsCisgICAgICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlJywKKyAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWCcsCisgICAgICAgICAgICAgICdPcGVyYXRpbmcgU3lzdGVtIDo6IE1pY3Jvc29mdCA6OiBXaW5kb3dzJywKKyAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgnLAorICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKKyAgICAgICAgICAgICAgJ1RvcGljIDo6IENvbW11bmljYXRpb25zIDo6IEVtYWlsJywKKyAgICAgICAgICAgICAgJ1RvcGljIDo6IE9mZmljZS9CdXNpbmVzcycsCisgICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBCdWcgVHJhY2tpbmcnLAorICAgICAgICAgICAgICBdLAorICAgICAgICAgICkKIAogSWYgeW91IHdpc2ggdG8gaW5jbHVkZSBjbGFzc2lmaWVycyBpbiB5b3VyIDpmaWxlOmBzZXR1cC5weWAgZmlsZSBhbmQgYWxzbyB3aXNoCiB0byByZW1haW4gYmFja3dhcmRzLWNvbXBhdGlibGUgd2l0aCBQeXRob24gcmVsZWFzZXMgcHJpb3IgdG8gMi4yLjMsIHRoZW4geW91IGNhbgogaW5jbHVkZSB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQgaW4geW91ciA6ZmlsZTpgc2V0dXAucHlgIGJlZm9yZSB0aGUKIDpmdW5jOmBzZXR1cGAgY2FsbC4gOjoKIAotICAgIyBwYXRjaCBkaXN0dXRpbHMgaWYgaXQgY2FuJ3QgY29wZSB3aXRoIHRoZSAiY2xhc3NpZmllcnMiIG9yCi0gICAjICJkb3dubG9hZF91cmwiIGtleXdvcmRzCi0gICBmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbgotICAgaWYgdmVyc2lvbiA8ICcyLjIuMyc6Ci0gICAgICAgZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uTWV0YWRhdGEKLSAgICAgICBEaXN0cmlidXRpb25NZXRhZGF0YS5jbGFzc2lmaWVycyA9IE5vbmUKLSAgICAgICBEaXN0cmlidXRpb25NZXRhZGF0YS5kb3dubG9hZF91cmwgPSBOb25lCisgICAgIyBwYXRjaCBkaXN0dXRpbHMgaWYgaXQgY2FuJ3QgY29wZSB3aXRoIHRoZSAiY2xhc3NpZmllcnMiIG9yCisgICAgIyAiZG93bmxvYWRfdXJsIiBrZXl3b3JkcworICAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uCisgICAgaWYgdmVyc2lvbiA8ICcyLjIuMyc6CisgICAgICAgIGZyb20gZGlzdHV0aWxzLmRpc3QgaW1wb3J0IERpc3RyaWJ1dGlvbk1ldGFkYXRhCisgICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmNsYXNzaWZpZXJzID0gTm9uZQorICAgICAgICBEaXN0cmlidXRpb25NZXRhZGF0YS5kb3dubG9hZF91cmwgPSBOb25lCiAKIAogRGVidWdnaW5nIHRoZSBzZXR1cCBzY3JpcHQKQEAgLTY3NCw1ICs3MDMsMyBAQAogdG8gYW55dGhpbmcgZXhjZXB0IGFuIGVtcHR5IHN0cmluZywgYW5kIGRpc3R1dGlscyB3aWxsIG5vdyBwcmludCBkZXRhaWxlZAogaW5mb3JtYXRpb24gd2hhdCBpdCBpcyBkb2luZywgYW5kIHByaW50cyB0aGUgZnVsbCB0cmFjZWJhY2sgaW4gY2FzZSBhbiBleGNlcHRpb24KIG9jY3Vycy4KLQotCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAppbmRleCA5ZmViZDEwLi5mYzg2MGRlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKQEAgLTI2LDE2ICsyNiwxNiBAQAogKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09KwogfCBgYHppcGBgICAgfCB6aXAgZmlsZSAoOmZpbGU6YC56aXBgKSB8ICgxKSwoMykgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYGd6dGFyYGAgfCBnemlwJ2VkIHRhciBmaWxlICAgICAgICB8ICgyKSwoNCkgfAorfCBgYGd6dGFyYGAgfCBnemlwJ2VkIHRhciBmaWxlICAgICAgICB8IFwoMikgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuZ3pgKSAgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYGJ6dGFyYGAgfCBiemlwMidlZCB0YXIgZmlsZSAgICAgICB8IFwoNCkgICAgfAorfCBgYGJ6dGFyYGAgfCBiemlwMidlZCB0YXIgZmlsZSAgICAgICB8ICAgICAgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuYnoyYCkgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHp0YXJgYCAgfCBjb21wcmVzc2VkIHRhciBmaWxlICAgICB8IFwoNCkgICAgfAogfCAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuWmApICAgICAgICB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYHRhcmBgICAgfCB0YXIgZmlsZSAoOmZpbGU6YC50YXJgKSB8IFwoNCkgICAgfAorfCBgYHRhcmBgICAgfCB0YXIgZmlsZSAoOmZpbGU6YC50YXJgKSB8ICAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogCiBOb3RlczoKQEAgLTUxLDggKzUxLDE2IEBACiAgICBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIGxpYnJhcnkgc2luY2UgUHl0aG9uIDEuNikKIAogKDQpCi0gICByZXF1aXJlcyBleHRlcm5hbCB1dGlsaXRpZXM6IDpwcm9ncmFtOmB0YXJgIGFuZCBwb3NzaWJseSBvbmUgb2YgOnByb2dyYW06YGd6aXBgLAotICAgOnByb2dyYW06YGJ6aXAyYCwgb3IgOnByb2dyYW06YGNvbXByZXNzYAorICAgcmVxdWlyZXMgdGhlIDpwcm9ncmFtOmBjb21wcmVzc2AgcHJvZ3JhbS4gTm90aWNlIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm93CisgICBwZW5kaW5nIGZvciBkZXByZWNhdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLgorCitXaGVuIHVzaW5nIGFueSBgYHRhcmBgIGZvcm1hdCAoYGBnenRhcmBgLCBgYGJ6dGFyYGAsIGBgenRhcmBgIG9yCitgYHRhcmBgKSB1bmRlciBVbml4LCB5b3UgY2FuIHNwZWNpZnkgdGhlIGBgb3duZXJgYCBhbmQgYGBncm91cGBgIG5hbWVzCit0aGF0IHdpbGwgYmUgc2V0IGZvciBlYWNoIG1lbWJlciBvZiB0aGUgYXJjaGl2ZS4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IGFsbCBmaWxlcyBvZiB0aGUgYXJjaGl2ZSB0byBiZSBvd25lZCBieSByb290OjoKKworICAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCAtLW93bmVyPXJvb3QgLS1ncm91cD1yb290CiAKIAogLi4gX21hbmlmZXN0OgpAQCAtNzQsNiArODIsNyBAQAogICAgICA6bWV0aDpgZ2V0X3NvdXJjZV9maWxlc2AgbWV0aG9kIGluIDpmaWxlOmBidWlsZF9jbGliLnB5YCEKIAogKiBzY3JpcHRzIGlkZW50aWZpZWQgYnkgdGhlIDpvcHRpb246YHNjcmlwdHNgIG9wdGlvbgorICBTZWUgOnJlZjpgZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0c2AuCiAKICogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgdGVzdCBzY3JpcHQ6IDpmaWxlOmB0ZXN0L3Rlc3RcKi5weWAgKGN1cnJlbnRseSwgdGhlCiAgIERpc3R1dGlscyBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHRlc3Qgc2NyaXB0cyBleGNlcHQgaW5jbHVkZSB0aGVtIGluIHNvdXJjZQpAQCAtODMsNiArOTIsMTIgQEAKICogOmZpbGU6YFJFQURNRS50eHRgIChvciA6ZmlsZTpgUkVBRE1FYCksIDpmaWxlOmBzZXR1cC5weWAgKG9yIHdoYXRldmVyICB5b3UKICAgY2FsbGVkIHlvdXIgc2V0dXAgc2NyaXB0KSwgYW5kIDpmaWxlOmBzZXR1cC5jZmdgCiAKKyogYWxsIGZpbGVzIHRoYXQgbWF0Y2hlcyB0aGUgYGBwYWNrYWdlX2RhdGFgYCBtZXRhZGF0YS4KKyAgU2VlIDpyZWY6YGRpc3R1dGlscy1pbnN0YWxsaW5nLXBhY2thZ2UtZGF0YWAuCisKKyogYWxsIGZpbGVzIHRoYXQgbWF0Y2hlcyB0aGUgYGBkYXRhX2ZpbGVzYGAgbWV0YWRhdGEuCisgIFNlZSA6cmVmOmBkaXN0dXRpbHMtYWRkaXRpb25hbC1maWxlc2AuCisKIFNvbWV0aW1lcyB0aGlzIGlzIGVub3VnaCwgYnV0IHVzdWFsbHkgeW91IHdpbGwgd2FudCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgZmlsZXMKIHRvIGRpc3RyaWJ1dGUuICBUaGUgdHlwaWNhbCB3YXkgdG8gZG8gdGhpcyBpcyB0byB3cml0ZSBhICptYW5pZmVzdCB0ZW1wbGF0ZSosCiBjYWxsZWQgOmZpbGU6YE1BTklGRVNULmluYCBieSBkZWZhdWx0LiAgVGhlIG1hbmlmZXN0IHRlbXBsYXRlIGlzIGp1c3QgYSBsaXN0IG9mCkBAIC05Niw5ICsxMTEsNjQgQEAKIDpmaWxlOmBNQU5JRkVTVGAsIHlvdSBtdXN0IHNwZWNpZnkgZXZlcnl0aGluZzogdGhlIGRlZmF1bHQgc2V0IG9mIGZpbGVzCiBkZXNjcmliZWQgYWJvdmUgZG9lcyBub3QgYXBwbHkgaW4gdGhpcyBjYXNlLgogCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgIDpmaWxlOmBNQU5JRkVTVGAgZmlsZXMgc3RhcnQgd2l0aCBhIGNvbW1lbnQgaW5kaWNhdGluZyB0aGV5IGFyZSBnZW5lcmF0ZWQuCisgICBGaWxlcyB3aXRob3V0IHRoaXMgY29tbWVudCBhcmUgbm90IG92ZXJ3cml0dGVuIG9yIHJlbW92ZWQuCisKK1NlZSA6cmVmOmBtYW5pZmVzdF90ZW1wbGF0ZWAgc2VjdGlvbiBmb3IgYSBzeW50YXggcmVmZXJlbmNlLgorCisuLiBfbWFuaWZlc3Qtb3B0aW9uczoKKworTWFuaWZlc3QtcmVsYXRlZCBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG5vcm1hbCBjb3Vyc2Ugb2Ygb3BlcmF0aW9ucyBmb3IgdGhlIDpjb21tYW5kOmBzZGlzdGAgY29tbWFuZCBpcyBhcyBmb2xsb3dzOgorCisqIGlmIHRoZSBtYW5pZmVzdCBmaWxlLCA6ZmlsZTpgTUFOSUZFU1RgIGRvZXNuJ3QgZXhpc3QsIHJlYWQgOmZpbGU6YE1BTklGRVNULmluYAorICBhbmQgY3JlYXRlIHRoZSBtYW5pZmVzdAorCisqIGlmIG5laXRoZXIgOmZpbGU6YE1BTklGRVNUYCBub3IgOmZpbGU6YE1BTklGRVNULmluYCBleGlzdCwgY3JlYXRlIGEgbWFuaWZlc3QKKyAgd2l0aCBqdXN0IHRoZSBkZWZhdWx0IGZpbGUgc2V0CisKKyogaWYgZWl0aGVyIDpmaWxlOmBNQU5JRkVTVC5pbmAgb3IgdGhlIHNldHVwIHNjcmlwdCAoOmZpbGU6YHNldHVwLnB5YCkgYXJlIG1vcmUKKyAgcmVjZW50IHRoYW4gOmZpbGU6YE1BTklGRVNUYCwgcmVjcmVhdGUgOmZpbGU6YE1BTklGRVNUYCBieSByZWFkaW5nCisgIDpmaWxlOmBNQU5JRkVTVC5pbmAKKworKiB1c2UgdGhlIGxpc3Qgb2YgZmlsZXMgbm93IGluIDpmaWxlOmBNQU5JRkVTVGAgKGVpdGhlciBqdXN0IGdlbmVyYXRlZCBvciByZWFkCisgIGluKSB0byBjcmVhdGUgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYXJjaGl2ZShzKQorCitUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3B0aW9ucyB0aGF0IG1vZGlmeSB0aGlzIGJlaGF2aW91ci4gIEZpcnN0LCB1c2UgdGhlCis6b3B0aW9uOmAtLW5vLWRlZmF1bHRzYCBhbmQgOm9wdGlvbjpgLS1uby1wcnVuZWAgdG8gZGlzYWJsZSB0aGUgc3RhbmRhcmQKKyJpbmNsdWRlIiBhbmQgImV4Y2x1ZGUiIHNldHMuCisKK1NlY29uZCwgeW91IG1pZ2h0IGp1c3Qgd2FudCB0byAocmUpZ2VuZXJhdGUgdGhlIG1hbmlmZXN0LCBidXQgbm90IGNyZWF0ZSBhCitzb3VyY2UgZGlzdHJpYnV0aW9uOjoKKworICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IC0tbWFuaWZlc3Qtb25seQorCis6b3B0aW9uOmAtb2AgaXMgYSBzaG9ydGN1dCBmb3IgOm9wdGlvbjpgLS1tYW5pZmVzdC1vbmx5YC4KKworLi4gX21hbmlmZXN0X3RlbXBsYXRlOgorCitUaGUgTUFOSUZFU1QuaW4gdGVtcGxhdGUKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitBIDpmaWxlOmBNQU5JRkVTVC5pbmAgZmlsZSBjYW4gYmUgYWRkZWQgaW4gYSBwcm9qZWN0IHRvIGRlZmluZSB0aGUgbGlzdCBvZgorZmlsZXMgdG8gaW5jbHVkZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGJ1aWx0IGJ5IHRoZSA6Y29tbWFuZDpgc2Rpc3RgIGNvbW1hbmQuCisKK1doZW4gOmNvbW1hbmQ6YHNkaXN0YCBpcyBydW4sIGl0IHdpbGwgbG9vayBmb3IgdGhlIDpmaWxlOmBNQU5JRkVTVC5pbmAgZmlsZQorYW5kIGludGVycHJldCBpdCB0byBnZW5lcmF0ZSB0aGUgOmZpbGU6YE1BTklGRVNUYCBmaWxlIHRoYXQgY29udGFpbnMgdGhlCitsaXN0IG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZS4KKworVGhpcyBtZWNoYW5pc20gY2FuIGJlIHVzZWQgd2hlbiB0aGUgZGVmYXVsdCBsaXN0IG9mIGZpbGVzIGlzIG5vdCBlbm91Z2guCisoU2VlIDpyZWY6YG1hbmlmZXN0YCkuCisKK1ByaW5jaXBsZQorLS0tLS0tLS0tCisKIFRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSBoYXMgb25lIGNvbW1hbmQgcGVyIGxpbmUsIHdoZXJlIGVhY2ggY29tbWFuZCBzcGVjaWZpZXMgYQogc2V0IG9mIGZpbGVzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBmcm9tIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgRm9yIGFuCi1leGFtcGxlLCBhZ2FpbiB3ZSB0dXJuIHRvIHRoZSBEaXN0dXRpbHMnIG93biBtYW5pZmVzdCB0ZW1wbGF0ZTo6CitleGFtcGxlLCBsZXQncyBsb29rIGF0IHRoZSBEaXN0dXRpbHMnIG93biBtYW5pZmVzdCB0ZW1wbGF0ZTo6CiAKICAgIGluY2x1ZGUgKi50eHQKICAgIHJlY3Vyc2l2ZS1pbmNsdWRlIGV4YW1wbGVzICoudHh0ICoucHkKQEAgLTExMCw5ICsxODAsNyBAQAogOmZpbGU6YGV4YW1wbGVzL3NhbXBsZT8vYnVpbGRgLiAgQWxsIG9mIHRoaXMgaXMgZG9uZSAqYWZ0ZXIqIHRoZSBzdGFuZGFyZAogaW5jbHVkZSBzZXQsIHNvIHlvdSBjYW4gZXhjbHVkZSBmaWxlcyBmcm9tIHRoZSBzdGFuZGFyZCBzZXQgd2l0aCBleHBsaWNpdAogaW5zdHJ1Y3Rpb25zIGluIHRoZSBtYW5pZmVzdCB0ZW1wbGF0ZS4gIChPciwgeW91IGNhbiB1c2UgdGhlCi06b3B0aW9uOmAtLW5vLWRlZmF1bHRzYCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgc3RhbmRhcmQgc2V0IGVudGlyZWx5LikgIFRoZXJlIGFyZQotc2V2ZXJhbCBvdGhlciBjb21tYW5kcyBhdmFpbGFibGUgaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlIG1pbmktbGFuZ3VhZ2U7IHNlZQotc2VjdGlvbiA6cmVmOmBzZGlzdC1jbWRgLgorOm9wdGlvbjpgLS1uby1kZWZhdWx0c2Agb3B0aW9uIHRvIGRpc2FibGUgdGhlIHN0YW5kYXJkIHNldCBlbnRpcmVseS4pCiAKIFRoZSBvcmRlciBvZiBjb21tYW5kcyBpbiB0aGUgbWFuaWZlc3QgdGVtcGxhdGUgbWF0dGVyczogaW5pdGlhbGx5LCB3ZSBoYXZlIHRoZQogbGlzdCBvZiBkZWZhdWx0IGZpbGVzIGFzIGRlc2NyaWJlZCBhYm92ZSwgYW5kIGVhY2ggY29tbWFuZCBpbiB0aGUgdGVtcGxhdGUgYWRkcwpAQCAtMTY2LDM2ICsyMzQsNDUgQEAKIHRoZW0gdG8gdGhlIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uIG9uIHlvdXIgcGxhdGZvcm0uIFRoYXQgd2F5LCB0aGUgbWFuaWZlc3QKIHRlbXBsYXRlIGlzIHBvcnRhYmxlIGFjcm9zcyBvcGVyYXRpbmcgc3lzdGVtcy4KIAorQ29tbWFuZHMKKy0tLS0tLS0tCiAKLS4uIF9tYW5pZmVzdC1vcHRpb25zOgorVGhlIG1hbmlmZXN0IHRlbXBsYXRlIGNvbW1hbmRzIGFyZToKIAotTWFuaWZlc3QtcmVsYXRlZCBvcHRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgOmNvbW1hbmQ6YGluY2x1ZGUgcGF0MSBwYXQyIC4uLmAgICAgICAgICAgfCBpbmNsdWRlIGFsbCBmaWxlcyBtYXRjaGluZyBhbnkgb2YgdGhlIGxpc3RlZCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBhdHRlcm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YGV4Y2x1ZGUgcGF0MSBwYXQyIC4uLmAgICAgICAgICAgfCBleGNsdWRlIGFsbCBmaWxlcyBtYXRjaGluZyBhbnkgb2YgdGhlIGxpc3RlZCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBhdHRlcm5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YHJlY3Vyc2l2ZS1pbmNsdWRlIGRpciBwYXQxIHBhdDIgfCBpbmNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiBtYXRjaGluZyBhbnkgb2YgfAorfCAuLi5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YHJlY3Vyc2l2ZS1leGNsdWRlIGRpciBwYXQxIHBhdDIgfCBleGNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiBtYXRjaGluZyBhbnkgb2YgfAorfCAuLi5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBsaXN0ZWQgcGF0dGVybnMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YGdsb2JhbC1pbmNsdWRlIHBhdDEgcGF0MiAuLi5gICAgfCBpbmNsdWRlIGFsbCBmaWxlcyBhbnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1hdGNoaW5nIC0tLSAmIGFueSBvZiB0aGUgbGlzdGVkIHBhdHRlcm5zICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YGdsb2JhbC1leGNsdWRlIHBhdDEgcGF0MiAuLi5gICAgfCBleGNsdWRlIGFsbCBmaWxlcyBhbnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1hdGNoaW5nIC0tLSAmIGFueSBvZiB0aGUgbGlzdGVkIHBhdHRlcm5zICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YHBydW5lIGRpcmAgICAgICAgICAgICAgICAgICAgICAgfCBleGNsdWRlIGFsbCBmaWxlcyB1bmRlciAqZGlyKiAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjb21tYW5kOmBncmFmdCBkaXJgICAgICAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZSBhbGwgZmlsZXMgdW5kZXIgKmRpciogICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgbm9ybWFsIGNvdXJzZSBvZiBvcGVyYXRpb25zIGZvciB0aGUgOmNvbW1hbmQ6YHNkaXN0YCBjb21tYW5kIGlzIGFzIGZvbGxvd3M6CitUaGUgcGF0dGVybnMgaGVyZSBhcmUgVW5peC1zdHlsZSAiZ2xvYiIgcGF0dGVybnM6IGBgKmBgIG1hdGNoZXMgYW55IHNlcXVlbmNlIG9mCityZWd1bGFyIGZpbGVuYW1lIGNoYXJhY3RlcnMsIGBgP2BgIG1hdGNoZXMgYW55IHNpbmdsZSByZWd1bGFyIGZpbGVuYW1lCitjaGFyYWN0ZXIsIGFuZCBgYFtyYW5nZV1gYCBtYXRjaGVzIGFueSBvZiB0aGUgY2hhcmFjdGVycyBpbiAqcmFuZ2UqIChlLmcuLAorYGBhLXpgYCwgYGBhLXpBLVpgYCwgYGBhLWYwLTlfLmBgKS4gIFRoZSBkZWZpbml0aW9uIG9mICJyZWd1bGFyIGZpbGVuYW1lCitjaGFyYWN0ZXIiIGlzIHBsYXRmb3JtLXNwZWNpZmljOiBvbiBVbml4IGl0IGlzIGFueXRoaW5nIGV4Y2VwdCBzbGFzaDsgb24gV2luZG93cworYW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBvciBjb2xvbi4KIAotKiBpZiB0aGUgbWFuaWZlc3QgZmlsZSwgOmZpbGU6YE1BTklGRVNUYCBkb2Vzbid0IGV4aXN0LCByZWFkIDpmaWxlOmBNQU5JRkVTVC5pbmAKLSAgYW5kIGNyZWF0ZSB0aGUgbWFuaWZlc3QKLQotKiBpZiBuZWl0aGVyIDpmaWxlOmBNQU5JRkVTVGAgbm9yIDpmaWxlOmBNQU5JRkVTVC5pbmAgZXhpc3QsIGNyZWF0ZSBhIG1hbmlmZXN0Ci0gIHdpdGgganVzdCB0aGUgZGVmYXVsdCBmaWxlIHNldAotCi0qIGlmIGVpdGhlciA6ZmlsZTpgTUFOSUZFU1QuaW5gIG9yIHRoZSBzZXR1cCBzY3JpcHQgKDpmaWxlOmBzZXR1cC5weWApIGFyZSBtb3JlCi0gIHJlY2VudCB0aGFuIDpmaWxlOmBNQU5JRkVTVGAsIHJlY3JlYXRlIDpmaWxlOmBNQU5JRkVTVGAgYnkgcmVhZGluZwotICA6ZmlsZTpgTUFOSUZFU1QuaW5gCi0KLSogdXNlIHRoZSBsaXN0IG9mIGZpbGVzIG5vdyBpbiA6ZmlsZTpgTUFOSUZFU1RgIChlaXRoZXIganVzdCBnZW5lcmF0ZWQgb3IgcmVhZAotICBpbikgdG8gY3JlYXRlIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFyY2hpdmUocykKLQotVGhlcmUgYXJlIGEgY291cGxlIG9mIG9wdGlvbnMgdGhhdCBtb2RpZnkgdGhpcyBiZWhhdmlvdXIuICBGaXJzdCwgdXNlIHRoZQotOm9wdGlvbjpgLS1uby1kZWZhdWx0c2AgYW5kIDpvcHRpb246YC0tbm8tcHJ1bmVgIHRvIGRpc2FibGUgdGhlIHN0YW5kYXJkCi0iaW5jbHVkZSIgYW5kICJleGNsdWRlIiBzZXRzLgotCi1TZWNvbmQsIHlvdSBtaWdodCBqdXN0IHdhbnQgdG8gKHJlKWdlbmVyYXRlIHRoZSBtYW5pZmVzdCwgYnV0IG5vdCBjcmVhdGUgYSBzb3VyY2UKLWRpc3RyaWJ1dGlvbjo6Ci0KLSAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCAtLW1hbmlmZXN0LW9ubHkKLQotOm9wdGlvbjpgLW9gIGlzIGEgc2hvcnRjdXQgZm9yIDpvcHRpb246YC0tbWFuaWZlc3Qtb25seWAuCi0KLQorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICBBbiBleGlzdGluZyBnZW5lcmF0ZWQgOmZpbGU6YE1BTklGRVNUYCB3aWxsIGJlIHJlZ2VuZXJhdGVkIHdpdGhvdXQKKyAgICA6Y29tbWFuZDpgc2Rpc3RgIGNvbXBhcmluZyBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgdG8gdGhlIG9uZSBvZgorICAgIDpmaWxlOmBNQU5JRkVTVC5pbmAgb3IgOmZpbGU6YHNldHVwLnB5YC4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvdXBsb2FkaW5nLnJzdCBiL0RvYy9kaXN0dXRpbHMvdXBsb2FkaW5nLnJzdAppbmRleCA2NmY3MTJiLi45MzY0MDJiIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3VwbG9hZGluZy5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy91cGxvYWRpbmcucnN0CkBAIC0xMyw3ICsxMyw3IEBACiBUaGUgY29tbWFuZCBpcyBpbnZva2VkIGltbWVkaWF0ZWx5IGFmdGVyIGJ1aWxkaW5nIG9uZSBvciBtb3JlIGRpc3RyaWJ1dGlvbgogZmlsZXMuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgOjoKIAotICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IGJkaXN0X3dpbmluc3QgdXBsb2FkCisgICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IGJkaXN0X3dpbmluc3QgdXBsb2FkCiAKIHdpbGwgY2F1c2UgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYW5kIHRoZSBXaW5kb3dzIGluc3RhbGxlciB0byBiZSB1cGxvYWRlZCB0bwogUHlQSS4gIE5vdGUgdGhhdCB0aGVzZSB3aWxsIGJlIHVwbG9hZGVkIGV2ZW4gaWYgdGhleSBhcmUgYnVpbHQgdXNpbmcgYW4gZWFybGllcgpAQCAtMjIsMTEgKzIyLDE0IEBACiAKIFRoZSA6Y29tbWFuZDpgdXBsb2FkYCBjb21tYW5kIHVzZXMgdGhlIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHJlcG9zaXRvcnkgVVJMCiBmcm9tIHRoZSA6ZmlsZTpgJEhPTUUvLnB5cGlyY2AgZmlsZSAoc2VlIHNlY3Rpb24gOnJlZjpgcHlwaXJjYCBmb3IgbW9yZSBvbiB0aGlzCi1maWxlKS4KK2ZpbGUpLiBJZiBhIDpjb21tYW5kOmByZWdpc3RlcmAgY29tbWFuZCB3YXMgcHJldmlvdXNseSBjYWxsZWQgaW4gdGhlIHNhbWUgY29tbWFuZCwKK2FuZCBpZiB0aGUgcGFzc3dvcmQgd2FzIGVudGVyZWQgaW4gdGhlIHByb21wdCwgOmNvbW1hbmQ6YHVwbG9hZGAgd2lsbCByZXVzZSB0aGUKK2VudGVyZWQgcGFzc3dvcmQuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzdG9yZSBhIGNsZWFyIHRleHQKK3Bhc3N3b3JkIGluIHRoZSA6ZmlsZTpgJEhPTUUvLnB5cGlyY2AgZmlsZS4KIAogWW91IGNhbiBzcGVjaWZ5IGFub3RoZXIgUHlQSSBzZXJ2ZXIgd2l0aCB0aGUgOm9wdGlvbjpgLS1yZXBvc2l0b3J5PSp1cmwqYCBvcHRpb246OgogCi0gICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQgLXIgaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQgLXIgaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKIAogU2VlIHNlY3Rpb24gOnJlZjpgcHlwaXJjYCBmb3IgbW9yZSBvbiBkZWZpbmluZyBzZXZlcmFsIHNlcnZlcnMuCiAKQEAgLTQxLDMgKzQ0LDM0IEBACiA6b3B0aW9uOmAtLXNob3ctcmVzcG9uc2VgICh3aGljaCBkaXNwbGF5cyB0aGUgZnVsbCByZXNwb25zZSB0ZXh0IGZyb20gdGhlIFB5UEkKIHNlcnZlciBmb3IgaGVscCBpbiBkZWJ1Z2dpbmcgdXBsb2FkIHByb2JsZW1zKS4KIAorUHlQSSBwYWNrYWdlIGRpc3BsYXkKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCBmaWVsZCBwbGF5cyBhIHNwZWNpYWwgcm9sZSBhdCBQeVBJLiBJdCBpcyB1c2VkIGJ5Cit0aGUgc2VydmVyIHRvIGRpc3BsYXkgYSBob21lIHBhZ2UgZm9yIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UuCisKK0lmIHlvdSB1c2UgdGhlIGByZVN0cnVjdHVyZWRUZXh0IDxodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sPmBfCitzeW50YXggZm9yIHRoaXMgZmllbGQsIFB5UEkgd2lsbCBwYXJzZSBpdCBhbmQgZGlzcGxheSBhbiBIVE1MIG91dHB1dCBmb3IKK3RoZSBwYWNrYWdlIGhvbWUgcGFnZS4KKworVGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIGZpZWxkIGNhbiBiZSBhdHRhY2hlZCB0byBhIHRleHQgZmlsZSBsb2NhdGVkCitpbiB0aGUgcGFja2FnZTo6CisKKyAgICBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAorCisgICAgd2l0aCBvcGVuKCdSRUFETUUudHh0JykgYXMgZmlsZToKKyAgICAgICAgbG9uZ19kZXNjcmlwdGlvbiA9IGZpbGUucmVhZCgpCisKKyAgICBzZXR1cChuYW1lPSdEaXN0dXRpbHMnLAorICAgICAgICAgIGxvbmdfZGVzY3JpcHRpb249bG9uZ19kZXNjcmlwdGlvbikKKworSW4gdGhhdCBjYXNlLCA6ZmlsZTpgUkVBRE1FLnR4dGAgaXMgYSByZWd1bGFyIHJlU3RydWN0dXJlZFRleHQgdGV4dCBmaWxlIGxvY2F0ZWQKK2luIHRoZSByb290IG9mIHRoZSBwYWNrYWdlIGJlc2lkZXMgOmZpbGU6YHNldHVwLnB5YC4KKworVG8gcHJldmVudCByZWdpc3RlcmluZyBicm9rZW4gcmVTdHJ1Y3R1cmVkVGV4dCBjb250ZW50LCB5b3UgY2FuIHVzZSB0aGUKKzpwcm9ncmFtOmByc3QyaHRtbGAgcHJvZ3JhbSB0aGF0IGlzIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmBkb2N1dGlsc2AgcGFja2FnZQorYW5kIGNoZWNrIHRoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCBmcm9tIHRoZSBjb21tYW5kIGxpbmU6OgorCisgICAgJCBweXRob24gc2V0dXAucHkgLS1sb25nLWRlc2NyaXB0aW9uIHwgcnN0Mmh0bWwucHkgPiBvdXRwdXQuaHRtbAorCis6bW9kOmBkb2N1dGlsc2Agd2lsbCBkaXNwbGF5IGEgd2FybmluZyBpZiB0aGVyZSdzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHlvdXIgc3ludGF4LgpkaWZmIC0tZ2l0IGEvRG9jL2RvY3VtZW50aW5nL21hcmt1cC5yc3QgYi9Eb2MvZG9jdW1lbnRpbmcvbWFya3VwLnJzdAppbmRleCBjNmY1Yjc0Li5kN2QyM2NkIDEwMDY0NAotLS0gYS9Eb2MvZG9jdW1lbnRpbmcvbWFya3VwLnJzdAorKysgYi9Eb2MvZG9jdW1lbnRpbmcvbWFya3VwLnJzdApAQCAtNTI0LDEwICs1MjQsNiBAQAogICAgSWYgeW91IGRvbid0IG5lZWQgdGhlICJ2YXJpYWJsZSBwYXJ0IiBpbmRpY2F0aW9uLCB1c2UgdGhlIHN0YW5kYXJkCiAgICBgYGBgY29kZWBgYGAgaW5zdGVhZC4KIAotLi4gZGVzY3JpYmU6OiB2YXIKLQotICAgQSBQeXRob24gb3IgQyB2YXJpYWJsZSBvciBwYXJhbWV0ZXIgbmFtZS4KLQogCiBUaGUgZm9sbG93aW5nIHJvbGVzIGdlbmVyYXRlIGV4dGVybmFsIGxpbmtzOgogCkBAIC02OTksMTAgKzY5NSwxMCBAQAogICAgICAgLi4gdG9jdHJlZTo6CiAgICAgICAgICA6bWF4ZGVwdGg6IDIKIAotICAgICAgICAgaW50cm8ucnN0Ci0gICAgICAgICBzdHJpbmdzLnJzdAotICAgICAgICAgZGF0YXR5cGVzLnJzdAotICAgICAgICAgbnVtZXJpYy5yc3QKKyAgICAgICAgIGludHJvCisgICAgICAgICBzdHJpbmdzCisgICAgICAgICBkYXRhdHlwZXMKKyAgICAgICAgIG51bWVyaWMKICAgICAgICAgIChtYW55IG1vcmUgZmlsZXMgbGlzdGVkIGhlcmUpCiAKICAgIFRoaXMgYWNjb21wbGlzaGVzIHR3byB0aGluZ3M6CkBAIC03MTAsOCArNzA2LDggQEAKICAgICogVGFibGVzIG9mIGNvbnRlbnRzIGZyb20gYWxsIHRob3NlIGZpbGVzIGFyZSBpbnNlcnRlZCwgd2l0aCBhIG1heGltdW0gZGVwdGgKICAgICAgb2YgdHdvLCB0aGF0IG1lYW5zIG9uZSBuZXN0ZWQgaGVhZGluZy4gIGBgdG9jdHJlZWBgIGRpcmVjdGl2ZXMgaW4gdGhvc2UKICAgICAgZmlsZXMgYXJlIGFsc28gdGFrZW4gaW50byBhY2NvdW50LgotICAgKiBTcGhpbngga25vd3MgdGhhdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGhlIGZpbGVzIGBgaW50cm8ucnN0YGAsCi0gICAgIGBgc3RyaW5ncy5yc3RgYCBhbmQgc28gZm9ydGgsIGFuZCBpdCBrbm93cyB0aGF0IHRoZXkgYXJlIGNoaWxkcmVuIG9mIHRoZQorICAgKiBTcGhpbngga25vd3MgdGhhdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGhlIGZpbGVzIGBgaW50cm9gYCwKKyAgICAgYGBzdHJpbmdzYGAgYW5kIHNvIGZvcnRoLCBhbmQgaXQga25vd3MgdGhhdCB0aGV5IGFyZSBjaGlsZHJlbiBvZiB0aGUKICAgICAgc2hvd24gZmlsZSwgdGhlIGxpYnJhcnkgaW5kZXguICBGcm9tIHRoaXMgaW5mb3JtYXRpb24gaXQgZ2VuZXJhdGVzICJuZXh0CiAgICAgIGNoYXB0ZXIiLCAicHJldmlvdXMgY2hhcHRlciIgYW5kICJwYXJlbnQgY2hhcHRlciIgbGlua3MuCiAKZGlmZiAtLWdpdCBhL0RvYy9kb2N1bWVudGluZy9zdHlsZS5yc3QgYi9Eb2MvZG9jdW1lbnRpbmcvc3R5bGUucnN0CmluZGV4IDYxNDU1NTkuLmMzZGRlZDkgMTAwNjQ0Ci0tLSBhL0RvYy9kb2N1bWVudGluZy9zdHlsZS5yc3QKKysrIGIvRG9jL2RvY3VtZW50aW5nL3N0eWxlLnJzdApAQCAtNyw3ICs3LDcgQEAKIHdoZXJldmVyIHBvc3NpYmxlLiBUaGlzIHBhcnRpY3VsYXIgc3R5bGUgZ3VpZGUgd2FzIHNlbGVjdGVkIG1vc3RseSBiZWNhdXNlIGl0CiBzZWVtcyByZWFzb25hYmxlIGFuZCBpcyBlYXN5IHRvIGdldCBvbmxpbmUuCiAKLVRvcGljcyB3aGljaCBhcmUgbm90IGNvdmVyZWQgaW4gdGhlIEFwcGxlJ3Mgc3R5bGUgZ3VpZGUgd2lsbCBiZSBkaXNjdXNzZWQgaW4KK1RvcGljcyB3aGljaCBhcmUgbm90IGNvdmVyZWQgaW4gQXBwbGUncyBzdHlsZSBndWlkZSB3aWxsIGJlIGRpc2N1c3NlZCBpbgogdGhpcyBkb2N1bWVudC4KIAogQWxsIHJlU1QgZmlsZXMgdXNlIGFuIGluZGVudGF0aW9uIG9mIDMgc3BhY2VzLiAgVGhlIG1heGltdW0gbGluZSBsZW5ndGggaXMgODAKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAppbmRleCA1ODg1MzRhLi5hZDZhOWYzIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CkBAIC04OSwxMCArODksOCBAQAogZnVuY3Rpb24uICBUaGUgQyBmdW5jdGlvbiBhbHdheXMgaGFzIHR3byBhcmd1bWVudHMsIGNvbnZlbnRpb25hbGx5IG5hbWVkICpzZWxmKgogYW5kICphcmdzKi4KIAotVGhlICpzZWxmKiBhcmd1bWVudCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgQyBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgYnVpbHQtaW4KLW1ldGhvZCwgbm90IGEgZnVuY3Rpb24uIEluIHRoZSBleGFtcGxlLCAqc2VsZiogd2lsbCBhbHdheXMgYmUgYSAqTlVMTCogcG9pbnRlciwKLXNpbmNlIHdlIGFyZSBkZWZpbmluZyBhIGZ1bmN0aW9uLCBub3QgYSBtZXRob2QuICAoVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlCi1pbnRlcnByZXRlciBkb2Vzbid0IGhhdmUgdG8gdW5kZXJzdGFuZCB0d28gZGlmZmVyZW50IHR5cGVzIG9mIEMgZnVuY3Rpb25zLikKK1RoZSAqc2VsZiogYXJndW1lbnQgcG9pbnRzIHRvIHRoZSBtb2R1bGUgb2JqZWN0IGZvciBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zOworZm9yIGEgbWV0aG9kIGl0IHdvdWxkIHBvaW50IHRvIHRoZSBvYmplY3QgaW5zdGFuY2UuCiAKIFRoZSAqYXJncyogYXJndW1lbnQgd2lsbCBiZSBhIHBvaW50ZXIgdG8gYSBQeXRob24gdHVwbGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiBhcmd1bWVudHMuICBFYWNoIGl0ZW0gb2YgdGhlIHR1cGxlIGNvcnJlc3BvbmRzIHRvIGFuIGFyZ3VtZW50IGluIHRoZSBjYWxsJ3MKQEAgLTM5MSwxMiArMzg5LDcgQEAKIAogQSBtb3JlIHN1YnN0YW50aWFsIGV4YW1wbGUgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbgogYXMgOmZpbGU6YE1vZHVsZXMveHhtb2R1bGUuY2AuICBUaGlzIGZpbGUgbWF5IGJlIHVzZWQgYXMgYSAgdGVtcGxhdGUgb3Igc2ltcGx5Ci1yZWFkIGFzIGFuIGV4YW1wbGUuICBUaGUgOnByb2dyYW06YG1vZHVsYXRvci5weWAgc2NyaXB0IGluY2x1ZGVkIGluIHRoZSBzb3VyY2UKLWRpc3RyaWJ1dGlvbiBvciBXaW5kb3dzIGluc3RhbGwgcHJvdmlkZXMgIGEgc2ltcGxlIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IKLWRlY2xhcmluZyB0aGUgZnVuY3Rpb25zIGFuZCBvYmplY3RzIHdoaWNoIGEgbW9kdWxlIHNob3VsZCBpbXBsZW1lbnQsIGFuZCBjYW4KLWdlbmVyYXRlIGEgdGVtcGxhdGUgd2hpY2ggY2FuIGJlIGZpbGxlZCBpbi4gIFRoZSBzY3JpcHQgbGl2ZXMgaW4gdGhlCi06ZmlsZTpgVG9vbHMvbW9kdWxhdG9yL2AgZGlyZWN0b3J5OyBzZWUgdGhlIDpmaWxlOmBSRUFETUVgIGZpbGUgdGhlcmUgZm9yIG1vcmUKLWluZm9ybWF0aW9uLgorcmVhZCBhcyBhbiBleGFtcGxlLgogCiAKIC4uIF9jb21waWxhdGlvbjoKQEAgLTEwODQsNyArMTA3Nyw3IEBACiBkZWZpbmUgdGhpcyBzeW1ib2wpLgogCiAKLS4uIF91c2luZy1jb2JqZWN0czoKKy4uIF91c2luZy1jYXBzdWxlczoKIAogUHJvdmlkaW5nIGEgQyBBUEkgZm9yIGFuIEV4dGVuc2lvbiBNb2R1bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTIwLDIzICsxMTEzLDQwIEBACiBvdGhlciBleHRlbnNpb24gbW9kdWxlcyBtdXN0IGJlIGV4cG9ydGVkIGluIGEgZGlmZmVyZW50IHdheS4KIAogUHl0aG9uIHByb3ZpZGVzIGEgc3BlY2lhbCBtZWNoYW5pc20gdG8gcGFzcyBDLWxldmVsIGluZm9ybWF0aW9uIChwb2ludGVycykgZnJvbQotb25lIGV4dGVuc2lvbiBtb2R1bGUgdG8gYW5vdGhlciBvbmU6IENPYmplY3RzLiBBIENPYmplY3QgaXMgYSBQeXRob24gZGF0YSB0eXBlCi13aGljaCBzdG9yZXMgYSBwb2ludGVyICg6Y3R5cGU6YHZvaWQgXCpgKS4gIENPYmplY3RzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYW5kCitvbmUgZXh0ZW5zaW9uIG1vZHVsZSB0byBhbm90aGVyIG9uZTogQ2Fwc3VsZXMuIEEgQ2Fwc3VsZSBpcyBhIFB5dGhvbiBkYXRhIHR5cGUKK3doaWNoIHN0b3JlcyBhIHBvaW50ZXIgKDpjdHlwZTpgdm9pZCBcKmApLiAgQ2Fwc3VsZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBhbmQKIGFjY2Vzc2VkIHZpYSB0aGVpciBDIEFQSSwgYnV0IHRoZXkgY2FuIGJlIHBhc3NlZCBhcm91bmQgbGlrZSBhbnkgb3RoZXIgUHl0aG9uCiBvYmplY3QuIEluIHBhcnRpY3VsYXIsICB0aGV5IGNhbiBiZSBhc3NpZ25lZCB0byBhIG5hbWUgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSdzCiBuYW1lc3BhY2UuIE90aGVyIGV4dGVuc2lvbiBtb2R1bGVzIGNhbiB0aGVuIGltcG9ydCB0aGlzIG1vZHVsZSwgcmV0cmlldmUgdGhlCi12YWx1ZSBvZiB0aGlzIG5hbWUsIGFuZCB0aGVuIHJldHJpZXZlIHRoZSBwb2ludGVyIGZyb20gdGhlIENPYmplY3QuCit2YWx1ZSBvZiB0aGlzIG5hbWUsIGFuZCB0aGVuIHJldHJpZXZlIHRoZSBwb2ludGVyIGZyb20gdGhlIENhcHN1bGUuCiAKLVRoZXJlIGFyZSBtYW55IHdheXMgaW4gd2hpY2ggQ09iamVjdHMgY2FuIGJlIHVzZWQgdG8gZXhwb3J0IHRoZSBDIEFQSSBvZiBhbgotZXh0ZW5zaW9uIG1vZHVsZS4gRWFjaCBuYW1lIGNvdWxkIGdldCBpdHMgb3duIENPYmplY3QsIG9yIGFsbCBDIEFQSSBwb2ludGVycwotY291bGQgYmUgc3RvcmVkIGluIGFuIGFycmF5IHdob3NlIGFkZHJlc3MgaXMgcHVibGlzaGVkIGluIGEgQ09iamVjdC4gQW5kIHRoZQorVGhlcmUgYXJlIG1hbnkgd2F5cyBpbiB3aGljaCBDYXBzdWxlcyBjYW4gYmUgdXNlZCB0byBleHBvcnQgdGhlIEMgQVBJIG9mIGFuCitleHRlbnNpb24gbW9kdWxlLiBFYWNoIGZ1bmN0aW9uIGNvdWxkIGdldCBpdHMgb3duIENhcHN1bGUsIG9yIGFsbCBDIEFQSSBwb2ludGVycworY291bGQgYmUgc3RvcmVkIGluIGFuIGFycmF5IHdob3NlIGFkZHJlc3MgaXMgcHVibGlzaGVkIGluIGEgQ2Fwc3VsZS4gQW5kIHRoZQogdmFyaW91cyB0YXNrcyBvZiBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIHRoZSBwb2ludGVycyBjYW4gYmUgZGlzdHJpYnV0ZWQgaW4KIGRpZmZlcmVudCB3YXlzIGJldHdlZW4gdGhlIG1vZHVsZSBwcm92aWRpbmcgdGhlIGNvZGUgYW5kIHRoZSBjbGllbnQgbW9kdWxlcy4KIAorV2hpY2hldmVyIG1ldGhvZCB5b3UgY2hvb3NlLCBpdCdzIGltcG9ydGFudCB0byBuYW1lIHlvdXIgQ2Fwc3VsZXMgcHJvcGVybHkuCitUaGUgZnVuY3Rpb24gOmNmdW5jOmBQeUNhcHN1bGVfTmV3YCB0YWtlcyBhIG5hbWUgcGFyYW1ldGVyCisoOmN0eXBlOmBjb25zdCBjaGFyIFwqYCk7IHlvdSdyZSBwZXJtaXR0ZWQgdG8gcGFzcyBpbiBhICpOVUxMKiBuYW1lLCBidXQKK3dlIHN0cm9uZ2x5IGVuY291cmFnZSB5b3UgdG8gc3BlY2lmeSBhIG5hbWUuICBQcm9wZXJseSBuYW1lZCBDYXBzdWxlcyBwcm92aWRlCithIGRlZ3JlZSBvZiBydW50aW1lIHR5cGUtc2FmZXR5OyB0aGVyZSBpcyBubyBmZWFzaWJsZSB3YXkgdG8gdGVsbCBvbmUgdW5uYW1lZAorQ2Fwc3VsZSBmcm9tIGFub3RoZXIuCisKK0luIHBhcnRpY3VsYXIsIENhcHN1bGVzIHVzZWQgdG8gZXhwb3NlIEMgQVBJcyBzaG91bGQgYmUgZ2l2ZW4gYSBuYW1lIGZvbGxvd2luZwordGhpcyBjb252ZW50aW9uOjoKKworICAgIG1vZHVsZW5hbWUuYXR0cmlidXRlbmFtZQorCitUaGUgY29udmVuaWVuY2UgZnVuY3Rpb24gOmNmdW5jOmBQeUNhcHN1bGVfSW1wb3J0YCBtYWtlcyBpdCBlYXN5IHRvCitsb2FkIGEgQyBBUEkgcHJvdmlkZWQgdmlhIGEgQ2Fwc3VsZSwgYnV0IG9ubHkgaWYgdGhlIENhcHN1bGUncyBuYW1lCittYXRjaGVzIHRoaXMgY29udmVudGlvbi4gIFRoaXMgYmVoYXZpb3IgZ2l2ZXMgQyBBUEkgdXNlcnMgYSBoaWdoIGRlZ3JlZQorb2YgY2VydGFpbnR5IHRoYXQgdGhlIENhcHN1bGUgdGhleSBsb2FkIGNvbnRhaW5zIHRoZSBjb3JyZWN0IEMgQVBJLgorCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIGFuIGFwcHJvYWNoIHRoYXQgcHV0cyBtb3N0IG9mIHRoZSBidXJkZW4gb24KIHRoZSB3cml0ZXIgb2YgdGhlIGV4cG9ydGluZyBtb2R1bGUsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIGZvciBjb21tb25seSB1c2VkCiBsaWJyYXJ5IG1vZHVsZXMuIEl0IHN0b3JlcyBhbGwgQyBBUEkgcG9pbnRlcnMgKGp1c3Qgb25lIGluIHRoZSBleGFtcGxlISkgaW4gYW4KLWFycmF5IG9mIDpjdHlwZTpgdm9pZGAgcG9pbnRlcnMgd2hpY2ggYmVjb21lcyB0aGUgdmFsdWUgb2YgYSBDT2JqZWN0LiBUaGUgaGVhZGVyCithcnJheSBvZiA6Y3R5cGU6YHZvaWRgIHBvaW50ZXJzIHdoaWNoIGJlY29tZXMgdGhlIHZhbHVlIG9mIGEgQ2Fwc3VsZS4gVGhlIGhlYWRlcgogZmlsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2R1bGUgcHJvdmlkZXMgYSBtYWNybyB0aGF0IHRha2VzIGNhcmUgb2YgaW1wb3J0aW5nCiB0aGUgbW9kdWxlIGFuZCByZXRyaWV2aW5nIGl0cyBDIEFQSSBwb2ludGVyczsgY2xpZW50IG1vZHVsZXMgb25seSBoYXZlIHRvIGNhbGwKIHRoaXMgbWFjcm8gYmVmb3JlIGFjY2Vzc2luZyB0aGUgQyBBUEkuCkBAIC0xMTk4LDggKzEyMDgsOCBAQAogICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEMgQVBJIHBvaW50ZXIgYXJyYXkgKi8KICAgICAgICBQeVNwYW1fQVBJW1B5U3BhbV9TeXN0ZW1fTlVNXSA9ICh2b2lkICopUHlTcGFtX1N5c3RlbTsKIAotICAgICAgIC8qIENyZWF0ZSBhIENPYmplY3QgY29udGFpbmluZyB0aGUgQVBJIHBvaW50ZXIgYXJyYXkncyBhZGRyZXNzICovCi0gICAgICAgY19hcGlfb2JqZWN0ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCh2b2lkICopUHlTcGFtX0FQSSwgTlVMTCk7CisgICAgICAgLyogQ3JlYXRlIGEgQ2Fwc3VsZSBjb250YWluaW5nIHRoZSBBUEkgcG9pbnRlciBhcnJheSdzIGFkZHJlc3MgKi8KKyAgICAgICBjX2FwaV9vYmplY3QgPSBQeUNhcHN1bGVfTmV3KCh2b2lkICopUHlTcGFtX0FQSSwgInNwYW0uX0NfQVBJIiwgTlVMTCk7CiAKICAgICAgICBpZiAoY19hcGlfb2JqZWN0ICE9IE5VTEwpCiAgICAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX0NfQVBJIiwgY19hcGlfb2JqZWN0KTsKQEAgLTEyNDEsMjggKzEyNTEsMTQgQEAKICAgICNkZWZpbmUgUHlTcGFtX1N5c3RlbSBcCiAgICAgKCooUHlTcGFtX1N5c3RlbV9SRVRVUk4gKCopUHlTcGFtX1N5c3RlbV9QUk9UTykgUHlTcGFtX0FQSVtQeVNwYW1fU3lzdGVtX05VTV0pCiAKLSAgIC8qIFJldHVybiAtMSBhbmQgc2V0IGV4Y2VwdGlvbiBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLiAqLworICAgLyogUmV0dXJuIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuCisgICAgKiBQeUNhcHN1bGVfSW1wb3J0IHdpbGwgc2V0IGFuIGV4Y2VwdGlvbiBpZiB0aGVyZSdzIGFuIGVycm9yLgorICAgICovCiAgICBzdGF0aWMgaW50CiAgICBpbXBvcnRfc3BhbSh2b2lkKQogICAgewotICAgICAgIFB5T2JqZWN0ICpjX2FwaV9vYmplY3Q7Ci0gICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLQotICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic3BhbSIpOwotICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgY19hcGlfb2JqZWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2R1bGUsICJfQ19BUEkiKTsKLSAgICAgICBpZiAoY19hcGlfb2JqZWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7Ci0gICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICB9Ci0gICAgICAgaWYgKFB5Q09iamVjdF9DaGVjayhjX2FwaV9vYmplY3QpKQotICAgICAgICAgICBQeVNwYW1fQVBJID0gKHZvaWQgKiopUHlDT2JqZWN0X0FzVm9pZFB0cihjX2FwaV9vYmplY3QpOwotCi0gICAgICAgUHlfREVDUkVGKGNfYXBpX29iamVjdCk7Ci0gICAgICAgUHlfREVDUkVGKG1vZHVsZSk7Ci0gICAgICAgcmV0dXJuIDA7CisgICAgICAgUHlTcGFtX0FQSSA9ICh2b2lkICoqKVB5Q2Fwc3VsZV9JbXBvcnQoInNwYW0uX0NfQVBJIiwgMCk7CisgICAgICAgcmV0dXJuIChQeVNwYW1fQVBJICE9IE5VTEwpID8gMCA6IC0xOwogICAgfQogCiAgICAjZW5kaWYKQEAgLTEyOTQsMTEgKzEyOTAsMTEgQEAKIHJhdGhlciBjb21wbGljYXRlZC4gSG93ZXZlciwgdGhlIGJhc2ljIHN0cnVjdHVyZSBpcyB0aGUgc2FtZSBmb3IgZWFjaCBmdW5jdGlvbgogdGhhdCBpcyBleHBvcnRlZCwgc28gaXQgaGFzIHRvIGJlIGxlYXJuZWQgb25seSBvbmNlLgogCi1GaW5hbGx5IGl0IHNob3VsZCBiZSBtZW50aW9uZWQgdGhhdCBDT2JqZWN0cyBvZmZlciBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHksCitGaW5hbGx5IGl0IHNob3VsZCBiZSBtZW50aW9uZWQgdGhhdCBDYXBzdWxlcyBvZmZlciBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHksCiB3aGljaCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiB0aGUgcG9pbnRlcgotc3RvcmVkIGluIGEgQ09iamVjdC4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uL0MgQVBJIFJlZmVyZW5jZQotTWFudWFsIGluIHRoZSBzZWN0aW9uIDpyZWY6YGNvYmplY3RzYCBhbmQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIENPYmplY3RzIChmaWxlcwotOmZpbGU6YEluY2x1ZGUvY29iamVjdC5oYCBhbmQgOmZpbGU6YE9iamVjdHMvY29iamVjdC5jYCBpbiB0aGUgUHl0aG9uIHNvdXJjZQorc3RvcmVkIGluIGEgQ2Fwc3VsZS4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uL0MgQVBJIFJlZmVyZW5jZQorTWFudWFsIGluIHRoZSBzZWN0aW9uIDpyZWY6YGNhcHN1bGVzYCBhbmQgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIENhcHN1bGVzIChmaWxlcworOmZpbGU6YEluY2x1ZGUvcHljYXBzdWxlLmhgIGFuZCA6ZmlsZTpgT2JqZWN0cy9weWNhcHN1bGUuY2AgaW4gdGhlIFB5dGhvbiBzb3VyY2UKIGNvZGUgZGlzdHJpYnV0aW9uKS4KIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0IGIvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdAppbmRleCBhYWMxZDJkLi5iZWIyZWU0IDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgTm93IHlvdXIgb3B0aW9ucyBhcmU6CiAKICMuIENvcHkgOmZpbGU6YGV4YW1wbGUuc2xuYCBhbmQgOmZpbGU6YGV4YW1wbGUudmNwcm9qYCwgcmVuYW1lIHRoZW0gdG8KLSAgICAgIDpmaWxlOmBzcGFtLlwqYCwgYW5kIGVkaXQgdGhlbSBieSBoYW5kLCBvcgorICAgOmZpbGU6YHNwYW0uXCpgLCBhbmQgZWRpdCB0aGVtIGJ5IGhhbmQsIG9yCiAKICMuIENyZWF0ZSBhIGJyYW5kIG5ldyBwcm9qZWN0OyBpbnN0cnVjdGlvbnMgYXJlIGJlbG93LgogCkBAIC0xNzUsMTYgKzE3NSwxNiBAQAogCiAgICBQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQogCi1DaGFuZ2UgaXQgdG86OgorU3RhdGljIHR5cGUgb2JqZWN0IGluaXRpYWxpemVycyBpbiBleHRlbnNpb24gbW9kdWxlcyBtYXkgY2F1c2UKK2NvbXBpbGVzIHRvIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGxpa2UgImluaXRpYWxpemVyIG5vdCBhCitjb25zdGFudCIuICBUaGlzIHNob3dzIHVwIHdoZW4gYnVpbGRpbmcgRExMIHVuZGVyIE1TVkMuICBDaGFuZ2UgaXQgdG86OgogCiAgICBQeU9iamVjdF9IRUFEX0lOSVQoTlVMTCkKIAogYW5kIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb246OgogCi0gICBNeU9iamVjdF9UeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7Ci0KLVJlZmVyIHRvIHNlY3Rpb24gMyBvZiB0aGUgYFB5dGhvbiBGQVEgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvZmFxPmBfIGZvcgotZGV0YWlscyBvbiB3aHkgeW91IG11c3QgZG8gdGhpcy4KKyAgIGlmIChQeVR5cGVfUmVhZHkoJk15T2JqZWN0X1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKIAogLi4gX2R5bmFtaWMtbGlua2luZzoKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZGVzaWduLnJzdCBiL0RvYy9mYXEvZGVzaWduLnJzdAppbmRleCAyZTJjZTJlLi4wOTQzNzk2IDEwMDY0NAotLS0gYS9Eb2MvZmFxL2Rlc2lnbi5yc3QKKysrIGIvRG9jL2ZhcS9kZXNpZ24ucnN0CkBAIC0yOCw3ICsyOCw3IEBACiBJZiB5b3UncmUgdXNlZCB0byByZWFkaW5nIGFuZCB3cml0aW5nIGNvZGUgdGhhdCB1c2VzIG9uZSBzdHlsZSwgeW91IHdpbGwgZmVlbCBhdAogbGVhc3Qgc2xpZ2h0bHkgdW5lYXN5IHdoZW4gcmVhZGluZyAob3IgYmVpbmcgcmVxdWlyZWQgdG8gd3JpdGUpIGFub3RoZXIgc3R5bGUuCiAKLU1hbnkgY29kaW5nIHN0eWxlcyBwbGFjZSBiZWdpbi9lbmQgYnJhY2tldHMgb24gYSBsaW5lIGJ5IHRoZW1zZWxmLiAgVGhpcyBtYWtlcworTWFueSBjb2Rpbmcgc3R5bGVzIHBsYWNlIGJlZ2luL2VuZCBicmFja2V0cyBvbiBhIGxpbmUgYnkgdGhlbXNlbHZlcy4gIFRoaXMgbWFrZXMKIHByb2dyYW1zIGNvbnNpZGVyYWJseSBsb25nZXIgYW5kIHdhc3RlcyB2YWx1YWJsZSBzY3JlZW4gc3BhY2UsIG1ha2luZyBpdCBoYXJkZXIKIHRvIGdldCBhIGdvb2Qgb3ZlcnZpZXcgb2YgYSBwcm9ncmFtLiAgSWRlYWxseSwgYSBmdW5jdGlvbiBzaG91bGQgZml0IG9uIG9uZQogc2NyZWVuIChzYXksIDIwLTMwIGxpbmVzKS4gIDIwIGxpbmVzIG9mIFB5dGhvbiBjYW4gZG8gYSBsb3QgbW9yZSB3b3JrIHRoYW4gMjAKQEAgLTc1LDkgKzc1LDkgQEAKIGZ1bmN0aW9uIHByaW50cyBmZXdlciBkaWdpdHMgYW5kIHRoaXMgb2Z0ZW4gcmVzdWx0cyBpbiB0aGUgbW9yZSBzZW5zaWJsZSBudW1iZXIKIHRoYXQgd2FzIHByb2JhYmx5IGludGVuZGVkOjoKIAotICAgPj4+IDAuMgotICAgMC4yMDAwMDAwMDAwMDAwMDAwMQotICAgPj4+IHByaW50IDAuMgorICAgPj4+IDEuMSAtIDAuOQorICAgMC4yMDAwMDAwMDAwMDAwMDAwNworICAgPj4+IHByaW50IDEuMSAtIDAuOQogICAgMC4yCiAKIE9uZSBvZiB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgaXMgdGhhdCBpdCBpcyBlcnJvci1wcm9uZSB0byBjb21wYXJlIHRoZSByZXN1bHQKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZ3VpLnJzdCBiL0RvYy9mYXEvZ3VpLnJzdAppbmRleCAxZjJhZTA5Li5kMzdmNDgwIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2d1aS5yc3QKKysrIGIvRG9jL2ZhcS9ndWkucnN0CkBAIC02LDE4ICs2LDE1IEBACiAKIC4uIGNvbnRlbnRzOjoKIAotR2VuZXJhbCBHVUkgUXVlc3Rpb25zCi09PT09PT09PT09PT09PT09PT09PT0KLQogV2hhdCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHVUkgdG9vbGtpdHMgZXhpc3QgZm9yIFB5dGhvbj8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBEZXBlbmRpbmcgb24gd2hhdCBwbGF0Zm9ybShzKSB5b3UgYXJlIGFpbWluZyBhdCwgdGhlcmUgYXJlIHNldmVyYWwuCiAKIC4uIFhYWCBjaGVjayBsaW5rcwogCiBUa2ludGVyCi0nJycnJycnCistLS0tLS0tCiAKIFN0YW5kYXJkIGJ1aWxkcyBvZiBQeXRob24gaW5jbHVkZSBhbiBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlIHRvIHRoZSBUY2wvVGsKIHdpZGdldCBzZXQsIGNhbGxlZCBUa2ludGVyLiAgVGhpcyBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdCB0byBpbnN0YWxsIGFuZCB1c2UuCkBAIC0yNiwyMiArMjMsMjcgQEAKIFVuaXggcGxhdGZvcm1zLgogCiB3eFdpZGdldHMKLScnJycnJycnJworLS0tLS0tLS0tCiAKLXd4V2lkZ2V0cyBpcyBhIEdVSSBjbGFzcyBsaWJyYXJ5IHdyaXR0ZW4gaW4gQysrIHRoYXQncyBhIHBvcnRhYmxlCi1pbnRlcmZhY2UgdG8gdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyBsaWJyYXJpZXMsIGFuZCB0aGF0IGhhcyBhCi1QeXRob24gaW50ZXJmYWNlIGNhbGxlZCBgd3hQeXRob24gPGh0dHA6Ly93d3cud3hweXRob24ub3JnPmBfXy4KK3d4V2lkZ2V0cyAoaHR0cDovL3d3dy53eHdpZGdldHMub3JnKSBpcyBhIGZyZWUsIHBvcnRhYmxlIEdVSSBjbGFzcworbGlicmFyeSB3cml0dGVuIGluIEMrKyB0aGF0IHByb3ZpZGVzIGEgbmF0aXZlIGxvb2sgYW5kIGZlZWwgb24gYQorbnVtYmVyIG9mIHBsYXRmb3Jtcywgd2l0aCBXaW5kb3dzLCBNYWNPUyBYLCBHVEssIFgxMSwgYWxsIGxpc3RlZCBhcworY3VycmVudCBzdGFibGUgdGFyZ2V0cy4gIExhbmd1YWdlIGJpbmRpbmdzIGFyZSBhdmFpbGFibGUgZm9yIGEgbnVtYmVyCitvZiBsYW5ndWFnZXMgaW5jbHVkaW5nIFB5dGhvbiwgUGVybCwgUnVieSwgZXRjLgogCi13eFdpZGdldHMgcHJlc2VydmVzIHRoZSBsb29rIGFuZCBmZWVsIG9mIHRoZQotdW5kZXJseWluZyBncmFwaGljcyB0b29sa2l0LCBhbmQgaGFzIGEgbGFyZ2Ugc2V0IG9mIHdpZGdldHMgYW5kCi1jb2xsZWN0aW9uIG9mIEdESSBjbGFzc2VzLiAgU2VlIGB0aGUgd3hXaWRnZXRzIHBhZ2UKLTxodHRwOi8vd3d3Lnd4d2lkZ2V0cy5vcmc+YF8gZm9yIG1vcmUgZGV0YWlscy4KK3d4UHl0aG9uIChodHRwOi8vd3d3Lnd4cHl0aG9uLm9yZykgaXMgdGhlIFB5dGhvbiBiaW5kaW5nIGZvcgord3h3aWRnZXRzLiAgV2hpbGUgaXQgb2Z0ZW4gbGFncyBzbGlnaHRseSBiZWhpbmQgdGhlIG9mZmljaWFsIHd4V2lkZ2V0cworcmVsZWFzZXMsIGl0IGFsc28gb2ZmZXJzIGEgbnVtYmVyIG9mIGZlYXR1cmVzIHZpYSBwdXJlIFB5dGhvbgorZXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGluIG90aGVyIGxhbmd1YWdlIGJpbmRpbmdzLiAgVGhlcmUKK2lzIGFuIGFjdGl2ZSB3eFB5dGhvbiB1c2VyIGFuZCBkZXZlbG9wZXIgY29tbXVuaXR5LgogCi13eFdpZGdldHMgc3VwcG9ydHMgV2luZG93cyBhbmQgTWFjT1M7IG9uIFVuaXggdmFyaWFudHMsCi1pdCBzdXBwb3J0cyBib3RoIEdUaysgYW5kIE1vdGlmIHRvb2xraXRzLgorQm90aCB3eFdpZGdldHMgYW5kIHd4UHl0aG9uIGFyZSBmcmVlLCBvcGVuIHNvdXJjZSwgc29mdHdhcmUgd2l0aAorcGVybWlzc2l2ZSBsaWNlbmNlcyB0aGF0IGFsbG93IHRoZWlyIHVzZSBpbiBjb21tZXJjaWFsIHByb2R1Y3RzIGFzCit3ZWxsIGFzIGluIGZyZWV3YXJlIG9yIHNoYXJld2FyZS4KKwogCiBRdAotJycnCistLS0KIAogVGhlcmUgYXJlIGJpbmRpbmdzIGF2YWlsYWJsZSBmb3IgdGhlIFF0IHRvb2xraXQgKGBQeVF0CiA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC8+YF8pIGFuZCBmb3IgS0RFIChgUHlLREUgPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5a2RlL2ludHJvPmBfXykuICBJZgpAQCAtNTIsMTMgKzU0LDEzIEBACiA8aHR0cDovL3d3dy50cm9sbHRlY2guY29tPmBfLgogCiBHdGsrCi0nJycnCistLS0tCiAKIFB5R3RrIGJpbmRpbmdzIGZvciB0aGUgYEd0aysgdG9vbGtpdCA8aHR0cDovL3d3dy5ndGsub3JnPmBfIGhhdmUgYmVlbgogaW1wbGVtZW50ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZTsgc2VlIDxodHRwOi8vd3d3LnB5Z3RrLm9yZz4uCiAKIEZMVEsKLScnJycKKy0tLS0KIAogUHl0aG9uIGJpbmRpbmdzIGZvciBgdGhlIEZMVEsgdG9vbGtpdCA8aHR0cDovL3d3dy5mbHRrLm9yZz5gXywgYSBzaW1wbGUgeWV0CiBwb3dlcmZ1bCBhbmQgbWF0dXJlIGNyb3NzLXBsYXRmb3JtIHdpbmRvd2luZyBzeXN0ZW0sIGFyZSBhdmFpbGFibGUgZnJvbSBgdGhlCkBAIC02Niw3ICs2OCw3IEBACiAKIAogRk9YCi0nJycKKy0tLS0KIAogQSB3cmFwcGVyIGZvciBgdGhlIEZPWCB0b29sa2l0IDxodHRwOi8vd3d3LmZveC10b29sa2l0Lm9yZy8+YF8gY2FsbGVkIGBGWHB5CiA8aHR0cDovL2Z4cHkuc291cmNlZm9yZ2UubmV0Lz5gXyBpcyBhdmFpbGFibGUuICBGT1ggc3VwcG9ydHMgYm90aCBVbml4IHZhcmlhbnRzCkBAIC03NCwxMyArNzYsMTMgQEAKIAogCiBPcGVuR0wKLScnJycnJworLS0tLS0tCiAKIEZvciBPcGVuR0wgYmluZGluZ3MsIHNlZSBgUHlPcGVuR0wgPGh0dHA6Ly9weW9wZW5nbC5zb3VyY2Vmb3JnZS5uZXQ+YF8uCiAKIAogV2hhdCBwbGF0Zm9ybS1zcGVjaWZpYyBHVUkgdG9vbGtpdHMgZXhpc3QgZm9yIFB5dGhvbj8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBgVGhlIE1hYyBwb3J0IDxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9tYWM+YF8gYnkgSmFjayBKYW5zZW4gaGFzIGEgcmljaCBhbmQKIGV2ZXItZ3Jvd2luZyBzZXQgb2YgbW9kdWxlcyB0aGF0IHN1cHBvcnQgdGhlIG5hdGl2ZSBNYWMgdG9vbGJveCBjYWxscy4gIFRoZSBwb3J0CmRpZmYgLS1naXQgYS9Eb2MvZmFxL2xpYnJhcnkucnN0IGIvRG9jL2ZhcS9saWJyYXJ5LnJzdAppbmRleCA0YjBjM2QzLi5jMTIyZDcyIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2xpYnJhcnkucnN0CisrKyBiL0RvYy9mYXEvbGlicmFyeS5yc3QKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCiBUbyB0cnVuY2F0ZSBhIGZpbGUsIG9wZW4gaXQgdXNpbmcgYGBmID0gb3BlbihmaWxlbmFtZSwgInIrIilgYCwgYW5kIHVzZQogYGBmLnRydW5jYXRlKG9mZnNldClgYDsgb2Zmc2V0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHNlZWsgcG9zaXRpb24uICBUaGVyZSdzCi1hbHNvIGBgYG9zLmZ0cnVuY2F0ZShmZCwgb2Zmc2V0KWBgIGZvciBmaWxlcyBvcGVuZWQgd2l0aCA6ZnVuYzpgb3Mub3BlbmAsIHdoZXJlCithbHNvIGBgb3MuZnRydW5jYXRlKGZkLCBvZmZzZXQpYGAgZm9yIGZpbGVzIG9wZW5lZCB3aXRoIDpmdW5jOmBvcy5vcGVuYCwgd2hlcmUKIGBgZmRgYCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIChhIHNtYWxsIGludGVnZXIpLgogCiBUaGUgOm1vZDpgc2h1dGlsYCBtb2R1bGUgYWxzbyBjb250YWlucyBhIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gd29yayBvbiBmaWxlcwpAQCAtNjcyLDkgKzY3Miw4IEBACiAgICBpZiByZXBseSAhPSAyMDA6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZShodHRwb2JqLmdldGZpbGUoKS5yZWFkKCkpCiAKLU5vdGUgdGhhdCBpbiBnZW5lcmFsIGZvciBVUkwtZW5jb2RlZCBQT1NUIG9wZXJhdGlvbnMsIHF1ZXJ5IHN0cmluZ3MgbXVzdCBiZQotcXVvdGVkIGJ5IHVzaW5nIDpmdW5jOmB1cmxsaWIucXVvdGVgLiAgRm9yIGV4YW1wbGUgdG8gc2VuZCBuYW1lPSJHdXkgU3RlZWxlLAotSnIuIjo6CitOb3RlIHRoYXQgaW4gZ2VuZXJhbCBmb3IgcGVyY2VudC1lbmNvZGVkIFBPU1Qgb3BlcmF0aW9ucywgcXVlcnkgc3RyaW5ncyBtdXN0IGJlCitxdW90ZWQgdXNpbmcgOmZ1bmM6YHVybGxpYi5xdW90ZWAuICBGb3IgZXhhbXBsZSB0byBzZW5kIG5hbWU9Ikd1eSBTdGVlbGUsIEpyLiI6OgogCiAgICA+Pj4gZnJvbSB1cmxsaWIgaW1wb3J0IHF1b3RlCiAgICA+Pj4geCA9IHF1b3RlKCJHdXkgU3RlZWxlLCBKci4iKQpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAppbmRleCBjNTRiYjI4Li5lNTNmYWNkIDEwMDY0NAotLS0gYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAorKysgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdApAQCAtOTQ0LDcgKzk0NCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMiwgeW91IGNhbiB1c2UgYGBTLnJzdHJpcCgiXHJcbiIpYGAgdG8gcmVtb3ZlIGFsbAotb2NjdXJlbmNlcyBvZiBhbnkgbGluZSB0ZXJtaW5hdG9yIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGBgU2BgIHdpdGhvdXQKK29jY3VycmVuY2VzIG9mIGFueSBsaW5lIHRlcm1pbmF0b3IgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgYGBTYGAgd2l0aG91dAogcmVtb3Zpbmcgb3RoZXIgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIElmIHRoZSBzdHJpbmcgYGBTYGAgcmVwcmVzZW50cyBtb3JlIHRoYW4KIG9uZSBsaW5lLCB3aXRoIHNldmVyYWwgZW1wdHkgbGluZXMgYXQgdGhlIGVuZCwgdGhlIGxpbmUgdGVybWluYXRvcnMgZm9yIGFsbCB0aGUKIGJsYW5rIGxpbmVzIHdpbGwgYmUgcmVtb3ZlZDo6CkBAIC05NzksOCArOTc5LDggQEAKIDpmdW5jOmBmbG9hdGAuICBgYHNwbGl0KClgYCBzdXBwb3J0cyBhbiBvcHRpb25hbCAic2VwIiBwYXJhbWV0ZXIgd2hpY2ggaXMgdXNlZnVsCiBpZiB0aGUgbGluZSB1c2VzIHNvbWV0aGluZyBvdGhlciB0aGFuIHdoaXRlc3BhY2UgYXMgYSBzZXBhcmF0b3IuCiAKLUZvciBtb3JlIGNvbXBsaWNhdGVkIGlucHV0IHBhcnNpbmcsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbW9yZSBwb3dlcmZ1bCB0aGFuIEMncwotOmNmdW5jOmBzc2NhbmZgIGFuZCBiZXR0ZXIgc3VpdGVkIGZvciB0aGUgdGFzay4KK0ZvciBtb3JlIGNvbXBsaWNhdGVkIGlucHV0IHBhcnNpbmcsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIG1vcmUgcG93ZXJmdWwKK3RoYW4gQydzIDpjZnVuYzpgc3NjYW5mYCBhbmQgYmV0dGVyIHN1aXRlZCBmb3IgdGhlIHRhc2suCiAKIAogV2hhdCBkb2VzICdVbmljb2RlRXJyb3I6IEFTQ0lJIFtkZWNvZGluZyxlbmNvZGluZ10gZXJyb3I6IG9yZGluYWwgbm90IGluIHJhbmdlKDEyOCknIG1lYW4/CmRpZmYgLS1naXQgYS9Eb2MvZmFxL3dpbmRvd3MucnN0IGIvRG9jL2ZhcS93aW5kb3dzLnJzdAppbmRleCAzNTNjNDAwLi40N2MwOWFkIDEwMDY0NAotLS0gYS9Eb2MvZmFxL3dpbmRvd3MucnN0CisrKyBiL0RvYy9mYXEvd2luZG93cy5yc3QKQEAgLTI4NiwyMCArMjg2LDE4IEBACiAKIDEuIERvIF9ub3RfIGJ1aWxkIFB5dGhvbiBpbnRvIHlvdXIgLmV4ZSBmaWxlIGRpcmVjdGx5LiAgT24gV2luZG93cywgUHl0aG9uIG11c3QKICAgIGJlIGEgRExMIHRvIGhhbmRsZSBpbXBvcnRpbmcgbW9kdWxlcyB0aGF0IGFyZSB0aGVtc2VsdmVzIERMTCdzLiAgKFRoaXMgaXMgdGhlCi0gICBmaXJzdCBrZXkgdW5kb2N1bWVudGVkIGZhY3QuKSBJbnN0ZWFkLCBsaW5rIHRvIDpmaWxlOmBweXRob257Tk59LmRsbGA7IGl0IGlzCi0gICB0eXBpY2FsbHkgaW5zdGFsbGVkIGluIGBgQzpcV2luZG93c1xTeXN0ZW1gYC4gIE5OIGlzIHRoZSBQeXRob24gdmVyc2lvbiwgYQorICAgZmlyc3Qga2V5IHVuZG9jdW1lbnRlZCBmYWN0LikgIEluc3RlYWQsIGxpbmsgdG8gOmZpbGU6YHB5dGhvbntOTn0uZGxsYDsgaXQgaXMKKyAgIHR5cGljYWxseSBpbnN0YWxsZWQgaW4gYGBDOlxXaW5kb3dzXFN5c3RlbWBgLiAgKk5OKiBpcyB0aGUgUHl0aG9uIHZlcnNpb24sIGEKICAgIG51bWJlciBzdWNoIGFzICIyMyIgZm9yIFB5dGhvbiAyLjMuCiAKLSAgIFlvdSBjYW4gbGluayB0byBQeXRob24gc3RhdGljYWxseSBvciBkeW5hbWljYWxseS4gIExpbmtpbmcgc3RhdGljYWxseSBtZWFucwotICAgbGlua2luZyBhZ2FpbnN0IDpmaWxlOmBweXRob257Tk59LmxpYmAsIHdoaWxlIGR5bmFtaWNhbGx5IGxpbmtpbmcgbWVhbnMKLSAgIGxpbmtpbmcgYWdhaW5zdCA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgLiAgVGhlIGRyYXdiYWNrIHRvIGR5bmFtaWMgbGlua2luZyBpcwotICAgdGhhdCB5b3VyIGFwcCB3b24ndCBydW4gaWYgOmZpbGU6YHB5dGhvbntOTn0uZGxsYCBkb2VzIG5vdCBleGlzdCBvbiB5b3VyCi0gICBzeXN0ZW0uICAoR2VuZXJhbCBub3RlOiA6ZmlsZTpgcHl0aG9ue05OfS5saWJgIGlzIHRoZSBzby1jYWxsZWQgImltcG9ydCBsaWIiCi0gICBjb3JyZXNwb25kaW5nIHRvIDpmaWxlOmBweXRob24uZGxsYC4gIEl0IG1lcmVseSBkZWZpbmVzIHN5bWJvbHMgZm9yIHRoZQotICAgbGlua2VyLikKKyAgIFlvdSBjYW4gbGluayB0byBQeXRob24gaW4gdHdvIGRpZmZlcmVudCB3YXlzLiAgTG9hZC10aW1lIGxpbmtpbmcgbWVhbnMKKyAgIGxpbmtpbmcgYWdhaW5zdCA6ZmlsZTpgcHl0aG9ue05OfS5saWJgLCB3aGlsZSBydW4tdGltZSBsaW5raW5nIG1lYW5zIGxpbmtpbmcKKyAgIGFnYWluc3QgOmZpbGU6YHB5dGhvbntOTn0uZGxsYC4gIChHZW5lcmFsIG5vdGU6IDpmaWxlOmBweXRob257Tk59LmxpYmAgaXMgdGhlCisgICBzby1jYWxsZWQgImltcG9ydCBsaWIiIGNvcnJlc3BvbmRpbmcgdG8gOmZpbGU6YHB5dGhvbntOTn0uZGxsYC4gIEl0IG1lcmVseQorICAgZGVmaW5lcyBzeW1ib2xzIGZvciB0aGUgbGlua2VyLikKIAotICAgTGlua2luZyBkeW5hbWljYWxseSBncmVhdGx5IHNpbXBsaWZpZXMgbGluayBvcHRpb25zOyBldmVyeXRoaW5nIGhhcHBlbnMgYXQKLSAgIHJ1biB0aW1lLiAgWW91ciBjb2RlIG11c3QgbG9hZCA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgIHVzaW5nIHRoZSBXaW5kb3dzCisgICBSdW4tdGltZSBsaW5raW5nIGdyZWF0bHkgc2ltcGxpZmllcyBsaW5rIG9wdGlvbnM7IGV2ZXJ5dGhpbmcgaGFwcGVucyBhdCBydW4KKyAgIHRpbWUuICBZb3VyIGNvZGUgbXVzdCBsb2FkIDpmaWxlOmBweXRob257Tk59LmRsbGAgdXNpbmcgdGhlIFdpbmRvd3MKICAgIGBgTG9hZExpYnJhcnlFeCgpYGAgcm91dGluZS4gIFRoZSBjb2RlIG11c3QgYWxzbyB1c2UgYWNjZXNzIHJvdXRpbmVzIGFuZCBkYXRhCiAgICBpbiA6ZmlsZTpgcHl0aG9ue05OfS5kbGxgICh0aGF0IGlzLCBQeXRob24ncyBDIEFQSSdzKSB1c2luZyBwb2ludGVycyBvYnRhaW5lZAogICAgYnkgdGhlIFdpbmRvd3MgYGBHZXRQcm9jQWRkcmVzcygpYGAgcm91dGluZS4gIE1hY3JvcyBjYW4gbWFrZSB1c2luZyB0aGVzZQpAQCAtMzA4LDYgKzMwNiw4IEBACiAgICBCb3JsYW5kIG5vdGU6IGNvbnZlcnQgOmZpbGU6YHB5dGhvbntOTn0ubGliYCB0byBPTUYgZm9ybWF0IHVzaW5nIENvZmYyT21mLmV4ZQogICAgZmlyc3QuCiAKKyAgIC4uIFhYWCB3aGF0IGFib3V0IHN0YXRpYyBsaW5raW5nPworCiAyLiBJZiB5b3UgdXNlIFNXSUcsIGl0IGlzIGVhc3kgdG8gY3JlYXRlIGEgUHl0aG9uICJleHRlbnNpb24gbW9kdWxlIiB0aGF0IHdpbGwKICAgIG1ha2UgdGhlIGFwcCdzIGRhdGEgYW5kIG1ldGhvZHMgYXZhaWxhYmxlIHRvIFB5dGhvbi4gIFNXSUcgd2lsbCBoYW5kbGUganVzdAogICAgYWJvdXQgYWxsIHRoZSBncnVuZ3kgZGV0YWlscyBmb3IgeW91LiAgVGhlIHJlc3VsdCBpcyBDIGNvZGUgdGhhdCB5b3UgbGluawpAQCAtNDQxLDcgKzQ0MSw3IEBACiBIb3cgZG8gSSBlbXVsYXRlIG9zLmtpbGwoKSBpbiBXaW5kb3dzPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVG8gdGVybWluYXRlIGEgcHJvY2VzcywgeW91IGNhbiB1c2UgY3R5cGVzOjoKK1ByaW9yIHRvIFB5dGhvbiAyLjcgYW5kIDMuMiwgdG8gdGVybWluYXRlIGEgcHJvY2VzcywgeW91IGNhbiB1c2UgOm1vZDpgY3R5cGVzYDo6CiAKICAgIGltcG9ydCBjdHlwZXMKIApAQCAtNDUxLDYgKzQ1MSwxMSBAQAogICAgICAgIGhhbmRsZSA9IGtlcm5lbDMyLk9wZW5Qcm9jZXNzKDEsIDAsIHBpZCkKICAgICAgICByZXR1cm4gKDAgIT0ga2VybmVsMzIuVGVybWluYXRlUHJvY2VzcyhoYW5kbGUsIDApKQogCitJbiAyLjcgYW5kIDMuMiwgOmZ1bmM6YG9zLmtpbGxgIGlzIGltcGxlbWVudGVkIHNpbWlsYXIgdG8gdGhlIGFib3ZlIGZ1bmN0aW9uLAord2l0aCB0aGUgYWRkaXRpb25hbCBmZWF0dXJlIG9mIGJlaW5nIGFibGUgdG8gc2VuZCBDVFJMK0MgYW5kIENUUkwrQlJFQUsKK3RvIGNvbnNvbGUgc3VicHJvY2Vzc2VzIHdoaWNoIGFyZSBkZXNpZ25lZCB0byBoYW5kbGUgdGhvc2Ugc2lnbmFscy4gU2VlCis6ZnVuYzpgb3Mua2lsbGAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKwogCiBXaHkgZG9lcyBvcy5wYXRoLmlzZGlyKCkgZmFpbCBvbiBOVCBzaGFyZWQgZGlyZWN0b3JpZXM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01ODksNyArNTk0LDcgQEAKIAogVGhlIFB5dGhvbiBpbnN0YWxsZXIgaXNzdWVzIGEgd2FybmluZyBsaWtlIHRoaXM6OgogCi0gICBUaGlzIHZlcnNpb24gdXNlcyBgYENUTDNEMzIuRExMYGAgd2hpY2ggaXMgbm90IHRoZSBjb3JyZWN0IHZlcnNpb24uCisgICBUaGlzIHZlcnNpb24gdXNlcyBDVEwzRDMyLkRMTCB3aGljaCBpcyBub3QgdGhlIGNvcnJlY3QgdmVyc2lvbi4KICAgIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciB3aW5kb3dzIE5UIGFwcGxpY2F0aW9ucyBvbmx5LgogCiBUaW0gUGV0ZXJzOgpkaWZmIC0tZ2l0IGEvRG9jL2dsb3NzYXJ5LnJzdCBiL0RvYy9nbG9zc2FyeS5yc3QKaW5kZXggNWNmM2FlZS4uNzgyMjYzNCAxMDA2NDQKLS0tIGEvRG9jL2dsb3NzYXJ5LnJzdAorKysgYi9Eb2MvZ2xvc3NhcnkucnN0CkBAIC0xOSw3ICsxOSw3IEBACiAKICAgIDJ0bzMKICAgICAgIEEgdG9vbCB0aGF0IHRyaWVzIHRvIGNvbnZlcnQgUHl0aG9uIDIueCBjb2RlIHRvIFB5dGhvbiAzLnggY29kZSBieQotICAgICAgaGFuZGxpbmcgbW9zdCBvZiB0aGUgaW5jb21wYXRpYmlsaXRlcyB3aGljaCBjYW4gYmUgZGV0ZWN0ZWQgYnkgcGFyc2luZyB0aGUKKyAgICAgIGhhbmRsaW5nIG1vc3Qgb2YgdGhlIGluY29tcGF0aWJpbGl0aWVzIHdoaWNoIGNhbiBiZSBkZXRlY3RlZCBieSBwYXJzaW5nIHRoZQogICAgICAgc291cmNlIGFuZCB0cmF2ZXJzaW5nIHRoZSBwYXJzZSB0cmVlLgogCiAgICAgICAydG8zIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhcyA6bW9kOmBsaWIydG8zYDsgYSBzdGFuZGFsb25lCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgICA6cmVmOmAydG8zLXJlZmVyZW5jZWAuCiAKICAgIGFic3RyYWN0IGJhc2UgY2xhc3MKLSAgICAgIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoYWJicmV2aWF0ZWQgQUJDcykgY29tcGxlbWVudCA6dGVybTpgZHVjay10eXBpbmdgIGJ5CisgICAgICA6cmVmOmBhYnN0cmFjdC1iYXNlLWNsYXNzZXNgIGNvbXBsZW1lbnQgOnRlcm06YGR1Y2stdHlwaW5nYCBieQogICAgICAgcHJvdmlkaW5nIGEgd2F5IHRvIGRlZmluZSBpbnRlcmZhY2VzIHdoZW4gb3RoZXIgdGVjaG5pcXVlcyBsaWtlCiAgICAgICA6ZnVuYzpgaGFzYXR0cmAgd291bGQgYmUgY2x1bXN5LiBQeXRob24gY29tZXMgd2l0aCBtYW55IGJ1aWx0LWluIEFCQ3MgZm9yCiAgICAgICBkYXRhIHN0cnVjdHVyZXMgKGluIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlKSwgbnVtYmVycyAoaW4gdGhlCkBAIC02Myw2ICs2Myw5IEBACiAgICAgICAiaW50ZXJtZWRpYXRlIGxhbmd1YWdlIiBpcyBzYWlkIHRvIHJ1biBvbiBhIDp0ZXJtOmB2aXJ0dWFsIG1hY2hpbmVgCiAgICAgICB0aGF0IGV4ZWN1dGVzIHRoZSBtYWNoaW5lIGNvZGUgY29ycmVzcG9uZGluZyB0byBlYWNoIGJ5dGVjb2RlLgogCisgICAgICBBIGxpc3Qgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBmb3VuZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgIDpyZWY6YHRoZSBkaXMgbW9kdWxlIDxieXRlY29kZXM+YC4KKwogICAgY2xhc3MKICAgICAgIEEgdGVtcGxhdGUgZm9yIGNyZWF0aW5nIHVzZXItZGVmaW5lZCBvYmplY3RzLiBDbGFzcyBkZWZpbml0aW9ucwogICAgICAgbm9ybWFsbHkgY29udGFpbiBtZXRob2QgZGVmaW5pdGlvbnMgd2hpY2ggb3BlcmF0ZSBvbiBpbnN0YW5jZXMgb2YgdGhlCkBAIC0xMDMsOSArMTA2LDEwIEBACiAgICAgICBTZWUgOnBlcDpgMzQzYC4KIAogICAgQ1B5dGhvbgotICAgICAgVGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlLiAgVGhlCi0gICAgICB0ZXJtICJDUHl0aG9uIiBpcyB1c2VkIGluIGNvbnRleHRzIHdoZW4gbmVjZXNzYXJ5IHRvIGRpc3Rpbmd1aXNoIHRoaXMKLSAgICAgIGltcGxlbWVudGF0aW9uIGZyb20gb3RoZXJzIHN1Y2ggYXMgSnl0aG9uIG9yIElyb25QeXRob24uCisgICAgICBUaGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIGFzCisgICAgICBkaXN0cmlidXRlZCBvbiBgcHl0aG9uLm9yZyA8aHR0cDovL3B5dGhvbi5vcmc+YF8uICBUaGUgdGVybSAiQ1B5dGhvbiIKKyAgICAgIGlzIHVzZWQgd2hlbiBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIG90aGVycworICAgICAgc3VjaCBhcyBKeXRob24gb3IgSXJvblB5dGhvbi4KIAogICAgZGVjb3JhdG9yCiAgICAgICBBIGZ1bmN0aW9uIHJldHVybmluZyBhbm90aGVyIGZ1bmN0aW9uLCB1c3VhbGx5IGFwcGxpZWQgYXMgYSBmdW5jdGlvbgpAQCAtMTQwLDEwICsxNDQsOSBAQAogICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVzY3JpcHRvcnMnIG1ldGhvZHMsIHNlZSA6cmVmOmBkZXNjcmlwdG9yc2AuCiAKICAgIGRpY3Rpb25hcnkKLSAgICAgIEFuIGFzc29jaWF0aXZlIGFycmF5LCB3aGVyZSBhcmJpdHJhcnkga2V5cyBhcmUgbWFwcGVkIHRvIHZhbHVlcy4gIFRoZSB1c2UKLSAgICAgIG9mIDpjbGFzczpgZGljdGAgY2xvc2VseSByZXNlbWJsZXMgdGhhdCBmb3IgOmNsYXNzOmBsaXN0YCwgYnV0IHRoZSBrZXlzIGNhbgotICAgICAgYmUgYW55IG9iamVjdCB3aXRoIGEgOm1ldGg6YF9faGFzaF9fYCBmdW5jdGlvbiwgbm90IGp1c3QgaW50ZWdlcnMuCi0gICAgICBDYWxsZWQgYSBoYXNoIGluIFBlcmwuCisgICAgICBBbiBhc3NvY2lhdGl2ZSBhcnJheSwgd2hlcmUgYXJiaXRyYXJ5IGtleXMgYXJlIG1hcHBlZCB0byB2YWx1ZXMuICBUaGUga2V5cworICAgICAgY2FuIGJlIGFueSBvYmplY3Qgd2l0aCA6bWV0aDpgX19oYXNoX19gIGZ1bmN0aW9uIGFuZCA6bWV0aDpgX19lcV9fYAorICAgICAgbWV0aG9kcy4gQ2FsbGVkIGEgaGFzaCBpbiBQZXJsLgogCiAgICBkb2NzdHJpbmcKICAgICAgIEEgc3RyaW5nIGxpdGVyYWwgd2hpY2ggYXBwZWFycyBhcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBpbiBhIGNsYXNzLApAQCAtMTU0LDkgKzE1Nyw5IEBACiAgICAgICBvYmplY3QuCiAKICAgIGR1Y2stdHlwaW5nCi0gICAgICBBIHB5dGhvbmljIHByb2dyYW1taW5nIHN0eWxlIHdoaWNoIGRldGVybWluZXMgYW4gb2JqZWN0J3MgdHlwZSBieSBpbnNwZWN0aW9uCi0gICAgICBvZiBpdHMgbWV0aG9kIG9yIGF0dHJpYnV0ZSBzaWduYXR1cmUgcmF0aGVyIHRoYW4gYnkgZXhwbGljaXQgcmVsYXRpb25zaGlwCi0gICAgICB0byBzb21lIHR5cGUgb2JqZWN0ICgiSWYgaXQgbG9va3MgbGlrZSBhIGR1Y2sgYW5kIHF1YWNrcyBsaWtlIGEgZHVjaywgaXQKKyAgICAgIEEgcHJvZ3JhbW1pbmcgc3R5bGUgd2hpY2ggZG9lcyBub3QgbG9vayBhdCBhbiBvYmplY3QncyB0eXBlIHRvIGRldGVybWluZQorICAgICAgaWYgaXQgaGFzIHRoZSByaWdodCBpbnRlcmZhY2U7IGluc3RlYWQsIHRoZSBtZXRob2Qgb3IgYXR0cmlidXRlIGlzIHNpbXBseQorICAgICAgY2FsbGVkIG9yIHVzZWQgKCJJZiBpdCBsb29rcyBsaWtlIGEgZHVjayBhbmQgcXVhY2tzIGxpa2UgYSBkdWNrLCBpdAogICAgICAgbXVzdCBiZSBhIGR1Y2suIikgIEJ5IGVtcGhhc2l6aW5nIGludGVyZmFjZXMgcmF0aGVyIHRoYW4gc3BlY2lmaWMgdHlwZXMsCiAgICAgICB3ZWxsLWRlc2lnbmVkIGNvZGUgaW1wcm92ZXMgaXRzIGZsZXhpYmlsaXR5IGJ5IGFsbG93aW5nIHBvbHltb3JwaGljCiAgICAgICBzdWJzdGl0dXRpb24uICBEdWNrLXR5cGluZyBhdm9pZHMgdGVzdHMgdXNpbmcgOmZ1bmM6YHR5cGVgIG9yCkBAIC0xODIsMjEgKzE4NSwyOCBAQAogICAgICAgbm90IGV4cHJlc3Npb25zLgogCiAgICBleHRlbnNpb24gbW9kdWxlCi0gICAgICBBIG1vZHVsZSB3cml0dGVuIGluIEMgb3IgQysrLCB1c2luZyBQeXRob24ncyBDIEFQSSB0byBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIGFuZAotICAgICAgd2l0aCB1c2VyIGNvZGUuCisgICAgICBBIG1vZHVsZSB3cml0dGVuIGluIEMgb3IgQysrLCB1c2luZyBQeXRob24ncyBDIEFQSSB0byBpbnRlcmFjdCB3aXRoIHRoZQorICAgICAgY29yZSBhbmQgd2l0aCB1c2VyIGNvZGUuCiAKICAgIGZpbmRlcgogICAgICAgQW4gb2JqZWN0IHRoYXQgdHJpZXMgdG8gZmluZCB0aGUgOnRlcm06YGxvYWRlcmAgZm9yIGEgbW9kdWxlLiBJdCBtdXN0CiAgICAgICBpbXBsZW1lbnQgYSBtZXRob2QgbmFtZWQgOm1ldGg6YGZpbmRfbW9kdWxlYC4gU2VlIDpwZXA6YDMwMmAgZm9yCiAgICAgICBkZXRhaWxzLgogCisgICBmbG9vciBkaXZpc2lvbgorICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIHRoYXQgcm91bmRzIGRvd24gdG8gbmVhcmVzdCBpbnRlZ2VyLiAgVGhlIGZsb29yCisgICAgICBkaXZpc2lvbiBvcGVyYXRvciBpcyBgYC8vYGAuICBGb3IgZXhhbXBsZSwgdGhlIGV4cHJlc3Npb24gYGAxMSAvLyA0YGAKKyAgICAgIGV2YWx1YXRlcyB0byBgYDJgYCBpbiBjb250cmFzdCB0byB0aGUgYGAyLjc1YGAgcmV0dXJuZWQgYnkgZmxvYXQgdHJ1ZQorICAgICAgZGl2aXNpb24uICBOb3RlIHRoYXQgYGAoLTExKSAvLyA0YGAgaXMgYGAtM2BgIGJlY2F1c2UgdGhhdCBpcyBgYC0yLjc1YGAKKyAgICAgIHJvdW5kZWQgKmRvd253YXJkKi4gU2VlIDpwZXA6YDIzOGAuCisKICAgIGZ1bmN0aW9uCiAgICAgICBBIHNlcmllcyBvZiBzdGF0ZW1lbnRzIHdoaWNoIHJldHVybnMgc29tZSB2YWx1ZSB0byBhIGNhbGxlci4gSXQgY2FuIGFsc28KICAgICAgIGJlIHBhc3NlZCB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzIHdoaWNoIG1heSBiZSB1c2VkIGluIHRoZSBleGVjdXRpb24gb2YKICAgICAgIHRoZSBib2R5LiBTZWUgYWxzbyA6dGVybTpgYXJndW1lbnRgIGFuZCA6dGVybTpgbWV0aG9kYC4KIAogICAgX19mdXR1cmVfXwotICAgICAgQSBwc2V1ZG8gbW9kdWxlIHdoaWNoIHByb2dyYW1tZXJzIGNhbiB1c2UgdG8gZW5hYmxlIG5ldyBsYW5ndWFnZSBmZWF0dXJlcworICAgICAgQSBwc2V1ZG8tbW9kdWxlIHdoaWNoIHByb2dyYW1tZXJzIGNhbiB1c2UgdG8gZW5hYmxlIG5ldyBsYW5ndWFnZSBmZWF0dXJlcwogICAgICAgd2hpY2ggYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIuICBGb3IgZXhhbXBsZSwgdGhlCiAgICAgICBleHByZXNzaW9uIGBgMTEvNGBgIGN1cnJlbnRseSBldmFsdWF0ZXMgdG8gYGAyYGAuIElmIHRoZSBtb2R1bGUgaW4gd2hpY2gKICAgICAgIGl0IGlzIGV4ZWN1dGVkIGhhZCBlbmFibGVkICp0cnVlIGRpdmlzaW9uKiBieSBleGVjdXRpbmc6OgpAQCAtMjIxLDEzICsyMzEsMTMgQEAKIAogICAgZ2VuZXJhdG9yCiAgICAgICBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gaXRlcmF0b3IuICBJdCBsb29rcyBsaWtlIGEgbm9ybWFsIGZ1bmN0aW9uCi0gICAgICBleGNlcHQgdGhhdCB2YWx1ZXMgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdXNpbmcgYSA6a2V5d29yZDpgeWllbGRgCi0gICAgICBzdGF0ZW1lbnQgaW5zdGVhZCBvZiBhIDprZXl3b3JkOmByZXR1cm5gIHN0YXRlbWVudC4gIEdlbmVyYXRvciBmdW5jdGlvbnMKLSAgICAgIG9mdGVuIGNvbnRhaW4gb25lIG9yIG1vcmUgOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YHdoaWxlYCBsb29wcyB3aGljaAotICAgICAgOmtleXdvcmQ6YHlpZWxkYCBlbGVtZW50cyBiYWNrIHRvIHRoZSBjYWxsZXIuICBUaGUgZnVuY3Rpb24gZXhlY3V0aW9uIGlzCi0gICAgICBzdG9wcGVkIGF0IHRoZSA6a2V5d29yZDpgeWllbGRgIGtleXdvcmQgKHJldHVybmluZyB0aGUgcmVzdWx0KSBhbmQgaXMKLSAgICAgIHJlc3VtZWQgdGhlcmUgd2hlbiB0aGUgbmV4dCBlbGVtZW50IGlzIHJlcXVlc3RlZCBieSBjYWxsaW5nIHRoZQotICAgICAgOm1ldGg6YG5leHRgIG1ldGhvZCBvZiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuCisgICAgICBleGNlcHQgdGhhdCBpdCBjb250YWlucyA6a2V5d29yZDpgeWllbGRgIHN0YXRlbWVudHMgZm9yIHByb2R1Y2luZyBhIHNlcmllcworICAgICAgYSB2YWx1ZXMgdXNhYmxlIGluIGEgZm9yLWxvb3Agb3IgdGhhdCBjYW4gYmUgcmV0cmlldmVkIG9uZSBhdCBhIHRpbWUgd2l0aAorICAgICAgdGhlIDpmdW5jOmBuZXh0YCBmdW5jdGlvbi4gRWFjaCA6a2V5d29yZDpgeWllbGRgIHRlbXBvcmFyaWx5IHN1c3BlbmRzCisgICAgICBwcm9jZXNzaW5nLCByZW1lbWJlcmluZyB0aGUgbG9jYXRpb24gZXhlY3V0aW9uIHN0YXRlIChpbmNsdWRpbmcgbG9jYWwKKyAgICAgIHZhcmlhYmxlcyBhbmQgcGVuZGluZyB0cnktc3RhdGVtZW50cykuICBXaGVuIHRoZSBnZW5lcmF0b3IgcmVzdW1lcywgaXQKKyAgICAgIHBpY2tzLXVwIHdoZXJlIGl0IGxlZnQtb2ZmIChpbiBjb250cmFzdCB0byBmdW5jdGlvbnMgd2hpY2ggc3RhcnQgZnJlc2ggb24KKyAgICAgIGV2ZXJ5IGludm9jYXRpb24pLgogCiAgICAgICAuLiBpbmRleDo6IHNpbmdsZTogZ2VuZXJhdG9yIGV4cHJlc3Npb24KIApAQCAtMjQ0LDE2ICsyNTQsMjUgQEAKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCiAgICBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jawotICAgICAgVGhlIGxvY2sgdXNlZCBieSBQeXRob24gdGhyZWFkcyB0byBhc3N1cmUgdGhhdCBvbmx5IG9uZSB0aHJlYWQKLSAgICAgIGV4ZWN1dGVzIGluIHRoZSA6dGVybTpgQ1B5dGhvbmAgOnRlcm06YHZpcnR1YWwgbWFjaGluZWAgYXQgYSB0aW1lLgotICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBDUHl0aG9uIGltcGxlbWVudGF0aW9uIGJ5IGFzc3VyaW5nIHRoYXQgbm8gdHdvCi0gICAgICBwcm9jZXNzZXMgY2FuIGFjY2VzcyB0aGUgc2FtZSBtZW1vcnkgYXQgdGhlIHNhbWUgdGltZS4gIExvY2tpbmcgdGhlCi0gICAgICBlbnRpcmUgaW50ZXJwcmV0ZXIgbWFrZXMgaXQgZWFzaWVyIGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUKLSAgICAgIG11bHRpLXRocmVhZGVkLCBhdCB0aGUgZXhwZW5zZSBvZiBtdWNoIG9mIHRoZSBwYXJhbGxlbGlzbSBhZmZvcmRlZCBieQotICAgICAgbXVsdGktcHJvY2Vzc29yIG1hY2hpbmVzLiAgRWZmb3J0cyBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgcGFzdCB0bwotICAgICAgY3JlYXRlIGEgImZyZWUtdGhyZWFkZWQiIGludGVycHJldGVyIChvbmUgd2hpY2ggbG9ja3Mgc2hhcmVkIGRhdGEgYXQgYQotICAgICAgbXVjaCBmaW5lciBncmFudWxhcml0eSksIGJ1dCBzbyBmYXIgbm9uZSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bCBiZWNhdXNlCi0gICAgICBwZXJmb3JtYW5jZSBzdWZmZXJlZCBpbiB0aGUgY29tbW9uIHNpbmdsZS1wcm9jZXNzb3IgY2FzZS4KKyAgICAgIFRoZSBtZWNoYW5pc20gdXNlZCBieSB0aGUgOnRlcm06YENQeXRob25gIGludGVycHJldGVyIHRvIGFzc3VyZSB0aGF0CisgICAgICBvbmx5IG9uZSB0aHJlYWQgZXhlY3V0ZXMgUHl0aG9uIDp0ZXJtOmBieXRlY29kZWAgYXQgYSB0aW1lLgorICAgICAgVGhpcyBzaW1wbGlmaWVzIHRoZSBDUHl0aG9uIGltcGxlbWVudGF0aW9uIGJ5IG1ha2luZyB0aGUgb2JqZWN0IG1vZGVsCisgICAgICAoaW5jbHVkaW5nIGNyaXRpY2FsIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgOmNsYXNzOmBkaWN0YCkgaW1wbGljaXRseQorICAgICAgc2FmZSBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzLiAgTG9ja2luZyB0aGUgZW50aXJlIGludGVycHJldGVyCisgICAgICBtYWtlcyBpdCBlYXNpZXIgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZSBtdWx0aS10aHJlYWRlZCwgYXQgdGhlCisgICAgICBleHBlbnNlIG9mIG11Y2ggb2YgdGhlIHBhcmFsbGVsaXNtIGFmZm9yZGVkIGJ5IG11bHRpLXByb2Nlc3NvcgorICAgICAgbWFjaGluZXMuCisKKyAgICAgIEhvd2V2ZXIsIHNvbWUgZXh0ZW5zaW9uIG1vZHVsZXMsIGVpdGhlciBzdGFuZGFyZCBvciB0aGlyZC1wYXJ0eSwKKyAgICAgIGFyZSBkZXNpZ25lZCBzbyBhcyB0byByZWxlYXNlIHRoZSBHSUwgd2hlbiBkb2luZyBjb21wdXRhdGlvbmFsbHktaW50ZW5zaXZlCisgICAgICB0YXNrcyBzdWNoIGFzIGNvbXByZXNzaW9uIG9yIGhhc2hpbmcuICBBbHNvLCB0aGUgR0lMIGlzIGFsd2F5cyByZWxlYXNlZAorICAgICAgd2hlbiBkb2luZyBJL08uCisKKyAgICAgIFBhc3QgZWZmb3J0cyB0byBjcmVhdGUgYSAiZnJlZS10aHJlYWRlZCIgaW50ZXJwcmV0ZXIgKG9uZSB3aGljaCBsb2NrcworICAgICAgc2hhcmVkIGRhdGEgYXQgYSBtdWNoIGZpbmVyIGdyYW51bGFyaXR5KSBoYXZlIG5vdCBiZWVuIHN1Y2Nlc3NmdWwKKyAgICAgIGJlY2F1c2UgcGVyZm9ybWFuY2Ugc3VmZmVyZWQgaW4gdGhlIGNvbW1vbiBzaW5nbGUtcHJvY2Vzc29yIGNhc2UuIEl0CisgICAgICBpcyBiZWxpZXZlZCB0aGF0IG92ZXJjb21pbmcgdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZSB3b3VsZCBtYWtlIHRoZQorICAgICAgaW1wbGVtZW50YXRpb24gbXVjaCBtb3JlIGNvbXBsaWNhdGVkIGFuZCB0aGVyZWZvcmUgY29zdGxpZXIgdG8gbWFpbnRhaW4uCiAKICAgIGhhc2hhYmxlCiAgICAgICBBbiBvYmplY3QgaXMgKmhhc2hhYmxlKiBpZiBpdCBoYXMgYSBoYXNoIHZhbHVlIHdoaWNoIG5ldmVyIGNoYW5nZXMgZHVyaW5nCkBAIC0yNzIsOSArMjkxLDcgQEAKICAgIElETEUKICAgICAgIEFuIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbi4gIElETEUgaXMgYSBiYXNpYyBlZGl0b3IKICAgICAgIGFuZCBpbnRlcnByZXRlciBlbnZpcm9ubWVudCB3aGljaCBzaGlwcyB3aXRoIHRoZSBzdGFuZGFyZCBkaXN0cmlidXRpb24gb2YKLSAgICAgIFB5dGhvbi4gIEdvb2QgZm9yIGJlZ2lubmVycywgaXQgYWxzbyBzZXJ2ZXMgYXMgY2xlYXIgZXhhbXBsZSBjb2RlIGZvcgotICAgICAgdGhvc2Ugd2FudGluZyB0byBpbXBsZW1lbnQgYSBtb2RlcmF0ZWx5IHNvcGhpc3RpY2F0ZWQsIG11bHRpLXBsYXRmb3JtIEdVSQotICAgICAgYXBwbGljYXRpb24uCisgICAgICBQeXRob24uCiAKICAgIGltbXV0YWJsZQogICAgICAgQW4gb2JqZWN0IHdpdGggYSBmaXhlZCB2YWx1ZS4gIEltbXV0YWJsZSBvYmplY3RzIGluY2x1ZGUgbnVtYmVycywgc3RyaW5ncyBhbmQKQEAgLTM0OSwxMiArMzY2LDUyIEBACiAKICAgICAgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIDpyZWY6YHR5cGVpdGVyYC4KIAorICAga2V5IGZ1bmN0aW9uCisgICAgICBBIGtleSBmdW5jdGlvbiBvciBjb2xsYXRpb24gZnVuY3Rpb24gaXMgYSBjYWxsYWJsZSB0aGF0IHJldHVybnMgYSB2YWx1ZQorICAgICAgdXNlZCBmb3Igc29ydGluZyBvciBvcmRlcmluZy4gIEZvciBleGFtcGxlLCA6ZnVuYzpgbG9jYWxlLnN0cnhmcm1gIGlzCisgICAgICB1c2VkIHRvIHByb2R1Y2UgYSBzb3J0IGtleSB0aGF0IGlzIGF3YXJlIG9mIGxvY2FsZSBzcGVjaWZpYyBzb3J0CisgICAgICBjb252ZW50aW9ucy4KKworICAgICAgQSBudW1iZXIgb2YgdG9vbHMgaW4gUHl0aG9uIGFjY2VwdCBrZXkgZnVuY3Rpb25zIHRvIGNvbnRyb2wgaG93IGVsZW1lbnRzCisgICAgICBhcmUgb3JkZXJlZCBvciBncm91cGVkLiAgVGhleSBpbmNsdWRlIDpmdW5jOmBtaW5gLCA6ZnVuYzpgbWF4YCwKKyAgICAgIDpmdW5jOmBzb3J0ZWRgLCA6bWV0aDpgbGlzdC5zb3J0YCwgOmZ1bmM6YGhlYXBxLm5zbWFsbGVzdGAsCisgICAgICA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCBhbmQgOmZ1bmM6YGl0ZXJ0b29scy5ncm91cGJ5YC4KKworICAgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBjcmVhdGUgYSBrZXkgZnVuY3Rpb24uICBGb3IgZXhhbXBsZS4gdGhlCisgICAgICA6bWV0aDpgc3RyLmxvd2VyYCBtZXRob2QgY2FuIHNlcnZlIGFzIGEga2V5IGZ1bmN0aW9uIGZvciBjYXNlIGluc2Vuc2l0aXZlCisgICAgICBzb3J0cy4gIEFsdGVybmF0aXZlbHksIGFuIGFkLWhvYyBrZXkgZnVuY3Rpb24gY2FuIGJlIGJ1aWx0IGZyb20gYQorICAgICAgOmtleXdvcmQ6YGxhbWJkYWAgZXhwcmVzc2lvbiBzdWNoIGFzIGBgbGFtYmRhIHI6IChyWzBdLCByWzJdKWBgLiAgQWxzbywKKyAgICAgIHRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIHByb3ZpZGVzIHRocmVlIGtleSBmdW5jdGlvbiBjb25zdHVjdG9yczoKKyAgICAgIDpmdW5jOmB+b3BlcmF0b3IuYXR0cmdldHRlcmAsIDpmdW5jOmB+b3BlcmF0b3IuaXRlbWdldHRlcmAsIGFuZAorICAgICAgOmZ1bmM6YH5vcGVyYXRvci5tZXRob2RjYWxsZXJgLiAgU2VlIHRoZSA6cmVmOmBTb3J0aW5nIEhPVyBUTworICAgICAgPHNvcnRpbmdob3d0bz5gIGZvciBleGFtcGxlcyBvZiBob3cgdG8gY3JlYXRlIGFuZCB1c2Uga2V5IGZ1bmN0aW9ucy4KKwogICAga2V5d29yZCBhcmd1bWVudAogICAgICAgQXJndW1lbnRzIHdoaWNoIGFyZSBwcmVjZWRlZCB3aXRoIGEgYGB2YXJpYWJsZV9uYW1lPWBgIGluIHRoZSBjYWxsLgogICAgICAgVGhlIHZhcmlhYmxlIG5hbWUgZGVzaWduYXRlcyB0aGUgbG9jYWwgbmFtZSBpbiB0aGUgZnVuY3Rpb24gdG8gd2hpY2ggdGhlCiAgICAgICB2YWx1ZSBpcyBhc3NpZ25lZC4gIGBgKipgYCBpcyB1c2VkIHRvIGFjY2VwdCBvciBwYXNzIGEgZGljdGlvbmFyeSBvZgogICAgICAga2V5d29yZCBhcmd1bWVudHMuICBTZWUgOnRlcm06YGFyZ3VtZW50YC4KIAorICAga2V5IGZ1bmN0aW9uCisgICAgICBBIGtleSBmdW5jdGlvbiBvciBjb2xsYXRpb24gZnVuY3Rpb24gaXMgYSBjYWxsYWJsZSB0aGF0IHJldHVybnMgYSB2YWx1ZQorICAgICAgdXNlZCBmb3Igc29ydGluZyBvciBvcmRlcmluZy4gIEZvciBleGFtcGxlLCA6ZnVuYzpgbG9jYWxlLnN0cnhmcm1gIGlzCisgICAgICB1c2VkIHRvIHByb2R1Y2UgYSBzb3J0IGtleSB0aGF0IGlzIGF3YXJlIG9mIGxvY2FsZSBzcGVjaWZpYyBzb3J0CisgICAgICBjb252ZW50aW9ucy4KKworICAgICAgQSBudW1iZXIgb2YgdG9vbHMgaW4gUHl0aG9uIGFjY2VwdCBrZXkgZnVuY3Rpb25zIHRvIGNvbnRyb2wgaG93IGVsZW1lbnRzCisgICAgICBhcmUgb3JkZXJlZCBvciBncm91cGVkLiAgVGhleSBpbmNsdWRlIDpmdW5jOmBtaW5gLCA6ZnVuYzpgbWF4YCwKKyAgICAgIDpmdW5jOmBzb3J0ZWRgLCA6bWV0aDpgbGlzdC5zb3J0YCwgOmZ1bmM6YGhlYXBxLm5zbWFsbGVzdGAsCisgICAgICA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCBhbmQgOmZ1bmM6YGl0ZXJ0b29scy5ncm91cGJ5YC4KKworICAgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBjcmVhdGUgYSBrZXkgZnVuY3Rpb24uICBGb3IgZXhhbXBsZS4gdGhlCisgICAgICA6bWV0aDpgc3RyLmxvd2VyYCBtZXRob2QgY2FuIHNlcnZlIGFzIGEga2V5IGZ1bmN0aW9uIGZvciBjYXNlIGluc2Vuc2l0aXZlCisgICAgICBzb3J0cy4gIEFsdGVybmF0aXZlbHksIGFuIGFkLWhvYyBrZXkgZnVuY3Rpb24gY2FuIGJlIGJ1aWx0IGZyb20gYQorICAgICAgOmtleXdvcmQ6YGxhbWJkYWAgZXhwcmVzc2lvbiBzdWNoIGFzIGBgbGFtYmRhIHI6IChyWzBdLCByWzJdKWBgLiAgQWxzbywKKyAgICAgIHRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIHByb3ZpZGVzIHRocmVlIGtleSBmdW5jdGlvbiBjb25zdHVjdG9yczoKKyAgICAgIDpmdW5jOmB+b3BlcmF0b3IuYXR0cmdldHRlcmAsIDpmdW5jOmB+b3BlcmF0b3IuaXRlbWdldHRlcmAsIGFuZAorICAgICAgOmZ1bmM6YH5vcGVyYXRvci5tZXRob2RjYWxsZXJgLiAgU2VlIHRoZSA6cmVmOmBzb3J0aW5naG93dG9gIGZvcgorICAgICAgZXhhbXBsZXMgb2YgaG93IHRvIGNyZWF0ZSBhbmQgdXNlIGtleSBmdW5jdGlvbnMuCisKICAgIGxhbWJkYQogICAgICAgQW4gYW5vbnltb3VzIGlubGluZSBmdW5jdGlvbiBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIDp0ZXJtOmBleHByZXNzaW9uYAogICAgICAgd2hpY2ggaXMgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIFRoZSBzeW50YXggdG8gY3JlYXRlCkBAIC0zODUsOCArNDQyLDExIEBACiAgICAgICA6dGVybTpgZmluZGVyYC4gU2VlIDpwZXA6YDMwMmAgZm9yIGRldGFpbHMuCiAKICAgIG1hcHBpbmcKLSAgICAgIEEgY29udGFpbmVyIG9iamVjdCAoc3VjaCBhcyA6Y2xhc3M6YGRpY3RgKSB3aGljaCBzdXBwb3J0cyBhcmJpdHJhcnkga2V5Ci0gICAgICBsb29rdXBzIHVzaW5nIHRoZSBzcGVjaWFsIG1ldGhvZCA6bWV0aDpgX19nZXRpdGVtX19gLgorICAgICAgQSBjb250YWluZXIgb2JqZWN0IHRoYXQgc3VwcG9ydHMgYXJiaXRyYXJ5IGtleSBsb29rdXBzIGFuZCBpbXBsZW1lbnRzIHRoZQorICAgICAgbWV0aG9kcyBzcGVjaWZpZWQgaW4gdGhlIDpjbGFzczpgTWFwcGluZ2Agb3IgOmNsYXNzOmBNdXRhYmxlTWFwcGluZ2AKKyAgICAgIDpyZWY6YGFic3RyYWN0IGJhc2UgY2xhc3NlcyA8YWJzdHJhY3QtYmFzZS1jbGFzc2VzPmAuIEV4YW1wbGVzIGluY2x1ZGUKKyAgICAgIDpjbGFzczpgZGljdGAsIDpjbGFzczpgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3RgLAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgYW5kIDpjbGFzczpgY29sbGVjdGlvbnMuQ291bnRlcmAuCiAKICAgIG1ldGFjbGFzcwogICAgICAgVGhlIGNsYXNzIG9mIGEgY2xhc3MuICBDbGFzcyBkZWZpbml0aW9ucyBjcmVhdGUgYSBjbGFzcyBuYW1lLCBhIGNsYXNzCkBAIC01NDIsNiArNjAyLDEzIEBACiAgICAgICBvYmplY3QgaGFzIGEgdHlwZS4gIEFuIG9iamVjdCdzIHR5cGUgaXMgYWNjZXNzaWJsZSBhcyBpdHMKICAgICAgIDphdHRyOmBfX2NsYXNzX19gIGF0dHJpYnV0ZSBvciBjYW4gYmUgcmV0cmlldmVkIHdpdGggYGB0eXBlKG9iailgYC4KIAorICAgdmlldworICAgICAgVGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSA6bWV0aDpgZGljdC52aWV3a2V5c2AsIDptZXRoOmBkaWN0LnZpZXd2YWx1ZXNgLAorICAgICAgYW5kIDptZXRoOmBkaWN0LnZpZXdpdGVtc2AgYXJlIGNhbGxlZCBkaWN0aW9uYXJ5IHZpZXdzLiAgVGhleSBhcmUgbGF6eQorICAgICAgc2VxdWVuY2VzIHRoYXQgd2lsbCBzZWUgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5LiAgVG8gZm9yY2UKKyAgICAgIHRoZSBkaWN0aW9uYXJ5IHZpZXcgdG8gYmVjb21lIGEgZnVsbCBsaXN0IHVzZSBgYGxpc3QoZGljdHZpZXcpYGAuICBTZWUKKyAgICAgIDpyZWY6YGRpY3Qtdmlld3NgLgorCiAgICB2aXJ0dWFsIG1hY2hpbmUKICAgICAgIEEgY29tcHV0ZXIgZGVmaW5lZCBlbnRpcmVseSBpbiBzb2Z0d2FyZS4gIFB5dGhvbidzIHZpcnR1YWwgbWFjaGluZQogICAgICAgZXhlY3V0ZXMgdGhlIDp0ZXJtOmBieXRlY29kZWAgZW1pdHRlZCBieSB0aGUgYnl0ZWNvZGUgY29tcGlsZXIuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vY3BvcnRpbmcucnN0IGIvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdAppbmRleCBjMGI1OTMzLi44MDMwZjEzIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CisrKyBiL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKQEAgLTQ4LDkgKzQ4LDkgQEAKIGNvbXBhdGliaWxpdHkgd2l0aCAzLjAsIDpjdHlwZTpgUHlVbmljb2RlYCBzaG91bGQgYmUgdXNlZCBmb3IgdGV4dHVhbCBkYXRhIGFuZAogOmN0eXBlOmBQeUJ5dGVzYCBmb3IgYmluYXJ5IGRhdGEuICBJdCdzIGFsc28gaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQKIDpjdHlwZTpgUHlCeXRlc2AgYW5kIDpjdHlwZTpgUHlVbmljb2RlYCBpbiAzLjAgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUgbGlrZQotOmN0eXBlOmBQeVN0cmluZ2AgYW5kIDpjdHlwZTpgUHlTdHJpbmdgIGFyZSBpbiAyLnguICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MKLWJlc3QgcHJhY3RpY2VzIHdpdGggcmVnYXJkcyB0byA6Y3R5cGU6YFB5VW5pY29kZWAsIDpjdHlwZTpgUHlTdHJpbmdgLCBhbmQKLTpjdHlwZTpgUHlCeXRlc2AuIDo6Cis6Y3R5cGU6YFB5U3RyaW5nYCBhbmQgOmN0eXBlOmBQeVVuaWNvZGVgIGFyZSBpbiAyLnguICBUaGUgZm9sbG93aW5nIGV4YW1wbGUKK3Nob3dzIGJlc3QgcHJhY3RpY2VzIHdpdGggcmVnYXJkcyB0byA6Y3R5cGU6YFB5VW5pY29kZWAsIDpjdHlwZTpgUHlTdHJpbmdgLAorYW5kIDpjdHlwZTpgUHlCeXRlc2AuIDo6CiAKICAgICNpbmNsdWRlICJzdGRsaWIuaCIKICAgICNpbmNsdWRlICJQeXRob24uaCIKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdCBiL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdAppbmRleCAzY2M0MzdmLi41NWExZDYyIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKKysrIGIvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CkBAIC0yOTYsNyArMjk2LDcgQEAKICAgICA8Ym91bmQgbWV0aG9kIEQuZiBvZiA8X19tYWluX18uRCBvYmplY3QgYXQgMHgwMEIxOEM5MD4+CiAKIFRoZSBvdXRwdXQgc3VnZ2VzdHMgdGhhdCBib3VuZCBhbmQgdW5ib3VuZCBtZXRob2RzIGFyZSB0d28gZGlmZmVyZW50IHR5cGVzLgotV2hpbGUgdGhleSBjb3VsZCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCB3YXksIHRoZSBhY3R1YWwgQyBpbXBsZW1lbnRpb24gb2YKK1doaWxlIHRoZXkgY291bGQgaGF2ZSBiZWVuIGltcGxlbWVudGVkIHRoYXQgd2F5LCB0aGUgYWN0dWFsIEMgaW1wbGVtZW50YXRpb24gb2YKIDpjdHlwZTpgUHlNZXRob2RfVHlwZWAgaW4KIGBPYmplY3RzL2NsYXNzb2JqZWN0LmMgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi90cnVuay9PYmplY3RzL2NsYXNzb2JqZWN0LmM/dmlldz1tYXJrdXA+YF8KIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHR3byBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2RvYW5kZG9udC5yc3QgYi9Eb2MvaG93dG8vZG9hbmRkb250LnJzdAppbmRleCAwNWQ4ZGY5Li4yZTllMGI4IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZG9hbmRkb250LnJzdAorKysgYi9Eb2MvaG93dG8vZG9hbmRkb250LnJzdApAQCAtMTQ0LDMwICsxNDQsNDQgQEAKIC0tLS0tLS0KIAogUHl0aG9uIGhhcyB0aGUgYGBleGNlcHQ6YGAgY2xhdXNlLCB3aGljaCBjYXRjaGVzIGFsbCBleGNlcHRpb25zLiBTaW5jZSAqZXZlcnkqCi1lcnJvciBpbiBQeXRob24gcmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhpcyBtYWtlcyBtYW55IHByb2dyYW1taW5nIGVycm9ycyBsb29rCi1saWtlIHJ1bnRpbWUgcHJvYmxlbXMsIGFuZCBoaW5kZXJzIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KK2Vycm9yIGluIFB5dGhvbiByYWlzZXMgYW4gZXhjZXB0aW9uLCB1c2luZyBgYGV4Y2VwdDpgYCBjYW4gbWFrZSBtYW55Citwcm9ncmFtbWluZyBlcnJvcnMgbG9vayBsaWtlIHJ1bnRpbWUgcHJvYmxlbXMsIHdoaWNoIGhpbmRlcnMgdGhlIGRlYnVnZ2luZworcHJvY2Vzcy4KIAotVGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGEgZ3JlYXQgZXhhbXBsZTo6CitUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYSBncmVhdCBleGFtcGxlIG9mIHdoeSB0aGlzIGlzIGJhZDo6CiAKICAgIHRyeToKICAgICAgICBmb28gPSBvcG5lKCJmaWxlIikgIyBtaXNzcGVsbGVkICJvcGVuIgogICAgZXhjZXB0OgogICAgICAgIHN5cy5leGl0KCJjb3VsZCBub3Qgb3BlbiBmaWxlISIpCiAKLVRoZSBzZWNvbmQgbGluZSB0cmlnZ2VycyBhIDpleGM6YE5hbWVFcnJvcmAgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBleGNlcHQKLWNsYXVzZS4gVGhlIHByb2dyYW0gd2lsbCBleGl0LCBhbmQgeW91IHdpbGwgaGF2ZSBubyBpZGVhIHRoYXQgdGhpcyBoYXMgbm90aGluZwotdG8gZG8gd2l0aCB0aGUgcmVhZGFiaWxpdHkgb2YgYGAiZmlsZSJgYC4KK1RoZSBzZWNvbmQgbGluZSB0cmlnZ2VycyBhIDpleGM6YE5hbWVFcnJvcmAsIHdoaWNoIGlzIGNhdWdodCBieSB0aGUgZXhjZXB0CitjbGF1c2UuIFRoZSBwcm9ncmFtIHdpbGwgZXhpdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRoZSBwcm9ncmFtIHByaW50cyB3aWxsCittYWtlIHlvdSB0aGluayB0aGUgcHJvYmxlbSBpcyB0aGUgcmVhZGFiaWxpdHkgb2YgYGAiZmlsZSJgYCB3aGVuIGluIGZhY3QKK3RoZSByZWFsIGVycm9yIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggYGAiZmlsZSJgYC4KIAotVGhlIGV4YW1wbGUgYWJvdmUgaXMgYmV0dGVyIHdyaXR0ZW4gOjoKK0EgYmV0dGVyIHdheSB0byB3cml0ZSB0aGUgYWJvdmUgaXMgOjoKIAogICAgdHJ5OgotICAgICAgIGZvbyA9IG9wbmUoImZpbGUiKSAjIHdpbGwgYmUgY2hhbmdlZCB0byAib3BlbiIgYXMgc29vbiBhcyB3ZSBydW4gaXQKKyAgICAgICBmb28gPSBvcG5lKCJmaWxlIikKICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgIHN5cy5leGl0KCJjb3VsZCBub3Qgb3BlbiBmaWxlIikKIAotVGhlcmUgYXJlIHNvbWUgc2l0dWF0aW9ucyBpbiB3aGljaCB0aGUgYGBleGNlcHQ6YGAgY2xhdXNlIGlzIHVzZWZ1bDogZm9yCi1leGFtcGxlLCBpbiBhIGZyYW1ld29yayB3aGVuIHJ1bm5pbmcgY2FsbGJhY2tzLCBpdCBpcyBnb29kIG5vdCB0byBsZXQgYW55Ci1jYWxsYmFjayBkaXN0dXJiIHRoZSBmcmFtZXdvcmsuCitXaGVuIHRoaXMgaXMgcnVuLCBQeXRob24gd2lsbCBwcm9kdWNlIGEgdHJhY2ViYWNrIHNob3dpbmcgdGhlIDpleGM6YE5hbWVFcnJvcmAsCithbmQgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSBhcHBhcmVudCB3aGF0IG5lZWRzIHRvIGJlIGZpeGVkLgorCisuLiBpbmRleDo6IGJhcmUgZXhjZXB0LCBleGNlcHQ7IGJhcmUKKworQmVjYXVzZSBgYGV4Y2VwdDpgYCBjYXRjaGVzICphbGwqIGV4Y2VwdGlvbnMsIGluY2x1ZGluZyA6ZXhjOmBTeXN0ZW1FeGl0YCwKKzpleGM6YEtleWJvYXJkSW50ZXJydXB0YCwgYW5kIDpleGM6YEdlbmVyYXRvckV4aXRgICh3aGljaCBpcyBub3QgYW4gZXJyb3IgYW5kCitzaG91bGQgbm90IG5vcm1hbGx5IGJlIGNhdWdodCBieSB1c2VyIGNvZGUpLCB1c2luZyBhIGJhcmUgYGBleGNlcHQ6YGAgaXMgYWxtb3N0CituZXZlciBhIGdvb2QgaWRlYS4gIEluIHNpdHVhdGlvbnMgd2hlcmUgeW91IG5lZWQgdG8gY2F0Y2ggYWxsICJub3JtYWwiIGVycm9ycywKK3N1Y2ggYXMgaW4gYSBmcmFtZXdvcmsgdGhhdCBydW5zIGNhbGxiYWNrcywgeW91IGNhbiBjYXRjaCB0aGUgYmFzZSBjbGFzcyBmb3IKK2FsbCBub3JtYWwgZXhjZXB0aW9ucywgOmV4YzpgRXhjZXB0aW9uYC4gIFVuZm9ydHVuYXRlbHkgaW4gUHl0aG9uIDIueCBpdCBpcworcG9zc2libGUgZm9yIHRoaXJkLXBhcnR5IGNvZGUgdG8gcmFpc2UgZXhjZXB0aW9ucyB0aGF0IGRvIG5vdCBpbmhlcml0IGZyb20KKzpleGM6YEV4Y2VwdGlvbmAsIHNvIGluIFB5dGhvbiAyLnggdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgeW91IG1heSBoYXZlIHRvCit1c2UgYSBiYXJlIGBgZXhjZXB0OmBgIGFuZCBtYW51YWxseSByZS1yYWlzZSB0aGUgZXhjZXB0aW9ucyB5b3UgZG9uJ3Qgd2FudAordG8gY2F0Y2guCiAKIAogRXhjZXB0aW9ucwpAQCAtMTg1LDUxICsxOTksNjAgQEAKICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICByZXR1cm4gb3BlbihmaWxlKS5yZWFkbGluZSgpCiAKLUNvbnNpZGVyIHRoZSBjYXNlIHRoZSBmaWxlIGdldHMgZGVsZXRlZCBiZXR3ZWVuIHRoZSB0aW1lIHRoZSBjYWxsIHRvCi06ZnVuYzpgb3MucGF0aC5leGlzdHNgIGlzIG1hZGUgYW5kIHRoZSB0aW1lIDpmdW5jOmBvcGVuYCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMKLXRoZSBsYXN0IGxpbmUgd2lsbCB0aHJvdyBhbiA6ZXhjOmBJT0Vycm9yYC4gVGhlIHNhbWUgd291bGQgaGFwcGVuIGlmICpmaWxlKgotZXhpc3RzIGJ1dCBoYXMgbm8gcmVhZCBwZXJtaXNzaW9uLiBTaW5jZSB0ZXN0aW5nIHRoaXMgb24gYSBub3JtYWwgbWFjaGluZSBvbgotZXhpc3RpbmcgYW5kIG5vbi1leGlzdGluZyBmaWxlcyBtYWtlIGl0IHNlZW0gYnVnbGVzcywgdGhhdCBtZWFucyBpbiB0ZXN0aW5nIHRoZQotcmVzdWx0cyB3aWxsIHNlZW0gZmluZSwgYW5kIHRoZSBjb2RlIHdpbGwgZ2V0IHNoaXBwZWQuIFRoZW4gYW4gdW5oYW5kbGVkCi06ZXhjOmBJT0Vycm9yYCBlc2NhcGVzIHRvIHRoZSB1c2VyLCB3aG8gaGFzIHRvIHdhdGNoIHRoZSB1Z2x5IHRyYWNlYmFjay4KK0NvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZSBmaWxlIGdldHMgZGVsZXRlZCBiZXR3ZWVuIHRoZSB0aW1lIHRoZSBjYWxsIHRvCis6ZnVuYzpgb3MucGF0aC5leGlzdHNgIGlzIG1hZGUgYW5kIHRoZSB0aW1lIDpmdW5jOmBvcGVuYCBpcyBjYWxsZWQuIEluIHRoYXQKK2Nhc2UgdGhlIGxhc3QgbGluZSB3aWxsIHJhaXNlIGFuIDpleGM6YElPRXJyb3JgLiAgVGhlIHNhbWUgdGhpbmcgd291bGQgaGFwcGVuCitpZiAqZmlsZSogZXhpc3RzIGJ1dCBoYXMgbm8gcmVhZCBwZXJtaXNzaW9uLiAgU2luY2UgdGVzdGluZyB0aGlzIG9uIGEgbm9ybWFsCittYWNoaW5lIG9uIGV4aXN0ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZXMgbWFrZXMgaXQgc2VlbSBidWdsZXNzLCB0aGUgdGVzdAorcmVzdWx0cyB3aWxsIHNlZW0gZmluZSwgYW5kIHRoZSBjb2RlIHdpbGwgZ2V0IHNoaXBwZWQuICBMYXRlciBhbiB1bmhhbmRsZWQKKzpleGM6YElPRXJyb3JgIChvciBwZXJoYXBzIHNvbWUgb3RoZXIgOmV4YzpgRW52aXJvbm1lbnRFcnJvcmApIGVzY2FwZXMgdG8gdGhlCit1c2VyLCB3aG8gZ2V0cyB0byB3YXRjaCB0aGUgdWdseSB0cmFjZWJhY2suCiAKLUhlcmUgaXMgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LiA6OgorSGVyZSBpcyBhIHNvbWV3aGF0IGJldHRlciB3YXkgdG8gZG8gaXQuIDo6CiAKICAgIGRlZiBnZXRfc3RhdHVzKGZpbGUpOgogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIG9wZW4oZmlsZSkucmVhZGxpbmUoKQotICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgIHByaW50ICJmaWxlIG5vdCBmb3VuZCIKKyAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6CisgICAgICAgICAgIHByaW50ICJVbmFibGUgdG8gb3BlbiBmaWxlOiB7fSIuZm9ybWF0KGVycikKICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAotSW4gdGhpcyB2ZXJzaW9uLCBcKmVpdGhlclwqIHRoZSBmaWxlIGdldHMgb3BlbmVkIGFuZCB0aGUgbGluZSBpcyByZWFkIChzbyBpdAotd29ya3MgZXZlbiBvbiBmbGFreSBORlMgb3IgU01CIGNvbm5lY3Rpb25zKSwgb3IgdGhlIG1lc3NhZ2UgaXMgcHJpbnRlZCBhbmQgdGhlCi1hcHBsaWNhdGlvbiBhYm9ydGVkLgorSW4gdGhpcyB2ZXJzaW9uLCAqZWl0aGVyKiB0aGUgZmlsZSBnZXRzIG9wZW5lZCBhbmQgdGhlIGxpbmUgaXMgcmVhZCAoc28gaXQKK3dvcmtzIGV2ZW4gb24gZmxha3kgTkZTIG9yIFNNQiBjb25uZWN0aW9ucyksIG9yIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZAordGhhdCBwcm92aWRlcyBhbGwgdGhlIGF2YWlsYWJsZSBpbmZvcm1hdGlvbiBvbiB3aHkgdGhlIG9wZW4gZmFpbGVkLCBhbmQgdGhlCithcHBsaWNhdGlvbiBpcyBhYm9ydGVkLgogCi1TdGlsbCwgOmZ1bmM6YGdldF9zdGF0dXNgIG1ha2VzIHRvbyBtYW55IGFzc3VtcHRpb25zIC0tLSB0aGF0IGl0IHdpbGwgb25seSBiZQotdXNlZCBpbiBhIHNob3J0IHJ1bm5pbmcgc2NyaXB0LCBhbmQgbm90LCBzYXksIGluIGEgbG9uZyBydW5uaW5nIHNlcnZlci4gU3VyZSwKLXRoZSBjYWxsZXIgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgOjoKK0hvd2V2ZXIsIGV2ZW4gdGhpcyB2ZXJzaW9uIG9mIDpmdW5jOmBnZXRfc3RhdHVzYCBtYWtlcyB0b28gbWFueSBhc3N1bXB0aW9ucyAtLS0KK3RoYXQgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaW4gYSBzaG9ydCBydW5uaW5nIHNjcmlwdCwgYW5kIG5vdCwgc2F5LCBpbiBhIGxvbmcKK3J1bm5pbmcgc2VydmVyLiBTdXJlLCB0aGUgY2FsbGVyIGNvdWxkIGRvIHNvbWV0aGluZyBsaWtlIDo6CiAKICAgIHRyeToKICAgICAgICBzdGF0dXMgPSBnZXRfc3RhdHVzKGxvZykKICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgogICAgICAgIHN0YXR1cyA9IE5vbmUKIAotU28sIHRyeSB0byBtYWtlIGFzIGZldyBgYGV4Y2VwdGBgIGNsYXVzZXMgaW4geW91ciBjb2RlIC0tLSB0aG9zZSB3aWxsIHVzdWFsbHkgYmUKLWEgY2F0Y2gtYWxsIGluIHRoZSA6ZnVuYzpgbWFpbmAsIG9yIGluc2lkZSBjYWxscyB3aGljaCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuCitCdXQgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5LiAgWW91IHNob3VsZCB0cnkgdG8gdXNlIGFzIGZldyBgYGV4Y2VwdGBgIGNsYXVzZXMgaW4KK3lvdXIgY29kZSBhcyB5b3UgY2FuIC0tLSB0aGUgb25lcyB5b3UgZG8gdXNlIHdpbGwgdXN1YWxseSBiZSBpbnNpZGUgY2FsbHMgd2hpY2gKK3Nob3VsZCBhbHdheXMgc3VjY2VlZCwgb3IgYSBjYXRjaC1hbGwgaW4gYSBtYWluIGZ1bmN0aW9uLgogCi1TbywgdGhlIGJlc3QgdmVyc2lvbiBpcyBwcm9iYWJseSA6OgorU28sIGFuIGV2ZW4gYmV0dGVyIHZlcnNpb24gb2YgOmZ1bmM6YGdldF9zdGF0dXMoKWAgaXMgcHJvYmFibHkgOjoKIAogICAgZGVmIGdldF9zdGF0dXMoZmlsZSk6CiAgICAgICAgcmV0dXJuIG9wZW4oZmlsZSkucmVhZGxpbmUoKQogCi1UaGUgY2FsbGVyIGNhbiBkZWFsIHdpdGggdGhlIGV4Y2VwdGlvbiBpZiBpdCB3YW50cyAoZm9yIGV4YW1wbGUsIGlmIGl0ICB0cmllcworVGhlIGNhbGxlciBjYW4gZGVhbCB3aXRoIHRoZSBleGNlcHRpb24gaWYgaXQgd2FudHMgKGZvciBleGFtcGxlLCBpZiBpdCB0cmllcwogc2V2ZXJhbCBmaWxlcyBpbiBhIGxvb3ApLCBvciBqdXN0IGxldCB0aGUgZXhjZXB0aW9uIGZpbHRlciB1cHdhcmRzIHRvICppdHMqCiBjYWxsZXIuCiAKLVRoZSBsYXN0IHZlcnNpb24gaXMgbm90IHZlcnkgZ29vZCBlaXRoZXIgLS0tIGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUKLWZpbGUgd291bGQgbm90IGJlIGNsb3NlZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgdW50aWwgdGhlIGhhbmRsZXIgZmluaXNoZXMsCi1hbmQgcGVyaGFwcyBub3QgYXQgYWxsIGluIG5vbi1DIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgSnl0aG9uKS4gOjoKK0J1dCB0aGUgbGFzdCB2ZXJzaW9uIHN0aWxsIGhhcyBhIHNlcmlvdXMgcHJvYmxlbSAtLS0gZHVlIHRvIGltcGxlbWVudGF0aW9uCitkZXRhaWxzIGluIENQeXRob24sIHRoZSBmaWxlIHdvdWxkIG5vdCBiZSBjbG9zZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkCit1bnRpbCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgZmluaXNoZXM7IGFuZCwgd29yc2UsIGluIG90aGVyIGltcGxlbWVudGF0aW9ucworKGUuZy4sIEp5dGhvbikgaXQgbWlnaHQgbm90IGJlIGNsb3NlZCBhdCBhbGwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdAorYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworVGhlIGJlc3QgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGBgb3BlbigpYGAgY2FsbCBhcyBhIGNvbnRleHQKK21hbmFnZXIsIHdoaWNoIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZpbGUgZ2V0cyBjbG9zZWQgYXMgc29vbiBhcyB0aGUKK2Z1bmN0aW9uIHJldHVybnM6OgogCiAgICBkZWYgZ2V0X3N0YXR1cyhmaWxlKToKICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZnA6CkBAIC0yNTgsMjMgKzI4MSwyMiBAQAogTW9yZSB1c2VmdWwgZnVuY3Rpb25zIGluIDptb2Q6YG9zLnBhdGhgOiA6ZnVuYzpgYmFzZW5hbWVgLCAgOmZ1bmM6YGRpcm5hbWVgIGFuZAogOmZ1bmM6YHNwbGl0ZXh0YC4KIAotVGhlcmUgYXJlIGFsc28gbWFueSB1c2VmdWwgYnVpbHQtaW4gZnVuY3Rpb25zIHBlb3BsZSBzZWVtIG5vdCB0byBiZSBhd2FyZSBvZiBmb3IKLXNvbWUgcmVhc29uOiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgY2FuIGZpbmQgdGhlIG1pbmltdW0vbWF4aW11bSBvZiBhbnkKLXNlcXVlbmNlIHdpdGggY29tcGFyYWJsZSBzZW1hbnRpY3MsIGZvciBleGFtcGxlLCB5ZXQgbWFueSBwZW9wbGUgd3JpdGUgdGhlaXIgb3duCi06ZnVuYzpgbWF4YC86ZnVuYzpgbWluYC4gQW5vdGhlciBoaWdobHkgdXNlZnVsIGZ1bmN0aW9uIGlzIDpmdW5jOmByZWR1Y2VgLiBBCi1jbGFzc2ljYWwgdXNlIG9mIDpmdW5jOmByZWR1Y2VgIGlzIHNvbWV0aGluZyBsaWtlIDo6CitUaGVyZSBhcmUgYWxzbyBtYW55IHVzZWZ1bCBidWlsdC1pbiBmdW5jdGlvbnMgcGVvcGxlIHNlZW0gbm90IHRvIGJlIGF3YXJlIG9mCitmb3Igc29tZSByZWFzb246IDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCBjYW4gZmluZCB0aGUgbWluaW11bS9tYXhpbXVtIG9mCithbnkgc2VxdWVuY2Ugd2l0aCBjb21wYXJhYmxlIHNlbWFudGljcywgZm9yIGV4YW1wbGUsIHlldCBtYW55IHBlb3BsZSB3cml0ZQordGhlaXIgb3duIDpmdW5jOmBtYXhgLzpmdW5jOmBtaW5gLiBBbm90aGVyIGhpZ2hseSB1c2VmdWwgZnVuY3Rpb24gaXMKKzpmdW5jOmByZWR1Y2VgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlcGVhdGx5IGFwcGx5IGEgYmluYXJ5IG9wZXJhdGlvbiB0byBhCitzZXF1ZW5jZSwgcmVkdWNpbmcgaXQgdG8gYSBzaW5nbGUgdmFsdWUuICBGb3IgZXhhbXBsZSwgY29tcHV0ZSBhIGZhY3RvcmlhbAord2l0aCBhIHNlcmllcyBvZiBtdWx0aXBseSBvcGVyYXRpb25zOjoKIAotICAgaW1wb3J0IHN5cywgb3BlcmF0b3IKLSAgIG51bXMgPSBtYXAoZmxvYXQsIHN5cy5hcmd2WzE6XSkKLSAgIHByaW50IHJlZHVjZShvcGVyYXRvci5hZGQsIG51bXMpL2xlbihudW1zKQorICAgPj4+IG4gPSA0CisgICA+Pj4gaW1wb3J0IG9wZXJhdG9yCisgICA+Pj4gcmVkdWNlKG9wZXJhdG9yLm11bCwgcmFuZ2UoMSwgbisxKSkKKyAgIDI0CiAKLVRoaXMgY3V0ZSBsaXR0bGUgc2NyaXB0IHByaW50cyB0aGUgYXZlcmFnZSBvZiBhbGwgbnVtYmVycyBnaXZlbiBvbiB0aGUgY29tbWFuZAotbGluZS4gVGhlIDpmdW5jOmByZWR1Y2VgIGFkZHMgdXAgYWxsIHRoZSBudW1iZXJzLCBhbmQgdGhlIHJlc3QgaXMganVzdCBzb21lCi1wcmUtIGFuZCBwb3N0cHJvY2Vzc2luZy4KLQotT24gdGhlIHNhbWUgbm90ZSwgbm90ZSB0aGF0IDpmdW5jOmBmbG9hdGAsIDpmdW5jOmBpbnRgIGFuZCA6ZnVuYzpgbG9uZ2AgYWxsCi1hY2NlcHQgYXJndW1lbnRzIG9mIHR5cGUgc3RyaW5nLCBhbmQgc28gYXJlIHN1aXRlZCB0byBwYXJzaW5nIC0tLSBhc3N1bWluZyB5b3UKLWFyZSByZWFkeSB0byBkZWFsIHdpdGggdGhlIDpleGM6YFZhbHVlRXJyb3JgIHRoZXkgcmFpc2UuCitXaGVuIGl0IGNvbWVzIHRvIHBhcnNpbmcgbnVtYmVycywgbm90ZSB0aGF0IDpmdW5jOmBmbG9hdGAsIDpmdW5jOmBpbnRgIGFuZAorOmZ1bmM6YGxvbmdgIGFsbCBhY2NlcHQgc3RyaW5nIGFyZ3VtZW50cyBhbmQgd2lsbCByZWplY3QgaWxsLWZvcm1lZCBzdHJpbmdzCitieSByYWlzaW5nIGFuIDpleGM6YFZhbHVlRXJyb3JgLgogCiAKIFVzaW5nIEJhY2tzbGFzaCB0byBDb250aW51ZSBTdGF0ZW1lbnRzCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKaW5kZXggZjU1M2NlYi4uNGFlMjE2YSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CisrKyBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdApAQCAtNSw5ICs1LDYgQEAKIDpBdXRob3I6IEEuIE0uIEt1Y2hsaW5nCiA6UmVsZWFzZTogMC4zMQogCi0oVGhpcyBpcyBhIGZpcnN0IGRyYWZ0LiAgUGxlYXNlIHNlbmQgY29tbWVudHMvZXJyb3IgcmVwb3J0cy9zdWdnZXN0aW9ucyB0bwotYW1rQGFtay5jYS4pCi0KIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKIGNvbmNlcHRzIG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcsIHdlJ2xsIGxvb2sgYXQgbGFuZ3VhZ2UgZmVhdHVyZXMgc3VjaCBhcwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggMWFiMjkxYS4uMTAwNWMyMyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC01LDcgKzUsNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPgotOlJlbGVhc2U6IDAuMDUKIAogLi4gVE9ETzoKICAgIERvY3VtZW50IGxvb2tiZWhpbmQgYXNzZXJ0aW9ucwpAQCAtMTEzLDcgKzExMiwxMCBAQAogU29tZSBvZiB0aGUgc3BlY2lhbCBzZXF1ZW5jZXMgYmVnaW5uaW5nIHdpdGggYGAnXCdgYCByZXByZXNlbnQgcHJlZGVmaW5lZCBzZXRzCiBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIG9mdGVuIHVzZWZ1bCwgc3VjaCBhcyB0aGUgc2V0IG9mIGRpZ2l0cywgdGhlIHNldCBvZgogbGV0dGVycywgb3IgdGhlIHNldCBvZiBhbnl0aGluZyB0aGF0IGlzbid0IHdoaXRlc3BhY2UuICBUaGUgZm9sbG93aW5nIHByZWRlZmluZWQKLXNwZWNpYWwgc2VxdWVuY2VzIGFyZSBhdmFpbGFibGU6CitzcGVjaWFsIHNlcXVlbmNlcyBhcmUgYSBzdWJzZXQgb2YgdGhvc2UgYXZhaWxhYmxlLiBUaGUgZXF1aXZhbGVudCBjbGFzc2VzIGFyZQorZm9yIGJ5dGUgc3RyaW5nIHBhdHRlcm5zLiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHNlcXVlbmNlcyBhbmQgZXhwYW5kZWQgY2xhc3MKK2RlZmluaXRpb25zIGZvciBVbmljb2RlIHN0cmluZyBwYXR0ZXJucywgc2VlIHRoZSBsYXN0IHBhcnQgb2YKKzpyZWY6YFJlZ3VsYXIgRXhwcmVzc2lvbiBTeW50YXggPHJlLXN5bnRheD5gLgogCiBgYFxkYGAKICAgIE1hdGNoZXMgYW55IGRlY2ltYWwgZGlnaXQ7IHRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgY2xhc3MgYGBbMC05XWBgLgpAQCAtMjY0LDcgKzI2Niw3IEBACiAgICA+Pj4gaW1wb3J0IHJlCiAgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJ2FiKicpCiAgICA+Pj4gcHJpbnQgcAotICAgPF9zcmUuU1JFX1BhdHRlcm4gb2JqZWN0IGF0IDgwYjQxNTA+CisgICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CiAKIDpmdW5jOmByZS5jb21waWxlYCBhbHNvIGFjY2VwdHMgYW4gb3B0aW9uYWwgKmZsYWdzKiBhcmd1bWVudCwgdXNlZCB0byBlbmFibGUKIHZhcmlvdXMgc3BlY2lhbCBmZWF0dXJlcyBhbmQgc3ludGF4IHZhcmlhdGlvbnMuICBXZSdsbCBnbyBvdmVyIHRoZSBhdmFpbGFibGUKQEAgLTM3Nyw3ICszNzksNyBAQAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdbYS16XSsnKQogICAgPj4+IHAKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCA4MGMzYzI4PgorICAgPF9zcmUuU1JFX1BhdHRlcm4gb2JqZWN0IGF0IDB4Li4uPgogCiBOb3csIHlvdSBjYW4gdHJ5IG1hdGNoaW5nIHZhcmlvdXMgc3RyaW5ncyBhZ2FpbnN0IHRoZSBSRSBgYFthLXpdK2BgLiAgQW4gZW1wdHkKIHN0cmluZyBzaG91bGRuJ3QgbWF0Y2ggYXQgYWxsLCBzaW5jZSBgYCtgYCBtZWFucyAnb25lIG9yIG1vcmUgcmVwZXRpdGlvbnMnLgpAQCAtMzk1LDcgKzM5Nyw3IEBACiAKICAgID4+PiBtID0gcC5tYXRjaCgndGVtcG8nKQogICAgPj4+IHByaW50IG0KLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgODBjNGY2OD4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAKIE5vdyB5b3UgY2FuIHF1ZXJ5IHRoZSA6Y2xhc3M6YE1hdGNoT2JqZWN0YCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hdGNoaW5nCiBzdHJpbmcuICAgOmNsYXNzOmBNYXRjaE9iamVjdGAgaW5zdGFuY2VzIGFsc28gaGF2ZSBzZXZlcmFsIG1ldGhvZHMgYW5kCkBAIC00MzQsNyArNDM2LDcgQEAKICAgID4+PiBwcmludCBwLm1hdGNoKCc6OjogbWVzc2FnZScpCiAgICBOb25lCiAgICA+Pj4gbSA9IHAuc2VhcmNoKCc6OjogbWVzc2FnZScpIDsgcHJpbnQgbQotICAgPHJlLk1hdGNoT2JqZWN0IGluc3RhbmNlIGF0IDgwYzk2NTA+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgogICAgPj4+IG0uZ3JvdXAoKQogICAgJ21lc3NhZ2UnCiAgICA+Pj4gbS5zcGFuKCkKQEAgLTQ4NSw3ICs0ODcsNyBAQAogICAgPj4+IHByaW50IHJlLm1hdGNoKHInRnJvbVxzKycsICdGcm9tYWdlIGFtaycpCiAgICBOb25lCiAgICA+Pj4gcmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb20gYW1rIFRodSBNYXkgMTQgMTk6MTI6MTAgMTk5OCcpCi0gICA8cmUuTWF0Y2hPYmplY3QgaW5zdGFuY2UgYXQgODBjNTk3OD4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAKIFVuZGVyIHRoZSBob29kLCB0aGVzZSBmdW5jdGlvbnMgc2ltcGx5IGNyZWF0ZSBhIHBhdHRlcm4gb2JqZWN0IGZvciB5b3UKIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gaXQuICBUaGV5IGFsc28gc3RvcmUgdGhlIGNvbXBpbGVkIG9iamVjdCBpbiBhCkBAIC02ODYsNyArNjg4LDcgQEAKICAgIGxpbmUsIHRoZSBSRSB0byB1c2UgaXMgYGBeRnJvbWBgLiA6OgogCiAgICAgICA+Pj4gcHJpbnQgcmUuc2VhcmNoKCdeRnJvbScsICdGcm9tIEhlcmUgdG8gRXRlcm5pdHknKQotICAgICAgPHJlLk1hdGNoT2JqZWN0IGluc3RhbmNlIGF0IDgwYzE1MjA+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgogICAgICAgPj4+IHByaW50IHJlLnNlYXJjaCgnXkZyb20nLCAnUmVjaXRpbmcgRnJvbSBNZW1vcnknKQogICAgICAgTm9uZQogCkBAIC02OTgsMTEgKzcwMCwxMSBAQAogICAgb3IgYW55IGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBjaGFyYWN0ZXIuICAgICA6OgogCiAgICAgICA+Pj4gcHJpbnQgcmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9JykKLSAgICAgIDxyZS5NYXRjaE9iamVjdCBpbnN0YW5jZSBhdCA4MGFkZmE4PgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KICAgICAgID4+PiBwcmludCByZS5zZWFyY2goJ30kJywgJ3tibG9ja30gJykKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludCByZS5zZWFyY2goJ30kJywgJ3tibG9ja31cbicpCi0gICAgICA8cmUuTWF0Y2hPYmplY3QgaW5zdGFuY2UgYXQgODBhZGZhOD4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CiAKICAgIFRvIG1hdGNoIGEgbGl0ZXJhbCBgYCckJ2BgLCB1c2UgYGBcJGBgIG9yIGVuY2xvc2UgaXQgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLAogICAgYXMgaW4gIGBgWyRdYGAuCkBAIC03MjcsNyArNzI5LDcgQEAKIAogICAgICAgPj4+IHAgPSByZS5jb21waWxlKHInXGJjbGFzc1xiJykKICAgICAgID4+PiBwcmludCBwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykKLSAgICAgIDxyZS5NYXRjaE9iamVjdCBpbnN0YW5jZSBhdCA4MGM4ZjI4PgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KICAgICAgID4+PiBwcmludCBwLnNlYXJjaCgndGhlIGRlY2xhc3NpZmllZCBhbGdvcml0aG0nKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50IHAuc2VhcmNoKCdvbmUgc3ViY2xhc3MgaXMnKQpAQCAtNzQ1LDcgKzc0Nyw3IEBACiAgICAgICA+Pj4gcHJpbnQgcC5zZWFyY2goJ25vIGNsYXNzIGF0IGFsbCcpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQgcC5zZWFyY2goJ1xiJyArICdjbGFzcycgKyAnXGInKQotICAgICAgPHJlLk1hdGNoT2JqZWN0IGluc3RhbmNlIGF0IDgwYzNlZTA+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgogCiAgICBTZWNvbmQsIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgd2hlcmUgdGhlcmUncyBubyB1c2UgZm9yIHRoaXMgYXNzZXJ0aW9uLAogICAgYGBcYmBgIHJlcHJlc2VudHMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uJ3MKQEAgLTEzMTUsNyArMTMxNyw3IEBACiBiZSAqdmVyeSogY29tcGxpY2F0ZWQuICBVc2UgYW4gSFRNTCBvciBYTUwgcGFyc2VyIG1vZHVsZSBmb3Igc3VjaCB0YXNrcy4pCiAKIAotTm90IFVzaW5nIHJlLlZFUkJPU0UKK1VzaW5nIHJlLlZFUkJPU0UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEJ5IG5vdyB5b3UndmUgcHJvYmFibHkgbm90aWNlZCB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGEgdmVyeSBjb21wYWN0CmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vc29ja2V0cy5yc3QgYi9Eb2MvaG93dG8vc29ja2V0cy5yc3QKaW5kZXggMTkyOGMyYS4uNDAwMmEzZCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3NvY2tldHMucnN0CisrKyBiL0RvYy9ob3d0by9zb2NrZXRzLnJzdApAQCAtMzE0LDcgKzMxNCw3IEBACiBOb24tYmxvY2tpbmcgU29ja2V0cwogPT09PT09PT09PT09PT09PT09PT0KIAotSWYgeW91J3ZlIHVuZGVyc3Rvb2QgdGhlIHByZWNlZWRpbmcsIHlvdSBhbHJlYWR5IGtub3cgbW9zdCBvZiB3aGF0IHlvdSBuZWVkIHRvCitJZiB5b3UndmUgdW5kZXJzdG9vZCB0aGUgcHJlY2VkaW5nLCB5b3UgYWxyZWFkeSBrbm93IG1vc3Qgb2Ygd2hhdCB5b3UgbmVlZCB0bwoga25vdyBhYm91dCB0aGUgbWVjaGFuaWNzIG9mIHVzaW5nIHNvY2tldHMuIFlvdSdsbCBzdGlsbCB1c2UgdGhlIHNhbWUgY2FsbHMsIGluCiBtdWNoIHRoZSBzYW1lIHdheXMuIEl0J3MganVzdCB0aGF0LCBpZiB5b3UgZG8gaXQgcmlnaHQsIHlvdXIgYXBwIHdpbGwgYmUgYWxtb3N0CiBpbnNpZGUtb3V0LgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3NvcnRpbmcucnN0IGIvRG9jL2hvd3RvL3NvcnRpbmcucnN0CmluZGV4IDc5MDA4YTcuLjc0NmU0MGMgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9zb3J0aW5nLnJzdAorKysgYi9Eb2MvaG93dG8vc29ydGluZy5yc3QKQEAgLTEsMyArMSw1IEBACisuLiBfc29ydGluZ2hvd3RvOgorCiBTb3J0aW5nIEhPVyBUTwogKioqKioqKioqKioqKioKIApAQCAtNiw4ICs4LDggQEAKIAogCiBQeXRob24gbGlzdHMgaGF2ZSBhIGJ1aWx0LWluIDptZXRoOmBsaXN0LnNvcnRgIG1ldGhvZCB0aGF0IG1vZGlmaWVzIHRoZSBsaXN0Ci1pbi1wbGFjZSBhbmQgYSA6ZnVuYzpgc29ydGVkYCBidWlsdC1pbiBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBhIG5ldyBzb3J0ZWQgbGlzdAotZnJvbSBhbiBpdGVyYWJsZS4KK2luLXBsYWNlLiAgVGhlcmUgaXMgYWxzbyBhIDpmdW5jOmBzb3J0ZWRgIGJ1aWx0LWluIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIGEgbmV3Citzb3J0ZWQgbGlzdCBmcm9tIGFuIGl0ZXJhYmxlLgogCiBJbiB0aGlzIGRvY3VtZW50LCB3ZSBleHBsb3JlIHRoZSB2YXJpb3VzIHRlY2huaXF1ZXMgZm9yIHNvcnRpbmcgZGF0YSB1c2luZyBQeXRob24uCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91bmljb2RlLnJzdCBiL0RvYy9ob3d0by91bmljb2RlLnJzdAppbmRleCA0ZTQ5MjFjLi5mZjNjNzIxIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QKKysrIGIvRG9jL2hvd3RvL3VuaWNvZGUucnN0CkBAIC0yLDEwICsyLDEyIEBACiAgIFVuaWNvZGUgSE9XVE8KICoqKioqKioqKioqKioqKioqCiAKLTpSZWxlYXNlOiAxLjAyCis6UmVsZWFzZTogMS4wMwogCi1UaGlzIEhPV1RPIGRpc2N1c3NlcyBQeXRob24ncyBzdXBwb3J0IGZvciBVbmljb2RlLCBhbmQgZXhwbGFpbnMgdmFyaW91cyBwcm9ibGVtcwotdGhhdCBwZW9wbGUgY29tbW9ubHkgZW5jb3VudGVyIHdoZW4gdHJ5aW5nIHRvIHdvcmsgd2l0aCBVbmljb2RlLgorVGhpcyBIT1dUTyBkaXNjdXNzZXMgUHl0aG9uIDIueCdzIHN1cHBvcnQgZm9yIFVuaWNvZGUsIGFuZCBleHBsYWlucwordmFyaW91cyBwcm9ibGVtcyB0aGF0IHBlb3BsZSBjb21tb25seSBlbmNvdW50ZXIgd2hlbiB0cnlpbmcgdG8gd29yaword2l0aCBVbmljb2RlLiAgKFRoaXMgSE9XVE8gaGFzIG5vdCB5ZXQgYmVlbiB1cGRhdGVkIHRvIGNvdmVyIHRoZSAzLngKK3ZlcnNpb25zIG9mIFB5dGhvbi4pCiAKIEludHJvZHVjdGlvbiB0byBVbmljb2RlCiA9PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQ0LDggKzE0Niw5IEBACiA0LiBNYW55IEludGVybmV0IHN0YW5kYXJkcyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiB0ZXh0dWFsIGRhdGEsIGFuZCBjYW4ndAogICAgaGFuZGxlIGNvbnRlbnQgd2l0aCBlbWJlZGRlZCB6ZXJvIGJ5dGVzLgogCi1HZW5lcmFsbHkgcGVvcGxlIGRvbid0IHVzZSB0aGlzIGVuY29kaW5nLCBpbnN0ZWFkIGNob29zaW5nIG90aGVyIGVuY29kaW5ncyB0aGF0Ci1hcmUgbW9yZSBlZmZpY2llbnQgYW5kIGNvbnZlbmllbnQuCitHZW5lcmFsbHkgcGVvcGxlIGRvbid0IHVzZSB0aGlzIGVuY29kaW5nLCBpbnN0ZWFkIGNob29zaW5nIG90aGVyCitlbmNvZGluZ3MgdGhhdCBhcmUgbW9yZSBlZmZpY2llbnQgYW5kIGNvbnZlbmllbnQuICBVVEYtOCBpcyBwcm9iYWJseQordGhlIG1vc3QgY29tbW9ubHkgc3VwcG9ydGVkIGVuY29kaW5nOyBpdCB3aWxsIGJlIGRpc2N1c3NlZCBiZWxvdy4KIAogRW5jb2RpbmdzIGRvbid0IGhhdmUgdG8gaGFuZGxlIGV2ZXJ5IHBvc3NpYmxlIFVuaWNvZGUgY2hhcmFjdGVyLCBhbmQgbW9zdAogZW5jb2RpbmdzIGRvbid0LiAgRm9yIGV4YW1wbGUsIFB5dGhvbidzIGRlZmF1bHQgZW5jb2RpbmcgaXMgdGhlICdhc2NpaScKQEAgLTIyMiw4ICsyMjUsOCBAQAogPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTg+LCBmb3IgZXhhbXBsZS4KIAogCi1QeXRob24ncyBVbmljb2RlIFN1cHBvcnQKLT09PT09PT09PT09PT09PT09PT09PT09PQorUHl0aG9uIDIueCdzIFVuaWNvZGUgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBOb3cgdGhhdCB5b3UndmUgbGVhcm5lZCB0aGUgcnVkaW1lbnRzIG9mIFVuaWNvZGUsIHdlIGNhbiBsb29rIGF0IFB5dGhvbidzCiBVbmljb2RlIGZlYXR1cmVzLgpAQCAtMjcyLDcgKzI3NSw3IEBACiAgICAgPj4+IHVuaWNvZGUoJ1x4ODBhYmMnLCBlcnJvcnM9J2lnbm9yZScpCiAgICAgdSdhYmMnCiAKLUVuY29kaW5ncyBhcmUgc3BlY2lmaWVkIGFzIHN0cmluZ3MgY29udGFpbmluZyB0aGUgZW5jb2RpbmcncyBuYW1lLiAgUHl0aG9uIDIuNAorRW5jb2RpbmdzIGFyZSBzcGVjaWZpZWQgYXMgc3RyaW5ncyBjb250YWluaW5nIHRoZSBlbmNvZGluZydzIG5hbWUuICBQeXRob24gMi43CiBjb21lcyB3aXRoIHJvdWdobHkgMTAwIGRpZmZlcmVudCBlbmNvZGluZ3M7IHNlZSB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlIGF0CiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgIGZvciBhIGxpc3QuICBTb21lIGVuY29kaW5ncwogaGF2ZSBtdWx0aXBsZSBuYW1lczsgZm9yIGV4YW1wbGUsICdsYXRpbi0xJywgJ2lzb184ODU5XzEnIGFuZCAnODg1OScgYXJlIGFsbApAQCAtNDI3LDExICs0MzAsMTkgQEAKIAogV2hlbiB5b3UgcnVuIGl0IHdpdGggUHl0aG9uIDIuNCwgaXQgd2lsbCBvdXRwdXQgdGhlIGZvbGxvd2luZyB3YXJuaW5nOjoKIAotICAgIGFtazp+JCBweXRob24gcDI2My5weQorICAgIGFtazp+JCBweXRob24yLjQgcDI2My5weQogICAgIHN5czoxOiBEZXByZWNhdGlvbldhcm5pbmc6IE5vbi1BU0NJSSBjaGFyYWN0ZXIgJ1x4ZTknCiAgICAgICAgICBpbiBmaWxlIHAyNjMucHkgb24gbGluZSAyLCBidXQgbm8gZW5jb2RpbmcgZGVjbGFyZWQ7CiAgICAgICAgICBzZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BlcHMvcGVwLTAyNjMuaHRtbCBmb3IgZGV0YWlscwogCitQeXRob24gMi41IGFuZCBoaWdoZXIgYXJlIHN0cmljdGVyIGFuZCB3aWxsIHByb2R1Y2UgYSBzeW50YXggZXJyb3I6OgorCisgICAgYW1rOn4kIHB5dGhvbjIuNSBwMjYzLnB5CisgICAgRmlsZSAiL3RtcC9wMjYzLnB5IiwgbGluZSAyCisgICAgU3ludGF4RXJyb3I6IE5vbi1BU0NJSSBjaGFyYWN0ZXIgJ1x4YzMnIGluIGZpbGUgL3RtcC9wMjYzLnB5CisgICAgICBvbiBsaW5lIDIsIGJ1dCBubyBlbmNvZGluZyBkZWNsYXJlZDsgc2VlCisgICAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDI2My5odG1sIGZvciBkZXRhaWxzCisKIAogVW5pY29kZSBQcm9wZXJ0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3Miw3ICs0ODMsNyBAQAogZnJvbSB0aGUgYWJvdmUgb3V0cHV0LCBgYCdMbCdgYCBtZWFucyAnTGV0dGVyLCBsb3dlcmNhc2UnLCBgYCdObydgYCBtZWFucwogIk51bWJlciwgb3RoZXIiLCBgYCdNbidgYCBpcyAiTWFyaywgbm9uc3BhY2luZyIsIGFuZCBgYCdTbydgYCBpcyAiU3ltYm9sLAogb3RoZXIiLiAgU2VlCi08aHR0cDovL3VuaWNvZGUub3JnL1B1YmxpYy81LjEuMC91Y2QvVUNELmh0bWwjR2VuZXJhbF9DYXRlZ29yeV9WYWx1ZXM+IGZvciBhCis8aHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyNDQvI0dlbmVyYWxfQ2F0ZWdvcnlfVmFsdWVzPiBmb3IgYQogbGlzdCBvZiBjYXRlZ29yeSBjb2Rlcy4KIAogUmVmZXJlbmNlcwpAQCAtNjkzLDcgKzcwNCwxMSBAQAogCiBWZXJzaW9uIDEuMDI6IHBvc3RlZCBBdWd1c3QgMTYgMjAwNS4gIENvcnJlY3RzIGZhY3R1YWwgZXJyb3JzLgogCitWZXJzaW9uIDEuMDM6IHBvc3RlZCBKdW5lIDIwIDIwMTAuICBOb3RlcyB0aGF0IFB5dGhvbiAzLnggaXMgbm90IGNvdmVyZWQsCithbmQgdGhhdCB0aGUgSE9XVE8gb25seSBjb3ZlcnMgMi54LgogCisKKy4uIGNvbW1lbnQgRGVzY3JpYmUgUHl0aG9uIDMueCBzdXBwb3J0IChuZXcgc2VjdGlvbj8gbmV3IGRvY3VtZW50PykKIC4uIGNvbW1lbnQgQWRkaXRpb25hbCB0b3BpYzogYnVpbGRpbmcgUHl0aG9uIHcvIFVDUzIgb3IgVUNTNCBzdXBwb3J0CiAuLiBjb21tZW50IERlc2NyaWJlIG9ic2N1cmUgLVUgc3dpdGNoIHNvbWV3aGVyZT8KIC4uIGNvbW1lbnQgRGVzY3JpYmUgdXNlIG9mIGNvZGVjcy5TdHJlYW1SZWNvZGVyIGFuZCBTdHJlYW1SZWFkZXJXcml0ZXIKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdCBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdAppbmRleCA1YTdiMTZhLi4wMzg1M2Y0IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKKysrIGIvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CkBAIC01MzAsNyArNTMwLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIFRoZXJlIGFyZSBtYW55IHRlbXBsYXRlIGVuZ2luZXMgY29tcGV0aW5nIGZvciBhdHRlbnRpb24sIGJlY3Vhc2UgaXQgaXMKKyAgIFRoZXJlIGFyZSBtYW55IHRlbXBsYXRlIGVuZ2luZXMgY29tcGV0aW5nIGZvciBhdHRlbnRpb24sIGJlY2F1c2UgaXQgaXMKICAgIHByZXR0eSBlYXN5IHRvIGNyZWF0ZSB0aGVtIGluIFB5dGhvbi4gIFRoZSBwYWdlIGBUZW1wbGF0aW5nCiAgICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1RlbXBsYXRpbmc+YF8gaW4gdGhlIHdpa2kgbGlzdHMgYSBiaWcsCiAgICBldmVyLWdyb3dpbmcgbnVtYmVyIG9mIHRoZXNlLiAgVGhlIHRocmVlIGxpc3RlZCBhYm92ZSBhcmUgY29uc2lkZXJlZCAic2Vjb25kCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKaW5kZXggODJlM2ZmYS4uODJkNjA1ZSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKIGltcG9ydCBzbXRwbGliCiAKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWhlYWRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY0YzNmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwucGFyc2VyIGltcG9ydCBQYXJzZXIKKworIyAgSWYgdGhlIGUtbWFpbCBoZWFkZXJzIGFyZSBpbiBhIGZpbGUsIHVuY29tbWVudCB0aGlzIGxpbmU6CisjaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlKG9wZW4obWVzc2FnZWZpbGUsICdyJykpCisKKyMgIE9yIGZvciBwYXJzaW5nIGhlYWRlcnMgaW4gYSBzdHJpbmcsIHVzZToKK2hlYWRlcnMgPSBQYXJzZXIoKS5wYXJzZXN0cignRnJvbTogPHVzZXJAZXhhbXBsZS5jb20+XG4nCisgICAgICAgICdUbzogPHNvbWVvbmVfZWxzZUBleGFtcGxlLmNvbT5cbicKKyAgICAgICAgJ1N1YmplY3Q6IFRlc3QgbWVzc2FnZVxuJworICAgICAgICAnXG4nCisgICAgICAgICdCb2R5IHdvdWxkIGdvIGhlcmVcbicpCisKKyMgIE5vdyB0aGUgaGVhZGVyIGl0ZW1zIGNhbiBiZSBhY2Nlc3NlZCBhcyBhIGRpY3Rpb25hcnk6CitwcmludCAnVG86ICVzJyAlIGhlYWRlcnNbJ3RvJ10KK3ByaW50ICdGcm9tOiAlcycgJSBoZWFkZXJzWydmcm9tJ10KK3ByaW50ICdTdWJqZWN0OiAlcycgJSBoZWFkZXJzWydzdWJqZWN0J10KZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9zcWxpdGUzL2xvYWRfZXh0ZW5zaW9uLnB5IGIvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4OTNjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9zcWxpdGUzL2xvYWRfZXh0ZW5zaW9uLnB5CkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBzcWxpdGUzCisKK2NvbiA9IHNxbGl0ZTMuY29ubmVjdCgiOm1lbW9yeToiKQorCisjIGVuYWJsZSBleHRlbnNpb24gbG9hZGluZworY29uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihUcnVlKQorCisjIExvYWQgdGhlIGZ1bGx0ZXh0IHNlYXJjaCBleHRlbnNpb24KK2Nvbi5leGVjdXRlKCJzZWxlY3QgbG9hZF9leHRlbnNpb24oJy4vZnRzMy5zbycpIikKKworIyBhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gbG9hZCB0aGUgZXh0ZW5zaW9uIHVzaW5nIGFuIEFQSSBjYWxsOgorIyBjb24ubG9hZF9leHRlbnNpb24oIi4vZnRzMy5zbyIpCisKKyMgZGlzYWJsZSBleHRlbnNpb24gbGFvZGluZyBhZ2FpbgorY29uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihGYWxzZSkKKworIyBleGFtcGxlIGZyb20gU1FMaXRlIHdpa2kKK2Nvbi5leGVjdXRlKCJjcmVhdGUgdmlydHVhbCB0YWJsZSByZWNpcGUgdXNpbmcgZnRzMyhuYW1lLCBpbmdyZWRpZW50cykiKQorY29uLmV4ZWN1dGVzY3JpcHQoIiIiCisgICAgaW5zZXJ0IGludG8gcmVjaXBlIChuYW1lLCBpbmdyZWRpZW50cykgdmFsdWVzICgnYnJvY2NvbGkgc3RldycsICdicm9jY29saSBwZXBwZXJzIGNoZWVzZSB0b21hdG9lcycpOworICAgIGluc2VydCBpbnRvIHJlY2lwZSAobmFtZSwgaW5ncmVkaWVudHMpIHZhbHVlcyAoJ3B1bXBraW4gc3RldycsICdwdW1wa2luIG9uaW9ucyBnYXJsaWMgY2VsZXJ5Jyk7CisgICAgaW5zZXJ0IGludG8gcmVjaXBlIChuYW1lLCBpbmdyZWRpZW50cykgdmFsdWVzICgnYnJvY2NvbGkgcGllJywgJ2Jyb2Njb2xpIGNoZWVzZSBvbmlvbnMgZmxvdXInKTsKKyAgICBpbnNlcnQgaW50byByZWNpcGUgKG5hbWUsIGluZ3JlZGllbnRzKSB2YWx1ZXMgKCdwdW1wa2luIHBpZScsICdwdW1wa2luIHN1Z2FyIGZsb3VyIGJ1dHRlcicpOworICAgICIiIikKK2ZvciByb3cgaW4gY29uLmV4ZWN1dGUoInNlbGVjdCByb3dpZCwgbmFtZSwgaW5ncmVkaWVudHMgZnJvbSByZWNpcGUgd2hlcmUgbmFtZSBtYXRjaCAncGllJyIpOgorICAgIHByaW50IHJvdwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL3R6aW5mby1leGFtcGxlcy5weSBiL0RvYy9pbmNsdWRlcy90emluZm8tZXhhbXBsZXMucHkKaW5kZXggMmRlOTVkNC4uNTEzMjQyOSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL3R6aW5mby1leGFtcGxlcy5weQorKysgYi9Eb2MvaW5jbHVkZXMvdHppbmZvLWV4YW1wbGVzLnB5CkBAIC03MSw3ICs3MSw3IEBACiAgICAgZGVmIF9pc2RzdChzZWxmLCBkdCk6CiAgICAgICAgIHR0ID0gKGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXksCiAgICAgICAgICAgICAgIGR0LmhvdXIsIGR0Lm1pbnV0ZSwgZHQuc2Vjb25kLAotICAgICAgICAgICAgICBkdC53ZWVrZGF5KCksIDAsIC0xKQorICAgICAgICAgICAgICBkdC53ZWVrZGF5KCksIDAsIDApCiAgICAgICAgIHN0YW1wID0gX3RpbWUubWt0aW1lKHR0KQogICAgICAgICB0dCA9IF90aW1lLmxvY2FsdGltZShzdGFtcCkKICAgICAgICAgcmV0dXJuIHR0LnRtX2lzZHN0ID4gMApkaWZmIC0tZ2l0IGEvRG9jL2luc3RhbGwvaW5kZXgucnN0IGIvRG9jL2luc3RhbGwvaW5kZXgucnN0CmluZGV4IGE1ZDI2NzEuLmFmMTEzZWUgMTAwNjQ0Ci0tLSBhL0RvYy9pbnN0YWxsL2luZGV4LnJzdAorKysgYi9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKQEAgLTY5NCw2ICs2OTQsOSBAQAogfCBsb2NhbCAgICAgICAgfCA6ZmlsZTpgc2V0dXAuY2ZnYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwoMykgIHwKICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCiAKK09uIGFsbCBwbGF0Zm9ybXMsIHRoZSAicGVyc29uYWwiIGZpbGUgY2FuIGJlIHRlbXBvcmFyaWx5IGRpc2FibGVkIGJ5CitwYXNzaW5nIHRoZSBgLS1uby11c2VyLWNmZ2Agb3B0aW9uLgorCiBOb3RlczoKIAogKDEpCkBAIC05MjksMTUgKzkzMiwzNCBAQAogR05VIEMgLyBDeWd3aW4gLyBNaW5HVwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1UaGVzZSBpbnN0cnVjdGlvbnMgb25seSBhcHBseSBpZiB5b3UncmUgdXNpbmcgYSB2ZXJzaW9uIG9mIFB5dGhvbiBwcmlvciAgdG8KLTIuNC4xIHdpdGggYSBNaW5HVyBwcmlvciB0byAzLjAuMCAod2l0aCBiaW51dGlscy0yLjEzLjkwLTIwMDMwMTExLTEpLgotCiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gdXNlIERpc3R1dGlscyB3aXRoIHRoZSBHTlUgQy9DKysKIGNvbXBpbGVycyBpbiB0aGVpciBDeWd3aW4gYW5kIE1pbkdXIGRpc3RyaWJ1dGlvbnMuIFsjXV8gRm9yIGEgUHl0aG9uIGludGVycHJldGVyCiB0aGF0IHdhcyBidWlsdCB3aXRoIEN5Z3dpbiwgZXZlcnl0aGluZyBzaG91bGQgd29yayB3aXRob3V0IGFueSBvZiB0aGVzZQogZm9sbG93aW5nIHN0ZXBzLgogCi1UaGVzZSBjb21waWxlcnMgcmVxdWlyZSBzb21lIHNwZWNpYWwgbGlicmFyaWVzLiBUaGlzIHRhc2sgaXMgbW9yZSBjb21wbGV4IHRoYW4KK05vdCBhbGwgZXh0ZW5zaW9ucyBjYW4gYmUgYnVpbHQgd2l0aCBNaW5HVyBvciBDeWd3aW4sIGJ1dCBtYW55IGNhbi4gIEV4dGVuc2lvbnMKK21vc3QgbGlrZWx5IHRvIG5vdCB3b3JrIGFyZSB0aG9zZSB0aGF0IHVzZSBDKysgb3IgZGVwZW5kIG9uIE1pY3Jvc29mdCBWaXN1YWwgQworZXh0ZW5zaW9ucy4KKworVG8gbGV0IERpc3R1dGlscyBjb21waWxlIHlvdXIgZXh0ZW5zaW9uIHdpdGggQ3lnd2luIHlvdSBoYXZlIHRvIHR5cGU6OgorCisgICBweXRob24gc2V0dXAucHkgYnVpbGQgLS1jb21waWxlcj1jeWd3aW4KKworYW5kIGZvciBDeWd3aW4gaW4gbm8tY3lnd2luIG1vZGUgWyNdXyBvciBmb3IgTWluR1cgdHlwZTo6CisKKyAgIHB5dGhvbiBzZXR1cC5weSBidWlsZCAtLWNvbXBpbGVyPW1pbmd3MzIKKworSWYgeW91IHdhbnQgdG8gdXNlIGFueSBvZiB0aGVzZSBvcHRpb25zL2NvbXBpbGVycyBhcyBkZWZhdWx0LCB5b3Ugc2hvdWxkCitjb25zaWRlciB3cml0aW5nIGl0IGluIHlvdXIgcGVyc29uYWwgb3Igc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIGZvcgorRGlzdHV0aWxzIChzZWUgc2VjdGlvbiA6cmVmOmBpbnN0LWNvbmZpZy1maWxlc2AuKQorCitPbGRlciBWZXJzaW9ucyBvZiBQeXRob24gYW5kIE1pbkdXCisiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCitUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBvbmx5IGFwcGx5IGlmIHlvdSdyZSB1c2luZyBhIHZlcnNpb24gb2YgUHl0aG9uCitpbmZlcmlvciB0byAyLjQuMSB3aXRoIGEgTWluR1cgaW5mZXJpb3IgdG8gMy4wLjAgKHdpdGgKK2JpbnV0aWxzLTIuMTMuOTAtMjAwMzAxMTEtMSkuCisKK1RoZXNlIGNvbXBpbGVycyByZXF1aXJlIHNvbWUgc3BlY2lhbCBsaWJyYXJpZXMuICBUaGlzIHRhc2sgaXMgbW9yZSBjb21wbGV4IHRoYW4KIGZvciBCb3JsYW5kJ3MgQysrLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByb2dyYW0gdG8gY29udmVydCB0aGUgbGlicmFyeS4gIEZpcnN0CiB5b3UgaGF2ZSB0byBjcmVhdGUgYSBsaXN0IG9mIHN5bWJvbHMgd2hpY2ggdGhlIFB5dGhvbiBETEwgZXhwb3J0cy4gKFlvdSBjYW4gZmluZAogYSBnb29kIHByb2dyYW0gZm9yIHRoaXMgdGFzayBhdApAQCAtOTY3LDE4ICs5ODksNiBAQAogdGhlbSB0b28uIFRoZSBjb252ZXJ0ZWQgZmlsZXMgaGF2ZSB0byByZXNpZGUgaW4gdGhlIHNhbWUgZGlyZWN0b3JpZXMgYXMgdGhlCiBub3JtYWwgbGlicmFyaWVzIGRvLgogCi1UbyBsZXQgRGlzdHV0aWxzIGNvbXBpbGUgeW91ciBleHRlbnNpb24gd2l0aCBDeWd3aW4geW91IG5vdyBoYXZlIHRvIHR5cGUgOjoKLQotICAgcHl0aG9uIHNldHVwLnB5IGJ1aWxkIC0tY29tcGlsZXI9Y3lnd2luCi0KLWFuZCBmb3IgQ3lnd2luIGluIG5vLWN5Z3dpbiBtb2RlIFsjXV8gb3IgZm9yIE1pbkdXIHR5cGU6OgotCi0gICBweXRob24gc2V0dXAucHkgYnVpbGQgLS1jb21waWxlcj1taW5ndzMyCi0KLUlmIHlvdSB3YW50IHRvIHVzZSBhbnkgb2YgdGhlc2Ugb3B0aW9ucy9jb21waWxlcnMgYXMgZGVmYXVsdCwgeW91IHNob3VsZAotY29uc2lkZXIgdG8gd3JpdGUgaXQgaW4geW91ciBwZXJzb25hbCBvciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yCi1EaXN0dXRpbHMgKHNlZSBzZWN0aW9uIDpyZWY6YGluc3QtY29uZmlnLWZpbGVzYC4pCi0KIAogLi4gc2VlYWxzbzo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0IGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKaW5kZXggZjNiZThmYS4uZGUzMTI1MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKQEAgLTg5LDcgKzg5LDcgQEAKIFNpbmNlIHNvbWUgcHJpbnQgc3RhdGVtZW50cyBjYW4gYmUgcGFyc2VkIGFzIGZ1bmN0aW9uIGNhbGxzIG9yIHN0YXRlbWVudHMsIDJ0bzMKIGNhbm5vdCBhbHdheXMgcmVhZCBmaWxlcyBjb250YWluaW5nIHRoZSBwcmludCBmdW5jdGlvbi4gIFdoZW4gMnRvMyBkZXRlY3RzIHRoZQogcHJlc2VuY2Ugb2YgdGhlIGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbmBgIGNvbXBpbGVyIGRpcmVjdGl2ZSwgaXQKLW1vZGlmaWVzIGl0cyBpbnRlcm5hbCBncmFtbWFyIHRvIGludGVycGVydCA6ZnVuYzpgcHJpbnRgIGFzIGEgZnVuY3Rpb24uICBUaGlzCittb2RpZmllcyBpdHMgaW50ZXJuYWwgZ3JhbW1hciB0byBpbnRlcnByZXQgOmZ1bmM6YHByaW50YCBhcyBhIGZ1bmN0aW9uLiAgVGhpcwogY2hhbmdlIGNhbiBhbHNvIGJlIGVuYWJsZWQgbWFudWFsbHkgd2l0aCB0aGUgOm9wdGlvbjpgLXBgIGZsYWcuICBVc2UKIDpvcHRpb246YC1wYCB0byBydW4gZml4ZXJzIG9uIGNvZGUgdGhhdCBhbHJlYWR5IGhhcyBoYWQgaXRzIHByaW50IHN0YXRlbWVudHMKIGNvbnZlcnRlZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L193aW5yZWcucnN0IGIvRG9jL2xpYnJhcnkvX3dpbnJlZy5yc3QKaW5kZXggMzYyNzEzMC4uODI1Y2UxZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvX3dpbnJlZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX3dpbnJlZy5yc3QKQEAgLTY1LDYgKzY1LDM0IEBACiAgICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIAorLi4gZnVuY3Rpb246OiBDcmVhdGVLZXlFeChrZXksIHN1Yl9rZXlbLCByZXNbLCBzYW1dXSkKKworICAgQ3JlYXRlcyBvciBvcGVucyB0aGUgc3BlY2lmaWVkIGtleSwgcmV0dXJuaW5nIGEKKyAgIDpyZWY6YGhhbmRsZSBvYmplY3QgPGhhbmRsZS1vYmplY3Q+YC4KKworICAgKmtleSogaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3Igb25lIG9mIHRoZSBwcmVkZWZpbmVkCisgICA6cmVmOmBIS0VZXyogY29uc3RhbnRzIDxoa2V5LWNvbnN0YW50cz5gLgorCisgICAqc3ViX2tleSogaXMgYSBzdHJpbmcgdGhhdCBuYW1lcyB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuCisKKyAgICpyZXMqIGlzIGEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gVGhlIGRlZmF1bHQgaXMgemVyby4KKworICAgKnNhbSogaXMgYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUgZGVzaXJlZAorICAgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyA6Y29uc3Q6YEtFWV9BTExfQUNDRVNTYC4gIFNlZQorICAgOnJlZjpgQWNjZXNzIFJpZ2h0cyA8YWNjZXNzLXJpZ2h0cz5gIGZvciBvdGhlciBhbGxvd2VkIHZhbHVlcy4KKworCisgICBJZiAqa2V5KiBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgKnN1Yl9rZXkqIG1heSBiZSBgYE5vbmVgYC4gSW4gdGhhdAorICAgY2FzZSwgdGhlIGhhbmRsZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBrZXkgaGFuZGxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24uCisKKyAgIElmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleS4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGEKKyAgIDpleGM6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZnVuY3Rpb246OiBEZWxldGVLZXkoa2V5LCBzdWJfa2V5KQogCiAgICBEZWxldGVzIHRoZSBzcGVjaWZpZWQga2V5LgpAQCAtNzIsOCArMTAwLDggQEAKICAgICprZXkqIGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQKICAgIDpyZWY6YEhLRVlfKiBjb25zdGFudHMgPGhrZXktY29uc3RhbnRzPmAuCiAKLSAgICpzdWJfa2V5KiBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSAgaWRlbnRpZmllZCBieSB0aGUgKmtleSoKLSAgIHBhcmFtZXRlci4gIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgIGBgTm9uZWBgLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmUgc3Via2V5cy4KKyAgICpzdWJfa2V5KiBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5IHRoZSAqa2V5KgorICAgcGFyYW1ldGVyLiAgVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBgYE5vbmVgYCwgYW5kIHRoZSBrZXkgbWF5IG5vdCBoYXZlIHN1YmtleXMuCiAKICAgICpUaGlzIG1ldGhvZCBjYW4gbm90IGRlbGV0ZSBrZXlzIHdpdGggc3Via2V5cy4qCiAKQEAgLTgxLDYgKzEwOSw0MCBAQAogICAgSWYgdGhlIG1ldGhvZCBmYWlscywgYSA6ZXhjOmBXaW5kb3dzRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIAorLi4gZnVuY3Rpb246OiBEZWxldGVLZXlFeChrZXksIHN1Yl9rZXlbLCBzYW1bLCByZXNdXSkKKworICAgRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS4KKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgOmZ1bmM6YERlbGV0ZUtleUV4YCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZSBSZWdEZWxldGVLZXlFeAorICAgICAgV2luZG93cyBBUEkgZnVuY3Rpb24sIHdoaWNoIGlzIHNwZWNpZmljIHRvIDY0LWJpdCB2ZXJzaW9ucyBvZiBXaW5kb3dzLgorICAgICAgU2VlIHRoZSBgUmVnRGVsZXRlS2V5RXggZG9jdW1lbnRhdGlvbgorICAgICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg0NyUyOFZTLjg1JTI5LmFzcHg+YF9fLgorCisgICAqa2V5KiBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkCisgICA6cmVmOmBIS0VZXyogY29uc3RhbnRzIDxoa2V5LWNvbnN0YW50cz5gLgorCisgICAqc3ViX2tleSogaXMgYSBzdHJpbmcgdGhhdCBtdXN0IGJlIGEgc3Via2V5IG9mIHRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUKKyAgICprZXkqIHBhcmFtZXRlci4gVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBgYE5vbmVgYCwgYW5kIHRoZSBrZXkgbWF5IG5vdCBoYXZlCisgICBzdWJrZXlzLgorCisgICAqcmVzKiBpcyBhIHJlc2VydmVkIGludGVnZXIsIGFuZCBtdXN0IGJlIHplcm8uIFRoZSBkZWZhdWx0IGlzIHplcm8uCisKKyAgICpzYW0qIGlzIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgYW4gYWNjZXNzIG1hc2sgdGhhdCBkZXNjcmliZXMgdGhlIGRlc2lyZWQKKyAgIHNlY3VyaXR5IGFjY2VzcyBmb3IgdGhlIGtleS4gIERlZmF1bHQgaXMgOmNvbnN0OmBLRVlfV09XNjRfNjRLRVlgLiAgU2VlCisgICA6cmVmOmBBY2Nlc3MgUmlnaHRzIDxhY2Nlc3MtcmlnaHRzPmAgZm9yIG90aGVyIGFsbG93ZWQgdmFsdWVzLgorCisKKyAgICpUaGlzIG1ldGhvZCBjYW4gbm90IGRlbGV0ZSBrZXlzIHdpdGggc3Via2V5cy4qCisKKyAgIElmIHRoZSBtZXRob2Qgc3VjY2VlZHMsIHRoZSBlbnRpcmUga2V5LCBpbmNsdWRpbmcgYWxsIG9mIGl0cyB2YWx1ZXMsIGlzCisgICByZW1vdmVkLiBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIDpleGM6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgT24gdW5zdXBwb3J0ZWQgV2luZG93cyB2ZXJzaW9ucywgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBmdW5jdGlvbjo6IERlbGV0ZVZhbHVlKGtleSwgdmFsdWUpCiAKICAgIFJlbW92ZXMgYSBuYW1lZCB2YWx1ZSBmcm9tIGEgcmVnaXN0cnkga2V5LgpAQCAtMTgzLDcgKzI0NSw3IEBACiAgICBBIGNhbGwgdG8gOmZ1bmM6YExvYWRLZXlgIGZhaWxzIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB0aGUKICAgIDpjb25zdDpgU0VfUkVTVE9SRV9QUklWSUxFR0VgIHByaXZpbGVnZS4gIE5vdGUgdGhhdCBwcml2aWxlZ2VzIGFyZSBkaWZmZXJlbnQKICAgIGZyb20gcGVybWlzc2lvbnMgLS0gc2VlIHRoZSBgUmVnTG9hZEtleSBkb2N1bWVudGF0aW9uCi0gICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODg5JTI4dj1WUy44NSUyOS5hc3B4PmBfIGZvcgorICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg4OSUyOHY9VlMuODUlMjkuYXNweD5gX18gZm9yCiAgICBtb3JlIGRldGFpbHMuCiAKICAgIElmICprZXkqIGlzIGEgaGFuZGxlIHJldHVybmVkIGJ5IDpmdW5jOmBDb25uZWN0UmVnaXN0cnlgLCB0aGVuIHRoZSBwYXRoCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hbGxvcy5yc3QgYi9Eb2MvbGlicmFyeS9hbGxvcy5yc3QKaW5kZXggNmM1ODM3ZC4uYjEzNTQ4NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYWxsb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FsbG9zLnJzdApAQCAtMTYsNiArMTYsNyBAQAogICAgb3MucnN0CiAgICBpby5yc3QKICAgIHRpbWUucnN0CisgICBhcmdwYXJzZS5yc3QKICAgIG9wdHBhcnNlLnJzdAogICAgZ2V0b3B0LnJzdAogICAgbG9nZ2luZy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTIxNDQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CkBAIC0wLDAgKzEsMTc3NSBAQAorOm1vZDpgYXJncGFyc2VgIC0tLSBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLCBhcmd1bWVudHMgYW5kIHN1Yi1jb21tYW5kcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBhcmdwYXJzZQorICAgOnN5bm9wc2lzOiBDb21tYW5kLWxpbmUgb3B0aW9uIGFuZCBhcmd1bWVudCBwYXJzaW5nIGxpYnJhcnkuCisuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZW4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPgorLi4gdmVyc2lvbmFkZGVkOjogMi43CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEJldGhhcmQgPHN0ZXZlbi5iZXRoYXJkQGdtYWlsLmNvbT4KKworCitUaGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZSBtYWtlcyBpdCBlYXN5IHRvIHdyaXRlIHVzZXIgZnJpZW5kbHkgY29tbWFuZCBsaW5lCitpbnRlcmZhY2VzLiBUaGUgcHJvZ3JhbSBkZWZpbmVzIHdoYXQgYXJndW1lbnRzIGl0IHJlcXVpcmVzLCBhbmQgOm1vZDpgYXJncGFyc2VgCit3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIHBhcnNlIHRob3NlIG91dCBvZiA6ZGF0YTpgc3lzLmFyZ3ZgLiAgVGhlIDptb2Q6YGFyZ3BhcnNlYAorbW9kdWxlIGFsc28gYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgaGVscCBhbmQgdXNhZ2UgbWVzc2FnZXMgYW5kIGlzc3VlcyBlcnJvcnMKK3doZW4gdXNlcnMgZ2l2ZSB0aGUgcHJvZ3JhbSBpbnZhbGlkIGFyZ3VtZW50cy4KKworCitFeGFtcGxlCistLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgY29kZSBpcyBhIFB5dGhvbiBwcm9ncmFtIHRoYXQgdGFrZXMgYSBsaXN0IG9mIGludGVnZXJzIGFuZAorcHJvZHVjZXMgZWl0aGVyIHRoZSBzdW0gb3IgdGhlIG1heDo6CisKKyAgIGltcG9ydCBhcmdwYXJzZQorCisgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUHJvY2VzcyBzb21lIGludGVnZXJzLicpCisgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbnRlZ2VycycsIG1ldGF2YXI9J04nLCB0eXBlPWludCwgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FuIGludGVnZXIgZm9yIHRoZSBhY2N1bXVsYXRvcicpCisgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN1bScsIGRlc3Q9J2FjY3VtdWxhdGUnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdD1zdW0sIGRlZmF1bHQ9bWF4LAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorCisgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgcHJpbnQgYXJncy5hY2N1bXVsYXRlKGFyZ3MuaW50ZWdlcnMpCisKK0Fzc3VtaW5nIHRoZSBQeXRob24gY29kZSBhYm92ZSBpcyBzYXZlZCBpbnRvIGEgZmlsZSBjYWxsZWQgYGBwcm9nLnB5YGAsIGl0IGNhbgorYmUgcnVuIGF0IHRoZSBjb21tYW5kIGxpbmUgYW5kIHByb3ZpZGVzIHVzZWZ1bCBoZWxwIG1lc3NhZ2VzOjoKKworICAgJCBwcm9nLnB5IC1oCisgICB1c2FnZTogcHJvZy5weSBbLWhdIFstLXN1bV0gTiBbTiAuLi5dCisKKyAgIFByb2Nlc3Mgc29tZSBpbnRlZ2Vycy4KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgTiAgICAgICAgICAgYW4gaW50ZWdlciBmb3IgdGhlIGFjY3VtdWxhdG9yCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1zdW0gICAgICAgc3VtIHRoZSBpbnRlZ2VycyAoZGVmYXVsdDogZmluZCB0aGUgbWF4KQorCitXaGVuIHJ1biB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMsIGl0IHByaW50cyBlaXRoZXIgdGhlIHN1bSBvciB0aGUgbWF4IG9mCit0aGUgY29tbWFuZC1saW5lIGludGVnZXJzOjoKKworICAgJCBwcm9nLnB5IDEgMiAzIDQKKyAgIDQKKworICAgJCBwcm9nLnB5IDEgMiAzIDQgLS1zdW0KKyAgIDEwCisKK0lmIGludmFsaWQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgaXNzdWUgYW4gZXJyb3I6OgorCisgICAkIHByb2cucHkgYSBiIGMKKyAgIHVzYWdlOiBwcm9nLnB5IFstaF0gWy0tc3VtXSBOIFtOIC4uLl0KKyAgIHByb2cucHk6IGVycm9yOiBhcmd1bWVudCBOOiBpbnZhbGlkIGludCB2YWx1ZTogJ2EnCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgd2FsayB5b3UgdGhyb3VnaCB0aGlzIGV4YW1wbGUuCisKKworQ3JlYXRpbmcgYSBwYXJzZXIKK15eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmaXJzdCBzdGVwIGluIHVzaW5nIHRoZSA6bW9kOmBhcmdwYXJzZWAgaXMgY3JlYXRpbmcgYW4KKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUHJvY2VzcyBzb21lIGludGVnZXJzLicpCisKK1RoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3Qgd2lsbCBob2xkIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvCitwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGludG8gcHl0aG9uIGRhdGEgdHlwZXMuCisKKworQWRkaW5nIGFyZ3VtZW50cworXl5eXl5eXl5eXl5eXl5eXgorCitGaWxsaW5nIGFuIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSBhcmd1bWVudHMgaXMKK2RvbmUgYnkgbWFraW5nIGNhbGxzIHRvIHRoZSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgbWV0aG9kLgorR2VuZXJhbGx5LCB0aGVzZSBjYWxscyB0ZWxsIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBob3cgdG8gdGFrZSB0aGUgc3RyaW5ncworb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgdHVybiB0aGVtIGludG8gb2JqZWN0cy4gIFRoaXMgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFuZAordXNlZCB3aGVuIDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgaXMgY2FsbGVkLiBGb3IgZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbnRlZ2VycycsIG1ldGF2YXI9J04nLCB0eXBlPWludCwgbmFyZ3M9JysnLAorICAgLi4uICAgICAgICAgICAgICAgICAgICAgaGVscD0nYW4gaW50ZWdlciBmb3IgdGhlIGFjY3VtdWxhdG9yJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN1bScsIGRlc3Q9J2FjY3VtdWxhdGUnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgIGNvbnN0PXN1bSwgZGVmYXVsdD1tYXgsCisgICAuLi4gICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpJykKKworTGF0ZXIsIGNhbGxpbmcgOm1ldGg6YHBhcnNlX2FyZ3NgIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoCit0d28gYXR0cmlidXRlcywgYGBpbnRlZ2Vyc2BgIGFuZCBgYGFjY3VtdWxhdGVgYC4gIFRoZSBgYGludGVnZXJzYGAgYXR0cmlidXRlCit3aWxsIGJlIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBpbnRzLCBhbmQgdGhlIGBgYWNjdW11bGF0ZWBgIGF0dHJpYnV0ZSB3aWxsIGJlCitlaXRoZXIgdGhlIDpmdW5jOmBzdW1gIGZ1bmN0aW9uLCBpZiBgYC0tc3VtYGAgd2FzIHNwZWNpZmllZCBhdCB0aGUgY29tbWFuZCBsaW5lLAorb3IgdGhlIDpmdW5jOmBtYXhgIGZ1bmN0aW9uIGlmIGl0IHdhcyBub3QuCisKKworUGFyc2luZyBhcmd1bWVudHMKK15eXl5eXl5eXl5eXl5eXl5eCisKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHBhcnNlcyBhcmdzIHRocm91Z2ggdGhlCis6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZC4gIFRoaXMgd2lsbCBpbnNwZWN0IHRoZSBjb21tYW5kLWxpbmUsCitjb252ZXJ0IGVhY2ggYXJnIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGFuZCB0aGVuIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLgorSW4gbW9zdCBjYXNlcywgdGhpcyBtZWFucyBhIHNpbXBsZSBuYW1lc3BhY2Ugb2JqZWN0IHdpbGwgYmUgYnVpbHQgdXAgZnJvbQorYXR0cmlidXRlcyBwYXJzZWQgb3V0IG9mIHRoZSBjb21tYW5kLWxpbmU6OgorCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXN1bScsICc3JywgJy0xJywgJzQyJ10pCisgICBOYW1lc3BhY2UoYWNjdW11bGF0ZT08YnVpbHQtaW4gZnVuY3Rpb24gc3VtPiwgaW50ZWdlcnM9WzcsIC0xLCA0Ml0pCisKK0luIGEgc2NyaXB0LCA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIHdpbGwgdHlwaWNhbGx5IGJlIGNhbGxlZCB3aXRoIG5vCithcmd1bWVudHMsIGFuZCB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKK2NvbW1hbmQtbGluZSBhcmdzIGZyb20gOmRhdGE6YHN5cy5hcmd2YC4KKworCitBcmd1bWVudFBhcnNlciBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogQXJndW1lbnRQYXJzZXIoW2Rlc2NyaXB0aW9uXSwgW2VwaWxvZ10sIFtwcm9nXSwgW3VzYWdlXSwgW2FkZF9oZWxwXSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJndW1lbnRfZGVmYXVsdF0sIFtwYXJlbnRzXSwgW3ByZWZpeF9jaGFyc10sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZsaWN0X2hhbmRsZXJdLCBbZm9ybWF0dGVyX2NsYXNzXSkKKworICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdC4gIEVhY2ggcGFyYW1ldGVyIGhhcyBpdHMgb3duIG1vcmUKKyAgIGRldGFpbGVkIGRlc2NyaXB0aW9uIGJlbG93LCBidXQgaW4gc2hvcnQgdGhleSBhcmU6CisKKyAgICogZGVzY3JpcHRpb25fIC0gVGV4dCB0byBkaXNwbGF5IGJlZm9yZSB0aGUgYXJndW1lbnQgaGVscC4KKworICAgKiBlcGlsb2dfIC0gVGV4dCB0byBkaXNwbGF5IGFmdGVyIHRoZSBhcmd1bWVudCBoZWxwLgorCisgICAqIGFkZF9oZWxwXyAtIEFkZCBhIC1oLy0taGVscCBvcHRpb24gdG8gdGhlIHBhcnNlci4gKGRlZmF1bHQ6IGBgVHJ1ZWBgKQorCisgICAqIGFyZ3VtZW50X2RlZmF1bHRfIC0gU2V0IHRoZSBnbG9iYWwgZGVmYXVsdCB2YWx1ZSBmb3IgYXJndW1lbnRzLgorICAgICAoZGVmYXVsdDogYGBOb25lYGApCisKKyAgICogcGFyZW50c18gLSBBIGxpc3Qgb2YgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyB3aG9zZSBhcmd1bWVudHMgc2hvdWxkCisgICAgIGFsc28gYmUgaW5jbHVkZWQuCisKKyAgICogcHJlZml4X2NoYXJzXyAtIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IHByZWZpeCBvcHRpb25hbCBhcmd1bWVudHMuCisgICAgIChkZWZhdWx0OiAnLScpCisKKyAgICogZnJvbWZpbGVfcHJlZml4X2NoYXJzXyAtIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IHByZWZpeCBmaWxlcyBmcm9tCisgICAgIHdoaWNoIGFkZGl0aW9uYWwgYXJndW1lbnRzIHNob3VsZCBiZSByZWFkLiAoZGVmYXVsdDogYGBOb25lYGApCisKKyAgICogZm9ybWF0dGVyX2NsYXNzXyAtIEEgY2xhc3MgZm9yIGN1c3RvbWl6aW5nIHRoZSBoZWxwIG91dHB1dC4KKworICAgKiBjb25mbGljdF9oYW5kbGVyXyAtIFVzdWFsbHkgdW5uZWNlc3NhcnksIGRlZmluZXMgc3RyYXRlZ3kgZm9yIHJlc29sdmluZworICAgICBjb25mbGljdGluZyBvcHRpb25hbHMuCisKKyAgICogcHJvZ18gLSBUaGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSAoZGVmYXVsdDoKKyAgICAgOmRhdGE6YHN5cy5hcmd2WzBdYCkKKworICAgKiB1c2FnZV8gLSBUaGUgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHByb2dyYW0gdXNhZ2UgKGRlZmF1bHQ6IGdlbmVyYXRlZCkKKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBob3cgZWFjaCBvZiB0aGVzZSBhcmUgdXNlZC4KKworCitkZXNjcmlwdGlvbgorXl5eXl5eXl5eXl4KKworTW9zdCBjYWxscyB0byB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3Igd2lsbCB1c2UgdGhlCitgYGRlc2NyaXB0aW9uPWBgIGtleXdvcmQgYXJndW1lbnQuICBUaGlzIGFyZ3VtZW50IGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YKK3doYXQgdGhlIHByb2dyYW0gZG9lcyBhbmQgaG93IGl0IHdvcmtzLiAgSW4gaGVscCBtZXNzYWdlcywgdGhlIGRlc2NyaXB0aW9uIGlzCitkaXNwbGF5ZWQgYmV0d2VlbiB0aGUgY29tbWFuZC1saW5lIHVzYWdlIHN0cmluZyBhbmQgdGhlIGhlbHAgbWVzc2FnZXMgZm9yIHRoZQordmFyaW91cyBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0EgZm9vIHRoYXQgYmFycycpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IGFyZ3BhcnNlLnB5IFstaF0KKworICAgQSBmb28gdGhhdCBiYXJzCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKK0J5IGRlZmF1bHQsIHRoZSBkZXNjcmlwdGlvbiB3aWxsIGJlIGxpbmUtd3JhcHBlZCBzbyB0aGF0IGl0IGZpdHMgd2l0aGluIHRoZQorZ2l2ZW4gc3BhY2UuICBUbyBjaGFuZ2UgdGhpcyBiZWhhdmlvciwgc2VlIHRoZSBmb3JtYXR0ZXJfY2xhc3NfIGFyZ3VtZW50LgorCisKK2VwaWxvZworXl5eXl5eCisKK1NvbWUgcHJvZ3JhbXMgbGlrZSB0byBkaXNwbGF5IGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHByb2dyYW0gYWZ0ZXIgdGhlCitkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzLiAgU3VjaCB0ZXh0IGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgZXBpbG9nPWBgCithcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgZGVzY3JpcHRpb249J0EgZm9vIHRoYXQgYmFycycsCisgICAuLi4gICAgIGVwaWxvZz0iQW5kIHRoYXQncyBob3cgeW91J2QgZm9vIGEgYmFyIikKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogYXJncGFyc2UucHkgWy1oXQorCisgICBBIGZvbyB0aGF0IGJhcnMKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgQW5kIHRoYXQncyBob3cgeW91J2QgZm9vIGEgYmFyCisKK0FzIHdpdGggdGhlIGRlc2NyaXB0aW9uXyBhcmd1bWVudCwgdGhlIGBgZXBpbG9nPWBgIHRleHQgaXMgYnkgZGVmYXVsdAorbGluZS13cmFwcGVkLCBidXQgdGhpcyBiZWhhdmlvciBjYW4gYmUgYWRqdXN0ZWQgd2l0aCB0aGUgZm9ybWF0dGVyX2NsYXNzXworYXJndW1lbnQgdG8gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuCisKKworYWRkX2hlbHAKK15eXl5eXl5eCisKK0J5IGRlZmF1bHQsIEFyZ3VtZW50UGFyc2VyIG9iamVjdHMgYWRkIGFuIG9wdGlvbiB3aGljaCBzaW1wbHkgZGlzcGxheXMKK3RoZSBwYXJzZXIncyBoZWxwIG1lc3NhZ2UuIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGZpbGUgbmFtZWQKK2BgbXlwcm9ncmFtLnB5YGAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGNvZGU6OgorCisgICBpbXBvcnQgYXJncGFyc2UKKyAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworSWYgYGAtaGBgIG9yIGBgLS1oZWxwYGAgaXMgc3VwcGxpZWQgaXMgYXQgdGhlIGNvbW1hbmQtbGluZSwgdGhlIEFyZ3VtZW50UGFyc2VyCitoZWxwIHdpbGwgYmUgcHJpbnRlZDo6CisKKyAgICQgcHl0aG9uIG15cHJvZ3JhbS5weSAtLWhlbHAKKyAgIHVzYWdlOiBteXByb2dyYW0ucHkgWy1oXSBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisKK09jY2FzaW9uYWxseSwgaXQgbWF5IGJlIHVzZWZ1bCB0byBkaXNhYmxlIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGhlbHAgb3B0aW9uLgorVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcGFzc2luZyBgYEZhbHNlYGAgYXMgdGhlIGBgYWRkX2hlbHA9YGAgYXJndW1lbnQgdG8KKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLS1mb28gRk9PICBmb28gaGVscAorCitUaGUgaGVscCBvcHRpb24gaXMgdHlwaWNhbGx5IGBgLWgvLS1oZWxwYGAuIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcworaWYgdGhlIGBgcHJlZml4X2NoYXJzPWBgIGlzIHNwZWNpZmllZCBhbmQgZG9lcyBub3QgaW5jbHVkZSBgYCctJ2BgLCBpbgord2hpY2ggY2FzZSBgYC1oYGAgYW5kIGBgLS1oZWxwYGAgYXJlIG5vdCB2YWxpZCBvcHRpb25zLiAgSW4KK3RoaXMgY2FzZSwgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBgYHByZWZpeF9jaGFyc2BgIGlzIHVzZWQgdG8gcHJlZml4Cit0aGUgaGVscCBvcHRpb25zOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9JysvJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbK2hdCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgK2gsICsraGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisKK3ByZWZpeF9jaGFycworXl5eXl5eXl5eXl5eCisKK01vc3QgY29tbWFuZC1saW5lIG9wdGlvbnMgd2lsbCB1c2UgYGAnLSdgYCBhcyB0aGUgcHJlZml4LCBlLmcuIGBgLWYvLS1mb29gYC4KK1BhcnNlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgZGlmZmVyZW50IG9yIGFkZGl0aW9uYWwgcHJlZml4CitjaGFyYWN0ZXJzLCBlLmcuIGZvciBvcHRpb25zCitsaWtlIGBgK2ZgYCBvciBgYC9mb29gYCwgbWF5IHNwZWNpZnkgdGhlbSB1c2luZyB0aGUgYGBwcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQKK3RvIHRoZSBBcmd1bWVudFBhcnNlciBjb25zdHJ1Y3Rvcjo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgcHJlZml4X2NoYXJzPSctKycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnK2YnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJysrYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnK2YgWCArK2JhciBZJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWScsIGY9J1gnKQorCitUaGUgYGBwcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGAnLSdgYC4gU3VwcGx5aW5nIGEgc2V0IG9mCitjaGFyYWN0ZXJzIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBgYCctJ2BgIHdpbGwgY2F1c2UgYGAtZi8tLWZvb2BgIG9wdGlvbnMgdG8gYmUKK2Rpc2FsbG93ZWQuCisKKworZnJvbWZpbGVfcHJlZml4X2NoYXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU29tZXRpbWVzLCBmb3IgZXhhbXBsZSB3aGVuIGRlYWxpbmcgd2l0aCBhIHBhcnRpY3VsYXJseSBsb25nIGFyZ3VtZW50IGxpc3RzLCBpdAorbWF5IG1ha2Ugc2Vuc2UgdG8ga2VlcCB0aGUgbGlzdCBvZiBhcmd1bWVudHMgaW4gYSBmaWxlIHJhdGhlciB0aGFuIHR5cGluZyBpdCBvdXQKK2F0IHRoZSBjb21tYW5kIGxpbmUuICBJZiB0aGUgYGBmcm9tZmlsZV9wcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQgaXMgZ2l2ZW4gdG8gdGhlCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBjb25zdHJ1Y3RvciwgdGhlbiBhcmd1bWVudHMgdGhhdCBzdGFydCB3aXRoIGFueSBvZiB0aGUKK3NwZWNpZmllZCBjaGFyYWN0ZXJzIHdpbGwgYmUgdHJlYXRlZCBhcyBmaWxlcywgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlCithcmd1bWVudHMgdGhleSBjb250YWluLiAgRm9yIGV4YW1wbGU6OgorCisgICA+Pj4gd2l0aCBvcGVuKCdhcmdzLnR4dCcsICd3JykgYXMgZnA6CisgICAuLi4gICAgZnAud3JpdGUoJy1mXG5iYXInKQorICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLWYnLCAnZm9vJywgJ0BhcmdzLnR4dCddKQorICAgTmFtZXNwYWNlKGY9J2JhcicpCisKK0FyZ3VtZW50cyByZWFkIGZyb20gYSBmaWxlIG11c3QgYnkgZGVmYXVsdCBiZSBvbmUgcGVyIGxpbmUgKGJ1dCBzZWUgYWxzbworOm1ldGg6YGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc2ApIGFuZCBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgaW4gdGhlIHNhbWUKK3BsYWNlIGFzIHRoZSBvcmlnaW5hbCBmaWxlIHJlZmVyZW5jaW5nIGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmUuICBTbyBpbiB0aGUKK2V4YW1wbGUgYWJvdmUsIHRoZSBleHByZXNzaW9uIGBgWyctZicsICdmb28nLCAnQGFyZ3MudHh0J11gYCBpcyBjb25zaWRlcmVkCitlcXVpdmFsZW50IHRvIHRoZSBleHByZXNzaW9uIGBgWyctZicsICdmb28nLCAnLWYnLCAnYmFyJ11gYC4KKworVGhlIGBgZnJvbWZpbGVfcHJlZml4X2NoYXJzPWBgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGBgTm9uZWBgLCBtZWFuaW5nIHRoYXQKK2FyZ3VtZW50cyB3aWxsIG5ldmVyIGJlIHRyZWF0ZWQgYXMgZmlsZSByZWZlcmVuY2VzLgorCisKK2FyZ3VtZW50X2RlZmF1bHQKK15eXl5eXl5eXl5eXl5eXl4KKworR2VuZXJhbGx5LCBhcmd1bWVudCBkZWZhdWx0cyBhcmUgc3BlY2lmaWVkIGVpdGhlciBieSBwYXNzaW5nIGEgZGVmYXVsdCB0bworOm1ldGg6YGFkZF9hcmd1bWVudGAgb3IgYnkgY2FsbGluZyB0aGUgOm1ldGg6YHNldF9kZWZhdWx0c2AgbWV0aG9kcyB3aXRoIGEKK3NwZWNpZmljIHNldCBvZiBuYW1lLXZhbHVlIHBhaXJzLiAgU29tZXRpbWVzIGhvd2V2ZXIsIGl0IG1heSBiZSB1c2VmdWwgdG8KK3NwZWNpZnkgYSBzaW5nbGUgcGFyc2VyLXdpZGUgZGVmYXVsdCBmb3IgYXJndW1lbnRzLiAgVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5CitwYXNzaW5nIHRoZSBgYGFyZ3VtZW50X2RlZmF1bHQ9YGAga2V5d29yZCBhcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4KK0ZvciBleGFtcGxlLCB0byBnbG9iYWxseSBzdXBwcmVzcyBhdHRyaWJ1dGUgY3JlYXRpb24gb24gOm1ldGg6YHBhcnNlX2FyZ3NgCitjYWxscywgd2Ugc3VwcGx5IGBgYXJndW1lbnRfZGVmYXVsdD1TVVBQUkVTU2BgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFyZ3VtZW50X2RlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJzEnLCAnQkFSJ10pCisgICBOYW1lc3BhY2UoYmFyPSdCQVInLCBmb289JzEnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgTmFtZXNwYWNlKCkKKworCitwYXJlbnRzCiteXl5eXl5eCisKK1NvbWV0aW1lcywgc2V2ZXJhbCBwYXJzZXJzIHNoYXJlIGEgY29tbW9uIHNldCBvZiBhcmd1bWVudHMuIFJhdGhlciB0aGFuCityZXBlYXRpbmcgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGFyZ3VtZW50cywgYSBzaW5nbGUgcGFyc2VyIHdpdGggYWxsIHRoZQorc2hhcmVkIGFyZ3VtZW50cyBhbmQgcGFzc2VkIHRvIGBgcGFyZW50cz1gYCBhcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYAorY2FuIGJlIHVzZWQuICBUaGUgYGBwYXJlbnRzPWBgIGFyZ3VtZW50IHRha2VzIGEgbGlzdCBvZiA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYAorb2JqZWN0cywgY29sbGVjdHMgYWxsIHRoZSBwb3NpdGlvbmFsIGFuZCBvcHRpb25hbCBhY3Rpb25zIGZyb20gdGhlbSwgYW5kIGFkZHMKK3RoZXNlIGFjdGlvbnMgdG8gdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZDo6CisKKyAgID4+PiBwYXJlbnRfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICA+Pj4gcGFyZW50X3BhcnNlci5hZGRfYXJndW1lbnQoJy0tcGFyZW50JywgdHlwZT1pbnQpCisKKyAgID4+PiBmb29fcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50X3BhcnNlcl0pCisgICA+Pj4gZm9vX3BhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICA+Pj4gZm9vX3BhcnNlci5wYXJzZV9hcmdzKFsnLS1wYXJlbnQnLCAnMicsICdYWFgnXSkKKyAgIE5hbWVzcGFjZShmb289J1hYWCcsIHBhcmVudD0yKQorCisgICA+Pj4gYmFyX3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF9wYXJzZXJdKQorICAgPj4+IGJhcl9wYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhcicpCisgICA+Pj4gYmFyX3BhcnNlci5wYXJzZV9hcmdzKFsnLS1iYXInLCAnWVlZJ10pCisgICBOYW1lc3BhY2UoYmFyPSdZWVknLCBwYXJlbnQ9Tm9uZSkKKworTm90ZSB0aGF0IG1vc3QgcGFyZW50IHBhcnNlcnMgd2lsbCBzcGVjaWZ5IGBgYWRkX2hlbHA9RmFsc2VgYC4gIE90aGVyd2lzZSwgdGhlCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCB3aWxsIHNlZSB0d28gYGAtaC8tLWhlbHBgYCBvcHRpb25zIChvbmUgaW4gdGhlIHBhcmVudAorYW5kIG9uZSBpbiB0aGUgY2hpbGQpIGFuZCByYWlzZSBhbiBlcnJvci4KKworCitmb3JtYXR0ZXJfY2xhc3MKK15eXl5eXl5eXl5eXl5eXgorCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGFsbG93IHRoZSBoZWxwIGZvcm1hdHRpbmcgdG8gYmUgY3VzdG9taXplZCBieQorc3BlY2lmeWluZyBhbiBhbHRlcm5hdGUgZm9ybWF0dGluZyBjbGFzcy4gIEN1cnJlbnRseSwgdGhlcmUgYXJlIHRocmVlIHN1Y2gKK2NsYXNzZXM6IDpjbGFzczpgYXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyYCwKKzpjbGFzczpgYXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXJgIGFuZAorOmNsYXNzOmBhcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcmAuICBUaGUgZmlyc3QgdHdvIGFsbG93IG1vcmUKK2NvbnRyb2wgb3ZlciBob3cgdGV4dHVhbCBkZXNjcmlwdGlvbnMgYXJlIGRpc3BsYXllZCwgd2hpbGUgdGhlIGxhc3QKK2F1dG9tYXRpY2FsbHkgYWRkcyBpbmZvcm1hdGlvbiBhYm91dCBhcmd1bWVudCBkZWZhdWx0IHZhbHVlcy4KKworQnkgZGVmYXVsdCwgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyBsaW5lLXdyYXAgdGhlIGRlc2NyaXB0aW9uXyBhbmQKK2VwaWxvZ18gdGV4dHMgaW4gY29tbWFuZC1saW5lIGhlbHAgbWVzc2FnZXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAuLi4gICAgIHByb2c9J1BST0cnLAorICAgLi4uICAgICBkZXNjcmlwdGlvbj0nJyd0aGlzIGRlc2NyaXB0aW9uCisgICAuLi4gICAgICAgICB3YXMgaW5kZW50ZWQgd2VpcmQKKyAgIC4uLiAgICAgICAgICAgICBidXQgdGhhdCBpcyBva2F5JycnLAorICAgLi4uICAgICBlcGlsb2c9JycnCisgICAuLi4gICAgICAgICAgICAgbGlrZXdpc2UgZm9yIHRoaXMgZXBpbG9nIHdob3NlIHdoaXRlc3BhY2Ugd2lsbAorICAgLi4uICAgICAgICAgYmUgY2xlYW5lZCB1cCBhbmQgd2hvc2Ugd29yZHMgd2lsbCBiZSB3cmFwcGVkCisgICAuLi4gICAgICAgICBhY3Jvc3MgYSBjb3VwbGUgbGluZXMnJycpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXQorCisgICB0aGlzIGRlc2NyaXB0aW9uIHdhcyBpbmRlbnRlZCB3ZWlyZCBidXQgdGhhdCBpcyBva2F5CisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgIGxpa2V3aXNlIGZvciB0aGlzIGVwaWxvZyB3aG9zZSB3aGl0ZXNwYWNlIHdpbGwgYmUgY2xlYW5lZCB1cCBhbmQgd2hvc2Ugd29yZHMKKyAgIHdpbGwgYmUgd3JhcHBlZCBhY3Jvc3MgYSBjb3VwbGUgbGluZXMKKworUGFzc2luZyA6Y2xhc3M6YGFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcmAgYXMgYGBmb3JtYXR0ZXJfY2xhc3M9YGAKK2luZGljYXRlcyB0aGF0IGRlc2NyaXB0aW9uXyBhbmQgZXBpbG9nXyBhcmUgYWxyZWFkeSBjb3JyZWN0bHkgZm9ybWF0dGVkIGFuZAorc2hvdWxkIG5vdCBiZSBsaW5lLXdyYXBwZWQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAuLi4gICAgIHByb2c9J1BST0cnLAorICAgLi4uICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICAgLi4uICAgICBkZXNjcmlwdGlvbj10ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgLi4uICAgICAgICAgUGxlYXNlIGRvIG5vdCBtZXNzIHVwIHRoaXMgdGV4dCEKKyAgIC4uLiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAuLi4gICAgICAgICAgICAgSSBoYXZlIGluZGVudGVkIGl0CisgICAuLi4gICAgICAgICAgICAgZXhhY3RseSB0aGUgd2F5CisgICAuLi4gICAgICAgICAgICAgSSB3YW50IGl0CisgICAuLi4gICAgICAgICAnJycpKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0KKworICAgUGxlYXNlIGRvIG5vdCBtZXNzIHVwIHRoaXMgdGV4dCEKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBJIGhhdmUgaW5kZW50ZWQgaXQKKyAgICAgIGV4YWN0bHkgdGhlIHdheQorICAgICAgSSB3YW50IGl0CisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKzpjbGFzczpgUmF3VGV4dEhlbHBGb3JtYXR0ZXJgIG1haW50YWlucyB3aGl0ZXNwYWNlIGZvciBhbGwgc29ydHMgb2YgaGVscCB0ZXh0CitpbmNsdWRpbmcgYXJndW1lbnQgZGVzY3JpcHRpb25zLgorCitUaGUgb3RoZXIgZm9ybWF0dGVyIGNsYXNzIGF2YWlsYWJsZSwgOmNsYXNzOmBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcmAsCit3aWxsIGFkZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAuLi4gICAgIHByb2c9J1BST0cnLAorICAgLi4uICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCB0eXBlPWludCwgZGVmYXVsdD00MiwgaGVscD0nRk9PIScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JyonLCBkZWZhdWx0PVsxLCAyLCAzXSwgaGVscD0nQkFSIScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbYmFyIFtiYXIgLi4uXV0KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyICAgICAgICAgQkFSISAoZGVmYXVsdDogWzEsIDIsIDNdKQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIEZPTyEgKGRlZmF1bHQ6IDQyKQorCisKK2NvbmZsaWN0X2hhbmRsZXIKK15eXl5eXl5eXl5eXl5eXl4KKworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyBkbyBub3QgYWxsb3cgdHdvIGFjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcHRpb24KK3N0cmluZy4gIEJ5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdHMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBhbgorYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZSBhbiBhcmd1bWVudCB3aXRoIGFuIG9wdGlvbiBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IGluCit1c2U6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28nLCBoZWxwPSdvbGQgZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nbmV3IGZvbyBoZWxwJykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLgorICAgQXJndW1lbnRFcnJvcjogYXJndW1lbnQgLS1mb286IGNvbmZsaWN0aW5nIG9wdGlvbiBzdHJpbmcocyk6IC0tZm9vCisKK1NvbWV0aW1lcyAoZS5nLiB3aGVuIHVzaW5nIHBhcmVudHNfKSBpdCBtYXkgYmUgdXNlZnVsIHRvIHNpbXBseSBvdmVycmlkZSBhbnkKK29sZGVyIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIG9wdGlvbiBzdHJpbmcuICBUbyBnZXQgdGhpcyBiZWhhdmlvciwgdGhlIHZhbHVlCitgYCdyZXNvbHZlJ2BgIGNhbiBiZSBzdXBwbGllZCB0byB0aGUgYGBjb25mbGljdF9oYW5kbGVyPWBgIGFyZ3VtZW50IG9mCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28nLCBoZWxwPSdvbGQgZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nbmV3IGZvbyBoZWxwJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLWhdIFstZiBGT09dIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLWYgRk9PICAgICAgb2xkIGZvbyBoZWxwCisgICAgLS1mb28gRk9PICAgbmV3IGZvbyBoZWxwCisKK05vdGUgdGhhdCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIG9ubHkgcmVtb3ZlIGFuIGFjdGlvbiBpZiBhbGwgb2YgaXRzCitvcHRpb24gc3RyaW5ncyBhcmUgb3ZlcnJpZGRlbi4gIFNvLCBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIG9sZCBgYC1mLy0tZm9vYGAKK2FjdGlvbiBpcyByZXRhaW5lZCBhcyB0aGUgYGAtZmBgIGFjdGlvbiwgYmVjYXVzZSBvbmx5IHRoZSBgYC0tZm9vYGAgb3B0aW9uCitzdHJpbmcgd2FzIG92ZXJyaWRkZW4uCisKKworcHJvZworXl5eXgorCitCeSBkZWZhdWx0LCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIHVzZXMgYGBzeXMuYXJndlswXWBgIHRvIGRldGVybWluZQoraG93IHRvIGRpc3BsYXkgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gaW4gaGVscCBtZXNzYWdlcy4gIFRoaXMgZGVmYXVsdCBpcyBhbG1vc3QKK2Fsd2F5cyBkZXNpcmFibGUgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGhlbHAgbWVzc2FnZXMgbWF0Y2ggaG93IHRoZSBwcm9ncmFtIHdhcworaW52b2tlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZmlsZSBuYW1lZAorYGBteXByb2dyYW0ucHlgYCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTo6CisKKyAgIGltcG9ydCBhcmdwYXJzZQorICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpCisgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitUaGUgaGVscCBmb3IgdGhpcyBwcm9ncmFtIHdpbGwgZGlzcGxheSBgYG15cHJvZ3JhbS5weWBgIGFzIHRoZSBwcm9ncmFtIG5hbWUKKyhyZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBwcm9ncmFtIHdhcyBpbnZva2VkIGZyb20pOjoKKworICAgJCBweXRob24gbXlwcm9ncmFtLnB5IC0taGVscAorICAgdXNhZ2U6IG15cHJvZ3JhbS5weSBbLWhdIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICQgY2QgLi4KKyAgICQgcHl0aG9uIHN1YmRpclxteXByb2dyYW0ucHkgLS1oZWxwCisgICB1c2FnZTogbXlwcm9ncmFtLnB5IFstaF0gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08gICBmb28gaGVscAorCitUbyBjaGFuZ2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yLCBhbm90aGVyIHZhbHVlIGNhbiBiZSBzdXBwbGllZCB1c2luZyB0aGUKK2BgcHJvZz1gYCBhcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdteXByb2dyYW0nKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBteXByb2dyYW0gWy1oXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCitOb3RlIHRoYXQgdGhlIHByb2dyYW0gbmFtZSwgd2hldGhlciBkZXRlcm1pbmVkIGZyb20gYGBzeXMuYXJndlswXWBgIG9yIGZyb20gdGhlCitgYHByb2c9YGAgYXJndW1lbnQsIGlzIGF2YWlsYWJsZSB0byBoZWxwIG1lc3NhZ2VzIHVzaW5nIHRoZSBgYCUocHJvZylzYGAgZm9ybWF0CitzcGVjaWZpZXIuCisKKzo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdteXByb2dyYW0nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIG9mIHRoZSAlKHByb2cpcyBwcm9ncmFtJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogbXlwcm9ncmFtIFstaF0gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08gICBmb28gb2YgdGhlIG15cHJvZ3JhbSBwcm9ncmFtCisKKwordXNhZ2UKK15eXl5eCisKK0J5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGNhbGN1bGF0ZXMgdGhlIHVzYWdlIG1lc3NhZ2UgZnJvbSB0aGUKK2FyZ3VtZW50cyBpdCBjb250YWluczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPSc/JywgaGVscD0nZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPScrJywgaGVscD0nYmFyIGhlbHAnKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIFtGT09dXSBiYXIgW2JhciAuLi5dCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgICAgICBiYXIgaGVscAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBbRk9PXSAgZm9vIGhlbHAKKworVGhlIGRlZmF1bHQgbWVzc2FnZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgYHVzYWdlPWBgIGtleXdvcmQgYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIHVzYWdlPSclKHByb2cpcyBbb3B0aW9uc10nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBoZWxwPSdmb28gaGVscCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JysnLCBoZWxwPSdiYXIgaGVscCcpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgW29wdGlvbnNdCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgICAgICBiYXIgaGVscAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBbRk9PXSAgZm9vIGhlbHAKKworVGhlIGBgJShwcm9nKXNgYCBmb3JtYXQgc3BlY2lmaWVyIGlzIGF2YWlsYWJsZSB0byBmaWxsIGluIHRoZSBwcm9ncmFtIG5hbWUgaW4KK3lvdXIgdXNhZ2UgbWVzc2FnZXMuCisKKworVGhlIGFkZF9hcmd1bWVudCgpIG1ldGhvZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnQobmFtZSBvciBmbGFncy4uLiwgW2FjdGlvbl0sIFtuYXJnc10sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25zdF0sIFtkZWZhdWx0XSwgW3R5cGVdLCBbY2hvaWNlc10sIFtyZXF1aXJlZF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwXSwgW21ldGF2YXJdLCBbZGVzdF0pCisKKyAgIERlZmluZSBob3cgYSBzaW5nbGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHNob3VsZCBiZSBwYXJzZWQuICBFYWNoIHBhcmFtZXRlcgorICAgaGFzIGl0cyBvd24gbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBiZWxvdywgYnV0IGluIHNob3J0IHRoZXkgYXJlOgorCisgICAqIGBuYW1lIG9yIGZsYWdzYF8gLSBFaXRoZXIgYSBuYW1lIG9yIGEgbGlzdCBvZiBvcHRpb24gc3RyaW5ncywgZS5nLiBgYGZvb2BgCisgICAgIG9yIGBgLWYsIC0tZm9vYGAKKworICAgKiBhY3Rpb25fIC0gVGhlIGJhc2ljIHR5cGUgb2YgYWN0aW9uIHRvIGJlIHRha2VuIHdoZW4gdGhpcyBhcmd1bWVudCBpcworICAgICBlbmNvdW50ZXJlZCBhdCB0aGUgY29tbWFuZC1saW5lLgorCisgICAqIG5hcmdzXyAtIFRoZSBudW1iZXIgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBjb25zdW1lZC4KKworICAgKiBjb25zdF8gLSBBIGNvbnN0YW50IHZhbHVlIHJlcXVpcmVkIGJ5IHNvbWUgYWN0aW9uXyBhbmQgbmFyZ3NfIHNlbGVjdGlvbnMuCisKKyAgICogZGVmYXVsdF8gLSBUaGUgdmFsdWUgcHJvZHVjZWQgaWYgdGhlIGFyZ3VtZW50IGlzIGFic2VudCBmcm9tIHRoZQorICAgICBjb21tYW5kLWxpbmUuCisKKyAgICogdHlwZV8gLSBUaGUgdHlwZSB0byB3aGljaCB0aGUgY29tbWFuZC1saW5lIGFyZyBzaG91bGQgYmUgY29udmVydGVkLgorCisgICAqIGNob2ljZXNfIC0gQSBjb250YWluZXIgb2YgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIHRoZSBhcmd1bWVudC4KKworICAgKiByZXF1aXJlZF8gLSBXaGV0aGVyIG9yIG5vdCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBtYXkgYmUgb21pdHRlZAorICAgICAob3B0aW9uYWxzIG9ubHkpLgorCisgICAqIGhlbHBfIC0gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBhcmd1bWVudCBkb2VzLgorCisgICAqIG1ldGF2YXJfIC0gQSBuYW1lIGZvciB0aGUgYXJndW1lbnQgaW4gdXNhZ2UgbWVzc2FnZXMuCisKKyAgICogZGVzdF8gLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGJlIGFkZGVkIHRvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkKKyAgICAgOm1ldGg6YHBhcnNlX2FyZ3NgLgorCitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIGhvdyBlYWNoIG9mIHRoZXNlIGFyZSB1c2VkLgorCisKK25hbWUgb3IgZmxhZ3MKK15eXl5eXl5eXl5eXl4KKworVGhlIDptZXRoOmBhZGRfYXJndW1lbnRgIG1ldGhvZCBtdXN0IGtub3cgd2hldGhlciBhbiBvcHRpb25hbCBhcmd1bWVudCwgbGlrZQorYGAtZmBgIG9yIGBgLS1mb29gYCwgb3IgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBsaWtlIGEgbGlzdCBvZiBmaWxlbmFtZXMsIGlzCitleHBlY3RlZC4gIFRoZSBmaXJzdCBhcmd1bWVudHMgcGFzc2VkIHRvIDptZXRoOmBhZGRfYXJndW1lbnRgIG11c3QgdGhlcmVmb3JlIGJlCitlaXRoZXIgYSBzZXJpZXMgb2YgZmxhZ3MsIG9yIGEgc2ltcGxlIGFyZ3VtZW50IG5hbWUuICBGb3IgZXhhbXBsZSwgYW4gb3B0aW9uYWwKK2FyZ3VtZW50IGNvdWxkIGJlIGNyZWF0ZWQgbGlrZTo6CisKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycpCisKK3doaWxlIGEgcG9zaXRpb25hbCBhcmd1bWVudCBjb3VsZCBiZSBjcmVhdGVkIGxpa2U6OgorCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKworV2hlbiA6bWV0aDpgcGFyc2VfYXJnc2AgaXMgY2FsbGVkLCBvcHRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSBpZGVudGlmaWVkIGJ5IHRoZQorYGAtYGAgcHJlZml4LCBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIHBvc2l0aW9uYWw6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydCQVInXSkKKyAgIE5hbWVzcGFjZShiYXI9J0JBUicsIGZvbz1Ob25lKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnQkFSJywgJy0tZm9vJywgJ0ZPTyddKQorICAgTmFtZXNwYWNlKGJhcj0nQkFSJywgZm9vPSdGT08nKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnRk9PJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstZiBGT09dIGJhcgorICAgUFJPRzogZXJyb3I6IHRvbyBmZXcgYXJndW1lbnRzCisKKworYWN0aW9uCiteXl5eXl4KKworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyBhc3NvY2lhdGUgY29tbWFuZC1saW5lIGFyZ3Mgd2l0aCBhY3Rpb25zLiAgVGhlc2UKK2FjdGlvbnMgY2FuIGRvIGp1c3QgYWJvdXQgYW55dGhpbmcgd2l0aCB0aGUgY29tbWFuZC1saW5lIGFyZ3MgYXNzb2NpYXRlZCB3aXRoCit0aGVtLCB0aG91Z2ggbW9zdCBhY3Rpb25zIHNpbXBseSBhZGQgYW4gYXR0cmlidXRlIHRvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkKKzptZXRoOmBwYXJzZV9hcmdzYC4gIFRoZSBgYGFjdGlvbmBgIGtleXdvcmQgYXJndW1lbnQgc3BlY2lmaWVzIGhvdyB0aGUKK2NvbW1hbmQtbGluZSBhcmdzIHNob3VsZCBiZSBoYW5kbGVkLiBUaGUgc3VwcG9ydGVkIGFjdGlvbnMgYXJlOgorCisqIGBgJ3N0b3JlJ2BgIC0gVGhpcyBqdXN0IHN0b3JlcyB0aGUgYXJndW1lbnQncyB2YWx1ZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKyAgIGFjdGlvbi4gRm9yIGV4YW1wbGU6OgorCisgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMScuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UoZm9vPScxJykKKworKiBgYCdzdG9yZV9jb25zdCdgYCAtIFRoaXMgc3RvcmVzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIGNvbnN0XyBrZXl3b3JkCisgICBhcmd1bWVudC4gIChOb3RlIHRoYXQgdGhlIGNvbnN0XyBrZXl3b3JkIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHRoZSByYXRoZXIKKyAgIHVuaGVscGZ1bCBgYE5vbmVgYC4pICBUaGUgYGAnc3RvcmVfY29uc3QnYGAgYWN0aW9uIGlzIG1vc3QgY29tbW9ubHkgdXNlZCB3aXRoCisgICBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBzcGVjaWZ5IHNvbWUgc29ydCBvZiBmbGFnLiAgRm9yIGV4YW1wbGU6OgorCisgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbycuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UoZm9vPTQyKQorCisqIGBgJ3N0b3JlX3RydWUnYGAgYW5kIGBgJ3N0b3JlX2ZhbHNlJ2BgIC0gVGhlc2Ugc3RvcmUgdGhlIHZhbHVlcyBgYFRydWVgYCBhbmQKKyAgYGBGYWxzZWBgIHJlc3BlY3RpdmVseS4gIFRoZXNlIGFyZSBzcGVjaWFsIGNhc2VzIG9mIGBgJ3N0b3JlX2NvbnN0J2BgLiAgRm9yCisgIGV4YW1wbGU6OgorCisgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhcicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gLS1iYXInLnNwbGl0KCkpCisgICAgTmFtZXNwYWNlKGJhcj1GYWxzZSwgZm9vPVRydWUpCisKKyogYGAnYXBwZW5kJ2BgIC0gVGhpcyBzdG9yZXMgYSBsaXN0LCBhbmQgYXBwZW5kcyBlYWNoIGFyZ3VtZW50IHZhbHVlIHRvIHRoZQorICBsaXN0LiAgVGhpcyBpcyB1c2VmdWwgdG8gYWxsb3cgYW4gb3B0aW9uIHRvIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKyAgRXhhbXBsZSB1c2FnZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nYXBwZW5kJykKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIDEgLS1mb28gMicuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UoZm9vPVsnMScsICcyJ10pCisKKyogYGAnYXBwZW5kX2NvbnN0J2BgIC0gVGhpcyBzdG9yZXMgYSBsaXN0LCBhbmQgYXBwZW5kcyB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5CisgIHRoZSBjb25zdF8ga2V5d29yZCBhcmd1bWVudCB0byB0aGUgbGlzdC4gIChOb3RlIHRoYXQgdGhlIGNvbnN0XyBrZXl3b3JkCisgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIGBgTm9uZWBgLikgIFRoZSBgYCdhcHBlbmRfY29uc3QnYGAgYWN0aW9uIGlzIHR5cGljYWxseQorICB1c2VmdWwgd2hlbiBtdWx0aXBsZSBhcmd1bWVudHMgbmVlZCB0byBzdG9yZSBjb25zdGFudHMgdG8gdGhlIHNhbWUgbGlzdC4gRm9yCisgIGV4YW1wbGU6OgorCisgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zdHInLCBkZXN0PSd0eXBlcycsIGFjdGlvbj0nYXBwZW5kX2NvbnN0JywgY29uc3Q9c3RyKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWludCcsIGRlc3Q9J3R5cGVzJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1pbnQpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLXN0ciAtLWludCcuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UodHlwZXM9Wzx0eXBlICdzdHInPiwgPHR5cGUgJ2ludCc+XSkKKworKiBgYCd2ZXJzaW9uJ2BgIC0gVGhpcyBleHBlY3RzIGEgYGB2ZXJzaW9uPWBgIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlCisgIDptZXRoOmBhZGRfYXJndW1lbnRgIGNhbGwsIGFuZCBwcmludHMgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdHMgd2hlbgorICBpbnZva2VkLgorCisgICAgPj4+IGltcG9ydCBhcmdwYXJzZQorICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMi4wJykKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXZlcnNpb24nXSkKKyAgICBQUk9HIDIuMAorCitZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBhcmJpdHJhcnkgYWN0aW9uIGJ5IHBhc3NpbmcgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cwordGhlIEFjdGlvbiBBUEkuICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBleHRlbmQKKzpjbGFzczpgYXJncGFyc2UuQWN0aW9uYCwgc3VwcGx5aW5nIGFuIGFwcHJvcHJpYXRlIGBgX19jYWxsX19gYCBtZXRob2QuICBUaGUKK2BgX19jYWxsX19gYCBtZXRob2Qgc2hvdWxkIGFjY2VwdCBmb3VyIHBhcmFtZXRlcnM6CisKKyogYGBwYXJzZXJgYCAtIFRoZSBBcmd1bWVudFBhcnNlciBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhpcyBhY3Rpb24uCisKKyogYGBuYW1lc3BhY2VgYCAtIFRoZSBuYW1lc3BhY2Ugb2JqZWN0IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieQorICA6bWV0aDpgcGFyc2VfYXJnc2AuICBNb3N0IGFjdGlvbnMgYWRkIGFuIGF0dHJpYnV0ZSB0byB0aGlzIG9iamVjdC4KKworKiBgYHZhbHVlc2BgIC0gVGhlIGFzc29jaWF0ZWQgY29tbWFuZC1saW5lIGFyZ3MsIHdpdGggYW55IHR5cGUtY29udmVyc2lvbnMKKyAgYXBwbGllZC4gIChUeXBlLWNvbnZlcnNpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgdHlwZV8ga2V5d29yZCBhcmd1bWVudCB0bworICA6bWV0aDpgYWRkX2FyZ3VtZW50YC4KKworKiBgYG9wdGlvbl9zdHJpbmdgYCAtIFRoZSBvcHRpb24gc3RyaW5nIHRoYXQgd2FzIHVzZWQgdG8gaW52b2tlIHRoaXMgYWN0aW9uLgorICBUaGUgYGBvcHRpb25fc3RyaW5nYGAgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCB3aWxsIGJlIGFic2VudCBpZiB0aGUgYWN0aW9uCisgIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBvc2l0aW9uYWwgYXJndW1lbnQuCisKK0FuIGV4YW1wbGUgb2YgYSBjdXN0b20gYWN0aW9uOjoKKworICAgPj4+IGNsYXNzIEZvb0FjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorICAgLi4uICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgIC4uLiAgICAgICAgIHByaW50ICclciAlciAlcicgJSAobmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmcpCisgICAuLi4gICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCB2YWx1ZXMpCisgICAuLi4KKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249Rm9vQWN0aW9uKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGFjdGlvbj1Gb29BY3Rpb24pCisgICA+Pj4gYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIC0tZm9vIDInLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPU5vbmUsIGZvbz1Ob25lKSAnMScgTm9uZQorICAgTmFtZXNwYWNlKGJhcj0nMScsIGZvbz1Ob25lKSAnMicgJy0tZm9vJworICAgPj4+IGFyZ3MKKyAgIE5hbWVzcGFjZShiYXI9JzEnLCBmb289JzInKQorCisKK25hcmdzCiteXl5eXgorCitBcmd1bWVudFBhcnNlciBvYmplY3RzIHVzdWFsbHkgYXNzb2NpYXRlIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBhcmd1bWVudCB3aXRoIGEKK3NpbmdsZSBhY3Rpb24gdG8gYmUgdGFrZW4uICBUaGUgYGBuYXJnc2BgIGtleXdvcmQgYXJndW1lbnQgYXNzb2NpYXRlcyBhCitkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgd2l0aCBhIHNpbmdsZSBhY3Rpb24uLiAgVGhlIHN1cHBvcnRlZAordmFsdWVzIGFyZToKKworKiBOIChhbiBpbnRlZ2VyKS4gIE4gYXJncyBmcm9tIHRoZSBjb21tYW5kLWxpbmUgd2lsbCBiZSBnYXRoZXJlZCB0b2dldGhlciBpbnRvIGEKKyAgbGlzdC4gIEZvciBleGFtcGxlOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0yKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9MSkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdjIC0tZm9vIGEgYicuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj1bJ2MnXSwgZm9vPVsnYScsICdiJ10pCisKKyAgTm90ZSB0aGF0IGBgbmFyZ3M9MWBgIHByb2R1Y2VzIGEgbGlzdCBvZiBvbmUgaXRlbS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20KKyAgdGhlIGRlZmF1bHQsIGluIHdoaWNoIHRoZSBpdGVtIGlzIHByb2R1Y2VkIGJ5IGl0c2VsZi4KKworKiBgYCc/J2BgLiBPbmUgYXJnIHdpbGwgYmUgY29uc3VtZWQgZnJvbSB0aGUgY29tbWFuZC1saW5lIGlmIHBvc3NpYmxlLCBhbmQKKyAgcHJvZHVjZWQgYXMgYSBzaW5nbGUgaXRlbS4gIElmIG5vIGNvbW1hbmQtbGluZSBhcmcgaXMgcHJlc2VudCwgdGhlIHZhbHVlIGZyb20KKyAgZGVmYXVsdF8gd2lsbCBiZSBwcm9kdWNlZC4gIE5vdGUgdGhhdCBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLCB0aGVyZSBpcyBhbgorICBhZGRpdGlvbmFsIGNhc2UgLSB0aGUgb3B0aW9uIHN0cmluZyBpcyBwcmVzZW50IGJ1dCBub3QgZm9sbG93ZWQgYnkgYQorICBjb21tYW5kLWxpbmUgYXJnLiAgSW4gdGhpcyBjYXNlIHRoZSB2YWx1ZSBmcm9tIGNvbnN0XyB3aWxsIGJlIHByb2R1Y2VkLiAgU29tZQorICBleGFtcGxlcyB0byBpbGx1c3RyYXRlIHRoaXM6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPSc/JywgY29uc3Q9J2MnLCBkZWZhdWx0PSdkJykKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD0nZCcpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFggLS1mb28gWVknLnNwbGl0KCkpCisgICAgIE5hbWVzcGFjZShiYXI9J1hYJywgZm9vPSdZWScpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFggLS1mb28nLnNwbGl0KCkpCisgICAgIE5hbWVzcGFjZShiYXI9J1hYJywgZm9vPSdjJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICAgIE5hbWVzcGFjZShiYXI9J2QnLCBmb289J2QnKQorCisgIE9uZSBvZiB0aGUgbW9yZSBjb21tb24gdXNlcyBvZiBgYG5hcmdzPSc/J2BgIGlzIHRvIGFsbG93IG9wdGlvbmFsIGlucHV0IGFuZAorICBvdXRwdXQgZmlsZXM6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbmZpbGUnLCBuYXJncz0nPycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3InKSwKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1zeXMuc3RkaW4pCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdvdXRmaWxlJywgbmFyZ3M9Jz8nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JyksCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9c3lzLnN0ZG91dCkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnaW5wdXQudHh0JywgJ291dHB1dC50eHQnXSkKKyAgICAgTmFtZXNwYWNlKGluZmlsZT08b3BlbiBmaWxlICdpbnB1dC50eHQnLCBtb2RlICdyJyBhdCAweC4uLj4sCisgICAgICAgICAgICAgICBvdXRmaWxlPTxvcGVuIGZpbGUgJ291dHB1dC50eHQnLCBtb2RlICd3JyBhdCAweC4uLj4pCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgTmFtZXNwYWNlKGluZmlsZT08b3BlbiBmaWxlICc8c3RkaW4+JywgbW9kZSAncicgYXQgMHguLi4+LAorICAgICAgICAgICAgICAgb3V0ZmlsZT08b3BlbiBmaWxlICc8c3Rkb3V0PicsIG1vZGUgJ3cnIGF0IDB4Li4uPikKKworKiBgYCcqJ2BgLiAgQWxsIGNvbW1hbmQtbGluZSBhcmdzIHByZXNlbnQgYXJlIGdhdGhlcmVkIGludG8gYSBsaXN0LiAgTm90ZSB0aGF0CisgIGl0IGdlbmVyYWxseSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudAorICB3aXRoIGBgbmFyZ3M9JyonYGAsIGJ1dCBtdWx0aXBsZSBvcHRpb25hbCBhcmd1bWVudHMgd2l0aCBgYG5hcmdzPScqJ2BgIGlzCisgIHBvc3NpYmxlLiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPScqJykKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFyJywgbmFyZ3M9JyonKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JywgbmFyZ3M9JyonKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2EgYiAtLWZvbyB4IHkgLS1iYXIgMSAyJy5zcGxpdCgpKQorICAgICBOYW1lc3BhY2UoYmFyPVsnMScsICcyJ10sIGJhej1bJ2EnLCAnYiddLCBmb289Wyd4JywgJ3knXSkKKworKiBgYCcrJ2BgLiBKdXN0IGxpa2UgYGAnKidgYCwgYWxsIGNvbW1hbmQtbGluZSBhcmdzIHByZXNlbnQgYXJlIGdhdGhlcmVkIGludG8gYQorICBsaXN0LiAgQWRkaXRpb25hbGx5LCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIHRoZXJlIHdhc24ndCBhdAorICBsZWFzdCBvbmUgY29tbWFuZC1saW5lIGFyZyBwcmVzZW50LiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIG5hcmdzPScrJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdhIGInLnNwbGl0KCkpCisgICAgIE5hbWVzcGFjZShmb289WydhJywgJ2InXSkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICAgIHVzYWdlOiBQUk9HIFstaF0gZm9vIFtmb28gLi4uXQorICAgICBQUk9HOiBlcnJvcjogdG9vIGZldyBhcmd1bWVudHMKKworSWYgdGhlIGBgbmFyZ3NgYCBrZXl3b3JkIGFyZ3VtZW50IGlzIG5vdCBwcm92aWRlZCwgdGhlIG51bWJlciBvZiBhcmdzIGNvbnN1bWVkCitpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3Rpb25fLiAgR2VuZXJhbGx5IHRoaXMgbWVhbnMgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZword2lsbCBiZSBjb25zdW1lZCBhbmQgYSBzaW5nbGUgaXRlbSAobm90IGEgbGlzdCkgd2lsbCBiZSBwcm9kdWNlZC4KKworCitjb25zdAorXl5eXl4KKworVGhlIGBgY29uc3RgYCBhcmd1bWVudCBvZiA6bWV0aDpgYWRkX2FyZ3VtZW50YCBpcyB1c2VkIHRvIGhvbGQgY29uc3RhbnQgdmFsdWVzCit0aGF0IGFyZSBub3QgcmVhZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIHZhcmlvdXMKK0FyZ3VtZW50UGFyc2VyIGFjdGlvbnMuICBUaGUgdHdvIG1vc3QgY29tbW9uIHVzZXMgb2YgaXQgYXJlOgorCisqIFdoZW4gOm1ldGg6YGFkZF9hcmd1bWVudGAgaXMgY2FsbGVkIHdpdGggYGBhY3Rpb249J3N0b3JlX2NvbnN0J2BgIG9yCisgIGBgYWN0aW9uPSdhcHBlbmRfY29uc3QnYGAuICBUaGVzZSBhY3Rpb25zIGFkZCB0aGUgYGBjb25zdGBgIHZhbHVlIHRvIG9uZSBvZgorICB0aGUgYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYC4gIFNlZSB0aGUgYWN0aW9uXworICBkZXNjcmlwdGlvbiBmb3IgZXhhbXBsZXMuCisKKyogV2hlbiA6bWV0aDpgYWRkX2FyZ3VtZW50YCBpcyBjYWxsZWQgd2l0aCBvcHRpb24gc3RyaW5ncyAobGlrZSBgYC1mYGAgb3IKKyAgYGAtLWZvb2BgKSBhbmQgYGBuYXJncz0nPydgYC4gIFRoaXMgY3JlYXRlcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IGNhbiBiZQorICBmb2xsb3dlZCBieSB6ZXJvIG9yIG9uZSBjb21tYW5kLWxpbmUgYXJncy4gIFdoZW4gcGFyc2luZyB0aGUgY29tbWFuZC1saW5lLCBpZgorICB0aGUgb3B0aW9uIHN0cmluZyBpcyBlbmNvdW50ZXJlZCB3aXRoIG5vIGNvbW1hbmQtbGluZSBhcmcgZm9sbG93aW5nIGl0LCB0aGUKKyAgdmFsdWUgb2YgYGBjb25zdGBgIHdpbGwgYmUgYXNzdW1lZCBpbnN0ZWFkLiBTZWUgdGhlIG5hcmdzXyBkZXNjcmlwdGlvbiBmb3IKKyAgZXhhbXBsZXMuCisKK1RoZSBgYGNvbnN0YGAga2V5d29yZCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYE5vbmVgYC4KKworCitkZWZhdWx0CiteXl5eXl5eCisKK0FsbCBvcHRpb25hbCBhcmd1bWVudHMgYW5kIHNvbWUgcG9zaXRpb25hbCBhcmd1bWVudHMgbWF5IGJlIG9taXR0ZWQgYXQgdGhlCitjb21tYW5kLWxpbmUuICBUaGUgYGBkZWZhdWx0YGAga2V5d29yZCBhcmd1bWVudCBvZiA6bWV0aDpgYWRkX2FyZ3VtZW50YCwgd2hvc2UKK3ZhbHVlIGRlZmF1bHRzIHRvIGBgTm9uZWBgLCBzcGVjaWZpZXMgd2hhdCB2YWx1ZSBzaG91bGQgYmUgdXNlZCBpZiB0aGUKK2NvbW1hbmQtbGluZSBhcmcgaXMgbm90IHByZXNlbnQuICBGb3Igb3B0aW9uYWwgYXJndW1lbnRzLCB0aGUgYGBkZWZhdWx0YGAgdmFsdWUKK2lzIHVzZWQgd2hlbiB0aGUgb3B0aW9uIHN0cmluZyB3YXMgbm90IHByZXNlbnQgYXQgdGhlIGNvbW1hbmQgbGluZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBkZWZhdWx0PTQyKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAyJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz0nMicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289NDIpCisKK0ZvciBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aXRoIG5hcmdzXyBgYD0nPydgYCBvciBgYCcqJ2BgLCB0aGUgYGBkZWZhdWx0YGAgdmFsdWUKK2lzIHVzZWQgd2hlbiBubyBjb21tYW5kLWxpbmUgYXJnIHdhcyBwcmVzZW50OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2EnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPSdhJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz00MikKKworCitQcm92aWRpbmcgYGBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTYGAgY2F1c2VzIG5vIGF0dHJpYnV0ZSB0byBiZSBhZGRlZCBpZiB0aGUKK2NvbW1hbmQtbGluZSBhcmd1bWVudCB3YXMgbm90IHByZXNlbnQuOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICBOYW1lc3BhY2UoKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnMSddKQorICAgTmFtZXNwYWNlKGZvbz0nMScpCisKKwordHlwZQorXl5eXgorCitCeSBkZWZhdWx0LCBBcmd1bWVudFBhcnNlciBvYmplY3RzIHJlYWQgY29tbWFuZC1saW5lIGFyZ3MgaW4gYXMgc2ltcGxlIHN0cmluZ3MuCitIb3dldmVyLCBxdWl0ZSBvZnRlbiB0aGUgY29tbWFuZC1saW5lIHN0cmluZyBzaG91bGQgaW5zdGVhZCBiZSBpbnRlcnByZXRlZCBhcworYW5vdGhlciB0eXBlLCBsaWtlIGEgOmNsYXNzOmBmbG9hdGAsIDpjbGFzczpgaW50YCBvciA6Y2xhc3M6YGZpbGVgLiAgVGhlCitgYHR5cGVgYCBrZXl3b3JkIGFyZ3VtZW50IG9mIDptZXRoOmBhZGRfYXJndW1lbnRgIGFsbG93cyBhbnkgbmVjZXNzYXJ5Cit0eXBlLWNoZWNraW5nIGFuZCB0eXBlLWNvbnZlcnNpb25zIHRvIGJlIHBlcmZvcm1lZC4gIE1hbnkgY29tbW9uIGJ1aWx0LWluIHR5cGVzCitjYW4gYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgdHlwZWBgIGFyZ3VtZW50OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCB0eXBlPWludCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWZpbGUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzIgdGVtcC50eHQnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPTxvcGVuIGZpbGUgJ3RlbXAudHh0JywgbW9kZSAncicgYXQgMHguLi4+LCBmb289MikKKworVG8gZWFzZSB0aGUgdXNlIG9mIHZhcmlvdXMgdHlwZXMgb2YgZmlsZXMsIHRoZSBhcmdwYXJzZSBtb2R1bGUgcHJvdmlkZXMgdGhlCitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAgYW5kIGBgYnVmc2l6ZT1gYCBhcmd1bWVudHMgb2YgdGhlCitgYGZpbGVgYCBvYmplY3QuICBGb3IgZXhhbXBsZSwgYGBGaWxlVHlwZSgndycpYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEKK3dyaXRhYmxlIGZpbGU6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3cnKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ291dC50eHQnXSkKKyAgIE5hbWVzcGFjZShiYXI9PG9wZW4gZmlsZSAnb3V0LnR4dCcsIG1vZGUgJ3cnIGF0IDB4Li4uPikKKworYGB0eXBlPWBgIGNhbiB0YWtlIGFueSBjYWxsYWJsZSB0aGF0IHRha2VzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCBhbmQgcmV0dXJucwordGhlIHR5cGUtY29udmVydGVkIHZhbHVlOjoKKworICAgPj4+IGRlZiBwZXJmZWN0X3NxdWFyZShzdHJpbmcpOgorICAgLi4uICAgICB2YWx1ZSA9IGludChzdHJpbmcpCisgICAuLi4gICAgIHNxcnQgPSBtYXRoLnNxcnQodmFsdWUpCisgICAuLi4gICAgIGlmIHNxcnQgIT0gaW50KHNxcnQpOgorICAgLi4uICAgICAgICAgbXNnID0gIiVyIGlzIG5vdCBhIHBlcmZlY3Qgc3F1YXJlIiAlIHN0cmluZworICAgLi4uICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IobXNnKQorICAgLi4uICAgICByZXR1cm4gdmFsdWUKKyAgIC4uLgorICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9cGVyZmVjdF9zcXVhcmUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzknLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTkpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzcnLnNwbGl0KCkpCisgICB1c2FnZTogUFJPRyBbLWhdIGZvbworICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IGZvbzogJzcnIGlzIG5vdCBhIHBlcmZlY3Qgc3F1YXJlCisKK1RoZSBjaG9pY2VzXyBrZXl3b3JkIGFyZ3VtZW50IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHR5cGUgY2hlY2tlcnMgdGhhdAorc2ltcGx5IGNoZWNrIGFnYWluc3QgYSByYW5nZSBvZiB2YWx1ZXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgdHlwZT1pbnQsIGNob2ljZXM9eHJhbmdlKDUsIDEwKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnNycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289NykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMTEnLnNwbGl0KCkpCisgICB1c2FnZTogUFJPRyBbLWhdIHs1LDYsNyw4LDl9CisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiBpbnZhbGlkIGNob2ljZTogMTEgKGNob29zZSBmcm9tIDUsIDYsIDcsIDgsIDkpCisKK1NlZSB0aGUgY2hvaWNlc18gc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisKK2Nob2ljZXMKK15eXl5eXl4KKworU29tZSBjb21tYW5kLWxpbmUgYXJncyBzaG91bGQgYmUgc2VsZWN0ZWQgZnJvbSBhIHJlc3RyaWN0ZWQgc2V0IG9mIHZhbHVlcy4KK1RoZXNlIGNhbiBiZSBoYW5kbGVkIGJ5IHBhc3NpbmcgYSBjb250YWluZXIgb2JqZWN0IGFzIHRoZSBgYGNob2ljZXNgYCBrZXl3b3JkCithcmd1bWVudCB0byA6bWV0aDpgYWRkX2FyZ3VtZW50YC4gIFdoZW4gdGhlIGNvbW1hbmQtbGluZSBpcyBwYXJzZWQsIGFyZyB2YWx1ZXMKK3dpbGwgYmUgY2hlY2tlZCwgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgaWYgdGhlIGFyZyB3YXMgbm90IG9uZQorb2YgdGhlIGFjY2VwdGFibGUgdmFsdWVzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIGNob2ljZXM9J2FiYycpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2MnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPSdjJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWCcuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0ge2EsYixjfQorICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IGZvbzogaW52YWxpZCBjaG9pY2U6ICdYJyAoY2hvb3NlIGZyb20gJ2EnLCAnYicsICdjJykKKworTm90ZSB0aGF0IGluY2x1c2lvbiBpbiB0aGUgYGBjaG9pY2VzYGAgY29udGFpbmVyIGlzIGNoZWNrZWQgYWZ0ZXIgYW55IHR5cGVfCitjb252ZXJzaW9ucyBoYXZlIGJlZW4gcGVyZm9ybWVkLCBzbyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYGBjaG9pY2VzYGAKK2NvbnRhaW5lciBzaG91bGQgbWF0Y2ggdGhlIHR5cGVfIHNwZWNpZmllZDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCB0eXBlPWNvbXBsZXgsIGNob2ljZXM9WzEsIDFqXSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMWonLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTFqKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLSAtNCcuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gezEsMWp9CisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiBpbnZhbGlkIGNob2ljZTogKC00KzBqKSAoY2hvb3NlIGZyb20gMSwgMWopCisKK0FueSBvYmplY3QgdGhhdCBzdXBwb3J0cyB0aGUgYGBpbmBgIG9wZXJhdG9yIGNhbiBiZSBwYXNzZWQgYXMgdGhlIGBgY2hvaWNlc2BgCit2YWx1ZSwgc28gOmNsYXNzOmBkaWN0YCBvYmplY3RzLCA6Y2xhc3M6YHNldGAgb2JqZWN0cywgY3VzdG9tIGNvbnRhaW5lcnMsCitldGMuIGFyZSBhbGwgc3VwcG9ydGVkLgorCisKK3JlcXVpcmVkCiteXl5eXl5eXgorCitJbiBnZW5lcmFsLCB0aGUgYXJncGFyc2UgbW9kdWxlIGFzc3VtZXMgdGhhdCBmbGFncyBsaWtlIGBgLWZgYCBhbmQgYGAtLWJhcmBgCitpbmRpY2F0ZSAqb3B0aW9uYWwqIGFyZ3VtZW50cywgd2hpY2ggY2FuIGFsd2F5cyBiZSBvbWl0dGVkIGF0IHRoZSBjb21tYW5kLWxpbmUuCitUbyBtYWtlIGFuIG9wdGlvbiAqcmVxdWlyZWQqLCBgYFRydWVgYCBjYW4gYmUgc3BlY2lmaWVkIGZvciB0aGUgYGByZXF1aXJlZD1gYAora2V5d29yZCBhcmd1bWVudCB0byA6bWV0aDpgYWRkX2FyZ3VtZW50YDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCByZXF1aXJlZD1UcnVlKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnQkFSJ10pCisgICBOYW1lc3BhY2UoZm9vPSdCQVInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgdXNhZ2U6IGFyZ3BhcnNlLnB5IFstaF0gWy0tZm9vIEZPT10KKyAgIGFyZ3BhcnNlLnB5OiBlcnJvcjogb3B0aW9uIC0tZm9vIGlzIHJlcXVpcmVkCisKK0FzIHRoZSBleGFtcGxlIHNob3dzLCBpZiBhbiBvcHRpb24gaXMgbWFya2VkIGFzIGBgcmVxdWlyZWRgYCwgOm1ldGg6YHBhcnNlX2FyZ3NgCit3aWxsIHJlcG9ydCBhbiBlcnJvciBpZiB0aGF0IG9wdGlvbiBpcyBub3QgcHJlc2VudCBhdCB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBub3RlOjoKKworICAgIFJlcXVpcmVkIG9wdGlvbnMgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIGJhZCBmb3JtIGJlY2F1c2UgdXNlcnMgZXhwZWN0CisgICAgKm9wdGlvbnMqIHRvIGJlICpvcHRpb25hbCosIGFuZCB0aHVzIHRoZXkgc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiBwb3NzaWJsZS4KKworCitoZWxwCiteXl5eCisKK1RoZSBgYGhlbHBgYCB2YWx1ZSBpcyBhIHN0cmluZyBjb250YWluaW5nIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGFyZ3VtZW50LgorV2hlbiBhIHVzZXIgcmVxdWVzdHMgaGVscCAodXN1YWxseSBieSB1c2luZyBgYC1oYGAgb3IgYGAtLWhlbHBgYCBhdCB0aGUKK2NvbW1hbmQtbGluZSksIHRoZXNlIGBgaGVscGBgIGRlc2NyaXB0aW9ucyB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIGVhY2gKK2FyZ3VtZW50OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J2Zyb2JibGUnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgIC4uLiAgICAgICAgIGhlbHA9J2ZvbyB0aGUgYmFycyBiZWZvcmUgZnJvYmJsaW5nJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nKycsCisgICAuLi4gICAgICAgICBoZWxwPSdvbmUgb2YgdGhlIGJhcnMgdG8gYmUgZnJvYmJsZWQnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctaCcuc3BsaXQoKSkKKyAgIHVzYWdlOiBmcm9iYmxlIFstaF0gWy0tZm9vXSBiYXIgW2JhciAuLi5dCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgb25lIG9mIHRoZSBiYXJzIHRvIGJlIGZyb2JibGVkCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gICBmb28gdGhlIGJhcnMgYmVmb3JlIGZyb2JibGluZworCitUaGUgYGBoZWxwYGAgc3RyaW5ncyBjYW4gaW5jbHVkZSB2YXJpb3VzIGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHJlcGV0aXRpb24KK29mIHRoaW5ncyBsaWtlIHRoZSBwcm9ncmFtIG5hbWUgb3IgdGhlIGFyZ3VtZW50IGRlZmF1bHRfLiAgVGhlIGF2YWlsYWJsZQorc3BlY2lmaWVycyBpbmNsdWRlIHRoZSBwcm9ncmFtIG5hbWUsIGBgJShwcm9nKXNgYCBhbmQgbW9zdCBrZXl3b3JkIGFyZ3VtZW50cyB0bworOm1ldGg6YGFkZF9hcmd1bWVudGAsIGUuZy4gYGAlKGRlZmF1bHQpc2BgLCBgYCUodHlwZSlzYGAsIGV0Yy46OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nZnJvYmJsZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9Jz8nLCB0eXBlPWludCwgZGVmYXVsdD00MiwKKyAgIC4uLiAgICAgICAgIGhlbHA9J3RoZSBiYXIgdG8gJShwcm9nKXMgKGRlZmF1bHQ6ICUoZGVmYXVsdClzKScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IGZyb2JibGUgWy1oXSBbYmFyXQorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBiYXIgICAgIHRoZSBiYXIgdG8gZnJvYmJsZSAoZGVmYXVsdDogNDIpCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKworbWV0YXZhcgorXl5eXl5eXgorCitXaGVuIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGdlbmVyYXRlcyBoZWxwIG1lc3NhZ2VzLCBpdCBuZWVkIHNvbWUgd2F5IHRvIHJlZmVyCit0byBlYWNoIGV4cGVjdGVkIGFyZ3VtZW50LiAgQnkgZGVmYXVsdCwgQXJndW1lbnRQYXJzZXIgb2JqZWN0cyB1c2UgdGhlIGRlc3RfCit2YWx1ZSBhcyB0aGUgIm5hbWUiIG9mIGVhY2ggb2JqZWN0LiAgQnkgZGVmYXVsdCwgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQKK2FjdGlvbnMsIHRoZSBkZXN0XyB2YWx1ZSBpcyB1c2VkIGRpcmVjdGx5LCBhbmQgZm9yIG9wdGlvbmFsIGFyZ3VtZW50IGFjdGlvbnMsCit0aGUgZGVzdF8gdmFsdWUgaXMgdXBwZXJjYXNlZC4gIFNvLCBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHdpdGgKK2BgZGVzdD0nYmFyJ2BgIHdpbGwgdGhhdCBhcmd1bWVudCB3aWxsIGJlIHJlZmVycmVkIHRvIGFzIGBgYmFyYGAuIEEgc2luZ2xlCitvcHRpb25hbCBhcmd1bWVudCBgYC0tZm9vYGAgdGhhdCBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZword2lsbCBiZSByZWZlcnJlZCB0byBhcyBgYEZPT2BgLiAgQW4gZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ1ggLS1mb28gWScuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9J1gnLCBmb289J1knKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiAgWy1oXSBbLS1mb28gRk9PXSBiYXIKKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gRk9PCisKK0FuIGFsdGVybmF0aXZlIG5hbWUgY2FuIGJlIHNwZWNpZmllZCB3aXRoIGBgbWV0YXZhcmBgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG1ldGF2YXI9J1lZWScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbWV0YXZhcj0nWFhYJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWCAtLWZvbyBZJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWCcsIGZvbz0nWScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6ICBbLWhdIFstLWZvbyBZWVldIFhYWAorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBYWFgKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBZWVkKKworTm90ZSB0aGF0IGBgbWV0YXZhcmBgIG9ubHkgY2hhbmdlcyB0aGUgKmRpc3BsYXllZCogbmFtZSAtIHRoZSBuYW1lIG9mIHRoZQorYXR0cmlidXRlIG9uIHRoZSA6bWV0aDpgcGFyc2VfYXJnc2Agb2JqZWN0IGlzIHN0aWxsIGRldGVybWluZWQgYnkgdGhlIGRlc3RfCit2YWx1ZS4KKworRGlmZmVyZW50IHZhbHVlcyBvZiBgYG5hcmdzYGAgbWF5IGNhdXNlIHRoZSBtZXRhdmFyIHRvIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCitQcm92aWRpbmcgYSB0dXBsZSB0byBgYG1ldGF2YXJgYCBzcGVjaWZpZXMgYSBkaWZmZXJlbnQgZGlzcGxheSBmb3IgZWFjaCBvZiB0aGUKK2FyZ3VtZW50czo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIG5hcmdzPTIpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0yLCBtZXRhdmFyPSgnYmFyJywgJ2JheicpKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFggWF0gWy0tZm9vIGJhciBiYXpdCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLXggWCBYCisgICAgLS1mb28gYmFyIGJhegorCisKK2Rlc3QKK15eXl4KKworTW9zdCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBhY3Rpb25zIGFkZCBzb21lIHZhbHVlIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUKK29iamVjdCByZXR1cm5lZCBieSA6bWV0aDpgcGFyc2VfYXJnc2AuICBUaGUgbmFtZSBvZiB0aGlzIGF0dHJpYnV0ZSBpcyBkZXRlcm1pbmVkCitieSB0aGUgYGBkZXN0YGAga2V5d29yZCBhcmd1bWVudCBvZiA6bWV0aDpgYWRkX2FyZ3VtZW50YC4gIEZvciBwb3NpdGlvbmFsCithcmd1bWVudCBhY3Rpb25zLCBgYGRlc3RgYCBpcyBub3JtYWxseSBzdXBwbGllZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8KKzptZXRoOmBhZGRfYXJndW1lbnRgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYWFgnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPSdYWFgnKQorCitGb3Igb3B0aW9uYWwgYXJndW1lbnQgYWN0aW9ucywgdGhlIHZhbHVlIG9mIGBgZGVzdGBgIGlzIG5vcm1hbGx5IGluZmVycmVkIGZyb20KK3RoZSBvcHRpb24gc3RyaW5ncy4gIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGdlbmVyYXRlcyB0aGUgdmFsdWUgb2YgYGBkZXN0YGAgYnkKK3Rha2luZyB0aGUgZmlyc3QgbG9uZyBvcHRpb24gc3RyaW5nIGFuZCBzdHJpcHBpbmcgYXdheSB0aGUgaW5pdGlhbCBgYCctLSdgYAorc3RyaW5nLiAgSWYgbm8gbG9uZyBvcHRpb24gc3RyaW5ncyB3ZXJlIHN1cHBsaWVkLCBgYGRlc3RgYCB3aWxsIGJlIGRlcml2ZWQgZnJvbQordGhlIGZpcnN0IHNob3J0IG9wdGlvbiBzdHJpbmcgYnkgc3RyaXBwaW5nIHRoZSBpbml0aWFsIGBgJy0nYGAgY2hhcmFjdGVyLiAgQW55CitpbnRlcm5hbCBgYCctJ2BgIGNoYXJhY3RlcnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYGAnXydgYCBjaGFyYWN0ZXJzIHRvIG1ha2Ugc3VyZQordGhlIHN0cmluZyBpcyBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lLiAgVGhlIGV4YW1wbGVzIGJlbG93IGlsbHVzdHJhdGUgdGhpcworYmVoYXZpb3I6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZm9vLWJhcicsICctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCAnLXknKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctZiAxIC14IDInLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vX2Jhcj0nMScsIHg9JzInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAxIC15IDInLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vX2Jhcj0nMScsIHg9JzInKQorCitgYGRlc3RgYCBhbGxvd3MgYSBjdXN0b20gYXR0cmlidXRlIG5hbWUgdG8gYmUgcHJvdmlkZWQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVzdD0nYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gWFhYJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWFhYJykKKworCitUaGUgcGFyc2VfYXJncygpIG1ldGhvZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIucGFyc2VfYXJncyhhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKQorCisgICBDb252ZXJ0IGFyZ3VtZW50IHN0cmluZ3MgdG8gb2JqZWN0cyBhbmQgYXNzaWduIHRoZW0gYXMgYXR0cmlidXRlcyBvZiB0aGUKKyAgIG5hbWVzcGFjZS4gIFJldHVybiB0aGUgcG9wdWxhdGVkIG5hbWVzcGFjZS4KKworICAgUHJldmlvdXMgY2FsbHMgdG8gOm1ldGg6YGFkZF9hcmd1bWVudGAgZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCBvYmplY3RzIGFyZQorICAgY3JlYXRlZCBhbmQgaG93IHRoZXkgYXJlIGFzc2lnbmVkLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisgICA6bWV0aDpgYWRkX2FyZ3VtZW50YCBmb3IgZGV0YWlscy4KKworICAgQnkgZGVmYXVsdCwgdGhlIGFyZyBzdHJpbmdzIGFyZSB0YWtlbiBmcm9tIDpkYXRhOmBzeXMuYXJndmAsIGFuZCBhIG5ldyBlbXB0eQorICAgOmNsYXNzOmBOYW1lc3BhY2VgIG9iamVjdCBpcyBjcmVhdGVkIGZvciB0aGUgYXR0cmlidXRlcy4KKworCitPcHRpb24gdmFsdWUgc3ludGF4CiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSA6bWV0aDpgcGFyc2VfYXJnc2AgbWV0aG9kIHN1cHBvcnRzIHNldmVyYWwgd2F5cyBvZiBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZgorYW4gb3B0aW9uIChpZiBpdCB0YWtlcyBvbmUpLiAgSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHRoZSBvcHRpb24gYW5kIGl0cyB2YWx1ZSBhcmUKK3Bhc3NlZCBhcyB0d28gc2VwYXJhdGUgYXJndW1lbnRzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy14IFgnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPU5vbmUsIHg9J1gnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyBGT08nLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPSdGT08nLCB4PU5vbmUpCisKK0ZvciBsb25nIG9wdGlvbnMgKG9wdGlvbnMgd2l0aCBuYW1lcyBsb25nZXIgdGhhbiBhIHNpbmdsZSBjaGFyYWN0ZXIpLCB0aGUgb3B0aW9uCithbmQgdmFsdWUgY2FuIGFsc28gYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBhcmd1bWVudCwgdXNpbmcgYGA9YGAgdG8KK3NlcGFyYXRlIHRoZW06OgorCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vPUZPTycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289J0ZPTycsIHg9Tm9uZSkKKworRm9yIHNob3J0IG9wdGlvbnMgKG9wdGlvbnMgb25seSBvbmUgY2hhcmFjdGVyIGxvbmcpLCB0aGUgb3B0aW9uIGFuZCBpdHMgdmFsdWUKK2NhbiBiZSBjb25jYXRlbmF0ZWQ6OgorCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy14WCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289Tm9uZSwgeD0nWCcpCisKK1NldmVyYWwgc2hvcnQgb3B0aW9ucyBjYW4gYmUgam9pbmVkIHRvZ2V0aGVyLCB1c2luZyBvbmx5IGEgc2luZ2xlIGBgLWBgIHByZWZpeCwKK2FzIGxvbmcgYXMgb25seSB0aGUgbGFzdCBvcHRpb24gKG9yIG5vbmUgb2YgdGhlbSkgcmVxdWlyZXMgYSB2YWx1ZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy16JykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXh5elonLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoeD1UcnVlLCB5PVRydWUsIHo9J1onKQorCisKK0ludmFsaWQgYXJndW1lbnRzCiteXl5eXl5eXl5eXl5eXl5eXgorCitXaGlsZSBwYXJzaW5nIHRoZSBjb21tYW5kLWxpbmUsIGBgcGFyc2VfYXJnc2BgIGNoZWNrcyBmb3IgYSB2YXJpZXR5IG9mIGVycm9ycywKK2luY2x1ZGluZyBhbWJpZ3VvdXMgb3B0aW9ucywgaW52YWxpZCB0eXBlcywgaW52YWxpZCBvcHRpb25zLCB3cm9uZyBudW1iZXIgb2YKK3Bvc2l0aW9uYWwgYXJndW1lbnRzLCBldGMuICBXaGVuIGl0IGVuY291bnRlcnMgc3VjaCBhbiBlcnJvciwgaXQgZXhpdHMgYW5kCitwcmludHMgdGhlIGVycm9yIGFsb25nIHdpdGggYSB1c2FnZSBtZXNzYWdlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgdHlwZT1pbnQpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9Jz8nKQorCisgICA+Pj4gIyBpbnZhbGlkIHR5cGUKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJ3NwYW0nXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gW2Jhcl0KKyAgIFBST0c6IGVycm9yOiBhcmd1bWVudCAtLWZvbzogaW52YWxpZCBpbnQgdmFsdWU6ICdzcGFtJworCisgICA+Pj4gIyBpbnZhbGlkIG9wdGlvbgorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1iYXInXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gW2Jhcl0KKyAgIFBST0c6IGVycm9yOiBubyBzdWNoIG9wdGlvbjogLS1iYXIKKworICAgPj4+ICMgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cworICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnc3BhbScsICdiYWRnZXInXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gW2Jhcl0KKyAgIFBST0c6IGVycm9yOiBleHRyYSBhcmd1bWVudHMgZm91bmQ6IGJhZGdlcgorCisKK0FyZ3VtZW50cyBjb250YWluaW5nIGBgIi0iYGAKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGBgcGFyc2VfYXJnc2BgIG1ldGhvZCBhdHRlbXB0cyB0byBnaXZlIGVycm9ycyB3aGVuZXZlciB0aGUgdXNlciBoYXMgY2xlYXJseQorbWFkZSBhIG1pc3Rha2UsIGJ1dCBzb21lIHNpdHVhdGlvbnMgYXJlIGluaGVyZW50bHkgYW1iaWd1b3VzLiAgRm9yIGV4YW1wbGUsIHRoZQorY29tbWFuZC1saW5lIGFyZyBgYCctMSdgYCBjb3VsZCBlaXRoZXIgYmUgYW4gYXR0ZW1wdCB0byBzcGVjaWZ5IGFuIG9wdGlvbiBvciBhbgorYXR0ZW1wdCB0byBwcm92aWRlIGEgcG9zaXRpb25hbCBhcmd1bWVudC4gIFRoZSBgYHBhcnNlX2FyZ3NgYCBtZXRob2QgaXMgY2F1dGlvdXMKK2hlcmU6IHBvc2l0aW9uYWwgYXJndW1lbnRzIG1heSBvbmx5IGJlZ2luIHdpdGggYGAnLSdgYCBpZiB0aGV5IGxvb2sgbGlrZQorbmVnYXRpdmUgbnVtYmVycyBhbmQgdGhlcmUgYXJlIG5vIG9wdGlvbnMgaW4gdGhlIHBhcnNlciB0aGF0IGxvb2sgbGlrZSBuZWdhdGl2ZQorbnVtYmVyczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgbmFyZ3M9Jz8nKQorCisgICA+Pj4gIyBubyBuZWdhdGl2ZSBudW1iZXIgb3B0aW9ucywgc28gLTEgaXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycteCcsICctMSddKQorICAgTmFtZXNwYWNlKGZvbz1Ob25lLCB4PSctMScpCisKKyAgID4+PiAjIG5vIG5lZ2F0aXZlIG51bWJlciBvcHRpb25zLCBzbyAtMSBhbmQgLTUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycteCcsICctMScsICctNSddKQorICAgTmFtZXNwYWNlKGZvbz0nLTUnLCB4PSctMScpCisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctMScsIGRlc3Q9J29uZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgbmFyZ3M9Jz8nKQorCisgICA+Pj4gIyBuZWdhdGl2ZSBudW1iZXIgb3B0aW9ucyBwcmVzZW50LCBzbyAtMSBpcyBhbiBvcHRpb24KKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0xJywgJ1gnXSkKKyAgIE5hbWVzcGFjZShmb289Tm9uZSwgb25lPSdYJykKKworICAgPj4+ICMgbmVnYXRpdmUgbnVtYmVyIG9wdGlvbnMgcHJlc2VudCwgc28gLTIgaXMgYW4gb3B0aW9uCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctMiddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLTEgT05FXSBbZm9vXQorICAgUFJPRzogZXJyb3I6IG5vIHN1Y2ggb3B0aW9uOiAtMgorCisgICA+Pj4gIyBuZWdhdGl2ZSBudW1iZXIgb3B0aW9ucyBwcmVzZW50LCBzbyBib3RoIC0xcyBhcmUgb3B0aW9ucworICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLTEnLCAnLTEnXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0xIE9ORV0gW2Zvb10KKyAgIFBST0c6IGVycm9yOiBhcmd1bWVudCAtMTogZXhwZWN0ZWQgb25lIGFyZ3VtZW50CisKK0lmIHlvdSBoYXZlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYXQgbXVzdCBiZWdpbiB3aXRoIGBgJy0nYGAgYW5kIGRvbid0IGxvb2sKK2xpa2UgbmVnYXRpdmUgbnVtYmVycywgeW91IGNhbiBpbnNlcnQgdGhlIHBzZXVkby1hcmd1bWVudCBgYCctLSdgYCB3aGljaCB0ZWxscworYGBwYXJzZV9hcmdzYGAgdGhhdCBldmVyeXRoaW5nIGFmdGVyIHRoYXQgaXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50OjoKKworICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS0nLCAnLWYnXSkKKyAgIE5hbWVzcGFjZShmb289Jy1mJywgb25lPU5vbmUpCisKKworQXJndW1lbnQgYWJicmV2aWF0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgOm1ldGg6YHBhcnNlX2FyZ3NgIG1ldGhvZCBhbGxvd3MgbG9uZyBvcHRpb25zIHRvIGJlIGFiYnJldmlhdGVkIGlmIHRoZQorYWJicmV2aWF0aW9uIGlzIHVuYW1iaWd1b3VzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy1iYWNvbicpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWJhZGdlcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy1iYWMgTU1NJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhY29uPSdNTU0nLCBiYWRnZXI9Tm9uZSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWJhZCBXT09EJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhY29uPU5vbmUsIGJhZGdlcj0nV09PRCcpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy1iYSBCQScuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy1iYWNvbiBCQUNPTl0gWy1iYWRnZXIgQkFER0VSXQorICAgUFJPRzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246IC1iYSBjb3VsZCBtYXRjaCAtYmFkZ2VyLCAtYmFjb24KKworQW4gZXJyb3IgaXMgcHJvZHVjZWQgZm9yIGFyZ3VtZW50cyB0aGF0IGNvdWxkIHByb2R1Y2UgbW9yZSB0aGFuIG9uZSBvcHRpb25zLgorCisKK0JleW9uZCBgYHN5cy5hcmd2YGAKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworU29tZXRpbWVzIGl0IG1heSBiZSB1c2VmdWwgdG8gaGF2ZSBhbiBBcmd1bWVudFBhcnNlciBwYXJzZSBhcmdzIG90aGVyIHRoYW4gdGhvc2UKK29mIDpkYXRhOmBzeXMuYXJndmAuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgcGFzc2luZyBhIGxpc3Qgb2Ygc3RyaW5ncyB0bworYGBwYXJzZV9hcmdzYGAuICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBhdCB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgLi4uICAgICAnaW50ZWdlcnMnLCBtZXRhdmFyPSdpbnQnLCB0eXBlPWludCwgY2hvaWNlcz14cmFuZ2UoMTApLAorICAgLi4uICBuYXJncz0nKycsIGhlbHA9J2FuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAuLjknKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAuLi4gICAgICctLXN1bScsIGRlc3Q9J2FjY3VtdWxhdGUnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9c3VtLAorICAgLi4uICAgZGVmYXVsdD1tYXgsIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnMScsICcyJywgJzMnLCAnNCddKQorICAgTmFtZXNwYWNlKGFjY3VtdWxhdGU9PGJ1aWx0LWluIGZ1bmN0aW9uIG1heD4sIGludGVnZXJzPVsxLCAyLCAzLCA0XSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMgNCAtLXN1bScuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShhY2N1bXVsYXRlPTxidWlsdC1pbiBmdW5jdGlvbiBzdW0+LCBpbnRlZ2Vycz1bMSwgMiwgMywgNF0pCisKKworQ3VzdG9tIG5hbWVzcGFjZXMKK15eXl5eXl5eXl5eXl5eXl5eCisKK0l0IG1heSBhbHNvIGJlIHVzZWZ1bCB0byBoYXZlIGFuIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGFzc2lnbiBhdHRyaWJ1dGVzIHRvIGFuCithbHJlYWR5IGV4aXN0aW5nIG9iamVjdCwgcmF0aGVyIHRoYW4gdGhlIG5ld2x5LWNyZWF0ZWQgOmNsYXNzOmBOYW1lc3BhY2VgIG9iamVjdAordGhhdCBpcyBub3JtYWxseSB1c2VkLiAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgc3BlY2lmeWluZyB0aGUgYGBuYW1lc3BhY2U9YGAKK2tleXdvcmQgYXJndW1lbnQ6OgorCisgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgorICAgLi4uICAgICBwYXNzCisgICAuLi4KKyAgID4+PiBjID0gQygpCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhhcmdzPVsnLS1mb28nLCAnQkFSJ10sIG5hbWVzcGFjZT1jKQorICAgPj4+IGMuZm9vCisgICAnQkFSJworCisKK090aGVyIHV0aWxpdGllcworLS0tLS0tLS0tLS0tLS0tCisKK1N1Yi1jb21tYW5kcworXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKworICAgTWFueSBwcm9ncmFtcyBzcGxpdCB1cCB0aGVpciBmdW5jdGlvbmFsaXR5IGludG8gYSBudW1iZXIgb2Ygc3ViLWNvbW1hbmRzLAorICAgZm9yIGV4YW1wbGUsIHRoZSBgYHN2bmBgIHByb2dyYW0gY2FuIGludm9rZSBzdWItY29tbWFuZHMgbGlrZSBgYHN2bgorICAgY2hlY2tvdXRgYCwgYGBzdm4gdXBkYXRlYGAsIGFuZCBgYHN2biBjb21taXRgYC4gIFNwbGl0dGluZyB1cCBmdW5jdGlvbmFsaXR5CisgICB0aGlzIHdheSBjYW4gYmUgYSBwYXJ0aWN1bGFybHkgZ29vZCBpZGVhIHdoZW4gYSBwcm9ncmFtIHBlcmZvcm1zIHNldmVyYWwKKyAgIGRpZmZlcmVudCBmdW5jdGlvbnMgd2hpY2ggcmVxdWlyZSBkaWZmZXJlbnQga2luZHMgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyAgIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHN1cHBvcnRzIHRoZSBjcmVhdGlvbiBvZiBzdWNoIHN1Yi1jb21tYW5kcyB3aXRoIHRoZQorICAgOm1ldGg6YGFkZF9zdWJwYXJzZXJzYCBtZXRob2QuICBUaGUgOm1ldGg6YGFkZF9zdWJwYXJzZXJzYCBtZXRob2QgaXMgbm9ybWFsbHkKKyAgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhbiBzcGVjaWFsIGFjdGlvbiBvYmplY3QuICBUaGlzIG9iamVjdAorICAgaGFzIGEgc2luZ2xlIG1ldGhvZCwgYGBhZGRfcGFyc2VyYGAsIHdoaWNoIHRha2VzIGEgY29tbWFuZCBuYW1lIGFuZCBhbnkKKyAgIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGNvbnN0cnVjdG9yIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4KKyAgIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdCB0aGF0IGNhbiBiZSBtb2RpZmllZCBhcyB1c3VhbC4KKworICAgU29tZSBleGFtcGxlIHVzYWdlOjoKKworICAgICA+Pj4gIyBjcmVhdGUgdGhlIHRvcC1sZXZlbCBwYXJzZXIKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdmb28gaGVscCcpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGhlbHA9J3N1Yi1jb21tYW5kIGhlbHAnKQorICAgICA+Pj4KKyAgICAgPj4+ICMgY3JlYXRlIHRoZSBwYXJzZXIgZm9yIHRoZSAiYSIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2EgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2EnLCBoZWxwPSdhIGhlbHAnKQorICAgICA+Pj4gcGFyc2VyX2EuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWludCwgaGVscD0nYmFyIGhlbHAnKQorICAgICA+Pj4KKyAgICAgPj4+ICMgY3JlYXRlIHRoZSBwYXJzZXIgZm9yIHRoZSAiYiIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2IgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2InLCBoZWxwPSdiIGhlbHAnKQorICAgICA+Pj4gcGFyc2VyX2IuYWRkX2FyZ3VtZW50KCctLWJheicsIGNob2ljZXM9J1hZWicsIGhlbHA9J2JheiBoZWxwJykKKyAgICAgPj4+CisgICAgID4+PiAjIHBhcnNlIHNvbWUgYXJnIGxpc3RzCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ2EnLCAnMTInXSkKKyAgICAgTmFtZXNwYWNlKGJhcj0xMiwgZm9vPUZhbHNlKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdiJywgJy0tYmF6JywgJ1onXSkKKyAgICAgTmFtZXNwYWNlKGJhej0nWicsIGZvbz1UcnVlKQorCisgICBOb3RlIHRoYXQgdGhlIG9iamVjdCByZXR1cm5lZCBieSA6bWV0aDpgcGFyc2VfYXJnc2Agd2lsbCBvbmx5IGNvbnRhaW4KKyAgIGF0dHJpYnV0ZXMgZm9yIHRoZSBtYWluIHBhcnNlciBhbmQgdGhlIHN1YnBhcnNlciB0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUKKyAgIGNvbW1hbmQgbGluZSAoYW5kIG5vdCBhbnkgb3RoZXIgc3VicGFyc2VycykuICBTbyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2hlbgorICAgdGhlIGBgImEiYGAgY29tbWFuZCBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGBgZm9vYGAgYW5kIGBgYmFyYGAgYXR0cmlidXRlcyBhcmUKKyAgIHByZXNlbnQsIGFuZCB3aGVuIHRoZSBgYCJiImBgIGNvbW1hbmQgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBgYGZvb2BgIGFuZAorICAgYGBiYXpgYCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgorCisgICBTaW1pbGFybHksIHdoZW4gYSBoZWxwIG1lc3NhZ2UgaXMgcmVxdWVzdGVkIGZyb20gYSBzdWJwYXJzZXIsIG9ubHkgdGhlIGhlbHAKKyAgIGZvciB0aGF0IHBhcnRpY3VsYXIgcGFyc2VyIHdpbGwgYmUgcHJpbnRlZC4gIFRoZSBoZWxwIG1lc3NhZ2Ugd2lsbCBub3QKKyAgIGluY2x1ZGUgcGFyZW50IHBhcnNlciBvciBzaWJsaW5nIHBhcnNlciBtZXNzYWdlcy4gIChBIGhlbHAgbWVzc2FnZSBmb3IgZWFjaAorICAgc3VicGFyc2VyIGNvbW1hbmQsIGhvd2V2ZXIsIGNhbiBiZSBnaXZlbiBieSBzdXBwbHlpbmcgdGhlIGBgaGVscD1gYCBhcmd1bWVudAorICAgdG8gYGBhZGRfcGFyc2VyYGAgYXMgYWJvdmUuKQorCisgICA6OgorCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0taGVscCddKQorICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10ge2EsYn0gLi4uCisKKyAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAge2EsYn0gICBzdWItY29tbWFuZCBoZWxwCisgICAgIGEgICAgIGEgaGVscAorICAgICBiICAgICBiIGhlbHAKKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tZm9vICAgZm9vIGhlbHAKKworICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydhJywgJy0taGVscCddKQorICAgICB1c2FnZTogUFJPRyBhIFstaF0gYmFyCisKKyAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgYmFyICAgICBiYXIgaGVscAorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnYicsICctLWhlbHAnXSkKKyAgICAgdXNhZ2U6IFBST0cgYiBbLWhdIFstLWJheiB7WCxZLFp9XQorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLS1iYXoge1gsWSxafSAgYmF6IGhlbHAKKworICAgVGhlIDptZXRoOmBhZGRfc3VicGFyc2Vyc2AgbWV0aG9kIGFsc28gc3VwcG9ydHMgYGB0aXRsZWBgIGFuZCBgYGRlc2NyaXB0aW9uYGAKKyAgIGtleXdvcmQgYXJndW1lbnRzLiAgV2hlbiBlaXRoZXIgaXMgcHJlc2VudCwgdGhlIHN1YnBhcnNlcidzIGNvbW1hbmRzIHdpbGwKKyAgIGFwcGVhciBpbiB0aGVpciBvd24gZ3JvdXAgaW4gdGhlIGhlbHAgb3V0cHV0LiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd2YWxpZCBzdWJjb21tYW5kcycsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FkZGl0aW9uYWwgaGVscCcpCisgICAgID4+PiBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZvbycpCisgICAgID4+PiBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy1oJ10pCisgICAgIHVzYWdlOiAgWy1oXSB7Zm9vLGJhcn0gLi4uCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgICBzdWJjb21tYW5kczoKKyAgICAgICB2YWxpZCBzdWJjb21tYW5kcworCisgICAgICAge2ZvbyxiYXJ9ICAgYWRkaXRpb25hbCBoZWxwCisKKworICAgT25lIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgd2F5IG9mIGhhbmRsaW5nIHN1Yi1jb21tYW5kcyBpcyB0byBjb21iaW5lIHRoZSB1c2UKKyAgIG9mIHRoZSA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIG1ldGhvZCB3aXRoIGNhbGxzIHRvIDptZXRoOmBzZXRfZGVmYXVsdHNgIHNvCisgICB0aGF0IGVhY2ggc3VicGFyc2VyIGtub3dzIHdoaWNoIFB5dGhvbiBmdW5jdGlvbiBpdCBzaG91bGQgZXhlY3V0ZS4gIEZvcgorICAgZXhhbXBsZTo6CisKKyAgICAgPj4+ICMgc3ViLWNvbW1hbmQgZnVuY3Rpb25zCisgICAgID4+PiBkZWYgZm9vKGFyZ3MpOgorICAgICAuLi4gICAgIHByaW50IGFyZ3MueCAqIGFyZ3MueQorICAgICAuLi4KKyAgICAgPj4+IGRlZiBiYXIoYXJncyk6CisgICAgIC4uLiAgICAgcHJpbnQgJygoJXMpKScgJSBhcmdzLnoKKyAgICAgLi4uCisgICAgID4+PiAjIGNyZWF0ZSB0aGUgdG9wLWxldmVsIHBhcnNlcgorICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJmb28iIGNvbW1hbmQKKyAgICAgPj4+IHBhcnNlcl9mb28gPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZvbycpCisgICAgID4+PiBwYXJzZXJfZm9vLmFkZF9hcmd1bWVudCgnLXgnLCB0eXBlPWludCwgZGVmYXVsdD0xKQorICAgICA+Pj4gcGFyc2VyX2Zvby5hZGRfYXJndW1lbnQoJ3knLCB0eXBlPWZsb2F0KQorICAgICA+Pj4gcGFyc2VyX2Zvby5zZXRfZGVmYXVsdHMoZnVuYz1mb28pCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJiYXIiIGNvbW1hbmQKKyAgICAgPj4+IHBhcnNlcl9iYXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicpCisgICAgID4+PiBwYXJzZXJfYmFyLmFkZF9hcmd1bWVudCgneicpCisgICAgID4+PiBwYXJzZXJfYmFyLnNldF9kZWZhdWx0cyhmdW5jPWJhcikKKyAgICAgPj4+CisgICAgID4+PiAjIHBhcnNlIHRoZSBhcmdzIGFuZCBjYWxsIHdoYXRldmVyIGZ1bmN0aW9uIHdhcyBzZWxlY3RlZAorICAgICA+Pj4gYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCdmb28gMSAteCAyJy5zcGxpdCgpKQorICAgICA+Pj4gYXJncy5mdW5jKGFyZ3MpCisgICAgIDIuMAorICAgICA+Pj4KKyAgICAgPj4+ICMgcGFyc2UgdGhlIGFyZ3MgYW5kIGNhbGwgd2hhdGV2ZXIgZnVuY3Rpb24gd2FzIHNlbGVjdGVkCisgICAgID4+PiBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoJ2JhciBYWVpZWCcuc3BsaXQoKSkKKyAgICAgPj4+IGFyZ3MuZnVuYyhhcmdzKQorICAgICAoKFhZWllYKSkKKworICAgVGhpcyB3YXksIHlvdSBjYW4gbGV0IDptZXRoOmBwYXJzZV9hcmdzYCBkb2VzIHRoZSBqb2Igb2YgY2FsbGluZyB0aGUKKyAgIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGFmdGVyIGFyZ3VtZW50IHBhcnNpbmcgaXMgY29tcGxldGUuICBBc3NvY2lhdGluZworICAgZnVuY3Rpb25zIHdpdGggYWN0aW9ucyBsaWtlIHRoaXMgaXMgdHlwaWNhbGx5IHRoZSBlYXNpZXN0IHdheSB0byBoYW5kbGUgdGhlCisgICBkaWZmZXJlbnQgYWN0aW9ucyBmb3IgZWFjaCBvZiB5b3VyIHN1YnBhcnNlcnMuICBIb3dldmVyLCBpZiBpdCBpcyBuZWNlc3NhcnkKKyAgIHRvIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSBzdWJwYXJzZXIgdGhhdCB3YXMgaW52b2tlZCwgdGhlIGBgZGVzdGBgIGtleXdvcmQKKyAgIGFyZ3VtZW50IHRvIHRoZSA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIGNhbGwgd2lsbCB3b3JrOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSdzdWJwYXJzZXJfbmFtZScpCisgICAgID4+PiBzdWJwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJykKKyAgICAgPj4+IHN1YnBhcnNlcjEuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgID4+PiBzdWJwYXJzZXIyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcyJykKKyAgICAgPj4+IHN1YnBhcnNlcjIuYWRkX2FyZ3VtZW50KCd5JykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnMicsICdmcm9iYmxlJ10pCisgICAgIE5hbWVzcGFjZShzdWJwYXJzZXJfbmFtZT0nMicsIHk9J2Zyb2JibGUnKQorCisKK0ZpbGVUeXBlIG9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBGaWxlVHlwZShtb2RlPSdyJywgYnVmc2l6ZT1Ob25lKQorCisgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCisgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKKyAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3MgYXMgZmlsZXMKKyAgIHdpdGggdGhlIHJlcXVlc3RlZCBtb2RlcyBhbmQgYnVmZmVyIHNpemVzOgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAwKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tb3V0cHV0JywgJ291dCddKQorICAgTmFtZXNwYWNlKG91dHB1dD08b3BlbiBmaWxlICdvdXQnLCBtb2RlICd3YicgYXQgMHguLi4+KQorCisgICBGaWxlVHlwZSBvYmplY3RzIHVuZGVyc3RhbmQgdGhlIHBzZXVkby1hcmd1bWVudCBgYCctJ2BgIGFuZCBhdXRvbWF0aWNhbGx5CisgICBjb252ZXJ0IHRoaXMgaW50byBgYHN5cy5zdGRpbmBgIGZvciByZWFkYWJsZSA6Y2xhc3M6YEZpbGVUeXBlYCBvYmplY3RzIGFuZAorICAgYGBzeXMuc3Rkb3V0YGAgZm9yIHdyaXRhYmxlIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHM6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLSddKQorICAgTmFtZXNwYWNlKGluZmlsZT08b3BlbiBmaWxlICc8c3RkaW4+JywgbW9kZSAncicgYXQgMHguLi4+KQorCisKK0FyZ3VtZW50IGdyb3VwcworXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZT1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lKQorCisgICBCeSBkZWZhdWx0LCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBncm91cHMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBpbnRvCisgICAicG9zaXRpb25hbCBhcmd1bWVudHMiIGFuZCAib3B0aW9uYWwgYXJndW1lbnRzIiB3aGVuIGRpc3BsYXlpbmcgaGVscAorICAgbWVzc2FnZXMuIFdoZW4gdGhlcmUgaXMgYSBiZXR0ZXIgY29uY2VwdHVhbCBncm91cGluZyBvZiBhcmd1bWVudHMgdGhhbiB0aGlzCisgICBkZWZhdWx0IG9uZSwgYXBwcm9wcmlhdGUgZ3JvdXBzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZQorICAgOm1ldGg6YGFkZF9hcmd1bWVudF9ncm91cGAgbWV0aG9kOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIGFkZF9oZWxwPUZhbHNlKQorICAgICA+Pj4gZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdncm91cCcpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgICA+Pj4gZ3JvdXAuYWRkX2FyZ3VtZW50KCdiYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgIHVzYWdlOiBQUk9HIFstLWZvbyBGT09dIGJhcgorCisgICAgIGdyb3VwOgorICAgICAgIGJhciAgICBiYXIgaGVscAorICAgICAgIC0tZm9vIEZPTyAgZm9vIGhlbHAKKworICAgVGhlIDptZXRoOmBhZGRfYXJndW1lbnRfZ3JvdXBgIG1ldGhvZCByZXR1cm5zIGFuIGFyZ3VtZW50IGdyb3VwIG9iamVjdCB3aGljaAorICAgaGFzIGFuIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCBtZXRob2QganVzdCBsaWtlIGEgcmVndWxhcgorICAgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuICBXaGVuIGFuIGFyZ3VtZW50IGlzIGFkZGVkIHRvIHRoZSBncm91cCwgdGhlIHBhcnNlcgorICAgdHJlYXRzIGl0IGp1c3QgbGlrZSBhIG5vcm1hbCBhcmd1bWVudCwgYnV0IGRpc3BsYXlzIHRoZSBhcmd1bWVudCBpbiBhCisgICBzZXBhcmF0ZSBncm91cCBmb3IgaGVscCBtZXNzYWdlcy4gIFRoZSA6bWV0aDpgYWRkX2FyZ3VtZW50X2dyb3VwYCBtZXRob2QKKyAgIGFjY2VwdHMgKnRpdGxlKiBhbmQgKmRlc2NyaXB0aW9uKiBhcmd1bWVudHMgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgIGN1c3RvbWl6ZSB0aGlzIGRpc3BsYXk6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgID4+PiBncm91cDEgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdncm91cDEnLCAnZ3JvdXAxIGRlc2NyaXB0aW9uJykKKyAgICAgPj4+IGdyb3VwMS5hZGRfYXJndW1lbnQoJ2ZvbycsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgPj4+IGdyb3VwMiA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2dyb3VwMicsICdncm91cDIgZGVzY3JpcHRpb24nKQorICAgICA+Pj4gZ3JvdXAyLmFkZF9hcmd1bWVudCgnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgIHVzYWdlOiBQUk9HIFstLWJhciBCQVJdIGZvbworCisgICAgIGdyb3VwMToKKyAgICAgICBncm91cDEgZGVzY3JpcHRpb24KKworICAgICAgIGZvbyAgICBmb28gaGVscAorCisgICAgIGdyb3VwMjoKKyAgICAgICBncm91cDIgZGVzY3JpcHRpb24KKworICAgICAgIC0tYmFyIEJBUiAgYmFyIGhlbHAKKworICAgTm90ZSB0aGF0IGFueSBhcmd1bWVudHMgbm90IHlvdXIgdXNlciBkZWZpbmVkIGdyb3VwcyB3aWxsIGVuZCB1cCBiYWNrIGluIHRoZQorICAgdXN1YWwgInBvc2l0aW9uYWwgYXJndW1lbnRzIiBhbmQgIm9wdGlvbmFsIGFyZ3VtZW50cyIgc2VjdGlvbnMuCisKKworTXV0dWFsIGV4Y2x1c2lvbgorXl5eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBhZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPUZhbHNlKQorCisgICBDcmVhdGUgYSBtdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAuIGFyZ3BhcnNlIHdpbGwgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgb2YKKyAgIHRoZSBhcmd1bWVudHMgaW4gdGhlIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cCB3YXMgcHJlc2VudCBvbiB0aGUgY29tbWFuZAorICAgbGluZTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nXSkKKyAgICAgTmFtZXNwYWNlKGJhcj1UcnVlLCBmb289VHJ1ZSkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1iYXInXSkKKyAgICAgTmFtZXNwYWNlKGJhcj1GYWxzZSwgZm9vPUZhbHNlKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICctLWJhciddKQorICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tYmFyXQorICAgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgLS1iYXI6IG5vdCBhbGxvd2VkIHdpdGggYXJndW1lbnQgLS1mb28KKworICAgVGhlIDptZXRoOmBhZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwYCBtZXRob2QgYWxzbyBhY2NlcHRzIGEgKnJlcXVpcmVkKgorICAgYXJndW1lbnQsIHRvIGluZGljYXRlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzCisgICBpcyByZXF1aXJlZDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1UcnVlKQorICAgICA+Pj4gZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1mb28gfCAtLWJhcikKKyAgICAgUFJPRzogZXJyb3I6IG9uZSBvZiB0aGUgYXJndW1lbnRzIC0tZm9vIC0tYmFyIGlzIHJlcXVpcmVkCisKKyAgIE5vdGUgdGhhdCBjdXJyZW50bHkgbXV0dWFsbHkgZXhjbHVzaXZlIGFyZ3VtZW50IGdyb3VwcyBkbyBub3Qgc3VwcG9ydCB0aGUKKyAgICp0aXRsZSogYW5kICpkZXNjcmlwdGlvbiogYXJndW1lbnRzIG9mIDptZXRoOmBhZGRfYXJndW1lbnRfZ3JvdXBgLgorCisKK1BhcnNlciBkZWZhdWx0cworXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLnNldF9kZWZhdWx0cygqKmt3YXJncykKKworICAgTW9zdCBvZiB0aGUgdGltZSwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG9iamVjdCByZXR1cm5lZCBieSA6bWV0aDpgcGFyc2VfYXJnc2AKKyAgIHdpbGwgYmUgZnVsbHkgZGV0ZXJtaW5lZCBieSBpbnNwZWN0aW5nIHRoZSBjb21tYW5kLWxpbmUgYXJncyBhbmQgdGhlIGFyZ3VtZW50CisgICBhY3Rpb25zLiAgOm1ldGg6YEFyZ3VtZW50UGFyc2VyLnNldF9kZWZhdWx0c2AgYWxsb3dzIHNvbWUgYWRkaXRpb25hbAorICAgYXR0cmlidXRlcyB0aGF0IGFyZSBkZXRlcm1pbmVkIHdpdGhvdXQgYW55IGluc3BlY3Rpb24gb2YgdGhlIGNvbW1hbmQtbGluZSB0bworICAgYmUgYWRkZWQ6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCB0eXBlPWludCkKKyAgICAgPj4+IHBhcnNlci5zZXRfZGVmYXVsdHMoYmFyPTQyLCBiYXo9J2JhZGdlcicpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJzczNiddKQorICAgICBOYW1lc3BhY2UoYmFyPTQyLCBiYXo9J2JhZGdlcicsIGZvbz03MzYpCisKKyAgIE5vdGUgdGhhdCBwYXJzZXItbGV2ZWwgZGVmYXVsdHMgYWx3YXlzIG92ZXJyaWRlIGFyZ3VtZW50LWxldmVsIGRlZmF1bHRzOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBkZWZhdWx0PSdiYXInKQorICAgICA+Pj4gcGFyc2VyLnNldF9kZWZhdWx0cyhmb289J3NwYW0nKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgIE5hbWVzcGFjZShmb289J3NwYW0nKQorCisgICBQYXJzZXItbGV2ZWwgZGVmYXVsdHMgY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB3b3JraW5nIHdpdGggbXVsdGlwbGUKKyAgIHBhcnNlcnMuICBTZWUgdGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX3N1YnBhcnNlcnNgIG1ldGhvZCBmb3IgYW4KKyAgIGV4YW1wbGUgb2YgdGhpcyB0eXBlLgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5nZXRfZGVmYXVsdChkZXN0KQorCisgICBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSwgYXMgc2V0IGJ5IGVpdGhlcgorICAgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIG9yIGJ5CisgICA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnNldF9kZWZhdWx0c2A6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlZmF1bHQ9J2JhZGdlcicpCisgICAgID4+PiBwYXJzZXIuZ2V0X2RlZmF1bHQoJ2ZvbycpCisgICAgICdiYWRnZXInCisKKworUHJpbnRpbmcgaGVscAorXl5eXl5eXl5eXl5eXgorCitJbiBtb3N0IHR5cGljYWwgYXBwbGljYXRpb25zLCA6bWV0aDpgcGFyc2VfYXJnc2Agd2lsbCB0YWtlIGNhcmUgb2YgZm9ybWF0dGluZworYW5kIHByaW50aW5nIGFueSB1c2FnZSBvciBlcnJvciBtZXNzYWdlcy4gIEhvd2V2ZXIsIHNldmVyYWwgZm9ybWF0dGluZyBtZXRob2RzCithcmUgYXZhaWxhYmxlOgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wcmludF91c2FnZShmaWxlPU5vbmUpCisKKyAgIFByaW50IGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgaG93IHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBzaG91bGQgYmUKKyAgIGludm9rZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIElmICpmaWxlKiBpcyBgYE5vbmVgYCwgOmRhdGE6YHN5cy5zdGRvdXRgIGlzCisgICBhc3N1bWVkLgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wcmludF9oZWxwKGZpbGU9Tm9uZSkKKworICAgUHJpbnQgYSBoZWxwIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgcHJvZ3JhbSB1c2FnZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICBhcmd1bWVudHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4gIElmICpmaWxlKiBpcworICAgYGBOb25lYGAsIDpkYXRhOmBzeXMuc3Rkb3V0YCBpcyBhc3N1bWVkLgorCitUaGVyZSBhcmUgYWxzbyB2YXJpYW50cyBvZiB0aGVzZSBtZXRob2RzIHRoYXQgc2ltcGx5IHJldHVybiBhIHN0cmluZyBpbnN0ZWFkIG9mCitwcmludGluZyBpdDoKKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuZm9ybWF0X3VzYWdlKCkKKworICAgUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgdGhlCisgICA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5mb3JtYXRfaGVscCgpCisKKyAgIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGEgaGVscCBtZXNzYWdlLCBpbmNsdWRpbmcgdGhlIHByb2dyYW0gdXNhZ2UgYW5kCisgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuCisKKworUGFydGlhbCBwYXJzaW5nCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKQorCitTb21ldGltZXMgYSBzY3JpcHQgbWF5IG9ubHkgcGFyc2UgYSBmZXcgb2YgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIHBhc3NpbmcKK3RoZSByZW1haW5pbmcgYXJndW1lbnRzIG9uIHRvIGFub3RoZXIgc2NyaXB0IG9yIHByb2dyYW0uIEluIHRoZXNlIGNhc2VzLCB0aGUKKzptZXRoOmBwYXJzZV9rbm93bl9hcmdzYCBtZXRob2QgY2FuIGJlIHVzZWZ1bC4gIEl0IHdvcmtzIG11Y2ggbGlrZQorOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBwcm9kdWNlIGFuIGVycm9yIHdoZW4KK2V4dHJhIGFyZ3VtZW50cyBhcmUgcHJlc2VudC4gIEluc3RlYWQsIGl0IHJldHVybnMgYSB0d28gaXRlbSB0dXBsZSBjb250YWluaW5nCit0aGUgcG9wdWxhdGVkIG5hbWVzcGFjZSBhbmQgdGhlIGxpc3Qgb2YgcmVtYWluaW5nIGFyZ3VtZW50IHN0cmluZ3MuCisKKzo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoWyctLWZvbycsICctLWJhZGdlcicsICdCQVInLCAnc3BhbSddKQorICAgKE5hbWVzcGFjZShiYXI9J0JBUicsIGZvbz1UcnVlKSwgWyctLWJhZGdlcicsICdzcGFtJ10pCisKKworQ3VzdG9taXppbmcgZmlsZSBwYXJzaW5nCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKQorCisgICBBcmd1bWVudHMgdGhhdCBhcmUgcmVhZCBmcm9tIGEgZmlsZSAoc2VlIHRoZSAqZnJvbWZpbGVfcHJlZml4X2NoYXJzKgorICAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3IpIGFyZSByZWFkIG9uZQorICAgYXJndW1lbnQgcGVyIGxpbmUuIDptZXRoOmBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3NgIGNhbiBiZSBvdmVycmlkZW4gZm9yCisgICBmYW5jaWVyIHJlYWRpbmcuCisKKyAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50ICphcmdfbGluZSogd2hpY2ggaXMgYSBzdHJpbmcgcmVhZCBmcm9tCisgICB0aGUgYXJndW1lbnQgZmlsZS4gIEl0IHJldHVybnMgYSBsaXN0IG9mIGFyZ3VtZW50cyBwYXJzZWQgZnJvbSB0aGlzIHN0cmluZy4KKyAgIFRoZSBtZXRob2QgaXMgY2FsbGVkIG9uY2UgcGVyIGxpbmUgcmVhZCBmcm9tIHRoZSBhcmd1bWVudCBmaWxlLCBpbiBvcmRlci4KKworICAgQSB1c2VmdWwgb3ZlcnJpZGUgb2YgdGhpcyBtZXRob2QgaXMgb25lIHRoYXQgdHJlYXRzIGVhY2ggc3BhY2Utc2VwYXJhdGVkIHdvcmQKKyAgIGFzIGFuIGFyZ3VtZW50OjoKKworICAgIGRlZiBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3Moc2VsZiwgYXJnX2xpbmUpOgorICAgICAgICBmb3IgYXJnIGluIGFyZ19saW5lLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBub3QgYXJnLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIGFyZworCisKK0V4aXRpbmcgbWV0aG9kcworXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmV4aXQoc3RhdHVzPTAsIG1lc3NhZ2U9Tm9uZSkKKworICAgVGhpcyBtZXRob2QgdGVybWluYXRlcyB0aGUgcHJvZ3JhbSwgZXhpdGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN0YXR1cyoKKyAgIGFuZCwgaWYgZ2l2ZW4sIGl0IHByaW50cyBhICptZXNzYWdlKiBiZWZvcmUgdGhhdC4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuZXJyb3IobWVzc2FnZSkKKworICAgVGhpcyBtZXRob2QgcHJpbnRzIGEgdXNhZ2UgbWVzc2FnZSBpbmNsdWRpbmcgdGhlICptZXNzYWdlKiB0byB0aGUKKyAgIHN0YW5kYXJkIG91dHB1dCBhbmQgdGVybWluYXRlcyB0aGUgcHJvZ3JhbSB3aXRoIGEgc3RhdHVzIGNvZGUgb2YgMi4KKworCisuLiBfYXJncGFyc2UtZnJvbS1vcHRwYXJzZToKKworVXBncmFkaW5nIG9wdHBhcnNlIGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yaWdpbmFsbHksIHRoZSBhcmdwYXJzZSBtb2R1bGUgaGFkIGF0dGVtcHRlZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGgKK29wdHBhcnNlLiAgSG93ZXZlciwgb3B0cGFyc2Ugd2FzIGRpZmZpY3VsdCB0byBleHRlbmQgdHJhbnNwYXJlbnRseSwgcGFydGljdWxhcmx5Cit3aXRoIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIG5ldyBgYG5hcmdzPWBgIHNwZWNpZmllcnMgYW5kIGJldHRlcgordXNhZ2UgbWVzc2FnZXMuICBXaGVuIG1vc3QgZXZlcnl0aGluZyBpbiBvcHRwYXJzZSBoYWQgZWl0aGVyIGJlZW4gY29weS1wYXN0ZWQKK292ZXIgb3IgbW9ua2V5LXBhdGNoZWQsIGl0IG5vIGxvbmdlciBzZWVtZWQgcHJhY3RpY2FsIHRvIHRyeSB0byBtYWludGFpbiB0aGUKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCitBIHBhcnRpYWwgdXBncmFkZSBwYXRoIGZyb20gb3B0cGFyc2UgdG8gYXJncGFyc2U6CisKKyogUmVwbGFjZSBhbGwgYGBhZGRfb3B0aW9uKClgYCBjYWxscyB3aXRoIDptZXRoOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgCisgIGNhbGxzLgorCisqIFJlcGxhY2UgYGBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKWBgIHdpdGggYGBhcmdzID0KKyAgcGFyc2VyLnBhcnNlX2FyZ3MoKWBgIGFuZCBhZGQgYWRkaXRpb25hbCA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YAorICBjYWxscyBmb3IgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorCisqIFJlcGxhY2UgY2FsbGJhY2sgYWN0aW9ucyBhbmQgdGhlIGBgY2FsbGJhY2tfKmBgIGtleXdvcmQgYXJndW1lbnRzIHdpdGgKKyAgYGB0eXBlYGAgb3IgYGBhY3Rpb25gYCBhcmd1bWVudHMuCisKKyogUmVwbGFjZSBzdHJpbmcgbmFtZXMgZm9yIGBgdHlwZWBgIGtleXdvcmQgYXJndW1lbnRzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcKKyAgdHlwZSBvYmplY3RzIChlLmcuIGludCwgZmxvYXQsIGNvbXBsZXgsIGV0YykuCisKKyogUmVwbGFjZSA6Y2xhc3M6YG9wdHBhcnNlLlZhbHVlc2Agd2l0aCA6Y2xhc3M6YE5hbWVzcGFjZWAgYW5kCisgIDpleGM6YG9wdHBhcnNlLk9wdGlvbkVycm9yYCBhbmQgOmV4Yzpgb3B0cGFyc2UuT3B0aW9uVmFsdWVFcnJvcmAgd2l0aAorICA6ZXhjOmBBcmd1bWVudEVycm9yYC4KKworKiBSZXBsYWNlIHN0cmluZ3Mgd2l0aCBpbXBsaWNpdCBhcmd1bWVudHMgc3VjaCBhcyBgYCVkZWZhdWx0YGAgb3IgYGAlcHJvZ2BgIHdpdGgKKyAgdGhlIHN0YW5kYXJkIHB5dGhvbiBzeW50YXggdG8gdXNlIGRpY3Rpb25hcmllcyB0byBmb3JtYXQgc3RyaW5ncywgdGhhdCBpcywKKyAgYGAlKGRlZmF1bHQpc2BgIGFuZCBgYCUocHJvZylzYGAuCisKKyogUmVwbGFjZSB0aGUgT3B0aW9uUGFyc2VyIGNvbnN0cnVjdG9yIGBgdmVyc2lvbmBgIGFyZ3VtZW50IHdpdGggYSBjYWxsIHRvCisgIGBgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nPHRoZSB2ZXJzaW9uPicpYGAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3QucnN0CmluZGV4IDgyY2E2ZTMuLmVmMzZmNTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN0LnJzdApAQCAtMjgsNiArMjgsMTEgQEAKIGNvbXBpbGVkIGludG8gYSBQeXRob24gY29kZSBvYmplY3QgdXNpbmcgdGhlIGJ1aWx0LWluIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4KIAogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBhc3QgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2FzdC5weT92aWV3PW1hcmt1cD5gXworCiBOb2RlIGNsYXNzZXMKIC0tLS0tLS0tLS0tLQogCkBAIC0xMjIsOSArMTI3LDkgQEAKIEFwYXJ0IGZyb20gdGhlIG5vZGUgY2xhc3NlcywgOm1vZDpgYXN0YCBtb2R1bGUgZGVmaW5lcyB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucwogYW5kIGNsYXNzZXMgZm9yIHRyYXZlcnNpbmcgYWJzdHJhY3Qgc3ludGF4IHRyZWVzOgogCi0uLiBmdW5jdGlvbjo6IHBhcnNlKGV4cHIsIGZpbGVuYW1lPSc8dW5rbm93bj4nLCBtb2RlPSdleGVjJykKKy4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBmaWxlbmFtZT0nPHVua25vd24+JywgbW9kZT0nZXhlYycpCiAKLSAgIFBhcnNlIGFuIGV4cHJlc3Npb24gaW50byBhbiBBU1Qgbm9kZS4gIEVxdWl2YWxlbnQgdG8gYGBjb21waWxlKGV4cHIsCisgICBQYXJzZSB0aGUgc291cmNlIGludG8gYW4gQVNUIG5vZGUuICBFcXVpdmFsZW50IHRvIGBgY29tcGlsZShzb3VyY2UsCiAgICBmaWxlbmFtZSwgbW9kZSwgYXN0LlB5Q0ZfT05MWV9BU1QpYGAuCiAKIApAQCAtMTgyLDkgKzE4Nyw5IEBACiAKIC4uIGZ1bmN0aW9uOjogd2Fsayhub2RlKQogCi0gICBSZWN1cnNpdmVseSB5aWVsZCBhbGwgY2hpbGQgbm9kZXMgb2YgKm5vZGUqLCBpbiBubyBzcGVjaWZpZWQgb3JkZXIuICBUaGlzIGlzCi0gICB1c2VmdWwgaWYgeW91IG9ubHkgd2FudCB0byBtb2RpZnkgbm9kZXMgaW4gcGxhY2UgYW5kIGRvbid0IGNhcmUgYWJvdXQgdGhlCi0gICBjb250ZXh0LgorICAgUmVjdXJzaXZlbHkgeWllbGQgYWxsIGRlc2NlbmRhbnQgbm9kZXMgaW4gdGhlIHRyZWUgc3RhcnRpbmcgYXQgKm5vZGUqCisgICAoaW5jbHVkaW5nICpub2RlKiBpdHNlbGYpLCBpbiBubyBzcGVjaWZpZWQgb3JkZXIuICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugb25seQorICAgd2FudCB0byBtb2RpZnkgbm9kZXMgaW4gcGxhY2UgYW5kIGRvbid0IGNhcmUgYWJvdXQgdGhlIGNvbnRleHQuCiAKIAogLi4gY2xhc3M6OiBOb2RlVmlzaXRvcigpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKaW5kZXggNDY4ZTViNS4uODEzYWMyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdApAQCAtMjExLDEwICsyMTEsMTMgQEAKICAgIC4uIG1ldGhvZDo6IGFjY2VwdCgpCiAKICAgICAgIEFjY2VwdCBhIGNvbm5lY3Rpb24uICBUaGUgc29ja2V0IG11c3QgYmUgYm91bmQgdG8gYW4gYWRkcmVzcyBhbmQgbGlzdGVuaW5nCi0gICAgICBmb3IgY29ubmVjdGlvbnMuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBgYChjb25uLCBhZGRyZXNzKWBgIHdoZXJlCi0gICAgICAqY29ubiogaXMgYSAqbmV3KiBzb2NrZXQgb2JqZWN0IHVzYWJsZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlCi0gICAgICBjb25uZWN0aW9uLCBhbmQgKmFkZHJlc3MqIGlzIHRoZSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyCi0gICAgICBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICBmb3IgY29ubmVjdGlvbnMuICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBlaXRoZXIgYGBOb25lYGAgb3IgYSBwYWlyCisgICAgICBgYChjb25uLCBhZGRyZXNzKWBgIHdoZXJlICpjb25uKiBpcyBhICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQKKyAgICAgIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sIGFuZCAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8KKyAgICAgIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKyAgICAgIFdoZW4gYGBOb25lYGAgaXMgcmV0dXJuZWQgaXQgbWVhbnMgdGhlIGNvbm5lY3Rpb24gZGlkbid0IHRha2UgcGxhY2UsIGluCisgICAgICB3aGljaCBjYXNlIHRoZSBzZXJ2ZXIgc2hvdWxkIGp1c3QgaWdub3JlIHRoaXMgZXZlbnQgYW5kIGtlZXAgbGlzdGVuaW5nCisgICAgICBmb3IgZnVydGhlciBpbmNvbWluZyBjb25uZWN0aW9ucy4KIAogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCkBAIC0yMjQsNiArMjI3LDEyIEBACiAgICAgICBmbHVzaGVkKS4gIFNvY2tldHMgYXJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhleSBhcmUKICAgICAgIGdhcmJhZ2UtY29sbGVjdGVkLgogCisuLiBjbGFzczo6IGRpc3BhdGNoZXJfd2l0aF9zZW5kKCkKKworICAgQSA6Y2xhc3M6YGRpc3BhdGNoZXJgIHN1YmNsYXNzIHdoaWNoIGFkZHMgc2ltcGxlIGJ1ZmZlcmVkIG91dHB1dCBjYXBhYmlsaXR5LAorICAgdXNlZnVsIGZvciBzaW1wbGUgY2xpZW50cy4gRm9yIG1vcmUgc29waGlzdGljYXRlZCB1c2FnZSB1c2UKKyAgIDpjbGFzczpgYXN5bmNoYXQuYXN5bmNfY2hhdGAuCisKIC4uIGNsYXNzOjogZmlsZV9kaXNwYXRjaGVyKCkKIAogICAgQSBmaWxlX2Rpc3BhdGNoZXIgdGFrZXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgZmlsZSBvYmplY3QgYWxvbmcgd2l0aCBhbgpAQCAtMjQwLDcgKzI0OSw3IEBACiAgICBzb2NrZXQgZm9yIHVzZSBieSB0aGUgOmNsYXNzOmBmaWxlX2Rpc3BhdGNoZXJgIGNsYXNzLiAgQXZhaWxhYmlsaXR5OiBVTklYLgogCiAKLS4uIF9hc3luY29yZS1leGFtcGxlOgorLi4gX2FzeW5jb3JlLWV4YW1wbGUtMToKIAogYXN5bmNvcmUgRXhhbXBsZSBiYXNpYyBIVFRQIGNsaWVudAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjUwLDcgKzI1OSw3IEBACiAKICAgIGltcG9ydCBhc3luY29yZSwgc29ja2V0CiAKLSAgIGNsYXNzIGh0dHBfY2xpZW50KGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgY2xhc3MgSFRUUENsaWVudChhc3luY29yZS5kaXNwYXRjaGVyKToKIAogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwYXRoKToKICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQpAQCAtMjc0LDYgKzI4Myw0NiBAQAogICAgICAgICAgICBzZW50ID0gc2VsZi5zZW5kKHNlbGYuYnVmZmVyKQogICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW3NlbnQ6XQogCi0gICBjID0gaHR0cF9jbGllbnQoJ3d3dy5weXRob24ub3JnJywgJy8nKQogCisgICBjbGllbnQgPSBIVFRQQ2xpZW50KCd3d3cucHl0aG9uLm9yZycsICcvJykKICAgIGFzeW5jb3JlLmxvb3AoKQorCisuLiBfYXN5bmNvcmUtZXhhbXBsZS0yOgorCithc3luY29yZSBFeGFtcGxlIGJhc2ljIGVjaG8gc2VydmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgaXMgYSBiYXNpYyBlY2hvIHNlcnZlciB0aGF0IHVzZXMgdGhlIDpjbGFzczpgZGlzcGF0Y2hlcmAgY2xhc3MgdG8gYWNjZXB0Citjb25uZWN0aW9ucyBhbmQgZGlzcGF0Y2hlcyB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgdG8gYSBoYW5kbGVyOjoKKworICAgIGltcG9ydCBhc3luY29yZQorICAgIGltcG9ydCBzb2NrZXQKKworICAgIGNsYXNzIEVjaG9IYW5kbGVyKGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kKToKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2KDgxOTIpCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhKQorCisgICAgY2xhc3MgRWNob1NlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICAgICAgc2VsZi5iaW5kKChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCisKKyAgICAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgICAgICBwYWlyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICAgICAgaWYgcGFpciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc29jaywgYWRkciA9IHBhaXIKKyAgICAgICAgICAgICAgICBwcmludCAnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkcikKKyAgICAgICAgICAgICAgICBoYW5kbGVyID0gRWNob0hhbmRsZXIoc29jaykKKworICAgIHNlcnZlciA9IEVjaG9TZXJ2ZXIoJ2xvY2FsaG9zdCcsIDgwODApCisgICAgYXN5bmNvcmUubG9vcCgpCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2F0ZXhpdC5yc3QgYi9Eb2MvbGlicmFyeS9hdGV4aXQucnN0CmluZGV4IDhiMzNkNWMuLmVhYjhjZDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F0ZXhpdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXRleGl0LnJzdApAQCAtMTQsOSArMTQsMTQgQEAKIGZ1bmN0aW9ucy4gIEZ1bmN0aW9ucyB0aHVzIHJlZ2lzdGVyZWQgYXJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgdXBvbiBub3JtYWwKIGludGVycHJldGVyIHRlcm1pbmF0aW9uLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBhdGV4aXQgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvYXRleGl0LnB5P3ZpZXc9bWFya3VwPmBfCisKIE5vdGU6IHRoZSBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB2aWEgdGhpcyBtb2R1bGUgYXJlIG5vdCBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbQotaXMga2lsbGVkIGJ5IGEgc2lnbmFsLCB3aGVuIGEgUHl0aG9uIGZhdGFsIGludGVybmFsIGVycm9yIGlzIGRldGVjdGVkLCBvciB3aGVuCi06ZnVuYzpgb3MuX2V4aXRgIGlzIGNhbGxlZC4KK2lzIGtpbGxlZCBieSBhIHNpZ25hbCBub3QgaGFuZGxlZCBieSBQeXRob24sIHdoZW4gYSBQeXRob24gZmF0YWwgaW50ZXJuYWwgZXJyb3IKK2lzIGRldGVjdGVkLCBvciB3aGVuIDpmdW5jOmBvcy5fZXhpdGAgaXMgY2FsbGVkLgogCiAuLiBpbmRleDo6IHNpbmdsZTogZXhpdGZ1bmMgKGluIHN5cykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QgYi9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdAppbmRleCBiNDk3ZTFmLi4yOWMzOTE0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdApAQCAtMjM2LDggKzIzNiw4IEBACiAgICBkZWYgbXVsX3N0ZXJlbyhzYW1wbGUsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yKToKICAgICAgICBsc2FtcGxlID0gYXVkaW9vcC50b21vbm8oc2FtcGxlLCB3aWR0aCwgMSwgMCkKICAgICAgICByc2FtcGxlID0gYXVkaW9vcC50b21vbm8oc2FtcGxlLCB3aWR0aCwgMCwgMSkKLSAgICAgICBsc2FtcGxlID0gYXVkaW9vcC5tdWwoc2FtcGxlLCB3aWR0aCwgbGZhY3RvcikKLSAgICAgICByc2FtcGxlID0gYXVkaW9vcC5tdWwoc2FtcGxlLCB3aWR0aCwgcmZhY3RvcikKKyAgICAgICBsc2FtcGxlID0gYXVkaW9vcC5tdWwobHNhbXBsZSwgd2lkdGgsIGxmYWN0b3IpCisgICAgICAgcnNhbXBsZSA9IGF1ZGlvb3AubXVsKHJzYW1wbGUsIHdpZHRoLCByZmFjdG9yKQogICAgICAgIGxzYW1wbGUgPSBhdWRpb29wLnRvc3RlcmVvKGxzYW1wbGUsIHdpZHRoLCAxLCAwKQogICAgICAgIHJzYW1wbGUgPSBhdWRpb29wLnRvc3RlcmVvKHJzYW1wbGUsIHdpZHRoLCAwLCAxKQogICAgICAgIHJldHVybiBhdWRpb29wLmFkZChsc2FtcGxlLCByc2FtcGxlLCB3aWR0aCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CmluZGV4IDA4NDY2MGQuLmFiODU0MzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgYmFzZTY0YCAtLS0gUkZDIDM1NDg6IEJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgRGF0YSBFbmNvZGluZ3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JkYi5yc3QgYi9Eb2MvbGlicmFyeS9iZGIucnN0CmluZGV4IDRlZTJmMTkuLjkzMzA0ZGUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2JkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmRiLnJzdApAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgICAqIGBgImV4Y2VwdGlvbiJgYDogQW4gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZC4KICAgICAgICogYGAiY19jYWxsImBgOiBBIEMgZnVuY3Rpb24gaXMgYWJvdXQgdG8gYmUgY2FsbGVkLgogICAgICAgKiBgYCJjX3JldHVybiJgYDogQSBDIGZ1bmN0aW9uIGhhcyByZXR1cm5lZC4KLSAgICAgICogYGAiY19leGNlcHRpb24iYGA6IEEgQyBmdW5jdGlvbiBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICAgICogYGAiY19leGNlcHRpb24iYGA6IEEgQyBmdW5jdGlvbiBoYXMgcmFpc2VkIGFuIGV4Y2VwdGlvbi4KIAogICAgICAgRm9yIHRoZSBQeXRob24gZXZlbnRzLCBzcGVjaWFsaXplZCBmdW5jdGlvbnMgKHNlZSBiZWxvdykgYXJlIGNhbGxlZC4gIEZvcgogICAgICAgdGhlIEMgZXZlbnRzLCBubyBhY3Rpb24gaXMgdGFrZW4uCkBAIC0zNDIsMTIgKzM0MiwxMCBAQAogLi4gZnVuY3Rpb246OiBlZmZlY3RpdmUoZmlsZSwgbGluZSwgZnJhbWUpCiAKICAgIERldGVybWluZSBpZiB0aGVyZSBpcyBhbiBlZmZlY3RpdmUgKGFjdGl2ZSkgYnJlYWtwb2ludCBhdCB0aGlzIGxpbmUgb2YgY29kZS4KLSAgIFJldHVybiBicmVha3BvaW50IG51bWJlciBvciAwIGlmIG5vbmUuCi0KLSAgIENhbGxlZCBvbmx5IGlmIHdlIGtub3cgdGhlcmUgaXMgYSBicmVha3BvaW50IGF0IHRoaXMgbG9jYXRpb24uICBSZXR1cm5zIHRoZQotICAgYnJlYWtwb2ludCB0aGF0IHdhcyB0cmlnZ2VyZWQgYW5kIGEgZmxhZyB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBvayB0byBkZWxldGUKLSAgIGEgdGVtcG9yYXJ5IGJyZWFrcG9pbnQuCisgICBSZXR1cm4gYSB0dXBsZSBvZiB0aGUgYnJlYWtwb2ludCBhbmQgYSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIGlmIGl0IGlzIG9rCisgICB0byBkZWxldGUgYSB0ZW1wb3JhcnkgYnJlYWtwb2ludC4gIFJldHVybiBgYChOb25lLCBOb25lKWBgIGlmIHRoZXJlIGlzIG5vCisgICBtYXRjaGluZyBicmVha3BvaW50LgogCiAuLiBmdW5jdGlvbjo6IHNldF90cmFjZSgpCiAKLSAgIFN0YXJ0cyBkZWJ1Z2dpbmcgd2l0aCBhIDpjbGFzczpgQmRiYCBpbnN0YW5jZSBmcm9tIGNhbGxlcidzIGZyYW1lLgorICAgU3RhcnQgZGVidWdnaW5nIHdpdGggYSA6Y2xhc3M6YEJkYmAgaW5zdGFuY2UgZnJvbSBjYWxsZXIncyBmcmFtZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QgYi9Eb2MvbGlicmFyeS9iaXNlY3QucnN0CmluZGV4IGViMzIzNTQuLjQ4Y2IzMzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmlzZWN0LnJzdApAQCAtMSwxMCArMSwxMCBAQAotCiA6bW9kOmBiaXNlY3RgIC0tLSBBcnJheSBiaXNlY3Rpb24gYWxnb3JpdGhtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IGJpc2VjdAogICAgOnN5bm9wc2lzOiBBcnJheSBiaXNlY3Rpb24gYWxnb3JpdGhtcyBmb3IgYmluYXJ5IHNlYXJjaGluZy4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgorLi4gc2VjdGlvbmF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4KIC4uIGV4YW1wbGUgYmFzZWQgb24gdGhlIFB5TW9kdWxlcyBGQVEgZW50cnkgYnkgQWFyb24gV2F0dGVycyA8YXJ3QHB5dGhvbnByb3MuY29tPgogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBtYWludGFpbmluZyBhIGxpc3QgaW4gc29ydGVkIG9yZGVyIHdpdGhvdXQKQEAgLTE0LDgwICsxNCwxMjUgQEAKIGFsZ29yaXRobSB0byBkbyBpdHMgd29yay4gIFRoZSBzb3VyY2UgY29kZSBtYXkgYmUgbW9zdCB1c2VmdWwgYXMgYSB3b3JraW5nCiBleGFtcGxlIG9mIHRoZSBhbGdvcml0aG0gKHRoZSBib3VuZGFyeSBjb25kaXRpb25zIGFyZSBhbHJlYWR5IHJpZ2h0ISkuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDIuMQorCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBiaXNlY3QgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2Jpc2VjdC5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQ6CiAKIAotLi4gZnVuY3Rpb246OiBiaXNlY3RfbGVmdChsaXN0LCBpdGVtWywgbG9bLCBoaV1dKQorLi4gZnVuY3Rpb246OiBiaXNlY3RfbGVmdChhLCB4LCBsbz0wLCBoaT1sZW4oYSkpCiAKLSAgIExvY2F0ZSB0aGUgcHJvcGVyIGluc2VydGlvbiBwb2ludCBmb3IgKml0ZW0qIGluICpsaXN0KiB0byBtYWludGFpbiBzb3J0ZWQgb3JkZXIuCi0gICBUaGUgcGFyYW1ldGVycyAqbG8qIGFuZCAqaGkqIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzdWJzZXQgb2YgdGhlIGxpc3Qgd2hpY2gKLSAgIHNob3VsZCBiZSBjb25zaWRlcmVkOyBieSBkZWZhdWx0IHRoZSBlbnRpcmUgbGlzdCBpcyB1c2VkLiAgSWYgKml0ZW0qIGlzIGFscmVhZHkKLSAgIHByZXNlbnQgaW4gKmxpc3QqLCB0aGUgaW5zZXJ0aW9uIHBvaW50IHdpbGwgYmUgYmVmb3JlICh0byB0aGUgbGVmdCBvZikgYW55Ci0gICBleGlzdGluZyBlbnRyaWVzLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIKLSAgIHRvIGBgbGlzdC5pbnNlcnQoKWBgLiAgVGhpcyBhc3N1bWVzIHRoYXQgKmxpc3QqIGlzIGFscmVhZHkgc29ydGVkLgorICAgTG9jYXRlIHRoZSBpbnNlcnRpb24gcG9pbnQgZm9yICp4KiBpbiAqYSogdG8gbWFpbnRhaW4gc29ydGVkIG9yZGVyLgorICAgVGhlIHBhcmFtZXRlcnMgKmxvKiBhbmQgKmhpKiBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IGEgc3Vic2V0IG9mIHRoZSBsaXN0CisgICB3aGljaCBzaG91bGQgYmUgY29uc2lkZXJlZDsgYnkgZGVmYXVsdCB0aGUgZW50aXJlIGxpc3QgaXMgdXNlZC4gIElmICp4KiBpcworICAgYWxyZWFkeSBwcmVzZW50IGluICphKiwgdGhlIGluc2VydGlvbiBwb2ludCB3aWxsIGJlIGJlZm9yZSAodG8gdGhlIGxlZnQgb2YpCisgICBhbnkgZXhpc3RpbmcgZW50cmllcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB0aGUgZmlyc3QKKyAgIHBhcmFtZXRlciB0byBgYGxpc3QuaW5zZXJ0KClgYCBhc3N1bWluZyB0aGF0ICphKiBpcyBhbHJlYWR5IHNvcnRlZC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMi4xCisgICBUaGUgcmV0dXJuZWQgaW5zZXJ0aW9uIHBvaW50ICppKiBwYXJ0aXRpb25zIHRoZSBhcnJheSAqYSogaW50byB0d28gaGFsdmVzIHNvCisgICB0aGF0IGBgYWxsKHZhbCA8IHggZm9yIHZhbCBpbiBhW2xvOmldKWBgIGZvciB0aGUgbGVmdCBzaWRlIGFuZAorICAgYGBhbGwodmFsID49IHggZm9yIHZhbCBpbiBhW2k6aGldKWBgIGZvciB0aGUgcmlnaHQgc2lkZS4KKworLi4gZnVuY3Rpb246OiBiaXNlY3RfcmlnaHQoYSwgeCwgbG89MCwgaGk9bGVuKGEpKQorICAgICAgICAgICAgICBiaXNlY3QoYSwgeCwgbG89MCwgaGk9bGVuKGEpKQorCisgICBTaW1pbGFyIHRvIDpmdW5jOmBiaXNlY3RfbGVmdGAsIGJ1dCByZXR1cm5zIGFuIGluc2VydGlvbiBwb2ludCB3aGljaCBjb21lcworICAgYWZ0ZXIgKHRvIHRoZSByaWdodCBvZikgYW55IGV4aXN0aW5nIGVudHJpZXMgb2YgKngqIGluICphKi4KKworICAgVGhlIHJldHVybmVkIGluc2VydGlvbiBwb2ludCAqaSogcGFydGl0aW9ucyB0aGUgYXJyYXkgKmEqIGludG8gdHdvIGhhbHZlcyBzbworICAgdGhhdCBgYGFsbCh2YWwgPD0geCBmb3IgdmFsIGluIGFbbG86aV0pYGAgZm9yIHRoZSBsZWZ0IHNpZGUgYW5kCisgICBgYGFsbCh2YWwgPiB4IGZvciB2YWwgaW4gYVtpOmhpXSlgYCBmb3IgdGhlIHJpZ2h0IHNpZGUuCisKKy4uIGZ1bmN0aW9uOjogaW5zb3J0X2xlZnQoYSwgeCwgbG89MCwgaGk9bGVuKGEpKQorCisgICBJbnNlcnQgKngqIGluICphKiBpbiBzb3J0ZWQgb3JkZXIuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIGBgYS5pbnNlcnQoYmlzZWN0LmJpc2VjdF9sZWZ0KGEsIHgsIGxvLCBoaSksIHgpYGAgYXNzdW1pbmcgdGhhdCAqYSogaXMKKyAgIGFscmVhZHkgc29ydGVkLiAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIE8obG9nIG4pIHNlYXJjaCBpcyBkb21pbmF0ZWQgYnkKKyAgIHRoZSBzbG93IE8obikgaW5zZXJ0aW9uIHN0ZXAuCisKKy4uIGZ1bmN0aW9uOjogaW5zb3J0X3JpZ2h0KGEsIHgsIGxvPTAsIGhpPWxlbihhKSkKKyAgICAgICAgICAgICAgaW5zb3J0KGEsIHgsIGxvPTAsIGhpPWxlbihhKSkKKworICAgU2ltaWxhciB0byA6ZnVuYzpgaW5zb3J0X2xlZnRgLCBidXQgaW5zZXJ0aW5nICp4KiBpbiAqYSogYWZ0ZXIgYW55IGV4aXN0aW5nCisgICBlbnRyaWVzIG9mICp4Ki4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBTb3J0ZWRDb2xsZWN0aW9uIHJlY2lwZQorICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzE5Ny1zb3J0ZWRjb2xsZWN0aW9uLz5gXyB0aGF0IHVzZXMKKyAgIGJpc2VjdCB0byBidWlsZCBhIGZ1bGwtZmVhdHVyZWQgY29sbGVjdGlvbiBjbGFzcyB3aXRoIHN0cmFpZ2h0LWZvcndhcmQgc2VhcmNoCisgICBtZXRob2RzIGFuZCBzdXBwb3J0IGZvciBhIGtleS1mdW5jdGlvbi4gIFRoZSBrZXlzIGFyZSBwcmVjb21wdXRlZCB0byBzYXZlCisgICB1bm5lY2Vzc2FyeSBjYWxscyB0byB0aGUga2V5IGZ1bmN0aW9uIGR1cmluZyBzZWFyY2hlcy4KIAogCi0uLiBmdW5jdGlvbjo6IGJpc2VjdF9yaWdodChsaXN0LCBpdGVtWywgbG9bLCBoaV1dKQorU2VhcmNoaW5nIFNvcnRlZCBMaXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICBTaW1pbGFyIHRvIDpmdW5jOmBiaXNlY3RfbGVmdGAsIGJ1dCByZXR1cm5zIGFuIGluc2VydGlvbiBwb2ludCB3aGljaCBjb21lcyBhZnRlcgotICAgKHRvIHRoZSByaWdodCBvZikgYW55IGV4aXN0aW5nIGVudHJpZXMgb2YgKml0ZW0qIGluICpsaXN0Ki4KK1RoZSBhYm92ZSA6ZnVuYzpgYmlzZWN0YCBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgZmluZGluZyBpbnNlcnRpb24gcG9pbnRzIGJ1dAorY2FuIGJlIHRyaWNreSBvciBhd2t3YXJkIHRvIHVzZSBmb3IgY29tbW9uIHNlYXJjaGluZyB0YXNrcy4gVGhlIGZvbGxvd2luZyBmaXZlCitmdW5jdGlvbnMgc2hvdyBob3cgdG8gdHJhbnNmb3JtIHRoZW0gaW50byB0aGUgc3RhbmRhcmQgbG9va3VwcyBmb3Igc29ydGVkCitsaXN0czo6CiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMQorICAgIGRlZiBpbmRleChhLCB4KToKKyAgICAgICAgJ0xvY2F0ZSB0aGUgbGVmdG1vc3QgdmFsdWUgZXhhY3RseSBlcXVhbCB0byB4JworICAgICAgICBpID0gYmlzZWN0X2xlZnQoYSwgeCkKKyAgICAgICAgaWYgaSAhPSBsZW4oYSkgYW5kIGFbaV0gPT0geDoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBmaW5kX2x0KGEsIHgpOgorICAgICAgICAnRmluZCByaWdodG1vc3QgdmFsdWUgbGVzcyB0aGFuIHgnCisgICAgICAgIGkgPSBiaXNlY3RfbGVmdChhLCB4KQorICAgICAgICBpZiBpOgorICAgICAgICAgICAgcmV0dXJuIGFbaS0xXQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICBkZWYgZmluZF9sZShhLCB4KToKKyAgICAgICAgJ0ZpbmQgcmlnaHRtb3N0IHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB4JworICAgICAgICBpID0gYmlzZWN0X3JpZ2h0KGEsIHgpCisgICAgICAgIGlmIGk6CisgICAgICAgICAgICByZXR1cm4gYVtpLTFdCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBmaW5kX2d0KGEsIHgpOgorICAgICAgICAnRmluZCBsZWZ0bW9zdCB2YWx1ZSBncmVhdGVyIHRoYW4geCcKKyAgICAgICAgaSA9IGJpc2VjdF9yaWdodChhLCB4KQorICAgICAgICBpZiBpICE9IGxlbihhKToKKyAgICAgICAgICAgIHJldHVybiBhW2ldCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBmaW5kX2dlKGEsIHgpOgorICAgICAgICAnRmluZCBsZWZ0bW9zdCBpdGVtIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB4JworICAgICAgICBpID0gYmlzZWN0X2xlZnQoYSwgeCkKKyAgICAgICAgaWYgaSAhPSBsZW4oYSk6CisgICAgICAgICAgICByZXR1cm4gYVtpXQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAKIAotLi4gZnVuY3Rpb246OiBiaXNlY3QoLi4uKQotCi0gICBBbGlhcyBmb3IgOmZ1bmM6YGJpc2VjdF9yaWdodGAuCi0KLQotLi4gZnVuY3Rpb246OiBpbnNvcnRfbGVmdChsaXN0LCBpdGVtWywgbG9bLCBoaV1dKQotCi0gICBJbnNlcnQgKml0ZW0qIGluICpsaXN0KiBpbiBzb3J0ZWQgb3JkZXIuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgIGBgbGlzdC5pbnNlcnQoYmlzZWN0LmJpc2VjdF9sZWZ0KGxpc3QsIGl0ZW0sIGxvLCBoaSksIGl0ZW0pYGAuICBUaGlzIGFzc3VtZXMKLSAgIHRoYXQgKmxpc3QqIGlzIGFscmVhZHkgc29ydGVkLgotCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjEKLQotCi0uLiBmdW5jdGlvbjo6IGluc29ydF9yaWdodChsaXN0LCBpdGVtWywgbG9bLCBoaV1dKQotCi0gICBTaW1pbGFyIHRvIDpmdW5jOmBpbnNvcnRfbGVmdGAsIGJ1dCBpbnNlcnRpbmcgKml0ZW0qIGluICpsaXN0KiBhZnRlciBhbnkKLSAgIGV4aXN0aW5nIGVudHJpZXMgb2YgKml0ZW0qLgotCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjEKLQotCi0uLiBmdW5jdGlvbjo6IGluc29ydCguLi4pCi0KLSAgIEFsaWFzIGZvciA6ZnVuYzpgaW5zb3J0X3JpZ2h0YC4KLQotCi1FeGFtcGxlcwotLS0tLS0tLS0KK090aGVyIEV4YW1wbGVzCistLS0tLS0tLS0tLS0tLQogCiAuLiBfYmlzZWN0LWV4YW1wbGU6CiAKLVRoZSA6ZnVuYzpgYmlzZWN0YCBmdW5jdGlvbiBpcyBnZW5lcmFsbHkgdXNlZnVsIGZvciBjYXRlZ29yaXppbmcgbnVtZXJpYyBkYXRhLgotVGhpcyBleGFtcGxlIHVzZXMgOmZ1bmM6YGJpc2VjdGAgdG8gbG9vayB1cCBhIGxldHRlciBncmFkZSBmb3IgYW4gZXhhbSB0b3RhbAotKHNheSkgYmFzZWQgb24gYSBzZXQgb2Ygb3JkZXJlZCBudW1lcmljIGJyZWFrcG9pbnRzOiA4NSBhbmQgdXAgaXMgYW4gJ0EnLCA3NS4uODQKLWlzIGEgJ0InLCBldGMuCitUaGUgOmZ1bmM6YGJpc2VjdGAgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCBmb3IgbnVtZXJpYyB0YWJsZSBsb29rdXBzLiBUaGlzCitleGFtcGxlIHVzZXMgOmZ1bmM6YGJpc2VjdGAgdG8gbG9vayB1cCBhIGxldHRlciBncmFkZSBmb3IgYW4gZXhhbSBzY29yZSAoc2F5KQorYmFzZWQgb24gYSBzZXQgb2Ygb3JkZXJlZCBudW1lcmljIGJyZWFrcG9pbnRzOiA5MCBhbmQgdXAgaXMgYW4gJ0EnLCA4MCB0byA4OSBpcworYSAnQicsIGFuZCBzbyBvbjo6CiAKLSAgID4+PiBncmFkZXMgPSAiRkVEQ0JBIgotICAgPj4+IGJyZWFrcG9pbnRzID0gWzMwLCA0NCwgNjYsIDc1LCA4NV0KLSAgID4+PiBmcm9tIGJpc2VjdCBpbXBvcnQgYmlzZWN0Ci0gICA+Pj4gZGVmIGdyYWRlKHRvdGFsKToKLSAgIC4uLiAgICAgICAgICAgcmV0dXJuIGdyYWRlc1tiaXNlY3QoYnJlYWtwb2ludHMsIHRvdGFsKV0KKyAgID4+PiBkZWYgZ3JhZGUoc2NvcmUsIGJyZWFrcG9pbnRzPVs2MCwgNzAsIDgwLCA5MF0sIGdyYWRlcz0nRkRDQkEnKToKKyAgIC4uLiAgICAgaSA9IGJpc2VjdChicmVha3BvaW50cywgc2NvcmUpCisgICAuLi4gICAgIHJldHVybiBncmFkZXNbaV0KICAgIC4uLgotICAgPj4+IGdyYWRlKDY2KQotICAgJ0MnCi0gICA+Pj4gbWFwKGdyYWRlLCBbMzMsIDk5LCA3NywgNDQsIDEyLCA4OF0pCi0gICBbJ0UnLCAnQScsICdCJywgJ0QnLCAnRicsICdBJ10KKyAgID4+PiBbZ3JhZGUoc2NvcmUpIGZvciBzY29yZSBpbiBbMzMsIDk5LCA3NywgNzAsIDg5LCA5MCwgMTAwXV0KKyAgIFsnRicsICdBJywgJ0MnLCAnQycsICdCJywgJ0EnLCAnQSddCiAKIFVubGlrZSB0aGUgOmZ1bmM6YHNvcnRlZGAgZnVuY3Rpb24sIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIHRoZSA6ZnVuYzpgYmlzZWN0YAogZnVuY3Rpb25zIHRvIGhhdmUgKmtleSogb3IgKnJldmVyc2VkKiBhcmd1bWVudHMgYmVjYXVzZSB0aGF0IHdvdWxkIGxlYWQgdG8gYW4KLWluZWZmaWNlbnQgZGVzaWduIChzdWNjZXNzaXZlIGNhbGxzIHRvIGJpc2VjdCBmdW5jdGlvbnMgd291bGQgbm90ICJyZW1lbWJlciIKK2luZWZmaWNpZW50IGRlc2lnbiAoc3VjY2Vzc2l2ZSBjYWxscyB0byBiaXNlY3QgZnVuY3Rpb25zIHdvdWxkIG5vdCAicmVtZW1iZXIiCiBhbGwgb2YgdGhlIHByZXZpb3VzIGtleSBsb29rdXBzKS4KIAogSW5zdGVhZCwgaXQgaXMgYmV0dGVyIHRvIHNlYXJjaCBhIGxpc3Qgb2YgcHJlY29tcHV0ZWQga2V5cyB0byBmaW5kIHRoZSBpbmRleApAQCAtMTA0LDMgKzE0OSw0IEBACiAgICAgKCdyZWQnLCA1KQogICAgID4+PiBkYXRhW2Jpc2VjdF9sZWZ0KGtleXMsIDgpXQogICAgICgneWVsbG93JywgOCkKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnoyLnJzdCBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKaW5kZXggYmY4ZWJjMC4uZWQyODFiZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnoyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iejIucnN0CkBAIC02MSw2ICs2MSwxMSBAQAogICAgcmVhZGluZy4gSW5zdGFuY2VzIHN1cHBvcnQgaXRlcmF0aW9uIGluIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgOmNsYXNzOmBmaWxlYAogICAgaW5zdGFuY2VzLgogCisgICA6Y2xhc3M6YEJaMkZpbGVgIHN1cHBvcnRzIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0IGIvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0CmluZGV4IGQ2NTBmZjQuLjIyNDVlNTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NhbGVuZGFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jYWxlbmRhci5yc3QKQEAgLTE2LDEyICsxNiwxNiBAQAogYXJlIGdpdmVuIGFzIGludGVnZXJzLiBGb3IgcmVsYXRlZAogZnVuY3Rpb25hbGl0eSwgc2VlIGFsc28gdGhlIDptb2Q6YGRhdGV0aW1lYCBhbmQgOm1vZDpgdGltZWAgbW9kdWxlcy4KIAotTW9zdCBvZiB0aGVzZSBmdW5jdGlvbnMgYW5kIGNsYXNzc2VzIHJlbHkgb24gdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgd2hpY2gKK01vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIHJlbHkgb24gdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgd2hpY2gKIHVzZXMgYW4gaWRlYWxpemVkIGNhbGVuZGFyLCB0aGUgY3VycmVudCBHcmVnb3JpYW4gY2FsZW5kYXIgaW5kZWZpbml0ZWx5IGV4dGVuZGVkCiBpbiBib3RoIGRpcmVjdGlvbnMuICBUaGlzIG1hdGNoZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlICJwcm9sZXB0aWMgR3JlZ29yaWFuIgogY2FsZW5kYXIgaW4gRGVyc2hvd2l0eiBhbmQgUmVpbmdvbGQncyBib29rICJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnMiLCB3aGVyZQogaXQncyB0aGUgYmFzZSBjYWxlbmRhciBmb3IgYWxsIGNvbXB1dGF0aW9ucy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgY2FsZW5kYXIgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2NhbGVuZGFyLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGNsYXNzOjogQ2FsZW5kYXIoW2ZpcnN0d2Vla2RheV0pCiAKQEAgLTE3OCw5ICsxODIsOSBAQAogLi4gY2xhc3M6OiBMb2NhbGVUZXh0Q2FsZW5kYXIoW2ZpcnN0d2Vla2RheVssIGxvY2FsZV1dKQogCiAgICBUaGlzIHN1YmNsYXNzIG9mIDpjbGFzczpgVGV4dENhbGVuZGFyYCBjYW4gYmUgcGFzc2VkIGEgbG9jYWxlIG5hbWUgaW4gdGhlCi0gICBjb25zdHJ1Y3RvciBhbmQgd2lsbCByZXR1cm4gbW9udGggYW5kIHdlZWtkYXkgbmFtZXMgaW4gdGhlIHNwZWNpZmllZAotICAgbG9jYWxlLiBJZiB0aGlzIGxvY2FsZSBpbmNsdWRlcyBhbiBlbmNvZGluZyBhbGwgc3RyaW5ncyBjb250YWluaW5nIG1vbnRoIGFuZAotICAgd2Vla2RheSBuYW1lcyB3aWxsIGJlIHJldHVybmVkIGFzIHVuaWNvZGUuCisgICBjb25zdHJ1Y3RvciBhbmQgd2lsbCByZXR1cm4gbW9udGggYW5kIHdlZWtkYXkgbmFtZXMgaW4gdGhlIHNwZWNpZmllZCBsb2NhbGUuCisgICBJZiB0aGlzIGxvY2FsZSBpbmNsdWRlcyBhbiBlbmNvZGluZyBhbGwgc3RyaW5ncyBjb250YWluaW5nIG1vbnRoIGFuZCB3ZWVrZGF5CisgICBuYW1lcyB3aWxsIGJlIHJldHVybmVkIGFzIHVuaWNvZGUuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCkBAIC0xOTQsNiArMTk4LDEzIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCisuLiBub3RlOjoKKworICAgVGhlIDptZXRoOmBmb3JtYXR3ZWVrZGF5YCBhbmQgOm1ldGg6YGZvcm1hdG1vbnRobmFtZWAgbWV0aG9kcyBvZiB0aGVzZSB0d28KKyAgIGNsYXNzZXMgdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBjdXJyZW50IGxvY2FsZSB0byB0aGUgZ2l2ZW4gKmxvY2FsZSouICBCZWNhdXNlCisgICB0aGUgY3VycmVudCBsb2NhbGUgaXMgYSBwcm9jZXNzLXdpZGUgc2V0dGluZywgdGhleSBhcmUgbm90IHRocmVhZC1zYWZlLgorCisKIEZvciBzaW1wbGUgdGV4dCBjYWxlbmRhcnMgdGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2dpLnJzdCBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKaW5kZXggZjBjMGEwNy4uMTQ5Y2YyMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY2dpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jZ2kucnN0CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgIHRoYXQgc2luZ2xlIHF1b3RlcyBhcmUgbmV2ZXIgdHJhbnNsYXRlZC4KIAogICAgSWYgdGhlIHZhbHVlIHRvIGJlIHF1b3RlZCBtaWdodCBpbmNsdWRlIHNpbmdsZS0gb3IgZG91YmxlLXF1b3RlIGNoYXJhY3RlcnMsCi0gICBvciBib3RoLCBjb25zaWRlciB1c2luZyB0aGUgOmZ1bmM6YHF1b3RlYXR0cmAgZnVuY3Rpb24gaW4gdGhlCisgICBvciBib3RoLCBjb25zaWRlciB1c2luZyB0aGUgOmZ1bmM6YH54bWwuc2F4LnNheHV0aWxzLnF1b3RlYXR0cmAgZnVuY3Rpb24gaW4gdGhlCiAgICA6bW9kOmB4bWwuc2F4LnNheHV0aWxzYCBtb2R1bGUgaW5zdGVhZC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jbWQucnN0IGIvRG9jL2xpYnJhcnkvY21kLnJzdAppbmRleCBjYzQ5OTkwLi5iMzUzNzNjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jbWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NtZC5yc3QKQEAgLTEyLDYgKzEyLDEwIEBACiB0b29scywgYW5kIHByb3RvdHlwZXMgdGhhdCB3aWxsIGxhdGVyIGJlIHdyYXBwZWQgaW4gYSBtb3JlIHNvcGhpc3RpY2F0ZWQKIGludGVyZmFjZS4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgY21kIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9jbWQucHk/dmlldz1tYXJrdXA+YF8KIAogLi4gY2xhc3M6OiBDbWQoW2NvbXBsZXRla2V5Wywgc3RkaW5bLCBzdGRvdXRdXV0pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CmluZGV4IGQ5NjYyNjIuLjcxYmYyNWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZWNzLnJzdApAQCAtNzYwLDcgKzc2MCw3IEBACiAKIFVuaWNvZGUgc3RyaW5ncyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc2VxdWVuY2VzIG9mIGNvZGVwb2ludHMgKHRvIGJlIHByZWNpc2UKIGFzIDpjdHlwZTpgUHlfVU5JQ09ERWAgYXJyYXlzKS4gRGVwZW5kaW5nIG9uIHRoZSB3YXkgUHl0aG9uIGlzIGNvbXBpbGVkIChlaXRoZXIKLXZpYSA6b3B0aW9uOmAtLWVuYWJsZS11bmljb2RlPXVjczJgIG9yIDpvcHRpb246YC0tZW5hYmxlLXVuaWNvZGU9dWNzNGAsIHdpdGggdGhlCit2aWEgYGAtLWVuYWJsZS11bmljb2RlPXVjczJgYCBvciBgYC0tZW5hYmxlLXVuaWNvZGU9dWNzNGBgLCB3aXRoIHRoZQogZm9ybWVyIGJlaW5nIHRoZSBkZWZhdWx0KSA6Y3R5cGU6YFB5X1VOSUNPREVgIGlzIGVpdGhlciBhIDE2LWJpdCBvciAzMi1iaXQgZGF0YQogdHlwZS4gT25jZSBhIFVuaWNvZGUgb2JqZWN0IGlzIHVzZWQgb3V0c2lkZSBvZiBDUFUgYW5kIG1lbW9yeSwgQ1BVIGVuZGlhbm5lc3MKIGFuZCBob3cgdGhlc2UgYXJyYXlzIGFyZSBzdG9yZWQgYXMgYnl0ZXMgYmVjb21lIGFuIGlzc3VlLiAgVHJhbnNmb3JtaW5nIGEKQEAgLTkwOCw2ICs5MDgsOCBAQAogfCBjcDUwMCAgICAgICAgICAgfCBFQkNESUMtQ1AtQkUsIEVCQ0RJQy1DUC1DSCwgICAgfCBXZXN0ZXJuIEV1cm9wZSAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgfCBJQk01MDAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBjcDcyMCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBcmFiaWMgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDczNyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHcmVlayAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDc3NSAgICAgICAgICAgfCBJQk03NzUgICAgICAgICAgICAgICAgICAgICAgICAgfCBCYWx0aWMgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgfApAQCAtOTIzLDYgKzkyNSw4IEBACiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwODU3ICAgICAgICAgICB8IDg1NywgSUJNODU3ICAgICAgICAgICAgICAgICAgICB8IFR1cmtpc2ggICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGNwODU4ICAgICAgICAgICB8IDg1OCwgSUJNODU4ICAgICAgICAgICAgICAgICAgICB8IFdlc3Rlcm4gRXVyb3BlICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwODYwICAgICAgICAgICB8IDg2MCwgSUJNODYwICAgICAgICAgICAgICAgICAgICB8IFBvcnR1Z3Vlc2UgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwODYxICAgICAgICAgICB8IDg2MSwgQ1AtSVMsIElCTTg2MSAgICAgICAgICAgICB8IEljZWxhbmRpYyAgICAgICAgICAgICAgICAgICAgICB8CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggYjc0YzI0ZC4uMzhkOWZhNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtMTUsMTQ0ICsxNSwyMDYgQEAKICAgIGltcG9ydCBpdGVydG9vbHMKICAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKIAotVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBoaWdoLXBlcmZvcm1hbmNlIGNvbnRhaW5lciBkYXRhdHlwZXMuICBDdXJyZW50bHksCi10aGVyZSBhcmUgdHdvIGRhdGF0eXBlcywgOmNsYXNzOmBkZXF1ZWAgYW5kIDpjbGFzczpgZGVmYXVsdGRpY3RgLCBhbmQKLW9uZSBkYXRhdHlwZSBmYWN0b3J5IGZ1bmN0aW9uLCA6ZnVuYzpgbmFtZWR0dXBsZWAuCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHNwZWNpYWxpemVkIGNvbnRhaW5lciBkYXRhdHlwZXMgcHJvdmlkaW5nIGFsdGVybmF0aXZlcyB0bworUHl0aG9uJ3MgZ2VuZXJhbCBwdXJwb3NlIGJ1aWx0LWluIGNvbnRhaW5lcnMsIDpjbGFzczpgZGljdGAsIDpjbGFzczpgbGlzdGAsCis6Y2xhc3M6YHNldGAsIGFuZCA6Y2xhc3M6YHR1cGxlYC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKLSAgIEFkZGVkIDpjbGFzczpgZGVmYXVsdGRpY3RgLgorPT09PT09PT09PT09PT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YG5hbWVkdHVwbGVgICAgICAgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgdHVwbGUgc3ViY2xhc3NlcyB3aXRoIG5hbWVkIGZpZWxkcyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorOmNsYXNzOmBkZXF1ZWAgICAgICAgICAgbGlzdC1saWtlIGNvbnRhaW5lciB3aXRoIGZhc3QgYXBwZW5kcyBhbmQgcG9wcyBvbiBlaXRoZXIgZW5kICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAorOmNsYXNzOmBDb3VudGVyYCAgICAgICAgZGljdCBzdWJjbGFzcyBmb3IgY291bnRpbmcgaGFzaGFibGUgb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworOmNsYXNzOmBPcmRlcmVkRGljdGAgICAgZGljdCBzdWJjbGFzcyB0aGF0IHJlbWVtYmVycyB0aGUgb3JkZXIgZW50cmllcyB3ZXJlIGFkZGVkICAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworOmNsYXNzOmBkZWZhdWx0ZGljdGAgICAgZGljdCBzdWJjbGFzcyB0aGF0IGNhbGxzIGEgZmFjdG9yeSBmdW5jdGlvbiB0byBzdXBwbHkgbWlzc2luZyB2YWx1ZXMgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQorPT09PT09PT09PT09PT09PT09PT09ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgotICAgQWRkZWQgOmZ1bmM6YG5hbWVkdHVwbGVgLgotCi1UaGUgc3BlY2lhbGl6ZWQgY29udGFpbmVycyBwcm92aWRlZCBpbiB0aGlzIG1vZHVsZSBwcm92aWRlIGFsdGVybmF0aXZlcwotdG8gUHl0aG9uJ3MgZ2VuZXJhbCBwdXJwb3NlIGJ1aWx0LWluIGNvbnRhaW5lcnMsIDpjbGFzczpgZGljdGAsCi06Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YHNldGAsIGFuZCA6Y2xhc3M6YHR1cGxlYC4KLQotQmVzaWRlcyB0aGUgY29udGFpbmVycyBwcm92aWRlZCBoZXJlLCB0aGUgb3B0aW9uYWwgOm1vZDpgYnNkZGJgCi1tb2R1bGUgb2ZmZXJzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBpbi1tZW1vcnkgb3IgZmlsZSBiYXNlZCBvcmRlcmVkCi1kaWN0aW9uYXJpZXMgd2l0aCBzdHJpbmcga2V5cyB1c2luZyB0aGUgOm1ldGg6YGJzZGRiLmJ0b3BlbmAgbWV0aG9kLgotCi1JbiBhZGRpdGlvbiB0byBjb250YWluZXJzLCB0aGUgY29sbGVjdGlvbnMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgQUJDcwotKGFic3RyYWN0IGJhc2UgY2xhc3NlcykgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBjbGFzcwotcHJvdmlkZXMgYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwgZm9yIGV4YW1wbGUsIGlzIGl0IGhhc2hhYmxlIG9yCi1hIG1hcHBpbmcuCi0KLS4uIHZlcnNpb25jaGFuZ2VkOjogMi42Ci0gICBBZGRlZCBhYnN0cmFjdCBiYXNlIGNsYXNzZXMuCi0KLUFCQ3MgLSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGNvbGxlY3Rpb25zIG1vZHVsZSBvZmZlcnMgdGhlIGZvbGxvd2luZyBBQkNzOgotCi09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUFCQyAgICAgICAgICAgICAgICAgICAgICAgIEluaGVyaXRzICAgICAgICAgICAgICAgQWJzdHJhY3QgTWV0aG9kcyAgICAgICAgTWl4aW4gTWV0aG9kcwotPT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci06Y2xhc3M6YENvbnRhaW5lcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAKLTpjbGFzczpgSGFzaGFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2hhc2hfX2BgCi06Y2xhc3M6YEl0ZXJhYmxlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAotOmNsYXNzOmBJdGVyYXRvcmAgICAgICAgICAgOmNsYXNzOmBJdGVyYWJsZWAgICAgICBgYG5leHRgYCAgICAgICAgICAgICAgICBgYF9faXRlcl9fYGAKLTpjbGFzczpgU2l6ZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAKLTpjbGFzczpgQ2FsbGFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NhbGxfX2BgCi0KLTpjbGFzczpgU2VxdWVuY2VgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgYGBfX2dldGl0ZW1fX2BgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYC4gYGBfX2l0ZXJfX2BgLCBgYF9fcmV2ZXJzZWRfX2BgLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBJdGVyYWJsZWAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGluZGV4YGAsIGFuZCBgYGNvdW50YGAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgQ29udGFpbmVyYAotCi06Y2xhc3M6YE11dGFibGVTZXF1ZW5jZWAgICA6Y2xhc3M6YFNlcXVlbmNlYCAgICAgIGBgX19zZXRpdGVtX19gYCAgICAgICAgIEluaGVyaXRlZCBTZXF1ZW5jZSBtZXRob2RzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fZGVsaXRlbV9fYGAsICAgICAgICBgYGFwcGVuZGBgLCBgYHJldmVyc2VgYCwgYGBleHRlbmRgYCwgYGBwb3BgYCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGBgaW5zZXJ0YGAgICAgICAgICAgYGByZW1vdmVgYCwgYW5kIGBgX19pYWRkX19gYAotCi06Y2xhc3M6YFNldGAgICAgICAgICAgICAgICA6Y2xhc3M6YFNpemVkYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19sZV9fYGAsIGBgX19sdF9fYGAsIGBgX19lcV9fYGAsIGBgX19uZV9fYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19ndF9fYGAsIGBgX19nZV9fYGAsIGBgX19hbmRfX2BgLCBgYF9fb3JfX2BgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YENvbnRhaW5lcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19zdWJfX2BgLCBgYF9feG9yX19gYCwgYW5kIGBgaXNkaXNqb2ludGBgCi0KLTpjbGFzczpgTXV0YWJsZVNldGAgICAgICAgIDpjbGFzczpgU2V0YCAgICAgICAgICAgYGBhZGRgYCBhbmQgICAgICAgICAgICAgSW5oZXJpdGVkIFNldCBtZXRob2RzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGRpc2NhcmRgYCAgICAgICAgICAgICBgYGNsZWFyYGAsIGBgcG9wYGAsIGBgcmVtb3ZlYGAsIGBgX19pb3JfX2BgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faWFuZF9fYGAsIGBgX19peG9yX19gYCwgYW5kIGBgX19pc3ViX19gYAotCi06Y2xhc3M6YE1hcHBpbmdgICAgICAgICAgICA6Y2xhc3M6YFNpemVkYCwgICAgICAgIGBgX19nZXRpdGVtX19gYCAgICAgICAgIGBgX19jb250YWluc19fYGAsIGBga2V5c2BgLCBgYGl0ZW1zYGAsIGBgdmFsdWVzYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgZ2V0YGAsIGBgX19lcV9fYGAsIGFuZCBgYF9fbmVfX2BgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YENvbnRhaW5lcmAKLQotOmNsYXNzOmBNdXRhYmxlTWFwcGluZ2AgICAgOmNsYXNzOmBNYXBwaW5nYCAgICAgICBgYF9fc2V0aXRlbV9fYGAgYW5kICAgICBJbmhlcml0ZWQgTWFwcGluZyBtZXRob2RzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fZGVsaXRlbV9fYGAgICAgICAgICBgYHBvcGBgLCBgYHBvcGl0ZW1gYCwgYGBjbGVhcmBgLCBgYHVwZGF0ZWBgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYGBzZXRkZWZhdWx0YGAKLQotCi06Y2xhc3M6YE1hcHBpbmdWaWV3YCAgICAgICA6Y2xhc3M6YFNpemVkYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19sZW5fX2BgCi06Y2xhc3M6YEtleXNWaWV3YCAgICAgICAgICA6Y2xhc3M6YE1hcHBpbmdWaWV3YCwgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YFNldGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAotOmNsYXNzOmBJdGVtc1ZpZXdgICAgICAgICAgOmNsYXNzOmBNYXBwaW5nVmlld2AsICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBTZXRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faXRlcl9fYGAKLTpjbGFzczpgVmFsdWVzVmlld2AgICAgICAgIDpjbGFzczpgTWFwcGluZ1ZpZXdgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwgYGBfX2l0ZXJfX2BgCi09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlc2UgQUJDcyBhbGxvdyB1cyB0byBhc2sgY2xhc3NlcyBvciBpbnN0YW5jZXMgaWYgdGhleSBwcm92aWRlCi1wYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlOjoKLQotICAgIHNpemUgPSBOb25lCi0gICAgaWYgaXNpbnN0YW5jZShteXZhciwgY29sbGVjdGlvbnMuU2l6ZWQpOgotICAgICAgICBzaXplID0gbGVuKG15dmFyKQotCi1TZXZlcmFsIG9mIHRoZSBBQkNzIGFyZSBhbHNvIHVzZWZ1bCBhcyBtaXhpbnMgdGhhdCBtYWtlIGl0IGVhc2llciB0byBkZXZlbG9wCi1jbGFzc2VzIHN1cHBvcnRpbmcgY29udGFpbmVyIEFQSXMuICBGb3IgZXhhbXBsZSwgdG8gd3JpdGUgYSBjbGFzcyBzdXBwb3J0aW5nCi10aGUgZnVsbCA6Y2xhc3M6YFNldGAgQVBJLCBpdCBvbmx5IG5lY2Vzc2FyeSB0byBzdXBwbHkgdGhlIHRocmVlIHVuZGVybHlpbmcKLWFic3RyYWN0IG1ldGhvZHM6IDptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19pdGVyX19gLCBhbmQgOm1ldGg6YF9fbGVuX19gLgotVGhlIEFCQyBzdXBwbGllcyB0aGUgcmVtYWluaW5nIG1ldGhvZHMgc3VjaCBhcyA6bWV0aDpgX19hbmRfX2AgYW5kCi06bWV0aDpgaXNkaXNqb2ludGAgOjoKLQotICAgIGNsYXNzIExpc3RCYXNlZFNldChjb2xsZWN0aW9ucy5TZXQpOgotICAgICAgICAgJycnIEFsdGVybmF0ZSBzZXQgaW1wbGVtZW50YXRpb24gZmF2b3Jpbmcgc3BhY2Ugb3ZlciBzcGVlZAotICAgICAgICAgICAgIGFuZCBub3QgcmVxdWlyaW5nIHRoZSBzZXQgZWxlbWVudHMgdG8gYmUgaGFzaGFibGUuICcnJwotICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKLSAgICAgICAgICAgICBzZWxmLmVsZW1lbnRzID0gbHN0ID0gW10KLSAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXRlcmFibGU6Ci0gICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBsc3Q6Ci0gICAgICAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHZhbHVlKQotICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuZWxlbWVudHMpCi0gICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gc2VsZi5lbGVtZW50cwotICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmVsZW1lbnRzKQotCi0gICAgczEgPSBMaXN0QmFzZWRTZXQoJ2FiY2RlZicpCi0gICAgczIgPSBMaXN0QmFzZWRTZXQoJ2RlZmdoaScpCi0gICAgb3ZlcmxhcCA9IHMxICYgczIgICAgICAgICAgICAjIFRoZSBfX2FuZF9fKCkgbWV0aG9kIGlzIHN1cHBvcnRlZCBhdXRvbWF0aWNhbGx5Ci0KLU5vdGVzIG9uIHVzaW5nIDpjbGFzczpgU2V0YCBhbmQgOmNsYXNzOmBNdXRhYmxlU2V0YCBhcyBhIG1peGluOgotCi0oMSkKLSAgIFNpbmNlIHNvbWUgc2V0IG9wZXJhdGlvbnMgY3JlYXRlIG5ldyBzZXRzLCB0aGUgZGVmYXVsdCBtaXhpbiBtZXRob2RzIG5lZWQKLSAgIGEgd2F5IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzIGZyb20gYW4gaXRlcmFibGUuIFRoZSBjbGFzcyBjb25zdHJ1Y3RvciBpcwotICAgYXNzdW1lZCB0byBoYXZlIGEgc2lnbmF0dXJlIGluIHRoZSBmb3JtIGBgQ2xhc3NOYW1lKGl0ZXJhYmxlKWBgLgotICAgVGhhdCBhc3N1bXB0aW9uIGlzIGZhY3RvcmVkLW91dCB0byBhbiBpbnRlcm5hbCBjbGFzc21ldGhvZCBjYWxsZWQKLSAgIDptZXRoOmBfZnJvbV9pdGVyYWJsZWAgd2hpY2ggY2FsbHMgYGBjbHMoaXRlcmFibGUpYGAgdG8gcHJvZHVjZSBhIG5ldyBzZXQuCi0gICBJZiB0aGUgOmNsYXNzOmBTZXRgIG1peGluIGlzIGJlaW5nIHVzZWQgaW4gYSBjbGFzcyB3aXRoIGEgZGlmZmVyZW50Ci0gICBjb25zdHJ1Y3RvciBzaWduYXR1cmUsIHlvdSB3aWxsIG5lZWQgdG8gb3ZlcnJpZGUgOm1ldGg6YGZyb21faXRlcmFibGVgCi0gICB3aXRoIGEgY2xhc3NtZXRob2QgdGhhdCBjYW4gY29uc3RydWN0IG5ldyBpbnN0YW5jZXMgZnJvbQotICAgYW4gaXRlcmFibGUgYXJndW1lbnQuCi0KLSgyKQotICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgcmVkZWZpbmUgOm1ldGg6YF9fbGVfX2AgYW5kCi0gICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KLQotKDMpCi0gICBUaGUgOmNsYXNzOmBTZXRgIG1peGluIHByb3ZpZGVzIGEgOm1ldGg6YF9oYXNoYCBtZXRob2QgdG8gY29tcHV0ZSBhIGhhc2ggdmFsdWUKLSAgIGZvciB0aGUgc2V0OyBob3dldmVyLCA6bWV0aDpgX19oYXNoX19gIGlzIG5vdCBkZWZpbmVkIGJlY2F1c2Ugbm90IGFsbCBzZXRzCi0gICBhcmUgaGFzaGFibGUgb3IgaW1tdXRhYmxlLiAgVG8gYWRkIHNldCBoYXNoYWJpbHR5IHVzaW5nIG1peGlucywKLSAgIGluaGVyaXQgZnJvbSBib3RoIDptZXRoOmBTZXRgIGFuZCA6bWV0aDpgSGFzaGFibGVgLCB0aGVuIGRlZmluZQotICAgYGBfX2hhc2hfXyA9IFNldC5faGFzaGBgLgorSW4gYWRkaXRpb24gdG8gdGhlIGNvbmNyZXRlIGNvbnRhaW5lciBjbGFzc2VzLCB0aGUgY29sbGVjdGlvbnMgbW9kdWxlIHByb3ZpZGVzCis6cmVmOmBhYnN0cmFjdC1iYXNlLWNsYXNzZXNgIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEgY2xhc3MgcHJvdmlkZXMgYQorcGFydGljdWxhciBpbnRlcmZhY2UsIGZvciBleGFtcGxlLCB3aGV0aGVyIGl0IGlzIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogLi4gc2VlYWxzbzo6CiAKLSAgICogYE9yZGVyZWRTZXQgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTQvPmBfIGZvciBhbgotICAgICBleGFtcGxlIGJ1aWx0IG9uIDpjbGFzczpgTXV0YWJsZVNldGAuCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGNvbGxlY3Rpb25zIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9jb2xsZWN0aW9ucy5weT92aWV3PW1hcmt1cD5gXwogCi0gICAqIEZvciBtb3JlIGFib3V0IEFCQ3MsIHNlZSB0aGUgOm1vZDpgYWJjYCBtb2R1bGUgYW5kIDpwZXA6YDMxMTlgLgorOmNsYXNzOmBDb3VudGVyYCBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBjb3VudGVyIHRvb2wgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBjb252ZW5pZW50IGFuZCByYXBpZCB0YWxsaWVzLgorRm9yIGV4YW1wbGU6OgorCisgICAgPj4+ICMgVGFsbHkgb2NjdXJyZW5jZXMgb2Ygd29yZHMgaW4gYSBsaXN0CisgICAgPj4+IGNudCA9IENvdW50ZXIoKQorICAgID4+PiBmb3Igd29yZCBpbiBbJ3JlZCcsICdibHVlJywgJ3JlZCcsICdncmVlbicsICdibHVlJywgJ2JsdWUnXToKKyAgICAuLi4gICAgIGNudFt3b3JkXSArPSAxCisgICAgPj4+IGNudAorICAgIENvdW50ZXIoeydibHVlJzogMywgJ3JlZCc6IDIsICdncmVlbic6IDF9KQorCisgICAgPj4+ICMgRmluZCB0aGUgdGVuIG1vc3QgY29tbW9uIHdvcmRzIGluIEhhbWxldAorICAgID4+PiBpbXBvcnQgcmUKKyAgICA+Pj4gd29yZHMgPSByZS5maW5kYWxsKCdcdysnLCBvcGVuKCdoYW1sZXQudHh0JykucmVhZCgpLmxvd2VyKCkpCisgICAgPj4+IENvdW50ZXIod29yZHMpLm1vc3RfY29tbW9uKDEwKQorICAgIFsoJ3RoZScsIDExNDMpLCAoJ2FuZCcsIDk2NiksICgndG8nLCA3NjIpLCAoJ29mJywgNjY5KSwgKCdpJywgNjMxKSwKKyAgICAgKCd5b3UnLCA1NTQpLCAgKCdhJywgNTQ2KSwgKCdteScsIDUxNCksICgnaGFtbGV0JywgNDcxKSwgKCdpbicsIDQ1MSldCisKKy4uIGNsYXNzOjogQ291bnRlcihbaXRlcmFibGUtb3ItbWFwcGluZ10pCisKKyAgIEEgOmNsYXNzOmBDb3VudGVyYCBpcyBhIDpjbGFzczpgZGljdGAgc3ViY2xhc3MgZm9yIGNvdW50aW5nIGhhc2hhYmxlIG9iamVjdHMuCisgICBJdCBpcyBhbiB1bm9yZGVyZWQgY29sbGVjdGlvbiB3aGVyZSBlbGVtZW50cyBhcmUgc3RvcmVkIGFzIGRpY3Rpb25hcnkga2V5cworICAgYW5kIHRoZWlyIGNvdW50cyBhcmUgc3RvcmVkIGFzIGRpY3Rpb25hcnkgdmFsdWVzLiAgQ291bnRzIGFyZSBhbGxvd2VkIHRvIGJlCisgICBhbnkgaW50ZWdlciB2YWx1ZSBpbmNsdWRpbmcgemVybyBvciBuZWdhdGl2ZSBjb3VudHMuICBUaGUgOmNsYXNzOmBDb3VudGVyYAorICAgY2xhc3MgaXMgc2ltaWxhciB0byBiYWdzIG9yIG11bHRpc2V0cyBpbiBvdGhlciBsYW5ndWFnZXMuCisKKyAgIEVsZW1lbnRzIGFyZSBjb3VudGVkIGZyb20gYW4gKml0ZXJhYmxlKiBvciBpbml0aWFsaXplZCBmcm9tIGFub3RoZXIKKyAgICptYXBwaW5nKiAob3IgY291bnRlcik6CisKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbmV3LCBlbXB0eSBjb3VudGVyCisgICAgICAgID4+PiBjID0gQ291bnRlcignZ2FsbGFoYWQnKSAgICAgICAgICAgICAgICAgIyBhIG5ldyBjb3VudGVyIGZyb20gYW4gaXRlcmFibGUKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKHsncmVkJzogNCwgJ2JsdWUnOiAyfSkgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBhIG1hcHBpbmcKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKGNhdHM9NCwgZG9ncz04KSAgICAgICAgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBrZXl3b3JkIGFyZ3MKKworICAgQ291bnRlciBvYmplY3RzIGhhdmUgYSBkaWN0aW9uYXJ5IGludGVyZmFjZSBleGNlcHQgdGhhdCB0aGV5IHJldHVybiBhIHplcm8KKyAgIGNvdW50IGZvciBtaXNzaW5nIGl0ZW1zIGluc3RlYWQgb2YgcmFpc2luZyBhIDpleGM6YEtleUVycm9yYDoKKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoWydlZ2dzJywgJ2hhbSddKQorICAgICAgICA+Pj4gY1snYmFjb24nXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY291bnQgb2YgYSBtaXNzaW5nIGVsZW1lbnQgaXMgemVybworICAgICAgICAwCisKKyAgIFNldHRpbmcgYSBjb3VudCB0byB6ZXJvIGRvZXMgbm90IHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYSBjb3VudGVyLgorICAgVXNlIGBgZGVsYGAgdG8gcmVtb3ZlIGl0IGVudGlyZWx5OgorCisgICAgICAgID4+PiBjWydzYXVzYWdlJ10gPSAwICAgICAgICAgICAgICAgICAgICAgICAgIyBjb3VudGVyIGVudHJ5IHdpdGggYSB6ZXJvIGNvdW50CisgICAgICAgID4+PiBkZWwgY1snc2F1c2FnZSddICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWwgYWN0dWFsbHkgcmVtb3ZlcyB0aGUgZW50cnkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgQ291bnRlciBvYmplY3RzIHN1cHBvcnQgdGhyZWUgbWV0aG9kcyBiZXlvbmQgdGhvc2UgYXZhaWxhYmxlIGZvciBhbGwKKyAgIGRpY3Rpb25hcmllczoKKworICAgLi4gbWV0aG9kOjogZWxlbWVudHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBlbGVtZW50cyByZXBlYXRpbmcgZWFjaCBhcyBtYW55IHRpbWVzIGFzIGl0cworICAgICAgY291bnQuICBFbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gYXJiaXRyYXJ5IG9yZGVyLiAgSWYgYW4gZWxlbWVudCdzIGNvdW50CisgICAgICBpcyBsZXNzIHRoYW4gb25lLCA6bWV0aDpgZWxlbWVudHNgIHdpbGwgaWdub3JlIGl0LgorCisgICAgICAgICAgICA+Pj4gYyA9IENvdW50ZXIoYT00LCBiPTIsIGM9MCwgZD0tMikKKyAgICAgICAgICAgID4+PiBsaXN0KGMuZWxlbWVudHMoKSkKKyAgICAgICAgICAgIFsnYScsICdhJywgJ2EnLCAnYScsICdiJywgJ2InXQorCisgICAuLiBtZXRob2Q6OiBtb3N0X2NvbW1vbihbbl0pCisKKyAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlICpuKiBtb3N0IGNvbW1vbiBlbGVtZW50cyBhbmQgdGhlaXIgY291bnRzIGZyb20gdGhlCisgICAgICBtb3N0IGNvbW1vbiB0byB0aGUgbGVhc3QuICBJZiAqbiogaXMgbm90IHNwZWNpZmllZCwgOmZ1bmM6YG1vc3RfY29tbW9uYAorICAgICAgcmV0dXJucyAqYWxsKiBlbGVtZW50cyBpbiB0aGUgY291bnRlci4gIEVsZW1lbnRzIHdpdGggZXF1YWwgY291bnRzIGFyZQorICAgICAgb3JkZXJlZCBhcmJpdHJhcmlseToKKworICAgICAgICAgICAgPj4+IENvdW50ZXIoJ2FicmFjYWRhYnJhJykubW9zdF9jb21tb24oMykKKyAgICAgICAgICAgIFsoJ2EnLCA1KSwgKCdyJywgMiksICgnYicsIDIpXQorCisgICAuLiBtZXRob2Q6OiBzdWJ0cmFjdChbaXRlcmFibGUtb3ItbWFwcGluZ10pCisKKyAgICAgIEVsZW1lbnRzIGFyZSBzdWJ0cmFjdGVkIGZyb20gYW4gKml0ZXJhYmxlKiBvciBmcm9tIGFub3RoZXIgKm1hcHBpbmcqCisgICAgICAob3IgY291bnRlcikuICBMaWtlIDptZXRoOmBkaWN0LnVwZGF0ZWAgYnV0IHN1YnRyYWN0cyBjb3VudHMgaW5zdGVhZAorICAgICAgb2YgcmVwbGFjaW5nIHRoZW0uICBCb3RoIGlucHV0cyBhbmQgb3V0cHV0cyBtYXkgYmUgemVybyBvciBuZWdhdGl2ZS4KKworICAgICAgICAgICAgPj4+IGMgPSBDb3VudGVyKGE9NCwgYj0yLCBjPTAsIGQ9LTIpCisgICAgICAgICAgICA+Pj4gZCA9IENvdW50ZXIoYT0xLCBiPTIsIGM9MywgZD00KQorICAgICAgICAgICAgPj4+IGMuc3VidHJhY3QoZCkKKyAgICAgICAgICAgIENvdW50ZXIoeydhJzogMywgJ2InOiAwLCAnYyc6IC0zLCAnZCc6IC02fSkKKworICAgVGhlIHVzdWFsIGRpY3Rpb25hcnkgbWV0aG9kcyBhcmUgYXZhaWxhYmxlIGZvciA6Y2xhc3M6YENvdW50ZXJgIG9iamVjdHMKKyAgIGV4Y2VwdCBmb3IgdHdvIHdoaWNoIHdvcmsgZGlmZmVyZW50bHkgZm9yIGNvdW50ZXJzLgorCisgICAuLiBtZXRob2Q6OiBmcm9ta2V5cyhpdGVyYWJsZSkKKworICAgICAgVGhpcyBjbGFzcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciA6Y2xhc3M6YENvdW50ZXJgIG9iamVjdHMuCisKKyAgIC4uIG1ldGhvZDo6IHVwZGF0ZShbaXRlcmFibGUtb3ItbWFwcGluZ10pCisKKyAgICAgIEVsZW1lbnRzIGFyZSBjb3VudGVkIGZyb20gYW4gKml0ZXJhYmxlKiBvciBhZGRlZC1pbiBmcm9tIGFub3RoZXIKKyAgICAgICptYXBwaW5nKiAob3IgY291bnRlcikuICBMaWtlIDptZXRoOmBkaWN0LnVwZGF0ZWAgYnV0IGFkZHMgY291bnRzCisgICAgICBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLiAgQWxzbywgdGhlICppdGVyYWJsZSogaXMgZXhwZWN0ZWQgdG8gYmUgYQorICAgICAgc2VxdWVuY2Ugb2YgZWxlbWVudHMsIG5vdCBhIHNlcXVlbmNlIG9mIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuCisKK0NvbW1vbiBwYXR0ZXJucyBmb3Igd29ya2luZyB3aXRoIDpjbGFzczpgQ291bnRlcmAgb2JqZWN0czo6CisKKyAgICBzdW0oYy52YWx1ZXMoKSkgICAgICAgICAgICAgICAgICMgdG90YWwgb2YgYWxsIGNvdW50cworICAgIGMuY2xlYXIoKSAgICAgICAgICAgICAgICAgICAgICAgIyByZXNldCBhbGwgY291bnRzCisgICAgbGlzdChjKSAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpc3QgdW5pcXVlIGVsZW1lbnRzCisgICAgc2V0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdG8gYSBzZXQKKyAgICBkaWN0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCB0byBhIHJlZ3VsYXIgZGljdGlvbmFyeQorICAgIGMuaXRlbXMoKSAgICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGEgbGlzdCBvZiAoZWxlbSwgY250KSBwYWlycworICAgIENvdW50ZXIoZGljdChsaXN0X29mX3BhaXJzKSkgICAgIyBjb252ZXJ0IGZyb20gYSBsaXN0IG9mIChlbGVtLCBjbnQpIHBhaXJzCisgICAgYy5tb3N0X2NvbW1vbigpWzotbjotMV0gICAgICAgICAjIG4gbGVhc3QgY29tbW9uIGVsZW1lbnRzCisgICAgYyArPSBDb3VudGVyKCkgICAgICAgICAgICAgICAgICAjIHJlbW92ZSB6ZXJvIGFuZCBuZWdhdGl2ZSBjb3VudHMKKworU2V2ZXJhbCBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIGNvbWJpbmluZyA6Y2xhc3M6YENvdW50ZXJgCitvYmplY3RzIHRvIHByb2R1Y2UgbXVsdGlzZXRzIChjb3VudGVycyB0aGF0IGhhdmUgY291bnRzIGdyZWF0ZXIgdGhhbiB6ZXJvKS4KK0FkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBjb21iaW5lIGNvdW50ZXJzIGJ5IGFkZGluZyBvciBzdWJ0cmFjdGluZyB0aGUgY291bnRzCitvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgSW50ZXJzZWN0aW9uIGFuZCB1bmlvbiByZXR1cm4gdGhlIG1pbmltdW0gYW5kCittYXhpbXVtIG9mIGNvcnJlc3BvbmRpbmcgY291bnRzLiAgRWFjaCBvcGVyYXRpb24gY2FuIGFjY2VwdCBpbnB1dHMgd2l0aCBzaWduZWQKK2NvdW50cywgYnV0IHRoZSBvdXRwdXQgd2lsbCBleGNsdWRlIHJlc3VsdHMgd2l0aCBjb3VudHMgb2YgemVybyBvciBsZXNzLgorCisgICAgPj4+IGMgPSBDb3VudGVyKGE9MywgYj0xKQorICAgID4+PiBkID0gQ291bnRlcihhPTEsIGI9MikKKyAgICA+Pj4gYyArIGQgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIHR3byBjb3VudGVycyB0b2dldGhlcjogIGNbeF0gKyBkW3hdCisgICAgQ291bnRlcih7J2EnOiA0LCAnYic6IDN9KQorICAgID4+PiBjIC0gZCAgICAgICAgICAgICAgICAgICAgICAgIyBzdWJ0cmFjdCAoa2VlcGluZyBvbmx5IHBvc2l0aXZlIGNvdW50cykKKyAgICBDb3VudGVyKHsnYSc6IDJ9KQorICAgID4+PiBjICYgZCAgICAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnNlY3Rpb246ICBtaW4oY1t4XSwgZFt4XSkKKyAgICBDb3VudGVyKHsnYSc6IDEsICdiJzogMX0pCisgICAgPj4+IGMgfCBkICAgICAgICAgICAgICAgICAgICAgICAjIHVuaW9uOiAgbWF4KGNbeF0sIGRbeF0pCisgICAgQ291bnRlcih7J2EnOiAzLCAnYic6IDJ9KQorCisuLiBub3RlOjoKKworICAgQ291bnRlcnMgd2VyZSBwcmltYXJpbHkgZGVzaWduZWQgdG8gd29yayB3aXRoIHBvc2l0aXZlIGludGVnZXJzIHRvIHJlcHJlc2VudAorICAgcnVubmluZyBjb3VudHM7IGhvd2V2ZXIsIGNhcmUgd2FzIHRha2VuIHRvIG5vdCB1bm5lY2Vzc2FyaWx5IHByZWNsdWRlIHVzZQorICAgY2FzZXMgbmVlZGluZyBvdGhlciB0eXBlcyBvciBuZWdhdGl2ZSB2YWx1ZXMuICBUbyBoZWxwIHdpdGggdGhvc2UgdXNlIGNhc2VzLAorICAgdGhpcyBzZWN0aW9uIGRvY3VtZW50cyB0aGUgbWluaW11bSByYW5nZSBhbmQgdHlwZSByZXN0cmljdGlvbnMuCisKKyAgICogVGhlIDpjbGFzczpgQ291bnRlcmAgY2xhc3MgaXRzZWxmIGlzIGEgZGljdGlvbmFyeSBzdWJjbGFzcyB3aXRoIG5vCisgICAgIHJlc3RyaWN0aW9ucyBvbiBpdHMga2V5cyBhbmQgdmFsdWVzLiAgVGhlIHZhbHVlcyBhcmUgaW50ZW5kZWQgdG8gYmUgbnVtYmVycworICAgICByZXByZXNlbnRpbmcgY291bnRzLCBidXQgeW91ICpjb3VsZCogc3RvcmUgYW55dGhpbmcgaW4gdGhlIHZhbHVlIGZpZWxkLgorCisgICAqIFRoZSA6bWV0aDpgbW9zdF9jb21tb25gIG1ldGhvZCByZXF1aXJlcyBvbmx5IHRoYXQgdGhlIHZhbHVlcyBiZSBvcmRlcmFibGUuCisKKyAgICogRm9yIGluLXBsYWNlIG9wZXJhdGlvbnMgc3VjaCBhcyBgYGNba2V5XSArPSAxYGAsIHRoZSB2YWx1ZSB0eXBlIG5lZWQgb25seQorICAgICBzdXBwb3J0IGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbi4gIFNvIGZyYWN0aW9ucywgZmxvYXRzLCBhbmQgZGVjaW1hbHMgd291bGQKKyAgICAgd29yayBhbmQgbmVnYXRpdmUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuICBUaGUgc2FtZSBpcyBhbHNvIHRydWUgZm9yCisgICAgIDptZXRoOmB1cGRhdGVgIGFuZCA6bWV0aDpgc3VidHJhY3RgIHdoaWNoIGFsbG93IG5lZ2F0aXZlIGFuZCB6ZXJvIHZhbHVlcworICAgICBmb3IgYm90aCBpbnB1dHMgYW5kIG91dHB1dHMuCisKKyAgICogVGhlIG11bHRpc2V0IG1ldGhvZHMgYXJlIGRlc2lnbmVkIG9ubHkgZm9yIHVzZSBjYXNlcyB3aXRoIHBvc2l0aXZlIHZhbHVlcy4KKyAgICAgVGhlIGlucHV0cyBtYXkgYmUgbmVnYXRpdmUgb3IgemVybywgYnV0IG9ubHkgb3V0cHV0cyB3aXRoIHBvc2l0aXZlIHZhbHVlcworICAgICBhcmUgY3JlYXRlZC4gIFRoZXJlIGFyZSBubyB0eXBlIHJlc3RyaWN0aW9ucywgYnV0IHRoZSB2YWx1ZSB0eXBlIG5lZWRzIHRvCisgICAgIHN1cHBvcnQgc3VwcG9ydCBhZGRpdGlvbiwgc3VidHJhY3Rpb24sIGFuZCBjb21wYXJpc29uLgorCisgICAqIFRoZSA6bWV0aDpgZWxlbWVudHNgIG1ldGhvZCByZXF1aXJlcyBpbnRlZ2VyIGNvdW50cy4gIEl0IGlnbm9yZXMgemVybyBhbmQKKyAgICAgbmVnYXRpdmUgY291bnRzLgorCisuLiBzZWVhbHNvOjoKKworICAgICogYENvdW50ZXIgY2xhc3MgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjYxMS8+YF8KKyAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjUgYW5kIGFuIGVhcmx5IGBCYWcgcmVjaXBlCisgICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvMjU5MTc0Lz5gXyBmb3IgUHl0aG9uIDIuNC4KKworICAgICogYEJhZyBjbGFzcyA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NtYWxsdGFsay9tYW51YWwtYmFzZS9odG1sX25vZGUvQmFnLmh0bWw+YF8KKyAgICAgIGluIFNtYWxsdGFsay4KKworICAgICogV2lraXBlZGlhIGVudHJ5IGZvciBgTXVsdGlzZXRzIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011bHRpc2V0PmBfXC4KKworICAgICogYEMrKyBtdWx0aXNldHMgPGh0dHA6Ly93d3cuZGVtbzJzLmNvbS9UdXRvcmlhbC9DcHAvMDM4MF9fc2V0LW11bHRpc2V0L0NhdGFsb2cwMzgwX19zZXQtbXVsdGlzZXQuaHRtPmBfCisgICAgICB0dXRvcmlhbCB3aXRoIGV4YW1wbGVzLgorCisgICAgKiBGb3IgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgb24gbXVsdGlzZXRzIGFuZCB0aGVpciB1c2UgY2FzZXMsIHNlZQorICAgICAgKktudXRoLCBEb25hbGQuIFRoZSBBcnQgb2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmcgVm9sdW1lIElJLAorICAgICAgU2VjdGlvbiA0LjYuMywgRXhlcmNpc2UgMTkqXC4KKworICAgICogVG8gZW51bWVyYXRlIGFsbCBkaXN0aW5jdCBtdWx0aXNldHMgb2YgYSBnaXZlbiBzaXplIG92ZXIgYSBnaXZlbiBzZXQgb2YKKyAgICAgIGVsZW1lbnRzLCBzZWUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudGAuCisKKyAgICAgICAgICBtYXAoQ291bnRlciwgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDIpKSAtLT4gQUEgQUIgQUMgQkIgQkMgQ0MKIAogCiA6Y2xhc3M6YGRlcXVlYCBvYmplY3RzCkBAIC0yMDQsNiArMjY2LDEyIEBACiAgICAgICBSZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGRlcXVlIGxlYXZpbmcgaXQgd2l0aCBsZW5ndGggMC4KIAogCisgICAuLiBtZXRob2Q6OiBjb3VudCh4KQorCisgICAgICBDb3VudCB0aGUgbnVtYmVyIG9mIGRlcXVlIGVsZW1lbnRzIGVxdWFsIHRvICp4Ki4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKICAgIC4uIG1ldGhvZDo6IGV4dGVuZChpdGVyYWJsZSkKIAogICAgICAgRXh0ZW5kIHRoZSByaWdodCBzaWRlIG9mIHRoZSBkZXF1ZSBieSBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUKQEAgLTIzNiw2ICszMDQsMTEgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKKyAgIC4uIG1ldGhvZDo6IHJldmVyc2UoKQorCisgICAgICBSZXZlcnNlIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVxdWUgaW4tcGxhY2UgYW5kIHRoZW4gcmV0dXJuIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogICAgLi4gbWV0aG9kOjogcm90YXRlKG4pCiAKQEAgLTI0NCw2ICszMTcsMTUgQEAKICAgICAgIGBgZC5hcHBlbmRsZWZ0KGQucG9wKCkpYGAuCiAKIAorICAgRGVxdWUgb2JqZWN0cyBhbHNvIHByb3ZpZGUgb25lIHJlYWQtb25seSBhdHRyaWJ1dGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heGxlbgorCisgICAgICBNYXhpbXVtIHNpemUgb2YgYSBkZXF1ZSBvciAqTm9uZSogaWYgdW5ib3VuZGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIGRlcXVlcyBzdXBwb3J0IGl0ZXJhdGlvbiwgcGlja2xpbmcsIGBgbGVuKGQpYGAsCiBgYHJldmVyc2VkKGQpYGAsIGBgY29weS5jb3B5KGQpYGAsIGBgY29weS5kZWVwY29weShkKWBgLCBtZW1iZXJzaGlwIHRlc3Rpbmcgd2l0aAogdGhlIDprZXl3b3JkOmBpbmAgb3BlcmF0b3IsIGFuZCBzdWJzY3JpcHQgcmVmZXJlbmNlcyBzdWNoIGFzIGBgZFstMV1gYC4gIEluZGV4ZWQKQEAgLTQ3NSw3ICs1NTcsNyBAQAogc2VsZi1kb2N1bWVudGluZyBjb2RlLiAgVGhleSBjYW4gYmUgdXNlZCB3aGVyZXZlciByZWd1bGFyIHR1cGxlcyBhcmUgdXNlZCwgYW5kCiB0aGV5IGFkZCB0aGUgYWJpbGl0eSB0byBhY2Nlc3MgZmllbGRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBwb3NpdGlvbiBpbmRleC4KIAotLi4gZnVuY3Rpb246OiBuYW1lZHR1cGxlKHR5cGVuYW1lLCBmaWVsZF9uYW1lcywgW3ZlcmJvc2VdKQorLi4gZnVuY3Rpb246OiBuYW1lZHR1cGxlKHR5cGVuYW1lLCBmaWVsZF9uYW1lcywgW3ZlcmJvc2U9RmFsc2VdLCBbcmVuYW1lPUZhbHNlXSkKIAogICAgUmV0dXJucyBhIG5ldyB0dXBsZSBzdWJjbGFzcyBuYW1lZCAqdHlwZW5hbWUqLiAgVGhlIG5ldyBzdWJjbGFzcyBpcyB1c2VkIHRvCiAgICBjcmVhdGUgdHVwbGUtbGlrZSBvYmplY3RzIHRoYXQgaGF2ZSBmaWVsZHMgYWNjZXNzaWJsZSBieSBhdHRyaWJ1dGUgbG9va3VwIGFzCkBAIC00OTMsNiArNTc1LDExIEBACiAgICBhIDptb2Q6YGtleXdvcmRgIHN1Y2ggYXMgKmNsYXNzKiwgKmZvciosICpyZXR1cm4qLCAqZ2xvYmFsKiwgKnBhc3MqLCAqcHJpbnQqLAogICAgb3IgKnJhaXNlKi4KIAorICAgSWYgKnJlbmFtZSogaXMgdHJ1ZSwgaW52YWxpZCBmaWVsZG5hbWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkCisgICB3aXRoIHBvc2l0aW9uYWwgbmFtZXMuICBGb3IgZXhhbXBsZSwgYGBbJ2FiYycsICdkZWYnLCAnZ2hpJywgJ2FiYyddYGAgaXMKKyAgIGNvbnZlcnRlZCB0byBgYFsnYWJjJywgJ18xJywgJ2doaScsICdfMyddYGAsIGVsaW1pbmF0aW5nIHRoZSBrZXl3b3JkCisgICBgYGRlZmBgIGFuZCB0aGUgZHVwbGljYXRlIGZpZWxkbmFtZSBgYGFiY2BgLgorCiAgICBJZiAqdmVyYm9zZSogaXMgdHJ1ZSwgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgcHJpbnRlZCBqdXN0IGJlZm9yZSBiZWluZyBidWlsdC4KIAogICAgTmFtZWQgdHVwbGUgaW5zdGFuY2VzIGRvIG5vdCBoYXZlIHBlci1pbnN0YW5jZSBkaWN0aW9uYXJpZXMsIHNvIHRoZXkgYXJlCkBAIC01MDAsMjQgKzU4NywxNSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIGFkZGVkIHN1cHBvcnQgZm9yICpyZW5hbWUqLgorCiBFeGFtcGxlOgogCiAuLiBkb2N0ZXN0OjoKICAgIDpvcHRpb25zOiArTk9STUFMSVpFX1dISVRFU1BBQ0UKIAotICAgPj4+IFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKLSAgID4+PiBwID0gUG9pbnQoMTEsIHk9MjIpICAgICAjIGluc3RhbnRpYXRlIHdpdGggcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cwotICAgPj4+IHBbMF0gKyBwWzFdICAgICAgICAgICAgICMgaW5kZXhhYmxlIGxpa2UgdGhlIHBsYWluIHR1cGxlICgxMSwgMjIpCi0gICAzMwotICAgPj4+IHgsIHkgPSBwICAgICAgICAgICAgICAgICMgdW5wYWNrIGxpa2UgYSByZWd1bGFyIHR1cGxlCi0gICA+Pj4geCwgeQotICAgKDExLCAyMikKLSAgID4+PiBwLnggKyBwLnkgICAgICAgICAgICAgICAjIGZpZWxkcyBhbHNvIGFjY2Vzc2libGUgYnkgbmFtZQotICAgMzMKLSAgID4+PiBwICAgICAgICAgICAgICAgICAgICAgICAjIHJlYWRhYmxlIF9fcmVwcl9fIHdpdGggYSBuYW1lPXZhbHVlIHN0eWxlCi0gICBQb2ludCh4PTExLCB5PTIyKQotCi0gICA+Pj4gUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknLCB2ZXJib3NlPVRydWUpICMgc2hvdyB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgPj4+IFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JywgdmVyYm9zZT1UcnVlKQogICAgY2xhc3MgUG9pbnQodHVwbGUpOgogICAgICAgICAgICAnUG9pbnQoeCwgeSknCiAgICA8QkxBTktMSU5FPgpAQCAtNTI2LDYgKzYwNCw3IEBACiAgICAgICAgICAgIF9maWVsZHMgPSAoJ3gnLCAneScpCiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBkZWYgX19uZXdfXyhfY2xzLCB4LCB5KToKKyAgICAgICAgICAgICAgICdDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgUG9pbnQoeCwgeSknCiAgICAgICAgICAgICAgICByZXR1cm4gX3R1cGxlLl9fbmV3X18oX2NscywgKHgsIHkpKQogICAgPEJMQU5LTElORT4KICAgICAgICAgICAgQGNsYXNzbWV0aG9kCkBAIC01MzcsMTEgKzYxNiwxMiBAQAogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgPEJMQU5LTElORT4KICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgJ1JldHVybiBhIG5pY2VseSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gc3RyaW5nJwogICAgICAgICAgICAgICAgcmV0dXJuICdQb2ludCh4PSVyLCB5PSVyKScgJSBzZWxmCiAgICA8QkxBTktMSU5FPgotICAgICAgICAgICBkZWYgX2FzZGljdCh0KToKLSAgICAgICAgICAgICAgICdSZXR1cm4gYSBuZXcgZGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcycKLSAgICAgICAgICAgICAgIHJldHVybiB7J3gnOiB0WzBdLCAneSc6IHRbMV19CisgICAgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOgorICAgICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBPcmRlcmVkRGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcycKKyAgICAgICAgICAgICAgIHJldHVybiBPcmRlcmVkRGljdCh6aXAoc2VsZi5fZmllbGRzLCBzZWxmKSkKICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIGRlZiBfcmVwbGFjZShfc2VsZiwgKiprd2RzKToKICAgICAgICAgICAgICAgICdSZXR1cm4gYSBuZXcgUG9pbnQgb2JqZWN0IHJlcGxhY2luZyBzcGVjaWZpZWQgZmllbGRzIHdpdGggbmV3IHZhbHVlcycKQEAgLTU1MSwxMCArNjMxLDIyIEBACiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAnUmV0dXJuIHNlbGYgYXMgYSBwbGFpbiB0dXBsZS4gICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZikKICAgIDxCTEFOS0xJTkU+Ci0gICAgICAgICAgIHggPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMCkpCi0gICAgICAgICAgIHkgPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMSkpCisgICAgICAgICAgIHggPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMCksIGRvYz0nQWxpYXMgZm9yIGZpZWxkIG51bWJlciAwJykKKyAgICAgICAgICAgeSA9IF9wcm9wZXJ0eShfaXRlbWdldHRlcigxKSwgZG9jPSdBbGlhcyBmb3IgZmllbGQgbnVtYmVyIDEnKQorCisgICA+Pj4gcCA9IFBvaW50KDExLCB5PTIyKSAgICAgIyBpbnN0YW50aWF0ZSB3aXRoIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmd1bWVudHMKKyAgID4+PiBwWzBdICsgcFsxXSAgICAgICAgICAgICAjIGluZGV4YWJsZSBsaWtlIHRoZSBwbGFpbiB0dXBsZSAoMTEsIDIyKQorICAgMzMKKyAgID4+PiB4LCB5ID0gcCAgICAgICAgICAgICAgICAjIHVucGFjayBsaWtlIGEgcmVndWxhciB0dXBsZQorICAgPj4+IHgsIHkKKyAgICgxMSwgMjIpCisgICA+Pj4gcC54ICsgcC55ICAgICAgICAgICAgICAgIyBmaWVsZHMgYWxzbyBhY2Nlc3NpYmxlIGJ5IG5hbWUKKyAgIDMzCisgICA+Pj4gcCAgICAgICAgICAgICAgICAgICAgICAgIyByZWFkYWJsZSBfX3JlcHJfXyB3aXRoIGEgbmFtZT12YWx1ZSBzdHlsZQorICAgUG9pbnQoeD0xMSwgeT0yMikKIAogTmFtZWQgdHVwbGVzIGFyZSBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgYXNzaWduaW5nIGZpZWxkIG5hbWVzIHRvIHJlc3VsdCB0dXBsZXMgcmV0dXJuZWQKIGJ5IHRoZSA6bW9kOmBjc3ZgIG9yIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZXM6OgpAQCAtNTg4LDEwICs2ODAsMTQgQEAKIAogLi4gbWV0aG9kOjogc29tZW5hbWVkdHVwbGUuX2FzZGljdCgpCiAKLSAgIFJldHVybiBhIG5ldyBkaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXM6OgorICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgT3JkZXJlZERpY3RgIHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZworICAgdmFsdWVzOjoKIAogICAgICAgPj4+IHAuX2FzZGljdCgpCi0gICAgICB7J3gnOiAxMSwgJ3knOiAyMn0KKyAgICAgIE9yZGVyZWREaWN0KFsoJ3gnLCAxMSksICgneScsIDIyKV0pCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBSZXR1cm5zIGFuIDpjbGFzczpgT3JkZXJlZERpY3RgIGluc3RlYWQgb2YgYSByZWd1bGFyIDpjbGFzczpgZGljdGAuCiAKIC4uIG1ldGhvZDo6IHNvbWVuYW1lZHR1cGxlLl9yZXBsYWNlKGt3YXJncykKIApAQCAtNjc4LDMgKzc3NCwxOTkgQEAKIAogICAgYE5hbWVkIHR1cGxlIHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTAwMjYxLz5gXwogICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNC4KKworCis6Y2xhc3M6YE9yZGVyZWREaWN0YCBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yZGVyZWQgZGljdGlvbmFyaWVzIGFyZSBqdXN0IGxpa2UgcmVndWxhciBkaWN0aW9uYXJpZXMgYnV0IHRoZXkgcmVtZW1iZXIgdGhlCitvcmRlciB0aGF0IGl0ZW1zIHdlcmUgaW5zZXJ0ZWQuICBXaGVuIGl0ZXJhdGluZyBvdmVyIGFuIG9yZGVyZWQgZGljdGlvbmFyeSwKK3RoZSBpdGVtcyBhcmUgcmV0dXJuZWQgaW4gdGhlIG9yZGVyIHRoZWlyIGtleXMgd2VyZSBmaXJzdCBhZGRlZC4KKworLi4gY2xhc3M6OiBPcmRlcmVkRGljdChbaXRlbXNdKQorCisgICBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBkaWN0IHN1YmNsYXNzLCBzdXBwb3J0aW5nIHRoZSB1c3VhbCA6Y2xhc3M6YGRpY3RgCisgICBtZXRob2RzLiAgQW4gKk9yZGVyZWREaWN0KiBpcyBhIGRpY3QgdGhhdCByZW1lbWJlcnMgdGhlIG9yZGVyIHRoYXQga2V5cworICAgd2VyZSBmaXJzdCBpbnNlcnRlZC4gSWYgYSBuZXcgZW50cnkgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBlbnRyeSwgdGhlCisgICBvcmlnaW5hbCBpbnNlcnRpb24gcG9zaXRpb24gaXMgbGVmdCB1bmNoYW5nZWQuICBEZWxldGluZyBhbiBlbnRyeSBhbmQKKyAgIHJlaW5zZXJ0aW5nIGl0IHdpbGwgbW92ZSBpdCB0byB0aGUgZW5kLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworLi4gbWV0aG9kOjogT3JkZXJlZERpY3QucG9waXRlbShsYXN0PVRydWUpCisKKyAgIFRoZSA6bWV0aDpgcG9waXRlbWAgbWV0aG9kIGZvciBvcmRlcmVkIGRpY3Rpb25hcmllcyByZXR1cm5zIGFuZCByZW1vdmVzCisgICBhIChrZXksIHZhbHVlKSBwYWlyLiAgVGhlIHBhaXJzIGFyZSByZXR1cm5lZCBpbiBMSUZPIG9yZGVyIGlmICpsYXN0KiBpcworICAgdHJ1ZSBvciBGSUZPIG9yZGVyIGlmIGZhbHNlLgorCitJbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgbWFwcGluZyBtZXRob2RzLCBvcmRlcmVkIGRpY3Rpb25hcmllcyBhbHNvIHN1cHBvcnQKK3JldmVyc2UgaXRlcmF0aW9uIHVzaW5nIDpmdW5jOmByZXZlcnNlZGAuCisKK0VxdWFsaXR5IHRlc3RzIGJldHdlZW4gOmNsYXNzOmBPcmRlcmVkRGljdGAgb2JqZWN0cyBhcmUgb3JkZXItc2Vuc2l0aXZlCithbmQgYXJlIGltcGxlbWVudGVkIGFzIGBgbGlzdChvZDEuaXRlbXMoKSk9PWxpc3Qob2QyLml0ZW1zKCkpYGAuCitFcXVhbGl0eSB0ZXN0cyBiZXR3ZWVuIDpjbGFzczpgT3JkZXJlZERpY3RgIG9iamVjdHMgYW5kIG90aGVyCis6Y2xhc3M6YE1hcHBpbmdgIG9iamVjdHMgYXJlIG9yZGVyLWluc2Vuc2l0aXZlIGxpa2UgcmVndWxhciBkaWN0aW9uYXJpZXMuCitUaGlzIGFsbG93cyA6Y2xhc3M6YE9yZGVyZWREaWN0YCBvYmplY3RzIHRvIGJlIHN1YnN0aXR1dGVkIGFueXdoZXJlIGEKK3JlZ3VsYXIgZGljdGlvbmFyeSBpcyB1c2VkLgorCitUaGUgOmNsYXNzOmBPcmRlcmVkRGljdGAgY29uc3RydWN0b3IgYW5kIDptZXRoOmB1cGRhdGVgIG1ldGhvZCBib3RoIGFjY2VwdAora2V5d29yZCBhcmd1bWVudHMsIGJ1dCB0aGVpciBvcmRlciBpcyBsb3N0IGJlY2F1c2UgUHl0aG9uJ3MgZnVuY3Rpb24gY2FsbAorc2VtYW50aWNzIHBhc3MtaW4ga2V5d29yZCBhcmd1bWVudHMgdXNpbmcgYSByZWd1bGFyIHVub3JkZXJlZCBkaWN0aW9uYXJ5LgorCisuLiBzZWVhbHNvOjoKKworICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCisgICB0aGF0IHJ1bnMgb24gUHl0aG9uIDIuNCBvciBsYXRlci4KKworU2luY2UgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHJlbWVtYmVycyBpdHMgaW5zZXJ0aW9uIG9yZGVyLCBpdCBjYW4gYmUgdXNlZAoraW4gY29uanVjdGlvbiB3aXRoIHNvcnRpbmcgdG8gbWFrZSBhIHNvcnRlZCBkaWN0aW9uYXJ5OjoKKworICAgID4+PiAjIHJlZ3VsYXIgdW5zb3J0ZWQgZGljdGlvbmFyeQorICAgID4+PiBkID0geydiYW5hbmEnOiAzLCAnYXBwbGUnOjQsICdwZWFyJzogMSwgJ29yYW5nZSc6IDJ9CisKKyAgICA+Pj4gIyBkaWN0aW9uYXJ5IHNvcnRlZCBieSBrZXkKKyAgICA+Pj4gT3JkZXJlZERpY3Qoc29ydGVkKGQuaXRlbXMoKSwga2V5PWxhbWJkYSB0OiB0WzBdKSkKKyAgICBPcmRlcmVkRGljdChbKCdhcHBsZScsIDQpLCAoJ2JhbmFuYScsIDMpLCAoJ29yYW5nZScsIDIpLCAoJ3BlYXInLCAxKV0pCisKKyAgICA+Pj4gIyBkaWN0aW9uYXJ5IHNvcnRlZCBieSB2YWx1ZQorICAgID4+PiBPcmRlcmVkRGljdChzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIHQ6IHRbMV0pKQorICAgIE9yZGVyZWREaWN0KFsoJ3BlYXInLCAxKSwgKCdvcmFuZ2UnLCAyKSwgKCdiYW5hbmEnLCAzKSwgKCdhcHBsZScsIDQpXSkKKworICAgID4+PiAjIGRpY3Rpb25hcnkgc29ydGVkIGJ5IGxlbmd0aCBvZiB0aGUga2V5IHN0cmluZworICAgID4+PiBPcmRlcmVkRGljdChzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIHQ6IGxlbih0WzBdKSkpCisgICAgT3JkZXJlZERpY3QoWygncGVhcicsIDEpLCAoJ2FwcGxlJywgNCksICgnb3JhbmdlJywgMiksICgnYmFuYW5hJywgMyldKQorCitUaGUgbmV3IHNvcnRlZCBkaWN0aW9uYXJpZXMgbWFpbnRhaW4gdGhlaXIgc29ydCBvcmRlciB3aGVuIGVudHJpZXMKK2FyZSBkZWxldGVkLiAgQnV0IHdoZW4gbmV3IGtleXMgYXJlIGFkZGVkLCB0aGUga2V5cyBhcmUgYXBwZW5kZWQKK3RvIHRoZSBlbmQgYW5kIHRoZSBzb3J0IGlzIG5vdCBtYWludGFpbmVkLgorCitJdCBpcyBhbHNvIHN0cmFpZ2h0LWZvcndhcmQgdG8gY3JlYXRlIGFuIG9yZGVyZWQgZGljdGlvbmFyeSB2YXJpYW50Cit0aGF0IHRoZSByZW1lbWJlcnMgdGhlIG9yZGVyIHRoZSBrZXlzIHdlcmUgKmxhc3QqIGluc2VydGVkLgorSWYgYSBuZXcgZW50cnkgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBlbnRyeSwgdGhlCitvcmlnaW5hbCBpbnNlcnRpb24gcG9zaXRpb24gaXMgY2hhbmdlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZDo6CisKKyAgICBjbGFzcyBMYXN0VXBkYXRlZE9yZGVyZWREaWN0KE9yZGVyZWREaWN0KToKKyAgICAgICAgJ1N0b3JlIGl0ZW1zIGluIHRoZSBvcmRlciB0aGUga2V5cyB3ZXJlIGxhc3QgYWRkZWQnCisgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KKyAgICAgICAgICAgIE9yZGVyZWREaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCisKKworLi4gX2Fic3RyYWN0LWJhc2UtY2xhc3NlczoKKworQUJDcyAtIGFic3RyYWN0IGJhc2UgY2xhc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29sbGVjdGlvbnMgbW9kdWxlIG9mZmVycyB0aGUgZm9sbG93aW5nIEFCQ3M6CisKKz09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQUJDICAgICAgICAgICAgICAgICAgICAgICAgSW5oZXJpdHMgICAgICAgICAgICAgICBBYnN0cmFjdCBNZXRob2RzICAgICAgICBNaXhpbiBNZXRob2RzCis9PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpjbGFzczpgQ29udGFpbmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYAorOmNsYXNzOmBIYXNoYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faGFzaF9fYGAKKzpjbGFzczpgSXRlcmFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCis6Y2xhc3M6YEl0ZXJhdG9yYCAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCAgICAgIGBgbmV4dGBgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAorOmNsYXNzOmBTaXplZGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fbGVuX19gYAorOmNsYXNzOmBDYWxsYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY2FsbF9fYGAKKworOmNsYXNzOmBTZXF1ZW5jZWAgICAgICAgICAgOmNsYXNzOmBTaXplZGAsICAgICAgICBgYF9fZ2V0aXRlbV9fYGAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLiBgYF9faXRlcl9fYGAsIGBgX19yZXZlcnNlZF9fYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgaW5kZXhgYCwgYW5kIGBgY291bnRgYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBDb250YWluZXJgCisKKzpjbGFzczpgTXV0YWJsZVNlcXVlbmNlYCAgIDpjbGFzczpgU2VxdWVuY2VgICAgICAgYGBfX3NldGl0ZW1fX2BgICAgICAgICAgSW5oZXJpdGVkIFNlcXVlbmNlIG1ldGhvZHMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19kZWxpdGVtX19gYCwgICAgICAgIGBgYXBwZW5kYGAsIGBgcmV2ZXJzZWBgLCBgYGV4dGVuZGBgLCBgYHBvcGBgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYGBpbnNlcnRgYCAgICAgICAgICBgYHJlbW92ZWBgLCBhbmQgYGBfX2lhZGRfX2BgCisKKzpjbGFzczpgU2V0YCAgICAgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlX19gYCwgYGBfX2x0X19gYCwgYGBfX2VxX19gYCwgYGBfX25lX19gYCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2d0X19gYCwgYGBfX2dlX19gYCwgYGBfX2FuZF9fYGAsIGBgX19vcl9fYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YENvbnRhaW5lcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19zdWJfX2BgLCBgYF9feG9yX19gYCwgYW5kIGBgaXNkaXNqb2ludGBgCisKKzpjbGFzczpgTXV0YWJsZVNldGAgICAgICAgIDpjbGFzczpgU2V0YCAgICAgICAgICAgYGBhZGRgYCBhbmQgICAgICAgICAgICAgSW5oZXJpdGVkIFNldCBtZXRob2RzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGRpc2NhcmRgYCAgICAgICAgICAgICBgYGNsZWFyYGAsIGBgcG9wYGAsIGBgcmVtb3ZlYGAsIGBgX19pb3JfX2BgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faWFuZF9fYGAsIGBgX19peG9yX19gYCwgYW5kIGBgX19pc3ViX19gYAorCis6Y2xhc3M6YE1hcHBpbmdgICAgICAgICAgICA6Y2xhc3M6YFNpemVkYCwgICAgICAgIGBgX19nZXRpdGVtX19gYCAgICAgICAgIGBgX19jb250YWluc19fYGAsIGBga2V5c2BgLCBgYGl0ZW1zYGAsIGBgdmFsdWVzYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgZ2V0YGAsIGBgX19lcV9fYGAsIGFuZCBgYF9fbmVfX2BgCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YENvbnRhaW5lcmAKKworOmNsYXNzOmBNdXRhYmxlTWFwcGluZ2AgICAgOmNsYXNzOmBNYXBwaW5nYCAgICAgICBgYF9fc2V0aXRlbV9fYGAgYW5kICAgICBJbmhlcml0ZWQgTWFwcGluZyBtZXRob2RzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fZGVsaXRlbV9fYGAgICAgICAgICBgYHBvcGBgLCBgYHBvcGl0ZW1gYCwgYGBjbGVhcmBgLCBgYHVwZGF0ZWBgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYGBzZXRkZWZhdWx0YGAKKworCis6Y2xhc3M6YE1hcHBpbmdWaWV3YCAgICAgICA6Y2xhc3M6YFNpemVkYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19sZW5fX2BgCis6Y2xhc3M6YEtleXNWaWV3YCAgICAgICAgICA6Y2xhc3M6YE1hcHBpbmdWaWV3YCwgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YFNldGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19pdGVyX19gYAorOmNsYXNzOmBJdGVtc1ZpZXdgICAgICAgICAgOmNsYXNzOmBNYXBwaW5nVmlld2AsICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBTZXRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faXRlcl9fYGAKKzpjbGFzczpgVmFsdWVzVmlld2AgICAgICAgIDpjbGFzczpgTWFwcGluZ1ZpZXdgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwgYGBfX2l0ZXJfX2BgCis9PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlc2UgQUJDcyBhbGxvdyB1cyB0byBhc2sgY2xhc3NlcyBvciBpbnN0YW5jZXMgaWYgdGhleSBwcm92aWRlCitwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlOjoKKworICAgIHNpemUgPSBOb25lCisgICAgaWYgaXNpbnN0YW5jZShteXZhciwgY29sbGVjdGlvbnMuU2l6ZWQpOgorICAgICAgICBzaXplID0gbGVuKG15dmFyKQorCitTZXZlcmFsIG9mIHRoZSBBQkNzIGFyZSBhbHNvIHVzZWZ1bCBhcyBtaXhpbnMgdGhhdCBtYWtlIGl0IGVhc2llciB0byBkZXZlbG9wCitjbGFzc2VzIHN1cHBvcnRpbmcgY29udGFpbmVyIEFQSXMuICBGb3IgZXhhbXBsZSwgdG8gd3JpdGUgYSBjbGFzcyBzdXBwb3J0aW5nCit0aGUgZnVsbCA6Y2xhc3M6YFNldGAgQVBJLCBpdCBvbmx5IG5lY2Vzc2FyeSB0byBzdXBwbHkgdGhlIHRocmVlIHVuZGVybHlpbmcKK2Fic3RyYWN0IG1ldGhvZHM6IDptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19pdGVyX19gLCBhbmQgOm1ldGg6YF9fbGVuX19gLgorVGhlIEFCQyBzdXBwbGllcyB0aGUgcmVtYWluaW5nIG1ldGhvZHMgc3VjaCBhcyA6bWV0aDpgX19hbmRfX2AgYW5kCis6bWV0aDpgaXNkaXNqb2ludGAgOjoKKworICAgIGNsYXNzIExpc3RCYXNlZFNldChjb2xsZWN0aW9ucy5TZXQpOgorICAgICAgICAgJycnIEFsdGVybmF0ZSBzZXQgaW1wbGVtZW50YXRpb24gZmF2b3Jpbmcgc3BhY2Ugb3ZlciBzcGVlZAorICAgICAgICAgICAgIGFuZCBub3QgcmVxdWlyaW5nIHRoZSBzZXQgZWxlbWVudHMgdG8gYmUgaGFzaGFibGUuICcnJworICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgICAgICBzZWxmLmVsZW1lbnRzID0gbHN0ID0gW10KKyAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXRlcmFibGU6CisgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBsc3Q6CisgICAgICAgICAgICAgICAgICAgICBsc3QuYXBwZW5kKHZhbHVlKQorICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuZWxlbWVudHMpCisgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICByZXR1cm4gdmFsdWUgaW4gc2VsZi5lbGVtZW50cworICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmVsZW1lbnRzKQorCisgICAgczEgPSBMaXN0QmFzZWRTZXQoJ2FiY2RlZicpCisgICAgczIgPSBMaXN0QmFzZWRTZXQoJ2RlZmdoaScpCisgICAgb3ZlcmxhcCA9IHMxICYgczIgICAgICAgICAgICAjIFRoZSBfX2FuZF9fKCkgbWV0aG9kIGlzIHN1cHBvcnRlZCBhdXRvbWF0aWNhbGx5CisKK05vdGVzIG9uIHVzaW5nIDpjbGFzczpgU2V0YCBhbmQgOmNsYXNzOmBNdXRhYmxlU2V0YCBhcyBhIG1peGluOgorCisoMSkKKyAgIFNpbmNlIHNvbWUgc2V0IG9wZXJhdGlvbnMgY3JlYXRlIG5ldyBzZXRzLCB0aGUgZGVmYXVsdCBtaXhpbiBtZXRob2RzIG5lZWQKKyAgIGEgd2F5IHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzIGZyb20gYW4gaXRlcmFibGUuIFRoZSBjbGFzcyBjb25zdHJ1Y3RvciBpcworICAgYXNzdW1lZCB0byBoYXZlIGEgc2lnbmF0dXJlIGluIHRoZSBmb3JtIGBgQ2xhc3NOYW1lKGl0ZXJhYmxlKWBgLgorICAgVGhhdCBhc3N1bXB0aW9uIGlzIGZhY3RvcmVkLW91dCB0byBhbiBpbnRlcm5hbCBjbGFzc21ldGhvZCBjYWxsZWQKKyAgIDptZXRoOmBfZnJvbV9pdGVyYWJsZWAgd2hpY2ggY2FsbHMgYGBjbHMoaXRlcmFibGUpYGAgdG8gcHJvZHVjZSBhIG5ldyBzZXQuCisgICBJZiB0aGUgOmNsYXNzOmBTZXRgIG1peGluIGlzIGJlaW5nIHVzZWQgaW4gYSBjbGFzcyB3aXRoIGEgZGlmZmVyZW50CisgICBjb25zdHJ1Y3RvciBzaWduYXR1cmUsIHlvdSB3aWxsIG5lZWQgdG8gb3ZlcnJpZGUgOm1ldGg6YGZyb21faXRlcmFibGVgCisgICB3aXRoIGEgY2xhc3NtZXRob2QgdGhhdCBjYW4gY29uc3RydWN0IG5ldyBpbnN0YW5jZXMgZnJvbQorICAgYW4gaXRlcmFibGUgYXJndW1lbnQuCisKKygyKQorICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgcmVkZWZpbmUgOm1ldGg6YF9fbGVfX2AgYW5kCisgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKworKDMpCisgICBUaGUgOmNsYXNzOmBTZXRgIG1peGluIHByb3ZpZGVzIGEgOm1ldGg6YF9oYXNoYCBtZXRob2QgdG8gY29tcHV0ZSBhIGhhc2ggdmFsdWUKKyAgIGZvciB0aGUgc2V0OyBob3dldmVyLCA6bWV0aDpgX19oYXNoX19gIGlzIG5vdCBkZWZpbmVkIGJlY2F1c2Ugbm90IGFsbCBzZXRzCisgICBhcmUgaGFzaGFibGUgb3IgaW1tdXRhYmxlLiAgVG8gYWRkIHNldCBoYXNoYWJpbHR5IHVzaW5nIG1peGlucywKKyAgIGluaGVyaXQgZnJvbSBib3RoIDptZXRoOmBTZXRgIGFuZCA6bWV0aDpgSGFzaGFibGVgLCB0aGVuIGRlZmluZQorICAgYGBfX2hhc2hfXyA9IFNldC5faGFzaGBgLgorCisuLiBzZWVhbHNvOjoKKworICAgKiBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYFB5dGhvbiBzb3VyY2UgY29kZSBmb3IgdGhlIGNvbGxlY3Rpb25zIGFic3RyYWN0IGJhc2UgY2xhc3NlcworICAgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvX2FiY29sbC5weT92aWV3PW1hcmt1cD5gXworCisgICAqIGBPcmRlcmVkU2V0IHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2Njk0Lz5gXyBmb3IgYW4KKyAgICAgZXhhbXBsZSBidWlsdCBvbiA6Y2xhc3M6YE11dGFibGVTZXRgLgorCisgICAqIEZvciBtb3JlIGFib3V0IEFCQ3MsIHNlZSB0aGUgOm1vZDpgYWJjYCBtb2R1bGUgYW5kIDpwZXA6YDMxMTlgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tbWFuZHMucnN0IGIvRG9jL2xpYnJhcnkvY29tbWFuZHMucnN0CmluZGV4IDBiMzQ3ZjcuLjkxNmU0YTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbW1hbmRzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21tYW5kcy5yc3QKQEAgLTUsNiArNSwxMiBAQAogLi4gbW9kdWxlOjogY29tbWFuZHMKICAgIDpwbGF0Zm9ybTogVW5peAogICAgOnN5bm9wc2lzOiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgcnVubmluZyBleHRlcm5hbCBjb21tYW5kcy4KKyAgIDpkZXByZWNhdGVkOgorCisuLiBkZXByZWNhdGVkOjogMi42CisgICBUaGUgOm1vZDpgY29tbWFuZHNgIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgdGhlCisgICA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUgaW5zdGVhZC4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IFN1ZSBXaWxsaWFtcyA8c2J3QHByb3Zpcy5jb20+CiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAppbmRleCA4NmY2MGZiLi5jZjBkNWY4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgY29tcGlsZWFsbGAgLS0tIEJ5dGUtY29tcGlsZSBQeXRob24gbGlicmFyaWVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNyw0MSArNiwxMTcgQEAKIAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIHN1cHBvcnQgaW5zdGFsbGluZyBQeXRob24KLWxpYnJhcmllcy4gIFRoZXNlIGZ1bmN0aW9ucyBjb21waWxlIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZSwKLWFsbG93aW5nIHVzZXJzIHdpdGhvdXQgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgbGlicmFyaWVzIHRvIHRha2UgYWR2YW50YWdlIG9mCi1jYWNoZWQgYnl0ZS1jb2RlIGZpbGVzLgotCi1UaGlzIG1vZHVsZSBtYXkgYWxzbyBiZSB1c2VkIGFzIGEgc2NyaXB0ICh1c2luZyB0aGUgOm9wdGlvbjpgLW1gIFB5dGhvbiBmbGFnKSB0bwotY29tcGlsZSBQeXRob24gc291cmNlcy4gIERpcmVjdG9yaWVzIHRvIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIChwYXNzaW5nCi06b3B0aW9uOmAtbGAgc3RvcHMgdGhlIHJlY3Vyc2l2ZSBiZWhhdmlvcikgZm9yIHNvdXJjZXMgYXJlIGxpc3RlZCBvbiB0aGUgY29tbWFuZAotbGluZS4gIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBpbnZvY2F0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYGAtbAotc3lzLnBhdGhgYC4gIFByaW50aW5nIGxpc3RzIG9mIHRoZSBmaWxlcyBjb21waWxlZCBjYW4gYmUgZGlzYWJsZWQgd2l0aCB0aGUKLTpvcHRpb246YC1xYCBmbGFnLiAgSW4gYWRkaXRpb24sIHRoZSA6b3B0aW9uOmAteGAgb3B0aW9uIHRha2VzIGEgcmVndWxhcgotZXhwcmVzc2lvbiBhcmd1bWVudC4gIEFsbCBmaWxlcyB0aGF0IG1hdGNoIHRoZSBleHByZXNzaW9uIHdpbGwgYmUgc2tpcHBlZC4KK2xpYnJhcmllcy4gIFRoZXNlIGZ1bmN0aW9ucyBjb21waWxlIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZS4KK1RoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGVkIGJ5dGUtY29kZSBmaWxlcyBhdCBsaWJyYXJ5CitpbnN0YWxsYXRpb24gdGltZSwgd2hpY2ggbWFrZXMgdGhlbSBhdmFpbGFibGUgZm9yIHVzZSBldmVuIGJ5IHVzZXJzIHdobyBkb24ndAoraGF2ZSB3cml0ZSBwZXJtaXNzaW9uIHRvIHRoZSBsaWJyYXJ5IGRpcmVjdG9yaWVzLgogCiAKLS4uIGZ1bmN0aW9uOjogY29tcGlsZV9kaXIoZGlyWywgbWF4bGV2ZWxzWywgZGRpclssIGZvcmNlWywgIHJ4WywgcXVpZXRdXV1dXSkKK0NvbW1hbmQtbGluZSB1c2UKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgY2FuIHdvcmsgYXMgYSBzY3JpcHQgKHVzaW5nIDpwcm9ncmFtOmBweXRob24gLW0gY29tcGlsZWFsbGApIHRvCitjb21waWxlIFB5dGhvbiBzb3VyY2VzLgorCisuLiBwcm9ncmFtOjogY29tcGlsZWFsbAorCisuLiBjbWRvcHRpb246OiBbZGlyZWN0b3J5fGZpbGVdLi4uCisKKyAgIFBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBjb21waWxlIG9yIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbgorICAgc291cmNlIGZpbGVzLCB0cmF2ZXJzZWQgcmVjdXJzaXZlbHkuICBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgYmVoYXZlIGFzIGlmCisgICB0aGUgY29tbWFuZCBsaW5lIHdhcyBgYC1sIDxkaXJlY3RvcmllcyBmcm9tIHN5cy5wYXRoPmBgLgorCisuLiBjbWRvcHRpb246OiAtbAorCisgICBEbyBub3QgcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzLCBvbmx5IGNvbXBpbGUgc291cmNlIGNvZGUgZmlsZXMgZGlyZWN0bHkKKyAgIGNvbnRhaW5lZCBpbiB0aGUgbmFtZWQgb3IgaW1wbGllZCBkaXJlY3Rvcmllcy4KKworLi4gY21kb3B0aW9uOjogLWYKKworICAgRm9yY2UgcmVidWlsZCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUuCisKKy4uIGNtZG9wdGlvbjo6IC1xCisKKyAgIERvIG5vdCBwcmludCB0aGUgbGlzdCBvZiBmaWxlcyBjb21waWxlZCwgcHJpbnQgb25seSBlcnJvciBtZXNzYWdlcy4KKworLi4gY21kb3B0aW9uOjogLWQgZGVzdGRpcgorCisgICBEaXJlY3RvcnkgcHJlcGVuZGVkIHRvIHRoZSBwYXRoIHRvIGVhY2ggZmlsZSBiZWluZyBjb21waWxlZC4gIFRoaXMgd2lsbAorICAgYXBwZWFyIGluIGNvbXBpbGF0aW9uIHRpbWUgdHJhY2ViYWNrcywgYW5kIGlzIGFsc28gY29tcGlsZWQgaW4gdG8gdGhlCisgICBieXRlLWNvZGUgZmlsZSwgd2hlcmUgaXQgd2lsbCBiZSB1c2VkIGluIHRyYWNlYmFja3MgYW5kIG90aGVyIG1lc3NhZ2VzIGluCisgICBjYXNlcyB3aGVyZSB0aGUgc291cmNlIGZpbGUgZG9lcyBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGJ5dGUtY29kZSBmaWxlIGlzCisgICBleGVjdXRlZC4KKworLi4gY21kb3B0aW9uOjogLXggcmVnZXgKKworICAgcmVnZXggaXMgdXNlZCB0byBzZWFyY2ggdGhlIGZ1bGwgcGF0aCB0byBlYWNoIGZpbGUgY29uc2lkZXJlZCBmb3IKKyAgIGNvbXBpbGF0aW9uLCBhbmQgaWYgdGhlIHJlZ2V4IHByb2R1Y2VzIGEgbWF0Y2gsIHRoZSBmaWxlIGlzIHNraXBwZWQuCisKKy4uIGNtZG9wdGlvbjo6IC1pIGxpc3QKKworICAgUmVhZCB0aGUgZmlsZSBgYGxpc3RgYCBhbmQgYWRkIGVhY2ggbGluZSB0aGF0IGl0IGNvbnRhaW5zIHRvIHRoZSBsaXN0IG9mCisgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gY29tcGlsZS4gIElmIGBgbGlzdGBgIGlzIGBgLWBgLCByZWFkIGxpbmVzIGZyb20KKyAgIGBgc3RkaW5gYC4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIEFkZGVkIHRoZSBgYC1pYGAgIG9wdGlvbi4KKworCitQdWJsaWMgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogY29tcGlsZV9kaXIoZGlyWywgbWF4bGV2ZWxzWywgZGRpclssIGZvcmNlWywgcnhbLCBxdWlldF1dXV1dKQogCiAgICBSZWN1cnNpdmVseSBkZXNjZW5kIHRoZSBkaXJlY3RvcnkgdHJlZSBuYW1lZCBieSAqZGlyKiwgY29tcGlsaW5nIGFsbCA6ZmlsZTpgLnB5YAotICAgZmlsZXMgYWxvbmcgdGhlIHdheS4gIFRoZSAqbWF4bGV2ZWxzKiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBsaW1pdCB0aGUgZGVwdGggb2YKLSAgIHRoZSByZWN1cnNpb247IGl0IGRlZmF1bHRzIHRvIGBgMTBgYC4gIElmICpkZGlyKiBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUKLSAgIGJhc2UgcGF0aCBmcm9tICB3aGljaCB0aGUgZmlsZW5hbWVzIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCisgICBmaWxlcyBhbG9uZyB0aGUgd2F5LgorCisgICBUaGUgKm1heGxldmVscyogcGFyYW1ldGVyIGlzIHVzZWQgdG8gbGltaXQgdGhlIGRlcHRoIG9mIHRoZSByZWN1cnNpb247IGl0CisgICBkZWZhdWx0cyB0byBgYDEwYGAuCisKKyAgIElmICpkZGlyKiBpcyBnaXZlbiwgaXQgaXMgcHJlcGVuZGVkIHRvIHRoZSBwYXRoIHRvIGVhY2ggZmlsZSBiZWluZyBjb21waWxlZAorICAgZm9yIHVzZSBpbiBjb21waWxhdGlvbiB0aW1lIHRyYWNlYmFja3MsIGFuZCBpcyBhbHNvIGNvbXBpbGVkIGluIHRvIHRoZQorICAgYnl0ZS1jb2RlIGZpbGUsIHdoZXJlIGl0IHdpbGwgYmUgdXNlZCBpbiB0cmFjZWJhY2tzIGFuZCBvdGhlciBtZXNzYWdlcyBpbgorICAgY2FzZXMgd2hlcmUgdGhlIHNvdXJjZSBmaWxlIGRvZXMgbm90IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBieXRlLWNvZGUgZmlsZSBpcworICAgZXhlY3V0ZWQuCisKICAgIElmICpmb3JjZSogaXMgdHJ1ZSwgbW9kdWxlcyBhcmUgcmUtY29tcGlsZWQgZXZlbiBpZiB0aGUgdGltZXN0YW1wcyBhcmUgdXAgdG8KICAgIGRhdGUuCiAKLSAgIElmICpyeCogaXMgZ2l2ZW4sIGl0IHNwZWNpZmllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvZiBmaWxlIG5hbWVzIHRvIGV4Y2x1ZGUKLSAgIGZyb20gdGhlIHNlYXJjaDsgdGhhdCBleHByZXNzaW9uIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZnVsbCBwYXRoLgorICAgSWYgKnJ4KiBpcyBnaXZlbiwgaXRzIHNlYXJjaCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBjb21wbGV0ZSBwYXRoIHRvIGVhY2gKKyAgIGZpbGUgY29uc2lkZXJlZCBmb3IgY29tcGlsYXRpb24sIGFuZCBpZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgdGhlIGZpbGUKKyAgIGlzIHNraXBwZWQuCiAKLSAgIElmICpxdWlldCogaXMgdHJ1ZSwgbm90aGluZyBpcyBwcmludGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgaW4gbm9ybWFsCi0gICBvcGVyYXRpb24uCisgICBJZiAqcXVpZXQqIGlzIHRydWUsIG5vdGhpbmcgaXMgcHJpbnRlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHVubGVzcyBlcnJvcnMKKyAgIG9jY3VyLgorCisKKy4uIGZ1bmN0aW9uOjogY29tcGlsZV9maWxlKGZ1bGxuYW1lWywgZGRpclssIGZvcmNlWywgcnhbLCBxdWlldF1dXV0pCisKKyAgIENvbXBpbGUgdGhlIGZpbGUgd2l0aCBwYXRoICpmdWxsbmFtZSouCisKKyAgIElmICpkZGlyKiBpcyBnaXZlbiwgaXQgaXMgcHJlcGVuZGVkIHRvIHRoZSBwYXRoIHRvIHRoZSBmaWxlIGJlaW5nIGNvbXBpbGVkCisgICBmb3IgdXNlIGluIGNvbXBpbGF0aW9uIHRpbWUgdHJhY2ViYWNrcywgYW5kIGlzIGFsc28gY29tcGlsZWQgaW4gdG8gdGhlCisgICBieXRlLWNvZGUgZmlsZSwgd2hlcmUgaXQgd2lsbCBiZSB1c2VkIGluIHRyYWNlYmFja3MgYW5kIG90aGVyIG1lc3NhZ2VzIGluCisgICBjYXNlcyB3aGVyZSB0aGUgc291cmNlIGZpbGUgZG9lcyBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGJ5dGUtY29kZSBmaWxlIGlzCisgICBleGVjdXRlZC4KKworICAgSWYgKnJ4KiBpcyBnaXZlbiwgaXRzIHNlYXJjaCBtZXRob2QgaXMgcGFzc2VkIHRoZSBmdWxsIHBhdGggbmFtZSB0byB0aGUKKyAgIGZpbGUgYmVpbmcgY29tcGlsZWQsIGFuZCBpZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgdGhlIGZpbGUgaXMgbm90CisgICBjb21waWxlZCBhbmQgYGBUcnVlYGAgaXMgcmV0dXJuZWQuCisKKyAgIElmICpxdWlldCogaXMgdHJ1ZSwgbm90aGluZyBpcyBwcmludGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdW5sZXNzIGVycm9ycworICAgb2NjdXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCiAKIC4uIGZ1bmN0aW9uOjogY29tcGlsZV9wYXRoKFtza2lwX2N1cmRpclssIG1heGxldmVsc1ssIGZvcmNlXV1dKQogCiAgICBCeXRlLWNvbXBpbGUgYWxsIHRoZSA6ZmlsZTpgLnB5YCBmaWxlcyBmb3VuZCBhbG9uZyBgYHN5cy5wYXRoYGAuIElmCi0gICAqc2tpcF9jdXJkaXIqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIG5vdCBpbmNsdWRlZCBpbgotICAgdGhlIHNlYXJjaC4gIFRoZSAqbWF4bGV2ZWxzKiBhbmQgKmZvcmNlKiBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gYGAwYGAgYW5kIGFyZQotICAgcGFzc2VkIHRvIHRoZSA6ZnVuYzpgY29tcGlsZV9kaXJgIGZ1bmN0aW9uLgorICAgKnNraXBfY3VyZGlyKiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBub3QgaW5jbHVkZWQKKyAgIGluIHRoZSBzZWFyY2guICBBbGwgb3RoZXIgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZSA6ZnVuYzpgY29tcGlsZV9kaXJgCisgICBmdW5jdGlvbi4gIE5vdGUgdGhhdCB1bmxpa2UgdGhlIG90aGVyIGNvbXBpbGUgZnVuY3Rpb25zLCBgYG1heGxldmVsc2BgCisgICBkZWZhdWx0cyB0byBgYDBgYC4KIAogVG8gZm9yY2UgYSByZWNvbXBpbGUgb2YgYWxsIHRoZSA6ZmlsZTpgLnB5YCBmaWxlcyBpbiB0aGUgOmZpbGU6YExpYi9gCiBzdWJkaXJlY3RvcnkgYW5kIGFsbCBpdHMgc3ViZGlyZWN0b3JpZXM6OgpAQCAtNTksNCArMTM0LDMgQEAKIAogICAgTW9kdWxlIDptb2Q6YHB5X2NvbXBpbGVgCiAgICAgICBCeXRlLWNvbXBpbGUgYSBzaW5nbGUgc291cmNlIGZpbGUuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbXBpbGVyLnJzdCBiL0RvYy9saWJyYXJ5L2NvbXBpbGVyLnJzdAppbmRleCA5OTE2MjhhLi40NThlNjUzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb21waWxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29tcGlsZXIucnN0CkBAIC0xOCw3ICsxOCw3IEBACiAKIFRoZSA6bW9kOmBjb21waWxlcmAgcGFja2FnZSBpcyBhIFB5dGhvbiBzb3VyY2UgdG8gYnl0ZWNvZGUgdHJhbnNsYXRvciB3cml0dGVuIGluCiBQeXRob24uICBJdCB1c2VzIHRoZSBidWlsdC1pbiBwYXJzZXIgYW5kIHN0YW5kYXJkIDptb2Q6YHBhcnNlcmAgbW9kdWxlIHRvCi1nZW5lcmF0ZWQgYSBjb25jcmV0ZSBzeW50YXggdHJlZS4gIFRoaXMgdHJlZSBpcyB1c2VkIHRvIGdlbmVyYXRlIGFuIGFic3RyYWN0CitnZW5lcmF0ZSBhIGNvbmNyZXRlIHN5bnRheCB0cmVlLiAgVGhpcyB0cmVlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYWJzdHJhY3QKIHN5bnRheCB0cmVlIChBU1QpIGFuZCB0aGVuIFB5dGhvbiBieXRlY29kZS4KIAogVGhlIGZ1bGwgZnVuY3Rpb25hbGl0eSBvZiB0aGUgcGFja2FnZSBkdXBsaWNhdGVzIHRoZSBidWlsdC1pbiBjb21waWxlciBwcm92aWRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKaW5kZXggODY3ZjA5MS4uNGIxZTdhMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CkBAIC00Myw3ICs0Myw3IEBACiAKIENvbmZpZ3VyYXRpb24gZmlsZXMgbWF5IGluY2x1ZGUgY29tbWVudHMsIHByZWZpeGVkIGJ5IHNwZWNpZmljIGNoYXJhY3RlcnMgKGBgI2BgCiBhbmQgYGA7YGApLiAgQ29tbWVudHMgbWF5IGFwcGVhciBvbiB0aGVpciBvd24gaW4gYW4gb3RoZXJ3aXNlIGVtcHR5IGxpbmUsIG9yIG1heQotYmUgZW50ZXJlZCBpbiBsaW5lcyBob2xkaW5nIHZhbHVlcyBvciBzcGVjdGlvbiBuYW1lcy4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhleQorYmUgZW50ZXJlZCBpbiBsaW5lcyBob2xkaW5nIHZhbHVlcyBvciBzZWN0aW9uIG5hbWVzLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGV5CiBuZWVkIHRvIGJlIHByZWNlZGVkIGJ5IGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgdG8gYmUgcmVjb2duaXplZCBhcyBhIGNvbW1lbnQuCiAoRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBvbmx5IGBgO2BgIHN0YXJ0cyBhbiBpbmxpbmUgY29tbWVudCwgd2hpbGUgYGAjYGAKIGRvZXMgbm90LikKQEAgLTc0LDEyICs3NCwxNiBAQAogd3JpdGUtYmFjaywgYXMgd2lsbCBiZSB0aGUga2V5cyB3aXRoaW4gZWFjaCBzZWN0aW9uLgogCiAKLS4uIGNsYXNzOjogUmF3Q29uZmlnUGFyc2VyKFtkZWZhdWx0c1ssIGRpY3RfdHlwZV1dKQorLi4gY2xhc3M6OiBSYXdDb25maWdQYXJzZXIoW2RlZmF1bHRzWywgZGljdF90eXBlWywgYWxsb3dfbm9fdmFsdWVdXV0pCiAKICAgIFRoZSBiYXNpYyBjb25maWd1cmF0aW9uIG9iamVjdC4gIFdoZW4gKmRlZmF1bHRzKiBpcyBnaXZlbiwgaXQgaXMgaW5pdGlhbGl6ZWQKICAgIGludG8gdGhlIGRpY3Rpb25hcnkgb2YgaW50cmluc2ljIGRlZmF1bHRzLiAgV2hlbiAqZGljdF90eXBlKiBpcyBnaXZlbiwgaXQgd2lsbAogICAgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGRpY3Rpb25hcnkgb2JqZWN0cyBmb3IgdGhlIGxpc3Qgb2Ygc2VjdGlvbnMsIGZvciB0aGUKLSAgIG9wdGlvbnMgd2l0aGluIGEgc2VjdGlvbiwgYW5kIGZvciB0aGUgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgY2xhc3MgZG9lcyBub3QKKyAgIG9wdGlvbnMgd2l0aGluIGEgc2VjdGlvbiwgYW5kIGZvciB0aGUgZGVmYXVsdCB2YWx1ZXMuICBXaGVuICphbGxvd19ub192YWx1ZSoKKyAgIGlzIHRydWUgKGRlZmF1bHQ6IGBgRmFsc2VgYCksIG9wdGlvbnMgd2l0aG91dCB2YWx1ZXMgYXJlIGFjY2VwdGVkOyB0aGUgdmFsdWUKKyAgIHByZXNlbnRlZCBmb3IgdGhlc2UgaXMgYGBOb25lYGAuCisKKyAgIFRoaXMgY2xhc3MgZG9lcyBub3QKICAgIHN1cHBvcnQgdGhlIG1hZ2ljYWwgaW50ZXJwb2xhdGlvbiBiZWhhdmlvci4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCkBAIC04Nyw4ICs5MSwxMiBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgICpkaWN0X3R5cGUqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFRoZSBkZWZhdWx0ICpkaWN0X3R5cGUqIGlzIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgLgorICAgICAgKmFsbG93X25vX3ZhbHVlKiB3YXMgYWRkZWQuCiAKLS4uIGNsYXNzOjogQ29uZmlnUGFyc2VyKFtkZWZhdWx0c1ssIGRpY3RfdHlwZV1dKQorCisuLiBjbGFzczo6IENvbmZpZ1BhcnNlcihbZGVmYXVsdHNbLCBkaWN0X3R5cGVbLCBhbGxvd19ub192YWx1ZV1dXSkKIAogICAgRGVyaXZlZCBjbGFzcyBvZiA6Y2xhc3M6YFJhd0NvbmZpZ1BhcnNlcmAgdGhhdCBpbXBsZW1lbnRzIHRoZSBtYWdpY2FsCiAgICBpbnRlcnBvbGF0aW9uIGZlYXR1cmUgYW5kIGFkZHMgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSA6bWV0aDpgZ2V0YCBhbmQKQEAgLTEwMyw4ICsxMTEsMTcgQEAKICAgIG9wdGlvbiBuYW1lcyB0byBsb3dlciBjYXNlKSwgdGhlIHZhbHVlcyBgYGZvbyAlKGJhcilzYGAgYW5kIGBgZm9vICUoQkFSKXNgYCBhcmUKICAgIGVxdWl2YWxlbnQuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCi0uLiBjbGFzczo6IFNhZmVDb25maWdQYXJzZXIoW2RlZmF1bHRzWywgZGljdF90eXBlXV0pCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgorICAgICAgKmRpY3RfdHlwZSogd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlIGRlZmF1bHQgKmRpY3RfdHlwZSogaXMgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAuCisgICAgICAqYWxsb3dfbm9fdmFsdWUqIHdhcyBhZGRlZC4KKworCisuLiBjbGFzczo6IFNhZmVDb25maWdQYXJzZXIoW2RlZmF1bHRzWywgZGljdF90eXBlWywgYWxsb3dfbm9fdmFsdWVdXV0pCiAKICAgIERlcml2ZWQgY2xhc3Mgb2YgOmNsYXNzOmBDb25maWdQYXJzZXJgIHRoYXQgaW1wbGVtZW50cyBhIG1vcmUtc2FuZSB2YXJpYW50IG9mCiAgICB0aGUgbWFnaWNhbCBpbnRlcnBvbGF0aW9uIGZlYXR1cmUuICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIG1vcmUgcHJlZGljdGFibGUgYXMKQEAgLTExNSw2ICsxMzIsMTMgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CisgICAgICAqZGljdF90eXBlKiB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgZGVmYXVsdCAqZGljdF90eXBlKiBpcyA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YC4KKyAgICAgICphbGxvd19ub192YWx1ZSogd2FzIGFkZGVkLgorCiAKIC4uIGV4Y2VwdGlvbjo6IEVycm9yCiAKQEAgLTQ4NiwzICs1MTAsMzggQEAKICAgICAgICAgICAgb3B0X21vdmUoY29uZmlnLCBzZWN0aW9uMSwgc2VjdGlvbjIsIG9wdGlvbikKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb25maWcucmVtb3ZlX29wdGlvbihzZWN0aW9uMSwgb3B0aW9uKQorCitTb21lIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGtub3duIHRvIGluY2x1ZGUgc2V0dGluZ3Mgd2l0aG91dCB2YWx1ZXMsIGJ1dCB3aGljaAorb3RoZXJ3aXNlIGNvbmZvcm0gdG8gdGhlIHN5bnRheCBzdXBwb3J0ZWQgYnkgOm1vZDpgQ29uZmlnUGFyc2VyYC4gIFRoZQorKmFsbG93X25vX3ZhbHVlKiBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgc3VjaAordmFsdWVzIHNob3VsZCBiZSBhY2NlcHRlZDoKKworLi4gZG9jdGVzdDo6CisKKyAgID4+PiBpbXBvcnQgQ29uZmlnUGFyc2VyCisgICA+Pj4gaW1wb3J0IGlvCisKKyAgID4+PiBzYW1wbGVfY29uZmlnID0gIiIiCisgICAuLi4gW215c3FsZF0KKyAgIC4uLiB1c2VyID0gbXlzcWwKKyAgIC4uLiBwaWQtZmlsZSA9IC92YXIvcnVuL215c3FsZC9teXNxbGQucGlkCisgICAuLi4gc2tpcC1leHRlcm5hbC1sb2NraW5nCisgICAuLi4gb2xkX3Bhc3N3b3JkcyA9IDEKKyAgIC4uLiBza2lwLWJkYgorICAgLi4uIHNraXAtaW5ub2RiCisgICAuLi4gIiIiCisgICA+Pj4gY29uZmlnID0gQ29uZmlnUGFyc2VyLlJhd0NvbmZpZ1BhcnNlcihhbGxvd19ub192YWx1ZT1UcnVlKQorICAgPj4+IGNvbmZpZy5yZWFkZnAoaW8uQnl0ZXNJTyhzYW1wbGVfY29uZmlnKSkKKworICAgPj4+ICMgU2V0dGluZ3Mgd2l0aCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgYmVmb3JlOgorICAgPj4+IGNvbmZpZy5nZXQoIm15c3FsZCIsICJ1c2VyIikKKyAgICdteXNxbCcKKworICAgPj4+ICMgU2V0dGluZ3Mgd2l0aG91dCB2YWx1ZXMgcHJvdmlkZSBOb25lOgorICAgPj4+IGNvbmZpZy5nZXQoIm15c3FsZCIsICJza2lwLWJkYiIpCisKKyAgID4+PiAjIFNldHRpbmdzIHdoaWNoIGFyZW4ndCBzcGVjaWZpZWQgc3RpbGwgcmFpc2UgYW4gZXJyb3I6CisgICA+Pj4gY29uZmlnLmdldCgibXlzcWxkIiwgImRvZXMtbm90LWV4aXN0IikKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICBDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvcjogTm8gb3B0aW9uICdkb2VzLW5vdC1leGlzdCcgaW4gc2VjdGlvbjogJ215c3FsZCcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QgYi9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0CmluZGV4IGU2ZDkyN2EuLjgwZTc5MmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdApAQCAtNDIsMTQgKzQyLDE3IEBACiAuLiBkYXRhOjogX19kZWJ1Z19fCiAKICAgIFRoaXMgY29uc3RhbnQgaXMgdHJ1ZSBpZiBQeXRob24gd2FzIG5vdCBzdGFydGVkIHdpdGggYW4gOm9wdGlvbjpgLU9gIG9wdGlvbi4KLSAgIEl0IGNhbm5vdCBiZSByZWFzc2lnbmVkLiAgU2VlIGFsc28gdGhlIDprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudC4KKyAgIFNlZSBhbHNvIHRoZSA6a2V5d29yZDpgYXNzZXJ0YCBzdGF0ZW1lbnQuCiAKIAogLi4gbm90ZTo6CiAKLSAgIFRoZSBuYW1lIDpkYXRhOmBOb25lYCBjYW5ub3QgYmUgcmVhc3NpZ25lZCAoYXNzaWdubWVudHMgdG8gaXQsIGV2ZW4gYXMgYW4KLSAgIGF0dHJpYnV0ZSBuYW1lLCByYWlzZSA6ZXhjOmBTeW50YXhFcnJvcmApLCBzbyBpdCBjYW4gYmUgY29uc2lkZXJlZCBhICJ0cnVlIgotICAgY29uc3RhbnQuCisgICBUaGUgbmFtZXMgOmRhdGE6YE5vbmVgIGFuZCA6ZGF0YTpgX19kZWJ1Z19fYCBjYW5ub3QgYmUgcmVhc3NpZ25lZAorICAgKGFzc2lnbm1lbnRzIHRvIHRoZW0sIGV2ZW4gYXMgYW4gYXR0cmlidXRlIG5hbWUsIHJhaXNlIDpleGM6YFN5bnRheEVycm9yYCksCisgICBzbyB0aGV5IGNhbiBiZSBjb25zaWRlcmVkICJ0cnVlIiBjb25zdGFudHMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBc3NpZ25tZW50cyB0byBgYF9fZGVidWdfX2BgIGFzIGFuIGF0dHJpYnV0ZSBiZWNhbWUgaWxsZWdhbC4KIAogCiBDb25zdGFudHMgYWRkZWQgYnkgdGhlIDptb2Q6YHNpdGVgIG1vZHVsZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAppbmRleCBiNWU5YWE4Li5jNDM1MDgyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdApAQCAtMTEsNiArMTEsMTEgQEAKIHN0YXRlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIGFsc28gOnJlZjpgdHlwZWNvbnRleHRtYW5hZ2VyYCBhbmQKIDpyZWY6YGNvbnRleHQtbWFuYWdlcnNgLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBjb250ZXh0bGliIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2NvbnRleHRsaWIucHk/dmlldz1tYXJrdXA+YF8KKwogRnVuY3Rpb25zIHByb3ZpZGVkOgogCiAKQEAgLTU4LDIxICs2MywxOCBAQAogCiAgICBDb21iaW5lIG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMgaW50byBhIHNpbmdsZSBuZXN0ZWQgY29udGV4dCBtYW5hZ2VyLgogCi0gICBDb2RlIGxpa2UgdGhpczo6CisgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBtdWx0aXBsZSBtYW5hZ2VyIGZvcm0KKyAgIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgorCisgICBUaGUgb25lIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIG92ZXIgdGhlIG11bHRpcGxlIG1hbmFnZXIgZm9ybSBvZiB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgaXMgdGhhdCBhcmd1bWVudCB1bnBhY2tpbmcgYWxsb3dzIGl0IHRvIGJlCisgICB1c2VkIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgY29udGV4dCBtYW5hZ2VycyBhcyBmb2xsb3dzOjoKIAogICAgICAgZnJvbSBjb250ZXh0bGliIGltcG9ydCBuZXN0ZWQKIAotICAgICAgd2l0aCBuZXN0ZWQoQSgpLCBCKCksIEMoKSkgYXMgKFgsIFksIFopOgorICAgICAgd2l0aCBuZXN0ZWQoKm1hbmFnZXJzKToKICAgICAgICAgICBkb19zb21ldGhpbmcoKQogCi0gICBpcyBlcXVpdmFsZW50IHRvIHRoaXM6OgotCi0gICAgICBtMSwgbTIsIG0zID0gQSgpLCBCKCksIEMoKQotICAgICAgd2l0aCBtMSBhcyBYOgotICAgICAgICAgIHdpdGggbTIgYXMgWToKLSAgICAgICAgICAgICAgd2l0aCBtMyBhcyBaOgotICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKLQogICAgTm90ZSB0aGF0IGlmIHRoZSA6bWV0aDpgX19leGl0X19gIG1ldGhvZCBvZiBvbmUgb2YgdGhlIG5lc3RlZCBjb250ZXh0IG1hbmFnZXJzCiAgICBpbmRpY2F0ZXMgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSBzdXBwcmVzc2VkLCBubyBleGNlcHRpb24gaW5mb3JtYXRpb24gd2lsbCBiZQogICAgcGFzc2VkIHRvIGFueSByZW1haW5pbmcgb3V0ZXIgY29udGV4dCBtYW5hZ2Vycy4gU2ltaWxhcmx5LCBpZiB0aGUKQEAgLTgyLDYgKzg0LDI4IEBACiAgICA6bWV0aDpgX19leGl0X19gIG1ldGhvZHMgc2hvdWxkIGF2b2lkIHJhaXNpbmcgZXhjZXB0aW9ucywgYW5kIGluIHBhcnRpY3VsYXIgdGhleQogICAgc2hvdWxkIG5vdCByZS1yYWlzZSBhIHBhc3NlZC1pbiBleGNlcHRpb24uCiAKKyAgIFRoaXMgZnVuY3Rpb24gaGFzIHR3byBtYWpvciBxdWlya3MgdGhhdCBoYXZlIGxlZCB0byBpdCBiZWluZyBkZXByZWNhdGVkLiBGaXJzdGx5LAorICAgYXMgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIGFsbCBjb25zdHJ1Y3RlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQsIHRoZQorICAgOm1ldGg6YF9fbmV3X19gIGFuZCA6bWV0aDpgX19pbml0X19gIG1ldGhvZHMgb2YgdGhlIGlubmVyIGNvbnRleHQgbWFuYWdlcnMgYXJlCisgICBub3QgYWN0dWFsbHkgY292ZXJlZCBieSB0aGUgc2NvcGUgb2YgdGhlIG91dGVyIGNvbnRleHQgbWFuYWdlcnMuIFRoYXQgbWVhbnMsIGZvcgorICAgZXhhbXBsZSwgdGhhdCB1c2luZyA6ZnVuYzpgbmVzdGVkYCB0byBvcGVuIHR3byBmaWxlcyBpcyBhIHByb2dyYW1taW5nIGVycm9yIGFzIHRoZQorICAgZmlyc3QgZmlsZSB3aWxsIG5vdCBiZSBjbG9zZWQgcHJvbXB0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIG9wZW5pbmcKKyAgIHRoZSBzZWNvbmQgZmlsZS4KKworICAgU2Vjb25kbHksIGlmIHRoZSA6bWV0aDpgX19lbnRlcl9fYCBtZXRob2Qgb2Ygb25lIG9mIHRoZSBpbm5lciBjb250ZXh0IG1hbmFnZXJzCisgICByYWlzZXMgYW4gZXhjZXB0aW9uIHRoYXQgaXMgY2F1Z2h0IGFuZCBzdXBwcmVzc2VkIGJ5IHRoZSA6bWV0aDpgX19leGl0X19gIG1ldGhvZAorICAgb2Ygb25lIG9mIHRoZSBvdXRlciBjb250ZXh0IG1hbmFnZXJzLCB0aGlzIGNvbnN0cnVjdCB3aWxsIHJhaXNlCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgIHJhdGhlciB0aGFuIHNraXBwaW5nIHRoZSBib2R5IG9mIHRoZSA6a2V5d29yZDpgd2l0aGAKKyAgIHN0YXRlbWVudC4KKworICAgRGV2ZWxvcGVycyB0aGF0IG5lZWQgdG8gc3VwcG9ydCBuZXN0aW5nIG9mIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNvbnRleHQgbWFuYWdlcnMKKyAgIGNhbiBlaXRoZXIgdXNlIHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlIHRvIHN1cHByZXNzIHRoZSBEZXByZWNhdGlvbldhcm5pbmcKKyAgIHJhaXNlZCBieSB0aGlzIGZ1bmN0aW9uIG9yIGVsc2UgdXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBtb2RlbCBmb3IgYW4gYXBwbGljYXRpb24KKyAgIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBUaGUgd2l0aC1zdGF0ZW1lbnQgbm93IHN1cHBvcnRzIHRoaXMgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSAod2l0aG91dCB0aGUKKyAgICAgIGNvbmZ1c2luZyBlcnJvciBwcm9uZSBxdWlya3MpLgogCiAuLiBmdW5jdGlvbjo6IGNsb3NpbmcodGhpbmcpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Nvb2tpZS5yc3QgYi9Eb2MvbGlicmFyeS9jb29raWUucnN0CmluZGV4IGI2YTg1ZjUuLjNiZGM2MWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Nvb2tpZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29va2llLnJzdApAQCAtMjM1LDggKzIzNSw2IEBACiAKICAgID4+PiBpbXBvcnQgQ29va2llCiAgICA+Pj4gQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQotICAgPj4+IEMgPSBDb29raWUuU2VyaWFsQ29va2llKCkKLSAgID4+PiBDID0gQ29va2llLlNtYXJ0Q29va2llKCkKICAgID4+PiBDWyJmaWciXSA9ICJuZXd0b24iCiAgICA+Pj4gQ1sic3VnYXIiXSA9ICJ3YWZlciIKICAgID4+PiBwcmludCBDICMgZ2VuZXJhdGUgSFRUUCBoZWFkZXJzCkBAIC0yNDUsMjggKzI0MywyNyBAQAogICAgPj4+IHByaW50IEMub3V0cHV0KCkgIyBzYW1lIHRoaW5nCiAgICBTZXQtQ29va2llOiBmaWc9bmV3dG9uCiAgICBTZXQtQ29va2llOiBzdWdhcj13YWZlcgotICAgPj4+IEMgPSBDb29raWUuU21hcnRDb29raWUoKQorICAgPj4+IEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKICAgID4+PiBDWyJyb2NreSJdID0gInJvYWQiCiAgICA+Pj4gQ1sicm9ja3kiXVsicGF0aCJdID0gIi9jb29raWUiCiAgICA+Pj4gcHJpbnQgQy5vdXRwdXQoaGVhZGVyPSJDb29raWU6IikKICAgIENvb2tpZTogcm9ja3k9cm9hZDsgUGF0aD0vY29va2llCiAgICA+Pj4gcHJpbnQgQy5vdXRwdXQoYXR0cnM9W10sIGhlYWRlcj0iQ29va2llOiIpCiAgICBDb29raWU6IHJvY2t5PXJvYWQKLSAgID4+PiBDID0gQ29va2llLlNtYXJ0Q29va2llKCkKKyAgID4+PiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCiAgICA+Pj4gQy5sb2FkKCJjaGlwcz1haG95OyB2aWVubmE9ZmluZ2VyIikgIyBsb2FkIGZyb20gYSBzdHJpbmcgKEhUVFAgaGVhZGVyKQogICAgPj4+IHByaW50IEMKICAgIFNldC1Db29raWU6IGNoaXBzPWFob3kKICAgIFNldC1Db29raWU6IHZpZW5uYT1maW5nZXIKLSAgID4+PiBDID0gQ29va2llLlNtYXJ0Q29va2llKCkKKyAgID4+PiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCiAgICA+Pj4gQy5sb2FkKCdrZWVibGVyPSJFPWV2ZXJ5Ym9keTsgTD1cXCJMb3Zlc1xcIjsgZnVkZ2U9XFwwMTI7IjsnKQogICAgPj4+IHByaW50IEMKICAgIFNldC1Db29raWU6IGtlZWJsZXI9IkU9ZXZlcnlib2R5OyBMPVwiTG92ZXNcIjsgZnVkZ2U9XDAxMjsiCi0gICA+Pj4gQyA9IENvb2tpZS5TbWFydENvb2tpZSgpCisgICA+Pj4gQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQogICAgPj4+IENbIm9yZW8iXSA9ICJkb3VibGVzdHVmZiIKICAgID4+PiBDWyJvcmVvIl1bInBhdGgiXSA9ICIvIgogICAgPj4+IHByaW50IEMKICAgIFNldC1Db29raWU6IG9yZW89ZG91Ymxlc3R1ZmY7IFBhdGg9LwotICAgPj4+IEMgPSBDb29raWUuU21hcnRDb29raWUoKQogICAgPj4+IENbInR3aXgiXSA9ICJub25lIGZvciB5b3UiCiAgICA+Pj4gQ1sidHdpeCJdLnZhbHVlCiAgICAnbm9uZSBmb3IgeW91JwpAQCAtMjgwLDYgKzI3Nyw4IEBACiAgICA+Pj4gcHJpbnQgQwogICAgU2V0LUNvb2tpZTogbnVtYmVyPTcKICAgIFNldC1Db29raWU6IHN0cmluZz1zZXZlbgorICAgPj4+ICMgU2VyaWFsQ29va2llIGFuZCBTbWFydENvb2tpZSBhcmUgZGVwcmVjYXRlZAorICAgPj4+ICMgdXNpbmcgaXQgY2FuIGNhdXNlIHNlY3VyaXR5IGxvb3Bob2xlcyBpbiB5b3VyIGNvZGUuCiAgICA+Pj4gQyA9IENvb2tpZS5TZXJpYWxDb29raWUoKQogICAgPj4+IENbIm51bWJlciJdID0gNwogICAgPj4+IENbInN0cmluZyJdID0gInNldmVuIgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3N2LnJzdCBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKaW5kZXggYzM5OWJiNy4uMDM5NDE3MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3N2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jc3YucnN0CkBAIC00MjQsNiArNDI0LDE2IEBACiAgICBBIHJlYWQtb25seSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlhbGVjdCBpbiB1c2UgYnkgdGhlIHdyaXRlci4KIAogCitEaWN0V3JpdGVyIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIHB1YmxpYyBtZXRob2Q6CisKKworLi4gbWV0aG9kOjogRGljdFdyaXRlci53cml0ZWhlYWRlcigpCisKKyAgIFdyaXRlIGEgcm93IHdpdGggdGhlIGZpZWxkIG5hbWVzIChhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gX2Nzdi1leGFtcGxlczoKIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CmluZGV4IDU4MjMwMGMuLmY0M2UxNjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdApAQCAtMjIwLDYgKzIyMCw4IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGN0eXBlcyB0eXBlICAgICAgICAgIHwgQyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQeXRob24gdHlwZSAgICAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IDpjbGFzczpgY19ib29sYCAgICAgIHwgOmN0eXBlOmBfQm9vbGAgICAgICAgICAgICAgICAgICAgICAgICAgfCBib29sICgxKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpjbGFzczpgY19jaGFyYCAgICAgIHwgOmN0eXBlOmBjaGFyYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLWNoYXJhY3RlciBzdHJpbmcgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpjbGFzczpgY193Y2hhcmAgICAgIHwgOmN0eXBlOmB3Y2hhcl90YCAgICAgICAgICAgICAgICAgICAgICAgfCAxLWNoYXJhY3RlciB1bmljb2RlIHN0cmluZyB8CkBAIC0yNTgsNiArMjYwLDkgQEAKIHwgOmNsYXNzOmBjX3ZvaWRfcGAgICAgfCA6Y3R5cGU6YHZvaWQgKmAgICAgICAgICAgICAgICAgICAgICAgICB8IGludC9sb25nIG9yIGBgTm9uZWBgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAorKDEpCisgICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbnkgb2JqZWN0IHdpdGggYSB0cnV0aCB2YWx1ZS4KKwogQWxsIHRoZXNlIHR5cGVzIGNhbiBiZSBjcmVhdGVkIGJ5IGNhbGxpbmcgdGhlbSB3aXRoIGFuIG9wdGlvbmFsIGluaXRpYWxpemVyIG9mCiB0aGUgY29ycmVjdCB0eXBlIGFuZCB2YWx1ZTo6CiAKQEAgLTIyNDgsNiArMjI1MywxMyBAQAogICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHNpemVfdGAgZGF0YXR5cGUuCiAKIAorLi4gY2xhc3M6OiBjX3NzaXplX3QKKworICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHNzaXplX3RgIGRhdGF0eXBlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBjbGFzczo6IGNfdWJ5dGUKIAogICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHVuc2lnbmVkIGNoYXJgIGRhdGF0eXBlLCBpdCBpbnRlcnByZXRzIHRoZSB2YWx1ZSBhcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDE1YTY2MTYuLjI0MjI5YmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTI4NCwxMiArMjg0LDI4IEBACiBlZmZpY2llbnQgcGlja2xpbmcsIGFuZCBpbiBCb29sZWFuIGNvbnRleHRzLCBhIDpjbGFzczpgdGltZWRlbHRhYCBvYmplY3QgaXMKIGNvbnNpZGVyZWQgdG8gYmUgdHJ1ZSBpZiBhbmQgb25seSBpZiBpdCBpc24ndCBlcXVhbCB0byBgYHRpbWVkZWx0YSgwKWBgLgogCitJbnN0YW5jZSBtZXRob2RzOgorCisuLiBtZXRob2Q6OiB0aW1lZGVsdGEudG90YWxfc2Vjb25kcygpCisKKyAgIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMgY29udGFpbmVkIGluIHRoZSBkdXJhdGlvbi4KKyAgIEVxdWl2YWxlbnQgdG8gYGAodGQubWljcm9zZWNvbmRzICsgKHRkLnNlY29uZHMgKyB0ZC5kYXlzICogMjQgKgorICAgMzYwMCkgKiAxMCoqNikgLyAxMCoqNmBgIGNvbXB1dGVkIHdpdGggdHJ1ZSBkaXZpc2lvbiBlbmFibGVkLgorCisgICBOb3RlIHRoYXQgZm9yIHZlcnkgbGFyZ2UgdGltZSBpbnRlcnZhbHMgKGdyZWF0ZXIgdGhhbiAyNzAgeWVhcnMgb24KKyAgIG1vc3QgcGxhdGZvcm1zKSB0aGlzIG1ldGhvZCB3aWxsIGxvc2UgbWljcm9zZWNvbmQgYWNjdXJhY3kuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIEV4YW1wbGUgdXNhZ2U6CiAKICAgICA+Pj4gZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCiAgICAgPj4+IHllYXIgPSB0aW1lZGVsdGEoZGF5cz0zNjUpCiAgICAgPj4+IGFub3RoZXJfeWVhciA9IHRpbWVkZWx0YSh3ZWVrcz00MCwgZGF5cz04NCwgaG91cnM9MjMsCiAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzPTUwLCBzZWNvbmRzPTYwMCkgICMgYWRkcyB1cCB0byAzNjUgZGF5cworICAgID4+PiB5ZWFyLnRvdGFsX3NlY29uZHMoKQorICAgIDMxNTM2MDAwLjAKICAgICA+Pj4geWVhciA9PSBhbm90aGVyX3llYXIKICAgICBUcnVlCiAgICAgPj4+IHRlbl95ZWFycyA9IDEwICogeWVhcgpAQCAtNDU3LDcgKzQ3Myw5IEBACiAgICBSZXR1cm4gYSA6Y2xhc3M6YHRpbWUuc3RydWN0X3RpbWVgIHN1Y2ggYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYC4KICAgIFRoZSBob3VycywgbWludXRlcyBhbmQgc2Vjb25kcyBhcmUgMCwgYW5kIHRoZSBEU1QgZmxhZyBpcyAtMS4gYGBkLnRpbWV0dXBsZSgpYGAKICAgIGlzIGVxdWl2YWxlbnQgdG8gYGB0aW1lLnN0cnVjdF90aW1lKChkLnllYXIsIGQubW9udGgsIGQuZGF5LCAwLCAwLCAwLAotICAgZC53ZWVrZGF5KCksIGQudG9vcmRpbmFsKCkgLSBkYXRlKGQueWVhciwgMSwgMSkudG9vcmRpbmFsKCkgKyAxLCAtMSkpYGAKKyAgIGQud2Vla2RheSgpLCB5ZGF5LCAtMSkpYGAsIHdoZXJlIGBgeWRheSA9IGQudG9vcmRpbmFsKCkgLSBkYXRlKGQueWVhciwgMSwKKyAgIDEpLnRvb3JkaW5hbCgpICsgMWBgIGlzIHRoZSBkYXkgbnVtYmVyIHdpdGhpbiB0aGUgY3VycmVudCB5ZWFyIHN0YXJ0aW5nIHdpdGgKKyAgIGBgMWBgIGZvciBKYW51YXJ5IDFzdC4KIAogCiAuLiBtZXRob2Q6OiBkYXRlLnRvb3JkaW5hbCgpCkBAIC05MjIsMTIgKzk0MCwxMyBAQAogCiAgICBSZXR1cm4gYSA6Y2xhc3M6YHRpbWUuc3RydWN0X3RpbWVgIHN1Y2ggYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYC4KICAgIGBgZC50aW1ldHVwbGUoKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGB0aW1lLnN0cnVjdF90aW1lKChkLnllYXIsIGQubW9udGgsIGQuZGF5LAotICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQsIGQud2Vla2RheSgpLCBkLnRvb3JkaW5hbCgpIC0gZGF0ZShkLnllYXIsIDEsCi0gICAxKS50b29yZGluYWwoKSArIDEsIGRzdCkpYGAgVGhlIDphdHRyOmB0bV9pc2RzdGAgZmxhZyBvZiB0aGUgcmVzdWx0IGlzIHNldAotICAgYWNjb3JkaW5nIHRvIHRoZSA6bWV0aDpgZHN0YCBtZXRob2Q6ICA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCBvciA6bWV0aDpgZHN0YAotICAgcmV0dXJucyBgYE5vbmVgYCwgOmF0dHI6YHRtX2lzZHN0YCBpcyBzZXQgdG8gIGBgLTFgYDsgZWxzZSBpZiA6bWV0aDpgZHN0YAotICAgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byBgYDFgYDsgZWxzZSBgYHRtX2lzZHN0YGAgaXMKLSAgIHNldCB0byBgYDBgYC4KKyAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kLCBkLndlZWtkYXkoKSwgeWRheSwgZHN0KSlgYCwgd2hlcmUgYGB5ZGF5ID0KKyAgIGQudG9vcmRpbmFsKCkgLSBkYXRlKGQueWVhciwgMSwgMSkudG9vcmRpbmFsKCkgKyAxYGAgaXMgdGhlIGRheSBudW1iZXIgd2l0aGluCisgICB0aGUgY3VycmVudCB5ZWFyIHN0YXJ0aW5nIHdpdGggYGAxYGAgZm9yIEphbnVhcnkgMXN0LiBUaGUgOmF0dHI6YHRtX2lzZHN0YCBmbGFnCisgICBvZiB0aGUgcmVzdWx0IGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIDptZXRoOmBkc3RgIG1ldGhvZDogOmF0dHI6YHR6aW5mb2AgaXMKKyAgIGBgTm9uZWBgIG9yIDptZXRoOmBkc3RgIHJldHVybnMgYGBOb25lYGAsIDphdHRyOmB0bV9pc2RzdGAgaXMgc2V0IHRvIGBgLTFgYDsKKyAgIGVsc2UgaWYgOm1ldGg6YGRzdGAgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byBgYDFgYDsKKyAgIGVsc2UgOmF0dHI6YHRtX2lzZHN0YCBpcyBzZXQgdG8gYGAwYGAuCiAKIAogLi4gbWV0aG9kOjogZGF0ZXRpbWUudXRjdGltZXR1cGxlKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlY2ltYWwucnN0IGIvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKaW5kZXggYWQ0NGJkYS4uMzU3ODgyZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKQEAgLTM1LDkgKzM1LDkgQEAKICAgcGVvcGxlIGxlYXJuIGF0IHNjaG9vbC4iIC0tIGV4Y2VycHQgZnJvbSB0aGUgZGVjaW1hbCBhcml0aG1ldGljIHNwZWNpZmljYXRpb24uCiAKICogRGVjaW1hbCBudW1iZXJzIGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LiAgSW4gY29udHJhc3QsIG51bWJlcnMgbGlrZQotICA6Y29uc3Q6YDEuMWAgZG8gbm90IGhhdmUgYW4gZXhhY3QgcmVwcmVzZW50YXRpb24gaW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LiBFbmQKLSAgdXNlcnMgdHlwaWNhbGx5IHdvdWxkIG5vdCBleHBlY3QgOmNvbnN0OmAxLjFgIHRvIGRpc3BsYXkgYXMKLSAgOmNvbnN0OmAxLjEwMDAwMDAwMDAwMDAwMDFgIGFzIGl0IGRvZXMgd2l0aCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQuCisgIDpjb25zdDpgMS4xYCBhbmQgOmNvbnN0OmAyLjJgIGRvIG5vdCBoYXZlIGFuIGV4YWN0IHJlcHJlc2VudGF0aW9ucyBpbiBiaW5hcnkKKyAgZmxvYXRpbmcgcG9pbnQuICBFbmQgdXNlcnMgdHlwaWNhbGx5IHdvdWxkIG5vdCBleHBlY3QgYGAxLjEgKyAyLjJgYCB0byBkaXNwbGF5CisgIGFzIDpjb25zdDpgMy4zMDAwMDAwMDAwMDAwMDAzYCBhcyBpdCBkb2VzIHdpdGggYmluYXJ5IGZsb2F0aW5nIHBvaW50LgogCiAqIFRoZSBleGFjdG5lc3MgY2FycmllcyBvdmVyIGludG8gYXJpdGhtZXRpYy4gIEluIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQsIGBgMC4xCiAgICsgMC4xICsgMC4xIC0gMC4zYGAgaXMgZXhhY3RseSBlcXVhbCB0byB6ZXJvLiAgSW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LCB0aGUgcmVzdWx0CkBAIC01Nyw2ICs1Nyw3IEBACiAgIGFsdGVyYWJsZSBwcmVjaXNpb24gKGRlZmF1bHRpbmcgdG8gMjggcGxhY2VzKSB3aGljaCBjYW4gYmUgYXMgbGFyZ2UgYXMgbmVlZGVkIGZvcgogICBhIGdpdmVuIHByb2JsZW06CiAKKyAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgKgogICAgICA+Pj4gZ2V0Y29udGV4dCgpLnByZWMgPSA2CiAgICAgID4+PiBEZWNpbWFsKDEpIC8gRGVjaW1hbCg3KQogICAgICBEZWNpbWFsKCcwLjE0Mjg1NycpCkBAIC0xMzMsMTAgKzEzNCw5IEBACiAKICAgID4+PiBnZXRjb250ZXh0KCkucHJlYyA9IDcgICAgICAgIyBTZXQgYSBuZXcgcHJlY2lzaW9uCiAKLURlY2ltYWwgaW5zdGFuY2VzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGludGVnZXJzLCBzdHJpbmdzLCBvciB0dXBsZXMuICBUbwotY3JlYXRlIGEgRGVjaW1hbCBmcm9tIGEgOmNsYXNzOmBmbG9hdGAsIGZpcnN0IGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuICBUaGlzCi1zZXJ2ZXMgYXMgYW4gZXhwbGljaXQgcmVtaW5kZXIgb2YgdGhlIGRldGFpbHMgb2YgdGhlIGNvbnZlcnNpb24gKGluY2x1ZGluZwotcmVwcmVzZW50YXRpb24gZXJyb3IpLiAgRGVjaW1hbCBudW1iZXJzIGluY2x1ZGUgc3BlY2lhbCB2YWx1ZXMgc3VjaCBhcworRGVjaW1hbCBpbnN0YW5jZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gaW50ZWdlcnMsIHN0cmluZ3MsIGZsb2F0cywgb3IgdHVwbGVzLgorQ29uc3RydWN0aW9uIGZyb20gYW4gaW50ZWdlciBvciBhIGZsb2F0IHBlcmZvcm1zIGFuIGV4YWN0IGNvbnZlcnNpb24gb2YgdGhlCit2YWx1ZSBvZiB0aGF0IGludGVnZXIgb3IgZmxvYXQuICBEZWNpbWFsIG51bWJlcnMgaW5jbHVkZSBzcGVjaWFsIHZhbHVlcyBzdWNoIGFzCiA6Y29uc3Q6YE5hTmAgd2hpY2ggc3RhbmRzIGZvciAiTm90IGEgbnVtYmVyIiwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlCiA6Y29uc3Q6YEluZmluaXR5YCwgYW5kIDpjb25zdDpgLTBgLgogCkBAIC0xNDUsNiArMTQ1LDggQEAKICAgIERlY2ltYWwoJzEwJykKICAgID4+PiBEZWNpbWFsKCczLjE0JykKICAgIERlY2ltYWwoJzMuMTQnKQorICAgPj4+IERlY2ltYWwoMy4xNCkKKyAgIERlY2ltYWwoJzMuMTQwMDAwMDAwMDAwMDAwMTI0MzQ0OTc4NzU4MDE3NTMyNTI3NDQ2NzQ2ODI2MTcxODc1JykKICAgID4+PiBEZWNpbWFsKCgwLCAoMywgMSwgNCksIC0yKSkKICAgIERlY2ltYWwoJzMuMTQnKQogICAgPj4+IERlY2ltYWwoc3RyKDIuMCAqKiAwLjUpKQpAQCAtMTkzLDcgKzE5NSw3IEBACiAgICA+Pj4gc3RyKGEpCiAgICAnMS4zNCcKICAgID4+PiBmbG9hdChhKQotICAgMS4zNDAwMDAwMDAwMDAwMDAxCisgICAxLjM0CiAgICA+Pj4gcm91bmQoYSwgMSkgICAgICMgcm91bmQoKSBmaXJzdCBjb252ZXJ0cyB0byBiaW5hcnkgZmxvYXRpbmcgcG9pbnQKICAgIDEuMwogICAgPj4+IGludChhKQpAQCAtMzE0LDcgKzMxNiw3IEBACiAKICAgIENvbnN0cnVjdCBhIG5ldyA6Y2xhc3M6YERlY2ltYWxgIG9iamVjdCBiYXNlZCBmcm9tICp2YWx1ZSouCiAKLSAgICp2YWx1ZSogY2FuIGJlIGFuIGludGVnZXIsIHN0cmluZywgdHVwbGUsIG9yIGFub3RoZXIgOmNsYXNzOmBEZWNpbWFsYAorICAgKnZhbHVlKiBjYW4gYmUgYW4gaW50ZWdlciwgc3RyaW5nLCB0dXBsZSwgOmNsYXNzOmBmbG9hdGAsIG9yIGFub3RoZXIgOmNsYXNzOmBEZWNpbWFsYAogICAgb2JqZWN0LiBJZiBubyAqdmFsdWUqIGlzIGdpdmVuLCByZXR1cm5zIGBgRGVjaW1hbCgnMCcpYGAuICBJZiAqdmFsdWUqIGlzIGEKICAgIHN0cmluZywgaXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlIGRlY2ltYWwgbnVtZXJpYyBzdHJpbmcgc3ludGF4IGFmdGVyIGxlYWRpbmcKICAgIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHJlbW92ZWQ6OgpAQCAtMzQxLDYgKzM0MywxMiBAQAogICAgZGlnaXRzLCBhbmQgYW4gaW50ZWdlciBleHBvbmVudC4gRm9yIGV4YW1wbGUsIGBgRGVjaW1hbCgoMCwgKDEsIDQsIDEsIDQpLCAtMykpYGAKICAgIHJldHVybnMgYGBEZWNpbWFsKCcxLjQxNCcpYGAuCiAKKyAgIElmICp2YWx1ZSogaXMgYSA6Y2xhc3M6YGZsb2F0YCwgdGhlIGJpbmFyeSBmbG9hdGluZyBwb2ludCB2YWx1ZSBpcyBsb3NzbGVzc2x5CisgICBjb252ZXJ0ZWQgdG8gaXRzIGV4YWN0IGRlY2ltYWwgZXF1aXZhbGVudC4gIFRoaXMgY29udmVyc2lvbiBjYW4gb2Z0ZW4gcmVxdWlyZQorICAgNTMgb3IgbW9yZSBkaWdpdHMgb2YgcHJlY2lzaW9uLiAgRm9yIGV4YW1wbGUsIGBgRGVjaW1hbChmbG9hdCgnMS4xJykpYGAKKyAgIGNvbnZlcnRzIHRvCisgICBgYERlY2ltYWwoJzEuMTAwMDAwMDAwMDAwMDAwMDg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1JylgYC4KKwogICAgVGhlICpjb250ZXh0KiBwcmVjaXNpb24gZG9lcyBub3QgYWZmZWN0IGhvdyBtYW55IGRpZ2l0cyBhcmUgc3RvcmVkLiBUaGF0IGlzCiAgICBkZXRlcm1pbmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBudW1iZXIgb2YgZGlnaXRzIGluICp2YWx1ZSouIEZvciBleGFtcGxlLAogICAgYGBEZWNpbWFsKCczLjAwMDAwJylgYCByZWNvcmRzIGFsbCBmaXZlIHplcm9zIGV2ZW4gaWYgdGhlIGNvbnRleHQgcHJlY2lzaW9uIGlzCkBAIC0zNTcsNiArMzY1LDkgQEAKICAgICAgIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkIHdoZW4KICAgICAgIGNyZWF0aW5nIGEgRGVjaW1hbCBpbnN0YW5jZSBmcm9tIGEgc3RyaW5nLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBpcyBub3cgcGVybWl0dGVkIHRvIGJlIGEgOmNsYXNzOmBmbG9hdGAgaW5zdGFuY2UuCisKICAgIERlY2ltYWwgZmxvYXRpbmcgcG9pbnQgb2JqZWN0cyBzaGFyZSBtYW55IHByb3BlcnRpZXMgd2l0aCB0aGUgb3RoZXIgYnVpbHQtaW4KICAgIG51bWVyaWMgdHlwZXMgc3VjaCBhcyA6Y2xhc3M6YGZsb2F0YCBhbmQgOmNsYXNzOmBpbnRgLiAgQWxsIG9mIHRoZSB1c3VhbCBtYXRoCiAgICBvcGVyYXRpb25zIGFuZCBzcGVjaWFsIG1ldGhvZHMgYXBwbHkuICBMaWtld2lzZSwgZGVjaW1hbCBvYmplY3RzIGNhbiBiZQpAQCAtMzY0LDYgKzM3NSwyNCBAQAogICAgY29tcGFyZWQsIHNvcnRlZCwgYW5kIGNvZXJjZWQgdG8gYW5vdGhlciB0eXBlIChzdWNoIGFzIDpjbGFzczpgZmxvYXRgIG9yCiAgICA6Y2xhc3M6YGxvbmdgKS4KIAorICAgRGVjaW1hbCBvYmplY3RzIGNhbm5vdCBnZW5lcmFsbHkgYmUgY29tYmluZWQgd2l0aCBmbG9hdHMgaW4KKyAgIGFyaXRobWV0aWMgb3BlcmF0aW9uczogYW4gYXR0ZW1wdCB0byBhZGQgYSA6Y2xhc3M6YERlY2ltYWxgIHRvIGEKKyAgIDpjbGFzczpgZmxvYXRgLCBmb3IgZXhhbXBsZSwgd2lsbCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuCisgICBUaGVyZSdzIG9uZSBleGNlcHRpb24gdG8gdGhpcyBydWxlOiBpdCdzIHBvc3NpYmxlIHRvIHVzZSBQeXRob24ncworICAgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gY29tcGFyZSBhIDpjbGFzczpgZmxvYXRgIGluc3RhbmNlIGBgeGBgCisgICB3aXRoIGEgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZSBgYHlgYC4gIFdpdGhvdXQgdGhpcyBleGNlcHRpb24sCisgICBjb21wYXJpc29ucyBiZXR3ZWVuIDpjbGFzczpgRGVjaW1hbGAgYW5kIDpjbGFzczpgZmxvYXRgIGluc3RhbmNlcworICAgd291bGQgZm9sbG93IHRoZSBnZW5lcmFsIHJ1bGVzIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQKKyAgIHR5cGVzIGRlc2NyaWJlZCBpbiB0aGUgOnJlZjpgZXhwcmVzc2lvbnNgIHNlY3Rpb24gb2YgdGhlIHJlZmVyZW5jZQorICAgbWFudWFsLCBsZWFkaW5nIHRvIGNvbmZ1c2luZyByZXN1bHRzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQSBjb21wYXJpc29uIGJldHdlZW4gYSA6Y2xhc3M6YGZsb2F0YCBpbnN0YW5jZSBgYHhgYCBhbmQgYQorICAgICAgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZSBgYHlgYCBub3cgcmV0dXJucyBhIHJlc3VsdCBiYXNlZCBvbgorICAgICAgdGhlIHZhbHVlcyBvZiBgYHhgYCBhbmQgYGB5YGAuICBJbiBlYXJsaWVyIHZlcnNpb25zIGBgeCA8IHlgYAorICAgICAgcmV0dXJuZWQgdGhlIHNhbWUgKGFyYml0cmFyeSkgcmVzdWx0IGZvciBhbnkgOmNsYXNzOmBEZWNpbWFsYAorICAgICAgaW5zdGFuY2UgYGB4YGAgYW5kIGFueSA6Y2xhc3M6YGZsb2F0YCBpbnN0YW5jZSBgYHlgYC4KKwogICAgSW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkIG51bWVyaWMgcHJvcGVydGllcywgZGVjaW1hbCBmbG9hdGluZyBwb2ludAogICAgb2JqZWN0cyBhbHNvIGhhdmUgYSBudW1iZXIgb2Ygc3BlY2lhbGl6ZWQgbWV0aG9kczoKIApAQCAtNDkwLDYgKzUxOSwzMiBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAorICAgLi4gbWV0aG9kOjogZnJvbV9mbG9hdChmKQorCisgICAgICBDbGFzc21ldGhvZCB0aGF0IGNvbnZlcnRzIGEgZmxvYXQgdG8gYSBkZWNpbWFsIG51bWJlciwgZXhhY3RseS4KKworICAgICAgTm90ZSBgRGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSlgIGlzIG5vdCB0aGUgc2FtZSBhcyBgRGVjaW1hbCgnMC4xJylgLgorICAgICAgU2luY2UgMC4xIGlzIG5vdCBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LCB0aGUKKyAgICAgIHZhbHVlIGlzIHN0b3JlZCBhcyB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlIHZhbHVlIHdoaWNoIGlzCisgICAgICBgMHgxLjk5OTk5OTk5OTk5OWFwLTRgLiAgVGhhdCBlcXVpdmFsZW50IHZhbHVlIGluIGRlY2ltYWwgaXMKKyAgICAgIGAwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjVgLgorCisgICAgICAuLiBub3RlOjogRnJvbSBQeXRob24gMi43IG9ud2FyZHMsIGEgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZQorICAgICAgICAgY2FuIGFsc28gYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgZnJvbSBhIDpjbGFzczpgZmxvYXRgLgorCisgICAgICAuLiBkb2N0ZXN0OjoKKworICAgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKQorICAgICAgICAgIERlY2ltYWwoJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpCisgICAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnbmFuJykpCisgICAgICAgICAgRGVjaW1hbCgnTmFOJykKKyAgICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCdpbmYnKSkKKyAgICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnLWluZicpKQorICAgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAgICAuLiBtZXRob2Q6OiBmbWEob3RoZXIsIHRoaXJkWywgY29udGV4dF0pCiAKICAgICAgIEZ1c2VkIG11bHRpcGx5LWFkZC4gIFJldHVybiBzZWxmKm90aGVyK3RoaXJkIHdpdGggbm8gcm91bmRpbmcgb2YgdGhlCkBAIC05NzYsOCArMTAzMSwxMSBAQAogICAgYSBsYXJnZSBudW1iZXIgb2YgbWV0aG9kcyBmb3IgZG9pbmcgYXJpdGhtZXRpYyBkaXJlY3RseSBpbiBhIGdpdmVuIGNvbnRleHQuCiAgICBJbiBhZGRpdGlvbiwgZm9yIGVhY2ggb2YgdGhlIDpjbGFzczpgRGVjaW1hbGAgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUgKHdpdGgKICAgIHRoZSBleGNlcHRpb24gb2YgdGhlIDptZXRoOmBhZGp1c3RlZGAgYW5kIDptZXRoOmBhc190dXBsZWAgbWV0aG9kcykgdGhlcmUgaXMKLSAgIGEgY29ycmVzcG9uZGluZyA6Y2xhc3M6YENvbnRleHRgIG1ldGhvZC4gIEZvciBleGFtcGxlLCBgYEMuZXhwKHgpYGAgaXMKLSAgIGVxdWl2YWxlbnQgdG8gYGB4LmV4cChjb250ZXh0PUMpYGAuCisgICBhIGNvcnJlc3BvbmRpbmcgOmNsYXNzOmBDb250ZXh0YCBtZXRob2QuICBGb3IgZXhhbXBsZSwgZm9yIGEgOmNsYXNzOmBDb250ZXh0YAorICAgaW5zdGFuY2UgYGBDYGAgYW5kIDpjbGFzczpgRGVjaW1hbGAgaW5zdGFuY2UgYGB4YGAsIGBgQy5leHAoeClgYCBpcworICAgZXF1aXZhbGVudCB0byBgYHguZXhwKGNvbnRleHQ9QylgYC4gIEVhY2ggOmNsYXNzOmBDb250ZXh0YCBtZXRob2QgYWNjZXB0cyBhCisgICBQeXRob24gaW50ZWdlciAoYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBpbnRgIG9yIDpjbGFzczpgbG9uZ2ApIGFueXdoZXJlIHRoYXQgYQorICAgRGVjaW1hbCBpbnN0YW5jZSBpcyBhY2NlcHRlZC4KIAogCiAgICAuLiBtZXRob2Q6OiBjbGVhcl9mbGFncygpCkBAIC0xMDE2LDYgKzEwNzQsMjYgQEAKICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZywgbm8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzCiAgICAgICBwZXJtaXR0ZWQuCiAKKyAgIC4uIG1ldGhvZDo6IGNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoZikKKworICAgICAgQ3JlYXRlcyBhIG5ldyBEZWNpbWFsIGluc3RhbmNlIGZyb20gYSBmbG9hdCAqZiogYnV0IHJvdW5kaW5nIHVzaW5nICpzZWxmKgorICAgICAgYXMgdGhlIGNvbnRleHQuICBVbmxpa2UgdGhlIDptZXRoOmBEZWNpbWFsLmZyb21fZmxvYXRgIGNsYXNzIG1ldGhvZCwKKyAgICAgIHRoZSBjb250ZXh0IHByZWNpc2lvbiwgcm91bmRpbmcgbWV0aG9kLCBmbGFncywgYW5kIHRyYXBzIGFyZSBhcHBsaWVkIHRvCisgICAgICB0aGUgY29udmVyc2lvbi4KKworICAgICAgLi4gZG9jdGVzdDo6CisKKyAgICAgICAgID4+PiBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pCisgICAgICAgICA+Pj4gY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpCisgICAgICAgICBEZWNpbWFsKCczLjE0MTUnKQorICAgICAgICAgPj4+IGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgdHJhcHM9W0luZXhhY3RdKQorICAgICAgICAgPj4+IGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChtYXRoLnBpKQorICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgICAgIC4uLgorICAgICAgICAgSW5leGFjdDogTm9uZQorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogICAgLi4gbWV0aG9kOjogRXRpbnkoKQogCiAgICAgICBSZXR1cm5zIGEgdmFsdWUgZXF1YWwgdG8gYGBFbWluIC0gcHJlYyArIDFgYCB3aGljaCBpcyB0aGUgbWluaW11bSBleHBvbmVudApAQCAtMTg3Miw0OSArMTk1MCwyOSBAQAogb3JpZ2luYWwncyB0d28tcGxhY2Ugc2lnbmlmaWNhbmNlLgogCiBJZiBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBjYXJlIGFib3V0IHRyYWNraW5nIHNpZ25pZmljYW5jZSwgaXQgaXMgZWFzeSB0bwotcmVtb3ZlIHRoZSBleHBvbmVudCBhbmQgdHJhaWxpbmcgemVyb2VzLCBsb3Npbmcgc2lnbmlmaWNhbmNlLCBidXQga2VlcGluZyB0aGUKLXZhbHVlIHVuY2hhbmdlZDoKK3JlbW92ZSB0aGUgZXhwb25lbnQgYW5kIHRyYWlsaW5nIHplcm9zLCBsb3Npbmcgc2lnbmlmaWNhbmNlLCBidXQga2VlcGluZyB0aGUKK3ZhbHVlIHVuY2hhbmdlZDo6CiAKLSAgICA+Pj4gZGVmIHJlbW92ZV9leHBvbmVudChkKToKLSAgICAuLi4gICAgIHJldHVybiBkLnF1YW50aXplKERlY2ltYWwoMSkpIGlmIGQgPT0gZC50b19pbnRlZ3JhbCgpIGVsc2UgZC5ub3JtYWxpemUoKQorICAgIGRlZiByZW1vdmVfZXhwb25lbnQoZCk6CisgICAgICAgICcnJ1JlbW92ZSBleHBvbmVudCBhbmQgdHJhaWxpbmcgemVyb3MuCiAKLSAgICA+Pj4gcmVtb3ZlX2V4cG9uZW50KERlY2ltYWwoJzVFKzMnKSkKLSAgICBEZWNpbWFsKCc1MDAwJykKKyAgICAgICAgPj4+IHJlbW92ZV9leHBvbmVudChEZWNpbWFsKCc1RSszJykpCisgICAgICAgIERlY2ltYWwoJzUwMDAnKQorCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gZC5xdWFudGl6ZShEZWNpbWFsKDEpKSBpZiBkID09IGQudG9faW50ZWdyYWwoKSBlbHNlIGQubm9ybWFsaXplKCkKIAogUS4gSXMgdGhlcmUgYSB3YXkgdG8gY29udmVydCBhIHJlZ3VsYXIgZmxvYXQgdG8gYSA6Y2xhc3M6YERlY2ltYWxgPwogCi1BLiBZZXMsIGFsbCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBjYW4gYmUgZXhhY3RseSBleHByZXNzZWQgYXMgYQotRGVjaW1hbC4gIEFuIGV4YWN0IGNvbnZlcnNpb24gbWF5IHRha2UgbW9yZSBwcmVjaXNpb24gdGhhbiBpbnR1aXRpb24gd291bGQKLXN1Z2dlc3QsIHNvIHdlIHRyYXAgOmNvbnN0OmBJbmV4YWN0YCB0byBzaWduYWwgYSBuZWVkIGZvciBtb3JlIHByZWNpc2lvbjoKLQotLi4gdGVzdGNvZGU6OgotCi0gICAgZGVmIGZsb2F0X3RvX2RlY2ltYWwoZik6Ci0gICAgICAgICJDb252ZXJ0IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGEgRGVjaW1hbCB3aXRoIG5vIGxvc3Mgb2YgaW5mb3JtYXRpb24iCi0gICAgICAgIG4sIGQgPSBmLmFzX2ludGVnZXJfcmF0aW8oKQotICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yID0gRGVjaW1hbChuKSwgRGVjaW1hbChkKQotICAgICAgICBjdHggPSBDb250ZXh0KHByZWM9NjApCi0gICAgICAgIHJlc3VsdCA9IGN0eC5kaXZpZGUobnVtZXJhdG9yLCBkZW5vbWluYXRvcikKLSAgICAgICAgd2hpbGUgY3R4LmZsYWdzW0luZXhhY3RdOgotICAgICAgICAgICAgY3R4LmZsYWdzW0luZXhhY3RdID0gRmFsc2UKLSAgICAgICAgICAgIGN0eC5wcmVjICo9IDIKLSAgICAgICAgICAgIHJlc3VsdCA9IGN0eC5kaXZpZGUobnVtZXJhdG9yLCBkZW5vbWluYXRvcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorQS4gWWVzLCBhbnkgYmluYXJ5IGZsb2F0aW5nIHBvaW50IG51bWJlciBjYW4gYmUgZXhhY3RseSBleHByZXNzZWQgYXMgYQorRGVjaW1hbCB0aG91Z2ggYW4gZXhhY3QgY29udmVyc2lvbiBtYXkgdGFrZSBtb3JlIHByZWNpc2lvbiB0aGFuIGludHVpdGlvbiB3b3VsZAorc3VnZ2VzdDoKIAogLi4gZG9jdGVzdDo6CiAKLSAgICA+Pj4gZmxvYXRfdG9fZGVjaW1hbChtYXRoLnBpKQorICAgID4+PiBEZWNpbWFsKG1hdGgucGkpCiAgICAgRGVjaW1hbCgnMy4xNDE1OTI2NTM1ODk3OTMxMTU5OTc5NjM0Njg1NDQxODUxNjE1OTA1NzYxNzE4NzUnKQogCi1RLiBXaHkgaXNuJ3QgdGhlIDpmdW5jOmBmbG9hdF90b19kZWNpbWFsYCByb3V0aW5lIGluY2x1ZGVkIGluIHRoZSBtb2R1bGU/Ci0KLUEuIFRoZXJlIGlzIHNvbWUgcXVlc3Rpb24gYWJvdXQgd2hldGhlciBpdCBpcyBhZHZpc2FibGUgdG8gbWl4IGJpbmFyeSBhbmQKLWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICBBbHNvLCBpdHMgdXNlIHJlcXVpcmVzIHNvbWUgY2FyZSB0byBhdm9pZCB0aGUKLXJlcHJlc2VudGF0aW9uIGlzc3VlcyBhc3NvY2lhdGVkIHdpdGggYmluYXJ5IGZsb2F0aW5nIHBvaW50OgotCi0gICA+Pj4gZmxvYXRfdG9fZGVjaW1hbCgxLjEpCi0gICBEZWNpbWFsKCcxLjEwMDAwMDAwMDAwMDAwMDA4ODgxNzg0MTk3MDAxMjUyMzIzMzg5MDUzMzQ0NzI2NTYyNScpCi0KIFEuIFdpdGhpbiBhIGNvbXBsZXggY2FsY3VsYXRpb24sIGhvdyBjYW4gSSBtYWtlIHN1cmUgdGhhdCBJIGhhdmVuJ3QgZ290dGVuIGEKIHNwdXJpb3VzIHJlc3VsdCBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcmVjaXNpb24gb3Igcm91bmRpbmcgYW5vbWFsaWVzLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdCBiL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CmluZGV4IDljZDc2ZTMuLjIyNWI0ODYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CkBAIC0zNywxMSArMzcsMTYgQEAKICAgIGNvbXBsaWNhdGVkIHdheSBvbiBob3cgbWFueSBlbGVtZW50cyB0aGUgc2VxdWVuY2VzIGhhdmUgaW4gY29tbW9uOyBiZXN0IGNhc2UKICAgIHRpbWUgaXMgbGluZWFyLgogCi0gICAqKkhldXJpc3RpYzoqKiBUbyBzcGVlZC11cCBtYXRjaGluZywgaXRlbXMgdGhhdCBhcHBlYXIgbW9yZSB0aGFuIDElIG9mIHRoZQotICAgdGltZSBpbiBzZXF1ZW5jZXMgb2YgYXQgbGVhc3QgMjAwIGl0ZW1zIGFyZSB0cmVhdGVkIGFzIGp1bmsuICBUaGlzIGhhcyB0aGUKLSAgIHVuZm9ydHVuYXRlIHNpZGUtZWZmZWN0IG9mIGdpdmluZyBiYWQgcmVzdWx0cyBmb3Igc2VxdWVuY2VzIGNvbnN0cnVjdGVkIGZyb20KLSAgIGEgc21hbGwgc2V0IG9mIGl0ZW1zLiAgQW4gb3B0aW9uIHRvIHR1cm4gb2ZmIHRoZSBoZXVyaXN0aWMgd2lsbCBiZSBhZGRlZCB0byBhCi0gICBmdXR1cmUgdmVyc2lvbi4KKyAgICoqQXV0b21hdGljIGp1bmsgaGV1cmlzdGljOioqIDpjbGFzczpgU2VxdWVuY2VNYXRjaGVyYCBzdXBwb3J0cyBhIGhldXJpc3RpYyB0aGF0CisgICBhdXRvbWF0aWNhbGx5IHRyZWF0cyBjZXJ0YWluIHNlcXVlbmNlIGl0ZW1zIGFzIGp1bmsuIFRoZSBoZXVyaXN0aWMgY291bnRzIGhvdyBtYW55CisgICB0aW1lcyBlYWNoIGluZGl2aWR1YWwgaXRlbSBhcHBlYXJzIGluIHRoZSBzZXF1ZW5jZS4gSWYgYW4gaXRlbSdzIGR1cGxpY2F0ZXMgKGFmdGVyCisgICB0aGUgZmlyc3Qgb25lKSBhY2NvdW50IGZvciBtb3JlIHRoYW4gMSUgb2YgdGhlIHNlcXVlbmNlIGFuZCB0aGUgc2VxdWVuY2UgaXMgYXQgbGVhc3QKKyAgIDIwMCBpdGVtcyBsb25nLCB0aGlzIGl0ZW0gaXMgbWFya2VkIGFzICJwb3B1bGFyIiBhbmQgaXMgdHJlYXRlZCBhcyBqdW5rIGZvcgorICAgdGhlIHB1cnBvc2Ugb2Ygc2VxdWVuY2UgbWF0Y2hpbmcuIFRoaXMgaGV1cmlzdGljIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcKKyAgIHRoZSBgYGF1dG9qdW5rYGAgYXJndW1lbnQgdG8gYGBGYWxzZWBgIHdoZW4gY3JlYXRpbmcgdGhlIDpjbGFzczpgU2VxdWVuY2VNYXRjaGVyYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43LjEKKyAgICAgIFRoZSAqYXV0b2p1bmsqIHBhcmFtZXRlci4KIAogLi4gY2xhc3M6OiBEaWZmZXIKIApAQCAtMTUxLDggKzE1Niw4IEBACiAKICAgIFRoZSBjb250ZXh0IGRpZmYgZm9ybWF0IG5vcm1hbGx5IGhhcyBhIGhlYWRlciBmb3IgZmlsZW5hbWVzIGFuZCBtb2RpZmljYXRpb24KICAgIHRpbWVzLiAgQW55IG9yIGFsbCBvZiB0aGVzZSBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIHN0cmluZ3MgZm9yICpmcm9tZmlsZSosCi0gICAqdG9maWxlKiwgKmZyb21maWxlZGF0ZSosIGFuZCAqdG9maWxlZGF0ZSouIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5Ci0gICBleHByZXNzZWQgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSA6ZnVuYzpgdGltZS5jdGltZWAuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKKyAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5CisgICBleHByZXNzZWQgaW4gdGhlIElTTyA4NjAxIGZvcm1hdC4gSWYgbm90IHNwZWNpZmllZCwgdGhlCiAgICBzdHJpbmdzIGRlZmF1bHQgdG8gYmxhbmtzLgogCiAgICAgICA+Pj4gczEgPSBbJ2JhY29uXG4nLCAnZWdnc1xuJywgJ2hhbVxuJywgJ2d1aWRvXG4nXQpAQCAtMjg2LDggKzI5MSw4IEBACiAKICAgIFRoZSBjb250ZXh0IGRpZmYgZm9ybWF0IG5vcm1hbGx5IGhhcyBhIGhlYWRlciBmb3IgZmlsZW5hbWVzIGFuZCBtb2RpZmljYXRpb24KICAgIHRpbWVzLiAgQW55IG9yIGFsbCBvZiB0aGVzZSBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIHN0cmluZ3MgZm9yICpmcm9tZmlsZSosCi0gICAqdG9maWxlKiwgKmZyb21maWxlZGF0ZSosIGFuZCAqdG9maWxlZGF0ZSouIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5Ci0gICBleHByZXNzZWQgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSA6ZnVuYzpgdGltZS5jdGltZWAuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKKyAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5CisgICBleHByZXNzZWQgaW4gdGhlIElTTyA4NjAxIGZvcm1hdC4gSWYgbm90IHNwZWNpZmllZCwgdGhlCiAgICBzdHJpbmdzIGRlZmF1bHQgdG8gYmxhbmtzLgogCiAgICAgICA+Pj4gczEgPSBbJ2JhY29uXG4nLCAnZWdnc1xuJywgJ2hhbVxuJywgJ2d1aWRvXG4nXQpAQCAtMzM5LDcgKzM0NCw3IEBACiBUaGUgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIGNsYXNzIGhhcyB0aGlzIGNvbnN0cnVjdG9yOgogCiAKLS4uIGNsYXNzOjogU2VxdWVuY2VNYXRjaGVyKFtpc2p1bmtbLCBhWywgYl1dXSkKKy4uIGNsYXNzOjogU2VxdWVuY2VNYXRjaGVyKFtpc2p1bmtbLCBhWywgYlssIGF1dG9qdW5rPVRydWVdXV1dKQogCiAgICBPcHRpb25hbCBhcmd1bWVudCAqaXNqdW5rKiBtdXN0IGJlIGBgTm9uZWBgICh0aGUgZGVmYXVsdCkgb3IgYSBvbmUtYXJndW1lbnQKICAgIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzZXF1ZW5jZSBlbGVtZW50IGFuZCByZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlCkBAIC0zNTUsOCArMzYwLDEzIEBACiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnRzICphKiBhbmQgKmIqIGFyZSBzZXF1ZW5jZXMgdG8gYmUgY29tcGFyZWQ7IGJvdGggZGVmYXVsdCB0bwogICAgZW1wdHkgc3RyaW5ncy4gIFRoZSBlbGVtZW50cyBvZiBib3RoIHNlcXVlbmNlcyBtdXN0IGJlIDp0ZXJtOmBoYXNoYWJsZWAuCiAKLSAgIDpjbGFzczpgU2VxdWVuY2VNYXRjaGVyYCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICphdXRvanVuayogY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIGp1bmsKKyAgIGhldXJpc3RpYy4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMi43LjEKKyAgICAgIFRoZSAqYXV0b2p1bmsqIHBhcmFtZXRlci4KKworICAgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgIC4uIG1ldGhvZDo6IHNldF9zZXFzKGEsIGIpCiAKQEAgLTUxNywxNiArNTI3LDExIEBACiAKICAgICAgIFJldHVybiBhbiB1cHBlciBib3VuZCBvbiA6bWV0aDpgcmF0aW9gIHJlbGF0aXZlbHkgcXVpY2tseS4KIAotICAgICAgVGhpcyBpc24ndCBkZWZpbmVkIGJleW9uZCB0aGF0IGl0IGlzIGFuIHVwcGVyIGJvdW5kIG9uIDptZXRoOmByYXRpb2AsIGFuZAotICAgICAgaXMgZmFzdGVyIHRvIGNvbXB1dGUuCi0KIAogICAgLi4gbWV0aG9kOjogcmVhbF9xdWlja19yYXRpbygpCiAKICAgICAgIFJldHVybiBhbiB1cHBlciBib3VuZCBvbiA6bWV0aDpgcmF0aW9gIHZlcnkgcXVpY2tseS4KIAotICAgICAgVGhpcyBpc24ndCBkZWZpbmVkIGJleW9uZCB0aGF0IGl0IGlzIGFuIHVwcGVyIGJvdW5kIG9uIDptZXRoOmByYXRpb2AsIGFuZAotICAgICAgaXMgZmFzdGVyIHRvIGNvbXB1dGUgdGhhbiBlaXRoZXIgOm1ldGg6YHJhdGlvYCBvciA6bWV0aDpgcXVpY2tfcmF0aW9gLgogCiBUaGUgdGhyZWUgbWV0aG9kcyB0aGF0IHJldHVybiB0aGUgcmF0aW8gb2YgbWF0Y2hpbmcgdG8gdG90YWwgY2hhcmFjdGVycyBjYW4gZ2l2ZQogZGlmZmVyZW50IHJlc3VsdHMgZHVlIHRvIGRpZmZlcmluZyBsZXZlbHMgb2YgYXBwcm94aW1hdGlvbiwgYWx0aG91Z2gKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpcy5yc3QgYi9Eb2MvbGlicmFyeS9kaXMucnN0CmluZGV4IGUzZjMwY2IuLjlhZGRmZTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Rpcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlzLnJzdApAQCAtMTEsNiArMTEsMTEgQEAKIGlucHV0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUgOmZpbGU6YEluY2x1ZGUvb3Bjb2RlLmhgIGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlcgogYW5kIHRoZSBpbnRlcnByZXRlci4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgZGlzIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9kaXMucHk/dmlldz1tYXJrdXA+YF8KKwogLi4gaW1wbC1kZXRhaWw6OgogCiAgICBCeXRlY29kZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIhICBObwpAQCAtNzAsOCArNzUsMjEgQEAKIAogLi4gZnVuY3Rpb246OiBkaXNjbyhjb2RlWywgbGFzdGldKQogCi0gICBBIHN5bm9ueW0gZm9yIGRpc2Fzc2VtYmxlLiAgSXQgaXMgbW9yZSBjb252ZW5pZW50IHRvIHR5cGUsIGFuZCBrZXB0IGZvcgotICAgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgUHl0aG9uIHJlbGVhc2VzLgorICAgQSBzeW5vbnltIGZvciA6ZnVuYzpgZGlzYXNzZW1ibGVgLiAgSXQgaXMgbW9yZSBjb252ZW5pZW50IHRvIHR5cGUsIGFuZCBrZXB0CisgICBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgUHl0aG9uIHJlbGVhc2VzLgorCisKKy4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKKworICAgVGhpcyBnZW5lcmF0b3IgZnVuY3Rpb24gdXNlcyB0aGUgYGBjb19maXJzdGxpbmVub2BgIGFuZCBgYGNvX2xub3RhYmBgCisgICBhdHRyaWJ1dGVzIG9mIHRoZSBjb2RlIG9iamVjdCAqY29kZSogdG8gZmluZCB0aGUgb2Zmc2V0cyB3aGljaCBhcmUgc3RhcnRzIG9mCisgICBsaW5lcyBpbiB0aGUgc291cmNlIGNvZGUuICBUaGV5IGFyZSBnZW5lcmF0ZWQgYXMgYGAob2Zmc2V0LCBsaW5lbm8pYGAgcGFpcnMuCisKKworLi4gZnVuY3Rpb246OiBmaW5kbGFiZWxzKGNvZGUpCisKKyAgIERldGVjdCBhbGwgb2Zmc2V0cyBpbiB0aGUgY29kZSBvYmplY3QgKmNvZGUqIHdoaWNoIGFyZSBqdW1wIHRhcmdldHMsIGFuZAorICAgcmV0dXJuIGEgbGlzdCBvZiB0aGVzZSBvZmZzZXRzLgogCiAKIC4uIGRhdGE6OiBvcG5hbWUKQEAgLTgxLDcgKzk5LDcgQEAKIAogLi4gZGF0YTo6IG9wbWFwCiAKLSAgIERpY3Rpb25hcnkgbWFwcGluZyBieXRlY29kZXMgdG8gb3BlcmF0aW9uIG5hbWVzLgorICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCiAKIAogLi4gZGF0YTo6IGNtcF9vcApAQCAtNDY5LDkgKzQ4NywxMSBAQAogICAgYWRkcmVzcyB0byBqdW1wIHRvICh3aGljaCBzaG91bGQgYmUgYSBgYEZPUl9JVEVSYGAgaW5zdHJ1Y3Rpb24pLgogCiAKLS4uIG9wY29kZTo6IExJU1RfQVBQRU5EICgpCisuLiBvcGNvZGU6OiBMSVNUX0FQUEVORCAoaSkKIAotICAgQ2FsbHMgYGBsaXN0LmFwcGVuZChUT1MxLCBUT1MpYGAuICBVc2VkIHRvIGltcGxlbWVudCBsaXN0IGNvbXByZWhlbnNpb25zLgorICAgQ2FsbHMgYGBsaXN0LmFwcGVuZChUT1NbLWldLCBUT1MpYGAuICBVc2VkIHRvIGltcGxlbWVudCBsaXN0IGNvbXByZWhlbnNpb25zLgorICAgV2hpbGUgdGhlIGFwcGVuZGVkIHZhbHVlIGlzIHBvcHBlZCBvZmYsIHRoZSBsaXN0IG9iamVjdCByZW1haW5zIG9uIHRoZQorICAgc3RhY2sgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4KIAogCiAuLiBvcGNvZGU6OiBMT0FEX0xPQ0FMUyAoKQpAQCAtNTIzLDYgKzU0MywxOCBAQAogICAgdGhlIG5hbWVzIG9mIHRoZSBiYXNlIGNsYXNzZXMsIGFuZCBUT1MyIHRoZSBjbGFzcyBuYW1lLgogCiAKKy4uIG9wY29kZTo6IFNFVFVQX1dJVEggKGRlbHRhKQorCisgICBUaGlzIG9wY29kZSBwZXJmb3JtcyBzZXZlcmFsIG9wZXJhdGlvbnMgYmVmb3JlIGEgd2l0aCBibG9jayBzdGFydHMuICBGaXJzdCwKKyAgIGl0IGxvYWRzIDptZXRoOmB+b2JqZWN0Ll9fZXhpdF9fYCBmcm9tIHRoZSBjb250ZXh0IG1hbmFnZXIgYW5kIHB1c2hlcyBpdCBvbnRvCisgICB0aGUgc3RhY2sgZm9yIGxhdGVyIHVzZSBieSA6b3Bjb2RlOmBXSVRIX0NMRUFOVVBgLiAgVGhlbiwKKyAgIDptZXRoOmB+b2JqZWN0Ll9fZW50ZXJfX2AgaXMgY2FsbGVkLCBhbmQgYSBmaW5hbGx5IGJsb2NrIHBvaW50aW5nIHRvICpkZWx0YSoKKyAgIGlzIHB1c2hlZC4gIEZpbmFsbHksIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZW50ZXIgbWV0aG9kIGlzIHB1c2hlZCBvbnRvCisgICB0aGUgc3RhY2suICBUaGUgbmV4dCBvcGNvZGUgd2lsbCBlaXRoZXIgaWdub3JlIGl0ICg6b3Bjb2RlOmBQT1BfVE9QYCksIG9yCisgICBzdG9yZSBpdCBpbiAoYSkgdmFyaWFibGUocykgKDpvcGNvZGU6YFNUT1JFX0ZBU1RgLCA6b3Bjb2RlOmBTVE9SRV9OQU1FYCwgb3IKKyAgIDpvcGNvZGU6YFVOUEFDS19TRVFVRU5DRWApLgorCisKIC4uIG9wY29kZTo6IFdJVEhfQ0xFQU5VUCAoKQogCiAgICBDbGVhbnMgdXAgdGhlIHN0YWNrIHdoZW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGJsb2NrIGV4aXRzLiAgT24gdG9wIG9mCkBAIC02NTUsMTYgKzY4NywyNiBAQAogICAgSW5jcmVtZW50cyBieXRlY29kZSBjb3VudGVyIGJ5ICpkZWx0YSouCiAKIAotLi4gb3Bjb2RlOjogSlVNUF9JRl9UUlVFIChkZWx0YSkKKy4uIG9wY29kZTo6IFBPUF9KVU1QX0lGX1RSVUUgKHRhcmdldCkKIAotICAgSWYgVE9TIGlzIHRydWUsIGluY3JlbWVudCB0aGUgYnl0ZWNvZGUgY291bnRlciBieSAqZGVsdGEqLiAgVE9TIGlzIGxlZnQgb24gdGhlCi0gICBzdGFjay4KKyAgIElmIFRPUyBpcyB0cnVlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqLiAgVE9TIGlzIHBvcHBlZC4KIAogCi0uLiBvcGNvZGU6OiBKVU1QX0lGX0ZBTFNFIChkZWx0YSkKKy4uIG9wY29kZTo6IFBPUF9KVU1QX0lGX0ZBTFNFICh0YXJnZXQpCiAKLSAgIElmIFRPUyBpcyBmYWxzZSwgaW5jcmVtZW50IHRoZSBieXRlY29kZSBjb3VudGVyIGJ5ICpkZWx0YSouICBUT1MgaXMgbm90Ci0gICBjaGFuZ2VkLgorICAgSWYgVE9TIGlzIGZhbHNlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqLiAgVE9TIGlzIHBvcHBlZC4KKworCisuLiBvcGNvZGU6OiBKVU1QX0lGX1RSVUVfT1JfUE9QICh0YXJnZXQpCisKKyAgIElmIFRPUyBpcyB0cnVlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqIGFuZCBsZWF2ZXMgVE9TCisgICBvbiB0aGUgc3RhY2suICBPdGhlcndpc2UgKFRPUyBpcyBmYWxzZSksIFRPUyBpcyBwb3BwZWQuCisKKworLi4gb3Bjb2RlOjogSlVNUF9JRl9GQUxTRV9PUl9QT1AgKHRhcmdldCkKKworICAgSWYgVE9TIGlzIGZhbHNlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqIGFuZCBsZWF2ZXMKKyAgIFRPUyBvbiB0aGUgc3RhY2suICBPdGhlcndpc2UgKFRPUyBpcyB0cnVlKSwgVE9TIGlzIHBvcHBlZC4KIAogCiAuLiBvcGNvZGU6OiBKVU1QX0FCU09MVVRFICh0YXJnZXQpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CmluZGV4IDFhNDNhMzMuLjg2ODA0Y2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CkBAIC05NSw3ICs5NSw3IEBACiAgICAkCiAKIFRoZXJlJ3Mgbm8gb3V0cHV0ISAgVGhhdCdzIG5vcm1hbCwgYW5kIGl0IG1lYW5zIGFsbCB0aGUgZXhhbXBsZXMgd29ya2VkLiAgUGFzcwotOm9wdGlvbjpgLXZgIHRvIHRoZSBzY3JpcHQsIGFuZCA6bW9kOmBkb2N0ZXN0YCBwcmludHMgYSBkZXRhaWxlZCBsb2cgb2Ygd2hhdAorYGAtdmBgIHRvIHRoZSBzY3JpcHQsIGFuZCA6bW9kOmBkb2N0ZXN0YCBwcmludHMgYSBkZXRhaWxlZCBsb2cgb2Ygd2hhdAogaXQncyB0cnlpbmcsIGFuZCBwcmludHMgYSBzdW1tYXJ5IGF0IHRoZSBlbmQ6OgogCiAgICAkIHB5dGhvbiBleGFtcGxlLnB5IC12CkBAIC0xNjMsNyArMTYzLDcgQEAKIGZpbmFsIGxpbmUgb2Ygb3V0cHV0IGlzIGBgKioqVGVzdCBGYWlsZWQqKiogTiBmYWlsdXJlcy5gYCwgd2hlcmUgKk4qIGlzIHRoZQogbnVtYmVyIG9mIGV4YW1wbGVzIHRoYXQgZmFpbGVkLgogCi1SdW4gaXQgd2l0aCB0aGUgOm9wdGlvbjpgLXZgIHN3aXRjaCBpbnN0ZWFkOjoKK1J1biBpdCB3aXRoIHRoZSBgYC12YGAgc3dpdGNoIGluc3RlYWQ6OgogCiAgICBweXRob24gTS5weSAtdgogCkBAIC0xNzIsNyArMTcyLDcgQEAKIAogWW91IGNhbiBmb3JjZSB2ZXJib3NlIG1vZGUgYnkgcGFzc2luZyBgYHZlcmJvc2U9VHJ1ZWBgIHRvIDpmdW5jOmB0ZXN0bW9kYCwgb3IKIHByb2hpYml0IGl0IGJ5IHBhc3NpbmcgYGB2ZXJib3NlPUZhbHNlYGAuICBJbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMsCi1gYHN5cy5hcmd2YGAgaXMgbm90IGV4YW1pbmVkIGJ5IDpmdW5jOmB0ZXN0bW9kYCAoc28gcGFzc2luZyA6b3B0aW9uOmAtdmAgb3Igbm90CitgYHN5cy5hcmd2YGAgaXMgbm90IGV4YW1pbmVkIGJ5IDpmdW5jOmB0ZXN0bW9kYCAoc28gcGFzc2luZyBgYC12YGAgb3Igbm90CiBoYXMgbm8gZWZmZWN0KS4KIAogU2luY2UgUHl0aG9uIDIuNiwgdGhlcmUgaXMgYWxzbyBhIGNvbW1hbmQgbGluZSBzaG9ydGN1dCBmb3IgcnVubmluZwpAQCAtMjQyLDcgKzI0Miw3IEBACiB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlbGwgaXQgdG8gbG9vayBmb3IgZmlsZXMgaW4gb3RoZXIgbG9jYXRpb25zLgogCiBMaWtlIDpmdW5jOmB0ZXN0bW9kYCwgOmZ1bmM6YHRlc3RmaWxlYCdzIHZlcmJvc2l0eSBjYW4gYmUgc2V0IHdpdGggdGhlCi06b3B0aW9uOmAtdmAgY29tbWFuZC1saW5lIHN3aXRjaCBvciB3aXRoIHRoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50CitgYC12YGAgY29tbWFuZC1saW5lIHN3aXRjaCBvciB3aXRoIHRoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50CiAqdmVyYm9zZSouCiAKIFNpbmNlIFB5dGhvbiAyLjYsIHRoZXJlIGlzIGFsc28gYSBjb21tYW5kIGxpbmUgc2hvcnRjdXQgZm9yIHJ1bm5pbmcKQEAgLTMzMSw3ICszMzEsNyBAQAogICBibGFuayBsaW5lLCBwdXQgYGA8QkxBTktMSU5FPmBgIGluIHlvdXIgZG9jdGVzdCBleGFtcGxlIGVhY2ggcGxhY2UgYSBibGFuayBsaW5lCiAgIGlzIGV4cGVjdGVkLgogCi0gIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CisgIC4uIHZlcnNpb25hZGRlZDo6IDIuNAogICAgICBgYDxCTEFOS0xJTkU+YGAgd2FzIGFkZGVkOyB0aGVyZSB3YXMgbm8gd2F5IHRvIHVzZSBleHBlY3RlZCBvdXRwdXQgY29udGFpbmluZwogICAgICBlbXB0eSBsaW5lcyBpbiBwcmV2aW91cyB2ZXJzaW9ucy4KIApAQCAtNDQ2LDYgKzQ0Niw5IEBACiBUaGUgbGFzdCB0aHJlZSBsaW5lcyAoc3RhcnRpbmcgd2l0aCA6ZXhjOmBWYWx1ZUVycm9yYCkgYXJlIGNvbXBhcmVkIGFnYWluc3QgdGhlCiBleGNlcHRpb24ncyB0eXBlIGFuZCBkZXRhaWwsIGFuZCB0aGUgcmVzdCBhcmUgaWdub3JlZC4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKKyAgIFByZXZpb3VzIHZlcnNpb25zIHdlcmUgdW5hYmxlIHRvIGhhbmRsZSBtdWx0aS1saW5lIGV4Y2VwdGlvbiBkZXRhaWxzLgorCiBCZXN0IHByYWN0aWNlIGlzIHRvIG9taXQgdGhlIHRyYWNlYmFjayBzdGFjaywgdW5sZXNzIGl0IGFkZHMgc2lnbmlmaWNhbnQKIGRvY3VtZW50YXRpb24gdmFsdWUgdG8gdGhlIGV4YW1wbGUuICBTbyB0aGUgbGFzdCBleGFtcGxlIGlzIHByb2JhYmx5IGJldHRlciBhczo6CiAKQEAgLTQ3Nyw4ICs0ODAsOSBAQAogICB3aXRoIGFuIGFscGhhbnVtZXJpYyBpcyB0YWtlbiB0byBiZSB0aGUgc3RhcnQgb2YgdGhlIGV4Y2VwdGlvbiBkZXRhaWwuICBPZgogICBjb3Vyc2UgdGhpcyBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IgZ2VudWluZSB0cmFjZWJhY2tzLgogCi0qIFdoZW4gdGhlIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGRvY3Rlc3Qgb3B0aW9uIGlzIGlzIHNwZWNpZmllZCwKLSAgZXZlcnl0aGluZyBmb2xsb3dpbmcgdGhlIGxlZnRtb3N0IGNvbG9uIGlzIGlnbm9yZWQuCisqIFdoZW4gdGhlIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGRvY3Rlc3Qgb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgZXZlcnl0aGluZyBmb2xsb3dpbmcgdGhlIGxlZnRtb3N0IGNvbG9uIGFuZCBhbnkgbW9kdWxlIGluZm9ybWF0aW9uIGluIHRoZQorICBleGNlcHRpb24gbmFtZSBpcyBpZ25vcmVkLgogCiAqIFRoZSBpbnRlcmFjdGl2ZSBzaGVsbCBvbWl0cyB0aGUgdHJhY2ViYWNrIGhlYWRlciBsaW5lIGZvciBzb21lCiAgIDpleGM6YFN5bnRheEVycm9yYFwgcy4gIEJ1dCBkb2N0ZXN0IHVzZXMgdGhlIHRyYWNlYmFjayBoZWFkZXIgbGluZSB0bwpAQCAtNTA2LDEwICs1MTAsNiBAQAogICAgICAgICAgXgogICAgICBTeW50YXhFcnJvcjogaW52YWxpZCBzeW50YXgKIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjQKLSAgIFRoZSBhYmlsaXR5IHRvIGhhbmRsZSBhIG11bHRpLWxpbmUgZXhjZXB0aW9uIGRldGFpbCwgYW5kIHRoZQotICAgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAgZG9jdGVzdCBvcHRpb24sIHdlcmUgYWRkZWQuCi0KIAogLi4gX2RvY3Rlc3Qtb3B0aW9uczoKIApAQCAtNTcyLDIwICs1NzIsMzggQEAKICAgIGV4Y2VwdGlvbiByYWlzZWQgaXMgYGBWYWx1ZUVycm9yOiAzKjE0YGAsIGJ1dCB3aWxsIGZhaWwsIGUuZy4sIGlmCiAgICA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KIAotICAgTm90ZSB0aGF0IGEgc2ltaWxhciBlZmZlY3QgY2FuIGJlIG9idGFpbmVkIHVzaW5nIDpjb25zdDpgRUxMSVBTSVNgLCBhbmQKLSAgIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIG1heSBnbyBhd2F5IHdoZW4gUHl0aG9uIHJlbGVhc2VzIHByaW9yIHRvIDIuNAotICAgYmVjb21lIHVuaW50ZXJlc3RpbmcuICBVbnRpbCB0aGVuLCA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBpcyB0aGUgb25seQotICAgY2xlYXIgd2F5IHRvIHdyaXRlIGEgZG9jdGVzdCB0aGF0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXhjZXB0aW9uIGRldGFpbCB5ZXQKLSAgIGNvbnRpbnVlcyB0byBwYXNzIHVuZGVyIFB5dGhvbiByZWxlYXNlcyBwcmlvciB0byAyLjQgKGRvY3Rlc3QgZGlyZWN0aXZlcyBhcHBlYXIKLSAgIHRvIGJlIGNvbW1lbnRzIHRvIHRoZW0pLiAgRm9yIGV4YW1wbGUsIDo6CisgICBJdCB3aWxsIGFsc28gaWdub3JlIHRoZSBtb2R1bGUgbmFtZSB1c2VkIGluIFB5dGhvbiAzIGRvY3Rlc3QgcmVwb3J0cy4gSGVuY2UKKyAgIGJvdGggdGhlc2UgdmFyaWF0aW9ucyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0ZXN0IGlzIHJ1biB1bmRlcgorICAgUHl0aG9uIDIuNyBvciBQeXRob24gMy4yIChvciBsYXRlciB2ZXJzaW9ucyk6CisKKyAgICAgID4+PiByYWlzZSBDdXN0b21FcnJvcignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEN1c3RvbUVycm9yOiBtZXNzYWdlCisKKyAgICAgID4+PiByYWlzZSBDdXN0b21FcnJvcignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIG15X21vZHVsZS5DdXN0b21FcnJvcjogbWVzc2FnZQorCisgICBOb3RlIHRoYXQgOmNvbnN0OmBFTExJUFNJU2AgY2FuIGFsc28gYmUgdXNlZCB0byBpZ25vcmUgdGhlCisgICBkZXRhaWxzIG9mIHRoZSBleGNlcHRpb24gbWVzc2FnZSwgYnV0IHN1Y2ggYSB0ZXN0IG1heSBzdGlsbCBmYWlsIGJhc2VkCisgICBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbW9kdWxlIGRldGFpbHMgYXJlIHByaW50ZWQgYXMgcGFydCBvZiB0aGUKKyAgIGV4Y2VwdGlvbiBuYW1lLiBVc2luZyA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBhbmQgdGhlIGRldGFpbHMKKyAgIGZyb20gUHl0aG9uIDIuMyBpcyBhbHNvIHRoZSBvbmx5IGNsZWFyIHdheSB0byB3cml0ZSBhIGRvY3Rlc3QgdGhhdCBkb2Vzbid0CisgICBjYXJlIGFib3V0IHRoZSBleGNlcHRpb24gZGV0YWlsIHlldCBjb250aW51ZXMgdG8gcGFzcyB1bmRlciBQeXRob24gMi4zIG9yCisgICBlYXJsaWVyICh0aG9zZSByZWxlYXNlcyBkbyBub3Qgc3VwcG9ydCBkb2N0ZXN0IGRpcmVjdGl2ZXMgYW5kIGlnbm9yZSB0aGVtCisgICBhcyBpcnJlbGV2YW50IGNvbW1lbnRzKS4gRm9yIGV4YW1wbGUsIDo6CiAKICAgICAgID4+PiAoMSwgMilbM10gPSAnbW9vJyAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICAgIFR5cGVFcnJvcjogb2JqZWN0IGRvZXNuJ3Qgc3VwcG9ydCBpdGVtIGFzc2lnbm1lbnQKIAotICAgcGFzc2VzIHVuZGVyIFB5dGhvbiAyLjQgYW5kIFB5dGhvbiAyLjMuICBUaGUgZGV0YWlsIGNoYW5nZWQgaW4gMi40LCB0byBzYXkgImRvZXMKLSAgIG5vdCIgaW5zdGVhZCBvZiAiZG9lc24ndCIuCisgICBwYXNzZXMgdW5kZXIgUHl0aG9uIDIuMyBhbmQgbGF0ZXIgUHl0aG9uIHZlcnNpb25zLCBldmVuIHRob3VnaCB0aGUgZGV0YWlsCisgICBjaGFuZ2VkIGluIFB5dGhvbiAyLjQgdG8gc2F5ICJkb2VzIG5vdCIgaW5zdGVhZCBvZiAiZG9lc24ndCIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBub3cgYWxzbyBpZ25vcmVzIGFueSBpbmZvcm1hdGlvbgorICAgICAgcmVsYXRpbmcgdG8gdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24gdW5kZXIgdGVzdAogCiAKIC4uIGRhdGE6OiBTS0lQCkBAIC01OTgsNiArNjE2LDggQEAKIAogICAgVGhlIFNLSVAgZmxhZyBjYW4gYWxzbyBiZSB1c2VkIGZvciB0ZW1wb3JhcmlseSAiY29tbWVudGluZyBvdXQiIGV4YW1wbGVzLgogCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKKwogCiAuLiBkYXRhOjogQ09NUEFSSVNPTl9GTEFHUwogCkBAIC03MDAsMTcgKzcyMCwxMyBAQAogZnVuY3Rpb25zIHRoYXQgcnVuIGRvY3Rlc3RzLCBlc3RhYmxpc2hpbmcgZGlmZmVyZW50IGRlZmF1bHRzLiAgSW4gc3VjaCBjYXNlcywKIGRpc2FibGluZyBhbiBvcHRpb24gdmlhIGBgLWBgIGluIGEgZGlyZWN0aXZlIGNhbiBiZSB1c2VmdWwuCiAKLS4uIHZlcnNpb25jaGFuZ2VkOjogMi40Ci0gICBDb25zdGFudHMgOmNvbnN0OmBET05UX0FDQ0VQVF9CTEFOS0xJTkVgLCA6Y29uc3Q6YE5PUk1BTElaRV9XSElURVNQQUNFYCwKKy4uIHZlcnNpb25hZGRlZDo6IDIuNAorICAgRG9jdGVzdCBkaXJlY3RpdmVzIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25zdGFudHMKKyAgIDpjb25zdDpgRE9OVF9BQ0NFUFRfQkxBTktMSU5FYCwgOmNvbnN0OmBOT1JNQUxJWkVfV0hJVEVTUEFDRWAsCiAgICA6Y29uc3Q6YEVMTElQU0lTYCwgOmNvbnN0OmBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGAsIDpjb25zdDpgUkVQT1JUX1VESUZGYCwKICAgIDpjb25zdDpgUkVQT1JUX0NESUZGYCwgOmNvbnN0OmBSRVBPUlRfTkRJRkZgLAogICAgOmNvbnN0OmBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFYCwgOmNvbnN0OmBDT01QQVJJU09OX0ZMQUdTYCBhbmQKLSAgIDpjb25zdDpgUkVQT1JUSU5HX0ZMQUdTYCB3ZXJlIGFkZGVkOyBieSBkZWZhdWx0IGBgPEJMQU5LTElORT5gYCBpbiBleHBlY3RlZAotICAgb3V0cHV0IG1hdGNoZXMgYW4gZW1wdHkgbGluZSBpbiBhY3R1YWwgb3V0cHV0OyBhbmQgZG9jdGVzdCBkaXJlY3RpdmVzIHdlcmUKLSAgIGFkZGVkLgotCi0uLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNQotICAgQ29uc3RhbnQgOmNvbnN0OmBTS0lQYCB3YXMgYWRkZWQuCisgICA6Y29uc3Q6YFJFUE9SVElOR19GTEFHU2Agd2VyZSBhZGRlZC4KIAogVGhlcmUncyBhbHNvIGEgd2F5IHRvIHJlZ2lzdGVyIG5ldyBvcHRpb24gZmxhZyBuYW1lcywgYWx0aG91Z2ggdGhpcyBpc24ndCB1c2VmdWwKIHVubGVzcyB5b3UgaW50ZW5kIHRvIGV4dGVuZCA6bW9kOmBkb2N0ZXN0YCBpbnRlcm5hbHMgdmlhIHN1YmNsYXNzaW5nOgpAQCAtOTU2LDE4ICs5NzIsMTcgQEAKIHN1cHBsaWVzIG1hbnkgZmxleGlibGUgd2F5cyB0byBjb21iaW5lIHRlc3RzIGZyb20gbXVsdGlwbGUgc291cmNlcy4gIFNvLCBpbgogUHl0aG9uIDIuNCwgOm1vZDpgZG9jdGVzdGAncyA6Y2xhc3M6YFRlc3RlcmAgY2xhc3MgaXMgZGVwcmVjYXRlZCwgYW5kCiA6bW9kOmBkb2N0ZXN0YCBwcm92aWRlcyB0d28gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIDptb2Q6YHVuaXR0ZXN0YAotdGVzdCBzdWl0ZXMgZnJvbSBtb2R1bGVzIGFuZCB0ZXh0IGZpbGVzIGNvbnRhaW5pbmcgZG9jdGVzdHMuICBUaGVzZSB0ZXN0IHN1aXRlcwotY2FuIHRoZW4gYmUgcnVuIHVzaW5nIDptb2Q6YHVuaXR0ZXN0YCB0ZXN0IHJ1bm5lcnM6OgordGVzdCBzdWl0ZXMgZnJvbSBtb2R1bGVzIGFuZCB0ZXh0IGZpbGVzIGNvbnRhaW5pbmcgZG9jdGVzdHMuICBUbyBpbnRlZ3JhdGUgd2l0aAorOm1vZDpgdW5pdHRlc3RgIHRlc3QgZGlzY292ZXJ5LCBpbmNsdWRlIGEgOmZ1bmM6YGxvYWRfdGVzdHNgIGZ1bmN0aW9uIGluIHlvdXIKK3Rlc3QgbW9kdWxlOjoKIAogICAgaW1wb3J0IHVuaXR0ZXN0CiAgICBpbXBvcnQgZG9jdGVzdAotICAgaW1wb3J0IG15X21vZHVsZV93aXRoX2RvY3Rlc3RzLCBhbmRfYW5vdGhlcgorICAgaW1wb3J0IG15X21vZHVsZV93aXRoX2RvY3Rlc3RzCiAKLSAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgIGZvciBtb2QgaW4gbXlfbW9kdWxlX3dpdGhfZG9jdGVzdHMsIGFuZF9hbm90aGVyOgotICAgICAgIHN1aXRlLmFkZFRlc3QoZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kKSkKLSAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKLSAgIHJ1bm5lci5ydW4oc3VpdGUpCisgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBpZ25vcmUpOgorICAgICAgIHRlc3RzLmFkZFRlc3RzKGRvY3Rlc3QuRG9jVGVzdFN1aXRlKG15X21vZHVsZV93aXRoX2RvY3Rlc3RzKSkKKyAgICAgICByZXR1cm4gdGVzdHMKIAogVGhlcmUgYXJlIHR3byBtYWluIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgOmNsYXNzOmB1bml0dGVzdC5UZXN0U3VpdGVgIGluc3RhbmNlcwogZnJvbSB0ZXh0IGZpbGVzIGFuZCBtb2R1bGVzIHdpdGggZG9jdGVzdHM6CkBAIC0xNDM4LDcgKzE0NTMsNyBAQAogICAgdmVyYm9zaXR5LiAgSWYgKnZlcmJvc2UqIGlzIGBgVHJ1ZWBgLCB0aGVuIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgYWJvdXQgZWFjaAogICAgZXhhbXBsZSwgYXMgaXQgaXMgcnVuLiAgSWYgKnZlcmJvc2UqIGlzIGBgRmFsc2VgYCwgdGhlbiBvbmx5IGZhaWx1cmVzIGFyZQogICAgcHJpbnRlZC4gIElmICp2ZXJib3NlKiBpcyB1bnNwZWNpZmllZCwgb3IgYGBOb25lYGAsIHRoZW4gdmVyYm9zZSBvdXRwdXQgaXMgdXNlZAotICAgaWZmIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoIDpvcHRpb246YC12YCBpcyB1c2VkLgorICAgaWZmIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoIGBgLXZgYCBpcyB1c2VkLgogCiAgICBUaGUgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAqb3B0aW9uZmxhZ3MqIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgaG93IHRoZSB0ZXN0CiAgICBydW5uZXIgY29tcGFyZXMgZXhwZWN0ZWQgb3V0cHV0IHRvIGFjdHVhbCBvdXRwdXQsIGFuZCBob3cgaXQgZGlzcGxheXMgZmFpbHVyZXMuCkBAIC0xNzUzLDcgKzE3NjgsNyBAQAogCiAuLiBleGNlcHRpb246OiBEb2NUZXN0RmFpbHVyZSh0ZXN0LCBleGFtcGxlLCBnb3QpCiAKLSAgIEFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgOmNsYXNzOmBEb2NUZXN0UnVubmVyYCB0byBzaWduYWwgdGhhdCBhIGRvY3Rlc3QgZXhhbXBsZSdzCisgICBBbiBleGNlcHRpb24gcmFpc2VkIGJ5IDpjbGFzczpgRG9jVGVzdFJ1bm5lcmAgdG8gc2lnbmFsIHRoYXQgYSBkb2N0ZXN0IGV4YW1wbGUncwogICAgYWN0dWFsIG91dHB1dCBkaWQgbm90IG1hdGNoIGl0cyBleHBlY3RlZCBvdXRwdXQuIFRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgYXJlCiAgICB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG1lbWJlciB2YXJpYWJsZXMgb2YgdGhlIHNhbWUgbmFtZXMuCiAKQEAgLTE3NzcsOSArMTc5Miw5IEBACiAKIC4uIGV4Y2VwdGlvbjo6IFVuZXhwZWN0ZWRFeGNlcHRpb24odGVzdCwgZXhhbXBsZSwgZXhjX2luZm8pCiAKLSAgIEFuIGV4Y2VwdGlvbiB0aHJvd24gYnkgOmNsYXNzOmBEb2NUZXN0UnVubmVyYCB0byBzaWduYWwgdGhhdCBhIGRvY3Rlc3QgZXhhbXBsZQotICAgcmFpc2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiAgVGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBhcmUgdXNlZCB0bwotICAgaW5pdGlhbGl6ZSB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lcy4KKyAgIEFuIGV4Y2VwdGlvbiByYWlzZWQgYnkgOmNsYXNzOmBEb2NUZXN0UnVubmVyYCB0byBzaWduYWwgdGhhdCBhIGRvY3Rlc3QKKyAgIGV4YW1wbGUgcmFpc2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiAgVGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBhcmUgdXNlZAorICAgdG8gaW5pdGlhbGl6ZSB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lcy4KIAogOmV4YzpgVW5leHBlY3RlZEV4Y2VwdGlvbmAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG1lbWJlciB2YXJpYWJsZXM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdAppbmRleCBjMWIxNmRhLi4zMmNlY2YzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CkBAIC0xMSw2ICsxMSwxMiBAQAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9lbWFpbC1zaW1wbGUucHkKIAogCitBbmQgcGFyc2luZyBSRkM4MjIgaGVhZGVycyBjYW4gZWFzaWx5IGJlIGRvbmUgYnkgdGhlIHBhcnNlKGZpbGVuYW1lKSBvcgorcGFyc2VzdHIobWVzc2FnZV9hc19zdHJpbmcpIG1ldGhvZHMgb2YgdGhlIFBhcnNlcigpIGNsYXNzOgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLWhlYWRlcnMucHkKKworCiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gc2VuZCBhIE1JTUUgbWVzc2FnZSBjb250YWluaW5nIGEgYnVuY2ggb2YgZmFtaWx5CiBwaWN0dXJlcyB0aGF0IG1heSBiZSByZXNpZGluZyBpbiBhIGRpcmVjdG9yeToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuZXJyb3JzLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmVycm9ycy5yc3QKaW5kZXggN2EwYzUyYS4uMDY1OThkNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuZXJyb3JzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5lcnJvcnMucnN0CkBAIC0xNyw3ICsxNyw3IEBACiAKIC4uIGV4Y2VwdGlvbjo6IE1lc3NhZ2VQYXJzZUVycm9yKCkKIAotICAgVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyB0aHJvd24gYnkgdGhlIDpjbGFzczpgfmVtYWlsLnBhcnNlci5QYXJzZXJgCisgICBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgOmNsYXNzOmB+ZW1haWwucGFyc2VyLlBhcnNlcmAKICAgIGNsYXNzLiAgSXQgaXMgZGVyaXZlZCBmcm9tIDpleGM6YE1lc3NhZ2VFcnJvcmAuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlci5yc3QKaW5kZXggNzE4MjAwNS4uZmUwOWRlNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXIucnN0CkBAIC02NSw3ICs2NSw3IEBACiAgICBjaGFyYWN0ZXIgc2V0IGlzIHVzZWQgYm90aCBhcyAqcyoncyBpbml0aWFsIGNoYXJzZXQgYW5kIGFzIHRoZSBkZWZhdWx0IGZvcgogICAgc3Vic2VxdWVudCA6bWV0aDpgYXBwZW5kYCBjYWxscy4KIAotICAgVGhlIG1heGltdW0gbGluZSBsZW5ndGggY2FuIGJlIHNwZWNpZmllZCBleHBsaWNpdCB2aWEgKm1heGxpbmVsZW4qLiAgRm9yCisgICBUaGUgbWF4aW11bSBsaW5lIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGV4cGxpY2l0bHkgdmlhICptYXhsaW5lbGVuKi4gIEZvcgogICAgc3BsaXR0aW5nIHRoZSBmaXJzdCBsaW5lIHRvIGEgc2hvcnRlciB2YWx1ZSAodG8gYWNjb3VudCBmb3IgdGhlIGZpZWxkIGhlYWRlcgogICAgd2hpY2ggaXNuJ3QgaW5jbHVkZWQgaW4gKnMqLCBlLmcuIDptYWlsaGVhZGVyOmBTdWJqZWN0YCkgcGFzcyBpbiB0aGUgbmFtZSBvZiB0aGUKICAgIGZpZWxkIGluICpoZWFkZXJfbmFtZSouICBUaGUgZGVmYXVsdCAqbWF4bGluZWxlbiogaXMgNzYsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZQpAQCAtNzQsNyArNzQsOCBAQAogCiAgICBPcHRpb25hbCAqY29udGludWF0aW9uX3dzKiBtdXN0IGJlIDpyZmM6YDI4MjJgXCAtY29tcGxpYW50IGZvbGRpbmcgd2hpdGVzcGFjZSwKICAgIGFuZCBpcyB1c3VhbGx5IGVpdGhlciBhIHNwYWNlIG9yIGEgaGFyZCB0YWIgY2hhcmFjdGVyLiBUaGlzIGNoYXJhY3RlciB3aWxsIGJlCi0gICBwcmVwZW5kZWQgdG8gY29udGludWF0aW9uIGxpbmVzLgorICAgcHJlcGVuZGVkIHRvIGNvbnRpbnVhdGlvbiBsaW5lcy4gICpjb250aW51YXRpb25fd3MqIGRlZmF1bHRzIHRvIGEgc2luZ2xlCisgICBzcGFjZSBjaGFyYWN0ZXIgKCIgIikuCiAKICAgIE9wdGlvbmFsICplcnJvcnMqIGlzIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSA6bWV0aDpgYXBwZW5kYCBtZXRob2QuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKaW5kZXggNGNjMzg4MC4uNmY0MGMwNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKQEAgLTI2Niw3ICsyNjYsMTIgQEAKICAgICAgIHRha2VuIGFzIHRoZSBwYXJhbWV0ZXIgbmFtZSwgd2l0aCB1bmRlcnNjb3JlcyBjb252ZXJ0ZWQgdG8gZGFzaGVzIChzaW5jZQogICAgICAgZGFzaGVzIGFyZSBpbGxlZ2FsIGluIFB5dGhvbiBpZGVudGlmaWVycykuICBOb3JtYWxseSwgdGhlIHBhcmFtZXRlciB3aWxsCiAgICAgICBiZSBhZGRlZCBhcyBgYGtleT0idmFsdWUiYGAgdW5sZXNzIHRoZSB2YWx1ZSBpcyBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZQotICAgICAgb25seSB0aGUga2V5IHdpbGwgYmUgYWRkZWQuCisgICAgICBvbmx5IHRoZSBrZXkgd2lsbCBiZSBhZGRlZC4gIElmIHRoZSB2YWx1ZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycywKKyAgICAgIGl0IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgdGhyZWUgdHVwbGUgaW4gdGhlIGZvcm1hdAorICAgICAgYGAoQ0hBUlNFVCwgTEFOR1VBR0UsIFZBTFVFKWBgLCB3aGVyZSBgYENIQVJTRVRgYCBpcyBhIHN0cmluZyBuYW1pbmcgdGhlCisgICAgICBjaGFyc2V0IHRvIGJlIHVzZWQgdG8gZW5jb2RlIHRoZSB2YWx1ZSwgYGBMQU5HVUFHRWBgIGNhbiB1c3VhbGx5IGJlIHNldAorICAgICAgdG8gYGBOb25lYGAgb3IgdGhlIGVtcHR5IHN0cmluZyAoc2VlIDpSRkM6YDIyMzFgIGZvciBvdGhlciBwb3NzaWJpbGl0aWVzKSwKKyAgICAgIGFuZCBgYFZBTFVFYGAgaXMgdGhlIHN0cmluZyB2YWx1ZSBjb250YWluaW5nIG5vbi1BU0NJSSBjb2RlIHBvaW50cy4KIAogICAgICAgSGVyZSdzIGFuIGV4YW1wbGU6OgogCkBAIC0yNzYsNiArMjgxLDE1IEBACiAKICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJidWQuZ2lmIgogCisgICAgICBBbiBleGFtcGxlIHdpdGggd2l0aCBub24tQVNDSUkgY2hhcmFjdGVyczo6CisKKyAgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9KCdpc28tODg1OS0xJywgJycsICdGdcOfYmFsbGVyLnBwdCcpKQorCisgICAgICBXaGljaCBwcm9kdWNlcyA6OgorCisgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZSo9Imlzby04ODU5LTEnJ0Z1JURGYmFsbGVyLnBwdCIKKwogCiAgICAuLiBtZXRob2Q6OiByZXBsYWNlX2hlYWRlcihfbmFtZSwgX3ZhbHVlKQogCkBAIC0zODAsNyArMzk0LDcgQEAKICAgICAgIDpyZmM6YDIyMzFgLCB5b3UgY2FuIGNvbGxhcHNlIHRoZSBwYXJhbWV0ZXIgdmFsdWUgYnkgY2FsbGluZwogICAgICAgOmZ1bmM6YGVtYWlsLnV0aWxzLmNvbGxhcHNlX3JmYzIyMzFfdmFsdWVgLCBwYXNzaW5nIGluIHRoZSByZXR1cm4gdmFsdWUKICAgICAgIGZyb20gOm1ldGg6YGdldF9wYXJhbWAuICBUaGlzIHdpbGwgcmV0dXJuIGEgc3VpdGFibHkgZGVjb2RlZCBVbmljb2RlCi0gICAgICBzdHJpbmcgd2huIHRoZSB2YWx1ZSBpcyBhIHR1cGxlLCBvciB0aGUgb3JpZ2luYWwgc3RyaW5nIHVucXVvdGVkIGlmIGl0CisgICAgICBzdHJpbmcgd2hlbiB0aGUgdmFsdWUgaXMgYSB0dXBsZSwgb3IgdGhlIG9yaWdpbmFsIHN0cmluZyB1bnF1b3RlZCBpZiBpdAogICAgICAgaXNuJ3QuICBGb3IgZXhhbXBsZTo6CiAKICAgICAgICAgIHJhd3BhcmFtID0gbXNnLmdldF9wYXJhbSgnZm9vJykKQEAgLTQ0OCw5ICs0NjIsMTAgQEAKICAgICAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGBgZmlsZW5hbWVgYCBwYXJhbWV0ZXIgb2YgdGhlCiAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyIG9mIHRoZSBtZXNzYWdlLiAgSWYgdGhlIGhlYWRlcgogICAgICAgZG9lcyBub3QgaGF2ZSBhIGBgZmlsZW5hbWVgYCBwYXJhbWV0ZXIsIHRoaXMgbWV0aG9kIGZhbGxzIGJhY2sgdG8gbG9va2luZwotICAgICAgZm9yIHRoZSBgYG5hbWVgYCBwYXJhbWV0ZXIuICBJZiBuZWl0aGVyIGlzIGZvdW5kLCBvciB0aGUgaGVhZGVyIGlzCi0gICAgICBtaXNzaW5nLCB0aGVuICpmYWlsb2JqKiBpcyByZXR1cm5lZC4gIFRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBhbHdheXMgYmUKLSAgICAgIHVucXVvdGVkIGFzIHBlciA6ZnVuYzpgZW1haWwudXRpbHMudW5xdW90ZWAuCisgICAgICBmb3IgdGhlIGBgbmFtZWBgIHBhcmFtZXRlciBvbiB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLiAgSWYKKyAgICAgIG5laXRoZXIgaXMgZm91bmQsIG9yIHRoZSBoZWFkZXIgaXMgbWlzc2luZywgdGhlbiAqZmFpbG9iaiogaXMgcmV0dXJuZWQuCisgICAgICBUaGUgcmV0dXJuZWQgc3RyaW5nIHdpbGwgYWx3YXlzIGJlIHVucXVvdGVkIGFzIHBlcgorICAgICAgOmZ1bmM6YGVtYWlsLnV0aWxzLnVucXVvdGVgLgogCiAKICAgIC4uIG1ldGhvZDo6IGdldF9ib3VuZGFyeShbZmFpbG9ial0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CmluZGV4IDJmMDdkMjkuLjU4ODY3NjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CkBAIC0yNiw3ICsyNiw3IEBACiAKIFRoZSBidWlsdC1pbiBleGNlcHRpb25zIGxpc3RlZCBiZWxvdyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IHRoZSBpbnRlcnByZXRlciBvcgogYnVpbHQtaW4gZnVuY3Rpb25zLiAgRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgdGhleSBoYXZlIGFuICJhc3NvY2lhdGVkIHZhbHVlIgotaW5kaWNhdGluZyB0aGUgZGV0YWlsZWQgY2F1c2Ugb2YgdGhlIGVycm9yLiBUaGlzIG1heSBiZSBhIHN0cmluZyBvciBhIHR1cGxlCitpbmRpY2F0aW5nIHRoZSBkZXRhaWxlZCBjYXVzZSBvZiB0aGUgZXJyb3IuICBUaGlzIG1heSBiZSBhIHN0cmluZyBvciBhIHR1cGxlCiBjb250YWluaW5nIHNldmVyYWwgaXRlbXMgb2YgaW5mb3JtYXRpb24gKGUuZy4sIGFuIGVycm9yIGNvZGUgYW5kIGEgc3RyaW5nCiBleHBsYWluaW5nIHRoZSBjb2RlKS4gVGhlIGFzc29jaWF0ZWQgdmFsdWUgaXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUKIDprZXl3b3JkOmByYWlzZWAgc3RhdGVtZW50LiAgSWYgdGhlIGV4Y2VwdGlvbiBjbGFzcyBpcyBkZXJpdmVkIGZyb20gdGhlIHN0YW5kYXJkCkBAIC00NiwxOCArNDYsMzUgQEAKIAogVGhlIGZvbGxvd2luZyBleGNlcHRpb25zIGFyZSBvbmx5IHVzZWQgYXMgYmFzZSBjbGFzc2VzIGZvciBvdGhlciBleGNlcHRpb25zLgogCi0KIC4uIGV4Y2VwdGlvbjo6IEJhc2VFeGNlcHRpb24KIAogICAgVGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBidWlsdC1pbiBleGNlcHRpb25zLiAgSXQgaXMgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5Ci0gICBpbmhlcml0ZWQgYnkgdXNlci1kZWZpbmVkIGNsYXNzZXMgKGZvciB0aGF0IHVzZSA6ZXhjOmBFeGNlcHRpb25gKS4gIElmCisgICBpbmhlcml0ZWQgYnkgdXNlci1kZWZpbmVkIGNsYXNzZXMgKGZvciB0aGF0LCB1c2UgOmV4YzpgRXhjZXB0aW9uYCkuICBJZgogICAgOmZ1bmM6YHN0cmAgb3IgOmZ1bmM6YHVuaWNvZGVgIGlzIGNhbGxlZCBvbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLCB0aGUKLSAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcmd1bWVudChzKSB0byB0aGUgaW5zdGFuY2UgYXJlIHJldHVybmVkIG9yIHRoZSBlbXB0eQotICAgc3RyaW5nIHdoZW4gdGhlcmUgd2VyZSBubyBhcmd1bWVudHMuICBBbGwgYXJndW1lbnRzIGFyZSAgc3RvcmVkIGluIDphdHRyOmBhcmdzYAotICAgYXMgYSB0dXBsZS4KKyAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcmd1bWVudChzKSB0byB0aGUgaW5zdGFuY2UgYXJlIHJldHVybmVkLCBvciB0aGUgZW1wdHkKKyAgIHN0cmluZyB3aGVuIHRoZXJlIHdlcmUgbm8gYXJndW1lbnRzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKIAorICAgLi4gYXR0cmlidXRlOjogYXJncworCisgICAgICBUaGUgdHVwbGUgb2YgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBleGNlcHRpb24gY29uc3RydWN0b3IuICBTb21lIGJ1aWx0LWluCisgICAgICBleGNlcHRpb25zIChsaWtlIDpleGM6YElPRXJyb3JgKSBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBhcmd1bWVudHMgYW5kCisgICAgICBhc3NpZ24gYSBzcGVjaWFsIG1lYW5pbmcgdG8gdGhlIGVsZW1lbnRzIG9mIHRoaXMgdHVwbGUsIHdoaWxlIG90aGVycyBhcmUKKyAgICAgIHVzdWFsbHkgY2FsbGVkIG9ubHkgd2l0aCBhIHNpbmdsZSBzdHJpbmcgZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UuCisKKyAgIC4uIG1ldGhvZDo6IHdpdGhfdHJhY2ViYWNrKHRiKQorCisgICAgICBUaGlzIG1ldGhvZCBzZXRzICp0YiogYXMgdGhlIG5ldyB0cmFjZWJhY2sgZm9yIHRoZSBleGNlcHRpb24gYW5kIHJldHVybnMKKyAgICAgIHRoZSBleGNlcHRpb24gb2JqZWN0LiAgSXQgaXMgdXN1YWxseSB1c2VkIGluIGV4Y2VwdGlvbiBoYW5kbGluZyBjb2RlIGxpa2UKKyAgICAgIHRoaXM6OgorCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgLi4uCisgICAgICAgICBleGNlcHQgU29tZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCisgICAgICAgICAgICAgcmFpc2UgT3RoZXJFeGNlcHRpb24oLi4uKS53aXRoX3RyYWNlYmFjayh0YikKKwogCiAuLiBleGNlcHRpb246OiBFeGNlcHRpb24KIApAQCAtODIsNiArOTksMTIgQEAKICAgIDpleGM6YEZsb2F0aW5nUG9pbnRFcnJvcmAuCiAKIAorLi4gZXhjZXB0aW9uOjogQnVmZmVyRXJyb3IKKworICAgUmFpc2VkIHdoZW4gYSA6cmVmOmBidWZmZXIgPGJ1ZmZlcm9iamVjdHM+YCByZWxhdGVkIG9wZXJhdGlvbiBjYW5ub3QgYmUKKyAgIHBlcmZvcm1lZC4KKworCiAuLiBleGNlcHRpb246OiBMb29rdXBFcnJvcgogCiAgICBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcmFpc2VkIHdoZW4gYSBrZXkgb3IgaW5kZXggdXNlZCBvbgpAQCAtMTQxLDcgKzE2NCw3IEBACiAKICAgIFJhaXNlZCB3aGVuIGEgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9uIGZhaWxzLiAgVGhpcyBleGNlcHRpb24gaXMgYWx3YXlzIGRlZmluZWQsCiAgICBidXQgY2FuIG9ubHkgYmUgcmFpc2VkIHdoZW4gUHl0aG9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUKLSAgIDpvcHRpb246YC0td2l0aC1mcGVjdGxgIG9wdGlvbiwgb3IgdGhlIDpjb25zdDpgV0FOVF9TSUdGUEVfSEFORExFUmAgc3ltYm9sIGlzCisgICBgYC0td2l0aC1mcGVjdGxgYCBvcHRpb24sIG9yIHRoZSA6Y29uc3Q6YFdBTlRfU0lHRlBFX0hBTkRMRVJgIHN5bWJvbCBpcwogICAgZGVmaW5lZCBpbiB0aGUgOmZpbGU6YHB5Y29uZmlnLmhgIGZpbGUuCiAKIApAQCAtMzAxLDYgKzMyNCwxOCBAQAogICAgb2YgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSByZXR1cm5zIG9ubHkgdGhlIG1lc3NhZ2UuCiAKIAorLi4gZXhjZXB0aW9uOjogSW5kZW50YXRpb25FcnJvcgorCisgICBCYXNlIGNsYXNzIGZvciBzeW50YXggZXJyb3JzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGluZGVudGF0aW9uLiAgVGhpcyBpcyBhCisgICBzdWJjbGFzcyBvZiA6ZXhjOmBTeW50YXhFcnJvcmAuCisKKworLi4gZXhjZXB0aW9uOjogVGFiRXJyb3IKKworICAgUmFpc2VkIHdoZW4gaW5kZW50YXRpb24gY29udGFpbnMgYW4gaW5jb25zaXN0ZW50IHVzZSBvZiB0YWJzIGFuZCBzcGFjZXMuCisgICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgOmV4YzpgSW5kZW50YXRpb25FcnJvcmAuCisKKwogLi4gZXhjZXB0aW9uOjogU3lzdGVtRXJyb3IKIAogICAgUmFpc2VkIHdoZW4gdGhlIGludGVycHJldGVyIGZpbmRzIGFuIGludGVybmFsIGVycm9yLCBidXQgdGhlIHNpdHVhdGlvbiBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAppbmRleCAxMWQ3NGJhLi42OTllNTEwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdApAQCAtMTEsNiArMTEsMTEgQEAKIHdpdGggdmFyaW91cyBvcHRpb25hbCB0aW1lL2NvcnJlY3RuZXNzIHRyYWRlLW9mZnMuIEZvciBjb21wYXJpbmcgZmlsZXMsCiBzZWUgYWxzbyB0aGUgOm1vZDpgZGlmZmxpYmAgbW9kdWxlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBmaWxlY21wIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL2ZpbGVjbXAucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YGZpbGVjbXBgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CmluZGV4IGZmZDEwOWMuLjcwOTIzN2UgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdApAQCAtNDQsNiArNDQsMTEgQEAKIHJldHVybnMgYW4gYWNjb3JkaW5nbHkgb3BlbmVkIGZpbGUtbGlrZSBvYmplY3QuIFR3byB1c2VmdWwgaG9va3MgYXJlIGFscmVhZHkKIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBmaWxlaW5wdXQgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvZmlsZWlucHV0LnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9mIHRoaXMgbW9kdWxlOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0IGIvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKaW5kZXggNjdhYTJmNC4uY2IxZmExMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKQEAgLTM0LDYgKzM0LDEwIEBACiBhIHBlcmlvZCBhcmUgbm90IHNwZWNpYWwgZm9yIHRoaXMgbW9kdWxlLCBhbmQgYXJlIG1hdGNoZWQgYnkgdGhlIGBgKmBgIGFuZCBgYD9gYAogcGF0dGVybnMuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYGZubWF0Y2ggUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvZm5tYXRjaC5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBmdW5jdGlvbjo6IGZubWF0Y2goZmlsZW5hbWUsIHBhdHRlcm4pCiAKQEAgLTczLDYgKzc3LDggQEAKIAogICAgUmV0dXJuIHRoZSBzaGVsbC1zdHlsZSAqcGF0dGVybiogY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgogCisgICBCZSBhd2FyZSB0aGVyZSBpcyBubyB3YXkgdG8gcXVvdGUgbWV0YS1jaGFyYWN0ZXJzLgorCiAgICBFeGFtcGxlOgogCiAgICAgICA+Pj4gaW1wb3J0IGZubWF0Y2gsIHJlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdAppbmRleCAzNmRmMTFjLi4xY2E5YTljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKQEAgLTE3LDMwICsxNywzNCBAQAogCiAuLiBjbGFzczo6IEZyYWN0aW9uKG51bWVyYXRvcj0wLCBkZW5vbWluYXRvcj0xKQogICAgICAgICAgICBGcmFjdGlvbihvdGhlcl9mcmFjdGlvbikKKyAgICAgICAgICAgRnJhY3Rpb24oZmxvYXQpCisgICAgICAgICAgIEZyYWN0aW9uKGRlY2ltYWwpCiAgICAgICAgICAgIEZyYWN0aW9uKHN0cmluZykKIAotICAgVGhlIGZpcnN0IHZlcnNpb24gcmVxdWlyZXMgdGhhdCAqbnVtZXJhdG9yKiBhbmQgKmRlbm9taW5hdG9yKiBhcmUKLSAgIGluc3RhbmNlcyBvZiA6Y2xhc3M6YG51bWJlcnMuSW50ZWdyYWxgIGFuZCByZXR1cm5zIGEgbmV3Ci0gICA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZSB3aXRoIHZhbHVlIGBgbnVtZXJhdG9yL2Rlbm9taW5hdG9yYGAuIElmCi0gICAqZGVub21pbmF0b3IqIGlzIDpjb25zdDpgMGAsIGl0IHJhaXNlcyBhCi0gICA6ZXhjOmBaZXJvRGl2aXNpb25FcnJvcmAuIFRoZSBzZWNvbmQgdmVyc2lvbiByZXF1aXJlcyB0aGF0Ci0gICAqb3RoZXJfZnJhY3Rpb24qIGlzIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgbnVtYmVycy5SYXRpb25hbGAgYW5kCi0gICByZXR1cm5zIGFuIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIHdpdGggdGhlIHNhbWUgdmFsdWUuICBUaGUKLSAgIGxhc3QgdmVyc2lvbiBvZiB0aGUgY29uc3RydWN0b3IgZXhwZWN0cyBhIHN0cmluZyBvciB1bmljb2RlCi0gICBpbnN0YW5jZSBpbiBvbmUgb2YgdHdvIHBvc3NpYmxlIGZvcm1zLiAgVGhlIGZpcnN0IGZvcm0gaXM6OgorICAgVGhlIGZpcnN0IHZlcnNpb24gcmVxdWlyZXMgdGhhdCAqbnVtZXJhdG9yKiBhbmQgKmRlbm9taW5hdG9yKiBhcmUgaW5zdGFuY2VzCisgICBvZiA6Y2xhc3M6YG51bWJlcnMuUmF0aW9uYWxgIGFuZCByZXR1cm5zIGEgbmV3IDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlCisgICB3aXRoIHZhbHVlIGBgbnVtZXJhdG9yL2Rlbm9taW5hdG9yYGAuIElmICpkZW5vbWluYXRvciogaXMgOmNvbnN0OmAwYCwgaXQKKyAgIHJhaXNlcyBhIDpleGM6YFplcm9EaXZpc2lvbkVycm9yYC4gVGhlIHNlY29uZCB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQKKyAgICpvdGhlcl9mcmFjdGlvbiogaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBudW1iZXJzLlJhdGlvbmFsYCBhbmQgcmV0dXJucyBhCisgICA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIHZhbHVlLiAgVGhlIG5leHQgdHdvIHZlcnNpb25zIGFjY2VwdAorICAgZWl0aGVyIGEgOmNsYXNzOmBmbG9hdGAgb3IgYSA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAgaW5zdGFuY2UsIGFuZCByZXR1cm4gYQorICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2Ugd2l0aCBleGFjdGx5IHRoZSBzYW1lIHZhbHVlLiAgTm90ZSB0aGF0IGR1ZSB0byB0aGUKKyAgIHVzdWFsIGlzc3VlcyB3aXRoIGJpbmFyeSBmbG9hdGluZy1wb2ludCAoc2VlIDpyZWY6YHR1dC1mcC1pc3N1ZXNgKSwgdGhlCisgICBhcmd1bWVudCB0byBgYEZyYWN0aW9uKDEuMSlgYCBpcyBub3QgZXhhY3RseSBlcXVhbCB0byAxMS8xMCwgYW5kIHNvCisgICBgYEZyYWN0aW9uKDEuMSlgYCBkb2VzICpub3QqIHJldHVybiBgYEZyYWN0aW9uKDExLCAxMClgYCBhcyBvbmUgbWlnaHQgZXhwZWN0LgorICAgKEJ1dCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bWV0aDpgbGltaXRfZGVub21pbmF0b3JgIG1ldGhvZCBiZWxvdy4pCisgICBUaGUgbGFzdCB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3RvciBleHBlY3RzIGEgc3RyaW5nIG9yIHVuaWNvZGUgaW5zdGFuY2UuCisgICBUaGUgdXN1YWwgZm9ybSBmb3IgdGhpcyBpbnN0YW5jZSBpczo6CiAKICAgICAgIFtzaWduXSBudW1lcmF0b3IgWycvJyBkZW5vbWluYXRvcl0KIAogICAgd2hlcmUgdGhlIG9wdGlvbmFsIGBgc2lnbmBgIG1heSBiZSBlaXRoZXIgJysnIG9yICctJyBhbmQKICAgIGBgbnVtZXJhdG9yYGAgYW5kIGBgZGVub21pbmF0b3JgYCAoaWYgcHJlc2VudCkgYXJlIHN0cmluZ3Mgb2YKLSAgIGRlY2ltYWwgZGlnaXRzLiAgVGhlIHNlY29uZCBwZXJtaXR0ZWQgZm9ybSBpcyB0aGF0IG9mIGEgbnVtYmVyCi0gICBjb250YWluaW5nIGEgZGVjaW1hbCBwb2ludDo6Ci0KLSAgICAgIFtzaWduXSBpbnRlZ2VyICcuJyBbZnJhY3Rpb25dIHwgW3NpZ25dICcuJyBmcmFjdGlvbgotCi0gICB3aGVyZSBgYGludGVnZXJgYCBhbmQgYGBmcmFjdGlvbmBgIGFyZSBzdHJpbmdzIG9mIGRpZ2l0cy4gIEluCi0gICBlaXRoZXIgZm9ybSB0aGUgaW5wdXQgc3RyaW5nIG1heSBhbHNvIGhhdmUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcKLSAgIHdoaXRlc3BhY2UuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOjoKKyAgIGRlY2ltYWwgZGlnaXRzLiAgSW4gYWRkaXRpb24sIGFueSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgZmluaXRlCisgICB2YWx1ZSBhbmQgaXMgYWNjZXB0ZWQgYnkgdGhlIDpjbGFzczpgZmxvYXRgIGNvbnN0cnVjdG9yIGlzIGFsc28KKyAgIGFjY2VwdGVkIGJ5IHRoZSA6Y2xhc3M6YEZyYWN0aW9uYCBjb25zdHJ1Y3Rvci4gIEluIGVpdGhlciBmb3JtIHRoZQorICAgaW5wdXQgc3RyaW5nIG1heSBhbHNvIGhhdmUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6OgogCiAgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCiAgICAgICA+Pj4gRnJhY3Rpb24oMTYsIC0xMCkKQEAgLTU4LDYgKzYyLDE1IEBACiAgICAgICBGcmFjdGlvbigxNDE0MjEzLCAxMDAwMDAwKQogICAgICAgPj4+IEZyYWN0aW9uKCctLjEyNScpCiAgICAgICBGcmFjdGlvbigtMSwgOCkKKyAgICAgID4+PiBGcmFjdGlvbignN2UtNicpCisgICAgICBGcmFjdGlvbig3LCAxMDAwMDAwKQorICAgICAgPj4+IEZyYWN0aW9uKDIuMjUpCisgICAgICBGcmFjdGlvbig5LCA0KQorICAgICAgPj4+IEZyYWN0aW9uKDEuMSkKKyAgICAgIEZyYWN0aW9uKDI0NzY5Nzk3OTUwNTM3NzMsIDIyNTE3OTk4MTM2ODUyNDgpCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgICA+Pj4gRnJhY3Rpb24oRGVjaW1hbCgnMS4xJykpCisgICAgICBGcmFjdGlvbigxMSwgMTApCiAKIAogICAgVGhlIDpjbGFzczpgRnJhY3Rpb25gIGNsYXNzIGluaGVyaXRzIGZyb20gdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MKQEAgLTY2LDYgKzc5LDEwIEBACiAgICBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlLiAgSW4gYWRkaXRpb24sCiAgICA6Y2xhc3M6YEZyYWN0aW9uYCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlIDpjbGFzczpgRnJhY3Rpb25gIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIDpjbGFzczpgZmxvYXRgIGFuZAorICAgICAgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcy4KKwogCiAgICAuLiBtZXRob2Q6OiBmcm9tX2Zsb2F0KGZsdCkKIApAQCAtNzMsMTIgKzkwLDE5IEBACiAgICAgICB2YWx1ZSBvZiAqZmx0Kiwgd2hpY2ggbXVzdCBiZSBhIDpjbGFzczpgZmxvYXRgLiBCZXdhcmUgdGhhdAogICAgICAgYGBGcmFjdGlvbi5mcm9tX2Zsb2F0KDAuMylgYCBpcyBub3QgdGhlIHNhbWUgdmFsdWUgYXMgYGBGcmFjdGlvbigzLCAxMClgYAogCisgICAgICAuLiBub3RlOjogRnJvbSBQeXRob24gMi43IG9ud2FyZHMsIHlvdSBjYW4gYWxzbyBjb25zdHJ1Y3QgYQorICAgICAgICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBhIDpjbGFzczpgZmxvYXRgLgorCiAKICAgIC4uIG1ldGhvZDo6IGZyb21fZGVjaW1hbChkZWMpCiAKICAgICAgIFRoaXMgY2xhc3MgbWV0aG9kIGNvbnN0cnVjdHMgYSA6Y2xhc3M6YEZyYWN0aW9uYCByZXByZXNlbnRpbmcgdGhlIGV4YWN0CiAgICAgICB2YWx1ZSBvZiAqZGVjKiwgd2hpY2ggbXVzdCBiZSBhIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYC4KIAorICAgICAgLi4gbm90ZTo6IEZyb20gUHl0aG9uIDIuNyBvbndhcmRzLCB5b3UgY2FuIGFsc28gY29uc3RydWN0IGEKKyAgICAgICAgIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gYSA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAKKyAgICAgICAgIGluc3RhbmNlLgorCiAKICAgIC4uIG1ldGhvZDo6IGxpbWl0X2Rlbm9taW5hdG9yKG1heF9kZW5vbWluYXRvcj0xMDAwMDAwKQogCkBAIC05MywxMCArMTE3LDEyIEBACiAgICAgICBvciBmb3IgcmVjb3ZlcmluZyBhIHJhdGlvbmFsIG51bWJlciB0aGF0J3MgcmVwcmVzZW50ZWQgYXMgYSBmbG9hdDoKIAogICAgICAgICAgPj4+IGZyb20gbWF0aCBpbXBvcnQgcGksIGNvcwotICAgICAgICAgPj4+IEZyYWN0aW9uLmZyb21fZmxvYXQoY29zKHBpLzMpKQorICAgICAgICAgPj4+IEZyYWN0aW9uKGNvcyhwaS8zKSkKICAgICAgICAgIEZyYWN0aW9uKDQ1MDM1OTk2MjczNzA0OTcsIDkwMDcxOTkyNTQ3NDA5OTIpCi0gICAgICAgICA+Pj4gRnJhY3Rpb24uZnJvbV9mbG9hdChjb3MocGkvMykpLmxpbWl0X2Rlbm9taW5hdG9yKCkKKyAgICAgICAgID4+PiBGcmFjdGlvbihjb3MocGkvMykpLmxpbWl0X2Rlbm9taW5hdG9yKCkKICAgICAgICAgIEZyYWN0aW9uKDEsIDIpCisgICAgICAgICA+Pj4gRnJhY3Rpb24oMS4xKS5saW1pdF9kZW5vbWluYXRvcigpCisgICAgICAgICBGcmFjdGlvbigxMSwgMTApCiAKIAogLi4gZnVuY3Rpb246OiBnY2QoYSwgYikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CmluZGV4IGY0ODk0NjkuLmI2ZGI5ODMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdApAQCAtNTAsNiArNTAsNDAgQEAKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKIAorLi4gY2xhc3M6OiBGVFBfVExTKFtob3N0WywgdXNlclssIHBhc3N3ZFssIGFjY3RbLCBrZXlmaWxlWywgY2VydGZpbGVbLCB0aW1lb3V0XV1dXV1dXSkKKworICAgQSA6Y2xhc3M6YEZUUGAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBUTFMgc3VwcG9ydCB0byBGVFAgYXMgZGVzY3JpYmVkIGluCisgICA6cmZjOmA0MjE3YC4KKyAgIENvbm5lY3QgYXMgdXN1YWwgdG8gcG9ydCAyMSBpbXBsaWNpdGx5IHNlY3VyaW5nIHRoZSBGVFAgY29udHJvbCBjb25uZWN0aW9uCisgICBiZWZvcmUgYXV0aGVudGljYXRpbmcuIFNlY3VyaW5nIHRoZSBkYXRhIGNvbm5lY3Rpb24gcmVxdWlyZXMgdGhlIHVzZXIgdG8KKyAgIGV4cGxpY2l0bHkgYXNrIGZvciBpdCBieSBjYWxsaW5nIHRoZSA6bWV0aDpgcHJvdF9wYCBtZXRob2QuCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIG9wdGlvbmFsIC0tIHRoZXkgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkCisgICBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBuYW1lIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisgICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczoKKworICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCisgICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5weXRob24ub3JnJykKKyAgID4+PiBmdHBzLmxvZ2luKCkgICAgICAgICAgICMgbG9naW4gYW5vbnltb3VzbHkgYmVmb3JlIHNlY3VyaW5nIGNvbnRyb2wgY2hhbm5lbAorICAgPj4+IGZ0cHMucHJvdF9wKCkgICAgICAgICAgIyBzd2l0Y2ggdG8gc2VjdXJlIGRhdGEgY29ubmVjdGlvbgorICAgPj4+IGZ0cHMucmV0cmxpbmVzKCdMSVNUJykgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IHNlY3VyZWx5CisgICB0b3RhbCA5CisgICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLgorICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4uCisgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgYmluCisgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgZXRjCisgICBkLXd4cnd4ci14ICAgMiBmdHAgICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgIDUgMTM6NDMgaW5jb21pbmcKKyAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IE5vdiAxNyAgMTk5MyBsaWIKKyAgIGRyd3hyLXhyLXggICA2IDEwOTQgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAxMyAxOTowNyBwdWIKKyAgIGRyd3hyLXhyLXggICAzIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCB1c3IKKyAgIC1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMzEyIEF1ZyAgMSAgMTk5NCB3ZWxjb21lLm1zZworICAgJzIyNiBUcmFuc2ZlciBjb21wbGV0ZS4nCisgICA+Pj4gZnRwcy5xdWl0KCkKKyAgID4+PgorCisKIC4uIGV4Y2VwdGlvbjo6IGVycm9yX3JlcGx5CiAKICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiB1bmV4cGVjdGVkIHJlcGx5IGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4KQEAgLTU3LDE4ICs5MSwyMSBAQAogCiAuLiBleGNlcHRpb246OiBlcnJvcl90ZW1wCiAKLSAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiBlcnJvciBjb2RlIGluIHRoZSByYW5nZSA0MDAtLTQ5OSBpcyByZWNlaXZlZC4KKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiBlcnJvciBjb2RlIHNpZ25pZnlpbmcgYSB0ZW1wb3JhcnkgZXJyb3IgKHJlc3BvbnNlCisgICBjb2RlcyBpbiB0aGUgcmFuZ2UgNDAwLS00OTkpIGlzIHJlY2VpdmVkLgogCiAKIC4uIGV4Y2VwdGlvbjo6IGVycm9yX3Blcm0KIAotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIGNvZGUgaW4gdGhlIHJhbmdlIDUwMC0tNTk5IGlzIHJlY2VpdmVkLgorICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIGNvZGUgc2lnbmlmeWluZyBhIHBlcm1hbmVudCBlcnJvciAocmVzcG9uc2UKKyAgIGNvZGVzIGluIHRoZSByYW5nZSA1MDAtLTU5OSkgaXMgcmVjZWl2ZWQuCiAKIAogLi4gZXhjZXB0aW9uOjogZXJyb3JfcHJvdG8KIAotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgcmVwbHkgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIHRoYXQgZG9lcyBub3QKLSAgIGJlZ2luIHdpdGggYSBkaWdpdCBpbiB0aGUgcmFuZ2UgMS0tNS4KKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIHJlcGx5IGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciB0aGF0IGRvZXMgbm90IGZpdAorICAgdGhlIHJlc3BvbnNlIHNwZWNpZmljYXRpb25zIG9mIHRoZSBGaWxlIFRyYW5zZmVyIFByb3RvY29sLCBpLmUuIGJlZ2luIHdpdGggYQorICAgZGlnaXQgaW4gdGhlIHJhbmdlIDEtLTUuCiAKIAogLi4gZGF0YTo6IGFsbF9lcnJvcnMKQEAgLTc2LDcgKzExMyw3IEBACiAgICBUaGUgc2V0IG9mIGFsbCBleGNlcHRpb25zIChhcyBhIHR1cGxlKSB0aGF0IG1ldGhvZHMgb2YgOmNsYXNzOmBGVFBgCiAgICBpbnN0YW5jZXMgbWF5IHJhaXNlIGFzIGEgcmVzdWx0IG9mIHByb2JsZW1zIHdpdGggdGhlIEZUUCBjb25uZWN0aW9uIChhcwogICAgb3Bwb3NlZCB0byBwcm9ncmFtbWluZyBlcnJvcnMgbWFkZSBieSB0aGUgY2FsbGVyKS4gIFRoaXMgc2V0IGluY2x1ZGVzIHRoZQotICAgZm91ciBleGNlcHRpb25zIGxpc3RlZCBiZWxvdyBhcyB3ZWxsIGFzIDpleGM6YHNvY2tldC5lcnJvcmAgYW5kCisgICBmb3VyIGV4Y2VwdGlvbnMgbGlzdGVkIGFib3ZlIGFzIHdlbGwgYXMgOmV4Yzpgc29ja2V0LmVycm9yYCBhbmQKICAgIDpleGM6YElPRXJyb3JgLgogCiAKQEAgLTE2NCw5ICsyMDEsOSBAQAogCiAuLiBtZXRob2Q6OiBGVFAudm9pZGNtZChjb21tYW5kKQogCi0gICBTZW5kIGEgc2ltcGxlIGNvbW1hbmQgc3RyaW5nIHRvIHRoZSBzZXJ2ZXIgYW5kIGhhbmRsZSB0aGUgcmVzcG9uc2UuIFJldHVybgotICAgbm90aGluZyBpZiBhIHJlc3BvbnNlIGNvZGUgaW4gdGhlIHJhbmdlIDIwMC0tMjk5IGlzIHJlY2VpdmVkLiBSYWlzZSBhbiBleGNlcHRpb24KLSAgIG90aGVyd2lzZS4KKyAgIFNlbmQgYSBzaW1wbGUgY29tbWFuZCBzdHJpbmcgdG8gdGhlIHNlcnZlciBhbmQgaGFuZGxlIHRoZSByZXNwb25zZS4gIFJldHVybgorICAgbm90aGluZyBpZiBhIHJlc3BvbnNlIGNvZGUgY29ycmVzcG9uZGluZyB0byBzdWNjZXNzIChjb2RlcyBpbiB0aGUgcmFuZ2UKKyAgIDIwMC0tMjk5KSBpcyByZWNlaXZlZC4gIFJhaXNlIDpleGM6YGVycm9yX3JlcGx5YCBvdGhlcndpc2UuCiAKIAogLi4gbWV0aG9kOjogRlRQLnJldHJiaW5hcnkoY29tbWFuZCwgY2FsbGJhY2tbLCBtYXhibG9ja3NpemVbLCByZXN0XV0pCkBAIC0xODYsOSArMjIzLDExIEBACiAgICBSZXRyaWV2ZSBhIGZpbGUgb3IgZGlyZWN0b3J5IGxpc3RpbmcgaW4gQVNDSUkgdHJhbnNmZXIgbW9kZS4gICpjb21tYW5kKgogICAgc2hvdWxkIGJlIGFuIGFwcHJvcHJpYXRlIGBgUkVUUmBgIGNvbW1hbmQgKHNlZSA6bWV0aDpgcmV0cmJpbmFyeWApIG9yIGEKICAgIGNvbW1hbmQgc3VjaCBhcyBgYExJU1RgYCwgYGBOTFNUYGAgb3IgYGBNTFNEYGAgKHVzdWFsbHkganVzdCB0aGUgc3RyaW5nCi0gICBgYCdMSVNUJ2BgKS4gIFRoZSAqY2FsbGJhY2sqIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBsaW5lIHdpdGggYQotICAgc3RyaW5nIGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGxpbmUgd2l0aCB0aGUgdHJhaWxpbmcgQ1JMRiBzdHJpcHBlZC4KLSAgIFRoZSBkZWZhdWx0ICpjYWxsYmFjayogcHJpbnRzIHRoZSBsaW5lIHRvIGBgc3lzLnN0ZG91dGBgLgorICAgYGAnTElTVCdgYCkuICBgYExJU1RgYCByZXRyaWV2ZXMgYSBsaXN0IG9mIGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aG9zZSBmaWxlcy4KKyAgIGBgTkxTVGBgIHJldHJpZXZlcyBhIGxpc3Qgb2YgZmlsZSBuYW1lcy4gIE9uIHNvbWUgc2VydmVycywgYGBNTFNEYGAgcmV0cmlldmVzCisgICBhIG1hY2hpbmUgcmVhZGFibGUgbGlzdCBvZiBmaWxlcyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UgZmlsZXMuICBUaGUgKmNhbGxiYWNrKgorICAgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBlYWNoIGxpbmUgd2l0aCBhIHN0cmluZyBhcmd1bWVudCBjb250YWluaW5nIHRoZSBsaW5lIHdpdGgKKyAgIHRoZSB0cmFpbGluZyBDUkxGIHN0cmlwcGVkLiAgVGhlIGRlZmF1bHQgKmNhbGxiYWNrKiBwcmludHMgdGhlIGxpbmUgdG8gYGBzeXMuc3Rkb3V0YGAuCiAKIAogLi4gbWV0aG9kOjogRlRQLnNldF9wYXN2KGJvb2xlYW4pCkBAIC0xOTgsMTQgKzIzNywxNSBAQAogICAgaXQgaXMgb24gYnkgZGVmYXVsdC4pCiAKIAotLi4gbWV0aG9kOjogRlRQLnN0b3JiaW5hcnkoY29tbWFuZCwgZmlsZVssIGJsb2Nrc2l6ZSwgY2FsbGJhY2tdKQorLi4gbWV0aG9kOjogRlRQLnN0b3JiaW5hcnkoY29tbWFuZCwgZmlsZVssIGJsb2Nrc2l6ZSwgY2FsbGJhY2ssIHJlc3RdKQogCiAgICBTdG9yZSBhIGZpbGUgaW4gYmluYXJ5IHRyYW5zZmVyIG1vZGUuICAqY29tbWFuZCogc2hvdWxkIGJlIGFuIGFwcHJvcHJpYXRlCiAgICBgYFNUT1JgYCBjb21tYW5kOiBgYCJTVE9SIGZpbGVuYW1lImBgLiAqZmlsZSogaXMgYW4gb3BlbiBmaWxlIG9iamVjdCB3aGljaCBpcwogICAgcmVhZCB1bnRpbCBFT0YgdXNpbmcgaXRzIDptZXRoOmByZWFkYCBtZXRob2QgaW4gYmxvY2tzIG9mIHNpemUgKmJsb2Nrc2l6ZSogdG8KICAgIHByb3ZpZGUgdGhlIGRhdGEgdG8gYmUgc3RvcmVkLiAgVGhlICpibG9ja3NpemUqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDgxOTIuCiAgICAqY2FsbGJhY2sqIGlzIGFuIG9wdGlvbmFsIHNpbmdsZSBwYXJhbWV0ZXIgY2FsbGFibGUgdGhhdCBpcyBjYWxsZWQKLSAgIG9uIGVhY2ggYmxvY2sgb2YgZGF0YSBhZnRlciBpdCBpcyBzZW50LgorICAgb24gZWFjaCBibG9jayBvZiBkYXRhIGFmdGVyIGl0IGlzIHNlbnQuICpyZXN0KiBtZWFucyB0aGUgc2FtZSB0aGluZyBhcyBpbgorICAgdGhlIDptZXRoOmB0cmFuc2ZlcmNtZGAgbWV0aG9kLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMQogICAgICAgZGVmYXVsdCBmb3IgKmJsb2Nrc2l6ZSogYWRkZWQuCkBAIC0yMTMsNiArMjUzLDggQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICAqY2FsbGJhY2sqIHBhcmFtZXRlciBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICpyZXN0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKIC4uIG1ldGhvZDo6IEZUUC5zdG9ybGluZXMoY29tbWFuZCwgZmlsZVssIGNhbGxiYWNrXSkKIApAQCAtMjU2LDEwICsyOTgsMTAgQEAKIAogLi4gbWV0aG9kOjogRlRQLm5sc3QoYXJndW1lbnRbLCAuLi5dKQogCi0gICBSZXR1cm4gYSBsaXN0IG9mIGZpbGVzIGFzIHJldHVybmVkIGJ5IHRoZSBgYE5MU1RgYCBjb21tYW5kLiAgVGhlIG9wdGlvbmFsCi0gICAqYXJndW1lbnQqIGlzIGEgZGlyZWN0b3J5IHRvIGxpc3QgKGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgc2VydmVyIGRpcmVjdG9yeSkuCi0gICBNdWx0aXBsZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gcGFzcyBub24tc3RhbmRhcmQgb3B0aW9ucyB0byB0aGUgYGBOTFNUYGAKLSAgIGNvbW1hbmQuCisgICBSZXR1cm4gYSBsaXN0IG9mIGZpbGUgbmFtZXMgYXMgcmV0dXJuZWQgYnkgdGhlIGBgTkxTVGBgIGNvbW1hbmQuICBUaGUKKyAgIG9wdGlvbmFsICphcmd1bWVudCogaXMgYSBkaXJlY3RvcnkgdG8gbGlzdCAoZGVmYXVsdCBpcyB0aGUgY3VycmVudCBzZXJ2ZXIKKyAgIGRpcmVjdG9yeSkuICBNdWx0aXBsZSBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gcGFzcyBub24tc3RhbmRhcmQgb3B0aW9ucyB0bworICAgdGhlIGBgTkxTVGBgIGNvbW1hbmQuCiAKIAogLi4gbWV0aG9kOjogRlRQLmRpcihhcmd1bWVudFssIC4uLl0pCkBAIC0zMjksMyArMzcxLDI2IEBACiAgICA6bWV0aDpgY2xvc2VgIG9yIDptZXRoOmBxdWl0YCB5b3UgY2Fubm90IHJlb3BlbiB0aGUgY29ubmVjdGlvbiBieSBpc3N1aW5nCiAgICBhbm90aGVyIDptZXRoOmBsb2dpbmAgbWV0aG9kKS4KIAorCitGVFBfVExTIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLQorCis6Y2xhc3M6YEZUUF9UTFNgIGNsYXNzIGluaGVyaXRzIGZyb20gOmNsYXNzOmBGVFBgLCBkZWZpbmluZyB0aGVzZSBhZGRpdGlvbmFsIG9iamVjdHM6CisKKy4uIGF0dHJpYnV0ZTo6IEZUUF9UTFMuc3NsX3ZlcnNpb24KKworICAgVGhlIFNTTCB2ZXJzaW9uIHRvIHVzZSAoZGVmYXVsdHMgdG8gKlRMU3YxKikuCisKKy4uIG1ldGhvZDo6IEZUUF9UTFMuYXV0aCgpCisKKyAgIFNldCB1cCBzZWN1cmUgY29udHJvbCBjb25uZWN0aW9uIGJ5IHVzaW5nIFRMUyBvciBTU0wsIGRlcGVuZGluZyBvbiB3aGF0IHNwZWNpZmllZCBpbiA6bWV0aDpgc3NsX3ZlcnNpb25gIGF0dHJpYnV0ZS4KKworLi4gbWV0aG9kOjogRlRQX1RMUy5wcm90X3AoKQorCisgICBTZXQgdXAgc2VjdXJlIGRhdGEgY29ubmVjdGlvbi4KKworLi4gbWV0aG9kOjogRlRQX1RMUy5wcm90X2MoKQorCisgICBTZXQgdXAgY2xlYXIgdGV4dCBkYXRhIGNvbm5lY3Rpb24uCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKaW5kZXggZjI0YzQ2ZC4uNGI2M2M5ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CkBAIC03LDYgKzcsMjYgQEAKIFRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaGFzIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBidWlsdCBpbnRvIGl0IHRoYXQgYXJlIGFsd2F5cwogYXZhaWxhYmxlLiAgVGhleSBhcmUgbGlzdGVkIGhlcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgogCis9PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT0KKy4uICAgICAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgICAgICBCdWlsdC1pbiBGdW5jdGlvbnMgIC4uICAgICAgICAgICAgICAgICAuLgorPT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgYWJzYCAgICAgICAgICA6ZnVuYzpgZGl2bW9kYCAgICAgOmZ1bmM6YGlucHV0YCAgICAgICA6ZnVuYzpgb3BlbmAgICAgICAgOmZ1bmM6YHN0YXRpY21ldGhvZGAKKzpmdW5jOmBhbGxgICAgICAgICAgIDpmdW5jOmBlbnVtZXJhdGVgICA6ZnVuYzpgaW50YCAgICAgICAgIDpmdW5jOmBvcmRgICAgICAgICA6ZnVuYzpgc3RyYAorOmZ1bmM6YGFueWAgICAgICAgICAgOmZ1bmM6YGV2YWxgICAgICAgIDpmdW5jOmBpc2luc3RhbmNlYCAgOmZ1bmM6YHBvd2AgICAgICAgIDpmdW5jOmBzdW1gCis6ZnVuYzpgYmFzZXN0cmluZ2AgICA6ZnVuYzpgZXhlY2ZpbGVgICAgOmZ1bmM6YGlzc3ViY2xhc3NgICA6ZnVuYzpgcHJpbnRgICAgICAgOmZ1bmM6YHN1cGVyYAorOmZ1bmM6YGJpbmAgICAgICAgICAgOmZ1bmM6YGZpbGVgICAgICAgIDpmdW5jOmBpdGVyYCAgICAgICAgOmZ1bmM6YHByb3BlcnR5YCAgIDpmdW5jOmB0dXBsZWAKKzpmdW5jOmBib29sYCAgICAgICAgIDpmdW5jOmBmaWx0ZXJgICAgICA6ZnVuYzpgbGVuYCAgICAgICAgIDpmdW5jOmByYW5nZWAgICAgICA6ZnVuYzpgdHlwZWAKKzpmdW5jOmBieXRlYXJyYXlgICAgIDpmdW5jOmBmbG9hdGAgICAgICA6ZnVuYzpgbGlzdGAgICAgICAgIDpmdW5jOmByYXdfaW5wdXRgICA6ZnVuYzpgdW5pY2hyYAorOmZ1bmM6YGNhbGxhYmxlYCAgICAgOmZ1bmM6YGZvcm1hdGAgICAgIDpmdW5jOmBsb2NhbHNgICAgICAgOmZ1bmM6YHJlZHVjZWAgICAgIDpmdW5jOmB1bmljb2RlYAorOmZ1bmM6YGNocmAgICAgICAgICAgOmZ1bmM6YGZyb3plbnNldGAgIDpmdW5jOmBsb25nYCAgICAgICAgOmZ1bmM6YHJlbG9hZGAgICAgIDpmdW5jOmB2YXJzYAorOmZ1bmM6YGNsYXNzbWV0aG9kYCAgOmZ1bmM6YGdldGF0dHJgICAgIDpmdW5jOmBtYXBgICAgICAgICAgOmZ1bmM6YHJlcHJgICAgICAgIDpmdW5jOmB4cmFuZ2VgCis6ZnVuYzpgY21wYCAgICAgICAgICA6ZnVuYzpgZ2xvYmFsc2AgICAgOmZ1bmM6YG1heGAgICAgICAgICA6ZnVuYzpgcmV2ZXJzZWRgICAgOmZ1bmM6YHppcGAKKzpmdW5jOmBjb21waWxlYCAgICAgIDpmdW5jOmBoYXNhdHRyYCAgICA6ZnVuYzpgbWVtb3J5dmlld2AgIDpmdW5jOmByb3VuZGAgICAgICA6ZnVuYzpgX19pbXBvcnRfX2AKKzpmdW5jOmBjb21wbGV4YCAgICAgIDpmdW5jOmBoYXNoYCAgICAgICA6ZnVuYzpgbWluYCAgICAgICAgIDpmdW5jOmBzZXRgICAgICAgICA6ZnVuYzpgYXBwbHlgCis6ZnVuYzpgZGVsYXR0cmAgICAgICA6ZnVuYzpgaGVscGAgICAgICAgOmZ1bmM6YG5leHRgICAgICAgICA6ZnVuYzpgc2V0YXR0cmAgICAgOmZ1bmM6YGJ1ZmZlcmAKKzpmdW5jOmBkaWN0YCAgICAgICAgIDpmdW5jOmBoZXhgICAgICAgICA6ZnVuYzpgb2JqZWN0YCAgICAgIDpmdW5jOmBzbGljZWAgICAgICA6ZnVuYzpgY29lcmNlYAorOmZ1bmM6YGRpcmAgICAgICAgICAgOmZ1bmM6YGlkYCAgICAgICAgIDpmdW5jOmBvY3RgICAgICAgICAgOmZ1bmM6YHNvcnRlZGAgICAgIDpmdW5jOmBpbnRlcm5gCis9PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT0KIAogLi4gZnVuY3Rpb246OiBhYnMoeCkKIApAQCAtNzgsNiArOTgsMzIgQEAKICAgICAgIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOmNvbnN0OmBGYWxzZWAuCiAKIAorLi4gZnVuY3Rpb246OiBieXRlYXJyYXkoW3NvdXJjZVssIGVuY29kaW5nWywgZXJyb3JzXV1dKQorCisgICBSZXR1cm4gYSBuZXcgYXJyYXkgb2YgYnl0ZXMuICBUaGUgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGUgaXMgYSBtdXRhYmxlCisgICBzZXF1ZW5jZSBvZiBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LiAgSXQgaGFzIG1vc3Qgb2YgdGhlIHVzdWFsCisgICBtZXRob2RzIG9mIG11dGFibGUgc2VxdWVuY2VzLCBkZXNjcmliZWQgaW4gOnJlZjpgdHlwZXNzZXEtbXV0YWJsZWAsIGFzIHdlbGwKKyAgIGFzIG1vc3QgbWV0aG9kcyB0aGF0IHRoZSA6Y2xhc3M6YHN0cmAgdHlwZSBoYXMsIHNlZSA6cmVmOmBzdHJpbmctbWV0aG9kc2AuCisKKyAgIFRoZSBvcHRpb25hbCAqc291cmNlKiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYXJyYXkgaW4gYSBmZXcKKyAgIGRpZmZlcmVudCB3YXlzOgorCisgICAqIElmIGl0IGlzIGEgKnN0cmluZyosIHlvdSBtdXN0IGFsc28gZ2l2ZSB0aGUgKmVuY29kaW5nKiAoYW5kIG9wdGlvbmFsbHksCisgICAgICplcnJvcnMqKSBwYXJhbWV0ZXJzOyA6ZnVuYzpgYnl0ZWFycmF5YCB0aGVuIGNvbnZlcnRzIHRoZSBzdHJpbmcgdG8KKyAgICAgYnl0ZXMgdXNpbmcgOm1ldGg6YHN0ci5lbmNvZGVgLgorCisgICAqIElmIGl0IGlzIGFuICppbnRlZ2VyKiwgdGhlIGFycmF5IHdpbGwgaGF2ZSB0aGF0IHNpemUgYW5kIHdpbGwgYmUKKyAgICAgaW5pdGlhbGl6ZWQgd2l0aCBudWxsIGJ5dGVzLgorCisgICAqIElmIGl0IGlzIGFuIG9iamVjdCBjb25mb3JtaW5nIHRvIHRoZSAqYnVmZmVyKiBpbnRlcmZhY2UsIGEgcmVhZC1vbmx5IGJ1ZmZlcgorICAgICBvZiB0aGUgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBieXRlcyBhcnJheS4KKworICAgKiBJZiBpdCBpcyBhbiAqaXRlcmFibGUqLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGludGVnZXJzIGluIHRoZSByYW5nZQorICAgICBgYDAgPD0geCA8IDI1NmBgLCB3aGljaCBhcmUgdXNlZCBhcyB0aGUgaW5pdGlhbCBjb250ZW50cyBvZiB0aGUgYXJyYXkuCisKKyAgIFdpdGhvdXQgYW4gYXJndW1lbnQsIGFuIGFycmF5IG9mIHNpemUgMCBpcyBjcmVhdGVkLgorCisKIC4uIGZ1bmN0aW9uOjogY2FsbGFibGUob2JqZWN0KQogCiAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgKm9iamVjdCogYXJndW1lbnQgYXBwZWFycyBjYWxsYWJsZSwKQEAgLTE3MywxMSArMjE5LDEwIEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBXaGVuIGNvbXBpbGluZyBhIHN0cmluZyB3aXRoIG11bHRpLWxpbmUgY29kZSwgbGluZSBlbmRpbmdzIG11c3QgYmUKLSAgICAgIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIG5ld2xpbmUgY2hhcmFjdGVyIChgYCdcbidgYCksIGFuZCB0aGUgaW5wdXQgbXVzdAotICAgICAgYmUgdGVybWluYXRlZCBieSBhdCBsZWFzdCBvbmUgbmV3bGluZSBjaGFyYWN0ZXIuICBJZiBsaW5lIGVuZGluZ3MgYXJlCi0gICAgICByZXByZXNlbnRlZCBieSBgYCdcclxuJ2BgLCB1c2UgOm1ldGg6YHN0ci5yZXBsYWNlYCB0byBjaGFuZ2UgdGhlbSBpbnRvCi0gICAgICBgYCdcbidgYC4KKyAgICAgIFdoZW4gY29tcGlsaW5nIGEgc3RyaW5nIHdpdGggbXVsdGktbGluZSBjb2RlIGluIGBgJ3NpbmdsZSdgYCBvcgorICAgICAgYGAnZXZhbCdgYCBtb2RlLCBpbnB1dCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgYXQgbGVhc3Qgb25lIG5ld2xpbmUKKyAgICAgIGNoYXJhY3Rlci4gIFRoaXMgaXMgdG8gZmFjaWxpdGF0ZSBkZXRlY3Rpb24gb2YgaW5jb21wbGV0ZSBhbmQgY29tcGxldGUKKyAgICAgIHN0YXRlbWVudHMgaW4gdGhlIDptb2Q6YGNvZGVgIG1vZHVsZS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjMKICAgICAgIFRoZSAqZmxhZ3MqIGFuZCAqZG9udF9pbmhlcml0KiBhcmd1bWVudHMgd2VyZSBhZGRlZC4KQEAgLTE4NSw2ICsyMzAsMTAgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICBTdXBwb3J0IGZvciBjb21waWxpbmcgQVNUIG9iamVjdHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBbGxvd2VkIHVzZSBvZiBXaW5kb3dzIGFuZCBNYWMgbmV3bGluZXMuICBBbHNvIGlucHV0IGluIGBgJ2V4ZWMnYGAgbW9kZQorICAgICAgZG9lcyBub3QgaGF2ZSB0byBlbmQgaW4gYSBuZXdsaW5lIGFueW1vcmUuCisKIAogLi4gZnVuY3Rpb246OiBjb21wbGV4KFtyZWFsWywgaW1hZ11dKQogCkBAIC0zNDQsNiArMzkzLDkgQEAKICAgIHJldHVybnMgdGhlIGN1cnJlbnQgZ2xvYmFsIGFuZCBsb2NhbCBkaWN0aW9uYXJ5LCByZXNwZWN0aXZlbHksIHdoaWNoIG1heSBiZQogICAgdXNlZnVsIHRvIHBhc3MgYXJvdW5kIGZvciB1c2UgYnkgOmZ1bmM6YGV2YWxgIG9yIDpmdW5jOmBleGVjZmlsZWAuCiAKKyAgIFNlZSA6ZnVuYzpgYXN0LmxpdGVyYWxfZXZhbGAgZm9yIGEgZnVuY3Rpb24gdGhhdCBjYW4gc2FmZWx5IGV2YWx1YXRlIHN0cmluZ3MKKyAgIHdpdGggZXhwcmVzc2lvbnMgY29udGFpbmluZyBvbmx5IGxpdGVyYWxzLgorCiAKIC4uIGZ1bmN0aW9uOjogZXhlY2ZpbGUoZmlsZW5hbWVbLCBnbG9iYWxzWywgbG9jYWxzXV0pCiAKQEAgLTQ2Miw3ICs1MTQsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGF0dHIob2JqZWN0LCBuYW1lWywgZGVmYXVsdF0pCiAKLSAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGF0dHJpYnV0ZWQgb2YgKm9iamVjdCouICAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4KKyAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkIGF0dHJpYnV0ZSBvZiAqb2JqZWN0Ki4gICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLgogICAgSWYgdGhlIHN0cmluZyBpcyB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZXMsIHRoZSByZXN1bHQgaXMgdGhlCiAgICB2YWx1ZSBvZiB0aGF0IGF0dHJpYnV0ZS4gIEZvciBleGFtcGxlLCBgYGdldGF0dHIoeCwgJ2Zvb2JhcicpYGAgaXMgZXF1aXZhbGVudCB0bwogICAgYGB4LmZvb2JhcmBgLiAgSWYgdGhlIG5hbWVkIGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdCwgKmRlZmF1bHQqIGlzIHJldHVybmVkIGlmCkBAIC02ODksNiArNzQxLDEzIEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgb3B0aW9uYWwgKmtleSogYXJndW1lbnQuCiAKIAorLi4gZnVuY3Rpb246OiBtZW1vcnl2aWV3KG9iaikKKyAgIDpub2luZGV4OgorCisgICBSZXR1cm4gYSAibWVtb3J5IHZpZXciIG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50LiAgU2VlCisgICA6cmVmOmB0eXBlbWVtb3J5dmlld2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwogLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGVbLCBhcmdzLi4uXVtrZXldKQogCiAgICBXaXRoIGEgc2luZ2xlIGFyZ3VtZW50ICppdGVyYWJsZSosIHJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBvZiBhIG5vbi1lbXB0eQpAQCAtMTA4OCw2ICsxMTQ3LDE0IEBACiAgICBleGFtcGxlLCBgYHJvdW5kKDAuNSlgYCBpcyBgYDEuMGBgIGFuZCBgYHJvdW5kKC0wLjUpYGAgaXMgYGAtMS4wYGApLgogCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYmVoYXZpb3Igb2YgOmZ1bmM6YHJvdW5kYCBmb3IgZmxvYXRzIGNhbiBiZSBzdXJwcmlzaW5nOiBmb3IgZXhhbXBsZSwKKyAgICAgIGBgcm91bmQoMi42NzUsIDIpYGAgZ2l2ZXMgYGAyLjY3YGAgaW5zdGVhZCBvZiB0aGUgZXhwZWN0ZWQgYGAyLjY4YGAuCisgICAgICBUaGlzIGlzIG5vdCBhIGJ1ZzogaXQncyBhIHJlc3VsdCBvZiB0aGUgZmFjdCB0aGF0IG1vc3QgZGVjaW1hbCBmcmFjdGlvbnMKKyAgICAgIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBmbG9hdC4gIFNlZSA6cmVmOmB0dXQtZnAtaXNzdWVzYCBmb3IKKyAgICAgIG1vcmUgaW5mb3JtYXRpb24uCisKIC4uIGZ1bmN0aW9uOjogc2V0KFtpdGVyYWJsZV0pCiAgICA6bm9pbmRleDoKIApAQCAtMTE0OCw5ICsxMjE1LDggQEAKICAgIEluIGdlbmVyYWwsIHRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGNvbnZlcnNpb24gcHJvY2Vzc2VzIGFyZSBtdWNoIGZhc3RlcgogICAgdGhhbiBzcGVjaWZ5aW5nIGFuIGVxdWl2YWxlbnQgKmNtcCogZnVuY3Rpb24uICBUaGlzIGlzIGJlY2F1c2UgKmNtcCogaXMKICAgIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCBsaXN0IGVsZW1lbnQgd2hpbGUgKmtleSogYW5kICpyZXZlcnNlKiB0b3VjaAotICAgZWFjaCBlbGVtZW50IG9ubHkgb25jZS4gIFRvIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSoKLSAgIGZ1bmN0aW9uLCBzZWUgdGhlIGBDbXBUb0tleSByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2sKLSAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2NTMvPmBfXC4KKyAgIGVhY2ggZWxlbWVudCBvbmx5IG9uY2UuICBVc2UgOmZ1bmM6YGZ1bmN0b29scy5jbXBfdG9fa2V5YCB0byBjb252ZXJ0IGFuCisgICBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi4KIAogICAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIGBTb3J0aW5nIEhvd1RvCiAgICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfXC4KQEAgLTEyMDcsMTAgKzEyNzMsMTMgQEAKIAogICAgU3VtcyAqc3RhcnQqIGFuZCB0aGUgaXRlbXMgb2YgYW4gKml0ZXJhYmxlKiBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHJldHVybnMgdGhlCiAgICB0b3RhbC4gICpzdGFydCogZGVmYXVsdHMgdG8gYGAwYGAuIFRoZSAqaXRlcmFibGUqJ3MgaXRlbXMgYXJlIG5vcm1hbGx5IG51bWJlcnMsCi0gICBhbmQgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHN0cmluZ3MuICBUaGUgZmFzdCwgY29ycmVjdCB3YXkgdG8gY29uY2F0ZW5hdGUgYQotICAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpcyBieSBjYWxsaW5nIGBgJycuam9pbihzZXF1ZW5jZSlgYC4gTm90ZSB0aGF0Ci0gICBgYHN1bShyYW5nZShuKSwgbSlgYCBpcyBlcXVpdmFsZW50IHRvIGBgcmVkdWNlKG9wZXJhdG9yLmFkZCwgcmFuZ2UobiksIG0pYGAKLSAgIFRvIGFkZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgd2l0aCBleHRlbmRlZCBwcmVjaXNpb24sIHNlZSA6ZnVuYzpgbWF0aC5mc3VtYFwuCisgICBhbmQgdGhlIHN0YXJ0IHZhbHVlIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGEgc3RyaW5nLgorCisgICBGb3Igc29tZSB1c2UgY2FzZXMsIHRoZXJlIGFyZSBnb29kIGFsdGVybmF0aXZlcyB0byA6ZnVuYzpgc3VtYC4KKyAgIFRoZSBwcmVmZXJyZWQsIGZhc3Qgd2F5IHRvIGNvbmNhdGVuYXRlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpcyBieSBjYWxsaW5nCisgICBgYCcnLmpvaW4oc2VxdWVuY2UpYGAuICBUbyBhZGQgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHdpdGggZXh0ZW5kZWQgcHJlY2lzaW9uLAorICAgc2VlIDpmdW5jOmBtYXRoLmZzdW1gXC4gIFRvIGNvbmNhdGVuYXRlIGEgc2VyaWVzIG9mIGl0ZXJhYmxlcywgY29uc2lkZXIgdXNpbmcKKyAgIDpmdW5jOmBpdGVydG9vbHMuY2hhaW5gLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIApAQCAtMTM5NCw4ICsxNDYzLDggQEAKICAgICAgIHJlc3RyaWN0cyBhbGwgYXJndW1lbnRzIHRvIG5hdGl2ZSBDIGxvbmdzICgic2hvcnQiIFB5dGhvbiBpbnRlZ2VycyksIGFuZAogICAgICAgYWxzbyByZXF1aXJlcyB0aGF0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZml0IGluIGEgbmF0aXZlIEMgbG9uZy4gIElmIGEKICAgICAgIGxhcmdlciByYW5nZSBpcyBuZWVkZWQsIGFuIGFsdGVybmF0ZSB2ZXJzaW9uIGNhbiBiZSBjcmFmdGVkIHVzaW5nIHRoZQotICAgICAgOm1vZDpgaXRlcnRvb2xzYCBtb2R1bGU6IGBgdGFrZXdoaWxlKGxhbWJkYSB4OiB4PHN0b3AsIChzdGFydCtpKnN0ZXAKLSAgICAgIGZvciBpIGluIGNvdW50KCkpKWBgLgorICAgICAgOm1vZDpgaXRlcnRvb2xzYCBtb2R1bGU6IGBgaXNsaWNlKGNvdW50KHN0YXJ0LCBzdGVwKSwKKyAgICAgIChzdG9wLXN0YXJ0K3N0ZXAtMSkvL3N0ZXApYGAuCiAKIAogLi4gZnVuY3Rpb246OiB6aXAoW2l0ZXJhYmxlLCAuLi5dKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggYTA5ZDNjZi4uNzg3YzAwMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC0xNSw4ICsxNSw1NiBAQAogb3IgcmV0dXJuIG90aGVyIGZ1bmN0aW9ucy4gSW4gZ2VuZXJhbCwgYW55IGNhbGxhYmxlIG9iamVjdCBjYW4gYmUgdHJlYXRlZCBhcyBhCiBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgbW9kdWxlLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBmdW5jdG9vbHMgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvZnVuY3Rvb2xzLnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSA6bW9kOmBmdW5jdG9vbHNgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCisuLiAgZnVuY3Rpb246OiBjbXBfdG9fa2V5KGZ1bmMpCisKKyAgIFRyYW5zZm9ybSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBhIGtleS1mdW5jdGlvbi4gIFVzZWQgd2l0aAorICAgdG9vbHMgdGhhdCBhY2NlcHQga2V5IGZ1bmN0aW9ucyAoc3VjaCBhcyA6ZnVuYzpgc29ydGVkYCwgOmZ1bmM6YG1pbmAsCisgICA6ZnVuYzpgbWF4YCwgOmZ1bmM6YGhlYXBxLm5sYXJnZXN0YCwgOmZ1bmM6YGhlYXBxLm5zbWFsbGVzdGAsCisgICA6ZnVuYzpgaXRlcnRvb2xzLmdyb3VwYnlgKS4gIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYXMgYSB0cmFuc2l0aW9uCisgICB0b29sIGZvciBwcm9ncmFtcyBiZWluZyBjb252ZXJ0ZWQgdG8gUHkzLnggd2hlcmUgY29tcGFyaXNvbiBmdW5jdGlvbnMgYXJlIG5vCisgICBsb25nZXIgc3VwcG9ydGVkLgorCisgICBBIGNvbXBhcmUgZnVuY3Rpb24gaXMgYW55IGNhbGxhYmxlIHRoYXQgYWNjZXB0IHR3byBhcmd1bWVudHMsIGNvbXBhcmVzIHRoZW0sCisgICBhbmQgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciBmb3IgbGVzcy10aGFuLCB6ZXJvIGZvciBlcXVhbGl0eSwgb3IgYSBwb3NpdGl2ZQorICAgbnVtYmVyIGZvciBncmVhdGVyLXRoYW4uICBBIGtleSBmdW5jdGlvbiBpcyBhIGNhbGxhYmxlIHRoYXQgYWNjZXB0cyBvbmUKKyAgIGFyZ3VtZW50IGFuZCByZXR1cm5zIGFub3RoZXIgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIHBvc2l0aW9uIGluIHRoZSBkZXNpcmVkCisgICBjb2xsYXRpb24gc2VxdWVuY2UuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICAgc29ydGVkKGl0ZXJhYmxlLCBrZXk9Y21wX3RvX2tleShsb2NhbGUuc3RyY29sbCkpICAjIGxvY2FsZS1hd2FyZSBzb3J0IG9yZGVyCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisuLiBmdW5jdGlvbjo6IHRvdGFsX29yZGVyaW5nKGNscykKKworICAgR2l2ZW4gYSBjbGFzcyBkZWZpbmluZyBvbmUgb3IgbW9yZSByaWNoIGNvbXBhcmlzb24gb3JkZXJpbmcgbWV0aG9kcywgdGhpcworICAgY2xhc3MgZGVjb3JhdG9yIHN1cHBsaWVzIHRoZSByZXN0LiAgVGhpcyBzaW1wbGlmaWVzIHRoZSBlZmZvcnQgaW52b2x2ZWQKKyAgIGluIHNwZWNpZnlpbmcgYWxsIG9mIHRoZSBwb3NzaWJsZSByaWNoIGNvbXBhcmlzb24gb3BlcmF0aW9uczoKKworICAgVGhlIGNsYXNzIG11c3QgZGVmaW5lIG9uZSBvZiA6bWV0aDpgX19sdF9fYCwgOm1ldGg6YF9fbGVfX2AsCisgICA6bWV0aDpgX19ndF9fYCwgb3IgOm1ldGg6YF9fZ2VfX2AuCisgICBJbiBhZGRpdGlvbiwgdGhlIGNsYXNzIHNob3VsZCBzdXBwbHkgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBAdG90YWxfb3JkZXJpbmcKKyAgICAgICBjbGFzcyBTdHVkZW50OgorICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKKyAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpIDwKKyAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIC4uIGZ1bmN0aW9uOjogcmVkdWNlKGZ1bmN0aW9uLCBpdGVyYWJsZVssIGluaXRpYWxpemVyXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2MucnN0IGIvRG9jL2xpYnJhcnkvZ2MucnN0CmluZGV4IDcwNzQ3NzYuLjgwYTJkOTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2djLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nYy5yc3QKQEAgLTE0MCw2ICsxNDAsMzEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKKy4uIGZ1bmN0aW9uOjogaXNfdHJhY2tlZChvYmopCisKKyAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGN1cnJlbnRseSB0cmFja2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciwKKyAgIEZhbHNlIG90aGVyd2lzZS4gIEFzIGEgZ2VuZXJhbCBydWxlLCBpbnN0YW5jZXMgb2YgYXRvbWljIHR5cGVzIGFyZW4ndAorICAgdHJhY2tlZCBhbmQgaW5zdGFuY2VzIG9mIG5vbi1hdG9taWMgdHlwZXMgKGNvbnRhaW5lcnMsIHVzZXItZGVmaW5lZAorICAgb2JqZWN0cy4uLikgYXJlLiAgSG93ZXZlciwgc29tZSB0eXBlLXNwZWNpZmljIG9wdGltaXphdGlvbnMgY2FuIGJlIHByZXNlbnQKKyAgIGluIG9yZGVyIHRvIHN1cHByZXNzIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBmb290cHJpbnQgb2Ygc2ltcGxlIGluc3RhbmNlcworICAgKGUuZy4gZGljdHMgY29udGFpbmluZyBvbmx5IGF0b21pYyBrZXlzIGFuZCB2YWx1ZXMpOjoKKworICAgICAgPj4+IGdjLmlzX3RyYWNrZWQoMCkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZCgiYSIpCisgICAgICBGYWxzZQorICAgICAgPj4+IGdjLmlzX3RyYWNrZWQoW10pCisgICAgICBUcnVlCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZCh7fSkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZCh7ImEiOiAxfSkKKyAgICAgIEZhbHNlCisgICAgICA+Pj4gZ2MuaXNfdHJhY2tlZCh7ImEiOiBbXX0pCisgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIFRoZSBmb2xsb3dpbmcgdmFyaWFibGUgaXMgcHJvdmlkZWQgZm9yIHJlYWQtb25seSBhY2Nlc3MgKHlvdSBjYW4gbXV0YXRlIGl0cwogdmFsdWUgYnV0IHNob3VsZCBub3QgcmViaW5kIGl0KToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdCBiL0RvYy9saWJyYXJ5L2dldG9wdC5yc3QKaW5kZXggOTI3OTUzYy4uNGQ2NWM3OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXRvcHQucnN0CkBAIC0xLDExICsxLDE3IEBACiAKLTptb2Q6YGdldG9wdGAgLS0tIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzptb2Q6YGdldG9wdGAgLS0tIEMtc3R5bGUgcGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IGdldG9wdAogICAgOnN5bm9wc2lzOiBQb3J0YWJsZSBwYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zOyBzdXBwb3J0IGJvdGggc2hvcnQgYW5kIGxvbmcgb3B0aW9uCiAgICAgICAgICAgICAgIG5hbWVzLgogCisuLiBub3RlOjoKKyAgIFRoZSA6bW9kOmBnZXRvcHRgIG1vZHVsZSBpcyBhIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMgd2hvc2UgQVBJIGlzCisgICBkZXNpZ25lZCB0byBiZSBmYW1pbGlhciB0byB1c2VycyBvZiB0aGUgQyA6Y2Z1bmM6YGdldG9wdGAgZnVuY3Rpb24uIFVzZXJzIHdobworICAgYXJlIHVuZmFtaWxpYXIgd2l0aCB0aGUgQyA6Y2Z1bmM6YGdldG9wdGAgZnVuY3Rpb24gb3Igd2hvIHdvdWxkIGxpa2UgdG8gd3JpdGUKKyAgIGxlc3MgY29kZSBhbmQgZ2V0IGJldHRlciBoZWxwIGFuZCBlcnJvciBtZXNzYWdlcyBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlCisgICA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGluc3RlYWQuCiAKIFRoaXMgbW9kdWxlIGhlbHBzIHNjcmlwdHMgdG8gcGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaW4gYGBzeXMuYXJndmBgLgogSXQgc3VwcG9ydHMgdGhlIHNhbWUgY29udmVudGlvbnMgYXMgdGhlIFVuaXggOmNmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uIChpbmNsdWRpbmcKQEAgLTM1LDE0ICs0MSwxNCBAQAogICAgICAgbm9uLUdOVSBVbml4IHN5c3RlbXMgd29yay4KIAogICAgKmxvbmdfb3B0aW9ucyosIGlmIHNwZWNpZmllZCwgbXVzdCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUKLSAgIGxvbmcgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUgc3VwcG9ydGVkLiAgVGhlIGxlYWRpbmcgYGAnLWBgXCBgYC0nYGAKKyAgIGxvbmcgb3B0aW9ucyB3aGljaCBzaG91bGQgYmUgc3VwcG9ydGVkLiAgVGhlIGxlYWRpbmcgYGAnLS0nYGAKICAgIGNoYXJhY3RlcnMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgb3B0aW9uIG5hbWUuICBMb25nIG9wdGlvbnMgd2hpY2gKICAgIHJlcXVpcmUgYW4gYXJndW1lbnQgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gKGBgJz0nYGApLiAgT3B0aW9uYWwKICAgIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZC4gIFRvIGFjY2VwdCBvbmx5IGxvbmcgb3B0aW9ucywgKm9wdGlvbnMqIHNob3VsZAogICAgYmUgYW4gZW1wdHkgc3RyaW5nLiAgTG9uZyBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUgY2FuIGJlIHJlY29nbml6ZWQgc28KICAgIGxvbmcgYXMgdGhleSBwcm92aWRlIGEgcHJlZml4IG9mIHRoZSBvcHRpb24gbmFtZSB0aGF0IG1hdGNoZXMgZXhhY3RseSBvbmUgb2YKICAgIHRoZSBhY2NlcHRlZCBvcHRpb25zLiAgRm9yIGV4YW1wbGUsIGlmICpsb25nX29wdGlvbnMqIGlzIGBgWydmb28nLCAnZnJvYiddYGAsCi0gICB0aGUgb3B0aW9uIDpvcHRpb246YC0tZm9gIHdpbGwgbWF0Y2ggYXMgOm9wdGlvbjpgLS1mb29gLCBidXQgOm9wdGlvbjpgLS1mYAorICAgdGhlIG9wdGlvbiBgYC0tZm9gYCB3aWxsIG1hdGNoIGFzIGBgLS1mb29gYCwgYnV0IGBgLS1mYGAKICAgIHdpbGwgbm90IG1hdGNoIHVuaXF1ZWx5LCBzbyA6ZXhjOmBHZXRvcHRFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKICAgIFRoZSByZXR1cm4gdmFsdWUgY29uc2lzdHMgb2YgdHdvIGVsZW1lbnRzOiB0aGUgZmlyc3QgaXMgYSBsaXN0IG9mIGBgKG9wdGlvbiwKQEAgLTUwLDcgKzU2LDcgQEAKICAgIG9wdGlvbiBsaXN0IHdhcyBzdHJpcHBlZCAodGhpcyBpcyBhIHRyYWlsaW5nIHNsaWNlIG9mICphcmdzKikuICBFYWNoCiAgICBvcHRpb24tYW5kLXZhbHVlIHBhaXIgcmV0dXJuZWQgaGFzIHRoZSBvcHRpb24gYXMgaXRzIGZpcnN0IGVsZW1lbnQsIHByZWZpeGVkCiAgICB3aXRoIGEgaHlwaGVuIGZvciBzaG9ydCBvcHRpb25zIChlLmcuLCBgYCcteCdgYCkgb3IgdHdvIGh5cGhlbnMgZm9yIGxvbmcKLSAgIG9wdGlvbnMgKGUuZy4sIGBgJy1gYFwgYGAtbG9uZy1vcHRpb24nYGApLCBhbmQgdGhlIG9wdGlvbiBhcmd1bWVudCBhcyBpdHMKKyAgIG9wdGlvbnMgKGUuZy4sIGBgJy0tbG9uZy1vcHRpb24nYGApLCBhbmQgdGhlIG9wdGlvbiBhcmd1bWVudCBhcyBpdHMKICAgIHNlY29uZCBlbGVtZW50LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIG9wdGlvbiBoYXMgbm8gYXJndW1lbnQuICBUaGUKICAgIG9wdGlvbnMgb2NjdXIgaW4gdGhlIGxpc3QgaW4gdGhlIHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGZvdW5kLCB0aHVzCiAgICBhbGxvd2luZyBtdWx0aXBsZSBvY2N1cnJlbmNlcy4gIExvbmcgYW5kIHNob3J0IG9wdGlvbnMgbWF5IGJlIG1peGVkLgpAQCAtNjMsNyArNjksNyBAQAogICAgaW50ZXJtaXhlZC4gVGhlIDpmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uIHN0b3BzIHByb2Nlc3Npbmcgb3B0aW9ucyBhcyBzb29uIGFzIGEKICAgIG5vbi1vcHRpb24gYXJndW1lbnQgaXMgZW5jb3VudGVyZWQuCiAKLSAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG9wdGlvbiBzdHJpbmcgaXMgJysnLCBvciBpZiB0aGUgZW52aXJvbm1lbnQKKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG9wdGlvbiBzdHJpbmcgaXMgYGAnKydgYCwgb3IgaWYgdGhlIGVudmlyb25tZW50CiAgICB2YXJpYWJsZSA6ZW52dmFyOmBQT1NJWExZX0NPUlJFQ1RgIGlzIHNldCwgdGhlbiBvcHRpb24gcHJvY2Vzc2luZyBzdG9wcyBhcwogICAgc29vbiBhcyBhIG5vbi1vcHRpb24gYXJndW1lbnQgaXMgZW5jb3VudGVyZWQuCiAKQEAgLTE0Miw5ICsxNDgsMjEgQEAKICAgIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgbWFpbigpCiAKK05vdGUgdGhhdCBhbiBlcXVpdmFsZW50IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgY291bGQgYmUgcHJvZHVjZWQgd2l0aCBsZXNzIGNvZGUKK2FuZCBtb3JlIGluZm9ybWF0aXZlIGhlbHAgYW5kIGVycm9yIG1lc3NhZ2VzIGJ5IHVzaW5nIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlOjoKKworICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0cHV0JykKKyAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIGRlc3Q9J3ZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgICAgIyAuLi4gZG8gc29tZXRoaW5nIHdpdGggYXJncy5vdXRwdXQgLi4uCisgICAgICAgIyAuLi4gZG8gc29tZXRoaW5nIHdpdGggYXJncy52ZXJib3NlIC4uCiAKIC4uIHNlZWFsc286OgogCi0gICBNb2R1bGUgOm1vZDpgb3B0cGFyc2VgCi0gICAgICBNb3JlIG9iamVjdC1vcmllbnRlZCBjb21tYW5kIGxpbmUgb3B0aW9uIHBhcnNpbmcuCisgICBNb2R1bGUgOm1vZDpgYXJncGFyc2VgCisgICAgICBBbHRlcm5hdGl2ZSBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBhcmd1bWVudCBwYXJzaW5nIGxpYnJhcnkuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dsb2IucnN0IGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKaW5kZXggNWYyODQ4MC4uMWVmOWEzMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKQEAgLTE2LDYgKzE2LDEwIEBACiBzdWJzaGVsbC4gIChGb3IgdGlsZGUgYW5kIHNoZWxsIHZhcmlhYmxlIGV4cGFuc2lvbiwgdXNlCiA6ZnVuYzpgb3MucGF0aC5leHBhbmR1c2VyYCBhbmQgOmZ1bmM6YG9zLnBhdGguZXhwYW5kdmFyc2AuKQogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBnbG9iIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9nbG9iLnB5P3ZpZXc9bWFya3VwPmBfCiAKIC4uIGZ1bmN0aW9uOjogZ2xvYihwYXRobmFtZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ3JwLnJzdCBiL0RvYy9saWJyYXJ5L2dycC5yc3QKaW5kZXggYTcxYzMwOC4uZjIwYTIxMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ3JwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ncnAucnN0CkBAIC0zMSw3ICszMSw5IEBACiBUaGUgZ2lkIGlzIGFuIGludGVnZXIsIG5hbWUgYW5kIHBhc3N3b3JkIGFyZSBzdHJpbmdzLCBhbmQgdGhlIG1lbWJlciBsaXN0IGlzIGEKIGxpc3Qgb2Ygc3RyaW5ncy4gKE5vdGUgdGhhdCBtb3N0IHVzZXJzIGFyZSBub3QgZXhwbGljaXRseSBsaXN0ZWQgYXMgbWVtYmVycyBvZgogdGhlIGdyb3VwIHRoZXkgYXJlIGluIGFjY29yZGluZyB0byB0aGUgcGFzc3dvcmQgZGF0YWJhc2UuICBDaGVjayBib3RoIGRhdGFiYXNlcwotdG8gZ2V0IGNvbXBsZXRlIG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uKQordG8gZ2V0IGNvbXBsZXRlIG1lbWJlcnNoaXAgaW5mb3JtYXRpb24uICBBbHNvIG5vdGUgdGhhdCBhIGBgZ3JfbmFtZWBgIHRoYXQKK3N0YXJ0cyB3aXRoIGEgYGArYGAgb3IgYGAtYGAgaXMgbGlrZWx5IHRvIGJlIGEgWVAvTklTIHJlZmVyZW5jZSBhbmQgbWF5IG5vdCBiZQorYWNjZXNzaWJsZSB2aWEgOmZ1bmM6YGdldGdybmFtYCBvciA6ZnVuYzpgZ2V0Z3JnaWRgLikKIAogSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nemlwLnJzdCBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CmluZGV4IDM0OTMxNjIuLjE3ODk2YzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2d6aXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CkBAIC0yNCw3ICsyNCw3IEBACiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBpdGVtczoKIAogCi0uLiBjbGFzczo6IEd6aXBGaWxlKFtmaWxlbmFtZVssIG1vZGVbLCBjb21wcmVzc2xldmVsWywgZmlsZW9ial1dXV0pCisuLiBjbGFzczo6IEd6aXBGaWxlKFtmaWxlbmFtZVssIG1vZGVbLCBjb21wcmVzc2xldmVsWywgZmlsZW9ialssIG10aW1lXV1dXV0pCiAKICAgIENvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBHemlwRmlsZWAgY2xhc3MsIHdoaWNoIHNpbXVsYXRlcyBtb3N0IG9mIHRoZSBtZXRob2RzCiAgICBvZiBhIGZpbGUgb2JqZWN0LCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIDptZXRoOmByZWFkaW50b2AgYW5kCkBAIC01MiwxMyArNTIsMjkgQEAKICAgIGxldmVsIG9mIGNvbXByZXNzaW9uOyBgYDFgYCBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sIGFuZAogICAgYGA5YGAgaXMgc2xvd2VzdCBhbmQgcHJvZHVjZXMgdGhlIG1vc3QgY29tcHJlc3Npb24uICBUaGUgZGVmYXVsdCBpcyBgYDlgYC4KIAorICAgVGhlICptdGltZSogYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgbnVtZXJpYyB0aW1lc3RhbXAgdG8gYmUgd3JpdHRlbiB0bworICAgdGhlIHN0cmVhbSB3aGVuIGNvbXByZXNzaW5nLiAgQWxsIDpwcm9ncmFtOmBnemlwYCBjb21wcmVzc2VkIHN0cmVhbXMgYXJlCisgICByZXF1aXJlZCB0byBjb250YWluIGEgdGltZXN0YW1wLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlIGN1cnJlbnQKKyAgIHRpbWUgaXMgdXNlZC4gIFRoaXMgbW9kdWxlIGlnbm9yZXMgdGhlIHRpbWVzdGFtcCB3aGVuIGRlY29tcHJlc3Npbmc7CisgICBob3dldmVyLCBzb21lIHByb2dyYW1zLCBzdWNoIGFzIDpwcm9ncmFtOmBndW56aXBgXCAsIG1ha2UgdXNlIG9mIGl0LgorICAgVGhlIGZvcm1hdCBvZiB0aGUgdGltZXN0YW1wIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgYGB0aW1lLnRpbWUoKWBgIGFuZCBvZiB0aGUgYGBzdF9tdGltZWBgIG1lbWJlciBvZiB0aGUgb2JqZWN0IHJldHVybmVkCisgICBieSBgYG9zLnN0YXQoKWBgLgorCiAgICBDYWxsaW5nIGEgOmNsYXNzOmBHemlwRmlsZWAgb2JqZWN0J3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgZG9lcyBub3QgY2xvc2UKICAgICpmaWxlb2JqKiwgc2luY2UgeW91IG1pZ2h0IHdpc2ggdG8gYXBwZW5kIG1vcmUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGNvbXByZXNzZWQKICAgIGRhdGEuICBUaGlzIGFsc28gYWxsb3dzIHlvdSB0byBwYXNzIGEgOmNsYXNzOmBTdHJpbmdJT2Agb2JqZWN0IG9wZW5lZCBmb3IKICAgIHdyaXRpbmcgYXMgKmZpbGVvYmoqLCBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdGluZyBtZW1vcnkgYnVmZmVyIHVzaW5nIHRoZQogICAgOmNsYXNzOmBTdHJpbmdJT2Agb2JqZWN0J3MgOm1ldGg6YGdldHZhbHVlYCBtZXRob2QuCiAKLSAgIDpjbGFzczpgR3ppcEZpbGVgIHN1cHBvcnRzIGl0ZXJhdGlvbi4KKyAgIDpjbGFzczpgR3ppcEZpbGVgIHN1cHBvcnRzIGl0ZXJhdGlvbiBhbmQgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBTdXBwb3J0IGZvciB6ZXJvLXBhZGRlZCBmaWxlcyB3YXMgYWRkZWQuCisKIAogLi4gZnVuY3Rpb246OiBvcGVuKGZpbGVuYW1lWywgbW9kZVssIGNvbXByZXNzbGV2ZWxdXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAppbmRleCBhODg5YTJmLi41MWFjOTNiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdApAQCAtNzQsNiArNzQsMTUgQEAKICAgID4+PiBoLmhleGRpZ2VzdCgpCiAgICAnY2M0YTVjZTFiM2RmNDhhZWM1ZDIyZDFmMTZiODk0YTBiODk0ZWNjYycKIAorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudCBhdHRyaWJ1dGU6CisKKy4uIGRhdGE6OiBoYXNobGliLmFsZ29yaXRobXMKKworICAgQSB0dXBsZSBwcm92aWRpbmcgdGhlIG5hbWVzIG9mIHRoZSBoYXNoIGFsZ29yaXRobXMgZ3VhcmFudGVlZCB0byBiZQorICAgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGNvbnN0YW50IGF0dHJpYnV0ZXMgb2YgdGhlIGhhc2ggb2JqZWN0cwogcmV0dXJuZWQgYnkgdGhlIGNvbnN0cnVjdG9yczoKIApAQCAtOTUsNiArMTA0LDEyIEBACiAgICBhIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6IGBgbS51cGRhdGUoYSk7CiAgICBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhK2IpYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisKKyAgICAgIFRoZSBQeXRob24gR0lMIGlzIHJlbGVhc2VkIHRvIGFsbG93IG90aGVyIHRocmVhZHMgdG8gcnVuIHdoaWxlCisgICAgICBoYXNoIHVwZGF0ZXMgb24gZGF0YSBsYXJnZXIgdGhhbiAyMDQ4IGJ5dGVzIGlzIHRha2luZyBwbGFjZSB3aGVuCisgICAgICB1c2luZyBoYXNoIGFsZ29yaXRobXMgc3VwcGxpZWQgYnkgT3BlblNTTC4KKwogCiAuLiBtZXRob2Q6OiBoYXNoLmRpZ2VzdCgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hlYXBxLnJzdCBiL0RvYy9saWJyYXJ5L2hlYXBxLnJzdAppbmRleCA5YTQ0MDQ3Li5hNmI5YmEyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGVhcHEucnN0CkBAIC02LDE3ICs2LDI0IEBACiAuLiBtb2R1bGVhdXRob3I6OiBLZXZpbiBPJ0Nvbm5vcgogLi4gc2VjdGlvbmF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJhbsOnb2lzIFBpbmFyZAorLi4gc2VjdGlvbmF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyCiAKIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGVhcCBxdWV1ZSBhbGdvcml0aG0sIGFsc28ga25vd24KIGFzIHRoZSBwcmlvcml0eSBxdWV1ZSBhbGdvcml0aG0uCiAKLUhlYXBzIGFyZSBhcnJheXMgZm9yIHdoaWNoIGBgaGVhcFtrXSA8PSBoZWFwWzIqaysxXWBgIGFuZCBgYGhlYXBba10gPD0KLWhlYXBbMiprKzJdYGAgZm9yIGFsbCAqayosIGNvdW50aW5nIGVsZW1lbnRzIGZyb20gemVyby4gIEZvciB0aGUgc2FrZSBvZgotY29tcGFyaXNvbiwgbm9uLWV4aXN0aW5nIGVsZW1lbnRzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluZmluaXRlLiAgVGhlCi1pbnRlcmVzdGluZyBwcm9wZXJ0eSBvZiBhIGhlYXAgaXMgdGhhdCBgYGhlYXBbMF1gYCBpcyBhbHdheXMgaXRzIHNtYWxsZXN0Ci1lbGVtZW50LgorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgaGVhcHEgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvaGVhcHEucHk/dmlldz1tYXJrdXA+YF8KKworSGVhcHMgYXJlIGJpbmFyeSB0cmVlcyBmb3Igd2hpY2ggZXZlcnkgcGFyZW50IG5vZGUgaGFzIGEgdmFsdWUgbGVzcyB0aGFuIG9yCitlcXVhbCB0byBhbnkgb2YgaXRzIGNoaWxkcmVuLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGFycmF5cyBmb3Igd2hpY2gKK2BgaGVhcFtrXSA8PSBoZWFwWzIqaysxXWBgIGFuZCBgYGhlYXBba10gPD0gaGVhcFsyKmsrMl1gYCBmb3IgYWxsICprKiwgY291bnRpbmcKK2VsZW1lbnRzIGZyb20gemVyby4gIEZvciB0aGUgc2FrZSBvZiBjb21wYXJpc29uLCBub24tZXhpc3RpbmcgZWxlbWVudHMgYXJlCitjb25zaWRlcmVkIHRvIGJlIGluZmluaXRlLiAgVGhlIGludGVyZXN0aW5nIHByb3BlcnR5IG9mIGEgaGVhcCBpcyB0aGF0IGl0cworc21hbGxlc3QgZWxlbWVudCBpcyBhbHdheXMgdGhlIHJvb3QsIGBgaGVhcFswXWBgLgogCiBUaGUgQVBJIGJlbG93IGRpZmZlcnMgZnJvbSB0ZXh0Ym9vayBoZWFwIGFsZ29yaXRobXMgaW4gdHdvIGFzcGVjdHM6IChhKSBXZSB1c2UKIHplcm8tYmFzZWQgaW5kZXhpbmcuICBUaGlzIG1ha2VzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgaW5kZXggZm9yIGEgbm9kZQpAQCAtNjIsNDUgKzY5LDE2IEBACiAKICAgIFBvcCBhbmQgcmV0dXJuIHRoZSBzbWFsbGVzdCBpdGVtIGZyb20gdGhlICpoZWFwKiwgYW5kIGFsc28gcHVzaCB0aGUgbmV3ICppdGVtKi4KICAgIFRoZSBoZWFwIHNpemUgZG9lc24ndCBjaGFuZ2UuIElmIHRoZSBoZWFwIGlzIGVtcHR5LCA6ZXhjOmBJbmRleEVycm9yYCBpcyByYWlzZWQuCi0gICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gOmZ1bmM6YGhlYXBwb3BgIGZvbGxvd2VkIGJ5ICA6ZnVuYzpgaGVhcHB1c2hgLCBhbmQKLSAgIGNhbiBiZSBtb3JlIGFwcHJvcHJpYXRlIHdoZW4gdXNpbmcgYSBmaXhlZC1zaXplIGhlYXAuICBOb3RlIHRoYXQgdGhlIHZhbHVlCi0gICByZXR1cm5lZCBtYXkgYmUgbGFyZ2VyIHRoYW4gKml0ZW0qISAgVGhhdCBjb25zdHJhaW5zIHJlYXNvbmFibGUgdXNlcyBvZiB0aGlzCi0gICByb3V0aW5lIHVubGVzcyB3cml0dGVuIGFzIHBhcnQgb2YgYSBjb25kaXRpb25hbCByZXBsYWNlbWVudDo6CiAKLSAgICAgIGlmIGl0ZW0gPiBoZWFwWzBdOgotICAgICAgICAgIGl0ZW0gPSBoZWFwcmVwbGFjZShoZWFwLCBpdGVtKQorICAgVGhpcyBvbmUgc3RlcCBvcGVyYXRpb24gaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBhIDpmdW5jOmBoZWFwcG9wYCBmb2xsb3dlZCBieQorICAgOmZ1bmM6YGhlYXBwdXNoYCBhbmQgY2FuIGJlIG1vcmUgYXBwcm9wcmlhdGUgd2hlbiB1c2luZyBhIGZpeGVkLXNpemUgaGVhcC4KKyAgIFRoZSBwb3AvcHVzaCBjb21iaW5hdGlvbiBhbHdheXMgcmV0dXJucyBhbiBlbGVtZW50IGZyb20gdGhlIGhlYXAgYW5kIHJlcGxhY2VzCisgICBpdCB3aXRoICppdGVtKi4KIAotRXhhbXBsZSBvZiB1c2U6Ci0KLSAgID4+PiBmcm9tIGhlYXBxIGltcG9ydCBoZWFwcHVzaCwgaGVhcHBvcAotICAgPj4+IGhlYXAgPSBbXQotICAgPj4+IGRhdGEgPSBbMSwgMywgNSwgNywgOSwgMiwgNCwgNiwgOCwgMF0KLSAgID4+PiBmb3IgaXRlbSBpbiBkYXRhOgotICAgLi4uICAgICBoZWFwcHVzaChoZWFwLCBpdGVtKQotICAgLi4uCi0gICA+Pj4gb3JkZXJlZCA9IFtdCi0gICA+Pj4gd2hpbGUgaGVhcDoKLSAgIC4uLiAgICAgb3JkZXJlZC5hcHBlbmQoaGVhcHBvcChoZWFwKSkKLSAgIC4uLgotICAgPj4+IHByaW50IG9yZGVyZWQKLSAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQotICAgPj4+IGRhdGEuc29ydCgpCi0gICA+Pj4gcHJpbnQgZGF0YSA9PSBvcmRlcmVkCi0gICBUcnVlCi0KLVVzaW5nIGEgaGVhcCB0byBpbnNlcnQgaXRlbXMgYXQgdGhlIGNvcnJlY3QgcGxhY2UgaW4gYSBwcmlvcml0eSBxdWV1ZToKLQotICAgPj4+IGhlYXAgPSBbXQotICAgPj4+IGRhdGEgPSBbKDEsICdKJyksICg0LCAnTicpLCAoMywgJ0gnKSwgKDIsICdPJyldCi0gICA+Pj4gZm9yIGl0ZW0gaW4gZGF0YToKLSAgIC4uLiAgICAgaGVhcHB1c2goaGVhcCwgaXRlbSkKLSAgIC4uLgotICAgPj4+IHdoaWxlIGhlYXA6Ci0gICAuLi4gICAgIHByaW50IGhlYXBwb3AoaGVhcClbMV0KLSAgIEoKLSAgIE8KLSAgIEgKLSAgIE4KKyAgIFRoZSB2YWx1ZSByZXR1cm5lZCBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlICppdGVtKiBhZGRlZC4gIElmIHRoYXQgaXNuJ3QKKyAgIGRlc2lyZWQsIGNvbnNpZGVyIHVzaW5nIDpmdW5jOmBoZWFwcHVzaHBvcGAgaW5zdGVhZC4gIEl0cyBwdXNoL3BvcAorICAgY29tYmluYXRpb24gcmV0dXJucyB0aGUgc21hbGxlciBvZiB0aGUgdHdvIHZhbHVlcywgbGVhdmluZyB0aGUgbGFyZ2VyIHZhbHVlCisgICBvbiB0aGUgaGVhcC4KIAogCiBUaGUgbW9kdWxlIGFsc28gb2ZmZXJzIHRocmVlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbnMgYmFzZWQgb24gaGVhcHMuCkBAIC0xNTEsMTIgKzEyOSwxMDAgQEAKIGZ1bmN0aW9ucy4KIAogCitCYXNpYyBFeGFtcGxlcworLS0tLS0tLS0tLS0tLS0KKworQSBgaGVhcHNvcnQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVhcHNvcnQ+YF8gY2FuIGJlIGltcGxlbWVudGVkIGJ5CitwdXNoaW5nIGFsbCB2YWx1ZXMgb250byBhIGhlYXAgYW5kIHRoZW4gcG9wcGluZyBvZmYgdGhlIHNtYWxsZXN0IHZhbHVlcyBvbmUgYXQgYQordGltZTo6CisKKyAgID4+PiBkZWYgaGVhcHNvcnQoaXRlcmFibGUpOgorICAgLi4uICAgICAnRXF1aXZhbGVudCB0byBzb3J0ZWQoaXRlcmFibGUpJworICAgLi4uICAgICBoID0gW10KKyAgIC4uLiAgICAgZm9yIHZhbHVlIGluIGl0ZXJhYmxlOgorICAgLi4uICAgICAgICAgaGVhcHB1c2goaCwgdmFsdWUpCisgICAuLi4gICAgIHJldHVybiBbaGVhcHBvcChoKSBmb3IgaSBpbiByYW5nZShsZW4oaCkpXQorICAgLi4uCisgICA+Pj4gaGVhcHNvcnQoWzEsIDMsIDUsIDcsIDksIDIsIDQsIDYsIDgsIDBdKQorICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKK0hlYXAgZWxlbWVudHMgY2FuIGJlIHR1cGxlcy4gIFRoaXMgaXMgdXNlZnVsIGZvciBhc3NpZ25pbmcgY29tcGFyaXNvbiB2YWx1ZXMKKyhzdWNoIGFzIHRhc2sgcHJpb3JpdGllcykgYWxvbmdzaWRlIHRoZSBtYWluIHJlY29yZCBiZWluZyB0cmFja2VkOjoKKworICAgID4+PiBoID0gW10KKyAgICA+Pj4gaGVhcHB1c2goaCwgKDUsICd3cml0ZSBjb2RlJykpCisgICAgPj4+IGhlYXBwdXNoKGgsICg3LCAncmVsZWFzZSBwcm9kdWN0JykpCisgICAgPj4+IGhlYXBwdXNoKGgsICgxLCAnd3JpdGUgc3BlYycpKQorICAgID4+PiBoZWFwcHVzaChoLCAoMywgJ2NyZWF0ZSB0ZXN0cycpKQorICAgID4+PiBoZWFwcG9wKGgpCisgICAgKDEsICd3cml0ZSBzcGVjJykKKworCitQcmlvcml0eSBRdWV1ZSBJbXBsZW1lbnRhdGlvbiBOb3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBgcHJpb3JpdHkgcXVldWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUHJpb3JpdHlfcXVldWU+YF8gaXMgY29tbW9uIHVzZQorZm9yIGEgaGVhcCwgYW5kIGl0IHByZXNlbnRzIHNldmVyYWwgaW1wbGVtZW50YXRpb24gY2hhbGxlbmdlczoKKworKiBTb3J0IHN0YWJpbGl0eTogIGhvdyBkbyB5b3UgZ2V0IHR3byB0YXNrcyB3aXRoIGVxdWFsIHByaW9yaXRpZXMgdG8gYmUgcmV0dXJuZWQKKyAgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBvcmlnaW5hbGx5IGFkZGVkPworCisqIEluIHRoZSBmdXR1cmUgd2l0aCBQeXRob24gMywgdHVwbGUgY29tcGFyaXNvbiBicmVha3MgZm9yIChwcmlvcml0eSwgdGFzaykKKyAgcGFpcnMgaWYgdGhlIHByaW9yaXRpZXMgYXJlIGVxdWFsIGFuZCB0aGUgdGFza3MgZG8gbm90IGhhdmUgYSBkZWZhdWx0CisgIGNvbXBhcmlzb24gb3JkZXIuCisKKyogSWYgdGhlIHByaW9yaXR5IG9mIGEgdGFzayBjaGFuZ2VzLCBob3cgZG8geW91IG1vdmUgaXQgdG8gYSBuZXcgcG9zaXRpb24gaW4KKyAgdGhlIGhlYXA/CisKKyogT3IgaWYgYSBwZW5kaW5nIHRhc2sgbmVlZHMgdG8gYmUgZGVsZXRlZCwgaG93IGRvIHlvdSBmaW5kIGl0IGFuZCByZW1vdmUgaXQKKyAgZnJvbSB0aGUgcXVldWU/CisKK0Egc29sdXRpb24gdG8gdGhlIGZpcnN0IHR3byBjaGFsbGVuZ2VzIGlzIHRvIHN0b3JlIGVudHJpZXMgYXMgMy1lbGVtZW50IGxpc3QKK2luY2x1ZGluZyB0aGUgcHJpb3JpdHksIGFuIGVudHJ5IGNvdW50LCBhbmQgdGhlIHRhc2suICBUaGUgZW50cnkgY291bnQgc2VydmVzIGFzCithIHRpZS1icmVha2VyIHNvIHRoYXQgdHdvIHRhc2tzIHdpdGggdGhlIHNhbWUgcHJpb3JpdHkgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlcgordGhleSB3ZXJlIGFkZGVkLiBBbmQgc2luY2Ugbm8gdHdvIGVudHJ5IGNvdW50cyBhcmUgdGhlIHNhbWUsIHRoZSB0dXBsZQorY29tcGFyaXNvbiB3aWxsIG5ldmVyIGF0dGVtcHQgdG8gZGlyZWN0bHkgY29tcGFyZSB0d28gdGFza3MuCisKK1RoZSByZW1haW5pbmcgY2hhbGxlbmdlcyByZXZvbHZlIGFyb3VuZCBmaW5kaW5nIGEgcGVuZGluZyB0YXNrIGFuZCBtYWtpbmcKK2NoYW5nZXMgdG8gaXRzIHByaW9yaXR5IG9yIHJlbW92aW5nIGl0IGVudGlyZWx5LiAgRmluZGluZyBhIHRhc2sgY2FuIGJlIGRvbmUKK3dpdGggYSBkaWN0aW9uYXJ5IHBvaW50aW5nIHRvIGFuIGVudHJ5IGluIHRoZSBxdWV1ZS4KKworUmVtb3ZpbmcgdGhlIGVudHJ5IG9yIGNoYW5naW5nIGl0cyBwcmlvcml0eSBpcyBtb3JlIGRpZmZpY3VsdCBiZWNhdXNlIGl0IHdvdWxkCiticmVhayB0aGUgaGVhcCBzdHJ1Y3R1cmUgaW52YXJpYW50cy4gIFNvLCBhIHBvc3NpYmxlIHNvbHV0aW9uIGlzIHRvIG1hcmsgYW4KK2VudHJ5IGFzIGludmFsaWQgYW5kIG9wdGlvbmFsbHkgYWRkIGEgbmV3IGVudHJ5IHdpdGggdGhlIHJldmlzZWQgcHJpb3JpdHk6OgorCisgICAgcHEgPSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBwcmlvcml0eSBxdWV1ZSBsaXN0CisgICAgY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKSAgICAjIHVuaXF1ZSBzZXF1ZW5jZSBjb3VudAorICAgIHRhc2tfZmluZGVyID0ge30gICAgICAgICAgICAgICAgIyBtYXBwaW5nIG9mIHRhc2tzIHRvIGVudHJpZXMKKyAgICBJTlZBTElEID0gMCAgICAgICAgICAgICAgICAgICAgICMgbWFyayBhbiBlbnRyeSBhcyBkZWxldGVkCisKKyAgICBkZWYgYWRkX3Rhc2socHJpb3JpdHksIHRhc2ssIGNvdW50PU5vbmUpOgorICAgICAgICBpZiBjb3VudCBpcyBOb25lOgorICAgICAgICAgICAgY291bnQgPSBuZXh0KGNvdW50ZXIpCisgICAgICAgIGVudHJ5ID0gW3ByaW9yaXR5LCBjb3VudCwgdGFza10KKyAgICAgICAgdGFza19maW5kZXJbdGFza10gPSBlbnRyeQorICAgICAgICBoZWFwcHVzaChwcSwgZW50cnkpCisKKyAgICBkZWYgZ2V0X3RvcF9wcmlvcml0eSgpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgcHJpb3JpdHksIGNvdW50LCB0YXNrID0gaGVhcHBvcChwcSkKKyAgICAgICAgICAgIGRlbCB0YXNrX2ZpbmRlclt0YXNrXQorICAgICAgICAgICAgaWYgY291bnQgaXMgbm90IElOVkFMSUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2sKKworICAgIGRlZiBkZWxldGVfdGFzayh0YXNrKToKKyAgICAgICAgZW50cnkgPSB0YXNrX2ZpbmRlclt0YXNrXQorICAgICAgICBlbnRyeVsxXSA9IElOVkFMSUQKKworICAgIGRlZiByZXByaW9yaXRpemUocHJpb3JpdHksIHRhc2spOgorICAgICAgICBlbnRyeSA9IHRhc2tfZmluZGVyW3Rhc2tdCisgICAgICAgIGFkZF90YXNrKHByaW9yaXR5LCB0YXNrLCBlbnRyeVsxXSkKKyAgICAgICAgZW50cnlbMV0gPSBJTlZBTElECisKKwogVGhlb3J5CiAtLS0tLS0KIAotKFRoaXMgZXhwbGFuYXRpb24gaXMgZHVlIHRvIEZyYW7Dp29pcyBQaW5hcmQuICBUaGUgUHl0aG9uIGNvZGUgZm9yIHRoaXMgbW9kdWxlCi13YXMgY29udHJpYnV0ZWQgYnkgS2V2aW4gTydDb25ub3IuKQotCiBIZWFwcyBhcmUgYXJyYXlzIGZvciB3aGljaCBgYGFba10gPD0gYVsyKmsrMV1gYCBhbmQgYGBhW2tdIDw9IGFbMiprKzJdYGAgZm9yIGFsbAogKmsqLCBjb3VudGluZyBlbGVtZW50cyBmcm9tIDAuICBGb3IgdGhlIHNha2Ugb2YgY29tcGFyaXNvbiwgbm9uLWV4aXN0aW5nCiBlbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmZpbml0ZS4gIFRoZSBpbnRlcmVzdGluZyBwcm9wZXJ0eSBvZiBhIGhlYXAgaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2htYWMucnN0IGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKaW5kZXggOGIzYjkyYi4uNDgwZDBhNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaG1hYy5yc3QKQEAgLTE5LDEwICsxOSw2IEBACiAgICBpcyBtYWRlLiAqZGlnZXN0bW9kKiBpcyB0aGUgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMgb2JqZWN0IHRvCiAgICB1c2UuIEl0IGRlZmF1bHRzIHRvICB0aGUgOmZ1bmM6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFRoZSBtZDUgaGFzaCBoYXMga25vd24gd2Vha25lc3NlcyBidXQgcmVtYWlucyB0aGUgZGVmYXVsdCBmb3IgYmFja3dhcmRzCi0gICAgICBjb21wYXRpYmlsaXR5LiBDaG9vc2UgYSBiZXR0ZXIgb25lIGZvciB5b3VyIGFwcGxpY2F0aW9uLgogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHBsaWIucnN0CmluZGV4IDA2ODliMGUuLjQzNjg1N2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHBsaWIucnN0CkBAIC0zNCw3ICszNCw3IEBACiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCi0uLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3RbLCBwb3J0Wywgc3RyaWN0WywgdGltZW91dF1dXSkKKy4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdFssIHBvcnRbLCBzdHJpY3RbLCB0aW1lb3V0Wywgc291cmNlX2FkZHJlc3NdXV1dKQogCiAgICBBbiA6Y2xhc3M6YEhUVFBDb25uZWN0aW9uYCBpbnN0YW5jZSByZXByZXNlbnRzIG9uZSB0cmFuc2FjdGlvbiB3aXRoIGFuIEhUVFAKICAgIHNlcnZlci4gIEl0IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgcGFzc2luZyBpdCBhIGhvc3QgYW5kIG9wdGlvbmFsIHBvcnQKQEAgLTQ2LDYgKzQ2LDggQEAKICAgIHN0YXR1cyBsaW5lLiAgSWYgdGhlIG9wdGlvbmFsICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGJsb2NraW5nCiAgICBvcGVyYXRpb25zIChsaWtlIGNvbm5lY3Rpb24gYXR0ZW1wdHMpIHdpbGwgdGltZW91dCBhZnRlciB0aGF0IG1hbnkgc2Vjb25kcwogICAgKGlmIGl0IGlzIG5vdCBnaXZlbiwgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZyBpcyB1c2VkKS4KKyAgIFRoZSBvcHRpb25hbCAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciBtYXkgYmUgYSB0dXBsZSBvZiBhIChob3N0LCBwb3J0KQorICAgdG8gdXNlIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGUgSFRUUCBjb25uZWN0aW9uIGlzIG1hZGUgZnJvbS4KIAogICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbHMgYWxsIGNyZWF0ZSBpbnN0YW5jZXMgdGhhdCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIKICAgIGF0IHRoZSBzYW1lIGhvc3QgYW5kIHBvcnQ6OgpAQCAtNjAsMjMgKzYyLDI4IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgogCi0uLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0WywgcG9ydFssIGtleV9maWxlWywgY2VydF9maWxlWywgc3RyaWN0WywgdGltZW91dF1dXV1dKQorCisuLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0WywgcG9ydFssIGtleV9maWxlWywgY2VydF9maWxlWywgc3RyaWN0WywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV1dXV1dKQogCiAgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIHRoYXQgdXNlcyBTU0wgZm9yIGNvbW11bmljYXRpb24gd2l0aAogICAgc2VjdXJlIHNlcnZlcnMuICBEZWZhdWx0IHBvcnQgaXMgYGA0NDNgYC4gKmtleV9maWxlKiBpcyB0aGUgbmFtZSBvZiBhIFBFTQogICAgZm9ybWF0dGVkIGZpbGUgdGhhdCBjb250YWlucyB5b3VyIHByaXZhdGUga2V5LiAqY2VydF9maWxlKiBpcyBhIFBFTSBmb3JtYXR0ZWQKICAgIGNlcnRpZmljYXRlIGNoYWluIGZpbGUuCiAKLSAgIC4uIG5vdGU6OgotCi0gICAgICBUaGlzIGRvZXMgbm90IGRvIGFueSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCisgICAuLiB3YXJuaW5nOjoKKyAgICAgIFRoaXMgZG9lcyBub3QgZG8gYW55IHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMAogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgorCiAKIC4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2tbLCBkZWJ1Z2xldmVsPTBdWywgc3RyaWN0PTBdKQogCkBAIC00MzYsNiArNDQzLDE3IEBACiAgICBkZWJ1ZyBsZXZlbCBpcyBgYDBgYCwgbWVhbmluZyBubyBkZWJ1Z2dpbmcgb3V0cHV0IGlzIHByaW50ZWQuCiAKIAorLi4gbWV0aG9kOjogSFRUUENvbm5lY3Rpb24uc2V0X3R1bm5lbChob3N0LHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKQorCisgICBTZXQgdGhlIGhvc3QgYW5kIHRoZSBwb3J0IGZvciBIVFRQIENvbm5lY3QgVHVubmVsbGluZy4gTm9ybWFsbHkgdXNlZCB3aGVuCisgICBpdCBpcyByZXF1aXJlZCB0byBkbyBIVFRQUyBDb25lY3Rpb24gdGhyb3VnaCBhIHByb3h5IHNlcnZlci4KKworICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMgdG8gdG8gc2VudAorICAgd2l0aCB0aGUgQ09OTkVDVCByZXF1ZXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiAuLiBtZXRob2Q6OiBIVFRQQ29ubmVjdGlvbi5jb25uZWN0KCkKIAogICAgQ29ubmVjdCB0byB0aGUgc2VydmVyIHNwZWNpZmllZCB3aGVuIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQuCkBAIC01MDcsNiArNTI1LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi40CiAKKy4uIG1ldGhvZDo6IEhUVFBSZXNwb25zZS5maWxlbm8oKQorCisgICBSZXR1cm5zIHRoZSBgYGZpbGVub2BgIG9mIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KIAogLi4gYXR0cmlidXRlOjogSFRUUFJlc3BvbnNlLm1zZwogCkBAIC01NDksOSArNTcwLDggQEAKICAgID4+PiBkYXRhMiA9IHIyLnJlYWQoKQogICAgPj4+IGNvbm4uY2xvc2UoKQogCi1IZXJlIGlzIGFuIGV4YW1wbGUgc2Vzc2lvbiB0aGF0IHVzZXMgYGBIRUFEYGAgbWV0aG9kLiBOb3RlIHRoYXQgYGBIRUFEYGAgbWV0aG9kCi1uZXZlciByZXR1cm5zIGFueSBkYXRhLiA6OgotCitIZXJlIGlzIGFuIGV4YW1wbGUgc2Vzc2lvbiB0aGF0IHVzZXMgdGhlIGBgSEVBRGBgIG1ldGhvZC4gIE5vdGUgdGhhdCB0aGUKK2BgSEVBRGBgIG1ldGhvZCBuZXZlciByZXR1cm5zIGFueSBkYXRhLiA6OgogCiAgICA+Pj4gaW1wb3J0IGh0dHBsaWIKICAgID4+PiBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbigid3d3LnB5dGhvbi5vcmciKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdAppbmRleCAxYjc4ZmI5Li42YmQxODk4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pZGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdApAQCAtMjg2LDEzICsyODYsMTMgQEAKIAogSWYgdGhlcmUgYXJlIGFyZ3VtZW50czoKIAotIy4gSWYgOm9wdGlvbjpgLWVgIGlzIHVzZWQsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZAorIy4gSWYgYGAtZWBgIGlzIHVzZWQsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZAogICAgYGBzeXMuYXJndmBgIHJlZmxlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIElETEUgaXRzZWxmLgogCi0jLiBPdGhlcndpc2UsIGlmIDpvcHRpb246YC1jYCBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KKyMuIE90aGVyd2lzZSwgaWYgYGAtY2BgIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgogICAgYGBzeXMuYXJndlsxOi4uLl1gYCwgd2l0aCBgYHN5cy5hcmd2WzBdYGAgc2V0IHRvIGBgJy1jJ2BgLgogCi0jLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgOm9wdGlvbjpgLWVgIG5vciA6b3B0aW9uOmAtY2AgaXMgdXNlZCwgdGhlIGZpcnN0CisjLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgYGAtZWBgIG5vciBgYC1jYGAgaXMgdXNlZCwgdGhlIGZpcnN0CiAgICBhcmd1bWVudCBpcyBhIHNjcmlwdCB3aGljaCBpcyBleGVjdXRlZCB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGluCiAgICBgYHN5cy5hcmd2WzE6Li4uXWBgICBhbmQgYGBzeXMuYXJndlswXWBgIHNldCB0byB0aGUgc2NyaXB0IG5hbWUuICBJZiB0aGUgc2NyaXB0CiAgICBuYW1lIGlzICctJywgbm8gc2NyaXB0IGlzIGV4ZWN1dGVkIGJ1dCBhbiBpbnRlcmFjdGl2ZSBQeXRob24gc2Vzc2lvbiBpcyBzdGFydGVkOwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAppbmRleCBlMThkN2Q1Li5mZDA5MDQxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdApAQCAtODQsOSArODQsOSBAQAogCiAuLiBmdW5jdGlvbjo6IEludGVybmFsZGF0ZTJ0dXBsZShkYXRlc3RyKQogCi0gICBDb252ZXJ0cyBhbiBJTUFQNCBJTlRFUk5BTERBVEUgc3RyaW5nIHRvIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lLiBSZXR1cm5zIGEKLSAgIDptb2Q6YHRpbWVgIG1vZHVsZSB0dXBsZS4KLQorICAgUGFyc2UgYW4gSU1BUDQgYGBJTlRFUk5BTERBVEVgYCBzdHJpbmcgYW5kIHJldHVybiBjb3JyZXNwb25kaW5nIGxvY2FsCisgICB0aW1lLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIDpjbGFzczpgdGltZS5zdHJ1Y3RfdGltZWAgaW5zdGFuY2Ugb3IKKyAgIE5vbmUgaWYgdGhlIHN0cmluZyBoYXMgd3JvbmcgZm9ybWF0LgogCiAuLiBmdW5jdGlvbjo6IEludDJBUChudW0pCiAKQEAgLTEwMSw5ICsxMDEsMTMgQEAKIAogLi4gZnVuY3Rpb246OiBUaW1lMkludGVybmFsZGF0ZShkYXRlX3RpbWUpCiAKLSAgIENvbnZlcnRzIGEgOm1vZDpgdGltZWAgbW9kdWxlIHR1cGxlIHRvIGFuIElNQVA0IGBgSU5URVJOQUxEQVRFYGAgcmVwcmVzZW50YXRpb24uCi0gICBSZXR1cm5zIGEgc3RyaW5nIGluIHRoZSBmb3JtOiBgYCJERC1NbW0tWVlZWSBISDpNTTpTUyArSEhNTSJgYCAoaW5jbHVkaW5nCi0gICBkb3VibGUtcXVvdGVzKS4KKyAgIENvbnZlcnQgKmRhdGVfdGltZSogdG8gYW4gSU1BUDQgYGBJTlRFUk5BTERBVEVgYCByZXByZXNlbnRhdGlvbi4gIFRoZQorICAgcmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nIGluIHRoZSBmb3JtOiBgYCJERC1NbW0tWVlZWSBISDpNTTpTUworICAgK0hITU0iYGAgKGluY2x1ZGluZyBkb3VibGUtcXVvdGVzKS4gIFRoZSAqZGF0ZV90aW1lKiBhcmd1bWVudCBjYW4gYmUgYQorICAgbnVtYmVyIChpbnQgb3IgZmxvYXQpIHJlcHJlc2VuaW5nIHNlY29uZHMgc2luY2UgZXBvY2ggKGFzIHJldHVybmVkCisgICBieSA6ZnVuYzpgdGltZS50aW1lYCksIGEgOS10dXBsZSByZXByZXNlbnRpbmcgbG9jYWwgdGltZSAoYXMgcmV0dXJuZWQgYnkKKyAgIDpmdW5jOmB0aW1lLmxvY2FsdGltZWApLCBvciBhIGRvdWJsZS1xdW90ZWQgc3RyaW5nLiAgSW4gdGhlIGxhc3QgY2FzZSwgaXQKKyAgIGlzIGFzc3VtZWQgdG8gYWxyZWFkeSBiZSBpbiB0aGUgY29ycmVjdCBmb3JtYXQuCiAKIE5vdGUgdGhhdCBJTUFQNCBtZXNzYWdlIG51bWJlcnMgY2hhbmdlIGFzIHRoZSBtYWlsYm94IGNoYW5nZXM7IGluIHBhcnRpY3VsYXIsCiBhZnRlciBhbiBgYEVYUFVOR0VgYCBjb21tYW5kIHBlcmZvcm1zIGRlbGV0aW9ucyB0aGUgcmVtYWluaW5nIG1lc3NhZ2VzIGFyZQpAQCAtMzAzLDkgKzMwNywxMCBAQAogCiAuLiBtZXRob2Q6OiBJTUFQNC5vcGVuKGhvc3QsIHBvcnQpCiAKLSAgIE9wZW5zIHNvY2tldCB0byAqcG9ydCogYXQgKmhvc3QqLiBUaGUgY29ubmVjdGlvbiBvYmplY3RzIGVzdGFibGlzaGVkIGJ5IHRoaXMKKyAgIE9wZW5zIHNvY2tldCB0byAqcG9ydCogYXQgKmhvc3QqLiAgVGhpcyBtZXRob2QgaXMgaW1wbGljaXRseSBjYWxsZWQgYnkKKyAgIHRoZSA6Y2xhc3M6YElNQVA0YCBjb25zdHJ1Y3Rvci4gIFRoZSBjb25uZWN0aW9uIG9iamVjdHMgZXN0YWJsaXNoZWQgYnkgdGhpcwogICAgbWV0aG9kIHdpbGwgYmUgdXNlZCBpbiB0aGUgYGByZWFkYGAsIGBgcmVhZGxpbmVgYCwgYGBzZW5kYGAsIGFuZCBgYHNodXRkb3duYGAKLSAgIG1ldGhvZHMuIFlvdSBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCisgICBtZXRob2RzLiAgWW91IG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZC4KIAogCiAuLiBtZXRob2Q6OiBJTUFQNC5wYXJ0aWFsKG1lc3NhZ2VfbnVtLCBtZXNzYWdlX3BhcnQsIHN0YXJ0LCBsZW5ndGgpCkBAIC00MDEsNyArNDA2LDggQEAKIAogLi4gbWV0aG9kOjogSU1BUDQuc2h1dGRvd24oKQogCi0gICBDbG9zZSBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGluIGBgb3BlbmBgLiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kLgorICAgQ2xvc2UgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCBpbiBgYG9wZW5gYC4gIFRoaXMgbWV0aG9kIGlzIGltcGxpY2l0bHkKKyAgIGNhbGxlZCBieSA6bWV0aDpgSU1BUDQubG9nb3V0YC4gIFlvdSBtYXkgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCiAKIAogLi4gbWV0aG9kOjogSU1BUDQuc29ja2V0KCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcC5yc3QgYi9Eb2MvbGlicmFyeS9pbXAucnN0CmluZGV4IGNmNDY1NWIuLjYwN2RkMTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wLnJzdApAQCAtMTE2LDggKzExNiw3IEBACiAuLiBmdW5jdGlvbjo6IGFjcXVpcmVfbG9jaygpCiAKICAgIEFjcXVpcmUgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gIFRoaXMgbG9jayBzaG91bGQKLSAgIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5IHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMuIE9uCi0gICBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAgIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5IHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMuCiAKICAgIE9uY2UgYSB0aHJlYWQgaGFzIGFjcXVpcmVkIHRoZSBpbXBvcnQgbG9jaywgdGhlIHNhbWUgdGhyZWFkIG1heSBhY3F1aXJlIGl0CiAgICBhZ2FpbiB3aXRob3V0IGJsb2NraW5nOyB0aGUgdGhyZWFkIG11c3QgcmVsZWFzZSBpdCBvbmNlIGZvciBlYWNoIHRpbWUgaXQgaGFzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDMwN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtMCwwICsxLDI3IEBACis6bW9kOmBpbXBvcnRsaWJgIC0tIENvbnZlbmllbmNlIHdyYXBwZXJzIGZvciA6ZnVuYzpgX19pbXBvcnRfX2AKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBpbXBvcnRsaWIKKyAgIDpzeW5vcHNpczogQ29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIF9faW1wb3J0X18KKworLi4gbW9kdWxlYXV0aG9yOjogQnJldHQgQ2Fubm9uIDxicmV0dEBweXRob24ub3JnPgorLi4gc2VjdGlvbmF1dGhvcjo6IEJyZXR0IENhbm5vbiA8YnJldHRAcHl0aG9uLm9yZz4KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKK1RoaXMgbW9kdWxlIGlzIGEgbWlub3Igc3Vic2V0IG9mIHdoYXQgaXMgYXZhaWxhYmxlIGluIHRoZSBtb3JlIGZ1bGwtZmVhdHVyZWQKK3BhY2thZ2Ugb2YgdGhlIHNhbWUgbmFtZSBmcm9tIFB5dGhvbiAzLjEgdGhhdCBwcm92aWRlcyBhIGNvbXBsZXRlCitpbXBsZW1lbnRhdGlvbiBvZiA6a2V5d29yZDpgaW1wb3J0YC4gV2hhdCBpcyBoZXJlIGhhcyBiZWVuIHByb3ZpZGVkIHRvCitoZWxwIGVhc2UgaW4gdHJhbnNpdGlvbmluZyBmcm9tIDIuNyB0byAzLjEuCisKKworLi4gZnVuY3Rpb246OiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSkKKworICAgIEltcG9ydCBhIG1vZHVsZS4gVGhlICpuYW1lKiBhcmd1bWVudCBzcGVjaWZpZXMgd2hhdCBtb2R1bGUgdG8KKyAgICBpbXBvcnQgaW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgdGVybXMKKyAgICAoZS5nLiBlaXRoZXIgYGBwa2cubW9kYGAgb3IgYGAuLm1vZGBgKS4gSWYgdGhlIG5hbWUgaXMKKyAgICBzcGVjaWZpZWQgaW4gcmVsYXRpdmUgdGVybXMsIHRoZW4gdGhlICpwYWNrYWdlKiBhcmd1bWVudCBtdXN0IGJlCisgICAgc3BlY2lmaWVkIHRvIHRoZSBwYWNrYWdlIHdoaWNoIGlzIHRvIGFjdCBhcyB0aGUgYW5jaG9yIGZvciByZXNvbHZpbmcgdGhlCisgICAgcGFja2FnZSBuYW1lIChlLmcuIGBgaW1wb3J0X21vZHVsZSgnLi5tb2QnLCAncGtnLnN1YnBrZycpYGAgd2lsbCBpbXBvcnQKKyAgICBgYHBrZy5tb2RgYCkuICBUaGUgc3BlY2lmaWVkIG1vZHVsZSB3aWxsIGJlIGluc2VydGVkIGludG8KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIGFuZCByZXR1cm5lZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0IGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKaW5kZXggMjlkYzZhZS4uODUwZmYwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKQEAgLTIzNCwxNCArMjM0LDE0IEBACiAKICAgIFJldHVybiBhIHR1cGxlIG9mIHZhbHVlcyB0aGF0IGRlc2NyaWJlIGhvdyBQeXRob24gd2lsbCBpbnRlcnByZXQgdGhlIGZpbGUKICAgIGlkZW50aWZpZWQgYnkgKnBhdGgqIGlmIGl0IGlzIGEgbW9kdWxlLCBvciBgYE5vbmVgYCBpZiBpdCB3b3VsZCBub3QgYmUKLSAgIGlkZW50aWZpZWQgYXMgYSBtb2R1bGUuICBUaGUgcmV0dXJuIHR1cGxlIGlzIGBgKG5hbWUsIHN1ZmZpeCwgbW9kZSwgbXR5cGUpYGAsCi0gICB3aGVyZSAqbmFtZSogaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aXRob3V0IHRoZSBuYW1lIG9mIGFueSBlbmNsb3NpbmcKLSAgIHBhY2thZ2UsICpzdWZmaXgqIGlzIHRoZSB0cmFpbGluZyBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgKHdoaWNoIG1heSBub3QgYmUgYQotICAgZG90LWRlbGltaXRlZCBleHRlbnNpb24pLCAqbW9kZSogaXMgdGhlIDpmdW5jOmBvcGVuYCBtb2RlIHRoYXQgd291bGQgYmUgdXNlZAotICAgKGBgJ3InYGAgb3IgYGAncmInYGApLCBhbmQgKm10eXBlKiBpcyBhbiBpbnRlZ2VyIGdpdmluZyB0aGUgdHlwZSBvZiB0aGUKLSAgIG1vZHVsZS4gICptdHlwZSogd2lsbCBoYXZlIGEgdmFsdWUgd2hpY2ggY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBjb25zdGFudHMKLSAgIGRlZmluZWQgaW4gdGhlIDptb2Q6YGltcGAgbW9kdWxlOyBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoYXQgbW9kdWxlIGZvcgotICAgbW9yZSBpbmZvcm1hdGlvbiBvbiBtb2R1bGUgdHlwZXMuCisgICBpZGVudGlmaWVkIGFzIGEgbW9kdWxlLiAgVGhlIHJldHVybiB0dXBsZSBpcyBgYChuYW1lLCBzdWZmaXgsIG1vZGUsCisgICBtb2R1bGVfdHlwZSlgYCwgd2hlcmUgKm5hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2l0aG91dCB0aGUgbmFtZSBvZgorICAgYW55IGVuY2xvc2luZyBwYWNrYWdlLCAqc3VmZml4KiBpcyB0aGUgdHJhaWxpbmcgcGFydCBvZiB0aGUgZmlsZSBuYW1lICh3aGljaAorICAgbWF5IG5vdCBiZSBhIGRvdC1kZWxpbWl0ZWQgZXh0ZW5zaW9uKSwgKm1vZGUqIGlzIHRoZSA6ZnVuYzpgb3BlbmAgbW9kZSB0aGF0CisgICB3b3VsZCBiZSB1c2VkIChgYCdyJ2BgIG9yIGBgJ3JiJ2BgKSwgYW5kICptb2R1bGVfdHlwZSogaXMgYW4gaW50ZWdlciBnaXZpbmcKKyAgIHRoZSB0eXBlIG9mIHRoZSBtb2R1bGUuICAqbW9kdWxlX3R5cGUqIHdpbGwgaGF2ZSBhIHZhbHVlIHdoaWNoIGNhbiBiZQorICAgY29tcGFyZWQgdG8gdGhlIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoZSA6bW9kOmBpbXBgIG1vZHVsZTsgc2VlIHRoZQorICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbW9kdWxlIHR5cGVzLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgUmV0dXJucyBhIDp0ZXJtOmBuYW1lZCB0dXBsZWAgYGBNb2R1bGVJbmZvKG5hbWUsIHN1ZmZpeCwgbW9kZSwKQEAgLTI2MywxNyArMjYzLDIwIEBACiAKIC4uIGZ1bmN0aW9uOjogaXNjbGFzcyhvYmplY3QpCiAKLSAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBjbGFzcy4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBjbGFzcywgd2hldGhlciBidWlsdC1pbiBvciBjcmVhdGVkIGluIFB5dGhvbgorICAgY29kZS4KIAogCiAuLiBmdW5jdGlvbjo6IGlzbWV0aG9kKG9iamVjdCkKIAotICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIG1ldGhvZC4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBib3VuZCBtZXRob2Qgd3JpdHRlbiBpbiBQeXRob24uCiAKIAogLi4gZnVuY3Rpb246OiBpc2Z1bmN0aW9uKG9iamVjdCkKIAotICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIFB5dGhvbiBmdW5jdGlvbiBvciB1bm5hbWVkICg6dGVybTpgbGFtYmRhYCkgZnVuY3Rpb24uCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgUHl0aG9uIGZ1bmN0aW9uLCB3aGljaCBpbmNsdWRlcyBmdW5jdGlvbnMKKyAgIGNyZWF0ZWQgYnkgYSA6dGVybTpgbGFtYmRhYCBleHByZXNzaW9uLgorCiAKIC4uIGZ1bmN0aW9uOjogaXNnZW5lcmF0b3JmdW5jdGlvbihvYmplY3QpCiAKQEAgLTI4MSwxMiArMjg0LDE0IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisKIC4uIGZ1bmN0aW9uOjogaXNnZW5lcmF0b3Iob2JqZWN0KQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZ2VuZXJhdG9yLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAorCiAuLiBmdW5jdGlvbjo6IGlzdHJhY2ViYWNrKG9iamVjdCkKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHRyYWNlYmFjay4KQEAgLTMwNCwxMyArMzA5LDE0IEBACiAKIC4uIGZ1bmN0aW9uOjogaXNidWlsdGluKG9iamVjdCkKIAotICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGJ1aWx0LWluIGZ1bmN0aW9uLgorICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIGEgYm91bmQgYnVpbHQtaW4gbWV0aG9kLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNyb3V0aW5lKG9iamVjdCkKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIHVzZXItZGVmaW5lZCBvciBidWlsdC1pbiBmdW5jdGlvbiBvciBtZXRob2QuCiAKKwogLi4gZnVuY3Rpb246OiBpc2Fic3RyYWN0KG9iamVjdCkKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLgpAQCAtMzIwLDggKzMyNiw5IEBACiAKIC4uIGZ1bmN0aW9uOjogaXNtZXRob2RkZXNjcmlwdG9yKG9iamVjdCkKIAotICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIG1ldGhvZCBkZXNjcmlwdG9yLCBidXQgbm90IGlmIDpmdW5jOmBpc21ldGhvZGAKLSAgIG9yIDpmdW5jOmBpc2NsYXNzYCBvciA6ZnVuYzpgaXNmdW5jdGlvbmAgYXJlIHRydWUuCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgbWV0aG9kIGRlc2NyaXB0b3IsIGJ1dCBub3QgaWYKKyAgIDpmdW5jOmBpc21ldGhvZGAsIDpmdW5jOmBpc2NsYXNzYCwgOmZ1bmM6YGlzZnVuY3Rpb25gIG9yIDpmdW5jOmBpc2J1aWx0aW5gCisgICBhcmUgdHJ1ZS4KIAogICAgVGhpcyBpcyBuZXcgYXMgb2YgUHl0aG9uIDIuMiwgYW5kLCBmb3IgZXhhbXBsZSwgaXMgdHJ1ZSBvZgogICAgYGBpbnQuX19hZGRfX2BgLiBBbiBvYmplY3QgcGFzc2luZyB0aGlzIHRlc3QgaGFzIGEgOmF0dHI6YF9fZ2V0X19gIGF0dHJpYnV0ZQpAQCAtNDU3LDEyICs0NjQsMTMgQEAKIAogLi4gZnVuY3Rpb246OiBnZXRhcmdzcGVjKGZ1bmMpCiAKLSAgIEdldCB0aGUgbmFtZXMgYW5kIGRlZmF1bHQgdmFsdWVzIG9mIGEgUHl0aG9uIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLiBBIHR1cGxlIG9mIGZvdXIKLSAgIHRoaW5ncyBpcyByZXR1cm5lZDogYGAoYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzKWBgLiAqYXJncyogaXMgYSBsaXN0IG9mCi0gICB0aGUgYXJndW1lbnQgbmFtZXMgKGl0IG1heSBjb250YWluIG5lc3RlZCBsaXN0cykuICp2YXJhcmdzKiBhbmQgKnZhcmt3KiBhcmUgdGhlCi0gICBuYW1lcyBvZiB0aGUgYGAqYGAgYW5kIGBgKipgYCBhcmd1bWVudHMgb3IgYGBOb25lYGAuICpkZWZhdWx0cyogaXMgYSB0dXBsZSBvZgotICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgb3IgTm9uZSBpZiB0aGVyZSBhcmUgbm8gZGVmYXVsdCBhcmd1bWVudHM7IGlmIHRoaXMgdHVwbGUKLSAgIGhhcyAqbiogZWxlbWVudHMsIHRoZXkgY29ycmVzcG9uZCB0byB0aGUgbGFzdCAqbiogZWxlbWVudHMgbGlzdGVkIGluICphcmdzKi4KKyAgIEdldCB0aGUgbmFtZXMgYW5kIGRlZmF1bHQgdmFsdWVzIG9mIGEgUHl0aG9uIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLiBBIHR1cGxlIG9mCisgICBmb3VyIHRoaW5ncyBpcyByZXR1cm5lZDogYGAoYXJncywgdmFyYXJncywga2V5d29yZHMsIGRlZmF1bHRzKWBgLiAqYXJncyogaXMgYQorICAgbGlzdCBvZiB0aGUgYXJndW1lbnQgbmFtZXMgKGl0IG1heSBjb250YWluIG5lc3RlZCBsaXN0cykuICp2YXJhcmdzKiBhbmQKKyAgICprZXl3b3JkcyogYXJlIHRoZSBuYW1lcyBvZiB0aGUgYGAqYGAgYW5kIGBgKipgYCBhcmd1bWVudHMgb3IKKyAgIGBgTm9uZWBgLiAqZGVmYXVsdHMqIGlzIGEgdHVwbGUgb2YgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgb3IgTm9uZSBpZiB0aGVyZQorICAgYXJlIG5vIGRlZmF1bHQgYXJndW1lbnRzOyBpZiB0aGlzIHR1cGxlIGhhcyAqbiogZWxlbWVudHMsIHRoZXkgY29ycmVzcG9uZCB0bworICAgdGhlIGxhc3QgKm4qIGVsZW1lbnRzIGxpc3RlZCBpbiAqYXJncyouCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICBSZXR1cm5zIGEgOnRlcm06YG5hbWVkIHR1cGxlYCBgYEFyZ1NwZWMoYXJncywgdmFyYXJncywga2V5d29yZHMsCkBAIC00NzEsMTEgKzQ3OSwxMSBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGFyZ3ZhbHVlcyhmcmFtZSkKIAotICAgR2V0IGluZm9ybWF0aW9uIGFib3V0IGFyZ3VtZW50cyBwYXNzZWQgaW50byBhIHBhcnRpY3VsYXIgZnJhbWUuIEEgdHVwbGUgb2YgZm91cgotICAgdGhpbmdzIGlzIHJldHVybmVkOiBgYChhcmdzLCB2YXJhcmdzLCB2YXJrdywgbG9jYWxzKWBgLiAqYXJncyogaXMgYSBsaXN0IG9mIHRoZQotICAgYXJndW1lbnQgbmFtZXMgKGl0IG1heSBjb250YWluIG5lc3RlZCBsaXN0cykuICp2YXJhcmdzKiBhbmQgKnZhcmt3KiBhcmUgdGhlCi0gICBuYW1lcyBvZiB0aGUgYGAqYGAgYW5kIGBgKipgYCBhcmd1bWVudHMgb3IgYGBOb25lYGAuICpsb2NhbHMqIGlzIHRoZSBsb2NhbHMKLSAgIGRpY3Rpb25hcnkgb2YgdGhlIGdpdmVuIGZyYW1lLgorICAgR2V0IGluZm9ybWF0aW9uIGFib3V0IGFyZ3VtZW50cyBwYXNzZWQgaW50byBhIHBhcnRpY3VsYXIgZnJhbWUuIEEgdHVwbGUgb2YKKyAgIGZvdXIgdGhpbmdzIGlzIHJldHVybmVkOiBgYChhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgbG9jYWxzKWBgLiAqYXJncyogaXMgYQorICAgbGlzdCBvZiB0aGUgYXJndW1lbnQgbmFtZXMgKGl0IG1heSBjb250YWluIG5lc3RlZCBsaXN0cykuICp2YXJhcmdzKiBhbmQKKyAgICprZXl3b3JkcyogYXJlIHRoZSBuYW1lcyBvZiB0aGUgYGAqYGAgYW5kIGBgKipgYCBhcmd1bWVudHMgb3IgYGBOb25lYGAuCisgICAqbG9jYWxzKiBpcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgb2YgdGhlIGdpdmVuIGZyYW1lLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgICAgUmV0dXJucyBhIDp0ZXJtOmBuYW1lZCB0dXBsZWAgYGBBcmdJbmZvKGFyZ3MsIHZhcmFyZ3MsIGtleXdvcmRzLApAQCAtNTA0LDYgKzUxMiwzMiBAQAogICAgbWV0YXR5cGUgaXMgaW4gdXNlLCBjbHMgd2lsbCBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRjYWxsYXJncyhmdW5jWywgKmFyZ3NdWywgKiprd2RzXSkKKworICAgQmluZCB0aGUgKmFyZ3MqIGFuZCAqa3dkcyogdG8gdGhlIGFyZ3VtZW50IG5hbWVzIG9mIHRoZSBQeXRob24gZnVuY3Rpb24gb3IKKyAgIG1ldGhvZCAqZnVuYyosIGFzIGlmIGl0IHdhcyBjYWxsZWQgd2l0aCB0aGVtLiBGb3IgYm91bmQgbWV0aG9kcywgYmluZCBhbHNvIHRoZQorICAgZmlyc3QgYXJndW1lbnQgKHR5cGljYWxseSBuYW1lZCBgYHNlbGZgYCkgdG8gdGhlIGFzc29jaWF0ZWQgaW5zdGFuY2UuIEEgZGljdAorICAgaXMgcmV0dXJuZWQsIG1hcHBpbmcgdGhlIGFyZ3VtZW50IG5hbWVzIChpbmNsdWRpbmcgdGhlIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQKKyAgIGBgKipgYCBhcmd1bWVudHMsIGlmIGFueSkgdG8gdGhlaXIgdmFsdWVzIGZyb20gKmFyZ3MqIGFuZCAqa3dkcyouIEluIGNhc2Ugb2YKKyAgIGludm9raW5nICpmdW5jKiBpbmNvcnJlY3RseSwgaS5lLiB3aGVuZXZlciBgYGZ1bmMoKmFyZ3MsICoqa3dkcylgYCB3b3VsZCByYWlzZQorICAgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgaW5jb21wYXRpYmxlIHNpZ25hdHVyZSwgYW4gZXhjZXB0aW9uIG9mIHRoZSBzYW1lIHR5cGUKKyAgIGFuZCB0aGUgc2FtZSBvciBzaW1pbGFyIG1lc3NhZ2UgaXMgcmFpc2VkLiBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gZnJvbSBpbnNwZWN0IGltcG9ydCBnZXRjYWxsYXJncworICAgID4+PiBkZWYgZihhLCBiPTEsICpwb3MsICoqbmFtZWQpOgorICAgIC4uLiAgICAgcGFzcworICAgID4+PiBnZXRjYWxsYXJncyhmLCAxLCAyLCAzKQorICAgIHsnYSc6IDEsICduYW1lZCc6IHt9LCAnYic6IDIsICdwb3MnOiAoMywpfQorICAgID4+PiBnZXRjYWxsYXJncyhmLCBhPTIsIHg9NCkKKyAgICB7J2EnOiAyLCAnbmFtZWQnOiB7J3gnOiA0fSwgJ2InOiAxLCAncG9zJzogKCl9CisgICAgPj4+IGdldGNhbGxhcmdzKGYpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIF9pbnNwZWN0LXN0YWNrOgogCiBUaGUgaW50ZXJwcmV0ZXIgc3RhY2sKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lvLnJzdCBiL0RvYy9saWJyYXJ5L2lvLnJzdAppbmRleCBlM2Y4YjM2Li4zY2ZhYWVkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW8ucnN0CkBAIC02LDE2ICs2LDMwIEBACiAuLiBtb2R1bGVhdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgogLi4gbW9kdWxlYXV0aG9yOjogTWlrZSBWZXJkb25lIDxtaWtlLnZlcmRvbmVAZ21haWwuY29tPgogLi4gbW9kdWxlYXV0aG9yOjogTWFyayBSdXNzZWxsIDxtYXJrLnJ1c3NlbGxAemVuLmNvLnVrPgorLi4gbW9kdWxlYXV0aG9yOjogQW50b2luZSBQaXRyb3UgPHNvbGlwc2lzQHBpdHJvdS5uZXQ+CisuLiBtb2R1bGVhdXRob3I6OiBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyA8YW1hdXJ5ZmFAZ21haWwuY29tPgorLi4gbW9kdWxlYXV0aG9yOjogQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CisKIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCi1UaGUgOm1vZDpgaW9gIG1vZHVsZSBwcm92aWRlcyB0aGUgUHl0aG9uIGludGVyZmFjZXMgdG8gc3RyZWFtIGhhbmRsaW5nLiAgVGhlCi1idWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KK1RoZSA6bW9kOmBpb2AgbW9kdWxlIHByb3ZpZGVzIHRoZSBQeXRob24gaW50ZXJmYWNlcyB0byBzdHJlYW0gaGFuZGxpbmcuCitVbmRlciBQeXRob24gMi54LCB0aGlzIGlzIHByb3Bvc2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBidWlsdC1pbgorOmNsYXNzOmBmaWxlYCBvYmplY3QsIGJ1dCBpbiBQeXRob24gMy54IGl0IGlzIHRoZSBkZWZhdWx0IGludGVyZmFjZSB0bworYWNjZXNzIGZpbGVzIGFuZCBzdHJlYW1zLgorCisuLiBub3RlOjoKKworICAgU2luY2UgdGhpcyBtb2R1bGUgaGFzIGJlZW4gZGVzaWduZWQgcHJpbWFyaWx5IGZvciBQeXRob24gMy54LCB5b3UgaGF2ZSB0bworICAgYmUgYXdhcmUgdGhhdCBhbGwgdXNlcyBvZiAiYnl0ZXMiIGluIHRoaXMgZG9jdW1lbnQgcmVmZXIgdG8gdGhlCisgICA6Y2xhc3M6YHN0cmAgdHlwZSAob2Ygd2hpY2ggOmNsYXNzOmBieXRlc2AgaXMgYW4gYWxpYXMpLCBhbmQgYWxsIHVzZXMKKyAgIG9mICJ0ZXh0IiByZWZlciB0byB0aGUgOmNsYXNzOmB1bmljb2RlYCB0eXBlLiAgRnVydGhlcm1vcmUsIHRob3NlIHR3bworICAgdHlwZXMgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUgaW4gdGhlIDptb2Q6YGlvYCBBUElzLgogCiBBdCB0aGUgdG9wIG9mIHRoZSBJL08gaGllcmFyY2h5IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIDpjbGFzczpgSU9CYXNlYC4gIEl0CiBkZWZpbmVzIHRoZSBiYXNpYyBpbnRlcmZhY2UgdG8gYSBzdHJlYW0uICBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vCiBzZXBhcmF0aW9uIGJldHdlZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBzdHJlYW1zOyBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsbG93ZWQKLXRvIHRocm93IGFuIDpleGM6YElPRXJyb3JgIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCit0byByYWlzZSBhbiA6ZXhjOmBJT0Vycm9yYCBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgogCiBFeHRlbmRpbmcgOmNsYXNzOmBJT0Jhc2VgIGlzIDpjbGFzczpgUmF3SU9CYXNlYCB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUKIHJlYWRpbmcgYW5kIHdyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiAgOmNsYXNzOmBGaWxlSU9gIHN1YmNsYXNzZXMKQEAgLTMxLDEwICs0NSwxMCBAQAogCiBBbm90aGVyIDpjbGFzczpgSU9CYXNlYCBzdWJjbGFzcywgOmNsYXNzOmBUZXh0SU9CYXNlYCwgZGVhbHMgd2l0aAogc3RyZWFtcyB3aG9zZSBieXRlcyByZXByZXNlbnQgdGV4dCwgYW5kIGhhbmRsZXMgZW5jb2RpbmcgYW5kIGRlY29kaW5nCi1mcm9tIGFuZCB0byBzdHJpbmdzLiA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgLCB3aGljaCBleHRlbmRzIGl0LCBpcyBhCi1idWZmZXJlZCB0ZXh0IGludGVyZmFjZSB0byBhIGJ1ZmZlcmVkIHJhdyBzdHJlYW0KK2Zyb20gYW5kIHRvIDpjbGFzczpgdW5pY29kZWAgc3RyaW5ncy4gIDpjbGFzczpgVGV4dElPV3JhcHBlcmAsIHdoaWNoIGV4dGVuZHMKK2l0LCBpcyBhIGJ1ZmZlcmVkIHRleHQgaW50ZXJmYWNlIHRvIGEgYnVmZmVyZWQgcmF3IHN0cmVhbQogKDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgKS4gRmluYWxseSwgOmNsYXNzOmBTdHJpbmdJT2AgaXMgYW4gaW4tbWVtb3J5Ci1zdHJlYW0gZm9yIHRleHQuCitzdHJlYW0gZm9yIHVuaWNvZGUgdGV4dC4KIAogQXJndW1lbnQgbmFtZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uLCBhbmQgb25seSB0aGUgYXJndW1lbnRzIG9mCiA6ZnVuYzpgLm9wZW5gIGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnRzLgpAQCAtNDksMTYgKzYzLDE2IEBACiAgICBjbGFzc2VzLiAgOmZ1bmM6YC5vcGVuYCB1c2VzIHRoZSBmaWxlJ3MgYmxrc2l6ZSAoYXMgb2J0YWluZWQgYnkKICAgIDpmdW5jOmBvcy5zdGF0YCkgaWYgcG9zc2libGUuCiAKLS4uIGZ1bmN0aW9uOjogb3BlbihmaWxlWywgbW9kZVssIGJ1ZmZlcmluZ1ssIGVuY29kaW5nWywgZXJyb3JzWywgbmV3bGluZVssIGNsb3NlZmQ9VHJ1ZV1dXV1dXSkKKy4uIGZ1bmN0aW9uOjogb3BlbihmaWxlLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUpCiAKLSAgIE9wZW4gKmZpbGUqIGFuZCByZXR1cm4gYSBzdHJlYW0uICBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLCBhbgotICAgOmV4YzpgSU9FcnJvcmAgaXMgcmFpc2VkLgorICAgT3BlbiAqZmlsZSogYW5kIHJldHVybiBhIGNvcnJlc3BvbmRpbmcgc3RyZWFtLiAgSWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZCwKKyAgIGFuIDpleGM6YElPRXJyb3JgIGlzIHJhaXNlZC4KIAotICAgKmZpbGUqIGlzIGVpdGhlciBhIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgKGFuZCB0aGUgcGF0aCBpZiB0aGUgZmlsZSBpc24ndCBpbgotICAgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZCBvciBhIGZpbGUKLSAgIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gYmUgb3BlbmVkLiAgKElmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLAotICAgZm9yIGV4YW1wbGUsIGZyb20gOmZ1bmM6YG9zLmZkb3BlbmAsIGl0IGlzIGNsb3NlZCB3aGVuIHRoZSByZXR1cm5lZAotICAgSS9PIG9iamVjdCBpcyBjbG9zZWQsIHVubGVzcyAqY2xvc2VmZCogaXMgc2V0IHRvIGBgRmFsc2VgYC4pCisgICAqZmlsZSogaXMgZWl0aGVyIGEgc3RyaW5nIGdpdmluZyB0aGUgcGF0aG5hbWUgKGFic29sdXRlIG9yCisgICByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb2YgdGhlIGZpbGUgdG8gYmUgb3BlbmVkIG9yCisgICBhbiBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBiZSB3cmFwcGVkLiAgKElmIGEgZmlsZSBkZXNjcmlwdG9yCisgICBpcyBnaXZlbiwgaXQgaXMgY2xvc2VkIHdoZW4gdGhlIHJldHVybmVkIEkvTyBvYmplY3QgaXMgY2xvc2VkLCB1bmxlc3MKKyAgICpjbG9zZWZkKiBpcyBzZXQgdG8gYGBGYWxzZWBgLikKIAogICAgKm1vZGUqIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZSBpcwogICAgb3BlbmVkLiAgSXQgZGVmYXVsdHMgdG8gYGAncidgYCB3aGljaCBtZWFucyBvcGVuIGZvciByZWFkaW5nIGluIHRleHQgbW9kZS4KQEAgLTg4LDExICsxMDIsMTEgQEAKIAogICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmaWxlcyBvcGVuZWQgaW4gYmluYXJ5IGFuZCB0ZXh0IG1vZGVzLCBldmVuIHdoZW4KICAgIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lc24ndC4gIEZpbGVzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZQotICAgKGluY2x1ZGluZyBgYCdiJ2BgIGluIHRoZSAqbW9kZSogYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhcyBgYGJ5dGVzYGAKKyAgIChpbmNsdWRpbmcgYGAnYidgYCBpbiB0aGUgKm1vZGUqIGFyZ3VtZW50KSByZXR1cm4gY29udGVudHMgYXMgOmNsYXNzOmBieXRlc2AKICAgIG9iamVjdHMgd2l0aG91dCBhbnkgZGVjb2RpbmcuICBJbiB0ZXh0IG1vZGUgKHRoZSBkZWZhdWx0LCBvciB3aGVuIGBgJ3QnYGAgaXMKICAgIGluY2x1ZGVkIGluIHRoZSAqbW9kZSogYXJndW1lbnQpLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlIHJldHVybmVkIGFzCi0gICBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhIHBsYXRmb3JtLWRlcGVuZGVudAotICAgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCAqZW5jb2RpbmcqIGlmIGdpdmVuLgorICAgOmNsYXNzOmB1bmljb2RlYCBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhCisgICBwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCAqZW5jb2RpbmcqIGlmIGdpdmVuLgogCiAgICAqYnVmZmVyaW5nKiBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdApAQCAtMTExLDE5ICsxMjUsMjEgQEAKIAogICAgKmVuY29kaW5nKiBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZSBmaWxlLgogICAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRleHQgbW9kZS4gIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzIHBsYXRmb3JtCi0gICBkZXBlbmRlbnQsIGJ1dCBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUgdXNlZC4gIFNlZSB0aGUKLSAgIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgorICAgZGVwZW5kZW50ICh3aGF0ZXZlciA6ZnVuYzpgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nYCByZXR1cm5zKSwgYnV0IGFueQorICAgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUgdXNlZC4gIFNlZSB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgZm9yCisgICB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgogCiAgICAqZXJyb3JzKiBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgaG93IGVuY29kaW5nIGFuZCBkZWNvZGluZwotICAgZXJyb3JzIGFyZSB0byBiZSBoYW5kbGVkLiAgUGFzcyBgYCdzdHJpY3QnYGAgdG8gcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYAotICAgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGVycm9yICh0aGUgZGVmYXVsdCBvZiBgYE5vbmVgYCBoYXMgdGhlIHNhbWUKLSAgIGVmZmVjdCksIG9yIHBhc3MgYGAnaWdub3JlJ2BgIHRvIGlnbm9yZSBlcnJvcnMuICAoTm90ZSB0aGF0IGlnbm9yaW5nIGVuY29kaW5nCi0gICBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLikgIGBgJ3JlcGxhY2UnYGAgY2F1c2VzIGEgcmVwbGFjZW1lbnQgbWFya2VyCi0gICAoc3VjaCBhcyBgYCc/J2BgKSB0byBiZSBpbnNlcnRlZCB3aGVyZSB0aGVyZSBpcyBtYWxmb3JtZWQgZGF0YS4gIFdoZW4KLSAgIHdyaXRpbmcsIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIChyZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTCBjaGFyYWN0ZXIKLSAgIHJlZmVyZW5jZSkgb3IgYGAnYmFja3NsYXNocmVwbGFjZSdgYCAocmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZQotICAgc2VxdWVuY2VzKSBjYW4gYmUgdXNlZC4gIEFueSBvdGhlciBlcnJvciBoYW5kbGluZyBuYW1lIHRoYXQgaGFzIGJlZW4KLSAgIHJlZ2lzdGVyZWQgd2l0aCA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCBpcyBhbHNvIHZhbGlkLgorICAgZXJyb3JzIGFyZSB0byBiZSBoYW5kbGVkLS10aGlzIGNhbm5vdCBiZSB1c2VkIGluIGJpbmFyeSBtb2RlLiAgUGFzcworICAgYGAnc3RyaWN0J2BgIHRvIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nCisgICBlcnJvciAodGhlIGRlZmF1bHQgb2YgYGBOb25lYGAgaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIHBhc3MgYGAnaWdub3JlJ2BgIHRvCisgICBpZ25vcmUgZXJyb3JzLiAgKE5vdGUgdGhhdCBpZ25vcmluZyBlbmNvZGluZyBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLikKKyAgIGBgJ3JlcGxhY2UnYGAgY2F1c2VzIGEgcmVwbGFjZW1lbnQgbWFya2VyIChzdWNoIGFzIGBgJz8nYGApIHRvIGJlIGluc2VydGVkCisgICB3aGVyZSB0aGVyZSBpcyBtYWxmb3JtZWQgZGF0YS4gIFdoZW4gd3JpdGluZywgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAKKyAgIChyZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlKSBvcgorICAgYGAnYmFja3NsYXNocmVwbGFjZSdgYCAocmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXMpIGNhbiBiZQorICAgdXNlZC4gIEFueSBvdGhlciBlcnJvciBoYW5kbGluZyBuYW1lIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoCisgICA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCBpcyBhbHNvIHZhbGlkLgogCiAgICAqbmV3bGluZSogY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHQKICAgIG1vZGUpLiAgSXQgY2FuIGJlIGBgTm9uZWBgLCBgYCcnYGAsIGBgJ1xuJ2BgLCBgYCdccidgYCwgYW5kIGBgJ1xyXG4nYGAuICBJdApAQCAtMTQzLDIzICsxNTksMjYgQEAKICAgICAgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgYW55IGBgJ1xuJ2BgIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUgdHJhbnNsYXRlZCB0bwogICAgICB0aGUgZ2l2ZW4gc3RyaW5nLgogCi0gICBJZiAqY2xvc2VmZCogaXMgYGBGYWxzZWBgIGFuZCBhIGZpbGUgZGVzY3JpcHRvciByYXRoZXIgdGhhbiBhCi0gICBmaWxlbmFtZSB3YXMgZ2l2ZW4sIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlbgotICAgd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuICBJZiBhIGZpbGVuYW1lIGlzIGdpdmVuICpjbG9zZWZkKiBoYXMgbm8KLSAgIGVmZmVjdCBidXQgbXVzdCBiZSBgYFRydWVgYCAodGhlIGRlZmF1bHQpLgorICAgSWYgKmNsb3NlZmQqIGlzIGBgRmFsc2VgYCBhbmQgYSBmaWxlIGRlc2NyaXB0b3IgcmF0aGVyIHRoYW4gYSBmaWxlbmFtZSB3YXMKKyAgIGdpdmVuLCB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcworICAgY2xvc2VkLiAgSWYgYSBmaWxlbmFtZSBpcyBnaXZlbiAqY2xvc2VmZCogaGFzIG5vIGVmZmVjdCBhbmQgbXVzdCBiZSBgYFRydWVgYAorICAgKHRoZSBkZWZhdWx0KS4KIAotICAgVGhlIHR5cGUgb2YgZmlsZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gZGVwZW5kcwotICAgb24gdGhlIG1vZGUuICBXaGVuIDpmdW5jOmAub3BlbmAgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQgbW9kZQotICAgKGBgJ3cnYGAsIGBgJ3InYGAsIGBgJ3d0J2BgLCBgYCdydCdgYCwgZXRjLiksIGl0IHJldHVybnMgYQotICAgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4gV2hlbiB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgYmluYXJ5IG1vZGUsCi0gICB0aGUgcmV0dXJuZWQgY2xhc3MgdmFyaWVzOiBpbiByZWFkIGJpbmFyeSBtb2RlLCBpdCByZXR1cm5zIGEKLSAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgOyBpbiB3cml0ZSBiaW5hcnkgYW5kIGFwcGVuZCBiaW5hcnkgbW9kZXMsIGl0Ci0gICByZXR1cm5zIGEgOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAsIGFuZCBpbiByZWFkL3dyaXRlIG1vZGUsIGl0IHJldHVybnMKLSAgIGEgOmNsYXNzOmBCdWZmZXJlZFJhbmRvbWAuCisgICBUaGUgdHlwZSBvZiBmaWxlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZQorICAgbW9kZS4gIFdoZW4gOmZ1bmM6YC5vcGVuYCBpcyB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgdGV4dCBtb2RlIChgYCd3J2BgLAorICAgYGAncidgYCwgYGAnd3QnYGAsIGBgJ3J0J2BgLCBldGMuKSwgaXQgcmV0dXJucyBhIHN1YmNsYXNzIG9mCisgICA6Y2xhc3M6YFRleHRJT0Jhc2VgIChzcGVjaWZpY2FsbHkgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYCkuICBXaGVuIHVzZWQgdG8gb3BlbgorICAgYSBmaWxlIGluIGEgYmluYXJ5IG1vZGUgd2l0aCBidWZmZXJpbmcsIHRoZSByZXR1cm5lZCBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mCisgICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4gIFRoZSBleGFjdCBjbGFzcyB2YXJpZXM6IGluIHJlYWQgYmluYXJ5IG1vZGUsIGl0CisgICByZXR1cm5zIGEgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmA7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeSBtb2RlcywKKyAgIGl0IHJldHVybnMgYSA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucyBhCisgICA6Y2xhc3M6YEJ1ZmZlcmVkUmFuZG9tYC4gIFdoZW4gYnVmZmVyaW5nIGlzIGRpc2FibGVkLCB0aGUgcmF3IHN0cmVhbSwgYQorICAgc3ViY2xhc3Mgb2YgOmNsYXNzOmBSYXdJT0Jhc2VgLCA6Y2xhc3M6YEZpbGVJT2AsIGlzIHJldHVybmVkLgogCi0gICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIHN0cmluZyBvciBieXRlYXJyYXkgYXMgYSBmaWxlIGZvciBib3RoIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nLiAgRm9yIHN0cmluZ3MgOmNsYXNzOmBTdHJpbmdJT2AgY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUgb3BlbmVkIGluCi0gICBhIHRleHQgbW9kZSwgYW5kIGZvciBieXRlYXJyYXlzIGEgOmNsYXNzOmBCeXRlc0lPYCBjYW4gYmUgdXNlZCBsaWtlIGEKKyAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGFuIDpjbGFzczpgdW5pY29kZWAgb3IgOmNsYXNzOmBieXRlc2Agc3RyaW5nCisgICBhcyBhIGZpbGUgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4gIEZvciA6Y2xhc3M6YHVuaWNvZGVgIHN0cmluZ3MKKyAgIDpjbGFzczpgU3RyaW5nSU9gIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlIG9wZW5lZCBpbiB0ZXh0IG1vZGUsCisgICBhbmQgZm9yIDpjbGFzczpgYnl0ZXNgIGEgOmNsYXNzOmBCeXRlc0lPYCBjYW4gYmUgdXNlZCBsaWtlIGEKICAgIGZpbGUgb3BlbmVkIGluIGEgYmluYXJ5IG1vZGUuCiAKIApAQCAtMjAzLDIyICsyMjIsMjUgQEAKICAgIHN1cHBvcnQgYXJlIGNhbGxlZC4KIAogICAgVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzCi0gICA6Y2xhc3M6YGJ5dGVzYC4gIDpjbGFzczpgYnl0ZWFycmF5YFxzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzCi0gICAoc3VjaCBhcyA6Y2xhc3M6YHJlYWRpbnRvYCkgcmVxdWlyZWQuICBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aAotICAgOmNsYXNzOmBzdHJgIGRhdGEuCisgICA6Y2xhc3M6YGJ5dGVzYCAoYWxzbyBrbm93biBhcyA6Y2xhc3M6YHN0cmApLiAgOmNsYXNzOmBieXRlYXJyYXlgXHMgYXJlCisgICBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzIDpjbGFzczpgcmVhZGludG9gKSByZXF1aXJlZC4KKyAgIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIDpjbGFzczpgdW5pY29kZWAgZGF0YS4KIAogICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwogICAgdW5kZWZpbmVkLiAgSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSA6ZXhjOmBJT0Vycm9yYCBpbiB0aGlzIGNhc2UuCiAKICAgIElPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZyB0aGF0IGFuCiAgICA6Y2xhc3M6YElPQmFzZWAgb2JqZWN0IGNhbiBiZSBpdGVyYXRlZCBvdmVyIHlpZWxkaW5nIHRoZSBsaW5lcyBpbiBhIHN0cmVhbS4KKyAgIExpbmVzIGFyZSBkZWZpbmVkIHNsaWdodGx5IGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzdHJlYW0gaXMKKyAgIGEgYmluYXJ5IHN0cmVhbSAoeWllbGRpbmcgOmNsYXNzOmBieXRlc2ApLCBvciBhIHRleHQgc3RyZWFtICh5aWVsZGluZworICAgOmNsYXNzOmB1bmljb2RlYCBzdHJpbmdzKS4gIFNlZSA6bWV0aDpgcmVhZGxpbmVgIGJlbG93LgogCiAgICBJT0Jhc2UgaXMgYWxzbyBhIGNvbnRleHQgbWFuYWdlciBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZQogICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIEluIHRoaXMgZXhhbXBsZSwgKmZpbGUqIGlzIGNsb3NlZCBhZnRlciB0aGUKICAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQncyBzdWl0ZSBpcyBmaW5pc2hlZC0tLWV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vyczo6CiAKLSAgICAgIHdpdGggb3Blbignc3BhbS50eHQnLCAndycpIGFzIGZpbGU6Ci0gICAgICAgICAgZmlsZS53cml0ZSgnU3BhbSBhbmQgZWdncyEnKQorICAgICAgd2l0aCBpby5vcGVuKCdzcGFtLnR4dCcsICd3JykgYXMgZmlsZToKKyAgICAgICAgICBmaWxlLndyaXRlKHUnU3BhbSBhbmQgZWdncyEnKQogCiAgICA6Y2xhc3M6YElPQmFzZWAgcHJvdmlkZXMgdGhlc2UgZGF0YSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzOgogCkBAIC0yMjYsNyArMjQ4LDcgQEAKIAogICAgICAgRmx1c2ggYW5kIGNsb3NlIHRoaXMgc3RyZWFtLiBUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBmaWxlIGlzCiAgICAgICBhbHJlYWR5IGNsb3NlZC4gT25jZSB0aGUgZmlsZSBpcyBjbG9zZWQsIGFueSBvcGVyYXRpb24gb24gdGhlIGZpbGUKLSAgICAgIChlLmcuIHJlYWRpbmcgb3Igd3JpdGluZykgd2lsbCByYWlzZSBhbiA6ZXhjOmBWYWx1ZUVycm9yYC4KKyAgICAgIChlLmcuIHJlYWRpbmcgb3Igd3JpdGluZykgd2lsbCByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgLgogCiAgICAgICBBcyBhIGNvbnZlbmllbmNlLCBpdCBpcyBhbGxvd2VkIHRvIGNhbGwgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2U7CiAgICAgICBvbmx5IHRoZSBmaXJzdCBjYWxsLCBob3dldmVyLCB3aWxsIGhhdmUgYW4gZWZmZWN0LgpAQCAtMjU2LDcgKzI3OCw3IEBACiAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZCBmcm9tLiAgSWYgRmFsc2UsIDptZXRoOmByZWFkYAogICAgICAgd2lsbCByYWlzZSA6ZXhjOmBJT0Vycm9yYC4KIAotICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoW2xpbWl0XSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQogCiAgICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0CiAgICAgICBtb3N0ICpsaW1pdCogYnl0ZXMgd2lsbCBiZSByZWFkLgpAQCAtMjY1LDI0ICsyODcsMzAgQEAKICAgICAgIHRoZSAqbmV3bGluZXMqIGFyZ3VtZW50IHRvIDpmdW5jOmAub3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCiAgICAgICB0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lcyhbaGludF0pCisgICAuLiBtZXRob2Q6OiByZWFkbGluZXMoaGludD0tMSkKIAogICAgICAgUmVhZCBhbmQgcmV0dXJuIGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBzdHJlYW0uICAqaGludCogY2FuIGJlIHNwZWNpZmllZAogICAgICAgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQ6IG5vIG1vcmUgbGluZXMgd2lsbCBiZSByZWFkIGlmIHRoZQogICAgICAgdG90YWwgc2l6ZSAoaW4gYnl0ZXMvY2hhcmFjdGVycykgb2YgYWxsIGxpbmVzIHNvIGZhciBleGNlZWRzICpoaW50Ki4KIAotICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXRbLCB3aGVuY2VdKQorICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXQsIHdoZW5jZT1TRUVLX1NFVCkKIAogICAgICAgQ2hhbmdlIHRoZSBzdHJlYW0gcG9zaXRpb24gdG8gdGhlIGdpdmVuIGJ5dGUgKm9mZnNldCouICAqb2Zmc2V0KiBpcwogICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSAqd2hlbmNlKi4gIFZhbHVlcyBmb3IKICAgICAgICp3aGVuY2UqIGFyZToKIAotICAgICAgKiBgYDBgYCAtLSBzdGFydCBvZiB0aGUgc3RyZWFtICh0aGUgZGVmYXVsdCk7ICpvZmZzZXQqIHNob3VsZCBiZSB6ZXJvIG9yIHBvc2l0aXZlCi0gICAgICAqIGBgMWBgIC0tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uOyAqb2Zmc2V0KiBtYXkgYmUgbmVnYXRpdmUKLSAgICAgICogYGAyYGAgLS0gZW5kIG9mIHRoZSBzdHJlYW07ICpvZmZzZXQqIGlzIHVzdWFsbHkgbmVnYXRpdmUKKyAgICAgICogOmRhdGE6YFNFRUtfU0VUYCBvciBgYDBgYCAtLSBzdGFydCBvZiB0aGUgc3RyZWFtICh0aGUgZGVmYXVsdCk7CisgICAgICAgICpvZmZzZXQqIHNob3VsZCBiZSB6ZXJvIG9yIHBvc2l0aXZlCisgICAgICAqIDpkYXRhOmBTRUVLX0NVUmAgb3IgYGAxYGAgLS0gY3VycmVudCBzdHJlYW0gcG9zaXRpb247ICpvZmZzZXQqIG1heQorICAgICAgICBiZSBuZWdhdGl2ZQorICAgICAgKiA6ZGF0YTpgU0VFS19FTkRgIG9yIGBgMmBgIC0tIGVuZCBvZiB0aGUgc3RyZWFtOyAqb2Zmc2V0KiBpcyB1c3VhbGx5CisgICAgICAgIG5lZ2F0aXZlCiAKICAgICAgIFJldHVybiB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgogCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgICAgICAgIFRoZSBgYFNFRUtfKmBgIGNvbnN0YW50cworCiAgICAuLiBtZXRob2Q6OiBzZWVrYWJsZSgpCiAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyZWFtIHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MuICBJZiBgYEZhbHNlYGAsCkBAIC0yOTIsNyArMzIwLDcgQEAKIAogICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4KIAotICAgLi4gbWV0aG9kOjogdHJ1bmNhdGUoW3NpemVdKQorICAgLi4gbWV0aG9kOjogdHJ1bmNhdGUoc2l6ZT1Ob25lKQogCiAgICAgICBSZXNpemUgdGhlIHN0cmVhbSB0byB0aGUgZ2l2ZW4gKnNpemUqIGluIGJ5dGVzIChvciB0aGUgY3VycmVudCBwb3NpdGlvbgogICAgICAgaWYgKnNpemUqIGlzIG5vdCBzcGVjaWZpZWQpLiAgVGhlIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uIGlzbid0IGNoYW5nZWQuCkBAIC0zMTgsMTUgKzM0NiwyMyBAQAogICAgQmFzZSBjbGFzcyBmb3IgcmF3IGJpbmFyeSBJL08uICBJdCBpbmhlcml0cyA6Y2xhc3M6YElPQmFzZWAuICBUaGVyZSBpcyBubwogICAgcHVibGljIGNvbnN0cnVjdG9yLgogCisgICBSYXcgYmluYXJ5IEkvTyB0eXBpY2FsbHkgcHJvdmlkZXMgbG93LWxldmVsIGFjY2VzcyB0byBhbiB1bmRlcmx5aW5nIE9TCisgICBkZXZpY2Ugb3IgQVBJLCBhbmQgZG9lcyBub3QgdHJ5IHRvIGVuY2Fwc3VsYXRlIGl0IGluIGhpZ2gtbGV2ZWwgcHJpbWl0aXZlcworICAgKHRoaXMgaXMgbGVmdCB0byBCdWZmZXJlZCBJL08gYW5kIFRleHQgSS9PLCBkZXNjcmliZWQgbGF0ZXIgaW4gdGhpcyBwYWdlKS4KKwogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAsCiAgICBSYXdJT0Jhc2UgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0gICAuLiBtZXRob2Q6OiByZWFkKFtuXSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIGFsbCB0aGUgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtIHVudGlsIEVPRiwgb3IgaWYgKm4qIGlzCi0gICAgICBzcGVjaWZpZWQsIHVwIHRvICpuKiBieXRlcy4gIE9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEFuIGVtcHR5Ci0gICAgICBieXRlcyBvYmplY3QgaXMgcmV0dXJuZWQgb24gRU9GOyBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiB0aGUgb2JqZWN0IGlzIHNldAotICAgICAgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgorICAgICAgUmVhZCB1cCB0byAqbiogYnl0ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm4gdGhlbS4gIEFzIGEgY29udmVuaWVuY2UsCisgICAgICBpZiAqbiogaXMgdW5zcGVjaWZpZWQgb3IgLTEsIDptZXRoOmByZWFkYWxsYCBpcyBjYWxsZWQuICBPdGhlcndpc2UsCisgICAgICBvbmx5IG9uZSBzeXN0ZW0gY2FsbCBpcyBldmVyIG1hZGUuICBGZXdlciB0aGFuICpuKiBieXRlcyBtYXkgYmUKKyAgICAgIHJldHVybmVkIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGwgcmV0dXJucyBmZXdlciB0aGFuICpuKiBieXRlcy4KKworICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqbiogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KKyAgICAgIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUsCisgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAogICAgLi4gbWV0aG9kOjogcmVhZGFsbCgpCiAKQEAgLTMzNSwzOCArMzcxLDY1IEBACiAKICAgIC4uIG1ldGhvZDo6IHJlYWRpbnRvKGIpCiAKLSAgICAgIFJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYnl0ZWFycmF5ICpiKiBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAgICAgIHJlYWQuCisgICAgICBSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGJ5dGVhcnJheSAqYiogYW5kIHJldHVybiB0aGUgbnVtYmVyCisgICAgICBvZiBieXRlcyByZWFkLiAgSWYgdGhlIG9iamVjdCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBhbmQgbm8KKyAgICAgIGJ5dGVzIGFyZSBhdmFpbGFibGUsIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShiKQogCiAgICAgICBXcml0ZSB0aGUgZ2l2ZW4gYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCwgKmIqLCB0byB0aGUgdW5kZXJseWluZyByYXcKLSAgICAgIHN0cmVhbSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAoVGhpcyBpcyBuZXZlciBsZXNzIHRoYW4KLSAgICAgIGBgbGVuKGIpYGAsIHNpbmNlIGlmIHRoZSB3cml0ZSBmYWlscywgYW4gOmV4YzpgSU9FcnJvcmAgd2lsbCBiZSByYWlzZWQpLgorICAgICAgc3RyZWFtIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuCisgICAgICBgYGxlbihiKWBgLCBkZXBlbmRpbmcgb24gc3BlY2lmaWNzIG9mIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0sIGFuZAorICAgICAgZXNwZWNpYWxseSBpZiBpdCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZS4gIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIHRoZQorICAgICAgcmF3IHN0cmVhbSBpcyBzZXQgbm90IHRvIGJsb2NrIGFuZCBubyBzaW5nbGUgYnl0ZSBjb3VsZCBiZSByZWFkaWx5CisgICAgICB3cml0dGVuIHRvIGl0LgogCiAKIC4uIGNsYXNzOjogQnVmZmVyZWRJT0Jhc2UKIAotICAgQmFzZSBjbGFzcyBmb3Igc3RyZWFtcyB0aGF0IHN1cHBvcnQgYnVmZmVyaW5nLiAgSXQgaW5oZXJpdHMgOmNsYXNzOmBJT0Jhc2VgLgotICAgVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgorICAgQmFzZSBjbGFzcyBmb3IgYmluYXJ5IHN0cmVhbXMgdGhhdCBzdXBwb3J0IHNvbWUga2luZCBvZiBidWZmZXJpbmcuCisgICBJdCBpbmhlcml0cyA6Y2xhc3M6YElPQmFzZWAuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KIAotICAgVGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIDpjbGFzczpgUmF3SU9CYXNlYCBpcyB0aGF0IHRoZSA6bWV0aDpgcmVhZGAgbWV0aG9kCi0gICBzdXBwb3J0cyBvbWl0dGluZyB0aGUgKnNpemUqIGFyZ3VtZW50LCBhbmQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHQKKyAgIFRoZSBtYWluIGRpZmZlcmVuY2Ugd2l0aCA6Y2xhc3M6YFJhd0lPQmFzZWAgaXMgdGhhdCBtZXRob2RzIDptZXRoOmByZWFkYCwKKyAgIDptZXRoOmByZWFkaW50b2AgYW5kIDptZXRoOmB3cml0ZWAgd2lsbCB0cnkgKHJlc3BlY3RpdmVseSkgdG8gcmVhZCBhcyBtdWNoCisgICBpbnB1dCBhcyByZXF1ZXN0ZWQgb3IgdG8gY29uc3VtZSBhbGwgZ2l2ZW4gb3V0cHV0LCBhdCB0aGUgZXhwZW5zZSBvZgorICAgbWFraW5nIHBlcmhhcHMgbW9yZSB0aGFuIG9uZSBzeXN0ZW0gY2FsbC4KKworICAgSW4gYWRkaXRpb24sIHRob3NlIG1ldGhvZHMgY2FuIHJhaXNlIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaWYgdGhlCisgICB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIGNhbm5vdCB0YWtlIG9yIGdpdmUKKyAgIGVub3VnaCBkYXRhOyB1bmxpa2UgdGhlaXIgOmNsYXNzOmBSYXdJT0Jhc2VgIGNvdW50ZXJwYXJ0cywgdGhleSB3aWxsCisgICBuZXZlciByZXR1cm4gYGBOb25lYGAuCisKKyAgIEJlc2lkZXMsIHRoZSA6bWV0aDpgcmVhZGAgbWV0aG9kIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0CiAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IGRlZmVycyB0byA6bWV0aDpgcmVhZGludG9gLgogCi0gICBJbiBhZGRpdGlvbiwgOm1ldGg6YHJlYWRgLCA6bWV0aDpgcmVhZGludG9gLCBhbmQgOm1ldGg6YHdyaXRlYCBtYXkgcmFpc2UKLSAgIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbiBub24tYmxvY2tpbmcgbW9kZQotICAgYW5kIG5vdCByZWFkeTsgdW5saWtlIHRoZWlyIHJhdyBjb3VudGVycGFydHMsIHRoZXkgd2lsbCBuZXZlciByZXR1cm4KLSAgIGBgTm9uZWBgLgorICAgQSB0eXBpY2FsIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgaW5oZXJpdCBmcm9tIGEKKyAgIDpjbGFzczpgUmF3SU9CYXNlYCBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLCBsaWtlCisgICA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCBhbmQgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgZG8uCiAKLSAgIEEgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgbm90IGluaGVyaXQgZnJvbSBhIDpjbGFzczpgUmF3SU9CYXNlYAotICAgaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZSBsaWtlIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIGFuZAotICAgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAuCi0KLSAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCisgICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBwcm92aWRlcyBvciBvdmVycmlkZXMgdGhlc2UgbWVtYmVycyBpbiBhZGRpdGlvbiB0bwogICAgdGhvc2UgZnJvbSA6Y2xhc3M6YElPQmFzZWA6CiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQoW25dKQorICAgLi4gYXR0cmlidXRlOjogcmF3CisKKyAgICAgIFRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gKGEgOmNsYXNzOmBSYXdJT0Jhc2VgIGluc3RhbmNlKSB0aGF0CisgICAgICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBkZWFscyB3aXRoLiAgVGhpcyBpcyBub3QgcGFydCBvZiB0aGUKKyAgICAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIEFQSSBhbmQgbWF5IG5vdCBleGlzdCBvbiBzb21lIGltcGxlbWVudGF0aW9ucy4KKworICAgLi4gbWV0aG9kOjogZGV0YWNoKCkKKworICAgICAgU2VwYXJhdGUgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBmcm9tIHRoZSBidWZmZXIgYW5kIHJldHVybiBpdC4KKworICAgICAgQWZ0ZXIgdGhlIHJhdyBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBidWZmZXIgaXMgaW4gYW4gdW51c2FibGUKKyAgICAgIHN0YXRlLgorCisgICAgICBTb21lIGJ1ZmZlcnMsIGxpa2UgOmNsYXNzOmBCeXRlc0lPYCwgZG8gbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBzaW5nbGUKKyAgICAgIHJhdyBzdHJlYW0gdG8gcmV0dXJuIGZyb20gdGhpcyBtZXRob2QuICBUaGV5IHJhaXNlCisgICAgICA6ZXhjOmBVbnN1cHBvcnRlZE9wZXJhdGlvbmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisgICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCiAKICAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqbiogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsIG9yCiAgICAgICBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5IGJ5dGVzCkBAIC0zNzgsOCArNDQxLDE1IEBACiAgICAgICBvbmUgcmF3IHJlYWQgd2lsbCBiZSBpc3N1ZWQsIGFuZCBhIHNob3J0IHJlc3VsdCBkb2VzIG5vdCBpbXBseSB0aGF0IEVPRiBpcwogICAgICAgaW1taW5lbnQuCiAKLSAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBoYXMgbm8KLSAgICAgIGRhdGEgYXQgdGhlIG1vbWVudC4KKyAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBpbgorICAgICAgbm9uIGJsb2NraW5nLW1vZGUsIGFuZCBoYXMgbm8gZGF0YSBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KKworICAgLi4gbWV0aG9kOjogcmVhZDEobj0tMSkKKworICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICByYXcgc3RyZWFtJ3MgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGAgbWV0aG9kLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdQorICAgICAgYXJlIGltcGxlbWVudGluZyB5b3VyIG93biBidWZmZXJpbmcgb24gdG9wIG9mIGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAKKyAgICAgIG9iamVjdC4KIAogICAgLi4gbWV0aG9kOjogcmVhZGludG8oYikKIApAQCAtMzg3LDM1ICs0NTcsNDcgQEAKICAgICAgIHJlYWQuCiAKICAgICAgIExpa2UgOm1ldGg6YHJlYWRgLCBtdWx0aXBsZSByZWFkcyBtYXkgYmUgaXNzdWVkIHRvIHRoZSB1bmRlcmx5aW5nIHJhdwotICAgICAgc3RyZWFtLCB1bmxlc3MgdGhlIGxhdHRlciBpcyAnaW50ZXJhY3RpdmUuJworICAgICAgc3RyZWFtLCB1bmxlc3MgdGhlIGxhdHRlciBpcyAnaW50ZXJhY3RpdmUnLgogCi0gICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaGFzIG5vCi0gICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCisgICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4KKyAgICAgIG5vbiBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRlKGIpCiAKLSAgICAgIFdyaXRlIHRoZSBnaXZlbiBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LCAqYiosIHRvIHRoZSB1bmRlcmx5aW5nIHJhdwotICAgICAgc3RyZWFtIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIChuZXZlciBsZXNzIHRoYW4gYGBsZW4oYilgYCwKLSAgICAgIHNpbmNlIGlmIHRoZSB3cml0ZSBmYWlscyBhbiA6ZXhjOmBJT0Vycm9yYCB3aWxsIGJlIHJhaXNlZCkuCisgICAgICBXcml0ZSB0aGUgZ2l2ZW4gYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCwgKmIqIGFuZCByZXR1cm4gdGhlIG51bWJlcgorICAgICAgb2YgYnl0ZXMgd3JpdHRlbiAobmV2ZXIgbGVzcyB0aGFuIGBgbGVuKGIpYGAsIHNpbmNlIGlmIHRoZSB3cml0ZSBmYWlscworICAgICAgYW4gOmV4YzpgSU9FcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgRGVwZW5kaW5nIG9uIHRoZSBhY3R1YWwKKyAgICAgIGltcGxlbWVudGF0aW9uLCB0aGVzZSBieXRlcyBtYXkgYmUgcmVhZGlseSB3cml0dGVuIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICBzdHJlYW0sIG9yIGhlbGQgaW4gYSBidWZmZXIgZm9yIHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5IHJlYXNvbnMuCiAKLSAgICAgIEEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLCBhbmQgdGhlCi0gICAgICB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gY2Fubm90IGFjY2VwdCBtb3JlIGRhdGEgYXQgdGhlIG1vbWVudC4KKyAgICAgIFdoZW4gaW4gbm9uLWJsb2NraW5nIG1vZGUsIGEgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlCisgICAgICBkYXRhIG5lZWRlZCB0byBiZSB3cml0dGVuIHRvIHRoZSByYXcgc3RyZWFtIGJ1dCBpdCBjb3VsZG4ndCBhY2NlcHQKKyAgICAgIGFsbCB0aGUgZGF0YSB3aXRob3V0IGJsb2NraW5nLgogCiAKIFJhdyBGaWxlIEkvTwogLS0tLS0tLS0tLS0tCiAKLS4uIGNsYXNzOjogRmlsZUlPKG5hbWVbLCBtb2RlXSkKKy4uIGNsYXNzOjogRmlsZUlPKG5hbWUsIG1vZGU9J3InLCBjbG9zZWZkPVRydWUpCiAKLSAgIDpjbGFzczpgRmlsZUlPYCByZXByZXNlbnRzIGEgZmlsZSBjb250YWluaW5nIGJ5dGVzIGRhdGEuICBJdCBpbXBsZW1lbnRzCi0gICB0aGUgOmNsYXNzOmBSYXdJT0Jhc2VgIGludGVyZmFjZSAoYW5kIHRoZXJlZm9yZSB0aGUgOmNsYXNzOmBJT0Jhc2VgCi0gICBpbnRlcmZhY2UsIHRvbykuCisgICA6Y2xhc3M6YEZpbGVJT2AgcmVwcmVzZW50cyBhbiBPUy1sZXZlbCBmaWxlIGNvbnRhaW5pbmcgYnl0ZXMgZGF0YS4KKyAgIEl0IGltcGxlbWVudHMgdGhlIDpjbGFzczpgUmF3SU9CYXNlYCBpbnRlcmZhY2UgKGFuZCB0aGVyZWZvcmUgdGhlCisgICA6Y2xhc3M6YElPQmFzZWAgaW50ZXJmYWNlLCB0b28pLgorCisgICBUaGUgKm5hbWUqIGNhbiBiZSBvbmUgb2YgdHdvIHRoaW5nczoKKworICAgKiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggd2lsbCBiZSBvcGVuZWQ7CisgICAqIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgYW4gZXhpc3RpbmcgT1MtbGV2ZWwgZmlsZSBkZXNjcmlwdG9yCisgICAgIHRvIHdoaWNoIHRoZSByZXN1bHRpbmcgOmNsYXNzOmBGaWxlSU9gIG9iamVjdCB3aWxsIGdpdmUgYWNjZXNzLgogCiAgICBUaGUgKm1vZGUqIGNhbiBiZSBgYCdyJ2BgLCBgYCd3J2BgIG9yIGBgJ2EnYGAgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCB3cml0aW5nLAogICAgb3IgYXBwZW5kaW5nLiAgVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3Qgd2hlbiBvcGVuZWQgZm9yCiAgICB3cml0aW5nIG9yIGFwcGVuZGluZzsgaXQgd2lsbCBiZSB0cnVuY2F0ZWQgd2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcuICBBZGQgYQogICAgYGAnKydgYCB0byB0aGUgbW9kZSB0byBhbGxvdyBzaW11bHRhbmVvdXMgcmVhZGluZyBhbmQgd3JpdGluZy4KIAorICAgVGhlIDptZXRoOmByZWFkYCAod2hlbiBjYWxsZWQgd2l0aCBhIHBvc2l0aXZlIGFyZ3VtZW50KSwgOm1ldGg6YHJlYWRpbnRvYAorICAgYW5kIDptZXRoOmB3cml0ZWAgbWV0aG9kcyBvbiB0aGlzIGNsYXNzIHdpbGwgb25seSBtYWtlIG9uZSBzeXN0ZW0gY2FsbC4KKwogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAgYW5kCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAsIDpjbGFzczpgRmlsZUlPYCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGRhdGEKICAgIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHM6CkBAIC00MjksMzggKzUxMSwxOSBAQAogICAgICAgVGhlIGZpbGUgbmFtZS4gIFRoaXMgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB3aGVuIG5vIG5hbWUgaXMKICAgICAgIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCi0KLSAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBieXRlcy4gIE9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIG1hZGUsIHNvIGl0IGlzCi0gICAgICBwb3NzaWJsZSB0aGF0IGxlc3MgZGF0YSB0aGFuIHdhcyByZXF1ZXN0ZWQgaXMgcmV0dXJuZWQuICBVc2UgOmZ1bmM6YGxlbmAKLSAgICAgIG9uIHRoZSByZXR1cm5lZCBieXRlcyBvYmplY3QgdG8gc2VlIGhvdyBtYW55IGJ5dGVzIHdlcmUgYWN0dWFsbHkgcmV0dXJuZWQuCi0gICAgICAoSW4gbm9uLWJsb2NraW5nIG1vZGUsIGBgTm9uZWBgIGlzIHJldHVybmVkIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGUuKQotCi0gICAuLiBtZXRob2Q6OiByZWFkYWxsKCkKLQotICAgICAgUmVhZCBhbmQgcmV0dXJuIHRoZSBlbnRpcmUgZmlsZSdzIGNvbnRlbnRzIGluIGEgc2luZ2xlIGJ5dGVzIG9iamVjdC4gIEFzCi0gICAgICBtdWNoIGFzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSBpcyByZXR1cm5lZCBpbiBub24tYmxvY2tpbmcgbW9kZS4gIElmIHRoZQotICAgICAgRU9GIGhhcyBiZWVuIHJlYWNoZWQsIGBgYicnYGAgaXMgcmV0dXJuZWQuCi0KLSAgIC4uIG1ldGhvZDo6IHdyaXRlKGIpCi0KLSAgICAgIFdyaXRlIHRoZSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LCAqYiosIHRvIHRoZSBmaWxlLCBhbmQgcmV0dXJuCi0gICAgICB0aGUgbnVtYmVyIGFjdHVhbGx5IHdyaXR0ZW4uIE9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIG1hZGUsIHNvIGl0Ci0gICAgICBpcyBwb3NzaWJsZSB0aGF0IG9ubHkgc29tZSBvZiB0aGUgZGF0YSBpcyB3cml0dGVuLgotCi0gICBOb3RlIHRoYXQgdGhlIGluaGVyaXRlZCBgYHJlYWRpbnRvKClgYCBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkIG9uCi0gICA6Y2xhc3M6YEZpbGVJT2Agb2JqZWN0cy4KLQogCiBCdWZmZXJlZCBTdHJlYW1zCiAtLS0tLS0tLS0tLS0tLS0tCiAKK0J1ZmZlcmVkIEkvTyBzdHJlYW1zIHByb3ZpZGUgYSBoaWdoZXItbGV2ZWwgaW50ZXJmYWNlIHRvIGFuIEkvTyBkZXZpY2UKK3RoYW4gcmF3IEkvTyBkb2VzLgorCiAuLiBjbGFzczo6IEJ5dGVzSU8oW2luaXRpYWxfYnl0ZXNdKQogCiAgICBBIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnl0ZXMgYnVmZmVyLiAgSXQgaW5oZXJpdHMKICAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgogCi0gICBUaGUgYXJndW1lbnQgKmluaXRpYWxfYnl0ZXMqIGlzIGFuIG9wdGlvbmFsIGluaXRpYWwgYnl0ZWFycmF5LgorICAgVGhlIGFyZ3VtZW50ICppbml0aWFsX2J5dGVzKiBpcyBhbiBvcHRpb25hbCBpbml0aWFsIDpjbGFzczpgYnl0ZXNgLgogCiAgICA6Y2xhc3M6YEJ5dGVzSU9gIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvIHRob3NlCiAgICBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CkBAIC00NzQsMTAgKzUzNywxMyBAQAogICAgICAgSW4gOmNsYXNzOmBCeXRlc0lPYCwgdGhpcyBpcyB0aGUgc2FtZSBhcyA6bWV0aDpgcmVhZGAuCiAKIAotLi4gY2xhc3M6OiBCdWZmZXJlZFJlYWRlcihyYXdbLCBidWZmZXJfc2l6ZV0pCisuLiBjbGFzczo6IEJ1ZmZlcmVkUmVhZGVyKHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSkKIAotICAgQSBidWZmZXIgZm9yIGEgcmVhZGFibGUsIHNlcXVlbnRpYWwgOmNsYXNzOmBSYXdJT0Jhc2VgIG9iamVjdC4gIEl0IGluaGVyaXRzCi0gICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4KKyAgIEEgYnVmZmVyIHByb3ZpZGluZyBoaWdoZXItbGV2ZWwgYWNjZXNzIHRvIGEgcmVhZGFibGUsIHNlcXVlbnRpYWwKKyAgIDpjbGFzczpgUmF3SU9CYXNlYCBvYmplY3QuICBJdCBpbmhlcml0cyA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4KKyAgIFdoZW4gcmVhZGluZyBkYXRhIGZyb20gdGhpcyBvYmplY3QsIGEgbGFyZ2VyIGFtb3VudCBvZiBkYXRhIG1heSBiZQorICAgcmVxdWVzdGVkIGZyb20gdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSwgYW5kIGtlcHQgaW4gYW4gaW50ZXJuYWwgYnVmZmVyLgorICAgVGhlIGJ1ZmZlcmVkIGRhdGEgY2FuIHRoZW4gYmUgcmV0dXJuZWQgZGlyZWN0bHkgb24gc3Vic2VxdWVudCByZWFkcy4KIAogICAgVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCBmb3IgdGhlIGdpdmVuIHJlYWRhYmxlCiAgICAqcmF3KiBzdHJlYW0gYW5kICpidWZmZXJfc2l6ZSouICBJZiAqYnVmZmVyX3NpemUqIGlzIG9taXR0ZWQsCkBAIC00ODgsMTEgKzU1NCw5IEBACiAKICAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQogCi0gICAgICBSZXR1cm4gMSAob3IgKm4qIGlmIHNwZWNpZmllZCkgYnl0ZXMgZnJvbSBhIGJ1ZmZlciB3aXRob3V0IGFkdmFuY2luZyB0aGUKLSAgICAgIHBvc2l0aW9uLiAgT25seSBhIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUKLSAgICAgIGNhbGwuIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3MgdGhhbiByZXF1ZXN0ZWQgc2luY2UgYXQKLSAgICAgIG1vc3QgYWxsIHRoZSBidWZmZXIncyBieXRlcyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBlbmQgYXJlCi0gICAgICByZXR1cm5lZC4KKyAgICAgIFJldHVybiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiAgQXQgbW9zdCBvbmUKKyAgICAgIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUgY2FsbC4gVGhlIG51bWJlciBvZgorICAgICAgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3Mgb3IgbW9yZSB0aGFuIHJlcXVlc3RlZC4KIAogICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCiAKQEAgLTUwNiwxNSArNTcwLDI0IEBACiAgICAgICBPdGhlcndpc2UsIG9uZSByYXcgc3RyZWFtIHJlYWQgY2FsbCBpcyBtYWRlLgogCiAKLS4uIGNsYXNzOjogQnVmZmVyZWRXcml0ZXIocmF3WywgYnVmZmVyX3NpemVbLCBtYXhfYnVmZmVyX3NpemVdXSkKKy4uIGNsYXNzOjogQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKQogCi0gICBBIGJ1ZmZlciBmb3IgYSB3cml0ZWFibGUgc2VxdWVudGlhbCBSYXdJTyBvYmplY3QuICBJdCBpbmhlcml0cwotICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuCisgICBBIGJ1ZmZlciBwcm92aWRpbmcgaGlnaGVyLWxldmVsIGFjY2VzcyB0byBhIHdyaXRlYWJsZSwgc2VxdWVudGlhbAorICAgOmNsYXNzOmBSYXdJT0Jhc2VgIG9iamVjdC4gIEl0IGluaGVyaXRzIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgorICAgV2hlbiB3cml0aW5nIHRvIHRoaXMgb2JqZWN0LCBkYXRhIGlzIG5vcm1hbGx5IGhlbGQgaW50byBhbiBpbnRlcm5hbAorICAgYnVmZmVyLiAgVGhlIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIHRoZSB1bmRlcmx5aW5nIDpjbGFzczpgUmF3SU9CYXNlYAorICAgb2JqZWN0IHVuZGVyIHZhcmlvdXMgY29uZGl0aW9ucywgaW5jbHVkaW5nOgorCisgICAqIHdoZW4gdGhlIGJ1ZmZlciBnZXRzIHRvbyBzbWFsbCBmb3IgYWxsIHBlbmRpbmcgZGF0YTsKKyAgICogd2hlbiA6bWV0aDpgZmx1c2goKWAgaXMgY2FsbGVkOworICAgKiB3aGVuIGEgOm1ldGg6YHNlZWsoKWAgaXMgcmVxdWVzdGVkIChmb3IgOmNsYXNzOmBCdWZmZXJlZFJhbmRvbWAgb2JqZWN0cyk7CisgICAqIHdoZW4gdGhlIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIG9iamVjdCBpcyBjbG9zZWQgb3IgZGVzdHJveWVkLgogCiAgICBUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIGZvciB0aGUgZ2l2ZW4gd3JpdGVhYmxlCiAgICAqcmF3KiBzdHJlYW0uICBJZiB0aGUgKmJ1ZmZlcl9zaXplKiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvCi0gICA6ZGF0YTpgREVBRlVMVF9CVUZGRVJfU0laRWAuICBJZiAqbWF4X2J1ZmZlcl9zaXplKiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0bwotICAgdHdpY2UgdGhlIGJ1ZmZlciBzaXplLgorICAgOmRhdGE6YERFRkFVTFRfQlVGRkVSX1NJWkVgLgorCisgICBBIHRoaXJkIGFyZ3VtZW50LCAqbWF4X2J1ZmZlcl9zaXplKiwgaXMgc3VwcG9ydGVkLCBidXQgdW51c2VkIGFuZCBkZXByZWNhdGVkLgogCiAgICA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCBwcm92aWRlcyBvciBvdmVycmlkZXMgdGhlc2UgbWV0aG9kcyBpbiBhZGRpdGlvbiB0bwogICAgdGhvc2UgZnJvbSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBhbmQgOmNsYXNzOmBJT0Jhc2VgOgpAQCAtNTI2LDM1ICs1OTksNDEgQEAKIAogICAgLi4gbWV0aG9kOjogd3JpdGUoYikKIAotICAgICAgV3JpdGUgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsICpiKiwgb250byB0aGUgcmF3IHN0cmVhbSBhbmQgcmV0dXJuCi0gICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIHdoZW4gdGhlCi0gICAgICByYXcgc3RyZWFtIGJsb2Nrcy4KKyAgICAgIFdyaXRlIHRoZSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LCAqYiogYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICB3cml0dGVuLiAgV2hlbiBpbiBub24tYmxvY2tpbmcgbW9kZSwgYSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZAorICAgICAgaWYgdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSB3cml0dGVuIG91dCBidXQgdGhlIHJhdyBzdHJlYW0gYmxvY2tzLgogCiAKLS4uIGNsYXNzOjogQnVmZmVyZWRSV1BhaXIocmVhZGVyLCB3cml0ZXJbLCBidWZmZXJfc2l6ZVssIG1heF9idWZmZXJfc2l6ZV1dKQorLi4gY2xhc3M6OiBCdWZmZXJlZFJXUGFpcihyZWFkZXIsIHdyaXRlciwgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSkKIAotICAgQSBjb21iaW5lZCBidWZmZXJlZCB3cml0ZXIgYW5kIHJlYWRlciBvYmplY3QgZm9yIGEgcmF3IHN0cmVhbSB0aGF0IGNhbiBiZQotICAgd3JpdHRlbiB0byBhbmQgcmVhZCBmcm9tLiAgSXQgaGFzIGFuZCBzdXBwb3J0cyBib3RoIDptZXRoOmByZWFkYCwgOm1ldGg6YHdyaXRlYCwKLSAgIGFuZCB0aGVpciB2YXJpYW50cy4gIFRoaXMgaXMgdXNlZnVsIGZvciBzb2NrZXRzIGFuZCB0d28td2F5IHBpcGVzLgotICAgSXQgaW5oZXJpdHMgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuCisgICBBIGJ1ZmZlcmVkIEkvTyBvYmplY3QgZ2l2aW5nIGEgY29tYmluZWQsIGhpZ2hlci1sZXZlbCBhY2Nlc3MgdG8gdHdvCisgICBzZXF1ZW50aWFsIDpjbGFzczpgUmF3SU9CYXNlYCBvYmplY3RzOiBvbmUgcmVhZGFibGUsIHRoZSBvdGhlciB3cml0ZWFibGUuCisgICBJdCBpcyB1c2VmdWwgZm9yIHBhaXJzIG9mIHVuaWRpcmVjdGlvbmFsIGNvbW11bmljYXRpb24gY2hhbm5lbHMKKyAgIChwaXBlcywgZm9yIGluc3RhbmNlKS4gIEl0IGluaGVyaXRzIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgogCiAgICAqcmVhZGVyKiBhbmQgKndyaXRlciogYXJlIDpjbGFzczpgUmF3SU9CYXNlYCBvYmplY3RzIHRoYXQgYXJlIHJlYWRhYmxlIGFuZAogICAgd3JpdGVhYmxlIHJlc3BlY3RpdmVseS4gIElmIHRoZSAqYnVmZmVyX3NpemUqIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8KLSAgIDpkYXRhOmBERUZBVUxUX0JVRkZFUl9TSVpFYC4gIFRoZSAqbWF4X2J1ZmZlcl9zaXplKiAoZm9yIHRoZSBidWZmZXJlZCB3cml0ZXIpCi0gICBkZWZhdWx0cyB0byB0d2ljZSB0aGUgYnVmZmVyIHNpemUuCisgICA6ZGF0YTpgREVGQVVMVF9CVUZGRVJfU0laRWAuCiAKLSAgIDpjbGFzczpgQnVmZmVyZWRSV1BhaXJgIGltcGxlbWVudHMgYWxsIG9mIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgXCdzIG1ldGhvZHMuCisgICBBIGZvdXJ0aCBhcmd1bWVudCwgKm1heF9idWZmZXJfc2l6ZSosIGlzIHN1cHBvcnRlZCwgYnV0IHVudXNlZCBhbmQKKyAgIGRlcHJlY2F0ZWQuCisKKyAgIDpjbGFzczpgQnVmZmVyZWRSV1BhaXJgIGltcGxlbWVudHMgYWxsIG9mIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgXCdzIG1ldGhvZHMKKyAgIGV4Y2VwdCBmb3IgOm1ldGg6YH5CdWZmZXJlZElPQmFzZS5kZXRhY2hgLCB3aGljaCByYWlzZXMKKyAgIDpleGM6YFVuc3VwcG9ydGVkT3BlcmF0aW9uYC4KIAogCi0uLiBjbGFzczo6IEJ1ZmZlcmVkUmFuZG9tKHJhd1ssIGJ1ZmZlcl9zaXplWywgbWF4X2J1ZmZlcl9zaXplXV0pCisuLiBjbGFzczo6IEJ1ZmZlcmVkUmFuZG9tKHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSkKIAogICAgQSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2VzcyBzdHJlYW1zLiAgSXQgaW5oZXJpdHMKLSAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYC4KKyAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCwgYW5kIGZ1cnRoZXIgc3VwcG9ydHMKKyAgIDptZXRoOmBzZWVrYCBhbmQgOm1ldGg6YHRlbGxgIGZ1bmN0aW9uYWxpdHkuCiAKICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgcmVhZGVyIGFuZCB3cml0ZXIgZm9yIGEgc2Vla2FibGUgcmF3IHN0cmVhbSwgZ2l2ZW4KICAgIGluIHRoZSBmaXJzdCBhcmd1bWVudC4gIElmIHRoZSAqYnVmZmVyX3NpemUqIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8KLSAgIDpkYXRhOmBERUZBVUxUX0JVRkZFUl9TSVpFYC4gIFRoZSAqbWF4X2J1ZmZlcl9zaXplKiAoZm9yIHRoZSBidWZmZXJlZCB3cml0ZXIpCi0gICBkZWZhdWx0cyB0byB0d2ljZSB0aGUgYnVmZmVyIHNpemUuCisgICA6ZGF0YTpgREVGQVVMVF9CVUZGRVJfU0laRWAuCisKKyAgIEEgdGhpcmQgYXJndW1lbnQsICptYXhfYnVmZmVyX3NpemUqLCBpcyBzdXBwb3J0ZWQsIGJ1dCB1bnVzZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgIDpjbGFzczpgQnVmZmVyZWRSYW5kb21gIGlzIGNhcGFibGUgb2YgYW55dGhpbmcgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAgb3IKICAgIDpjbGFzczpgQnVmZmVyZWRXcml0ZXJgIGNhbiBkby4KQEAgLTU2NSwxMCArNjQ0LDEwIEBACiAKIC4uIGNsYXNzOjogVGV4dElPQmFzZQogCi0gICBCYXNlIGNsYXNzIGZvciB0ZXh0IHN0cmVhbXMuICBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkCi0gICBpbnRlcmZhY2UgdG8gc3RyZWFtIEkvTy4gIFRoZXJlIGlzIG5vIDptZXRoOmByZWFkaW50b2AgbWV0aG9kIGJlY2F1c2UKLSAgIFB5dGhvbidzIGNoYXJhY3RlciBzdHJpbmdzIGFyZSBpbW11dGFibGUuICBJdCBpbmhlcml0cyA6Y2xhc3M6YElPQmFzZWAuCi0gICBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCisgICBCYXNlIGNsYXNzIGZvciB0ZXh0IHN0cmVhbXMuICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIHVuaWNvZGUgY2hhcmFjdGVyCisgICBhbmQgbGluZSBiYXNlZCBpbnRlcmZhY2UgdG8gc3RyZWFtIEkvTy4gIFRoZXJlIGlzIG5vIDptZXRoOmByZWFkaW50b2AKKyAgIG1ldGhvZCBiZWNhdXNlIFB5dGhvbidzIDpjbGFzczpgdW5pY29kZWAgc3RyaW5ncyBhcmUgaW1tdXRhYmxlLgorICAgSXQgaW5oZXJpdHMgOmNsYXNzOmBJT0Jhc2VgLiAgVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgogCiAgICA6Y2xhc3M6YFRleHRJT0Jhc2VgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBkYXRhIGF0dHJpYnV0ZXMgYW5kCiAgICBtZXRob2RzIGluIGFkZGl0aW9uIHRvIHRob3NlIGZyb20gOmNsYXNzOmBJT0Jhc2VgOgpAQCAtNTc4LDMwICs2NTcsNTUgQEAKICAgICAgIFRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSB0aGUgc3RyZWFtJ3MgYnl0ZXMgaW50bwogICAgICAgc3RyaW5ncywgYW5kIHRvIGVuY29kZSBzdHJpbmdzIGludG8gYnl0ZXMuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGVycm9ycworCisgICAgICBUaGUgZXJyb3Igc2V0dGluZyBvZiB0aGUgZGVjb2RlciBvciBlbmNvZGVyLgorCiAgICAuLiBhdHRyaWJ1dGU6OiBuZXdsaW5lcwogCiAgICAgICBBIHN0cmluZywgYSB0dXBsZSBvZiBzdHJpbmdzLCBvciBgYE5vbmVgYCwgaW5kaWNhdGluZyB0aGUgbmV3bGluZXMKLSAgICAgIHRyYW5zbGF0ZWQgc28gZmFyLgorICAgICAgdHJhbnNsYXRlZCBzbyBmYXIuICBEZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgaW5pdGlhbAorICAgICAgY29uc3RydWN0b3IgZmxhZ3MsIHRoaXMgbWF5IG5vdCBiZSBhdmFpbGFibGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGJ1ZmZlcgorCisgICAgICBUaGUgdW5kZXJseWluZyBiaW5hcnkgYnVmZmVyIChhIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGluc3RhbmNlKSB0aGF0CisgICAgICA6Y2xhc3M6YFRleHRJT0Jhc2VgIGRlYWxzIHdpdGguICBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgOmNsYXNzOmBUZXh0SU9CYXNlYCBBUEkgYW5kIG1heSBub3QgZXhpc3Qgb24gc29tZSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgIC4uIG1ldGhvZDo6IGRldGFjaCgpCisKKyAgICAgIFNlcGFyYXRlIHRoZSB1bmRlcmx5aW5nIGJpbmFyeSBidWZmZXIgZnJvbSB0aGUgOmNsYXNzOmBUZXh0SU9CYXNlYCBhbmQKKyAgICAgIHJldHVybiBpdC4KKworICAgICAgQWZ0ZXIgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgOmNsYXNzOmBUZXh0SU9CYXNlYCBpcworICAgICAgaW4gYW4gdW51c2FibGUgc3RhdGUuCisKKyAgICAgIFNvbWUgOmNsYXNzOmBUZXh0SU9CYXNlYCBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgOmNsYXNzOmBTdHJpbmdJT2AsIG1heSBub3QKKyAgICAgIGhhdmUgdGhlIGNvbmNlcHQgb2YgYW4gdW5kZXJseWluZyBidWZmZXIgYW5kIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbAorICAgICAgcmFpc2UgOmV4YzpgVW5zdXBwb3J0ZWRPcGVyYXRpb25gLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogICAgLi4gbWV0aG9kOjogcmVhZChuKQogCiAgICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqbiogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKLSAgICAgIDpjbGFzczpgc3RyYC4gIElmICpuKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdG8gRU9GLgorICAgICAgOmNsYXNzOmB1bmljb2RlYC4gIElmICpuKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgogCiAgICAuLiBtZXRob2Q6OiByZWFkbGluZSgpCiAKLSAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHN0cmBgLiAgSWYgdGhlIHN0cmVhbSBpcwotICAgICAgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KKyAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHVuaWNvZGVgYC4gIElmIHRoZQorICAgICAgc3RyZWFtIGlzIGFscmVhZHkgYXQgRU9GLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRlKHMpCiAKLSAgICAgIFdyaXRlIHRoZSBzdHJpbmcgKnMqIHRvIHRoZSBzdHJlYW0gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKLSAgICAgIHdyaXR0ZW4uCisgICAgICBXcml0ZSB0aGUgOmNsYXNzOmB1bmljb2RlYCBzdHJpbmcgKnMqIHRvIHRoZSBzdHJlYW0gYW5kIHJldHVybiB0aGUKKyAgICAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCiAKIAotLi4gY2xhc3M6OiBUZXh0SU9XcmFwcGVyKGJ1ZmZlclssIGVuY29kaW5nWywgZXJyb3JzWywgbmV3bGluZVssIGxpbmVfYnVmZmVyaW5nXV1dXSkKKy4uIGNsYXNzOjogVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsIGxpbmVfYnVmZmVyaW5nPUZhbHNlKQogCi0gICBBIGJ1ZmZlcmVkIHRleHQgc3RyZWFtIG92ZXIgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCByYXcgc3RyZWFtLCAqYnVmZmVyKi4KKyAgIEEgYnVmZmVyZWQgdGV4dCBzdHJlYW0gb3ZlciBhIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGJpbmFyeSBzdHJlYW0uCiAgICBJdCBpbmhlcml0cyA6Y2xhc3M6YFRleHRJT0Jhc2VgLgogCiAgICAqZW5jb2RpbmcqIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0aGF0IHRoZSBzdHJlYW0gd2lsbCBiZSBkZWNvZGVkIG9yCkBAIC02MzAsMzIgKzczNCw0NyBAQAogICAgSWYgKmxpbmVfYnVmZmVyaW5nKiBpcyBgYFRydWVgYCwgOm1ldGg6YGZsdXNoYCBpcyBpbXBsaWVkIHdoZW4gYSBjYWxsIHRvCiAgICB3cml0ZSBjb250YWlucyBhIG5ld2xpbmUgY2hhcmFjdGVyLgogCi0gICA6Y2xhc3M6YFRleHRJT1dyYXBwZXJgIHByb3ZpZGVzIHRoZXNlIGRhdGEgYXR0cmlidXRlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZgorICAgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYCBwcm92aWRlcyBvbmUgYXR0cmlidXRlIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mCiAgICA6Y2xhc3M6YFRleHRJT0Jhc2VgIGFuZCBpdHMgcGFyZW50czoKIAotICAgLi4gYXR0cmlidXRlOjogZXJyb3JzCi0KLSAgICAgIFRoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZXJyb3Igc2V0dGluZy4KLQogICAgLi4gYXR0cmlidXRlOjogbGluZV9idWZmZXJpbmcKIAogICAgICAgV2hldGhlciBsaW5lIGJ1ZmZlcmluZyBpcyBlbmFibGVkLgogCiAKLS4uIGNsYXNzOjogU3RyaW5nSU8oW2luaXRpYWxfdmFsdWVbLCBlbmNvZGluZ1ssIGVycm9yc1ssIG5ld2xpbmVdXV1dKQorLi4gY2xhc3M6OiBTdHJpbmdJTyhpbml0aWFsX3ZhbHVlPXUnJywgbmV3bGluZT1Ob25lKQogCi0gICBBbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0LiAgSXQgaW5oZXJpdHMgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4KKyAgIEFuIGluLW1lbW9yeSBzdHJlYW0gZm9yIHVuaWNvZGUgdGV4dC4gIEl0IGluaGVyaXRzIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuCiAKLSAgIENyZWF0ZSBhIG5ldyBTdHJpbmdJTyBzdHJlYW0gd2l0aCBhbiBpbml0YWwgdmFsdWUsIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZywKLSAgIGFuZCBuZXdsaW5lIHNldHRpbmcuICBTZWUgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYFwncyBjb25zdHJ1Y3RvciBmb3IgbW9yZQotICAgaW5mb3JtYXRpb24uCisgICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYnVmZmVyIChhbiBlbXB0eSB1bmljb2RlIHN0cmluZyBieSBkZWZhdWx0KSBjYW4KKyAgIGJlIHNldCBieSBwcm92aWRpbmcgKmluaXRpYWxfdmFsdWUqLiAgVGhlICpuZXdsaW5lKiBhcmd1bWVudCB3b3JrcyBsaWtlCisgICB0aGF0IG9mIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuICBUaGUgZGVmYXVsdCBpcyB0byBkbyBubyBuZXdsaW5lCisgICB0cmFuc2xhdGlvbi4KIAogICAgOmNsYXNzOmBTdHJpbmdJT2AgcHJvdmlkZXMgdGhpcyBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2UgZnJvbQogICAgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYCBhbmQgaXRzIHBhcmVudHM6CiAKICAgIC4uIG1ldGhvZDo6IGdldHZhbHVlKCkKIAotICAgICAgUmV0dXJuIGEgYGBzdHJgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KKyAgICAgIFJldHVybiBhIGBgdW5pY29kZWBgIGNvbnRhaW5pbmcgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGF0IGFueQorICAgICAgdGltZSBiZWZvcmUgdGhlIDpjbGFzczpgU3RyaW5nSU9gIG9iamVjdCdzIDptZXRoOmBjbG9zZWAgbWV0aG9kIGlzCisgICAgICBjYWxsZWQuCisKKyAgIEV4YW1wbGUgdXNhZ2U6OgorCisgICAgICBpbXBvcnQgaW8KKworICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgb3V0cHV0LndyaXRlKHUnRmlyc3QgbGluZS5cbicpCisgICAgICBvdXRwdXQud3JpdGUodSdTZWNvbmQgbGluZS5cbicpCisKKyAgICAgICMgUmV0cmlldmUgZmlsZSBjb250ZW50cyAtLSB0aGlzIHdpbGwgYmUKKyAgICAgICMgdSdGaXJzdCBsaW5lLlxuU2Vjb25kIGxpbmUuXG4nCisgICAgICBjb250ZW50cyA9IG91dHB1dC5nZXR2YWx1ZSgpCisKKyAgICAgICMgQ2xvc2Ugb2JqZWN0IGFuZCBkaXNjYXJkIG1lbW9yeSBidWZmZXIgLS0KKyAgICAgICMgLmdldHZhbHVlKCkgd2lsbCBub3cgcmFpc2UgYW4gZXhjZXB0aW9uLgorICAgICAgb3V0cHV0LmNsb3NlKCkKIAogCiAuLiBjbGFzczo6IEluY3JlbWVudGFsTmV3bGluZURlY29kZXIKQEAgLTY2MywzICs3ODIsNjggQEAKICAgIEEgaGVscGVyIGNvZGVjIHRoYXQgZGVjb2RlcyBuZXdsaW5lcyBmb3IgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuICBJdAogICAgaW5oZXJpdHMgOmNsYXNzOmBjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyYC4KIAorCitBZHZhbmNlZCB0b3BpY3MKKy0tLS0tLS0tLS0tLS0tLQorCitIZXJlIHdlIHdpbGwgZGlzY3VzcyBzZXZlcmFsIGFkdmFuY2VkIHRvcGljcyBwZXJ0YWluaW5nIHRvIHRoZSBjb25jcmV0ZQorSS9PIGltcGxlbWVudGF0aW9ucyBkZXNjcmliZWQgYWJvdmUuCisKK1BlcmZvcm1hbmNlCiteXl5eXl5eXl5eXgorCitCaW5hcnkgSS9PCisiIiIiIiIiIiIiCisKK0J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgb25seSBsYXJnZSBjaHVua3Mgb2YgZGF0YSBldmVuIHdoZW4gdGhlIHVzZXIgYXNrcworZm9yIGEgc2luZ2xlIGJ5dGUsIGJ1ZmZlcmVkIEkvTyBpcyBkZXNpZ25lZCB0byBoaWRlIGFueSBpbmVmZmljaWVuY3kgaW4KK2NhbGxpbmcgYW5kIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHVuYnVmZmVyZWQgSS9PIHJvdXRpbmVzLiAgVGhlCitnYWluIHdpbGwgdmFyeSB2ZXJ5IG11Y2ggZGVwZW5kaW5nIG9uIHRoZSBPUyBhbmQgdGhlIGtpbmQgb2YgSS9PIHdoaWNoIGlzCitwZXJmb3JtZWQgKGZvciBleGFtcGxlLCBvbiBzb21lIGNvbnRlbXBvcmFyeSBPU2VzIHN1Y2ggYXMgTGludXgsIHVuYnVmZmVyZWQKK2Rpc2sgSS9PIGNhbiBiZSBhcyBmYXN0IGFzIGJ1ZmZlcmVkIEkvTykuICBUaGUgYm90dG9tIGxpbmUsIGhvd2V2ZXIsIGlzCit0aGF0IGJ1ZmZlcmVkIEkvTyB3aWxsIG9mZmVyIHlvdSBwcmVkaWN0YWJsZSBwZXJmb3JtYW5jZSByZWdhcmRsZXNzIG9mIHRoZQorcGxhdGZvcm0gYW5kIHRoZSBiYWNraW5nIGRldmljZS4gIFRoZXJlZm9yZSwgaXQgaXMgbW9zdCBhbHdheXMgcHJlZmVyYWJsZSB0bwordXNlIGJ1ZmZlcmVkIEkvTyByYXRoZXIgdGhhbiB1bmJ1ZmZlcmVkIEkvTy4KKworVGV4dCBJL08KKyIiIiIiIiIiCisKK1RleHQgSS9PIG92ZXIgYSBiaW5hcnkgc3RvcmFnZSAoc3VjaCBhcyBhIGZpbGUpIGlzIHNpZ25pZmljYW50bHkgc2xvd2VyIHRoYW4KK2JpbmFyeSBJL08gb3ZlciB0aGUgc2FtZSBzdG9yYWdlLCBiZWNhdXNlIGl0IGltcGxpZXMgY29udmVyc2lvbnMgZnJvbQordW5pY29kZSB0byBiaW5hcnkgZGF0YSB1c2luZyBhIGNoYXJhY3RlciBjb2RlYy4gIFRoaXMgY2FuIGJlY29tZSBub3RpY2VhYmxlCitpZiB5b3UgaGFuZGxlIGh1Z2UgYW1vdW50cyBvZiB0ZXh0IGRhdGEgKGZvciBleGFtcGxlIHZlcnkgbGFyZ2UgbG9nIGZpbGVzKS4KK0Fsc28sIDptZXRoOmBUZXh0SU9XcmFwcGVyLnRlbGxgIGFuZCA6bWV0aDpgVGV4dElPV3JhcHBlci5zZWVrYCBhcmUgYm90aAorcXVpdGUgc2xvdyBkdWUgdG8gdGhlIHJlY29uc3RydWN0aW9uIGFsZ29yaXRobSB1c2VkLgorCis6Y2xhc3M6YFN0cmluZ0lPYCwgaG93ZXZlciwgaXMgYSBuYXRpdmUgaW4tbWVtb3J5IHVuaWNvZGUgY29udGFpbmVyIGFuZCB3aWxsCitleGhpYml0IHNpbWlsYXIgc3BlZWQgdG8gOmNsYXNzOmBCeXRlc0lPYC4KKworTXVsdGktdGhyZWFkaW5nCiteXl5eXl5eXl5eXl5eXl4KKworOmNsYXNzOmBGaWxlSU9gIG9iamVjdHMgYXJlIHRocmVhZC1zYWZlIHRvIHRoZSBleHRlbnQgdGhhdCB0aGUgb3BlcmF0aW5nCitzeXN0ZW0gY2FsbHMgKHN1Y2ggYXMgYGByZWFkKDIpYGAgdW5kZXIgVW5peCkgdGhleSBhcmUgd3JhcHBpbmcgYXJlIHRocmVhZC1zYWZlCit0b28uCisKK0JpbmFyeSBidWZmZXJlZCBvYmplY3RzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmBCdWZmZXJlZFJlYWRlcmAsCis6Y2xhc3M6YEJ1ZmZlcmVkV3JpdGVyYCwgOmNsYXNzOmBCdWZmZXJlZFJhbmRvbWAgYW5kIDpjbGFzczpgQnVmZmVyZWRSV1BhaXJgKQorcHJvdGVjdCB0aGVpciBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHVzaW5nIGEgbG9jazsgaXQgaXMgdGhlcmVmb3JlIHNhZmUgdG8gY2FsbAordGhlbSBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQgb25jZS4KKworOmNsYXNzOmBUZXh0SU9XcmFwcGVyYCBvYmplY3RzIGFyZSBub3QgdGhyZWFkLXNhZmUuCisKK1JlZW50cmFuY3kKK15eXl5eXl5eXl4KKworQmluYXJ5IGJ1ZmZlcmVkIG9iamVjdHMgKGluc3RhbmNlcyBvZiA6Y2xhc3M6YEJ1ZmZlcmVkUmVhZGVyYCwKKzpjbGFzczpgQnVmZmVyZWRXcml0ZXJgLCA6Y2xhc3M6YEJ1ZmZlcmVkUmFuZG9tYCBhbmQgOmNsYXNzOmBCdWZmZXJlZFJXUGFpcmApCithcmUgbm90IHJlZW50cmFudC4gIFdoaWxlIHJlZW50cmFudCBjYWxscyB3aWxsIG5vdCBoYXBwZW4gaW4gbm9ybWFsIHNpdHVhdGlvbnMsCit0aGV5IGNhbiBhcmlzZSBpZiB5b3UgYXJlIGRvaW5nIEkvTyBpbiBhIDptb2Q6YHNpZ25hbGAgaGFuZGxlci4gIElmIGl0IGlzCithdHRlbXB0ZWQgdG8gZW50ZXIgYSBidWZmZXJlZCBvYmplY3QgYWdhaW4gd2hpbGUgYWxyZWFkeSBiZWluZyBhY2Nlc3NlZAorKmZyb20gdGhlIHNhbWUgdGhyZWFkKiwgdGhlbiBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCitUaGUgYWJvdmUgaW1wbGljaXRseSBleHRlbmRzIHRvIHRleHQgZmlsZXMsIHNpbmNlIHRoZSA6ZnVuYzpgb3BlbigpYAorZnVuY3Rpb24gd2lsbCB3cmFwIGEgYnVmZmVyZWQgb2JqZWN0IGluc2lkZSBhIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuICBUaGlzCitpbmNsdWRlcyBzdGFuZGFyZCBzdHJlYW1zIGFuZCB0aGVyZWZvcmUgYWZmZWN0cyB0aGUgYnVpbHQtaW4gZnVuY3Rpb24KKzpmdW5jOmBwcmludCgpYCBhcyB3ZWxsLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAppbmRleCAzMzYzMGE1Li5iN2Y0MDdkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKQEAgLTM4LDcgKzM4LDcgQEAKID09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBJdGVyYXRvciAgICAgICAgICAgIEFyZ3VtZW50cyAgICAgICAgICAgICAgIFJlc3VsdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCiA9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotOmZ1bmM6YGNvdW50YCAgICAgICBzdGFydCAgICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQrMSwgc3RhcnQrMiwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBjb3VudCgxMCkgLS0+IDEwIDExIDEyIDEzIDE0IC4uLmBgCis6ZnVuYzpgY291bnRgICAgICAgIHN0YXJ0LCBbc3RlcF0gICAgICAgICAgIHN0YXJ0LCBzdGFydCtzdGVwLCBzdGFydCsyKnN0ZXAsIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGNvdW50KDEwKSAtLT4gMTAgMTEgMTIgMTMgMTQgLi4uYGAKIDpmdW5jOmBjeWNsZWAgICAgICAgcCAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCAuLi4gcGxhc3QsIHAwLCBwMSwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgY3ljbGUoJ0FCQ0QnKSAtLT4gQSBCIEMgRCBBIEIgQyBEIC4uLmBgCiA6ZnVuYzpgcmVwZWF0YCAgICAgIGVsZW0gWyxuXSAgICAgICAgICAgICAgIGVsZW0sIGVsZW0sIGVsZW0sIC4uLiBlbmRsZXNzbHkgb3IgdXAgdG8gbiB0aW1lcyAgICAgICAgICAgICAgICBgYHJlcGVhdCgxMCwgMykgLS0+IDEwIDEwIDEwYGAKID09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC00OSw2ICs0OSw3IEBACiBJdGVyYXRvciAgICAgICAgICAgICAgICBBcmd1bWVudHMgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCiA9PT09PT09PT09PT09PT09PT09PSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA6ZnVuYzpgY2hhaW5gICAgICAgICAgICBwLCBxLCAuLi4gICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgLi4uIHBsYXN0LCBxMCwgcTEsIC4uLiAgICAgICAgICAgICAgICAgICAgICBgYGNoYWluKCdBQkMnLCAnREVGJykgLS0+IEEgQiBDIEQgRSBGYGAKKzpmdW5jOmBjb21wcmVzc2AgICAgICAgIGRhdGEsIHNlbGVjdG9ycyAgICAgICAgICAgICAgICAgKGRbMF0gaWYgc1swXSksIChkWzFdIGlmIHNbMV0pLCAuLi4gICAgICAgICAgICAgICAgIGBgY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pIC0tPiBBIEMgRSBGYGAKIDpmdW5jOmBkcm9wd2hpbGVgICAgICAgIHByZWQsIHNlcSAgICAgICAgICAgICAgICAgICAgICAgc2VxW25dLCBzZXFbbisxXSwgc3RhcnRpbmcgd2hlbiBwcmVkIGZhaWxzICAgICAgICAgIGBgZHJvcHdoaWxlKGxhbWJkYSB4OiB4PDUsIFsxLDQsNiw0LDFdKSAtLT4gNiA0IDFgYAogOmZ1bmM6YGdyb3VwYnlgICAgICAgICAgaXRlcmFibGVbLCBrZXlmdW5jXSAgICAgICAgICAgICBzdWItaXRlcmF0b3JzIGdyb3VwZWQgYnkgdmFsdWUgb2Yga2V5ZnVuYyh2KQogOmZ1bmM6YGlmaWx0ZXJgICAgICAgICAgcHJlZCwgc2VxICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBvZiBzZXEgd2hlcmUgcHJlZChlbGVtKSBpcyBUcnVlICAgICAgICAgICAgYGBpZmlsdGVyKGxhbWJkYSB4OiB4JTIsIHJhbmdlKDEwKSkgLS0+IDEgMyA1IDcgOWBgCkBAIC03MCwxMCArNzEsMTEgQEAKIDpmdW5jOmBwcm9kdWN0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBxLCAuLi4gW3JlcGVhdD0xXSAgICAgICBjYXJ0ZXNpYW4gcHJvZHVjdCwgZXF1aXZhbGVudCB0byBhIG5lc3RlZCBmb3ItbG9vcAogOmZ1bmM6YHBlcm11dGF0aW9uc2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbLCByXSAgICAgICAgICAgICAgICAgICAgIHItbGVuZ3RoIHR1cGxlcywgYWxsIHBvc3NpYmxlIG9yZGVyaW5ncywgbm8gcmVwZWF0ZWQgZWxlbWVudHMKIDpmdW5jOmBjb21iaW5hdGlvbnNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCByICAgICAgICAgICAgICAgICAgICAgICByLWxlbmd0aCB0dXBsZXMsIGluIHNvcnRlZCBvcmRlciwgbm8gcmVwZWF0ZWQgZWxlbWVudHMKLXwKKzpmdW5jOmBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudGAgICAgICAgICAgICBwLCByICAgICAgICAgICAgICAgICAgICAgICByLWxlbmd0aCB0dXBsZXMsIGluIHNvcnRlZCBvcmRlciwgd2l0aCByZXBlYXRlZCBlbGVtZW50cwogYGBwcm9kdWN0KCdBQkNEJywgcmVwZWF0PTIpYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgQUEgQUIgQUMgQUQgQkEgQkIgQkMgQkQgQ0EgQ0IgQ0MgQ0QgREEgREIgREMgRERgYAogYGBwZXJtdXRhdGlvbnMoJ0FCQ0QnLCAyKWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgQUIgQUMgQUQgQkEgQkMgQkQgQ0EgQ0IgQ0QgREEgREIgRENgYAogYGBjb21iaW5hdGlvbnMoJ0FCQ0QnLCAyKWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgQUIgQUMgQUQgQkMgQkQgQ0RgYAorYGBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDRCcsIDIpYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgQUEgQUIgQUMgQUQgQkIgQkMgQkQgQ0MgQ0QgRERgYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCkBAIC0xNjYsMTkgKzE2OCw4NyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAotLi4gZnVuY3Rpb246OiBjb3VudChbbl0pCisuLiBmdW5jdGlvbjo6IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KGl0ZXJhYmxlLCByKQogCi0gICBNYWtlIGFuIGl0ZXJhdG9yIHRoYXQgcmV0dXJucyBjb25zZWN1dGl2ZSBpbnRlZ2VycyBzdGFydGluZyB3aXRoICpuKi4gSWYgbm90Ci0gICBzcGVjaWZpZWQgKm4qIGRlZmF1bHRzIHRvIHplcm8uICAgT2Z0ZW4gdXNlZCBhcyBhbiBhcmd1bWVudCB0byA6ZnVuYzpgaW1hcGAgdG8KLSAgIGdlbmVyYXRlIGNvbnNlY3V0aXZlIGRhdGEgcG9pbnRzLiBBbHNvLCB1c2VkIHdpdGggOmZ1bmM6YGl6aXBgIHRvIGFkZCBzZXF1ZW5jZQotICAgbnVtYmVycy4gIEVxdWl2YWxlbnQgdG86OgorICAgUmV0dXJuICpyKiBsZW5ndGggc3Vic2VxdWVuY2VzIG9mIGVsZW1lbnRzIGZyb20gdGhlIGlucHV0ICppdGVyYWJsZSoKKyAgIGFsbG93aW5nIGluZGl2aWR1YWwgZWxlbWVudHMgdG8gYmUgcmVwZWF0ZWQgbW9yZSB0aGFuIG9uY2UuCiAKLSAgICAgIGRlZiBjb3VudChuPTApOgorICAgQ29tYmluYXRpb25zIGFyZSBlbWl0dGVkIGluIGxleGljb2dyYXBoaWMgc29ydCBvcmRlci4gIFNvLCBpZiB0aGUKKyAgIGlucHV0ICppdGVyYWJsZSogaXMgc29ydGVkLCB0aGUgY29tYmluYXRpb24gdHVwbGVzIHdpbGwgYmUgcHJvZHVjZWQKKyAgIGluIHNvcnRlZCBvcmRlci4KKworICAgRWxlbWVudHMgYXJlIHRyZWF0ZWQgYXMgdW5pcXVlIGJhc2VkIG9uIHRoZWlyIHBvc2l0aW9uLCBub3Qgb24gdGhlaXIKKyAgIHZhbHVlLiAgU28gaWYgdGhlIGlucHV0IGVsZW1lbnRzIGFyZSB1bmlxdWUsIHRoZSBnZW5lcmF0ZWQgY29tYmluYXRpb25zCisgICB3aWxsIGFsc28gYmUgdW5pcXVlLgorCisgICBFcXVpdmFsZW50IHRvOjoKKworICAgICAgICBkZWYgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgIyBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikgLS0+IEFBIEFCIEFDIEJCIEJDIENDCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBpZiBub3QgbiBhbmQgcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGluZGljZXMgPSBbMF0gKiByCisgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kaWNlc1tpXSAhPSBuIC0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgaW5kaWNlc1tpOl0gPSBbaW5kaWNlc1tpXSArIDFdICogKHIgLSBpKQorICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgVGhlIGNvZGUgZm9yIDpmdW5jOmBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudGAgY2FuIGJlIGFsc28gZXhwcmVzc2VkIGFzCisgICBhIHN1YnNlcXVlbmNlIG9mIDpmdW5jOmBwcm9kdWN0YCBhZnRlciBmaWx0ZXJpbmcgZW50cmllcyB3aGVyZSB0aGUgZWxlbWVudHMKKyAgIGFyZSBub3QgaW4gc29ydGVkIG9yZGVyIChhY2NvcmRpbmcgdG8gdGhlaXIgcG9zaXRpb24gaW4gdGhlIGlucHV0IHBvb2wpOjoKKworICAgICAgICBkZWYgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcHJvZHVjdChyYW5nZShuKSwgcmVwZWF0PXIpOgorICAgICAgICAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKKyAgIFRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgaXMgYGAobityLTEpISAvIHIhIC8gKG4tMSkhYGAgd2hlbiBgYG4gPiAwYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycykKKworICAgTWFrZSBhbiBpdGVyYXRvciB0aGF0IGZpbHRlcnMgZWxlbWVudHMgZnJvbSAqZGF0YSogcmV0dXJuaW5nIG9ubHkgdGhvc2UgdGhhdAorICAgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiAqc2VsZWN0b3JzKiB0aGF0IGV2YWx1YXRlcyB0byBgYFRydWVgYC4KKyAgIFN0b3BzIHdoZW4gZWl0aGVyIHRoZSAqZGF0YSogb3IgKnNlbGVjdG9ycyogaXRlcmFibGVzIGhhcyBiZWVuIGV4aGF1c3RlZC4KKyAgIEVxdWl2YWxlbnQgdG86OgorCisgICAgICAgZGVmIGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycyk6CisgICAgICAgICAgICMgY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pIC0tPiBBIEMgRSBGCisgICAgICAgICAgIHJldHVybiAoZCBmb3IgZCwgcyBpbiBpemlwKGRhdGEsIHNlbGVjdG9ycykgaWYgcykKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBjb3VudChzdGFydD0wLCBzdGVwPTEpCisKKyAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGV2ZW5seSBzcGFjZWQgdmFsdWVzIHN0YXJ0aW5nIHdpdGggKm4qLiBPZnRlbgorICAgdXNlZCBhcyBhbiBhcmd1bWVudCB0byA6ZnVuYzpgaW1hcGAgdG8gZ2VuZXJhdGUgY29uc2VjdXRpdmUgZGF0YSBwb2ludHMuCisgICBBbHNvLCB1c2VkIHdpdGggOmZ1bmM6YGl6aXBgIHRvIGFkZCBzZXF1ZW5jZSBudW1iZXJzLiAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgIGRlZiBjb3VudChzdGFydD0wLCBzdGVwPTEpOgogICAgICAgICAgICMgY291bnQoMTApIC0tPiAxMCAxMSAxMiAxMyAxNCAuLi4KKyAgICAgICAgICAjIGNvdW50KDIuNSwgMC41KSAtPiAyLjUgMy4wIDMuNSAuLi4KKyAgICAgICAgICBuID0gc3RhcnQKICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICB5aWVsZCBuCi0gICAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgICBuICs9IHN0ZXAKIAorICAgV2hlbiBjb3VudGluZyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGJldHRlciBhY2N1cmFjeSBjYW4gc29tZXRpbWVzIGJlCisgICBhY2hpZXZlZCBieSBzdWJzdGl0dXRpbmcgbXVsdGlwbGljYXRpdmUgY29kZSBzdWNoIGFzOiBgYChzdGFydCArIHN0ZXAgKiBpCisgICBmb3IgaSBpbiBjb3VudCgpKWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgYWRkZWQgKnN0ZXAqIGFyZ3VtZW50IGFuZCBhbGxvd2VkIG5vbi1pbnRlZ2VyIGFyZ3VtZW50cy4KIAogLi4gZnVuY3Rpb246OiBjeWNsZShpdGVyYWJsZSkKIApAQCAtNTczLDQzICs2NDMsNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi40CiAKIAotLi4gX2l0ZXJ0b29scy1leGFtcGxlOgotCi1FeGFtcGxlcwotLS0tLS0tLS0KLQotVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGNvbW1vbiB1c2VzIGZvciBlYWNoIHRvb2wgYW5kIGRlbW9uc3RyYXRlIHdheXMgdGhleQotY2FuIGJlIGNvbWJpbmVkLgotCi0uLiBkb2N0ZXN0OjoKLQotICAgPj4+ICMgU2hvdyBhIGRpY3Rpb25hcnkgc29ydGVkIGFuZCBncm91cGVkIGJ5IHZhbHVlCi0gICA+Pj4gZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgotICAgPj4+IGQgPSBkaWN0KGE9MSwgYj0yLCBjPTEsIGQ9MiwgZT0xLCBmPTIsIGc9MykKLSAgID4+PiBkaSA9IHNvcnRlZChkLml0ZXJpdGVtcygpLCBrZXk9aXRlbWdldHRlcigxKSkKLSAgID4+PiBmb3IgaywgZyBpbiBncm91cGJ5KGRpLCBrZXk9aXRlbWdldHRlcigxKSk6Ci0gICAuLi4gICAgIHByaW50IGssIG1hcChpdGVtZ2V0dGVyKDApLCBnKQotICAgLi4uCi0gICAxIFsnYScsICdjJywgJ2UnXQotICAgMiBbJ2InLCAnZCcsICdmJ10KLSAgIDMgWydnJ10KLQotICAgPj4+ICMgRmluZCBydW5zIG9mIGNvbnNlY3V0aXZlIG51bWJlcnMgdXNpbmcgZ3JvdXBieS4gIFRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uCi0gICA+Pj4gIyBpcyBkaWZmZXJlbmNpbmcgd2l0aCBhIHJhbmdlIHNvIHRoYXQgY29uc2VjdXRpdmUgbnVtYmVycyBhbGwgYXBwZWFyIGluCi0gICA+Pj4gIyBzYW1lIGdyb3VwLgotICAgPj4+IGRhdGEgPSBbIDEsICA0LDUsNiwgMTAsIDE1LDE2LDE3LDE4LCAyMiwgMjUsMjYsMjcsMjhdCi0gICA+Pj4gZm9yIGssIGcgaW4gZ3JvdXBieShlbnVtZXJhdGUoZGF0YSksIGxhbWJkYSAoaSx4KTppLXgpOgotICAgLi4uICAgICBwcmludCBtYXAoaXRlbWdldHRlcigxKSwgZykKLSAgIC4uLgotICAgWzFdCi0gICBbNCwgNSwgNl0KLSAgIFsxMF0KLSAgIFsxNSwgMTYsIDE3LCAxOF0KLSAgIFsyMl0KLSAgIFsyNSwgMjYsIDI3LCAyOF0KLQotCi0KIC4uIF9pdGVydG9vbHMtcmVjaXBlczoKIAogUmVjaXBlcwpAQCAtNjM4LDEyICs2NzEsMTIgQEAKIAogICAgZGVmIGNvbnN1bWUoaXRlcmF0b3IsIG4pOgogICAgICAgICJBZHZhbmNlIHRoZSBpdGVyYXRvciBuLXN0ZXBzIGFoZWFkLiBJZiBuIGlzIG5vbmUsIGNvbnN1bWUgZW50aXJlbHkuIgotICAgICAgICMgVGhlIHRlY2huaXF1ZSB1c2VzIG9iamVjdHMgdGhhdCBjb25zdW1lIGl0ZXJhdG9ycyBhdCBDIHNwZWVkLgorICAgICAgICMgVXNlIGZ1bmN0aW9ucyB0aGF0IGNvbnN1bWUgaXRlcmF0b3JzIGF0IEMgc3BlZWQuCiAgICAgICAgaWYgbiBpcyBOb25lOgogICAgICAgICAgICAjIGZlZWQgdGhlIGVudGlyZSBpdGVyYXRvciBpbnRvIGEgemVyby1sZW5ndGggZGVxdWUKICAgICAgICAgICAgY29sbGVjdGlvbnMuZGVxdWUoaXRlcmF0b3IsIG1heGxlbj0wKQogICAgICAgIGVsc2U6Ci0gICAgICAgICAgICMgYWR2YW5jZSB0byB0aGUgZW10cHkgc2xpY2Ugc3RhcnRpbmcgYXQgcG9zaXRpb24gbgorICAgICAgICAgICAjIGFkdmFuY2UgdG8gdGhlIGVtcHR5IHNsaWNlIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIG4KICAgICAgICAgICAgbmV4dChpc2xpY2UoaXRlcmF0b3IsIG4sIG4pLCBOb25lKQogCiAgICBkZWYgbnRoKGl0ZXJhYmxlLCBuLCBkZWZhdWx0PU5vbmUpOgpAQCAtNzA1LDI4ICs3MzgsNiBAQAogICAgICAgICAgICAgICAgcGVuZGluZyAtPSAxCiAgICAgICAgICAgICAgICBuZXh0cyA9IGN5Y2xlKGlzbGljZShuZXh0cywgcGVuZGluZykpCiAKLSAgIGRlZiBjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpOgotICAgICAgICJjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEYiCi0gICAgICAgcmV0dXJuIChkIGZvciBkLCBzIGluIGl6aXAoZGF0YSwgc2VsZWN0b3JzKSBpZiBzKQotCi0gICBkZWYgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpOgotICAgICAgICJjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikgLS0+IEFBIEFCIEFDIEJCIEJDIENDIgotICAgICAgICMgbnVtYmVyIGl0ZW1zIHJldHVybmVkOiAgKG4rci0xKSEgLyByISAvIChuLTEpIQotICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKLSAgICAgICBuID0gbGVuKHBvb2wpCi0gICAgICAgaWYgbm90IG4gYW5kIHI6Ci0gICAgICAgICAgIHJldHVybgotICAgICAgIGluZGljZXMgPSBbMF0gKiByCi0gICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQotICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKLSAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0gbiAtIDE6Ci0gICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICBpbmRpY2VzW2k6XSA9IFtpbmRpY2VzW2ldICsgMV0gKiAociAtIGkpCi0gICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKLQogICAgZGVmIHBvd2Vyc2V0KGl0ZXJhYmxlKToKICAgICAgICAicG93ZXJzZXQoWzEsMiwzXSkgLS0+ICgpICgxLCkgKDIsKSAoMywpICgxLDIpICgxLDMpICgyLDMpICgxLDIsMykiCiAgICAgICAgcyA9IGxpc3QoaXRlcmFibGUpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9qc29uLnJzdCBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CmluZGV4IDhmYTc5MGUuLmJlNTRlZWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2pzb24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CkBAIC03LDcgKzcsNyBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEJvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+CiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAotSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mIEphdmFTY3JpcHQKK2BKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz5gXyBpcyBhIHN1YnNldCBvZiBKYXZhU2NyaXB0CiBzeW50YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQuCiAKIDptb2Q6YGpzb25gIGV4cG9zZXMgYW4gQVBJIGZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CkBAIC0xNTQsNyArMTU0LDcgQEAKIAogICAgVG8gdXNlIGEgY3VzdG9tIDpjbGFzczpgSlNPTkVuY29kZXJgIHN1YmNsYXNzIChlLmcuIG9uZSB0aGF0IG92ZXJyaWRlcyB0aGUKICAgIDptZXRoOmBkZWZhdWx0YCBtZXRob2QgdG8gc2VyaWFsaXplIGFkZGl0aW9uYWwgdHlwZXMpLCBzcGVjaWZ5IGl0IHdpdGggdGhlCi0gICAqY2xzKiBrd2FyZy4KKyAgICpjbHMqIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORW5jb2RlcmAgaXMgdXNlZC4KIAogCiAuLiBmdW5jdGlvbjo6IGR1bXBzKG9ialssIHNraXBrZXlzWywgZW5zdXJlX2FzY2lpWywgY2hlY2tfY2lyY3VsYXJbLCBhbGxvd19uYW5bLCBjbHNbLCBpbmRlbnRbLCBzZXBhcmF0b3JzWywgZW5jb2RpbmdbLCBkZWZhdWx0WywgKiprd11dXV1dXV1dXV0pCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgIDpmdW5jOmBkdW1wYC4KIAogCi0uLiBmdW5jdGlvbjo6IGxvYWQoZnBbLCBlbmNvZGluZ1ssIGNsc1ssIG9iamVjdF9ob29rWywgcGFyc2VfZmxvYXRbLCBwYXJzZV9pbnRbLCBwYXJzZV9jb25zdGFudFssICoqa3ddXV1dXV1dKQorLi4gZnVuY3Rpb246OiBsb2FkKGZwWywgZW5jb2RpbmdbLCBjbHNbLCBvYmplY3RfaG9va1ssIHBhcnNlX2Zsb2F0WywgcGFyc2VfaW50WywgcGFyc2VfY29uc3RhbnRbLCBvYmplY3RfcGFpcnNfaG9va1ssICoqa3ddXV1dXV1dXSkKIAogICAgRGVzZXJpYWxpemUgKmZwKiAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3QgY29udGFpbmluZyBhIEpTT04KICAgIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCkBAIC0xODIsNiArMTgyLDE3IEBACiAgICAqb2JqZWN0X2hvb2sqIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkCiAgICB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgogCisgICAqb2JqZWN0X3BhaXJzX2hvb2sqIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgIHJlc3VsdCBvZiBhbnkgb2JqZWN0IGxpdGVyYWwgZGVjb2RlZCB3aXRoIGFuIG9yZGVyZWQgbGlzdCBvZiBwYWlycy4gIFRoZQorICAgcmV0dXJuIHZhbHVlIG9mICpvYmplY3RfcGFpcnNfaG9vayogd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlCisgICA6Y2xhc3M6YGRpY3RgLiAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgdGhhdAorICAgcmVseSBvbiB0aGUgb3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIHdpbGwgcmVtZW1iZXIgdGhlIG9yZGVyIG9mIGluc2VydGlvbikuIElmCisgICAqb2JqZWN0X2hvb2sqIGlzIGFsc28gZGVmaW5lZCwgdGhlICpvYmplY3RfcGFpcnNfaG9vayogdGFrZXMgcHJpb3JpdHkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciAqb2JqZWN0X3BhaXJzX2hvb2sqLgorCiAgICAqcGFyc2VfZmxvYXQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHN0cmluZyBvZiBldmVyeSBKU09OCiAgICBmbG9hdCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgZmxvYXQobnVtX3N0cilgYC4KICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyIGZvciBKU09OIGZsb2F0cwpAQCAtMTk4LDExICsyMDksMTEgQEAKICAgIGFyZSBlbmNvdW50ZXJlZC4KIAogICAgVG8gdXNlIGEgY3VzdG9tIDpjbGFzczpgSlNPTkRlY29kZXJgIHN1YmNsYXNzLCBzcGVjaWZ5IGl0IHdpdGggdGhlIGBgY2xzYGAKLSAgIGt3YXJnLiAgQWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlCi0gICBjbGFzcy4KKyAgIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORGVjb2RlcmAgaXMgdXNlZC4gIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKIAotLi4gZnVuY3Rpb246OiBsb2FkcyhzWywgZW5jb2RpbmdbLCBjbHNbLCBvYmplY3RfaG9va1ssIHBhcnNlX2Zsb2F0WywgcGFyc2VfaW50WywgcGFyc2VfY29uc3RhbnRbLCAqKmt3XV1dXV1dXSkKKy4uIGZ1bmN0aW9uOjogbG9hZHMoc1ssIGVuY29kaW5nWywgY2xzWywgb2JqZWN0X2hvb2tbLCBwYXJzZV9mbG9hdFssIHBhcnNlX2ludFssIHBhcnNlX2NvbnN0YW50Wywgb2JqZWN0X3BhaXJzX2hvb2tbLCAqKmt3XV1dXV1dXV0pCiAKICAgIERlc2VyaWFsaXplICpzKiAoYSA6Y2xhc3M6YHN0cmAgb3IgOmNsYXNzOmB1bmljb2RlYCBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTgogICAgZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KQEAgLTIxMiwxMyArMjIzLDEzIEBACiAgICBzcGVjaWZpZWQuICBFbmNvZGluZ3MgdGhhdCBhcmUgbm90IEFTQ0lJIGJhc2VkIChzdWNoIGFzIFVDUy0yKSBhcmUgbm90CiAgICBhbGxvd2VkIGFuZCBzaG91bGQgYmUgZGVjb2RlZCB0byA6Y2xhc3M6YHVuaWNvZGVgIGZpcnN0LgogCi0gICBUaGUgb3RoZXIgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgZHVtcGAuCisgICBUaGUgb3RoZXIgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgbG9hZGAuCiAKIAogRW5jb2RlcnMgYW5kIGRlY29kZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gY2xhc3M6OiBKU09ORGVjb2RlcihbZW5jb2RpbmdbLCBvYmplY3RfaG9va1ssIHBhcnNlX2Zsb2F0WywgcGFyc2VfaW50WywgcGFyc2VfY29uc3RhbnRbLCBzdHJpY3RdXV1dXV0pCisuLiBjbGFzczo6IEpTT05EZWNvZGVyKFtlbmNvZGluZ1ssIG9iamVjdF9ob29rWywgcGFyc2VfZmxvYXRbLCBwYXJzZV9pbnRbLCBwYXJzZV9jb25zdGFudFssIHN0cmljdFssIG9iamVjdF9wYWlyc19ob29rXV1dXV1dXSkKIAogICAgU2ltcGxlIEpTT04gZGVjb2Rlci4KIApAQCAtMjU5LDYgKzI3MCwxNyBAQAogICAgOmNsYXNzOmBkaWN0YC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20gZGVzZXJpYWxpemF0aW9ucyAoZS5nLiB0bwogICAgc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KIAorICAgKm9iamVjdF9wYWlyc19ob29rKiwgaWYgc3BlY2lmaWVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiBldmVyeQorICAgSlNPTiBvYmplY3QgZGVjb2RlZCB3aXRoIGFuIG9yZGVyZWQgbGlzdCBvZiBwYWlycy4gIFRoZSByZXR1cm4gdmFsdWUgb2YKKyAgICpvYmplY3RfcGFpcnNfaG9vayogd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIDpjbGFzczpgZGljdGAuICBUaGlzCisgICBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgdGhhdCByZWx5IG9uIHRoZSBvcmRlcgorICAgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIHdpbGwgcmVtZW1iZXIgdGhlIG9yZGVyIG9mIGluc2VydGlvbikuIElmCisgICAqb2JqZWN0X2hvb2sqIGlzIGFsc28gZGVmaW5lZCwgdGhlICpvYmplY3RfcGFpcnNfaG9vayogdGFrZXMgcHJpb3JpdHkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciAqb2JqZWN0X3BhaXJzX2hvb2sqLgorCiAgICAqcGFyc2VfZmxvYXQqLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHN0cmluZyBvZiBldmVyeSBKU09OCiAgICBmbG9hdCB0byBiZSBkZWNvZGVkLiAgQnkgZGVmYXVsdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgZmxvYXQobnVtX3N0cilgYC4KICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyIGZvciBKU09OIGZsb2F0cwpAQCAtMjc0LDYgKzI5NiwxMSBAQAogICAgYGAnZmFsc2UnYGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpbnZhbGlkIEpTT04gbnVtYmVycwogICAgYXJlIGVuY291bnRlcmVkLgogCisgICBJZiAqc3RyaWN0KiBpcyBgYEZhbHNlYGAgKGBgVHJ1ZWBgIGlzIHRoZSBkZWZhdWx0KSwgdGhlbiBjb250cm9sIGNoYXJhY3RlcnMKKyAgIHdpbGwgYmUgYWxsb3dlZCBpbnNpZGUgc3RyaW5ncy4gIENvbnRyb2wgY2hhcmFjdGVycyBpbiB0aGlzIGNvbnRleHQgYXJlCisgICB0aG9zZSB3aXRoIGNoYXJhY3RlciBjb2RlcyBpbiB0aGUgMC0zMSByYW5nZSwgaW5jbHVkaW5nIGBgJ1x0J2BgICh0YWIpLAorICAgYGAnXG4nYGAsIGBgJ1xyJ2BgIGFuZCBgYCdcMCdgYC4KKwogCiAgICAuLiBtZXRob2Q6OiBkZWNvZGUocykKIApAQCAtMzM4LDcgKzM2NSw3IEBACiAgICBlbmNvZGVycyBhbmQgZGVjb2RlcnMuICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYSA6ZXhjOmBWYWx1ZUVycm9yYCB0byBlbmNvZGUKICAgIHN1Y2ggZmxvYXRzLgogCi0gICBJZiAqc29ydF9rZXlzKiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCB0aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzCisgICBJZiAqc29ydF9rZXlzKiBpcyBgYFRydWVgYCAoZGVmYXVsdCBgYEZhbHNlYGApLCB0aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzCiAgICB3aWxsIGJlIHNvcnRlZCBieSBrZXk7IHRoaXMgaXMgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZSB0aGF0CiAgICBKU09OIHNlcmlhbGl6YXRpb25zIGNhbiBiZSBjb21wYXJlZCBvbiBhIGRheS10by1kYXkgYmFzaXMuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2tleXdvcmQucnN0IGIvRG9jL2xpYnJhcnkva2V5d29yZC5yc3QKaW5kZXggMzJhMmQzNC4uM2I2OWQwYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkva2V5d29yZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkva2V5d29yZC5yc3QKQEAgLTIwLDMgKzIwLDggQEAKICAgIGtleXdvcmRzIGFyZSBkZWZpbmVkIHRvIG9ubHkgYmUgYWN0aXZlIHdoZW4gcGFydGljdWxhciA6bW9kOmBfX2Z1dHVyZV9fYAogICAgc3RhdGVtZW50cyBhcmUgaW4gZWZmZWN0LCB0aGVzZSB3aWxsIGJlIGluY2x1ZGVkIGFzIHdlbGwuCiAKKworLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBga2V5d29yZCBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIva2V5d29yZC5weT92aWV3PW1hcmt1cD5gXwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdCBiL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKaW5kZXggZjNkODM3OS4uOGViZWUwNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CkBAIC0xMiwxMiArMTIsMTcgQEAKIGxpbmVzIGFyZSByZWFkIGZyb20gYSBzaW5nbGUgZmlsZS4gIFRoaXMgaXMgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2ViYWNrYCBtb2R1bGUKIHRvIHJldHJpZXZlIHNvdXJjZSBsaW5lcyBmb3IgaW5jbHVzaW9uIGluICB0aGUgZm9ybWF0dGVkIHRyYWNlYmFjay4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgbGluZWNhY2hlIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9saW5lY2FjaGUucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YGxpbmVjYWNoZWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAogLi4gZnVuY3Rpb246OiBnZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm9bLCBtb2R1bGVfZ2xvYmFsc10pCiAKLSAgIEdldCBsaW5lICpsaW5lbm8qIGZyb20gZmlsZSBuYW1lZCAqZmlsZW5hbWUqLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgdGhyb3cgYW4KKyAgIEdldCBsaW5lICpsaW5lbm8qIGZyb20gZmlsZSBuYW1lZCAqZmlsZW5hbWUqLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgcmFpc2UgYW4KICAgIGV4Y2VwdGlvbiAtLS0gaXQgd2lsbCByZXR1cm4gYGAnJ2BgIG9uIGVycm9ycyAodGhlIHRlcm1pbmF0aW5nIG5ld2xpbmUgY2hhcmFjdGVyCiAgICB3aWxsIGJlIGluY2x1ZGVkIGZvciBsaW5lcyB0aGF0IGFyZSBmb3VuZCkuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QgYi9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CmluZGV4IDdiNGEwNWYuLmY1ODdkMDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdApAQCAtNDAsNyArNDAsNyBAQAogICAgSWYgKmxvY2FsZSogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlIGN1cnJlbnQgc2V0dGluZyBmb3IgKmNhdGVnb3J5KiBpcwogICAgcmV0dXJuZWQuCiAKLSAgIDpmdW5jOmBzZXRsb2NhbGVgIGlzIG5vdCB0aHJlYWQgc2FmZSBvbiBtb3N0IHN5c3RlbXMuIEFwcGxpY2F0aW9ucyB0eXBpY2FsbHkKKyAgIDpmdW5jOmBzZXRsb2NhbGVgIGlzIG5vdCB0aHJlYWQtc2FmZSBvbiBtb3N0IHN5c3RlbXMuIEFwcGxpY2F0aW9ucyB0eXBpY2FsbHkKICAgIHN0YXJ0IHdpdGggYSBjYWxsIG9mIDo6CiAKICAgICAgIGltcG9ydCBsb2NhbGUKQEAgLTU1NCw3ICs1NTQsNyBAQAogCiBQeXRob24gYXBwbGljYXRpb25zIHNob3VsZCBub3JtYWxseSBmaW5kIG5vIG5lZWQgdG8gaW52b2tlIHRoZXNlIGZ1bmN0aW9ucywgYW5kCiBzaG91bGQgdXNlIDptb2Q6YGdldHRleHRgIGluc3RlYWQuICBBIGtub3duIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgYXJlCi1hcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHVzZSBhZGRpdGlvbmFsIEMgbGlicmFyaWVzIHdoaWNoIGludGVybmFsbHkgaW52b2tlCithcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHdpdGggYWRkaXRpb25hbCBDIGxpYnJhcmllcyB3aGljaCBpbnRlcm5hbGx5IGludm9rZQogOmNmdW5jOmBnZXR0ZXh0YCBvciA6ZnVuYzpgZGNnZXR0ZXh0YC4gIEZvciB0aGVzZSBhcHBsaWNhdGlvbnMsIGl0IG1heSBiZQogbmVjZXNzYXJ5IHRvIGJpbmQgdGhlIHRleHQgZG9tYWluLCBzbyB0aGF0IHRoZSBsaWJyYXJpZXMgY2FuIHByb3Blcmx5IGxvY2F0ZQogdGhlaXIgbWVzc2FnZSBjYXRhbG9ncy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0IGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QKaW5kZXggYzk1YjhkZS4uOTg5OGQwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QKQEAgLTMyMSwyOCArMzIxLDQ2IEBACiAKICAgICAiJShhc2N0aW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMiCiAKK0Zvcm1hdHRlcnMgdXNlIGEgdXNlci1jb25maWd1cmFibGUgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgY3JlYXRpb24gdGltZSBvZiBhCityZWNvcmQgdG8gYSB0dXBsZS4gQnkgZGVmYXVsdCwgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYCBpcyB1c2VkOyB0byBjaGFuZ2UgdGhpcworZm9yIGEgcGFydGljdWxhciBmb3JtYXR0ZXIgaW5zdGFuY2UsIHNldCB0aGUgYGBjb252ZXJ0ZXJgYCBhdHRyaWJ1dGUgb2YgdGhlCitpbnN0YW5jZSB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlIGFzIDpmdW5jOmB0aW1lLmxvY2FsdGltZWAgb3IKKzpmdW5jOmB0aW1lLmdtdGltZWAuIFRvIGNoYW5nZSBpdCBmb3IgYWxsIGZvcm1hdHRlcnMsIGZvciBleGFtcGxlIGlmIHlvdSB3YW50CithbGwgbG9nZ2luZyB0aW1lcyB0byBiZSBzaG93biBpbiBHTVQsIHNldCB0aGUgYGBjb252ZXJ0ZXJgYCBhdHRyaWJ1dGUgaW4gdGhlCitGb3JtYXR0ZXIgY2xhc3MgKHRvIGBgdGltZS5nbXRpbWVgYCBmb3IgR01UIGRpc3BsYXkpLgorCiAKIENvbmZpZ3VyaW5nIExvZ2dpbmcKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotUHJvZ3JhbW1lcnMgY2FuIGNvbmZpZ3VyZSBsb2dnaW5nIGVpdGhlciBieSBjcmVhdGluZyBsb2dnZXJzLCBoYW5kbGVycywgYW5kCi1mb3JtYXR0ZXJzIGV4cGxpY2l0bHkgaW4gYSBtYWluIG1vZHVsZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHMgbGlzdGVkCi1hYm92ZSAodXNpbmcgUHl0aG9uIGNvZGUpLCBvciBieSBjcmVhdGluZyBhIGxvZ2dpbmcgY29uZmlnIGZpbGUuICBUaGUgZm9sbG93aW5nCi1jb2RlIGlzIGFuIGV4YW1wbGUgb2YgY29uZmlndXJpbmcgYSB2ZXJ5IHNpbXBsZSBsb2dnZXIsIGEgY29uc29sZSBoYW5kbGVyLCBhbmQgYQotc2ltcGxlIGZvcm1hdHRlciBpbiBhIFB5dGhvbiBtb2R1bGU6OgorUHJvZ3JhbW1lcnMgY2FuIGNvbmZpZ3VyZSBsb2dnaW5nIGluIHRocmVlIHdheXM6CisKKzEuIENyZWF0aW5nIGxvZ2dlcnMsIGhhbmRsZXJzLCBhbmQgZm9ybWF0dGVycyBleHBsaWNpdGx5IHVzaW5nIFB5dGhvbgorICAgY29kZSB0aGF0IGNhbGxzIHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHMgbGlzdGVkIGFib3ZlLgorMi4gQ3JlYXRpbmcgYSBsb2dnaW5nIGNvbmZpZyBmaWxlIGFuZCByZWFkaW5nIGl0IHVzaW5nIHRoZSA6ZnVuYzpgZmlsZUNvbmZpZ2AKKyAgIGZ1bmN0aW9uLgorMy4gQ3JlYXRpbmcgYSBkaWN0aW9uYXJ5IG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIHBhc3NpbmcgaXQKKyAgIHRvIHRoZSA6ZnVuYzpgZGljdENvbmZpZ2AgZnVuY3Rpb24uCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIGEgdmVyeSBzaW1wbGUgbG9nZ2VyLCBhIGNvbnNvbGUKK2hhbmRsZXIsIGFuZCBhIHNpbXBsZSBmb3JtYXR0ZXIgdXNpbmcgUHl0aG9uIGNvZGU6OgogCiAgICAgaW1wb3J0IGxvZ2dpbmcKIAogICAgICMgY3JlYXRlIGxvZ2dlcgogICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzaW1wbGVfZXhhbXBsZSIpCiAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKICAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgYW5kIHNldCBsZXZlbCB0byBkZWJ1ZwogICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKICAgICBjaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCiAgICAgIyBjcmVhdGUgZm9ybWF0dGVyCiAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoIiUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMiKQorCiAgICAgIyBhZGQgZm9ybWF0dGVyIHRvIGNoCiAgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKwogICAgICMgYWRkIGNoIHRvIGxvZ2dlcgogICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNoKQogCkBAIC00MjUsNiArNDQzLDUyIEBACiBjb2RlIGFwcHJvYWNoLCBtYWlubHkgc2VwYXJhdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBjb2RlIGFuZCB0aGUgYWJpbGl0eSBvZgogbm9uY29kZXJzIHRvIGVhc2lseSBtb2RpZnkgdGhlIGxvZ2dpbmcgcHJvcGVydGllcy4KIAorTm90ZSB0aGF0IHRoZSBjbGFzcyBuYW1lcyByZWZlcmVuY2VkIGluIGNvbmZpZyBmaWxlcyBuZWVkIHRvIGJlIGVpdGhlciByZWxhdGl2ZQordG8gdGhlIGxvZ2dpbmcgbW9kdWxlLCBvciBhYnNvbHV0ZSB2YWx1ZXMgd2hpY2ggY2FuIGJlIHJlc29sdmVkIHVzaW5nIG5vcm1hbAoraW1wb3J0IG1lY2hhbmlzbXMuIFRodXMsIHlvdSBjb3VsZCB1c2UgZWl0aGVyIDpjbGFzczpgaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyYAorKHJlbGF0aXZlIHRvIHRoZSBsb2dnaW5nIG1vZHVsZSkgb3IgOmNsYXNzOmBteXBhY2thZ2UubXltb2R1bGUuTXlIYW5kbGVyYCAoZm9yIGEKK2NsYXNzIGRlZmluZWQgaW4gcGFja2FnZSA6bW9kOmBteXBhY2thZ2VgIGFuZCBtb2R1bGUgOm1vZDpgbXltb2R1bGVgLCB3aGVyZQorOm1vZDpgbXlwYWNrYWdlYCBpcyBhdmFpbGFibGUgb24gdGhlIFB5dGhvbiBpbXBvcnQgcGF0aCkuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisKK0luIFB5dGhvbiAyLjcsIGEgbmV3IG1lYW5zIG9mIGNvbmZpZ3VyaW5nIGxvZ2dpbmcgaGFzIGJlZW4gaW50cm9kdWNlZCwgdXNpbmcKK2RpY3Rpb25hcmllcyB0byBob2xkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIFRoaXMgcHJvdmlkZXMgYSBzdXBlcnNldCBvZiB0aGUKK2Z1bmN0aW9uYWxpdHkgb2YgdGhlIGNvbmZpZy1maWxlLWJhc2VkIGFwcHJvYWNoIG91dGxpbmVkIGFib3ZlLCBhbmQgaXMgdGhlCityZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgbmV3IGFwcGxpY2F0aW9ucyBhbmQgZGVwbG95bWVudHMuIEJlY2F1c2UKK2EgUHl0aG9uIGRpY3Rpb25hcnkgaXMgdXNlZCB0byBob2xkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIGFuZCBzaW5jZSB5b3UKK2NhbiBwb3B1bGF0ZSB0aGF0IGRpY3Rpb25hcnkgdXNpbmcgZGlmZmVyZW50IG1lYW5zLCB5b3UgaGF2ZSBtb3JlIG9wdGlvbnMgZm9yCitjb25maWd1cmF0aW9uLiBGb3IgZXhhbXBsZSwgeW91IGNhbiB1c2UgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gSlNPTiBmb3JtYXQsCitvciwgaWYgeW91IGhhdmUgYWNjZXNzIHRvIFlBTUwgcHJvY2Vzc2luZyBmdW5jdGlvbmFsaXR5LCBhIGZpbGUgaW4gWUFNTAorZm9ybWF0LCB0byBwb3B1bGF0ZSB0aGUgY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5LiBPciwgb2YgY291cnNlLCB5b3UgY2FuCitjb25zdHJ1Y3QgdGhlIGRpY3Rpb25hcnkgaW4gUHl0aG9uIGNvZGUsIHJlY2VpdmUgaXQgaW4gcGlja2xlZCBmb3JtIG92ZXIgYQorc29ja2V0LCBvciB1c2Ugd2hhdGV2ZXIgYXBwcm9hY2ggbWFrZXMgc2Vuc2UgZm9yIHlvdXIgYXBwbGljYXRpb24uCisKK0hlcmUncyBhbiBleGFtcGxlIG9mIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgYWJvdmUsIGluIFlBTUwgZm9ybWF0IGZvcgordGhlIG5ldyBkaWN0aW9uYXJ5LWJhc2VkIGFwcHJvYWNoOjoKKworICAgIHZlcnNpb246IDEKKyAgICBmb3JtYXR0ZXJzOgorICAgICAgc2ltcGxlOgorICAgICAgICBmb3JtYXQ6IGZvcm1hdD0lKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzCisgICAgaGFuZGxlcnM6CisgICAgICBjb25zb2xlOgorICAgICAgICBjbGFzczogbG9nZ2luZy5TdHJlYW1IYW5kbGVyCisgICAgICAgIGxldmVsOiBERUJVRworICAgICAgICBmb3JtYXR0ZXI6IHNpbXBsZQorICAgICAgICBzdHJlYW06IGV4dDovL3N5cy5zdGRvdXQKKyAgICBsb2dnZXJzOgorICAgICAgc2ltcGxlRXhhbXBsZToKKyAgICAgICAgbGV2ZWw6IERFQlVHCisgICAgICAgIGhhbmRsZXJzOiBbY29uc29sZV0KKyAgICAgICAgcHJvcGFnYXRlOiBubworICAgIHJvb3Q6CisgICAgICAgIGxldmVsOiBERUJVRworICAgICAgICBoYW5kbGVyczogW2NvbnNvbGVdCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxvZ2dpbmcgdXNpbmcgYSBkaWN0aW9uYXJ5LCBzZWUKKzpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCisKIC4uIF9saWJyYXJ5LWNvbmZpZzoKIAogQ29uZmlndXJpbmcgTG9nZ2luZyBmb3IgYSBMaWJyYXJ5CkBAIC00NjYsNiArNTMwLDE3IEBACiBsaWJyYXJpZXMsIHRoZW4gdGhlIGxvZ2dlciBuYW1lIHNwZWNpZmllZCBjYW4gYmUgIm9yZ25hbWUuZm9vIiByYXRoZXIgdGhhbgoganVzdCAiZm9vIi4KIAorKipQTEVBU0UgTk9URToqKiBJdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRoYXQgeW91ICpkbyBub3QgYWRkIGFueSBoYW5kbGVycyBvdGhlcgordGhhbiogOmNsYXNzOmBOdWxsSGFuZGxlcmAgKnRvIHlvdXIgbGlicmFyeSdzIGxvZ2dlcnMqLiBUaGlzIGlzIGJlY2F1c2UgdGhlCitjb25maWd1cmF0aW9uIG9mIGhhbmRsZXJzIGlzIHRoZSBwcmVyb2dhdGl2ZSBvZiB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyIHdobwordXNlcyB5b3VyIGxpYnJhcnkuIFRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIga25vd3MgdGhlaXIgdGFyZ2V0IGF1ZGllbmNlIGFuZAord2hhdCBoYW5kbGVycyBhcmUgbW9zdCBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgYXBwbGljYXRpb246IGlmIHlvdSBhZGQgaGFuZGxlcnMKKyJ1bmRlciB0aGUgaG9vZCIsIHlvdSBtaWdodCB3ZWxsIGludGVyZmVyZSB3aXRoIHRoZWlyIGFiaWxpdHkgdG8gY2Fycnkgb3V0Cit1bml0IHRlc3RzIGFuZCBkZWxpdmVyIGxvZ3Mgd2hpY2ggc3VpdCB0aGVpciByZXF1aXJlbWVudHMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLgorCiAKIExvZ2dpbmcgTGV2ZWxzCiAtLS0tLS0tLS0tLS0tLQpAQCAtNTIzLDYgKzU5OCwyMiBAQAogdGhlIG1lc3NhZ2UgdG8gaXRzIGRlc3RpbmF0aW9uLiBNb3N0IHVzZXItZGVmaW5lZCBzdWJjbGFzc2VzIG9mIDpjbGFzczpgSGFuZGxlcmAKIHdpbGwgbmVlZCB0byBvdmVycmlkZSB0aGlzIDptZXRoOmBlbWl0YC4KIAorLi4gX2N1c3RvbS1sZXZlbHM6CisKK0N1c3RvbSBMZXZlbHMKK15eXl5eXl5eXl5eXl4KKworRGVmaW5pbmcgeW91ciBvd24gbGV2ZWxzIGlzIHBvc3NpYmxlLCBidXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFzIHRoZQorZXhpc3RpbmcgbGV2ZWxzIGhhdmUgYmVlbiBjaG9zZW4gb24gdGhlIGJhc2lzIG9mIHByYWN0aWNhbCBleHBlcmllbmNlLgorSG93ZXZlciwgaWYgeW91IGFyZSBjb252aW5jZWQgdGhhdCB5b3UgbmVlZCBjdXN0b20gbGV2ZWxzLCBncmVhdCBjYXJlIHNob3VsZAorYmUgZXhlcmNpc2VkIHdoZW4gZG9pbmcgdGhpcywgYW5kIGl0IGlzIHBvc3NpYmx5ICphIHZlcnkgYmFkIGlkZWEgdG8gZGVmaW5lCitjdXN0b20gbGV2ZWxzIGlmIHlvdSBhcmUgZGV2ZWxvcGluZyBhIGxpYnJhcnkqLiBUaGF0J3MgYmVjYXVzZSBpZiBtdWx0aXBsZQorbGlicmFyeSBhdXRob3JzIGFsbCBkZWZpbmUgdGhlaXIgb3duIGN1c3RvbSBsZXZlbHMsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQKK3RoZSBsb2dnaW5nIG91dHB1dCBmcm9tIHN1Y2ggbXVsdGlwbGUgbGlicmFyaWVzIHVzZWQgdG9nZXRoZXIgd2lsbCBiZQorZGlmZmljdWx0IGZvciB0aGUgdXNpbmcgZGV2ZWxvcGVyIHRvIGNvbnRyb2wgYW5kL29yIGludGVycHJldCwgYmVjYXVzZSBhCitnaXZlbiBudW1lcmljIHZhbHVlIG1pZ2h0IG1lYW4gZGlmZmVyZW50IHRoaW5ncyBmb3IgZGlmZmVyZW50IGxpYnJhcmllcy4KKworCiBVc2VmdWwgSGFuZGxlcnMKIC0tLS0tLS0tLS0tLS0tLQogCkBAIC01NzEsNyArNjYyLDE2IEBACiAgICBuYW1lLiBUaGlzIGhhbmRsZXIgaXMgb25seSB1c2VmdWwgb24gVW5peC1saWtlIHN5c3RlbXM7IFdpbmRvd3MgZG9lcyBub3QKICAgIHN1cHBvcnQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZWQuCiAKLVRoZSA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGFuZCA6Y2xhc3M6YEZpbGVIYW5kbGVyYAorIy4gOnJlZjpgbnVsbC1oYW5kbGVyYCBpbnN0YW5jZXMgZG8gbm90aGluZyB3aXRoIGVycm9yIG1lc3NhZ2VzLiBUaGV5IGFyZSB1c2VkCisgICBieSBsaWJyYXJ5IGRldmVsb3BlcnMgd2hvIHdhbnQgdG8gdXNlIGxvZ2dpbmcsIGJ1dCB3YW50IHRvIGF2b2lkIHRoZSAiTm8KKyAgIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgWFhYIiBtZXNzYWdlIHdoaWNoIGNhbiBiZSBkaXNwbGF5ZWQgaWYKKyAgIHRoZSBsaWJyYXJ5IHVzZXIgaGFzIG5vdCBjb25maWd1cmVkIGxvZ2dpbmcuIFNlZSA6cmVmOmBsaWJyYXJ5LWNvbmZpZ2AgZm9yCisgICBtb3JlIGluZm9ybWF0aW9uLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgIFRoZSA6Y2xhc3M6YE51bGxIYW5kbGVyYCBjbGFzcy4KKworVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgLCA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGFuZCA6Y2xhc3M6YEZpbGVIYW5kbGVyYAogY2xhc3NlcyBhcmUgZGVmaW5lZCBpbiB0aGUgY29yZSBsb2dnaW5nIHBhY2thZ2UuIFRoZSBvdGhlciBoYW5kbGVycyBhcmUKIGRlZmluZWQgaW4gYSBzdWItIG1vZHVsZSwgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AuIChUaGVyZSBpcyBhbHNvIGFub3RoZXIKIHN1Yi1tb2R1bGUsIDptb2Q6YGxvZ2dpbmcuY29uZmlnYCwgZm9yIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eS4pCkBAIC02NTAsNyArNzUwLDcgQEAKICAgICAgIGQgPSB7J2NsaWVudGlwJzogJzE5Mi4xNjguMC4xJywgJ3VzZXInOiAnZmJsb2dncyd9CiAgICAgICBsb2dnaW5nLndhcm5pbmcoIlByb3RvY29sIHByb2JsZW06ICVzIiwgImNvbm5lY3Rpb24gcmVzZXQiLCBleHRyYT1kKQogCi0gICB3b3VsZCBwcmludCBzb21ldGhpbmcgbGlrZSAgOjoKKyAgIHdvdWxkIHByaW50IHNvbWV0aGluZyBsaWtlOjoKIAogICAgICAgMjAwNi0wMi0wOCAyMjoyMDowMiwxNjUgMTkyLjE2OC4wLjEgZmJsb2dncyAgUHJvdG9jb2wgcHJvYmxlbTogY29ubmVjdGlvbiByZXNldAogCkBAIC03MTIsNiArODEyLDE0IEBACiAgICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsICpsZXZlbCogb24gdGhlIHJvb3QgbG9nZ2VyLiBUaGUgb3RoZXIgYXJndW1lbnRzIGFyZQogICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDpmdW5jOmBkZWJ1Z2AuCiAKKyAgIFBMRUFTRSBOT1RFOiBUaGUgYWJvdmUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyB3aGljaCBkZWxlZ2F0ZSB0byB0aGUgcm9vdAorICAgbG9nZ2VyIHNob3VsZCAqbm90KiBiZSB1c2VkIGluIHRocmVhZHMsIGluIHZlcnNpb25zIG9mIFB5dGhvbiBlYXJsaWVyIHRoYW4KKyAgIDIuNy4xIGFuZCAzLjIsIHVubGVzcyBhdCBsZWFzdCBvbmUgaGFuZGxlciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcm9vdAorICAgbG9nZ2VyICpiZWZvcmUqIHRoZSB0aHJlYWRzIGFyZSBzdGFydGVkLiBUaGVzZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgY2FsbAorICAgOmZ1bmM6YGJhc2ljQ29uZmlnYCB0byBlbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgaGFuZGxlciBpcyBhdmFpbGFibGU7IGluCisgICBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiwgdGhpcyBjYW4gKHVuZGVyIHJhcmUgY2lyY3Vtc3RhbmNlcykgbGVhZCB0bworICAgaGFuZGxlcnMgYmVpbmcgYWRkZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhlIHJvb3QgbG9nZ2VyLCB3aGljaCBjYW4gaW4gdHVybgorICAgbGVhZCB0byBtdWx0aXBsZSBtZXNzYWdlcyBmb3IgdGhlIHNhbWUgZXZlbnQuCiAKIC4uIGZ1bmN0aW9uOjogZGlzYWJsZShsdmwpCiAKQEAgLTczMyw2ICs4NDEsOCBAQAogICAgcmVnaXN0ZXJlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBsZXZlbHMgc2hvdWxkIGJlIHBvc2l0aXZlIGludGVnZXJzIGFuZCB0aGV5CiAgICBzaG91bGQgaW5jcmVhc2UgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBzZXZlcml0eS4KIAorICAgTk9URTogSWYgeW91IGFyZSB0aGlua2luZyBvZiBkZWZpbmluZyB5b3VyIG93biBsZXZlbHMsIHBsZWFzZSBzZWUgdGhlIHNlY3Rpb24KKyAgIG9uIDpyZWY6YGN1c3RvbS1sZXZlbHNgLgogCiAuLiBmdW5jdGlvbjo6IGdldExldmVsTmFtZShsdmwpCiAKQEAgLTc2Nyw2ICs4NzcsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi40CiAgICAgICBGb3JtZXJseSwgOmZ1bmM6YGJhc2ljQ29uZmlnYCBkaWQgbm90IHRha2UgYW55IGtleXdvcmQgYXJndW1lbnRzLgogCisgICBQTEVBU0UgTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkCisgICBiZWZvcmUgb3RoZXIgdGhyZWFkcyBhcmUgc3RhcnRlZC4gSW4gdmVyc2lvbnMgb2YgUHl0aG9uIHByaW9yIHRvCisgICAyLjcuMSBhbmQgMy4yLCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsCisgICBpdCBpcyBwb3NzaWJsZSAoaW4gcmFyZSBjaXJjdW1zdGFuY2VzKSB0aGF0IGEgaGFuZGxlciB3aWxsIGJlIGFkZGVkCisgICB0byB0aGUgcm9vdCBsb2dnZXIgbW9yZSB0aGFuIG9uY2UsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCByZXN1bHRzCisgICBzdWNoIGFzIG1lc3NhZ2VzIGJlaW5nIGR1cGxpY2F0ZWQgaW4gdGhlIGxvZy4KKwogICAgVGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkLgogCiAgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtODExLDYgKzkyOCw3IEBACiAgICB3aGljaCBuZWVkIHRvIHVzZSBjdXN0b20gbG9nZ2VyIGJlaGF2aW9yLgogCiAKKwogLi4gc2VlYWxzbzo6CiAKICAgIDpwZXA6YDI4MmAgLSBBIExvZ2dpbmcgU3lzdGVtCkBAIC04NzYsNiArOTk0LDE2IEBACiAgICA6Y29uc3Q6YE5PVFNFVGAgaXMgZm91bmQsIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkLgogCiAKKy4uIG1ldGhvZDo6IExvZ2dlci5nZXRDaGlsZChzdWZmaXgpCisKKyAgIFJldHVybnMgYSBsb2dnZXIgd2hpY2ggaXMgYSBkZXNjZW5kYW50IHRvIHRoaXMgbG9nZ2VyLCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzdWZmaXguCisgICBUaHVzLCBgYGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMnKS5nZXRDaGlsZCgnZGVmLmdoaScpYGAgd291bGQgcmV0dXJuIHRoZSBzYW1lCisgICBsb2dnZXIgYXMgd291bGQgYmUgcmV0dXJuZWQgYnkgYGBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKWBgLiBUaGlzIGlzIGEKKyAgIGNvbnZlbmllbmNlIG1ldGhvZCwgdXNlZnVsIHdoZW4gdGhlIHBhcmVudCBsb2dnZXIgaXMgbmFtZWQgdXNpbmcgZS5nLiBgYF9fbmFtZV9fYGAKKyAgIHJhdGhlciB0aGFuIGEgbGl0ZXJhbCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAuLiBtZXRob2Q6OiBMb2dnZXIuZGVidWcobXNnWywgKmFyZ3NbLCAqKmt3YXJnc11dKQogCiAgICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsIDpjb25zdDpgREVCVUdgIG9uIHRoaXMgbG9nZ2VyLiBUaGUgKm1zZyogaXMgdGhlCkBAIC0xMjQ1LDYgKzEzNzMsMTAgQEAKIGJlIGhhcmQgdG8gbWFuYWdlIGlmIHRoZSBudW1iZXIgb2YgOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBiZWNvbWVzCiBlZmZlY3RpdmVseSB1bmJvdW5kZWQuCiAKKworVXNpbmcgTG9nZ2VyQWRhcHRlcnMgdG8gaW1wYXJ0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEFuIGVhc3kgd2F5IGluIHdoaWNoIHlvdSBjYW4gcGFzcyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCBhbG9uZwogd2l0aCBsb2dnaW5nIGV2ZW50IGluZm9ybWF0aW9uIGlzIHRvIHVzZSB0aGUgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBjbGFzcy4KIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gbG9vayBsaWtlIGEgOmNsYXNzOmBMb2dnZXJgLCBzbyB0aGF0IHlvdSBjYW4gY2FsbApAQCAtMTM1Miw2ICsxNDg0LDgwIEBACiAKIFRoZSA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIGNsYXNzIHdhcyBub3QgcHJlc2VudCBpbiBwcmV2aW91cyB2ZXJzaW9ucy4KIAorLi4gX2ZpbHRlcnMtY29udGV4dHVhbDoKKworVXNpbmcgRmlsdGVycyB0byBpbXBhcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitZb3UgY2FuIGFsc28gYWRkIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gbG9nIG91dHB1dCB1c2luZyBhIHVzZXItZGVmaW5lZAorOmNsYXNzOmBGaWx0ZXJgLiBgYEZpbHRlcmBgIGluc3RhbmNlcyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGBgTG9nUmVjb3Jkc2BgCitwYXNzZWQgdG8gdGhlbSwgaW5jbHVkaW5nIGFkZGluZyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgd2hpY2ggY2FuIHRoZW4gYmUgb3V0cHV0Cit1c2luZyBhIHN1aXRhYmxlIGZvcm1hdCBzdHJpbmcsIG9yIGlmIG5lZWRlZCBhIGN1c3RvbSA6Y2xhc3M6YEZvcm1hdHRlcmAuCisKK0ZvciBleGFtcGxlIGluIGEgd2ViIGFwcGxpY2F0aW9uLCB0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQgKG9yIGF0IGxlYXN0LAordGhlIGludGVyZXN0aW5nIHBhcnRzIG9mIGl0KSBjYW4gYmUgc3RvcmVkIGluIGEgdGhyZWFkbG9jYWwKKyg6Y2xhc3M6YHRocmVhZGluZy5sb2NhbGApIHZhcmlhYmxlLCBhbmQgdGhlbiBhY2Nlc3NlZCBmcm9tIGEgYGBGaWx0ZXJgYCB0bworYWRkLCBzYXksIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlcXVlc3QgLSBzYXksIHRoZSByZW1vdGUgSVAgYWRkcmVzcyBhbmQgcmVtb3RlCit1c2VyJ3MgdXNlcm5hbWUgLSB0byB0aGUgYGBMb2dSZWNvcmRgYCwgdXNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lcyAnaXAnIGFuZAorJ3VzZXInIGFzIGluIHRoZSBgYExvZ2dlckFkYXB0ZXJgYCBleGFtcGxlIGFib3ZlLiBJbiB0aGF0IGNhc2UsIHRoZSBzYW1lIGZvcm1hdAorc3RyaW5nIGNhbiBiZSB1c2VkIHRvIGdldCBzaW1pbGFyIG91dHB1dCB0byB0aGF0IHNob3duIGFib3ZlLiBIZXJlJ3MgYW4gZXhhbXBsZQorc2NyaXB0OjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQorCisgICAgY2xhc3MgQ29udGV4dEZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGlzIGEgZmlsdGVyIHdoaWNoIGluamVjdHMgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZSBsb2cuCisKKyAgICAgICAgUmF0aGVyIHRoYW4gdXNlIGFjdHVhbCBjb250ZXh0dWFsIGluZm9ybWF0aW9uLCB3ZSBqdXN0IHVzZSByYW5kb20KKyAgICAgICAgZGF0YSBpbiB0aGlzIGRlbW8uCisgICAgICAgICIiIgorCisgICAgICAgIFVTRVJTID0gWydqaW0nLCAnZnJlZCcsICdzaGVpbGEnXQorICAgICAgICBJUFMgPSBbJzEyMy4yMzEuMjMxLjEyMycsICcxMjcuMC4wLjEnLCAnMTkyLjE2OC4wLjEnXQorCisgICAgICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKKworICAgICAgICAgICAgcmVjb3JkLmlwID0gY2hvaWNlKENvbnRleHRGaWx0ZXIuSVBTKQorICAgICAgICAgICAgcmVjb3JkLnVzZXIgPSBjaG9pY2UoQ29udGV4dEZpbHRlci5VU0VSUykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICAgIGxldmVscyA9IChsb2dnaW5nLkRFQlVHLCBsb2dnaW5nLklORk8sIGxvZ2dpbmcuV0FSTklORywgbG9nZ2luZy5FUlJPUiwgbG9nZ2luZy5DUklUSUNBTCkKKyAgICAgICBhMSA9IGxvZ2dpbmcuTG9nZ2VyQWRhcHRlcihsb2dnaW5nLmdldExvZ2dlcigiYS5iLmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJpcCIgOiAiMTIzLjIzMS4yMzEuMTIzIiwgInVzZXIiIDogInNoZWlsYSIgfSkKKyAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IiUoYXNjdGltZSktMTVzICUobmFtZSktNXMgJShsZXZlbG5hbWUpLThzIElQOiAlKGlwKS0xNXMgVXNlcjogJSh1c2VyKS04cyAlKG1lc3NhZ2UpcyIpCisgICAgICAgYTEgPSBsb2dnaW5nLmdldExvZ2dlcigiYS5iLmMiKQorICAgICAgIGEyID0gbG9nZ2luZy5nZXRMb2dnZXIoImQuZS5mIikKKworICAgICAgIGYgPSBDb250ZXh0RmlsdGVyKCkKKyAgICAgICBhMS5hZGRGaWx0ZXIoZikKKyAgICAgICBhMi5hZGRGaWx0ZXIoZikKKyAgICAgICBhMS5kZWJ1ZygiQSBkZWJ1ZyBtZXNzYWdlIikKKyAgICAgICBhMS5pbmZvKCJBbiBpbmZvIG1lc3NhZ2Ugd2l0aCAlcyIsICJzb21lIHBhcmFtZXRlcnMiKQorICAgICAgIGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgbHZsID0gY2hvaWNlKGxldmVscykKKyAgICAgICAgICAgbHZsbmFtZSA9IGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGx2bCkKKyAgICAgICAgICAgYTIubG9nKGx2bCwgIkEgbWVzc2FnZSBhdCAlcyBsZXZlbCB3aXRoICVkICVzIiwgbHZsbmFtZSwgMiwgInBhcmFtZXRlcnMiKQorCit3aGljaCwgd2hlbiBydW4sIHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlOjoKKworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMjkyIGEuYi5jIERFQlVHICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBkZWJ1ZyBtZXNzYWdlCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgYS5iLmMgSU5GTyAgICAgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBzaGVpbGEgICBBbiBpbmZvIG1lc3NhZ2Ugd2l0aCBzb21lIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBDUklUSUNBTCBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBDUklUSUNBTCBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIEVSUk9SICAgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgREVCVUcgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgREVCVUcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBFUlJPUiAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBFUlJPUiBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIENSSVRJQ0FMIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IENSSVRJQ0FMIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgQ1JJVElDQUwgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgQ1JJVElDQUwgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBERUJVRyAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAxIGQuZS5mIEVSUk9SICAgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDEgZC5lLmYgREVCVUcgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBmcmVkICAgICBBIG1lc3NhZ2UgYXQgREVCVUcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMSBkLmUuZiBJTkZPICAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBJTkZPIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisKKwogLi4gX211bHRpcGxlLXByb2Nlc3NlczoKIAogTG9nZ2luZyB0byBhIHNpbmdsZSBmaWxlIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCkBAIC0xNTEzLDYgKzE3MTksOCBAQAogdGhlIDptZXRoOmBtYWtlUGlja2xlYCBtZXRob2QgYW5kIGltcGxlbWVudGluZyB5b3VyIGFsdGVybmF0aXZlIHRoZXJlLCBhcwogd2VsbCBhcyBhZGFwdGluZyB0aGUgYWJvdmUgc2NyaXB0IHRvIHVzZSB5b3VyIGFsdGVybmF0aXZlIHNlcmlhbGl6YXRpb24uCiAKKy4uIF9hcmJpdHJhcnktb2JqZWN0LW1lc3NhZ2VzOgorCiBVc2luZyBhcmJpdHJhcnkgb2JqZWN0cyBhcyBtZXNzYWdlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTY4MSw5ICsxODg5LDkgQEAKIAogLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcKIAotLi4gY2xhc3M6OiBTdHJlYW1IYW5kbGVyKFtzdHJtXSkKKy4uIGNsYXNzOjogU3RyZWFtSGFuZGxlcihbc3RyZWFtXSkKIAotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTdHJlYW1IYW5kbGVyYCBjbGFzcy4gSWYgKnN0cm0qIGlzCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGNsYXNzLiBJZiAqc3RyZWFtKiBpcwogICAgc3BlY2lmaWVkLCB0aGUgaW5zdGFuY2Ugd2lsbCB1c2UgaXQgZm9yIGxvZ2dpbmcgb3V0cHV0OyBvdGhlcndpc2UsICpzeXMuc3RkZXJyKgogICAgd2lsbCBiZSB1c2VkLgogCkBAIC0xNzMzLDggKzE5NDEsMzYgQEAKIAogICAgICAgT3V0cHV0cyB0aGUgcmVjb3JkIHRvIHRoZSBmaWxlLgogCisKIC4uIF9udWxsLWhhbmRsZXI6CiAKK051bGxIYW5kbGVyCiteXl5eXl5eXl5eXgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSBjb3JlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UsCitkb2VzIG5vdCBkbyBhbnkgZm9ybWF0dGluZyBvciBvdXRwdXQuIEl0IGlzIGVzc2VudGlhbGx5IGEgIm5vLW9wIiBoYW5kbGVyCitmb3IgdXNlIGJ5IGxpYnJhcnkgZGV2ZWxvcGVycy4KKworLi4gY2xhc3M6OiBOdWxsSGFuZGxlcigpCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLgorCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgorCisgICAuLiBtZXRob2Q6OiBoYW5kbGUocmVjb3JkKQorCisgICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCisKKyAgIC4uIG1ldGhvZDo6IGNyZWF0ZUxvY2soKQorCisgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGBOb25lYCBmb3IgdGhlIGxvY2ssIHNpbmNlIHRoZXJlIGlzIG5vCisgICAgICB1bmRlcmx5aW5nIEkvTyB0byB3aGljaCBhY2Nlc3MgbmVlZHMgdG8gYmUgc2VyaWFsaXplZC4KKworCiBTZWUgOnJlZjpgbGlicmFyeS1jb25maWdgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UKIDpjbGFzczpgTnVsbEhhbmRsZXJgLgogCkBAIC0xNzQ1LDYgKzE5ODEsOCBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAorLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcuaGFuZGxlcnMKKwogVGhlIDpjbGFzczpgV2F0Y2hlZEZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKIG1vZHVsZSwgaXMgYSA6Y2xhc3M6YEZpbGVIYW5kbGVyYCB3aGljaCB3YXRjaGVzIHRoZSBmaWxlIGl0IGlzIGxvZ2dpbmcgdG8uIElmCiB0aGUgZmlsZSBjaGFuZ2VzLCBpdCBpcyBjbG9zZWQgYW5kIHJlb3BlbmVkIHVzaW5nIHRoZSBmaWxlIG5hbWUuCkBAIC0xOTk3LDE2ICsyMjM1LDIyIEBACiBzdXBwb3J0cyBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMgdG8gYSByZW1vdGUgb3IgbG9jYWwgVW5peCBzeXNsb2cuCiAKIAotLi4gY2xhc3M6OiBTeXNMb2dIYW5kbGVyKFthZGRyZXNzWywgZmFjaWxpdHldXSkKKy4uIGNsYXNzOjogU3lzTG9nSGFuZGxlcihbYWRkcmVzc1ssIGZhY2lsaXR5Wywgc29ja3R5cGVdXV0pCiAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU3lzTG9nSGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgVW5peCBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmFkZHJlc3MqIGluCiAgICB0aGUgZm9ybSBvZiBhIGBgKGhvc3QsIHBvcnQpYGAgdHVwbGUuICBJZiAqYWRkcmVzcyogaXMgbm90IHNwZWNpZmllZCwKLSAgIGBgKCdsb2NhbGhvc3QnLCA1MTQpYGAgaXMgdXNlZC4gIFRoZSBhZGRyZXNzIGlzIHVzZWQgdG8gb3BlbiBhIFVEUCBzb2NrZXQuICBBbgorICAgYGAoJ2xvY2FsaG9zdCcsIDUxNClgYCBpcyB1c2VkLiAgVGhlIGFkZHJlc3MgaXMgdXNlZCB0byBvcGVuIGEgc29ja2V0LiAgQW4KICAgIGFsdGVybmF0aXZlIHRvIHByb3ZpZGluZyBhIGBgKGhvc3QsIHBvcnQpYGAgdHVwbGUgaXMgcHJvdmlkaW5nIGFuIGFkZHJlc3MgYXMgYQogICAgc3RyaW5nLCBmb3IgZXhhbXBsZSAiL2Rldi9sb2ciLiBJbiB0aGlzIGNhc2UsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIHVzZWQgdG8KICAgIHNlbmQgdGhlIG1lc3NhZ2UgdG8gdGhlIHN5c2xvZy4gSWYgKmZhY2lsaXR5KiBpcyBub3Qgc3BlY2lmaWVkLAotICAgOmNvbnN0OmBMT0dfVVNFUmAgaXMgdXNlZC4KKyAgIDpjb25zdDpgTE9HX1VTRVJgIGlzIHVzZWQuIFRoZSB0eXBlIG9mIHNvY2tldCBvcGVuZWQgZGVwZW5kcyBvbiB0aGUKKyAgICpzb2NrdHlwZSogYXJndW1lbnQsIHdoaWNoIGRlZmF1bHRzIHRvIDpjb25zdDpgc29ja2V0LlNPQ0tfREdSQU1gIGFuZCB0aHVzCisgICBvcGVucyBhIFVEUCBzb2NrZXQuIFRvIG9wZW4gYSBUQ1Agc29ja2V0IChmb3IgdXNlIHdpdGggdGhlIG5ld2VyIHN5c2xvZworICAgZGFlbW9ucyBzdWNoIGFzIHJzeXNsb2cpLCBzcGVjaWZ5IGEgdmFsdWUgb2YgOmNvbnN0OmBzb2NrZXQuU09DS19TVFJFQU1gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgKnNvY2t0eXBlKiB3YXMgYWRkZWQuCiAKIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQpAQCAtMjI5Niw3ICsyNTQwLDcgQEAKIAogICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCiAKLSAgICAgIFNlbmRzIHRoZSByZWNvcmQgdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYW4gVVJMLWVuY29kZWQgZGljdGlvbmFyeS4KKyAgICAgIFNlbmRzIHRoZSByZWNvcmQgdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYSBwZXJjZW50LWVuY29kZWQgZGljdGlvbmFyeS4KIAogCiAuLiBfZm9ybWF0dGVyOgpAQCAtMjM2OSw2ICsyNjEzLDggQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBgYCUocHJvY2VzcylkYGAgICAgICAgICB8IFByb2Nlc3MgSUQgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGAlKHByb2Nlc3NOYW1lKXNgYCAgICAgfCBQcm9jZXNzIG5hbWUgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgJShtZXNzYWdlKXNgYCAgICAgICAgIHwgVGhlIGxvZ2dlZCBtZXNzYWdlLCBjb21wdXRlZCBhcyBgYG1zZyAlICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmdzYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMzc2LDE1ICsyNjIyLDE3IEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNQogICAgKmZ1bmNOYW1lKiB3YXMgYWRkZWQuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi42CisgICAqcHJvY2Vzc05hbWUqIHdhcyBhZGRlZC4KKwogCiAuLiBjbGFzczo6IEZvcm1hdHRlcihbZm10WywgZGF0ZWZtdF1dKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgY2xhc3MuIFRoZSBpbnN0YW5jZSBpcwotICAgaW5pdGlhbGl6ZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBtZXNzYWdlIGFzIGEgd2hvbGUsIGFzIHdlbGwgYXMgYSBmb3JtYXQKLSAgIHN0cmluZyBmb3IgdGhlIGRhdGUvdGltZSBwb3J0aW9uIG9mIGEgbWVzc2FnZS4gSWYgbm8gKmZtdCogaXMgc3BlY2lmaWVkLAotICAgYGAnJShtZXNzYWdlKXMnYGAgaXMgdXNlZC4gSWYgbm8gKmRhdGVmbXQqIGlzIHNwZWNpZmllZCwgdGhlIElTTzg2MDEgZGF0ZSBmb3JtYXQKLSAgIGlzIHVzZWQuCi0KKyAgIGluaXRpYWxpemVkIHdpdGggYSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgbWVzc2FnZSBhcyBhIHdob2xlLCBhcyB3ZWxsIGFzIGEKKyAgIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBkYXRlL3RpbWUgcG9ydGlvbiBvZiBhIG1lc3NhZ2UuIElmIG5vICpmbXQqIGlzCisgICBzcGVjaWZpZWQsIGBgJyUobWVzc2FnZSlzJ2BgIGlzIHVzZWQuIElmIG5vICpkYXRlZm10KiBpcyBzcGVjaWZpZWQsIHRoZQorICAgSVNPODYwMSBkYXRlIGZvcm1hdCBpcyB1c2VkLgogCiAgICAuLiBtZXRob2Q6OiBmb3JtYXQocmVjb3JkKQogCkBAIC0yNDI4LDcgKzI2NzYsNyBAQAogRmlsdGVyIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tCiAKLUZpbHRlcnMgY2FuIGJlIHVzZWQgYnkgOmNsYXNzOmBIYW5kbGVyYFwgcyBhbmQgOmNsYXNzOmBMb2dnZXJgXCBzIGZvcgorOmNsYXNzOmBGaWx0ZXJgXCBzIGNhbiBiZSB1c2VkIGJ5IDpjbGFzczpgSGFuZGxlcmBcIHMgYW5kIDpjbGFzczpgTG9nZ2VyYFwgcyBmb3IKIG1vcmUgc29waGlzdGljYXRlZCBmaWx0ZXJpbmcgdGhhbiBpcyBwcm92aWRlZCBieSBsZXZlbHMuIFRoZSBiYXNlIGZpbHRlciBjbGFzcwogb25seSBhbGxvd3MgZXZlbnRzIHdoaWNoIGFyZSBiZWxvdyBhIGNlcnRhaW4gcG9pbnQgaW4gdGhlIGxvZ2dlciBoaWVyYXJjaHkuIEZvcgogZXhhbXBsZSwgYSBmaWx0ZXIgaW5pdGlhbGl6ZWQgd2l0aCAiQS5CIiB3aWxsIGFsbG93IGV2ZW50cyBsb2dnZWQgYnkgbG9nZ2VycwpAQCAtMjQ0MCw3ICsyNjg4LDcgQEAKIAogICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBGaWx0ZXJgIGNsYXNzLiBJZiAqbmFtZSogaXMgc3BlY2lmaWVkLCBpdAogICAgbmFtZXMgYSBsb2dnZXIgd2hpY2gsIHRvZ2V0aGVyIHdpdGggaXRzIGNoaWxkcmVuLCB3aWxsIGhhdmUgaXRzIGV2ZW50cyBhbGxvd2VkCi0gICB0aHJvdWdoIHRoZSBmaWx0ZXIuIElmIG5vIG5hbWUgaXMgc3BlY2lmaWVkLCBhbGxvd3MgZXZlcnkgZXZlbnQuCisgICB0aHJvdWdoIHRoZSBmaWx0ZXIuIElmICpuYW1lKiBpcyB0aGUgZW1wdHkgc3RyaW5nLCBhbGxvd3MgZXZlcnkgZXZlbnQuCiAKIAogICAgLi4gbWV0aG9kOjogZmlsdGVyKHJlY29yZCkKQEAgLTI0NDksNDAgKzI2OTcsOTkgQEAKICAgICAgIHllcy4gSWYgZGVlbWVkIGFwcHJvcHJpYXRlLCB0aGUgcmVjb3JkIG1heSBiZSBtb2RpZmllZCBpbi1wbGFjZSBieSB0aGlzCiAgICAgICBtZXRob2QuCiAKK05vdGUgdGhhdCBmaWx0ZXJzIGF0dGFjaGVkIHRvIGhhbmRsZXJzIGFyZSBjb25zdWx0ZWQgd2hlbmV2ZXIgYW4gZXZlbnQgaXMKK2VtaXR0ZWQgYnkgdGhlIGhhbmRsZXIsIHdoZXJlYXMgZmlsdGVycyBhdHRhY2hlZCB0byBsb2dnZXJzIGFyZSBjb25zdWx0ZWQKK3doZW5ldmVyIGFuIGV2ZW50IGlzIGxvZ2dlZCB0byB0aGUgaGFuZGxlciAodXNpbmcgOm1ldGg6YGRlYnVnYCwgOm1ldGg6YGluZm9gLAorZXRjLikgVGhpcyBtZWFucyB0aGF0IGV2ZW50cyB3aGljaCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IGRlc2NlbmRhbnQgbG9nZ2Vycword2lsbCBub3QgYmUgZmlsdGVyZWQgYnkgYSBsb2dnZXIncyBmaWx0ZXIgc2V0dGluZywgdW5sZXNzIHRoZSBmaWx0ZXIgaGFzIGFsc28KK2JlZW4gYXBwbGllZCB0byB0aG9zZSBkZXNjZW5kYW50IGxvZ2dlcnMuCisKK1lvdSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIHN1YmNsYXNzIGBgRmlsdGVyYGA6IHlvdSBjYW4gcGFzcyBhbnkgaW5zdGFuY2UKK3doaWNoIGhhcyBhIGBgZmlsdGVyYGAgbWV0aG9kIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzLgorCitPdGhlciB1c2VzIGZvciBmaWx0ZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0FsdGhvdWdoIGZpbHRlcnMgYXJlIHVzZWQgcHJpbWFyaWx5IHRvIGZpbHRlciByZWNvcmRzIGJhc2VkIG9uIG1vcmUKK3NvcGhpc3RpY2F0ZWQgY3JpdGVyaWEgdGhhbiBsZXZlbHMsIHRoZXkgZ2V0IHRvIHNlZSBldmVyeSByZWNvcmQgd2hpY2ggaXMKK3Byb2Nlc3NlZCBieSB0aGUgaGFuZGxlciBvciBsb2dnZXIgdGhleSdyZSBhdHRhY2hlZCB0bzogdGhpcyBjYW4gYmUgdXNlZnVsIGlmCit5b3Ugd2FudCB0byBkbyB0aGluZ3MgbGlrZSBjb3VudGluZyBob3cgbWFueSByZWNvcmRzIHdlcmUgcHJvY2Vzc2VkIGJ5IGEKK3BhcnRpY3VsYXIgbG9nZ2VyIG9yIGhhbmRsZXIsIG9yIGFkZGluZywgY2hhbmdpbmcgb3IgcmVtb3ZpbmcgYXR0cmlidXRlcyBpbgordGhlIExvZ1JlY29yZCBiZWluZyBwcm9jZXNzZWQuIE9idmlvdXNseSBjaGFuZ2luZyB0aGUgTG9nUmVjb3JkIG5lZWRzIHRvIGJlCitkb25lIHdpdGggc29tZSBjYXJlLCBidXQgaXQgZG9lcyBhbGxvdyB0aGUgaW5qZWN0aW9uIG9mIGNvbnRleHR1YWwgaW5mb3JtYXRpb24KK2ludG8gbG9ncyAoc2VlIDpyZWY6YGZpbHRlcnMtY29udGV4dHVhbGApLgorCiAuLiBfbG9nLXJlY29yZDoKIAogTG9nUmVjb3JkIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLTpjbGFzczpgTG9nUmVjb3JkYCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQgZXZlcnkgdGltZSBzb21ldGhpbmcgaXMgbG9nZ2VkLiBUaGV5Ci1jb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gcGVydGluZW50IHRvIHRoZSBldmVudCBiZWluZyBsb2dnZWQuIFRoZSBtYWluCi1pbmZvcm1hdGlvbiBwYXNzZWQgaW4gaXMgaW4gbXNnIGFuZCBhcmdzLCB3aGljaCBhcmUgY29tYmluZWQgdXNpbmcgbXNnICUgYXJncyB0bwotY3JlYXRlIHRoZSBtZXNzYWdlIGZpZWxkIG9mIHRoZSByZWNvcmQuIFRoZSByZWNvcmQgYWxzbyBpbmNsdWRlcyBpbmZvcm1hdGlvbgotc3VjaCBhcyB3aGVuIHRoZSByZWNvcmQgd2FzIGNyZWF0ZWQsIHRoZSBzb3VyY2UgbGluZSB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcwotbWFkZSwgYW5kIGFueSBleGNlcHRpb24gaW5mb3JtYXRpb24gdG8gYmUgbG9nZ2VkLgorOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlcyBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSA6Y2xhc3M6YExvZ2dlcmAKK2V2ZXJ5IHRpbWUgc29tZXRoaW5nIGlzIGxvZ2dlZCwgYW5kIGNhbiBiZSBjcmVhdGVkIG1hbnVhbGx5IHZpYQorOmZ1bmM6YG1ha2VMb2dSZWNvcmRgIChmb3IgZXhhbXBsZSwgZnJvbSBhIHBpY2tsZWQgZXZlbnQgcmVjZWl2ZWQgb3ZlciB0aGUKK3dpcmUpLgogCiAKLS4uIGNsYXNzOjogTG9nUmVjb3JkKG5hbWUsIGx2bCwgcGF0aG5hbWUsIGxpbmVubywgbXNnLCBhcmdzLCBleGNfaW5mbyBbLCBmdW5jXSkKKy4uIGNsYXNzOjoKKyAgIExvZ1JlY29yZChuYW1lLCBsdmwsIHBhdGhuYW1lLCBsaW5lbm8sIG1zZywgYXJncywgZXhjX2luZm8gWywgZnVuYz1Ob25lXSkKIAotICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YExvZ1JlY29yZGAgaW5pdGlhbGl6ZWQgd2l0aCBpbnRlcmVzdGluZwotICAgaW5mb3JtYXRpb24uIFRoZSAqbmFtZSogaXMgdGhlIGxvZ2dlciBuYW1lOyAqbHZsKiBpcyB0aGUgbnVtZXJpYyBsZXZlbDsKLSAgICpwYXRobmFtZSogaXMgdGhlIGFic29sdXRlIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBpbiB3aGljaCB0aGUgbG9nZ2luZwotICAgY2FsbCB3YXMgbWFkZTsgKmxpbmVubyogaXMgdGhlIGxpbmUgbnVtYmVyIGluIHRoYXQgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZwotICAgY2FsbCBpcyBmb3VuZDsgKm1zZyogaXMgdGhlIHVzZXItc3VwcGxpZWQgbWVzc2FnZSAoYSBmb3JtYXQgc3RyaW5nKTsgKmFyZ3MqCi0gICBpcyB0aGUgdHVwbGUgd2hpY2gsIHRvZ2V0aGVyIHdpdGggKm1zZyosIG1ha2VzIHVwIHRoZSB1c2VyIG1lc3NhZ2U7IGFuZAotICAgKmV4Y19pbmZvKiBpcyB0aGUgZXhjZXB0aW9uIHR1cGxlIG9idGFpbmVkIGJ5IGNhbGxpbmcgOmZ1bmM6YHN5cy5leGNfaW5mb2AKLSAgIChvciA6Y29uc3Q6YE5vbmVgLCBpZiBubyBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlKS4gVGhlICpmdW5jKiBpcwotICAgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIGZyb20gd2hpY2ggdGhlIGxvZ2dpbmcgY2FsbCB3YXMgbWFkZS4gSWYgbm90Ci0gICBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLgorICAgQ29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBwZXJ0aW5lbnQgdG8gdGhlIGV2ZW50IGJlaW5nIGxvZ2dlZC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjUKLSAgICAgICpmdW5jKiB3YXMgYWRkZWQuCisgICBUaGUgcHJpbWFyeSBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgaW4gOmF0dHI6YG1zZ2AgYW5kIDphdHRyOmBhcmdzYCwgd2hpY2gKKyAgIGFyZSBjb21iaW5lZCB1c2luZyBgYG1zZyAlIGFyZ3NgYCB0byBjcmVhdGUgdGhlIDphdHRyOmBtZXNzYWdlYCBmaWVsZCBvZiB0aGUKKyAgIHJlY29yZC4KIAorICAgLi4gYXR0cmlidXRlOjogYXJncworCisgICAgICBUdXBsZSBvZiBhcmd1bWVudHMgdG8gYmUgdXNlZCBpbiBmb3JtYXR0aW5nIDphdHRyOmBtc2dgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBleGNfaW5mbworCisgICAgICBFeGNlcHRpb24gdHVwbGUgKMOgIGxhIGBzeXMuZXhjX2luZm9gKSBvciBgTm9uZWAgaWYgbm8gZXhjZXB0aW9uCisgICAgICBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZ1bmMKKworICAgICAgTmFtZSBvZiB0aGUgZnVuY3Rpb24gb2Ygb3JpZ2luIChpLmUuIGluIHdoaWNoIHRoZSBsb2dnaW5nIGNhbGwgd2FzIG1hZGUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgTGluZSBudW1iZXIgaW4gdGhlIHNvdXJjZSBmaWxlIG9mIG9yaWdpbi4KKworICAgLi4gYXR0cmlidXRlOjogbHZsCisKKyAgICAgIE51bWVyaWMgbG9nZ2luZyBsZXZlbC4KKworICAgLi4gYXR0cmlidXRlOjogbWVzc2FnZQorCisgICAgICBCb3VuZCB0byB0aGUgcmVzdWx0IG9mIDptZXRoOmBnZXRNZXNzYWdlYCB3aGVuCisgICAgICA6bWV0aDpgRm9ybWF0dGVyLmZvcm1hdChyZWNvcmQpPEZvcm1hdHRlci5mb3JtYXQ+YCBpcyBpbnZva2VkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBtc2cKKworICAgICAgVXNlci1zdXBwbGllZCA6cmVmOmBmb3JtYXQgc3RyaW5nPHN0cmluZy1mb3JtYXR0aW5nPmAgb3IgYXJiaXRyYXJ5IG9iamVjdAorICAgICAgKHNlZSA6cmVmOmBhcmJpdHJhcnktb2JqZWN0LW1lc3NhZ2VzYCkgdXNlZCBpbiA6bWV0aDpgZ2V0TWVzc2FnZWAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG5hbWUKKworICAgICAgTmFtZSBvZiB0aGUgbG9nZ2VyIHRoYXQgZW1pdHRlZCB0aGUgcmVjb3JkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwYXRobmFtZQorCisgICAgICBBYnNvbHV0ZSBwYXRobmFtZSBvZiB0aGUgc291cmNlIGZpbGUgb2Ygb3JpZ2luLgogCiAgICAuLiBtZXRob2Q6OiBnZXRNZXNzYWdlKCkKIAogICAgICAgUmV0dXJucyB0aGUgbWVzc2FnZSBmb3IgdGhpcyA6Y2xhc3M6YExvZ1JlY29yZGAgaW5zdGFuY2UgYWZ0ZXIgbWVyZ2luZyBhbnkKLSAgICAgIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzIHdpdGggdGhlIG1lc3NhZ2UuCisgICAgICB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cyB3aXRoIHRoZSBtZXNzYWdlLiBJZiB0aGUgdXNlci1zdXBwbGllZCBtZXNzYWdlCisgICAgICBhcmd1bWVudCB0byB0aGUgbG9nZ2luZyBjYWxsIGlzIG5vdCBhIHN0cmluZywgOmZ1bmM6YHN0cmAgaXMgY2FsbGVkIG9uIGl0IHRvCisgICAgICBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBUaGlzIGFsbG93cyB1c2Ugb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMgYXMKKyAgICAgIG1lc3NhZ2VzLCB3aG9zZSBgYF9fc3RyX19gYCBtZXRob2QgY2FuIHJldHVybiB0aGUgYWN0dWFsIGZvcm1hdCBzdHJpbmcgdG8KKyAgICAgIGJlIHVzZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi41CisgICAgICAqZnVuYyogd2FzIGFkZGVkLgorCiAKIC4uIF9sb2dnZXItYWRhcHRlcjoKIApAQCAtMjQ5MywyMiArMjgwMCwyMSBAQAogCiA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIGluc3RhbmNlcyBhcmUgdXNlZCB0byBjb252ZW5pZW50bHkgcGFzcyBjb250ZXh0dWFsCiBpbmZvcm1hdGlvbiBpbnRvIGxvZ2dpbmcgY2FsbHMuIEZvciBhIHVzYWdlIGV4YW1wbGUgLCBzZWUgdGhlIHNlY3Rpb24gb24KLWBhZGRpbmcgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB5b3VyIGxvZ2dpbmcgb3V0cHV0YF9fLgorOnJlZjpgYWRkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8geW91ciBsb2dnaW5nIG91dHB1dCA8Y29udGV4dC1pbmZvPmAuCiAKLV9fIGNvbnRleHQtaW5mb18KIAogLi4gY2xhc3M6OiBMb2dnZXJBZGFwdGVyKGxvZ2dlciwgZXh0cmEpCiAKLSAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIGluaXRpYWxpemVkIHdpdGggYW4KLSAgdW5kZXJseWluZyA6Y2xhc3M6YExvZ2dlcmAgaW5zdGFuY2UgYW5kIGEgZGljdC1saWtlIG9iamVjdC4KKyAgIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBpbml0aWFsaXplZCB3aXRoIGFuCisgICB1bmRlcmx5aW5nIDpjbGFzczpgTG9nZ2VyYCBpbnN0YW5jZSBhbmQgYSBkaWN0LWxpa2Ugb2JqZWN0LgogCi0gIC4uIG1ldGhvZDo6IHByb2Nlc3MobXNnLCBrd2FyZ3MpCisgICAuLiBtZXRob2Q6OiBwcm9jZXNzKG1zZywga3dhcmdzKQogCi0gICAgTW9kaWZpZXMgdGhlIG1lc3NhZ2UgYW5kL29yIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGxvZ2dpbmcgY2FsbCBpbgotICAgIG9yZGVyIHRvIGluc2VydCBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBUaGlzIGltcGxlbWVudGF0aW9uIHRha2VzIHRoZSBvYmplY3QKLSAgICBwYXNzZWQgYXMgKmV4dHJhKiB0byB0aGUgY29uc3RydWN0b3IgYW5kIGFkZHMgaXQgdG8gKmt3YXJncyogdXNpbmcga2V5Ci0gICAgJ2V4dHJhJy4gVGhlIHJldHVybiB2YWx1ZSBpcyBhICgqbXNnKiwgKmt3YXJncyopIHR1cGxlIHdoaWNoIGhhcyB0aGUKLSAgICAocG9zc2libHkgbW9kaWZpZWQpIHZlcnNpb25zIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkIGluLgorICAgICAgTW9kaWZpZXMgdGhlIG1lc3NhZ2UgYW5kL29yIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGxvZ2dpbmcgY2FsbCBpbgorICAgICAgb3JkZXIgdG8gaW5zZXJ0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIFRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgdGhlIG9iamVjdAorICAgICAgcGFzc2VkIGFzICpleHRyYSogdG8gdGhlIGNvbnN0cnVjdG9yIGFuZCBhZGRzIGl0IHRvICprd2FyZ3MqIHVzaW5nIGtleQorICAgICAgJ2V4dHJhJy4gVGhlIHJldHVybiB2YWx1ZSBpcyBhICgqbXNnKiwgKmt3YXJncyopIHR1cGxlIHdoaWNoIGhhcyB0aGUKKyAgICAgIChwb3NzaWJseSBtb2RpZmllZCkgdmVyc2lvbnMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW4uCiAKIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBzdXBwb3J0cyBhbGwgdGhlIGxvZ2dpbmcKIG1ldGhvZHMgb2YgOmNsYXNzOmBMb2dnZXJgLCBpLmUuIDptZXRoOmBkZWJ1Z2AsIDptZXRoOmBpbmZvYCwgOm1ldGg6YHdhcm5pbmdgLApAQCAtMjUxNiw2ICsyODIyLDExIEBACiBtZXRob2RzIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlcyBhcyB0aGVpciBjb3VudGVycGFydHMgaW4gOmNsYXNzOmBMb2dnZXJgLCBzbwogeW91IGNhbiB1c2UgdGhlIHR3byB0eXBlcyBvZiBpbnN0YW5jZXMgaW50ZXJjaGFuZ2VhYmx5LgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworCitUaGUgOm1ldGg6YGlzRW5hYmxlZEZvcmAgbWV0aG9kIHdhcyBhZGRlZCB0byA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgLiBUaGlzIG1ldGhvZAorZGVsZWdhdGVzIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KKwogCiBUaHJlYWQgU2FmZXR5CiAtLS0tLS0tLS0tLS0tCkBAIC0yNTMwLDYgKzI4NDEsMjggQEAKIGJlY2F1c2UgbG9jayBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIDptb2Q6YHRocmVhZGluZ2AgbW9kdWxlIGFyZSBub3QgYWx3YXlzCiByZS1lbnRyYW50LCBhbmQgc28gY2Fubm90IGJlIGludm9rZWQgZnJvbSBzdWNoIHNpZ25hbCBoYW5kbGVycy4KIAorCitJbnRlZ3JhdGlvbiB3aXRoIHRoZSB3YXJuaW5ncyBtb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGNhcHR1cmVXYXJuaW5nc2AgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZWdyYXRlIDptb2Q6YGxvZ2dpbmdgCit3aXRoIHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlLgorCisuLiBmdW5jdGlvbjo6IGNhcHR1cmVXYXJuaW5ncyhjYXB0dXJlKQorCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHVybiB0aGUgY2FwdHVyZSBvZiB3YXJuaW5ncyBieSBsb2dnaW5nIG9uIGFuZAorICAgb2ZmLgorCisgICBJZiAqY2FwdHVyZSogaXMgYGBUcnVlYGAsIHdhcm5pbmdzIGlzc3VlZCBieSB0aGUgOm1vZDpgd2FybmluZ3NgIG1vZHVsZQorICAgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZSBsb2dnaW5nIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBhIHdhcm5pbmcgd2lsbCBiZQorICAgZm9ybWF0dGVkIHVzaW5nIDpmdW5jOmB3YXJuaW5ncy5mb3JtYXR3YXJuaW5nYCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcKKyAgIGxvZ2dlZCB0byBhIGxvZ2dlciBuYW1lZCAicHkud2FybmluZ3MiIHdpdGggYSBzZXZlcml0eSBvZiBgYFdBUk5JTkdgYC4KKworICAgSWYgKmNhcHR1cmUqIGlzIGBgRmFsc2VgYCwgdGhlIHJlZGlyZWN0aW9uIG9mIHdhcm5pbmdzIHRvIHRoZSBsb2dnaW5nIHN5c3RlbQorICAgd2lsbCBzdG9wLCBhbmQgd2FybmluZ3Mgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZWlyIG9yaWdpbmFsIGRlc3RpbmF0aW9ucworICAgKGkuZS4gdGhvc2UgaW4gZWZmZWN0IGJlZm9yZSBgYGNhcHR1cmVXYXJuaW5ncyhUcnVlKWBgIHdhcyBjYWxsZWQpLgorCisKIENvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0KIApAQCAtMjU0NSwxNiArMjg3OCw1OCBAQAogaW4gOm1vZDpgbG9nZ2luZ2AgaXRzZWxmKSBhbmQgZGVmaW5pbmcgaGFuZGxlcnMgd2hpY2ggYXJlIGRlY2xhcmVkIGVpdGhlciBpbgogOm1vZDpgbG9nZ2luZ2Agb3IgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AuCiAKKy4uIGZ1bmN0aW9uOjogZGljdENvbmZpZyhjb25maWcpCisKKyAgICBUYWtlcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSBkaWN0aW9uYXJ5LiAgVGhlIGNvbnRlbnRzIG9mCisgICAgdGhpcyBkaWN0aW9uYXJ5IGFyZSBkZXNjcmliZWQgaW4gOnJlZjpgbG9nZ2luZy1jb25maWctZGljdHNjaGVtYWAKKyAgICBiZWxvdy4KKworICAgIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIGR1cmluZyBjb25maWd1cmF0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgLCA6ZXhjOmBUeXBlRXJyb3JgLCA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKKyAgICBvciA6ZXhjOmBJbXBvcnRFcnJvcmAgd2l0aCBhIHN1aXRhYmx5IGRlc2NyaXB0aXZlIG1lc3NhZ2UuICBUaGUKKyAgICBmb2xsb3dpbmcgaXMgYSAocG9zc2libHkgaW5jb21wbGV0ZSkgbGlzdCBvZiBjb25kaXRpb25zIHdoaWNoIHdpbGwKKyAgICByYWlzZSBhbiBlcnJvcjoKKworICAgICogQSBgYGxldmVsYGAgd2hpY2ggaXMgbm90IGEgc3RyaW5nIG9yIHdoaWNoIGlzIGEgc3RyaW5nIG5vdAorICAgICAgY29ycmVzcG9uZGluZyB0byBhbiBhY3R1YWwgbG9nZ2luZyBsZXZlbC4KKyAgICAqIEEgYGBwcm9wYWdhdGVgYCB2YWx1ZSB3aGljaCBpcyBub3QgYSBib29sZWFuLgorICAgICogQW4gaWQgd2hpY2ggZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZGVzdGluYXRpb24uCisgICAgKiBBIG5vbi1leGlzdGVudCBoYW5kbGVyIGlkIGZvdW5kIGR1cmluZyBhbiBpbmNyZW1lbnRhbCBjYWxsLgorICAgICogQW4gaW52YWxpZCBsb2dnZXIgbmFtZS4KKyAgICAqIEluYWJpbGl0eSB0byByZXNvbHZlIHRvIGFuIGludGVybmFsIG9yIGV4dGVybmFsIG9iamVjdC4KKworICAgIFBhcnNpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoZSA6Y2xhc3M6YERpY3RDb25maWd1cmF0b3JgIGNsYXNzLCB3aG9zZQorICAgIGNvbnN0cnVjdG9yIGlzIHBhc3NlZCB0aGUgZGljdGlvbmFyeSB1c2VkIGZvciBjb25maWd1cmF0aW9uLCBhbmQKKyAgICBoYXMgYSA6bWV0aDpgY29uZmlndXJlYCBtZXRob2QuICBUaGUgOm1vZDpgbG9nZ2luZy5jb25maWdgIG1vZHVsZQorICAgIGhhcyBhIGNhbGxhYmxlIGF0dHJpYnV0ZSA6YXR0cjpgZGljdENvbmZpZ0NsYXNzYAorICAgIHdoaWNoIGlzIGluaXRpYWxseSBzZXQgdG8gOmNsYXNzOmBEaWN0Q29uZmlndXJhdG9yYC4KKyAgICBZb3UgY2FuIHJlcGxhY2UgdGhlIHZhbHVlIG9mIDphdHRyOmBkaWN0Q29uZmlnQ2xhc3NgIHdpdGggYQorICAgIHN1aXRhYmxlIGltcGxlbWVudGF0aW9uIG9mIHlvdXIgb3duLgorCisgICAgOmZ1bmM6YGRpY3RDb25maWdgIGNhbGxzIDphdHRyOmBkaWN0Q29uZmlnQ2xhc3NgIHBhc3NpbmcKKyAgICB0aGUgc3BlY2lmaWVkIGRpY3Rpb25hcnksIGFuZCB0aGVuIGNhbGxzIHRoZSA6bWV0aDpgY29uZmlndXJlYCBtZXRob2Qgb24KKyAgICB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIHB1dCB0aGUgY29uZmlndXJhdGlvbiBpbnRvIGVmZmVjdDo6CisKKyAgICAgICAgICBkZWYgZGljdENvbmZpZyhjb25maWcpOgorICAgICAgICAgICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQorCisgICAgRm9yIGV4YW1wbGUsIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBEaWN0Q29uZmlndXJhdG9yYCBjb3VsZCBjYWxsCisgICAgYGBEaWN0Q29uZmlndXJhdG9yLl9faW5pdF9fKClgYCBpbiBpdHMgb3duIDptZXRoOmBfX2luaXRfXygpYCwgdGhlbgorICAgIHNldCB1cCBjdXN0b20gcHJlZml4ZXMgd2hpY2ggd291bGQgYmUgdXNhYmxlIGluIHRoZSBzdWJzZXF1ZW50CisgICAgOm1ldGg6YGNvbmZpZ3VyZWAgY2FsbC4gOmF0dHI6YGRpY3RDb25maWdDbGFzc2Agd291bGQgYmUgYm91bmQgdG8KKyAgICB0aGlzIG5ldyBzdWJjbGFzcywgYW5kIHRoZW4gOmZ1bmM6YGRpY3RDb25maWdgIGNvdWxkIGJlIGNhbGxlZCBleGFjdGx5IGFzCisgICAgaW4gdGhlIGRlZmF1bHQsIHVuY3VzdG9taXplZCBzdGF0ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIC4uIGZ1bmN0aW9uOjogZmlsZUNvbmZpZyhmbmFtZVssIGRlZmF1bHRzXSkKIAotICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgQ29uZmlnUGFyc2VyLWZvcm1hdCBmaWxlIG5hbWVkICpmbmFtZSouCi0gICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbiBlbmQKLSAgIHVzZXIgdGhlIGFiaWxpdHkgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUKLSAgIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KLSAgIGNvbmZpZ3VyYXRpb24pLiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gQ29uZmlnUGFyc2VyIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlCi0gICAqZGVmYXVsdHMqIGFyZ3VtZW50LgotCisgICBSZWFkcyB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZyb20gYSA6bW9kOmBDb25maWdQYXJzZXJgXC1mb3JtYXQgZmlsZSBuYW1lZAorICAgKmZuYW1lKi4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiwKKyAgIGFsbG93aW5nIGFuIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZAorICAgY29uZmlndXJhdGlvbnMgKGlmIHRoZSBkZXZlbG9wZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcworICAgYW5kIGxvYWQgdGhlIGNob3NlbiBjb25maWd1cmF0aW9uKS4gRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIKKyAgIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlICpkZWZhdWx0cyogYXJndW1lbnQuCiAKIC4uIGZ1bmN0aW9uOjogbGlzdGVuKFtwb3J0XSkKIApAQCAtMjU3OCw2ICsyOTUzLDQwMiBAQAogICAgOmZ1bmM6YGxpc3RlbmAuCiAKIAorLi4gX2xvZ2dpbmctY29uZmlnLWRpY3RzY2hlbWE6CisKK0NvbmZpZ3VyYXRpb24gZGljdGlvbmFyeSBzY2hlbWEKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRGVzY3JpYmluZyBhIGxvZ2dpbmcgY29uZmlndXJhdGlvbiByZXF1aXJlcyBsaXN0aW5nIHRoZSB2YXJpb3VzCitvYmplY3RzIHRvIGNyZWF0ZSBhbmQgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlbTsgZm9yIGV4YW1wbGUsIHlvdQorbWF5IGNyZWF0ZSBhIGhhbmRsZXIgbmFtZWQgImNvbnNvbGUiIGFuZCB0aGVuIHNheSB0aGF0IHRoZSBsb2dnZXIKK25hbWVkICJzdGFydHVwIiB3aWxsIHNlbmQgaXRzIG1lc3NhZ2VzIHRvIHRoZSAiY29uc29sZSIgaGFuZGxlci4KK1RoZXNlIG9iamVjdHMgYXJlbid0IGxpbWl0ZWQgdG8gdGhvc2UgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YGxvZ2dpbmdgCittb2R1bGUgYmVjYXVzZSB5b3UgbWlnaHQgd3JpdGUgeW91ciBvd24gZm9ybWF0dGVyIG9yIGhhbmRsZXIgY2xhc3MuCitUaGUgcGFyYW1ldGVycyB0byB0aGVzZSBjbGFzc2VzIG1heSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBleHRlcm5hbAorb2JqZWN0cyBzdWNoIGFzIGBgc3lzLnN0ZGVycmBgLiAgVGhlIHN5bnRheCBmb3IgZGVzY3JpYmluZyB0aGVzZQorb2JqZWN0cyBhbmQgY29ubmVjdGlvbnMgaXMgZGVmaW5lZCBpbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zYAorYmVsb3cuCisKK0RpY3Rpb25hcnkgU2NoZW1hIERldGFpbHMKKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIGRpY3Rpb25hcnkgcGFzc2VkIHRvIDpmdW5jOmBkaWN0Q29uZmlnYCBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZwora2V5czoKKworKiBgdmVyc2lvbmAgLSB0byBiZSBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHNjaGVtYQorICB2ZXJzaW9uLiAgVGhlIG9ubHkgdmFsaWQgdmFsdWUgYXQgcHJlc2VudCBpcyAxLCBidXQgaGF2aW5nIHRoaXMga2V5CisgIGFsbG93cyB0aGUgc2NoZW1hIHRvIGV2b2x2ZSB3aGlsZSBzdGlsbCBwcmVzZXJ2aW5nIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5LgorCitBbGwgb3RoZXIga2V5cyBhcmUgb3B0aW9uYWwsIGJ1dCBpZiBwcmVzZW50IHRoZXkgd2lsbCBiZSBpbnRlcnByZXRlZAorYXMgZGVzY3JpYmVkIGJlbG93LiAgSW4gYWxsIGNhc2VzIGJlbG93IHdoZXJlIGEgJ2NvbmZpZ3VyaW5nIGRpY3QnIGlzCittZW50aW9uZWQsIGl0IHdpbGwgYmUgY2hlY2tlZCBmb3IgdGhlIHNwZWNpYWwgYGAnKCknYGAga2V5IHRvIHNlZSBpZiBhCitjdXN0b20gaW5zdGFudGlhdGlvbiBpcyByZXF1aXJlZC4gIElmIHNvLCB0aGUgbWVjaGFuaXNtIGRlc2NyaWJlZCBpbgorOnJlZjpgbG9nZ2luZy1jb25maWctZGljdC11c2VyZGVmYCBiZWxvdyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZTsKK290aGVyd2lzZSwgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0byBpbnN0YW50aWF0ZS4KKworKiBgZm9ybWF0dGVyc2AgLSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIGEgZGljdCBpbiB3aGljaCBlYWNoCisgIGtleSBpcyBhIGZvcm1hdHRlciBpZCBhbmQgZWFjaCB2YWx1ZSBpcyBhIGRpY3QgZGVzY3JpYmluZyBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIEZvcm1hdHRlciBpbnN0YW5jZS4KKworICBUaGUgY29uZmlndXJpbmcgZGljdCBpcyBzZWFyY2hlZCBmb3Iga2V5cyBgYGZvcm1hdGBgIGFuZCBgYGRhdGVmbXRgYAorICAod2l0aCBkZWZhdWx0cyBvZiBgYE5vbmVgYCkgYW5kIHRoZXNlIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhCisgIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluc3RhbmNlLgorCisqIGBmaWx0ZXJzYCAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gga2V5CisgIGlzIGEgZmlsdGVyIGlkIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0byBjb25maWd1cmUKKyAgdGhlIGNvcnJlc3BvbmRpbmcgRmlsdGVyIGluc3RhbmNlLgorCisgIFRoZSBjb25maWd1cmluZyBkaWN0IGlzIHNlYXJjaGVkIGZvciB0aGUga2V5IGBgbmFtZWBgIChkZWZhdWx0aW5nIHRvIHRoZQorICBlbXB0eSBzdHJpbmcpIGFuZCB0aGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IGEgOmNsYXNzOmBsb2dnaW5nLkZpbHRlcmAKKyAgaW5zdGFuY2UuCisKKyogYGhhbmRsZXJzYCAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gKKyAga2V5IGlzIGEgaGFuZGxlciBpZCBhbmQgZWFjaCB2YWx1ZSBpcyBhIGRpY3QgZGVzY3JpYmluZyBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIEhhbmRsZXIgaW5zdGFuY2UuCisKKyAgVGhlIGNvbmZpZ3VyaW5nIGRpY3QgaXMgc2VhcmNoZWQgZm9yIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAqIGBgY2xhc3NgYCAobWFuZGF0b3J5KS4gIFRoaXMgaXMgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQorICAgIGhhbmRsZXIgY2xhc3MuCisKKyAgKiBgYGxldmVsYGAgKG9wdGlvbmFsKS4gIFRoZSBsZXZlbCBvZiB0aGUgaGFuZGxlci4KKworICAqIGBgZm9ybWF0dGVyYGAgKG9wdGlvbmFsKS4gIFRoZSBpZCBvZiB0aGUgZm9ybWF0dGVyIGZvciB0aGlzCisgICAgaGFuZGxlci4KKworICAqIGBgZmlsdGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGlzCisgICAgaGFuZGxlci4KKworICBBbGwgKm90aGVyKiBrZXlzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcyBrZXl3b3JkIGFyZ3VtZW50cyB0byB0aGUKKyAgaGFuZGxlcidzIGNvbnN0cnVjdG9yLiAgRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBzbmlwcGV0OjoKKworICAgICAgaGFuZGxlcnM6CisgICAgICAgIGNvbnNvbGU6CisgICAgICAgICAgY2xhc3MgOiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIKKyAgICAgICAgICBmb3JtYXR0ZXI6IGJyaWVmCisgICAgICAgICAgbGV2ZWwgICA6IElORk8KKyAgICAgICAgICBmaWx0ZXJzOiBbYWxsb3dfZm9vXQorICAgICAgICAgIHN0cmVhbSAgOiBleHQ6Ly9zeXMuc3Rkb3V0CisgICAgICAgIGZpbGU6CisgICAgICAgICAgY2xhc3MgOiBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIKKyAgICAgICAgICBmb3JtYXR0ZXI6IHByZWNpc2UKKyAgICAgICAgICBmaWxlbmFtZTogbG9nY29uZmlnLmxvZworICAgICAgICAgIG1heEJ5dGVzOiAxMDI0CisgICAgICAgICAgYmFja3VwQ291bnQ6IDMKKworICB0aGUgaGFuZGxlciB3aXRoIGlkIGBgY29uc29sZWBgIGlzIGluc3RhbnRpYXRlZCBhcyBhCisgIDpjbGFzczpgbG9nZ2luZy5TdHJlYW1IYW5kbGVyYCwgdXNpbmcgYGBzeXMuc3Rkb3V0YGAgYXMgdGhlIHVuZGVybHlpbmcKKyAgc3RyZWFtLiAgVGhlIGhhbmRsZXIgd2l0aCBpZCBgYGZpbGVgYCBpcyBpbnN0YW50aWF0ZWQgYXMgYQorICA6Y2xhc3M6YGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcmAgd2l0aCB0aGUga2V5d29yZCBhcmd1bWVudHMKKyAgYGBmaWxlbmFtZT0nbG9nY29uZmlnLmxvZycsIG1heEJ5dGVzPTEwMjQsIGJhY2t1cENvdW50PTNgYC4KKworKiBgbG9nZ2Vyc2AgLSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIGEgZGljdCBpbiB3aGljaCBlYWNoIGtleQorICBpcyBhIGxvZ2dlciBuYW1lIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0bworICBjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgTG9nZ2VyIGluc3RhbmNlLgorCisgIFRoZSBjb25maWd1cmluZyBkaWN0IGlzIHNlYXJjaGVkIGZvciB0aGUgZm9sbG93aW5nIGtleXM6CisKKyAgKiBgYGxldmVsYGAgKG9wdGlvbmFsKS4gIFRoZSBsZXZlbCBvZiB0aGUgbG9nZ2VyLgorCisgICogYGBwcm9wYWdhdGVgYCAob3B0aW9uYWwpLiAgVGhlIHByb3BhZ2F0aW9uIHNldHRpbmcgb2YgdGhlIGxvZ2dlci4KKworICAqIGBgZmlsdGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGlzCisgICAgbG9nZ2VyLgorCisgICogYGBoYW5kbGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBoYW5kbGVycyBmb3IgdGhpcworICAgIGxvZ2dlci4KKworICBUaGUgc3BlY2lmaWVkIGxvZ2dlcnMgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgbGV2ZWwsCisgIHByb3BhZ2F0aW9uLCBmaWx0ZXJzIGFuZCBoYW5kbGVycyBzcGVjaWZpZWQuCisKKyogYHJvb3RgIC0gdGhpcyB3aWxsIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcm9vdCBsb2dnZXIuCisgIFByb2Nlc3Npbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBhcyBmb3IgYW55IGxvZ2dlciwgZXhjZXB0CisgIHRoYXQgdGhlIGBgcHJvcGFnYXRlYGAgc2V0dGluZyB3aWxsIG5vdCBiZSBhcHBsaWNhYmxlLgorCisqIGBpbmNyZW1lbnRhbGAgLSB3aGV0aGVyIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGludGVycHJldGVkIGFzCisgIGluY3JlbWVudGFsIHRvIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLiAgVGhpcyB2YWx1ZSBkZWZhdWx0cyB0bworICBgYEZhbHNlYGAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHJlcGxhY2VzIHRoZQorICBleGlzdGluZyBjb25maWd1cmF0aW9uIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzIGFzIHVzZWQgYnkgdGhlCisgIGV4aXN0aW5nIDpmdW5jOmBmaWxlQ29uZmlnYCBBUEkuCisKKyAgSWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBgYFRydWVgYCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcHJvY2Vzc2VkCisgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBvbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0LWluY3JlbWVudGFsYC4KKworKiBgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzYCAtIHdoZXRoZXIgYW55IGV4aXN0aW5nIGxvZ2dlcnMgYXJlIHRvIGJlCisgIGRpc2FibGVkLiBUaGlzIHNldHRpbmcgbWlycm9ycyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBzYW1lIG5hbWUgaW4KKyAgOmZ1bmM6YGZpbGVDb25maWdgLiBJZiBhYnNlbnQsIHRoaXMgcGFyYW1ldGVyIGRlZmF1bHRzIHRvIGBgVHJ1ZWBgLgorICBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYGluY3JlbWVudGFsYCBpcyBgYFRydWVgYC4KKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWw6CisKK0luY3JlbWVudGFsIENvbmZpZ3VyYXRpb24KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworSXQgaXMgZGlmZmljdWx0IHRvIHByb3ZpZGUgY29tcGxldGUgZmxleGliaWxpdHkgZm9yIGluY3JlbWVudGFsCitjb25maWd1cmF0aW9uLiAgRm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2JqZWN0cyBzdWNoIGFzIGZpbHRlcnMKK2FuZCBmb3JtYXR0ZXJzIGFyZSBhbm9ueW1vdXMsIG9uY2UgYSBjb25maWd1cmF0aW9uIGlzIHNldCB1cCwgaXQgaXMKK25vdCBwb3NzaWJsZSB0byByZWZlciB0byBzdWNoIGFub255bW91cyBvYmplY3RzIHdoZW4gYXVnbWVudGluZyBhCitjb25maWd1cmF0aW9uLgorCitGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm90IGEgY29tcGVsbGluZyBjYXNlIGZvciBhcmJpdHJhcmlseSBhbHRlcmluZwordGhlIG9iamVjdCBncmFwaCBvZiBsb2dnZXJzLCBoYW5kbGVycywgZmlsdGVycywgZm9ybWF0dGVycyBhdAorcnVuLXRpbWUsIG9uY2UgYSBjb25maWd1cmF0aW9uIGlzIHNldCB1cDsgdGhlIHZlcmJvc2l0eSBvZiBsb2dnZXJzIGFuZAoraGFuZGxlcnMgY2FuIGJlIGNvbnRyb2xsZWQganVzdCBieSBzZXR0aW5nIGxldmVscyAoYW5kLCBpbiB0aGUgY2FzZSBvZgorbG9nZ2VycywgcHJvcGFnYXRpb24gZmxhZ3MpLiAgQ2hhbmdpbmcgdGhlIG9iamVjdCBncmFwaCBhcmJpdHJhcmlseSBpbgorYSBzYWZlIHdheSBpcyBwcm9ibGVtYXRpYyBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50OyB3aGlsZSBub3QKK2ltcG9zc2libGUsIHRoZSBiZW5lZml0cyBhcmUgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5IGl0IGFkZHMgdG8gdGhlCitpbXBsZW1lbnRhdGlvbi4KKworVGh1cywgd2hlbiB0aGUgYGBpbmNyZW1lbnRhbGBgIGtleSBvZiBhIGNvbmZpZ3VyYXRpb24gZGljdCBpcyBwcmVzZW50CithbmQgaXMgYGBUcnVlYGAsIHRoZSBzeXN0ZW0gd2lsbCBjb21wbGV0ZWx5IGlnbm9yZSBhbnkgYGBmb3JtYXR0ZXJzYGAgYW5kCitgYGZpbHRlcnNgYCBlbnRyaWVzLCBhbmQgcHJvY2VzcyBvbmx5IHRoZSBgYGxldmVsYGAKK3NldHRpbmdzIGluIHRoZSBgYGhhbmRsZXJzYGAgZW50cmllcywgYW5kIHRoZSBgYGxldmVsYGAgYW5kCitgYHByb3BhZ2F0ZWBgIHNldHRpbmdzIGluIHRoZSBgYGxvZ2dlcnNgYCBhbmQgYGByb290YGAgZW50cmllcy4KKworVXNpbmcgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBkaWN0IGxldHMgY29uZmlndXJhdGlvbnMgdG8gYmUgc2VudAorb3ZlciB0aGUgd2lyZSBhcyBwaWNrbGVkIGRpY3RzIHRvIGEgc29ja2V0IGxpc3RlbmVyLiBUaHVzLCB0aGUgbG9nZ2luZwordmVyYm9zaXR5IG9mIGEgbG9uZy1ydW5uaW5nIGFwcGxpY2F0aW9uIGNhbiBiZSBhbHRlcmVkIG92ZXIgdGltZSB3aXRoCitubyBuZWVkIHRvIHN0b3AgYW5kIHJlc3RhcnQgdGhlIGFwcGxpY2F0aW9uLgorCisuLiBfbG9nZ2luZy1jb25maWctZGljdC1jb25uZWN0aW9uczoKKworT2JqZWN0IGNvbm5lY3Rpb25zCisiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIHNjaGVtYSBkZXNjcmliZXMgYSBzZXQgb2YgbG9nZ2luZyBvYmplY3RzIC0gbG9nZ2VycywKK2hhbmRsZXJzLCBmb3JtYXR0ZXJzLCBmaWx0ZXJzIC0gd2hpY2ggYXJlIGNvbm5lY3RlZCB0byBlYWNoIG90aGVyIGluCithbiBvYmplY3QgZ3JhcGguICBUaHVzLCB0aGUgc2NoZW1hIG5lZWRzIHRvIHJlcHJlc2VudCBjb25uZWN0aW9ucworYmV0d2VlbiB0aGUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBzYXkgdGhhdCwgb25jZSBjb25maWd1cmVkLCBhCitwYXJ0aWN1bGFyIGxvZ2dlciBoYXMgYXR0YWNoZWQgdG8gaXQgYSBwYXJ0aWN1bGFyIGhhbmRsZXIuICBGb3IgdGhlCitwdXJwb3NlcyBvZiB0aGlzIGRpc2N1c3Npb24sIHdlIGNhbiBzYXkgdGhhdCB0aGUgbG9nZ2VyIHJlcHJlc2VudHMgdGhlCitzb3VyY2UsIGFuZCB0aGUgaGFuZGxlciB0aGUgZGVzdGluYXRpb24sIG9mIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZQordHdvLiAgT2YgY291cnNlIGluIHRoZSBjb25maWd1cmVkIG9iamVjdHMgdGhpcyBpcyByZXByZXNlbnRlZCBieSB0aGUKK2xvZ2dlciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyLiAgSW4gdGhlIGNvbmZpZ3VyYXRpb24gZGljdCwKK3RoaXMgaXMgZG9uZSBieSBnaXZpbmcgZWFjaCBkZXN0aW5hdGlvbiBvYmplY3QgYW4gaWQgd2hpY2ggaWRlbnRpZmllcworaXQgdW5hbWJpZ3VvdXNseSwgYW5kIHRoZW4gdXNpbmcgdGhlIGlkIGluIHRoZSBzb3VyY2Ugb2JqZWN0J3MKK2NvbmZpZ3VyYXRpb24gdG8gaW5kaWNhdGUgdGhhdCBhIGNvbm5lY3Rpb24gZXhpc3RzIGJldHdlZW4gdGhlIHNvdXJjZQorYW5kIHRoZSBkZXN0aW5hdGlvbiBvYmplY3Qgd2l0aCB0aGF0IGlkLgorCitTbywgZm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgWUFNTCBzbmlwcGV0OjoKKworICAgIGZvcm1hdHRlcnM6CisgICAgICBicmllZjoKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGZvciBmb3JtYXR0ZXIgd2l0aCBpZCAnYnJpZWYnIGdvZXMgaGVyZQorICAgICAgcHJlY2lzZToKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGZvciBmb3JtYXR0ZXIgd2l0aCBpZCAncHJlY2lzZScgZ29lcyBoZXJlCisgICAgaGFuZGxlcnM6CisgICAgICBoMTogI1RoaXMgaXMgYW4gaWQKKyAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgaGFuZGxlciB3aXRoIGlkICdoMScgZ29lcyBoZXJlCisgICAgICAgZm9ybWF0dGVyOiBicmllZgorICAgICAgaDI6ICNUaGlzIGlzIGFub3RoZXIgaWQKKyAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgaGFuZGxlciB3aXRoIGlkICdoMicgZ29lcyBoZXJlCisgICAgICAgZm9ybWF0dGVyOiBwcmVjaXNlCisgICAgbG9nZ2VyczoKKyAgICAgIGZvby5iYXIuYmF6OgorICAgICAgICAjIG90aGVyIGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dlciAnZm9vLmJhci5iYXonCisgICAgICAgIGhhbmRsZXJzOiBbaDEsIGgyXQorCisoTm90ZTogWUFNTCB1c2VkIGhlcmUgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUgdGhhbiB0aGUKK2VxdWl2YWxlbnQgUHl0aG9uIHNvdXJjZSBmb3JtIGZvciB0aGUgZGljdGlvbmFyeS4pCisKK1RoZSBpZHMgZm9yIGxvZ2dlcnMgYXJlIHRoZSBsb2dnZXIgbmFtZXMgd2hpY2ggd291bGQgYmUgdXNlZAorcHJvZ3JhbW1hdGljYWxseSB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhvc2UgbG9nZ2VycywgZS5nLgorYGBmb28uYmFyLmJhemBgLiAgVGhlIGlkcyBmb3IgRm9ybWF0dGVycyBhbmQgRmlsdGVycyBjYW4gYmUgYW55IHN0cmluZwordmFsdWUgKHN1Y2ggYXMgYGBicmllZmBgLCBgYHByZWNpc2VgYCBhYm92ZSkgYW5kIHRoZXkgYXJlIHRyYW5zaWVudCwKK2luIHRoYXQgdGhleSBhcmUgb25seSBtZWFuaW5nZnVsIGZvciBwcm9jZXNzaW5nIHRoZSBjb25maWd1cmF0aW9uCitkaWN0aW9uYXJ5IGFuZCB1c2VkIHRvIGRldGVybWluZSBjb25uZWN0aW9ucyBiZXR3ZWVuIG9iamVjdHMsIGFuZCBhcmUKK25vdCBwZXJzaXN0ZWQgYW55d2hlcmUgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBjYWxsIGlzIGNvbXBsZXRlLgorCitUaGUgYWJvdmUgc25pcHBldCBpbmRpY2F0ZXMgdGhhdCBsb2dnZXIgbmFtZWQgYGBmb28uYmFyLmJhemBgIHNob3VsZAoraGF2ZSB0d28gaGFuZGxlcnMgYXR0YWNoZWQgdG8gaXQsIHdoaWNoIGFyZSBkZXNjcmliZWQgYnkgdGhlIGhhbmRsZXIKK2lkcyBgYGgxYGAgYW5kIGBgaDJgYC4gVGhlIGZvcm1hdHRlciBmb3IgYGBoMWBgIGlzIHRoYXQgZGVzY3JpYmVkIGJ5IGlkCitgYGJyaWVmYGAsIGFuZCB0aGUgZm9ybWF0dGVyIGZvciBgYGgyYGAgaXMgdGhhdCBkZXNjcmliZWQgYnkgaWQKK2BgcHJlY2lzZWBgLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LXVzZXJkZWY6CisKK1VzZXItZGVmaW5lZCBvYmplY3RzCisiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgc2NoZW1hIHN1cHBvcnRzIHVzZXItZGVmaW5lZCBvYmplY3RzIGZvciBoYW5kbGVycywgZmlsdGVycyBhbmQKK2Zvcm1hdHRlcnMuICAoTG9nZ2VycyBkbyBub3QgbmVlZCB0byBoYXZlIGRpZmZlcmVudCB0eXBlcyBmb3IKK2RpZmZlcmVudCBpbnN0YW5jZXMsIHNvIHRoZXJlIGlzIG5vIHN1cHBvcnQgaW4gdGhpcyBjb25maWd1cmF0aW9uCitzY2hlbWEgZm9yIHVzZXItZGVmaW5lZCBsb2dnZXIgY2xhc3Nlcy4pCisKK09iamVjdHMgdG8gYmUgY29uZmlndXJlZCBhcmUgZGVzY3JpYmVkIGJ5IGRpY3Rpb25hcmllcword2hpY2ggZGV0YWlsIHRoZWlyIGNvbmZpZ3VyYXRpb24uICBJbiBzb21lIHBsYWNlcywgdGhlIGxvZ2dpbmcgc3lzdGVtCit3aWxsIGJlIGFibGUgdG8gaW5mZXIgZnJvbSB0aGUgY29udGV4dCBob3cgYW4gb2JqZWN0IGlzIHRvIGJlCitpbnN0YW50aWF0ZWQsIGJ1dCB3aGVuIGEgdXNlci1kZWZpbmVkIG9iamVjdCBpcyB0byBiZSBpbnN0YW50aWF0ZWQsCit0aGUgc3lzdGVtIHdpbGwgbm90IGtub3cgaG93IHRvIGRvIHRoaXMuICBJbiBvcmRlciB0byBwcm92aWRlIGNvbXBsZXRlCitmbGV4aWJpbGl0eSBmb3IgdXNlci1kZWZpbmVkIG9iamVjdCBpbnN0YW50aWF0aW9uLCB0aGUgdXNlciBuZWVkcwordG8gcHJvdmlkZSBhICdmYWN0b3J5JyAtIGEgY2FsbGFibGUgd2hpY2ggaXMgY2FsbGVkIHdpdGggYQorY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IGFuZCB3aGljaCByZXR1cm5zIHRoZSBpbnN0YW50aWF0ZWQgb2JqZWN0LgorVGhpcyBpcyBzaWduYWxsZWQgYnkgYW4gYWJzb2x1dGUgaW1wb3J0IHBhdGggdG8gdGhlIGZhY3RvcnkgYmVpbmcKK21hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBzcGVjaWFsIGtleSBgYCcoKSdgYC4gIEhlcmUncyBhIGNvbmNyZXRlCitleGFtcGxlOjoKKworICAgIGZvcm1hdHRlcnM6CisgICAgICBicmllZjoKKyAgICAgICAgZm9ybWF0OiAnJShtZXNzYWdlKXMnCisgICAgICBkZWZhdWx0OgorICAgICAgICBmb3JtYXQ6ICclKGFzY3RpbWUpcyAlKGxldmVsbmFtZSktOHMgJShuYW1lKS0xNXMgJShtZXNzYWdlKXMnCisgICAgICAgIGRhdGVmbXQ6ICclWS0lbS0lZCAlSDolTTolUycKKyAgICAgIGN1c3RvbToKKyAgICAgICAgICAoKTogbXkucGFja2FnZS5jdXN0b21Gb3JtYXR0ZXJGYWN0b3J5CisgICAgICAgICAgYmFyOiBiYXoKKyAgICAgICAgICBzcGFtOiA5OS45CisgICAgICAgICAgYW5zd2VyOiA0MgorCitUaGUgYWJvdmUgWUFNTCBzbmlwcGV0IGRlZmluZXMgdGhyZWUgZm9ybWF0dGVycy4gIFRoZSBmaXJzdCwgd2l0aCBpZAorYGBicmllZmBgLCBpcyBhIHN0YW5kYXJkIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluc3RhbmNlIHdpdGggdGhlCitzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gIFRoZSBzZWNvbmQsIHdpdGggaWQgYGBkZWZhdWx0YGAsIGhhcyBhCitsb25nZXIgZm9ybWF0IGFuZCBhbHNvIGRlZmluZXMgdGhlIHRpbWUgZm9ybWF0IGV4cGxpY2l0bHksIGFuZCB3aWxsCityZXN1bHQgaW4gYSA6Y2xhc3M6YGxvZ2dpbmcuRm9ybWF0dGVyYCBpbml0aWFsaXplZCB3aXRoIHRob3NlIHR3byBmb3JtYXQKK3N0cmluZ3MuICBTaG93biBpbiBQeXRob24gc291cmNlIGZvcm0sIHRoZSBgYGJyaWVmYGAgYW5kIGBgZGVmYXVsdGBgCitmb3JtYXR0ZXJzIGhhdmUgY29uZmlndXJhdGlvbiBzdWItZGljdGlvbmFyaWVzOjoKKworICAgIHsKKyAgICAgICdmb3JtYXQnIDogJyUobWVzc2FnZSlzJworICAgIH0KKworYW5kOjoKKworICAgIHsKKyAgICAgICdmb3JtYXQnIDogJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS04cyAlKG5hbWUpLTE1cyAlKG1lc3NhZ2UpcycsCisgICAgICAnZGF0ZWZtdCcgOiAnJVktJW0tJWQgJUg6JU06JVMnCisgICAgfQorCityZXNwZWN0aXZlbHksIGFuZCBhcyB0aGVzZSBkaWN0aW9uYXJpZXMgZG8gbm90IGNvbnRhaW4gdGhlIHNwZWNpYWwga2V5CitgYCcoKSdgYCwgdGhlIGluc3RhbnRpYXRpb24gaXMgaW5mZXJyZWQgZnJvbSB0aGUgY29udGV4dDogYXMgYSByZXN1bHQsCitzdGFuZGFyZCA6Y2xhc3M6YGxvZ2dpbmcuRm9ybWF0dGVyYCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuICBUaGUKK2NvbmZpZ3VyYXRpb24gc3ViLWRpY3Rpb25hcnkgZm9yIHRoZSB0aGlyZCBmb3JtYXR0ZXIsIHdpdGggaWQKK2BgY3VzdG9tYGAsIGlzOjoKKworICB7CisgICAgJygpJyA6ICdteS5wYWNrYWdlLmN1c3RvbUZvcm1hdHRlckZhY3RvcnknLAorICAgICdiYXInIDogJ2JheicsCisgICAgJ3NwYW0nIDogOTkuOSwKKyAgICAnYW5zd2VyJyA6IDQyCisgIH0KKworYW5kIHRoaXMgY29udGFpbnMgdGhlIHNwZWNpYWwga2V5IGBgJygpJ2BgLCB3aGljaCBtZWFucyB0aGF0Cit1c2VyLWRlZmluZWQgaW5zdGFudGlhdGlvbiBpcyB3YW50ZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBzcGVjaWZpZWQKK2ZhY3RvcnkgY2FsbGFibGUgd2lsbCBiZSB1c2VkLiBJZiBpdCBpcyBhbiBhY3R1YWwgY2FsbGFibGUgaXQgd2lsbCBiZQordXNlZCBkaXJlY3RseSAtIG90aGVyd2lzZSwgaWYgeW91IHNwZWNpZnkgYSBzdHJpbmcgKGFzIGluIHRoZSBleGFtcGxlKQordGhlIGFjdHVhbCBjYWxsYWJsZSB3aWxsIGJlIGxvY2F0ZWQgdXNpbmcgbm9ybWFsIGltcG9ydCBtZWNoYW5pc21zLgorVGhlIGNhbGxhYmxlIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlICoqcmVtYWluaW5nKiogaXRlbXMgaW4gdGhlCitjb25maWd1cmF0aW9uIHN1Yi1kaWN0aW9uYXJ5IGFzIGtleXdvcmQgYXJndW1lbnRzLiAgSW4gdGhlIGFib3ZlCitleGFtcGxlLCB0aGUgZm9ybWF0dGVyIHdpdGggaWQgYGBjdXN0b21gYCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUKK3JldHVybmVkIGJ5IHRoZSBjYWxsOjoKKworICAgIG15LnBhY2thZ2UuY3VzdG9tRm9ybWF0dGVyRmFjdG9yeShiYXI9J2JheicsIHNwYW09OTkuOSwgYW5zd2VyPTQyKQorCitUaGUga2V5IGBgJygpJ2BgIGhhcyBiZWVuIHVzZWQgYXMgdGhlIHNwZWNpYWwga2V5IGJlY2F1c2UgaXQgaXMgbm90IGEKK3ZhbGlkIGtleXdvcmQgcGFyYW1ldGVyIG5hbWUsIGFuZCBzbyB3aWxsIG5vdCBjbGFzaCB3aXRoIHRoZSBuYW1lcyBvZgordGhlIGtleXdvcmQgYXJndW1lbnRzIHVzZWQgaW4gdGhlIGNhbGwuICBUaGUgYGAnKCknYGAgYWxzbyBzZXJ2ZXMgYXMgYQorbW5lbW9uaWMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBhIGNhbGxhYmxlLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LWV4dGVybmFsb2JqOgorCitBY2Nlc3MgdG8gZXh0ZXJuYWwgb2JqZWN0cworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlcmUgYXJlIHRpbWVzIHdoZXJlIGEgY29uZmlndXJhdGlvbiBuZWVkcyB0byByZWZlciB0byBvYmplY3RzCitleHRlcm5hbCB0byB0aGUgY29uZmlndXJhdGlvbiwgZm9yIGV4YW1wbGUgYGBzeXMuc3RkZXJyYGAuICBJZiB0aGUKK2NvbmZpZ3VyYXRpb24gZGljdCBpcyBjb25zdHJ1Y3RlZCB1c2luZyBQeXRob24gY29kZSwgdGhpcyBpcworc3RyYWlnaHRmb3J3YXJkLCBidXQgYSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGlzCitwcm92aWRlZCB2aWEgYSB0ZXh0IGZpbGUgKGUuZy4gSlNPTiwgWUFNTCkuICBJbiBhIHRleHQgZmlsZSwgdGhlcmUgaXMKK25vIHN0YW5kYXJkIHdheSB0byBkaXN0aW5ndWlzaCBgYHN5cy5zdGRlcnJgYCBmcm9tIHRoZSBsaXRlcmFsIHN0cmluZworYGAnc3lzLnN0ZGVycidgYC4gIFRvIGZhY2lsaXRhdGUgdGhpcyBkaXN0aW5jdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb24KK3N5c3RlbSBsb29rcyBmb3IgY2VydGFpbiBzcGVjaWFsIHByZWZpeGVzIGluIHN0cmluZyB2YWx1ZXMgYW5kCit0cmVhdCB0aGVtIHNwZWNpYWxseS4gIEZvciBleGFtcGxlLCBpZiB0aGUgbGl0ZXJhbCBzdHJpbmcKK2BgJ2V4dDovL3N5cy5zdGRlcnInYGAgaXMgcHJvdmlkZWQgYXMgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiwKK3RoZW4gdGhlIGBgZXh0Oi8vYGAgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlCit2YWx1ZSBwcm9jZXNzZWQgdXNpbmcgbm9ybWFsIGltcG9ydCBtZWNoYW5pc21zLgorCitUaGUgaGFuZGxpbmcgb2Ygc3VjaCBwcmVmaXhlcyBpcyBkb25lIGluIGEgd2F5IGFuYWxvZ291cyB0byBwcm90b2NvbAoraGFuZGxpbmc6IHRoZXJlIGlzIGEgZ2VuZXJpYyBtZWNoYW5pc20gdG8gbG9vayBmb3IgcHJlZml4ZXMgd2hpY2gKK21hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYGBeKD9QPHByZWZpeD5bYS16XSspOi8vKD9QPHN1ZmZpeD4uKikkYGAKK3doZXJlYnksIGlmIHRoZSBgYHByZWZpeGBgIGlzIHJlY29nbmlzZWQsIHRoZSBgYHN1ZmZpeGBgIGlzIHByb2Nlc3NlZAoraW4gYSBwcmVmaXgtZGVwZW5kZW50IG1hbm5lciBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgcHJvY2Vzc2luZyByZXBsYWNlcwordGhlIHN0cmluZyB2YWx1ZS4gIElmIHRoZSBwcmVmaXggaXMgbm90IHJlY29nbmlzZWQsIHRoZW4gdGhlIHN0cmluZwordmFsdWUgd2lsbCBiZSBsZWZ0IGFzLWlzLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqOgorCitBY2Nlc3MgdG8gaW50ZXJuYWwgb2JqZWN0cworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworQXMgd2VsbCBhcyBleHRlcm5hbCBvYmplY3RzLCB0aGVyZSBpcyBzb21ldGltZXMgYWxzbyBhIG5lZWQgdG8gcmVmZXIKK3RvIG9iamVjdHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIHdpbGwgYmUgZG9uZSBpbXBsaWNpdGx5IGJ5IHRoZQorY29uZmlndXJhdGlvbiBzeXN0ZW0gZm9yIHRoaW5ncyB0aGF0IGl0IGtub3dzIGFib3V0LiAgRm9yIGV4YW1wbGUsIHRoZQorc3RyaW5nIHZhbHVlIGBgJ0RFQlVHJ2BgIGZvciBhIGBgbGV2ZWxgYCBpbiBhIGxvZ2dlciBvciBoYW5kbGVyIHdpbGwKK2F1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIHRvIHRoZSB2YWx1ZSBgYGxvZ2dpbmcuREVCVUdgYCwgYW5kIHRoZQorYGBoYW5kbGVyc2BgLCBgYGZpbHRlcnNgYCBhbmQgYGBmb3JtYXR0ZXJgYCBlbnRyaWVzIHdpbGwgdGFrZSBhbgorb2JqZWN0IGlkIGFuZCByZXNvbHZlIHRvIHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbiBvYmplY3QuCisKK0hvd2V2ZXIsIGEgbW9yZSBnZW5lcmljIG1lY2hhbmlzbSBpcyBuZWVkZWQgZm9yIHVzZXItZGVmaW5lZAorb2JqZWN0cyB3aGljaCBhcmUgbm90IGtub3duIHRvIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUuICBGb3IKK2V4YW1wbGUsIGNvbnNpZGVyIDpjbGFzczpgbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyYCwgd2hpY2ggdGFrZXMKK2EgYGB0YXJnZXRgYCBhcmd1bWVudCB3aGljaCBpcyBhbm90aGVyIGhhbmRsZXIgdG8gZGVsZWdhdGUgdG8uIFNpbmNlCit0aGUgc3lzdGVtIGFscmVhZHkga25vd3MgYWJvdXQgdGhpcyBjbGFzcywgdGhlbiBpbiB0aGUgY29uZmlndXJhdGlvbiwKK3RoZSBnaXZlbiBgYHRhcmdldGBgIGp1c3QgbmVlZHMgdG8gYmUgdGhlIG9iamVjdCBpZCBvZiB0aGUgcmVsZXZhbnQKK3RhcmdldCBoYW5kbGVyLCBhbmQgdGhlIHN5c3RlbSB3aWxsIHJlc29sdmUgdG8gdGhlIGhhbmRsZXIgZnJvbSB0aGUKK2lkLiAgSWYsIGhvd2V2ZXIsIGEgdXNlciBkZWZpbmVzIGEgYGBteS5wYWNrYWdlLk15SGFuZGxlcmBgIHdoaWNoIGhhcworYW4gYGBhbHRlcm5hdGVgYCBoYW5kbGVyLCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gd291bGQgbm90IGtub3cgdGhhdAordGhlIGBgYWx0ZXJuYXRlYGAgcmVmZXJyZWQgdG8gYSBoYW5kbGVyLiAgVG8gY2F0ZXIgZm9yIHRoaXMsIGEgZ2VuZXJpYworcmVzb2x1dGlvbiBzeXN0ZW0gYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnk6OgorCisgICAgaGFuZGxlcnM6CisgICAgICBmaWxlOgorICAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgZmlsZSBoYW5kbGVyIGdvZXMgaGVyZQorCisgICAgICBjdXN0b206CisgICAgICAgICgpOiBteS5wYWNrYWdlLk15SGFuZGxlcgorICAgICAgICBhbHRlcm5hdGU6IGNmZzovL2hhbmRsZXJzLmZpbGUKKworVGhlIGxpdGVyYWwgc3RyaW5nIGBgJ2NmZzovL2hhbmRsZXJzLmZpbGUnYGAgd2lsbCBiZSByZXNvbHZlZCBpbiBhbgorYW5hbG9nb3VzIHdheSB0byBzdHJpbmdzIHdpdGggdGhlIGBgZXh0Oi8vYGAgcHJlZml4LCBidXQgbG9va2luZworaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBpbXBvcnQgbmFtZXNwYWNlLiAgVGhlCittZWNoYW5pc20gYWxsb3dzIGFjY2VzcyBieSBkb3Qgb3IgYnkgaW5kZXgsIGluIGEgc2ltaWxhciB3YXkgdG8KK3RoYXQgcHJvdmlkZWQgYnkgYGBzdHIuZm9ybWF0YGAuICBUaHVzLCBnaXZlbiB0aGUgZm9sbG93aW5nIHNuaXBwZXQ6OgorCisgICAgaGFuZGxlcnM6CisgICAgICBlbWFpbDoKKyAgICAgICAgY2xhc3M6IGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIKKyAgICAgICAgbWFpbGhvc3Q6IGxvY2FsaG9zdAorICAgICAgICBmcm9tYWRkcjogbXlfYXBwQGRvbWFpbi50bGQKKyAgICAgICAgdG9hZGRyczoKKyAgICAgICAgICAtIHN1cHBvcnRfdGVhbUBkb21haW4udGxkCisgICAgICAgICAgLSBkZXZfdGVhbUBkb21haW4udGxkCisgICAgICAgIHN1YmplY3Q6IEhvdXN0b24sIHdlIGhhdmUgYSBwcm9ibGVtLgorCitpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIHN0cmluZyBgYCdjZmc6Ly9oYW5kbGVycydgYCB3b3VsZCByZXNvbHZlIHRvCit0aGUgZGljdCB3aXRoIGtleSBgYGhhbmRsZXJzYGAsIHRoZSBzdHJpbmcgYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWxgYAord291bGQgcmVzb2x2ZSB0byB0aGUgZGljdCB3aXRoIGtleSBgYGVtYWlsYGAgaW4gdGhlIGBgaGFuZGxlcnNgYCBkaWN0LAorYW5kIHNvIG9uLiAgVGhlIHN0cmluZyBgYCdjZmc6Ly9oYW5kbGVycy5lbWFpbC50b2FkZHJzWzFdYGAgd291bGQKK3Jlc29sdmUgdG8gYGAnZGV2X3RlYW0uZG9tYWluLnRsZCdgYCBhbmQgdGhlIHN0cmluZworYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWwudG9hZGRyc1swXSdgYCB3b3VsZCByZXNvbHZlIHRvIHRoZSB2YWx1ZQorYGAnc3VwcG9ydF90ZWFtQGRvbWFpbi50bGQnYGAuIFRoZSBgYHN1YmplY3RgYCB2YWx1ZSBjb3VsZCBiZSBhY2Nlc3NlZAordXNpbmcgZWl0aGVyIGBgJ2NmZzovL2hhbmRsZXJzLmVtYWlsLnN1YmplY3QnYGAgb3IsIGVxdWl2YWxlbnRseSwKK2BgJ2NmZzovL2hhbmRsZXJzLmVtYWlsW3N1YmplY3RdJ2BgLiAgVGhlIGxhdHRlciBmb3JtIG9ubHkgbmVlZHMgdG8gYmUKK3VzZWQgaWYgdGhlIGtleSBjb250YWlucyBzcGFjZXMgb3Igbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAgSWYgYW4KK2luZGV4IHZhbHVlIGNvbnNpc3RzIG9ubHkgb2YgZGVjaW1hbCBkaWdpdHMsIGFjY2VzcyB3aWxsIGJlIGF0dGVtcHRlZAordXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciB2YWx1ZSwgZmFsbGluZyBiYWNrIHRvIHRoZSBzdHJpbmcKK3ZhbHVlIGlmIG5lZWRlZC4KKworR2l2ZW4gYSBzdHJpbmcgYGBjZmc6Ly9oYW5kbGVycy5teWhhbmRsZXIubXlrZXkuMTIzYGAsIHRoaXMgd2lsbAorcmVzb2x2ZSB0byBgYGNvbmZpZ19kaWN0WydoYW5kbGVycyddWydteWhhbmRsZXInXVsnbXlrZXknXVsnMTIzJ11gYC4KK0lmIHRoZSBzdHJpbmcgaXMgc3BlY2lmaWVkIGFzIGBgY2ZnOi8vaGFuZGxlcnMubXloYW5kbGVyLm15a2V5WzEyM11gYCwKK3RoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tCitgYGNvbmZpZ19kaWN0WydoYW5kbGVycyddWydteWhhbmRsZXInXVsnbXlrZXknXVsxMjNdYGAsIGFuZCBmYWxsIGJhY2sKK3RvIGBgY29uZmlnX2RpY3RbJ2hhbmRsZXJzJ11bJ215aGFuZGxlciddWydteWtleSddWycxMjMnXWBgIGlmIHRoYXQKK2ZhaWxzLgorCiAuLiBfbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdDoKIAogQ29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFjb3NhLnJzdCBiL0RvYy9saWJyYXJ5L21hY29zYS5yc3QKaW5kZXggMjUwYTkyMy4uNTRlNjJmMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbWFjb3NhLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWNvc2EucnN0CkBAIC05LDcgKzksOCBAQAogQXJjaGl0ZWN0dXJlIChPU0EsIGFsc28gY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgQXBwbGVTY3JpcHQpIGZvciBQeXRob24sCiBhbGxvd2luZyB5b3UgdG8gY29udHJvbCBzY3JpcHRhYmxlIGFwcGxpY2F0aW9ucyBmcm9tIHlvdXIgUHl0aG9uIHByb2dyYW0sCiBhbmQgd2l0aCBhIGZhaXJseSBweXRob25pYyBpbnRlcmZhY2UuIERldmVsb3BtZW50IG9uIHRoaXMgc2V0IG9mIG1vZHVsZXMgaGFzCi1zdG9wcGVkLCBhbmQgYSByZXBsYWNlbWVudCBpcyBleHBlY3RlZCBmb3IgUHl0aG9uIDIuNS4KK3N0b3BwZWQuIEZvciBtb3JlIHVwLXRvLWRhdGUgaW1wbGVtZW50YXRpb24gb2YgQXBwbGVTY3JpcHQgc3VwcG9ydCBmb3IgUHl0aG9uLAorc2VlIHRoZSB0aGlyZC1wYXJ0eSBweS1hcHBzY3JpcHQgcHJvamVjdDogPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9hcHBzY3JpcHQvPi4KIAogRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZiBBcHBsZVNjcmlwdCBhbmQgT1NBLCBhbmQgdG8gZ2V0CiBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRlcm1pbm9sb2d5LCB5b3Ugc2hvdWxkIHJlYWQgQXBwbGUncwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFjb3N0b29scy5yc3QgYi9Eb2MvbGlicmFyeS9tYWNvc3Rvb2xzLnJzdAppbmRleCBmYzI2ZDJmLi5mMmEyNjQzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWNvc3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWNvc3Rvb2xzLnJzdApAQCAtNzUsNyArNzUsNyBAQAogCiAKIDptb2Q6YGZpbmRlcnRvb2xzYCAtLS0gVGhlIDpwcm9ncmFtOmBmaW5kZXJgJ3MgQXBwbGUgRXZlbnRzIGludGVyZmFjZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IGZpbmRlcnRvb2xzCiAgICA6cGxhdGZvcm06IE1hYwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWF0aC5yc3QgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdAppbmRleCA3ODllY2NjLi5lNWZmYmEwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdApAQCAtODcsNyArODcsNyBAQAogICAgbG9zcyBvZiBwcmVjaXNpb24gYnkgdHJhY2tpbmcgbXVsdGlwbGUgaW50ZXJtZWRpYXRlIHBhcnRpYWwgc3Vtczo6CiAKICAgICAgICAgPj4+IHN1bShbLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjFdKQotICAgICAgICAwLjk5OTk5OTk5OTk5OTk5OTg5CisgICAgICAgIDAuOTk5OTk5OTk5OTk5OTk5OQogICAgICAgICA+Pj4gZnN1bShbLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjFdKQogICAgICAgICAxLjAKIApAQCAtMTU5LDYgKzE1OSwyMiBAQAogICAgUmV0dXJuIGBgZSoqeGBgLgogCiAKKy4uIGZ1bmN0aW9uOjogZXhwbTEoeCkKKworICAgUmV0dXJuIGBgZSoqeCAtIDFgYC4gIEZvciBzbWFsbCBmbG9hdHMgKngqLCB0aGUgc3VidHJhY3Rpb24gaW4KKyAgIGBgZXhwKHgpIC0gMWBgIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBsb3NzIG9mIHByZWNpc2lvbjsgdGhlCisgICA6ZnVuYzpgZXhwbTFgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgd2F5IHRvIGNvbXB1dGUgdGhpcyBxdWFudGl0eSB0bworICAgZnVsbCBwcmVjaXNpb246OgorCisgICAgICA+Pj4gZnJvbSBtYXRoIGltcG9ydCBleHAsIGV4cG0xCisgICAgICA+Pj4gZXhwKDFlLTUpIC0gMSAgIyBnaXZlcyByZXN1bHQgYWNjdXJhdGUgdG8gMTEgcGxhY2VzCisgICAgICAxLjAwMDAwNTAwMDAwNjk2NDllLTA1CisgICAgICA+Pj4gZXhwbTEoMWUtNSkgICAgIyByZXN1bHQgYWNjdXJhdGUgdG8gZnVsbCBwcmVjaXNpb24KKyAgICAgIDEuMDAwMDA1MDAwMDE2NjY2OGUtMDUKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZnVuY3Rpb246OiBsb2coeFssIGJhc2VdKQogCiAgICBXaXRoIG9uZSBhcmd1bWVudCwgcmV0dXJuIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAqeCogKHRvIGJhc2UgKmUqKS4KQEAgLTMwMyw2ICszMTksMzggQEAKICAgIFJldHVybiB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mICp4Ki4KIAogCitTcGVjaWFsIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBlcmYoeCkKKworICAgUmV0dXJuIHRoZSBlcnJvciBmdW5jdGlvbiBhdCAqeCouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogZXJmYyh4KQorCisgICBSZXR1cm4gdGhlIGNvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gYXQgKngqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGdhbW1hKHgpCisKKyAgIFJldHVybiB0aGUgR2FtbWEgZnVuY3Rpb24gYXQgKngqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGxnYW1tYSh4KQorCisgICBSZXR1cm4gdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgR2FtbWEKKyAgIGZ1bmN0aW9uIGF0ICp4Ki4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogQ29uc3RhbnRzCiAtLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKaW5kZXggODE4ZjM5Zi4uOTU2YTFmMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CkBAIC03Nyw5ICs3NywxMyBAQAogCiAgICBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuICBJZiBnaXZlbiwgKmZpbGVzKiBtdXN0IGJlIGEgc2VxdWVuY2UKICAgIG9mIGZpbGUgbmFtZXMgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gYXVnbWVudCB0aGUgZGVmYXVsdCB0eXBlIG1hcC4gIElmIG9taXR0ZWQsCi0gICB0aGUgZmlsZSBuYW1lcyB0byB1c2UgYXJlIHRha2VuIGZyb20gOmNvbnN0OmBrbm93bmZpbGVzYC4gIEVhY2ggZmlsZSBuYW1lZCBpbgotICAgKmZpbGVzKiBvciA6Y29uc3Q6YGtub3duZmlsZXNgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aG9zZSBuYW1lZCBiZWZvcmUgaXQuCi0gICBDYWxsaW5nIDpmdW5jOmBpbml0YCByZXBlYXRlZGx5IGlzIGFsbG93ZWQuCisgICB0aGUgZmlsZSBuYW1lcyB0byB1c2UgYXJlIHRha2VuIGZyb20gOmNvbnN0OmBrbm93bmZpbGVzYDsgb24gV2luZG93cywgdGhlCisgICBjdXJyZW50IHJlZ2lzdHJ5IHNldHRpbmdzIGFyZSBsb2FkZWQuICBFYWNoIGZpbGUgbmFtZWQgaW4gKmZpbGVzKiBvcgorICAgOmNvbnN0OmBrbm93bmZpbGVzYCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhvc2UgbmFtZWQgYmVmb3JlIGl0LiAgQ2FsbGluZworICAgOmZ1bmM6YGluaXRgIHJlcGVhdGVkbHkgaXMgYWxsb3dlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFByZXZpb3VzbHksIFdpbmRvd3MgcmVnaXN0cnkgc2V0dGluZ3Mgd2VyZSBpZ25vcmVkLgogCiAKIC4uIGZ1bmN0aW9uOjogcmVhZF9taW1lX3R5cGVzKGZpbGVuYW1lKQpAQCAtMjEzLDYgKzIxNywxMiBAQAogICAgb2YgdGhlIG9iamVjdC4KIAogCisuLiBtZXRob2Q6OiBNaW1lVHlwZXMuZ3Vlc3NfYWxsX2V4dGVuc2lvbnModHlwZVssIHN0cmljdF0pCisKKyAgIFNpbWlsYXIgdG8gdGhlIDpmdW5jOmBndWVzc19hbGxfZXh0ZW5zaW9uc2AgZnVuY3Rpb24sIHVzaW5nIHRoZSB0YWJsZXMgc3RvcmVkIGFzIHBhcnQKKyAgIG9mIHRoZSBvYmplY3QuCisKKwogLi4gbWV0aG9kOjogTWltZVR5cGVzLmd1ZXNzX3R5cGUodXJsWywgc3RyaWN0XSkKIAogICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YGd1ZXNzX3R5cGVgIGZ1bmN0aW9uLCB1c2luZyB0aGUgdGFibGVzIHN0b3JlZCBhcyBwYXJ0IG9mCkBAIC0yMzAsMyArMjQwLDkgQEAKICAgIExvYWQgTUlNRSB0eXBlIGluZm9ybWF0aW9uIGZyb20gYW4gb3BlbiBmaWxlLiAgVGhlIGZpbGUgbXVzdCBoYXZlIHRoZSBmb3JtYXQgb2YKICAgIHRoZSBzdGFuZGFyZCA6ZmlsZTpgbWltZS50eXBlc2AgZmlsZXMuCiAKKworLi4gbWV0aG9kOjogTWltZVR5cGVzLnJlYWRfd2luZG93c19yZWdpc3RyeSgpCisKKyAgIExvYWQgTUlNRSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIFdpbmRvd3MgcmVnaXN0cnkuICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbW1hcC5yc3QgYi9Eb2MvbGlicmFyeS9tbWFwLnJzdAppbmRleCBhNmU5YmRjLi4xMjViMzRmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tbWFwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tbWFwLnJzdApAQCAtMTczLDcgKzE3Myw3IEBACiAKICAgICAgIENvcHkgdGhlICpjb3VudCogYnl0ZXMgc3RhcnRpbmcgYXQgb2Zmc2V0ICpzcmMqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbmRleAogICAgICAgKmRlc3QqLiAgSWYgdGhlIG1tYXAgd2FzIGNyZWF0ZWQgd2l0aCA6Y29uc3Q6YEFDQ0VTU19SRUFEYCwgdGhlbiBjYWxscyB0bwotICAgICAgbW92ZSB3aWxsIHRocm93IGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCisgICAgICBtb3ZlIHdpbGwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KIAogCiAgICAuLiBtZXRob2Q6OiByZWFkKG51bSkKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAgICAgICBSZXNpemVzIHRoZSBtYXAgYW5kIHRoZSB1bmRlcmx5aW5nIGZpbGUsIGlmIGFueS4gSWYgdGhlIG1tYXAgd2FzIGNyZWF0ZWQKICAgICAgIHdpdGggOmNvbnN0OmBBQ0NFU1NfUkVBRGAgb3IgOmNvbnN0OmBBQ0NFU1NfQ09QWWAsIHJlc2l6aW5nIHRoZSBtYXAgd2lsbAotICAgICAgdGhyb3cgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbi4KKyAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCiAKIAogICAgLi4gbWV0aG9kOjogcmZpbmQoc3RyaW5nWywgc3RhcnRbLCBlbmRdXSkKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgV3JpdGUgdGhlIGJ5dGVzIGluICpzdHJpbmcqIGludG8gbWVtb3J5IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZQogICAgICAgZmlsZSBwb2ludGVyOyB0aGUgZmlsZSBwb3NpdGlvbiBpcyB1cGRhdGVkIHRvIHBvaW50IGFmdGVyIHRoZSBieXRlcyB0aGF0CiAgICAgICB3ZXJlIHdyaXR0ZW4uIElmIHRoZSBtbWFwIHdhcyBjcmVhdGVkIHdpdGggOmNvbnN0OmBBQ0NFU1NfUkVBRGAsIHRoZW4KLSAgICAgIHdyaXRpbmcgdG8gaXQgd2lsbCB0aHJvdyBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uLgorICAgICAgd3JpdGluZyB0byBpdCB3aWxsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCiAKIAogICAgLi4gbWV0aG9kOjogd3JpdGVfYnl0ZShieXRlKQpAQCAtMjQyLDYgKzI0Miw0IEBACiAgICAgICBXcml0ZSB0aGUgc2luZ2xlLWNoYXJhY3RlciBzdHJpbmcgKmJ5dGUqIGludG8gbWVtb3J5IGF0IHRoZSBjdXJyZW50CiAgICAgICBwb3NpdGlvbiBvZiB0aGUgZmlsZSBwb2ludGVyOyB0aGUgZmlsZSBwb3NpdGlvbiBpcyBhZHZhbmNlZCBieSBgYDFgYC4gSWYKICAgICAgIHRoZSBtbWFwIHdhcyBjcmVhdGVkIHdpdGggOmNvbnN0OmBBQ0NFU1NfUkVBRGAsIHRoZW4gd3JpdGluZyB0byBpdCB3aWxsCi0gICAgICB0aHJvdyBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uLgotCi0KKyAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tb2R1bGVzLnJzdCBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CmluZGV4IGVjNmY3Y2QuLmI1NTQzZTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CkBAIC0xNCw2ICsxNCw3IEBACiAuLiB0b2N0cmVlOjoKIAogICAgaW1wLnJzdAorICAgaW1wb3J0bGliLnJzdAogICAgaW1wdXRpbC5yc3QKICAgIHppcGltcG9ydC5yc3QKICAgIHBrZ3V0aWwucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tc2lsaWIucnN0IGIvRG9jL2xpYnJhcnkvbXNpbGliLnJzdAppbmRleCA3ZDY0ZGUzLi5hNDEyNjA5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKQEAgLTM1Myw3ICszNTMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IERpcmVjdG9yeShkYXRhYmFzZSwgY2FiLCBiYXNlZGlyLCBwaHlzaWNhbCwgIGxvZ2ljYWwsIGRlZmF1bHQsIGNvbXBvbmVudCwgW2NvbXBvbmVudGZsYWdzXSkKKy4uIGNsYXNzOjogRGlyZWN0b3J5KGRhdGFiYXNlLCBjYWIsIGJhc2VkaXIsIHBoeXNpY2FsLCAgbG9naWNhbCwgZGVmYXVsdCwgW2NvbXBvbmVudGZsYWdzXSkKIAogICAgQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiB0aGUgRGlyZWN0b3J5IHRhYmxlLiBUaGVyZSBpcyBhIGN1cnJlbnQgY29tcG9uZW50IGF0CiAgICBlYWNoIHBvaW50IGluIHRpbWUgZm9yIHRoZSBkaXJlY3RvcnksIHdoaWNoIGlzIGVpdGhlciBleHBsaWNpdGx5IGNyZWF0ZWQgdGhyb3VnaApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdCBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKaW5kZXggOWJkYWY2Zi4uZjRlNGE4ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgIFRoZSBgYCdkJ2BgIGFuZCBgYCdpJ2BgIGFyZ3VtZW50cyB1c2VkIHdoZW4gY3JlYXRpbmcgYGBudW1gYCBhbmQgYGBhcnJgYCBhcmUKICAgIHR5cGVjb2RlcyBvZiB0aGUga2luZCB1c2VkIGJ5IHRoZSA6bW9kOmBhcnJheWAgbW9kdWxlOiBgYCdkJ2BgIGluZGljYXRlcyBhCiAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0IGFuZCBgYCdpJ2BgIGluZGljYXRlcyBhIHNpZ25lZCBpbnRlZ2VyLiAgVGhlc2Ugc2hhcmVkCi0gICBvYmplY3RzIHdpbGwgYmUgcHJvY2VzcyBhbmQgdGhyZWFkIHNhZmUuCisgICBvYmplY3RzIHdpbGwgYmUgcHJvY2VzcyBhbmQgdGhyZWFkLXNhZmUuCiAKICAgIEZvciBtb3JlIGZsZXhpYmlsaXR5IGluIHVzaW5nIHNoYXJlZCBtZW1vcnkgb25lIGNhbiB1c2UgdGhlCiAgICA6bW9kOmBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzYCBtb2R1bGUgd2hpY2ggc3VwcG9ydHMgdGhlIGNyZWF0aW9uIG9mCkBAIC0zNzYsNyArMzc2LDcgQEAKICAgICAgIE90aGVyd2lzZSBhIGRhZW1vbmljIHByb2Nlc3Mgd291bGQgbGVhdmUgaXRzIGNoaWxkcmVuIG9ycGhhbmVkIGlmIGl0IGdldHMKICAgICAgIHRlcm1pbmF0ZWQgd2hlbiBpdHMgcGFyZW50IHByb2Nlc3MgZXhpdHMuIEFkZGl0aW9uYWxseSwgdGhlc2UgYXJlICoqbm90KioKICAgICAgIFVuaXggZGFlbW9ucyBvciBzZXJ2aWNlcywgdGhleSBhcmUgbm9ybWFsIHByb2Nlc3NlcyB0aGF0IHdpbGwgYmUKLSAgICAgIHRlcm1pbmF0ZWQgKGFuZCBub3Qgam9pbmVkKSBpZiBub24tZGFtZW9uaWMgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorICAgICAgdGVybWluYXRlZCAoYW5kIG5vdCBqb2luZWQpIGlmIG5vbi1kYWVtb25pYyBwcm9jZXNzZXMgaGF2ZSBleGl0ZWQuCiAKICAgIEluIGFkZGl0aW9uIHRvIHRoZSAgOmNsYXNzOmBUaHJlYWRpbmcuVGhyZWFkYCBBUEksIDpjbGFzczpgUHJvY2Vzc2Agb2JqZWN0cwogICAgYWxzbyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhbmQgbWV0aG9kczoKQEAgLTcyMSw3ICs3MjEsOCBAQAogICAgICAgU2VuZCBhbiBvYmplY3QgdG8gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiB3aGljaCBzaG91bGQgYmUgcmVhZAogICAgICAgdXNpbmcgOm1ldGg6YHJlY3ZgLgogCi0gICAgICBUaGUgb2JqZWN0IG11c3QgYmUgcGlja2xhYmxlLgorICAgICAgVGhlIG9iamVjdCBtdXN0IGJlIHBpY2tsYWJsZS4gIFZlcnkgbGFyZ2UgcGlja2xlcyAoYXBwcm94aW1hdGVseSAzMiBNQissCisgICAgICB0aG91Z2ggaXQgZGVwZW5kcyBvbiB0aGUgT1MpIG1heSByYWlzZSBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uLgogCiAgICAuLiBtZXRob2Q6OiByZWN2KCkKIApAQCAtNzUzLDcgKzc1NCw5IEBACiAgICAgICBjb21wbGV0ZSBtZXNzYWdlLgogCiAgICAgICBJZiAqb2Zmc2V0KiBpcyBnaXZlbiB0aGVuIGRhdGEgaXMgcmVhZCBmcm9tIHRoYXQgcG9zaXRpb24gaW4gKmJ1ZmZlciouICBJZgotICAgICAgKnNpemUqIGlzIGdpdmVuIHRoZW4gdGhhdCBtYW55IGJ5dGVzIHdpbGwgYmUgcmVhZCBmcm9tIGJ1ZmZlci4KKyAgICAgICpzaXplKiBpcyBnaXZlbiB0aGVuIHRoYXQgbWFueSBieXRlcyB3aWxsIGJlIHJlYWQgZnJvbSBidWZmZXIuICBWZXJ5IGxhcmdlCisgICAgICBidWZmZXJzIChhcHByb3hpbWF0ZWx5IDMyIE1CKywgdGhvdWdoIGl0IGRlcGVuZHMgb24gdGhlIE9TKSBtYXkgcmFpc2UgYQorICAgICAgVmFsdWVFcnJvciBleGNlcHRpb24KIAogICAgLi4gbWV0aG9kOjogcmVjdl9ieXRlcyhbbWF4bGVuZ3RoXSkKIApAQCAtODQ5LDYgKzg1MiwxMiBAQAogLi4gY2xhc3M6OiBFdmVudCgpCiAKICAgIEEgY2xvbmUgb2YgOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgLgorICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIGludGVybmFsIHNlbWFwaG9yZSBvbiBleGl0LCBzbyBpdAorICAgd2lsbCBhbHdheXMgcmV0dXJuIGBgVHJ1ZWBgIGV4Y2VwdCBpZiBhIHRpbWVvdXQgaXMgZ2l2ZW4gYW5kIHRoZSBvcGVyYXRpb24KKyAgIHRpbWVzIG91dC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFByZXZpb3VzbHksIHRoZSBtZXRob2QgYWx3YXlzIHJldHVybmVkIGBgTm9uZWBgLgogCiAuLiBjbGFzczo6IExvY2soKQogCkBAIC0xMTM0LDkgKzExNDMsMTAgQEAKICAgIGBgY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleWBgLiAgT3RoZXJ3aXNlICphdXRoa2V5KiBpcyB1c2VkIGFuZCBpdAogICAgbXVzdCBiZSBhIHN0cmluZy4KIAotICAgLi4gbWV0aG9kOjogc3RhcnQoKQorICAgLi4gbWV0aG9kOjogc3RhcnQoW2luaXRpYWxpemVyWywgaW5pdGFyZ3NdXSkKIAotICAgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHN0YXJ0IHRoZSBtYW5hZ2VyLgorICAgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHN0YXJ0IHRoZSBtYW5hZ2VyLiAgSWYgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAKKyAgICAgIHRoZW4gdGhlIHN1YnByb2Nlc3Mgd2lsbCBjYWxsIGBgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKWBgIHdoZW4gaXQgc3RhcnRzLgogCiAgICAuLiBtZXRob2Q6OiBnZXRfc2VydmVyKCkKIApAQCAtMTI3Niw2ICsxMjg2LDI0IEBACiAKICAgICAgIENyZWF0ZSBhIHNoYXJlZCBgYGxpc3RgYCBvYmplY3QgYW5kIHJldHVybiBhIHByb3h5IGZvciBpdC4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIE1vZGlmaWNhdGlvbnMgdG8gbXV0YWJsZSB2YWx1ZXMgb3IgaXRlbXMgaW4gZGljdCBhbmQgbGlzdCBwcm94aWVzIHdpbGwgbm90CisgICAgICBiZSBwcm9wYWdhdGVkIHRocm91Z2ggdGhlIG1hbmFnZXIsIGJlY2F1c2UgdGhlIHByb3h5IGhhcyBubyB3YXkgb2Yga25vd2luZworICAgICAgd2hlbiBpdHMgdmFsdWVzIG9yIGl0ZW1zIGFyZSBtb2RpZmllZC4gIFRvIG1vZGlmeSBzdWNoIGFuIGl0ZW0sIHlvdSBjYW4KKyAgICAgIHJlLWFzc2lnbiB0aGUgbW9kaWZpZWQgb2JqZWN0IHRvIHRoZSBjb250YWluZXIgcHJveHk6OgorCisgICAgICAgICAjIGNyZWF0ZSBhIGxpc3QgcHJveHkgYW5kIGFwcGVuZCBhIG11dGFibGUgb2JqZWN0IChhIGRpY3Rpb25hcnkpCisgICAgICAgICBscHJveHkgPSBtYW5hZ2VyLmxpc3QoKQorICAgICAgICAgbHByb3h5LmFwcGVuZCh7fSkKKyAgICAgICAgICMgbm93IG11dGF0ZSB0aGUgZGljdGlvbmFyeQorICAgICAgICAgZCA9IGxwcm94eVswXQorICAgICAgICAgZFsnYSddID0gMQorICAgICAgICAgZFsnYiddID0gMgorICAgICAgICAgIyBhdCB0aGlzIHBvaW50LCB0aGUgY2hhbmdlcyB0byBkIGFyZSBub3QgeWV0IHN5bmNlZCwgYnV0IGJ5CisgICAgICAgICAjIHJlYXNzaWduaW5nIHRoZSBkaWN0aW9uYXJ5LCB0aGUgcHJveHkgaXMgbm90aWZpZWQgb2YgdGhlIGNoYW5nZQorICAgICAgICAgbHByb3h5WzBdID0gZAorCiAKIE5hbWVzcGFjZSBvYmplY3RzCiA+Pj4+Pj4+Pj4+Pj4+Pj4+PgpAQCAtMTUyMiw3ICsxNTUwLDcgQEAKIE9uZSBjYW4gY3JlYXRlIGEgcG9vbCBvZiBwcm9jZXNzZXMgd2hpY2ggd2lsbCBjYXJyeSBvdXQgdGFza3Mgc3VibWl0dGVkIHRvIGl0CiB3aXRoIHRoZSA6Y2xhc3M6YFBvb2xgIGNsYXNzLgogCi0uLiBjbGFzczo6IG11bHRpcHJvY2Vzc2luZy5Qb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzXV1dKQorLi4gY2xhc3M6OiBtdWx0aXByb2Nlc3NpbmcuUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGRdXV1dKQogCiAgICBBIHByb2Nlc3MgcG9vbCBvYmplY3Qgd2hpY2ggY29udHJvbHMgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gd2hpY2ggam9icwogICAgY2FuIGJlIHN1Ym1pdHRlZC4gIEl0IHN1cHBvcnRzIGFzeW5jaHJvbm91cyByZXN1bHRzIHdpdGggdGltZW91dHMgYW5kCkBAIC0xNTMzLDYgKzE1NjEsMjIgQEAKICAgICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgIHRoZW4gZWFjaCB3b3JrZXIgcHJvY2VzcyB3aWxsIGNhbGwKICAgIGBgaW5pdGlhbGl6ZXIoKmluaXRhcmdzKWBgIHdoZW4gaXQgc3RhcnRzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgICAgICptYXh0YXNrc3BlcmNoaWxkKiBpcyB0aGUgbnVtYmVyIG9mIHRhc2tzIGEgd29ya2VyIHByb2Nlc3MgY2FuIGNvbXBsZXRlCisgICAgICBiZWZvcmUgaXQgd2lsbCBleGl0IGFuZCBiZSByZXBsYWNlZCB3aXRoIGEgZnJlc2ggd29ya2VyIHByb2Nlc3MsIHRvIGVuYWJsZQorICAgICAgdW51c2VkIHJlc291cmNlcyB0byBiZSBmcmVlZC4gVGhlIGRlZmF1bHQgKm1heHRhc2tzcGVyY2hpbGQqIGlzIE5vbmUsIHdoaWNoCisgICAgICBtZWFucyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBwb29sLgorCisgICAuLiBub3RlOjoKKworICAgICAgV29ya2VyIHByb2Nlc3NlcyB3aXRoaW4gYSA6Y2xhc3M6YFBvb2xgIHR5cGljYWxseSBsaXZlIGZvciB0aGUgY29tcGxldGUKKyAgICAgIGR1cmF0aW9uIG9mIHRoZSBQb29sJ3Mgd29yayBxdWV1ZS4gQSBmcmVxdWVudCBwYXR0ZXJuIGZvdW5kIGluIG90aGVyCisgICAgICBzeXN0ZW1zIChzdWNoIGFzIEFwYWNoZSwgbW9kX3dzZ2ksIGV0YykgdG8gZnJlZSByZXNvdXJjZXMgaGVsZCBieQorICAgICAgd29ya2VycyBpcyB0byBhbGxvdyBhIHdvcmtlciB3aXRoaW4gYSBwb29sIHRvIGNvbXBsZXRlIG9ubHkgYSBzZXQKKyAgICAgIGFtb3VudCBvZiB3b3JrIGJlZm9yZSBiZWluZyBleGl0aW5nLCBiZWluZyBjbGVhbmVkIHVwIGFuZCBhIG5ldworICAgICAgcHJvY2VzcyBzcGF3bmVkIHRvIHJlcGxhY2UgdGhlIG9sZCBvbmUuIFRoZSAqbWF4dGFza3NwZXJjaGlsZCoKKyAgICAgIGFyZ3VtZW50IHRvIHRoZSA6Y2xhc3M6YFBvb2xgIGV4cG9zZXMgdGhpcyBhYmlsaXR5IHRvIHRoZSBlbmQgdXNlci4KKwogICAgLi4gbWV0aG9kOjogYXBwbHkoZnVuY1ssIGFyZ3NbLCBrd2RzXV0pCiAKICAgICAgIEVxdWl2YWxlbnQgb2YgdGhlIDpmdW5jOmBhcHBseWAgYnVpbHQtaW4gZnVuY3Rpb24uICBJdCBibG9ja3MgdGlsbCB0aGUKQEAgLTIxOTgsOCArMjI0Miw4IEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CiAKIAotQW4gc2hvd2luZyBob3cgdG8gdXNlIHF1ZXVlcyB0byBmZWVkIHRhc2tzIHRvIGEgY29sbGVjdGlvbiBvZiB3b3JrZXIgcHJvY2VzcyBhbmQKLWNvbGxlY3QgdGhlIHJlc3VsdHM6CitBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCitwcm9jZXNzIGFuZCBjb2xsZWN0IHRoZSByZXN1bHRzOgogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCA2YzE2YTQzLi43YTQ2MWI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMTgsMzUgKzE4LDM1IEBACiBIZXJlIGFyZSB0d28gc21hbGwgZXhhbXBsZXMgb2YgaG93IGl0IGNhbiBiZSB1c2VkLiAgVG8gbGlzdCBzb21lIHN0YXRpc3RpY3MKIGFib3V0IGEgbmV3c2dyb3VwIGFuZCBwcmludCB0aGUgc3ViamVjdHMgb2YgdGhlIGxhc3QgMTAgYXJ0aWNsZXM6OgogCi0gICA+Pj4gcyA9IE5OVFAoJ25ld3MuY3dpLm5sJykKLSAgID4+PiByZXNwLCBjb3VudCwgZmlyc3QsIGxhc3QsIG5hbWUgPSBzLmdyb3VwKCdjb21wLmxhbmcucHl0aG9uJykKKyAgID4+PiBzID0gTk5UUCgnbmV3cy5nbWFuZS5vcmcnKQorICAgPj4+IHJlc3AsIGNvdW50LCBmaXJzdCwgbGFzdCwgbmFtZSA9IHMuZ3JvdXAoJ2dtYW5lLmNvbXAucHl0aG9uLmNvbW1pdHRlcnMnKQogICAgPj4+IHByaW50ICdHcm91cCcsIG5hbWUsICdoYXMnLCBjb3VudCwgJ2FydGljbGVzLCByYW5nZScsIGZpcnN0LCAndG8nLCBsYXN0Ci0gICBHcm91cCBjb21wLmxhbmcucHl0aG9uIGhhcyA1OSBhcnRpY2xlcywgcmFuZ2UgMzc0MiB0byAzODAzCisgICBHcm91cCBnbWFuZS5jb21wLnB5dGhvbi5jb21taXR0ZXJzIGhhcyAxMDcxIGFydGljbGVzLCByYW5nZSAxIHRvIDEwNzEKICAgID4+PiByZXNwLCBzdWJzID0gcy54aGRyKCdzdWJqZWN0JywgZmlyc3QgKyAnLScgKyBsYXN0KQogICAgPj4+IGZvciBpZCwgc3ViIGluIHN1YnNbLTEwOl06IHByaW50IGlkLCBzdWIKICAgIC4uLgotICAgMzc5MiBSZTogUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSBhIGxpc3Qgd2hpbGUgaXRlcmF0aW5nLi4uCi0gICAzNzkzIFJlOiBXaG8gbGlrZXMgSW5mbyBmaWxlcz8KLSAgIDM3OTQgRW1hY3MgYW5kIGRvYyBzdHJpbmdzCi0gICAzNzk1IGEgZmV3IHF1ZXN0aW9ucyBhYm91dCB0aGUgTWFjIGltcGxlbWVudGF0aW9uCi0gICAzNzk2IFJlOiBleGVjdXRhYmxlIHB5dGhvbiBzY3JpcHRzCi0gICAzNzk3IFJlOiBleGVjdXRhYmxlIHB5dGhvbiBzY3JpcHRzCi0gICAzNzk4IFJlOiBhIGZldyBxdWVzdGlvbnMgYWJvdXQgdGhlIE1hYyBpbXBsZW1lbnRhdGlvbgotICAgMzc5OSBSZTogUFJPUE9TQUw6IEEgR2VuZXJpYyBQeXRob24gT2JqZWN0IEludGVyZmFjZSBmb3IgUHl0aG9uIEMgTW9kdWxlcwotICAgMzgwMiBSZTogZXhlY3V0YWJsZSBweXRob24gc2NyaXB0cwotICAgMzgwMyBSZTogXFBPU0lYe30gd2FpdCBhbmQgU0lHQ0hMRAorICAgMTA2MiBSZTogTWVyY3VyaWFsIFN0YXR1cz8KKyAgIDEwNjMgUmU6IFtweXRob24tY29tbWl0dGVyc10gIChXaW5kb3dzKSBidWlsZGJvdHMgb24gMy54CisgICAxMDY0IFJlOiBNZXJjdXJpYWwgU3RhdHVzPworICAgMTA2NSBSZTogTWVyY3VyaWFsIFN0YXR1cz8KKyAgIDEwNjYgUHl0aG9uIDIuNi42IHN0YXR1cworICAgMTA2NyBDb21taXQgUHJpdmlsZWdlcyBmb3IgQXNrIFNvbGVtCisgICAxMDY4IFJlOiBDb21taXQgUHJpdmlsZWdlcyBmb3IgQXNrIFNvbGVtCisgICAxMDY5IFJlOiBDb21taXQgUHJpdmlsZWdlcyBmb3IgQXNrIFNvbGVtCisgICAxMDcwIFJlOiBDb21taXQgUHJpdmlsZWdlcyBmb3IgQXNrIFNvbGVtCisgICAxMDcxIDIuNi42IHJjIDIKICAgID4+PiBzLnF1aXQoKQotICAgJzIwNSBuZXdzLmN3aS5ubCBjbG9zaW5nIGNvbm5lY3Rpb24uICBHb29kYnllLicKKyAgICcyMDUgQnllIScKIAogVG8gcG9zdCBhbiBhcnRpY2xlIGZyb20gYSBmaWxlICh0aGlzIGFzc3VtZXMgdGhhdCB0aGUgYXJ0aWNsZSBoYXMgdmFsaWQKLWhlYWRlcnMpOjoKK2hlYWRlcnMsIGFuZCB0aGF0IHlvdSBoYXZlIHJpZ2h0IHRvIHBvc3Qgb24gdGhlIHBhcnRpY3VsYXIgbmV3c2dyb3VwKTo6CiAKLSAgID4+PiBzID0gTk5UUCgnbmV3cy5jd2kubmwnKQorICAgPj4+IHMgPSBOTlRQKCduZXdzLmdtYW5lLm9yZycpCiAgICA+Pj4gZiA9IG9wZW4oJy90bXAvYXJ0aWNsZScpCiAgICA+Pj4gcy5wb3N0KGYpCiAgICAnMjQwIEFydGljbGUgcG9zdGVkIHN1Y2Nlc3NmdWxseS4nCiAgICA+Pj4gcy5xdWl0KCkKLSAgICcyMDUgbmV3cy5jd2kubmwgY2xvc2luZyBjb25uZWN0aW9uLiAgR29vZGJ5ZS4nCisgICAnMjA1IEJ5ZSEnCiAKIFRoZSBtb2R1bGUgaXRzZWxmIGRlZmluZXMgdGhlIGZvbGxvd2luZyBpdGVtczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CmluZGV4IGRiODEzZDguLjg1NGYxNGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgRGVsZXRlIHRoZSBzbGljZSBvZiAqYSogZnJvbSBpbmRleCAqYiogdG8gaW5kZXggKmMtMSouCiAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy4wLiAgVXNlIDpmdW5jOmBkZWxpdGVtYCB3aXRoIGEgc2xpY2UKKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy54LiAgVXNlIDpmdW5jOmBkZWxpdGVtYCB3aXRoIGEgc2xpY2UKICAgICAgIGluZGV4LgogCiAKQEAgLTI1Nyw3ICsyNTcsNyBAQAogICAgUmV0dXJuIHRoZSBzbGljZSBvZiAqYSogZnJvbSBpbmRleCAqYiogdG8gaW5kZXggKmMtMSouCiAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy4wLiAgVXNlIDpmdW5jOmBnZXRpdGVtYCB3aXRoIGEgc2xpY2UKKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy54LiAgVXNlIDpmdW5jOmBnZXRpdGVtYCB3aXRoIGEgc2xpY2UKICAgICAgIGluZGV4LgogCiAKQEAgLTI2OSw4ICsyNjksOCBAQAogLi4gZnVuY3Rpb246OiByZXBlYXQoYSwgYikKICAgICAgICAgICAgICAgX19yZXBlYXRfXyhhLCBiKQogCi0gICAuLiBkZXByZWNhdGVkOjogMi42Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSA6ZnVuYzpgX19tdWxfX2AgaW5zdGVhZC4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSA6ZnVuYzpgX19tdWxfX2AgaW5zdGVhZC4KIAogICAgUmV0dXJuIGBgYSAqIGJgYCB3aGVyZSAqYSogaXMgYSBzZXF1ZW5jZSBhbmQgKmIqIGlzIGFuIGludGVnZXIuCiAKQEAgLTI5NSw3ICsyOTUsNyBAQAogICAgU2V0IHRoZSBzbGljZSBvZiAqYSogZnJvbSBpbmRleCAqYiogdG8gaW5kZXggKmMtMSogdG8gdGhlIHNlcXVlbmNlICp2Ki4KIAogICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgOmZ1bmM6YHNldGl0ZW1gIHdpdGggYSBzbGljZQorICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLnguICBVc2UgOmZ1bmM6YHNldGl0ZW1gIHdpdGggYSBzbGljZQogICAgICAgaW5kZXguCiAKIEV4YW1wbGUgdXNlIG9mIG9wZXJhdG9yIGZ1bmN0aW9uczo6CkBAIC0zOTksOCArMzk5LDggQEAKIC4uIGZ1bmN0aW9uOjogaXJlcGVhdChhLCBiKQogICAgICAgICAgICAgICBfX2lyZXBlYXRfXyhhLCBiKQogCi0gICAuLiBkZXByZWNhdGVkOjogMi42Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gUHl0aG9uIDMuMC4gIFVzZSA6ZnVuYzpgX19pbXVsX19gIGluc3RlYWQuCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBVc2UgOmZ1bmM6YF9faW11bF9fYCBpbnN0ZWFkLgogCiAgICBgYGEgPSBpcmVwZWF0KGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgKj0gYmBgIHdoZXJlICphKiBpcyBhIHNlcXVlbmNlIGFuZAogICAgKmIqIGlzIGFuIGludGVnZXIuCkBAIC00NTgsOCArNDU4LDggQEAKIAogLi4gZnVuY3Rpb246OiBpc01hcHBpbmdUeXBlKG9iaikKIAotICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgYGBpc2luc3RhbmNlKHgsIGNvbGxlY3Rpb25zLk1hcHBpbmcpYGAgaW5zdGVhZC4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgIFVzZSBgYGlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuTWFwcGluZylgYCBpbnN0ZWFkLgogCiAgICBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCAqb2JqKiBzdXBwb3J0cyB0aGUgbWFwcGluZyBpbnRlcmZhY2UuIFRoaXMgaXMgdHJ1ZSBmb3IKICAgIGRpY3Rpb25hcmllcyBhbmQgYWxsIGluc3RhbmNlIG9iamVjdHMgZGVmaW5pbmcgOm1ldGg6YF9fZ2V0aXRlbV9fYC4KQEAgLTQ2Nyw4ICs0NjcsOCBAQAogCiAuLiBmdW5jdGlvbjo6IGlzTnVtYmVyVHlwZShvYmopCiAKLSAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjYKLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVtb3ZlZCBpbiBQeXRob24gMy4wLiAgVXNlIGBgaXNpbnN0YW5jZSh4LCBudW1iZXJzLk51bWJlcilgYCBpbnN0ZWFkLgorICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVXNlIGBgaXNpbnN0YW5jZSh4LCBudW1iZXJzLk51bWJlcilgYCBpbnN0ZWFkLgogCiAgICBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCAqb2JqKiByZXByZXNlbnRzIGEgbnVtYmVyLiAgVGhpcyBpcyB0cnVlIGZvciBhbGwKICAgIG51bWVyaWMgdHlwZXMgaW1wbGVtZW50ZWQgaW4gQy4KQEAgLTQ3Niw4ICs0NzYsOCBAQAogCiAuLiBmdW5jdGlvbjo6IGlzU2VxdWVuY2VUeXBlKG9iaikKIAotICAgLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyByZW1vdmVkIGluIFB5dGhvbiAzLjAuICBVc2UgYGBpc2luc3RhbmNlKHgsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKWBgIGluc3RlYWQuCisgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICBVc2UgYGBpc2luc3RhbmNlKHgsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKWBgIGluc3RlYWQuCiAKICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0ICpvYmoqIHN1cHBvcnRzIHRoZSBzZXF1ZW5jZSBwcm90b2NvbC4gVGhpcyByZXR1cm5zIHRydWUKICAgIGZvciBhbGwgb2JqZWN0cyB3aGljaCBkZWZpbmUgc2VxdWVuY2UgbWV0aG9kcyBpbiBDLCBhbmQgZm9yIGFsbCBpbnN0YW5jZSBvYmplY3RzCkBAIC00OTYsNyArNDk2LDIzIEBACiAgICBhdHRyaWJ1dGUgaXMgcmVxdWVzdGVkLCByZXR1cm5zIGEgdHVwbGUgb2YgYXR0cmlidXRlcy4gQWZ0ZXIsCiAgICBgYGYgPSBhdHRyZ2V0dGVyKCduYW1lJylgYCwgdGhlIGNhbGwgYGBmKGIpYGAgcmV0dXJucyBgYGIubmFtZWBgLiAgQWZ0ZXIsCiAgICBgYGYgPSBhdHRyZ2V0dGVyKCduYW1lJywgJ2RhdGUnKWBgLCB0aGUgY2FsbCBgYGYoYilgYCByZXR1cm5zIGBgKGIubmFtZSwKLSAgIGIuZGF0ZSlgYC4KKyAgIGIuZGF0ZSlgYC4gIEVxdWl2YWxlbnQgdG86OgorCisgICAgICBkZWYgYXR0cmdldHRlcigqaXRlbXMpOgorICAgICAgICAgIGlmIGxlbihpdGVtcykgPT0gMToKKyAgICAgICAgICAgICAgYXR0ciA9IGl0ZW1zWzBdCisgICAgICAgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZV9hdHRyKG9iaiwgYXR0cikKKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKHJlc29sdmVfYXR0KG9iaiwgYXR0cikgZm9yIGF0dHIgaW4gaXRlbXMpCisgICAgICAgICAgcmV0dXJuIGcKKworICAgICAgZGVmIHJlc29sdmVfYXR0cihvYmosIGF0dHIpOgorICAgICAgICAgIGZvciBuYW1lIGluIGF0dHIuc3BsaXQoIi4iKToKKyAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG5hbWUpCisgICAgICAgICAgcmV0dXJuIG9iagorCiAKICAgIFRoZSBhdHRyaWJ1dGUgbmFtZXMgY2FuIGFsc28gY29udGFpbiBkb3RzOyBhZnRlciBgYGYgPSBhdHRyZ2V0dGVyKCdkYXRlLm1vbnRoJylgYCwKICAgIHRoZSBjYWxsIGBgZihiKWBgIHJldHVybnMgYGBiLmRhdGUubW9udGhgYC4KQEAgLTUxNiwxNSArNTMyLDE1IEBACiAgICBvcGVyYW5kJ3MgOm1ldGg6YF9fZ2V0aXRlbV9fYCBtZXRob2QuICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgc3BlY2lmaWVkLAogICAgcmV0dXJucyBhIHR1cGxlIG9mIGxvb2t1cCB2YWx1ZXMuICBFcXVpdmFsZW50IHRvOjoKIAotICAgICAgICBkZWYgaXRlbWdldHRlcigqaXRlbXMpOgotICAgICAgICAgICAgaWYgbGVuKGl0ZW1zKSA9PSAxOgotICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1swXQotICAgICAgICAgICAgICAgIGRlZiBnKG9iaik6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVmIGcob2JqKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG9ialtpdGVtXSBmb3IgaXRlbSBpbiBpdGVtcykKLSAgICAgICAgICAgIHJldHVybiBnCisgICAgICBkZWYgaXRlbWdldHRlcigqaXRlbXMpOgorICAgICAgICAgIGlmIGxlbihpdGVtcykgPT0gMToKKyAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1zWzBdCisgICAgICAgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2l0ZW1dCisgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgICAgICAgIHJldHVybiB0dXBsZShvYmpbaXRlbV0gZm9yIGl0ZW0gaW4gaXRlbXMpCisgICAgICAgICAgcmV0dXJuIGcKIAogICAgVGhlIGl0ZW1zIGNhbiBiZSBhbnkgdHlwZSBhY2NlcHRlZCBieSB0aGUgb3BlcmFuZCdzIDptZXRoOmBfX2dldGl0ZW1fX2AKICAgIG1ldGhvZC4gIERpY3Rpb25hcmllcyBhY2NlcHQgYW55IGhhc2hhYmxlIHZhbHVlLiAgTGlzdHMsIHR1cGxlcywgYW5kCkBAIC01NDUsMTIgKzU2MSwxMiBAQAogICAgRXhhbXBsZSBvZiB1c2luZyA6ZnVuYzpgaXRlbWdldHRlcmAgdG8gcmV0cmlldmUgc3BlY2lmaWMgZmllbGRzIGZyb20gYQogICAgdHVwbGUgcmVjb3JkOgogCi0gICAgICAgPj4+IGludmVudG9yeSA9IFsoJ2FwcGxlJywgMyksICgnYmFuYW5hJywgMiksICgncGVhcicsIDUpLCAoJ29yYW5nZScsIDEpXQotICAgICAgID4+PiBnZXRjb3VudCA9IGl0ZW1nZXR0ZXIoMSkKLSAgICAgICA+Pj4gbWFwKGdldGNvdW50LCBpbnZlbnRvcnkpCi0gICAgICAgWzMsIDIsIDUsIDFdCi0gICAgICAgPj4+IHNvcnRlZChpbnZlbnRvcnksIGtleT1nZXRjb3VudCkKLSAgICAgICBbKCdvcmFuZ2UnLCAxKSwgKCdiYW5hbmEnLCAyKSwgKCdhcHBsZScsIDMpLCAoJ3BlYXInLCA1KV0KKyAgICAgID4+PiBpbnZlbnRvcnkgPSBbKCdhcHBsZScsIDMpLCAoJ2JhbmFuYScsIDIpLCAoJ3BlYXInLCA1KSwgKCdvcmFuZ2UnLCAxKV0KKyAgICAgID4+PiBnZXRjb3VudCA9IGl0ZW1nZXR0ZXIoMSkKKyAgICAgID4+PiBtYXAoZ2V0Y291bnQsIGludmVudG9yeSkKKyAgICAgIFszLCAyLCA1LCAxXQorICAgICAgPj4+IHNvcnRlZChpbnZlbnRvcnksIGtleT1nZXRjb3VudCkKKyAgICAgIFsoJ29yYW5nZScsIDEpLCAoJ2JhbmFuYScsIDIpLCAoJ2FwcGxlJywgMyksICgncGVhcicsIDUpXQogCiAKIC4uIGZ1bmN0aW9uOjogbWV0aG9kY2FsbGVyKG5hbWVbLCBhcmdzLi4uXSkKQEAgLTU1OSw3ICs1NzUsMTIgQEAKICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZC9vciBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZXkgd2lsbCBiZSBnaXZlbgogICAgdG8gdGhlIG1ldGhvZCBhcyB3ZWxsLiAgQWZ0ZXIgYGBmID0gbWV0aG9kY2FsbGVyKCduYW1lJylgYCwgdGhlIGNhbGwgYGBmKGIpYGAKICAgIHJldHVybnMgYGBiLm5hbWUoKWBgLiAgQWZ0ZXIgYGBmID0gbWV0aG9kY2FsbGVyKCduYW1lJywgJ2ZvbycsIGJhcj0xKWBgLCB0aGUKLSAgIGNhbGwgYGBmKGIpYGAgcmV0dXJucyBgYGIubmFtZSgnZm9vJywgYmFyPTEpYGAuCisgICBjYWxsIGBgZihiKWBgIHJldHVybnMgYGBiLm5hbWUoJ2ZvbycsIGJhcj0xKWBgLiAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgIGRlZiBtZXRob2RjYWxsZXIobmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICBkZWYgY2FsbGVyKG9iaik6CisgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgbmFtZSkoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgIHJldHVybiBjYWxsZXIKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdAppbmRleCBjNTQzYmQ5Li5kNGIxMjFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CkBAIC0xLDEwICsxLDE1IEBACi06bW9kOmBvcHRwYXJzZWAgLS0tIE1vcmUgcG93ZXJmdWwgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgb3B0cGFyc2VgIC0tLSBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogb3B0cGFyc2UKLSAgIDpzeW5vcHNpczogTW9yZSBjb252ZW5pZW50LCBmbGV4aWJsZSwgYW5kIHBvd2VyZnVsIGNvbW1hbmQtbGluZSBwYXJzaW5nIGxpYnJhcnkuCi0uLiBtb2R1bGVhdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CisgICA6c3lub3BzaXM6IENvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZyBsaWJyYXJ5LgorICAgOmRlcHJlY2F0ZWQ6CiAKKy4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgIFRoZSA6bW9kOmBvcHRwYXJzZWAgbW9kdWxlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgbm90IGJlIGRldmVsb3BlZCBmdXJ0aGVyOworICAgZGV2ZWxvcG1lbnQgd2lsbCBjb250aW51ZSB3aXRoIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgorCisuLiBtb2R1bGVhdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAKIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCkBAIC01OSw5ICs2NCw5IEBACiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgIHVzYWdlOiA8eW91cnNjcmlwdD4gW29wdGlvbnNdCisgICBVc2FnZTogPHlvdXJzY3JpcHQ+IFtvcHRpb25zXQogCi0gICBvcHRpb25zOgorICAgT3B0aW9uczoKICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKICAgICAgLWYgRklMRSwgLS1maWxlPUZJTEUgIHdyaXRlIHJlcG9ydCB0byBGSUxFCiAgICAgIC1xLCAtLXF1aWV0ICAgICAgICAgICBkb24ndCBwcmludCBzdGF0dXMgbWVzc2FnZXMgdG8gc3Rkb3V0CkBAIC0xMDIsMjYgKzEwNywyNiBAQAogICAgYW4gYXJndW1lbnQgdXNlZCB0byBzdXBwbHkgZXh0cmEgaW5mb3JtYXRpb24gdG8gZ3VpZGUgb3IgY3VzdG9taXplIHRoZQogICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS4gIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBzeW50YXhlcyBmb3Igb3B0aW9uczsgdGhlCiAgICB0cmFkaXRpb25hbCBVbml4IHN5bnRheCBpcyBhIGh5cGhlbiAoIi0iKSBmb2xsb3dlZCBieSBhIHNpbmdsZSBsZXR0ZXIsCi0gICBlLmcuIGBgIi14ImBgIG9yIGBgIi1GImBgLiAgQWxzbywgdHJhZGl0aW9uYWwgVW5peCBzeW50YXggYWxsb3dzIG11bHRpcGxlCi0gICBvcHRpb25zIHRvIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGFyZ3VtZW50LCBlLmcuICBgYCIteCAtRiJgYCBpcyBlcXVpdmFsZW50Ci0gICB0byBgYCIteEYiYGAuICBUaGUgR05VIHByb2plY3QgaW50cm9kdWNlZCBgYCItLSJgYCBmb2xsb3dlZCBieSBhIHNlcmllcyBvZgotICAgaHlwaGVuLXNlcGFyYXRlZCB3b3JkcywgZS5nLiAgYGAiLS1maWxlImBgIG9yIGBgIi0tZHJ5LXJ1biJgYC4gIFRoZXNlIGFyZSB0aGUKKyAgIGUuZy4gYGAteGBgIG9yIGBgLUZgYC4gIEFsc28sIHRyYWRpdGlvbmFsIFVuaXggc3ludGF4IGFsbG93cyBtdWx0aXBsZQorICAgb3B0aW9ucyB0byBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSBhcmd1bWVudCwgZS5nLiBgYC14IC1GYGAgaXMgZXF1aXZhbGVudAorICAgdG8gYGAteEZgYC4gIFRoZSBHTlUgcHJvamVjdCBpbnRyb2R1Y2VkIGBgLS1gYCBmb2xsb3dlZCBieSBhIHNlcmllcyBvZgorICAgaHlwaGVuLXNlcGFyYXRlZCB3b3JkcywgZS5nLiBgYC0tZmlsZWBgIG9yIGBgLS1kcnktcnVuYGAuICBUaGVzZSBhcmUgdGhlCiAgICBvbmx5IHR3byBvcHRpb24gc3ludGF4ZXMgcHJvdmlkZWQgYnkgOm1vZDpgb3B0cGFyc2VgLgogCiAgICBTb21lIG90aGVyIG9wdGlvbiBzeW50YXhlcyB0aGF0IHRoZSB3b3JsZCBoYXMgc2VlbiBpbmNsdWRlOgogCi0gICAqIGEgaHlwaGVuIGZvbGxvd2VkIGJ5IGEgZmV3IGxldHRlcnMsIGUuZy4gYGAiLXBmImBgICh0aGlzIGlzICpub3QqIHRoZSBzYW1lCisgICAqIGEgaHlwaGVuIGZvbGxvd2VkIGJ5IGEgZmV3IGxldHRlcnMsIGUuZy4gYGAtcGZgYCAodGhpcyBpcyAqbm90KiB0aGUgc2FtZQogICAgICBhcyBtdWx0aXBsZSBvcHRpb25zIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGFyZ3VtZW50KQogCi0gICAqIGEgaHlwaGVuIGZvbGxvd2VkIGJ5IGEgd2hvbGUgd29yZCwgZS5nLiBgYCItZmlsZSJgYCAodGhpcyBpcyB0ZWNobmljYWxseQorICAgKiBhIGh5cGhlbiBmb2xsb3dlZCBieSBhIHdob2xlIHdvcmQsIGUuZy4gYGAtZmlsZWBgICh0aGlzIGlzIHRlY2huaWNhbGx5CiAgICAgIGVxdWl2YWxlbnQgdG8gdGhlIHByZXZpb3VzIHN5bnRheCwgYnV0IHRoZXkgYXJlbid0IHVzdWFsbHkgc2VlbiBpbiB0aGUgc2FtZQogICAgICBwcm9ncmFtKQogCiAgICAqIGEgcGx1cyBzaWduIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGxldHRlciwgb3IgYSBmZXcgbGV0dGVycywgb3IgYSB3b3JkLCBlLmcuCi0gICAgIGBgIitmImBgLCBgYCIrcmdiImBgCisgICAgIGBgK2ZgYCwgYGArcmdiYGAKIAotICAgKiBhIHNsYXNoIGZvbGxvd2VkIGJ5IGEgbGV0dGVyLCBvciBhIGZldyBsZXR0ZXJzLCBvciBhIHdvcmQsIGUuZy4gYGAiL2YiYGAsCi0gICAgIGBgIi9maWxlImBgCisgICAqIGEgc2xhc2ggZm9sbG93ZWQgYnkgYSBsZXR0ZXIsIG9yIGEgZmV3IGxldHRlcnMsIG9yIGEgd29yZCwgZS5nLiBgYC9mYGAsCisgICAgIGBgL2ZpbGVgYAogCiAgICBUaGVzZSBvcHRpb24gc3ludGF4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgOm1vZDpgb3B0cGFyc2VgLCBhbmQgdGhleSBuZXZlcgogICAgd2lsbCBiZS4gIFRoaXMgaXMgZGVsaWJlcmF0ZTogdGhlIGZpcnN0IHRocmVlIGFyZSBub24tc3RhbmRhcmQgb24gYW55CkBAIC0xNDksOSArMTU0LDkgQEAKICAgIFR5cGljYWxseSwgYSBnaXZlbiBvcHRpb24gZWl0aGVyIHRha2VzIGFuIGFyZ3VtZW50IG9yIGl0IGRvZXNuJ3QuIExvdHMgb2YKICAgIHBlb3BsZSB3YW50IGFuICJvcHRpb25hbCBvcHRpb24gYXJndW1lbnRzIiBmZWF0dXJlLCBtZWFuaW5nIHRoYXQgc29tZSBvcHRpb25zCiAgICB3aWxsIHRha2UgYW4gYXJndW1lbnQgaWYgdGhleSBzZWUgaXQsIGFuZCB3b24ndCBpZiB0aGV5IGRvbid0LiAgVGhpcyBpcwotICAgc29tZXdoYXQgY29udHJvdmVyc2lhbCwgYmVjYXVzZSBpdCBtYWtlcyBwYXJzaW5nIGFtYmlndW91czogaWYgYGAiLWEiYGAgdGFrZXMKLSAgIGFuIG9wdGlvbmFsIGFyZ3VtZW50IGFuZCBgYCItYiJgYCBpcyBhbm90aGVyIG9wdGlvbiBlbnRpcmVseSwgaG93IGRvIHdlCi0gICBpbnRlcnByZXQgYGAiLWFiImBgPyAgQmVjYXVzZSBvZiB0aGlzIGFtYmlndWl0eSwgOm1vZDpgb3B0cGFyc2VgIGRvZXMgbm90CisgICBzb21ld2hhdCBjb250cm92ZXJzaWFsLCBiZWNhdXNlIGl0IG1ha2VzIHBhcnNpbmcgYW1iaWd1b3VzOiBpZiBgYC1hYGAgdGFrZXMKKyAgIGFuIG9wdGlvbmFsIGFyZ3VtZW50IGFuZCBgYC1iYGAgaXMgYW5vdGhlciBvcHRpb24gZW50aXJlbHksIGhvdyBkbyB3ZQorICAgaW50ZXJwcmV0IGBgLWFiYGA/ICBCZWNhdXNlIG9mIHRoaXMgYW1iaWd1aXR5LCA6bW9kOmBvcHRwYXJzZWAgZG9lcyBub3QKICAgIHN1cHBvcnQgdGhpcyBmZWF0dXJlLgogCiBwb3NpdGlvbmFsIGFyZ3VtZW50CkBAIC0xNjksOSArMTc0LDkgQEAKIAogICAgcHJvZyAtdiAtLXJlcG9ydCAvdG1wL3JlcG9ydC50eHQgZm9vIGJhcgogCi1gYCItdiJgYCBhbmQgYGAiLS1yZXBvcnQiYGAgYXJlIGJvdGggb3B0aW9ucy4gIEFzc3VtaW5nIHRoYXQgOm9wdGlvbjpgLS1yZXBvcnRgCi10YWtlcyBvbmUgYXJndW1lbnQsIGBgIi90bXAvcmVwb3J0LnR4dCJgYCBpcyBhbiBvcHRpb24gYXJndW1lbnQuICBgYCJmb28iYGAgYW5kCi1gYCJiYXIiYGAgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorYGAtdmBgIGFuZCBgYC0tcmVwb3J0YGAgYXJlIGJvdGggb3B0aW9ucy4gIEFzc3VtaW5nIHRoYXQgYGAtLXJlcG9ydGBgCit0YWtlcyBvbmUgYXJndW1lbnQsIGBgL3RtcC9yZXBvcnQudHh0YGAgaXMgYW4gb3B0aW9uIGFyZ3VtZW50LiAgYGBmb29gYCBhbmQKK2BgYmFyYGAgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogCiAKIC4uIF9vcHRwYXJzZS13aGF0LW9wdGlvbnMtZm9yOgpAQCAtMjU2LDcgKzI2MSw3IEBACiAgICBwYXJzZXIuYWRkX29wdGlvbihvcHRfc3RyLCAuLi4sCiAgICAgICAgICAgICAgICAgICAgICBhdHRyPXZhbHVlLCAuLi4pCiAKLUVhY2ggb3B0aW9uIGhhcyBvbmUgb3IgbW9yZSBvcHRpb24gc3RyaW5ncywgc3VjaCBhcyBgYCItZiJgYCBvciBgYCItLWZpbGUiYGAsCitFYWNoIG9wdGlvbiBoYXMgb25lIG9yIG1vcmUgb3B0aW9uIHN0cmluZ3MsIHN1Y2ggYXMgYGAtZmBgIG9yIGBgLS1maWxlYGAsCiBhbmQgc2V2ZXJhbCBvcHRpb24gYXR0cmlidXRlcyB0aGF0IHRlbGwgOm1vZDpgb3B0cGFyc2VgIHdoYXQgdG8gZXhwZWN0IGFuZCB3aGF0CiB0byBkbyB3aGVuIGl0IGVuY291bnRlcnMgdGhhdCBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZS4KIApAQCAtMjg1LDcgKzI5MCw3IEBACiA6bWV0aDpgcGFyc2VfYXJnc2AgcmV0dXJucyB0d28gdmFsdWVzOgogCiAqIGBgb3B0aW9uc2BgLCBhbiBvYmplY3QgY29udGFpbmluZyB2YWx1ZXMgZm9yIGFsbCBvZiB5b3VyIG9wdGlvbnMtLS1lLmcuIGlmCi0gIGBgIi0tZmlsZSJgYCB0YWtlcyBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIHRoZW4gYGBvcHRpb25zLmZpbGVgYCB3aWxsIGJlIHRoZQorICBgYC0tZmlsZWBgIHRha2VzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgdGhlbiBgYG9wdGlvbnMuZmlsZWBgIHdpbGwgYmUgdGhlCiAgIGZpbGVuYW1lIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLCBvciBgYE5vbmVgYCBpZiB0aGUgdXNlciBkaWQgbm90IHN1cHBseSB0aGF0CiAgIG9wdGlvbgogCkBAIC0zMzEsOCArMzM2LDggQEAKICAgIGFyZ3MgPSBbIi1mIiwgImZvby50eHQiXQogICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKIAotV2hlbiA6bW9kOmBvcHRwYXJzZWAgc2VlcyB0aGUgb3B0aW9uIHN0cmluZyBgYCItZiJgYCwgaXQgY29uc3VtZXMgdGhlIG5leHQKLWFyZ3VtZW50LCBgYCJmb28udHh0ImBgLCBhbmQgc3RvcmVzIGl0IGluIGBgb3B0aW9ucy5maWxlbmFtZWBgLiAgU28sIGFmdGVyIHRoaXMKK1doZW4gOm1vZDpgb3B0cGFyc2VgIHNlZXMgdGhlIG9wdGlvbiBzdHJpbmcgYGAtZmBgLCBpdCBjb25zdW1lcyB0aGUgbmV4dAorYXJndW1lbnQsIGBgZm9vLnR4dGBgLCBhbmQgc3RvcmVzIGl0IGluIGBgb3B0aW9ucy5maWxlbmFtZWBgLiAgU28sIGFmdGVyIHRoaXMKIGNhbGwgdG8gOm1ldGg6YHBhcnNlX2FyZ3NgLCBgYG9wdGlvbnMuZmlsZW5hbWVgYCBpcyBgYCJmb28udHh0ImBgLgogCiBTb21lIG90aGVyIG9wdGlvbiB0eXBlcyBzdXBwb3J0ZWQgYnkgOm1vZDpgb3B0cGFyc2VgIGFyZSBgYGludGBgIGFuZCBgYGZsb2F0YGAuCkBAIC0zNDQsMTMgKzM0OSwxMyBAQAogQWxzbywgdGhlcmUncyBubyBleHBsaWNpdCBhY3Rpb24sIHNpbmNlIHRoZSBkZWZhdWx0IGlzIGBgc3RvcmVgYC4KIAogTGV0J3MgcGFyc2UgYW5vdGhlciBmYWtlIGNvbW1hbmQtbGluZS4gIFRoaXMgdGltZSwgd2UnbGwgamFtIHRoZSBvcHRpb24gYXJndW1lbnQKLXJpZ2h0IHVwIGFnYWluc3QgdGhlIG9wdGlvbjogc2luY2UgYGAiLW40MiJgYCAob25lIGFyZ3VtZW50KSBpcyBlcXVpdmFsZW50IHRvCi1gYCItbiA0MiJgYCAodHdvIGFyZ3VtZW50cyksIHRoZSBjb2RlIDo6CityaWdodCB1cCBhZ2FpbnN0IHRoZSBvcHRpb246IHNpbmNlIGBgLW40MmBgIChvbmUgYXJndW1lbnQpIGlzIGVxdWl2YWxlbnQgdG8KK2BgLW4gNDJgYCAodHdvIGFyZ3VtZW50cyksIHRoZSBjb2RlIDo6CiAKICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKFsiLW40MiJdKQogICAgcHJpbnQgb3B0aW9ucy5udW0KIAotd2lsbCBwcmludCBgYCI0MiJgYC4KK3dpbGwgcHJpbnQgYGA0MmBgLgogCiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHR5cGUsIDptb2Q6YG9wdHBhcnNlYCBhc3N1bWVzIGBgc3RyaW5nYGAuICBDb21iaW5lZCB3aXRoCiB0aGUgZmFjdCB0aGF0IHRoZSBkZWZhdWx0IGFjdGlvbiBpcyBgYHN0b3JlYGAsIHRoYXQgbWVhbnMgb3VyIGZpcnN0IGV4YW1wbGUgY2FuCkBAIC0zNjAsOSArMzY1LDkgQEAKIAogSWYgeW91IGRvbid0IHN1cHBseSBhIGRlc3RpbmF0aW9uLCA6bW9kOmBvcHRwYXJzZWAgZmlndXJlcyBvdXQgYSBzZW5zaWJsZQogZGVmYXVsdCBmcm9tIHRoZSBvcHRpb24gc3RyaW5nczogaWYgdGhlIGZpcnN0IGxvbmcgb3B0aW9uIHN0cmluZyBpcwotYGAiLS1mb28tYmFyImBgLCB0aGVuIHRoZSBkZWZhdWx0IGRlc3RpbmF0aW9uIGlzIGBgZm9vX2JhcmBgLiAgSWYgdGhlcmUgYXJlIG5vCitgYC0tZm9vLWJhcmBgLCB0aGVuIHRoZSBkZWZhdWx0IGRlc3RpbmF0aW9uIGlzIGBgZm9vX2JhcmBgLiAgSWYgdGhlcmUgYXJlIG5vCiBsb25nIG9wdGlvbiBzdHJpbmdzLCA6bW9kOmBvcHRwYXJzZWAgbG9va3MgYXQgdGhlIGZpcnN0IHNob3J0IG9wdGlvbiBzdHJpbmc6IHRoZQotZGVmYXVsdCBkZXN0aW5hdGlvbiBmb3IgYGAiLWYiYGAgaXMgYGBmYGAuCitkZWZhdWx0IGRlc3RpbmF0aW9uIGZvciBgYC1mYGAgaXMgYGBmYGAuCiAKIDptb2Q6YG9wdHBhcnNlYCBhbHNvIGluY2x1ZGVzIGJ1aWx0LWluIGBgbG9uZ2BgIGFuZCBgYGNvbXBsZXhgYCB0eXBlcy4gIEFkZGluZwogdHlwZXMgaXMgY292ZXJlZCBpbiBzZWN0aW9uIDpyZWY6YG9wdHBhcnNlLWV4dGVuZGluZy1vcHRwYXJzZWAuCkBAIC0zNzYsNyArMzgxLDcgQEAKIEZsYWcgb3B0aW9ucy0tLXNldCBhIHZhcmlhYmxlIHRvIHRydWUgb3IgZmFsc2Ugd2hlbiBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIHNlZW4KIC0tLWFyZSBxdWl0ZSBjb21tb24uICA6bW9kOmBvcHRwYXJzZWAgc3VwcG9ydHMgdGhlbSB3aXRoIHR3byBzZXBhcmF0ZSBhY3Rpb25zLAogYGBzdG9yZV90cnVlYGAgYW5kIGBgc3RvcmVfZmFsc2VgYC4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgaGF2ZSBhIGBgdmVyYm9zZWBgCi1mbGFnIHRoYXQgaXMgdHVybmVkIG9uIHdpdGggYGAiLXYiYGAgYW5kIG9mZiB3aXRoIGBgIi1xImBgOjoKK2ZsYWcgdGhhdCBpcyB0dXJuZWQgb24gd2l0aCBgYC12YGAgYW5kIG9mZiB3aXRoIGBgLXFgYDo6CiAKICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InZlcmJvc2UiKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiKQpAQCAtMzg1LDggKzM5MCw4IEBACiBPSy4gIChJdCBqdXN0IG1lYW5zIHlvdSBoYXZlIHRvIGJlIGEgYml0IGNhcmVmdWwgd2hlbiBzZXR0aW5nIGRlZmF1bHQgdmFsdWVzLS0tCiBzZWUgYmVsb3cuKQogCi1XaGVuIDptb2Q6YG9wdHBhcnNlYCBlbmNvdW50ZXJzIGBgIi12ImBgIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IHNldHMKLWBgb3B0aW9ucy52ZXJib3NlYGAgdG8gYGBUcnVlYGA7IHdoZW4gaXQgZW5jb3VudGVycyBgYCItcSJgYCwKK1doZW4gOm1vZDpgb3B0cGFyc2VgIGVuY291bnRlcnMgYGAtdmBgIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IHNldHMKK2Bgb3B0aW9ucy52ZXJib3NlYGAgdG8gYGBUcnVlYGA7IHdoZW4gaXQgZW5jb3VudGVycyBgYC1xYGAsCiBgYG9wdGlvbnMudmVyYm9zZWBgIGlzIHNldCB0byBgYEZhbHNlYGAuCiAKIApAQCAtNDI2LDcgKzQzMSw3IEBACiBjb21tYW5kIGxpbmUgaXMgcGFyc2VkLgogCiBGaXJzdCwgY29uc2lkZXIgdGhlIHZlcmJvc2UvcXVpZXQgZXhhbXBsZS4gIElmIHdlIHdhbnQgOm1vZDpgb3B0cGFyc2VgIHRvIHNldAotYGB2ZXJib3NlYGAgdG8gYGBUcnVlYGAgdW5sZXNzIGBgIi1xImBgIGlzIHNlZW4sIHRoZW4gd2UgY2FuIGRvIHRoaXM6OgorYGB2ZXJib3NlYGAgdG8gYGBUcnVlYGAgdW5sZXNzIGBgLXFgYCBpcyBzZWVuLCB0aGVuIHdlIGNhbiBkbyB0aGlzOjoKIAogICAgcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idmVyYm9zZSIsIGRlZmF1bHQ9VHJ1ZSkKICAgIHBhcnNlci5hZGRfb3B0aW9uKCItcSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ2ZXJib3NlIikKQEAgLTQ4NCwxNSArNDg5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJpbnRlcmFjdGlvbiBtb2RlOiBub3ZpY2UsIGludGVybWVkaWF0ZSwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAib3IgZXhwZXJ0IFtkZWZhdWx0OiAlZGVmYXVsdF0iKQogCi1JZiA6bW9kOmBvcHRwYXJzZWAgZW5jb3VudGVycyBlaXRoZXIgYGAiLWgiYGAgb3IgYGAiLS1oZWxwImBgIG9uIHRoZQorSWYgOm1vZDpgb3B0cGFyc2VgIGVuY291bnRlcnMgZWl0aGVyIGBgLWhgYCBvciBgYC0taGVscGBgIG9uIHRoZQogY29tbWFuZC1saW5lLCBvciBpZiB5b3UganVzdCBjYWxsIDptZXRoOmBwYXJzZXIucHJpbnRfaGVscGAsIGl0IHByaW50cyB0aGUKIGZvbGxvd2luZyB0byBzdGFuZGFyZCBvdXRwdXQ6CiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgIHVzYWdlOiA8eW91cnNjcmlwdD4gW29wdGlvbnNdIGFyZzEgYXJnMgorICAgVXNhZ2U6IDx5b3Vyc2NyaXB0PiBbb3B0aW9uc10gYXJnMSBhcmcyCiAKLSAgIG9wdGlvbnM6CisgICBPcHRpb25zOgogICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAogICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgbWFrZSBsb3RzIG9mIG5vaXNlIFtkZWZhdWx0XQogICAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgdmV3d3kgcXVpZXQgKEknbSBodW50aW5nIHdhYmJpdHMpCkBAIC01MTEsMTIgKzUxNiwxMiBAQAogCiAgICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gYXJnMSBhcmcyIgogCi0gIDptb2Q6YG9wdHBhcnNlYCBleHBhbmRzIGBgIiVwcm9nImBgIGluIHRoZSB1c2FnZSBzdHJpbmcgdG8gdGhlIG5hbWUgb2YgdGhlCisgIDptb2Q6YG9wdHBhcnNlYCBleHBhbmRzIGBgJXByb2dgYCBpbiB0aGUgdXNhZ2Ugc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZQogICBjdXJyZW50IHByb2dyYW0sIGkuZS4gYGBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKWBgLiAgVGhlIGV4cGFuZGVkIHN0cmluZwogICBpcyB0aGVuIHByaW50ZWQgYmVmb3JlIHRoZSBkZXRhaWxlZCBvcHRpb24gaGVscC4KIAogICBJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdXNhZ2Ugc3RyaW5nLCA6bW9kOmBvcHRwYXJzZWAgdXNlcyBhIGJsYW5kIGJ1dCBzZW5zaWJsZQotICBkZWZhdWx0OiBgYCJ1c2FnZTogJXByb2cgW29wdGlvbnNdImBgLCB3aGljaCBpcyBmaW5lIGlmIHlvdXIgc2NyaXB0IGRvZXNuJ3QKKyAgZGVmYXVsdDogYGAiVXNhZ2U6ICVwcm9nIFtvcHRpb25zXSJgYCwgd2hpY2ggaXMgZmluZSBpZiB5b3VyIHNjcmlwdCBkb2Vzbid0CiAgIHRha2UgYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzLgogCiAqIGV2ZXJ5IG9wdGlvbiBkZWZpbmVzIGEgaGVscCBzdHJpbmcsIGFuZCBkb2Vzbid0IHdvcnJ5IGFib3V0IGxpbmUtd3JhcHBpbmctLS0KQEAgLTUyOSwxNyArNTM0LDE3IEBACiAgICAgIC1tIE1PREUsIC0tbW9kZT1NT0RFCiAKICAgSGVyZSwgIk1PREUiIGlzIGNhbGxlZCB0aGUgbWV0YS12YXJpYWJsZTogaXQgc3RhbmRzIGZvciB0aGUgYXJndW1lbnQgdGhhdCB0aGUKLSAgdXNlciBpcyBleHBlY3RlZCB0byBzdXBwbHkgdG8gOm9wdGlvbjpgLW1gLzpvcHRpb246YC0tbW9kZWAuICBCeSBkZWZhdWx0LAorICB1c2VyIGlzIGV4cGVjdGVkIHRvIHN1cHBseSB0byBgYC1tYGAvYGAtLW1vZGVgYC4gIEJ5IGRlZmF1bHQsCiAgIDptb2Q6YG9wdHBhcnNlYCBjb252ZXJ0cyB0aGUgZGVzdGluYXRpb24gdmFyaWFibGUgbmFtZSB0byB1cHBlcmNhc2UgYW5kIHVzZXMKICAgdGhhdCBmb3IgdGhlIG1ldGEtdmFyaWFibGUuICBTb21ldGltZXMsIHRoYXQncyBub3Qgd2hhdCB5b3Ugd2FudC0tLWZvcgotICBleGFtcGxlLCB0aGUgOm9wdGlvbjpgLS1maWxlbmFtZWAgb3B0aW9uIGV4cGxpY2l0bHkgc2V0cyBgYG1ldGF2YXI9IkZJTEUiYGAsCisgIGV4YW1wbGUsIHRoZSBgYC0tZmlsZW5hbWVgYCBvcHRpb24gZXhwbGljaXRseSBzZXRzIGBgbWV0YXZhcj0iRklMRSJgYCwKICAgcmVzdWx0aW5nIGluIHRoaXMgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgb3B0aW9uIGRlc2NyaXB0aW9uOjoKIAogICAgICAtZiBGSUxFLCAtLWZpbGVuYW1lPUZJTEUKIAogICBUaGlzIGlzIGltcG9ydGFudCBmb3IgbW9yZSB0aGFuIGp1c3Qgc2F2aW5nIHNwYWNlLCB0aG91Z2g6IHRoZSBtYW51YWxseQotICB3cml0dGVuIGhlbHAgdGV4dCB1c2VzIHRoZSBtZXRhLXZhcmlhYmxlICJGSUxFIiB0byBjbHVlIHRoZSB1c2VyIGluIHRoYXQKLSAgdGhlcmUncyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgc2VtaS1mb3JtYWwgc3ludGF4ICItZiBGSUxFIiBhbmQgdGhlIGluZm9ybWFsCisgIHdyaXR0ZW4gaGVscCB0ZXh0IHVzZXMgdGhlIG1ldGEtdmFyaWFibGUgYGBGSUxFYGAgdG8gY2x1ZSB0aGUgdXNlciBpbiB0aGF0CisgIHRoZXJlJ3MgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHNlbWktZm9ybWFsIHN5bnRheCBgYC1mIEZJTEVgYCBhbmQgdGhlIGluZm9ybWFsCiAgIHNlbWFudGljIGRlc2NyaXB0aW9uICJ3cml0ZSBvdXRwdXQgdG8gRklMRSIuIFRoaXMgaXMgYSBzaW1wbGUgYnV0IGVmZmVjdGl2ZQogICB3YXkgdG8gbWFrZSB5b3VyIGhlbHAgdGV4dCBhIGxvdCBjbGVhcmVyIGFuZCBtb3JlIHVzZWZ1bCBmb3IgZW5kIHVzZXJzLgogCkBAIC01NDksMTIgKzU1NCwzMyBAQAogICAgZGVmYXVsdCB2YWx1ZS4gIElmIGFuIG9wdGlvbiBoYXMgbm8gZGVmYXVsdCB2YWx1ZSAob3IgdGhlIGRlZmF1bHQgdmFsdWUgaXMKICAgIGBgTm9uZWBgKSwgYGAlZGVmYXVsdGBgIGV4cGFuZHMgdG8gYGBub25lYGAuCiAKK0dyb3VwaW5nIE9wdGlvbnMKKysrKysrKysrKysrKysrKysKKwogV2hlbiBkZWFsaW5nIHdpdGggbWFueSBvcHRpb25zLCBpdCBpcyBjb252ZW5pZW50IHRvIGdyb3VwIHRoZXNlIG9wdGlvbnMgZm9yCiBiZXR0ZXIgaGVscCBvdXRwdXQuICBBbiA6Y2xhc3M6YE9wdGlvblBhcnNlcmAgY2FuIGNvbnRhaW4gc2V2ZXJhbCBvcHRpb24gZ3JvdXBzLAogZWFjaCBvZiB3aGljaCBjYW4gY29udGFpbiBzZXZlcmFsIG9wdGlvbnMuCiAKLUNvbnRpbnVpbmcgd2l0aCB0aGUgcGFyc2VyIGRlZmluZWQgYWJvdmUsIGFkZGluZyBhbiA6Y2xhc3M6YE9wdGlvbkdyb3VwYCB0byBhCi1wYXJzZXIgaXMgZWFzeTo6CitBbiBvcHRpb24gZ3JvdXAgaXMgb2J0YWluZWQgdXNpbmcgdGhlIGNsYXNzIDpjbGFzczpgT3B0aW9uR3JvdXBgOgorCisuLiBjbGFzczo6IE9wdGlvbkdyb3VwKHBhcnNlciwgdGl0bGUsIGRlc2NyaXB0aW9uPU5vbmUpCisKKyAgIHdoZXJlCisKKyAgICogcGFyc2VyIGlzIHRoZSA6Y2xhc3M6YE9wdGlvblBhcnNlcmAgaW5zdGFuY2UgdGhlIGdyb3VwIHdpbGwgYmUgaW5zdGVydGVkIGluCisgICAgIHRvCisgICAqIHRpdGxlIGlzIHRoZSBncm91cCB0aXRsZQorICAgKiBkZXNjcmlwdGlvbiwgb3B0aW9uYWwsIGlzIGEgbG9uZyBkZXNjcmlwdGlvbiBvZiB0aGUgZ3JvdXAKKworOmNsYXNzOmBPcHRpb25Hcm91cGAgaW5oZXJpdHMgZnJvbSA6Y2xhc3M6YE9wdGlvbkNvbnRhaW5lcmAgKGxpa2UKKzpjbGFzczpgT3B0aW9uUGFyc2VyYCkgYW5kIHNvIHRoZSA6bWV0aDpgYWRkX29wdGlvbmAgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGFkZAorYW4gb3B0aW9uIHRvIHRoZSBncm91cC4KKworT25jZSBhbGwgdGhlIG9wdGlvbnMgYXJlIGRlY2xhcmVkLCB1c2luZyB0aGUgOmNsYXNzOmBPcHRpb25QYXJzZXJgIG1ldGhvZAorOm1ldGg6YGFkZF9vcHRpb25fZ3JvdXBgIHRoZSBncm91cCBpcyBhZGRlZCB0byB0aGUgcHJldmlvdXNseSBkZWZpbmVkIHBhcnNlci4KKworQ29udGludWluZyB3aXRoIHRoZSBwYXJzZXIgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbiwgYWRkaW5nIGFuCis6Y2xhc3M6YE9wdGlvbkdyb3VwYCB0byBhIHBhcnNlciBpcyBlYXN5OjoKIAogICAgIGdyb3VwID0gT3B0aW9uR3JvdXAocGFyc2VyLCAiRGFuZ2Vyb3VzIE9wdGlvbnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhdXRpb246IHVzZSB0aGVzZSBvcHRpb25zIGF0IHlvdXIgb3duIHJpc2suICAiCkBAIC01NjYsMjAgKzU5Miw3MyBAQAogCiAuLiBjb2RlLWJsb2NrOjogdGV4dAogCi0gICAgdXNhZ2U6ICBbb3B0aW9uc10gYXJnMSBhcmcyCisgICBVc2FnZTogPHlvdXJzY3JpcHQ+IFtvcHRpb25zXSBhcmcxIGFyZzIKIAotICAgIG9wdGlvbnM6Ci0gICAgICAtaCwgLS1oZWxwICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gICAgICAtdiwgLS12ZXJib3NlICAgICAgICBtYWtlIGxvdHMgb2Ygbm9pc2UgW2RlZmF1bHRdCi0gICAgICAtcSwgLS1xdWlldCAgICAgICAgICBiZSB2ZXd3eSBxdWlldCAoSSdtIGh1bnRpbmcgd2FiYml0cykKLSAgICAgIC1mRklMRSwgLS1maWxlPUZJTEUgIHdyaXRlIG91dHB1dCB0byBGSUxFCi0gICAgICAtbU1PREUsIC0tbW9kZT1NT0RFICBpbnRlcmFjdGlvbiBtb2RlOiBvbmUgb2YgJ25vdmljZScsICdpbnRlcm1lZGlhdGUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdF0sICdleHBlcnQnCisgICBPcHRpb25zOgorICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAtdiwgLS12ZXJib3NlICAgICAgICAgbWFrZSBsb3RzIG9mIG5vaXNlIFtkZWZhdWx0XQorICAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgdmV3d3kgcXVpZXQgKEknbSBodW50aW5nIHdhYmJpdHMpCisgICAgIC1mIEZJTEUsIC0tZmlsZW5hbWU9RklMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgb3V0cHV0IHRvIEZJTEUKKyAgICAgLW0gTU9ERSwgLS1tb2RlPU1PREUgIGludGVyYWN0aW9uIG1vZGU6IG5vdmljZSwgaW50ZXJtZWRpYXRlLCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZXJ0IFtkZWZhdWx0OiBpbnRlcm1lZGlhdGVdCiAKLSAgICAgIERhbmdlcm91cyBPcHRpb25zOgotICAgICAgQ2F1dGlvbjogdXNlIG9mIHRoZXNlIG9wdGlvbnMgaXMgYXQgeW91ciBvd24gcmlzay4gIEl0IGlzIGJlbGlldmVkIHRoYXQKLSAgICAgIHNvbWUgb2YgdGhlbSBiaXRlLgotICAgICAgLWcgICAgICAgICAgICAgICAgIEdyb3VwIG9wdGlvbi4KKyAgICAgRGFuZ2Vyb3VzIE9wdGlvbnM6CisgICAgICAgQ2F1dGlvbjogdXNlIHRoZXNlIG9wdGlvbnMgYXQgeW91ciBvd24gcmlzay4gIEl0IGlzIGJlbGlldmVkIHRoYXQgc29tZQorICAgICAgIG9mIHRoZW0gYml0ZS4KKworICAgICAgIC1nICAgICAgICAgICAgICAgICAgR3JvdXAgb3B0aW9uLgorCitBIGJpdCBtb3JlIGNvbXBsZXRlIGV4YW1wbGUgbWlnaHQgaW52b2xlIHVzaW5nIG1vcmUgdGhhbiBvbmUgZ3JvdXA6IHN0aWxsCitleHRlbmRpbmQgdGhlIHByZXZpb3VzIGV4YW1wbGU6OgorCisgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChwYXJzZXIsICJEYW5nZXJvdXMgT3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2F1dGlvbjogdXNlIHRoZXNlIG9wdGlvbnMgYXQgeW91ciBvd24gcmlzay4gICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJJdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUgb2YgdGhlbSBiaXRlLiIpCisgICAgZ3JvdXAuYWRkX29wdGlvbigiLWciLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJHcm91cCBvcHRpb24uIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChncm91cCkKKworICAgIGdyb3VwID0gT3B0aW9uR3JvdXAocGFyc2VyLCAiRGVidWcgT3B0aW9ucyIpCisgICAgZ3JvdXAuYWRkX29wdGlvbigiLWQiLCAiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmludCBkZWJ1ZyBpbmZvcm1hdGlvbiIpCisgICAgZ3JvdXAuYWRkX29wdGlvbigiLXMiLCAiLS1zcWwiLCBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICAgICAgICAgICAgICAgaGVscD0iUHJpbnQgYWxsIFNRTCBzdGF0ZW1lbnRzIGV4ZWN1dGVkIikKKyAgICBncm91cC5hZGRfb3B0aW9uKCItZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IlByaW50IGV2ZXJ5IGFjdGlvbiBkb25lIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbl9ncm91cChncm91cCkKKwordGhhdCByZXN1bHRzIGluIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCisuLiBjb2RlLWJsb2NrOjogdGV4dAorCisgICBVc2FnZTogPHlvdXJzY3JpcHQ+IFtvcHRpb25zXSBhcmcxIGFyZzIKKworICAgT3B0aW9uczoKKyAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgLXYsIC0tdmVyYm9zZSAgICAgICAgIG1ha2UgbG90cyBvZiBub2lzZSBbZGVmYXVsdF0KKyAgICAgLXEsIC0tcXVpZXQgICAgICAgICAgIGJlIHZld3d5IHF1aWV0IChJJ20gaHVudGluZyB3YWJiaXRzKQorICAgICAtZiBGSUxFLCAtLWZpbGVuYW1lPUZJTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIG91dHB1dCB0byBGSUxFCisgICAgIC1tIE1PREUsIC0tbW9kZT1NT0RFICBpbnRlcmFjdGlvbiBtb2RlOiBub3ZpY2UsIGludGVybWVkaWF0ZSwgb3IgZXhwZXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdDogaW50ZXJtZWRpYXRlXQorCisgICAgIERhbmdlcm91cyBPcHRpb25zOgorICAgICAgIENhdXRpb246IHVzZSB0aGVzZSBvcHRpb25zIGF0IHlvdXIgb3duIHJpc2suICBJdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUKKyAgICAgICBvZiB0aGVtIGJpdGUuCisKKyAgICAgICAtZyAgICAgICAgICAgICAgICAgIEdyb3VwIG9wdGlvbi4KKworICAgICBEZWJ1ZyBPcHRpb25zOgorICAgICAgIC1kLCAtLWRlYnVnICAgICAgICAgUHJpbnQgZGVidWcgaW5mb3JtYXRpb24KKyAgICAgICAtcywgLS1zcWwgICAgICAgICAgIFByaW50IGFsbCBTUUwgc3RhdGVtZW50cyBleGVjdXRlZAorICAgICAgIC1lICAgICAgICAgICAgICAgICAgUHJpbnQgZXZlcnkgYWN0aW9uIGRvbmUKKworQW5vdGhlciBpbnRlcmVzdGluZyBtZXRob2QsIGluIHBhcnRpY3VsYXIgd2hlbiB3b3JraW5nIHByb2dyYW1tYXRpY2FsbHkgd2l0aAorb3B0aW9uIGdyb3VwcyBpczoKKworLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLmdldF9vcHRpb25fZ3JvdXAob3B0X3N0cikKKworICAgUmV0dXJuLCBpZiBkZWZpbmVkLCB0aGUgOmNsYXNzOmBPcHRpb25Hcm91cGAgdGhhdCBoYXMgdGhlIHRpdGxlIG9yIHRoZSBsb25nCisgICBkZXNjcmlwdGlvbiBlcXVhbHMgdG8gKm9wdF9zdHIqCiAKIC4uIF9vcHRwYXJzZS1wcmludGluZy12ZXJzaW9uLXN0cmluZzoKIApAQCAtNTkyLDExICs2NzEsMTEgQEAKIAogICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIlcHJvZyBbLWZdIFstcV0iLCB2ZXJzaW9uPSIlcHJvZyAxLjAiKQogCi1gYCIlcHJvZyJgYCBpcyBleHBhbmRlZCBqdXN0IGxpa2UgaXQgaXMgaW4gYGB1c2FnZWBgLiAgQXBhcnQgZnJvbSB0aGF0LAorYGAlcHJvZ2BgIGlzIGV4cGFuZGVkIGp1c3QgbGlrZSBpdCBpcyBpbiBgYHVzYWdlYGAuICBBcGFydCBmcm9tIHRoYXQsCiBgYHZlcnNpb25gYCBjYW4gY29udGFpbiBhbnl0aGluZyB5b3UgbGlrZS4gIFdoZW4geW91IHN1cHBseSBpdCwgOm1vZDpgb3B0cGFyc2VgCi1hdXRvbWF0aWNhbGx5IGFkZHMgYSBgYCItLXZlcnNpb24iYGAgb3B0aW9uIHRvIHlvdXIgcGFyc2VyLiBJZiBpdCBlbmNvdW50ZXJzCithdXRvbWF0aWNhbGx5IGFkZHMgYSBgYC0tdmVyc2lvbmBgIG9wdGlvbiB0byB5b3VyIHBhcnNlci4gSWYgaXQgZW5jb3VudGVycwogdGhpcyBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgZXhwYW5kcyB5b3VyIGBgdmVyc2lvbmBgIHN0cmluZyAoYnkKLXJlcGxhY2luZyBgYCIlcHJvZyJgYCksIHByaW50cyBpdCB0byBzdGRvdXQsIGFuZCBleGl0cy4KK3JlcGxhY2luZyBgYCVwcm9nYGApLCBwcmludHMgaXQgdG8gc3Rkb3V0LCBhbmQgZXhpdHMuCiAKIEZvciBleGFtcGxlLCBpZiB5b3VyIHNjcmlwdCBpcyBjYWxsZWQgYGAvdXNyL2Jpbi9mb29gYDo6CiAKQEAgLTYwOSw3ICs2ODgsNyBAQAogCiAgICBQcmludCB0aGUgdmVyc2lvbiBtZXNzYWdlIGZvciB0aGUgY3VycmVudCBwcm9ncmFtIChgYHNlbGYudmVyc2lvbmBgKSB0bwogICAgKmZpbGUqIChkZWZhdWx0IHN0ZG91dCkuICBBcyB3aXRoIDptZXRoOmBwcmludF91c2FnZWAsIGFueSBvY2N1cnJlbmNlCi0gICBvZiBgYCIlcHJvZyJgYCBpbiBgYHNlbGYudmVyc2lvbmBgIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQKKyAgIG9mIGBgJXByb2dgYCBpbiBgYHNlbGYudmVyc2lvbmBgIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQKICAgIHByb2dyYW0uICBEb2VzIG5vdGhpbmcgaWYgYGBzZWxmLnZlcnNpb25gYCBpcyBlbXB0eSBvciB1bmRlZmluZWQuCiAKIC4uIG1ldGhvZDo6IE9wdGlvblBhcnNlci5nZXRfdmVyc2lvbigpCkBAIC02MzIsOSArNzExLDkgQEAKIAogSGFuZGxpbmcgdXNlciBlcnJvcnMgaXMgbXVjaCBtb3JlIGltcG9ydGFudCwgc2luY2UgdGhleSBhcmUgZ3VhcmFudGVlZCB0byBoYXBwZW4KIG5vIG1hdHRlciBob3cgc3RhYmxlIHlvdXIgY29kZSBpcy4gIDptb2Q6YG9wdHBhcnNlYCBjYW4gYXV0b21hdGljYWxseSBkZXRlY3QKLXNvbWUgdXNlciBlcnJvcnMsIHN1Y2ggYXMgYmFkIG9wdGlvbiBhcmd1bWVudHMgKHBhc3NpbmcgYGAiLW4gNHgiYGAgd2hlcmUKLTpvcHRpb246YC1uYCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50KSwgbWlzc2luZyBhcmd1bWVudHMgKGBgIi1uImBgIGF0IHRoZSBlbmQKLW9mIHRoZSBjb21tYW5kIGxpbmUsIHdoZXJlIDpvcHRpb246YC1uYCB0YWtlcyBhbiBhcmd1bWVudCBvZiBhbnkgdHlwZSkuICBBbHNvLAorc29tZSB1c2VyIGVycm9ycywgc3VjaCBhcyBiYWQgb3B0aW9uIGFyZ3VtZW50cyAocGFzc2luZyBgYC1uIDR4YGAgd2hlcmUKK2BgLW5gYCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50KSwgbWlzc2luZyBhcmd1bWVudHMgKGBgLW5gYCBhdCB0aGUgZW5kCitvZiB0aGUgY29tbWFuZCBsaW5lLCB3aGVyZSBgYC1uYGAgdGFrZXMgYW4gYXJndW1lbnQgb2YgYW55IHR5cGUpLiAgQWxzbywKIHlvdSBjYW4gY2FsbCA6ZnVuYzpgT3B0aW9uUGFyc2VyLmVycm9yYCB0byBzaWduYWwgYW4gYXBwbGljYXRpb24tZGVmaW5lZCBlcnJvcgogY29uZGl0aW9uOjoKIApAQCAtNjQ3LDE4ICs3MjYsMTggQEAKIHByb2dyYW0ncyB1c2FnZSBtZXNzYWdlIGFuZCBhbiBlcnJvciBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBleGl0cyB3aXRoCiBlcnJvciBzdGF0dXMgMi4KIAotQ29uc2lkZXIgdGhlIGZpcnN0IGV4YW1wbGUgYWJvdmUsIHdoZXJlIHRoZSB1c2VyIHBhc3NlcyBgYCI0eCJgYCB0byBhbiBvcHRpb24KK0NvbnNpZGVyIHRoZSBmaXJzdCBleGFtcGxlIGFib3ZlLCB3aGVyZSB0aGUgdXNlciBwYXNzZXMgYGA0eGBgIHRvIGFuIG9wdGlvbgogdGhhdCB0YWtlcyBhbiBpbnRlZ2VyOjoKIAogICAgJCAvdXNyL2Jpbi9mb28gLW4gNHgKLSAgIHVzYWdlOiBmb28gW29wdGlvbnNdCisgICBVc2FnZTogZm9vIFtvcHRpb25zXQogCiAgICBmb286IGVycm9yOiBvcHRpb24gLW46IGludmFsaWQgaW50ZWdlciB2YWx1ZTogJzR4JwogCiBPciwgd2hlcmUgdGhlIHVzZXIgZmFpbHMgdG8gcGFzcyBhIHZhbHVlIGF0IGFsbDo6CiAKICAgICQgL3Vzci9iaW4vZm9vIC1uCi0gICB1c2FnZTogZm9vIFtvcHRpb25zXQorICAgVXNhZ2U6IGZvbyBbb3B0aW9uc10KIAogICAgZm9vOiBlcnJvcjogLW4gb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50CiAKQEAgLTc0MCw4ICs4MTksOCBAQAogICAgYGB2ZXJzaW9uYGAgKGRlZmF1bHQ6IGBgTm9uZWBgKQogICAgICAgQSB2ZXJzaW9uIHN0cmluZyB0byBwcmludCB3aGVuIHRoZSB1c2VyIHN1cHBsaWVzIGEgdmVyc2lvbiBvcHRpb24uIElmIHlvdQogICAgICAgc3VwcGx5IGEgdHJ1ZSB2YWx1ZSBmb3IgYGB2ZXJzaW9uYGAsIDptb2Q6YG9wdHBhcnNlYCBhdXRvbWF0aWNhbGx5IGFkZHMgYQotICAgICAgdmVyc2lvbiBvcHRpb24gd2l0aCB0aGUgc2luZ2xlIG9wdGlvbiBzdHJpbmcgYGAiLS12ZXJzaW9uImBgLiAgVGhlCi0gICAgICBzdWJzdHJpbmcgYGAiJXByb2ciYGAgaXMgZXhwYW5kZWQgdGhlIHNhbWUgYXMgZm9yIGBgdXNhZ2VgYC4KKyAgICAgIHZlcnNpb24gb3B0aW9uIHdpdGggdGhlIHNpbmdsZSBvcHRpb24gc3RyaW5nIGBgLS12ZXJzaW9uYGAuICBUaGUKKyAgICAgIHN1YnN0cmluZyBgYCVwcm9nYGAgaXMgZXhwYW5kZWQgdGhlIHNhbWUgYXMgZm9yIGBgdXNhZ2VgYC4KIAogICAgYGBjb25mbGljdF9oYW5kbGVyYGAgKGRlZmF1bHQ6IGBgImVycm9yImBgKQogICAgICAgU3BlY2lmaWVzIHdoYXQgdG8gZG8gd2hlbiBvcHRpb25zIHdpdGggY29uZmxpY3Rpbmcgb3B0aW9uIHN0cmluZ3MgYXJlCkBAIC03NjAsMTEgKzgzOSwxMSBAQAogICAgICAgSW5kZW50ZWRIZWxwRm9ybWF0dGVyIGFuZCBUaXRsZWRIZWxwRm9ybWF0dGVyLgogCiAgICBgYGFkZF9oZWxwX29wdGlvbmBgIChkZWZhdWx0OiBgYFRydWVgYCkKLSAgICAgIElmIHRydWUsIDptb2Q6YG9wdHBhcnNlYCB3aWxsIGFkZCBhIGhlbHAgb3B0aW9uICh3aXRoIG9wdGlvbiBzdHJpbmdzIGBgIi1oImBgCi0gICAgICBhbmQgYGAiLS1oZWxwImBgKSB0byB0aGUgcGFyc2VyLgorICAgICAgSWYgdHJ1ZSwgOm1vZDpgb3B0cGFyc2VgIHdpbGwgYWRkIGEgaGVscCBvcHRpb24gKHdpdGggb3B0aW9uIHN0cmluZ3MgYGAtaGBgCisgICAgICBhbmQgYGAtLWhlbHBgYCkgdG8gdGhlIHBhcnNlci4KIAogICAgYGBwcm9nYGAKLSAgICAgIFRoZSBzdHJpbmcgdG8gdXNlIHdoZW4gZXhwYW5kaW5nIGBgIiVwcm9nImBgIGluIGBgdXNhZ2VgYCBhbmQgYGB2ZXJzaW9uYGAKKyAgICAgIFRoZSBzdHJpbmcgdG8gdXNlIHdoZW4gZXhwYW5kaW5nIGBgJXByb2dgYCBpbiBgYHVzYWdlYGAgYW5kIGBgdmVyc2lvbmBgCiAgICAgICBpbnN0ZWFkIG9mIGBgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSlgYC4KIAogICAgYGBlcGlsb2dgYCAoZGVmYXVsdDogYGBOb25lYGApCkBAIC04MDgsNyArODg3LDcgQEAKIF5eXl5eXl5eXl5eXl5eXl4KIAogRWFjaCBPcHRpb24gaW5zdGFuY2UgcmVwcmVzZW50cyBhIHNldCBvZiBzeW5vbnltb3VzIGNvbW1hbmQtbGluZSBvcHRpb24gc3RyaW5ncywKLWUuZy4gOm9wdGlvbjpgLWZgIGFuZCA6b3B0aW9uOmAtLWZpbGVgLiAgWW91IGNhbiBzcGVjaWZ5IGFueSBudW1iZXIgb2Ygc2hvcnQgb3IKK2UuZy4gYGAtZmBgIGFuZCBgYC0tZmlsZWBgLiAgWW91IGNhbiBzcGVjaWZ5IGFueSBudW1iZXIgb2Ygc2hvcnQgb3IKIGxvbmcgb3B0aW9uIHN0cmluZ3MsIGJ1dCB5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBvdmVyYWxsIG9wdGlvbiBzdHJpbmcuCiAKIFRoZSBjYW5vbmljYWwgd2F5IHRvIGNyZWF0ZSBhbiA6Y2xhc3M6YE9wdGlvbmAgaW5zdGFuY2UgaXMgd2l0aCB0aGUKQEAgLTk3MSw3ICsxMDUwLDcgQEAKIC4uIGF0dHJpYnV0ZTo6IE9wdGlvbi5oZWxwCiAKICAgIEhlbHAgdGV4dCB0byBwcmludCBmb3IgdGhpcyBvcHRpb24gd2hlbiBsaXN0aW5nIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhZnRlcgotICAgdGhlIHVzZXIgc3VwcGxpZXMgYSA6YXR0cjpgfk9wdGlvbi5oZWxwYCBvcHRpb24gKHN1Y2ggYXMgYGAiLS1oZWxwImBgKS4gIElmCisgICB0aGUgdXNlciBzdXBwbGllcyBhIDphdHRyOmB+T3B0aW9uLmhlbHBgIG9wdGlvbiAoc3VjaCBhcyBgYC0taGVscGBgKS4gIElmCiAgICBubyBoZWxwIHRleHQgaXMgc3VwcGxpZWQsIHRoZSBvcHRpb24gd2lsbCBiZSBsaXN0ZWQgd2l0aG91dCBoZWxwIHRleHQuICBUbwogICAgaGlkZSB0aGlzIG9wdGlvbiwgdXNlIHRoZSBzcGVjaWFsIHZhbHVlIDpkYXRhOmBvcHRwYXJzZS5TVVBQUkVTU19IRUxQYC4KIApAQCAtMTAwOSw5ICsxMDg4LDkgQEAKICAgSWYgOmF0dHI6YH5PcHRpb24udHlwZWAgaXMgbm90IHN1cHBsaWVkLCBpdCBkZWZhdWx0cyB0byBgYCJzdHJpbmciYGAuCiAKICAgSWYgOmF0dHI6YH5PcHRpb24uZGVzdGAgaXMgbm90IHN1cHBsaWVkLCA6bW9kOmBvcHRwYXJzZWAgZGVyaXZlcyBhIGRlc3RpbmF0aW9uCi0gIGZyb20gdGhlIGZpcnN0IGxvbmcgb3B0aW9uIHN0cmluZyAoZS5nLiwgYGAiLS1mb28tYmFyImBgIGltcGxpZXMKKyAgZnJvbSB0aGUgZmlyc3QgbG9uZyBvcHRpb24gc3RyaW5nIChlLmcuLCBgYC0tZm9vLWJhcmBgIGltcGxpZXMKICAgYGBmb29fYmFyYGApLiBJZiB0aGVyZSBhcmUgbm8gbG9uZyBvcHRpb24gc3RyaW5ncywgOm1vZDpgb3B0cGFyc2VgIGRlcml2ZXMgYQotICBkZXN0aW5hdGlvbiBmcm9tIHRoZSBmaXJzdCBzaG9ydCBvcHRpb24gc3RyaW5nIChlLmcuLCBgYCItZiJgYCBpbXBsaWVzIGBgZmBgKS4KKyAgZGVzdGluYXRpb24gZnJvbSB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uIHN0cmluZyAoZS5nLiwgYGAtZmBgIGltcGxpZXMgYGBmYGApLgogCiAgIEV4YW1wbGU6OgogCkBAIC0xMDQyLDcgKzExMjEsNyBAQAogICAgICBwYXJzZXIuYWRkX29wdGlvbigiLS1ub2lzeSIsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBjb25zdD0yLCBkZXN0PSJ2ZXJib3NlIikKIAotICBJZiBgYCItLW5vaXN5ImBgIGlzIHNlZW4sIDptb2Q6YG9wdHBhcnNlYCB3aWxsIHNldCAgOjoKKyAgSWYgYGAtLW5vaXN5YGAgaXMgc2VlbiwgOm1vZDpgb3B0cGFyc2VgIHdpbGwgc2V0ICA6OgogCiAgICAgIG9wdGlvbnMudmVyYm9zZSA9IDIKIApAQCAtMTA3NywxMyArMTE1NiwxMyBAQAogCiAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRyYWNrcyIsIGFjdGlvbj0iYXBwZW5kIiwgdHlwZT0iaW50IikKIAotICBJZiBgYCItdDMiYGAgaXMgc2VlbiBvbiB0aGUgY29tbWFuZC1saW5lLCA6bW9kOmBvcHRwYXJzZWAgZG9lcyB0aGUgZXF1aXZhbGVudAorICBJZiBgYC10M2BgIGlzIHNlZW4gb24gdGhlIGNvbW1hbmQtbGluZSwgOm1vZDpgb3B0cGFyc2VgIGRvZXMgdGhlIGVxdWl2YWxlbnQKICAgb2Y6OgogCiAgICAgIG9wdGlvbnMudHJhY2tzID0gW10KICAgICAgb3B0aW9ucy50cmFja3MuYXBwZW5kKGludCgiMyIpKQogCi0gIElmLCBhIGxpdHRsZSBsYXRlciBvbiwgYGAiLS10cmFja3M9NCJgYCBpcyBzZWVuLCBpdCBkb2VzOjoKKyAgSWYsIGEgbGl0dGxlIGxhdGVyIG9uLCBgYC0tdHJhY2tzPTRgYCBpcyBzZWVuLCBpdCBkb2VzOjoKIAogICAgICBvcHRpb25zLnRyYWNrcy5hcHBlbmQoaW50KCI0IikpCiAKQEAgLTExMDUsMTMgKzExODQsMTMgQEAKIAogICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXYiLCBhY3Rpb249ImNvdW50IiwgZGVzdD0idmVyYm9zaXR5IikKIAotICBUaGUgZmlyc3QgdGltZSBgYCItdiJgYCBpcyBzZWVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIDptb2Q6YG9wdHBhcnNlYCBkb2VzIHRoZQorICBUaGUgZmlyc3QgdGltZSBgYC12YGAgaXMgc2VlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCA6bW9kOmBvcHRwYXJzZWAgZG9lcyB0aGUKICAgZXF1aXZhbGVudCBvZjo6CiAKICAgICAgb3B0aW9ucy52ZXJib3NpdHkgPSAwCiAgICAgIG9wdGlvbnMudmVyYm9zaXR5ICs9IDEKIAotICBFdmVyeSBzdWJzZXF1ZW50IG9jY3VycmVuY2Ugb2YgYGAiLXYiYGAgcmVzdWx0cyBpbiAgOjoKKyAgRXZlcnkgc3Vic2VxdWVudCBvY2N1cnJlbmNlIG9mIGBgLXZgYCByZXN1bHRzIGluICA6OgogCiAgICAgIG9wdGlvbnMudmVyYm9zaXR5ICs9IDEKIApAQCAtMTE1NCwxNSArMTIzMywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbnB1dCBmaWxlIHRvIHJlYWQgZGF0YSBmcm9tIikKICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tc2VjcmV0IiwgaGVscD1TVVBQUkVTU19IRUxQKQogCi0gIElmIDptb2Q6YG9wdHBhcnNlYCBzZWVzIGVpdGhlciBgYCItaCJgYCBvciBgYCItLWhlbHAiYGAgb24gdGhlIGNvbW1hbmQgbGluZSwKKyAgSWYgOm1vZDpgb3B0cGFyc2VgIHNlZXMgZWl0aGVyIGBgLWhgYCBvciBgYC0taGVscGBgIG9uIHRoZSBjb21tYW5kIGxpbmUsCiAgIGl0IHdpbGwgcHJpbnQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBoZWxwIG1lc3NhZ2UgdG8gc3Rkb3V0IChhc3N1bWluZwogICBgYHN5cy5hcmd2WzBdYGAgaXMgYGAiZm9vLnB5ImBgKToKIAogICAuLiBjb2RlLWJsb2NrOjogdGV4dAogCi0gICAgIHVzYWdlOiBmb28ucHkgW29wdGlvbnNdCisgICAgIFVzYWdlOiBmb28ucHkgW29wdGlvbnNdCiAKLSAgICAgb3B0aW9uczoKKyAgICAgT3B0aW9uczoKICAgICAgICAtaCwgLS1oZWxwICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CiAgICAgICAgLXYgICAgICAgICAgICAgICAgQmUgbW9kZXJhdGVseSB2ZXJib3NlCiAgICAgICAgLS1maWxlPUZJTEVOQU1FICAgSW5wdXQgZmlsZSB0byByZWFkIGRhdGEgZnJvbQpAQCAtMTIxMSw3ICsxMjkwLDcgQEAKIDpmdW5jOmBmbG9hdGAgYW5kIDpmdW5jOmBjb21wbGV4YCwgd2l0aCBzaW1pbGFyIGVycm9yLWhhbmRsaW5nLgogCiBgYCJjaG9pY2UiYGAgb3B0aW9ucyBhcmUgYSBzdWJ0eXBlIG9mIGBgInN0cmluZyJgYCBvcHRpb25zLiAgVGhlCi06YXR0cjpgfk9wdGlvbi5jaG9pY2VzYGAgb3B0aW9uIGF0dHJpYnV0ZSAoYSBzZXF1ZW5jZSBvZiBzdHJpbmdzKSBkZWZpbmVzIHRoZQorOmF0dHI6YH5PcHRpb24uY2hvaWNlc2Agb3B0aW9uIGF0dHJpYnV0ZSAoYSBzZXF1ZW5jZSBvZiBzdHJpbmdzKSBkZWZpbmVzIHRoZQogc2V0IG9mIGFsbG93ZWQgb3B0aW9uIGFyZ3VtZW50cy4gIDpmdW5jOmBvcHRwYXJzZS5jaGVja19jaG9pY2VgIGNvbXBhcmVzCiB1c2VyLXN1cHBsaWVkIG9wdGlvbiBhcmd1bWVudHMgYWdhaW5zdCB0aGlzIG1hc3RlciBsaXN0IGFuZCByYWlzZXMKIDpleGM6YE9wdGlvblZhbHVlRXJyb3JgIGlmIGFuIGludmFsaWQgc3RyaW5nIGlzIGdpdmVuLgpAQCAtMTI2OCw4ICsxMzQ3LDggQEAKIAogLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQogCi0gICBTZXQgcGFyc2luZyB0byBzdG9wIG9uIHRoZSBmaXJzdCBub24tb3B0aW9uLiAgRm9yIGV4YW1wbGUsIGlmIGBgIi1hImBgIGFuZAotICAgYGAiLWIiYGAgYXJlIGJvdGggc2ltcGxlIG9wdGlvbnMgdGhhdCB0YWtlIG5vIGFyZ3VtZW50cywgOm1vZDpgb3B0cGFyc2VgCisgICBTZXQgcGFyc2luZyB0byBzdG9wIG9uIHRoZSBmaXJzdCBub24tb3B0aW9uLiAgRm9yIGV4YW1wbGUsIGlmIGBgLWFgYCBhbmQKKyAgIGBgLWJgYCBhcmUgYm90aCBzaW1wbGUgb3B0aW9ucyB0aGF0IHRha2Ugbm8gYXJndW1lbnRzLCA6bW9kOmBvcHRwYXJzZWAKICAgIG5vcm1hbGx5IGFjY2VwdHMgdGhpcyBzeW50YXg6OgogCiAgICAgICBwcm9nIC1hIGFyZzEgLWIgYXJnMgpAQCAtMTI5OSw3ICsxMzc4LDcgQEAKIC4uIG1ldGhvZDo6IE9wdGlvblBhcnNlci5oYXNfb3B0aW9uKG9wdF9zdHIpCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBPcHRpb25QYXJzZXIgaGFzIGFuIG9wdGlvbiB3aXRoIG9wdGlvbiBzdHJpbmcgKm9wdF9zdHIqCi0gICAoZS5nLiwgYGAiLXEiYGAgb3IgYGAiLS12ZXJib3NlImBgKS4KKyAgIChlLmcuLCBgYC1xYGAgb3IgYGAtLXZlcmJvc2VgYCkuCiAKIC4uIG1ldGhvZDo6IE9wdGlvblBhcnNlci5yZW1vdmVfb3B0aW9uKG9wdF9zdHIpCiAKQEAgLTEzNTIsMTIgKzE0MzEsMTIgQEAKICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5vaXN5IiwgLi4uLCBoZWxwPSJiZSBub2lzeSIpCiAKIEF0IHRoaXMgcG9pbnQsIDptb2Q6YG9wdHBhcnNlYCBkZXRlY3RzIHRoYXQgYSBwcmV2aW91c2x5LWFkZGVkIG9wdGlvbiBpcyBhbHJlYWR5Ci11c2luZyB0aGUgYGAiLW4iYGAgb3B0aW9uIHN0cmluZy4gIFNpbmNlIGBgY29uZmxpY3RfaGFuZGxlcmBgIGlzIGBgInJlc29sdmUiYGAsCi1pdCByZXNvbHZlcyB0aGUgc2l0dWF0aW9uIGJ5IHJlbW92aW5nIGBgIi1uImBgIGZyb20gdGhlIGVhcmxpZXIgb3B0aW9uJ3MgbGlzdCBvZgotb3B0aW9uIHN0cmluZ3MuICBOb3cgYGAiLS1kcnktcnVuImBgIGlzIHRoZSBvbmx5IHdheSBmb3IgdGhlIHVzZXIgdG8gYWN0aXZhdGUKK3VzaW5nIHRoZSBgYC1uYGAgb3B0aW9uIHN0cmluZy4gIFNpbmNlIGBgY29uZmxpY3RfaGFuZGxlcmBgIGlzIGBgInJlc29sdmUiYGAsCitpdCByZXNvbHZlcyB0aGUgc2l0dWF0aW9uIGJ5IHJlbW92aW5nIGBgLW5gYCBmcm9tIHRoZSBlYXJsaWVyIG9wdGlvbidzIGxpc3Qgb2YKK29wdGlvbiBzdHJpbmdzLiAgTm93IGBgLS1kcnktcnVuYGAgaXMgdGhlIG9ubHkgd2F5IGZvciB0aGUgdXNlciB0byBhY3RpdmF0ZQogdGhhdCBvcHRpb24uICBJZiB0aGUgdXNlciBhc2tzIGZvciBoZWxwLCB0aGUgaGVscCBtZXNzYWdlIHdpbGwgcmVmbGVjdCB0aGF0OjoKIAotICAgb3B0aW9uczoKKyAgIE9wdGlvbnM6CiAgICAgIC0tZHJ5LXJ1biAgICAgZG8gbm8gaGFybQogICAgICBbLi4uXQogICAgICAtbiwgLS1ub2lzeSAgIGJlIG5vaXN5CkBAIC0xMzcwLDEwICsxNDQ5LDEwIEBACiAKICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWRyeS1ydW4iLCAuLi4sIGhlbHA9Im5ldyBkcnktcnVuIG9wdGlvbiIpCiAKLUF0IHRoaXMgcG9pbnQsIHRoZSBvcmlnaW5hbCA6b3B0aW9uOmAtbi8tLWRyeS1ydW5gIG9wdGlvbiBpcyBubyBsb25nZXIKK0F0IHRoaXMgcG9pbnQsIHRoZSBvcmlnaW5hbCBgYC1uYGAvYGAtLWRyeS1ydW5gYCBvcHRpb24gaXMgbm8gbG9uZ2VyCiBhY2Nlc3NpYmxlLCBzbyA6bW9kOmBvcHRwYXJzZWAgcmVtb3ZlcyBpdCwgbGVhdmluZyB0aGlzIGhlbHAgdGV4dDo6CiAKLSAgIG9wdGlvbnM6CisgICBPcHRpb25zOgogICAgICBbLi4uXQogICAgICAtbiwgLS1ub2lzeSAgIGJlIG5vaXN5CiAgICAgIC0tZHJ5LXJ1biAgICAgbmV3IGRyeS1ydW4gb3B0aW9uCkBAIC0xNDA4LDcgKzE0ODcsNyBAQAogLi4gbWV0aG9kOjogT3B0aW9uUGFyc2VyLnByaW50X3VzYWdlKGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgdGhlIHVzYWdlIG1lc3NhZ2UgZm9yIHRoZSBjdXJyZW50IHByb2dyYW0gKGBgc2VsZi51c2FnZWBgKSB0byAqZmlsZSoKLSAgIChkZWZhdWx0IHN0ZG91dCkuICBBbnkgb2NjdXJyZW5jZSBvZiB0aGUgc3RyaW5nIGBgIiVwcm9nImBgIGluIGBgc2VsZi51c2FnZWBgCisgICAoZGVmYXVsdCBzdGRvdXQpLiAgQW55IG9jY3VycmVuY2Ugb2YgdGhlIHN0cmluZyBgYCVwcm9nYGAgaW4gYGBzZWxmLnVzYWdlYGAKICAgIGlzIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbS4gIERvZXMgbm90aGluZyBpZgogICAgYGBzZWxmLnVzYWdlYGAgaXMgZW1wdHkgb3Igbm90IGRlZmluZWQuCiAKQEAgLTE0NzIsOSArMTU1MSw5IEBACiAKIGBgY2FsbGJhY2tgYCBpcyBhIGZ1bmN0aW9uIChvciBvdGhlciBjYWxsYWJsZSBvYmplY3QpLCBzbyB5b3UgbXVzdCBoYXZlIGFscmVhZHkKIGRlZmluZWQgYGBteV9jYWxsYmFjaygpYGAgd2hlbiB5b3UgY3JlYXRlIHRoaXMgY2FsbGJhY2sgb3B0aW9uLiBJbiB0aGlzIHNpbXBsZQotY2FzZSwgOm1vZDpgb3B0cGFyc2VgIGRvZXNuJ3QgZXZlbiBrbm93IGlmIDpvcHRpb246YC1jYCB0YWtlcyBhbnkgYXJndW1lbnRzLAorY2FzZSwgOm1vZDpgb3B0cGFyc2VgIGRvZXNuJ3QgZXZlbiBrbm93IGlmIGBgLWNgYCB0YWtlcyBhbnkgYXJndW1lbnRzLAogd2hpY2ggdXN1YWxseSBtZWFucyB0aGF0IHRoZSBvcHRpb24gdGFrZXMgbm8gYXJndW1lbnRzLS0tdGhlIG1lcmUgcHJlc2VuY2Ugb2YKLTpvcHRpb246YC1jYCBvbiB0aGUgY29tbWFuZC1saW5lIGlzIGFsbCBpdCBuZWVkcyB0byBrbm93LiAgSW4gc29tZQorYGAtY2BgIG9uIHRoZSBjb21tYW5kLWxpbmUgaXMgYWxsIGl0IG5lZWRzIHRvIGtub3cuICBJbiBzb21lCiBjaXJjdW1zdGFuY2VzLCB0aG91Z2gsIHlvdSBtaWdodCB3YW50IHlvdXIgY2FsbGJhY2sgdG8gY29uc3VtZSBhbiBhcmJpdHJhcnkKIG51bWJlciBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiAgVGhpcyBpcyB3aGVyZSB3cml0aW5nIGNhbGxiYWNrcyBnZXRzIHRyaWNreTsKIGl0J3MgY292ZXJlZCBsYXRlciBpbiB0aGlzIHNlY3Rpb24uCkBAIC0xNTI3LDggKzE2MDYsOCBAQAogYGBvcHRfc3RyYGAKICAgIGlzIHRoZSBvcHRpb24gc3RyaW5nIHNlZW4gb24gdGhlIGNvbW1hbmQtbGluZSB0aGF0J3MgdHJpZ2dlcmluZyB0aGUgY2FsbGJhY2suCiAgICAoSWYgYW4gYWJicmV2aWF0ZWQgbG9uZyBvcHRpb24gd2FzIHVzZWQsIGBgb3B0X3N0cmBgIHdpbGwgYmUgdGhlIGZ1bGwsCi0gICBjYW5vbmljYWwgb3B0aW9uIHN0cmluZy0tLWUuZy4gaWYgdGhlIHVzZXIgcHV0cyBgYCItLWZvbyJgYCBvbiB0aGUKLSAgIGNvbW1hbmQtbGluZSBhcyBhbiBhYmJyZXZpYXRpb24gZm9yIGBgIi0tZm9vYmFyImBgLCB0aGVuIGBgb3B0X3N0cmBgIHdpbGwgYmUKKyAgIGNhbm9uaWNhbCBvcHRpb24gc3RyaW5nLS0tZS5nLiBpZiB0aGUgdXNlciBwdXRzIGBgLS1mb29gYCBvbiB0aGUKKyAgIGNvbW1hbmQtbGluZSBhcyBhbiBhYmJyZXZpYXRpb24gZm9yIGBgLS1mb29iYXJgYCwgdGhlbiBgYG9wdF9zdHJgYCB3aWxsIGJlCiAgICBgYCItLWZvb2JhciJgYC4pCiAKIGBgdmFsdWVgYApAQCAtMTYwMyw4ICsxNjgyLDggQEAKIENhbGxiYWNrIGV4YW1wbGUgMjogY2hlY2sgb3B0aW9uIG9yZGVyCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1IZXJlJ3MgYSBzbGlnaHRseSBtb3JlIGludGVyZXN0aW5nIGV4YW1wbGU6IHJlY29yZCB0aGUgZmFjdCB0aGF0IGBgIi1hImBgIGlzCi1zZWVuLCBidXQgYmxvdyB1cCBpZiBpdCBjb21lcyBhZnRlciBgYCItYiJgYCBpbiB0aGUgY29tbWFuZC1saW5lLiAgOjoKK0hlcmUncyBhIHNsaWdodGx5IG1vcmUgaW50ZXJlc3RpbmcgZXhhbXBsZTogcmVjb3JkIHRoZSBmYWN0IHRoYXQgYGAtYWBgIGlzCitzZWVuLCBidXQgYmxvdyB1cCBpZiBpdCBjb21lcyBhZnRlciBgYC1iYGAgaW4gdGhlIGNvbW1hbmQtbGluZS4gIDo6CiAKICAgIGRlZiBjaGVja19vcmRlcihvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgogICAgICAgIGlmIHBhcnNlci52YWx1ZXMuYjoKQEAgLTE2MjEsNyArMTcwMCw3IEBACiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIElmIHlvdSB3YW50IHRvIHJlLXVzZSB0aGlzIGNhbGxiYWNrIGZvciBzZXZlcmFsIHNpbWlsYXIgb3B0aW9ucyAoc2V0IGEgZmxhZywgYnV0Ci1ibG93IHVwIGlmIGBgIi1iImBgIGhhcyBhbHJlYWR5IGJlZW4gc2VlbiksIGl0IG5lZWRzIGEgYml0IG9mIHdvcms6IHRoZSBlcnJvcgorYmxvdyB1cCBpZiBgYC1iYGAgaGFzIGFscmVhZHkgYmVlbiBzZWVuKSwgaXQgbmVlZHMgYSBiaXQgb2Ygd29yazogdGhlIGVycm9yCiBtZXNzYWdlIGFuZCB0aGUgZmxhZyB0aGF0IGl0IHNldHMgbXVzdCBiZSBnZW5lcmFsaXplZC4gIDo6CiAKICAgIGRlZiBjaGVja19vcmRlcihvcHRpb24sIG9wdF9zdHIsIHZhbHVlLCBwYXJzZXIpOgpAQCAtMTY5MSwxNSArMTc3MCwxNSBAQAogYnVpbHQtaW4gY2FwYWJpbGl0aWVzIGZvciBpdC4gIEFuZCB5b3UgaGF2ZSB0byBkZWFsIHdpdGggY2VydGFpbiBpbnRyaWNhY2llcyBvZgogY29udmVudGlvbmFsIFVuaXggY29tbWFuZC1saW5lIHBhcnNpbmcgdGhhdCA6bW9kOmBvcHRwYXJzZWAgbm9ybWFsbHkgaGFuZGxlcyBmb3IKIHlvdS4gIEluIHBhcnRpY3VsYXIsIGNhbGxiYWNrcyBzaG91bGQgaW1wbGVtZW50IHRoZSBjb252ZW50aW9uYWwgcnVsZXMgZm9yIGJhcmUKLWBgIi0tImBgIGFuZCBgYCItImBgIGFyZ3VtZW50czoKK2BgLS1gYCBhbmQgYGAtYGAgYXJndW1lbnRzOgogCi0qIGVpdGhlciBgYCItLSJgYCBvciBgYCItImBgIGNhbiBiZSBvcHRpb24gYXJndW1lbnRzCisqIGVpdGhlciBgYC0tYGAgb3IgYGAtYGAgY2FuIGJlIG9wdGlvbiBhcmd1bWVudHMKIAotKiBiYXJlIGBgIi0tImBgIChpZiBub3QgdGhlIGFyZ3VtZW50IHRvIHNvbWUgb3B0aW9uKTogaGFsdCBjb21tYW5kLWxpbmUKLSAgcHJvY2Vzc2luZyBhbmQgZGlzY2FyZCB0aGUgYGAiLS0iYGAKKyogYmFyZSBgYC0tYGAgKGlmIG5vdCB0aGUgYXJndW1lbnQgdG8gc29tZSBvcHRpb24pOiBoYWx0IGNvbW1hbmQtbGluZQorICBwcm9jZXNzaW5nIGFuZCBkaXNjYXJkIHRoZSBgYC0tYGAKIAotKiBiYXJlIGBgIi0iYGAgKGlmIG5vdCB0aGUgYXJndW1lbnQgdG8gc29tZSBvcHRpb24pOiBoYWx0IGNvbW1hbmQtbGluZQotICBwcm9jZXNzaW5nIGJ1dCBrZWVwIHRoZSBgYCItImBgIChhcHBlbmQgaXQgdG8gYGBwYXJzZXIubGFyZ3NgYCkKKyogYmFyZSBgYC1gYCAoaWYgbm90IHRoZSBhcmd1bWVudCB0byBzb21lIG9wdGlvbik6IGhhbHQgY29tbWFuZC1saW5lCisgIHByb2Nlc3NpbmcgYnV0IGtlZXAgdGhlIGBgLWBgIChhcHBlbmQgaXQgdG8gYGBwYXJzZXIubGFyZ3NgYCkKIAogSWYgeW91IHdhbnQgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVyZSBhcmUKIHNldmVyYWwgc3VidGxlLCB0cmlja3kgaXNzdWVzIHRvIHdvcnJ5IGFib3V0LiAgVGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIHlvdQpAQCAtMTc3MCw3ICsxODQ5LDcgQEAKICAgICAgIGRlZiBjaGVja19teXR5cGUob3B0aW9uLCBvcHQsIHZhbHVlKQogCiAgICB3aGVyZSBgYG9wdGlvbmBgIGlzIGFuIDpjbGFzczpgT3B0aW9uYCBpbnN0YW5jZSwgYGBvcHRgYCBpcyBhbiBvcHRpb24gc3RyaW5nCi0gICAoZS5nLiwgYGAiLWYiYGApLCBhbmQgYGB2YWx1ZWBgIGlzIHRoZSBzdHJpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRoYXQgbXVzdAorICAgKGUuZy4sIGBgLWZgYCksIGFuZCBgYHZhbHVlYGAgaXMgdGhlIHN0cmluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdGhhdCBtdXN0CiAgICBiZSBjaGVja2VkIGFuZCBjb252ZXJ0ZWQgdG8geW91ciBkZXNpcmVkIHR5cGUuICBgYGNoZWNrX215dHlwZSgpYGAgc2hvdWxkCiAgICByZXR1cm4gYW4gb2JqZWN0IG9mIHRoZSBoeXBvdGhldGljYWwgdHlwZSBgYG15dHlwZWBgLiAgVGhlIHZhbHVlIHJldHVybmVkIGJ5CiAgICBhIHR5cGUtY2hlY2tpbmcgZnVuY3Rpb24gd2lsbCB3aW5kIHVwIGluIHRoZSBPcHRpb25WYWx1ZXMgaW5zdGFuY2UgcmV0dXJuZWQKQEAgLTE4ODIsNyArMTk2MSw3IEBACiBgYCJhcHBlbmQiYGAgYWN0aW9uLCBidXQgaW5zdGVhZCBvZiB0YWtpbmcgYSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgY29tbWFuZC1saW5lCiBhbmQgYXBwZW5kaW5nIGl0IHRvIGFuIGV4aXN0aW5nIGxpc3QsIGBgImV4dGVuZCJgYCB3aWxsIHRha2UgbXVsdGlwbGUgdmFsdWVzIGluCiBhIHNpbmdsZSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLCBhbmQgZXh0ZW5kIGFuIGV4aXN0aW5nIGxpc3Qgd2l0aCB0aGVtLiAgVGhhdAotaXMsIGlmIGBgIi0tbmFtZXMiYGAgaXMgYW4gYGAiZXh0ZW5kImBgIG9wdGlvbiBvZiB0eXBlIGBgInN0cmluZyJgYCwgdGhlIGNvbW1hbmQKK2lzLCBpZiBgYC0tbmFtZXNgYCBpcyBhbiBgYCJleHRlbmQiYGAgb3B0aW9uIG9mIHR5cGUgYGAic3RyaW5nImBgLCB0aGUgY29tbWFuZAogbGluZSA6OgogCiAgICAtLW5hbWVzPWZvbyxiYXIgLS1uYW1lcyBibGFoIC0tbmFtZXMgZGluZyxkb25nCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdCBiL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CmluZGV4IGFlNTVkZDguLjQ4NjdlOGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0CkBAIC0yNjgsMTQgKzI2OCwxNCBAQAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCiAKLSAgIFNwbGl0IHRoZSBwYXRobmFtZSAqcGF0aCogaW50byBhIHBhaXIsIGBgKGhlYWQsIHRhaWwpYGAgd2hlcmUgKnRhaWwqIGlzIHRoZSBsYXN0Ci0gICBwYXRobmFtZSBjb21wb25lbnQgYW5kICpoZWFkKiBpcyBldmVyeXRoaW5nIGxlYWRpbmcgdXAgdG8gdGhhdC4gIFRoZSAqdGFpbCogcGFydAotICAgd2lsbCBuZXZlciBjb250YWluIGEgc2xhc2g7IGlmICpwYXRoKiBlbmRzIGluIGEgc2xhc2gsICp0YWlsKiB3aWxsIGJlIGVtcHR5LiAgSWYKLSAgIHRoZXJlIGlzIG5vIHNsYXNoIGluICpwYXRoKiwgKmhlYWQqIHdpbGwgYmUgZW1wdHkuICBJZiAqcGF0aCogaXMgZW1wdHksIGJvdGgKLSAgICpoZWFkKiBhbmQgKnRhaWwqIGFyZSBlbXB0eS4gIFRyYWlsaW5nIHNsYXNoZXMgYXJlIHN0cmlwcGVkIGZyb20gKmhlYWQqIHVubGVzcwotICAgaXQgaXMgdGhlIHJvb3QgKG9uZSBvciBtb3JlIHNsYXNoZXMgb25seSkuICBJbiBuZWFybHkgYWxsIGNhc2VzLCBgYGpvaW4oaGVhZCwKLSAgIHRhaWwpYGAgZXF1YWxzICpwYXRoKiAodGhlIG9ubHkgZXhjZXB0aW9uIGJlaW5nIHdoZW4gdGhlcmUgd2VyZSBtdWx0aXBsZSBzbGFzaGVzCi0gICBzZXBhcmF0aW5nICpoZWFkKiBmcm9tICp0YWlsKikuCisgICBTcGxpdCB0aGUgcGF0aG5hbWUgKnBhdGgqIGludG8gYSBwYWlyLCBgYChoZWFkLCB0YWlsKWBgIHdoZXJlICp0YWlsKiBpcyB0aGUKKyAgIGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IGFuZCAqaGVhZCogaXMgZXZlcnl0aGluZyBsZWFkaW5nIHVwIHRvIHRoYXQuICBUaGUKKyAgICp0YWlsKiBwYXJ0IHdpbGwgbmV2ZXIgY29udGFpbiBhIHNsYXNoOyBpZiAqcGF0aCogZW5kcyBpbiBhIHNsYXNoLCAqdGFpbCoKKyAgIHdpbGwgYmUgZW1wdHkuICBJZiB0aGVyZSBpcyBubyBzbGFzaCBpbiAqcGF0aCosICpoZWFkKiB3aWxsIGJlIGVtcHR5LiAgSWYKKyAgICpwYXRoKiBpcyBlbXB0eSwgYm90aCAqaGVhZCogYW5kICp0YWlsKiBhcmUgZW1wdHkuICBUcmFpbGluZyBzbGFzaGVzIGFyZQorICAgc3RyaXBwZWQgZnJvbSAqaGVhZCogdW5sZXNzIGl0IGlzIHRoZSByb290IChvbmUgb3IgbW9yZSBzbGFzaGVzIG9ubHkpLiAgSW4KKyAgIGFsbCBjYXNlcywgYGBqb2luKGhlYWQsIHRhaWwpYGAgcmV0dXJucyBhIHBhdGggdG8gdGhlIHNhbWUgbG9jYXRpb24gYXMgKnBhdGgqCisgICAoYnV0IHRoZSBzdHJpbmdzIG1heSBkaWZmZXIpLgogCiAKIC4uIGZ1bmN0aW9uOjogc3BsaXRkcml2ZShwYXRoKQpAQCAtMzM3LDggKzMzNyw3IEBACiAuLiBkYXRhOjogc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMKIAogICAgVHJ1ZSBpZiBhcmJpdHJhcnkgVW5pY29kZSBzdHJpbmdzIGNhbiBiZSB1c2VkIGFzIGZpbGUgbmFtZXMgKHdpdGhpbiBsaW1pdGF0aW9ucwotICAgaW1wb3NlZCBieSB0aGUgZmlsZSBzeXN0ZW0pLCBhbmQgaWYgOmZ1bmM6YG9zLmxpc3RkaXJgIHJldHVybnMgVW5pY29kZSBzdHJpbmdzCi0gICBmb3IgYSBVbmljb2RlIGFyZ3VtZW50LgorICAgaW1wb3NlZCBieSB0aGUgZmlsZSBzeXN0ZW0pLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucnN0IGIvRG9jL2xpYnJhcnkvb3MucnN0CmluZGV4IDViM2E5MjIuLmU5N2NmODAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5yc3QKQEAgLTUwLDcgKzUwLDcgQEAKIC4uIGRhdGE6OiBuYW1lCiAKICAgIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudCBtb2R1bGUgaW1wb3J0ZWQuICBUaGUgZm9sbG93aW5nCi0gICBuYW1lcyBoYXZlIGN1cnJlbnRseSBiZWVuIHJlZ2lzdGVyZWQ6IGBgJ3Bvc2l4J2BgLCBgYCdudCdgYCwgYGAnbWFjJ2BgLAorICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsCiAgICBgYCdvczInYGAsIGBgJ2NlJ2BgLCBgYCdqYXZhJ2BgLCBgYCdyaXNjb3MnYGAuCiAKIApAQCAtMTUxLDYgKzE1MSwxNyBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKKy4uIGZ1bmN0aW9uOjogaW5pdGdyb3Vwcyh1c2VybmFtZSwgZ2lkKQorCisgICBDYWxsIHRoZSBzeXN0ZW0gaW5pdGdyb3VwcygpIHRvIGluaXRpYWxpemUgdGhlIGdyb3VwIGFjY2VzcyBsaXN0IHdpdGggYWxsIG9mCisgICB0aGUgZ3JvdXBzIG9mIHdoaWNoIHRoZSBzcGVjaWZpZWQgdXNlcm5hbWUgaXMgYSBtZW1iZXIsIHBsdXMgdGhlIHNwZWNpZmllZAorICAgZ3JvdXAgaWQuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZnVuY3Rpb246OiBnZXRsb2dpbigpCiAKICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdXNlciBsb2dnZWQgaW4gb24gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG9mIHRoZQpAQCAtMTk5LDYgKzIxMCwyNiBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0cmVzdWlkKCkKKworICAgUmV0dXJuIGEgdHVwbGUgKHJ1aWQsIGV1aWQsIHN1aWQpIGRlbm90aW5nIHRoZSBjdXJyZW50IHByb2Nlc3MncworICAgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBnZXRyZXNnaWQoKQorCisgICBSZXR1cm4gYSB0dXBsZSAocmdpZCwgZWdpZCwgc2dpZCkgZGVub3RpbmcgdGhlIGN1cnJlbnQgcHJvY2VzcydzCisgICByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZnVuY3Rpb246OiBnZXR1aWQoKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogdXNlcjsgaWQKQEAgLTI4NiwxNiArMzE3LDM0IEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAotLi4gZnVuY3Rpb246OiBzZXRyZXVpZChydWlkLCBldWlkKQorLi4gZnVuY3Rpb246OiBzZXRyZWdpZChyZ2lkLCBlZ2lkKQogCi0gICBTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcy4KKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIGdyb3VwIGlkcy4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKLS4uIGZ1bmN0aW9uOjogc2V0cmVnaWQocmdpZCwgZWdpZCkKKy4uIGZ1bmN0aW9uOjogc2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpCiAKLSAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIGdyb3VwIGlkcy4KKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpCisKKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBzZXRyZXVpZChydWlkLCBldWlkKQorCisgICBTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcy4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCkBAIC02MjUsNyArNjc0LDcgQEAKIAogLi4gZnVuY3Rpb246OiBmc3RhdChmZCkKIAotICAgUmV0dXJuIHN0YXR1cyBmb3IgZmlsZSBkZXNjcmlwdG9yICpmZCosIGxpa2UgOmZ1bmM6YHN0YXRgLgorICAgUmV0dXJuIHN0YXR1cyBmb3IgZmlsZSBkZXNjcmlwdG9yICpmZCosIGxpa2UgOmZ1bmM6YH5vcy5zdGF0YC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC02ODIsNyArNzMxLDkgQEAKICAgICAgICAgICBTRUVLX0VORAogCiAgICBQYXJhbWV0ZXJzIHRvIHRoZSA6ZnVuYzpgbHNlZWtgIGZ1bmN0aW9uLiBUaGVpciB2YWx1ZXMgYXJlIDAsIDEsIGFuZCAyLAotICAgcmVzcGVjdGl2ZWx5LiBBdmFpbGFiaWxpdHk6IFdpbmRvd3MsIFVuaXguCisgICByZXNwZWN0aXZlbHkuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cywgVW5peC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKQEAgLTEwNjMsOSArMTExNCwxMCBAQAogCiAuLiBmdW5jdGlvbjo6IGxzdGF0KHBhdGgpCiAKLSAgIExpa2UgOmZ1bmM6YHN0YXRgLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gIFRoaXMgaXMgYW4gYWxpYXMgZm9yCi0gICA6ZnVuYzpgc3RhdGAgb24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgc3ltYm9saWMgbGlua3MsIHN1Y2ggYXMKLSAgIFdpbmRvd3MuCisgICBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGFuIDpjZnVuYzpgbHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorICAgU2ltaWxhciB0byA6ZnVuYzpgfm9zLnN0YXRgLCBidXQgZG9lcyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiAgT24KKyAgIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLCB0aGlzIGlzIGFuIGFsaWFzIGZvcgorICAgOmZ1bmM6YH5vcy5zdGF0YC4KIAogCiAuLiBmdW5jdGlvbjo6IG1rZmlmbyhwYXRoWywgbW9kZV0pCkBAIC0xMTI0LDcgKzExNzYsOCBAQAogCiAgICBDcmVhdGUgYSBkaXJlY3RvcnkgbmFtZWQgKnBhdGgqIHdpdGggbnVtZXJpYyBtb2RlICptb2RlKi4gVGhlIGRlZmF1bHQgKm1vZGUqIGlzCiAgICBgYDA3NzdgYCAob2N0YWwpLiAgT24gc29tZSBzeXN0ZW1zLCAqbW9kZSogaXMgaWdub3JlZC4gIFdoZXJlIGl0IGlzIHVzZWQsIHRoZQotICAgY3VycmVudCB1bWFzayB2YWx1ZSBpcyBmaXJzdCBtYXNrZWQgb3V0LgorICAgY3VycmVudCB1bWFzayB2YWx1ZSBpcyBmaXJzdCBtYXNrZWQgb3V0LiAgSWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cywKKyAgIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzOyBzZWUgdGhlCiAgICA6bW9kOmB0ZW1wZmlsZWAgbW9kdWxlJ3MgOmZ1bmM6YHRlbXBmaWxlLm1rZHRlbXBgIGZ1bmN0aW9uLgpAQCAtMTEzOSw3ICsxMTkyLDcgQEAKICAgICAgIHNpbmdsZTogVU5DIHBhdGhzOyBhbmQgb3MubWFrZWRpcnMoKQogCiAgICBSZWN1cnNpdmUgZGlyZWN0b3J5IGNyZWF0aW9uIGZ1bmN0aW9uLiAgTGlrZSA6ZnVuYzpgbWtkaXJgLCBidXQgbWFrZXMgYWxsCi0gICBpbnRlcm1lZGlhdGUtbGV2ZWwgZGlyZWN0b3JpZXMgbmVlZGVkIHRvIGNvbnRhaW4gdGhlIGxlYWYgZGlyZWN0b3J5LiAgVGhyb3dzIGFuCisgICBpbnRlcm1lZGlhdGUtbGV2ZWwgZGlyZWN0b3JpZXMgbmVlZGVkIHRvIGNvbnRhaW4gdGhlIGxlYWYgZGlyZWN0b3J5LiAgUmFpc2VzIGFuCiAgICA6ZXhjOmBlcnJvcmAgZXhjZXB0aW9uIGlmIHRoZSBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBvciBjYW5ub3QgYmUKICAgIGNyZWF0ZWQuICBUaGUgZGVmYXVsdCAqbW9kZSogaXMgYGAwNzc3YGAgKG9jdGFsKS4gIE9uIHNvbWUgc3lzdGVtcywgKm1vZGUqIGlzCiAgICBpZ25vcmVkLiBXaGVyZSBpdCBpcyB1c2VkLCB0aGUgY3VycmVudCB1bWFzayB2YWx1ZSBpcyBmaXJzdCBtYXNrZWQgb3V0LgpAQCAtMTI2MiwyMyArMTMxNSwyMyBAQAogCiAuLiBmdW5jdGlvbjo6IHN0YXQocGF0aCkKIAotICAgUGVyZm9ybSBhIDpjZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuCi0gICBvYmplY3Qgd2hvc2UgYXR0cmlidXRlcyBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzIG9mIHRoZSA6Y3R5cGU6YHN0YXRgCi0gICBzdHJ1Y3R1cmUsIG5hbWVseTogOmF0dHI6YHN0X21vZGVgIChwcm90ZWN0aW9uIGJpdHMpLCA6YXR0cjpgc3RfaW5vYCAoaW5vZGUKLSAgIG51bWJlciksIDphdHRyOmBzdF9kZXZgIChkZXZpY2UpLCA6YXR0cjpgc3RfbmxpbmtgIChudW1iZXIgb2YgaGFyZCBsaW5rcyksCi0gICA6YXR0cjpgc3RfdWlkYCAodXNlciBpZCBvZiBvd25lciksIDphdHRyOmBzdF9naWRgIChncm91cCBpZCBvZiBvd25lciksCi0gICA6YXR0cjpgc3Rfc2l6ZWAgKHNpemUgb2YgZmlsZSwgaW4gYnl0ZXMpLCA6YXR0cjpgc3RfYXRpbWVgICh0aW1lIG9mIG1vc3QgcmVjZW50Ci0gICBhY2Nlc3MpLCA6YXR0cjpgc3RfbXRpbWVgICh0aW1lIG9mIG1vc3QgcmVjZW50IGNvbnRlbnQgbW9kaWZpY2F0aW9uKSwKLSAgIDphdHRyOmBzdF9jdGltZWAgKHBsYXRmb3JtIGRlcGVuZGVudDsgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YSBjaGFuZ2Ugb24KLSAgIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MpOjoKKyAgIFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYSA6Y2Z1bmM6YHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorICAgKFRoaXMgZnVuY3Rpb24gZm9sbG93cyBzeW1saW5rczsgdG8gc3RhdCBhIHN5bWxpbmsgdXNlIDpmdW5jOmBsc3RhdGAuKQogCi0gICAgICA+Pj4gaW1wb3J0IG9zCi0gICAgICA+Pj4gc3RhdGluZm8gPSBvcy5zdGF0KCdzb21lZmlsZS50eHQnKQotICAgICAgPj4+IHN0YXRpbmZvCi0gICAgICAoMzMxODgsIDQyMjUxMUwsIDc2OUwsIDEsIDEwMzIsIDEwMCwgOTI2TCwgMTEwNTAyMjY5OCwxMTA1MDIyNzMyLCAxMTA1MDIyNzMyKQotICAgICAgPj4+IHN0YXRpbmZvLnN0X3NpemUKLSAgICAgIDkyNkwKLSAgICAgID4+PgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvYmplY3Qgd2hvc2UgYXR0cmlidXRlcyBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzCisgICBvZiB0aGUgOmN0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUsIG5hbWVseToKKworICAgKiA6YXR0cjpgc3RfbW9kZWAgLSBwcm90ZWN0aW9uIGJpdHMsCisgICAqIDphdHRyOmBzdF9pbm9gIC0gaW5vZGUgbnVtYmVyLAorICAgKiA6YXR0cjpgc3RfZGV2YCAtIGRldmljZSwKKyAgICogOmF0dHI6YHN0X25saW5rYCAtIG51bWJlciBvZiBoYXJkIGxpbmtzLAorICAgKiA6YXR0cjpgc3RfdWlkYCAtIHVzZXIgaWQgb2Ygb3duZXIsCisgICAqIDphdHRyOmBzdF9naWRgIC0gZ3JvdXAgaWQgb2Ygb3duZXIsCisgICAqIDphdHRyOmBzdF9zaXplYCAtIHNpemUgb2YgZmlsZSwgaW4gYnl0ZXMsCisgICAqIDphdHRyOmBzdF9hdGltZWAgLSB0aW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcywKKyAgICogOmF0dHI6YHN0X210aW1lYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24sCisgICAqIDphdHRyOmBzdF9jdGltZWAgLSBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEgY2hhbmdlIG9uCisgICAgIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MpCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4zCiAgICAgICBJZiA6ZnVuYzpgc3RhdF9mbG9hdF90aW1lc2AgcmV0dXJucyBgYFRydWVgYCwgdGhlIHRpbWUgdmFsdWVzIGFyZSBmbG9hdHMsIG1lYXN1cmluZwpAQCAtMTI4NywzMSArMTM0MCwzMCBAQAogICAgICAgZGlzY3Vzc2lvbi4KIAogICAgT24gc29tZSBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgTGludXgpLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUKLSAgIGF2YWlsYWJsZTogOmF0dHI6YHN0X2Jsb2Nrc2AgKG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciBmaWxlKSwKLSAgIDphdHRyOmBzdF9ibGtzaXplYCAoZmlsZXN5c3RlbSBibG9ja3NpemUpLCA6YXR0cjpgc3RfcmRldmAgKHR5cGUgb2YgZGV2aWNlIGlmIGFuCi0gICBpbm9kZSBkZXZpY2UpLiA6YXR0cjpgc3RfZmxhZ3NgICh1c2VyIGRlZmluZWQgZmxhZ3MgZm9yIGZpbGUpLgorICAgYXZhaWxhYmxlOgorCisgICAqIDphdHRyOmBzdF9ibG9ja3NgIC0gbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIGZpbGUKKyAgICogOmF0dHI6YHN0X2Jsa3NpemVgIC0gZmlsZXN5c3RlbSBibG9ja3NpemUKKyAgICogOmF0dHI6YHN0X3JkZXZgIC0gdHlwZSBvZiBkZXZpY2UgaWYgYW4gaW5vZGUgZGV2aWNlCisgICAqIDphdHRyOmBzdF9mbGFnc2AgLSB1c2VyIGRlZmluZWQgZmxhZ3MgZm9yIGZpbGUKIAogICAgT24gb3RoZXIgVW5peCBzeXN0ZW1zIChzdWNoIGFzIEZyZWVCU0QpLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGJlCi0gICBhdmFpbGFibGUgKGJ1dCBtYXkgYmUgb25seSBmaWxsZWQgb3V0IGlmIHJvb3QgdHJpZXMgdG8gdXNlIHRoZW0pOiA6YXR0cjpgc3RfZ2VuYAotICAgKGZpbGUgZ2VuZXJhdGlvbiBudW1iZXIpLCA6YXR0cjpgc3RfYmlydGh0aW1lYCAodGltZSBvZiBmaWxlIGNyZWF0aW9uKS4KKyAgIGF2YWlsYWJsZSAoYnV0IG1heSBiZSBvbmx5IGZpbGxlZCBvdXQgaWYgcm9vdCB0cmllcyB0byB1c2UgdGhlbSk6CisKKyAgICogOmF0dHI6YHN0X2dlbmAgLSBmaWxlIGdlbmVyYXRpb24gbnVtYmVyCisgICAqIDphdHRyOmBzdF9iaXJ0aHRpbWVgIC0gdGltZSBvZiBmaWxlIGNyZWF0aW9uCiAKICAgIE9uIE1hYyBPUyBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlOgotICAgOmF0dHI6YHN0X3JzaXplYCwgOmF0dHI6YHN0X2NyZWF0b3JgLCA6YXR0cjpgc3RfdHlwZWAuCiAKLSAgIE9uIFJJU0NPUyBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlOiA6YXR0cjpgc3RfZnR5cGVgCi0gICAoZmlsZSB0eXBlKSwgOmF0dHI6YHN0X2F0dHJzYCAoYXR0cmlidXRlcyksIDphdHRyOmBzdF9vYnR5cGVgIChvYmplY3QgdHlwZSkuCisgICAqIDphdHRyOmBzdF9yc2l6ZWAKKyAgICogOmF0dHI6YHN0X2NyZWF0b3JgCisgICAqIDphdHRyOmBzdF90eXBlYAogCi0gICAuLiBpbmRleDo6IG1vZHVsZTogc3RhdAorICAgT24gUklTQ09TIHN5c3RlbXMsIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGU6CiAKLSAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIDpmdW5jOmBzdGF0YCBpcyBhbHNvIGFjY2Vzc2libGUKLSAgIGFzIGEgdHVwbGUgb2YgYXQgbGVhc3QgMTAgaW50ZWdlcnMgZ2l2aW5nIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHBvcnRhYmxlKQotICAgbWVtYmVycyBvZiB0aGUgOmN0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUsIGluIHRoZSBvcmRlciA6YXR0cjpgc3RfbW9kZWAsCi0gICA6YXR0cjpgc3RfaW5vYCwgOmF0dHI6YHN0X2RldmAsIDphdHRyOmBzdF9ubGlua2AsIDphdHRyOmBzdF91aWRgLAotICAgOmF0dHI6YHN0X2dpZGAsIDphdHRyOmBzdF9zaXplYCwgOmF0dHI6YHN0X2F0aW1lYCwgOmF0dHI6YHN0X210aW1lYCwKLSAgIDphdHRyOmBzdF9jdGltZWAuIE1vcmUgaXRlbXMgbWF5IGJlIGFkZGVkIGF0IHRoZSBlbmQgYnkgc29tZSBpbXBsZW1lbnRhdGlvbnMuCi0gICBUaGUgc3RhbmRhcmQgbW9kdWxlIDptb2Q6YHN0YXRgIGRlZmluZXMgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgdGhhdCBhcmUgdXNlZnVsCi0gICBmb3IgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgOmN0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIChPbiBXaW5kb3dzLCBzb21lCi0gICBpdGVtcyBhcmUgZmlsbGVkIHdpdGggZHVtbXkgdmFsdWVzLikKKyAgICogOmF0dHI6YHN0X2Z0eXBlYCAoZmlsZSB0eXBlKQorICAgKiA6YXR0cjpgc3RfYXR0cnNgIChhdHRyaWJ1dGVzKQorICAgKiA6YXR0cjpgc3Rfb2J0eXBlYCAob2JqZWN0IHR5cGUpLgogCiAgICAuLiBub3RlOjoKIApAQCAtMTMyMSw2ICsxMzczLDI4IEBACiAgICAgICA6YXR0cjpgc3RfbXRpbWVgIGhhcyAyLXNlY29uZCByZXNvbHV0aW9uLCBhbmQgOmF0dHI6YHN0X2F0aW1lYCBoYXMgb25seSAxLWRheQogICAgICAgcmVzb2x1dGlvbi4gIFNlZSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KIAorICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSByZXR1cm4gdmFsdWUgb2YgOmZ1bmM6YH5vcy5zdGF0YCBpcyBhbHNvIGFjY2Vzc2libGUKKyAgIGFzIGEgdHVwbGUgb2YgYXQgbGVhc3QgMTAgaW50ZWdlcnMgZ2l2aW5nIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHBvcnRhYmxlKQorICAgbWVtYmVycyBvZiB0aGUgOmN0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUsIGluIHRoZSBvcmRlciA6YXR0cjpgc3RfbW9kZWAsCisgICA6YXR0cjpgc3RfaW5vYCwgOmF0dHI6YHN0X2RldmAsIDphdHRyOmBzdF9ubGlua2AsIDphdHRyOmBzdF91aWRgLAorICAgOmF0dHI6YHN0X2dpZGAsIDphdHRyOmBzdF9zaXplYCwgOmF0dHI6YHN0X2F0aW1lYCwgOmF0dHI6YHN0X210aW1lYCwKKyAgIDphdHRyOmBzdF9jdGltZWAuIE1vcmUgaXRlbXMgbWF5IGJlIGFkZGVkIGF0IHRoZSBlbmQgYnkgc29tZSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgIC4uIGluZGV4OjogbW9kdWxlOiBzdGF0CisKKyAgIFRoZSBzdGFuZGFyZCBtb2R1bGUgOm1vZDpgc3RhdGAgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VmdWwKKyAgIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZS4gKE9uIFdpbmRvd3MsIHNvbWUKKyAgIGl0ZW1zIGFyZSBmaWxsZWQgd2l0aCBkdW1teSB2YWx1ZXMuKQorCisgICBFeGFtcGxlOjoKKworICAgICAgPj4+IGltcG9ydCBvcworICAgICAgPj4+IHN0YXRpbmZvID0gb3Muc3RhdCgnc29tZWZpbGUudHh0JykKKyAgICAgID4+PiBzdGF0aW5mbworICAgICAgKDMzMTg4LCA0MjI1MTEsIDc2OSwgMSwgMTAzMiwgMTAwLCA5MjYsIDExMDUwMjI2OTgsMTEwNTAyMjczMiwgMTEwNTAyMjczMikKKyAgICAgID4+PiBzdGF0aW5mby5zdF9zaXplCisgICAgICA5MjYKKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMgpAQCAtMTMzMyw3ICsxNDA3LDcgQEAKIC4uIGZ1bmN0aW9uOjogc3RhdF9mbG9hdF90aW1lcyhbbmV3dmFsdWVdKQogCiAgICBEZXRlcm1pbmUgd2hldGhlciA6Y2xhc3M6YHN0YXRfcmVzdWx0YCByZXByZXNlbnRzIHRpbWUgc3RhbXBzIGFzIGZsb2F0IG9iamVjdHMuCi0gICBJZiAqbmV3dmFsdWUqIGlzIGBgVHJ1ZWBgLCBmdXR1cmUgY2FsbHMgdG8gOmZ1bmM6YHN0YXRgIHJldHVybiBmbG9hdHMsIGlmIGl0IGlzCisgICBJZiAqbmV3dmFsdWUqIGlzIGBgVHJ1ZWBgLCBmdXR1cmUgY2FsbHMgdG8gOmZ1bmM6YH5vcy5zdGF0YCByZXR1cm4gZmxvYXRzLCBpZiBpdCBpcwogICAgYGBGYWxzZWBgLCBmdXR1cmUgY2FsbHMgcmV0dXJuIGludHMuIElmICpuZXd2YWx1ZSogaXMgb21pdHRlZCwgcmV0dXJuIHRoZQogICAgY3VycmVudCBzZXR0aW5nLgogCkBAIC0xNDUzLDggKzE1MjcsOCBAQAogICAgcmVzcGVjdGl2ZWx5LiBXaGV0aGVyIGEgZGlyZWN0b3J5IGNhbiBiZSBnaXZlbiBmb3IgKnBhdGgqIGRlcGVuZHMgb24gd2hldGhlcgogICAgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW1wbGVtZW50cyBkaXJlY3RvcmllcyBhcyBmaWxlcyAoZm9yIGV4YW1wbGUsIFdpbmRvd3MKICAgIGRvZXMgbm90KS4gIE5vdGUgdGhhdCB0aGUgZXhhY3QgdGltZXMgeW91IHNldCBoZXJlIG1heSBub3QgYmUgcmV0dXJuZWQgYnkgYQotICAgc3Vic2VxdWVudCA6ZnVuYzpgc3RhdGAgY2FsbCwgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uIHdpdGggd2hpY2ggeW91cgotICAgb3BlcmF0aW5nIHN5c3RlbSByZWNvcmRzIGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIHRpbWVzOyBzZWUgOmZ1bmM6YHN0YXRgLgorICAgc3Vic2VxdWVudCA6ZnVuYzpgfm9zLnN0YXRgIGNhbGwsIGRlcGVuZGluZyBvbiB0aGUgcmVzb2x1dGlvbiB3aXRoIHdoaWNoIHlvdXIKKyAgIG9wZXJhdGluZyBzeXN0ZW0gcmVjb3JkcyBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0aW1lczsgc2VlIDpmdW5jOmB+b3Muc3RhdGAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4wCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBgYE5vbmVgYCBmb3IgKnRpbWVzKi4KQEAgLTE2MjcsMTUgKzE3MDEsMTUgQEAKIAogLi4gZnVuY3Rpb246OiBfZXhpdChuKQogCi0gICBFeGl0IHRvIHRoZSBzeXN0ZW0gd2l0aCBzdGF0dXMgKm4qLCB3aXRob3V0IGNhbGxpbmcgY2xlYW51cCBoYW5kbGVycywgZmx1c2hpbmcKKyAgIEV4aXQgdGhlIHByb2Nlc3Mgd2l0aCBzdGF0dXMgKm4qLCB3aXRob3V0IGNhbGxpbmcgY2xlYW51cCBoYW5kbGVycywgZmx1c2hpbmcKICAgIHN0ZGlvIGJ1ZmZlcnMsIGV0Yy4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgVGhlIHN0YW5kYXJkIHdheSB0byBleGl0IGlzIGBgc3lzLmV4aXQobilgYC4gOmZ1bmM6YF9leGl0YCBzaG91bGQgbm9ybWFsbHkgb25seQotICAgICAgYmUgdXNlZCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBhZnRlciBhIDpmdW5jOmBmb3JrYC4KKyAgICAgIFRoZSBzdGFuZGFyZCB3YXkgdG8gZXhpdCBpcyBgYHN5cy5leGl0KG4pYGAuICA6ZnVuYzpgX2V4aXRgIHNob3VsZAorICAgICAgbm9ybWFsbHkgb25seSBiZSB1c2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGEgOmZ1bmM6YGZvcmtgLgogCiBUaGUgZm9sbG93aW5nIGV4aXQgY29kZXMgYXJlIGRlZmluZWQgYW5kIGNhbiBiZSB1c2VkIHdpdGggOmZ1bmM6YF9leGl0YCwKIGFsdGhvdWdoIHRoZXkgYXJlIG5vdCByZXF1aXJlZC4gIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3Igc3lzdGVtIHByb2dyYW1zCkBAIC0xODM4LDcgKzE5MTIsMTYgQEAKIAogICAgU2VuZCBzaWduYWwgKnNpZyogdG8gdGhlIHByb2Nlc3MgKnBpZCouICBDb25zdGFudHMgZm9yIHRoZSBzcGVjaWZpYyBzaWduYWxzCiAgICBhdmFpbGFibGUgb24gdGhlIGhvc3QgcGxhdGZvcm0gYXJlIGRlZmluZWQgaW4gdGhlIDptb2Q6YHNpZ25hbGAgbW9kdWxlLgotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICBXaW5kb3dzOiBUaGUgOmRhdGE6YHNpZ25hbC5DVFJMX0NfRVZFTlRgIGFuZAorICAgOmRhdGE6YHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5UYCBzaWduYWxzIGFyZSBzcGVjaWFsIHNpZ25hbHMgd2hpY2ggY2FuCisgICBvbmx5IGJlIHNlbnQgdG8gY29uc29sZSBwcm9jZXNzZXMgd2hpY2ggc2hhcmUgYSBjb21tb24gY29uc29sZSB3aW5kb3csCisgICBlLmcuLCBzb21lIHN1YnByb2Nlc3Nlcy4gQW55IG90aGVyIHZhbHVlIGZvciAqc2lnKiB3aWxsIGNhdXNlIHRoZSBwcm9jZXNzCisgICB0byBiZSB1bmNvbmRpdGlvbmFsbHkga2lsbGVkIGJ5IHRoZSBUZXJtaW5hdGVQcm9jZXNzIEFQSSwgYW5kIHRoZSBleGl0IGNvZGUKKyAgIHdpbGwgYmUgc2V0IHRvICpzaWcqLiBUaGUgV2luZG93cyB2ZXJzaW9uIG9mIDpmdW5jOmBraWxsYCBhZGRpdGlvbmFsbHkgdGFrZXMKKyAgIHByb2Nlc3MgaGFuZGxlcyB0byBiZSBraWxsZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNyBXaW5kb3dzIHN1cHBvcnQKIAogCiAuLiBmdW5jdGlvbjo6IGtpbGxwZyhwZ2lkLCBzaWcpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvcGFyc2VyLnJzdAppbmRleCBiMWNiZDEyLi5jNDZhZWFlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgVGhlIDpmdW5jOmBleHByYCBmdW5jdGlvbiBwYXJzZXMgdGhlIHBhcmFtZXRlciAqc291cmNlKiBhcyBpZiBpdCB3ZXJlIGFuIGlucHV0CiAgICB0byBgYGNvbXBpbGUoc291cmNlLCAnZmlsZS5weScsICdldmFsJylgYC4gIElmIHRoZSBwYXJzZSBzdWNjZWVkcywgYW4gU1Qgb2JqZWN0CiAgICBpcyBjcmVhdGVkIHRvIGhvbGQgdGhlIGludGVybmFsIHBhcnNlIHRyZWUgcmVwcmVzZW50YXRpb24sIG90aGVyd2lzZSBhbgotICAgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGlzIHRocm93bi4KKyAgIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIAogLi4gZnVuY3Rpb246OiBzdWl0ZShzb3VyY2UpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgIFRoZSA6ZnVuYzpgc3VpdGVgIGZ1bmN0aW9uIHBhcnNlcyB0aGUgcGFyYW1ldGVyICpzb3VyY2UqIGFzIGlmIGl0IHdlcmUgYW4gaW5wdXQKICAgIHRvIGBgY29tcGlsZShzb3VyY2UsICdmaWxlLnB5JywgJ2V4ZWMnKWBgLiAgSWYgdGhlIHBhcnNlIHN1Y2NlZWRzLCBhbiBTVCBvYmplY3QKICAgIGlzIGNyZWF0ZWQgdG8gaG9sZCB0aGUgaW50ZXJuYWwgcGFyc2UgdHJlZSByZXByZXNlbnRhdGlvbiwgb3RoZXJ3aXNlIGFuCi0gICBhcHByb3ByaWF0ZSBleGNlcHRpb24gaXMgdGhyb3duLgorICAgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCiAuLiBmdW5jdGlvbjo6IHNlcXVlbmNlMnN0KHNlcXVlbmNlKQpAQCAtMTM5LDkgKzEzOSw5IEBACiAgICB0byB0aGUgUHl0aG9uIGdyYW1tYXIgYW5kIGFsbCBub2RlcyBhcmUgdmFsaWQgbm9kZSB0eXBlcyBpbiB0aGUgaG9zdCB2ZXJzaW9uIG9mCiAgICBQeXRob24sIGFuIFNUIG9iamVjdCBpcyBjcmVhdGVkIGZyb20gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGFuZCByZXR1cm5lZAogICAgdG8gdGhlIGNhbGxlZC4gIElmIHRoZXJlIGlzIGEgcHJvYmxlbSBjcmVhdGluZyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIG9yCi0gICBpZiB0aGUgdHJlZSBjYW5ub3QgYmUgdmFsaWRhdGVkLCBhIDpleGM6YFBhcnNlckVycm9yYCBleGNlcHRpb24gaXMgdGhyb3duLiAgQW4KKyAgIGlmIHRoZSB0cmVlIGNhbm5vdCBiZSB2YWxpZGF0ZWQsIGEgOmV4YzpgUGFyc2VyRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBBbgogICAgU1Qgb2JqZWN0IGNyZWF0ZWQgdGhpcyB3YXkgc2hvdWxkIG5vdCBiZSBhc3N1bWVkIHRvIGNvbXBpbGUgY29ycmVjdGx5OyBub3JtYWwKLSAgIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IGNvbXBpbGF0aW9uIG1heSBzdGlsbCBiZSBpbml0aWF0ZWQgd2hlbiB0aGUgU1Qgb2JqZWN0IGlzCisgICBleGNlcHRpb25zIHJhaXNlZCBieSBjb21waWxhdGlvbiBtYXkgc3RpbGwgYmUgaW5pdGlhdGVkIHdoZW4gdGhlIFNUIG9iamVjdCBpcwogICAgcGFzc2VkIHRvIDpmdW5jOmBjb21waWxlc3RgLiAgVGhpcyBtYXkgaW5kaWNhdGUgcHJvYmxlbXMgbm90IHJlbGF0ZWQgdG8gc3ludGF4CiAgICAoc3VjaCBhcyBhIDpleGM6YE1lbW9yeUVycm9yYCBleGNlcHRpb24pLCBidXQgbWF5IGFsc28gYmUgZHVlIHRvIGNvbnN0cnVjdHMgc3VjaAogICAgYXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGBgZGVsIGYoMClgYCwgd2hpY2ggZXNjYXBlcyB0aGUgUHl0aG9uIHBhcnNlciBidXQgaXMKQEAgLTI2NCw4ICsyNjQsOCBAQAogLi4gZXhjZXB0aW9uOjogUGFyc2VyRXJyb3IKIAogICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZmFpbHVyZSBvY2N1cnMgd2l0aGluIHRoZSBwYXJzZXIgbW9kdWxlLiAgVGhpcyBpcwotICAgZ2VuZXJhbGx5IHByb2R1Y2VkIGZvciB2YWxpZGF0aW9uIGZhaWx1cmVzIHJhdGhlciB0aGFuIHRoZSBidWlsdCBpbgotICAgOmV4YzpgU3ludGF4RXJyb3JgIHRocm93biBkdXJpbmcgbm9ybWFsIHBhcnNpbmcuIFRoZSBleGNlcHRpb24gYXJndW1lbnQgaXMKKyAgIGdlbmVyYWxseSBwcm9kdWNlZCBmb3IgdmFsaWRhdGlvbiBmYWlsdXJlcyByYXRoZXIgdGhhbiB0aGUgYnVpbHQtaW4KKyAgIDpleGM6YFN5bnRheEVycm9yYCByYWlzZWQgZHVyaW5nIG5vcm1hbCBwYXJzaW5nLiBUaGUgZXhjZXB0aW9uIGFyZ3VtZW50IGlzCiAgICBlaXRoZXIgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIG9mIHRoZSBmYWlsdXJlIG9yIGEgdHVwbGUgY29udGFpbmluZyBhCiAgICBzZXF1ZW5jZSBjYXVzaW5nIHRoZSBmYWlsdXJlIGZyb20gYSBwYXJzZSB0cmVlIHBhc3NlZCB0byA6ZnVuYzpgc2VxdWVuY2Uyc3RgCiAgICBhbmQgYW4gZXhwbGFuYXRvcnkgc3RyaW5nLiAgQ2FsbHMgdG8gOmZ1bmM6YHNlcXVlbmNlMnN0YCBuZWVkIHRvIGJlIGFibGUgdG8KQEAgLTI3Myw3ICsyNzMsNyBAQAogICAgd2lsbCBvbmx5IG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIHNpbXBsZSBzdHJpbmcgdmFsdWVzLgogCiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9ucyA6ZnVuYzpgY29tcGlsZXN0YCwgOmZ1bmM6YGV4cHJgLCBhbmQgOmZ1bmM6YHN1aXRlYCBtYXkKLXRocm93IGV4Y2VwdGlvbnMgd2hpY2ggYXJlIG5vcm1hbGx5IHRocm93biBieSB0aGUgcGFyc2luZyBhbmQgY29tcGlsYXRpb24KK3JhaXNlIGV4Y2VwdGlvbnMgd2hpY2ggYXJlIG5vcm1hbGx5IHJhaXNlZCBieSB0aGUgcGFyc2luZyBhbmQgY29tcGlsYXRpb24KIHByb2Nlc3MuICBUaGVzZSBpbmNsdWRlIHRoZSBidWlsdCBpbiBleGNlcHRpb25zIDpleGM6YE1lbW9yeUVycm9yYCwKIDpleGM6YE92ZXJmbG93RXJyb3JgLCA6ZXhjOmBTeW50YXhFcnJvcmAsIGFuZCA6ZXhjOmBTeXN0ZW1FcnJvcmAuICBJbiB0aGVzZQogY2FzZXMsIHRoZXNlIGV4Y2VwdGlvbnMgY2FycnkgYWxsIHRoZSBtZWFuaW5nIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCB0aGVtLgpAQCAtMzIyLDIyICszMjIsOCBAQAogICAgU2FtZSBhcyBgYHN0MnR1cGxlKHN0LCBsaW5lX2luZm8pYGAuCiAKIAotLi4gX3N0LWV4YW1wbGVzOgotCi1FeGFtcGxlcwotLS0tLS0tLS0KLQotLi4gaW5kZXg6OiBidWlsdGluOiBjb21waWxlCi0KLVRoZSBwYXJzZXIgbW9kdWxlcyBhbGxvd3Mgb3BlcmF0aW9ucyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIHBhcnNlIHRyZWUgb2YgUHl0aG9uCi1zb3VyY2UgY29kZSBiZWZvcmUgdGhlIDp0ZXJtOmBieXRlY29kZWAgaXMgZ2VuZXJhdGVkLCBhbmQgcHJvdmlkZXMgZm9yIGluc3BlY3Rpb24gb2YgdGhlCi1wYXJzZSB0cmVlIGZvciBpbmZvcm1hdGlvbiBnYXRoZXJpbmcgcHVycG9zZXMuIFR3byBleGFtcGxlcyBhcmUgcHJlc2VudGVkLiAgVGhlCi1zaW1wbGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgZW11bGF0aW9uIG9mIHRoZSA6ZnVuYzpgY29tcGlsZWAgYnVpbHQtaW4gZnVuY3Rpb24KLWFuZCB0aGUgY29tcGxleCBleGFtcGxlIHNob3dzIHRoZSB1c2Ugb2YgYSBwYXJzZSB0cmVlIGZvciBpbmZvcm1hdGlvbiBkaXNjb3ZlcnkuCi0KLQotRW11bGF0aW9uIG9mIDpmdW5jOmBjb21waWxlYAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorRXhhbXBsZTogRW11bGF0aW9uIG9mIDpmdW5jOmBjb21waWxlYAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGlsZSBtYW55IHVzZWZ1bCBvcGVyYXRpb25zIG1heSB0YWtlIHBsYWNlIGJldHdlZW4gcGFyc2luZyBhbmQgYnl0ZWNvZGUKIGdlbmVyYXRpb24sIHRoZSBzaW1wbGVzdCBvcGVyYXRpb24gaXMgdG8gZG8gbm90aGluZy4gIEZvciB0aGlzIHB1cnBvc2UsIHVzaW5nCkBAIC0zNzEsMzIyICszNTcsMyBAQAogICAgZGVmIGxvYWRfZXhwcmVzc2lvbihzb3VyY2Vfc3RyaW5nKToKICAgICAgICBzdCA9IHBhcnNlci5leHByKHNvdXJjZV9zdHJpbmcpCiAgICAgICAgcmV0dXJuIHN0LCBzdC5jb21waWxlKCkKLQotCi1JbmZvcm1hdGlvbiBEaXNjb3ZlcnkKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi0uLiBpbmRleDo6Ci0gICBzaW5nbGU6IHN0cmluZzsgZG9jdW1lbnRhdGlvbgotICAgc2luZ2xlOiBkb2NzdHJpbmdzCi0KLVNvbWUgYXBwbGljYXRpb25zIGJlbmVmaXQgZnJvbSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBwYXJzZSB0cmVlLiAgVGhlIHJlbWFpbmRlcgotb2YgdGhpcyBzZWN0aW9uIGRlbW9uc3RyYXRlcyBob3cgdGhlIHBhcnNlIHRyZWUgcHJvdmlkZXMgYWNjZXNzIHRvIG1vZHVsZQotZG9jdW1lbnRhdGlvbiBkZWZpbmVkIGluIGRvY3N0cmluZ3Mgd2l0aG91dCByZXF1aXJpbmcgdGhhdCB0aGUgY29kZSBiZWluZwotZXhhbWluZWQgYmUgbG9hZGVkIGludG8gYSBydW5uaW5nIGludGVycHJldGVyIHZpYSA6a2V5d29yZDpgaW1wb3J0YC4gIFRoaXMgY2FuCi1iZSB2ZXJ5IHVzZWZ1bCBmb3IgcGVyZm9ybWluZyBhbmFseXNlcyBvZiB1bnRydXN0ZWQgY29kZS4KLQotR2VuZXJhbGx5LCB0aGUgZXhhbXBsZSB3aWxsIGRlbW9uc3RyYXRlIGhvdyB0aGUgcGFyc2UgdHJlZSBtYXkgYmUgdHJhdmVyc2VkIHRvCi1kaXN0aWxsIGludGVyZXN0aW5nIGluZm9ybWF0aW9uLiAgVHdvIGZ1bmN0aW9ucyBhbmQgYSBzZXQgb2YgY2xhc3NlcyBhcmUKLWRldmVsb3BlZCB3aGljaCBwcm92aWRlIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8gaGlnaCBsZXZlbCBmdW5jdGlvbiBhbmQgY2xhc3MKLWRlZmluaXRpb25zIHByb3ZpZGVkIGJ5IGEgbW9kdWxlLiAgVGhlIGNsYXNzZXMgZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHRoZQotcGFyc2UgdHJlZSBhbmQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGluZm9ybWF0aW9uIGF0IGEgdXNlZnVsIHNlbWFudGljIGxldmVsLCBvbmUKLWZ1bmN0aW9uIHByb3ZpZGVzIGEgc2ltcGxlIGxvdy1sZXZlbCBwYXR0ZXJuIG1hdGNoaW5nIGNhcGFiaWxpdHksIGFuZCB0aGUgb3RoZXIKLWZ1bmN0aW9uIGRlZmluZXMgYSBoaWdoLWxldmVsIGludGVyZmFjZSB0byB0aGUgY2xhc3NlcyBieSBoYW5kbGluZyBmaWxlCi1vcGVyYXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgY2FsbGVyLiAgQWxsIHNvdXJjZSBmaWxlcyBtZW50aW9uZWQgaGVyZSB3aGljaCBhcmUKLW5vdCBwYXJ0IG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGFyZSBsb2NhdGVkIGluIHRoZSA6ZmlsZTpgRGVtby9wYXJzZXIvYAotZGlyZWN0b3J5IG9mIHRoZSBkaXN0cmlidXRpb24uCi0KLVRoZSBkeW5hbWljIG5hdHVyZSBvZiBQeXRob24gYWxsb3dzIHRoZSBwcm9ncmFtbWVyIGEgZ3JlYXQgZGVhbCBvZiBmbGV4aWJpbGl0eSwKLWJ1dCBtb3N0IG1vZHVsZXMgbmVlZCBvbmx5IGEgbGltaXRlZCBtZWFzdXJlIG9mIHRoaXMgd2hlbiBkZWZpbmluZyBjbGFzc2VzLAotZnVuY3Rpb25zLCBhbmQgbWV0aG9kcy4gIEluIHRoaXMgZXhhbXBsZSwgdGhlIG9ubHkgZGVmaW5pdGlvbnMgdGhhdCB3aWxsIGJlCi1jb25zaWRlcmVkIGFyZSB0aG9zZSB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgdG9wIGxldmVsIG9mIHRoZWlyIGNvbnRleHQsIGUuZy4sCi1hIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSA6a2V5d29yZDpgZGVmYCBzdGF0ZW1lbnQgYXQgY29sdW1uIHplcm8gb2YgYSBtb2R1bGUsIGJ1dAotbm90IGEgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gYSBicmFuY2ggb2YgYW4gOmtleXdvcmQ6YGlmYCAuLi4gOmtleXdvcmQ6YGVsc2VgCi1jb25zdHJ1Y3QsIHRob3VnaCB0aGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgZm9yIGRvaW5nIHNvIGluIHNvbWUgc2l0dWF0aW9ucy4KLU5lc3Rpbmcgb2YgZGVmaW5pdGlvbnMgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBjb2RlIGRldmVsb3BlZCBpbiB0aGUgZXhhbXBsZS4KLQotVG8gY29uc3RydWN0IHRoZSB1cHBlci1sZXZlbCBleHRyYWN0aW9uIG1ldGhvZHMsIHdlIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBwYXJzZQotdHJlZSBzdHJ1Y3R1cmUgbG9va3MgbGlrZSBhbmQgaG93IG11Y2ggb2YgaXQgd2UgYWN0dWFsbHkgbmVlZCB0byBiZSBjb25jZXJuZWQKLWFib3V0LiAgUHl0aG9uIHVzZXMgYSBtb2RlcmF0ZWx5IGRlZXAgcGFyc2UgdHJlZSBzbyB0aGVyZSBhcmUgYSBsYXJnZSBudW1iZXIgb2YKLWludGVybWVkaWF0ZSBub2Rlcy4gIEl0IGlzIGltcG9ydGFudCB0byByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZSBmb3JtYWwgZ3JhbW1hcgotdXNlZCBieSBQeXRob24uICBUaGlzIGlzIHNwZWNpZmllZCBpbiB0aGUgZmlsZSA6ZmlsZTpgR3JhbW1hci9HcmFtbWFyYCBpbiB0aGUKLWRpc3RyaWJ1dGlvbi4gQ29uc2lkZXIgdGhlIHNpbXBsZXN0IGNhc2Ugb2YgaW50ZXJlc3Qgd2hlbiBzZWFyY2hpbmcgZm9yCi1kb2NzdHJpbmdzOiBhIG1vZHVsZSBjb25zaXN0aW5nIG9mIGEgZG9jc3RyaW5nIGFuZCBub3RoaW5nIGVsc2UuICAoU2VlIGZpbGUKLTpmaWxlOmBkb2NzdHJpbmcucHlgLikgOjoKLQotICAgIiIiU29tZSBkb2N1bWVudGF0aW9uLgotICAgIiIiCi0KLVVzaW5nIHRoZSBpbnRlcnByZXRlciB0byB0YWtlIGEgbG9vayBhdCB0aGUgcGFyc2UgdHJlZSwgd2UgZmluZCBhIGJld2lsZGVyaW5nCi1tYXNzIG9mIG51bWJlcnMgYW5kIHBhcmVudGhlc2VzLCB3aXRoIHRoZSBkb2N1bWVudGF0aW9uIGJ1cmllZCBkZWVwIGluIG5lc3RlZAotdHVwbGVzLiA6OgotCi0gICA+Pj4gaW1wb3J0IHBhcnNlcgotICAgPj4+IGltcG9ydCBwcHJpbnQKLSAgID4+PiBzdCA9IHBhcnNlci5zdWl0ZShvcGVuKCdkb2NzdHJpbmcucHknKS5yZWFkKCkpCi0gICA+Pj4gdHVwID0gc3QudG90dXBsZSgpCi0gICA+Pj4gcHByaW50LnBwcmludCh0dXApCi0gICAoMjU3LAotICAgICgyNjQsCi0gICAgICgyNjUsCi0gICAgICAoMjY2LAotICAgICAgICgyNjcsCi0gICAgICAgICgzMDcsCi0gICAgICAgICAoMjg3LAotICAgICAgICAgICgyODgsCi0gICAgICAgICAgICgyODksCi0gICAgICAgICAgICAoMjkwLAotICAgICAgICAgICAgICgyOTIsCi0gICAgICAgICAgICAgICgyOTMsCi0gICAgICAgICAgICAgICAoMjk0LAotICAgICAgICAgICAgICAgICgyOTUsCi0gICAgICAgICAgICAgICAgICgyOTYsCi0gICAgICAgICAgICAgICAgICAoMjk3LAotICAgICAgICAgICAgICAgICAgICgyOTgsCi0gICAgICAgICAgICAgICAgICAgICgyOTksCi0gICAgICAgICAgICAgICAgICAgICAoMzAwLCAoMywgJyIiIlNvbWUgZG9jdW1lbnRhdGlvbi5cbiIiIicpKSkpKSkpKSkpKSkpKSkpKSwKLSAgICAgICg0LCAnJykpKSwKLSAgICAoNCwgJycpLAotICAgICgwLCAnJykpCi0KLVRoZSBudW1iZXJzIGF0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGVhY2ggbm9kZSBpbiB0aGUgdHJlZSBhcmUgdGhlIG5vZGUgdHlwZXM7Ci10aGV5IG1hcCBkaXJlY3RseSB0byB0ZXJtaW5hbCBhbmQgbm9uLXRlcm1pbmFsIHN5bWJvbHMgaW4gdGhlIGdyYW1tYXIuCi1VbmZvcnR1bmF0ZWx5LCB0aGV5IGFyZSByZXByZXNlbnRlZCBhcyBpbnRlZ2VycyBpbiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sCi1hbmQgdGhlIFB5dGhvbiBzdHJ1Y3R1cmVzIGdlbmVyYXRlZCBkbyBub3QgY2hhbmdlIHRoYXQuICBIb3dldmVyLCB0aGUKLTptb2Q6YHN5bWJvbGAgYW5kIDptb2Q6YHRva2VuYCBtb2R1bGVzIHByb3ZpZGUgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBub2RlIHR5cGVzCi1hbmQgZGljdGlvbmFyaWVzIHdoaWNoIG1hcCBmcm9tIHRoZSBpbnRlZ2VycyB0byB0aGUgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBub2RlCi10eXBlcy4KLQotSW4gdGhlIG91dHB1dCBwcmVzZW50ZWQgYWJvdmUsIHRoZSBvdXRlcm1vc3QgdHVwbGUgY29udGFpbnMgZm91ciBlbGVtZW50czogdGhlCi1pbnRlZ2VyIGBgMjU3YGAgYW5kIHRocmVlIGFkZGl0aW9uYWwgdHVwbGVzLiAgTm9kZSB0eXBlIGBgMjU3YGAgaGFzIHRoZSBzeW1ib2xpYwotbmFtZSA6Y29uc3Q6YGZpbGVfaW5wdXRgLiAgRWFjaCBvZiB0aGVzZSBpbm5lciB0dXBsZXMgY29udGFpbnMgYW4gaW50ZWdlciBhcyB0aGUKLWZpcnN0IGVsZW1lbnQ7IHRoZXNlIGludGVnZXJzLCBgYDI2NGBgLCBgYDRgYCwgYW5kIGBgMGBgLCByZXByZXNlbnQgdGhlIG5vZGUKLXR5cGVzIDpjb25zdDpgc3RtdGAsIDpjb25zdDpgTkVXTElORWAsIGFuZCA6Y29uc3Q6YEVORE1BUktFUmAsIHJlc3BlY3RpdmVseS4KLU5vdGUgdGhhdCB0aGVzZSB2YWx1ZXMgbWF5IGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YgUHl0aG9uIHlvdSBhcmUKLXVzaW5nOyBjb25zdWx0IDpmaWxlOmBzeW1ib2wucHlgIGFuZCA6ZmlsZTpgdG9rZW4ucHlgIGZvciBkZXRhaWxzIG9mIHRoZQotbWFwcGluZy4gIEl0IHNob3VsZCBiZSBmYWlybHkgY2xlYXIgdGhhdCB0aGUgb3V0ZXJtb3N0IG5vZGUgaXMgcmVsYXRlZCBwcmltYXJpbHkKLXRvIHRoZSBpbnB1dCBzb3VyY2UgcmF0aGVyIHRoYW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLCBhbmQgbWF5IGJlIGRpc3JlZ2FyZGVkCi1mb3IgdGhlIG1vbWVudC4gIFRoZSA6Y29uc3Q6YHN0bXRgIG5vZGUgaXMgbXVjaCBtb3JlIGludGVyZXN0aW5nLiAgSW4KLXBhcnRpY3VsYXIsIGFsbCBkb2NzdHJpbmdzIGFyZSBmb3VuZCBpbiBzdWJ0cmVlcyB3aGljaCBhcmUgZm9ybWVkIGV4YWN0bHkgYXMKLXRoaXMgbm9kZSBpcyBmb3JtZWQsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZSBiZWluZyB0aGUgc3RyaW5nIGl0c2VsZi4gIFRoZQotYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgZG9jc3RyaW5nIGluIGEgc2ltaWxhciB0cmVlIGFuZCB0aGUgZGVmaW5lZCBlbnRpdHkKLShjbGFzcywgZnVuY3Rpb24sIG9yIG1vZHVsZSkgd2hpY2ggaXQgZGVzY3JpYmVzIGlzIGdpdmVuIGJ5IHRoZSBwb3NpdGlvbiBvZiB0aGUKLWRvY3N0cmluZyBzdWJ0cmVlIHdpdGhpbiB0aGUgdHJlZSBkZWZpbmluZyB0aGUgZGVzY3JpYmVkIHN0cnVjdHVyZS4KLQotQnkgcmVwbGFjaW5nIHRoZSBhY3R1YWwgZG9jc3RyaW5nIHdpdGggc29tZXRoaW5nIHRvIHNpZ25pZnkgYSB2YXJpYWJsZSBjb21wb25lbnQKLW9mIHRoZSB0cmVlLCB3ZSBhbGxvdyBhIHNpbXBsZSBwYXR0ZXJuIG1hdGNoaW5nIGFwcHJvYWNoIHRvIGNoZWNrIGFueSBnaXZlbgotc3VidHJlZSBmb3IgZXF1aXZhbGVuY2UgdG8gdGhlIGdlbmVyYWwgcGF0dGVybiBmb3IgZG9jc3RyaW5ncy4gIFNpbmNlIHRoZQotZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaW5mb3JtYXRpb24gZXh0cmFjdGlvbiwgd2UgY2FuIHNhZmVseSByZXF1aXJlIHRoYXQgdGhlIHRyZWUKLWJlIGluIHR1cGxlIGZvcm0gcmF0aGVyIHRoYW4gbGlzdCBmb3JtLCBhbGxvd2luZyBhIHNpbXBsZSB2YXJpYWJsZQotcmVwcmVzZW50YXRpb24gdG8gYmUgYGBbJ3ZhcmlhYmxlX25hbWUnXWBgLiAgQSBzaW1wbGUgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbgotaW1wbGVtZW50IHRoZSBwYXR0ZXJuIG1hdGNoaW5nLCByZXR1cm5pbmcgYSBCb29sZWFuIGFuZCBhIGRpY3Rpb25hcnkgb2YgdmFyaWFibGUKLW5hbWUgdG8gdmFsdWUgbWFwcGluZ3MuICAoU2VlIGZpbGUgOmZpbGU6YGV4YW1wbGUucHlgLikgOjoKLQotICAgZnJvbSB0eXBlcyBpbXBvcnQgTGlzdFR5cGUsIFR1cGxlVHlwZQotCi0gICBkZWYgbWF0Y2gocGF0dGVybiwgZGF0YSwgdmFycz1Ob25lKToKLSAgICAgICBpZiB2YXJzIGlzIE5vbmU6Ci0gICAgICAgICAgIHZhcnMgPSB7fQotICAgICAgIGlmIHR5cGUocGF0dGVybikgaXMgTGlzdFR5cGU6Ci0gICAgICAgICAgIHZhcnNbcGF0dGVyblswXV0gPSBkYXRhCi0gICAgICAgICAgIHJldHVybiAxLCB2YXJzCi0gICAgICAgaWYgdHlwZShwYXR0ZXJuKSBpcyBub3QgVHVwbGVUeXBlOgotICAgICAgICAgICByZXR1cm4gKHBhdHRlcm4gPT0gZGF0YSksIHZhcnMKLSAgICAgICBpZiBsZW4oZGF0YSkgIT0gbGVuKHBhdHRlcm4pOgotICAgICAgICAgICByZXR1cm4gMCwgdmFycwotICAgICAgIGZvciBwYXR0ZXJuLCBkYXRhIGluIG1hcChOb25lLCBwYXR0ZXJuLCBkYXRhKToKLSAgICAgICAgICAgc2FtZSwgdmFycyA9IG1hdGNoKHBhdHRlcm4sIGRhdGEsIHZhcnMpCi0gICAgICAgICAgIGlmIG5vdCBzYW1lOgotICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICByZXR1cm4gc2FtZSwgdmFycwotCi1Vc2luZyB0aGlzIHNpbXBsZSByZXByZXNlbnRhdGlvbiBmb3Igc3ludGFjdGljIHZhcmlhYmxlcyBhbmQgdGhlIHN5bWJvbGljIG5vZGUKLXR5cGVzLCB0aGUgcGF0dGVybiBmb3IgdGhlIGNhbmRpZGF0ZSBkb2NzdHJpbmcgc3VidHJlZXMgYmVjb21lcyBmYWlybHkgcmVhZGFibGUuCi0oU2VlIGZpbGUgOmZpbGU6YGV4YW1wbGUucHlgLikgOjoKLQotICAgaW1wb3J0IHN5bWJvbAotICAgaW1wb3J0IHRva2VuCi0KLSAgIERPQ1NUUklOR19TVE1UX1BBVFRFUk4gPSAoCi0gICAgICAgc3ltYm9sLnN0bXQsCi0gICAgICAgKHN5bWJvbC5zaW1wbGVfc3RtdCwKLSAgICAgICAgKHN5bWJvbC5zbWFsbF9zdG10LAotICAgICAgICAgKHN5bWJvbC5leHByX3N0bXQsCi0gICAgICAgICAgKHN5bWJvbC50ZXN0bGlzdCwKLSAgICAgICAgICAgKHN5bWJvbC50ZXN0LAotICAgICAgICAgICAgKHN5bWJvbC5hbmRfdGVzdCwKLSAgICAgICAgICAgICAoc3ltYm9sLm5vdF90ZXN0LAotICAgICAgICAgICAgICAoc3ltYm9sLmNvbXBhcmlzb24sCi0gICAgICAgICAgICAgICAoc3ltYm9sLmV4cHIsCi0gICAgICAgICAgICAgICAgKHN5bWJvbC54b3JfZXhwciwKLSAgICAgICAgICAgICAgICAgKHN5bWJvbC5hbmRfZXhwciwKLSAgICAgICAgICAgICAgICAgIChzeW1ib2wuc2hpZnRfZXhwciwKLSAgICAgICAgICAgICAgICAgICAoc3ltYm9sLmFyaXRoX2V4cHIsCi0gICAgICAgICAgICAgICAgICAgIChzeW1ib2wudGVybSwKLSAgICAgICAgICAgICAgICAgICAgIChzeW1ib2wuZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgIChzeW1ib2wucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIChzeW1ib2wuYXRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbi5TVFJJTkcsIFsnZG9jc3RyaW5nJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICApKSkpKSkpKSkpKSkpKSkpLAotICAgICAgICAodG9rZW4uTkVXTElORSwgJycpCi0gICAgICAgICkpCi0KLVVzaW5nIHRoZSA6ZnVuYzpgbWF0Y2hgIGZ1bmN0aW9uIHdpdGggdGhpcyBwYXR0ZXJuLCBleHRyYWN0aW5nIHRoZSBtb2R1bGUKLWRvY3N0cmluZyBmcm9tIHRoZSBwYXJzZSB0cmVlIGNyZWF0ZWQgcHJldmlvdXNseSBpcyBlYXN5OjoKLQotICAgPj4+IGZvdW5kLCB2YXJzID0gbWF0Y2goRE9DU1RSSU5HX1NUTVRfUEFUVEVSTiwgdHVwWzFdKQotICAgPj4+IGZvdW5kCi0gICAxCi0gICA+Pj4gdmFycwotICAgeydkb2NzdHJpbmcnOiAnIiIiU29tZSBkb2N1bWVudGF0aW9uLlxuIiIiJ30KLQotT25jZSBzcGVjaWZpYyBkYXRhIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBhIGxvY2F0aW9uIHdoZXJlIGl0IGlzIGV4cGVjdGVkLCB0aGUKLXF1ZXN0aW9uIG9mIHdoZXJlIGluZm9ybWF0aW9uIGNhbiBiZSBleHBlY3RlZCBuZWVkcyB0byBiZSBhbnN3ZXJlZC4gIFdoZW4KLWRlYWxpbmcgd2l0aCBkb2NzdHJpbmdzLCB0aGUgYW5zd2VyIGlzIGZhaXJseSBzaW1wbGU6IHRoZSBkb2NzdHJpbmcgaXMgdGhlIGZpcnN0Ci06Y29uc3Q6YHN0bXRgIG5vZGUgaW4gYSBjb2RlIGJsb2NrICg6Y29uc3Q6YGZpbGVfaW5wdXRgIG9yIDpjb25zdDpgc3VpdGVgIG5vZGUKLXR5cGVzKS4gIEEgbW9kdWxlIGNvbnNpc3RzIG9mIGEgc2luZ2xlIDpjb25zdDpgZmlsZV9pbnB1dGAgbm9kZSwgYW5kIGNsYXNzIGFuZAotZnVuY3Rpb24gZGVmaW5pdGlvbnMgZWFjaCBjb250YWluIGV4YWN0bHkgb25lIDpjb25zdDpgc3VpdGVgIG5vZGUuICBDbGFzc2VzIGFuZAotZnVuY3Rpb25zIGFyZSByZWFkaWx5IGlkZW50aWZpZWQgYXMgc3VidHJlZXMgb2YgY29kZSBibG9jayBub2RlcyB3aGljaCBzdGFydAotd2l0aCBgYChzdG10LCAoY29tcG91bmRfc3RtdCwgKGNsYXNzZGVmLCAuLi5gYCBvciBgYChzdG10LCAoY29tcG91bmRfc3RtdCwKLShmdW5jZGVmLCAuLi5gYC4gIE5vdGUgdGhhdCB0aGVzZSBzdWJ0cmVlcyBjYW5ub3QgYmUgbWF0Y2hlZCBieSA6ZnVuYzpgbWF0Y2hgCi1zaW5jZSBpdCBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNpYmxpbmcgbm9kZXMgdG8gbWF0Y2ggd2l0aG91dCByZWdhcmQgdG8KLW51bWJlci4gIEEgbW9yZSBlbGFib3JhdGUgbWF0Y2hpbmcgZnVuY3Rpb24gY291bGQgYmUgdXNlZCB0byBvdmVyY29tZSB0aGlzCi1saW1pdGF0aW9uLCBidXQgdGhpcyBpcyBzdWZmaWNpZW50IGZvciB0aGUgZXhhbXBsZS4KLQotR2l2ZW4gdGhlIGFiaWxpdHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdGF0ZW1lbnQgbWlnaHQgYmUgYSBkb2NzdHJpbmcgYW5kCi1leHRyYWN0IHRoZSBhY3R1YWwgc3RyaW5nIGZyb20gdGhlIHN0YXRlbWVudCwgc29tZSB3b3JrIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCB0bwotd2FsayB0aGUgcGFyc2UgdHJlZSBmb3IgYW4gZW50aXJlIG1vZHVsZSBhbmQgZXh0cmFjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmFtZXMKLWRlZmluZWQgaW4gZWFjaCBjb250ZXh0IG9mIHRoZSBtb2R1bGUgYW5kIGFzc29jaWF0ZSBhbnkgZG9jc3RyaW5ncyB3aXRoIHRoZQotbmFtZXMuICBUaGUgY29kZSB0byBwZXJmb3JtIHRoaXMgd29yayBpcyBub3QgY29tcGxpY2F0ZWQsIGJ1dCBiZWFycyBzb21lCi1leHBsYW5hdGlvbi4KLQotVGhlIHB1YmxpYyBpbnRlcmZhY2UgdG8gdGhlIGNsYXNzZXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBzaG91bGQgcHJvYmFibHkgYmUKLXNvbWV3aGF0IG1vcmUgZmxleGlibGUuICBFYWNoICJtYWpvciIgYmxvY2sgb2YgdGhlIG1vZHVsZSBpcyBkZXNjcmliZWQgYnkgYW4KLW9iamVjdCBwcm92aWRpbmcgc2V2ZXJhbCBtZXRob2RzIGZvciBpbnF1aXJ5IGFuZCBhIGNvbnN0cnVjdG9yIHdoaWNoIGFjY2VwdHMgYXQKLWxlYXN0IHRoZSBzdWJ0cmVlIG9mIHRoZSBjb21wbGV0ZSBwYXJzZSB0cmVlIHdoaWNoIGl0IHJlcHJlc2VudHMuICBUaGUKLTpjbGFzczpgTW9kdWxlSW5mb2AgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBvcHRpb25hbCAqbmFtZSogcGFyYW1ldGVyIHNpbmNlIGl0Ci1jYW5ub3Qgb3RoZXJ3aXNlIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgotCi1UaGUgcHVibGljIGNsYXNzZXMgaW5jbHVkZSA6Y2xhc3M6YENsYXNzSW5mb2AsIDpjbGFzczpgRnVuY3Rpb25JbmZvYCwgYW5kCi06Y2xhc3M6YE1vZHVsZUluZm9gLiAgQWxsIG9iamVjdHMgcHJvdmlkZSB0aGUgbWV0aG9kcyA6bWV0aDpgZ2V0X25hbWVgLAotOm1ldGg6YGdldF9kb2NzdHJpbmdgLCA6bWV0aDpgZ2V0X2NsYXNzX25hbWVzYCwgYW5kIDptZXRoOmBnZXRfY2xhc3NfaW5mb2AuICBUaGUKLTpjbGFzczpgQ2xhc3NJbmZvYCBvYmplY3RzIHN1cHBvcnQgOm1ldGg6YGdldF9tZXRob2RfbmFtZXNgIGFuZAotOm1ldGg6YGdldF9tZXRob2RfaW5mb2Agd2hpbGUgdGhlIG90aGVyIGNsYXNzZXMgcHJvdmlkZQotOm1ldGg6YGdldF9mdW5jdGlvbl9uYW1lc2AgYW5kIDptZXRoOmBnZXRfZnVuY3Rpb25faW5mb2AuCi0KLVdpdGhpbiBlYWNoIG9mIHRoZSBmb3JtcyBvZiBjb2RlIGJsb2NrIHRoYXQgdGhlIHB1YmxpYyBjbGFzc2VzIHJlcHJlc2VudCwgbW9zdAotb2YgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGlzIGluIHRoZSBzYW1lIGZvcm0gYW5kIGlzIGFjY2Vzc2VkIGluIHRoZSBzYW1lIHdheSwKLXdpdGggY2xhc3NlcyBoYXZpbmcgdGhlIGRpc3RpbmN0aW9uIHRoYXQgZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBhcmUKLXJlZmVycmVkIHRvIGFzICJtZXRob2RzLiIgU2luY2UgdGhlIGRpZmZlcmVuY2UgaW4gbm9tZW5jbGF0dXJlIHJlZmxlY3RzIGEgcmVhbAotc2VtYW50aWMgZGlzdGluY3Rpb24gZnJvbSBmdW5jdGlvbnMgZGVmaW5lZCBvdXRzaWRlIG9mIGEgY2xhc3MsIHRoZQotaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gbWFpbnRhaW4gdGhlIGRpc3RpbmN0aW9uLiBIZW5jZSwgbW9zdCBvZiB0aGUKLWZ1bmN0aW9uYWxpdHkgb2YgdGhlIHB1YmxpYyBjbGFzc2VzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBhIGNvbW1vbiBiYXNlIGNsYXNzLAotOmNsYXNzOmBTdWl0ZUluZm9CYXNlYCwgd2l0aCB0aGUgYWNjZXNzb3JzIGZvciBmdW5jdGlvbiBhbmQgbWV0aG9kIGluZm9ybWF0aW9uCi1wcm92aWRlZCBlbHNld2hlcmUuIE5vdGUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBjbGFzcyB3aGljaCByZXByZXNlbnRzIGZ1bmN0aW9uCi1hbmQgbWV0aG9kIGluZm9ybWF0aW9uOyB0aGlzIHBhcmFsbGVscyB0aGUgdXNlIG9mIHRoZSA6a2V5d29yZDpgZGVmYCBzdGF0ZW1lbnQKLXRvIGRlZmluZSBib3RoIHR5cGVzIG9mIGVsZW1lbnRzLgotCi1Nb3N0IG9mIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGluIDpjbGFzczpgU3VpdGVJbmZvQmFzZWAgYW5kIGRvIG5vdAotbmVlZCB0byBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuICBNb3JlIGltcG9ydGFudGx5LCB0aGUgZXh0cmFjdGlvbiBvZiBtb3N0Ci1pbmZvcm1hdGlvbiBmcm9tIGEgcGFyc2UgdHJlZSBpcyBoYW5kbGVkIHRocm91Z2ggYSBtZXRob2QgY2FsbGVkIGJ5IHRoZQotOmNsYXNzOmBTdWl0ZUluZm9CYXNlYCBjb25zdHJ1Y3Rvci4gIFRoZSBleGFtcGxlIGNvZGUgZm9yIG1vc3Qgb2YgdGhlIGNsYXNzZXMgaXMKLWNsZWFyIHdoZW4gcmVhZCBhbG9uZ3NpZGUgdGhlIGZvcm1hbCBncmFtbWFyLCBidXQgdGhlIG1ldGhvZCB3aGljaCByZWN1cnNpdmVseQotY3JlYXRlcyBuZXcgaW5mb3JtYXRpb24gb2JqZWN0cyByZXF1aXJlcyBmdXJ0aGVyIGV4YW1pbmF0aW9uLiAgSGVyZSBpcyB0aGUKLXJlbGV2YW50IHBhcnQgb2YgdGhlIDpjbGFzczpgU3VpdGVJbmZvQmFzZWAgZGVmaW5pdGlvbiBmcm9tIDpmaWxlOmBleGFtcGxlLnB5YDo6Ci0KLSAgIGNsYXNzIFN1aXRlSW5mb0Jhc2U6Ci0gICAgICAgX2RvY3N0cmluZyA9ICcnCi0gICAgICAgX25hbWUgPSAnJwotCi0gICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyZWUgPSBOb25lKToKLSAgICAgICAgICAgc2VsZi5fY2xhc3NfaW5mbyA9IHt9Ci0gICAgICAgICAgIHNlbGYuX2Z1bmN0aW9uX2luZm8gPSB7fQotICAgICAgICAgICBpZiB0cmVlOgotICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9pbmZvKHRyZWUpCi0KLSAgICAgICBkZWYgX2V4dHJhY3RfaW5mbyhzZWxmLCB0cmVlKToKLSAgICAgICAgICAgIyBleHRyYWN0IGRvY3N0cmluZwotICAgICAgICAgICBpZiBsZW4odHJlZSkgPT0gMjoKLSAgICAgICAgICAgICAgIGZvdW5kLCB2YXJzID0gbWF0Y2goRE9DU1RSSU5HX1NUTVRfUEFUVEVSTlsxXSwgdHJlZVsxXSkKLSAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgIGZvdW5kLCB2YXJzID0gbWF0Y2goRE9DU1RSSU5HX1NUTVRfUEFUVEVSTiwgdHJlZVszXSkKLSAgICAgICAgICAgaWYgZm91bmQ6Ci0gICAgICAgICAgICAgICBzZWxmLl9kb2NzdHJpbmcgPSBldmFsKHZhcnNbJ2RvY3N0cmluZyddKQotICAgICAgICAgICAjIGRpc2NvdmVyIGlubmVyIGRlZmluaXRpb25zCi0gICAgICAgICAgIGZvciBub2RlIGluIHRyZWVbMTpdOgotICAgICAgICAgICAgICAgZm91bmQsIHZhcnMgPSBtYXRjaChDT01QT1VORF9TVE1UX1BBVFRFUk4sIG5vZGUpCi0gICAgICAgICAgICAgICBpZiBmb3VuZDoKLSAgICAgICAgICAgICAgICAgICBjc3RtdCA9IHZhcnNbJ2NvbXBvdW5kJ10KLSAgICAgICAgICAgICAgICAgICBpZiBjc3RtdFswXSA9PSBzeW1ib2wuZnVuY2RlZjoKLSAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNzdG10WzJdWzFdCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Z1bmN0aW9uX2luZm9bbmFtZV0gPSBGdW5jdGlvbkluZm8oY3N0bXQpCi0gICAgICAgICAgICAgICAgICAgZWxpZiBjc3RtdFswXSA9PSBzeW1ib2wuY2xhc3NkZWY6Ci0gICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBjc3RtdFsyXVsxXQotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbGFzc19pbmZvW25hbWVdID0gQ2xhc3NJbmZvKGNzdG10KQotCi1BZnRlciBpbml0aWFsaXppbmcgc29tZSBpbnRlcm5hbCBzdGF0ZSwgdGhlIGNvbnN0cnVjdG9yIGNhbGxzIHRoZQotOm1ldGg6YF9leHRyYWN0X2luZm9gIG1ldGhvZC4gIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBidWxrIG9mIHRoZSBpbmZvcm1hdGlvbgotZXh0cmFjdGlvbiB3aGljaCB0YWtlcyBwbGFjZSBpbiB0aGUgZW50aXJlIGV4YW1wbGUuICBUaGUgZXh0cmFjdGlvbiBoYXMgdHdvCi1kaXN0aW5jdCBwaGFzZXM6IHRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jc3RyaW5nIGZvciB0aGUgcGFyc2UgdHJlZSBwYXNzZWQgaW4sIGFuZAotdGhlIGRpc2NvdmVyeSBvZiBhZGRpdGlvbmFsIGRlZmluaXRpb25zIHdpdGhpbiB0aGUgY29kZSBibG9jayByZXByZXNlbnRlZCBieSB0aGUKLXBhcnNlIHRyZWUuCi0KLVRoZSBpbml0aWFsIDprZXl3b3JkOmBpZmAgdGVzdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5lc3RlZCBzdWl0ZSBpcyBvZiB0aGUKLSJzaG9ydCBmb3JtIiBvciB0aGUgImxvbmcgZm9ybS4iICBUaGUgc2hvcnQgZm9ybSBpcyB1c2VkIHdoZW4gdGhlIGNvZGUgYmxvY2sgaXMKLW9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGRlZmluaXRpb24gb2YgdGhlIGNvZGUgYmxvY2ssIGFzIGluIDo6Ci0KLSAgIGRlZiBzcXVhcmUoeCk6ICJTcXVhcmUgYW4gYXJndW1lbnQuIjsgcmV0dXJuIHggKiogMgotCi13aGlsZSB0aGUgbG9uZyBmb3JtIHVzZXMgYW4gaW5kZW50ZWQgYmxvY2sgYW5kIGFsbG93cyBuZXN0ZWQgZGVmaW5pdGlvbnM6OgotCi0gICBkZWYgbWFrZV9wb3dlcihleHApOgotICAgICAgICJNYWtlIGEgZnVuY3Rpb24gdGhhdCByYWlzZXMgYW4gYXJndW1lbnQgdG8gdGhlIGV4cG9uZW50IGBleHBgLiIKLSAgICAgICBkZWYgcmFpc2VyKHgsIHk9ZXhwKToKLSAgICAgICAgICAgcmV0dXJuIHggKiogeQotICAgICAgIHJldHVybiByYWlzZXIKLQotV2hlbiB0aGUgc2hvcnQgZm9ybSBpcyB1c2VkLCB0aGUgY29kZSBibG9jayBtYXkgY29udGFpbiBhIGRvY3N0cmluZyBhcyB0aGUKLWZpcnN0LCBhbmQgcG9zc2libHkgb25seSwgOmNvbnN0OmBzbWFsbF9zdG10YCBlbGVtZW50LiAgVGhlIGV4dHJhY3Rpb24gb2Ygc3VjaCBhCi1kb2NzdHJpbmcgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGFuZCByZXF1aXJlcyBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgY29tcGxldGUKLXBhdHRlcm4gdXNlZCBpbiB0aGUgbW9yZSBjb21tb24gY2FzZS4gIEFzIGltcGxlbWVudGVkLCB0aGUgZG9jc3RyaW5nIHdpbGwgb25seQotYmUgZm91bmQgaWYgdGhlcmUgaXMgb25seSBvbmUgOmNvbnN0OmBzbWFsbF9zdG10YCBub2RlIGluIHRoZQotOmNvbnN0OmBzaW1wbGVfc3RtdGAgbm9kZS4gU2luY2UgbW9zdCBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgd2hpY2ggdXNlIHRoZSBzaG9ydAotZm9ybSBkbyBub3QgcHJvdmlkZSBhIGRvY3N0cmluZywgdGhpcyBtYXkgYmUgY29uc2lkZXJlZCBzdWZmaWNpZW50LiAgVGhlCi1leHRyYWN0aW9uIG9mIHRoZSBkb2NzdHJpbmcgcHJvY2VlZHMgdXNpbmcgdGhlIDpmdW5jOmBtYXRjaGAgZnVuY3Rpb24gYXMKLWRlc2NyaWJlZCBhYm92ZSwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZG9jc3RyaW5nIGlzIHN0b3JlZCBhcyBhbiBhdHRyaWJ1dGUgb2YgdGhlCi06Y2xhc3M6YFN1aXRlSW5mb0Jhc2VgIG9iamVjdC4KLQotQWZ0ZXIgZG9jc3RyaW5nIGV4dHJhY3Rpb24sIGEgc2ltcGxlIGRlZmluaXRpb24gZGlzY292ZXJ5IGFsZ29yaXRobSBvcGVyYXRlcyBvbgotdGhlIDpjb25zdDpgc3RtdGAgbm9kZXMgb2YgdGhlIDpjb25zdDpgc3VpdGVgIG5vZGUuICBUaGUgc3BlY2lhbCBjYXNlIG9mIHRoZQotc2hvcnQgZm9ybSBpcyBub3QgdGVzdGVkOyBzaW5jZSB0aGVyZSBhcmUgbm8gOmNvbnN0OmBzdG10YCBub2RlcyBpbiB0aGUgc2hvcnQKLWZvcm0sIHRoZSBhbGdvcml0aG0gd2lsbCBzaWxlbnRseSBza2lwIHRoZSBzaW5nbGUgOmNvbnN0OmBzaW1wbGVfc3RtdGAgbm9kZSBhbmQKLWNvcnJlY3RseSBub3QgZGlzY292ZXIgYW55IG5lc3RlZCBkZWZpbml0aW9ucy4KLQotRWFjaCBzdGF0ZW1lbnQgaW4gdGhlIGNvZGUgYmxvY2sgaXMgY2F0ZWdvcml6ZWQgYXMgYSBjbGFzcyBkZWZpbml0aW9uLCBmdW5jdGlvbgotb3IgbWV0aG9kIGRlZmluaXRpb24sIG9yIHNvbWV0aGluZyBlbHNlLiAgRm9yIHRoZSBkZWZpbml0aW9uIHN0YXRlbWVudHMsIHRoZQotbmFtZSBvZiB0aGUgZWxlbWVudCBkZWZpbmVkIGlzIGV4dHJhY3RlZCBhbmQgYSByZXByZXNlbnRhdGlvbiBvYmplY3QgYXBwcm9wcmlhdGUKLXRvIHRoZSBkZWZpbml0aW9uIGlzIGNyZWF0ZWQgd2l0aCB0aGUgZGVmaW5pbmcgc3VidHJlZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8KLXRoZSBjb25zdHJ1Y3Rvci4gIFRoZSByZXByZXNlbnRhdGlvbiBvYmplY3RzIGFyZSBzdG9yZWQgaW4gaW5zdGFuY2UgdmFyaWFibGVzCi1hbmQgbWF5IGJlIHJldHJpZXZlZCBieSBuYW1lIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3NvciBtZXRob2RzLgotCi1UaGUgcHVibGljIGNsYXNzZXMgcHJvdmlkZSBhbnkgYWNjZXNzb3JzIHJlcXVpcmVkIHdoaWNoIGFyZSBtb3JlIHNwZWNpZmljIHRoYW4KLXRob3NlIHByb3ZpZGVkIGJ5IHRoZSA6Y2xhc3M6YFN1aXRlSW5mb0Jhc2VgIGNsYXNzLCBidXQgdGhlIHJlYWwgZXh0cmFjdGlvbgotYWxnb3JpdGhtIHJlbWFpbnMgY29tbW9uIHRvIGFsbCBmb3JtcyBvZiBjb2RlIGJsb2Nrcy4gIEEgaGlnaC1sZXZlbCBmdW5jdGlvbiBjYW4KLWJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgY29tcGxldGUgc2V0IG9mIGluZm9ybWF0aW9uIGZyb20gYSBzb3VyY2UgZmlsZS4gIChTZWUKLWZpbGUgOmZpbGU6YGV4YW1wbGUucHlgLikgOjoKLQotICAgZGVmIGdldF9kb2NzKGZpbGVOYW1lKToKLSAgICAgICBpbXBvcnQgb3MKLSAgICAgICBpbXBvcnQgcGFyc2VyCi0KLSAgICAgICBzb3VyY2UgPSBvcGVuKGZpbGVOYW1lKS5yZWFkKCkKLSAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5zcGxpdGV4dChmaWxlTmFtZSlbMF0pCi0gICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoc291cmNlKQotICAgICAgIHJldHVybiBNb2R1bGVJbmZvKHN0LnRvdHVwbGUoKSwgYmFzZW5hbWUpCi0KLVRoaXMgcHJvdmlkZXMgYW4gZWFzeS10by11c2UgaW50ZXJmYWNlIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGEgbW9kdWxlLiAgSWYKLWluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIHdoaWNoIGlzIG5vdCBleHRyYWN0ZWQgYnkgdGhlIGNvZGUgb2YgdGhpcyBleGFtcGxlLCB0aGUKLWNvZGUgbWF5IGJlIGV4dGVuZGVkIGF0IGNsZWFybHkgZGVmaW5lZCBwb2ludHMgdG8gcHJvdmlkZSBhZGRpdGlvbmFsCi1jYXBhYmlsaXRpZXMuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IDdmMjE5N2UuLmE0NzUwOTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogLi4gX2RlYnVnZ2VyOgogCiA6bW9kOmBwZGJgIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyCkBAIC03OSwxMCArNzgsMTAgQEAKICAgIC0+IHByaW50IHNwYW0KICAgIChQZGIpCiAKKwogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXIgaW4gYQogc2xpZ2h0bHkgZGlmZmVyZW50IHdheToKIAotCiAuLiBmdW5jdGlvbjo6IHJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pCiAKICAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZykgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFRoZQpAQCAtMTI2LDcgKzEyNSwzOCBAQAogCiAuLiBmdW5jdGlvbjo6IHBtKCkKIAotICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW4gYGBzeXMubGFzdF90cmFjZWJhY2tgYC4KKyAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluCisgICA6ZGF0YTpgc3lzLmxhc3RfdHJhY2ViYWNrYC4KKworCitUaGUgYGBydW4qYGAgZnVuY3Rpb25zIGFuZCA6ZnVuYzpgc2V0X3RyYWNlYCBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZyB0aGUKKzpjbGFzczpgUGRiYCBjbGFzcyBhbmQgY2FsbGluZyB0aGUgbWV0aG9kIG9mIHRoZSBzYW1lIG5hbWUuICBJZiB5b3Ugd2FudCB0bworYWNjZXNzIGZ1cnRoZXIgZmVhdHVyZXMsIHlvdSBoYXZlIHRvIGRvIHRoaXMgeW91cnNlbGY6CisKKy4uIGNsYXNzOjogUGRiKGNvbXBsZXRla2V5PSd0YWInLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lKQorCisgICA6Y2xhc3M6YFBkYmAgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLgorCisgICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlCisgICB1bmRlcmx5aW5nIDpjbGFzczpgY21kLkNtZGAgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuCisKKyAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGUgbW9kdWxlIG5hbWUKKyAgIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdCBvcmlnaW5hdGUgaW4gYSBtb2R1bGUKKyAgIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXV8KKworICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOjoKKworICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVsnZGphbmdvLionXSkuc2V0X3RyYWNlKCkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisgICAgICBUaGUgKnNraXAqIGFyZ3VtZW50LgorCisgICAuLiBtZXRob2Q6OiBydW4oc3RhdGVtZW50WywgZ2xvYmFsc1ssIGxvY2Fsc11dKQorICAgICAgICAgICAgICAgcnVuZXZhbChleHByZXNzaW9uWywgZ2xvYmFsc1ssIGxvY2Fsc11dKQorICAgICAgICAgICAgICAgcnVuY2FsbChmdW5jdGlvblssIGFyZ3VtZW50LCAuLi5dKQorICAgICAgICAgICAgICAgc2V0X3RyYWNlKCkKKworICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS4KIAogCiAuLiBfZGVidWdnZXItY29tbWFuZHM6CkBAIC0yMDksNyArMjM5LDggQEAKICAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBmaXJzdCBoaXQuICBUaGUKICAgIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgYnJlYWsuCiAKLWNsKGVhcikgWypicG51bWJlciogWypicG51bWJlciAuLi4qXV0KK2NsKGVhcikgWypmaWxlbmFtZTpsaW5lbm8qIHwgKmJwbnVtYmVyKiBbKmJwbnVtYmVyIC4uLipdXQorICAgV2l0aCBhICpmaWxlbmFtZTpsaW5lbm8qIGFyZ3VtZW50LCBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnRzIGF0IHRoaXMgbGluZS4KICAgIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyIHRob3NlIGJyZWFrcG9pbnRzLgogICAgV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0IGFzayBjb25maXJtYXRpb24pLgogCkBAIC0zNjAsMyArMzkxLDkgQEAKIAogcSh1aXQpCiAgICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLgorCisKKy4uIHJ1YnJpYzo6IEZvb3Rub3RlcworCisuLiBbMV0gV2hldGhlciBhIGZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gb3JpZ2luYXRlIGluIGEgY2VydGFpbiBtb2R1bGUKKyAgICAgICBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBgYF9fbmFtZV9fYGAgaW4gdGhlIGZyYW1lIGdsb2JhbHMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0IGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAppbmRleCBhM2U1YWQ0Li4yMjE2NWY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKQEAgLTI1LDYgKzI1LDEyIEBACiBUaGlzIGRvY3VtZW50YXRpb24gZGVzY3JpYmVzIGJvdGggdGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGFuZCB0aGUKIDptb2Q6YGNQaWNrbGVgIG1vZHVsZS4KIAorLi4gd2FybmluZzo6CisKKyAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yCisgICBtYWxpY2lvdXNseSBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZAorICAgb3IgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KKwogCiBSZWxhdGlvbnNoaXAgdG8gb3RoZXIgUHl0aG9uIG1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDcsNyArNTMsNyBAQAogb2JqZWN0cy4gIDptb2Q6YG1hcnNoYWxgIGV4aXN0cyBwcmltYXJpbHkgdG8gc3VwcG9ydCBQeXRob24ncyA6ZmlsZTpgLnB5Y2AKIGZpbGVzLgogCi1UaGUgOm1vZDpgcGlja2xlYCBtb2R1bGUgZGlmZmVycyBmcm9tIDptb2Q6YG1hcnNoYWxgIHNldmVyYWwgc2lnbmlmaWNhbnQgd2F5czoKK1RoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBkaWZmZXJzIGZyb20gOm1vZDpgbWFyc2hhbGAgaW4gc2V2ZXJhbCBzaWduaWZpY2FudCB3YXlzOgogCiAqIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBrZWVwcyB0cmFjayBvZiB0aGUgb2JqZWN0cyBpdCBoYXMgYWxyZWFkeSBzZXJpYWxpemVkLAogICBzbyB0aGF0IGxhdGVyIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgb2JqZWN0IHdvbid0IGJlIHNlcmlhbGl6ZWQgYWdhaW4uCkBAIC03NCwxMiArODAsNiBAQAogICBUaGUgOm1vZDpgcGlja2xlYCBzZXJpYWxpemF0aW9uIGZvcm1hdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlCiAgIGFjcm9zcyBQeXRob24gcmVsZWFzZXMuCiAKLS4uIHdhcm5pbmc6OgotCi0gICBUaGUgOm1vZDpgcGlja2xlYCBtb2R1bGUgaXMgbm90IGludGVuZGVkIHRvIGJlIHNlY3VyZSBhZ2FpbnN0IGVycm9uZW91cyBvcgotICAgbWFsaWNpb3VzbHkgY29uc3RydWN0ZWQgZGF0YS4gIE5ldmVyIHVucGlja2xlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhbiB1bnRydXN0ZWQKLSAgIG9yIHVuYXV0aGVudGljYXRlZCBzb3VyY2UuCi0KIE5vdGUgdGhhdCBzZXJpYWxpemF0aW9uIGlzIGEgbW9yZSBwcmltaXRpdmUgbm90aW9uIHRoYW4gcGVyc2lzdGVuY2U7IGFsdGhvdWdoCiA6bW9kOmBwaWNrbGVgIHJlYWRzIGFuZCB3cml0ZXMgZmlsZSBvYmplY3RzLCBpdCBkb2VzIG5vdCBoYW5kbGUgdGhlIGlzc3VlIG9mCiBuYW1pbmcgcGVyc2lzdGVudCBvYmplY3RzLCBub3IgdGhlIChldmVuIG1vcmUgY29tcGxpY2F0ZWQpIGlzc3VlIG9mIGNvbmN1cnJlbnQKQEAgLTQ0NCw3ICs0NDQsNyBAQAogICAgaW5zdGFuY2UncyBkaWN0aW9uYXJ5LiAgSWYgdGhlcmUgaXMgbm8gOm1ldGg6YF9fZ2V0c3RhdGVfX2AgbWV0aG9kLCB0aGUKICAgIGluc3RhbmNlJ3MgOmF0dHI6YF9fZGljdF9fYCBpcyBwaWNrbGVkLgogCi0uLiBtZXRob2Q6OiBvYmplY3QuX19zZXRzdGF0ZV9fKCkKKy4uIG1ldGhvZDo6IG9iamVjdC5fX3NldHN0YXRlX18oc3RhdGUpCiAKICAgIFVwb24gdW5waWNrbGluZywgaWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lcyB0aGUgbWV0aG9kIDptZXRoOmBfX3NldHN0YXRlX19gLAogICAgaXQgaXMgY2FsbGVkIHdpdGggdGhlIHVucGlja2xlZCBzdGF0ZS4gWyNdXyBJZiB0aGVyZSBpcyBubwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAppbmRleCA1MTg5Mzc3Li45ZTYzNGQ2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdApAQCAtMyw2MiArMywxODcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IHBrZ3V0aWwKLSAgIDpzeW5vcHNpczogVXRpbGl0aWVzIHRvIHN1cHBvcnQgZXh0ZW5zaW9uIG9mIHBhY2thZ2VzLgorICAgOnN5bm9wc2lzOiBVdGlsaXRpZXMgZm9yIHRoZSBpbXBvcnQgc3lzdGVtLgogCitUaGlzIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIHRoZSBpbXBvcnQgc3lzdGVtLCBpbiBwYXJ0aWN1bGFyIHBhY2thZ2UKK3N1cHBvcnQuCiAKIC4uIHZlcnNpb25hZGRlZDo6IDIuMwogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBwYWNrYWdlczoKLQogCiAuLiBmdW5jdGlvbjo6IGV4dGVuZF9wYXRoKHBhdGgsIG5hbWUpCiAKLSAgIEV4dGVuZCB0aGUgc2VhcmNoIHBhdGggZm9yIHRoZSBtb2R1bGVzIHdoaWNoIGNvbXByaXNlIGEgcGFja2FnZS4gSW50ZW5kZWQgdXNlIGlzCi0gICB0byBwbGFjZSB0aGUgZm9sbG93aW5nIGNvZGUgaW4gYSBwYWNrYWdlJ3MgOmZpbGU6YF9faW5pdF9fLnB5YDo6CisgICBFeHRlbmQgdGhlIHNlYXJjaCBwYXRoIGZvciB0aGUgbW9kdWxlcyB3aGljaCBjb21wcmlzZSBhIHBhY2thZ2UuICBJbnRlbmRlZAorICAgdXNlIGlzIHRvIHBsYWNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBhIHBhY2thZ2UncyA6ZmlsZTpgX19pbml0X18ucHlgOjoKIAogICAgICAgZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAogICAgICAgX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCiAKLSAgIFRoaXMgd2lsbCBhZGQgdG8gdGhlIHBhY2thZ2UncyBgYF9fcGF0aF9fYGAgYWxsIHN1YmRpcmVjdG9yaWVzIG9mIGRpcmVjdG9yaWVzIG9uCi0gICBgYHN5cy5wYXRoYGAgbmFtZWQgYWZ0ZXIgdGhlIHBhY2thZ2UuICBUaGlzIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8gZGlzdHJpYnV0ZQotICAgZGlmZmVyZW50IHBhcnRzIG9mIGEgc2luZ2xlIGxvZ2ljYWwgcGFja2FnZSBhcyBtdWx0aXBsZSBkaXJlY3Rvcmllcy4KKyAgIFRoaXMgd2lsbCBhZGQgdG8gdGhlIHBhY2thZ2UncyBgYF9fcGF0aF9fYGAgYWxsIHN1YmRpcmVjdG9yaWVzIG9mIGRpcmVjdG9yaWVzCisgICBvbiBgYHN5cy5wYXRoYGAgbmFtZWQgYWZ0ZXIgdGhlIHBhY2thZ2UuICBUaGlzIGlzIHVzZWZ1bCBpZiBvbmUgd2FudHMgdG8KKyAgIGRpc3RyaWJ1dGUgZGlmZmVyZW50IHBhcnRzIG9mIGEgc2luZ2xlIGxvZ2ljYWwgcGFja2FnZSBhcyBtdWx0aXBsZQorICAgZGlyZWN0b3JpZXMuCiAKLSAgIEl0IGFsc28gbG9va3MgZm9yIDpmaWxlOmBcKi5wa2dgIGZpbGVzIGJlZ2lubmluZyB3aGVyZSBgYCpgYCBtYXRjaGVzIHRoZSAqbmFtZSoKLSAgIGFyZ3VtZW50LiAgVGhpcyBmZWF0dXJlIGlzIHNpbWlsYXIgdG8gOmZpbGU6YFwqLnB0aGAgZmlsZXMgKHNlZSB0aGUgOm1vZDpgc2l0ZWAKLSAgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiksIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3Qgc3BlY2lhbC1jYXNlIGxpbmVzIHN0YXJ0aW5nCi0gICB3aXRoIGBgaW1wb3J0YGAuICBBIDpmaWxlOmBcKi5wa2dgIGZpbGUgaXMgdHJ1c3RlZCBhdCBmYWNlIHZhbHVlOiBhcGFydCBmcm9tCi0gICBjaGVja2luZyBmb3IgZHVwbGljYXRlcywgYWxsIGVudHJpZXMgZm91bmQgaW4gYSA6ZmlsZTpgXCoucGtnYCBmaWxlIGFyZSBhZGRlZCB0bwotICAgdGhlIHBhdGgsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGV4aXN0IG9uIHRoZSBmaWxlc3lzdGVtLiAgKFRoaXMgaXMgYQotICAgZmVhdHVyZS4pCisgICBJdCBhbHNvIGxvb2tzIGZvciA6ZmlsZTpgXCoucGtnYCBmaWxlcyBiZWdpbm5pbmcgd2hlcmUgYGAqYGAgbWF0Y2hlcyB0aGUKKyAgICpuYW1lKiBhcmd1bWVudC4gIFRoaXMgZmVhdHVyZSBpcyBzaW1pbGFyIHRvIDpmaWxlOmBcKi5wdGhgIGZpbGVzIChzZWUgdGhlCisgICA6bW9kOmBzaXRlYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24pLCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IHNwZWNpYWwtY2FzZQorICAgbGluZXMgc3RhcnRpbmcgd2l0aCBgYGltcG9ydGBgLiAgQSA6ZmlsZTpgXCoucGtnYCBmaWxlIGlzIHRydXN0ZWQgYXQgZmFjZQorICAgdmFsdWU6IGFwYXJ0IGZyb20gY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMsIGFsbCBlbnRyaWVzIGZvdW5kIGluIGEKKyAgIDpmaWxlOmBcKi5wa2dgIGZpbGUgYXJlIGFkZGVkIHRvIHRoZSBwYXRoLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBleGlzdAorICAgb24gdGhlIGZpbGVzeXN0ZW0uICAoVGhpcyBpcyBhIGZlYXR1cmUuKQogCiAgICBJZiB0aGUgaW5wdXQgcGF0aCBpcyBub3QgYSBsaXN0IChhcyBpcyB0aGUgY2FzZSBmb3IgZnJvemVuIHBhY2thZ2VzKSBpdCBpcwogICAgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgVGhlIGlucHV0IHBhdGggaXMgbm90IG1vZGlmaWVkOyBhbiBleHRlbmRlZCBjb3B5IGlzCiAgICByZXR1cm5lZC4gIEl0ZW1zIGFyZSBvbmx5IGFwcGVuZGVkIHRvIHRoZSBjb3B5IGF0IHRoZSBlbmQuCiAKLSAgIEl0IGlzIGFzc3VtZWQgdGhhdCBgYHN5cy5wYXRoYGAgaXMgYSBzZXF1ZW5jZS4gIEl0ZW1zIG9mIGBgc3lzLnBhdGhgYCB0aGF0IGFyZQotICAgbm90IChVbmljb2RlIG9yIDgtYml0KSBzdHJpbmdzIHJlZmVycmluZyB0byBleGlzdGluZyBkaXJlY3RvcmllcyBhcmUgaWdub3JlZC4KLSAgIFVuaWNvZGUgaXRlbXMgb24gYGBzeXMucGF0aGBgIHRoYXQgY2F1c2UgZXJyb3JzIHdoZW4gdXNlZCBhcyBmaWxlbmFtZXMgbWF5IGNhdXNlCi0gICB0aGlzIGZ1bmN0aW9uIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiAoaW4gbGluZSB3aXRoIDpmdW5jOmBvcy5wYXRoLmlzZGlyYAotICAgYmVoYXZpb3IpLgorICAgSXQgaXMgYXNzdW1lZCB0aGF0IDpkYXRhOmBzeXMucGF0aGAgaXMgYSBzZXF1ZW5jZS4gIEl0ZW1zIG9mIDpkYXRhOmBzeXMucGF0aGAKKyAgIHRoYXQgYXJlIG5vdCAoVW5pY29kZSBvciA4LWJpdCkgc3RyaW5ncyByZWZlcnJpbmcgdG8gZXhpc3RpbmcgZGlyZWN0b3JpZXMgYXJlCisgICBpZ25vcmVkLiAgVW5pY29kZSBpdGVtcyBvbiA6ZGF0YTpgc3lzLnBhdGhgIHRoYXQgY2F1c2UgZXJyb3JzIHdoZW4gdXNlZCBhcworICAgZmlsZW5hbWVzIG1heSBjYXVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiAoaW4gbGluZSB3aXRoCisgICA6ZnVuYzpgb3MucGF0aC5pc2RpcmAgYmVoYXZpb3IpLgorCisKKy4uIGNsYXNzOjogSW1wSW1wb3J0ZXIoZGlybmFtZT1Ob25lKQorCisgICA6cGVwOmAzMDJgIEltcG9ydGVyIHRoYXQgd3JhcHMgUHl0aG9uJ3MgImNsYXNzaWMiIGltcG9ydCBhbGdvcml0aG0uCisKKyAgIElmICpkaXJuYW1lKiBpcyBhIHN0cmluZywgYSA6cGVwOmAzMDJgIGltcG9ydGVyIGlzIGNyZWF0ZWQgdGhhdCBzZWFyY2hlcyB0aGF0CisgICBkaXJlY3RvcnkuICBJZiAqZGlybmFtZSogaXMgYGBOb25lYGAsIGEgOnBlcDpgMzAyYCBpbXBvcnRlciBpcyBjcmVhdGVkIHRoYXQKKyAgIHNlYXJjaGVzIHRoZSBjdXJyZW50IDpkYXRhOmBzeXMucGF0aGAsIHBsdXMgYW55IG1vZHVsZXMgdGhhdCBhcmUgZnJvemVuIG9yCisgICBidWlsdC1pbi4KKworICAgTm90ZSB0aGF0IDpjbGFzczpgSW1wSW1wb3J0ZXJgIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGJlaW5nIHVzZWQgYnkKKyAgIHBsYWNlbWVudCBvbiA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAuCisKKworLi4gY2xhc3M6OiBJbXBMb2FkZXIoZnVsbG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBldGMpCisKKyAgIDpwZXA6YDMwMmAgTG9hZGVyIHRoYXQgd3JhcHMgUHl0aG9uJ3MgImNsYXNzaWMiIGltcG9ydCBhbGdvcml0aG0uCisKKworLi4gZnVuY3Rpb246OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKKworICAgRmluZCBhIDpwZXA6YDMwMmAgImxvYWRlciIgb2JqZWN0IGZvciAqZnVsbG5hbWUqLgorCisgICBJZiAqZnVsbG5hbWUqIGNvbnRhaW5zIGRvdHMsIHBhdGggbXVzdCBiZSB0aGUgY29udGFpbmluZyBwYWNrYWdlJ3MKKyAgIGBgX19wYXRoX19gYC4gIFJldHVybnMgYGBOb25lYGAgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQgb3IgaW1wb3J0ZWQuCisgICBUaGlzIGZ1bmN0aW9uIHVzZXMgOmZ1bmM6YGl0ZXJfaW1wb3J0ZXJzYCwgYW5kIGlzIHRodXMgc3ViamVjdCB0byB0aGUgc2FtZQorICAgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHBsYXRmb3JtLXNwZWNpZmljIHNwZWNpYWwgaW1wb3J0IGxvY2F0aW9ucyBzdWNoIGFzIHRoZQorICAgV2luZG93cyByZWdpc3RyeS4KKworCisuLiBmdW5jdGlvbjo6IGdldF9pbXBvcnRlcihwYXRoX2l0ZW0pCisKKyAgIFJldHJpZXZlIGEgOnBlcDpgMzAyYCBpbXBvcnRlciBmb3IgdGhlIGdpdmVuICpwYXRoX2l0ZW0qLgorCisgICBUaGUgcmV0dXJuZWQgaW1wb3J0ZXIgaXMgY2FjaGVkIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgaWYgaXQgd2FzCisgICBuZXdseSBjcmVhdGVkIGJ5IGEgcGF0aCBob29rLgorCisgICBJZiB0aGVyZSBpcyBubyBpbXBvcnRlciwgYSB3cmFwcGVyIGFyb3VuZCB0aGUgYmFzaWMgaW1wb3J0IG1hY2hpbmVyeSBpcworICAgcmV0dXJuZWQuICBUaGlzIHdyYXBwZXIgaXMgbmV2ZXIgaW5zZXJ0ZWQgaW50byB0aGUgaW1wb3J0ZXIgY2FjaGUgKGBgTm9uZWBgCisgICBpcyBpbnNlcnRlZCBpbnN0ZWFkKS4KKworICAgVGhlIGNhY2hlIChvciBwYXJ0IG9mIGl0KSBjYW4gYmUgY2xlYXJlZCBtYW51YWxseSBpZiBhIHJlc2NhbiBvZgorICAgOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpcyBuZWNlc3NhcnkuCisKKworLi4gZnVuY3Rpb246OiBnZXRfbG9hZGVyKG1vZHVsZV9vcl9uYW1lKQorCisgICBHZXQgYSA6cGVwOmAzMDJgICJsb2FkZXIiIG9iamVjdCBmb3IgKm1vZHVsZV9vcl9uYW1lKi4KKworICAgSWYgdGhlIG1vZHVsZSBvciBwYWNrYWdlIGlzIGFjY2Vzc2libGUgdmlhIHRoZSBub3JtYWwgaW1wb3J0IG1lY2hhbmlzbSwgYQorICAgd3JhcHBlciBhcm91bmQgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhhdCBtYWNoaW5lcnkgaXMgcmV0dXJuZWQuICBSZXR1cm5zCisgICBgYE5vbmVgYCBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCBvciBpbXBvcnRlZC4gIElmIHRoZSBuYW1lZCBtb2R1bGUgaXMKKyAgIG5vdCBhbHJlYWR5IGltcG9ydGVkLCBpdHMgY29udGFpbmluZyBwYWNrYWdlIChpZiBhbnkpIGlzIGltcG9ydGVkLCBpbiBvcmRlcgorICAgdG8gZXN0YWJsaXNoIHRoZSBwYWNrYWdlIGBgX19wYXRoX19gYC4KKworICAgVGhpcyBmdW5jdGlvbiB1c2VzIDpmdW5jOmBpdGVyX2ltcG9ydGVyc2AsIGFuZCBpcyB0aHVzIHN1YmplY3QgdG8gdGhlIHNhbWUKKyAgIGxpbWl0YXRpb25zIHJlZ2FyZGluZyBwbGF0Zm9ybS1zcGVjaWZpYyBzcGVjaWFsIGltcG9ydCBsb2NhdGlvbnMgc3VjaCBhcyB0aGUKKyAgIFdpbmRvd3MgcmVnaXN0cnkuCisKKworLi4gZnVuY3Rpb246OiBpdGVyX2ltcG9ydGVycyhmdWxsbmFtZT0nJykKKworICAgWWllbGQgOnBlcDpgMzAyYCBpbXBvcnRlcnMgZm9yIHRoZSBnaXZlbiBtb2R1bGUgbmFtZS4KKworICAgSWYgZnVsbG5hbWUgY29udGFpbnMgYSAnLicsIHRoZSBpbXBvcnRlcnMgd2lsbCBiZSBmb3IgdGhlIHBhY2thZ2UgY29udGFpbmluZworICAgZnVsbG5hbWUsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgaW1wb3J0ZXJzIGZvciA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAsCisgICA6ZGF0YTpgc3lzLnBhdGhgLCBhbmQgUHl0aG9uJ3MgImNsYXNzaWMiIGltcG9ydCBtYWNoaW5lcnksIGluIHRoYXQgb3JkZXIuICBJZgorICAgdGhlIG5hbWVkIG1vZHVsZSBpcyBpbiBhIHBhY2thZ2UsIHRoYXQgcGFja2FnZSBpcyBpbXBvcnRlZCBhcyBhIHNpZGUgZWZmZWN0CisgICBvZiBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLgorCisgICBOb24tOnBlcDpgMzAyYCBtZWNoYW5pc21zIChlLmcuIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5KSB1c2VkIGJ5IHRoZSBzdGFuZGFyZAorICAgaW1wb3J0IG1hY2hpbmVyeSB0byBmaW5kIGZpbGVzIGluIGFsdGVybmF0aXZlIGxvY2F0aW9ucyBhcmUgcGFydGlhbGx5CisgICBzdXBwb3J0ZWQsIGJ1dCBhcmUgc2VhcmNoZWQgKmFmdGVyKiA6ZGF0YTpgc3lzLnBhdGhgLiAgTm9ybWFsbHksIHRoZXNlCisgICBsb2NhdGlvbnMgYXJlIHNlYXJjaGVkICpiZWZvcmUqIDpkYXRhOmBzeXMucGF0aGAsIHByZXZlbnRpbmcgOmRhdGE6YHN5cy5wYXRoYAorICAgZW50cmllcyBmcm9tIHNoYWRvd2luZyB0aGVtLgorCisgICBGb3IgdGhpcyB0byBjYXVzZSBhIHZpc2libGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvdXIsIHRoZXJlIG11c3QgYmUgYSBtb2R1bGUKKyAgIG9yIHBhY2thZ2UgbmFtZSB0aGF0IGlzIGFjY2Vzc2libGUgdmlhIGJvdGggOmRhdGE6YHN5cy5wYXRoYCBhbmQgb25lIG9mIHRoZQorICAgbm9uLTpwZXA6YDMwMmAgZmlsZSBzeXN0ZW0gbWVjaGFuaXNtcy4gIEluIHRoaXMgY2FzZSwgdGhlIGVtdWxhdGlvbiB3aWxsIGZpbmQKKyAgIHRoZSBmb3JtZXIgdmVyc2lvbiwgd2hpbGUgdGhlIGJ1aWx0aW4gaW1wb3J0IG1lY2hhbmlzbSB3aWxsIGZpbmQgdGhlIGxhdHRlci4KKworICAgSXRlbXMgb2YgdGhlIGZvbGxvd2luZyB0eXBlcyBjYW4gYmUgYWZmZWN0ZWQgYnkgdGhpcyBkaXNjcmVwYW5jeToKKyAgIGBgaW1wLkNfRVhURU5TSU9OYGAsIGBgaW1wLlBZX1NPVVJDRWBgLCBgYGltcC5QWV9DT01QSUxFRGBgLAorICAgYGBpbXAuUEtHX0RJUkVDVE9SWWBgLgorCisKKy4uIGZ1bmN0aW9uOjogaXRlcl9tb2R1bGVzKHBhdGg9Tm9uZSwgcHJlZml4PScnKQorCisgICBZaWVsZHMgYGAobW9kdWxlX2xvYWRlciwgbmFtZSwgaXNwa2cpYGAgZm9yIGFsbCBzdWJtb2R1bGVzIG9uICpwYXRoKiwgb3IsIGlmCisgICBwYXRoIGlzIGBgTm9uZWBgLCBhbGwgdG9wLWxldmVsIG1vZHVsZXMgb24gYGBzeXMucGF0aGBgLgorCisgICAqcGF0aCogc2hvdWxkIGJlIGVpdGhlciBgYE5vbmVgYCBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9vayBmb3IgbW9kdWxlcyBpbi4KKworICAgKnByZWZpeCogaXMgYSBzdHJpbmcgdG8gb3V0cHV0IG9uIHRoZSBmcm9udCBvZiBldmVyeSBtb2R1bGUgbmFtZSBvbiBvdXRwdXQuCisKKworLi4gZnVuY3Rpb246OiB3YWxrX3BhY2thZ2VzKHBhdGg9Tm9uZSwgcHJlZml4PScnLCBvbmVycm9yPU5vbmUpCisKKyAgIFlpZWxkcyBgYChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZylgYCBmb3IgYWxsIG1vZHVsZXMgcmVjdXJzaXZlbHkgb24KKyAgICpwYXRoKiwgb3IsIGlmIHBhdGggaXMgYGBOb25lYGAsIGFsbCBhY2Nlc3NpYmxlIG1vZHVsZXMuCisKKyAgICpwYXRoKiBzaG91bGQgYmUgZWl0aGVyIGBgTm9uZWBgIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb29rIGZvciBtb2R1bGVzIGluLgorCisgICAqcHJlZml4KiBpcyBhIHN0cmluZyB0byBvdXRwdXQgb24gdGhlIGZyb250IG9mIGV2ZXJ5IG1vZHVsZSBuYW1lIG9uIG91dHB1dC4KKworICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbXVzdCBpbXBvcnQgYWxsICpwYWNrYWdlcyogKCpub3QqIGFsbCBtb2R1bGVzISkgb24KKyAgIHRoZSBnaXZlbiAqcGF0aCosIGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSB0byBmaW5kCisgICBzdWJtb2R1bGVzLgorCisgICAqb25lcnJvciogaXMgYSBmdW5jdGlvbiB3aGljaCBnZXRzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudCAodGhlIG5hbWUgb2YgdGhlCisgICBwYWNrYWdlIHdoaWNoIHdhcyBiZWluZyBpbXBvcnRlZCkgaWYgYW55IGV4Y2VwdGlvbiBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvCisgICBpbXBvcnQgYSBwYWNrYWdlLiAgSWYgbm8gKm9uZXJyb3IqIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLCA6ZXhjOmBJbXBvcnRFcnJvcmBccworICAgYXJlIGNhdWdodCBhbmQgaWdub3JlZCwgd2hpbGUgYWxsIG90aGVyIGV4Y2VwdGlvbnMgYXJlIHByb3BhZ2F0ZWQsCisgICB0ZXJtaW5hdGluZyB0aGUgc2VhcmNoLgorCisgICBFeGFtcGxlczo6CisKKyAgICAgICMgbGlzdCBhbGwgbW9kdWxlcyBweXRob24gY2FuIGFjY2VzcworICAgICAgd2Fsa19wYWNrYWdlcygpCisKKyAgICAgICMgbGlzdCBhbGwgc3VibW9kdWxlcyBvZiBjdHlwZXMKKyAgICAgIHdhbGtfcGFja2FnZXMoY3R5cGVzLl9fcGF0aF9fLCBjdHlwZXMuX19uYW1lX18gKyAnLicpCisKIAogLi4gZnVuY3Rpb246OiBnZXRfZGF0YShwYWNrYWdlLCByZXNvdXJjZSkKIAogICAgR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKLSAgIFRoaXMgaXMgYSB3cmFwcGVyIGZvciB0aGUgOnBlcDpgMzAyYCBsb2FkZXIgOmZ1bmM6YGdldF9kYXRhYCBBUEkuIFRoZSBwYWNrYWdlCi0gICBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBwYWNrYWdlLCBpbiBzdGFuZGFyZCBtb2R1bGUgZm9ybWF0Ci0gICAoZm9vLmJhcikuIFRoZSByZXNvdXJjZSBhcmd1bWVudCBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYSByZWxhdGl2ZQotICAgZmlsZW5hbWUsIHVzaW5nIGBgL2BgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci4gVGhlIHBhcmVudCBkaXJlY3RvcnkgbmFtZQorICAgVGhpcyBpcyBhIHdyYXBwZXIgZm9yIHRoZSA6cGVwOmAzMDJgIGxvYWRlciA6ZnVuYzpgZ2V0X2RhdGFgIEFQSS4gIFRoZQorICAgKnBhY2thZ2UqIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIHBhY2thZ2UsIGluIHN0YW5kYXJkIG1vZHVsZSBmb3JtYXQKKyAgIChgYGZvby5iYXJgYCkuICBUaGUgKnJlc291cmNlKiBhcmd1bWVudCBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYSByZWxhdGl2ZQorICAgZmlsZW5hbWUsIHVzaW5nIGBgL2BgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci4gIFRoZSBwYXJlbnQgZGlyZWN0b3J5IG5hbWUKICAgIGBgLi5gYCBpcyBub3QgYWxsb3dlZCwgYW5kIG5vciBpcyBhIHJvb3RlZCBuYW1lIChzdGFydGluZyB3aXRoIGEgYGAvYGApLgogCi0gICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGJpbmFyeSBzdHJpbmcgdGhhdCBpcyB0aGUgY29udGVudHMgb2YgdGhlCi0gICBzcGVjaWZpZWQgcmVzb3VyY2UuCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGJpbmFyeSBzdHJpbmcgdGhhdCBpcyB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZAorICAgcmVzb3VyY2UuCiAKICAgIEZvciBwYWNrYWdlcyBsb2NhdGVkIGluIHRoZSBmaWxlc3lzdGVtLCB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBpbXBvcnRlZCwKICAgIHRoaXMgaXMgdGhlIHJvdWdoIGVxdWl2YWxlbnQgb2Y6OgogCi0gICAgICAgZCA9IG9zLnBhdGguZGlybmFtZShzeXMubW9kdWxlc1twYWNrYWdlXS5fX2ZpbGVfXykKLSAgICAgICBkYXRhID0gb3Blbihvcy5wYXRoLmpvaW4oZCwgcmVzb3VyY2UpLCAncmInKS5yZWFkKCkKKyAgICAgIGQgPSBvcy5wYXRoLmRpcm5hbWUoc3lzLm1vZHVsZXNbcGFja2FnZV0uX19maWxlX18pCisgICAgICBkYXRhID0gb3Blbihvcy5wYXRoLmpvaW4oZCwgcmVzb3VyY2UpLCAncmInKS5yZWFkKCkKIAogICAgSWYgdGhlIHBhY2thZ2UgY2Fubm90IGJlIGxvY2F0ZWQgb3IgbG9hZGVkLCBvciBpdCB1c2VzIGEgOnBlcDpgMzAyYCBsb2FkZXIKLSAgIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgOmZ1bmM6YGdldF9kYXRhYCwgdGhlbiBOb25lIGlzIHJldHVybmVkLgorICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCA6ZnVuYzpgZ2V0X2RhdGFgLCB0aGVuIGBgTm9uZWBgIGlzIHJldHVybmVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0IGIvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CmluZGV4IGI5OGQ5OTIuLjc4MDI0MjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKQEAgLTM4LDYgKzM4LDE2IEBACiAgICBhbmQgdGhlbiBvbmx5IGlmIHRoZSBleGVjdXRhYmxlIHBvaW50cyB0byB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgUmVhc29uYWJsZQogICAgZGVmYXVsdHMgYXJlIHVzZWQgd2hlbiB0aGUgYWJvdmUgbmVlZHMgYXJlIG5vdCBtZXQuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBPbiBNYWMgT1MgWCAoYW5kIHBlcmhhcHMgb3RoZXIgcGxhdGZvcm1zKSwgZXhlY3V0YWJsZSBmaWxlcyBtYXkgYmUKKyAgICAgIHVuaXZlcnNhbCBmaWxlcyBjb250YWluaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMuCisKKyAgICAgIFRvIGdldCBhdCB0aGUgIjY0LWJpdG5lc3MiIG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLCBpdCBpcyBtb3JlCisgICAgICByZWxpYWJsZSB0byBxdWVyeSB0aGUgOmF0dHI6YHN5cy5tYXhzaXplYCBhdHRyaWJ1dGU6OgorCisgICAgICAgICBpc182NGJpdHMgPSBzeXMubWF4c2l6ZSA+IDIqKjMyCisKIAogLi4gZnVuY3Rpb246OiBtYWNoaW5lKCkKIApAQCAtMTk0LDcgKzIwNCw3IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBOb3RlOiB0aGlzIGZ1bmN0aW9uIHdvcmtzIGJlc3Qgd2l0aCBNYXJrIEhhbW1vbmQncworICAgICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBiZXN0IHdpdGggTWFyayBIYW1tb25kJ3MKICAgICAgIDptb2Q6YHdpbjMyYWxsYCBwYWNrYWdlIGluc3RhbGxlZCwgYnV0IGFsc28gb24gUHl0aG9uIDIuMyBhbmQKICAgICAgIGxhdGVyIChzdXBwb3J0IGZvciB0aGlzIHdhcyBhZGRlZCBpbiBQeXRob24gMi42KS4gSXQgb2J2aW91c2x5CiAgICAgICBvbmx5IHJ1bnMgb24gV2luMzIgY29tcGF0aWJsZSBwbGF0Zm9ybXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0IGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdAppbmRleCAzNmEyYmM0Li43ZjEzMDI5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKQEAgLTI4LDYgKzI4LDExIEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgogICAgQWRkZWQgc3VwcG9ydCBmb3IgOmNsYXNzOmBzZXRgIGFuZCA6Y2xhc3M6YGZyb3plbnNldGAuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHBwcmludCBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvcHByaW50LnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZSBkZWZpbmVzIG9uZSBjbGFzczoKIAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdAppbmRleCBhNjlhMGRhLi4xZTIzNTBmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdApAQCAtNjIwLDcgKzYyMCw3IEBACiAgICBpbnRlZ2VycywgeW91IGNhbiBhbHNvIGludm9rZSB0aGUgY2xhc3MgY29uc3RydWN0b3Igd2l0aCBhIHNlY29uZCBhcmd1bWVudAogICAgc3BlY2lmeWluZyB0aGUgcmVhbCBkdXJhdGlvbiBvZiBvbmUgdW5pdCBvZiB0aW1lLiAgRm9yIGV4YW1wbGUsIGlmCiAgICA6ZnVuYzpgeW91cl9pbnRlZ2VyX3RpbWVfZnVuY2AgcmV0dXJucyB0aW1lcyBtZWFzdXJlZCBpbiB0aG91c2FuZHMgb2Ygc2Vjb25kcywKLSAgIHlvdSB3b3VsZCBjb25zdHVjdCB0aGUgOmNsYXNzOmBQcm9maWxlYCBpbnN0YW5jZSBhcyBmb2xsb3dzOjoKKyAgIHlvdSB3b3VsZCBjb25zdHJ1Y3QgdGhlIDpjbGFzczpgUHJvZmlsZWAgaW5zdGFuY2UgYXMgZm9sbG93czo6CiAKICAgICAgIHByID0gcHJvZmlsZS5Qcm9maWxlKHlvdXJfaW50ZWdlcl90aW1lX2Z1bmMsIDAuMDAxKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdCBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CmluZGV4IDQwY2E1ODguLmNhODYxNDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0CkBAIC00MCw2ICs0MCwxMSBAQAogICAgbGluZSwgaWYgKmFyZ3MqIGlzIG5vdCBzcGVjaWZpZWQpIGFyZSBjb21waWxlZCBhbmQgdGhlIHJlc3VsdGluZyBieXRlY29kZSBpcwogICAgY2FjaGVkIGluIHRoZSBub3JtYWwgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzZWFyY2ggYSBkaXJlY3RvcnkKICAgIHN0cnVjdHVyZSB0byBsb2NhdGUgc291cmNlIGZpbGVzOyBpdCBvbmx5IGNvbXBpbGVzIGZpbGVzIG5hbWVkIGV4cGxpY2l0bHkuCisgICBJZiBgYCctJ2BgIGlzIHRoZSBvbmx5IHBhcmFtZXRlciBpbiBhcmdzLCB0aGUgbGlzdCBvZiBmaWxlcyBpcyB0YWtlbiBmcm9tCisgICBzdGFuZGFyZCBpbnB1dC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGBgJy0nYGAuCiAKIFdoZW4gdGhpcyBtb2R1bGUgaXMgcnVuIGFzIGEgc2NyaXB0LCB0aGUgOmZ1bmM6YG1haW5gIGlzIHVzZWQgdG8gY29tcGlsZSBhbGwgdGhlCiBmaWxlcyBuYW1lZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIGV4aXQgc3RhdHVzIGlzIG5vbnplcm8gaWYgb25lIG9mIHRoZSBmaWxlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlkb2MucnN0IGIvRG9jL2xpYnJhcnkvcHlkb2MucnN0CmluZGV4IDM3ODQ1MTUuLmU1ZjhmZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weWRvYy5yc3QKQEAgLTQzLDI1ICs0MywyNSBAQAogICAgZXhlY3V0ZWQgb24gdGhhdCBvY2Nhc2lvbi4gIFVzZSBhbiBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgZ3VhcmQgdG8KICAgIG9ubHkgZXhlY3V0ZSBjb2RlIHdoZW4gYSBmaWxlIGlzIGludm9rZWQgYXMgYSBzY3JpcHQgYW5kIG5vdCBqdXN0IGltcG9ydGVkLgogCi1TcGVjaWZ5aW5nIGEgOm9wdGlvbjpgLXdgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIGNhdXNlIEhUTUwgZG9jdW1lbnRhdGlvbgorU3BlY2lmeWluZyBhIGBgLXdgYCBmbGFnIGJlZm9yZSB0aGUgYXJndW1lbnQgd2lsbCBjYXVzZSBIVE1MIGRvY3VtZW50YXRpb24KIHRvIGJlIHdyaXR0ZW4gb3V0IHRvIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGluc3RlYWQgb2YgZGlzcGxheWluZyB0ZXh0CiBvbiB0aGUgY29uc29sZS4KIAotU3BlY2lmeWluZyBhIDpvcHRpb246YC1rYCBmbGFnIGJlZm9yZSB0aGUgYXJndW1lbnQgd2lsbCBzZWFyY2ggdGhlIHN5bm9wc2lzCitTcGVjaWZ5aW5nIGEgYGAta2BgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIHNlYXJjaCB0aGUgc3lub3BzaXMKIGxpbmVzIG9mIGFsbCBhdmFpbGFibGUgbW9kdWxlcyBmb3IgdGhlIGtleXdvcmQgZ2l2ZW4gYXMgdGhlIGFyZ3VtZW50LCBhZ2FpbiBpbiBhCiBtYW5uZXIgc2ltaWxhciB0byB0aGUgVW5peCA6cHJvZ3JhbTpgbWFuYCBjb21tYW5kLiAgVGhlIHN5bm9wc2lzIGxpbmUgb2YgYQogbW9kdWxlIGlzIHRoZSBmaXJzdCBsaW5lIG9mIGl0cyBkb2N1bWVudGF0aW9uIHN0cmluZy4KIAogWW91IGNhbiBhbHNvIHVzZSA6cHJvZ3JhbTpgcHlkb2NgIHRvIHN0YXJ0IGFuIEhUVFAgc2VydmVyIG9uIHRoZSBsb2NhbCBtYWNoaW5lCi10aGF0IHdpbGwgc2VydmUgZG9jdW1lbnRhdGlvbiB0byB2aXNpdGluZyBXZWIgYnJvd3NlcnMuIDpwcm9ncmFtOmBweWRvY2AKLTpvcHRpb246YC1wIDEyMzRgIHdpbGwgc3RhcnQgYSBIVFRQIHNlcnZlciBvbiBwb3J0IDEyMzQsIGFsbG93aW5nIHlvdSB0byBicm93c2UKK3RoYXQgd2lsbCBzZXJ2ZSBkb2N1bWVudGF0aW9uIHRvIHZpc2l0aW5nIFdlYiBicm93c2Vycy4gOnByb2dyYW06YHB5ZG9jIC1wIDEyMzRgCit3aWxsIHN0YXJ0IGEgSFRUUCBzZXJ2ZXIgb24gcG9ydCAxMjM0LCBhbGxvd2luZyB5b3UgdG8gYnJvd3NlCiB0aGUgZG9jdW1lbnRhdGlvbiBhdCBgYGh0dHA6Ly9sb2NhbGhvc3Q6MTIzNC9gYCBpbiB5b3VyIHByZWZlcnJlZCBXZWIgYnJvd3Nlci4KLTpwcm9ncmFtOmBweWRvY2AgOm9wdGlvbjpgLWdgIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBhbmQgYWRkaXRpb25hbGx5IGJyaW5nIHVwIGEKKzpwcm9ncmFtOmBweWRvYyAtZ2Agd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgYnJpbmcgdXAgYQogc21hbGwgOm1vZDpgVGtpbnRlcmBcIC1iYXNlZCBncmFwaGljYWwgaW50ZXJmYWNlIHRvIGhlbHAgeW91IHNlYXJjaCBmb3IKIGRvY3VtZW50YXRpb24gcGFnZXMuCiAKIFdoZW4gOnByb2dyYW06YHB5ZG9jYCBnZW5lcmF0ZXMgZG9jdW1lbnRhdGlvbiwgaXQgdXNlcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudAotYW5kIHBhdGggdG8gbG9jYXRlIG1vZHVsZXMuICBUaHVzLCBpbnZva2luZyA6cHJvZ3JhbTpgcHlkb2NgIDpvcHRpb246YHNwYW1gCithbmQgcGF0aCB0byBsb2NhdGUgbW9kdWxlcy4gIFRodXMsIGludm9raW5nIDpwcm9ncmFtOmBweWRvYyBzcGFtYAogZG9jdW1lbnRzIHByZWNpc2VseSB0aGUgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIHlvdSB3b3VsZCBnZXQgaWYgeW91IHN0YXJ0ZWQgdGhlCiBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIHR5cGVkIGBgaW1wb3J0IHNwYW1gYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QgYi9Eb2MvbGlicmFyeS9weWV4cGF0LnJzdAppbmRleCAwNDE3OWE0Li44Mjk5NzM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weWV4cGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9weWV4cGF0LnJzdApAQCAtMTU3LDYgKzE1NywxMyBAQAogICAgOmF0dHI6YG9yZGVyZWRfYXR0cmlidXRlc2AsIDphdHRyOmByZXR1cm5zX3VuaWNvZGVgIGFuZAogICAgOmF0dHI6YHNwZWNpZmllZF9hdHRyaWJ1dGVzYCBzZXQgdG8gdGhlIHZhbHVlcyBvZiB0aGlzIHBhcnNlci4KIAorLi4gbWV0aG9kOjogeG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZyhmbGFnKQorCisgICBDb250cm9sIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGVudGl0aWVzIChpbmNsdWRpbmcgdGhlIGV4dGVybmFsIERURCBzdWJzZXQpLgorICAgUG9zc2libGUgKmZsYWcqIHZhbHVlcyBhcmUgOmNvbnN0OmBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfTkVWRVJgLAorICAgOmNvbnN0OmBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfVU5MRVNTX1NUQU5EQUxPTkVgIGFuZAorICAgOmNvbnN0OmBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxXQVlTYC4gIFJldHVybiB0cnVlIGlmIHNldHRpbmcgdGhlIGZsYWcKKyAgIHdhcyBzdWNjZXNzZnVsLgogCiAuLiBtZXRob2Q6OiB4bWxwYXJzZXIuVXNlRm9yZWlnbkRURChbZmxhZ10pCiAKQEAgLTQ2NCw3ICs0NzEsNyBAQAogICAgQ2FsbGVkIGlmIHRoZSBYTUwgZG9jdW1lbnQgaGFzbid0IGJlZW4gZGVjbGFyZWQgYXMgYmVpbmcgYSBzdGFuZGFsb25lIGRvY3VtZW50LgogICAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgYW4gZXh0ZXJuYWwgc3Vic2V0IG9yIGEgcmVmZXJlbmNlIHRvIGEgcGFyYW1ldGVyCiAgICBlbnRpdHksIGJ1dCB0aGUgWE1MIGRlY2xhcmF0aW9uIGRvZXMgbm90IHNldCBzdGFuZGFsb25lIHRvIGBgeWVzYGAgaW4gYW4gWE1MCi0gICBkZWNsYXJhdGlvbi4gIElmIHRoaXMgaGFuZGxlciByZXR1cm5zIGBgMGBgLCB0aGVuIHRoZSBwYXJzZXIgd2lsbCB0aHJvdyBhbgorICAgZGVjbGFyYXRpb24uICBJZiB0aGlzIGhhbmRsZXIgcmV0dXJucyBgYDBgYCwgdGhlbiB0aGUgcGFyc2VyIHdpbGwgcmFpc2UgYW4KICAgIDpjb25zdDpgWE1MX0VSUk9SX05PVF9TVEFOREFMT05FYCBlcnJvci4gIElmIHRoaXMgaGFuZGxlciBpcyBub3Qgc2V0LCBubwogICAgZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgcGFyc2VyIGZvciB0aGlzIGNvbmRpdGlvbi4KIApAQCAtNDgxLDcgKzQ4OCw3IEBACiAgICByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIHN1Yi1wYXJzZXIgdXNpbmcKICAgIGBgRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUoY29udGV4dClgYCwgaW5pdGlhbGl6aW5nIGl0IHdpdGggdGhlIGFwcHJvcHJpYXRlCiAgICBjYWxsYmFja3MsIGFuZCBwYXJzaW5nIHRoZSBlbnRpdHkuICBUaGlzIGhhbmRsZXIgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyOyBpZiBpdAotICAgcmV0dXJucyBgYDBgYCwgdGhlIHBhcnNlciB3aWxsIHRocm93IGFuCisgICByZXR1cm5zIGBgMGBgLCB0aGUgcGFyc2VyIHdpbGwgcmFpc2UgYW4KICAgIDpjb25zdDpgWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElOR2AgZXJyb3IsIG90aGVyd2lzZSBwYXJzaW5nIHdpbGwKICAgIGNvbnRpbnVlLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weXRob24ucnN0IGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAppbmRleCA2ZjRlY2I3Li5hYWYxYWJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weXRob24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKQEAgLTEzLDYgKzEzLDcgQEAKIC4uIHRvY3RyZWU6OgogCiAgICBzeXMucnN0CisgICBzeXNjb25maWcucnN0CiAgICBfX2J1aWx0aW5fXy5yc3QKICAgIGZ1dHVyZV9idWlsdGlucy5yc3QKICAgIF9fbWFpbl9fLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcXVldWUucnN0IGIvRG9jL2xpYnJhcnkvcXVldWUucnN0CmluZGV4IDk3NjUxMDIuLmE0NzFiYjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1ZXVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9xdWV1ZS5yc3QKQEAgLTI0LDYgKzI0LDExIEBACiB0aGUgZW50cmllcyBhcmUga2VwdCBzb3J0ZWQgKHVzaW5nIHRoZSA6bW9kOmBoZWFwcWAgbW9kdWxlKSBhbmQgdGhlCiBsb3dlc3QgdmFsdWVkIGVudHJ5IGlzIHJldHJpZXZlZCBmaXJzdC4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgcXVldWUgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL1F1ZXVlLnB5P3ZpZXc9bWFya3VwPmBfLgorCiBUaGUgOm1vZDpgUXVldWVgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhbmQgZXhjZXB0aW9uczoKIAogLi4gY2xhc3M6OiBRdWV1ZShtYXhzaXplPTApCkBAIC0xODMsNyArMTg4LDcgQEAKICAgIHEgPSBRdWV1ZSgpCiAgICBmb3IgaSBpbiByYW5nZShudW1fd29ya2VyX3RocmVhZHMpOgogICAgICAgICB0ID0gVGhyZWFkKHRhcmdldD13b3JrZXIpCi0gICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQogICAgICAgICB0LnN0YXJ0KCkKIAogICAgZm9yIGl0ZW0gaW4gc291cmNlKCk6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0IGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdAppbmRleCBmNDY3NGRjLi44N2Q3MGMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKQEAgLTE4LDYgKzE4LDEwIEBACiA6bW9kOmBiYXNlNjRgIG1vZHVsZSBpcyBtb3JlIGNvbXBhY3QgaWYgdGhlcmUgYXJlIG1hbnkgc3VjaCBjaGFyYWN0ZXJzLCBhcyB3aGVuCiBzZW5kaW5nIGEgZ3JhcGhpY3MgZmlsZS4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgcXVvcHJpIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9xdW9wcmkucHk/dmlldz1tYXJrdXA+YF8KIAogLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dFssaGVhZGVyXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmFuZG9tLnJzdCBiL0RvYy9saWJyYXJ5L3JhbmRvbS5yc3QKaW5kZXggNDg2ZTQ3NS4uNDMwNjkxMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmFuZG9tLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yYW5kb20ucnN0CkBAIC05LDYgKzksMTEgQEAKIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyBmb3IgdmFyaW91cwogZGlzdHJpYnV0aW9ucy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgcmFuZG9tIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9yYW5kb20ucHk/dmlldz1tYXJrdXA+YF8KKwogRm9yIGludGVnZXJzLCB1bmlmb3JtIHNlbGVjdGlvbiBmcm9tIGEgcmFuZ2UuIEZvciBzZXF1ZW5jZXMsIHVuaWZvcm0gc2VsZWN0aW9uCiBvZiBhIHJhbmRvbSBlbGVtZW50LCBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgcmFuZG9tIHBlcm11dGF0aW9uIG9mIGEgbGlzdAogaW4tcGxhY2UsIGFuZCBhIGZ1bmN0aW9uIGZvciByYW5kb20gc2FtcGxpbmcgd2l0aG91dCByZXBsYWNlbWVudC4KQEAgLTczLDEwICs3OCw2IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNAogICAgICAgZm9ybWVybHksIG9wZXJhdGluZyBzeXN0ZW0gcmVzb3VyY2VzIHdlcmUgbm90IHVzZWQuCiAKLSAgIElmICp4KiBpcyBub3QgYGBOb25lYGAgb3IgYW4gaW50IG9yIGxvbmcsIGBgaGFzaCh4KWBgIGlzIHVzZWQgaW5zdGVhZC4gSWYgKngqIGlzCi0gICBhbiBpbnQgb3IgbG9uZywgKngqIGlzIHVzZWQgZGlyZWN0bHkuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRzdGF0ZSgpCiAKICAgIFJldHVybiBhbiBvYmplY3QgY2FwdHVyaW5nIHRoZSBjdXJyZW50IGludGVybmFsIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IuICBUaGlzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZS5yc3QgYi9Eb2MvbGlicmFyeS9yZS5yc3QKaW5kZXggOTgyMTA0Ny4uZjc4OTYwMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlLnJzdApAQCAtMjI0LDcgKzIyNCw3IEBACiAgICB1bmRlZmluZWQuCiAKIGBgKD86Li4uKWBgCi0gICBBIG5vbi1ncm91cGluZyB2ZXJzaW9uIG9mIHJlZ3VsYXIgcGFyZW50aGVzZXMuIE1hdGNoZXMgd2hhdGV2ZXIgcmVndWxhcgorICAgQSBub24tY2FwdHVyaW5nIHZlcnNpb24gb2YgcmVndWxhciBwYXJlbnRoZXNlcy4gIE1hdGNoZXMgd2hhdGV2ZXIgcmVndWxhcgogICAgZXhwcmVzc2lvbiBpcyBpbnNpZGUgdGhlIHBhcmVudGhlc2VzLCBidXQgdGhlIHN1YnN0cmluZyBtYXRjaGVkIGJ5IHRoZSBncm91cAogICAgKmNhbm5vdCogYmUgcmV0cmlldmVkIGFmdGVyIHBlcmZvcm1pbmcgYSBtYXRjaCBvciByZWZlcmVuY2VkIGxhdGVyIGluIHRoZQogICAgcGF0dGVybi4KQEAgLTMzMiw3ICszMzIsOCBAQAogYGBcZGBgCiAgICBXaGVuIHRoZSA6Y29uc3Q6YFVOSUNPREVgIGZsYWcgaXMgbm90IHNwZWNpZmllZCwgbWF0Y2hlcyBhbnkgZGVjaW1hbCBkaWdpdDsgdGhpcwogICAgaXMgZXF1aXZhbGVudCB0byB0aGUgc2V0IGBgWzAtOV1gYC4gIFdpdGggOmNvbnN0OmBVTklDT0RFYCwgaXQgd2lsbCBtYXRjaAotICAgd2hhdGV2ZXIgaXMgY2xhc3NpZmllZCBhcyBhIGRpZ2l0IGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGRhdGFiYXNlLgorICAgd2hhdGV2ZXIgaXMgY2xhc3NpZmllZCBhcyBhIGRlY2ltYWwgZGlnaXQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMKKyAgIGRhdGFiYXNlLgogCiBgYFxEYGAKICAgIFdoZW4gdGhlIDpjb25zdDpgVU5JQ09ERWAgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLCBtYXRjaGVzIGFueSBub24tZGlnaXQKQEAgLTUzNiw3ICs1MzcsNyBAQAogICAgICAgaW5zdGVhZC4KIAogCi0uLiBmdW5jdGlvbjo6IHNwbGl0KHBhdHRlcm4sIHN0cmluZ1ssIG1heHNwbGl0PTBdKQorLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmdbLCBtYXhzcGxpdD0wLCBmbGFncz0wXSkKIAogICAgU3BsaXQgKnN0cmluZyogYnkgdGhlIG9jY3VycmVuY2VzIG9mICpwYXR0ZXJuKi4gIElmIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBhcmUKICAgIHVzZWQgaW4gKnBhdHRlcm4qLCB0aGVuIHRoZSB0ZXh0IG9mIGFsbCBncm91cHMgaW4gdGhlIHBhdHRlcm4gYXJlIGFsc28gcmV0dXJuZWQKQEAgLTU1MSw2ICs1NTIsOCBAQAogICAgICAgWydXb3JkcycsICcsICcsICd3b3JkcycsICcsICcsICd3b3JkcycsICcuJywgJyddCiAgICAgICA+Pj4gcmUuc3BsaXQoJ1xXKycsICdXb3Jkcywgd29yZHMsIHdvcmRzLicsIDEpCiAgICAgICBbJ1dvcmRzJywgJ3dvcmRzLCB3b3Jkcy4nXQorICAgICAgPj4+IHJlLnNwbGl0KCdbYS1mXSsnLCAnMGEzQjknLCBmbGFncz1yZS5JR05PUkVDQVNFKQorICAgICAgWycwJywgJzMnLCAnOSddCiAKICAgIElmIHRoZXJlIGFyZSBjYXB0dXJpbmcgZ3JvdXBzIGluIHRoZSBzZXBhcmF0b3IgYW5kIGl0IG1hdGNoZXMgYXQgdGhlIHN0YXJ0IG9mCiAgICB0aGUgc3RyaW5nLCB0aGUgcmVzdWx0IHdpbGwgc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuICBUaGUgc2FtZSBob2xkcyBmb3IKQEAgLTU3MSw2ICs1NzQsOSBAQAogICAgICAgPj4+IHJlLnNwbGl0KCIoP20pXiQiLCAiZm9vXG5cbmJhclxuIikKICAgICAgIFsnZm9vXG5cbmJhclxuJ10KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIHRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudC4KKwogCiAuLiBmdW5jdGlvbjo6IGZpbmRhbGwocGF0dGVybiwgc3RyaW5nWywgZmxhZ3NdKQogCkBAIC02MDEsNyArNjA3LDcgQEAKICAgICAgIEFkZGVkIHRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudC4KIAogCi0uLiBmdW5jdGlvbjo6IHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmdbLCBjb3VudF0pCisuLiBmdW5jdGlvbjo6IHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmdbLCBjb3VudCwgZmxhZ3NdKQogCiAgICBSZXR1cm4gdGhlIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlIGxlZnRtb3N0IG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcwogICAgb2YgKnBhdHRlcm4qIGluICpzdHJpbmcqIGJ5IHRoZSByZXBsYWNlbWVudCAqcmVwbCouICBJZiB0aGUgcGF0dGVybiBpc24ndCBmb3VuZCwKQEAgLTYyNiwxMCArNjMyLDEwIEBACiAgICAgICAuLi4gICAgIGVsc2U6IHJldHVybiAnLScKICAgICAgID4+PiByZS5zdWIoJy17MSwyfScsIGRhc2hyZXBsLCAncHJvLS0tLWdyYW0tZmlsZXMnKQogICAgICAgJ3Byby0tZ3JhbSBmaWxlcycKKyAgICAgID4+PiByZS5zdWIocidcc0FORFxzJywgJyAmICcsICdCYWtlZCBCZWFucyBBbmQgU3BhbScsIGZsYWdzPXJlLklHTk9SRUNBU0UpCisgICAgICAnQmFrZWQgQmVhbnMgJiBTcGFtJwogCi0gICBUaGUgcGF0dGVybiBtYXkgYmUgYSBzdHJpbmcgb3IgYW4gUkUgb2JqZWN0OyBpZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHJlZ3VsYXIKLSAgIGV4cHJlc3Npb24gZmxhZ3MsIHlvdSBtdXN0IHVzZSBhIFJFIG9iamVjdCwgb3IgdXNlIGVtYmVkZGVkIG1vZGlmaWVycyBpbiBhCi0gICBwYXR0ZXJuOyBmb3IgZXhhbXBsZSwgYGBzdWIoIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpYGAgcmV0dXJucyBgYCd4IHgnYGAuCisgICBUaGUgcGF0dGVybiBtYXkgYmUgYSBzdHJpbmcgb3IgYW4gUkUgb2JqZWN0LgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0dGVybiBvY2N1cnJlbmNlcyB0byBiZQogICAgcmVwbGFjZWQ7ICpjb3VudCogbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiAgSWYgb21pdHRlZCBvciB6ZXJvLCBhbGwKQEAgLTY0NiwxMiArNjUyLDE4IEBACiAgICBjaGFyYWN0ZXIgYGAnMCdgYC4gIFRoZSBiYWNrcmVmZXJlbmNlIGBgXGc8MD5gYCBzdWJzdGl0dXRlcyBpbiB0aGUgZW50aXJlCiAgICBzdWJzdHJpbmcgbWF0Y2hlZCBieSB0aGUgUkUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBBZGRlZCB0aGUgb3B0aW9uYWwgZmxhZ3MgYXJndW1lbnQuCiAKLS4uIGZ1bmN0aW9uOjogc3VibihwYXR0ZXJuLCByZXBsLCBzdHJpbmdbLCBjb3VudF0pCisKKy4uIGZ1bmN0aW9uOjogc3VibihwYXR0ZXJuLCByZXBsLCBzdHJpbmdbLCBjb3VudCwgZmxhZ3NdKQogCiAgICBQZXJmb3JtIHRoZSBzYW1lIG9wZXJhdGlvbiBhcyA6ZnVuYzpgc3ViYCwgYnV0IHJldHVybiBhIHR1cGxlIGBgKG5ld19zdHJpbmcsCiAgICBudW1iZXJfb2Zfc3Vic19tYWRlKWBgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgdGhlIG9wdGlvbmFsIGZsYWdzIGFyZ3VtZW50LgorCiAKIC4uIGZ1bmN0aW9uOjogZXNjYXBlKHN0cmluZykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IGM1OGZkMjYuLmY2ZTg1NWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTIwLDcgKzIwLDcgQEAKICAgdGhlIGBgbGliZWRpdGBgIGxpYnJhcnkgaW5zdGVhZCBvZiBHTlUgcmVhZGxpbmUuCiAKICAgVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgYGBsaWJlZGl0YGAgaXMgZGlmZmVyZW50IGZyb20gdGhhdAotICBvZiBHTlUgcmVhZGxpbmUuIElmIHlvdSBwcm9ncmFtbWF0aWNseSBsb2FkIGNvbmZpZ3VyYXRpb24gc3RyaW5ncworICBvZiBHTlUgcmVhZGxpbmUuIElmIHlvdSBwcm9ncmFtbWF0aWNhbGx5IGxvYWQgY29uZmlndXJhdGlvbiBzdHJpbmdzCiAgIHlvdSBjYW4gY2hlY2sgZm9yIHRoZSB0ZXh0ICJsaWJlZGl0IiBpbiA6Y29uc3Q6YHJlYWRsaW5lLl9fZG9jX19gCiAgIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBHTlUgcmVhZGxpbmUgYW5kIGxpYmVkaXQuCiAKQEAgLTIxMCw2ICsyMTAsNyBAQAogOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4gOjoKIAogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKICAgIGhpc3RmaWxlID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwgIi5weWhpc3QiKQogICAgdHJ5OgogICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RmaWxlKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVwci5yc3QgYi9Eb2MvbGlicmFyeS9yZXByLnJzdAppbmRleCA3ODI4NGYwLi41YmY1YmYyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZXByLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXByLnJzdApAQCAtMTUsNiArMTUsMTEgQEAKIHdpdGggbGltaXRzIG9uIHRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5ncy4gVGhpcyBpcyB1c2VkIGluIHRoZSBQeXRob24KIGRlYnVnZ2VyIGFuZCBtYXkgYmUgdXNlZnVsIGluIG90aGVyIGNvbnRleHRzIGFzIHdlbGwuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHJlcHIgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3JlcHIucHk/dmlldz1tYXJrdXA+YF8KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcywgYW4gaW5zdGFuY2UsIGFuZCBhIGZ1bmN0aW9uOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3J1bnB5LnJzdCBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdAppbmRleCBhMGYzMDM1Li45MDVjNjRiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcnVucHkucnN0CkBAIC05LDYxICs5LDEyOSBAQAogLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKIFRoZSA6bW9kOmBydW5weWAgbW9kdWxlIGlzIHVzZWQgdG8gbG9jYXRlIGFuZCBydW4gUHl0aG9uIG1vZHVsZXMgd2l0aG91dAotaW1wb3J0aW5nIHRoZW0gZmlyc3QuIEl0cyBtYWluIHVzZSBpcyB0byBpbXBsZW1lbnQgdGhlIDpvcHRpb246YC1tYCBjb21tYW5kIGxpbmUKLXN3aXRjaCB0aGF0IGFsbG93cyBzY3JpcHRzIHRvIGJlIGxvY2F0ZWQgdXNpbmcgdGhlIFB5dGhvbiBtb2R1bGUgbmFtZXNwYWNlCi1yYXRoZXIgdGhhbiB0aGUgZmlsZXN5c3RlbS4KK2ltcG9ydGluZyB0aGVtIGZpcnN0LiBJdHMgbWFpbiB1c2UgaXMgdG8gaW1wbGVtZW50IHRoZSA6b3B0aW9uOmAtbWAgY29tbWFuZAorbGluZSBzd2l0Y2ggdGhhdCBhbGxvd3Mgc2NyaXB0cyB0byBiZSBsb2NhdGVkIHVzaW5nIHRoZSBQeXRob24gbW9kdWxlCituYW1lc3BhY2UgcmF0aGVyIHRoYW4gdGhlIGZpbGVzeXN0ZW0uCiAKLVdoZW4gZXhlY3V0ZWQgYXMgYSBzY3JpcHQsIHRoZSBtb2R1bGUgZWZmZWN0aXZlbHkgb3BlcmF0ZXMgYXMgZm9sbG93czo6Ci0KLSAgIGRlbCBzeXMuYXJndlswXSAgIyBSZW1vdmUgdGhlIHJ1bnB5IG1vZHVsZSBmcm9tIHRoZSBhcmd1bWVudHMKLSAgIHJ1bl9tb2R1bGUoc3lzLmFyZ3ZbMF0sIHJ1bl9uYW1lPSJfX21haW5fXyIsIGFsdGVyX3N5cz1UcnVlKQotCi1UaGUgOm1vZDpgcnVucHlgIG1vZHVsZSBwcm92aWRlcyBhIHNpbmdsZSBmdW5jdGlvbjoKK1RoZSA6bW9kOmBydW5weWAgbW9kdWxlIHByb3ZpZGVzIHR3byBmdW5jdGlvbnM6CiAKIAotLi4gZnVuY3Rpb246OiBydW5fbW9kdWxlKG1vZF9uYW1lWywgaW5pdF9nbG9iYWxzXSBbLCBydW5fbmFtZV1bLCBhbHRlcl9zeXNdKQorLi4gZnVuY3Rpb246OiBydW5fbW9kdWxlKG1vZF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSwgYWx0ZXJfc3lzPUZhbHNlKQogCi0gICBFeGVjdXRlIHRoZSBjb2RlIG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBtb2R1bGUgZ2xvYmFscwotICAgZGljdGlvbmFyeS4gVGhlIG1vZHVsZSdzIGNvZGUgaXMgZmlyc3QgbG9jYXRlZCB1c2luZyB0aGUgc3RhbmRhcmQgaW1wb3J0Ci0gICBtZWNoYW5pc20gKHJlZmVyIHRvIDpwZXA6YDMwMmAgZm9yIGRldGFpbHMpIGFuZCB0aGVuIGV4ZWN1dGVkIGluIGEgZnJlc2ggbW9kdWxlCi0gICBuYW1lc3BhY2UuCisgICBFeGVjdXRlIHRoZSBjb2RlIG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBtb2R1bGUKKyAgIGdsb2JhbHMgZGljdGlvbmFyeS4gVGhlIG1vZHVsZSdzIGNvZGUgaXMgZmlyc3QgbG9jYXRlZCB1c2luZyB0aGUgc3RhbmRhcmQKKyAgIGltcG9ydCBtZWNoYW5pc20gKHJlZmVyIHRvIDpwZXA6YDMwMmAgZm9yIGRldGFpbHMpIGFuZCB0aGVuIGV4ZWN1dGVkIGluIGEKKyAgIGZyZXNoIG1vZHVsZSBuYW1lc3BhY2UuCiAKLSAgIFRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50ICppbml0X2dsb2JhbHMqIG1heSBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZSB0aGUKLSAgIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIGNvZGUgaXMgZXhlY3V0ZWQuIFRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5IHdpbGwgbm90Ci0gICBiZSBtb2RpZmllZC4gSWYgYW55IG9mIHRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYmVsb3cgYXJlIGRlZmluZWQgaW4gdGhlCi0gICBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUgb3ZlcnJpZGRlbiBieSB0aGUgYGBydW5fbW9kdWxlYGAKLSAgIGZ1bmN0aW9uLgorICAgSWYgdGhlIHN1cHBsaWVkIG1vZHVsZSBuYW1lIHJlZmVycyB0byBhIHBhY2thZ2UgcmF0aGVyIHRoYW4gYSBub3JtYWwKKyAgIG1vZHVsZSwgdGhlbiB0aGF0IHBhY2thZ2UgaXMgaW1wb3J0ZWQgYW5kIHRoZSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlIHdpdGhpbgorICAgdGhhdCBwYWNrYWdlIGlzIHRoZW4gZXhlY3V0ZWQgYW5kIHRoZSByZXN1bHRpbmcgbW9kdWxlIGdsb2JhbHMgZGljdGlvbmFyeQorICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fZmlsZV9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZAotICAgYGBfX2J1aWx0aW5zX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcwotICAgZXhlY3V0ZWQuCisgICBUaGUgb3B0aW9uYWwgZGljdGlvbmFyeSBhcmd1bWVudCAqaW5pdF9nbG9iYWxzKiBtYXkgYmUgdXNlZCB0byBwcmUtcG9wdWxhdGUKKyAgIHRoZSBtb2R1bGUncyBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBjb2RlIGlzIGV4ZWN1dGVkLiBUaGUgc3VwcGxpZWQKKyAgIGRpY3Rpb25hcnkgd2lsbCBub3QgYmUgbW9kaWZpZWQuIElmIGFueSBvZiB0aGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzCisgICBiZWxvdyBhcmUgZGVmaW5lZCBpbiB0aGUgc3VwcGxpZWQgZGljdGlvbmFyeSwgdGhvc2UgZGVmaW5pdGlvbnMgYXJlCisgICBvdmVycmlkZGVuIGJ5IDpmdW5jOmBydW5fbW9kdWxlYC4KIAotICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgc3VwcGxpZWQsIGFuZCB0aGUKLSAgICptb2RfbmFtZSogYXJndW1lbnQgb3RoZXJ3aXNlLgorICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2xvYWRlcl9fYGAKKyAgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgbW9kdWxlCisgICBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhIG1pbmltYWwgc2V0IG9mIHZhcmlhYmxlcyAtIG90aGVyCisgICB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuIGludGVycHJldGVyIGltcGxlbWVudGF0aW9uIGRldGFpbCkuCiAKLSAgIGBgX19sb2FkZXJfX2BgIGlzIHNldCB0byB0aGUgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIHVzZWQgdG8gcmV0cmlldmUgdGhlIGNvZGUgZm9yCi0gICB0aGUgbW9kdWxlIChUaGlzIGxvYWRlciBtYXkgYmUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgc3RhbmRhcmQgaW1wb3J0IG1lY2hhbmlzbSkuCisgICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBub3QKKyAgIDpjb25zdDpgTm9uZWAsIHRvIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fJ2BgIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYQorICAgcGFja2FnZSBhbmQgdG8gdGhlICptb2RfbmFtZSogYXJndW1lbnQgb3RoZXJ3aXNlLgogCi0gICBgYF9fZmlsZV9fYGAgaXMgc2V0IHRvIHRoZSBuYW1lIHByb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgbG9hZGVyLiBJZiB0aGUgbG9hZGVyCi0gICBkb2VzIG5vdCBtYWtlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gYGBOb25lYGAuCisgICBgYF9fZmlsZV9fYGAgaXMgc2V0IHRvIHRoZSBuYW1lIHByb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgbG9hZGVyLiBJZiB0aGUKKyAgIGxvYWRlciBkb2VzIG5vdCBtYWtlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBpcyBzZXQKKyAgIHRvIDpjb25zdDpgTm9uZWAuCiAKLSAgIGBgX19idWlsdGluc19fYGAgaXMgYXV0b21hdGljYWxseSBpbml0aWFsaXNlZCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AgbGV2ZWwKLSAgIG5hbWVzcGFjZSBvZiB0aGUgOm1vZDpgX19idWlsdGluX19gIG1vZHVsZS4KKyAgIGBgX19sb2FkZXJfX2BgIGlzIHNldCB0byB0aGUgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIHVzZWQgdG8gcmV0cmlldmUgdGhlCisgICBjb2RlIGZvciB0aGUgbW9kdWxlIChUaGlzIGxvYWRlciBtYXkgYmUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgc3RhbmRhcmQKKyAgIGltcG9ydCBtZWNoYW5pc20pLgogCi0gICBJZiB0aGUgYXJndW1lbnQgKmFsdGVyX3N5cyogaXMgc3VwcGxpZWQgYW5kIGV2YWx1YXRlcyB0byBgYFRydWVgYCwgdGhlbgotICAgYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZAorICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byAqbW9kX25hbWUqIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYSBwYWNrYWdlIGFuZAorICAgdG8gYGBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF1gYCBvdGhlcndpc2UuCisKKyAgIElmIHRoZSBhcmd1bWVudCAqYWx0ZXJfc3lzKiBpcyBzdXBwbGllZCBhbmQgZXZhbHVhdGVzIHRvIDpjb25zdDpgVHJ1ZWAsCisgICB0aGVuIGBgc3lzLmFyZ3ZbMF1gYCBpcyB1cGRhdGVkIHdpdGggdGhlIHZhbHVlIG9mIGBgX19maWxlX19gYCBhbmQKICAgIGBgc3lzLm1vZHVsZXNbX19uYW1lX19dYGAgaXMgdXBkYXRlZCB3aXRoIGEgdGVtcG9yYXJ5IG1vZHVsZSBvYmplY3QgZm9yIHRoZQogICAgbW9kdWxlIGJlaW5nIGV4ZWN1dGVkLiBCb3RoIGBgc3lzLmFyZ3ZbMF1gYCBhbmQgYGBzeXMubW9kdWxlc1tfX25hbWVfX11gYAogICAgYXJlIHJlc3RvcmVkIHRvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcyBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuCiAKLSAgIE5vdGUgdGhhdCB0aGlzIG1hbmlwdWxhdGlvbiBvZiA6bW9kOmBzeXNgIGlzIG5vdCB0aHJlYWQtc2FmZS4gT3RoZXIgdGhyZWFkcyBtYXkKLSAgIHNlZSB0aGUgcGFydGlhbGx5IGluaXRpYWxpc2VkIG1vZHVsZSwgYXMgd2VsbCBhcyB0aGUgYWx0ZXJlZCBsaXN0IG9mIGFyZ3VtZW50cy4KLSAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGJlIGxlZnQgYWxvbmUgd2hlbiBpbnZva2luZyB0aGlzCi0gICBmdW5jdGlvbiBmcm9tIHRocmVhZGVkIGNvZGUuCisgICBOb3RlIHRoYXQgdGhpcyBtYW5pcHVsYXRpb24gb2YgOm1vZDpgc3lzYCBpcyBub3QgdGhyZWFkLXNhZmUuIE90aGVyIHRocmVhZHMKKyAgIG1heSBzZWUgdGhlIHBhcnRpYWxseSBpbml0aWFsaXNlZCBtb2R1bGUsIGFzIHdlbGwgYXMgdGhlIGFsdGVyZWQgbGlzdCBvZgorICAgYXJndW1lbnRzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSA6bW9kOmBzeXNgIG1vZHVsZSBiZSBsZWZ0IGFsb25lIHdoZW4KKyAgIGludm9raW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aHJlYWRlZCBjb2RlLgogCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGV4ZWN1dGUgcGFja2FnZXMgYnkgbG9va2luZyBmb3IgYSBgYF9fbWFpbl9fYGAKKyAgICAgICAgIHN1Ym1vZHVsZQorCisKKy4uIGZ1bmN0aW9uOjogcnVuX3BhdGgoZmlsZV9wYXRoLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSkKKworICAgRXhlY3V0ZSB0aGUgY29kZSBhdCB0aGUgbmFtZWQgZmlsZXN5c3RlbSBsb2NhdGlvbiBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcKKyAgIG1vZHVsZSBnbG9iYWxzIGRpY3Rpb25hcnkuIEFzIHdpdGggYSBzY3JpcHQgbmFtZSBzdXBwbGllZCB0byB0aGUgQ1B5dGhvbgorICAgY29tbWFuZCBsaW5lLCB0aGUgc3VwcGxpZWQgcGF0aCBtYXkgcmVmZXIgdG8gYSBQeXRob24gc291cmNlIGZpbGUsIGEKKyAgIGNvbXBpbGVkIGJ5dGVjb2RlIGZpbGUgb3IgYSB2YWxpZCBzeXMucGF0aCBlbnRyeSBjb250YWluaW5nIGEgYGBfX21haW5fX2BgCisgICBtb2R1bGUgKGUuZy4gYSB6aXBmaWxlIGNvbnRhaW5pbmcgYSB0b3AtbGV2ZWwgYGBfX21haW5fXy5weWBgIGZpbGUpLgorCisgICBGb3IgYSBzaW1wbGUgc2NyaXB0LCB0aGUgc3BlY2lmaWVkIGNvZGUgaXMgc2ltcGx5IGV4ZWN1dGVkIGluIGEgZnJlc2gKKyAgIG1vZHVsZSBuYW1lc3BhY2UuIEZvciBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5ICh0eXBpY2FsbHkgYSB6aXBmaWxlIG9yCisgICBkaXJlY3RvcnkpLCB0aGUgZW50cnkgaXMgZmlyc3QgYWRkZWQgdG8gdGhlIGJlZ2lubmluZyBvZiBgYHN5cy5wYXRoYGAuIFRoZQorICAgZnVuY3Rpb24gdGhlbiBsb29rcyBmb3IgYW5kIGV4ZWN1dGVzIGEgOm1vZDpgX19tYWluX19gIG1vZHVsZSB1c2luZyB0aGUKKyAgIHVwZGF0ZWQgcGF0aC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHNwZWNpYWwgcHJvdGVjdGlvbiBhZ2FpbnN0IGludm9raW5nCisgICBhbiBleGlzdGluZyA6bW9kOmBfX21haW5fX2AgZW50cnkgbG9jYXRlZCBlbHNld2hlcmUgb24gYGBzeXMucGF0aGBgIGlmCisgICB0aGVyZSBpcyBubyBzdWNoIG1vZHVsZSBhdCB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLgorCisgICBUaGUgb3B0aW9uYWwgZGljdGlvbmFyeSBhcmd1bWVudCAqaW5pdF9nbG9iYWxzKiBtYXkgYmUgdXNlZCB0byBwcmUtcG9wdWxhdGUKKyAgIHRoZSBtb2R1bGUncyBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBjb2RlIGlzIGV4ZWN1dGVkLiBUaGUgc3VwcGxpZWQKKyAgIGRpY3Rpb25hcnkgd2lsbCBub3QgYmUgbW9kaWZpZWQuIElmIGFueSBvZiB0aGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzCisgICBiZWxvdyBhcmUgZGVmaW5lZCBpbiB0aGUgc3VwcGxpZWQgZGljdGlvbmFyeSwgdGhvc2UgZGVmaW5pdGlvbnMgYXJlCisgICBvdmVycmlkZGVuIGJ5IDpmdW5jOmBydW5fcGF0aGAuCisKKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fZmlsZV9fYGAsIGBgX19sb2FkZXJfX2BgCisgICBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZQorICAgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYSBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlcgorICAgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbiBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgorCisgICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBub3QKKyAgIDpjb25zdDpgTm9uZWAgYW5kIHRvIGBgJzxydW5fcGF0aD4nYGAgb3RoZXJ3aXNlLgorCisgICBgYF9fZmlsZV9fYGAgaXMgc2V0IHRvIHRoZSBuYW1lIHByb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgbG9hZGVyLiBJZiB0aGUKKyAgIGxvYWRlciBkb2VzIG5vdCBtYWtlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBpcyBzZXQKKyAgIHRvIDpjb25zdDpgTm9uZWAuIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gYGBmaWxlX3BhdGhgYC4KKworICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKKyAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAorICAgaW1wb3J0IG1lY2hhbmlzbSkuIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KKworICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byBgYF9fbmFtZV9fLnJwYXJ0aXRpb24oJy4nKVswXWBgLgorCisgICBBIG51bWJlciBvZiBhbHRlcmF0aW9ucyBhcmUgYWxzbyBtYWRlIHRvIHRoZSA6bW9kOmBzeXNgIG1vZHVsZS4gRmlyc3RseSwKKyAgIGBgc3lzLnBhdGhgYCBtYXkgYmUgYWx0ZXJlZCBhcyBkZXNjcmliZWQgYWJvdmUuIGBgc3lzLmFyZ3ZbMF1gYCBpcyB1cGRhdGVkCisgICB3aXRoIHRoZSB2YWx1ZSBvZiBgYGZpbGVfcGF0aGBgIGFuZCBgYHN5cy5tb2R1bGVzW19fbmFtZV9fXWBgIGlzIHVwZGF0ZWQKKyAgIHdpdGggYSB0ZW1wb3JhcnkgbW9kdWxlIG9iamVjdCBmb3IgdGhlIG1vZHVsZSBiZWluZyBleGVjdXRlZC4gQWxsCisgICBtb2RpZmljYXRpb25zIHRvIGl0ZW1zIGluIDptb2Q6YHN5c2AgYXJlIHJldmVydGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24KKyAgIHJldHVybnMuCisKKyAgIE5vdGUgdGhhdCwgdW5saWtlIDpmdW5jOmBydW5fbW9kdWxlYCwgdGhlIGFsdGVyYXRpb25zIG1hZGUgdG8gOm1vZDpgc3lzYAorICAgYXJlIG5vdCBvcHRpb25hbCBpbiB0aGlzIGZ1bmN0aW9uIGFzIHRoZXNlIGFkanVzdG1lbnRzIGFyZSBlc3NlbnRpYWwgdG8KKyAgIGFsbG93aW5nIHRoZSBleGVjdXRpb24gb2Ygc3lzLnBhdGggZW50cmllcy4gQXMgdGhlIHRocmVhZC1zYWZldHkKKyAgIGxpbWl0YXRpb25zIHN0aWxsIGFwcGx5LCB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aHJlYWRlZCBjb2RlIHNob3VsZCBiZQorICAgZWl0aGVyIHNlcmlhbGlzZWQgd2l0aCB0aGUgaW1wb3J0IGxvY2sgb3IgZGVsZWdhdGVkIHRvIGEgc2VwYXJhdGUgcHJvY2Vzcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIC4uIHNlZWFsc286OgogCiAgICA6cGVwOmAzMzhgIC0gRXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cwotICAgICAgUEVQIHdyaXR0ZW4gYW5kICBpbXBsZW1lbnRlZCBieSBOaWNrIENvZ2hsYW4uCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgogCisgICA6cGVwOmAzNjZgIC0gTWFpbiBtb2R1bGUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IE5pY2sgQ29naGxhbi4KKworICAgOnJlZjpgdXNpbmctb24tZ2VuZXJhbGAgLSBDUHl0aG9uIGNvbW1hbmQgbGluZSBkZXRhaWxzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zY2hlZC5yc3QgYi9Eb2MvbGlicmFyeS9zY2hlZC5yc3QKaW5kZXggNTFiOWQzZi4uMWVmZTQ3YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2NoZWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NjaGVkLnJzdApAQCAtMTAsNiArMTAsMTAgQEAKIFRoZSA6bW9kOmBzY2hlZGAgbW9kdWxlIGRlZmluZXMgYSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50CiBzY2hlZHVsZXI6CiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHNjaGVkIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9zY2hlZC5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBjbGFzczo6IHNjaGVkdWxlcih0aW1lZnVuYywgZGVsYXlmdW5jKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAppbmRleCAwMzQ3NTZlLi4yZTA4Yjc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKQEAgLTEwMCw2ICsxMDAsMTUgQEAKICAgICAgIGxpYnJhcnksIGFuZCBkb2VzIG5vdCBoYW5kbGUgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGRvbid0IG9yaWdpbmF0ZSBmcm9tCiAgICAgICBXaW5Tb2NrLgogCisuLiBhdHRyaWJ1dGU6OiBzZWxlY3QuUElQRV9CVUYKKworICAgRmlsZXMgcmVwb3J0ZWQgYXMgcmVhZHkgZm9yIHdyaXRpbmcgYnkgOmZ1bmM6YHNlbGVjdGAsIDpmdW5jOmBwb2xsYCBvcgorICAgc2ltaWxhciBpbnRlcmZhY2VzIGluIHRoaXMgbW9kdWxlIGFyZSBndWFyYW50ZWVkIHRvIG5vdCBibG9jayBvbiBhIHdyaXRlCisgICBvZiB1cCB0byA6Y29uc3Q6YFBJUEVfQlVGYCBieXRlcy4KKyAgIFRoaXMgdmFsdWUgaXMgZ3VhcmFudGVlZCBieSBQT1NJWCB0byBiZSBhdCBsZWFzdCA1MTIuICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAKIC4uIF9lcG9sbC1vYmplY3RzOgogCkBAIC0xMjksMTUgKzEzOCwxNSBAQAogICAgfCA6Y29uc3Q6YEVQT0xMT05FU0hPVGAgfCBTZXQgb25lLXNob3QgYmVoYXZpb3IuIEFmdGVyIG9uZSBldmVudCBpcyAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxsZWQgb3V0LCB0aGUgZmQgaXMgaW50ZXJuYWxseSBkaXNhYmxlZCAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YEVQT0xMUkROT1JNYCAgfCA/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCA6Y29uc3Q6YEVQT0xMUkROT1JNYCAgfCBFcXVpdmFsZW50IHRvIDpjb25zdDpgRVBPTExJTmAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YEVQT0xMUkRCQU5EYCAgfCA/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCA6Y29uc3Q6YEVQT0xMUkRCQU5EYCAgfCBQcmlvcml0eSBkYXRhIGJhbmQgY2FuIGJlIHJlYWQuICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YEVQT0xMV1JOT1JNYCAgfCA/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCA6Y29uc3Q6YEVQT0xMV1JOT1JNYCAgfCBFcXVpdmFsZW50IHRvIDpjb25zdDpgRVBPTExPVVRgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YEVQT0xMV1JCQU5EYCAgfCA/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCA6Y29uc3Q6YEVQT0xMV1JCQU5EYCAgfCBQcmlvcml0eSBkYXRhIG1heSBiZSB3cml0dGVuLiAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YEVQT0xMTVNHYCAgICAgfCA/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCA6Y29uc3Q6YEVQT0xMTVNHYCAgICAgfCBJZ25vcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAKQEAgLTIzMSw3ICsyNDAsNyBAQAogLi4gbWV0aG9kOjogcG9sbC5tb2RpZnkoZmQsIGV2ZW50bWFzaykKIAogICAgTW9kaWZpZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZkLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKLSAgIDptZXRoOmByZWdpc3RlcihmZCwgZXZlbnRtYXNrKWAuICBBdHRlbXB0aW5nIHRvIG1vZGlmeSBhIGZpbGUgZGVzY3JpcHRvcgorICAgYGByZWdpc3RlcihmZCwgZXZlbnRtYXNrKWBgLiAgQXR0ZW1wdGluZyB0byBtb2RpZnkgYSBmaWxlIGRlc2NyaXB0b3IKICAgIHRoYXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgY2F1c2VzIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiB3aXRoIGVycm5vCiAgICA6Y29uc3Q6YEVOT0VOVGAgdG8gYmUgcmFpc2VkLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZXRzLnJzdCBiL0RvYy9saWJyYXJ5L3NldHMucnN0CmluZGV4IDQ3YjJkNzYuLjdiZDI5MzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NldHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NldHMucnN0CkBAIC0xNCw3ICsxNCw3IEBACiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAogLi4gZGVwcmVjYXRlZDo6IDIuNgotICAgVGhlIGJ1aWx0LWluIGBgc2V0YGAvYGBmcm96ZW5zZXRgYCB0eXBlcyByZXBsYWNlIHRoaXMgbW9kdWxlLgorICAgVGhlIGJ1aWx0LWluIDpjbGFzczpgc2V0YC86Y2xhc3M6YGZyb3plbnNldGAgdHlwZXMgcmVwbGFjZSB0aGlzIG1vZHVsZS4KIAogVGhlIDptb2Q6YHNldHNgIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGZvciBjb25zdHJ1Y3RpbmcgYW5kIG1hbmlwdWxhdGluZwogdW5vcmRlcmVkIGNvbGxlY3Rpb25zIG9mIHVuaXF1ZSBlbGVtZW50cy4gIENvbW1vbiB1c2VzIGluY2x1ZGUgbWVtYmVyc2hpcApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdCBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKaW5kZXggYzBiY2I4MC4uNGYyZDk0YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CkBAIC0xMyw2ICsxMywxMCBAQAogVGhpcyBpbmNsdWRlcyBtb3N0IGNsYXNzIGluc3RhbmNlcywgcmVjdXJzaXZlIGRhdGEgdHlwZXMsIGFuZCBvYmplY3RzIGNvbnRhaW5pbmcKIGxvdHMgb2Ygc2hhcmVkICBzdWItb2JqZWN0cy4gIFRoZSBrZXlzIGFyZSBvcmRpbmFyeSBzdHJpbmdzLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGBzaGVsdmUgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3NoZWx2ZS5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWVbLCBmbGFnPSdjJ1ssIHByb3RvY29sPU5vbmVbLCB3cml0ZWJhY2s9RmFsc2VdXV0pCiAKQEAgLTQ2LDYgKzUwLDExIEBACiAgICAgICA6bWV0aDpgY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IgdXNlIGEKICAgICAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2l0aCA6ZnVuYzpgY29udGV4dGxpYi5jbG9zaW5nYC4KIAorLi4gd2FybmluZzo6CisKKyAgIEJlY2F1c2UgdGhlIDptb2Q6YHNoZWx2ZWAgbW9kdWxlIGlzIGJhY2tlZCBieSA6bW9kOmBwaWNrbGVgLCBpdCBpcyBpbnNlY3VyZQorICAgdG8gbG9hZCBhIHNoZWxmIGZyb20gYW4gdW50cnVzdGVkIHNvdXJjZS4gIExpa2Ugd2l0aCBwaWNrbGUsIGxvYWRpbmcgYSBzaGVsZgorICAgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUuCiAKIFNoZWxmIG9iamVjdHMgc3VwcG9ydCBhbGwgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgZGljdGlvbmFyaWVzLiAgVGhpcyBlYXNlcyB0aGUKIHRyYW5zaXRpb24gZnJvbSBkaWN0aW9uYXJ5IGJhc2VkIHNjcmlwdHMgdG8gdGhvc2UgcmVxdWlyaW5nIHBlcnNpc3RlbnQgc3RvcmFnZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CmluZGV4IGFkM2FiNTcuLjFiMTYwZDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdApAQCAtMTYsNiArMTYsMTEgQEAKIGNvcHlpbmcgYW5kIHJlbW92YWwuIEZvciBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgZmlsZXMsIHNlZSBhbHNvIHRoZQogOm1vZDpgb3NgIG1vZHVsZS4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgc2h1dGlsIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi9zaHV0aWwucHk/dmlldz1tYXJrdXA+YF8KKwogLi4gd2FybmluZzo6CiAKICAgIEV2ZW4gdGhlIGhpZ2hlci1sZXZlbCBmaWxlIGNvcHlpbmcgZnVuY3Rpb25zICg6ZnVuYzpgY29weWAsIDpmdW5jOmBjb3B5MmApCkBAIC0yOCw2ICszMyw5IEBACiAgICBhcmUgbm90IGNvcGllZC4KIAogCitEaXJlY3RvcnkgYW5kIGZpbGVzIG9wZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAuLiBmdW5jdGlvbjo6IGNvcHlmaWxlb2JqKGZzcmMsIGZkc3RbLCBsZW5ndGhdKQogCiAgICBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS1saWtlIG9iamVjdCAqZnNyYyogdG8gdGhlIGZpbGUtbGlrZSBvYmplY3QgKmZkc3QqLgpAQCAtMTY5LDExICsxNzcsMTAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4zCiAKLQogLi4gX3NodXRpbC1leGFtcGxlOgogCi1FeGFtcGxlCi0tLS0tLS0tCitjb3B5dHJlZSBleGFtcGxlCis6Ojo6Ojo6Ojo6Ojo6Ojo6CiAKIFRoaXMgZXhhbXBsZSBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIDpmdW5jOmBjb3B5dHJlZWAgZnVuY3Rpb24sIGRlc2NyaWJlZAogYWJvdmUsIHdpdGggdGhlIGRvY3N0cmluZyBvbWl0dGVkLiAgSXQgZGVtb25zdHJhdGVzIG1hbnkgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucwpAQCAtMjM4LDMgKzI0NSw5NiBAQAogCiAgICBjb3B5dHJlZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBpZ25vcmU9X2xvZ3BhdGgpCiAKKworQXJjaGl2ZXMgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgW3Jvb3RfZGlyLCBbYmFzZV9kaXIsIFt2ZXJib3NlLCBbZHJ5X3J1biwgW293bmVyLCBbZ3JvdXAsIFtsb2dnZXJdXV1dXV1dKQorCisgICBDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChlZy4gemlwIG9yIHRhcikgYW5kIHJldHVybnMgaXRzIG5hbWUuCisKKyAgICpiYXNlX25hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgaW5jbHVkaW5nIHRoZSBwYXRoLCBtaW51cworICAgYW55IGZvcm1hdC1zcGVjaWZpYyBleHRlbnNpb24uICpmb3JtYXQqIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mCisgICAiemlwIiwgInRhciIsICJienRhciIgb3IgImd6dGFyIi4KKworICAgKnJvb3RfZGlyKiBpcyBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQorICAgYXJjaGl2ZTsgaWUuIHdlIHR5cGljYWxseSBjaGRpciBpbnRvICpyb290X2RpciogYmVmb3JlIGNyZWF0aW5nIHRoZQorICAgYXJjaGl2ZS4KKworICAgKmJhc2VfZGlyKiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIHN0YXJ0IGFyY2hpdmluZyBmcm9tOworICAgaWUuICpiYXNlX2Rpciogd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCisgICBkaXJlY3RvcmllcyBpbiB0aGUgYXJjaGl2ZS4KKworICAgKnJvb3RfZGlyKiBhbmQgKmJhc2VfZGlyKiBib3RoIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAqb3duZXIqIGFuZCAqZ3JvdXAqIGFyZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgYXJjaGl2ZS4gQnkgZGVmYXVsdCwKKyAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisuLiBmdW5jdGlvbjo6IGdldF9hcmNoaXZlX2Zvcm1hdHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgYXJjaGl2aW5nLgorICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlIGBgKG5hbWUsIGRlc2NyaXB0aW9uKWBgCisKKyAgIEJ5IGRlZmF1bHQgOm1vZDpgc2h1dGlsYCBwcm92aWRlcyB0aGVzZSBmb3JtYXRzOgorCisgICAtICpnenRhcio6IGd6aXAnZWQgdGFyLWZpbGUKKyAgIC0gKmJ6dGFyKjogYnppcDInZWQgdGFyLWZpbGUKKyAgIC0gKnRhcio6IHVuY29tcHJlc3NlZCB0YXIgZmlsZQorICAgLSAqemlwKjogWklQIGZpbGUKKworICAgWW91IGNhbiByZWdpc3RlciBuZXcgZm9ybWF0cyBvciBwcm92aWRlIHlvdXIgb3duIGFyY2hpdmVyIGZvciBhbnkgZXhpc3RpbmcKKyAgIGZvcm1hdHMsIGJ5IHVzaW5nIDpmdW5jOmByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQobmFtZSwgZnVuY3Rpb24sIFtleHRyYV9hcmdzLCBbZGVzY3JpcHRpb25dXSkKKworICAgUmVnaXN0ZXJzIGFuIGFyY2hpdmVyIGZvciB0aGUgZm9ybWF0ICpuYW1lKi4gKmZ1bmN0aW9uKiBpcyBhIGNhbGxhYmxlIHRoYXQKKyAgIHdpbGwgYmUgdXNlZCB0byBpbnZva2UgdGhlIGFyY2hpdmVyLgorCisgICBJZiBnaXZlbiwgKmV4dHJhX2FyZ3MqIGlzIGEgc2VxdWVuY2Ugb2YgYGAobmFtZSwgdmFsdWUpYGAgdGhhdCB3aWxsIGJlCisgICB1c2VkIGFzIGV4dHJhIGtleXdvcmRzIGFyZ3VtZW50cyB3aGVuIHRoZSBhcmNoaXZlciBjYWxsYWJsZSBpcyB1c2VkLgorCisgICAqZGVzY3JpcHRpb24qIGlzIHVzZWQgYnkgOmZ1bmM6YGdldF9hcmNoaXZlX2Zvcm1hdHNgIHdoaWNoIHJldHVybnMgdGhlCisgICBsaXN0IG9mIGFyY2hpdmVycy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgbGlzdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiAgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lKQorCisgICBSZW1vdmUgdGhlIGFyY2hpdmUgZm9ybWF0ICpuYW1lKiBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCitBcmNoaXZpbmcgZXhhbXBsZQorOjo6Ojo6Ojo6Ojo6Ojo6OjoKKworSW4gdGhpcyBleGFtcGxlLCB3ZSBjcmVhdGUgYSBnemlwJ2VkIHRhci1maWxlIGFyY2hpdmUgY29udGFpbmluZyBhbGwgZmlsZXMKK2ZvdW5kIGluIHRoZSA6ZmlsZTpgLnNzaGAgZGlyZWN0b3J5IG9mIHRoZSB1c2VyOjoKKworICAgID4+PiBmcm9tIHNodXRpbCBpbXBvcnQgbWFrZV9hcmNoaXZlCisgICAgPj4+IGltcG9ydCBvcworICAgID4+PiBhcmNoaXZlX25hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCd+JywgJ215YXJjaGl2ZScpKQorICAgID4+PiByb290X2RpciA9IG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34nLCAnLnNzaCcpKQorICAgID4+PiBtYWtlX2FyY2hpdmUoYXJjaGl2ZV9uYW1lLCAnZ3p0YXInLCByb290X2RpcikKKyAgICAnL1VzZXJzL3RhcmVrL215YXJjaGl2ZS50YXIuZ3onCisKK1RoZSByZXN1bHRpbmcgYXJjaGl2ZSBjb250YWluczo6CisKKyAgICAkIHRhciAtdHp2ZiAvVXNlcnMvdGFyZWsvbXlhcmNoaXZlLnRhci5negorICAgIGRyd3gtLS0tLS0gdGFyZWsvc3RhZmYgICAgICAgMCAyMDEwLTAyLTAxIDE2OjIzOjQwIC4vCisgICAgLXJ3LXItLXItLSB0YXJlay9zdGFmZiAgICAgNjA5IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9hdXRob3JpemVkX2tleXMKKyAgICAtcnd4ci14ci14IHRhcmVrL3N0YWZmICAgICAgNjUgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2NvbmZpZworICAgIC1yd3gtLS0tLS0gdGFyZWsvc3RhZmYgICAgIDY2OCAyMDA4LTA2LTA5IDEzOjI2OjU0IC4vaWRfZHNhCisgICAgLXJ3eHIteHIteCB0YXJlay9zdGFmZiAgICAgNjA5IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9pZF9kc2EucHViCisgICAgLXJ3LS0tLS0tLSB0YXJlay9zdGFmZiAgICAxNjc1IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9pZF9yc2EKKyAgICAtcnctci0tci0tIHRhcmVrL3N0YWZmICAgICAzOTcgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2lkX3JzYS5wdWIKKyAgICAtcnctci0tci0tIHRhcmVrL3N0YWZmICAgMzcxOTIgMjAxMC0wMi0wNiAxODoyMzoxMCAuL2tub3duX2hvc3RzCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdCBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKaW5kZXggODRmMDhiMy4uNzRmZjc4ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaWduYWwucnN0CkBAIC03NSw2ICs3NSwyNiBAQAogICAgdGhlIHN5c3RlbSBhcmUgZGVmaW5lZCBieSB0aGlzIG1vZHVsZS4KIAogCisuLiBkYXRhOjogQ1RSTF9DX0VWRU5UCisKKyAgIFRoZSBzaWduYWwgY29ycmVzcG9uZGluZyB0byB0aGUgQ1RSTCtDIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCisgICBvbmx5IGJlIHVzZWQgd2l0aCA6ZnVuYzpgb3Mua2lsbGAuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZGF0YTo6IENUUkxfQlJFQUtfRVZFTlQKKworICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0JSRUFLIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCisgICBvbmx5IGJlIHVzZWQgd2l0aCA6ZnVuYzpgb3Mua2lsbGAuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZGF0YTo6IE5TSUcKIAogICAgT25lIG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHNpZ25hbCBudW1iZXIuCkBAIC0yMTYsNiArMjM2LDEwIEBACiAgICBzZWUgdGhlIDpyZWY6YGRlc2NyaXB0aW9uIGluIHRoZSB0eXBlIGhpZXJhcmNoeSA8ZnJhbWUtb2JqZWN0cz5gIG9yIHNlZSB0aGUKICAgIGF0dHJpYnV0ZSBkZXNjcmlwdGlvbnMgaW4gdGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSkuCiAKKyAgIE9uIFdpbmRvd3MsIDpmdW5jOmBzaWduYWxgIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIDpjb25zdDpgU0lHQUJSVGAsCisgICA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHSUxMYCwgOmNvbnN0OmBTSUdJTlRgLCA6Y29uc3Q6YFNJR1NFR1ZgLCBvcgorICAgOmNvbnN0OmBTSUdURVJNYC4gQSA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpbiBhbnkgb3RoZXIgY2FzZS4KKwogCiAuLiBfc2lnbmFsLWV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpbXBsZWh0dHBzZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5yc3QKaW5kZXggZWNiOTM0MC4uYTkyYzdjOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2ltcGxlaHR0cHNlcnZlci5yc3QKQEAgLTgyLDM0ICs4MiwzNSBAQAogICAgICAgYGB0ZXh0L2BgIHRoZSBmaWxlIGlzIG9wZW5lZCBpbiB0ZXh0IG1vZGU7IG90aGVyd2lzZSBiaW5hcnkgbW9kZSBpcyB1c2VkLgogCiAgICAgICBUaGUgOmZ1bmM6YHRlc3RgIGZ1bmN0aW9uIGluIHRoZSA6bW9kOmBTaW1wbGVIVFRQU2VydmVyYCBtb2R1bGUgaXMgYW4KLSAgICAgIGV4YW1wbGUgd2hpY2ggY3JlYXRlcyBhIHNlcnZlciB1c2luZyB0aGUKLSAgICAgIDpjbGFzczpgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyYCBhcyB0aGUgSGFuZGxlci4KKyAgICAgIGV4YW1wbGUgd2hpY2ggY3JlYXRlcyBhIHNlcnZlciB1c2luZyB0aGUgOmNsYXNzOmBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgCisgICAgICBhcyB0aGUgSGFuZGxlci4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAgICAgICAgICBUaGUgYGAnTGFzdC1Nb2RpZmllZCdgYCBoZWFkZXIuCiAKIAotVGhlIDptb2Q6YFNpbXBsZUhUVFBTZXJ2ZXJgIG1vZHVsZSBjYW4gYmUgdXNlZCB0aGUgZm9sbG93aW5nIG1hbm5lciBpbiBvcmRlciB0bwotc2V0IHVwIGEgdmVyeSBiYXNpYyB3ZWIgc2VydmVyIHNlcnZpbmcgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKLWRpcmVjdG9yeS46OgorVGhlIDptb2Q6YFNpbXBsZUhUVFBTZXJ2ZXJgIG1vZHVsZSBjYW4gYmUgdXNlZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lciBpbiBvcmRlcgordG8gc2V0IHVwIGEgdmVyeSBiYXNpYyB3ZWIgc2VydmVyIHNlcnZpbmcgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeS4gOjoKIAotICAgICAgICBpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgotICAgICAgICBpbXBvcnQgU29ja2V0U2VydmVyCisgICBpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgorICAgaW1wb3J0IFNvY2tldFNlcnZlcgogCi0gICAgICAgIFBPUlQgPSA4MDAwCisgICBQT1JUID0gODAwMAogCi0gICAgICAgIEhhbmRsZXIgPSBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorICAgSGFuZGxlciA9IFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCiAKLSAgICAgICAgaHR0cGQgPSBTb2NrZXRTZXJ2ZXIuVENQU2VydmVyKCgiIiwgUE9SVCksIEhhbmRsZXIpCisgICBodHRwZCA9IFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIoKCIiLCBQT1JUKSwgSGFuZGxlcikKIAotICAgICAgICBwcmludCAic2VydmluZyBhdCBwb3J0IiwgUE9SVAotICAgICAgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkKKyAgIHByaW50ICJzZXJ2aW5nIGF0IHBvcnQiLCBQT1JUCisgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkKIAotOm1vZDpgU2ltcGxlSFRUUFNlcnZlcmAgbW9kdWxlIGNhbiBhbHNvIGJlIGludm9rZWQgZGlyZWN0bHkgdXNpbmcgdGhlIGBgLW1gYAotc3dpdGNoIG9mIGludGVycHJldGVyIHdpdGggYSBgYHBvcnQgbnVtYmVyYGAgYXJndW1lbnQuIFNpbWlsYXIgdG8gcHJldmlvdXMKLWV4YW1wbGUsIHRoaXMgc2VydmVzIHRoZSBmaWxlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuOjoKK1RoZSA6bW9kOmBTaW1wbGVIVFRQU2VydmVyYCBtb2R1bGUgY2FuIGFsc28gYmUgaW52b2tlZCBkaXJlY3RseSB1c2luZyB0aGUKKzpvcHRpb246YC1tYCBzd2l0Y2ggb2YgdGhlIGludGVycHJldGVyIHdpdGggYSBgYHBvcnQgbnVtYmVyYGAgYXJndW1lbnQuCitTaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGlzIHNlcnZlcyB0aGUgZmlsZXMgcmVsYXRpdmUgdG8gdGhlCitjdXJyZW50IGRpcmVjdG9yeS4gOjoKIAotICAgICAgICBweXRob24gLW0gU2ltcGxlSFRUUFNlcnZlciA4MDAwCisgICBweXRob24gLW0gU2ltcGxlSFRUUFNlcnZlciA4MDAwCiAKIC4uIHNlZWFsc286OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvc2ltcGxleG1scnBjc2VydmVyLnJzdAppbmRleCA3Y2JiNWYwLi5jMDgxOWJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaW1wbGV4bWxycGNzZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpbXBsZXhtbHJwY3NlcnZlci5yc3QKQEAgLTEzMyw2ICsxMzMsMTUgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKKy4uIGF0dHJpYnV0ZTo6IFNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQKKworICAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IGBgTm9uZWBgLCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZQorICAgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIHRoZSAqZ3ppcCogdHJhbnNmZXIgZW5jb2RpbmcsIGlmIHBlcm1pdHRlZCBieQorICAgdGhlIGNsaWVudC4gIFRoZSBkZWZhdWx0IGlzIGBgMTQwMGBgIHdoaWNoIGNvcnJlc3BvbmRzIHJvdWdobHkKKyAgIHRvIGEgc2luZ2xlIFRDUCBwYWNrZXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAuLiBfc2ltcGxleG1scnBjc2VydmVyLWV4YW1wbGU6CiAKIFNpbXBsZVhNTFJQQ1NlcnZlciBFeGFtcGxlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaXRlLnJzdCBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CmluZGV4IDY5MmQwNzcuLjZhZDE1NmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NpdGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CkBAIC0xMzEsNiArMTMxLDMyIEBACiAKICAgIEFkZHMgYSBkaXJlY3RvcnkgdG8gc3lzLnBhdGggYW5kIHByb2Nlc3NlcyBpdHMgcHRoIGZpbGVzLgogCisuLiBmdW5jdGlvbjo6IGdldHNpdGVwYWNrYWdlcygpCisKKyAgIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgYWxsIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzCisgICAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKy4uIGZ1bmN0aW9uOjogZ2V0dXNlcmJhc2UoKQorCisgICBSZXR1cm5zIHRoZSAidXNlciBiYXNlIiBkaXJlY3RvcnkgcGF0aC4KKworICAgVGhlICJ1c2VyIGJhc2UiIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byBzdG9yZSBkYXRhLiBJZiB0aGUgZ2xvYmFsCisgICB2YXJpYWJsZSBgYFVTRVJfQkFTRWBgIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHNldAorICAgaXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisuLiBmdW5jdGlvbjo6IGdldHVzZXJzaXRlcGFja2FnZXMoKQorCisgICBSZXR1cm5zIHRoZSB1c2VyLXNwZWNpZmljIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5IHBhdGguCisKKyAgIElmIHRoZSBnbG9iYWwgdmFyaWFibGUgYGBVU0VSX1NJVEVgYCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGlzCisgICBmdW5jdGlvbiB3aWxsIGFsc28gc2V0IGl0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogLi4gWFhYIFVwZGF0ZSBkb2N1bWVudGF0aW9uCiAuLiBYWFggZG9jdW1lbnQgcHl0aG9uIC1tIHNpdGUgLS11c2VyLWJhc2UgLS11c2VyLXNpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAppbmRleCBjOGY0ZWQxLi5kNTllYmY3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdApAQCAtNDgsOCArNDgsNyBAQAogICAgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nCiAgICB3aWxsIGJlIHVzZWQpLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNgotICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCiAKIC4uIGNsYXNzOjogTE1UUChbaG9zdFssIHBvcnRbLCBsb2NhbF9ob3N0bmFtZV1dXSkKQEAgLTI5OCw5ICsyOTcsOSBAQAogICAgYW5kIEVTTVRQIG9wdGlvbnMgc3VwcHJlc3NlZC4KIAogICAgVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gbm9ybWFsbHkgaWYgdGhlIG1haWwgaXMgYWNjZXB0ZWQgZm9yIGF0IGxlYXN0IG9uZQotICAgcmVjaXBpZW50LiBPdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uICBUaGF0IGlzLCBpZiB0aGlzIG1ldGhvZCBkb2VzCi0gICBub3QgdGhyb3cgYW4gZXhjZXB0aW9uLCB0aGVuIHNvbWVvbmUgc2hvdWxkIGdldCB5b3VyIG1haWwuIElmIHRoaXMgbWV0aG9kIGRvZXMKLSAgIG5vdCB0aHJvdyBhbiBleGNlcHRpb24sIGl0IHJldHVybnMgYSBkaWN0aW9uYXJ5LCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaAorICAgcmVjaXBpZW50LiBPdGhlcndpc2UgaXQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uICBUaGF0IGlzLCBpZiB0aGlzIG1ldGhvZCBkb2VzCisgICBub3QgcmFpc2UgYW4gZXhjZXB0aW9uLCB0aGVuIHNvbWVvbmUgc2hvdWxkIGdldCB5b3VyIG1haWwuIElmIHRoaXMgbWV0aG9kIGRvZXMKKyAgIG5vdCByYWlzZSBhbiBleGNlcHRpb24sIGl0IHJldHVybnMgYSBkaWN0aW9uYXJ5LCB3aXRoIG9uZSBlbnRyeSBmb3IgZWFjaAogICAgcmVjaXBpZW50IHRoYXQgd2FzIHJlZnVzZWQuICBFYWNoIGVudHJ5IGNvbnRhaW5zIGEgdHVwbGUgb2YgdGhlIFNNVFAgZXJyb3IgY29kZQogICAgYW5kIHRoZSBhY2NvbXBhbnlpbmcgZXJyb3IgbWVzc2FnZSBzZW50IGJ5IHRoZSBzZXJ2ZXIuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IDdmZTA3YmUuLjk2MTUyZjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtMjA1LDcgKzIwNSw3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAogCi0uLiBmdW5jdGlvbjo6IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3NbLCB0aW1lb3V0XSkKKy4uIGZ1bmN0aW9uOjogY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzc1ssIHRpbWVvdXRbLCBzb3VyY2VfYWRkcmVzc11dKQogCiAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4gIENvbm5lY3QgdG8gKmFkZHJlc3MqIChhIDItdHVwbGUgYGAoaG9zdCwgcG9ydClgYCksCiAgICBhbmQgcmV0dXJuIHRoZSBzb2NrZXQgb2JqZWN0LiAgUGFzc2luZyB0aGUgb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlciB3aWxsCkBAIC0yMTMsOCArMjEzLDE1IEBACiAgICAqdGltZW91dCogaXMgc3VwcGxpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcgcmV0dXJuZWQgYnkKICAgIDpmdW5jOmBnZXRkZWZhdWx0dGltZW91dGAgaXMgdXNlZC4KIAorICAgSWYgc3VwcGxpZWQsICpzb3VyY2VfYWRkcmVzcyogbXVzdCBiZSBhIDItdHVwbGUgYGAoaG9zdCwgcG9ydClgYCBmb3IgdGhlCisgICBzb2NrZXQgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3RpbmcuICBJZiBob3N0IG9yIHBvcnQKKyAgIGFyZSAnJyBvciAwIHJlc3BlY3RpdmVseSB0aGUgT1MgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIHVzZWQuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9MCwgc29ja3R5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCkKIApAQCAtNTA4LDYgKzUxNSw5IEBACiAgICBNb2R1bGUgOm1vZDpgU29ja2V0U2VydmVyYAogICAgICAgQ2xhc3NlcyB0aGF0IHNpbXBsaWZ5IHdyaXRpbmcgbmV0d29yayBzZXJ2ZXJzLgogCisgICBNb2R1bGUgOm1vZDpgc3NsYAorICAgICAgQSBUTFMvU1NMIHdyYXBwZXIgZm9yIHNvY2tldCBvYmplY3RzLgorCiAKIC4uIF9zb2NrZXQtb2JqZWN0czoKIApAQCAtNTQ0LDYgKzU1NCwxMiBAQAogICAgcmVtb3RlIGVuZCB3aWxsIHJlY2VpdmUgbm8gbW9yZSBkYXRhIChhZnRlciBxdWV1ZWQgZGF0YSBpcyBmbHVzaGVkKS4gU29ja2V0cyBhcmUKICAgIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhleSBhcmUgZ2FyYmFnZS1jb2xsZWN0ZWQuCiAKKyAgIC4uIG5vdGU6OgorICAgICAgOm1ldGg6YGNsb3NlKClgIHJlbGVhc2VzIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYSBjb25uZWN0aW9uIGJ1dAorICAgICAgZG9lcyBub3QgbmVjZXNzYXJpbHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkuICBJZiB5b3Ugd2FudAorICAgICAgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gaW4gYSB0aW1lbHkgZmFzaGlvbiwgY2FsbCA6bWV0aDpgc2h1dGRvd24oKWAKKyAgICAgIGJlZm9yZSA6bWV0aDpgY2xvc2UoKWAuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKIApAQCAtNjQ0LDYgKzY2MCwxMiBAQAogICAgKm1vZGUqIGFuZCAqYnVmc2l6ZSogYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCB0aGUgc2FtZSB3YXkgYXMgYnkgdGhlIGJ1aWx0LWluCiAgICA6ZnVuYzpgZmlsZWAgZnVuY3Rpb24uCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBPbiBXaW5kb3dzLCB0aGUgZmlsZS1saWtlIG9iamVjdCBjcmVhdGVkIGJ5IDptZXRoOmBtYWtlZmlsZWAgY2Fubm90IGJlCisgICAgICB1c2VkIHdoZXJlIGEgZmlsZSBvYmplY3Qgd2l0aCBhIGZpbGUgZGVzY3JpcHRvciBpcyBleHBlY3RlZCwgc3VjaCBhcyB0aGUKKyAgICAgIHN0cmVhbSBhcmd1bWVudHMgb2YgOm1ldGg6YHN1YnByb2Nlc3MuUG9wZW5gLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5yZWN2KGJ1ZnNpemVbLCBmbGFnc10pCiAKQEAgLTczMyw3ICs3NTUsNyBAQAogCiAgICBTZXQgYSB0aW1lb3V0IG9uIGJsb2NraW5nIHNvY2tldCBvcGVyYXRpb25zLiAgVGhlICp2YWx1ZSogYXJndW1lbnQgY2FuIGJlIGEKICAgIG5vbm5lZ2F0aXZlIGZsb2F0IGV4cHJlc3Npbmcgc2Vjb25kcywgb3IgYGBOb25lYGAuIElmIGEgZmxvYXQgaXMgZ2l2ZW4sCi0gICBzdWJzZXF1ZW50IHNvY2tldCBvcGVyYXRpb25zIHdpbGwgcmFpc2UgYW4gOmV4YzpgdGltZW91dGAgZXhjZXB0aW9uIGlmIHRoZQorICAgc3Vic2VxdWVudCBzb2NrZXQgb3BlcmF0aW9ucyB3aWxsIHJhaXNlIGEgOmV4YzpgdGltZW91dGAgZXhjZXB0aW9uIGlmIHRoZQogICAgdGltZW91dCBwZXJpb2QgKnZhbHVlKiBoYXMgZWxhcHNlZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLiAgU2V0dGluZwogICAgYSB0aW1lb3V0IG9mIGBgTm9uZWBgIGRpc2FibGVzIHRpbWVvdXRzIG9uIHNvY2tldCBvcGVyYXRpb25zLgogICAgYGBzLnNldHRpbWVvdXQoMC4wKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBzLnNldGJsb2NraW5nKDApYGA7CkBAIC03OTEsNyArODEzLDkgQEAKICAgIFNodXQgZG93biBvbmUgb3IgYm90aCBoYWx2ZXMgb2YgdGhlIGNvbm5lY3Rpb24uICBJZiAqaG93KiBpcyA6Y29uc3Q6YFNIVVRfUkRgLAogICAgZnVydGhlciByZWNlaXZlcyBhcmUgZGlzYWxsb3dlZC4gIElmICpob3cqIGlzIDpjb25zdDpgU0hVVF9XUmAsIGZ1cnRoZXIgc2VuZHMKICAgIGFyZSBkaXNhbGxvd2VkLiAgSWYgKmhvdyogaXMgOmNvbnN0OmBTSFVUX1JEV1JgLCBmdXJ0aGVyIHNlbmRzIGFuZCByZWNlaXZlcyBhcmUKLSAgIGRpc2FsbG93ZWQuCisgICBkaXNhbGxvd2VkLiAgRGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSwgc2h1dHRpbmcgZG93biBvbmUgaGFsZiBvZiB0aGUgY29ubmVjdGlvbgorICAgY2FuIGFsc28gY2xvc2UgdGhlIG9wcG9zaXRlIGhhbGYgKGUuZy4gb24gTWFjIE9TIFgsIGBgc2h1dGRvd24oU0hVVF9XUilgYCBkb2VzCisgICBub3QgYWxsb3cgZnVydGhlciByZWFkcyBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uKS4KIAogTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBtZXRob2RzIDptZXRoOmByZWFkYCBvciA6bWV0aDpgd3JpdGVgOyB1c2UKIDptZXRoOmB+c29ja2V0LnJlY3ZgIGFuZCA6bWV0aDpgfnNvY2tldC5zZW5kYCB3aXRob3V0ICpmbGFncyogYXJndW1lbnQgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CmluZGV4IDVmNjhkMzMuLmZjZTIxNmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdApAQCAtMjIzLDcgKzIyMyw2IEBACiAgICBkZXNpcmVkLiAgSWYgOm1ldGg6YGhhbmRsZV9yZXF1ZXN0YCByZWNlaXZlcyBubyBpbmNvbWluZyByZXF1ZXN0cyB3aXRoaW4gdGhlCiAgICB0aW1lb3V0IHBlcmlvZCwgdGhlIDptZXRoOmBoYW5kbGVfdGltZW91dGAgbWV0aG9kIGlzIGNhbGxlZC4KIAotCiBUaGVyZSBhcmUgdmFyaW91cyBzZXJ2ZXIgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgb2YgYmFzZQogc2VydmVyIGNsYXNzZXMgbGlrZSA6Y2xhc3M6YFRDUFNlcnZlcmA7IHRoZXNlIG1ldGhvZHMgYXJlbid0IHVzZWZ1bCB0byBleHRlcm5hbAogdXNlcnMgb2YgdGhlIHNlcnZlciBvYmplY3QuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdCBiL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0CmluZGV4IGRjNWYyMzkuLjU5ZWQwOTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0CkBAIC04Myw3ICs4Myw3IEBACiAgICA+Pj4gZm9yIHJvdyBpbiBjOgogICAgLi4uICAgIHByaW50IHJvdwogICAgLi4uCi0gICAodScyMDA2LTAxLTA1JywgdSdCVVknLCB1J1JIQVQnLCAxMDAsIDM1LjE0MDAwMDAwMDAwMDAwMSkKKyAgICh1JzIwMDYtMDEtMDUnLCB1J0JVWScsIHUnUkhBVCcsIDEwMCwgMzUuMTQpCiAgICAodScyMDA2LTAzLTI4JywgdSdCVVknLCB1J0lCTScsIDEwMDAsIDQ1LjApCiAgICAodScyMDA2LTA0LTA2JywgdSdTRUxMJywgdSdJQk0nLCA1MDAsIDUzLjApCiAgICAodScyMDA2LTA0LTA1JywgdSdCVVknLCB1J01TT0ZUJywgMTAwMCwgNzIuMCkKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgaXNvbGF0aW9uX2xldmVsLCBkZXRlY3RfdHlwZXMsIGZhY3RvcnldKQorLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCiAKICAgIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUgKmRhdGFiYXNlKi4gWW91IGNhbiB1c2UKICAgIGBgIjptZW1vcnk6ImBgIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluIFJBTQpAQCAtMjU4LDIyICsyNTgsMjEgQEAKIC4uIG1ldGhvZDo6IENvbm5lY3Rpb24uZXhlY3V0ZShzcWwsIFtwYXJhbWV0ZXJzXSkKIAogICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhbiBpbnRlcm1lZGlhdGUgY3Vyc29yIG9iamVjdCBieQotICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MKLSAgIDptZXRoOmBleGVjdXRlPEN1cnNvci5leGVjdXRlPmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uCisgICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncyA6bWV0aDpgZXhlY3V0ZQorICAgPEN1cnNvci5leGVjdXRlPmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uCiAKIAogLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5leGVjdXRlbWFueShzcWwsIFtwYXJhbWV0ZXJzXSkKIAogICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhbiBpbnRlcm1lZGlhdGUgY3Vyc29yIG9iamVjdCBieQotICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MKLSAgIDptZXRoOmBleGVjdXRlbWFueTxDdXJzb3IuZXhlY3V0ZW1hbnk+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbi4KKyAgIGNhbGxpbmcgdGhlIGN1cnNvciBtZXRob2QsIHRoZW4gY2FsbHMgdGhlIGN1cnNvcidzIDptZXRoOmBleGVjdXRlbWFueQorICAgPEN1cnNvci5leGVjdXRlbWFueT5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgogCiAuLiBtZXRob2Q6OiBDb25uZWN0aW9uLmV4ZWN1dGVzY3JpcHQoc3FsX3NjcmlwdCkKIAogICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhbiBpbnRlcm1lZGlhdGUgY3Vyc29yIG9iamVjdCBieQotICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MKLSAgIDptZXRoOmBleGVjdXRlc2NyaXB0PEN1cnNvci5leGVjdXRlc2NyaXB0PmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMKLSAgIGdpdmVuLgorICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MgOm1ldGg6YGV4ZWN1dGVzY3JpcHQKKyAgIDxDdXJzb3IuZXhlY3V0ZXNjcmlwdD5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgogCiAKIC4uIG1ldGhvZDo6IENvbm5lY3Rpb24uY3JlYXRlX2Z1bmN0aW9uKG5hbWUsIG51bV9wYXJhbXMsIGZ1bmMpCkBAIC0zNjgsNiArMzY3LDI1IEBACiAgICBtZXRob2Qgd2l0aCA6Y29uc3Q6YE5vbmVgIGZvciAqaGFuZGxlciouCiAKIAorLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5lbmFibGVfbG9hZF9leHRlbnNpb24oZW5hYmxlZCkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIFRoaXMgcm91dGluZSBhbGxvd3MvZGlzYWxsb3dzIHRoZSBTUUxpdGUgZW5naW5lIHRvIGxvYWQgU1FMaXRlIGV4dGVuc2lvbnMKKyAgIGZyb20gc2hhcmVkIGxpYnJhcmllcy4gIFNRTGl0ZSBleHRlbnNpb25zIGNhbiBkZWZpbmUgbmV3IGZ1bmN0aW9ucywKKyAgIGFnZ3JlZ2F0ZXMgb3Igd2hvbGUgbmV3IHZpcnR1YWwgdGFibGUgaW1wbGVtZW50YXRpb25zLiAgT25lIHdlbGwta25vd24KKyAgIGV4dGVuc2lvbiBpcyB0aGUgZnVsbHRleHQtc2VhcmNoIGV4dGVuc2lvbiBkaXN0cmlidXRlZCB3aXRoIFNRTGl0ZS4KKworICAgLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9zcWxpdGUzL2xvYWRfZXh0ZW5zaW9uLnB5CisKKy4uIG1ldGhvZDo6IENvbm5lY3Rpb24ubG9hZF9leHRlbnNpb24ocGF0aCkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIFRoaXMgcm91dGluZSBsb2FkcyBhIFNRTGl0ZSBleHRlbnNpb24gZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LiAgWW91IGhhdmUgdG8KKyAgIGVuYWJsZSBleHRlbnNpb24gbG9hZGluZyB3aXRoIDptZXRoOmBlbmFibGVfbG9hZF9leHRlbnNpb25gIGJlZm9yZSB5b3UgY2FuCisgICB1c2UgdGhpcyByb3V0aW5lLgorCiAuLiBhdHRyaWJ1dGU6OiBDb25uZWN0aW9uLnJvd19mYWN0b3J5CiAKICAgIFlvdSBjYW4gY2hhbmdlIHRoaXMgYXR0cmlidXRlIHRvIGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIHRoZSBjdXJzb3IgYW5kIHRoZQpAQCAtNDQxLDcgKzQ1OSw3IEBACiAKIC4uIGNsYXNzOjogQ3Vyc29yCiAKLSAgIEEgU1FMaXRlIGRhdGFiYXNlIGN1cnNvciBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzOgorICAgQSA6Y2xhc3M6YEN1cnNvcmAgaW5zdGFuY2UgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhbmQgbWV0aG9kcy4KIAogLi4gbWV0aG9kOjogQ3Vyc29yLmV4ZWN1dGUoc3FsLCBbcGFyYW1ldGVyc10pCiAKQEAgLTYwMiw3ICs2MjAsNyBAQAogICAgID4+PiB0eXBlKHIpCiAgICAgPHR5cGUgJ3NxbGl0ZTMuUm93Jz4KICAgICA+Pj4gcgotICAgICh1JzIwMDYtMDEtMDUnLCB1J0JVWScsIHUnUkhBVCcsIDEwMC4wLCAzNS4xNDAwMDAwMDAwMDAwMDEpCisgICAgKHUnMjAwNi0wMS0wNScsIHUnQlVZJywgdSdSSEFUJywgMTAwLjAsIDM1LjE0KQogICAgID4+PiBsZW4ocikKICAgICA1CiAgICAgPj4+IHJbMl0KQEAgLTg2MSwzICs4NzksMTcgQEAKIGNvbW1pdHRlZDoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9zcWxpdGUzL2N0eF9tYW5hZ2VyLnB5CisKKworQ29tbW9uIGlzc3VlcworLS0tLS0tLS0tLS0tLQorCitNdWx0aXRocmVhZGluZworXl5eXl5eXl5eXl5eXl4KKworT2xkZXIgU1FMaXRlIHZlcnNpb25zIGhhZCBpc3N1ZXMgd2l0aCBzaGFyaW5nIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhyZWFkcy4KK1RoYXQncyB3aHkgdGhlIFB5dGhvbiBtb2R1bGUgZGlzYWxsb3dzIHNoYXJpbmcgY29ubmVjdGlvbnMgYW5kIGN1cnNvcnMgYmV0d2VlbgordGhyZWFkcy4gSWYgeW91IHN0aWxsIHRyeSB0byBkbyBzbywgeW91IHdpbGwgZ2V0IGFuIGV4Y2VwdGlvbiBhdCBydW50aW1lLgorCitUaGUgb25seSBleGNlcHRpb24gaXMgY2FsbGluZyB0aGUgOm1ldGg6YH5Db25uZWN0aW9uLmludGVycnVwdGAgbWV0aG9kLCB3aGljaAorb25seSBtYWtlcyBzZW5zZSB0byBjYWxsIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3NsLnJzdCBiL0RvYy9saWJyYXJ5L3NzbC5yc3QKaW5kZXggNWM3NmRmOS4uYTdlNzhiZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3NsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zc2wucnN0CkBAIC0xLDggKzEsOCBAQAotOm1vZDpgc3NsYCAtLS0gU1NMIHdyYXBwZXIgZm9yIHNvY2tldCBvYmplY3RzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzptb2Q6YHNzbGAgLS0tIFRMUy9TU0wgd3JhcHBlciBmb3Igc29ja2V0IG9iamVjdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogc3NsCi0gICA6c3lub3BzaXM6IFNTTCB3cmFwcGVyIGZvciBzb2NrZXQgb2JqZWN0cworICAgOnN5bm9wc2lzOiBUTFMvU1NMIHdyYXBwZXIgZm9yIHNvY2tldCBvYmplY3RzCiAKIC4uIG1vZHVsZWF1dGhvcjo6IEJpbGwgSmFuc3NlbiA8YmlsbC5qYW5zc2VuQGdtYWlsLmNvbT4KIApAQCAtNTAsNyArNTAsNyBAQAogICAgaXMgYSBzdWJ0eXBlIG9mIDpleGM6YHNvY2tldC5lcnJvcmAsIHdoaWNoIGluIHR1cm4gaXMgYSBzdWJ0eXBlIG9mCiAgICA6ZXhjOmBJT0Vycm9yYC4KIAotLi4gZnVuY3Rpb246OiB3cmFwX3NvY2tldCAoc29jaywga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBzZXJ2ZXJfc2lkZT1GYWxzZSwgY2VydF9yZXFzPUNFUlRfTk9ORSwgc3NsX3ZlcnNpb249e3NlZSBkb2NzfSwgY2FfY2VydHM9Tm9uZSwgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9VHJ1ZSwgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSkKKy4uIGZ1bmN0aW9uOjogd3JhcF9zb2NrZXQgKHNvY2ssIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgc2VydmVyX3NpZGU9RmFsc2UsIGNlcnRfcmVxcz1DRVJUX05PTkUsIHNzbF92ZXJzaW9uPXtzZWUgZG9jc30sIGNhX2NlcnRzPU5vbmUsIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PVRydWUsIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPVRydWUsIGNpcGhlcnM9Tm9uZSkKIAogICAgVGFrZXMgYW4gaW5zdGFuY2UgYGBzb2NrYGAgb2YgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCwgYW5kIHJldHVybnMgYW4gaW5zdGFuY2UKICAgIG9mIDpjbGFzczpgc3NsLlNTTFNvY2tldGAsIGEgc3VidHlwZSBvZiA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgLCB3aGljaCB3cmFwcwpAQCAtMTEzLDE0ICsxMTMsMjYgQEAKICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0KICAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKioKICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0KLSAgICAgICAgKlNTTHYyKiAgICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyogICAgICAgIG5vCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwogICAgICAgICAqU1NMdjMqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgbm8KICAgICAgICAgKlNTTHYyMyogICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vCiAgICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMKICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0KIAotICAgSW4gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMIChmb3IgaW5zdGFuY2UsIDAuOS43bCBvbiBPUyBYIDEwLjQpLCBhbgotICAgU1NMdjIgY2xpZW50IGNvdWxkIG5vdCBjb25uZWN0IHRvIGFuIFNTTHYyMyBzZXJ2ZXIuCisgICAuLiBub3RlOjoKKworICAgICAgV2hpY2ggY29ubmVjdGlvbnMgc3VjY2VlZCB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mCisgICAgICBPcGVuU1NMLiAgRm9yIGluc3RhbmNlLCBpbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKHN1Y2gKKyAgICAgIGFzIDAuOS43bCBvbiBPUyBYIDEwLjQpLCBhbiBTU0x2MiBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gYW4KKyAgICAgIFNTTHYyMyBzZXJ2ZXIuICBBbm90aGVyIGV4YW1wbGU6IGJlZ2lubmluZyB3aXRoIE9wZW5TU0wgMS4wLjAsCisgICAgICBhbiBTU0x2MjMgY2xpZW50IHdpbGwgbm90IGFjdHVhbGx5IGF0dGVtcHQgU1NMdjIgY29ubmVjdGlvbnMKKyAgICAgIHVubGVzcyB5b3UgZXhwbGljaXRseSBlbmFibGUgU1NMdjIgY2lwaGVyczsgZm9yIGV4YW1wbGUsIHlvdQorICAgICAgbWlnaHQgc3BlY2lmeSBgYCJBTEwiYGAgb3IgYGAiU1NMdjIiYGAgYXMgdGhlICpjaXBoZXJzKiBwYXJhbWV0ZXIKKyAgICAgIHRvIGVuYWJsZSB0aGVtLgorCisgICBUaGUgKmNpcGhlcnMqIHBhcmFtZXRlciBzZXRzIHRoZSBhdmFpbGFibGUgY2lwaGVycyBmb3IgdGhpcyBTU0wgb2JqZWN0LgorICAgSXQgc2hvdWxkIGJlIGEgc3RyaW5nIGluIHRoZSBgT3BlblNTTCBjaXBoZXIgbGlzdCBmb3JtYXQKKyAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgogCiAgICBUaGUgcGFyYW1ldGVyIGBgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3RgYCBzcGVjaWZpZXMgd2hldGhlciB0byBkbyB0aGUgU1NMCiAgICBoYW5kc2hha2UgYXV0b21hdGljYWxseSBhZnRlciBkb2luZyBhIDptZXRoOmBzb2NrZXQuY29ubmVjdGAsIG9yIHdoZXRoZXIgdGhlCkBAIC0xMzUsNiArMTQ3LDkgQEAKICAgIG5vcm1hbCBFT0YgaW4gcmVzcG9uc2UgdG8gdW5leHBlY3RlZCBFT0YgZXJyb3JzIHJhaXNlZCBmcm9tIHRoZSB1bmRlcmx5aW5nCiAgICBzb2NrZXQ7IGlmIDpjb25zdDpgRmFsc2VgLCBpdCB3aWxsIHJhaXNlIHRoZSBleGNlcHRpb25zIGJhY2sgdG8gdGhlIGNhbGxlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2lwaGVycyouCisKIC4uIGZ1bmN0aW9uOjogUkFORF9zdGF0dXMoKQogCiAgICBSZXR1cm5zIFRydWUgaWYgdGhlIFNTTCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaGFzIGJlZW4gc2VlZGVkIHdpdGgKQEAgLTI0NCw2ICsyNTksMzYgQEAKICAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKICAgIHNpZGVzIGNhbiBzcGVhayBpdC4KIAorLi4gZGF0YTo6IE9QRU5TU0xfVkVSU0lPTgorCisgICBUaGUgdmVyc2lvbiBzdHJpbmcgb2YgdGhlIE9wZW5TU0wgbGlicmFyeSBsb2FkZWQgYnkgdGhlIGludGVycHJldGVyOjoKKworICAgID4+PiBzc2wuT1BFTlNTTF9WRVJTSU9OCisgICAgJ09wZW5TU0wgMC45LjhrIDI1IE1hciAyMDA5JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworLi4gZGF0YTo6IE9QRU5TU0xfVkVSU0lPTl9JTkZPCisKKyAgIEEgdHVwbGUgb2YgZml2ZSBpbnRlZ2VycyByZXByZXNlbnRpbmcgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgIE9wZW5TU0wgbGlicmFyeTo6CisKKyAgICA+Pj4gc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPCisgICAgKDAsIDksIDgsIDExLCAxNSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKy4uIGRhdGE6OiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCisKKyAgIFRoZSByYXcgdmVyc2lvbiBudW1iZXIgb2YgdGhlIE9wZW5TU0wgbGlicmFyeSwgYXMgYSBzaW5nbGUgaW50ZWdlcjo6CisKKyAgICA+Pj4gc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKyAgICA5NDcwMTQzTAorICAgID4+PiBoZXgoc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpCisgICAgJzB4OTA4MGJmTCcKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKIAogU1NMU29ja2V0IE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjAsMTEgKzUwNSwxMSBAQAogc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tOjoKIAogICAgdHJ5OgotICAgICAgaW1wb3J0IHNzbAorICAgICAgIGltcG9ydCBzc2wKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgIHBhc3MKKyAgICAgICBwYXNzCiAgICBlbHNlOgotICAgICAgWyBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBTU0wgc3VwcG9ydCBdCisgICAgICAgLi4uICMgZG8gc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgU1NMIHN1cHBvcnQKIAogQ2xpZW50LXNpZGUgb3BlcmF0aW9uCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl4KQEAgLTUzNywyOSArNTgyLDMxIEBACiBmb3IgaXQ6OgogCiAgICB3aGlsZSBUcnVlOgotICAgICAgbmV3c29ja2V0LCBmcm9tYWRkciA9IGJpbmRzb2NrZXQuYWNjZXB0KCkKLSAgICAgIGNvbm5zdHJlYW0gPSBzc2wud3JhcF9zb2NrZXQobmV3c29ja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT0ibXljZXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9Im15a2V5ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgICAgIGRlYWxfd2l0aF9jbGllbnQoY29ubnN0cmVhbSkKKyAgICAgICBuZXdzb2NrZXQsIGZyb21hZGRyID0gYmluZHNvY2tldC5hY2NlcHQoKQorICAgICAgIGNvbm5zdHJlYW0gPSBzc2wud3JhcF9zb2NrZXQobmV3c29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPSJteWNlcnRmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9Im15a2V5ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgdHJ5OgorICAgICAgICAgICBkZWFsX3dpdGhfY2xpZW50KGNvbm5zdHJlYW0pCisgICAgICAgZmluYWxseToKKyAgICAgICAgICAgY29ubnN0cmVhbS5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICBjb25uc3RyZWFtLmNsb3NlKCkKIAogVGhlbiB5b3UnZCByZWFkIGRhdGEgZnJvbSB0aGUgYGBjb25uc3RyZWFtYGAgYW5kIGRvIHNvbWV0aGluZyB3aXRoIGl0IHRpbGwgeW91CiBhcmUgZmluaXNoZWQgd2l0aCB0aGUgY2xpZW50IChvciB0aGUgY2xpZW50IGlzIGZpbmlzaGVkIHdpdGggeW91KTo6CiAKICAgIGRlZiBkZWFsX3dpdGhfY2xpZW50KGNvbm5zdHJlYW0pOgotCi0gICAgICBkYXRhID0gY29ubnN0cmVhbS5yZWFkKCkKLSAgICAgICMgbnVsbCBkYXRhIG1lYW5zIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgd2l0aCB1cwotICAgICAgd2hpbGUgZGF0YToKLSAgICAgICAgIGlmIG5vdCBkb19zb21ldGhpbmcoY29ubnN0cmVhbSwgZGF0YSk6Ci0gICAgICAgICAgICAjIHdlJ2xsIGFzc3VtZSBkb19zb21ldGhpbmcgcmV0dXJucyBGYWxzZQotICAgICAgICAgICAgIyB3aGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggY2xpZW50Ci0gICAgICAgICAgICBicmVhawotICAgICAgICAgZGF0YSA9IGNvbm5zdHJlYW0ucmVhZCgpCi0gICAgICAjIGZpbmlzaGVkIHdpdGggY2xpZW50Ci0gICAgICBjb25uc3RyZWFtLmNsb3NlKCkKKyAgICAgICBkYXRhID0gY29ubnN0cmVhbS5yZWFkKCkKKyAgICAgICAjIG51bGwgZGF0YSBtZWFucyB0aGUgY2xpZW50IGlzIGZpbmlzaGVkIHdpdGggdXMKKyAgICAgICB3aGlsZSBkYXRhOgorICAgICAgICAgICBpZiBub3QgZG9fc29tZXRoaW5nKGNvbm5zdHJlYW0sIGRhdGEpOgorICAgICAgICAgICAgICAgIyB3ZSdsbCBhc3N1bWUgZG9fc29tZXRoaW5nIHJldHVybnMgRmFsc2UKKyAgICAgICAgICAgICAgICMgd2hlbiB3ZSdyZSBmaW5pc2hlZCB3aXRoIGNsaWVudAorICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgZGF0YSA9IGNvbm5zdHJlYW0ucmVhZCgpCisgICAgICAgIyBmaW5pc2hlZCB3aXRoIGNsaWVudAogCiBBbmQgZ28gYmFjayB0byBsaXN0ZW5pbmcgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAppbmRleCA2OTk5YTViLi5mMGJhMGE5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CkBAIC0yMjQsMTggKzIyNCwyMCBAQAogICAgcGFpcjogQzsgbGFuZ3VhZ2UKIAogVGhlcmUgYXJlIGZvdXIgZGlzdGluY3QgbnVtZXJpYyB0eXBlczogOmRmbjpgcGxhaW4gaW50ZWdlcnNgLCA6ZGZuOmBsb25nCi1pbnRlZ2Vyc2AsICA6ZGZuOmBmbG9hdGluZyBwb2ludCBudW1iZXJzYCwgYW5kIDpkZm46YGNvbXBsZXggbnVtYmVyc2AuIEluCitpbnRlZ2Vyc2AsIDpkZm46YGZsb2F0aW5nIHBvaW50IG51bWJlcnNgLCBhbmQgOmRmbjpgY29tcGxleCBudW1iZXJzYC4gSW4KIGFkZGl0aW9uLCBCb29sZWFucyBhcmUgYSBzdWJ0eXBlIG9mIHBsYWluIGludGVnZXJzLiBQbGFpbiBpbnRlZ2VycyAoYWxzbyBqdXN0CiBjYWxsZWQgOmRmbjpgaW50ZWdlcnNgKSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgOmN0eXBlOmBsb25nYCBpbiBDLCB3aGljaCBnaXZlcwogdGhlbSBhdCBsZWFzdCAzMiBiaXRzIG9mIHByZWNpc2lvbiAoYGBzeXMubWF4aW50YGAgaXMgYWx3YXlzIHNldCB0byB0aGUgbWF4aW11bQogcGxhaW4gaW50ZWdlciB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0sIHRoZSBtaW5pbXVtIHZhbHVlIGlzCi1gYC1zeXMubWF4aW50IC0gMWBgKS4gIExvbmcgaW50ZWdlcnMgaGF2ZSB1bmxpbWl0ZWQgcHJlY2lzaW9uLiBGbG9hdGluZyBwb2ludAotbnVtYmVycyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgOmN0eXBlOmBkb3VibGVgIGluIEMuIEFsbCBiZXRzIG9uIHRoZWlyIHByZWNpc2lvbgotYXJlIG9mZiB1bmxlc3MgeW91IGhhcHBlbiB0byBrbm93IHRoZSBtYWNoaW5lIHlvdSBhcmUgd29ya2luZyB3aXRoLgotCi1Db21wbGV4IG51bWJlcnMgaGF2ZSBhIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0LCB3aGljaCBhcmUgZWFjaCBpbXBsZW1lbnRlZCB1c2luZwotOmN0eXBlOmBkb3VibGVgIGluIEMuICBUbyBleHRyYWN0IHRoZXNlIHBhcnRzIGZyb20gYSBjb21wbGV4IG51bWJlciAqeiosIHVzZQotYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC4KK2BgLXN5cy5tYXhpbnQgLSAxYGApLiAgTG9uZyBpbnRlZ2VycyBoYXZlIHVubGltaXRlZCBwcmVjaXNpb24uICBGbG9hdGluZyBwb2ludAorbnVtYmVycyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCB1c2luZyA6Y3R5cGU6YGRvdWJsZWAgaW4gQzsgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBwcmVjaXNpb24gYW5kIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgZm9yIHRoZQorbWFjaGluZSBvbiB3aGljaCB5b3VyIHByb2dyYW0gaXMgcnVubmluZyBpcyBhdmFpbGFibGUgaW4KKzpkYXRhOmBzeXMuZmxvYXRfaW5mb2AuICBDb21wbGV4IG51bWJlcnMgaGF2ZSBhIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0LCB3aGljaAorYXJlIGVhY2ggYSBmbG9hdGluZyBwb2ludCBudW1iZXIuICBUbyBleHRyYWN0IHRoZXNlIHBhcnRzIGZyb20gYSBjb21wbGV4IG51bWJlcgorKnoqLCB1c2UgYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC4gKFRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluY2x1ZGVzIGFkZGl0aW9uYWwKK251bWVyaWMgdHlwZXMsIDptb2Q6YGZyYWN0aW9uc2AgdGhhdCBob2xkIHJhdGlvbmFscywgYW5kIDptb2Q6YGRlY2ltYWxgIHRoYXQKK2hvbGQgZmxvYXRpbmctcG9pbnQgbnVtYmVycyB3aXRoIHVzZXItZGVmaW5hYmxlIHByZWNpc2lvbi4pCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IG51bWVyaWM7IGxpdGVyYWxzCkBAIC0zNTgsMTAgKzM2MCwxMCBAQAogICAgU2VlIDpyZWY6YGJ1aWx0LWluLWZ1bmNzYCBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uLgogCiAoNCkKLSAgIENvbXBsZXggZmxvb3IgZGl2aXNpb24gb3BlcmF0b3IsIG1vZHVsbyBvcGVyYXRvciwgYW5kIDpmdW5jOmBkaXZtb2RgLgotCiAgICAuLiBkZXByZWNhdGVkOjogMi4zCi0gICAgICBJbnN0ZWFkIGNvbnZlcnQgdG8gZmxvYXQgdXNpbmcgOmZ1bmM6YGFic2AgaWYgYXBwcm9wcmlhdGUuCisgICAgICBUaGUgZmxvb3IgZGl2aXNpb24gb3BlcmF0b3IsIHRoZSBtb2R1bG8gb3BlcmF0b3IsIGFuZCB0aGUgOmZ1bmM6YGRpdm1vZGAKKyAgICAgIGZ1bmN0aW9uIGFyZSBubyBsb25nZXIgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzLiAgSW5zdGVhZCwgY29udmVydCB0bworICAgICAgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdXNpbmcgdGhlIDpmdW5jOmBhYnNgIGZ1bmN0aW9uIGlmIGFwcHJvcHJpYXRlLgogCiAoNSkKICAgIEFsc28gcmVmZXJyZWQgdG8gYXMgaW50ZWdlciBkaXZpc2lvbi4gIFRoZSByZXN1bHRhbnQgdmFsdWUgaXMgYSB3aG9sZSBpbnRlZ2VyLApAQCAtNDU1LDYgKzQ1NywzNyBAQAogICAgQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBlcXVpdmFsZW50IHRvIGRpdmlzaW9uIGJ5IGBgcG93KDIsIG4pYGAuCiAKIAorQWRkaXRpb25hbCBNZXRob2RzIG9uIEludGVnZXIgVHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IGludC5iaXRfbGVuZ3RoKCkKKy4uIG1ldGhvZDo6IGxvbmcuYml0X2xlbmd0aCgpCisKKyAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgYW4gaW50ZWdlciBpbiBiaW5hcnksCisgICAgZXhjbHVkaW5nIHRoZSBzaWduIGFuZCBsZWFkaW5nIHplcm9zOjoKKworICAgICAgICA+Pj4gbiA9IC0zNworICAgICAgICA+Pj4gYmluKG4pCisgICAgICAgICctMGIxMDAxMDEnCisgICAgICAgID4+PiBuLmJpdF9sZW5ndGgoKQorICAgICAgICA2CisKKyAgICBNb3JlIHByZWNpc2VseSwgaWYgYGB4YGAgaXMgbm9uemVybywgdGhlbiBgYHguYml0X2xlbmd0aCgpYGAgaXMgdGhlCisgICAgdW5pcXVlIHBvc2l0aXZlIGludGVnZXIgYGBrYGAgc3VjaCB0aGF0IGBgMioqKGstMSkgPD0gYWJzKHgpIDwgMioqa2BgLgorICAgIEVxdWl2YWxlbnRseSwgd2hlbiBgYGFicyh4KWBgIGlzIHNtYWxsIGVub3VnaCB0byBoYXZlIGEgY29ycmVjdGx5CisgICAgcm91bmRlZCBsb2dhcml0aG0sIHRoZW4gYGBrID0gMSArIGludChsb2coYWJzKHgpLCAyKSlgYC4KKyAgICBJZiBgYHhgYCBpcyB6ZXJvLCB0aGVuIGBgeC5iaXRfbGVuZ3RoKClgYCByZXR1cm5zIGBgMGBgLgorCisgICAgRXF1aXZhbGVudCB0bzo6CisKKyAgICAgICAgZGVmIGJpdF9sZW5ndGgoc2VsZik6CisgICAgICAgICAgICBzID0gYmluKHNlbGYpICAgICAgICMgYmluYXJ5IHJlcHJlc2VudGF0aW9uOiAgYmluKC0zNykgLS0+ICctMGIxMDAxMDEnCisgICAgICAgICAgICBzID0gcy5sc3RyaXAoJy0wYicpICMgcmVtb3ZlIGxlYWRpbmcgemVyb3MgYW5kIG1pbnVzIHNpZ24KKyAgICAgICAgICAgIHJldHVybiBsZW4ocykgICAgICAgIyBsZW4oJzEwMDEwMScpIC0tPiA2CisKKyAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCiBBZGRpdGlvbmFsIE1ldGhvZHMgb24gRmxvYXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NjIsMTIgKzQ5NSwyNCBAQAogCiAuLiBtZXRob2Q6OiBmbG9hdC5hc19pbnRlZ2VyX3JhdGlvKCkKIAotICAgIFJldHVybiBhIHBhaXIgb2YgaW50ZWdlcnMgd2hvc2UgcmF0aW8gaXMgZXhhY3RseSBlcXVhbCB0byB0aGUKLSAgICBvcmlnaW5hbCBmbG9hdCBhbmQgd2l0aCBhIHBvc2l0aXZlIGRlbm9taW5hdG9yLiAgUmFpc2VzCi0gICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgb24gaW5maW5pdGllcyBhbmQgYSA6ZXhjOmBWYWx1ZUVycm9yYCBvbgotICAgIE5hTnMuCisgICBSZXR1cm4gYSBwYWlyIG9mIGludGVnZXJzIHdob3NlIHJhdGlvIGlzIGV4YWN0bHkgZXF1YWwgdG8gdGhlCisgICBvcmlnaW5hbCBmbG9hdCBhbmQgd2l0aCBhIHBvc2l0aXZlIGRlbm9taW5hdG9yLiAgUmFpc2VzCisgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBvbiBpbmZpbml0aWVzIGFuZCBhIDpleGM6YFZhbHVlRXJyb3JgIG9uCisgICBOYU5zLgogCi0gICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworLi4gbWV0aG9kOjogZmxvYXQuaXNfaW50ZWdlcigpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgZmxvYXQgaW5zdGFuY2UgaXMgZmluaXRlIHdpdGggaW50ZWdyYWwKKyAgIHZhbHVlLCBhbmQgYGBGYWxzZWBgIG90aGVyd2lzZTo6CisKKyAgICAgID4+PiAoLTIuMCkuaXNfaW50ZWdlcigpCisgICAgICBUcnVlCisgICAgICA+Pj4gKDMuMikuaXNfaW50ZWdlcigpCisgICAgICBGYWxzZQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAogVHdvIG1ldGhvZHMgc3VwcG9ydCBjb252ZXJzaW9uIHRvCiBhbmQgZnJvbSBoZXhhZGVjaW1hbCBzdHJpbmdzLiAgU2luY2UgUHl0aG9uJ3MgZmxvYXRzIGFyZSBzdG9yZWQKQEAgLTYxNCwxMSArNjU5LDExIEBACiAKIC4uIF90eXBlc3NlcToKIAotU2VxdWVuY2UgVHlwZXMgLS0tIDpjbGFzczpgc3RyYCwgOmNsYXNzOmB1bmljb2RlYCwgOmNsYXNzOmBsaXN0YCwgOmNsYXNzOmB0dXBsZWAsIDpjbGFzczpgYnVmZmVyYCwgOmNsYXNzOmB4cmFuZ2VgCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NlcXVlbmNlIFR5cGVzIC0tLSA6Y2xhc3M6YHN0cmAsIDpjbGFzczpgdW5pY29kZWAsIDpjbGFzczpgbGlzdGAsIDpjbGFzczpgdHVwbGVgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIDpjbGFzczpgYnVmZmVyYCwgOmNsYXNzOmB4cmFuZ2VgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGVyZSBhcmUgc2l4IHNlcXVlbmNlIHR5cGVzOiBzdHJpbmdzLCBVbmljb2RlIHN0cmluZ3MsIGxpc3RzLCB0dXBsZXMsIGJ1ZmZlcnMsCi1hbmQgeHJhbmdlIG9iamVjdHMuCitUaGVyZSBhcmUgc2V2ZW4gc2VxdWVuY2UgdHlwZXM6IHN0cmluZ3MsIFVuaWNvZGUgc3RyaW5ncywgbGlzdHMsIHR1cGxlcywKK2J5dGVhcnJheXMsIGJ1ZmZlcnMsIGFuZCB4cmFuZ2Ugb2JqZWN0cy4KIAogRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdCBpbiA6Y2xhc3M6YGRpY3RgIGFuZCA6Y2xhc3M6YHNldGAgY2xhc3NlcywKIGFuZCB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZS4KQEAgLTYzMCw2ICs2NzUsNyBAQAogICAgb2JqZWN0OiBVbmljb2RlCiAgICBvYmplY3Q6IHR1cGxlCiAgICBvYmplY3Q6IGxpc3QKKyAgIG9iamVjdDogYnl0ZWFycmF5CiAgICBvYmplY3Q6IGJ1ZmZlcgogICAgb2JqZWN0OiB4cmFuZ2UKIApAQCAtNjQ1LDYgKzY5MSw4IEBACiBtdXN0IGhhdmUgdGhlIGVuY2xvc2luZyBwYXJlbnRoZXNlcywgc3VjaCBhcyBgYGEsIGIsIGNgYCBvciBgYCgpYGAuICBBCiBzaW5nbGUgaXRlbSB0dXBsZSBtdXN0IGhhdmUgYSB0cmFpbGluZyBjb21tYSwgc3VjaCBhcyBgYChkLClgYC4KIAorQnl0ZWFycmF5IG9iamVjdHMgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YGJ5dGVhcnJheWAuCisKIEJ1ZmZlciBvYmplY3RzIGFyZSBub3QgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5IFB5dGhvbiBzeW50YXgsIGJ1dCBjYW4gYmUgY3JlYXRlZAogYnkgY2FsbGluZyB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YGJ1ZmZlcmAuICBUaGV5IGRvbid0IHN1cHBvcnQKIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi4KQEAgLTY5MSw2ICs3MzksMTIgQEAKICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKIHwgYGBtYXgocylgYCAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICB8ICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKK3wgYGBzLmluZGV4KGkpYGAgICB8IGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cmVuY2UgICB8ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IG9mICppKiBpbiAqcyogICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKK3wgYGBzLmNvdW50KGkpYGAgICB8IHRvdGFsIG51bWJlciBvZiBvY2N1cmVuY2VzIG9mICB8ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8ICppKiBpbiAqcyogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKIAogU2VxdWVuY2UgdHlwZXMgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiBJbiBwYXJ0aWN1bGFyLCB0dXBsZXMgYW5kIGxpc3RzCiBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nIGNvcnJlc3BvbmRpbmcKQEAgLTc4OCw4ICs4NDIsOSBAQAogCiAuLiBpbmRleDo6IHBhaXI6IHN0cmluZzsgbWV0aG9kcwogCi1CZWxvdyBhcmUgbGlzdGVkIHRoZSBzdHJpbmcgbWV0aG9kcyB3aGljaCBib3RoIDgtYml0IHN0cmluZ3MgYW5kIFVuaWNvZGUgb2JqZWN0cwotc3VwcG9ydC4gTm90ZSB0aGF0IG5vbmUgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIGtleXdvcmQgYXJndW1lbnRzLgorQmVsb3cgYXJlIGxpc3RlZCB0aGUgc3RyaW5nIG1ldGhvZHMgd2hpY2ggYm90aCA4LWJpdCBzdHJpbmdzIGFuZAorVW5pY29kZSBvYmplY3RzIHN1cHBvcnQuICBTb21lIG9mIHRoZW0gYXJlIGFsc28gYXZhaWxhYmxlIG9uIDpjbGFzczpgYnl0ZWFycmF5YAorb2JqZWN0cy4KIAogSW4gYWRkaXRpb24sIFB5dGhvbidzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzCiBkZXNjcmliZWQgaW4gdGhlIDpyZWY6YHR5cGVzc2VxYCBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MKQEAgLTgzNSw2ICs4OTAsOCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjMKICAgICAgIFN1cHBvcnQgZm9yIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC4KIAogLi4gbWV0aG9kOjogc3RyLmVuY29kZShbZW5jb2RpbmdbLGVycm9yc11dKQogCkBAIC04NTMsNiArOTEwLDggQEAKICAgICAgIFN1cHBvcnQgZm9yIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIGFuZCBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIGFuZCBvdGhlciBlcnJvcgogICAgICAgaGFuZGxpbmcgc2NoZW1lcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLgogCiAuLiBtZXRob2Q6OiBzdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSkKIApAQCAtMTI5Nyw4ICsxMzU2LDggQEAKIGRpY3Rpb25hcnkgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBgJyUnYGAgY2hhcmFjdGVyLiBUaGUgbWFwcGluZyBrZXkKIHNlbGVjdHMgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZCBmcm9tIHRoZSBtYXBwaW5nLiAgRm9yIGV4YW1wbGU6CiAKLSAgID4+PiBwcmludCAnJShsYW5ndWFnZSlzIGhhcyAlKCMpMDNkIHF1b3RlIHR5cGVzLicgJSBcCi0gICAuLi4gICAgICAgeydsYW5ndWFnZSc6ICJQeXRob24iLCAiIyI6IDJ9CisgICA+Pj4gcHJpbnQgJyUobGFuZ3VhZ2UpcyBoYXMgJShudW1iZXIpMDNkIHF1b3RlIHR5cGVzLicgJSBcCisgICAuLi4gICAgICAgeyJsYW5ndWFnZSI6ICJQeXRob24iLCAibnVtYmVyIjogMn0KICAgIFB5dGhvbiBoYXMgMDAyIHF1b3RlIHR5cGVzLgogCiBJbiB0aGlzIGNhc2Ugbm8gYGAqYGAgc3BlY2lmaWVycyBtYXkgb2NjdXIgaW4gYSBmb3JtYXQgKHNpbmNlIHRoZXkgcmVxdWlyZSBhCkBAIC0xNDE5LDkgKzE0NzgsOSBAQAogCiAuLiBYWFggRXhhbXBsZXM/CiAKLUZvciBzYWZldHkgcmVhc29ucywgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9ucyBhcmUgY2xpcHBlZCB0byA1MDsgYGAlZmBgCi1jb252ZXJzaW9ucyBmb3IgbnVtYmVycyB3aG9zZSBhYnNvbHV0ZSB2YWx1ZSBpcyBvdmVyIDFlNTAgYXJlIHJlcGxhY2VkIGJ5IGBgJWdgYAotY29udmVyc2lvbnMuIFsjXV8gIEFsbCBvdGhlciBlcnJvcnMgcmFpc2UgZXhjZXB0aW9ucy4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBgYCVmYGAgY29udmVyc2lvbnMgZm9yIG51bWJlcnMgd2hvc2UgYWJzb2x1dGUgdmFsdWUgaXMgb3ZlciAxZTUwIGFyZSBubworICAgbG9uZ2VyIHJlcGxhY2VkIGJ5IGBgJWdgYCBjb252ZXJzaW9ucy4KIAogLi4gaW5kZXg6OgogICAgbW9kdWxlOiBzdHJpbmcKQEAgLTE0NTYsMTEgKzE1MTUsMjkgQEAKICAgIHRyaXBsZTogbXV0YWJsZTsgc2VxdWVuY2U7IHR5cGVzCiAgICBvYmplY3Q6IGxpc3QKIAotTGlzdCBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3cgaW4tcGxhY2UgbW9kaWZpY2F0aW9uIG9mCi10aGUgb2JqZWN0LiBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVuIGFkZGVkIHRvIHRoZSBsYW5ndWFnZSkgc2hvdWxkCi1hbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy4gU3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXM6Ci1zdWNoIG9iamVjdHMgY2Fubm90IGJlIG1vZGlmaWVkIG9uY2UgY3JlYXRlZC4gVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZQotZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVyZSAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCk6CitMaXN0IGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgb2JqZWN0cyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IGFsbG93Citpbi1wbGFjZSBtb2RpZmljYXRpb24gb2YgdGhlIG9iamVjdC4gT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlbiBhZGRlZAordG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuIFN0cmluZ3MgYW5kIHR1cGxlcworYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdCBiZSBtb2RpZmllZCBvbmNlIGNyZWF0ZWQuCitUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlcmUgKngqIGlzCithbiBhcmJpdHJhcnkgb2JqZWN0KToKKworLi4gaW5kZXg6OgorICAgdHJpcGxlOiBvcGVyYXRpb25zIG9uOyBzZXF1ZW5jZTsgdHlwZXMKKyAgIHRyaXBsZTogb3BlcmF0aW9ucyBvbjsgbGlzdDsgdHlwZQorICAgcGFpcjogc3Vic2NyaXB0OyBhc3NpZ25tZW50CisgICBwYWlyOiBzbGljZTsgYXNzaWdubWVudAorICAgcGFpcjogZXh0ZW5kZWQgc2xpY2U7IGFzc2lnbm1lbnQKKyAgIHN0YXRlbWVudDogZGVsCisgICBzaW5nbGU6IGFwcGVuZCgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogZXh0ZW5kKCkgKGxpc3QgbWV0aG9kKQorICAgc2luZ2xlOiBjb3VudCgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogaW5kZXgoKSAobGlzdCBtZXRob2QpCisgICBzaW5nbGU6IGluc2VydCgpIChsaXN0IG1ldGhvZCkKKyAgIHNpbmdsZTogcG9wKCkgKGxpc3QgbWV0aG9kKQorICAgc2luZ2xlOiByZW1vdmUoKSAobGlzdCBtZXRob2QpCisgICBzaW5nbGU6IHJldmVyc2UoKSAobGlzdCBtZXRob2QpCisgICBzaW5nbGU6IHNvcnQoKSAobGlzdCBtZXRob2QpCiAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICB8CkBAIC0xNTA3LDIzICsxNTg0LDYgQEAKIHwgcmV2ZXJzZV1dXSlgYCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLS4uIGluZGV4OjoKLSAgIHRyaXBsZTogb3BlcmF0aW9ucyBvbjsgc2VxdWVuY2U7IHR5cGVzCi0gICB0cmlwbGU6IG9wZXJhdGlvbnMgb247IGxpc3Q7IHR5cGUKLSAgIHBhaXI6IHN1YnNjcmlwdDsgYXNzaWdubWVudAotICAgcGFpcjogc2xpY2U7IGFzc2lnbm1lbnQKLSAgIHBhaXI6IGV4dGVuZGVkIHNsaWNlOyBhc3NpZ25tZW50Ci0gICBzdGF0ZW1lbnQ6IGRlbAotICAgc2luZ2xlOiBhcHBlbmQoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IGV4dGVuZCgpIChsaXN0IG1ldGhvZCkKLSAgIHNpbmdsZTogY291bnQoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IGluZGV4KCkgKGxpc3QgbWV0aG9kKQotICAgc2luZ2xlOiBpbnNlcnQoKSAobGlzdCBtZXRob2QpCi0gICBzaW5nbGU6IHBvcCgpIChsaXN0IG1ldGhvZCkKLSAgIHNpbmdsZTogcmVtb3ZlKCkgKGxpc3QgbWV0aG9kKQotICAgc2luZ2xlOiByZXZlcnNlKCkgKGxpc3QgbWV0aG9kKQotICAgc2luZ2xlOiBzb3J0KCkgKGxpc3QgbWV0aG9kKQotCiBOb3RlczoKIAogKDEpCkBAIC0xNTg0LDcgKzE2NDQsOCBAQAogICAgSW4gZ2VuZXJhbCwgdGhlICprZXkqIGFuZCAqcmV2ZXJzZSogY29udmVyc2lvbiBwcm9jZXNzZXMgYXJlIG11Y2ggZmFzdGVyIHRoYW4KICAgIHNwZWNpZnlpbmcgYW4gZXF1aXZhbGVudCAqY21wKiBmdW5jdGlvbi4gIFRoaXMgaXMgYmVjYXVzZSAqY21wKiBpcyBjYWxsZWQKICAgIG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIGxpc3QgZWxlbWVudCB3aGlsZSAqa2V5KiBhbmQgKnJldmVyc2UqIHRvdWNoIGVhY2gKLSAgIGVsZW1lbnQgb25seSBvbmNlLgorICAgZWxlbWVudCBvbmx5IG9uY2UuICBVc2UgOmZ1bmM6YGZ1bmN0b29scy5jbXBfdG9fa2V5YCB0byBjb252ZXJ0IGFuCisgICBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjMKICAgICAgIFN1cHBvcnQgZm9yIGBgTm9uZWBgIGFzIGFuIGVxdWl2YWxlbnQgdG8gb21pdHRpbmcgKmNtcCogd2FzIGFkZGVkLgpAQCAtMTYzNCw5ICsxNjk1LDEzIEBACiBUaGUgOmNsYXNzOmBzZXRgIHR5cGUgaXMgbXV0YWJsZSAtLS0gdGhlIGNvbnRlbnRzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIG1ldGhvZHMKIGxpa2UgOm1ldGg6YGFkZGAgYW5kIDptZXRoOmByZW1vdmVgLiAgU2luY2UgaXQgaXMgbXV0YWJsZSwgaXQgaGFzIG5vIGhhc2ggdmFsdWUKIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBlaXRoZXIgYSBkaWN0aW9uYXJ5IGtleSBvciBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXIgc2V0LgotVGhlIDpjbGFzczpgZnJvemVuc2V0YCB0eXBlIGlzIGltbXV0YWJsZSBhbmQgOnRlcm06YGhhc2hhYmxlYCAtLS0gaXRzIGNvbnRlbnRzIGNhbm5vdCBiZQotYWx0ZXJlZCBhZnRlciBpdCBpcyBjcmVhdGVkOyBpdCBjYW4gdGhlcmVmb3JlIGJlIHVzZWQgYXMgYSBkaWN0aW9uYXJ5IGtleSBvciBhcwotYW4gZWxlbWVudCBvZiBhbm90aGVyIHNldC4KK1RoZSA6Y2xhc3M6YGZyb3plbnNldGAgdHlwZSBpcyBpbW11dGFibGUgYW5kIDp0ZXJtOmBoYXNoYWJsZWAgLS0tIGl0cyBjb250ZW50cworY2Fubm90IGJlIGFsdGVyZWQgYWZ0ZXIgaXQgaXMgY3JlYXRlZDsgaXQgY2FuIHRoZXJlZm9yZSBiZSB1c2VkIGFzIGEgZGljdGlvbmFyeQora2V5IG9yIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlciBzZXQuCisKK0FzIG9mIFB5dGhvbiAyLjcsIG5vbi1lbXB0eSBzZXRzIChub3QgZnJvemVuc2V0cykgY2FuIGJlIGNyZWF0ZWQgYnkgcGxhY2luZyBhCitjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlbGVtZW50cyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogYGB7J2phY2snLAorJ3Nqb2VyZCd9YGAsIGluIGFkZGl0aW9uIHRvIHRoZSA6Y2xhc3M6YHNldGAgY29uc3RydWN0b3IuCiAKIFRoZSBjb25zdHJ1Y3RvcnMgZm9yIGJvdGggY2xhc3NlcyB3b3JrIHRoZSBzYW1lOgogCkBAIC0xODc5LDE1ICsxOTQ0LDEyIEBACiAgICB2YWx1ZXMgYXJlIGFkZGVkIGFzIGl0ZW1zIHRvIHRoZSBkaWN0aW9uYXJ5LiBJZiBhIGtleSBpcyBzcGVjaWZpZWQgYm90aCBpbiB0aGUKICAgIHBvc2l0aW9uYWwgYXJndW1lbnQgYW5kIGFzIGEga2V5d29yZCBhcmd1bWVudCwgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUKICAgIGtleXdvcmQgaXMgcmV0YWluZWQgaW4gdGhlIGRpY3Rpb25hcnkuIEZvciBleGFtcGxlLCB0aGVzZSBhbGwgcmV0dXJuIGEKLSAgIGRpY3Rpb25hcnkgZXF1YWwgdG8gYGB7Im9uZSI6IDIsICJ0d28iOiAzfWBgOgorICAgZGljdGlvbmFyeSBlcXVhbCB0byBgYHsib25lIjogMSwgInR3byI6IDJ9YGA6CiAKLSAgICogYGBkaWN0KG9uZT0yLCB0d289MylgYAotCi0gICAqIGBgZGljdCh7J29uZSc6IDIsICd0d28nOiAzfSlgYAotCi0gICAqIGBgZGljdCh6aXAoKCdvbmUnLCAndHdvJyksICgyLCAzKSkpYGAKLQotICAgKiBgYGRpY3QoW1sndHdvJywgM10sIFsnb25lJywgMl1dKWBgCisgICAqIGBgZGljdChvbmU9MSwgdHdvPTIpYGAKKyAgICogYGBkaWN0KHsnb25lJzogMSwgJ3R3byc6IDJ9KWBgCisgICAqIGBgZGljdCh6aXAoKCdvbmUnLCAndHdvJyksICgxLCAyKSkpYGAKKyAgICogYGBkaWN0KFtbJ3R3bycsIDJdLCBbJ29uZScsIDFdXSlgYAogCiAgICBUaGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvciBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbgogICAgaWRlbnRpZmllcnM7IHRoZSBvdGhlcnMgd29yayB3aXRoIGFueSB2YWxpZCBrZXlzLgpAQCAtMjA1OSw3ICsyMTIxLDcgQEAKICAgICAgIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gYGBOb25lYGAuCiAKICAgICAgIDpmdW5jOmB1cGRhdGVgIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW4gaXRlcmFibGUgb2YKLSAgICAgIGtleS92YWx1ZSBwYWlycyAoYXMgYSB0dXBsZSBvciBvdGhlciBpdGVyYWJsZSBvZiBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQKKyAgICAgIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZiBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQKICAgICAgIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeSBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZQogICAgICAga2V5L3ZhbHVlIHBhaXJzOiBgYGQudXBkYXRlKHJlZD0xLCBibHVlPTIpYGAuCiAKQEAgLTIwNzIsNiArMjEzNCwxMjEgQEAKICAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnkncyBsaXN0IG9mIHZhbHVlcy4gIFNlZSB0aGUgbm90ZSBmb3IKICAgICAgIDptZXRoOmBkaWN0Lml0ZW1zYC4KIAorICAgLi4gbWV0aG9kOjogdmlld2l0ZW1zKCkKKworICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnkncyBpdGVtcyAoYGAoa2V5LCB2YWx1ZSlgYCBwYWlycykuICBTZWUKKyAgICAgIGJlbG93IGZvciBkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIC4uIG1ldGhvZDo6IHZpZXdrZXlzKCkKKworICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnkncyBrZXlzLiAgU2VlIGJlbG93IGZvciBkb2N1bWVudGF0aW9uIG9mCisgICAgICB2aWV3IG9iamVjdHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisgICAuLiBtZXRob2Q6OiB2aWV3dmFsdWVzKCkKKworICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnkncyB2YWx1ZXMuICBTZWUgYmVsb3cgZm9yIGRvY3VtZW50YXRpb24gb2YKKyAgICAgIHZpZXcgb2JqZWN0cy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gX2RpY3Qtdmlld3M6CisKK0RpY3Rpb25hcnkgdmlldyBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgb2JqZWN0cyByZXR1cm5lZCBieSA6bWV0aDpgZGljdC52aWV3a2V5c2AsIDptZXRoOmBkaWN0LnZpZXd2YWx1ZXNgIGFuZAorOm1ldGg6YGRpY3Qudmlld2l0ZW1zYCBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXcgb24gdGhlCitkaWN0aW9uYXJ5J3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5IGNoYW5nZXMsIHRoZSB2aWV3CityZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLgorCitEaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSwgYW5kCitzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6CisKKy4uIGRlc2NyaWJlOjogbGVuKGRpY3R2aWV3KQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LgorCisuLiBkZXNjcmliZTo6IGl0ZXIoZGljdHZpZXcpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzIHR1cGxlcyBvZgorICAgYGAoa2V5LCB2YWx1ZSlgYCkgaW4gdGhlIGRpY3Rpb25hcnkuCisKKyAgIEtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXMgbm9uLXJhbmRvbSwKKyAgIHZhcmllcyBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb24gdGhlIGRpY3Rpb25hcnkncyBoaXN0b3J5CisgICBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkCisgICBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zCisgICB3aWxsIGRpcmVjdGx5IGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsIGtleSlgYCBwYWlycworICAgdXNpbmcgOmZ1bmM6YHppcGA6IGBgcGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpYGAuICBBbm90aGVyIHdheSB0bworICAgY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgYGBwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpbiBkLml0ZW1zKCldYGAuCisKKyAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeSBtYXkgcmFpc2UKKyAgIGEgOmV4YzpgUnVudGltZUVycm9yYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy4KKworLi4gZGVzY3JpYmU6OiB4IGluIGRpY3R2aWV3CisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeSdzIGtleXMsIHZhbHVlcyBvcgorICAgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhIGBgKGtleSwgdmFsdWUpYGAgdHVwbGUpLgorCisKK0tleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuICBJZiBhbGwKK3ZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgKGtleSwgdmFsdWUpIHBhaXJzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLCB0aGVuCit0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmUgbm90IHRyZWF0ZWQgYXMgc2V0LWxpa2UKK3NpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pICBUaGVuIHRoZXNlIHNldCBvcGVyYXRpb25zIGFyZQorYXZhaWxhYmxlICgib3RoZXIiIHJlZmVycyBlaXRoZXIgdG8gYW5vdGhlciB2aWV3IG9yIGEgc2V0KToKKworLi4gZGVzY3JpYmU6OiBkaWN0dmlldyAmIG90aGVyCisKKyAgIFJldHVybiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdCBhcyBhIG5ldyBzZXQuCisKKy4uIGRlc2NyaWJlOjogZGljdHZpZXcgfCBvdGhlcgorCisgICBSZXR1cm4gdGhlIHVuaW9uIG9mIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdCBhcyBhIG5ldyBzZXQuCisKKy4uIGRlc2NyaWJlOjogZGljdHZpZXcgLSBvdGhlcgorCisgICBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGljdHZpZXcgYW5kIHRoZSBvdGhlciBvYmplY3QgKGFsbCBlbGVtZW50cworICAgaW4gKmRpY3R2aWV3KiB0aGF0IGFyZW4ndCBpbiAqb3RoZXIqKSBhcyBhIG5ldyBzZXQuCisKKy4uIGRlc2NyaWJlOjogZGljdHZpZXcgXiBvdGhlcgorCisgICBSZXR1cm4gdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIChhbGwgZWxlbWVudHMgZWl0aGVyIGluICpkaWN0dmlldyogb3IKKyAgICpvdGhlciosIGJ1dCBub3QgaW4gYm90aCkgb2YgdGhlIGRpY3R2aWV3IGFuZCB0aGUgb3RoZXIgb2JqZWN0IGFzIGEgbmV3IHNldC4KKworCitBbiBleGFtcGxlIG9mIGRpY3Rpb25hcnkgdmlldyB1c2FnZTo6CisKKyAgID4+PiBkaXNoZXMgPSB7J2VnZ3MnOiAyLCAnc2F1c2FnZSc6IDEsICdiYWNvbic6IDEsICdzcGFtJzogNTAwfQorICAgPj4+IGtleXMgPSBkaXNoZXMudmlld2tleXMoKQorICAgPj4+IHZhbHVlcyA9IGRpc2hlcy52aWV3dmFsdWVzKCkKKworICAgPj4+ICMgaXRlcmF0aW9uCisgICA+Pj4gbiA9IDAKKyAgID4+PiBmb3IgdmFsIGluIHZhbHVlczoKKyAgIC4uLiAgICAgbiArPSB2YWwKKyAgID4+PiBwcmludChuKQorICAgNTA0CisKKyAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlcgorICAgPj4+IGxpc3Qoa2V5cykKKyAgIFsnZWdncycsICdiYWNvbicsICdzYXVzYWdlJywgJ3NwYW0nXQorICAgPj4+IGxpc3QodmFsdWVzKQorICAgWzIsIDEsIDEsIDUwMF0KKworICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlcworICAgPj4+IGRlbCBkaXNoZXNbJ2VnZ3MnXQorICAgPj4+IGRlbCBkaXNoZXNbJ3NhdXNhZ2UnXQorICAgPj4+IGxpc3Qoa2V5cykKKyAgIFsnc3BhbScsICdiYWNvbiddCisKKyAgID4+PiAjIHNldCBvcGVyYXRpb25zCisgICA+Pj4ga2V5cyAmIHsnZWdncycsICdiYWNvbicsICdzYWxhZCd9CisgICB7J2JhY29uJ30KKwogCiAuLiBfYmx0aW4tZmlsZS1vYmplY3RzOgogCkBAIC0yMzg0LDYgKzI1NjEsMTE3IEBACiAgICAgICBzdGF0ZS4KIAogCisuLiBfdHlwZW1lbW9yeXZpZXc6CisKK21lbW9yeXZpZXcgdHlwZQorPT09PT09PT09PT09PT09CisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworCis6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMgYWxsb3cgUHl0aG9uIGNvZGUgdG8gYWNjZXNzIHRoZSBpbnRlcm5hbCBkYXRhCitvZiBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyB0aGUgYnVmZmVyIHByb3RvY29sIHdpdGhvdXQgY29weWluZy4gIE1lbW9yeQoraXMgZ2VuZXJhbGx5IGludGVycHJldGVkIGFzIHNpbXBsZSBieXRlcy4KKworLi4gY2xhc3M6OiBtZW1vcnl2aWV3KG9iaikKKworICAgQ3JlYXRlIGEgOmNsYXNzOmBtZW1vcnl2aWV3YCB0aGF0IHJlZmVyZW5jZXMgKm9iaiouICAqb2JqKiBtdXN0IHN1cHBvcnQgdGhlCisgICBidWZmZXIgcHJvdG9jb2wuICBCdWlsdGluIG9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBidWZmZXIgcHJvdG9jb2wgaW5jbHVkZQorICAgOmNsYXNzOmBzdHJgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgKGJ1dCBub3QgOmNsYXNzOmB1bmljb2RlYCkuCisKKyAgIEEgOmNsYXNzOmBtZW1vcnl2aWV3YCBoYXMgdGhlIG5vdGlvbiBvZiBhbiAqZWxlbWVudCosIHdoaWNoIGlzIHRoZQorICAgYXRvbWljIG1lbW9yeSB1bml0IGhhbmRsZWQgYnkgdGhlIG9yaWdpbmF0aW5nIG9iamVjdCAqb2JqKi4gIEZvciBtYW55CisgICBzaW1wbGUgdHlwZXMgc3VjaCBhcyA6Y2xhc3M6YHN0cmAgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCwgYW4gZWxlbWVudAorICAgaXMgYSBzaW5nbGUgYnl0ZSwgYnV0IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzIG1heSBleHBvc2UgbGFyZ2VyIGVsZW1lbnRzLgorCisgICBgYGxlbih2aWV3KWBgIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbWVtb3J5dmlldywKKyAgICp2aWV3Ki4gIFRoZSA6Y2xhc3M6YH5tZW1vcnl2aWV3Lml0ZW1zaXplYCBhdHRyaWJ1dGUgd2lsbCBnaXZlIHlvdSB0aGUKKyAgIG51bWJlciBvZiBieXRlcyBpbiBhIHNpbmdsZSBlbGVtZW50LgorCisgICBBIDpjbGFzczpgbWVtb3J5dmlld2Agc3VwcG9ydHMgc2xpY2luZyB0byBleHBvc2UgaXRzIGRhdGEuICBUYWtpbmcgYSBzaW5nbGUKKyAgIGluZGV4IHdpbGwgcmV0dXJuIGEgc2luZ2xlIGVsZW1lbnQgYXMgYSA6Y2xhc3M6YHN0cmAgb2JqZWN0LiAgRnVsbAorICAgc2xpY2luZyB3aWxsIHJlc3VsdCBpbiBhIHN1YnZpZXc6OgorCisgICAgICA+Pj4gdiA9IG1lbW9yeXZpZXcoJ2FiY2VmZycpCisgICAgICA+Pj4gdlsxXQorICAgICAgJ2InCisgICAgICA+Pj4gdlstMV0KKyAgICAgICdnJworICAgICAgPj4+IHZbMTo0XQorICAgICAgPG1lbW9yeSBhdCAweDc3YWIyOD4KKyAgICAgID4+PiB2WzE6NF0udG9ieXRlcygpCisgICAgICAnYmNlJworCisgICBJZiB0aGUgb2JqZWN0IHRoZSBtZW1vcnl2aWV3IGlzIG92ZXIgc3VwcG9ydHMgY2hhbmdpbmcgaXRzIGRhdGEsIHRoZQorICAgbWVtb3J5dmlldyBzdXBwb3J0cyBzbGljZSBhc3NpZ25tZW50OjoKKworICAgICAgPj4+IGRhdGEgPSBieXRlYXJyYXkoJ2FiY2VmZycpCisgICAgICA+Pj4gdiA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgID4+PiB2LnJlYWRvbmx5CisgICAgICBGYWxzZQorICAgICAgPj4+IHZbMF0gPSAneicKKyAgICAgID4+PiBkYXRhCisgICAgICBieXRlYXJyYXkoYid6YmNlZmcnKQorICAgICAgPj4+IHZbMTo0XSA9ICcxMjMnCisgICAgICA+Pj4gZGF0YQorICAgICAgYnl0ZWFycmF5KGInejEyM2ZnJykKKyAgICAgID4+PiB2WzJdID0gJ3NwYW0nCisgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICBWYWx1ZUVycm9yOiBjYW5ub3QgbW9kaWZ5IHNpemUgb2YgbWVtb3J5dmlldyBvYmplY3QKKworICAgTm90aWNlIGhvdyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5dmlldyBvYmplY3QgY2Fubm90IGJlIGNoYW5nZWQuCisKKyAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHR3byBtZXRob2RzOgorCisgICAuLiBtZXRob2Q6OiB0b2J5dGVzKCkKKworICAgICAgUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgYXMgYSBieXRlc3RyaW5nIChhbiBvYmplY3Qgb2YgY2xhc3MKKyAgICAgIDpjbGFzczpgc3RyYCkuIDo6CisKKyAgICAgICAgID4+PiBtID0gbWVtb3J5dmlldygiYWJjIikKKyAgICAgICAgID4+PiBtLnRvYnl0ZXMoKQorICAgICAgICAgJ2FiYycKKworICAgLi4gbWV0aG9kOjogdG9saXN0KCkKKworICAgICAgUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgYXMgYSBsaXN0IG9mIGludGVnZXJzLiA6OgorCisgICAgICAgICA+Pj4gbWVtb3J5dmlldygiYWJjIikudG9saXN0KCkKKyAgICAgICAgIFs5NywgOTgsIDk5XQorCisgICBUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIHJlYWRvbmx5IGF0dHJpYnV0ZXMgYXZhaWxhYmxlOgorCisgICAuLiBhdHRyaWJ1dGU6OiBmb3JtYXQKKworICAgICAgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZm9ybWF0IChpbiA6bW9kOmBzdHJ1Y3RgIG1vZHVsZSBzdHlsZSkgZm9yIGVhY2gKKyAgICAgIGVsZW1lbnQgaW4gdGhlIHZpZXcuICBUaGlzIGRlZmF1bHRzIHRvIGBgJ0InYGAsIGEgc2ltcGxlIGJ5dGVzdHJpbmcuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGl0ZW1zaXplCisKKyAgICAgIFRoZSBzaXplIGluIGJ5dGVzIG9mIGVhY2ggZWxlbWVudCBvZiB0aGUgbWVtb3J5dmlldy4KKworICAgLi4gYXR0cmlidXRlOjogc2hhcGUKKworICAgICAgQSB0dXBsZSBvZiBpbnRlZ2VycyB0aGUgbGVuZ3RoIG9mIDphdHRyOmBuZGltYCBnaXZpbmcgdGhlIHNoYXBlIG9mIHRoZQorICAgICAgbWVtb3J5IGFzIGEgTi1kaW1lbnNpb25hbCBhcnJheS4KKworICAgLi4gYXR0cmlidXRlOjogbmRpbQorCisgICAgICBBbiBpbnRlZ2VyIGluZGljYXRpbmcgaG93IG1hbnkgZGltZW5zaW9ucyBvZiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IHRoZQorICAgICAgbWVtb3J5IHJlcHJlc2VudHMuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0cmlkZXMKKworICAgICAgQSB0dXBsZSBvZiBpbnRlZ2VycyB0aGUgbGVuZ3RoIG9mIDphdHRyOmBuZGltYCBnaXZpbmcgdGhlIHNpemUgaW4gYnl0ZXMgdG8KKyAgICAgIGFjY2VzcyBlYWNoIGVsZW1lbnQgZm9yIGVhY2ggZGltZW5zaW9uIG9mIHRoZSBhcnJheS4KKworICAgLi4gYXR0cmlidXRlOjogcmVhZG9ubHkKKworICAgICAgQSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWVtb3J5IGlzIHJlYWQgb25seS4KKworICAgLi4gbWVtb3J5dmlldy5zdWJvZmZzZXRzIGlzbid0IGRvY3VtZW50ZWQgYmVjYXVzZSBpdCBvbmx5IHNlZW1zIHVzZWZ1bCBmb3IgQworCisKIC4uIF90eXBlY29udGV4dG1hbmFnZXI6CiAKIENvbnRleHQgTWFuYWdlciBUeXBlcwpAQCAtMjc0MiwxMCArMzAzMCw2IEBACiAuLiBbI10gVG8gZm9ybWF0IG9ubHkgYSB0dXBsZSB5b3Ugc2hvdWxkIHRoZXJlZm9yZSBwcm92aWRlIGEgc2luZ2xldG9uIHR1cGxlIHdob3NlIG9ubHkKICAgIGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC4KIAotLi4gWyNdIFRoZXNlIG51bWJlcnMgYXJlIGZhaXJseSBhcmJpdHJhcnkuICBUaGV5IGFyZSBpbnRlbmRlZCB0byBhdm9pZCBwcmludGluZyBlbmRsZXNzCi0gICBzdHJpbmdzIG9mIG1lYW5pbmdsZXNzIGRpZ2l0cyB3aXRob3V0IGhhbXBlcmluZyBjb3JyZWN0IHVzZSBhbmQgd2l0aG91dCBoYXZpbmcKLSAgIHRvIGtub3cgdGhlIGV4YWN0IHByZWNpc2lvbiBvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMgb24gYSBwYXJ0aWN1bGFyIG1hY2hpbmUuCi0KIC4uIFsjXSBUaGUgYWR2YW50YWdlIG9mIGxlYXZpbmcgdGhlIG5ld2xpbmUgb24gaXMgdGhhdCByZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nIGlzCiAgICB0aGVuIGFuIHVuYW1iaWd1b3VzIEVPRiBpbmRpY2F0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSAoaW4gY2FzZXMgd2hlcmUgaXQKICAgIG1pZ2h0IG1hdHRlciwgZm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIG1ha2UgYW4gZXhhY3QgY29weSBvZiBhIGZpbGUgd2hpbGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QgYi9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CmluZGV4IGJiMGJjYzUuLjU5YWMxMTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdApAQCAtMTcsNiArMTcsMTEgQEAKIDpyZWY6YHN0cmluZy1mb3JtYXR0aW5nYCBzZWN0aW9uLiBBbHNvLCBzZWUgdGhlIDptb2Q6YHJlYCBtb2R1bGUgZm9yCiBzdHJpbmcgZnVuY3Rpb25zIGJhc2VkIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHN0cmluZyBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvc3RyaW5nLnB5P3ZpZXc9bWFya3VwPmBfCisKIAogU3RyaW5nIGNvbnN0YW50cwogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTE4LDcgKzEyMyw3IEBACiAKICAgIFRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgY2xhc3MgaGFzIHRoZSBmb2xsb3dpbmcgcHVibGljIG1ldGhvZHM6CiAKLSAgIC4uIG1ldGhvZDo6IGZvcm1hdChmb3JtYXRfc3RyaW5nLCAqYXJncywgKmt3YXJncykKKyAgIC4uIG1ldGhvZDo6IGZvcm1hdChmb3JtYXRfc3RyaW5nLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICAgIDptZXRoOmBmb3JtYXRgIGlzIHRoZSBwcmltYXJ5IEFQSSBtZXRob2QuICBJdCB0YWtlcyBhIGZvcm1hdCB0ZW1wbGF0ZQogICAgICAgc3RyaW5nLCBhbmQgYW4gYXJiaXRyYXJ5IHNldCBvZiBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50LgpAQCAtMTQxLDcgKzE0Niw3IEBACiAKICAgICAgIExvb3Agb3ZlciB0aGUgZm9ybWF0X3N0cmluZyBhbmQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9mIHR1cGxlcwogICAgICAgKCpsaXRlcmFsX3RleHQqLCAqZmllbGRfbmFtZSosICpmb3JtYXRfc3BlYyosICpjb252ZXJzaW9uKikuICBUaGlzIGlzIHVzZWQKLSAgICAgIGJ5IDptZXRoOmB2Zm9ybWF0YCB0byBicmVhayB0aGUgc3RyaW5nIGluIHRvIGVpdGhlciBsaXRlcmFsIHRleHQsIG9yCisgICAgICBieSA6bWV0aDpgdmZvcm1hdGAgdG8gYnJlYWsgdGhlIHN0cmluZyBpbnRvIGVpdGhlciBsaXRlcmFsIHRleHQsIG9yCiAgICAgICByZXBsYWNlbWVudCBmaWVsZHMuCiAKICAgICAgIFRoZSB2YWx1ZXMgaW4gdGhlIHR1cGxlIGNvbmNlcHR1YWxseSByZXByZXNlbnQgYSBzcGFuIG9mIGxpdGVyYWwgdGV4dApAQCAtMTkwLDcgKzE5NSw3IEBACiAgICAgICB0aGUgZm9ybWF0IHN0cmluZyAoaW50ZWdlcnMgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBhbmQgc3RyaW5ncyBmb3IKICAgICAgIG5hbWVkIGFyZ3VtZW50cyksIGFuZCBhIHJlZmVyZW5jZSB0byB0aGUgKmFyZ3MqIGFuZCAqa3dhcmdzKiB0aGF0IHdhcwogICAgICAgcGFzc2VkIHRvIHZmb3JtYXQuICBUaGUgc2V0IG9mIHVudXNlZCBhcmdzIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gdGhlc2UKLSAgICAgIHBhcmFtZXRlcnMuICA6bWV0aDpgY2hlY2tfdW51c2VkX2FyZ3NgIGlzIGFzc3VtZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmCisgICAgICBwYXJhbWV0ZXJzLiAgOm1ldGg6YGNoZWNrX3VudXNlZF9hcmdzYCBpcyBhc3N1bWVkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZgogICAgICAgdGhlIGNoZWNrIGZhaWxzLgogCiAgICAuLiBtZXRob2Q6OiBmb3JtYXRfZmllbGQodmFsdWUsIGZvcm1hdF9zcGVjKQpAQCAtMjIyLDMyICsyMjcsNDMgQEAKIFRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6CiAKICAgIC4uIHByb2R1Y3Rpb25saXN0Ojogc2YKLSAgICAgIHJlcGxhY2VtZW50X2ZpZWxkOiAieyIgYGZpZWxkX25hbWVgIFsiISIgYGNvbnZlcnNpb25gXSBbIjoiIGBmb3JtYXRfc3BlY2BdICJ9IgotICAgICAgZmllbGRfbmFtZTogKGBpZGVudGlmaWVyYCB8IGBpbnRlZ2VyYCkgKCIuIiBgYXR0cmlidXRlX25hbWVgIHwgIlsiIGBlbGVtZW50X2luZGV4YCAiXSIpKgorICAgICAgcmVwbGFjZW1lbnRfZmllbGQ6ICJ7IiBbYGZpZWxkX25hbWVgXSBbIiEiIGBjb252ZXJzaW9uYF0gWyI6IiBgZm9ybWF0X3NwZWNgXSAifSIKKyAgICAgIGZpZWxkX25hbWU6IGFyZ19uYW1lICgiLiIgYGF0dHJpYnV0ZV9uYW1lYCB8ICJbIiBgZWxlbWVudF9pbmRleGAgIl0iKSoKKyAgICAgIGFyZ19uYW1lOiBbYGlkZW50aWZpZXJgIHwgYGludGVnZXJgXQogICAgICAgYXR0cmlidXRlX25hbWU6IGBpZGVudGlmaWVyYAogICAgICAgZWxlbWVudF9pbmRleDogYGludGVnZXJgIHwgYGluZGV4X3N0cmluZ2AKICAgICAgIGluZGV4X3N0cmluZzogPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICsKICAgICAgIGNvbnZlcnNpb246ICJyIiB8ICJzIgogICAgICAgZm9ybWF0X3NwZWM6IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj4KIAotSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBzdGFydHMgd2l0aCBhICpmaWVsZF9uYW1lKiwgd2hpY2gKLWNhbiBlaXRoZXIgYmUgYSBudW1iZXIgKGZvciBhIHBvc2l0aW9uYWwgYXJndW1lbnQpLCBvciBhbiBpZGVudGlmaWVyIChmb3IKLWtleXdvcmQgYXJndW1lbnRzKS4gIEZvbGxvd2luZyB0aGlzIGlzIGFuIG9wdGlvbmFsICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXMKK0luIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYSAqZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMKK3RoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkIGFuZCBpbnNlcnRlZAoraW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLgorVGhlICpmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXMKIHByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgJyEnYGAsIGFuZCBhICpmb3JtYXRfc3BlYyosIHdoaWNoIGlzIHByZWNlZGVkCi1ieSBhIGNvbG9uIGBgJzonYGAuCitieSBhIGNvbG9uIGBgJzonYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0IGZvciB0aGUgcmVwbGFjZW1lbnQgdmFsdWUuCiAKIFNlZSBhbHNvIHRoZSA6cmVmOmBmb3JtYXRzcGVjYCBzZWN0aW9uLgogCi1UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBlaXRoZXIgYSBudW1iZXIgb3IgYSBrZXl3b3JkLiAgSWYgaXQncyBhCi1udW1iZXIsIGl0IHJlZmVycyB0byBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIGFuZCBpZiBpdCdzIGEga2V5d29yZCBpdCByZWZlcnMgdG8gYQotbmFtZWQga2V5d29yZCBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2YgaW5kZXggb3IKK1RoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgZWl0aGVyIGEgbnVtYmVyIG9yIGEKK2tleXdvcmQuICBJZiBpdCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBhbmQgaWYgaXQncyBhIGtleXdvcmQsCitpdCByZWZlcnMgdG8gYSBuYW1lZCBrZXl3b3JkIGFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nCithcmUgMCwgMSwgMiwgLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkKK2FuZCB0aGUgbnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuCitUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiBpbmRleCBvcgogYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgJy5uYW1lJ2BgIHNlbGVjdHMgdGhlIG5hbWVkCiBhdHRyaWJ1dGUgdXNpbmcgOmZ1bmM6YGdldGF0dHJgLCB3aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgJ1tpbmRleF0nYGAKIGRvZXMgYW4gaW5kZXggbG9va3VwIHVzaW5nIDpmdW5jOmBfX2dldGl0ZW1fX2AuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZSBvbWl0dGVkLCBzbyBgYCd7fSB7fSdgYCBpcworICAgZXF1aXZhbGVudCB0byBgYCd7MH0gezF9J2BgLgorCiBTb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOjoKIAogICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSIKICAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50ICduYW1lJwogICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyAnd2VpZ2h0JyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmcKICAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50ICdwbGF5ZXJzJy4KQEAgLTMwNSw3ICszMjEsNyBAQAogVGhlIGdlbmVyYWwgZm9ybSBvZiBhICpzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWVyKiBpczoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OiBzZgotICAgZm9ybWF0X3NwZWM6IFtbYGZpbGxgXWBhbGlnbmBdW2BzaWduYF1bI11bMF1bYHdpZHRoYF1bLmBwcmVjaXNpb25gXVtgdHlwZWBdCisgICBmb3JtYXRfc3BlYzogW1tgZmlsbGBdYGFsaWduYF1bYHNpZ25gXVsjXVswXVtgd2lkdGhgXVssXVsuYHByZWNpc2lvbmBdW2B0eXBlYF0KICAgIGZpbGw6IDxhIGNoYXJhY3RlciBvdGhlciB0aGFuICd9Jz4KICAgIGFsaWduOiAiPCIgfCAiPiIgfCAiPSIgfCAiXiIKICAgIHNpZ246ICIrIiB8ICItIiB8ICIgIgpAQCAtMzEzLDExICszMjksMTEgQEAKICAgIHByZWNpc2lvbjogYGludGVnZXJgCiAgICB0eXBlOiAiYiIgfCAiYyIgfCAiZCIgfCAiZSIgfCAiRSIgfCAiZiIgfCAiRiIgfCAiZyIgfCAiRyIgfCAibiIgfCAibyIgfCAicyIgfCAieCIgfCAiWCIgfCAiJSIKIAotVGhlICpmaWxsKiBjaGFyYWN0ZXIgY2FuIGJlIGFueSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnfScgKHdoaWNoIHNpZ25pZmllcyB0aGUKLWVuZCBvZiB0aGUgZmllbGQpLiAgVGhlIHByZXNlbmNlIG9mIGEgZmlsbCBjaGFyYWN0ZXIgaXMgc2lnbmFsZWQgYnkgdGhlICpuZXh0KgotY2hhcmFjdGVyLCB3aGljaCBtdXN0IGJlIG9uZSBvZiB0aGUgYWxpZ25tZW50IG9wdGlvbnMuIElmIHRoZSBzZWNvbmQgY2hhcmFjdGVyCi1vZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBhIHZhbGlkIGFsaWdubWVudCBvcHRpb24sIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IGJvdGgKLXRoZSBmaWxsIGNoYXJhY3RlciBhbmQgdGhlIGFsaWdubWVudCBvcHRpb24gYXJlIGFic2VudC4KK1RoZSAqZmlsbCogY2hhcmFjdGVyIGNhbiBiZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gJ3snIG9yICd9Jy4gIFRoZSBwcmVzZW5jZQorb2YgYSBmaWxsIGNoYXJhY3RlciBpcyBzaWduYWxlZCBieSB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyBpdCwgd2hpY2ggbXVzdCBiZQorb25lIG9mIHRoZSBhbGlnbm1lbnQgb3B0aW9ucy4gIElmIHRoZSBzZWNvbmQgY2hhcmFjdGVyIG9mICpmb3JtYXRfc3BlYyogaXMgbm90CithIHZhbGlkIGFsaWdubWVudCBvcHRpb24sIHRoZW4gaXQgaXMgYXNzdW1lZCB0aGF0IGJvdGggdGhlIGZpbGwgY2hhcmFjdGVyIGFuZAordGhlIGFsaWdubWVudCBvcHRpb24gYXJlIGFic2VudC4KIAogVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czoKIApAQCAtMzI1LDEwICszNDEsMTAgQEAKICAgIHwgT3B0aW9uICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKICAgIHwgYGAnPCdgYCB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlIHwKLSAgIHwgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgYGAnPidgYCB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlICAgICAgICAgIHwKLSAgIHwgICAgICAgICB8IGF2YWlsYWJsZSBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICB8IGF2YWlsYWJsZSBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbnVtYmVycykuICAgICAgIHwKICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgYGAnPSdgYCB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgIHwKICAgIHwgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzIHwKQEAgLTM2Myw2ICszNzksMTMgQEAKIGhleGFkZWNpbWFsIG91dHB1dC4gIElmIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSBwcmVmaXhlZAogYnkgYGAnMGInYGAsIGBgJzBvJ2BgLCBvciBgYCcweCdgYCwgcmVzcGVjdGl2ZWx5LgogCitUaGUgYGAnLCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4KK0ZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGAnbidgYCBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlCitpbnN0ZWFkLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgQWRkZWQgdGhlIGBgJywnYGAgb3B0aW9uIChzZWUgYWxzbyA6cGVwOmAzNzhgKS4KKwogKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdAogc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuCiAKQEAgLTQ1NCw3ICs0NzcsNyBAQAogICAgfCAgICAgICAgIHwgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyBhbHNvICAgICAgfAogICAgfCAgICAgICAgIHwgcmVtb3ZlZCBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGRpZ2l0cyBmb2xsb3dpbmcgaXQuICAgfAogICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgIHwgUG9zdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSAgICAgfAorICAgfCAgICAgICAgIHwgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgICAgfAogICAgfCAgICAgICAgIHwgemVybywgYW5kIG5hbnMsIGFyZSBmb3JtYXR0ZWQgYXMgYGBpbmZgYCwgYGAtaW5mYGAsICAgICAgfAogICAgfCAgICAgICAgIHwgYGAwYGAsIGBgLTBgYCBhbmQgYGBuYW5gYCByZXNwZWN0aXZlbHksIHJlZ2FyZGxlc3Mgb2YgICAgfAogICAgfCAgICAgICAgIHwgdGhlIHByZWNpc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNDg4LDcgKzUxMSw3IEBACiAKIEluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkIGBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlCiBhZGRpdGlvbiBvZiB0aGUgYGB7fWBgIGFuZCB3aXRoIGBgOmBgIHVzZWQgaW5zdGVhZCBvZiBgYCVgYC4KLUZvciBleGFtcGxlLCBgYCclMDMuMmYnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG8gYGAnezA6MDMuMmZ9J2BgLgorRm9yIGV4YW1wbGUsIGBgJyUwMy4yZidgYCBjYW4gYmUgdHJhbnNsYXRlZCB0byBgYCd7OjAzLjJmfSdgYC4KIAogVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd24gaW4gdGhlCiBmb2xsb3cgZXhhbXBsZXMuCkBAIC00OTcsNiArNTIwLDggQEAKIAogICAgPj4+ICd7MH0sIHsxfSwgezJ9Jy5mb3JtYXQoJ2EnLCAnYicsICdjJykKICAgICdhLCBiLCBjJworICAgPj4+ICd7fSwge30sIHt9Jy5mb3JtYXQoJ2EnLCAnYicsICdjJykgICMgMi43KyBvbmx5CisgICAnYSwgYiwgYycKICAgID4+PiAnezJ9LCB7MX0sIHswfScuZm9ybWF0KCdhJywgJ2InLCAnYycpCiAgICAnYywgYiwgYScKICAgID4+PiAnezJ9LCB7MX0sIHswfScuZm9ybWF0KConYWJjJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZQpAQCAtNTM2LDI3ICs1NjEsMjcgQEAKIAogUmVwbGFjaW5nIGBgJXNgYCBhbmQgYGAlcmBgOjoKIAotICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7MCFyfTsgc3RyKCkgZG9lc24ndDogezEhc30iLmZvcm1hdCgndGVzdDEnLCAndGVzdDInKQorICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2Vzbid0OiB7IXN9Ii5mb3JtYXQoJ3Rlc3QxJywgJ3Rlc3QyJykKICAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiAndGVzdDEnOyBzdHIoKSBkb2Vzbid0OiB0ZXN0MiIKIAogQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDo6CiAKLSAgID4+PiAnezA6PDMwfScuZm9ybWF0KCdsZWZ0IGFsaWduZWQnKQorICAgPj4+ICd7OjwzMH0nLmZvcm1hdCgnbGVmdCBhbGlnbmVkJykKICAgICdsZWZ0IGFsaWduZWQgICAgICAgICAgICAgICAgICAnCi0gICA+Pj4gJ3swOj4zMH0nLmZvcm1hdCgncmlnaHQgYWxpZ25lZCcpCisgICA+Pj4gJ3s6PjMwfScuZm9ybWF0KCdyaWdodCBhbGlnbmVkJykKICAgICcgICAgICAgICAgICAgICAgIHJpZ2h0IGFsaWduZWQnCi0gICA+Pj4gJ3swOl4zMH0nLmZvcm1hdCgnY2VudGVyZWQnKQorICAgPj4+ICd7Ol4zMH0nLmZvcm1hdCgnY2VudGVyZWQnKQogICAgJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgICcKLSAgID4+PiAnezA6Kl4zMH0nLmZvcm1hdCgnY2VudGVyZWQnKSAgIyB1c2UgJyonIGFzIGEgZmlsbCBjaGFyCisgICA+Pj4gJ3s6Kl4zMH0nLmZvcm1hdCgnY2VudGVyZWQnKSAgIyB1c2UgJyonIGFzIGEgZmlsbCBjaGFyCiAgICAnKioqKioqKioqKipjZW50ZXJlZCoqKioqKioqKioqJwogCiBSZXBsYWNpbmcgYGAlK2ZgYCwgYGAlLWZgYCwgYW5kIGBgJSBmYGAgYW5kIHNwZWNpZnlpbmcgYSBzaWduOjoKIAotICAgPj4+ICd7MDorZn07IHswOitmfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5cworICAgPj4+ICd7OitmfTsgezorZn0nLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXMKICAgICcrMy4xNDAwMDA7IC0zLjE0MDAwMCcKLSAgID4+PiAnezA6IGZ9OyB7MDogZn0nLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzCisgICA+Pj4gJ3s6IGZ9OyB7OiBmfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnMKICAgICcgMy4xNDAwMDA7IC0zLjE0MDAwMCcKLSAgID4+PiAnezA6LWZ9OyB7MDotZn0nLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzICd7MDpmfTsgezA6Zn0nCisgICA+Pj4gJ3s6LWZ9OyB7Oi1mfScuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgJ3s6Zn07IHs6Zn0nCiAgICAnMy4xNDAwMDA7IC0zLjE0MDAwMCcKIAogUmVwbGFjaW5nIGBgJXhgYCBhbmQgYGAlb2BgIGFuZCBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBkaWZmZXJlbnQgYmFzZXM6OgpAQCAtNTY4LDMxICs1OTMsMzYgQEAKICAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKQogICAgJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwJwogCitVc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOjoKKworICAgPj4+ICd7Oix9Jy5mb3JtYXQoMTIzNDU2Nzg5MCkKKyAgICcxLDIzNCw1NjcsODkwJworCiBFeHByZXNzaW5nIGEgcGVyY2VudGFnZTo6CiAKICAgID4+PiBwb2ludHMgPSAxOS41CiAgICA+Pj4gdG90YWwgPSAyMgotICAgPj4+ICdDb3JyZWN0IGFuc3dlcnM6IHswOi4yJX0uJy5mb3JtYXQocG9pbnRzL3RvdGFsKQorICAgPj4+ICdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfS4nLmZvcm1hdChwb2ludHMvdG90YWwpCiAgICAnQ29ycmVjdCBhbnN3ZXJzOiA4OC42NCUnCiAKIFVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzo6CiAKICAgID4+PiBpbXBvcnQgZGF0ZXRpbWUKICAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OCkKLSAgID4+PiAnezA6JVktJW0tJWQgJUg6JU06JVN9Jy5mb3JtYXQoZCkKKyAgID4+PiAnezolWS0lbS0lZCAlSDolTTolU30nLmZvcm1hdChkKQogICAgJzIwMTAtMDctMDQgMTI6MTU6NTgnCiAKIE5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6OgogCiAgICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcCgnPF4+JywgWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddKToKLSAgIC4uLiAgICAgJ3swOnthbGlnbn17ZmlsbH0xNn0nLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbikKKyAgIC4uLiAgICAgJ3swOntmaWxsfXthbGlnbn0xNn0nLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbikKICAgIC4uLgogICAgJ2xlZnQ8PDw8PDw8PDw8PDwnCiAgICAnXl5eXl5jZW50ZXJeXl5eXicKICAgICc+Pj4+Pj4+Pj4+PnJpZ2h0JwogICAgPj4+CiAgICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXQotICAgPj4+ICd7MDowMlh9ezE6MDJYfXsyOjAyWH17MzowMlh9Jy5mb3JtYXQoKm9jdGV0cykKKyAgID4+PiAnezowMlh9ezowMlh9ezowMlh9ezowMlh9Jy5mb3JtYXQoKm9jdGV0cykKICAgICdDMEE4MDAwMScKICAgID4+PiBpbnQoXywgMTYpCiAgICAzMjMyMjM1NTIxCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0IGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAppbmRleCBmMWYwMTlkLi4wYjgwNTJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKQEAgLTE2OSwzOCArMTY5LDM4IEBACiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIHwgYGBjYGAgIHwgOmN0eXBlOmBjaGFyYCAgICAgICAgICAgfCBzdHJpbmcgb2YgbGVuZ3RoIDEgfCAxICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgYmBgICB8IDpjdHlwZTpgc2lnbmVkIGNoYXJgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBiYGAgIHwgOmN0eXBlOmBzaWduZWQgY2hhcmAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgQmBgICB8IDpjdHlwZTpgdW5zaWduZWQgY2hhcmAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wgYGBCYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBjaGFyYCAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiB8IGBgP2BgICB8IDpjdHlwZTpgX0Jvb2xgICAgICAgICAgIHwgYm9vbCAgICAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCBcKDEpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGhgYCAgfCA6Y3R5cGU6YHNob3J0YCAgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8IDIgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgaGBgICB8IDpjdHlwZTpgc2hvcnRgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYEhgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIHNob3J0YCB8IGludGVnZXIgICAgICAgICAgICB8IDIgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgSGBgICB8IDpjdHlwZTpgdW5zaWduZWQgc2hvcnRgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGlgYCAgfCA6Y3R5cGU6YGludGAgICAgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgaWBgICB8IDpjdHlwZTpgaW50YCAgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYElgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIGludGAgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgSWBgICB8IDpjdHlwZTpgdW5zaWduZWQgaW50YCAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGxgYCAgfCA6Y3R5cGU6YGxvbmdgICAgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgbGBgICB8IDpjdHlwZTpgbG9uZ2AgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYExgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIGxvbmdgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Cit8IGBgTGBgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZ2AgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYHFgYCAgfCA6Y3R5cGU6YGxvbmcgbG9uZ2AgICAgICB8IGludGVnZXIgICAgICAgICAgICB8IDggICAgICAgICAgICAgIHwgXCgyKSAgICAgICB8Cit8IGBgcWBgICB8IDpjdHlwZTpgbG9uZyBsb25nYCAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpLCBcKDMpIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYFFgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgICB8IGludGVnZXIgICAgICAgICAgICB8IDggICAgICAgICAgICAgIHwgXCgyKSAgICAgICB8Cit8IGBgUWBgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZyAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpLCBcKDMpIHwKIHwgICAgICAgIHwgbG9uZ2AgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgZmBgICB8IDpjdHlwZTpgZmxvYXRgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKK3wgYGBmYGAgIHwgOmN0eXBlOmBmbG9hdGAgICAgICAgICAgfCBmbG9hdCAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8IFwoNCkgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgZGBgICB8IDpjdHlwZTpgZG91YmxlYCAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKK3wgYGBkYGAgIHwgOmN0eXBlOmBkb3VibGVgICAgICAgICAgfCBmbG9hdCAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICB8IFwoNCkgICAgICAgfAogKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiB8IGBgc2BgICB8IDpjdHlwZTpgY2hhcltdYCAgICAgICAgIHwgc3RyaW5nICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogfCBgYHBgYCAgfCA6Y3R5cGU6YGNoYXJbXWAgICAgICAgICB8IHN0cmluZyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBQYGAgIHwgOmN0eXBlOmB2b2lkIFwqYCAgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8IFwoNCkgICAgICAgfAorfCBgYFBgYCAgfCA6Y3R5cGU6YHZvaWQgXCpgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgXCg1KSwgXCgzKSB8CiArLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC0yMjAsMTEgKzIyMCwyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4yCiAKICgzKQorICAgV2hlbiBhdHRlbXB0aW5nIHRvIHBhY2sgYSBub24taW50ZWdlciB1c2luZyBhbnkgb2YgdGhlIGludGVnZXIgY29udmVyc2lvbgorICAgY29kZXMsIGlmIHRoZSBub24taW50ZWdlciBoYXMgYSA6bWV0aDpgX19pbmRleF9fYCBtZXRob2QgdGhlbiB0aGF0IG1ldGhvZCBpcworICAgY2FsbGVkIHRvIGNvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGFuIGludGVnZXIgYmVmb3JlIHBhY2tpbmcuICBJZiBubworICAgOm1ldGg6YF9faW5kZXhfX2AgbWV0aG9kIGV4aXN0cywgb3IgdGhlIGNhbGwgdG8gOm1ldGg6YF9faW5kZXhfX2AgcmFpc2VzCisgICA6ZXhjOmBUeXBlRXJyb3JgLCB0aGVuIHRoZSA6bWV0aDpgX19pbnRfX2AgbWV0aG9kIGlzIHRyaWVkLiAgSG93ZXZlciwgdGhlIHVzZQorICAgb2YgOm1ldGg6YF9faW50X19gIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIHJhaXNlIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBVc2Ugb2YgdGhlIDptZXRoOmBfX2luZGV4X19gIG1ldGhvZCBmb3Igbm9uLWludGVnZXJzIGlzIG5ldyBpbiAyLjcuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBQcmlvciB0byB2ZXJzaW9uIDIuNywgbm90IGFsbCBpbnRlZ2VyIGNvbnZlcnNpb24gY29kZXMgd291bGQgdXNlIHRoZQorICAgICAgOm1ldGg6YF9faW50X19gIG1ldGhvZCB0byBjb252ZXJ0LCBhbmQgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCB3YXMKKyAgICAgIHJhaXNlZCBvbmx5IGZvciBmbG9hdCBhcmd1bWVudHMuCisKKyg0KQogICAgRm9yIHRoZSBgYCdmJ2BgIGFuZCBgYCdkJ2BgIGNvbnZlcnNpb24gY29kZXMsIHRoZSBwYWNrZWQgcmVwcmVzZW50YXRpb24gdXNlcwogICAgdGhlIElFRUUgNzU0IGJpbmFyeTMyIChmb3IgYGAnZidgYCkgb3IgYmluYXJ5NjQgKGZvciBgYCdkJ2BgKSBmb3JtYXQsCiAgICByZWdhcmRsZXNzIG9mIHRoZSBmbG9hdGluZy1wb2ludCBmb3JtYXQgdXNlZCBieSB0aGUgcGxhdGZvcm0uCiAKLSg0KQorKDUpCiAgICBUaGUgYGAnUCdgYCBmb3JtYXQgY2hhcmFjdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aGUgbmF0aXZlIGJ5dGUgb3JkZXJpbmcKICAgIChzZWxlY3RlZCBhcyB0aGUgZGVmYXVsdCBvciB3aXRoIHRoZSBgYCdAJ2BgIGJ5dGUgb3JkZXIgY2hhcmFjdGVyKS4gVGhlIGJ5dGUKICAgIG9yZGVyIGNoYXJhY3RlciBgYCc9J2BgIGNob29zZXMgdG8gdXNlIGxpdHRsZS0gb3IgYmlnLWVuZGlhbiBvcmRlcmluZyBiYXNlZApAQCAtMjQ3LDE0ICsyNjMsMTQgQEAKIHN0cmluZyAod2hpbGUgYGAnMGMnYGAgbWVhbnMgMCBjaGFyYWN0ZXJzKS4KIAogVGhlIGBgJ3AnYGAgZm9ybWF0IGNoYXJhY3RlciBlbmNvZGVzIGEgIlBhc2NhbCBzdHJpbmciLCBtZWFuaW5nIGEgc2hvcnQKLXZhcmlhYmxlLWxlbmd0aCBzdHJpbmcgc3RvcmVkIGluIGEgZml4ZWQgbnVtYmVyIG9mIGJ5dGVzLiBUaGUgY291bnQgaXMgdGhlIHRvdGFsCi1udW1iZXIgb2YgYnl0ZXMgc3RvcmVkLiAgVGhlIGZpcnN0IGJ5dGUgc3RvcmVkIGlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgb3IKLTI1NSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuICBUaGUgYnl0ZXMgb2YgdGhlIHN0cmluZyBmb2xsb3cuICBJZiB0aGUgc3RyaW5nCi1wYXNzZWQgaW4gdG8gOmZ1bmM6YHBhY2tgIGlzIHRvbyBsb25nIChsb25nZXIgdGhhbiB0aGUgY291bnQgbWludXMgMSksIG9ubHkgdGhlCi1sZWFkaW5nIGNvdW50LTEgYnl0ZXMgb2YgdGhlIHN0cmluZyBhcmUgc3RvcmVkLiAgSWYgdGhlIHN0cmluZyBpcyBzaG9ydGVyIHRoYW4KLWNvdW50LTEsIGl0IGlzIHBhZGRlZCB3aXRoIG51bGwgYnl0ZXMgc28gdGhhdCBleGFjdGx5IGNvdW50IGJ5dGVzIGluIGFsbCBhcmUKLXVzZWQuICBOb3RlIHRoYXQgZm9yIDpmdW5jOmB1bnBhY2tgLCB0aGUgYGAncCdgYCBmb3JtYXQgY2hhcmFjdGVyIGNvbnN1bWVzIGNvdW50Ci1ieXRlcywgYnV0IHRoYXQgdGhlIHN0cmluZyByZXR1cm5lZCBjYW4gbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMuCit2YXJpYWJsZS1sZW5ndGggc3RyaW5nIHN0b3JlZCBpbiBhICpmaXhlZCBudW1iZXIgb2YgYnl0ZXMqLCBnaXZlbiBieSB0aGUgY291bnQuCitUaGUgZmlyc3QgYnl0ZSBzdG9yZWQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBvciAyNTUsIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorVGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgZm9sbG93LiAgSWYgdGhlIHN0cmluZyBwYXNzZWQgaW4gdG8gOmZ1bmM6YHBhY2tgIGlzIHRvbworbG9uZyAobG9uZ2VyIHRoYW4gdGhlIGNvdW50IG1pbnVzIDEpLCBvbmx5IHRoZSBsZWFkaW5nIGBgY291bnQtMWBgIGJ5dGVzIG9mIHRoZQorc3RyaW5nIGFyZSBzdG9yZWQuICBJZiB0aGUgc3RyaW5nIGlzIHNob3J0ZXIgdGhhbiBgYGNvdW50LTFgYCwgaXQgaXMgcGFkZGVkIHdpdGgKK251bGwgYnl0ZXMgc28gdGhhdCBleGFjdGx5IGNvdW50IGJ5dGVzIGluIGFsbCBhcmUgdXNlZC4gIE5vdGUgdGhhdCBmb3IKKzpmdW5jOmB1bnBhY2tgLCB0aGUgYGAncCdgYCBmb3JtYXQgY2hhcmFjdGVyIGNvbnN1bWVzIGNvdW50IGJ5dGVzLCBidXQgdGhhdCB0aGUKK3N0cmluZyByZXR1cm5lZCBjYW4gbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMuCiAKIEZvciB0aGUgYGAnUCdgYCBmb3JtYXQgY2hhcmFjdGVyLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgUHl0aG9uIGludGVnZXIgb3IgbG9uZwogaW50ZWdlciwgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG5lZWRlZCB0byBob2xkIGEgcG9pbnRlciB3aGVuIGl0IGhhcyBiZWVuIGNhc3QgdG8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0IGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKaW5kZXggNmYyZDU1Yi4uNDI1YzUyNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKQEAgLTgxLDYgKzgxLDI0IEBACiAKICAgICAgIFBvcGVuKFsnL2Jpbi9zaCcsICctYycsIGFyZ3NbMF0sIGFyZ3NbMV0sIC4uLl0pCiAKKyAgIC4uIHdhcm5pbmc6OgorCisgICAgICBFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMgdGhhdCBpbmNvcnBvcmF0ZSB1bnNhbml0aXplZCBpbnB1dCBmcm9tIGFuCisgICAgICB1bnRydXN0ZWQgc291cmNlIG1ha2VzIGEgcHJvZ3JhbSB2dWxuZXJhYmxlIHRvIGBzaGVsbCBpbmplY3Rpb24KKyAgICAgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoZWxsX2luamVjdGlvbiNTaGVsbF9pbmplY3Rpb24+YF8sCisgICAgICBhIHNlcmlvdXMgc2VjdXJpdHkgZmxhdyB3aGljaCBjYW4gcmVzdWx0IGluIGFyYml0cmFyeSBjb21tYW5kIGV4ZWN1dGlvbi4KKyAgICAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIHVzZSBvZiAqc2hlbGw9VHJ1ZSogaXMgKipzdHJvbmdseSBkaXNjb3VyYWdlZCoqIGluIGNhc2VzCisgICAgICB3aGVyZSB0aGUgY29tbWFuZCBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZnJvbSBleHRlcm5hbCBpbnB1dDo6CisKKyAgICAgICAgID4+PiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IGNhbGwKKyAgICAgICAgID4+PiBmaWxlbmFtZSA9IGlucHV0KCJXaGF0IGZpbGUgd291bGQgeW91IGxpa2UgdG8gZGlzcGxheT9cbiIpCisgICAgICAgICBXaGF0IGZpbGUgd291bGQgeW91IGxpa2UgdG8gZGlzcGxheT8KKyAgICAgICAgIG5vbl9leGlzdGVudDsgcm0gLXJmIC8gIworICAgICAgICAgPj4+IGNhbGwoImNhdCAiICsgZmlsZW5hbWUsIHNoZWxsPVRydWUpICMgVWgtb2guIFRoaXMgd2lsbCBlbmQgYmFkbHkuLi4KKworICAgICAgKnNoZWxsPUZhbHNlKiBkb2VzIG5vdCBzdWZmZXIgZnJvbSB0aGlzIHZ1bG5lcmFiaWxpdHk7IHRoZSBhYm92ZSBOb3RlIG1heSBiZQorICAgICAgaGVscGZ1bCBpbiBnZXR0aW5nIGNvZGUgdXNpbmcgKnNoZWxsPUZhbHNlKiB0byB3b3JrLgorCiAgICBPbiBXaW5kb3dzOiB0aGUgOmNsYXNzOmBQb3BlbmAgY2xhc3MgdXNlcyBDcmVhdGVQcm9jZXNzKCkgdG8gZXhlY3V0ZSB0aGUgY2hpbGQKICAgIHByb2dyYW0sIHdoaWNoIG9wZXJhdGVzIG9uIHN0cmluZ3MuICBJZiAqYXJncyogaXMgYSBzZXF1ZW5jZSwgaXQgd2lsbCBiZQogICAgY29udmVydGVkIHRvIGEgc3RyaW5nIHVzaW5nIHRoZSA6bWV0aDpgbGlzdDJjbWRsaW5lYCBtZXRob2QuICBQbGVhc2Ugbm90ZSB0aGF0CkBAIC0xOTYsNiArMjE0LDEzIEBACiAKICAgICAgID4+PiByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKFsibHMiLCAiLWwiXSkKIAorICAgLi4gd2FybmluZzo6CisKKyAgICAgIExpa2UgOm1ldGg6YFBvcGVuLndhaXRgLCB0aGlzIHdpbGwgZGVhZGxvY2sgd2hlbiB1c2luZworICAgICAgYGBzdGRvdXQ9UElQRWBgIGFuZC9vciBgYHN0ZGVycj1QSVBFYGAgYW5kIHRoZSBjaGlsZCBwcm9jZXNzCisgICAgICBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byBhIHBpcGUgc3VjaCB0aGF0IGl0IGJsb2NrcyB3YWl0aW5nCisgICAgICBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyIHRvIGFjY2VwdCBtb3JlIGRhdGEuCisKIAogLi4gZnVuY3Rpb246OiBjaGVja19jYWxsKCpwb3BlbmFyZ3MsICoqa3dhcmdzKQogCkBAIC0yMTEsNiArMjM2LDM1IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCisgICAuLiB3YXJuaW5nOjoKKworICAgICAgU2VlIHRoZSB3YXJuaW5nIGZvciA6ZnVuYzpgY2FsbGAuCisKKworLi4gZnVuY3Rpb246OiBjaGVja19vdXRwdXQoKnBvcGVuYXJncywgKiprd2FyZ3MpCisKKyAgIFJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBhIGJ5dGUgc3RyaW5nLgorCisgICBJZiB0aGUgZXhpdCBjb2RlIHdhcyBub24temVybyBpdCByYWlzZXMgYSA6ZXhjOmBDYWxsZWRQcm9jZXNzRXJyb3JgLiAgVGhlCisgICA6ZXhjOmBDYWxsZWRQcm9jZXNzRXJyb3JgIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZQorICAgOmF0dHI6YHJldHVybmNvZGVgCisgICBhdHRyaWJ1dGUgYW5kIG91dHB1dCBpbiB0aGUgOmF0dHI6YG91dHB1dGAgYXR0cmlidXRlLgorCisgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yLiAgRXhhbXBsZTo6CisKKyAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQorICAgICAgJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBPY3QgMTggIDIwMDcgL2Rldi9udWxsXG4nCisKKyAgIFRoZSBzdGRvdXQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LgorICAgVG8gY2FwdHVyZSBzdGFuZGFyZCBlcnJvciBpbiB0aGUgcmVzdWx0LCB1c2UgYGBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVRgYDo6CisKKyAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgIC4uLiAgICAgWyIvYmluL3NoIiwgIi1jIiwgImxzIG5vbl9leGlzdGVudF9maWxlOyBleGl0IDAiXSwKKyAgICAgIC4uLiAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKwogCiBFeGNlcHRpb25zCiBeXl5eXl5eXl5eCkBAIC0yMTgsNyArMjcyLDcgQEAKIEV4Y2VwdGlvbnMgcmFpc2VkIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBiZWZvcmUgdGhlIG5ldyBwcm9ncmFtIGhhcyBzdGFydGVkIHRvCiBleGVjdXRlLCB3aWxsIGJlIHJlLXJhaXNlZCBpbiB0aGUgcGFyZW50LiAgQWRkaXRpb25hbGx5LCB0aGUgZXhjZXB0aW9uIG9iamVjdAogd2lsbCBoYXZlIG9uZSBleHRyYSBhdHRyaWJ1dGUgY2FsbGVkIDphdHRyOmBjaGlsZF90cmFjZWJhY2tgLCB3aGljaCBpcyBhIHN0cmluZwotY29udGFpbmluZyB0cmFjZWJhY2sgaW5mb3JtYXRpb24gZnJvbSB0aGUgY2hpbGRzIHBvaW50IG9mIHZpZXcuCitjb250YWluaW5nIHRyYWNlYmFjayBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjaGlsZCdzIHBvaW50IG9mIHZpZXcuCiAKIFRoZSBtb3N0IGNvbW1vbiBleGNlcHRpb24gcmFpc2VkIGlzIDpleGM6YE9TRXJyb3JgLiAgVGhpcyBvY2N1cnMsIGZvciBleGFtcGxlLAogd2hlbiB0cnlpbmcgdG8gZXhlY3V0ZSBhIG5vbi1leGlzdGVudCBmaWxlLiAgQXBwbGljYXRpb25zIHNob3VsZCBwcmVwYXJlIGZvcgpAQCAtMjU4LDkgKzMxMiwxMCBAQAogCiAgICAuLiB3YXJuaW5nOjoKIAotICAgICAgVGhpcyB3aWxsIGRlYWRsb2NrIGlmIHRoZSBjaGlsZCBwcm9jZXNzIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEKLSAgICAgIHN0ZG91dCBvciBzdGRlcnIgcGlwZSBzdWNoIHRoYXQgaXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlcgotICAgICAgdG8gYWNjZXB0IG1vcmUgZGF0YS4gIFVzZSA6bWV0aDpgY29tbXVuaWNhdGVgIHRvIGF2b2lkIHRoYXQuCisgICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgd2hlbiB1c2luZyBgYHN0ZG91dD1QSVBFYGAgYW5kL29yCisgICAgICBgYHN0ZGVycj1QSVBFYGAgYW5kIHRoZSBjaGlsZCBwcm9jZXNzIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvCisgICAgICBhIHBpcGUgc3VjaCB0aGF0IGl0IGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgT1MgcGlwZSBidWZmZXIgdG8KKyAgICAgIGFjY2VwdCBtb3JlIGRhdGEuICBVc2UgOm1ldGg6YGNvbW11bmljYXRlYCB0byBhdm9pZCB0aGF0LgogCiAKIC4uIG1ldGhvZDo6IFBvcGVuLmNvbW11bmljYXRlKGlucHV0PU5vbmUpCkBAIC0yODksOCArMzQ0LDkgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIE9uIFdpbmRvd3Mgb25seSBTSUdURVJNIGlzIHN1cHBvcnRlZCBzbyBmYXIuIEl0J3MgYW4gYWxpYXMgZm9yCi0gICAgICA6bWV0aDpgdGVybWluYXRlYC4KKyAgICAgIE9uIFdpbmRvd3MsIFNJR1RFUk0gaXMgYW4gYWxpYXMgZm9yIDptZXRoOmB0ZXJtaW5hdGVgLiBDVFJMX0NfRVZFTlQgYW5kCisgICAgICBDVFJMX0JSRUFLX0VWRU5UIGNhbiBiZSBzZW50IHRvIHByb2Nlc3NlcyBzdGFydGVkIHdpdGggYSAqY3JlYXRpb25mbGFncyoKKyAgICAgIHBhcmFtZXRlciB3aGljaCBpbmNsdWRlcyBgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CiAKQEAgLTM5NCw4ICs0NTAsMTEgQEAKICAgID09PgogICAgcDEgPSBQb3BlbihbImRtZXNnIl0sIHN0ZG91dD1QSVBFKQogICAgcDIgPSBQb3BlbihbImdyZXAiLCAiaGRhIl0sIHN0ZGluPXAxLnN0ZG91dCwgc3Rkb3V0PVBJUEUpCisgICBwMS5zdGRvdXQuY2xvc2UoKSAgIyBBbGxvdyBwMSB0byByZWNlaXZlIGEgU0lHUElQRSBpZiBwMiBleGl0cy4KICAgIG91dHB1dCA9IHAyLmNvbW11bmljYXRlKClbMF0KIAorVGhlIHAxLnN0ZG91dC5jbG9zZSgpIGNhbGwgYWZ0ZXIgc3RhcnRpbmcgdGhlIHAyIGlzIGltcG9ydGFudCBpbiBvcmRlciBmb3IgcDEKK3RvIHJlY2VpdmUgYSBTSUdQSVBFIGlmIHAyIGV4aXRzIGJlZm9yZSBwMS4KIAogUmVwbGFjaW5nIDpmdW5jOmBvcy5zeXN0ZW1gCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5cy5yc3QgYi9Eb2MvbGlicmFyeS9zeXMucnN0CmluZGV4IGY3YTBhNWQuLmJhMmFlNWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzLnJzdApAQCAtNTMsNiArNTMsMTMgQEAKICAgIGBgbW9kdWxlcy5rZXlzKClgYCBvbmx5IGxpc3RzIHRoZSBpbXBvcnRlZCBtb2R1bGVzLikKIAogCisuLiBmdW5jdGlvbjo6IGNhbGxfdHJhY2luZyhmdW5jLCBhcmdzKQorCisgICBDYWxsIGBgZnVuYygqYXJncylgYCwgd2hpbGUgdHJhY2luZyBpcyBlbmFibGVkLiAgVGhlIHRyYWNpbmcgc3RhdGUgaXMgc2F2ZWQsCisgICBhbmQgcmVzdG9yZWQgYWZ0ZXJ3YXJkcy4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gYSBkZWJ1Z2dlciBmcm9tCisgICBhIGNoZWNrcG9pbnQsIHRvIHJlY3Vyc2l2ZWx5IGRlYnVnIHNvbWUgb3RoZXIgY29kZS4KKworCiAuLiBkYXRhOjogY29weXJpZ2h0CiAKICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvcHlyaWdodCBwZXJ0YWluaW5nIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuCkBAIC0yMDEsNyArMjA4LDcgQEAKIAogICAgQSBzdHJpbmcgZ2l2aW5nIHRoZSBzaXRlLXNwZWNpZmljIGRpcmVjdG9yeSBwcmVmaXggd2hlcmUgdGhlIHBsYXRmb3JtLWRlcGVuZGVudAogICAgUHl0aG9uIGZpbGVzIGFyZSBpbnN0YWxsZWQ7IGJ5IGRlZmF1bHQsIHRoaXMgaXMgYWxzbyBgYCcvdXNyL2xvY2FsJ2BgLiAgVGhpcyBjYW4KLSAgIGJlIHNldCBhdCBidWlsZCB0aW1lIHdpdGggdGhlIDpvcHRpb246YC0tZXhlYy1wcmVmaXhgIGFyZ3VtZW50IHRvIHRoZQorICAgYmUgc2V0IGF0IGJ1aWxkIHRpbWUgd2l0aCB0aGUgYGAtLWV4ZWMtcHJlZml4YGAgYXJndW1lbnQgdG8gdGhlCiAgICA6cHJvZ3JhbTpgY29uZmlndXJlYCBzY3JpcHQuICBTcGVjaWZpY2FsbHksIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzIChlLmcuIHRoZQogICAgOmZpbGU6YHB5Y29uZmlnLmhgIGhlYWRlciBmaWxlKSBhcmUgaW5zdGFsbGVkIGluIHRoZSBkaXJlY3RvcnkgYGBleGVjX3ByZWZpeCArCiAgICAnL2xpYi9weXRob252ZXJzaW9uL2NvbmZpZydgYCwgYW5kIHNoYXJlZCBsaWJyYXJ5IG1vZHVsZXMgYXJlIGluc3RhbGxlZCBpbgpAQCAtMjE5LDE5ICsyMjYsMjUgQEAKIAogICAgRXhpdCBmcm9tIFB5dGhvbi4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgcmFpc2luZyB0aGUgOmV4YzpgU3lzdGVtRXhpdGAKICAgIGV4Y2VwdGlvbiwgc28gY2xlYW51cCBhY3Rpb25zIHNwZWNpZmllZCBieSBmaW5hbGx5IGNsYXVzZXMgb2YgOmtleXdvcmQ6YHRyeWAKLSAgIHN0YXRlbWVudHMgYXJlIGhvbm9yZWQsIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBpbnRlcmNlcHQgdGhlIGV4aXQgYXR0ZW1wdCBhdCBhbgotICAgb3V0ZXIgbGV2ZWwuICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmFyZyogY2FuIGJlIGFuIGludGVnZXIgZ2l2aW5nIHRoZSBleGl0Ci0gICBzdGF0dXMgKGRlZmF1bHRpbmcgdG8gemVybyksIG9yIGFub3RoZXIgdHlwZSBvZiBvYmplY3QuICBJZiBpdCBpcyBhbiBpbnRlZ2VyLAotICAgemVybyBpcyBjb25zaWRlcmVkICJzdWNjZXNzZnVsIHRlcm1pbmF0aW9uIiBhbmQgYW55IG5vbnplcm8gdmFsdWUgaXMgY29uc2lkZXJlZAotICAgImFibm9ybWFsIHRlcm1pbmF0aW9uIiBieSBzaGVsbHMgYW5kIHRoZSBsaWtlLiAgTW9zdCBzeXN0ZW1zIHJlcXVpcmUgaXQgdG8gYmUgaW4KLSAgIHRoZSByYW5nZSAwLTEyNywgYW5kIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdHMgb3RoZXJ3aXNlLiAgU29tZSBzeXN0ZW1zIGhhdmUgYQotICAgY29udmVudGlvbiBmb3IgYXNzaWduaW5nIHNwZWNpZmljIG1lYW5pbmdzIHRvIHNwZWNpZmljIGV4aXQgY29kZXMsIGJ1dCB0aGVzZSBhcmUKLSAgIGdlbmVyYWxseSB1bmRlcmRldmVsb3BlZDsgVW5peCBwcm9ncmFtcyBnZW5lcmFsbHkgdXNlIDIgZm9yIGNvbW1hbmQgbGluZSBzeW50YXgKLSAgIGVycm9ycyBhbmQgMSBmb3IgYWxsIG90aGVyIGtpbmQgb2YgZXJyb3JzLiAgSWYgYW5vdGhlciB0eXBlIG9mIG9iamVjdCBpcyBwYXNzZWQsCi0gICBgYE5vbmVgYCBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgemVybywgYW5kIGFueSBvdGhlciBvYmplY3QgaXMgcHJpbnRlZCB0bwotICAgYGBzeXMuc3RkZXJyYGAgYW5kIHJlc3VsdHMgaW4gYW4gZXhpdCBjb2RlIG9mIDEuICBJbiBwYXJ0aWN1bGFyLAotICAgYGBzeXMuZXhpdCgic29tZSBlcnJvciBtZXNzYWdlIilgYCBpcyBhIHF1aWNrIHdheSB0byBleGl0IGEgcHJvZ3JhbSB3aGVuIGFuCi0gICBlcnJvciBvY2N1cnMuCisgICBzdGF0ZW1lbnRzIGFyZSBob25vcmVkLCBhbmQgaXQgaXMgcG9zc2libGUgdG8gaW50ZXJjZXB0IHRoZSBleGl0IGF0dGVtcHQgYXQKKyAgIGFuIG91dGVyIGxldmVsLgorCisgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmFyZyogY2FuIGJlIGFuIGludGVnZXIgZ2l2aW5nIHRoZSBleGl0IHN0YXR1cworICAgKGRlZmF1bHRpbmcgdG8gemVybyksIG9yIGFub3RoZXIgdHlwZSBvZiBvYmplY3QuICBJZiBpdCBpcyBhbiBpbnRlZ2VyLCB6ZXJvCisgICBpcyBjb25zaWRlcmVkICJzdWNjZXNzZnVsIHRlcm1pbmF0aW9uIiBhbmQgYW55IG5vbnplcm8gdmFsdWUgaXMgY29uc2lkZXJlZAorICAgImFibm9ybWFsIHRlcm1pbmF0aW9uIiBieSBzaGVsbHMgYW5kIHRoZSBsaWtlLiAgTW9zdCBzeXN0ZW1zIHJlcXVpcmUgaXQgdG8gYmUKKyAgIGluIHRoZSByYW5nZSAwLTEyNywgYW5kIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdHMgb3RoZXJ3aXNlLiAgU29tZSBzeXN0ZW1zCisgICBoYXZlIGEgY29udmVudGlvbiBmb3IgYXNzaWduaW5nIHNwZWNpZmljIG1lYW5pbmdzIHRvIHNwZWNpZmljIGV4aXQgY29kZXMsIGJ1dAorICAgdGhlc2UgYXJlIGdlbmVyYWxseSB1bmRlcmRldmVsb3BlZDsgVW5peCBwcm9ncmFtcyBnZW5lcmFsbHkgdXNlIDIgZm9yIGNvbW1hbmQKKyAgIGxpbmUgc3ludGF4IGVycm9ycyBhbmQgMSBmb3IgYWxsIG90aGVyIGtpbmQgb2YgZXJyb3JzLiAgSWYgYW5vdGhlciB0eXBlIG9mCisgICBvYmplY3QgaXMgcGFzc2VkLCBgYE5vbmVgYCBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgemVybywgYW5kIGFueSBvdGhlcgorICAgb2JqZWN0IGlzIHByaW50ZWQgdG8gOmRhdGE6YHN0ZGVycmAgYW5kIHJlc3VsdHMgaW4gYW4gZXhpdCBjb2RlIG9mIDEuICBJbgorICAgcGFydGljdWxhciwgYGBzeXMuZXhpdCgic29tZSBlcnJvciBtZXNzYWdlIilgYCBpcyBhIHF1aWNrIHdheSB0byBleGl0IGEKKyAgIHByb2dyYW0gd2hlbiBhbiBlcnJvciBvY2N1cnMuCisKKyAgIFNpbmNlIDpmdW5jOmBleGl0YCB1bHRpbWF0ZWx5ICJvbmx5IiByYWlzZXMgYW4gZXhjZXB0aW9uLCBpdCB3aWxsIG9ubHkgZXhpdAorICAgdGhlIHByb2Nlc3Mgd2hlbiBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQsIGFuZCB0aGUgZXhjZXB0aW9uIGlzIG5vdAorICAgaW50ZXJjZXB0ZWQuCiAKIAogLi4gZGF0YTo6IGV4aXRmdW5jCkBAIC0zNTgsNiArMzcxLDE4IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgogCisuLiBkYXRhOjogZmxvYXRfcmVwcl9zdHlsZQorCisgICBBIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgOmZ1bmM6YHJlcHJgIGZ1bmN0aW9uIGJlaGF2ZXMgZm9yCisgICBmbG9hdHMuICBJZiB0aGUgc3RyaW5nIGhhcyB2YWx1ZSBgYCdzaG9ydCdgYCB0aGVuIGZvciBhIGZpbml0ZQorICAgZmxvYXQgYGB4YGAsIGBgcmVwcih4KWBgIGFpbXMgdG8gcHJvZHVjZSBhIHNob3J0IHN0cmluZyB3aXRoIHRoZQorICAgcHJvcGVydHkgdGhhdCBgYGZsb2F0KHJlcHIoeCkpID09IHhgYC4gIFRoaXMgaXMgdGhlIHVzdWFsIGJlaGF2aW91cgorICAgaW4gUHl0aG9uIDIuNyBhbmQgbGF0ZXIuICBPdGhlcndpc2UsIGBgZmxvYXRfcmVwcl9zdHlsZWBgIGhhcyB2YWx1ZQorICAgYGAnbGVnYWN5J2BgIGFuZCBgYHJlcHIoeClgYCBiZWhhdmVzIGluIHRoZSBzYW1lIHdheSBhcyBpdCBkaWQgaW4KKyAgIHZlcnNpb25zIG9mIFB5dGhvbiBwcmlvciB0byAyLjcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCiAKIC4uIGZ1bmN0aW9uOjogZ2V0Y2hlY2tpbnRlcnZhbCgpCiAKQEAgLTQ4Miw5ICs1MDcsMTUgQEAKIAogLi4gZnVuY3Rpb246OiBnZXR3aW5kb3dzdmVyc2lvbigpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgZml2ZSBjb21wb25lbnRzLCBkZXNjcmliaW5nIHRoZSBXaW5kb3dzIHZlcnNpb24KLSAgIGN1cnJlbnRseSBydW5uaW5nLiAgVGhlIGVsZW1lbnRzIGFyZSAqbWFqb3IqLCAqbWlub3IqLCAqYnVpbGQqLCAqcGxhdGZvcm0qLCBhbmQKLSAgICp0ZXh0Ki4gICp0ZXh0KiBjb250YWlucyBhIHN0cmluZyB3aGlsZSBhbGwgb3RoZXIgdmFsdWVzIGFyZSBpbnRlZ2Vycy4KKyAgIFJldHVybiBhIG5hbWVkIHR1cGxlIGRlc2NyaWJpbmcgdGhlIFdpbmRvd3MgdmVyc2lvbgorICAgY3VycmVudGx5IHJ1bm5pbmcuICBUaGUgbmFtZWQgZWxlbWVudHMgYXJlICptYWpvciosICptaW5vciosCisgICAqYnVpbGQqLCAqcGxhdGZvcm0qLCAqc2VydmljZV9wYWNrKiwgKnNlcnZpY2VfcGFja19taW5vciosCisgICAqc2VydmljZV9wYWNrX21ham9yKiwgKnN1aXRlX21hc2sqLCBhbmQgKnByb2R1Y3RfdHlwZSouCisgICAqc2VydmljZV9wYWNrKiBjb250YWlucyBhIHN0cmluZyB3aGlsZSBhbGwgb3RoZXIgdmFsdWVzIGFyZQorICAgaW50ZWdlcnMuIFRoZSBjb21wb25lbnRzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIGJ5IG5hbWUsIHNvCisgICBgYHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzBdYGAgaXMgZXF1aXZhbGVudCB0bworICAgYGBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKS5tYWpvcmBgLiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByaW9yCisgICB2ZXJzaW9ucywgb25seSB0aGUgZmlyc3QgNSBlbGVtZW50cyBhcmUgcmV0cmlldmFibGUgYnkgaW5kZXhpbmcuCiAKICAgICpwbGF0Zm9ybSogbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKIApAQCAtNTAwLDEyICs1MzEsMzEgQEAKICAgIHwgOmNvbnN0OmAzIChWRVJfUExBVEZPUk1fV0lOMzJfQ0UpYCAgICAgIHwgV2luZG93cyBDRSAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLSAgIFRoaXMgZnVuY3Rpb24gd3JhcHMgdGhlIFdpbjMyIDpjZnVuYzpgR2V0VmVyc2lvbkV4YCBmdW5jdGlvbjsgc2VlIHRoZSBNaWNyb3NvZnQKLSAgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZmllbGRzLgorICAgKnByb2R1Y3RfdHlwZSogbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA6Y29uc3Q6YDEgKFZFUl9OVF9XT1JLU1RBVElPTilgICAgICAgIHwgVGhlIHN5c3RlbSBpcyBhIHdvcmtzdGF0aW9uLiAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmAyIChWRVJfTlRfRE9NQUlOX0NPTlRST0xMRVIpYCB8IFRoZSBzeXN0ZW0gaXMgYSBkb21haW4gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29udHJvbGxlci4gICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmAzIChWRVJfTlRfU0VSVkVSKWAgICAgICAgICAgICB8IFRoZSBzeXN0ZW0gaXMgYSBzZXJ2ZXIsIGJ1dCBub3QgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYSBkb21haW4gY29udHJvbGxlci4gICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCisgICBUaGlzIGZ1bmN0aW9uIHdyYXBzIHRoZSBXaW4zMiA6Y2Z1bmM6YEdldFZlcnNpb25FeGAgZnVuY3Rpb247IHNlZSB0aGUKKyAgIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIG9uIDpjZnVuYzpgT1NWRVJTSU9OSU5GT0VYYCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgYWJvdXQgdGhlc2UgZmllbGRzLgogCiAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIENoYW5nZWQgdG8gYSBuYW1lZCB0dXBsZSBhbmQgYWRkZWQgKnNlcnZpY2VfcGFja19taW5vciosCisgICAgICAqc2VydmljZV9wYWNrX21ham9yKiwgKnN1aXRlX21hc2sqLCBhbmQgKnByb2R1Y3RfdHlwZSouCiAKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KQEAgLTUyOSw2ICs1NzksMjUgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuNS4yCiAKIAorLi4gZGF0YTo6IGxvbmdfaW5mbworCisgICBBIHN0cnVjdCBzZXF1ZW5jZSB0aGF0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IFB5dGhvbidzCisgICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBpbnRlZ2Vycy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuCisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGF0dHJpYnV0ZSAgICAgICAgICAgICAgIHwgZXhwbGFuYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmNvbnN0OmBiaXRzX3Blcl9kaWdpdGAgfCBudW1iZXIgb2YgYml0cyBoZWxkIGluIGVhY2ggZGlnaXQuICBQeXRob24gICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ZWdlcnMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGluIGJhc2UgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgMioqbG9uZ19pbmZvLmJpdHNfcGVyX2RpZ2l0YGAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgc2l6ZW9mX2RpZ2l0YCAgIHwgc2l6ZSBpbiBieXRlcyBvZiB0aGUgQyB0eXBlIHVzZWQgdG8gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudCBhIGRpZ2l0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIC4uIGRhdGE6OiBsYXN0X3R5cGUKICAgICAgICAgICBsYXN0X3ZhbHVlCiAgICAgICAgICAgbGFzdF90cmFjZWJhY2sKQEAgLTY2Niw3ICs3MzUsNyBAQAogCiAgICBBIHN0cmluZyBnaXZpbmcgdGhlIHNpdGUtc3BlY2lmaWMgZGlyZWN0b3J5IHByZWZpeCB3aGVyZSB0aGUgcGxhdGZvcm0KICAgIGluZGVwZW5kZW50IFB5dGhvbiBmaWxlcyBhcmUgaW5zdGFsbGVkOyBieSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBzdHJpbmcKLSAgIGBgJy91c3IvbG9jYWwnYGAuICBUaGlzIGNhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB3aXRoIHRoZSA6b3B0aW9uOmAtLXByZWZpeGAKKyAgIGBgJy91c3IvbG9jYWwnYGAuICBUaGlzIGNhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB3aXRoIHRoZSBgYC0tcHJlZml4YGAKICAgIGFyZ3VtZW50IHRvIHRoZSA6cHJvZ3JhbTpgY29uZmlndXJlYCBzY3JpcHQuICBUaGUgbWFpbiBjb2xsZWN0aW9uIG9mIFB5dGhvbgogICAgbGlicmFyeSBtb2R1bGVzIGlzIGluc3RhbGxlZCBpbiB0aGUgZGlyZWN0b3J5IGBgcHJlZml4ICsgJy9saWIvcHl0aG9udmVyc2lvbidgYAogICAgd2hpbGUgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGhlYWRlciBmaWxlcyAoYWxsIGV4Y2VwdCA6ZmlsZTpgcHljb25maWcuaGApIGFyZQpAQCAtODEwLDE0ICs4NzksMTcgQEAKICAgICAgIHNwZWNpZmllcyB0aGUgbG9jYWwgdHJhY2UgZnVuY3Rpb24uCiAKICAgIGBgJ2xpbmUnYGAKLSAgICAgIFRoZSBpbnRlcnByZXRlciBpcyBhYm91dCB0byBleGVjdXRlIGEgbmV3IGxpbmUgb2YgY29kZSAoc29tZXRpbWVzIG11bHRpcGxlCi0gICAgICBsaW5lIGV2ZW50cyBvbiBvbmUgbGluZSBleGlzdCkuICBUaGUgbG9jYWwgdHJhY2UgZnVuY3Rpb24gaXMgY2FsbGVkOyAqYXJnKgotICAgICAgaXMgYGBOb25lYGA7IHRoZSByZXR1cm4gdmFsdWUgc3BlY2lmaWVzIHRoZSBuZXcgbG9jYWwgdHJhY2UgZnVuY3Rpb24uCisgICAgICBUaGUgaW50ZXJwcmV0ZXIgaXMgYWJvdXQgdG8gZXhlY3V0ZSBhIG5ldyBsaW5lIG9mIGNvZGUgb3IgcmUtZXhlY3V0ZSB0aGUKKyAgICAgIGNvbmRpdGlvbiBvZiBhIGxvb3AuICBUaGUgbG9jYWwgdHJhY2UgZnVuY3Rpb24gaXMgY2FsbGVkOyAqYXJnKiBpcworICAgICAgYGBOb25lYGA7IHRoZSByZXR1cm4gdmFsdWUgc3BlY2lmaWVzIHRoZSBuZXcgbG9jYWwgdHJhY2UgZnVuY3Rpb24uICBTZWUKKyAgICAgIDpmaWxlOmBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHRgIGZvciBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIGhvdyB0aGlzCisgICAgICB3b3Jrcy4KIAogICAgYGAncmV0dXJuJ2BgCiAgICAgICBBIGZ1bmN0aW9uIChvciBvdGhlciBjb2RlIGJsb2NrKSBpcyBhYm91dCB0byByZXR1cm4uICBUaGUgbG9jYWwgdHJhY2UKLSAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZDsgKmFyZyogaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZC4gIFRoZSB0cmFjZQotICAgICAgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KKyAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZDsgKmFyZyogaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCwgb3IgYGBOb25lYGAKKyAgICAgIGlmIHRoZSBldmVudCBpcyBjYXVzZWQgYnkgYW4gZXhjZXB0aW9uIGJlaW5nIHJhaXNlZC4gIFRoZSB0cmFjZSBmdW5jdGlvbidzCisgICAgICByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KIAogICAgYGAnZXhjZXB0aW9uJ2BgCiAgICAgICBBbiBleGNlcHRpb24gaGFzIG9jY3VycmVkLiAgVGhlIGxvY2FsIHRyYWNlIGZ1bmN0aW9uIGlzIGNhbGxlZDsgKmFyZyogaXMgYQpAQCAtODI5LDEwICs5MDEsMTAgQEAKICAgICAgIGEgYnVpbHQtaW4uICAqYXJnKiBpcyB0aGUgQyBmdW5jdGlvbiBvYmplY3QuCiAKICAgIGBgJ2NfcmV0dXJuJ2BgCi0gICAgICBBIEMgZnVuY3Rpb24gaGFzIHJldHVybmVkLiAqYXJnKiBpcyBgYE5vbmVgYC4KKyAgICAgIEEgQyBmdW5jdGlvbiBoYXMgcmV0dXJuZWQuICphcmcqIGlzIHRoZSBDIGZ1bmN0aW9uIG9iamVjdC4KIAogICAgYGAnY19leGNlcHRpb24nYGAKLSAgICAgIEEgQyBmdW5jdGlvbiBoYXMgdGhyb3duIGFuIGV4Y2VwdGlvbi4gICphcmcqIGlzIGBgTm9uZWBgLgorICAgICAgQSBDIGZ1bmN0aW9uIGhhcyByYWlzZWQgYW4gZXhjZXB0aW9uLiAgKmFyZyogaXMgdGhlIEMgZnVuY3Rpb24gb2JqZWN0LgogCiAgICBOb3RlIHRoYXQgYXMgYW4gZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgZG93biB0aGUgY2hhaW4gb2YgY2FsbGVycywgYW4KICAgIGBgJ2V4Y2VwdGlvbidgYCBldmVudCBpcyBnZW5lcmF0ZWQgYXQgZWFjaCBsZXZlbC4KQEAgLTg1MSw3ICs5MjMsNyBAQAogCiAgICBBY3RpdmF0ZSBkdW1waW5nIG9mIFZNIG1lYXN1cmVtZW50cyB1c2luZyB0aGUgUGVudGl1bSB0aW1lc3RhbXAgY291bnRlciwgaWYKICAgICpvbl9mbGFnKiBpcyB0cnVlLiBEZWFjdGl2YXRlIHRoZXNlIGR1bXBzIGlmICpvbl9mbGFnKiBpcyBvZmYuIFRoZSBmdW5jdGlvbiBpcwotICAgYXZhaWxhYmxlIG9ubHkgaWYgUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIDpvcHRpb246YC0td2l0aC10c2NgLiBUbyB1bmRlcnN0YW5kCisgICBhdmFpbGFibGUgb25seSBpZiBQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggYGAtLXdpdGgtdHNjYGAuIFRvIHVuZGVyc3RhbmQKICAgIHRoZSBvdXRwdXQgb2YgdGhpcyBkdW1wLCByZWFkIDpmaWxlOmBQeXRob24vY2V2YWwuY2AgaW4gdGhlIFB5dGhvbiBzb3VyY2VzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjQKQEAgLTkyOSw5ICsxMDAxLDEzIEBACiAgICAqbWljcm8qLCAqcmVsZWFzZWxldmVsKiwgYW5kICpzZXJpYWwqLiAgQWxsIHZhbHVlcyBleGNlcHQgKnJlbGVhc2VsZXZlbCogYXJlCiAgICBpbnRlZ2VyczsgdGhlIHJlbGVhc2UgbGV2ZWwgaXMgYGAnYWxwaGEnYGAsIGBgJ2JldGEnYGAsIGBgJ2NhbmRpZGF0ZSdgYCwgb3IKICAgIGBgJ2ZpbmFsJ2BgLiAgVGhlIGBgdmVyc2lvbl9pbmZvYGAgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgUHl0aG9uIHZlcnNpb24gMi4wCi0gICBpcyBgYCgyLCAwLCAwLCAnZmluYWwnLCAwKWBgLgorICAgaXMgYGAoMiwgMCwgMCwgJ2ZpbmFsJywgMClgYC4gIFRoZSBjb21wb25lbnRzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIGJ5IG5hbWUsCisgICBzbyBgYHN5cy52ZXJzaW9uX2luZm9bMF1gYCBpcyBlcXVpdmFsZW50IHRvIGBgc3lzLnZlcnNpb25faW5mby5tYWpvcmBgCisgICBhbmQgc28gb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIG5hbWVkIGNvbXBvbmVudCBhdHRyaWJ1dGVzCiAKIAogLi4gZGF0YTo6IHdhcm5vcHRpb25zCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0IGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFhZTBhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdApAQCAtMCwwICsxLDIxOCBAQAorOm1vZDpgc3lzY29uZmlnYCAtLS0gUHJvdmlkZSBhY2Nlc3MgdG8gUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBzeXNjb25maWcKKyAgIDpzeW5vcHNpczogUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorLi4gbW9kdWxlYXV0aG9yOjogVGFyZWsgWmlhZGUgPHRhcmVrQHppYWRlLm9yZz4KKy4uIHNlY3Rpb25hdXRob3I6OiBUYXJlayBaaWFkZSA8dGFyZWtAemlhZGUub3JnPgorLi4gdmVyc2lvbmFkZGVkOjogMi43CisuLiBpbmRleDo6CisgICBzaW5nbGU6IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKworVGhlIDptb2Q6YHN5c2NvbmZpZ2AgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uCitpbmZvcm1hdGlvbiBsaWtlIHRoZSBsaXN0IG9mIGluc3RhbGxhdGlvbiBwYXRocyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCityZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKK0NvbmZpZ3VyYXRpb24gdmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIFB5dGhvbiBkaXN0cmlidXRpb24gY29udGFpbnMgYSA6ZmlsZTpgTWFrZWZpbGVgIGFuZCBhIDpmaWxlOmBweWNvbmZpZy5oYAoraGVhZGVyIGZpbGUgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIGJ1aWxkIGJvdGggdGhlIFB5dGhvbiBiaW5hcnkgaXRzZWxmIGFuZAordGhpcmQtcGFydHkgQyBleHRlbnNpb25zIGNvbXBpbGVkIHVzaW5nIDptb2Q6YGRpc3R1dGlsc2AuCisKKzptb2Q6YHN5c2NvbmZpZ2AgcHV0cyBhbGwgdmFyaWFibGVzIGZvdW5kIGluIHRoZXNlIGZpbGVzIGluIGEgZGljdGlvbmFyeSB0aGF0CitjYW4gYmUgYWNjZXNzZWQgdXNpbmcgOmZ1bmM6YGdldF9jb25maWdfdmFyc2Agb3IgOmZ1bmM6YGdldF9jb25maWdfdmFyYC4KKworTm90aWNlIHRoYXQgb24gV2luZG93cywgaXQncyBhIG11Y2ggc21hbGxlciBzZXQuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NvbmZpZ192YXJzKFwqYXJncykKKworICAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICByZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKKyAgIFdpdGggYXJndW1lbnRzLCByZXR1cm4gYSBsaXN0IG9mIHZhbHVlcyB0aGF0IHJlc3VsdCBmcm9tIGxvb2tpbmcgdXAgZWFjaAorICAgYXJndW1lbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGljdGlvbmFyeS4KKworICAgRm9yIGVhY2ggYXJndW1lbnQsIGlmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQsIHJldHVybiBgYE5vbmVgYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9jb25maWdfdmFyKG5hbWUpCisKKyAgIFJldHVybiB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgdmFyaWFibGUgKm5hbWUqLiBFcXVpdmFsZW50IHRvCisgICBgYGdldF9jb25maWdfdmFycygpLmdldChuYW1lKWBgLgorCisgICBJZiAqbmFtZSogaXMgbm90IGZvdW5kLCByZXR1cm4gYGBOb25lYGAuCisKK0V4YW1wbGUgb2YgdXNhZ2U6OgorCisgICA+Pj4gaW1wb3J0IHN5c2NvbmZpZworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpCisgICAwCisgICA+Pj4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMSUJESVInKQorICAgJy91c3IvbG9jYWwvbGliJworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0FSJywgJ0NYWCcpCisgICBbJ2FyJywgJ2crKyddCisKKworSW5zdGFsbGF0aW9uIHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIHVzZXMgYW4gaW5zdGFsbGF0aW9uIHNjaGVtZSB0aGF0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQgb24KK3RoZSBpbnN0YWxsYXRpb24gb3B0aW9ucy4gIFRoZXNlIHNjaGVtZXMgYXJlIHN0b3JlZCBpbiA6bW9kOmBzeXNjb25maWdgIHVuZGVyCit1bmlxdWUgaWRlbnRpZmllcnMgYmFzZWQgb24gdGhlIHZhbHVlIHJldHVybmVkIGJ5IDpjb25zdDpgb3MubmFtZWAuCisKK0V2ZXJ5IG5ldyBjb21wb25lbnQgdGhhdCBpcyBpbnN0YWxsZWQgdXNpbmcgOm1vZDpgZGlzdHV0aWxzYCBvciBhCitEaXN0dXRpbHMtYmFzZWQgc3lzdGVtIHdpbGwgZm9sbG93IHRoZSBzYW1lIHNjaGVtZSB0byBjb3B5IGl0cyBmaWxlIGluIHRoZSByaWdodAorcGxhY2VzLgorCitQeXRob24gY3VycmVudGx5IHN1cHBvcnRzIHNldmVuIHNjaGVtZXM6CisKKy0gKnBvc2l4X3ByZWZpeCo6IHNjaGVtZSBmb3IgUG9zaXggcGxhdGZvcm1zIGxpa2UgTGludXggb3IgTWFjIE9TIFguICBUaGlzIGlzCisgIHRoZSBkZWZhdWx0IHNjaGVtZSB1c2VkIHdoZW4gUHl0aG9uIG9yIGEgY29tcG9uZW50IGlzIGluc3RhbGxlZC4KKy0gKnBvc2l4X2hvbWUqOiBzY2hlbWUgZm9yIFBvc2l4IHBsYXRmb3JtcyB1c2VkIHdoZW4gYSAqaG9tZSogb3B0aW9uIGlzIHVzZWQKKyAgdXBvbiBpbnN0YWxsYXRpb24uICBUaGlzIHNjaGVtZSBpcyB1c2VkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5zdGFsbGVkIHRocm91Z2gKKyAgRGlzdHV0aWxzIHdpdGggYSBzcGVjaWZpYyBob21lIHByZWZpeC4KKy0gKnBvc2l4X3VzZXIqOiBzY2hlbWUgZm9yIFBvc2l4IHBsYXRmb3JtcyB1c2VkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5zdGFsbGVkCisgIHRocm91Z2ggRGlzdHV0aWxzIGFuZCB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLiAgVGhpcyBzY2hlbWUgZGVmaW5lcyBwYXRocworICBsb2NhdGVkIHVuZGVyIHRoZSB1c2VyIGhvbWUgZGlyZWN0b3J5LgorLSAqbnQqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3JtcyBsaWtlIFdpbmRvd3MuCistICpudF91c2VyKjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KKy0gKm9zMio6IHNjaGVtZSBmb3IgT1MvMiBwbGF0Zm9ybXMuCistICpvczJfaG9tZSo6IHNjaGVtZSBmb3IgT1MvMiBwYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgorCitFYWNoIHNjaGVtZSBpcyBpdHNlbGYgY29tcG9zZWQgb2YgYSBzZXJpZXMgb2YgcGF0aHMgYW5kIGVhY2ggcGF0aCBoYXMgYSB1bmlxdWUKK2lkZW50aWZpZXIuICBQeXRob24gY3VycmVudGx5IHVzZXMgZWlnaHQgcGF0aHM6CisKKy0gKnN0ZGxpYio6IGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCBQeXRob24gbGlicmFyeSBmaWxlcyB0aGF0IGFyZSBub3QKKyAgcGxhdGZvcm0tc3BlY2lmaWMuCistICpwbGF0c3RkbGliKjogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIHRoYXQgYXJlCisgIHBsYXRmb3JtLXNwZWNpZmljLgorLSAqcGxhdGxpYio6IGRpcmVjdG9yeSBmb3Igc2l0ZS1zcGVjaWZpYywgcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMuCistICpwdXJlbGliKjogZGlyZWN0b3J5IGZvciBzaXRlLXNwZWNpZmljLCBub24tcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMuCistICppbmNsdWRlKjogZGlyZWN0b3J5IGZvciBub24tcGxhdGZvcm0tc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgorLSAqcGxhdGluY2x1ZGUqOiBkaXJlY3RvcnkgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhlYWRlciBmaWxlcy4KKy0gKnNjcmlwdHMqOiBkaXJlY3RvcnkgZm9yIHNjcmlwdCBmaWxlcy4KKy0gKmRhdGEqOiBkaXJlY3RvcnkgZm9yIGRhdGEgZmlsZXMuCisKKzptb2Q6YHN5c2NvbmZpZ2AgcHJvdmlkZXMgc29tZSBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZXNlIHBhdGhzLgorCisuLiBmdW5jdGlvbjo6IGdldF9zY2hlbWVfbmFtZXMoKQorCisgICBSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIGFsbCBzY2hlbWVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4KKyAgIDptb2Q6YHN5c2NvbmZpZ2AuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGF0aF9uYW1lcygpCisKKyAgIFJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHBhdGggbmFtZXMgY3VycmVudGx5IHN1cHBvcnRlZCBpbgorICAgOm1vZDpgc3lzY29uZmlnYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9wYXRoKG5hbWUsIFtzY2hlbWUsIFt2YXJzLCBbZXhwYW5kXV1dKQorCisgICBSZXR1cm4gYW4gaW5zdGFsbGF0aW9uIHBhdGggY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCAqbmFtZSosIGZyb20gdGhlCisgICBpbnN0YWxsIHNjaGVtZSBuYW1lZCAqc2NoZW1lKi4KKworICAgKm5hbWUqIGhhcyB0byBiZSBhIHZhbHVlIGZyb20gdGhlIGxpc3QgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9wYXRoX25hbWVzYC4KKworICAgOm1vZDpgc3lzY29uZmlnYCBzdG9yZXMgaW5zdGFsbGF0aW9uIHBhdGhzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwYXRoIG5hbWUsCisgICBmb3IgZWFjaCBwbGF0Zm9ybSwgd2l0aCB2YXJpYWJsZXMgdG8gYmUgZXhwYW5kZWQuICBGb3IgaW5zdGFuY2UgdGhlICpzdGRsaWIqCisgICBwYXRoIGZvciB0aGUgKm50KiBzY2hlbWUgaXM6IGBge2Jhc2V9L0xpYmBgLgorCisgICA6ZnVuYzpgZ2V0X3BhdGhgIHdpbGwgdXNlIHRoZSB2YXJpYWJsZXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9jb25maWdfdmFyc2AKKyAgIHRvIGV4cGFuZCB0aGUgcGF0aC4gIEFsbCB2YXJpYWJsZXMgaGF2ZSBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBwbGF0Zm9ybSBzbworICAgb25lIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIGdldCB0aGUgZGVmYXVsdCB2YWx1ZS4KKworICAgSWYgKnNjaGVtZSogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSB2YWx1ZSBmcm9tIHRoZSBsaXN0IHJldHVybmVkIGJ5CisgICA6ZnVuYzpgZ2V0X3BhdGhfbmFtZXNgLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBzY2hlbWUgZm9yIHRoZSBjdXJyZW50CisgICBwbGF0Zm9ybSBpcyB1c2VkLgorCisgICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIHZhcmlhYmxlcyB0aGF0IHdpbGwgdXBkYXRlCisgICB0aGUgZGljdGlvbmFyeSByZXR1cm4gYnkgOmZ1bmM6YGdldF9jb25maWdfdmFyc2AuCisKKyAgIElmICpleHBhbmQqIGlzIHNldCB0byBgYEZhbHNlYGAsIHRoZSBwYXRoIHdpbGwgbm90IGJlIGV4cGFuZGVkIHVzaW5nIHRoZQorICAgdmFyaWFibGVzLgorCisgICBJZiAqbmFtZSogaXMgbm90IGZvdW5kLCByZXR1cm4gYGBOb25lYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGF0aHMoW3NjaGVtZSwgW3ZhcnMsIFtleHBhbmRdXV0pCisKKyAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgaW5zdGFsbGF0aW9uIHBhdGhzIGNvcnJlc3BvbmRpbmcgdG8gYW4KKyAgIGluc3RhbGxhdGlvbiBzY2hlbWUuIFNlZSA6ZnVuYzpgZ2V0X3BhdGhgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBJZiAqc2NoZW1lKiBpcyBub3QgcHJvdmlkZWQsIHdpbGwgdXNlIHRoZSBkZWZhdWx0IHNjaGVtZSBmb3IgdGhlIGN1cnJlbnQKKyAgIHBsYXRmb3JtLgorCisgICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIHZhcmlhYmxlcyB0aGF0IHdpbGwKKyAgIHVwZGF0ZSB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGV4cGFuZCB0aGUgcGF0aHMuCisKKyAgIElmICpleHBhbmQqIGlzIHNldCB0byBGYWxzZSwgdGhlIHBhdGhzIHdpbGwgbm90IGJlIGV4cGFuZGVkLgorCisgICBJZiAqc2NoZW1lKiBpcyBub3QgYW4gZXhpc3Rpbmcgc2NoZW1lLCA6ZnVuYzpgZ2V0X3BhdGhzYCB3aWxsIHJhaXNlIGEKKyAgIDpleGM6YEtleUVycm9yYC4KKworCitPdGhlciBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGdldF9weXRob25fdmVyc2lvbigpCisKKyAgIFJldHVybiB0aGUgYGBNQUpPUi5NSU5PUmBgIFB5dGhvbiB2ZXJzaW9uIG51bWJlciBhcyBhIHN0cmluZy4gIFNpbWlsYXIgdG8KKyAgIGBgc3lzLnZlcnNpb25bOjNdYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGxhdGZvcm0oKQorCisgICBSZXR1cm4gYSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorCisgICBUaGlzIGlzIHVzZWQgbWFpbmx5IHRvIGRpc3Rpbmd1aXNoIHBsYXRmb3JtLXNwZWNpZmljIGJ1aWxkIGRpcmVjdG9yaWVzIGFuZAorICAgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbHQgZGlzdHJpYnV0aW9ucy4gIFR5cGljYWxseSBpbmNsdWRlcyB0aGUgT1MgbmFtZSBhbmQKKyAgIHZlcnNpb24gYW5kIHRoZSBhcmNoaXRlY3R1cmUgKGFzIHN1cHBsaWVkIGJ5IDpmdW5jOmBvcy51bmFtZWApLCBhbHRob3VnaCB0aGUKKyAgIGV4YWN0IGluZm9ybWF0aW9uIGluY2x1ZGVkIGRlcGVuZHMgb24gdGhlIE9TOyBlLmcuIGZvciBJUklYIHRoZSBhcmNoaXRlY3R1cmUKKyAgIGlzbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgKElSSVggb25seSBydW5zIG9uIFNHSSBoYXJkd2FyZSksIGJ1dCBmb3IgTGludXgKKyAgIHRoZSBrZXJuZWwgdmVyc2lvbiBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LgorCisgICBFeGFtcGxlcyBvZiByZXR1cm5lZCB2YWx1ZXM6CisKKyAgIC0gbGludXgtaTU4NgorICAgLSBsaW51eC1hbHBoYSAoPykKKyAgIC0gc29sYXJpcy0yLjYtc3VuNHUKKyAgIC0gaXJpeC01LjMKKyAgIC0gaXJpeDY0LTYuMgorCisgICBXaW5kb3dzIHdpbGwgcmV0dXJuIG9uZSBvZjoKKworICAgLSB3aW4tYW1kNjQgKDY0Yml0IFdpbmRvd3Mgb24gQU1ENjQgKGFrYSB4ODZfNjQsIEludGVsNjQsIEVNNjRULCBldGMpCisgICAtIHdpbi1pYTY0ICg2NGJpdCBXaW5kb3dzIG9uIEl0YW5pdW0pCisgICAtIHdpbjMyIChhbGwgb3RoZXJzIC0gc3BlY2lmaWNhbGx5LCBzeXMucGxhdGZvcm0gaXMgcmV0dXJuZWQpCisKKyAgIE1hYyBPUyBYIGNhbiByZXR1cm46CisKKyAgIC0gbWFjb3N4LTEwLjYtcHBjCisgICAtIG1hY29zeC0xMC40LXBwYzY0CisgICAtIG1hY29zeC0xMC4zLWkzODYKKyAgIC0gbWFjb3N4LTEwLjQtZmF0CisKKyAgIEZvciBvdGhlciBub24tUE9TSVggcGxhdGZvcm1zLCBjdXJyZW50bHkganVzdCByZXR1cm5zIDpkYXRhOmBzeXMucGxhdGZvcm1gLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfcHl0aG9uX2J1aWxkKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gd2FzIGJ1aWx0IGZyb20gc291cmNlLgorCisKKy4uIGZ1bmN0aW9uOjogcGFyc2VfY29uZmlnX2goZnBbLCB2YXJzXSkKKworICAgUGFyc2UgYSA6ZmlsZTpgY29uZmlnLmhgXC1zdHlsZSBmaWxlLgorCisgICAqZnAqIGlzIGEgZmlsZS1saWtlIG9iamVjdCBwb2ludGluZyB0byB0aGUgOmZpbGU6YGNvbmZpZy5oYFwtbGlrZSBmaWxlLgorCisgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBuYW1lL3ZhbHVlIHBhaXJzIGlzIHJldHVybmVkLiAgSWYgYW4gb3B0aW9uYWwKKyAgIGRpY3Rpb25hcnkgaXMgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGl0IGlzIHVzZWQgaW5zdGVhZCBvZiBhIG5ldworICAgZGljdGlvbmFyeSwgYW5kIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWVzIHJlYWQgaW4gdGhlIGZpbGUuCisKKworLi4gZnVuY3Rpb246OiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorCisgICBSZXR1cm4gdGhlIHBhdGggb2YgOmZpbGU6YHB5Y29uZmlnLmhgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdCBiL0RvYy9saWJyYXJ5L3N5c2xvZy5yc3QKaW5kZXggNTQ5ZjI2Yi4uN2IxYTM0MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXNsb2cucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBzeXNsb2dgIC0tLSBVbml4IHN5c2xvZyBsaWJyYXJ5IHJvdXRpbmVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExLDQyICsxMCw1OCBAQAogUmVmZXIgdG8gdGhlIFVuaXggbWFudWFsIHBhZ2VzIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBgYHN5c2xvZ2BgCiBmYWNpbGl0eS4KIAorVGhpcyBtb2R1bGUgd3JhcHMgdGhlIHN5c3RlbSBgYHN5c2xvZ2BgIGZhbWlseSBvZiByb3V0aW5lcy4gIEEgcHVyZSBQeXRob24KK2xpYnJhcnkgdGhhdCBjYW4gc3BlYWsgdG8gYSBzeXNsb2cgc2VydmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUKKzptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSBhcyA6Y2xhc3M6YFN5c0xvZ0hhbmRsZXJgLgorCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAogLi4gZnVuY3Rpb246OiBzeXNsb2coW3ByaW9yaXR5LF0gbWVzc2FnZSkKIAotICAgU2VuZCB0aGUgc3RyaW5nICptZXNzYWdlKiB0byB0aGUgc3lzdGVtIGxvZ2dlci4gIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBhZGRlZCBpZgotICAgbmVjZXNzYXJ5LiAgRWFjaCBtZXNzYWdlIGlzIHRhZ2dlZCB3aXRoIGEgcHJpb3JpdHkgY29tcG9zZWQgb2YgYSAqZmFjaWxpdHkqIGFuZAotICAgYSAqbGV2ZWwqLiAgVGhlIG9wdGlvbmFsICpwcmlvcml0eSogYXJndW1lbnQsIHdoaWNoIGRlZmF1bHRzIHRvCi0gICA6Y29uc3Q6YExPR19JTkZPYCwgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBwcmlvcml0eS4gIElmIHRoZSBmYWNpbGl0eSBpcyBub3QKLSAgIGVuY29kZWQgaW4gKnByaW9yaXR5KiB1c2luZyBsb2dpY2FsLW9yIChgYExPR19JTkZPIHwgTE9HX1VTRVJgYCksIHRoZSB2YWx1ZQotICAgZ2l2ZW4gaW4gdGhlIDpmdW5jOmBvcGVubG9nYCBjYWxsIGlzIHVzZWQuCisgICBTZW5kIHRoZSBzdHJpbmcgKm1lc3NhZ2UqIHRvIHRoZSBzeXN0ZW0gbG9nZ2VyLiAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIGFkZGVkCisgICBpZiBuZWNlc3NhcnkuICBFYWNoIG1lc3NhZ2UgaXMgdGFnZ2VkIHdpdGggYSBwcmlvcml0eSBjb21wb3NlZCBvZiBhCisgICAqZmFjaWxpdHkqIGFuZCBhICpsZXZlbCouICBUaGUgb3B0aW9uYWwgKnByaW9yaXR5KiBhcmd1bWVudCwgd2hpY2ggZGVmYXVsdHMKKyAgIHRvIDpjb25zdDpgTE9HX0lORk9gLCBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlIHByaW9yaXR5LiAgSWYgdGhlIGZhY2lsaXR5IGlzCisgICBub3QgZW5jb2RlZCBpbiAqcHJpb3JpdHkqIHVzaW5nIGxvZ2ljYWwtb3IgKGBgTE9HX0lORk8gfCBMT0dfVVNFUmBgKSwgdGhlCisgICB2YWx1ZSBnaXZlbiBpbiB0aGUgOmZ1bmM6YG9wZW5sb2dgIGNhbGwgaXMgdXNlZC4KKworICAgSWYgOmZ1bmM6YG9wZW5sb2dgIGhhcyBub3QgYmVlbiBjYWxsZWQgcHJpb3IgdG8gdGhlIGNhbGwgdG8gOmZ1bmM6YHN5c2xvZ2AsCisgICBgYG9wZW5sb2coKWBgIHdpbGwgYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgogCiAKLS4uIGZ1bmN0aW9uOjogb3BlbmxvZyhpZGVudFssIGxvZ29wdFssIGZhY2lsaXR5XV0pCisuLiBmdW5jdGlvbjo6IG9wZW5sb2coW2lkZW50WywgbG9nb3B0WywgZmFjaWxpdHldXV0pCiAKLSAgIExvZ2dpbmcgb3B0aW9ucyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGJ5IGV4cGxpY2l0bHkgb3BlbmluZyB0aGUgbG9nCi0gICBmaWxlIHdpdGggOmZ1bmM6YG9wZW5sb2dgIHByaW9yIHRvIGNhbGxpbmcgOmZ1bmM6YHN5c2xvZ2AuICBUaGUgZGVmYXVsdHMgYXJlCi0gICAodXN1YWxseSkgKmlkZW50KiA9IGBgJ3N5c2xvZydgYCwgKmxvZ29wdCogPSBgYDBgYCwgKmZhY2lsaXR5KiA9Ci0gICA6Y29uc3Q6YExPR19VU0VSYC4gIFRoZSAqaWRlbnQqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHdoaWNoIGlzIHByZXBlbmRlZCB0byBldmVyeQotICAgbWVzc2FnZS4gIFRoZSBvcHRpb25hbCAqbG9nb3B0KiBhcmd1bWVudCBpcyBhIGJpdCBmaWVsZCAtIHNlZSBiZWxvdyBmb3IgcG9zc2libGUKLSAgIHZhbHVlcyB0byBjb21iaW5lLiAgVGhlIG9wdGlvbmFsICpmYWNpbGl0eSogYXJndW1lbnQgc2V0cyB0aGUgZGVmYXVsdCBmYWNpbGl0eQotICAgZm9yIG1lc3NhZ2VzIHdoaWNoIGRvIG5vdCBoYXZlIGEgZmFjaWxpdHkgZXhwbGljaXRseSBlbmNvZGVkLgorICAgTG9nZ2luZyBvcHRpb25zIG9mIHN1YnNlcXVlbnQgOmZ1bmM6YHN5c2xvZ2AgY2FsbHMgY2FuIGJlIHNldCBieSBjYWxsaW5nCisgICA6ZnVuYzpgb3BlbmxvZ2AuICA6ZnVuYzpgc3lzbG9nYCB3aWxsIGNhbGwgOmZ1bmM6YG9wZW5sb2dgIHdpdGggbm8gYXJndW1lbnRzCisgICBpZiB0aGUgbG9nIGlzIG5vdCBjdXJyZW50bHkgb3Blbi4KKworICAgVGhlIG9wdGlvbmFsICppZGVudCoga2V5d29yZCBhcmd1bWVudCBpcyBhIHN0cmluZyB3aGljaCBpcyBwcmVwZW5kZWQgdG8gZXZlcnkKKyAgIG1lc3NhZ2UsIGFuZCBkZWZhdWx0cyB0byBgYHN5cy5hcmd2WzBdYGAgd2l0aCBsZWFkaW5nIHBhdGggY29tcG9uZW50cworICAgc3RyaXBwZWQuICBUaGUgb3B0aW9uYWwgKmxvZ29wdCoga2V5d29yZCBhcmd1bWVudCAoZGVmYXVsdCBpcyAwKSBpcyBhIGJpdAorICAgZmllbGQgLS0gc2VlIGJlbG93IGZvciBwb3NzaWJsZSB2YWx1ZXMgdG8gY29tYmluZS4gIFRoZSBvcHRpb25hbCAqZmFjaWxpdHkqCisgICBrZXl3b3JkIGFyZ3VtZW50IChkZWZhdWx0IGlzIDpjb25zdDpgTE9HX1VTRVJgKSBzZXRzIHRoZSBkZWZhdWx0IGZhY2lsaXR5IGZvcgorICAgbWVzc2FnZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBmYWNpbGl0eSBleHBsaWNpdGx5IGVuY29kZWQuCiAKIAogLi4gZnVuY3Rpb246OiBjbG9zZWxvZygpCiAKLSAgIENsb3NlIHRoZSBsb2cgZmlsZS4KKyAgIFJlc2V0IHRoZSBzeXNsb2cgbW9kdWxlIHZhbHVlcyBhbmQgY2FsbCB0aGUgc3lzdGVtIGxpYnJhcnkgYGBjbG9zZWxvZygpYGAuCisKKyAgIFRoaXMgY2F1c2VzIHRoZSBtb2R1bGUgdG8gYmVoYXZlIGFzIGl0IGRvZXMgd2hlbiBpbml0aWFsbHkgaW1wb3J0ZWQuICBGb3IKKyAgIGV4YW1wbGUsIDpmdW5jOmBvcGVubG9nYCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgZmlyc3QgOmZ1bmM6YHN5c2xvZ2AgY2FsbCAoaWYKKyAgIDpmdW5jOmBvcGVubG9nYCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNhbGxlZCksIGFuZCAqaWRlbnQqIGFuZCBvdGhlcgorICAgOmZ1bmM6YG9wZW5sb2dgIHBhcmFtZXRlcnMgYXJlIHJlc2V0IHRvIGRlZmF1bHRzLgogCiAKIC4uIGZ1bmN0aW9uOjogc2V0bG9nbWFzayhtYXNrcHJpKQogCi0gICBTZXQgdGhlIHByaW9yaXR5IG1hc2sgdG8gKm1hc2twcmkqIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIG1hc2sgdmFsdWUuICBDYWxscyB0bwotICAgOmZ1bmM6YHN5c2xvZ2Agd2l0aCBhIHByaW9yaXR5IGxldmVsIG5vdCBzZXQgaW4gKm1hc2twcmkqIGFyZSBpZ25vcmVkLiAgVGhlCi0gICBkZWZhdWx0IGlzIHRvIGxvZyBhbGwgcHJpb3JpdGllcy4gIFRoZSBmdW5jdGlvbiBgYExPR19NQVNLKHByaSlgYCBjYWxjdWxhdGVzIHRoZQotICAgbWFzayBmb3IgdGhlIGluZGl2aWR1YWwgcHJpb3JpdHkgKnByaSouICBUaGUgZnVuY3Rpb24gYGBMT0dfVVBUTyhwcmkpYGAKLSAgIGNhbGN1bGF0ZXMgdGhlIG1hc2sgZm9yIGFsbCBwcmlvcml0aWVzIHVwIHRvIGFuZCBpbmNsdWRpbmcgKnByaSouCisgICBTZXQgdGhlIHByaW9yaXR5IG1hc2sgdG8gKm1hc2twcmkqIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIG1hc2sgdmFsdWUuICBDYWxscworICAgdG8gOmZ1bmM6YHN5c2xvZ2Agd2l0aCBhIHByaW9yaXR5IGxldmVsIG5vdCBzZXQgaW4gKm1hc2twcmkqIGFyZSBpZ25vcmVkLgorICAgVGhlIGRlZmF1bHQgaXMgdG8gbG9nIGFsbCBwcmlvcml0aWVzLiAgVGhlIGZ1bmN0aW9uIGBgTE9HX01BU0socHJpKWBgCisgICBjYWxjdWxhdGVzIHRoZSBtYXNrIGZvciB0aGUgaW5kaXZpZHVhbCBwcmlvcml0eSAqcHJpKi4gIFRoZSBmdW5jdGlvbgorICAgYGBMT0dfVVBUTyhwcmkpYGAgY2FsY3VsYXRlcyB0aGUgbWFzayBmb3IgYWxsIHByaW9yaXRpZXMgdXAgdG8gYW5kIGluY2x1ZGluZworICAgKnByaSouCiAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKIApAQCAtNjQsMyArNzksMjQgQEAKICAgIDpjb25zdDpgTE9HX1BJRGAsIDpjb25zdDpgTE9HX0NPTlNgLCA6Y29uc3Q6YExPR19OREVMQVlgLCA6Y29uc3Q6YExPR19OT1dBSVRgCiAgICBhbmQgOmNvbnN0OmBMT0dfUEVSUk9SYCBpZiBkZWZpbmVkIGluIGBgPHN5c2xvZy5oPmBgLgogCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitTaW1wbGUgZXhhbXBsZQorfn5+fn5+fn5+fn5+fn4KKworQSBzaW1wbGUgc2V0IG9mIGV4YW1wbGVzOjoKKworICAgaW1wb3J0IHN5c2xvZworCisgICBzeXNsb2cuc3lzbG9nKCdQcm9jZXNzaW5nIHN0YXJ0ZWQnKQorICAgaWYgZXJyb3I6CisgICAgICAgc3lzbG9nLnN5c2xvZyhzeXNsb2cuTE9HX0VSUiwgJ1Byb2Nlc3Npbmcgc3RhcnRlZCcpCisKK0FuIGV4YW1wbGUgb2Ygc2V0dGluZyBzb21lIGxvZyBvcHRpb25zLCB0aGVzZSB3b3VsZCBpbmNsdWRlIHRoZSBwcm9jZXNzIElEIGluCitsb2dnZWQgbWVzc2FnZXMsIGFuZCB3cml0ZSB0aGUgbWVzc2FnZXMgdG8gdGhlIGRlc3RpbmF0aW9uIGZhY2lsaXR5IHVzZWQgZm9yCittYWlsIGxvZ2dpbmc6OgorCisgICBzeXNsb2cub3BlbmxvZyhsb2dvcHQ9c3lzbG9nLkxPR19QSUQsIGZhY2lsaXR5PXN5c2xvZy5MT0dfTUFJTCkKKyAgIHN5c2xvZy5zeXNsb2coJ0UtbWFpbCBwcm9jZXNzaW5nIGluaXRpYXRlZC4uLicpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CmluZGV4IDI5OTY4MzkuLmE4ZTFkNTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CkBAIC0yMzQsNiArMjM0LDE0IEBACiBhcmNoaXZlIHNldmVyYWwgdGltZXMuIEVhY2ggYXJjaGl2ZSBtZW1iZXIgaXMgcmVwcmVzZW50ZWQgYnkgYSA6Y2xhc3M6YFRhckluZm9gCiBvYmplY3QsIHNlZSA6cmVmOmB0YXJpbmZvLW9iamVjdHNgIGZvciBkZXRhaWxzLgogCitBIDpjbGFzczpgVGFyRmlsZWAgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIGluIGEgOmtleXdvcmQ6YHdpdGhgCitzdGF0ZW1lbnQuIEl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBjbG9zZWQgd2hlbiB0aGUgYmxvY2sgaXMgY29tcGxldGVkLiBQbGVhc2UKK25vdGUgdGhhdCBpbiB0aGUgZXZlbnQgb2YgYW4gZXhjZXB0aW9uIGFuIGFyY2hpdmUgb3BlbmVkIGZvciB3cml0aW5nIHdpbGwgbm90CitiZSBmaW5hbGl6ZWQ7IG9ubHkgdGhlIGludGVybmFsbHkgdXNlZCBmaWxlIG9iamVjdCB3aWxsIGJlIGNsb3NlZC4gU2VlIHRoZQorOnJlZjpgdGFyLWV4YW1wbGVzYCBzZWN0aW9uIGZvciBhIHVzZSBjYXNlLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCiAKIC4uIGNsYXNzOjogVGFyRmlsZShuYW1lPU5vbmUsIG1vZGU9J3InLCBmaWxlb2JqPU5vbmUsIGZvcm1hdD1ERUZBVUxUX0ZPUk1BVCwgdGFyaW5mbz1UYXJJbmZvLCBkZXJlZmVyZW5jZT1GYWxzZSwgaWdub3JlX3plcm9zPUZhbHNlLCBlbmNvZGluZz1FTkNPRElORywgZXJyb3JzPU5vbmUsIHBheF9oZWFkZXJzPU5vbmUsIGRlYnVnPTAsIGVycm9ybGV2ZWw9MCkKIApAQCAtMzg5LDcgKzM5Nyw3IEBACiAgICAgICBhbmQgOm1ldGg6YGNsb3NlYCwgYW5kIGFsc28gc3VwcG9ydHMgaXRlcmF0aW9uIG92ZXIgaXRzIGxpbmVzLgogCiAKLS4uIG1ldGhvZDo6IFRhckZpbGUuYWRkKG5hbWUsIGFyY25hbWU9Tm9uZSwgcmVjdXJzaXZlPVRydWUsIGV4Y2x1ZGU9Tm9uZSkKKy4uIG1ldGhvZDo6IFRhckZpbGUuYWRkKG5hbWUsIGFyY25hbWU9Tm9uZSwgcmVjdXJzaXZlPVRydWUsIGV4Y2x1ZGU9Tm9uZSwgZmlsdGVyPU5vbmUpCiAKICAgIEFkZCB0aGUgZmlsZSAqbmFtZSogdG8gdGhlIGFyY2hpdmUuICpuYW1lKiBtYXkgYmUgYW55IHR5cGUgb2YgZmlsZSAoZGlyZWN0b3J5LAogICAgZmlmbywgc3ltYm9saWMgbGluaywgZXRjLikuIElmIGdpdmVuLCAqYXJjbmFtZSogc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIG5hbWUKQEAgLTM5NywxMSArNDA1LDI0IEBACiAgICBjYW4gYmUgYXZvaWRlZCBieSBzZXR0aW5nICpyZWN1cnNpdmUqIHRvIDpjb25zdDpgRmFsc2VgLiBJZiAqZXhjbHVkZSogaXMgZ2l2ZW4KICAgIGl0IG11c3QgYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIG9uZSBmaWxlbmFtZSBhcmd1bWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4KICAgIHZhbHVlLiBEZXBlbmRpbmcgb24gdGhpcyB2YWx1ZSB0aGUgcmVzcGVjdGl2ZSBmaWxlIGlzIGVpdGhlciBleGNsdWRlZAotICAgKDpjb25zdDpgVHJ1ZWApIG9yIGFkZGVkICg6Y29uc3Q6YEZhbHNlYCkuCisgICAoOmNvbnN0OmBUcnVlYCkgb3IgYWRkZWQgKDpjb25zdDpgRmFsc2VgKS4gSWYgKmZpbHRlciogaXMgc3BlY2lmaWVkIGl0IG11c3QKKyAgIGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0IGFyZ3VtZW50IGFuZCByZXR1cm5zIHRoZQorICAgY2hhbmdlZCA6Y2xhc3M6YFRhckluZm9gIG9iamVjdC4gSWYgaXQgaW5zdGVhZCByZXR1cm5zIDpjb25zdDpgTm9uZWAgdGhlIDpjbGFzczpgVGFySW5mb2AKKyAgIG9iamVjdCB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGFyY2hpdmUuIFNlZSA6cmVmOmB0YXItZXhhbXBsZXNgIGZvciBhbgorICAgZXhhbXBsZS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKICAgICAgIEFkZGVkIHRoZSAqZXhjbHVkZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgQWRkZWQgdGhlICpmaWx0ZXIqIHBhcmFtZXRlci4KKworICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgVGhlICpleGNsdWRlKiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgKmZpbHRlciogcGFyYW1ldGVyCisgICAgICBpbnN0ZWFkLiAgRm9yIG1heGltdW0gcG9ydGFiaWxpdHksICpmaWx0ZXIqIHNob3VsZCBiZSB1c2VkIGFzIGEga2V5d29yZAorICAgICAgYXJndW1lbnQgcmF0aGVyIHRoYW4gYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNvIHRoYXQgY29kZSB3b24ndCBiZQorICAgICAgYWZmZWN0ZWQgd2hlbiAqZXhjbHVkZSogaXMgdWx0aW1hdGVseSByZW1vdmVkLgorCiAKIC4uIG1ldGhvZDo6IFRhckZpbGUuYWRkZmlsZSh0YXJpbmZvLCBmaWxlb2JqPU5vbmUpCiAKQEAgLTYzOSw2ICs2NjAsMTMgQEAKICAgICAgICB0YXIuYWRkKG5hbWUpCiAgICB0YXIuY2xvc2UoKQogCitUaGUgc2FtZSBleGFtcGxlIHVzaW5nIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50OjoKKworICAgIGltcG9ydCB0YXJmaWxlCisgICAgd2l0aCB0YXJmaWxlLm9wZW4oInNhbXBsZS50YXIiLCAidyIpIGFzIHRhcjoKKyAgICAgICAgZm9yIG5hbWUgaW4gWyJmb28iLCAiYmFyIiwgInF1dXgiXToKKyAgICAgICAgICAgIHRhci5hZGQobmFtZSkKKwogSG93IHRvIHJlYWQgYSBnemlwIGNvbXByZXNzZWQgdGFyIGFyY2hpdmUgYW5kIGRpc3BsYXkgc29tZSBtZW1iZXIgaW5mb3JtYXRpb246OgogCiAgICBpbXBvcnQgdGFyZmlsZQpAQCAtNjUzLDYgKzY4MSwxOCBAQAogICAgICAgICAgICBwcmludCAic29tZXRoaW5nIGVsc2UuIgogICAgdGFyLmNsb3NlKCkKIAorSG93IHRvIGNyZWF0ZSBhbiBhcmNoaXZlIGFuZCByZXNldCB0aGUgdXNlciBpbmZvcm1hdGlvbiB1c2luZyB0aGUgKmZpbHRlcioKK3BhcmFtZXRlciBpbiA6bWV0aDpgVGFyRmlsZS5hZGRgOjoKKworICAgIGltcG9ydCB0YXJmaWxlCisgICAgZGVmIHJlc2V0KHRhcmluZm8pOgorICAgICAgICB0YXJpbmZvLnVpZCA9IHRhcmluZm8uZ2lkID0gMAorICAgICAgICB0YXJpbmZvLnVuYW1lID0gdGFyaW5mby5nbmFtZSA9ICJyb290IgorICAgICAgICByZXR1cm4gdGFyaW5mbworICAgIHRhciA9IHRhcmZpbGUub3Blbigic2FtcGxlLnRhci5neiIsICJ3Omd6IikKKyAgICB0YXIuYWRkKCJmb28iLCBmaWx0ZXI9cmVzZXQpCisgICAgdGFyLmNsb3NlKCkKKwogCiAuLiBfdGFyLWZvcm1hdHM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CmluZGV4IGIxNTI4YmQuLjkyNWVjY2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdApAQCAtMTk4LDggKzE5OCw4IEBACiAgICByZWNlaXZlZCBzbyBmYXIgKG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nIGlmIGEgdGltZW91dCBoYXBwZW5lZCkuCiAKICAgIElmIGEgcmVndWxhciBleHByZXNzaW9uIGVuZHMgd2l0aCBhIGdyZWVkeSBtYXRjaCAoc3VjaCBhcyBgYC4qYGApIG9yIGlmIG1vcmUKLSAgIHRoYW4gb25lIGV4cHJlc3Npb24gY2FuIG1hdGNoIHRoZSBzYW1lIGlucHV0LCB0aGUgcmVzdWx0cyBhcmUgaW5kZXRlcm1pbmlzdGljLAotICAgYW5kIG1heSBkZXBlbmQgb24gdGhlIEkvTyB0aW1pbmcuCisgICB0aGFuIG9uZSBleHByZXNzaW9uIGNhbiBtYXRjaCB0aGUgc2FtZSBpbnB1dCwgdGhlIHJlc3VsdHMgYXJlCisgICBub24tZGV0ZXJtaW5pc3RpYywgYW5kIG1heSBkZXBlbmQgb24gdGhlIEkvTyB0aW1pbmcuCiAKIAogLi4gbWV0aG9kOjogVGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2soY2FsbGJhY2spCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IGM3M2UyM2UuLjNhMGI1Y2IgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC05NywxNyArOTcsMTcgQEAKIGd1aWRlbGluZXMgdG8gYmUgZm9sbG93ZWQ6CiAKICogVGhlIHRlc3Rpbmcgc3VpdGUgc2hvdWxkIGV4ZXJjaXNlIGFsbCBjbGFzc2VzLCBmdW5jdGlvbnMsIGFuZCBjb25zdGFudHMuIFRoaXMKLSAgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGV4dGVybmFsIEFQSSB0aGF0IGlzIHRvIGJlIHByZXNlbnRlZCB0byB0aGUgb3V0c2lkZSB3b3JsZAotICBidXQgYWxzbyAicHJpdmF0ZSIgY29kZS4KKyAgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGV4dGVybmFsIEFQSSB0aGF0IGlzIHRvIGJlIHByZXNlbnRlZCB0byB0aGUgb3V0c2lkZQorICB3b3JsZCBidXQgYWxzbyAicHJpdmF0ZSIgY29kZS4KIAogKiBXaGl0ZWJveCB0ZXN0aW5nIChleGFtaW5pbmcgdGhlIGNvZGUgYmVpbmcgdGVzdGVkIHdoZW4gdGhlIHRlc3RzIGFyZSBiZWluZwogICB3cml0dGVuKSBpcyBwcmVmZXJyZWQuIEJsYWNrYm94IHRlc3RpbmcgKHRlc3Rpbmcgb25seSB0aGUgcHVibGlzaGVkIHVzZXIKLSAgaW50ZXJmYWNlKSBpcyBub3QgY29tcGxldGUgZW5vdWdoIHRvIG1ha2Ugc3VyZSBhbGwgYm91bmRhcnkgYW5kIGVkZ2UgY2FzZXMgYXJlCi0gIHRlc3RlZC4KKyAgaW50ZXJmYWNlKSBpcyBub3QgY29tcGxldGUgZW5vdWdoIHRvIG1ha2Ugc3VyZSBhbGwgYm91bmRhcnkgYW5kIGVkZ2UgY2FzZXMKKyAgYXJlIHRlc3RlZC4KIAogKiBNYWtlIHN1cmUgYWxsIHBvc3NpYmxlIHZhbHVlcyBhcmUgdGVzdGVkIGluY2x1ZGluZyBpbnZhbGlkIG9uZXMuIFRoaXMgbWFrZXMKLSAgc3VyZSB0aGF0IG5vdCBvbmx5IGFsbCB2YWxpZCB2YWx1ZXMgYXJlIGFjY2VwdGFibGUgYnV0IGFsc28gdGhhdCBpbXByb3BlciB2YWx1ZXMKLSAgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICBzdXJlIHRoYXQgbm90IG9ubHkgYWxsIHZhbGlkIHZhbHVlcyBhcmUgYWNjZXB0YWJsZSBidXQgYWxzbyB0aGF0IGltcHJvcGVyCisgIHZhbHVlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCiAKICogRXhoYXVzdCBhcyBtYW55IGNvZGUgcGF0aHMgYXMgcG9zc2libGUuIFRlc3Qgd2hlcmUgYnJhbmNoaW5nIG9jY3VycyBhbmQgdGh1cwogICB0YWlsb3IgaW5wdXQgdG8gbWFrZSBzdXJlIGFzIG1hbnkgZGlmZmVyZW50IHBhdGhzIHRocm91Z2ggdGhlIGNvZGUgYXJlIHRha2VuLgpAQCAtMTI3LDggKzEyNyw4IEBACiAgIGJlaGF2aW9yIGZyb20gc2lkZS1lZmZlY3RzIG9mIGltcG9ydGluZyBhIG1vZHVsZS4KIAogKiBUcnkgdG8gbWF4aW1pemUgY29kZSByZXVzZS4gT24gb2NjYXNpb24sIHRlc3RzIHdpbGwgdmFyeSBieSBzb21ldGhpbmcgYXMgc21hbGwKLSAgYXMgd2hhdCB0eXBlIG9mIGlucHV0IGlzIHVzZWQuIE1pbmltaXplIGNvZGUgZHVwbGljYXRpb24gYnkgc3ViY2xhc3NpbmcgYSBiYXNpYwotICB0ZXN0IGNsYXNzIHdpdGggYSBjbGFzcyB0aGF0IHNwZWNpZmllcyB0aGUgaW5wdXQ6OgorICBhcyB3aGF0IHR5cGUgb2YgaW5wdXQgaXMgdXNlZC4gTWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBieSBzdWJjbGFzc2luZyBhCisgIGJhc2ljIHRlc3QgY2xhc3Mgd2l0aCBhIGNsYXNzIHRoYXQgc3BlY2lmaWVzIHRoZSBpbnB1dDo6CiAKICAgICAgY2xhc3MgVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTM4LDEzICsxMzgsMTMgQEAKICAgICAgICAgICAgICBzZWxmLmZ1bmMoc2VsZi5hcmcpCiAKICAgICAgY2xhc3MgQWNjZXB0TGlzdHMoVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKToKLSAgICAgICAgIGFyZyA9IFsxLDIsM10KKyAgICAgICAgIGFyZyA9IFsxLCAyLCAzXQogCiAgICAgIGNsYXNzIEFjY2VwdFN0cmluZ3MoVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKToKICAgICAgICAgIGFyZyA9ICdhYmMnCiAKICAgICAgY2xhc3MgQWNjZXB0VHVwbGVzKFRlc3RGdW5jQWNjZXB0c1NlcXVlbmNlcyk6Ci0gICAgICAgICBhcmcgPSAoMSwyLDMpCisgICAgICAgICBhcmcgPSAoMSwgMiwgMykKIAogCiAuLiBzZWVhbHNvOjoKQEAgLTE1NSwzMyArMTU1LDMzIEBACiAKIC4uIF9yZWdydGVzdDoKIAotUnVubmluZyB0ZXN0cyB1c2luZyA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUnVubmluZyB0ZXN0cyB1c2luZyB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi06bW9kOmB0ZXN0LnJlZ3J0ZXN0YCBjYW4gYmUgdXNlZCBhcyBhIHNjcmlwdCB0byBkcml2ZSBQeXRob24ncyByZWdyZXNzaW9uIHRlc3QKLXN1aXRlLiBSdW5uaW5nIHRoZSBzY3JpcHQgYnkgaXRzZWxmIGF1dG9tYXRpY2FsbHkgc3RhcnRzIHJ1bm5pbmcgYWxsIHJlZ3Jlc3Npb24KK1RoZSA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCBtb2R1bGUgY2FuIGJlIHJ1biBhcyBhIHNjcmlwdCB0byBkcml2ZSBQeXRob24ncyByZWdyZXNzaW9uCit0ZXN0IHN1aXRlLCB0aGFua3MgdG8gdGhlIDpvcHRpb246YC1tYCBvcHRpb246IDpwcm9ncmFtOmBweXRob24gLW0gdGVzdC5yZWdydGVzdGAuCitSdW5uaW5nIHRoZSBzY3JpcHQgYnkgaXRzZWxmIGF1dG9tYXRpY2FsbHkgc3RhcnRzIHJ1bm5pbmcgYWxsIHJlZ3Jlc3Npb24KIHRlc3RzIGluIHRoZSA6bW9kOmB0ZXN0YCBwYWNrYWdlLiBJdCBkb2VzIHRoaXMgYnkgZmluZGluZyBhbGwgbW9kdWxlcyBpbiB0aGUKIHBhY2thZ2Ugd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBgYHRlc3RfYGAsIGltcG9ydGluZyB0aGVtLCBhbmQgZXhlY3V0aW5nIHRoZQotZnVuY3Rpb24gOmZ1bmM6YHRlc3RfbWFpbmAgaWYgcHJlc2VudC4gVGhlIG5hbWVzIG9mIHRlc3RzIHRvIGV4ZWN1dGUgbWF5IGFsc28gYmUKLXBhc3NlZCB0byB0aGUgc2NyaXB0LiBTcGVjaWZ5aW5nIGEgc2luZ2xlIHJlZ3Jlc3Npb24gdGVzdCAoOnByb2dyYW06YHB5dGhvbgotcmVncnRlc3QucHlgIDpvcHRpb246YHRlc3Rfc3BhbS5weWApIHdpbGwgbWluaW1pemUgb3V0cHV0IGFuZCBvbmx5IHByaW50IHdoZXRoZXIKK2Z1bmN0aW9uIDpmdW5jOmB0ZXN0X21haW5gIGlmIHByZXNlbnQuIFRoZSBuYW1lcyBvZiB0ZXN0cyB0byBleGVjdXRlIG1heSBhbHNvCitiZSBwYXNzZWQgdG8gdGhlIHNjcmlwdC4gU3BlY2lmeWluZyBhIHNpbmdsZSByZWdyZXNzaW9uIHRlc3QgKDpwcm9ncmFtOmBweXRob24KKy1tIHRlc3QucmVncnRlc3QgdGVzdF9zcGFtYCkgd2lsbCBtaW5pbWl6ZSBvdXRwdXQgYW5kIG9ubHkgcHJpbnQgd2hldGhlcgogdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBhbmQgdGh1cyBtaW5pbWl6ZSBvdXRwdXQuCiAKIFJ1bm5pbmcgOm1vZDpgdGVzdC5yZWdydGVzdGAgZGlyZWN0bHkgYWxsb3dzIHdoYXQgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yCiB0ZXN0cyB0byB1c2UgdG8gYmUgc2V0LiBZb3UgZG8gdGhpcyBieSB1c2luZyB0aGUgOm9wdGlvbjpgLXVgIGNvbW1hbmQtbGluZQotb3B0aW9uLiBSdW4gOnByb2dyYW06YHB5dGhvbiByZWdydGVzdC5weWAgOm9wdGlvbjpgLXVhbGxgIHRvIHR1cm4gb24gYWxsCi1yZXNvdXJjZXM7IHNwZWNpZnlpbmcgOm9wdGlvbjpgYWxsYCBhcyBhbiBvcHRpb24gZm9yIDpvcHRpb246YC11YCBlbmFibGVzIGFsbAorb3B0aW9uLiBSdW4gOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0IC11YWxsYCB0byB0dXJuIG9uIGFsbAorcmVzb3VyY2VzOyBzcGVjaWZ5aW5nIGBgYWxsYGAgYXMgYW4gb3B0aW9uIGZvciBgYC11YGAgZW5hYmxlcyBhbGwKIHBvc3NpYmxlIHJlc291cmNlcy4gSWYgYWxsIGJ1dCBvbmUgcmVzb3VyY2UgaXMgZGVzaXJlZCAoYSBtb3JlIGNvbW1vbiBjYXNlKSwgYQogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBkZXNpcmVkIG1heSBiZSBsaXN0ZWQgYWZ0ZXIKLTpvcHRpb246YGFsbGAuIFRoZSBjb21tYW5kIDpwcm9ncmFtOmBweXRob24gcmVncnRlc3QucHlgCi06b3B0aW9uOmAtdWFsbCwtYXVkaW8sLWxhcmdlZmlsZWAgd2lsbCBydW4gOm1vZDpgdGVzdC5yZWdydGVzdGAgd2l0aCBhbGwKLXJlc291cmNlcyBleGNlcHQgdGhlIDpvcHRpb246YGF1ZGlvYCBhbmQgOm9wdGlvbjpgbGFyZ2VmaWxlYCByZXNvdXJjZXMuIEZvciBhCi1saXN0IG9mIGFsbCByZXNvdXJjZXMgYW5kIG1vcmUgY29tbWFuZC1saW5lIG9wdGlvbnMsIHJ1biA6cHJvZ3JhbTpgcHl0aG9uCi1yZWdydGVzdC5weWAgOm9wdGlvbjpgLWhgLgorYGBhbGxgYC4gVGhlIGNvbW1hbmQgOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0IC11YWxsLC1hdWRpbywtbGFyZ2VmaWxlYAord2lsbCBydW4gOm1vZDpgdGVzdC5yZWdydGVzdGAgd2l0aCBhbGwgcmVzb3VyY2VzIGV4Y2VwdCB0aGUgYGBhdWRpb2BgIGFuZAorYGBsYXJnZWZpbGVgYCByZXNvdXJjZXMuIEZvciBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBhbmQgbW9yZSBjb21tYW5kLWxpbmUKK29wdGlvbnMsIHJ1biA6cHJvZ3JhbTpgcHl0aG9uIC1tIHRlc3QucmVncnRlc3QgLWhgLgogCiBTb21lIG90aGVyIHdheXMgdG8gZXhlY3V0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBkZXBlbmQgb24gd2hhdCBwbGF0Zm9ybSB0aGUKLXRlc3RzIGFyZSBiZWluZyBleGVjdXRlZCBvbi4gT24gVW5peCwgeW91IGNhbiBydW4gOnByb2dyYW06YG1ha2VgIDpvcHRpb246YHRlc3RgCi1hdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSB3aGVyZSBQeXRob24gd2FzIGJ1aWx0LiBPbiBXaW5kb3dzLCBleGVjdXRpbmcKK3Rlc3RzIGFyZSBiZWluZyBleGVjdXRlZCBvbi4gT24gVW5peCwgeW91IGNhbiBydW4gOnByb2dyYW06YG1ha2UgdGVzdGAgYXQgdGhlCit0b3AtbGV2ZWwgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiB3YXMgYnVpbHQuIE9uIFdpbmRvd3MsIGV4ZWN1dGluZwogOnByb2dyYW06YHJ0LmJhdGAgZnJvbSB5b3VyIDpmaWxlOmBQQ0J1aWxkYCBkaXJlY3Rvcnkgd2lsbCBydW4gYWxsIHJlZ3Jlc3Npb24KIHRlc3RzLgogCkBAIC0yMTAsMTcgKzIxMCwxMSBAQAogICAgbWV0aG9kcy4KIAogCi0uLiBleGNlcHRpb246OiBUZXN0U2tpcHBlZAotCi0gICBTdWJjbGFzcyBvZiA6ZXhjOmBUZXN0RmFpbGVkYC4gUmFpc2VkIHdoZW4gYSB0ZXN0IGlzIHNraXBwZWQuIFRoaXMgb2NjdXJzIHdoZW4gYQotICAgbmVlZGVkIHJlc291cmNlIChzdWNoIGFzIGEgbmV0d29yayBjb25uZWN0aW9uKSBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIG9mCi0gICB0ZXN0aW5nLgotCi0KIC4uIGV4Y2VwdGlvbjo6IFJlc291cmNlRGVuaWVkCiAKLSAgIFN1YmNsYXNzIG9mIDpleGM6YFRlc3RTa2lwcGVkYC4gUmFpc2VkIHdoZW4gYSByZXNvdXJjZSAoc3VjaCBhcyBhIG5ldHdvcmsKLSAgIGNvbm5lY3Rpb24pIGlzIG5vdCBhdmFpbGFibGUuIFJhaXNlZCBieSB0aGUgOmZ1bmM6YHJlcXVpcmVzYCBmdW5jdGlvbi4KKyAgIFN1YmNsYXNzIG9mIDpleGM6YHVuaXR0ZXN0LlNraXBUZXN0YC4gUmFpc2VkIHdoZW4gYSByZXNvdXJjZSAoc3VjaCBhcyBhCisgICBuZXR3b3JrIGNvbm5lY3Rpb24pIGlzIG5vdCBhdmFpbGFibGUuIFJhaXNlZCBieSB0aGUgOmZ1bmM6YHJlcXVpcmVzYAorICAgZnVuY3Rpb24uCiAKIFRoZSA6bW9kOmB0ZXN0LnRlc3Rfc3VwcG9ydGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAKQEAgLTI0NCw0NCArMjM4LDQ1IEBACiAKIC4uIGRhdGE6OiBURVNURk4KIAotICAgU2V0IHRvIHRoZSBwYXRoIHRoYXQgYSB0ZW1wb3JhcnkgZmlsZSBtYXkgYmUgY3JlYXRlZCBhdC4gQW55IHRlbXBvcmFyeSB0aGF0IGlzCi0gICBjcmVhdGVkIHNob3VsZCBiZSBjbG9zZWQgYW5kIHVubGlua2VkIChyZW1vdmVkKS4KKyAgIFNldCB0byBhIG5hbWUgdGhhdCBpcyBzYWZlIHRvIHVzZSBhcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlLiAgQW55CisgICB0ZW1wb3JhcnkgZmlsZSB0aGF0IGlzIGNyZWF0ZWQgc2hvdWxkIGJlIGNsb3NlZCBhbmQgdW5saW5rZWQgKHJlbW92ZWQpLgogCiBUaGUgOm1vZDpgdGVzdC50ZXN0X3N1cHBvcnRgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKIC4uIGZ1bmN0aW9uOjogZm9yZ2V0KG1vZHVsZV9uYW1lKQogCi0gICBSZW1vdmVzIHRoZSBtb2R1bGUgbmFtZWQgKm1vZHVsZV9uYW1lKiBmcm9tIGBgc3lzLm1vZHVsZXNgYCBhbmQgZGVsZXRlcyBhbnkKKyAgIFJlbW92ZSB0aGUgbW9kdWxlIG5hbWVkICptb2R1bGVfbmFtZSogZnJvbSBgYHN5cy5tb2R1bGVzYGAgYW5kIGRlbGV0ZSBhbnkKICAgIGJ5dGUtY29tcGlsZWQgZmlsZXMgb2YgdGhlIG1vZHVsZS4KIAogCiAuLiBmdW5jdGlvbjo6IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpCiAKLSAgIFJldHVybnMgOmNvbnN0OmBUcnVlYCBpZiAqcmVzb3VyY2UqIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gVGhlIGxpc3Qgb2YKKyAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmICpyZXNvdXJjZSogaXMgZW5hYmxlZCBhbmQgYXZhaWxhYmxlLiBUaGUgbGlzdCBvZgogICAgYXZhaWxhYmxlIHJlc291cmNlcyBpcyBvbmx5IHNldCB3aGVuIDptb2Q6YHRlc3QucmVncnRlc3RgIGlzIGV4ZWN1dGluZyB0aGUKICAgIHRlc3RzLgogCiAKIC4uIGZ1bmN0aW9uOjogcmVxdWlyZXMocmVzb3VyY2VbLCBtc2ddKQogCi0gICBSYWlzZXMgOmV4YzpgUmVzb3VyY2VEZW5pZWRgIGlmICpyZXNvdXJjZSogaXMgbm90IGF2YWlsYWJsZS4gKm1zZyogaXMgdGhlCi0gICBhcmd1bWVudCB0byA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgaXQgaXMgcmFpc2VkLiBBbHdheXMgcmV0dXJucyB0cnVlIGlmIGNhbGxlZAotICAgYnkgYSBmdW5jdGlvbiB3aG9zZSBgYF9fbmFtZV9fYGAgaXMgYGAnX19tYWluX18nYGAuIFVzZWQgd2hlbiB0ZXN0cyBhcmUgZXhlY3V0ZWQKLSAgIGJ5IDptb2Q6YHRlc3QucmVncnRlc3RgLgorICAgUmFpc2UgOmV4YzpgUmVzb3VyY2VEZW5pZWRgIGlmICpyZXNvdXJjZSogaXMgbm90IGF2YWlsYWJsZS4gKm1zZyogaXMgdGhlCisgICBhcmd1bWVudCB0byA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgaXQgaXMgcmFpc2VkLiBBbHdheXMgcmV0dXJucworICAgOmNvbnN0OmBUcnVlYCBpZiBjYWxsZWQgYnkgYSBmdW5jdGlvbiB3aG9zZSBgYF9fbmFtZV9fYGAgaXMgYGAnX19tYWluX18nYGAuCisgICBVc2VkIHdoZW4gdGVzdHMgYXJlIGV4ZWN1dGVkIGJ5IDptb2Q6YHRlc3QucmVncnRlc3RgLgogCiAKIC4uIGZ1bmN0aW9uOjogZmluZGZpbGUoZmlsZW5hbWUpCiAKLSAgIFJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZSBuYW1lZCAqZmlsZW5hbWUqLiBJZiBubyBtYXRjaCBpcyBmb3VuZCAqZmlsZW5hbWUqIGlzCi0gICByZXR1cm5lZC4gVGhpcyBkb2VzIG5vdCBlcXVhbCBhIGZhaWx1cmUgc2luY2UgaXQgY291bGQgYmUgdGhlIHBhdGggdG8gdGhlIGZpbGUuCisgICBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZpbGUgbmFtZWQgKmZpbGVuYW1lKi4gSWYgbm8gbWF0Y2ggaXMgZm91bmQKKyAgICpmaWxlbmFtZSogaXMgcmV0dXJuZWQuIFRoaXMgZG9lcyBub3QgZXF1YWwgYSBmYWlsdXJlIHNpbmNlIGl0IGNvdWxkIGJlIHRoZQorICAgcGF0aCB0byB0aGUgZmlsZS4KIAogCiAuLiBmdW5jdGlvbjo6IHJ1bl91bml0dGVzdCgqY2xhc3NlcykKIAogICAgRXhlY3V0ZSA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYCBzdWJjbGFzc2VzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIFRoZQotICAgZnVuY3Rpb24gc2NhbnMgdGhlIGNsYXNzZXMgZm9yIG1ldGhvZHMgc3RhcnRpbmcgd2l0aCB0aGUgcHJlZml4IGBgdGVzdF9gYCBhbmQKLSAgIGV4ZWN1dGVzIHRoZSB0ZXN0cyBpbmRpdmlkdWFsbHkuCisgICBmdW5jdGlvbiBzY2FucyB0aGUgY2xhc3NlcyBmb3IgbWV0aG9kcyBzdGFydGluZyB3aXRoIHRoZSBwcmVmaXggYGB0ZXN0X2BgCisgICBhbmQgZXhlY3V0ZXMgdGhlIHRlc3RzIGluZGl2aWR1YWxseS4KIAogICAgSXQgaXMgYWxzbyBsZWdhbCB0byBwYXNzIHN0cmluZ3MgYXMgcGFyYW1ldGVyczsgdGhlc2Ugc2hvdWxkIGJlIGtleXMgaW4KICAgIGBgc3lzLm1vZHVsZXNgYC4gRWFjaCBhc3NvY2lhdGVkIG1vZHVsZSB3aWxsIGJlIHNjYW5uZWQgYnkKQEAgLTI5NCwzNyArMjg5LDg1IEBACiAgICBUaGlzIHdpbGwgcnVuIGFsbCB0ZXN0cyBkZWZpbmVkIGluIHRoZSBuYW1lZCBtb2R1bGUuCiAKIAotLi4gZnVuY3Rpb246OiBjaGVja193YXJuaW5ncygpCisuLiBmdW5jdGlvbjo6IGNoZWNrX3dhcm5pbmdzKCpmaWx0ZXJzLCBxdWlldD1UcnVlKQogCi0gICBBIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIGBgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKWBgIHRoYXQgbWFrZXMKLSAgIGl0IGVhc2llciB0byB0ZXN0IHRoYXQgYSB3YXJuaW5nIHdhcyBjb3JyZWN0bHkgcmFpc2VkIHdpdGggYSBzaW5nbGUKLSAgIGFzc2VydGlvbi4gSXQgaXMgYXBwcm94aW1hdGVseSBlcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgIGBgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpYGAuCisgICBBIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIDpmdW5jOmB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpYCB0aGF0IG1ha2VzIGl0CisgICBlYXNpZXIgdG8gdGVzdCB0aGF0IGEgd2FybmluZyB3YXMgY29ycmVjdGx5IHJhaXNlZC4gIEl0IGlzIGFwcHJveGltYXRlbHkKKyAgIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKWBgIHdpdGgKKyAgIDptZXRoOmB3YXJuaW5ncy5zaW1wbGVmaWx0ZXJgIHNldCB0byBgYGFsd2F5c2BgIGFuZCB3aXRoIHRoZSBvcHRpb24gdG8KKyAgIGF1dG9tYXRpY2FsbHkgdmFsaWRhdGUgdGhlIHJlc3VsdHMgdGhhdCBhcmUgcmVjb3JkZWQuCiAKLSAgIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBvbiBlbnRyeSB0byB0aGUgY29udGV4dCBtYW5hZ2VyLCBhCi0gICA6Y2xhc3M6YFdhcm5pbmdSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhIHNpbXBsZSBsaXN0LgotICAgVGhlIHVuZGVybHlpbmcgd2FybmluZ3MgbGlzdCBpcyBhdmFpbGFibGUgdmlhIHRoZSByZWNvcmRlciBvYmplY3QncwotICAgOmF0dHI6YHdhcm5pbmdzYCBhdHRyaWJ1dGUsIHdoaWxlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBsYXN0IHJhaXNlZAotICAgd2FybmluZyBhcmUgYWxzbyBhY2Nlc3NpYmxlIGRpcmVjdGx5IG9uIHRoZSBvYmplY3QuIElmIG5vIHdhcm5pbmcgaGFzCi0gICBiZWVuIHJhaXNlZCwgdGhlbiB0aGUgbGF0dGVyIGF0dHJpYnV0ZXMgd2lsbCBhbGwgYmUgOmNvbnN0OmBOb25lYC4KKyAgIGBgY2hlY2tfd2FybmluZ3NgYCBhY2NlcHRzIDItdHVwbGVzIG9mIHRoZSBmb3JtIGBgKCJtZXNzYWdlIHJlZ2V4cCIsCisgICBXYXJuaW5nQ2F0ZWdvcnkpYGAgYXMgcG9zaXRpb25hbCBhcmd1bWVudHMuIElmIG9uZSBvciBtb3JlICpmaWx0ZXJzKiBhcmUKKyAgIHByb3ZpZGVkLCBvciBpZiB0aGUgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAqcXVpZXQqIGlzIDpjb25zdDpgRmFsc2VgLAorICAgaXQgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGUgd2FybmluZ3MgYXJlIGFzIGV4cGVjdGVkOiAgZWFjaCBzcGVjaWZpZWQgZmlsdGVyCisgICBtdXN0IG1hdGNoIGF0IGxlYXN0IG9uZSBvZiB0aGUgd2FybmluZ3MgcmFpc2VkIGJ5IHRoZSBlbmNsb3NlZCBjb2RlIG9yIHRoZQorICAgdGVzdCBmYWlscywgYW5kIGlmIGFueSB3YXJuaW5ncyBhcmUgcmFpc2VkIHRoYXQgZG8gbm90IG1hdGNoIGFueSBvZiB0aGUKKyAgIHNwZWNpZmllZCBmaWx0ZXJzIHRoZSB0ZXN0IGZhaWxzLiAgVG8gZGlzYWJsZSB0aGUgZmlyc3Qgb2YgdGhlc2UgY2hlY2tzLAorICAgc2V0ICpxdWlldCogdG8gOmNvbnN0OmBUcnVlYC4KIAotICAgQSA6bWV0aDpgcmVzZXRgIG1ldGhvZCBpcyBhbHNvIHByb3ZpZGVkIG9uIHRoZSByZWNvcmRlciBvYmplY3QuIFRoaXMKLSAgIG1ldGhvZCBzaW1wbHkgY2xlYXJzIHRoZSB3YXJuaW5nIGxpc3QuCisgICBJZiBubyBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG86OgogCi0gICBUaGUgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgbGlrZSB0aGlzOjoKKyAgICAgIGNoZWNrX3dhcm5pbmdzKCgiIiwgV2FybmluZyksIHF1aWV0PVRydWUpCiAKLSAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgIEluIHRoaXMgY2FzZSBhbGwgd2FybmluZ3MgYXJlIGNhdWdodCBhbmQgbm8gZXJyb3JzIGFyZSByYWlzZWQuCisKKyAgIE9uIGVudHJ5IHRvIHRoZSBjb250ZXh0IG1hbmFnZXIsIGEgOmNsYXNzOmBXYXJuaW5nUmVjb3JkZXJgIGluc3RhbmNlIGlzCisgICByZXR1cm5lZC4gVGhlIHVuZGVybHlpbmcgd2FybmluZ3MgbGlzdCBmcm9tCisgICA6ZnVuYzpgfndhcm5pbmdzLmNhdGNoX3dhcm5pbmdzYCBpcyBhdmFpbGFibGUgdmlhIHRoZSByZWNvcmRlciBvYmplY3QncworICAgOmF0dHI6YHdhcm5pbmdzYCBhdHRyaWJ1dGUuICBBcyBhIGNvbnZlbmllbmNlLCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0CisgICByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50IHdhcm5pbmcgY2FuIGFsc28gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdGhyb3VnaAorICAgdGhlIHJlY29yZGVyIG9iamVjdCAoc2VlIGV4YW1wbGUgYmVsb3cpLiAgSWYgbm8gd2FybmluZyBoYXMgYmVlbiByYWlzZWQsCisgICB0aGVuIGFueSBvZiB0aGUgYXR0cmlidXRlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBleHBlY3RlZCBvbiBhbiBvYmplY3QKKyAgIHJlcHJlc2VudGluZyBhIHdhcm5pbmcgd2lsbCByZXR1cm4gOmNvbnN0OmBOb25lYC4KKworICAgVGhlIHJlY29yZGVyIG9iamVjdCBhbHNvIGhhcyBhIDptZXRoOmByZXNldGAgbWV0aG9kLCB3aGljaCBjbGVhcnMgdGhlCisgICB3YXJuaW5ncyBsaXN0LgorCisgICBUaGUgY29udGV4dCBtYW5hZ2VyIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgbGlrZSB0aGlzOjoKKworICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoIiIsIFVzZXJXYXJuaW5nKSk6CisgICAgICAgICAgZXhlYygnYXNzZXJ0KEZhbHNlLCAiSGV5ISIpJykKKyAgICAgICAgICB3YXJuaW5ncy53YXJuKFVzZXJXYXJuaW5nKCJIaWRlIG1lISIpKQorCisgICBJbiB0aGlzIGNhc2UgaWYgZWl0aGVyIHdhcm5pbmcgd2FzIG5vdCByYWlzZWQsIG9yIHNvbWUgb3RoZXIgd2FybmluZyB3YXMKKyAgIHJhaXNlZCwgOmZ1bmM6YGNoZWNrX3dhcm5pbmdzYCB3b3VsZCByYWlzZSBhbiBlcnJvci4KKworICAgV2hlbiBhIHRlc3QgbmVlZHMgdG8gbG9vayBtb3JlIGRlZXBseSBpbnRvIHRoZSB3YXJuaW5ncywgcmF0aGVyIHRoYW4KKyAgIGp1c3QgY2hlY2tpbmcgd2hldGhlciBvciBub3QgdGhleSBvY2N1cnJlZCwgY29kZSBsaWtlIHRoaXMgY2FuIGJlIHVzZWQ6OgorCisgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CiAgICAgICAgICAgd2FybmluZ3Mud2FybigiZm9vIikKLSAgICAgICAgICBhc3NlcnQgc3RyKHcubWVzc2FnZSkgPT0gImZvbyIKKyAgICAgICAgICBhc3NlcnQgc3RyKHcuYXJnc1swXSkgPT0gImZvbyIKICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJiYXIiKQotICAgICAgICAgIGFzc2VydCBzdHIody5tZXNzYWdlKSA9PSAiYmFyIgotICAgICAgICAgIGFzc2VydCBzdHIody53YXJuaW5nc1swXS5tZXNzYWdlKSA9PSAiZm9vIgotICAgICAgICAgIGFzc2VydCBzdHIody53YXJuaW5nc1sxXS5tZXNzYWdlKSA9PSAiYmFyIgorICAgICAgICAgIGFzc2VydCBzdHIody5hcmdzWzBdKSA9PSAiYmFyIgorICAgICAgICAgIGFzc2VydCBzdHIody53YXJuaW5nc1swXS5hcmdzWzBdKSA9PSAiZm9vIgorICAgICAgICAgIGFzc2VydCBzdHIody53YXJuaW5nc1sxXS5hcmdzWzBdKSA9PSAiYmFyIgogICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgIGFzc2VydCBsZW4ody53YXJuaW5ncykgPT0gMAogCisgICBIZXJlIGFsbCB3YXJuaW5ncyB3aWxsIGJlIGNhdWdodCwgYW5kIHRoZSB0ZXN0IGNvZGUgdGVzdHMgdGhlIGNhcHR1cmVkCisgICB3YXJuaW5ncyBkaXJlY3RseS4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42CisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50cyAqZmlsdGVycyogYW5kICpxdWlldCouCisKKworLi4gZnVuY3Rpb246OiBjaGVja19weTNrX3dhcm5pbmdzKCpmaWx0ZXJzLCBxdWlldD1GYWxzZSkKKworICAgU2ltaWxhciB0byA6ZnVuYzpgY2hlY2tfd2FybmluZ3NgLCBidXQgZm9yIFB5dGhvbiAzIGNvbXBhdGliaWxpdHkgd2FybmluZ3MuCisgICBJZiBgYHN5cy5weTNrd2FybmluZyA9PSAxYGAsIGl0IGNoZWNrcyBpZiB0aGUgd2FybmluZyBpcyBlZmZlY3RpdmVseSByYWlzZWQuCisgICBJZiBgYHN5cy5weTNrd2FybmluZyA9PSAwYGAsIGl0IGNoZWNrcyB0aGF0IG5vIHdhcm5pbmcgaXMgcmFpc2VkLiAgSXQKKyAgIGFjY2VwdHMgMi10dXBsZXMgb2YgdGhlIGZvcm0gYGAoIm1lc3NhZ2UgcmVnZXhwIiwgV2FybmluZ0NhdGVnb3J5KWBgIGFzCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50cy4gIFdoZW4gdGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgKnF1aWV0KiBpcworICAgOmNvbnN0OmBUcnVlYCwgaXQgZG9lcyBub3QgZmFpbCBpZiBhIGZpbHRlciBjYXRjaGVzIG5vdGhpbmcuICBXaXRob3V0CisgICBhcmd1bWVudHMsIGl0IGRlZmF1bHRzIHRvOjoKKworICAgICAgY2hlY2tfcHkza193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PUZhbHNlKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCiAuLiBmdW5jdGlvbjo6IGNhcHR1cmVkX3N0ZG91dCgpCkBAIC0zNDIsNiArMzg1LDU0IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAogCisuLiBmdW5jdGlvbjo6IGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSkKKworICAgVGhpcyBmdW5jdGlvbiBpbXBvcnRzIGFuZCByZXR1cm5zIHRoZSBuYW1lZCBtb2R1bGUuIFVubGlrZSBhIG5vcm1hbAorICAgaW1wb3J0LCB0aGlzIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmB1bml0dGVzdC5Ta2lwVGVzdGAgaWYgdGhlIG1vZHVsZQorICAgY2Fubm90IGJlIGltcG9ydGVkLgorCisgICBNb2R1bGUgYW5kIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMgYXJlIHN1cHByZXNzZWQgZHVyaW5nIHRoaXMgaW1wb3J0CisgICBpZiAqZGVwcmVjYXRlZCogaXMgOmNvbnN0OmBUcnVlYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworLi4gZnVuY3Rpb246OiBpbXBvcnRfZnJlc2hfbW9kdWxlKG5hbWUsIGZyZXNoPSgpLCBibG9ja2VkPSgpLCBkZXByZWNhdGVkPUZhbHNlKQorCisgICBUaGlzIGZ1bmN0aW9uIGltcG9ydHMgYW5kIHJldHVybnMgYSBmcmVzaCBjb3B5IG9mIHRoZSBuYW1lZCBQeXRob24gbW9kdWxlCisgICBieSByZW1vdmluZyB0aGUgbmFtZWQgbW9kdWxlIGZyb20gYGBzeXMubW9kdWxlc2BgIGJlZm9yZSBkb2luZyB0aGUgaW1wb3J0LgorICAgTm90ZSB0aGF0IHVubGlrZSA6ZnVuYzpgcmVsb2FkYCwgdGhlIG9yaWdpbmFsIG1vZHVsZSBpcyBub3QgYWZmZWN0ZWQgYnkKKyAgIHRoaXMgb3BlcmF0aW9uLgorCisgICAqZnJlc2gqIGlzIGFuIGl0ZXJhYmxlIG9mIGFkZGl0aW9uYWwgbW9kdWxlIG5hbWVzIHRoYXQgYXJlIGFsc28gcmVtb3ZlZAorICAgZnJvbSB0aGUgYGBzeXMubW9kdWxlc2BgIGNhY2hlIGJlZm9yZSBkb2luZyB0aGUgaW1wb3J0LgorCisgICAqYmxvY2tlZCogaXMgYW4gaXRlcmFibGUgb2YgbW9kdWxlIG5hbWVzIHRoYXQgYXJlIHJlcGxhY2VkIHdpdGggOmNvbnN0OmAwYAorICAgaW4gdGhlIG1vZHVsZSBjYWNoZSBkdXJpbmcgdGhlIGltcG9ydCB0byBlbnN1cmUgdGhhdCBhdHRlbXB0cyB0byBpbXBvcnQKKyAgIHRoZW0gcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgLgorCisgICBUaGUgbmFtZWQgbW9kdWxlIGFuZCBhbnkgbW9kdWxlcyBuYW1lZCBpbiB0aGUgKmZyZXNoKiBhbmQgKmJsb2NrZWQqCisgICBwYXJhbWV0ZXJzIGFyZSBzYXZlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGltcG9ydCBhbmQgdGhlbiByZWluc2VydGVkIGludG8KKyAgIGBgc3lzLm1vZHVsZXNgYCB3aGVuIHRoZSBmcmVzaCBpbXBvcnQgaXMgY29tcGxldGUuCisKKyAgIE1vZHVsZSBhbmQgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcyBhcmUgc3VwcHJlc3NlZCBkdXJpbmcgdGhpcyBpbXBvcnQKKyAgIGlmICpkZXByZWNhdGVkKiBpcyA6Y29uc3Q6YFRydWVgLgorCisgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmFpc2UgOmV4YzpgdW5pdHRlc3QuU2tpcFRlc3RgIGlzIHRoZSBuYW1lZCBtb2R1bGUKKyAgIGNhbm5vdCBiZSBpbXBvcnRlZC4KKworICAgRXhhbXBsZSB1c2U6OgorCisgICAgICAjIEdldCBjb3BpZXMgb2YgdGhlIHdhcm5pbmdzIG1vZHVsZSBmb3IgdGVzdGluZyB3aXRob3V0CisgICAgICAjIGFmZmVjdGluZyB0aGUgdmVyc2lvbiBiZWluZyB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSB0ZXN0IHN1aXRlCisgICAgICAjIE9uZSBjb3B5IHVzZXMgdGhlIEMgaW1wbGVtZW50YXRpb24sIHRoZSBvdGhlciBpcyBmb3JjZWQgdG8gdXNlCisgICAgICAjIHRoZSBwdXJlIFB5dGhvbiBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbgorICAgICAgcHlfd2FybmluZ3MgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd3YXJuaW5ncycsIGJsb2NrZWQ9Wydfd2FybmluZ3MnXSkKKyAgICAgIGNfd2FybmluZ3MgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd3YXJuaW5ncycsIGZyZXNoPVsnX3dhcm5pbmdzJ10pCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKIFRoZSA6bW9kOmB0ZXN0LnRlc3Rfc3VwcG9ydGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IFRyYW5zaWVudFJlc291cmNlKGV4Y1ssICoqa3dhcmdzXSkKQEAgLTM1NSwyNSArNDQ2LDMxIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIC4uIGNsYXNzOjogRW52aXJvbm1lbnRWYXJHdWFyZCgpCiAKLSAgIENsYXNzIHVzZWQgdG8gdGVtcG9yYXJpbHkgc2V0IG9yIHVuc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEluc3RhbmNlcyBjYW4gYmUKLSAgIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCisgICBDbGFzcyB1c2VkIHRvIHRlbXBvcmFyaWx5IHNldCBvciB1bnNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBJbnN0YW5jZXMgY2FuCisgICBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIGFuZCBoYXZlIGEgY29tcGxldGUgZGljdGlvbmFyeSBpbnRlcmZhY2UgZm9yCisgICBxdWVyeWluZy9tb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcgYGBvcy5lbnZpcm9uYGAuIEFmdGVyIGV4aXQgZnJvbSB0aGUKKyAgIGNvbnRleHQgbWFuYWdlciBhbGwgY2hhbmdlcyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZG9uZSB0aHJvdWdoIHRoaXMKKyAgIGluc3RhbmNlIHdpbGwgYmUgcm9sbGVkIGJhY2suCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIGRpY3Rpb25hcnkgaW50ZXJmYWNlLgogCiAKIC4uIG1ldGhvZDo6IEVudmlyb25tZW50VmFyR3VhcmQuc2V0KGVudnZhciwgdmFsdWUpCiAKLSAgIFRlbXBvcmFyaWx5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYCB0byB0aGUgdmFsdWUgb2YgYGB2YWx1ZWBgLgorICAgVGVtcG9yYXJpbHkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgIHRvIHRoZSB2YWx1ZSBvZgorICAgYGB2YWx1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEVudmlyb25tZW50VmFyR3VhcmQudW5zZXQoZW52dmFyKQogCiAgICBUZW1wb3JhcmlseSB1bnNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYC4KIAorCiAuLiBjbGFzczo6IFdhcm5pbmdzUmVjb3JkZXIoKQogCiAgICBDbGFzcyB1c2VkIHRvIHJlY29yZCB3YXJuaW5ncyBmb3IgdW5pdCB0ZXN0cy4gU2VlIGRvY3VtZW50YXRpb24gb2YKICAgIDpmdW5jOmBjaGVja193YXJuaW5nc2AgYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi42Ci0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdCBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAppbmRleCBhMmRiNTY3Li44ZmJmZTljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CkBAIC0xNiw2ICsxNiwxMCBAQAogb3IgdHdvICB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOwogb3RoZXJ3aXNlLCAgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHRleHR3cmFwIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi90ZXh0d3JhcC5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBmdW5jdGlvbjo6IHdyYXAodGV4dFssIHdpZHRoWywgLi4uXV0pCiAKQEAgLTEyMSw2ICsxMjUsMTMgQEAKICAgICAgICAgIGVhY2ggdGFiIGNoYXJhY3RlciB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLCB3aGljaCBpcyAqbm90KgogICAgICAgICAgdGhlIHNhbWUgYXMgdGFiIGV4cGFuc2lvbi4KIAorICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIElmIDphdHRyOmByZXBsYWNlX3doaXRlc3BhY2VgIGlzIGZhbHNlLCBuZXdsaW5lcyBtYXkgYXBwZWFyIGluIHRoZQorICAgICAgICAgbWlkZGxlIG9mIGEgbGluZSBhbmQgY2F1c2Ugc3RyYW5nZSBvdXRwdXQuIEZvciB0aGlzIHJlYXNvbiwgdGV4dCBzaG91bGQKKyAgICAgICAgIGJlIHNwbGl0IGludG8gcGFyYWdyYXBocyAodXNpbmcgOm1ldGg6YHN0ci5zcGxpdGxpbmVzYCBvciBzaW1pbGFyKQorICAgICAgICAgd2hpY2ggYXJlIHdyYXBwZWQgc2VwYXJhdGVseS4KKwogCiAgICAuLiBhdHRyaWJ1dGU6OiBkcm9wX3doaXRlc3BhY2UKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGhyZWFkLnJzdCBiL0RvYy9saWJyYXJ5L3RocmVhZC5yc3QKaW5kZXggZjhiNTg1MC4uN2U4ZDVjOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGhyZWFkLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aHJlYWQucnN0CkBAIC0xMTIsNiArMTEyLDcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKKwogTG9jayBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CmluZGV4IDZhOGVkMGQuLjBiNDYzNDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdApAQCAtMjYsNiArMjYsMjEgQEAKICAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuNSwgc2V2ZXJhbCBUaHJlYWQgbWV0aG9kcyByYWlzZSA6ZXhjOmBSdW50aW1lRXJyb3JgCiAgICBpbnN0ZWFkIG9mIDpleGM6YEFzc2VydGlvbkVycm9yYCBpZiBjYWxsZWQgZXJyb25lb3VzbHkuCiAKKy4uIGltcGwtZGV0YWlsOjoKKworICAgRHVlIHRvIHRoZSA6dGVybTpgR2xvYmFsIEludGVycHJldGVyIExvY2tgLCBpbiBDUHl0aG9uIG9ubHkgb25lIHRocmVhZAorICAgY2FuIGV4ZWN1dGUgUHl0aG9uIGNvZGUgYXQgb25jZSAoZXZlbiB0aG91Z2ggY2VydGFpbiBwZXJmb3JtYW5jZS1vcmllbnRlZAorICAgbGlicmFyaWVzIG1pZ2h0IG92ZXJjb21lIHRoaXMgbGltaXRhdGlvbikuCisgICBJZiB5b3Ugd2FudCB5b3VyIGFwcGxpY2F0aW9uIHRvIG1ha2UgYmV0dGVyIG9mIHVzZSBvZiB0aGUgY29tcHV0YXRpb25hbAorICAgcmVzb3VyY2VzIG9mIG11bHRpLWNvcmUgbWFjaGluZXMsIHlvdSBhcmUgYWR2aXNlZCB0byB1c2UKKyAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuIEhvd2V2ZXIsIHRocmVhZGluZyBpcyBzdGlsbCBhbiBhcHByb3ByaWF0ZSBtb2RlbAorICAgaWYgeW91IHdhbnQgdG8gcnVuIG11bHRpcGxlIEkvTy1ib3VuZCB0YXNrcyBzaW11bHRhbmVvdXNseS4KKworLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgdGhyZWFkaW5nIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi90aHJlYWRpbmcucHk/dmlldz1tYXJrdXA+YF8KKwogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBvYmplY3RzOgogCkBAIC00Myw2ICs1OCw4IEBACiAgICB2YXJpYWJsZSBhbGxvd3Mgb25lIG9yIG1vcmUgdGhyZWFkcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKICAgIHRocmVhZC4KIAorICAgU2VlIDpyZWY6YGNvbmRpdGlvbi1vYmplY3RzYC4KKwogCiAuLiBmdW5jdGlvbjo6IGN1cnJlbnRfdGhyZWFkKCkKICAgICAgICAgICAgICAgY3VycmVudFRocmVhZCgpCkBAIC02OSw2ICs4Niw4IEBACiAgICB3aXRoIHRoZSA6bWV0aDpgY2xlYXJgIG1ldGhvZC4gIFRoZSA6bWV0aDpgd2FpdGAgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZwogICAgaXMgdHJ1ZS4KIAorICAgU2VlIDpyZWY6YGV2ZW50LW9iamVjdHNgLgorCiAKIC4uIGNsYXNzOjogbG9jYWwKIApAQCAtOTMsNiArMTEyLDggQEAKICAgIGFjcXVpcmVkIGl0LCBzdWJzZXF1ZW50IGF0dGVtcHRzIHRvIGFjcXVpcmUgaXQgYmxvY2ssIHVudGlsIGl0IGlzIHJlbGVhc2VkOyBhbnkKICAgIHRocmVhZCBtYXkgcmVsZWFzZSBpdC4KIAorICAgU2VlIDpyZWY6YGxvY2stb2JqZWN0c2AuCisKIAogLi4gZnVuY3Rpb246OiBSTG9jaygpCiAKQEAgLTEwMSw2ICsxMjIsOCBAQAogICAgcmVlbnRyYW50IGxvY2ssIHRoZSBzYW1lIHRocmVhZCBtYXkgYWNxdWlyZSBpdCBhZ2FpbiB3aXRob3V0IGJsb2NraW5nOyB0aGUKICAgIHRocmVhZCBtdXN0IHJlbGVhc2UgaXQgb25jZSBmb3IgZWFjaCB0aW1lIGl0IGhhcyBhY3F1aXJlZCBpdC4KIAorICAgU2VlIDpyZWY6YHJsb2NrLW9iamVjdHNgLgorCiAKIC4uIGZ1bmN0aW9uOjogU2VtYXBob3JlKFt2YWx1ZV0pCiAgICA6bm9pbmRleDoKQEAgLTExMSw2ICsxMzQsOCBAQAogICAgaWYgbmVjZXNzYXJ5IHVudGlsIGl0IGNhbiByZXR1cm4gd2l0aG91dCBtYWtpbmcgdGhlIGNvdW50ZXIgbmVnYXRpdmUuICBJZiBub3QKICAgIGdpdmVuLCAqdmFsdWUqIGRlZmF1bHRzIHRvIDEuCiAKKyAgIFNlZSA6cmVmOmBzZW1hcGhvcmUtb2JqZWN0c2AuCisKIAogLi4gZnVuY3Rpb246OiBCb3VuZGVkU2VtYXBob3JlKFt2YWx1ZV0pCiAKQEAgLTEyMiwxNSArMTQ3LDIxIEBACiAKIAogLi4gY2xhc3M6OiBUaHJlYWQKKyAgIDpub2luZGV4OgogCiAgICBBIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIHRocmVhZCBvZiBjb250cm9sLiAgVGhpcyBjbGFzcyBjYW4gYmUgc2FmZWx5CiAgICBzdWJjbGFzc2VkIGluIGEgbGltaXRlZCBmYXNoaW9uLgogCisgICBTZWUgOnJlZjpgdGhyZWFkLW9iamVjdHNgLgorCiAKIC4uIGNsYXNzOjogVGltZXIKKyAgIDpub2luZGV4OgogCiAgICBBIHRocmVhZCB0aGF0IGV4ZWN1dGVzIGEgZnVuY3Rpb24gYWZ0ZXIgYSBzcGVjaWZpZWQgaW50ZXJ2YWwgaGFzIHBhc3NlZC4KIAorICAgU2VlIDpyZWY6YHRpbWVyLW9iamVjdHNgLgorCiAKIC4uIGZ1bmN0aW9uOjogc2V0dHJhY2UoZnVuYykKIApAQCAtMjU5LDcgKzI5MCw3IEBACiAgICAgICBJdCBtdXN0IGJlIGNhbGxlZCBhdCBtb3N0IG9uY2UgcGVyIHRocmVhZCBvYmplY3QuICBJdCBhcnJhbmdlcyBmb3IgdGhlCiAgICAgICBvYmplY3QncyA6bWV0aDpgcnVuYCBtZXRob2QgdG8gYmUgaW52b2tlZCBpbiBhIHNlcGFyYXRlIHRocmVhZCBvZiBjb250cm9sLgogCi0gICAgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUV4Y2VwdGlvbmAgaWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUVycm9yYCBpZiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKICAgICAgIG9uIHRoZSBzYW1lIHRocmVhZCBvYmplY3QuCiAKICAgIC4uIG1ldGhvZDo6IHJ1bigpCkBAIC0zNjgsNyArMzk5LDcgQEAKIEFsbCBtZXRob2RzIGFyZSBleGVjdXRlZCBhdG9taWNhbGx5LgogCiAKLS4uIG1ldGhvZDo6IExvY2suYWNxdWlyZShbYmxvY2tpbmc9MV0pCisuLiBtZXRob2Q6OiBMb2NrLmFjcXVpcmUoW2Jsb2NraW5nXSkKIAogICAgQWNxdWlyZSBhIGxvY2ssIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZy4KIApAQCAtNjI0LDkgKzY1NSw5IEBACiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBTZW1hcGhvcmVzIGFyZSBvZnRlbiB1c2VkIHRvIGd1YXJkIHJlc291cmNlcyB3aXRoIGxpbWl0ZWQgY2FwYWNpdHksIGZvciBleGFtcGxlLAotYSBkYXRhYmFzZSBzZXJ2ZXIuICBJbiBhbnkgc2l0dWF0aW9uIHdoZXJlIHRoZSBzaXplIG9mIHRoZSByZXNvdXJjZSBzaXplIGlzCi1maXhlZCwgeW91IHNob3VsZCB1c2UgYSBib3VuZGVkIHNlbWFwaG9yZS4gIEJlZm9yZSBzcGF3bmluZyBhbnkgd29ya2VyIHRocmVhZHMsCi15b3VyIG1haW4gdGhyZWFkIHdvdWxkIGluaXRpYWxpemUgdGhlIHNlbWFwaG9yZTo6CithIGRhdGFiYXNlIHNlcnZlci4gIEluIGFueSBzaXR1YXRpb24gd2hlcmUgdGhlIHNpemUgb2YgdGhlIHJlc291cmNlIGlzIGZpeGVkLAoreW91IHNob3VsZCB1c2UgYSBib3VuZGVkIHNlbWFwaG9yZS4gIEJlZm9yZSBzcGF3bmluZyBhbnkgd29ya2VyIHRocmVhZHMsIHlvdXIKK21haW4gdGhyZWFkIHdvdWxkIGluaXRpYWxpemUgdGhlIHNlbWFwaG9yZTo6CiAKICAgIG1heGNvbm5lY3Rpb25zID0gNQogICAgLi4uCkBAIC02OTMsNyArNzI0LDExIEBACiAgICAgICBmbG9hdGluZyBwb2ludCBudW1iZXIgc3BlY2lmeWluZyBhIHRpbWVvdXQgZm9yIHRoZSBvcGVyYXRpb24gaW4gc2Vjb25kcwogICAgICAgKG9yIGZyYWN0aW9ucyB0aGVyZW9mKS4KIAotICAgICAgVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYGBOb25lYGAuCisgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpbnRlcm5hbCBmbGFnIG9uIGV4aXQsIHNvIGl0IHdpbGwgYWx3YXlzIHJldHVybgorICAgICAgYGBUcnVlYGAgZXhjZXB0IGlmIGEgdGltZW91dCBpcyBnaXZlbiBhbmQgdGhlIG9wZXJhdGlvbiB0aW1lcyBvdXQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBQcmV2aW91c2x5LCB0aGUgbWV0aG9kIGFsd2F5cyByZXR1cm5lZCBgYE5vbmVgYC4KIAogCiAuLiBfdGltZXItb2JqZWN0czoKQEAgLTc1Nyw5ICs3OTIsOSBAQAogSW1wb3J0aW5nIGluIHRocmVhZGVkIGNvZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoaWxlIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGlzIHRocmVhZCBzYWZlLCB0aGVyZSBhcmUgdHdvIGtleQotcmVzdHJpY3Rpb25zIG9uIHRocmVhZGVkIGltcG9ydHMgZHVlIHRvIGluaGVyZW50IGxpbWl0YXRpb25zIGluIHRoZSB3YXkKLXRoYXQgdGhyZWFkIHNhZmV0eSBpcyBwcm92aWRlZDoKK1doaWxlIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGlzIHRocmVhZC1zYWZlLCB0aGVyZSBhcmUgdHdvIGtleSByZXN0cmljdGlvbnMgb24KK3RocmVhZGVkIGltcG9ydHMgZHVlIHRvIGluaGVyZW50IGxpbWl0YXRpb25zIGluIHRoZSB3YXkgdGhhdCB0aHJlYWQtc2FmZXR5IGlzCitwcm92aWRlZDoKIAogKiBGaXJzdGx5LCBvdGhlciB0aGFuIGluIHRoZSBtYWluIG1vZHVsZSwgYW4gaW1wb3J0IHNob3VsZCBub3QgaGF2ZSB0aGUKICAgc2lkZSBlZmZlY3Qgb2Ygc3Bhd25pbmcgYSBuZXcgdGhyZWFkIGFuZCB0aGVuIHdhaXRpbmcgZm9yIHRoYXQgdGhyZWFkIGluCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aW1lLnJzdCBiL0RvYy9saWJyYXJ5L3RpbWUucnN0CmluZGV4IDFmZmVmMmIuLmQ2ZWZjZWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RpbWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RpbWUucnN0CkBAIC0xNywyMSArMTcsMjMgQEAKIAogQW4gZXhwbGFuYXRpb24gb2Ygc29tZSB0ZXJtaW5vbG9neSBhbmQgY29udmVudGlvbnMgaXMgaW4gb3JkZXIuCiAKLSAgLi4gaW5kZXg6OiBzaW5nbGU6IGVwb2NoCisuLiBpbmRleDo6IHNpbmdsZTogZXBvY2gKIAogKiBUaGUgOmRmbjpgZXBvY2hgIGlzIHRoZSBwb2ludCB3aGVyZSB0aGUgdGltZSBzdGFydHMuICBPbiBKYW51YXJ5IDFzdCBvZiB0aGF0CiAgIHllYXIsIGF0IDAgaG91cnMsIHRoZSAidGltZSBzaW5jZSB0aGUgZXBvY2giIGlzIHplcm8uICBGb3IgVW5peCwgdGhlIGVwb2NoIGlzCiAgIDE5NzAuICBUbyBmaW5kIG91dCB3aGF0IHRoZSBlcG9jaCBpcywgbG9vayBhdCBgYGdtdGltZSgwKWBgLgogCi0gIC4uIGluZGV4Ojogc2luZ2xlOiBZZWFyIDIwMzgKKy4uIGluZGV4Ojogc2luZ2xlOiBZZWFyIDIwMzgKIAogKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGRvIG5vdCBoYW5kbGUgZGF0ZXMgYW5kIHRpbWVzIGJlZm9yZSB0aGUgZXBvY2ggb3IKICAgZmFyIGluIHRoZSBmdXR1cmUuICBUaGUgY3V0LW9mZiBwb2ludCBpbiB0aGUgZnV0dXJlIGlzIGRldGVybWluZWQgYnkgdGhlIEMKICAgbGlicmFyeTsgZm9yIFVuaXgsIGl0IGlzIHR5cGljYWxseSBpbiAyMDM4LgogCi0gIC4uIGluZGV4OjoKLSAgICAgc2luZ2xlOiBZZWFyIDIwMDAKLSAgICAgc2luZ2xlOiBZMksKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogWWVhciAyMDAwCisgICBzaW5nbGU6IFkySworCisuLiBfdGltZS15Mmtpc3N1ZXM6CiAKICogKipZZWFyIDIwMDAgKFkySykgaXNzdWVzKio6ICBQeXRob24gZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0ncyBDIGxpYnJhcnksIHdoaWNoCiAgIGdlbmVyYWxseSBkb2Vzbid0IGhhdmUgeWVhciAyMDAwIGlzc3Vlcywgc2luY2UgYWxsIGRhdGVzIGFuZCB0aW1lcyBhcmUKQEAgLTQ4LDE2ICs1MCwxNiBAQAogICBOb3RlIHRoYXQgdGhpcyBpcyBuZXcgYXMgb2YgUHl0aG9uIDEuNS4yKGEyKTsgZWFybGllciB2ZXJzaW9ucywgdXAgdG8gUHl0aG9uCiAgIDEuNS4xIGFuZCAxLjUuMmExLCB3b3VsZCBhZGQgMTkwMCB0byB5ZWFyIHZhbHVlcyBiZWxvdyAxOTAwLgogCi0gIC4uIGluZGV4OjoKLSAgICAgc2luZ2xlOiBVVEMKLSAgICAgc2luZ2xlOiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZQotICAgICBzaW5nbGU6IEdyZWVud2ljaCBNZWFuIFRpbWUKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogVVRDCisgICBzaW5nbGU6IENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lCisgICBzaW5nbGU6IEdyZWVud2ljaCBNZWFuIFRpbWUKIAogKiBVVEMgaXMgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUgKGZvcm1lcmx5IGtub3duIGFzIEdyZWVud2ljaCBNZWFuIFRpbWUsIG9yCiAgIEdNVCkuICBUaGUgYWNyb255bSBVVEMgaXMgbm90IGEgbWlzdGFrZSBidXQgYSBjb21wcm9taXNlIGJldHdlZW4gRW5nbGlzaCBhbmQKICAgRnJlbmNoLgogCi0gIC4uIGluZGV4Ojogc2luZ2xlOiBEYXlsaWdodCBTYXZpbmcgVGltZQorLi4gaW5kZXg6OiBzaW5nbGU6IERheWxpZ2h0IFNhdmluZyBUaW1lCiAKICogRFNUIGlzIERheWxpZ2h0IFNhdmluZyBUaW1lLCBhbiBhZGp1c3RtZW50IG9mIHRoZSB0aW1lem9uZSBieSAodXN1YWxseSkgb25lCiAgIGhvdXIgZHVyaW5nIHBhcnQgb2YgdGhlIHllYXIuICBEU1QgcnVsZXMgYXJlIG1hZ2ljIChkZXRlcm1pbmVkIGJ5IGxvY2FsIGxhdykgYW5kCkBAIC04MiwzNyArODQsNyBAQAogICB2YWx1ZXMgb2YgOmZ1bmM6YGdtdGltZWAsIDpmdW5jOmBsb2NhbHRpbWVgLCBhbmQgOmZ1bmM6YHN0cnB0aW1lYCBhbHNvIG9mZmVyCiAgIGF0dHJpYnV0ZSBuYW1lcyBmb3IgaW5kaXZpZHVhbCBmaWVsZHMuCiAKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgSW5kZXggfCBBdHRyaWJ1dGUgICAgICAgICB8IFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICArPT09PT09PSs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLSAgfCAwICAgICB8IDphdHRyOmB0bV95ZWFyYCAgIHwgKGZvciBleGFtcGxlLCAxOTkzKSAgICAgICAgICAgICB8Ci0gICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDEgICAgIHwgOmF0dHI6YHRtX21vbmAgICAgfCByYW5nZSBbMSwxMl0gICAgICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgMiAgICAgfCA6YXR0cjpgdG1fbWRheWAgICB8IHJhbmdlIFsxLDMxXSAgICAgICAgICAgICAgICAgICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCAzICAgICB8IDphdHRyOmB0bV9ob3VyYCAgIHwgcmFuZ2UgWzAsMjNdICAgICAgICAgICAgICAgICAgICB8Ci0gICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDQgICAgIHwgOmF0dHI6YHRtX21pbmAgICAgfCByYW5nZSBbMCw1OV0gICAgICAgICAgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgNSAgICAgfCA6YXR0cjpgdG1fc2VjYCAgICB8IHJhbmdlIFswLDYxXTsgc2VlICoqKDEpKiogaW4gICAgfAotICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgc3RyZnRpbWVgIGRlc2NyaXB0aW9uICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gIHwgNiAgICAgfCA6YXR0cjpgdG1fd2RheWAgICB8IHJhbmdlIFswLDZdLCBNb25kYXkgaXMgMCAgICAgICAgfAotICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgfCA3ICAgICB8IDphdHRyOmB0bV95ZGF5YCAgIHwgcmFuZ2UgWzEsMzY2XSAgICAgICAgICAgICAgICAgICB8Ci0gICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICB8IDggICAgIHwgOmF0dHI6YHRtX2lzZHN0YCAgfCAwLCAxIG9yIC0xOyBzZWUgYmVsb3cgICAgICAgICAgIHwKLSAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLSAgTm90ZSB0aGF0IHVubGlrZSB0aGUgQyBzdHJ1Y3R1cmUsIHRoZSBtb250aCB2YWx1ZSBpcyBhIHJhbmdlIG9mIDEtMTIsIG5vdCAwLTExLgotICBBIHllYXIgdmFsdWUgd2lsbCBiZSBoYW5kbGVkIGFzIGRlc2NyaWJlZCB1bmRlciAiWWVhciAyMDAwIChZMkspIGlzc3VlcyIgYWJvdmUuCi0gIEEgYGAtMWBgIGFyZ3VtZW50IGFzIHRoZSBkYXlsaWdodCBzYXZpbmdzIGZsYWcsIHBhc3NlZCB0byA6ZnVuYzpgbWt0aW1lYCB3aWxsCi0gIHVzdWFsbHkgcmVzdWx0IGluIHRoZSBjb3JyZWN0IGRheWxpZ2h0IHNhdmluZ3Mgc3RhdGUgdG8gYmUgZmlsbGVkIGluLgotCi0gIFdoZW4gYSB0dXBsZSB3aXRoIGFuIGluY29ycmVjdCBsZW5ndGggaXMgcGFzc2VkIHRvIGEgZnVuY3Rpb24gZXhwZWN0aW5nIGEKLSAgOmNsYXNzOmBzdHJ1Y3RfdGltZWAsIG9yIGhhdmluZyBlbGVtZW50cyBvZiB0aGUgd3JvbmcgdHlwZSwgYSA6ZXhjOmBUeXBlRXJyb3JgCi0gIGlzIHJhaXNlZC4KKyAgU2VlIDpjbGFzczpgc3RydWN0X3RpbWVgIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZXNlIG9iamVjdHMuCiAKICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjIKICAgICAgVGhlIHRpbWUgdmFsdWUgc2VxdWVuY2Ugd2FzIGNoYW5nZWQgZnJvbSBhIHR1cGxlIHRvIGEgOmNsYXNzOmBzdHJ1Y3RfdGltZWAsIHdpdGgKQEAgLTQxOCwxMyArMzkwLDQ4IEBACiAgICBkb2N1bWVudGVkIGFzIHN1cHBvcnRlZC4KIAogCi0uLiBkYXRhOjogc3RydWN0X3RpbWUKKy4uIGNsYXNzOjogc3RydWN0X3RpbWUKIAogICAgVGhlIHR5cGUgb2YgdGhlIHRpbWUgdmFsdWUgc2VxdWVuY2UgcmV0dXJuZWQgYnkgOmZ1bmM6YGdtdGltZWAsCi0gICA6ZnVuYzpgbG9jYWx0aW1lYCwgYW5kIDpmdW5jOmBzdHJwdGltZWAuCisgICA6ZnVuYzpgbG9jYWx0aW1lYCwgYW5kIDpmdW5jOmBzdHJwdGltZWAuICBJdCBpcyBhbiBvYmplY3Qgd2l0aCBhIDp0ZXJtOmBuYW1lZAorICAgdHVwbGVgIGludGVyZmFjZTogdmFsdWVzIGNhbiBiZSBhY2Nlc3NlZCBieSBpbmRleCBhbmQgYnkgYXR0cmlidXRlIG5hbWUuICBUaGUKKyAgIGZvbGxvd2luZyB2YWx1ZXMgYXJlIHByZXNlbnQ6CisKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBJbmRleCB8IEF0dHJpYnV0ZSAgICAgICAgIHwgVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PSs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgMCAgICAgfCA6YXR0cjpgdG1feWVhcmAgICB8IChmb3IgZXhhbXBsZSwgMTk5MykgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDEgICAgIHwgOmF0dHI6YHRtX21vbmAgICAgfCByYW5nZSBbMSwgMTJdICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCAyICAgICB8IDphdHRyOmB0bV9tZGF5YCAgIHwgcmFuZ2UgWzEsIDMxXSAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgMyAgICAgfCA6YXR0cjpgdG1faG91cmAgICB8IHJhbmdlIFswLCAyM10gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDQgICAgIHwgOmF0dHI6YHRtX21pbmAgICAgfCByYW5nZSBbMCwgNTldICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA1ICAgICB8IDphdHRyOmB0bV9zZWNgICAgIHwgcmFuZ2UgWzAsIDYxXTsgc2VlICoqKDEpKiogaW4gICB8CisgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgc3RyZnRpbWVgIGRlc2NyaXB0aW9uICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA2ICAgICB8IDphdHRyOmB0bV93ZGF5YCAgIHwgcmFuZ2UgWzAsIDZdLCBNb25kYXkgaXMgMCAgICAgICB8CisgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgNyAgICAgfCA6YXR0cjpgdG1feWRheWAgICB8IHJhbmdlIFsxLCAzNjZdICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDggICAgIHwgOmF0dHI6YHRtX2lzZHN0YCAgfCAwLCAxIG9yIC0xOyBzZWUgYmVsb3cgICAgICAgICAgIHwKKyAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjIKIAorICAgTm90ZSB0aGF0IHVubGlrZSB0aGUgQyBzdHJ1Y3R1cmUsIHRoZSBtb250aCB2YWx1ZSBpcyBhIHJhbmdlIG9mIFsxLCAxMl0sIG5vdAorICAgWzAsIDExXS4gIEEgeWVhciB2YWx1ZSB3aWxsIGJlIGhhbmRsZWQgYXMgZGVzY3JpYmVkIHVuZGVyIDpyZWY6YFllYXIgMjAwMAorICAgKFkySykgaXNzdWVzIDx0aW1lLXkya2lzc3Vlcz5gIGFib3ZlLiAgQSBgYC0xYGAgYXJndW1lbnQgYXMgdGhlIGRheWxpZ2h0CisgICBzYXZpbmdzIGZsYWcsIHBhc3NlZCB0byA6ZnVuYzpgbWt0aW1lYCB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIHRoZSBjb3JyZWN0CisgICBkYXlsaWdodCBzYXZpbmdzIHN0YXRlIHRvIGJlIGZpbGxlZCBpbi4KKworICAgV2hlbiBhIHR1cGxlIHdpdGggYW4gaW5jb3JyZWN0IGxlbmd0aCBpcyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYQorICAgOmNsYXNzOmBzdHJ1Y3RfdGltZWAsIG9yIGhhdmluZyBlbGVtZW50cyBvZiB0aGUgd3JvbmcgdHlwZSwgYQorICAgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCisKIAogLi4gZnVuY3Rpb246OiB0aW1lKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggNGY5MzBiMy4uMjlhOTQxYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC0xMjUsMjcgKzEyNSwzNiBAQAogCiAgICBweXRob24gLW0gdGltZWl0IFstbiBOXSBbLXIgTl0gWy1zIFNdIFstdF0gWy1jXSBbLWhdIFtzdGF0ZW1lbnQgLi4uXQogCi13aGVyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVuZGVyc3Rvb2Q6CitXaGVyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVuZGVyc3Rvb2Q6CiAKLS1uIE4vOm9wdGlvbjpgLS1udW1iZXI9TmAKKy4uIHByb2dyYW06OiB0aW1laXQKKworLi4gY21kb3B0aW9uOjogLW4gTiwgLS1udW1iZXI9TgorCiAgICBob3cgbWFueSB0aW1lcyB0byBleGVjdXRlICdzdGF0ZW1lbnQnCiAKLS1yIE4vOm9wdGlvbjpgLS1yZXBlYXQ9TmAKKy4uIGNtZG9wdGlvbjo6IC1yIE4sIC0tcmVwZWF0PU4KKwogICAgaG93IG1hbnkgdGltZXMgdG8gcmVwZWF0IHRoZSB0aW1lciAoZGVmYXVsdCAzKQogCi0tcyBTLzpvcHRpb246YC0tc2V0dXA9U2AKLSAgIHN0YXRlbWVudCB0byBiZSBleGVjdXRlZCBvbmNlIGluaXRpYWxseSAoZGVmYXVsdCBgYCdwYXNzJ2BgKQorLi4gY21kb3B0aW9uOjogLXMgUywgLS1zZXR1cD1TCiAKLS10LzpvcHRpb246YC0tdGltZWAKKyAgIHN0YXRlbWVudCB0byBiZSBleGVjdXRlZCBvbmNlIGluaXRpYWxseSAoZGVmYXVsdCBgYHBhc3NgYCkKKworLi4gY21kb3B0aW9uOjogLXQsIC0tdGltZQorCiAgICB1c2UgOmZ1bmM6YHRpbWUudGltZWAgKGRlZmF1bHQgb24gYWxsIHBsYXRmb3JtcyBidXQgV2luZG93cykKIAotLWMvOm9wdGlvbjpgLS1jbG9ja2AKKy4uIGNtZG9wdGlvbjo6IC1jLCAtLWNsb2NrCisKICAgIHVzZSA6ZnVuYzpgdGltZS5jbG9ja2AgKGRlZmF1bHQgb24gV2luZG93cykKIAotLXYvOm9wdGlvbjpgLS12ZXJib3NlYAorLi4gY21kb3B0aW9uOjogLXYsIC0tdmVyYm9zZQorCiAgICBwcmludCByYXcgdGltaW5nIHJlc3VsdHM7IHJlcGVhdCBmb3IgbW9yZSBkaWdpdHMgcHJlY2lzaW9uCiAKLS1oLzpvcHRpb246YC0taGVscGAKKy4uIGNtZG9wdGlvbjo6IC1oLCAtLWhlbHAKKwogICAgcHJpbnQgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIGFuZCBleGl0CiAKIEEgbXVsdGktbGluZSBzdGF0ZW1lbnQgbWF5IGJlIGdpdmVuIGJ5IHNwZWNpZnlpbmcgZWFjaCBsaW5lIGFzIGEgc2VwYXJhdGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RrLnJzdCBiL0RvYy9saWJyYXJ5L3RrLnJzdAppbmRleCBlMWMyNWI2Li5mMDRjM2VjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGsucnN0CkBAIC0xMiw3ICsxMiw4IEBACiAKIFRrL1RjbCBoYXMgbG9uZyBiZWVuIGFuIGludGVncmFsIHBhcnQgb2YgUHl0aG9uLiAgSXQgcHJvdmlkZXMgYSByb2J1c3QgYW5kCiBwbGF0Zm9ybSBpbmRlcGVuZGVudCB3aW5kb3dpbmcgdG9vbGtpdCwgdGhhdCBpcyBhdmFpbGFibGUgdG8gUHl0aG9uIHByb2dyYW1tZXJzCi11c2luZyB0aGUgOm1vZDpgVGtpbnRlcmAgbW9kdWxlLCBhbmQgaXRzIGV4dGVuc2lvbiwgdGhlIDptb2Q6YFRpeGAgbW9kdWxlLgordXNpbmcgdGhlIDptb2Q6YFRraW50ZXJgIG1vZHVsZSwgYW5kIGl0cyBleHRlbnNpb25zLCB0aGUgOm1vZDpgVGl4YCBhbmQKK3RoZSA6bW9kOmB0dGtgIG1vZHVsZXMuCiAKIFRoZSA6bW9kOmBUa2ludGVyYCBtb2R1bGUgaXMgYSB0aGluIG9iamVjdC1vcmllbnRlZCBsYXllciBvbiB0b3Agb2YgVGNsL1RrLiBUbwogdXNlIDptb2Q6YFRraW50ZXJgLCB5b3UgZG9uJ3QgbmVlZCB0byB3cml0ZSBUY2wgY29kZSwgYnV0IHlvdSB3aWxsIG5lZWQgdG8KQEAgLTMyLDYgKzMzLDcgQEAKIC4uIHRvY3RyZWU6OgogCiAgICB0a2ludGVyLnJzdAorICAgdHRrLnJzdAogICAgdGl4LnJzdAogICAgc2Nyb2xsZWR0ZXh0LnJzdAogICAgdHVydGxlLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW4ucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW4ucnN0CmluZGV4IDViZjBlYTguLjAwOTcyYjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbi5yc3QKQEAgLTEzLDggKzEzLDggQEAKIHRoZSBsYW5ndWFnZSBncmFtbWFyLiAgVGhlIHNwZWNpZmljIG51bWVyaWMgdmFsdWVzIHdoaWNoIHRoZSBuYW1lcyBtYXAgdG8gbWF5CiBjaGFuZ2UgYmV0d2VlbiBQeXRob24gdmVyc2lvbnMuCiAKLVRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgb25lIGRhdGEgb2JqZWN0IGFuZCBzb21lIGZ1bmN0aW9ucy4gIFRoZSBmdW5jdGlvbnMKLW1pcnJvciBkZWZpbml0aW9ucyBpbiB0aGUgUHl0aG9uIEMgaGVhZGVyIGZpbGVzLgorVGhlIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgbWFwcGluZyBmcm9tIG51bWVyaWMgY29kZXMgdG8gbmFtZXMgYW5kIHNvbWUKK2Z1bmN0aW9ucy4gIFRoZSBmdW5jdGlvbnMgbWlycm9yIGRlZmluaXRpb25zIGluIHRoZSBQeXRob24gQyBoZWFkZXIgZmlsZXMuCiAKIAogLi4gZGF0YTo6IHRva19uYW1lCkBAIC0zOSw2ICszOSw2NSBAQAogICAgUmV0dXJuIHRydWUgaWYgKngqIGlzIHRoZSBtYXJrZXIgaW5kaWNhdGluZyB0aGUgZW5kIG9mIGlucHV0LgogCiAKK1RoZSB0b2tlbiBjb25zdGFudHMgYXJlOgorCisuLiBkYXRhOjogRU5ETUFSS0VSCisgICAgICAgICAgTkFNRQorICAgICAgICAgIE5VTUJFUgorICAgICAgICAgIFNUUklORworICAgICAgICAgIE5FV0xJTkUKKyAgICAgICAgICBJTkRFTlQKKyAgICAgICAgICBERURFTlQKKyAgICAgICAgICBMUEFSCisgICAgICAgICAgUlBBUgorICAgICAgICAgIExTUUIKKyAgICAgICAgICBSU1FCCisgICAgICAgICAgQ09MT04KKyAgICAgICAgICBDT01NQQorICAgICAgICAgIFNFTUkKKyAgICAgICAgICBQTFVTCisgICAgICAgICAgTUlOVVMKKyAgICAgICAgICBTVEFSCisgICAgICAgICAgU0xBU0gKKyAgICAgICAgICBWQkFSCisgICAgICAgICAgQU1QRVIKKyAgICAgICAgICBMRVNTCisgICAgICAgICAgR1JFQVRFUgorICAgICAgICAgIEVRVUFMCisgICAgICAgICAgRE9UCisgICAgICAgICAgUEVSQ0VOVAorICAgICAgICAgIEJBQ0tRVU9URQorICAgICAgICAgIExCUkFDRQorICAgICAgICAgIFJCUkFDRQorICAgICAgICAgIEVRRVFVQUwKKyAgICAgICAgICBOT1RFUVVBTAorICAgICAgICAgIExFU1NFUVVBTAorICAgICAgICAgIEdSRUFURVJFUVVBTAorICAgICAgICAgIFRJTERFCisgICAgICAgICAgQ0lSQ1VNRkxFWAorICAgICAgICAgIExFRlRTSElGVAorICAgICAgICAgIFJJR0hUU0hJRlQKKyAgICAgICAgICBET1VCTEVTVEFSCisgICAgICAgICAgUExVU0VRVUFMCisgICAgICAgICAgTUlORVFVQUwKKyAgICAgICAgICBTVEFSRVFVQUwKKyAgICAgICAgICBTTEFTSEVRVUFMCisgICAgICAgICAgUEVSQ0VOVEVRVUFMCisgICAgICAgICAgQU1QRVJFUVVBTAorICAgICAgICAgIFZCQVJFUVVBTAorICAgICAgICAgIENJUkNVTUZMRVhFUVVBTAorICAgICAgICAgIExFRlRTSElGVEVRVUFMCisgICAgICAgICAgUklHSFRTSElGVEVRVUFMCisgICAgICAgICAgRE9VQkxFU1RBUkVRVUFMCisgICAgICAgICAgRE9VQkxFU0xBU0gKKyAgICAgICAgICBET1VCTEVTTEFTSEVRVUFMCisgICAgICAgICAgQVQKKyAgICAgICAgICBPUAorICAgICAgICAgIEVSUk9SVE9LRU4KKyAgICAgICAgICBOX1RPS0VOUworICAgICAgICAgIE5UX09GRlNFVAorCisKIC4uIHNlZWFsc286OgogCiAgICBNb2R1bGUgOm1vZDpgcGFyc2VyYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CmluZGV4IDM2ZjU4MzguLjJhN2RlYTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKQEAgLTEzLDYgKzEzLDExIEBACiB3ZWxsLCBtYWtpbmcgaXQgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgInByZXR0eS1wcmludGVycywiIGluY2x1ZGluZyBjb2xvcml6ZXJzCiBmb3Igb24tc2NyZWVuIGRpc3BsYXlzLgogCisuLiBzZWVhbHNvOjoKKworICAgTGF0ZXN0IHZlcnNpb24gb2YgdGhlIGB0b2tlbml6ZSBtb2R1bGUgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvdG9rZW5pemUucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIHByaW1hcnkgZW50cnkgcG9pbnQgaXMgYSA6dGVybTpgZ2VuZXJhdG9yYDoKIAogLi4gZnVuY3Rpb246OiBnZW5lcmF0ZV90b2tlbnMocmVhZGxpbmUpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZS5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZS5yc3QKaW5kZXggMzAzY2IxZS4uMmU5ZDJiNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHJhY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlLnJzdApAQCAtMSwzICsxLDQgQEAKKwogOm1vZDpgdHJhY2VgIC0tLSBUcmFjZSBvciB0cmFjayBQeXRob24gc3RhdGVtZW50IGV4ZWN1dGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMCwxMCArMTEsMTQgQEAKIGxpc3QgZnVuY3Rpb25zIGV4ZWN1dGVkIGR1cmluZyBhIHByb2dyYW0gcnVuLiAgSXQgY2FuIGJlIHVzZWQgaW4gYW5vdGhlciBwcm9ncmFtCiBvciBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHRyYWNlIG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi90cmFjZS5weT92aWV3PW1hcmt1cD5gXwogCiAuLiBfdHJhY2UtY2xpOgogCi1Db21tYW5kIExpbmUgVXNhZ2UKK0NvbW1hbmQtTGluZSBVc2FnZQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmB0cmFjZWAgbW9kdWxlIGNhbiBiZSBpbnZva2VkIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIEl0IGNhbiBiZSBhcwpAQCAtMjEsODIgKzI2LDg5IEBACiAKICAgIHB5dGhvbiAtbSB0cmFjZSAtLWNvdW50IC1DIC4gc29tZWZpbGUucHkgLi4uCiAKLVRoZSBhYm92ZSB3aWxsIGV4ZWN1dGUgOmZpbGU6YHNvbWVmaWxlLnB5YCBhbmQgZ2VuZXJhdGUgYW5ub3RhdGVkIGxpc3RpbmdzIG9mIGFsbAotUHl0aG9uIG1vZHVsZXMgaW1wb3J0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitUaGUgYWJvdmUgd2lsbCBleGVjdXRlIDpmaWxlOmBzb21lZmlsZS5weWAgYW5kIGdlbmVyYXRlIGFubm90YXRlZCBsaXN0aW5ncyBvZgorYWxsIFB5dGhvbiBtb2R1bGVzIGltcG9ydGVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIGludG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgogCi1NZXRhLW9wdGlvbnMKLV5eXl5eXl5eXl5eXgorLi4gcHJvZ3JhbTo6IHRyYWNlCiAKLWBgLS1oZWxwYGAKKy4uIGNtZG9wdGlvbjo6IC0taGVscAogCiAgICBEaXNwbGF5IHVzYWdlIGFuZCBleGl0LgogCi1gYC0tdmVyc2lvbmBgCisuLiBjbWRvcHRpb246OiAtLXZlcnNpb24KIAogICAgRGlzcGxheSB0aGUgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIGFuZCBleGl0LgogCiBNYWluIG9wdGlvbnMKIF5eXl5eXl5eXl5eXgogCi1UaGUgYGAtLWxpc3RmdW5jc2BgIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGUgYGAtLXRyYWNlYGAgYW5kCi1gYC0tY291bnRgYCBvcHRpb25zIC4gV2hlbiBgYC0tbGlzdGZ1bmNzYGAgaXMgcHJvdmlkZWQsIG5laXRoZXIgYGAtLWNvdW50c2BgCi1ub3IgYGAtLXRyYWNlYGAgYXJlIGFjY2VwdGVkLCBhbmQgdmljZSB2ZXJzYS4KK0F0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbnZva2luZworOm1vZDpgdHJhY2VgLiAgVGhlIDpvcHRpb246YC0tbGlzdGZ1bmNzIDwtbD5gIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aAordGhlIDpvcHRpb246YC0tdHJhY2UgPC10PmAgYW5kIDpvcHRpb246YC0tY291bnRzIDwtYz5gIG9wdGlvbnMgLiBXaGVuCis6b3B0aW9uOmAtLWxpc3RmdW5jcyA8LWw+YCBpcyBwcm92aWRlZCwgbmVpdGhlciA6b3B0aW9uOmAtLWNvdW50cyA8LWM+YCBub3IKKzpvcHRpb246YC0tdHJhY2UgPC10PmAgYXJlIGFjY2VwdGVkLCBhbmQgdmljZSB2ZXJzYS4KIAotYGAtLWNvdW50LCAtY2BgCisuLiBwcm9ncmFtOjogdHJhY2UKKworLi4gY21kb3B0aW9uOjogLWMsIC0tY291bnQKIAogICAgUHJvZHVjZSBhIHNldCBvZiBhbm5vdGF0ZWQgbGlzdGluZyBmaWxlcyB1cG9uIHByb2dyYW0gY29tcGxldGlvbiB0aGF0IHNob3dzCi0gICBob3cgbWFueSB0aW1lcyBlYWNoIHN0YXRlbWVudCB3YXMgZXhlY3V0ZWQuCi0gICBTZWUgYWxzbyBgYC0tY292ZXJkaXJgYCwgYGAtLWZpbGVgYCwgYGAtLW5vLXJlcG9ydGBgIGJlbG93LgorICAgaG93IG1hbnkgdGltZXMgZWFjaCBzdGF0ZW1lbnQgd2FzIGV4ZWN1dGVkLiAgU2VlIGFsc28KKyAgIDpvcHRpb246YC0tY292ZXJkaXIgPC1DPmAsIDpvcHRpb246YC0tZmlsZSA8LWY+YCBhbmQKKyAgIDpvcHRpb246YC0tbm8tcmVwb3J0IDwtUj5gIGJlbG93LgogCi1gYC0tdHJhY2UsIC10YGAKKy4uIGNtZG9wdGlvbjo6IC10LCAtLXRyYWNlCiAKICAgIERpc3BsYXkgbGluZXMgYXMgdGhleSBhcmUgZXhlY3V0ZWQuCiAKLWBgLS1saXN0ZnVuY3MsIC1sYGAKKy4uIGNtZG9wdGlvbjo6IC1sLCAtLWxpc3RmdW5jcwogCiAgICBEaXNwbGF5IHRoZSBmdW5jdGlvbnMgZXhlY3V0ZWQgYnkgcnVubmluZyB0aGUgcHJvZ3JhbS4KIAotYGAtLXJlcG9ydCwgLXJgYAorLi4gY21kb3B0aW9uOjogLXIsIC0tcmVwb3J0CiAKLSAgIFByb2R1Y2UgYW4gYW5ub3RhdGVkIGxpc3QgZnJvbSBhbiBlYXJsaWVyIHByb2dyYW0gcnVuIHRoYXQgdXNlZCB0aGUgYGAtLWNvdW50YGAKLSAgIGFuZCBgYC0tZmlsZWBgIG9wdGlvbi4gRG8gbm90IGV4ZWN1dGUgYW55IGNvZGUuCisgICBQcm9kdWNlIGFuIGFubm90YXRlZCBsaXN0IGZyb20gYW4gZWFybGllciBwcm9ncmFtIHJ1biB0aGF0IHVzZWQgdGhlCisgICA6b3B0aW9uOmAtLWNvdW50IDwtYz5gIGFuZCA6b3B0aW9uOmAtLWZpbGUgPC1mPmAgb3B0aW9uLiAgVGhpcyBkb2VzIG5vdAorICAgZXhlY3V0ZSBhbnkgY29kZS4KIAotYGAtLXRyYWNrY2FsbHMsIC1UYGAKKy4uIGNtZG9wdGlvbjo6IC1ULCAtLXRyYWNrY2FsbHMKIAogICAgRGlzcGxheSB0aGUgY2FsbGluZyByZWxhdGlvbnNoaXBzIGV4cG9zZWQgYnkgcnVubmluZyB0aGUgcHJvZ3JhbS4KIAogTW9kaWZpZXJzCiBeXl5eXl5eXl4KIAotYGAtLWZpbGU9PGZpbGU+LCAtZmBgCisuLiBwcm9ncmFtOjogdHJhY2UKIAotICAgTmFtZSBvZiBhIGZpbGUgdG8gYWNjdW11bGF0ZSBjb3VudHMgb3ZlciBzZXZlcmFsIHRyYWNpbmcgcnVucy4gU2hvdWxkIGJlIHVzZWQKLSAgIHdpdGggdGhlIGBgLS1jb3VudGBgIG9wdGlvbi4KKy4uIGNtZG9wdGlvbjo6IC1mLCAtLWZpbGU9PGZpbGU+CiAKLWBgLS1jb3ZlcmRpcj08ZGlyPiwgLUNgYAorICAgTmFtZSBvZiBhIGZpbGUgdG8gYWNjdW11bGF0ZSBjb3VudHMgb3ZlciBzZXZlcmFsIHRyYWNpbmcgcnVucy4gIFNob3VsZCBiZQorICAgdXNlZCB3aXRoIHRoZSA6b3B0aW9uOmAtLWNvdW50IDwtYz5gIG9wdGlvbi4KIAotICAgRGlyZWN0b3J5IHdoZXJlIHRoZSByZXBvcnQgZmlsZXMgZ28uIFRoZSBjb3ZlcmFnZSByZXBvcnQgZm9yCi0gICBgYHBhY2thZ2UubW9kdWxlYGAgaXMgd3JpdHRlbiB0byBmaWxlIGBgZGlyL3BhY2thZ2UvbW9kdWxlLmNvdmVyYGAuCisuLiBjbWRvcHRpb246OiAtQywgLS1jb3ZlcmRpcj08ZGlyPgogCi1gYC0tbWlzc2luZywgLW1gYAorICAgRGlyZWN0b3J5IHdoZXJlIHRoZSByZXBvcnQgZmlsZXMgZ28uICBUaGUgY292ZXJhZ2UgcmVwb3J0IGZvcgorICAgYGBwYWNrYWdlLm1vZHVsZWBgIGlzIHdyaXR0ZW4gdG8gZmlsZSA6ZmlsZTpge2Rpcn0ve3BhY2thZ2V9L3ttb2R1bGV9LmNvdmVyYC4KKworLi4gY21kb3B0aW9uOjogLW0sIC0tbWlzc2luZwogCiAgICBXaGVuIGdlbmVyYXRpbmcgYW5ub3RhdGVkIGxpc3RpbmdzLCBtYXJrIGxpbmVzIHdoaWNoIHdlcmUgbm90IGV4ZWN1dGVkIHdpdGgKLSAgICdgYD4+Pj4+PmBgJy4KKyAgIGBgPj4+Pj4+YGAuCiAKLWBgLS1zdW1tYXJ5LCAtc2BgCisuLiBjbWRvcHRpb246OiAtcywgLS1zdW1tYXJ5CiAKLSAgIFdoZW4gdXNpbmcgYGAtLWNvdW50YGAgb3IgYGAtLXJlcG9ydGBgLCB3cml0ZSBhIGJyaWVmIHN1bW1hcnkgdG8KLSAgIHN0ZG91dCBmb3IgZWFjaCBmaWxlIHByb2Nlc3NlZC4KKyAgIFdoZW4gdXNpbmcgOm9wdGlvbjpgLS1jb3VudCA8LWM+YCBvciA6b3B0aW9uOmAtLXJlcG9ydCA8LXI+YCwgd3JpdGUgYSBicmllZgorICAgc3VtbWFyeSB0byBzdGRvdXQgZm9yIGVhY2ggZmlsZSBwcm9jZXNzZWQuCiAKLWBgLS1uby1yZXBvcnQsIC1SYGAKKy4uIGNtZG9wdGlvbjo6IC1SLCAtLW5vLXJlcG9ydAogCiAgICBEbyBub3QgZ2VuZXJhdGUgYW5ub3RhdGVkIGxpc3RpbmdzLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGludGVuZCB0byBtYWtlCi0gICBzZXZlcmFsIHJ1bnMgd2l0aCBgYC0tY291bnRgYCB0aGVuIHByb2R1Y2UgYSBzaW5nbGUgc2V0IG9mIGFubm90YXRlZAotICAgbGlzdGluZ3MgYXQgdGhlIGVuZC4KKyAgIHNldmVyYWwgcnVucyB3aXRoIDpvcHRpb246YC0tY291bnQgPC1jPmAsIGFuZCB0aGVuIHByb2R1Y2UgYSBzaW5nbGUgc2V0IG9mCisgICBhbm5vdGF0ZWQgbGlzdGluZ3MgYXQgdGhlIGVuZC4KIAotYGAtLXRpbWluZywgLWdgYAorLi4gY21kb3B0aW9uOjogLWcsIC0tdGltaW5nCiAKLSAgIFByZWZpeCBlYWNoIGxpbmUgd2l0aCB0aGUgdGltZSBzaW5jZSB0aGUgcHJvZ3JhbSBzdGFydGVkLiBPbmx5IHVzZWQgd2hpbGUKKyAgIFByZWZpeCBlYWNoIGxpbmUgd2l0aCB0aGUgdGltZSBzaW5jZSB0aGUgcHJvZ3JhbSBzdGFydGVkLiAgT25seSB1c2VkIHdoaWxlCiAgICB0cmFjaW5nLgogCiBGaWx0ZXJzCkBAIC0xMDQsNzggKzExNiw3OSBAQAogCiBUaGVzZSBvcHRpb25zIG1heSBiZSByZXBlYXRlZCBtdWx0aXBsZSB0aW1lcy4KIAotYGAtLWlnbm9yZS1tb2R1bGU9PG1vZD5gYAorLi4gcHJvZ3JhbTo6IHRyYWNlCiAKLSAgIEFjY2VwdHMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIG5hbWVzLiBJZ25vcmUgZWFjaCBvZiB0aGUgbmFtZWQKLSAgIG1vZHVsZXMgYW5kIGl0cyBzdWJtb2R1bGVzIChpZiBpdCBpcyBhIHBhY2thZ2UpLgorLi4gY21kb3B0aW9uOjogLS1pZ25vcmUtbW9kdWxlPTxtb2Q+CiAKLWBgLS1pZ25vcmUtZGlyPTxkaXI+YGAKKyAgIElnbm9yZSBlYWNoIG9mIHRoZSBnaXZlbiBtb2R1bGUgbmFtZXMgYW5kIGl0cyBzdWJtb2R1bGVzIChpZiBpdCBpcyBhCisgICBwYWNrYWdlKS4gIFRoZSBhcmd1bWVudCBjYW4gYmUgYSBsaXN0IG9mIG5hbWVzIHNlcGFyYXRlZCBieSBhIGNvbW1hLgogCi0gICBJZ25vcmUgYWxsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGluIHRoZSBuYW1lZCBkaXJlY3RvcnkgYW5kIHN1YmRpcmVjdG9yaWVzCi0gICAobXVsdGlwbGUgZGlyZWN0b3JpZXMgY2FuIGJlIGpvaW5lZCBieSBgYG9zLnBhdGhzZXBgYCkuCisuLiBjbWRvcHRpb246OiAtLWlnbm9yZS1kaXI9PGRpcj4KKworICAgSWdub3JlIGFsbCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBpbiB0aGUgbmFtZWQgZGlyZWN0b3J5IGFuZCBzdWJkaXJlY3Rvcmllcy4KKyAgIFRoZSBhcmd1bWVudCBjYW4gYmUgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHNlcGFyYXRlZCBieSA6ZGF0YTpgb3MucGF0aHNlcGAuCiAKIC4uIF90cmFjZS1hcGk6CiAKLVByb2dyYW1taW5nIEludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQcm9ncmFtbWF0aWMgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIGNsYXNzOjogVHJhY2UoW2NvdW50PTFbLCB0cmFjZT0xWywgY291bnRmdW5jcz0wWywgY291bnRjYWxsZXJzPTBbLCBpZ25vcmVtb2RzPSgpWywgaWdub3JlZGlycz0oKVssIGluZmlsZT1Ob25lWywgb3V0ZmlsZT1Ob25lWywgdGltaW5nPUZhbHNlXV1dXV1dXV1dKQogCi0uLiBjbGFzczo6IFRyYWNlKGNvdW50PTEsIHRyYWNlPTEsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTAsIGlnbm9yZW1vZHM9KCksIGlnbm9yZWRpcnM9KCksIGluZmlsZT1Ob25lLCBvdXRmaWxlPU5vbmUsIHRpbWluZz1GYWxzZSkKKyAgIENyZWF0ZSBhbiBvYmplY3QgdG8gdHJhY2UgZXhlY3V0aW9uIG9mIGEgc2luZ2xlIHN0YXRlbWVudCBvciBleHByZXNzaW9uLiAgQWxsCisgICBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4gICpjb3VudCogZW5hYmxlcyBjb3VudGluZyBvZiBsaW5lIG51bWJlcnMuICAqdHJhY2UqCisgICBlbmFibGVzIGxpbmUgZXhlY3V0aW9uIHRyYWNpbmcuICAqY291bnRmdW5jcyogZW5hYmxlcyBsaXN0aW5nIG9mIHRoZQorICAgZnVuY3Rpb25zIGNhbGxlZCBkdXJpbmcgdGhlIHJ1bi4gICpjb3VudGNhbGxlcnMqIGVuYWJsZXMgY2FsbCByZWxhdGlvbnNoaXAKKyAgIHRyYWNraW5nLiAgKmlnbm9yZW1vZHMqIGlzIGEgbGlzdCBvZiBtb2R1bGVzIG9yIHBhY2thZ2VzIHRvIGlnbm9yZS4KKyAgICppZ25vcmVkaXJzKiBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hvc2UgbW9kdWxlcyBvciBwYWNrYWdlcyBzaG91bGQgYmUKKyAgIGlnbm9yZWQuICAqaW5maWxlKiBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRvIHJlYWQgc3RvcmVkIGNvdW50CisgICBpbmZvcm1hdGlvbi4gICpvdXRmaWxlKiBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0byB3cml0ZSB1cGRhdGVkCisgICBjb3VudCBpbmZvcm1hdGlvbi4gICp0aW1pbmcqIGVuYWJsZXMgYSB0aW1lc3RhbXAgcmVsYXRpdmUgdG8gd2hlbiB0cmFjaW5nIHdhcworICAgc3RhcnRlZCB0byBiZSBkaXNwbGF5ZWQuCiAKLSAgIENyZWF0ZSBhbiBvYmplY3QgdG8gdHJhY2UgZXhlY3V0aW9uIG9mIGEgc2luZ2xlIHN0YXRlbWVudCBvciBleHByZXNzaW9uLiBBbGwKLSAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsLiAgKmNvdW50KiBlbmFibGVzIGNvdW50aW5nIG9mIGxpbmUgbnVtYmVycy4gKnRyYWNlKgotICAgZW5hYmxlcyBsaW5lIGV4ZWN1dGlvbiB0cmFjaW5nLiAgKmNvdW50ZnVuY3MqIGVuYWJsZXMgbGlzdGluZyBvZiB0aGUgZnVuY3Rpb25zCi0gICBjYWxsZWQgZHVyaW5nIHRoZSBydW4uICAqY291bnRjYWxsZXJzKiBlbmFibGVzIGNhbGwgcmVsYXRpb25zaGlwIHRyYWNraW5nLgotICAgKmlnbm9yZW1vZHMqIGlzIGEgbGlzdCBvZiBtb2R1bGVzIG9yIHBhY2thZ2VzIHRvIGlnbm9yZS4gICppZ25vcmVkaXJzKiBpcyBhIGxpc3QKLSAgIG9mIGRpcmVjdG9yaWVzIHdob3NlIG1vZHVsZXMgb3IgcGFja2FnZXMgc2hvdWxkIGJlIGlnbm9yZWQuICAqaW5maWxlKiBpcyB0aGUKLSAgIG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0byByZWFkIHN0b3JlZCBjb3VudCBpbmZvcm1hdGlvbi4gICpvdXRmaWxlKiBpcwotICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdG8gd3JpdGUgdXBkYXRlZCBjb3VudCBpbmZvcm1hdGlvbi4gKnRpbWluZyoKLSAgIGVuYWJsZXMgYSB0aW1lc3RhbXAgcmVsYXRpdmUgdG8gd2hlbiB0cmFjaW5nIHdhcyBzdGFydGVkIHRvIGJlIGRpc3BsYXllZC4KKyAgICAuLiBtZXRob2Q6OiBydW4oY21kKQogCisgICAgICAgRXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgZ2F0aGVyIHN0YXRpc3RpY3MgZnJvbSB0aGUgZXhlY3V0aW9uIHdpdGgKKyAgICAgICB0aGUgY3VycmVudCB0cmFjaW5nIHBhcmFtZXRlcnMuICAqY21kKiBtdXN0IGJlIGEgc3RyaW5nIG9yIGNvZGUgb2JqZWN0LAorICAgICAgIHN1aXRhYmxlIGZvciBwYXNzaW5nIGludG8gOmZ1bmM6YGV4ZWNgLgogCi0uLiBtZXRob2Q6OiBUcmFjZS5ydW4oY21kKQorICAgIC4uIG1ldGhvZDo6IHJ1bmN0eChjbWRbLCBnbG9iYWxzPU5vbmVbLCBsb2NhbHM9Tm9uZV1dKQogCi0gICBSdW4gKmNtZCogdW5kZXIgY29udHJvbCBvZiB0aGUgOmNsYXNzOmBUcmFjZWAgb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgdHJhY2luZyBwYXJhbWV0ZXJzLgotICAgKmNtZCogbXVzdCBiZSBhIHN0cmluZyBvciBjb2RlIG9iamVjdCwgc3VpdGFibGUgZm9yIHBhc3NpbmcgaW50byA6ZnVuYzpgZXhlY2AuCisgICAgICAgRXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgZ2F0aGVyIHN0YXRpc3RpY3MgZnJvbSB0aGUgZXhlY3V0aW9uIHdpdGggdGhlCisgICAgICAgY3VycmVudCB0cmFjaW5nIHBhcmFtZXRlcnMsIGluIHRoZSBkZWZpbmVkIGdsb2JhbCBhbmQgbG9jYWwKKyAgICAgICBlbnZpcm9ubWVudHMuICBJZiBub3QgZGVmaW5lZCwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKiBkZWZhdWx0IHRvIGVtcHR5CisgICAgICAgZGljdGlvbmFyaWVzLgogCisgICAgLi4gbWV0aG9kOjogcnVuZnVuYyhmdW5jLCAqYXJncywgKiprd2RzKQogCi0uLiBtZXRob2Q6OiBUcmFjZS5ydW5jdHgoY21kLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKQorICAgICAgIENhbGwgKmZ1bmMqIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cyB1bmRlciBjb250cm9sIG9mIHRoZSA6Y2xhc3M6YFRyYWNlYAorICAgICAgIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IHRyYWNpbmcgcGFyYW1ldGVycy4KIAotICAgUnVuICpjbWQqIHVuZGVyIGNvbnRyb2wgb2YgdGhlIDpjbGFzczpgVHJhY2VgIG9iamVjdCB3aXRoIHRoZSBjdXJyZW50IHRyYWNpbmcgcGFyYW1ldGVycwotICAgaW4gdGhlIGRlZmluZWQgZ2xvYmFsIGFuZCBsb2NhbCBlbnZpcm9ubWVudHMuICBJZiBub3QgZGVmaW5lZCwgKmdsb2JhbHMqIGFuZAotICAgKmxvY2FscyogZGVmYXVsdCB0byBlbXB0eSBkaWN0aW9uYXJpZXMuCisgICAgLi4gbWV0aG9kOjogcmVzdWx0cygpCiAKLQotLi4gbWV0aG9kOjogVHJhY2UucnVuZnVuYyhmdW5jLCAqYXJncywgKiprd2RzKQotCi0gICBDYWxsICpmdW5jKiB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMgdW5kZXIgY29udHJvbCBvZiB0aGUgOmNsYXNzOmBUcmFjZWAgb2JqZWN0Ci0gICB3aXRoIHRoZSBjdXJyZW50IHRyYWNpbmcgcGFyYW1ldGVycy4KLQotLi4gbWV0aG9kOjogVHJhY2UucmVzdWx0cygpCi0KLSAgIFJldHVybiBhIDpjbGFzczpgQ292ZXJhZ2VSZXN1bHRzYCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY3VtdWxhdGl2ZSByZXN1bHRzCi0gICBvZiBhbGwgcHJldmlvdXMgY2FsbHMgdG8gYGBydW5gYCwgYGBydW5jdHhgYCBhbmQgYGBydW5mdW5jYGAgZm9yIHRoZSBnaXZlbgotICAgOmNsYXNzOmBUcmFjZWAgaW5zdGFuY2UuIERvZXMgbm90IHJlc2V0IHRoZSBhY2N1bXVsYXRlZCB0cmFjZSByZXN1bHRzLgorICAgICAgIFJldHVybiBhIDpjbGFzczpgQ292ZXJhZ2VSZXN1bHRzYCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY3VtdWxhdGl2ZQorICAgICAgIHJlc3VsdHMgb2YgYWxsIHByZXZpb3VzIGNhbGxzIHRvIGBgcnVuYGAsIGBgcnVuY3R4YGAgYW5kIGBgcnVuZnVuY2BgCisgICAgICAgZm9yIHRoZSBnaXZlbiA6Y2xhc3M6YFRyYWNlYCBpbnN0YW5jZS4gIERvZXMgbm90IHJlc2V0IHRoZSBhY2N1bXVsYXRlZAorICAgICAgIHRyYWNlIHJlc3VsdHMuCiAKIC4uIGNsYXNzOjogQ292ZXJhZ2VSZXN1bHRzCiAKLSAgIEEgY29udGFpbmVyIGZvciBjb3ZlcmFnZSByZXN1bHRzLCBjcmVhdGVkIGJ5IDptZXRoOmBUcmFjZS5yZXN1bHRzYC4gU2hvdWxkIG5vdAotICAgYmUgY3JlYXRlZCBkaXJlY3RseSBieSB0aGUgdXNlci4KKyAgIEEgY29udGFpbmVyIGZvciBjb3ZlcmFnZSByZXN1bHRzLCBjcmVhdGVkIGJ5IDptZXRoOmBUcmFjZS5yZXN1bHRzYC4gIFNob3VsZAorICAgbm90IGJlIGNyZWF0ZWQgZGlyZWN0bHkgYnkgdGhlIHVzZXIuCiAKLS4uIG1ldGhvZDo6IENvdmVyYWdlUmVzdWx0cy51cGRhdGUob3RoZXIpCisgICAgLi4gbWV0aG9kOjogdXBkYXRlKG90aGVyKQogCi0gICBNZXJnZSBpbiBkYXRhIGZyb20gYW5vdGhlciA6Y2xhc3M6YENvdmVyYWdlUmVzdWx0c2Agb2JqZWN0LgorICAgICAgIE1lcmdlIGluIGRhdGEgZnJvbSBhbm90aGVyIDpjbGFzczpgQ292ZXJhZ2VSZXN1bHRzYCBvYmplY3QuCiAKLS4uIG1ldGhvZDo6IENvdmVyYWdlUmVzdWx0cy53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PUZhbHNlLCBjb3ZlcmRpcj1Ob25lKQorICAgIC4uIG1ldGhvZDo6IHdyaXRlX3Jlc3VsdHMoW3Nob3dfbWlzc2luZz1UcnVlWywgc3VtbWFyeT1GYWxzZVssIGNvdmVyZGlyPU5vbmVdXV0pCiAKLSAgIFdyaXRlIGNvdmVyYWdlIHJlc3VsdHMuIFNldCAqc2hvd19taXNzaW5nKiB0byBzaG93IGxpbmVzIHRoYXQgaGFkIG5vIGhpdHMuCi0gICBTZXQgKnN1bW1hcnkqIHRvIGluY2x1ZGUgaW4gdGhlIG91dHB1dCB0aGUgY292ZXJhZ2Ugc3VtbWFyeSBwZXIgbW9kdWxlLiAqY292ZXJkaXIqCi0gICBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSBjb3ZlcmFnZSByZXN1bHQgZmlsZXMgd2lsbCBiZSBvdXRwdXQuCi0gICBJZiBgYE5vbmVgYCwgdGhlIHJlc3VsdHMgZm9yIGVhY2ggc291cmNlIGZpbGUgYXJlIHBsYWNlZCBpbiBpdHMgZGlyZWN0b3J5LgorICAgICAgIFdyaXRlIGNvdmVyYWdlIHJlc3VsdHMuICBTZXQgKnNob3dfbWlzc2luZyogdG8gc2hvdyBsaW5lcyB0aGF0IGhhZCBubworICAgICAgIGhpdHMuICBTZXQgKnN1bW1hcnkqIHRvIGluY2x1ZGUgaW4gdGhlIG91dHB1dCB0aGUgY292ZXJhZ2Ugc3VtbWFyeSBwZXIKKyAgICAgICBtb2R1bGUuICAqY292ZXJkaXIqIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGNvdmVyYWdlCisgICAgICAgcmVzdWx0IGZpbGVzIHdpbGwgYmUgb3V0cHV0LiAgSWYgYGBOb25lYGAsIHRoZSByZXN1bHRzIGZvciBlYWNoIHNvdXJjZQorICAgICAgIGZpbGUgYXJlIHBsYWNlZCBpbiBpdHMgZGlyZWN0b3J5LgogCi0uLgotCi1BIHNpbXBsZSBleGFtcGxlIGRlbW9uc3RyYXRpbmcgdGhlIHVzZSBvZiB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlOjoKK0Egc2ltcGxlIGV4YW1wbGUgZGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIHRoZSBwcm9ncmFtbWF0aWMgaW50ZXJmYWNlOjoKIAogICAgaW1wb3J0IHN5cwogICAgaW1wb3J0IHRyYWNlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dGsucnN0IGIvRG9jL2xpYnJhcnkvdHRrLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZkZWRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHRrLnJzdApAQCAtMCwwICsxLDE0MDcgQEAKKzptb2Q6YHR0a2AgLS0tIFRrIHRoZW1lZCB3aWRnZXRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiB0dGsKKyAgIDpzeW5vcHNpczogVGsgdGhlbWVkIHdpZGdldCBzZXQKKy4uIHNlY3Rpb25hdXRob3I6OiBHdWlsaGVybWUgUG9sbyA8Z2dwb2xvQGdtYWlsLmNvbT4KKworCisuLiBpbmRleDo6IHNpbmdsZTogdHRrCisKK1RoZSA6bW9kOmB0dGtgIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFRrIHRoZW1lZCB3aWRnZXQgc2V0LCB3aGljaCBoYXMKK2JlZW4gaW50cm9kdWNlZCBpbiBUayA4LjUuIElmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgYWdhaW5zdCBUayA4LjUgY29kZSBtYXkKK3N0aWxsIHVzZSB0aGlzIG1vZHVsZSBhcyBsb25nIGFzIFRpbGUgaXMgaW5zdGFsbGVkLiBIb3dldmVyLCBzb21lIGZlYXR1cmVzCitwcm92aWRlZCBieSB0aGUgbmV3IFRrLCBsaWtlIGFudGktYWxpYXNlZCBmb250IHJlbmRlcmluZyB1bmRlciBYMTEsIHdpbmRvdwordHJhbnNwYXJlbmN5IChvbiBYMTEgeW91IHdpbGwgbmVlZCBhIGNvbXBvc2l0aW9uIHdpbmRvdyBtYW5hZ2VyKSB3aWxsIGJlCittaXNzaW5nLgorCitUaGUgYmFzaWMgaWRlYSBvZiA6bW9kOmB0dGtgIGlzIHRvIHNlcGFyYXRlLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgY29kZQoraW1wbGVtZW50aW5nIGEgd2lkZ2V0J3MgYmVoYXZpb3IgZnJvbSB0aGUgY29kZSBpbXBsZW1lbnRpbmcgaXRzIGFwcGVhcmFuY2UuCisKKworLi4gc2VlYWxzbzo6CisKKyAgIGBUayBXaWRnZXQgU3R5bGluZyBTdXBwb3J0IDxodHRwOi8vd3d3LnRjbC50ay9jZ2ktYmluL3RjdC90aXAvNDg+YF8KKyAgICAgIFRoZSBkb2N1bWVudCB3aGljaCBicm91Z2h0IHVwIHRoZW1pbmcgc3VwcG9ydCBmb3IgVGsKKworCitVc2luZyBUdGsKKy0tLS0tLS0tLQorCitUbyBzdGFydCB1c2luZyBUdGssIGltcG9ydCBpdHMgbW9kdWxlOjoKKworICAgaW1wb3J0IHR0aworCitCdXQgY29kZSBsaWtlIHRoaXM6OgorCisgICBmcm9tIFRraW50ZXIgaW1wb3J0ICoKKworbWF5IG9wdGlvbmFsbHkgd2FudCB0byB1c2UgdGhpczo6CisKKyAgIGZyb20gVGtpbnRlciBpbXBvcnQgKgorICAgZnJvbSB0dGsgaW1wb3J0ICoKKworQW5kIHRoZW4gc2V2ZXJhbCA6bW9kOmB0dGtgIHdpZGdldHMgKDpjbGFzczpgQnV0dG9uYCwgOmNsYXNzOmBDaGVja2J1dHRvbmAsCis6Y2xhc3M6YEVudHJ5YCwgOmNsYXNzOmBGcmFtZWAsIDpjbGFzczpgTGFiZWxgLCA6Y2xhc3M6YExhYmVsRnJhbWVgLAorOmNsYXNzOmBNZW51YnV0dG9uYCwgOmNsYXNzOmBQYW5lZFdpbmRvd2AsIDpjbGFzczpgUmFkaW9idXR0b25gLCA6Y2xhc3M6YFNjYWxlYAorYW5kIDpjbGFzczpgU2Nyb2xsYmFyYCkgd2lsbCBhdXRvbWF0aWNhbGx5IHN1YnN0aXR1dGUgZm9yIHRoZSBUayB3aWRnZXRzLgorCitUaGlzIGhhcyB0aGUgZGlyZWN0IGJlbmVmaXQgb2YgdXNpbmcgdGhlIG5ldyB3aWRnZXRzLCBnaXZpbmcgYmV0dGVyIGxvb2sgJiBmZWVsCithY3Jvc3MgcGxhdGZvcm1zLCBidXQgYmUgYXdhcmUgdGhhdCB0aGV5IGFyZSBub3QgdG90YWxseSBjb21wYXRpYmxlLiBUaGUgbWFpbgorZGlmZmVyZW5jZSBpcyB0aGF0IHdpZGdldCBvcHRpb25zIHN1Y2ggYXMgImZnIiwgImJnIiBhbmQgb3RoZXJzIHJlbGF0ZWQgdG8KK3dpZGdldCBzdHlsaW5nIGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiBUdGsgd2lkZ2V0cy4gVXNlIDpjbGFzczpgdHRrLlN0eWxlYCB0bworYWNoaWV2ZSB0aGUgc2FtZSAob3IgYmV0dGVyKSBzdHlsaW5nLgorCisuLiBzZWVhbHNvOjoKKworICAgYENvbnZlcnRpbmcgZXhpc3RpbmcgYXBwbGljYXRpb25zIHRvIHVzZSB0aGUgVGlsZSB3aWRnZXRzIDxodHRwOi8vdGt0YWJsZS5zb3VyY2Vmb3JnZS5uZXQvdGlsZS9kb2MvY29udmVydGluZy50eHQ+YF8KKyAgICAgQSB0ZXh0IHdoaWNoIHRhbGtzIGluIFRjbCB0ZXJtcyBhYm91dCBkaWZmZXJlbmNlcyB0eXBpY2FsbHkgZm91bmQgd2hlbgorICAgICBjb252ZXJ0aW5nIGFwcGxpY2F0aW9ucyB0byB1c2UgdGhlIG5ldyB3aWRnZXRzLgorCisKK1R0ayBXaWRnZXRzCistLS0tLS0tLS0tLQorCitUdGsgY29tZXMgd2l0aCAxNyB3aWRnZXRzLCAxMSBvZiB3aGljaCBhbHJlYWR5IGV4aXN0IGluIFRraW50ZXI6Cis6Y2xhc3M6YEJ1dHRvbmAsIDpjbGFzczpgQ2hlY2tidXR0b25gLCA6Y2xhc3M6YEVudHJ5YCwgOmNsYXNzOmBGcmFtZWAsCis6Y2xhc3M6YExhYmVsYCwgOmNsYXNzOmBMYWJlbEZyYW1lYCwgOmNsYXNzOmBNZW51YnV0dG9uYCwKKzpjbGFzczpgUGFuZWRXaW5kb3dgLCA6Y2xhc3M6YFJhZGlvYnV0dG9uYCwgOmNsYXNzOmBTY2FsZWAgYW5kCis6Y2xhc3M6YFNjcm9sbGJhcmAuIFRoZSA2IG5ldyB3aWRnZXQgY2xhc3NlcyBhcmU6IDpjbGFzczpgQ29tYm9ib3hgLAorOmNsYXNzOmBOb3RlYm9va2AsIDpjbGFzczpgUHJvZ3Jlc3NiYXJgLCA6Y2xhc3M6YFNlcGFyYXRvcmAsCis6Y2xhc3M6YFNpemVncmlwYCBhbmQgOmNsYXNzOmBUcmVldmlld2AuICBBbGwgb2YgdGhlc2UgY2xhc3NlcyBhcmUKK3N1YmNsYXNzZXMgb2YgOmNsYXNzOmBXaWRnZXRgLgorCitBcyBzYWlkIHByZXZpb3VzbHksIHlvdSB3aWxsIG5vdGljZSBjaGFuZ2VzIGluIGxvb2stYW5kLWZlZWwgYXMgd2VsbCBpbiB0aGUKK3N0eWxpbmcgY29kZS4gVG8gZGVtb25zdHJhdGUgdGhlIGxhdHRlciwgYSB2ZXJ5IHNpbXBsZSBleGFtcGxlIGlzIHNob3duIGJlbG93LgorCitUayBjb2RlOjoKKworICAgbDEgPSBUa2ludGVyLkxhYmVsKHRleHQ9IlRlc3QiLCBmZz0iYmxhY2siLCBiZz0id2hpdGUiKQorICAgbDIgPSBUa2ludGVyLkxhYmVsKHRleHQ9IlRlc3QiLCBmZz0iYmxhY2siLCBiZz0id2hpdGUiKQorCisKK0NvcnJlc3BvbmRpbmcgVHRrIGNvZGU6OgorCisgICBzdHlsZSA9IHR0ay5TdHlsZSgpCisgICBzdHlsZS5jb25maWd1cmUoIkJXLlRMYWJlbCIsIGZvcmVncm91bmQ9ImJsYWNrIiwgYmFja2dyb3VuZD0id2hpdGUiKQorCisgICBsMSA9IHR0ay5MYWJlbCh0ZXh0PSJUZXN0Iiwgc3R5bGU9IkJXLlRMYWJlbCIpCisgICBsMiA9IHR0ay5MYWJlbCh0ZXh0PSJUZXN0Iiwgc3R5bGU9IkJXLlRMYWJlbCIpCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFR0a1N0eWxpbmdfIHJlYWQgdGhlIDpjbGFzczpgU3R5bGVgIGNsYXNzCitkb2N1bWVudGF0aW9uLgorCitXaWRnZXQKKy0tLS0tLQorCis6Y2xhc3M6YHR0ay5XaWRnZXRgIGRlZmluZXMgc3RhbmRhcmQgb3B0aW9ucyBhbmQgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgVGsKK3RoZW1lZCB3aWRnZXRzIGFuZCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkLgorCisKK1N0YW5kYXJkIE9wdGlvbnMKK15eXl5eXl5eXl5eXl5eXl4KKworQWxsIHRoZSA6bW9kOmB0dGtgIHdpZGdldHMgYWNjZXB0IHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBPcHRpb24gICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBjbGFzcyAgICAgfCBTcGVjaWZpZXMgdGhlIHdpbmRvdyBjbGFzcy4gVGhlIGNsYXNzIGlzIHVzZWQgd2hlbiBxdWVyeWluZyAgfAorICAgfCAgICAgICAgICAgfCB0aGUgb3B0aW9uIGRhdGFiYXNlIGZvciB0aGUgd2luZG93J3Mgb3RoZXIgb3B0aW9ucywgdG8gICAgICAgfAorICAgfCAgICAgICAgICAgfCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYmluZHRhZ3MgZm9yIHRoZSB3aW5kb3csIGFuZCB0byBzZWxlY3QgfAorICAgfCAgICAgICAgICAgfCB0aGUgd2lkZ2V0J3MgZGVmYXVsdCBsYXlvdXQgYW5kIHN0eWxlLiBUaGlzIGlzIGEgcmVhZC1vbmx5ICAgfAorICAgfCAgICAgICAgICAgfCBvcHRpb24gd2hpY2ggbWF5IG9ubHkgYmUgc3BlY2lmaWVkIHdoZW4gdGhlIHdpbmRvdyBpcyAgICAgICAgfAorICAgfCAgICAgICAgICAgfCBjcmVhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBjdXJzb3IgICAgfCBTcGVjaWZpZXMgdGhlIG1vdXNlIGN1cnNvciB0byBiZSB1c2VkIGZvciB0aGUgd2lkZ2V0LiBJZiBzZXQgfAorICAgfCAgICAgICAgICAgfCB0byB0aGUgZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCksIHRoZSBjdXJzb3IgaXMgaW5oZXJpdGVkICAgfAorICAgfCAgICAgICAgICAgfCBmcm9tIHRoZSBwYXJlbnQgd2lkZ2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB0YWtlZm9jdXMgfCBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHdpbmRvdyBhY2NlcHRzIHRoZSBmb2N1cyBkdXJpbmcgICAgICAgfAorICAgfCAgICAgICAgICAgfCBrZXlib2FyZCB0cmF2ZXJzYWwuIDAsIDEgb3IgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLiAgICAgfAorICAgfCAgICAgICAgICAgfCBJZiAwLCB0aGUgd2luZG93IHNob3VsZCBiZSBza2lwcGVkIGVudGlyZWx5ICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgfCBkdXJpbmcga2V5Ym9hcmQgdHJhdmVyc2FsLiBJZiAxLCB0aGUgd2luZG93ICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgfCBzaG91bGQgcmVjZWl2ZSB0aGUgaW5wdXQgZm9jdXMgYXMgbG9uZyBhcyBpdCBpcyB2aWV3YWJsZS4gICAgfAorICAgfCAgICAgICAgICAgfCBBbiBlbXB0eSBzdHJpbmcgbWVhbnMgdGhhdCB0aGUgdHJhdmVyc2FsIHNjcmlwdHMgbWFrZSB0aGUgICAgfAorICAgfCAgICAgICAgICAgfCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0byBmb2N1cyBvbiB0aGUgd2luZG93LiAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBzdHlsZSAgICAgfCBNYXkgYmUgdXNlZCB0byBzcGVjaWZ5IGEgY3VzdG9tIHdpZGdldCBzdHlsZS4gICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1Njcm9sbGFibGUgV2lkZ2V0IE9wdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgd2lkZ2V0cyB0aGF0IGFyZSBjb250cm9sbGVkIGJ5IGEKK3Njcm9sbGJhci4KKworICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICAgICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCB4c2Nyb2xsY29tbWFuZCB8IFVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBob3Jpem9udGFsIHNjcm9sbGJhcnMuICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IFdoZW4gdGhlIHZpZXcgaW4gdGhlIHdpZGdldCdzIHdpbmRvdyBjaGFuZ2VzLCB0aGUgd2lkZ2V0fAorICAgfCAgICAgICAgICAgICAgICB8IHdpbGwgZ2VuZXJhdGUgYSBUY2wgY29tbWFuZCBiYXNlZCBvbiB0aGUgc2Nyb2xsY29tbWFuZC4gfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IFVzdWFsbHkgdGhpcyBvcHRpb24gY29uc2lzdHMgb2YgdGhlICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IDptZXRoOmBTY3JvbGxiYXIuc2V0YCBtZXRob2Qgb2Ygc29tZSBzY3JvbGxiYXIuIFRoaXMgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHdpbGwgY2F1c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHRoZSBzY3JvbGxiYXIgdG8gYmUgdXBkYXRlZCB3aGVuZXZlciB0aGUgdmlldyBpbiB0aGUgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IHdpbmRvdyBjaGFuZ2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB5c2Nyb2xsY29tbWFuZCB8IFVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB2ZXJ0aWNhbCBzY3JvbGxiYXJzLiAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYWJvdmUuICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK0xhYmVsIE9wdGlvbnMKK15eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgbGFiZWxzLCBidXR0b25zIGFuZCBvdGhlciBidXR0b24tbGlrZQord2lkZ2V0cy4KKworLi4gdGFidWxhcmNvbHVtbnM6OiB8cHswLjJcdGV4dHdpZHRofXxwezAuN1x0ZXh0d2lkdGh9fAorLi4KKworICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCB0ZXh0ICAgICAgICAgfCBTcGVjaWZpZXMgYSB0ZXh0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSB3aWRnZXQufAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB0ZXh0dmFyaWFibGUgfCBTcGVjaWZpZXMgYSBuYW1lIHdob3NlIHZhbHVlIHdpbGwgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgfAorICAgfCAgICAgICAgICAgICAgfCB0ZXh0IG9wdGlvbiByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB1bmRlcmxpbmUgICAgfCBJZiBzZXQsIHNwZWNpZmllcyB0aGUgaW5kZXggKDAtYmFzZWQpIG9mIGEgY2hhcmFjdGVyIHRvICAgfAorICAgfCAgICAgICAgICAgICAgfCB1bmRlcmxpbmUgaW4gdGhlIHRleHQgc3RyaW5nLiBUaGUgdW5kZXJsaW5lIGNoYXJhY3RlciBpcyAgfAorICAgfCAgICAgICAgICAgICAgfCB1c2VkIGZvciBtbmVtb25pYyBhY3RpdmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBpbWFnZSAgICAgICAgfCBTcGVjaWZpZXMgYW4gaW1hZ2UgdG8gZGlzcGxheS4gVGhpcyBpcyBhIGxpc3Qgb2YgMSBvciBtb3JlfAorICAgfCAgICAgICAgICAgICAgfCBlbGVtZW50cy4gVGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIGRlZmF1bHQgaW1hZ2UgbmFtZS4gVGhlfAorICAgfCAgICAgICAgICAgICAgfCByZXN0IG9mIHRoZSBsaXN0IGlzIGEgc2VxdWVuY2Ugb2Ygc3RhdGVzcGVjL3ZhbHVlIHBhaXJzIGFzfAorICAgfCAgICAgICAgICAgICAgfCBkZWZpbmVkIGJ5IDptZXRoOmBTdHlsZS5tYXBgLCBzcGVjaWZ5aW5nIGRpZmZlcmVudCBpbWFnZXMgfAorICAgfCAgICAgICAgICAgICAgfCB0byB1c2Ugd2hlbiB0aGUgd2lkZ2V0IGlzIGluIGEgcGFydGljdWxhciBzdGF0ZSBvciBhICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCBjb21iaW5hdGlvbiBvZiBzdGF0ZXMuIEFsbCBpbWFnZXMgaW4gdGhlIGxpc3Qgc2hvdWxkIGhhdmUgfAorICAgfCAgICAgICAgICAgICAgfCB0aGUgc2FtZSBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBjb21wb3VuZCAgICAgfCBTcGVjaWZpZXMgaG93IHRvIGRpc3BsYXkgdGhlIGltYWdlIHJlbGF0aXZlIHRvIHRoZSB0ZXh0LCAgfAorICAgfCAgICAgICAgICAgICAgfCBpbiB0aGUgY2FzZSBib3RoIHRleHQgYW5kIGltYWdlIG9wdGlvbnMgYXJlIHByZXNlbnQuICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCBWYWxpZCB2YWx1ZXMgYXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAqIHRleHQ6IGRpc3BsYXkgdGV4dCBvbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAqIGltYWdlOiBkaXNwbGF5IGltYWdlIG9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAqIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodDogZGlzcGxheSBpbWFnZSBhYm92ZSwgYmVsb3csICAgfAorICAgfCAgICAgICAgICAgICAgfCAgIGxlZnQgb2YsIG9yIHJpZ2h0IG9mIHRoZSB0ZXh0LCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAqIG5vbmU6IHRoZSBkZWZhdWx0LiBkaXNwbGF5IHRoZSBpbWFnZSBpZiBwcmVzZW50LCAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCAgIG90aGVyd2lzZSB0aGUgdGV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB3aWR0aCAgICAgICAgfCBJZiBncmVhdGVyIHRoYW4gemVybywgc3BlY2lmaWVzIGhvdyBtdWNoIHNwYWNlLCBpbiAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCBjaGFyYWN0ZXIgd2lkdGhzLCB0byBhbGxvY2F0ZSBmb3IgdGhlIHRleHQgbGFiZWw7IGlmIGxlc3MgfAorICAgfCAgICAgICAgICAgICAgfCB0aGFuIHplcm8sIHNwZWNpZmllcyBhIG1pbmltdW0gd2lkdGguIElmIHplcm8gb3IgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgfCB1bnNwZWNpZmllZCwgdGhlIG5hdHVyYWwgd2lkdGggb2YgdGhlIHRleHQgbGFiZWwgaXMgdXNlZC4gfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK0NvbXBhdGliaWxpdHkgT3B0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKyAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgc3RhdGUgIHwgTWF5IGJlIHNldCB0byAibm9ybWFsIiBvciAiZGlzYWJsZWQiIHRvIGNvbnRyb2wgdGhlICJkaXNhYmxlZCIgfAorICAgfCAgICAgICAgfCBzdGF0ZSBiaXQuIFRoaXMgaXMgYSB3cml0ZS1vbmx5IG9wdGlvbjogc2V0dGluZyBpdCBjaGFuZ2VzIHRoZSB8CisgICB8ICAgICAgICB8IHdpZGdldCBzdGF0ZSwgYnV0IHRoZSA6bWV0aDpgV2lkZ2V0LnN0YXRlYCBtZXRob2QgZG9lcyBub3QgICAgIHwKKyAgIHwgICAgICAgIHwgYWZmZWN0IHRoaXMgb3B0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1dpZGdldCBTdGF0ZXMKK15eXl5eXl5eXl5eXl4KKworVGhlIHdpZGdldCBzdGF0ZSBpcyBhIGJpdG1hcCBvZiBpbmRlcGVuZGVudCBzdGF0ZSBmbGFncy4KKworICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBmbGFnICAgICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBhY3RpdmUgICAgIHwgVGhlIG1vdXNlIGN1cnNvciBpcyBvdmVyIHRoZSB3aWRnZXQgYW5kIHByZXNzaW5nIGEgbW91c2UgICAgfAorICAgfCAgICAgICAgICAgIHwgYnV0dG9uIHdpbGwgY2F1c2Ugc29tZSBhY3Rpb24gdG8gb2NjdXIuICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBkaXNhYmxlZCAgIHwgV2lkZ2V0IGlzIGRpc2FibGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC4gICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBmb2N1cyAgICAgIHwgV2lkZ2V0IGhhcyBrZXlib2FyZCBmb2N1cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBwcmVzc2VkICAgIHwgV2lkZ2V0IGlzIGJlaW5nIHByZXNzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBzZWxlY3RlZCAgIHwgIk9uIiwgInRydWUiLCBvciAiY3VycmVudCIgZm9yIHRoaW5ncyBsaWtlIENoZWNrYnV0dG9ucyBhbmQgfAorICAgfCAgICAgICAgICAgIHwgcmFkaW9idXR0b25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBiYWNrZ3JvdW5kIHwgV2luZG93cyBhbmQgTWFjIGhhdmUgYSBub3Rpb24gb2YgYW4gImFjdGl2ZSIgb3IgZm9yZWdyb3VuZCAgfAorICAgfCAgICAgICAgICAgIHwgd2luZG93LiBUaGUgKmJhY2tncm91bmQqIHN0YXRlIGlzIHNldCBmb3Igd2lkZ2V0cyBpbiBhICAgICAgfAorICAgfCAgICAgICAgICAgIHwgYmFja2dyb3VuZCB3aW5kb3csIGFuZCBjbGVhcmVkIGZvciB0aG9zZSBpbiB0aGUgZm9yZWdyb3VuZCAgfAorICAgfCAgICAgICAgICAgIHwgd2luZG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCByZWFkb25seSAgIHwgV2lkZ2V0IHNob3VsZCBub3QgYWxsb3cgdXNlciBtb2RpZmljYXRpb24uICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBhbHRlcm5hdGUgIHwgQSB3aWRnZXQtc3BlY2lmaWMgYWx0ZXJuYXRlIGRpc3BsYXkgZm9ybWF0LiAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBpbnZhbGlkICAgIHwgVGhlIHdpZGdldCdzIHZhbHVlIGlzIGludmFsaWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitBIHN0YXRlIHNwZWNpZmljYXRpb24gaXMgYSBzZXF1ZW5jZSBvZiBzdGF0ZSBuYW1lcywgb3B0aW9uYWxseSBwcmVmaXhlZCB3aXRoCithbiBleGNsYW1hdGlvbiBwb2ludCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJpdCBpcyBvZmYuCisKKwordHRrLldpZGdldAorXl5eXl5eXl5eXgorCitCZXNpZGVzIHRoZSBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdywgdGhlIDpjbGFzczpgdHRrLldpZGdldGAgY2xhc3Mgc3VwcG9ydHMgdGhlCis6bWV0aDpgVGtpbnRlci5XaWRnZXQuY2dldGAgYW5kIDptZXRoOmBUa2ludGVyLldpZGdldC5jb25maWd1cmVgIG1ldGhvZHMuCisKKy4uIGNsYXNzOjogV2lkZ2V0CisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5KHgsIHkpCisKKyAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgYXQgcG9zaXRpb24gKngqICp5Kiwgb3IgdGhlIGVtcHR5IHN0cmluZworICAgICAgaWYgdGhlIHBvaW50IGRvZXMgbm90IGxpZSB3aXRoaW4gYW55IGVsZW1lbnQuCisKKyAgICAgICp4KiBhbmQgKnkqIGFyZSBwaXhlbCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgd2lkZ2V0LgorCisKKyAgIC4uIG1ldGhvZDo6IGluc3RhdGUoc3RhdGVzcGVjWywgY2FsbGJhY2s9Tm9uZVssICphcmdzWywgKiprd11dXSkKKworICAgICAgVGVzdCB0aGUgd2lkZ2V0J3Mgc3RhdGUuIElmIGEgY2FsbGJhY2sgaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBUcnVlCisgICAgICBpZiB0aGUgd2lkZ2V0IHN0YXRlIG1hdGNoZXMgKnN0YXRlc3BlYyogYW5kIEZhbHNlIG90aGVyd2lzZS4gSWYgY2FsbGJhY2sKKyAgICAgIGlzIHNwZWNpZmllZCB0aGVuIGl0IGlzIGNhbGxlZCB3aXRoICphcmdzKiBpZiB3aWRnZXQgc3RhdGUgbWF0Y2hlcworICAgICAgKnN0YXRlc3BlYyouCisKKworICAgLi4gbWV0aG9kOjogc3RhdGUoW3N0YXRlc3BlYz1Ob25lXSkKKworICAgICAgTW9kaWZ5IG9yIHJlYWQgd2lkZ2V0IHN0YXRlLiBJZiAqc3RhdGVzcGVjKiBpcyBzcGVjaWZpZWQsIHNldHMgdGhlCisgICAgICB3aWRnZXQgc3RhdGUgYWNjb3JkaW5nbHkgYW5kIHJldHVybnMgYSBuZXcgKnN0YXRlc3BlYyogaW5kaWNhdGluZworICAgICAgd2hpY2ggZmxhZ3Mgd2VyZSBjaGFuZ2VkLiBJZiAqc3RhdGVzcGVjKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zCisgICAgICB0aGUgY3VycmVudGx5LWVuYWJsZWQgc3RhdGUgZmxhZ3MuCisKKyAgICpzdGF0ZXNwZWMqIHdpbGwgdXN1YWxseSBiZSBhIGxpc3Qgb3IgYSB0dXBsZS4KKworCitDb21ib2JveAorLS0tLS0tLS0KKworVGhlIDpjbGFzczpgdHRrLkNvbWJvYm94YCB3aWRnZXQgY29tYmluZXMgYSB0ZXh0IGZpZWxkIHdpdGggYSBwb3AtZG93biBsaXN0IG9mCit2YWx1ZXMuIFRoaXMgd2lkZ2V0IGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBFbnRyeWAuCisKK0Jlc2lkZXMgdGhlIG1ldGhvZHMgaW5oZXJpdGVkIGZyb20gOmNsYXNzOmBXaWRnZXRgICg6bWV0aDpgV2lkZ2V0LmNnZXRgLAorOm1ldGg6YFdpZGdldC5jb25maWd1cmVgLCA6bWV0aDpgV2lkZ2V0LmlkZW50aWZ5YCwgOm1ldGg6YFdpZGdldC5pbnN0YXRlYAorYW5kIDptZXRoOmBXaWRnZXQuc3RhdGVgKSBhbmQgdGhvc2UgaW5oZXJpdGVkIGZyb20gOmNsYXNzOmBFbnRyeWAKKyg6bWV0aDpgRW50cnkuYmJveGAsIDptZXRoOmBFbnRyeS5kZWxldGVgLCA6bWV0aDpgRW50cnkuaWN1cnNvcmAsCis6bWV0aDpgRW50cnkuaW5kZXhgLCA6bWV0aDpgRW50cnkuaW5zZXRgLCA6bWV0aDpgRW50cnkuc2VsZWN0aW9uYCwKKzptZXRoOmBFbnRyeS54dmlld2ApLCB0aGlzIGNsYXNzIGhhcyBzb21lIG90aGVyIG1ldGhvZHMsIGRlc2NyaWJlZCBhdAorOmNsYXNzOmB0dGsuQ29tYm9ib3hgLgorCisKK09wdGlvbnMKK15eXl5eXl4KKworVGhpcyB3aWRnZXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uICAgICAgICAgIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgZXhwb3J0c2VsZWN0aW9uIHwgQm9vbGVhbiB2YWx1ZS4gSWYgc2V0LCB0aGUgd2lkZ2V0IHNlbGVjdGlvbiBpcyBsaW5rZWQgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgdG8gdGhlIFdpbmRvdyBNYW5hZ2VyIHNlbGVjdGlvbiAod2hpY2ggY2FuIGJlIHJldHVybmVkIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgYnkgaW52b2tpbmcgOm1ldGg6YE1pc2Muc2VsZWN0aW9uX2dldGAsIGZvciBleGFtcGxlKS4gIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwganVzdGlmeSAgICAgICAgIHwgU3BlY2lmaWVzIGhvdyB0aGUgdGV4dCBpcyBhbGlnbmVkIHdpdGhpbiB0aGUgd2lkZ2V0LiAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgT25lIG9mICJsZWZ0IiwgImNlbnRlciIsIG9yICJyaWdodCIuICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaGVpZ2h0ICAgICAgICAgIHwgU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgdGhlIHBvcC1kb3duIGxpc3Rib3gsIGluIHJvd3MuIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgcG9zdGNvbW1hbmQgICAgIHwgQSBzY3JpcHQgKHBvc3NpYmx5IHJlZ2lzdGVyZWQgd2l0aCAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgOm1ldGg6YE1pc2MucmVnaXN0ZXJgKSB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBkaXNwbGF5aW5nIHRoZSB2YWx1ZXMuIEl0IHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgbWF5IHNwZWNpZnkgd2hpY2ggdmFsdWVzIHRvIGRpc3BsYXkuICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RhdGUgICAgICAgICAgIHwgT25lIG9mICJub3JtYWwiLCAicmVhZG9ubHkiLCBvciAiZGlzYWJsZWQiLiBJbiB0aGUgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgInJlYWRvbmx5IiBzdGF0ZSwgdGhlIHZhbHVlIG1heSBub3QgYmUgZWRpdGVkIGRpcmVjdGx5LHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSB1c2VyIGNhbiBvbmx5IHNlbGVjdCBvbmUgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZXwKKyAgIHwgICAgICAgICAgICAgICAgIHwgZHJvcGRvd24gbGlzdC4gSW4gdGhlICJub3JtYWwiIHN0YXRlLCB0aGUgdGV4dCBmaWVsZCBpc3wKKyAgIHwgICAgICAgICAgICAgICAgIHwgZGlyZWN0bHkgZWRpdGFibGUuIEluIHRoZSAiZGlzYWJsZWQiIHN0YXRlLCBubyAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgaW50ZXJhY3Rpb24gaXMgcG9zc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdGV4dHZhcmlhYmxlICAgIHwgU3BlY2lmaWVzIGEgbmFtZSB3aG9zZSB2YWx1ZSBpcyBsaW5rZWQgdG8gdGhlIHdpZGdldCAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgdmFsdWUuIFdoZW5ldmVyIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBuYW1lICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgY2hhbmdlcywgdGhlIHdpZGdldCB2YWx1ZSBpcyB1cGRhdGVkLCBhbmQgdmljZSB2ZXJzYS4gIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgU2VlIDpjbGFzczpgVGtpbnRlci5TdHJpbmdWYXJgLiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdmFsdWVzICAgICAgICAgIHwgU3BlY2lmaWVzIHRoZSBsaXN0IG9mIHZhbHVlcyB0byBkaXNwbGF5IGluIHRoZSAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgZHJvcC1kb3duIGxpc3Rib3guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgd2lkdGggICAgICAgICAgIHwgU3BlY2lmaWVzIGFuIGludGVnZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgZGVzaXJlZCB3aWR0aHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgb2YgdGhlIGVudHJ5IHdpbmRvdywgaW4gYXZlcmFnZS1zaXplIGNoYXJhY3RlcnMgb2YgdGhlIHwKKyAgIHwgICAgICAgICAgICAgICAgIHwgd2lkZ2V0J3MgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitWaXJ0dWFsIGV2ZW50cworXl5eXl5eXl5eXl5eXl4KKworVGhlIGNvbWJvYm94IHdpZGdldCBnZW5lcmF0ZXMgYSAqKjw8Q29tYm9ib3hTZWxlY3RlZD4+KiogdmlydHVhbCBldmVudAord2hlbiB0aGUgdXNlciBzZWxlY3RzIGFuIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBvZiB2YWx1ZXMuCisKKwordHRrLkNvbWJvYm94CiteXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBDb21ib2JveAorCisgICAuLiBtZXRob2Q6OiBjdXJyZW50KFtuZXdpbmRleD1Ob25lXSkKKworICAgICAgSWYgKm5ld2luZGV4KiBpcyBzcGVjaWZpZWQsIHNldHMgdGhlIGNvbWJvYm94IHZhbHVlIHRvIHRoZSBlbGVtZW50CisgICAgICBwb3NpdGlvbiAqbmV3aW5kZXgqLiBPdGhlcndpc2UsIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIG9yCisgICAgICAtMSBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBub3QgaW4gdGhlIHZhbHVlcyBsaXN0LgorCisKKyAgIC4uIG1ldGhvZDo6IGdldCgpCisKKyAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNvbWJvYm94LgorCisKKyAgIC4uIG1ldGhvZDo6IHNldCh2YWx1ZSkKKworICAgICAgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNvbWJvYm94IHRvICp2YWx1ZSouCisKKworTm90ZWJvb2sKKy0tLS0tLS0tCisKK1RoZSBUdGsgTm90ZWJvb2sgd2lkZ2V0IG1hbmFnZXMgYSBjb2xsZWN0aW9uIG9mIHdpbmRvd3MgYW5kIGRpc3BsYXlzIGEgc2luZ2xlCitvbmUgYXQgYSB0aW1lLiBFYWNoIGNoaWxkIHdpbmRvdyBpcyBhc3NvY2lhdGVkIHdpdGggYSB0YWIsIHdoaWNoIHRoZSB1c2VyCittYXkgc2VsZWN0IHRvIGNoYW5nZSB0aGUgY3VycmVudGx5LWRpc3BsYXllZCB3aW5kb3cuCisKKworT3B0aW9ucworXl5eXl5eXgorCitUaGlzIHdpZGdldCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgb3B0aW9uczoKKworICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBoZWlnaHQgIHwgSWYgcHJlc2VudCBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHNwZWNpZmllcyB0aGUgZGVzaXJlZCBoZWlnaHQgfAorICAgfCAgICAgICAgIHwgb2YgdGhlIHBhbmUgYXJlYSAobm90IGluY2x1ZGluZyBpbnRlcm5hbCBwYWRkaW5nIG9yIHRhYnMpLiAgICAgfAorICAgfCAgICAgICAgIHwgT3RoZXJ3aXNlLCB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYWxsIHBhbmVzIGlzIHVzZWQuICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBwYWRkaW5nIHwgU3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZXh0cmEgc3BhY2UgdG8gYWRkIGFyb3VuZCB0aGUgb3V0c2lkZSAgfAorICAgfCAgICAgICAgIHwgb2YgdGhlIG5vdGVib29rLiBUaGUgcGFkZGluZyBpcyBhIGxpc3Qgb2YgdXAgdG8gZm91ciBsZW5ndGggICAgfAorICAgfCAgICAgICAgIHwgc3BlY2lmaWNhdGlvbnM6IGxlZnQgdG9wIHJpZ2h0IGJvdHRvbS4gSWYgZmV3ZXIgdGhhbiBmb3VyICAgICAgfAorICAgfCAgICAgICAgIHwgZWxlbWVudHMgYXJlIHNwZWNpZmllZCwgYm90dG9tIGRlZmF1bHRzIHRvIHRvcCwgcmlnaHQgZGVmYXVsdHMgfAorICAgfCAgICAgICAgIHwgdG8gbGVmdCwgYW5kIHRvcCBkZWZhdWx0cyB0byBsZWZ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB3aWR0aCAgIHwgSWYgcHJlc2VudCBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHNwZWNpZmllcyB0aGUgZGVzaXJlZCB3aWR0aCAgfAorICAgfCAgICAgICAgIHwgb2YgdGhlIHBhbmUgYXJlYSAobm90IGluY2x1ZGluZyBpbnRlcm5hbCBwYWRkaW5nKS4gT3RoZXJ3aXNlLCAgfAorICAgfCAgICAgICAgIHwgdGhlIG1heGltdW0gd2lkdGggb2YgYWxsIHBhbmVzIGlzIHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1RhYiBPcHRpb25zCiteXl5eXl5eXl5eXgorCitUaGVyZSBhcmUgYWxzbyBzcGVjaWZpYyBvcHRpb25zIGZvciB0YWJzOgorCisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IHN0YXRlICAgICB8IEVpdGhlciAibm9ybWFsIiwgImRpc2FibGVkIiBvciAiaGlkZGVuIi4gSWYgImRpc2FibGVkIiwgdGhlbiB8CisgICB8ICAgICAgICAgICB8IHRoZSB0YWIgaXMgbm90IHNlbGVjdGFibGUuIElmICJoaWRkZW4iLCB0aGVuIHRoZSB0YWIgaXMgbm90ICB8CisgICB8ICAgICAgICAgICB8IHNob3duLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHN0aWNreSAgICB8IFNwZWNpZmllcyBob3cgdGhlIGNoaWxkIHdpbmRvdyBpcyBwb3NpdGlvbmVkIHdpdGhpbiB0aGUgcGFuZSB8CisgICB8ICAgICAgICAgICB8IGFyZWEuIFZhbHVlIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIG9mIHRoZSAgICAgICB8CisgICB8ICAgICAgICAgICB8IGNoYXJhY3RlcnMgIm4iLCAicyIsICJlIiBvciAidyIuIEVhY2ggbGV0dGVyIHJlZmVycyB0byBhICAgICB8CisgICB8ICAgICAgICAgICB8IHNpZGUgKG5vcnRoLCBzb3V0aCwgZWFzdCBvciB3ZXN0KSB0aGF0IHRoZSBjaGlsZCB3aW5kb3cgd2lsbCB8CisgICB8ICAgICAgICAgICB8IHN0aWNrIHRvLCBhcyBwZXIgdGhlIDptZXRoOmBncmlkYCBnZW9tZXRyeSBtYW5hZ2VyLiAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHBhZGRpbmcgICB8IFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGV4dHJhIHNwYWNlIHRvIGFkZCBiZXR3ZWVuIHRoZSAgICAgICB8CisgICB8ICAgICAgICAgICB8IG5vdGVib29rIGFuZCB0aGlzIHBhbmUuIFN5bnRheCBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG9wdGlvbiB8CisgICB8ICAgICAgICAgICB8IHBhZGRpbmcgdXNlZCBieSB0aGlzIHdpZGdldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHRleHQgICAgICB8IFNwZWNpZmllcyBhIHRleHQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWIuICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGltYWdlICAgICB8IFNwZWNpZmllcyBhbiBpbWFnZSB0byBkaXNwbGF5IGluIHRoZSB0YWIuIFNlZSB0aGUgb3B0aW9uICAgICB8CisgICB8ICAgICAgICAgICB8IGltYWdlIGRlc2NyaWJlZCBpbiA6Y2xhc3M6YFdpZGdldGAuICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGNvbXBvdW5kICB8IFNwZWNpZmllcyBob3cgdG8gZGlzcGxheSB0aGUgaW1hZ2UgcmVsYXRpdmUgdG8gdGhlIHRleHQsIGluICB8CisgICB8ICAgICAgICAgICB8IHRoZSBjYXNlIGJvdGggdGV4dCBhbmQgaW1hZ2Ugb3B0aW9ucyBhcmUgcHJlc2VudC4gU2VlICAgICAgICB8CisgICB8ICAgICAgICAgICB8IGBMYWJlbCBPcHRpb25zYF8gZm9yIGxlZ2FsIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHVuZGVybGluZSB8IFNwZWNpZmllcyB0aGUgaW5kZXggKDAtYmFzZWQpIG9mIGEgY2hhcmFjdGVyIHRvIHVuZGVybGluZSBpbiB8CisgICB8ICAgICAgICAgICB8IHRoZSB0ZXh0IHN0cmluZy4gVGhlIHVuZGVybGluZWQgY2hhcmFjdGVyIGlzIHVzZWQgZm9yICAgICAgICB8CisgICB8ICAgICAgICAgICB8IG1uZW1vbmljIGFjdGl2YXRpb24gaWYgOm1ldGg6YE5vdGVib29rLmVuYWJsZV90cmF2ZXJzYWxgIGlzICB8CisgICB8ICAgICAgICAgICB8IGNhbGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworVGFiIElkZW50aWZpZXJzCiteXl5eXl5eXl5eXl5eXl4KKworVGhlICp0YWJfaWQqIHByZXNlbnQgaW4gc2V2ZXJhbCBtZXRob2RzIG9mIDpjbGFzczpgdHRrLk5vdGVib29rYCBtYXkgdGFrZSBhbnkKK29mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisKKyogQW4gaW50ZWdlciBiZXR3ZWVuIHplcm8gYW5kIHRoZSBudW1iZXIgb2YgdGFicy4KKyogVGhlIG5hbWUgb2YgYSBjaGlsZCB3aW5kb3cuCisqIEEgcG9zaXRpb25hbCBzcGVjaWZpY2F0aW9uIG9mIHRoZSBmb3JtICJAeCx5Iiwgd2hpY2ggaWRlbnRpZmllcyB0aGUgdGFiLgorKiBUaGUgbGl0ZXJhbCBzdHJpbmcgImN1cnJlbnQiLCB3aGljaCBpZGVudGlmaWVzIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgdGFiLgorKiBUaGUgbGl0ZXJhbCBzdHJpbmcgImVuZCIsIHdoaWNoIHJldHVybnMgdGhlIG51bWJlciBvZiB0YWJzIChvbmx5IHZhbGlkIGZvcgorICA6bWV0aDpgTm90ZWJvb2suaW5kZXhgKS4KKworCitWaXJ0dWFsIEV2ZW50cworXl5eXl5eXl5eXl5eXl4KKworVGhpcyB3aWRnZXQgZ2VuZXJhdGVzIGEgKio8PE5vdGVib29rVGFiQ2hhbmdlZD4+KiogdmlydHVhbCBldmVudCBhZnRlciBhIG5ldwordGFiIGlzIHNlbGVjdGVkLgorCisKK3R0ay5Ob3RlYm9vaworXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogTm90ZWJvb2sKKworICAgLi4gbWV0aG9kOjogYWRkKGNoaWxkLCAqKmt3KQorCisgICAgICBBZGRzIGEgbmV3IHRhYiB0byB0aGUgbm90ZWJvb2suCisKKyAgICAgIElmIHdpbmRvdyBpcyBjdXJyZW50bHkgbWFuYWdlZCBieSB0aGUgbm90ZWJvb2sgYnV0IGhpZGRlbiwgaXQgaXMKKyAgICAgIHJlc3RvcmVkIHRvIGl0cyBwcmV2aW91cyBwb3NpdGlvbi4KKworICAgICAgU2VlIGBUYWIgT3B0aW9uc2BfIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucy4KKworCisgICAuLiBtZXRob2Q6OiBmb3JnZXQodGFiX2lkKQorCisgICAgICBSZW1vdmVzIHRoZSB0YWIgc3BlY2lmaWVkIGJ5ICp0YWJfaWQqLCB1bm1hcHMgYW5kIHVubWFuYWdlcyB0aGUKKyAgICAgIGFzc29jaWF0ZWQgd2luZG93LgorCisKKyAgIC4uIG1ldGhvZDo6IGhpZGUodGFiX2lkKQorCisgICAgICBIaWRlcyB0aGUgdGFiIHNwZWNpZmllZCBieSAqdGFiX2lkKi4KKworICAgICAgVGhlIHRhYiB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQsIGJ1dCB0aGUgYXNzb2NpYXRlZCB3aW5kb3cgcmVtYWlucworICAgICAgbWFuYWdlZCBieSB0aGUgbm90ZWJvb2sgYW5kIGl0cyBjb25maWd1cmF0aW9uIHJlbWVtYmVyZWQuIEhpZGRlbiB0YWJzCisgICAgICBtYXkgYmUgcmVzdG9yZWQgd2l0aCB0aGUgOm1ldGg6YGFkZGAgY29tbWFuZC4KKworCisgICAuLiBtZXRob2Q6OiBpZGVudGlmeSh4LCB5KQorCisgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0YWIgZWxlbWVudCBhdCBwb3NpdGlvbiAqeCosICp5Kiwgb3IgdGhlIGVtcHR5CisgICAgICBzdHJpbmcgaWYgbm9uZS4KKworCisgICAuLiBtZXRob2Q6OiBpbmRleCh0YWJfaWQpCisKKyAgICAgIFJldHVybnMgdGhlIG51bWVyaWMgaW5kZXggb2YgdGhlIHRhYiBzcGVjaWZpZWQgYnkgKnRhYl9pZCosIG9yIHRoZSB0b3RhbAorICAgICAgbnVtYmVyIG9mIHRhYnMgaWYgKnRhYl9pZCogaXMgdGhlIHN0cmluZyAiZW5kIi4KKworCisgICAuLiBtZXRob2Q6OiBpbnNlcnQocG9zLCBjaGlsZCwgKiprdykKKworICAgICAgSW5zZXJ0cyBhIHBhbmUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKworICAgICAgKnBvcyogaXMgZWl0aGVyIHRoZSBzdHJpbmcgImVuZCIsIGFuIGludGVnZXIgaW5kZXgsIG9yIHRoZSBuYW1lIG9mIGEKKyAgICAgIG1hbmFnZWQgY2hpbGQuIElmICpjaGlsZCogaXMgYWxyZWFkeSBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vaywgbW92ZXMgaXQgdG8KKyAgICAgIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCisKKyAgICAgIFNlZSBgVGFiIE9wdGlvbnNgXyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCisKKworICAgLi4gbWV0aG9kOjogc2VsZWN0KFt0YWJfaWRdKQorCisgICAgICBTZWxlY3RzIHRoZSBzcGVjaWZpZWQgKnRhYl9pZCouCisKKyAgICAgIFRoZSBhc3NvY2lhdGVkIGNoaWxkIHdpbmRvdyB3aWxsIGJlIGRpc3BsYXllZCwgYW5kIHRoZQorICAgICAgcHJldmlvdXNseS1zZWxlY3RlZCB3aW5kb3cgKGlmIGRpZmZlcmVudCkgaXMgdW5tYXBwZWQuIElmICp0YWJfaWQqIGlzCisgICAgICBvbWl0dGVkLCByZXR1cm5zIHRoZSB3aWRnZXQgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhbmUuCisKKworICAgLi4gbWV0aG9kOjogdGFiKHRhYl9pZFssIG9wdGlvbj1Ob25lWywgKiprd11dKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgb2YgdGhlIHNwZWNpZmljICp0YWJfaWQqLgorCisgICAgICBJZiAqa3cqIGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgdGhlIHRhYiBvcHRpb24gdmFsdWVzLiBJZgorICAgICAgKm9wdGlvbiogaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGF0ICpvcHRpb24qLiBPdGhlcndpc2UsCisgICAgICBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKworCisgICAuLiBtZXRob2Q6OiB0YWJzKCkKKworICAgICAgUmV0dXJucyBhIGxpc3Qgb2Ygd2luZG93cyBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vay4KKworCisgICAuLiBtZXRob2Q6OiBlbmFibGVfdHJhdmVyc2FsKCkKKworICAgICAgRW5hYmxlIGtleWJvYXJkIHRyYXZlcnNhbCBmb3IgYSB0b3BsZXZlbCB3aW5kb3cgY29udGFpbmluZyB0aGlzIG5vdGVib29rLgorCisgICAgICBUaGlzIHdpbGwgZXh0ZW5kIHRoZSBiaW5kaW5ncyBmb3IgdGhlIHRvcGxldmVsIHdpbmRvdyBjb250YWluaW5nIHRoZQorICAgICAgbm90ZWJvb2sgYXMgZm9sbG93czoKKworICAgICAgKiBDb250cm9sLVRhYjogc2VsZWN0cyB0aGUgdGFiIGZvbGxvd2luZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS4KKyAgICAgICogU2hpZnQtQ29udHJvbC1UYWI6IHNlbGVjdHMgdGhlIHRhYiBwcmVjZWRpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCisgICAgICAqIEFsdC1LOiB3aGVyZSBLIGlzIHRoZSBtbmVtb25pYyAodW5kZXJsaW5lZCkgY2hhcmFjdGVyIG9mIGFueSB0YWIsIHdpbGwKKyAgICAgICAgc2VsZWN0IHRoYXQgdGFiLgorCisgICAgICBNdWx0aXBsZSBub3RlYm9va3MgaW4gYSBzaW5nbGUgdG9wbGV2ZWwgbWF5IGJlIGVuYWJsZWQgZm9yIHRyYXZlcnNhbCwKKyAgICAgIGluY2x1ZGluZyBuZXN0ZWQgbm90ZWJvb2tzLiBIb3dldmVyLCBub3RlYm9vayB0cmF2ZXJzYWwgb25seSB3b3JrcworICAgICAgcHJvcGVybHkgaWYgYWxsIHBhbmVzIGhhdmUgdGhlIG5vdGVib29rIHRoZXkgYXJlIGluIGFzIG1hc3Rlci4KKworCitQcm9ncmVzc2JhcgorLS0tLS0tLS0tLS0KKworVGhlIDpjbGFzczpgdHRrLlByb2dyZXNzYmFyYCB3aWRnZXQgc2hvd3MgdGhlIHN0YXR1cyBvZiBhIGxvbmctcnVubmluZworb3BlcmF0aW9uLiBJdCBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXM6IGRldGVybWluYXRlIG1vZGUgc2hvd3MgdGhlIGFtb3VudAorY29tcGxldGVkIHJlbGF0aXZlIHRvIHRoZSB0b3RhbCBhbW91bnQgb2Ygd29yayB0byBiZSBkb25lLCBhbmQgaW5kZXRlcm1pbmF0ZQorbW9kZSBwcm92aWRlcyBhbiBhbmltYXRlZCBkaXNwbGF5IHRvIGxldCB0aGUgdXNlciBrbm93IHRoYXQgc29tZXRoaW5nIGlzCitoYXBwZW5pbmcuCisKKworT3B0aW9ucworXl5eXl5eXgorCitUaGlzIHdpZGdldCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgb3B0aW9uczoKKworICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBvcHRpb24gICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBvcmllbnQgICB8IE9uZSBvZiAiaG9yaXpvbnRhbCIgb3IgInZlcnRpY2FsIi4gU3BlY2lmaWVzIHRoZSBvcmllbnRhdGlvbiAgfAorICAgfCAgICAgICAgICB8IG9mIHRoZSBwcm9ncmVzcyBiYXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBsZW5ndGggICB8IFNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nIGF4aXMgb2YgdGhlIHByb2dyZXNzIGJhciAgICAgfAorICAgfCAgICAgICAgICB8ICh3aWR0aCBpZiBob3Jpem9udGFsLCBoZWlnaHQgaWYgdmVydGljYWwpLiAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBtb2RlICAgICB8IE9uZSBvZiAiZGV0ZXJtaW5hdGUiIG9yICJpbmRldGVybWluYXRlIi4gICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBtYXhpbXVtICB8IEEgbnVtYmVyIHNwZWNpZnlpbmcgdGhlIG1heGltdW0gdmFsdWUuIERlZmF1bHRzIHRvIDEwMC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB2YWx1ZSAgICB8IFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBiYXIuIEluICJkZXRlcm1pbmF0ZSIgbW9kZSwgfAorICAgfCAgICAgICAgICB8IHRoaXMgcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIHdvcmsgY29tcGxldGVkLiBJbiAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICB8ICJpbmRldGVybWluYXRlIiBtb2RlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBtb2R1bG8gKm1heGltdW0qOyAgfAorICAgfCAgICAgICAgICB8IHRoYXQgaXMsIHRoZSBwcm9ncmVzcyBiYXIgY29tcGxldGVzIG9uZSAiY3ljbGUiIHdoZW4gaXRzIHZhbHVlfAorICAgfCAgICAgICAgICB8IGluY3JlYXNlcyBieSAqbWF4aW11bSouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCB2YXJpYWJsZSB8IEEgbmFtZSB3aGljaCBpcyBsaW5rZWQgdG8gdGhlIG9wdGlvbiB2YWx1ZS4gSWYgc3BlY2lmaWVkLCB0aGUgfAorICAgfCAgICAgICAgICB8IHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBiYXIgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gdGhlIHZhbHVlIG9mfAorICAgfCAgICAgICAgICB8IHRoaXMgbmFtZSB3aGVuZXZlciB0aGUgbGF0dGVyIGlzIG1vZGlmaWVkLiAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBwaGFzZSAgICB8IFJlYWQtb25seSBvcHRpb24uIFRoZSB3aWRnZXQgcGVyaW9kaWNhbGx5IGluY3JlbWVudHMgdGhlIHZhbHVlfAorICAgfCAgICAgICAgICB8IG9mIHRoaXMgb3B0aW9uIHdoZW5ldmVyIGl0cyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMCBhbmQsIGluICAgfAorICAgfCAgICAgICAgICB8IGRldGVybWluYXRlIG1vZGUsIGxlc3MgdGhhbiBtYXhpbXVtLiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCAgfAorICAgfCAgICAgICAgICB8IGJ5IHRoZSBjdXJyZW50IHRoZW1lIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBhbmltYXRpb24gZWZmZWN0cy4gfAorICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK3R0ay5Qcm9ncmVzc2JhcgorXl5eXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogUHJvZ3Jlc3NiYXIKKworICAgLi4gbWV0aG9kOjogc3RhcnQoW2ludGVydmFsXSkKKworICAgICAgQmVnaW4gYXV0b2luY3JlbWVudCBtb2RlOiBzY2hlZHVsZXMgYSByZWN1cnJpbmcgdGltZXIgZXZlbnQgdGhhdCBjYWxscworICAgICAgOm1ldGg6YFByb2dyZXNzYmFyLnN0ZXBgIGV2ZXJ5ICppbnRlcnZhbCogbWlsbGlzZWNvbmRzLiBJZiBvbWl0dGVkLAorICAgICAgKmludGVydmFsKiBkZWZhdWx0cyB0byA1MCBtaWxsaXNlY29uZHMuCisKKworICAgLi4gbWV0aG9kOjogc3RlcChbYW1vdW50XSkKKworICAgICAgSW5jcmVtZW50cyB0aGUgcHJvZ3Jlc3MgYmFyJ3MgdmFsdWUgYnkgKmFtb3VudCouCisKKyAgICAgICphbW91bnQqIGRlZmF1bHRzIHRvIDEuMCBpZiBvbWl0dGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IHN0b3AoKQorCisgICAgICBTdG9wIGF1dG9pbmNyZW1lbnQgbW9kZTogY2FuY2VscyBhbnkgcmVjdXJyaW5nIHRpbWVyIGV2ZW50IGluaXRpYXRlZCBieQorICAgICAgOm1ldGg6YFByb2dyZXNzYmFyLnN0YXJ0YCBmb3IgdGhpcyBwcm9ncmVzcyBiYXIuCisKKworU2VwYXJhdG9yCistLS0tLS0tLS0KKworVGhlIDpjbGFzczpgdHRrLlNlcGFyYXRvcmAgd2lkZ2V0IGRpc3BsYXlzIGEgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBzZXBhcmF0b3IKK2Jhci4KKworSXQgaGFzIG5vIG90aGVyIG1ldGhvZHMgYmVzaWRlcyB0aGUgb25lcyBpbmhlcml0ZWQgZnJvbSA6Y2xhc3M6YHR0ay5XaWRnZXRgLgorCisKK09wdGlvbnMKK15eXl5eXl4KKworVGhpcyB3aWRnZXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHNwZWNpZmljIG9wdGlvbjoKKworICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wdGlvbiB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBvcmllbnQgfCBPbmUgb2YgImhvcml6b250YWwiIG9yICJ2ZXJ0aWNhbCIuIFNwZWNpZmllcyB0aGUgb3JpZW50YXRpb24gb2Z8CisgICB8ICAgICAgICB8IHRoZSBzZXBhcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK1NpemVncmlwCistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB0dGsuU2l6ZWdyaXBgIHdpZGdldCAoYWxzbyBrbm93biBhcyBhIGdyb3cgYm94KSBhbGxvd3MgdGhlIHVzZXIgdG8KK3Jlc2l6ZSB0aGUgY29udGFpbmluZyB0b3BsZXZlbCB3aW5kb3cgYnkgcHJlc3NpbmcgYW5kIGRyYWdnaW5nIHRoZSBncmlwLgorCitUaGlzIHdpZGdldCBoYXMgbmVpdGhlciBzcGVjaWZpYyBvcHRpb25zIG5vciBzcGVjaWZpYyBtZXRob2RzLCBiZXNpZGVzIHRoZQorb25lcyBpbmhlcml0ZWQgZnJvbSA6Y2xhc3M6YHR0ay5XaWRnZXRgLgorCisKK1BsYXRmb3JtLXNwZWNpZmljIG5vdGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisqIE9uIE1hYyBPUyBYLCB0b3BsZXZlbCB3aW5kb3dzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBhIGJ1aWx0LWluIHNpemUgZ3JpcAorICBieSBkZWZhdWx0LiBBZGRpbmcgYSA6Y2xhc3M6YFNpemVncmlwYCBpcyBoYXJtbGVzcywgc2luY2UgdGhlIGJ1aWx0LWluCisgIGdyaXAgd2lsbCBqdXN0IG1hc2sgdGhlIHdpZGdldC4KKworCitCdWdzCiteXl5eCisKKyogSWYgdGhlIGNvbnRhaW5pbmcgdG9wbGV2ZWwncyBwb3NpdGlvbiB3YXMgc3BlY2lmaWVkIHJlbGF0aXZlIHRvIHRoZSByaWdodAorICBvciBib3R0b20gb2YgdGhlIHNjcmVlbiAoZS5nLiAuLi4uKSwgdGhlIDpjbGFzczpgU2l6ZWdyaXBgIHdpZGdldCB3aWxsCisgIG5vdCByZXNpemUgdGhlIHdpbmRvdy4KKyogVGhpcyB3aWRnZXQgc3VwcG9ydHMgb25seSAic291dGhlYXN0IiByZXNpemluZy4KKworCitUcmVldmlldworLS0tLS0tLS0KKworVGhlIDpjbGFzczpgdHRrLlRyZWV2aWV3YCB3aWRnZXQgZGlzcGxheXMgYSBoaWVyYXJjaGljYWwgY29sbGVjdGlvbiBvZiBpdGVtcy4KK0VhY2ggaXRlbSBoYXMgYSB0ZXh0dWFsIGxhYmVsLCBhbiBvcHRpb25hbCBpbWFnZSwgYW5kIGFuIG9wdGlvbmFsIGxpc3Qgb2YgZGF0YQordmFsdWVzLiBUaGUgZGF0YSB2YWx1ZXMgYXJlIGRpc3BsYXllZCBpbiBzdWNjZXNzaXZlIGNvbHVtbnMgYWZ0ZXIgdGhlIHRyZWUKK2xhYmVsLgorCitUaGUgb3JkZXIgaW4gd2hpY2ggZGF0YSB2YWx1ZXMgYXJlIGRpc3BsYXllZCBtYXkgYmUgY29udHJvbGxlZCBieSBzZXR0aW5nCit0aGUgd2lkZ2V0IG9wdGlvbiBgYGRpc3BsYXljb2x1bW5zYGAuIFRoZSB0cmVlIHdpZGdldCBjYW4gYWxzbyBkaXNwbGF5IGNvbHVtbgoraGVhZGluZ3MuIENvbHVtbnMgbWF5IGJlIGFjY2Vzc2VkIGJ5IG51bWJlciBvciBzeW1ib2xpYyBuYW1lcyBsaXN0ZWQgaW4gdGhlCit3aWRnZXQgb3B0aW9uIGNvbHVtbnMuIFNlZSBgQ29sdW1uIElkZW50aWZpZXJzYF8uCisKK0VhY2ggaXRlbSBpcyBpZGVudGlmaWVkIGJ5IGFuIHVuaXF1ZSBuYW1lLiBUaGUgd2lkZ2V0IHdpbGwgZ2VuZXJhdGUgaXRlbSBJRHMKK2lmIHRoZXkgYXJlIG5vdCBzdXBwbGllZCBieSB0aGUgY2FsbGVyLiBUaGVyZSBpcyBhIGRpc3Rpbmd1aXNoZWQgcm9vdCBpdGVtLAorbmFtZWQgYGB7fWBgLiBUaGUgcm9vdCBpdGVtIGl0c2VsZiBpcyBub3QgZGlzcGxheWVkOyBpdHMgY2hpbGRyZW4gYXBwZWFyIGF0IHRoZQordG9wIGxldmVsIG9mIHRoZSBoaWVyYXJjaHkuCisKK0VhY2ggaXRlbSBhbHNvIGhhcyBhIGxpc3Qgb2YgdGFncywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXNzb2NpYXRlIGV2ZW50IGJpbmRpbmdzCit3aXRoIGluZGl2aWR1YWwgaXRlbXMgYW5kIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGl0ZW0uCisKK1RoZSBUcmVldmlldyB3aWRnZXQgc3VwcG9ydHMgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2Nyb2xsaW5nLCBhY2NvcmRpbmcgdG8KK3RoZSBvcHRpb25zIGRlc2NyaWJlZCBpbiBgU2Nyb2xsYWJsZSBXaWRnZXQgT3B0aW9uc2BfIGFuZCB0aGUgbWV0aG9kcworOm1ldGg6YFRyZWV2aWV3Lnh2aWV3YCBhbmQgOm1ldGg6YFRyZWV2aWV3Lnl2aWV3YC4KKworCitPcHRpb25zCiteXl5eXl5eCisKK1RoaXMgd2lkZ2V0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBvcHRpb25zOgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxwezAuMlx0ZXh0d2lkdGh9fHB7MC43XHRleHR3aWR0aH18CisuLgorCisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uICAgICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGNvbHVtbnMgICAgICAgIHwgQSBsaXN0IG9mIGNvbHVtbiBpZGVudGlmaWVycywgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBjb2x1bW5zIGFuZCB0aGVpciBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGRpc3BsYXljb2x1bW5zIHwgQSBsaXN0IG9mIGNvbHVtbiBpZGVudGlmaWVycyAoZWl0aGVyIHN5bWJvbGljIG9yICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBpbnRlZ2VyIGluZGljZXMpIHNwZWNpZnlpbmcgd2hpY2ggZGF0YSBjb2x1bW5zIGFyZSAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IGRpc3BsYXllZCBhbmQgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyLCBvciB0aGUgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgc3RyaW5nICIjYWxsIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBoZWlnaHQgICAgICAgICB8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJvd3Mgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUuICB8CisgICB8ICAgICAgICAgICAgICAgIHwgTm90ZTogdGhlIHJlcXVlc3RlZCB3aWR0aCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHN1bSAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBvZiB0aGUgY29sdW1uIHdpZHRocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHBhZGRpbmcgICAgICAgIHwgU3BlY2lmaWVzIHRoZSBpbnRlcm5hbCBwYWRkaW5nIGZvciB0aGUgd2lkZ2V0LiBUaGUgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBwYWRkaW5nIGlzIGEgbGlzdCBvZiB1cCB0byBmb3VyIGxlbmd0aCBzcGVjaWZpY2F0aW9ucy4gfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHNlbGVjdG1vZGUgICAgIHwgQ29udHJvbHMgaG93IHRoZSBidWlsdC1pbiBjbGFzcyBiaW5kaW5ncyBtYW5hZ2UgdGhlICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBzZWxlY3Rpb24uIE9uZSBvZiAiZXh0ZW5kZWQiLCAiYnJvd3NlIiBvciAibm9uZSIuICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IElmIHNldCB0byAiZXh0ZW5kZWQiICh0aGUgZGVmYXVsdCksIG11bHRpcGxlIGl0ZW1zIG1heSB8CisgICB8ICAgICAgICAgICAgICAgIHwgYmUgc2VsZWN0ZWQuIElmICJicm93c2UiLCBvbmx5IGEgc2luZ2xlIGl0ZW0gd2lsbCBiZSAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBzZWxlY3RlZCBhdCBhIHRpbWUuIElmICJub25lIiwgdGhlIHNlbGVjdGlvbiB3aWxsIG5vdCAgfAorICAgfCAgICAgICAgICAgICAgICB8IGJlIGNoYW5nZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCBOb3RlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNvZGUgYW5kIHRhZyBiaW5kaW5ncyBjYW4gc2V0fAorICAgfCAgICAgICAgICAgICAgICB8IHRoZSBzZWxlY3Rpb24gaG93ZXZlciB0aGV5IHdpc2gsIHJlZ2FyZGxlc3Mgb2YgdGhlICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgdmFsdWUgIG9mIHRoaXMgb3B0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBzaG93ICAgICAgICAgICB8IEEgbGlzdCBjb250YWluaW5nIHplcm8gb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyx8CisgICB8ICAgICAgICAgICAgICAgIHwgc3BlY2lmeWluZyB3aGljaCBlbGVtZW50cyBvZiB0aGUgdHJlZSB0byBkaXNwbGF5LiAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICogdHJlZTogZGlzcGxheSB0cmVlIGxhYmVscyBpbiBjb2x1bW4gIzAuICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgKiBoZWFkaW5nczogZGlzcGxheSB0aGUgaGVhZGluZyByb3cuICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8IFRoZSBkZWZhdWx0IGlzICJ0cmVlIGhlYWRpbmdzIiwgaS5lLiwgc2hvdyBhbGwgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgZWxlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8ICoqTm90ZSoqOiBDb2x1bW4gIzAgYWx3YXlzIHJlZmVycyB0byB0aGUgdHJlZSBjb2x1bW4sICB8CisgICB8ICAgICAgICAgICAgICAgIHwgZXZlbiBpZiBzaG93PSJ0cmVlIiBpcyBub3Qgc3BlY2lmaWVkLiAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK0l0ZW0gT3B0aW9ucworXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgaXRlbSBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgZm9yIGl0ZW1zIGluIHRoZSBpbnNlcnQgYW5kIGl0ZW0KK3dpZGdldCBjb21tYW5kcy4KKworICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uIHwgZGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCB0ZXh0ICAgfCBUaGUgdGV4dHVhbCBsYWJlbCB0byBkaXNwbGF5IGZvciB0aGUgaXRlbS4gICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGltYWdlICB8IEEgVGsgSW1hZ2UsIGRpc3BsYXllZCB0byB0aGUgbGVmdCBvZiB0aGUgbGFiZWwuICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgdmFsdWVzIHwgVGhlIGxpc3Qgb2YgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXRlbS4gICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgfCBFYWNoIGl0ZW0gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHZhbHVlcyBhcyB0aGUgd2lkZ2V0IHwKKyAgIHwgICAgICAgIHwgb3B0aW9uIGNvbHVtbnMuIElmIHRoZXJlIGFyZSBmZXdlciB2YWx1ZXMgdGhhbiBjb2x1bW5zLCB0aGUgICB8CisgICB8ICAgICAgICB8IHJlbWFpbmluZyB2YWx1ZXMgYXJlIGFzc3VtZWQgZW1wdHkuIElmIHRoZXJlIGFyZSBtb3JlIHZhbHVlcyAgfAorICAgfCAgICAgICAgfCB0aGFuIGNvbHVtbnMsIHRoZSBleHRyYSB2YWx1ZXMgYXJlIGlnbm9yZWQuICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IG9wZW4gICB8IFRydWUvRmFsc2UgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBpdGVtJ3MgY2hpbGRyZW4gc2hvdWxkfAorICAgfCAgICAgICAgfCBiZSBkaXNwbGF5ZWQgb3IgaGlkZGVuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IHRhZ3MgICB8IEEgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW0uICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitUYWcgT3B0aW9ucworXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgb24gdGFnczoKKworICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgb3B0aW9uICAgICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBmb3JlZ3JvdW5kIHwgU3BlY2lmaWVzIHRoZSB0ZXh0IGZvcmVncm91bmQgY29sb3IuICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGJhY2tncm91bmQgfCBTcGVjaWZpZXMgdGhlIGNlbGwgb3IgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLiAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgZm9udCAgICAgICB8IFNwZWNpZmllcyB0aGUgZm9udCB0byB1c2Ugd2hlbiBkcmF3aW5nIHRleHQuICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBpbWFnZSAgICAgIHwgU3BlY2lmaWVzIHRoZSBpdGVtIGltYWdlLCBpbiBjYXNlIHRoZSBpdGVtJ3MgaW1hZ2Ugb3B0aW9uIHwKKyAgIHwgICAgICAgICAgICB8IGlzIGVtcHR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKK0NvbHVtbiBJZGVudGlmaWVycworXl5eXl5eXl5eXl5eXl5eXl5eCisKK0NvbHVtbiBpZGVudGlmaWVycyB0YWtlIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorCisqIEEgc3ltYm9saWMgbmFtZSBmcm9tIHRoZSBsaXN0IG9mIGNvbHVtbnMgb3B0aW9uLgorKiBBbiBpbnRlZ2VyIG4sIHNwZWNpZnlpbmcgdGhlIG50aCBkYXRhIGNvbHVtbi4KKyogQSBzdHJpbmcgb2YgdGhlIGZvcm0gI24sIHdoZXJlIG4gaXMgYW4gaW50ZWdlciwgc3BlY2lmeWluZyB0aGUgbnRoIGRpc3BsYXkKKyAgY29sdW1uLgorCitOb3RlczoKKworKiBJdGVtJ3Mgb3B0aW9uIHZhbHVlcyBtYXkgYmUgZGlzcGxheWVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhlIG9yZGVyCisgIGluIHdoaWNoIHRoZXkgYXJlIHN0b3JlZC4KKyogQ29sdW1uICMwIGFsd2F5cyByZWZlcnMgdG8gdGhlIHRyZWUgY29sdW1uLCBldmVuIGlmIHNob3c9InRyZWUiIGlzIG5vdAorICBzcGVjaWZpZWQuCisKK0EgZGF0YSBjb2x1bW4gbnVtYmVyIGlzIGFuIGluZGV4IGludG8gYW4gaXRlbSdzIG9wdGlvbiB2YWx1ZXMgbGlzdDsgYSBkaXNwbGF5Citjb2x1bW4gbnVtYmVyIGlzIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSB0cmVlIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIGRpc3BsYXllZC4KK1RyZWUgbGFiZWxzIGFyZSBkaXNwbGF5ZWQgaW4gY29sdW1uICMwLiBJZiBvcHRpb24gZGlzcGxheWNvbHVtbnMgaXMgbm90IHNldCwKK3RoZW4gZGF0YSBjb2x1bW4gbiBpcyBkaXNwbGF5ZWQgaW4gY29sdW1uICNuKzEuIEFnYWluLCAqKmNvbHVtbiAjMCBhbHdheXMKK3JlZmVycyB0byB0aGUgdHJlZSBjb2x1bW4qKi4KKworCitWaXJ0dWFsIEV2ZW50cworXl5eXl5eXl5eXl5eXl4KKworVGhlIFRyZWV2aWV3IHdpZGdldCBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyB2aXJ0dWFsIGV2ZW50cy4KKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBldmVudCAgICAgICAgICAgICAgfCBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA8PFRyZWV2aWV3U2VsZWN0Pj4gfCBHZW5lcmF0ZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA8PFRyZWV2aWV3T3Blbj4+ICAgfCBHZW5lcmF0ZWQganVzdCBiZWZvcmUgc2V0dGluZ3MgdGhlIGZvY3VzIGl0ZW0gdG8gfAorICAgfCAgICAgICAgICAgICAgICAgICAgfCBvcGVuPVRydWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA8PFRyZWV2aWV3Q2xvc2U+PiAgfCBHZW5lcmF0ZWQganVzdCBhZnRlciBzZXR0aW5nIHRoZSBmb2N1cyBpdGVtIHRvICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgfCBvcGVuPUZhbHNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgOm1ldGg6YFRyZWV2aWV3LmZvY3VzYCBhbmQgOm1ldGg6YFRyZWV2aWV3LnNlbGVjdGlvbmAgbWV0aG9kcyBjYW4gYmUgdXNlZAordG8gZGV0ZXJtaW5lIHRoZSBhZmZlY3RlZCBpdGVtIG9yIGl0ZW1zLgorCisKK3R0ay5UcmVldmlldworXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogVHJlZXZpZXcKKworICAgLi4gbWV0aG9kOjogYmJveChpdGVtWywgY29sdW1uPU5vbmVdKQorCisgICAgICBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggKHJlbGF0aXZlIHRvIHRoZSB0cmVldmlldyB3aWRnZXQncyB3aW5kb3cpIG9mCisgICAgICB0aGUgc3BlY2lmaWVkICppdGVtKiBpbiB0aGUgZm9ybSAoeCwgeSwgd2lkdGgsIGhlaWdodCkuCisKKyAgICAgIElmICpjb2x1bW4qIGlzIHNwZWNpZmllZCwgcmV0dXJucyB0aGUgYm91bmRpbmcgYm94IG9mIHRoYXQgY2VsbC4gSWYgdGhlCisgICAgICAqaXRlbSogaXMgbm90IHZpc2libGUgKGkuZS4sIGlmIGl0IGlzIGEgZGVzY2VuZGFudCBvZiBhIGNsb3NlZCBpdGVtIG9yIGlzCisgICAgICBzY3JvbGxlZCBvZmZzY3JlZW4pLCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfY2hpbGRyZW4oW2l0ZW1dKQorCisgICAgICBSZXR1cm5zIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGJlbG9uZ2luZyB0byAqaXRlbSouCisKKyAgICAgIElmICppdGVtKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHJvb3QgY2hpbGRyZW4uCisKKworICAgLi4gbWV0aG9kOjogc2V0X2NoaWxkcmVuKGl0ZW0sICpuZXdjaGlsZHJlbikKKworICAgICAgUmVwbGFjZXMgKml0ZW0qJ3MgY2hpbGQgd2l0aCAqbmV3Y2hpbGRyZW4qLgorCisgICAgICBDaGlsZHJlbiBwcmVzZW50IGluICppdGVtKiB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiAqbmV3Y2hpbGRyZW4qIGFyZQorICAgICAgZGV0YWNoZWQgZnJvbSB0aGUgdHJlZS4gTm8gaXRlbXMgaW4gKm5ld2NoaWxkcmVuKiBtYXkgYmUgYW4gYW5jZXN0b3Igb2YKKyAgICAgICppdGVtKi4gTm90ZSB0aGF0IG5vdCBzcGVjaWZ5aW5nICpuZXdjaGlsZHJlbiogcmVzdWx0cyBpbiBkZXRhY2hpbmcKKyAgICAgICppdGVtKidzIGNoaWxkcmVuLgorCisKKyAgIC4uIG1ldGhvZDo6IGNvbHVtbihjb2x1bW5bLCBvcHRpb249Tm9uZVssICoqa3ddXSkKKworICAgICAgUXVlcnkgb3IgbW9kaWZ5IHRoZSBvcHRpb25zIGZvciB0aGUgc3BlY2lmaWVkICpjb2x1bW4qLgorCisgICAgICBJZiAqa3cqIGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Qgb2YgdGhlIGNvbHVtbiBvcHRpb24gdmFsdWVzLiBJZgorICAgICAgKm9wdGlvbiogaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0ICpvcHRpb24qIGlzIHJldHVybmVkLgorICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKworICAgICAgVGhlIHZhbGlkIG9wdGlvbnMvdmFsdWVzIGFyZToKKworICAgICAgKiBpZAorICAgICAgICAgUmV0dXJucyB0aGUgY29sdW1uIG5hbWUuIFRoaXMgaXMgYSByZWFkLW9ubHkgb3B0aW9uLgorICAgICAgKiBhbmNob3I6IE9uZSBvZiB0aGUgc3RhbmRhcmQgVGsgYW5jaG9yIHZhbHVlcy4KKyAgICAgICAgIFNwZWNpZmllcyBob3cgdGhlIHRleHQgaW4gdGhpcyBjb2x1bW4gc2hvdWxkIGJlIGFsaWduZWQgd2l0aCByZXNwZWN0CisgICAgICAgICB0byB0aGUgY2VsbC4KKyAgICAgICogbWlud2lkdGg6IHdpZHRoCisgICAgICAgICBUaGUgbWluaW11bSB3aWR0aCBvZiB0aGUgY29sdW1uIGluIHBpeGVscy4gVGhlIHRyZWV2aWV3IHdpZGdldCB3aWxsCisgICAgICAgICBub3QgbWFrZSB0aGUgY29sdW1uIGFueSBzbWFsbGVyIHRoYW4gc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uIHdoZW4KKyAgICAgICAgIHRoZSB3aWRnZXQgaXMgcmVzaXplZCBvciB0aGUgdXNlciBkcmFncyBhIGNvbHVtbi4KKyAgICAgICogc3RyZXRjaDogVHJ1ZS9GYWxzZQorICAgICAgICAgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbHVtbidzIHdpZHRoIHNob3VsZCBiZSBhZGp1c3RlZCB3aGVuCisgICAgICAgICB0aGUgd2lkZ2V0IGlzIHJlc2l6ZWQuCisgICAgICAqIHdpZHRoOiB3aWR0aAorICAgICAgICAgVGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gaW4gcGl4ZWxzLgorCisgICAgICBUbyBjb25maWd1cmUgdGhlIHRyZWUgY29sdW1uLCBjYWxsIHRoaXMgd2l0aCBjb2x1bW4gPSAiIzAiCisKKyAgIC4uIG1ldGhvZDo6IGRlbGV0ZSgqaXRlbXMpCisKKyAgICAgIERlbGV0ZSBhbGwgc3BlY2lmaWVkICppdGVtcyogYW5kIGFsbCB0aGVpciBkZXNjZW5kYW50cy4KKworICAgICAgVGhlIHJvb3QgaXRlbSBtYXkgbm90IGJlIGRlbGV0ZWQuCisKKworICAgLi4gbWV0aG9kOjogZGV0YWNoKCppdGVtcykKKworICAgICAgVW5saW5rcyBhbGwgb2YgdGhlIHNwZWNpZmllZCAqaXRlbXMqIGZyb20gdGhlIHRyZWUuCisKKyAgICAgIFRoZSBpdGVtcyBhbmQgYWxsIG9mIHRoZWlyIGRlc2NlbmRhbnRzIGFyZSBzdGlsbCBwcmVzZW50LCBhbmQgbWF5IGJlCisgICAgICByZWluc2VydGVkIGF0IGFub3RoZXIgcG9pbnQgaW4gdGhlIHRyZWUsIGJ1dCB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuCisKKyAgICAgIFRoZSByb290IGl0ZW0gbWF5IG5vdCBiZSBkZXRhY2hlZC4KKworCisgICAuLiBtZXRob2Q6OiBleGlzdHMoaXRlbSkKKworICAgICAgUmV0dXJucyBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgKml0ZW0qIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUuCisKKworICAgLi4gbWV0aG9kOjogZm9jdXMoW2l0ZW09Tm9uZV0pCisKKyAgICAgIElmICppdGVtKiBpcyBzcGVjaWZpZWQsIHNldHMgdGhlIGZvY3VzIGl0ZW0gdG8gKml0ZW0qLiBPdGhlcndpc2UsIHJldHVybnMKKyAgICAgIHRoZSBjdXJyZW50IGZvY3VzIGl0ZW0sIG9yICcnIGlmIHRoZXJlIGlzIG5vbmUuCisKKworICAgLi4gbWV0aG9kOjogaGVhZGluZyhjb2x1bW5bLCBvcHRpb249Tm9uZVssICoqa3ddXSkKKworICAgICAgUXVlcnkgb3IgbW9kaWZ5IHRoZSBoZWFkaW5nIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgKmNvbHVtbiouCisKKyAgICAgIElmICprdyogaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdCBvZiB0aGUgaGVhZGluZyBvcHRpb24gdmFsdWVzLiBJZgorICAgICAgKm9wdGlvbiogaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0ICpvcHRpb24qIGlzIHJldHVybmVkLgorICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKworICAgICAgVGhlIHZhbGlkIG9wdGlvbnMvdmFsdWVzIGFyZToKKworICAgICAgKiB0ZXh0OiB0ZXh0CisgICAgICAgICBUaGUgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4gaGVhZGluZy4KKyAgICAgICogaW1hZ2U6IGltYWdlTmFtZQorICAgICAgICAgU3BlY2lmaWVzIGFuIGltYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjb2x1bW4gaGVhZGluZy4KKyAgICAgICogYW5jaG9yOiBhbmNob3IKKyAgICAgICAgIFNwZWNpZmllcyBob3cgdGhlIGhlYWRpbmcgdGV4dCBzaG91bGQgYmUgYWxpZ25lZC4gT25lIG9mIHRoZSBzdGFuZGFyZAorICAgICAgICAgVGsgYW5jaG9yIHZhbHVlcy4KKyAgICAgICogY29tbWFuZDogY2FsbGJhY2sKKyAgICAgICAgIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBoZWFkaW5nIGxhYmVsIGlzIHByZXNzZWQuCisKKyAgICAgIFRvIGNvbmZpZ3VyZSB0aGUgdHJlZSBjb2x1bW4gaGVhZGluZywgY2FsbCB0aGlzIHdpdGggY29sdW1uID0gIiMwIi4KKworCisgICAuLiBtZXRob2Q6OiBpZGVudGlmeShjb21wb25lbnQsIHgsIHkpCisKKyAgICAgIFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlY2lmaWVkICpjb21wb25lbnQqIHVuZGVyIHRoZSBwb2ludCBnaXZlbgorICAgICAgYnkgKngqIGFuZCAqeSosIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm8gc3VjaCAqY29tcG9uZW50KiBpcyBwcmVzZW50IGF0CisgICAgICB0aGF0IHBvc2l0aW9uLgorCisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5X3Jvdyh5KQorCisgICAgICBSZXR1cm5zIHRoZSBpdGVtIElEIG9mIHRoZSBpdGVtIGF0IHBvc2l0aW9uICp5Ki4KKworCisgICAuLiBtZXRob2Q6OiBpZGVudGlmeV9jb2x1bW4oeCkKKworICAgICAgUmV0dXJucyB0aGUgZGF0YSBjb2x1bW4gaWRlbnRpZmllciBvZiB0aGUgY2VsbCBhdCBwb3NpdGlvbiAqeCouCisKKyAgICAgIFRoZSB0cmVlIGNvbHVtbiBoYXMgSUQgIzAuCisKKworICAgLi4gbWV0aG9kOjogaWRlbnRpZnlfcmVnaW9uKHgsIHkpCisKKyAgICAgIFJldHVybnMgb25lIG9mOgorCisgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IHJlZ2lvbiAgICB8IG1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICAgICB8IGhlYWRpbmcgICB8IFRyZWUgaGVhZGluZyBhcmVhLiAgICAgICAgICAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IHNlcGFyYXRvciB8IFNwYWNlIGJldHdlZW4gdHdvIGNvbHVtbnMgaGVhZGluZ3MuICB8CisgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IHRyZWUgICAgICB8IFRoZSB0cmVlIGFyZWEuICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGNlbGwgICAgICB8IEEgZGF0YSBjZWxsLiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgIEF2YWlsYWJpbGl0eTogVGsgOC42LgorCisKKyAgIC4uIG1ldGhvZDo6IGlkZW50aWZ5X2VsZW1lbnQoeCwgeSkKKworICAgICAgUmV0dXJucyB0aGUgZWxlbWVudCBhdCBwb3NpdGlvbiAqeCosICp5Ki4KKworICAgICAgQXZhaWxhYmlsaXR5OiBUayA4LjYuCisKKworICAgLi4gbWV0aG9kOjogaW5kZXgoaXRlbSkKKworICAgICAgUmV0dXJucyB0aGUgaW50ZWdlciBpbmRleCBvZiAqaXRlbSogd2l0aGluIGl0cyBwYXJlbnQncyBsaXN0IG9mIGNoaWxkcmVuLgorCisKKyAgIC4uIG1ldGhvZDo6IGluc2VydChwYXJlbnQsIGluZGV4WywgaWlkPU5vbmVbLCAqKmt3XV0pCisKKyAgICAgIENyZWF0ZXMgYSBuZXcgaXRlbSBhbmQgcmV0dXJucyB0aGUgaXRlbSBpZGVudGlmaWVyIG9mIHRoZSBuZXdseSBjcmVhdGVkCisgICAgICBpdGVtLgorCisgICAgICAqcGFyZW50KiBpcyB0aGUgaXRlbSBJRCBvZiB0aGUgcGFyZW50IGl0ZW0sIG9yIHRoZSBlbXB0eSBzdHJpbmcgdG8gY3JlYXRlCisgICAgICBhIG5ldyB0b3AtbGV2ZWwgaXRlbS4gKmluZGV4KiBpcyBhbiBpbnRlZ2VyLCBvciB0aGUgdmFsdWUgImVuZCIsCisgICAgICBzcGVjaWZ5aW5nIHdoZXJlIGluIHRoZSBsaXN0IG9mIHBhcmVudCdzIGNoaWxkcmVuIHRvIGluc2VydCB0aGUgbmV3IGl0ZW0uCisgICAgICBJZiAqaW5kZXgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgbmV3IG5vZGUgaXMgaW5zZXJ0ZWQgYXQKKyAgICAgIHRoZSBiZWdpbm5pbmc7IGlmICppbmRleCogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50IG51bWJlcgorICAgICAgb2YgY2hpbGRyZW4sIGl0IGlzIGluc2VydGVkIGF0IHRoZSBlbmQuIElmICppaWQqIGlzIHNwZWNpZmllZCwgaXQgaXMgdXNlZAorICAgICAgYXMgdGhlIGl0ZW0gaWRlbnRpZmllcjsgKmlpZCogbXVzdCBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgdHJlZS4KKyAgICAgIE90aGVyd2lzZSwgYSBuZXcgdW5pcXVlIGlkZW50aWZpZXIgaXMgZ2VuZXJhdGVkLgorCisgICAgICBTZWUgYEl0ZW0gT3B0aW9uc2BfIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcG9pbnRzLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZW0oaXRlbVssIG9wdGlvblssICoqa3ddXSkKKworICAgICAgUXVlcnkgb3IgbW9kaWZ5IHRoZSBvcHRpb25zIGZvciB0aGUgc3BlY2lmaWVkICppdGVtKi4KKworICAgICAgSWYgbm8gb3B0aW9ucyBhcmUgZ2l2ZW4sIGEgZGljdCB3aXRoIG9wdGlvbnMvdmFsdWVzIGZvciB0aGUgaXRlbSBpcworICAgICAgcmV0dXJuZWQuCisgICAgICBJZiAqb3B0aW9uKiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGlzIHJldHVybmVkLgorICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBhcyBnaXZlbiBieSAqa3cqLgorCisKKyAgIC4uIG1ldGhvZDo6IG1vdmUoaXRlbSwgcGFyZW50LCBpbmRleCkKKworICAgICAgTW92ZXMgKml0ZW0qIHRvIHBvc2l0aW9uICppbmRleCogaW4gKnBhcmVudConcyBsaXN0IG9mIGNoaWxkcmVuLgorCisgICAgICBJdCBpcyBpbGxlZ2FsIHRvIG1vdmUgYW4gaXRlbSB1bmRlciBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzLiBJZiAqaW5kZXgqIGlzCisgICAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgKml0ZW0qIGlzIG1vdmVkIHRvIHRoZSBiZWdpbm5pbmc7IGlmIGdyZWF0ZXIKKyAgICAgIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBjaGlsZHJlbiwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZC4gSWYgKml0ZW0qCisgICAgICB3YXMgZGV0YWNoZWQgaXQgaXMgcmVhdHRhY2hlZC4KKworCisgICAuLiBtZXRob2Q6OiBuZXh0KGl0ZW0pCisKKyAgICAgIFJldHVybnMgdGhlIGlkZW50aWZpZXIgb2YgKml0ZW0qJ3MgbmV4dCBzaWJsaW5nLCBvciAnJyBpZiAqaXRlbSogaXMgdGhlCisgICAgICBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQuCisKKworICAgLi4gbWV0aG9kOjogcGFyZW50KGl0ZW0pCisKKyAgICAgIFJldHVybnMgdGhlIElEIG9mIHRoZSBwYXJlbnQgb2YgKml0ZW0qLCBvciAnJyBpZiAqaXRlbSogaXMgYXQgdGhlIHRvcAorICAgICAgbGV2ZWwgb2YgdGhlIGhpZXJhcmNoeS4KKworCisgICAuLiBtZXRob2Q6OiBwcmV2KGl0ZW0pCisKKyAgICAgIFJldHVybnMgdGhlIGlkZW50aWZpZXIgb2YgKml0ZW0qJ3MgcHJldmlvdXMgc2libGluZywgb3IgJycgaWYgKml0ZW0qIGlzCisgICAgICB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudC4KKworCisgICAuLiBtZXRob2Q6OiByZWF0dGFjaChpdGVtLCBwYXJlbnQsIGluZGV4KQorCisgICAgICBBbiBhbGlhcyBmb3IgOm1ldGg6YFRyZWV2aWV3Lm1vdmVgLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlZShpdGVtKQorCisgICAgICBFbnN1cmUgdGhhdCAqaXRlbSogaXMgdmlzaWJsZS4KKworICAgICAgU2V0cyBhbGwgb2YgKml0ZW0qJ3MgYW5jZXN0b3JzIG9wZW4gb3B0aW9uIHRvIFRydWUsIGFuZCBzY3JvbGxzIHRoZQorICAgICAgd2lkZ2V0IGlmIG5lY2Vzc2FyeSBzbyB0aGF0ICppdGVtKiBpcyB3aXRoaW4gdGhlIHZpc2libGUgcG9ydGlvbiBvZgorICAgICAgdGhlIHRyZWUuCisKKworICAgLi4gbWV0aG9kOjogc2VsZWN0aW9uKFtzZWxvcD1Ob25lWywgaXRlbXM9Tm9uZV1dKQorCisgICAgICBJZiAqc2Vsb3AqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgc2VsZWN0ZWQgaXRlbXMuIE90aGVyd2lzZSwgaXQgd2lsbAorICAgICAgYWN0IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHNlbGVjdGlvbiBtZXRob2RzLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdGlvbl9zZXQoaXRlbXMpCisKKyAgICAgICppdGVtcyogYmVjb21lcyB0aGUgbmV3IHNlbGVjdGlvbi4KKworCisgICAuLiBtZXRob2Q6OiBzZWxlY3Rpb25fYWRkKGl0ZW1zKQorCisgICAgICBBZGQgKml0ZW1zKiB0byB0aGUgc2VsZWN0aW9uLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdGlvbl9yZW1vdmUoaXRlbXMpCisKKyAgICAgIFJlbW92ZSAqaXRlbXMqIGZyb20gdGhlIHNlbGVjdGlvbi4KKworCisgICAuLiBtZXRob2Q6OiBzZWxlY3Rpb25fdG9nZ2xlKGl0ZW1zKQorCisgICAgICBUb2dnbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBlYWNoIGl0ZW0gaW4gKml0ZW1zKi4KKworCisgICAuLiBtZXRob2Q6OiBzZXQoaXRlbVssIGNvbHVtbj1Ob25lWywgdmFsdWU9Tm9uZV1dKQorCisgICAgICBXaXRoIG9uZSBhcmd1bWVudCwgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgY29sdW1uL3ZhbHVlIHBhaXJzIGZvciB0aGUKKyAgICAgIHNwZWNpZmllZCAqaXRlbSouIFdpdGggdHdvIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKyAgICAgIHNwZWNpZmllZCAqY29sdW1uKi4gV2l0aCB0aHJlZSBhcmd1bWVudHMsIHNldHMgdGhlIHZhbHVlIG9mIGdpdmVuCisgICAgICAqY29sdW1uKiBpbiBnaXZlbiAqaXRlbSogdG8gdGhlIHNwZWNpZmllZCAqdmFsdWUqLgorCisKKyAgIC4uIG1ldGhvZDo6IHRhZ19iaW5kKHRhZ25hbWVbLCBzZXF1ZW5jZT1Ob25lWywgY2FsbGJhY2s9Tm9uZV1dKQorCisgICAgICBCaW5kIGEgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiBldmVudCAqc2VxdWVuY2UqIHRvIHRoZSB0YWcgKnRhZ25hbWUqLgorICAgICAgV2hlbiBhbiBldmVudCBpcyBkZWxpdmVyZWQgdG8gYW4gaXRlbSwgdGhlIGNhbGxiYWNrcyBmb3IgZWFjaCBvZiB0aGUKKyAgICAgIGl0ZW0ncyB0YWdzIG9wdGlvbiBhcmUgY2FsbGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IHRhZ19jb25maWd1cmUodGFnbmFtZVssIG9wdGlvbj1Ob25lWywgKiprd11dKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgKnRhZ25hbWUqLgorCisgICAgICBJZiAqa3cqIGlzIG5vdCBnaXZlbiwgcmV0dXJucyBhIGRpY3Qgb2YgdGhlIG9wdGlvbiBzZXR0aW5ncyBmb3IKKyAgICAgICp0YWduYW1lKi4gSWYgKm9wdGlvbiogaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgdGhhdCAqb3B0aW9uKgorICAgICAgZm9yIHRoZSBzcGVjaWZpZWQgKnRhZ25hbWUqLiBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlCisgICAgICBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuICp0YWduYW1lKi4KKworCisgICAuLiBtZXRob2Q6OiB0YWdfaGFzKHRhZ25hbWVbLCBpdGVtXSkKKworICAgICAgSWYgKml0ZW0qIGlzIHNwZWNpZmllZCwgcmV0dXJucyAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNwZWNpZmllZAorICAgICAgKml0ZW0qIGhhcyB0aGUgZ2l2ZW4gKnRhZ25hbWUqLiBPdGhlcndpc2UsIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcworICAgICAgdGhhdCBoYXZlIHRoZSBzcGVjaWZpZWQgdGFnLgorCisgICAgICBBdmFpbGFiaWxpdHk6IFRrIDguNgorCisKKyAgIC4uIG1ldGhvZDo6IHh2aWV3KCphcmdzKQorCisgICAgICBRdWVyeSBvciBtb2RpZnkgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdHJlZXZpZXcuCisKKworICAgLi4gbWV0aG9kOjogeXZpZXcoKmFyZ3MpCisKKyAgICAgIFF1ZXJ5IG9yIG1vZGlmeSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdHJlZXZpZXcuCisKKworLi4gX1R0a1N0eWxpbmc6CisKK1R0ayBTdHlsaW5nCistLS0tLS0tLS0tLQorCitFYWNoIHdpZGdldCBpbiA6bW9kOmB0dGtgIGlzIGFzc2lnbmVkIGEgc3R5bGUsIHdoaWNoIHNwZWNpZmllcyB0aGUgc2V0IG9mCitlbGVtZW50cyBtYWtpbmcgdXAgdGhlIHdpZGdldCBhbmQgaG93IHRoZXkgYXJlIGFycmFuZ2VkLCBhbG9uZyB3aXRoIGR5bmFtaWMgYW5kCitkZWZhdWx0IHNldHRpbmdzIGZvciBlbGVtZW50IG9wdGlvbnMuIEJ5IGRlZmF1bHQgdGhlIHN0eWxlIG5hbWUgaXMgdGhlIHNhbWUgYXMKK3RoZSB3aWRnZXQncyBjbGFzcyBuYW1lLCBidXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIHdpZGdldCdzIHN0eWxlCitvcHRpb24uIElmIHRoZSBjbGFzcyBuYW1lIG9mIGEgd2lkZ2V0IGlzIHVua25vd24sIHVzZSB0aGUgbWV0aG9kCis6bWV0aDpgTWlzYy53aW5mb19jbGFzc2AgKHNvbWV3aWRnZXQud2luZm9fY2xhc3MoKSkuCisKKy4uIHNlZWFsc286OgorCisgICBgVGNsJzIwMDQgY29uZmVyZW5jZSBwcmVzZW50YXRpb24gPGh0dHA6Ly90a3RhYmxlLnNvdXJjZWZvcmdlLm5ldC90aWxlL3RpbGUtdGNsMjAwNC5wZGY+YF8KKyAgICAgIFRoaXMgZG9jdW1lbnQgZXhwbGFpbnMgaG93IHRoZSB0aGVtZSBlbmdpbmUgd29ya3MKKworCisuLiBjbGFzczo6IFN0eWxlCisKKyAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBzdHlsZSBkYXRhYmFzZS4KKworCisgICAuLiBtZXRob2Q6OiBjb25maWd1cmUoc3R5bGUsIHF1ZXJ5X29wdD1Ob25lLCAqKmt3KQorCisgICAgICBRdWVyeSBvciBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24ocykgaW4gKnN0eWxlKi4KKworICAgICAgRWFjaCBrZXkgaW4gKmt3KiBpcyBhbiBvcHRpb24gYW5kIGVhY2ggdmFsdWUgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcKKyAgICAgIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24uCisKKyAgICAgIEZvciBleGFtcGxlLCB0byBjaGFuZ2UgZXZlcnkgZGVmYXVsdCBidXR0b24gdG8gYmUgYSBmbGF0IGJ1dHRvbiB3aXRoIHNvbWUKKyAgICAgIHBhZGRpbmcgYW5kIGEgZGlmZmVyZW50IGJhY2tncm91bmQgY29sb3IgZG86OgorCisgICAgICAgICBpbXBvcnQgdHRrCisgICAgICAgICBpbXBvcnQgVGtpbnRlcgorCisgICAgICAgICByb290ID0gVGtpbnRlci5UaygpCisKKyAgICAgICAgIHR0ay5TdHlsZSgpLmNvbmZpZ3VyZSgiVEJ1dHRvbiIsIHBhZGRpbmc9NiwgcmVsaWVmPSJmbGF0IiwKKyAgICAgICAgICAgIGJhY2tncm91bmQ9IiNjY2MiKQorCisgICAgICAgICBidG4gPSB0dGsuQnV0dG9uKHRleHQ9IlNhbXBsZSIpCisgICAgICAgICBidG4ucGFjaygpCisKKyAgICAgICAgIHJvb3QubWFpbmxvb3AoKQorCisKKyAgIC4uIG1ldGhvZDo6IG1hcChzdHlsZSwgcXVlcnlfb3B0PU5vbmUsICoqa3cpCisKKyAgICAgIFF1ZXJ5IG9yIHNldHMgZHluYW1pYyB2YWx1ZXMgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24ocykgaW4gKnN0eWxlKi4KKworICAgICAgRWFjaCBrZXkgaW4gKmt3KiBpcyBhbiBvcHRpb24gYW5kIGVhY2ggdmFsdWUgc2hvdWxkIGJlIGEgbGlzdCBvciBhCisgICAgICB0dXBsZSAodXN1YWxseSkgY29udGFpbmluZyBzdGF0ZXNwZWNzIGdyb3VwZWQgaW4gdHVwbGVzLCBsaXN0cywgb3IKKyAgICAgIHNvbWV0aGluZyBlbHNlIG9mIHlvdXIgcHJlZmVyZW5jZS4gQSBzdGF0ZXNwZWMgaXMgYSBjb21wb3VuZCBvZiBvbmUKKyAgICAgIG9yIG1vcmUgc3RhdGVzIGFuZCB0aGVuIGEgdmFsdWUuCisKKyAgICAgIEFuIGV4YW1wbGU6OgorCisgICAgICAgICBpbXBvcnQgVGtpbnRlcgorICAgICAgICAgaW1wb3J0IHR0aworCisgICAgICAgICByb290ID0gVGtpbnRlci5UaygpCisKKyAgICAgICAgIHN0eWxlID0gdHRrLlN0eWxlKCkKKyAgICAgICAgIHN0eWxlLm1hcCgiQy5UQnV0dG9uIiwKKyAgICAgICAgICAgICBmb3JlZ3JvdW5kPVsoJ3ByZXNzZWQnLCAncmVkJyksICgnYWN0aXZlJywgJ2JsdWUnKV0sCisgICAgICAgICAgICAgYmFja2dyb3VuZD1bKCdwcmVzc2VkJywgJyFkaXNhYmxlZCcsICdibGFjaycpLCAoJ2FjdGl2ZScsICd3aGl0ZScpXQorICAgICAgICAgICAgICkKKworICAgICAgICAgY29sb3JlZF9idG4gPSB0dGsuQnV0dG9uKHRleHQ9IlRlc3QiLCBzdHlsZT0iQy5UQnV0dG9uIikucGFjaygpCisKKyAgICAgICAgIHJvb3QubWFpbmxvb3AoKQorCisKKyAgICAgIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIChzdGF0ZXMsIHZhbHVlKSBzZXF1ZW5jZXMgZm9yIGFuCisgICAgICBvcHRpb24gbWF0dGVycy4gIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCBpZiB5b3UgY2hhbmdlIHRoZQorICAgICAgb3JkZXIgdG8gYGBbKCdhY3RpdmUnLCAnYmx1ZScpLCAoJ3ByZXNzZWQnLCAncmVkJyldYGAgaW4gdGhlCisgICAgICBmb3JlZ3JvdW5kIG9wdGlvbiwgZm9yIGV4YW1wbGUsIHlvdSB3b3VsZCBnZXQgYSBibHVlIGZvcmVncm91bmQKKyAgICAgIHdoZW4gdGhlIHdpZGdldCBpcyBpbiB0aGUgYWN0aXZlIG9yIHByZXNzZWQgc3RhdGVzLgorCisgICAuLiBtZXRob2Q6OiBsb29rdXAoc3R5bGUsIG9wdGlvblssIHN0YXRlPU5vbmVbLCBkZWZhdWx0PU5vbmVdXSkKKworICAgICAgUmV0dXJucyB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciAqb3B0aW9uKiBpbiAqc3R5bGUqLgorCisgICAgICBJZiAqc3RhdGUqIGlzIHNwZWNpZmllZCwgaXQgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzZXF1ZW5jZSBvZiBvbmUgb3IgbW9yZQorICAgICAgc3RhdGVzLiBJZiB0aGUgKmRlZmF1bHQqIGFyZ3VtZW50IGlzIHNldCwgaXQgaXMgdXNlZCBhcyBhIGZhbGxiYWNrIHZhbHVlCisgICAgICBpbiBjYXNlIG5vIHNwZWNpZmljYXRpb24gZm9yIG9wdGlvbiBpcyBmb3VuZC4KKworICAgICAgVG8gY2hlY2sgd2hhdCBmb250IGEgQnV0dG9uIHVzZXMgYnkgZGVmYXVsdCwgZG86OgorCisgICAgICAgICBpbXBvcnQgdHRrCisKKyAgICAgICAgIHByaW50IHR0ay5TdHlsZSgpLmxvb2t1cCgiVEJ1dHRvbiIsICJmb250IikKKworCisgICAuLiBtZXRob2Q6OiBsYXlvdXQoc3R5bGVbLCBsYXlvdXRzcGVjPU5vbmVdKQorCisgICAgICBEZWZpbmUgdGhlIHdpZGdldCBsYXlvdXQgZm9yIGdpdmVuICpzdHlsZSouIElmICpsYXlvdXRzcGVjKiBpcyBvbWl0dGVkLAorICAgICAgcmV0dXJuIHRoZSBsYXlvdXQgc3BlY2lmaWNhdGlvbiBmb3IgZ2l2ZW4gc3R5bGUuCisKKyAgICAgICpsYXlvdXRzcGVjKiwgaWYgc3BlY2lmaWVkLCBpcyBleHBlY3RlZCB0byBiZSBhIGxpc3Qgb3Igc29tZSBvdGhlcgorICAgICAgc2VxdWVuY2UgdHlwZSAoZXhjbHVkaW5nIHN0cmluZ3MpLCB3aGVyZSBlYWNoIGl0ZW0gc2hvdWxkIGJlIGEgdHVwbGUgYW5kCisgICAgICB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgbGF5b3V0IG5hbWUgYW5kIHRoZSBzZWNvbmQgaXRlbSBzaG91bGQgaGF2ZSB0aGUKKyAgICAgIGZvcm1hdCBkZXNjcmliZWQgZGVzY3JpYmVkIGluIGBMYXlvdXRzYF8uCisKKyAgICAgIFRvIHVuZGVyc3RhbmQgdGhlIGZvcm1hdCwgc2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAoaXQgaXMgbm90CisgICAgICBpbnRlbmRlZCB0byBkbyBhbnl0aGluZyB1c2VmdWwpOjoKKworICAgICAgICAgaW1wb3J0IHR0aworICAgICAgICAgaW1wb3J0IFRraW50ZXIKKworICAgICAgICAgcm9vdCA9IFRraW50ZXIuVGsoKQorCisgICAgICAgICBzdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgICAgICBzdHlsZS5sYXlvdXQoIlRNZW51YnV0dG9uIiwgWworICAgICAgICAgICAgKCJNZW51YnV0dG9uLmJhY2tncm91bmQiLCBOb25lKSwKKyAgICAgICAgICAgICgiTWVudWJ1dHRvbi5idXR0b24iLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLmZvY3VzIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgICAgIFsoIk1lbnVidXR0b24ucGFkZGluZyIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5sYWJlbCIsIHsic2lkZSI6ICJsZWZ0IiwgImV4cGFuZCI6IDF9KV0KKyAgICAgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICAgICAgfSldCisgICAgICAgICAgICB9KSwKKyAgICAgICAgIF0pCisKKyAgICAgICAgIG1idG4gPSB0dGsuTWVudWJ1dHRvbih0ZXh0PSdUZXh0JykKKyAgICAgICAgIG1idG4ucGFjaygpCisgICAgICAgICByb290Lm1haW5sb29wKCkKKworCisgICAuLiBtZXRob2Q6OiBlbGVtZW50X2NyZWF0ZShlbGVtZW50bmFtZSwgZXR5cGUsICphcmdzLCAqKmt3KQorCisgICAgICBDcmVhdGUgYSBuZXcgZWxlbWVudCBpbiB0aGUgY3VycmVudCB0aGVtZSwgb2YgdGhlIGdpdmVuICpldHlwZSogd2hpY2ggaXMKKyAgICAgIGV4cGVjdGVkIHRvIGJlIGVpdGhlciAiaW1hZ2UiLCAiZnJvbSIgb3IgInZzYXBpIi4gVGhlIGxhdHRlciBpcyBvbmx5CisgICAgICBhdmFpbGFibGUgaW4gVGsgOC42YSBmb3IgV2luZG93cyBYUCBhbmQgVmlzdGEgYW5kIGlzIG5vdCBkZXNjcmliZWQgaGVyZS4KKworICAgICAgSWYgImltYWdlIiBpcyB1c2VkLCAqYXJncyogc2hvdWxkIGNvbnRhaW4gdGhlIGRlZmF1bHQgaW1hZ2UgbmFtZSBmb2xsb3dlZAorICAgICAgYnkgc3RhdGVzcGVjL3ZhbHVlIHBhaXJzICh0aGlzIGlzIHRoZSBpbWFnZXNwZWMpLCBhbmQgKmt3KiBtYXkgaGF2ZSB0aGUKKyAgICAgIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgICAgKiBib3JkZXI9cGFkZGluZworICAgICAgICAgIHBhZGRpbmcgaXMgYSBsaXN0IG9mIHVwIHRvIGZvdXIgaW50ZWdlcnMsIHNwZWNpZnlpbmcgdGhlIGxlZnQsIHRvcCwKKyAgICAgICAgICByaWdodCwgYW5kIGJvdHRvbSBib3JkZXJzLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAqIGhlaWdodD1oZWlnaHQKKyAgICAgICAgICBTcGVjaWZpZXMgYSBtaW5pbXVtIGhlaWdodCBmb3IgdGhlIGVsZW1lbnQuIElmIGxlc3MgdGhhbiB6ZXJvLCB0aGUKKyAgICAgICAgICBiYXNlIGltYWdlJ3MgaGVpZ2h0IGlzIHVzZWQgYXMgYSBkZWZhdWx0LgorCisgICAgICAgKiBwYWRkaW5nPXBhZGRpbmcKKyAgICAgICAgICBTcGVjaWZpZXMgdGhlIGVsZW1lbnQncyBpbnRlcmlvciBwYWRkaW5nLiBEZWZhdWx0cyB0byBib3JkZXIncyB2YWx1ZQorICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQuCisKKyAgICAgICAqIHN0aWNreT1zcGVjCisgICAgICAgICAgU3BlY2lmaWVzIGhvdyB0aGUgaW1hZ2UgaXMgcGxhY2VkIHdpdGhpbiB0aGUgZmluYWwgcGFyY2VsLiBzcGVjCisgICAgICAgICAgY29udGFpbnMgemVybyBvciBtb3JlIGNoYXJhY3RlcnMg4oCcbuKAnSwg4oCcc+KAnSwg4oCcd+KAnSwgb3Ig4oCcZeKAnS4KKworICAgICAgICogd2lkdGg9d2lkdGgKKyAgICAgICAgICBTcGVjaWZpZXMgYSBtaW5pbXVtIHdpZHRoIGZvciB0aGUgZWxlbWVudC4gSWYgbGVzcyB0aGFuIHplcm8sIHRoZQorICAgICAgICAgIGJhc2UgaW1hZ2UncyB3aWR0aCBpcyB1c2VkIGFzIGEgZGVmYXVsdC4KKworICAgICAgSWYgImZyb20iIGlzIHVzZWQgYXMgdGhlIHZhbHVlIG9mICpldHlwZSosCisgICAgICA6bWV0aDpgZWxlbWVudF9jcmVhdGVgIHdpbGwgY2xvbmUgYW4gZXhpc3RpbmcKKyAgICAgIGVsZW1lbnQuICphcmdzKiBpcyBleHBlY3RlZCB0byBjb250YWluIGEgdGhlbWVuYW1lLCBmcm9tIHdoaWNoCisgICAgICB0aGUgZWxlbWVudCB3aWxsIGJlIGNsb25lZCwgYW5kIG9wdGlvbmFsbHkgYW4gZWxlbWVudCB0byBjbG9uZSBmcm9tLgorICAgICAgSWYgdGhpcyBlbGVtZW50IHRvIGNsb25lIGZyb20gaXMgbm90IHNwZWNpZmllZCwgYW4gZW1wdHkgZWxlbWVudCB3aWxsCisgICAgICBiZSB1c2VkLiAqa3cqIGlzIGRpc2NhcmRlZC4KKworCisgICAuLiBtZXRob2Q6OiBlbGVtZW50X25hbWVzKCkKKworICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHRoZW1lLgorCisKKyAgIC4uIG1ldGhvZDo6IGVsZW1lbnRfb3B0aW9ucyhlbGVtZW50bmFtZSkKKworICAgICAgUmV0dXJucyB0aGUgbGlzdCBvZiAqZWxlbWVudG5hbWUqJ3Mgb3B0aW9ucy4KKworCisgICAuLiBtZXRob2Q6OiB0aGVtZV9jcmVhdGUodGhlbWVuYW1lWywgcGFyZW50PU5vbmVbLCBzZXR0aW5ncz1Ob25lXV0pCisKKyAgICAgIENyZWF0ZSBhIG5ldyB0aGVtZS4KKworICAgICAgSXQgaXMgYW4gZXJyb3IgaWYgKnRoZW1lbmFtZSogYWxyZWFkeSBleGlzdHMuIElmICpwYXJlbnQqIGlzIHNwZWNpZmllZCwKKyAgICAgIHRoZSBuZXcgdGhlbWUgd2lsbCBpbmhlcml0IHN0eWxlcywgZWxlbWVudHMgYW5kIGxheW91dHMgZnJvbSB0aGUgcGFyZW50CisgICAgICB0aGVtZS4gSWYgKnNldHRpbmdzKiBhcmUgcHJlc2VudCB0aGV5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lCisgICAgICBzeW50YXggdXNlZCBmb3IgOm1ldGg6YHRoZW1lX3NldHRpbmdzYC4KKworCisgICAuLiBtZXRob2Q6OiB0aGVtZV9zZXR0aW5ncyh0aGVtZW5hbWUsIHNldHRpbmdzKQorCisgICAgICBUZW1wb3JhcmlseSBzZXRzIHRoZSBjdXJyZW50IHRoZW1lIHRvICp0aGVtZW5hbWUqLCBhcHBseSBzcGVjaWZpZWQKKyAgICAgICpzZXR0aW5ncyogYW5kIHRoZW4gcmVzdG9yZSB0aGUgcHJldmlvdXMgdGhlbWUuCisKKyAgICAgIEVhY2gga2V5IGluICpzZXR0aW5ncyogaXMgYSBzdHlsZSBhbmQgZWFjaCB2YWx1ZSBtYXkgY29udGFpbiB0aGUga2V5cworICAgICAgJ2NvbmZpZ3VyZScsICdtYXAnLCAnbGF5b3V0JyBhbmQgJ2VsZW1lbnQgY3JlYXRlJyBhbmQgdGhleSBhcmUgZXhwZWN0ZWQKKyAgICAgIHRvIGhhdmUgdGhlIHNhbWUgZm9ybWF0IGFzIHNwZWNpZmllZCBieSB0aGUgbWV0aG9kcworICAgICAgOm1ldGg6YFN0eWxlLmNvbmZpZ3VyZWAsIDptZXRoOmBTdHlsZS5tYXBgLCA6bWV0aDpgU3R5bGUubGF5b3V0YCBhbmQKKyAgICAgIDptZXRoOmBTdHlsZS5lbGVtZW50X2NyZWF0ZWAgcmVzcGVjdGl2ZWx5LgorCisgICAgICBBcyBhbiBleGFtcGxlLCBsZXQncyBjaGFuZ2UgdGhlIENvbWJvYm94IGZvciB0aGUgZGVmYXVsdCB0aGVtZSBhIGJpdDo6CisKKyAgICAgICAgIGltcG9ydCB0dGsKKyAgICAgICAgIGltcG9ydCBUa2ludGVyCisKKyAgICAgICAgIHJvb3QgPSBUa2ludGVyLlRrKCkKKworICAgICAgICAgc3R5bGUgPSB0dGsuU3R5bGUoKQorICAgICAgICAgc3R5bGUudGhlbWVfc2V0dGluZ3MoImRlZmF1bHQiLCB7CisgICAgICAgICAgICAiVENvbWJvYm94IjogeworICAgICAgICAgICAgICAgICJjb25maWd1cmUiOiB7InBhZGRpbmciOiA1fSwKKyAgICAgICAgICAgICAgICAibWFwIjogeworICAgICAgICAgICAgICAgICAgICAiYmFja2dyb3VuZCI6IFsoImFjdGl2ZSIsICJncmVlbjIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIhZGlzYWJsZWQiLCAiZ3JlZW40IildLAorICAgICAgICAgICAgICAgICAgICAiZmllbGRiYWNrZ3JvdW5kIjogWygiIWRpc2FibGVkIiwgImdyZWVuMyIpXSwKKyAgICAgICAgICAgICAgICAgICAgImZvcmVncm91bmQiOiBbKCJmb2N1cyIsICJPbGl2ZURyYWIxIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiIWRpc2FibGVkIiwgIk9saXZlRHJhYjIiKV0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICB9KQorCisgICAgICAgICBjb21ibyA9IHR0ay5Db21ib2JveCgpLnBhY2soKQorCisgICAgICAgICByb290Lm1haW5sb29wKCkKKworCisgICAuLiBtZXRob2Q6OiB0aGVtZV9uYW1lcygpCisKKyAgICAgIFJldHVybnMgYSBsaXN0IG9mIGFsbCBrbm93biB0aGVtZXMuCisKKworICAgLi4gbWV0aG9kOjogdGhlbWVfdXNlKFt0aGVtZW5hbWVdKQorCisgICAgICBJZiAqdGhlbWVuYW1lKiBpcyBub3QgZ2l2ZW4sIHJldHVybnMgdGhlIHRoZW1lIGluIHVzZS4gIE90aGVyd2lzZSwgc2V0cworICAgICAgdGhlIGN1cnJlbnQgdGhlbWUgdG8gKnRoZW1lbmFtZSosIHJlZnJlc2hlcyBhbGwgd2lkZ2V0cyBhbmQgZW1pdHMgYQorICAgICAgPDxUaGVtZUNoYW5nZWQ+PiBldmVudC4KKworCitMYXlvdXRzCiteXl5eXl5eCisKK0EgbGF5b3V0IGNhbiBiZSBqdXN0IE5vbmUsIGlmIGl0IHRha2VzIG5vIG9wdGlvbnMsIG9yIGEgZGljdCBvZgorb3B0aW9ucyBzcGVjaWZ5aW5nIGhvdyB0byBhcnJhbmdlIHRoZSBlbGVtZW50LiBUaGUgbGF5b3V0IG1lY2hhbmlzbQordXNlcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUgcGFjayBnZW9tZXRyeSBtYW5hZ2VyOiBnaXZlbiBhbgoraW5pdGlhbCBjYXZpdHksIGVhY2ggZWxlbWVudCBpcyBhbGxvY2F0ZWQgYSBwYXJjZWwuIFZhbGlkCitvcHRpb25zL3ZhbHVlcyBhcmU6CisKKyAqIHNpZGU6IHdoaWNoc2lkZQorICAgIFNwZWNpZmllcyB3aGljaCBzaWRlIG9mIHRoZSBjYXZpdHkgdG8gcGxhY2UgdGhlIGVsZW1lbnQ7IG9uZSBvZgorICAgIHRvcCwgcmlnaHQsIGJvdHRvbSBvciBsZWZ0LiBJZiBvbWl0dGVkLCB0aGUgZWxlbWVudCBvY2N1cGllcyB0aGUKKyAgICBlbnRpcmUgY2F2aXR5LgorCisgKiBzdGlja3k6IG5zd2UKKyAgICBTcGVjaWZpZXMgd2hlcmUgdGhlIGVsZW1lbnQgaXMgcGxhY2VkIGluc2lkZSBpdHMgYWxsb2NhdGVkIHBhcmNlbC4KKworICogdW5pdDogMCBvciAxCisgICAgSWYgc2V0IHRvIDEsIGNhdXNlcyB0aGUgZWxlbWVudCBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyB0byBiZSB0cmVhdGVkIGFzCisgICAgYSBzaW5nbGUgZWxlbWVudCBmb3IgdGhlIHB1cnBvc2VzIG9mIDptZXRoOmBXaWRnZXQuaWRlbnRpZnlgIGV0IGFsLiBJdCdzCisgICAgdXNlZCBmb3IgdGhpbmdzIGxpa2Ugc2Nyb2xsYmFyIHRodW1icyB3aXRoIGdyaXBzLgorCisgKiBjaGlsZHJlbjogW3N1YmxheW91dC4uLiBdCisgICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBlbGVtZW50cyB0byBwbGFjZSBpbnNpZGUgdGhlIGVsZW1lbnQuIEVhY2gKKyAgICBlbGVtZW50IGlzIGEgdHVwbGUgKG9yIG90aGVyIHNlcXVlbmNlIHR5cGUpIHdoZXJlIHRoZSBmaXJzdCBpdGVtIGlzCisgICAgdGhlIGxheW91dCBuYW1lLCBhbmQgdGhlIG90aGVyIGlzIGEgYExheW91dGBfLgorCisuLiBfTGF5b3V0OiBgTGF5b3V0c2BfCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dXJ0bGUucnN0IGIvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAppbmRleCAyNDllYjIzLi4wZjM2OGFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKQEAgLTcwOCw3ICs3MDgsMTAgQEAKICAgICAgID4+PiB0dXJ0bGUubGVmdCg5MCkKICAgICAgID4+PiB0dXJ0bGUuaGVhZGluZygpCiAgICAgICA5MC4wCi0gICAgICA+Pj4gdHVydGxlLmRlZ3JlZXMoNDAwLjApICAjIGFuZ2xlIG1lYXN1cmVtZW50IGluIGdvbgorCisgICAgICBDaGFuZ2UgYW5nbGUgbWVhc3VyZW1lbnQgdW5pdCB0byBncmFkIChhbHNvIGtub3duIGFzIGdvbiwKKyAgICAgIGdyYWRlLCBvciBncmFkaWFuIGFuZCBlcXVhbHMgMS8xMDAtdGggb2YgdGhlIHJpZ2h0IGFuZ2xlLikKKyAgICAgID4+PiB0dXJ0bGUuZGVncmVlcyg0MDAuMCkKICAgICAgID4+PiB0dXJ0bGUuaGVhZGluZygpCiAgICAgICAxMDAuMAogICAgICAgPj4+IHR1cnRsZS5kZWdyZWVzKDM2MCkKQEAgLTg3NSw3ICs4NzgsNyBAQAogICAgICAgID4+PiB0dXAgPSAoMC4yLCAwLjgsIDAuNTUpCiAgICAgICAgPj4+IHR1cnRsZS5wZW5jb2xvcih0dXApCiAgICAgICAgPj4+IHR1cnRsZS5wZW5jb2xvcigpCi0gICAgICAgKDAuMjAwMDAwMDAwMDAwMDAwMDEsIDAuODAwMDAwMDAwMDAwMDAwMDQsIDAuNTQ5MDE5NjA3ODQzMTM3MykKKyAgICAgICAoMC4yLCAwLjgsIDAuNTQ5MDE5NjA3ODQzMTM3MykKICAgICAgICA+Pj4gY29sb3Jtb2RlKDI1NSkKICAgICAgICA+Pj4gdHVydGxlLnBlbmNvbG9yKCkKICAgICAgICAoNTEsIDIwNCwgMTQwKQpAQCAtMTQ1NSw2ICsxNDU4LDcgQEAKICAgIDpwYXJhbSBhcmdzOiBhIGNvbG9yIHN0cmluZyBvciB0aHJlZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLi5jb2xvcm1vZGUgb3IgYQogICAgICAgICAgICAgICAgIDMtdHVwbGUgb2Ygc3VjaCBudW1iZXJzCiAKKwogICAgU2V0IG9yIHJldHVybiBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBUdXJ0bGVTY3JlZW4uCiAKICAgIC4uIGRvY3Rlc3Q6OgpAQCAtMTgzNSw3ICsxODM5LDcgQEAKIC4uIGZ1bmN0aW9uOjogc2V0dXAod2lkdGg9X0NGR1sid2lkdGgiXSwgaGVpZ2h0PV9DRkdbImhlaWdodCJdLCBzdGFydHg9X0NGR1sibGVmdHJpZ2h0Il0sIHN0YXJ0eT1fQ0ZHWyJ0b3Bib3R0b20iXSkKIAogICAgU2V0IHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgbWFpbiB3aW5kb3cuICBEZWZhdWx0IHZhbHVlcyBvZiBhcmd1bWVudHMKLSAgIGFyZSBzdG9yZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZGljaW9uYXJ5IGFuZCBjYW4gYmUgY2hhbmdlZCB2aWEgYQorICAgYXJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IGFuZCBjYW4gYmUgY2hhbmdlZCB2aWEgYQogICAgOmZpbGU6YHR1cnRsZS5jZmdgIGZpbGUuCiAKICAgIDpwYXJhbSB3aWR0aDogaWYgYW4gaW50ZWdlciwgYSBzaXplIGluIHBpeGVscywgaWYgYSBmbG9hdCwgYSBmcmFjdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdCBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAppbmRleCA0NDBhMTM1Li5jNzY1ZDc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CkBAIC0xNiwxMiArMTYsMTIgQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSB3aGljaCBkZWZpbmVzCiBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgaW4gdGhpcyBkYXRhYmFzZSBpcwotYmFzZWQgb24gdGhlIDpmaWxlOmBVbmljb2RlRGF0YS50eHRgIGZpbGUgdmVyc2lvbiA1LjEuMCB3aGljaCBpcyBwdWJsaWNseQorYmFzZWQgb24gdGhlIDpmaWxlOmBVbmljb2RlRGF0YS50eHRgIGZpbGUgdmVyc2lvbiA1LjIuMCB3aGljaCBpcyBwdWJsaWNseQogYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLnVuaWNvZGUub3JnLy4KIAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgdGhlIFVuaWNvZGVEYXRhIEZpbGUKLUZvcm1hdCA1LjEuMCAoc2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzUuMS4wL3VjZC9VQ0QuaHRtbCkuICBJdCBkZWZpbmVzCi10aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKK0Zvcm1hdCA1LjIuMCAoc2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjQ0L3RyNDQtNC5odG1sKS4KK0l0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAogLi4gZnVuY3Rpb246OiBsb29rdXAobmFtZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAppbmRleCA2ODlmMWYyLi4zMzNiMzk5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmB1bml0dGVzdGAgLS0tIFVuaXQgdGVzdGluZyBmcmFtZXdvcmsKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00OSwyNiArNDgsMjcgQEAKIDpjbGFzczpgVGVzdENhc2VgIGFuZCA6Y2xhc3M6YEZ1bmN0aW9uVGVzdENhc2VgIGNsYXNzZXM7IHRoZSBmb3JtZXIgc2hvdWxkIGJlCiB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IHRlc3RzLCBhbmQgdGhlIGxhdHRlciBjYW4gYmUgdXNlZCB3aGVuIGludGVncmF0aW5nCiBleGlzdGluZyB0ZXN0IGNvZGUgd2l0aCBhIDptb2Q6YHVuaXR0ZXN0YFwgLWRyaXZlbiBmcmFtZXdvcmsuIFdoZW4gYnVpbGRpbmcgdGVzdAotZml4dHVyZXMgdXNpbmcgOmNsYXNzOmBUZXN0Q2FzZWAsIHRoZSA6bWV0aDpgc2V0VXBgIGFuZCA6bWV0aDpgdGVhckRvd25gIG1ldGhvZHMKLWNhbiBiZSBvdmVycmlkZGVuIHRvIHByb3ZpZGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgZm9yIHRoZSBmaXh0dXJlLiAgV2l0aAotOmNsYXNzOmBGdW5jdGlvblRlc3RDYXNlYCwgZXhpc3RpbmcgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yCi1mb3IgdGhlc2UgcHVycG9zZXMuICBXaGVuIHRoZSB0ZXN0IGlzIHJ1biwgdGhlIGZpeHR1cmUgaW5pdGlhbGl6YXRpb24gaXMgcnVuCi1maXJzdDsgaWYgaXQgc3VjY2VlZHMsIHRoZSBjbGVhbnVwIG1ldGhvZCBpcyBydW4gYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4KLWV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0LiAgRWFjaCBpbnN0YW5jZSBvZiB0aGUKLTpjbGFzczpgVGVzdENhc2VgIHdpbGwgb25seSBiZSB1c2VkIHRvIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZCwgc28gYSBuZXcKLWZpeHR1cmUgaXMgY3JlYXRlZCBmb3IgZWFjaCB0ZXN0LgorZml4dHVyZXMgdXNpbmcgOmNsYXNzOmBUZXN0Q2FzZWAsIHRoZSA6bWV0aDpgflRlc3RDYXNlLnNldFVwYCBhbmQKKzptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIG1ldGhvZHMgY2FuIGJlIG92ZXJyaWRkZW4gdG8gcHJvdmlkZSBpbml0aWFsaXphdGlvbgorYW5kIGNsZWFudXAgZm9yIHRoZSBmaXh0dXJlLiAgV2l0aCA6Y2xhc3M6YEZ1bmN0aW9uVGVzdENhc2VgLCBleGlzdGluZyBmdW5jdGlvbnMKK2NhbiBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGVzZSBwdXJwb3Nlcy4gIFdoZW4gdGhlIHRlc3QgaXMgcnVuLCB0aGUKK2ZpeHR1cmUgaW5pdGlhbGl6YXRpb24gaXMgcnVuIGZpcnN0OyBpZiBpdCBzdWNjZWVkcywgdGhlIGNsZWFudXAgbWV0aG9kIGlzIHJ1bgorYWZ0ZXIgdGhlIHRlc3QgaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QuICBFYWNoCitpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBUZXN0Q2FzZWAgd2lsbCBvbmx5IGJlIHVzZWQgdG8gcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kLAorc28gYSBuZXcgZml4dHVyZSBpcyBjcmVhdGVkIGZvciBlYWNoIHRlc3QuCiAKIFRlc3Qgc3VpdGVzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgOmNsYXNzOmBUZXN0U3VpdGVgIGNsYXNzLiAgVGhpcyBjbGFzcyBhbGxvd3MKIGluZGl2aWR1YWwgdGVzdHMgYW5kIHRlc3Qgc3VpdGVzIHRvIGJlIGFnZ3JlZ2F0ZWQ7IHdoZW4gdGhlIHN1aXRlIGlzIGV4ZWN1dGVkLAogYWxsIHRlc3RzIGFkZGVkIGRpcmVjdGx5IHRvIHRoZSBzdWl0ZSBhbmQgaW4gImNoaWxkIiB0ZXN0IHN1aXRlcyBhcmUgcnVuLgogCi1BIHRlc3QgcnVubmVyIGlzIGFuIG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgc2luZ2xlIG1ldGhvZCwgOm1ldGg6YHJ1bmAsIHdoaWNoCi1hY2NlcHRzIGEgOmNsYXNzOmBUZXN0Q2FzZWAgb3IgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdCBhcyBhIHBhcmFtZXRlciwgYW5kCi1yZXR1cm5zIGEgcmVzdWx0IG9iamVjdC4gIFRoZSBjbGFzcyA6Y2xhc3M6YFRlc3RSZXN1bHRgIGlzIHByb3ZpZGVkIGZvciB1c2UgYXMKLXRoZSByZXN1bHQgb2JqZWN0LiA6bW9kOmB1bml0dGVzdGAgcHJvdmlkZXMgdGhlIDpjbGFzczpgVGV4dFRlc3RSdW5uZXJgIGFzIGFuCi1leGFtcGxlIHRlc3QgcnVubmVyIHdoaWNoIHJlcG9ydHMgdGVzdCByZXN1bHRzIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gYnkKLWRlZmF1bHQuICBBbHRlcm5hdGUgcnVubmVycyBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIG90aGVyIGVudmlyb25tZW50cyAoc3VjaCBhcwotZ3JhcGhpY2FsIGVudmlyb25tZW50cykgd2l0aG91dCBhbnkgbmVlZCB0byBkZXJpdmUgZnJvbSBhIHNwZWNpZmljIGNsYXNzLgorQSB0ZXN0IHJ1bm5lciBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhIHNpbmdsZSBtZXRob2QsCis6bWV0aDpgflRlc3RSdW5uZXIucnVuYCwgd2hpY2ggYWNjZXB0cyBhIDpjbGFzczpgVGVzdENhc2VgIG9yIDpjbGFzczpgVGVzdFN1aXRlYAorb2JqZWN0IGFzIGEgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIHJlc3VsdCBvYmplY3QuICBUaGUgY2xhc3MKKzpjbGFzczpgVGVzdFJlc3VsdGAgaXMgcHJvdmlkZWQgZm9yIHVzZSBhcyB0aGUgcmVzdWx0IG9iamVjdC4gOm1vZDpgdW5pdHRlc3RgCitwcm92aWRlcyB0aGUgOmNsYXNzOmBUZXh0VGVzdFJ1bm5lcmAgYXMgYW4gZXhhbXBsZSB0ZXN0IHJ1bm5lciB3aGljaCByZXBvcnRzCit0ZXN0IHJlc3VsdHMgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieSBkZWZhdWx0LiAgQWx0ZXJuYXRlIHJ1bm5lcnMgY2FuIGJlCitpbXBsZW1lbnRlZCBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIChzdWNoIGFzIGdyYXBoaWNhbCBlbnZpcm9ubWVudHMpIHdpdGhvdXQgYW55CituZWVkIHRvIGRlcml2ZSBmcm9tIGEgc3BlY2lmaWMgY2xhc3MuCiAKIAogLi4gc2VlYWxzbzo6CkBAIC03NiwxNiArNzYsMjcgQEAKICAgIE1vZHVsZSA6bW9kOmBkb2N0ZXN0YAogICAgICAgQW5vdGhlciB0ZXN0LXN1cHBvcnQgbW9kdWxlIHdpdGggYSB2ZXJ5IGRpZmZlcmVudCBmbGF2b3IuCiAKKyAgIGB1bml0dGVzdDI6IEEgYmFja3BvcnQgb2YgbmV3IHVuaXR0ZXN0IGZlYXR1cmVzIGZvciBQeXRob24gMi40LTIuNiA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL3VuaXR0ZXN0Mj5gXworICAgICAgTWFueSBuZXcgZmVhdHVyZXMgd2VyZSBhZGRlZCB0byB1bml0dGVzdCBpbiBQeXRob24gMi43LCBpbmNsdWRpbmcgdGVzdAorICAgICAgZGlzY292ZXJ5LiB1bml0dGVzdDIgYWxsb3dzIHlvdSB0byB1c2UgdGhlc2UgZmVhdHVyZXMgd2l0aCBlYXJsaWVyCisgICAgICB2ZXJzaW9ucyBvZiBQeXRob24uCisKICAgIGBTaW1wbGUgU21hbGx0YWxrIFRlc3Rpbmc6IFdpdGggUGF0dGVybnMgPGh0dHA6Ly93d3cuWFByb2dyYW1taW5nLmNvbS90ZXN0ZnJhbS5odG0+YF8KLSAgICAgIEtlbnQgQmVjaydzIG9yaWdpbmFsIHBhcGVyIG9uIHRlc3RpbmcgZnJhbWV3b3JrcyB1c2luZyB0aGUgcGF0dGVybiBzaGFyZWQgYnkKLSAgICAgIDptb2Q6YHVuaXR0ZXN0YC4KKyAgICAgIEtlbnQgQmVjaydzIG9yaWdpbmFsIHBhcGVyIG9uIHRlc3RpbmcgZnJhbWV3b3JrcyB1c2luZyB0aGUgcGF0dGVybiBzaGFyZWQKKyAgICAgIGJ5IDptb2Q6YHVuaXR0ZXN0YC4KIAogICAgYE5vc2UgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXRob24tbm9zZS8+YF8gYW5kIGBweS50ZXN0IDxodHRwOi8vcHl0ZXN0Lm9yZz5gXwotICAgICAgVGhpcmQtcGFydHkgdW5pdHRlc3QgZnJhbWV3b3JrcyB3aXRoIGEgbGlnaHRlci13ZWlnaHQgc3ludGF4Ci0gICAgICBmb3Igd3JpdGluZyB0ZXN0cy4gIEZvciBleGFtcGxlLCBgYGFzc2VydCBmdW5jKDEwKSA9PSA0MmBgLgorICAgICAgVGhpcmQtcGFydHkgdW5pdHRlc3QgZnJhbWV3b3JrcyB3aXRoIGEgbGlnaHRlci13ZWlnaHQgc3ludGF4IGZvciB3cml0aW5nCisgICAgICB0ZXN0cy4gIEZvciBleGFtcGxlLCBgYGFzc2VydCBmdW5jKDEwKSA9PSA0MmBgLgogCi0gICBgcHl0aG9uLW1vY2sgPGh0dHA6Ly9weXRob24tbW9jay5zb3VyY2Vmb3JnZS5uZXQvPmBfIGFuZCBgbWluaW1vY2sgPGh0dHA6Ly9ibG9nLmlhbmJpY2tpbmcub3JnL21pbmltb2NrLmh0bWw+YF8KLSAgICAgIFRvb2xzIGZvciBjcmVhdGluZyBtb2NrIHRlc3Qgb2JqZWN0cyAob2JqZWN0cyBzaW11bGF0aW5nIGV4dGVybmFsIHJlc291cmNlcykuCisgICBgVGhlIFB5dGhvbiBUZXN0aW5nIFRvb2xzIFRheG9ub215IDxodHRwOi8vcHljaGVlc2VjYWtlLm9yZy93aWtpL1B5dGhvblRlc3RpbmdUb29sc1RheG9ub215PmBfCisgICAgICBBbiBleHRlbnNpdmUgbGlzdCBvZiBQeXRob24gdGVzdGluZyB0b29scyBpbmNsdWRpbmcgZnVuY3Rpb25hbCB0ZXN0aW5nCisgICAgICBmcmFtZXdvcmtzIGFuZCBtb2NrIG9iamVjdCBsaWJyYXJpZXMuCisKKyAgIGBUZXN0aW5nIGluIFB5dGhvbiBNYWlsaW5nIExpc3QgPGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcvbGlzdGluZm8vdGVzdGluZy1pbi1weXRob24+YF8KKyAgICAgIEEgc3BlY2lhbC1pbnRlcmVzdC1ncm91cCBmb3IgZGlzY3Vzc2lvbiBvZiB0ZXN0aW5nLCBhbmQgdGVzdGluZyB0b29scywKKyAgICAgIGluIFB5dGhvbi4KKwogCiAuLiBfdW5pdHRlc3QtbWluaW1hbC1leGFtcGxlOgogCkBAIC0xMTIsMzYgKzEyMyw0MSBAQAogICAgICAgICAgICBzZWxmLnNlcS5zb3J0KCkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcSwgcmFuZ2UoMTApKQogCisgICAgICAgICAgICMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgYW4gaW1tdXRhYmxlIHNlcXVlbmNlCisgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZG9tLnNodWZmbGUsICgxLDIsMykpCisKICAgICAgICBkZWYgdGVzdF9jaG9pY2Uoc2VsZik6CiAgICAgICAgICAgIGVsZW1lbnQgPSByYW5kb20uY2hvaWNlKHNlbGYuc2VxKQogICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbWVudCBpbiBzZWxmLnNlcSkKIAogICAgICAgIGRlZiB0ZXN0X3NhbXBsZShzZWxmKToKLSAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLnNhbXBsZSwgc2VsZi5zZXEsIDIwKQorICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgcmFuZG9tLnNhbXBsZShzZWxmLnNlcSwgMjApCiAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHJhbmRvbS5zYW1wbGUoc2VsZi5zZXEsIDUpOgogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW1lbnQgaW4gc2VsZi5zZXEpCiAKICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgdW5pdHRlc3QubWFpbigpCiAKLUEgdGVzdGNhc2UgaXMgY3JlYXRlZCBieSBzdWJjbGFzc2luZyA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYC4gVGhlIHRocmVlCitBIHRlc3RjYXNlIGlzIGNyZWF0ZWQgYnkgc3ViY2xhc3NpbmcgOmNsYXNzOmB1bml0dGVzdC5UZXN0Q2FzZWAuICBUaGUgdGhyZWUKIGluZGl2aWR1YWwgdGVzdHMgYXJlIGRlZmluZWQgd2l0aCBtZXRob2RzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggdGhlIGxldHRlcnMKIGBgdGVzdGBgLiAgVGhpcyBuYW1pbmcgY29udmVudGlvbiBpbmZvcm1zIHRoZSB0ZXN0IHJ1bm5lciBhYm91dCB3aGljaCBtZXRob2RzCiByZXByZXNlbnQgdGVzdHMuCiAKLVRoZSBjcnV4IG9mIGVhY2ggdGVzdCBpcyBhIGNhbGwgdG8gOm1ldGg6YGFzc2VydEVxdWFsYCB0byBjaGVjayBmb3IgYW4gZXhwZWN0ZWQKLXJlc3VsdDsgOm1ldGg6YGFzc2VydF9gIHRvIHZlcmlmeSBhIGNvbmRpdGlvbjsgb3IgOm1ldGg6YGFzc2VydFJhaXNlc2AgdG8gdmVyaWZ5Ci10aGF0IGFuIGV4cGVjdGVkIGV4Y2VwdGlvbiBnZXRzIHJhaXNlZC4gIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKLTprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudCBzbyB0aGUgdGVzdCBydW5uZXIgY2FuIGFjY3VtdWxhdGUgYWxsIHRlc3QgcmVzdWx0cwotYW5kIHByb2R1Y2UgYSByZXBvcnQuCitUaGUgY3J1eCBvZiBlYWNoIHRlc3QgaXMgYSBjYWxsIHRvIDptZXRoOmB+VGVzdENhc2UuYXNzZXJ0RXF1YWxgIHRvIGNoZWNrIGZvciBhbgorZXhwZWN0ZWQgcmVzdWx0OyA6bWV0aDpgflRlc3RDYXNlLmFzc2VydFRydWVgIHRvIHZlcmlmeSBhIGNvbmRpdGlvbjsgb3IKKzptZXRoOmB+VGVzdENhc2UuYXNzZXJ0UmFpc2VzYCB0byB2ZXJpZnkgdGhhdCBhbiBleHBlY3RlZCBleGNlcHRpb24gZ2V0cyByYWlzZWQuCitUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGluc3RlYWQgb2YgdGhlIDprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudCBzbyB0aGUgdGVzdAorcnVubmVyIGNhbiBhY2N1bXVsYXRlIGFsbCB0ZXN0IHJlc3VsdHMgYW5kIHByb2R1Y2UgYSByZXBvcnQuCiAKLVdoZW4gYSA6bWV0aDpgc2V0VXBgIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLXByaW9yIHRvIGVhY2ggdGVzdC4gIExpa2V3aXNlLCBpZiBhIDptZXRoOmB0ZWFyRG93bmAgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0Ci1ydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiAgSW4gdGhlIGV4YW1wbGUsIDptZXRoOmBzZXRVcGAKLXdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuCitXaGVuIGEgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0CittZXRob2QgcHJpb3IgdG8gZWFjaCB0ZXN0LiAgTGlrZXdpc2UsIGlmIGEgOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bmAgbWV0aG9kIGlzCitkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiAgSW4gdGhlCitleGFtcGxlLCA6bWV0aDpgflRlc3RDYXNlLnNldFVwYCB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaAordGVzdC4KIAogVGhlIGZpbmFsIGJsb2NrIHNob3dzIGEgc2ltcGxlIHdheSB0byBydW4gdGhlIHRlc3RzLiA6ZnVuYzpgdW5pdHRlc3QubWFpbmAKLXByb3ZpZGVzIGEgY29tbWFuZCBsaW5lIGludGVyZmFjZSB0byB0aGUgdGVzdCBzY3JpcHQuICBXaGVuIHJ1biBmcm9tIHRoZSBjb21tYW5kCitwcm92aWRlcyBhIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgdG8gdGhlIHRlc3Qgc2NyaXB0LiAgV2hlbiBydW4gZnJvbSB0aGUgY29tbWFuZAogbGluZSwgdGhlIGFib3ZlIHNjcmlwdCBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBsb29rcyBsaWtlIHRoaXM6OgogCiAgICAuLi4KQEAgLTE3NCw2ICsxOTAsMTM1IEBACiBkb2N1bWVudGF0aW9uIGV4cGxvcmVzIHRoZSBmdWxsIGZlYXR1cmUgc2V0IGZyb20gZmlyc3QgcHJpbmNpcGxlcy4KIAogCisuLiBfdW5pdHRlc3QtY29tbWFuZC1saW5lLWludGVyZmFjZToKKworQ29tbWFuZC1MaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdW5pdHRlc3QgbW9kdWxlIGNhbiBiZSB1c2VkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0byBydW4gdGVzdHMgZnJvbQorbW9kdWxlcywgY2xhc3NlcyBvciBldmVuIGluZGl2aWR1YWwgdGVzdCBtZXRob2RzOjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3RfbW9kdWxlMSB0ZXN0X21vZHVsZTIKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0X21vZHVsZS5UZXN0Q2xhc3MKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0X21vZHVsZS5UZXN0Q2xhc3MudGVzdF9tZXRob2QKKworWW91IGNhbiBwYXNzIGluIGEgbGlzdCB3aXRoIGFueSBjb21iaW5hdGlvbiBvZiBtb2R1bGUgbmFtZXMsIGFuZCBmdWxseQorcXVhbGlmaWVkIGNsYXNzIG9yIG1ldGhvZCBuYW1lcy4KKworWW91IGNhbiBydW4gdGVzdHMgd2l0aCBtb3JlIGRldGFpbCAoaGlnaGVyIHZlcmJvc2l0eSkgYnkgcGFzc2luZyBpbiB0aGUgLXYgZmxhZzo6CisKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCAtdiB0ZXN0X21vZHVsZQorCitGb3IgYSBsaXN0IG9mIGFsbCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnM6OgorCisgICBweXRob24gLW0gdW5pdHRlc3QgLWgKKworLi4gIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBJbiBlYXJsaWVyIHZlcnNpb25zIGl0IHdhcyBvbmx5IHBvc3NpYmxlIHRvIHJ1biBpbmRpdmlkdWFsIHRlc3QgbWV0aG9kcyBhbmQKKyAgIG5vdCBtb2R1bGVzIG9yIGNsYXNzZXMuCisKKworQ29tbWFuZC1saW5lIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzpwcm9ncmFtOmB1bml0dGVzdGAgc3VwcG9ydHMgdGhlc2UgY29tbWFuZC1saW5lIG9wdGlvbnM6CisKKy4uIHByb2dyYW06OiB1bml0dGVzdAorCisuLiBjbWRvcHRpb246OiAtYiwgLS1idWZmZXIKKworICAgVGhlIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBhcmUgYnVmZmVyZWQgZHVyaW5nIHRoZSB0ZXN0CisgICBydW4uIE91dHB1dCBkdXJpbmcgYSBwYXNzaW5nIHRlc3QgaXMgZGlzY2FyZGVkLiBPdXRwdXQgaXMgZWNob2VkIG5vcm1hbGx5CisgICBvbiB0ZXN0IGZhaWwgb3IgZXJyb3IgYW5kIGlzIGFkZGVkIHRvIHRoZSBmYWlsdXJlIG1lc3NhZ2VzLgorCisuLiBjbWRvcHRpb246OiAtYywgLS1jYXRjaAorCisgICBDb250cm9sLUMgZHVyaW5nIHRoZSB0ZXN0IHJ1biB3YWl0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCB0byBlbmQgYW5kIHRoZW4KKyAgIHJlcG9ydHMgYWxsIHRoZSByZXN1bHRzIHNvIGZhci4gQSBzZWNvbmQgY29udHJvbC1DIHJhaXNlcyB0aGUgbm9ybWFsCisgICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLgorCisgICBTZWUgYFNpZ25hbCBIYW5kbGluZ2BfIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKy4uIGNtZG9wdGlvbjo6IC1mLCAtLWZhaWxmYXN0CisKKyAgIFN0b3AgdGhlIHRlc3QgcnVuIG9uIHRoZSBmaXJzdCBlcnJvciBvciBmYWlsdXJlLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKyAgIFRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBgYC1iYGAsIGBgLWNgYCBhbmQgYGAtZmBgIHdlcmUgYWRkZWQuCisKK1RoZSBjb21tYW5kIGxpbmUgY2FuIGFsc28gYmUgdXNlZCBmb3IgdGVzdCBkaXNjb3ZlcnksIGZvciBydW5uaW5nIGFsbCBvZiB0aGUKK3Rlc3RzIGluIGEgcHJvamVjdCBvciBqdXN0IGEgc3Vic2V0LgorCisKKy4uIF91bml0dGVzdC10ZXN0LWRpc2NvdmVyeToKKworVGVzdCBEaXNjb3ZlcnkKKy0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDIuNworCitVbml0dGVzdCBzdXBwb3J0cyBzaW1wbGUgdGVzdCBkaXNjb3ZlcnkuIEZvciBhIHByb2plY3QncyB0ZXN0cyB0byBiZQorY29tcGF0aWJsZSB3aXRoIHRlc3QgZGlzY292ZXJ5IHRoZXkgbXVzdCBhbGwgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwKK2RpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCAoaW4gb3RoZXIgd29yZHMsIHRoZXkgbXVzdCBhbGwgYmUgaW4gUHl0aG9uIHBhY2thZ2VzKS4KKworVGVzdCBkaXNjb3ZlcnkgaXMgaW1wbGVtZW50ZWQgaW4gOm1ldGg6YFRlc3RMb2FkZXIuZGlzY292ZXJgLCBidXQgY2FuIGFsc28gYmUKK3VzZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBUaGUgYmFzaWMgY29tbWFuZC1saW5lIHVzYWdlIGlzOjoKKworICAgY2QgcHJvamVjdF9kaXJlY3RvcnkKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlcgorCitUaGUgYGBkaXNjb3ZlcmBgIHN1Yi1jb21tYW5kIGhhcyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKy4uIHByb2dyYW06OiB1bml0dGVzdCBkaXNjb3ZlcgorCisuLiBjbWRvcHRpb246OiAtdiwgLS12ZXJib3NlCisKKyAgIFZlcmJvc2Ugb3V0cHV0CisKKy4uIGNtZG9wdGlvbjo6IC1zIGRpcmVjdG9yeQorCisgICBEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkKKworLi4gY21kb3B0aW9uOjogLXAgcGF0dGVybgorCisgICBQYXR0ZXJuIHRvIG1hdGNoIHRlc3QgZmlsZXMgKCd0ZXN0Ki5weScgZGVmYXVsdCkKKworLi4gY21kb3B0aW9uOjogLXQgZGlyZWN0b3J5CisKKyAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gc3RhcnQgZGlyZWN0b3J5KQorCitUaGUgOm9wdGlvbjpgLXNgLCA6b3B0aW9uOmAtcGAsIGFuZCA6b3B0aW9uOmAtdGAgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGluCithcyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiB0aGF0IG9yZGVyLiBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kIGxpbmVzCithcmUgZXF1aXZhbGVudDo6CisKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciAtcyBwcm9qZWN0X2RpcmVjdG9yeSAtcCAnKl90ZXN0LnB5JworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIHByb2plY3RfZGlyZWN0b3J5ICcqX3Rlc3QucHknCisKK0FzIHdlbGwgYXMgYmVpbmcgYSBwYXRoIGl0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBwYWNrYWdlIG5hbWUsIGZvciBleGFtcGxlCitgYG15cHJvamVjdC5zdWJwYWNrYWdlLnRlc3RgYCwgYXMgdGhlIHN0YXJ0IGRpcmVjdG9yeS4gVGhlIHBhY2thZ2UgbmFtZSB5b3UKK3N1cHBseSB3aWxsIHRoZW4gYmUgaW1wb3J0ZWQgYW5kIGl0cyBsb2NhdGlvbiBvbiB0aGUgZmlsZXN5c3RlbSB3aWxsIGJlIHVzZWQKK2FzIHRoZSBzdGFydCBkaXJlY3RvcnkuCisKKy4uIGNhdXRpb246OgorCisgICAgVGVzdCBkaXNjb3ZlcnkgbG9hZHMgdGVzdHMgYnkgaW1wb3J0aW5nIHRoZW0uIE9uY2UgdGVzdCBkaXNjb3ZlcnkgaGFzCisgICAgZm91bmQgYWxsIHRoZSB0ZXN0IGZpbGVzIGZyb20gdGhlIHN0YXJ0IGRpcmVjdG9yeSB5b3Ugc3BlY2lmeSBpdCB0dXJucyB0aGUKKyAgICBwYXRocyBpbnRvIHBhY2thZ2UgbmFtZXMgdG8gaW1wb3J0LiBGb3IgZXhhbXBsZSBgZm9vL2Jhci9iYXoucHlgIHdpbGwgYmUKKyAgICBpbXBvcnRlZCBhcyBgYGZvby5iYXIuYmF6YGAuCisKKyAgICBJZiB5b3UgaGF2ZSBhIHBhY2thZ2UgaW5zdGFsbGVkIGdsb2JhbGx5IGFuZCBhdHRlbXB0IHRlc3QgZGlzY292ZXJ5IG9uCisgICAgYSBkaWZmZXJlbnQgY29weSBvZiB0aGUgcGFja2FnZSB0aGVuIHRoZSBpbXBvcnQgKmNvdWxkKiBoYXBwZW4gZnJvbSB0aGUKKyAgICB3cm9uZyBwbGFjZS4gSWYgdGhpcyBoYXBwZW5zIHRlc3QgZGlzY292ZXJ5IHdpbGwgd2FybiB5b3UgYW5kIGV4aXQuCisKKyAgICBJZiB5b3Ugc3VwcGx5IHRoZSBzdGFydCBkaXJlY3RvcnkgYXMgYSBwYWNrYWdlIG5hbWUgcmF0aGVyIHRoYW4gYQorICAgIHBhdGggdG8gYSBkaXJlY3RvcnkgdGhlbiBkaXNjb3ZlciBhc3N1bWVzIHRoYXQgd2hpY2hldmVyIGxvY2F0aW9uIGl0CisgICAgaW1wb3J0cyBmcm9tIGlzIHRoZSBsb2NhdGlvbiB5b3UgaW50ZW5kZWQsIHNvIHlvdSB3aWxsIG5vdCBnZXQgdGhlCisgICAgd2FybmluZy4KKworVGVzdCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBjYW4gY3VzdG9taXplIHRlc3QgbG9hZGluZyBhbmQgZGlzY292ZXJ5IGJ5IHRocm91Z2gKK3RoZSBgbG9hZF90ZXN0cyBwcm90b2NvbGBfLgorCisKIC4uIF9vcmdhbml6aW5nLXRlc3RzOgogCiBPcmdhbml6aW5nIHRlc3QgY29kZQpAQCAtMTkzLDggKzMzOCw4IEBACiBjb250YWluZWQsIHN1Y2ggdGhhdCBpdCBjYW4gYmUgcnVuIGVpdGhlciBpbiBpc29sYXRpb24gb3IgaW4gYXJiaXRyYXJ5CiBjb21iaW5hdGlvbiB3aXRoIGFueSBudW1iZXIgb2Ygb3RoZXIgdGVzdCBjYXNlcy4KIAotVGhlIHNpbXBsZXN0IDpjbGFzczpgVGVzdENhc2VgIHN1YmNsYXNzIHdpbGwgc2ltcGx5IG92ZXJyaWRlIHRoZSA6bWV0aDpgcnVuVGVzdGAKLW1ldGhvZCBpbiBvcmRlciB0byBwZXJmb3JtIHNwZWNpZmljIHRlc3RpbmcgY29kZTo6CitUaGUgc2ltcGxlc3QgOmNsYXNzOmBUZXN0Q2FzZWAgc3ViY2xhc3Mgd2lsbCBzaW1wbHkgb3ZlcnJpZGUgdGhlCis6bWV0aDpgflRlc3RDYXNlLnJ1blRlc3RgIG1ldGhvZCBpbiBvcmRlciB0byBwZXJmb3JtIHNwZWNpZmljIHRlc3RpbmcgY29kZTo6CiAKICAgIGltcG9ydCB1bml0dGVzdAogCkBAIC0yMDMsMTQgKzM0OCwxMyBAQAogICAgICAgICAgICB3aWRnZXQgPSBXaWRnZXQoJ1RoZSB3aWRnZXQnKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpZGdldC5zaXplKCksICg1MCwgNTApLCAnaW5jb3JyZWN0IGRlZmF1bHQgc2l6ZScpCiAKLU5vdGUgdGhhdCBpbiBvcmRlciB0byB0ZXN0IHNvbWV0aGluZywgd2UgdXNlIHRoZSBvbmUgb2YgdGhlIDptZXRoOmBhc3NlcnRcKmAgb3IKLTptZXRoOmBmYWlsXCpgIG1ldGhvZHMgcHJvdmlkZWQgYnkgdGhlIDpjbGFzczpgVGVzdENhc2VgIGJhc2UgY2xhc3MuICBJZiB0aGUKLXRlc3QgZmFpbHMsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCwgYW5kIDptb2Q6YHVuaXR0ZXN0YCB3aWxsIGlkZW50aWZ5IHRoZQotdGVzdCBjYXNlIGFzIGEgOmRmbjpgZmFpbHVyZWAuICBBbnkgb3RoZXIgZXhjZXB0aW9ucyB3aWxsIGJlIHRyZWF0ZWQgYXMKLTpkZm46YGVycm9yc2AuIFRoaXMgaGVscHMgeW91IGlkZW50aWZ5IHdoZXJlIHRoZSBwcm9ibGVtIGlzOiA6ZGZuOmBmYWlsdXJlc2AgYXJlCi1jYXVzZWQgYnkgaW5jb3JyZWN0IHJlc3VsdHMgLSBhIDUgd2hlcmUgeW91IGV4cGVjdGVkIGEgNi4gOmRmbjpgRXJyb3JzYCBhcmUKLWNhdXNlZCBieSBpbmNvcnJlY3QgY29kZSAtIGUuZy4sIGEgOmV4YzpgVHlwZUVycm9yYCBjYXVzZWQgYnkgYW4gaW5jb3JyZWN0Ci1mdW5jdGlvbiBjYWxsLgorTm90ZSB0aGF0IGluIG9yZGVyIHRvIHRlc3Qgc29tZXRoaW5nLCB3ZSB1c2UgdGhlIG9uZSBvZiB0aGUgOm1ldGg6YGFzc2VydFwqYAorbWV0aG9kcyBwcm92aWRlZCBieSB0aGUgOmNsYXNzOmBUZXN0Q2FzZWAgYmFzZSBjbGFzcy4gIElmIHRoZSB0ZXN0IGZhaWxzLCBhbgorZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLCBhbmQgOm1vZDpgdW5pdHRlc3RgIHdpbGwgaWRlbnRpZnkgdGhlIHRlc3QgY2FzZSBhcyBhCis6ZGZuOmBmYWlsdXJlYC4gIEFueSBvdGhlciBleGNlcHRpb25zIHdpbGwgYmUgdHJlYXRlZCBhcyA6ZGZuOmBlcnJvcnNgLiBUaGlzCitoZWxwcyB5b3UgaWRlbnRpZnkgd2hlcmUgdGhlIHByb2JsZW0gaXM6IDpkZm46YGZhaWx1cmVzYCBhcmUgY2F1c2VkIGJ5IGluY29ycmVjdAorcmVzdWx0cyAtIGEgNSB3aGVyZSB5b3UgZXhwZWN0ZWQgYSA2LiA6ZGZuOmBFcnJvcnNgIGFyZSBjYXVzZWQgYnkgaW5jb3JyZWN0Citjb2RlIC0gZS5nLiwgYSA6ZXhjOmBUeXBlRXJyb3JgIGNhdXNlZCBieSBhbiBpbmNvcnJlY3QgZnVuY3Rpb24gY2FsbC4KIAogVGhlIHdheSB0byBydW4gYSB0ZXN0IGNhc2Ugd2lsbCBiZSBkZXNjcmliZWQgbGF0ZXIuICBGb3Igbm93LCBub3RlIHRoYXQgdG8KIGNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiBzdWNoIGEgdGVzdCBjYXNlLCB3ZSBjYWxsIGl0cyBjb25zdHJ1Y3RvciB3aXRob3V0CkBAIC0yMjMsOCArMzY3LDggQEAKIHN1YmNsYXNzZXMgd291bGQgbWVhbiB1bnNpZ2h0bHkgZHVwbGljYXRpb24uCiAKIEx1Y2tpbHksIHdlIGNhbiBmYWN0b3Igb3V0IHN1Y2ggc2V0LXVwIGNvZGUgYnkgaW1wbGVtZW50aW5nIGEgbWV0aG9kIGNhbGxlZAotOm1ldGg6YHNldFVwYCwgd2hpY2ggdGhlIHRlc3RpbmcgZnJhbWV3b3JrIHdpbGwgYXV0b21hdGljYWxseSBjYWxsIGZvciB1cyB3aGVuCi13ZSBydW4gdGhlIHRlc3Q6OgorOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAsIHdoaWNoIHRoZSB0ZXN0aW5nIGZyYW1ld29yayB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCBmb3IKK3VzIHdoZW4gd2UgcnVuIHRoZSB0ZXN0OjoKIAogICAgaW1wb3J0IHVuaXR0ZXN0CiAKQEAgLTI0MywxMiArMzg3LDEyIEBACiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc2l6ZSgpLCAoMTAwLDE1MCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyb25nIHNpemUgYWZ0ZXIgcmVzaXplJykKIAotSWYgdGhlIDptZXRoOmBzZXRVcGAgbWV0aG9kIHJhaXNlcyBhbiBleGNlcHRpb24gd2hpbGUgdGhlIHRlc3QgaXMgcnVubmluZywgdGhlCi1mcmFtZXdvcmsgd2lsbCBjb25zaWRlciB0aGUgdGVzdCB0byBoYXZlIHN1ZmZlcmVkIGFuIGVycm9yLCBhbmQgdGhlCi06bWV0aDpgcnVuVGVzdGAgbWV0aG9kIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgorSWYgdGhlIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIG1ldGhvZCByYWlzZXMgYW4gZXhjZXB0aW9uIHdoaWxlIHRoZSB0ZXN0IGlzCitydW5uaW5nLCB0aGUgZnJhbWV3b3JrIHdpbGwgY29uc2lkZXIgdGhlIHRlc3QgdG8gaGF2ZSBzdWZmZXJlZCBhbiBlcnJvciwgYW5kIHRoZQorOm1ldGg6YH5UZXN0Q2FzZS5ydW5UZXN0YCBtZXRob2Qgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCiAKLVNpbWlsYXJseSwgd2UgY2FuIHByb3ZpZGUgYSA6bWV0aDpgdGVhckRvd25gIG1ldGhvZCB0aGF0IHRpZGllcyB1cCBhZnRlciB0aGUKLTptZXRoOmBydW5UZXN0YCBtZXRob2QgaGFzIGJlZW4gcnVuOjoKK1NpbWlsYXJseSwgd2UgY2FuIHByb3ZpZGUgYSA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duYCBtZXRob2QgdGhhdCB0aWRpZXMgdXAKK2FmdGVyIHRoZSA6bWV0aDpgflRlc3RDYXNlLnJ1blRlc3RgIG1ldGhvZCBoYXMgYmVlbiBydW46OgogCiAgICBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMjYwLDggKzQwNCw4IEBACiAgICAgICAgICAgIHNlbGYud2lkZ2V0LmRpc3Bvc2UoKQogICAgICAgICAgICBzZWxmLndpZGdldCA9IE5vbmUKIAotSWYgOm1ldGg6YHNldFVwYCBzdWNjZWVkZWQsIHRoZSA6bWV0aDpgdGVhckRvd25gIG1ldGhvZCB3aWxsIGJlIHJ1biB3aGV0aGVyCi06bWV0aDpgcnVuVGVzdGAgc3VjY2VlZGVkIG9yIG5vdC4KK0lmIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIHN1Y2NlZWRlZCwgdGhlIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIG1ldGhvZCB3aWxsCitiZSBydW4gd2hldGhlciA6bWV0aDpgflRlc3RDYXNlLnJ1blRlc3RgIHN1Y2NlZWRlZCBvciBub3QuCiAKIFN1Y2ggYSB3b3JraW5nIGVudmlyb25tZW50IGZvciB0aGUgdGVzdGluZyBjb2RlIGlzIGNhbGxlZCBhIDpkZm46YGZpeHR1cmVgLgogCkBAIC00MDksMTAgKzU1MywxMTAgQEAKIAogLi4gbm90ZTo6CiAKLSAgIEV2ZW4gdGhvdWdoIDpjbGFzczpgRnVuY3Rpb25UZXN0Q2FzZWAgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjb252ZXJ0IGFuIGV4aXN0aW5nCi0gICB0ZXN0IGJhc2Ugb3ZlciB0byBhIDptb2Q6YHVuaXR0ZXN0YFwgLWJhc2VkIHN5c3RlbSwgdGhpcyBhcHByb2FjaCBpcyBub3QKLSAgIHJlY29tbWVuZGVkLiAgVGFraW5nIHRoZSB0aW1lIHRvIHNldCB1cCBwcm9wZXIgOmNsYXNzOmBUZXN0Q2FzZWAgc3ViY2xhc3NlcyB3aWxsCi0gICBtYWtlIGZ1dHVyZSB0ZXN0IHJlZmFjdG9yaW5ncyBpbmZpbml0ZWx5IGVhc2llci4KKyAgIEV2ZW4gdGhvdWdoIDpjbGFzczpgRnVuY3Rpb25UZXN0Q2FzZWAgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjb252ZXJ0IGFuCisgICBleGlzdGluZyB0ZXN0IGJhc2Ugb3ZlciB0byBhIDptb2Q6YHVuaXR0ZXN0YFwgLWJhc2VkIHN5c3RlbSwgdGhpcyBhcHByb2FjaCBpcworICAgbm90IHJlY29tbWVuZGVkLiAgVGFraW5nIHRoZSB0aW1lIHRvIHNldCB1cCBwcm9wZXIgOmNsYXNzOmBUZXN0Q2FzZWAKKyAgIHN1YmNsYXNzZXMgd2lsbCBtYWtlIGZ1dHVyZSB0ZXN0IHJlZmFjdG9yaW5ncyBpbmZpbml0ZWx5IGVhc2llci4KKworSW4gc29tZSBjYXNlcywgdGhlIGV4aXN0aW5nIHRlc3RzIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyB0aGUgOm1vZDpgZG9jdGVzdGAKK21vZHVsZS4gIElmIHNvLCA6bW9kOmBkb2N0ZXN0YCBwcm92aWRlcyBhIDpjbGFzczpgRG9jVGVzdFN1aXRlYCBjbGFzcyB0aGF0IGNhbgorYXV0b21hdGljYWxseSBidWlsZCA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RTdWl0ZWAgaW5zdGFuY2VzIGZyb20gdGhlIGV4aXN0aW5nCis6bW9kOmBkb2N0ZXN0YFwgLWJhc2VkIHRlc3RzLgorCisKKy4uIF91bml0dGVzdC1za2lwcGluZzoKKworU2tpcHBpbmcgdGVzdHMgYW5kIGV4cGVjdGVkIGZhaWx1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMi43CisKK1VuaXR0ZXN0IHN1cHBvcnRzIHNraXBwaW5nIGluZGl2aWR1YWwgdGVzdCBtZXRob2RzIGFuZCBldmVuIHdob2xlIGNsYXNzZXMgb2YKK3Rlc3RzLiAgSW4gYWRkaXRpb24sIGl0IHN1cHBvcnRzIG1hcmtpbmcgYSB0ZXN0IGFzIGEgImV4cGVjdGVkIGZhaWx1cmUsIiBhIHRlc3QKK3RoYXQgaXMgYnJva2VuIGFuZCB3aWxsIGZhaWwsIGJ1dCBzaG91bGRuJ3QgYmUgY291bnRlZCBhcyBhIGZhaWx1cmUgb24gYQorOmNsYXNzOmBUZXN0UmVzdWx0YC4KKworU2tpcHBpbmcgYSB0ZXN0IGlzIHNpbXBseSBhIG1hdHRlciBvZiB1c2luZyB0aGUgOmZ1bmM6YHNraXBgIDp0ZXJtOmBkZWNvcmF0b3JgCitvciBvbmUgb2YgaXRzIGNvbmRpdGlvbmFsIHZhcmlhbnRzLgorCitCYXNpYyBza2lwcGluZyBsb29rcyBsaWtlIHRoaXM6IDo6CisKKyAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgQHVuaXR0ZXN0LnNraXAoImRlbW9uc3RyYXRpbmcgc2tpcHBpbmciKQorICAgICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CisgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGhhcHBlbiIpCisKKyAgICAgICBAdW5pdHRlc3Quc2tpcElmKG15bGliLl9fdmVyc2lvbl9fIDwgKDEsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBsaWJyYXJ5IHZlcnNpb24iKQorICAgICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgICAgIyBUZXN0cyB0aGF0IHdvcmsgZm9yIG9ubHkgYSBjZXJ0YWluIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgIHBhc3MKKworICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKSwgInJlcXVpcmVzIFdpbmRvd3MiKQorICAgICAgIGRlZiB0ZXN0X3dpbmRvd3Nfc3VwcG9ydChzZWxmKToKKyAgICAgICAgICAgIyB3aW5kb3dzIHNwZWNpZmljIHRlc3RpbmcgY29kZQorICAgICAgICAgICBwYXNzCisKK1RoaXMgaXMgdGhlIG91dHB1dCBvZiBydW5uaW5nIHRoZSBleGFtcGxlIGFib3ZlIGluIHZlcmJvc2UgbW9kZTogOjoKKworICAgdGVzdF9mb3JtYXQgKF9fbWFpbl9fLk15VGVzdENhc2UpIC4uLiBza2lwcGVkICdub3Qgc3VwcG9ydGVkIGluIHRoaXMgbGlicmFyeSB2ZXJzaW9uJworICAgdGVzdF9ub3RoaW5nIChfX21haW5fXy5NeVRlc3RDYXNlKSAuLi4gc2tpcHBlZCAnZGVtb25zdHJhdGluZyBza2lwcGluZycKKyAgIHRlc3Rfd2luZG93c19zdXBwb3J0IChfX21haW5fXy5NeVRlc3RDYXNlKSAuLi4gc2tpcHBlZCAncmVxdWlyZXMgV2luZG93cycKKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgUmFuIDMgdGVzdHMgaW4gMC4wMDVzCisKKyAgIE9LIChza2lwcGVkPTMpCisKK0NsYXNzZXMgY2FuIGJlIHNraXBwZWQganVzdCBsaWtlIG1ldGhvZHM6IDo6CisKKyAgIEBza2lwKCJzaG93aW5nIGNsYXNzIHNraXBwaW5nIikKKyAgIGNsYXNzIE15U2tpcHBlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICBkZWYgdGVzdF9ub3RfcnVuKHNlbGYpOgorICAgICAgICAgICBwYXNzCisKKzptZXRoOmBUZXN0Q2FzZS5zZXRVcGAgY2FuIGFsc28gc2tpcCB0aGUgdGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSByZXNvdXJjZQordGhhdCBuZWVkcyB0byBiZSBzZXQgdXAgaXMgbm90IGF2YWlsYWJsZS4KKworRXhwZWN0ZWQgZmFpbHVyZXMgdXNlIHRoZSA6ZnVuYzpgZXhwZWN0ZWRGYWlsdXJlYCBkZWNvcmF0b3IuIDo6CisKKyAgIGNsYXNzIEV4cGVjdGVkRmFpbHVyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgZGVmIHRlc3RfZmFpbChzZWxmKToKKyAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCAwLCAiYnJva2VuIikKKworSXQncyBlYXN5IHRvIHJvbGwgeW91ciBvd24gc2tpcHBpbmcgZGVjb3JhdG9ycyBieSBtYWtpbmcgYSBkZWNvcmF0b3IgdGhhdCBjYWxscworOmZ1bmM6YHNraXBgIG9uIHRoZSB0ZXN0IHdoZW4gaXQgd2FudHMgaXQgdG8gYmUgc2tpcHBlZC4gIFRoaXMgZGVjb3JhdG9yIHNraXBzCit0aGUgdGVzdCB1bmxlc3MgdGhlIHBhc3NlZCBvYmplY3QgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGU6IDo6CisKKyAgIGRlZiBza2lwVW5sZXNzSGFzYXR0cihvYmosIGF0dHIpOgorICAgICAgIGlmIGhhc2F0dHIob2JqLCBhdHRyKToKKyAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCisgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoInswIXJ9IGRvZXNuJ3QgaGF2ZSB7MSFyfSIuZm9ybWF0KG9iaiwgYXR0cikpCisKK1RoZSBmb2xsb3dpbmcgZGVjb3JhdG9ycyBpbXBsZW1lbnQgdGVzdCBza2lwcGluZyBhbmQgZXhwZWN0ZWQgZmFpbHVyZXM6CisKKy4uIGZ1bmN0aW9uOjogc2tpcChyZWFzb24pCisKKyAgIFVuY29uZGl0aW9uYWxseSBza2lwIHRoZSBkZWNvcmF0ZWQgdGVzdC4gICpyZWFzb24qIHNob3VsZCBkZXNjcmliZSB3aHkgdGhlCisgICB0ZXN0IGlzIGJlaW5nIHNraXBwZWQuCisKKy4uIGZ1bmN0aW9uOjogc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKQorCisgICBTa2lwIHRoZSBkZWNvcmF0ZWQgdGVzdCBpZiAqY29uZGl0aW9uKiBpcyB0cnVlLgorCisuLiBmdW5jdGlvbjo6IHNraXBVbmxlc3MoY29uZGl0aW9uLCByZWFzb24pCisKKyAgIFNraXAgdGhlIGRlY29yYXRlZCB0ZXN0IHVubGVzcyAqY29uZGl0aW9uKiBpcyB0cnVlLgorCisuLiBmdW5jdGlvbjo6IGV4cGVjdGVkRmFpbHVyZQorCisgICBNYXJrIHRoZSB0ZXN0IGFzIGFuIGV4cGVjdGVkIGZhaWx1cmUuICBJZiB0aGUgdGVzdCBmYWlscyB3aGVuIHJ1biwgdGhlIHRlc3QKKyAgIGlzIG5vdCBjb3VudGVkIGFzIGEgZmFpbHVyZS4KKworU2tpcHBlZCB0ZXN0cyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcGAgb3IgOm1ldGg6YHRlYXJEb3duYCBydW4gYXJvdW5kIHRoZW0uCitTa2lwcGVkIGNsYXNzZXMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBDbGFzc2Agb3IgOm1ldGg6YHRlYXJEb3duQ2xhc3NgIHJ1bi4KIAogCiAuLiBfdW5pdHRlc3QtY29udGVudHM6CkBAIC00MjAsNiArNjY0LDEzIEBACiBDbGFzc2VzIGFuZCBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGluIGRlcHRoIHRoZSBBUEkgb2YgOm1vZDpgdW5pdHRlc3RgLgorCisKKy4uIF90ZXN0Y2FzZS1vYmplY3RzOgorCitUZXN0IGNhc2VzCit+fn5+fn5+fn5+CiAKIC4uIGNsYXNzOjogVGVzdENhc2UoW21ldGhvZE5hbWVdKQogCkBAIC00NDMsMTggKzY5NCw1ODcgQEAKICAgIEhlcmUsIHdlIGNyZWF0ZSB0d28gaW5zdGFuY2VzIG9mIDpjbGFzczpgV2lkZ2V0VGVzdENhc2VgLCBlYWNoIG9mIHdoaWNoIHJ1bnMgYQogICAgc2luZ2xlIHRlc3QuCiAKLSAgICptZXRob2ROYW1lKiBkZWZhdWx0cyB0byBgYCdydW5UZXN0J2BgLgorICAgKm1ldGhvZE5hbWUqIGRlZmF1bHRzIHRvIDptZXRoOmBydW5UZXN0YC4KKworICAgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIHByb3ZpZGUgdGhyZWUgZ3JvdXBzIG9mIG1ldGhvZHM6IG9uZSBncm91cCB1c2VkCisgICB0byBydW4gdGhlIHRlc3QsIGFub3RoZXIgdXNlZCBieSB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbiB0byBjaGVjayBjb25kaXRpb25zCisgICBhbmQgcmVwb3J0IGZhaWx1cmVzLCBhbmQgc29tZSBpbnF1aXJ5IG1ldGhvZHMgYWxsb3dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICB0ZXN0IGl0c2VsZiB0byBiZSBnYXRoZXJlZC4KKworICAgTWV0aG9kcyBpbiB0aGUgZmlyc3QgZ3JvdXAgKHJ1bm5pbmcgdGhlIHRlc3QpIGFyZToKKworCisgICAuLiBtZXRob2Q6OiBzZXRVcCgpCisKKyAgICAgIE1ldGhvZCBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgdGVzdCBmaXh0dXJlLiAgVGhpcyBpcyBjYWxsZWQgaW1tZWRpYXRlbHkKKyAgICAgIGJlZm9yZSBjYWxsaW5nIHRoZSB0ZXN0IG1ldGhvZDsgYW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbAorICAgICAgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gVGhlIGRlZmF1bHQKKyAgICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKworCisgICAuLiBtZXRob2Q6OiB0ZWFyRG93bigpCisKKyAgICAgIE1ldGhvZCBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlc3QgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBhbmQgdGhlCisgICAgICByZXN1bHQgcmVjb3JkZWQuICBUaGlzIGlzIGNhbGxlZCBldmVuIGlmIHRoZSB0ZXN0IG1ldGhvZCByYWlzZWQgYW4KKyAgICAgIGV4Y2VwdGlvbiwgc28gdGhlIGltcGxlbWVudGF0aW9uIGluIHN1YmNsYXNzZXMgbWF5IG5lZWQgdG8gYmUgcGFydGljdWxhcmx5CisgICAgICBjYXJlZnVsIGFib3V0IGNoZWNraW5nIGludGVybmFsIHN0YXRlLiAgQW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcworICAgICAgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gIFRoaXMKKyAgICAgIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSA6bWV0aDpgc2V0VXBgIHN1Y2NlZWRzLCByZWdhcmRsZXNzIG9mCisgICAgICB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdCBtZXRob2QuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKworCisgICAuLiBtZXRob2Q6OiBzZXRVcENsYXNzKCkKKworICAgICAgQSBjbGFzcyBtZXRob2QgY2FsbGVkIGJlZm9yZSB0ZXN0cyBpbiBhbiBpbmRpdmlkdWFsIGNsYXNzIHJ1bi4KKyAgICAgIGBgc2V0VXBDbGFzc2BgIGlzIGNhbGxlZCB3aXRoIHRoZSBjbGFzcyBhcyB0aGUgb25seSBhcmd1bWVudAorICAgICAgYW5kIG11c3QgYmUgZGVjb3JhdGVkIGFzIGEgOmZ1bmM6YGNsYXNzbWV0aG9kYDo6CisKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAuLi4KKworICAgICAgU2VlIGBDbGFzcyBhbmQgTW9kdWxlIEZpeHR1cmVzYF8gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogdGVhckRvd25DbGFzcygpCisKKyAgICAgIEEgY2xhc3MgbWV0aG9kIGNhbGxlZCBhZnRlciB0ZXN0cyBpbiBhbiBpbmRpdmlkdWFsIGNsYXNzIGhhdmUgcnVuLgorICAgICAgYGB0ZWFyRG93bkNsYXNzYGAgaXMgY2FsbGVkIHdpdGggdGhlIGNsYXNzIGFzIHRoZSBvbmx5IGFyZ3VtZW50CisgICAgICBhbmQgbXVzdCBiZSBkZWNvcmF0ZWQgYXMgYSA6bWV0aDpgY2xhc3NtZXRob2RgOjoKKworICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgIC4uLgorCisgICAgICBTZWUgYENsYXNzIGFuZCBNb2R1bGUgRml4dHVyZXNgXyBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBydW4oW3Jlc3VsdF0pCisKKyAgICAgIFJ1biB0aGUgdGVzdCwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8gdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMKKyAgICAgICpyZXN1bHQqLiAgSWYgKnJlc3VsdCogaXMgb21pdHRlZCBvciA6Y29uc3Q6YE5vbmVgLCBhIHRlbXBvcmFyeSByZXN1bHQKKyAgICAgIG9iamVjdCBpcyBjcmVhdGVkIChieSBjYWxsaW5nIHRoZSA6bWV0aDpgZGVmYXVsdFRlc3RSZXN1bHRgIG1ldGhvZCkgYW5kCisgICAgICB1c2VkLiBUaGUgcmVzdWx0IG9iamVjdCBpcyBub3QgcmV0dXJuZWQgdG8gOm1ldGg6YHJ1bmAncyBjYWxsZXIuCisKKyAgICAgIFRoZSBzYW1lIGVmZmVjdCBtYXkgYmUgaGFkIGJ5IHNpbXBseSBjYWxsaW5nIHRoZSA6Y2xhc3M6YFRlc3RDYXNlYAorICAgICAgaW5zdGFuY2UuCisKKworICAgLi4gbWV0aG9kOjogc2tpcFRlc3QocmVhc29uKQorCisgICAgICBDYWxsaW5nIHRoaXMgZHVyaW5nIGEgdGVzdCBtZXRob2Qgb3IgOm1ldGg6YHNldFVwYCBza2lwcyB0aGUgY3VycmVudAorICAgICAgdGVzdC4gIFNlZSA6cmVmOmB1bml0dGVzdC1za2lwcGluZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGRlYnVnKCkKKworICAgICAgUnVuIHRoZSB0ZXN0IHdpdGhvdXQgY29sbGVjdGluZyB0aGUgcmVzdWx0LiAgVGhpcyBhbGxvd3MgZXhjZXB0aW9ucyByYWlzZWQKKyAgICAgIGJ5IHRoZSB0ZXN0IHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlciwgYW5kIGNhbiBiZSB1c2VkIHRvIHN1cHBvcnQKKyAgICAgIHJ1bm5pbmcgdGVzdHMgdW5kZXIgYSBkZWJ1Z2dlci4KKworICAgVGhlIHRlc3QgY29kZSBjYW4gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gY2hlY2sgZm9yIGFuZCByZXBvcnQKKyAgIGZhaWx1cmVzLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFRydWUoZXhwclssIG1zZ10pCisgICAgICAgICAgICAgICBhc3NlcnRfKGV4cHJbLCBtc2ddKQorICAgICAgICAgICAgICAgZmFpbFVubGVzcyhleHByWywgbXNnXSkKKworICAgICAgU2lnbmFsIGEgdGVzdCBmYWlsdXJlIGlmICpleHByKiBpcyBmYWxzZTsgdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUgZmFpbHVyZQorICAgICAgd2lsbCBiZSAqbXNnKiBpZiBnaXZlbiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgOmNvbnN0OmBOb25lYC4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgOm1ldGg6YGZhaWxVbmxlc3NgIGFuZCA6bWV0aDpgYXNzZXJ0X2A7IHVzZSA6bWV0aDpgYXNzZXJ0VHJ1ZWAuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0RXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCisgICAgICAgICAgICAgICBmYWlsVW5sZXNzRXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCisKKyAgICAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIG5vdCBjb21wYXJlCisgICAgICBlcXVhbCwgdGhlIHRlc3Qgd2lsbCBmYWlsIHdpdGggdGhlIGV4cGxhbmF0aW9uIGdpdmVuIGJ5ICptc2cqLCBvcgorICAgICAgOmNvbnN0OmBOb25lYC4gIE5vdGUgdGhhdCB1c2luZyA6bWV0aDpgYXNzZXJ0RXF1YWxgIGltcHJvdmVzIHVwb24KKyAgICAgIGRvaW5nIHRoZSBjb21wYXJpc29uIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gOm1ldGg6YGFzc2VydFRydWVgOiB0aGUKKyAgICAgIGRlZmF1bHQgdmFsdWUgZm9yICptc2cqIGluY2x1ZGUgcmVwcmVzZW50YXRpb25zIG9mIGJvdGggKmZpcnN0KiBhbmQKKyAgICAgICpzZWNvbmQqLgorCisgICAgICBJbiBhZGRpdGlvbiwgaWYgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIHRoZSBleGFjdCBzYW1lIHR5cGUgYW5kIG9uZSBvZgorICAgICAgbGlzdCwgdHVwbGUsIGRpY3QsIHNldCwgZnJvemVuc2V0IG9yIHVuaWNvZGUgb3IgYW55IHR5cGUgdGhhdCBhIHN1YmNsYXNzCisgICAgICByZWdpc3RlcnMgd2l0aCA6bWV0aDpgYWRkVHlwZUVxdWFsaXR5RnVuY2AgdGhlIHR5cGUgc3BlY2lmaWMgZXF1YWxpdHkKKyAgICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgbW9yZSB1c2VmdWwgZGVmYXVsdCBlcnJvcgorICAgICAgbWVzc2FnZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICAgIEFkZGVkIHRoZSBhdXRvbWF0aWMgY2FsbGluZyBvZiB0eXBlIHNwZWNpZmljIGVxdWFsaXR5IGZ1bmN0aW9uLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbFVubGVzc0VxdWFsYDsgdXNlIDptZXRoOmBhc3NlcnRFcXVhbGAuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0Tm90RXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCisgICAgICAgICAgICAgICBmYWlsSWZFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKKworICAgICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBub3QgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIGNvbXBhcmUKKyAgICAgIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yCisgICAgICA6Y29uc3Q6YE5vbmVgLiAgTm90ZSB0aGF0IHVzaW5nIDptZXRoOmBhc3NlcnROb3RFcXVhbGAgaW1wcm92ZXMgdXBvbiBkb2luZworICAgICAgdGhlIGNvbXBhcmlzb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byA6bWV0aDpgYXNzZXJ0VHJ1ZWAgaXMgdGhhdCB0aGUKKyAgICAgIGRlZmF1bHQgdmFsdWUgZm9yICptc2cqIGNhbiBiZSBjb21wdXRlZCB0byBpbmNsdWRlIHJlcHJlc2VudGF0aW9ucyBvZiBib3RoCisgICAgICAqZmlyc3QqIGFuZCAqc2Vjb25kKi4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgOm1ldGg6YGZhaWxJZkVxdWFsYDsgdXNlIDptZXRoOmBhc3NlcnROb3RFcXVhbGAuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ1ssIGRlbHRhXV1dKQorICAgICAgICAgICAgICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmRbLCBwbGFjZXNbLCBtc2dbLCBkZWx0YV1dXSkKKworICAgICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsIGJ5IGNvbXB1dGluZyB0aGUKKyAgICAgIGRpZmZlcmVuY2UsIHJvdW5kaW5nIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCAqcGxhY2VzKiAoZGVmYXVsdCA3KSwKKyAgICAgIGFuZCBjb21wYXJpbmcgdG8gemVyby4KKworICAgICAgTm90ZSB0aGF0IGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBpcyBub3QgdGhlIHNhbWUgYXMKKyAgICAgIGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuIElmIHRoZSB2YWx1ZXMgZG8gbm90CisgICAgICBjb21wYXJlIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAgICBJZiAqZGVsdGEqIGlzIHN1cHBsaWVkIGluc3RlYWQgb2YgKnBsYWNlcyogdGhlbiB0aGUgZGlmZmVyZW5jZQorICAgICAgYmV0d2VlbiAqZmlyc3QqIGFuZCAqc2Vjb25kKiBtdXN0IGJlIGxlc3MgdGhhbiAqZGVsdGEqLgorCisgICAgICBTdXBwbHlpbmcgYm90aCAqZGVsdGEqIGFuZCAqcGxhY2VzKiByYWlzZXMgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgICAgT2JqZWN0cyB0aGF0IGNvbXBhcmUgZXF1YWwgYXJlIGF1dG9tYXRpY2FsbHkgYWxtb3N0IGVxdWFsLgorICAgICAgICAgQWRkZWQgdGhlIGBgZGVsdGFgYCBrZXl3b3JkIGFyZ3VtZW50LgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbFVubGVzc0FsbW9zdEVxdWFsYDsgdXNlIDptZXRoOmBhc3NlcnRBbG1vc3RFcXVhbGAuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0Tm90QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ1ssIGRlbHRhXV1dKQorICAgICAgICAgICAgICAgZmFpbElmQWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ1ssIGRlbHRhXV1dKQorCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIG5vdCBhcHByb3hpbWF0ZWx5IGVxdWFsIGJ5IGNvbXB1dGluZworICAgICAgdGhlIGRpZmZlcmVuY2UsIHJvdW5kaW5nIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCAqcGxhY2VzKiAoZGVmYXVsdAorICAgICAgNyksIGFuZCBjb21wYXJpbmcgdG8gemVyby4KKworICAgICAgTm90ZSB0aGF0IGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBpcyBub3QgdGhlIHNhbWUgYXMKKyAgICAgIGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuIElmIHRoZSB2YWx1ZXMgZG8gbm90CisgICAgICBjb21wYXJlIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAgICBJZiAqZGVsdGEqIGlzIHN1cHBsaWVkIGluc3RlYWQgb2YgKnBsYWNlcyogdGhlbiB0aGUgZGlmZmVyZW5jZQorICAgICAgYmV0d2VlbiAqZmlyc3QqIGFuZCAqc2Vjb25kKiBtdXN0IGJlIG1vcmUgdGhhbiAqZGVsdGEqLgorCisgICAgICBTdXBwbHlpbmcgYm90aCAqZGVsdGEqIGFuZCAqcGxhY2VzKiByYWlzZXMgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgICAgT2JqZWN0cyB0aGF0IGNvbXBhcmUgZXF1YWwgYXV0b21hdGljYWxseSBmYWlsLgorICAgICAgICAgQWRkZWQgdGhlIGBgZGVsdGFgYCBrZXl3b3JkIGFyZ3VtZW50LgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbElmQWxtb3N0RXF1YWxgOyB1c2UgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsYC4KKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRHcmVhdGVyKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorICAgICAgICAgICAgICAgYXNzZXJ0R3JlYXRlckVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorICAgICAgICAgICAgICAgYXNzZXJ0TGVzcyhmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKKyAgICAgICAgICAgICAgIGFzc2VydExlc3NFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdCB0aGF0ICpmaXJzdCogaXMgcmVzcGVjdGl2ZWx5ID4sID49LCA8IG9yIDw9IHRoYW4gKnNlY29uZCogZGVwZW5kaW5nCisgICAgICBvbiB0aGUgbWV0aG9kIG5hbWUuICBJZiBub3QsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIGFuIGV4cGxhbmF0aW9uCisgICAgICBvciB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKjo6CisKKyAgICAgICAgID4+PiBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgzLCA0KQorICAgICAgICAgQXNzZXJ0aW9uRXJyb3I6ICIzIiB1bmV4cGVjdGVkbHkgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAiNCIKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisKKyAgICAgIFRlc3QgdGhhdCB0aGUgbXVsdGlsaW5lIHN0cmluZyAqZmlyc3QqIGlzIGVxdWFsIHRvIHRoZSBzdHJpbmcgKnNlY29uZCouCisgICAgICBXaGVuIG5vdCBlcXVhbCBhIGRpZmYgb2YgdGhlIHR3byBzdHJpbmdzIGhpZ2hsaWdodGluZyB0aGUgZGlmZmVyZW5jZXMKKyAgICAgIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgZGVmYXVsdAorICAgICAgd2hlbiBjb21wYXJpbmcgVW5pY29kZSBzdHJpbmdzIHdpdGggOm1ldGg6YGFzc2VydEVxdWFsYC4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0UmVnZXhwTWF0Y2hlcyh0ZXh0LCByZWdleHAsIG1zZz1Ob25lKQorCisgICAgICBWZXJpZmllcyB0aGF0IGEgKnJlZ2V4cCogc2VhcmNoIG1hdGNoZXMgKnRleHQqLiAgRmFpbHMgd2l0aCBhbiBlcnJvcgorICAgICAgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHBhdHRlcm4gYW5kIHRoZSAqdGV4dCouICAqcmVnZXhwKiBtYXkgYmUKKyAgICAgIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBvciBhIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhciBleHByZXNzaW9uCisgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5IDpmdW5jOmByZS5zZWFyY2hgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnROb3RSZWdleHBNYXRjaGVzKHRleHQsIHJlZ2V4cCwgbXNnPU5vbmUpCisKKyAgICAgIFZlcmlmaWVzIHRoYXQgYSAqcmVnZXhwKiBzZWFyY2ggZG9lcyBub3QgbWF0Y2ggKnRleHQqLiAgRmFpbHMgd2l0aCBhbiBlcnJvcgorICAgICAgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHBhdHRlcm4gYW5kIHRoZSBwYXJ0IG9mICp0ZXh0KiB0aGF0IG1hdGNoZXMuICAqcmVnZXhwKgorICAgICAgbWF5IGJlIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBvciBhIHN0cmluZyBjb250YWluaW5nIGEgcmVndWxhcgorICAgICAgZXhwcmVzc2lvbiBzdWl0YWJsZSBmb3IgdXNlIGJ5IDpmdW5jOmByZS5zZWFyY2hgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRJbihmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKKyAgICAgICAgICAgICAgIGFzc2VydE5vdEluKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQorCisgICAgICBUZXN0cyB0aGF0ICpmaXJzdCogaXMgb3IgaXMgbm90IGluICpzZWNvbmQqIHdpdGggYW4gZXhwbGFuYXRvcnkgZXJyb3IKKyAgICAgIG1lc3NhZ2UgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydEl0ZW1zRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbXNnPU5vbmUpCisKKyAgICAgIFRlc3QgdGhhdCBzZXF1ZW5jZSAqZXhwZWN0ZWQqIGNvbnRhaW5zIHRoZSBzYW1lIGVsZW1lbnRzIGFzICphY3R1YWwqLAorICAgICAgcmVnYXJkbGVzcyBvZiB0aGVpciBvcmRlci4gV2hlbiB0aGV5IGRvbid0LCBhbiBlcnJvciBtZXNzYWdlIGxpc3RpbmcgdGhlCisgICAgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzZXF1ZW5jZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCisKKyAgICAgIER1cGxpY2F0ZSBlbGVtZW50cyBhcmUgKm5vdCogaWdub3JlZCB3aGVuIGNvbXBhcmluZyAqYWN0dWFsKiBhbmQKKyAgICAgICpleHBlY3RlZCouIEl0IHZlcmlmaWVzIGlmIGVhY2ggZWxlbWVudCBoYXMgdGhlIHNhbWUgY291bnQgaW4gYm90aAorICAgICAgc2VxdWVuY2VzLiBJdCBpcyB0aGUgZXF1aXZhbGVudCBvZiBgYGFzc2VydEVxdWFsKHNvcnRlZChleHBlY3RlZCksCisgICAgICBzb3J0ZWQoYWN0dWFsKSlgYCBidXQgaXQgd29ya3Mgd2l0aCBzZXF1ZW5jZXMgb2YgdW5oYXNoYWJsZSBvYmplY3RzIGFzCisgICAgICB3ZWxsLgorCisgICAgICBJZiBzcGVjaWZpZWQsICptc2cqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdHMgdGhhdCB0d28gc2V0cyBhcmUgZXF1YWwuICBJZiBub3QsIGFuIGVycm9yIG1lc3NhZ2UgaXMgY29uc3RydWN0ZWQKKyAgICAgIHRoYXQgbGlzdHMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNldHMuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5CisgICAgICBkZWZhdWx0IHdoZW4gY29tcGFyaW5nIHNldHMgb3IgZnJvemVuc2V0cyB3aXRoIDptZXRoOmBhc3NlcnRFcXVhbGAuCisKKyAgICAgIEZhaWxzIGlmIGVpdGhlciBvZiAqc2V0MSogb3IgKnNldDIqIGRvZXMgbm90IGhhdmUgYSA6bWV0aDpgc2V0LmRpZmZlcmVuY2VgCisgICAgICBtZXRob2QuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydERpY3RFcXVhbChleHBlY3RlZCwgYWN0dWFsLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdCB0aGF0IHR3byBkaWN0aW9uYXJpZXMgYXJlIGVxdWFsLiAgSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGlzCisgICAgICBjb25zdHJ1Y3RlZCB0aGF0IHNob3dzIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgZGljdGlvbmFyaWVzLiBUaGlzCisgICAgICBtZXRob2Qgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgdG8gY29tcGFyZSBkaWN0aW9uYXJpZXMgaW4KKyAgICAgIGNhbGxzIHRvIDptZXRoOmBhc3NlcnRFcXVhbGAuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydERpY3RDb250YWluc1N1YnNldChleHBlY3RlZCwgYWN0dWFsLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdHMgd2hldGhlciB0aGUga2V5L3ZhbHVlIHBhaXJzIGluIGRpY3Rpb25hcnkgKmFjdHVhbCogYXJlIGEKKyAgICAgIHN1cGVyc2V0IG9mIHRob3NlIGluICpleHBlY3RlZCouICBJZiBub3QsIGFuIGVycm9yIG1lc3NhZ2UgbGlzdGluZworICAgICAgdGhlIG1pc3Npbmcga2V5cyBhbmQgbWlzbWF0Y2hlZCB2YWx1ZXMgaXMgZ2VuZXJhdGVkLgorCisgICAgICBJZiBzcGVjaWZpZWQsICptc2cqIHdpbGwgYmUgdXNlZCBhcyB0aGUgZXJyb3IgbWVzc2FnZSBvbiBmYWlsdXJlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRMaXN0RXF1YWwobGlzdDEsIGxpc3QyLCBtc2c9Tm9uZSkKKyAgICAgICAgICAgICAgIGFzc2VydFR1cGxlRXF1YWwodHVwbGUxLCB0dXBsZTIsIG1zZz1Ob25lKQorCisgICAgICBUZXN0cyB0aGF0IHR3byBsaXN0cyBvciB0dXBsZXMgYXJlIGVxdWFsLiAgSWYgbm90IGFuIGVycm9yIG1lc3NhZ2UgaXMKKyAgICAgIGNvbnN0cnVjdGVkIHRoYXQgc2hvd3Mgb25seSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvLiAgQW4gZXJyb3IKKyAgICAgIGlzIGFsc28gcmFpc2VkIGlmIGVpdGhlciBvZiB0aGUgcGFyYW1ldGVycyBhcmUgb2YgdGhlIHdyb25nIHR5cGUuCisgICAgICBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBjb21wYXJpbmcgbGlzdHMgb3IgdHVwbGVzIHdpdGgKKyAgICAgIDptZXRoOmBhc3NlcnRFcXVhbGAuCisKKyAgICAgIElmIHNwZWNpZmllZCwgKm1zZyogd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFNlcXVlbmNlRXF1YWwoc2VxMSwgc2VxMiwgbXNnPU5vbmUsIHNlcV90eXBlPU5vbmUpCisKKyAgICAgIFRlc3RzIHRoYXQgdHdvIHNlcXVlbmNlcyBhcmUgZXF1YWwuICBJZiBhICpzZXFfdHlwZSogaXMgc3VwcGxpZWQsIGJvdGgKKyAgICAgICpzZXExKiBhbmQgKnNlcTIqIG11c3QgYmUgaW5zdGFuY2VzIG9mICpzZXFfdHlwZSogb3IgYSBmYWlsdXJlIHdpbGwKKyAgICAgIGJlIHJhaXNlZC4gIElmIHRoZSBzZXF1ZW5jZXMgYXJlIGRpZmZlcmVudCBhbiBlcnJvciBtZXNzYWdlIGlzCisgICAgICBjb25zdHJ1Y3RlZCB0aGF0IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3by4KKworICAgICAgSWYgc3BlY2lmaWVkLCAqbXNnKiB3aWxsIGJlIHVzZWQgYXMgdGhlIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbXBsZW1lbnQgOm1ldGg6YGFzc2VydExpc3RFcXVhbGAgYW5kCisgICAgICA6bWV0aDpgYXNzZXJ0VHVwbGVFcXVhbGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFJhaXNlcyhleGNlcHRpb25bLCBjYWxsYWJsZSwgLi4uXSkKKyAgICAgICAgICAgICAgIGZhaWxVbmxlc3NSYWlzZXMoZXhjZXB0aW9uWywgY2FsbGFibGUsIC4uLl0pCisKKyAgICAgIFRlc3QgdGhhdCBhbiBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gKmNhbGxhYmxlKiBpcyBjYWxsZWQgd2l0aCBhbnkKKyAgICAgIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgYWxzbyBwYXNzZWQgdG8KKyAgICAgIDptZXRoOmBhc3NlcnRSYWlzZXNgLiAgVGhlIHRlc3QgcGFzc2VzIGlmICpleGNlcHRpb24qIGlzIHJhaXNlZCwgaXMgYW4KKyAgICAgIGVycm9yIGlmIGFub3RoZXIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgb3IgZmFpbHMgaWYgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgIFRvIGNhdGNoIGFueSBvZiBhIGdyb3VwIG9mIGV4Y2VwdGlvbnMsIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uCisgICAgICBjbGFzc2VzIG1heSBiZSBwYXNzZWQgYXMgKmV4Y2VwdGlvbiouCisKKyAgICAgIElmICpjYWxsYWJsZSogaXMgb21pdHRlZCBvciBOb25lLCByZXR1cm5zIGEgY29udGV4dCBtYW5hZ2VyIHNvIHRoYXQgdGhlCisgICAgICBjb2RlIHVuZGVyIHRlc3QgY2FuIGJlIHdyaXR0ZW4gaW5saW5lIHJhdGhlciB0aGFuIGFzIGEgZnVuY3Rpb246OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pOgorICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisKKyAgICAgIFRoZSBjb250ZXh0IG1hbmFnZXIgd2lsbCBzdG9yZSB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBvYmplY3QgaW4gaXRzCisgICAgICA6YXR0cjpgZXhjZXB0aW9uYCBhdHRyaWJ1dGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGludGVudGlvbgorICAgICAgaXMgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyBvbiB0aGUgZXhjZXB0aW9uIHJhaXNlZDo6CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTb21lRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisKKyAgICAgICAgdGhlX2V4Y2VwdGlvbiA9IGNtLmV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZV9leGNlcHRpb24uZXJyb3JfY29kZSwgMykKKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgICAgIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHVzZSA6bWV0aDpgYXNzZXJ0UmFpc2VzYCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgOm1ldGg6YGZhaWxVbmxlc3NSYWlzZXNgOyB1c2UgOm1ldGg6YGFzc2VydFJhaXNlc2AuCisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzUmVnZXhwKGV4Y2VwdGlvbiwgcmVnZXhwWywgY2FsbGFibGUsIC4uLl0pCisKKyAgICAgIExpa2UgOm1ldGg6YGFzc2VydFJhaXNlc2AgYnV0IGFsc28gdGVzdHMgdGhhdCAqcmVnZXhwKiBtYXRjaGVzCisgICAgICBvbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYWlzZWQgZXhjZXB0aW9uLiAgKnJlZ2V4cCogbWF5IGJlCisgICAgICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSA6ZnVuYzpgcmUuc2VhcmNoYC4gIEV4YW1wbGVzOjoKKworICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgJ2ludmFsaWQgbGl0ZXJhbCBmb3IuKlhZWiQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCAnWFlaJykKKworICAgICAgb3I6OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFZhbHVlRXJyb3IsICdsaXRlcmFsJyk6CisgICAgICAgICAgICBpbnQoJ1hZWicpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydElzTm9uZShleHByWywgbXNnXSkKKworICAgICAgVGhpcyBzaWduYWxzIGEgdGVzdCBmYWlsdXJlIGlmICpleHByKiBpcyBub3QgTm9uZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYXNzZXJ0SXNOb3ROb25lKGV4cHJbLCBtc2ddKQorCisgICAgICBUaGUgaW52ZXJzZSBvZiB0aGUgOm1ldGg6YGFzc2VydElzTm9uZWAgbWV0aG9kLgorICAgICAgVGhpcyBzaWduYWxzIGEgdGVzdCBmYWlsdXJlIGlmICpleHByKiBpcyBOb25lLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRJcyhleHByMSwgZXhwcjJbLCBtc2ddKQorCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIxKiBhbmQgKmV4cHIyKiBkb24ndCBldmFsdWF0ZSB0byB0aGUgc2FtZQorICAgICAgb2JqZWN0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRJc05vdChleHByMSwgZXhwcjJbLCBtc2ddKQorCisgICAgICBUaGUgaW52ZXJzZSBvZiB0aGUgOm1ldGg6YGFzc2VydElzYCBtZXRob2QuCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIxKiBhbmQgKmV4cHIyKiBldmFsdWF0ZSB0byB0aGUgc2FtZQorICAgICAgb2JqZWN0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhc3NlcnRJc0luc3RhbmNlKG9iaiwgY2xzWywgbXNnXSkKKworICAgICAgVGhpcyBzaWduYWxzIGEgdGVzdCBmYWlsdXJlIGlmICpvYmoqIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAqY2xzKiAod2hpY2gKKyAgICAgIGNhbiBiZSBhIGNsYXNzIG9yIGEgdHVwbGUgb2YgY2xhc3NlcywgYXMgc3VwcG9ydGVkIGJ5IDpmdW5jOmBpc2luc3RhbmNlYCkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydE5vdElzSW5zdGFuY2Uob2JqLCBjbHNbLCBtc2ddKQorCisgICAgICBUaGUgaW52ZXJzZSBvZiB0aGUgOm1ldGg6YGFzc2VydElzSW5zdGFuY2VgIG1ldGhvZC4gIFRoaXMgc2lnbmFscyBhIHRlc3QKKyAgICAgIGZhaWx1cmUgaWYgKm9iaiogaXMgYW4gaW5zdGFuY2Ugb2YgKmNscyouCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydEZhbHNlKGV4cHJbLCBtc2ddKQorICAgICAgICAgICAgICAgZmFpbElmKGV4cHJbLCBtc2ddKQorCisgICAgICBUaGUgaW52ZXJzZSBvZiB0aGUgOm1ldGg6YGFzc2VydFRydWVgIG1ldGhvZCBpcyB0aGUgOm1ldGg6YGFzc2VydEZhbHNlYCBtZXRob2QuCisgICAgICBUaGlzIHNpZ25hbHMgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIHRydWUsIHdpdGggKm1zZyogb3IgOmNvbnN0OmBOb25lYAorICAgICAgZm9yIHRoZSBlcnJvciBtZXNzYWdlLgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICA6bWV0aDpgZmFpbElmYDsgdXNlIDptZXRoOmBhc3NlcnRGYWxzZWAuCisKKworICAgLi4gbWV0aG9kOjogZmFpbChbbXNnXSkKKworICAgICAgU2lnbmFscyBhIHRlc3QgZmFpbHVyZSB1bmNvbmRpdGlvbmFsbHksIHdpdGggKm1zZyogb3IgOmNvbnN0OmBOb25lYCBmb3IKKyAgICAgIHRoZSBlcnJvciBtZXNzYWdlLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZhaWx1cmVFeGNlcHRpb24KKworICAgICAgVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QgbWV0aG9kLiAgSWYgYQorICAgICAgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0byBjYXJyeQorICAgICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbiBvcmRlciB0byAicGxheQorICAgICAgZmFpciIgd2l0aCB0aGUgZnJhbWV3b3JrLiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMKKyAgICAgIDpleGM6YEFzc2VydGlvbkVycm9yYC4KKworCisgICAuLiBhdHRyaWJ1dGU6OiBsb25nTWVzc2FnZQorCisgICAgICBJZiBzZXQgdG8gVHJ1ZSB0aGVuIGFueSBleHBsaWNpdCBmYWlsdXJlIG1lc3NhZ2UgeW91IHBhc3MgaW4gdG8gdGhlCisgICAgICBhc3NlcnQgbWV0aG9kcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vcm1hbCBmYWlsdXJlIG1lc3NhZ2UuCisgICAgICBUaGUgbm9ybWFsIG1lc3NhZ2VzIGNvbnRhaW4gdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3RzIGludm9sdmVkLAorICAgICAgZm9yIGV4YW1wbGUgdGhlIG1lc3NhZ2UgZnJvbSBhc3NlcnRFcXVhbCBzaG93cyB5b3UgdGhlIHJlcHIgb2YgdGhlIHR3bworICAgICAgdW5lcXVhbCBvYmplY3RzLiBTZXR0aW5nIHRoaXMgYXR0cmlidXRlIHRvIFRydWUgYWxsb3dzIHlvdSB0byBoYXZlIGEKKyAgICAgIGN1c3RvbSBlcnJvciBtZXNzYWdlIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgb25lLgorCisgICAgICBUaGlzIGF0dHJpYnV0ZSBkZWZhdWx0cyB0byBGYWxzZSwgbWVhbmluZyB0aGF0IGEgY3VzdG9tIG1lc3NhZ2UgcGFzc2VkCisgICAgICB0byBhbiBhc3NlcnQgbWV0aG9kIHdpbGwgc2lsZW5jZSB0aGUgbm9ybWFsIG1lc3NhZ2UuCisKKyAgICAgIFRoZSBjbGFzcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIGluIGluZGl2aWR1YWwgdGVzdHMgYnkgYXNzaWduaW5nIGFuCisgICAgICBpbnN0YW5jZSBhdHRyaWJ1dGUgdG8gVHJ1ZSBvciBGYWxzZSBiZWZvcmUgY2FsbGluZyB0aGUgYXNzZXJ0IG1ldGhvZHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heERpZmYKKworICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGRpZmZzIG91dHB1dCBieSBhc3NlcnQKKyAgICAgIG1ldGhvZHMgdGhhdCByZXBvcnQgZGlmZnMgb24gZmFpbHVyZS4gSXQgZGVmYXVsdHMgdG8gODAqOCBjaGFyYWN0ZXJzLgorICAgICAgQXNzZXJ0IG1ldGhvZHMgYWZmZWN0ZWQgYnkgdGhpcyBhdHRyaWJ1dGUgYXJlCisgICAgICA6bWV0aDpgYXNzZXJ0U2VxdWVuY2VFcXVhbGAgKGluY2x1ZGluZyBhbGwgdGhlIHNlcXVlbmNlIGNvbXBhcmlzb24KKyAgICAgIG1ldGhvZHMgdGhhdCBkZWxlZ2F0ZSB0byBpdCksIDptZXRoOmBhc3NlcnREaWN0RXF1YWxgIGFuZAorICAgICAgOm1ldGg6YGFzc2VydE11bHRpTGluZUVxdWFsYC4KKworICAgICAgU2V0dGluZyBgYG1heERpZmZgYCB0byBOb25lIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gbWF4aW11bSBsZW5ndGggb2YKKyAgICAgIGRpZmZzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICBUZXN0aW5nIGZyYW1ld29ya3MgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBvbgorICAgdGhlIHRlc3Q6CisKKworICAgLi4gbWV0aG9kOjogY291bnRUZXN0Q2FzZXMoKQorCisgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGlzIHRlc3Qgb2JqZWN0LiAgRm9yCisgICAgICA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgYGAxYGAuCisKKworICAgLi4gbWV0aG9kOjogZGVmYXVsdFRlc3RSZXN1bHQoKQorCisgICAgICBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMKKyAgICAgIHRlc3QgY2FzZSBjbGFzcyAoaWYgbm8gb3RoZXIgcmVzdWx0IGluc3RhbmNlIGlzIHByb3ZpZGVkIHRvIHRoZQorICAgICAgOm1ldGg6YHJ1bmAgbWV0aG9kKS4KKworICAgICAgRm9yIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBhbiBpbnN0YW5jZSBvZgorICAgICAgOmNsYXNzOmBUZXN0UmVzdWx0YDsgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYCBzaG91bGQgb3ZlcnJpZGUgdGhpcworICAgICAgYXMgbmVjZXNzYXJ5LgorCisKKyAgIC4uIG1ldGhvZDo6IGlkKCkKKworICAgICAgUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuICBUaGlzIGlzIHVzdWFsbHkgdGhlCisgICAgICBmdWxsIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kLCBpbmNsdWRpbmcgdGhlIG1vZHVsZSBhbmQgY2xhc3MgbmFtZS4KKworCisgICAuLiBtZXRob2Q6OiBzaG9ydERlc2NyaXB0aW9uKCkKKworICAgICAgUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciA6Y29uc3Q6YE5vbmVgIGlmIG5vIGRlc2NyaXB0aW9uCisgICAgICBoYXMgYmVlbiBwcm92aWRlZC4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kCisgICAgICByZXR1cm5zIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLAorICAgICAgb3IgOmNvbnN0OmBOb25lYC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRUeXBlRXF1YWxpdHlGdW5jKHR5cGVvYmosIGZ1bmN0aW9uKQorCisgICAgICBSZWdpc3RlcnMgYSB0eXBlIHNwZWNpZmljIDptZXRoOmBhc3NlcnRFcXVhbGAgZXF1YWxpdHkgY2hlY2tpbmcKKyAgICAgIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBieSA6bWV0aDpgYXNzZXJ0RXF1YWxgIHdoZW4gYm90aCBvYmplY3RzIGl0IGhhcworICAgICAgYmVlbiBhc2tlZCB0byBjb21wYXJlIGFyZSBleGFjdGx5ICp0eXBlb2JqKiAobm90IHN1YmNsYXNzZXMpLgorICAgICAgKmZ1bmN0aW9uKiBtdXN0IHRha2UgdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFuZCBhIHRoaXJkIG1zZz1Ob25lCisgICAgICBrZXl3b3JkIGFyZ3VtZW50IGp1c3QgYXMgOm1ldGg6YGFzc2VydEVxdWFsYCBkb2VzLiAgSXQgbXVzdCByYWlzZQorICAgICAgYGBzZWxmLmZhaWx1cmVFeGNlcHRpb25gYCB3aGVuIGluZXF1YWxpdHkgYmV0d2VlbiB0aGUgZmlyc3QgdHdvCisgICAgICBwYXJhbWV0ZXJzIGlzIGRldGVjdGVkLgorCisgICAgICBPbmUgZ29vZCB1c2Ugb2YgY3VzdG9tIGVxdWFsaXR5IGNoZWNraW5nIGZ1bmN0aW9ucyBmb3IgYSB0eXBlCisgICAgICBpcyB0byByYWlzZSBgYHNlbGYuZmFpbHVyZUV4Y2VwdGlvbmBgIHdpdGggYW4gZXJyb3IgbWVzc2FnZSB1c2VmdWwKKyAgICAgIGZvciBkZWJ1Z2dpbmcgdGhlIHByb2JsZW0gYnkgZXhwbGFpbmluZyB0aGUgaW5lcXVhbGl0aWVzIGluIGRldGFpbC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogYWRkQ2xlYW51cChmdW5jdGlvblssICphcmdzWywgKiprd2FyZ3NdXSkKKworICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIDptZXRoOmB0ZWFyRG93bmAgdG8gY2xlYW51cCByZXNvdXJjZXMKKyAgICAgIHVzZWQgZHVyaW5nIHRoZSB0ZXN0LiBGdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciB0byB0aGUKKyAgICAgIG9yZGVyIHRoZXkgYXJlIGFkZGVkIChMSUZPKS4gVGhleSBhcmUgY2FsbGVkIHdpdGggYW55IGFyZ3VtZW50cyBhbmQKKyAgICAgIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIDptZXRoOmBhZGRDbGVhbnVwYCB3aGVuIHRoZXkgYXJlCisgICAgICBhZGRlZC4KKworICAgICAgSWYgOm1ldGg6YHNldFVwYCBmYWlscywgbWVhbmluZyB0aGF0IDptZXRoOmB0ZWFyRG93bmAgaXMgbm90IGNhbGxlZCwKKyAgICAgIHRoZW4gYW55IGNsZWFudXAgZnVuY3Rpb25zIGFkZGVkIHdpbGwgc3RpbGwgYmUgY2FsbGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBkb0NsZWFudXBzKCkKKworICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBhZnRlciA6bWV0aDpgdGVhckRvd25gLCBvcgorICAgICAgYWZ0ZXIgOm1ldGg6YHNldFVwYCBpZiA6bWV0aDpgc2V0VXBgIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKyAgICAgIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGFsbCB0aGUgY2xlYW51cCBmdW5jdGlvbnMgYWRkZWQgYnkKKyAgICAgIDptZXRoOmBhZGRDbGVhbnVwYC4gSWYgeW91IG5lZWQgY2xlYW51cCBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkCisgICAgICAqcHJpb3IqIHRvIDptZXRoOmB0ZWFyRG93bmAgdGhlbiB5b3UgY2FuIGNhbGwgOm1ldGg6YGRvQ2xlYW51cHNgCisgICAgICB5b3Vyc2VsZi4KKworICAgICAgOm1ldGg6YGRvQ2xlYW51cHNgIHBvcHMgbWV0aG9kcyBvZmYgdGhlIHN0YWNrIG9mIGNsZWFudXAKKyAgICAgIGZ1bmN0aW9ucyBvbmUgYXQgYSB0aW1lLCBzbyBpdCBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCiAuLiBjbGFzczo6IEZ1bmN0aW9uVGVzdENhc2UodGVzdEZ1bmNbLCBzZXRVcFssIHRlYXJEb3duWywgZGVzY3JpcHRpb25dXV0pCiAKICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgcG9ydGlvbiBvZiB0aGUgOmNsYXNzOmBUZXN0Q2FzZWAgaW50ZXJmYWNlIHdoaWNoCi0gICBhbGxvd3MgdGhlIHRlc3QgcnVubmVyIHRvIGRyaXZlIHRoZSB0ZXN0LCBidXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgbWV0aG9kcyB3aGljaAotICAgdGVzdCBjb2RlIGNhbiB1c2UgdG8gY2hlY2sgYW5kIHJlcG9ydCBlcnJvcnMuIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcwotICAgdXNpbmcgbGVnYWN5IHRlc3QgY29kZSwgYWxsb3dpbmcgaXQgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIGEgOm1vZDpgdW5pdHRlc3RgXAotICAgLWJhc2VkIHRlc3QgZnJhbWV3b3JrLgorICAgYWxsb3dzIHRoZSB0ZXN0IHJ1bm5lciB0byBkcml2ZSB0aGUgdGVzdCwgYnV0IGRvZXMgbm90IHByb3ZpZGUgdGhlIG1ldGhvZHMKKyAgIHdoaWNoIHRlc3QgY29kZSBjYW4gdXNlIHRvIGNoZWNrIGFuZCByZXBvcnQgZXJyb3JzLiAgVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZQorICAgdGVzdCBjYXNlcyB1c2luZyBsZWdhY3kgdGVzdCBjb2RlLCBhbGxvd2luZyBpdCB0byBiZSBpbnRlZ3JhdGVkIGludG8gYQorICAgOm1vZDpgdW5pdHRlc3RgLWJhc2VkIHRlc3QgZnJhbWV3b3JrLgogCiAKKy4uIF90ZXN0c3VpdGUtb2JqZWN0czoKKworR3JvdXBpbmcgdGVzdHMKK35+fn5+fn5+fn5+fn5+CisKIC4uIGNsYXNzOjogVGVzdFN1aXRlKFt0ZXN0c10pCiAKICAgIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBhZ2dyZWdhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIGNhc2VzIGFuZCB0ZXN0IHN1aXRlcy4KQEAgLTQ2NiwyMCArMTI4Niw0MDUgQEAKICAgIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkuIEFkZGl0aW9uYWwgbWV0aG9kcwogICAgYXJlIHByb3ZpZGVkIHRvIGFkZCB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgdG8gdGhlIGNvbGxlY3Rpb24gbGF0ZXIgb24uCiAKKyAgIDpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3RzIGJlaGF2ZSBtdWNoIGxpa2UgOmNsYXNzOmBUZXN0Q2FzZWAgb2JqZWN0cywgZXhjZXB0CisgICB0aGV5IGRvIG5vdCBhY3R1YWxseSBpbXBsZW1lbnQgYSB0ZXN0LiAgSW5zdGVhZCwgdGhleSBhcmUgdXNlZCB0byBhZ2dyZWdhdGUKKyAgIHRlc3RzIGludG8gZ3JvdXBzIG9mIHRlc3RzIHRoYXQgc2hvdWxkIGJlIHJ1biB0b2dldGhlci4gU29tZSBhZGRpdGlvbmFsCisgICBtZXRob2RzIGFyZSBhdmFpbGFibGUgdG8gYWRkIHRlc3RzIHRvIDpjbGFzczpgVGVzdFN1aXRlYCBpbnN0YW5jZXM6CisKKworICAgLi4gbWV0aG9kOjogVGVzdFN1aXRlLmFkZFRlc3QodGVzdCkKKworICAgICAgQWRkIGEgOmNsYXNzOmBUZXN0Q2FzZWAgb3IgOmNsYXNzOmBUZXN0U3VpdGVgIHRvIHRoZSBzdWl0ZS4KKworCisgICAuLiBtZXRob2Q6OiBUZXN0U3VpdGUuYWRkVGVzdHModGVzdHMpCisKKyAgICAgIEFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIDpjbGFzczpgVGVzdFN1aXRlYAorICAgICAgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4KKworICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGl0ZXJhdGluZyBvdmVyICp0ZXN0cyosIGNhbGxpbmcgOm1ldGg6YGFkZFRlc3RgIGZvcgorICAgICAgZWFjaCBlbGVtZW50LgorCisgICA6Y2xhc3M6YFRlc3RTdWl0ZWAgc2hhcmVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3aXRoIDpjbGFzczpgVGVzdENhc2VgOgorCisKKyAgIC4uIG1ldGhvZDo6IHJ1bihyZXN1bHQpCisKKyAgICAgIFJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvIHRoZQorICAgICAgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyAqcmVzdWx0Ki4gIE5vdGUgdGhhdCB1bmxpa2UKKyAgICAgIDptZXRoOmBUZXN0Q2FzZS5ydW5gLCA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAgcmVxdWlyZXMgdGhlIHJlc3VsdCBvYmplY3QgdG8KKyAgICAgIGJlIHBhc3NlZCBpbi4KKworCisgICAuLiBtZXRob2Q6OiBkZWJ1ZygpCisKKyAgICAgIFJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUgd2l0aG91dCBjb2xsZWN0aW5nIHRoZQorICAgICAgcmVzdWx0LiBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgdGVzdCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZQorICAgICAgY2FsbGVyIGFuZCBjYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJ1bm5pbmcgdGVzdHMgdW5kZXIgYSBkZWJ1Z2dlci4KKworCisgICAuLiBtZXRob2Q6OiBjb3VudFRlc3RDYXNlcygpCisKKyAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGVzdCBvYmplY3QsIGluY2x1ZGluZyBhbGwKKyAgICAgIGluZGl2aWR1YWwgdGVzdHMgYW5kIHN1Yi1zdWl0ZXMuCisKKworICAgLi4gbWV0aG9kOjogX19pdGVyX18oKQorCisgICAgICBUZXN0cyBncm91cGVkIGJ5IGEgOmNsYXNzOmBUZXN0U3VpdGVgIGFyZSBhbHdheXMgYWNjZXNzZWQgYnkgaXRlcmF0aW9uLgorICAgICAgU3ViY2xhc3NlcyBjYW4gbGF6aWx5IHByb3ZpZGUgdGVzdHMgYnkgb3ZlcnJpZGluZyA6bWV0aDpgX19pdGVyX19gLiBOb3RlCisgICAgICB0aGF0IHRoaXMgbWV0aG9kIG1heWJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIG9uIGEgc2luZ2xlIHN1aXRlCisgICAgICAoZm9yIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KQorICAgICAgc28gdGhlIHRlc3RzIHJldHVybmVkIG11c3QgYmUgdGhlIHNhbWUgZm9yIHJlcGVhdGVkIGl0ZXJhdGlvbnMuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYWNjZXNzZWQgdGVzdHMgZGlyZWN0bHkgcmF0aGVyCisgICAgICAgICB0aGFuIHRocm91Z2ggaXRlcmF0aW9uLCBzbyBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2Agd2Fzbid0IHN1ZmZpY2llbnQKKyAgICAgICAgIGZvciBwcm92aWRpbmcgdGVzdHMuCisKKyAgIEluIHRoZSB0eXBpY2FsIHVzYWdlIG9mIGEgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdCwgdGhlIDptZXRoOmBydW5gIG1ldGhvZAorICAgaXMgaW52b2tlZCBieSBhIDpjbGFzczpgVGVzdFJ1bm5lcmAgcmF0aGVyIHRoYW4gYnkgdGhlIGVuZC11c2VyIHRlc3QgaGFybmVzcy4KKworCitMb2FkaW5nIGFuZCBydW5uaW5nIHRlc3RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIC4uIGNsYXNzOjogVGVzdExvYWRlcigpCiAKLSAgIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGVzdHMgYWNjb3JkaW5nIHRvIHZhcmlvdXMgY3JpdGVyaWEgYW5kCi0gICByZXR1cm5pbmcgdGhlbSB3cmFwcGVkIGluIGEgOmNsYXNzOmBUZXN0U3VpdGVgLiBJdCBjYW4gbG9hZCBhbGwgdGVzdHMgd2l0aGluIGEKLSAgIGdpdmVuIG1vZHVsZSBvciA6Y2xhc3M6YFRlc3RDYXNlYCBzdWJjbGFzcy4KKyAgIFRoZSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIHRlc3Qgc3VpdGVzIGZyb20gY2xhc3NlcyBhbmQKKyAgIG1vZHVsZXMuICBOb3JtYWxseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzczsgdGhlCisgICA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIHByb3ZpZGVzIGFuIGluc3RhbmNlIHRoYXQgY2FuIGJlIHNoYXJlZCBhcworICAgYGB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcmBgLiBVc2luZyBhIHN1YmNsYXNzIG9yIGluc3RhbmNlLCBob3dldmVyLCBhbGxvd3MKKyAgIGN1c3RvbWl6YXRpb24gb2Ygc29tZSBjb25maWd1cmFibGUgcHJvcGVydGllcy4KKworICAgOmNsYXNzOmBUZXN0TG9hZGVyYCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAKLS4uIGNsYXNzOjogVGVzdFJlc3VsdCgpCisgICAuLiBtZXRob2Q6OiBsb2FkVGVzdHNGcm9tVGVzdENhc2UodGVzdENhc2VDbGFzcykKIAotICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbXBpbGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggdGVzdHMgaGF2ZSBzdWNjZWVkZWQgYW5kCi0gICB3aGljaCBoYXZlIGZhaWxlZC4KKyAgICAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZAorICAgICAgOmNsYXNzOmB0ZXN0Q2FzZUNsYXNzYC4KIAogCisgICAuLiBtZXRob2Q6OiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKKworICAgICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlLiBUaGlzCisgICAgICBtZXRob2Qgc2VhcmNoZXMgKm1vZHVsZSogZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIDpjbGFzczpgVGVzdENhc2VgIGFuZAorICAgICAgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgZm9yIGVhY2ggdGVzdCBtZXRob2QgZGVmaW5lZCBmb3IgdGhlCisgICAgICBjbGFzcy4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIFdoaWxlIHVzaW5nIGEgaGllcmFyY2h5IG9mIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZCBjbGFzc2VzIGNhbiBiZQorICAgICAgICAgY29udmVuaWVudCBpbiBzaGFyaW5nIGZpeHR1cmVzIGFuZCBoZWxwZXIgZnVuY3Rpb25zLCBkZWZpbmluZyB0ZXN0CisgICAgICAgICBtZXRob2RzIG9uIGJhc2UgY2xhc3NlcyB0aGF0IGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgaW5zdGFudGlhdGVkCisgICAgICAgICBkaXJlY3RseSBkb2VzIG5vdCBwbGF5IHdlbGwgd2l0aCB0aGlzIG1ldGhvZC4gIERvaW5nIHNvLCBob3dldmVyLCBjYW4KKyAgICAgICAgIGJlIHVzZWZ1bCB3aGVuIHRoZSBmaXh0dXJlcyBhcmUgZGlmZmVyZW50IGFuZCBkZWZpbmVkIGluIHN1YmNsYXNzZXMuCisKKyAgICAgIElmIGEgbW9kdWxlIHByb3ZpZGVzIGEgYGBsb2FkX3Rlc3RzYGAgZnVuY3Rpb24gaXQgd2lsbCBiZSBjYWxsZWQgdG8KKyAgICAgIGxvYWQgdGhlIHRlc3RzLiBUaGlzIGFsbG93cyBtb2R1bGVzIHRvIGN1c3RvbWl6ZSB0ZXN0IGxvYWRpbmcuCisgICAgICBUaGlzIGlzIHRoZSBgbG9hZF90ZXN0cyBwcm90b2NvbGBfLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgICAgU3VwcG9ydCBmb3IgYGBsb2FkX3Rlc3RzYGAgYWRkZWQuCisKKworICAgLi4gbWV0aG9kOjogbG9hZFRlc3RzRnJvbU5hbWUobmFtZVssIG1vZHVsZV0pCisKKyAgICAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBnaXZlbiBhIHN0cmluZyBzcGVjaWZpZXIuCisKKyAgICAgIFRoZSBzcGVjaWZpZXIgKm5hbWUqIGlzIGEgImRvdHRlZCBuYW1lIiB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0byBhCisgICAgICBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgYQorICAgICAgOmNsYXNzOmBUZXN0U3VpdGVgIGluc3RhbmNlLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIG9yIDpjbGFzczpgVGVzdFN1aXRlYCBpbnN0YW5jZS4gIFRoZXNlIGNoZWNrcyBhcmUKKyAgICAgIGFwcGxpZWQgaW4gdGhlIG9yZGVyIGxpc3RlZCBoZXJlOyB0aGF0IGlzLCBhIG1ldGhvZCBvbiBhIHBvc3NpYmxlIHRlc3QKKyAgICAgIGNhc2UgY2xhc3Mgd2lsbCBiZSBwaWNrZWQgdXAgYXMgImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiwKKyAgICAgIHJhdGhlciB0aGFuICJhIGNhbGxhYmxlIG9iamVjdCIuCisKKyAgICAgIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIG1vZHVsZSA6bW9kOmBTYW1wbGVUZXN0c2AgY29udGFpbmluZyBhCisgICAgICA6Y2xhc3M6YFRlc3RDYXNlYFwgLWRlcml2ZWQgY2xhc3MgOmNsYXNzOmBTYW1wbGVUZXN0Q2FzZWAgd2l0aCB0aHJlZSB0ZXN0CisgICAgICBtZXRob2RzICg6bWV0aDpgdGVzdF9vbmVgLCA6bWV0aDpgdGVzdF90d29gLCBhbmQgOm1ldGg6YHRlc3RfdGhyZWVgKSwgdGhlCisgICAgICBzcGVjaWZpZXIgYGAnU2FtcGxlVGVzdHMuU2FtcGxlVGVzdENhc2UnYGAgd291bGQgY2F1c2UgdGhpcyBtZXRob2QgdG8KKyAgICAgIHJldHVybiBhIHN1aXRlIHdoaWNoIHdpbGwgcnVuIGFsbCB0aHJlZSB0ZXN0IG1ldGhvZHMuIFVzaW5nIHRoZSBzcGVjaWZpZXIKKyAgICAgIGBgJ1NhbXBsZVRlc3RzLlNhbXBsZVRlc3RDYXNlLnRlc3RfdHdvJ2BgIHdvdWxkIGNhdXNlIGl0IHRvIHJldHVybiBhIHRlc3QKKyAgICAgIHN1aXRlIHdoaWNoIHdpbGwgcnVuIG9ubHkgdGhlIDptZXRoOmB0ZXN0X3R3b2AgdGVzdCBtZXRob2QuIFRoZSBzcGVjaWZpZXIKKyAgICAgIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGltcG9ydGVkOyB0aGV5IHdpbGwKKyAgICAgIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QuCisKKyAgICAgIFRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyAqbmFtZSogcmVsYXRpdmUgdG8gdGhlIGdpdmVuICptb2R1bGUqLgorCisKKyAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21OYW1lcyhuYW1lc1ssIG1vZHVsZV0pCisKKyAgICAgIFNpbWlsYXIgdG8gOm1ldGg6YGxvYWRUZXN0c0Zyb21OYW1lYCwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyCisgICAgICB0aGFuIGEgc2luZ2xlIG5hbWUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgdGVzdCBzdWl0ZSB3aGljaCBzdXBwb3J0cyBhbGwKKyAgICAgIHRoZSB0ZXN0cyBkZWZpbmVkIGZvciBlYWNoIG5hbWUuCisKKworICAgLi4gbWV0aG9kOjogZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQorCisgICAgICBSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiAqdGVzdENhc2VDbGFzcyo7CisgICAgICB0aGlzIHNob3VsZCBiZSBhIHN1YmNsYXNzIG9mIDpjbGFzczpgVGVzdENhc2VgLgorCisKKyAgIC4uIG1ldGhvZDo6IGRpc2NvdmVyKHN0YXJ0X2RpciwgcGF0dGVybj0ndGVzdCoucHknLCB0b3BfbGV2ZWxfZGlyPU5vbmUpCisKKyAgICAgIEZpbmQgYW5kIHJldHVybiBhbGwgdGVzdCBtb2R1bGVzIGZyb20gdGhlIHNwZWNpZmllZCBzdGFydCBkaXJlY3RvcnksCisgICAgICByZWN1cnNpbmcgaW50byBzdWJkaXJlY3RvcmllcyB0byBmaW5kIHRoZW0uIE9ubHkgdGVzdCBmaWxlcyB0aGF0IG1hdGNoCisgICAgICAqcGF0dGVybiogd2lsbCBiZSBsb2FkZWQuIChVc2luZyBzaGVsbCBzdHlsZSBwYXR0ZXJuIG1hdGNoaW5nLikgT25seQorICAgICAgbW9kdWxlIG5hbWVzIHRoYXQgYXJlIGltcG9ydGFibGUgKGkuZS4gYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycykgd2lsbAorICAgICAgYmUgbG9hZGVkLgorCisgICAgICBBbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHByb2plY3QuIElmCisgICAgICB0aGUgc3RhcnQgZGlyZWN0b3J5IGlzIG5vdCB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSB0aGVuIHRoZSB0b3AgbGV2ZWwKKyAgICAgIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LgorCisgICAgICBJZiBpbXBvcnRpbmcgYSBtb2R1bGUgZmFpbHMsIGZvciBleGFtcGxlIGR1ZSB0byBhIHN5bnRheCBlcnJvciwgdGhlbiB0aGlzCisgICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4KKworICAgICAgSWYgYSB0ZXN0IHBhY2thZ2UgbmFtZSAoZGlyZWN0b3J5IHdpdGggOmZpbGU6YF9faW5pdF9fLnB5YCkgbWF0Y2hlcyB0aGUKKyAgICAgIHBhdHRlcm4gdGhlbiB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgYGBsb2FkX3Rlc3RzYGAKKyAgICAgIGZ1bmN0aW9uLiBJZiB0aGlzIGV4aXN0cyB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggKmxvYWRlciosICp0ZXN0cyosCisgICAgICAqcGF0dGVybiouCisKKyAgICAgIElmIGxvYWRfdGVzdHMgZXhpc3RzIHRoZW4gZGlzY292ZXJ5IGRvZXMgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAorICAgICAgYGBsb2FkX3Rlc3RzYGAgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYWxsIHRlc3RzIGluIHRoZSBwYWNrYWdlLgorCisgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRlbHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdAorICAgICAgcGFja2FnZXMgY2FuIGNvbnRpbnVlIGRpc2NvdmVyeSB0aGVtc2VsdmVzLiAqdG9wX2xldmVsX2RpciogaXMgc3RvcmVkIHNvCisgICAgICBgYGxvYWRfdGVzdHNgYCBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0bworICAgICAgYGBsb2FkZXIuZGlzY292ZXIoKWBgLgorCisgICAgICAqc3RhcnRfZGlyKiBjYW4gYmUgYSBkb3R0ZWQgbW9kdWxlIG5hbWUgYXMgd2VsbCBhcyBhIGRpcmVjdG9yeS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBvZiBhIDpjbGFzczpgVGVzdExvYWRlcmAgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5CisgICBzdWJjbGFzc2luZyBvciBhc3NpZ25tZW50IG9uIGFuIGluc3RhbmNlOgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRlc3RNZXRob2RQcmVmaXgKKworICAgICAgU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIHRlc3QKKyAgICAgIG1ldGhvZHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYCd0ZXN0J2BgLgorCisgICAgICBUaGlzIGFmZmVjdHMgOm1ldGg6YGdldFRlc3RDYXNlTmFtZXNgIGFuZCBhbGwgdGhlIDptZXRoOmBsb2FkVGVzdHNGcm9tXCpgCisgICAgICBtZXRob2RzLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNvcnRUZXN0TWV0aG9kc1VzaW5nCisKKyAgICAgIEZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KKyAgICAgIDptZXRoOmBnZXRUZXN0Q2FzZU5hbWVzYCBhbmQgYWxsIHRoZSA6bWV0aDpgbG9hZFRlc3RzRnJvbVwqYCBtZXRob2RzLiBUaGUKKyAgICAgIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIDpmdW5jOmBjbXBgIGZ1bmN0aW9uOyB0aGUgYXR0cmlidXRlIGNhbiBhbHNvCisgICAgICBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYCB0byBkaXNhYmxlIHRoZSBzb3J0LgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN1aXRlQ2xhc3MKKworICAgICAgQ2FsbGFibGUgb2JqZWN0IHRoYXQgY29uc3RydWN0cyBhIHRlc3Qgc3VpdGUgZnJvbSBhIGxpc3Qgb2YgdGVzdHMuIE5vCisgICAgICBtZXRob2RzIG9uIHRoZSByZXN1bHRpbmcgb2JqZWN0IGFyZSBuZWVkZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUKKyAgICAgIDpjbGFzczpgVGVzdFN1aXRlYCBjbGFzcy4KKworICAgICAgVGhpcyBhZmZlY3RzIGFsbCB0aGUgOm1ldGg6YGxvYWRUZXN0c0Zyb21cKmAgbWV0aG9kcy4KKworCisuLiBjbGFzczo6IFRlc3RSZXN1bHQKKworICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNvbXBpbGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggdGVzdHMgaGF2ZSBzdWNjZWVkZWQKKyAgIGFuZCB3aGljaCBoYXZlIGZhaWxlZC4KKworICAgQSA6Y2xhc3M6YFRlc3RSZXN1bHRgIG9iamVjdCBzdG9yZXMgdGhlIHJlc3VsdHMgb2YgYSBzZXQgb2YgdGVzdHMuICBUaGUKKyAgIDpjbGFzczpgVGVzdENhc2VgIGFuZCA6Y2xhc3M6YFRlc3RTdWl0ZWAgY2xhc3NlcyBlbnN1cmUgdGhhdCByZXN1bHRzIGFyZQorICAgcHJvcGVybHkgcmVjb3JkZWQ7IHRlc3QgYXV0aG9ycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCByZWNvcmRpbmcgdGhlCisgICBvdXRjb21lIG9mIHRlc3RzLgorCisgICBUZXN0aW5nIGZyYW1ld29ya3MgYnVpbHQgb24gdG9wIG9mIDptb2Q6YHVuaXR0ZXN0YCBtYXkgd2FudCBhY2Nlc3MgdG8gdGhlCisgICA6Y2xhc3M6YFRlc3RSZXN1bHRgIG9iamVjdCBnZW5lcmF0ZWQgYnkgcnVubmluZyBhIHNldCBvZiB0ZXN0cyBmb3IgcmVwb3J0aW5nCisgICBwdXJwb3NlczsgYSA6Y2xhc3M6YFRlc3RSZXN1bHRgIGluc3RhbmNlIGlzIHJldHVybmVkIGJ5IHRoZQorICAgOm1ldGg6YFRlc3RSdW5uZXIucnVuYCBtZXRob2QgZm9yIHRoaXMgcHVycG9zZS4KKworICAgOmNsYXNzOmBUZXN0UmVzdWx0YCBpbnN0YW5jZXMgaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgdGhhdCB3aWxsIGJlIG9mCisgICBpbnRlcmVzdCB3aGVuIGluc3BlY3RpbmcgdGhlIHJlc3VsdHMgb2YgcnVubmluZyBhIHNldCBvZiB0ZXN0czoKKworCisgICAuLiBhdHRyaWJ1dGU6OiBlcnJvcnMKKworICAgICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzCisgICAgICBob2xkaW5nIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICAgdW5leHBlY3RlZCBleGNlcHRpb24uCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4yCisgICAgICAgICBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJlc3VsdHMuCisKKworICAgLi4gYXR0cmlidXRlOjogZmFpbHVyZXMKKworICAgICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzCisgICAgICBob2xkaW5nIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZQorICAgICAgd2FzIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSA6bWV0aDpgVGVzdENhc2UuZmFpbFwqYCBvcgorICAgICAgOm1ldGg6YFRlc3RDYXNlLmFzc2VydFwqYCBtZXRob2RzLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMgorICAgICAgICAgQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZCBvZiA6ZnVuYzpgc3lzLmV4Y19pbmZvYCByZXN1bHRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBza2lwcGVkCisKKyAgICAgIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcyBhbmQgc3RyaW5ncworICAgICAgaG9sZGluZyB0aGUgcmVhc29uIGZvciBza2lwcGluZyB0aGUgdGVzdC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKyAgIC4uIGF0dHJpYnV0ZTo6IGV4cGVjdGVkRmFpbHVyZXMKKworICAgICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzCisgICAgICBob2xkaW5nIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiAgRWFjaCB0dXBsZSByZXByZXNlbnRzIGFuIGV4cGVjdGVkIGZhaWx1cmUKKyAgICAgIG9mIHRoZSB0ZXN0IGNhc2UuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHVuZXhwZWN0ZWRTdWNjZXNzZXMKKworICAgICAgQSBsaXN0IGNvbnRhaW5pbmcgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIHRoYXQgd2VyZSBtYXJrZWQgYXMgZXhwZWN0ZWQKKyAgICAgIGZhaWx1cmVzLCBidXQgc3VjY2VlZGVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaG91bGRTdG9wCisKKyAgICAgIFNldCB0byBgYFRydWVgYCB3aGVuIHRoZSBleGVjdXRpb24gb2YgdGVzdHMgc2hvdWxkIHN0b3AgYnkgOm1ldGg6YHN0b3BgLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRlc3RzUnVuCisKKyAgICAgIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4KKworCisgICAuLiBhdHRyaWJ1dGU6OiBidWZmZXIKKworICAgICAgSWYgc2V0IHRvIHRydWUsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCB3aWxsIGJlIGJ1ZmZlcmVkIGluIGJldHdlZW4KKyAgICAgIDptZXRoOmBzdGFydFRlc3RgIGFuZCA6bWV0aDpgc3RvcFRlc3RgIGJlaW5nIGNhbGxlZC4gQ29sbGVjdGVkIG91dHB1dCB3aWxsCisgICAgICBvbmx5IGJlIGVjaG9lZCBvbnRvIHRoZSByZWFsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBpZiB0aGUgdGVzdAorICAgICAgZmFpbHMgb3IgZXJyb3JzLiBBbnkgb3V0cHV0IGlzIGFsc28gYXR0YWNoZWQgdG8gdGhlIGZhaWx1cmUgLyBlcnJvciBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBhdHRyaWJ1dGU6OiBmYWlsZmFzdAorCisgICAgICBJZiBzZXQgdG8gdHJ1ZSA6bWV0aDpgc3RvcGAgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGZpcnN0IGZhaWx1cmUgb3IgZXJyb3IsCisgICAgICBoYWx0aW5nIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworICAgLi4gbWV0aG9kOjogd2FzU3VjY2Vzc2Z1bCgpCisKKyAgICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLCBvdGhlcndpc2UgcmV0dXJucworICAgICAgOmNvbnN0OmBGYWxzZWAuCisKKworICAgLi4gbWV0aG9kOjogc3RvcCgpCisKKyAgICAgIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZyBydW4gc2hvdWxkCisgICAgICBiZSBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIDphdHRyOmBzaG91bGRTdG9wYCBhdHRyaWJ1dGUgdG8gOmNvbnN0OmBUcnVlYC4KKyAgICAgIDpjbGFzczpgVGVzdFJ1bm5lcmAgb2JqZWN0cyBzaG91bGQgcmVzcGVjdCB0aGlzIGZsYWcgYW5kIHJldHVybiB3aXRob3V0CisgICAgICBydW5uaW5nIGFueSBhZGRpdGlvbmFsIHRlc3RzLgorCisgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBmZWF0dXJlIGlzIHVzZWQgYnkgdGhlIDpjbGFzczpgVGV4dFRlc3RSdW5uZXJgIGNsYXNzIHRvCisgICAgICBzdG9wIHRoZSB0ZXN0IGZyYW1ld29yayB3aGVuIHRoZSB1c2VyIHNpZ25hbHMgYW4gaW50ZXJydXB0IGZyb20gdGhlCisgICAgICBrZXlib2FyZC4gIEludGVyYWN0aXZlIHRvb2xzIHdoaWNoIHByb3ZpZGUgOmNsYXNzOmBUZXN0UnVubmVyYAorICAgICAgaW1wbGVtZW50YXRpb25zIGNhbiB1c2UgdGhpcyBpbiBhIHNpbWlsYXIgbWFubmVyLgorCisgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgdGhlIDpjbGFzczpgVGVzdFJlc3VsdGAgY2xhc3MgYXJlIHVzZWQgdG8gbWFpbnRhaW4KKyAgIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBtYXkgYmUgZXh0ZW5kZWQgaW4gc3ViY2xhc3NlcyB0byBzdXBwb3J0CisgICBhZGRpdGlvbmFsIHJlcG9ydGluZyByZXF1aXJlbWVudHMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gYnVpbGRpbmcKKyAgIHRvb2xzIHdoaWNoIHN1cHBvcnQgaW50ZXJhY3RpdmUgcmVwb3J0aW5nIHdoaWxlIHRlc3RzIGFyZSBiZWluZyBydW4uCisKKworICAgLi4gbWV0aG9kOjogc3RhcnRUZXN0KHRlc3QpCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIGlzIGFib3V0IHRvIGJlIHJ1bi4KKworICAgLi4gbWV0aG9kOjogc3RvcFRlc3QodGVzdCkKKworICAgICAgQ2FsbGVkIGFmdGVyIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mIHRoZQorICAgICAgb3V0Y29tZS4KKworICAgLi4gbWV0aG9kOjogc3RhcnRUZXN0UnVuKHRlc3QpCisKKyAgICAgIENhbGxlZCBvbmNlIGJlZm9yZSBhbnkgdGVzdHMgYXJlIGV4ZWN1dGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBzdG9wVGVzdFJ1bih0ZXN0KQorCisgICAgICBDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBhZGRFcnJvcih0ZXN0LCBlcnIpCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIHJhaXNlcyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAqZXJyKiBpcyBhCisgICAgICB0dXBsZSBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYDogYGAodHlwZSwgdmFsdWUsCisgICAgICB0cmFjZWJhY2spYGAuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFwcGVuZHMgYSB0dXBsZSBgYCh0ZXN0LCBmb3JtYXR0ZWRfZXJyKWBgIHRvCisgICAgICB0aGUgaW5zdGFuY2UncyA6YXR0cjpgZXJyb3JzYCBhdHRyaWJ1dGUsIHdoZXJlICpmb3JtYXR0ZWRfZXJyKiBpcyBhCisgICAgICBmb3JtYXR0ZWQgdHJhY2ViYWNrIGRlcml2ZWQgZnJvbSAqZXJyKi4KKworCisgICAuLiBtZXRob2Q6OiBhZGRGYWlsdXJlKHRlc3QsIGVycikKKworICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogc2lnbmFscyBhIGZhaWx1cmUuICplcnIqIGlzIGEgdHVwbGUgb2YKKyAgICAgIHRoZSBmb3JtIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIGEgdHVwbGUgYGAodGVzdCwgZm9ybWF0dGVkX2VycilgYCB0bworICAgICAgdGhlIGluc3RhbmNlJ3MgOmF0dHI6YGZhaWx1cmVzYCBhdHRyaWJ1dGUsIHdoZXJlICpmb3JtYXR0ZWRfZXJyKiBpcyBhCisgICAgICBmb3JtYXR0ZWQgdHJhY2ViYWNrIGRlcml2ZWQgZnJvbSAqZXJyKi4KKworCisgICAuLiBtZXRob2Q6OiBhZGRTdWNjZXNzKHRlc3QpCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIHN1Y2NlZWRzLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCisKKworICAgLi4gbWV0aG9kOjogYWRkU2tpcCh0ZXN0LCByZWFzb24pCisKKyAgICAgIENhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIGlzIHNraXBwZWQuICAqcmVhc29uKiBpcyB0aGUgcmVhc29uIHRoZQorICAgICAgdGVzdCBnYXZlIGZvciBza2lwcGluZy4KKworICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwZW5kcyBhIHR1cGxlIGBgKHRlc3QsIHJlYXNvbilgYCB0byB0aGUKKyAgICAgIGluc3RhbmNlJ3MgOmF0dHI6YHNraXBwZWRgIGF0dHJpYnV0ZS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRFeHBlY3RlZEZhaWx1cmUodGVzdCwgZXJyKQorCisgICAgICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiBmYWlscywgYnV0IHdhcyBtYXJrZWQgd2l0aCB0aGUKKyAgICAgIDpmdW5jOmBleHBlY3RlZEZhaWx1cmVgIGRlY29yYXRvci4KKworICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXBwZW5kcyBhIHR1cGxlIGBgKHRlc3QsIGZvcm1hdHRlZF9lcnIpYGAgdG8KKyAgICAgIHRoZSBpbnN0YW5jZSdzIDphdHRyOmBleHBlY3RlZEZhaWx1cmVzYCBhdHRyaWJ1dGUsIHdoZXJlICpmb3JtYXR0ZWRfZXJyKgorICAgICAgaXMgYSBmb3JtYXR0ZWQgdHJhY2ViYWNrIGRlcml2ZWQgZnJvbSAqZXJyKi4KKworCisgICAuLiBtZXRob2Q6OiBhZGRVbmV4cGVjdGVkU3VjY2Vzcyh0ZXN0KQorCisgICAgICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiB3YXMgbWFya2VkIHdpdGggdGhlCisgICAgICA6ZnVuYzpgZXhwZWN0ZWRGYWlsdXJlYCBkZWNvcmF0b3IsIGJ1dCBzdWNjZWVkZWQuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFwcGVuZHMgdGhlIHRlc3QgdG8gdGhlIGluc3RhbmNlJ3MKKyAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCisKKy4uIGNsYXNzOjogVGV4dFRlc3RSZXN1bHQoc3RyZWFtLCBkZXNjcmlwdGlvbnMsIHZlcmJvc2l0eSkKKworICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBUZXN0UmVzdWx0YCB1c2VkIGJ5IHRoZQorICAgIDpjbGFzczpgVGV4dFRlc3RSdW5uZXJgLgorCisgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisgICAgICAgIFRoaXMgY2xhc3Mgd2FzIHByZXZpb3VzbHkgbmFtZWQgYGBfVGV4dFRlc3RSZXN1bHRgYC4gVGhlIG9sZCBuYW1lIHN0aWxsCisgICAgICAgIGV4aXN0cyBhcyBhbiBhbGlhcyBidXQgaXMgZGVwcmVjYXRlZC4KKwogLi4gZGF0YTo6IGRlZmF1bHRUZXN0TG9hZGVyCiAKICAgIEluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNsYXNzIGludGVuZGVkIHRvIGJlIHNoYXJlZC4gIElmIG5vCkBAIC00ODcsMTQgKzE2OTIsMjcgQEAKICAgIGluc3RlYWQgb2YgcmVwZWF0ZWRseSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzLgogCiAKLS4uIGNsYXNzOjogVGV4dFRlc3RSdW5uZXIoW3N0cmVhbVssIGRlc2NyaXB0aW9uc1ssIHZlcmJvc2l0eV1dXSkKKy4uIGNsYXNzOjogVGV4dFRlc3RSdW5uZXIoW3N0cmVhbVssIGRlc2NyaXB0aW9uc1ssIHZlcmJvc2l0eV0sIFtyZXN1bHRjbGFzc11dXSkKIAogICAgQSBiYXNpYyB0ZXN0IHJ1bm5lciBpbXBsZW1lbnRhdGlvbiB3aGljaCBwcmludHMgcmVzdWx0cyBvbiBzdGFuZGFyZCBlcnJvci4gIEl0CiAgICBoYXMgYSBmZXcgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMsIGJ1dCBpcyBlc3NlbnRpYWxseSB2ZXJ5IHNpbXBsZS4gIEdyYXBoaWNhbAogICAgYXBwbGljYXRpb25zIHdoaWNoIHJ1biB0ZXN0IHN1aXRlcyBzaG91bGQgcHJvdmlkZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zLgogCisgICAuLiBtZXRob2Q6OiBfbWFrZVJlc3VsdCgpCiAKLS4uIGZ1bmN0aW9uOjogbWFpbihbbW9kdWxlWywgZGVmYXVsdFRlc3RbLCBhcmd2WywgdGVzdFJ1bm5lclssIHRlc3RMb2FkZXJdXV1dXSkKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGluc3RhbmNlIG9mIGBgVGVzdFJlc3VsdGBgIHVzZWQgYnkgOm1ldGg6YHJ1bmAuCisgICAgICBJdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4KKyAgICAgIHN1YmNsYXNzZXMgdG8gcHJvdmlkZSBhIGN1c3RvbSBgYFRlc3RSZXN1bHRgYC4KKworICAgICAgYGBfbWFrZVJlc3VsdCgpYGAgaW5zdGFudGlhdGVzIHRoZSBjbGFzcyBvciBjYWxsYWJsZSBwYXNzZWQgaW4gdGhlCisgICAgICBgYFRleHRUZXN0UnVubmVyYGAgY29uc3RydWN0b3IgYXMgdGhlIGBgcmVzdWx0Y2xhc3NgYCBhcmd1bWVudC4gSXQKKyAgICAgIGRlZmF1bHRzIHRvIDpjbGFzczpgVGV4dFRlc3RSZXN1bHRgIGlmIG5vIGBgcmVzdWx0Y2xhc3NgYCBpcyBwcm92aWRlZC4KKyAgICAgIFRoZSByZXN1bHQgY2xhc3MgaXMgaW5zdGFudGlhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6OgorCisgICAgICAgICAgICBzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5CisKKworLi4gZnVuY3Rpb246OiBtYWluKFttb2R1bGVbLCBkZWZhdWx0VGVzdFssIGFyZ3ZbLCB0ZXN0UnVubmVyWywgdGVzdExvYWRlclssIGV4aXRbLCB2ZXJib3NpdHlbLCBmYWlsZmFzdFssIGNhdGNoYnJlYWtbLGJ1ZmZlcl1dXV1dXV1dXV0pCiAKICAgIEEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseSBmb3IgbWFraW5nCiAgICB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuICBUaGUgc2ltcGxlc3QgdXNlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIHRvCkBAIC01MDMsNDQ2ICsxNzIxLDI0MSBAQAogICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICB1bml0dGVzdC5tYWluKCkKIAorICAgWW91IGNhbiBydW4gdGVzdHMgd2l0aCBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGJ5IHBhc3NpbmcgaW4gdGhlIHZlcmJvc2l0eQorICAgYXJndW1lbnQ6OgorCisgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCisKICAgIFRoZSAqdGVzdFJ1bm5lciogYXJndW1lbnQgY2FuIGVpdGhlciBiZSBhIHRlc3QgcnVubmVyIGNsYXNzIG9yIGFuIGFscmVhZHkKLSAgIGNyZWF0ZWQgaW5zdGFuY2Ugb2YgaXQuCisgICBjcmVhdGVkIGluc3RhbmNlIG9mIGl0LiBCeSBkZWZhdWx0IGBgbWFpbmBgIGNhbGxzIDpmdW5jOmBzeXMuZXhpdGAgd2l0aAorICAgYW4gZXhpdCBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSB0ZXN0cyBydW4uCiAKLUluIHNvbWUgY2FzZXMsIHRoZSBleGlzdGluZyB0ZXN0cyBtYXkgaGF2ZSBiZWVuIHdyaXR0ZW4gdXNpbmcgdGhlIDptb2Q6YGRvY3Rlc3RgCi1tb2R1bGUuICBJZiBzbywgdGhhdCBtb2R1bGUgcHJvdmlkZXMgYSAgOmNsYXNzOmBEb2NUZXN0U3VpdGVgIGNsYXNzIHRoYXQgY2FuCi1hdXRvbWF0aWNhbGx5IGJ1aWxkIDpjbGFzczpgdW5pdHRlc3QuVGVzdFN1aXRlYCBpbnN0YW5jZXMgZnJvbSB0aGUgZXhpc3RpbmcKLTptb2Q6YGRvY3Rlc3RgXCAtYmFzZWQgdGVzdHMuCisgICBgYG1haW5gYCBzdXBwb3J0cyBiZWluZyB1c2VkIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIGJ5IHBhc3NpbmcgaW4gdGhlCisgICBhcmd1bWVudCBgYGV4aXQ9RmFsc2VgYC4gVGhpcyBkaXNwbGF5cyB0aGUgcmVzdWx0IG9uIHN0YW5kYXJkIG91dHB1dCB3aXRob3V0CisgICBjYWxsaW5nIDpmdW5jOmBzeXMuZXhpdGA6OgogCi0uLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKKyAgICAgID4+PiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtYWluCisgICAgICA+Pj4gbWFpbihtb2R1bGU9J3Rlc3RfbW9kdWxlJywgZXhpdD1GYWxzZSkKIAorICAgVGhlIGBgZmFpbGZhc3RgYCwgYGBjYXRjaGJyZWFrYGAgYW5kIGBgYnVmZmVyYGAgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lCisgICBlZmZlY3QgYXMgdGhlIHNhbWUtbmFtZSBgY29tbWFuZC1saW5lIG9wdGlvbnNgXy4KIAotLi4gX3Rlc3RjYXNlLW9iamVjdHM6CisgICBDYWxsaW5nIGBgbWFpbmBgIGFjdHVhbGx5IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBgVGVzdFByb2dyYW1gYCBjbGFzcy4KKyAgIFRoaXMgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIHRlc3RzIHJ1biBhcyB0aGUgYGByZXN1bHRgYCBhdHRyaWJ1dGUuCiAKLVRlc3RDYXNlIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICAgICBUaGUgYGBleGl0YGAsIGBgdmVyYm9zaXR5YGAsIGBgZmFpbGZhc3RgYCwgYGBjYXRjaGJyZWFrYGAgYW5kIGBgYnVmZmVyYGAKKyAgICAgIHBhcmFtZXRlcnMgd2VyZSBhZGRlZC4KIAotRWFjaCA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZSByZXByZXNlbnRzIGEgc2luZ2xlIHRlc3QsIGJ1dCBlYWNoIGNvbmNyZXRlCi1zdWJjbGFzcyBtYXkgYmUgdXNlZCB0byBkZWZpbmUgbXVsdGlwbGUgdGVzdHMgLS0tIHRoZSBjb25jcmV0ZSBjbGFzcyByZXByZXNlbnRzCi1hIHNpbmdsZSB0ZXN0IGZpeHR1cmUuICBUaGUgZml4dHVyZSBpcyBjcmVhdGVkIGFuZCBjbGVhbmVkIHVwIGZvciBlYWNoIHRlc3QKLWNhc2UuCiAKLTpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcyBwcm92aWRlIHRocmVlIGdyb3VwcyBvZiBtZXRob2RzOiBvbmUgZ3JvdXAgdXNlZCB0bwotcnVuIHRoZSB0ZXN0LCBhbm90aGVyIHVzZWQgYnkgdGhlIHRlc3QgaW1wbGVtZW50YXRpb24gdG8gY2hlY2sgY29uZGl0aW9ucyBhbmQKLXJlcG9ydCBmYWlsdXJlcywgYW5kIHNvbWUgaW5xdWlyeSBtZXRob2RzIGFsbG93aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXN0Ci1pdHNlbGYgdG8gYmUgZ2F0aGVyZWQuCitsb2FkX3Rlc3RzIFByb3RvY29sCisjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLU1ldGhvZHMgaW4gdGhlIGZpcnN0IGdyb3VwIChydW5uaW5nIHRoZSB0ZXN0KSBhcmU6CisuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAorTW9kdWxlcyBvciBwYWNrYWdlcyBjYW4gY3VzdG9taXplIGhvdyB0ZXN0cyBhcmUgbG9hZGVkIGZyb20gdGhlbSBkdXJpbmcgbm9ybWFsCit0ZXN0IHJ1bnMgb3IgdGVzdCBkaXNjb3ZlcnkgYnkgaW1wbGVtZW50aW5nIGEgZnVuY3Rpb24gY2FsbGVkIGBgbG9hZF90ZXN0c2BgLgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5zZXRVcCgpCitJZiBhIHRlc3QgbW9kdWxlIGRlZmluZXMgYGBsb2FkX3Rlc3RzYGAgaXQgd2lsbCBiZSBjYWxsZWQgYnkKKzptZXRoOmBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGVgIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6OgogCi0gICBNZXRob2QgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHRlc3QgZml4dHVyZS4gIFRoaXMgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZQotICAgY2FsbGluZyB0aGUgdGVzdCBtZXRob2Q7IGFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZAotICAgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYSB0ZXN0IGZhaWx1cmUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKyAgICBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIE5vbmUpCiAKK0l0IHNob3VsZCByZXR1cm4gYSA6Y2xhc3M6YFRlc3RTdWl0ZWAuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLnRlYXJEb3duKCkKKypsb2FkZXIqIGlzIHRoZSBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRlc3RMb2FkZXJgIGRvaW5nIHRoZSBsb2FkaW5nLgorKnN0YW5kYXJkX3Rlc3RzKiBhcmUgdGhlIHRlc3RzIHRoYXQgd291bGQgYmUgbG9hZGVkIGJ5IGRlZmF1bHQgZnJvbSB0aGUKK21vZHVsZS4gSXQgaXMgY29tbW9uIGZvciB0ZXN0IG1vZHVsZXMgdG8gb25seSB3YW50IHRvIGFkZCBvciByZW1vdmUgdGVzdHMKK2Zyb20gdGhlIHN0YW5kYXJkIHNldCBvZiB0ZXN0cy4KK1RoZSB0aGlyZCBhcmd1bWVudCBpcyB1c2VkIHdoZW4gbG9hZGluZyBwYWNrYWdlcyBhcyBwYXJ0IG9mIHRlc3QgZGlzY292ZXJ5LgogCi0gICBNZXRob2QgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0ZXN0IG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgYW5kIHRoZSByZXN1bHQKLSAgIHJlY29yZGVkLiAgVGhpcyBpcyBjYWxsZWQgZXZlbiBpZiB0aGUgdGVzdCBtZXRob2QgcmFpc2VkIGFuIGV4Y2VwdGlvbiwgc28gdGhlCi0gICBpbXBsZW1lbnRhdGlvbiBpbiBzdWJjbGFzc2VzIG1heSBuZWVkIHRvIGJlIHBhcnRpY3VsYXJseSBjYXJlZnVsIGFib3V0IGNoZWNraW5nCi0gICBpbnRlcm5hbCBzdGF0ZS4gIEFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvcgotICAgcmF0aGVyIHRoYW4gYSB0ZXN0IGZhaWx1cmUuICBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZQotICAgOm1ldGg6YHNldFVwYCBzdWNjZWVkcywgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdCBtZXRob2QuIFRoZQotICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCitBIHR5cGljYWwgYGBsb2FkX3Rlc3RzYGAgZnVuY3Rpb24gdGhhdCBsb2FkcyB0ZXN0cyBmcm9tIGEgc3BlY2lmaWMgc2V0IG9mCis6Y2xhc3M6YFRlc3RDYXNlYCBjbGFzc2VzIG1heSBsb29rIGxpa2U6OgogCisgICAgdGVzdF9jYXNlcyA9IChUZXN0Q2FzZTEsIFRlc3RDYXNlMiwgVGVzdENhc2UzKQogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5ydW4oW3Jlc3VsdF0pCisgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgIHN1aXRlID0gVGVzdFN1aXRlKCkKKyAgICAgICAgZm9yIHRlc3RfY2xhc3MgaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHRlc3RzID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZSh0ZXN0X2NsYXNzKQorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHModGVzdHMpCisgICAgICAgIHJldHVybiBzdWl0ZQogCi0gICBSdW4gdGhlIHRlc3QsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzCi0gICAqcmVzdWx0Ki4gIElmICpyZXN1bHQqIGlzIG9taXR0ZWQgb3IgOmNvbnN0OmBOb25lYCwgYSB0ZW1wb3JhcnkgcmVzdWx0IG9iamVjdCBpcwotICAgY3JlYXRlZCAoYnkgY2FsbGluZyB0aGUgOm1ldGg6YGRlZmF1bHRUZXN0Q2FzZWAgbWV0aG9kKSBhbmQgdXNlZDsgdGhpcyByZXN1bHQKLSAgIG9iamVjdCBpcyBub3QgcmV0dXJuZWQgdG8gOm1ldGg6YHJ1bmAncyBjYWxsZXIuCitJZiBkaXNjb3ZlcnkgaXMgc3RhcnRlZCwgZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSBvciBieSBjYWxsaW5nCis6bWV0aDpgVGVzdExvYWRlci5kaXNjb3ZlcmAsIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhIHBhY2thZ2UKK25hbWUgdGhlbiB0aGUgcGFja2FnZSA6ZmlsZTpgX19pbml0X18ucHlgIHdpbGwgYmUgY2hlY2tlZCBmb3IgYGBsb2FkX3Rlc3RzYGAuCiAKLSAgIFRoZSBzYW1lIGVmZmVjdCBtYXkgYmUgaGFkIGJ5IHNpbXBseSBjYWxsaW5nIHRoZSA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZS4KKy4uIG5vdGU6OgogCisgICBUaGUgZGVmYXVsdCBwYXR0ZXJuIGlzICd0ZXN0Ki5weScuIFRoaXMgbWF0Y2hlcyBhbGwgUHl0aG9uIGZpbGVzCisgICB0aGF0IHN0YXJ0IHdpdGggJ3Rlc3QnIGJ1dCAqd29uJ3QqIG1hdGNoIGFueSB0ZXN0IGRpcmVjdG9yaWVzLgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5kZWJ1ZygpCisgICBBIHBhdHRlcm4gbGlrZSAndGVzdConIHdpbGwgbWF0Y2ggdGVzdCBwYWNrYWdlcyBhcyB3ZWxsIGFzCisgICBtb2R1bGVzLgogCi0gICBSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuICBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZCBieQotICAgdGhlIHRlc3QgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyLCBhbmQgY2FuIGJlIHVzZWQgdG8gc3VwcG9ydCBydW5uaW5nCi0gICB0ZXN0cyB1bmRlciBhIGRlYnVnZ2VyLgorSWYgdGhlIHBhY2thZ2UgOmZpbGU6YF9faW5pdF9fLnB5YCBkZWZpbmVzIGBgbG9hZF90ZXN0c2BgIHRoZW4gaXQgd2lsbCBiZQorY2FsbGVkIGFuZCBkaXNjb3Zlcnkgbm90IGNvbnRpbnVlZCBpbnRvIHRoZSBwYWNrYWdlLiBgYGxvYWRfdGVzdHNgYAoraXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6OgogCi1UaGUgdGVzdCBjb2RlIGNhbiB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBjaGVjayBmb3IgYW5kIHJlcG9ydAotZmFpbHVyZXMuCisgICAgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKQogCitUaGlzIHNob3VsZCByZXR1cm4gYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgcmVwcmVzZW50aW5nIGFsbCB0aGUgdGVzdHMKK2Zyb20gdGhlIHBhY2thZ2UuIChgYHN0YW5kYXJkX3Rlc3RzYGAgd2lsbCBvbmx5IGNvbnRhaW4gdGVzdHMKK2NvbGxlY3RlZCBmcm9tIDpmaWxlOmBfX2luaXRfXy5weWAuKQogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5hc3NlcnRfKGV4cHJbLCBtc2ddKQotICAgICAgICAgICAgVGVzdENhc2UuZmFpbFVubGVzcyhleHByWywgbXNnXSkKLSAgICAgICAgICAgIFRlc3RDYXNlLmFzc2VydFRydWUoZXhwclssIG1zZ10pCitCZWNhdXNlIHRoZSBwYXR0ZXJuIGlzIHBhc3NlZCBpbnRvIGBgbG9hZF90ZXN0c2BgIHRoZSBwYWNrYWdlIGlzIGZyZWUgdG8KK2NvbnRpbnVlIChhbmQgcG90ZW50aWFsbHkgbW9kaWZ5KSB0ZXN0IGRpc2NvdmVyeS4gQSAnZG8gbm90aGluZycKK2BgbG9hZF90ZXN0c2BgIGZ1bmN0aW9uIGZvciBhIHRlc3QgcGFja2FnZSB3b3VsZCBsb29rIGxpa2U6OgogCi0gICBTaWduYWwgYSB0ZXN0IGZhaWx1cmUgaWYgKmV4cHIqIGlzIGZhbHNlOyB0aGUgZXhwbGFuYXRpb24gZm9yIHRoZSBlcnJvciB3aWxsIGJlCi0gICAqbXNnKiBpZiBnaXZlbiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgOmNvbnN0OmBOb25lYC4KKyAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICAgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXRoaXNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4pCisgICAgICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cwogCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmFzc2VydEVxdWFsKGZpcnN0LCBzZWNvbmRbLCBtc2ddKQotICAgICAgICAgICAgVGVzdENhc2UuZmFpbFVubGVzc0VxdWFsKGZpcnN0LCBzZWNvbmRbLCBtc2ddKQorQ2xhc3MgYW5kIE1vZHVsZSBGaXh0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGVxdWFsLiAgSWYgdGhlIHZhbHVlcyBkbyBub3QgY29tcGFyZSBlcXVhbCwKLSAgIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IgOmNvbnN0OmBOb25lYC4gIE5vdGUKLSAgIHRoYXQgdXNpbmcgOm1ldGg6YGZhaWxVbmxlc3NFcXVhbGAgaW1wcm92ZXMgdXBvbiBkb2luZyB0aGUgY29tcGFyaXNvbiBhcyB0aGUKLSAgIGZpcnN0IHBhcmFtZXRlciB0byA6bWV0aDpgZmFpbFVubGVzc2A6ICB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1zZyogY2FuIGJlCi0gICBjb21wdXRlZCB0byBpbmNsdWRlIHJlcHJlc2VudGF0aW9ucyBvZiBib3RoICpmaXJzdCogYW5kICpzZWNvbmQqLgorQ2xhc3MgYW5kIG1vZHVsZSBsZXZlbCBmaXh0dXJlcyBhcmUgaW1wbGVtZW50ZWQgaW4gOmNsYXNzOmBUZXN0U3VpdGVgLiBXaGVuCit0aGUgdGVzdCBzdWl0ZSBlbmNvdW50ZXJzIGEgdGVzdCBmcm9tIGEgbmV3IGNsYXNzIHRoZW4gOm1ldGg6YHRlYXJEb3duQ2xhc3NgCitmcm9tIHRoZSBwcmV2aW91cyBjbGFzcyAoaWYgdGhlcmUgaXMgb25lKSBpcyBjYWxsZWQsIGZvbGxvd2VkIGJ5Cis6bWV0aDpgc2V0VXBDbGFzc2AgZnJvbSB0aGUgbmV3IGNsYXNzLgogCitTaW1pbGFybHkgaWYgYSB0ZXN0IGlzIGZyb20gYSBkaWZmZXJlbnQgbW9kdWxlIGZyb20gdGhlIHByZXZpb3VzIHRlc3QgdGhlbgorYGB0ZWFyRG93bk1vZHVsZWBgIGZyb20gdGhlIHByZXZpb3VzIG1vZHVsZSBpcyBydW4sIGZvbGxvd2VkIGJ5CitgYHNldFVwTW9kdWxlYGAgZnJvbSB0aGUgbmV3IG1vZHVsZS4KIAotLi4gbWV0aG9kOjogVGVzdENhc2UuYXNzZXJ0Tm90RXF1YWwoZmlyc3QsIHNlY29uZFssIG1zZ10pCi0gICAgICAgICAgICBUZXN0Q2FzZS5mYWlsSWZFcXVhbChmaXJzdCwgc2Vjb25kWywgbXNnXSkKK0FmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBydW4gdGhlIGZpbmFsIGBgdGVhckRvd25DbGFzc2BgIGFuZAorYGB0ZWFyRG93bk1vZHVsZWBgIGFyZSBydW4uCiAKLSAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgbm90IGVxdWFsLiAgSWYgdGhlIHZhbHVlcyBkbyBjb21wYXJlIGVxdWFsLAotICAgdGhlIHRlc3Qgd2lsbCBmYWlsIHdpdGggdGhlIGV4cGxhbmF0aW9uIGdpdmVuIGJ5ICptc2cqLCBvciA6Y29uc3Q6YE5vbmVgLiAgTm90ZQotICAgdGhhdCB1c2luZyA6bWV0aDpgZmFpbElmRXF1YWxgIGltcHJvdmVzIHVwb24gZG9pbmcgdGhlIGNvbXBhcmlzb24gYXMgdGhlIGZpcnN0Ci0gICBwYXJhbWV0ZXIgdG8gOm1ldGg6YGZhaWxVbmxlc3NgIGlzIHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICptc2cqIGNhbiBiZQotICAgY29tcHV0ZWQgdG8gaW5jbHVkZSByZXByZXNlbnRhdGlvbnMgb2YgYm90aCAqZmlyc3QqIGFuZCAqc2Vjb25kKi4KK05vdGUgdGhhdCBzaGFyZWQgZml4dHVyZXMgZG8gbm90IHBsYXkgd2VsbCB3aXRoIFtwb3RlbnRpYWxdIGZlYXR1cmVzIGxpa2UgdGVzdAorcGFyYWxsZWxpemF0aW9uIGFuZCB0aGV5IGJyZWFrIHRlc3QgaXNvbGF0aW9uLiBUaGV5IHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZS4KIAorVGhlIGRlZmF1bHQgb3JkZXJpbmcgb2YgdGVzdHMgY3JlYXRlZCBieSB0aGUgdW5pdHRlc3QgdGVzdCBsb2FkZXJzIGlzIHRvIGdyb3VwCithbGwgdGVzdHMgZnJvbSB0aGUgc2FtZSBtb2R1bGVzIGFuZCBjbGFzc2VzIHRvZ2V0aGVyLiBUaGlzIHdpbGwgbGVhZCB0bworYGBzZXRVcENsYXNzYGAgLyBgYHNldFVwTW9kdWxlYGAgKGV0YykgYmVpbmcgY2FsbGVkIGV4YWN0bHkgb25jZSBwZXIgY2xhc3MgYW5kCittb2R1bGUuIElmIHlvdSByYW5kb21pemUgdGhlIG9yZGVyLCBzbyB0aGF0IHRlc3RzIGZyb20gZGlmZmVyZW50IG1vZHVsZXMgYW5kCitjbGFzc2VzIGFyZSBhZGphY2VudCB0byBlYWNoIG90aGVyLCB0aGVuIHRoZXNlIHNoYXJlZCBmaXh0dXJlIGZ1bmN0aW9ucyBtYXkgYmUKK2NhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHNpbmdsZSB0ZXN0IHJ1bi4KIAotLi4gbWV0aG9kOjogVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZFssIHBsYWNlc1ssIG1zZ11dKQotICAgICAgICAgICAgVGVzdENhc2UuZmFpbFVubGVzc0FsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmRbLCBwbGFjZXNbLCBtc2ddXSkKK1NoYXJlZCBmaXh0dXJlcyBhcmUgbm90IGludGVuZGVkIHRvIHdvcmsgd2l0aCBzdWl0ZXMgd2l0aCBub24tc3RhbmRhcmQKK29yZGVyaW5nLiBBIGBgQmFzZVRlc3RTdWl0ZWBgIHN0aWxsIGV4aXN0cyBmb3IgZnJhbWV3b3JrcyB0aGF0IGRvbid0IHdhbnQgdG8KK3N1cHBvcnQgc2hhcmVkIGZpeHR1cmVzLgogCi0gICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGFwcHJveGltYXRlbHkgZXF1YWwgYnkgY29tcHV0aW5nIHRoZQotICAgZGlmZmVyZW5jZSwgcm91bmRpbmcgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsICpwbGFjZXMqIChkZWZhdWx0IDcpLAotICAgYW5kIGNvbXBhcmluZyB0byB6ZXJvLgotICAgTm90ZSB0aGF0IGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBpcyBub3QgdGhlIHNhbWUgYXMKLSAgIGNvbXBhcmluZyBhIGdpdmVuIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMuIElmIHRoZSB2YWx1ZXMgZG8gbm90IGNvbXBhcmUKLSAgIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwgd2l0aCB0aGUgZXhwbGFuYXRpb24gZ2l2ZW4gYnkgKm1zZyosIG9yIDpjb25zdDpgTm9uZWAuCitJZiB0aGVyZSBhcmUgYW55IGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBvbmUgb2YgdGhlIHNoYXJlZCBmaXh0dXJlIGZ1bmN0aW9ucwordGhlIHRlc3QgaXMgcmVwb3J0ZWQgYXMgYW4gZXJyb3IuIEJlY2F1c2UgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyB0ZXN0CitpbnN0YW5jZSBhbiBgYF9FcnJvckhvbGRlcmBgIG9iamVjdCAodGhhdCBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIGEKKzpjbGFzczpgVGVzdENhc2VgKSBpcyBjcmVhdGVkIHRvIHJlcHJlc2VudCB0aGUgZXJyb3IuIElmIHlvdSBhcmUganVzdCB1c2luZwordGhlIHN0YW5kYXJkIHVuaXR0ZXN0IHRlc3QgcnVubmVyIHRoZW4gdGhpcyBkZXRhaWwgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpZiB5b3UKK2FyZSBhIGZyYW1ld29yayBhdXRob3IgaXQgbWF5IGJlIHJlbGV2YW50LgogCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmRbLCBwbGFjZXNbLCBtc2ddXSkKLSAgICAgICAgICAgIFRlc3RDYXNlLmZhaWxJZkFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmRbLCBwbGFjZXNbLCBtc2ddXSkKK3NldFVwQ2xhc3MgYW5kIHRlYXJEb3duQ2xhc3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBub3QgYXBwcm94aW1hdGVseSBlcXVhbCBieSBjb21wdXRpbmcgdGhlCi0gICBkaWZmZXJlbmNlLCByb3VuZGluZyB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgKnBsYWNlcyogKGRlZmF1bHQgNyksCi0gICBhbmQgY29tcGFyaW5nIHRvIHplcm8uCi0gICBOb3RlIHRoYXQgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlzIG5vdCB0aGUgc2FtZSBhcwotICAgY29tcGFyaW5nIGEgZ2l2ZW4gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4gSWYgdGhlIHZhbHVlcyBkbyBub3QgY29tcGFyZQotICAgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbCB3aXRoIHRoZSBleHBsYW5hdGlvbiBnaXZlbiBieSAqbXNnKiwgb3IgOmNvbnN0OmBOb25lYC4KK1RoZXNlIG11c3QgYmUgaW1wbGVtZW50ZWQgYXMgY2xhc3MgbWV0aG9kczo6CiAKKyAgICBpbXBvcnQgdW5pdHRlc3QKIAotLi4gbWV0aG9kOjogVGVzdENhc2UuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgY2FsbGFibGUsIC4uLikKLSAgICAgICAgICAgIFRlc3RDYXNlLmZhaWxVbmxlc3NSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgLi4uKQorICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgIGNscy5fY29ubmVjdGlvbiA9IGNyZWF0ZUV4cGVuc2l2ZUNvbm5lY3Rpb25PYmplY3QoKQogCi0gICBUZXN0IHRoYXQgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuICpjYWxsYWJsZSogaXMgY2FsbGVkIHdpdGggYW55IHBvc2l0aW9uYWwKLSAgIG9yIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIGFsc28gcGFzc2VkIHRvIDptZXRoOmBhc3NlcnRSYWlzZXNgLiAgVGhlIHRlc3QKLSAgIHBhc3NlcyBpZiAqZXhjZXB0aW9uKiBpcyByYWlzZWQsIGlzIGFuIGVycm9yIGlmIGFub3RoZXIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgb3IKLSAgIGZhaWxzIGlmIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBUbyBjYXRjaCBhbnkgb2YgYSBncm91cCBvZiBleGNlcHRpb25zLCBhIHR1cGxlCi0gICBjb250YWluaW5nIHRoZSBleGNlcHRpb24gY2xhc3NlcyBtYXkgYmUgcGFzc2VkIGFzICpleGNlcHRpb24qLgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgIGNscy5fY29ubmVjdGlvbi5kZXN0cm95KCkKIAorSWYgeW91IHdhbnQgdGhlIGBgc2V0VXBDbGFzc2BgIGFuZCBgYHRlYXJEb3duQ2xhc3NgYCBvbiBiYXNlIGNsYXNzZXMgY2FsbGVkCit0aGVuIHlvdSBtdXN0IGNhbGwgdXAgdG8gdGhlbSB5b3Vyc2VsZi4gVGhlIGltcGxlbWVudGF0aW9ucyBpbgorOmNsYXNzOmBUZXN0Q2FzZWAgYXJlIGVtcHR5LgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5mYWlsSWYoZXhwclssIG1zZ10pCi0gICAgICAgICAgICBUZXN0Q2FzZS5hc3NlcnRGYWxzZShleHByWywgbXNnXSkKK0lmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgZHVyaW5nIGEgYGBzZXRVcENsYXNzYGAgdGhlbiB0aGUgdGVzdHMgaW4gdGhlIGNsYXNzCithcmUgbm90IHJ1biBhbmQgdGhlIGBgdGVhckRvd25DbGFzc2BgIGlzIG5vdCBydW4uIFNraXBwZWQgY2xhc3NlcyB3aWxsIG5vdAoraGF2ZSBgYHNldFVwQ2xhc3NgYCBvciBgYHRlYXJEb3duQ2xhc3NgYCBydW4uIElmIHRoZSBleGNlcHRpb24gaXMgYQorYGBTa2lwVGVzdGBgIGV4Y2VwdGlvbiB0aGVuIHRoZSBjbGFzcyB3aWxsIGJlIHJlcG9ydGVkIGFzIGhhdmluZyBiZWVuIHNraXBwZWQKK2luc3RlYWQgb2YgYXMgYW4gZXJyb3IuCiAKLSAgIFRoZSBpbnZlcnNlIG9mIHRoZSA6bWV0aDpgZmFpbFVubGVzc2AgbWV0aG9kIGlzIHRoZSA6bWV0aDpgZmFpbElmYCBtZXRob2QuICBUaGlzCi0gICBzaWduYWxzIGEgdGVzdCBmYWlsdXJlIGlmICpleHByKiBpcyB0cnVlLCB3aXRoICptc2cqIG9yIDpjb25zdDpgTm9uZWAgZm9yIHRoZQotICAgZXJyb3IgbWVzc2FnZS4KIAorc2V0VXBNb2R1bGUgYW5kIHRlYXJEb3duTW9kdWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotLi4gbWV0aG9kOjogVGVzdENhc2UuZmFpbChbbXNnXSkKK1RoZXNlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBmdW5jdGlvbnM6OgogCi0gICBTaWduYWxzIGEgdGVzdCBmYWlsdXJlIHVuY29uZGl0aW9uYWxseSwgd2l0aCAqbXNnKiBvciA6Y29uc3Q6YE5vbmVgIGZvciB0aGUKLSAgIGVycm9yIG1lc3NhZ2UuCisgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgIGNyZWF0ZUNvbm5lY3Rpb24oKQogCisgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgIGNsb3NlQ29ubmVjdGlvbigpCiAKLS4uIGF0dHJpYnV0ZTo6IFRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24KK0lmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW4gYSBgYHNldFVwTW9kdWxlYGAgdGhlbiBub25lIG9mIHRoZSB0ZXN0cyBpbiB0aGUKK21vZHVsZSB3aWxsIGJlIHJ1biBhbmQgdGhlIGBgdGVhckRvd25Nb2R1bGVgYCB3aWxsIG5vdCBiZSBydW4uIElmIHRoZSBleGNlcHRpb24gaXMgYQorYGBTa2lwVGVzdGBgIGV4Y2VwdGlvbiB0aGVuIHRoZSBtb2R1bGUgd2lsbCBiZSByZXBvcnRlZCBhcyBoYXZpbmcgYmVlbiBza2lwcGVkCitpbnN0ZWFkIG9mIGFzIGFuIGVycm9yLgogCi0gICBUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgOm1ldGg6YHRlc3RgIG1ldGhvZC4gIElmCi0gICBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8gY2FycnkKLSAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4gb3JkZXIgdG8gInBsYXkgZmFpciIKLSAgIHdpdGggdGhlIGZyYW1ld29yay4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIGlzCi0gICA6ZXhjOmBBc3NlcnRpb25FcnJvcmAuCiAKLVRlc3RpbmcgZnJhbWV3b3JrcyBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0byBjb2xsZWN0IGluZm9ybWF0aW9uIG9uIHRoZQotdGVzdDoKK1NpZ25hbCBIYW5kbGluZworLS0tLS0tLS0tLS0tLS0tCiAKK1RoZSA6b3B0aW9uOmAtYy8tLWNhdGNoIDx1bml0dGVzdCAtYz5gIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gdW5pdHRlc3QsCithbG9uZyB3aXRoIHRoZSBgYGNhdGNoYnJlYWtgYCBwYXJhbWV0ZXIgdG8gOmZ1bmM6YHVuaXR0ZXN0Lm1haW4oKWAsIHByb3ZpZGUKK21vcmUgZnJpZW5kbHkgaGFuZGxpbmcgb2YgY29udHJvbC1DIGR1cmluZyBhIHRlc3QgcnVuLiBXaXRoIGNhdGNoIGJyZWFrCitiZWhhdmlvciBlbmFibGVkIGNvbnRyb2wtQyB3aWxsIGFsbG93IHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0IHRvIGNvbXBsZXRlLAorYW5kIHRoZSB0ZXN0IHJ1biB3aWxsIHRoZW4gZW5kIGFuZCByZXBvcnQgYWxsIHRoZSByZXN1bHRzIHNvIGZhci4gQSBzZWNvbmQKK2NvbnRyb2wtYyB3aWxsIHJhaXNlIGEgOmV4YzpgS2V5Ym9hcmRJbnRlcnJ1cHRgIGluIHRoZSB1c3VhbCB3YXkuCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLmNvdW50VGVzdENhc2VzKCkKK1RoZSBjb250cm9sLWMgaGFuZGxpbmcgc2lnbmFsIGhhbmRsZXIgYXR0ZW1wdHMgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCBjb2RlIG9yCit0ZXN0cyB0aGF0IGluc3RhbGwgdGhlaXIgb3duIDpjb25zdDpgc2lnbmFsLlNJR0lOVGAgaGFuZGxlci4gSWYgdGhlIGBgdW5pdHRlc3RgYAoraGFuZGxlciBpcyBjYWxsZWQgYnV0ICppc24ndCogdGhlIGluc3RhbGxlZCA6Y29uc3Q6YHNpZ25hbC5TSUdJTlRgIGhhbmRsZXIsCitpLmUuIGl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBzeXN0ZW0gdW5kZXIgdGVzdCBhbmQgZGVsZWdhdGVkIHRvLCB0aGVuIGl0CitjYWxscyB0aGUgZGVmYXVsdCBoYW5kbGVyLiBUaGlzIHdpbGwgbm9ybWFsbHkgYmUgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGJ5IGNvZGUKK3RoYXQgcmVwbGFjZXMgYW4gaW5zdGFsbGVkIGhhbmRsZXIgYW5kIGRlbGVnYXRlcyB0byBpdC4gRm9yIGluZGl2aWR1YWwgdGVzdHMKK3RoYXQgbmVlZCBgYHVuaXR0ZXN0YGAgY29udHJvbC1jIGhhbmRsaW5nIGRpc2FibGVkIHRoZSA6ZnVuYzpgcmVtb3ZlSGFuZGxlcmAKK2RlY29yYXRvciBjYW4gYmUgdXNlZC4KIAotICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhpcyB0ZXN0IG9iamVjdC4gIEZvcgotICAgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIGBgMWBgLgorVGhlcmUgYXJlIGEgZmV3IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBmcmFtZXdvcmsgYXV0aG9ycyB0byBlbmFibGUgY29udHJvbC1jCitoYW5kbGluZyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0ZXN0IGZyYW1ld29ya3MuCiAKKy4uIGZ1bmN0aW9uOjogaW5zdGFsbEhhbmRsZXIoKQogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5kZWZhdWx0VGVzdFJlc3VsdCgpCisgICBJbnN0YWxsIHRoZSBjb250cm9sLWMgaGFuZGxlci4gV2hlbiBhIDpjb25zdDpgc2lnbmFsLlNJR0lOVGAgaXMgcmVjZWl2ZWQKKyAgICh1c3VhbGx5IGluIHJlc3BvbnNlIHRvIHRoZSB1c2VyIHByZXNzaW5nIGNvbnRyb2wtYykgYWxsIHJlZ2lzdGVyZWQgcmVzdWx0cworICAgaGF2ZSA6bWV0aDpgflRlc3RSZXN1bHQuc3RvcGAgY2FsbGVkLgogCi0gICBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhlIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgdGVzdAotICAgY2FzZSBjbGFzcyAoaWYgbm8gb3RoZXIgcmVzdWx0IGluc3RhbmNlIGlzIHByb3ZpZGVkIHRvIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QpLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKLSAgIEZvciA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgYW4gaW5zdGFuY2Ugb2YKLSAgIDpjbGFzczpgVGVzdFJlc3VsdGA7ICBzdWJjbGFzc2VzIG9mIDpjbGFzczpgVGVzdENhc2VgIHNob3VsZCBvdmVycmlkZSB0aGlzIGFzCi0gICBuZWNlc3NhcnkuCisuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKIAorICAgUmVnaXN0ZXIgYSA6Y2xhc3M6YFRlc3RSZXN1bHRgIG9iamVjdCBmb3IgY29udHJvbC1jIGhhbmRsaW5nLiBSZWdpc3RlcmluZyBhCisgICByZXN1bHQgc3RvcmVzIGEgd2VhayByZWZlcmVuY2UgdG8gaXQsIHNvIGl0IGRvZXNuJ3QgcHJldmVudCB0aGUgcmVzdWx0IGZyb20KKyAgIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLgogCi0uLiBtZXRob2Q6OiBUZXN0Q2FzZS5pZCgpCisgICBSZWdpc3RlcmluZyBhIDpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IGhhcyBubyBzaWRlLWVmZmVjdHMgaWYgY29udHJvbC1jCisgICBoYW5kbGluZyBpcyBub3QgZW5hYmxlZCwgc28gdGVzdCBmcmFtZXdvcmtzIGNhbiB1bmNvbmRpdGlvbmFsbHkgcmVnaXN0ZXIKKyAgIGFsbCByZXN1bHRzIHRoZXkgY3JlYXRlIGluZGVwZW5kZW50bHkgb2Ygd2hldGhlciBvciBub3QgaGFuZGxpbmcgaXMgZW5hYmxlZC4KIAotICAgUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuICBUaGlzIGlzIHVzdWFsbHkgdGhlIGZ1bGwKLSAgIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kLCBpbmNsdWRpbmcgdGhlIG1vZHVsZSBhbmQgY2xhc3MgbmFtZS4KKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCisuLiBmdW5jdGlvbjo6IHJlbW92ZVJlc3VsdChyZXN1bHQpCiAKLS4uIG1ldGhvZDo6IFRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb24oKQorICAgUmVtb3ZlIGEgcmVnaXN0ZXJlZCByZXN1bHQuIE9uY2UgYSByZXN1bHQgaGFzIGJlZW4gcmVtb3ZlZCB0aGVuCisgICA6bWV0aDpgflRlc3RSZXN1bHQuc3RvcGAgd2lsbCBubyBsb25nZXIgYmUgY2FsbGVkIG9uIHRoYXQgcmVzdWx0IG9iamVjdCBpbgorICAgcmVzcG9uc2UgdG8gYSBjb250cm9sLWMuCiAKLSAgIFJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgOmNvbnN0OmBOb25lYCBpZiBubyBkZXNjcmlwdGlvbgotICAgaGFzIGJlZW4gcHJvdmlkZWQuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdAotICAgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgOmNvbnN0OmBOb25lYC4KLQotCi0uLiBfdGVzdHN1aXRlLW9iamVjdHM6Ci0KLVRlc3RTdWl0ZSBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi06Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0cyBiZWhhdmUgbXVjaCBsaWtlIDpjbGFzczpgVGVzdENhc2VgIG9iamVjdHMsIGV4Y2VwdAotdGhleSBkbyBub3QgYWN0dWFsbHkgaW1wbGVtZW50IGEgdGVzdC4gIEluc3RlYWQsIHRoZXkgYXJlIHVzZWQgdG8gYWdncmVnYXRlCi10ZXN0cyBpbnRvIGdyb3VwcyBvZiB0ZXN0cyB0aGF0IHNob3VsZCBiZSBydW4gdG9nZXRoZXIuIFNvbWUgYWRkaXRpb25hbCBtZXRob2RzCi1hcmUgYXZhaWxhYmxlIHRvIGFkZCB0ZXN0cyB0byA6Y2xhc3M6YFRlc3RTdWl0ZWAgaW5zdGFuY2VzOgotCi0KLS4uIG1ldGhvZDo6IFRlc3RTdWl0ZS5hZGRUZXN0KHRlc3QpCi0KLSAgIEFkZCBhIDpjbGFzczpgVGVzdENhc2VgIG9yIDpjbGFzczpgVGVzdFN1aXRlYCB0byB0aGUgc3VpdGUuCi0KLQotLi4gbWV0aG9kOjogVGVzdFN1aXRlLmFkZFRlc3RzKHRlc3RzKQotCi0gICBBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIDpjbGFzczpgVGVzdENhc2VgIGFuZCA6Y2xhc3M6YFRlc3RTdWl0ZWAKLSAgIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuCi0KLSAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciAqdGVzdHMqLCBjYWxsaW5nIDptZXRoOmBhZGRUZXN0YCBmb3IgZWFjaAotICAgZWxlbWVudC4KLQotOmNsYXNzOmBUZXN0U3VpdGVgIHNoYXJlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgd2l0aCA6Y2xhc3M6YFRlc3RDYXNlYDoKLQotCi0uLiBtZXRob2Q6OiBUZXN0U3VpdGUucnVuKHJlc3VsdCkKLQotICAgUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8gdGhlIHRlc3QKLSAgIHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzICpyZXN1bHQqLiAgTm90ZSB0aGF0IHVubGlrZSA6bWV0aDpgVGVzdENhc2UucnVuYCwKLSAgIDptZXRoOmBUZXN0U3VpdGUucnVuYCByZXF1aXJlcyB0aGUgcmVzdWx0IG9iamVjdCB0byBiZSBwYXNzZWQgaW4uCi0KLQotLi4gbWV0aG9kOjogVGVzdFN1aXRlLmRlYnVnKCkKLQotICAgUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gVGhpcwotICAgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSB0ZXN0IHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlciBhbmQgY2FuIGJlCi0gICB1c2VkIHRvIHN1cHBvcnQgcnVubmluZyB0ZXN0cyB1bmRlciBhIGRlYnVnZ2VyLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RTdWl0ZS5jb3VudFRlc3RDYXNlcygpCi0KLSAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoaXMgdGVzdCBvYmplY3QsIGluY2x1ZGluZyBhbGwKLSAgIGluZGl2aWR1YWwgdGVzdHMgYW5kIHN1Yi1zdWl0ZXMuCi0KLUluIHRoZSB0eXBpY2FsIHVzYWdlIG9mIGEgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdCwgdGhlIDptZXRoOmBydW5gIG1ldGhvZCBpcwotaW52b2tlZCBieSBhIDpjbGFzczpgVGVzdFJ1bm5lcmAgcmF0aGVyIHRoYW4gYnkgdGhlIGVuZC11c2VyIHRlc3QgaGFybmVzcy4KLQotCi0uLiBfdGVzdHJlc3VsdC1vYmplY3RzOgotCi1UZXN0UmVzdWx0IE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BIDpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IHN0b3JlcyB0aGUgcmVzdWx0cyBvZiBhIHNldCBvZiB0ZXN0cy4gIFRoZQotOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIDpjbGFzczpgVGVzdFN1aXRlYCBjbGFzc2VzIGVuc3VyZSB0aGF0IHJlc3VsdHMgYXJlCi1wcm9wZXJseSByZWNvcmRlZDsgdGVzdCBhdXRob3JzIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHJlY29yZGluZyB0aGUgb3V0Y29tZQotb2YgdGVzdHMuCi0KLVRlc3RpbmcgZnJhbWV3b3JrcyBidWlsdCBvbiB0b3Agb2YgOm1vZDpgdW5pdHRlc3RgIG1heSB3YW50IGFjY2VzcyB0byB0aGUKLTpjbGFzczpgVGVzdFJlc3VsdGAgb2JqZWN0IGdlbmVyYXRlZCBieSBydW5uaW5nIGEgc2V0IG9mIHRlc3RzIGZvciByZXBvcnRpbmcKLXB1cnBvc2VzOyBhIDpjbGFzczpgVGVzdFJlc3VsdGAgaW5zdGFuY2UgaXMgcmV0dXJuZWQgYnkgdGhlCi06bWV0aDpgVGVzdFJ1bm5lci5ydW5gIG1ldGhvZCBmb3IgdGhpcyBwdXJwb3NlLgotCi06Y2xhc3M6YFRlc3RSZXN1bHRgIGluc3RhbmNlcyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0aGF0IHdpbGwgYmUgb2YKLWludGVyZXN0IHdoZW4gaW5zcGVjdGluZyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgc2V0IG9mIHRlc3RzOgotCi0KLS4uIGF0dHJpYnV0ZTo6IFRlc3RSZXN1bHQuZXJyb3JzCi0KLSAgIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcyBhbmQgc3RyaW5ncyBob2xkaW5nCi0gICBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGljaCByYWlzZWQgYW4gdW5leHBlY3RlZAotICAgZXhjZXB0aW9uLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMgotICAgICAgQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZCBvZiA6ZnVuYzpgc3lzLmV4Y19pbmZvYCByZXN1bHRzLgotCi0KLS4uIGF0dHJpYnV0ZTo6IFRlc3RSZXN1bHQuZmFpbHVyZXMKLQotICAgQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2VzIGFuZCBzdHJpbmdzIGhvbGRpbmcKLSAgIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKLSAgIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSA6bWV0aDpgVGVzdENhc2UuZmFpbFwqYCBvcgotICAgOm1ldGg6YFRlc3RDYXNlLmFzc2VydFwqYCBtZXRob2RzLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuMgotICAgICAgQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZCBvZiA6ZnVuYzpgc3lzLmV4Y19pbmZvYCByZXN1bHRzLgotCi0KLS4uIGF0dHJpYnV0ZTo6IFRlc3RSZXN1bHQudGVzdHNSdW4KLQotICAgVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RSZXN1bHQud2FzU3VjY2Vzc2Z1bCgpCi0KLSAgIFJldHVybnMgOmNvbnN0OmBUcnVlYCBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwgb3RoZXJ3aXNlIHJldHVybnMKLSAgIDpjb25zdDpgRmFsc2VgLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RSZXN1bHQuc3RvcCgpCi0KLSAgIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZyBydW4gc2hvdWxkIGJlCi0gICBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIDpjbGFzczpgVGVzdFJlc3VsdGAncyBgYHNob3VsZFN0b3BgYCBhdHRyaWJ1dGUgdG8KLSAgIDpjb25zdDpgVHJ1ZWAuICA6Y2xhc3M6YFRlc3RSdW5uZXJgIG9iamVjdHMgc2hvdWxkIHJlc3BlY3QgdGhpcyBmbGFnIGFuZCByZXR1cm4KLSAgIHdpdGhvdXQgcnVubmluZyBhbnkgYWRkaXRpb25hbCB0ZXN0cy4KLQotICAgRm9yIGV4YW1wbGUsIHRoaXMgZmVhdHVyZSBpcyB1c2VkIGJ5IHRoZSA6Y2xhc3M6YFRleHRUZXN0UnVubmVyYCBjbGFzcyB0byBzdG9wCi0gICB0aGUgdGVzdCBmcmFtZXdvcmsgd2hlbiB0aGUgdXNlciBzaWduYWxzIGFuIGludGVycnVwdCBmcm9tIHRoZSBrZXlib2FyZC4KLSAgIEludGVyYWN0aXZlIHRvb2xzIHdoaWNoIHByb3ZpZGUgOmNsYXNzOmBUZXN0UnVubmVyYCBpbXBsZW1lbnRhdGlvbnMgY2FuIHVzZSB0aGlzCi0gICBpbiBhIHNpbWlsYXIgbWFubmVyLgotCi1UaGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgdGhlIDpjbGFzczpgVGVzdFJlc3VsdGAgY2xhc3MgYXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlCi1pbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBtYXkgYmUgZXh0ZW5kZWQgaW4gc3ViY2xhc3NlcyB0byBzdXBwb3J0Ci1hZGRpdGlvbmFsIHJlcG9ydGluZyByZXF1aXJlbWVudHMuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgaW4gYnVpbGRpbmcKLXRvb2xzIHdoaWNoIHN1cHBvcnQgaW50ZXJhY3RpdmUgcmVwb3J0aW5nIHdoaWxlIHRlc3RzIGFyZSBiZWluZyBydW4uCi0KLQotLi4gbWV0aG9kOjogVGVzdFJlc3VsdC5zdGFydFRlc3QodGVzdCkKLQotICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogaXMgYWJvdXQgdG8gYmUgcnVuLgotCi0gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgaW5jcmVtZW50cyB0aGUgaW5zdGFuY2UncyBgYHRlc3RzUnVuYGAKLSAgIGNvdW50ZXIuCi0KLQotLi4gbWV0aG9kOjogVGVzdFJlc3VsdC5zdG9wVGVzdCh0ZXN0KQotCi0gICBDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSAqdGVzdCogaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUuCi0KLSAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KLQotCi0uLiBtZXRob2Q6OiBUZXN0UmVzdWx0LmFkZEVycm9yKHRlc3QsIGVycikKLQotICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uICplcnIqIGlzIGEgdHVwbGUKLSAgIG9mIHRoZSBmb3JtIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgotCi0gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIGEgdHVwbGUgYGAodGVzdCwgZm9ybWF0dGVkX2VycilgYCB0byB0aGUKLSAgIGluc3RhbmNlJ3MgYGBlcnJvcnNgYCBhdHRyaWJ1dGUsIHdoZXJlICpmb3JtYXR0ZWRfZXJyKiBpcyBhIGZvcm1hdHRlZAotICAgdHJhY2ViYWNrIGRlcml2ZWQgZnJvbSAqZXJyKi4KLQotCi0uLiBtZXRob2Q6OiBUZXN0UmVzdWx0LmFkZEZhaWx1cmUodGVzdCwgZXJyKQotCi0gICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiBzaWduYWxzIGEgZmFpbHVyZS4gKmVyciogaXMgYSB0dXBsZSBvZiB0aGUgZm9ybQotICAgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6ICBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgotCi0gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhcHBlbmRzIGEgdHVwbGUgYGAodGVzdCwgZm9ybWF0dGVkX2VycilgYCB0byB0aGUKLSAgIGluc3RhbmNlJ3MgYGBmYWlsdXJlc2BgIGF0dHJpYnV0ZSwgd2hlcmUgKmZvcm1hdHRlZF9lcnIqIGlzIGEgZm9ybWF0dGVkCi0gICB0cmFjZWJhY2sgZGVyaXZlZCBmcm9tICplcnIqLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RSZXN1bHQuYWRkU3VjY2Vzcyh0ZXN0KQotCi0gICBDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlICp0ZXN0KiBzdWNjZWVkcy4KLQotICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgotCi0KLS4uIF90ZXN0bG9hZGVyLW9iamVjdHM6Ci0KLVRlc3RMb2FkZXIgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNsYXNzIGlzIHVzZWQgdG8gY3JlYXRlIHRlc3Qgc3VpdGVzIGZyb20gY2xhc3NlcyBhbmQKLW1vZHVsZXMuICBOb3JtYWxseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzczsgdGhlCi06bW9kOmB1bml0dGVzdGAgbW9kdWxlIHByb3ZpZGVzIGFuIGluc3RhbmNlIHRoYXQgY2FuIGJlIHNoYXJlZCBhcwotYGB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcmBgLiBVc2luZyBhIHN1YmNsYXNzIG9yIGluc3RhbmNlLCBob3dldmVyLCBhbGxvd3MKLWN1c3RvbWl6YXRpb24gb2Ygc29tZSBjb25maWd1cmFibGUgcHJvcGVydGllcy4KLQotOmNsYXNzOmBUZXN0TG9hZGVyYCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgotCi0KLS4uIG1ldGhvZDo6IFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRlc3RDYXNlQ2xhc3MpCi0KLSAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZAotICAgOmNsYXNzOmB0ZXN0Q2FzZUNsYXNzYC4KLQotCi0uLiBtZXRob2Q6OiBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQotCi0gICBSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBtb2R1bGUuIFRoaXMgbWV0aG9kCi0gICBzZWFyY2hlcyAqbW9kdWxlKiBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gOmNsYXNzOmBUZXN0Q2FzZWAgYW5kIGNyZWF0ZXMgYW4KLSAgIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmb3IgZWFjaCB0ZXN0IG1ldGhvZCBkZWZpbmVkIGZvciB0aGUgY2xhc3MuCi0KLSAgIC4uIHdhcm5pbmc6OgotCi0gICAgICBXaGlsZSB1c2luZyBhIGhpZXJhcmNoeSBvZiA6Y2xhc3M6YFRlc3RDYXNlYFwgLWRlcml2ZWQgY2xhc3NlcyBjYW4gYmUgY29udmVuaWVudAotICAgICAgaW4gc2hhcmluZyBmaXh0dXJlcyBhbmQgaGVscGVyIGZ1bmN0aW9ucywgZGVmaW5pbmcgdGVzdCBtZXRob2RzIG9uIGJhc2UgY2xhc3NlcwotICAgICAgdGhhdCBhcmUgbm90IGludGVuZGVkIHRvIGJlIGluc3RhbnRpYXRlZCBkaXJlY3RseSBkb2VzIG5vdCBwbGF5IHdlbGwgd2l0aCB0aGlzCi0gICAgICBtZXRob2QuICBEb2luZyBzbywgaG93ZXZlciwgY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZSBmaXh0dXJlcyBhcmUgZGlmZmVyZW50IGFuZAotICAgICAgZGVmaW5lZCBpbiBzdWJjbGFzc2VzLgotCi0KLS4uIG1ldGhvZDo6IFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobmFtZVssIG1vZHVsZV0pCi0KLSAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBnaXZlbiBhIHN0cmluZyBzcGVjaWZpZXIuCi0KLSAgIFRoZSBzcGVjaWZpZXIgKm5hbWUqIGlzIGEgImRvdHRlZCBuYW1lIiB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0byBhIG1vZHVsZSwgYQotICAgdGVzdCBjYXNlIGNsYXNzLCBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAKLSAgIGluc3RhbmNlLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgOmNsYXNzOmBUZXN0Q2FzZWAgb3IKLSAgIDpjbGFzczpgVGVzdFN1aXRlYCBpbnN0YW5jZS4gIFRoZXNlIGNoZWNrcyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgbGlzdGVkIGhlcmU7Ci0gICB0aGF0IGlzLCBhIG1ldGhvZCBvbiBhIHBvc3NpYmxlIHRlc3QgY2FzZSBjbGFzcyB3aWxsIGJlIHBpY2tlZCB1cCBhcyAiYSB0ZXN0Ci0gICBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiwgcmF0aGVyIHRoYW4gImEgY2FsbGFibGUgb2JqZWN0Ii4KLQotICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgbW9kdWxlIDptb2Q6YFNhbXBsZVRlc3RzYCBjb250YWluaW5nIGEKLSAgIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZCBjbGFzcyA6Y2xhc3M6YFNhbXBsZVRlc3RDYXNlYCB3aXRoIHRocmVlIHRlc3QKLSAgIG1ldGhvZHMgKDptZXRoOmB0ZXN0X29uZWAsIDptZXRoOmB0ZXN0X3R3b2AsIGFuZCA6bWV0aDpgdGVzdF90aHJlZWApLCB0aGUKLSAgIHNwZWNpZmllciBgYCdTYW1wbGVUZXN0cy5TYW1wbGVUZXN0Q2FzZSdgYCB3b3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byByZXR1cm4gYQotICAgc3VpdGUgd2hpY2ggd2lsbCBydW4gYWxsIHRocmVlIHRlc3QgbWV0aG9kcy4gIFVzaW5nIHRoZSBzcGVjaWZpZXIKLSAgIGBgJ1NhbXBsZVRlc3RzLlNhbXBsZVRlc3RDYXNlLnRlc3RfdHdvJ2BgIHdvdWxkIGNhdXNlIGl0IHRvIHJldHVybiBhIHRlc3Qgc3VpdGUKLSAgIHdoaWNoIHdpbGwgcnVuIG9ubHkgdGhlIDptZXRoOmB0ZXN0X3R3b2AgdGVzdCBtZXRob2QuICBUaGUgc3BlY2lmaWVyIGNhbiByZWZlcgotICAgdG8gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hpY2ggaGF2ZSBub3QgYmVlbiBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEKLSAgIHNpZGUtZWZmZWN0LgotCi0gICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgKm5hbWUqIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiAqbW9kdWxlKi4KLQotCi0uLiBtZXRob2Q6OiBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhuYW1lc1ssIG1vZHVsZV0pCi0KLSAgIFNpbWlsYXIgdG8gOm1ldGg6YGxvYWRUZXN0c0Zyb21OYW1lYCwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyIHRoYW4KLSAgIGEgc2luZ2xlIG5hbWUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgdGVzdCBzdWl0ZSB3aGljaCBzdXBwb3J0cyBhbGwgdGhlIHRlc3RzCi0gICBkZWZpbmVkIGZvciBlYWNoIG5hbWUuCi0KLQotLi4gbWV0aG9kOjogVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCi0KLSAgIFJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluICp0ZXN0Q2FzZUNsYXNzKjsgdGhpcwotICAgc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBUZXN0Q2FzZWAuCi0KLVRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBvZiBhIDpjbGFzczpgVGVzdExvYWRlcmAgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5Ci1zdWJjbGFzc2luZyBvciBhc3NpZ25tZW50IG9uIGFuIGluc3RhbmNlOgotCi0KLS4uIGF0dHJpYnV0ZTo6IFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAotCi0gICBTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdGVzdAotICAgbWV0aG9kcy4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgJ3Rlc3QnYGAuCi0KLSAgIFRoaXMgYWZmZWN0cyA6bWV0aDpgZ2V0VGVzdENhc2VOYW1lc2AgYW5kIGFsbCB0aGUgOm1ldGg6YGxvYWRUZXN0c0Zyb21cKmAKLSAgIG1ldGhvZHMuCi0KLQotLi4gYXR0cmlidXRlOjogVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZwotCi0gICBGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCi0gICA6bWV0aDpgZ2V0VGVzdENhc2VOYW1lc2AgYW5kIGFsbCB0aGUgOm1ldGg6YGxvYWRUZXN0c0Zyb21cKmAgbWV0aG9kcy4gVGhlCi0gICBkZWZhdWx0IHZhbHVlIGlzIHRoZSBidWlsdC1pbiA6ZnVuYzpgY21wYCBmdW5jdGlvbjsgdGhlIGF0dHJpYnV0ZSBjYW4gYWxzbyBiZQotICAgc2V0IHRvIDpjb25zdDpgTm9uZWAgdG8gZGlzYWJsZSB0aGUgc29ydC4KKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNwogCisuLiBmdW5jdGlvbjo6IHJlbW92ZUhhbmRsZXIoZnVuY3Rpb249Tm9uZSkKIAotLi4gYXR0cmlidXRlOjogVGVzdExvYWRlci5zdWl0ZUNsYXNzCisgICBXaGVuIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cyB0aGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGNvbnRyb2wtYyBoYW5kbGVyCisgICBpZiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQuIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCBhcyBhIHRlc3QgZGVjb3JhdG9yCisgICB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhbmRsZXIgd2hpbHN0IHRoZSB0ZXN0IGlzIGJlaW5nIGV4ZWN1dGVkOjoKIAotICAgQ2FsbGFibGUgb2JqZWN0IHRoYXQgY29uc3RydWN0cyBhIHRlc3Qgc3VpdGUgZnJvbSBhIGxpc3Qgb2YgdGVzdHMuIE5vIG1ldGhvZHMgb24KLSAgIHRoZSByZXN1bHRpbmcgb2JqZWN0IGFyZSBuZWVkZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgOmNsYXNzOmBUZXN0U3VpdGVgCi0gICBjbGFzcy4KKyAgICAgIEB1bml0dGVzdC5yZW1vdmVIYW5kbGVyCisgICAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICAgLi4uCiAKLSAgIFRoaXMgYWZmZWN0cyBhbGwgdGhlIDptZXRoOmBsb2FkVGVzdHNGcm9tXCpgIG1ldGhvZHMuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yc3QKaW5kZXggOThjNTVkNS4uMDgwZDk1ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucnN0CkBAIC0yMyw2ICsyMywxMCBAQAogaW5zdGVhZCBvZiBmaWxlbmFtZXMuICBTb21lIHJlc3RyaWN0aW9ucyBhcHBseSAtLS0gaXQgY2FuIG9ubHkgb3BlbiBVUkxzIGZvcgogcmVhZGluZywgYW5kIG5vIHNlZWsgb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlLgogCisuLiB3YXJuaW5nOjogV2hlbiBvcGVuaW5nIEhUVFBTIFVSTHMsIGl0IGlzIG5vdCBhdHRlbXB0ZWQgdG8gdmFsaWRhdGUgdGhlCisgICBzZXJ2ZXIgY2VydGlmaWNhdGUuICBVc2UgYXQgeW91ciBvd24gcmlzayEKKworCiBIaWdoLWxldmVsIGludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjM2LDggKzI0MCw4IEBACiAKIC4uIGZ1bmN0aW9uOjogdXJsZW5jb2RlKHF1ZXJ5WywgZG9zZXFdKQogCi0gICBDb252ZXJ0IGEgbWFwcGluZyBvYmplY3Qgb3IgYSBzZXF1ZW5jZSBvZiB0d28tZWxlbWVudCB0dXBsZXMgIHRvIGEKLSAgICJ1cmwtZW5jb2RlZCIgc3RyaW5nLCBzdWl0YWJsZSB0byBwYXNzIHRvIDpmdW5jOmB1cmxvcGVuYCBhYm92ZSBhcyB0aGUKKyAgIENvbnZlcnQgYSBtYXBwaW5nIG9iamVjdCBvciBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyB0byBhCisgICAicGVyY2VudC1lbmNvZGVkIiBzdHJpbmcsIHN1aXRhYmxlIHRvIHBhc3MgdG8gOmZ1bmM6YHVybG9wZW5gIGFib3ZlIGFzIHRoZQogICAgb3B0aW9uYWwgKmRhdGEqIGFyZ3VtZW50LiAgVGhpcyBpcyB1c2VmdWwgdG8gcGFzcyBhIGRpY3Rpb25hcnkgb2YgZm9ybQogICAgZmllbGRzIHRvIGEgYGBQT1NUYGAgcmVxdWVzdC4gIFRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGEgc2VyaWVzIG9mCiAgICBgYGtleT12YWx1ZWBgIHBhaXJzIHNlcGFyYXRlZCBieSBgYCcmJ2BgIGNoYXJhY3RlcnMsIHdoZXJlIGJvdGggKmtleSogYW5kCkBAIC0yNjIsNyArMjY2LDcgQEAKIAogLi4gZnVuY3Rpb246OiB1cmwycGF0aG5hbWUocGF0aCkKIAotICAgQ29udmVydCB0aGUgcGF0aCBjb21wb25lbnQgKnBhdGgqIGZyb20gYW4gZW5jb2RlZCBVUkwgdG8gdGhlIGxvY2FsIHN5bnRheCBmb3IgYQorICAgQ29udmVydCB0aGUgcGF0aCBjb21wb25lbnQgKnBhdGgqIGZyb20gYW4gcGVyY2VudC1lbmNvZGVkIFVSTCB0byB0aGUgbG9jYWwgc3ludGF4IGZvciBhCiAgICBwYXRoLiAgVGhpcyBkb2VzIG5vdCBhY2NlcHQgYSBjb21wbGV0ZSBVUkwuICBUaGlzIGZ1bmN0aW9uIHVzZXMgOmZ1bmM6YHVucXVvdGVgCiAgICB0byBkZWNvZGUgKnBhdGgqLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIyLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0CmluZGV4IGI4ZjIyNzcuLmNlZjk2YTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYjIucnN0CkBAIC0xOCw2ICsxOCw3IEBACiBVUkxzIChtb3N0bHkgSFRUUCkgaW4gYSBjb21wbGV4IHdvcmxkIC0tLSBiYXNpYyBhbmQgZGlnZXN0IGF1dGhlbnRpY2F0aW9uLAogcmVkaXJlY3Rpb25zLCBjb29raWVzIGFuZCBtb3JlLgogCisKIFRoZSA6bW9kOmB1cmxsaWIyYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCkBAIC0yNSwxOCArMjYsMjIgQEAKIAogICAgT3BlbiB0aGUgVVJMICp1cmwqLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgOmNsYXNzOmBSZXF1ZXN0YCBvYmplY3QuCiAKKyAgIC4uIHdhcm5pbmc6OgorICAgICAgSFRUUFMgcmVxdWVzdHMgZG8gbm90IGRvIGFueSB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgorCiAgICAqZGF0YSogbWF5IGJlIGEgc3RyaW5nIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBkYXRhIHRvIHNlbmQgdG8gdGhlIHNlcnZlciwgb3IKICAgIGBgTm9uZWBgIGlmIG5vIHN1Y2ggZGF0YSBpcyBuZWVkZWQuICBDdXJyZW50bHkgSFRUUCByZXF1ZXN0cyBhcmUgdGhlIG9ubHkgb25lcwogICAgdGhhdCB1c2UgKmRhdGEqOyB0aGUgSFRUUCByZXF1ZXN0IHdpbGwgYmUgYSBQT1NUIGluc3RlYWQgb2YgYSBHRVQgd2hlbiB0aGUKICAgICpkYXRhKiBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuICAqZGF0YSogc2hvdWxkIGJlIGEgYnVmZmVyIGluIHRoZSBzdGFuZGFyZAogICAgOm1pbWV0eXBlOmBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGZvcm1hdC4gIFRoZQogICAgOmZ1bmM6YHVybGxpYi51cmxlbmNvZGVgIGZ1bmN0aW9uIHRha2VzIGEgbWFwcGluZyBvciBzZXF1ZW5jZSBvZiAyLXR1cGxlcyBhbmQKLSAgIHJldHVybnMgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQuCisgICByZXR1cm5zIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0LiB1cmxsaWIyIG1vZHVsZSBzZW5kcyBIVFRQLzEuMSByZXF1ZXN0cyB3aXRoCisgICBgQ29ubmVjdGlvbjpjbG9zZWAgaGVhZGVyIGluY2x1ZGVkLgogCiAgICBUaGUgb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlciBzcGVjaWZpZXMgYSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGJsb2NraW5nCiAgICBvcGVyYXRpb25zIGxpa2UgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCAoaWYgbm90IHNwZWNpZmllZCwgdGhlIGdsb2JhbCBkZWZhdWx0Ci0gICB0aW1lb3V0IHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gIFRoaXMgYWN0dWFsbHkgb25seSB3b3JrcyBmb3IgSFRUUCwgSFRUUFMsCi0gICBGVFAgYW5kIEZUUFMgY29ubmVjdGlvbnMuCisgICB0aW1lb3V0IHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gIFRoaXMgYWN0dWFsbHkgb25seSB3b3JrcyBmb3IgSFRUUCwgSFRUUFMgYW5kCisgICBGVFAgY29ubmVjdGlvbnMuCiAKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCB0d28gYWRkaXRpb25hbCBtZXRob2RzOgogCkBAIC00MjgsNyArNDMzLDcgQEAKICAgIG9wdGlvbmFsICp0aW1lb3V0KiBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgdGltZW91dCBpbiBzZWNvbmRzIGZvciBibG9ja2luZwogICAgb3BlcmF0aW9ucyBsaWtlIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgKGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdAogICAgdGltZW91dCBzZXR0aW5nIHdpbGwgYmUgdXNlZCkuIFRoZSB0aW1lb3V0IGZlYXR1cmUgYWN0dWFsbHkgd29ya3Mgb25seSBmb3IKLSAgIEhUVFAsIEhUVFBTLCBGVFAgYW5kIEZUUFMgY29ubmVjdGlvbnMpLgorICAgSFRUUCwgSFRUUFMgYW5kIEZUUCBjb25uZWN0aW9ucykuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42CiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJscGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvdXJscGFyc2UucnN0CmluZGV4IDQ3YTdlNTcuLjg4ZGFmYTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybHBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxwYXJzZS5yc3QKQEAgLTMzLDYgKzMzLDExIEBACiAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKICAgIFN1cHBvcnQgZm9yIHRoZSBgYHNmdHBgYCBhbmQgYGBzaXBzYGAgc2NoZW1lcy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgdXJscGFyc2UgbW9kdWxlIFB5dGhvbiBzb3VyY2UgY29kZQorICAgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi9icmFuY2hlcy9yZWxlYXNlMjctbWFpbnQvTGliL3VybHBhcnNlLnB5P3ZpZXc9bWFya3VwPmBfCisKIFRoZSA6bW9kOmB1cmxwYXJzZWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApAQCAtNTgsNiArNjMsMjMgQEAKICAgICAgID4+PiBvLmdldHVybCgpCiAgICAgICAnaHR0cDovL3d3dy5jd2kubmw6ODAvJTdFZ3VpZG8vUHl0aG9uLmh0bWwnCiAKKworICAgRm9sbG93aW5nIHRoZSBzeW50YXggc3BlY2lmaWNhdGlvbnMgaW4gOnJmYzpgMTgwOGAsIHVybHBhcnNlIHJlY29nbml6ZXMKKyAgIGEgbmV0bG9jIG9ubHkgaWYgaXQgaXMgcHJvcGVybHkgaW50cm9kdWNlZCBieSAnLy8nLiAgT3RoZXJ3aXNlIHRoZQorICAgaW5wdXQgaXMgcHJlc3VtZWQgdG8gYmUgYSByZWxhdGl2ZSBVUkwgYW5kIHRodXMgdG8gc3RhcnQgd2l0aAorICAgYSBwYXRoIGNvbXBvbmVudC4KKworICAgICAgID4+PiBmcm9tIHVybHBhcnNlIGltcG9ydCB1cmxwYXJzZQorICAgICAgID4+PiB1cmxwYXJzZSgnLy93d3cuY3dpLm5sOjgwLyU3RWd1aWRvL1B5dGhvbi5odG1sJykKKyAgICAgICBQYXJzZVJlc3VsdChzY2hlbWU9JycsIG5ldGxvYz0nd3d3LmN3aS5ubDo4MCcsIHBhdGg9Jy8lN0VndWlkby9QeXRob24uaHRtbCcsCisgICAgICAgICAgICAgICAgICBwYXJhbXM9JycsIHF1ZXJ5PScnLCBmcmFnbWVudD0nJykKKyAgICAgICA+Pj4gdXJscGFyc2UoJ3d3dy5jd2kubmw6ODAvJTdFZ3VpZG8vUHl0aG9uLmh0bWwnKQorICAgICAgIFBhcnNlUmVzdWx0KHNjaGVtZT0nJywgbmV0bG9jPScnLCBwYXRoPSd3d3cuY3dpLm5sOjgwLyU3RWd1aWRvL1B5dGhvbi5odG1sJywKKyAgICAgICAgICAgICAgICAgIHBhcmFtcz0nJywgcXVlcnk9JycsIGZyYWdtZW50PScnKQorICAgICAgID4+PiB1cmxwYXJzZSgnaGVscC9QeXRob24uaHRtbCcpCisgICAgICAgUGFyc2VSZXN1bHQoc2NoZW1lPScnLCBuZXRsb2M9JycsIHBhdGg9J2hlbHAvUHl0aG9uLmh0bWwnLCBwYXJhbXM9JycsCisgICAgICAgICAgICAgICAgICBxdWVyeT0nJywgZnJhZ21lbnQ9JycpCisKICAgIElmIHRoZSAqc2NoZW1lKiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIGl0IGdpdmVzIHRoZSBkZWZhdWx0IGFkZHJlc3NpbmcKICAgIHNjaGVtZSwgdG8gYmUgdXNlZCBvbmx5IGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBvbmUuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKICAgIHRoaXMgYXJndW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy4KQEAgLTEwMSw2ICsxMjMsMTAgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi41CiAgICAgICBBZGRlZCBhdHRyaWJ1dGVzIHRvIHJldHVybiB2YWx1ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIEFkZGVkIElQdjYgVVJMIHBhcnNpbmcgY2FwYWJpbGl0aWVzLgorCisKIC4uIGZ1bmN0aW9uOjogcGFyc2VfcXMocXNbLCBrZWVwX2JsYW5rX3ZhbHVlc1ssIHN0cmljdF9wYXJzaW5nXV0pCiAKICAgIFBhcnNlIGEgcXVlcnkgc3RyaW5nIGdpdmVuIGFzIGEgc3RyaW5nIGFyZ3VtZW50IChkYXRhIG9mIHR5cGUKQEAgLTEwOSw3ICsxMzUsNyBAQAogICAgdmFsdWVzIGFyZSBsaXN0cyBvZiB2YWx1ZXMgZm9yIGVhY2ggbmFtZS4KIAogICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICprZWVwX2JsYW5rX3ZhbHVlcyogaXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBibGFuawotICAgdmFsdWVzIGluIFVSTCBlbmNvZGVkIHF1ZXJpZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4gICBBIHRydWUgdmFsdWUKKyAgIHZhbHVlcyBpbiBwZXJjZW50LWVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLiAgIEEgdHJ1ZSB2YWx1ZQogICAgaW5kaWNhdGVzIHRoYXQgYmxhbmtzIHNob3VsZCBiZSByZXRhaW5lZCBhcyAgYmxhbmsgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlCiAgICB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBibGFuayB2YWx1ZXMgYXJlIHRvIGJlIGlnbm9yZWQgYW5kIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlCiAgICBub3QgaW5jbHVkZWQuCkBAIC0xMzIsNyArMTU4LDcgQEAKICAgIG5hbWUsIHZhbHVlIHBhaXJzLgogCiAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmtlZXBfYmxhbmtfdmFsdWVzKiBpcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGJsYW5rCi0gICB2YWx1ZXMgaW4gVVJMIGVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLiAgIEEgdHJ1ZSB2YWx1ZQorICAgdmFsdWVzIGluIHBlcmNlbnQtZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuICAgQSB0cnVlIHZhbHVlCiAgICBpbmRpY2F0ZXMgdGhhdCBibGFua3Mgc2hvdWxkIGJlIHJldGFpbmVkIGFzICBibGFuayBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgZmFsc2UKICAgIHZhbHVlIGluZGljYXRlcyB0aGF0IGJsYW5rIHZhbHVlcyBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUKICAgIG5vdCBpbmNsdWRlZC4KQEAgLTI1NCw5ICsyODAsMTIgQEAKICAgIDpyZmM6YDM5ODZgIC0gVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycwogICAgICAgVGhpcyBpcyB0aGUgY3VycmVudCBzdGFuZGFyZCAoU1RENjYpLiBBbnkgY2hhbmdlcyB0byB1cmxwYXJzZSBtb2R1bGUKICAgICAgIHNob3VsZCBjb25mb3JtIHRvIHRoaXMuIENlcnRhaW4gZGV2aWF0aW9ucyBjb3VsZCBiZSBvYnNlcnZlZCwgd2hpY2ggYXJlCi0gICAgICBtb3N0bHkgZHVlIGJhY2t3YXJkIGNvbXBhdGlibGl0eSBwdXJwb3NlcyBhbmQgZm9yIGNlcnRhaW4gdG8gZGUtZmFjdG8KKyAgICAgIG1vc3RseSBkdWUgYmFja3dhcmQgY29tcGF0aWJsaXR5IHB1cnBvc2VzIGFuZCBmb3IgY2VydGFpbiBkZS1mYWN0bwogICAgICAgcGFyc2luZyByZXF1aXJlbWVudHMgYXMgY29tbW9ubHkgb2JzZXJ2ZWQgaW4gbWFqb3IgYnJvd3NlcnMuCiAKKyAgIDpyZmM6YDI3MzJgIC0gRm9ybWF0IGZvciBMaXRlcmFsIElQdjYgQWRkcmVzc2VzIGluIFVSTCdzLgorICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIHBhcnNpbmcgcmVxdWlyZW1lbnRzIG9mIElQdjYgVVJMcy4KKwogICAgOnJmYzpgMjM5NmAgLSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIChVUkkpOiBHZW5lcmljIFN5bnRheAogICAgICAgRG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgZ2VuZXJpYyBzeW50YWN0aWMgcmVxdWlyZW1lbnRzIGZvciBib3RoIFVuaWZvcm0gUmVzb3VyY2UKICAgICAgIE5hbWVzIChVUk5zKSBhbmQgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycyAoVVJMcykuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91c2VyZGljdC5yc3QgYi9Eb2MvbGlicmFyeS91c2VyZGljdC5yc3QKaW5kZXggOWRkZmRlNS4uYWI5YWIwNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXNlcmRpY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VzZXJkaWN0LnJzdApAQCAtMTksNiArMTksMTEgQEAKIHN1Yi1jbGFzc2VzIHRoYXQgb2J0YWluZWQgbmV3IGJlaGF2aW9ycyBieSBvdmVycmlkaW5nIGV4aXN0aW5nIG1ldGhvZHMgb3IgYWRkaW5nCiBuZXcgb25lcy4KIAorLi4gc2VlYWxzbzo6CisKKyAgIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSBgVXNlckRpY3QgUHl0aG9uIHNvdXJjZSBjb2RlCisgICA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL2JyYW5jaGVzL3JlbGVhc2UyNy1tYWludC9MaWIvVXNlckRpY3QucHk/dmlldz1tYXJrdXA+YF8KKwogVGhlIDptb2Q6YFVzZXJEaWN0YCBtb2R1bGUgZGVmaW5lcyB0aGUgOmNsYXNzOmBVc2VyRGljdGAgY2xhc3MgYW5kCiA6Y2xhc3M6YERpY3RNaXhpbmA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3V1LnJzdCBiL0RvYy9saWJyYXJ5L3V1LnJzdAppbmRleCBlMjMwM2MzLi5mYTE0NzdiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91dS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXUucnN0CkBAIC0yMiw2ICsyMiwxMSBAQAogCiBUaGlzIGNvZGUgd2FzIGNvbnRyaWJ1dGVkIGJ5IExhbmNlIEVsbGluZ2hvdXNlLCBhbmQgbW9kaWZpZWQgYnkgSmFjayBKYW5zZW4uCiAKKy4uIHNlZWFsc286OgorCisgICBMYXRlc3QgdmVyc2lvbiBvZiB0aGUgYHV1IG1vZHVsZSBQeXRob24gc291cmNlIGNvZGUKKyAgIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vYnJhbmNoZXMvcmVsZWFzZTI3LW1haW50L0xpYi91dS5weT92aWV3PW1hcmt1cD5gXworCiBUaGUgOm1vZDpgdXVgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dhcm5pbmdzLnJzdCBiL0RvYy9saWJyYXJ5L3dhcm5pbmdzLnJzdAppbmRleCA4NmNhNTEzLi41NDRkOWY3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXJuaW5ncy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0CkBAIC01OSw3ICs1OSw3IEBACiB8IDpleGM6YFVzZXJXYXJuaW5nYCAgICAgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgY2F0ZWdvcnkgZm9yIDpmdW5jOmB3YXJuYC4gICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgICAgICAgICB8IEJhc2UgY2F0ZWdvcnkgZm9yIHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmVhdHVyZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZWF0dXJlcyAoaWdub3JlZCBieSBkZWZhdWx0KS4gICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpleGM6YFN5bnRheFdhcm5pbmdgICAgICAgICAgICAgIHwgQmFzZSBjYXRlZ29yeSBmb3Igd2FybmluZ3MgYWJvdXQgZHViaW91cyAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzeW50YWN0aWMgZmVhdHVyZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtODksNiArODksOSBAQAogc3RhbmRhcmQgd2FybmluZyBjYXRlZ29yaWVzLiAgQSB3YXJuaW5nIGNhdGVnb3J5IG11c3QgYWx3YXlzIGJlIGEgc3ViY2xhc3Mgb2YKIHRoZSA6ZXhjOmBXYXJuaW5nYCBjbGFzcy4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgaXMgaWdub3JlZCBieSBkZWZhdWx0LgorCiAKIC4uIF93YXJuaW5nLWZpbHRlcjoKIApAQCAtMTQ4LDEzICsxNTEsMTkgQEAKIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUgcGFyc2VzIHRoZXNlIHdoZW4gaXQgaXMgZmlyc3QgaW1wb3J0ZWQgKGludmFsaWQgb3B0aW9ucwogYXJlIGlnbm9yZWQsIGFmdGVyIHByaW50aW5nIGEgbWVzc2FnZSB0byBgYHN5cy5zdGRlcnJgYCkuCiAKLVRoZSB3YXJuaW5ncyB0aGF0IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQgbWF5IGJlIGVuYWJsZWQgYnkgcGFzc2luZyA6b3B0aW9uOmAtV2RgCi10byB0aGUgaW50ZXJwcmV0ZXIuIFRoaXMgZW5hYmxlcyBkZWZhdWx0IGhhbmRsaW5nIGZvciBhbGwgd2FybmluZ3MsIGluY2x1ZGluZwotdGhvc2UgdGhhdCBhcmUgbm9ybWFsbHkgaWdub3JlZCBieSBkZWZhdWx0LiBUaGlzIGlzIHBhcnRpY3VsYXIgdXNlZnVsIGZvcgotZW5hYmxpbmcgSW1wb3J0V2FybmluZyB3aGVuIGRlYnVnZ2luZyBwcm9ibGVtcyBpbXBvcnRpbmcgYSBkZXZlbG9wZWQgcGFja2FnZS4KLUltcG9ydFdhcm5pbmcgY2FuIGFsc28gYmUgZW5hYmxlZCBleHBsaWNpdGx5IGluIFB5dGhvbiBjb2RlIHVzaW5nOjoKIAotICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JywgSW1wb3J0V2FybmluZykKK0RlZmF1bHQgV2FybmluZyBGaWx0ZXJzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitCeSBkZWZhdWx0LCBQeXRob24gaW5zdGFsbHMgc2V2ZXJhbCB3YXJuaW5nIGZpbHRlcnMsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGJ5Cit0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgcGFzc2VkIHRvIDpvcHRpb246YC1XYCBhbmQgY2FsbHMgdG8KKzpmdW5jOmBmaWx0ZXJ3YXJuaW5nc2AuCisKKyogOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AsIGFuZCA6ZXhjOmBJbXBvcnRXYXJuaW5nYCBhcmUgaWdub3JlZC4KKworKiA6ZXhjOmBCeXRlc1dhcm5pbmdgIGlzIGlnbm9yZWQgdW5sZXNzIHRoZSA6b3B0aW9uOmAtYmAgb3B0aW9uIGlzIGdpdmVuIG9uY2Ugb3IKKyAgdHdpY2U7IGluIHRoaXMgY2FzZSB0aGlzIHdhcm5pbmcgaXMgZWl0aGVyIHByaW50ZWQgKGBgLWJgYCkgb3IgdHVybmVkIGludG8gYW4KKyAgZXhjZXB0aW9uIChgYC1iYmBgKS4KIAogCiAuLiBfd2FybmluZy1zdXBwcmVzczoKQEAgLTIzMSw2ICsyNDAsMzcgQEAKIGVudHJpZXMgZnJvbSB0aGUgd2FybmluZ3MgbGlzdCBiZWZvcmUgZWFjaCBuZXcgb3BlcmF0aW9uKS4KIAogCitVcGRhdGluZyBDb2RlIEZvciBOZXcgVmVyc2lvbnMgb2YgUHl0aG9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dhcm5pbmdzIHRoYXQgYXJlIG9ubHkgb2YgaW50ZXJlc3QgdG8gdGhlIGRldmVsb3BlciBhcmUgaWdub3JlZCBieSBkZWZhdWx0LiBBcworc3VjaCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0byB0ZXN0IHlvdXIgY29kZSB3aXRoIHR5cGljYWxseSBpZ25vcmVkIHdhcm5pbmdzCittYWRlIHZpc2libGUuIFlvdSBjYW4gZG8gdGhpcyBmcm9tIHRoZSBjb21tYW5kLWxpbmUgYnkgcGFzc2luZyA6b3B0aW9uOmAtV2RgCit0byB0aGUgaW50ZXJwcmV0ZXIgKHRoaXMgaXMgc2hvcnRoYW5kIGZvciA6b3B0aW9uOmAtVyBkZWZhdWx0YCkuICBUaGlzIGVuYWJsZXMKK2RlZmF1bHQgaGFuZGxpbmcgZm9yIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KK1RvIGNoYW5nZSB3aGF0IGFjdGlvbiBpcyB0YWtlbiBmb3IgZW5jb3VudGVyZWQgd2FybmluZ3MgeW91IHNpbXBseSBjaGFuZ2Ugd2hhdAorYXJndW1lbnQgaXMgcGFzc2VkIHRvIDpvcHRpb246YC1XYCwgZS5nLiA6b3B0aW9uOmAtVyBlcnJvcmAuIFNlZSB0aGUKKzpvcHRpb246YC1XYCBmbGFnIGZvciBtb3JlIGRldGFpbHMgb24gd2hhdCBpcyBwb3NzaWJsZS4KKworVG8gcHJvZ3JhbW1hdGljYWxseSBkbyB0aGUgc2FtZSBhcyA6b3B0aW9uOmAtV2RgLCB1c2U6OgorCisgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpCisKK01ha2Ugc3VyZSB0byBleGVjdXRlIHRoaXMgY29kZSBhcyBzb29uIGFzIHBvc3NpYmxlLiBUaGlzIHByZXZlbnRzIHRoZQorcmVnaXN0ZXJpbmcgb2Ygd2hhdCB3YXJuaW5ncyBoYXZlIGJlZW4gcmFpc2VkIGZyb20gdW5leHBlY3RlZGx5IGluZmx1ZW5jaW5nIGhvdworZnV0dXJlIHdhcm5pbmdzIGFyZSB0cmVhdGVkLgorCitIYXZpbmcgY2VydGFpbiB3YXJuaW5ncyBpZ25vcmVkIGJ5IGRlZmF1bHQgaXMgZG9uZSB0byBwcmV2ZW50IGEgdXNlciBmcm9tCitzZWVpbmcgd2FybmluZ3MgdGhhdCBhcmUgb25seSBvZiBpbnRlcmVzdCB0byB0aGUgZGV2ZWxvcGVyLiBBcyB5b3UgZG8gbm90CituZWNlc3NhcmlseSBoYXZlIGNvbnRyb2wgb3ZlciB3aGF0IGludGVycHJldGVyIGEgdXNlciB1c2VzIHRvIHJ1biB0aGVpciBjb2RlLAoraXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyB2ZXJzaW9uIG9mIFB5dGhvbiB3aWxsIGJlIHJlbGVhc2VkIGJldHdlZW4geW91cgorcmVsZWFzZSBjeWNsZXMuICBUaGUgbmV3IGludGVycHJldGVyIHJlbGVhc2UgY291bGQgdHJpZ2dlciBuZXcgd2FybmluZ3MgaW4geW91cgorY29kZSB0aGF0IHdlcmUgbm90IHRoZXJlIGluIGFuIG9sZGVyIGludGVycHJldGVyLCBlLmcuCis6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIGZvciBhIG1vZHVsZSB0aGF0IHlvdSBhcmUgdXNpbmcuIFdoaWxlIHlvdSBhcyBhCitkZXZlbG9wZXIgd2FudCB0byBiZSBub3RpZmllZCB0aGF0IHlvdXIgY29kZSBpcyB1c2luZyBhIGRlcHJlY2F0ZWQgbW9kdWxlLCB0byBhCit1c2VyIHRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsbHkgbm9pc2UgYW5kIHByb3ZpZGVzIG5vIGJlbmVmaXQgdG8gdGhlbS4KKworCiAuLiBfd2FybmluZy1mdW5jdGlvbnM6CiAKIEF2YWlsYWJsZSBGdW5jdGlvbnMKQEAgLTI5Nyw5ICszMzcsOCBAQAogICAgbWVzc2FnZTsgaWYgKmxpbmUqIGlzIG5vdCBzdXBwbGllZCwgOmZ1bmM6YHNob3d3YXJuaW5nYCB3aWxsCiAgICB0cnkgdG8gcmVhZCB0aGUgbGluZSBzcGVjaWZpZWQgYnkgKmZpbGVuYW1lKiBhbmQgKmxpbmVubyouCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi42Ci0gICAgICBBZGRlZCB0aGUgKmxpbmUqIGFyZ3VtZW50LiBJbXBsZW1lbnRhdGlvbnMgdGhhdCBsYWNrIHRoZSBuZXcgYXJndW1lbnQKLSAgICAgIHdpbGwgdHJpZ2dlciBhIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgVGhlICpsaW5lKiBhcmd1bWVudCBpcyByZXF1aXJlZCB0byBiZSBzdXBwb3J0ZWQuCiAKIAogLi4gZnVuY3Rpb246OiBmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vWywgbGluZV0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93YXZlLnJzdCBiL0RvYy9saWJyYXJ5L3dhdmUucnN0CmluZGV4IDNiZTAzNDMuLmMxZGI1MjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dhdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dhdmUucnN0CkBAIC0xNCw4ICsxNCw4IEBACiAKIC4uIGZ1bmN0aW9uOjogb3BlbihmaWxlWywgbW9kZV0pCiAKLSAgIElmICpmaWxlKiBpcyBhIHN0cmluZywgb3BlbiB0aGUgZmlsZSBieSB0aGF0IG5hbWUsIG90aGVyIHRyZWF0IGl0IGFzIGEgc2Vla2FibGUKLSAgIGZpbGUtbGlrZSBvYmplY3QuICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQorICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCiAKICAgIGBgJ3InYGAsIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KQEAgLTI2LDkgKzI2LDE0IEBACiAgICBOb3RlIHRoYXQgaXQgZG9lcyBub3QgYWxsb3cgcmVhZC93cml0ZSBXQVYgZmlsZXMuCiAKICAgIEEgKm1vZGUqIG9mIGBgJ3InYGAgb3IgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEKLSAgICptb2RlKiBvZiBgYCd3J2BgIG9yIGBgJ3diJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfd3JpdGVgIG9iamVjdC4gIElmICptb2RlKgotICAgaXMgb21pdHRlZCBhbmQgYSBmaWxlLWxpa2UgIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMKLSAgIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAqbW9kZSogKHRoZSBgYCdiJ2BgIGZsYWcgaXMgc3RpbGwgYWRkZWQgaWYgIG5lY2Vzc2FyeSkuCisgICAqbW9kZSogb2YgYGAndydgYCBvciBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZgorICAgKm1vZGUqIGlzIG9taXR0ZWQgYW5kIGEgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgCisgICBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAqbW9kZSogKHRoZSBgYCdiJ2BgIGZsYWcgaXMgc3RpbGwgYWRkZWQgaWYKKyAgIG5lY2Vzc2FyeSkuCisKKyAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCisgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQorICAgdGhlIGZpbGUgb2JqZWN0LgogCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCkBAIC01Miw4ICs1Nyw4IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5jbG9zZSgpCiAKLSAgIENsb3NlIHRoZSBzdHJlYW0sIGFuZCBtYWtlIHRoZSBpbnN0YW5jZSB1bnVzYWJsZS4gVGhpcyBpcyBjYWxsZWQgYXV0b21hdGljYWxseQotICAgb24gb2JqZWN0IGNvbGxlY3Rpb24uCisgICBDbG9zZSB0aGUgc3RyZWFtIGlmIGl0IHdhcyBvcGVuZWQgYnkgOm1vZDpgd2F2ZWAsIGFuZCBtYWtlIHRoZSBpbnN0YW5jZQorICAgdW51c2FibGUuICBUaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IG9uIG9iamVjdCBjb2xsZWN0aW9uLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRuY2hhbm5lbHMoKQpAQCAtMTM5LDggKzE0NCw4IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuY2xvc2UoKQogCi0gICBNYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QsIGFuZCBjbG9zZSB0aGUgZmlsZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24KLSAgIGRlbGV0aW9uLgorICAgTWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LCBhbmQgY2xvc2UgdGhlIGZpbGUgaWYgaXQgd2FzIG9wZW5lZCBieQorICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4KIAogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLnNldG5jaGFubmVscyhuKQpAQCAtMTkyLDYgKzE5Nyw3IEBACiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LgogCisKIE5vdGUgdGhhdCBpdCBpcyBpbnZhbGlkIHRvIHNldCBhbnkgcGFyYW1ldGVycyBhZnRlciBjYWxsaW5nIDptZXRoOmB3cml0ZWZyYW1lc2AKIG9yIDptZXRoOmB3cml0ZWZyYW1lc3Jhd2AsIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyB3aWxsIHJhaXNlCiA6ZXhjOmB3YXZlLkVycm9yYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0IGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKaW5kZXggZDQwM2MzYy4uOWM2NTU4NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKQEAgLTU5LDExICs1OSwxNCBAQAogaW5zdGFuY2VzLCBmdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gKGJ1dCBub3QgaW4gQyksIG1ldGhvZHMgKGJvdGggYm91bmQgYW5kCiB1bmJvdW5kKSwgc2V0cywgZnJvemVuc2V0cywgZmlsZSBvYmplY3RzLCA6dGVybTpgZ2VuZXJhdG9yYFxzLCB0eXBlIG9iamVjdHMsCiA6Y2xhc3M6YERCY3Vyc29yYCBvYmplY3RzIGZyb20gdGhlIDptb2Q6YGJzZGRiYCBtb2R1bGUsIHNvY2tldHMsIGFycmF5cywgZGVxdWVzLAotYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMuCityZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3RzLCBhbmQgY29kZSBvYmplY3RzLgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNAogICAgQWRkZWQgc3VwcG9ydCBmb3IgZmlsZXMsIHNvY2tldHMsIGFycmF5cywgYW5kIHBhdHRlcm5zLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhyZWFkLmxvY2ssIHRocmVhZGluZy5Mb2NrLCBhbmQgY29kZSBvYmplY3RzLgorCiBTZXZlcmFsIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgOmNsYXNzOmBsaXN0YCBhbmQgOmNsYXNzOmBkaWN0YCBkbyBub3QgZGlyZWN0bHkKIHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIGJ1dCBjYW4gYWRkIHN1cHBvcnQgdGhyb3VnaCBzdWJjbGFzc2luZzo6CiAKQEAgLTIwNiw2ICsyMDksMTQgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNQogCiAKKy4uIGNsYXNzOjogV2Vha1NldChbZWxlbWVudHNdKQorCisgICBTZXQgY2xhc3MgdGhhdCBrZWVwcyB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGVsZW1lbnRzLiAgQW4gZWxlbWVudCB3aWxsIGJlCisgICBkaXNjYXJkZWQgd2hlbiBubyBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IGV4aXN0cyBhbnkgbW9yZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKwogLi4gZGF0YTo6IFJlZmVyZW5jZVR5cGUKIAogICAgVGhlIHR5cGUgb2JqZWN0IGZvciB3ZWFrIHJlZmVyZW5jZXMgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0IGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKaW5kZXggMjBmNjIzMS4uNzRlMTJhMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKQEAgLTMyLDggKzMyLDggQEAKIAogVGhlIHNjcmlwdCA6cHJvZ3JhbTpgd2ViYnJvd3NlcmAgY2FuIGJlIHVzZWQgYXMgYSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGZvciB0aGUKIG1vZHVsZS4gSXQgYWNjZXB0cyBhbiBVUkwgYXMgdGhlIGFyZ3VtZW50LiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwKLXBhcmFtZXRlcnM6IDpvcHRpb246YC1uYCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LCBpZiBwb3NzaWJsZTsKLTpvcHRpb246YC10YCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgcGFnZSAoInRhYiIpLiBUaGUgb3B0aW9ucyBhcmUsCitwYXJhbWV0ZXJzOiBgYC1uYGAgb3BlbnMgdGhlIFVSTCBpbiBhIG5ldyBicm93c2VyIHdpbmRvdywgaWYgcG9zc2libGU7CitgYC10YGAgb3BlbnMgdGhlIFVSTCBpbiBhIG5ldyBicm93c2VyIHBhZ2UgKCJ0YWIiKS4gVGhlIG9wdGlvbnMgYXJlLAogbmF0dXJhbGx5LCBtdXR1YWxseSBleGNsdXNpdmUuCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uIGlzIGRlZmluZWQ6CkBAIC02OCw3ICs2OCw2IEBACiAgICBPcGVuICp1cmwqIGluIGEgbmV3IHdpbmRvdyBvZiB0aGUgZGVmYXVsdCBicm93c2VyLCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlLCBvcGVuCiAgICAqdXJsKiBpbiB0aGUgb25seSBicm93c2VyIHdpbmRvdy4KIAotCiAuLiBmdW5jdGlvbjo6IG9wZW5fbmV3X3RhYih1cmwpCiAKICAgIE9wZW4gKnVybCogaW4gYSBuZXcgcGFnZSAoInRhYiIpIG9mIHRoZSBkZWZhdWx0IGJyb3dzZXIsIGlmIHBvc3NpYmxlLCBvdGhlcndpc2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0IGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKaW5kZXggNTE3ZmMzOC4uMzE2MzQ5NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKQEAgLTcxMiw3ICs3MTIsNyBAQAogICAgIyB1c2UgYSBmdW5jdGlvbiAobm90ZSB0aGF0IHlvdSdyZSBub3QgbGltaXRlZCB0byBhIGZ1bmN0aW9uLCB5b3UgY2FuCiAgICAjIHVzZSBhIGNsYXNzIGZvciBleGFtcGxlKS4gVGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24KICAgICMgaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgQ0dJLXN0eWxlIGVudnJpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZQotICAgIyBzZWNvbmQgdmFyaWFibGUgaXMgdGhlIGNhbGxhYmxlIG9iamVjdCAoc2VlIDpwZXA6YDMzM2ApCisgICAjIHNlY29uZCB2YXJpYWJsZSBpcyB0aGUgY2FsbGFibGUgb2JqZWN0IChzZWUgUEVQIDMzMykuCiAgICBkZWYgaGVsbG9fd29ybGRfYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJyAjIEhUVFAgU3RhdHVzCiAgICAgICAgaGVhZGVycyA9IFsoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJyldICMgSFRUUCBIZWFkZXJzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0IGIvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdAppbmRleCBjZmRlNWI5Li4wNjRkZGQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgdG8gZGlzY2FyZCBjaGlsZHJlbiBvZiB0aGF0IG5vZGUuCiAKIAotLi4gbWV0aG9kOjogTm9kZS53cml0ZXhtbCh3cml0ZXJbLCBpbmRlbnQ9IiJbLCBhZGRpbmRlbnQ9IiJbLCBuZXdsPSIiWywgZW5jb2Rpbmc9IiJdXV1dKQorLi4gbWV0aG9kOjogTm9kZS53cml0ZXhtbCh3cml0ZXJbLCBpbmRlbnQ9IiJbLCBhZGRpbmRlbnQ9IiJbLCBuZXdsPSIiXV1dKQogCiAgICBXcml0ZSBYTUwgdG8gdGhlIHdyaXRlciBvYmplY3QuICBUaGUgd3JpdGVyIHNob3VsZCBoYXZlIGEgOm1ldGg6YHdyaXRlYCBtZXRob2QKICAgIHdoaWNoIG1hdGNoZXMgdGhhdCBvZiB0aGUgZmlsZSBvYmplY3QgaW50ZXJmYWNlLiAgVGhlICppbmRlbnQqIHBhcmFtZXRlciBpcyB0aGUKQEAgLTEyNiw2ICsxMjYsOSBAQAogICAgaW5kZW50YXRpb24gdG8gdXNlIGZvciBzdWJub2RlcyBvZiB0aGUgY3VycmVudCBvbmUuICBUaGUgKm5ld2wqIHBhcmFtZXRlcgogICAgc3BlY2lmaWVzIHRoZSBzdHJpbmcgdG8gdXNlIHRvIHRlcm1pbmF0ZSBuZXdsaW5lcy4KIAorICAgRm9yIHRoZSA6Y2xhc3M6YERvY3VtZW50YCBub2RlLCBhbiBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgKmVuY29kaW5nKiBjYW4KKyAgIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5jb2RpbmcgZmllbGQgb2YgdGhlIFhNTCBoZWFkZXIuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4xCiAgICAgICBUaGUgb3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzICppbmRlbnQqLCAqYWRkaW5kZW50KiwgYW5kICpuZXdsKiB3ZXJlIGFkZGVkIHRvCiAgICAgICBzdXBwb3J0IHByZXR0eSBvdXRwdXQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZG9tLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CmluZGV4IDBmOTE3MjMuLjEwNjk2MTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CkBAIC03MDUsMTggKzcwNSwyNyBAQAogCiAuLiBhdHRyaWJ1dGU6OiBBdHRyLm5hbWUKIAotICAgVGhlIGF0dHJpYnV0ZSBuYW1lLiAgSW4gYSBuYW1lc3BhY2UtdXNpbmcgZG9jdW1lbnQgaXQgbWF5IGhhdmUgY29sb25zIGluIGl0LgorICAgVGhlIGF0dHJpYnV0ZSBuYW1lLgorICAgSW4gYSBuYW1lc3BhY2UtdXNpbmcgZG9jdW1lbnQgaXQgbWF5IGluY2x1ZGUgYSBjb2xvbi4KIAogCiAuLiBhdHRyaWJ1dGU6OiBBdHRyLmxvY2FsTmFtZQogCi0gICBUaGUgcGFydCBvZiB0aGUgbmFtZSBmb2xsb3dpbmcgdGhlIGNvbG9uIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB0aGUgZW50aXJlIG5hbWUuCisgICBUaGUgcGFydCBvZiB0aGUgbmFtZSBmb2xsb3dpbmcgdGhlIGNvbG9uIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB0aGUKKyAgIGVudGlyZSBuYW1lLgogICAgVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuCiAKIAogLi4gYXR0cmlidXRlOjogQXR0ci5wcmVmaXgKIAotICAgVGhlIHBhcnQgb2YgdGhlIG5hbWUgcHJlY2VkaW5nIHRoZSBjb2xvbiBpZiB0aGVyZSBpcyBvbmUsIGVsc2UgdGhlIGVtcHR5IHN0cmluZy4KKyAgIFRoZSBwYXJ0IG9mIHRoZSBuYW1lIHByZWNlZGluZyB0aGUgY29sb24gaWYgdGhlcmUgaXMgb25lLCBlbHNlIHRoZQorICAgZW1wdHkgc3RyaW5nLgorCisKKy4uIGF0dHJpYnV0ZTo6IEF0dHIudmFsdWUKKworICAgVGhlIHRleHQgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4gIFRoaXMgaXMgYSBzeW5vbnltIGZvciB0aGUKKyAgIDphdHRyOmBub2RlVmFsdWVgIGF0dHJpYnV0ZS4KIAogCiAuLiBfZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0czoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CmluZGV4IGUwNzRkNTUuLmRlZjQ2NjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdApAQCAtOSw5ICs5LDkgQEAKIAogLi4gdmVyc2lvbmFkZGVkOjogMi41CiAKLVRoZSBFbGVtZW50IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0byBzdG9yZSBoaWVyYXJjaGljYWwKLWRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuIFRoZSB0eXBlIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBjcm9zcyBiZXR3ZWVuIGEgbGlzdAotYW5kIGEgZGljdGlvbmFyeS4KK1RoZSA6Y2xhc3M6YEVsZW1lbnRgIHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0byBzdG9yZQoraGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuICBUaGUgdHlwZSBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgY3Jvc3MKK2JldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCiAKIEVhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CiAKQEAgLTI2LDcgKzI2LDggQEAKIAogKiBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cywgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlCiAKLVRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIEVsZW1lbnQgb3IgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9ucy4KK1RvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIDpjbGFzczpgRWxlbWVudGAgY29uc3RydWN0b3Igb3IgdGhlCis6ZnVuYzpgU3ViRWxlbWVudGAgZmFjdG9yeSBmdW5jdGlvbi4KIAogVGhlIDpjbGFzczpgRWxlbWVudFRyZWVgIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudCBzdHJ1Y3R1cmUsIGFuZAogY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCkBAIC0zNCw4ICszNSwxNCBAQAogQSBDIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIGlzIGF2YWlsYWJsZSBhcyA6bW9kOmB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlYC4KIAogU2VlIGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvZWxlbWVudC1pbmRleC5odG0gZm9yIHR1dG9yaWFscyBhbmQgbGlua3MgdG8gb3RoZXIKLWRvY3MuIEZyZWRyaWsgTHVuZGgncyBwYWdlIGlzIGFsc28gdGhlIGxvY2F0aW9uIG9mIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZQoteG1sLmV0cmVlLkVsZW1lbnRUcmVlLgorZG9jcy4gIEZyZWRyaWsgTHVuZGgncyBwYWdlIGlzIGFsc28gdGhlIGxvY2F0aW9uIG9mIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mCit0aGUgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgVGhlIEVsZW1lbnRUcmVlIEFQSSBpcyB1cGRhdGVkIHRvIDEuMy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgIGBJbnRyb2R1Y2luZyBFbGVtZW50VHJlZSAxLjMKKyAgIDxodHRwOi8vZWZmYm90Lm9yZy96b25lL2VsZW1lbnR0cmVlLTEzLWludHJvLmh0bT5gXy4KKwogCiAuLiBfZWxlbWVudHRyZWUtZnVuY3Rpb25zOgogCkBAIC00MywxOCArNTAsMTkgQEAKIC0tLS0tLS0tLQogCiAKLS4uIGZ1bmN0aW9uOjogQ29tbWVudChbdGV4dF0pCisuLiBmdW5jdGlvbjo6IENvbW1lbnQodGV4dD1Ob25lKQogCi0gICBDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50IHRoYXQKLSAgIHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudC4gVGhlIGNvbW1lbnQgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYW4gOC1iaXQKLSAgIEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUgc3RyaW5nLiAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudAotICAgc3RyaW5nLiBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KKyAgIENvbW1lbnQgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQKKyAgIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50IGJ5IHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyLiAgVGhlCisgICBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgYnl0ZXN0cmluZyBvciBhIFVuaWNvZGUgc3RyaW5nLiAgKnRleHQqIGlzIGEKKyAgIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZQorICAgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KIAogCiAuLiBmdW5jdGlvbjo6IGR1bXAoZWxlbSkKIAotICAgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQKLSAgIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorICAgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcyBmdW5jdGlvbgorICAgc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogCiAgICBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzIHZlcnNpb24sIGl0J3MKICAgIHdyaXR0ZW4gYXMgYW4gb3JkaW5hcnkgWE1MIGZpbGUuCkBAIC02MiwzNyArNzAsMzYgQEAKICAgICplbGVtKiBpcyBhbiBlbGVtZW50IHRyZWUgb3IgYW4gaW5kaXZpZHVhbCBlbGVtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogRWxlbWVudCh0YWdbLCBhdHRyaWJdWywgKipleHRyYV0pCi0KLSAgIEVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBzdGFuZGFyZAotICAgRWxlbWVudCBpbnRlcmZhY2UuICBUaGUgZXhhY3QgY2xhc3Mgb3IgdHlwZSBvZiB0aGF0IG9iamVjdCBpcyBpbXBsZW1lbnRhdGlvbgotICAgZGVwZW5kZW50LCBidXQgaXQgd2lsbCBhbHdheXMgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBfRWxlbWVudEludGVyZmFjZSBjbGFzcyBpbgotICAgdGhpcyBtb2R1bGUuCi0KLSAgIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlciA4LWJpdAotICAgQVNDSUkgc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICphdHRyaWIqIGlzIGFuCi0gICBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4gKmV4dHJhKiBjb250YWlucyBhZGRpdGlvbmFsCi0gICBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4gUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLgotCi0KIC4uIGZ1bmN0aW9uOjogZnJvbXN0cmluZyh0ZXh0KQogCi0gICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFNhbWUgYXMgWE1MLiAqdGV4dCogaXMgYSBzdHJpbmcKLSAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKyAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyA6ZnVuYzpgWE1MYC4gICp0ZXh0KgorICAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4gIFJldHVybnMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4KKworCisuLiBmdW5jdGlvbjo6IGZyb21zdHJpbmdsaXN0KHNlcXVlbmNlLCBwYXJzZXI9Tm9uZSkKKworICAgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4gICpzZXF1ZW5jZSogaXMgYQorICAgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4gICpwYXJzZXIqIGlzIGFuCisgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFhNTFBhcnNlcmAKKyAgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAogCiAuLiBmdW5jdGlvbjo6IGlzZWxlbWVudChlbGVtZW50KQogCi0gICBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4gKmVsZW1lbnQqIGlzIGFuCi0gICBlbGVtZW50IGluc3RhbmNlLiBSZXR1cm5zIGEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgorICAgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuICAqZWxlbWVudCogaXMgYW4KKyAgIGVsZW1lbnQgaW5zdGFuY2UuICBSZXR1cm5zIGEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgogCiAKLS4uIGZ1bmN0aW9uOjogaXRlcnBhcnNlKHNvdXJjZVssIGV2ZW50c10pCisuLiBmdW5jdGlvbjo6IGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSkKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzIHdoYXQncwotICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSAgICpldmVudHMqIGlzIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiIGV2ZW50cyBhcmUKLSAgIHJlcG9ydGVkLiBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nIGBgKGV2ZW50LCBlbGVtKWBgIHBhaXJzLgorICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MCisgICBkYXRhLiAgKmV2ZW50cyogaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKKyAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKKyAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhbgorICAgOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCiAKICAgIC4uIG5vdGU6OgogCkBAIC0xMDUsMTk4ICsxMTIsMjcxIEBACiAgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KIAogCi0uLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZVssIHBhcnNlcl0pCisuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCiAKLSAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZS4gKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlCi0gICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90Ci0gICBnaXZlbiwgdGhlIHN0YW5kYXJkIFhNTFRyZWVCdWlsZGVyIHBhcnNlciBpcyB1c2VkLiBSZXR1cm5zIGFuIEVsZW1lbnRUcmVlCi0gICBpbnN0YW5jZS4KKyAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZS4gICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZQorICAgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZgorICAgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhbgorICAgOmNsYXNzOmBFbGVtZW50VHJlZWAgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0WywgdGV4dF0pCisuLiBmdW5jdGlvbjo6IFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIHRleHQ9Tm9uZSkKIAotICAgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdCB3aWxsCi0gICBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAqdGFyZ2V0KiBpcyBhIHN0cmluZyBjb250YWluaW5nCi0gICB0aGUgUEkgdGFyZ2V0LiAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmIGdpdmVuLiBSZXR1cm5zCi0gICBhbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorICAgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdAorICAgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAgKnRhcmdldCogaXMgYSBzdHJpbmcKKyAgIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4gICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYKKyAgIGdpdmVuLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogCiAKLS4uIGZ1bmN0aW9uOjogU3ViRWxlbWVudChwYXJlbnQsIHRhZ1ssIGF0dHJpYlssICAqKmV4dHJhXV0pCisuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSkKIAotICAgU3ViZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZCBhcHBlbmRzIGl0Ci0gICB0byBhbiBleGlzdGluZyBlbGVtZW50LgorICAgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkgZXhpc3RpbmcKKyAgIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJIHdpbGwgYmUgcmVtb3ZlZC4KKyAgICpwcmVmaXgqIGlzIGEgbmFtZXNwYWNlIHByZWZpeC4gICp1cmkqIGlzIGEgbmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kCisgICBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0CisgICBhbGwgcG9zc2libGUuCiAKLSAgIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlciA4LWJpdAotICAgQVNDSUkgc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuICpwYXJlbnQqIGlzIHRoZSBwYXJlbnQgZWxlbWVudC4gKnRhZyogaXMgdGhlCi0gICBzdWJlbGVtZW50IG5hbWUuICphdHRyaWIqIGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudAotICAgYXR0cmlidXRlcy4gKmV4dHJhKiBjb250YWlucyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotICAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50WywgZW5jb2RpbmddKQorLi4gZnVuY3Rpb246OiBTdWJFbGVtZW50KHBhcmVudCwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpCiAKLSAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbCBzdWJlbGVtZW50cy4KLSAgICplbGVtZW50KiBpcyBhbiBFbGVtZW50IGluc3RhbmNlLiAqZW5jb2RpbmcqIGlzIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMKLSAgIFVTLUFTQ0lJKS4gUmV0dXJucyBhbiBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKyAgIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcworICAgaXQgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KKworICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICBieXRlc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuICAqcGFyZW50KiBpcyB0aGUgcGFyZW50IGVsZW1lbnQuICAqdGFnKiBpcworICAgdGhlIHN1YmVsZW1lbnQgbmFtZS4gICphdHRyaWIqIGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudAorICAgYXR0cmlidXRlcy4gICpleHRyYSogY29udGFpbnMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkCisgICBhcmd1bWVudHMuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiBYTUwodGV4dCkKKy4uIGZ1bmN0aW9uOjogdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorCisgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKKyAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKKyAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgKm1ldGhvZCogaXMgZWl0aGVyIGBgInhtbCJgYCwKKyAgIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLiAgUmV0dXJucyBhbiBlbmNvZGVkIHN0cmluZworICAgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCisKKworLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorCisgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKKyAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKKyAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgICptZXRob2QqIGlzIGVpdGhlciBgYCJ4bWwiYGAsCisgICBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4gIFJldHVybnMgYSBsaXN0IG9mIGVuY29kZWQKKyAgIHN0cmluZ3MgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuICBJdCBkb2VzIG5vdCBndWFyYW50ZWUgYW55IHNwZWNpZmljCisgICBzZXF1ZW5jZSwgZXhjZXB0IHRoYXQgYGAiIi5qb2luKHRvc3RyaW5nbGlzdChlbGVtZW50KSkgPT0KKyAgIHRvc3RyaW5nKGVsZW1lbnQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKKy4uIGZ1bmN0aW9uOjogWE1MKHRleHQsIHBhcnNlcj1Ob25lKQogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8KLSAgIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLiAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKyAgIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLiAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MCisgICBkYXRhLiAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gIFJldHVybnMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IFhNTElEKHRleHQpCisuLiBmdW5jdGlvbjo6IFhNTElEKHRleHQsIHBhcnNlcj1Ob25lKQogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gZnJvbSBhIHN0cmluZyBjb25zdGFudCwgYW5kIGFsc28gcmV0dXJucyBhIGRpY3Rpb25hcnkKLSAgIHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTAotICAgZGF0YS4gUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gRWxlbWVudCBpbnN0YW5jZSBhbmQgYSBkaWN0aW9uYXJ5LgorICAgd2hpY2ggbWFwcyBmcm9tIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4gICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTAorICAgZGF0YS4gICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyBhbgorICAgOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZSBhbmQgYSBkaWN0aW9uYXJ5LgogCiAKLS4uIF9lbGVtZW50dHJlZS1lbGVtZW50LWludGVyZmFjZToKKy4uIF9lbGVtZW50dHJlZS1lbGVtZW50LW9iamVjdHM6CiAKLVRoZSBFbGVtZW50IEludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFbGVtZW50IE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLQogCi1FbGVtZW50IG9iamVjdHMgcmV0dXJuZWQgYnkgRWxlbWVudCBvciBTdWJFbGVtZW50IGhhdmUgdGhlICBmb2xsb3dpbmcgbWV0aG9kcwotYW5kIGF0dHJpYnV0ZXMuCiAKKy4uIGNsYXNzOjogRWxlbWVudCh0YWcsIGF0dHJpYj17fSwgKipleHRyYSkKIAotLi4gYXR0cmlidXRlOjogRWxlbWVudC50YWcKKyAgIEVsZW1lbnQgY2xhc3MuICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLCBhbmQgcHJvdmlkZXMgYQorICAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgaW50ZXJmYWNlLgogCi0gICBBIHN0cmluZyBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgZGF0YSB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlIGVsZW1lbnQKLSAgIHR5cGUsIGluIG90aGVyIHdvcmRzKS4KKyAgIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlcgorICAgYnl0ZXN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLiAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gICphdHRyaWIqIGlzCisgICBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4gICpleHRyYSogY29udGFpbnMKKyAgIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCiAKIAotLi4gYXR0cmlidXRlOjogRWxlbWVudC50ZXh0CisgICAuLiBhdHRyaWJ1dGU6OiB0YWcKIAotICAgVGhlICp0ZXh0KiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gaG9sZCBhZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgZWxlbWVudC4gQXMgdGhlIG5hbWUgaW1wbGllcyB0aGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dCBtYXkgYmUgYW55Ci0gICBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgZnJvbSBhbiBYTUwgZmlsZSB0aGUKLSAgIGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gYW55IHRleHQgZm91bmQgYmV0d2VlbiB0aGUgZWxlbWVudCB0YWdzLgorICAgICAgQSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEgdGhpcyBlbGVtZW50IHJlcHJlc2VudHMgKHRoZQorICAgICAgZWxlbWVudCB0eXBlLCBpbiBvdGhlciB3b3JkcykuCiAKIAotLi4gYXR0cmlidXRlOjogRWxlbWVudC50YWlsCisgICAuLiBhdHRyaWJ1dGU6OiB0ZXh0CiAKLSAgIFRoZSAqdGFpbCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAgIGVsZW1lbnQuIFRoaXMgYXR0cmlidXRlIGlzIHVzdWFsbHkgYSBzdHJpbmcgYnV0IG1heSBiZSBhbnkgYXBwbGljYXRpb24tc3BlY2lmaWMKLSAgIG9iamVjdC4gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tIGFuIFhNTCBmaWxlIHRoZSBhdHRyaWJ1dGUgd2lsbCBjb250YWluCi0gICBhbnkgdGV4dCBmb3VuZCBhZnRlciB0aGUgZWxlbWVudCdzIGVuZCB0YWcgYW5kIGJlZm9yZSB0aGUgbmV4dCB0YWcuCisgICAgICBUaGUgKnRleHQqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgIHRoZSBlbGVtZW50LiAgQXMgdGhlIG5hbWUgaW1wbGllcyB0aGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dAorICAgICAgbWF5IGJlIGFueSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuICBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20KKyAgICAgIGFuIFhNTCBmaWxlIHRoZSBhdHRyaWJ1dGUgd2lsbCBjb250YWluIGFueSB0ZXh0IGZvdW5kIGJldHdlZW4gdGhlIGVsZW1lbnQKKyAgICAgIHRhZ3MuCiAKIAotLi4gYXR0cmlidXRlOjogRWxlbWVudC5hdHRyaWIKKyAgIC4uIGF0dHJpYnV0ZTo6IHRhaWwKIAotICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLiBOb3RlIHRoYXQgd2hpbGUgdGhlICphdHRyaWIqCi0gICB2YWx1ZSBpcyBhbHdheXMgYSByZWFsIG11dGFibGUgUHl0aG9uIGRpY3Rpb25hcnksIGFuIEVsZW1lbnRUcmVlIGltcGxlbWVudGF0aW9uCi0gICBtYXkgY2hvb3NlIHRvIHVzZSBhbm90aGVyIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBhbmQgY3JlYXRlIHRoZSBkaWN0aW9uYXJ5Ci0gICBvbmx5IGlmIHNvbWVvbmUgYXNrcyBmb3IgaXQuIFRvIHRha2UgYWR2YW50YWdlIG9mIHN1Y2ggaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlCi0gICBkaWN0aW9uYXJ5IG1ldGhvZHMgYmVsb3cgd2hlbmV2ZXIgcG9zc2libGUuCisgICAgICBUaGUgKnRhaWwqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgIHRoZSBlbGVtZW50LiAgVGhpcyBhdHRyaWJ1dGUgaXMgdXN1YWxseSBhIHN0cmluZyBidXQgbWF5IGJlIGFueQorICAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgb2JqZWN0LiAgSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tIGFuIFhNTCBmaWxlCisgICAgICB0aGUgYXR0cmlidXRlIHdpbGwgY29udGFpbiBhbnkgdGV4dCBmb3VuZCBhZnRlciB0aGUgZWxlbWVudCdzIGVuZCB0YWcgYW5kCisgICAgICBiZWZvcmUgdGhlIG5leHQgdGFnLgogCi1UaGUgZm9sbG93aW5nIGRpY3Rpb25hcnktbGlrZSBtZXRob2RzIHdvcmsgb24gdGhlIGVsZW1lbnQgYXR0cmlidXRlcy4KIAorICAgLi4gYXR0cmlidXRlOjogYXR0cmliCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuY2xlYXIoKQorICAgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLiAgTm90ZSB0aGF0IHdoaWxlIHRoZQorICAgICAgKmF0dHJpYiogdmFsdWUgaXMgYWx3YXlzIGEgcmVhbCBtdXRhYmxlIFB5dGhvbiBkaWN0aW9uYXJ5LCBhbiBFbGVtZW50VHJlZQorICAgICAgaW1wbGVtZW50YXRpb24gbWF5IGNob29zZSB0byB1c2UgYW5vdGhlciBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgYW5kCisgICAgICBjcmVhdGUgdGhlIGRpY3Rpb25hcnkgb25seSBpZiBzb21lb25lIGFza3MgZm9yIGl0LiAgVG8gdGFrZSBhZHZhbnRhZ2Ugb2YKKyAgICAgIHN1Y2ggaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlIGRpY3Rpb25hcnkgbWV0aG9kcyBiZWxvdyB3aGVuZXZlciBwb3NzaWJsZS4KIAotICAgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsCi0gICBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCisgICBUaGUgZm9sbG93aW5nIGRpY3Rpb25hcnktbGlrZSBtZXRob2RzIHdvcmsgb24gdGhlIGVsZW1lbnQgYXR0cmlidXRlcy4KIAogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmdldChrZXlbLCBkZWZhdWx0PU5vbmVdKQorICAgLi4gbWV0aG9kOjogY2xlYXIoKQogCi0gICBHZXRzIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lZCAqa2V5Ki4KKyAgICAgIFJlc2V0cyBhbiBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzIGFsbAorICAgICAgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyB0byBOb25lLgogCi0gICBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9yICpkZWZhdWx0KiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCisKKyAgIC4uIG1ldGhvZDo6IGdldChrZXksIGRlZmF1bHQ9Tm9uZSkKKworICAgICAgR2V0cyB0aGUgZWxlbWVudCBhdHRyaWJ1dGUgbmFtZWQgKmtleSouCisKKyAgICAgIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgKmRlZmF1bHQqIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworCisgICAuLiBtZXRob2Q6OiBpdGVtcygpCisKKyAgICAgIFJldHVybnMgdGhlIGVsZW1lbnQgYXR0cmlidXRlcyBhcyBhIHNlcXVlbmNlIG9mIChuYW1lLCB2YWx1ZSkgcGFpcnMuICBUaGUKKyAgICAgIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4KKworCisgICAuLiBtZXRob2Q6OiBrZXlzKCkKKworICAgICAgUmV0dXJucyB0aGUgZWxlbWVudHMgYXR0cmlidXRlIG5hbWVzIGFzIGEgbGlzdC4gIFRoZSBuYW1lcyBhcmUgcmV0dXJuZWQKKyAgICAgIGluIGFuIGFyYml0cmFyeSBvcmRlci4KKworCisgICAuLiBtZXRob2Q6OiBzZXQoa2V5LCB2YWx1ZSkKKworICAgICAgU2V0IHRoZSBhdHRyaWJ1dGUgKmtleSogb24gdGhlIGVsZW1lbnQgdG8gKnZhbHVlKi4KKworICAgVGhlIGZvbGxvd2luZyBtZXRob2RzIHdvcmsgb24gdGhlIGVsZW1lbnQncyBjaGlsZHJlbiAoc3ViZWxlbWVudHMpLgorCisKKyAgIC4uIG1ldGhvZDo6IGFwcGVuZChzdWJlbGVtZW50KQorCisgICAgICBBZGRzIHRoZSBlbGVtZW50ICpzdWJlbGVtZW50KiB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudHMgaW50ZXJuYWwgbGlzdAorICAgICAgb2Ygc3ViZWxlbWVudHMuCisKKworICAgLi4gbWV0aG9kOjogZXh0ZW5kKHN1YmVsZW1lbnRzKQogCisgICAgICBBcHBlbmRzICpzdWJlbGVtZW50cyogZnJvbSBhIHNlcXVlbmNlIG9iamVjdCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KKyAgICAgIFJhaXNlcyA6ZXhjOmBBc3NlcnRpb25FcnJvcmAgaWYgYSBzdWJlbGVtZW50IGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5pdGVtcygpCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAotICAgUmV0dXJucyB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzIGFzIGEgc2VxdWVuY2Ugb2YgKG5hbWUsIHZhbHVlKSBwYWlycy4gVGhlCi0gICBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmQobWF0Y2gpCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQua2V5cygpCisgICAgICBGaW5kcyB0aGUgZmlyc3Qgc3ViZWxlbWVudCBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZQorICAgICAgb3IgcGF0aC4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZSBvciBgYE5vbmVgYC4KIAotICAgUmV0dXJucyB0aGUgZWxlbWVudHMgYXR0cmlidXRlIG5hbWVzIGFzIGEgbGlzdC4gVGhlIG5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbgotICAgYXJiaXRyYXJ5IG9yZGVyLgogCisgICAuLiBtZXRob2Q6OiBmaW5kYWxsKG1hdGNoKQogCi0uLiBtZXRob2Q6OiBFbGVtZW50LnNldChrZXksIHZhbHVlKQorICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyBhIGxpc3QKKyAgICAgIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgogCi0gICBTZXQgdGhlIGF0dHJpYnV0ZSAqa2V5KiBvbiB0aGUgZWxlbWVudCB0byAqdmFsdWUqLgogCi1UaGUgZm9sbG93aW5nIG1ldGhvZHMgd29yayBvbiB0aGUgZWxlbWVudCdzIGNoaWxkcmVuIChzdWJlbGVtZW50cykuCisgICAuLiBtZXRob2Q6OiBmaW5kdGV4dChtYXRjaCwgZGVmYXVsdD1Ob25lKQogCisgICAgICBGaW5kcyB0ZXh0IGZvciB0aGUgZmlyc3Qgc3ViZWxlbWVudCBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUKKyAgICAgIGEgdGFnIG5hbWUgb3IgcGF0aC4gIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcKKyAgICAgIGVsZW1lbnQsIG9yICpkZWZhdWx0KiBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgbWF0Y2hpbmcKKyAgICAgIGVsZW1lbnQgaGFzIG5vIHRleHQgY29udGVudCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuYXBwZW5kKHN1YmVsZW1lbnQpCiAKLSAgIEFkZHMgdGhlIGVsZW1lbnQgKnN1YmVsZW1lbnQqIHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50cyBpbnRlcm5hbCBsaXN0IG9mCi0gICBzdWJlbGVtZW50cy4KKyAgIC4uIG1ldGhvZDo6IGdldGNoaWxkcmVuKCkKIAorICAgICAgLi4gZGVwcmVjYXRlZDo6IDIuNworICAgICAgICAgVXNlIGBgbGlzdChlbGVtKWBgIG9yIGl0ZXJhdGlvbi4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5maW5kKG1hdGNoKQogCi0gICBGaW5kcyB0aGUgZmlyc3Qgc3ViZWxlbWVudCBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLgotICAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlIG9yIGBgTm9uZWBgLgorICAgLi4gbWV0aG9kOjogZ2V0aXRlcmF0b3IodGFnPU5vbmUpCiAKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIFVzZSBtZXRob2QgOm1ldGg6YEVsZW1lbnQuaXRlcmAgaW5zdGVhZC4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5maW5kYWxsKG1hdGNoKQogCi0gICBGaW5kcyBhbGwgc3ViZWxlbWVudHMgbWF0Y2hpbmcgKm1hdGNoKi4gICptYXRjaCogbWF5IGJlIGEgdGFnIG5hbWUgb3IgcGF0aC4KLSAgIFJldHVybnMgYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorICAgLi4gbWV0aG9kOjogaW5zZXJ0KGluZGV4LCBlbGVtZW50KQogCisgICAgICBJbnNlcnRzIGEgc3ViZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBlbGVtZW50LgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmZpbmR0ZXh0KGNvbmRpdGlvblssIGRlZmF1bHQ9Tm9uZV0pCiAKLSAgIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICpjb25kaXRpb24qLiAgKmNvbmRpdGlvbiogbWF5IGJlIGEKLSAgIHRhZyBuYW1lIG9yIHBhdGguIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IKLSAgICpkZWZhdWx0KiBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8KLSAgIHRleHQgY29udGVudCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAuLiBtZXRob2Q6OiBpdGVyKHRhZz1Ob25lKQogCisgICAgICBDcmVhdGVzIGEgdHJlZSA6dGVybTpgaXRlcmF0b3JgIHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCBhcyB0aGUgcm9vdC4KKyAgICAgIFRoZSBpdGVyYXRvciBpdGVyYXRlcyBvdmVyIHRoaXMgZWxlbWVudCBhbmQgYWxsIGVsZW1lbnRzIGJlbG93IGl0LCBpbgorICAgICAgZG9jdW1lbnQgKGRlcHRoIGZpcnN0KSBvcmRlci4gIElmICp0YWcqIGlzIG5vdCBgYE5vbmVgYCBvciBgYCcqJ2BgLCBvbmx5CisgICAgICBlbGVtZW50cyB3aG9zZSB0YWcgZXF1YWxzICp0YWcqIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBpdGVyYXRvci4gIElmIHRoZQorICAgICAgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZ2V0Y2hpbGRyZW4oKQogCi0gICBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuCisgICAuLiBtZXRob2Q6OiBpdGVyZmluZChtYXRjaCkKIAorICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyBhbiBpdGVyYWJsZQorICAgICAgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmdldGl0ZXJhdG9yKFt0YWc9Tm9uZV0pCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKIAotICAgQ3JlYXRlcyBhIHRyZWUgaXRlcmF0b3Igd2l0aCB0aGUgY3VycmVudCBlbGVtZW50IGFzIHRoZSByb290LiAgIFRoZSBpdGVyYXRvcgotICAgaXRlcmF0ZXMgb3ZlciB0aGlzIGVsZW1lbnQgYW5kIGFsbCBlbGVtZW50cyBiZWxvdyBpdCwgaW4gZG9jdW1lbnQgKGRlcHRoIGZpcnN0KQotICAgb3JkZXIuICBJZiAqdGFnKiBpcyBub3QgYGBOb25lYGAgb3IgYGAnKidgYCwgb25seSBlbGVtZW50cyB3aG9zZSB0YWcgZXF1YWxzCi0gICAqdGFnKiBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgaXRlcmF0b3IuCiAKKyAgIC4uIG1ldGhvZDo6IGl0ZXJ0ZXh0KCkKIAotLi4gbWV0aG9kOjogRWxlbWVudC5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpCisgICAgICBDcmVhdGVzIGEgdGV4dCBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudCBhbmQgYWxsCisgICAgICBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBpbm5lciB0ZXh0LgogCi0gICBJbnNlcnRzIGEgc3ViZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gaW4gdGhpcyBlbGVtZW50LgorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIAotLi4gbWV0aG9kOjogRWxlbWVudC5tYWtlZWxlbWVudCh0YWcsIGF0dHJpYikKKyAgIC4uIG1ldGhvZDo6IG1ha2VlbGVtZW50KHRhZywgYXR0cmliKQogCi0gICBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBlbGVtZW50LiBEbyBub3QgY2FsbCB0aGlzCi0gICBtZXRob2QsIHVzZSB0aGUgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9uIGluc3RlYWQuCisgICAgICBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBlbGVtZW50LiAgRG8gbm90CisgICAgICBjYWxsIHRoaXMgbWV0aG9kLCB1c2UgdGhlIDpmdW5jOmBTdWJFbGVtZW50YCBmYWN0b3J5IGZ1bmN0aW9uIGluc3RlYWQuCiAKIAotLi4gbWV0aG9kOjogRWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKKyAgIC4uIG1ldGhvZDo6IHJlbW92ZShzdWJlbGVtZW50KQogCi0gICBSZW1vdmVzICpzdWJlbGVtZW50KiBmcm9tIHRoZSBlbGVtZW50LiAgIFVubGlrZSB0aGUgZmluZFhZWiBtZXRob2RzIHRoaXMgbWV0aG9kCi0gICBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiAgdGhlIGluc3RhbmNlIGlkZW50aXR5LCBub3Qgb24gdGFnIHZhbHVlIG9yIGNvbnRlbnRzLgorICAgICAgUmVtb3ZlcyAqc3ViZWxlbWVudCogZnJvbSB0aGUgZWxlbWVudC4gIFVubGlrZSB0aGUgZmluZFwqIG1ldGhvZHMgdGhpcworICAgICAgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uIHRoZSBpbnN0YW5jZSBpZGVudGl0eSwgbm90IG9uIHRhZyB2YWx1ZQorICAgICAgb3IgY29udGVudHMuCiAKLUVsZW1lbnQgb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSB0eXBlIG1ldGhvZHMgZm9yIHdvcmtpbmcKLXdpdGggc3ViZWxlbWVudHM6IDptZXRoOmBfX2RlbGl0ZW1fX2AsIDptZXRoOmBfX2dldGl0ZW1fX2AsIDptZXRoOmBfX3NldGl0ZW1fX2AsCi06bWV0aDpgX19sZW5fX2AuCisgICA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgdHlwZSBtZXRob2RzCisgICBmb3Igd29ya2luZyB3aXRoIHN1YmVsZW1lbnRzOiA6bWV0aDpgX19kZWxpdGVtX19gLCA6bWV0aDpgX19nZXRpdGVtX19gLAorICAgOm1ldGg6YF9fc2V0aXRlbV9fYCwgOm1ldGg6YF9fbGVuX19gLgogCi1DYXV0aW9uOiBCZWNhdXNlIEVsZW1lbnQgb2JqZWN0cyBkbyBub3QgZGVmaW5lIGEgOm1ldGg6YF9fbm9uemVyb19fYCBtZXRob2QsCi1lbGVtZW50cyB3aXRoIG5vIHN1YmVsZW1lbnRzIHdpbGwgdGVzdCBhcyBgYEZhbHNlYGAuIDo6CisgICBDYXV0aW9uOiBFbGVtZW50cyB3aXRoIG5vIHN1YmVsZW1lbnRzIHdpbGwgdGVzdCBhcyBgYEZhbHNlYGAuICBUaGlzIGJlaGF2aW9yCisgICB3aWxsIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuICBVc2Ugc3BlY2lmaWMgYGBsZW4oZWxlbSlgYCBvciBgYGVsZW0gaXMKKyAgIE5vbmVgYCB0ZXN0IGluc3RlYWQuIDo6CiAKLSAgIGVsZW1lbnQgPSByb290LmZpbmQoJ2ZvbycpCisgICAgIGVsZW1lbnQgPSByb290LmZpbmQoJ2ZvbycpCiAKLSAgIGlmIG5vdCBlbGVtZW50OiAjIGNhcmVmdWwhCi0gICAgICAgcHJpbnQgImVsZW1lbnQgbm90IGZvdW5kLCBvciBlbGVtZW50IGhhcyBubyBzdWJlbGVtZW50cyIKKyAgICAgaWYgbm90IGVsZW1lbnQ6ICAjIGNhcmVmdWwhCisgICAgICAgICBwcmludCAiZWxlbWVudCBub3QgZm91bmQsIG9yIGVsZW1lbnQgaGFzIG5vIHN1YmVsZW1lbnRzIgogCi0gICBpZiBlbGVtZW50IGlzIE5vbmU6Ci0gICAgICAgcHJpbnQgImVsZW1lbnQgbm90IGZvdW5kIgorICAgICBpZiBlbGVtZW50IGlzIE5vbmU6CisgICAgICAgICBwcmludCAiZWxlbWVudCBub3QgZm91bmQiCiAKIAogLi4gX2VsZW1lbnR0cmVlLWVsZW1lbnR0cmVlLW9iamVjdHM6CkBAIC0zMDUsNTIgKzM4NSw1MSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogRWxlbWVudFRyZWUoW2VsZW1lbnQsXSBbZmlsZV0pCisuLiBjbGFzczo6IEVsZW1lbnRUcmVlKGVsZW1lbnQ9Tm9uZSwgZmlsZT1Ob25lKQogCi0gICBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50IGhpZXJhcmNoeSwKLSAgIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbSBzdGFuZGFyZCBYTUwuCisgICBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50CisgICBoaWVyYXJjaHksIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQorICAgc3RhbmRhcmQgWE1MLgogCi0gICAqZWxlbWVudCogaXMgdGhlIHJvb3QgZWxlbWVudC4gVGhlIHRyZWUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlCi0gICBYTUwgKmZpbGUqIGlmIGdpdmVuLgorICAgKmVsZW1lbnQqIGlzIHRoZSByb290IGVsZW1lbnQuICBUaGUgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cworICAgb2YgdGhlIFhNTCAqZmlsZSogaWYgZ2l2ZW4uCiAKIAogICAgLi4gbWV0aG9kOjogX3NldHJvb3QoZWxlbWVudCkKIAogICAgICAgUmVwbGFjZXMgdGhlIHJvb3QgZWxlbWVudCBmb3IgdGhpcyB0cmVlLiAgVGhpcyBkaXNjYXJkcyB0aGUgY3VycmVudAogICAgICAgY29udGVudHMgb2YgdGhlIHRyZWUsIGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBnaXZlbiBlbGVtZW50LiAgVXNlIHdpdGgKLSAgICAgIGNhcmUuICplbGVtZW50KiBpcyBhbiBlbGVtZW50IGluc3RhbmNlLgorICAgICAgY2FyZS4gICplbGVtZW50KiBpcyBhbiBlbGVtZW50IGluc3RhbmNlLgogCiAKLSAgIC4uIG1ldGhvZDo6IGZpbmQocGF0aCkKKyAgIC4uIG1ldGhvZDo6IGZpbmQobWF0Y2gpCiAKLSAgICAgIEZpbmRzIHRoZSBmaXJzdCB0b3BsZXZlbCBlbGVtZW50IHdpdGggZ2l2ZW4gdGFnLiBTYW1lIGFzCi0gICAgICBnZXRyb290KCkuZmluZChwYXRoKS4gICpwYXRoKiBpcyB0aGUgZWxlbWVudCB0byBsb29rIGZvci4gUmV0dXJucyB0aGUKLSAgICAgIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIGBgTm9uZWBgIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorICAgICAgRmluZHMgdGhlIGZpcnN0IHRvcGxldmVsIGVsZW1lbnQgbWF0Y2hpbmcgKm1hdGNoKi4gICptYXRjaCogbWF5IGJlIGEgdGFnCisgICAgICBuYW1lIG9yIHBhdGguICBTYW1lIGFzIGdldHJvb3QoKS5maW5kKG1hdGNoKS4gIFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nCisgICAgICBlbGVtZW50LCBvciBgYE5vbmVgYCBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KIAogCi0gICAuLiBtZXRob2Q6OiBmaW5kYWxsKHBhdGgpCisgICAuLiBtZXRob2Q6OiBmaW5kYWxsKG1hdGNoKQogCi0gICAgICBGaW5kcyBhbGwgdG9wbGV2ZWwgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gdGFnLiBTYW1lIGFzCi0gICAgICBnZXRyb290KCkuZmluZGFsbChwYXRoKS4gICpwYXRoKiBpcyB0aGUgZWxlbWVudCB0byBsb29rIGZvci4gUmV0dXJucyBhCi0gICAgICBsaXN0IG9yIDp0ZXJtOmBpdGVyYXRvcmAgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsIGluIGRvY3VtZW50Ci0gICAgICBvcmRlci4KKyAgICAgIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4gIFNhbWUgYXMKKyAgICAgIGdldHJvb3QoKS5maW5kYWxsKG1hdGNoKS4gICptYXRjaCogbWF5IGJlIGEgdGFnIG5hbWUgb3IgcGF0aC4gIFJldHVybnMgYQorICAgICAgbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIuCiAKIAotICAgLi4gbWV0aG9kOjogZmluZHRleHQocGF0aFssIGRlZmF1bHRdKQorICAgLi4gbWV0aG9kOjogZmluZHRleHQobWF0Y2gsIGRlZmF1bHQ9Tm9uZSkKIAogICAgICAgRmluZHMgdGhlIGVsZW1lbnQgdGV4dCBmb3IgdGhlIGZpcnN0IHRvcGxldmVsIGVsZW1lbnQgd2l0aCBnaXZlbiB0YWcuCi0gICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKS4gKnBhdGgqIGlzIHRoZSB0b3BsZXZlbCBlbGVtZW50IHRvIGxvb2sKLSAgICAgIGZvci4gKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdAotICAgICAgZm91bmQuIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50IGhhcyBpcwotICAgICAgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KG1hdGNoKS4gICptYXRjaCogbWF5IGJlIGEgdGFnIG5hbWUgb3IgcGF0aC4KKyAgICAgICpkZWZhdWx0KiBpcyB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuICBSZXR1cm5zCisgICAgICB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUgZGVmYXVsdCB2YWx1ZSBubworICAgICAgZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dAorICAgICAgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCiAKIAotICAgLi4gbWV0aG9kOjogZ2V0aXRlcmF0b3IoW3RhZ10pCisgICAuLiBtZXRob2Q6OiBnZXRpdGVyYXRvcih0YWc9Tm9uZSkKIAotICAgICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IKLSAgICAgIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gc2VjdGlvbiBvcmRlci4gKnRhZyogaXMgdGhlIHRhZwotICAgICAgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjcKKyAgICAgICAgIFVzZSBtZXRob2QgOm1ldGg6YEVsZW1lbnRUcmVlLml0ZXJgIGluc3RlYWQuCiAKIAogICAgLi4gbWV0aG9kOjogZ2V0cm9vdCgpCkBAIC0zNTgsMTkgKzQzNywzOSBAQAogICAgICAgUmV0dXJucyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuCiAKIAotICAgLi4gbWV0aG9kOjogcGFyc2Uoc291cmNlWywgcGFyc2VyXSkKKyAgIC4uIG1ldGhvZDo6IGl0ZXIodGFnPU5vbmUpCiAKLSAgICAgIExvYWRzIGFuIGV4dGVybmFsIFhNTCBzZWN0aW9uIGludG8gdGhpcyBlbGVtZW50IHRyZWUuICpzb3VyY2UqIGlzIGEgZmlsZQotICAgICAgbmFtZSBvciBmaWxlIG9iamVjdC4gKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90Ci0gICAgICBnaXZlbiwgdGhlIHN0YW5kYXJkIFhNTFRyZWVCdWlsZGVyIHBhcnNlciBpcyB1c2VkLiBSZXR1cm5zIHRoZSBzZWN0aW9uCisgICAgICBDcmVhdGVzIGFuZCByZXR1cm5zIGEgdHJlZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSBpdGVyYXRvcgorICAgICAgbG9vcHMgb3ZlciBhbGwgZWxlbWVudHMgaW4gdGhpcyB0cmVlLCBpbiBzZWN0aW9uIG9yZGVyLiAgKnRhZyogaXMgdGhlIHRhZworICAgICAgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKworCisgICAuLiBtZXRob2Q6OiBpdGVyZmluZChtYXRjaCkKKworICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgU2FtZSBhcworICAgICAgZ2V0cm9vdCgpLml0ZXJmaW5kKG1hdGNoKS4gUmV0dXJucyBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcKKyAgICAgIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjcKKworCisgICAuLiBtZXRob2Q6OiBwYXJzZShzb3VyY2UsIHBhcnNlcj1Ob25lKQorCisgICAgICBMb2FkcyBhbiBleHRlcm5hbCBYTUwgc2VjdGlvbiBpbnRvIHRoaXMgZWxlbWVudCB0cmVlLiAgKnNvdXJjZSogaXMgYSBmaWxlCisgICAgICBuYW1lIG9yIGZpbGUgb2JqZWN0LiAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90CisgICAgICBnaXZlbiwgdGhlIHN0YW5kYXJkIFhNTFBhcnNlciBwYXJzZXIgaXMgdXNlZC4gIFJldHVybnMgdGhlIHNlY3Rpb24KICAgICAgIHJvb3QgZWxlbWVudC4KIAogCi0gICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlWywgZW5jb2RpbmddKQorICAgLi4gbWV0aG9kOjogd3JpdGUoZmlsZSwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgeG1sX2RlY2xhcmF0aW9uPU5vbmUsIG1ldGhvZD0ieG1sIikKIAotICAgICAgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuICpmaWxlKiBpcyBhIGZpbGUgbmFtZSwgb3IgYQotICAgICAgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLiAqZW5jb2RpbmcqIFsxXV8gaXMgdGhlIG91dHB1dCBlbmNvZGluZwotICAgICAgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorICAgICAgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuICAqZmlsZSogaXMgYSBmaWxlIG5hbWUsIG9yIGEKKyAgICAgIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZy4gICplbmNvZGluZyogWzFdXyBpcyB0aGUgb3V0cHV0IGVuY29kaW5nCisgICAgICAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICAqeG1sX2RlY2xhcmF0aW9uKiBjb250cm9scyBpZiBhbiBYTUwgZGVjbGFyYXRpb24KKyAgICAgIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywgTm9uZQorICAgICAgZm9yIG9ubHkgaWYgbm90IFVTLUFTQ0lJIG9yIFVURi04IChkZWZhdWx0IGlzIE5vbmUpLiAgKm1ldGhvZCogaXMgZWl0aGVyCisgICAgICBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLiAgUmV0dXJucyBhbgorICAgICAgZW5jb2RlZCBzdHJpbmcuCiAKIFRoaXMgaXMgdGhlIFhNTCBmaWxlIHRoYXQgaXMgZ29pbmcgdG8gYmUgbWFuaXB1bGF0ZWQ6OgogCkBAIC0zODksMTMgKzQ4OCwxMyBAQAogICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKICAgICA+Pj4gdHJlZSA9IEVsZW1lbnRUcmVlKCkKICAgICA+Pj4gdHJlZS5wYXJzZSgiaW5kZXgueGh0bWwiKQotICAgIDxFbGVtZW50IGh0bWwgYXQgYjdkM2YxZWM+CisgICAgPEVsZW1lbnQgJ2h0bWwnIGF0IDB4Yjc3ZTZmYWM+CiAgICAgPj4+IHAgPSB0cmVlLmZpbmQoImJvZHkvcCIpICAgICAjIEZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGFnIHAgaW4gYm9keQogICAgID4+PiBwCi0gICAgPEVsZW1lbnQgcCBhdCA4NDE2ZTBjPgotICAgID4+PiBsaW5rcyA9IHAuZ2V0aXRlcmF0b3IoImEiKSAgIyBSZXR1cm5zIGxpc3Qgb2YgYWxsIGxpbmtzCisgICAgPEVsZW1lbnQgJ3AnIGF0IDB4Yjc3ZWMyNmM+CisgICAgPj4+IGxpbmtzID0gbGlzdChwLml0ZXIoImEiKSkgICAjIFJldHVybnMgbGlzdCBvZiBhbGwgbGlua3MKICAgICA+Pj4gbGlua3MKLSAgICBbPEVsZW1lbnQgYSBhdCBiN2Q0ZjllYz4sIDxFbGVtZW50IGEgYXQgYjdkNGZiMGM+XQorICAgIFs8RWxlbWVudCAnYScgYXQgMHhiNzdlYzJhYz4sIDxFbGVtZW50ICdhJyBhdCAweGI3N2VjMWNjPl0KICAgICA+Pj4gZm9yIGkgaW4gbGlua3M6ICAgICAgICAgICAgICMgSXRlcmF0ZXMgdGhyb3VnaCBhbGwgZm91bmQgbGlua3MKICAgICAuLi4gICAgIGkuYXR0cmliWyJ0YXJnZXQiXSA9ICJibGFuayIKICAgICA+Pj4gdHJlZS53cml0ZSgib3V0cHV0LnhodG1sIikKQEAgLTQwNiwxNCArNTA1LDE0IEBACiAtLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBRTmFtZSh0ZXh0X29yX3VyaVssIHRhZ10pCisuLiBjbGFzczo6IFFOYW1lKHRleHRfb3JfdXJpLCB0YWc9Tm9uZSkKIAotICAgUU5hbWUgd3JhcHBlci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgaW4gb3JkZXIgdG8KLSAgIGdldCBwcm9wZXIgbmFtZXNwYWNlIGhhbmRsaW5nIG9uIG91dHB1dC4gKnRleHRfb3JfdXJpKiBpcyBhIHN0cmluZyBjb250YWluaW5nCi0gICB0aGUgUU5hbWUgdmFsdWUsIGluIHRoZSBmb3JtIHt1cml9bG9jYWwsIG9yLCBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUKLSAgIFVSSSBwYXJ0IG9mIGEgUU5hbWUuIElmICp0YWcqIGlzIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYW4KLSAgIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLiA6Y2xhc3M6YFFOYW1lYCBpbnN0YW5jZXMKLSAgIGFyZSBvcGFxdWUuCisgICBRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbiBvcmRlcgorICAgdG8gZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LiAgKnRleHRfb3JfdXJpKiBpcyBhIHN0cmluZworICAgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUsIGluIHRoZSBmb3JtIHt1cml9bG9jYWwsIG9yLCBpZiB0aGUgdGFnIGFyZ3VtZW50CisgICBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuICBJZiAqdGFnKiBpcyBnaXZlbiwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzCisgICBpbnRlcnByZXRlZCBhcyBhbiBVUkksIGFuZCB0aGlzIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KKyAgIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcyBhcmUgb3BhcXVlLgogCiAKIC4uIF9lbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzOgpAQCAtNDIyLDc2ICs1MjEsOTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFRyZWVCdWlsZGVyKFtlbGVtZW50X2ZhY3RvcnldKQorLi4gY2xhc3M6OiBUcmVlQnVpbGRlcihlbGVtZW50X2ZhY3Rvcnk9Tm9uZSkKIAotICAgR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2Ugb2Ygc3RhcnQsCi0gICBkYXRhLCBhbmQgZW5kIG1ldGhvZCBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLiBZb3UgY2FuIHVzZSB0aGlzCi0gICBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwgcGFyc2VyLCBvciBhIHBhcnNlciBmb3IKLSAgIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LiBUaGUgKmVsZW1lbnRfZmFjdG9yeSogaXMgY2FsbGVkIHRvIGNyZWF0ZSBuZXcKLSAgIEVsZW1lbnQgaW5zdGFuY2VzIHdoZW4gZ2l2ZW4uCisgICBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZSBvZgorICAgc3RhcnQsIGRhdGEsIGFuZCBlbmQgbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuICBZb3UKKyAgIGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwgcGFyc2VyLAorICAgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LiAgVGhlICplbGVtZW50X2ZhY3RvcnkqIGlzIGNhbGxlZAorICAgdG8gY3JlYXRlIG5ldyA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlcyB3aGVuIGdpdmVuLgogCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIAotICAgICAgRmx1c2hlcyB0aGUgcGFyc2VyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAotICAgICAgZWxlbWVudC4gUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorICAgICAgRmx1c2hlcyB0aGUgYnVpbGRlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbnQKKyAgICAgIGVsZW1lbnQuICBSZXR1cm5zIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuCiAKIAogICAgLi4gbWV0aG9kOjogZGF0YShkYXRhKQogCi0gICAgICBBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4gKmRhdGEqIGlzIGEgc3RyaW5nLiAgVGhpcyBzaG91bGQgYmUKLSAgICAgIGVpdGhlciBhbiA4LWJpdCBzdHJpbmcgY29udGFpbmluZyBBU0NJSSB0ZXh0LCBvciBhIFVuaWNvZGUgc3RyaW5nLgorICAgICAgQWRkcyB0ZXh0IHRvIHRoZSBjdXJyZW50IGVsZW1lbnQuICAqZGF0YSogaXMgYSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZQorICAgICAgZWl0aGVyIGEgYnl0ZXN0cmluZywgb3IgYSBVbmljb2RlIHN0cmluZy4KIAogCiAgICAuLiBtZXRob2Q6OiBlbmQodGFnKQogCi0gICAgICBDbG9zZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gUmV0dXJucyB0aGUgY2xvc2VkCi0gICAgICBlbGVtZW50LgorICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50IGVsZW1lbnQuICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAgUmV0dXJucyB0aGUKKyAgICAgIGNsb3NlZCBlbGVtZW50LgogCiAKICAgIC4uIG1ldGhvZDo6IHN0YXJ0KHRhZywgYXR0cnMpCiAKLSAgICAgIE9wZW5zIGEgbmV3IGVsZW1lbnQuICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICphdHRycyogaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4gUmV0dXJucyB0aGUgb3BlbmVkIGVsZW1lbnQuCisgICAgICBPcGVucyBhIG5ldyBlbGVtZW50LiAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gICphdHRycyogaXMgYSBkaWN0aW9uYXJ5CisgICAgICBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4gIFJldHVybnMgdGhlIG9wZW5lZCBlbGVtZW50LgogCiAKLS4uIF9lbGVtZW50dHJlZS14bWx0cmVlYnVpbGRlci1vYmplY3RzOgorICAgSW4gYWRkaXRpb24sIGEgY3VzdG9tIDpjbGFzczpgVHJlZUJ1aWxkZXJgIG9iamVjdCBjYW4gcHJvdmlkZSB0aGUKKyAgIGZvbGxvd2luZyBtZXRob2Q6CiAKLVhNTFRyZWVCdWlsZGVyIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIC4uIG1ldGhvZDo6IGRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbSkKKworICAgICAgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uICAqbmFtZSogaXMgdGhlIGRvY3R5cGUgbmFtZS4gICpwdWJpZCogaXMKKyAgICAgIHRoZSBwdWJsaWMgaWRlbnRpZmllci4gICpzeXN0ZW0qIGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4gIFRoaXMgbWV0aG9kCisgICAgICBkb2VzIG5vdCBleGlzdCBvbiB0aGUgZGVmYXVsdCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBjbGFzcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CiAKIAotLi4gY2xhc3M6OiBYTUxUcmVlQnVpbGRlcihbaHRtbCxdIFt0YXJnZXRdKQorLi4gX2VsZW1lbnR0cmVlLXhtbHBhcnNlci1vYmplY3RzOgogCi0gICBFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdCBwYXJzZXIuICpodG1sKgotICAgYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50Ci0gICBpbXBsZW1lbnRhdGlvbi4gKnRhcmdldCogaXMgdGhlIHRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUgYnVpbGRlciB1c2VzIGFuCi0gICBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgVHJlZUJ1aWxkZXIgY2xhc3MuCitYTUxQYXJzZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0KKworCisuLiBjbGFzczo6IFhNTFBhcnNlcihodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKQorCisgICA6Y2xhc3M6YEVsZW1lbnRgIHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdAorICAgcGFyc2VyLiAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieQorICAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZQorICAgYnVpbGRlciB1c2VzIGFuIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCBUcmVlQnVpbGRlciBjbGFzcy4gICplbmNvZGluZyogWzFdXworICAgaXMgb3B0aW9uYWwuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZQorICAgWE1MIGZpbGUuCiAKIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCi0gICAgICBGaW5pc2hlcyBmZWVkaW5nIGRhdGEgdG8gdGhlIHBhcnNlci4gUmV0dXJucyBhbiBlbGVtZW50IHN0cnVjdHVyZS4KKyAgICAgIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLiAgUmV0dXJucyBhbiBlbGVtZW50IHN0cnVjdHVyZS4KIAogCiAgICAuLiBtZXRob2Q6OiBkb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW0pCiAKLSAgICAgIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLiAqbmFtZSogaXMgdGhlIGRvY3R5cGUgbmFtZS4gKnB1YmlkKiBpcyB0aGUKLSAgICAgIHB1YmxpYyBpZGVudGlmaWVyLiAqc3lzdGVtKiBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuCisgICAgICAuLiBkZXByZWNhdGVkOjogMi43CisgICAgICAgICBEZWZpbmUgdGhlIDptZXRoOmBUcmVlQnVpbGRlci5kb2N0eXBlYCBtZXRob2Qgb24gYSBjdXN0b20gVHJlZUJ1aWxkZXIKKyAgICAgICAgIHRhcmdldC4KIAogCiAgICAuLiBtZXRob2Q6OiBmZWVkKGRhdGEpCiAKLSAgICAgIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4gKmRhdGEqIGlzIGVuY29kZWQgZGF0YS4KKyAgICAgIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4gICpkYXRhKiBpcyBlbmNvZGVkIGRhdGEuCiAKLTptZXRoOmBYTUxUcmVlQnVpbGRlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyA6bWV0aDpgc3RhcnRgIG1ldGhvZAorOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyA6bWV0aDpgc3RhcnRgIG1ldGhvZAogZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyA6bWV0aDpgZW5kYCBtZXRob2QgZm9yIGVhY2ggY2xvc2luZyB0YWcsCi1hbmQgZGF0YSBpcyBwcm9jZXNzZWQgYnkgbWV0aG9kIDptZXRoOmBkYXRhYC4gOm1ldGg6YFhNTFRyZWVCdWlsZGVyLmNsb3NlYAorYW5kIGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCA6bWV0aDpgZGF0YWAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYAogY2FsbHMgKnRhcmdldCpcJ3MgbWV0aG9kIDptZXRoOmBjbG9zZWAuCi06Y2xhc3M6YFhNTFRyZWVCdWlsZGVyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4KKzpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4KIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBhbiBYTUwgZmlsZTo6CiAKLSAgICA+Pj4gZnJvbSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgaW1wb3J0IFhNTFRyZWVCdWlsZGVyCisgICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBYTUxQYXJzZXIKICAgICA+Pj4gY2xhc3MgTWF4RGVwdGg6ICAgICAgICAgICAgICAgICAgICAgIyBUaGUgdGFyZ2V0IG9iamVjdCBvZiB0aGUgcGFyc2VyCiAgICAgLi4uICAgICBtYXhEZXB0aCA9IDAKICAgICAuLi4gICAgIGRlcHRoID0gMApAQCAtNTA3LDcgKzYyMSw3IEBACiAgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYubWF4RGVwdGgKICAgICAuLi4KICAgICA+Pj4gdGFyZ2V0ID0gTWF4RGVwdGgoKQotICAgID4+PiBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcih0YXJnZXQ9dGFyZ2V0KQorICAgID4+PiBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PXRhcmdldCkKICAgICA+Pj4gZXhhbXBsZVhtbCA9ICIiIgogICAgIC4uLiA8YT4KICAgICAuLi4gICA8Yj4KQEAgLTUyNyw3ICs2NDEsNiBAQAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsjXSBUaGUgZW5jb2Rpbmcgc3RyaW5nIGluY2x1ZGVkIGluIFhNTCBvdXRwdXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlCi0gICBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuIEZvciBleGFtcGxlLCAiVVRGLTgiIGlzIHZhbGlkLCBidXQgIlVURjgiIGlzCi0gICBub3QuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwxMS0yMDA2MDgxNi8jTlQtRW5jb2RpbmdEZWNsCisgICBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuICBGb3IgZXhhbXBsZSwgIlVURi04IiBpcyB2YWxpZCwgYnV0ICJVVEY4IiBpcworICAgbm90LiAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKICAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUucnN0IGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4NWIzYi4uMDAwMDAwMAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUucnN0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOm1vZDpgeG1sLmV0cmVlYCAtLS0gVGhlIEVsZW1lbnRUcmVlIEFQSSBmb3IgWE1MCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLi4gbW9kdWxlOjogeG1sLmV0cmVlCi0gICA6c3lub3BzaXM6IFBhY2thZ2UgY29udGFpbmluZyBjb21tb24gRWxlbWVudFRyZWUgbW9kdWxlcy4KLS4uIG1vZHVsZWF1dGhvcjo6IEZyZWRyaWsgTHVuZGggPGZyZWRyaWtAcHl0aG9ud2FyZS5jb20+Ci0KLQotLi4gdmVyc2lvbmFkZGVkOjogMi41Ci0KLVRoZSBFbGVtZW50VHJlZSBwYWNrYWdlIGlzIGEgc2ltcGxlLCBlZmZpY2llbnQsIGFuZCBxdWl0ZSBwb3B1bGFyICBsaWJyYXJ5IGZvcgotWE1MIG1hbmlwdWxhdGlvbiBpbiBQeXRob24uICAgIFRoZSA6bW9kOmB4bWwuZXRyZWVgIHBhY2thZ2UgY29udGFpbnMgdGhlIG1vc3QKLWNvbW1vbiBjb21wb25lbnRzICBmcm9tIHRoZSBFbGVtZW50VHJlZSBBUEkgbGlicmFyeS4gIEluIHRoZSBjdXJyZW50IHJlbGVhc2UsCi10aGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIDptb2Q6YEVsZW1lbnRUcmVlYCwgIDptb2Q6YEVsZW1lbnRQYXRoYCwgYW5kCi06bW9kOmBFbGVtZW50SW5jbHVkZWAgbW9kdWxlcyBmcm9tIHRoZSBmdWxsICBFbGVtZW50VHJlZSBkaXN0cmlidXRpb24uCi0KLS4uIFhYWCBUbyBiZSBjb250aW51ZWQhCi0KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIGBFbGVtZW50VHJlZSBPdmVydmlldyA8aHR0cDovL2VmZmJvdC5vcmcvdGFnL2VsZW1lbnR0cmVlPmBfCi0gICAgICBUaGUgaG9tZSBwYWdlIGZvciA6bW9kOmBFbGVtZW50VHJlZWAuICBUaGlzIGluY2x1ZGVzIGxpbmtzICB0byBhZGRpdGlvbmFsCi0gICAgICBkb2N1bWVudGF0aW9uLCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCAgb3RoZXIgYWRkLW9ucy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5yc3QgYi9Eb2MvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIucnN0CmluZGV4IDgzMmYxZGMuLjIzZjQyOWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLnJzdApAQCAtNTIsNTIgKzUyLDU3IEBACiAKIC4uIGRhdGE6OiBmZWF0dXJlX25hbWVzcGFjZXMKIAotICAgVmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzImBgIC0tLSAgdHJ1ZTogUGVyZm9ybSBOYW1lc3BhY2UKLSAgIHByb2Nlc3NpbmcuIC0tLSAgZmFsc2U6IE9wdGlvbmFsbHkgZG8gbm90IHBlcmZvcm0gTmFtZXNwYWNlIHByb2Nlc3NpbmcgKGltcGxpZXMKLSAgIG5hbWVzcGFjZS1wcmVmaXhlczsgZGVmYXVsdCkuIC0tLSAgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpCi0gICByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyJgYAorICAgfCB0cnVlOiBQZXJmb3JtIE5hbWVzcGFjZSBwcm9jZXNzaW5nLgorICAgfCBmYWxzZTogT3B0aW9uYWxseSBkbyBub3QgcGVyZm9ybSBOYW1lc3BhY2UgcHJvY2Vzc2luZyAoaW1wbGllcworICAgICBuYW1lc3BhY2UtcHJlZml4ZXM7IGRlZmF1bHQpLgorICAgfCBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykgcmVhZC93cml0ZQogCiAKIC4uIGRhdGE6OiBmZWF0dXJlX25hbWVzcGFjZV9wcmVmaXhlcwogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZS1wcmVmaXhlcyJgYCAtLS0gdHJ1ZTogUmVwb3J0Ci0gICB0aGUgb3JpZ2luYWwgcHJlZml4ZWQgbmFtZXMgYW5kIGF0dHJpYnV0ZXMgdXNlZCBmb3IgTmFtZXNwYWNlCi0gICBkZWNsYXJhdGlvbnMuIC0tLSBmYWxzZTogRG8gbm90IHJlcG9ydCBhdHRyaWJ1dGVzIHVzZWQgZm9yIE5hbWVzcGFjZQotICAgZGVjbGFyYXRpb25zLCBhbmQgb3B0aW9uYWxseSBkbyBub3QgcmVwb3J0IG9yaWdpbmFsIHByZWZpeGVkIG5hbWVzCi0gICAoZGVmYXVsdCkuIC0tLSBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykgcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZS1wcmVmaXhlcyJgYAorICAgfCB0cnVlOiBSZXBvcnQgdGhlIG9yaWdpbmFsIHByZWZpeGVkIG5hbWVzIGFuZCBhdHRyaWJ1dGVzIHVzZWQgZm9yIE5hbWVzcGFjZQorICAgICBkZWNsYXJhdGlvbnMuCisgICB8IGZhbHNlOiBEbyBub3QgcmVwb3J0IGF0dHJpYnV0ZXMgdXNlZCBmb3IgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucywgYW5kCisgICAgIG9wdGlvbmFsbHkgZG8gbm90IHJlcG9ydCBvcmlnaW5hbCBwcmVmaXhlZCBuYW1lcyAoZGVmYXVsdCkuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGZlYXR1cmVfc3RyaW5nX2ludGVybmluZwogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3N0cmluZy1pbnRlcm5pbmciYGAgLS0tICB0cnVlOiBBbGwgZWxlbWVudAotICAgbmFtZXMsIHByZWZpeGVzLCBhdHRyaWJ1dGUgbmFtZXMsIE5hbWVzcGFjZSBVUklzLCBhbmQgbG9jYWwgbmFtZXMgYXJlIGludGVybmVkCi0gICB1c2luZyB0aGUgYnVpbHQtaW4gaW50ZXJuIGZ1bmN0aW9uLiAtLS0gIGZhbHNlOiBOYW1lcyBhcmUgbm90IG5lY2Vzc2FyaWx5Ci0gICBpbnRlcm5lZCwgYWx0aG91Z2ggdGhleSBtYXkgYmUgKGRlZmF1bHQpLiAtLS0gIGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdAotICAgcGFyc2luZykgcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3N0cmluZy1pbnRlcm5pbmciYGAKKyAgIHwgdHJ1ZTogQWxsIGVsZW1lbnQgbmFtZXMsIHByZWZpeGVzLCBhdHRyaWJ1dGUgbmFtZXMsIE5hbWVzcGFjZSBVUklzLCBhbmQKKyAgICAgbG9jYWwgbmFtZXMgYXJlIGludGVybmVkIHVzaW5nIHRoZSBidWlsdC1pbiBpbnRlcm4gZnVuY3Rpb24uCisgICB8IGZhbHNlOiBOYW1lcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGludGVybmVkLCBhbHRob3VnaCB0aGV5IG1heSBiZSAoZGVmYXVsdCkuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGZlYXR1cmVfdmFsaWRhdGlvbgogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iYGAgLS0tIHRydWU6IFJlcG9ydCBhbGwKLSAgIHZhbGlkYXRpb24gZXJyb3JzIChpbXBsaWVzIGV4dGVybmFsLWdlbmVyYWwtZW50aXRpZXMgYW5kCi0gICBleHRlcm5hbC1wYXJhbWV0ZXItZW50aXRpZXMpLiAtLS0gZmFsc2U6IERvIG5vdCByZXBvcnQgdmFsaWRhdGlvbiBlcnJvcnMuIC0tLQotICAgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKKyAgIHwgdmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uImBgCisgICB8IHRydWU6IFJlcG9ydCBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgKGltcGxpZXMgZXh0ZXJuYWwtZ2VuZXJhbC1lbnRpdGllcyBhbmQKKyAgICAgZXh0ZXJuYWwtcGFyYW1ldGVyLWVudGl0aWVzKS4KKyAgIHwgZmFsc2U6IERvIG5vdCByZXBvcnQgdmFsaWRhdGlvbiBlcnJvcnMuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGZlYXR1cmVfZXh0ZXJuYWxfZ2VzCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtZ2VuZXJhbC1lbnRpdGllcyJgYCAtLS0gIHRydWU6Ci0gICBJbmNsdWRlIGFsbCBleHRlcm5hbCBnZW5lcmFsICh0ZXh0KSBlbnRpdGllcy4gLS0tICBmYWxzZTogRG8gbm90IGluY2x1ZGUKLSAgIGV4dGVybmFsIGdlbmVyYWwgZW50aXRpZXMuIC0tLSAgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpCi0gICByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtZ2VuZXJhbC1lbnRpdGllcyJgYAorICAgfCB0cnVlOiBJbmNsdWRlIGFsbCBleHRlcm5hbCBnZW5lcmFsICh0ZXh0KSBlbnRpdGllcy4KKyAgIHwgZmFsc2U6IERvIG5vdCBpbmNsdWRlIGV4dGVybmFsIGdlbmVyYWwgZW50aXRpZXMuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGZlYXR1cmVfZXh0ZXJuYWxfcGVzCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvZXh0ZXJuYWwtcGFyYW1ldGVyLWVudGl0aWVzImBgIC0tLSAgdHJ1ZToKLSAgIEluY2x1ZGUgYWxsIGV4dGVybmFsIHBhcmFtZXRlciBlbnRpdGllcywgaW5jbHVkaW5nIHRoZSBleHRlcm5hbCBEVEQgc3Vic2V0LiAtLS0KLSAgIGZhbHNlOiBEbyBub3QgaW5jbHVkZSBhbnkgZXh0ZXJuYWwgcGFyYW1ldGVyIGVudGl0aWVzLCBldmVuIHRoZSBleHRlcm5hbCBEVEQKLSAgIHN1YnNldC4gLS0tICBhY2Nlc3M6IChwYXJzaW5nKSByZWFkLW9ubHk7IChub3QgcGFyc2luZykgcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL2V4dGVybmFsLXBhcmFtZXRlci1lbnRpdGllcyJgYAorICAgfCB0cnVlOiBJbmNsdWRlIGFsbCBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMsIGluY2x1ZGluZyB0aGUgZXh0ZXJuYWwgRFRECisgICAgIHN1YnNldC4KKyAgIHwgZmFsc2U6IERvIG5vdCBpbmNsdWRlIGFueSBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMsIGV2ZW4gdGhlIGV4dGVybmFsCisgICAgIERURCBzdWJzZXQuCisgICB8IGFjY2VzczogKHBhcnNpbmcpIHJlYWQtb25seTsgKG5vdCBwYXJzaW5nKSByZWFkL3dyaXRlCiAKIAogLi4gZGF0YTo6IGFsbF9mZWF0dXJlcwpAQCAtMTA3LDM0ICsxMTIsMzggQEAKIAogLi4gZGF0YTo6IHByb3BlcnR5X2xleGljYWxfaGFuZGxlcgogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyImBgIC0tLSAgZGF0YSB0eXBlOgotICAgeG1sLnNheC5zYXgybGliLkxleGljYWxIYW5kbGVyIChub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyKSAtLS0gIGRlc2NyaXB0aW9uOiBBbgotICAgb3B0aW9uYWwgZXh0ZW5zaW9uIGhhbmRsZXIgZm9yIGxleGljYWwgZXZlbnRzIGxpa2UgY29tbWVudHMuIC0tLSAgYWNjZXNzOgotICAgcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyImBgCisgICB8IGRhdGEgdHlwZTogeG1sLnNheC5zYXgybGliLkxleGljYWxIYW5kbGVyIChub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyKQorICAgfCBkZXNjcmlwdGlvbjogQW4gb3B0aW9uYWwgZXh0ZW5zaW9uIGhhbmRsZXIgZm9yIGxleGljYWwgZXZlbnRzIGxpa2UKKyAgICAgY29tbWVudHMuCisgICB8IGFjY2VzczogcmVhZC93cml0ZQogCiAKIC4uIGRhdGE6OiBwcm9wZXJ0eV9kZWNsYXJhdGlvbl9oYW5kbGVyCiAKLSAgIFZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9kZWNsYXJhdGlvbi1oYW5kbGVyImBgIC0tLSAgZGF0YSB0eXBlOgotICAgeG1sLnNheC5zYXgybGliLkRlY2xIYW5kbGVyIChub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyKSAtLS0gIGRlc2NyaXB0aW9uOiBBbgotICAgb3B0aW9uYWwgZXh0ZW5zaW9uIGhhbmRsZXIgZm9yIERURC1yZWxhdGVkIGV2ZW50cyBvdGhlciB0aGFuIG5vdGF0aW9ucyBhbmQKLSAgIHVucGFyc2VkIGVudGl0aWVzLiAtLS0gIGFjY2VzczogcmVhZC93cml0ZQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvZGVjbGFyYXRpb24taGFuZGxlciJgYAorICAgfCBkYXRhIHR5cGU6IHhtbC5zYXguc2F4MmxpYi5EZWNsSGFuZGxlciAobm90IHN1cHBvcnRlZCBpbiBQeXRob24gMikKKyAgIHwgZGVzY3JpcHRpb246IEFuIG9wdGlvbmFsIGV4dGVuc2lvbiBoYW5kbGVyIGZvciBEVEQtcmVsYXRlZCBldmVudHMgb3RoZXIKKyAgICAgdGhhbiBub3RhdGlvbnMgYW5kIHVucGFyc2VkIGVudGl0aWVzLgorICAgfCBhY2Nlc3M6IHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogcHJvcGVydHlfZG9tX25vZGUKIAotICAgVmFsdWU6IGBgImh0dHA6Ly94bWwub3JnL3NheC9wcm9wZXJ0aWVzL2RvbS1ub2RlImBgIC0tLSAgZGF0YSB0eXBlOgotICAgb3JnLnczYy5kb20uTm9kZSAobm90IHN1cHBvcnRlZCBpbiBQeXRob24gMikgIC0tLSAgZGVzY3JpcHRpb246IFdoZW4gcGFyc2luZywKLSAgIHRoZSBjdXJyZW50IERPTSBub2RlIGJlaW5nIHZpc2l0ZWQgaWYgdGhpcyBpcyBhIERPTSBpdGVyYXRvcjsgd2hlbiBub3QgcGFyc2luZywKLSAgIHRoZSByb290IERPTSBub2RlIGZvciBpdGVyYXRpb24uIC0tLSAgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpCi0gICByZWFkL3dyaXRlCisgICB8IHZhbHVlOiBgYCJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9kb20tbm9kZSJgYAorICAgfCBkYXRhIHR5cGU6IG9yZy53M2MuZG9tLk5vZGUgKG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIpCisgICB8IGRlc2NyaXB0aW9uOiBXaGVuIHBhcnNpbmcsIHRoZSBjdXJyZW50IERPTSBub2RlIGJlaW5nIHZpc2l0ZWQgaWYgdGhpcyBpcworICAgICBhIERPTSBpdGVyYXRvcjsgd2hlbiBub3QgcGFyc2luZywgdGhlIHJvb3QgRE9NIG5vZGUgZm9yIGl0ZXJhdGlvbi4KKyAgIHwgYWNjZXNzOiAocGFyc2luZykgcmVhZC1vbmx5OyAobm90IHBhcnNpbmcpIHJlYWQvd3JpdGUKIAogCiAuLiBkYXRhOjogcHJvcGVydHlfeG1sX3N0cmluZwogCi0gICBWYWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMveG1sLXN0cmluZyJgYCAtLS0gIGRhdGEgdHlwZTogU3RyaW5nIC0tLQotICAgZGVzY3JpcHRpb246IFRoZSBsaXRlcmFsIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgd2FzIHRoZSBzb3VyY2UgZm9yIHRoZQotICAgY3VycmVudCBldmVudC4gLS0tICBhY2Nlc3M6IHJlYWQtb25seQorICAgfCB2YWx1ZTogYGAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMveG1sLXN0cmluZyJgYAorICAgfCBkYXRhIHR5cGU6IFN0cmluZworICAgfCBkZXNjcmlwdGlvbjogVGhlIGxpdGVyYWwgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdCB3YXMgdGhlIHNvdXJjZSBmb3IgdGhlCisgICAgIGN1cnJlbnQgZXZlbnQuCisgICB8IGFjY2VzczogcmVhZC1vbmx5CiAKIAogLi4gZGF0YTo6IGFsbF9wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuc2F4LnJlYWRlci5yc3QgYi9Eb2MvbGlicmFyeS94bWwuc2F4LnJlYWRlci5yc3QKaW5kZXggNzVjN2Q1Yi4uNGIzYzE4YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLnNheC5yZWFkZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLnJzdApAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICBBbGxvdyBhbiBhcHBsaWNhdGlvbiB0byBzZXQgdGhlIGxvY2FsZSBmb3IgZXJyb3JzIGFuZCB3YXJuaW5ncy4KIAogICAgU0FYIHBhcnNlcnMgYXJlIG5vdCByZXF1aXJlZCB0byBwcm92aWRlIGxvY2FsaXphdGlvbiBmb3IgZXJyb3JzIGFuZCB3YXJuaW5nczsgaWYKLSAgIHRoZXkgY2Fubm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBsb2NhbGUsIGhvd2V2ZXIsIHRoZXkgbXVzdCB0aHJvdyBhIFNBWAorICAgdGhleSBjYW5ub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkIGxvY2FsZSwgaG93ZXZlciwgdGhleSBtdXN0IHJhaXNlIGEgU0FYCiAgICBleGNlcHRpb24uICBBcHBsaWNhdGlvbnMgbWF5IHJlcXVlc3QgYSBsb2NhbGUgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBwYXJzZS4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IGIyYmY3MzAuLjUxMjQwYmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0zOSw2ICszOSw3IEBACiAKIAogLi4gY2xhc3M6OiBaaXBGaWxlCisgICA6bm9pbmRleDoKIAogICAgVGhlIGNsYXNzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFpJUCBmaWxlcy4gIFNlZSBzZWN0aW9uCiAgICA6cmVmOmB6aXBmaWxlLW9iamVjdHNgIGZvciBjb25zdHJ1Y3RvciBkZXRhaWxzLgpAQCAtNjQsOCArNjUsMTAgQEAKIC4uIGZ1bmN0aW9uOjogaXNfemlwZmlsZShmaWxlbmFtZSkKIAogICAgUmV0dXJucyBgYFRydWVgYCBpZiAqZmlsZW5hbWUqIGlzIGEgdmFsaWQgWklQIGZpbGUgYmFzZWQgb24gaXRzIG1hZ2ljIG51bWJlciwKLSAgIG90aGVyd2lzZSByZXR1cm5zIGBgRmFsc2VgYC4KKyAgIG90aGVyd2lzZSByZXR1cm5zIGBgRmFsc2VgYC4gICpmaWxlbmFtZSogbWF5IGJlIGEgZmlsZSBvciBmaWxlLWxpa2Ugb2JqZWN0IHRvby4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFN1cHBvcnQgZm9yIGZpbGUgYW5kIGZpbGUtbGlrZSBvYmplY3RzLgogCiAuLiBkYXRhOjogWklQX1NUT1JFRAogCkBAIC0xMDAsMjggKzEwMyw0MCBAQAogICAgT3BlbiBhIFpJUCBmaWxlLCB3aGVyZSAqZmlsZSogY2FuIGJlIGVpdGhlciBhIHBhdGggdG8gYSBmaWxlIChhIHN0cmluZykgb3IgYQogICAgZmlsZS1saWtlIG9iamVjdC4gIFRoZSAqbW9kZSogcGFyYW1ldGVyIHNob3VsZCBiZSBgYCdyJ2BgIHRvIHJlYWQgYW4gZXhpc3RpbmcKICAgIGZpbGUsIGBgJ3cnYGAgdG8gdHJ1bmNhdGUgYW5kIHdyaXRlIGEgbmV3IGZpbGUsIG9yIGBgJ2EnYGAgdG8gYXBwZW5kIHRvIGFuCi0gICBleGlzdGluZyBmaWxlLiAgSWYgKm1vZGUqIGlzIGBgJ2EnYGAgYW5kICpmaWxlKiByZWZlcnMgdG8gYW4gZXhpc3RpbmcgWklQIGZpbGUsCi0gICB0aGVuIGFkZGl0aW9uYWwgZmlsZXMgYXJlIGFkZGVkIHRvIGl0LiAgSWYgKmZpbGUqIGRvZXMgbm90IHJlZmVyIHRvIGEgWklQIGZpbGUsCi0gICB0aGVuIGEgbmV3IFpJUCBhcmNoaXZlIGlzIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgVGhpcyBpcyBtZWFudCBmb3IgYWRkaW5nIGEgWklQCi0gICBhcmNoaXZlIHRvIGFub3RoZXIgZmlsZSwgc3VjaCBhcyA6ZmlsZTpgcHl0aG9uLmV4ZWAuICBVc2luZyA6OgotCi0gICAgICBjYXQgbXl6aXAuemlwID4+IHB5dGhvbi5leGUKLQotICAgYWxzbyB3b3JrcywgYW5kIGF0IGxlYXN0IDpwcm9ncmFtOmBXaW5aaXBgIGNhbiByZWFkIHN1Y2ggZmlsZXMuIElmICptb2RlKiBpcwotICAgYGBhYGAgYW5kIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGF0IGFsbCwgaXQgaXMgY3JlYXRlZC4gKmNvbXByZXNzaW9uKiBpcyB0aGUKLSAgIFpJUCBjb21wcmVzc2lvbiBtZXRob2QgdG8gdXNlIHdoZW4gd3JpdGluZyB0aGUgYXJjaGl2ZSwgYW5kIHNob3VsZCBiZQotICAgOmNvbnN0OmBaSVBfU1RPUkVEYCBvciA6Y29uc3Q6YFpJUF9ERUZMQVRFRGA7IHVucmVjb2duaXplZCB2YWx1ZXMgd2lsbCBjYXVzZQotICAgOmV4YzpgUnVudGltZUVycm9yYCB0byBiZSByYWlzZWQuICBJZiA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUKLSAgIDptb2Q6YHpsaWJgIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlLCA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIGFsc28gcmFpc2VkLiAgVGhlCi0gICBkZWZhdWx0IGlzIDpjb25zdDpgWklQX1NUT1JFRGAuICBJZiAqYWxsb3daaXA2NCogaXMgYGBUcnVlYGAgemlwZmlsZSB3aWxsIGNyZWF0ZQotICAgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NCBleHRlbnNpb25zIHdoZW4gdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHQi4gSWYKLSAgIGl0IGlzICBmYWxzZSAodGhlIGRlZmF1bHQpIDptb2Q6YHppcGZpbGVgIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIFpJUAotICAgZmlsZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMuIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKLSAgIGJlY2F1c2UgdGhlIGRlZmF1bHQgOnByb2dyYW06YHppcGAgYW5kIDpwcm9ncmFtOmB1bnppcGAgY29tbWFuZHMgb24gVW5peCAodGhlCi0gICBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydCB0aGVzZSBleHRlbnNpb25zLgorICAgZXhpc3RpbmcgZmlsZS4gIElmICptb2RlKiBpcyBgYCdhJ2BgIGFuZCAqZmlsZSogcmVmZXJzIHRvIGFuIGV4aXN0aW5nIFpJUAorICAgZmlsZSwgdGhlbiBhZGRpdGlvbmFsIGZpbGVzIGFyZSBhZGRlZCB0byBpdC4gIElmICpmaWxlKiBkb2VzIG5vdCByZWZlciB0byBhCisgICBaSVAgZmlsZSwgdGhlbiBhIG5ldyBaSVAgYXJjaGl2ZSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZS4gIFRoaXMgaXMgbWVhbnQgZm9yCisgICBhZGRpbmcgYSBaSVAgYXJjaGl2ZSB0byBhbm90aGVyIGZpbGUgKHN1Y2ggYXMgOmZpbGU6YHB5dGhvbi5leGVgKS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjYKLSAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkIGlmIHRoZSBtb2RlIGlzICdhJy4KKyAgICAgIElmICptb2RlKiBpcyBgYGFgYCBhbmQgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBpdCBpcyBjcmVhdGVkLgorCisgICAqY29tcHJlc3Npb24qIGlzIHRoZSBaSVAgY29tcHJlc3Npb24gbWV0aG9kIHRvIHVzZSB3aGVuIHdyaXRpbmcgdGhlIGFyY2hpdmUsCisgICBhbmQgc2hvdWxkIGJlIDpjb25zdDpgWklQX1NUT1JFRGAgb3IgOmNvbnN0OmBaSVBfREVGTEFURURgOyB1bnJlY29nbml6ZWQKKyAgIHZhbHVlcyB3aWxsIGNhdXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgCisgICBpcyBzcGVjaWZpZWQgYnV0IHRoZSA6bW9kOmB6bGliYCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwgOmV4YzpgUnVudGltZUVycm9yYAorICAgaXMgYWxzbyByYWlzZWQuIFRoZSBkZWZhdWx0IGlzIDpjb25zdDpgWklQX1NUT1JFRGAuICBJZiAqYWxsb3daaXA2NCogaXMKKyAgIGBgVHJ1ZWBgIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NCBleHRlbnNpb25zIHdoZW4KKyAgIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR0IuIElmIGl0IGlzICBmYWxzZSAodGhlIGRlZmF1bHQpIDptb2Q6YHppcGZpbGVgCisgICB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBaSVAgZmlsZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMuCisgICBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGRlZmF1bHQgOnByb2dyYW06YHppcGAKKyAgIGFuZCA6cHJvZ3JhbTpgdW56aXBgIGNvbW1hbmRzIG9uIFVuaXggKHRoZSBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydAorICAgdGhlc2UgZXh0ZW5zaW9ucy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcuMQorICAgICAgSWYgdGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIG1vZGUgYGAnYSdgYCBvciBgYCd3J2BgIGFuZCB0aGVuCisgICAgICA6bWV0aDpgY2xvc2VgXCBkIHdpdGhvdXQgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZSwgdGhlIGFwcHJvcHJpYXRlCisgICAgICBaSVAgc3RydWN0dXJlcyBmb3IgYW4gZW1wdHkgYXJjaGl2ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuCisKKyAgIFppcEZpbGUgaXMgYWxzbyBhIGNvbnRleHQgbWFuYWdlciBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIEluIHRoZSBleGFtcGxlLCAqbXl6aXAqIGlzIGNsb3NlZCBhZnRlciB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQncyBzdWl0ZSBpcyBmaW5pc2hlZC0tLWV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vyczo6CisKKyAgICAgIHdpdGggWmlwRmlsZSgnc3BhbS56aXAnLCAndycpIGFzIG15emlwOgorICAgICAgICAgIG15emlwLndyaXRlKCdlZ2dzLnR4dCcpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXNlIDpjbGFzczpgWmlwRmlsZWAgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5jbG9zZSgpCkBAIC0xNjEsOCArMTc2LDggQEAKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGUgZmlsZS1saWtlIG9iamVjdCBpcyByZWFkLW9ubHkgYW5kIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKLSAgICAgIDptZXRoOmByZWFkYCwgOm1ldGg6YHJlYWRsaW5lYCwgOm1ldGg6YHJlYWRsaW5lc2AsIDptZXRoOmBfX2l0ZXJfX2AsCi0gICAgICA6bWV0aDpgbmV4dGAuCisgICAgICA6bWV0aDpgIXJlYWRgLCA6bWV0aDpgIXJlYWRsaW5lYCwgOm1ldGg6YCFyZWFkbGluZXNgLCA6bWV0aDpgIV9faXRlcl9fYCwKKyAgICAgIDptZXRoOmAhbmV4dGAuCiAKICAgIC4uIG5vdGU6OgogCkBAIC0yNzIsNyArMjg3LDcgQEAKICAgICAgIGJ5dGUsIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBhcmNoaXZlIHdpbGwgYmUgdHJ1bmNhdGVkIGF0IHRoZSBudWxsIGJ5dGUuCiAKIAotLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBieXRlcykKKy4uIG1ldGhvZDo6IFppcEZpbGUud3JpdGVzdHIoemluZm9fb3JfYXJjbmFtZSwgYnl0ZXNbLCBjb21wcmVzc190eXBlXSkKIAogICAgV3JpdGUgdGhlIHN0cmluZyAqYnl0ZXMqIHRvIHRoZSBhcmNoaXZlOyAqemluZm9fb3JfYXJjbmFtZSogaXMgZWl0aGVyIHRoZSBmaWxlCiAgICBuYW1lIGl0IHdpbGwgYmUgZ2l2ZW4gaW4gdGhlIGFyY2hpdmUsIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBpbnN0YW5jZS4gIElmIGl0J3MKQEAgLTI4MiwxMyArMjk3LDIwIEBACiAgICBjcmVhdGVkIHdpdGggbW9kZSBgYCdyJ2BgICB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUVycm9yYC4gIENhbGxpbmcKICAgIDptZXRoOmB3cml0ZXN0cmAgb24gYSBjbG9zZWQgWmlwRmlsZSB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUVycm9yYC4KIAorICAgSWYgZ2l2ZW4sICpjb21wcmVzc190eXBlKiBvdmVycmlkZXMgdGhlIHZhbHVlIGdpdmVuIGZvciB0aGUgKmNvbXByZXNzaW9uKgorICAgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ldyBlbnRyeSwgb3IgaW4gdGhlICp6aW5mb19vcl9hcmNuYW1lKgorICAgKGlmIHRoYXQgaXMgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlKS4KKwogICAgLi4gbm90ZTo6CiAKLSAgICAgIFdoZW4gcGFzc2luZyBhIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UgYXMgdGhlICp6aW5mb19vcl9hY3JuYW1lKiBwYXJhbWV0ZXIsCisgICAgICBXaGVuIHBhc3NpbmcgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlIGFzIHRoZSAqemluZm9fb3JfYXJjbmFtZSogcGFyYW1ldGVyLAogICAgICAgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCB1c2VkIHdpbGwgYmUgdGhhdCBzcGVjaWZpZWQgaW4gdGhlICpjb21wcmVzc190eXBlKgogICAgICAgbWVtYmVyIG9mIHRoZSBnaXZlbiA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlLiAgQnkgZGVmYXVsdCwgdGhlCiAgICAgICA6Y2xhc3M6YFppcEluZm9gIGNvbnN0cnVjdG9yIHNldHMgdGhpcyBtZW1iZXIgdG8gOmNvbnN0OmBaSVBfU1RPUkVEYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAyLjcKKyAgICAgIFRoZSAqY29tcHJlc3Npb25fdHlwZSogYXJndW1lbnQuCisKIFRoZSBmb2xsb3dpbmcgZGF0YSBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZToKIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0IGIvRG9jL2xpYnJhcnkvemlwaW1wb3J0LnJzdAppbmRleCA0Y2U5YTM1Li40M2UxMmIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QKQEAgLTk2LDYgKzk2LDE1IEBACiAgICAgICBmaWxlIHdhc24ndCBmb3VuZC4KIAogCisgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKKyAgICAgIFJldHVybiB0aGUgdmFsdWUgYGBfX2ZpbGVfX2BgIHdvdWxkIGJlIHNldCB0byBpZiB0aGUgc3BlY2lmaWVkIG1vZHVsZQorICAgICAgd2FzIGltcG9ydGVkLiBSYWlzZSA6ZXhjOmBaaXBJbXBvcnRFcnJvcmAgaWYgdGhlIG1vZHVsZSBjb3VsZG4ndCBiZQorICAgICAgZm91bmQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDIuNworCisKICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCiAKICAgICAgIFJldHVybiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBSYWlzZQpkaWZmIC0tZ2l0IGEvRG9jL2xpY2Vuc2UucnN0IGIvRG9jL2xpY2Vuc2UucnN0CmluZGV4IDZhYjY3M2MuLjRjNjU0YWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWNlbnNlLnJzdAorKysgYi9Eb2MvbGljZW5zZS5yc3QKQEAgLTEwMCw5ICsxMDAsOSBAQAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwogfCAyLjYuMyAgICAgICAgICB8IDIuNi4yICAgICAgICB8IDIwMDkgICAgICB8IFBTRiAgICAgICAgfCB5ZXMgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotfCAyLjYuNCAgICAgICAgICB8IDIuNi4zICAgICAgICB8IDIwMDkgICAgICB8IFBTRiAgICAgICAgfCB5ZXMgICAgICAgICAgICAgfAorfCAyLjYuNCAgICAgICAgICB8IDIuNi4zICAgICAgICB8IDIwMTAgICAgICB8IFBTRiAgICAgICAgfCB5ZXMgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotfCAyLjYuNSAgICAgICAgICB8IDIuNi40ICAgICAgICB8IDIwMTAgICAgICB8IFBTRiAgICAgICAgfCB5ZXMgICAgICAgICAgICAgfAorfCAyLjcgICAgICAgICAgICB8IDIuNiAgICAgICAgICB8IDIwMTAgICAgICB8IFBTRiAgICAgICAgfCB5ZXMgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiBub3RlOjoKQEAgLTcxNiwzICs3MTYsMjYwIEBACiAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICAgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICBTVUNIIERBTUFHRS4KKworCitzdHJ0b2QgYW5kIGR0b2EKKy0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlsZSA6ZmlsZTpgUHl0aG9uL2R0b2EuY2AsIHdoaWNoIHN1cHBsaWVzIEMgZnVuY3Rpb25zIGR0b2EgYW5kCitzdHJ0b2QgZm9yIGNvbnZlcnNpb24gb2YgQyBkb3VibGVzIHRvIGFuZCBmcm9tIHN0cmluZ3MsIGlzIGRlcml2ZWQKK2Zyb20gdGhlIGZpbGUgb2YgdGhlIHNhbWUgbmFtZSBieSBEYXZpZCBNLiBHYXksIGN1cnJlbnRseSBhdmFpbGFibGUKK2Zyb20gaHR0cDovL3d3dy5uZXRsaWIub3JnL2ZwLy4gIFRoZSBvcmlnaW5hbCBmaWxlLCBhcyByZXRyaWV2ZWQgb24KK01hcmNoIDE2LCAyMDA5LCBjb250YWlucyB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nCitub3RpY2U6OgorCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICoKKyAgICAqIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisgICAgKgorICAgICogQ29weXJpZ2h0IChjKSAxOTkxLCAyMDAwLCAyMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMuCisgICAgKgorICAgICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgICAgKiBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQorICAgICogaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5CisgICAgKiBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGluZworICAgICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KKyAgICAqCisgICAgKiBUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICAgICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1IgTk9SIExVQ0VOVCBNQUtFUyBBTlkKKyAgICAqIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQorICAgICogT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgICAqCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK09wZW5TU0wKKy0tLS0tLS0KKworVGhlIG1vZHVsZXMgOm1vZDpgaGFzaGxpYmAsIDptb2Q6YHBvc2l4YCwgOm1vZDpgc3NsYCwgOm1vZDpgY3J5cHRgIHVzZQordGhlIE9wZW5TU0wgbGlicmFyeSBmb3IgYWRkZWQgcGVyZm9ybWFuY2UgaWYgbWFkZSBhdmFpbGFibGUgYnkgdGhlCitvcGVyYXRpbmcgc3lzdGVtLiBBZGRpdGlvbmFsbHksIHRoZSBXaW5kb3dzIGluc3RhbGxlcnMgZm9yIFB5dGhvbgoraW5jbHVkZSBhIGNvcHkgb2YgdGhlIE9wZW5TU0wgbGlicmFyaWVzLCBzbyB3ZSBpbmNsdWRlIGEgY29weSBvZiB0aGUKK09wZW5TU0wgbGljZW5zZSBoZXJlOjoKKworCisgIExJQ0VOU0UgSVNTVUVTCisgID09PT09PT09PT09PT09CisKKyAgVGhlIE9wZW5TU0wgdG9vbGtpdCBzdGF5cyB1bmRlciBhIGR1YWwgbGljZW5zZSwgaS5lLiBib3RoIHRoZSBjb25kaXRpb25zIG9mCisgIHRoZSBPcGVuU1NMIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCBTU0xlYXkgbGljZW5zZSBhcHBseSB0byB0aGUgdG9vbGtpdC4KKyAgU2VlIGJlbG93IGZvciB0aGUgYWN0dWFsIGxpY2Vuc2UgdGV4dHMuIEFjdHVhbGx5IGJvdGggbGljZW5zZXMgYXJlIEJTRC1zdHlsZQorICBPcGVuIFNvdXJjZSBsaWNlbnNlcy4gSW4gY2FzZSBvZiBhbnkgbGljZW5zZSBpc3N1ZXMgcmVsYXRlZCB0byBPcGVuU1NMCisgIHBsZWFzZSBjb250YWN0IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKworICBPcGVuU1NMIExpY2Vuc2UKKyAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAqCisgICAgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICAgICogYXJlIG1ldDoKKyAgICAgKgorICAgICAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAqCisgICAgICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgICogICAgZGlzdHJpYnV0aW9uLgorICAgICAqCisgICAgICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgICAgICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgICAgICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICAgICAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAgICAgKgorICAgICAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICAgICAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICAgICAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAgICAgKgorICAgICAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICAgICAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgICAgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgICAgICoKKyAgICAgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgICogICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICAgICAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICAgICAqCisgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgICAgICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgICAgICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgICAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgICAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgICAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICAgICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgICAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgICAgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICAgICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKyAgICAgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgICAgICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgICAgICoKKyAgICAgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICAgICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICoKKyAgICAgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAgICAgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgICAgICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICAgICAqCisgICAgICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgICAgICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICAgICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAgICAgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAgICAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgICAgICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgICAgICoKKyAgICAgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICAgICAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAgICAgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgICAgICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAgICAgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAgICAgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAgICAgKgorICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgICAqIGFyZSBtZXQ6CisgICAgICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgICAgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAgICAgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICAgICAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICAgICAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICAgICAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tCisgICAgICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAgICAgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICAgICAqCisgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAgICAgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgICAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgICAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgICAgICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgICAgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICAgICAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgICAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgICAgICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICAgICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAgICAgKiBTVUNIIERBTUFHRS4KKyAgICAgKgorICAgICAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgICAgICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgICAgICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICAgICAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgICAgICovCisKKworZXhwYXQKKy0tLS0tCisKK1RoZSA6bW9kOmBweWV4cGF0YCBleHRlbnNpb24gaXMgYnVpbHQgdXNpbmcgYW4gaW5jbHVkZWQgY29weSBvZiB0aGUgZXhwYXQKK3NvdXJjZXMgdW5sZXNzIHRoZSBidWlsZCBpcyBjb25maWd1cmVkIDpvcHRpb246YC0td2l0aC1zeXN0ZW0tZXhwYXRgOjoKKworICBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgVGhhaSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBDZW50ZXIgTHRkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQ2xhcmsgQ29vcGVyCisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisKK2xpYmZmaQorLS0tLS0tCisKK1RoZSA6bW9kOmBfY3R5cGVzYCBleHRlbnNpb24gaXMgYnVpbHQgdXNpbmcgYW4gaW5jbHVkZWQgY29weSBvZiB0aGUgbGliZmZpCitzb3VyY2VzIHVubGVzcyB0aGUgYnVpbGQgaXMgY29uZmlndXJlZCA6b3B0aW9uOmAtLXdpdGgtc3lzdGVtLWxpYmZmaWA6OgorCisgICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwOCAgUmVkIEhhdCwgSW5jIGFuZCBvdGhlcnMuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworCit6bGliCistLS0tCisKK1RoZSA6bW9kOmB6bGliYCBleHRlbnNpb24gaXMgYnVpbHQgdXNpbmcgYW4gaW5jbHVkZWQgY29weSBvZiB0aGUgemxpYgorc291cmNlcyB1bmxlc3MgdGhlIHpsaWIgdmVyc2lvbiBmb3VuZCBvbiB0aGUgc3lzdGVtIGlzIHRvbyBvbGQgdG8gYmUKK3VzZWQgZm9yIHRoZSBidWlsZDo6CisKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyAgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyAgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyAgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisgICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisKKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCisgIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKKyAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgorICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CisKZGlmZiAtLWdpdCBhL0RvYy9tYWtlLmJhdCBiL0RvYy9tYWtlLmJhdAppbmRleCA4MGFjODA2Li5kMjM0ZTc3IDEwMDY0NAotLS0gYS9Eb2MvbWFrZS5iYXQKKysrIGIvRG9jL21ha2UuYmF0CkBAIC0zNCw3ICszNCw3IEBACiBnb3RvIGVuZAogCiA6Y2hlY2tvdXQKLXN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvU3BoaW54LTAuNi41L3NwaGlueCB0b29scy9zcGhpbngKK3N2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvU3BoaW54LTAuNi43L3NwaGlueCB0b29scy9zcGhpbngKIHN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvZG9jdXRpbHMtMC42L2RvY3V0aWxzIHRvb2xzL2RvY3V0aWxzCiBzdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL0ppbmphLTIuMy4xL2ppbmphMiB0b29scy9qaW5qYTIKIHN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvUHlnbWVudHMtMS4zLjEvcHlnbWVudHMgdG9vbHMvcHlnbWVudHMKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggM2M3MTZiMi4uOWRmYTMxZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTMzMywxMSArMzMzLDE1IEBACiBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuCiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKLSAgIHdpdGhfc3RtdDogIndpdGgiIGBleHByZXNzaW9uYCBbImFzIiBgdGFyZ2V0YF0gIjoiIGBzdWl0ZWAKKyAgIHdpdGhfc3RtdDogIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBgc3VpdGVgCisgICB3aXRoX2l0ZW06IGBleHByZXNzaW9uYCBbImFzIiBgdGFyZ2V0YF0KIAotVGhlIGV4ZWN1dGlvbiBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBwcm9jZWVkcyBhcyBmb2xsb3dzOgorVGhlIGV4ZWN1dGlvbiBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXMgZm9sbG93czoKIAotIy4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLgorIy4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIDp0b2tlbjpgd2l0aF9pdGVtYCkgaXMKKyAgIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuCisKKyMuIFRoZSBjb250ZXh0IG1hbmFnZXIncyA6bWV0aDpgX19leGl0X19gIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLgogCiAjLiBUaGUgY29udGV4dCBtYW5hZ2VyJ3MgOm1ldGg6YF9fZW50ZXJfX2AgbWV0aG9kIGlzIGludm9rZWQuCiAKQEAgLTM0OSw3ICszNTMsNyBAQAogICAgICAgVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSA6bWV0aDpgX19lbnRlcl9fYCBtZXRob2QKICAgICAgIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiA6bWV0aDpgX19leGl0X19gIHdpbGwgYWx3YXlzIGJlIGNhbGxlZC4gVGh1cywgaWYKICAgICAgIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlCi0gICAgICBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZyB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA1IGJlbG93LgorICAgICAgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmcgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy4KIAogIy4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLgogCkBAIC0zNjcsMTIgKzM3MSwyNyBAQAogICAgZnJvbSA6bWV0aDpgX19leGl0X19gIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHMgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbgogICAgZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uCiAKK1dpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmIG11bHRpcGxlCis6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDo6CisKKyAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOgorICAgICAgIHN1aXRlCisKK2lzIGVxdWl2YWxlbnQgdG8gOjoKKworICAgd2l0aCBBKCkgYXMgYToKKyAgICAgICB3aXRoIEIoKSBhcyBiOgorICAgICAgICAgICBzdWl0ZQorCiAuLiBub3RlOjoKIAogICAgSW4gUHl0aG9uIDIuNSwgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgaXMgb25seSBhbGxvd2VkIHdoZW4gdGhlCiAgICBgYHdpdGhfc3RhdGVtZW50YGAgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkLiAgSXQgaXMgYWx3YXlzIGVuYWJsZWQgaW4KICAgIFB5dGhvbiAyLjYuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMi43CisgICBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLgorCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMDM0M2AgLSBUaGUgIndpdGgiIHN0YXRlbWVudApkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0IGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CmluZGV4IGYxNzQzZDkuLmRkZmZiYjMgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKQEAgLTY4OSw3ICs2ODksNyBAQAogICAgICAgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhbiBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YKICAgICAgIGEgYnVpbHQtaW4gbWV0aG9kIGlzIGBgYWxpc3QuYXBwZW5kKClgYCwgYXNzdW1pbmcgKmFsaXN0KiBpcyBhIGxpc3Qgb2JqZWN0LiBJbgogICAgICAgdGhpcyBjYXNlLCB0aGUgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlIDphdHRyOmBfX3NlbGZfX2AgaXMgc2V0IHRvIHRoZSBvYmplY3QKLSAgICAgIGRlbm90ZWQgYnkgKmxpc3QqLgorICAgICAgZGVub3RlZCBieSAqYWxpc3QqLgogCiAgICBDbGFzcyBUeXBlcwogICAgICAgQ2xhc3MgdHlwZXMsIG9yICJuZXctc3R5bGUgY2xhc3NlcywiIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0CkBAIC03MzksNiArNzM5LDEzIEBACiAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6IDphdHRyOmBfX2RpY3RfX2AgaXMgdGhlIG1vZHVsZSdzIG5hbWVzcGFjZSBhcyBhCiAgICBkaWN0aW9uYXJ5IG9iamVjdC4KIAorICAgLi4gaW1wbC1kZXRhaWw6OgorCisgICAgICBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvbiBjbGVhcnMgbW9kdWxlIGRpY3Rpb25hcmllcywgdGhlIG1vZHVsZQorICAgICAgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWQgd2hlbiB0aGUgbW9kdWxlIGZhbGxzIG91dCBvZiBzY29wZSBldmVuIGlmIHRoZQorICAgICAgZGljdGlvbmFyeSBzdGlsbCBoYXMgbGl2ZSByZWZlcmVuY2VzLiAgVG8gYXZvaWQgdGhpcywgY29weSB0aGUgZGljdGlvbmFyeQorICAgICAgb3Iga2VlcCB0aGUgbW9kdWxlIGFyb3VuZCB3aGlsZSB1c2luZyBpdHMgZGljdGlvbmFyeSBkaXJlY3RseS4KKwogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBfX25hbWVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKICAgICAgIHNpbmdsZTogX19kb2NfXyAobW9kdWxlIGF0dHJpYnV0ZSkKQEAgLTkwOCw2ICs5MTUsMjIgQEAKICAgICAgIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yCiAgICAgICBpbmRpcmVjdGx5KSB0byBtdXRhYmxlIG9iamVjdHMuCiAKKyAgICAgIC4uIGluZGV4OjoKKyAgICAgICAgIHNpbmdsZTogY29fYXJnY291bnQgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fY29kZSAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19jb25zdHMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fZmlsZW5hbWUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fZmlyc3RsaW5lbm8gKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fZmxhZ3MgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fbG5vdGFiIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IGNvX25hbWUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fbmFtZXMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fbmxvY2FscyAoY29kZSBvYmplY3QgYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBjb19zdGFja3NpemUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fdmFybmFtZXMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fY2VsbHZhcnMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogY29fZnJlZXZhcnMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKKwogICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogOmF0dHI6YGNvX25hbWVgIGdpdmVzIHRoZSBmdW5jdGlvbiBuYW1lOwogICAgICAgOmF0dHI6YGNvX2FyZ2NvdW50YCBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIChpbmNsdWRpbmcgYXJndW1lbnRzCiAgICAgICB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgOmF0dHI6YGNvX25sb2NhbHNgIGlzIHRoZSBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzIHVzZWQKQEAgLTkyNSwyMiArOTQ4LDYgQEAKICAgICAgIDphdHRyOmBjb19zdGFja3NpemVgIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsKICAgICAgIDphdHRyOmBjb19mbGFnc2AgaXMgYW4gaW50ZWdlciBlbmNvZGluZyBhIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLgogCi0gICAgICAuLiBpbmRleDo6Ci0gICAgICAgICBzaW5nbGU6IGNvX2FyZ2NvdW50IChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2NvZGUgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fY29uc3RzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2ZpbGVuYW1lIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2ZpcnN0bGluZW5vIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2ZsYWdzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2xub3RhYiAoY29kZSBvYmplY3QgYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBjb19uYW1lIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX25hbWVzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX25sb2NhbHMgKGNvZGUgb2JqZWN0IGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogY29fc3RhY2tzaXplIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX3Zhcm5hbWVzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2NlbGx2YXJzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IGNvX2ZyZWV2YXJzIChjb2RlIG9iamVjdCBhdHRyaWJ1dGUpCi0KICAgICAgIC4uIGluZGV4Ojogb2JqZWN0OiBnZW5lcmF0b3IKIAogICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yIDphdHRyOmBjb19mbGFnc2A6IGJpdCBgYDB4MDRgYCBpcyBzZXQgaWYKQEAgLTEzNTMsOCArMTM2MCw3IEBACiAgICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuCiAKICAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3Qgb3BlcmF0aW9uLAotICAgc2VlIHRoZSBgVG90YWwgT3JkZXJpbmcgcmVjaXBlIGluIHRoZSBBU1BOIGNvb2tib29rCi0gICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NTI5Lz5gX1wuCisgICBzZWUgOmZ1bmM6YGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2AuCiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2NtcF9fKHNlbGYsIG90aGVyKQogCkBAIC0xNzczLDcgKzE3NzksNyBAQAogCiBJbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzIDpjbGFzczpgYWJjLkFCQ01ldGFgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kcyBpbgogb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXMgInZpcnR1YWwgYmFzZQotY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pbiB0eXBlcyksIGFuZCBpbmNsdWRpbmcgdG8gb3RoZXIKK2NsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW4gdHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIKIEFCQ3MuCiAKIC4uIG1ldGhvZDo6IGNsYXNzLl9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKQpAQCAtMTc5Miw3ICsxNzk4LDcgQEAKIAogTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhIGNsYXNzLiAgVGhleQogY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgKLXRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZCBvbiBpbnN0YW5jZXMsIG9ubHkgdGhhdCBpbiB0aGlzCit0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWQgb24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMKIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLgogCiAuLiBzZWVhbHNvOjoKQEAgLTIzMTMsMTMgKzIzMTksMTUgQEAKICoKIAogICBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIG51bWVyaWMgdHlwZXMgOmNsYXNzOmBpbnRgLAotICA6Y2xhc3M6YGxvbmdgIGFuZCA6Y2xhc3M6YGZsb2F0YCBkbyBub3QgdXNlIGNvZXJjaW9uOyB0aGUgdHlwZSA6Y2xhc3M6YGNvbXBsZXhgCi0gIGhvd2V2ZXIgZG9lcyB1c2UgY29lcmNpb24gZm9yIGJpbmFyeSBvcGVyYXRvcnMgYW5kIHJpY2ggY29tcGFyaXNvbnMsIGRlc3BpdGUKLSAgdGhlIGFib3ZlIHJ1bGVzLiAgVGhlIGRpZmZlcmVuY2UgY2FuIGJlY29tZSBhcHBhcmVudCB3aGVuIHN1YmNsYXNzaW5nIHRoZXNlCi0gIHR5cGVzLiAgT3ZlciB0aW1lLCB0aGUgdHlwZSA6Y2xhc3M6YGNvbXBsZXhgIG1heSBiZSBmaXhlZCB0byBhdm9pZCBjb2VyY2lvbi4KKyAgOmNsYXNzOmBsb25nYCwgOmNsYXNzOmBmbG9hdGAsIGFuZCA6Y2xhc3M6YGNvbXBsZXhgIGRvIG5vdCB1c2UgY29lcmNpb24uCiAgIEFsbCB0aGVzZSB0eXBlcyBpbXBsZW1lbnQgYSA6bWV0aDpgX19jb2VyY2VfX2AgbWV0aG9kLCBmb3IgdXNlIGJ5IHRoZSBidWlsdC1pbgogICA6ZnVuYzpgY29lcmNlYCBmdW5jdGlvbi4KIAorICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworCisgICAgIFRoZSBjb21wbGV4IHR5cGUgbm8gbG9uZ2VyIG1ha2VzIGltcGxpY2l0IGNhbGxzIHRvIHRoZSA6bWV0aDpgX19jb2VyY2VfX2AKKyAgICAgbWV0aG9kIGZvciBtaXhlZC10eXBlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMuCisKIAogLi4gX2NvbnRleHQtbWFuYWdlcnM6CiAKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0IGIvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKaW5kZXggNGUzODUzNi4uOTFhYzcyZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKQEAgLTE0MCw5ICsxNDAsOSBAQAogVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzCiBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZCA6bW9kOmBfX21haW5fX2AuCiAKLVRoZSBnbG9iYWwgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gaW4gdGhlIHNhbWUKLWJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGUgY29udGFpbnMgYSBnbG9iYWwKLXN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC4KK1RoZSA6a2V5d29yZDpgZ2xvYmFsYCBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbgoraW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZSBjb250YWlucworYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLgogCiBBIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmUgbmFtZXMuCiBUaGVzZSByZWZlcmVuY2VzIGZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24uIFRoZSBuYW1lc3BhY2Ugb2YKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0IGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKaW5kZXggOGJmYzhkOS4uMDY3YTNkNiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKQEAgLTY1LDcgKzY1LDcgQEAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGF0b206IGBpZGVudGlmaWVyYCB8IGBsaXRlcmFsYCB8IGBlbmNsb3N1cmVgCiAgICBlbmNsb3N1cmU6IGBwYXJlbnRoX2Zvcm1gIHwgYGxpc3RfZGlzcGxheWAKLSAgICAgICAgICAgIDogfCBgZ2VuZXJhdG9yX2V4cHJlc3Npb25gIHwgYGRpY3RfZGlzcGxheWAKKyAgICAgICAgICAgIDogfCBgZ2VuZXJhdG9yX2V4cHJlc3Npb25gIHwgYGRpY3RfZGlzcGxheWAgfCBgc2V0X2Rpc3BsYXlgCiAgICAgICAgICAgICA6IHwgYHN0cmluZ19jb252ZXJzaW9uYCB8IGB5aWVsZF9hdG9tYAogCiAKQEAgLTIwNiw3NCArMjA2LDEwMCBAQAogbGlzdCBlbGVtZW50IGVhY2ggdGltZSB0aGUgaW5uZXJtb3N0IGJsb2NrIGlzIHJlYWNoZWQgWyNdXy4KIAogCisuLiBfY29tcHJlaGVuc2lvbnM6CisKK0Rpc3BsYXlzIGZvciBzZXRzIGFuZCBkaWN0aW9uYXJpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGNvbnN0cnVjdGluZyBhIHNldCBvciBhIGRpY3Rpb25hcnkgUHl0aG9uIHByb3ZpZGVzIHNwZWNpYWwgc3ludGF4CitjYWxsZWQgImRpc3BsYXlzIiwgZWFjaCBvZiB0aGVtIGluIHR3byBmbGF2b3JzOgorCisqIGVpdGhlciB0aGUgY29udGFpbmVyIGNvbnRlbnRzIGFyZSBsaXN0ZWQgZXhwbGljaXRseSwgb3IKKworKiB0aGV5IGFyZSBjb21wdXRlZCB2aWEgYSBzZXQgb2YgbG9vcGluZyBhbmQgZmlsdGVyaW5nIGluc3RydWN0aW9ucywgY2FsbGVkIGEKKyAgOmRmbjpgY29tcHJlaGVuc2lvbmAuCisKK0NvbW1vbiBzeW50YXggZWxlbWVudHMgZm9yIGNvbXByZWhlbnNpb25zIGFyZToKKworLi4gcHJvZHVjdGlvbmxpc3Q6OgorICAgY29tcHJlaGVuc2lvbjogYGV4cHJlc3Npb25gIGBjb21wX2ZvcmAKKyAgIGNvbXBfZm9yOiAiZm9yIiBgdGFyZ2V0X2xpc3RgICJpbiIgYG9yX3Rlc3RgIFtgY29tcF9pdGVyYF0KKyAgIGNvbXBfaXRlcjogYGNvbXBfZm9yYCB8IGBjb21wX2lmYAorICAgY29tcF9pZjogImlmIiBgZXhwcmVzc2lvbl9ub2NvbmRgIFtgY29tcF9pdGVyYF0KKworVGhlIGNvbXByZWhlbnNpb24gY29uc2lzdHMgb2YgYSBzaW5nbGUgZXhwcmVzc2lvbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUKKzprZXl3b3JkOmBmb3JgIGNsYXVzZSBhbmQgemVybyBvciBtb3JlIDprZXl3b3JkOmBmb3JgIG9yIDprZXl3b3JkOmBpZmAgY2xhdXNlcy4KK0luIHRoaXMgY2FzZSwgdGhlIGVsZW1lbnRzIG9mIHRoZSBuZXcgY29udGFpbmVyIGFyZSB0aG9zZSB0aGF0IHdvdWxkIGJlIHByb2R1Y2VkCitieSBjb25zaWRlcmluZyBlYWNoIG9mIHRoZSA6a2V5d29yZDpgZm9yYCBvciA6a2V5d29yZDpgaWZgIGNsYXVzZXMgYSBibG9jaywKK25lc3RpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhbmQgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiB0byBwcm9kdWNlIGFuIGVsZW1lbnQKK2VhY2ggdGltZSB0aGUgaW5uZXJtb3N0IGJsb2NrIGlzIHJlYWNoZWQuCisKK05vdGUgdGhhdCB0aGUgY29tcHJlaGVuc2lvbiBpcyBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIHNjb3BlLCBzbyBuYW1lcyBhc3NpZ25lZAordG8gaW4gdGhlIHRhcmdldCBsaXN0IGRvbid0ICJsZWFrIiBpbiB0aGUgZW5jbG9zaW5nIHNjb3BlLgorCisKIC4uIF9nZW5leHByOgogCiBHZW5lcmF0b3IgZXhwcmVzc2lvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAuLiBpbmRleDo6IHBhaXI6IGdlbmVyYXRvcjsgZXhwcmVzc2lvbgorICAgICAgICAgICBvYmplY3Q6IGdlbmVyYXRvcgogCiBBIGdlbmVyYXRvciBleHByZXNzaW9uIGlzIGEgY29tcGFjdCBnZW5lcmF0b3Igbm90YXRpb24gaW4gcGFyZW50aGVzZXM6CiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKLSAgIGdlbmVyYXRvcl9leHByZXNzaW9uOiAiKCIgYGV4cHJlc3Npb25gIGBnZW5leHByX2ZvcmAgIikiCi0gICBnZW5leHByX2ZvcjogImZvciIgYHRhcmdldF9saXN0YCAiaW4iIGBvcl90ZXN0YCBbYGdlbmV4cHJfaXRlcmBdCi0gICBnZW5leHByX2l0ZXI6IGBnZW5leHByX2ZvcmAgfCBgZ2VuZXhwcl9pZmAKLSAgIGdlbmV4cHJfaWY6ICJpZiIgYG9sZF9leHByZXNzaW9uYCBbYGdlbmV4cHJfaXRlcmBdCisgICBnZW5lcmF0b3JfZXhwcmVzc2lvbjogIigiIGBleHByZXNzaW9uYCBgY29tcF9mb3JgICIpIgogCi0uLiBpbmRleDo6IG9iamVjdDogZ2VuZXJhdG9yCitBIGdlbmVyYXRvciBleHByZXNzaW9uIHlpZWxkcyBhIG5ldyBnZW5lcmF0b3Igb2JqZWN0LiAgSXRzIHN5bnRheCBpcyB0aGUgc2FtZSBhcworZm9yIGNvbXByZWhlbnNpb25zLCBleGNlcHQgdGhhdCBpdCBpcyBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBpbnN0ZWFkIG9mCiticmFja2V0cyBvciBjdXJseSBicmFjZXMuCiAKLUEgZ2VuZXJhdG9yIGV4cHJlc3Npb24geWllbGRzIGEgbmV3IGdlbmVyYXRvciBvYmplY3QuICBJdCBjb25zaXN0cyBvZiBhIHNpbmdsZQotZXhwcmVzc2lvbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgOmtleXdvcmQ6YGZvcmAgY2xhdXNlIGFuZCB6ZXJvIG9yIG1vcmUKLTprZXl3b3JkOmBmb3JgIG9yIDprZXl3b3JkOmBpZmAgY2xhdXNlcy4gIFRoZSBpdGVyYXRpbmcgdmFsdWVzIG9mIHRoZSBuZXcKLWdlbmVyYXRvciBhcmUgdGhvc2UgdGhhdCB3b3VsZCBiZSBwcm9kdWNlZCBieSBjb25zaWRlcmluZyBlYWNoIG9mIHRoZQotOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YGlmYCBjbGF1c2VzIGEgYmxvY2ssIG5lc3RpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhbmQKLWV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gdG8geWllbGQgYSB2YWx1ZSB0aGF0IGlzIHJlYWNoZWQgdGhlIGlubmVybW9zdCBibG9jawotZm9yIGVhY2ggaXRlcmF0aW9uLgotCi1WYXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYXJlIGV2YWx1YXRlZCBsYXppbHkgaW4gYSBzZXBhcmF0ZQotc2NvcGUgd2hlbiB0aGUgOm1ldGg6YG5leHRgIG1ldGhvZCBpcyBjYWxsZWQgZm9yIHRoZSBnZW5lcmF0b3Igb2JqZWN0IChpbiB0aGUKLXNhbWUgZmFzaGlvbiBhcyBmb3Igbm9ybWFsIGdlbmVyYXRvcnMpLiAgSG93ZXZlciwgdGhlIDprZXl3b3JkOmBpbmAgZXhwcmVzc2lvbgotb2YgdGhlIGxlZnRtb3N0IDprZXl3b3JkOmBmb3JgIGNsYXVzZSBpcyBpbW1lZGlhdGVseSBldmFsdWF0ZWQgaW4gdGhlIGN1cnJlbnQKLXNjb3BlIHNvIHRoYXQgYW4gZXJyb3IgcHJvZHVjZWQgYnkgaXQgY2FuIGJlIHNlZW4gYmVmb3JlIGFueSBvdGhlciBwb3NzaWJsZQorVmFyaWFibGVzIHVzZWQgaW4gdGhlIGdlbmVyYXRvciBleHByZXNzaW9uIGFyZSBldmFsdWF0ZWQgbGF6aWx5IHdoZW4gdGhlCis6bWV0aDpgX19uZXh0X19gIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZSBzYW1lIGZhc2hpb24gYXMKK25vcm1hbCBnZW5lcmF0b3JzKS4gIEhvd2V2ZXIsIHRoZSBsZWZ0bW9zdCA6a2V5d29yZDpgZm9yYCBjbGF1c2UgaXMgaW1tZWRpYXRlbHkKK2V2YWx1YXRlZCwgc28gdGhhdCBhbiBlcnJvciBwcm9kdWNlZCBieSBpdCBjYW4gYmUgc2VlbiBiZWZvcmUgYW55IG90aGVyIHBvc3NpYmxlCiBlcnJvciBpbiB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIGdlbmVyYXRvciBleHByZXNzaW9uLiAgU3Vic2VxdWVudAotOmtleXdvcmQ6YGZvcmAgYW5kIDprZXl3b3JkOmBpZmAgY2xhdXNlcyBjYW5ub3QgYmUgZXZhbHVhdGVkIGltbWVkaWF0ZWx5IHNpbmNlCi10aGV5IG1heSBkZXBlbmQgb24gdGhlIHByZXZpb3VzIDprZXl3b3JkOmBmb3JgIGxvb3AuICBGb3IgZXhhbXBsZToKLWBgKHgqeSBmb3IgeCBpbiByYW5nZSgxMCkgZm9yIHkgaW4gYmFyKHgpKWBgLgorOmtleXdvcmQ6YGZvcmAgY2xhdXNlcyBjYW5ub3QgYmUgZXZhbHVhdGVkIGltbWVkaWF0ZWx5IHNpbmNlIHRoZXkgbWF5IGRlcGVuZCBvbgordGhlIHByZXZpb3VzIDprZXl3b3JkOmBmb3JgIGxvb3AuIEZvciBleGFtcGxlOiBgYCh4KnkgZm9yIHggaW4gcmFuZ2UoMTApIGZvciB5CitpbiBiYXIoeCkpYGAuCiAKLVRoZSBwYXJlbnRoZXNlcyBjYW4gYmUgb21pdHRlZCBvbiBjYWxscyB3aXRoIG9ubHkgb25lIGFyZ3VtZW50LiBTZWUgc2VjdGlvbgorVGhlIHBhcmVudGhlc2VzIGNhbiBiZSBvbWl0dGVkIG9uIGNhbGxzIHdpdGggb25seSBvbmUgYXJndW1lbnQuICBTZWUgc2VjdGlvbgogOnJlZjpgY2FsbHNgIGZvciB0aGUgZGV0YWlsLgogCi0KIC4uIF9kaWN0OgogCiBEaWN0aW9uYXJ5IGRpc3BsYXlzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGluZGV4OjogcGFpcjogZGljdGlvbmFyeTsgZGlzcGxheQotCi0uLiBpbmRleDo6Ci0gICBzaW5nbGU6IGtleQotICAgc2luZ2xlOiBkYXR1bQotICAgc2luZ2xlOiBrZXkvZGF0dW0gcGFpcgorICAgICAgICAgICBrZXksIGRhdHVtLCBrZXkvZGF0dW0gcGFpcgorICAgICAgICAgICBvYmplY3Q6IGRpY3Rpb25hcnkKIAogQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzIGVuY2xvc2VkIGluCiBjdXJseSBicmFjZXM6CiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKLSAgIGRpY3RfZGlzcGxheTogInsiIFtga2V5X2RhdHVtX2xpc3RgXSAifSIKKyAgIGRpY3RfZGlzcGxheTogInsiIFtga2V5X2RhdHVtX2xpc3RgIHwgYGRpY3RfY29tcHJlaGVuc2lvbmBdICJ9IgogICAga2V5X2RhdHVtX2xpc3Q6IGBrZXlfZGF0dW1gICgiLCIgYGtleV9kYXR1bWApKiBbIiwiXQogICAga2V5X2RhdHVtOiBgZXhwcmVzc2lvbmAgIjoiIGBleHByZXNzaW9uYAotCi0uLiBpbmRleDo6IG9iamVjdDogZGljdGlvbmFyeQorICAgZGljdF9jb21wcmVoZW5zaW9uOiBgZXhwcmVzc2lvbmAgIjoiIGBleHByZXNzaW9uYCBgY29tcF9mb3JgCiAKIEEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC4KIAotVGhlIGtleS9kYXR1bSBwYWlycyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YKLXRoZSBkaWN0aW9uYXJ5OiBlYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlCi10aGUgY29ycmVzcG9uZGluZyBkYXR1bS4KK0lmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmUgZXZhbHVhdGVkCitmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OiBlYWNoIGtleSBvYmplY3QgaXMKK3VzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGUgY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMKK3RoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleSBtdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUKK2ZpbmFsIGRpY3Rpb25hcnkncyB2YWx1ZSBmb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uCisKK0EgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsIG5lZWRzIHR3bworZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWwgImZvciIgYW5kICJpZiIgY2xhdXNlcy4KK1doZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nIGtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkCitpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHByb2R1Y2VkLgogCiAuLiBpbmRleDo6IHBhaXI6IGltbXV0YWJsZTsgb2JqZWN0CisgICAgICAgICAgIGhhc2hhYmxlCiAKIFJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluIHNlY3Rpb24KIDpyZWY6YHR5cGVzYC4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZSBzaG91bGQgYmUgOnRlcm06YGhhc2hhYmxlYCwgd2hpY2ggZXhjbHVkZXMKQEAgLTI4Miw2ICszMDgsMzAgQEAKIHByZXZhaWxzLgogCiAKKy4uIF9zZXQ6CisKK1NldCBkaXNwbGF5cworLS0tLS0tLS0tLS0tCisKKy4uIGluZGV4OjogcGFpcjogc2V0OyBkaXNwbGF5CisgICAgICAgICAgIG9iamVjdDogc2V0CisKK0Egc2V0IGRpc3BsYXkgaXMgZGVub3RlZCBieSBjdXJseSBicmFjZXMgYW5kIGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGRpY3Rpb25hcnkKK2Rpc3BsYXlzIGJ5IHRoZSBsYWNrIG9mIGNvbG9ucyBzZXBhcmF0aW5nIGtleXMgYW5kIHZhbHVlczoKKworLi4gcHJvZHVjdGlvbmxpc3Q6OgorICAgc2V0X2Rpc3BsYXk6ICJ7IiAoYGV4cHJlc3Npb25fbGlzdGAgfCBgY29tcHJlaGVuc2lvbmApICJ9IgorCitBIHNldCBkaXNwbGF5IHlpZWxkcyBhIG5ldyBtdXRhYmxlIHNldCBvYmplY3QsIHRoZSBjb250ZW50cyBiZWluZyBzcGVjaWZpZWQgYnkKK2VpdGhlciBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zIG9yIGEgY29tcHJlaGVuc2lvbi4gIFdoZW4gYSBjb21tYS1zZXBhcmF0ZWQKK2xpc3Qgb2YgZXhwcmVzc2lvbnMgaXMgc3VwcGxpZWQsIGl0cyBlbGVtZW50cyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodAorYW5kIGFkZGVkIHRvIHRoZSBzZXQgb2JqZWN0LiAgV2hlbiBhIGNvbXByZWhlbnNpb24gaXMgc3VwcGxpZWQsIHRoZSBzZXQgaXMKK2NvbnN0cnVjdGVkIGZyb20gdGhlIGVsZW1lbnRzIHJlc3VsdGluZyBmcm9tIHRoZSBjb21wcmVoZW5zaW9uLgorCitBbiBlbXB0eSBzZXQgY2Fubm90IGJlIGNvbnN0cnVjdGVkIHdpdGggYGB7fWBgOyB0aGlzIGxpdGVyYWwgY29uc3RydWN0cyBhbiBlbXB0eQorZGljdGlvbmFyeS4KKworCiAuLiBfc3RyaW5nLWNvbnZlcnNpb25zOgogCiBTdHJpbmcgY29udmVyc2lvbnMKQEAgLTM2Nyw3ICs0MTcsNyBAQAogbXVsdGlwbGUgdGltZXMsIHRoZXkgaGF2ZSBtb3JlIHRoYW4gb25lIGVudHJ5IHBvaW50IGFuZCB0aGVpciBleGVjdXRpb24gY2FuIGJlCiBzdXNwZW5kZWQuICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBnZW5lcmF0b3IgZnVuY3Rpb24gY2Fubm90IGNvbnRyb2wKIHdoZXJlIHNob3VsZCB0aGUgZXhlY3V0aW9uIGNvbnRpbnVlIGFmdGVyIGl0IHlpZWxkczsgdGhlIGNvbnRyb2wgaXMgYWx3YXlzCi10cmFuc2ZlcmVkIHRvIHRoZSBnZW5lcmF0b3IncyBjYWxsZXIuCit0cmFuc2ZlcnJlZCB0byB0aGUgZ2VuZXJhdG9yJ3MgY2FsbGVyLgogCiAuLiBpbmRleDo6IG9iamVjdDogZ2VuZXJhdG9yCiAKQEAgLTk1MCw2ICsxMDAwLDExIEBACiBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggYGBwb3coMiwgbilgYC4gIE5lZ2F0aXZlIHNoaWZ0CiBjb3VudHMgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24uCiAKKy4uIG5vdGU6OgorCisgICBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyByZXF1aXJlZAorICAgdG8gYmUgYXQgbW9zdCA6YXR0cjpgc3lzLm1heHNpemVgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXIgdGhhbgorICAgOmF0dHI6YHN5cy5tYXhzaXplYCBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgogCiAuLiBfYml0d2lzZToKIApAQCAtMTMxMiw2ICsxMzY3LDcgQEAKIHwgYGArYGAsIGBgLWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyNdXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgK3hgYCwgYGAteGBgLCBgYH54YGAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTMzNiw4ICsxMzkyLDggQEAKICAgIHRydWUgbnVtZXJpY2FsbHkgZHVlIHRvIHJvdW5kb2ZmLiAgRm9yIGV4YW1wbGUsIGFuZCBhc3N1bWluZyBhIHBsYXRmb3JtIG9uIHdoaWNoCiAgICBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCBgYC0xZS0xMDAgJQogICAgMWUxMDBgYCBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgYGAxZTEwMGBgLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzIGBgLTFlLTEwMCArCi0gICAxZTEwMGBgLCB3aGljaCBpcyBudW1lcmljYWxseSBleGFjdGx5IGVxdWFsIHRvIGBgMWUxMDBgYC4gIEZ1bmN0aW9uIDpmdW5jOmBmbW9kYAotICAgaW4gdGhlIDptb2Q6YG1hdGhgIG1vZHVsZSByZXR1cm5zIGEgcmVzdWx0IHdob3NlIHNpZ24gbWF0Y2hlcyB0aGUgc2lnbiBvZiB0aGUKKyAgIDFlMTAwYGAsIHdoaWNoIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gYGAxZTEwMGBgLiAgVGhlIGZ1bmN0aW9uCisgICA6ZnVuYzpgbWF0aC5mbW9kYCByZXR1cm5zIGEgcmVzdWx0IHdob3NlIHNpZ24gbWF0Y2hlcyB0aGUgc2lnbiBvZiB0aGUKICAgIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zIGBgLTFlLTEwMGBgIGluIHRoaXMgY2FzZS4gV2hpY2ggYXBwcm9hY2gKICAgIGlzIG1vcmUgYXBwcm9wcmlhdGUgZGVwZW5kcyBvbiB0aGUgYXBwbGljYXRpb24uCiAKQEAgLTEzNjcsNSArMTQyMyw4IEBACiAgICB0aGUgOmtleXdvcmQ6YGlzYCBvcGVyYXRvciwgbGlrZSB0aG9zZSBpbnZvbHZpbmcgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZQogICAgbWV0aG9kcywgb3IgY29uc3RhbnRzLiAgQ2hlY2sgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLgogCisuLiBbI10gVGhlIGBgJWBgIG9wZXJhdG9yIGlzIGFsc28gdXNlZCBmb3Igc3RyaW5nIGZvcm1hdHRpbmc7IHRoZSBzYW1lCisgICBwcmVjZWRlbmNlIGFwcGxpZXMuCisKIC4uIFsjXSBUaGUgcG93ZXIgb3BlcmF0b3IgYGAqKmBgIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWMgb3IKICAgIGJpdHdpc2UgdW5hcnkgb3BlcmF0b3Igb24gaXRzIHJpZ2h0LCB0aGF0IGlzLCBgYDIqKi0xYGAgaXMgYGAwLjVgYC4KZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdCBiL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdAppbmRleCA2OWJkNDFkLi4zNmY4MjRmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0CkBAIC02OCwxMiArNjgsMTIgQEAKICAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgdGhlIElyb25QeXRob24gd2Vic2l0ZSA8aHR0cDovL3d3dy5pcm9ucHl0aG9uLmNvbS8+YF8uCiAKIFB5UHkKLSAgIEFuIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiB3cml0dGVuIGluIFB5dGhvbjsgZXZlbiB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgaXMKLSAgIHdyaXR0ZW4gaW4gUHl0aG9uLiAgVGhpcyBpcyBleGVjdXRlZCB1c2luZyBDUHl0aG9uIGFzIHRoZSB1bmRlcmx5aW5nCi0gICBpbnRlcnByZXRlci4gIE9uZSBvZiB0aGUgZ29hbHMgb2YgdGhlIHByb2plY3QgaXMgdG8gZW5jb3VyYWdlIGV4cGVyaW1lbnRhdGlvbgotICAgd2l0aCB0aGUgbGFuZ3VhZ2UgaXRzZWxmIGJ5IG1ha2luZyBpdCBlYXNpZXIgdG8gbW9kaWZ5IHRoZSBpbnRlcnByZXRlciAoc2luY2UgaXQKLSAgIGlzIHdyaXR0ZW4gaW4gUHl0aG9uKS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIG9uIGB0aGUgUHlQeQotICAgcHJvamVjdCdzIGhvbWUgcGFnZSA8aHR0cDovL2NvZGVzcGVhay5uZXQvcHlweS8+YF8uCisgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gd3JpdHRlbiBjb21wbGV0ZWx5IGluIFB5dGhvbi4gSXQgc3VwcG9ydHMgc2V2ZXJhbAorICAgYWR2YW5jZWQgZmVhdHVyZXMgbm90IGZvdW5kIGluIG90aGVyIGltcGxlbWVudGF0aW9ucyBsaWtlIHN0YWNrbGVzcyBzdXBwb3J0CisgICBhbmQgYSBKdXN0IGluIFRpbWUgY29tcGlsZXIuIE9uZSBvZiB0aGUgZ29hbHMgb2YgdGhlIHByb2plY3QgaXMgdG8gZW5jb3VyYWdlCisgICBleHBlcmltZW50YXRpb24gd2l0aCB0aGUgbGFuZ3VhZ2UgaXRzZWxmIGJ5IG1ha2luZyBpdCBlYXNpZXIgdG8gbW9kaWZ5IHRoZQorICAgaW50ZXJwcmV0ZXIgKHNpbmNlIGl0IGlzIHdyaXR0ZW4gaW4gUHl0aG9uKS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMKKyAgIGF2YWlsYWJsZSBvbiBgdGhlIFB5UHkgcHJvamVjdCdzIGhvbWUgcGFnZSA8aHR0cDovL3B5cHkub3JnLz5gXy4KIAogRWFjaCBvZiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgdmFyaWVzIGluIHNvbWUgd2F5IGZyb20gdGhlIGxhbmd1YWdlIGFzIGRvY3VtZW50ZWQKIGluIHRoaXMgbWFudWFsLCBvciBpbnRyb2R1Y2VzIHNwZWNpZmljIGluZm9ybWF0aW9uIGJleW9uZCB3aGF0J3MgY292ZXJlZCBpbiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CmluZGV4IGQ0Yzc5OTAuLmQ3MTYxMzkgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdApAQCAtNDI2LDYgKzQyNiw3IEBACiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICBzdHJpbmdsaXRlcmFsOiBbYHN0cmluZ3ByZWZpeGBdKGBzaG9ydHN0cmluZ2AgfCBgbG9uZ3N0cmluZ2ApCiAgICBzdHJpbmdwcmVmaXg6ICJyIiB8ICJ1IiB8ICJ1ciIgfCAiUiIgfCAiVSIgfCAiVVIiIHwgIlVyIiB8ICJ1UiIKKyAgICAgICAgICAgICAgIDogfCAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiCiAgICBzaG9ydHN0cmluZzogIiciIGBzaG9ydHN0cmluZ2l0ZW1gKiAiJyIgfCAnIicgYHNob3J0c3RyaW5naXRlbWAqICciJwogICAgbG9uZ3N0cmluZzogIicnJyIgYGxvbmdzdHJpbmdpdGVtYCogIicnJyIKICAgICAgICAgICAgICA6IHwgJyIiIicgYGxvbmdzdHJpbmdpdGVtYCogJyIiIicKQEAgLTQ1OCw4ICs0NTksMTAgQEAKIGBgJ3UnYGAgb3IgYGAnVSdgYCBtYWtlcyB0aGUgc3RyaW5nIGEgVW5pY29kZSBzdHJpbmcuICBVbmljb2RlIHN0cmluZ3MgdXNlIHRoZQogVW5pY29kZSBjaGFyYWN0ZXIgc2V0IGFzIGRlZmluZWQgYnkgdGhlIFVuaWNvZGUgQ29uc29ydGl1bSBhbmQgSVNPIDEwNjQ2LiAgU29tZQogYWRkaXRpb25hbCBlc2NhcGUgc2VxdWVuY2VzLCBkZXNjcmliZWQgYmVsb3csIGFyZSBhdmFpbGFibGUgaW4gVW5pY29kZSBzdHJpbmdzLgotVGhlIHR3byBwcmVmaXggY2hhcmFjdGVycyBtYXkgYmUgY29tYmluZWQ7IGluIHRoaXMgY2FzZSwgYGAndSdgYCBtdXN0IGFwcGVhcgotYmVmb3JlIGBgJ3InYGAuCitBIHByZWZpeCBvZiBgYCdiJ2BgIG9yIGBgJ0InYGAgaXMgaWdub3JlZCBpbiBQeXRob24gMjsgaXQgaW5kaWNhdGVzIHRoYXQgdGhlCitsaXRlcmFsIHNob3VsZCBiZWNvbWUgYSBieXRlcyBsaXRlcmFsIGluIFB5dGhvbiAzIChlLmcuIHdoZW4gY29kZSBpcworYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgd2l0aCAydG8zKS4gIEEgYGAndSdgYCBvciBgYCdiJ2BgIHByZWZpeCBtYXkgYmUgZm9sbG93ZWQKK2J5IGFuIGBgJ3InYGAgcHJlZml4LgogCiBJbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkIChhbmQgYXJlCiByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3cgdGVybWluYXRlIHRoZSBzdHJpbmcuICAoQQpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CmluZGV4IDczZDk4Y2EuLmMwZDgxODIgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKQEAgLTgzNiwxNSArODM2LDExIEBACiBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwIG9uZSBwYWNrYWdlIGxldmVsLiBUaHJlZSBkb3RzIGlzIHVwIHR3byBsZXZlbHMsIGV0Yy4KIFNvIGlmIHlvdSBleGVjdXRlIGBgZnJvbSAuIGltcG9ydCBtb2RgYCBmcm9tIGEgbW9kdWxlIGluIHRoZSBgYHBrZ2BgIHBhY2thZ2UKIHRoZW4geW91IHdpbGwgZW5kIHVwIGltcG9ydGluZyBgYHBrZy5tb2RgYC4gSWYgeW91IGV4ZWN1dGUgYGBmcm9tIC4uc3VicGtnMgotaW1wcnQgbW9kYGAgZnJvbSB3aXRoaW4gYGBwa2cuc3VicGtnMWBgIHlvdSB3aWxsIGltcG9ydCBgYHBrZy5zdWJwa2cyLm1vZGBgLgoraW1wb3J0IG1vZGBgIGZyb20gd2l0aGluIGBgcGtnLnN1YnBrZzFgYCB5b3Ugd2lsbCBpbXBvcnQgYGBwa2cuc3VicGtnMi5tb2RgYC4KIFRoZSBzcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzIGNvbnRhaW5lZCB3aXRoaW4gOnBlcDpgMzI4YC4KIAotCi0uLiBpbmRleDo6IGJ1aWx0aW46IF9faW1wb3J0X18KLQotVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBfX2ltcG9ydF9fYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucwotdGhhdCBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseTsgcmVmZXIgdG8KLTpyZWY6YGJ1aWx0LWluLWZ1bmNzYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKzpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdAorZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkuCiAKIAogLi4gX2Z1dHVyZToKZGlmZiAtLWdpdCBhL0RvYy90b29scy9kYWlseWJ1aWxkLnB5IGIvRG9jL3Rvb2xzL2RhaWx5YnVpbGQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWE0NzFlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy90b29scy9kYWlseWJ1aWxkLnB5CkBAIC0wLDAgKzEsODEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworIyBSdW5zIHRoZSBkYWlseSBidWlsZCBvZiB0aGUgUHl0aG9uIGRvY3Mgb24gZGluc2RhbGUucHl0aG9uLm9yZy4KKyMKKyMgVXNhZ2VzOgorIworIyAgIGRhaWx5YnVpbGQucHkKKyMKKyMgd2l0aG91dCBhbnkgYXJndW1lbnRzIGJ1aWxkcyBkb2NzIGZvciBhbGwgYnJhbmNoZXMgY29uZmlndXJlZCBpbiB0aGUgZ2xvYmFsCisjIEJSQU5DSEVTIHZhbHVlLgorIworIyAgIGRhaWx5YnVpbGQucHkgWy1kXSA8Y2hlY2tvdXQ+IDx0YXJnZXQ+CisjCisjIGJ1aWxkcyBvbmUgdmVyc2lvbiwgd2hlcmUgPGNoZWNrb3V0PiBpcyBhbiBTVk4gY2hlY2tvdXQgZGlyZWN0b3J5IG9mIHRoZQorIyBQeXRob24gYnJhbmNoIHRvIGJ1aWxkIGRvY3MgZm9yLCBhbmQgPHRhcmdldD4gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUKKyMgcmVzdWx0IHNob3VsZCBiZSBwbGFjZWQuICBJZiAtZCBpcyBnaXZlbiwgdGhlIGRvY3MgYXJlIGJ1aWx0IGV2ZW4gaWYgdGhlCisjIGJyYW5jaCBpcyBpbiBkZXZlbG9wbWVudCBtb2RlIChpLmUuIHZlcnNpb24gY29udGFpbnMgYSwgYiBvciBjKS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgbm90IHJ1biBmcm9tIHRoZSBjaGVja291dCwgc28gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGhvdyB0aGUKKyMgZGFpbHkgYnVpbGQgaXMgcnVuLCB5b3UgbXVzdCByZXBsYWNlIGl0IG9uIGRpbnNkYWxlLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorIyBleGFtcGxlLCBhZnRlciB0aGUgcmVsZWFzZSBvZiBhIG5ldyBtaW5vciB2ZXJzaW9uLgorIworIyAwMy8yMDEwLCBHZW9yZyBCcmFuZGwKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZ2V0b3B0CisKKworQlVJTERST09UID0gJy9ob21lL2dicmFuZGwvZG9jYnVpbGQnCitXV1dST09UID0gJy9kYXRhL2Z0cC5weXRob24ub3JnL3B1Yi9kb2NzLnB5dGhvbi5vcmcnCisKK0JSQU5DSEVTID0gWworICAgICMgY2hlY2tvdXQsIHRhcmdldCwgaXNkZXYKKyAgICAoQlVJTERST09UICsgJy9weXRob24zMycsIFdXV1JPT1QgKyAnL2RldicsIFRydWUpLAorICAgIChCVUlMRFJPT1QgKyAnL3B5dGhvbjI3JywgV1dXUk9PVCwgRmFsc2UpLAorICAgIChCVUlMRFJPT1QgKyAnL3B5dGhvbjMyJywgV1dXUk9PVCArICcvcHkzaycsIEZhbHNlKSwKK10KKworCitkZWYgYnVpbGRfb25lKGNoZWNrb3V0LCB0YXJnZXQsIGlzZGV2KToKKyAgICBwcmludCAnRG9jIGF1dG9idWlsZCBzdGFydGVkIGluICVzJyAlIGNoZWNrb3V0CisgICAgb3MuY2hkaXIoY2hlY2tvdXQpCisgICAgcHJpbnQgJ1J1bm5pbmcgc3ZuIHVwZGF0ZScKKyAgICBvcy5zeXN0ZW0oJ3N2biB1cGRhdGUnKQorICAgIHByaW50ICdSdW5uaW5nIG1ha2UgYXV0b2J1aWxkJworICAgIGlmIG9zLldFWElUU1RBVFVTKG9zLnN5c3RlbSgKKyAgICAgICAgJ2NkIERvYzsgbWFrZSBhdXRvYnVpbGQtJXMnICUgKGlzZGV2IGFuZCAnZGV2JyBvciAnc3RhYmxlJykpKSA9PSAyOgorICAgICAgICBwcmludCAnKicgKiA4MAorICAgICAgICByZXR1cm4KKyAgICBwcmludCAnQ29weWluZyBIVE1MIGZpbGVzJworICAgIG9zLnN5c3RlbSgnY3AgLWEgRG9jL2J1aWxkL2h0bWwvKiAlcycgJSB0YXJnZXQpCisgICAgcHJpbnQgJ0NvcHlpbmcgZGlzdCBmaWxlcycKKyAgICBvcy5zeXN0ZW0oJ21rZGlyIC1wICVzL2FyY2hpdmVzJyAlIHRhcmdldCkKKyAgICBvcy5zeXN0ZW0oJ2NwIC1hIERvYy9kaXN0LyogJXMvYXJjaGl2ZXMnICUgdGFyZ2V0KQorICAgIHByaW50ICdGaW5pc2hlZCcKKyAgICBwcmludCAnPScgKiA4MAorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAnVXNhZ2U6JworICAgIHByaW50ICcgICVzJyAlIHN5cy5hcmd2WzBdCisgICAgcHJpbnQgJ29yJworICAgIHByaW50ICcgICVzIFstZF0gPGNoZWNrb3V0PiA8dGFyZ2V0PicgJSBzeXMuYXJndlswXQorICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0cnk6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2QnKQorICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6CisgICAgICAgIHVzYWdlKCkKKyAgICBpZiBvcHRzIGFuZCBub3QgYXJnczoKKyAgICAgICAgdXNhZ2UoKQorICAgIGlmIGFyZ3M6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAyOgorICAgICAgICAgICAgdXNhZ2UoKQorICAgICAgICBidWlsZF9vbmUoYXJnc1swXSwgYXJnc1sxXSwgYm9vbChvcHRzKSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgYnJhbmNoIGluIEJSQU5DSEVTOgorICAgICAgICAgICAgYnVpbGRfb25lKCpicmFuY2gpCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5IGIvRG9jL3Rvb2xzL3NwaGlueC1idWlsZC5weQppbmRleCA5NGE4ZGY4Li5hMGJkN2ZhIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5CisrKyBiL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkKQEAgLTMsMTEgKzMsMTUgQEAKICAgICBTcGhpbnggLSBQeXRob24gZG9jdW1lbnRhdGlvbiB0b29sY2hhaW4KICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotICAgIDpjb3B5cmlnaHQ6IDIwMDcgYnkgR2VvcmcgQnJhbmRsLgorICAgIDpjb3B5cmlnaHQ6IDIwMDctMjAxMCBieSBHZW9yZyBCcmFuZGwuCiAgICAgOmxpY2Vuc2U6IFB5dGhvbiBsaWNlbnNlLgogIiIiCiAKIGltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCisjIEdldCByaWQgb2YgVXNlcldhcm5pbmdzIHJlcG9ydGVkIGJ5IHBrZ19yZXNvdXJjZXMuCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgY2F0ZWdvcnk9VXNlcldhcm5pbmcsIG1vZHVsZT0namluamEyJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleGNvbnRlbnQuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKaW5kZXggYmNjNDdlNS4uMzA5NjNjMyAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleGNvbnRlbnQuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCkBAIC03LDEyICs3LDEyIEBACiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5vciA8YSBocmVmPSJ7eyBwYXRodG8oIndoYXRzbmV3L2luZGV4IikgfX0iPmFsbCAiV2hhdCdzIG5ldyIgZG9jdW1lbnRzPC9hPiBzaW5jZSAyLjA8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInR1dG9yaWFsL2luZGV4IikgfX0iPlR1dG9yaWFsPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5zdGFydCBoZXJlPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJ1c2luZy9pbmRleCIpIH19Ij5Vc2luZyBQeXRob248L2E+PGJyLz4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmhvdyB0byB1c2UgUHl0aG9uIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImxpYnJhcnkvaW5kZXgiKSB9fSI+TGlicmFyeSBSZWZlcmVuY2U8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmtlZXAgdGhpcyB1bmRlciB5b3VyIHBpbGxvdzwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygicmVmZXJlbmNlL2luZGV4IikgfX0iPkxhbmd1YWdlIFJlZmVyZW5jZTwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+ZGVzY3JpYmVzIHN5bnRheCBhbmQgbGFuZ3VhZ2UgZWxlbWVudHM8L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInVzaW5nL2luZGV4IikgfX0iPlB5dGhvbiBTZXR1cCBhbmQgVXNhZ2U8L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmhvdyB0byB1c2UgUHl0aG9uIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImhvd3RvL2luZGV4IikgfX0iPlB5dGhvbiBIT1dUT3M8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmluLWRlcHRoIGRvY3VtZW50cyBvbiBzcGVjaWZpYyB0b3BpY3M8L3NwYW4+PC9wPgogICAgIDwvdGQ+PHRkIHdpZHRoPSI1MCUiPgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKaW5kZXggN2RhYTBjNi4uOGQzZmVlZiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCkBAIC0yLDkgKzIsOSBAQAogICAgICAgICAgICAgPHA+PGEgaHJlZj0ie3sgcGF0aHRvKCdkb3dubG9hZCcpIH19Ij5Eb3dubG9hZCB0aGVzZSBkb2N1bWVudHM8L2E+PC9wPgogCSAgICA8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgogCSAgICA8dWw+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMS8iPlB5dGhvbiAzLjEgKHN0YWJsZSk8L2E+PC9saT4KLQkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvcHkzay8iPlB5dGhvbiAzLjIgKGluIGRldmVsb3BtZW50KTwvYT48L2xpPgorCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzIuNi8iPlB5dGhvbiAyLjYgKHN0YWJsZSk8L2E+PC9saT4KKwkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjIvIj5QeXRob24gMy4yIChzdGFibGUpPC9hPjwvbGk+CisJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2LyI+UHl0aG9uIDMuMyAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CiAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+T2xkIHZlcnNpb25zPC9hPjwvbGk+CiAgICAgICAgICAgICA8L3VsPgogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHkgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHkKaW5kZXggY2I5ZTM1Yy4uMDgyODU4ZSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weQpAQCAtNDEsNyArNDEsNyBAQAogICAgIHN1ZmZpeGVzID0gewogICAgICAgICAnUFlfUkVMRUFTRV9MRVZFTF9BTFBIQSc6ICdhJywKICAgICAgICAgJ1BZX1JFTEVBU0VfTEVWRUxfQkVUQSc6ICAnYicsCi0gICAgICAgICdQWV9SRUxFQVNFX0xFVkVMX0dBTU1BJzogJ2MnLAorICAgICAgICAnUFlfUkVMRUFTRV9MRVZFTF9HQU1NQSc6ICdyYycsCiAgICAgICAgIH0KICAgICBpZiBsZXZlbCAhPSAnUFlfUkVMRUFTRV9MRVZFTF9GSU5BTCc6CiAgICAgICAgIHJlbGVhc2UgKz0gc3VmZml4ZXNbbGV2ZWxdICsgc3RyKGludChkWydQWV9SRUxFQVNFX1NFUklBTCddKSkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQppbmRleCBmZjA3YWRiLi40MTUzMTBkIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CkBAIC0zNCw2ICszNCw3IEBACiBmcm9tIHNwaGlueC5sb2NhbGUgaW1wb3J0IHZlcnNpb25sYWJlbHMKIEhUTUxUcmFuc2xhdG9yLnZpc2l0X3ZlcnNpb25tb2RpZmllZCA9IG5ld192aXNpdF92ZXJzaW9ubW9kaWZpZWQKIAorCiAjIFN1cHBvcnQgZm9yIG1hcmtpbmcgdXAgYW5kIGxpbmtpbmcgdG8gYnVncy5weXRob24ub3JnIGlzc3VlcwogCiBkZWYgaXNzdWVfcm9sZSh0eXAsIHJhd3RleHQsIHRleHQsIGxpbmVubywgaW5saW5lciwgb3B0aW9ucz17fSwgY29udGVudD1bXSk6CkBAIC05OSwxOSArMTAwLDggQEAKIGZyb20gZG9jdXRpbHMuaW8gaW1wb3J0IFN0cmluZ091dHB1dAogZnJvbSBkb2N1dGlscy51dGlscyBpbXBvcnQgbmV3X2RvY3VtZW50CiAKLXRyeToKLSAgICBmcm9tIHNwaGlueC5idWlsZGVycyBpbXBvcnQgQnVpbGRlcgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgdXNpbmcgU3BoaW54IDwgMC42LCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgcGFja2FnZSBsYXlvdXQKLSAgICBmcm9tIHNwaGlueC5idWlsZGVyIGltcG9ydCBCdWlsZGVyCi0gICAgIyBtb25rZXktcGF0Y2ggdG9jdHJlZSBkaXJlY3RpdmUgdG8gYWNjZXB0IChhbmQgaWdub3JlKSB0aGUgOm51bWJlcmVkOiBmbGFnCi0gICAgZnJvbSBzcGhpbnguZGlyZWN0aXZlcy5vdGhlciBpbXBvcnQgdG9jdHJlZV9kaXJlY3RpdmUKLSAgICB0b2N0cmVlX2RpcmVjdGl2ZS5vcHRpb25zWydudW1iZXJlZCddID0gdG9jdHJlZV9kaXJlY3RpdmUub3B0aW9uc1snZ2xvYiddCi0KLXRyeToKLSAgICBmcm9tIHNwaGlueC53cml0ZXJzLnRleHQgaW1wb3J0IFRleHRXcml0ZXIKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmcm9tIHNwaGlueC50ZXh0d3JpdGVyIGltcG9ydCBUZXh0V3JpdGVyCitmcm9tIHNwaGlueC5idWlsZGVycyBpbXBvcnQgQnVpbGRlcgorZnJvbSBzcGhpbngud3JpdGVycy50ZXh0IGltcG9ydCBUZXh0V3JpdGVyCiAKIAogY2xhc3MgUHlkb2NUb3BpY3NCdWlsZGVyKEJ1aWxkZXIpOgpAQCAtMTI4LDcgKzExOCw5IEBACiAKICAgICBkZWYgd3JpdGUoc2VsZiwgKmlnbm9yZWQpOgogICAgICAgICB3cml0ZXIgPSBUZXh0V3JpdGVyKHNlbGYpCi0gICAgICAgIGZvciBsYWJlbCBpbiBzZWxmLnN0YXR1c19pdGVyYXRvcihweWRvY190b3BpY19sYWJlbHMsICdidWlsZGluZyB0b3BpY3MuLi4gJyk6CisgICAgICAgIGZvciBsYWJlbCBpbiBzZWxmLnN0YXR1c19pdGVyYXRvcihweWRvY190b3BpY19sYWJlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRpbmcgdG9waWNzLi4uICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg9bGVuKHB5ZG9jX3RvcGljX2xhYmVscykpOgogICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIHNlbGYuZW52LmxhYmVsczoKICAgICAgICAgICAgICAgICBzZWxmLndhcm4oJ2xhYmVsICVyIG5vdCBpbiBkb2N1bWVudGF0aW9uJyAlIGxhYmVsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0xNDEsNyArMTMzLDcgQEAKICAgICAgICAgICAgIHNlbGYudG9waWNzW2xhYmVsXSA9IHdyaXRlci5vdXRwdXQKIAogICAgIGRlZiBmaW5pc2goc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKHBhdGguam9pbihzZWxmLm91dGRpciwgJ3B5ZG9jX3RvcGljcy5weScpLCAndycpCisgICAgICAgIGYgPSBvcGVuKHBhdGguam9pbihzZWxmLm91dGRpciwgJ3RvcGljcy5weScpLCAndycpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoJyMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gJXNcbicgJSBhc2N0aW1lKCkpCiAgICAgICAgICAgICBmLndyaXRlKCd0b3BpY3MgPSAnICsgcGZvcm1hdChzZWxmLnRvcGljcykgKyAnXG4nKQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzCmluZGV4IGFlYjEzODEuLjJiNDc2MjIgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcworKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKQEAgLTI1Nyw2ICsyNTcsMTAgQEAKICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmOyAgICAKIH0KIAordGFibGUuZG9jdXRpbHMgdGQgcC5sYXN0LCB0YWJsZS5kb2N1dGlscyB0aCBwLmxhc3QgeworICAgIG1hcmdpbi1ib3R0b206IDA7Cit9CisKIHRhYmxlLmZpZWxkLWxpc3QgdGQsIHRhYmxlLmZpZWxkLWxpc3QgdGggewogICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OwogfQpAQCAtMzQyLDcgKzM0Niw3IEBACiB9CiAKIC5mb290bm90ZTp0YXJnZXQgIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhCisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTsKIH0KIAogLmltcGwtZGV0YWlsIHsKQEAgLTM2NCw2ICszNjgsNyBAQAogCiBwcmUgewogICAgIG92ZXJmbG93OiBhdXRvOworICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKIH0KIAogdGQubGluZW5vcyBwcmUgewpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CmluZGV4IDNmOTg3YzcuLmE5N2I3NjQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKQEAgLTE2NCwzICsxNjQsMTM5IEBACiB3aGF0c25ldy8yLjUsLDptZW1vcnksOm1lbW9yeToKIHdoYXRzbmV3LzIuNSwsOnN0ZXAsW3N0YXJ0OnN0b3A6c3RlcF0KIHdoYXRzbmV3LzIuNSwsOnN0b3AsW3N0YXJ0OnN0b3A6c3RlcF0KK2Rpc3R1dGlscy9leGFtcGxlcywyNjcsYCxUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBmb29iYXJgYCBwYWNrYWdlLgorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDM5LDpmdW5jLDpmdW5jOmBzdHIob2JqZWN0KWAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCwzOSxgLDpmdW5jOmBzdHIob2JqZWN0KWAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCwzOSxgLGBgc3RyKG9iamVjdClgYAorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDU1LC4uIGRlcHJlY2F0ZWQ6LC4uIGRlcHJlY2F0ZWQ6OiAyLjUKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw2NiwuLiBub3RlOiwuLiBub3RlOjoKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw3Niw6c2FtcCwiOnNhbXA6YG9wZW4oe2ZpbGVuYW1lfSwge21vZGV9KWAiCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsNzYsYCwiOnNhbXA6YG9wZW4oe2ZpbGVuYW1lfSwge21vZGV9KWAiCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsODAsYCxgYCdjJ2BgCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsODAsYCxgVGl0bGUgPFVSTD5gXworZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDgwLGAsYGBjb2RlYGAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw4MCxgLGBUaXRsZSA8VVJMPmBfCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsOTksOmZpbGUsOmZpbGU6YEM6XFxUZW1wXFxteS50bXBgCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsOTksYCw6ZmlsZTpgQzpcXFRlbXBcXG15LnRtcGAKK2RvY3VtZW50aW5nL2Zyb21sYXRleCw5OSxgLCJgYG9wZW4oIiJDOlxUZW1wXG15LnRtcCIiKWBgIgorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDEyOSwuLiBmdW5jdGlvbjosLi4gZnVuY3Rpb246OiBkb19mb28oYmFyKQorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDE0MSwuLiBmdW5jdGlvbjosIi4uIGZ1bmN0aW9uOjogb3BlbihmaWxlbmFtZVssIG1vZGVbLCBidWZmZXJpbmddXSkiCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTUyLC4uIGZ1bmN0aW9uOiwuLiBmdW5jdGlvbjo6IGZvb18qCitkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTUyLDpub2luZGV4LDpub2luZGV4OgorZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDE2MiwuLiBkZXNjcmliZTosLi4gZGVzY3JpYmU6OiBhID09IGIKK2RvY3VtZW50aW5nL2Zyb21sYXRleCwxNjgsLi4gY21kb3B0aW9uOiwuLiBjbWRvcHRpb246OiAtTworZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDE2OCwuLiBlbnZ2YXI6LC4uIGVudnZhcjo6IFBZVEhPTklOU1BFQ1QKK2RvY3VtZW50aW5nL3Jlc3QsMzMsYCxgYHRleHRgYAorZG9jdW1lbnRpbmcvcmVzdCw0Nyw6cm9sZW5hbWUsOnJvbGVuYW1lOmBjb250ZW50YAorZG9jdW1lbnRpbmcvcmVzdCw0NyxgLDpyb2xlbmFtZTpgY29udGVudGAKK2RvY3VtZW50aW5nL3Jlc3QsMTAzLDo6LFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGguIFRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOjoKK2RvY3VtZW50aW5nL3Jlc3QsMTMwLGAsYExpbmsgdGV4dCA8aHR0cDovL3RhcmdldD5gXworZG9jdW1lbnRpbmcvcmVzdCwxODcsLi4gZnVuY3Rpb246LC4uIGZ1bmN0aW9uOjogZm9vKHgpCitkb2N1bWVudGluZy9yZXN0LDE4Nyw6YmFyLDpiYXI6IG5vCitkb2N1bWVudGluZy9yZXN0LDIwOCwuLiBydWJyaWM6LC4uIHJ1YnJpYzo6IEZvb3Rub3RlcworZmFxL3Byb2dyYW1taW5nLCw6cmVkdWNlLCJwcmludCAobGFtYmRhIFJ1LFJvLEl1LElvLElNLFN4LFN5OnJlZHVjZShsYW1iZGEgeCx5OngreSxtYXAobGFtYmRhIHksIgorZmFxL3Byb2dyYW1taW5nLCw6cmVkdWNlLCJTeD1TeCxTeT1TeTpyZWR1Y2UobGFtYmRhIHgseTp4K3ksbWFwKGxhbWJkYSB4LHhjPVJ1LHljPXljLFJ1PVJ1LFJvPVJvLCIKK2ZhcS9wcm9ncmFtbWluZywsOmNociwiPj00LjApIG9yIDErZih4Yyx5Yyx4KngteSp5K3hjLDIuMCp4KnkreWMsay0xLGYpOmYoeGMseWMseCx5LGssZik6Y2hyKCIKK2ZhcS9wcm9ncmFtbWluZywsOjosZm9yIHggaW4gc2VxdWVuY2VbOjotMV06CitmYXEvd2luZG93cywyMjksOkVPRixAc2V0bG9jYWwgZW5hYmxlZXh0ZW5zaW9ucyAmIHB5dGhvbiAteCAlfmYwICUqICYgZ290byA6RU9GCitmYXEvd2luZG93cywzOTMsOlJFRywucHkgOlJFR19TWjogYzpcPHBhdGggdG8gcHl0aG9uPlxweXRob24uZXhlIC11ICVzICVzCitsaWJyYXJ5L2Jpc2VjdCwsOmhpLGFsbCh2YWwgPj0geCBmb3IgdmFsIGluIGFbaTpoaV0pCitsaWJyYXJ5L2Jpc2VjdCwsOmhpLGFsbCh2YWwgPiB4IGZvciB2YWwgaW4gYVtpOmhpXSkKK2xpYnJhcnkvaHR0cC5jbGllbnQsNTIsOnBvcnQsaG9zdDpwb3J0CitsaWJyYXJ5L25udHBsaWIsLDpieXRlcyw6Ynl0ZXMKK2xpYnJhcnkvbm50cGxpYiwsOmxpbmVzLDpsaW5lcworbGlicmFyeS9ubnRwbGliLCw6bGluZXMsIlsneHJlZicsICdmcm9tJywgJzpsaW5lcycsICc6Ynl0ZXMnLCAncmVmZXJlbmNlcycsICdkYXRlJywgJ21lc3NhZ2UtaWQnLCAnc3ViamVjdCddIgorbGlicmFyeS9ubnRwbGliLCw6Ynl0ZXMsIlsneHJlZicsICdmcm9tJywgJzpsaW5lcycsICc6Ynl0ZXMnLCAncmVmZXJlbmNlcycsICdkYXRlJywgJ21lc3NhZ2UtaWQnLCAnc3ViamVjdCddIgorbGlicmFyeS9waWNrbGUsNTY3LDptZW1vcnksImNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoIiI6bWVtb3J5OiIiKSIKK2xpYnJhcnkvcHJvZmlsZSwyOTMsOmxpbmVubywiKHNvcnQgYnkgZmlsZW5hbWU6bGluZW5vKSwiCitsaWJyYXJ5L3NvY2tldCwsOjosIigxMCwgMSwgNiwgJycsICgnMjAwMTo4ODg6MjAwMDpkOjphMicsIDgwLCAwLCAwKSldIgorbGlicmFyeS9zdGR0eXBlcywsOmVuZCxzW3N0YXJ0OmVuZF0KK2xpYnJhcnkvc3RkdHlwZXMsLDplbmQsc1tzdGFydDplbmRdCitsaWNlbnNlLCxgLCogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCitsaWNlbnNlLCxgLCogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKK2xpY2Vuc2UsLGAsImBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyIKK2xpY2Vuc2UsLGAsIlRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIgorcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMsNzA0LGAsJCAgICAgICA/ICAgICAgIGAKK3doYXRzbmV3LzIuNyw3MzUsOlN1bmRheSwnMjAwOTo0OlN1bmRheScKK3doYXRzbmV3LzIuNyw4NjIsOjosImV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MCIKK3doYXRzbmV3LzIuNyw4NjIsOkNvb2tpZSwiZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowIgord2hhdHNuZXcvMi43LCw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQord2hhdHNuZXcvMi43LCw6OiwiUGFyc2VSZXN1bHQoc2NoZW1lPSdodHRwJywgbmV0bG9jPSdbMTA4MDo6ODo4MDA6MjAwQzo0MTdBXScsIgorZG9jdW1lbnRpbmcvbWFya3VwLDMzLC4uIHNlY3Rpb25hdXRob3I6LC4uIHNlY3Rpb25hdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgorZG9jdW1lbnRpbmcvbWFya3VwLDQyLDptb2QsOm1vZDpgcGFycm90YCAtLSBEZWFkIHBhcnJvdCBhY2Nlc3MKK2RvY3VtZW50aW5nL21hcmt1cCw0MixgLDptb2Q6YHBhcnJvdGAgLS0gRGVhZCBwYXJyb3QgYWNjZXNzCitkb2N1bWVudGluZy9tYXJrdXAsNDIsLi4gbW9kdWxlOiwuLiBtb2R1bGU6OiBwYXJyb3QKK2RvY3VtZW50aW5nL21hcmt1cCw0Miw6cGxhdGZvcm0sIjpwbGF0Zm9ybTogVW5peCwgV2luZG93cyIKK2RvY3VtZW50aW5nL21hcmt1cCw0Miw6c3lub3BzaXMsOnN5bm9wc2lzOiBBbmFseXplIGFuZCByZWFuaW1hdGUgZGVhZCBwYXJyb3RzLgorZG9jdW1lbnRpbmcvbWFya3VwLDQyLC4uIG1vZHVsZWF1dGhvcjosLi4gbW9kdWxlYXV0aG9yOjogRXJpYyBDbGVlc2UgPGVyaWNAcHl0aG9uLmludmFsaWQ+Citkb2N1bWVudGluZy9tYXJrdXAsNDIsLi4gbW9kdWxlYXV0aG9yOiwuLiBtb2R1bGVhdXRob3I6OiBKb2huIElkbGUgPGpvaG5AcHl0aG9uLmludmFsaWQ+Citkb2N1bWVudGluZy9tYXJrdXAsODgsOm5vaW5kZXgsOm5vaW5kZXg6Citkb2N1bWVudGluZy9tYXJrdXAsOTUsLi4gZnVuY3Rpb246LC4uIGZ1bmN0aW9uOjogc3BhbShlZ2dzKQorZG9jdW1lbnRpbmcvbWFya3VwLDk1LDpub2luZGV4LDpub2luZGV4OgorZG9jdW1lbnRpbmcvbWFya3VwLDEwMSwuLiBtZXRob2Q6LC4uIG1ldGhvZDo6IEZpbGVJbnB1dC5pbnB1dCguLi4pCitkb2N1bWVudGluZy9tYXJrdXAsMTIxLC4uIGNmdW5jdGlvbjosIi4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR5cGVfR2VuZXJpY0FsbG9jKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBuaXRlbXMpIgorZG9jdW1lbnRpbmcvbWFya3VwLDEzMSwuLiBjbWVtYmVyOiwuLiBjbWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9iYXNlcworZG9jdW1lbnRpbmcvbWFya3VwLDE1MCwuLiBjdmFyOiwuLiBjdmFyOjogUHlPYmplY3QqIFB5Q2xhc3NfVHlwZQorZG9jdW1lbnRpbmcvbWFya3VwLDE3OSwuLiBmdW5jdGlvbjosIi4uIGZ1bmN0aW9uOjogVGltZXIucmVwZWF0KFtyZXBlYXQ9M1ssIG51bWJlcj0xMDAwMDAwXV0pIgorZG9jdW1lbnRpbmcvbWFya3VwLDIwOSwuLiBjbWRvcHRpb246LC4uIGNtZG9wdGlvbjo6IC1tIDxtb2R1bGU+Citkb2N1bWVudGluZy9tYXJrdXAsMjI3LC4uIGRlc2NyaWJlOiwuLiBkZXNjcmliZTo6IG9wY29kZQorZG9jdW1lbnRpbmcvbWFya3VwLDI1NiwuLiBoaWdobGlnaHRsYW5nOiwuLiBoaWdobGlnaHRsYW5nOjogYworZG9jdW1lbnRpbmcvbWFya3VwLDI3NiwuLiBsaXRlcmFsaW5jbHVkZTosLi4gbGl0ZXJhbGluY2x1ZGU6OiBleGFtcGxlLnB5Citkb2N1bWVudGluZy9tYXJrdXAsMjkxLDpyb2xlbmFtZSw6cm9sZW5hbWU6YGNvbnRlbnRgCitkb2N1bWVudGluZy9tYXJrdXAsMjkxLGAsOnJvbGVuYW1lOmBjb250ZW50YAorZG9jdW1lbnRpbmcvbWFya3VwLDI5Niw6cm9sZSw6cm9sZTpgdGl0bGUgPHRhcmdldD5gCitkb2N1bWVudGluZy9tYXJrdXAsMjk2LGAsOnJvbGU6YHRpdGxlIDx0YXJnZXQ+YAorZG9jdW1lbnRpbmcvbWFya3VwLDMwMiw6bWV0aCw6bWV0aDpgflF1ZXVlLlF1ZXVlLmdldGAKK2RvY3VtZW50aW5nL21hcmt1cCwzMDIsYCw6bWV0aDpgflF1ZXVlLlF1ZXVlLmdldGAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTAsOmZ1bmMsOmZ1bmM6YGZpbHRlcmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTAsYCw6ZnVuYzpgZmlsdGVyYAorZG9jdW1lbnRpbmcvbWFya3VwLDM1MCw6ZnVuYyw6ZnVuYzpgZm9vLmZpbHRlcmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTAsYCw6ZnVuYzpgZm9vLmZpbHRlcmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTYsOmZ1bmMsOmZ1bmM6YG9wZW5gCitkb2N1bWVudGluZy9tYXJrdXAsMzU2LGAsOmZ1bmM6YG9wZW5gCitkb2N1bWVudGluZy9tYXJrdXAsMzU2LDpmdW5jLDpmdW5jOmAub3BlbmAKK2RvY3VtZW50aW5nL21hcmt1cCwzNTYsYCw6ZnVuYzpgLm9wZW5gCitkb2N1bWVudGluZy9tYXJrdXAsNDM1LDpmaWxlLC4uLiBpcyBpbnN0YWxsZWQgaW4gOmZpbGU6YC91c3IvbGliL3B5dGhvbjIue3h9L3NpdGUtcGFja2FnZXNgIC4uLgorZG9jdW1lbnRpbmcvbWFya3VwLDQzNSxgLC4uLiBpcyBpbnN0YWxsZWQgaW4gOmZpbGU6YC91c3IvbGliL3B5dGhvbjIue3h9L3NpdGUtcGFja2FnZXNgIC4uLgorZG9jdW1lbnRpbmcvbWFya3VwLDQ1NCw6a2JkLDprYmQ6YEMteCBDLWZgCitkb2N1bWVudGluZy9tYXJrdXAsNDU0LGAsOmtiZDpgQy14IEMtZmAKK2RvY3VtZW50aW5nL21hcmt1cCw0NTQsOmtiZCw6a2JkOmBDb250cm9sLXggQ29udHJvbC1mYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ1NCxgLDprYmQ6YENvbnRyb2wteCBDb250cm9sLWZgCitkb2N1bWVudGluZy9tYXJrdXAsNDY4LDptYWlsaGVhZGVyLDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgCitkb2N1bWVudGluZy9tYXJrdXAsNDY4LGAsOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAKK2RvY3VtZW50aW5nL21hcmt1cCw0NzcsOm1hbnBhZ2UsOm1hbnBhZ2U6YGxzKDEpYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ3NyxgLDptYW5wYWdlOmBscygxKWAKK2RvY3VtZW50aW5nL21hcmt1cCw0OTMsOm1lbnVzZWxlY3Rpb24sOm1lbnVzZWxlY3Rpb246YFN0YXJ0IC0tPiBQcm9ncmFtc2AKK2RvY3VtZW50aW5nL21hcmt1cCw0OTMsYCw6bWVudXNlbGVjdGlvbjpgU3RhcnQgLS0+IFByb2dyYW1zYAorZG9jdW1lbnRpbmcvbWFya3VwLDUwOCxgLGBgY29kZWBgCitkb2N1bWVudGluZy9tYXJrdXAsNTI2LDpmaWxlLDpmaWxlOgorZG9jdW1lbnRpbmcvbWFya3VwLDUyNixgLGBgY29kZWBgCitkb2N1bWVudGluZy9tYXJrdXAsNTYxLDpyZWYsOnJlZjpgbGFiZWwtbmFtZWAKK2RvY3VtZW50aW5nL21hcmt1cCw1NjEsYCw6cmVmOmBsYWJlbC1uYW1lYAorZG9jdW1lbnRpbmcvbWFya3VwLDU2NSw6cmVmLCJJdCByZWZlcnMgdG8gdGhlIHNlY3Rpb24gaXRzZWxmLCBzZWUgOnJlZjpgbXktcmVmZXJlbmNlLWxhYmVsYC4iCitkb2N1bWVudGluZy9tYXJrdXAsNTY1LGAsIkl0IHJlZmVycyB0byB0aGUgc2VjdGlvbiBpdHNlbGYsIHNlZSA6cmVmOmBteS1yZWZlcmVuY2UtbGFiZWxgLiIKK2RvY3VtZW50aW5nL21hcmt1cCw1NzQsOnJlZiw6cmVmOgorZG9jdW1lbnRpbmcvbWFya3VwLDU5NSwuLiBub3RlOiwuLiBub3RlOjoKK2RvY3VtZW50aW5nL21hcmt1cCw2MjIsLi4gdmVyc2lvbmFkZGVkOiwuLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKK2RvY3VtZW50aW5nL21hcmt1cCw2NDcsOjosLi4gaW1wbC1kZXRhaWw6OgorZG9jdW1lbnRpbmcvbWFya3VwLDY0Nyw6OiwuLiBpbXBsLWRldGFpbDo6IFRoaXMgc2hvcnRseSBtZW50aW9ucyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCitkb2N1bWVudGluZy9tYXJrdXAsNjY3LC4uIHNlZWFsc286LC4uIHNlZWFsc286OgorZG9jdW1lbnRpbmcvbWFya3VwLDY2Nyw6bW9kLE1vZHVsZSA6bW9kOmB6aXBmaWxlYAorZG9jdW1lbnRpbmcvbWFya3VwLDY2NyxgLE1vZHVsZSA6bW9kOmB6aXBmaWxlYAorZG9jdW1lbnRpbmcvbWFya3VwLDY2Nyw6bW9kLERvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHppcGZpbGVgIHN0YW5kYXJkIG1vZHVsZS4KK2RvY3VtZW50aW5nL21hcmt1cCw2NjcsYCxEb2N1bWVudGF0aW9uIG9mIHRoZSA6bW9kOmB6aXBmaWxlYCBzdGFuZGFyZCBtb2R1bGUuCitkb2N1bWVudGluZy9tYXJrdXAsNjY3LGAsImBHTlUgdGFyIG1hbnVhbCwgQmFzaWMgVGFyIEZvcm1hdCA8aHR0cDovL2xpbms+YF8iCitkb2N1bWVudGluZy9tYXJrdXAsNjgxLC4uIGNlbnRlcmVkOiwuLiBjZW50ZXJlZDo6Citkb2N1bWVudGluZy9tYXJrdXAsNzI2LC4uIHRvY3RyZWU6LC4uIHRvY3RyZWU6OgorZG9jdW1lbnRpbmcvbWFya3VwLDcyNiw6bWF4ZGVwdGgsOm1heGRlcHRoOiAyCitkb2N1bWVudGluZy9tYXJrdXAsNzQyLC4uIGluZGV4OiwuLiBpbmRleDo6Citkb2N1bWVudGluZy9tYXJrdXAsNzcyLC4uIGluZGV4OiwiLi4gaW5kZXg6OiBCTkYsIGdyYW1tYXIsIHN5bnRheCwgbm90YXRpb24iCitkb2N1bWVudGluZy9tYXJrdXAsODAzLGAsInVuYXJ5bmVnIDo6PSAiIi0iIiBgaW50ZWdlcmAiCitkb2N1bWVudGluZy9tYXJrdXAsODA4LC4uIHByb2R1Y3Rpb25saXN0OiwuLiBwcm9kdWN0aW9ubGlzdDo6Citkb2N1bWVudGluZy9tYXJrdXAsODA4LGAsInRyeTFfc3RtdDogIiJ0cnkiIiAiIjoiIiBgc3VpdGVgIgorZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCI6ICgiImV4Y2VwdCIiIFtgZXhwcmVzc2lvbmAgWyIiLCIiIGB0YXJnZXRgXV0gIiI6IiIgYHN1aXRlYCkrIgorZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCI6IFsiImVsc2UiIiAiIjoiIiBgc3VpdGVgXSIKK2RvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwiOiBbIiJmaW5hbGx5IiIgIiI6IiIgYHN1aXRlYF0iCitkb2N1bWVudGluZy9tYXJrdXAsODA4LGAsInRyeTJfc3RtdDogIiJ0cnkiIiAiIjoiIiBgc3VpdGVgIgorZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCI6ICIiZmluYWxseSIiICIiOiIiIGBzdWl0ZWAiCitsaWJyYXJ5L3VybGxpYjIsNjcsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weQppbmRleCA3Njg0ZjY1Li5mMTVlOTMxYiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weQpAQCAtNDEsMTYgKzQxLDEzIEBACiAKICIiIgogCi1pbXBvcnQgb3MsIHN5cwotaW1wb3J0IGNzdgoraW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBjc3YKK2ltcG9ydCBzeXMKKwogZnJvbSBkb2N1dGlscyBpbXBvcnQgbm9kZXMKLQotdHJ5OgotICAgIGZyb20gc3BoaW54LmJ1aWxkZXJzIGltcG9ydCBCdWlsZGVyCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZnJvbSBzcGhpbnguYnVpbGRlciBpbXBvcnQgQnVpbGRlcgotCitmcm9tIHNwaGlueC5idWlsZGVycyBpbXBvcnQgQnVpbGRlcgogCiBkZXRlY3RfYWxsID0gcmUuY29tcGlsZSh1cicnJwogICAgIDo6KD89W149XSl8ICAgICAgICAgICAgIyB0d28gOjogKGJ1dCBOT1QgOjo9KQpAQCAtNTksOSArNTYsMTAgQEAKICAgICAoPzwhXC4pXC5cLlsgXHRdKlx3KzogICMgLi4gZm9vOiAoYnV0IE5PVCAuLi4gZWxzZTopCiAgICAgJycnLCByZS5VTklDT0RFIHwgcmUuVkVSQk9TRSkuZmluZGl0ZXIKIAorCiBjbGFzcyBSdWxlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCBsaW5lKToKLSAgICAgICAgIkEgcnVsZSBmb3IgaWdub3JpbmcgaXNzdWVzIgorICAgICAgICAiIiJBIHJ1bGUgZm9yIGlnbm9yaW5nIGlzc3VlcyIiIgogICAgICAgICBzZWxmLmRvY25hbWUgPSBkb2NuYW1lICMgZG9jdW1lbnQgdG8gd2hpY2ggdGhpcyBydWxlIGFwcGxpZXMKICAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8gICAjIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHJ1bGUgbWF0Y2hlcyBvbmx5IG5lYXIgdGhhdC4KQEAgLTcwLDkgKzY4LDE1IEBACiAgICAgICAgIHNlbGYubGluZSA9IGxpbmUgICAgICAgIyB0ZXh0IG9mIHRoZSBjb250YWluZXIgZWxlbWVudCAoc2luZ2xlIGxpbmUgb25seSkKIAogCisKK2NsYXNzIGRpYWxlY3QoY3N2LmV4Y2VsKToKKyAgICAiIiJPdXIgZGlhbGVjdDogdXNlcyBvbmx5IGxpbmVmZWVkIGFzIG5ld2xpbmUuIiIiCisgICAgbGluZXRlcm1pbmF0b3IgPSAnXG4nCisKKwogY2xhc3MgQ2hlY2tTdXNwaWNpb3VzTWFya3VwQnVpbGRlcihCdWlsZGVyKToKICAgICAiIiIKLSAgICBDaGVja3MgZm9yIHBvc3NpYmx5IGludmFsaWQgbWFya3VwIHRoYXQgbWF5IGxlYWsgaW50byB0aGUgb3V0cHV0CisgICAgQ2hlY2tzIGZvciBwb3NzaWJseSBpbnZhbGlkIG1hcmt1cCB0aGF0IG1heSBsZWFrIGludG8gdGhlIG91dHB1dC4KICAgICAiIiIKICAgICBuYW1lID0gJ3N1c3BpY2lvdXMnCiAKQEAgLTgxLDcgKzg1LDggQEAKICAgICAgICAgc2VsZi5sb2dfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYub3V0ZGlyLCAnc3VzcGljaW91cy5jc3YnKQogICAgICAgICBvcGVuKHNlbGYubG9nX2ZpbGVfbmFtZSwgJ3cnKS5jbG9zZSgpCiAgICAgICAgICMgbG9hZCBkYXRhYmFzZSBvZiBwcmV2aW91c2x5IGlnbm9yZWQgaXNzdWVzCi0gICAgICAgIHNlbGYubG9hZF9ydWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3N1c3AtaWdub3JlZC5jc3YnKSkKKyAgICAgICAgc2VsZi5sb2FkX3J1bGVzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdXNwLWlnbm9yZWQuY3N2JykpCiAKICAgICBkZWYgZ2V0X291dGRhdGVkX2RvY3Moc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmVudi5mb3VuZF9kb2NzCkBAIC05MCwxNCArOTUsMTEgQEAKICAgICAgICAgcmV0dXJuICcnCiAKICAgICBkZWYgcHJlcGFyZV93cml0aW5nKHNlbGYsIGRvY25hbWVzKToKLSAgICAgICAgIyMjIFBZVEhPTiBQUk9KRUNUIFNQRUNJRklDICMjIwotICAgICAgICBmb3IgbmFtZSBpbiBzZXQoZG9jbmFtZXMpOgotICAgICAgICAgICAgaWYgbmFtZS5zcGxpdCgnLycsIDEpWzBdID09ICdkb2N1bWVudGluZyc6Ci0gICAgICAgICAgICAgICAgZG9jbmFtZXMucmVtb3ZlKG5hbWUpCi0gICAgICAgICMjIyBQWVRIT04gUFJPSkVDVCBTUEVDSUZJQyAjIyMKKyAgICAgICAgcGFzcwogCiAgICAgZGVmIHdyaXRlX2RvYyhzZWxmLCBkb2NuYW1lLCBkb2N0cmVlKToKLSAgICAgICAgc2VsZi5hbnlfaXNzdWUgPSBGYWxzZSAjIHNldCB3aGVuIGFueSBpc3N1ZSBpcyBlbmNvdW50ZXJlZCBpbiB0aGlzIGRvY3VtZW50CisgICAgICAgICMgc2V0IHdoZW4gYW55IGlzc3VlIGlzIGVuY291bnRlcmVkIGluIHRoaXMgZG9jdW1lbnQKKyAgICAgICAgc2VsZi5hbnlfaXNzdWUgPSBGYWxzZQogICAgICAgICBzZWxmLmRvY25hbWUgPSBkb2NuYW1lCiAgICAgICAgIHZpc2l0b3IgPSBTdXNwaWNpb3VzVmlzaXRvcihkb2N0cmVlLCBzZWxmKQogICAgICAgICBkb2N0cmVlLndhbGsodmlzaXRvcikKQEAgLTExMCw4ICsxMTIsNyBAQAogICAgICAgICAgICAgc2VsZi5yZXBvcnRfaXNzdWUobGluZSwgbGluZW5vLCBpc3N1ZSkKIAogICAgIGRlZiBpc19pZ25vcmVkKHNlbGYsIGxpbmUsIGxpbmVubywgaXNzdWUpOgotICAgICAgICAiIiJEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzc3VlIHNob3VsZCBiZSBpZ25vcmVkLgotICAgICAgICAiIiIKKyAgICAgICAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpc3N1ZSBzaG91bGQgYmUgaWdub3JlZC4iIiIKICAgICAgICAgZG9jbmFtZSA9IHNlbGYuZG9jbmFtZQogICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLnJ1bGVzOgogICAgICAgICAgICAgaWYgcnVsZS5kb2NuYW1lICE9IGRvY25hbWU6IGNvbnRpbnVlCkBAIC0xNDQsMTIgKzE0NSwxMSBAQAogCiAgICAgZGVmIHdyaXRlX2xvZ19lbnRyeShzZWxmLCBsaW5lbm8sIGlzc3VlLCB0ZXh0KToKICAgICAgICAgZiA9IG9wZW4oc2VsZi5sb2dfZmlsZV9uYW1lLCAnYWInKQotICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYpCisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGlhbGVjdCkKICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtzZWxmLmRvY25hbWUuZW5jb2RlKCd1dGYtOCcpLAotICAgICAgICAgICAgICAgIGxpbmVubywKLSAgICAgICAgICAgICAgICBpc3N1ZS5lbmNvZGUoJ3V0Zi04JyksCi0gICAgICAgICAgICAgICAgdGV4dC5zdHJpcCgpLmVuY29kZSgndXRmLTgnKV0pCi0gICAgICAgIGRlbCB3cml0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWUuZW5jb2RlKCd1dGYtOCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuc3RyaXAoKS5lbmNvZGUoJ3V0Zi04JyldKQogICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBsb2FkX3J1bGVzKHNlbGYsIGZpbGVuYW1lKToKQEAgLTE2NCw3ICsxNjQsOCBAQAogICAgICAgICBleGNlcHQgSU9FcnJvcjogcmV0dXJuCiAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZikpOgogICAgICAgICAgICAgaWYgbGVuKHJvdykgIT0gNDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cm9uZyBmb3JtYXQgaW4gJXMsIGxpbmUgJWQ6ICVzIiAlIChmaWxlbmFtZSwgaSsxLCByb3cpKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBmb3JtYXQgaW4gJXMsIGxpbmUgJWQ6ICVzIiAlIChmaWxlbmFtZSwgaSsxLCByb3cpKQogICAgICAgICAgICAgZG9jbmFtZSwgbGluZW5vLCBpc3N1ZSwgdGV4dCA9IHJvdwogICAgICAgICAgICAgZG9jbmFtZSA9IGRvY25hbWUuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICBpZiBsaW5lbm86IGxpbmVubyA9IGludChsaW5lbm8pCkBAIC0xNzgsNyArMTc5LDcgQEAKIAogCiBkZWYgZ2V0X2xpbmVubyhub2RlKToKLSAgICAiT2J0YWluIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGZvciBhIG5vZGUiCisgICAgIiIiT2J0YWluIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIGZvciBhIG5vZGUuIiIiCiAgICAgbGluZW5vID0gTm9uZQogICAgIHdoaWxlIGxpbmVubyBpcyBOb25lIGFuZCBub2RlOgogICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQKQEAgLTIwMyw3ICsyMDQsOCBAQAogICAgICIiIgogICAgIHAgPSB0ZXh0LnJmaW5kKCdcbicsIDAsIGluZGV4KSArIDEKICAgICBxID0gdGV4dC5maW5kKCdcbicsIGluZGV4KQotICAgIGlmIHE8MDogcSA9IGxlbih0ZXh0KQorICAgIGlmIHEgPCAwOgorICAgICAgICBxID0gbGVuKHRleHQpCiAgICAgcmV0dXJuIHRleHRbcDpxXQogCiAKQEAgLTIyMiw3ICsyMjQsNiBAQAogICAgICAgICAgICAgc2VsZi5sYXN0bGluZW5vID0gbGluZW5vID0gbWF4KGdldF9saW5lbm8obm9kZSkgb3IgMCwgc2VsZi5sYXN0bGluZW5vKQogICAgICAgICAgICAgc2VlbiA9IHNldCgpICMgZG9uJ3QgcmVwb3J0IHRoZSBzYW1lIGlzc3VlIG1vcmUgdGhhbiBvbmx5IG9uY2UgcGVyIGxpbmUKICAgICAgICAgICAgIGZvciBtYXRjaCBpbiBkZXRlY3RfYWxsKHRleHQpOgotICAgICAgICAgICAgICAgICNpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgICAgICAgICAgICBpc3N1ZSA9IG1hdGNoLmdyb3VwKCkKICAgICAgICAgICAgICAgICBsaW5lID0gZXh0cmFjdF9saW5lKHRleHQsIG1hdGNoLnN0YXJ0KCkpCiAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLCBsaW5lKSBub3QgaW4gc2VlbjoKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdCBiL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAppbmRleCBkNzI5OTU1Li5iZGFhNWQyIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CkBAIC00LDI1ICs0LDI2IEBACiBDbGFzc2VzCiAqKioqKioqCiAKLVB5dGhvbidzIGNsYXNzIG1lY2hhbmlzbSBhZGRzIGNsYXNzZXMgdG8gdGhlIGxhbmd1YWdlIHdpdGggYSBtaW5pbXVtIG9mIG5ldwotc3ludGF4IGFuZCBzZW1hbnRpY3MuICBJdCBpcyBhIG1peHR1cmUgb2YgdGhlIGNsYXNzIG1lY2hhbmlzbXMgZm91bmQgaW4gQysrIGFuZAotTW9kdWxhLTMuICBBcyBpcyB0cnVlIGZvciBtb2R1bGVzLCBjbGFzc2VzIGluIFB5dGhvbiBkbyBub3QgcHV0IGFuIGFic29sdXRlCi1iYXJyaWVyIGJldHdlZW4gZGVmaW5pdGlvbiBhbmQgdXNlciwgYnV0IHJhdGhlciByZWx5IG9uIHRoZSBwb2xpdGVuZXNzIG9mIHRoZQotdXNlciBub3QgdG8gImJyZWFrIGludG8gdGhlIGRlZmluaXRpb24uIiAgVGhlIG1vc3QgaW1wb3J0YW50IGZlYXR1cmVzIG9mIGNsYXNzZXMKLWFyZSByZXRhaW5lZCB3aXRoIGZ1bGwgcG93ZXIsIGhvd2V2ZXI6IHRoZSBjbGFzcyBpbmhlcml0YW5jZSBtZWNoYW5pc20gYWxsb3dzCitDb21wYXJlZCB3aXRoIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcywgUHl0aG9uJ3MgY2xhc3MgbWVjaGFuaXNtIGFkZHMgY2xhc3Nlcword2l0aCBhIG1pbmltdW0gb2YgbmV3IHN5bnRheCBhbmQgc2VtYW50aWNzLiAgSXQgaXMgYSBtaXh0dXJlIG9mIHRoZSBjbGFzcworbWVjaGFuaXNtcyBmb3VuZCBpbiBDKysgYW5kIE1vZHVsYS0zLiAgUHl0aG9uIGNsYXNzZXMgcHJvdmlkZSBhbGwgdGhlIHN0YW5kYXJkCitmZWF0dXJlcyBvZiBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmc6IHRoZSBjbGFzcyBpbmhlcml0YW5jZSBtZWNoYW5pc20gYWxsb3dzCiBtdWx0aXBsZSBiYXNlIGNsYXNzZXMsIGEgZGVyaXZlZCBjbGFzcyBjYW4gb3ZlcnJpZGUgYW55IG1ldGhvZHMgb2YgaXRzIGJhc2UKIGNsYXNzIG9yIGNsYXNzZXMsIGFuZCBhIG1ldGhvZCBjYW4gY2FsbCB0aGUgbWV0aG9kIG9mIGEgYmFzZSBjbGFzcyB3aXRoIHRoZSBzYW1lCi1uYW1lLiAgT2JqZWN0cyBjYW4gY29udGFpbiBhbiBhcmJpdHJhcnkgYW1vdW50IG9mIGRhdGEuCituYW1lLiAgT2JqZWN0cyBjYW4gY29udGFpbiBhcmJpdHJhcnkgYW1vdW50cyBhbmQga2luZHMgb2YgZGF0YS4gIEFzIGlzIHRydWUgZm9yCittb2R1bGVzLCBjbGFzc2VzIHBhcnRha2Ugb2YgdGhlIGR5bmFtaWMgbmF0dXJlIG9mIFB5dGhvbjogdGhleSBhcmUgY3JlYXRlZCBhdAorcnVudGltZSwgYW5kIGNhbiBiZSBtb2RpZmllZCBmdXJ0aGVyIGFmdGVyIGNyZWF0aW9uLgogCi1JbiBDKysgdGVybWlub2xvZ3ksIGFsbCBjbGFzcyBtZW1iZXJzIChpbmNsdWRpbmcgdGhlIGRhdGEgbWVtYmVycykgYXJlICpwdWJsaWMqLAotYW5kIGFsbCBtZW1iZXIgZnVuY3Rpb25zIGFyZSAqdmlydHVhbCouICBBcyBpbiBNb2R1bGEtMywgdGhlcmUgYXJlIG5vIHNob3J0aGFuZHMKLWZvciByZWZlcmVuY2luZyB0aGUgb2JqZWN0J3MgbWVtYmVycyBmcm9tIGl0cyBtZXRob2RzOiB0aGUgbWV0aG9kIGZ1bmN0aW9uIGlzCi1kZWNsYXJlZCB3aXRoIGFuIGV4cGxpY2l0IGZpcnN0IGFyZ3VtZW50IHJlcHJlc2VudGluZyB0aGUgb2JqZWN0LCB3aGljaCBpcwotcHJvdmlkZWQgaW1wbGljaXRseSBieSB0aGUgY2FsbC4gIEFzIGluIFNtYWxsdGFsaywgY2xhc3NlcyB0aGVtc2VsdmVzIGFyZQotb2JqZWN0cy4gIFRoaXMgcHJvdmlkZXMgc2VtYW50aWNzIGZvciBpbXBvcnRpbmcgYW5kIHJlbmFtaW5nLiAgVW5saWtlIEMrKyBhbmQKLU1vZHVsYS0zLCBidWlsdC1pbiB0eXBlcyBjYW4gYmUgdXNlZCBhcyBiYXNlIGNsYXNzZXMgZm9yIGV4dGVuc2lvbiBieSB0aGUgdXNlci4KLUFsc28sIGxpa2UgaW4gQysrLCBtb3N0IGJ1aWx0LWluIG9wZXJhdG9ycyB3aXRoIHNwZWNpYWwgc3ludGF4IChhcml0aG1ldGljCi1vcGVyYXRvcnMsIHN1YnNjcmlwdGluZyBldGMuKSBjYW4gYmUgcmVkZWZpbmVkIGZvciBjbGFzcyBpbnN0YW5jZXMuCitJbiBDKysgdGVybWlub2xvZ3ksIG5vcm1hbGx5IGNsYXNzIG1lbWJlcnMgKGluY2x1ZGluZyB0aGUgZGF0YSBtZW1iZXJzKSBhcmUKKypwdWJsaWMqIChleGNlcHQgc2VlIGJlbG93IDpyZWY6YHR1dC1wcml2YXRlYCksIGFuZCBhbGwgbWVtYmVyIGZ1bmN0aW9ucyBhcmUKKyp2aXJ0dWFsKi4gIEFzIGluIE1vZHVsYS0zLCB0aGVyZSBhcmUgbm8gc2hvcnRoYW5kcyBmb3IgcmVmZXJlbmNpbmcgdGhlIG9iamVjdCdzCittZW1iZXJzIGZyb20gaXRzIG1ldGhvZHM6IHRoZSBtZXRob2QgZnVuY3Rpb24gaXMgZGVjbGFyZWQgd2l0aCBhbiBleHBsaWNpdCBmaXJzdAorYXJndW1lbnQgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QsIHdoaWNoIGlzIHByb3ZpZGVkIGltcGxpY2l0bHkgYnkgdGhlIGNhbGwuICBBcworaW4gU21hbGx0YWxrLCBjbGFzc2VzIHRoZW1zZWx2ZXMgYXJlIG9iamVjdHMuICBUaGlzIHByb3ZpZGVzIHNlbWFudGljcyBmb3IKK2ltcG9ydGluZyBhbmQgcmVuYW1pbmcuICBVbmxpa2UgQysrIGFuZCBNb2R1bGEtMywgYnVpbHQtaW4gdHlwZXMgY2FuIGJlIHVzZWQgYXMKK2Jhc2UgY2xhc3NlcyBmb3IgZXh0ZW5zaW9uIGJ5IHRoZSB1c2VyLiAgQWxzbywgbGlrZSBpbiBDKyssIG1vc3QgYnVpbHQtaW4KK29wZXJhdG9ycyB3aXRoIHNwZWNpYWwgc3ludGF4IChhcml0aG1ldGljIG9wZXJhdG9ycywgc3Vic2NyaXB0aW5nIGV0Yy4pIGNhbiBiZQorcmVkZWZpbmVkIGZvciBjbGFzcyBpbnN0YW5jZXMuCiAKIChMYWNraW5nIHVuaXZlcnNhbGx5IGFjY2VwdGVkIHRlcm1pbm9sb2d5IHRvIHRhbGsgYWJvdXQgY2xhc3NlcywgSSB3aWxsIG1ha2UKIG9jY2FzaW9uYWwgdXNlIG9mIFNtYWxsdGFsayBhbmQgQysrIHRlcm1zLiAgSSB3b3VsZCB1c2UgTW9kdWxhLTMgdGVybXMsIHNpbmNlCkBAIC01MzcsNyArNTM4LDcgQEAKID09PT09PT09PT09PT09PT09CiAKICJQcml2YXRlIiBpbnN0YW5jZSB2YXJpYWJsZXMgdGhhdCBjYW5ub3QgYmUgYWNjZXNzZWQgZXhjZXB0IGZyb20gaW5zaWRlIGFuCi1vYmplY3QsIGRvbid0IGV4aXN0IGluIFB5dGhvbi4gIEhvd2V2ZXIsIHRoZXJlIGlzIGEgY29udmVudGlvbiB0aGF0IGlzIGZvbGxvd2VkCitvYmplY3QgZG9uJ3QgZXhpc3QgaW4gUHl0aG9uLiAgSG93ZXZlciwgdGhlcmUgaXMgYSBjb252ZW50aW9uIHRoYXQgaXMgZm9sbG93ZWQKIGJ5IG1vc3QgUHl0aG9uIGNvZGU6IGEgbmFtZSBwcmVmaXhlZCB3aXRoIGFuIHVuZGVyc2NvcmUgKGUuZy4gYGBfc3BhbWBgKSBzaG91bGQKIGJlIHRyZWF0ZWQgYXMgYSBub24tcHVibGljIHBhcnQgb2YgdGhlIEFQSSAod2hldGhlciBpdCBpcyBhIGZ1bmN0aW9uLCBhIG1ldGhvZAogb3IgYSBkYXRhIG1lbWJlcikuICBJdCBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIHN1YmplY3QKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CmluZGV4IGE5MjQ3Y2QuLmRlOTNiZWIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdApAQCAtNDI5LDExICs0MjksMTIgQEAKICAgIGRlZiBjaGVlc2VzaG9wKGtpbmQsICphcmd1bWVudHMsICoqa2V5d29yZHMpOgogICAgICAgIHByaW50ICItLSBEbyB5b3UgaGF2ZSBhbnkiLCBraW5kLCAiPyIKICAgICAgICBwcmludCAiLS0gSSdtIHNvcnJ5LCB3ZSdyZSBhbGwgb3V0IG9mIiwga2luZAotICAgICAgIGZvciBhcmcgaW4gYXJndW1lbnRzOiBwcmludCBhcmcKKyAgICAgICBmb3IgYXJnIGluIGFyZ3VtZW50czoKKyAgICAgICAgICAgcHJpbnQgYXJnCiAgICAgICAgcHJpbnQgIi0iICogNDAKLSAgICAgICBrZXlzID0ga2V5d29yZHMua2V5cygpCi0gICAgICAga2V5cy5zb3J0KCkKLSAgICAgICBmb3Iga3cgaW4ga2V5czogcHJpbnQga3csICI6Iiwga2V5d29yZHNba3ddCisgICAgICAga2V5cyA9IHNvcnRlZChrZXl3b3Jkcy5rZXlzKCkpCisgICAgICAgZm9yIGt3IGluIGtleXM6CisgICAgICAgICAgIHByaW50IGt3LCAiOiIsIGtleXdvcmRzW2t3XQogCiBJdCBjb3VsZCBiZSBjYWxsZWQgbGlrZSB0aGlzOjoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdCBiL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKaW5kZXggZGZjMmIzMy4uMjI2ZWFkZCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CkBAIC0xNzAsNyArMTcwLDggQEAKIGBgZmlsdGVyKGZ1bmN0aW9uLCBzZXF1ZW5jZSlgYCByZXR1cm5zIGEgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aG9zZSBpdGVtcyBmcm9tCiB0aGUgc2VxdWVuY2UgZm9yIHdoaWNoIGBgZnVuY3Rpb24oaXRlbSlgYCBpcyB0cnVlLiBJZiAqc2VxdWVuY2UqIGlzIGEKIDpjbGFzczpgc3RyaW5nYCBvciA6Y2xhc3M6YHR1cGxlYCwgdGhlIHJlc3VsdCB3aWxsIGJlIG9mIHRoZSBzYW1lIHR5cGU7Ci1vdGhlcndpc2UsIGl0IGlzIGFsd2F5cyBhIDpjbGFzczpgbGlzdGAuIEZvciBleGFtcGxlLCB0byBjb21wdXRlIHNvbWUgcHJpbWVzOjoKK290aGVyd2lzZSwgaXQgaXMgYWx3YXlzIGEgOmNsYXNzOmBsaXN0YC4gRm9yIGV4YW1wbGUsIHRvIGNvbXB1dGUgcHJpbWVzIHVwCit0byAyNTo6CiAKICAgID4+PiBkZWYgZih4KTogcmV0dXJuIHggJSAyICE9IDAgYW5kIHggJSAzICE9IDAKICAgIC4uLgpAQCAtNDgxLDggKzQ4Miw4IEBACiAKIFRoZSA6bWV0aDpga2V5c2AgbWV0aG9kIG9mIGEgZGljdGlvbmFyeSBvYmplY3QgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRoZSBrZXlzCiB1c2VkIGluIHRoZSBkaWN0aW9uYXJ5LCBpbiBhcmJpdHJhcnkgb3JkZXIgKGlmIHlvdSB3YW50IGl0IHNvcnRlZCwganVzdCBhcHBseQotdGhlIDptZXRoOmBzb3J0YCBtZXRob2QgdG8gdGhlIGxpc3Qgb2Yga2V5cykuICBUbyBjaGVjayB3aGV0aGVyIGEgc2luZ2xlIGtleSBpcwotaW4gdGhlIGRpY3Rpb25hcnksIHVzZSB0aGUgOmtleXdvcmQ6YGluYCBrZXl3b3JkLgordGhlIDpmdW5jOmBzb3J0ZWRgIGZ1bmN0aW9uIHRvIGl0KS4gIFRvIGNoZWNrIHdoZXRoZXIgYSBzaW5nbGUga2V5IGlzIGluIHRoZQorZGljdGlvbmFyeSwgdXNlIHRoZSA6a2V5d29yZDpgaW5gIGtleXdvcmQuCiAKIEhlcmUgaXMgYSBzbWFsbCBleGFtcGxlIHVzaW5nIGEgZGljdGlvbmFyeTo6CiAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0IGIvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKaW5kZXggYTAwNjlmNS4uMTM1MTk1NyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QKQEAgLTIxOCwxMSArMjE4LDkgQEAKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgTmFtZUVycm9yOiBIaVRoZXJlCiAKLVRoZSBhcmd1bWVudCB0byA6a2V5d29yZDpgcmFpc2VgIGlzIGFuIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZSB0byBiZQotcmFpc2VkLiAgVGhlcmUgaXMgYSBkZXByZWNhdGVkIGFsdGVybmF0ZSBzeW50YXggdGhhdCBzZXBhcmF0ZXMgY2xhc3MgYW5kCi1jb25zdHJ1Y3RvciBhcmd1bWVudHM7IHRoZSBhYm92ZSBjb3VsZCBiZSB3cml0dGVuIGFzIGBgcmFpc2UgTmFtZUVycm9yLAotJ0hpVGhlcmUnYGAuICBTaW5jZSBpdCBvbmNlIHdhcyB0aGUgb25seSBvbmUgYXZhaWxhYmxlLCB0aGUgbGF0dGVyIGZvcm0gaXMKLXByZXZhbGVudCBpbiBvbGRlciBjb2RlLgorVGhlIHNvbGUgYXJndW1lbnQgdG8gOmtleXdvcmQ6YHJhaXNlYCBpbmRpY2F0ZXMgdGhlIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQuCitUaGlzIG11c3QgYmUgZWl0aGVyIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBvciBhbiBleGNlcHRpb24gY2xhc3MgKGEgY2xhc3MgdGhhdAorZGVyaXZlcyBmcm9tIDpjbGFzczpgRXhjZXB0aW9uYCkuCiAKIElmIHlvdSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ1dCBkb24ndCBpbnRlbmQgdG8KIGhhbmRsZSBpdCwgYSBzaW1wbGVyIGZvcm0gb2YgdGhlIDprZXl3b3JkOmByYWlzZWAgc3RhdGVtZW50IGFsbG93cyB5b3UgdG8KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdCBiL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdAppbmRleCAyOWM3YTY2Li40Yjk1NTcwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0CkBAIC00OCw3NCArNDgsODIgQEAKIAogICAgMC4wMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExLi4uCiAKLVN0b3AgYXQgYW55IGZpbml0ZSBudW1iZXIgb2YgYml0cywgYW5kIHlvdSBnZXQgYW4gYXBwcm94aW1hdGlvbi4gIFRoaXMgaXMgd2h5Ci15b3Ugc2VlIHRoaW5ncyBsaWtlOjoKK1N0b3AgYXQgYW55IGZpbml0ZSBudW1iZXIgb2YgYml0cywgYW5kIHlvdSBnZXQgYW4gYXBwcm94aW1hdGlvbi4KIAotICAgPj4+IDAuMQotICAgMC4xMDAwMDAwMDAwMDAwMDAwMQorT24gYSB0eXBpY2FsIG1hY2hpbmUgcnVubmluZyBQeXRob24sIHRoZXJlIGFyZSA1MyBiaXRzIG9mIHByZWNpc2lvbiBhdmFpbGFibGUKK2ZvciBhIFB5dGhvbiBmbG9hdCwgc28gdGhlIHZhbHVlIHN0b3JlZCBpbnRlcm5hbGx5IHdoZW4geW91IGVudGVyIHRoZSBkZWNpbWFsCitudW1iZXIgYGAwLjFgYCBpcyB0aGUgYmluYXJ5IGZyYWN0aW9uIDo6CiAKLU9uIG1vc3QgbWFjaGluZXMgdG9kYXksIHRoYXQgaXMgd2hhdCB5b3UnbGwgc2VlIGlmIHlvdSBlbnRlciAwLjEgYXQgYSBQeXRob24KLXByb21wdC4gIFlvdSBtYXkgbm90LCB0aG91Z2gsIGJlY2F1c2UgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgYnkgdGhlIGhhcmR3YXJlIHRvCi1zdG9yZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMgY2FuIHZhcnkgYWNyb3NzIG1hY2hpbmVzLCBhbmQgUHl0aG9uIG9ubHkgcHJpbnRzIGEKLWRlY2ltYWwgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJ1ZSBkZWNpbWFsIHZhbHVlIG9mIHRoZSBiaW5hcnkgYXBwcm94aW1hdGlvbgotc3RvcmVkIGJ5IHRoZSBtYWNoaW5lLiAgT24gbW9zdCBtYWNoaW5lcywgaWYgUHl0aG9uIHdlcmUgdG8gcHJpbnQgdGhlIHRydWUKLWRlY2ltYWwgdmFsdWUgb2YgdGhlIGJpbmFyeSBhcHByb3hpbWF0aW9uIHN0b3JlZCBmb3IgMC4xLCBpdCB3b3VsZCBoYXZlIHRvCi1kaXNwbGF5IDo6CisgICAwLjAwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDEwCisKK3doaWNoIGlzIGNsb3NlIHRvLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgdG8sIDEvMTAuCisKK0l0J3MgZWFzeSB0byBmb3JnZXQgdGhhdCB0aGUgc3RvcmVkIHZhbHVlIGlzIGFuIGFwcHJveGltYXRpb24gdG8gdGhlIG9yaWdpbmFsCitkZWNpbWFsIGZyYWN0aW9uLCBiZWNhdXNlIG9mIHRoZSB3YXkgdGhhdCBmbG9hdHMgYXJlIGRpc3BsYXllZCBhdCB0aGUKK2ludGVycHJldGVyIHByb21wdC4gIFB5dGhvbiBvbmx5IHByaW50cyBhIGRlY2ltYWwgYXBwcm94aW1hdGlvbiB0byB0aGUgdHJ1ZQorZGVjaW1hbCB2YWx1ZSBvZiB0aGUgYmluYXJ5IGFwcHJveGltYXRpb24gc3RvcmVkIGJ5IHRoZSBtYWNoaW5lLiAgSWYgUHl0aG9uCit3ZXJlIHRvIHByaW50IHRoZSB0cnVlIGRlY2ltYWwgdmFsdWUgb2YgdGhlIGJpbmFyeSBhcHByb3hpbWF0aW9uIHN0b3JlZCBmb3IKKzAuMSwgaXQgd291bGQgaGF2ZSB0byBkaXNwbGF5IDo6CiAKICAgID4+PiAwLjEKICAgIDAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNQogCi1pbnN0ZWFkISAgVGhlIFB5dGhvbiBwcm9tcHQgdXNlcyB0aGUgYnVpbHQtaW4gOmZ1bmM6YHJlcHJgIGZ1bmN0aW9uIHRvIG9idGFpbiBhCi1zdHJpbmcgdmVyc2lvbiBvZiBldmVyeXRoaW5nIGl0IGRpc3BsYXlzLiAgRm9yIGZsb2F0cywgYGByZXByKGZsb2F0KWBgIHJvdW5kcwotdGhlIHRydWUgZGVjaW1hbCB2YWx1ZSB0byAxNyBzaWduaWZpY2FudCBkaWdpdHMsIGdpdmluZyA6OgorVGhhdCBpcyBtb3JlIGRpZ2l0cyB0aGFuIG1vc3QgcGVvcGxlIGZpbmQgdXNlZnVsLCBzbyBQeXRob24ga2VlcHMgdGhlIG51bWJlcgorb2YgZGlnaXRzIG1hbmFnZWFibGUgYnkgZGlzcGxheWluZyBhIHJvdW5kZWQgdmFsdWUgaW5zdGVhZCA6OgogCi0gICAwLjEwMDAwMDAwMDAwMDAwMDAxCi0KLWBgcmVwcihmbG9hdClgYCBwcm9kdWNlcyAxNyBzaWduaWZpY2FudCBkaWdpdHMgYmVjYXVzZSBpdCB0dXJucyBvdXQgdGhhdCdzCi1lbm91Z2ggKG9uIG1vc3QgbWFjaGluZXMpIHNvIHRoYXQgYGBldmFsKHJlcHIoeCkpID09IHhgYCBleGFjdGx5IGZvciBhbGwgZmluaXRlCi1mbG9hdHMgKngqLCBidXQgcm91bmRpbmcgdG8gMTYgZGlnaXRzIGlzIG5vdCBlbm91Z2ggdG8gbWFrZSB0aGF0IHRydWUuCi0KLU5vdGUgdGhhdCB0aGlzIGlzIGluIHRoZSB2ZXJ5IG5hdHVyZSBvZiBiaW5hcnkgZmxvYXRpbmctcG9pbnQ6IHRoaXMgaXMgbm90IGEgYnVnCi1pbiBQeXRob24sIGFuZCBpdCBpcyBub3QgYSBidWcgaW4geW91ciBjb2RlIGVpdGhlci4gIFlvdSdsbCBzZWUgdGhlIHNhbWUga2luZCBvZgotdGhpbmcgaW4gYWxsIGxhbmd1YWdlcyB0aGF0IHN1cHBvcnQgeW91ciBoYXJkd2FyZSdzIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMKLShhbHRob3VnaCBzb21lIGxhbmd1YWdlcyBtYXkgbm90ICpkaXNwbGF5KiB0aGUgZGlmZmVyZW5jZSBieSBkZWZhdWx0LCBvciBpbiBhbGwKLW91dHB1dCBtb2RlcykuCi0KLVB5dGhvbidzIGJ1aWx0LWluIDpmdW5jOmBzdHJgIGZ1bmN0aW9uIHByb2R1Y2VzIG9ubHkgMTIgc2lnbmlmaWNhbnQgZGlnaXRzLCBhbmQKLXlvdSBtYXkgd2lzaCB0byB1c2UgdGhhdCBpbnN0ZWFkLiAgSXQncyB1bnVzdWFsIGZvciBgYGV2YWwoc3RyKHgpKWBgIHRvCi1yZXByb2R1Y2UgKngqLCBidXQgdGhlIG91dHB1dCBtYXkgYmUgbW9yZSBwbGVhc2FudCB0byBsb29rIGF0OjoKLQotICAgPj4+IHByaW50IHN0cigwLjEpCisgICA+Pj4gMC4xCiAgICAwLjEKIAogSXQncyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IHRoaXMgaXMsIGluIGEgcmVhbCBzZW5zZSwgYW4gaWxsdXNpb246IHRoZSB2YWx1ZQogaW4gdGhlIG1hY2hpbmUgaXMgbm90IGV4YWN0bHkgMS8xMCwgeW91J3JlIHNpbXBseSByb3VuZGluZyB0aGUgKmRpc3BsYXkqIG9mIHRoZQotdHJ1ZSBtYWNoaW5lIHZhbHVlLgordHJ1ZSBtYWNoaW5lIHZhbHVlLiAgVGhpcyBmYWN0IGJlY29tZXMgYXBwYXJlbnQgYXMgc29vbiBhcyB5b3UgdHJ5IHRvIGRvCithcml0aG1ldGljIHdpdGggdGhlc2UgdmFsdWVzIDo6CiAKLU90aGVyIHN1cnByaXNlcyBmb2xsb3cgZnJvbSB0aGlzIG9uZS4gIEZvciBleGFtcGxlLCBhZnRlciBzZWVpbmcgOjoKKyAgID4+PiAwLjEgKyAwLjIKKyAgIDAuMzAwMDAwMDAwMDAwMDAwMDQKIAotICAgPj4+IDAuMQotICAgMC4xMDAwMDAwMDAwMDAwMDAwMQorTm90ZSB0aGF0IHRoaXMgaXMgaW4gdGhlIHZlcnkgbmF0dXJlIG9mIGJpbmFyeSBmbG9hdGluZy1wb2ludDogdGhpcyBpcyBub3QgYQorYnVnIGluIFB5dGhvbiwgYW5kIGl0IGlzIG5vdCBhIGJ1ZyBpbiB5b3VyIGNvZGUgZWl0aGVyLiAgWW91J2xsIHNlZSB0aGUgc2FtZQora2luZCBvZiB0aGluZyBpbiBhbGwgbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCB5b3VyIGhhcmR3YXJlJ3MgZmxvYXRpbmctcG9pbnQKK2FyaXRobWV0aWMgKGFsdGhvdWdoIHNvbWUgbGFuZ3VhZ2VzIG1heSBub3QgKmRpc3BsYXkqIHRoZSBkaWZmZXJlbmNlIGJ5CitkZWZhdWx0LCBvciBpbiBhbGwgb3V0cHV0IG1vZGVzKS4KIAoteW91IG1heSBiZSB0ZW1wdGVkIHRvIHVzZSB0aGUgOmZ1bmM6YHJvdW5kYCBmdW5jdGlvbiB0byBjaG9wIGl0IGJhY2sgdG8gdGhlCi1zaW5nbGUgZGlnaXQgeW91IGV4cGVjdC4gIEJ1dCB0aGF0IG1ha2VzIG5vIGRpZmZlcmVuY2U6OgorT3RoZXIgc3VycHJpc2VzIGZvbGxvdyBmcm9tIHRoaXMgb25lLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB0cnkgdG8gcm91bmQgdGhlCit2YWx1ZSAyLjY3NSB0byB0d28gZGVjaW1hbCBwbGFjZXMsIHlvdSBnZXQgdGhpcyA6OgogCi0gICA+Pj4gcm91bmQoMC4xLCAxKQotICAgMC4xMDAwMDAwMDAwMDAwMDAwMQorICAgPj4+IHJvdW5kKDIuNjc1LCAyKQorICAgMi42NwogCi1UaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBiaW5hcnkgZmxvYXRpbmctcG9pbnQgdmFsdWUgc3RvcmVkIGZvciAiMC4xIiB3YXMgYWxyZWFkeQotdGhlIGJlc3QgcG9zc2libGUgYmluYXJ5IGFwcHJveGltYXRpb24gdG8gMS8xMCwgc28gdHJ5aW5nIHRvIHJvdW5kIGl0IGFnYWluCi1jYW4ndCBtYWtlIGl0IGJldHRlcjogIGl0IHdhcyBhbHJlYWR5IGFzIGdvb2QgYXMgaXQgZ2V0cy4KK1RoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYnVpbHQtaW4gOmZ1bmM6YHJvdW5kYCBmdW5jdGlvbiBzYXlzIHRoYXQgaXQgcm91bmRzCit0byB0aGUgbmVhcmVzdCB2YWx1ZSwgcm91bmRpbmcgdGllcyBhd2F5IGZyb20gemVyby4gIFNpbmNlIHRoZSBkZWNpbWFsIGZyYWN0aW9uCisyLjY3NSBpcyBleGFjdGx5IGhhbGZ3YXkgYmV0d2VlbiAyLjY3IGFuZCAyLjY4LCB5b3UgbWlnaHQgZXhwZWN0IHRoZSByZXN1bHQKK2hlcmUgdG8gYmUgKGEgYmluYXJ5IGFwcHJveGltYXRpb24gdG8pIDIuNjguICBJdCdzIG5vdCwgYmVjYXVzZSB3aGVuIHRoZQorZGVjaW1hbCBzdHJpbmcgYGAyLjY3NWBgIGlzIGNvbnZlcnRlZCB0byBhIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGl0J3MKK2FnYWluIHJlcGxhY2VkIHdpdGggYSBiaW5hcnkgYXBwcm94aW1hdGlvbiwgd2hvc2UgZXhhY3QgdmFsdWUgaXMgOjoKIAotQW5vdGhlciBjb25zZXF1ZW5jZSBpcyB0aGF0IHNpbmNlIDAuMSBpcyBub3QgZXhhY3RseSAxLzEwLCBzdW1taW5nIHRlbiB2YWx1ZXMgb2YKLTAuMSBtYXkgbm90IHlpZWxkIGV4YWN0bHkgMS4wLCBlaXRoZXI6OgorICAgMi42NzQ5OTk5OTk5OTk5OTk4MjIzNjQzMTYwNTk5NzQ5NTM1MzIyMTg5MzMxMDU0Njg3NQorCitTaW5jZSB0aGlzIGFwcHJveGltYXRpb24gaXMgc2xpZ2h0bHkgY2xvc2VyIHRvIDIuNjcgdGhhbiB0byAyLjY4LCBpdCdzIHJvdW5kZWQKK2Rvd24uCisKK0lmIHlvdSdyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB5b3UgY2FyZSB3aGljaCB3YXkgeW91ciBkZWNpbWFsIGhhbGZ3YXktY2FzZXMKK2FyZSByb3VuZGVkLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHRoZSA6bW9kOmBkZWNpbWFsYCBtb2R1bGUuCitJbmNpZGVudGFsbHksIHRoZSA6bW9kOmBkZWNpbWFsYCBtb2R1bGUgYWxzbyBwcm92aWRlcyBhIG5pY2Ugd2F5IHRvICJzZWUiIHRoZQorZXhhY3QgdmFsdWUgdGhhdCdzIHN0b3JlZCBpbiBhbnkgcGFydGljdWxhciBQeXRob24gZmxvYXQgOjoKKworICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorICAgPj4+IERlY2ltYWwoMi42NzUpCisgICBEZWNpbWFsKCcyLjY3NDk5OTk5OTk5OTk5OTgyMjM2NDMxNjA1OTk3NDk1MzUzMjIxODkzMzEwNTQ2ODc1JykKKworQW5vdGhlciBjb25zZXF1ZW5jZSBpcyB0aGF0IHNpbmNlIDAuMSBpcyBub3QgZXhhY3RseSAxLzEwLCBzdW1taW5nIHRlbiB2YWx1ZXMKK29mIDAuMSBtYXkgbm90IHlpZWxkIGV4YWN0bHkgMS4wLCBlaXRoZXI6OgogCiAgICA+Pj4gc3VtID0gMC4wCiAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgLi4uICAgICBzdW0gKz0gMC4xCiAgICAuLi4KICAgID4+PiBzdW0KLSAgIDAuOTk5OTk5OTk5OTk5OTk5ODkKKyAgIDAuOTk5OTk5OTk5OTk5OTk5OQogCiBCaW5hcnkgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBob2xkcyBtYW55IHN1cnByaXNlcyBsaWtlIHRoaXMuICBUaGUgcHJvYmxlbQogd2l0aCAiMC4xIiBpcyBleHBsYWluZWQgaW4gcHJlY2lzZSBkZXRhaWwgYmVsb3csIGluIHRoZSAiUmVwcmVzZW50YXRpb24gRXJyb3IiCkBAIC0xMzEsOSArMTM5LDkgQEAKIAogV2hpbGUgcGF0aG9sb2dpY2FsIGNhc2VzIGRvIGV4aXN0LCBmb3IgbW9zdCBjYXN1YWwgdXNlIG9mIGZsb2F0aW5nLXBvaW50CiBhcml0aG1ldGljIHlvdSdsbCBzZWUgdGhlIHJlc3VsdCB5b3UgZXhwZWN0IGluIHRoZSBlbmQgaWYgeW91IHNpbXBseSByb3VuZCB0aGUKLWRpc3BsYXkgb2YgeW91ciBmaW5hbCByZXN1bHRzIHRvIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgeW91IGV4cGVjdC4KLTpmdW5jOmBzdHJgIHVzdWFsbHkgc3VmZmljZXMsIGFuZCBmb3IgZmluZXIgY29udHJvbCBzZWUgdGhlIDptZXRoOmBzdHIuZm9ybWF0YAotbWV0aG9kJ3MgZm9ybWF0IHNwZWNpZmllcnMgaW4gOnJlZjpgZm9ybWF0c3RyaW5nc2AuCitkaXNwbGF5IG9mIHlvdXIgZmluYWwgcmVzdWx0cyB0byB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIHlvdSBleHBlY3QuICBGb3IKK2ZpbmUgY29udHJvbCBvdmVyIGhvdyBhIGZsb2F0IGlzIGRpc3BsYXllZCBzZWUgdGhlIDptZXRoOmBzdHIuZm9ybWF0YCBtZXRob2QncworZm9ybWF0IHNwZWNpZmllcnMgaW4gOnJlZjpgZm9ybWF0c3RyaW5nc2AuCiAKIAogLi4gX3R1dC1mcC1lcnJvcjoKQEAgLTE0MSwyNCArMTQ5LDI0IEBACiBSZXByZXNlbnRhdGlvbiBFcnJvcgogPT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSAiMC4xIiBleGFtcGxlIGluIGRldGFpbCwgYW5kIHNob3dzIGhvdyB5b3UgY2FuIHBlcmZvcm0KLWFuIGV4YWN0IGFuYWx5c2lzIG9mIGNhc2VzIGxpa2UgdGhpcyB5b3Vyc2VsZi4gIEJhc2ljIGZhbWlsaWFyaXR5IHdpdGggYmluYXJ5Ci1mbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLgorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSAiMC4xIiBleGFtcGxlIGluIGRldGFpbCwgYW5kIHNob3dzIGhvdyB5b3UgY2FuCitwZXJmb3JtIGFuIGV4YWN0IGFuYWx5c2lzIG9mIGNhc2VzIGxpa2UgdGhpcyB5b3Vyc2VsZi4gIEJhc2ljIGZhbWlsaWFyaXR5IHdpdGgKK2JpbmFyeSBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLgogCiA6ZGZuOmBSZXByZXNlbnRhdGlvbiBlcnJvcmAgcmVmZXJzIHRvIHRoZSBmYWN0IHRoYXQgc29tZSAobW9zdCwgYWN0dWFsbHkpCiBkZWNpbWFsIGZyYWN0aW9ucyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBiaW5hcnkgKGJhc2UgMikgZnJhY3Rpb25zLgogVGhpcyBpcyB0aGUgY2hpZWYgcmVhc29uIHdoeSBQeXRob24gKG9yIFBlcmwsIEMsIEMrKywgSmF2YSwgRm9ydHJhbiwgYW5kIG1hbnkKIG90aGVycykgb2Z0ZW4gd29uJ3QgZGlzcGxheSB0aGUgZXhhY3QgZGVjaW1hbCBudW1iZXIgeW91IGV4cGVjdDo6CiAKLSAgID4+PiAwLjEKLSAgIDAuMTAwMDAwMDAwMDAwMDAwMDEKKyAgID4+PiAwLjEgKyAwLjIKKyAgIDAuMzAwMDAwMDAwMDAwMDAwMDQKIAotV2h5IGlzIHRoYXQ/ICAxLzEwIGlzIG5vdCBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgYSBiaW5hcnkgZnJhY3Rpb24uIEFsbW9zdCBhbGwKLW1hY2hpbmVzIHRvZGF5IChOb3ZlbWJlciAyMDAwKSB1c2UgSUVFRS03NTQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYywgYW5kCi1hbG1vc3QgYWxsIHBsYXRmb3JtcyBtYXAgUHl0aG9uIGZsb2F0cyB0byBJRUVFLTc1NCAiZG91YmxlIHByZWNpc2lvbiIuICA3NTQKLWRvdWJsZXMgY29udGFpbiA1MyBiaXRzIG9mIHByZWNpc2lvbiwgc28gb24gaW5wdXQgdGhlIGNvbXB1dGVyIHN0cml2ZXMgdG8KLWNvbnZlcnQgMC4xIHRvIHRoZSBjbG9zZXN0IGZyYWN0aW9uIGl0IGNhbiBvZiB0aGUgZm9ybSAqSiovMioqXCAqTiogd2hlcmUgKkoqIGlzCi1hbiBpbnRlZ2VyIGNvbnRhaW5pbmcgZXhhY3RseSA1MyBiaXRzLiAgUmV3cml0aW5nIDo6CitXaHkgaXMgdGhhdD8gIDEvMTAgYW5kIDIvMTAgYXJlIG5vdCBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgYSBiaW5hcnkKK2ZyYWN0aW9uLiBBbG1vc3QgYWxsIG1hY2hpbmVzIHRvZGF5IChKdWx5IDIwMTApIHVzZSBJRUVFLTc1NCBmbG9hdGluZyBwb2ludAorYXJpdGhtZXRpYywgYW5kIGFsbW9zdCBhbGwgcGxhdGZvcm1zIG1hcCBQeXRob24gZmxvYXRzIHRvIElFRUUtNzU0ICJkb3VibGUKK3ByZWNpc2lvbiIuICA3NTQgZG91YmxlcyBjb250YWluIDUzIGJpdHMgb2YgcHJlY2lzaW9uLCBzbyBvbiBpbnB1dCB0aGUgY29tcHV0ZXIKK3N0cml2ZXMgdG8gY29udmVydCAwLjEgdG8gdGhlIGNsb3Nlc3QgZnJhY3Rpb24gaXQgY2FuIG9mIHRoZSBmb3JtICpKKi8yKipcICpOKgord2hlcmUgKkoqIGlzIGFuIGludGVnZXIgY29udGFpbmluZyBleGFjdGx5IDUzIGJpdHMuICBSZXdyaXRpbmcgOjoKIAogICAgMSAvIDEwIH49IEogLyAoMioqTikKIApAQCAtMTcwLDI0ICsxNzgsMjQgQEAKIHRoZSBiZXN0IHZhbHVlIGZvciAqTiogaXMgNTY6OgogCiAgICA+Pj4gMioqNTIKLSAgIDQ1MDM1OTk2MjczNzA0OTZMCisgICA0NTAzNTk5NjI3MzcwNDk2CiAgICA+Pj4gMioqNTMKLSAgIDkwMDcxOTkyNTQ3NDA5OTJMCisgICA5MDA3MTk5MjU0NzQwOTkyCiAgICA+Pj4gMioqNTYvMTAKLSAgIDcyMDU3NTk0MDM3OTI3OTNMCisgICA3MjA1NzU5NDAzNzkyNzkzCiAKLVRoYXQgaXMsIDU2IGlzIHRoZSBvbmx5IHZhbHVlIGZvciAqTiogdGhhdCBsZWF2ZXMgKkoqIHdpdGggZXhhY3RseSA1MyBiaXRzLiAgVGhlCi1iZXN0IHBvc3NpYmxlIHZhbHVlIGZvciAqSiogaXMgdGhlbiB0aGF0IHF1b3RpZW50IHJvdW5kZWQ6OgorVGhhdCBpcywgNTYgaXMgdGhlIG9ubHkgdmFsdWUgZm9yICpOKiB0aGF0IGxlYXZlcyAqSiogd2l0aCBleGFjdGx5IDUzIGJpdHMuCitUaGUgYmVzdCBwb3NzaWJsZSB2YWx1ZSBmb3IgKkoqIGlzIHRoZW4gdGhhdCBxdW90aWVudCByb3VuZGVkOjoKIAogICAgPj4+IHEsIHIgPSBkaXZtb2QoMioqNTYsIDEwKQogICAgPj4+IHIKLSAgIDZMCisgICA2CiAKIFNpbmNlIHRoZSByZW1haW5kZXIgaXMgbW9yZSB0aGFuIGhhbGYgb2YgMTAsIHRoZSBiZXN0IGFwcHJveGltYXRpb24gaXMgb2J0YWluZWQKIGJ5IHJvdW5kaW5nIHVwOjoKIAogICAgPj4+IHErMQotICAgNzIwNTc1OTQwMzc5Mjc5NEwKKyAgIDcyMDU3NTk0MDM3OTI3OTQKIAogVGhlcmVmb3JlIHRoZSBiZXN0IHBvc3NpYmxlIGFwcHJveGltYXRpb24gdG8gMS8xMCBpbiA3NTQgZG91YmxlIHByZWNpc2lvbiBpcwogdGhhdCBvdmVyIDJcKlwqNTYsIG9yIDo6CkBAIC0xOTUsOCArMjAzLDggQEAKICAgIDcyMDU3NTk0MDM3OTI3OTQgLyA3MjA1NzU5NDAzNzkyNzkzNgogCiBOb3RlIHRoYXQgc2luY2Ugd2Ugcm91bmRlZCB1cCwgdGhpcyBpcyBhY3R1YWxseSBhIGxpdHRsZSBiaXQgbGFyZ2VyIHRoYW4gMS8xMDsKLWlmIHdlIGhhZCBub3Qgcm91bmRlZCB1cCwgdGhlIHF1b3RpZW50IHdvdWxkIGhhdmUgYmVlbiBhIGxpdHRsZSBiaXQgc21hbGxlciB0aGFuCi0xLzEwLiAgQnV0IGluIG5vIGNhc2UgY2FuIGl0IGJlICpleGFjdGx5KiAxLzEwIQoraWYgd2UgaGFkIG5vdCByb3VuZGVkIHVwLCB0aGUgcXVvdGllbnQgd291bGQgaGF2ZSBiZWVuIGEgbGl0dGxlIGJpdCBzbWFsbGVyCit0aGFuIDEvMTAuICBCdXQgaW4gbm8gY2FzZSBjYW4gaXQgYmUgKmV4YWN0bHkqIDEvMTAhCiAKIFNvIHRoZSBjb21wdXRlciBuZXZlciAic2VlcyIgMS8xMDogIHdoYXQgaXQgc2VlcyBpcyB0aGUgZXhhY3QgZnJhY3Rpb24gZ2l2ZW4KIGFib3ZlLCB0aGUgYmVzdCA3NTQgZG91YmxlIGFwcHJveGltYXRpb24gaXQgY2FuIGdldDo6CkBAIC0yMDcsMTMgKzIxNSwxMiBAQAogSWYgd2UgbXVsdGlwbHkgdGhhdCBmcmFjdGlvbiBieSAxMFwqXCozMCwgd2UgY2FuIHNlZSB0aGUgKHRydW5jYXRlZCkgdmFsdWUgb2YKIGl0cyAzMCBtb3N0IHNpZ25pZmljYW50IGRlY2ltYWwgZGlnaXRzOjoKIAotICAgPj4+IDcyMDU3NTk0MDM3OTI3OTQgKiAxMCoqMzAgLyAyKio1NgorICAgPj4+IDcyMDU3NTk0MDM3OTI3OTQgKiAxMCoqMzAgLy8gMioqNTYKICAgIDEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNUwKIAogbWVhbmluZyB0aGF0IHRoZSBleGFjdCBudW1iZXIgc3RvcmVkIGluIHRoZSBjb21wdXRlciBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvCi10aGUgZGVjaW1hbCB2YWx1ZSAwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNS4gIFJvdW5kaW5nIHRoYXQgdG8gMTcKLXNpZ25pZmljYW50IGRpZ2l0cyBnaXZlcyB0aGUgMC4xMDAwMDAwMDAwMDAwMDAwMSB0aGF0IFB5dGhvbiBkaXNwbGF5cyAod2VsbCwKLXdpbGwgZGlzcGxheSBvbiBhbnkgNzU0LWNvbmZvcm1pbmcgcGxhdGZvcm0gdGhhdCBkb2VzIGJlc3QtcG9zc2libGUgaW5wdXQgYW5kCi1vdXRwdXQgY29udmVyc2lvbnMgaW4gaXRzIEMgbGlicmFyeSAtLS0geW91cnMgbWF5IG5vdCEpLgotCi0KK3RoZSBkZWNpbWFsIHZhbHVlIDAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1LiAgSW4gdmVyc2lvbnMgcHJpb3IgdG8KK1B5dGhvbiAyLjcgYW5kIFB5dGhvbiAzLjEsIFB5dGhvbiByb3VuZGVkIHRoaXMgdmFsdWUgdG8gMTcgc2lnbmlmaWNhbnQgZGlnaXRzLAorZ2l2aW5nICcwLjEwMDAwMDAwMDAwMDAwMDAxJy4gIEluIGN1cnJlbnQgdmVyc2lvbnMsIFB5dGhvbiBkaXNwbGF5cyBhIHZhbHVlCitiYXNlZCBvbiB0aGUgc2hvcnRlc3QgZGVjaW1hbCBmcmFjdGlvbiB0aGF0IHJvdW5kcyBjb3JyZWN0bHkgYmFjayB0byB0aGUgdHJ1ZQorYmluYXJ5IHZhbHVlLCByZXN1bHRpbmcgc2ltcGx5IGluICcwLjEnLgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdCBiL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKaW5kZXggYTJkZGEzYi4uMGUwNDk2MiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CkBAIC00OSwxMCArNDksMTAgQEAKICAgICdIZWxsbywgd29ybGQuJwogICAgPj4+IHJlcHIocykKICAgICInSGVsbG8sIHdvcmxkLiciCi0gICA+Pj4gc3RyKDAuMSkKLSAgICcwLjEnCi0gICA+Pj4gcmVwcigwLjEpCi0gICAnMC4xMDAwMDAwMDAwMDAwMDAwMScKKyAgID4+PiBzdHIoMS4wLzcuMCkKKyAgICcwLjE0Mjg1NzE0Mjg1NycKKyAgID4+PiByZXByKDEuMC83LjApCisgICAnMC4xNDI4NTcxNDI4NTcxNDI4NScKICAgID4+PiB4ID0gMTAgKiAzLjI1CiAgICA+Pj4geSA9IDIwMCAqIDIwMAogICAgPj4+IHMgPSAnVGhlIHZhbHVlIG9mIHggaXMgJyArIHJlcHIoeCkgKyAnLCBhbmQgeSBpcyAnICsgcmVwcih5KSArICcuLi4nCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogQmFzaWMgdXNhZ2Ugb2YgdGhlIDptZXRoOmBzdHIuZm9ybWF0YCBtZXRob2QgbG9va3MgbGlrZSB0aGlzOjoKIAotICAgPj4+IHByaW50ICdXZSBhcmUgdGhlIHswfSB3aG8gc2F5ICJ7MX0hIicuZm9ybWF0KCdrbmlnaHRzJywgJ05pJykKKyAgID4+PiBwcmludCAnV2UgYXJlIHRoZSB7fSB3aG8gc2F5ICJ7fSEiJy5mb3JtYXQoJ2tuaWdodHMnLCAnTmknKQogICAgV2UgYXJlIHRoZSBrbmlnaHRzIHdobyBzYXkgIk5pISIKIAogVGhlIGJyYWNrZXRzIGFuZCBjaGFyYWN0ZXJzIHdpdGhpbiB0aGVtIChjYWxsZWQgZm9ybWF0IGZpZWxkcykgYXJlIHJlcGxhY2VkIHdpdGgKQEAgLTE1MywxNCArMTUzLDE0IEBACiBjb252ZXJ0IHRoZSB2YWx1ZSBiZWZvcmUgaXQgaXMgZm9ybWF0dGVkLiA6OgogCiAgICA+Pj4gaW1wb3J0IG1hdGgKLSAgID4+PiBwcmludCAnVGhlIHZhbHVlIG9mIFBJIGlzIGFwcHJveGltYXRlbHkgezB9LicuZm9ybWF0KG1hdGgucGkpCisgICA+Pj4gcHJpbnQgJ1RoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IHt9LicuZm9ybWF0KG1hdGgucGkpCiAgICBUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSAzLjE0MTU5MjY1MzU5LgotICAgPj4+IHByaW50ICdUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSB7MCFyfS4nLmZvcm1hdChtYXRoLnBpKQorICAgPj4+IHByaW50ICdUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSB7IXJ9LicuZm9ybWF0KG1hdGgucGkpCiAgICBUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSAzLjE0MTU5MjY1MzU4OTc5My4KIAogQW4gb3B0aW9uYWwgYGAnOidgYCBhbmQgZm9ybWF0IHNwZWNpZmllciBjYW4gZm9sbG93IHRoZSBmaWVsZCBuYW1lLiBUaGlzIGFsbG93cwogZ3JlYXRlciBjb250cm9sIG92ZXIgaG93IHRoZSB2YWx1ZSBpcyBmb3JtYXR0ZWQuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUKLXRydW5jYXRlcyBQaSB0byB0aHJlZSBwbGFjZXMgYWZ0ZXIgdGhlIGRlY2ltYWwuCityb3VuZHMgUGkgdG8gdGhyZWUgcGxhY2VzIGFmdGVyIHRoZSBkZWNpbWFsLgogCiAgICA+Pj4gaW1wb3J0IG1hdGgKICAgID4+PiBwcmludCAnVGhlIHZhbHVlIG9mIFBJIGlzIGFwcHJveGltYXRlbHkgezA6LjNmfS4nLmZvcm1hdChtYXRoLnBpKQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKaW5kZXggMzExYjQwOS4uZGY5M2FmMiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CkBAIC0yMiwxMSArMjIsMTEgQEAKIGFsdGVybmF0aXZlIGxvY2F0aW9uLikKIAogT24gV2luZG93cyBtYWNoaW5lcywgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgdXN1YWxseSBwbGFjZWQgaW4KLTpmaWxlOmBDOlxcUHl0aG9uMjZgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQorOmZpbGU6YEM6XFxQeXRob24yN2AsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCiBpbnN0YWxsZXIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCAgeW91IGNhbiB0eXBlIHRoZSBmb2xsb3dpbmcKIGNvbW1hbmQgaW50byB0aGUgY29tbWFuZCBwcm9tcHQgaW4gYSBET1MgYm94OjoKIAotICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjI2CisgICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMjcKIAogVHlwaW5nIGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciAoOmtiZDpgQ29udHJvbC1EYCBvbiBVbml4LCA6a2JkOmBDb250cm9sLVpgIG9uCiBXaW5kb3dzKSBhdCB0aGUgcHJpbWFyeSBwcm9tcHQgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IHdpdGggYSB6ZXJvIGV4aXQKQEAgLTU4LDE0ICs1OCw2IEBACiBgYHB5dGhvbiAtbSBtb2R1bGUgW2FyZ10gLi4uYGAsIHdoaWNoIGV4ZWN1dGVzIHRoZSBzb3VyY2UgZmlsZSBmb3IgKm1vZHVsZSogYXMKIGlmIHlvdSBoYWQgc3BlbGxlZCBvdXQgaXRzIGZ1bGwgbmFtZSBvbiB0aGUgY29tbWFuZCBsaW5lLgogCi1Ob3RlIHRoYXQgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gYGBweXRob24gZmlsZWBgIGFuZCBgYHB5dGhvbiA8ZmlsZWBgLgotSW4gdGhlIGxhdHRlciBjYXNlLCBpbnB1dCByZXF1ZXN0cyBmcm9tIHRoZSBwcm9ncmFtLCBzdWNoIGFzIGNhbGxzIHRvCi06ZnVuYzpgaW5wdXRgIGFuZCA6ZnVuYzpgcmF3X2lucHV0YCwgYXJlIHNhdGlzZmllZCBmcm9tICpmaWxlKi4gIFNpbmNlIHRoaXMgZmlsZQotaGFzIGFscmVhZHkgYmVlbiByZWFkIHVudGlsIHRoZSBlbmQgYnkgdGhlIHBhcnNlciBiZWZvcmUgdGhlIHByb2dyYW0gc3RhcnRzCi1leGVjdXRpbmcsIHRoZSBwcm9ncmFtIHdpbGwgZW5jb3VudGVyIGVuZC1vZi1maWxlIGltbWVkaWF0ZWx5LiAgSW4gdGhlIGZvcm1lcgotY2FzZSAod2hpY2ggaXMgdXN1YWxseSB3aGF0IHlvdSB3YW50KSB0aGV5IGFyZSBzYXRpc2ZpZWQgZnJvbSB3aGF0ZXZlciBmaWxlIG9yCi1kZXZpY2UgaXMgY29ubmVjdGVkIHRvIHN0YW5kYXJkIGlucHV0IG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuCi0KIFdoZW4gYSBzY3JpcHQgZmlsZSBpcyB1c2VkLCBpdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gcnVuIHRoZSBzY3JpcHQKIGFuZCBlbnRlciBpbnRlcmFjdGl2ZSBtb2RlIGFmdGVyd2FyZHMuICBUaGlzIGNhbiBiZSBkb25lIGJ5IHBhc3NpbmcgOm9wdGlvbjpgLWlgCiBiZWZvcmUgdGhlIHNjcmlwdC4gIChUaGlzIGRvZXMgbm90IHdvcmsgaWYgdGhlIHNjcmlwdCBpcyByZWFkIGZyb20gc3RhbmRhcmQKQEAgLTc4LDggKzcwLDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0KIAogV2hlbiBrbm93biB0byB0aGUgaW50ZXJwcmV0ZXIsIHRoZSBzY3JpcHQgbmFtZSBhbmQgYWRkaXRpb25hbCBhcmd1bWVudHMKLXRoZXJlYWZ0ZXIgYXJlIHBhc3NlZCB0byB0aGUgc2NyaXB0IGluIHRoZSB2YXJpYWJsZSBgYHN5cy5hcmd2YGAsIHdoaWNoIGlzIGEKLWxpc3Qgb2Ygc3RyaW5ncy4gIEl0cyBsZW5ndGggaXMgYXQgbGVhc3Qgb25lOyB3aGVuIG5vIHNjcmlwdCBhbmQgbm8gYXJndW1lbnRzCit0aGVyZWFmdGVyIGFyZSB0dXJuZWQgaW50byBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgYXNzaWduZWQgdG8gdGhlIGBgYXJndmBgCit2YXJpYWJsZSBpbiB0aGUgYGBzeXNgYCBtb2R1bGUuICBZb3UgY2FuIGFjY2VzcyB0aGlzIGxpc3QgYnkgZXhlY3V0aW5nIGBgaW1wb3J0CitzeXNgYC4gIFRoZSBsZW5ndGggb2YgdGhlIGxpc3QgaXMgYXQgbGVhc3Qgb25lOyB3aGVuIG5vIHNjcmlwdCBhbmQgbm8gYXJndW1lbnRzCiBhcmUgZ2l2ZW4sIGBgc3lzLmFyZ3ZbMF1gYCBpcyBhbiBlbXB0eSBzdHJpbmcuICBXaGVuIHRoZSBzY3JpcHQgbmFtZSBpcyBnaXZlbiBhcwogYGAnLSdgYCAobWVhbmluZyAgc3RhbmRhcmQgaW5wdXQpLCBgYHN5cy5hcmd2WzBdYGAgaXMgc2V0IHRvIGBgJy0nYGAuICBXaGVuCiA6b3B0aW9uOmAtY2AgKmNvbW1hbmQqIGlzIHVzZWQsIGBgc3lzLmFyZ3ZbMF1gYCBpcyBzZXQgdG8gYGAnLWMnYGAuICBXaGVuCkBAIC0xMDIsNyArOTUsNyBAQAogYmVmb3JlIHByaW50aW5nIHRoZSBmaXJzdCBwcm9tcHQ6OgogCiAgICBweXRob24KLSAgIFB5dGhvbiAyLjYgKCMxLCBGZWIgMjggMjAwNywgMDA6MDI6MDYpCisgICBQeXRob24gMi43ICgjMSwgRmViIDI4IDIwMTAsIDAwOjAyOjA2KQogICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgPj4+CiAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24ucnN0IGIvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKaW5kZXggYzk1MzM5NC4uNmQ4Zjg5MCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKQEAgLTE3OCw2ICsxNzgsMTMgQEAKICAgID4+PiAnIklzblwndCwiIHNoZSBzYWlkLicKICAgICciSXNuXCd0LCIgc2hlIHNhaWQuJwogCitUaGUgaW50ZXJwcmV0ZXIgcHJpbnRzIHRoZSByZXN1bHQgb2Ygc3RyaW5nIG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZXkKK2FyZSB0eXBlZCBmb3IgaW5wdXQ6IGluc2lkZSBxdW90ZXMsIGFuZCB3aXRoIHF1b3RlcyBhbmQgb3RoZXIgZnVubnkgY2hhcmFjdGVycworZXNjYXBlZCBieSBiYWNrc2xhc2hlcywgdG8gc2hvdyB0aGUgcHJlY2lzZSB2YWx1ZS4gIFRoZSBzdHJpbmcgaXMgZW5jbG9zZWQgaW4KK2RvdWJsZSBxdW90ZXMgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIHNpbmdsZSBxdW90ZSBhbmQgbm8gZG91YmxlIHF1b3RlcywgZWxzZQoraXQncyBlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGVzLiAgVGhlIDprZXl3b3JkOmBwcmludGAgc3RhdGVtZW50IHByb2R1Y2VzIGEgbW9yZQorcmVhZGFibGUgb3V0cHV0IGZvciBzdWNoIGlucHV0IHN0cmluZ3MuCisKIFN0cmluZyBsaXRlcmFscyBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcyBpbiBzZXZlcmFsIHdheXMuICBDb250aW51YXRpb24gbGluZXMgY2FuCiBiZSB1c2VkLCB3aXRoIGEgYmFja3NsYXNoIGFzIHRoZSBsYXN0IGNoYXJhY3RlciBvbiB0aGUgbGluZSBpbmRpY2F0aW5nIHRoYXQgdGhlCiBuZXh0IGxpbmUgaXMgYSBsb2dpY2FsIGNvbnRpbnVhdGlvbiBvZiB0aGUgbGluZTo6CkBAIC0xODksNyArMTk2LDcgQEAKIAogICAgcHJpbnQgaGVsbG8KIAotTm90ZSB0aGF0IG5ld2xpbmVzIHN0aWxsIG5lZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIHN0cmluZyB1c2luZyBgYFxuYGA7IHRoZQorTm90ZSB0aGF0IG5ld2xpbmVzIHN0aWxsIG5lZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIHN0cmluZyB1c2luZyBgYFxuYGAgLS0gdGhlCiBuZXdsaW5lIGZvbGxvd2luZyB0aGUgdHJhaWxpbmcgYmFja3NsYXNoIGlzIGRpc2NhcmRlZC4gIFRoaXMgZXhhbXBsZSB3b3VsZCBwcmludAogdGhlIGZvbGxvd2luZzoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0IGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CmluZGV4IDQ4ODU4ZjMuLjZmNTEzNTcgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKQEAgLTMzMiw4ICszMzIsOCBAQAogICAgICdlbnVtZXJhdGUnLCAnZXZhbCcsICdleGVjZmlsZScsICdleGl0JywgJ2ZpbGUnLCAnZmlsdGVyJywgJ2Zsb2F0JywKICAgICAnZnJvemVuc2V0JywgJ2dldGF0dHInLCAnZ2xvYmFscycsICdoYXNhdHRyJywgJ2hhc2gnLCAnaGVscCcsICdoZXgnLAogICAgICdpZCcsICdpbnB1dCcsICdpbnQnLCAnaW50ZXJuJywgJ2lzaW5zdGFuY2UnLCAnaXNzdWJjbGFzcycsICdpdGVyJywKLSAgICAnbGVuJywgJ2xpY2Vuc2UnLCAnbGlzdCcsICdsb2NhbHMnLCAnbG9uZycsICdtYXAnLCAnbWF4JywgJ21pbicsCi0gICAgJ29iamVjdCcsICdvY3QnLCAnb3BlbicsICdvcmQnLCAncG93JywgJ3Byb3BlcnR5JywgJ3F1aXQnLCAncmFuZ2UnLAorICAgICdsZW4nLCAnbGljZW5zZScsICdsaXN0JywgJ2xvY2FscycsICdsb25nJywgJ21hcCcsICdtYXgnLCAnbWVtb3J5dmlldycsCisgICAgJ21pbicsICdvYmplY3QnLCAnb2N0JywgJ29wZW4nLCAnb3JkJywgJ3BvdycsICdwcm9wZXJ0eScsICdxdWl0JywgJ3JhbmdlJywKICAgICAncmF3X2lucHV0JywgJ3JlZHVjZScsICdyZWxvYWQnLCAncmVwcicsICdyZXZlcnNlZCcsICdyb3VuZCcsICdzZXQnLAogICAgICdzZXRhdHRyJywgJ3NsaWNlJywgJ3NvcnRlZCcsICdzdGF0aWNtZXRob2QnLCAnc3RyJywgJ3N1bScsICdzdXBlcicsCiAgICAgJ3R1cGxlJywgJ3R5cGUnLCAndW5pY2hyJywgJ3VuaWNvZGUnLCAndmFycycsICd4cmFuZ2UnLCAnemlwJ10KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKaW5kZXggOWRlZGQ5Ni4uODQ0ZjhiYyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QKQEAgLTE0LDExICsxNCwxMSBAQAogb3BlcmF0aW5nIHN5c3RlbTo6CiAKICAgID4+PiBpbXBvcnQgb3MKLSAgID4+PiBvcy5zeXN0ZW0oJ3RpbWUgMDowMicpCi0gICAwCiAgICA+Pj4gb3MuZ2V0Y3dkKCkgICAgICAjIFJldHVybiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICAgJ0M6XFxQeXRob24yNicKLSAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykKKyAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAorICAgMAogCiBCZSBzdXJlIHRvIHVzZSB0aGUgYGBpbXBvcnQgb3NgYCBzdHlsZSBpbnN0ZWFkIG9mIGBgZnJvbSBvcyBpbXBvcnQgKmBgLiAgVGhpcwogd2lsbCBrZWVwIDpmdW5jOmBvcy5vcGVuYCBmcm9tIHNoYWRvd2luZyB0aGUgYnVpbHQtaW4gOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIHdoaWNoCkBAIC03Miw3ICs3Miw3IEBACiAKIFRoZSA6bW9kOmBnZXRvcHRgIG1vZHVsZSBwcm9jZXNzZXMgKnN5cy5hcmd2KiB1c2luZyB0aGUgY29udmVudGlvbnMgb2YgdGhlIFVuaXgKIDpmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uLiAgTW9yZSBwb3dlcmZ1bCBhbmQgZmxleGlibGUgY29tbWFuZCBsaW5lIHByb2Nlc3NpbmcgaXMKLXByb3ZpZGVkIGJ5IHRoZSA6bW9kOmBvcHRwYXJzZWAgbW9kdWxlLgorcHJvdmlkZWQgYnkgdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUuCiAKIAogLi4gX3R1dC1zdGRlcnI6CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKaW5kZXggZWQ1NjM2NC4uNTE0ZDU4MyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdApAQCAtMzYyLDEwICszNjIsMTMgQEAKIGJlY29tZXMgc2lnbmlmaWNhbnQgaWYgdGhlIHJlc3VsdHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgY2VudDo6CiAKICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0ICoKLSAgID4+PiBEZWNpbWFsKCcwLjcwJykgKiBEZWNpbWFsKCcxLjA1JykKKyAgID4+PiB4ID0gRGVjaW1hbCgnMC43MCcpICogRGVjaW1hbCgnMS4wNScpCisgICA+Pj4geAogICAgRGVjaW1hbCgnMC43MzUwJykKLSAgID4+PiAuNzAgKiAxLjA1Ci0gICAwLjczNDk5OTk5OTk5OTk5OTk5CisgICA+Pj4geC5xdWFudGl6ZShEZWNpbWFsKCcwLjAxJykpICAjIHJvdW5kIHRvIG5lYXJlc3QgY2VudAorICAgRGVjaW1hbCgnMC43NCcpCisgICA+Pj4gcm91bmQoLjcwICogMS4wNSwgMikgICAgICAgICAjIHNhbWUgY2FsY3VsYXRpb24gd2l0aCBmbG9hdHMKKyAgIDAuNzMKIAogVGhlIDpjbGFzczpgRGVjaW1hbGAgcmVzdWx0IGtlZXBzIGEgdHJhaWxpbmcgemVybywgYXV0b21hdGljYWxseSBpbmZlcnJpbmcgZm91cgogcGxhY2Ugc2lnbmlmaWNhbmNlIGZyb20gbXVsdGlwbGljYW5kcyB3aXRoIHR3byBwbGFjZSBzaWduaWZpY2FuY2UuICBEZWNpbWFsCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKaW5kZXggYjQxZDI0NC4uYTEwYWIxYyAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0CisrKyBiL0RvYy91c2luZy9jbWRsaW5lLnJzdApAQCAtMSw1ICsxLDggQEAKIC4uIGhpZ2hsaWdodGxhbmc6OiBub25lCiAKKy4uIEFUVEVOVElPTjogWW91IHByb2JhYmx5IHNob3VsZCB1cGRhdGUgTWlzYy9weXRob24ubWFuLCB0b28sIGlmIHlvdSBtb2RpZnkKKy4uIHRoaXMgZmlsZS4KKwogLi4gX3VzaW5nLW9uLWdlbmVyYWw6CiAKIENvbW1hbmQgbGluZSBhbmQgZW52aXJvbm1lbnQKQEAgLTc4LDYgKzgxLDEyIEBACiAgICB0aGUgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBhbHdheXMgZW5mb3JjZSB0aGlzIChlLmcuIGl0IG1heSBhbGxvdyB5b3UgdG8KICAgIHVzZSBhIG5hbWUgdGhhdCBpbmNsdWRlcyBhIGh5cGhlbikuCiAKKyAgIFBhY2thZ2UgbmFtZXMgYXJlIGFsc28gcGVybWl0dGVkLiBXaGVuIGEgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkIGluc3RlYWQKKyAgIG9mIGEgbm9ybWFsIG1vZHVsZSwgdGhlIGludGVycHJldGVyIHdpbGwgZXhlY3V0ZSBgYDxwa2c+Ll9fbWFpbl9fYGAgYXMKKyAgIHRoZSBtYWluIG1vZHVsZS4gVGhpcyBiZWhhdmlvdXIgaXMgZGVsaWJlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlIGhhbmRsaW5nCisgICBvZiBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciBhcyB0aGUKKyAgIHNjcmlwdCBhcmd1bWVudC4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggYnVpbHQtaW4gbW9kdWxlcyBhbmQgZXh0ZW5zaW9uIG1vZHVsZXMKQEAgLTk3LDcgKzEwNiw3IEBACiAKICAgIC4uIHNlZWFsc286OgogICAgICAgOmZ1bmM6YHJ1bnB5LnJ1bl9tb2R1bGVgCi0gICAgICAgICBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZmVhdHVyZS4KKyAgICAgICAgIEVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBhdmFpbGFibGUgdG8gUHl0aG9uIGNvZGUKIAogICAgICAgOnBlcDpgMzM4YCAtLSBFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzCiAKQEAgLTEwNiw2ICsxMTUsMTEgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi41CiAgICAgICBUaGUgbmFtZWQgbW9kdWxlIGNhbiBub3cgYmUgbG9jYXRlZCBpbnNpZGUgYSBwYWNrYWdlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDIuNworICAgICAgU3VwcGx5IHRoZSBwYWNrYWdlIG5hbWUgdG8gcnVuIGEgYGBfX21haW5fX2BgIHN1Ym1vZHVsZS4KKyAgICAgIHN5cy5hcmd2WzBdIGlzIG5vdyBzZXQgdG8gYGAiLW0iYGAgd2hpbGUgc2VhcmNoaW5nIGZvciB0aGUgbW9kdWxlCisgICAgICAoaXQgd2FzIHByZXZpb3VzbHkgaW5jb3JyZWN0bHkgc2V0IHRvIGBgIi1jImBgKQorCiAKIC4uIGRlc2NyaWJlOjogLQogCkBAIC0zMDEsNiArMzE1LDEwIEBACiAgICA6b3B0aW9uOmAtV2Agb3B0aW9ucyBhcmUgaWdub3JlZCAodGhvdWdoLCBhIHdhcm5pbmcgbWVzc2FnZSBpcyBwcmludGVkIGFib3V0CiAgICBpbnZhbGlkIG9wdGlvbnMgd2hlbiB0aGUgZmlyc3Qgd2FybmluZyBpcyBpc3N1ZWQpLgogCisgICBTdGFydGluZyBmcm9tIFB5dGhvbiAyLjcsIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgYW5kIGl0cyBkZXNjZW5kYW50cworICAgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4gIFRoZSA6b3B0aW9uOmAtV2RgIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZS1lbmFibGUKKyAgIHRoZW0uCisKICAgIFdhcm5pbmdzIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgZnJvbSB3aXRoaW4gYSBQeXRob24gcHJvZ3JhbSB1c2luZyB0aGUKICAgIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUuCiAKQEAgLTMzMSw3ICszNDksNyBAQAogICAgdGhlIHJlbWFpbmluZyBmaWVsZHMuICBFbXB0eSBmaWVsZHMgbWF0Y2ggYWxsIHZhbHVlczsgdHJhaWxpbmcgZW1wdHkgZmllbGRzCiAgICBtYXkgYmUgb21pdHRlZC4gIFRoZSAqbWVzc2FnZSogZmllbGQgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZQogICAgcHJpbnRlZDsgdGhpcyBtYXRjaCBpcyBjYXNlLWluc2Vuc2l0aXZlLiAgVGhlICpjYXRlZ29yeSogZmllbGQgbWF0Y2hlcyB0aGUKLSAgIHdhcm5pbmcgY2F0ZWdvcnkuICBUaGlzIG11c3QgYmUgYSBjbGFzcyBuYW1lOyB0aGUgbWF0Y2ggdGVzdCB3aGV0aGVyIHRoZQorICAgd2FybmluZyBjYXRlZ29yeS4gIFRoaXMgbXVzdCBiZSBhIGNsYXNzIG5hbWU7IHRoZSBtYXRjaCB0ZXN0cyB3aGV0aGVyIHRoZQogICAgYWN0dWFsIHdhcm5pbmcgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UgaXMgYSBzdWJjbGFzcyBvZiB0aGUgc3BlY2lmaWVkIHdhcm5pbmcKICAgIGNhdGVnb3J5LiAgVGhlIGZ1bGwgY2xhc3MgbmFtZSBtdXN0IGJlIGdpdmVuLiAgVGhlICptb2R1bGUqIGZpZWxkIG1hdGNoZXMgdGhlCiAgICAoZnVsbHktcXVhbGlmaWVkKSBtb2R1bGUgbmFtZTsgdGhpcyBtYXRjaCBpcyBjYXNlLXNlbnNpdGl2ZS4gIFRoZSAqbGluZSoKQEAgLTM0Myw2ICszNjEsOCBAQAogCiAgICAgICA6cGVwOmAyMzBgIC0tIFdhcm5pbmcgZnJhbWV3b3JrCiAKKyAgICAgIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAorCiAKIC4uIGNtZG9wdGlvbjo6IC14CiAKQEAgLTUzOCw2ICs1NTgsMTIgQEAKICAgIHZhbHVlIGluc3RlYWQgb2YgdGhlIHZhbHVlIGdvdCB0aHJvdWdoIHRoZSBDIHJ1bnRpbWUuICBPbmx5IHdvcmtzIG9uCiAgICBNYWMgT1MgWC4KIAorLi4gZW52dmFyOjogUFlUSE9OV0FSTklOR1MKKworICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSA6b3B0aW9uOmAtV2Agb3B0aW9uLiBJZiBzZXQgdG8gYSBjb21tYQorICAgc2VwYXJhdGVkIHN0cmluZywgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIDpvcHRpb246YC1XYCBtdWx0aXBsZQorICAgdGltZXMuCisKIAogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvaW5kZXgucnN0IGIvRG9jL3VzaW5nL2luZGV4LnJzdAppbmRleCA2Y2U1YTAwLi4xMjAxMTUzIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvaW5kZXgucnN0CisrKyBiL0RvYy91c2luZy9pbmRleC5yc3QKQEAgLTEsOCArMSw4IEBACiAuLiBfdXNpbmctaW5kZXg6CiAKLSMjIyMjIyMjIyMjIyMjIyMKLSAgVXNpbmcgUHl0aG9uCi0jIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICBQeXRob24gU2V0dXAgYW5kIFVzYWdlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAKIFRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBkZXZvdGVkIHRvIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gdGhlIHNldHVwCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvbWFjLnJzdCBiL0RvYy91c2luZy9tYWMucnN0CmluZGV4IDE4YmZiODIuLmM1ZjdmMmQgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9tYWMucnN0CisrKyBiL0RvYy91c2luZy9tYWMucnN0CkBAIC0xMjIsOCArMTIyLDggQEAKID09PT09PT0KIAogTWFjUHl0aG9uIHNoaXBzIHdpdGggdGhlIHN0YW5kYXJkIElETEUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIEEgZ29vZAotaW50cm9kdWN0aW9uIHRvIHVzaW5nIElETEUgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9oa24uZWVjcy5iZXJrZWxleS5lZHUvCi1keW9vL3B5dGhvbi9pZGxlX2ludHJvL2luZGV4Lmh0bWwuCitpbnRyb2R1Y3Rpb24gdG8gdXNpbmcgSURMRSBjYW4gYmUgZm91bmQgYXQKK2h0dHA6Ly9oa24uZWVjcy5iZXJrZWxleS5lZHUvfmR5b28vcHl0aG9uL2lkbGVfaW50cm8vaW5kZXguaHRtbC4KIAogCiAuLiBfbWFjLXBhY2thZ2UtbWFuYWdlcjoKZGlmZiAtLWdpdCBhL0RvYy91c2luZy93aW5kb3dzLnJzdCBiL0RvYy91c2luZy93aW5kb3dzLnJzdAppbmRleCA1MjM0OWQ3Li44YTkxZWY3IDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CkBAIC0xNTgsMjMgKzE1OCw0OCBAQAogOmZpbGU6YEM6XFxQeXRob25cXExpYlxcYCBhbmQgdGhpcmQtcGFydHkgbW9kdWxlcyBzaG91bGQgYmUgc3RvcmVkIGluCiA6ZmlsZTpgQzpcXFB5dGhvblxcTGliXFxzaXRlLXBhY2thZ2VzXFxgLgogCi0uLiBgYCB0aGlzIGZpeGVzIHN5bnRheCBoaWdobGlnaHRpbmcgZXJyb3JzIGluIHNvbWUgZWRpdG9ycyBkdWUgdG8gdGhlIFxcIGhhY2tlcnkKK1RoaXMgaXMgaG93IDpkYXRhOmBzeXMucGF0aGAgaXMgcG9wdWxhdGVkIG9uIFdpbmRvd3M6CiAKLVlvdSBjYW4gYWRkIGZvbGRlcnMgdG8geW91ciBzZWFyY2ggcGF0aCB0byBtYWtlIFB5dGhvbidzIGltcG9ydCBtZWNoYW5pc20gc2VhcmNoCi1pbiB0aGVzZSBkaXJlY3RvcmllcyBhcyB3ZWxsLiAgVXNlIDplbnZ2YXI6YFBZVEhPTlBBVEhgLCBhcyBkZXNjcmliZWQgaW4KLTpyZWY6YHVzaW5nLW9uLWVudnZhcnNgLCB0byBtb2RpZnkgOmRhdGE6YHN5cy5wYXRoYC4gIE9uIFdpbmRvd3MsIHBhdGhzIGFyZQotc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIHRob3VnaCwgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIGRyaXZlIGlkZW50aWZpZXJzCi0oOmZpbGU6YEM6XFxgIGV0Yy4pLgorKiBBbiBlbXB0eSBlbnRyeSBpcyBhZGRlZCBhdCB0aGUgc3RhcnQsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50CisgIGRpcmVjdG9yeS4KIAotLi4gYGAKKyogSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YFBZVEhPTlBBVEhgIGV4aXN0cywgYXMgZGVzY3JpYmVkIGluCisgIDpyZWY6YHVzaW5nLW9uLWVudnZhcnNgLCBpdHMgZW50cmllcyBhcmUgYWRkZWQgbmV4dC4gIE5vdGUgdGhhdCBvbiBXaW5kb3dzLAorICBwYXRocyBpbiB0aGlzIHZhcmlhYmxlIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIHRvIGRpc3Rpbmd1aXNoIHRoZW0KKyAgZnJvbSB0aGUgY29sb24gdXNlZCBpbiBkcml2ZSBpZGVudGlmaWVycyAoYGBDOlxgYCBldGMuKS4KIAotTW9kaWZ5aW5nIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGggY2FuIGFsc28gYmUgZG9uZSB0aHJvdWdoIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5Ci11bmRlciB0aGUga2V5IDpmaWxlOmBIS0xNXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFx7dmVyc2lvbn1cXFB5dGhvblBhdGhgLgotU3Via2V5cyB3aGljaCBoYXZlIHNlbWljb2xvbi1kZWxpbWl0ZWQgcGF0aCBzdHJpbmdzIGFzIHRoZWlyIGRlZmF1bHQgdmFsdWUgd2lsbAotY2F1c2UgZWFjaCBwYXRoIHRvIGJlIHNlYXJjaGVkLiAgTXVsdGlwbGUgc3Via2V5cyBjYW4gYmUgY3JlYXRlZCBhbmQgYXJlCi1hcHBlbmRlZCB0byB0aGUgcGF0aCBpbiBhbHBoYWJldGljYWwgb3JkZXIuICBBIGNvbnZlbmllbnQgcmVnaXN0cnkgZWRpdG9yIGlzCi06cHJvZ3JhbTpgcmVnZWRpdGAgKHN0YXJ0IGl0IGJ5IHR5cGluZyAicmVnZWRpdCIgaW50byA6bWVudXNlbGVjdGlvbjpgU3RhcnQgLS0+Ci1SdW5gKS4KKyogQWRkaXRpb25hbCAiYXBwbGljYXRpb24gcGF0aHMiIGNhbiBiZSBhZGRlZCBpbiB0aGUgcmVnaXN0cnkgYXMgc3Via2V5cyBvZgorICA6c2FtcDpgXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFx7dmVyc2lvbn1cXFB5dGhvblBhdGhgIHVuZGVyIGJvdGggdGhlCisgIGBgSEtFWV9DVVJSRU5UX1VTRVJgYCBhbmQgYGBIS0VZX0xPQ0FMX01BQ0hJTkVgYCBoaXZlcy4gIFN1YmtleXMgd2hpY2ggaGF2ZQorICBzZW1pY29sb24tZGVsaW1pdGVkIHBhdGggc3RyaW5ncyBhcyB0aGVpciBkZWZhdWx0IHZhbHVlIHdpbGwgY2F1c2UgZWFjaCBwYXRoCisgIHRvIGJlIGFkZGVkIHRvIDpkYXRhOmBzeXMucGF0aGAuICAoTm90ZSB0aGF0IGFsbCBrbm93biBpbnN0YWxsZXJzIG9ubHkgdXNlCisgIEhLTE0sIHNvIEhLQ1UgaXMgdHlwaWNhbGx5IGVtcHR5LikKKworKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgUFlUSE9OSE9NRWAgaXMgc2V0LCBpdCBpcyBhc3N1bWVkIGFzCisgICJQeXRob24gSG9tZSIuICBPdGhlcndpc2UsIHRoZSBwYXRoIG9mIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlIGlzIHVzZWQgdG8KKyAgbG9jYXRlIGEgImxhbmRtYXJrIGZpbGUiIChgYExpYlxvcy5weWBgKSB0byBkZWR1Y2UgdGhlICJQeXRob24gSG9tZSIuICBJZiBhCisgIFB5dGhvbiBob21lIGlzIGZvdW5kLCB0aGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIGFkZGVkIHRvIDpkYXRhOmBzeXMucGF0aGAKKyAgKGBgTGliYGAsIGBgcGxhdC13aW5gYCwgZXRjKSBhcmUgYmFzZWQgb24gdGhhdCBmb2xkZXIuICBPdGhlcndpc2UsIHRoZSBjb3JlCisgIFB5dGhvbiBwYXRoIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIFB5dGhvblBhdGggc3RvcmVkIGluIHRoZSByZWdpc3RyeS4KKworKiBJZiB0aGUgUHl0aG9uIEhvbWUgY2Fubm90IGJlIGxvY2F0ZWQsIG5vIDplbnZ2YXI6YFBZVEhPTlBBVEhgIGlzIHNwZWNpZmllZCBpbgorICB0aGUgZW52aXJvbm1lbnQsIGFuZCBubyByZWdpc3RyeSBlbnRyaWVzIGNhbiBiZSBmb3VuZCwgYSBkZWZhdWx0IHBhdGggd2l0aAorICByZWxhdGl2ZSBlbnRyaWVzIGlzIHVzZWQgKGUuZy4gYGAuXExpYjsuXHBsYXQtd2luYGAsIGV0YykuCisKK1RoZSBlbmQgcmVzdWx0IG9mIGFsbCB0aGlzIGlzOgorCisqIFdoZW4gcnVubmluZyA6ZmlsZTpgcHl0aG9uLmV4ZWAsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbgorICBkaXJlY3RvcnkgKGVpdGhlciBhbiBpbnN0YWxsZWQgdmVyc2lvbiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgUENidWlsZAorICBkaXJlY3RvcnkpLCB0aGUgY29yZSBwYXRoIGlzIGRlZHVjZWQsIGFuZCB0aGUgY29yZSBwYXRocyBpbiB0aGUgcmVnaXN0cnkgYXJlCisgIGlnbm9yZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMiIGluIHRoZSByZWdpc3RyeSBhcmUgYWx3YXlzIHJlYWQuCisKKyogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgLmV4ZSAoZGlmZmVyZW50IGRpcmVjdG9yeSwgZW1iZWRkZWQgdmlhIENPTSwKKyAgZXRjKSwgdGhlICJQeXRob24gSG9tZSIgd2lsbCBub3QgYmUgZGVkdWNlZCwgc28gdGhlIGNvcmUgcGF0aCBmcm9tIHRoZQorICByZWdpc3RyeSBpcyB1c2VkLiAgT3RoZXIgImFwcGxpY2F0aW9uIHBhdGhzIiBpbiB0aGUgcmVnaXN0cnkgYXJlIGFsd2F5cyByZWFkLgorCisqIElmIFB5dGhvbiBjYW4ndCBmaW5kIGl0cyBob21lIGFuZCB0aGVyZSBpcyBubyByZWdpc3RyeSAoZWcsIGZyb3plbiAuZXhlLCBzb21lCisgIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGggc29tZSBkZWZhdWx0LCBidXQKKyAgcmVsYXRpdmUsIHBhdGhzLgogCiAKIEV4ZWN1dGluZyBzY3JpcHRzCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi40LnJzdCBiL0RvYy93aGF0c25ldy8yLjQucnN0CmluZGV4IDI3ZTQxMmUuLmZhZGRlNTAgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjQucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjQucnN0CkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICBkZXByZWNhdGVkIEFQSXMgYW5kIHJlbW92ZXMgc3VwcG9ydCBmb3IgUHl0aG9uIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAyLjMuICBUaGUKICAgMy4wIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UgdXNlcyBhIG5ldyBpbmNyZW1lbnRhbCBwYXJzZXIgZm9yIE1JTUUgbWVzc2FnZXMsCiAgIGF2YWlsYWJsZSBpbiB0aGUgOm1vZDpgZW1haWwuRmVlZFBhcnNlcmAgbW9kdWxlLiAgVGhlIG5ldyBwYXJzZXIgZG9lc24ndCByZXF1aXJlCi0gIHJlYWRpbmcgdGhlIGVudGlyZSBtZXNzYWdlIGludG8gbWVtb3J5LCBhbmQgZG9lc24ndCB0aHJvdyBleGNlcHRpb25zIGlmIGEKKyAgcmVhZGluZyB0aGUgZW50aXJlIG1lc3NhZ2UgaW50byBtZW1vcnksIGFuZCBkb2Vzbid0IHJhaXNlIGV4Y2VwdGlvbnMgaWYgYQogICBtZXNzYWdlIGlzIG1hbGZvcm1lZDsgaW5zdGVhZCBpdCByZWNvcmRzIGFueSBwcm9ibGVtcyBpbiB0aGUgIDphdHRyOmBkZWZlY3RgCiAgIGF0dHJpYnV0ZSBvZiB0aGUgbWVzc2FnZS4gIChEZXZlbG9wZWQgYnkgQW50aG9ueSBCYXh0ZXIsIEJhcnJ5IFdhcnNhdywgVGhvbWFzCiAgIFdvdXRlcnMsIGFuZCBvdGhlcnMuKQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNi5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi42LnJzdAppbmRleCBkYTEyNTZjLi5jY2M5N2I4IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi42LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi42LnJzdApAQCAtMjk5MiwzMyArMjk5Miw2IEBACiAgIGFyY2hpdGVjdHVyZXMgKHg4NiwgUG93ZXJQQyksIDY0LWJpdCAoeDg2LTY0IGFuZCBQUEMtNjQpLCBvciBib3RoLgogICAoQ29udHJpYnV0ZWQgYnkgUm9uYWxkIE91c3NvcmVuLikKIAotKiBBIG5ldyBmdW5jdGlvbiBhZGRlZCBpbiBQeXRob24gMi42LjYsIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCwgc2V0cwotICB0aGUgdmFsdWUgb2YgYGBzeXMuYXJndmBgIGFuZCBjYW4gb3B0aW9uYWxseSB1cGRhdGUgYGBzeXMucGF0aGBgIHRvCi0gIGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzY3JpcHQgbmFtZWQgYnkgYGBzeXMuYXJndlswXWBgCi0gIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYW4gKnVwZGF0ZXBhdGgqIHBhcmFtZXRlci4KLQotICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBjbG9zZSBhIHNlY3VyaXR5IGhvbGUgZm9yIGFwcGxpY2F0aW9ucwotICB0aGF0IGVtYmVkIFB5dGhvbi4gIFRoZSBvbGQgZnVuY3Rpb24sIDpjZnVuYzpgUHlTeXNfU2V0QXJndmAsIHdvdWxkCi0gIGFsd2F5cyB1cGRhdGUgYGBzeXMucGF0aGBgLCBhbmQgc29tZXRpbWVzIGl0IHdvdWxkIGFkZCB0aGUgY3VycmVudAotICBkaXJlY3RvcnkuICBUaGlzIG1lYW50IHRoYXQsIGlmIHlvdSByYW4gYW4gYXBwbGljYXRpb24gZW1iZWRkaW5nCi0gIFB5dGhvbiBpbiBhIGRpcmVjdG9yeSBjb250cm9sbGVkIGJ5IHNvbWVvbmUgZWxzZSwgYXR0YWNrZXJzIGNvdWxkCi0gIHB1dCBhIFRyb2phbi1ob3JzZSBtb2R1bGUgaW4gdGhlIGRpcmVjdG9yeSAoc2F5LCBhIGZpbGUgbmFtZWQKLSAgOmZpbGU6YG9zLnB5YCkgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIHdvdWxkIHRoZW4gaW1wb3J0IGFuZCBydW4uCi0KLSAgSWYgeW91IG1haW50YWluIGEgQy9DKysgYXBwbGljYXRpb24gdGhhdCBlbWJlZHMgUHl0aG9uLCBjaGVjawotICB3aGV0aGVyIHlvdSdyZSBjYWxsaW5nIDpjZnVuYzpgUHlTeXNfU2V0QXJndmAgYW5kIGNhcmVmdWxseSBjb25zaWRlcgotICB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgdXNpbmcgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgCi0gIHdpdGggKnVwZGF0ZXBhdGgqIHNldCB0byBmYWxzZS4gIE5vdGUgdGhhdCB1c2luZyB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAgYnJlYWsgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiB2ZXJzaW9ucyAyLjYuNSBhbmQgZWFybGllcjsgaWYgeW91Ci0gIGhhdmUgdG8gY29udGludWUgd29ya2luZyB3aXRoIGVhcmxpZXIgdmVyc2lvbnMsIHlvdSBjYW4gbGVhdmUKLSAgdGhlIGNhbGwgdG8gOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBhbG9uZSBhbmQgY2FsbAotICBgYFB5UnVuX1NpbXBsZVN0cmluZygic3lzLnBhdGgucG9wKDApXG4iKWBgIGFmdGVyd2FyZHMgdG8gZGlzY2FyZAotICB0aGUgZmlyc3QgYGBzeXMucGF0aGBgIGNvbXBvbmVudC4KLQotICBTZWN1cml0eSBpc3N1ZSByZXBvcnRlZCBhcyBgQ1ZFLTIwMDgtNTk4MwotICA8aHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA4LTU5ODM+YF87Ci0gIGRpc2N1c3NlZCBpbiA6aXNzdWU6YDU3NTNgLCBhbmQgZml4ZWQgYnkgQW50b2luZSBQaXRyb3UuCi0KICogVGhlIEJlcmtlbGV5REIgbW9kdWxlIG5vdyBoYXMgYSBDIEFQSSBvYmplY3QsIGF2YWlsYWJsZSBhcwogICBgYGJzZGRiLmRiLmFwaWBgLiAgIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIGJ5IG90aGVyIEMgZXh0ZW5zaW9ucwogICB0aGF0IHdpc2ggdG8gdXNlIHRoZSA6bW9kOmBic2RkYmAgbW9kdWxlIGZvciB0aGVpciBvd24gcHVycG9zZXMuCkBAIC0zMzIxLDE1ICszMjk0LDYgQEAKICAgc2NvcGluZyBydWxlcywgYWxzbyBjYXVzZSB3YXJuaW5ncyBiZWNhdXNlIHN1Y2ggY29tcGFyaXNvbnMgYXJlIGZvcmJpZGRlbgogICBlbnRpcmVseSBpbiAzLjAuCiAKLUZvciBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCBQeXRob246Ci0KLSogVGhlIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuNi42LAotICBsZXR0aW5nIGFwcGxpY2F0aW9ucyBjbG9zZSBhIHNlY3VyaXR5IGhvbGUgd2hlbiB0aGUgZXhpc3RpbmcKLSAgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBmdW5jdGlvbiB3YXMgdXNlZC4gIENoZWNrIHdoZXRoZXIgeW91J3JlCi0gIGNhbGxpbmcgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhlCi0gIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB1c2luZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aAotICAqdXBkYXRlcGF0aCogc2V0IHRvIGZhbHNlLgotCiAuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi43LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2QzYWJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL3doYXRzbmV3LzIuNy5yc3QKQEAgLTAsMCArMSwyNDc1IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNworKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis6QXV0aG9yOiBBLk0uIEt1Y2hsaW5nIChhbWsgYXQgYW1rLmNhKQorOlJlbGVhc2U6IHxyZWxlYXNlfAorOkRhdGU6IHx0b2RheXwKKworLi4gIGh5cGVybGluayBhbGwgdGhlIG1ldGhvZHMgJiBmdW5jdGlvbnMuCisKKy4uIFRfU1RSSU5HX0lOUExBQ0Ugbm90IGRlc2NyaWJlZCBpbiBtYWluIGRvY3MKKworLi4gJElkJAorICAgUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudC4gIERvIG5vdCBzcGVuZCB2ZXJ5IG11Y2ggdGltZQorICAgb24gdGhlIHdvcmRpbmcgb2YgeW91ciBjaGFuZ2VzLCBiZWNhdXNlIHlvdXIgdGV4dCB3aWxsIHByb2JhYmx5CisgICBnZXQgcmV3cml0dGVuIHRvIHNvbWUgZGVncmVlLgorCisgICAqIFRoZSBtYWludGFpbmVyIHdpbGwgZ28gdGhyb3VnaCBNaXNjL05FV1MgcGVyaW9kaWNhbGx5IGFuZCBhZGQKKyAgIGNoYW5nZXM7IGl0J3MgdGhlcmVmb3JlIG1vcmUgaW1wb3J0YW50IHRvIGFkZCB5b3VyIGNoYW5nZXMgdG8KKyAgIE1pc2MvTkVXUyB0aGFuIHRvIHRoaXMgZmlsZS4KKworICAgKiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlIGxpc3Qgb2YgZXZlcnkgc2luZ2xlIGNoYW5nZTsgY29tcGxldGVuZXNzCisgICBpcyB0aGUgcHVycG9zZSBvZiBNaXNjL05FV1MuICBTb21lIGNoYW5nZXMgSSBjb25zaWRlciB0b28gc21hbGwKKyAgIG9yIGVzb3RlcmljIHRvIGluY2x1ZGUuICBJZiBzdWNoIGEgY2hhbmdlIGlzIGFkZGVkIHRvIHRoZSB0ZXh0LAorICAgSSdsbCBqdXN0IHJlbW92ZSBpdC4gIChUaGlzIGlzIGFub3RoZXIgcmVhc29uIHlvdSBzaG91bGRuJ3Qgc3BlbmQKKyAgIHRvbyBtdWNoIHRpbWUgb24gd3JpdGluZyB5b3VyIGFkZGl0aW9uLikKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBqdXN0IGFkZCBhIGZyYWdtZW50YXJ5IG5vdGUgYWJvdXQgYSBjaGFuZ2UuICBGb3IKKyAgIGV4YW1wbGU6ICJYWFggRGVzY3JpYmUgdGhlIHRyYW5zbW9ncmlmeSgpIGZ1bmN0aW9uIGFkZGVkIHRvIHRoZQorICAgc29ja2V0IG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQuCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgaW4gYSBwYXJlbnRoZXRpY2FsIGNvbW1lbnQuCisKKyAgIFhYWCBEZXNjcmliZSB0aGUgdHJhbnNtb2dyaWZ5KCkgZnVuY3Rpb24gYWRkZWQgdG8gdGhlIHNvY2tldAorICAgbW9kdWxlLgorICAgKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyOyA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgc29tZSBlZmZvcnQgZ29pbmcgdGhyb3VnaCB0aGUgU1ZOIGxvZ3MKKyAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCisKK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBQeXRob24gMi43IHdhcyByZWxlYXNlZAorb24gSnVseSAzLCAyMDEwLgorCitOdW1lcmljIGhhbmRsaW5nIGhhcyBiZWVuIGltcHJvdmVkIGluIG1hbnkgd2F5cywgZm9yIGJvdGgKK2Zsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIGZvciB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBjbGFzcy4KK1RoZXJlIGFyZSBzb21lIHVzZWZ1bCBhZGRpdGlvbnMgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHN1Y2ggYXMgYQorZ3JlYXRseSBlbmhhbmNlZCA6bW9kOmB1bml0dGVzdGAgbW9kdWxlLCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZQorZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMsIGNvbnZlbmllbnQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgCithbmQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuQ291bnRlcmAgY2xhc3NlcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSwKK2FuZCBtYW55IG90aGVyIGltcHJvdmVtZW50cy4KKworUHl0aG9uIDIuNyBpcyBwbGFubmVkIHRvIGJlIHRoZSBsYXN0IG9mIHRoZSAyLnggcmVsZWFzZXMsIHNvIHdlIHdvcmtlZAorb24gbWFraW5nIGl0IGEgZ29vZCByZWxlYXNlIGZvciB0aGUgbG9uZyB0ZXJtLiAgVG8gaGVscCB3aXRoIHBvcnRpbmcKK3RvIFB5dGhvbiAzLCBzZXZlcmFsIG5ldyBmZWF0dXJlcyBmcm9tIHRoZSBQeXRob24gMy54IHNlcmllcyBoYXZlIGJlZW4KK2luY2x1ZGVkIGluIDIuNy4KKworVGhpcyBhcnRpY2xlIGRvZXNuJ3QgYXR0ZW1wdCB0byBwcm92aWRlIGEgY29tcGxldGUgc3BlY2lmaWNhdGlvbiBvZgordGhlIG5ldyBmZWF0dXJlcywgYnV0IGluc3RlYWQgcHJvdmlkZXMgYSBjb252ZW5pZW50IG92ZXJ2aWV3LiAgRm9yCitmdWxsIGRldGFpbHMsIHlvdSBzaG91bGQgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAyLjcgYXQKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcuIElmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBmb3IKK3RoZSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLCByZWZlciB0byB0aGUgUEVQIGZvciBhIHBhcnRpY3VsYXIgbmV3CitmZWF0dXJlIG9yIHRoZSBpc3N1ZSBvbiBodHRwOi8vYnVncy5weXRob24ub3JnIGluIHdoaWNoIGEgY2hhbmdlIHdhcworZGlzY3Vzc2VkLiAgV2hlbmV2ZXIgcG9zc2libGUsICJXaGF0J3MgTmV3IGluIFB5dGhvbiIgbGlua3MgdG8gdGhlCitidWcvcGF0Y2ggaXRlbSBmb3IgZWFjaCBjaGFuZ2UuCisKKy4uIF93aGF0c25ldzI3LXB5dGhvbjMxOgorCitUaGUgRnV0dXJlIGZvciBQeXRob24gMi54Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B5dGhvbiAyLjcgaXMgaW50ZW5kZWQgdG8gYmUgdGhlIGxhc3QgbWFqb3IgcmVsZWFzZSBpbiB0aGUgMi54IHNlcmllcy4KK1RoZSBQeXRob24gbWFpbnRhaW5lcnMgYXJlIHBsYW5uaW5nIHRvIGZvY3VzIHRoZWlyIGZ1dHVyZSBlZmZvcnRzIG9uCit0aGUgUHl0aG9uIDMueCBzZXJpZXMuCisKK1RoaXMgbWVhbnMgdGhhdCAyLjcgd2lsbCByZW1haW4gaW4gcGxhY2UgZm9yIGEgbG9uZyB0aW1lLCBydW5uaW5nCitwcm9kdWN0aW9uIHN5c3RlbXMgdGhhdCBoYXZlIG5vdCBiZWVuIHBvcnRlZCB0byBQeXRob24gMy54LgorVHdvIGNvbnNlcXVlbmNlcyBvZiB0aGUgbG9uZy10ZXJtIHNpZ25pZmljYW5jZSBvZiAyLjcgYXJlOgorCisqIEl0J3MgdmVyeSBsaWtlbHkgdGhlIDIuNyByZWxlYXNlIHdpbGwgaGF2ZSBhIGxvbmdlciBwZXJpb2Qgb2YKKyAgbWFpbnRlbmFuY2UgY29tcGFyZWQgdG8gZWFybGllciAyLnggdmVyc2lvbnMuICBQeXRob24gMi43IHdpbGwKKyAgY29udGludWUgdG8gYmUgbWFpbnRhaW5lZCB3aGlsZSB0aGUgdHJhbnNpdGlvbiB0byAzLnggY29udGludWVzLCBhbmQKKyAgdGhlIGRldmVsb3BlcnMgYXJlIHBsYW5uaW5nIHRvIHN1cHBvcnQgUHl0aG9uIDIuNyB3aXRoIGJ1Zy1maXgKKyAgcmVsZWFzZXMgYmV5b25kIHRoZSB0eXBpY2FsIHR3byB5ZWFycy4KKworKiBBIHBvbGljeSBkZWNpc2lvbiB3YXMgbWFkZSB0byBzaWxlbmNlIHdhcm5pbmdzIG9ubHkgb2YgaW50ZXJlc3QgdG8KKyAgZGV2ZWxvcGVycy4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgYW5kIGl0cworICBkZXNjZW5kYW50cyBhcmUgbm93IGlnbm9yZWQgdW5sZXNzIG90aGVyd2lzZSByZXF1ZXN0ZWQsIHByZXZlbnRpbmcKKyAgdXNlcnMgZnJvbSBzZWVpbmcgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IGFuIGFwcGxpY2F0aW9uLiAgVGhpcyBjaGFuZ2UKKyAgd2FzIGFsc28gbWFkZSBpbiB0aGUgYnJhbmNoIHRoYXQgd2lsbCBiZWNvbWUgUHl0aG9uIDMuMi4gKERpc2N1c3NlZAorICBvbiBzdGRsaWItc2lnIGFuZCBjYXJyaWVkIG91dCBpbiA6aXNzdWU6YDczMTlgLikKKworICBJbiBwcmV2aW91cyByZWxlYXNlcywgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyB3ZXJlCisgIGVuYWJsZWQgYnkgZGVmYXVsdCwgcHJvdmlkaW5nIFB5dGhvbiBkZXZlbG9wZXJzIHdpdGggYSBjbGVhcgorICBpbmRpY2F0aW9uIG9mIHdoZXJlIHRoZWlyIGNvZGUgbWF5IGJyZWFrIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24KKyAgb2YgUHl0aG9uLgorCisgIEhvd2V2ZXIsIHRoZXJlIGFyZSBpbmNyZWFzaW5nbHkgbWFueSB1c2VycyBvZiBQeXRob24tYmFzZWQKKyAgYXBwbGljYXRpb25zIHdobyBhcmUgbm90IGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBkZXZlbG9wbWVudCBvZgorICB0aG9zZSBhcHBsaWNhdGlvbnMuICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIGFyZQorICBpcnJlbGV2YW50IHRvIHN1Y2ggdXNlcnMsIG1ha2luZyB0aGVtIHdvcnJ5IGFib3V0IGFuIGFwcGxpY2F0aW9uCisgIHRoYXQncyBhY3R1YWxseSB3b3JraW5nIGNvcnJlY3RseSBhbmQgYnVyZGVuaW5nIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMKKyAgd2l0aCByZXNwb25kaW5nIHRvIHRoZXNlIGNvbmNlcm5zLgorCisgIFlvdSBjYW4gcmUtZW5hYmxlIGRpc3BsYXkgb2YgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyBieQorICBydW5uaW5nIFB5dGhvbiB3aXRoIHRoZSA6b3B0aW9uOmAtV2RlZmF1bHQgPC1XPmAgKHNob3J0IGZvcm06CisgIDpvcHRpb246YC1XZCA8LVc+YCkgc3dpdGNoLCBvciBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYGAiZGVmYXVsdCJgYCAob3IgYGAiZCJgYCkgYmVmb3JlIHJ1bm5pbmcKKyAgUHl0aG9uLiAgUHl0aG9uIGNvZGUgY2FuIGFsc28gcmUtZW5hYmxlIHRoZW0KKyAgYnkgY2FsbGluZyBgYHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpYGAuCisKKworUHl0aG9uIDMuMSBGZWF0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworTXVjaCBhcyBQeXRob24gMi42IGluY29ycG9yYXRlZCBmZWF0dXJlcyBmcm9tIFB5dGhvbiAzLjAsCit2ZXJzaW9uIDIuNyBpbmNvcnBvcmF0ZXMgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzCitpbiBQeXRob24gMy4xLiAgVGhlIDIueCBzZXJpZXMgY29udGludWVzIHRvIHByb3ZpZGUgdG9vbHMKK2ZvciBtaWdyYXRpbmcgdG8gdGhlIDMueCBzZXJpZXMuCisKK0EgcGFydGlhbCBsaXN0IG9mIDMuMSBmZWF0dXJlcyB0aGF0IHdlcmUgYmFja3BvcnRlZCB0byAyLjc6CisKKyogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIChgYHsxLDIsM31gYCBpcyBhIG11dGFibGUgc2V0KS4KKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHtpOiBpKjIgZm9yIGkgaW4gcmFuZ2UoMyl9YGApLgorKiBNdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGluIGEgc2luZ2xlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisqIEEgbmV3IHZlcnNpb24gb2YgdGhlIDptb2Q6YGlvYCBsaWJyYXJ5LCByZXdyaXR0ZW4gaW4gQyBmb3IgcGVyZm9ybWFuY2UuCisqIFRoZSBvcmRlcmVkLWRpY3Rpb25hcnkgdHlwZSBkZXNjcmliZWQgaW4gOnJlZjpgcGVwLTAzNzJgLgorKiBUaGUgbmV3IGBgIiwiYGAgZm9ybWF0IHNwZWNpZmllciBkZXNjcmliZWQgaW4gOnJlZjpgcGVwLTAzNzhgLgorKiBUaGUgOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3QuCisqIEEgc21hbGwgc3Vic2V0IG9mIHRoZSA6bW9kOmBpbXBvcnRsaWJgIG1vZHVsZSwKKyAgYGRlc2NyaWJlZCBiZWxvdyA8I2ltcG9ydGxpYi1zZWN0aW9uPmBfXy4KKyogVGhlIDpmdW5jOmByZXByYCBvZiBhIGZsb2F0IGBgeGBgIGlzIHNob3J0ZXIgaW4gbWFueSBjYXNlczogaXQncyBub3cKKyAgYmFzZWQgb24gdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nIHRoYXQncyBndWFyYW50ZWVkIHRvIHJvdW5kIGJhY2sKKyAgdG8gYGB4YGAuICBBcyBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24sIGl0J3MgZ3VhcmFudGVlZCB0aGF0CisgIGBgZmxvYXQocmVwcih4KSlgYCByZWNvdmVycyBgYHhgYC4KKyogRmxvYXQtdG8tc3RyaW5nIGFuZCBzdHJpbmctdG8tZmxvYXQgY29udmVyc2lvbnMgYXJlIGNvcnJlY3RseSByb3VuZGVkLgorICBUaGUgOmZ1bmM6YHJvdW5kYCBmdW5jdGlvbiBpcyBhbHNvIG5vdyBjb3JyZWN0bHkgcm91bmRlZC4KKyogVGhlIDpjdHlwZTpgUHlDYXBzdWxlYCB0eXBlLCB1c2VkIHRvIHByb3ZpZGUgYSBDIEFQSSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuCisqIFRoZSA6Y2Z1bmM6YFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvd2AgQyBBUEkgZnVuY3Rpb24uCisKK090aGVyIG5ldyBQeXRob24zLW1vZGUgd2FybmluZ3MgaW5jbHVkZToKKworKiA6ZnVuYzpgb3BlcmF0b3IuaXNDYWxsYWJsZWAgYW5kIDpmdW5jOmBvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzYCwKKyAgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gMy54LCBub3cgdHJpZ2dlciB3YXJuaW5ncy4KKyogVGhlIDpvcHRpb246YC0zYCBzd2l0Y2ggbm93IGF1dG9tYXRpY2FsbHkKKyAgZW5hYmxlcyB0aGUgOm9wdGlvbjpgLVF3YXJuIDwtUT5gIHN3aXRjaCB0aGF0IGNhdXNlcyB3YXJuaW5ncworICBhYm91dCB1c2luZyBjbGFzc2ljIGRpdmlzaW9uIHdpdGggaW50ZWdlcnMgYW5kIGxvbmcgaW50ZWdlcnMuCisKKworCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy4uIExhcmdlLCBQRVAtbGV2ZWwgZmVhdHVyZXMgYW5kIGNoYW5nZXMgc2hvdWxkIGJlIGRlc2NyaWJlZCBoZXJlLgorLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIF9wZXAtMDM3MjoKKworUEVQIDM3MjogQWRkaW5nIGFuIE9yZGVyZWQgRGljdGlvbmFyeSB0byBjb2xsZWN0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWd1bGFyIFB5dGhvbiBkaWN0aW9uYXJpZXMgaXRlcmF0ZSBvdmVyIGtleS92YWx1ZSBwYWlycyBpbiBhcmJpdHJhcnkgb3JkZXIuCitPdmVyIHRoZSB5ZWFycywgYSBudW1iZXIgb2YgYXV0aG9ycyBoYXZlIHdyaXR0ZW4gYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zCit0aGF0IHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IHRoZSBrZXlzIHdlcmUgb3JpZ2luYWxseSBpbnNlcnRlZC4gIEJhc2VkIG9uCit0aGUgZXhwZXJpZW5jZXMgZnJvbSB0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIDIuNyBpbnRyb2R1Y2VzIGEgbmV3Cis6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgY2xhc3MgaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUuCisKK1RoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgQVBJIHByb3ZpZGVzIHRoZSBzYW1lIGludGVyZmFjZSBhcyByZWd1bGFyCitkaWN0aW9uYXJpZXMgYnV0IGl0ZXJhdGVzIG92ZXIga2V5cyBhbmQgdmFsdWVzIGluIGEgZ3VhcmFudGVlZCBvcmRlcgorZGVwZW5kaW5nIG9uIHdoZW4gYSBrZXkgd2FzIGZpcnN0IGluc2VydGVkOjoKKworICAgID4+PiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorICAgID4+PiBkID0gT3JkZXJlZERpY3QoWygnZmlyc3QnLCAxKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAoJ3NlY29uZCcsIDIpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICgndGhpcmQnLCAzKV0pCisgICAgPj4+IGQuaXRlbXMoKQorICAgIFsoJ2ZpcnN0JywgMSksICgnc2Vjb25kJywgMiksICgndGhpcmQnLCAzKV0KKworSWYgYSBuZXcgZW50cnkgb3ZlcndyaXRlcyBhbiBleGlzdGluZyBlbnRyeSwgdGhlIG9yaWdpbmFsIGluc2VydGlvbgorcG9zaXRpb24gaXMgbGVmdCB1bmNoYW5nZWQ6OgorCisgICAgPj4+IGRbJ3NlY29uZCddID0gNAorICAgID4+PiBkLml0ZW1zKCkKKyAgICBbKCdmaXJzdCcsIDEpLCAoJ3NlY29uZCcsIDQpLCAoJ3RoaXJkJywgMyldCisKK0RlbGV0aW5nIGFuIGVudHJ5IGFuZCByZWluc2VydGluZyBpdCB3aWxsIG1vdmUgaXQgdG8gdGhlIGVuZDo6CisKKyAgICA+Pj4gZGVsIGRbJ3NlY29uZCddCisgICAgPj4+IGRbJ3NlY29uZCddID0gNQorICAgID4+PiBkLml0ZW1zKCkKKyAgICBbKCdmaXJzdCcsIDEpLCAoJ3RoaXJkJywgMyksICgnc2Vjb25kJywgNSldCisKK1RoZSA6bWV0aDpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LnBvcGl0ZW1gIG1ldGhvZCBoYXMgYW4gb3B0aW9uYWwgKmxhc3QqCithcmd1bWVudCB0aGF0IGRlZmF1bHRzIHRvIFRydWUuICBJZiAqbGFzdCogaXMgVHJ1ZSwgdGhlIG1vc3QgcmVjZW50bHkKK2FkZGVkIGtleSBpcyByZXR1cm5lZCBhbmQgcmVtb3ZlZDsgaWYgaXQncyBGYWxzZSwgdGhlCitvbGRlc3Qga2V5IGlzIHNlbGVjdGVkOjoKKworICAgID4+PiBvZCA9IE9yZGVyZWREaWN0KFsoeCwwKSBmb3IgeCBpbiByYW5nZSgyMCldKQorICAgID4+PiBvZC5wb3BpdGVtKCkKKyAgICAoMTksIDApCisgICAgPj4+IG9kLnBvcGl0ZW0oKQorICAgICgxOCwgMCkKKyAgICA+Pj4gb2QucG9waXRlbShsYXN0PUZhbHNlKQorICAgICgwLCAwKQorICAgID4+PiBvZC5wb3BpdGVtKGxhc3Q9RmFsc2UpCisgICAgKDEsIDApCisKK0NvbXBhcmluZyB0d28gb3JkZXJlZCBkaWN0aW9uYXJpZXMgY2hlY2tzIGJvdGggdGhlIGtleXMgYW5kIHZhbHVlcywKK2FuZCByZXF1aXJlcyB0aGF0IHRoZSBpbnNlcnRpb24gb3JkZXIgd2FzIHRoZSBzYW1lOjoKKworICAgID4+PiBvZDEgPSBPcmRlcmVkRGljdChbKCdmaXJzdCcsIDEpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgKCdzZWNvbmQnLCAyKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICgndGhpcmQnLCAzKV0pCisgICAgPj4+IG9kMiA9IE9yZGVyZWREaWN0KFsoJ3RoaXJkJywgMyksCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAoJ2ZpcnN0JywgMSksCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAoJ3NlY29uZCcsIDIpXSkKKyAgICA+Pj4gb2QxID09IG9kMgorICAgIEZhbHNlCisgICAgPj4+ICMgTW92ZSAndGhpcmQnIGtleSB0byB0aGUgZW5kCisgICAgPj4+IGRlbCBvZDJbJ3RoaXJkJ107IG9kMlsndGhpcmQnXSA9IDMKKyAgICA+Pj4gb2QxID09IG9kMgorICAgIFRydWUKKworQ29tcGFyaW5nIGFuIDpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCB3aXRoIGEgcmVndWxhciBkaWN0aW9uYXJ5CitpZ25vcmVzIHRoZSBpbnNlcnRpb24gb3JkZXIgYW5kIGp1c3QgY29tcGFyZXMgdGhlIGtleXMgYW5kIHZhbHVlcy4KKworSG93IGRvZXMgdGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCB3b3JrPyAgSXQgbWFpbnRhaW5zIGEKK2RvdWJseS1saW5rZWQgbGlzdCBvZiBrZXlzLCBhcHBlbmRpbmcgbmV3IGtleXMgdG8gdGhlIGxpc3QgYXMgdGhleSdyZSBpbnNlcnRlZC4KK0Egc2Vjb25kYXJ5IGRpY3Rpb25hcnkgbWFwcyBrZXlzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGlzdCBub2RlLCBzbworZGVsZXRpb24gZG9lc24ndCBoYXZlIHRvIHRyYXZlcnNlIHRoZSBlbnRpcmUgbGlua2VkIGxpc3QgYW5kIHRoZXJlZm9yZQorcmVtYWlucyBPKDEpLgorCitUaGUgc3RhbmRhcmQgbGlicmFyeSBub3cgc3VwcG9ydHMgdXNlIG9mIG9yZGVyZWQgZGljdGlvbmFyaWVzIGluIHNldmVyYWwKK21vZHVsZXMuCisKKyogVGhlIDptb2Q6YENvbmZpZ1BhcnNlcmAgbW9kdWxlIHVzZXMgdGhlbSBieSBkZWZhdWx0LCBtZWFuaW5nIHRoYXQKKyAgY29uZmlndXJhdGlvbiBmaWxlcyBjYW4gbm93IGJlIHJlYWQsIG1vZGlmaWVkLCBhbmQgdGhlbiB3cml0dGVuIGJhY2sKKyAgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIuCisKKyogVGhlIDptZXRoOmB+Y29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2FzZGljdCgpYCBtZXRob2QgZm9yCisgIDpmdW5jOmBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBub3cgcmV0dXJucyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgd2l0aCB0aGUKKyAgdmFsdWVzIGFwcGVhcmluZyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdW5kZXJseWluZyB0dXBsZSBpbmRpY2VzLgorCisqIFRoZSA6bW9kOmBqc29uYCBtb2R1bGUncyA6Y2xhc3M6YH5qc29uLkpTT05EZWNvZGVyYCBjbGFzcworICBjb25zdHJ1Y3RvciB3YXMgZXh0ZW5kZWQgd2l0aCBhbiAqb2JqZWN0X3BhaXJzX2hvb2sqIHBhcmFtZXRlciB0bworICBhbGxvdyA6Y2xhc3M6YE9yZGVyZWREaWN0YCBpbnN0YW5jZXMgdG8gYmUgYnVpbHQgYnkgdGhlIGRlY29kZXIuCisgIFN1cHBvcnQgd2FzIGFsc28gYWRkZWQgZm9yIHRoaXJkLXBhcnR5IHRvb2xzIGxpa2UKKyAgYFB5WUFNTCA8aHR0cDovL3B5eWFtbC5vcmcvPmBfLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzcyYCAtIEFkZGluZyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgdG8gY29sbGVjdGlvbnMKKyAgICAgUEVQIHdyaXR0ZW4gYnkgQXJtaW4gUm9uYWNoZXIgYW5kIFJheW1vbmQgSGV0dGluZ2VyOworICAgICBpbXBsZW1lbnRlZCBieSBSYXltb25kIEhldHRpbmdlci4KKworLi4gX3BlcC0wMzc4OgorCitQRVAgMzc4OiBGb3JtYXQgU3BlY2lmaWVyIGZvciBUaG91c2FuZHMgU2VwYXJhdG9yCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIG1ha2UgcHJvZ3JhbSBvdXRwdXQgbW9yZSByZWFkYWJsZSwgaXQgY2FuIGJlIHVzZWZ1bCB0byBhZGQKK3NlcGFyYXRvcnMgdG8gbGFyZ2UgbnVtYmVycywgcmVuZGVyaW5nIHRoZW0gYXMKKzE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE2IGluc3RlYWQgb2YgMTg0NDY3NDQwNzM3MDk1NTE2MTYuCisKK1RoZSBmdWxseSBnZW5lcmFsIHNvbHV0aW9uIGZvciBkb2luZyB0aGlzIGlzIHRoZSA6bW9kOmBsb2NhbGVgIG1vZHVsZSwKK3doaWNoIGNhbiB1c2UgZGlmZmVyZW50IHNlcGFyYXRvcnMgKCIsIiBpbiBOb3J0aCBBbWVyaWNhLCAiLiIgaW4KK0V1cm9wZSkgYW5kIGRpZmZlcmVudCBncm91cGluZyBzaXplcywgYnV0IDptb2Q6YGxvY2FsZWAgaXMgY29tcGxpY2F0ZWQKK3RvIHVzZSBhbmQgdW5zdWl0YWJsZSBmb3IgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zIHdoZXJlIGRpZmZlcmVudAordGhyZWFkcyBhcmUgcHJvZHVjaW5nIG91dHB1dCBmb3IgZGlmZmVyZW50IGxvY2FsZXMuCisKK1RoZXJlZm9yZSwgYSBzaW1wbGUgY29tbWEtZ3JvdXBpbmcgbWVjaGFuaXNtIGhhcyBiZWVuIGFkZGVkIHRvIHRoZQorbWluaS1sYW5ndWFnZSB1c2VkIGJ5IHRoZSA6bWV0aDpgc3RyLmZvcm1hdGAgbWV0aG9kLiAgV2hlbgorZm9ybWF0dGluZyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgc2ltcGx5IGluY2x1ZGUgYSBjb21tYSBiZXR3ZWVuIHRoZQord2lkdGggYW5kIHRoZSBwcmVjaXNpb246OgorCisgICA+Pj4gJ3s6MjAsLjJmfScuZm9ybWF0KDE4NDQ2NzQ0MDczNzA5NTUxNjE2LjApCisgICAnMTgsNDQ2LDc0NCwwNzMsNzA5LDU1MSw2MTYuMDAnCisKK1doZW4gZm9ybWF0dGluZyBhbiBpbnRlZ2VyLCBpbmNsdWRlIHRoZSBjb21tYSBhZnRlciB0aGUgd2lkdGg6CisKKyAgID4+PiAnezoyMCxkfScuZm9ybWF0KDE4NDQ2NzQ0MDczNzA5NTUxNjE2KQorICAgJzE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE2JworCitUaGlzIG1lY2hhbmlzbSBpcyBub3QgYWRhcHRhYmxlIGF0IGFsbDsgY29tbWFzIGFyZSBhbHdheXMgdXNlZCBhcyB0aGUKK3NlcGFyYXRvciBhbmQgdGhlIGdyb3VwaW5nIGlzIGFsd2F5cyBpbnRvIHRocmVlLWRpZ2l0IGdyb3Vwcy4gIFRoZQorY29tbWEtZm9ybWF0dGluZyBtZWNoYW5pc20gaXNuJ3QgYXMgZ2VuZXJhbCBhcyB0aGUgOm1vZDpgbG9jYWxlYAorbW9kdWxlLCBidXQgaXQncyBlYXNpZXIgdG8gdXNlLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzc4YCAtIEZvcm1hdCBTcGVjaWZpZXIgZm9yIFRob3VzYW5kcyBTZXBhcmF0b3IKKyAgICAgUEVQIHdyaXR0ZW4gYnkgUmF5bW9uZCBIZXR0aW5nZXI7IGltcGxlbWVudGVkIGJ5IEVyaWMgU21pdGguCisKK1BFUCAzODk6IFRoZSBhcmdwYXJzZSBNb2R1bGUgZm9yIFBhcnNpbmcgQ29tbWFuZCBMaW5lcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGZvciBwYXJzaW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgd2FzCithZGRlZCBhcyBhIG1vcmUgcG93ZXJmdWwgcmVwbGFjZW1lbnQgZm9yIHRoZQorOm1vZDpgb3B0cGFyc2VgIG1vZHVsZS4KKworVGhpcyBtZWFucyBQeXRob24gbm93IHN1cHBvcnRzIHRocmVlIGRpZmZlcmVudCBtb2R1bGVzIGZvciBwYXJzaW5nCitjb21tYW5kLWxpbmUgYXJndW1lbnRzOiA6bW9kOmBnZXRvcHRgLCA6bW9kOmBvcHRwYXJzZWAsIGFuZAorOm1vZDpgYXJncGFyc2VgLiAgVGhlIDptb2Q6YGdldG9wdGAgbW9kdWxlIGNsb3NlbHkgcmVzZW1ibGVzIHRoZSBDCitsaWJyYXJ5J3MgOmNmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uLCBzbyBpdCByZW1haW5zIHVzZWZ1bCBpZiB5b3UncmUgd3JpdGluZyBhCitQeXRob24gcHJvdG90eXBlIHRoYXQgd2lsbCBldmVudHVhbGx5IGJlIHJld3JpdHRlbiBpbiBDLgorOm1vZDpgb3B0cGFyc2VgIGJlY29tZXMgcmVkdW5kYW50LCBidXQgdGhlcmUgYXJlIG5vIHBsYW5zIHRvIHJlbW92ZSBpdAorYmVjYXVzZSB0aGVyZSBhcmUgbWFueSBzY3JpcHRzIHN0aWxsIHVzaW5nIGl0LCBhbmQgdGhlcmUncyBubworYXV0b21hdGVkIHdheSB0byB1cGRhdGUgdGhlc2Ugc2NyaXB0cy4gIChNYWtpbmcgdGhlIDptb2Q6YGFyZ3BhcnNlYAorQVBJIGNvbnNpc3RlbnQgd2l0aCA6bW9kOmBvcHRwYXJzZWAncyBpbnRlcmZhY2Ugd2FzIGRpc2N1c3NlZCBidXQKK3JlamVjdGVkIGFzIHRvbyBtZXNzeSBhbmQgZGlmZmljdWx0LikKKworSW4gc2hvcnQsIGlmIHlvdSdyZSB3cml0aW5nIGEgbmV3IHNjcmlwdCBhbmQgZG9uJ3QgbmVlZCB0byB3b3JyeQorYWJvdXQgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLCB1c2UKKzptb2Q6YGFyZ3BhcnNlYCBpbnN0ZWFkIG9mIDptb2Q6YG9wdHBhcnNlYC4KKworSGVyZSdzIGFuIGV4YW1wbGU6OgorCisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nQ29tbWFuZC1saW5lIGV4YW1wbGUuJykKKworICAgICMgQWRkIG9wdGlvbmFsIHN3aXRjaGVzCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdpc192ZXJib3NlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Byb2R1Y2UgdmVyYm9zZSBvdXRwdXQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J291dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RpcmVjdCBvdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0ZG91dCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLUMnLCBhY3Rpb249J3N0b3JlJywgdHlwZT1pbnQsIGRlc3Q9J2NvbnRleHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nTlVNJywgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlzcGxheSBOVU0gbGluZXMgb2YgYWRkZWQgY29udGV4dCcpCisKKyAgICAjIEFsbG93IGFueSBudW1iZXIgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMuCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudChuYXJncz0nKicsIGFjdGlvbj0nc3RvcmUnLCBkZXN0PSdpbnB1dHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naW5wdXQgZmlsZW5hbWVzIChkZWZhdWx0IGlzIHN0ZGluKScpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHByaW50IGFyZ3MuX19kaWN0X18KKworVW5sZXNzIHlvdSBvdmVycmlkZSBpdCwgOm9wdGlvbjpgLWhgIGFuZCA6b3B0aW9uOmAtLWhlbHBgIHN3aXRjaGVzCithcmUgYXV0b21hdGljYWxseSBhZGRlZCwgYW5kIHByb2R1Y2UgbmVhdGx5IGZvcm1hdHRlZCBvdXRwdXQ6OgorCisgICAgLT4gLi9weXRob24uZXhlIGFyZ3BhcnNlLWV4YW1wbGUucHkgLS1oZWxwCisgICAgdXNhZ2U6IGFyZ3BhcnNlLWV4YW1wbGUucHkgWy1oXSBbLXZdIFstbyBGSUxFXSBbLUMgTlVNXSBbaW5wdXRzIFtpbnB1dHMgLi4uXV0KKworICAgIENvbW1hbmQtbGluZSBleGFtcGxlLgorCisgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICBpbnB1dHMgICAgICBpbnB1dCBmaWxlbmFtZXMgKGRlZmF1bHQgaXMgc3RkaW4pCisKKyAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAtdiAgICAgICAgICBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0CisgICAgICAtbyBGSUxFICAgICBkaXJlY3Qgb3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGRvdXQKKyAgICAgIC1DIE5VTSAgICAgIGRpc3BsYXkgTlVNIGxpbmVzIG9mIGFkZGVkIGNvbnRleHQKKworQXMgd2l0aCA6bW9kOmBvcHRwYXJzZWAsIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgYW5kIGFyZ3VtZW50cworYXJlIHJldHVybmVkIGFzIGFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgbmFtZWQgYnkgdGhlICpkZXN0KiBwYXJhbWV0ZXJzOjoKKworICAgIC0+IC4vcHl0aG9uLmV4ZSBhcmdwYXJzZS1leGFtcGxlLnB5IC12CisgICAgeydvdXRwdXQnOiBOb25lLAorICAgICAnaXNfdmVyYm9zZSc6IFRydWUsCisgICAgICdjb250ZXh0JzogMCwKKyAgICAgJ2lucHV0cyc6IFtdfQorCisgICAgLT4gLi9weXRob24uZXhlIGFyZ3BhcnNlLWV4YW1wbGUucHkgLXYgLW8gL3RtcC9vdXRwdXQgLUMgNCBmaWxlMSBmaWxlMgorICAgIHsnb3V0cHV0JzogJy90bXAvb3V0cHV0JywKKyAgICAgJ2lzX3ZlcmJvc2UnOiBUcnVlLAorICAgICAnY29udGV4dCc6IDQsCisgICAgICdpbnB1dHMnOiBbJ2ZpbGUxJywgJ2ZpbGUyJ119CisKKzptb2Q6YGFyZ3BhcnNlYCBoYXMgbXVjaCBmYW5jaWVyIHZhbGlkYXRpb24gdGhhbiA6bW9kOmBvcHRwYXJzZWA7IHlvdQorY2FuIHNwZWNpZnkgYW4gZXhhY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcyBhbiBpbnRlZ2VyLCAwIG9yIG1vcmUKK2FyZ3VtZW50cyBieSBwYXNzaW5nIGBgJyonYGAsIDEgb3IgbW9yZSBieSBwYXNzaW5nIGBgJysnYGAsIG9yIGFuCitvcHRpb25hbCBhcmd1bWVudCB3aXRoIGBgJz8nYGAuICBBIHRvcC1sZXZlbCBwYXJzZXIgY2FuIGNvbnRhaW4KK3N1Yi1wYXJzZXJzIHRvIGRlZmluZSBzdWJjb21tYW5kcyB0aGF0IGhhdmUgZGlmZmVyZW50IHNldHMgb2YKK3N3aXRjaGVzLCBhcyBpbiBgYHN2biBjb21taXRgYCwgYGBzdm4gY2hlY2tvdXRgYCwgZXRjLiAgWW91IGNhbgorc3BlY2lmeSBhbiBhcmd1bWVudCdzIHR5cGUgYXMgOmNsYXNzOmB+YXJncGFyc2UuRmlsZVR5cGVgLCB3aGljaCB3aWxsCithdXRvbWF0aWNhbGx5IG9wZW4gZmlsZXMgZm9yIHlvdSBhbmQgdW5kZXJzdGFuZHMgdGhhdCBgYCctJ2BgIG1lYW5zCitzdGFuZGFyZCBpbnB1dCBvciBvdXRwdXQuCisKKy4uIHNlZWFsc286OgorCisgICA6bW9kOmBhcmdwYXJzZWAgZG9jdW1lbnRhdGlvbgorICAgICBUaGUgZG9jdW1lbnRhdGlvbiBwYWdlIG9mIHRoZSBhcmdwYXJzZSBtb2R1bGUuCisKKyAgIDpyZWY6YGFyZ3BhcnNlLWZyb20tb3B0cGFyc2VgCisgICAgIFBhcnQgb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBkZXNjcmliaW5nIGhvdyB0byBjb252ZXJ0CisgICAgIGNvZGUgdGhhdCB1c2VzIDptb2Q6YG9wdHBhcnNlYC4KKworICAgOnBlcDpgMzg5YCAtIGFyZ3BhcnNlIC0gTmV3IENvbW1hbmQgTGluZSBQYXJzaW5nIE1vZHVsZQorICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEJldGhhcmQuCisKK1BFUCAzOTE6IERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgOm1vZDpgbG9nZ2luZ2AgbW9kdWxlIGlzIHZlcnkgZmxleGlibGU7IGFwcGxpY2F0aW9ucyBjYW4gZGVmaW5lCithIHRyZWUgb2YgbG9nZ2luZyBzdWJzeXN0ZW1zLCBhbmQgZWFjaCBsb2dnZXIgaW4gdGhpcyB0cmVlIGNhbiBmaWx0ZXIKK291dCBjZXJ0YWluIG1lc3NhZ2VzLCBmb3JtYXQgdGhlbSBkaWZmZXJlbnRseSwgYW5kIGRpcmVjdCBtZXNzYWdlcyB0bworYSB2YXJ5aW5nIG51bWJlciBvZiBoYW5kbGVycy4KKworQWxsIHRoaXMgZmxleGliaWxpdHkgY2FuIHJlcXVpcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbi4gIFlvdSBjYW4KK3dyaXRlIFB5dGhvbiBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBvYmplY3RzIGFuZCBzZXQgdGhlaXIgcHJvcGVydGllcywKK2J1dCBhIGNvbXBsZXggc2V0LXVwIHJlcXVpcmVzIHZlcmJvc2UgYnV0IGJvcmluZyBjb2RlLgorOm1vZDpgbG9nZ2luZ2AgYWxzbyBzdXBwb3J0cyBhIDpmdW5jOmB+bG9nZ2luZy5maWxlQ29uZmlnYAorZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBmaWxlLCBidXQgdGhlIGZpbGUgZm9ybWF0IGRvZXNuJ3Qgc3VwcG9ydAorY29uZmlndXJpbmcgZmlsdGVycywgYW5kIGl0J3MgbWVzc2llciB0byBnZW5lcmF0ZSBwcm9ncmFtbWF0aWNhbGx5LgorCitQeXRob24gMi43IGFkZHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZGljdENvbmZpZ2AgZnVuY3Rpb24gdGhhdAordXNlcyBhIGRpY3Rpb25hcnkgdG8gY29uZmlndXJlIGxvZ2dpbmcuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvCitwcm9kdWNlIGEgZGljdGlvbmFyeSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOiBjb25zdHJ1Y3Qgb25lIHdpdGggY29kZTsKK3BhcnNlIGEgZmlsZSBjb250YWluaW5nIEpTT047IG9yIHVzZSBhIFlBTUwgcGFyc2luZyBsaWJyYXJ5IGlmIG9uZSBpcworaW5zdGFsbGVkLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIHR3byBsb2dnZXJzLCB0aGUgcm9vdCBsb2dnZXIgYW5kIGEKK2xvZ2dlciBuYW1lZCAibmV0d29yayIuICBNZXNzYWdlcyBzZW50IHRvIHRoZSByb290IGxvZ2dlciB3aWxsIGJlCitzZW50IHRvIHRoZSBzeXN0ZW0gbG9nIHVzaW5nIHRoZSBzeXNsb2cgcHJvdG9jb2wsIGFuZCBtZXNzYWdlcwordG8gdGhlICJuZXR3b3JrIiBsb2dnZXIgd2lsbCBiZSB3cml0dGVuIHRvIGEgOmZpbGU6YG5ldHdvcmsubG9nYCBmaWxlCit0aGF0IHdpbGwgYmUgcm90YXRlZCBvbmNlIHRoZSBsb2cgcmVhY2hlcyAxTUIuCisKKzo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCBsb2dnaW5nLmNvbmZpZworCisgICAgY29uZmlnZGljdCA9IHsKKyAgICAgJ3ZlcnNpb24nOiAxLCAgICAjIENvbmZpZ3VyYXRpb24gc2NoZW1hIGluIHVzZTsgbXVzdCBiZSAxIGZvciBub3cKKyAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAnc3RhbmRhcmQnOiB7CisgICAgICAgICAgICAgJ2Zvcm1hdCc6ICgnJShhc2N0aW1lKXMgJShuYW1lKS0xNXMgJworICAgICAgICAgICAgICAgICAgICAgICAgJyUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcycpfX0sCisKKyAgICAgJ2hhbmRsZXJzJzogeyduZXRsb2cnOiB7J2JhY2t1cENvdW50JzogMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJy9sb2dzL25ldHdvcmsubG9nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3N0YW5kYXJkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ21heEJ5dGVzJzogMTAwMDAwMH0sCisgICAgICAgICAgICAgICAgICAnc3lzbG9nJzogeydjbGFzcyc6ICdsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3N0YW5kYXJkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xldmVsJzogJ0VSUk9SJ319LAorCisgICAgICMgU3BlY2lmeSBhbGwgdGhlIHN1Ym9yZGluYXRlIGxvZ2dlcnMKKyAgICAgJ2xvZ2dlcnMnOiB7CisgICAgICAgICAgICAgICAgICduZXR3b3JrJzogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ25ldGxvZyddCisgICAgICAgICAgICAgICAgIH0KKyAgICAgfSwKKyAgICAgIyBTcGVjaWZ5IHByb3BlcnRpZXMgb2YgdGhlIHJvb3QgbG9nZ2VyCisgICAgICdyb290JzogeworICAgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ3N5c2xvZyddCisgICAgIH0sCisgICAgfQorCisgICAgIyBTZXQgdXAgY29uZmlndXJhdGlvbgorICAgIGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoY29uZmlnZGljdCkKKworICAgICMgQXMgYW4gZXhhbXBsZSwgbG9nIHR3byBlcnJvciBtZXNzYWdlcworICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCcvJykKKyAgICBsb2dnZXIuZXJyb3IoJ0RhdGFiYXNlIG5vdCBmb3VuZCcpCisKKyAgICBuZXRsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbmV0d29yaycpCisgICAgbmV0bG9nZ2VyLmVycm9yKCdDb25uZWN0aW9uIGZhaWxlZCcpCisKK1RocmVlIHNtYWxsZXIgZW5oYW5jZW1lbnRzIHRvIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUsIGFsbAoraW1wbGVtZW50ZWQgYnkgVmluYXkgU2FqaXAsIGFyZToKKworLi4gcmV2NzkyOTMKKworKiBUaGUgOmNsYXNzOmB+bG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyYCBjbGFzcyBub3cgc3VwcG9ydHMKKyAgc3lzbG9nZ2luZyBvdmVyIFRDUC4gIFRoZSBjb25zdHJ1Y3RvciBoYXMgYSAqc29ja3R5cGUqIHBhcmFtZXRlcgorICBnaXZpbmcgdGhlIHR5cGUgb2Ygc29ja2V0IHRvIHVzZSwgZWl0aGVyIDpjb25zdDpgc29ja2V0LlNPQ0tfREdSQU1gCisgIGZvciBVRFAgb3IgOmNvbnN0OmBzb2NrZXQuU09DS19TVFJFQU1gIGZvciBUQ1AuICBUaGUgZGVmYXVsdAorICBwcm90b2NvbCByZW1haW5zIFVEUC4KKworKiA6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlcmAgaW5zdGFuY2VzIGdhaW5lZCBhIDptZXRoOmB+bG9nZ2luZy5Mb2dnZXIuZ2V0Q2hpbGRgCisgIG1ldGhvZCB0aGF0IHJldHJpZXZlcyBhIGRlc2NlbmRhbnQgbG9nZ2VyIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4KKyAgRm9yIGV4YW1wbGUsIG9uY2UgeW91IHJldHJpZXZlIGEgbG9nZ2VyIGJ5IGRvaW5nIGBgbG9nID0gZ2V0TG9nZ2VyKCdhcHAnKWBgLAorICBjYWxsaW5nIGBgbG9nLmdldENoaWxkKCduZXR3b3JrLmxpc3RlbicpYGAgaXMgZXF1aXZhbGVudCB0bworICBgYGdldExvZ2dlcignYXBwLm5ldHdvcmsubGlzdGVuJylgYC4KKworKiBUaGUgOmNsYXNzOmB+bG9nZ2luZy5Mb2dnZXJBZGFwdGVyYCBjbGFzcyBnYWluZWQgYQorICA6bWV0aDpgfmxvZ2dpbmcuTG9nZ2VyQWRhcHRlci5pc0VuYWJsZWRGb3JgIG1ldGhvZCB0aGF0IHRha2VzIGEKKyAgKmxldmVsKiBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciB3b3VsZAorICBwcm9jZXNzIGEgbWVzc2FnZSBvZiB0aGF0IGxldmVsIG9mIGltcG9ydGFuY2UuCisKKy4uIFhYWDogTG9nZ2VyIG9iamVjdHMgZG9uJ3QgaGF2ZSBhIGNsYXNzIGRlY2xhcmF0aW9uIHNvIHRoZSBsaW5rIGRvbid0IHdvcmsKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM5MWAgLSBEaWN0aW9uYXJ5LUJhc2VkIENvbmZpZ3VyYXRpb24gRm9yIExvZ2dpbmcKKyAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCitQRVAgMzEwNjogRGljdGlvbmFyeSBWaWV3cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZGljdGlvbmFyeSBtZXRob2RzIDptZXRoOmB+ZGljdC5rZXlzYCwgOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZAorOm1ldGg6YH5kaWN0Lml0ZW1zYCBhcmUgZGlmZmVyZW50IGluIFB5dGhvbiAzLnguICBUaGV5IHJldHVybiBhbiBvYmplY3QKK2NhbGxlZCBhIDpkZm46YHZpZXdgIGluc3RlYWQgb2YgYSBmdWxseSBtYXRlcmlhbGl6ZWQgbGlzdC4KKworSXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIHRoZSByZXR1cm4gdmFsdWVzIG9mIDptZXRoOmB+ZGljdC5rZXlzYCwKKzptZXRoOmB+ZGljdC52YWx1ZXNgLCBhbmQgOm1ldGg6YH5kaWN0Lml0ZW1zYCBpbiBQeXRob24gMi43IGJlY2F1c2UKK3RvbyBtdWNoIGNvZGUgd291bGQgYnJlYWsuICBJbnN0ZWFkIHRoZSAzLnggdmVyc2lvbnMgd2VyZSBhZGRlZAordW5kZXIgdGhlIG5ldyBuYW1lcyA6bWV0aDpgfmRpY3Qudmlld2tleXNgLCA6bWV0aDpgfmRpY3Qudmlld3ZhbHVlc2AsCithbmQgOm1ldGg6YH5kaWN0LnZpZXdpdGVtc2AuCisKKzo6CisKKyAgICA+Pj4gZCA9IGRpY3QoKGkqMTAsIGNocig2NStpKSkgZm9yIGkgaW4gcmFuZ2UoMjYpKQorICAgID4+PiBkCisgICAgezA6ICdBJywgMTMwOiAnTicsIDEwOiAnQicsIDE0MDogJ08nLCAyMDogLi4uLCAyNTA6ICdaJ30KKyAgICA+Pj4gZC52aWV3a2V5cygpCisgICAgZGljdF9rZXlzKFswLCAxMzAsIDEwLCAxNDAsIDIwLCAxNTAsIDMwLCAuLi4sIDI1MF0pCisKK1ZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBidXQgdGhlIGtleSBhbmQgaXRlbSB2aWV3cyBhbHNvIGJlaGF2ZQorbGlrZSBzZXRzLiAgVGhlIGBgJmBgIG9wZXJhdG9yIHBlcmZvcm1zIGludGVyc2VjdGlvbiwgYW5kIGBgfGBgCitwZXJmb3JtcyBhIHVuaW9uOjoKKworICAgID4+PiBkMSA9IGRpY3QoKGkqMTAsIGNocig2NStpKSkgZm9yIGkgaW4gcmFuZ2UoMjYpKQorICAgID4+PiBkMiA9IGRpY3QoKGkqKi41LCBpKSBmb3IgaSBpbiByYW5nZSgxMDAwKSkKKyAgICA+Pj4gZDEudmlld2tleXMoKSAmIGQyLnZpZXdrZXlzKCkKKyAgICBzZXQoWzAuMCwgMTAuMCwgMjAuMCwgMzAuMF0pCisgICAgPj4+IGQxLnZpZXdrZXlzKCkgfCByYW5nZSgwLCAzMCkKKyAgICBzZXQoWzAsIDEsIDEzMCwgMywgNCwgNSwgNiwgLi4uLCAxMjAsIDI1MF0pCisKK1RoZSB2aWV3IGtlZXBzIHRyYWNrIG9mIHRoZSBkaWN0aW9uYXJ5IGFuZCBpdHMgY29udGVudHMgY2hhbmdlIGFzIHRoZQorZGljdGlvbmFyeSBpcyBtb2RpZmllZDo6CisKKyAgICA+Pj4gdmsgPSBkLnZpZXdrZXlzKCkKKyAgICA+Pj4gdmsKKyAgICBkaWN0X2tleXMoWzAsIDEzMCwgMTAsIC4uLiwgMjUwXSkKKyAgICA+Pj4gZFsyNjBdID0gJyYnCisgICAgPj4+IHZrCisgICAgZGljdF9rZXlzKFswLCAxMzAsIDI2MCwgMTAsIC4uLiwgMjUwXSkKKworSG93ZXZlciwgbm90ZSB0aGF0IHlvdSBjYW4ndCBhZGQgb3IgcmVtb3ZlIGtleXMgd2hpbGUgeW91J3JlIGl0ZXJhdGluZworb3ZlciB0aGUgdmlldzo6CisKKyAgICA+Pj4gZm9yIGsgaW4gdms6CisgICAgLi4uICAgICBkW2sqMl0gPSBrCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBSdW50aW1lRXJyb3I6IGRpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24KKworWW91IGNhbiB1c2UgdGhlIHZpZXcgbWV0aG9kcyBpbiBQeXRob24gMi54IGNvZGUsIGFuZCB0aGUgMnRvMworY29udmVydGVyIHdpbGwgY2hhbmdlIHRoZW0gdG8gdGhlIHN0YW5kYXJkIDptZXRoOmB+ZGljdC5rZXlzYCwKKzptZXRoOmB+ZGljdC52YWx1ZXNgLCBhbmQgOm1ldGg6YH5kaWN0Lml0ZW1zYCBtZXRob2RzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzEwNmAgLSBSZXZhbXBpbmcgZGljdC5rZXlzKCksIC52YWx1ZXMoKSBhbmQgLml0ZW1zKCkKKyAgICAgUEVQIHdyaXR0ZW4gYnkgR3VpZG8gdmFuIFJvc3N1bS4KKyAgICAgQmFja3BvcnRlZCB0byAyLjcgYnkgQWxleGFuZHJlIFZhc3NhbG90dGk7IDppc3N1ZTpgMTk2N2AuCisKKworUEVQIDMxMzc6IFRoZSBtZW1vcnl2aWV3IE9iamVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3QgcHJvdmlkZXMgYSB2aWV3IG9mIGFub3RoZXIgb2JqZWN0J3MKK21lbW9yeSBjb250ZW50IHRoYXQgbWF0Y2hlcyB0aGUgOmNsYXNzOmBieXRlc2AgdHlwZSdzIGludGVyZmFjZS4KKworICAgID4+PiBpbXBvcnQgc3RyaW5nCisgICAgPj4+IG0gPSBtZW1vcnl2aWV3KHN0cmluZy5sZXR0ZXJzKQorICAgID4+PiBtCisgICAgPG1lbW9yeSBhdCAweDM3Zjg1MD4KKyAgICA+Pj4gbGVuKG0pICAgICAgICAgICAjIFJldHVybnMgbGVuZ3RoIG9mIHVuZGVybHlpbmcgb2JqZWN0CisgICAgNTIKKyAgICA+Pj4gbVswXSwgbVsyNV0sIG1bMjZdICAgIyBJbmRleGluZyByZXR1cm5zIG9uZSBieXRlCisgICAgKCdhJywgJ3onLCAnQScpCisgICAgPj4+IG0yID0gbVswOjI2XSAgICAgICAgICMgU2xpY2luZyByZXR1cm5zIGFub3RoZXIgbWVtb3J5dmlldworICAgID4+PiBtMgorICAgIDxtZW1vcnkgYXQgMHgzN2YwODA+CisKK1RoZSBjb250ZW50IG9mIHRoZSB2aWV3IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgb2YgYnl0ZXMgb3IKK2EgbGlzdCBvZiBpbnRlZ2VyczoKKworICAgID4+PiBtMi50b2J5dGVzKCkKKyAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgPj4+IG0yLnRvbGlzdCgpCisgICAgWzk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgLi4uIDEyMSwgMTIyXQorICAgID4+PgorCis6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMgYWxsb3cgbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpZgoraXQncyBhIG11dGFibGUgb2JqZWN0LgorCisgICAgPj4+IG0yWzBdID0gNzUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogY2Fubm90IG1vZGlmeSByZWFkLW9ubHkgbWVtb3J5CisgICAgPj4+IGIgPSBieXRlYXJyYXkoc3RyaW5nLmxldHRlcnMpICAjIENyZWF0aW5nIGEgbXV0YWJsZSBvYmplY3QKKyAgICA+Pj4gYgorICAgIGJ5dGVhcnJheShiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonKQorICAgID4+PiBtYiA9IG1lbW9yeXZpZXcoYikKKyAgICA+Pj4gbWJbMF0gPSAnKicgICAgICAgICAjIEFzc2lnbiB0byB2aWV3LCBjaGFuZ2luZyB0aGUgYnl0ZWFycmF5LgorICAgID4+PiBiWzA6NV0gICAgICAgICAgICAgICMgVGhlIGJ5dGVhcnJheSBoYXMgYmVlbiBjaGFuZ2VkLgorICAgIGJ5dGVhcnJheShiJypiY2RlJykKKyAgICA+Pj4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxMzdgIC0gSW1tdXRhYmxlIEJ5dGVzIGFuZCBNdXRhYmxlIEJ1ZmZlcgorICAgICBQRVAgd3JpdHRlbiBieSBHdWlkbyB2YW4gUm9zc3VtLgorICAgICBJbXBsZW1lbnRlZCBieSBUcmF2aXMgT2xpcGhhbnQsIEFudG9pbmUgUGl0cm91IGFuZCBvdGhlcnMuCisgICAgIEJhY2twb3J0ZWQgdG8gMi43IGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDIzOTZgLgorCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIGhhcyBiZWVuIGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMy54LgorICBDdXJseSBicmFja2V0cyBhcmUgdXNlZCB0byBzdXJyb3VuZCB0aGUgY29udGVudHMgb2YgdGhlIHJlc3VsdGluZworICBtdXRhYmxlIHNldDsgc2V0IGxpdGVyYWxzIGFyZQorICBkaXN0aW5ndWlzaGVkIGZyb20gZGljdGlvbmFyaWVzIGJ5IG5vdCBjb250YWluaW5nIGNvbG9ucyBhbmQgdmFsdWVzLgorICBgYHt9YGAgY29udGludWVzIHRvIHJlcHJlc2VudCBhbiBlbXB0eSBkaWN0aW9uYXJ5OyB1c2UKKyAgYGBzZXQoKWBgIGZvciBhbiBlbXB0eSBzZXQuCisKKyAgICA+Pj4gezEsIDIsIDMsIDQsIDV9CisgICAgc2V0KFsxLCAyLCAzLCA0LCA1XSkKKyAgICA+Pj4gc2V0KCkgIyBlbXB0eSBzZXQKKyAgICBzZXQoW10pCisgICAgPj4+IHt9ICAgICMgZW1wdHkgZGljdAorICAgIHt9CisKKyAgQmFja3BvcnRlZCBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aTsgOmlzc3VlOmAyMzM1YC4KKworKiBEaWN0aW9uYXJ5IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgYXJlIGFub3RoZXIgZmVhdHVyZSBiYWNrcG9ydGVkIGZyb20KKyAgMy54LCBnZW5lcmFsaXppbmcgbGlzdC9nZW5lcmF0b3IgY29tcHJlaGVuc2lvbnMgdG8gdXNlCisgIHRoZSBsaXRlcmFsIHN5bnRheCBmb3Igc2V0cyBhbmQgZGljdGlvbmFyaWVzLgorCisgICAgPj4+IHt4OiB4KnggZm9yIHggaW4gcmFuZ2UoNil9CisgICAgezA6IDAsIDE6IDEsIDI6IDQsIDM6IDksIDQ6IDE2LCA1OiAyNX0KKyAgICA+Pj4geygnYScqeCkgZm9yIHggaW4gcmFuZ2UoNil9CisgICAgc2V0KFsnJywgJ2EnLCAnYWEnLCAnYWFhJywgJ2FhYWEnLCAnYWFhYWEnXSkKKworICBCYWNrcG9ydGVkIGJ5IEFsZXhhbmRyZSBWYXNzYWxvdHRpOyA6aXNzdWU6YDIzMzNgLgorCisqIFRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGNhbiBub3cgdXNlIG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMKKyAgaW4gb25lIHN0YXRlbWVudC4gIENvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBmcm9tIGxlZnQgdG8gcmlnaHQKKyAgYW5kIGVhY2ggb25lIGlzIHRyZWF0ZWQgYXMgYmVnaW5uaW5nIGEgbmV3IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisgIFRoaXMgbWVhbnMgdGhhdDo6CisKKyAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOgorICAgICAgIC4uLiBzdWl0ZSBvZiBzdGF0ZW1lbnRzIC4uLgorCisgIGlzIGVxdWl2YWxlbnQgdG86OgorCisgICB3aXRoIEEoKSBhcyBhOgorICAgICAgIHdpdGggQigpIGFzIGI6CisgICAgICAgICAgIC4uLiBzdWl0ZSBvZiBzdGF0ZW1lbnRzIC4uLgorCisgIFRoZSA6ZnVuYzpgY29udGV4dGxpYi5uZXN0ZWRgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdmVyeSBzaW1pbGFyCisgIGZ1bmN0aW9uLCBzbyBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgYW5kIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCisKKyAgKFByb3Bvc2VkIGluIGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzUzMDk0OyBpbXBsZW1lbnRlZCBieQorICBHZW9yZyBCcmFuZGwuKQorCisqIENvbnZlcnNpb25zIGJldHdlZW4gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhbmQgc3RyaW5ncyBhcmUKKyAgbm93IGNvcnJlY3RseSByb3VuZGVkIG9uIG1vc3QgcGxhdGZvcm1zLiAgVGhlc2UgY29udmVyc2lvbnMgb2NjdXIKKyAgaW4gbWFueSBkaWZmZXJlbnQgcGxhY2VzOiA6ZnVuYzpgc3RyYCBvbgorICBmbG9hdHMgYW5kIGNvbXBsZXggbnVtYmVyczsgdGhlIDpjbGFzczpgZmxvYXRgIGFuZCA6Y2xhc3M6YGNvbXBsZXhgCisgIGNvbnN0cnVjdG9yczsKKyAgbnVtZXJpYyBmb3JtYXR0aW5nOyBzZXJpYWxpemluZyBhbmQKKyAgZGVzZXJpYWxpemluZyBmbG9hdHMgYW5kIGNvbXBsZXggbnVtYmVycyB1c2luZyB0aGUKKyAgOm1vZDpgbWFyc2hhbGAsIDptb2Q6YHBpY2tsZWAKKyAgYW5kIDptb2Q6YGpzb25gIG1vZHVsZXM7CisgIHBhcnNpbmcgb2YgZmxvYXQgYW5kIGltYWdpbmFyeSBsaXRlcmFscyBpbiBQeXRob24gY29kZTsKKyAgYW5kIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAtdG8tZmxvYXQgY29udmVyc2lvbi4KKworICBSZWxhdGVkIHRvIHRoaXMsIHRoZSA6ZnVuYzpgcmVwcmAgb2YgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKngqCisgIG5vdyByZXR1cm5zIGEgcmVzdWx0IGJhc2VkIG9uIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZyB0aGF0J3MKKyAgZ3VhcmFudGVlZCB0byByb3VuZCBiYWNrIHRvICp4KiB1bmRlciBjb3JyZWN0IHJvdW5kaW5nICh3aXRoCisgIHJvdW5kLWhhbGYtdG8tZXZlbiByb3VuZGluZyBtb2RlKS4gIFByZXZpb3VzbHkgaXQgZ2F2ZSBhIHN0cmluZworICBiYXNlZCBvbiByb3VuZGluZyB4IHRvIDE3IGRlY2ltYWwgZGlnaXRzLgorCisgIC4uIG1heWJlIGFkZCBhbiBleGFtcGxlPworCisgIFRoZSByb3VuZGluZyBsaWJyYXJ5IHJlc3BvbnNpYmxlIGZvciB0aGlzIGltcHJvdmVtZW50IHdvcmtzIG9uCisgIFdpbmRvd3MgYW5kIG9uIFVuaXggcGxhdGZvcm1zIHVzaW5nIHRoZSBnY2MsIGljYywgb3Igc3VuY2MKKyAgY29tcGlsZXJzLiAgVGhlcmUgbWF5IGJlIGEgc21hbGwgbnVtYmVyIG9mIHBsYXRmb3JtcyB3aGVyZSBjb3JyZWN0CisgIG9wZXJhdGlvbiBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGd1YXJhbnRlZWQsIHNvIHRoZSBjb2RlIGlzIG5vdAorICB1c2VkIG9uIHN1Y2ggc3lzdGVtcy4gIFlvdSBjYW4gZmluZCBvdXQgd2hpY2ggY29kZSBpcyBiZWluZyB1c2VkCisgIGJ5IGNoZWNraW5nIDpkYXRhOmBzeXMuZmxvYXRfcmVwcl9zdHlsZWAsICB3aGljaCB3aWxsIGJlIGBgc2hvcnRgYAorICBpZiB0aGUgbmV3IGNvZGUgaXMgaW4gdXNlIGFuZCBgYGxlZ2FjeWBgIGlmIGl0IGlzbid0LgorCisgIEltcGxlbWVudGVkIGJ5IEVyaWMgU21pdGggYW5kIE1hcmsgRGlja2luc29uLCB1c2luZyBEYXZpZCBHYXkncworICA6ZmlsZTpgZHRvYS5jYCBsaWJyYXJ5OyA6aXNzdWU6YDcxMTdgLgorCisqIENvbnZlcnNpb25zIGZyb20gbG9uZyBpbnRlZ2VycyBhbmQgcmVndWxhciBpbnRlZ2VycyB0byBmbG9hdGluZworICBwb2ludCBub3cgcm91bmQgZGlmZmVyZW50bHksIHJldHVybmluZyB0aGUgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgIGNsb3Nlc3QgdG8gdGhlIG51bWJlci4gIFRoaXMgZG9lc24ndCBtYXR0ZXIgZm9yIHNtYWxsIGludGVnZXJzIHRoYXQKKyAgY2FuIGJlIGNvbnZlcnRlZCBleGFjdGx5LCBidXQgZm9yIGxhcmdlIG51bWJlcnMgdGhhdCB3aWxsCisgIHVuYXZvaWRhYmx5IGxvc2UgcHJlY2lzaW9uLCBQeXRob24gMi43IG5vdyBhcHByb3hpbWF0ZXMgbW9yZQorICBjbG9zZWx5LiAgRm9yIGV4YW1wbGUsIFB5dGhvbiAyLjYgY29tcHV0ZWQgdGhlIGZvbGxvd2luZzo6CisKKyAgICA+Pj4gbiA9IDI5NTE0NzkwNTE3OTM1Mjg5MTM5MQorICAgID4+PiBmbG9hdChuKQorICAgIDIuOTUxNDc5MDUxNzkzNTI4M2UrMjAKKyAgICA+Pj4gbiAtIGxvbmcoZmxvYXQobikpCisgICAgNjU1MzVMCisKKyAgUHl0aG9uIDIuNydzIGZsb2F0aW5nLXBvaW50IHJlc3VsdCBpcyBsYXJnZXIsIGJ1dCBtdWNoIGNsb3NlciB0byB0aGUKKyAgdHJ1ZSB2YWx1ZTo6CisKKyAgICA+Pj4gbiA9IDI5NTE0NzkwNTE3OTM1Mjg5MTM5MQorICAgID4+PiBmbG9hdChuKQorICAgIDIuOTUxNDc5MDUxNzkzNTI4OWUrMjAKKyAgICA+Pj4gbiAtIGxvbmcoZmxvYXQobikpCisgICAgLTFMCisKKyAgKEltcGxlbWVudGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDMxNjZgLikKKworICBJbnRlZ2VyIGRpdmlzaW9uIGlzIGFsc28gbW9yZSBhY2N1cmF0ZSBpbiBpdHMgcm91bmRpbmcgYmVoYXZpb3Vycy4gIChBbHNvCisgIGltcGxlbWVudGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDE4MTFgLikKKworKiBJbXBsaWNpdCBjb2VyY2lvbiBmb3IgY29tcGxleCBudW1iZXJzIGhhcyBiZWVuIHJlbW92ZWQ7IHRoZSBpbnRlcnByZXRlcgorICB3aWxsIG5vIGxvbmdlciBldmVyIGF0dGVtcHQgdG8gY2FsbCBhIDptZXRoOmBfX2NvZXJjZV9fYCBtZXRob2Qgb24gY29tcGxleAorICBvYmplY3RzLiAgKFJlbW92ZWQgYnkgTWVhZG9yIEluZ2UgYW5kIE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDUyMTFgLikKKworKiBUaGUgOm1ldGg6YHN0ci5mb3JtYXRgIG1ldGhvZCBub3cgc3VwcG9ydHMgYXV0b21hdGljIG51bWJlcmluZyBvZiB0aGUgcmVwbGFjZW1lbnQKKyAgZmllbGRzLiAgVGhpcyBtYWtlcyB1c2luZyA6bWV0aDpgc3RyLmZvcm1hdGAgbW9yZSBjbG9zZWx5IHJlc2VtYmxlIHVzaW5nCisgIGBgJXNgYCBmb3JtYXR0aW5nOjoKKworICAgID4+PiAne306e306e30nLmZvcm1hdCgyMDA5LCAwNCwgJ1N1bmRheScpCisgICAgJzIwMDk6NDpTdW5kYXknCisgICAgPj4+ICd7fTp7fTp7ZGF5fScuZm9ybWF0KDIwMDksIDQsIGRheT0nU3VuZGF5JykKKyAgICAnMjAwOTo0OlN1bmRheScKKworICBUaGUgYXV0by1udW1iZXJpbmcgdGFrZXMgdGhlIGZpZWxkcyBmcm9tIGxlZnQgdG8gcmlnaHQsIHNvIHRoZSBmaXJzdCBgYHsuLi59YGAKKyAgc3BlY2lmaWVyIHdpbGwgdXNlIHRoZSBmaXJzdCBhcmd1bWVudCB0byA6bWV0aDpgc3RyLmZvcm1hdGAsIHRoZSBuZXh0CisgIHNwZWNpZmllciB3aWxsIHVzZSB0aGUgbmV4dCBhcmd1bWVudCwgYW5kIHNvIG9uLiAgWW91IGNhbid0IG1peCBhdXRvLW51bWJlcmluZworICBhbmQgZXhwbGljaXQgbnVtYmVyaW5nIC0tIGVpdGhlciBudW1iZXIgYWxsIG9mIHlvdXIgc3BlY2lmaWVyIGZpZWxkcyBvciBub25lCisgIG9mIHRoZW0gLS0gYnV0IHlvdSBjYW4gbWl4IGF1dG8tbnVtYmVyaW5nIGFuZCBuYW1lZCBmaWVsZHMsIGFzIGluIHRoZSBzZWNvbmQKKyAgZXhhbXBsZSBhYm92ZS4gIChDb250cmlidXRlZCBieSBFcmljIFNtaXRoOyA6aXNzdWU6YDUyMzdgLikKKworICBDb21wbGV4IG51bWJlcnMgbm93IGNvcnJlY3RseSBzdXBwb3J0IHVzYWdlIHdpdGggOmZ1bmM6YGZvcm1hdGAsCisgIGFuZCBkZWZhdWx0IHRvIGJlaW5nIHJpZ2h0LWFsaWduZWQuCisgIFNwZWNpZnlpbmcgYSBwcmVjaXNpb24gb3IgY29tbWEtc2VwYXJhdGlvbiBhcHBsaWVzIHRvIGJvdGggdGhlIHJlYWwKKyAgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiB0aGUgbnVtYmVyLCBidXQgYSBzcGVjaWZpZWQgZmllbGQgd2lkdGggYW5kCisgIGFsaWdubWVudCBpcyBhcHBsaWVkIHRvIHRoZSB3aG9sZSBvZiB0aGUgcmVzdWx0aW5nIGBgMS41KzNqYGAKKyAgb3V0cHV0LiAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMgU21pdGg7IDppc3N1ZTpgMTU4OGAgYW5kIDppc3N1ZTpgNzk4OGAuKQorCisgIFRoZSAnRicgZm9ybWF0IGNvZGUgbm93IGFsd2F5cyBmb3JtYXRzIGl0cyBvdXRwdXQgdXNpbmcgdXBwZXJjYXNlIGNoYXJhY3RlcnMsCisgIHNvIGl0IHdpbGwgbm93IHByb2R1Y2UgJ0lORicgYW5kICdOQU4nLgorICAoQ29udHJpYnV0ZWQgYnkgRXJpYyBTbWl0aDsgOmlzc3VlOmAzMzgyYC4pCisKKyAgQSBsb3ctbGV2ZWwgY2hhbmdlOiB0aGUgOm1ldGg6YG9iamVjdC5fX2Zvcm1hdF9fYCBtZXRob2Qgbm93IHRyaWdnZXJzCisgIGEgOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AgaWYgaXQncyBwYXNzZWQgYSBmb3JtYXQgc3RyaW5nLAorICBiZWNhdXNlIHRoZSA6bWV0aDpgX19mb3JtYXRfX2AgbWV0aG9kIGZvciA6Y2xhc3M6YG9iamVjdGAgY29udmVydHMKKyAgdGhlIG9iamVjdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbmQgZm9ybWF0cyB0aGF0LiAgUHJldmlvdXNseQorICB0aGUgbWV0aG9kIHNpbGVudGx5IGFwcGxpZWQgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdGhlIHN0cmluZworICByZXByZXNlbnRhdGlvbiwgYnV0IHRoYXQgY291bGQgaGlkZSBtaXN0YWtlcyBpbiBQeXRob24gY29kZS4gIElmCisgIHlvdSdyZSBzdXBwbHlpbmcgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBzdWNoIGFzIGFuIGFsaWdubWVudCBvcgorICBwcmVjaXNpb24sIHByZXN1bWFibHkgeW91J3JlIGV4cGVjdGluZyB0aGUgZm9ybWF0dGluZyB0byBiZSBhcHBsaWVkCisgIGluIHNvbWUgb2JqZWN0LXNwZWNpZmljIHdheS4gIChGaXhlZCBieSBFcmljIFNtaXRoOyA6aXNzdWU6YDc5OTRgLikKKworKiBUaGUgOmZ1bmM6YGludGAgYW5kIDpmdW5jOmBsb25nYCB0eXBlcyBnYWluZWQgYSBgYGJpdF9sZW5ndGhgYAorICBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50CisgIGl0cyBhcmd1bWVudCBpbiBiaW5hcnk6OgorCisgICAgICA+Pj4gbiA9IDM3CisgICAgICA+Pj4gYmluKG4pCisgICAgICAnMGIxMDAxMDEnCisgICAgICA+Pj4gbi5iaXRfbGVuZ3RoKCkKKyAgICAgIDYKKyAgICAgID4+PiBuID0gMioqMTIzLTEKKyAgICAgID4+PiBuLmJpdF9sZW5ndGgoKQorICAgICAgMTIzCisgICAgICA+Pj4gKG4rMSkuYml0X2xlbmd0aCgpCisgICAgICAxMjQKKworICAoQ29udHJpYnV0ZWQgYnkgRnJlZHJpayBKb2hhbnNzb24gYW5kIFZpY3RvciBTdGlubmVyOyA6aXNzdWU6YDM0MzlgLikKKworKiBUaGUgOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50IHdpbGwgbm8gbG9uZ2VyIHRyeSBhIHJlbGF0aXZlIGltcG9ydAorICBpZiBhbiBhYnNvbHV0ZSBpbXBvcnQgKGUuZy4gYGBmcm9tIC5vcyBpbXBvcnQgc2VwYGApIGZhaWxzLiAgVGhpcworICBmaXhlcyBhIGJ1ZywgYnV0IGNvdWxkIHBvc3NpYmx5IGJyZWFrIGNlcnRhaW4gOmtleXdvcmQ6YGltcG9ydGAKKyAgc3RhdGVtZW50cyB0aGF0IHdlcmUgb25seSB3b3JraW5nIGJ5IGFjY2lkZW50LiAgKEZpeGVkIGJ5IE1lYWRvciBJbmdlOworICA6aXNzdWU6YDc5MDJgLikKKworKiBJdCdzIG5vdyBwb3NzaWJsZSBmb3IgYSBzdWJjbGFzcyBvZiB0aGUgYnVpbHQtaW4gOmNsYXNzOmB1bmljb2RlYCB0eXBlCisgIHRvIG92ZXJyaWRlIHRoZSA6bWV0aDpgX191bmljb2RlX19gIG1ldGhvZC4gIChJbXBsZW1lbnRlZCBieQorICBWaWN0b3IgU3Rpbm5lcjsgOmlzc3VlOmAxNTgzODYzYC4pCisKKyogVGhlIDpjbGFzczpgYnl0ZWFycmF5YCB0eXBlJ3MgOm1ldGg6YH5ieXRlYXJyYXkudHJhbnNsYXRlYCBtZXRob2Qgbm93IGFjY2VwdHMKKyAgYGBOb25lYGAgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LiAgKEZpeGVkIGJ5IEdlb3JnIEJyYW5kbDsKKyAgOmlzc3VlOmA0NzU5YC4pCisKKyAgLi4gWFhYIGJ5dGVhcnJheSBkb2Vzbid0IHNlZW0gdG8gYmUgZG9jdW1lbnRlZAorCisqIFdoZW4gdXNpbmcgYGBAY2xhc3NtZXRob2RgYCBhbmQgYGBAc3RhdGljbWV0aG9kYGAgdG8gd3JhcAorICBtZXRob2RzIGFzIGNsYXNzIG9yIHN0YXRpYyBtZXRob2RzLCB0aGUgd3JhcHBlciBvYmplY3Qgbm93CisgIGV4cG9zZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gYXMgdGhlaXIgOmF0dHI6YF9fZnVuY19fYCBhdHRyaWJ1dGUuCisgIChDb250cmlidXRlZCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYywgYWZ0ZXIgYSBzdWdnZXN0aW9uIGJ5CisgIEdlb3JnZSBTYWtraXM7IDppc3N1ZTpgNTk4MmAuKQorCisqIFdoZW4gYSByZXN0cmljdGVkIHNldCBvZiBhdHRyaWJ1dGVzIHdlcmUgc2V0IHVzaW5nIGBgX19zbG90c19fYGAsCisgIGRlbGV0aW5nIGFuIHVuc2V0IGF0dHJpYnV0ZSB3b3VsZCBub3QgcmFpc2UgOmV4YzpgQXR0cmlidXRlRXJyb3JgCisgIGFzIHlvdSB3b3VsZCBleHBlY3QuICBGaXhlZCBieSBCZW5qYW1pbiBQZXRlcnNvbjsgOmlzc3VlOmA3NjA0YC4pCisKKyogVHdvIG5ldyBlbmNvZGluZ3MgYXJlIG5vdyBzdXBwb3J0ZWQ6ICJjcDcyMCIsIHVzZWQgcHJpbWFyaWx5IGZvcgorICBBcmFiaWMgdGV4dDsgYW5kICJjcDg1OCIsIGEgdmFyaWFudCBvZiBDUCA4NTAgdGhhdCBhZGRzIHRoZSBldXJvCisgIHN5bWJvbC4gIChDUDcyMCBjb250cmlidXRlZCBieSBBbGV4YW5kZXIgQmVsY2hlbmtvIGFuZCBBbWF1cnkKKyAgRm9yZ2VvdCBkJ0FyYyBpbiA6aXNzdWU6YDE2MTY5NzlgOyBDUDg1OCBjb250cmlidXRlZCBieSBUaW0gSGF0Y2ggaW4KKyAgOmlzc3VlOmA4MDE2YC4pCisKKyogVGhlIDpjbGFzczpgZmlsZWAgb2JqZWN0IHdpbGwgbm93IHNldCB0aGUgOmF0dHI6YGZpbGVuYW1lYCBhdHRyaWJ1dGUKKyAgb24gdGhlIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBvcGVuIGEgZGlyZWN0b3J5CisgIG9uIFBPU0lYIHBsYXRmb3JtcyAobm90ZWQgYnkgSmFuIEthbGlzemV3c2tpOyA6aXNzdWU6YDQ3NjRgKSwgYW5kCisgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYW5kIGZvcmJpZHMgd3JpdGluZyB0byByZWFkLW9ubHkgZmlsZSBvYmplY3RzCisgIGluc3RlYWQgb2YgdHJ1c3RpbmcgdGhlIEMgbGlicmFyeSB0byBjYXRjaCBhbmQgcmVwb3J0IHRoZSBlcnJvcgorICAoZml4ZWQgYnkgU3RlZmFuIEtyYWg7IDppc3N1ZTpgNTY3N2ApLgorCisqIFRoZSBQeXRob24gdG9rZW5pemVyIG5vdyB0cmFuc2xhdGVzIGxpbmUgZW5kaW5ncyBpdHNlbGYsIHNvIHRoZQorICA6ZnVuYzpgY29tcGlsZWAgYnVpbHQtaW4gZnVuY3Rpb24gbm93IGFjY2VwdHMgY29kZSB1c2luZyBhbnkKKyAgbGluZS1lbmRpbmcgY29udmVudGlvbi4gIEFkZGl0aW9uYWxseSwgaXQgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoYXQgdGhlCisgIGNvZGUgZW5kIGluIGEgbmV3bGluZS4KKworKiBFeHRyYSBwYXJlbnRoZXNlcyBpbiBmdW5jdGlvbiBkZWZpbml0aW9ucyBhcmUgaWxsZWdhbCBpbiBQeXRob24gMy54LAorICBtZWFuaW5nIHRoYXQgeW91IGdldCBhIHN5bnRheCBlcnJvciBmcm9tIGBgZGVmIGYoKHgpKTogcGFzc2BgLiAgSW4KKyAgUHl0aG9uMy13YXJuaW5nIG1vZGUsIFB5dGhvbiAyLjcgd2lsbCBub3cgd2FybiBhYm91dCB0aGlzIG9kZCB1c2FnZS4KKyAgKE5vdGVkIGJ5IEphbWVzIExpbmdhcmQ7IDppc3N1ZTpgNzM2MmAuKQorCisqIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGNyZWF0ZSB3ZWFrIHJlZmVyZW5jZXMgdG8gb2xkLXN0eWxlIGNsYXNzCisgIG9iamVjdHMuICBOZXctc3R5bGUgY2xhc3NlcyB3ZXJlIGFsd2F5cyB3ZWFrLXJlZmVyZW5jZWFibGUuICAoRml4ZWQKKyAgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODI2OGAuKQorCisqIFdoZW4gYSBtb2R1bGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCB0aGUgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcworICBub3cgb25seSBjbGVhcmVkIGlmIG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlCisgIGRpY3Rpb25hcnkgKDppc3N1ZTpgNzE0MGApLgorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIF9uZXctMjctaW50ZXJwcmV0ZXI6CisKK0ludGVycHJldGVyIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGUsIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYCwKK2FsbG93cyBjb250cm9sbGluZyB3YXJuaW5ncy4gIEl0IHNob3VsZCBiZSBzZXQgdG8gYSBzdHJpbmcKK2NvbnRhaW5pbmcgd2FybmluZyBzZXR0aW5ncywgZXF1aXZhbGVudCB0byB0aG9zZQordXNlZCB3aXRoIHRoZSA6b3B0aW9uOmAtV2Agc3dpdGNoLCBzZXBhcmF0ZWQgYnkgY29tbWFzLgorKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbjsgOmlzc3VlOmA3MzAxYC4pCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgd2lsbCBwcmludCB3YXJuaW5ncyBldmVyeSB0aW1lCit0aGV5IG9jY3VyLCBidXQgdHVybiB3YXJuaW5ncyBmcm9tIHRoZSA6bW9kOmBDb29raWVgIG1vZHVsZSBpbnRvIGFuCitlcnJvci4gIChUaGUgZXhhY3Qgc3ludGF4IGZvciBzZXR0aW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhcmllcworYWNyb3NzIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBzaGVsbHMuKQorCis6OgorCisgIGV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MAorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworT3B0aW1pemF0aW9ucworLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CisKKyogQSBuZXcgb3Bjb2RlIHdhcyBhZGRlZCB0byBwZXJmb3JtIHRoZSBpbml0aWFsIHNldHVwIGZvcgorICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywgbG9va2luZyB1cCB0aGUgOm1ldGg6YF9fZW50ZXJfX2AgYW5kCisgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcy4gIChDb250cmlidXRlZCBieSBCZW5qYW1pbiBQZXRlcnNvbi4pCisKKyogVGhlIGdhcmJhZ2UgY29sbGVjdG9yIG5vdyBwZXJmb3JtcyBiZXR0ZXIgZm9yIG9uZSBjb21tb24gdXNhZ2UKKyAgcGF0dGVybjogd2hlbiBtYW55IG9iamVjdHMgYXJlIGJlaW5nIGFsbG9jYXRlZCB3aXRob3V0IGRlYWxsb2NhdGluZworICBhbnkgb2YgdGhlbS4gIFRoaXMgd291bGQgcHJldmlvdXNseSB0YWtlIHF1YWRyYXRpYworICB0aW1lIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24sIGJ1dCBub3cgdGhlIG51bWJlciBvZiBmdWxsIGdhcmJhZ2UgY29sbGVjdGlvbnMKKyAgaXMgcmVkdWNlZCBhcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgb24gdGhlIGhlYXAgZ3Jvd3MuCisgIFRoZSBuZXcgbG9naWMgb25seSBwZXJmb3JtcyBhIGZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3Mgd2hlbgorICB0aGUgbWlkZGxlIGdlbmVyYXRpb24gaGFzIGJlZW4gY29sbGVjdGVkIDEwIHRpbWVzIGFuZCB3aGVuIHRoZQorICBudW1iZXIgb2Ygc3Vydml2b3Igb2JqZWN0cyBmcm9tIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBleGNlZWRzIDEwJSBvZgorICB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIG9sZGVzdCBnZW5lcmF0aW9uLiAgKFN1Z2dlc3RlZCBieSBNYXJ0aW4KKyAgdm9uIEzDtndpcyBhbmQgaW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNDA3NGAuKQorCisqIFRoZSBnYXJiYWdlIGNvbGxlY3RvciB0cmllcyB0byBhdm9pZCB0cmFja2luZyBzaW1wbGUgY29udGFpbmVycworICB3aGljaCBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGUuIEluIFB5dGhvbiAyLjcsIHRoaXMgaXMgbm93IHRydWUgZm9yCisgIHR1cGxlcyBhbmQgZGljdHMgY29udGFpbmluZyBhdG9taWMgdHlwZXMgKHN1Y2ggYXMgaW50cywgc3RyaW5ncywKKyAgZXRjLikuIFRyYW5zaXRpdmVseSwgYSBkaWN0IGNvbnRhaW5pbmcgdHVwbGVzIG9mIGF0b21pYyB0eXBlcyB3b24ndAorICBiZSB0cmFja2VkIGVpdGhlci4gVGhpcyBoZWxwcyByZWR1Y2UgdGhlIGNvc3Qgb2YgZWFjaAorICBnYXJiYWdlIGNvbGxlY3Rpb24gYnkgZGVjcmVhc2luZyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYmUKKyAgY29uc2lkZXJlZCBhbmQgdHJhdmVyc2VkIGJ5IHRoZSBjb2xsZWN0b3IuCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA0Njg4YC4pCisKKyogTG9uZyBpbnRlZ2VycyBhcmUgbm93IHN0b3JlZCBpbnRlcm5hbGx5IGVpdGhlciBpbiBiYXNlIDIqKjE1IG9yIGluIGJhc2UKKyAgMioqMzAsIHRoZSBiYXNlIGJlaW5nIGRldGVybWluZWQgYXQgYnVpbGQgdGltZS4gIFByZXZpb3VzbHksIHRoZXkKKyAgd2VyZSBhbHdheXMgc3RvcmVkIGluIGJhc2UgMioqMTUuICBVc2luZyBiYXNlIDIqKjMwIGdpdmVzCisgIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvbiA2NC1iaXQgbWFjaGluZXMsIGJ1dAorICBiZW5jaG1hcmsgcmVzdWx0cyBvbiAzMi1iaXQgbWFjaGluZXMgaGF2ZSBiZWVuIG1peGVkLiAgVGhlcmVmb3JlLAorICB0aGUgZGVmYXVsdCBpcyB0byB1c2UgYmFzZSAyKiozMCBvbiA2NC1iaXQgbWFjaGluZXMgYW5kIGJhc2UgMioqMTUKKyAgb24gMzItYml0IG1hY2hpbmVzOyBvbiBVbml4LCB0aGVyZSdzIGEgbmV3IGNvbmZpZ3VyZSBvcHRpb24KKyAgOm9wdGlvbjpgLS1lbmFibGUtYmlnLWRpZ2l0c2AgdGhhdCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQuCisKKyAgQXBhcnQgZnJvbSB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHRoaXMgY2hhbmdlIHNob3VsZCBiZQorICBpbnZpc2libGUgdG8gZW5kIHVzZXJzLCB3aXRoIG9uZSBleGNlcHRpb246IGZvciB0ZXN0aW5nIGFuZAorICBkZWJ1Z2dpbmcgcHVycG9zZXMgdGhlcmUncyBhIG5ldyBzdHJ1Y3RzZXEgOmRhdGE6YHN5cy5sb25nX2luZm9gIHRoYXQKKyAgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVybmFsIGZvcm1hdCwgZ2l2aW5nIHRoZSBudW1iZXIgb2YKKyAgYml0cyBwZXIgZGlnaXQgYW5kIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBDIHR5cGUgdXNlZCB0byBzdG9yZQorICBlYWNoIGRpZ2l0OjoKKworICAgICA+Pj4gaW1wb3J0IHN5cworICAgICA+Pj4gc3lzLmxvbmdfaW5mbworICAgICBzeXMubG9uZ19pbmZvKGJpdHNfcGVyX2RpZ2l0PTMwLCBzaXplb2ZfZGlnaXQ9NCkKKworICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNDI1OGAuKQorCisgIEFub3RoZXIgc2V0IG9mIGNoYW5nZXMgbWFkZSBsb25nIG9iamVjdHMgYSBmZXcgYnl0ZXMgc21hbGxlcjogMiBieXRlcworICBzbWFsbGVyIG9uIDMyLWJpdCBzeXN0ZW1zIGFuZCA2IGJ5dGVzIG9uIDY0LWJpdC4KKyAgKENvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDUyNjBgLikKKworKiBUaGUgZGl2aXNpb24gYWxnb3JpdGhtIGZvciBsb25nIGludGVnZXJzIGhhcyBiZWVuIG1hZGUgZmFzdGVyCisgIGJ5IHRpZ2h0ZW5pbmcgdGhlIGlubmVyIGxvb3AsIGRvaW5nIHNoaWZ0cyBpbnN0ZWFkIG9mIG11bHRpcGxpY2F0aW9ucywKKyAgYW5kIGZpeGluZyBhbiB1bm5lY2Vzc2FyeSBleHRyYSBpdGVyYXRpb24uCisgIFZhcmlvdXMgYmVuY2htYXJrcyBzaG93IHNwZWVkdXBzIG9mIGJldHdlZW4gNTAlIGFuZCAxNTAlIGZvciBsb25nCisgIGludGVnZXIgZGl2aXNpb25zIGFuZCBtb2R1bG8gb3BlcmF0aW9ucy4KKyAgKENvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDU1MTJgLikKKyAgQml0d2lzZSBvcGVyYXRpb25zIGFyZSBhbHNvIHNpZ25pZmljYW50bHkgZmFzdGVyIChpbml0aWFsIHBhdGNoIGJ5CisgIEdyZWdvcnkgU21pdGg7IDppc3N1ZTpgMTA4NzQxOGApLgorCisqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYCVgYCBjaGVja3MgZm9yIHRoZSBsZWZ0LXNpZGUgb3BlcmFuZCBiZWluZworICBhIFB5dGhvbiBzdHJpbmcgYW5kIHNwZWNpYWwtY2FzZXMgaXQ7IHRoaXMgcmVzdWx0cyBpbiBhIDEtMyUKKyAgcGVyZm9ybWFuY2UgaW5jcmVhc2UgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGZyZXF1ZW50bHkgdXNlIGBgJWBgCisgIHdpdGggc3RyaW5ncywgc3VjaCBhcyB0ZW1wbGF0aW5nIGxpYnJhcmllcy4KKyAgKEltcGxlbWVudGVkIGJ5IENvbGxpbiBXaW50ZXI7IDppc3N1ZTpgNTE3NmAuKQorCisqIExpc3QgY29tcHJlaGVuc2lvbnMgd2l0aCBhbiBgYGlmYGAgY29uZGl0aW9uIGFyZSBjb21waWxlZCBpbnRvCisgIGZhc3RlciBieXRlY29kZS4gIChQYXRjaCBieSBBbnRvaW5lIFBpdHJvdSwgYmFjay1wb3J0ZWQgdG8gMi43CisgIGJ5IEplZmZyZXkgWWFzc2tpbjsgOmlzc3VlOmA0NzE1YC4pCisKKyogQ29udmVydGluZyBhbiBpbnRlZ2VyIG9yIGxvbmcgaW50ZWdlciB0byBhIGRlY2ltYWwgc3RyaW5nIHdhcyBtYWRlCisgIGZhc3RlciBieSBzcGVjaWFsLWNhc2luZyBiYXNlIDEwIGluc3RlYWQgb2YgdXNpbmcgYSBnZW5lcmFsaXplZAorICBjb252ZXJzaW9uIGZ1bmN0aW9uIHRoYXQgc3VwcG9ydHMgYXJiaXRyYXJ5IGJhc2VzLgorICAoUGF0Y2ggYnkgR2F3YWluIEJvbHRvbjsgOmlzc3VlOmA2NzEzYC4pCisKKyogVGhlIDptZXRoOmBzcGxpdGAsIDptZXRoOmByZXBsYWNlYCwgOm1ldGg6YHJpbmRleGAsCisgIDptZXRoOmBycGFydGl0aW9uYCwgYW5kIDptZXRoOmByc3BsaXRgIG1ldGhvZHMgb2Ygc3RyaW5nLWxpa2UgdHlwZXMKKyAgKHN0cmluZ3MsIFVuaWNvZGUgc3RyaW5ncywgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzKSBub3cgdXNlIGEKKyAgZmFzdCByZXZlcnNlLXNlYXJjaCBhbGdvcml0aG0gaW5zdGVhZCBvZiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIKKyAgc2Nhbi4gIFRoaXMgaXMgc29tZXRpbWVzIGZhc3RlciBieSBhIGZhY3RvciBvZiAxMC4gIChBZGRlZCBieQorICBGbG9yZW50IFhpY2x1bmE7IDppc3N1ZTpgNzQ2MmAgYW5kIDppc3N1ZTpgNzYyMmAuKQorCisqIFRoZSA6bW9kOmBwaWNrbGVgIGFuZCA6bW9kOmBjUGlja2xlYCBtb2R1bGVzIG5vdyBhdXRvbWF0aWNhbGx5CisgIGludGVybiB0aGUgc3RyaW5ncyB1c2VkIGZvciBhdHRyaWJ1dGUgbmFtZXMsIHJlZHVjaW5nIG1lbW9yeSB1c2FnZQorICBvZiB0aGUgb2JqZWN0cyByZXN1bHRpbmcgZnJvbSB1bnBpY2tsaW5nLiAgKENvbnRyaWJ1dGVkIGJ5IEpha2UKKyAgTWNHdWlyZTsgOmlzc3VlOmA1MDg0YC4pCisKKyogVGhlIDptb2Q6YGNQaWNrbGVgIG1vZHVsZSBub3cgc3BlY2lhbC1jYXNlcyBkaWN0aW9uYXJpZXMsCisgIG5lYXJseSBoYWx2aW5nIHRoZSB0aW1lIHJlcXVpcmVkIHRvIHBpY2tsZSB0aGVtLgorICAoQ29udHJpYnV0ZWQgYnkgQ29sbGluIFdpbnRlcjsgOmlzc3VlOmA1NjcwYC4pCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTmV3IGFuZCBJbXByb3ZlZCBNb2R1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgaW4gZXZlcnkgcmVsZWFzZSwgUHl0aG9uJ3Mgc3RhbmRhcmQgbGlicmFyeSByZWNlaXZlZCBhIG51bWJlciBvZgorZW5oYW5jZW1lbnRzIGFuZCBidWcgZml4ZXMuICBIZXJlJ3MgYSBwYXJ0aWFsIGxpc3Qgb2YgdGhlIG1vc3Qgbm90YWJsZQorY2hhbmdlcywgc29ydGVkIGFscGhhYmV0aWNhbGx5IGJ5IG1vZHVsZSBuYW1lLiBDb25zdWx0IHRoZQorOmZpbGU6YE1pc2MvTkVXU2AgZmlsZSBpbiB0aGUgc291cmNlIHRyZWUgZm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mCitjaGFuZ2VzLCBvciBsb29rIHRocm91Z2ggdGhlIFN1YnZlcnNpb24gbG9ncyBmb3IgYWxsIHRoZSBkZXRhaWxzLgorCisqIFRoZSA6bW9kOmBiZGJgIG1vZHVsZSdzIGJhc2UgZGVidWdnaW5nIGNsYXNzIDpjbGFzczpgfmJkYi5CZGJgCisgIGdhaW5lZCBhIGZlYXR1cmUgZm9yIHNraXBwaW5nIG1vZHVsZXMuICBUaGUgY29uc3RydWN0b3IKKyAgbm93IHRha2VzIGFuIGl0ZXJhYmxlIGNvbnRhaW5pbmcgZ2xvYi1zdHlsZSBwYXR0ZXJucyBzdWNoIGFzCisgIGBgZGphbmdvLipgYDsgdGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBzdGFjayBmcmFtZXMKKyAgZnJvbSBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLgorICAoQ29udHJpYnV0ZWQgYnkgTWFydSBOZXdieSBhZnRlciBhIHN1Z2dlc3Rpb24gYnkKKyAgU2VudGhpbCBLdW1hcmFuOyA6aXNzdWU6YDUxNDJgLikKKworKiBUaGUgOm1vZDpgYmluYXNjaWlgIG1vZHVsZSBub3cgc3VwcG9ydHMgdGhlIGJ1ZmZlciBBUEksIHNvIGl0IGNhbiBiZQorICB1c2VkIHdpdGggOmNsYXNzOmBtZW1vcnl2aWV3YCBpbnN0YW5jZXMgYW5kIG90aGVyIHNpbWlsYXIgYnVmZmVyIG9iamVjdHMuCisgIChCYWNrcG9ydGVkIGZyb20gMy54IGJ5IEZsb3JlbnQgWGljbHVuYTsgOmlzc3VlOmA3NzAzYC4pCisKKyogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBic2RkYmAgbW9kdWxlIGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSA0LjcuMmRldmVsOQorICB0byB2ZXJzaW9uIDQuOC40IG9mCisgIGB0aGUgcHlic2RkYiBwYWNrYWdlIDxodHRwOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfXy4KKyAgVGhlIG5ldyB2ZXJzaW9uIGZlYXR1cmVzIGJldHRlciBQeXRob24gMy54IGNvbXBhdGliaWxpdHksIHZhcmlvdXMgYnVnIGZpeGVzLAorICBhbmQgYWRkcyBzZXZlcmFsIG5ldyBCZXJrZWxleURCIGZsYWdzIGFuZCBtZXRob2RzLgorICAoVXBkYXRlZCBieSBKZXPDunMgQ2VhIEF2acOzbjsgOmlzc3VlOmA4MTU2YC4gIFRoZSBweWJzZGRiCisgIGNoYW5nZWxvZyBjYW4gYmUgcmVhZCBhdCBodHRwOi8vaGcuamNlYS5lcy9weWJzZGRiL2ZpbGUvdGlwL0NoYW5nZUxvZy4pCisKKyogVGhlIDptb2Q6YGJ6MmAgbW9kdWxlJ3MgOmNsYXNzOmB+YnoyLkJaMkZpbGVgIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dAorICBtYW5hZ2VtZW50IHByb3RvY29sLCBzbyB5b3UgY2FuIHdyaXRlIGBgd2l0aCBiejIuQloyRmlsZSguLi4pIGFzIGY6YGAuCisgIChDb250cmlidXRlZCBieSBIYWdlbiBGw7xyc3RlbmF1OyA6aXNzdWU6YDM4NjBgLikKKworKiBOZXcgY2xhc3M6IHRoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5Db3VudGVyYCBjbGFzcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgCisgIG1vZHVsZSBpcyB1c2VmdWwgZm9yIHRhbGx5aW5nIGRhdGEuICA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5Db3VudGVyYCBpbnN0YW5jZXMKKyAgYmVoYXZlIG1vc3RseSBsaWtlIGRpY3Rpb25hcmllcyBidXQgcmV0dXJuIHplcm8gZm9yIG1pc3Npbmcga2V5cyBpbnN0ZWFkIG9mCisgIHJhaXNpbmcgYSA6ZXhjOmBLZXlFcnJvcmA6CisKKyAgLi4gZG9jdGVzdDo6CisgICAgIDpvcHRpb25zOiArTk9STUFMSVpFX1dISVRFU1BBQ0UKKworICAgICA+Pj4gZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgorICAgICA+Pj4gYyA9IENvdW50ZXIoKQorICAgICA+Pj4gZm9yIGxldHRlciBpbiAnaGVyZSBpcyBhIHNhbXBsZSBvZiBlbmdsaXNoIHRleHQnOgorICAgICAuLi4gICBjW2xldHRlcl0gKz0gMQorICAgICAuLi4KKyAgICAgPj4+IGMKKyAgICAgQ291bnRlcih7JyAnOiA2LCAnZSc6IDUsICdzJzogMywgJ2EnOiAyLCAnaSc6IDIsICdoJzogMiwKKyAgICAgJ2wnOiAyLCAndCc6IDIsICdnJzogMSwgJ2YnOiAxLCAnbSc6IDEsICdvJzogMSwgJ24nOiAxLAorICAgICAncCc6IDEsICdyJzogMSwgJ3gnOiAxfSkKKyAgICAgPj4+IGNbJ2UnXQorICAgICA1CisgICAgID4+PiBjWyd6J10KKyAgICAgMAorCisgIFRoZXJlIGFyZSB0aHJlZSBhZGRpdGlvbmFsIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIG1ldGhvZHMuCisgIDptZXRoOmB+Y29sbGVjdGlvbnMuQ291bnRlci5tb3N0X2NvbW1vbmAgcmV0dXJucyB0aGUgTiBtb3N0IGNvbW1vbgorICBlbGVtZW50cyBhbmQgdGhlaXIgY291bnRzLiAgOm1ldGg6YH5jb2xsZWN0aW9ucy5Db3VudGVyLmVsZW1lbnRzYAorICByZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGNvbnRhaW5lZCBlbGVtZW50cywgcmVwZWF0aW5nIGVhY2gKKyAgZWxlbWVudCBhcyBtYW55IHRpbWVzIGFzIGl0cyBjb3VudC4KKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5Db3VudGVyLnN1YnRyYWN0YCB0YWtlcyBhbiBpdGVyYWJsZSBhbmQKKyAgc3VidHJhY3RzIG9uZSBmb3IgZWFjaCBlbGVtZW50IGluc3RlYWQgb2YgYWRkaW5nOyBpZiB0aGUgYXJndW1lbnQgaXMKKyAgYSBkaWN0aW9uYXJ5IG9yIGFub3RoZXIgOmNsYXNzOmBDb3VudGVyYCwgdGhlIGNvdW50cyBhcmUKKyAgc3VidHJhY3RlZC4gOjoKKworICAgID4+PiBjLm1vc3RfY29tbW9uKDUpCisgICAgWygnICcsIDYpLCAoJ2UnLCA1KSwgKCdzJywgMyksICgnYScsIDIpLCAoJ2knLCAyKV0KKyAgICA+Pj4gYy5lbGVtZW50cygpIC0+CisgICAgICAgJ2EnLCAnYScsICcgJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsCisgICAgICAgJ2UnLCAnZScsICdlJywgJ2UnLCAnZScsICdnJywgJ2YnLCAnaScsICdpJywKKyAgICAgICAnaCcsICdoJywgJ20nLCAnbCcsICdsJywgJ28nLCAnbicsICdwJywgJ3MnLAorICAgICAgICdzJywgJ3MnLCAncicsICd0JywgJ3QnLCAneCcKKyAgICA+Pj4gY1snZSddCisgICAgNQorICAgID4+PiBjLnN1YnRyYWN0KCd2ZXJ5IGhlYXZ5IG9uIHRoZSBsZXR0ZXIgZScpCisgICAgPj4+IGNbJ2UnXSAgICAjIENvdW50IGlzIG5vdyBsb3dlcgorICAgIC0xCisKKyAgQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgMTY5NjE5OWAuCisKKyAgLi4gcmV2aXNpb24gNzk2NjAKKworICBOZXcgY2xhc3M6IDpjbGFzczpgfmNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCBpcyBkZXNjcmliZWQgaW4gdGhlIGVhcmxpZXIKKyAgc2VjdGlvbiA6cmVmOmBwZXAtMDM3MmAuCisKKyAgTmV3IG1ldGhvZDogVGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLmRlcXVlYCBkYXRhIHR5cGUgbm93IGhhcyBhCisgIDptZXRoOmB+Y29sbGVjdGlvbnMuZGVxdWUuY291bnRgIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG51bWJlciBvZgorICBjb250YWluZWQgZWxlbWVudHMgZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGFyZ3VtZW50ICp4KiwgYW5kIGEKKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNlYCBtZXRob2QgdGhhdCByZXZlcnNlcyB0aGUgZWxlbWVudHMKKyAgb2YgdGhlIGRlcXVlIGluLXBsYWNlLiAgOmNsYXNzOmB+Y29sbGVjdGlvbnMuZGVxdWVgIGFsc28gZXhwb3NlcyBpdHMgbWF4aW11bQorICBsZW5ndGggYXMgdGhlIHJlYWQtb25seSA6YXR0cjpgfmNvbGxlY3Rpb25zLmRlcXVlLm1heGxlbmAgYXR0cmlidXRlLgorICAoQm90aCBmZWF0dXJlcyBhZGRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCisKKyAgVGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGNsYXNzIG5vdyBoYXMgYW4gb3B0aW9uYWwgKnJlbmFtZSogcGFyYW1ldGVyLgorICBJZiAqcmVuYW1lKiBpcyB0cnVlLCBmaWVsZCBuYW1lcyB0aGF0IGFyZSBpbnZhbGlkIGJlY2F1c2UgdGhleSd2ZQorICBiZWVuIHJlcGVhdGVkIG9yIGFyZW4ndCBsZWdhbCBQeXRob24gaWRlbnRpZmllcnMgd2lsbCBiZQorICByZW5hbWVkIHRvIGxlZ2FsIG5hbWVzIHRoYXQgYXJlIGRlcml2ZWQgZnJvbSB0aGUgZmllbGQncworICBwb3NpdGlvbiB3aXRoaW4gdGhlIGxpc3Qgb2YgZmllbGRzOgorCisgICAgID4+PiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisgICAgID4+PiBUID0gbmFtZWR0dXBsZSgnVCcsIFsnZmllbGQxJywgJyRpbGxlZ2FsJywgJ2ZvcicsICdmaWVsZDInXSwgcmVuYW1lPVRydWUpCisgICAgID4+PiBULl9maWVsZHMKKyAgICAgKCdmaWVsZDEnLCAnXzEnLCAnXzInLCAnZmllbGQyJykKKworICAoQWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgMTgxOGAuKQorCisgIEZpbmFsbHksIHRoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5NYXBwaW5nYCBhYnN0cmFjdCBiYXNlIGNsYXNzIG5vdworICByZXR1cm5zIDpjb25zdDpgTm90SW1wbGVtZW50ZWRgIGlmIGEgbWFwcGluZyBpcyBjb21wYXJlZCB0bworICBhbm90aGVyIHR5cGUgdGhhdCBpc24ndCBhIDpjbGFzczpgTWFwcGluZ2AuCisgIChGaXhlZCBieSBEYW5pZWwgU3R1dHpiYWNoOyA6aXNzdWU6YDg3MjlgLikKKworKiBDb25zdHJ1Y3RvcnMgZm9yIHRoZSBwYXJzaW5nIGNsYXNzZXMgaW4gdGhlIDptb2Q6YENvbmZpZ1BhcnNlcmAgbW9kdWxlIG5vdworICB0YWtlIGEgKmFsbG93X25vX3ZhbHVlKiBwYXJhbWV0ZXIsIGRlZmF1bHRpbmcgdG8gZmFsc2U7IGlmIHRydWUsCisgIG9wdGlvbnMgd2l0aG91dCB2YWx1ZXMgd2lsbCBiZSBhbGxvd2VkLiAgRm9yIGV4YW1wbGU6OgorCisgICAgPj4+IGltcG9ydCBDb25maWdQYXJzZXIsIFN0cmluZ0lPCisgICAgPj4+IHNhbXBsZV9jb25maWcgPSAiIiIKKyAgICAuLi4gW215c3FsZF0KKyAgICAuLi4gdXNlciA9IG15c3FsCisgICAgLi4uIHBpZC1maWxlID0gL3Zhci9ydW4vbXlzcWxkL215c3FsZC5waWQKKyAgICAuLi4gc2tpcC1iZGIKKyAgICAuLi4gIiIiCisgICAgPj4+IGNvbmZpZyA9IENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIoYWxsb3dfbm9fdmFsdWU9VHJ1ZSkKKyAgICA+Pj4gY29uZmlnLnJlYWRmcChTdHJpbmdJTy5TdHJpbmdJTyhzYW1wbGVfY29uZmlnKSkKKyAgICA+Pj4gY29uZmlnLmdldCgnbXlzcWxkJywgJ3VzZXInKQorICAgICdteXNxbCcKKyAgICA+Pj4gcHJpbnQgY29uZmlnLmdldCgnbXlzcWxkJywgJ3NraXAtYmRiJykKKyAgICBOb25lCisgICAgPj4+IHByaW50IGNvbmZpZy5nZXQoJ215c3FsZCcsICd1bmtub3duJykKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBOb09wdGlvbkVycm9yOiBObyBvcHRpb24gJ3Vua25vd24nIGluIHNlY3Rpb246ICdteXNxbGQnCisKKyAgKENvbnRyaWJ1dGVkIGJ5IE1hdHMgS2luZGFobDsgOmlzc3VlOmA3MDA1YC4pCisKKyogRGVwcmVjYXRlZCBmdW5jdGlvbjogOmZ1bmM6YGNvbnRleHRsaWIubmVzdGVkYCwgd2hpY2ggYWxsb3dzCisgIGhhbmRsaW5nIG1vcmUgdGhhbiBvbmUgY29udGV4dCBtYW5hZ2VyIHdpdGggYSBzaW5nbGUgOmtleXdvcmQ6YHdpdGhgCisgIHN0YXRlbWVudCwgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYmVjYXVzZSB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudAorICBub3cgc3VwcG9ydHMgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2Vycy4KKworKiBUaGUgOm1vZDpgY29va2llbGliYCBtb2R1bGUgbm93IGlnbm9yZXMgY29va2llcyB0aGF0IGhhdmUgYW4gaW52YWxpZAorICB2ZXJzaW9uIGZpZWxkLCBvbmUgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYW4gaW50ZWdlciB2YWx1ZS4gIChGaXhlZCBieQorICBKb2huIEouIExlZTsgOmlzc3VlOmAzOTI0YC4pCisKKyogVGhlIDptb2Q6YGNvcHlgIG1vZHVsZSdzIDpmdW5jOmB+Y29weS5kZWVwY29weWAgZnVuY3Rpb24gd2lsbCBub3cKKyAgY29ycmVjdGx5IGNvcHkgYm91bmQgaW5zdGFuY2UgbWV0aG9kcy4gIChJbXBsZW1lbnRlZCBieQorICBSb2JlcnQgQ29sbGluczsgOmlzc3VlOmAxNTE1YC4pCisKKyogVGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIG5vdyBhbHdheXMgY29udmVydHMgYGBOb25lYGAgdG8gYSBDIE5VTEwKKyAgcG9pbnRlciBmb3IgYXJndW1lbnRzIGRlY2xhcmVkIGFzIHBvaW50ZXJzLiAgKENoYW5nZWQgYnkgVGhvbWFzCisgIEhlbGxlcjsgOmlzc3VlOmA0NjA2YC4pICBUaGUgdW5kZXJseWluZyBgbGliZmZpIGxpYnJhcnkKKyAgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9saWJmZmkvPmBfXyBoYXMgYmVlbiB1cGRhdGVkIHRvIHZlcnNpb24KKyAgMy4wLjksIGNvbnRhaW5pbmcgdmFyaW91cyBmaXhlcyBmb3IgZGlmZmVyZW50IHBsYXRmb3Jtcy4gIChVcGRhdGVkCisgIGJ5IE1hdHRoaWFzIEtsb3NlOyA6aXNzdWU6YDgxNDJgLikKKworKiBOZXcgbWV0aG9kOiB0aGUgOm1vZDpgZGF0ZXRpbWVgIG1vZHVsZSdzIDpjbGFzczpgfmRhdGV0aW1lLnRpbWVkZWx0YWAgY2xhc3MKKyAgZ2FpbmVkIGEgOm1ldGg6YH5kYXRldGltZS50aW1lZGVsdGEudG90YWxfc2Vjb25kc2AgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUKKyAgbnVtYmVyIG9mIHNlY29uZHMgaW4gdGhlIGR1cmF0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIFF1aW5sYW47IDppc3N1ZTpgNTc4OGAuKQorCisqIE5ldyBtZXRob2Q6IHRoZSA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGNsYXNzIGdhaW5lZCBhCisgIDptZXRoOmB+ZGVjaW1hbC5EZWNpbWFsLmZyb21fZmxvYXRgIGNsYXNzIG1ldGhvZCB0aGF0IHBlcmZvcm1zIGFuIGV4YWN0CisgIGNvbnZlcnNpb24gb2YgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gYSA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgLgorICBUaGlzIGV4YWN0IGNvbnZlcnNpb24gc3RyaXZlcyBmb3IgdGhlCisgIGNsb3Nlc3QgZGVjaW1hbCBhcHByb3hpbWF0aW9uIHRvIHRoZSBmbG9hdGluZy1wb2ludCByZXByZXNlbnRhdGlvbidzIHZhbHVlOworICB0aGUgcmVzdWx0aW5nIGRlY2ltYWwgdmFsdWUgd2lsbCB0aGVyZWZvcmUgc3RpbGwgaW5jbHVkZSB0aGUgaW5hY2N1cmFjeSwKKyAgaWYgYW55LgorICBGb3IgZXhhbXBsZSwgYGBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKWBgIHJldHVybnMKKyAgYGBEZWNpbWFsKCcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKWBgLgorICAoSW1wbGVtZW50ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNDc5NmAuKQorCisgIENvbXBhcmluZyBpbnN0YW5jZXMgb2YgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCB3aXRoIGZsb2F0aW5nLXBvaW50CisgIG51bWJlcnMgbm93IHByb2R1Y2VzIHNlbnNpYmxlIHJlc3VsdHMgYmFzZWQgb24gdGhlIG51bWVyaWMgdmFsdWVzCisgIG9mIHRoZSBvcGVyYW5kcy4gIFByZXZpb3VzbHkgc3VjaCBjb21wYXJpc29ucyB3b3VsZCBmYWxsIGJhY2sgdG8KKyAgUHl0aG9uJ3MgZGVmYXVsdCBydWxlcyBmb3IgY29tcGFyaW5nIG9iamVjdHMsIHdoaWNoIHByb2R1Y2VkIGFyYml0cmFyeQorICByZXN1bHRzIGJhc2VkIG9uIHRoZWlyIHR5cGUuICBOb3RlIHRoYXQgeW91IHN0aWxsIGNhbm5vdCBjb21iaW5lCisgIDpjbGFzczpgRGVjaW1hbGAgYW5kIGZsb2F0aW5nLXBvaW50IGluIG90aGVyIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpdGlvbiwKKyAgc2luY2UgeW91IHNob3VsZCBiZSBleHBsaWNpdGx5IGNob29zaW5nIGhvdyB0byBjb252ZXJ0IGJldHdlZW4gZmxvYXQgYW5kCisgIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAuICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMjUzMWAuKQorCisgIFRoZSBjb25zdHJ1Y3RvciBmb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBub3cgYWNjZXB0cworICBmbG9hdGluZy1wb2ludCBudW1iZXJzIChhZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA4MjU3YCkKKyAgYW5kIG5vbi1FdXJvcGVhbiBVbmljb2RlIGNoYXJhY3RlcnMgc3VjaCBhcyBBcmFiaWMtSW5kaWMgZGlnaXRzCisgIChjb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2NTk1YCkuCisKKyAgTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5Db250ZXh0YCBjbGFzcyBub3cgYWNjZXB0IGludGVnZXJzCisgIGFzIHdlbGwgYXMgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXM7IHRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIHRoZQorICA6bWV0aDpgfmRlY2ltYWwuQ29udGV4dC5jYW5vbmljYWxgIGFuZCA6bWV0aDpgfmRlY2ltYWwuQ29udGV4dC5pc19jYW5vbmljYWxgCisgIG1ldGhvZHMuICAoUGF0Y2ggYnkgSnVhbiBKb3PDqSBDb250aTsgOmlzc3VlOmA3NjMzYC4pCisKKyAgV2hlbiB1c2luZyA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcyB3aXRoIGEgc3RyaW5nJ3MKKyAgOm1ldGg6YH5zdHIuZm9ybWF0YCBtZXRob2QsIHRoZSBkZWZhdWx0IGFsaWdubWVudCB3YXMgcHJldmlvdXNseQorICBsZWZ0LWFsaWdubWVudC4gIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCB0byByaWdodC1hbGlnbm1lbnQsIHdoaWNoIGlzCisgIG1vcmUgc2Vuc2libGUgZm9yIG51bWVyaWMgdHlwZXMuICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2ODU3YC4pCisKKyAgQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiB2YWx1ZSAob3IgYGBzTkFOYGApIG5vdyBzaWduYWwKKyAgOmNvbnN0OmBJbnZhbGlkT3BlcmF0aW9uYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBhIHRydWUgb3IKKyAgZmFsc2UgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yLiAgUXVpZXQgTmFOIHZhbHVlcworICAob3IgYGBOYU5gYCkgYXJlIG5vdyBoYXNoYWJsZS4gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgOmlzc3VlOmA3Mjc5YC4pCisKKyogVGhlIDptb2Q6YGRpZmZsaWJgIG1vZHVsZSBub3cgcHJvZHVjZXMgb3V0cHV0IHRoYXQgaXMgbW9yZQorICBjb21wYXRpYmxlIHdpdGggbW9kZXJuIDpjb21tYW5kOmBkaWZmYC86Y29tbWFuZDpgcGF0Y2hgIHRvb2xzCisgIHRocm91Z2ggb25lIHNtYWxsIGNoYW5nZSwgdXNpbmcgYSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2Ygc3BhY2VzIGFzCisgIGEgc2VwYXJhdG9yIGluIHRoZSBoZWFkZXIgZ2l2aW5nIHRoZSBmaWxlbmFtZS4gIChGaXhlZCBieSBBbmF0b2x5CisgIFRlY2h0b25pazsgOmlzc3VlOmA3NTg1YC4pCisKKyogVGhlIERpc3R1dGlscyBgYHNkaXN0YGAgY29tbWFuZCBub3cgYWx3YXlzIHJlZ2VuZXJhdGVzIHRoZQorICA6ZmlsZTpgTUFOSUZFU1RgIGZpbGUsIHNpbmNlIGV2ZW4gaWYgdGhlIDpmaWxlOmBNQU5JRkVTVC5pbmAgb3IKKyAgOmZpbGU6YHNldHVwLnB5YCBmaWxlcyBoYXZlbid0IGJlZW4gbW9kaWZpZWQsIHRoZSB1c2VyIG1pZ2h0IGhhdmUKKyAgY3JlYXRlZCBzb21lIG5ldyBmaWxlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZC4KKyAgKEZpeGVkIGJ5IFRhcmVrIFppYWTDqTsgOmlzc3VlOmA4Njg4YC4pCisKKyogVGhlIDptb2Q6YGRvY3Rlc3RgIG1vZHVsZSdzIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGZsYWcKKyAgd2lsbCBub3cgaWdub3JlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uCisgIGJlaW5nIHRlc3RlZC4gIChQYXRjaCBieSBMZW5uYXJ0IFJlZ2Vicm87IDppc3N1ZTpgNzQ5MGAuKQorCisqIFRoZSA6bW9kOmBlbWFpbGAgbW9kdWxlJ3MgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBjbGFzcyB3aWxsCisgIG5vdyBhY2NlcHQgYSBVbmljb2RlLXZhbHVlZCBwYXlsb2FkLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlCisgIHBheWxvYWQgdG8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBieSA6YXR0cjpgb3V0cHV0X2NoYXJzZXRgLgorICAoQWRkZWQgYnkgUi4gRGF2aWQgTXVycmF5OyA6aXNzdWU6YDEzNjgyNDdgLikKKworKiBUaGUgOmNsYXNzOmB+ZnJhY3Rpb25zLkZyYWN0aW9uYCBjbGFzcyBub3cgYWNjZXB0cyBhIHNpbmdsZSBmbG9hdCBvcgorICA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlLCBvciB0d28gcmF0aW9uYWwgbnVtYmVycywgYXMKKyAgYXJndW1lbnRzIHRvIGl0cyBjb25zdHJ1Y3Rvci4gIChJbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgcmF0aW9uYWxzIGFkZGVkIGluIDppc3N1ZTpgNTgxMmAsIGFuZCBmbG9hdC9kZWNpbWFsIGluCisgIDppc3N1ZTpgODI5NGAuKQorCisgIE9yZGVyaW5nIGNvbXBhcmlzb25zIChgYDxgYCwgYGA8PWBgLCBgYD5gYCwgYGA+PWBgKSBiZXR3ZWVuCisgIGZyYWN0aW9ucyBhbmQgY29tcGxleCBudW1iZXJzIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuCisgIFRoaXMgZml4ZXMgYW4gb3ZlcnNpZ2h0LCBtYWtpbmcgdGhlIDpjbGFzczpgfmZyYWN0aW9ucy5GcmFjdGlvbmAKKyAgbWF0Y2ggdGhlIG90aGVyIG51bWVyaWMgdHlwZXMuCisKKyAgLi4gcmV2aXNpb24gNzk0NTUKKworKiBOZXcgY2xhc3M6IDpjbGFzczpgfmZ0cGxpYi5GVFBfVExTYCBpbgorICB0aGUgOm1vZDpgZnRwbGliYCBtb2R1bGUgcHJvdmlkZXMgc2VjdXJlIEZUUAorICBjb25uZWN0aW9ucyB1c2luZyBUTFMgZW5jYXBzdWxhdGlvbiBvZiBhdXRoZW50aWNhdGlvbiBhcyB3ZWxsIGFzCisgIHN1YnNlcXVlbnQgY29udHJvbCBhbmQgZGF0YSB0cmFuc2ZlcnMuCisgIChDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2xhOyA6aXNzdWU6YDIwNTRgLikKKworICBUaGUgOm1ldGg6YH5mdHBsaWIuRlRQLnN0b3JiaW5hcnlgIG1ldGhvZCBmb3IgYmluYXJ5IHVwbG9hZHMgY2FuIG5vdyByZXN0YXJ0CisgIHVwbG9hZHMgdGhhbmtzIHRvIGFuIGFkZGVkICpyZXN0KiBwYXJhbWV0ZXIgKHBhdGNoIGJ5IFBhYmxvIE1vdXpvOworICA6aXNzdWU6YDY4NDVgLikKKworKiBOZXcgY2xhc3MgZGVjb3JhdG9yOiA6ZnVuYzpgfmZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2AgaW4gdGhlIDptb2Q6YGZ1bmN0b29sc2AKKyAgbW9kdWxlIHRha2VzIGEgY2xhc3MgdGhhdCBkZWZpbmVzIGFuIDptZXRoOmBfX2VxX19gIG1ldGhvZCBhbmQgb25lIG9mCisgIDptZXRoOmBfX2x0X19gLCA6bWV0aDpgX19sZV9fYCwgOm1ldGg6YF9fZ3RfX2AsIG9yIDptZXRoOmBfX2dlX19gLAorICBhbmQgZ2VuZXJhdGVzIHRoZSBtaXNzaW5nIGNvbXBhcmlzb24gbWV0aG9kcy4gIFNpbmNlIHRoZQorICA6bWV0aDpgX19jbXBfX2AgbWV0aG9kIGlzIGJlaW5nIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMueCwKKyAgdGhpcyBkZWNvcmF0b3IgbWFrZXMgaXQgZWFzaWVyIHRvIGRlZmluZSBvcmRlcmVkIGNsYXNzZXMuCisgIChBZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA1NDc5YC4pCisKKyAgTmV3IGZ1bmN0aW9uOiA6ZnVuYzpgfmZ1bmN0b29scy5jbXBfdG9fa2V5YCB3aWxsIHRha2UgYW4gb2xkLXN0eWxlIGNvbXBhcmlzb24KKyAgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHR3byBhcmd1bWVudHMgYW5kIHJldHVybiBhIG5ldyBjYWxsYWJsZSB0aGF0CisgIGNhbiBiZSB1c2VkIGFzIHRoZSAqa2V5KiBwYXJhbWV0ZXIgdG8gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgOmZ1bmM6YHNvcnRlZGAsIDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCwgZXRjLiAgVGhlIHByaW1hcnkKKyAgaW50ZW5kZWQgdXNlIGlzIHRvIGhlbHAgd2l0aCBtYWtpbmcgY29kZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMueC4KKyAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKKworKiBOZXcgZnVuY3Rpb246IHRoZSA6bW9kOmBnY2AgbW9kdWxlJ3MgOmZ1bmM6YH5nYy5pc190cmFja2VkYCByZXR1cm5zCisgIHRydWUgaWYgYSBnaXZlbiBpbnN0YW5jZSBpcyB0cmFja2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciwgZmFsc2UKKyAgb3RoZXJ3aXNlLiAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNDY4OGAuKQorCisqIFRoZSA6bW9kOmBnemlwYCBtb2R1bGUncyA6Y2xhc3M6YH5nemlwLkd6aXBGaWxlYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQKKyAgbWFuYWdlbWVudCBwcm90b2NvbCwgc28geW91IGNhbiB3cml0ZSBgYHdpdGggZ3ppcC5HemlwRmlsZSguLi4pIGFzIGY6YGAKKyAgKGNvbnRyaWJ1dGVkIGJ5IEhhZ2VuIEbDvHJzdGVuYXU7IDppc3N1ZTpgMzg2MGApLCBhbmQgaXQgbm93IGltcGxlbWVudHMKKyAgdGhlIDpjbGFzczpgaW8uQnVmZmVyZWRJT0Jhc2VgIEFCQywgc28geW91IGNhbiB3cmFwIGl0IHdpdGgKKyAgOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmAgZm9yIGZhc3RlciBwcm9jZXNzaW5nCisgIChjb250cmlidXRlZCBieSBOaXIgQWlkZXM7IDppc3N1ZTpgNzQ3MWApLgorICBJdCdzIGFsc28gbm93IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBtb2RpZmljYXRpb24gdGltZQorICByZWNvcmRlZCBpbiBhIGd6aXBwZWQgZmlsZSBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwgdGltZXN0YW1wIHRvCisgIHRoZSBjb25zdHJ1Y3Rvci4gIChDb250cmlidXRlZCBieSBKYWNxdWVzIEZyZWNoZXQ7IDppc3N1ZTpgNDI3MmAuKQorCisgIEZpbGVzIGluIGd6aXAgZm9ybWF0IGNhbiBiZSBwYWRkZWQgd2l0aCB0cmFpbGluZyB6ZXJvIGJ5dGVzOyB0aGUKKyAgOm1vZDpgZ3ppcGAgbW9kdWxlIHdpbGwgbm93IGNvbnN1bWUgdGhlc2UgdHJhaWxpbmcgYnl0ZXMuICAoRml4ZWQgYnkKKyAgVGFkZWsgUGlldHJhc3playBhbmQgQnJpYW4gQ3VydGluOyA6aXNzdWU6YDI4NDZgLikKKworKiBOZXcgYXR0cmlidXRlOiB0aGUgOm1vZDpgaGFzaGxpYmAgbW9kdWxlIG5vdyBoYXMgYW4gOmF0dHI6YH5oYXNobGliLmhhc2hsaWIuYWxnb3JpdGhtc2AKKyAgYXR0cmlidXRlIGNvbnRhaW5pbmcgYSB0dXBsZSBuYW1pbmcgdGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zLgorICBJbiBQeXRob24gMi43LCBgYGhhc2hsaWIuYWxnb3JpdGhtc2BgIGNvbnRhaW5zCisgIGBgKCdtZDUnLCAnc2hhMScsICdzaGEyMjQnLCAnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInKWBgLgorICAoQ29udHJpYnV0ZWQgYnkgQ2FybCBDaGVuZXQ7IDppc3N1ZTpgNzQxOGAuKQorCisqIFRoZSBkZWZhdWx0IDpjbGFzczpgfmh0dHBsaWIuSFRUUFJlc3BvbnNlYCBjbGFzcyB1c2VkIGJ5IHRoZSA6bW9kOmBodHRwbGliYCBtb2R1bGUgbm93CisgIHN1cHBvcnRzIGJ1ZmZlcmluZywgcmVzdWx0aW5nIGluIG11Y2ggZmFzdGVyIHJlYWRpbmcgb2YgSFRUUCByZXNwb25zZXMuCisgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgNDg3OWAuKQorCisgIFRoZSA6Y2xhc3M6YH5odHRwbGliLkhUVFBDb25uZWN0aW9uYCBhbmQgOmNsYXNzOmB+aHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb25gIGNsYXNzZXMKKyAgbm93IHN1cHBvcnQgYSAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciwgYSBgYChob3N0LCBwb3J0KWBgIDItdHVwbGUKKyAgZ2l2aW5nIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24uCisgIChDb250cmlidXRlZCBieSBFbGRvbiBaaWVnbGVyOyA6aXNzdWU6YDM5NzJgLikKKworKiBUaGUgOm1vZDpgaWhvb2tzYCBtb2R1bGUgbm93IHN1cHBvcnRzIHJlbGF0aXZlIGltcG9ydHMuICBOb3RlIHRoYXQKKyAgOm1vZDpgaWhvb2tzYCBpcyBhbiBvbGRlciBtb2R1bGUgZm9yIGN1c3RvbWl6aW5nIGltcG9ydHMsCisgIHN1cGVyc2VkZWQgYnkgdGhlIDptb2Q6YGltcHV0aWxgIG1vZHVsZSBhZGRlZCBpbiBQeXRob24gMi4wLgorICAoUmVsYXRpdmUgaW1wb3J0IHN1cHBvcnQgYWRkZWQgYnkgTmVpbCBTY2hlbWVuYXVlci4pCisKKyAgLi4gcmV2aXNpb24gNzU0MjMKKworKiBUaGUgOm1vZDpgaW1hcGxpYmAgbW9kdWxlIG5vdyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IERlcmVrIE1vcnI7IDppc3N1ZTpgMTY1NWAuKQorCisqIE5ldyBmdW5jdGlvbjogdGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSdzIDpmdW5jOmB+aW5zcGVjdC5nZXRjYWxsYXJnc2AKKyAgdGFrZXMgYSBjYWxsYWJsZSBhbmQgaXRzIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzLAorICBhbmQgZmlndXJlcyBvdXQgd2hpY2ggb2YgdGhlIGNhbGxhYmxlJ3MgcGFyYW1ldGVycyB3aWxsIHJlY2VpdmUgZWFjaCBhcmd1bWVudCwKKyAgcmV0dXJuaW5nIGEgZGljdGlvbmFyeSBtYXBwaW5nIGFyZ3VtZW50IG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBmcm9tIGluc3BlY3QgaW1wb3J0IGdldGNhbGxhcmdzCisgICAgPj4+IGRlZiBmKGEsIGI9MSwgKnBvcywgKipuYW1lZCk6CisgICAgLi4uICAgICBwYXNzCisgICAgPj4+IGdldGNhbGxhcmdzKGYsIDEsIDIsIDMpCisgICAgeydhJzogMSwgJ2InOiAyLCAncG9zJzogKDMsKSwgJ25hbWVkJzoge319CisgICAgPj4+IGdldGNhbGxhcmdzKGYsIGE9MiwgeD00KQorICAgIHsnYSc6IDIsICdiJzogMSwgJ3Bvcyc6ICgpLCAnbmFtZWQnOiB7J3gnOiA0fX0KKyAgICA+Pj4gZ2V0Y2FsbGFyZ3MoZikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikKKworICBDb250cmlidXRlZCBieSBHZW9yZ2UgU2Fra2lzOyA6aXNzdWU6YDMxMzVgLgorCisqIFVwZGF0ZWQgbW9kdWxlOiBUaGUgOm1vZDpgaW9gIGxpYnJhcnkgaGFzIGJlZW4gdXBncmFkZWQgdG8gdGhlIHZlcnNpb24gc2hpcHBlZCB3aXRoCisgIFB5dGhvbiAzLjEuICBGb3IgMy4xLCB0aGUgSS9PIGxpYnJhcnkgd2FzIGVudGlyZWx5IHJld3JpdHRlbiBpbiBDCisgIGFuZCBpcyAyIHRvIDIwIHRpbWVzIGZhc3RlciBkZXBlbmRpbmcgb24gdGhlIHRhc2sgYmVpbmcgcGVyZm9ybWVkLiAgVGhlCisgIG9yaWdpbmFsIFB5dGhvbiB2ZXJzaW9uIHdhcyByZW5hbWVkIHRvIHRoZSA6bW9kOmBfcHlpb2AgbW9kdWxlLgorCisgIE9uZSBtaW5vciByZXN1bHRpbmcgY2hhbmdlOiB0aGUgOmNsYXNzOmBpby5UZXh0SU9CYXNlYCBjbGFzcyBub3cKKyAgaGFzIGFuIDphdHRyOmBlcnJvcnNgIGF0dHJpYnV0ZSBnaXZpbmcgdGhlIGVycm9yIHNldHRpbmcKKyAgdXNlZCBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGVycm9ycyAob25lIG9mIGBgJ3N0cmljdCdgYCwgYGAncmVwbGFjZSdgYCwKKyAgYGAnaWdub3JlJ2BgKS4KKworICBUaGUgOmNsYXNzOmBpby5GaWxlSU9gIGNsYXNzIG5vdyByYWlzZXMgYW4gOmV4YzpgT1NFcnJvcmAgd2hlbiBwYXNzZWQKKyAgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IuICAoSW1wbGVtZW50ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb247CisgIDppc3N1ZTpgNDk5MWAuKSAgVGhlIDptZXRoOmB+aW8uSU9CYXNlLnRydW5jYXRlYCBtZXRob2Qgbm93IHByZXNlcnZlcyB0aGUKKyAgZmlsZSBwb3NpdGlvbjsgcHJldmlvdXNseSBpdCB3b3VsZCBjaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlCisgIGVuZCBvZiB0aGUgbmV3IGZpbGUuICAoRml4ZWQgYnkgUGFzY2FsIENoYW1ib247IDppc3N1ZTpgNjkzOWAuKQorCisqIE5ldyBmdW5jdGlvbjogYGBpdGVydG9vbHMuY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKWBgIHRha2VzIHR3bworICBpdGVyYXRvcnMuICBFbGVtZW50cyBvZiAqZGF0YSogYXJlIHJldHVybmVkIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgIHZhbHVlIGluICpzZWxlY3RvcnMqIGlzIHRydWU6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdKSA9PgorICAgICAgQSwgQywgRSwgRgorCisgIC4uIG1heWJlIGhlcmUgaXMgYmV0dGVyIHRvIHVzZSA+Pj4gbGlzdChpdGVydG9vbHMuY29tcHJlc3MoLi4uKSkgaW5zdGVhZAorCisgIE5ldyBmdW5jdGlvbjogYGBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlciwgcilgYAorICByZXR1cm5zIGFsbCB0aGUgcG9zc2libGUgKnIqLWxlbmd0aCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgZnJvbSB0aGUKKyAgaXRlcmFibGUgKml0ZXIqLiAgVW5saWtlIDpmdW5jOmB+aXRlcnRvb2xzLmNvbWJpbmF0aW9uc2AsIGluZGl2aWR1YWwgZWxlbWVudHMKKyAgY2FuIGJlIHJlcGVhdGVkIGluIHRoZSBnZW5lcmF0ZWQgY29tYmluYXRpb25zOjoKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnYWJjJywgMikgPT4KKyAgICAgICgnYScsICdhJyksICgnYScsICdiJyksICgnYScsICdjJyksCisgICAgICAoJ2InLCAnYicpLCAoJ2InLCAnYycpLCAoJ2MnLCAnYycpCisKKyAgTm90ZSB0aGF0IGVsZW1lbnRzIGFyZSB0cmVhdGVkIGFzIHVuaXF1ZSBkZXBlbmRpbmcgb24gdGhlaXIgcG9zaXRpb24KKyAgaW4gdGhlIGlucHV0LCBub3QgdGhlaXIgYWN0dWFsIHZhbHVlcy4KKworICBUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb3VudGAgZnVuY3Rpb24gbm93IGhhcyBhICpzdGVwKiBhcmd1bWVudCB0aGF0CisgIGFsbG93cyBpbmNyZW1lbnRpbmcgYnkgdmFsdWVzIG90aGVyIHRoYW4gMS4gIDpmdW5jOmB+aXRlcnRvb2xzLmNvdW50YCBhbHNvCisgIG5vdyBhbGxvd3Mga2V5d29yZCBhcmd1bWVudHMsIGFuZCB1c2luZyBub24taW50ZWdlciB2YWx1ZXMgc3VjaCBhcworICBmbG9hdHMgb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXMuICAoSW1wbGVtZW50ZWQgYnkgUmF5bW9uZAorICBIZXR0aW5nZXI7IDppc3N1ZTpgNTAzMmAuKQorCisgIDpmdW5jOmBpdGVydG9vbHMuY29tYmluYXRpb25zYCBhbmQgOmZ1bmM6YGl0ZXJ0b29scy5wcm9kdWN0YAorICBwcmV2aW91c2x5IHJhaXNlZCA6ZXhjOmBWYWx1ZUVycm9yYCBmb3IgdmFsdWVzIG9mICpyKiBsYXJnZXIgdGhhbgorICB0aGUgaW5wdXQgaXRlcmFibGUuICBUaGlzIHdhcyBkZWVtZWQgYSBzcGVjaWZpY2F0aW9uIGVycm9yLCBzbyB0aGV5CisgIG5vdyByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuICAoRml4ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNDgxNmAuKQorCisqIFVwZGF0ZWQgbW9kdWxlOiBUaGUgOm1vZDpganNvbmAgbW9kdWxlIHdhcyB1cGdyYWRlZCB0byB2ZXJzaW9uIDIuMC45IG9mIHRoZQorICBzaW1wbGVqc29uIHBhY2thZ2UsIHdoaWNoIGluY2x1ZGVzIGEgQyBleHRlbnNpb24gdGhhdCBtYWtlcworICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZmFzdGVyLgorICAoQ29udHJpYnV0ZWQgYnkgQm9iIElwcG9saXRvOyA6aXNzdWU6YDQxMzZgLikKKworICBUbyBzdXBwb3J0IHRoZSBuZXcgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgdHlwZSwgOmZ1bmM6YGpzb24ubG9hZGAKKyAgbm93IGhhcyBhbiBvcHRpb25hbCAqb2JqZWN0X3BhaXJzX2hvb2sqIHBhcmFtZXRlciB0aGF0IHdpbGwgYmUgY2FsbGVkCisgIHdpdGggYW55IG9iamVjdCBsaXRlcmFsIHRoYXQgZGVjb2RlcyB0byBhIGxpc3Qgb2YgcGFpcnMuCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA1MzgxYC4pCisKKyogVGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSdzIDpjbGFzczpgfm1haWxib3guTWFpbGRpcmAgY2xhc3Mgbm93IHJlY29yZHMgdGhlCisgIHRpbWVzdGFtcCBvbiB0aGUgZGlyZWN0b3JpZXMgaXQgcmVhZHMsIGFuZCBvbmx5IHJlLXJlYWRzIHRoZW0gaWYgdGhlCisgIG1vZGlmaWNhdGlvbiB0aW1lIGhhcyBzdWJzZXF1ZW50bHkgY2hhbmdlZC4gIFRoaXMgaW1wcm92ZXMKKyAgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWVkZWQgZGlyZWN0b3J5IHNjYW5zLiAgKEZpeGVkIGJ5CisgIEEuTS4gS3VjaGxpbmcgYW5kIEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDE2MDc5NTFgLCA6aXNzdWU6YDY4OTZgLikKKworKiBOZXcgZnVuY3Rpb25zOiB0aGUgOm1vZDpgbWF0aGAgbW9kdWxlIGdhaW5lZAorICA6ZnVuYzpgfm1hdGguZXJmYCBhbmQgOmZ1bmM6YH5tYXRoLmVyZmNgIGZvciB0aGUgZXJyb3IgZnVuY3Rpb24gYW5kIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uLAorICA6ZnVuYzpgfm1hdGguZXhwbTFgIHdoaWNoIGNvbXB1dGVzIGBgZSoqeCAtIDFgYCB3aXRoIG1vcmUgcHJlY2lzaW9uIHRoYW4KKyAgdXNpbmcgOmZ1bmM6YH5tYXRoLmV4cGAgYW5kIHN1YnRyYWN0aW5nIDEsCisgIDpmdW5jOmB+bWF0aC5nYW1tYWAgZm9yIHRoZSBHYW1tYSBmdW5jdGlvbiwgYW5kCisgIDpmdW5jOmB+bWF0aC5sZ2FtbWFgIGZvciB0aGUgbmF0dXJhbCBsb2cgb2YgdGhlIEdhbW1hIGZ1bmN0aW9uLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gYW5kIG5pcmluQSByYXNlbGlhcmlzb247IDppc3N1ZTpgMzM2NmAuKQorCisqIFRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZSdzIDpjbGFzczpgTWFuYWdlcipgIGNsYXNzZXMKKyAgY2FuIG5vdyBiZSBwYXNzZWQgYSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyCisgIGEgc3VicHJvY2VzcyBpcyBzdGFydGVkLCBhbG9uZyB3aXRoIGEgc2V0IG9mIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUKKyAgcGFzc2VkIHRvIHRoZSBjYWxsYWJsZS4KKyAgKENvbnRyaWJ1dGVkIGJ5IGxla21hOyA6aXNzdWU6YDU1ODVgLikKKworICBUaGUgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlBvb2xgIGNsYXNzLCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcywKKyAgbm93IGhhcyBhbiBvcHRpb25hbCAqbWF4dGFza3NwZXJjaGlsZCogcGFyYW1ldGVyLiAgV29ya2VyIHByb2Nlc3NlcworICB3aWxsIHBlcmZvcm0gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgYW5kIHRoZW4gZXhpdCwgY2F1c2luZyB0aGUKKyAgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlBvb2xgIHRvIHN0YXJ0IGEgbmV3IHdvcmtlci4gIFRoaXMgaXMgdXNlZnVsIGlmIHRhc2tzIG1heSBsZWFrCisgIG1lbW9yeSBvciBvdGhlciByZXNvdXJjZXMsIG9yIGlmIHNvbWUgdGFza3Mgd2lsbCBjYXVzZSB0aGUgd29ya2VyIHRvCisgIGJlY29tZSB2ZXJ5IGxhcmdlLgorICAoQ29udHJpYnV0ZWQgYnkgQ2hhcmxlcyBDYXphYm9uOyA6aXNzdWU6YDY5NjNgLikKKworKiBUaGUgOm1vZDpgbm50cGxpYmAgbW9kdWxlIG5vdyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IERlcmVrIE1vcnI7IDppc3N1ZTpgMTY2NGAuKQorCisqIE5ldyBmdW5jdGlvbnM6IHRoZSA6bW9kOmBvc2AgbW9kdWxlIHdyYXBzIHRoZSBmb2xsb3dpbmcgUE9TSVggc3lzdGVtCisgIGNhbGxzOiA6ZnVuYzpgfm9zLmdldHJlc2dpZGAgYW5kIDpmdW5jOmB+b3MuZ2V0cmVzdWlkYCwgd2hpY2ggcmV0dXJuIHRoZQorICByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBHSURzIGFuZCBVSURzOworICA6ZnVuYzpgfm9zLnNldHJlc2dpZGAgYW5kIDpmdW5jOmB+b3Muc2V0cmVzdWlkYCwgd2hpY2ggc2V0CisgIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIEdJRHMgYW5kIFVJRHMgdG8gbmV3IHZhbHVlczsKKyAgOmZ1bmM6YH5vcy5pbml0Z3JvdXBzYCwgd2hpY2ggaW5pdGlhbGl6ZSB0aGUgZ3JvdXAgYWNjZXNzIGxpc3QKKyAgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuICAoR0lEL1VJRCBmdW5jdGlvbnMKKyAgY29udHJpYnV0ZWQgYnkgVHJhdmlzIEguOyA6aXNzdWU6YDY1MDhgLiAgU3VwcG9ydCBmb3IgaW5pdGdyb3VwcyBhZGRlZAorICBieSBKZWFuLVBhdWwgQ2FsZGVyb25lOyA6aXNzdWU6YDczMzNgLikKKworICBUaGUgOmZ1bmM6YG9zLmZvcmtgIGZ1bmN0aW9uIG5vdyByZS1pbml0aWFsaXplcyB0aGUgaW1wb3J0IGxvY2sgaW4KKyAgdGhlIGNoaWxkIHByb2Nlc3M7IHRoaXMgZml4ZXMgcHJvYmxlbXMgb24gU29sYXJpcyB3aGVuIDpmdW5jOmB+b3MuZm9ya2AKKyAgaXMgY2FsbGVkIGZyb20gYSB0aHJlYWQuICAoRml4ZWQgYnkgWnNvbHQgQ3Nlcm5hOyA6aXNzdWU6YDcyNDJgLikKKworKiBJbiB0aGUgOm1vZDpgb3MucGF0aGAgbW9kdWxlLCB0aGUgOmZ1bmM6YH5vcy5wYXRoLm5vcm1wYXRoYCBhbmQKKyAgOmZ1bmM6YH5vcy5wYXRoLmFic3BhdGhgIGZ1bmN0aW9ucyBub3cgcHJlc2VydmUgVW5pY29kZTsgaWYgdGhlaXIgaW5wdXQgcGF0aAorICBpcyBhIFVuaWNvZGUgc3RyaW5nLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gYSBVbmljb2RlIHN0cmluZy4KKyAgKDptZXRoOmB+b3MucGF0aC5ub3JtcGF0aGAgZml4ZWQgYnkgTWF0dCBHaXVjYSBpbiA6aXNzdWU6YDU4MjdgOworICA6bWV0aDpgfm9zLnBhdGguYWJzcGF0aGAgZml4ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMzQyNmAuKQorCisqIFRoZSA6bW9kOmBweWRvY2AgbW9kdWxlIG5vdyBoYXMgaGVscCBmb3IgdGhlIHZhcmlvdXMgc3ltYm9scyB0aGF0IFB5dGhvbgorICB1c2VzLiAgWW91IGNhbiBub3cgZG8gYGBoZWxwKCc8PCcpYGAgb3IgYGBoZWxwKCdAJylgYCwgZm9yIGV4YW1wbGUuCisgIChDb250cmlidXRlZCBieSBEYXZpZCBMYWJhbjsgOmlzc3VlOmA0NzM5YC4pCisKKyogVGhlIDptb2Q6YHJlYCBtb2R1bGUncyA6ZnVuYzpgfnJlLnNwbGl0YCwgOmZ1bmM6YH5yZS5zdWJgLCBhbmQgOmZ1bmM6YH5yZS5zdWJuYAorICBub3cgYWNjZXB0IGFuIG9wdGlvbmFsICpmbGFncyogYXJndW1lbnQsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZQorICBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS4gIChBZGRlZCBieSBHcmVnb3J5IFAuIFNtaXRoLikKKworKiBOZXcgZnVuY3Rpb246IDpmdW5jOmB+cnVucHkucnVuX3BhdGhgIGluIHRoZSA6bW9kOmBydW5weWAgbW9kdWxlCisgIHdpbGwgZXhlY3V0ZSB0aGUgY29kZSBhdCBhIHByb3ZpZGVkICpwYXRoKiBhcmd1bWVudC4gICpwYXRoKiBjYW4gYmUKKyAgdGhlIHBhdGggb2YgYSBQeXRob24gc291cmNlIGZpbGUgKDpmaWxlOmBleGFtcGxlLnB5YCksIGEgY29tcGlsZWQKKyAgYnl0ZWNvZGUgZmlsZSAoOmZpbGU6YGV4YW1wbGUucHljYCksIGEgZGlyZWN0b3J5CisgICg6ZmlsZTpgLi9wYWNrYWdlL2ApLCBvciBhIHppcCBhcmNoaXZlICg6ZmlsZTpgZXhhbXBsZS56aXBgKS4gIElmIGEKKyAgZGlyZWN0b3J5IG9yIHppcCBwYXRoIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmcm9udCBvZgorICBgYHN5cy5wYXRoYGAgYW5kIHRoZSBtb2R1bGUgOm1vZDpgX19tYWluX19gIHdpbGwgYmUgaW1wb3J0ZWQuICBJdCdzCisgIGV4cGVjdGVkIHRoYXQgdGhlIGRpcmVjdG9yeSBvciB6aXAgY29udGFpbnMgYSA6ZmlsZTpgX19tYWluX18ucHlgOworICBpZiBpdCBkb2Vzbid0LCBzb21lIG90aGVyIDpmaWxlOmBfX21haW5fXy5weWAgbWlnaHQgYmUgaW1wb3J0ZWQgZnJvbQorICBhIGxvY2F0aW9uIGxhdGVyIGluIGBgc3lzLnBhdGhgYC4gIFRoaXMgbWFrZXMgbW9yZSBvZiB0aGUgbWFjaGluZXJ5CisgIG9mIDptb2Q6YHJ1bnB5YCBhdmFpbGFibGUgdG8gc2NyaXB0cyB0aGF0IHdhbnQgdG8gbWltaWMgdGhlIHdheQorICBQeXRob24ncyBjb21tYW5kIGxpbmUgcHJvY2Vzc2VzIGFuIGV4cGxpY2l0IHBhdGggbmFtZS4KKyAgKEFkZGVkIGJ5IE5pY2sgQ29naGxhbjsgOmlzc3VlOmA2ODE2YC4pCisKKyogTmV3IGZ1bmN0aW9uOiBpbiB0aGUgOm1vZDpgc2h1dGlsYCBtb2R1bGUsIDpmdW5jOmB+c2h1dGlsLm1ha2VfYXJjaGl2ZWAKKyAgdGFrZXMgYSBmaWxlbmFtZSwgYXJjaGl2ZSB0eXBlICh6aXAgb3IgdGFyLWZvcm1hdCksIGFuZCBhIGRpcmVjdG9yeQorICBwYXRoLCBhbmQgY3JlYXRlcyBhbiBhcmNoaXZlIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeSdzIGNvbnRlbnRzLgorICAoQWRkZWQgYnkgVGFyZWsgWmlhZMOpLikKKworICA6bW9kOmBzaHV0aWxgJ3MgOmZ1bmM6YH5zaHV0aWwuY29weWZpbGVgIGFuZCA6ZnVuYzpgfnNodXRpbC5jb3B5dHJlZWAKKyAgZnVuY3Rpb25zIG5vdyByYWlzZSBhIDpleGM6YH5zaHV0aWwuU3BlY2lhbEZpbGVFcnJvcmAgZXhjZXB0aW9uIHdoZW4KKyAgYXNrZWQgdG8gY29weSBhIG5hbWVkIHBpcGUuICBQcmV2aW91c2x5IHRoZSBjb2RlIHdvdWxkIHRyZWF0CisgIG5hbWVkIHBpcGVzIGxpa2UgYSByZWd1bGFyIGZpbGUgYnkgb3BlbmluZyB0aGVtIGZvciByZWFkaW5nLCBhbmQKKyAgdGhpcyB3b3VsZCBibG9jayBpbmRlZmluaXRlbHkuICAoRml4ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgMzAwMmAuKQorCisqIFRoZSA6bW9kOmBzaWduYWxgIG1vZHVsZSBubyBsb25nZXIgcmUtaW5zdGFsbHMgdGhlIHNpZ25hbCBoYW5kbGVyCisgIHVubGVzcyB0aGlzIGlzIHRydWx5IG5lY2Vzc2FyeSwgd2hpY2ggZml4ZXMgYSBidWcgdGhhdCBjb3VsZCBtYWtlIGl0CisgIGltcG9zc2libGUgdG8gY2F0Y2ggdGhlIEVJTlRSIHNpZ25hbCByb2J1c3RseS4gIChGaXhlZCBieQorICBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaTsgOmlzc3VlOmA4MzU0YC4pCisKKyogTmV3IGZ1bmN0aW9uczogaW4gdGhlIDptb2Q6YHNpdGVgIG1vZHVsZSwgdGhyZWUgbmV3IGZ1bmN0aW9ucworICByZXR1cm4gdmFyaW91cyBzaXRlLSBhbmQgdXNlci1zcGVjaWZpYyBwYXRocy4KKyAgOmZ1bmM6YH5zaXRlLmdldHNpdGVwYWNrYWdlc2AgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBhbGwKKyAgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMsCisgIDpmdW5jOmB+c2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzYCByZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB1c2VyJ3MKKyAgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIGFuZAorICA6ZnVuYzpgfnNpdGUuZ2V0dXNlcmJhc2VgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSA6ZW52dmFyOmBVU0VSX0JBU0VgCisgIGVudmlyb25tZW50IHZhcmlhYmxlLCBnaXZpbmcgdGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgdXNlZAorICB0byBzdG9yZSBkYXRhLgorICAoQ29udHJpYnV0ZWQgYnkgVGFyZWsgWmlhZMOpOyA6aXNzdWU6YDY2OTNgLikKKworICBUaGUgOm1vZDpgc2l0ZWAgbW9kdWxlIG5vdyByZXBvcnRzIGV4Y2VwdGlvbnMgb2NjdXJyaW5nCisgIHdoZW4gdGhlIDptb2Q6YHNpdGVjdXN0b21pemVgIG1vZHVsZSBpcyBpbXBvcnRlZCwgYW5kIHdpbGwgbm8gbG9uZ2VyCisgIGNhdGNoIGFuZCBzd2FsbG93IHRoZSA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLiAgKEZpeGVkIGJ5CisgIFZpY3RvciBTdGlubmVyOyA6aXNzdWU6YDMxMzdgLikKKworKiBUaGUgOmZ1bmM6YH5zb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uCisgIGdhaW5lZCBhICpzb3VyY2VfYWRkcmVzcyogcGFyYW1ldGVyLCBhIGBgKGhvc3QsIHBvcnQpYGAgMi10dXBsZQorICBnaXZpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEVsZG9uIFppZWdsZXI7IDppc3N1ZTpgMzk3MmAuKQorCisgIFRoZSA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdl9pbnRvYCBhbmQgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG9gCisgIG1ldGhvZHMgd2lsbCBub3cgd3JpdGUgaW50byBvYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSwgbW9zdCB1c2VmdWxseQorICB0aGUgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMuICAoSW1wbGVtZW50ZWQgYnkKKyAgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODEwNGAuKQorCisqIFRoZSA6bW9kOmBTb2NrZXRTZXJ2ZXJgIG1vZHVsZSdzIDpjbGFzczpgflNvY2tldFNlcnZlci5UQ1BTZXJ2ZXJgIGNsYXNzIG5vdworICBzdXBwb3J0cyBzb2NrZXQgdGltZW91dHMgYW5kIGRpc2FibGluZyB0aGUgTmFnbGUgYWxnb3JpdGhtLgorICBUaGUgOmF0dHI6YH5Tb2NrZXRTZXJ2ZXIuVENQU2VydmVyLmRpc2FibGVfbmFnbGVfYWxnb3JpdGhtYCBjbGFzcyBhdHRyaWJ1dGUKKyAgZGVmYXVsdHMgdG8gRmFsc2U7IGlmIG92ZXJyaWRkZW4gdG8gYmUgVHJ1ZSwKKyAgbmV3IHJlcXVlc3QgY29ubmVjdGlvbnMgd2lsbCBoYXZlIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24gc2V0IHRvCisgIHByZXZlbnQgYnVmZmVyaW5nIG1hbnkgc21hbGwgc2VuZHMgaW50byBhIHNpbmdsZSBUQ1AgcGFja2V0LgorICBUaGUgOmF0dHI6YH5Tb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci50aW1lb3V0YCBjbGFzcyBhdHRyaWJ1dGUgY2FuIGhvbGQKKyAgYSB0aW1lb3V0IGluIHNlY29uZHMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHJlcXVlc3Qgc29ja2V0OyBpZgorICBubyByZXF1ZXN0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGF0IHRpbWUsIDptZXRoOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXRgCisgIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0YCB3aWxsIHJldHVybi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA2MTkyYCBhbmQgOmlzc3VlOmA2MjY3YC4pCisKKyogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCB0bworICB2ZXJzaW9uIDIuNi4wIG9mIHRoZSBgcHlzcWxpdGUgcGFja2FnZSA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5c3FsaXRlLz5gX18uIFZlcnNpb24gMi42LjAgaW5jbHVkZXMgYSBudW1iZXIgb2YgYnVnZml4ZXMsIGFuZCBhZGRzCisgIHRoZSBhYmlsaXR5IHRvIGxvYWQgU1FMaXRlIGV4dGVuc2lvbnMgZnJvbSBzaGFyZWQgbGlicmFyaWVzLgorICBDYWxsIHRoZSBgYGVuYWJsZV9sb2FkX2V4dGVuc2lvbihUcnVlKWBgIG1ldGhvZCB0byBlbmFibGUgZXh0ZW5zaW9ucywKKyAgYW5kIHRoZW4gY2FsbCA6bWV0aDpgfnNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbmAgdG8gbG9hZCBhIHBhcnRpY3VsYXIgc2hhcmVkIGxpYnJhcnkuCisgIChVcGRhdGVkIGJ5IEdlcmhhcmQgSMOkcmluZy4pCisKKyogVGhlIDptb2Q6YHNzbGAgbW9kdWxlJ3MgOmNsYXNzOmB+c3NsLlNTTFNvY2tldGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUKKyAgYnVmZmVyIEFQSSwgd2hpY2ggZml4ZWQgYSB0ZXN0IHN1aXRlIGZhaWx1cmUgKGZpeCBieSBBbnRvaW5lIFBpdHJvdTsKKyAgOmlzc3VlOmA3MTMzYCkgYW5kIGF1dG9tYXRpY2FsbHkgc2V0CisgIE9wZW5TU0wncyA6Y21hY3JvOmBTU0xfTU9ERV9BVVRPX1JFVFJZYCwgd2hpY2ggd2lsbCBwcmV2ZW50IGFuIGVycm9yCisgIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSA6bWV0aDpgcmVjdmAgb3BlcmF0aW9ucyB0aGF0IHRyaWdnZXIgYW4gU1NMCisgIHJlbmVnb3RpYXRpb24gKGZpeCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4MjIyYCkuCisKKyAgVGhlIDpmdW5jOmBzc2wud3JhcF9zb2NrZXRgIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG5vdyB0YWtlcyBhCisgICpjaXBoZXJzKiBhcmd1bWVudCB0aGF0J3MgYSBzdHJpbmcgbGlzdGluZyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG1zCisgIHRvIGJlIGFsbG93ZWQ7IHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBkZXNjcmliZWQKKyAgYGluIHRoZSBPcGVuU1NMIGRvY3VtZW50YXRpb24KKyAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF9fLgorICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODMyMmAuKQorCisgIEFub3RoZXIgY2hhbmdlIG1ha2VzIHRoZSBleHRlbnNpb24gbG9hZCBhbGwgb2YgT3BlblNTTCdzIGNpcGhlcnMgYW5kCisgIGRpZ2VzdCBhbGdvcml0aG1zIHNvIHRoYXQgdGhleSdyZSBhbGwgYXZhaWxhYmxlLiAgU29tZSBTU0wKKyAgY2VydGlmaWNhdGVzIGNvdWxkbid0IGJlIHZlcmlmaWVkLCByZXBvcnRpbmcgYW4gInVua25vd24gYWxnb3JpdGhtIgorICBlcnJvci4gIChSZXBvcnRlZCBieSBCZWRhIEtvc2F0YSwgYW5kIGZpeGVkIGJ5IEFudG9pbmUgUGl0cm91OworICA6aXNzdWU6YDg0ODRgLikKKworICBUaGUgdmVyc2lvbiBvZiBPcGVuU1NMIGJlaW5nIHVzZWQgaXMgbm93IGF2YWlsYWJsZSBhcyB0aGUgbW9kdWxlCisgIGF0dHJpYnV0ZXMgOmRhdGE6YHNzbC5PUEVOU1NMX1ZFUlNJT05gIChhIHN0cmluZyksCisgIDpkYXRhOmBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk9gIChhIDUtdHVwbGUpLCBhbmQKKyAgOmRhdGE6YHNzbC5PUEVOU1NMX1ZFUlNJT05fTlVNQkVSYCAoYW4gaW50ZWdlcikuICAoQWRkZWQgYnkgQW50b2luZQorICBQaXRyb3U7IDppc3N1ZTpgODMyMWAuKQorCisqIFRoZSA6bW9kOmBzdHJ1Y3RgIG1vZHVsZSB3aWxsIG5vIGxvbmdlciBzaWxlbnRseSBpZ25vcmUgb3ZlcmZsb3cKKyAgZXJyb3JzIHdoZW4gYSB2YWx1ZSBpcyB0b28gbGFyZ2UgZm9yIGEgcGFydGljdWxhciBpbnRlZ2VyIGZvcm1hdAorICBjb2RlIChvbmUgb2YgYGBiQmhIaUlsTHFRYGApOyBpdCBub3cgYWx3YXlzIHJhaXNlcyBhCisgIDpleGM6YHN0cnVjdC5lcnJvcmAgZXhjZXB0aW9uLiAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247CisgIDppc3N1ZTpgMTUyM2AuKSAgVGhlIDpmdW5jOmB+c3RydWN0LnBhY2tgIGZ1bmN0aW9uIHdpbGwgYWxzbworICBhdHRlbXB0IHRvIHVzZSA6bWV0aDpgX19pbmRleF9fYCB0byBjb252ZXJ0IGFuZCBwYWNrIG5vbi1pbnRlZ2VycworICBiZWZvcmUgdHJ5aW5nIHRoZSA6bWV0aDpgX19pbnRfX2AgbWV0aG9kIG9yIHJlcG9ydGluZyBhbiBlcnJvci4KKyAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgODMwMGAuKQorCisqIE5ldyBmdW5jdGlvbjogdGhlIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZSdzCisgIDpmdW5jOmB+c3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIHJ1bnMgYSBjb21tYW5kIHdpdGggYSBzcGVjaWZpZWQgc2V0IG9mIGFyZ3VtZW50cworICBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCdzIG91dHB1dCBhcyBhIHN0cmluZyB3aGVuIHRoZSBjb21tYW5kIHJ1bnMgd2l0aG91dAorICBlcnJvciwgb3IgcmFpc2VzIGEgOmV4YzpgfnN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yYCBleGNlcHRpb24gb3RoZXJ3aXNlLgorCisgIDo6CisKKyAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydkZicsICctaCcsICcuJ10pCisgICAgJ0ZpbGVzeXN0ZW0gICAgIFNpemUgICBVc2VkICBBdmFpbCBDYXBhY2l0eSAgTW91bnRlZCBvblxuCisgICAgL2Rldi9kaXNrMHMyICAgIDUyRyAgICA0OUcgICAzLjBHICAgIDk0JSAgICAvXG4nCisKKyAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydkZicsICctaCcsICcvYm9ndXMnXSkKKyAgICAgIC4uLgorICAgIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOiBDb21tYW5kICdbJ2RmJywgJy1oJywgJy9ib2d1cyddJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEdyZWdvcnkgUC4gU21pdGguKQorCisgIFRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUgd2lsbCBub3cgcmV0cnkgaXRzIGludGVybmFsIHN5c3RlbSBjYWxscworICBvbiByZWNlaXZpbmcgYW4gOmNvbnN0OmBFSU5UUmAgc2lnbmFsLiAgKFJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlOyBmaW5hbAorICBwYXRjaCBieSBHcmVnb3J5IFAuIFNtaXRoIGluIDppc3N1ZTpgMTA2ODI2OGAuKQorCisqIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFsYCBpbiB0aGUgOm1vZDpgc3ltdGFibGVgIG1vZHVsZQorICByZXR1cm5zIHRydWUgZm9yIHZhcmlhYmxlcyB0aGF0IGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIGdsb2JhbCwKKyAgZmFsc2UgZm9yIG9uZXMgdGhhdCBhcmUgaW1wbGljaXRseSBnbG9iYWwuCisgIChDb250cmlidXRlZCBieSBKZXJlbXkgSHlsdG9uLikKKworKiBUaGUgOm1vZDpgc3lzbG9nYCBtb2R1bGUgd2lsbCBub3cgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5hcmd2WzBdYGAgYXMgdGhlCisgIGlkZW50aWZpZXIgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSBvZiBgYCdweXRob24nYGAuCisgIChDaGFuZ2VkIGJ5IFNlYW4gUmVpZnNjaG5laWRlcjsgOmlzc3VlOmA4NDUxYC4pCisKKyogVGhlIGBgc3lzLnZlcnNpb25faW5mb2BgIHZhbHVlIGlzIG5vdyBhIG5hbWVkIHR1cGxlLCB3aXRoIGF0dHJpYnV0ZXMKKyAgbmFtZWQgOmF0dHI6YG1ham9yYCwgOmF0dHI6YG1pbm9yYCwgOmF0dHI6YG1pY3JvYCwKKyAgOmF0dHI6YHJlbGVhc2VsZXZlbGAsIGFuZCA6YXR0cjpgc2VyaWFsYC4gIChDb250cmlidXRlZCBieSBSb3NzCisgIExpZ2h0OyA6aXNzdWU6YDQyODVgLikKKworICA6ZnVuYzpgc3lzLmdldHdpbmRvd3N2ZXJzaW9uYCBhbHNvIHJldHVybnMgYSBuYW1lZCB0dXBsZSwKKyAgd2l0aCBhdHRyaWJ1dGVzIG5hbWVkIDphdHRyOmBtYWpvcmAsIDphdHRyOmBtaW5vcmAsIDphdHRyOmBidWlsZGAsCisgIDphdHRyOmBwbGF0Zm9ybWAsIDphdHRyOmBzZXJ2aWNlX3BhY2tgLCA6YXR0cjpgc2VydmljZV9wYWNrX21ham9yYCwKKyAgOmF0dHI6YHNlcnZpY2VfcGFja19taW5vcmAsIDphdHRyOmBzdWl0ZV9tYXNrYCwgYW5kCisgIDphdHRyOmBwcm9kdWN0X3R5cGVgLiAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbjsgOmlzc3VlOmA3NzY2YC4pCisKKyogVGhlIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSdzIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcgaGFzIGNoYW5nZWQsIHRvCisgIG5vIGxvbmdlciBzdXBwcmVzcyBmYXRhbCBlcnJvcnMuICBUaGUgZGVmYXVsdCBlcnJvciBsZXZlbCB3YXMgcHJldmlvdXNseSAwLAorICB3aGljaCBtZWFudCB0aGF0IGVycm9ycyB3b3VsZCBvbmx5IHJlc3VsdCBpbiBhIG1lc3NhZ2UgYmVpbmcgd3JpdHRlbiB0byB0aGUKKyAgZGVidWcgbG9nLCBidXQgYmVjYXVzZSB0aGUgZGVidWcgbG9nIGlzIG5vdCBhY3RpdmF0ZWQgYnkgZGVmYXVsdCwKKyAgdGhlc2UgZXJyb3JzIGdvIHVubm90aWNlZC4gIFRoZSBkZWZhdWx0IGVycm9yIGxldmVsIGlzIG5vdyAxLAorICB3aGljaCByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCisgIChDaGFuZ2VkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDczNTdgLikKKworICA6bW9kOmB0YXJmaWxlYCBub3cgc3VwcG9ydHMgZmlsdGVyaW5nIHRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckluZm9gCisgIG9iamVjdHMgYmVpbmcgYWRkZWQgdG8gYSB0YXIgZmlsZS4gIFdoZW4geW91IGNhbGwgOm1ldGg6YH50YXJmaWxlLlRhckZpbGUuYWRkYCwKKyAgeW91IG1heSBzdXBwbHkgYW4gb3B0aW9uYWwgKmZpbHRlciogYXJndW1lbnQKKyAgdGhhdCdzIGEgY2FsbGFibGUuICBUaGUgKmZpbHRlciogY2FsbGFibGUgd2lsbCBiZSBwYXNzZWQgdGhlCisgIDpjbGFzczpgfnRhcmZpbGUuVGFySW5mb2AgZm9yIGV2ZXJ5IGZpbGUgYmVpbmcgYWRkZWQsIGFuZCBjYW4gbW9kaWZ5IGFuZCByZXR1cm4gaXQuCisgIElmIHRoZSBjYWxsYWJsZSByZXR1cm5zIGBgTm9uZWBgLCB0aGUgZmlsZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlCisgIHJlc3VsdGluZyBhcmNoaXZlLiAgVGhpcyBpcyBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGV4aXN0aW5nCisgICpleGNsdWRlKiBhcmd1bWVudCwgd2hpY2ggaGFzIHRoZXJlZm9yZSBiZWVuIGRlcHJlY2F0ZWQuCisgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA2ODU2YC4pCisgIFRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckZpbGVgIGNsYXNzIGFsc28gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA3MjMyYC4pCisKKyogVGhlIDptZXRoOmB+dGhyZWFkaW5nLkV2ZW50LndhaXRgIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgIGNsYXNzCisgIG5vdyByZXR1cm5zIHRoZSBpbnRlcm5hbCBmbGFnIG9uIGV4aXQuICBUaGlzIG1lYW5zIHRoZSBtZXRob2Qgd2lsbCB1c3VhbGx5CisgIHJldHVybiB0cnVlIGJlY2F1c2UgOm1ldGg6YH50aHJlYWRpbmcuRXZlbnQud2FpdGAgaXMgc3VwcG9zZWQgdG8gYmxvY2sgdW50aWwgdGhlCisgIGludGVybmFsIGZsYWcgYmVjb21lcyB0cnVlLiAgVGhlIHJldHVybiB2YWx1ZSB3aWxsIG9ubHkgYmUgZmFsc2UgaWYKKyAgYSB0aW1lb3V0IHdhcyBwcm92aWRlZCBhbmQgdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQuCisgIChDb250cmlidXRlZCBieSBUaW0gTGVzaGVyOyA6aXNzdWU6YDE2NzQwMzJgLikKKworKiBUaGUgVW5pY29kZSBkYXRhYmFzZSBwcm92aWRlZCBieSB0aGUgOm1vZDpgdW5pY29kZWRhdGFgIG1vZHVsZSBpcworICBub3cgdXNlZCBpbnRlcm5hbGx5IHRvIGRldGVybWluZSB3aGljaCBjaGFyYWN0ZXJzIGFyZSBudW1lcmljLAorICB3aGl0ZXNwYWNlLCBvciByZXByZXNlbnQgbGluZSBicmVha3MuICBUaGUgZGF0YWJhc2UgYWxzbworICBpbmNsdWRlcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSA6ZmlsZTpgVW5paGFuLnR4dGAgZGF0YSBmaWxlIChwYXRjaAorICBieSBBbmRlcnMgQ2hyaWdzdHLDtm0gYW5kIEFtYXVyeSBGb3JnZW90IGQnQXJjOyA6aXNzdWU6YDE1NzExODRgKQorICBhbmQgaGFzIGJlZW4gdXBkYXRlZCB0byB2ZXJzaW9uIDUuMi4wICh1cGRhdGVkIGJ5CisgIEZsb3JlbnQgWGljbHVuYTsgOmlzc3VlOmA4MDI0YCkuCisKKyogVGhlIDptb2Q6YHVybHBhcnNlYCBtb2R1bGUncyA6ZnVuYzpgfnVybHBhcnNlLnVybHNwbGl0YCBub3cgaGFuZGxlcworICB1bmtub3duIFVSTCBzY2hlbWVzIGluIGEgZmFzaGlvbiBjb21wbGlhbnQgd2l0aCA6cmZjOmAzOTg2YDogaWYgdGhlCisgIFVSTCBpcyBvZiB0aGUgZm9ybSBgYCI8c29tZXRoaW5nPjovLy4uLiJgYCwgdGhlIHRleHQgYmVmb3JlIHRoZQorICBgYDovL2BgIGlzIHRyZWF0ZWQgYXMgdGhlIHNjaGVtZSwgZXZlbiBpZiBpdCdzIGEgbWFkZS11cCBzY2hlbWUgdGhhdAorICB0aGUgbW9kdWxlIGRvZXNuJ3Qga25vdyBhYm91dC4gIFRoaXMgY2hhbmdlIG1heSBicmVhayBjb2RlIHRoYXQKKyAgd29ya2VkIGFyb3VuZCB0aGUgb2xkIGJlaGF2aW91ci4gIEZvciBleGFtcGxlLCBQeXRob24gMi42LjQgb3IgMi41CisgIHdpbGwgcmV0dXJuIHRoZSBmb2xsb3dpbmc6CisKKyAgICA+Pj4gaW1wb3J0IHVybHBhcnNlCisgICAgPj4+IHVybHBhcnNlLnVybHNwbGl0KCdpbnZlbnRlZDovL2hvc3QvZmlsZW5hbWU/cXVlcnknKQorICAgICgnaW52ZW50ZWQnLCAnJywgJy8vaG9zdC9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKKworICBQeXRob24gMi43IChhbmQgUHl0aG9uIDIuNi41KSB3aWxsIHJldHVybjoKKworICAgID4+PiBpbXBvcnQgdXJscGFyc2UKKyAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCisgICAgKCdpbnZlbnRlZCcsICdob3N0JywgJy9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKKworICAoUHl0aG9uIDIuNyBhY3R1YWxseSBwcm9kdWNlcyBzbGlnaHRseSBkaWZmZXJlbnQgb3V0cHV0LCBzaW5jZSBpdAorICByZXR1cm5zIGEgbmFtZWQgdHVwbGUgaW5zdGVhZCBvZiBhIHN0YW5kYXJkIHR1cGxlLikKKworICBUaGUgOm1vZDpgdXJscGFyc2VgIG1vZHVsZSBhbHNvIHN1cHBvcnRzIElQdjYgbGl0ZXJhbCBhZGRyZXNzZXMgYXMgZGVmaW5lZCBieQorICA6cmZjOmAyNzMyYCAoY29udHJpYnV0ZWQgYnkgU2VudGhpbCBLdW1hcmFuOyA6aXNzdWU6YDI5ODdgKS4gOjoKKworICAgID4+PiB1cmxwYXJzZS51cmxwYXJzZSgnaHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdL2ZvbycpCisgICAgUGFyc2VSZXN1bHQoc2NoZW1lPSdodHRwJywgbmV0bG9jPSdbMTA4MDo6ODo4MDA6MjAwQzo0MTdBXScsCisgICAgICAgICAgICAgICAgcGF0aD0nL2ZvbycsIHBhcmFtcz0nJywgcXVlcnk9JycsIGZyYWdtZW50PScnKQorCisqIE5ldyBjbGFzczogdGhlIDpjbGFzczpgfndlYWtyZWYuV2Vha1NldGAgY2xhc3MgaW4gdGhlIDptb2Q6YHdlYWtyZWZgCisgIG1vZHVsZSBpcyBhIHNldCB0aGF0IG9ubHkgaG9sZHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50czsgZWxlbWVudHMKKyAgd2lsbCBiZSByZW1vdmVkIG9uY2UgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgcG9pbnRpbmcgdG8gdGhlbS4KKyAgKE9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgaW4gUHl0aG9uIDMueCBieSBSYXltb25kIEhldHRpbmdlciwgYW5kIGJhY2twb3J0ZWQKKyAgdG8gMi43IGJ5IE1pY2hhZWwgRm9vcmQuKQorCisqIFRoZSBFbGVtZW50VHJlZSBsaWJyYXJ5LCA6bW9kOmB4bWwuZXRyZWVgLCBubyBsb25nZXIgZXNjYXBlcworICBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyB3aGVuIG91dHB1dHRpbmcgYW4gWE1MIHByb2Nlc3NpbmcKKyAgaW5zdHJ1Y3Rpb24gKHdoaWNoIGxvb2tzIGxpa2UgYGA8P3htbC1zdHlsZXNoZWV0IGhyZWY9IiNzdHlsZTEiPz5gYCkKKyAgb3IgY29tbWVudCAod2hpY2ggbG9va3MgbGlrZSBgYDwhLS0gY29tbWVudCAtLT5gYCkuCisgIChQYXRjaCBieSBOZWlsIE11bGxlcjsgOmlzc3VlOmAyNzQ2YC4pCisKKyogVGhlIFhNTC1SUEMgY2xpZW50IGFuZCBzZXJ2ZXIsIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB4bWxycGNsaWJgIGFuZAorICA6bW9kOmBTaW1wbGVYTUxSUENTZXJ2ZXJgIG1vZHVsZXMsIGhhdmUgaW1wcm92ZWQgcGVyZm9ybWFuY2UgYnkKKyAgc3VwcG9ydGluZyBIVFRQLzEuMSBrZWVwLWFsaXZlIGFuZCBieSBvcHRpb25hbGx5IHVzaW5nIGd6aXAgZW5jb2RpbmcKKyAgdG8gY29tcHJlc3MgdGhlIFhNTCBiZWluZyBleGNoYW5nZWQuICBUaGUgZ3ppcCBjb21wcmVzc2lvbiBpcworICBjb250cm9sbGVkIGJ5IHRoZSA6YXR0cjpgZW5jb2RlX3RocmVzaG9sZGAgYXR0cmlidXRlIG9mCisgIDpjbGFzczpgU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXJgLCB3aGljaCBjb250YWlucyBhIHNpemUgaW4gYnl0ZXM7CisgIHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGlzIHdpbGwgYmUgY29tcHJlc3NlZC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA2MjY3YC4pCisKKyogVGhlIDptb2Q6YHppcGZpbGVgIG1vZHVsZSdzIDpjbGFzczpgfnppcGZpbGUuWmlwRmlsZWAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0CisgIG1hbmFnZW1lbnQgcHJvdG9jb2wsIHNvIHlvdSBjYW4gd3JpdGUgYGB3aXRoIHppcGZpbGUuWmlwRmlsZSguLi4pIGFzIGY6YGAuCisgIChDb250cmlidXRlZCBieSBCcmlhbiBDdXJ0aW47IDppc3N1ZTpgNTUxMWAuKQorCisgIDptb2Q6YHppcGZpbGVgIG5vdyBhbHNvIHN1cHBvcnRzIGFyY2hpdmluZyBlbXB0eSBkaXJlY3RvcmllcyBhbmQKKyAgZXh0cmFjdHMgdGhlbSBjb3JyZWN0bHkuICAoRml4ZWQgYnkgS3ViYSBXaWVjem9yZWs7IDppc3N1ZTpgNDcxMGAuKQorICBSZWFkaW5nIGZpbGVzIG91dCBvZiBhbiBhcmNoaXZlIGlzIGZhc3RlciwgYW5kIGludGVybGVhdmluZworICA6bWV0aDpgfnppcGZpbGUuWmlwRmlsZS5yZWFkYCBhbmQgOm1ldGg6YH56aXBmaWxlLlppcEZpbGUucmVhZGxpbmVgIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisgIChDb250cmlidXRlZCBieSBOaXIgQWlkZXM7IDppc3N1ZTpgNzYxMGAuKQorCisgIFRoZSA6ZnVuYzpgfnppcGZpbGUuaXNfemlwZmlsZWAgZnVuY3Rpb24gbm93CisgIGFjY2VwdHMgYSBmaWxlIG9iamVjdCwgaW4gYWRkaXRpb24gdG8gdGhlIHBhdGggbmFtZXMgYWNjZXB0ZWQgaW4gZWFybGllcgorICB2ZXJzaW9ucy4gIChDb250cmlidXRlZCBieSBHYWJyaWVsIEdlbmVsbGluYTsgOmlzc3VlOmA0NzU2YC4pCisKKyAgVGhlIDptZXRoOmB+emlwZmlsZS5aaXBGaWxlLndyaXRlc3RyYCBtZXRob2Qgbm93IGhhcyBhbiBvcHRpb25hbCAqY29tcHJlc3NfdHlwZSogcGFyYW1ldGVyCisgIHRoYXQgbGV0cyB5b3Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbWV0aG9kIHNwZWNpZmllZCBpbiB0aGUKKyAgOmNsYXNzOmB+emlwZmlsZS5aaXBGaWxlYCBjb25zdHJ1Y3Rvci4gIChDb250cmlidXRlZCBieSBSb25hbGQgT3Vzc29yZW47CisgIDppc3N1ZTpgNjAwM2AuKQorCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy4uIHdob2xlIG5ldyBtb2R1bGVzIGdldCBkZXNjcmliZWQgaW4gc3Vic2VjdGlvbnMgaGVyZQorCisKKy4uIF9pbXBvcnRsaWItc2VjdGlvbjoKKworTmV3IG1vZHVsZTogaW1wb3J0bGliCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIDMuMSBpbmNsdWRlcyB0aGUgOm1vZDpgaW1wb3J0bGliYCBwYWNrYWdlLCBhIHJlLWltcGxlbWVudGF0aW9uCitvZiB0aGUgbG9naWMgdW5kZXJseWluZyBQeXRob24ncyA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQuCis6bW9kOmBpbXBvcnRsaWJgIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50b3JzIG9mIFB5dGhvbiBpbnRlcnByZXRlcnMgYW5kCit0byB1c2VycyB3aG8gd2lzaCB0byB3cml0ZSBuZXcgaW1wb3J0ZXJzIHRoYXQgY2FuIHBhcnRpY2lwYXRlIGluIHRoZQoraW1wb3J0IHByb2Nlc3MuICBQeXRob24gMi43IGRvZXNuJ3QgY29udGFpbiB0aGUgY29tcGxldGUKKzptb2Q6YGltcG9ydGxpYmAgcGFja2FnZSwgYnV0IGluc3RlYWQgaGFzIGEgdGlueSBzdWJzZXQgdGhhdCBjb250YWlucworYSBzaW5nbGUgZnVuY3Rpb24sIDpmdW5jOmB+aW1wb3J0bGliLmltcG9ydF9tb2R1bGVgLgorCitgYGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKWBgIGltcG9ydHMgYSBtb2R1bGUuICAqbmFtZSogaXMKK2Egc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1vZHVsZSBvciBwYWNrYWdlJ3MgbmFtZS4gIEl0J3MgcG9zc2libGUgdG8gZG8KK3JlbGF0aXZlIGltcG9ydHMgYnkgcHJvdmlkaW5nIGEgc3RyaW5nIHRoYXQgYmVnaW5zIHdpdGggYSBgYC5gYAorY2hhcmFjdGVyLCBzdWNoIGFzIGBgLi51dGlscy5lcnJvcnNgYC4gIEZvciByZWxhdGl2ZSBpbXBvcnRzLCB0aGUKKypwYWNrYWdlKiBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkIGFuZCBpcyB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0aGF0Cit3aWxsIGJlIHVzZWQgYXMgdGhlIGFuY2hvciBmb3IKK3RoZSByZWxhdGl2ZSBpbXBvcnQuICA6ZnVuYzpgfmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYCBib3RoIGluc2VydHMgdGhlIGltcG9ydGVkCittb2R1bGUgaW50byBgYHN5cy5tb2R1bGVzYGAgYW5kIHJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QuCisKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZXM6OgorCisgICAgPj4+IGZyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCisgICAgPj4+IGFueWRibSA9IGltcG9ydF9tb2R1bGUoJ2FueWRibScpICAjIFN0YW5kYXJkIGFic29sdXRlIGltcG9ydAorICAgID4+PiBhbnlkYm0KKyAgICA8bW9kdWxlICdhbnlkYm0nIGZyb20gJy9wL3B5dGhvbi9MaWIvYW55ZGJtLnB5Jz4KKyAgICA+Pj4gIyBSZWxhdGl2ZSBpbXBvcnQKKyAgICA+Pj4gZmlsZV91dGlsID0gaW1wb3J0X21vZHVsZSgnLi5maWxlX3V0aWwnLCAnZGlzdHV0aWxzLmNvbW1hbmQnKQorICAgID4+PiBmaWxlX3V0aWwKKyAgICA8bW9kdWxlICdkaXN0dXRpbHMuZmlsZV91dGlsJyBmcm9tICcvcHl0aG9uL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5Yyc+CisKKzptb2Q6YGltcG9ydGxpYmAgd2FzIGltcGxlbWVudGVkIGJ5IEJyZXR0IENhbm5vbiBhbmQgaW50cm9kdWNlZCBpbgorUHl0aG9uIDMuMS4KKworCitOZXcgbW9kdWxlOiBzeXNjb25maWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgc3lzY29uZmlnYCBtb2R1bGUgaGFzIGJlZW4gcHVsbGVkIG91dCBvZiB0aGUgRGlzdHV0aWxzCitwYWNrYWdlLCBiZWNvbWluZyBhIG5ldyB0b3AtbGV2ZWwgbW9kdWxlIGluIGl0cyBvd24gcmlnaHQuCis6bW9kOmBzeXNjb25maWdgIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dAorUHl0aG9uJ3MgYnVpbGQgcHJvY2VzczogY29tcGlsZXIgc3dpdGNoZXMsIGluc3RhbGxhdGlvbiBwYXRocywgdGhlCitwbGF0Zm9ybSBuYW1lLCBhbmQgd2hldGhlciBQeXRob24gaXMgcnVubmluZyBmcm9tIGl0cyBzb3VyY2UKK2RpcmVjdG9yeS4KKworU29tZSBvZiB0aGUgZnVuY3Rpb25zIGluIHRoZSBtb2R1bGUgYXJlOgorCisqIDpmdW5jOmB+c3lzY29uZmlnLmdldF9jb25maWdfdmFyYCByZXR1cm5zIHZhcmlhYmxlcyBmcm9tIFB5dGhvbidzCisgIE1ha2VmaWxlIGFuZCB0aGUgOmZpbGU6YHB5Y29uZmlnLmhgIGZpbGUuCisqIDpmdW5jOmB+c3lzY29uZmlnLmdldF9jb25maWdfdmFyc2AgcmV0dXJucyBhIGRpY3Rpb25hcnkgY29udGFpbmluZworICBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfcGF0aGAgcmV0dXJucyB0aGUgY29uZmlndXJlZCBwYXRoIGZvcgorICBhIHBhcnRpY3VsYXIgdHlwZSBvZiBtb2R1bGU6IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LAorICBzaXRlLXNwZWNpZmljIG1vZHVsZXMsIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVsZXMsIGV0Yy4KKyogOmZ1bmM6YH5zeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkYCByZXR1cm5zIHRydWUgaWYgeW91J3JlIHJ1bm5pbmcgYQorICBiaW5hcnkgZnJvbSBhIFB5dGhvbiBzb3VyY2UgdHJlZSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKworQ29uc3VsdCB0aGUgOm1vZDpgc3lzY29uZmlnYCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgYW5kIGZvcgorYSBjb21wbGV0ZSBsaXN0IG9mIGZ1bmN0aW9ucy4KKworVGhlIERpc3R1dGlscyBwYWNrYWdlIGFuZCA6bW9kOmBzeXNjb25maWdgIGFyZSBub3cgbWFpbnRhaW5lZCBieSBUYXJlaworWmlhZMOpLCB3aG8gaGFzIGFsc28gc3RhcnRlZCBhIERpc3R1dGlsczIgcGFja2FnZSAoc291cmNlIHJlcG9zaXRvcnkgYXQKK2h0dHA6Ly9oZy5weXRob24ub3JnL2Rpc3R1dGlsczIvKSBmb3IgZGV2ZWxvcGluZyBhIG5leHQtZ2VuZXJhdGlvbgordmVyc2lvbiBvZiBEaXN0dXRpbHMuCisKKwordHRrOiBUaGVtZWQgV2lkZ2V0cyBmb3IgVGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RjbC9UayA4LjUgaW5jbHVkZXMgYSBzZXQgb2YgdGhlbWVkIHdpZGdldHMgdGhhdCByZS1pbXBsZW1lbnQgYmFzaWMgVGsKK3dpZGdldHMgYnV0IGhhdmUgYSBtb3JlIGN1c3RvbWl6YWJsZSBhcHBlYXJhbmNlIGFuZCBjYW4gdGhlcmVmb3JlIG1vcmUKK2Nsb3NlbHkgcmVzZW1ibGUgdGhlIG5hdGl2ZSBwbGF0Zm9ybSdzIHdpZGdldHMuICBUaGlzIHdpZGdldAorc2V0IHdhcyBvcmlnaW5hbGx5IGNhbGxlZCBUaWxlLCBidXQgd2FzIHJlbmFtZWQgdG8gVHRrIChmb3IgInRoZW1lZCBUayIpCitvbiBiZWluZyBhZGRlZCB0byBUY2wvVGNrIHJlbGVhc2UgOC41LgorCitUbyBsZWFybiBtb3JlLCByZWFkIHRoZSA6bW9kOmB0dGtgIG1vZHVsZSBkb2N1bWVudGF0aW9uLiAgWW91IG1heSBhbHNvCit3aXNoIHRvIHJlYWQgdGhlIFRjbC9UayBtYW51YWwgcGFnZSBkZXNjcmliaW5nIHRoZQorVHRrIHRoZW1lIGVuZ2luZSwgYXZhaWxhYmxlIGF0CitodHRwOi8vd3d3LnRjbC50ay9tYW4vdGNsOC41L1RrQ21kL3R0a19pbnRyby5odG0uIFNvbWUKK3NjcmVlbnNob3RzIG9mIHRoZSBQeXRob24vVHRrIGNvZGUgaW4gdXNlIGFyZSBhdAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi10dGsvd2lraS9TY3JlZW5zaG90cy4KKworVGhlIDptb2Q6YHR0a2AgbW9kdWxlIHdhcyB3cml0dGVuIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBhZGRlZCBpbgorOmlzc3VlOmAyOTgzYC4gIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIGNhbGxlZCBgYFRpbGUucHlgYCwgd3JpdHRlbiBieQorTWFydGluIEZyYW5rbGluIGFuZCBtYWludGFpbmVkIGJ5IEtldmluIFdhbHplciwgd2FzIHByb3Bvc2VkIGZvcgoraW5jbHVzaW9uIGluIDppc3N1ZTpgMjYxOGAsIGJ1dCB0aGUgYXV0aG9ycyBhcmd1ZWQgdGhhdCBHdWlsaGVybWUKK1BvbG8ncyB3b3JrIHdhcyBtb3JlIGNvbXByZWhlbnNpdmUuCisKKworLi4gX3VuaXR0ZXN0LXNlY3Rpb246CisKK1VwZGF0ZWQgbW9kdWxlOiB1bml0dGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIHdhcyBncmVhdGx5IGVuaGFuY2VkOyBtYW55CituZXcgZmVhdHVyZXMgd2VyZSBhZGRlZC4gIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgd2VyZSBpbXBsZW1lbnRlZAorYnkgTWljaGFlbCBGb29yZCwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4gIFRoZSBlbmhhbmNlZCB2ZXJzaW9uIG9mCit0aGUgbW9kdWxlIGlzIGRvd25sb2FkYWJsZSBzZXBhcmF0ZWx5IGZvciB1c2Ugd2l0aCBQeXRob24gdmVyc2lvbnMgMi40IHRvIDIuNiwKK3BhY2thZ2VkIGFzIHRoZSA6bW9kOmB1bml0dGVzdDJgIHBhY2thZ2UsIGZyb20KK2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS91bml0dGVzdDIuCisKK1doZW4gdXNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBtb2R1bGUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzY292ZXIKK3Rlc3RzLiAgSXQncyBub3QgYXMgZmFuY3kgYXMgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfXyBvcgorYG5vc2UgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXRob24tbm9zZS8+YF9fLCBidXQgcHJvdmlkZXMgYSBzaW1wbGUgd2F5Cit0byBydW4gdGVzdHMga2VwdCB3aXRoaW4gYSBzZXQgb2YgcGFja2FnZSBkaXJlY3Rvcmllcy4gIEZvciBleGFtcGxlLAordGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgc2VhcmNoIHRoZSA6ZmlsZTpgdGVzdC9gIHN1YmRpcmVjdG9yeSBmb3IKK2FueSBpbXBvcnRhYmxlIHRlc3QgZmlsZXMgbmFtZWQgYGB0ZXN0Ki5weWBgOjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIHRlc3QKKworQ29uc3VsdCB0aGUgOm1vZDpgdW5pdHRlc3RgIG1vZHVsZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCisoRGV2ZWxvcGVkIGluIDppc3N1ZTpgNjAwMWAuKQorCitUaGUgOmZ1bmM6YH51bml0dGVzdC5tYWluYCBmdW5jdGlvbiBzdXBwb3J0cyBzb21lIG90aGVyIG5ldyBvcHRpb25zOgorCisqIDpvcHRpb246YC1iYCBvciA6b3B0aW9uOmAtLWJ1ZmZlcmAgd2lsbCBidWZmZXIgdGhlIHN0YW5kYXJkIG91dHB1dAorICBhbmQgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBkdXJpbmcgZWFjaCB0ZXN0LiAgSWYgdGhlIHRlc3QgcGFzc2VzLAorICBhbnkgcmVzdWx0aW5nIG91dHB1dCB3aWxsIGJlIGRpc2NhcmRlZDsgb24gZmFpbHVyZSwgdGhlIGJ1ZmZlcmVkCisgIG91dHB1dCB3aWxsIGJlIGRpc3BsYXllZC4KKworKiA6b3B0aW9uOmAtY2Agb3IgOm9wdGlvbjpgLS1jYXRjaGAgd2lsbCBjYXVzZSB0aGUgY29udHJvbC1DIGludGVycnVwdAorICB0byBiZSBoYW5kbGVkIG1vcmUgZ3JhY2VmdWxseS4gIEluc3RlYWQgb2YgaW50ZXJydXB0aW5nIHRoZSB0ZXN0CisgIHByb2Nlc3MgaW1tZWRpYXRlbHksIHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0IHdpbGwgYmUgY29tcGxldGVkCisgIGFuZCB0aGVuIHRoZSBwYXJ0aWFsIHJlc3VsdHMgdXAgdG8gdGhlIGludGVycnVwdGlvbiB3aWxsIGJlIHJlcG9ydGVkLgorICBJZiB5b3UncmUgaW1wYXRpZW50LCBhIHNlY29uZCBwcmVzcyBvZiBjb250cm9sLUMgd2lsbCBjYXVzZSBhbiBpbW1lZGlhdGUKKyAgaW50ZXJydXB0aW9uLgorCisgIFRoaXMgY29udHJvbC1DIGhhbmRsZXIgdHJpZXMgdG8gYXZvaWQgY2F1c2luZyBwcm9ibGVtcyB3aGVuIHRoZSBjb2RlCisgIGJlaW5nIHRlc3RlZCBvciB0aGUgdGVzdHMgYmVpbmcgcnVuIGhhdmUgZGVmaW5lZCBhIHNpZ25hbCBoYW5kbGVyIG9mCisgIHRoZWlyIG93biwgYnkgbm90aWNpbmcgdGhhdCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCBhbmQKKyAgY2FsbGluZyBpdC4gIElmIHRoaXMgZG9lc24ndCB3b3JrIGZvciB5b3UsIHRoZXJlJ3MgYQorICA6ZnVuYzpgfnVuaXR0ZXN0LnJlbW92ZUhhbmRsZXJgIGRlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcmsgdGVzdHMgdGhhdAorICBzaG91bGQgaGF2ZSB0aGUgY29udHJvbC1DIGhhbmRsaW5nIGRpc2FibGVkLgorCisqIDpvcHRpb246YC1mYCBvciA6b3B0aW9uOmAtLWZhaWxmYXN0YCBtYWtlcworICB0ZXN0IGV4ZWN1dGlvbiBzdG9wIGltbWVkaWF0ZWx5IHdoZW4gYSB0ZXN0IGZhaWxzIGluc3RlYWQgb2YKKyAgY29udGludWluZyB0byBleGVjdXRlIGZ1cnRoZXIgdGVzdHMuICAoU3VnZ2VzdGVkIGJ5IENsaWZmIER5ZXIgYW5kCisgIGltcGxlbWVudGVkIGJ5IE1pY2hhZWwgRm9vcmQ7IDppc3N1ZTpgODA3NGAuKQorCitUaGUgcHJvZ3Jlc3MgbWVzc2FnZXMgbm93IHNob3cgJ3gnIGZvciBleHBlY3RlZCBmYWlsdXJlcworYW5kICd1JyBmb3IgdW5leHBlY3RlZCBzdWNjZXNzZXMgd2hlbiBydW4gaW4gdmVyYm9zZSBtb2RlLgorKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uLikKKworVGVzdCBjYXNlcyBjYW4gcmFpc2UgdGhlIDpleGM6YH51bml0dGVzdC5Ta2lwVGVzdGAgZXhjZXB0aW9uIHRvIHNraXAgYQordGVzdCAoOmlzc3VlOmAxMDM0MDUzYCkuCisKK1RoZSBlcnJvciBtZXNzYWdlcyBmb3IgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAsCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWVgLCBhbmQgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRGYWxzZWAKK2ZhaWx1cmVzIG5vdyBwcm92aWRlIG1vcmUgaW5mb3JtYXRpb24uICBJZiB5b3Ugc2V0IHRoZQorOmF0dHI6YH51bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZWAgYXR0cmlidXRlIG9mIHlvdXIgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdENhc2VgIGNsYXNzZXMgdG8KK1RydWUsIGJvdGggdGhlIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgYW5kIGFueSBhZGRpdGlvbmFsIG1lc3NhZ2UgeW91Citwcm92aWRlIHdpbGwgYmUgcHJpbnRlZCBmb3IgZmFpbHVyZXMuICAoQWRkZWQgYnkgTWljaGFlbCBGb29yZDsgOmlzc3VlOmA1NjYzYC4pCisKK1RoZSA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlc2AgbWV0aG9kIG5vdworcmV0dXJucyBhIGNvbnRleHQgaGFuZGxlciB3aGVuIGNhbGxlZCB3aXRob3V0IHByb3ZpZGluZyBhIGNhbGxhYmxlCitvYmplY3QgdG8gcnVuLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gd3JpdGUgdGhpczo6CisKKyAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICB7fVsnZm9vJ10KKworKEltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDQ0NDRgLikKKworLi4gcmV2IDc4Nzc0CisKK01vZHVsZS0gYW5kIGNsYXNzLWxldmVsIHNldHVwIGFuZCB0ZWFyZG93biBmaXh0dXJlcyBhcmUgbm93IHN1cHBvcnRlZC4KK01vZHVsZXMgY2FuIGNvbnRhaW4gOmZ1bmM6YH51bml0dGVzdC5zZXRVcE1vZHVsZWAgYW5kIDpmdW5jOmB+dW5pdHRlc3QudGVhckRvd25Nb2R1bGVgCitmdW5jdGlvbnMuICBDbGFzc2VzIGNhbiBoYXZlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBDbGFzc2AgYW5kCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3NgIG1ldGhvZHMgdGhhdCBtdXN0IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcworKHVzaW5nIGBgQGNsYXNzbWV0aG9kYGAgb3IgZXF1aXZhbGVudCkuICBUaGVzZSBmdW5jdGlvbnMgYW5kCittZXRob2RzIGFyZSBpbnZva2VkIHdoZW4gdGhlIHRlc3QgcnVubmVyIHN3aXRjaGVzIHRvIGEgdGVzdCBjYXNlIGluIGEKK2RpZmZlcmVudCBtb2R1bGUgb3IgY2xhc3MuCisKK1RoZSBtZXRob2RzIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cGAgYW5kCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmRvQ2xlYW51cHNgIHdlcmUgYWRkZWQuCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFkZENsZWFudXBgIGxldHMgeW91IGFkZCBjbGVhbnVwIGZ1bmN0aW9ucyB0aGF0Cit3aWxsIGJlIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgKGFmdGVyIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBgIGlmCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwYCBmYWlscywgb3RoZXJ3aXNlIGFmdGVyIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25gKS4gVGhpcyBhbGxvd3MKK2ZvciBtdWNoIHNpbXBsZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGR1cmluZyB0ZXN0cworKDppc3N1ZTpgNTY3OWApLgorCitBIG51bWJlciBvZiBuZXcgbWV0aG9kcyB3ZXJlIGFkZGVkIHRoYXQgcHJvdmlkZSBtb3JlIHNwZWNpYWxpemVkCit0ZXN0cy4gIE1hbnkgb2YgdGhlc2UgbWV0aG9kcyB3ZXJlIHdyaXR0ZW4gYnkgR29vZ2xlIGVuZ2luZWVycworZm9yIHVzZSBpbiB0aGVpciB0ZXN0IHN1aXRlczsgR3JlZ29yeSBQLiBTbWl0aCwgTWljaGFlbCBGb29yZCwgYW5kCitHdlIgd29ya2VkIG9uIG1lcmdpbmcgdGhlbSBpbnRvIFB5dGhvbidzIHZlcnNpb24gb2YgOm1vZDpgdW5pdHRlc3RgLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb25lYCBhbmQgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vdE5vbmVgIHRha2Ugb25lCisgIGV4cHJlc3Npb24gYW5kIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgaXMgb3IgaXMgbm90IGBgTm9uZWBgLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNgIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90YAorICB0YWtlIHR3byB2YWx1ZXMgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIHR3byB2YWx1ZXMgZXZhbHVhdGUgdG8gdGhlIHNhbWUgb2JqZWN0IG9yIG5vdC4KKyAgKEFkZGVkIGJ5IE1pY2hhZWwgRm9vcmQ7IDppc3N1ZTpgMjU3OGAuKQorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNJbnN0YW5jZWAgYW5kCisgIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90SXNJbnN0YW5jZWAgY2hlY2sgd2hldGhlcgorICB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgY2xhc3MsIG9yIG9mCisgIG9uZSBvZiBhIHR1cGxlIG9mIGNsYXNzZXMuICAoQWRkZWQgYnkgR2VvcmcgQnJhbmRsOyA6aXNzdWU6YDcwMzFgLikKKworKiA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEdyZWF0ZXJgLCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEdyZWF0ZXJFcXVhbGAsCisgIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc2AsIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExlc3NFcXVhbGAgY29tcGFyZQorICB0d28gcXVhbnRpdGllcy4KKworKiA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsYCBjb21wYXJlcyB0d28gc3RyaW5ncywgYW5kIGlmIHRoZXkncmUKKyAgbm90IGVxdWFsLCBkaXNwbGF5cyBhIGhlbHBmdWwgY29tcGFyaXNvbiB0aGF0IGhpZ2hsaWdodHMgdGhlCisgIGRpZmZlcmVuY2VzIGluIHRoZSB0d28gc3RyaW5ncy4gIFRoaXMgY29tcGFyaXNvbiBpcyBub3cgdXNlZCBieQorICBkZWZhdWx0IHdoZW4gVW5pY29kZSBzdHJpbmdzIGFyZSBjb21wYXJlZCB3aXRoIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxgLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmVnZXhwTWF0Y2hlc2AgYW5kCisgIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlc2AgY2hlY2tzIHdoZXRoZXIgdGhlCisgIGZpcnN0IGFyZ3VtZW50IGlzIGEgc3RyaW5nIG1hdGNoaW5nIG9yIG5vdCBtYXRjaGluZyB0aGUgcmVndWxhcgorICBleHByZXNzaW9uIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgKDppc3N1ZTpgODAzOGApLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzUmVnZXhwYCBjaGVja3Mgd2hldGhlciBhIHBhcnRpY3VsYXIgZXhjZXB0aW9uCisgIGlzIHJhaXNlZCwgYW5kIHRoZW4gYWxzbyBjaGVja3MgdGhhdCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mCisgIHRoZSBleGNlcHRpb24gbWF0Y2hlcyB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9uLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SW5gIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEluYAorICB0ZXN0cyB3aGV0aGVyICpmaXJzdCogaXMgb3IgaXMgbm90IGluICAqc2Vjb25kKi4KKworKiA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEl0ZW1zRXF1YWxgIHRlc3RzIHdoZXRoZXIgdHdvIHByb3ZpZGVkIHNlcXVlbmNlcworICBjb250YWluIHRoZSBzYW1lIGVsZW1lbnRzLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2V0RXF1YWxgIGNvbXBhcmVzIHdoZXRoZXIgdHdvIHNldHMgYXJlIGVxdWFsLCBhbmQKKyAgb25seSByZXBvcnRzIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzZXRzIGluIGNhc2Ugb2YgZXJyb3IuCisKKyogU2ltaWxhcmx5LCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExpc3RFcXVhbGAgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHVwbGVFcXVhbGAKKyAgY29tcGFyZSB0aGUgc3BlY2lmaWVkIHR5cGVzIGFuZCBleHBsYWluIGFueSBkaWZmZXJlbmNlcyB3aXRob3V0IG5lY2Vzc2FyaWx5CisgIHByaW50aW5nIHRoZWlyIGZ1bGwgdmFsdWVzOyB0aGVzZSBtZXRob2RzIGFyZSBub3cgdXNlZCBieSBkZWZhdWx0CisgIHdoZW4gY29tcGFyaW5nIGxpc3RzIGFuZCB0dXBsZXMgdXNpbmcgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAuCisgIE1vcmUgZ2VuZXJhbGx5LCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNlcXVlbmNlRXF1YWxgIGNvbXBhcmVzIHR3byBzZXF1ZW5jZXMKKyAgYW5kIGNhbiBvcHRpb25hbGx5IGNoZWNrIHdoZXRoZXIgYm90aCBzZXF1ZW5jZXMgYXJlIG9mIGEKKyAgcGFydGljdWxhciB0eXBlLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdEVxdWFsYCBjb21wYXJlcyB0d28gZGljdGlvbmFyaWVzIGFuZCByZXBvcnRzIHRoZQorICBkaWZmZXJlbmNlczsgaXQncyBub3cgdXNlZCBieSBkZWZhdWx0IHdoZW4geW91IGNvbXBhcmUgdHdvIGRpY3Rpb25hcmllcworICB1c2luZyA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYC4gIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0YCBjaGVja3Mgd2hldGhlcgorICBhbGwgb2YgdGhlIGtleS92YWx1ZSBwYWlycyBpbiAqZmlyc3QqIGFyZSBmb3VuZCBpbiAqc2Vjb25kKi4KKworKiA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsYCBhbmQgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbGAgdGVzdAorICB3aGV0aGVyICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLiAgVGhpcyBtZXRob2QKKyAgY2FuIGVpdGhlciByb3VuZCB0aGVpciBkaWZmZXJlbmNlIHRvIGFuIG9wdGlvbmFsbHktc3BlY2lmaWVkIG51bWJlcgorICBvZiAqcGxhY2VzKiAodGhlIGRlZmF1bHQgaXMgNykgYW5kIGNvbXBhcmUgaXQgdG8gemVybywgb3IgcmVxdWlyZQorICB0aGUgZGlmZmVyZW5jZSB0byBiZSBzbWFsbGVyIHRoYW4gYSBzdXBwbGllZCAqZGVsdGEqIHZhbHVlLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZWAgcHJvcGVybHkgaG9ub3JzIHRoZQorICA6YXR0cjpgfnVuaXR0ZXN0LlRlc3RMb2FkZXIuc3VpdGVDbGFzc2AgYXR0cmlidXRlIG9mCisgIHRoZSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0TG9hZGVyYC4gKEZpeGVkIGJ5IE1hcmsgUm9kZHk7IDppc3N1ZTpgNjg2NmAuKQorCisqIEEgbmV3IGhvb2sgbGV0cyB5b3UgZXh0ZW5kIHRoZSA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYCBtZXRob2QgdG8gaGFuZGxlCisgIG5ldyBkYXRhIHR5cGVzLiAgVGhlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYWRkVHlwZUVxdWFsaXR5RnVuY2AgbWV0aG9kIHRha2VzIGEgdHlwZQorICBvYmplY3QgYW5kIGEgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgd2hlbiBib3RoIG9mIHRoZQorICBvYmplY3RzIGJlaW5nIGNvbXBhcmVkIGFyZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuICBUaGlzIGZ1bmN0aW9uCisgIHNob3VsZCBjb21wYXJlIHRoZSB0d28gb2JqZWN0cyBhbmQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZXkgZG9uJ3QKKyAgbWF0Y2g7IGl0J3MgYSBnb29kIGlkZWEgZm9yIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGFkZGl0aW9uYWwKKyAgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHRoZSB0d28gb2JqZWN0cyBhcmVuJ3QgbWF0Y2hpbmcsIG11Y2ggYXMgdGhlIG5ldworICBzZXF1ZW5jZSBjb21wYXJpc29uIG1ldGhvZHMgZG8uCisKKzpmdW5jOmB1bml0dGVzdC5tYWluYCBub3cgdGFrZXMgYW4gb3B0aW9uYWwgYGBleGl0YGAgYXJndW1lbnQuICBJZgorRmFsc2UsIDpmdW5jOmB+dW5pdHRlc3QubWFpbmAgZG9lc24ndCBjYWxsIDpmdW5jOmBzeXMuZXhpdGAsIGFsbG93aW5nCis6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIHRvIGJlIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisoQ29udHJpYnV0ZWQgYnkgSi4gUGFibG8gRmVybsOhbmRlejsgOmlzc3VlOmAzMzc5YC4pCisKKzpjbGFzczpgfnVuaXR0ZXN0LlRlc3RSZXN1bHRgIGhhcyBuZXcgOm1ldGg6YH51bml0dGVzdC5UZXN0UmVzdWx0LnN0YXJ0VGVzdFJ1bmAgYW5kCis6bWV0aDpgfnVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3RSdW5gIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZQorYW5kIGFmdGVyIGEgdGVzdCBydW4uICAoQ29udHJpYnV0ZWQgYnkgUm9iZXJ0IENvbGxpbnM7IDppc3N1ZTpgNTcyOGAuKQorCitXaXRoIGFsbCB0aGVzZSBjaGFuZ2VzLCB0aGUgOmZpbGU6YHVuaXR0ZXN0LnB5YCB3YXMgYmVjb21pbmcgYXdrd2FyZGx5CitsYXJnZSwgc28gdGhlIG1vZHVsZSB3YXMgdHVybmVkIGludG8gYSBwYWNrYWdlIGFuZCB0aGUgY29kZSBzcGxpdCBpbnRvCitzZXZlcmFsIGZpbGVzIChieSBCZW5qYW1pbiBQZXRlcnNvbikuICBUaGlzIGRvZXNuJ3QgYWZmZWN0IGhvdyB0aGUKK21vZHVsZSBpcyBpbXBvcnRlZCBvciB1c2VkLgorCisuLiBzZWVhbHNvOjoKKworICBodHRwOi8vd3d3LnZvaWRzcGFjZS5vcmcudWsvcHl0aG9uL2FydGljbGVzL3VuaXR0ZXN0Mi5zaHRtbAorICAgIERlc2NyaWJlcyB0aGUgbmV3IGZlYXR1cmVzLCBob3cgdG8gdXNlIHRoZW0sIGFuZCB0aGUKKyAgICByYXRpb25hbGUgZm9yIHZhcmlvdXMgZGVzaWduIGRlY2lzaW9ucy4gIChCeSBNaWNoYWVsIEZvb3JkLikKKworLi4gX2VsZW1lbnR0cmVlLXNlY3Rpb246CisKK1VwZGF0ZWQgbW9kdWxlOiBFbGVtZW50VHJlZSAxLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdmVyc2lvbiBvZiB0aGUgRWxlbWVudFRyZWUgbGlicmFyeSBpbmNsdWRlZCB3aXRoIFB5dGhvbiB3YXMgdXBkYXRlZCB0bwordmVyc2lvbiAxLjMuICBTb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMgYXJlOgorCisqIFRoZSB2YXJpb3VzIHBhcnNpbmcgZnVuY3Rpb25zIG5vdyB0YWtlIGEgKnBhcnNlcioga2V5d29yZCBhcmd1bWVudAorICBnaXZpbmcgYW4gOmNsYXNzOmBYTUxQYXJzZXJgIGluc3RhbmNlIHRoYXQgd2lsbAorICBiZSB1c2VkLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgZmlsZSdzIGludGVybmFsIGVuY29kaW5nOjoKKworICAgIHAgPSBFVC5YTUxQYXJzZXIoZW5jb2Rpbmc9J3V0Zi04JykKKyAgICB0ID0gRVQuWE1MKCIiIjxyb290Lz4iIiIsIHBhcnNlcj1wKQorCisgIEVycm9ycyBpbiBwYXJzaW5nIFhNTCBub3cgcmFpc2UgYSA6ZXhjOmBQYXJzZUVycm9yYCBleGNlcHRpb24sIHdob3NlCisgIGluc3RhbmNlcyBoYXZlIGEgOmF0dHI6YHBvc2l0aW9uYCBhdHRyaWJ1dGUKKyAgY29udGFpbmluZyBhICgqbGluZSosICpjb2x1bW4qKSB0dXBsZSBnaXZpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9ibGVtLgorCisqIEVsZW1lbnRUcmVlJ3MgY29kZSBmb3IgY29udmVydGluZyB0cmVlcyB0byBhIHN0cmluZyBoYXMgYmVlbgorICBzaWduaWZpY2FudGx5IHJld29ya2VkLCBtYWtpbmcgaXQgcm91Z2hseSB0d2ljZSBhcyBmYXN0IGluIG1hbnkKKyAgY2FzZXMuICBUaGUgOmNsYXNzOmBFbGVtZW50VHJlZWAgOm1ldGg6YHdyaXRlYCBhbmQgOmNsYXNzOmBFbGVtZW50YAorICA6bWV0aDpgd3JpdGVgIG1ldGhvZHMgbm93IGhhdmUgYSAqbWV0aG9kKiBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUKKyAgInhtbCIgKHRoZSBkZWZhdWx0KSwgImh0bWwiLCBvciAidGV4dCIuICBIVE1MIG1vZGUgd2lsbCBvdXRwdXQgZW1wdHkKKyAgZWxlbWVudHMgYXMgYGA8ZW1wdHk+PC9lbXB0eT5gYCBpbnN0ZWFkIG9mIGBgPGVtcHR5Lz5gYCwgYW5kIHRleHQKKyAgbW9kZSB3aWxsIHNraXAgb3ZlciBlbGVtZW50cyBhbmQgb25seSBvdXRwdXQgdGhlIHRleHQgY2h1bmtzLiAgSWYKKyAgeW91IHNldCB0aGUgOmF0dHI6YHRhZ2AgYXR0cmlidXRlIG9mIGFuIGVsZW1lbnQgdG8gYGBOb25lYGAgYnV0CisgIGxlYXZlIGl0cyBjaGlsZHJlbiBpbiBwbGFjZSwgdGhlIGVsZW1lbnQgd2lsbCBiZSBvbWl0dGVkIHdoZW4gdGhlCisgIHRyZWUgaXMgd3JpdHRlbiBvdXQsIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRvIG1vcmUgZXh0ZW5zaXZlIHJlYXJyYW5nZW1lbnQKKyAgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQuCisKKyAgTmFtZXNwYWNlIGhhbmRsaW5nIGhhcyBhbHNvIGJlZW4gaW1wcm92ZWQuICBBbGwgYGB4bWxuczo8d2hhdGV2ZXI+YGAKKyAgZGVjbGFyYXRpb25zIGFyZSBub3cgb3V0cHV0IG9uIHRoZSByb290IGVsZW1lbnQsIG5vdCBzY2F0dGVyZWQgdGhyb3VnaG91dAorICB0aGUgcmVzdWx0aW5nIFhNTC4gIFlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBmb3IgYSB0cmVlCisgIGJ5IHNldHRpbmcgdGhlIDphdHRyOmBkZWZhdWx0X25hbWVzcGFjZWAgYXR0cmlidXRlIGFuZCBjYW4KKyAgcmVnaXN0ZXIgbmV3IHByZWZpeGVzIHdpdGggOm1ldGg6YHJlZ2lzdGVyX25hbWVzcGFjZWAuICBJbiBYTUwgbW9kZSwKKyAgeW91IGNhbiB1c2UgdGhlIHRydWUvZmFsc2UgKnhtbF9kZWNsYXJhdGlvbiogcGFyYW1ldGVyIHRvIHN1cHByZXNzIHRoZQorICBYTUwgZGVjbGFyYXRpb24uCisKKyogTmV3IDpjbGFzczpgRWxlbWVudGAgbWV0aG9kOiA6bWV0aDpgZXh0ZW5kYCBhcHBlbmRzIHRoZSBpdGVtcyBmcm9tIGEKKyAgc2VxdWVuY2UgdG8gdGhlIGVsZW1lbnQncyBjaGlsZHJlbi4gIEVsZW1lbnRzIHRoZW1zZWx2ZXMgYmVoYXZlIGxpa2UKKyAgc2VxdWVuY2VzLCBzbyBpdCdzIGVhc3kgdG8gbW92ZSBjaGlsZHJlbiBmcm9tIG9uZSBlbGVtZW50IHRvCisgIGFub3RoZXI6OgorCisgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIEVUCisKKyAgICB0ID0gRVQuWE1MKCIiIjxsaXN0PgorICAgICAgPGl0ZW0+MTwvaXRlbT4gPGl0ZW0+MjwvaXRlbT4gIDxpdGVtPjM8L2l0ZW0+CisgICAgPC9saXN0PiIiIikKKyAgICBuZXcgPSBFVC5YTUwoJzxyb290Lz4nKQorICAgIG5ldy5leHRlbmQodCkKKworICAgICMgT3V0cHV0cyA8cm9vdD48aXRlbT4xPC9pdGVtPi4uLjwvcm9vdD4KKyAgICBwcmludCBFVC50b3N0cmluZyhuZXcpCisKKyogTmV3IDpjbGFzczpgRWxlbWVudGAgbWV0aG9kOiA6bWV0aDpgaXRlcmAgeWllbGRzIHRoZSBjaGlsZHJlbiBvZiB0aGUKKyAgZWxlbWVudCBhcyBhIGdlbmVyYXRvci4gIEl0J3MgYWxzbyBwb3NzaWJsZSB0byB3cml0ZSBgYGZvciBjaGlsZCBpbgorICBlbGVtOmBgIHRvIGxvb3Agb3ZlciBhbiBlbGVtZW50J3MgY2hpbGRyZW4uICBUaGUgZXhpc3RpbmcgbWV0aG9kCisgIDptZXRoOmBnZXRpdGVyYXRvcmAgaXMgbm93IGRlcHJlY2F0ZWQsIGFzIGlzIDptZXRoOmBnZXRjaGlsZHJlbmAKKyAgd2hpY2ggY29uc3RydWN0cyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgY2hpbGRyZW4uCisKKyogTmV3IDpjbGFzczpgRWxlbWVudGAgbWV0aG9kOiA6bWV0aDpgaXRlcnRleHRgIHlpZWxkcyBhbGwgY2h1bmtzIG9mCisgIHRleHQgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2YgdGhlIGVsZW1lbnQuICBGb3IgZXhhbXBsZTo6CisKKyAgICB0ID0gRVQuWE1MKCIiIjxsaXN0PgorICAgICAgPGl0ZW0+MTwvaXRlbT4gPGl0ZW0+MjwvaXRlbT4gIDxpdGVtPjM8L2l0ZW0+CisgICAgPC9saXN0PiIiIikKKworICAgICMgT3V0cHV0cyBbJ1xuICAnLCAnMScsICcgJywgJzInLCAnICAnLCAnMycsICdcbiddCisgICAgcHJpbnQgbGlzdCh0Lml0ZXJ0ZXh0KCkpCisKKyogRGVwcmVjYXRlZDogdXNpbmcgYW4gZWxlbWVudCBhcyBhIEJvb2xlYW4gKGkuZS4sIGBgaWYgZWxlbTpgYCkgd291bGQKKyAgcmV0dXJuIHRydWUgaWYgdGhlIGVsZW1lbnQgaGFkIGFueSBjaGlsZHJlbiwgb3IgZmFsc2UgaWYgdGhlcmUgd2VyZQorICBubyBjaGlsZHJlbi4gIFRoaXMgYmVoYXZpb3VyIGlzIGNvbmZ1c2luZyAtLSBgYE5vbmVgYCBpcyBmYWxzZSwgYnV0CisgIHNvIGlzIGEgY2hpbGRsZXNzIGVsZW1lbnQ/IC0tIHNvIGl0IHdpbGwgbm93IHRyaWdnZXIgYQorICA6ZXhjOmBGdXR1cmVXYXJuaW5nYC4gIEluIHlvdXIgY29kZSwgeW91IHNob3VsZCBiZSBleHBsaWNpdDogd3JpdGUKKyAgYGBsZW4oZWxlbSkgIT0gMGBgIGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4sCisgIG9yIGBgZWxlbSBpcyBub3QgTm9uZWBgLgorCitGcmVkcmlrIEx1bmRoIGRldmVsb3BzIEVsZW1lbnRUcmVlIGFuZCBwcm9kdWNlZCB0aGUgMS4zIHZlcnNpb247Cit5b3UgY2FuIHJlYWQgaGlzIGFydGljbGUgZGVzY3JpYmluZyAxLjMgYXQKK2h0dHA6Ly9lZmZib3Qub3JnL3pvbmUvZWxlbWVudHRyZWUtMTMtaW50cm8uaHRtLgorRmxvcmVudCBYaWNsdW5hIHVwZGF0ZWQgdGhlIHZlcnNpb24gaW5jbHVkZWQgd2l0aAorUHl0aG9uLCBhZnRlciBkaXNjdXNzaW9ucyBvbiBweXRob24tZGV2IGFuZCBpbiA6aXNzdWU6YDY0NzJgLikKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0J1aWxkIGFuZCBDIEFQSSBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitDaGFuZ2VzIHRvIFB5dGhvbidzIGJ1aWxkIHByb2Nlc3MgYW5kIHRvIHRoZSBDIEFQSSBpbmNsdWRlOgorCisqIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgR05VIERlYnVnZ2VyLCBHREIgNywgY2FuIGJlIGBzY3JpcHRlZAorICB1c2luZyBQeXRob24KKyAgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvY3VycmVudC9vbmxpbmVkb2NzL2dkYi9QeXRob24uaHRtbD5gX18uCisgIFdoZW4geW91IGJlZ2luIGRlYnVnZ2luZyBhbiBleGVjdXRhYmxlIHByb2dyYW0gUCwgR0RCIHdpbGwgbG9vayBmb3IKKyAgYSBmaWxlIG5hbWVkIGBgUC1nZGIucHlgYCBhbmQgYXV0b21hdGljYWxseSByZWFkIGl0LiAgRGF2ZSBNYWxjb2xtCisgIGNvbnRyaWJ1dGVkIGEgOmZpbGU6YHB5dGhvbi1nZGIucHlgIHRoYXQgYWRkcyBhIG51bWJlciBvZgorICBjb21tYW5kcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgUHl0aG9uIGl0c2VsZi4gIEZvciBleGFtcGxlLAorICBgYHB5LXVwYGAgYW5kIGBgcHktZG93bmBgIGdvIHVwIG9yIGRvd24gb25lIFB5dGhvbiBzdGFjayBmcmFtZSwKKyAgd2hpY2ggdXN1YWxseSBjb3JyZXNwb25kcyB0byBzZXZlcmFsIEMgc3RhY2sgZnJhbWVzLiAgYGBweS1wcmludGBgCisgIHByaW50cyB0aGUgdmFsdWUgb2YgYSBQeXRob24gdmFyaWFibGUsIGFuZCBgYHB5LWJ0YGAgcHJpbnRzIHRoZQorICBQeXRob24gc3RhY2sgdHJhY2UuICAoQWRkZWQgYXMgYSByZXN1bHQgb2YgOmlzc3VlOmA4MDMyYC4pCisKKyogSWYgeW91IHVzZSB0aGUgOmZpbGU6YC5nZGJpbml0YCBmaWxlIHByb3ZpZGVkIHdpdGggUHl0aG9uLAorICB0aGUgInB5byIgbWFjcm8gaW4gdGhlIDIuNyB2ZXJzaW9uIG5vdyB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGUgdGhyZWFkIGJlaW5nCisgIGRlYnVnZ2VkIGRvZXNuJ3QgaG9sZCB0aGUgR0lMOyB0aGUgbWFjcm8gbm93IGFjcXVpcmVzIGl0IGJlZm9yZSBwcmludGluZy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyOyA6aXNzdWU6YDM2MzJgLikKKworKiA6Y2Z1bmM6YFB5X0FkZFBlbmRpbmdDYWxsYCBpcyBub3cgdGhyZWFkLXNhZmUsIGxldHRpbmcgYW55CisgIHdvcmtlciB0aHJlYWQgc3VibWl0IG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gUHl0aG9uIHRocmVhZC4gIFRoaXMKKyAgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYXN5bmNocm9ub3VzIElPIG9wZXJhdGlvbnMuCisgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgNDI5M2AuKQorCisqIE5ldyBmdW5jdGlvbjogOmNmdW5jOmBQeUNvZGVfTmV3RW1wdHlgIGNyZWF0ZXMgYW4gZW1wdHkgY29kZSBvYmplY3Q7CisgIG9ubHkgdGhlIGZpbGVuYW1lLCBmdW5jdGlvbiBuYW1lLCBhbmQgZmlyc3QgbGluZSBudW1iZXIgYXJlIHJlcXVpcmVkLgorICBUaGlzIGlzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBhcmUgYXR0ZW1wdGluZyB0bworICBjb25zdHJ1Y3QgYSBtb3JlIHVzZWZ1bCB0cmFjZWJhY2sgc3RhY2suICBQcmV2aW91c2x5IHN1Y2gKKyAgZXh0ZW5zaW9ucyBuZWVkZWQgdG8gY2FsbCA6Y2Z1bmM6YFB5Q29kZV9OZXdgLCB3aGljaCBoYWQgbWFueQorICBtb3JlIGFyZ3VtZW50cy4gIChBZGRlZCBieSBKZWZmcmV5IFlhc3NraW4uKQorCisqIE5ldyBmdW5jdGlvbjogOmNmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jYCBjcmVhdGVzIGEgbmV3CisgIGV4Y2VwdGlvbiBjbGFzcywganVzdCBhcyB0aGUgZXhpc3RpbmcgOmNmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25gIGRvZXMsCisgIGJ1dCB0YWtlcyBhbiBleHRyYSBgYGNoYXIgKmBgIGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGRvY3N0cmluZyBmb3IgdGhlCisgIG5ldyBleGNlcHRpb24gY2xhc3MuICAoQWRkZWQgYnkgJ2xla21hJyBvbiB0aGUgUHl0aG9uIGJ1ZyB0cmFja2VyOworICA6aXNzdWU6YDcwMzNgLikKKworKiBOZXcgZnVuY3Rpb246IDpjZnVuYzpgUHlGcmFtZV9HZXRMaW5lTnVtYmVyYCB0YWtlcyBhIGZyYW1lIG9iamVjdAorICBhbmQgcmV0dXJucyB0aGUgbGluZSBudW1iZXIgdGhhdCB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy4KKyAgUHJldmlvdXNseSBjb2RlIHdvdWxkIG5lZWQgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgYnl0ZWNvZGUKKyAgaW5zdHJ1Y3Rpb24gY3VycmVudGx5IGV4ZWN1dGluZywgYW5kIHRoZW4gbG9vayB1cCB0aGUgbGluZSBudW1iZXIKKyAgY29ycmVzcG9uZGluZyB0byB0aGF0IGFkZHJlc3MuICAoQWRkZWQgYnkgSmVmZnJleSBZYXNza2luLikKKworKiBOZXcgZnVuY3Rpb25zOiA6Y2Z1bmM6YFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvd2AgYW5kCisgIDpjZnVuYzpgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvd2AgIGFwcHJveGltYXRlcyBhIFB5dGhvbiBsb25nCisgIGludGVnZXIgYXMgYSBDIDpjdHlwZTpgbG9uZ2Agb3IgOmN0eXBlOmBsb25nIGxvbmdgLgorICBJZiB0aGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBmaXQgaW50bworICB0aGUgb3V0cHV0IHR5cGUsIGFuICpvdmVyZmxvdyogZmxhZyBpcyBzZXQgYW5kIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgIChDb250cmlidXRlZCBieSBDYXNlIFZhbiBIb3JzZW47IDppc3N1ZTpgNzUyOGAgYW5kIDppc3N1ZTpgNzc2N2AuKQorCisqIE5ldyBmdW5jdGlvbjogc3RlbW1pbmcgZnJvbSB0aGUgcmV3cml0ZSBvZiBzdHJpbmctdG8tZmxvYXQgY29udmVyc2lvbiwKKyAgYSBuZXcgOmNmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGZ1bmN0aW9uIHdhcyBhZGRlZC4gIFRoZSBvbGQKKyAgOmNmdW5jOmBQeU9TX2FzY2lpX3N0cnRvZGAgYW5kIDpjZnVuYzpgUHlPU19hc2NpaV9hdG9mYCBmdW5jdGlvbnMKKyAgYXJlIG5vdyBkZXByZWNhdGVkLgorCisqIE5ldyBmdW5jdGlvbjogOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHNldHMgdGhlIHZhbHVlIG9mCisgIGBgc3lzLmFyZ3ZgYCBhbmQgY2FuIG9wdGlvbmFsbHkgdXBkYXRlIGBgc3lzLnBhdGhgYCB0byBpbmNsdWRlIHRoZQorICBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0IG5hbWVkIGJ5IGBgc3lzLmFyZ3ZbMF1gYCBkZXBlbmRpbmcKKyAgb24gdGhlIHZhbHVlIG9mIGFuICp1cGRhdGVwYXRoKiBwYXJhbWV0ZXIuCisKKyAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gY2xvc2UgYSBzZWN1cml0eSBob2xlIGZvciBhcHBsaWNhdGlvbnMKKyAgdGhhdCBlbWJlZCBQeXRob24uICBUaGUgb2xkIGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgLCB3b3VsZAorICBhbHdheXMgdXBkYXRlIGBgc3lzLnBhdGhgYCwgYW5kIHNvbWV0aW1lcyBpdCB3b3VsZCBhZGQgdGhlIGN1cnJlbnQKKyAgZGlyZWN0b3J5LiAgVGhpcyBtZWFudCB0aGF0LCBpZiB5b3UgcmFuIGFuIGFwcGxpY2F0aW9uIGVtYmVkZGluZworICBQeXRob24gaW4gYSBkaXJlY3RvcnkgY29udHJvbGxlZCBieSBzb21lb25lIGVsc2UsIGF0dGFja2VycyBjb3VsZAorICBwdXQgYSBUcm9qYW4taG9yc2UgbW9kdWxlIGluIHRoZSBkaXJlY3RvcnkgKHNheSwgYSBmaWxlIG5hbWVkCisgIDpmaWxlOmBvcy5weWApIHRoYXQgeW91ciBhcHBsaWNhdGlvbiB3b3VsZCB0aGVuIGltcG9ydCBhbmQgcnVuLgorCisgIElmIHlvdSBtYWludGFpbiBhIEMvQysrIGFwcGxpY2F0aW9uIHRoYXQgZW1iZWRzIFB5dGhvbiwgY2hlY2sKKyAgd2hldGhlciB5b3UncmUgY2FsbGluZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZgIGFuZCBjYXJlZnVsbHkgY29uc2lkZXIKKyAgd2hldGhlciB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIHVzaW5nIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YAorICB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gZmFsc2UuCisKKyAgU2VjdXJpdHkgaXNzdWUgcmVwb3J0ZWQgYXMgYENWRS0yMDA4LTU5ODMKKyAgPGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAwOC01OTgzPmBfOworICBkaXNjdXNzZWQgaW4gOmlzc3VlOmA1NzUzYCwgYW5kIGZpeGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisqIE5ldyBtYWNyb3M6IHRoZSBQeXRob24gaGVhZGVyIGZpbGVzIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgIDpjbWFjcm86YFB5X0lTQUxOVU1gLAorICA6Y21hY3JvOmBQeV9JU0FMUEhBYCwKKyAgOmNtYWNybzpgUHlfSVNESUdJVGAsCisgIDpjbWFjcm86YFB5X0lTTE9XRVJgLAorICA6Y21hY3JvOmBQeV9JU1NQQUNFYCwKKyAgOmNtYWNybzpgUHlfSVNVUFBFUmAsCisgIDpjbWFjcm86YFB5X0lTWERJR0lUYCwKKyAgOmNtYWNybzpgUHlfVE9MT1dFUmAsIGFuZCA6Y21hY3JvOmBQeV9UT1VQUEVSYC4KKyAgQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYW5hbG9nb3VzIHRvIHRoZSBDCisgIHN0YW5kYXJkIG1hY3JvcyBmb3IgY2xhc3NpZnlpbmcgY2hhcmFjdGVycywgYnV0IGlnbm9yZSB0aGUgY3VycmVudAorICBsb2NhbGUgc2V0dGluZywgYmVjYXVzZSBpbgorICBzZXZlcmFsIHBsYWNlcyBQeXRob24gbmVlZHMgdG8gYW5hbHl6ZSBjaGFyYWN0ZXJzIGluIGEKKyAgbG9jYWxlLWluZGVwZW5kZW50IHdheS4gIChBZGRlZCBieSBFcmljIFNtaXRoOworICA6aXNzdWU6YDU3OTNgLikKKworICAuLiBYWFggdGhlc2UgbWFjcm9zIGRvbid0IHNlZW0gdG8gYmUgZGVzY3JpYmVkIGluIHRoZSBjLWFwaSBkb2NzLgorCisqIFJlbW92ZWQgZnVuY3Rpb246IDpjbWFjcm86YFB5RXZhbF9DYWxsT2JqZWN0YCBpcyBub3cgb25seSBhdmFpbGFibGUKKyAgYXMgYSBtYWNyby4gIEEgZnVuY3Rpb24gdmVyc2lvbiB3YXMgYmVpbmcga2VwdCBhcm91bmQgdG8gcHJlc2VydmUKKyAgQUJJIGxpbmtpbmcgY29tcGF0aWJpbGl0eSwgYnV0IHRoYXQgd2FzIGluIDE5OTc7IGl0IGNhbiBjZXJ0YWlubHkgYmUKKyAgZGVsZXRlZCBieSBub3cuICAoUmVtb3ZlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4Mjc2YC4pCisKKyogTmV3IGZvcm1hdCBjb2RlczogdGhlIDpjZnVuYzpgUHlGb3JtYXRfRnJvbVN0cmluZ2AsCisgIDpjZnVuYzpgUHlGb3JtYXRfRnJvbVN0cmluZ1ZgLCBhbmQgOmNmdW5jOmBQeUVycl9Gb3JtYXRgIGZ1bmN0aW9ucyBub3cKKyAgYWNjZXB0IGBgJWxsZGBgIGFuZCBgYCVsbHVgYCBmb3JtYXQgY29kZXMgZm9yIGRpc3BsYXlpbmcKKyAgQydzIDpjdHlwZTpgbG9uZyBsb25nYCB0eXBlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDcyMjhgLikKKworKiBUaGUgY29tcGxpY2F0ZWQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aHJlYWRzIGFuZCBwcm9jZXNzIGZvcmtpbmcgaGFzCisgIGJlZW4gY2hhbmdlZC4gIFByZXZpb3VzbHksIHRoZSBjaGlsZCBwcm9jZXNzIGNyZWF0ZWQgYnkKKyAgOmZ1bmM6YG9zLmZvcmtgIG1pZ2h0IGZhaWwgYmVjYXVzZSB0aGUgY2hpbGQgaXMgY3JlYXRlZCB3aXRoIG9ubHkgYQorICBzaW5nbGUgdGhyZWFkIHJ1bm5pbmcsIHRoZSB0aHJlYWQgcGVyZm9ybWluZyB0aGUgOmZ1bmM6YG9zLmZvcmtgLgorICBJZiBvdGhlciB0aHJlYWRzIHdlcmUgaG9sZGluZyBhIGxvY2ssIHN1Y2ggYXMgUHl0aG9uJ3MgaW1wb3J0IGxvY2ssCisgIHdoZW4gdGhlIGZvcmsgd2FzIHBlcmZvcm1lZCwgdGhlIGxvY2sgd291bGQgc3RpbGwgYmUgbWFya2VkIGFzCisgICJoZWxkIiBpbiB0aGUgbmV3IHByb2Nlc3MuICBCdXQgaW4gdGhlIGNoaWxkIHByb2Nlc3Mgbm90aGluZyB3b3VsZAorICBldmVyIHJlbGVhc2UgdGhlIGxvY2ssIHNpbmNlIHRoZSBvdGhlciB0aHJlYWRzIHdlcmVuJ3QgcmVwbGljYXRlZCwKKyAgYW5kIHRoZSBjaGlsZCBwcm9jZXNzIHdvdWxkIG5vIGxvbmdlciBiZSBhYmxlIHRvIHBlcmZvcm0gaW1wb3J0cy4KKworICBQeXRob24gMi43IGFjcXVpcmVzIHRoZSBpbXBvcnQgbG9jayBiZWZvcmUgcGVyZm9ybWluZyBhbgorICA6ZnVuYzpgb3MuZm9ya2AsIGFuZCB3aWxsIGFsc28gY2xlYW4gdXAgYW55IGxvY2tzIGNyZWF0ZWQgdXNpbmcgdGhlCisgIDptb2Q6YHRocmVhZGluZ2AgbW9kdWxlLiAgQyBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGhhdmUgaW50ZXJuYWwKKyAgbG9ja3MsIG9yIHRoYXQgY2FsbCA6Y2Z1bmM6YGZvcmsoKWAgdGhlbXNlbHZlcywgd2lsbCBub3QgYmVuZWZpdAorICBmcm9tIHRoaXMgY2xlYW4tdXAuCisKKyAgKEZpeGVkIGJ5IFRob21hcyBXb3V0ZXJzOyA6aXNzdWU6YDE1OTA4NjRgLikKKworKiBUaGUgOmNmdW5jOmBQeV9GaW5hbGl6ZWAgZnVuY3Rpb24gbm93IGNhbGxzIHRoZSBpbnRlcm5hbAorICA6ZnVuYzpgdGhyZWFkaW5nLl9zaHV0ZG93bmAgZnVuY3Rpb247IHRoaXMgcHJldmVudHMgc29tZSBleGNlcHRpb25zIGZyb20KKyAgYmVpbmcgcmFpc2VkIHdoZW4gYW4gaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KKyAgKFBhdGNoIGJ5IEFkYW0gT2xzZW47IDppc3N1ZTpgMTcyMjM0NGAuKQorCisqIFdoZW4gdXNpbmcgdGhlIDpjdHlwZTpgUHlNZW1iZXJEZWZgIHN0cnVjdHVyZSB0byBkZWZpbmUgYXR0cmlidXRlcworICBvZiBhIHR5cGUsIFB5dGhvbiB3aWxsIG5vIGxvbmdlciBsZXQgeW91IHRyeSB0byBkZWxldGUgb3Igc2V0IGEKKyAgOmNvbnN0OmBUX1NUUklOR19JTlBMQUNFYCBhdHRyaWJ1dGUuCisKKyAgLi4gcmV2IDc5NjQ0CisKKyogR2xvYmFsIHN5bWJvbHMgZGVmaW5lZCBieSB0aGUgOm1vZDpgY3R5cGVzYCBtb2R1bGUgYXJlIG5vdyBwcmVmaXhlZAorICB3aXRoIGBgUHlgYCwgb3Igd2l0aCBgYF9jdHlwZXNgYC4gIChJbXBsZW1lbnRlZCBieSBUaG9tYXMKKyAgSGVsbGVyOyA6aXNzdWU6YDMxMDJgLikKKworKiBOZXcgY29uZmlndXJlIG9wdGlvbjogdGhlIDpvcHRpb246YC0td2l0aC1zeXN0ZW0tZXhwYXRgIHN3aXRjaCBhbGxvd3MKKyAgYnVpbGRpbmcgdGhlIDptb2Q6YHB5ZXhwYXRgIG1vZHVsZSB0byB1c2UgdGhlIHN5c3RlbSBFeHBhdCBsaWJyYXJ5LgorICAoQ29udHJpYnV0ZWQgYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXM7IDppc3N1ZTpgNzYwOWAuKQorCisqIE5ldyBjb25maWd1cmUgb3B0aW9uOiB0aGUKKyAgOm9wdGlvbjpgLS13aXRoLXZhbGdyaW5kYCBvcHRpb24gd2lsbCBub3cgZGlzYWJsZSB0aGUgcHltYWxsb2MKKyAgYWxsb2NhdG9yLCB3aGljaCBpcyBkaWZmaWN1bHQgZm9yIHRoZSBWYWxncmluZCBtZW1vcnktZXJyb3IgZGV0ZWN0b3IKKyAgdG8gYW5hbHl6ZSBjb3JyZWN0bHkuCisgIFZhbGdyaW5kIHdpbGwgdGhlcmVmb3JlIGJlIGJldHRlciBhdCBkZXRlY3RpbmcgbWVtb3J5IGxlYWtzIGFuZAorICBvdmVycnVucy4gKENvbnRyaWJ1dGVkIGJ5IEphbWVzIEhlbnN0cmlkZ2U7IDppc3N1ZTpgMjQyMmAuKQorCisqIE5ldyBjb25maWd1cmUgb3B0aW9uOiB5b3UgY2FuIG5vdyBzdXBwbHkgYW4gZW1wdHkgc3RyaW5nIHRvCisgIDpvcHRpb246YC0td2l0aC1kYm1saWJvcmRlcj1gIGluIG9yZGVyIHRvIGRpc2FibGUgYWxsIG9mIHRoZSB2YXJpb3VzCisgIERCTSBtb2R1bGVzLiAgKEFkZGVkIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzOworICA6aXNzdWU6YDY0OTFgLikKKworKiBUaGUgOnByb2dyYW06YGNvbmZpZ3VyZWAgc2NyaXB0IG5vdyBjaGVja3MgZm9yIGZsb2F0aW5nLXBvaW50IHJvdW5kaW5nIGJ1Z3MKKyAgb24gY2VydGFpbiAzMi1iaXQgSW50ZWwgY2hpcHMgYW5kIGRlZmluZXMgYSA6Y21hY3JvOmBYODdfRE9VQkxFX1JPVU5ESU5HYAorICBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gIE5vIGNvZGUgY3VycmVudGx5IHVzZXMgdGhpcyBkZWZpbml0aW9uLAorICBidXQgaXQncyBhdmFpbGFibGUgaWYgYW55b25lIHdpc2hlcyB0byB1c2UgaXQuCisgIChBZGRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAyOTM3YC4pCisKKyAgOnByb2dyYW06YGNvbmZpZ3VyZWAgYWxzbyBub3cgc2V0cyBhIDplbnZ2YXI6YExEQ1hYU0hBUkVEYCBNYWtlZmlsZQorICB2YXJpYWJsZSBmb3Igc3VwcG9ydGluZyBDKysgbGlua2luZy4gIChDb250cmlidXRlZCBieSBBcmZyZXZlcgorICBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpczsgOmlzc3VlOmAxMjIyNTg1YC4pCisKKyogVGhlIGJ1aWxkIHByb2Nlc3Mgbm93IGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeSBmaWxlcyBmb3IgcGtnLWNvbmZpZworICBzdXBwb3J0LiAgKENvbnRyaWJ1dGVkIGJ5IENsaW50b24gUm95OyA6aXNzdWU6YDM1ODVgLikKKworKiBUaGUgYnVpbGQgcHJvY2VzcyBub3cgc3VwcG9ydHMgU3VidmVyc2lvbiAxLjcuICAoQ29udHJpYnV0ZWQgYnkKKyAgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXM7IDppc3N1ZTpgNjA5NGAuKQorCisKKy4uIF93aGF0c25ldzI3LWNhcHN1bGVzOgorCitDYXBzdWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gMy4xIGFkZHMgYSBuZXcgQyBkYXRhdHlwZSwgOmN0eXBlOmBQeUNhcHN1bGVgLCBmb3IgcHJvdmlkaW5nIGEKK0MgQVBJIHRvIGFuIGV4dGVuc2lvbiBtb2R1bGUuICBBIGNhcHN1bGUgaXMgZXNzZW50aWFsbHkgdGhlIGhvbGRlciBvZgorYSBDIGBgdm9pZCAqYGAgcG9pbnRlciwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGF0dHJpYnV0ZTsgZm9yCitleGFtcGxlLCB0aGUgOm1vZDpgc29ja2V0YCBtb2R1bGUncyBBUEkgaXMgZXhwb3NlZCBhcyBgYHNvY2tldC5DQVBJYGAsCithbmQgOm1vZDpgdW5pY29kZWRhdGFgIGV4cG9zZXMgYGB1Y25oYXNoX0NBUElgYC4gIE90aGVyIGV4dGVuc2lvbnMKK2NhbiBpbXBvcnQgdGhlIG1vZHVsZSwgYWNjZXNzIGl0cyBkaWN0aW9uYXJ5IHRvIGdldCB0aGUgY2Fwc3VsZQorb2JqZWN0LCBhbmQgdGhlbiBnZXQgdGhlIGBgdm9pZCAqYGAgcG9pbnRlciwgd2hpY2ggd2lsbCB1c3VhbGx5IHBvaW50Cit0byBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGUgbW9kdWxlJ3MgdmFyaW91cyBBUEkgZnVuY3Rpb25zLgorCitUaGVyZSBpcyBhbiBleGlzdGluZyBkYXRhIHR5cGUgYWxyZWFkeSB1c2VkIGZvciB0aGlzLAorOmN0eXBlOmBQeUNPYmplY3RgLCBidXQgaXQgZG9lc24ndCBwcm92aWRlIHR5cGUgc2FmZXR5LiAgRXZpbCBjb2RlCit3cml0dGVuIGluIHB1cmUgUHl0aG9uIGNvdWxkIGNhdXNlIGEgc2VnbWVudGF0aW9uIGZhdWx0IGJ5IHRha2luZyBhCis6Y3R5cGU6YFB5Q09iamVjdGAgZnJvbSBtb2R1bGUgQSBhbmQgc29tZWhvdyBzdWJzdGl0dXRpbmcgaXQgZm9yIHRoZQorOmN0eXBlOmBQeUNPYmplY3RgIGluIG1vZHVsZSBCLiAgIENhcHN1bGVzIGtub3cgdGhlaXIgb3duIG5hbWUsCithbmQgZ2V0dGluZyB0aGUgcG9pbnRlciByZXF1aXJlcyBwcm92aWRpbmcgdGhlIG5hbWU6OgorCisgICB2b2lkICp2dGFibGU7CisKKyAgIGlmICghUHlDYXBzdWxlX0lzVmFsaWQoY2Fwc3VsZSwgIm15bW9kdWxlLkNBUEkiKSB7CisgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYXJndW1lbnQgdHlwZSBpbnZhbGlkIik7CisgICAgICAgICAgIHJldHVybiBOVUxMOworICAgfQorCisgICB2dGFibGUgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCAibXltb2R1bGUuQ0FQSSIpOworCitZb3UgYXJlIGFzc3VyZWQgdGhhdCBgYHZ0YWJsZWBgIHBvaW50cyB0byB3aGF0ZXZlciB5b3UncmUgZXhwZWN0aW5nLgorSWYgYSBkaWZmZXJlbnQgY2Fwc3VsZSB3YXMgcGFzc2VkIGluLCA6Y2Z1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCB3b3VsZAorZGV0ZWN0IHRoZSBtaXNtYXRjaGVkIG5hbWUgYW5kIHJldHVybiBmYWxzZS4gIFJlZmVyIHRvCis6cmVmOmB1c2luZy1jYXBzdWxlc2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlc2Ugb2JqZWN0cy4KKworUHl0aG9uIDIuNyBub3cgdXNlcyBjYXBzdWxlcyBpbnRlcm5hbGx5IHRvIHByb3ZpZGUgdmFyaW91cworZXh0ZW5zaW9uLW1vZHVsZSBBUElzLCBidXQgdGhlIDpjZnVuYzpgUHlDT2JqZWN0X0FzVm9pZFB0cmAgd2FzCittb2RpZmllZCB0byBoYW5kbGUgY2Fwc3VsZXMsIHByZXNlcnZpbmcgY29tcGlsZS10aW1lIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIDpjdHlwZTpgQ09iamVjdGAgaW50ZXJmYWNlLiAgVXNlIG9mCis6Y2Z1bmM6YFB5Q09iamVjdF9Bc1ZvaWRQdHJgIHdpbGwgc2lnbmFsIGEKKzpleGM6YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgLCB3aGljaCBpcyBzaWxlbnQgYnkgZGVmYXVsdC4KKworSW1wbGVtZW50ZWQgaW4gUHl0aG9uIDMuMSBhbmQgYmFja3BvcnRlZCB0byAyLjcgYnkgTGFycnkgSGFzdGluZ3M7CitkaXNjdXNzZWQgaW4gOmlzc3VlOmA1NjMwYC4KKworCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BvcnQtU3BlY2lmaWMgQ2hhbmdlczogV2luZG93cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgOm1vZDpgbXN2Y3J0YCBtb2R1bGUgbm93IGNvbnRhaW5zIHNvbWUgY29uc3RhbnRzIGZyb20KKyAgdGhlIDpmaWxlOmBjcnRhc3NlbS5oYCBoZWFkZXIgZmlsZToKKyAgOmRhdGE6YENSVF9BU1NFTUJMWV9WRVJTSU9OYCwKKyAgOmRhdGE6YFZDX0FTU0VNQkxZX1BVQkxJQ0tFWVRPS0VOYCwKKyAgYW5kIDpkYXRhOmBMSUJSQVJJRVNfQVNTRU1CTFlfTkFNRV9QUkVGSVhgLgorICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgQ291cm5hcGVhdTsgOmlzc3VlOmA0MzY1YC4pCisKKyogVGhlIDptb2Q6YF93aW5yZWdgIG1vZHVsZSBmb3IgYWNjZXNzaW5nIHRoZSByZWdpc3RyeSBub3cgaW1wbGVtZW50cworICB0aGUgOmZ1bmM6YH5fd2lucmVnLkNyZWF0ZUtleUV4YCBhbmQgOmZ1bmM6YH5fd2lucmVnLkRlbGV0ZUtleUV4YAorICBmdW5jdGlvbnMsIGV4dGVuZGVkIHZlcnNpb25zIG9mIHByZXZpb3VzbHktc3VwcG9ydGVkIGZ1bmN0aW9ucyB0aGF0CisgIHRha2Ugc2V2ZXJhbCBleHRyYSBhcmd1bWVudHMuICBUaGUgOmZ1bmM6YH5fd2lucmVnLkRpc2FibGVSZWZsZWN0aW9uS2V5YCwKKyAgOmZ1bmM6YH5fd2lucmVnLkVuYWJsZVJlZmxlY3Rpb25LZXlgLCBhbmQgOmZ1bmM6YH5fd2lucmVnLlF1ZXJ5UmVmbGVjdGlvbktleWAKKyAgd2VyZSBhbHNvIHRlc3RlZCBhbmQgZG9jdW1lbnRlZC4KKyAgKEltcGxlbWVudGVkIGJ5IEJyaWFuIEN1cnRpbjogOmlzc3VlOmA3MzQ3YC4pCisKKyogVGhlIG5ldyA6Y2Z1bmM6YF9iZWdpbnRocmVhZGV4YCBBUEkgaXMgdXNlZCB0byBzdGFydCB0aHJlYWRzLCBhbmQKKyAgdGhlIG5hdGl2ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmdW5jdGlvbnMgYXJlIG5vdyB1c2VkLgorICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uOyA6aXNzdWU6YDM1ODJgLikKKworKiBUaGUgOmZ1bmM6YG9zLmtpbGxgIGZ1bmN0aW9uIG5vdyB3b3JrcyBvbiBXaW5kb3dzLiAgVGhlIHNpZ25hbCB2YWx1ZQorICBjYW4gYmUgdGhlIGNvbnN0YW50cyA6Y29uc3Q6YENUUkxfQ19FVkVOVGAsCisgIDpjb25zdDpgQ1RSTF9CUkVBS19FVkVOVGAsIG9yIGFueSBpbnRlZ2VyLiAgVGhlIGZpcnN0IHR3byBjb25zdGFudHMKKyAgd2lsbCBzZW5kIENvbnRyb2wtQyBhbmQgQ29udHJvbC1CcmVhayBrZXlzdHJva2UgZXZlbnRzIHRvCisgIHN1YnByb2Nlc3NlczsgYW55IG90aGVyIHZhbHVlIHdpbGwgdXNlIHRoZSA6Y2Z1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgCisgIEFQSS4gIChDb250cmlidXRlZCBieSBNaWtpIFRlYmVrYTsgOmlzc3VlOmAxMjIwMjEyYC4pCisKKyogVGhlIDpmdW5jOmBvcy5saXN0ZGlyYCBmdW5jdGlvbiBub3cgY29ycmVjdGx5IGZhaWxzCisgIGZvciBhbiBlbXB0eSBwYXRoLiAgKEZpeGVkIGJ5IEhpcm9rYXp1IFlhbWFtb3RvOyA6aXNzdWU6YDU5MTNgLikKKworKiBUaGUgOm1vZDpgbWltZWxpYmAgbW9kdWxlIHdpbGwgbm93IHJlYWQgdGhlIE1JTUUgZGF0YWJhc2UgZnJvbQorICB0aGUgV2luZG93cyByZWdpc3RyeSB3aGVuIGluaXRpYWxpemluZy4KKyAgKFBhdGNoIGJ5IEdhYnJpZWwgR2VuZWxsaW5hOyA6aXNzdWU6YDQ5NjlgLikKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQb3J0LVNwZWNpZmljIENoYW5nZXM6IE1hYyBPUyBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBwYXRoIGBgL0xpYnJhcnkvUHl0aG9uLzIuNy9zaXRlLXBhY2thZ2VzYGAgaXMgbm93IGFwcGVuZGVkIHRvCisgIGBgc3lzLnBhdGhgYCwgaW4gb3JkZXIgdG8gc2hhcmUgYWRkZWQgcGFja2FnZXMgYmV0d2VlbiB0aGUgc3lzdGVtCisgIGluc3RhbGxhdGlvbiBhbmQgYSB1c2VyLWluc3RhbGxlZCBjb3B5IG9mIHRoZSBzYW1lIHZlcnNpb24uCisgIChDaGFuZ2VkIGJ5IFJvbmFsZCBPdXNzb3JlbjsgOmlzc3VlOmA0ODY1YC4pCisKK1BvcnQtU3BlY2lmaWMgQ2hhbmdlczogRnJlZUJTRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBGcmVlQlNEIDcuMSdzIDpjb25zdDpgU09fU0VURklCYCBjb25zdGFudCwgdXNlZCB3aXRoCisgIDpmdW5jOmB+c29ja2V0LmdldHNvY2tvcHRgLzpmdW5jOmB+c29ja2V0LnNldHNvY2tvcHRgIHRvIHNlbGVjdCBhbgorICBhbHRlcm5hdGUgcm91dGluZyB0YWJsZSwgaXMgbm93IGF2YWlsYWJsZSBpbiB0aGUgOm1vZDpgc29ja2V0YAorICBtb2R1bGUuICAoQWRkZWQgYnkgS3lsZSBWYW5kZXJCZWVrOyA6aXNzdWU6YDgyMzVgLikKKworT3RoZXIgQ2hhbmdlcyBhbmQgRml4ZXMKKz09PT09PT09PT09PT09PT09PT09PT09CisKKyogVHdvIGJlbmNobWFyayBzY3JpcHRzLCA6ZmlsZTpgaW9iZW5jaGAgYW5kIDpmaWxlOmBjY2JlbmNoYCwgd2VyZQorICBhZGRlZCB0byB0aGUgOmZpbGU6YFRvb2xzYCBkaXJlY3RvcnkuICA6ZmlsZTpgaW9iZW5jaGAgbWVhc3VyZXMgdGhlCisgIHNwZWVkIG9mIHRoZSBidWlsdC1pbiBmaWxlIEkvTyBvYmplY3RzIHJldHVybmVkIGJ5IDpmdW5jOmBvcGVuYAorICB3aGlsZSBwZXJmb3JtaW5nIHZhcmlvdXMgb3BlcmF0aW9ucywgYW5kIDpmaWxlOmBjY2JlbmNoYCBpcyBhCisgIGNvbmN1cnJlbmN5IGJlbmNobWFyayB0aGF0IHRyaWVzIHRvIG1lYXN1cmUgY29tcHV0aW5nIHRocm91Z2hwdXQsCisgIHRocmVhZCBzd2l0Y2hpbmcgbGF0ZW5jeSwgYW5kIElPIHByb2Nlc3NpbmcgYmFuZHdpZHRoIHdoZW4KKyAgcGVyZm9ybWluZyBzZXZlcmFsIHRhc2tzIHVzaW5nIGEgdmFyeWluZyBudW1iZXIgb2YgdGhyZWFkcy4KKworKiBUaGUgOmZpbGU6YFRvb2xzL2kxOG4vbXNnZm10LnB5YCBzY3JpcHQgbm93IHVuZGVyc3RhbmRzIHBsdXJhbAorICBmb3JtcyBpbiA6ZmlsZTpgLnBvYCBmaWxlcy4gIChGaXhlZCBieSBNYXJ0aW4gdm9uIEzDtndpczsKKyAgOmlzc3VlOmA1NDY0YC4pCisKKyogV2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIDpmaWxlOmAucHljYCBvciA6ZmlsZTpgLnB5b2AgZmlsZQorICB3aXRoIGFuIGV4aXN0aW5nIDpmaWxlOmAucHlgIGNvdW50ZXJwYXJ0LCB0aGUgOmF0dHI6YGNvX2ZpbGVuYW1lYAorICBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcgY29kZSBvYmplY3RzIGFyZSBvdmVyd3JpdHRlbiB3aGVuIHRoZQorICBvcmlnaW5hbCBmaWxlbmFtZSBpcyBvYnNvbGV0ZS4gIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZmlsZSBoYXMgYmVlbgorICByZW5hbWVkLCBtb3ZlZCwgb3IgaXMgYWNjZXNzZWQgdGhyb3VnaCBkaWZmZXJlbnQgcGF0aHMuICAoUGF0Y2ggYnkKKyAgWmlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmU7IDppc3N1ZTpgMTE4MDE5M2AuKQorCisqIFRoZSA6ZmlsZTpgcmVncnRlc3QucHlgIHNjcmlwdCBub3cgdGFrZXMgYSA6b3B0aW9uOmAtLXJhbmRzZWVkPWAKKyAgc3dpdGNoIHRoYXQgdGFrZXMgYW4gaW50ZWdlciB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmFuZG9tIHNlZWQKKyAgZm9yIHRoZSA6b3B0aW9uOmAtcmAgb3B0aW9uIHRoYXQgZXhlY3V0ZXMgdGVzdHMgaW4gcmFuZG9tIG9yZGVyLgorICBUaGUgOm9wdGlvbjpgLXJgIG9wdGlvbiBhbHNvIHJlcG9ydHMgdGhlIHNlZWQgdGhhdCB3YXMgdXNlZAorICAoQWRkZWQgYnkgQ29sbGluIFdpbnRlci4pCisKKyogQW5vdGhlciA6ZmlsZTpgcmVncnRlc3QucHlgIHN3aXRjaCBpcyA6b3B0aW9uOmAtamAsIHdoaWNoCisgIHRha2VzIGFuIGludGVnZXIgc3BlY2lmeWluZyBob3cgbWFueSB0ZXN0cyBydW4gaW4gcGFyYWxsZWwuIFRoaXMKKyAgYWxsb3dzIHJlZHVjaW5nIHRoZSB0b3RhbCBydW50aW1lIG9uIG11bHRpLWNvcmUgbWFjaGluZXMuCisgIFRoaXMgb3B0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCBzZXZlcmFsIG90aGVyIG9wdGlvbnMsIGluY2x1ZGluZyB0aGUKKyAgOm9wdGlvbjpgLVJgIHN3aXRjaCB3aGljaCBpcyBrbm93biB0byBwcm9kdWNlIGxvbmcgcnVudGltZXMuCisgIChBZGRlZCBieSBBbnRvaW5lIFBpdHJvdSwgOmlzc3VlOmA2MTUyYC4pICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQKKyAgd2l0aCBhIG5ldyA6b3B0aW9uOmAtRmAgc3dpdGNoIHRoYXQgcnVucyBzZWxlY3RlZCB0ZXN0cyBpbiBhIGxvb3AKKyAgdW50aWwgdGhleSBmYWlsLiAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDczMTJgLikKKworKiBXaGVuIGV4ZWN1dGVkIGFzIGEgc2NyaXB0LCB0aGUgOmZpbGU6YHB5X2NvbXBpbGUucHlgIG1vZHVsZSBub3cKKyAgYWNjZXB0cyBgYCctJ2BgIGFzIGFuIGFyZ3VtZW50LCB3aGljaCB3aWxsIHJlYWQgc3RhbmRhcmQgaW5wdXQgZm9yCisgIHRoZSBsaXN0IG9mIGZpbGVuYW1lcyB0byBiZSBjb21waWxlZC4gIChDb250cmlidXRlZCBieSBQaW90cgorICBPxbxhcm93c2tpOyA6aXNzdWU6YDgyMzNgLikKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQb3J0aW5nIHRvIFB5dGhvbiAyLjcKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMKK3RoYXQgbWF5IHJlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGU6CisKKyogVGhlIDpmdW5jOmByYW5nZWAgZnVuY3Rpb24gcHJvY2Vzc2VzIGl0cyBhcmd1bWVudHMgbW9yZQorICBjb25zaXN0ZW50bHk7IGl0IHdpbGwgbm93IGNhbGwgOm1ldGg6YF9faW50X19gIG9uIG5vbi1mbG9hdCwKKyAgbm9uLWludGVnZXIgYXJndW1lbnRzIHRoYXQgYXJlIHN1cHBsaWVkIHRvIGl0LiAgKEZpeGVkIGJ5IEFsZXhhbmRlcgorICBCZWxvcG9sc2t5OyA6aXNzdWU6YDE1MzNgLikKKworKiBUaGUgc3RyaW5nIDptZXRoOmBmb3JtYXRgIG1ldGhvZCBjaGFuZ2VkIHRoZSBkZWZhdWx0IHByZWNpc2lvbiB1c2VkCisgIGZvciBmbG9hdGluZy1wb2ludCBhbmQgY29tcGxleCBudW1iZXJzIGZyb20gNiBkZWNpbWFsCisgIHBsYWNlcyB0byAxMiwgd2hpY2ggbWF0Y2hlcyB0aGUgcHJlY2lzaW9uIHVzZWQgYnkgOmZ1bmM6YHN0cmAuCisgIChDaGFuZ2VkIGJ5IEVyaWMgU21pdGg7IDppc3N1ZTpgNTkyMGAuKQorCisqIEJlY2F1c2Ugb2YgYW4gb3B0aW1pemF0aW9uIGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIHNwZWNpYWwKKyAgbWV0aG9kcyA6bWV0aDpgX19lbnRlcl9fYCBhbmQgOm1ldGg6YF9fZXhpdF9fYCBtdXN0IGJlbG9uZyB0byB0aGUgb2JqZWN0J3MKKyAgdHlwZSwgYW5kIGNhbm5vdCBiZSBkaXJlY3RseSBhdHRhY2hlZCB0byB0aGUgb2JqZWN0J3MgaW5zdGFuY2UuICBUaGlzCisgIGFmZmVjdHMgbmV3LXN0eWxlIGNsYXNzZXMgKGRlcml2ZWQgZnJvbSA6Y2xhc3M6YG9iamVjdGApIGFuZCBDIGV4dGVuc2lvbgorICB0eXBlcy4gICg6aXNzdWU6YDYxMDFgLikKKworKiBEdWUgdG8gYSBidWcgaW4gUHl0aG9uIDIuNiwgdGhlICpleGNfdmFsdWUqIHBhcmFtZXRlciB0bworICA6bWV0aDpgX19leGl0X19gIG1ldGhvZHMgd2FzIG9mdGVuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgIGV4Y2VwdGlvbiwgbm90IGFuIGluc3RhbmNlLiAgVGhpcyB3YXMgZml4ZWQgaW4gMi43LCBzbyAqZXhjX3ZhbHVlKgorICB3aWxsIGJlIGFuIGluc3RhbmNlIGFzIGV4cGVjdGVkLiAgKEZpeGVkIGJ5IEZsb3JlbnQgWGljbHVuYTsKKyAgOmlzc3VlOmA3ODUzYC4pCisKKyogV2hlbiBhIHJlc3RyaWN0ZWQgc2V0IG9mIGF0dHJpYnV0ZXMgd2VyZSBzZXQgdXNpbmcgYGBfX3Nsb3RzX19gYCwKKyAgZGVsZXRpbmcgYW4gdW5zZXQgYXR0cmlidXRlIHdvdWxkIG5vdCByYWlzZSA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKKyAgYXMgeW91IHdvdWxkIGV4cGVjdC4gIEZpeGVkIGJ5IEJlbmphbWluIFBldGVyc29uOyA6aXNzdWU6YDc2MDRgLikKKworSW4gdGhlIHN0YW5kYXJkIGxpYnJhcnk6CisKKyogT3BlcmF0aW9ucyB3aXRoIDpjbGFzczpgfmRhdGV0aW1lLmRhdGV0aW1lYCBpbnN0YW5jZXMgdGhhdCByZXN1bHRlZCBpbiBhIHllYXIKKyAgZmFsbGluZyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgZGlkbid0IGFsd2F5cyByYWlzZQorICA6ZXhjOmBPdmVyZmxvd0Vycm9yYC4gIFN1Y2ggZXJyb3JzIGFyZSBub3cgY2hlY2tlZCBtb3JlIGNhcmVmdWxseQorICBhbmQgd2lsbCBub3cgcmFpc2UgdGhlIGV4Y2VwdGlvbi4gKFJlcG9ydGVkIGJ5IE1hcmsgTGVhbmRlciwgcGF0Y2gKKyAgYnkgQW5hbmQgQi4gUGlsbGFpIGFuZCBBbGV4YW5kZXIgQmVsb3BvbHNreTsgOmlzc3VlOmA3MTUwYC4pCisKKyogV2hlbiB1c2luZyA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcyB3aXRoIGEgc3RyaW5nJ3MKKyAgOm1ldGg6YGZvcm1hdGAgbWV0aG9kLCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQgd2FzIHByZXZpb3VzbHkKKyAgbGVmdC1hbGlnbm1lbnQuICBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgdG8gcmlnaHQtYWxpZ25tZW50LCB3aGljaCBtaWdodAorICBjaGFuZ2UgdGhlIG91dHB1dCBvZiB5b3VyIHByb2dyYW1zLgorICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2ODU3YC4pCisKKyAgQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiB2YWx1ZSAob3IgYGBzTkFOYGApIG5vdyBzaWduYWwKKyAgOmNvbnN0OmB+ZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9uYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBhIHRydWUgb3IKKyAgZmFsc2UgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yLiAgUXVpZXQgTmFOIHZhbHVlcworICAob3IgYGBOYU5gYCkgYXJlIG5vdyBoYXNoYWJsZS4gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgOmlzc3VlOmA3Mjc5YC4pCisKKyogVGhlIEVsZW1lbnRUcmVlIGxpYnJhcnksIDptb2Q6YHhtbC5ldHJlZWAsIG5vIGxvbmdlciBlc2NhcGVzCisgIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHdoZW4gb3V0cHV0dGluZyBhbiBYTUwgcHJvY2Vzc2luZworICBpbnN0cnVjdGlvbiAod2hpY2ggbG9va3MgbGlrZSBgPD94bWwtc3R5bGVzaGVldCBocmVmPSIjc3R5bGUxIj8+YCkKKyAgb3IgY29tbWVudCAod2hpY2ggbG9va3MgbGlrZSBgPCEtLSBjb21tZW50IC0tPmApLgorICAoUGF0Y2ggYnkgTmVpbCBNdWxsZXI7IDppc3N1ZTpgMjc0NmAuKQorCisqIFRoZSA6bWV0aDpgflN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lYCBtZXRob2Qgb2YgOmNsYXNzOmB+U3RyaW5nSU8uU3RyaW5nSU9gIG9iamVjdHMgbm93IGRvZXMKKyAgbm90aGluZyB3aGVuIGEgbmVnYXRpdmUgbGVuZ3RoIGlzIHJlcXVlc3RlZCwgYXMgb3RoZXIgZmlsZS1saWtlCisgIG9iamVjdHMgZG8uICAoOmlzc3VlOmA3MzQ4YCkuCisKKyogVGhlIDptb2Q6YHN5c2xvZ2AgbW9kdWxlIHdpbGwgbm93IHVzZSB0aGUgdmFsdWUgb2YgYGBzeXMuYXJndlswXWBgIGFzIHRoZQorICBpZGVudGlmaWVyIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGRlZmF1bHQgdmFsdWUgb2YgYGAncHl0aG9uJ2BgLgorICAoQ2hhbmdlZCBieSBTZWFuIFJlaWZzY2huZWlkZXI7IDppc3N1ZTpgODQ1MWAuKQorCisqIFRoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUncyBkZWZhdWx0IGVycm9yIGhhbmRsaW5nIGhhcyBjaGFuZ2VkLCB0bworICBubyBsb25nZXIgc3VwcHJlc3MgZmF0YWwgZXJyb3JzLiAgVGhlIGRlZmF1bHQgZXJyb3IgbGV2ZWwgd2FzIHByZXZpb3VzbHkgMCwKKyAgd2hpY2ggbWVhbnQgdGhhdCBlcnJvcnMgd291bGQgb25seSByZXN1bHQgaW4gYSBtZXNzYWdlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlCisgIGRlYnVnIGxvZywgYnV0IGJlY2F1c2UgdGhlIGRlYnVnIGxvZyBpcyBub3QgYWN0aXZhdGVkIGJ5IGRlZmF1bHQsCisgIHRoZXNlIGVycm9ycyBnbyB1bm5vdGljZWQuICBUaGUgZGVmYXVsdCBlcnJvciBsZXZlbCBpcyBub3cgMSwKKyAgd2hpY2ggcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGVyZSdzIGFuIGVycm9yLgorICAoQ2hhbmdlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA3MzU3YC4pCisKKyogVGhlIDptb2Q6YHVybHBhcnNlYCBtb2R1bGUncyA6ZnVuYzpgfnVybHBhcnNlLnVybHNwbGl0YCBub3cgaGFuZGxlcworICB1bmtub3duIFVSTCBzY2hlbWVzIGluIGEgZmFzaGlvbiBjb21wbGlhbnQgd2l0aCA6cmZjOmAzOTg2YDogaWYgdGhlCisgIFVSTCBpcyBvZiB0aGUgZm9ybSBgYCI8c29tZXRoaW5nPjovLy4uLiJgYCwgdGhlIHRleHQgYmVmb3JlIHRoZQorICBgYDovL2BgIGlzIHRyZWF0ZWQgYXMgdGhlIHNjaGVtZSwgZXZlbiBpZiBpdCdzIGEgbWFkZS11cCBzY2hlbWUgdGhhdAorICB0aGUgbW9kdWxlIGRvZXNuJ3Qga25vdyBhYm91dC4gIFRoaXMgY2hhbmdlIG1heSBicmVhayBjb2RlIHRoYXQKKyAgd29ya2VkIGFyb3VuZCB0aGUgb2xkIGJlaGF2aW91ci4gIEZvciBleGFtcGxlLCBQeXRob24gMi42LjQgb3IgMi41CisgIHdpbGwgcmV0dXJuIHRoZSBmb2xsb3dpbmc6CisKKyAgICA+Pj4gaW1wb3J0IHVybHBhcnNlCisgICAgPj4+IHVybHBhcnNlLnVybHNwbGl0KCdpbnZlbnRlZDovL2hvc3QvZmlsZW5hbWU/cXVlcnknKQorICAgICgnaW52ZW50ZWQnLCAnJywgJy8vaG9zdC9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKKworICBQeXRob24gMi43IChhbmQgUHl0aG9uIDIuNi41KSB3aWxsIHJldHVybjoKKworICAgID4+PiBpbXBvcnQgdXJscGFyc2UKKyAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCisgICAgKCdpbnZlbnRlZCcsICdob3N0JywgJy9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKKworICAoUHl0aG9uIDIuNyBhY3R1YWxseSBwcm9kdWNlcyBzbGlnaHRseSBkaWZmZXJlbnQgb3V0cHV0LCBzaW5jZSBpdAorICByZXR1cm5zIGEgbmFtZWQgdHVwbGUgaW5zdGVhZCBvZiBhIHN0YW5kYXJkIHR1cGxlLikKKworRm9yIEMgZXh0ZW5zaW9uczoKKworKiBDIGV4dGVuc2lvbnMgdGhhdCB1c2UgaW50ZWdlciBmb3JtYXQgY29kZXMgd2l0aCB0aGUgYGBQeUFyZ19QYXJzZSpgYAorICBmYW1pbHkgb2YgZnVuY3Rpb25zIHdpbGwgbm93IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24KKyAgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCAoOmlzc3VlOmA1MDgwYCkuCisKKyogVXNlIHRoZSBuZXcgOmNmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIG9sZAorICA6Y2Z1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBhbmQgOmNmdW5jOmBQeU9TX2FzY2lpX2F0b2ZgIGZ1bmN0aW9ucywKKyAgd2hpY2ggYXJlIG5vdyBkZXByZWNhdGVkLgorCitGb3IgYXBwbGljYXRpb25zIHRoYXQgZW1iZWQgUHl0aG9uOgorCisqIFRoZSA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgZnVuY3Rpb24gd2FzIGFkZGVkLCBsZXR0aW5nCisgIGFwcGxpY2F0aW9ucyBjbG9zZSBhIHNlY3VyaXR5IGhvbGUgd2hlbiB0aGUgZXhpc3RpbmcKKyAgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBmdW5jdGlvbiB3YXMgdXNlZC4gIENoZWNrIHdoZXRoZXIgeW91J3JlCisgIGNhbGxpbmcgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoZXRoZXIgdGhlCisgIGFwcGxpY2F0aW9uIHNob3VsZCBiZSB1c2luZyA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aAorICAqdXBkYXRlcGF0aCogc2V0IHRvIGZhbHNlLgorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworLi4gX2Fja3MyNzoKKworQWNrbm93bGVkZ2VtZW50cworPT09PT09PT09PT09PT09PQorCitUaGUgYXV0aG9yIHdvdWxkIGxpa2UgdG8gdGhhbmsgdGhlIGZvbGxvd2luZyBwZW9wbGUgZm9yIG9mZmVyaW5nCitzdWdnZXN0aW9ucywgY29ycmVjdGlvbnMgYW5kIGFzc2lzdGFuY2Ugd2l0aCB2YXJpb3VzIGRyYWZ0cyBvZiB0aGlzCithcnRpY2xlOiBOaWNrIENvZ2hsYW4sIFBoaWxpcCBKZW52ZXksIFJ5YW4gTG92ZXR0LCBSLiBEYXZpZCBNdXJyYXksCitIdWdoIFNlY2tlci1XYWxrZXIuCisKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGY4MmI1OGMuLmVjNDU3NTYgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMi43LnJzdAogICAgMi42LnJzdAogICAgMi41LnJzdAogICAgMi40LnJzdApkaWZmIC0tZ2l0IGEvR3JhbW1hci9HcmFtbWFyIGIvR3JhbW1hci9HcmFtbWFyCmluZGV4IDg2NWQ0NGMuLjRjM2YzM2QgMTAwNjQ0Ci0tLSBhL0dyYW1tYXIvR3JhbW1hcgorKysgYi9HcmFtbWFyL0dyYW1tYXIKQEAgLTEwLDIyICsxMCwxMCBAQAogIyBOT1RFIFdFTEw6IFlvdSBzaG91bGQgYWxzbyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBsaXN0ZWQgaW4gUEVQIDMwNiwKICMgIkhvdyB0byBDaGFuZ2UgUHl0aG9uJ3MgR3JhbW1hciIKIAotIyBDb21tYW5kcyBmb3IgS2VlcyBCbG9tJ3MgcmFpbHJvYWQgcHJvZ3JhbQotI2RpYWdyYW06dG9rZW4gTkFNRQotI2RpYWdyYW06dG9rZW4gTlVNQkVSCi0jZGlhZ3JhbTp0b2tlbiBTVFJJTkcKLSNkaWFncmFtOnRva2VuIE5FV0xJTkUKLSNkaWFncmFtOnRva2VuIEVORE1BUktFUgotI2RpYWdyYW06dG9rZW4gSU5ERU5UCi0jZGlhZ3JhbTpvdXRwdXRcaW5wdXQgcHl0aG9uLmJsYQotI2RpYWdyYW06dG9rZW4gREVERU5UCi0jZGlhZ3JhbTpvdXRwdXRcdGV4dHdpZHRoIDIwLjA0Y21cb2Rkc2lkZW1hcmdpbiAgMC4wY21cZXZlbnNpZGVtYXJnaW4gMC4wY20KLSNkaWFncmFtOnJ1bGVzCi0KICMgU3RhcnQgc3ltYm9scyBmb3IgdGhlIGdyYW1tYXI6Ci0jCXNpbmdsZV9pbnB1dCBpcyBhIHNpbmdsZSBpbnRlcmFjdGl2ZSBzdGF0ZW1lbnQ7Ci0jCWZpbGVfaW5wdXQgaXMgYSBtb2R1bGUgb3Igc2VxdWVuY2Ugb2YgY29tbWFuZHMgcmVhZCBmcm9tIGFuIGlucHV0IGZpbGU7Ci0jCWV2YWxfaW5wdXQgaXMgdGhlIGlucHV0IGZvciB0aGUgZXZhbCgpIGFuZCBpbnB1dCgpIGZ1bmN0aW9ucy4KKyMgICAgICAgc2luZ2xlX2lucHV0IGlzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudDsKKyMgICAgICAgZmlsZV9pbnB1dCBpcyBhIG1vZHVsZSBvciBzZXF1ZW5jZSBvZiBjb21tYW5kcyByZWFkIGZyb20gYW4gaW5wdXQgZmlsZTsKKyMgICAgICAgZXZhbF9pbnB1dCBpcyB0aGUgaW5wdXQgZm9yIHRoZSBldmFsKCkgYW5kIGlucHV0KCkgZnVuY3Rpb25zLgogIyBOQjogY29tcG91bmRfc3RtdCBpbiBzaW5nbGVfaW5wdXQgaXMgZm9sbG93ZWQgYnkgZXh0cmEgTkVXTElORSEKIHNpbmdsZV9pbnB1dDogTkVXTElORSB8IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdCBORVdMSU5FCiBmaWxlX2lucHV0OiAoTkVXTElORSB8IHN0bXQpKiBFTkRNQVJLRVIKQEAgLTgwLDExICs2OCwxMSBAQAogZm9yX3N0bXQ6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdGxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQogdHJ5X3N0bXQ6ICgndHJ5JyAnOicgc3VpdGUKICAgICAgICAgICAgKChleGNlcHRfY2xhdXNlICc6JyBzdWl0ZSkrCi0JICAgIFsnZWxzZScgJzonIHN1aXRlXQotCSAgICBbJ2ZpbmFsbHknICc6JyBzdWl0ZV0gfAotCSAgICdmaW5hbGx5JyAnOicgc3VpdGUpKQotd2l0aF9zdG10OiAnd2l0aCcgdGVzdCBbIHdpdGhfdmFyIF0gJzonIHN1aXRlCi13aXRoX3ZhcjogJ2FzJyBleHByCisgICAgICAgICAgICBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgICAgIFsnZmluYWxseScgJzonIHN1aXRlXSB8CisgICAgICAgICAgICdmaW5hbGx5JyAnOicgc3VpdGUpKQord2l0aF9zdG10OiAnd2l0aCcgd2l0aF9pdGVtICgnLCcgd2l0aF9pdGVtKSogICc6JyBzdWl0ZQord2l0aF9pdGVtOiB0ZXN0IFsnYXMnIGV4cHJdCiAjIE5CIGNvbXBpbGUuYyBtYWtlcyBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgZXhjZXB0IGNsYXVzZSBpcyBsYXN0CiBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbdGVzdCBbKCdhcycgfCAnLCcpIHRlc3RdXQogc3VpdGU6IHNpbXBsZV9zdG10IHwgTkVXTElORSBJTkRFTlQgc3RtdCsgREVERU5UCkBAIC0xMTIsMTMgKzEwMCwxMyBAQAogdGVybTogZmFjdG9yICgoJyonfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKIGZhY3RvcjogKCcrJ3wnLSd8J34nKSBmYWN0b3IgfCBwb3dlcgogcG93ZXI6IGF0b20gdHJhaWxlciogWycqKicgZmFjdG9yXQotYXRvbTogKCcoJyBbeWllbGRfZXhwcnx0ZXN0bGlzdF9nZXhwXSAnKScgfAorYXRvbTogKCcoJyBbeWllbGRfZXhwcnx0ZXN0bGlzdF9jb21wXSAnKScgfAogICAgICAgICdbJyBbbGlzdG1ha2VyXSAnXScgfAotICAgICAgICd7JyBbZGljdG1ha2VyXSAnfScgfAorICAgICAgICd7JyBbZGljdG9yc2V0bWFrZXJdICd9JyB8CiAgICAgICAgJ2AnIHRlc3RsaXN0MSAnYCcgfAogICAgICAgIE5BTUUgfCBOVU1CRVIgfCBTVFJJTkcrKQogbGlzdG1ha2VyOiB0ZXN0ICggbGlzdF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCi10ZXN0bGlzdF9nZXhwOiB0ZXN0ICggZ2VuX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKK3Rlc3RsaXN0X2NvbXA6IHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKIGxhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdzbGlzdF0gJzonIHRlc3QKIHRyYWlsZXI6ICcoJyBbYXJnbGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdGxpc3QgJ10nIHwgJy4nIE5BTUUKIHN1YnNjcmlwdGxpc3Q6IHN1YnNjcmlwdCAoJywnIHN1YnNjcmlwdCkqIFsnLCddCkBAIC0xMjYsMjIgKzExNCwyNSBAQAogc2xpY2VvcDogJzonIFt0ZXN0XQogZXhwcmxpc3Q6IGV4cHIgKCcsJyBleHByKSogWycsJ10KIHRlc3RsaXN0OiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddCi1kaWN0bWFrZXI6IHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10KK2RpY3RvcnNldG1ha2VyOiAoICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICAgICAgICAgICAgICAgICAgKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKSApCiAKIGNsYXNzZGVmOiAnY2xhc3MnIE5BTUUgWycoJyBbdGVzdGxpc3RdICcpJ10gJzonIHN1aXRlCiAKIGFyZ2xpc3Q6IChhcmd1bWVudCAnLCcpKiAoYXJndW1lbnQgWycsJ10KICAgICAgICAgICAgICAgICAgICAgICAgICB8JyonIHRlc3QgKCcsJyBhcmd1bWVudCkqIFsnLCcgJyoqJyB0ZXN0XSAKICAgICAgICAgICAgICAgICAgICAgICAgICB8JyoqJyB0ZXN0KQotYXJndW1lbnQ6IHRlc3QgW2dlbl9mb3JdIHwgdGVzdCAnPScgdGVzdCAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0CisjIFRoZSByZWFzb24gdGhhdCBrZXl3b3JkcyBhcmUgdGVzdCBub2RlcyBpbnN0ZWFkIG9mIE5BTUUgaXMgdGhhdCB1c2luZyBOQU1FCisjIHJlc3VsdHMgaW4gYW4gYW1iaWd1aXR5LiBhc3QuYyBtYWtlcyBzdXJlIGl0J3MgYSBOQU1FLgorYXJndW1lbnQ6IHRlc3QgW2NvbXBfZm9yXSB8IHRlc3QgJz0nIHRlc3QKIAogbGlzdF9pdGVyOiBsaXN0X2ZvciB8IGxpc3RfaWYKIGxpc3RfZm9yOiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3RsaXN0X3NhZmUgW2xpc3RfaXRlcl0KIGxpc3RfaWY6ICdpZicgb2xkX3Rlc3QgW2xpc3RfaXRlcl0KIAotZ2VuX2l0ZXI6IGdlbl9mb3IgfCBnZW5faWYKLWdlbl9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgb3JfdGVzdCBbZ2VuX2l0ZXJdCi1nZW5faWY6ICdpZicgb2xkX3Rlc3QgW2dlbl9pdGVyXQorY29tcF9pdGVyOiBjb21wX2ZvciB8IGNvbXBfaWYKK2NvbXBfZm9yOiAnZm9yJyBleHBybGlzdCAnaW4nIG9yX3Rlc3QgW2NvbXBfaXRlcl0KK2NvbXBfaWY6ICdpZicgb2xkX3Rlc3QgW2NvbXBfaXRlcl0KIAogdGVzdGxpc3QxOiB0ZXN0ICgnLCcgdGVzdCkqCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLWFzdC5oIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKaW5kZXggMzIxMGZjNy4uM2YzNWJiYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24tYXN0LmgKKysrIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKQEAgLTE4NSwxMSArMTg1LDExIEBACiB9OwogCiBlbnVtIF9leHByX2tpbmQge0Jvb2xPcF9raW5kPTEsIEJpbk9wX2tpbmQ9MiwgVW5hcnlPcF9raW5kPTMsIExhbWJkYV9raW5kPTQsCi0gICAgICAgICAgICAgICAgICBJZkV4cF9raW5kPTUsIERpY3Rfa2luZD02LCBMaXN0Q29tcF9raW5kPTcsCi0gICAgICAgICAgICAgICAgICBHZW5lcmF0b3JFeHBfa2luZD04LCBZaWVsZF9raW5kPTksIENvbXBhcmVfa2luZD0xMCwKLSAgICAgICAgICAgICAgICAgIENhbGxfa2luZD0xMSwgUmVwcl9raW5kPTEyLCBOdW1fa2luZD0xMywgU3RyX2tpbmQ9MTQsCi0gICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVfa2luZD0xNSwgU3Vic2NyaXB0X2tpbmQ9MTYsIE5hbWVfa2luZD0xNywKLSAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0xOCwgVHVwbGVfa2luZD0xOX07CisgICAgICAgICAgICAgICAgICBJZkV4cF9raW5kPTUsIERpY3Rfa2luZD02LCBTZXRfa2luZD03LCBMaXN0Q29tcF9raW5kPTgsCisgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCisgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBDb21wYXJlX2tpbmQ9MTMsIENhbGxfa2luZD0xNCwgUmVwcl9raW5kPTE1LAorICAgICAgICAgICAgICAgICAgTnVtX2tpbmQ9MTYsIFN0cl9raW5kPTE3LCBBdHRyaWJ1dGVfa2luZD0xOCwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTE5LCBOYW1lX2tpbmQ9MjAsIExpc3Rfa2luZD0yMSwgVHVwbGVfa2luZD0yMn07CiBzdHJ1Y3QgX2V4cHIgewogICAgICAgICBlbnVtIF9leHByX2tpbmQga2luZDsKICAgICAgICAgdW5pb24gewpAQCAtMjI2LDYgKzIyNiwxMCBAQAogICAgICAgICAgICAgICAgIH0gRGljdDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmVsdHM7CisgICAgICAgICAgICAgICAgfSBTZXQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZWx0OwogICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmdlbmVyYXRvcnM7CiAgICAgICAgICAgICAgICAgfSBMaXN0Q29tcDsKQEAgLTIzMyw2ICsyMzcsMTcgQEAKICAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9yczsKKyAgICAgICAgICAgICAgICB9IFNldENvbXA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkga2V5OworICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzOworICAgICAgICAgICAgICAgIH0gRGljdENvbXA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZWx0OworICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmdlbmVyYXRvcnM7CiAgICAgICAgICAgICAgICAgfSBHZW5lcmF0b3JFeHA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3RydWN0IHsKQEAgLTQ0OSw5ICs0NjQsMTcgQEAKICNkZWZpbmUgRGljdChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9EaWN0KGEwLCBhMSwgYTIsIGEzLCBhNCkKIGV4cHJfdHkgX1B5X0RpY3QoYXNkbF9zZXEgKiBrZXlzLCBhc2RsX3NlcSAqIHZhbHVlcywgaW50IGxpbmVubywgaW50CiAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgU2V0KGEwLCBhMSwgYTIsIGEzKSBfUHlfU2V0KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfU2V0KGFzZGxfc2VxICogZWx0cywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgTGlzdENvbXAoYTAsIGExLCBhMiwgYTMsIGE0KSBfUHlfTGlzdENvbXAoYTAsIGExLCBhMiwgYTMsIGE0KQogZXhwcl90eSBfUHlfTGlzdENvbXAoZXhwcl90eSBlbHQsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50CiAgICAgICAgICAgICAgICAgICAgICBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIFNldENvbXAoYTAsIGExLCBhMiwgYTMsIGE0KSBfUHlfU2V0Q29tcChhMCwgYTEsIGEyLCBhMywgYTQpCitleHByX3R5IF9QeV9TZXRDb21wKGV4cHJfdHkgZWx0LCBhc2RsX3NlcSAqIGdlbmVyYXRvcnMsIGludCBsaW5lbm8sIGludAorICAgICAgICAgICAgICAgICAgICBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIERpY3RDb21wKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpIF9QeV9EaWN0Q29tcChhMCwgYTEsIGEyLCBhMywgYTQsIGE1KQorZXhwcl90eSBfUHlfRGljdENvbXAoZXhwcl90eSBrZXksIGV4cHJfdHkgdmFsdWUsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50CisgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEdlbmVyYXRvckV4cChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9HZW5lcmF0b3JFeHAoYTAsIGExLCBhMiwgYTMsIGE0KQogZXhwcl90eSBfUHlfR2VuZXJhdG9yRXhwKGV4cHJfdHkgZWx0LCBhc2RsX3NlcSAqIGdlbmVyYXRvcnMsIGludCBsaW5lbm8sIGludAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLmggYi9JbmNsdWRlL1B5dGhvbi5oCmluZGV4IGIwOWI0YmIuLjc3NTQxMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvUHl0aG9uLmgKKysrIGIvSW5jbHVkZS9QeXRob24uaApAQCAtOTIsNyArOTIsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAicmFuZ2VvYmplY3QuaCIKICNpbmNsdWRlICJzdHJpbmdvYmplY3QuaCIKLS8qICNpbmNsdWRlICJtZW1vcnlvYmplY3QuaCIgKi8KKyNpbmNsdWRlICJtZW1vcnlvYmplY3QuaCIKICNpbmNsdWRlICJidWZmZXJvYmplY3QuaCIKICNpbmNsdWRlICJieXRlc29iamVjdC5oIgogI2luY2x1ZGUgImJ5dGVhcnJheW9iamVjdC5oIgpAQCAtMTA3LDYgKzEwNyw3IEBACiAjaW5jbHVkZSAiY2xhc3NvYmplY3QuaCIKICNpbmNsdWRlICJmaWxlb2JqZWN0LmgiCiAjaW5jbHVkZSAiY29iamVjdC5oIgorI2luY2x1ZGUgInB5Y2Fwc3VsZS5oIgogI2luY2x1ZGUgInRyYWNlYmFjay5oIgogI2luY2x1ZGUgInNsaWNlb2JqZWN0LmgiCiAjaW5jbHVkZSAiY2VsbG9iamVjdC5oIgpAQCAtMTM0LDggKzEzNSwxMCBAQAogI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJldmFsLmgiCiAKKyNpbmNsdWRlICJweWN0eXBlLmgiCiAjaW5jbHVkZSAicHlzdHJ0b2QuaCIKICNpbmNsdWRlICJweXN0cmNtcC5oIgorI2luY2x1ZGUgImR0b2EuaCIKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBjNzhhYjAwLi5lNGNlNWFkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC02MzYsNyArNjM2LDggQEAKIAogI2RlZmluZSBQeUl0ZXJfQ2hlY2sob2JqKSBcCiAgICAgKFB5VHlwZV9IYXNGZWF0dXJlKChvYmopLT5vYl90eXBlLCBQeV9UUEZMQUdTX0hBVkVfSVRFUikgJiYgXAotICAgICAob2JqKS0+b2JfdHlwZS0+dHBfaXRlcm5leHQgIT0gTlVMTCkKKyAgICAgKG9iaiktPm9iX3R5cGUtPnRwX2l0ZXJuZXh0ICE9IE5VTEwgJiYgXAorICAgICAob2JqKS0+b2JfdHlwZS0+dHBfaXRlcm5leHQgIT0gJl9QeU9iamVjdF9OZXh0Tm90SW1wbGVtZW50ZWQpCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUl0ZXJfTmV4dChQeU9iamVjdCAqKTsKICAgICAgLyogVGFrZXMgYW4gaXRlcmF0b3Igb2JqZWN0IGFuZCBjYWxscyBpdHMgdHBfaXRlcm5leHQgc2xvdCwKQEAgLTEzODIsNiArMTM4MywxMyBAQAogUHlBUElfRlVOQyhpbnQpIF9QeU9iamVjdF9SZWFsSXNTdWJjbGFzcyhQeU9iamVjdCAqZGVyaXZlZCwgUHlPYmplY3QgKmNscyk7CiAKIAorLyogRm9yIGludGVybmFsIHVzZSBieSBidWZmZXIgQVBJIGZ1bmN0aW9ucyAqLworUHlBUElfRlVOQyh2b2lkKSBfUHlfYWRkX29uZV90b19pbmRleF9GKGludCBuZCwgUHlfc3NpemVfdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfYWRkX29uZV90b19pbmRleF9DKGludCBuZCwgUHlfc3NpemVfdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUpOworCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBiL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCmluZGV4IDU5ODczZjIuLjQxMjU2NjYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCisrKyBiL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCkBAIC0zNCwyMyArMzQsMTUgQEAKIGV4dGVybiBjb25zdCBjaGFyIF9QeV9jYXBpdGFsaXplX19kb2NfX1tdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX1B5X3N3YXBjYXNlX19kb2NfX1tdOwogCi0jZGVmaW5lIEZMQUdfTE9XRVIgIDB4MDEKLSNkZWZpbmUgRkxBR19VUFBFUiAgMHgwMgotI2RlZmluZSBGTEFHX0FMUEhBICAoRkxBR19MT1dFUnxGTEFHX1VQUEVSKQotI2RlZmluZSBGTEFHX0RJR0lUICAweDA0Ci0jZGVmaW5lIEZMQUdfQUxOVU0gIChGTEFHX0FMUEhBfEZMQUdfRElHSVQpCi0jZGVmaW5lIEZMQUdfU1BBQ0UgIDB4MDgKLSNkZWZpbmUgRkxBR19YRElHSVQgMHgxMAotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgaW50IF9QeV9jdHlwZV90YWJsZVsyNTZdOwotCi0jZGVmaW5lIElTTE9XRVIoYykgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBGTEFHX0xPV0VSKQotI2RlZmluZSBJU1VQUEVSKGMpIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgRkxBR19VUFBFUikKLSNkZWZpbmUgSVNBTFBIQShjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIEZMQUdfQUxQSEEpCi0jZGVmaW5lIElTRElHSVQoYykgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBGTEFHX0RJR0lUKQotI2RlZmluZSBJU1hESUdJVChjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIEZMQUdfWERJR0lUKQotI2RlZmluZSBJU0FMTlVNKGMpIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgRkxBR19BTE5VTSkKLSNkZWZpbmUgSVNTUEFDRShjKSAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIEZMQUdfU1BBQ0UpCisvKiBUaGVzZSBhcmUgbGVmdCBpbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgd2lsbCBiZSByZW1vdmVkCisgICBpbiAyLjgvMy4yICovCisjZGVmaW5lIElTTE9XRVIoYykgIFB5X0lTTE9XRVIoYykKKyNkZWZpbmUgSVNVUFBFUihjKSAgUHlfSVNVUFBFUihjKQorI2RlZmluZSBJU0FMUEhBKGMpICBQeV9JU0FMUEhBKGMpCisjZGVmaW5lIElTRElHSVQoYykgIFB5X0lTRElHSVQoYykKKyNkZWZpbmUgSVNYRElHSVQoYykgUHlfSVNYRElHSVQoYykKKyNkZWZpbmUgSVNBTE5VTShjKSAgUHlfSVNBTE5VTShjKQorI2RlZmluZSBJU1NQQUNFKGMpICBQeV9JU1NQQUNFKGMpCiAKICN1bmRlZiBpc2xvd2VyCiAjZGVmaW5lIGlzbG93ZXIoYykgdW5kZWZpbmVkX2lzbG93ZXIoYykKQEAgLTY3LDExICs1OSwxMCBAQAogI3VuZGVmIGlzc3BhY2UKICNkZWZpbmUgaXNzcGFjZShjKSB1bmRlZmluZWRfaXNzcGFjZShjKQogCi1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG9sb3dlclsyNTZdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2N0eXBlX3RvdXBwZXJbMjU2XTsKLQotI2RlZmluZSBUT0xPV0VSKGMpIChfUHlfY3R5cGVfdG9sb3dlcltQeV9DSEFSTUFTSyhjKV0pCi0jZGVmaW5lIFRPVVBQRVIoYykgKF9QeV9jdHlwZV90b3VwcGVyW1B5X0NIQVJNQVNLKGMpXSkKKy8qIFRoZXNlIGFyZSBsZWZ0IGluIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIHJlbW92ZWQKKyAgIGluIDIuOC8zLjIgKi8KKyNkZWZpbmUgVE9MT1dFUihjKSBQeV9UT0xPV0VSKGMpCisjZGVmaW5lIFRPVVBQRVIoYykgUHlfVE9VUFBFUihjKQogCiAjdW5kZWYgdG9sb3dlcgogI2RlZmluZSB0b2xvd2VyKGMpIHVuZGVmaW5lZF90b2xvd2VyKGMpCmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmggYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKaW5kZXggYTUwNzkyYy4uMTA4M2RhOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlc29iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaApAQCAtMjMsMTEgKzIzLDUgQEAKICNkZWZpbmUgX1B5Qnl0ZXNfRm9ybWF0TG9uZyBfUHlTdHJpbmdfRm9ybWF0TG9uZwogI2RlZmluZSBQeUJ5dGVzX0RlY29kZUVzY2FwZSBQeVN0cmluZ19EZWNvZGVFc2NhcGUKICNkZWZpbmUgX1B5Qnl0ZXNfSm9pbiBfUHlTdHJpbmdfSm9pbgotI2RlZmluZSBQeUJ5dGVzX0RlY29kZSBQeVN0cmluZ19EZWNvZGUKLSNkZWZpbmUgUHlCeXRlc19FbmNvZGUgUHlTdHJpbmdfRW5jb2RlCi0jZGVmaW5lIFB5Qnl0ZXNfQXNFbmNvZGVkT2JqZWN0IFB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdAotI2RlZmluZSBQeUJ5dGVzX0FzRW5jb2RlZFN0cmluZyBQeVN0cmluZ19Bc0VuY29kZWRTdHJpbmcKLSNkZWZpbmUgUHlCeXRlc19Bc0RlY29kZWRPYmplY3QgUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0Ci0jZGVmaW5lIFB5Qnl0ZXNfQXNEZWNvZGVkU3RyaW5nIFB5U3RyaW5nX0FzRGVjb2RlZFN0cmluZwogI2RlZmluZSBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZSBQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUKICNkZWZpbmUgX1B5Qnl0ZXNfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NTdHJpbmdJTy5oIGIvSW5jbHVkZS9jU3RyaW5nSU8uaAppbmRleCBkMjJiOWViLi42Y2E0NGE4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2NTdHJpbmdJTy5oCisrKyBiL0luY2x1ZGUvY1N0cmluZ0lPLmgKQEAgLTE4LDkgKzE4LDEyIEBACiAgIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIGRvbmUgaW4geW91ciBpbml0IGZ1bmN0aW9uLgogCiAqLworCisjZGVmaW5lIFB5Y1N0cmluZ0lPX0NBUFNVTEVfTkFNRSAiY1N0cmluZ0lPLmNTdHJpbmdJT19DQVBJIgorCiAjZGVmaW5lIFB5Y1N0cmluZ19JTVBPUlQgXAotICBQeWNTdHJpbmdJTyA9IChzdHJ1Y3QgUHljU3RyaW5nSU9fQ0FQSSopUHlDT2JqZWN0X0ltcG9ydCgiY1N0cmluZ0lPIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY1N0cmluZ0lPX0NBUEkiKQorICBQeWNTdHJpbmdJTyA9ICgoc3RydWN0IFB5Y1N0cmluZ0lPX0NBUEkqKVB5Q2Fwc3VsZV9JbXBvcnQoXAorICAgIFB5Y1N0cmluZ0lPX0NBUFNVTEVfTkFNRSwgMCkpCiAKIC8qIEJhc2ljIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIGNTdHJpbmdJTyBvYmplY3RzIGZyb20gQyAqLwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NldmFsLmggYi9JbmNsdWRlL2NldmFsLmgKaW5kZXggNDBmN2I5NC4uMGU4YmQyYSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jZXZhbC5oCisrKyBiL0luY2x1ZGUvY2V2YWwuaApAQCAtMTAsMTAgKzEwLDYgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKLS8qIERMTC1sZXZlbCBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogKi8KLSN1bmRlZiBQeUV2YWxfQ2FsbE9iamVjdAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfQ2FsbE9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKLQogLyogSW5saW5lIHRoaXMgKi8KICNkZWZpbmUgUHlFdmFsX0NhbGxPYmplY3QoZnVuYyxhcmcpIFwKICAgICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyhmdW5jLCBhcmcsIChQeU9iamVjdCAqKU5VTEwpCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NsYXNzb2JqZWN0LmggYi9JbmNsdWRlL2NsYXNzb2JqZWN0LmgKaW5kZXggMTE4ZGQwOS4uYmMwM2UwZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jbGFzc29iamVjdC5oCisrKyBiL0luY2x1ZGUvY2xhc3NvYmplY3QuaApAQCAtMTgsNiArMTgsNyBAQAogICAgIFB5T2JqZWN0CSpjbF9nZXRhdHRyOwogICAgIFB5T2JqZWN0CSpjbF9zZXRhdHRyOwogICAgIFB5T2JqZWN0CSpjbF9kZWxhdHRyOworICAgIFB5T2JqZWN0ICAgICpjbF93ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH0gUHlDbGFzc09iamVjdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2JqZWN0LmggYi9JbmNsdWRlL2NvYmplY3QuaAppbmRleCA0ZTI0ZDdkLi5hZDNjZDljIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvYmplY3QuaAorKysgYi9JbmNsdWRlL2NvYmplY3QuaApAQCAtMSwzICsxLDI5IEBACisvKgorICAgQ09iamVjdHMgYXJlIG1hcmtlZCBQZW5kaW5nIERlcHJlY2F0aW9uIGFzIG9mIFB5dGhvbiAyLjcuCisgICBUaGUgZnVsbCBzY2hlZHVsZSBmb3IgMi54IGlzIGFzIGZvbGxvd3M6CisgICAgIC0gQ09iamVjdHMgYXJlIG1hcmtlZCBQZW5kaW5nIERlcHJlY2F0aW9uIGluIFB5dGhvbiAyLjcuCisgICAgIC0gQ09iamVjdHMgd2lsbCBiZSBtYXJrZWQgRGVwcmVjYXRlZCBpbiBQeXRob24gMi44CisgICAgICAgKGlmIHRoZXJlIGlzIG9uZSkuCisgICAgIC0gQ09iamVjdHMgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAyLjkgKGlmIHRoZXJlIGlzIG9uZSkuCisKKyAgIEFkZGl0aW9uYWxseSwgZm9yIHRoZSBQeXRob24gMy54IHNlcmllczoKKyAgICAgLSBDT2JqZWN0cyB3ZXJlIG1hcmtlZCBEZXByZWNhdGVkIGluIFB5dGhvbiAzLjEuCisgICAgIC0gQ09iamVjdHMgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjIuCisKKyAgIFlvdSBzaG91bGQgc3dpdGNoIGFsbCB1c2Ugb2YgQ09iamVjdHMgdG8gY2Fwc3VsZXMuICBDYXBzdWxlcworICAgaGF2ZSBhIHNhZmVyIGFuZCBtb3JlIGNvbnNpc3RlbnQgQVBJLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sCisgICBzZWUgSW5jbHVkZS9weWNhcHN1bGUuaCwgb3IgcmVhZCB0aGUgIkNhcHN1bGVzIiB0b3BpYyBpbgorICAgdGhlICJQeXRob24vQyBBUEkgUmVmZXJlbmNlIE1hbnVhbCIuCisKKyAgIFB5dGhvbiAyLjcgbm8gbG9uZ2VyIHVzZXMgQ09iamVjdHMgaXRzZWxmOyBhbGwgb2JqZWN0cyB3aGljaAorICAgd2VyZSBmb3JtZXJseSBDT2JqZWN0cyBhcmUgbm93IGNhcHN1bGVzLiAgTm90ZSB0aGF0IHRoaXMgY2hhbmdlCisgICBkb2VzIG5vdCBieSBpdHNlbGYgYnJlYWsgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBleHRlbnNpb25zCisgICBidWlsdCBmb3IgcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLS1QeUNPYmplY3RfQXNWb2lkUHRyKCkKKyAgIGhhcyBiZWVuIGNoYW5nZWQgdG8gYWxzbyB1bmRlcnN0YW5kIGNhcHN1bGVzLgorCisqLworCisvKiBvcmlnaW5hbCBmaWxlIGhlYWRlciBjb21tZW50IGZvbGxvd3M6ICovCiAKIC8qIEMgb2JqZWN0cyB0byBiZSBleHBvcnRlZCBmcm9tIG9uZSBleHRlbnNpb24gbW9kdWxlIHRvIGFub3RoZXIuCiAgCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvZGUuaCBiL0luY2x1ZGUvY29kZS5oCmluZGV4IDhjMDA3MDAuLjM4YjI5NTggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZS5oCisrKyBiL0luY2x1ZGUvY29kZS5oCkBAIC0yMyw4ICsyMywxMCBAQAogICAgIFB5T2JqZWN0ICpjb19maWxlbmFtZTsJLyogc3RyaW5nICh3aGVyZSBpdCB3YXMgbG9hZGVkIGZyb20pICovCiAgICAgUHlPYmplY3QgKmNvX25hbWU7CQkvKiBzdHJpbmcgKG5hbWUsIGZvciByZWZlcmVuY2UpICovCiAgICAgaW50IGNvX2ZpcnN0bGluZW5vOwkJLyogZmlyc3Qgc291cmNlIGxpbmUgbnVtYmVyICovCi0gICAgUHlPYmplY3QgKmNvX2xub3RhYjsJLyogc3RyaW5nIChlbmNvZGluZyBhZGRyPC0+bGluZW5vIG1hcHBpbmcpICovCisgICAgUHlPYmplY3QgKmNvX2xub3RhYjsJLyogc3RyaW5nIChlbmNvZGluZyBhZGRyPC0+bGluZW5vIG1hcHBpbmcpIFNlZQorCQkJCSAgIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgZGV0YWlscy4gKi8KICAgICB2b2lkICpjb196b21iaWVmcmFtZTsgICAgIC8qIGZvciBvcHRpbWl6YXRpb24gb25seSAoc2VlIGZyYW1lb2JqZWN0LmMpICovCisgICAgUHlPYmplY3QgKmNvX3dlYWtyZWZsaXN0OyAgIC8qIHRvIHN1cHBvcnQgd2Vha3JlZnMgdG8gY29kZSBvYmplY3RzICovCiB9IFB5Q29kZU9iamVjdDsKIAogLyogTWFza3MgZm9yIGNvX2ZsYWdzIGFib3ZlICovCkBAIC03MCw2ICs3MiwxNCBAQAogCWludCwgaW50LCBpbnQsIGludCwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKIAlQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQsIFB5T2JqZWN0ICopOyAKICAgICAgICAgLyogc2FtZSBhcyBzdHJ1Y3QgYWJvdmUgKi8KKworLyogQ3JlYXRlcyBhIG5ldyBlbXB0eSBjb2RlIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgc291cmNlIGxvY2F0aW9uLiAqLworUHlBUElfRlVOQyhQeUNvZGVPYmplY3QgKikKK1B5Q29kZV9OZXdFbXB0eShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVuY25hbWUsIGludCBmaXJzdGxpbmVubyk7CisKKy8qIFJldHVybiB0aGUgbGluZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYnl0ZWNvZGUgaW5kZXgKKyAgIGluIHRoaXMgY29kZSBvYmplY3QuICBJZiB5b3UganVzdCBuZWVkIHRoZSBsaW5lIG51bWJlciBvZiBhIGZyYW1lLAorICAgdXNlIFB5RnJhbWVfR2V0TGluZU51bWJlcigpIGluc3RlYWQuICovCiBQeUFQSV9GVU5DKGludCkgUHlDb2RlX0FkZHIyTGluZShQeUNvZGVPYmplY3QgKiwgaW50KTsKIAogLyogZm9yIGludGVybmFsIHVzZSBvbmx5ICovCkBAIC04MiwxNSArOTIsMTEgQEAKICAgICAgICAgaW50IGFwX3VwcGVyOwogfSBQeUFkZHJQYWlyOwogCi0vKiBDaGVjayB3aGV0aGVyIGxhc3RpIChhbiBpbnN0cnVjdGlvbiBvZmZzZXQpIGZhbGxzIG91dHNpZGUgYm91bmRzCi0gICBhbmQgd2hldGhlciBpdCBpcyBhIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkIGJlIHRyYWNlZC4gIFJldHVybnMKLSAgIGEgbGluZSBudW1iZXIgaWYgaXQgc2hvdWxkIGJlIHRyYWNlZCBvciAtMSBpZiB0aGUgbGluZSBzaG91bGQgbm90LgotCi0gICBJZiBsYXN0aSBpcyBub3Qgd2l0aGluIGJvdW5kcywgdXBkYXRlcyBib3VuZHMuCisvKiBVcGRhdGUgKmJvdW5kcyB0byBkZXNjcmliZSB0aGUgZmlyc3QgYW5kIG9uZS1wYXN0LXRoZS1sYXN0IGluc3RydWN0aW9ucyBpbiB0aGUKKyAgIHNhbWUgbGluZSBhcyBsYXN0aS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoYXQgbGluZS4KICovCi0KLVB5QVBJX0ZVTkMoaW50KSBQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKFB5Q29kZU9iamVjdCogY28sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdGksIFB5QWRkclBhaXIgKmJvdW5kcyk7CitQeUFQSV9GVU5DKGludCkgX1B5Q29kZV9DaGVja0xpbmVOdW1iZXIoUHlDb2RlT2JqZWN0KiBjbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGFzdGksIFB5QWRkclBhaXIgKmJvdW5kcyk7CiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeUNvZGVfT3B0aW1pemUoUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0KiBjb25zdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lcywgUHlPYmplY3QgKmxpbmVub19vYmopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2RlY3MuaCBiL0luY2x1ZGUvY29kZWNzLmgKaW5kZXggMGQ3NjI0MS4uYzAzOGM2YSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb2RlY3MuaAorKysgYi9JbmNsdWRlL2NvZGVjcy5oCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogLyogVW5pY29kZSBlbmNvZGluZyBlcnJvciBoYW5kbGluZyBjYWxsYmFjayByZWdpc3RyeSBBUEkgKi8KIAotLyogUmVnaXN0ZXIgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIGVycm9yIHVuZGVyIHRoZSBuYW1lCisvKiBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gZXJyb3IgdW5kZXIgdGhlIGdpdmVuCiAgICBuYW1lLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBjb2RlYyB3aGVuIGl0IGVuY291bnRlcnMKICAgIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMvdW5kZWNvZGFibGUgYnl0ZXMgYW5kIGRvZXNuJ3Qga25vdyB0aGUKICAgIGNhbGxiYWNrIG5hbWUsIHdoZW4gbmFtZSBpcyBzcGVjaWZpZWQgYXMgdGhlIGVycm9yIHBhcmFtZXRlcgpAQCAtMTQxLDggKzE0MSw4IEBACiAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLwogUHlBUElfRlVOQyhpbnQpIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcihjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqZXJyb3IpOwogCi0vKiBMb29rdXAgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhlCi0gICBuYW1lIGVycm9yLiBBcyBhIHNwZWNpYWwgY2FzZSBOVUxMIGNhbiBiZSBwYXNzZWQsIGluIHdoaWNoIGNhc2UKKy8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUgZ2l2ZW4KKyAgIG5hbWUuIEFzIGEgc3BlY2lhbCBjYXNlIE5VTEwgY2FuIGJlIHBhc3NlZCwgaW4gd2hpY2ggY2FzZQogICAgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZvciAic3RyaWN0IiB3aWxsIGJlIHJldHVybmVkLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX0xvb2t1cEVycm9yKGNvbnN0IGNoYXIgKm5hbWUpOwogCkBAIC0xNTIsNyArMTUyLDcgQEAKIC8qIGlnbm9yZSB0aGUgdW5pY29kZSBlcnJvciwgc2tpcHBpbmcgdGhlIGZhdWx0eSBpbnB1dCAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX0lnbm9yZUVycm9ycyhQeU9iamVjdCAqZXhjKTsKIAotLyogcmVwbGFjZSB0aGUgdW5pY29kZSBlcnJvciB3aXRoID8gb3IgVStGRkZEICovCisvKiByZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoID8gb3IgVStGRkZEICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q29kZWNfUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKTsKIAogLyogcmVwbGFjZSB0aGUgdW5pY29kZSBlbmNvZGUgZXJyb3Igd2l0aCBYTUwgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggNDNhNDcwZC4uNjEwMDEwMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTMzLDggKzMzLDYgQEAKIAkJCQkJUHlDb21waWxlckZsYWdzICosIFB5QXJlbmEgKik7CiBQeUFQSV9GVU5DKFB5RnV0dXJlRmVhdHVyZXMgKikgUHlGdXR1cmVfRnJvbUFTVChzdHJ1Y3QgX21vZCAqLCBjb25zdCBjaGFyICopOwogCi0jZGVmaW5lIEVSUl9MQVRFX0ZVVFVSRSBcCi0iZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGxleG9iamVjdC5oIGIvSW5jbHVkZS9jb21wbGV4b2JqZWN0LmgKaW5kZXggODRiNmQ4Yi4uYzlhOTUwMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21wbGV4b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9jb21wbGV4b2JqZWN0LmgKQEAgLTU0LDYgKzU0LDEyIEBACiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlDb21wbGV4X0ltYWdBc0RvdWJsZShQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhQeV9jb21wbGV4KSBQeUNvbXBsZXhfQXNDQ29tcGxleChQeU9iamVjdCAqb3ApOwogCisvKiBGb3JtYXQgdGhlIG9iamVjdCBiYXNlZCBvbiB0aGUgZm9ybWF0X3NwZWMsIGFzIGRlZmluZWQgaW4gUEVQIDMxMDEKKyAgIChBZHZhbmNlZCBTdHJpbmcgRm9ybWF0dGluZykuICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWQoUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2RhdGV0aW1lLmggYi9JbmNsdWRlL2RhdGV0aW1lLmgKaW5kZXggMjgzMThlYS4uNDdhYmU1YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kYXRldGltZS5oCisrKyBiL0luY2x1ZGUvZGF0ZXRpbWUuaApAQCAtMTU4LDYgKzE1OCw4IEBACiAKIH0gUHlEYXRlVGltZV9DQVBJOwogCisjZGVmaW5lIFB5RGF0ZVRpbWVfQ0FQU1VMRV9OQU1FICJkYXRldGltZS5kYXRldGltZV9DQVBJIgorCiAKIC8qICJtYWdpYyIgY29uc3RhbnQgdXNlZCB0byBwYXJ0aWFsbHkgcHJvdGVjdCBhZ2FpbnN0IGRldmVsb3BlciBtaXN0YWtlcy4gKi8KICNkZWZpbmUgREFURVRJTUVfQVBJX01BR0lDIDB4NDE0NTQ4ZDUKQEAgLTE4MywxOCArMTg1LDEwIEBACiAjZWxzZQogCiAvKiBEZWZpbmUgZ2xvYmFsIHZhcmlhYmxlIGZvciB0aGUgQyBBUEkgYW5kIGEgbWFjcm8gZm9yIHNldHRpbmcgaXQuICovCi1zdGF0aWMgUHlEYXRlVGltZV9DQVBJICpQeURhdGVUaW1lQVBJOworc3RhdGljIFB5RGF0ZVRpbWVfQ0FQSSAqUHlEYXRlVGltZUFQSSA9IE5VTEw7CiAKICNkZWZpbmUgUHlEYXRlVGltZV9JTVBPUlQgXAotICAgIFB5RGF0ZVRpbWVBUEkgPSAoUHlEYXRlVGltZV9DQVBJKikgUHlDT2JqZWN0X0ltcG9ydCgiZGF0ZXRpbWUiLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRldGltZV9DQVBJIikKLQotLyogVGhpcyBtYWNybyB3b3VsZCBiZSB1c2VkIGlmIFB5Q09iamVjdF9JbXBvcnRFeCgpIHdhcyBjcmVhdGVkLgotI2RlZmluZSBQeURhdGVUaW1lX0lNUE9SVCBcCi0gICAgUHlEYXRlVGltZUFQSSA9IChQeURhdGVUaW1lX0NBUEkqKSBQeUNPYmplY3RfSW1wb3J0RXgoImRhdGV0aW1lIiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0ZXRpbWVfQ0FQSSIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURVRJTUVfQVBJX01BR0lDKQotKi8KKyAgICBQeURhdGVUaW1lQVBJID0gKFB5RGF0ZVRpbWVfQ0FQSSAqKVB5Q2Fwc3VsZV9JbXBvcnQoUHlEYXRlVGltZV9DQVBTVUxFX05BTUUsIDApCiAKIC8qIE1hY3JvcyBmb3IgdHlwZSBjaGVja2luZyB3aGVuIG5vdCBidWlsZGluZyB0aGUgUHl0aG9uIGNvcmUuICovCiAjZGVmaW5lIFB5RGF0ZV9DaGVjayhvcCkgUHlPYmplY3RfVHlwZUNoZWNrKG9wLCBQeURhdGVUaW1lQVBJLT5EYXRlVHlwZSkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGljdG9iamVjdC5oIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKaW5kZXggYjA0NmZjNy4uZWNlMDFjNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kaWN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKQEAgLTg5LDEwICs4OSwyMiBAQAogfTsKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdF9UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdEl0ZXJLZXlfVHlwZTsKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeURpY3RJdGVyVmFsdWVfVHlwZTsKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeURpY3RJdGVySXRlbV9UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdEtleXNfVHlwZTsKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeURpY3RJdGVtc19UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdFZhbHVlc19UeXBlOwogCiAjZGVmaW5lIFB5RGljdF9DaGVjayhvcCkgXAogICAgICAgICAgICAgICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MpCiAjZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RGljdF9UeXBlKQorI2RlZmluZSBQeURpY3RLZXlzX0NoZWNrKG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RGljdEtleXNfVHlwZSkKKyNkZWZpbmUgUHlEaWN0SXRlbXNfQ2hlY2sob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlEaWN0SXRlbXNfVHlwZSkKKyNkZWZpbmUgUHlEaWN0VmFsdWVzX0NoZWNrKG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RGljdFZhbHVlc19UeXBlKQorLyogVGhpcyBleGNsdWRlcyBWYWx1ZXMsIHNpbmNlIHRoZXkgYXJlIG5vdCBzZXRzLiAqLworIyBkZWZpbmUgUHlEaWN0Vmlld1NldF9DaGVjayhvcCkgXAorICAgIChQeURpY3RLZXlzX0NoZWNrKG9wKSB8fCBQeURpY3RJdGVtc19DaGVjayhvcCkpCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X05ldyh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X0dldEl0ZW0oUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KTsKQEAgLTExMSw2ICsxMjMsNyBAQAogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9Db250YWlucyhQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfQ29udGFpbnMoUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBsb25nIGhhc2gpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X05ld1ByZXNpemVkKFB5X3NzaXplX3QgbWludXNlZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeURpY3RfTWF5YmVVbnRyYWNrKFB5T2JqZWN0ICptcCk7CiAKIC8qIFB5RGljdF9VcGRhdGUobXAsIG90aGVyKSBpcyBlcXVpdmFsZW50IHRvIFB5RGljdF9NZXJnZShtcCwgb3RoZXIsIDEpLiAqLwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9VcGRhdGUoUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqb3RoZXIpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9kdG9hLmggYi9JbmNsdWRlL2R0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjQzNGI3Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9kdG9hLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1B5QVBJX0ZVTkMoZG91YmxlKSBfUHlfZGdfc3RydG9kKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0cik7CitQeUFQSV9GVU5DKGNoYXIgKikgX1B5X2RnX2R0b2EoZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9kZ19mcmVlZHRvYShjaGFyICpzKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGVvYmplY3QuaCBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCmluZGV4IGMyMzM0YjIuLmJhNTA2ZWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCkBAIC03MCw2ICs3MCwyMCBAQAogKi8KIGludCBfUHlGaWxlX1Nhbml0aXplTW9kZShjaGFyICptb2RlKTsKIAorI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMAorLyogQSByb3V0aW5lIHRvIGNoZWNrIGlmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIHZhbGlkIG9uIFdpbmRvd3MuICBSZXR1cm5zIDAKKyAqIGFuZCBzZXRzIGVycm5vIHRvIEVCQURGIGlmIGl0IGlzbid0LiAgVGhpcyBpcyB0byBhdm9pZCBBc3NlcnRpb25zCisgKiBmcm9tIHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSBXaW5kb3dzIENSVCBiZWdpbm5pbmcgd2l0aAorICogVmlzdWFsIFN0dWRpbyAyMDA1CisgKi8KK2ludCBfUHlWZXJpZnlfZmQoaW50IGZkKTsKKyNlbGlmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTIwMAorLyogZmRvcGVuIGRvZXNuJ3Qgc2V0IGVycm5vIEVCQURGIGFuZCBjcmFzaGVzIGZvciBsYXJnZSBmZCBvbiBkZWJ1ZyBidWlsZCAqLworI2RlZmluZSBfUHlWZXJpZnlfZmQoZmQpIChfZ2V0X29zZmhhbmRsZShmZCkgPj0gMCkKKyNlbHNlCisjZGVmaW5lIF9QeVZlcmlmeV9mZChBKSAoMSkgLyogZHVtbXkgKi8KKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9mbG9hdG9iamVjdC5oIGIvSW5jbHVkZS9mbG9hdG9iamVjdC5oCmluZGV4IDYwZWRlNDAuLjU0ZTg4MjUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmxvYXRvYmplY3QuaAorKysgYi9JbmNsdWRlL2Zsb2F0b2JqZWN0LmgKQEAgLTIxLDYgKzIxLDEyIEBACiAjZGVmaW5lIFB5RmxvYXRfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5RmxvYXRfVHlwZSkKICNkZWZpbmUgUHlGbG9hdF9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RmxvYXRfVHlwZSkKIAorLyogVGhlIHN0cigpIHByZWNpc2lvbiBQeUZsb2F0X1NUUl9QUkVDSVNJT04gaXMgY2hvc2VuIHNvIHRoYXQgaW4gbW9zdCBjYXNlcywKKyAgIHRoZSByb3VuZGluZyBub2lzZSBjcmVhdGVkIGJ5IHZhcmlvdXMgb3BlcmF0aW9ucyBpcyBzdXBwcmVzc2VkLCB3aGlsZQorICAgZ2l2aW5nIHBsZW50eSBvZiBwcmVjaXNpb24gZm9yIHByYWN0aWNhbCB1c2UuICovCisKKyNkZWZpbmUgUHlGbG9hdF9TVFJfUFJFQ0lTSU9OIDEyCisKICNpZmRlZiBQeV9OQU4KICNkZWZpbmUgUHlfUkVUVVJOX05BTiByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKFB5X05BTikKICNlbmRpZgpAQCAtMTIxLDYgKzEyNywxMyBAQAogCQkJCQkgICAgICAgY2hhciAqZm9ybWF0X3NwZWMsCiAJCQkJCSAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CiAKKy8qIFJvdW5kIGEgQyBkb3VibGUgeCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiAxMCoqLW5kaWdpdHMuICBSZXR1cm5zIGEKKyAgIFB5dGhvbiBmbG9hdCBvbiBzdWNjZXNzLCBvciBOVUxMICh3aXRoIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBzZXQpIG9uCisgICBmYWlsdXJlLiAgVXNlZCBpbiBidWlsdGluX3JvdW5kIGluIGJsdGlubW9kdWxlLmMuICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeV9kb3VibGVfcm91bmQoZG91YmxlIHgsIGludCBuZGlnaXRzKTsKKworCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggMjk3YjY2ZC4uMTdlNzY3OSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMzgsOCArMzgsMTEgQEAKIAogICAgIFB5VGhyZWFkU3RhdGUgKmZfdHN0YXRlOwogICAgIGludCBmX2xhc3RpOwkJLyogTGFzdCBpbnN0cnVjdGlvbiBpZiBjYWxsZWQgKi8KLSAgICAvKiBBcyBvZiAyLjMgZl9saW5lbm8gaXMgb25seSB2YWxpZCB3aGVuIHRyYWNpbmcgaXMgYWN0aXZlIChpLmUuIHdoZW4KLSAgICAgICBmX3RyYWNlIGlzIHNldCkgLS0gYXQgb3RoZXIgdGltZXMgdXNlIFB5Q29kZV9BZGRyMkxpbmUgaW5zdGVhZC4gKi8KKyAgICAvKiBDYWxsIFB5RnJhbWVfR2V0TGluZU51bWJlcigpIGluc3RlYWQgb2YgcmVhZGluZyB0aGlzIGZpZWxkCisgICAgICAgZGlyZWN0bHkuICBBcyBvZiAyLjMgZl9saW5lbm8gaXMgb25seSB2YWxpZCB3aGVuIHRyYWNpbmcgaXMKKyAgICAgICBhY3RpdmUgKGkuZS4gd2hlbiBmX3RyYWNlIGlzIHNldCkuICBBdCBvdGhlciB0aW1lcyB3ZSB1c2UKKyAgICAgICBQeUNvZGVfQWRkcjJMaW5lIHRvIGNhbGN1bGF0ZSB0aGUgbGluZSBmcm9tIHRoZSBjdXJyZW50CisgICAgICAgYnl0ZWNvZGUgaW5kZXguICovCiAgICAgaW50IGZfbGluZW5vOwkJLyogQ3VycmVudCBsaW5lIG51bWJlciAqLwogICAgIGludCBmX2libG9jazsJCS8qIGluZGV4IGluIGZfYmxvY2tzdGFjayAqLwogICAgIFB5VHJ5QmxvY2sgZl9ibG9ja3N0YWNrW0NPX01BWEJMT0NLU107IC8qIGZvciB0cnkgYW5kIGxvb3AgYmxvY2tzICovCkBAIC03Nyw2ICs4MCw5IEBACiAKIFB5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0NsZWFyRnJlZUxpc3Qodm9pZCk7CiAKKy8qIFJldHVybiB0aGUgbGluZSBvZiBjb2RlIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLiAqLworUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfR2V0TGluZU51bWJlcihQeUZyYW1lT2JqZWN0ICopOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtaW5pdC5oIGIvSW5jbHVkZS9ncmFtaW5pdC5oCmluZGV4IDM4YjRkYWMuLjQwZDUzMWUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ3JhbWluaXQuaAorKysgYi9JbmNsdWRlL2dyYW1pbml0LmgKQEAgLTQyLDcgKzQyLDcgQEAKICNkZWZpbmUgZm9yX3N0bXQgMjk1CiAjZGVmaW5lIHRyeV9zdG10IDI5NgogI2RlZmluZSB3aXRoX3N0bXQgMjk3Ci0jZGVmaW5lIHdpdGhfdmFyIDI5OAorI2RlZmluZSB3aXRoX2l0ZW0gMjk4CiAjZGVmaW5lIGV4Y2VwdF9jbGF1c2UgMjk5CiAjZGVmaW5lIHN1aXRlIDMwMAogI2RlZmluZSB0ZXN0bGlzdF9zYWZlIDMwMQpAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBwb3dlciAzMTcKICNkZWZpbmUgYXRvbSAzMTgKICNkZWZpbmUgbGlzdG1ha2VyIDMxOQotI2RlZmluZSB0ZXN0bGlzdF9nZXhwIDMyMAorI2RlZmluZSB0ZXN0bGlzdF9jb21wIDMyMAogI2RlZmluZSBsYW1iZGVmIDMyMQogI2RlZmluZSB0cmFpbGVyIDMyMgogI2RlZmluZSBzdWJzY3JpcHRsaXN0IDMyMwpAQCAtNzIsMTYgKzcyLDE2IEBACiAjZGVmaW5lIHNsaWNlb3AgMzI1CiAjZGVmaW5lIGV4cHJsaXN0IDMyNgogI2RlZmluZSB0ZXN0bGlzdCAzMjcKLSNkZWZpbmUgZGljdG1ha2VyIDMyOAorI2RlZmluZSBkaWN0b3JzZXRtYWtlciAzMjgKICNkZWZpbmUgY2xhc3NkZWYgMzI5CiAjZGVmaW5lIGFyZ2xpc3QgMzMwCiAjZGVmaW5lIGFyZ3VtZW50IDMzMQogI2RlZmluZSBsaXN0X2l0ZXIgMzMyCiAjZGVmaW5lIGxpc3RfZm9yIDMzMwogI2RlZmluZSBsaXN0X2lmIDMzNAotI2RlZmluZSBnZW5faXRlciAzMzUKLSNkZWZpbmUgZ2VuX2ZvciAzMzYKLSNkZWZpbmUgZ2VuX2lmIDMzNworI2RlZmluZSBjb21wX2l0ZXIgMzM1CisjZGVmaW5lIGNvbXBfZm9yIDMzNgorI2RlZmluZSBjb21wX2lmIDMzNwogI2RlZmluZSB0ZXN0bGlzdDEgMzM4CiAjZGVmaW5lIGVuY29kaW5nX2RlY2wgMzM5CiAjZGVmaW5lIHlpZWxkX2V4cHIgMzQwCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ltcG9ydC5oIGIvSW5jbHVkZS9pbXBvcnQuaAppbmRleCA3NmFlY2RkLi4xYjdmZTBhIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ltcG9ydC5oCisrKyBiL0luY2x1ZGUvaW1wb3J0LmgKQEAgLTUxLDcgKzUxLDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeU51bGxJbXBvcnRlcl9UeXBlOwogUHlBUElfREFUQShzdHJ1Y3QgX2luaXR0YWIgKikgUHlJbXBvcnRfSW5pdHRhYjsKIAotUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoY2hhciAqbmFtZSwgdm9pZCAoKmluaXRmdW5jKSh2b2lkKSk7CitQeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjb25zdCBjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9FeHRlbmRJbml0dGFiKHN0cnVjdCBfaW5pdHRhYiAqbmV3dGFiKTsKIAogc3RydWN0IF9mcm96ZW4gewpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9sb25naW50cmVwci5oIGIvSW5jbHVkZS9sb25naW50cmVwci5oCmluZGV4IGRmMTU3YTguLjY0MjVjMzAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ2ludHJlcHIuaAorKysgYi9JbmNsdWRlL2xvbmdpbnRyZXByLmgKQEAgLTcsMjYgKzcsNjEgQEAKIAogLyogVGhpcyBpcyBwdWJsaXNoZWQgZm9yIHRoZSBiZW5lZml0IG9mICJmcmllbmQiIG1hcnNoYWwuYyBvbmx5LiAqLwogCi0vKiBQYXJhbWV0ZXJzIG9mIHRoZSBsb25nIGludGVnZXIgcmVwcmVzZW50YXRpb24uCi0gICBUaGVzZSBzaG91bGRuJ3QgaGF2ZSB0byBiZSBjaGFuZ2VkIGFzIEMgc2hvdWxkIGd1YXJhbnRlZSB0aGF0IGEgc2hvcnQKLSAgIGNvbnRhaW5zIGF0IGxlYXN0IDE2IGJpdHMsIGJ1dCBpdCdzIG1hZGUgY2hhbmdlYWJsZSBhbnl3YXkuCi0gICBOb3RlOiAnZGlnaXQnIHNob3VsZCBiZSBhYmxlIHRvIGhvbGQgMipNQVNLKzEsIGFuZCAndHdvZGlnaXRzJwotICAgc2hvdWxkIGJlIGFibGUgdG8gaG9sZCB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgaW4gJ211bCcKLSAgIChhdCBtb3N0IChCQVNFLTEpKigyKkJBU0UrMSkgPT0gTUFTSyooMipNQVNLKzMpKS4KLSAgIEFsc28sIHhfc3ViIGFzc3VtZXMgdGhhdCAnZGlnaXQnIGlzIGFuIHVuc2lnbmVkIHR5cGUsIGFuZCBvdmVyZmxvdwotICAgaXMgaGFuZGxlZCBieSB0YWtpbmcgdGhlIHJlc3VsdCBtb2QgMioqTiBmb3Igc29tZSBOID4gU0hJRlQuCi0gICBBbmQsIGF0IHNvbWUgcGxhY2VzIGl0IGlzIGFzc3VtZWQgdGhhdCBNQVNLIGZpdHMgaW4gYW4gaW50LCBhcyB3ZWxsLgotICAgbG9uZ19wb3coKSByZXF1aXJlcyB0aGF0IFNISUZUIGJlIGRpdmlzaWJsZSBieSA1LiAqLworLyogUGFyYW1ldGVycyBvZiB0aGUgbG9uZyBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uLiAgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQKKyAgIHNldHMgb2YgcGFyYW1ldGVyczogb25lIHNldCBmb3IgMzAtYml0IGRpZ2l0cywgc3RvcmVkIGluIGFuIHVuc2lnbmVkIDMyLWJpdAorICAgaW50ZWdlciB0eXBlLCBhbmQgb25lIHNldCBmb3IgMTUtYml0IGRpZ2l0cyB3aXRoIGVhY2ggZGlnaXQgc3RvcmVkIGluIGFuCisgICB1bnNpZ25lZCBzaG9ydC4gIFRoZSB2YWx1ZSBvZiBQWUxPTkdfQklUU19JTl9ESUdJVCwgZGVmaW5lZCBlaXRoZXIgYXQKKyAgIGNvbmZpZ3VyZSB0aW1lIG9yIGluIHB5cG9ydC5oLCBpcyB1c2VkIHRvIGRlY2lkZSB3aGljaCBkaWdpdCBzaXplIHRvIHVzZS4KIAorICAgVHlwZSAnZGlnaXQnIHNob3VsZCBiZSBhYmxlIHRvIGhvbGQgMipQeUxvbmdfQkFTRS0xLCBhbmQgdHlwZSAndHdvZGlnaXRzJworICAgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBhYmxlIHRvIGhvbGQgYWxsIGludGVnZXJzIHVwIHRvCisgICBQeUxvbmdfQkFTRSpQeUxvbmdfQkFTRS0xLiAgeF9zdWIgYXNzdW1lcyB0aGF0ICdkaWdpdCcgaXMgYW4gdW5zaWduZWQgdHlwZSwKKyAgIGFuZCB0aGF0IG92ZXJmbG93IGlzIGhhbmRsZWQgYnkgdGFraW5nIHRoZSByZXN1bHQgbW9kdWxvIDIqKk4gZm9yIHNvbWUgTiA+CisgICBQeUxvbmdfU0hJRlQuICBUaGUgbWFqb3JpdHkgb2YgdGhlIGNvZGUgZG9lc24ndCBjYXJlIGFib3V0IHRoZSBwcmVjaXNlCisgICB2YWx1ZSBvZiBQeUxvbmdfU0hJRlQsIGJ1dCB0aGVyZSBhcmUgc29tZSBub3RhYmxlIGV4Y2VwdGlvbnM6CisKKyAgIC0gbG9uZ19wb3coKSByZXF1aXJlcyB0aGF0IFB5TG9uZ19TSElGVCBiZSBkaXZpc2libGUgYnkgNQorCisgICAtIFB5TG9uZ197QXMsRnJvbX1CeXRlQXJyYXkgcmVxdWlyZSB0aGF0IFB5TG9uZ19TSElGVCBiZSBhdCBsZWFzdCA4CisKKyAgIC0gbG9uZ19oYXNoKCkgcmVxdWlyZXMgdGhhdCBQeUxvbmdfU0hJRlQgaXMgKnN0cmljdGx5KiBsZXNzIHRoYW4gdGhlIG51bWJlcgorICAgICBvZiBiaXRzIGluIGFuIHVuc2lnbmVkIGxvbmcsIGFzIGRvIHRoZSBQeUxvbmcgPC0+IGxvbmcgKG9yIHVuc2lnbmVkIGxvbmcpCisgICAgIGNvbnZlcnNpb24gZnVuY3Rpb25zCisKKyAgIC0gdGhlIGxvbmcgPC0+IHNpemVfdC9QeV9zc2l6ZV90IGNvbnZlcnNpb24gZnVuY3Rpb25zIGV4cGVjdCB0aGF0CisgICAgIFB5TG9uZ19TSElGVCBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBiaXRzIGluIGEgc2l6ZV90CisKKyAgIC0gdGhlIG1hcnNoYWwgY29kZSBjdXJyZW50bHkgZXhwZWN0cyB0aGF0IFB5TG9uZ19TSElGVCBpcyBhIG11bHRpcGxlIG9mIDE1CisKKyAgVGhlIHZhbHVlcyAxNSBhbmQgMzAgc2hvdWxkIGZpdCBhbGwgb2YgdGhlIGFib3ZlIHJlcXVpcmVtZW50cywgb24gYW55CisgIHBsYXRmb3JtLgorKi8KKworI2lmIFBZTE9OR19CSVRTX0lOX0RJR0lUID09IDMwCisjaWYgIShkZWZpbmVkIEhBVkVfVUlOVDY0X1QgJiYgZGVmaW5lZCBIQVZFX1VJTlQzMl9UICYmICAgICAgICAgIFwKKyAgICAgIGRlZmluZWQgSEFWRV9JTlQ2NF9UICYmIGRlZmluZWQgSEFWRV9JTlQzMl9UKQorI2Vycm9yICIzMC1iaXQgbG9uZyBkaWdpdHMgcmVxdWVzdGVkLCBidXQgdGhlIG5lY2Vzc2FyeSB0eXBlcyBhcmUgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIgorI2VuZGlmCit0eXBlZGVmIFBZX1VJTlQzMl9UIGRpZ2l0OwordHlwZWRlZiBQWV9JTlQzMl9UIHNkaWdpdDsgLyogc2lnbmVkIHZhcmlhbnQgb2YgZGlnaXQgKi8KK3R5cGVkZWYgUFlfVUlOVDY0X1QgdHdvZGlnaXRzOwordHlwZWRlZiBQWV9JTlQ2NF9UIHN0d29kaWdpdHM7IC8qIHNpZ25lZCB2YXJpYW50IG9mIHR3b2RpZ2l0cyAqLworI2RlZmluZSBQeUxvbmdfU0hJRlQJMzAKKyNkZWZpbmUgX1B5TG9uZ19ERUNJTUFMX1NISUZUCTkgLyogbWF4KGUgc3VjaCB0aGF0IDEwKiplIGZpdHMgaW4gYSBkaWdpdCkgKi8KKyNkZWZpbmUgX1B5TG9uZ19ERUNJTUFMX0JBU0UJKChkaWdpdCkxMDAwMDAwMDAwKSAvKiAxMCAqKiBERUNJTUFMX1NISUZUICovCisjZWxpZiBQWUxPTkdfQklUU19JTl9ESUdJVCA9PSAxNQogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBkaWdpdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHdkaWdpdDsgLyogZGlnaXQgd2lkZW5lZCB0byBwYXJhbWV0ZXIgc2l6ZSAqLwotI2RlZmluZSBCQVNFX1RXT0RJR0lUU19UWVBFIGxvbmcKLXR5cGVkZWYgdW5zaWduZWQgQkFTRV9UV09ESUdJVFNfVFlQRSB0d29kaWdpdHM7Ci10eXBlZGVmIEJBU0VfVFdPRElHSVRTX1RZUEUgc3R3b2RpZ2l0czsgLyogc2lnbmVkIHZhcmlhbnQgb2YgdHdvZGlnaXRzICovCi0KLSNkZWZpbmUgUHlMb25nX1NISUZUICAgIDE1Ci0jZGVmaW5lIFB5TG9uZ19CQVNFICAgICAoKGRpZ2l0KTEgPDwgUHlMb25nX1NISUZUKQotI2RlZmluZSBQeUxvbmdfTUFTSyAgICAgKChpbnQpKFB5TG9uZ19CQVNFIC0gMSkpCit0eXBlZGVmIHNob3J0IHNkaWdpdDsgLyogc2lnbmVkIHZhcmlhbnQgb2YgZGlnaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB0d29kaWdpdHM7Cit0eXBlZGVmIGxvbmcgc3R3b2RpZ2l0czsgLyogc2lnbmVkIHZhcmlhbnQgb2YgdHdvZGlnaXRzICovCisjZGVmaW5lIFB5TG9uZ19TSElGVAkxNQorI2RlZmluZSBfUHlMb25nX0RFQ0lNQUxfU0hJRlQJNCAvKiBtYXgoZSBzdWNoIHRoYXQgMTAqKmUgZml0cyBpbiBhIGRpZ2l0KSAqLworI2RlZmluZSBfUHlMb25nX0RFQ0lNQUxfQkFTRQkoKGRpZ2l0KTEwMDAwKSAvKiAxMCAqKiBERUNJTUFMX1NISUZUICovCisjZWxzZQorI2Vycm9yICJQWUxPTkdfQklUU19JTl9ESUdJVCBzaG91bGQgYmUgMTUgb3IgMzAiCisjZW5kaWYKKyNkZWZpbmUgUHlMb25nX0JBU0UJKChkaWdpdCkxIDw8IFB5TG9uZ19TSElGVCkKKyNkZWZpbmUgUHlMb25nX01BU0sJKChkaWdpdCkoUHlMb25nX0JBU0UgLSAxKSkKIAogLyogYi93IGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi41ICovCiAjZGVmaW5lIFNISUZUCVB5TG9uZ19TSElGVApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9sb25nb2JqZWN0LmggYi9JbmNsdWRlL2xvbmdvYmplY3QuaAppbmRleCBmYTUxMWE3Li4yYjQwNDYxIDEwMDY0NAotLS0gYS9JbmNsdWRlL2xvbmdvYmplY3QuaAorKysgYi9JbmNsdWRlL2xvbmdvYmplY3QuaApAQCAtMjEsOSArMjEsMTEgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TaXplX3Qoc2l6ZV90KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QpOwogUHlBUElfRlVOQyhsb25nKSBQeUxvbmdfQXNMb25nKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhsb25nKSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19HZXRJbmZvKHZvaWQpOwogCiAvKiBGb3IgdXNlIGJ5IGludG9iamVjdC5jIG9ubHkgKi8KICNkZWZpbmUgX1B5TG9uZ19Bc1NzaXplX3QgUHlMb25nX0FzU3NpemVfdApAQCAtMzEsMTMgKzMzLDEzIEBACiAjZGVmaW5lIF9QeUxvbmdfRnJvbVNzaXplX3QgUHlMb25nX0Zyb21Tc2l6ZV90CiBQeUFQSV9EQVRBKGludCkgX1B5TG9uZ19EaWdpdFZhbHVlWzI1Nl07CiAKLS8qIF9QeUxvbmdfQXNTY2FsZWREb3VibGUgcmV0dXJucyBhIGRvdWJsZSB4IGFuZCBhbiBleHBvbmVudCBlIHN1Y2ggdGhhdAotICAgdGhlIHRydWUgdmFsdWUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB4ICogMioqKFNISUZUKmUpLiAgZSBpcyA+PSAwLgotICAgeCBpcyAwLjAgaWYgYW5kIG9ubHkgaWYgdGhlIGlucHV0IGlzIDAgKGluIHdoaWNoIGNhc2UsIGUgYW5kIHggYXJlIGJvdGgKLSAgIHplcm9lcykuICBPdmVyZmxvdyBpcyBpbXBvc3NpYmxlLiAgTm90ZSB0aGF0IHRoZSBleHBvbmVudCByZXR1cm5lZCBtdXN0Ci0gICBiZSBtdWx0aXBsaWVkIGJ5IFNISUZUISAgVGhlcmUgbWF5IG5vdCBiZSBlbm91Z2ggcm9vbSBpbiBhbiBpbnQgdG8gc3RvcmUKLSAgIGUqU0hJRlQgZGlyZWN0bHkuICovCi1QeUFQSV9GVU5DKGRvdWJsZSkgX1B5TG9uZ19Bc1NjYWxlZERvdWJsZShQeU9iamVjdCAqdnYsIGludCAqZSk7CisvKiBfUHlMb25nX0ZyZXhwIHJldHVybnMgYSBkb3VibGUgeCBhbmQgYW4gZXhwb25lbnQgZSBzdWNoIHRoYXQgdGhlCisgICB0cnVlIHZhbHVlIGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8geCAqIDIqKmUuICBlIGlzID49IDAuICB4IGlzCisgICAwLjAgaWYgYW5kIG9ubHkgaWYgdGhlIGlucHV0IGlzIDAgKGluIHdoaWNoIGNhc2UsIGUgYW5kIHggYXJlIGJvdGgKKyAgIHplcm9lcyk7IG90aGVyd2lzZSwgMC41IDw9IGFicyh4KSA8IDEuMC4gIE9uIG92ZXJmbG93LCB3aGljaCBpcworICAgcG9zc2libGUgaWYgdGhlIG51bWJlciBvZiBiaXRzIGRvZXNuJ3QgZml0IGludG8gYSBQeV9zc2l6ZV90LCBzZXRzCisgICBPdmVyZmxvd0Vycm9yIGFuZCByZXR1cm5zIC0xLjAgZm9yIHgsIDAgZm9yIGUuICovCitQeUFQSV9GVU5DKGRvdWJsZSkgX1B5TG9uZ19GcmV4cChQeUxvbmdPYmplY3QgKmEsIFB5X3NzaXplX3QgKmUpOwogCiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlMb25nX0FzRG91YmxlKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVZvaWRQdHIodm9pZCAqKTsKQEAgLTQ5LDYgKzUxLDcgQEAKIFB5QVBJX0ZVTkMoUFlfTE9OR19MT05HKSBQeUxvbmdfQXNMb25nTG9uZyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModW5zaWduZWQgUFlfTE9OR19MT05HKSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqLCBjaGFyICoqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tZW1vcnlvYmplY3QuaCBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwYjYyMQotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKQEAgLTAsMCArMSw3NCBAQAorLyogTWVtb3J5IHZpZXcgb2JqZWN0LiBJbiBQeXRob24gdGhpcyBpcyBhdmFpbGFibGUgYXMgIm1lbW9yeXZpZXciLiAqLworCisjaWZuZGVmIFB5X01FTU9SWU9CSkVDVF9ICisjZGVmaW5lIFB5X01FTU9SWU9CSkVDVF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeU1lbW9yeVZpZXdfVHlwZTsKKworI2RlZmluZSBQeU1lbW9yeVZpZXdfQ2hlY2sob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlNZW1vcnlWaWV3X1R5cGUpCisKKy8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgUHlfYnVmZmVyIG9mIGEgbWVtb3J5dmlldyBvYmplY3QuICovCisjZGVmaW5lIFB5TWVtb3J5Vmlld19HRVRfQlVGRkVSKG9wKSAoJigoUHlNZW1vcnlWaWV3T2JqZWN0ICopKG9wKSktPnZpZXcpCisvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBQeU9iamVjdCBmcm9tIHdoaWNoIG9yaWdpbmF0ZXMgYSBtZW1vcnl2aWV3IG9iamVjdC4gKi8KKyNkZWZpbmUgUHlNZW1vcnlWaWV3X0dFVF9CQVNFKG9wKSAoKChQeU1lbW9yeVZpZXdPYmplY3QgKikob3ApKS0+dmlldy5vYmopCisKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cyhQeU9iamVjdCAqYmFzZSwgCisJCQkJCQkgIGludCBidWZmZXJ0eXBlLCAKKwkJCQkJCSAgY2hhciBmb3J0KTsKKworICAgIC8qIFJldHVybiBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5IHJlcHJlc2VudGluZyB0aGUgYnVmZmVyCisgICAgICAgZnJvbSBhbiBvYmplY3QgaW4gYSBtZW1vcnkgdmlldyBvYmplY3QuICBJZiBhIGNvcHkgaXMgbWFkZSB0aGVuIHRoZQorICAgICAgIGJhc2Ugb2JqZWN0IGZvciB0aGUgbWVtb3J5IHZpZXcgd2lsbCBiZSBhICpuZXcqIGJ5dGVzIG9iamVjdC4gCisgICAgICAgCisgICAgICAgT3RoZXJ3aXNlLCB0aGUgYmFzZS1vYmplY3Qgd2lsbCBiZSB0aGUgb2JqZWN0IGl0c2VsZiBhbmQgbm8gCisgICAgICAgZGF0YS1jb3B5aW5nIHdpbGwgYmUgZG9uZS4gCisKKyAgICAgICBUaGUgYnVmZmVydHlwZSBhcmd1bWVudCBjYW4gYmUgUHlCVUZfUkVBRCwgUHlCVUZfV1JJVEUsCisgICAgICAgUHlCVUZfU0hBRE9XIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSByZXR1cm5lZCBidWZmZXIKKyAgICAgICBzaG91bGQgYmUgUkVBRE9OTFksIFdSSVRBQkxFLCBvciBzZXQgdG8gdXBkYXRlIHRoZQorICAgICAgIG9yaWdpbmFsIGJ1ZmZlciBpZiBhIGNvcHkgbXVzdCBiZSBtYWRlLiAgSWYgYnVmZmVydHlwZSBpcworICAgICAgIFB5QlVGX1dSSVRFIGFuZCB0aGUgYnVmZmVyIGlzIG5vdCBjb250aWd1b3VzIGFuIGVycm9yIHdpbGwKKyAgICAgICBiZSByYWlzZWQuICBJbiB0aGlzIGNpcmN1bXN0YW5jZSwgdGhlIHVzZXIgY2FuIHVzZQorICAgICAgIFB5QlVGX1NIQURPVyB0byBlbnN1cmUgdGhhdCBhIGEgd3JpdGFibGUgdGVtcG9yYXJ5CisgICAgICAgY29udGlndW91cyBidWZmZXIgaXMgcmV0dXJuZWQuICBUaGUgY29udGVudHMgb2YgdGhpcworICAgICAgIGNvbnRpZ3VvdXMgYnVmZmVyIHdpbGwgYmUgY29waWVkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwKKyAgICAgICBvYmplY3QgYWZ0ZXIgdGhlIG1lbW9yeXZpZXcgb2JqZWN0IGlzIGRlbGV0ZWQgYXMgbG9uZyBhcworICAgICAgIHRoZSBvcmlnaW5hbCBvYmplY3QgaXMgd3JpdGFibGUgYW5kIGFsbG93cyBzZXR0aW5nIGFuCisgICAgICAgZXhjbHVzaXZlIHdyaXRlIGxvY2suIElmIHRoaXMgaXMgbm90IGFsbG93ZWQgYnkgdGhlCisgICAgICAgb3JpZ2luYWwgb2JqZWN0LCB0aGVuIGEgQnVmZmVyRXJyb3IgaXMgcmFpc2VkLgorICAgICAgIAorICAgICAgIElmIHRoZSBvYmplY3QgaXMgbXVsdGktZGltZW5zaW9uYWwgYW5kIGlmIGZvcnRyYW4gaXMgJ0YnLAorICAgICAgIHRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIHVuZGVybHlpbmcgYXJyYXkgd2lsbCB2YXJ5IHRoZQorICAgICAgIGZhc3Rlc3QgaW4gdGhlIGJ1ZmZlci4gIElmIGZvcnRyYW4gaXMgJ0MnLCB0aGVuIHRoZSBsYXN0CisgICAgICAgZGltZW5zaW9uIHdpbGwgdmFyeSB0aGUgZmFzdGVzdCAoQy1zdHlsZSBjb250aWd1b3VzKS4gIElmCisgICAgICAgZm9ydHJhbiBpcyAnQScsIHRoZW4gaXQgZG9lcyBub3QgbWF0dGVyIGFuZCB5b3Ugd2lsbCBnZXQKKyAgICAgICB3aGF0ZXZlciB0aGUgb2JqZWN0IGRlY2lkZXMgaXMgbW9yZSBlZmZpY2llbnQuICAKKworICAgICAgIEEgbmV3IHJlZmVyZW5jZSBpcyByZXR1cm5lZCB0aGF0IG11c3QgYmUgREVDUkVGJ2Qgd2hlbiBmaW5pc2hlZC4KKyAgICAqLworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KFB5T2JqZWN0ICpiYXNlKTsKKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcihQeV9idWZmZXIgKmluZm8pOworICAgIC8qIGNyZWF0ZSBuZXcgaWYgYnVmcHRyIGlzIE5VTEwgCisgICAgICAgIHdpbGwgYmUgYSBuZXcgYnl0ZXNvYmplY3QgaW4gYmFzZSAqLworCisKKy8qIFRoZSBzdHJ1Y3QgaXMgZGVjbGFyZWQgaGVyZSBzbyB0aGF0IG1hY3JvcyBjYW4gd29yaywgYnV0IGl0IHNob3VsZG4ndAorICAgYmUgY29uc2lkZXJlZCBwdWJsaWMuIERvbid0IGFjY2VzcyB0aG9zZSBmaWVsZHMgZGlyZWN0bHksIHVzZSB0aGUgbWFjcm9zCisgICBhbmQgZnVuY3Rpb25zIGluc3RlYWQhICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICpiYXNlOworICAgIFB5X2J1ZmZlciB2aWV3OworfSBQeU1lbW9yeVZpZXdPYmplY3Q7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiAhUHlfTUVNT1JZT0JKRUNUX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IDFiYjRkNzguLmIzNjg5NDYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtMTU5LDExICsxNTksMTEgQEAKIHR5cGVkZWYgUHlfc3NpemVfdCAoKnNlZ2NvdW50cHJvYykoUHlPYmplY3QgKiwgUHlfc3NpemVfdCAqKTsKIHR5cGVkZWYgUHlfc3NpemVfdCAoKmNoYXJidWZmZXJwcm9jKShQeU9iamVjdCAqLCBQeV9zc2l6ZV90LCBjaGFyICoqKTsKIAotLyogUHkzayBidWZmZXIgaW50ZXJmYWNlICovCiAKKy8qIFB5M2sgYnVmZmVyIGludGVyZmFjZSAqLwogdHlwZWRlZiBzdHJ1Y3QgYnVmZmVyaW5mbyB7CiAgICAgdm9pZCAqYnVmOwotICAgIFB5T2JqZWN0ICpvYmo7ICAgICAgICAvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KKyAgICBQeU9iamVjdCAqb2JqOyAgICAgICAgLyogb3duZWQgcmVmZXJlbmNlICovCiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlfc3NpemVfdCBpdGVtc2l6ZTsgIC8qIFRoaXMgaXMgUHlfc3NpemVfdCBzbyBpdCBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlZCB0byBieSBzdHJpZGVzIGluIHNpbXBsZSBjYXNlLiovCkBAIC0xNzMsNiArMTczLDggQEAKICAgICBQeV9zc2l6ZV90ICpzaGFwZTsKICAgICBQeV9zc2l6ZV90ICpzdHJpZGVzOwogICAgIFB5X3NzaXplX3QgKnN1Ym9mZnNldHM7CisgICAgUHlfc3NpemVfdCBzbWFsbHRhYmxlWzJdOyAgLyogc3RhdGljIHN0b3JlIGZvciBzaGFwZSBhbmQgc3RyaWRlcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm8tZGltZW5zaW9uYWwgYnVmZmVycy4gKi8KICAgICB2b2lkICppbnRlcm5hbDsKIH0gUHlfYnVmZmVyOwogCkBAIC00NDksNiArNDUxLDcgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlUeXBlX0dlbmVyaWNOZXcoUHlUeXBlT2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUeXBlX0xvb2t1cChQeVR5cGVPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKiopOwogUHlBUElfRlVOQyh1bnNpZ25lZCBpbnQpIFB5VHlwZV9DbGVhckNhY2hlKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVR5cGVfTW9kaWZpZWQoUHlUeXBlT2JqZWN0ICopOwogCkBAIC00NzMsNiArNDc2LDcgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9IYXNBdHRyKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKikgX1B5T2JqZWN0X0dldERpY3RQdHIoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X1NlbGZJdGVyKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfTmV4dE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9HZW5lcmljU2V0QXR0cihQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwpAQCAtNDg4LDYgKzQ5MiwxMyBAQAogCiAvKiBBIHNsb3QgZnVuY3Rpb24gd2hvc2UgYWRkcmVzcyB3ZSBuZWVkIHRvIGNvbXBhcmUgKi8KIGV4dGVybiBpbnQgX1B5T2JqZWN0X1Nsb3RDb21wYXJlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworLyogU2FtZSBhcyBQeU9iamVjdF9HZW5lcmlje0dldCxTZXR9QXR0ciwgYnV0IHBhc3NpbmcgdGhlIGF0dHJpYnV0ZXMKKyAgIGRpY3QgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKQorX1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkKK19QeU9iamVjdF9HZW5lcmljU2V0QXR0cldpdGhEaWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAogCiAvKiBQeU9iamVjdF9EaXIob2JqKSBhY3RzIGxpa2UgUHl0aG9uIF9fYnVpbHRpbl9fLmRpcihvYmopLCByZXR1cm5pbmcgYQpAQCAtNzQ2LDExICs3NTcsMTMgQEAKICAgICAoKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250KyspCiAKICNkZWZpbmUgUHlfREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChfUHlfREVDX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgICAgICBcCi0gICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX1B5X0RlYWxsb2MoKFB5T2JqZWN0ICopKG9wKSkKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX1B5X0RFQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCisgICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9QeV9EZWFsbG9jKChQeU9iamVjdCAqKShvcCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAvKiBTYWZlbHkgZGVjcmVmIGBvcGAgYW5kIHNldCBgb3BgIHRvIE5VTEwsIGVzcGVjaWFsbHkgdXNlZnVsIGluIHRwX2NsZWFyCiAgKiBhbmQgdHBfZGVhbGxvYyBpbXBsZW1lbnRhdG9ucy4KQEAgLTc5Niw4ICs4MDksOCBAQAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGlmICgob3ApID09IE5VTEwpIDsgZWxzZSBQeV9JTkNSRUYob3ApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGlmICgob3ApID09IE5VTEwpIDsgZWxzZSBQeV9ERUNSRUYob3ApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCAxOWJlYjc2Li41NWU4M2VjIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtMTA4LDYgKzEwOCwxMyBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwogUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdNYWxsb2NTdGF0cyh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBhcGksIHNpemVfdCBuYnl0ZXMpOworUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlQXBpKGNoYXIgYXBpLCB2b2lkICpwKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcyk7CitQeUFQSV9GVU5DKHZvaWQgKikgX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5TWVtX0RlYnVnRnJlZSh2b2lkICpwKTsKICNkZWZpbmUgUHlPYmplY3RfTUFMTE9DICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X01hbGxvYyAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBfUHlPYmplY3RfRGVidWdSZWFsbG9jCkBAIC0yODUsNiArMjkyLDE3IEBACiAgICAgZy0+Z2MuZ2NfbmV4dCA9IE5VTEw7IFwKICAgICB9IHdoaWxlICgwKTsKIAorLyogVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGN1cnJlbnRseSB0cmFja2VkIGJ5IHRoZSBHQy4gKi8KKyNkZWZpbmUgX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQobykgXAorICAgICgoX1B5X0FTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCkKKworLyogVHJ1ZSBpZiB0aGUgb2JqZWN0IG1heSBiZSB0cmFja2VkIGJ5IHRoZSBHQyBpbiB0aGUgZnV0dXJlLCBvciBhbHJlYWR5IGlzLgorICAgVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGltcGxlbWVudCBzb21lIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIF9QeU9iamVjdF9HQ19NQVlfQkVfVFJBQ0tFRChvYmopIFwKKyAgICAoUHlPYmplY3RfSVNfR0Mob2JqKSAmJiBcCisgICAgICAgICghUHlUdXBsZV9DaGVja0V4YWN0KG9iaikgfHwgX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQob2JqKSkpCisKKwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfR0NfTWFsbG9jKHNpemVfdCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9HQ19OZXcoUHlUeXBlT2JqZWN0ICopOwogUHlBUElfRlVOQyhQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfR0NfTmV3VmFyKFB5VHlwZU9iamVjdCAqLCBQeV9zc2l6ZV90KTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb3Bjb2RlLmggYi9JbmNsdWRlL29wY29kZS5oCmluZGV4IDlmMjBiNTYuLjk3NjQxMDkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb3Bjb2RlLmgKKysrIGIvSW5jbHVkZS9vcGNvZGUuaApAQCAtMjIsNyArMjIsNiBAQAogCiAjZGVmaW5lIFVOQVJZX0lOVkVSVAkxNQogCi0jZGVmaW5lIExJU1RfQVBQRU5ECTE4CiAjZGVmaW5lIEJJTkFSWV9QT1dFUgkxOQogCiAjZGVmaW5lIEJJTkFSWV9NVUxUSVBMWQkyMApAQCAtODksNiArODgsNyBAQAogI2RlZmluZSBERUxFVEVfTkFNRQk5MQkvKiAiIiAqLwogI2RlZmluZSBVTlBBQ0tfU0VRVUVOQ0UJOTIJLyogTnVtYmVyIG9mIHNlcXVlbmNlIGl0ZW1zICovCiAjZGVmaW5lIEZPUl9JVEVSCTkzCisjZGVmaW5lIExJU1RfQVBQRU5ECTk0CiAKICNkZWZpbmUgU1RPUkVfQVRUUgk5NQkvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KICNkZWZpbmUgREVMRVRFX0FUVFIJOTYJLyogIiIgKi8KQEAgLTk5LDE2ICs5OSwyMCBAQAogI2RlZmluZSBMT0FEX05BTUUJMTAxCS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwogI2RlZmluZSBCVUlMRF9UVVBMRQkxMDIJLyogTnVtYmVyIG9mIHR1cGxlIGl0ZW1zICovCiAjZGVmaW5lIEJVSUxEX0xJU1QJMTAzCS8qIE51bWJlciBvZiBsaXN0IGl0ZW1zICovCi0jZGVmaW5lIEJVSUxEX01BUAkxMDQJLyogQWx3YXlzIHplcm8gZm9yIG5vdyAqLwotI2RlZmluZSBMT0FEX0FUVFIJMTA1CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwotI2RlZmluZSBDT01QQVJFX09QCTEwNgkvKiBDb21wYXJpc29uIG9wZXJhdG9yICovCi0jZGVmaW5lIElNUE9SVF9OQU1FCTEwNwkvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KLSNkZWZpbmUgSU1QT1JUX0ZST00JMTA4CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwotCisjZGVmaW5lIEJVSUxEX1NFVAkxMDQgICAgIC8qIE51bWJlciBvZiBzZXQgaXRlbXMgKi8KKyNkZWZpbmUgQlVJTERfTUFQCTEwNQkvKiBBbHdheXMgemVybyBmb3Igbm93ICovCisjZGVmaW5lIExPQURfQVRUUgkxMDYJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCisjZGVmaW5lIENPTVBBUkVfT1AJMTA3CS8qIENvbXBhcmlzb24gb3BlcmF0b3IgKi8KKyNkZWZpbmUgSU1QT1JUX05BTUUJMTA4CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLworI2RlZmluZSBJTVBPUlRfRlJPTQkxMDkJLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCiAjZGVmaW5lIEpVTVBfRk9SV0FSRAkxMTAJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgKi8KLSNkZWZpbmUgSlVNUF9JRl9GQUxTRQkxMTEJLyogIiIgKi8KLSNkZWZpbmUgSlVNUF9JRl9UUlVFCTExMgkvKiAiIiAqLwotI2RlZmluZSBKVU1QX0FCU09MVVRFCTExMwkvKiBUYXJnZXQgYnl0ZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgY29kZSAqLworCisjZGVmaW5lIEpVTVBfSUZfRkFMU0VfT1JfUE9QIDExMSAvKiBUYXJnZXQgYnl0ZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgKi8KKyNkZWZpbmUgSlVNUF9JRl9UUlVFX09SX1BPUCAxMTIJLyogIiIgKi8KKyNkZWZpbmUgSlVNUF9BQlNPTFVURQkxMTMJLyogIiIgKi8KKyNkZWZpbmUgUE9QX0pVTVBfSUZfRkFMU0UgMTE0CS8qICIiICovCisjZGVmaW5lIFBPUF9KVU1QX0lGX1RSVUUgMTE1CS8qICIiICovCiAKICNkZWZpbmUgTE9BRF9HTE9CQUwJMTE2CS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwogCkBAIC0xMzgsOCArMTQyLDEzIEBACiAjZGVmaW5lIENBTExfRlVOQ1RJT05fS1cgICAgICAgICAgIDE0MQkvKiAjYXJncyArICgja3dhcmdzPDw4KSAqLwogI2RlZmluZSBDQUxMX0ZVTkNUSU9OX1ZBUl9LVyAgICAgICAxNDIJLyogI2FyZ3MgKyAoI2t3YXJnczw8OCkgKi8KIAorI2RlZmluZSBTRVRVUF9XSVRIIDE0MworCiAvKiBTdXBwb3J0IGZvciBvcGFyZ3MgbW9yZSB0aGFuIDE2IGJpdHMgbG9uZyAqLwotI2RlZmluZSBFWFRFTkRFRF9BUkcgIDE0MworI2RlZmluZSBFWFRFTkRFRF9BUkcgIDE0NQorCisjZGVmaW5lIFNFVF9BREQgICAgICAgICAxNDYKKyNkZWZpbmUgTUFQX0FERCAgICAgICAgIDE0NwogCiAKIGVudW0gY21wX29wIHtQeUNtcF9MVD1QeV9MVCwgUHlDbXBfTEU9UHlfTEUsIFB5Q21wX0VRPVB5X0VRLCBQeUNtcF9ORT1QeV9ORSwgUHlDbXBfR1Q9UHlfR1QsIFB5Q21wX0dFPVB5X0dFLApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9wYXRjaGxldmVsLmggYi9JbmNsdWRlL3BhdGNobGV2ZWwuaAppbmRleCAzOTUyZDA3Li40MmQ1Y2VkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhdGNobGV2ZWwuaAorKysgYi9JbmNsdWRlL3BhdGNobGV2ZWwuaApAQCAtMjEsMTMgKzIxLDEzIEBACiAvKiBWZXJzaW9uIHBhcnNlZCBvdXQgaW50byBudW1lcmljIHZhbHVlcyAqLwogLyotLXN0YXJ0IGNvbnN0YW50cy0tKi8KICNkZWZpbmUgUFlfTUFKT1JfVkVSU0lPTgkyCi0jZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNgotI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTYKKyNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgk3CisjZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JMQogI2RlZmluZSBQWV9SRUxFQVNFX0xFVkVMCVBZX1JFTEVBU0VfTEVWRUxfRklOQUwKICNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJMAogCiAvKiBWZXJzaW9uIGFzIGEgc3RyaW5nICovCi0jZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjIuNi42KyIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMi43LjErIgogLyotLWVuZCBjb25zdGFudHMtLSovCiAKIC8qIFN1YnZlcnNpb24gUmV2aXNpb24gbnVtYmVyIG9mIHRoaXMgZmlsZSAobm90IG9mIHRoZSByZXBvc2l0b3J5KSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weV9jdXJzZXMuaCBiL0luY2x1ZGUvcHlfY3Vyc2VzLmgKaW5kZXggZTRjMGE2ZS4uNjU3ODE2YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weV9jdXJzZXMuaAorKysgYi9JbmNsdWRlL3B5X2N1cnNlcy5oCkBAIC04MCw2ICs4MCw5IEBACiAKICNkZWZpbmUgUHlDdXJzZXNXaW5kb3dfQ2hlY2sodikJIChQeV9UWVBFKHYpID09ICZQeUN1cnNlc1dpbmRvd19UeXBlKQogCisjZGVmaW5lIFB5Q3Vyc2VzX0NBUFNVTEVfTkFNRSAiX2N1cnNlcy5fQ19BUEkiCisKKwogI2lmZGVmIENVUlNFU19NT0RVTEUKIC8qIFRoaXMgc2VjdGlvbiBpcyB1c2VkIHdoZW4gY29tcGlsaW5nIF9jdXJzZXNtb2R1bGUuYyAqLwogCkBAIC05NCwxNiArOTcsOCBAQAogI2RlZmluZSBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3Ige2lmICghICgoaW50ICgqKSh2b2lkKSlQeUN1cnNlc19BUElbM10pICgpICkgcmV0dXJuIE5VTEw7fQogCiAjZGVmaW5lIGltcG9ydF9jdXJzZXMoKSBcCi17IFwKLSAgUHlPYmplY3QgKm1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2soIl9jdXJzZXMiKTsgXAotICBpZiAobW9kdWxlICE9IE5VTEwpIHsgXAotICAgIFB5T2JqZWN0ICptb2R1bGVfZGljdCA9IFB5TW9kdWxlX0dldERpY3QobW9kdWxlKTsgXAotICAgIFB5T2JqZWN0ICpjX2FwaV9vYmplY3QgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVfZGljdCwgIl9DX0FQSSIpOyBcCi0gICAgaWYgKFB5Q09iamVjdF9DaGVjayhjX2FwaV9vYmplY3QpKSB7IFwKLSAgICAgIFB5Q3Vyc2VzX0FQSSA9ICh2b2lkICoqKVB5Q09iamVjdF9Bc1ZvaWRQdHIoY19hcGlfb2JqZWN0KTsgXAotICAgIH0gXAotICB9IFwKLX0KKyAgICBQeUN1cnNlc19BUEkgPSAodm9pZCAqKilQeUNhcHN1bGVfSW1wb3J0KFB5Q3Vyc2VzX0NBUFNVTEVfTkFNRSwgMSk7CisKICNlbmRpZgogCiAvKiBnZW5lcmFsIGVycm9yIG1lc3NhZ2VzICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5Y2Fwc3VsZS5oIGIvSW5jbHVkZS9weWNhcHN1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY4MmZjCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWNhcHN1bGUuaApAQCAtMCwwICsxLDU2IEBACisKKy8qIENhcHN1bGUgb2JqZWN0cyBsZXQgeW91IHdyYXAgYSBDICJ2b2lkICoiIHBvaW50ZXIgaW4gYSBQeXRob24KKyAgIG9iamVjdC4gIFRoZXkncmUgYSB3YXkgb2YgcGFzc2luZyBkYXRhIHRocm91Z2ggdGhlIFB5dGhvbiBpbnRlcnByZXRlcgorICAgd2l0aG91dCBjcmVhdGluZyB5b3VyIG93biBjdXN0b20gdHlwZS4KKworICAgQ2Fwc3VsZXMgYXJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBleHRlbnNpb24gbW9kdWxlcy4KKyAgIFRoZXkgcHJvdmlkZSBhIHdheSBmb3IgYW4gZXh0ZW5zaW9uIG1vZHVsZSB0byBleHBvcnQgYSBDIGludGVyZmFjZQorICAgdG8gb3RoZXIgZXh0ZW5zaW9uIG1vZHVsZXMsIHNvIHRoYXQgZXh0ZW5zaW9uIG1vZHVsZXMgY2FuIHVzZSB0aGUKKyAgIFB5dGhvbiBpbXBvcnQgbWVjaGFuaXNtIHRvIGxpbmsgdG8gb25lIGFub3RoZXIuCisKKyAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlICJjLWFwaS9jYXBzdWxlLmh0bWwiIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbi4KKyovCisKKyNpZm5kZWYgUHlfQ0FQU1VMRV9ICisjZGVmaW5lIFB5X0NBUFNVTEVfSAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlDYXBzdWxlX1R5cGU7CisKK3R5cGVkZWYgdm9pZCAoKlB5Q2Fwc3VsZV9EZXN0cnVjdG9yKShQeU9iamVjdCAqKTsKKworI2RlZmluZSBQeUNhcHN1bGVfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeUNhcHN1bGVfVHlwZSkKKworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q2Fwc3VsZV9OZXcoCisgICAgdm9pZCAqcG9pbnRlciwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpOworCitQeUFQSV9GVU5DKHZvaWQgKikgUHlDYXBzdWxlX0dldFBvaW50ZXIoUHlPYmplY3QgKmNhcHN1bGUsIGNvbnN0IGNoYXIgKm5hbWUpOworCitQeUFQSV9GVU5DKFB5Q2Fwc3VsZV9EZXN0cnVjdG9yKSBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSk7CisKK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeUNhcHN1bGVfR2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSk7CisKK1B5QVBJX0ZVTkModm9pZCAqKSBQeUNhcHN1bGVfR2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUNhcHN1bGVfSXNWYWxpZChQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUNhcHN1bGVfU2V0UG9pbnRlcihQeU9iamVjdCAqY2Fwc3VsZSwgdm9pZCAqcG9pbnRlcik7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSwgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3Rvcik7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUNhcHN1bGVfU2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUNhcHN1bGVfU2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSwgdm9pZCAqY29udGV4dCk7CisKK1B5QVBJX0ZVTkModm9pZCAqKSBQeUNhcHN1bGVfSW1wb3J0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBub19ibG9jayk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogIVB5X0NBUFNVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWN0eXBlLmggYi9JbmNsdWRlL3B5Y3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNjNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWN0eXBlLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBQWUNUWVBFX0gKKyNkZWZpbmUgUFlDVFlQRV9ICisKKyNkZWZpbmUgUFlfQ1RGX0xPV0VSICAweDAxCisjZGVmaW5lIFBZX0NURl9VUFBFUiAgMHgwMgorI2RlZmluZSBQWV9DVEZfQUxQSEEgIChQWV9DVEZfTE9XRVJ8UFlfQ1RGX1VQUEVSKQorI2RlZmluZSBQWV9DVEZfRElHSVQgIDB4MDQKKyNkZWZpbmUgUFlfQ1RGX0FMTlVNICAoUFlfQ1RGX0FMUEhBfFBZX0NURl9ESUdJVCkKKyNkZWZpbmUgUFlfQ1RGX1NQQUNFICAweDA4CisjZGVmaW5lIFBZX0NURl9YRElHSVQgMHgxMAorCitleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IF9QeV9jdHlwZV90YWJsZVsyNTZdOworCisvKiBVbmxpa2UgdGhlaXIgQyBjb3VudGVycGFydHMsIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3QgbWVhbnQgdG8KKyAqIGhhbmRsZSBhbiBpbnQgd2l0aCBhbnkgb2YgdGhlIHZhbHVlcyBbRU9GLCAwLVVDSEFSX01BWF0uIFRoZSBhcmd1bWVudAorICogbXVzdCBiZSBhIHNpZ25lZC91bnNpZ25lZCBjaGFyLiAqLworI2RlZmluZSBQeV9JU0xPV0VSKGMpICAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9MT1dFUikKKyNkZWZpbmUgUHlfSVNVUFBFUihjKSAgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBQWV9DVEZfVVBQRVIpCisjZGVmaW5lIFB5X0lTQUxQSEEoYykgIChfUHlfY3R5cGVfdGFibGVbUHlfQ0hBUk1BU0soYyldICYgUFlfQ1RGX0FMUEhBKQorI2RlZmluZSBQeV9JU0RJR0lUKGMpICAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9ESUdJVCkKKyNkZWZpbmUgUHlfSVNYRElHSVQoYykgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBQWV9DVEZfWERJR0lUKQorI2RlZmluZSBQeV9JU0FMTlVNKGMpICAoX1B5X2N0eXBlX3RhYmxlW1B5X0NIQVJNQVNLKGMpXSAmIFBZX0NURl9BTE5VTSkKKyNkZWZpbmUgUHlfSVNTUEFDRShjKSAgKF9QeV9jdHlwZV90YWJsZVtQeV9DSEFSTUFTSyhjKV0gJiBQWV9DVEZfU1BBQ0UpCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b2xvd2VyWzI1Nl07CitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG91cHBlclsyNTZdOworCisjZGVmaW5lIFB5X1RPTE9XRVIoYykgKF9QeV9jdHlwZV90b2xvd2VyW1B5X0NIQVJNQVNLKGMpXSkKKyNkZWZpbmUgUHlfVE9VUFBFUihjKSAoX1B5X2N0eXBlX3RvdXBwZXJbUHlfQ0hBUk1BU0soYyldKQorCisjZW5kaWYgLyogIVBZQ1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWVycm9ycy5oIGIvSW5jbHVkZS9weWVycm9ycy5oCmluZGV4IGU0ZjVkZjYuLmRiZTNiZmEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHllcnJvcnMuaAorKysgYi9JbmNsdWRlL3B5ZXJyb3JzLmgKQEAgLTE4NSwxMSArMTg1LDEyIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKiwgY2hhciAqKTsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKAorICAgIFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKik7CisjaWZkZWYgTVNfV0lORE9XUwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoVW5pY29kZUZpbGVuYW1lKAotICAgIFB5T2JqZWN0ICosIFB5X1VOSUNPREUgKik7Ci0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisgICAgUHlPYmplY3QgKiwgY29uc3QgUHlfVU5JQ09ERSAqKTsKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfRm9ybWF0KFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAgUHlfR0NDX0FUVFJJQlVURSgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKQEAgLTE5OSwxOSArMjAwLDE1IEBACiAgICAgaW50LCBjb25zdCBjaGFyICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgKICAgICBpbnQsIGNvbnN0IGNoYXIgKik7Ci0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZSgKICAgICBpbnQsIGNvbnN0IFB5X1VOSUNPREUgKik7Ci0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKixpbnQsIGNvbnN0IGNoYXIgKik7Ci0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZSgKICAgICBQeU9iamVjdCAqLGludCwgY29uc3QgUHlfVU5JQ09ERSAqKTsKLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlPYmplY3QgKiwgaW50KTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKQEAgLTIyMyw4ICsyMjAsMTAgQEAKICNkZWZpbmUgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCkgX1B5RXJyX0JhZEludGVybmFsQ2FsbChfX0ZJTEVfXywgX19MSU5FX18pCiAKIC8qIEZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBleGNlcHRpb24gKi8KLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfTmV3RXhjZXB0aW9uKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGljdCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX05ld0V4Y2VwdGlvbigKKyAgICBjaGFyICpuYW1lLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jKAorICAgIGNoYXIgKm5hbWUsIGNoYXIgKmRvYywgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICopOwogCiAvKiBJbiBzaWdjaGVjay5jIG9yIHNpZ25hbG1vZHVsZS5jICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXhwYXQuaCBiL0luY2x1ZGUvcHlleHBhdC5oCmluZGV4IDFlNzlmNGUuLjUzNDBlZjUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlleHBhdC5oCisrKyBiL0luY2x1ZGUvcHlleHBhdC5oCkBAIC00LDYgKzQsNyBAQAogLyogbm90ZTogeW91IG11c3QgaW1wb3J0IGV4cGF0LmggYmVmb3JlIGltcG9ydGluZyB0aGlzIG1vZHVsZSEgKi8KIAogI2RlZmluZSBQeUV4cGF0X0NBUElfTUFHSUMgICJweWV4cGF0LmV4cGF0X0NBUEkgMS4wIgorI2RlZmluZSBQeUV4cGF0X0NBUFNVTEVfTkFNRSAicHlleHBhdC5leHBhdF9DQVBJIgogCiBzdHJ1Y3QgUHlFeHBhdF9DQVBJIAogewpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1hY2NvbmZpZy5oIGIvSW5jbHVkZS9weW1hY2NvbmZpZy5oCmluZGV4IGZlM2E2ZGUuLjZkNGE5NzEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltYWNjb25maWcuaAorKysgYi9JbmNsdWRlL3B5bWFjY29uZmlnLmgKQEAgLTE2LDcgKzE2LDEzIEBACiAjIHVuZGVmIFNJWkVPRl9USU1FX1QKICMgdW5kZWYgU0laRU9GX1ZPSURfUAogIyB1bmRlZiBTSVpFT0ZfX0JPT0wKKyMgdW5kZWYgU0laRU9GX1VJTlRQVFJfVAorIyB1bmRlZiBTSVpFT0ZfUFRIUkVBRF9UCiAjIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyB1bmRlZiBET1VCTEVfSVNfQVJNX01JWEVEX0VORElBTl9JRUVFNzU0CisjIHVuZGVmIERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQKKyMgdW5kZWYgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NAorIyB1bmRlZiBIQVZFX0dDQ19BU01fRk9SX1g4NwogCiAjICAgIHVuZGVmIFZBX0xJU1RfSVNfQVJSQVkKICMgICAgaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKQpAQCAtMzcsNiArNDMsOCBAQAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9TSVpFX1QgICAgICAgICAgIDgKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfVElNRV9UICAgICAgICAgICA4CiAjICAgICAgICBkZWZpbmUgU0laRU9GX1ZPSURfUCAgICAgICAgICAgOAorIyAgICAgICAgZGVmaW5lIFNJWkVPRl9VSU5UUFRSX1QgICAgICAgIDgKKyMgICAgICAgIGRlZmluZSBTSVpFT0ZfUFRIUkVBRF9UICAgICAgICA4CiAjICAgIGVsc2UKICMgICAgICAgIGlmZGVmIF9fcHBjX18KICMgICAgICAgICAgIGRlZmluZSBTSVpFT0ZfX0JPT0wgICAgICAgICA0CkBAIC00OCw2ICs1Niw4IEBACiAjICAgICAgICBkZWZpbmUgU0laRU9GX1NJWkVfVCAgICAgICAgICAgNAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgICAgICAgICAgIDQKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICA0CisjICAgICAgICBkZWZpbmUgU0laRU9GX1VJTlRQVFJfVCAgICAgICAgNAorIyAgICAgICAgZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgICAgICAgIDQKICMgICAgZW5kaWYKIAogIyAgICBpZiBkZWZpbmVkKF9fTFA2NF9fKQpAQCAtNjUsOCArNzUsMTUgQEAKIAogI2lmZGVmIF9fQklHX0VORElBTl9fCiAjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjZGVmaW5lIERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQKKyNlbHNlCisjZGVmaW5lIERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQKICNlbmRpZiAvKiBfX0JJR19FTkRJQU4gKi8KIAorI2lmZGVmIF9faTM4Nl9fCisjIGRlZmluZSBIQVZFX0dDQ19BU01fRk9SX1g4NworI2VuZGlmCisKICAgICAvKgogICAgICAqIFRoZSBkZWZpbml0aW9uIGluIHB5Y29uZmlnLmggaXMgb25seSB2YWxpZCBvbiB0aGUgT1MgcmVsZWFzZQogICAgICAqIHdoZXJlIGNvbmZpZ3VyZSByYW4gb24gYW5kIG5vdCBuZWNlc3NhcmlseSBmb3IgYWxsIHN5c3RlbXMgd2hlcmUKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHltYXRoLmggYi9JbmNsdWRlL3B5bWF0aC5oCmluZGV4IDZhZDE3NGQuLmUzY2YyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltYXRoLmgKKysrIGIvSW5jbHVkZS9weW1hdGguaApAQCAtMywxOCArMywxNCBAQAogCiAjaW5jbHVkZSAicHljb25maWcuaCIgLyogaW5jbHVkZSBmb3IgZGVmaW5lcyAqLwogCi0jaWZkZWYgSEFWRV9TVERJTlRfSAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogU3ltYm9scyBhbmQgbWFjcm9zIHRvIHN1cHBseSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbnRlcmZhY2VzIHRvIG1hdGhlbWF0aWNhbAogZnVuY3Rpb25zIGFuZCBjb25zdGFudHMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBQeXRob24gcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIGZvciBjb3B5c2lnbiwgYWNvc2gsIGFzaW5oLCBhdGFuaCwgCi0gKiBsb2cxcCBhbmQgaHlwb3QgaW4gUHl0aG9uL3B5bWF0aC5jIGp1c3QgaW4gY2FzZSB5b3VyIG1hdGggbGlicmFyeSBkb2Vzbid0Ci0gKiBwcm92aWRlIHRoZSBmdW5jdGlvbnMuCisvKiBQeXRob24gcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIGZvciBjb3B5c2lnbiwgcm91bmQgYW5kIGh5cG90IGluCisgKiBQeXRob24vcHltYXRoLmMganVzdCBpbiBjYXNlIHlvdXIgbWF0aCBsaWJyYXJ5IGRvZXNuJ3QgcHJvdmlkZSB0aGUKKyAqIGZ1bmN0aW9ucy4KICAqCiAgKk5vdGU6IFBDL3B5Y29uZmlnLmggZGVmaW5lcyBjb3B5c2lnbiBhcyBfY29weXNpZ24KICAqLwpAQCAtMjIsMjAgKzE4LDggQEAKIGV4dGVybiBkb3VibGUgY29weXNpZ24oZG91YmxlLCBkb3VibGUpOwogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9BQ09TSAotZXh0ZXJuIGRvdWJsZSBhY29zaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9BU0lOSAotZXh0ZXJuIGRvdWJsZSBhc2luaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9BVEFOSAotZXh0ZXJuIGRvdWJsZSBhdGFuaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9MT0cxUAotZXh0ZXJuIGRvdWJsZSBsb2cxcChkb3VibGUpOworI2lmbmRlZiBIQVZFX1JPVU5ECitleHRlcm4gZG91YmxlIHJvdW5kKGRvdWJsZSk7CiAjZW5kaWYKIAogI2lmbmRlZiBIQVZFX0hZUE9UCkBAIC05Miw2ICs3NiwxMSBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZkZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKK1B5QVBJX0ZVTkModW5zaWduZWQgc2hvcnQpIF9QeV9nZXRfMzg3Y29udHJvbHdvcmQodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9zZXRfMzg3Y29udHJvbHdvcmQodW5zaWduZWQgc2hvcnQpOworI2VuZGlmCisKIC8qIFB5X0lTX05BTihYKQogICogUmV0dXJuIDEgaWYgZmxvYXQgb3IgZG91YmxlIGFyZyBpcyBhIE5hTiwgZWxzZSAwLgogICogQ2F1dGlvbjoKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHltZW0uaCBiL0luY2x1ZGUvcHltZW0uaAppbmRleCBjODgwMWJiLi4xMGI1YmVhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5bWVtLmgKKysrIGIvSW5jbHVkZS9weW1lbS5oCkBAIC01OSw5ICs1OSw5IEBACiAvKiBNYWNyb3MuICovCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKIC8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCVB5T2JqZWN0X01BTExPQwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlQeU9iamVjdF9SRUFMTE9DCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCVB5T2JqZWN0X0ZSRUUKKyNkZWZpbmUgUHlNZW1fTUFMTE9DCQlfUHlNZW1fRGVidWdNYWxsb2MKKyNkZWZpbmUgUHlNZW1fUkVBTExPQwkJX1B5TWVtX0RlYnVnUmVhbGxvYworI2RlZmluZSBQeU1lbV9GUkVFCQlfUHlNZW1fRGVidWdGcmVlCiAKICNlbHNlCS8qICEgUFlNQUxMT0NfREVCVUcgKi8KIApAQCAtNzEsOSArNzEsOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKChuKSA8IDAgfHwgKG4pID4gUFlfU1NJWkVfVF9NQVgpID8gTlVMTCBcCisjZGVmaW5lIFB5TWVtX01BTExPQyhuKQkJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCA/IE5VTEwgXAogCQkJCTogbWFsbG9jKChuKSA/IChuKSA6IDEpKQotI2RlZmluZSBQeU1lbV9SRUFMTE9DKHAsIG4pCSgoKG4pIDwgMCB8fCAobikgPiBQWV9TU0laRV9UX01BWCkgPyBOVUxMIFwKKyNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYICA/IE5VTEwgXAogCQkJCTogcmVhbGxvYygocCksIChuKSA/IChuKSA6IDEpKQogI2RlZmluZSBQeU1lbV9GUkVFCQlmcmVlCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlwb3J0LmggYi9JbmNsdWRlL3B5cG9ydC5oCmluZGV4IGVkNWZjNTYuLjFhYmMxNGMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlwb3J0LmgKKysrIGIvSW5jbHVkZS9weXBvcnQuaApAQCAtMyw2ICszLDEyIEBACiAKICNpbmNsdWRlICJweWNvbmZpZy5oIiAvKiBpbmNsdWRlIGZvciBkZWZpbmVzICovCiAKKy8qIFNvbWUgdmVyc2lvbnMgb2YgSFAtVVggJiBTb2xhcmlzIG5lZWQgaW50dHlwZXMuaCBmb3IgaW50MzJfdCwKKyAgIElOVDMyX01BWCwgZXRjLiAqLworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfU1RESU5UX0gKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNlbmRpZgpAQCAtODAsNiArODYsNTcgQEAKICNlbmRpZgogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKKy8qIGEgYnVpbGQgd2l0aCAzMC1iaXQgZGlnaXRzIGZvciBQeXRob24gbG9uZyBpbnRlZ2VycyBuZWVkcyBhbiBleGFjdC13aWR0aAorICogMzItYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSB0byBzdG9yZSB0aG9zZSBkaWdpdHMuICAoV2UgY291bGQganVzdCB1c2UKKyAqIHR5cGUgJ3Vuc2lnbmVkIGxvbmcnLCBidXQgdGhhdCB3b3VsZCBiZSB3YXN0ZWZ1bCBvbiBhIHN5c3RlbSB3aGVyZSBsb25ncworICogYXJlIDY0LWJpdHMuKSAgT24gVW5peCBzeXN0ZW1zLCB0aGUgYXV0b2NvbmYgbWFjcm8gQUNfVFlQRV9VSU5UMzJfVCBkZWZpbmVzCisgKiB1aW50MzJfdCB0byBiZSBzdWNoIGEgdHlwZSB1bmxlc3Mgc3RkaW50Lmggb3IgaW50dHlwZXMuaCBkZWZpbmVzIHVpbnQzMl90LgorICogSG93ZXZlciwgaXQgZG9lc24ndCBzZXQgSEFWRV9VSU5UMzJfVCwgc28gd2UgZG8gdGhhdCBoZXJlLgorICovCisjaWYgKGRlZmluZWQgVUlOVDMyX01BWCB8fCBkZWZpbmVkIHVpbnQzMl90KQorI2lmbmRlZiBQWV9VSU5UMzJfVAorI2RlZmluZSBIQVZFX1VJTlQzMl9UIDEKKyNkZWZpbmUgUFlfVUlOVDMyX1QgdWludDMyX3QKKyNlbmRpZgorI2VuZGlmCisKKy8qIE1hY3JvcyBmb3IgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB0eXBlOyB1c2VkIGZvciB0eXBlICd0d29kaWdpdHMnIGluIHRoZQorICogbG9uZyBpbnRlZ2VyIGltcGxlbWVudGF0aW9uLCB3aGVuIDMwLWJpdCBkaWdpdHMgYXJlIGVuYWJsZWQuCisgKi8KKyNpZiAoZGVmaW5lZCBVSU5UNjRfTUFYIHx8IGRlZmluZWQgdWludDY0X3QpCisjaWZuZGVmIFBZX1VJTlQ2NF9UCisjZGVmaW5lIEhBVkVfVUlOVDY0X1QgMQorI2RlZmluZSBQWV9VSU5UNjRfVCB1aW50NjRfdAorI2VuZGlmCisjZW5kaWYKKworLyogU2lnbmVkIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSAqLworI2lmIChkZWZpbmVkIElOVDMyX01BWCB8fCBkZWZpbmVkIGludDMyX3QpCisjaWZuZGVmIFBZX0lOVDMyX1QKKyNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKyNkZWZpbmUgUFlfSU5UMzJfVCBpbnQzMl90CisjZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkIElOVDY0X01BWCB8fCBkZWZpbmVkIGludDY0X3QpCisjaWZuZGVmIFBZX0lOVDY0X1QKKyNkZWZpbmUgSEFWRV9JTlQ2NF9UIDEKKyNkZWZpbmUgUFlfSU5UNjRfVCBpbnQ2NF90CisjZW5kaWYKKyNlbmRpZgorCisvKiBJZiBQWUxPTkdfQklUU19JTl9ESUdJVCBpcyBub3QgZGVmaW5lZCB0aGVuIHdlJ2xsIHVzZSAzMC1iaXQgZGlnaXRzIGlmIGFsbAorICAgdGhlIG5lY2Vzc2FyeSBpbnRlZ2VyIHR5cGVzIGFyZSBhdmFpbGFibGUsIGFuZCB3ZSdyZSBvbiBhIDY0LWJpdCBwbGF0Zm9ybQorICAgKGFzIGRldGVybWluZWQgYnkgU0laRU9GX1ZPSURfUCk7IG90aGVyd2lzZSB3ZSB1c2UgMTUtYml0IGRpZ2l0cy4gKi8KKworI2lmbmRlZiBQWUxPTkdfQklUU19JTl9ESUdJVAorI2lmIChkZWZpbmVkIEhBVkVfVUlOVDY0X1QgJiYgZGVmaW5lZCBIQVZFX0lOVDY0X1QgJiYgXAorICAgICBkZWZpbmVkIEhBVkVfVUlOVDMyX1QgJiYgZGVmaW5lZCBIQVZFX0lOVDMyX1QgJiYgU0laRU9GX1ZPSURfUCA+PSA4KQorI2RlZmluZSBQWUxPTkdfQklUU19JTl9ESUdJVCAzMAorI2Vsc2UKKyNkZWZpbmUgUFlMT05HX0JJVFNfSU5fRElHSVQgMTUKKyNlbmRpZgorI2VuZGlmCisKIC8qIHVpbnRwdHJfdCBpcyB0aGUgQzlYIG5hbWUgZm9yIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUgc3VjaCB0aGF0IGEKICAqIGxlZ2l0aW1hdGUgdm9pZCogY2FuIGJlIGNhc3QgdG8gdWludHB0cl90IGFuZCB0aGVuIGJhY2sgdG8gdm9pZCogYWdhaW4KICAqIHdpdGhvdXQgbG9zcyBvZiBpbmZvcm1hdGlvbi4gIFNpbWlsYXJseSBmb3IgaW50cHRyX3QsIHdydCBhIHNpZ25lZApAQCAtMTcyLDYgKzIyOSwyMiBAQAogIyAgIGVuZGlmCiAjZW5kaWYKIAorLyogUFlfRk9STUFUX0xPTkdfTE9ORyBpcyBhbmFsb2dvdXMgdG8gUFlfRk9STUFUX1NJWkVfVCBhYm92ZSwgYnV0IGZvcgorICogdGhlIGxvbmcgbG9uZyB0eXBlIGluc3RlYWQgb2YgdGhlIHNpemVfdCB0eXBlLiAgSXQncyBvbmx5IGF2YWlsYWJsZQorICogd2hlbiBIQVZFX0xPTkdfTE9ORyBpcyBkZWZpbmVkLiBUaGUgImhpZ2ggbGV2ZWwiIFB5dGhvbiBmb3JtYXQKKyAqIGZ1bmN0aW9ucyBsaXN0ZWQgYWJvdmUgd2lsbCBpbnRlcnByZXQgImxsZCIgb3IgImxsdSIgY29ycmVjdGx5IG9uCisgKiBhbGwgcGxhdGZvcm1zLgorICovCisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyMgICBpZm5kZWYgUFlfRk9STUFUX0xPTkdfTE9ORworIyAgICAgICBpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjICAgICAgICAgICBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyAiSTY0IgorIyAgICAgICBlbHNlCisjICAgICAgICAgICBlcnJvciAiVGhpcyBwbGF0Zm9ybSdzIHB5Y29uZmlnLmggbmVlZHMgdG8gZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkciCisjICAgICAgIGVuZGlmCisjICAgZW5kaWYKKyNlbmRpZgorCiAvKiBQeV9MT0NBTCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIHN0YXRpYyB0byBnZXQgdGhlIGZhc3Rlc3QgcG9zc2libGUgY2FsbGluZwogICogY29udmVudGlvbiBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGxvY2FsIHRvIGEgZ2l2ZW4gbW9kdWxlLgogICoKQEAgLTIzMiw2ICszMDUsMTAgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisjaWZkZWYgSEFWRV9JRUVFRlBfSAorI2luY2x1ZGUgPGllZWVmcC5oPiAgLyogbmVlZGVkIGZvciAnZmluaXRlJyBkZWNsYXJhdGlvbiBvbiBzb21lIHBsYXRmb3JtcyAqLworI2VuZGlmCisKICNpbmNsdWRlIDxtYXRoLmg+IC8qIE1vdmVkIGhlcmUgZnJvbSB0aGUgbWF0aCBzZWN0aW9uLCBiZWZvcmUgZXh0ZXJuICJDIiAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMyNywxOSArNDA0LDIzIEBACiAgKiBDIGRvZXNuJ3QgZGVmaW5lIHdoZXRoZXIgYSByaWdodC1zaGlmdCBvZiBhIHNpZ25lZCBpbnRlZ2VyIHNpZ24tZXh0ZW5kcwogICogb3IgemVyby1maWxscy4gIEhlcmUgYSBtYWNybyB0byBmb3JjZSBzaWduIGV4dGVuc2lvbjoKICAqIFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQoVFlQRSwgSSwgSikKLSAqICAgIFJldHVybiBJID4+IEosIGZvcmNpbmcgc2lnbiBleHRlbnNpb24uCisgKiAgICBSZXR1cm4gSSA+PiBKLCBmb3JjaW5nIHNpZ24gZXh0ZW5zaW9uLiAgQXJpdGhtZXRpY2FsbHksIHJldHVybiB0aGUKKyAqICAgIGZsb29yIG9mIEkvMioqSi4KICAqIFJlcXVpcmVtZW50czoKLSAqICAgIEkgaXMgb2YgYmFzaWMgc2lnbmVkIHR5cGUgVFlQRSAoY2hhciwgc2hvcnQsIGludCwgbG9uZywgb3IgbG9uZyBsb25nKS4KLSAqICAgIFRZUEUgaXMgb25lIG9mIGNoYXIsIHNob3J0LCBpbnQsIGxvbmcsIG9yIGxvbmcgbG9uZywgYWx0aG91Z2ggbG9uZyBsb25nCi0gKiAgICBtdXN0IG5vdCBiZSB1c2VkIGV4Y2VwdCBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0LgotICogICAgSiBpcyBhbiBpbnRlZ2VyID49IDAgYW5kIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gVFlQRQotICogICAgKGJlY2F1c2UgQyBkb2Vzbid0IGRlZmluZSB3aGF0IGhhcHBlbnMgZm9yIEogb3V0c2lkZSB0aGF0IHJhbmdlIGVpdGhlcikuCisgKiAgICBJIHNob3VsZCBoYXZlIHNpZ25lZCBpbnRlZ2VyIHR5cGUuICBJbiB0aGUgdGVybWlub2xvZ3kgb2YgQzk5LCB0aGlzIGNhbgorICogICAgYmUgZWl0aGVyIG9uZSBvZiB0aGUgZml2ZSBzdGFuZGFyZCBzaWduZWQgaW50ZWdlciB0eXBlcyAoc2lnbmVkIGNoYXIsCisgKiAgICBzaG9ydCwgaW50LCBsb25nLCBsb25nIGxvbmcpIG9yIGFuIGV4dGVuZGVkIHNpZ25lZCBpbnRlZ2VyIHR5cGUuCisgKiAgICBKIGlzIGFuIGludGVnZXIgPj0gMCBhbmQgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgYml0cyBpbiB0aGUKKyAqICAgIHR5cGUgb2YgSSAoYmVjYXVzZSBDIGRvZXNuJ3QgZGVmaW5lIHdoYXQgaGFwcGVucyBmb3IgSiBvdXRzaWRlIHRoYXQKKyAqICAgIHJhbmdlIGVpdGhlcikuCisgKiAgICBUWVBFIHVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBJLCBidXQgaXMgbm93IGlnbm9yZWQuICBJdCdzIGJlZW4gbGVmdAorICogICAgaW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgPD0gMi42IG9yIDMuMC4KICAqIENhdXRpb246CiAgKiAgICBJIG1heSBiZSBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2UuCiAgKi8KICNpZmRlZiBTSUdORURfUklHSFRfU0hJRlRfWkVST19GSUxMUwogI2RlZmluZSBQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKFRZUEUsIEksIEopIFwKLSAgICAoKEkpIDwgMCA/IH4oKH4odW5zaWduZWQgVFlQRSkoSSkpID4+IChKKSkgOiAoSSkgPj4gKEopKQorICAgICgoSSkgPCAwID8gLTEtKCgtMS0oSSkpID4+IChKKSkgOiAoSSkgPj4gKEopKQogI2Vsc2UKICNkZWZpbmUgUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChUWVBFLCBJLCBKKSAoKEkpID4+IChKKSkKICNlbmRpZgpAQCAtNDI3LDYgKzUwOCw3OSBAQAogICAgICAgICAgICAgZXJybm8gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUoMCkKIAorLyogIFRoZSBmdW5jdGlvbnMgX1B5X2RnX3N0cnRvZCBhbmQgX1B5X2RnX2R0b2EgaW4gUHl0aG9uL2R0b2EuYyAod2hpY2ggYXJlCisgKiAgcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUgc2hvcnQgZmxvYXQgcmVwciBpbnRyb2R1Y2VkIGluIFB5dGhvbiAzLjEpIHJlcXVpcmUKKyAqICB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCB1bml0IHRoYXQncyBiZWluZyB1c2VkIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMKKyAqICBvbiBDIGRvdWJsZXMgaXMgc2V0IHRvIHVzZSA1My1iaXQgcHJlY2lzaW9uLiAgSXQgYWxzbyByZXF1aXJlcyB0aGF0IHRoZQorICogIEZQVSByb3VuZGluZyBtb2RlIGlzIHJvdW5kLWhhbGYtdG8tZXZlbiwgYnV0IHRoYXQncyBsZXNzIG9mdGVuIGFuIGlzc3VlLgorICoKKyAqICBJZiB5b3VyIEZQVSBpc24ndCBhbHJlYWR5IHNldCB0byA1My1iaXQgcHJlY2lzaW9uL3JvdW5kLWhhbGYtdG8tZXZlbiwgYW5kCisgKiAgeW91IHdhbnQgdG8gbWFrZSB1c2Ugb2YgX1B5X2RnX3N0cnRvZCBhbmQgX1B5X2RnX2R0b2EsIHRoZW4geW91IHNob3VsZAorICoKKyAqICAgICAjZGVmaW5lIEhBVkVfUFlfU0VUXzUzQklUX1BSRUNJU0lPTiAxCisgKgorICogIGFuZCBhbHNvIGdpdmUgYXBwcm9wcmlhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWFjcm9zOgorICoKKyAqICAgIF9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OX1NUQVJUIDogc3RvcmUgb3JpZ2luYWwgRlBVIHNldHRpbmdzLCBhbmQKKyAqICAgICAgICBzZXQgRlBVIHRvIDUzLWJpdCBwcmVjaXNpb24vcm91bmQtaGFsZi10by1ldmVuCisgKiAgICBfUFlfU0VUXzUzQklUX1BSRUNJU0lPTl9FTkQgOiByZXN0b3JlIG9yaWdpbmFsIEZQVSBzZXR0aW5ncworICogICAgX1BZX1NFVF81M0JJVF9QUkVDSVNJT05fSEVBREVSIDogYW55IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBuZWVkZWQgdG8KKyAqICAgICAgICB1c2UgdGhlIHR3byBtYWNyb3MgYWJvdmUuCisgKgorICogVGhlIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoaW4gYSBzaW5nbGUgQyBmdW5jdGlvbjogc2VlCisgKiBQeXRob24vcHlzdHJ0b2QuYyBmb3IgYW4gZXhhbXBsZSBvZiB0aGVpciB1c2UuCisgKi8KKworLyogZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCBmb3IgZ2NjL3g4NiAqLworI2lmZGVmIEhBVkVfR0NDX0FTTV9GT1JfWDg3CisjZGVmaW5lIEhBVkVfUFlfU0VUXzUzQklUX1BSRUNJU0lPTiAxCisvKiBfUHlfZ2V0L3NldF8zODdjb250cm9sd29yZCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gUHl0aG9uL3B5bWF0aC5jICovCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIHNob3J0IG9sZF8zODdjb250cm9sd29yZCwgbmV3XzM4N2NvbnRyb2x3b3JkCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG9sZF8zODdjb250cm9sd29yZCA9IF9QeV9nZXRfMzg3Y29udHJvbHdvcmQoKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5ld18zODdjb250cm9sd29yZCA9IChvbGRfMzg3Y29udHJvbHdvcmQgJiB+MHgwZjAwKSB8IDB4MDIwMDsgXAorICAgICAgICBpZiAobmV3XzM4N2NvbnRyb2x3b3JkICE9IG9sZF8zODdjb250cm9sd29yZCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX1B5X3NldF8zODdjb250cm9sd29yZChuZXdfMzg3Y29udHJvbHdvcmQpOyAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChuZXdfMzg3Y29udHJvbHdvcmQgIT0gb2xkXzM4N2NvbnRyb2x3b3JkKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1B5X3NldF8zODdjb250cm9sd29yZChvbGRfMzg3Y29udHJvbHdvcmQpCisjZW5kaWYKKworLyogZGVmYXVsdCBkZWZpbml0aW9ucyBhcmUgZW1wdHkgKi8KKyNpZm5kZWYgSEFWRV9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUgorI2RlZmluZSBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9TVEFSVAorI2RlZmluZSBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9FTkQKKyNlbmRpZgorCisvKiBJZiB3ZSBjYW4ndCBndWFyYW50ZWUgNTMtYml0IHByZWNpc2lvbiwgZG9uJ3QgdXNlIHRoZSBjb2RlCisgICBpbiBQeXRob24vZHRvYS5jLCBidXQgZmFsbCBiYWNrIHRvIHN0YW5kYXJkIGNvZGUuICBUaGlzCisgICBtZWFucyB0aGF0IHJlcHIgb2YgYSBmbG9hdCB3aWxsIGJlIGxvbmcgKDE3IHNpZyBkaWdpdHMpLgorCisgICBSZWFsaXN0aWNhbGx5LCB0aGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IGNvdWxkIGdvIHdyb25nOgorCisgICAoMSkgZG91YmxlcyBhcmVuJ3QgSUVFRSA3NTQgZG91Ymxlcywgb3IKKyAgICgyKSB3ZSdyZSBvbiB4ODYgd2l0aCB0aGUgcm91bmRpbmcgcHJlY2lzaW9uIHNldCB0byA2NC1iaXRzCisgICAgICAgKGV4dGVuZGVkIHByZWNpc2lvbiksIGFuZCB3ZSBkb24ndCBrbm93IGhvdyB0byBjaGFuZ2UKKyAgICAgICB0aGUgcm91bmRpbmcgcHJlY2lzaW9uLgorICovCisKKyNpZiAhZGVmaW5lZChET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0KSAmJiBcCisgICAgIWRlZmluZWQoRE9VQkxFX0lTX0JJR19FTkRJQU5fSUVFRTc1NCkgJiYgXAorICAgICFkZWZpbmVkKERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQpCisjZGVmaW5lIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKyNlbmRpZgorCisvKiBkb3VibGUgcm91bmRpbmcgaXMgc3ltcHRvbWF0aWMgb2YgdXNlIG9mIGV4dGVuZGVkIHByZWNpc2lvbiBvbiB4ODYuICBJZgorICAgd2UncmUgc2VlaW5nIGRvdWJsZSByb3VuZGluZywgYW5kIHdlIGRvbid0IGhhdmUgYW55IG1lY2hhbmlzbSBhdmFpbGFibGUgZm9yCisgICBjaGFuZ2luZyB0aGUgRlBVIHJvdW5kaW5nIHByZWNpc2lvbiwgdGhlbiBkb24ndCB1c2UgUHl0aG9uL2R0b2EuYy4gKi8KKyNpZiBkZWZpbmVkKFg4N19ET1VCTEVfUk9VTkRJTkcpICYmICFkZWZpbmVkKEhBVkVfUFlfU0VUXzUzQklUX1BSRUNJU0lPTikKKyNkZWZpbmUgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorI2VuZGlmCisKIC8qIFB5X0RFUFJFQ0FURUQodmVyc2lvbikKICAqIERlY2xhcmUgYSB2YXJpYWJsZSwgdHlwZSwgb3IgZnVuY3Rpb24gZGVwcmVjYXRlZC4KICAqIFVzYWdlOgpAQCAtNDczLDcgKzYyNyw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfRk9SS1BUWSkKLSNpZiAhZGVmaW5lZChIQVZFX1BUWV9IKSAmJiAhZGVmaW5lZChIQVZFX0xJQlVUSUxfSCkKKyNpZiAhZGVmaW5lZChIQVZFX1BUWV9IKSAmJiAhZGVmaW5lZChIQVZFX0xJQlVUSUxfSCkgJiYgIWRlZmluZWQoSEFWRV9VVElMX0gpCiAvKiBCU0RJIGRvZXMgbm90IHN1cHBseSBhIHByb3RvdHlwZSBmb3IgdGhlICdvcGVucHR5JyBhbmQgJ2ZvcmtwdHknCiAgICBmdW5jdGlvbnMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGluY2x1ZGVkIGluIGxpYnV0aWwuICovCiAjaW5jbHVkZSA8dGVybWlvcy5oPgpAQCAtNTcwLDIzICs3MjQsMjQgQEAKICMgICAgICAgICAgICAgICBpZmRlZiBQeV9CVUlMRF9DT1JFCiAjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkgX19kZWNsc3BlYyhkbGxleHBvcnQpIFJUWVBFCiAjICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgUHlBUElfREFUQShSVFlQRSkgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBSVFlQRQotICAgICAgICAgICAgLyogbW9kdWxlIGluaXQgZnVuY3Rpb25zIGluc2lkZSB0aGUgY29yZSBuZWVkIG5vIGV4dGVybmFsIGxpbmthZ2UgKi8KLSAgICAgICAgICAgIC8qIGV4Y2VwdCBmb3IgQ3lnd2luIHRvIGhhbmRsZSBlbWJlZGRpbmcgKEZJWE1FOiBCZU9TIHRvbz8pICovCisgICAgICAgIC8qIG1vZHVsZSBpbml0IGZ1bmN0aW9ucyBpbnNpZGUgdGhlIGNvcmUgbmVlZCBubyBleHRlcm5hbCBsaW5rYWdlICovCisgICAgICAgIC8qIGV4Y2VwdCBmb3IgQ3lnd2luIHRvIGhhbmRsZSBlbWJlZGRpbmcgKEZJWE1FOiBCZU9TIHRvbz8pICovCiAjICAgICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBQeU1PRElOSVRfRlVOQyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgdm9pZAogIyAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvKiBfX0NZR1dJTl9fICovCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSBQeU1PRElOSVRfRlVOQyB2b2lkCiAjICAgICAgICAgICAgICAgICAgICAgICBlbmRpZiAvKiBfX0NZR1dJTl9fICovCiAjICAgICAgICAgICAgICAgZWxzZSAvKiBQeV9CVUlMRF9DT1JFICovCi0gICAgICAgICAgICAvKiBCdWlsZGluZyBhbiBleHRlbnNpb24gbW9kdWxlLCBvciBhbiBlbWJlZGRlZCBzaXR1YXRpb24gKi8KLSAgICAgICAgICAgIC8qIHB1YmxpYyBQeXRob24gZnVuY3Rpb25zIGFuZCBkYXRhIGFyZSBpbXBvcnRlZCAqLwotICAgICAgICAgICAgLyogVW5kZXIgQ3lnd2luLCBhdXRvLWltcG9ydCBmdW5jdGlvbnMgdG8gcHJldmVudCBjb21waWxhdGlvbiAqLwotICAgICAgICAgICAgLyogZmFpbHVyZXMgc2ltaWxhciB0byBodHRwOi8vcHl0aG9uLm9yZy9kb2MvRkFRLmh0bWwjMy4yNCAqLworICAgICAgICAvKiBCdWlsZGluZyBhbiBleHRlbnNpb24gbW9kdWxlLCBvciBhbiBlbWJlZGRlZCBzaXR1YXRpb24gKi8KKyAgICAgICAgLyogcHVibGljIFB5dGhvbiBmdW5jdGlvbnMgYW5kIGRhdGEgYXJlIGltcG9ydGVkICovCisgICAgICAgIC8qIFVuZGVyIEN5Z3dpbiwgYXV0by1pbXBvcnQgZnVuY3Rpb25zIHRvIHByZXZlbnQgY29tcGlsYXRpb24gKi8KKyAgICAgICAgLyogZmFpbHVyZXMgc2ltaWxhciB0byB0aG9zZSBkZXNjcmliZWQgYXQgdGhlIGJvdHRvbSBvZiA0LjE6ICovCisgICAgICAgIC8qIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZXh0ZW5kaW5nL3dpbmRvd3MuaHRtbCNhLWNvb2tib29rLWFwcHJvYWNoICovCiAjICAgICAgICAgICAgICAgICAgICAgICBpZiAhZGVmaW5lZChfX0NZR1dJTl9fKQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgUHlBUElfRlVOQyhSVFlQRSkgX19kZWNsc3BlYyhkbGxpbXBvcnQpIFJUWVBFCiAjICAgICAgICAgICAgICAgICAgICAgICBlbmRpZiAvKiAhX19DWUdXSU5fXyAqLwogIyAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFB5QVBJX0RBVEEoUlRZUEUpIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgUlRZUEUKLSAgICAgICAgICAgIC8qIG1vZHVsZSBpbml0IGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjb3JlIG11c3QgYmUgZXhwb3J0ZWQgKi8KKyAgICAgICAgLyogbW9kdWxlIGluaXQgZnVuY3Rpb25zIG91dHNpZGUgdGhlIGNvcmUgbXVzdCBiZSBleHBvcnRlZCAqLwogIyAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lIFB5TU9ESU5JVF9GVU5DIGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxleHBvcnQpIHZvaWQKICMgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLyogX19jcGx1c3BsdXMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlzdHJ0b2QuaCBiL0luY2x1ZGUvcHlzdHJ0b2QuaAppbmRleCBjNjkyMWRhLi5lZWM0MzRmIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5c3RydG9kLmgKKysrIGIvSW5jbHVkZS9weXN0cnRvZC5oCkBAIC04LDggKzgsMzUgQEAKIAogUHlBUElfRlVOQyhkb3VibGUpIFB5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0cik7CiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlPU19hc2NpaV9hdG9mKGNvbnN0IGNoYXIgKnN0cik7Ci1QeUFQSV9GVU5DKGNoYXIgKikgUHlPU19hc2NpaV9mb3JtYXRkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zl9sZW4sICBjb25zdCBjaGFyICpmb3JtYXQsIGRvdWJsZSBkKTsKIAorLyogRGVwcmVjYXRlZCBpbiAyLjcgYW5kIDMuMS4gV2lsbCBkaXNhcHBlYXIgaW4gMi44IChpZiBpdCBleGlzdHMpIGFuZCAzLjIgKi8KK1B5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCBkb3VibGUgZCk7CitQeUFQSV9GVU5DKGRvdWJsZSkgUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmVuZHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm92ZXJmbG93X2V4Y2VwdGlvbik7CisKKy8qIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgUHlNZW1fRnJlZSB0byBmcmVlIHRoZSBidWZmZXIKKyAgIHRoYXQncyBpcyByZXR1cm5lZC4gKi8KK1B5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2RvdWJsZV90b19zdHJpbmcoZG91YmxlIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBmb3JtYXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnR5cGUpOworCitQeUFQSV9GVU5DKGRvdWJsZSkgX1B5X3BhcnNlX2luZl9vcl9uYW4oY29uc3QgY2hhciAqcCwgY2hhciAqKmVuZHB0cik7CisKKworLyogUHlPU19kb3VibGVfdG9fc3RyaW5nJ3MgImZsYWdzIiBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byAwIG9yIG1vcmUgb2Y6ICovCisjZGVmaW5lIFB5X0RUU0ZfU0lHTiAgICAgIDB4MDEgLyogYWx3YXlzIGFkZCB0aGUgc2lnbiAqLworI2RlZmluZSBQeV9EVFNGX0FERF9ET1RfMCAweDAyIC8qIGlmIHRoZSByZXN1bHQgaXMgYW4gaW50ZWdlciBhZGQgIi4wIiAqLworI2RlZmluZSBQeV9EVFNGX0FMVCAgICAgICAweDA0IC8qICJhbHRlcm5hdGUiIGZvcm1hdHRpbmcuIGl0J3MgZm9ybWF0X2NvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyAqLworCisvKiBQeU9TX2RvdWJsZV90b19zdHJpbmcncyAidHlwZSIsIGlmIG5vbi1OVUxMLCB3aWxsIGJlIHNldCB0byBvbmUgb2Y6ICovCisjZGVmaW5lIFB5X0RUU1RfRklOSVRFIDAKKyNkZWZpbmUgUHlfRFRTVF9JTkZJTklURSAxCisjZGVmaW5lIFB5X0RUU1RfTkFOIDIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5dGhvbnJ1bi5oIGIvSW5jbHVkZS9weXRob25ydW4uaAppbmRleCAwMzliNDk4Li5mOGVkNzE4IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKyBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRIb29rc19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIF9QeUZyYW1lX0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgX1B5SW50X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgX1B5TG9uZ19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlGbG9hdF9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZUFycmF5X0luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aHJlYWQuaCBiL0luY2x1ZGUvcHl0aHJlYWQuaAppbmRleCBiNWE2ZWMzLi5kZmQ2MTU3IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5dGhyZWFkLmgKKysrIGIvSW5jbHVkZS9weXRocmVhZC5oCkBAIC0yLDkgKzIsNiBAQAogI2lmbmRlZiBQeV9QWVRIUkVBRF9ICiAjZGVmaW5lIFB5X1BZVEhSRUFEX0gKIAotI2RlZmluZSBOT19FWElUX1BST0cJCS8qIGRvbid0IGRlZmluZSBQeVRocmVhZF9leGl0X3Byb2coKSAqLwotCQkJCS8qICh0aGUgcmVzdWx0IGlzIG5vIHVzZSBvZiBzaWduYWxzIG9uIFNHSSkgKi8KLQogdHlwZWRlZiB2b2lkICpQeVRocmVhZF90eXBlX2xvY2s7CiB0eXBlZGVmIHZvaWQgKlB5VGhyZWFkX3R5cGVfc2VtYTsKIApAQCAtMTUsNyArMTIsNiBAQAogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9pbml0X3RocmVhZCh2b2lkKTsKIFB5QVBJX0ZVTkMobG9uZykgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqKSh2b2lkICopLCB2b2lkICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfX1B5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpOwogUHlBUElfRlVOQyhsb25nKSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpOwogCiBQeUFQSV9GVU5DKFB5VGhyZWFkX3R5cGVfbG9jaykgUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKTsKQEAgLTI4LDExICsyNCw2IEBACiBQeUFQSV9GVU5DKHNpemVfdCkgUHlUaHJlYWRfZ2V0X3N0YWNrc2l6ZSh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRocmVhZF9zZXRfc3RhY2tzaXplKHNpemVfdCk7CiAKLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1QeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQpOwotUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCk7Ci0jZW5kaWYKLQogLyogVGhyZWFkIExvY2FsIFN0b3JhZ2UgKFRMUykgQVBJICovCiBQeUFQSV9GVU5DKGludCkgUHlUaHJlYWRfY3JlYXRlX2tleSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfZGVsZXRlX2tleShpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zdHJpbmdvYmplY3QuaCBiL0luY2x1ZGUvc3RyaW5nb2JqZWN0LmgKaW5kZXggYzBhMWZjYS4uMThiNWI0MSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zdHJpbmdvYmplY3QuaAorKysgYi9JbmNsdWRlL3N0cmluZ29iamVjdC5oCkBAIC02Miw5ICs2Miw5IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3RyaW5nX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRnJvbUZvcm1hdFYoY29uc3QgY2hhciosIHZhX2xpc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0dDQ19BVFRSSUJVVEUoKGZvcm1hdChwcmludGYsIDEsIDApKSk7CisJCQkJUHlfR0NDX0FUVFJJQlVURSgoZm9ybWF0KHByaW50ZiwgMSwgMCkpKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRnJvbUZvcm1hdChjb25zdCBjaGFyKiwgLi4uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HQ0NfQVRUUklCVVRFKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworCQkJCVB5X0dDQ19BVFRSSUJVVEUoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5U3RyaW5nX1NpemUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGNoYXIgKikgUHlTdHJpbmdfQXNTdHJpbmcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3RyaW5nX1JlcHIoUHlPYmplY3QgKiwgaW50KTsKQEAgLTc0LDEwICs3NCwxMCBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVN0cmluZ19FcShQeU9iamVjdCAqLCBQeU9iamVjdCopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN0cmluZ19Gb3JtYXQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVN0cmluZ19Gb3JtYXRMb25nKFB5T2JqZWN0KiwgaW50LCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgY2hhcioqLCBpbnQqKTsKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRGVjb2RlRXNjYXBlKGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CisJCQkJCQkgIGludCwgY2hhcioqLCBpbnQqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTdHJpbmdfRGVjb2RlRXNjYXBlKGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCwgCisJCQkJCQkgICBjb25zdCBjaGFyICosIFB5X3NzaXplX3QsCisJCQkJCQkgICBjb25zdCBjaGFyICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RyaW5nX0ludGVybkluUGxhY2UoUHlPYmplY3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeVN0cmluZ19JbnRlcm5JbW1vcnRhbChQeU9iamVjdCAqKik7CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOwogCi0vKiBFbmNvZGVzIGEgY2hhciBidWZmZXIgb2YgdGhlIGdpdmVuIHNpemUgYW5kIHJldHVybnMgYQorLyogRW5jb2RlcyBhIGNoYXIgYnVmZmVyIG9mIHRoZSBnaXZlbiBzaXplIGFuZCByZXR1cm5zIGEgCiAgICBQeXRob24gb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlTdHJpbmdfRW5jb2RlKApAQCAtMTE3LDUwICsxMTcsNTAgQEAKICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOwogCi0vKiBFbmNvZGVzIGEgc3RyaW5nIG9iamVjdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIFB5dGhvbgorLyogRW5jb2RlcyBhIHN0cmluZyBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24gCiAgICBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QoCi0gICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIHN0cmluZyBvYmplY3QgKi8KLSAgICBjb25zdCBjaGFyICplbmNvZGluZywgICAgICAgLyogZW5jb2RpbmcgKi8KLSAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KKyAgICBQeU9iamVjdCAqc3RyLAkgCS8qIHN0cmluZyBvYmplY3QgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZywJLyogZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplcnJvcnMJCS8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIAogLyogRW5jb2RlcyBhIHN0cmluZyBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24gc3RyaW5nCi0gICBvYmplY3QuCi0KKyAgIG9iamVjdC4gICAKKyAgIAogICAgSWYgdGhlIGNvZGVjIHJldHVybnMgYW4gVW5pY29kZSBvYmplY3QsIHRoZSBvYmplY3QgaXMgY29udmVydGVkCiAgICBiYWNrIHRvIGEgc3RyaW5nIHVzaW5nIHRoZSBkZWZhdWx0IGVuY29kaW5nLgogCiAgICBERVBSRUNBVEVEIC0gdXNlIFB5U3RyaW5nX0FzRW5jb2RlZE9iamVjdCgpIGluc3RlYWQuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0cmluZ19Bc0VuY29kZWRTdHJpbmcoCi0gICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIHN0cmluZyBvYmplY3QgKi8KLSAgICBjb25zdCBjaGFyICplbmNvZGluZywgICAgICAgLyogZW5jb2RpbmcgKi8KLSAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KKyAgICBQeU9iamVjdCAqc3RyLAkgCS8qIHN0cmluZyBvYmplY3QgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZywJLyogZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplcnJvcnMJCS8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIAotLyogRGVjb2RlcyBhIHN0cmluZyBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24KKy8qIERlY29kZXMgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgUHl0aG9uIAogICAgb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlTdHJpbmdfQXNEZWNvZGVkT2JqZWN0KAotICAgIFB5T2JqZWN0ICpzdHIsICAgICAgICAgICAgICAvKiBzdHJpbmcgb2JqZWN0ICovCi0gICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCi0gICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCisgICAgUHlPYmplY3QgKnN0ciwJIAkvKiBzdHJpbmcgb2JqZWN0ICovCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCS8qIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqZXJyb3JzCQkvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CiAKIC8qIERlY29kZXMgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgUHl0aG9uIHN0cmluZwotICAgb2JqZWN0LgotCisgICBvYmplY3QuICAKKyAgIAogICAgSWYgdGhlIGNvZGVjIHJldHVybnMgYW4gVW5pY29kZSBvYmplY3QsIHRoZSBvYmplY3QgaXMgY29udmVydGVkCiAgICBiYWNrIHRvIGEgc3RyaW5nIHVzaW5nIHRoZSBkZWZhdWx0IGVuY29kaW5nLgogCiAgICBERVBSRUNBVEVEIC0gdXNlIFB5U3RyaW5nX0FzRGVjb2RlZE9iamVjdCgpIGluc3RlYWQuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0cmluZ19Bc0RlY29kZWRTdHJpbmcoCi0gICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIHN0cmluZyBvYmplY3QgKi8KLSAgICBjb25zdCBjaGFyICplbmNvZGluZywgICAgICAgLyogZW5jb2RpbmcgKi8KLSAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KKyAgICBQeU9iamVjdCAqc3RyLAkgCS8qIHN0cmluZyBvYmplY3QgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZywJLyogZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplcnJvcnMJCS8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIAogLyogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBkYXRhIGJ1ZmZlciBhbmQgc2l6ZSBvZiBhIHN0cmluZwpAQCAtMTcwLDI5ICsxNzAsMzkgQEAKICAgIGNhdXNlIGFuIGV4Y2VwdGlvbikuICAqLwogCiBQeUFQSV9GVU5DKGludCkgUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciBjaGFyICoqcywgICAgICAgICAgLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KLSAgICByZWdpc3RlciBQeV9zc2l6ZV90ICpsZW4gICAgLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MpICovCisgICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwJLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCisgICAgcmVnaXN0ZXIgY2hhciAqKnMsCQkvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLworICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbgkvKiBwb2ludGVyIHRvIGxlbmd0aCB2YXJpYWJsZSBvciBOVUxMCisJCQkJICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAorCQkJCSAgIHN0cmluZ3MpICovCiAgICAgKTsKIAorCiAvKiBVc2luZyB0aGUgY3VycmVudCBsb2NhbGUsIGluc2VydCB0aGUgdGhvdXNhbmRzIGdyb3VwaW5nCiAgICBpbnRvIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSBidWZmZXIuICBGb3IgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9ucywKICAgIHNlZSBPYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggKi8KK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlKGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoKTsKIAotUHlBUElfRlVOQyhpbnQpIF9QeVN0cmluZ19JbnNlcnRUaG91c2FuZHNHcm91cGluZyhjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgYnVmX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXBwZW5kX3plcm9fY2hhcik7CisvKiBVc2luZyBleHBsaWNpdCBwYXNzZWQtaW4gdmFsdWVzLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZworICAgaW50byB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgYnVmZmVyLiAgRm9yIHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbnMsCisgICBzZWUgT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oICovCitQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeVN0cmluZ19JbnNlcnRUaG91c2FuZHNHcm91cGluZyhjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1pbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpncm91cGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwKTsKIAogLyogRm9ybWF0IHRoZSBvYmplY3QgYmFzZWQgb24gdGhlIGZvcm1hdF9zcGVjLCBhcyBkZWZpbmVkIGluIFBFUCAzMTAxCiAgICAoQWR2YW5jZWQgU3RyaW5nIEZvcm1hdHRpbmcpLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlCeXRlc19Gb3JtYXRBZHZhbmNlZChQeU9iamVjdCAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXRfc3BlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBmb3JtYXRfc3BlY19sZW4pOworCQkJCQkgICAgICAgY2hhciAqZm9ybWF0X3NwZWMsCisJCQkJCSAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeW10YWJsZS5oIGIvSW5jbHVkZS9zeW10YWJsZS5oCmluZGV4IDY1Nzc1YjAuLmUwYTBiZTQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3ltdGFibGUuaAorKysgYi9JbmNsdWRlL3N5bXRhYmxlLmgKQEAgLTE5LDcgKzE5LDYgQEAKICAgICBQeU9iamVjdCAqc3RfZ2xvYmFsOyAgICAgLyogYm9ycm93ZWQgcmVmIHRvIE1PRFVMRSBpbiBzdF9zeW1ib2xzICovCiAgICAgaW50IHN0X25ibG9ja3M7ICAgICAgICAgIC8qIG51bWJlciBvZiBibG9ja3MgKi8KICAgICBQeU9iamVjdCAqc3RfcHJpdmF0ZTsgICAgICAgIC8qIG5hbWUgb2YgY3VycmVudCBjbGFzcyBvciBOVUxMICovCi0gICAgaW50IHN0X3RtcG5hbWU7ICAgICAgICAgIC8qIHRlbXBvcmFyeSBuYW1lIGNvdW50ZXIgKi8KICAgICBQeUZ1dHVyZUZlYXR1cmVzICpzdF9mdXR1cmU7IC8qIG1vZHVsZSdzIGZ1dHVyZSBmZWF0dXJlcyAqLwogfTsKIApAQCAtNjUsMTMgKzY0LDkgQEAKICNkZWZpbmUgREVGX0xPQ0FMIDIgICAgICAgICAgICAvKiBhc3NpZ25tZW50IGluIGNvZGUgYmxvY2sgKi8KICNkZWZpbmUgREVGX1BBUkFNIDI8PDEgICAgICAgICAvKiBmb3JtYWwgcGFyYW1ldGVyICovCiAjZGVmaW5lIFVTRSAyPDwyICAgICAgICAgICAgICAgLyogbmFtZSBpcyB1c2VkICovCi0jZGVmaW5lIERFRl9TVEFSIDI8PDMgICAgICAgICAgLyogcGFyYW1ldGVyIGlzIHN0YXIgYXJnICovCi0jZGVmaW5lIERFRl9ET1VCTEVTVEFSIDI8PDQgICAgLyogcGFyYW1ldGVyIGlzIHN0YXItc3RhciBhcmcgKi8KLSNkZWZpbmUgREVGX0lOVFVQTEUgMjw8NSAgICAgICAvKiBuYW1lIGRlZmluZWQgaW4gdHVwbGUgaW4gcGFyYW1ldGVycyAqLwotI2RlZmluZSBERUZfRlJFRSAyPDw2ICAgICAgICAgIC8qIG5hbWUgdXNlZCBidXQgbm90IGRlZmluZWQgaW4gbmVzdGVkIGJsb2NrICovCi0jZGVmaW5lIERFRl9GUkVFX0dMT0JBTCAyPDw3ICAgLyogZnJlZSB2YXJpYWJsZSBpcyBhY3R1YWxseSBpbXBsaWNpdCBnbG9iYWwgKi8KLSNkZWZpbmUgREVGX0ZSRUVfQ0xBU1MgMjw8OCAgICAvKiBmcmVlIHZhcmlhYmxlIGZyb20gY2xhc3MncyBtZXRob2QgKi8KLSNkZWZpbmUgREVGX0lNUE9SVCAyPDw5ICAgICAgICAvKiBhc3NpZ25tZW50IG9jY3VycmVkIHZpYSBpbXBvcnQgKi8KKyNkZWZpbmUgREVGX0ZSRUUgMjw8MyAgICAgICAgIC8qIG5hbWUgdXNlZCBidXQgbm90IGRlZmluZWQgaW4gbmVzdGVkIGJsb2NrICovCisjZGVmaW5lIERFRl9GUkVFX0NMQVNTIDI8PDQgICAgLyogZnJlZSB2YXJpYWJsZSBmcm9tIGNsYXNzJ3MgbWV0aG9kICovCisjZGVmaW5lIERFRl9JTVBPUlQgMjw8NSAgICAgICAgLyogYXNzaWdubWVudCBvY2N1cnJlZCB2aWEgaW1wb3J0ICovCiAKICNkZWZpbmUgREVGX0JPVU5EIChERUZfTE9DQUwgfCBERUZfUEFSQU0gfCBERUZfSU1QT1JUKQogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3Rva2VuLmggYi9JbmNsdWRlL3Rva2VuLmgKaW5kZXggNDI1MDAwMC4uNzI2NTlhYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS90b2tlbi5oCisrKyBiL0luY2x1ZGUvdG9rZW4uaApAQCAtNyw2ICs3LDggQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyN1bmRlZiBUSUxERSAgIC8qIFByZXZlbnQgY2xhc2ggb2Ygb3VyIGRlZmluaXRpb24gd2l0aCBzeXN0ZW0gbWFjcm8uIEV4IEFJWCwgaW9jdGwuaCAqLworCiAjZGVmaW5lIEVORE1BUktFUgkwCiAjZGVmaW5lIE5BTUUJCTEKICNkZWZpbmUgTlVNQkVSCQkyCmRpZmYgLS1naXQgYS9JbmNsdWRlL3R1cGxlb2JqZWN0LmggYi9JbmNsdWRlL3R1cGxlb2JqZWN0LmgKaW5kZXggNTg0NzllZS4uYTVhYjczMyAxMDA2NDQKLS0tIGEvSW5jbHVkZS90dXBsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvdHVwbGVvYmplY3QuaApAQCAtNDQsNiArNDQsNyBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVR1cGxlX0dldFNsaWNlKFB5T2JqZWN0ICosIFB5X3NzaXplX3QsIFB5X3NzaXplX3QpOwogUHlBUElfRlVOQyhpbnQpIF9QeVR1cGxlX1Jlc2l6ZShQeU9iamVjdCAqKiwgUHlfc3NpemVfdCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VHVwbGVfUGFjayhQeV9zc2l6ZV90LCAuLi4pOworUHlBUElfRlVOQyh2b2lkKSBfUHlUdXBsZV9NYXliZVVudHJhY2soUHlPYmplY3QgKik7CiAKIC8qIE1hY3JvLCB0cmFkaW5nIHNhZmV0eSBmb3Igc3BlZWQgKi8KICNkZWZpbmUgUHlUdXBsZV9HRVRfSVRFTShvcCwgaSkgKCgoUHlUdXBsZU9iamVjdCAqKShvcCkpLT5vYl9pdGVtW2ldKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91Y25oYXNoLmggYi9JbmNsdWRlL3Vjbmhhc2guaAppbmRleCA2MjMxYzk4Li42OWI3Nzc0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3Vjbmhhc2guaAorKysgYi9JbmNsdWRlL3Vjbmhhc2guaApAQCAtNiw3ICs2LDkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLS8qIHJldmlzZWQgdWNuaGFzaCBDQVBJIGludGVyZmFjZSAoZXhwb3J0ZWQgdGhyb3VnaCBhIFB5Q09iamVjdCkgKi8KKy8qIHJldmlzZWQgdWNuaGFzaCBDQVBJIGludGVyZmFjZSAoZXhwb3J0ZWQgdGhyb3VnaCBhICJ3cmFwcGVyIikgKi8KKworI2RlZmluZSBQeVVuaWNvZGVEYXRhX0NBUFNVTEVfTkFNRSAidW5pY29kZWRhdGEudWNuaGFzaF9DQVBJIgogCiB0eXBlZGVmIHN0cnVjdCB7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKaW5kZXggYzBhMWNhMS4uOWFiNzI0YSAxMDA2NDQKLS0tIGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKQEAgLTc0MCwxMCArNzQwLDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlVVRGNygKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBQeV9VTklDT0RFIGNoYXJzIHRvIGVuY29kZSAqLwotICAgIGludCBlbmNvZGVTZXRPLCAgICAgICAgICAgICAvKiBmb3JjZSB0aGUgZW5jb2RlciB0byBlbmNvZGUgY2hhcmFjdGVycyBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgTywgYXMgZGVzY3JpYmVkIGluIFJGQzIxNTIgKi8KLSAgICBpbnQgZW5jb2RlV2hpdGVTcGFjZSwgICAgICAgLyogZm9yY2UgdGhlIGVuY29kZXIgdG8gZW5jb2RlIHNwYWNlLCB0YWIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZWZlZWQgY2hhcmFjdGVycyAqLworICAgIGludCBiYXNlNjRTZXRPLCAgICAgICAgICAgICAvKiBFbmNvZGUgUkZDMjE1MiBTZXQgTyBjaGFyYWN0ZXJzIGluIGJhc2U2NCAqLworICAgIGludCBiYXNlNjRXaGl0ZVNwYWNlLCAgICAgICAvKiBFbmNvZGUgd2hpdGVzcGFjZSAoc3AsIGh0LCBubCwgY3IpIGluIGJhc2U2NCAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CiAKZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCmluZGV4IDEwNTBlYTkuLjVjZGIwMWUgMTAwNjQ0Ci0tLSBhL0xJQ0VOU0UKKysrIGIvTElDRU5TRQpAQCAtNjMsNiArNjMsNyBAQAogICAgIDIuNi4zICAgICAgICAgICAyLjYuMiAgICAgICAyMDA5ICAgICAgICBQU0YgICAgICAgICB5ZXMKICAgICAyLjYuNCAgICAgICAgICAgMi42LjMgICAgICAgMjAwOSAgICAgICAgUFNGICAgICAgICAgeWVzCiAgICAgMi42LjUgICAgICAgICAgIDIuNi40ICAgICAgIDIwMTAgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuNyAgICAgICAgICAgICAyLjYgICAgICAgICAyMDEwICAgICAgICBQU0YgICAgICAgICB5ZXMKIAogRm9vdG5vdGVzOgogCmRpZmYgLS1naXQgYS9MaWIvQmFzZUhUVFBTZXJ2ZXIucHkgYi9MaWIvQmFzZUhUVFBTZXJ2ZXIucHkKaW5kZXggNmMwY2Y0Ni4uZGEwNDMxNSAxMDA2NDQKLS0tIGEvTGliL0Jhc2VIVFRQU2VydmVyLnB5CisrKyBiL0xpYi9CYXNlSFRUUFNlcnZlci5weQpAQCAtMzA5LDE4ICszMDksMzIgQEAKICAgICAgICAgY29tbWFuZHMgc3VjaCBhcyBHRVQgYW5kIFBPU1QuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucmF3X3JlcXVlc3RsaW5lID0gc2VsZi5yZmlsZS5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBzZWxmLnJhd19yZXF1ZXN0bGluZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yYXdfcmVxdWVzdGxpbmUgPSBzZWxmLnJmaWxlLnJlYWRsaW5lKDY1NTM3KQorICAgICAgICAgICAgaWYgbGVuKHNlbGYucmF3X3JlcXVlc3RsaW5lKSA+IDY1NTM2OgorICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdGxpbmUgPSAnJworICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdF92ZXJzaW9uID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQgPSAnJworICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MTQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5yYXdfcmVxdWVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IHNlbGYucGFyc2VfcmVxdWVzdCgpOgorICAgICAgICAgICAgICAgICMgQW4gZXJyb3IgY29kZSBoYXMgYmVlbiBzZW50LCBqdXN0IGV4aXQKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG1uYW1lID0gJ2RvXycgKyBzZWxmLmNvbW1hbmQKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIG1uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNTAxLCAiVW5zdXBwb3J0ZWQgbWV0aG9kICglcikiICUgc2VsZi5jb21tYW5kKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZCgpCisgICAgICAgICAgICBzZWxmLndmaWxlLmZsdXNoKCkgI2FjdHVhbGx5IHNlbmQgdGhlIHJlc3BvbnNlIGlmIG5vdCBhbHJlYWR5IGRvbmUuCisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCwgZToKKyAgICAgICAgICAgICNhIHJlYWQgb3IgYSB3cml0ZSB0aW1lZCBvdXQuICBEaXNjYXJkIHRoaXMgY29ubmVjdGlvbgorICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIlJlcXVlc3QgdGltZWQgb3V0OiAlciIsIGUpCiAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IHNlbGYucGFyc2VfcmVxdWVzdCgpOiAjIEFuIGVycm9yIGNvZGUgaGFzIGJlZW4gc2VudCwganVzdCBleGl0Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgbW5hbWUgPSAnZG9fJyArIHNlbGYuY29tbWFuZAotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCBtbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNTAxLCAiVW5zdXBwb3J0ZWQgbWV0aG9kICglcikiICUgc2VsZi5jb21tYW5kKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbW5hbWUpCi0gICAgICAgIG1ldGhvZCgpCiAKICAgICBkZWYgaGFuZGxlKHNlbGYpOgogICAgICAgICAiIiJIYW5kbGUgbXVsdGlwbGUgcmVxdWVzdHMgaWYgbmVjZXNzYXJ5LiIiIgpkaWZmIC0tZ2l0IGEvTGliL0NHSUhUVFBTZXJ2ZXIucHkgYi9MaWIvQ0dJSFRUUFNlcnZlci5weQppbmRleCBhODI5NjIxLi4xM2NhMGI1IDEwMDY0NAotLS0gYS9MaWIvQ0dJSFRUUFNlcnZlci5weQorKysgYi9MaWIvQ0dJSFRUUFNlcnZlci5weQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IEJhc2VIVFRQU2VydmVyCiBpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgogaW1wb3J0IHNlbGVjdAoraW1wb3J0IGNvcHkKIAogCiBjbGFzcyBDR0lIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgpAQCAtNzAsMjcgKzcxLDIzIEBACiAgICAgICAgICAgICByZXR1cm4gU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9oZWFkKHNlbGYpCiAKICAgICBkZWYgaXNfY2dpKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHdoZXRoZXIgc2VsZi5wYXRoIGNvcnJlc3BvbmRzIHRvIGEgQ0dJIHNjcmlwdCwKLSAgICAgICAgYW5kIHJldHVybiBhIGJvb2xlYW4uCisgICAgICAgICIiIlRlc3Qgd2hldGhlciBzZWxmLnBhdGggY29ycmVzcG9uZHMgdG8gYSBDR0kgc2NyaXB0LgogCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyBzZWxmLmNnaV9pbmZvIHRvIGEgdHVwbGUgKGRpciwgcmVzdCkKLSAgICAgICAgd2hlbiBpdCByZXR1cm5zIFRydWUsIHdoZXJlIGRpciBpcyB0aGUgZGlyZWN0b3J5IHBhcnQgYmVmb3JlCi0gICAgICAgIHRoZSBDR0kgc2NyaXB0IG5hbWUuICBOb3RlIHRoYXQgcmVzdCBiZWdpbnMgd2l0aCBhCi0gICAgICAgIHNsYXNoIGlmIGl0IGlzIG5vdCBlbXB0eS4KKyAgICAgICAgUmV0dXJucyBUcnVlIGFuZCB1cGRhdGVzIHRoZSBjZ2lfaW5mbyBhdHRyaWJ1dGUgdG8gdGhlIHR1cGxlCisgICAgICAgIChkaXIsIHJlc3QpIGlmIHNlbGYucGF0aCByZXF1aXJlcyBydW5uaW5nIGEgQ0dJIHNjcmlwdC4KKyAgICAgICAgUmV0dXJucyBGYWxzZSBvdGhlcndpc2UuCiAKLSAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdGVzdHMgd2hldGhlciB0aGUgcGF0aAotICAgICAgICBiZWdpbnMgd2l0aCBvbmUgb2YgdGhlIHN0cmluZ3MgaW4gdGhlIGxpc3QKLSAgICAgICAgc2VsZi5jZ2lfZGlyZWN0b3JpZXMgKGFuZCB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAnLycKLSAgICAgICAgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nKS4KKyAgICAgICAgSWYgYW55IGV4Y2VwdGlvbiBpcyByYWlzZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGFzc3VtZSB0aGF0CisgICAgICAgIHNlbGYucGF0aCB3YXMgcmVqZWN0ZWQgYXMgaW52YWxpZCBhbmQgYWN0IGFjY29yZGluZ2x5LgorCisgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIG5vcm1hbGl6ZWQgdXJsCisgICAgICAgIHBhdGggYmVnaW5zIHdpdGggb25lIG9mIHRoZSBzdHJpbmdzIGluIHNlbGYuY2dpX2RpcmVjdG9yaWVzCisgICAgICAgIChhbmQgdGhlIG5leHQgY2hhcmFjdGVyIGlzIGEgJy8nIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZykuCiAgICAgICAgICIiIgotCi0gICAgICAgIHBhdGggPSBzZWxmLnBhdGgKLQotICAgICAgICBmb3IgeCBpbiBzZWxmLmNnaV9kaXJlY3RvcmllczoKLSAgICAgICAgICAgIGkgPSBsZW4oeCkKLSAgICAgICAgICAgIGlmIHBhdGhbOmldID09IHggYW5kIChub3QgcGF0aFtpOl0gb3IgcGF0aFtpXSA9PSAnLycpOgotICAgICAgICAgICAgICAgIHNlbGYuY2dpX2luZm8gPSBwYXRoWzppXSwgcGF0aFtpKzE6XQotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHNwbGl0cGF0aCA9IF91cmxfY29sbGFwc2VfcGF0aF9zcGxpdChzZWxmLnBhdGgpCisgICAgICAgIGlmIHNwbGl0cGF0aFswXSBpbiBzZWxmLmNnaV9kaXJlY3RvcmllczoKKyAgICAgICAgICAgIHNlbGYuY2dpX2luZm8gPSBzcGxpdHBhdGgKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgY2dpX2RpcmVjdG9yaWVzID0gWycvY2dpLWJpbicsICcvaHRiaW4nXQpAQCAtMTU4LDcgKzE1NSw3IEBACiAKICAgICAgICAgIyBSZWZlcmVuY2U6IGh0dHA6Ly9ob29ob28ubmNzYS51aXVjLmVkdS9jZ2kvZW52Lmh0bWwKICAgICAgICAgIyBYWFggTXVjaCBvZiB0aGUgZm9sbG93aW5nIGNvdWxkIGJlIHByZXBhcmVkIGFoZWFkIG9mIHRpbWUhCi0gICAgICAgIGVudiA9IHt9CisgICAgICAgIGVudiA9IGNvcHkuZGVlcGNvcHkob3MuZW52aXJvbikKICAgICAgICAgZW52WydTRVJWRVJfU09GVFdBUkUnXSA9IHNlbGYudmVyc2lvbl9zdHJpbmcoKQogICAgICAgICBlbnZbJ1NFUlZFUl9OQU1FJ10gPSBzZWxmLnNlcnZlci5zZXJ2ZXJfbmFtZQogICAgICAgICBlbnZbJ0dBVEVXQVlfSU5URVJGQUNFJ10gPSAnQ0dJLzEuMScKQEAgLTIyMCw3ICsyMTcsNiBAQAogICAgICAgICBmb3IgayBpbiAoJ1FVRVJZX1NUUklORycsICdSRU1PVEVfSE9TVCcsICdDT05URU5UX0xFTkdUSCcsCiAgICAgICAgICAgICAgICAgICAnSFRUUF9VU0VSX0FHRU5UJywgJ0hUVFBfQ09PS0lFJywgJ0hUVFBfUkVGRVJFUicpOgogICAgICAgICAgICAgZW52LnNldGRlZmF1bHQoaywgIiIpCi0gICAgICAgIG9zLmVudmlyb24udXBkYXRlKGVudikKIAogICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwLCAiU2NyaXB0IG91dHB1dCBmb2xsb3dzIikKIApAQCAtMjUyLDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQotICAgICAgICAgICAgICAgIG9zLmV4ZWN2ZShzY3JpcHRmaWxlLCBhcmdzLCBvcy5lbnZpcm9uKQorICAgICAgICAgICAgICAgIG9zLmV4ZWN2ZShzY3JpcHRmaWxlLCBhcmdzLCBlbnYpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlX2Vycm9yKHNlbGYucmVxdWVzdCwgc2VsZi5jbGllbnRfYWRkcmVzcykKICAgICAgICAgICAgICAgICBvcy5fZXhpdCgxMjcpCkBAIC0yNzgsNyArMjc0LDggQEAKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiA9IHN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52ID0gZW52CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgIGlmIHNlbGYuY29tbWFuZC5sb3dlcigpID09ICJwb3N0IiBhbmQgbmJ5dGVzID4gMDoKICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5yZmlsZS5yZWFkKG5ieXRlcykKQEAgLTI5Miw2ICsyODksOCBAQAogICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShzdGRvdXQpCiAgICAgICAgICAgICBpZiBzdGRlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoJyVzJywgc3RkZXJyKQorICAgICAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgICAgICAgICAgc3RhdHVzID0gcC5yZXR1cm5jb2RlCiAgICAgICAgICAgICBpZiBzdGF0dXM6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNHSSBzY3JpcHQgZXhpdCBzdGF0dXMgJSN4Iiwgc3RhdHVzKQpAQCAtMjk5LDYgKzI5OCw0NiBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCisjIFRPRE8oZ3JlZ29yeS5wLnNtaXRoKTogTW92ZSB0aGlzIGludG8gYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4KK2RlZiBfdXJsX2NvbGxhcHNlX3BhdGhfc3BsaXQocGF0aCk6CisgICAgIiIiCisgICAgR2l2ZW4gYSBVUkwgcGF0aCwgcmVtb3ZlIGV4dHJhICcvJ3MgYW5kICcuJyBwYXRoIGVsZW1lbnRzIGFuZCBjb2xsYXBzZQorICAgIGFueSAnLi4nIHJlZmVyZW5jZXMuCisKKyAgICBJbXBsZW1lbnRzIHNvbWV0aGluZyBha2luIHRvIFJGQy0yMzk2IDUuMiBzdGVwIDYgdG8gcGFyc2UgcmVsYXRpdmUgcGF0aHMuCisKKyAgICBSZXR1cm5zOiBBIHR1cGxlIG9mIChoZWFkLCB0YWlsKSB3aGVyZSB0YWlsIGlzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpbmFsIC8KKyAgICBhbmQgaGVhZCBpcyBldmVyeXRoaW5nIGJlZm9yZSBpdC4gIEhlYWQgd2lsbCBhbHdheXMgc3RhcnQgd2l0aCBhICcvJyBhbmQsCisgICAgaWYgaXQgY29udGFpbnMgYW55dGhpbmcgZWxzZSwgbmV2ZXIgaGF2ZSBhIHRyYWlsaW5nICcvJy4KKworICAgIFJhaXNlczogSW5kZXhFcnJvciBpZiB0b28gbWFueSAnLi4nIG9jY3VyIHdpdGhpbiB0aGUgcGF0aC4KKyAgICAiIiIKKyAgICAjIFNpbWlsYXIgdG8gb3MucGF0aC5zcGxpdChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKSBidXQgc3BlY2lmaWMgdG8gVVJMCisgICAgIyBwYXRoIHNlbWFudGljcyByYXRoZXIgdGhhbiBsb2NhbCBvcGVyYXRpbmcgc3lzdGVtIHNlbWFudGljcy4KKyAgICBwYXRoX3BhcnRzID0gW10KKyAgICBmb3IgcGFydCBpbiBwYXRoLnNwbGl0KCcvJyk6CisgICAgICAgIGlmIHBhcnQgPT0gJy4nOgorICAgICAgICAgICAgcGF0aF9wYXJ0cy5hcHBlbmQoJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoX3BhcnRzLmFwcGVuZChwYXJ0KQorICAgICMgRmlsdGVyIG91dCBibGFuayBub24gdHJhaWxpbmcgcGFydHMgYmVmb3JlIGNvbnN1bWluZyB0aGUgJy4uJy4KKyAgICBwYXRoX3BhcnRzID0gW3BhcnQgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0c1s6LTFdIGlmIHBhcnRdICsgcGF0aF9wYXJ0c1stMTpdCisgICAgaWYgcGF0aF9wYXJ0czoKKyAgICAgICAgdGFpbF9wYXJ0ID0gcGF0aF9wYXJ0cy5wb3AoKQorICAgIGVsc2U6CisgICAgICAgIHRhaWxfcGFydCA9ICcnCisgICAgaGVhZF9wYXJ0cyA9IFtdCisgICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0czoKKyAgICAgICAgaWYgcGFydCA9PSAnLi4nOgorICAgICAgICAgICAgaGVhZF9wYXJ0cy5wb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGVhZF9wYXJ0cy5hcHBlbmQocGFydCkKKyAgICBpZiB0YWlsX3BhcnQgYW5kIHRhaWxfcGFydCA9PSAnLi4nOgorICAgICAgICBoZWFkX3BhcnRzLnBvcCgpCisgICAgICAgIHRhaWxfcGFydCA9ICcnCisgICAgcmV0dXJuICgnLycgKyAnLycuam9pbihoZWFkX3BhcnRzKSwgdGFpbF9wYXJ0KQorCisKIG5vYm9keSA9IE5vbmUKIAogZGVmIG5vYm9keV91aWQoKToKZGlmZiAtLWdpdCBhL0xpYi9Db25maWdQYXJzZXIucHkgYi9MaWIvQ29uZmlnUGFyc2VyLnB5CmluZGV4IGM3MmFiYjcuLjZjZjNjMmEgMTAwNjQ0Ci0tLSBhL0xpYi9Db25maWdQYXJzZXIucHkKKysrIGIvTGliL0NvbmZpZ1BhcnNlci5weQpAQCAtODcsNiArODcsMTIgQEAKICAgICAgICAgd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gc3RhdGUgaW4gLmluaSBmb3JtYXQKICIiIgogCit0cnk6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX2RlZmF1bHRfZGljdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgZmFsbGJhY2sgZm9yIHNldHVwLnB5IHdoaWNoIGhhc24ndCB5ZXQgYnVpbHQgX2NvbGxlY3Rpb25zCisgICAgX2RlZmF1bHRfZGljdCA9IGRpY3QKKwogaW1wb3J0IHJlCiAKIF9fYWxsX18gPSBbIk5vU2VjdGlvbkVycm9yIiwgIkR1cGxpY2F0ZVNlY3Rpb25FcnJvciIsICJOb09wdGlvbkVycm9yIiwKQEAgLTIxNSwxMCArMjIxLDE1IEBACiAKIAogY2xhc3MgUmF3Q29uZmlnUGFyc2VyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9ZGljdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRzPU5vbmUsIGRpY3RfdHlwZT1fZGVmYXVsdF9kaWN0LAorICAgICAgICAgICAgICAgICBhbGxvd19ub192YWx1ZT1GYWxzZSk6CiAgICAgICAgIHNlbGYuX2RpY3QgPSBkaWN0X3R5cGUKICAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSBzZWxmLl9kaWN0KCkKICAgICAgICAgc2VsZi5fZGVmYXVsdHMgPSBzZWxmLl9kaWN0KCkKKyAgICAgICAgaWYgYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBzZWxmLl9vcHRjcmUgPSBzZWxmLk9QVENSRV9OVgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fb3B0Y3JlID0gc2VsZi5PUFRDUkUKICAgICAgICAgaWYgZGVmYXVsdHM6CiAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkZWZhdWx0cy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRzW3NlbGYub3B0aW9ueGZvcm0oa2V5KV0gPSB2YWx1ZQpAQCAtMzY2LDcgKzM3Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gKG9wdGlvbiBpbiBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXQogICAgICAgICAgICAgICAgICAgICBvciBvcHRpb24gaW4gc2VsZi5fZGVmYXVsdHMpCiAKLSAgICBkZWYgc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZT1Ob25lKToKICAgICAgICAgIiIiU2V0IGFuIG9wdGlvbi4iIiIKICAgICAgICAgaWYgbm90IHNlY3Rpb24gb3Igc2VjdGlvbiA9PSBERUZBVUxUU0VDVDoKICAgICAgICAgICAgIHNlY3RkaWN0ID0gc2VsZi5fZGVmYXVsdHMKQEAgLTM4Nyw5ICszOTgsMTEgQEAKICAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5fc2VjdGlvbnM6CiAgICAgICAgICAgICBmcC53cml0ZSgiWyVzXVxuIiAlIHNlY3Rpb24pCiAgICAgICAgICAgICBmb3IgKGtleSwgdmFsdWUpIGluIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYga2V5ICE9ICJfX25hbWVfXyI6Ci0gICAgICAgICAgICAgICAgICAgIGZwLndyaXRlKCIlcyA9ICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgc3RyKHZhbHVlKS5yZXBsYWNlKCdcbicsICdcblx0JykpKQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAiX19uYW1lX18iOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpcyBub3QgTm9uZSkgb3IgKHNlbGYuX29wdGNyZSA9PSBzZWxmLk9QVENSRSk6CisgICAgICAgICAgICAgICAgICAgIGtleSA9ICIgPSAiLmpvaW4oKGtleSwgc3RyKHZhbHVlKS5yZXBsYWNlKCdcbicsICdcblx0JykpKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKCIlc1xuIiAlIChrZXkpKQogICAgICAgICAgICAgZnAud3JpdGUoIlxuIikKIAogICAgIGRlZiByZW1vdmVfb3B0aW9uKHNlbGYsIHNlY3Rpb24sIG9wdGlvbik6CkBAIC00MzAsNiArNDQzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBieSBhbnkgIyBzcGFjZS90YWIKICAgICAgICAgcicoP1A8dmFsdWU+LiopJCcgICAgICAgICAgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgdXAgdG8gZW9sCiAgICAgICAgICkKKyAgICBPUFRDUkVfTlYgPSByZS5jb21waWxlKAorICAgICAgICByJyg/UDxvcHRpb24+W146PVxzXVteOj1dKiknICAgICAgICAgICMgdmVyeSBwZXJtaXNzaXZlIQorICAgICAgICByJ1xzKig/OicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW55IG51bWJlciBvZiBzcGFjZS90YWIsCisgICAgICAgIHInKD9QPHZpPls6PV0pXHMqJyAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXBhcmF0b3IgKGVpdGhlciA6IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9KSwgZm9sbG93ZWQgYnkgYW55ICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNwYWNlL3RhYgorICAgICAgICByJyg/UDx2YWx1ZT4uKikpPyQnICAgICAgICAgICAgICAgICAgICMgZXZlcnl0aGluZyB1cCB0byBlb2wKKyAgICAgICAgKQogCiAgICAgZGVmIF9yZWFkKHNlbGYsIGZwLCBmcG5hbWUpOgogICAgICAgICAiIiJQYXJzZSBhIHNlY3Rpb25lZCBzZXR1cCBmaWxlLgpAQCAtNDQxLDEwICs0NjMsMTAgQEAKICAgICAgICAgbGVhZGluZyB3aGl0ZXNwYWNlLiAgQmxhbmsgbGluZXMsIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgJyMnLAogICAgICAgICBhbmQganVzdCBhYm91dCBldmVyeXRoaW5nIGVsc2UgYXJlIGlnbm9yZWQuCiAgICAgICAgICIiIgotICAgICAgICBjdXJzZWN0ID0gTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUsIG9yIGEgZGljdGlvbmFyeQorICAgICAgICBjdXJzZWN0ID0gTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICMgTm9uZSwgb3IgYSBkaWN0aW9uYXJ5CiAgICAgICAgIG9wdG5hbWUgPSBOb25lCiAgICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgZSA9IE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb25lLCBvciBhbiBleGNlcHRpb24KKyAgICAgICAgZSA9IE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUsIG9yIGFuIGV4Y2VwdGlvbgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgpAQCAtNDYwLDcgKzQ4Miw3IEBACiAgICAgICAgICAgICBpZiBsaW5lWzBdLmlzc3BhY2UoKSBhbmQgY3Vyc2VjdCBpcyBub3QgTm9uZSBhbmQgb3B0bmFtZToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgICAgICAgICBjdXJzZWN0W29wdG5hbWVdID0gIiVzXG4lcyIgJSAoY3Vyc2VjdFtvcHRuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0uYXBwZW5kKHZhbHVlKQogICAgICAgICAgICAgIyBhIHNlY3Rpb24gaGVhZGVyIG9yIG9wdGlvbiBoZWFkZXI/CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgaXMgaXQgYSBzZWN0aW9uIGhlYWRlcj8KQEAgLTQ4MiwyMSArNTA0LDI3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IoZnBuYW1lLCBsaW5lbm8sIGxpbmUpCiAgICAgICAgICAgICAgICAgIyBhbiBvcHRpb24gbGluZT8KICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtbyA9IHNlbGYuT1BUQ1JFLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIG1vID0gc2VsZi5fb3B0Y3JlLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGlmIG1vOgogICAgICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSwgdmksIG9wdHZhbCA9IG1vLmdyb3VwKCdvcHRpb24nLCAndmknLCAndmFsdWUnKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmkgaW4gKCc9JywgJzonKSBhbmQgJzsnIGluIG9wdHZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICc7JyBpcyBhIGNvbW1lbnQgZGVsaW1pdGVyIG9ubHkgaWYgaXQgZm9sbG93cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBzcGFjaW5nIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG9wdHZhbC5maW5kKCc7JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwb3MgIT0gLTEgYW5kIG9wdHZhbFtwb3MtMV0uaXNzcGFjZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSBvcHR2YWxbOnBvc10KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9IG9wdHZhbC5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93IGVtcHR5IHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0dmFsID09ICciIic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0dmFsID0gJycKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdG5hbWUgPSBzZWxmLm9wdGlvbnhmb3JtKG9wdG5hbWUucnN0cmlwKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0W29wdG5hbWVdID0gb3B0dmFsCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY2hlY2sgaXMgZmluZSBiZWNhdXNlIHRoZSBPUFRDUkUgY2Fubm90CisgICAgICAgICAgICAgICAgICAgICAgICAjIG1hdGNoIGlmIGl0IHdvdWxkIHNldCBvcHR2YWwgdG8gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0dmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZpIGluICgnPScsICc6JykgYW5kICc7JyBpbiBvcHR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJzsnIGlzIGEgY29tbWVudCBkZWxpbWl0ZXIgb25seSBpZiBpdCBmb2xsb3dzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBzcGFjaW5nIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBvcHR2YWwuZmluZCgnOycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBvcyAhPSAtMSBhbmQgb3B0dmFsW3Bvcy0xXS5pc3NwYWNlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSBvcHR2YWxbOnBvc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSBvcHR2YWwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZW1wdHkgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0dmFsID09ICciIic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9ICcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXSA9IFtvcHR2YWxdCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmFsdWVsZXNzIG9wdGlvbiBoYW5kbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gPSBvcHR2YWwKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBub24tZmF0YWwgcGFyc2luZyBlcnJvciBvY2N1cnJlZC4gIHNldCB1cCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uIGJ1dCBrZWVwIGdvaW5nLiB0aGUgZXhjZXB0aW9uIHdpbGwgYmUKQEAgLTUwOSw2ICs1MzcsNDUgQEAKICAgICAgICAgaWYgZToKICAgICAgICAgICAgIHJhaXNlIGUKIAorICAgICAgICAjIGpvaW4gdGhlIG11bHRpLWxpbmUgdmFsdWVzIGNvbGxlY3RlZCB3aGlsZSByZWFkaW5nCisgICAgICAgIGFsbF9zZWN0aW9ucyA9IFtzZWxmLl9kZWZhdWx0c10KKyAgICAgICAgYWxsX3NlY3Rpb25zLmV4dGVuZChzZWxmLl9zZWN0aW9ucy52YWx1ZXMoKSkKKyAgICAgICAgZm9yIG9wdGlvbnMgaW4gYWxsX3NlY3Rpb25zOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbCBpbiBvcHRpb25zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zW25hbWVdID0gJ1xuJy5qb2luKHZhbCkKKworaW1wb3J0IFVzZXJEaWN0IGFzIF9Vc2VyRGljdAorCitjbGFzcyBfQ2hhaW5tYXAoX1VzZXJEaWN0LkRpY3RNaXhpbik6CisgICAgIiIiQ29tYmluZSBtdWx0aXBsZSBtYXBwaW5ncyBmb3Igc3VjY2Vzc2l2ZSBsb29rdXBzLgorCisgICAgRm9yIGV4YW1wbGUsIHRvIGVtdWxhdGUgUHl0aG9uJ3Mgbm9ybWFsIGxvb2t1cCBzZXF1ZW5jZToKKworICAgICAgICBpbXBvcnQgX19idWlsdGluX18KKyAgICAgICAgcHlsb29rdXAgPSBfQ2hhaW5tYXAobG9jYWxzKCksIGdsb2JhbHMoKSwgdmFycyhfX2J1aWx0aW5fXykpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKm1hcHMpOgorICAgICAgICBzZWxmLl9tYXBzID0gbWFwcworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYuX21hcHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdba2V5XQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIHNlZW4gPSBzZXQoKQorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmX21hcHM6CisgICAgICAgICAgICBmb3Iga2V5IGluIG1hcHBpbmc6CisgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5hZGQoa2V5KQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKIGNsYXNzIENvbmZpZ1BhcnNlcihSYXdDb25maWdQYXJzZXIpOgogCkBAIC01MjQsMjMgKzU5MSwyNSBAQAogCiAgICAgICAgIFRoZSBzZWN0aW9uIERFRkFVTFQgaXMgc3BlY2lhbC4KICAgICAgICAgIiIiCi0gICAgICAgIGQgPSBzZWxmLl9kZWZhdWx0cy5jb3B5KCkKKyAgICAgICAgc2VjdGlvbmRpY3QgPSB7fQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkLnVwZGF0ZShzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXSkKKyAgICAgICAgICAgIHNlY3Rpb25kaWN0ID0gc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgaWYgc2VjdGlvbiAhPSBERUZBVUxUU0VDVDoKICAgICAgICAgICAgICAgICByYWlzZSBOb1NlY3Rpb25FcnJvcihzZWN0aW9uKQogICAgICAgICAjIFVwZGF0ZSB3aXRoIHRoZSBlbnRyeSBzcGVjaWZpYyB2YXJpYWJsZXMKKyAgICAgICAgdmFyZGljdCA9IHt9CiAgICAgICAgIGlmIHZhcnM6CiAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2YXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgZFtzZWxmLm9wdGlvbnhmb3JtKGtleSldID0gdmFsdWUKKyAgICAgICAgICAgICAgICB2YXJkaWN0W3NlbGYub3B0aW9ueGZvcm0oa2V5KV0gPSB2YWx1ZQorICAgICAgICBkID0gX0NoYWlubWFwKHZhcmRpY3QsIHNlY3Rpb25kaWN0LCBzZWxmLl9kZWZhdWx0cykKICAgICAgICAgb3B0aW9uID0gc2VsZi5vcHRpb254Zm9ybShvcHRpb24pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gZFtvcHRpb25dCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIE5vT3B0aW9uRXJyb3Iob3B0aW9uLCBzZWN0aW9uKQogCi0gICAgICAgIGlmIHJhdzoKKyAgICAgICAgaWYgcmF3IG9yIHZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcnBvbGF0ZShzZWN0aW9uLCBvcHRpb24sIHZhbHVlLCBkKQpAQCAtNTgzLDcgKzY1Miw3IEBACiAgICAgICAgIGRlcHRoID0gTUFYX0lOVEVSUE9MQVRJT05fREVQVEgKICAgICAgICAgd2hpbGUgZGVwdGg6ICAgICAgICAgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCB0aGlzIHVudGlsIGl0J3MgZG9uZQogICAgICAgICAgICAgZGVwdGggLT0gMQotICAgICAgICAgICAgaWYgIiUoIiBpbiB2YWx1ZToKKyAgICAgICAgICAgIGlmIHZhbHVlIGFuZCAiJSgiIGluIHZhbHVlOgogICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fS0VZQ1JFLnN1YihzZWxmLl9pbnRlcnBvbGF0aW9uX3JlcGxhY2UsIHZhbHVlKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAlIHZhcnMKQEAgLTU5Miw3ICs2NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIGUuYXJnc1swXSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgIiUoIiBpbiB2YWx1ZToKKyAgICAgICAgaWYgdmFsdWUgYW5kICIlKCIgaW4gdmFsdWU6CiAgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uRGVwdGhFcnJvcihvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCkKICAgICAgICAgcmV0dXJuIHZhbHVlCiAKQEAgLTY1NCwxNyArNzIzLDIzIEBACiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIiclJScgbXVzdCBiZSBmb2xsb3dlZCBieSAnJSUnIG9yICcoJywgZm91bmQ6ICVyIiAlIChyZXN0LCkpCiAKLSAgICBkZWYgc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZT1Ob25lKToKICAgICAgICAgIiIiU2V0IGFuIG9wdGlvbi4gIEV4dGVuZCBDb25maWdQYXJzZXIuc2V0OiBjaGVjayBmb3Igc3RyaW5nIHZhbHVlcy4iIiIKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJvcHRpb24gdmFsdWVzIG11c3QgYmUgc3RyaW5ncyIpCi0gICAgICAgICMgY2hlY2sgZm9yIGJhZCBwZXJjZW50IHNpZ25zOgotICAgICAgICAjIGZpcnN0LCByZXBsYWNlIGFsbCAiZ29vZCIgaW50ZXJwb2xhdGlvbnMKLSAgICAgICAgdG1wX3ZhbHVlID0gdmFsdWUucmVwbGFjZSgnJSUnLCAnJykKLSAgICAgICAgdG1wX3ZhbHVlID0gc2VsZi5faW50ZXJwdmFyX3JlLnN1YignJywgdG1wX3ZhbHVlKQotICAgICAgICAjIHRoZW4sIGNoZWNrIGlmIHRoZXJlJ3MgYSBsb25lIHBlcmNlbnQgc2lnbiBsZWZ0Ci0gICAgICAgIHBlcmNlbnRfaW5kZXggPSB0bXBfdmFsdWUuZmluZCgnJScpCi0gICAgICAgIGlmIHBlcmNlbnRfaW5kZXggIT0gLTE6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGludGVycG9sYXRpb24gc3ludGF4IGluICVyIGF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uICVkIiAlICh2YWx1ZSwgcGVyY2VudF9pbmRleCkpCisgICAgICAgICMgVGhlIG9ubHkgbGVnYWwgbm9uLXN0cmluZyB2YWx1ZSBpZiB3ZSBhbGxvdyB2YWx1ZWxlc3MKKyAgICAgICAgIyBvcHRpb25zIGlzIE5vbmUsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHZhbHVlIGlzIGEKKyAgICAgICAgIyBzdHJpbmcgaWY6CisgICAgICAgICMgLSB3ZSBkbyBub3QgYWxsb3cgdmFsdWVsZXNzIG9wdGlvbnMsIG9yCisgICAgICAgICMgLSB3ZSBhbGxvdyB2YWx1ZWxlc3Mgb3B0aW9ucyBidXQgdGhlIHZhbHVlIGlzIG5vdCBOb25lCisgICAgICAgIGlmIHNlbGYuX29wdGNyZSBpcyBzZWxmLk9QVENSRSBvciB2YWx1ZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm9wdGlvbiB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGNoZWNrIGZvciBiYWQgcGVyY2VudCBzaWduczoKKyAgICAgICAgICAgICMgZmlyc3QsIHJlcGxhY2UgYWxsICJnb29kIiBpbnRlcnBvbGF0aW9ucworICAgICAgICAgICAgdG1wX3ZhbHVlID0gdmFsdWUucmVwbGFjZSgnJSUnLCAnJykKKyAgICAgICAgICAgIHRtcF92YWx1ZSA9IHNlbGYuX2ludGVycHZhcl9yZS5zdWIoJycsIHRtcF92YWx1ZSkKKyAgICAgICAgICAgICMgdGhlbiwgY2hlY2sgaWYgdGhlcmUncyBhIGxvbmUgcGVyY2VudCBzaWduIGxlZnQKKyAgICAgICAgICAgIGlmICclJyBpbiB0bXBfdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBpbnRlcnBvbGF0aW9uIHN5bnRheCBpbiAlciBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiAlZCIgJSAodmFsdWUsIHRtcF92YWx1ZS5maW5kKCclJykpKQogICAgICAgICBDb25maWdQYXJzZXIuc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCmRpZmYgLS1naXQgYS9MaWIvQ29va2llLnB5IGIvTGliL0Nvb2tpZS5weQppbmRleCA2MDBkMjEyLi4zMjM0NTBiIDEwMDY0NAotLS0gYS9MaWIvQ29va2llLnB5CisrKyBiL0xpYi9Db29raWUucHkKQEAgLTI1OCw2ICsyNTgsMTEgQEAKICAgICAnXDAzMycgOiAnXFwwMzMnLCAgJ1wwMzQnIDogJ1xcMDM0JywgICdcMDM1JyA6ICdcXDAzNScsCiAgICAgJ1wwMzYnIDogJ1xcMDM2JywgICdcMDM3JyA6ICdcXDAzNycsCiAKKyAgICAjIEJlY2F1c2Ugb2YgdGhlIHdheSBicm93c2VycyByZWFsbHkgaGFuZGxlIGNvb2tpZXMgKGFzIG9wcG9zZWQKKyAgICAjIHRvIHdoYXQgdGhlIFJGQyBzYXlzKSB3ZSBhbHNvIGVuY29kZSAsIGFuZCA7CisKKyAgICAnLCcgOiAnXFwwNTQnLCAnOycgOiAnXFwwNzMnLAorCiAgICAgJyInIDogJ1xcIicsICAgICAgICdcXCcgOiAnXFxcXCcsCiAKICAgICAnXDE3NycgOiAnXFwxNzcnLCAgJ1wyMDAnIDogJ1xcMjAwJywgICdcMjAxJyA6ICdcXDIwMScsCkBAIC00NzcsNyArNDgyLDcgQEAKICAgICAgICAgZG9jdW1lbnQuY29va2llID0gXCIlc1wiOwogICAgICAgICAvLyBlbmQgaGlkaW5nIC0tPgogICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgIiIiICUgKCBzZWxmLk91dHB1dFN0cmluZyhhdHRycyksICkKKyAgICAgICAgIiIiICUgKCBzZWxmLk91dHB1dFN0cmluZyhhdHRycykucmVwbGFjZSgnIicscidcIicpLCApCiAgICAgIyBlbmQganNfb3V0cHV0KCkKIAogICAgIGRlZiBPdXRwdXRTdHJpbmcoc2VsZiwgYXR0cnM9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvRG9jWE1MUlBDU2VydmVyLnB5IGIvTGliL0RvY1hNTFJQQ1NlcnZlci5weQppbmRleCA0MzJiM2MzLi40MDY0ZWMyIDEwMDY0NAotLS0gYS9MaWIvRG9jWE1MUlBDU2VydmVyLnB5CisrKyBiL0xpYi9Eb2NYTUxSUENTZXJ2ZXIucHkKQEAgLTI0MCwxMCArMjQwLDYgQEAKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCiAKLSAgICAgICAgIyBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgc2VsZi53ZmlsZS5mbHVzaCgpCi0gICAgICAgIHNlbGYuY29ubmVjdGlvbi5zaHV0ZG93bigxKQotCiBjbGFzcyBEb2NYTUxSUENTZXJ2ZXIoICBTaW1wbGVYTUxSUENTZXJ2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBYTUxSUENEb2NHZW5lcmF0b3IpOgogICAgICIiIlhNTC1SUEMgYW5kIEhUTUwgZG9jdW1lbnRhdGlvbiBzZXJ2ZXIuCmRpZmYgLS1naXQgYS9MaWIvSFRNTFBhcnNlci5weSBiL0xpYi9IVE1MUGFyc2VyLnB5CmluZGV4IDdjZWU0N2EuLjRmZGMwOWEgMTAwNjQ0Ci0tLSBhL0xpYi9IVE1MUGFyc2VyLnB5CisrKyBiL0xpYi9IVE1MUGFyc2VyLnB5CkBAIC0zNjcsMTMgKzM2NywxNiBAQAogICAgICAgICAgICAgcmV0dXJuIHMKICAgICAgICAgZGVmIHJlcGxhY2VFbnRpdGllcyhzKToKICAgICAgICAgICAgIHMgPSBzLmdyb3VwcygpWzBdCi0gICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKLSAgICAgICAgICAgICAgICBzID0gc1sxOl0KLSAgICAgICAgICAgICAgICBpZiBzWzBdIGluIFsneCcsJ1gnXToKLSAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XSwgMTYpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYyA9IGludChzKQotICAgICAgICAgICAgICAgIHJldHVybiB1bmljaHIoYykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNbMTpdCisgICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgorICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XSwgMTYpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmljaHIoYykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAnJiMnK3MrJzsnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQ2Fubm90IHVzZSBuYW1lMmNvZGVwb2ludCBkaXJlY3RseSwgYmVjYXVzZSBIVE1MUGFyc2VyIHN1cHBvcnRzIGFwb3MsCiAgICAgICAgICAgICAgICAgIyB3aGljaCBpcyBub3QgcGFydCBvZiBIVE1MIDQKZGlmZiAtLWdpdCBhL0xpYi9RdWV1ZS5weSBiL0xpYi9RdWV1ZS5weQppbmRleCA3NzNiNjgwLi4yZGI4ZDc2IDEwMDY0NAotLS0gYS9MaWIvUXVldWUucHkKKysrIGIvTGliL1F1ZXVlLnB5CkBAIC0xLDYgKzEsMTAgQEAKICIiIkEgbXVsdGktcHJvZHVjZXIsIG11bHRpLWNvbnN1bWVyIHF1ZXVlLiIiIgogCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nIGFzIF90aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIF90aHJlYWRpbmcKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBpbXBvcnQgaGVhcHEKIApAQCAtMjAsMjYgKzI0LDIyIEBACiAgICAgSWYgbWF4c2l6ZSBpcyA8PSAwLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZwogICAgICAgICBzZWxmLm1heHNpemUgPSBtYXhzaXplCiAgICAgICAgIHNlbGYuX2luaXQobWF4c2l6ZSkKICAgICAgICAgIyBtdXRleCBtdXN0IGJlIGhlbGQgd2hlbmV2ZXIgdGhlIHF1ZXVlIGlzIG11dGF0aW5nLiAgQWxsIG1ldGhvZHMKICAgICAgICAgIyB0aGF0IGFjcXVpcmUgbXV0ZXggbXVzdCByZWxlYXNlIGl0IGJlZm9yZSByZXR1cm5pbmcuICBtdXRleAogICAgICAgICAjIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSB0aHJlZSBjb25kaXRpb25zLCBzbyBhY3F1aXJpbmcgYW5kCiAgICAgICAgICMgcmVsZWFzaW5nIHRoZSBjb25kaXRpb25zIGFsc28gYWNxdWlyZXMgYW5kIHJlbGVhc2VzIG11dGV4LgotICAgICAgICBzZWxmLm11dGV4ID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLm11dGV4ID0gX3RocmVhZGluZy5Mb2NrKCkKICAgICAgICAgIyBOb3RpZnkgbm90X2VtcHR5IHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIHF1ZXVlOyBhCiAgICAgICAgICMgdGhyZWFkIHdhaXRpbmcgdG8gZ2V0IGlzIG5vdGlmaWVkIHRoZW4uCi0gICAgICAgIHNlbGYubm90X2VtcHR5ID0gdGhyZWFkaW5nLkNvbmRpdGlvbihzZWxmLm11dGV4KQorICAgICAgICBzZWxmLm5vdF9lbXB0eSA9IF90aHJlYWRpbmcuQ29uZGl0aW9uKHNlbGYubXV0ZXgpCiAgICAgICAgICMgTm90aWZ5IG5vdF9mdWxsIHdoZW5ldmVyIGFuIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZTsKICAgICAgICAgIyBhIHRocmVhZCB3YWl0aW5nIHRvIHB1dCBpcyBub3RpZmllZCB0aGVuLgotICAgICAgICBzZWxmLm5vdF9mdWxsID0gdGhyZWFkaW5nLkNvbmRpdGlvbihzZWxmLm11dGV4KQorICAgICAgICBzZWxmLm5vdF9mdWxsID0gX3RocmVhZGluZy5Db25kaXRpb24oc2VsZi5tdXRleCkKICAgICAgICAgIyBOb3RpZnkgYWxsX3Rhc2tzX2RvbmUgd2hlbmV2ZXIgdGhlIG51bWJlciBvZiB1bmZpbmlzaGVkIHRhc2tzCiAgICAgICAgICMgZHJvcHMgdG8gemVybzsgdGhyZWFkIHdhaXRpbmcgdG8gam9pbigpIGlzIG5vdGlmaWVkIHRvIHJlc3VtZQotICAgICAgICBzZWxmLmFsbF90YXNrc19kb25lID0gdGhyZWFkaW5nLkNvbmRpdGlvbihzZWxmLm11dGV4KQorICAgICAgICBzZWxmLmFsbF90YXNrc19kb25lID0gX3RocmVhZGluZy5Db25kaXRpb24oc2VsZi5tdXRleCkKICAgICAgICAgc2VsZi51bmZpbmlzaGVkX3Rhc2tzID0gMAogCiAgICAgZGVmIHRhc2tfZG9uZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkgYi9MaWIvU2ltcGxlWE1MUlBDU2VydmVyLnB5CmluZGV4IDZhZjJmMmYuLmIyYTU2MTAgMTAwNjQ0Ci0tLSBhL0xpYi9TaW1wbGVYTUxSUENTZXJ2ZXIucHkKKysrIGIvTGliL1NpbXBsZVhNTFJQQ1NlcnZlci5weQpAQCAtMTA2LDYgKzEwNiw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCByZQogdHJ5OgogICAgIGltcG9ydCBmY250bAogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTYwLDggKzE2MSw5IEBACiAgICAgIiIiTWl4LWluIGNsYXNzIHRoYXQgZGlzcGF0Y2hlcyBYTUwtUlBDIHJlcXVlc3RzLgogCiAgICAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlZ2lzdGVyIFhNTC1SUEMgbWV0aG9kIGhhbmRsZXJzCi0gICAgYW5kIHRoZW4gdG8gZGlzcGF0Y2ggdGhlbS4gVGhlcmUgc2hvdWxkIG5ldmVyIGJlIGFueQotICAgIHJlYXNvbiB0byBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzIGRpcmVjdGx5LgorICAgIGFuZCB0aGVuIHRvIGRpc3BhdGNoIHRoZW0uIFRoaXMgY2xhc3MgZG9lc24ndCBuZWVkIHRvIGJlCisgICAgaW5zdGFuY2VkIGRpcmVjdGx5IHdoZW4gdXNlZCBieSBTaW1wbGVYTUxSUENTZXJ2ZXIgYnV0IGl0CisgICAgY2FuIGJlIGluc3RhbmNlZCB3aGVuIHVzZWQgYnkgdGhlIE11bHRpUGF0aFhNTFJQQ1NlcnZlci4KICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbGxvd19ub25lPUZhbHNlLCBlbmNvZGluZz1Ob25lKToKQEAgLTIzNiw3ICsyMzgsNyBAQAogCiAgICAgICAgIHNlbGYuZnVuY3MudXBkYXRlKHsnc3lzdGVtLm11bHRpY2FsbCcgOiBzZWxmLnN5c3RlbV9tdWx0aWNhbGx9KQogCi0gICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSk6CisgICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSwgcGF0aCA9IE5vbmUpOgogICAgICAgICAiIiJEaXNwYXRjaGVzIGFuIFhNTC1SUEMgbWV0aG9kIGZyb20gbWFyc2hhbGxlZCAoWE1MKSBkYXRhLgogCiAgICAgICAgIFhNTC1SUEMgbWV0aG9kcyBhcmUgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYXJzaGFsbGVkIChYTUwpIGRhdGEKQEAgLTQzMCw2ICs0MzIsMzEgQEAKICAgICAjIHBhdGhzIG5vdCBvbiB0aGlzIGxpc3Qgd2lsbCByZXN1bHQgaW4gYSA0MDQgZXJyb3IuCiAgICAgcnBjX3BhdGhzID0gKCcvJywgJy9SUEMyJykKIAorICAgICNpZiBub3QgTm9uZSwgZW5jb2RlIHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGlzLCBpZiBwb3NzaWJsZQorICAgIGVuY29kZV90aHJlc2hvbGQgPSAxNDAwICNhIGNvbW1vbiBNVFUKKworICAgICNPdmVycmlkZSBmb3JtIFN0cmVhbVJlcXVlc3RIYW5kbGVyOiBmdWxsIGJ1ZmZlcmluZyBvZiBvdXRwdXQKKyAgICAjYW5kIG5vIE5hZ2xlLgorICAgIHdidWZzaXplID0gLTEKKyAgICBkaXNhYmxlX25hZ2xlX2FsZ29yaXRobSA9IFRydWUKKworICAgICMgYSByZSB0byBtYXRjaCBhIGd6aXAgQWNjZXB0LUVuY29kaW5nCisgICAgYWVwYXR0ZXJuID0gcmUuY29tcGlsZShyIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHMqIChbXlxzO10rKSBccyogICAgICAgICAgICAjY29udGVudC1jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoO1xzKiBxIFxzKj1ccyogKFswLTlcLl0rKSk/ICNxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkKKworICAgIGRlZiBhY2NlcHRfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICByID0ge30KKyAgICAgICAgYWUgPSBzZWxmLmhlYWRlcnMuZ2V0KCJBY2NlcHQtRW5jb2RpbmciLCAiIikKKyAgICAgICAgZm9yIGUgaW4gYWUuc3BsaXQoIiwiKToKKyAgICAgICAgICAgIG1hdGNoID0gc2VsZi5hZXBhdHRlcm4ubWF0Y2goZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIHYgPSBtYXRjaC5ncm91cCgzKQorICAgICAgICAgICAgICAgIHYgPSBmbG9hdCh2KSBpZiB2IGVsc2UgMS4wCisgICAgICAgICAgICAgICAgclttYXRjaC5ncm91cCgxKV0gPSB2CisgICAgICAgIHJldHVybiByCisKICAgICBkZWYgaXNfcnBjX3BhdGhfdmFsaWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucnBjX3BhdGhzOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucGF0aCBpbiBzZWxmLnJwY19wYXRocwpAQCAtNDYzLDEzICs0OTAsMTcgQEAKICAgICAgICAgICAgICAgICBzaXplX3JlbWFpbmluZyAtPSBsZW4oTFstMV0pCiAgICAgICAgICAgICBkYXRhID0gJycuam9pbihMKQogCisgICAgICAgICAgICBkYXRhID0gc2VsZi5kZWNvZGVfcmVxdWVzdF9jb250ZW50KGRhdGEpCisgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICNyZXNwb25zZSBoYXMgYmVlbiBzZW50CisKICAgICAgICAgICAgICMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgU2ltcGxlWE1MUlBDU2VydmVyLCBfZGlzcGF0Y2gKICAgICAgICAgICAgICMgY291bGQgYmUgb3ZlcnJpZGRlbiBpbiB0aGlzIGNsYXNzLCBpbnN0ZWFkIG9mIGluCiAgICAgICAgICAgICAjIFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuIFRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAogICAgICAgICAgICAgIyBjaGVjayB0byBzZWUgaWYgYSBzdWJjbGFzcyBpbXBsZW1lbnRzIF9kaXNwYXRjaCBhbmQgZGlzcGF0Y2gKICAgICAgICAgICAgICMgdXNpbmcgdGhhdCBtZXRob2QgaWYgcHJlc2VudC4KICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5zZXJ2ZXIuX21hcnNoYWxlZF9kaXNwYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgZGF0YSwgZ2V0YXR0cihzZWxmLCAnX2Rpc3BhdGNoJywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YSwgZ2V0YXR0cihzZWxmLCAnX2Rpc3BhdGNoJywgTm9uZSksIHNlbGYucGF0aAogICAgICAgICAgICAgICAgICkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZTogIyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgbW9kdWxlIGlzIGJ1Z2d5CiAgICAgICAgICAgICAjIGludGVybmFsIGVycm9yLCByZXBvcnQgYXMgSFRUUCBzZXJ2ZXIgZXJyb3IKQEAgLTQ4MSwxOCArNTEyLDQxIEBACiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiWC1leGNlcHRpb24iLCBzdHIoZSkpCiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiWC10cmFjZWJhY2siLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsICIwIikKICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBnb3QgYSB2YWxpZCBYTUwgUlBDIHJlc3BvbnNlCiAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQveG1sIikKKyAgICAgICAgICAgIGlmIHNlbGYuZW5jb2RlX3RocmVzaG9sZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsZW4ocmVzcG9uc2UpID4gc2VsZi5lbmNvZGVfdGhyZXNob2xkOgorICAgICAgICAgICAgICAgICAgICBxID0gc2VsZi5hY2NlcHRfZW5jb2RpbmdzKCkuZ2V0KCJnemlwIiwgMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5nemlwX2VuY29kZShyZXNwb25zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LUVuY29kaW5nIiwgImd6aXAiKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCBzdHIobGVuKHJlc3BvbnNlKSkpCiAgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCiAKLSAgICAgICAgICAgICMgc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICAgICBzZWxmLndmaWxlLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbi5zaHV0ZG93bigxKQorICAgIGRlZiBkZWNvZGVfcmVxdWVzdF9jb250ZW50KHNlbGYsIGRhdGEpOgorICAgICAgICAjc3VwcG9ydCBnemlwIGVuY29kaW5nIG9mIHJlcXVlc3QKKyAgICAgICAgZW5jb2RpbmcgPSBzZWxmLmhlYWRlcnMuZ2V0KCJjb250ZW50LWVuY29kaW5nIiwgImlkZW50aXR5IikubG93ZXIoKQorICAgICAgICBpZiBlbmNvZGluZyA9PSAiaWRlbnRpdHkiOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgaWYgZW5jb2RpbmcgPT0gImd6aXAiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiB4bWxycGNsaWIuZ3ppcF9kZWNvZGUoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg1MDEsICJlbmNvZGluZyAlciBub3Qgc3VwcG9ydGVkIiAlIGVuY29kaW5nKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDQwMCwgImVycm9yIGRlY29kaW5nIGd6aXAgY29udGVudCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAxLCAiZW5jb2RpbmcgJXIgbm90IHN1cHBvcnRlZCIgJSBlbmNvZGluZykKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCAiMCIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogCiAgICAgZGVmIHJlcG9ydF80MDQgKHNlbGYpOgogICAgICAgICAgICAgIyBSZXBvcnQgYSA0MDQgZXJyb3IKQEAgLTUwMiw5ICs1NTYsNiBAQAogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4ocmVzcG9uc2UpKSkKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCi0gICAgICAgICMgc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uCi0gICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKQotICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2h1dGRvd24oMSkKIAogICAgIGRlZiBsb2dfcmVxdWVzdChzZWxmLCBjb2RlPSctJywgc2l6ZT0nLScpOgogICAgICAgICAiIiJTZWxlY3RpdmVseSBsb2cgYW4gYWNjZXB0ZWQgcmVxdWVzdC4iIiIKQEAgLTU0Niw2ICs1OTcsNDQgQEAKICAgICAgICAgICAgIGZsYWdzIHw9IGZjbnRsLkZEX0NMT0VYRUMKICAgICAgICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkQsIGZsYWdzKQogCitjbGFzcyBNdWx0aVBhdGhYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKKyAgICAiIiJNdWx0aXBhdGggWE1MLVJQQyBTZXJ2ZXIKKyAgICBUaGlzIHNwZWNpYWxpemF0aW9uIG9mIFNpbXBsZVhNTFJQQ1NlcnZlciBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlCisgICAgbXVsdGlwbGUgRGlzcGF0Y2hlciBpbnN0YW5jZXMgYW5kIGFzc2lnbiB0aGVtIHRvIGRpZmZlcmVudAorICAgIEhUVFAgcmVxdWVzdCBwYXRocy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gcnVuIHR3byBvciBtb3JlCisgICAgJ3ZpcnR1YWwgWE1MLVJQQyBzZXJ2ZXJzJyBhdCB0aGUgc2FtZSBwb3J0LgorICAgIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0SGFuZGxlciBhY2NlcHRzIHRoZSBwYXRocyBpbiBxdWVzdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgcmVxdWVzdEhhbmRsZXI9U2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPVRydWUsIGFsbG93X25vbmU9RmFsc2UsIGVuY29kaW5nPU5vbmUsIGJpbmRfYW5kX2FjdGl2YXRlPVRydWUpOgorCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyLCByZXF1ZXN0SGFuZGxlciwgbG9nUmVxdWVzdHMsIGFsbG93X25vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgYmluZF9hbmRfYWN0aXZhdGUpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hlcnMgPSB7fQorICAgICAgICBzZWxmLmFsbG93X25vbmUgPSBhbGxvd19ub25lCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCisgICAgZGVmIGFkZF9kaXNwYXRjaGVyKHNlbGYsIHBhdGgsIGRpc3BhdGNoZXIpOgorICAgICAgICBzZWxmLmRpc3BhdGNoZXJzW3BhdGhdID0gZGlzcGF0Y2hlcgorICAgICAgICByZXR1cm4gZGlzcGF0Y2hlcgorCisgICAgZGVmIGdldF9kaXNwYXRjaGVyKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5kaXNwYXRjaGVyc1twYXRoXQorCisgICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSwgcGF0aCA9IE5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuZGlzcGF0Y2hlcnNbcGF0aF0uX21hcnNoYWxlZF9kaXNwYXRjaCgKKyAgICAgICAgICAgICAgIGRhdGEsIGRpc3BhdGNoX21ldGhvZCwgcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyByZXBvcnQgbG93IGxldmVsIGV4Y2VwdGlvbiBiYWNrIHRvIHNlcnZlcgorICAgICAgICAgICAgIyAoZWFjaCBkaXNwYXRjaGVyIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhlaXIgb3duCisgICAgICAgICAgICAjIGV4Y2VwdGlvbnMpCisgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcygKKyAgICAgICAgICAgICAgICB4bWxycGNsaWIuRmF1bHQoMSwgIiVzOiVzIiAlIChleGNfdHlwZSwgZXhjX3ZhbHVlKSksCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgYWxsb3dfbm9uZT1zZWxmLmFsbG93X25vbmUpCisgICAgICAgIHJldHVybiByZXNwb25zZQorCiBjbGFzcyBDR0lYTUxSUENSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENEaXNwYXRjaGVyKToKICAgICAiIiJTaW1wbGUgaGFuZGxlciBmb3IgWE1MLVJQQyBkYXRhIHBhc3NlZCB0aHJvdWdoIENHSS4iIiIKIApAQCAtNTgwLDcgKzY2OSw3IEBACiAgICAgICAgICAgICAgJ2V4cGxhaW4nIDogZXhwbGFpbgogICAgICAgICAgICAgfQogICAgICAgICBwcmludCAnU3RhdHVzOiAlZCAlcycgJSAoY29kZSwgbWVzc2FnZSkKLSAgICAgICAgcHJpbnQgJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sJworICAgICAgICBwcmludCAnQ29udGVudC1UeXBlOiAlcycgJSBCYXNlSFRUUFNlcnZlci5ERUZBVUxUX0VSUk9SX0NPTlRFTlRfVFlQRQogICAgICAgICBwcmludCAnQ29udGVudC1MZW5ndGg6ICVkJyAlIGxlbihyZXNwb25zZSkKICAgICAgICAgcHJpbnQKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShyZXNwb25zZSkKZGlmZiAtLWdpdCBhL0xpYi9Tb2NrZXRTZXJ2ZXIucHkgYi9MaWIvU29ja2V0U2VydmVyLnB5CmluZGV4IDcwNDA3MzguLmYwZGI1MTEgMTAwNjQ0Ci0tLSBhL0xpYi9Tb2NrZXRTZXJ2ZXIucHkKKysrIGIvTGliL1NvY2tldFNlcnZlci5weQpAQCAtMTY4LDYgKzE2OCw3IEBACiAgICAgLSB2ZXJpZnlfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKICAgICAtIHNlcnZlcl9jbG9zZSgpCiAgICAgLSBwcm9jZXNzX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgLSBzaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBjbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBoYW5kbGVfZXJyb3IoKQogCkBAIC0yODMsNyArMjg0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKIAogICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAgIiIiQ2FsbGVkIGlmIG5vIG5ldyByZXF1ZXN0IGFycml2ZXMgd2l0aGluIHNlbGYudGltZW91dC4KQEAgLTMwNyw3ICszMDgsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQotICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAKICAgICBkZWYgc2VydmVyX2Nsb3NlKHNlbGYpOgogICAgICAgICAiIiJDYWxsZWQgdG8gY2xlYW4tdXAgdGhlIHNlcnZlci4KQEAgLTMyMSw2ICszMjIsMTAgQEAKICAgICAgICAgIiIiRmluaXNoIG9uZSByZXF1ZXN0IGJ5IGluc3RhbnRpYXRpbmcgUmVxdWVzdEhhbmRsZXJDbGFzcy4iIiIKICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzLCBzZWxmKQogCisgICAgZGVmIHNodXRkb3duX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICIiIkNhbGxlZCB0byBzaHV0ZG93biBhbmQgY2xvc2UgYW4gaW5kaXZpZHVhbCByZXF1ZXN0LiIiIgorICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKwogICAgIGRlZiBjbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgICAiIiJDYWxsZWQgdG8gY2xlYW4gdXAgYW4gaW5kaXZpZHVhbCByZXF1ZXN0LiIiIgogICAgICAgICBwYXNzCkBAIC0zNjEsNiArMzY2LDcgQEAKICAgICAtIGhhbmRsZV90aW1lb3V0KCkKICAgICAtIHZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgIC0gcHJvY2Vzc19yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQorICAgIC0gc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogICAgIC0gY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQogICAgIC0gaGFuZGxlX2Vycm9yKCkKIApAQCAtNDQ1LDYgKzQ1MSwxNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmFjY2VwdCgpCiAKKyAgICBkZWYgc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ2FsbGVkIHRvIHNodXRkb3duIGFuZCBjbG9zZSBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNleHBsaWNpdGx5IHNodXRkb3duLiAgc29ja2V0LmNsb3NlKCkgbWVyZWx5IHJlbGVhc2VzCisgICAgICAgICAgICAjdGhlIHNvY2tldCBhbmQgd2FpdHMgZm9yIEdDIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjbG9zZS4KKyAgICAgICAgICAgIHJlcXVlc3Quc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBwYXNzICNzb21lIHBsYXRmb3JtcyBtYXkgcmFpc2UgRU5PVENPTk4gaGVyZQorICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKwogICAgIGRlZiBjbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgICAiIiJDYWxsZWQgdG8gY2xlYW4gdXAgYW4gaW5kaXZpZHVhbCByZXF1ZXN0LiIiIgogICAgICAgICByZXF1ZXN0LmNsb3NlKCkKQEAgLTQ2OCw2ICs0ODQsMTAgQEAKICAgICAgICAgIyBObyBuZWVkIHRvIGNhbGwgbGlzdGVuKCkgZm9yIFVEUC4KICAgICAgICAgcGFzcwogCisgICAgZGVmIHNodXRkb3duX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICMgTm8gbmVlZCB0byBzaHV0ZG93biBhbnl0aGluZy4KKyAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisKICAgICBkZWYgY2xvc2VfcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKICAgICAgICAgIyBObyBuZWVkIHRvIGNsb3NlIGFueXRoaW5nLgogICAgICAgICBwYXNzCkBAIC01MjgsMTcgKzU0OCwxOSBAQAogICAgICAgICAgICAgaWYgc2VsZi5hY3RpdmVfY2hpbGRyZW4gaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbiA9IFtdCiAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5hcHBlbmQocGlkKQotICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkgI2Nsb3NlIGhhbmRsZSBpbiBwYXJlbnQgcHJvY2VzcwogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3MuCiAgICAgICAgICAgICAjIFRoaXMgbXVzdCBuZXZlciByZXR1cm4sIGhlbmNlIG9zLl9leGl0KCkhCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCiAKQEAgLTU1OCwxMCArNTgwLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogCiAgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICIiIlN0YXJ0IGEgbmV3IHRocmVhZCB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LiIiIgpAQCAtNjEyLDEyICs2MzQsMTEgQEAKICAgICAgICAgc2VsZi5yZXF1ZXN0ID0gcmVxdWVzdAogICAgICAgICBzZWxmLmNsaWVudF9hZGRyZXNzID0gY2xpZW50X2FkZHJlc3MKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5zZXR1cCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2V0dXAoKQogICAgICAgICAgICAgc2VsZi5oYW5kbGUoKQotICAgICAgICAgICAgc2VsZi5maW5pc2goKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmV4Y190cmFjZWJhY2sgPSBOb25lICAgICMgSGVscCBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKIAogICAgIGRlZiBzZXR1cChzZWxmKToKICAgICAgICAgcGFzcwpAQCAtNjUxLDggKzY3MiwyMCBAQAogICAgIHJidWZzaXplID0gLTEKICAgICB3YnVmc2l6ZSA9IDAKIAorICAgICMgQSB0aW1lb3V0IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0IHNvY2tldCwgaWYgbm90IE5vbmUuCisgICAgdGltZW91dCA9IE5vbmUKKworICAgICMgRGlzYWJsZSBuYWdsZSBhbGdvcml0bSBmb3IgdGhpcyBzb2NrZXQsIGlmIFRydWUuCisgICAgIyBVc2Ugb25seSB3aGVuIHdidWZzaXplICE9IDAsIHRvIGF2b2lkIHNtYWxsIHBhY2tldHMuCisgICAgZGlzYWJsZV9uYWdsZV9hbGdvcml0aG0gPSBGYWxzZQorCiAgICAgZGVmIHNldHVwKHNlbGYpOgogICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBzZWxmLnJlcXVlc3QKKyAgICAgICAgaWYgc2VsZi50aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNldHRpbWVvdXQoc2VsZi50aW1lb3V0KQorICAgICAgICBpZiBzZWxmLmRpc2FibGVfbmFnbGVfYWxnb3JpdGhtOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fVENQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlRDUF9OT0RFTEFZLCBUcnVlKQogICAgICAgICBzZWxmLnJmaWxlID0gc2VsZi5jb25uZWN0aW9uLm1ha2VmaWxlKCdyYicsIHNlbGYucmJ1ZnNpemUpCiAgICAgICAgIHNlbGYud2ZpbGUgPSBzZWxmLmNvbm5lY3Rpb24ubWFrZWZpbGUoJ3diJywgc2VsZi53YnVmc2l6ZSkKIApkaWZmIC0tZ2l0IGEvTGliL1VzZXJEaWN0LnB5IGIvTGliL1VzZXJEaWN0LnB5CmluZGV4IDBkOTU5MWEuLmJiMjIxOGEgMTAwNjQ0Ci0tLSBhL0xpYi9Vc2VyRGljdC5weQorKysgYi9MaWIvVXNlckRpY3QucHkKQEAgLTEzLDYgKzEzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5kYXRhLCBkaWN0LmRhdGEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZGF0YSwgZGljdCkKKyAgICBfX2hhc2hfXyA9IE5vbmUgIyBBdm9pZCBQeTNrIHdhcm5pbmcKICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLmRhdGEpCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIGlmIGtleSBpbiBzZWxmLmRhdGE6CkBAIC05Nyw3ICs5OCw3IEBACiAgICAgICAgICAgICB5aWVsZCBrCiAgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgICAgIHNlbGZba2V5XQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL0xpYi9fYWJjb2xsLnB5IGIvTGliL19hYmNvbGwucHkKaW5kZXggMzc0M2VhOC4uZTczNzZlNCAxMDA2NDQKLS0tIGEvTGliL19hYmNvbGwucHkKKysrIGIvTGliL19hYmNvbGwucHkKQEAgLTgyLDcgKzgyLDcgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgogICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6Ci0gICAgICAgICAgICBpZiBfaGFzYXR0cihDLCAibmV4dCIpOgorICAgICAgICAgICAgaWYgX2hhc2F0dHIoQywgIm5leHQiKSBhbmQgX2hhc2F0dHIoQywgIl9faXRlcl9fIik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKQEAgLTMwNSwxOCArMzA1LDI0IEBACiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX19peG9yX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdCwgU2V0KToKLSAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKLSAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdCwgU2V0KToKKyAgICAgICAgICAgICAgICBpdCA9IHNlbGYuX2Zyb21faXRlcmFibGUoaXQpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9faXN1Yl9fKHNlbGYsIGl0KToKLSAgICAgICAgZm9yIHZhbHVlIGluIGl0OgotICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQogICAgICAgICByZXR1cm4gc2VsZgogCiBNdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKQEAgLTM4NCw5ICszOTAsMTYgQEAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9tYXBwaW5nKQogCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3swLl9fY2xhc3NfXy5fX25hbWVfX30oezAuX21hcHBpbmchcn0pJy5mb3JtYXQoc2VsZikKKwogCiBjbGFzcyBLZXlzVmlldyhNYXBwaW5nVmlldywgU2V0KToKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6CisgICAgICAgIHJldHVybiBzZXQoaXQpCisKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CiAgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fbWFwcGluZwogCkBAIC0zOTcsNiArNDEwLDEwIEBACiAKIGNsYXNzIEl0ZW1zVmlldyhNYXBwaW5nVmlldywgU2V0KToKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShzZWxmLCBpdCk6CisgICAgICAgIHJldHVybiBzZXQoaXQpCisKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgogICAgICAgICBrZXksIHZhbHVlID0gaXRlbQogICAgICAgICB0cnk6CkBAIC00NjMsNyArNDgwLDE1IEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB1cGRhdGUoc2VsZiwgb3RoZXI9KCksICoqa3dkcyk6CisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCisgICAgICAgIGVsaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKICAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CiAgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQpkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNjhkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTAsMCArMSwyMDAyIEBACisiIiIKK1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW8gbW9kdWxlLgorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgKHByaW50X2Z1bmN0aW9uLCB1bmljb2RlX2xpdGVyYWxzKQorCitpbXBvcnQgb3MKK2ltcG9ydCBhYmMKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCB3YXJuaW5ncworIyBJbXBvcnQgdGhyZWFkIGluc3RlYWQgb2YgdGhyZWFkaW5nIHRvIHJlZHVjZSBzdGFydHVwIGNvc3QKK3RyeToKKyAgICBmcm9tIHRocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBMb2NrCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBkdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgTG9jaworCitpbXBvcnQgaW8KK2Zyb20gaW8gaW1wb3J0IChfX2FsbF9fLCBTRUVLX1NFVCwgU0VFS19DVVIsIFNFRUtfRU5EKQorZnJvbSBlcnJubyBpbXBvcnQgRUlOVFIKKworX19tZXRhY2xhc3NfXyA9IHR5cGUKKworIyBvcGVuKCkgdXNlcyBzdF9ibGtzaXplIHdoZW5ldmVyIHdlIGNhbgorREVGQVVMVF9CVUZGRVJfU0laRSA9IDggKiAxMDI0ICAjIGJ5dGVzCisKKyMgTk9URTogQmFzZSBjbGFzc2VzIGRlZmluZWQgaGVyZSBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSAib2ZmaWNpYWwiIEFCQ3MKKyMgZGVmaW5lZCBpbiBpby5weS4gV2UgZG9uJ3QgdXNlIHJlYWwgaW5oZXJpdGFuY2UgdGhvdWdoLCBiZWNhdXNlIHdlIGRvbid0CisjIHdhbnQgdG8gaW5oZXJpdCB0aGUgQyBpbXBsZW1lbnRhdGlvbnMuCisKKworY2xhc3MgQmxvY2tpbmdJT0Vycm9yKElPRXJyb3IpOgorCisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIEkvTyB3b3VsZCBibG9jayBvbiBhIG5vbi1ibG9ja2luZyBJL08gc3RyZWFtLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm5vLCBzdHJlcnJvciwgY2hhcmFjdGVyc193cml0dGVuPTApOgorICAgICAgICBzdXBlcihJT0Vycm9yLCBzZWxmKS5fX2luaXRfXyhlcnJubywgc3RyZXJyb3IpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNoYXJhY3RlcnNfd3JpdHRlbiwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjaGFyYWN0ZXJzX3dyaXR0ZW4gbXVzdCBiZSBhIGludGVnZXIiKQorICAgICAgICBzZWxmLmNoYXJhY3RlcnNfd3JpdHRlbiA9IGNoYXJhY3RlcnNfd3JpdHRlbgorCisKK2RlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsCisgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwKKyAgICAgICAgIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlKToKKworICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorCisgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCisgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCisgICAgYmUgb3BlbmVkIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGJlCisgICAgd3JhcHBlZC4gKElmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLCBpdCBpcyBjbG9zZWQgd2hlbiB0aGUKKyAgICByZXR1cm5lZCBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzIGNsb3NlZmQgaXMgc2V0IHRvIEZhbHNlLikKKworICAgIG1vZGUgaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBtb2RlIGluIHdoaWNoIHRoZSBmaWxlCisgICAgaXMgb3BlbmVkLiBJdCBkZWZhdWx0cyB0byAncicgd2hpY2ggbWVhbnMgb3BlbiBmb3IgcmVhZGluZyBpbiB0ZXh0CisgICAgbW9kZS4gIE90aGVyIGNvbW1vbiB2YWx1ZXMgYXJlICd3JyBmb3Igd3JpdGluZyAodHJ1bmNhdGluZyB0aGUgZmlsZSBpZgorICAgIGl0IGFscmVhZHkgZXhpc3RzKSwgYW5kICdhJyBmb3IgYXBwZW5kaW5nICh3aGljaCBvbiBzb21lIFVuaXggc3lzdGVtcywKKyAgICBtZWFucyB0aGF0IGFsbCB3cml0ZXMgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgcmVnYXJkbGVzcyBvZiB0aGUKKyAgICBjdXJyZW50IHNlZWsgcG9zaXRpb24pLiBJbiB0ZXh0IG1vZGUsIGlmIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQgdGhlCisgICAgZW5jb2RpbmcgdXNlZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQuIChGb3IgcmVhZGluZyBhbmQgd3JpdGluZyByYXcKKyAgICBieXRlcyB1c2UgYmluYXJ5IG1vZGUgYW5kIGxlYXZlIGVuY29kaW5nIHVuc3BlY2lmaWVkLikgVGhlIGF2YWlsYWJsZQorICAgIG1vZGVzIGFyZToKKworICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBDaGFyYWN0ZXIgTWVhbmluZworICAgIC0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAncicgICAgICAgb3BlbiBmb3IgcmVhZGluZyAoZGVmYXVsdCkKKyAgICAndycgICAgICAgb3BlbiBmb3Igd3JpdGluZywgdHJ1bmNhdGluZyB0aGUgZmlsZSBmaXJzdAorICAgICdhJyAgICAgICBvcGVuIGZvciB3cml0aW5nLCBhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiBpdCBleGlzdHMKKyAgICAnYicgICAgICAgYmluYXJ5IG1vZGUKKyAgICAndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KQorICAgICcrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZykKKyAgICAnVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZAorICAgICAgICAgICAgICBmb3IgbmV3IGNvZGUpCisgICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbQorICAgIGFjY2VzcywgdGhlIG1vZGUgJ3crYicgb3BlbnMgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0byAwIGJ5dGVzLCB3aGlsZQorICAgICdyK2InIG9wZW5zIHRoZSBmaWxlIHdpdGhvdXQgdHJ1bmNhdGlvbi4KKworICAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZmlsZXMgb3BlbmVkIGluIGJpbmFyeSBhbmQgdGV4dCBtb2RlcywKKyAgICBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBkb2Vzbid0LiBGaWxlcyBvcGVuZWQgaW4KKyAgICBiaW5hcnkgbW9kZSAoYXBwZW5kaW5nICdiJyB0byB0aGUgbW9kZSBhcmd1bWVudCkgcmV0dXJuIGNvbnRlbnRzIGFzCisgICAgYnl0ZXMgb2JqZWN0cyB3aXRob3V0IGFueSBkZWNvZGluZy4gSW4gdGV4dCBtb2RlICh0aGUgZGVmYXVsdCwgb3Igd2hlbgorICAgICd0JyBpcyBhcHBlbmRlZCB0byB0aGUgbW9kZSBhcmd1bWVudCksIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUKKyAgICByZXR1cm5lZCBhcyBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhCisgICAgcGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uCisKKyAgICBidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS4KKyAgICBQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0CisgICAgbGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZQorICAgIHRoZSBzaXplIG9mIGEgZml4ZWQtc2l6ZSBjaHVuayBidWZmZXIuICBXaGVuIG5vIGJ1ZmZlcmluZyBhcmd1bWVudCBpcworICAgIGdpdmVuLCB0aGUgZGVmYXVsdCBidWZmZXJpbmcgcG9saWN5IHdvcmtzIGFzIGZvbGxvd3M6CisKKyAgICAqIEJpbmFyeSBmaWxlcyBhcmUgYnVmZmVyZWQgaW4gZml4ZWQtc2l6ZSBjaHVua3M7IHRoZSBzaXplIG9mIHRoZSBidWZmZXIKKyAgICAgIGlzIGNob3NlbiB1c2luZyBhIGhldXJpc3RpYyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB1bmRlcmx5aW5nIGRldmljZSdzCisgICAgICAiYmxvY2sgc2l6ZSIgYW5kIGZhbGxpbmcgYmFjayBvbiBgaW8uREVGQVVMVF9CVUZGRVJfU0laRWAuCisgICAgICBPbiBtYW55IHN5c3RlbXMsIHRoZSBidWZmZXIgd2lsbCB0eXBpY2FsbHkgYmUgNDA5NiBvciA4MTkyIGJ5dGVzIGxvbmcuCisKKyAgICAqICJJbnRlcmFjdGl2ZSIgdGV4dCBmaWxlcyAoZmlsZXMgZm9yIHdoaWNoIGlzYXR0eSgpIHJldHVybnMgVHJ1ZSkKKyAgICAgIHVzZSBsaW5lIGJ1ZmZlcmluZy4gIE90aGVyIHRleHQgZmlsZXMgdXNlIHRoZSBwb2xpY3kgZGVzY3JpYmVkIGFib3ZlCisgICAgICBmb3IgYmluYXJ5IGZpbGVzLgorCisgICAgZW5jb2RpbmcgaXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIG9yIGVuY29kZSB0aGUKKyAgICBmaWxlLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBlbmNvZGluZyBpcworICAgIHBsYXRmb3JtIGRlcGVuZGVudCwgYnV0IGFueSBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGNhbiBiZQorICAgIHBhc3NlZC4gIFNlZSB0aGUgY29kZWNzIG1vZHVsZSBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncy4KKworICAgIGVycm9ycyBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgaG93IGVuY29kaW5nIGVycm9ycyBhcmUgdG8KKyAgICBiZSBoYW5kbGVkLS0tdGhpcyBhcmd1bWVudCBzaG91bGQgbm90IGJlIHVzZWQgaW4gYmluYXJ5IG1vZGUuIFBhc3MKKyAgICAnc3RyaWN0JyB0byByYWlzZSBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGVycm9yCisgICAgKHRoZSBkZWZhdWx0IG9mIE5vbmUgaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIHBhc3MgJ2lnbm9yZScgdG8gaWdub3JlCisgICAgZXJyb3JzLiAoTm90ZSB0aGF0IGlnbm9yaW5nIGVuY29kaW5nIGVycm9ycyBjYW4gbGVhZCB0byBkYXRhIGxvc3MuKQorICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29kZWNzLnJlZ2lzdGVyIGZvciBhIGxpc3Qgb2YgdGhlIHBlcm1pdHRlZAorICAgIGVuY29kaW5nIGVycm9yIHN0cmluZ3MuCisKKyAgICBuZXdsaW5lIGNvbnRyb2xzIGhvdyB1bml2ZXJzYWwgbmV3bGluZXMgd29ya3MgKGl0IG9ubHkgYXBwbGllcyB0byB0ZXh0CisgICAgbW9kZSkuIEl0IGNhbiBiZSBOb25lLCAnJywgJ1xuJywgJ1xyJywgYW5kICdcclxuJy4gIEl0IHdvcmtzIGFzCisgICAgZm9sbG93czoKKworICAgICogT24gaW5wdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMKKyAgICAgIGVuYWJsZWQuIExpbmVzIGluIHRoZSBpbnB1dCBjYW4gZW5kIGluICdcbicsICdccicsIG9yICdcclxuJywgYW5kCisgICAgICB0aGVzZSBhcmUgdHJhbnNsYXRlZCBpbnRvICdcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZQorICAgICAgY2FsbGVyLiBJZiBpdCBpcyAnJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZQorICAgICAgZW5kaW5ncyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuIElmIGl0IGhhcyBhbnkgb2YKKyAgICAgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuCisgICAgICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuCisKKyAgICAqIE9uIG91dHB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCBhbnkgJ1xuJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlCisgICAgICB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaW5lIHNlcGFyYXRvciwgb3MubGluZXNlcC4gSWYKKyAgICAgIG5ld2xpbmUgaXMgJycsIG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiBJZiBuZXdsaW5lIGlzIGFueSBvZiB0aGUKKyAgICAgIG90aGVyIGxlZ2FsIHZhbHVlcywgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkIHRvCisgICAgICB0aGUgZ2l2ZW4gc3RyaW5nLgorCisgICAgSWYgY2xvc2VmZCBpcyBGYWxzZSwgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUga2VwdCBvcGVuCisgICAgd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzIGdpdmVuCisgICAgYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCisKKyAgICBvcGVuKCkgcmV0dXJucyBhIGZpbGUgb2JqZWN0IHdob3NlIHR5cGUgZGVwZW5kcyBvbiB0aGUgbW9kZSwgYW5kCisgICAgdGhyb3VnaCB3aGljaCB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVhZGluZyBhbmQgd3JpdGluZworICAgIGFyZSBwZXJmb3JtZWQuIFdoZW4gb3BlbigpIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0IG1vZGUgKCd3JywKKyAgICAncicsICd3dCcsICdydCcsIGV0Yy4pLCBpdCByZXR1cm5zIGEgVGV4dElPV3JhcHBlci4gV2hlbiB1c2VkIHRvIG9wZW4KKyAgICBhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSwgdGhlIHJldHVybmVkIGNsYXNzIHZhcmllczogaW4gcmVhZCBiaW5hcnkKKyAgICBtb2RlLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRSZWFkZXI7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeQorICAgIG1vZGVzLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRXcml0ZXIsIGFuZCBpbiByZWFkL3dyaXRlIG1vZGUsIGl0IHJldHVybnMKKyAgICBhIEJ1ZmZlcmVkUmFuZG9tLgorCisgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBzdHJpbmcgb3IgYnl0ZWFycmF5IGFzIGEgZmlsZSBmb3IgYm90aAorICAgIHJlYWRpbmcgYW5kIHdyaXRpbmcuIEZvciBzdHJpbmdzIFN0cmluZ0lPIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlCisgICAgb3BlbmVkIGluIGEgdGV4dCBtb2RlLCBhbmQgZm9yIGJ5dGVzIGEgQnl0ZXNJTyBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZQorICAgIG9wZW5lZCBpbiBhIGJpbmFyeSBtb2RlLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGUsIChiYXNlc3RyaW5nLCBpbnQsIGxvbmcpKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGZpbGU6ICVyIiAlIGZpbGUpCisgICAgaWYgbm90IGlzaW5zdGFuY2UobW9kZSwgYmFzZXN0cmluZyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBtb2RlOiAlciIgJSBtb2RlKQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGJ1ZmZlcmluZywgKGludCwgbG9uZykpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgYnVmZmVyaW5nOiAlciIgJSBidWZmZXJpbmcpCisgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKGVuY29kaW5nLCBiYXNlc3RyaW5nKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGVuY29kaW5nOiAlciIgJSBlbmNvZGluZykKKyAgICBpZiBlcnJvcnMgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKGVycm9ycywgYmFzZXN0cmluZyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBlcnJvcnM6ICVyIiAlIGVycm9ycykKKyAgICBtb2RlcyA9IHNldChtb2RlKQorICAgIGlmIG1vZGVzIC0gc2V0KCJhcndiK3RVIikgb3IgbGVuKG1vZGUpID4gbGVuKG1vZGVzKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBtb2RlOiAlciIgJSBtb2RlKQorICAgIHJlYWRpbmcgPSAiciIgaW4gbW9kZXMKKyAgICB3cml0aW5nID0gInciIGluIG1vZGVzCisgICAgYXBwZW5kaW5nID0gImEiIGluIG1vZGVzCisgICAgdXBkYXRpbmcgPSAiKyIgaW4gbW9kZXMKKyAgICB0ZXh0ID0gInQiIGluIG1vZGVzCisgICAgYmluYXJ5ID0gImIiIGluIG1vZGVzCisgICAgaWYgIlUiIGluIG1vZGVzOgorICAgICAgICBpZiB3cml0aW5nIG9yIGFwcGVuZGluZzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IHVzZSBVIGFuZCB3cml0aW5nIG1vZGUgYXQgb25jZSIpCisgICAgICAgIHJlYWRpbmcgPSBUcnVlCisgICAgaWYgdGV4dCBhbmQgYmluYXJ5OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBoYXZlIHRleHQgYW5kIGJpbmFyeSBtb2RlIGF0IG9uY2UiKQorICAgIGlmIHJlYWRpbmcgKyB3cml0aW5nICsgYXBwZW5kaW5nID4gMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSByZWFkL3dyaXRlL2FwcGVuZCBtb2RlIGF0IG9uY2UiKQorICAgIGlmIG5vdCAocmVhZGluZyBvciB3cml0aW5nIG9yIGFwcGVuZGluZyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiByZWFkL3dyaXRlL2FwcGVuZCBtb2RlIikKKyAgICBpZiBiaW5hcnkgYW5kIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYW4gZW5jb2RpbmcgYXJndW1lbnQiKQorICAgIGlmIGJpbmFyeSBhbmQgZXJyb3JzIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYW4gZXJyb3JzIGFyZ3VtZW50IikKKyAgICBpZiBiaW5hcnkgYW5kIG5ld2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhIG5ld2xpbmUgYXJndW1lbnQiKQorICAgIHJhdyA9IEZpbGVJTyhmaWxlLAorICAgICAgICAgICAgICAgICAocmVhZGluZyBhbmQgInIiIG9yICIiKSArCisgICAgICAgICAgICAgICAgICh3cml0aW5nIGFuZCAidyIgb3IgIiIpICsKKyAgICAgICAgICAgICAgICAgKGFwcGVuZGluZyBhbmQgImEiIG9yICIiKSArCisgICAgICAgICAgICAgICAgICh1cGRhdGluZyBhbmQgIisiIG9yICIiKSwKKyAgICAgICAgICAgICAgICAgY2xvc2VmZCkKKyAgICBsaW5lX2J1ZmZlcmluZyA9IEZhbHNlCisgICAgaWYgYnVmZmVyaW5nID09IDEgb3IgYnVmZmVyaW5nIDwgMCBhbmQgcmF3LmlzYXR0eSgpOgorICAgICAgICBidWZmZXJpbmcgPSAtMQorICAgICAgICBsaW5lX2J1ZmZlcmluZyA9IFRydWUKKyAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJzID0gb3MuZnN0YXQocmF3LmZpbGVubygpKS5zdF9ibGtzaXplCisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGJzID4gMToKKyAgICAgICAgICAgICAgICBidWZmZXJpbmcgPSBicworICAgIGlmIGJ1ZmZlcmluZyA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgYnVmZmVyaW5nIHNpemUiKQorICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgorICAgICAgICBpZiBiaW5hcnk6CisgICAgICAgICAgICByZXR1cm4gcmF3CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdW5idWZmZXJlZCB0ZXh0IEkvTyIpCisgICAgaWYgdXBkYXRpbmc6CisgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlcmVkUmFuZG9tKHJhdywgYnVmZmVyaW5nKQorICAgIGVsaWYgd3JpdGluZyBvciBhcHBlbmRpbmc6CisgICAgICAgIGJ1ZmZlciA9IEJ1ZmZlcmVkV3JpdGVyKHJhdywgYnVmZmVyaW5nKQorICAgIGVsaWYgcmVhZGluZzoKKyAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJpbmcpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBtb2RlOiAlciIgJSBtb2RlKQorICAgIGlmIGJpbmFyeToKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcgorICAgIHRleHQgPSBUZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwgbGluZV9idWZmZXJpbmcpCisgICAgdGV4dC5tb2RlID0gbW9kZQorICAgIHJldHVybiB0ZXh0CisKKworY2xhc3MgRG9jRGVzY3JpcHRvcjoKKyAgICAiIiJIZWxwZXIgZm9yIGJ1aWx0aW5zLm9wZW4uX19kb2NfXworICAgICIiIgorICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgdHlwKToKKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgICJvcGVuKGZpbGUsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsICIKKyAgICAgICAgICAgICAgICAgImVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSlcblxuIiArCisgICAgICAgICAgICBvcGVuLl9fZG9jX18pCisKK2NsYXNzIE9wZW5XcmFwcGVyOgorICAgICIiIldyYXBwZXIgZm9yIGJ1aWx0aW5zLm9wZW4KKworICAgIFRyaWNrIHNvIHRoYXQgb3BlbiB3b24ndCBiZWNvbWUgYSBib3VuZCBtZXRob2Qgd2hlbiBzdG9yZWQKKyAgICBhcyBhIGNsYXNzIHZhcmlhYmxlIChhcyBkYm0uZHVtYiBkb2VzKS4KKworICAgIFNlZSBpbml0c3RkaW8oKSBpbiBQeXRob24vcHl0aG9ucnVuLmMuCisgICAgIiIiCisgICAgX19kb2NfXyA9IERvY0Rlc2NyaXB0b3IoKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gb3BlbigqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb24oVmFsdWVFcnJvciwgSU9FcnJvcik6CisgICAgcGFzcworCisKK2NsYXNzIElPQmFzZToKKyAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKworICAgICIiIlRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhbGwgSS9PIGNsYXNzZXMsIGFjdGluZyBvbiBzdHJlYW1zIG9mCisgICAgYnl0ZXMuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgZHVtbXkgaW1wbGVtZW50YXRpb25zIGZvciBtYW55IG1ldGhvZHMgdGhhdAorICAgIGRlcml2ZWQgY2xhc3NlcyBjYW4gb3ZlcnJpZGUgc2VsZWN0aXZlbHk7IHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucworICAgIHJlcHJlc2VudCBhIGZpbGUgdGhhdCBjYW5ub3QgYmUgcmVhZCwgd3JpdHRlbiBvciBzZWVrZWQuCisKKyAgICBFdmVuIHRob3VnaCBJT0Jhc2UgZG9lcyBub3QgZGVjbGFyZSByZWFkLCByZWFkaW50bywgb3Igd3JpdGUgYmVjYXVzZQorICAgIHRoZWlyIHNpZ25hdHVyZXMgd2lsbCB2YXJ5LCBpbXBsZW1lbnRhdGlvbnMgYW5kIGNsaWVudHMgc2hvdWxkCisgICAgY29uc2lkZXIgdGhvc2UgbWV0aG9kcyBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UuIEFsc28sIGltcGxlbWVudGF0aW9ucworICAgIG1heSByYWlzZSBhIElPRXJyb3Igd2hlbiBvcGVyYXRpb25zIHRoZXkgZG8gbm90IHN1cHBvcnQgYXJlIGNhbGxlZC4KKworICAgIFRoZSBiYXNpYyB0eXBlIHVzZWQgZm9yIGJpbmFyeSBkYXRhIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGEgZmlsZSBpcworICAgIGJ5dGVzLiBieXRlYXJyYXlzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzCisgICAgcmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuCisKKyAgICBOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzCisgICAgdW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIElPRXJyb3IgaW4gdGhpcyBjYXNlLgorCisgICAgSU9CYXNlIChhbmQgaXRzIHN1YmNsYXNzZXMpIHN1cHBvcnQgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCBtZWFuaW5nCisgICAgdGhhdCBhbiBJT0Jhc2Ugb2JqZWN0IGNhbiBiZSBpdGVyYXRlZCBvdmVyIHlpZWxkaW5nIHRoZSBsaW5lcyBpbiBhCisgICAgc3RyZWFtLgorCisgICAgSU9CYXNlIGFsc28gc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuIEluIHRoaXMgZXhhbXBsZSwKKyAgICBmcCBpcyBjbG9zZWQgYWZ0ZXIgdGhlIHN1aXRlIG9mIHRoZSB3aXRoIHN0YXRlbWVudCBpcyBjb21wbGV0ZToKKworICAgIHdpdGggb3Blbignc3BhbS50eHQnLCAncicpIGFzIGZwOgorICAgICAgICBmcC53cml0ZSgnU3BhbSBhbmQgZWdncyEnKQorICAgICIiIgorCisgICAgIyMjIEludGVybmFsICMjIworCisgICAgZGVmIF91bnN1cHBvcnRlZChzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKKyAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24oIiVzLiVzKCkgbm90IHN1cHBvcnRlZCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIG5hbWUpKQorCisgICAgIyMjIFBvc2l0aW9uaW5nICMjIworCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CisgICAgICAgICIiIkNoYW5nZSBzdHJlYW0gcG9zaXRpb24uCisKKyAgICAgICAgQ2hhbmdlIHRoZSBzdHJlYW0gcG9zaXRpb24gdG8gYnl0ZSBvZmZzZXQgb2Zmc2V0LiBvZmZzZXQgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2UuICBWYWx1ZXMKKyAgICAgICAgZm9yIHdoZW5jZSBhcmU6CisKKyAgICAgICAgKiAwIC0tIHN0YXJ0IG9mIHN0cmVhbSAodGhlIGRlZmF1bHQpOyBvZmZzZXQgc2hvdWxkIGJlIHplcm8gb3IgcG9zaXRpdmUKKyAgICAgICAgKiAxIC0tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uOyBvZmZzZXQgbWF5IGJlIG5lZ2F0aXZlCisgICAgICAgICogMiAtLSBlbmQgb2Ygc3RyZWFtOyBvZmZzZXQgaXMgdXN1YWxseSBuZWdhdGl2ZQorCisgICAgICAgIFJldHVybiB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInNlZWsiKQorCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VlaygwLCAxKQorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgIiIiVHJ1bmNhdGUgZmlsZSB0byBzaXplIGJ5dGVzLgorCisgICAgICAgIFNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgSU8gcG9zaXRpb24gYXMgcmVwb3J0ZWQgYnkgdGVsbCgpLiAgUmV0dXJuCisgICAgICAgIHRoZSBuZXcgc2l6ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ0cnVuY2F0ZSIpCisKKyAgICAjIyMgRmx1c2ggYW5kIGNsb3NlICMjIworCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAiIiJGbHVzaCB3cml0ZSBidWZmZXJzLCBpZiBhcHBsaWNhYmxlLgorCisgICAgICAgIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkLW9ubHkgYW5kIG5vbi1ibG9ja2luZyBzdHJlYW1zLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuPz8/CisKKyAgICBfX2Nsb3NlZCA9IEZhbHNlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZsdXNoIGFuZCBjbG9zZSB0aGUgSU8gb2JqZWN0LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5fX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiJEZXN0cnVjdG9yLiAgQ2FsbHMgY2xvc2UoKS4iIiIKKyAgICAgICAgIyBUaGUgdHJ5L2V4Y2VwdCBibG9jayBpcyBpbiBjYXNlIHRoaXMgaXMgY2FsbGVkIGF0IHByb2dyYW0KKyAgICAgICAgIyBleGl0IHRpbWUsIHdoZW4gaXQncyBwb3NzaWJsZSB0aGF0IGdsb2JhbHMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgICAgICAgIyBkZWxldGVkLCBhbmQgdGhlbiB0aGUgY2xvc2UoKSBjYWxsIG1pZ2h0IGZhaWwuICBTaW5jZQorICAgICAgICAjIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgc3VjaCBmYWlsdXJlcyBhbmQgdGhleSBhbm5veQorICAgICAgICAjIHRoZSBlbmQgdXNlcnMsIHdlIHN1cHByZXNzIHRoZSB0cmFjZWJhY2suCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIyMgSW5xdWlyaWVzICMjIworCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy4KKworICAgICAgICBJZiBGYWxzZSwgc2VlaygpLCB0ZWxsKCkgYW5kIHRydW5jYXRlKCkgd2lsbCByYWlzZSBJT0Vycm9yLgorICAgICAgICBUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2NoZWNrU2Vla2FibGUoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBpZiBmaWxlIGlzIG5vdCBzZWVrYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQorCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciByZWFkaW5nLgorCisgICAgICAgIElmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2NoZWNrUmVhZGFibGUoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBpZiBmaWxlIGlzIG5vdCByZWFkYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCByZWFkYWJsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4KKworICAgICAgICBJZiBGYWxzZSwgd3JpdGUoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfY2hlY2tXcml0YWJsZShzZWxmLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHdyaXRhYmxlCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi53cml0YWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHdyaXRhYmxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJjbG9zZWQ6IGJvb2wuICBUcnVlIGlmZiB0aGUgZmlsZSBoYXMgYmVlbiBjbG9zZWQuCisKKyAgICAgICAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIGlzIGEgcHJvcGVydHksIG5vdCBhIHByZWRpY2F0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xvc2VkCisKKyAgICBkZWYgX2NoZWNrQ2xvc2VkKHNlbGYsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIFZhbHVlRXJyb3IgaWYgZmlsZSBpcyBjbG9zZWQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQorCisgICAgIyMjIENvbnRleHQgbWFuYWdlciAjIyMKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIkNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIFJldHVybnMgc2VsZi4iIiIKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgQ2FsbHMgY2xvc2UoKSIiIgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgICMjIyBMb3dlci1sZXZlbCBBUElzICMjIworCisgICAgIyBYWFggU2hvdWxkIHRoZXNlIGJlIHByZXNlbnQgZXZlbiBpZiB1bmltcGxlbWVudGVkPworCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBpZiBvbmUgZXhpc3RzLgorCisgICAgICAgIEFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImZpbGVubyIpCisKKyAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGlzIGlzIGFuICdpbnRlcmFjdGl2ZScgc3RyZWFtLgorCisgICAgICAgIFJldHVybiBGYWxzZSBpZiBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKKworICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgICAgIHIiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgorCisgICAgICAgIFRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0CisgICAgICAgIGZpbGVzLCB0aGUgbmV3bGluZXMgYXJndW1lbnQgdG8gb3BlbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKKyAgICAgICAgdGVybWluYXRvcihzKSByZWNvZ25pemVkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGEgKHNsb3dpc2gpIHJlYWRsaW5lKCkuCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInBlZWsiKToKKyAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6CisgICAgICAgICAgICAgICAgcmVhZGFoZWFkID0gc2VsZi5wZWVrKDEpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRhaGVhZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICBuID0gKHJlYWRhaGVhZC5maW5kKGIiXG4iKSArIDEpIG9yIGxlbihyZWFkYWhlYWQpCisgICAgICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBsaW1pdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICAgICAgbGltaXQgPSAtMQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciIpCisgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCisgICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4ocmVzKSA8IGxpbWl0OgorICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVzICs9IGIKKyAgICAgICAgICAgIGlmIHJlcy5lbmRzd2l0aChiIlxuIik6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHJlcykKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIGhpbnQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgbGluZXMgZnJvbSB0aGUgc3RyZWFtLgorCisgICAgICAgIGhpbnQgY2FuIGJlIHNwZWNpZmllZCB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZDogbm8gbW9yZQorICAgICAgICBsaW5lcyB3aWxsIGJlIHJlYWQgaWYgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzL2NoYXJhY3RlcnMpIG9mIGFsbAorICAgICAgICBsaW5lcyBzbyBmYXIgZXhjZWVkcyBoaW50LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaGludCBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoaGludCwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnRlZ2VyIG9yIE5vbmUgZXhwZWN0ZWQiKQorICAgICAgICBpZiBoaW50IGlzIE5vbmUgb3IgaGludCA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKKyAgICAgICAgbiA9IDAKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBuICs9IGxlbihsaW5lKQorICAgICAgICAgICAgaWYgbiA+PSBoaW50OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgbGluZXMpOgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQorCitpby5JT0Jhc2UucmVnaXN0ZXIoSU9CYXNlKQorCisKK2NsYXNzIFJhd0lPQmFzZShJT0Jhc2UpOgorCisgICAgIiIiQmFzZSBjbGFzcyBmb3IgcmF3IGJpbmFyeSBJL08uIiIiCisKKyAgICAjIFRoZSByZWFkKCkgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgcmVhZGludG8oKTsgZGVyaXZlZAorICAgICMgY2xhc3NlcyB0aGF0IHdhbnQgdG8gc3VwcG9ydCByZWFkKCkgb25seSBuZWVkIHRvIGltcGxlbWVudAorICAgICMgcmVhZGludG8oKSBhcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24uICBJbiBnZW5lcmFsLCByZWFkaW50bygpIGNhbiBiZQorICAgICMgbW9yZSBlZmZpY2llbnQgdGhhbiByZWFkKCkuCisKKyAgICAjIChJdCB3b3VsZCBiZSB0ZW1wdGluZyB0byBhbHNvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAjIHJlYWRpbnRvKCkgaW4gdGVybXMgb2YgcmVhZCgpLCBpbiBjYXNlIHRoZSBsYXR0ZXIgaXMgYSBtb3JlIHN1aXRhYmxlCisgICAgIyBwcmltaXRpdmUgb3BlcmF0aW9uLCBidXQgdGhhdCB3b3VsZCBsZWFkIHRvIG5hc3R5IHJlY3Vyc2lvbiBpbiBjYXNlCisgICAgIyBhIHN1YmNsYXNzIGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlci4pCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCisKKyAgICAgICAgUmV0dXJucyBhbiBlbXB0eSBieXRlcyBvYmplY3Qgb24gRU9GLCBvciBOb25lIGlmIHRoZSBvYmplY3QgaXMKKyAgICAgICAgc2V0IG5vdCB0byBibG9jayBhbmQgaGFzIG5vIGRhdGEgdG8gcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQorICAgICAgICBiID0gYnl0ZWFycmF5KG4uX19pbmRleF9fKCkpCisgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlbCBiW246XQorICAgICAgICByZXR1cm4gYnl0ZXMoYikKKworICAgIGRlZiByZWFkYWxsKHNlbGYpOgorICAgICAgICAiIiJSZWFkIHVudGlsIEVPRiwgdXNpbmcgbXVsdGlwbGUgcmVhZCgpIGNhbGwuIiIiCisgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkKERFRkFVTFRfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVzICs9IGRhdGEKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHJlcykKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBiLgorCisgICAgICAgIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRiksIG9yIE5vbmUgaWYgdGhlIG9iamVjdAorICAgICAgICBpcyBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWRpbnRvIikKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLgorCisgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIGxlbihiKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCisKK2lvLlJhd0lPQmFzZS5yZWdpc3RlcihSYXdJT0Jhc2UpCitmcm9tIF9pbyBpbXBvcnQgRmlsZUlPCitSYXdJT0Jhc2UucmVnaXN0ZXIoRmlsZUlPKQorCisKK2NsYXNzIEJ1ZmZlcmVkSU9CYXNlKElPQmFzZSk6CisKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBidWZmZXJlZCBJTyBvYmplY3RzLgorCisgICAgVGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIFJhd0lPQmFzZSBpcyB0aGF0IHRoZSByZWFkKCkgbWV0aG9kCisgICAgc3VwcG9ydHMgb21pdHRpbmcgdGhlIHNpemUgYXJndW1lbnQsIGFuZCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdAorICAgIGltcGxlbWVudGF0aW9uIHRoYXQgZGVmZXJzIHRvIHJlYWRpbnRvKCkuCisKKyAgICBJbiBhZGRpdGlvbiwgcmVhZCgpLCByZWFkaW50bygpIGFuZCB3cml0ZSgpIG1heSByYWlzZQorICAgIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluIG5vbi1ibG9ja2luZworICAgIG1vZGUgYW5kIG5vdCByZWFkeTsgdW5saWtlIHRoZWlyIHJhdyBjb3VudGVycGFydHMsIHRoZXkgd2lsbCBuZXZlcgorICAgIHJldHVybiBOb25lLgorCisgICAgQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgaW5oZXJpdCBmcm9tIGEgUmF3SU9CYXNlCisgICAgaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZS4KKyAgICAiIiIKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLgorCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kCisgICAgICAgIHJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLgorCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBwb3NpdGl2ZSwgYW5kIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMKKyAgICAgICAgbm90ICdpbnRlcmFjdGl2ZScsIG11bHRpcGxlIHJhdyByZWFkcyBtYXkgYmUgaXNzdWVkIHRvIHNhdGlzZnkKKyAgICAgICAgdGhlIGJ5dGUgY291bnQgKHVubGVzcyBFT0YgaXMgcmVhY2hlZCBmaXJzdCkuICBCdXQgZm9yCisgICAgICAgIGludGVyYWN0aXZlIHJhdyBzdHJlYW1zIChYWFggYW5kIGZvciBwaXBlcz8pLCBhdCBtb3N0IG9uZSByYXcKKyAgICAgICAgcmVhZCB3aWxsIGJlIGlzc3VlZCwgYW5kIGEgc2hvcnQgcmVzdWx0IGRvZXMgbm90IGltcGx5IHRoYXQKKyAgICAgICAgRU9GIGlzIGltbWluZW50LgorCisgICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgYXJyYXkgb24gRU9GLgorCisgICAgICAgIFJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBoYXMgbm8KKyAgICAgICAgZGF0YSBhdCB0aGUgbW9tZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQorCisgICAgZGVmIHJlYWQxKHNlbGYsIG49Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQxIikKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBiLgorCisgICAgICAgIExpa2UgcmVhZCgpLCB0aGlzIG1heSBpc3N1ZSBtdWx0aXBsZSByZWFkcyB0byB0aGUgdW5kZXJseWluZyByYXcKKyAgICAgICAgc3RyZWFtLCB1bmxlc3MgdGhlIGxhdHRlciBpcyAnaW50ZXJhY3RpdmUnLgorCisgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkICgwIGZvciBFT0YpLgorCisgICAgICAgIFJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBoYXMgbm8KKyAgICAgICAgZGF0YSBhdCB0aGUgbW9tZW50LgorICAgICAgICAiIiIKKyAgICAgICAgIyBYWFggVGhpcyBvdWdodCB0byB3b3JrIHdpdGggYW55dGhpbmcgdGhhdCBzdXBwb3J0cyB0aGUgYnVmZmVyIEFQSQorICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbihiKSkKKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiWzpuXSA9IGRhdGEKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGFycmF5LmFycmF5KToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnIKKyAgICAgICAgICAgIGJbOm5dID0gYXJyYXkuYXJyYXkoYidiJywgZGF0YSkKKyAgICAgICAgcmV0dXJuIG4KKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLgorCisgICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIGlzIG5ldmVyIGxlc3MgdGhhbgorICAgICAgICBsZW4oYikuCisKKyAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZQorICAgICAgICB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gY2Fubm90IGFjY2VwdCBtb3JlIGRhdGEgYXQgdGhlIG1vbWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VwYXJhdGUgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBmcm9tIHRoZSBidWZmZXIgYW5kIHJldHVybiBpdC4KKworICAgICAgICBBZnRlciB0aGUgcmF3IHN0cmVhbSBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIGJ1ZmZlciBpcyBpbiBhbiB1bnVzYWJsZQorICAgICAgICBzdGF0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJkZXRhY2giKQorCitpby5CdWZmZXJlZElPQmFzZS5yZWdpc3RlcihCdWZmZXJlZElPQmFzZSkKKworCitjbGFzcyBfQnVmZmVyZWRJT01peGluKEJ1ZmZlcmVkSU9CYXNlKToKKworICAgICIiIkEgbWl4aW4gaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyZWRJT0Jhc2Ugd2l0aCBhbiB1bmRlcmx5aW5nIHJhdyBzdHJlYW0uCisKKyAgICBUaGlzIHBhc3NlcyBtb3N0IHJlcXVlc3RzIG9uIHRvIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0uICBJdAorICAgIGRvZXMgKm5vdCogcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgb2YgcmVhZCgpLCByZWFkaW50bygpIG9yCisgICAgd3JpdGUoKS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcpOgorICAgICAgICBzZWxmLl9yYXcgPSByYXcKKworICAgICMjIyBQb3NpdGlvbmluZyAjIyMKKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgorICAgICAgICBuZXdfcG9zaXRpb24gPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQorICAgICAgICBpZiBuZXdfcG9zaXRpb24gPCAwOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICByZXR1cm4gbmV3X3Bvc2l0aW9uCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCisgICAgICAgIGlmIHBvcyA8IDA6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgIHJldHVybiBwb3MKKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgICMgRmx1c2ggdGhlIHN0cmVhbS4gIFdlJ3JlIG1peGluZyBidWZmZXJlZCBJL08gd2l0aCBsb3dlci1sZXZlbCBJL08sCisgICAgICAgICMgYW5kIGEgZmx1c2ggbWF5IGJlIG5lY2Vzc2FyeSB0byBzeW5jaCBib3RoIHZpZXdzIG9mIHRoZSBjdXJyZW50CisgICAgICAgICMgZmlsZSBzdGF0ZS4KKyAgICAgICAgc2VsZi5mbHVzaCgpCisKKyAgICAgICAgaWYgcG9zIGlzIE5vbmU6CisgICAgICAgICAgICBwb3MgPSBzZWxmLnRlbGwoKQorICAgICAgICAjIFhYWDogU2hvdWxkIHNlZWsoKSBiZSB1c2VkLCBpbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIHBvc2l0aW9uCisgICAgICAgICMgWFhYICBkaXJlY3RseSB0byB0cnVuY2F0ZT8KKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRydW5jYXRlKHBvcykKKworICAgICMjIyBGbHVzaCBhbmQgY2xvc2UgIyMjCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmx1c2ggb2YgY2xvc2VkIGZpbGUiKQorICAgICAgICBzZWxmLnJhdy5mbHVzaCgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmF3IGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYucmF3LmNsb3NlKCkKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIGlmIHNlbGYucmF3IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyYXcgc3RyZWFtIGFscmVhZHkgZGV0YWNoZWQiKQorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcmF3ID0gc2VsZi5fcmF3CisgICAgICAgIHNlbGYuX3JhdyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHJhdworCisgICAgIyMjIElucXVpcmllcyAjIyMKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LnNlZWthYmxlKCkKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LnJlYWRhYmxlKCkKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LndyaXRhYmxlKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByYXcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yYXcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhdy5jbG9zZWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcubmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1vZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhdy5tb2RlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGNsc25hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAiPF9weWlvLnswfT4iLmZvcm1hdChjbHNuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uezB9IG5hbWU9ezEhcn0+Ii5mb3JtYXQoY2xzbmFtZSwgbmFtZSkKKworICAgICMjIyBMb3dlci1sZXZlbCBBUElzICMjIworCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3LmZpbGVubygpCisKKyAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcuaXNhdHR5KCkKKworCitjbGFzcyBCeXRlc0lPKEJ1ZmZlcmVkSU9CYXNlKToKKworICAgICIiIkJ1ZmZlcmVkIEkvTyBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnl0ZXMgYnVmZmVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfYnl0ZXM9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgpCisgICAgICAgIGlmIGluaXRpYWxfYnl0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBidWYuZXh0ZW5kKGluaXRpYWxfYnl0ZXMpCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGJ1ZgorICAgICAgICBzZWxmLl9wb3MgPSAwCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIl9fZ2V0c3RhdGVfXyBvbiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fLmNvcHkoKQorCisgICAgZGVmIGdldHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHZhbHVlIChjb250ZW50cykgb2YgdGhlIGJ1ZmZlcgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXR2YWx1ZSBvbiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHJldHVybiBieXRlcyhzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCB7MCFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHR5cGUobikpKQorICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9wb3M6CisgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgbikKKyAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCisgICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcworICAgICAgICByZXR1cm4gYnl0ZXMoYikKKworICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICAgICAgIiIiVGhpcyBpcyB0aGUgc2FtZSBhcyByZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZChuKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShiLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3Qgd3JpdGUgdW5pY29kZSB0byBiaW5hcnkgc3RyZWFtIikKKyAgICAgICAgbiA9IGxlbihiKQorICAgICAgICBpZiBuID09IDA6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBwb3MgPSBzZWxmLl9wb3MKKyAgICAgICAgaWYgcG9zID4gbGVuKHNlbGYuX2J1ZmZlcik6CisgICAgICAgICAgICAjIEluc2VydHMgbnVsbCBieXRlcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAgICAgIyBhbmQgdGhlIG5ldyB3cml0ZSBwb3NpdGlvbi4KKyAgICAgICAgICAgIHBhZGRpbmcgPSBiJ1x4MDAnICogKHBvcyAtIGxlbihzZWxmLl9idWZmZXIpKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyICs9IHBhZGRpbmcKKyAgICAgICAgc2VsZi5fYnVmZmVyW3Bvczpwb3MgKyBuXSA9IGIKKyAgICAgICAgc2VsZi5fcG9zICs9IG4KKyAgICAgICAgcmV0dXJuIG4KKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNlZWsgb24gY2xvc2VkIGZpbGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3MuX19pbmRleF9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpCisgICAgICAgIGlmIHdoZW5jZSA9PSAwOgorICAgICAgICAgICAgaWYgcG9zIDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSBzZWVrIHBvc2l0aW9uICVyIiAlIChwb3MsKSkKKyAgICAgICAgICAgIHNlbGYuX3BvcyA9IHBvcworICAgICAgICBlbGlmIHdoZW5jZSA9PSAxOgorICAgICAgICAgICAgc2VsZi5fcG9zID0gbWF4KDAsIHNlbGYuX3BvcyArIHBvcykKKyAgICAgICAgZWxpZiB3aGVuY2UgPT0gMjoKKyAgICAgICAgICAgIHNlbGYuX3BvcyA9IG1heCgwLCBsZW4oc2VsZi5fYnVmZmVyKSArIHBvcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2hlbmNlIHZhbHVlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcworCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGVsbCBvbiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHJldHVybiBzZWxmLl9wb3MKKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidHJ1bmNhdGUgb24gY2xvc2VkIGZpbGUiKQorICAgICAgICBpZiBwb3MgaXMgTm9uZToKKyAgICAgICAgICAgIHBvcyA9IHNlbGYuX3BvcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBvcy5fX2luZGV4X18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKQorICAgICAgICAgICAgaWYgcG9zIDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSB0cnVuY2F0ZSBwb3NpdGlvbiAlciIgJSAocG9zLCkpCisgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbcG9zOl0KKyAgICAgICAgcmV0dXJuIHBvcworCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIEJ1ZmZlcmVkUmVhZGVyKF9CdWZmZXJlZElPTWl4aW4pOgorCisgICAgIiIiQnVmZmVyZWRSZWFkZXIocmF3WywgYnVmZmVyX3NpemVdKQorCisgICAgQSBidWZmZXIgZm9yIGEgcmVhZGFibGUsIHNlcXVlbnRpYWwgQmFzZVJhd0lPIG9iamVjdC4KKworICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRSZWFkZXIgZm9yIHRoZSBnaXZlbiByZWFkYWJsZSByYXcKKyAgICBzdHJlYW0gYW5kIGJ1ZmZlcl9zaXplLiBJZiBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkLCBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgaXMgdXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHJhdy5yZWFkYWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorCisgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQorICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXIgc2l6ZSIpCisgICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQorICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCisgICAgICAgIHNlbGYuX3JlYWRfbG9jayA9IExvY2soKQorCisgICAgZGVmIF9yZXNldF9yZWFkX2J1ZihzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKKyAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCisKKyAgICAgICAgUmV0dXJucyBleGFjdGx5IG4gYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCisgICAgICAgIHN0cmVhbSByZWFjaGVzIEVPRiBvciBpZiB0aGUgY2FsbCB3b3VsZCBibG9jayBpbiBub24tYmxvY2tpbmcKKyAgICAgICAgbW9kZS4gSWYgbiBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCisgICAgICAgIGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA8IC0xOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCIpCisgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQobikKKworICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgorICAgICAgICBub2RhdGFfdmFsID0gYiIiCisgICAgICAgIGVtcHR5X3ZhbHVlcyA9IChiIiIsIE5vbmUpCisgICAgICAgIGJ1ZiA9IHNlbGYuX3JlYWRfYnVmCisgICAgICAgIHBvcyA9IHNlbGYuX3JlYWRfcG9zCisKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGlzIHVuc3BlY2lmaWVkLgorICAgICAgICBpZiBuIGlzIE5vbmUgb3IgbiA9PSAtMToKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKKyAgICAgICAgICAgIGNodW5rcyA9IFtidWZbcG9zOl1dICAjIFN0cmlwIHRoZSBjb25zdW1lZCBieXRlcy4KKyAgICAgICAgICAgIGN1cnJlbnRfc2l6ZSA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgIyBSZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRUlOVFI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGNodW5rIGluIGVtcHR5X3ZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgbm9kYXRhX3ZhbCA9IGNodW5rCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY3VycmVudF9zaXplICs9IGxlbihjaHVuaykKKyAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQorICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGNodW5rcykgb3Igbm9kYXRhX3ZhbAorCisgICAgICAgICMgVGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGlzIHNwZWNpZmllZCwgcmV0dXJuIGF0IG1vc3QgbiBieXRlcy4KKyAgICAgICAgYXZhaWwgPSBsZW4oYnVmKSAtIHBvcyAgIyBMZW5ndGggb2YgdGhlIGF2YWlsYWJsZSBidWZmZXJlZCBkYXRhLgorICAgICAgICBpZiBuIDw9IGF2YWlsOgorICAgICAgICAgICAgIyBGYXN0IHBhdGg6IHRoZSBkYXRhIHRvIHJlYWQgaXMgZnVsbHkgYnVmZmVyZWQuCisgICAgICAgICAgICBzZWxmLl9yZWFkX3BvcyArPSBuCisgICAgICAgICAgICByZXR1cm4gYnVmW3Bvczpwb3Mrbl0KKyAgICAgICAgIyBTbG93IHBhdGg6IHJlYWQgZnJvbSB0aGUgc3RyZWFtIHVudGlsIGVub3VnaCBieXRlcyBhcmUgcmVhZCwKKyAgICAgICAgIyBvciB1bnRpbCBhbiBFT0Ygb2NjdXJzIG9yIHVudGlsIHJlYWQoKSB3b3VsZCBibG9jay4KKyAgICAgICAgY2h1bmtzID0gW2J1Zltwb3M6XV0KKyAgICAgICAgd2FudGVkID0gbWF4KHNlbGYuYnVmZmVyX3NpemUsIG4pCisgICAgICAgIHdoaWxlIGF2YWlsIDwgbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQod2FudGVkKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlRSOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBjaHVuayBpbiBlbXB0eV92YWx1ZXM6CisgICAgICAgICAgICAgICAgbm9kYXRhX3ZhbCA9IGNodW5rCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGF2YWlsICs9IGxlbihjaHVuaykKKyAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoY2h1bmspCisgICAgICAgICMgbiBpcyBtb3JlIHRoZW4gYXZhaWwgb25seSB3aGVuIGFuIEVPRiBvY2N1cnJlZCBvciB3aGVuCisgICAgICAgICMgcmVhZCgpIHdvdWxkIGhhdmUgYmxvY2tlZC4KKyAgICAgICAgbiA9IG1pbihuLCBhdmFpbCkKKyAgICAgICAgb3V0ID0gYiIiLmpvaW4oY2h1bmtzKQorICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IG91dFtuOl0gICMgU2F2ZSB0aGUgZXh0cmEgZGF0YSBpbiB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKKyAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAorCisgICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICAgICAgIiIiUmV0dXJucyBidWZmZXJlZCBieXRlcyB3aXRob3V0IGFkdmFuY2luZyB0aGUgcG9zaXRpb24uCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGluZGljYXRlcyBhIGRlc2lyZWQgbWluaW1hbCBudW1iZXIgb2YgYnl0ZXM7IHdlCisgICAgICAgIGRvIGF0IG1vc3Qgb25lIHJhdyByZWFkIHRvIHNhdGlzZnkgaXQuICBXZSBuZXZlciByZXR1cm4gbW9yZQorICAgICAgICB0aGFuIHNlbGYuYnVmZmVyX3NpemUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKG4pCisKKyAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKKyAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQorICAgICAgICBoYXZlID0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCisgICAgICAgIGlmIGhhdmUgPCB3YW50IG9yIGhhdmUgPD0gMDoKKyAgICAgICAgICAgIHRvX3JlYWQgPSBzZWxmLmJ1ZmZlcl9zaXplIC0gaGF2ZQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnJhdy5yZWFkKHRvX3JlYWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdICsgY3VycmVudAorICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQorCisgICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKKyAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKKyAgICAgICAgIyBvbmx5IHJldHVybiBidWZmZXJlZCBieXRlcy4gIE90aGVyd2lzZSwgd2UgZG8gb25lIHJhdyByZWFkLgorICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bWJlciBvZiBieXRlcyB0byByZWFkIG11c3QgYmUgcG9zaXRpdmUiKQorICAgICAgICBpZiBuID09IDA6CisgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcGVla191bmxvY2tlZCgxKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoCisgICAgICAgICAgICAgICAgbWluKG4sIGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcykpCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIF9CdWZmZXJlZElPTWl4aW4udGVsbChzZWxmKSAtIGxlbihzZWxmLl9yZWFkX2J1ZikgKyBzZWxmLl9yZWFkX3BvcworCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CisgICAgICAgIGlmIG5vdCAoMCA8PSB3aGVuY2UgPD0gMik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdoZW5jZSB2YWx1ZSIpCisgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgaWYgd2hlbmNlID09IDE6CisgICAgICAgICAgICAgICAgcG9zIC09IGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcworICAgICAgICAgICAgcG9zID0gX0J1ZmZlcmVkSU9NaXhpbi5zZWVrKHNlbGYsIHBvcywgd2hlbmNlKQorICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQorICAgICAgICAgICAgcmV0dXJuIHBvcworCitjbGFzcyBCdWZmZXJlZFdyaXRlcihfQnVmZmVyZWRJT01peGluKToKKworICAgICIiIkEgYnVmZmVyIGZvciBhIHdyaXRlYWJsZSBzZXF1ZW50aWFsIFJhd0lPIG9iamVjdC4KKworICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRXcml0ZXIgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUgcmF3CisgICAgc3RyZWFtLiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0bworICAgIERFRkFVTFRfQlVGRkVSX1NJWkUuCisgICAgIiIiCisKKyAgICBfd2FybmluZ19zdGFja19vZmZzZXQgPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3LAorICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFLCBtYXhfYnVmZmVyX3NpemU9Tm9uZSk6CisgICAgICAgIGlmIG5vdCByYXcud3JpdGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKworICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKKyAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgYnVmZmVyIHNpemUiKQorICAgICAgICBpZiBtYXhfYnVmZmVyX3NpemUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJtYXhfYnVmZmVyX3NpemUgaXMgZGVwcmVjYXRlZCIsIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FybmluZ19zdGFja19vZmZzZXQpCisgICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQorICAgICAgICBzZWxmLl93cml0ZV9idWYgPSBieXRlYXJyYXkoKQorICAgICAgICBzZWxmLl93cml0ZV9sb2NrID0gTG9jaygpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid3JpdGUgdG8gY2xvc2VkIGZpbGUiKQorICAgICAgICBpZiBpc2luc3RhbmNlKGIsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSB1bmljb2RlIHRvIGJpbmFyeSBzdHJlYW0iKQorICAgICAgICB3aXRoIHNlbGYuX3dyaXRlX2xvY2s6CisgICAgICAgICAgICAjIFhYWCB3ZSBjYW4gaW1wbGVtZW50IHNvbWUgbW9yZSB0cmlja3MgdG8gdHJ5IGFuZCBhdm9pZAorICAgICAgICAgICAgIyBwYXJ0aWFsIHdyaXRlcworICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLmJ1ZmZlcl9zaXplOgorICAgICAgICAgICAgICAgICMgV2UncmUgZnVsbCwgc28gbGV0J3MgcHJlLWZsdXNoIHRoZSBidWZmZXIKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZsdXNoX3VubG9ja2VkKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICMgV2UgY2FuJ3QgYWNjZXB0IGFueXRoaW5nIGVsc2UuCisgICAgICAgICAgICAgICAgICAgICMgWFhYIFdoeSBub3QganVzdCBsZXQgdGhlIGV4Y2VwdGlvbiBwYXNzIHRocm91Z2g/CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJsb2NraW5nSU9FcnJvcihlLmVycm5vLCBlLnN0cmVycm9yLCAwKQorICAgICAgICAgICAgYmVmb3JlID0gbGVuKHNlbGYuX3dyaXRlX2J1ZikKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2J1Zi5leHRlbmQoYikKKyAgICAgICAgICAgIHdyaXR0ZW4gPSBsZW4oc2VsZi5fd3JpdGVfYnVmKSAtIGJlZm9yZQorICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLmJ1ZmZlcl9zaXplOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuX3dyaXRlX2J1ZikgPiBzZWxmLmJ1ZmZlcl9zaXplOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSd2ZSBoaXQgdGhlIGJ1ZmZlcl9zaXplLiBXZSBoYXZlIHRvIGFjY2VwdCBhIHBhcnRpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgd3JpdGUgYW5kIGN1dCBiYWNrIG91ciBidWZmZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVyYWdlID0gbGVuKHNlbGYuX3dyaXRlX2J1ZikgLSBzZWxmLmJ1ZmZlcl9zaXplCisgICAgICAgICAgICAgICAgICAgICAgICB3cml0dGVuIC09IG92ZXJhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2J1ZiA9IHNlbGYuX3dyaXRlX2J1Zls6c2VsZi5idWZmZXJfc2l6ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJsb2NraW5nSU9FcnJvcihlLmVycm5vLCBlLnN0cmVycm9yLCB3cml0dGVuKQorICAgICAgICAgICAgcmV0dXJuIHdyaXR0ZW4KKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgIHdpdGggc2VsZi5fd3JpdGVfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZsdXNoX3VubG9ja2VkKCkKKyAgICAgICAgICAgIGlmIHBvcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBvcyA9IHNlbGYucmF3LnRlbGwoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRydW5jYXRlKHBvcykKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQorCisgICAgZGVmIF9mbHVzaF91bmxvY2tlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmbHVzaCBvZiBjbG9zZWQgZmlsZSIpCisgICAgICAgIHdyaXR0ZW4gPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX3dyaXRlX2J1ZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzZWxmLnJhdy53cml0ZShzZWxmLl93cml0ZV9idWYpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbiA+IGxlbihzZWxmLl93cml0ZV9idWYpIG9yIG4gPCAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCisgICAgICAgICAgICAgICAgd3JpdHRlbiArPSBuCisgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIG4gPSBlLmNoYXJhY3RlcnNfd3JpdHRlbgorICAgICAgICAgICAgZGVsIHNlbGYuX3dyaXRlX2J1Zls6bl0KKyAgICAgICAgICAgIHdyaXR0ZW4gKz0gbgorICAgICAgICAgICAgcmFpc2UgQmxvY2tpbmdJT0Vycm9yKGUuZXJybm8sIGUuc3RyZXJyb3IsIHdyaXR0ZW4pCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIF9CdWZmZXJlZElPTWl4aW4udGVsbChzZWxmKSArIGxlbihzZWxmLl93cml0ZV9idWYpCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKKyAgICAgICAgaWYgbm90ICgwIDw9IHdoZW5jZSA8PSAyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2hlbmNlIikKKyAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQorICAgICAgICAgICAgcmV0dXJuIF9CdWZmZXJlZElPTWl4aW4uc2VlayhzZWxmLCBwb3MsIHdoZW5jZSkKKworCitjbGFzcyBCdWZmZXJlZFJXUGFpcihCdWZmZXJlZElPQmFzZSk6CisKKyAgICAiIiJBIGJ1ZmZlcmVkIHJlYWRlciBhbmQgd3JpdGVyIG9iamVjdCB0b2dldGhlci4KKworICAgIEEgYnVmZmVyZWQgcmVhZGVyIG9iamVjdCBhbmQgYnVmZmVyZWQgd3JpdGVyIG9iamVjdCBwdXQgdG9nZXRoZXIgdG8KKyAgICBmb3JtIGEgc2VxdWVudGlhbCBJTyBvYmplY3QgdGhhdCBjYW4gcmVhZCBhbmQgd3JpdGUuIFRoaXMgaXMgdHlwaWNhbGx5CisgICAgdXNlZCB3aXRoIGEgc29ja2V0IG9yIHR3by13YXkgcGlwZS4KKworICAgIHJlYWRlciBhbmQgd3JpdGVyIGFyZSBSYXdJT0Jhc2Ugb2JqZWN0cyB0aGF0IGFyZSByZWFkYWJsZSBhbmQKKyAgICB3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0bworICAgIERFRkFVTFRfQlVGRkVSX1NJWkUuCisgICAgIiIiCisKKyAgICAjIFhYWCBUaGUgdXNlZnVsbmVzcyBvZiB0aGlzIChjb21wYXJlZCB0byBoYXZpbmcgdHdvIHNlcGFyYXRlIElPCisgICAgIyBvYmplY3RzKSBpcyBxdWVzdGlvbmFibGUuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGVyLCB3cml0ZXIsCisgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdHdvIFJhd0lPIGluc3RhbmNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG1heF9idWZmZXJfc2l6ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorCisgICAgICAgIGlmIG5vdCByZWFkZXIucmVhZGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKKworICAgICAgICBpZiBub3Qgd3JpdGVyLndyaXRhYmxlKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCisKKyAgICAgICAgc2VsZi5yZWFkZXIgPSBCdWZmZXJlZFJlYWRlcihyZWFkZXIsIGJ1ZmZlcl9zaXplKQorICAgICAgICBzZWxmLndyaXRlciA9IEJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgYnVmZmVyX3NpemUpCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICBpZiBuIGlzIE5vbmU6CisgICAgICAgICAgICBuID0gLTEKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQobikKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvKGIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZShiKQorCisgICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsobikKKworICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKG4pCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0YWJsZSgpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci5mbHVzaCgpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5yZWFkZXIuY2xvc2UoKQorCisgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLmlzYXR0eSgpIG9yIHNlbGYud3JpdGVyLmlzYXR0eSgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIuY2xvc2VkCisKKworY2xhc3MgQnVmZmVyZWRSYW5kb20oQnVmZmVyZWRXcml0ZXIsIEJ1ZmZlcmVkUmVhZGVyKToKKworICAgICIiIkEgYnVmZmVyZWQgaW50ZXJmYWNlIHRvIHJhbmRvbSBhY2Nlc3Mgc3RyZWFtcy4KKworICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgcmVhZGVyIGFuZCB3cml0ZXIgZm9yIGEgc2Vla2FibGUgc3RyZWFtLAorICAgIHJhdywgZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdAorICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfQlVGRkVSX1NJWkUuCisgICAgIiIiCisKKyAgICBfd2FybmluZ19zdGFja19vZmZzZXQgPSAzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3LAorICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFLCBtYXhfYnVmZmVyX3NpemU9Tm9uZSk6CisgICAgICAgIHJhdy5fY2hlY2tTZWVrYWJsZSgpCisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyLl9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemUpCisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyLl9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemUsIG1heF9idWZmZXJfc2l6ZSkKKworICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgorICAgICAgICBpZiBub3QgKDAgPD0gd2hlbmNlIDw9IDIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aGVuY2UiKQorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6CisgICAgICAgICAgICAjIFVuZG8gcmVhZCBhaGVhZC4KKyAgICAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgorICAgICAgICAgICAgICAgIHNlbGYucmF3LnNlZWsoc2VsZi5fcmVhZF9wb3MgLSBsZW4oc2VsZi5fcmVhZF9idWYpLCAxKQorICAgICAgICAjIEZpcnN0IGRvIHRoZSByYXcgc2VlaywgdGhlbiBlbXB0eSB0aGUgcmVhZCBidWZmZXIsIHNvIHRoYXQKKyAgICAgICAgIyBpZiB0aGUgcmF3IHNlZWsgZmFpbHMsIHdlIGRvbid0IGxvc2UgYnVmZmVyZWQgZGF0YSBmb3JldmVyLgorICAgICAgICBwb3MgPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQorICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKKyAgICAgICAgaWYgcG9zIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInNlZWsoKSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgcmV0dXJuIHBvcworCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2J1ZjoKKyAgICAgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci50ZWxsKHNlbGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIudGVsbChzZWxmKQorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgaWYgcG9zIGlzIE5vbmU6CisgICAgICAgICAgICBwb3MgPSBzZWxmLnRlbGwoKQorICAgICAgICAjIFVzZSBzZWVrIHRvIGZsdXNoIHRoZSByZWFkIGJ1ZmZlci4KKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRydW5jYXRlKHNlbGYsIHBvcykKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgIG4gPSAtMQorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgbikKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50byhzZWxmLCBiKQorCisgICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIG4pCisKKyAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgbikKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6CisgICAgICAgICAgICAjIFVuZG8gcmVhZGFoZWFkCisgICAgICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLnJhdy5zZWVrKHNlbGYuX3JlYWRfcG9zIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCisgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci53cml0ZShzZWxmLCBiKQorCisKK2NsYXNzIFRleHRJT0Jhc2UoSU9CYXNlKToKKworICAgICIiIkJhc2UgY2xhc3MgZm9yIHRleHQgSS9PLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGNoYXJhY3RlciBhbmQgbGluZSBiYXNlZCBpbnRlcmZhY2UgdG8gc3RyZWFtCisgICAgSS9PLiBUaGVyZSBpcyBubyByZWFkaW50byBtZXRob2QgYmVjYXVzZSBQeXRob24ncyBjaGFyYWN0ZXIgc3RyaW5ncworICAgIGFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KKyAgICAiIiIKKworICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgorICAgICAgICAiIiJSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLgorCisgICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgorICAgICAgICBJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICAiIiJXcml0ZSBzdHJpbmcgcyB0byBzdHJlYW0uIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCisKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgorICAgICAgICAiIiJUcnVuY2F0ZSBzaXplIHRvIHBvcy4iIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInRydW5jYXRlIikKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIiUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRi4KKworICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiBFT0YgaXMgaGl0IGltbWVkaWF0ZWx5LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWRsaW5lIikKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZXBhcmF0ZSB0aGUgdW5kZXJseWluZyBidWZmZXIgZnJvbSB0aGUgVGV4dElPQmFzZSBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgIEFmdGVyIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIFRleHRJTyBpcyBpbiBhbgorICAgICAgICB1bnVzYWJsZSBzdGF0ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJkZXRhY2giKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVuY29kaW5nKHNlbGYpOgorICAgICAgICAiIiJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS4iIiIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIiIiTGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgc28gZmFyLgorCisgICAgICAgIE9ubHkgbGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgZHVyaW5nIHJlYWRpbmcgYXJlIGNvbnNpZGVyZWQuCisKKyAgICAgICAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgIiIiRXJyb3Igc2V0dGluZyBvZiB0aGUgZGVjb2RlciBvciBlbmNvZGVyLgorCisgICAgICAgIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlLiIiIgorICAgICAgICByZXR1cm4gTm9uZQorCitpby5UZXh0SU9CYXNlLnJlZ2lzdGVyKFRleHRJT0Jhc2UpCisKKworY2xhc3MgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICByIiIiQ29kZWMgdXNlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLiAgSXQgd3JhcHMKKyAgICBhbm90aGVyIGluY3JlbWVudGFsIGRlY29kZXIsIHRyYW5zbGF0aW5nIFxyXG4gYW5kIFxyIGludG8gXG4uICBJdCBhbHNvCisgICAgcmVjb3JkcyB0aGUgdHlwZXMgb2YgbmV3bGluZXMgZW5jb3VudGVyZWQuICBXaGVuIHVzZWQgd2l0aAorICAgIHRyYW5zbGF0ZT1GYWxzZSwgaXQgZW5zdXJlcyB0aGF0IHRoZSBuZXdsaW5lIHNlcXVlbmNlIGlzIHJldHVybmVkIGluCisgICAgb25lIHBpZWNlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWNvZGVyLCB0cmFuc2xhdGUsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIuX19pbml0X18oc2VsZiwgZXJyb3JzPWVycm9ycykKKyAgICAgICAgc2VsZi50cmFuc2xhdGUgPSB0cmFuc2xhdGUKKyAgICAgICAgc2VsZi5kZWNvZGVyID0gZGVjb2RlcgorICAgICAgICBzZWxmLnNlZW5ubCA9IDAKKyAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBGYWxzZQorCisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICAjIGRlY29kZSBpbnB1dCAod2l0aCB0aGUgZXZlbnR1YWwgXHIgZnJvbSBhIHByZXZpb3VzIHBhc3MpCisgICAgICAgIGlmIHNlbGYuZGVjb2RlciBpcyBOb25lOgorICAgICAgICAgICAgb3V0cHV0ID0gaW5wdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuZGVjb2Rlci5kZWNvZGUoaW5wdXQsIGZpbmFsPWZpbmFsKQorICAgICAgICBpZiBzZWxmLnBlbmRpbmdjciBhbmQgKG91dHB1dCBvciBmaW5hbCk6CisgICAgICAgICAgICBvdXRwdXQgPSAiXHIiICsgb3V0cHV0CisgICAgICAgICAgICBzZWxmLnBlbmRpbmdjciA9IEZhbHNlCisKKyAgICAgICAgIyByZXRhaW4gbGFzdCBcciBldmVuIHdoZW4gbm90IHRyYW5zbGF0aW5nIGRhdGE6CisgICAgICAgICMgdGhlbiByZWFkbGluZSgpIGlzIHN1cmUgdG8gZ2V0IFxyXG4gaW4gb25lIHBhc3MKKyAgICAgICAgaWYgb3V0cHV0LmVuZHN3aXRoKCJcciIpIGFuZCBub3QgZmluYWw6CisgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXRbOi0xXQorICAgICAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBUcnVlCisKKyAgICAgICAgIyBSZWNvcmQgd2hpY2ggbmV3bGluZXMgYXJlIHJlYWQKKyAgICAgICAgY3JsZiA9IG91dHB1dC5jb3VudCgnXHJcbicpCisgICAgICAgIGNyID0gb3V0cHV0LmNvdW50KCdccicpIC0gY3JsZgorICAgICAgICBsZiA9IG91dHB1dC5jb3VudCgnXG4nKSAtIGNybGYKKyAgICAgICAgc2VsZi5zZWVubmwgfD0gKGxmIGFuZCBzZWxmLl9MRikgfCAoY3IgYW5kIHNlbGYuX0NSKSBcCisgICAgICAgICAgICAgICAgICAgIHwgKGNybGYgYW5kIHNlbGYuX0NSTEYpCisKKyAgICAgICAgaWYgc2VsZi50cmFuc2xhdGU6CisgICAgICAgICAgICBpZiBjcmxmOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKCJcclxuIiwgIlxuIikKKyAgICAgICAgICAgIGlmIGNyOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKCJcciIsICJcbiIpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGdldHN0YXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlY29kZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGJ1ZiA9IGIiIgorICAgICAgICAgICAgZmxhZyA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1ZiwgZmxhZyA9IHNlbGYuZGVjb2Rlci5nZXRzdGF0ZSgpCisgICAgICAgIGZsYWcgPDw9IDEKKyAgICAgICAgaWYgc2VsZi5wZW5kaW5nY3I6CisgICAgICAgICAgICBmbGFnIHw9IDEKKyAgICAgICAgcmV0dXJuIGJ1ZiwgZmxhZworCisgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgYnVmLCBmbGFnID0gc3RhdGUKKyAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBib29sKGZsYWcgJiAxKQorICAgICAgICBpZiBzZWxmLmRlY29kZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRlY29kZXIuc2V0c3RhdGUoKGJ1ZiwgZmxhZyA+PiAxKSkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZWVubmwgPSAwCisgICAgICAgIHNlbGYucGVuZGluZ2NyID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5kZWNvZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kZWNvZGVyLnJlc2V0KCkKKworICAgIF9MRiA9IDEKKyAgICBfQ1IgPSAyCisgICAgX0NSTEYgPSA0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmV3bGluZXMoc2VsZik6CisgICAgICAgIHJldHVybiAoTm9uZSwKKyAgICAgICAgICAgICAgICAiXG4iLAorICAgICAgICAgICAgICAgICJcciIsCisgICAgICAgICAgICAgICAgKCJcciIsICJcbiIpLAorICAgICAgICAgICAgICAgICJcclxuIiwKKyAgICAgICAgICAgICAgICAoIlxuIiwgIlxyXG4iKSwKKyAgICAgICAgICAgICAgICAoIlxyIiwgIlxyXG4iKSwKKyAgICAgICAgICAgICAgICAoIlxyIiwgIlxuIiwgIlxyXG4iKQorICAgICAgICAgICAgICAgKVtzZWxmLnNlZW5ubF0KKworCitjbGFzcyBUZXh0SU9XcmFwcGVyKFRleHRJT0Jhc2UpOgorCisgICAgciIiIkNoYXJhY3RlciBhbmQgbGluZSBiYXNlZCBsYXllciBvdmVyIGEgQnVmZmVyZWRJT0Jhc2Ugb2JqZWN0LCBidWZmZXIuCisKKyAgICBlbmNvZGluZyBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdGhhdCB0aGUgc3RyZWFtIHdpbGwgYmUKKyAgICBkZWNvZGVkIG9yIGVuY29kZWQgd2l0aC4gSXQgZGVmYXVsdHMgdG8gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nLgorCisgICAgZXJyb3JzIGRldGVybWluZXMgdGhlIHN0cmljdG5lc3Mgb2YgZW5jb2RpbmcgYW5kIGRlY29kaW5nIChzZWUgdGhlCisgICAgY29kZWNzLnJlZ2lzdGVyKSBhbmQgZGVmYXVsdHMgdG8gInN0cmljdCIuCisKKyAgICBuZXdsaW5lIGNhbiBiZSBOb25lLCAnJywgJ1xuJywgJ1xyJywgb3IgJ1xyXG4nLiAgSXQgY29udHJvbHMgdGhlCisgICAgaGFuZGxpbmcgb2YgbGluZSBlbmRpbmdzLiBJZiBpdCBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgaXMKKyAgICBlbmFibGVkLiAgV2l0aCB0aGlzIGVuYWJsZWQsIG9uIGlucHV0LCB0aGUgbGluZXMgZW5kaW5ncyAnXG4nLCAnXHInLAorICAgIG9yICdcclxuJyBhcmUgdHJhbnNsYXRlZCB0byAnXG4nIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGUKKyAgICBjYWxsZXIuIENvbnZlcnNlbHksIG9uIG91dHB1dCwgJ1xuJyBpcyB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW0KKyAgICBkZWZhdWx0IGxpbmUgc2VwZXJhdG9yLCBvcy5saW5lc2VwLiBJZiBuZXdsaW5lIGlzIGFueSBvdGhlciBvZiBpdHMKKyAgICBsZWdhbCB2YWx1ZXMsIHRoYXQgbmV3bGluZSBiZWNvbWVzIHRoZSBuZXdsaW5lIHdoZW4gdGhlIGZpbGUgaXMgcmVhZAorICAgIGFuZCBpdCBpcyByZXR1cm5lZCB1bnRyYW5zbGF0ZWQuIE9uIG91dHB1dCwgJ1xuJyBpcyBjb252ZXJ0ZWQgdG8gdGhlCisgICAgbmV3bGluZS4KKworICAgIElmIGxpbmVfYnVmZmVyaW5nIGlzIFRydWUsIGEgY2FsbCB0byBmbHVzaCBpcyBpbXBsaWVkIHdoZW4gYSBjYWxsIHRvCisgICAgd3JpdGUgY29udGFpbnMgYSBuZXdsaW5lIGNoYXJhY3Rlci4KKyAgICAiIiIKKworICAgIF9DSFVOS19TSVpFID0gMjA0OAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1ZmZlciwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbGluZV9idWZmZXJpbmc9RmFsc2UpOgorICAgICAgICBpZiBuZXdsaW5lIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShuZXdsaW5lLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaWxsZWdhbCBuZXdsaW5lIHR5cGU6ICVyIiAlICh0eXBlKG5ld2xpbmUpLCkpCisgICAgICAgIGlmIG5ld2xpbmUgbm90IGluIChOb25lLCAiIiwgIlxuIiwgIlxyIiwgIlxyXG4iKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImlsbGVnYWwgbmV3bGluZSB2YWx1ZTogJXIiICUgKG5ld2xpbmUsKSkKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgIyBJbXBvcnRpbmcgbG9jYWxlIG1heSBmYWlsIGlmIFB5dGhvbiBpcyBiZWluZyBidWlsdAorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gImFzY2lpIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZW5jb2RpbmcsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBlbmNvZGluZzogJXIiICUgZW5jb2RpbmcpCisKKyAgICAgICAgaWYgZXJyb3JzIGlzIE5vbmU6CisgICAgICAgICAgICBlcnJvcnMgPSAic3RyaWN0IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXJyb3JzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGVycm9yczogJXIiICUgZXJyb3JzKQorCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLl9saW5lX2J1ZmZlcmluZyA9IGxpbmVfYnVmZmVyaW5nCisgICAgICAgIHNlbGYuX2VuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5fZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuX3JlYWR1bml2ZXJzYWwgPSBub3QgbmV3bGluZQorICAgICAgICBzZWxmLl9yZWFkdHJhbnNsYXRlID0gbmV3bGluZSBpcyBOb25lCisgICAgICAgIHNlbGYuX3JlYWRubCA9IG5ld2xpbmUKKyAgICAgICAgc2VsZi5fd3JpdGV0cmFuc2xhdGUgPSBuZXdsaW5lICE9ICcnCisgICAgICAgIHNlbGYuX3dyaXRlbmwgPSBuZXdsaW5lIG9yIG9zLmxpbmVzZXAKKyAgICAgICAgc2VsZi5fZW5jb2RlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGVjb2RlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFycyA9ICcnICAjIGJ1ZmZlciBmb3IgdGV4dCByZXR1cm5lZCBmcm9tIGRlY29kZXIKKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gMCAgIyBvZmZzZXQgaW50byBfZGVjb2RlZF9jaGFycyBmb3IgcmVhZCgpCisgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZSAgIyBpbmZvIGZvciByZWNvbnN0cnVjdGluZyBkZWNvZGVyIHN0YXRlCisgICAgICAgIHNlbGYuX3NlZWthYmxlID0gc2VsZi5fdGVsbGluZyA9IHNlbGYuYnVmZmVyLnNlZWthYmxlKCkKKworICAgICAgICBpZiBzZWxmLl9zZWVrYWJsZSBhbmQgc2VsZi53cml0YWJsZSgpOgorICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKKyAgICAgICAgICAgIGlmIHBvc2l0aW9uICE9IDA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfZW5jb2RlcigpLnNldHN0YXRlKDApCisgICAgICAgICAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWV0aW1lcyB0aGUgZW5jb2RlciBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgc2VsZi5fc25hcHNob3QgaXMgZWl0aGVyIE5vbmUsIG9yIGEgdHVwbGUgKGRlY19mbGFncywgbmV4dF9pbnB1dCkKKyAgICAjIHdoZXJlIGRlY19mbGFncyBpcyB0aGUgc2Vjb25kIChpbnRlZ2VyKSBpdGVtIG9mIHRoZSBkZWNvZGVyIHN0YXRlCisgICAgIyBhbmQgbmV4dF9pbnB1dCBpcyB0aGUgY2h1bmsgb2YgaW5wdXQgYnl0ZXMgdGhhdCBjb21lcyBuZXh0IGFmdGVyIHRoZQorICAgICMgc25hcHNob3QgcG9pbnQuICBXZSB1c2UgdGhpcyB0byByZWNvbnN0cnVjdCBkZWNvZGVyIHN0YXRlcyBpbiB0ZWxsKCkuCisKKyAgICAjIE5hbWluZyBjb252ZW50aW9uOgorICAgICMgICAtICJieXRlc18uLi4iIGZvciBpbnRlZ2VyIHZhcmlhYmxlcyB0aGF0IGNvdW50IGlucHV0IGJ5dGVzCisgICAgIyAgIC0gImNoYXJzXy4uLiIgZm9yIGludGVnZXIgdmFyaWFibGVzIHRoYXQgY291bnQgZGVjb2RlZCBjaGFyYWN0ZXJzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uVGV4dElPV3JhcHBlciBlbmNvZGluZz0nezB9Jz4iLmZvcm1hdChzZWxmLmVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uVGV4dElPV3JhcHBlciBuYW1lPXswIXJ9IGVuY29kaW5nPSd7MX0nPiIuZm9ybWF0KAorICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYuZW5jb2RpbmcpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbmNvZGluZworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9ycworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmVfYnVmZmVyaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGluZV9idWZmZXJpbmcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBidWZmZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlZWthYmxlCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5yZWFkYWJsZSgpCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci53cml0YWJsZSgpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuYnVmZmVyLmZsdXNoKCkKKyAgICAgICAgc2VsZi5fdGVsbGluZyA9IHNlbGYuX3NlZWthYmxlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyLmNsb3NlKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5jbG9zZWQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIubmFtZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmZpbGVubygpCisKKyAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuaXNhdHR5KCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBzKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSB0byBjbG9zZWQgZmlsZSIpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCB3cml0ZSAlcyB0byB0ZXh0IHN0cmVhbSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBsZW5ndGggPSBsZW4ocykKKyAgICAgICAgaGFzbGYgPSAoc2VsZi5fd3JpdGV0cmFuc2xhdGUgb3Igc2VsZi5fbGluZV9idWZmZXJpbmcpIGFuZCAiXG4iIGluIHMKKyAgICAgICAgaWYgaGFzbGYgYW5kIHNlbGYuX3dyaXRldHJhbnNsYXRlIGFuZCBzZWxmLl93cml0ZW5sICE9ICJcbiI6CisgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCJcbiIsIHNlbGYuX3dyaXRlbmwpCisgICAgICAgIGVuY29kZXIgPSBzZWxmLl9lbmNvZGVyIG9yIHNlbGYuX2dldF9lbmNvZGVyKCkKKyAgICAgICAgIyBYWFggV2hhdCBpZiB3ZSB3ZXJlIGp1c3QgcmVhZGluZz8KKyAgICAgICAgYiA9IGVuY29kZXIuZW5jb2RlKHMpCisgICAgICAgIHNlbGYuYnVmZmVyLndyaXRlKGIpCisgICAgICAgIGlmIHNlbGYuX2xpbmVfYnVmZmVyaW5nIGFuZCAoaGFzbGYgb3IgIlxyIiBpbiBzKToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fZGVjb2RlcjoKKyAgICAgICAgICAgIHNlbGYuX2RlY29kZXIucmVzZXQoKQorICAgICAgICByZXR1cm4gbGVuZ3RoCisKKyAgICBkZWYgX2dldF9lbmNvZGVyKHNlbGYpOgorICAgICAgICBtYWtlX2VuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKHNlbGYuX2VuY29kaW5nKQorICAgICAgICBzZWxmLl9lbmNvZGVyID0gbWFrZV9lbmNvZGVyKHNlbGYuX2Vycm9ycykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VuY29kZXIKKworICAgIGRlZiBfZ2V0X2RlY29kZXIoc2VsZik6CisgICAgICAgIG1ha2VfZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoc2VsZi5fZW5jb2RpbmcpCisgICAgICAgIGRlY29kZXIgPSBtYWtlX2RlY29kZXIoc2VsZi5fZXJyb3JzKQorICAgICAgICBpZiBzZWxmLl9yZWFkdW5pdmVyc2FsOgorICAgICAgICAgICAgZGVjb2RlciA9IEluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2Rlciwgc2VsZi5fcmVhZHRyYW5zbGF0ZSkKKyAgICAgICAgc2VsZi5fZGVjb2RlciA9IGRlY29kZXIKKyAgICAgICAgcmV0dXJuIGRlY29kZXIKKworICAgICMgVGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzIGltcGxlbWVudCBhbiBBRFQgZm9yIF9kZWNvZGVkX2NoYXJzLgorICAgICMgVGV4dCByZXR1cm5lZCBmcm9tIHRoZSBkZWNvZGVyIGlzIGJ1ZmZlcmVkIGhlcmUgdW50aWwgdGhlIGNsaWVudAorICAgICMgcmVxdWVzdHMgaXQgYnkgY2FsbGluZyBvdXIgcmVhZCgpIG9yIHJlYWRsaW5lKCkgbWV0aG9kLgorICAgIGRlZiBfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgY2hhcnMpOgorICAgICAgICAiIiJTZXQgdGhlIF9kZWNvZGVkX2NoYXJzIGJ1ZmZlci4iIiIKKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFycyA9IGNoYXJzCisgICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IDAKKworICAgIGRlZiBfZ2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgIiIiQWR2YW5jZSBpbnRvIHRoZSBfZGVjb2RlZF9jaGFycyBidWZmZXIuIiIiCisgICAgICAgIG9mZnNldCA9IHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZAorICAgICAgICBpZiBuIGlzIE5vbmU6CisgICAgICAgICAgICBjaGFycyA9IHNlbGYuX2RlY29kZWRfY2hhcnNbb2Zmc2V0Ol0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoYXJzID0gc2VsZi5fZGVjb2RlZF9jaGFyc1tvZmZzZXQ6b2Zmc2V0ICsgbl0KKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkICs9IGxlbihjaGFycykKKyAgICAgICAgcmV0dXJuIGNoYXJzCisKKyAgICBkZWYgX3Jld2luZF9kZWNvZGVkX2NoYXJzKHNlbGYsIG4pOgorICAgICAgICAiIiJSZXdpbmQgdGhlIF9kZWNvZGVkX2NoYXJzIGJ1ZmZlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkIDwgbjoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJyZXdpbmQgZGVjb2RlZF9jaGFycyBvdXQgb2YgYm91bmRzIikKKyAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkIC09IG4KKworICAgIGRlZiBfcmVhZF9jaHVuayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgYW5kIGRlY29kZSB0aGUgbmV4dCBjaHVuayBvZiBkYXRhIGZyb20gdGhlIEJ1ZmZlcmVkUmVhZGVyLgorICAgICAgICAiIiIKKworICAgICAgICAjIFRoZSByZXR1cm4gdmFsdWUgaXMgVHJ1ZSB1bmxlc3MgRU9GIHdhcyByZWFjaGVkLiAgVGhlIGRlY29kZWQKKyAgICAgICAgIyBzdHJpbmcgaXMgcGxhY2VkIGluIHNlbGYuX2RlY29kZWRfY2hhcnMgKHJlcGxhY2luZyBpdHMgcHJldmlvdXMKKyAgICAgICAgIyB2YWx1ZSkuICBUaGUgZW50aXJlIGlucHV0IGNodW5rIGlzIHNlbnQgdG8gdGhlIGRlY29kZXIsIHRob3VnaAorICAgICAgICAjIHNvbWUgb2YgaXQgbWF5IHJlbWFpbiBidWZmZXJlZCBpbiB0aGUgZGVjb2RlciwgeWV0IHRvIGJlCisgICAgICAgICMgY29udmVydGVkLgorCisgICAgICAgIGlmIHNlbGYuX2RlY29kZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIGRlY29kZXIiKQorCisgICAgICAgIGlmIHNlbGYuX3RlbGxpbmc6CisgICAgICAgICAgICAjIFRvIHByZXBhcmUgZm9yIHRlbGwoKSwgd2UgbmVlZCB0byBzbmFwc2hvdCBhIHBvaW50IGluIHRoZQorICAgICAgICAgICAgIyBmaWxlIHdoZXJlIHRoZSBkZWNvZGVyJ3MgaW5wdXQgYnVmZmVyIGlzIGVtcHR5LgorCisgICAgICAgICAgICBkZWNfYnVmZmVyLCBkZWNfZmxhZ3MgPSBzZWxmLl9kZWNvZGVyLmdldHN0YXRlKCkKKyAgICAgICAgICAgICMgR2l2ZW4gdGhpcywgd2Uga25vdyB0aGVyZSB3YXMgYSB2YWxpZCBzbmFwc2hvdCBwb2ludAorICAgICAgICAgICAgIyBsZW4oZGVjX2J1ZmZlcikgYnl0ZXMgYWdvIHdpdGggZGVjb2RlciBzdGF0ZSAoYicnLCBkZWNfZmxhZ3MpLgorCisgICAgICAgICMgUmVhZCBhIGNodW5rLCBkZWNvZGUgaXQsIGFuZCBwdXQgdGhlIHJlc3VsdCBpbiBzZWxmLl9kZWNvZGVkX2NoYXJzLgorICAgICAgICBpbnB1dF9jaHVuayA9IHNlbGYuYnVmZmVyLnJlYWQxKHNlbGYuX0NIVU5LX1NJWkUpCisgICAgICAgIGVvZiA9IG5vdCBpbnB1dF9jaHVuaworICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycyhzZWxmLl9kZWNvZGVyLmRlY29kZShpbnB1dF9jaHVuaywgZW9mKSkKKworICAgICAgICBpZiBzZWxmLl90ZWxsaW5nOgorICAgICAgICAgICAgIyBBdCB0aGUgc25hcHNob3QgcG9pbnQsIGxlbihkZWNfYnVmZmVyKSBieXRlcyBiZWZvcmUgdGhlIHJlYWQsCisgICAgICAgICAgICAjIHRoZSBuZXh0IGlucHV0IHRvIGJlIGRlY29kZWQgaXMgZGVjX2J1ZmZlciArIGlucHV0X2NodW5rLgorICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSAoZGVjX2ZsYWdzLCBkZWNfYnVmZmVyICsgaW5wdXRfY2h1bmspCisKKyAgICAgICAgcmV0dXJuIG5vdCBlb2YKKworICAgIGRlZiBfcGFja19jb29raWUoc2VsZiwgcG9zaXRpb24sIGRlY19mbGFncz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdG9fZmVlZD0wLCBuZWVkX2VvZj0wLCBjaGFyc190b19za2lwPTApOgorICAgICAgICAjIFRoZSBtZWFuaW5nIG9mIGEgdGVsbCgpIGNvb2tpZSBpczogc2VlayB0byBwb3NpdGlvbiwgc2V0IHRoZQorICAgICAgICAjIGRlY29kZXIgZmxhZ3MgdG8gZGVjX2ZsYWdzLCByZWFkIGJ5dGVzX3RvX2ZlZWQgYnl0ZXMsIGZlZWQgdGhlbQorICAgICAgICAjIGludG8gdGhlIGRlY29kZXIgd2l0aCBuZWVkX2VvZiBhcyB0aGUgRU9GIGZsYWcsIHRoZW4gc2tpcAorICAgICAgICAjIGNoYXJzX3RvX3NraXAgY2hhcmFjdGVycyBvZiB0aGUgZGVjb2RlZCByZXN1bHQuICBGb3IgbW9zdCBzaW1wbGUKKyAgICAgICAgIyBkZWNvZGVycywgdGVsbCgpIHdpbGwgb2Z0ZW4ganVzdCBnaXZlIGEgYnl0ZSBvZmZzZXQgaW4gdGhlIGZpbGUuCisgICAgICAgIHJldHVybiAocG9zaXRpb24gfCAoZGVjX2ZsYWdzPDw2NCkgfCAoYnl0ZXNfdG9fZmVlZDw8MTI4KSB8CisgICAgICAgICAgICAgICAoY2hhcnNfdG9fc2tpcDw8MTkyKSB8IGJvb2wobmVlZF9lb2YpPDwyNTYpCisKKyAgICBkZWYgX3VucGFja19jb29raWUoc2VsZiwgYmlnaW50KToKKyAgICAgICAgcmVzdCwgcG9zaXRpb24gPSBkaXZtb2QoYmlnaW50LCAxPDw2NCkKKyAgICAgICAgcmVzdCwgZGVjX2ZsYWdzID0gZGl2bW9kKHJlc3QsIDE8PDY0KQorICAgICAgICByZXN0LCBieXRlc190b19mZWVkID0gZGl2bW9kKHJlc3QsIDE8PDY0KQorICAgICAgICBuZWVkX2VvZiwgY2hhcnNfdG9fc2tpcCA9IGRpdm1vZChyZXN0LCAxPDw2NCkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uLCBkZWNfZmxhZ3MsIGJ5dGVzX3RvX2ZlZWQsIG5lZWRfZW9mLCBjaGFyc190b19za2lwCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3NlZWthYmxlOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3RlbGxpbmc6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsaW5nIHBvc2l0aW9uIGRpc2FibGVkIGJ5IG5leHQoKSBjYWxsIikKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHBvc2l0aW9uID0gc2VsZi5idWZmZXIudGVsbCgpCisgICAgICAgIGRlY29kZXIgPSBzZWxmLl9kZWNvZGVyCisgICAgICAgIGlmIGRlY29kZXIgaXMgTm9uZSBvciBzZWxmLl9zbmFwc2hvdCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fZGVjb2RlZF9jaGFyczoKKyAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigicGVuZGluZyBkZWNvZGVkIHRleHQiKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uCisKKyAgICAgICAgIyBTa2lwIGJhY2t3YXJkIHRvIHRoZSBzbmFwc2hvdCBwb2ludCAoc2VlIF9yZWFkX2NodW5rKS4KKyAgICAgICAgZGVjX2ZsYWdzLCBuZXh0X2lucHV0ID0gc2VsZi5fc25hcHNob3QKKyAgICAgICAgcG9zaXRpb24gLT0gbGVuKG5leHRfaW5wdXQpCisKKyAgICAgICAgIyBIb3cgbWFueSBkZWNvZGVkIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHVzZWQgdXAgc2luY2UgdGhlIHNuYXBzaG90PworICAgICAgICBjaGFyc190b19za2lwID0gc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkCisgICAgICAgIGlmIGNoYXJzX3RvX3NraXAgPT0gMDoKKyAgICAgICAgICAgICMgV2UgaGF2ZW4ndCBtb3ZlZCBmcm9tIHRoZSBzbmFwc2hvdCBwb2ludC4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZShwb3NpdGlvbiwgZGVjX2ZsYWdzKQorCisgICAgICAgICMgU3RhcnRpbmcgZnJvbSB0aGUgc25hcHNob3QgcG9zaXRpb24sIHdlIHdpbGwgd2FsayB0aGUgZGVjb2RlcgorICAgICAgICAjIGZvcndhcmQgdW50aWwgaXQgZ2l2ZXMgdXMgZW5vdWdoIGRlY29kZWQgY2hhcmFjdGVycy4KKyAgICAgICAgc2F2ZWRfc3RhdGUgPSBkZWNvZGVyLmdldHN0YXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LgorICAgICAgICAgICAgZGVjb2Rlci5zZXRzdGF0ZSgoYicnLCBkZWNfZmxhZ3MpKQorICAgICAgICAgICAgc3RhcnRfcG9zID0gcG9zaXRpb24KKyAgICAgICAgICAgIHN0YXJ0X2ZsYWdzLCBieXRlc19mZWQsIGNoYXJzX2RlY29kZWQgPSBkZWNfZmxhZ3MsIDAsIDAKKyAgICAgICAgICAgIG5lZWRfZW9mID0gMAorCisgICAgICAgICAgICAjIEZlZWQgdGhlIGRlY29kZXIgb25lIGJ5dGUgYXQgYSB0aW1lLiAgQXMgd2UgZ28sIG5vdGUgdGhlCisgICAgICAgICAgICAjIG5lYXJlc3QgInNhZmUgc3RhcnQgcG9pbnQiIGJlZm9yZSB0aGUgY3VycmVudCBsb2NhdGlvbgorICAgICAgICAgICAgIyAoYSBwb2ludCB3aGVyZSB0aGUgZGVjb2RlciBoYXMgbm90aGluZyBidWZmZXJlZCwgc28gc2VlaygpCisgICAgICAgICAgICAjIGNhbiBzYWZlbHkgc3RhcnQgZnJvbSB0aGVyZSBhbmQgYWR2YW5jZSB0byB0aGlzIGxvY2F0aW9uKS4KKyAgICAgICAgICAgIGZvciBuZXh0X2J5dGUgaW4gbmV4dF9pbnB1dDoKKyAgICAgICAgICAgICAgICBieXRlc19mZWQgKz0gMQorICAgICAgICAgICAgICAgIGNoYXJzX2RlY29kZWQgKz0gbGVuKGRlY29kZXIuZGVjb2RlKG5leHRfYnl0ZSkpCisgICAgICAgICAgICAgICAgZGVjX2J1ZmZlciwgZGVjX2ZsYWdzID0gZGVjb2Rlci5nZXRzdGF0ZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGRlY19idWZmZXIgYW5kIGNoYXJzX2RlY29kZWQgPD0gY2hhcnNfdG9fc2tpcDoKKyAgICAgICAgICAgICAgICAgICAgIyBEZWNvZGVyIGJ1ZmZlciBpcyBlbXB0eSwgc28gdGhpcyBpcyBhIHNhZmUgc3RhcnQgcG9pbnQuCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3BvcyArPSBieXRlc19mZWQKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNfdG9fc2tpcCAtPSBjaGFyc19kZWNvZGVkCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2ZsYWdzLCBieXRlc19mZWQsIGNoYXJzX2RlY29kZWQgPSBkZWNfZmxhZ3MsIDAsIDAKKyAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkID49IGNoYXJzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGdldCBlbm91Z2ggZGVjb2RlZCBkYXRhOyBzaWduYWwgRU9GIHRvIGdldCBtb3JlLgorICAgICAgICAgICAgICAgIGNoYXJzX2RlY29kZWQgKz0gbGVuKGRlY29kZXIuZGVjb2RlKGInJywgZmluYWw9VHJ1ZSkpCisgICAgICAgICAgICAgICAgbmVlZF9lb2YgPSAxCisgICAgICAgICAgICAgICAgaWYgY2hhcnNfZGVjb2RlZCA8IGNoYXJzX3RvX3NraXA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlY29uc3RydWN0IGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCisKKyAgICAgICAgICAgICMgVGhlIHJldHVybmVkIGNvb2tpZSBjb3JyZXNwb25kcyB0byB0aGUgbGFzdCBzYWZlIHN0YXJ0IHBvaW50LgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhY2tfY29va2llKAorICAgICAgICAgICAgICAgIHN0YXJ0X3Bvcywgc3RhcnRfZmxhZ3MsIGJ5dGVzX2ZlZCwgbmVlZF9lb2YsIGNoYXJzX3RvX3NraXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWNvZGVyLnNldHN0YXRlKHNhdmVkX3N0YXRlKQorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIGlmIHBvcyBpcyBOb25lOgorICAgICAgICAgICAgcG9zID0gc2VsZi50ZWxsKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLnRydW5jYXRlKHBvcykKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJidWZmZXIgaXMgYWxyZWFkeSBkZXRhY2hlZCIpCisgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBidWZmZXIgPSBzZWxmLl9idWZmZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICByZXR1cm4gYnVmZmVyCisKKyAgICBkZWYgc2VlayhzZWxmLCBjb29raWUsIHdoZW5jZT0wKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0ZWxsIG9uIGNsb3NlZCBmaWxlIikKKyAgICAgICAgaWYgbm90IHNlbGYuX3NlZWthYmxlOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKKyAgICAgICAgaWYgd2hlbmNlID09IDE6ICMgc2VlayByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uCisgICAgICAgICAgICBpZiBjb29raWUgIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCBkbyBub256ZXJvIGN1ci1yZWxhdGl2ZSBzZWVrcyIpCisgICAgICAgICAgICAjIFNlZWtpbmcgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gc2hvdWxkIGF0dGVtcHQgdG8KKyAgICAgICAgICAgICMgc3luYyB0aGUgdW5kZXJseWluZyBidWZmZXIgd2l0aCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICAgICAgIHdoZW5jZSA9IDAKKyAgICAgICAgICAgIGNvb2tpZSA9IHNlbGYudGVsbCgpCisgICAgICAgIGlmIHdoZW5jZSA9PSAyOiAjIHNlZWsgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUKKyAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIikKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci5zZWVrKDAsIDIpCisgICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKKyAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5fZGVjb2RlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVyLnJlc2V0KCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbgorICAgICAgICBpZiB3aGVuY2UgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2hlbmNlICglciwgc2hvdWxkIGJlIDAsIDEgb3IgMikiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoZW5jZSwpKQorICAgICAgICBpZiBjb29raWUgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgc2VlayBwb3NpdGlvbiAlciIgJSAoY29va2llLCkpCisgICAgICAgIHNlbGYuZmx1c2goKQorCisgICAgICAgICMgVGhlIHN0cmF0ZWd5IG9mIHNlZWsoKSBpcyB0byBnbyBiYWNrIHRvIHRoZSBzYWZlIHN0YXJ0IHBvaW50CisgICAgICAgICMgYW5kIHJlcGxheSB0aGUgZWZmZWN0IG9mIHJlYWQoY2hhcnNfdG9fc2tpcCkgZnJvbSB0aGVyZS4KKyAgICAgICAgc3RhcnRfcG9zLCBkZWNfZmxhZ3MsIGJ5dGVzX3RvX2ZlZWQsIG5lZWRfZW9mLCBjaGFyc190b19za2lwID0gXAorICAgICAgICAgICAgc2VsZi5fdW5wYWNrX2Nvb2tpZShjb29raWUpCisKKyAgICAgICAgIyBTZWVrIGJhY2sgdG8gdGhlIHNhZmUgc3RhcnQgcG9pbnQuCisgICAgICAgIHNlbGYuYnVmZmVyLnNlZWsoc3RhcnRfcG9zKQorICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKKyAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCisKKyAgICAgICAgIyBSZXN0b3JlIHRoZSBkZWNvZGVyIHRvIGl0cyBzdGF0ZSBmcm9tIHRoZSBzYWZlIHN0YXJ0IHBvaW50LgorICAgICAgICBpZiBjb29raWUgPT0gMCBhbmQgc2VsZi5fZGVjb2RlcjoKKyAgICAgICAgICAgIHNlbGYuX2RlY29kZXIucmVzZXQoKQorICAgICAgICBlbGlmIHNlbGYuX2RlY29kZXIgb3IgZGVjX2ZsYWdzIG9yIGNoYXJzX3RvX3NraXA6CisgICAgICAgICAgICBzZWxmLl9kZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCisgICAgICAgICAgICBzZWxmLl9kZWNvZGVyLnNldHN0YXRlKChiJycsIGRlY19mbGFncykpCisgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IChkZWNfZmxhZ3MsIGInJykKKworICAgICAgICBpZiBjaGFyc190b19za2lwOgorICAgICAgICAgICAgIyBKdXN0IGxpa2UgX3JlYWRfY2h1bmssIGZlZWQgdGhlIGRlY29kZXIgYW5kIHNhdmUgYSBzbmFwc2hvdC4KKyAgICAgICAgICAgIGlucHV0X2NodW5rID0gc2VsZi5idWZmZXIucmVhZChieXRlc190b19mZWVkKQorICAgICAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoCisgICAgICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5kZWNvZGUoaW5wdXRfY2h1bmssIG5lZWRfZW9mKSkKKyAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gKGRlY19mbGFncywgaW5wdXRfY2h1bmspCisKKyAgICAgICAgICAgICMgU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZGVjb2RlZF9jaGFycykgPCBjaGFyc190b19za2lwOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IGNoYXJzX3RvX3NraXAKKworICAgICAgICAjIEZpbmFsbHksIHJlc2V0IHRoZSBlbmNvZGVyIChtZXJlbHkgdXNlZnVsIGZvciBwcm9wZXIgQk9NIGhhbmRsaW5nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCisgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICMgU29tZXRpbWVzIHRoZSBlbmNvZGVyIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgorICAgICAgICAgICAgICAgIGVuY29kZXIuc2V0c3RhdGUoMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW5jb2Rlci5yZXNldCgpCisgICAgICAgIHJldHVybiBjb29raWUKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIHNlbGYuX2NoZWNrUmVhZGFibGUoKQorICAgICAgICBpZiBuIGlzIE5vbmU6CisgICAgICAgICAgICBuID0gLTEKKyAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuLl9faW5kZXhfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKQorICAgICAgICBpZiBuIDwgMDoKKyAgICAgICAgICAgICMgUmVhZCBldmVyeXRoaW5nLgorICAgICAgICAgICAgcmVzdWx0ID0gKHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkgKworICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuZGVjb2RlKHNlbGYuYnVmZmVyLnJlYWQoKSwgZmluYWw9VHJ1ZSkpCisgICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKKyAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgIGVvZiA9IEZhbHNlCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuKQorICAgICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdCkgPCBuIGFuZCBub3QgZW9mOgorICAgICAgICAgICAgICAgIGVvZiA9IG5vdCBzZWxmLl9yZWFkX2NodW5rKCkKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobiAtIGxlbihyZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHNlbGYuX3RlbGxpbmcgPSBGYWxzZQorICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCisgICAgICAgICAgICBzZWxmLl90ZWxsaW5nID0gc2VsZi5fc2Vla2FibGUKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQorICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICAgICAgbGltaXQgPSAtMQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciIpCisKKyAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCisgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCisKKyAgICAgICAgc3RhcnQgPSAwCisgICAgICAgICMgTWFrZSB0aGUgZGVjb2RlciBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWNvZGVyOgorICAgICAgICAgICAgc2VsZi5fZ2V0X2RlY29kZXIoKQorCisgICAgICAgIHBvcyA9IGVuZHBvcyA9IE5vbmUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWR0cmFuc2xhdGU6CisgICAgICAgICAgICAgICAgIyBOZXdsaW5lcyBhcmUgYWxyZWFkeSB0cmFuc2xhdGVkLCBvbmx5IHNlYXJjaCBmb3IgXG4KKyAgICAgICAgICAgICAgICBwb3MgPSBsaW5lLmZpbmQoJ1xuJywgc3RhcnQpCisgICAgICAgICAgICAgICAgaWYgcG9zID49IDA6CisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IHBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxlbihsaW5lKQorCisgICAgICAgICAgICBlbGlmIHNlbGYuX3JlYWR1bml2ZXJzYWw6CisgICAgICAgICAgICAgICAgIyBVbml2ZXJzYWwgbmV3bGluZSBzZWFyY2guIEZpbmQgYW55IG9mIFxyLCBcclxuLCBcbgorICAgICAgICAgICAgICAgICMgVGhlIGRlY29kZXIgZW5zdXJlcyB0aGF0IFxyXG4gYXJlIG5vdCBzcGxpdCBpbiB0d28gcGllY2VzCisKKyAgICAgICAgICAgICAgICAjIEluIEMgd2UnZCBsb29rIGZvciB0aGVzZSBpbiBwYXJhbGxlbCBvZiBjb3Vyc2UuCisgICAgICAgICAgICAgICAgbmxwb3MgPSBsaW5lLmZpbmQoIlxuIiwgc3RhcnQpCisgICAgICAgICAgICAgICAgY3Jwb3MgPSBsaW5lLmZpbmQoIlxyIiwgc3RhcnQpCisgICAgICAgICAgICAgICAgaWYgY3Jwb3MgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGlmIG5scG9zID09IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RoaW5nIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxlbihsaW5lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcbgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gbmxwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgbmxwb3MgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgbG9uZSBccgorICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjcnBvcyArIDEKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIG5scG9zIDwgY3Jwb3M6CisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgXG4KKyAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gbmxwb3MgKyAxCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBubHBvcyA9PSBjcnBvcyArIDE6CisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgXHJcbgorICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjcnBvcyArIDIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIFxyCisgICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIG5vbi11bml2ZXJzYWwKKyAgICAgICAgICAgICAgICBwb3MgPSBsaW5lLmZpbmQoc2VsZi5fcmVhZG5sKQorICAgICAgICAgICAgICAgIGlmIHBvcyA+PSAwOgorICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIE5vIGxpbmUgZW5kaW5nIHNlZW4geWV0IC0gZ2V0IG1vcmUgZGF0YScKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX3JlYWRfY2h1bmsoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgc2VsZi5fZGVjb2RlZF9jaGFyczoKKyAgICAgICAgICAgICAgICBsaW5lICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBlbmQgb2YgZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKCcnKQorICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisKKyAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6CisgICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKworICAgICAgICAjIFJld2luZCBfZGVjb2RlZF9jaGFycyB0byBqdXN0IGFmdGVyIHRoZSBsaW5lIGVuZGluZyB3ZSBmb3VuZC4KKyAgICAgICAgc2VsZi5fcmV3aW5kX2RlY29kZWRfY2hhcnMobGVuKGxpbmUpIC0gZW5kcG9zKQorICAgICAgICByZXR1cm4gbGluZVs6ZW5kcG9zXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5ld2xpbmVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVjb2Rlci5uZXdsaW5lcyBpZiBzZWxmLl9kZWNvZGVyIGVsc2UgTm9uZQorCisKK2NsYXNzIFN0cmluZ0lPKFRleHRJT1dyYXBwZXIpOgorICAgICIiIlRleHQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBidWZmZXIuCisKKyAgICBUaGUgaW5pdGlhbF92YWx1ZSBhcmd1bWVudCBzZXRzIHRoZSB2YWx1ZSBvZiBvYmplY3QuICBUaGUgbmV3bGluZQorICAgIGFyZ3VtZW50IGlzIGxpa2UgdGhlIG9uZSBvZiBUZXh0SU9XcmFwcGVyJ3MgY29uc3RydWN0b3IuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF92YWx1ZT0iIiwgbmV3bGluZT0iXG4iKToKKyAgICAgICAgc3VwZXIoU3RyaW5nSU8sIHNlbGYpLl9faW5pdF9fKEJ5dGVzSU8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJ1dGYtOCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9InN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPW5ld2xpbmUpCisgICAgICAgICMgSXNzdWUgIzU2NDU6IG1ha2UgdW5pdmVyc2FsIG5ld2xpbmVzIHNlbWFudGljcyB0aGUgc2FtZSBhcyBpbiB0aGUKKyAgICAgICAgIyBDIHZlcnNpb24sIGV2ZW4gdW5kZXIgV2luZG93cy4KKyAgICAgICAgaWYgbmV3bGluZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd3JpdGV0cmFuc2xhdGUgPSBGYWxzZQorICAgICAgICBpZiBpbml0aWFsX3ZhbHVlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgaW5pdGlhbF92YWx1ZSA9IHVuaWNvZGUoaW5pdGlhbF92YWx1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoaW5pdGlhbF92YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuc2VlaygwKQorCisgICAgZGVmIGdldHZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmdldHZhbHVlKCkuZGVjb2RlKHNlbGYuX2VuY29kaW5nLCBzZWxmLl9lcnJvcnMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICMgVGV4dElPV3JhcHBlciB0ZWxscyB0aGUgZW5jb2RpbmcgaW4gaXRzIHJlcHIuIEluIFN0cmluZ0lPLAorICAgICAgICAjIHRoYXQncyBhIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3JlcHJfXyhzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGVycm9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBlbmNvZGluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICMgVGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb24gU3RyaW5nSU8uCisgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJkZXRhY2giKQpkaWZmIC0tZ2l0IGEvTGliL190aHJlYWRpbmdfbG9jYWwucHkgYi9MaWIvX3RocmVhZGluZ19sb2NhbC5weQppbmRleCAyNDNkODRlLi4wOWEzNTE1IDEwMDY0NAotLS0gYS9MaWIvX3RocmVhZGluZ19sb2NhbC5weQorKysgYi9MaWIvX3RocmVhZGluZ19sb2NhbC5weQpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCAnX2xvY2FsX19hcmdzJywgKGFyZ3MsIGt3KSkKICAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsICdfbG9jYWxfX2xvY2snLCBSTG9jaygpKQogCi0gICAgICAgIGlmIGFyZ3Mgb3Iga3cgYW5kIChjbHMuX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fKToKKyAgICAgICAgaWYgKGFyZ3Mgb3Iga3cpIGFuZCAoY2xzLl9faW5pdF9fIGlzIG9iamVjdC5fX2luaXRfXyk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkluaXRpYWxpemF0aW9uIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCIpCiAKICAgICAgICAgIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgdGhyZWFkIGRpY3QgaW4gYW50aWNpcGF0aW9uIG9mCkBAIC0xOTUsNiArMTk1LDEwIEBACiAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCisgICAgICAgICAgICAgICAgIiVyIG9iamVjdCBhdHRyaWJ1dGUgJ19fZGljdF9fJyBpcyByZWFkLW9ubHkiCisgICAgICAgICAgICAgICAgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgbG9jayA9IG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsICdfbG9jYWxfX2xvY2snKQogICAgICAgICBsb2NrLmFjcXVpcmUoKQogICAgICAgICB0cnk6CkBAIC0yMDQsNiArMjA4LDEwIEBACiAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICdfX2RpY3RfXyc6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJXIgb2JqZWN0IGF0dHJpYnV0ZSAnX19kaWN0X18nIGlzIHJlYWQtb25seSIKKyAgICAgICAgICAgICAgICAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICBsb2NrID0gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgJ19sb2NhbF9fbG9jaycpCiAgICAgICAgIGxvY2suYWNxdWlyZSgpCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9fd2Vha3JlZnNldC5weSBiL0xpYi9fd2Vha3JlZnNldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmE1ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL193ZWFrcmVmc2V0LnB5CkBAIC0wLDAgKzEsMjE2IEBACisjIEFjY2VzcyBXZWFrU2V0IHRocm91Z2ggdGhlIHdlYWtyZWYgbW9kdWxlLgorIyBUaGlzIGNvZGUgaXMgc2VwYXJhdGVkLW91dCBiZWNhdXNlIGl0IGlzIG5lZWRlZAorIyBieSBhYmMucHkgdG8gbG9hZCBldmVyeXRoaW5nIGVsc2UgYXQgc3RhcnR1cC4KKworZnJvbSBfd2Vha3JlZiBpbXBvcnQgcmVmCisKK19fYWxsX18gPSBbJ1dlYWtTZXQnXQorCisKK2NsYXNzIF9JdGVyYXRpb25HdWFyZChvYmplY3QpOgorICAgICMgVGhpcyBjb250ZXh0IG1hbmFnZXIgcmVnaXN0ZXJzIGl0c2VsZiBpbiB0aGUgY3VycmVudCBpdGVyYXRvcnMgb2YgdGhlCisgICAgIyB3ZWFrIGNvbnRhaW5lciwgc3VjaCBhcyB0byBkZWxheSBhbGwgcmVtb3ZhbHMgdW50aWwgdGhlIGNvbnRleHQgbWFuYWdlcgorICAgICMgZXhpdHMuCisgICAgIyBUaGlzIHRlY2huaXF1ZSBzaG91bGQgYmUgcmVsYXRpdmVseSB0aHJlYWQtc2FmZSAoc2luY2Ugc2V0cyBhcmUpLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdlYWtjb250YWluZXIpOgorICAgICAgICAjIERvbid0IGNyZWF0ZSBjeWNsZXMKKyAgICAgICAgc2VsZi53ZWFrY29udGFpbmVyID0gcmVmKHdlYWtjb250YWluZXIpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3ID0gc2VsZi53ZWFrY29udGFpbmVyKCkKKyAgICAgICAgaWYgdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHcuX2l0ZXJhdGluZy5hZGQoc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBlLCB0LCBiKToKKyAgICAgICAgdyA9IHNlbGYud2Vha2NvbnRhaW5lcigpCisgICAgICAgIGlmIHcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzID0gdy5faXRlcmF0aW5nCisgICAgICAgICAgICBzLnJlbW92ZShzZWxmKQorICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgdy5fY29tbWl0X3JlbW92YWxzKCkKKworCitjbGFzcyBXZWFrU2V0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGE9Tm9uZSk6CisgICAgICAgIHNlbGYuZGF0YSA9IHNldCgpCisgICAgICAgIGRlZiBfcmVtb3ZlKGl0ZW0sIHNlbGZyZWY9cmVmKHNlbGYpKToKKyAgICAgICAgICAgIHNlbGYgPSBzZWxmcmVmKCkKKyAgICAgICAgICAgIGlmIHNlbGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5faXRlcmF0aW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3JlbW92YWxzLmFwcGVuZChpdGVtKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5kaXNjYXJkKGl0ZW0pCisgICAgICAgIHNlbGYuX3JlbW92ZSA9IF9yZW1vdmUKKyAgICAgICAgIyBBIGxpc3Qgb2Yga2V5cyB0byBiZSByZW1vdmVkCisgICAgICAgIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMgPSBbXQorICAgICAgICBzZWxmLl9pdGVyYXRpbmcgPSBzZXQoKQorICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi51cGRhdGUoZGF0YSkKKworICAgIGRlZiBfY29tbWl0X3JlbW92YWxzKHNlbGYpOgorICAgICAgICBsID0gc2VsZi5fcGVuZGluZ19yZW1vdmFscworICAgICAgICBkaXNjYXJkID0gc2VsZi5kYXRhLmRpc2NhcmQKKyAgICAgICAgd2hpbGUgbDoKKyAgICAgICAgICAgIGRpc2NhcmQobC5wb3AoKSkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6CisgICAgICAgICAgICBmb3IgaXRlbXJlZiBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICAgICAgaXRlbSA9IGl0ZW1yZWYoKQorICAgICAgICAgICAgICAgIGlmIGl0ZW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW0KKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKHgoKSBpcyBub3QgTm9uZSBmb3IgeCBpbiBzZWxmLmRhdGEpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3ciA9IHJlZihpdGVtKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiB3ciBpbiBzZWxmLmRhdGEKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAobGlzdChzZWxmKSwpLAorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkpCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBhZGQoc2VsZiwgaXRlbSk6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBzZWxmLmRhdGEuYWRkKHJlZihpdGVtLCBzZWxmLl9yZW1vdmUpKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZikKKworICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGl0ZW1yZWYgPSBzZWxmLmRhdGEucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigncG9wIGZyb20gZW1wdHkgV2Vha1NldCcpCisgICAgICAgICAgICBpdGVtID0gaXRlbXJlZigpCisgICAgICAgICAgICBpZiBpdGVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIGl0ZW0pOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgc2VsZi5kYXRhLnJlbW92ZShyZWYoaXRlbSkpCisKKyAgICBkZWYgZGlzY2FyZChzZWxmLCBpdGVtKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIHNlbGYuZGF0YS5kaXNjYXJkKHJlZihpdGVtKSkKKworICAgIGRlZiB1cGRhdGUoc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgc2VsZi5kYXRhLnVwZGF0ZShvdGhlci5kYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hZGQoZWxlbWVudCkKKworICAgIGRlZiBfX2lvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi51cGRhdGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAjIEhlbHBlciBmdW5jdGlvbnMgZm9yIHNpbXBsZSBkZWxlZ2F0aW5nIG1ldGhvZHMuCisgICAgZGVmIF9hcHBseShzZWxmLCBvdGhlciwgbWV0aG9kKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKKyAgICAgICAgICAgIG90aGVyID0gc2VsZi5fX2NsYXNzX18ob3RoZXIpCisgICAgICAgIG5ld2RhdGEgPSBtZXRob2Qob3RoZXIuZGF0YSkKKyAgICAgICAgbmV3c2V0ID0gc2VsZi5fX2NsYXNzX18oKQorICAgICAgICBuZXdzZXQuZGF0YSA9IG5ld2RhdGEKKyAgICAgICAgcmV0dXJuIG5ld3NldAorCisgICAgZGVmIGRpZmZlcmVuY2Uoc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fYXBwbHkob3RoZXIsIHNlbGYuZGF0YS5kaWZmZXJlbmNlKQorICAgIF9fc3ViX18gPSBkaWZmZXJlbmNlCisKKyAgICBkZWYgZGlmZmVyZW5jZV91cGRhdGUoc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgaWYgc2VsZiBpcyBvdGhlcjoKKyAgICAgICAgICAgIHNlbGYuZGF0YS5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRhdGEuZGlmZmVyZW5jZV91cGRhdGUocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBpZiBzZWxmIGlzIG90aGVyOgorICAgICAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5kaWZmZXJlbmNlX3VwZGF0ZShyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgaW50ZXJzZWN0aW9uKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FwcGx5KG90aGVyLCBzZWxmLmRhdGEuaW50ZXJzZWN0aW9uKQorICAgIF9fYW5kX18gPSBpbnRlcnNlY3Rpb24KKworICAgIGRlZiBpbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCisgICAgICAgIHNlbGYuZGF0YS5pbnRlcnNlY3Rpb25fdXBkYXRlKHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKyAgICBkZWYgX19pYW5kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgorICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKKyAgICAgICAgc2VsZi5kYXRhLmludGVyc2VjdGlvbl91cGRhdGUocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGlzc3Vic2V0KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YS5pc3N1YnNldChyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgX19sdF9fID0gaXNzdWJzZXQKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhIDw9IHNldChyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisKKyAgICBkZWYgaXNzdXBlcnNldChzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEuaXNzdXBlcnNldChyZWYoaXRlbSkgZm9yIGl0ZW0gaW4gb3RoZXIpCisgICAgX19ndF9fID0gaXNzdXBlcnNldAorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEgPj0gc2V0KHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLmRhdGEgPT0gc2V0KHJlZihpdGVtKSBmb3IgaXRlbSBpbiBvdGhlcikKKworICAgIGRlZiBzeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9hcHBseShvdGhlciwgc2VsZi5kYXRhLnN5bW1ldHJpY19kaWZmZXJlbmNlKQorICAgIF9feG9yX18gPSBzeW1tZXRyaWNfZGlmZmVyZW5jZQorCisgICAgZGVmIHN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBpZiBzZWxmIGlzIG90aGVyOgorICAgICAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICBzZWxmLl9jb21taXRfcmVtb3ZhbHMoKQorICAgICAgICBpZiBzZWxmIGlzIG90aGVyOgorICAgICAgICAgICAgc2VsZi5kYXRhLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGF0YS5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUocmVmKGl0ZW0pIGZvciBpdGVtIGluIG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIHVuaW9uKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FwcGx5KG90aGVyLCBzZWxmLmRhdGEudW5pb24pCisgICAgX19vcl9fID0gdW5pb24KKworICAgIGRlZiBpc2Rpc2pvaW50KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmludGVyc2VjdGlvbihvdGhlcikpID09IDAKZGlmZiAtLWdpdCBhL0xpYi9hYmMucHkgYi9MaWIvYWJjLnB5CmluZGV4IDY4MWM3NTMuLjAyZTQ4YTEgMTAwNjQ0Ci0tLSBhL0xpYi9hYmMucHkKKysrIGIvTGliL2FiYy5weQpAQCAtMyw2ICszLDkgQEAKIAogIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhY2NvcmRpbmcgdG8gUEVQIDMxMTkuIiIiCiAKK2ltcG9ydCB0eXBlcworCitmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiAKICMgSW5zdGFuY2Ugb2Ygb2xkLXN0eWxlIGNsYXNzCiBjbGFzcyBfQzogcGFzcwpAQCAtOTMsMTUgKzk2LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0cy5hZGQobmFtZSkKICAgICAgICAgY2xzLl9fYWJzdHJhY3RtZXRob2RzX18gPSBmcm96ZW5zZXQoYWJzdHJhY3RzKQogICAgICAgICAjIFNldCB1cCBpbmhlcml0YW5jZSByZWdpc3RyeQotICAgICAgICBjbHMuX2FiY19yZWdpc3RyeSA9IHNldCgpCi0gICAgICAgIGNscy5fYWJjX2NhY2hlID0gc2V0KCkKLSAgICAgICAgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGUgPSBzZXQoKQorICAgICAgICBjbHMuX2FiY19yZWdpc3RyeSA9IFdlYWtTZXQoKQorICAgICAgICBjbHMuX2FiY19jYWNoZSA9IFdlYWtTZXQoKQorICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZSA9IFdlYWtTZXQoKQogICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZV92ZXJzaW9uID0gQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyCiAgICAgICAgIHJldHVybiBjbHMKIAogICAgIGRlZiByZWdpc3RlcihjbHMsIHN1YmNsYXNzKToKICAgICAgICAgIiIiUmVnaXN0ZXIgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFuIEFCQy4iIiIKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2xzLCB0eXBlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3ViY2xhc3MsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2FuIG9ubHkgcmVnaXN0ZXIgY2xhc3NlcyIpCiAgICAgICAgIGlmIGlzc3ViY2xhc3Moc3ViY2xhc3MsIGNscyk6CiAgICAgICAgICAgICByZXR1cm4gICMgQWxyZWFkeSBhIHN1YmNsYXNzCkBAIC0xMjYsNyArMTI5LDcgQEAKICAgICAgICAgIiIiT3ZlcnJpZGUgZm9yIGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNscykuIiIiCiAgICAgICAgICMgSW5saW5lIHRoZSBjYWNoZSBjaGVja2luZyB3aGVuIGl0J3Mgc2ltcGxlLgogICAgICAgICBzdWJjbGFzcyA9IGdldGF0dHIoaW5zdGFuY2UsICdfX2NsYXNzX18nLCBOb25lKQotICAgICAgICBpZiBzdWJjbGFzcyBpbiBjbHMuX2FiY19jYWNoZToKKyAgICAgICAgaWYgc3ViY2xhc3MgaXMgbm90IE5vbmUgYW5kIHN1YmNsYXNzIGluIGNscy5fYWJjX2NhY2hlOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgc3VidHlwZSA9IHR5cGUoaW5zdGFuY2UpCiAgICAgICAgICMgT2xkLXN0eWxlIGluc3RhbmNlcwpAQCAtMTUwLDcgKzE1Myw3IEBACiAgICAgICAgICMgQ2hlY2sgbmVnYXRpdmUgY2FjaGU7IG1heSBoYXZlIHRvIGludmFsaWRhdGUKICAgICAgICAgaWYgY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGVfdmVyc2lvbiA8IEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcjoKICAgICAgICAgICAgICMgSW52YWxpZGF0ZSB0aGUgbmVnYXRpdmUgY2FjaGUKLSAgICAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlID0gc2V0KCkKKyAgICAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlID0gV2Vha1NldCgpCiAgICAgICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZV92ZXJzaW9uID0gQUJDTWV0YS5fYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyCiAgICAgICAgIGVsaWYgc3ViY2xhc3MgaW4gY2xzLl9hYmNfbmVnYXRpdmVfY2FjaGU6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggNzZiYzc0Yy4uNzdhOWQ3ZCAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTczMyw2ICs3MzMsOCBAQAogICAgICAgICBpZiBzZWxmLl9jb21wOgogICAgICAgICAgICAgc2VsZi5fY29tcC5DbG9zZUNvbXByZXNzb3IoKQogICAgICAgICAgICAgc2VsZi5fY29tcCA9IE5vbmUKKyAgICAgICAgIyBQcmV2ZW50IHJlZiBjeWNsZXMKKyAgICAgICAgc2VsZi5fY29udmVydCA9IE5vbmUKICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCiAKICAgICAjCmRpZmYgLS1naXQgYS9MaWIvYW50aWdyYXZpdHkucHkgYi9MaWIvYW50aWdyYXZpdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiN2Q4MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hbnRpZ3Jhdml0eS5weQpAQCAtMCwwICsxLDQgQEAKKworaW1wb3J0IHdlYmJyb3dzZXIKKword2ViYnJvd3Nlci5vcGVuKCJodHRwOi8veGtjZC5jb20vMzUzLyIpCmRpZmYgLS1naXQgYS9MaWIvYXJncGFyc2UucHkgYi9MaWIvYXJncGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxNzIyYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hcmdwYXJzZS5weQpAQCAtMCwwICsxLDIzMzkgQEAKKyMgQXV0aG9yOiBTdGV2ZW4gSi4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPi4KKworIiIiQ29tbWFuZC1saW5lIHBhcnNpbmcgbGlicmFyeQorCitUaGlzIG1vZHVsZSBpcyBhbiBvcHRwYXJzZS1pbnNwaXJlZCBjb21tYW5kLWxpbmUgcGFyc2luZyBsaWJyYXJ5IHRoYXQ6CisKKyAgICAtIGhhbmRsZXMgYm90aCBvcHRpb25hbCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgICAtIHByb2R1Y2VzIGhpZ2hseSBpbmZvcm1hdGl2ZSB1c2FnZSBtZXNzYWdlcworICAgIC0gc3VwcG9ydHMgcGFyc2VycyB0aGF0IGRpc3BhdGNoIHRvIHN1Yi1wYXJzZXJzCisKK1RoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgdXNhZ2UgZXhhbXBsZSB0aGF0IHN1bXMgaW50ZWdlcnMgZnJvbSB0aGUKK2NvbW1hbmQtbGluZSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gYSBmaWxlOjoKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0nc3VtIHRoZSBpbnRlZ2VycyBhdCB0aGUgY29tbWFuZCBsaW5lJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnaW50ZWdlcnMnLCBtZXRhdmFyPSdpbnQnLCBuYXJncz0nKycsIHR5cGU9aW50LAorICAgICAgICBoZWxwPSdhbiBpbnRlZ2VyIHRvIGJlIHN1bW1lZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy0tbG9nJywgZGVmYXVsdD1zeXMuc3Rkb3V0LCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JyksCisgICAgICAgIGhlbHA9J3RoZSBmaWxlIHdoZXJlIHRoZSBzdW0gc2hvdWxkIGJlIHdyaXR0ZW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgYXJncy5sb2cud3JpdGUoJyVzJyAlIHN1bShhcmdzLmludGVnZXJzKSkKKyAgICBhcmdzLmxvZy5jbG9zZSgpCisKK1RoZSBtb2R1bGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwdWJsaWMgY2xhc3NlczoKKworICAgIC0gQXJndW1lbnRQYXJzZXIgLS0gVGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGNvbW1hbmQtbGluZSBwYXJzaW5nLiBBcyB0aGUKKyAgICAgICAgZXhhbXBsZSBhYm92ZSBzaG93cywgdGhlIGFkZF9hcmd1bWVudCgpIG1ldGhvZCBpcyB1c2VkIHRvIHBvcHVsYXRlCisgICAgICAgIHRoZSBwYXJzZXIgd2l0aCBhY3Rpb25zIGZvciBvcHRpb25hbCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMuIFRoZW4KKyAgICAgICAgdGhlIHBhcnNlX2FyZ3MoKSBtZXRob2QgaXMgaW52b2tlZCB0byBjb252ZXJ0IHRoZSBhcmdzIGF0IHRoZQorICAgICAgICBjb21tYW5kLWxpbmUgaW50byBhbiBvYmplY3Qgd2l0aCBhdHRyaWJ1dGVzLgorCisgICAgLSBBcmd1bWVudEVycm9yIC0tIFRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IEFyZ3VtZW50UGFyc2VyIG9iamVjdHMgd2hlbgorICAgICAgICB0aGVyZSBhcmUgZXJyb3JzIHdpdGggdGhlIHBhcnNlcidzIGFjdGlvbnMuIEVycm9ycyByYWlzZWQgd2hpbGUKKyAgICAgICAgcGFyc2luZyB0aGUgY29tbWFuZC1saW5lIGFyZSBjYXVnaHQgYnkgQXJndW1lbnRQYXJzZXIgYW5kIGVtaXR0ZWQKKyAgICAgICAgYXMgY29tbWFuZC1saW5lIG1lc3NhZ2VzLgorCisgICAgLSBGaWxlVHlwZSAtLSBBIGZhY3RvcnkgZm9yIGRlZmluaW5nIHR5cGVzIG9mIGZpbGVzIHRvIGJlIGNyZWF0ZWQuIEFzIHRoZQorICAgICAgICBleGFtcGxlIGFib3ZlIHNob3dzLCBpbnN0YW5jZXMgb2YgRmlsZVR5cGUgYXJlIHR5cGljYWxseSBwYXNzZWQgYXMKKyAgICAgICAgdGhlIHR5cGU9IGFyZ3VtZW50IG9mIGFkZF9hcmd1bWVudCgpIGNhbGxzLgorCisgICAgLSBBY3Rpb24gLS0gVGhlIGJhc2UgY2xhc3MgZm9yIHBhcnNlciBhY3Rpb25zLiBUeXBpY2FsbHkgYWN0aW9ucyBhcmUKKyAgICAgICAgc2VsZWN0ZWQgYnkgcGFzc2luZyBzdHJpbmdzIGxpa2UgJ3N0b3JlX3RydWUnIG9yICdhcHBlbmRfY29uc3QnIHRvCisgICAgICAgIHRoZSBhY3Rpb249IGFyZ3VtZW50IG9mIGFkZF9hcmd1bWVudCgpLiBIb3dldmVyLCBmb3IgZ3JlYXRlcgorICAgICAgICBjdXN0b21pemF0aW9uIG9mIEFyZ3VtZW50UGFyc2VyIGFjdGlvbnMsIHN1YmNsYXNzZXMgb2YgQWN0aW9uIG1heQorICAgICAgICBiZSBkZWZpbmVkIGFuZCBwYXNzZWQgYXMgdGhlIGFjdGlvbj0gYXJndW1lbnQuCisKKyAgICAtIEhlbHBGb3JtYXR0ZXIsIFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciwgUmF3VGV4dEhlbHBGb3JtYXR0ZXIsCisgICAgICAgIEFyZ3VtZW50RGVmYXVsdHNIZWxwRm9ybWF0dGVyIC0tIEZvcm1hdHRlciBjbGFzc2VzIHdoaWNoCisgICAgICAgIG1heSBiZSBwYXNzZWQgYXMgdGhlIGZvcm1hdHRlcl9jbGFzcz0gYXJndW1lbnQgdG8gdGhlCisgICAgICAgIEFyZ3VtZW50UGFyc2VyIGNvbnN0cnVjdG9yLiBIZWxwRm9ybWF0dGVyIGlzIHRoZSBkZWZhdWx0LAorICAgICAgICBSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIgYW5kIFJhd1RleHRIZWxwRm9ybWF0dGVyIHRlbGwgdGhlIHBhcnNlcgorICAgICAgICBub3QgdG8gY2hhbmdlIHRoZSBmb3JtYXR0aW5nIGZvciBoZWxwIHRleHQsIGFuZAorICAgICAgICBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciBhZGRzIGluZm9ybWF0aW9uIGFib3V0IGFyZ3VtZW50IGRlZmF1bHRzCisgICAgICAgIHRvIHRoZSBoZWxwLgorCitBbGwgb3RoZXIgY2xhc3NlcyBpbiB0aGlzIG1vZHVsZSBhcmUgY29uc2lkZXJlZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorKEFsc28gbm90ZSB0aGF0IEhlbHBGb3JtYXR0ZXIgYW5kIFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlciBhcmUgb25seQorY29uc2lkZXJlZCBwdWJsaWMgYXMgb2JqZWN0IG5hbWVzIC0tIHRoZSBBUEkgb2YgdGhlIGZvcm1hdHRlciBvYmplY3RzIGlzCitzdGlsbCBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4pCisiIiIKKworX192ZXJzaW9uX18gPSAnMS4xJworX19hbGxfXyA9IFsKKyAgICAnQXJndW1lbnRQYXJzZXInLAorICAgICdBcmd1bWVudEVycm9yJywKKyAgICAnQXJndW1lbnRUeXBlRXJyb3InLAorICAgICdGaWxlVHlwZScsCisgICAgJ0hlbHBGb3JtYXR0ZXInLAorICAgICdBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcicsCisgICAgJ1Jhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcicsCisgICAgJ1Jhd1RleHRIZWxwRm9ybWF0dGVyJywKKyAgICAnTmFtZXNwYWNlJywKKyAgICAnQWN0aW9uJywKKyAgICAnT05FX09SX01PUkUnLAorICAgICdPUFRJT05BTCcsCisgICAgJ1BBUlNFUicsCisgICAgJ1JFTUFJTkRFUicsCisgICAgJ1NVUFBSRVNTJywKKyAgICAnWkVST19PUl9NT1JFJywKK10KKworCitpbXBvcnQgY29weSBhcyBfY29weQoraW1wb3J0IG9zIGFzIF9vcworaW1wb3J0IHJlIGFzIF9yZQoraW1wb3J0IHN5cyBhcyBfc3lzCitpbXBvcnQgdGV4dHdyYXAgYXMgX3RleHR3cmFwCisKK2Zyb20gZ2V0dGV4dCBpbXBvcnQgZ2V0dGV4dCBhcyBfCisKKworZGVmIF9jYWxsYWJsZShvYmopOgorICAgIHJldHVybiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykgb3IgaGFzYXR0cihvYmosICdfX2Jhc2VzX18nKQorCisKK1NVUFBSRVNTID0gJz09U1VQUFJFU1M9PScKKworT1BUSU9OQUwgPSAnPycKK1pFUk9fT1JfTU9SRSA9ICcqJworT05FX09SX01PUkUgPSAnKycKK1BBUlNFUiA9ICdBLi4uJworUkVNQUlOREVSID0gJy4uLicKK19VTlJFQ09HTklaRURfQVJHU19BVFRSID0gJ191bnJlY29nbml6ZWRfYXJncycKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBVdGlsaXR5IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBfQXR0cmlidXRlSG9sZGVyKG9iamVjdCk6CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIF9fcmVwcl9fLgorCisgICAgVGhlIF9fcmVwcl9fIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQ6OgorICAgICAgICBDbGFzc05hbWUoYXR0cj1uYW1lLCBhdHRyPW5hbWUsIC4uLikKKyAgICBUaGUgYXR0cmlidXRlcyBhcmUgZGV0ZXJtaW5lZCBlaXRoZXIgYnkgYSBjbGFzcy1sZXZlbCBhdHRyaWJ1dGUsCisgICAgJ19rd2FyZ19uYW1lcycsIG9yIGJ5IGluc3BlY3RpbmcgdGhlIGluc3RhbmNlIF9fZGljdF9fLgorICAgICIiIgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICB0eXBlX25hbWUgPSB0eXBlKHNlbGYpLl9fbmFtZV9fCisgICAgICAgIGFyZ19zdHJpbmdzID0gW10KKyAgICAgICAgZm9yIGFyZyBpbiBzZWxmLl9nZXRfYXJncygpOgorICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKHJlcHIoYXJnKSkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuX2dldF9rd2FyZ3MoKToKKyAgICAgICAgICAgIGFyZ19zdHJpbmdzLmFwcGVuZCgnJXM9JXInICUgKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGVfbmFtZSwgJywgJy5qb2luKGFyZ19zdHJpbmdzKSkKKworICAgIGRlZiBfZ2V0X2t3YXJncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvcnRlZChzZWxmLl9fZGljdF9fLml0ZW1zKCkpCisKKyAgICBkZWYgX2dldF9hcmdzKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKworCitkZWYgX2Vuc3VyZV92YWx1ZShuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKToKKyAgICBpZiBnZXRhdHRyKG5hbWVzcGFjZSwgbmFtZSwgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKQorICAgIHJldHVybiBnZXRhdHRyKG5hbWVzcGFjZSwgbmFtZSkKKworCisjID09PT09PT09PT09PT09PQorIyBGb3JtYXR0aW5nIEhlbHAKKyMgPT09PT09PT09PT09PT09CisKK2NsYXNzIEhlbHBGb3JtYXR0ZXIob2JqZWN0KToKKyAgICAiIiJGb3JtYXR0ZXIgZm9yIGdlbmVyYXRpbmcgdXNhZ2UgbWVzc2FnZXMgYW5kIGFyZ3VtZW50IGhlbHAgc3RyaW5ncy4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBwcm9nLAorICAgICAgICAgICAgICAgICBpbmRlbnRfaW5jcmVtZW50PTIsCisgICAgICAgICAgICAgICAgIG1heF9oZWxwX3Bvc2l0aW9uPTI0LAorICAgICAgICAgICAgICAgICB3aWR0aD1Ob25lKToKKworICAgICAgICAjIGRlZmF1bHQgc2V0dGluZyBmb3Igd2lkdGgKKyAgICAgICAgaWYgd2lkdGggaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGludChfb3MuZW52aXJvblsnQ09MVU1OUyddKQorICAgICAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgd2lkdGggPSA4MAorICAgICAgICAgICAgd2lkdGggLT0gMgorCisgICAgICAgIHNlbGYuX3Byb2cgPSBwcm9nCisgICAgICAgIHNlbGYuX2luZGVudF9pbmNyZW1lbnQgPSBpbmRlbnRfaW5jcmVtZW50CisgICAgICAgIHNlbGYuX21heF9oZWxwX3Bvc2l0aW9uID0gbWF4X2hlbHBfcG9zaXRpb24KKyAgICAgICAgc2VsZi5fd2lkdGggPSB3aWR0aAorCisgICAgICAgIHNlbGYuX2N1cnJlbnRfaW5kZW50ID0gMAorICAgICAgICBzZWxmLl9sZXZlbCA9IDAKKyAgICAgICAgc2VsZi5fYWN0aW9uX21heF9sZW5ndGggPSAwCisKKyAgICAgICAgc2VsZi5fcm9vdF9zZWN0aW9uID0gc2VsZi5fU2VjdGlvbihzZWxmLCBOb25lKQorICAgICAgICBzZWxmLl9jdXJyZW50X3NlY3Rpb24gPSBzZWxmLl9yb290X3NlY3Rpb24KKworICAgICAgICBzZWxmLl93aGl0ZXNwYWNlX21hdGNoZXIgPSBfcmUuY29tcGlsZShyJ1xzKycpCisgICAgICAgIHNlbGYuX2xvbmdfYnJlYWtfbWF0Y2hlciA9IF9yZS5jb21waWxlKHInXG5cblxuKycpCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIFNlY3Rpb24gYW5kIGluZGVudGF0aW9uIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgX2luZGVudChzZWxmKToKKyAgICAgICAgc2VsZi5fY3VycmVudF9pbmRlbnQgKz0gc2VsZi5faW5kZW50X2luY3JlbWVudAorICAgICAgICBzZWxmLl9sZXZlbCArPSAxCisKKyAgICBkZWYgX2RlZGVudChzZWxmKToKKyAgICAgICAgc2VsZi5fY3VycmVudF9pbmRlbnQgLT0gc2VsZi5faW5kZW50X2luY3JlbWVudAorICAgICAgICBhc3NlcnQgc2VsZi5fY3VycmVudF9pbmRlbnQgPj0gMCwgJ0luZGVudCBkZWNyZWFzZWQgYmVsb3cgMC4nCisgICAgICAgIHNlbGYuX2xldmVsIC09IDEKKworICAgIGNsYXNzIF9TZWN0aW9uKG9iamVjdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdHRlciwgcGFyZW50LCBoZWFkaW5nPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mb3JtYXR0ZXIgPSBmb3JtYXR0ZXIKKyAgICAgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgICAgICBzZWxmLmhlYWRpbmcgPSBoZWFkaW5nCisgICAgICAgICAgICBzZWxmLml0ZW1zID0gW10KKworICAgICAgICBkZWYgZm9ybWF0X2hlbHAoc2VsZik6CisgICAgICAgICAgICAjIGZvcm1hdCB0aGUgaW5kZW50ZWQgc2VjdGlvbgorICAgICAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXR0ZXIuX2luZGVudCgpCisgICAgICAgICAgICBqb2luID0gc2VsZi5mb3JtYXR0ZXIuX2pvaW5fcGFydHMKKyAgICAgICAgICAgIGZvciBmdW5jLCBhcmdzIGluIHNlbGYuaXRlbXM6CisgICAgICAgICAgICAgICAgZnVuYygqYXJncykKKyAgICAgICAgICAgIGl0ZW1faGVscCA9IGpvaW4oW2Z1bmMoKmFyZ3MpIGZvciBmdW5jLCBhcmdzIGluIHNlbGYuaXRlbXNdKQorICAgICAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXR0ZXIuX2RlZGVudCgpCisKKyAgICAgICAgICAgICMgcmV0dXJuIG5vdGhpbmcgaWYgdGhlIHNlY3Rpb24gd2FzIGVtcHR5CisgICAgICAgICAgICBpZiBub3QgaXRlbV9oZWxwOgorICAgICAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgICAgICAjIGFkZCB0aGUgaGVhZGluZyBpZiB0aGUgc2VjdGlvbiB3YXMgbm9uLWVtcHR5CisgICAgICAgICAgICBpZiBzZWxmLmhlYWRpbmcgaXMgbm90IFNVUFBSRVNTIGFuZCBzZWxmLmhlYWRpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY3VycmVudF9pbmRlbnQgPSBzZWxmLmZvcm1hdHRlci5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgICAgICBoZWFkaW5nID0gJyUqcyVzOlxuJyAlIChjdXJyZW50X2luZGVudCwgJycsIHNlbGYuaGVhZGluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGVhZGluZyA9ICcnCisKKyAgICAgICAgICAgICMgam9pbiB0aGUgc2VjdGlvbi1pbml0aWFsIG5ld2xpbmUsIHRoZSBoZWFkaW5nIGFuZCB0aGUgaGVscAorICAgICAgICAgICAgcmV0dXJuIGpvaW4oWydcbicsIGhlYWRpbmcsIGl0ZW1faGVscCwgJ1xuJ10pCisKKyAgICBkZWYgX2FkZF9pdGVtKHNlbGYsIGZ1bmMsIGFyZ3MpOgorICAgICAgICBzZWxmLl9jdXJyZW50X3NlY3Rpb24uaXRlbXMuYXBwZW5kKChmdW5jLCBhcmdzKSkKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBNZXNzYWdlIGJ1aWxkaW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBzdGFydF9zZWN0aW9uKHNlbGYsIGhlYWRpbmcpOgorICAgICAgICBzZWxmLl9pbmRlbnQoKQorICAgICAgICBzZWN0aW9uID0gc2VsZi5fU2VjdGlvbihzZWxmLCBzZWxmLl9jdXJyZW50X3NlY3Rpb24sIGhlYWRpbmcpCisgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlY3Rpb24uZm9ybWF0X2hlbHAsIFtdKQorICAgICAgICBzZWxmLl9jdXJyZW50X3NlY3Rpb24gPSBzZWN0aW9uCisKKyAgICBkZWYgZW5kX3NlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiA9IHNlbGYuX2N1cnJlbnRfc2VjdGlvbi5wYXJlbnQKKyAgICAgICAgc2VsZi5fZGVkZW50KCkKKworICAgIGRlZiBhZGRfdGV4dChzZWxmLCB0ZXh0KToKKyAgICAgICAgaWYgdGV4dCBpcyBub3QgU1VQUFJFU1MgYW5kIHRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hZGRfaXRlbShzZWxmLl9mb3JtYXRfdGV4dCwgW3RleHRdKQorCisgICAgZGVmIGFkZF91c2FnZShzZWxmLCB1c2FnZSwgYWN0aW9ucywgZ3JvdXBzLCBwcmVmaXg9Tm9uZSk6CisgICAgICAgIGlmIHVzYWdlIGlzIG5vdCBTVVBQUkVTUzoKKyAgICAgICAgICAgIGFyZ3MgPSB1c2FnZSwgYWN0aW9ucywgZ3JvdXBzLCBwcmVmaXgKKyAgICAgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlbGYuX2Zvcm1hdF91c2FnZSwgYXJncykKKworICAgIGRlZiBhZGRfYXJndW1lbnQoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgaWYgYWN0aW9uLmhlbHAgaXMgbm90IFNVUFBSRVNTOgorCisgICAgICAgICAgICAjIGZpbmQgYWxsIGludm9jYXRpb25zCisgICAgICAgICAgICBnZXRfaW52b2NhdGlvbiA9IHNlbGYuX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbgorICAgICAgICAgICAgaW52b2NhdGlvbnMgPSBbZ2V0X2ludm9jYXRpb24oYWN0aW9uKV0KKyAgICAgICAgICAgIGZvciBzdWJhY3Rpb24gaW4gc2VsZi5faXRlcl9pbmRlbnRlZF9zdWJhY3Rpb25zKGFjdGlvbik6CisgICAgICAgICAgICAgICAgaW52b2NhdGlvbnMuYXBwZW5kKGdldF9pbnZvY2F0aW9uKHN1YmFjdGlvbikpCisKKyAgICAgICAgICAgICMgdXBkYXRlIHRoZSBtYXhpbXVtIGl0ZW0gbGVuZ3RoCisgICAgICAgICAgICBpbnZvY2F0aW9uX2xlbmd0aCA9IG1heChbbGVuKHMpIGZvciBzIGluIGludm9jYXRpb25zXSkKKyAgICAgICAgICAgIGFjdGlvbl9sZW5ndGggPSBpbnZvY2F0aW9uX2xlbmd0aCArIHNlbGYuX2N1cnJlbnRfaW5kZW50CisgICAgICAgICAgICBzZWxmLl9hY3Rpb25fbWF4X2xlbmd0aCA9IG1heChzZWxmLl9hY3Rpb25fbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9sZW5ndGgpCisKKyAgICAgICAgICAgICMgYWRkIHRoZSBpdGVtIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBzZWxmLl9hZGRfaXRlbShzZWxmLl9mb3JtYXRfYWN0aW9uLCBbYWN0aW9uXSkKKworICAgIGRlZiBhZGRfYXJndW1lbnRzKHNlbGYsIGFjdGlvbnMpOgorICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6CisgICAgICAgICAgICBzZWxmLmFkZF9hcmd1bWVudChhY3Rpb24pCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBIZWxwLWZvcm1hdHRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgZm9ybWF0X2hlbHAoc2VsZik6CisgICAgICAgIGhlbHAgPSBzZWxmLl9yb290X3NlY3Rpb24uZm9ybWF0X2hlbHAoKQorICAgICAgICBpZiBoZWxwOgorICAgICAgICAgICAgaGVscCA9IHNlbGYuX2xvbmdfYnJlYWtfbWF0Y2hlci5zdWIoJ1xuXG4nLCBoZWxwKQorICAgICAgICAgICAgaGVscCA9IGhlbHAuc3RyaXAoJ1xuJykgKyAnXG4nCisgICAgICAgIHJldHVybiBoZWxwCisKKyAgICBkZWYgX2pvaW5fcGFydHMoc2VsZiwgcGFydF9zdHJpbmdzKToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oW3BhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhcnRfc3RyaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFydCBhbmQgcGFydCBpcyBub3QgU1VQUFJFU1NdKQorCisgICAgZGVmIF9mb3JtYXRfdXNhZ2Uoc2VsZiwgdXNhZ2UsIGFjdGlvbnMsIGdyb3VwcywgcHJlZml4KToKKyAgICAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICBwcmVmaXggPSBfKCd1c2FnZTogJykKKworICAgICAgICAjIGlmIHVzYWdlIGlzIHNwZWNpZmllZCwgdXNlIHRoYXQKKyAgICAgICAgaWYgdXNhZ2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB1c2FnZSA9IHVzYWdlICUgZGljdChwcm9nPXNlbGYuX3Byb2cpCisKKyAgICAgICAgIyBpZiBubyBvcHRpb25hbHMgb3IgcG9zaXRpb25hbHMgYXJlIGF2YWlsYWJsZSwgdXNhZ2UgaXMganVzdCBwcm9nCisgICAgICAgIGVsaWYgdXNhZ2UgaXMgTm9uZSBhbmQgbm90IGFjdGlvbnM6CisgICAgICAgICAgICB1c2FnZSA9ICclKHByb2cpcycgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKworICAgICAgICAjIGlmIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgYXJlIGF2YWlsYWJsZSwgY2FsY3VsYXRlIHVzYWdlCisgICAgICAgIGVsaWYgdXNhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHByb2cgPSAnJShwcm9nKXMnICUgZGljdChwcm9nPXNlbGYuX3Byb2cpCisKKyAgICAgICAgICAgICMgc3BsaXQgb3B0aW9uYWxzIGZyb20gcG9zaXRpb25hbHMKKyAgICAgICAgICAgIG9wdGlvbmFscyA9IFtdCisgICAgICAgICAgICBwb3NpdGlvbmFscyA9IFtdCisgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25hbHMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmFscy5hcHBlbmQoYWN0aW9uKQorCisgICAgICAgICAgICAjIGJ1aWxkIGZ1bGwgdXNhZ2Ugc3RyaW5nCisgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfYWN0aW9uc191c2FnZQorICAgICAgICAgICAgYWN0aW9uX3VzYWdlID0gZm9ybWF0KG9wdGlvbmFscyArIHBvc2l0aW9uYWxzLCBncm91cHMpCisgICAgICAgICAgICB1c2FnZSA9ICcgJy5qb2luKFtzIGZvciBzIGluIFtwcm9nLCBhY3Rpb25fdXNhZ2VdIGlmIHNdKQorCisgICAgICAgICAgICAjIHdyYXAgdGhlIHVzYWdlIHBhcnRzIGlmIGl0J3MgdG9vIGxvbmcKKyAgICAgICAgICAgIHRleHRfd2lkdGggPSBzZWxmLl93aWR0aCAtIHNlbGYuX2N1cnJlbnRfaW5kZW50CisgICAgICAgICAgICBpZiBsZW4ocHJlZml4KSArIGxlbih1c2FnZSkgPiB0ZXh0X3dpZHRoOgorCisgICAgICAgICAgICAgICAgIyBicmVhayB1c2FnZSBpbnRvIHdyYXBwYWJsZSBwYXJ0cworICAgICAgICAgICAgICAgIHBhcnRfcmVnZXhwID0gcidcKC4qP1wpK3xcWy4qP1xdK3xcUysnCisgICAgICAgICAgICAgICAgb3B0X3VzYWdlID0gZm9ybWF0KG9wdGlvbmFscywgZ3JvdXBzKQorICAgICAgICAgICAgICAgIHBvc191c2FnZSA9IGZvcm1hdChwb3NpdGlvbmFscywgZ3JvdXBzKQorICAgICAgICAgICAgICAgIG9wdF9wYXJ0cyA9IF9yZS5maW5kYWxsKHBhcnRfcmVnZXhwLCBvcHRfdXNhZ2UpCisgICAgICAgICAgICAgICAgcG9zX3BhcnRzID0gX3JlLmZpbmRhbGwocGFydF9yZWdleHAsIHBvc191c2FnZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgJyAnLmpvaW4ob3B0X3BhcnRzKSA9PSBvcHRfdXNhZ2UKKyAgICAgICAgICAgICAgICBhc3NlcnQgJyAnLmpvaW4ocG9zX3BhcnRzKSA9PSBwb3NfdXNhZ2UKKworICAgICAgICAgICAgICAgICMgaGVscGVyIGZvciB3cmFwcGluZyBsaW5lcworICAgICAgICAgICAgICAgIGRlZiBnZXRfbGluZXMocGFydHMsIGluZGVudCwgcHJlZml4PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBbXQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbiA9IGxlbihwcmVmaXgpIC0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9sZW4gPSBsZW4oaW5kZW50KSAtIDEKKyAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lX2xlbiArIDEgKyBsZW4ocGFydCkgPiB0ZXh0X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnICcuam9pbihsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbiA9IGxlbihpbmRlbnQpIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuICs9IGxlbihwYXJ0KSArIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnICcuam9pbihsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbMF0gPSBsaW5lc1swXVtsZW4oaW5kZW50KTpdCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lcworCisgICAgICAgICAgICAgICAgIyBpZiBwcm9nIGlzIHNob3J0LCBmb2xsb3cgaXQgd2l0aCBvcHRpb25hbHMgb3IgcG9zaXRpb25hbHMKKyAgICAgICAgICAgICAgICBpZiBsZW4ocHJlZml4KSArIGxlbihwcm9nKSA8PSAwLjc1ICogdGV4dF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gJyAnICogKGxlbihwcmVmaXgpICsgbGVuKHByb2cpICsgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3B0X3BhcnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBnZXRfbGluZXMoW3Byb2ddICsgb3B0X3BhcnRzLCBpbmRlbnQsIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZXRfbGluZXMocG9zX3BhcnRzLCBpbmRlbnQpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHBvc19wYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZ2V0X2xpbmVzKFtwcm9nXSArIHBvc19wYXJ0cywgaW5kZW50LCBwcmVmaXgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtwcm9nXQorCisgICAgICAgICAgICAgICAgIyBpZiBwcm9nIGlzIGxvbmcsIHB1dCBpdCBvbiBpdHMgb3duIGxpbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICcgKiBsZW4ocHJlZml4KQorICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IG9wdF9wYXJ0cyArIHBvc19wYXJ0cworICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGdldF9saW5lcyhwYXJ0cywgaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChnZXRfbGluZXMob3B0X3BhcnRzLCBpbmRlbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdldF9saW5lcyhwb3NfcGFydHMsIGluZGVudCkpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW3Byb2ddICsgbGluZXMKKworICAgICAgICAgICAgICAgICMgam9pbiBsaW5lcyBpbnRvIHVzYWdlCisgICAgICAgICAgICAgICAgdXNhZ2UgPSAnXG4nLmpvaW4obGluZXMpCisKKyAgICAgICAgIyBwcmVmaXggd2l0aCAndXNhZ2U6JworICAgICAgICByZXR1cm4gJyVzJXNcblxuJyAlIChwcmVmaXgsIHVzYWdlKQorCisgICAgZGVmIF9mb3JtYXRfYWN0aW9uc191c2FnZShzZWxmLCBhY3Rpb25zLCBncm91cHMpOgorICAgICAgICAjIGZpbmQgZ3JvdXAgaW5kaWNlcyBhbmQgaWRlbnRpZnkgYWN0aW9ucyBpbiBncm91cHMKKyAgICAgICAgZ3JvdXBfYWN0aW9ucyA9IHNldCgpCisgICAgICAgIGluc2VydHMgPSB7fQorICAgICAgICBmb3IgZ3JvdXAgaW4gZ3JvdXBzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0YXJ0ID0gYWN0aW9ucy5pbmRleChncm91cC5fZ3JvdXBfYWN0aW9uc1swXSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuKGdyb3VwLl9ncm91cF9hY3Rpb25zKQorICAgICAgICAgICAgICAgIGlmIGFjdGlvbnNbc3RhcnQ6ZW5kXSA9PSBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX2FjdGlvbnMuYWRkKGFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGdyb3VwLnJlcXVpcmVkOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnQgaW4gaW5zZXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW3N0YXJ0XSArPSAnIFsnCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbc3RhcnRdID0gJ1snCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW2VuZF0gPSAnXScKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0IGluIGluc2VydHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tzdGFydF0gKz0gJyAoJworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW3N0YXJ0XSA9ICcoJworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tlbmRdID0gJyknCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0ICsgMSwgZW5kKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbaV0gPSAnfCcKKworICAgICAgICAjIGNvbGxlY3QgYWxsIGFjdGlvbnMgZm9ybWF0IHN0cmluZ3MKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBmb3IgaSwgYWN0aW9uIGluIGVudW1lcmF0ZShhY3Rpb25zKToKKworICAgICAgICAgICAgIyBzdXBwcmVzc2VkIGFyZ3VtZW50cyBhcmUgbWFya2VkIHdpdGggTm9uZQorICAgICAgICAgICAgIyByZW1vdmUgfCBzZXBhcmF0b3JzIGZvciBzdXBwcmVzc2VkIGFyZ3VtZW50cworICAgICAgICAgICAgaWYgYWN0aW9uLmhlbHAgaXMgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgaWYgaW5zZXJ0cy5nZXQoaSkgPT0gJ3wnOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRzLnBvcChpKQorICAgICAgICAgICAgICAgIGVsaWYgaW5zZXJ0cy5nZXQoaSArIDEpID09ICd8JzoKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0cy5wb3AoaSArIDEpCisKKyAgICAgICAgICAgICMgcHJvZHVjZSBhbGwgYXJnIHN0cmluZ3MKKyAgICAgICAgICAgIGVsaWYgbm90IGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZi5fZm9ybWF0X2FyZ3MoYWN0aW9uLCBhY3Rpb24uZGVzdCkKKworICAgICAgICAgICAgICAgICMgaWYgaXQncyBpbiBhIGdyb3VwLCBzdHJpcCB0aGUgb3V0ZXIgW10KKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24gaW4gZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydFswXSA9PSAnWycgYW5kIHBhcnRbLTFdID09ICddJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0WzE6LTFdCisKKyAgICAgICAgICAgICAgICAjIGFkZCB0aGUgYWN0aW9uIHN0cmluZyB0byB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChwYXJ0KQorCisgICAgICAgICAgICAjIHByb2R1Y2UgdGhlIGZpcnN0IHdheSB0byBpbnZva2UgdGhlIG9wdGlvbiBpbiBicmFja2V0cworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nID0gYWN0aW9uLm9wdGlvbl9zdHJpbmdzWzBdCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCBkb2Vzbid0IHRha2UgYSB2YWx1ZSwgZm9ybWF0IGlzOgorICAgICAgICAgICAgICAgICMgICAgLXMgb3IgLS1sb25nCisgICAgICAgICAgICAgICAgaWYgYWN0aW9uLm5hcmdzID09IDA6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAnJXMnICUgb3B0aW9uX3N0cmluZworCisgICAgICAgICAgICAgICAgIyBpZiB0aGUgT3B0aW9uYWwgdGFrZXMgYSB2YWx1ZSwgZm9ybWF0IGlzOgorICAgICAgICAgICAgICAgICMgICAgLXMgQVJHUyBvciAtLWxvbmcgQVJHUworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBhY3Rpb24uZGVzdC51cHBlcigpCisgICAgICAgICAgICAgICAgICAgIGFyZ3Nfc3RyaW5nID0gc2VsZi5fZm9ybWF0X2FyZ3MoYWN0aW9uLCBkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gJyVzICVzJyAlIChvcHRpb25fc3RyaW5nLCBhcmdzX3N0cmluZykKKworICAgICAgICAgICAgICAgICMgbWFrZSBpdCBsb29rIG9wdGlvbmFsIGlmIGl0J3Mgbm90IHJlcXVpcmVkIG9yIGluIGEgZ3JvdXAKKyAgICAgICAgICAgICAgICBpZiBub3QgYWN0aW9uLnJlcXVpcmVkIGFuZCBhY3Rpb24gbm90IGluIGdyb3VwX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAnWyVzXScgJSBwYXJ0CisKKyAgICAgICAgICAgICAgICAjIGFkZCB0aGUgYWN0aW9uIHN0cmluZyB0byB0aGUgbGlzdAorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChwYXJ0KQorCisgICAgICAgICMgaW5zZXJ0IHRoaW5ncyBhdCB0aGUgbmVjZXNzYXJ5IGluZGljZXMKKyAgICAgICAgZm9yIGkgaW4gc29ydGVkKGluc2VydHMsIHJldmVyc2U9VHJ1ZSk6CisgICAgICAgICAgICBwYXJ0c1tpOmldID0gW2luc2VydHNbaV1dCisKKyAgICAgICAgIyBqb2luIGFsbCB0aGUgYWN0aW9uIGl0ZW1zIHdpdGggc3BhY2VzCisgICAgICAgIHRleHQgPSAnICcuam9pbihbaXRlbSBmb3IgaXRlbSBpbiBwYXJ0cyBpZiBpdGVtIGlzIG5vdCBOb25lXSkKKworICAgICAgICAjIGNsZWFuIHVwIHNlcGFyYXRvcnMgZm9yIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cHMKKyAgICAgICAgb3BlbiA9IHInW1xbKF0nCisgICAgICAgIGNsb3NlID0gcidbXF0pXScKKyAgICAgICAgdGV4dCA9IF9yZS5zdWIocicoJXMpICcgJSBvcGVuLCByJ1wxJywgdGV4dCkKKyAgICAgICAgdGV4dCA9IF9yZS5zdWIocicgKCVzKScgJSBjbG9zZSwgcidcMScsIHRleHQpCisgICAgICAgIHRleHQgPSBfcmUuc3ViKHInJXMgKiVzJyAlIChvcGVuLCBjbG9zZSksIHInJywgdGV4dCkKKyAgICAgICAgdGV4dCA9IF9yZS5zdWIocidcKChbXnxdKilcKScsIHInXDEnLCB0ZXh0KQorICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIHRleHQKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfZm9ybWF0X3RleHQoc2VsZiwgdGV4dCk6CisgICAgICAgIGlmICclKHByb2cpJyBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKyAgICAgICAgdGV4dF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgaW5kZW50ID0gJyAnICogc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGxfdGV4dCh0ZXh0LCB0ZXh0X3dpZHRoLCBpbmRlbnQpICsgJ1xuXG4nCisKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgIyBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHdpZHRoIGFuZCB0aGUgZW50cnkgbGFiZWwKKyAgICAgICAgaGVscF9wb3NpdGlvbiA9IG1pbihzZWxmLl9hY3Rpb25fbWF4X2xlbmd0aCArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWF4X2hlbHBfcG9zaXRpb24pCisgICAgICAgIGhlbHBfd2lkdGggPSBzZWxmLl93aWR0aCAtIGhlbHBfcG9zaXRpb24KKyAgICAgICAgYWN0aW9uX3dpZHRoID0gaGVscF9wb3NpdGlvbiAtIHNlbGYuX2N1cnJlbnRfaW5kZW50IC0gMgorICAgICAgICBhY3Rpb25faGVhZGVyID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uKGFjdGlvbikKKworICAgICAgICAjIGhvIG5lbHA7IHN0YXJ0IG9uIHNhbWUgbGluZSBhbmQgYWRkIGEgZmluYWwgbmV3bGluZQorICAgICAgICBpZiBub3QgYWN0aW9uLmhlbHA6CisgICAgICAgICAgICB0dXAgPSBzZWxmLl9jdXJyZW50X2luZGVudCwgJycsIGFjdGlvbl9oZWFkZXIKKyAgICAgICAgICAgIGFjdGlvbl9oZWFkZXIgPSAnJSpzJXNcbicgJSB0dXAKKworICAgICAgICAjIHNob3J0IGFjdGlvbiBuYW1lOyBzdGFydCBvbiB0aGUgc2FtZSBsaW5lIGFuZCBwYWQgdHdvIHNwYWNlcworICAgICAgICBlbGlmIGxlbihhY3Rpb25faGVhZGVyKSA8PSBhY3Rpb25fd2lkdGg6CisgICAgICAgICAgICB0dXAgPSBzZWxmLl9jdXJyZW50X2luZGVudCwgJycsIGFjdGlvbl93aWR0aCwgYWN0aW9uX2hlYWRlcgorICAgICAgICAgICAgYWN0aW9uX2hlYWRlciA9ICclKnMlLSpzICAnICUgdHVwCisgICAgICAgICAgICBpbmRlbnRfZmlyc3QgPSAwCisKKyAgICAgICAgIyBsb25nIGFjdGlvbiBuYW1lOyBzdGFydCBvbiB0aGUgbmV4dCBsaW5lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dXAgPSBzZWxmLl9jdXJyZW50X2luZGVudCwgJycsIGFjdGlvbl9oZWFkZXIKKyAgICAgICAgICAgIGFjdGlvbl9oZWFkZXIgPSAnJSpzJXNcbicgJSB0dXAKKyAgICAgICAgICAgIGluZGVudF9maXJzdCA9IGhlbHBfcG9zaXRpb24KKworICAgICAgICAjIGNvbGxlY3QgdGhlIHBpZWNlcyBvZiB0aGUgYWN0aW9uIGhlbHAKKyAgICAgICAgcGFydHMgPSBbYWN0aW9uX2hlYWRlcl0KKworICAgICAgICAjIGlmIHRoZXJlIHdhcyBoZWxwIGZvciB0aGUgYWN0aW9uLCBhZGQgbGluZXMgb2YgaGVscCB0ZXh0CisgICAgICAgIGlmIGFjdGlvbi5oZWxwOgorICAgICAgICAgICAgaGVscF90ZXh0ID0gc2VsZi5fZXhwYW5kX2hlbHAoYWN0aW9uKQorICAgICAgICAgICAgaGVscF9saW5lcyA9IHNlbGYuX3NwbGl0X2xpbmVzKGhlbHBfdGV4dCwgaGVscF93aWR0aCkKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgnJSpzJXNcbicgJSAoaW5kZW50X2ZpcnN0LCAnJywgaGVscF9saW5lc1swXSkpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBoZWxwX2xpbmVzWzE6XToKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoJyUqcyVzXG4nICUgKGhlbHBfcG9zaXRpb24sICcnLCBsaW5lKSkKKworICAgICAgICAjIG9yIGFkZCBhIG5ld2xpbmUgaWYgdGhlIGRlc2NyaXB0aW9uIGRvZXNuJ3QgZW5kIHdpdGggb25lCisgICAgICAgIGVsaWYgbm90IGFjdGlvbl9oZWFkZXIuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoJ1xuJykKKworICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgc3ViLWFjdGlvbnMsIGFkZCB0aGVpciBoZWxwIGFzIHdlbGwKKyAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBzZWxmLl9pdGVyX2luZGVudGVkX3N1YmFjdGlvbnMoYWN0aW9uKToKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZChzZWxmLl9mb3JtYXRfYWN0aW9uKHN1YmFjdGlvbikpCisKKyAgICAgICAgIyByZXR1cm4gYSBzaW5nbGUgc3RyaW5nCisgICAgICAgIHJldHVybiBzZWxmLl9qb2luX3BhcnRzKHBhcnRzKQorCisgICAgZGVmIF9mb3JtYXRfYWN0aW9uX2ludm9jYXRpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgaWYgbm90IGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIG1ldGF2YXIsID0gc2VsZi5fbWV0YXZhcl9mb3JtYXR0ZXIoYWN0aW9uLCBhY3Rpb24uZGVzdCkoMSkKKyAgICAgICAgICAgIHJldHVybiBtZXRhdmFyCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnRzID0gW10KKworICAgICAgICAgICAgIyBpZiB0aGUgT3B0aW9uYWwgZG9lc24ndCB0YWtlIGEgdmFsdWUsIGZvcm1hdCBpczoKKyAgICAgICAgICAgICMgICAgLXMsIC0tbG9uZworICAgICAgICAgICAgaWYgYWN0aW9uLm5hcmdzID09IDA6CisgICAgICAgICAgICAgICAgcGFydHMuZXh0ZW5kKGFjdGlvbi5vcHRpb25fc3RyaW5ncykKKworICAgICAgICAgICAgIyBpZiB0aGUgT3B0aW9uYWwgdGFrZXMgYSB2YWx1ZSwgZm9ybWF0IGlzOgorICAgICAgICAgICAgIyAgICAtcyBBUkdTLCAtLWxvbmcgQVJHUworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWZhdWx0ID0gYWN0aW9uLmRlc3QudXBwZXIoKQorICAgICAgICAgICAgICAgIGFyZ3Nfc3RyaW5nID0gc2VsZi5fZm9ybWF0X2FyZ3MoYWN0aW9uLCBkZWZhdWx0KQorICAgICAgICAgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKCclcyAlcycgJSAob3B0aW9uX3N0cmluZywgYXJnc19zdHJpbmcpKQorCisgICAgICAgICAgICByZXR1cm4gJywgJy5qb2luKHBhcnRzKQorCisgICAgZGVmIF9tZXRhdmFyX2Zvcm1hdHRlcihzZWxmLCBhY3Rpb24sIGRlZmF1bHRfbWV0YXZhcik6CisgICAgICAgIGlmIGFjdGlvbi5tZXRhdmFyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gYWN0aW9uLm1ldGF2YXIKKyAgICAgICAgZWxpZiBhY3Rpb24uY2hvaWNlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNob2ljZV9zdHJzID0gW3N0cihjaG9pY2UpIGZvciBjaG9pY2UgaW4gYWN0aW9uLmNob2ljZXNdCisgICAgICAgICAgICByZXN1bHQgPSAneyVzfScgJSAnLCcuam9pbihjaG9pY2Vfc3RycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IGRlZmF1bHRfbWV0YXZhcgorCisgICAgICAgIGRlZiBmb3JtYXQodHVwbGVfc2l6ZSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgdHVwbGUpOgorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQsICkgKiB0dXBsZV9zaXplCisgICAgICAgIHJldHVybiBmb3JtYXQKKworICAgIGRlZiBfZm9ybWF0X2FyZ3Moc2VsZiwgYWN0aW9uLCBkZWZhdWx0X21ldGF2YXIpOgorICAgICAgICBnZXRfbWV0YXZhciA9IHNlbGYuX21ldGF2YXJfZm9ybWF0dGVyKGFjdGlvbiwgZGVmYXVsdF9tZXRhdmFyKQorICAgICAgICBpZiBhY3Rpb24ubmFyZ3MgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9ICclcycgJSBnZXRfbWV0YXZhcigxKQorICAgICAgICBlbGlmIGFjdGlvbi5uYXJncyA9PSBPUFRJT05BTDoKKyAgICAgICAgICAgIHJlc3VsdCA9ICdbJXNdJyAlIGdldF9tZXRhdmFyKDEpCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFpFUk9fT1JfTU9SRToKKyAgICAgICAgICAgIHJlc3VsdCA9ICdbJXMgWyVzIC4uLl1dJyAlIGdldF9tZXRhdmFyKDIpCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IE9ORV9PUl9NT1JFOgorICAgICAgICAgICAgcmVzdWx0ID0gJyVzIFslcyAuLi5dJyAlIGdldF9tZXRhdmFyKDIpCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFJFTUFJTkRFUjoKKyAgICAgICAgICAgIHJlc3VsdCA9ICcuLi4nCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFBBUlNFUjoKKyAgICAgICAgICAgIHJlc3VsdCA9ICclcyAuLi4nICUgZ2V0X21ldGF2YXIoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvcm1hdHMgPSBbJyVzJyBmb3IgXyBpbiByYW5nZShhY3Rpb24ubmFyZ3MpXQorICAgICAgICAgICAgcmVzdWx0ID0gJyAnLmpvaW4oZm9ybWF0cykgJSBnZXRfbWV0YXZhcihhY3Rpb24ubmFyZ3MpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfZXhwYW5kX2hlbHAoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgcGFyYW1zID0gZGljdCh2YXJzKGFjdGlvbiksIHByb2c9c2VsZi5fcHJvZykKKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdChwYXJhbXMpOgorICAgICAgICAgICAgaWYgcGFyYW1zW25hbWVdIGlzIFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGRlbCBwYXJhbXNbbmFtZV0KKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdChwYXJhbXMpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihwYXJhbXNbbmFtZV0sICdfX25hbWVfXycpOgorICAgICAgICAgICAgICAgIHBhcmFtc1tuYW1lXSA9IHBhcmFtc1tuYW1lXS5fX25hbWVfXworICAgICAgICBpZiBwYXJhbXMuZ2V0KCdjaG9pY2VzJykgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjaG9pY2VzX3N0ciA9ICcsICcuam9pbihbc3RyKGMpIGZvciBjIGluIHBhcmFtc1snY2hvaWNlcyddXSkKKyAgICAgICAgICAgIHBhcmFtc1snY2hvaWNlcyddID0gY2hvaWNlc19zdHIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9oZWxwX3N0cmluZyhhY3Rpb24pICUgcGFyYW1zCisKKyAgICBkZWYgX2l0ZXJfaW5kZW50ZWRfc3ViYWN0aW9ucyhzZWxmLCBhY3Rpb24pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRfc3ViYWN0aW9ucyA9IGFjdGlvbi5fZ2V0X3N1YmFjdGlvbnMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5faW5kZW50KCkKKyAgICAgICAgICAgIGZvciBzdWJhY3Rpb24gaW4gZ2V0X3N1YmFjdGlvbnMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJhY3Rpb24KKyAgICAgICAgICAgIHNlbGYuX2RlZGVudCgpCisKKyAgICBkZWYgX3NwbGl0X2xpbmVzKHNlbGYsIHRleHQsIHdpZHRoKToKKyAgICAgICAgdGV4dCA9IHNlbGYuX3doaXRlc3BhY2VfbWF0Y2hlci5zdWIoJyAnLCB0ZXh0KS5zdHJpcCgpCisgICAgICAgIHJldHVybiBfdGV4dHdyYXAud3JhcCh0ZXh0LCB3aWR0aCkKKworICAgIGRlZiBfZmlsbF90ZXh0KHNlbGYsIHRleHQsIHdpZHRoLCBpbmRlbnQpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fd2hpdGVzcGFjZV9tYXRjaGVyLnN1YignICcsIHRleHQpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIF90ZXh0d3JhcC5maWxsKHRleHQsIHdpZHRoLCBpbml0aWFsX2luZGVudD1pbmRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudF9pbmRlbnQ9aW5kZW50KQorCisgICAgZGVmIF9nZXRfaGVscF9zdHJpbmcoc2VsZiwgYWN0aW9uKToKKyAgICAgICAgcmV0dXJuIGFjdGlvbi5oZWxwCisKKworY2xhc3MgUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKEhlbHBGb3JtYXR0ZXIpOgorICAgICIiIkhlbHAgbWVzc2FnZSBmb3JtYXR0ZXIgd2hpY2ggcmV0YWlucyBhbnkgZm9ybWF0dGluZyBpbiBkZXNjcmlwdGlvbnMuCisKKyAgICBPbmx5IHRoZSBuYW1lIG9mIHRoaXMgY2xhc3MgaXMgY29uc2lkZXJlZCBhIHB1YmxpYyBBUEkuIEFsbCB0aGUgbWV0aG9kcworICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGFzcyBhcmUgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgIiIiCisKKyAgICBkZWYgX2ZpbGxfdGV4dChzZWxmLCB0ZXh0LCB3aWR0aCwgaW5kZW50KToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oW2luZGVudCArIGxpbmUgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdGxpbmVzKFRydWUpXSkKKworCitjbGFzcyBSYXdUZXh0SGVscEZvcm1hdHRlcihSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIpOgorICAgICIiIkhlbHAgbWVzc2FnZSBmb3JtYXR0ZXIgd2hpY2ggcmV0YWlucyBmb3JtYXR0aW5nIG9mIGFsbCBoZWxwIHRleHQuCisKKyAgICBPbmx5IHRoZSBuYW1lIG9mIHRoaXMgY2xhc3MgaXMgY29uc2lkZXJlZCBhIHB1YmxpYyBBUEkuIEFsbCB0aGUgbWV0aG9kcworICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGFzcyBhcmUgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgIiIiCisKKyAgICBkZWYgX3NwbGl0X2xpbmVzKHNlbGYsIHRleHQsIHdpZHRoKToKKyAgICAgICAgcmV0dXJuIHRleHQuc3BsaXRsaW5lcygpCisKKworY2xhc3MgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIoSGVscEZvcm1hdHRlcik6CisgICAgIiIiSGVscCBtZXNzYWdlIGZvcm1hdHRlciB3aGljaCBhZGRzIGRlZmF1bHQgdmFsdWVzIHRvIGFyZ3VtZW50IGhlbHAuCisKKyAgICBPbmx5IHRoZSBuYW1lIG9mIHRoaXMgY2xhc3MgaXMgY29uc2lkZXJlZCBhIHB1YmxpYyBBUEkuIEFsbCB0aGUgbWV0aG9kcworICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGFzcyBhcmUgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgIiIiCisKKyAgICBkZWYgX2dldF9oZWxwX3N0cmluZyhzZWxmLCBhY3Rpb24pOgorICAgICAgICBoZWxwID0gYWN0aW9uLmhlbHAKKyAgICAgICAgaWYgJyUoZGVmYXVsdCknIG5vdCBpbiBhY3Rpb24uaGVscDoKKyAgICAgICAgICAgIGlmIGFjdGlvbi5kZWZhdWx0IGlzIG5vdCBTVVBQUkVTUzoKKyAgICAgICAgICAgICAgICBkZWZhdWx0aW5nX25hcmdzID0gW09QVElPTkFMLCBaRVJPX09SX01PUkVdCisgICAgICAgICAgICAgICAgaWYgYWN0aW9uLm9wdGlvbl9zdHJpbmdzIG9yIGFjdGlvbi5uYXJncyBpbiBkZWZhdWx0aW5nX25hcmdzOgorICAgICAgICAgICAgICAgICAgICBoZWxwICs9ICcgKGRlZmF1bHQ6ICUoZGVmYXVsdClzKScKKyAgICAgICAgcmV0dXJuIGhlbHAKKworCisjID09PT09PT09PT09PT09PT09PT09PQorIyBPcHRpb25zIGFuZCBBcmd1bWVudHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2RlZiBfZ2V0X2FjdGlvbl9uYW1lKGFyZ3VtZW50KToKKyAgICBpZiBhcmd1bWVudCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsaWYgYXJndW1lbnQub3B0aW9uX3N0cmluZ3M6CisgICAgICAgIHJldHVybiAgJy8nLmpvaW4oYXJndW1lbnQub3B0aW9uX3N0cmluZ3MpCisgICAgZWxpZiBhcmd1bWVudC5tZXRhdmFyIG5vdCBpbiAoTm9uZSwgU1VQUFJFU1MpOgorICAgICAgICByZXR1cm4gYXJndW1lbnQubWV0YXZhcgorICAgIGVsaWYgYXJndW1lbnQuZGVzdCBub3QgaW4gKE5vbmUsIFNVUFBSRVNTKToKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50LmRlc3QKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEFyZ3VtZW50RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBbiBlcnJvciBmcm9tIGNyZWF0aW5nIG9yIHVzaW5nIGFuIGFyZ3VtZW50IChvcHRpb25hbCBvciBwb3NpdGlvbmFsKS4KKworICAgIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhpcyBleGNlcHRpb24gaXMgdGhlIG1lc3NhZ2UsIGF1Z21lbnRlZCB3aXRoCisgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFyZ3VtZW50IHRoYXQgY2F1c2VkIGl0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3VtZW50LCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5hcmd1bWVudF9uYW1lID0gX2dldF9hY3Rpb25fbmFtZShhcmd1bWVudCkKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuYXJndW1lbnRfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZm9ybWF0ID0gJyUobWVzc2FnZSlzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9ybWF0ID0gJ2FyZ3VtZW50ICUoYXJndW1lbnRfbmFtZSlzOiAlKG1lc3NhZ2UpcycKKyAgICAgICAgcmV0dXJuIGZvcm1hdCAlIGRpY3QobWVzc2FnZT1zZWxmLm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50X25hbWU9c2VsZi5hcmd1bWVudF9uYW1lKQorCisKK2NsYXNzIEFyZ3VtZW50VHlwZUVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiQW4gZXJyb3IgZnJvbSB0cnlpbmcgdG8gY29udmVydCBhIGNvbW1hbmQgbGluZSBzdHJpbmcgdG8gYSB0eXBlLiIiIgorICAgIHBhc3MKKworCisjID09PT09PT09PT09PT09CisjIEFjdGlvbiBjbGFzc2VzCisjID09PT09PT09PT09PT09CisKK2NsYXNzIEFjdGlvbihfQXR0cmlidXRlSG9sZGVyKToKKyAgICAiIiJJbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gY29udmVydCBjb21tYW5kIGxpbmUgc3RyaW5ncyB0byBQeXRob24gb2JqZWN0cy4KKworICAgIEFjdGlvbiBvYmplY3RzIGFyZSB1c2VkIGJ5IGFuIEFyZ3VtZW50UGFyc2VyIHRvIHJlcHJlc2VudCB0aGUgaW5mb3JtYXRpb24KKyAgICBuZWVkZWQgdG8gcGFyc2UgYSBzaW5nbGUgYXJndW1lbnQgZnJvbSBvbmUgb3IgbW9yZSBzdHJpbmdzIGZyb20gdGhlCisgICAgY29tbWFuZCBsaW5lLiBUaGUga2V5d29yZCBhcmd1bWVudHMgdG8gdGhlIEFjdGlvbiBjb25zdHJ1Y3RvciBhcmUgYWxzbworICAgIGFsbCBhdHRyaWJ1dGVzIG9mIEFjdGlvbiBpbnN0YW5jZXMuCisKKyAgICBLZXl3b3JkIEFyZ3VtZW50czoKKworICAgICAgICAtIG9wdGlvbl9zdHJpbmdzIC0tIEEgbGlzdCBvZiBjb21tYW5kLWxpbmUgb3B0aW9uIHN0cmluZ3Mgd2hpY2gKKyAgICAgICAgICAgIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24uCisKKyAgICAgICAgLSBkZXN0IC0tIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gaG9sZCB0aGUgY3JlYXRlZCBvYmplY3QocykKKworICAgICAgICAtIG5hcmdzIC0tIFRoZSBudW1iZXIgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZQorICAgICAgICAgICAgY29uc3VtZWQuIEJ5IGRlZmF1bHQsIG9uZSBhcmd1bWVudCB3aWxsIGJlIGNvbnN1bWVkIGFuZCBhIHNpbmdsZQorICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSBwcm9kdWNlZC4gIE90aGVyIHZhbHVlcyBpbmNsdWRlOgorICAgICAgICAgICAgICAgIC0gTiAoYW4gaW50ZWdlcikgY29uc3VtZXMgTiBhcmd1bWVudHMgKGFuZCBwcm9kdWNlcyBhIGxpc3QpCisgICAgICAgICAgICAgICAgLSAnPycgY29uc3VtZXMgemVybyBvciBvbmUgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgLSAnKicgY29uc3VtZXMgemVybyBvciBtb3JlIGFyZ3VtZW50cyAoYW5kIHByb2R1Y2VzIGEgbGlzdCkKKyAgICAgICAgICAgICAgICAtICcrJyBjb25zdW1lcyBvbmUgb3IgbW9yZSBhcmd1bWVudHMgKGFuZCBwcm9kdWNlcyBhIGxpc3QpCisgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGVmYXVsdCBhbmQgbmFyZ3M9MSBpcyB0aGF0CisgICAgICAgICAgICB3aXRoIHRoZSBkZWZhdWx0LCBhIHNpbmdsZSB2YWx1ZSB3aWxsIGJlIHByb2R1Y2VkLCB3aGlsZSB3aXRoCisgICAgICAgICAgICBuYXJncz0xLCBhIGxpc3QgY29udGFpbmluZyBhIHNpbmdsZSB2YWx1ZSB3aWxsIGJlIHByb2R1Y2VkLgorCisgICAgICAgIC0gY29uc3QgLS0gVGhlIHZhbHVlIHRvIGJlIHByb2R1Y2VkIGlmIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCB0aGUKKyAgICAgICAgICAgIG9wdGlvbiB1c2VzIGFuIGFjdGlvbiB0aGF0IHRha2VzIG5vIHZhbHVlcy4KKworICAgICAgICAtIGRlZmF1bHQgLS0gVGhlIHZhbHVlIHRvIGJlIHByb2R1Y2VkIGlmIHRoZSBvcHRpb24gaXMgbm90IHNwZWNpZmllZC4KKworICAgICAgICAtIHR5cGUgLS0gVGhlIHR5cGUgd2hpY2ggdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgc2hvdWxkIGJlIGNvbnZlcnRlZAorICAgICAgICAgICAgdG8sIHNob3VsZCBiZSBvbmUgb2YgJ3N0cmluZycsICdpbnQnLCAnZmxvYXQnLCAnY29tcGxleCcgb3IgYQorICAgICAgICAgICAgY2FsbGFibGUgb2JqZWN0IHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQuIElmIE5vbmUsCisgICAgICAgICAgICAnc3RyaW5nJyBpcyBhc3N1bWVkLgorCisgICAgICAgIC0gY2hvaWNlcyAtLSBBIGNvbnRhaW5lciBvZiB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgYWxsb3dlZC4gSWYgbm90IE5vbmUsCisgICAgICAgICAgICBhZnRlciBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICB0eXBlLCBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgaXQgaXMgbm90IGEgbWVtYmVyIG9mIHRoaXMKKyAgICAgICAgICAgIGNvbGxlY3Rpb24uCisKKyAgICAgICAgLSByZXF1aXJlZCAtLSBUcnVlIGlmIHRoZSBhY3Rpb24gbXVzdCBhbHdheXMgYmUgc3BlY2lmaWVkIGF0IHRoZQorICAgICAgICAgICAgY29tbWFuZCBsaW5lLiBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3Igb3B0aW9uYWwgY29tbWFuZC1saW5lCisgICAgICAgICAgICBhcmd1bWVudHMuCisKKyAgICAgICAgLSBoZWxwIC0tIFRoZSBoZWxwIHN0cmluZyBkZXNjcmliaW5nIHRoZSBhcmd1bWVudC4KKworICAgICAgICAtIG1ldGF2YXIgLS0gVGhlIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIG9wdGlvbidzIGFyZ3VtZW50IHdpdGggdGhlCisgICAgICAgICAgICBoZWxwIHN0cmluZy4gSWYgTm9uZSwgdGhlICdkZXN0JyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIG5hcmdzPU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbnN0PU5vbmUsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdHlwZT1Ob25lLAorICAgICAgICAgICAgICAgICBjaG9pY2VzPU5vbmUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSk6CisgICAgICAgIHNlbGYub3B0aW9uX3N0cmluZ3MgPSBvcHRpb25fc3RyaW5ncworICAgICAgICBzZWxmLmRlc3QgPSBkZXN0CisgICAgICAgIHNlbGYubmFyZ3MgPSBuYXJncworICAgICAgICBzZWxmLmNvbnN0ID0gY29uc3QKKyAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuY2hvaWNlcyA9IGNob2ljZXMKKyAgICAgICAgc2VsZi5yZXF1aXJlZCA9IHJlcXVpcmVkCisgICAgICAgIHNlbGYuaGVscCA9IGhlbHAKKyAgICAgICAgc2VsZi5tZXRhdmFyID0gbWV0YXZhcgorCisgICAgZGVmIF9nZXRfa3dhcmdzKHNlbGYpOgorICAgICAgICBuYW1lcyA9IFsKKyAgICAgICAgICAgICdvcHRpb25fc3RyaW5ncycsCisgICAgICAgICAgICAnZGVzdCcsCisgICAgICAgICAgICAnbmFyZ3MnLAorICAgICAgICAgICAgJ2NvbnN0JywKKyAgICAgICAgICAgICdkZWZhdWx0JywKKyAgICAgICAgICAgICd0eXBlJywKKyAgICAgICAgICAgICdjaG9pY2VzJywKKyAgICAgICAgICAgICdoZWxwJywKKyAgICAgICAgICAgICdtZXRhdmFyJywKKyAgICAgICAgXQorICAgICAgICByZXR1cm4gWyhuYW1lLCBnZXRhdHRyKHNlbGYsIG5hbWUpKSBmb3IgbmFtZSBpbiBuYW1lc10KKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKF8oJy5fX2NhbGxfXygpIG5vdCBkZWZpbmVkJykpCisKKworY2xhc3MgX1N0b3JlQWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIG5hcmdzPU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbnN0PU5vbmUsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdHlwZT1Ob25lLAorICAgICAgICAgICAgICAgICBjaG9pY2VzPU5vbmUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSk6CisgICAgICAgIGlmIG5hcmdzID09IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYXJncyBmb3Igc3RvcmUgYWN0aW9ucyBtdXN0IGJlID4gMDsgaWYgeW91ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhdmUgbm90aGluZyB0byBzdG9yZSwgYWN0aW9ucyBzdWNoIGFzIHN0b3JlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RydWUgb3Igc3RvcmUgY29uc3QgbWF5IGJlIG1vcmUgYXBwcm9wcmlhdGUnKQorICAgICAgICBpZiBjb25zdCBpcyBub3QgTm9uZSBhbmQgbmFyZ3MgIT0gT1BUSU9OQUw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYXJncyBtdXN0IGJlICVyIHRvIHN1cHBseSBjb25zdCcgJSBPUFRJT05BTCkKKyAgICAgICAgc3VwZXIoX1N0b3JlQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsCisgICAgICAgICAgICBjb25zdD1jb25zdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHR5cGU9dHlwZSwKKyAgICAgICAgICAgIGNob2ljZXM9Y2hvaWNlcywKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwLAorICAgICAgICAgICAgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHZhbHVlcykKKworCitjbGFzcyBfU3RvcmVDb25zdEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBjb25zdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihfU3RvcmVDb25zdEFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPTAsCisgICAgICAgICAgICBjb25zdD1jb25zdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHNlbGYuY29uc3QpCisKKworY2xhc3MgX1N0b3JlVHJ1ZUFjdGlvbihfU3RvcmVDb25zdEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUpOgorICAgICAgICBzdXBlcihfU3RvcmVUcnVlQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgY29uc3Q9VHJ1ZSwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwKQorCisKK2NsYXNzIF9TdG9yZUZhbHNlQWN0aW9uKF9TdG9yZUNvbnN0QWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lKToKKyAgICAgICAgc3VwZXIoX1N0b3JlRmFsc2VBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBjb25zdD1GYWxzZSwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwKQorCisKK2NsYXNzIF9BcHBlbmRBY3Rpb24oQWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgbmFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGNob2ljZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgaWYgbmFyZ3MgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIGZvciBhcHBlbmQgYWN0aW9ucyBtdXN0IGJlID4gMDsgaWYgYXJnICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ3MgYXJlIG5vdCBzdXBwbHlpbmcgdGhlIHZhbHVlIHRvIGFwcGVuZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGFwcGVuZCBjb25zdCBhY3Rpb24gbWF5IGJlIG1vcmUgYXBwcm9wcmlhdGUnKQorICAgICAgICBpZiBjb25zdCBpcyBub3QgTm9uZSBhbmQgbmFyZ3MgIT0gT1BUSU9OQUw6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYXJncyBtdXN0IGJlICVyIHRvIHN1cHBseSBjb25zdCcgJSBPUFRJT05BTCkKKyAgICAgICAgc3VwZXIoX0FwcGVuZEFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPW5hcmdzLAorICAgICAgICAgICAgY29uc3Q9Y29uc3QsCisgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQsCisgICAgICAgICAgICB0eXBlPXR5cGUsCisgICAgICAgICAgICBjaG9pY2VzPWNob2ljZXMsCisgICAgICAgICAgICByZXF1aXJlZD1yZXF1aXJlZCwKKyAgICAgICAgICAgIGhlbHA9aGVscCwKKyAgICAgICAgICAgIG1ldGF2YXI9bWV0YXZhcikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBpdGVtcyA9IF9jb3B5LmNvcHkoX2Vuc3VyZV92YWx1ZShuYW1lc3BhY2UsIHNlbGYuZGVzdCwgW10pKQorICAgICAgICBpdGVtcy5hcHBlbmQodmFsdWVzKQorICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBpdGVtcykKKworCitjbGFzcyBfQXBwZW5kQ29uc3RBY3Rpb24oQWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgY29uc3QsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgc3VwZXIoX0FwcGVuZENvbnN0QWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGNvbnN0PWNvbnN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHAsCisgICAgICAgICAgICBtZXRhdmFyPW1ldGF2YXIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgaXRlbXMgPSBfY29weS5jb3B5KF9lbnN1cmVfdmFsdWUobmFtZXNwYWNlLCBzZWxmLmRlc3QsIFtdKSkKKyAgICAgICAgaXRlbXMuYXBwZW5kKHNlbGYuY29uc3QpCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGl0ZW1zKQorCisKK2NsYXNzIF9Db3VudEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUpOgorICAgICAgICBzdXBlcihfQ291bnRBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBuYXJncz0wLAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgbmV3X2NvdW50ID0gX2Vuc3VyZV92YWx1ZShuYW1lc3BhY2UsIHNlbGYuZGVzdCwgMCkgKyAxCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIG5ld19jb3VudCkKKworCitjbGFzcyBfSGVscEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgICBkZWZhdWx0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUpOgorICAgICAgICBzdXBlcihfSGVscEFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIG5hcmdzPTAsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQorICAgICAgICBwYXJzZXIuZXhpdCgpCisKKworY2xhc3MgX1ZlcnNpb25BY3Rpb24oQWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgICAgICBkZXN0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgICBkZWZhdWx0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgICBoZWxwPSJzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdCIpOgorICAgICAgICBzdXBlcihfVmVyc2lvbkFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIG5hcmdzPTAsCisgICAgICAgICAgICBoZWxwPWhlbHApCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICB2ZXJzaW9uID0gc2VsZi52ZXJzaW9uCisgICAgICAgIGlmIHZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZXIudmVyc2lvbgorICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZXIuX2dldF9mb3JtYXR0ZXIoKQorICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQodmVyc2lvbikKKyAgICAgICAgcGFyc2VyLmV4aXQobWVzc2FnZT1mb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSkKKworCitjbGFzcyBfU3ViUGFyc2Vyc0FjdGlvbihBY3Rpb24pOgorCisgICAgY2xhc3MgX0Nob2ljZXNQc2V1ZG9BY3Rpb24oQWN0aW9uKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaGVscCk6CisgICAgICAgICAgICBzdXAgPSBzdXBlcihfU3ViUGFyc2Vyc0FjdGlvbi5fQ2hvaWNlc1BzZXVkb0FjdGlvbiwgc2VsZikKKyAgICAgICAgICAgIHN1cC5fX2luaXRfXyhvcHRpb25fc3RyaW5ncz1bXSwgZGVzdD1uYW1lLCBoZWxwPWhlbHApCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIHByb2csCisgICAgICAgICAgICAgICAgIHBhcnNlcl9jbGFzcywKKyAgICAgICAgICAgICAgICAgZGVzdD1TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorCisgICAgICAgIHNlbGYuX3Byb2dfcHJlZml4ID0gcHJvZworICAgICAgICBzZWxmLl9wYXJzZXJfY2xhc3MgPSBwYXJzZXJfY2xhc3MKKyAgICAgICAgc2VsZi5fbmFtZV9wYXJzZXJfbWFwID0ge30KKyAgICAgICAgc2VsZi5fY2hvaWNlc19hY3Rpb25zID0gW10KKworICAgICAgICBzdXBlcihfU3ViUGFyc2Vyc0FjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPVBBUlNFUiwKKyAgICAgICAgICAgIGNob2ljZXM9c2VsZi5fbmFtZV9wYXJzZXJfbWFwLAorICAgICAgICAgICAgaGVscD1oZWxwLAorICAgICAgICAgICAgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIGFkZF9wYXJzZXIoc2VsZiwgbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICAjIHNldCBwcm9nIGZyb20gdGhlIGV4aXN0aW5nIHByZWZpeAorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdwcm9nJykgaXMgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sncHJvZyddID0gJyVzICVzJyAlIChzZWxmLl9wcm9nX3ByZWZpeCwgbmFtZSkKKworICAgICAgICAjIGNyZWF0ZSBhIHBzZXVkby1hY3Rpb24gdG8gaG9sZCB0aGUgY2hvaWNlIGhlbHAKKyAgICAgICAgaWYgJ2hlbHAnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGhlbHAgPSBrd2FyZ3MucG9wKCdoZWxwJykKKyAgICAgICAgICAgIGNob2ljZV9hY3Rpb24gPSBzZWxmLl9DaG9pY2VzUHNldWRvQWN0aW9uKG5hbWUsIGhlbHApCisgICAgICAgICAgICBzZWxmLl9jaG9pY2VzX2FjdGlvbnMuYXBwZW5kKGNob2ljZV9hY3Rpb24pCisKKyAgICAgICAgIyBjcmVhdGUgdGhlIHBhcnNlciBhbmQgYWRkIGl0IHRvIHRoZSBtYXAKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyX2NsYXNzKCoqa3dhcmdzKQorICAgICAgICBzZWxmLl9uYW1lX3BhcnNlcl9tYXBbbmFtZV0gPSBwYXJzZXIKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9nZXRfc3ViYWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nob2ljZXNfYWN0aW9ucworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHBhcnNlcl9uYW1lID0gdmFsdWVzWzBdCisgICAgICAgIGFyZ19zdHJpbmdzID0gdmFsdWVzWzE6XQorCisgICAgICAgICMgc2V0IHRoZSBwYXJzZXIgbmFtZSBpZiByZXF1ZXN0ZWQKKyAgICAgICAgaWYgc2VsZi5kZXN0IGlzIG5vdCBTVVBQUkVTUzoKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIHBhcnNlcl9uYW1lKQorCisgICAgICAgICMgc2VsZWN0IHRoZSBwYXJzZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fbmFtZV9wYXJzZXJfbWFwW3BhcnNlcl9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICB0dXAgPSBwYXJzZXJfbmFtZSwgJywgJy5qb2luKHNlbGYuX25hbWVfcGFyc2VyX21hcCkKKyAgICAgICAgICAgIG1zZyA9IF8oJ3Vua25vd24gcGFyc2VyICVyIChjaG9pY2VzOiAlcyknKSAlIHR1cAorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihzZWxmLCBtc2cpCisKKyAgICAgICAgIyBwYXJzZSBhbGwgdGhlIHJlbWFpbmluZyBvcHRpb25zIGludG8gdGhlIG5hbWVzcGFjZQorICAgICAgICAjIHN0b3JlIGFueSB1bnJlY29nbml6ZWQgb3B0aW9ucyBvbiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSB0b3AKKyAgICAgICAgIyBsZXZlbCBwYXJzZXIgY2FuIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlbQorICAgICAgICBuYW1lc3BhY2UsIGFyZ19zdHJpbmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSkKKyAgICAgICAgaWYgYXJnX3N0cmluZ3M6CisgICAgICAgICAgICB2YXJzKG5hbWVzcGFjZSkuc2V0ZGVmYXVsdChfVU5SRUNPR05JWkVEX0FSR1NfQVRUUiwgW10pCisgICAgICAgICAgICBnZXRhdHRyKG5hbWVzcGFjZSwgX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIpLmV4dGVuZChhcmdfc3RyaW5ncykKKworCisjID09PT09PT09PT09PT09CisjIFR5cGUgY2xhc3NlcworIyA9PT09PT09PT09PT09PQorCitjbGFzcyBGaWxlVHlwZShvYmplY3QpOgorICAgICIiIkZhY3RvcnkgZm9yIGNyZWF0aW5nIGZpbGUgb2JqZWN0IHR5cGVzCisKKyAgICBJbnN0YW5jZXMgb2YgRmlsZVR5cGUgYXJlIHR5cGljYWxseSBwYXNzZWQgYXMgdHlwZT0gYXJndW1lbnRzIHRvIHRoZQorICAgIEFyZ3VtZW50UGFyc2VyIGFkZF9hcmd1bWVudCgpIG1ldGhvZC4KKworICAgIEtleXdvcmQgQXJndW1lbnRzOgorICAgICAgICAtIG1vZGUgLS0gQSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIGZpbGUgaXMgdG8gYmUgb3BlbmVkLiBBY2NlcHRzIHRoZQorICAgICAgICAgICAgc2FtZSB2YWx1ZXMgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGJ1ZnNpemUgLS0gVGhlIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcworICAgICAgICAgICAgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xKToKKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKKyAgICAgICAgc2VsZi5fYnVmc2l6ZSA9IGJ1ZnNpemUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdHJpbmcpOgorICAgICAgICAjIHRoZSBzcGVjaWFsIGFyZ3VtZW50ICItIiBtZWFucyBzeXMuc3Rke2luLG91dH0KKyAgICAgICAgaWYgc3RyaW5nID09ICctJzoKKyAgICAgICAgICAgIGlmICdyJyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfc3lzLnN0ZGluCisgICAgICAgICAgICBlbGlmICd3JyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfc3lzLnN0ZG91dAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSBfKCdhcmd1bWVudCAiLSIgd2l0aCBtb2RlICVyJykgJSBzZWxmLl9tb2RlCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisKKyAgICAgICAgIyBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIGFzIGZpbGUgbmFtZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgbWVzc2FnZSA9IF8oImNhbid0IG9wZW4gJyVzJzogJXMiKQorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IobWVzc2FnZSAlIChzdHJpbmcsIGUpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZQorICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGFyZ3Nfc3RyKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPcHRpb25hbCBhbmQgUG9zaXRpb25hbCBQYXJzaW5nCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBOYW1lc3BhY2UoX0F0dHJpYnV0ZUhvbGRlcik6CisgICAgIiIiU2ltcGxlIG9iamVjdCBmb3Igc3RvcmluZyBhdHRyaWJ1dGVzLgorCisgICAgSW1wbGVtZW50cyBlcXVhbGl0eSBieSBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcywgYW5kIHByb3ZpZGVzIGEgc2ltcGxlCisgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgZm9yIG5hbWUgaW4ga3dhcmdzOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBrd2FyZ3NbbmFtZV0pCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gdmFycyhzZWxmKSA9PSB2YXJzKG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fX2RpY3RfXworCisKK2NsYXNzIF9BY3Rpb25zQ29udGFpbmVyKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgIHByZWZpeF9jaGFycywKKyAgICAgICAgICAgICAgICAgYXJndW1lbnRfZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcik6CisgICAgICAgIHN1cGVyKF9BY3Rpb25zQ29udGFpbmVyLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuYXJndW1lbnRfZGVmYXVsdCA9IGFyZ3VtZW50X2RlZmF1bHQKKyAgICAgICAgc2VsZi5wcmVmaXhfY2hhcnMgPSBwcmVmaXhfY2hhcnMKKyAgICAgICAgc2VsZi5jb25mbGljdF9oYW5kbGVyID0gY29uZmxpY3RfaGFuZGxlcgorCisgICAgICAgICMgc2V0IHVwIHJlZ2lzdHJpZXMKKyAgICAgICAgc2VsZi5fcmVnaXN0cmllcyA9IHt9CisKKyAgICAgICAgIyByZWdpc3RlciBhY3Rpb25zCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsIE5vbmUsIF9TdG9yZUFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3N0b3JlJywgX1N0b3JlQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnc3RvcmVfY29uc3QnLCBfU3RvcmVDb25zdEFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3N0b3JlX3RydWUnLCBfU3RvcmVUcnVlQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnc3RvcmVfZmFsc2UnLCBfU3RvcmVGYWxzZUFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ2FwcGVuZCcsIF9BcHBlbmRBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdhcHBlbmRfY29uc3QnLCBfQXBwZW5kQ29uc3RBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdjb3VudCcsIF9Db3VudEFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ2hlbHAnLCBfSGVscEFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3ZlcnNpb24nLCBfVmVyc2lvbkFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3BhcnNlcnMnLCBfU3ViUGFyc2Vyc0FjdGlvbikKKworICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY29uZmxpY3QgaGFuZGxlciBpcyBpbnZhbGlkCisgICAgICAgIHNlbGYuX2dldF9oYW5kbGVyKCkKKworICAgICAgICAjIGFjdGlvbiBzdG9yYWdlCisgICAgICAgIHNlbGYuX2FjdGlvbnMgPSBbXQorICAgICAgICBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnMgPSB7fQorCisgICAgICAgICMgZ3JvdXBzCisgICAgICAgIHNlbGYuX2FjdGlvbl9ncm91cHMgPSBbXQorICAgICAgICBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzID0gW10KKworICAgICAgICAjIGRlZmF1bHRzIHN0b3JhZ2UKKyAgICAgICAgc2VsZi5fZGVmYXVsdHMgPSB7fQorCisgICAgICAgICMgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuICJvcHRpb24iIGxvb2tzIGxpa2UgYSBuZWdhdGl2ZSBudW1iZXIKKyAgICAgICAgc2VsZi5fbmVnYXRpdmVfbnVtYmVyX21hdGNoZXIgPSBfcmUuY29tcGlsZShyJ14tXGQrJHxeLVxkKlwuXGQrJCcpCisKKyAgICAgICAgIyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55IG9wdGlvbmFscyB0aGF0IGxvb2sgbGlrZSBuZWdhdGl2ZQorICAgICAgICAjIG51bWJlcnMgLS0gdXNlcyBhIGxpc3Qgc28gaXQgY2FuIGJlIHNoYXJlZCBhbmQgZWRpdGVkCisgICAgICAgIHNlbGYuX2hhc19uZWdhdGl2ZV9udW1iZXJfb3B0aW9uYWxzID0gW10KKworICAgICMgPT09PT09PT09PT09PT09PT09PT0KKyAgICAjIFJlZ2lzdHJhdGlvbiBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiByZWdpc3RlcihzZWxmLCByZWdpc3RyeV9uYW1lLCB2YWx1ZSwgb2JqZWN0KToKKyAgICAgICAgcmVnaXN0cnkgPSBzZWxmLl9yZWdpc3RyaWVzLnNldGRlZmF1bHQocmVnaXN0cnlfbmFtZSwge30pCisgICAgICAgIHJlZ2lzdHJ5W3ZhbHVlXSA9IG9iamVjdAorCisgICAgZGVmIF9yZWdpc3RyeV9nZXQoc2VsZiwgcmVnaXN0cnlfbmFtZSwgdmFsdWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RyaWVzW3JlZ2lzdHJ5X25hbWVdLmdldCh2YWx1ZSwgZGVmYXVsdCkKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgTmFtZXNwYWNlIGRlZmF1bHQgYWNjZXNzb3IgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBzZXRfZGVmYXVsdHMoc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9kZWZhdWx0cy51cGRhdGUoa3dhcmdzKQorCisgICAgICAgICMgaWYgdGhlc2UgZGVmYXVsdHMgbWF0Y2ggYW55IGV4aXN0aW5nIGFyZ3VtZW50cywgcmVwbGFjZQorICAgICAgICAjIHRoZSBwcmV2aW91cyBkZWZhdWx0IG9uIHRoZSBvYmplY3Qgd2l0aCB0aGUgbmV3IG9uZQorICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnM6CisgICAgICAgICAgICBpZiBhY3Rpb24uZGVzdCBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgYWN0aW9uLmRlZmF1bHQgPSBrd2FyZ3NbYWN0aW9uLmRlc3RdCisKKyAgICBkZWYgZ2V0X2RlZmF1bHQoc2VsZiwgZGVzdCk6CisgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9uczoKKyAgICAgICAgICAgIGlmIGFjdGlvbi5kZXN0ID09IGRlc3QgYW5kIGFjdGlvbi5kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGVmYXVsdAorICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdHMuZ2V0KGRlc3QsIE5vbmUpCisKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIEFkZGluZyBhcmd1bWVudCBhY3Rpb25zCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBhZGRfYXJndW1lbnQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIGFkZF9hcmd1bWVudChkZXN0LCAuLi4sIG5hbWU9dmFsdWUsIC4uLikKKyAgICAgICAgYWRkX2FyZ3VtZW50KG9wdGlvbl9zdHJpbmcsIG9wdGlvbl9zdHJpbmcsIC4uLiwgbmFtZT12YWx1ZSwgLi4uKQorICAgICAgICAiIiIKKworICAgICAgICAjIGlmIG5vIHBvc2l0aW9uYWwgYXJncyBhcmUgc3VwcGxpZWQgb3Igb25seSBvbmUgaXMgc3VwcGxpZWQgYW5kCisgICAgICAgICMgaXQgZG9lc24ndCBsb29rIGxpa2UgYW4gb3B0aW9uIHN0cmluZywgcGFyc2UgYSBwb3NpdGlvbmFsCisgICAgICAgICMgYXJndW1lbnQKKyAgICAgICAgY2hhcnMgPSBzZWxmLnByZWZpeF9jaGFycworICAgICAgICBpZiBub3QgYXJncyBvciBsZW4oYXJncykgPT0gMSBhbmQgYXJnc1swXVswXSBub3QgaW4gY2hhcnM6CisgICAgICAgICAgICBpZiBhcmdzIGFuZCAnZGVzdCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Rlc3Qgc3VwcGxpZWQgdHdpY2UgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQnKQorICAgICAgICAgICAga3dhcmdzID0gc2VsZi5fZ2V0X3Bvc2l0aW9uYWxfa3dhcmdzKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICAjIG90aGVyd2lzZSwgd2UncmUgYWRkaW5nIGFuIG9wdGlvbmFsIGFyZ3VtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3MgPSBzZWxmLl9nZXRfb3B0aW9uYWxfa3dhcmdzKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICAjIGlmIG5vIGRlZmF1bHQgd2FzIHN1cHBsaWVkLCB1c2UgdGhlIHBhcnNlci1sZXZlbCBkZWZhdWx0CisgICAgICAgIGlmICdkZWZhdWx0JyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGVzdCA9IGt3YXJnc1snZGVzdCddCisgICAgICAgICAgICBpZiBkZXN0IGluIHNlbGYuX2RlZmF1bHRzOgorICAgICAgICAgICAgICAgIGt3YXJnc1snZGVmYXVsdCddID0gc2VsZi5fZGVmYXVsdHNbZGVzdF0KKyAgICAgICAgICAgIGVsaWYgc2VsZi5hcmd1bWVudF9kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGt3YXJnc1snZGVmYXVsdCddID0gc2VsZi5hcmd1bWVudF9kZWZhdWx0CisKKyAgICAgICAgIyBjcmVhdGUgdGhlIGFjdGlvbiBvYmplY3QsIGFuZCBhZGQgaXQgdG8gdGhlIHBhcnNlcgorICAgICAgICBhY3Rpb25fY2xhc3MgPSBzZWxmLl9wb3BfYWN0aW9uX2NsYXNzKGt3YXJncykKKyAgICAgICAgaWYgbm90IF9jYWxsYWJsZShhY3Rpb25fY2xhc3MpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biBhY3Rpb24gIiVzIicgJSBhY3Rpb25fY2xhc3MpCisgICAgICAgIGFjdGlvbiA9IGFjdGlvbl9jbGFzcygqKmt3YXJncykKKworICAgICAgICAjIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBhY3Rpb24gdHlwZSBpcyBub3QgY2FsbGFibGUKKyAgICAgICAgdHlwZV9mdW5jID0gc2VsZi5fcmVnaXN0cnlfZ2V0KCd0eXBlJywgYWN0aW9uLnR5cGUsIGFjdGlvbi50eXBlKQorICAgICAgICBpZiBub3QgX2NhbGxhYmxlKHR5cGVfZnVuYyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclciBpcyBub3QgY2FsbGFibGUnICUgdHlwZV9mdW5jKQorCisgICAgICAgIHJldHVybiBzZWxmLl9hZGRfYWN0aW9uKGFjdGlvbikKKworICAgIGRlZiBhZGRfYXJndW1lbnRfZ3JvdXAoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgZ3JvdXAgPSBfQXJndW1lbnRHcm91cChzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX2FjdGlvbl9ncm91cHMuYXBwZW5kKGdyb3VwKQorICAgICAgICByZXR1cm4gZ3JvdXAKKworICAgIGRlZiBhZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgZ3JvdXAgPSBfTXV0dWFsbHlFeGNsdXNpdmVHcm91cChzZWxmLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3Vwcy5hcHBlbmQoZ3JvdXApCisgICAgICAgIHJldHVybiBncm91cAorCisgICAgZGVmIF9hZGRfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgICMgcmVzb2x2ZSBhbnkgY29uZmxpY3RzCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbmZsaWN0KGFjdGlvbikKKworICAgICAgICAjIGFkZCB0byBhY3Rpb25zIGxpc3QKKyAgICAgICAgc2VsZi5fYWN0aW9ucy5hcHBlbmQoYWN0aW9uKQorICAgICAgICBhY3Rpb24uY29udGFpbmVyID0gc2VsZgorCisgICAgICAgICMgaW5kZXggdGhlIGFjdGlvbiBieSBhbnkgb3B0aW9uIHN0cmluZ3MgaXQgaGFzCisgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXSA9IGFjdGlvbgorCisgICAgICAgICMgc2V0IHRoZSBmbGFnIGlmIGFueSBvcHRpb24gc3RyaW5ncyBsb29rIGxpa2UgbmVnYXRpdmUgbnVtYmVycworICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBpZiBzZWxmLl9uZWdhdGl2ZV9udW1iZXJfbWF0Y2hlci5tYXRjaChvcHRpb25fc3RyaW5nKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhc19uZWdhdGl2ZV9udW1iZXJfb3B0aW9uYWxzLmFwcGVuZChUcnVlKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjcmVhdGVkIGFjdGlvbgorICAgICAgICByZXR1cm4gYWN0aW9uCisKKyAgICBkZWYgX3JlbW92ZV9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICAgICAgc2VsZi5fYWN0aW9ucy5yZW1vdmUoYWN0aW9uKQorCisgICAgZGVmIF9hZGRfY29udGFpbmVyX2FjdGlvbnMoc2VsZiwgY29udGFpbmVyKToKKyAgICAgICAgIyBjb2xsZWN0IGdyb3VwcyBieSB0aXRsZXMKKyAgICAgICAgdGl0bGVfZ3JvdXBfbWFwID0ge30KKyAgICAgICAgZm9yIGdyb3VwIGluIHNlbGYuX2FjdGlvbl9ncm91cHM6CisgICAgICAgICAgICBpZiBncm91cC50aXRsZSBpbiB0aXRsZV9ncm91cF9tYXA6CisgICAgICAgICAgICAgICAgbXNnID0gXygnY2Fubm90IG1lcmdlIGFjdGlvbnMgLSB0d28gZ3JvdXBzIGFyZSBuYW1lZCAlcicpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSAoZ3JvdXAudGl0bGUpKQorICAgICAgICAgICAgdGl0bGVfZ3JvdXBfbWFwW2dyb3VwLnRpdGxlXSA9IGdyb3VwCisKKyAgICAgICAgIyBtYXAgZWFjaCBhY3Rpb24gdG8gaXRzIGdyb3VwCisgICAgICAgIGdyb3VwX21hcCA9IHt9CisgICAgICAgIGZvciBncm91cCBpbiBjb250YWluZXIuX2FjdGlvbl9ncm91cHM6CisKKyAgICAgICAgICAgICMgaWYgYSBncm91cCB3aXRoIHRoZSB0aXRsZSBleGlzdHMsIHVzZSB0aGF0LCBvdGhlcndpc2UKKyAgICAgICAgICAgICMgY3JlYXRlIGEgbmV3IGdyb3VwIG1hdGNoaW5nIHRoZSBjb250YWluZXIncyBncm91cAorICAgICAgICAgICAgaWYgZ3JvdXAudGl0bGUgbm90IGluIHRpdGxlX2dyb3VwX21hcDoKKyAgICAgICAgICAgICAgICB0aXRsZV9ncm91cF9tYXBbZ3JvdXAudGl0bGVdID0gc2VsZi5hZGRfYXJndW1lbnRfZ3JvdXAoCisgICAgICAgICAgICAgICAgICAgIHRpdGxlPWdyb3VwLnRpdGxlLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1ncm91cC5kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj1ncm91cC5jb25mbGljdF9oYW5kbGVyKQorCisgICAgICAgICAgICAjIG1hcCB0aGUgYWN0aW9ucyB0byB0aGVpciBuZXcgZ3JvdXAKKyAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gZ3JvdXAuX2dyb3VwX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgZ3JvdXBfbWFwW2FjdGlvbl0gPSB0aXRsZV9ncm91cF9tYXBbZ3JvdXAudGl0bGVdCisKKyAgICAgICAgIyBhZGQgY29udGFpbmVyJ3MgbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwcworICAgICAgICAjIE5PVEU6IGlmIGFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAgZXZlciBnYWlucyB0aXRsZT0gYW5kCisgICAgICAgICMgZGVzY3JpcHRpb249IHRoZW4gdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSBleHBhbmRlZCBhcyBhYm92ZQorICAgICAgICBmb3IgZ3JvdXAgaW4gY29udGFpbmVyLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzOgorICAgICAgICAgICAgbXV0ZXhfZ3JvdXAgPSBzZWxmLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoCisgICAgICAgICAgICAgICAgcmVxdWlyZWQ9Z3JvdXAucmVxdWlyZWQpCisKKyAgICAgICAgICAgICMgbWFwIHRoZSBhY3Rpb25zIHRvIHRoZWlyIG5ldyBtdXRleCBncm91cAorICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBncm91cF9tYXBbYWN0aW9uXSA9IG11dGV4X2dyb3VwCisKKyAgICAgICAgIyBhZGQgYWxsIGFjdGlvbnMgdG8gdGhpcyBjb250YWluZXIgb3IgdGhlaXIgZ3JvdXAKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBjb250YWluZXIuX2FjdGlvbnM6CisgICAgICAgICAgICBncm91cF9tYXAuZ2V0KGFjdGlvbiwgc2VsZikuX2FkZF9hY3Rpb24oYWN0aW9uKQorCisgICAgZGVmIF9nZXRfcG9zaXRpb25hbF9rd2FyZ3Moc2VsZiwgZGVzdCwgKiprd2FyZ3MpOgorICAgICAgICAjIG1ha2Ugc3VyZSByZXF1aXJlZCBpcyBub3Qgc3BlY2lmaWVkCisgICAgICAgIGlmICdyZXF1aXJlZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgbXNnID0gXygiJ3JlcXVpcmVkJyBpcyBhbiBpbnZhbGlkIGFyZ3VtZW50IGZvciBwb3NpdGlvbmFscyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorCisgICAgICAgICMgbWFyayBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcyByZXF1aXJlZCBpZiBhdCBsZWFzdCBvbmUgaXMKKyAgICAgICAgIyBhbHdheXMgcmVxdWlyZWQKKyAgICAgICAgaWYga3dhcmdzLmdldCgnbmFyZ3MnKSBub3QgaW4gW09QVElPTkFMLCBaRVJPX09SX01PUkVdOgorICAgICAgICAgICAga3dhcmdzWydyZXF1aXJlZCddID0gVHJ1ZQorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCduYXJncycpID09IFpFUk9fT1JfTU9SRSBhbmQgJ2RlZmF1bHQnIG5vdCBpbiBrd2FyZ3M6CisgICAgICAgICAgICBrd2FyZ3NbJ3JlcXVpcmVkJ10gPSBUcnVlCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGtleXdvcmQgYXJndW1lbnRzIHdpdGggbm8gb3B0aW9uIHN0cmluZ3MKKyAgICAgICAgcmV0dXJuIGRpY3Qoa3dhcmdzLCBkZXN0PWRlc3QsIG9wdGlvbl9zdHJpbmdzPVtdKQorCisgICAgZGVmIF9nZXRfb3B0aW9uYWxfa3dhcmdzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgZGV0ZXJtaW5lIHNob3J0IGFuZCBsb25nIG9wdGlvbiBzdHJpbmdzCisgICAgICAgIG9wdGlvbl9zdHJpbmdzID0gW10KKyAgICAgICAgbG9uZ19vcHRpb25fc3RyaW5ncyA9IFtdCisgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIGFyZ3M6CisgICAgICAgICAgICAjIGVycm9yIG9uIHN0cmluZ3MgdGhhdCBkb24ndCBzdGFydCB3aXRoIGFuIGFwcHJvcHJpYXRlIHByZWZpeAorICAgICAgICAgICAgaWYgbm90IG9wdGlvbl9zdHJpbmdbMF0gaW4gc2VsZi5wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCBvcHRpb24gc3RyaW5nICVyOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBzdGFydCB3aXRoIGEgY2hhcmFjdGVyICVyJykKKyAgICAgICAgICAgICAgICB0dXAgPSBvcHRpb25fc3RyaW5nLCBzZWxmLnByZWZpeF9jaGFycworICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnICUgdHVwKQorCisgICAgICAgICAgICAjIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCB0d28gcHJlZml4IGNoYXJhY3RlcnMgYXJlIGxvbmcgb3B0aW9ucworICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MuYXBwZW5kKG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nWzBdIGluIHNlbGYucHJlZml4X2NoYXJzOgorICAgICAgICAgICAgICAgIGlmIGxlbihvcHRpb25fc3RyaW5nKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmdbMV0gaW4gc2VsZi5wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdGlvbl9zdHJpbmdzLmFwcGVuZChvcHRpb25fc3RyaW5nKQorCisgICAgICAgICMgaW5mZXIgZGVzdGluYXRpb24sICctLWZvby1iYXInIC0+ICdmb29fYmFyJyBhbmQgJy14JyAtPiAneCcKKyAgICAgICAgZGVzdCA9IGt3YXJncy5wb3AoJ2Rlc3QnLCBOb25lKQorICAgICAgICBpZiBkZXN0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsb25nX29wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIGRlc3Rfb3B0aW9uX3N0cmluZyA9IGxvbmdfb3B0aW9uX3N0cmluZ3NbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdF9vcHRpb25fc3RyaW5nID0gb3B0aW9uX3N0cmluZ3NbMF0KKyAgICAgICAgICAgIGRlc3QgPSBkZXN0X29wdGlvbl9zdHJpbmcubHN0cmlwKHNlbGYucHJlZml4X2NoYXJzKQorICAgICAgICAgICAgaWYgbm90IGRlc3Q6CisgICAgICAgICAgICAgICAgbXNnID0gXygnZGVzdD0gaXMgcmVxdWlyZWQgZm9yIG9wdGlvbnMgbGlrZSAlcicpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBvcHRpb25fc3RyaW5nKQorICAgICAgICAgICAgZGVzdCA9IGRlc3QucmVwbGFjZSgnLScsICdfJykKKworICAgICAgICAjIHJldHVybiB0aGUgdXBkYXRlZCBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICByZXR1cm4gZGljdChrd2FyZ3MsIGRlc3Q9ZGVzdCwgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MpCisKKyAgICBkZWYgX3BvcF9hY3Rpb25fY2xhc3Moc2VsZiwga3dhcmdzLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBhY3Rpb24gPSBrd2FyZ3MucG9wKCdhY3Rpb24nLCBkZWZhdWx0KQorICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0cnlfZ2V0KCdhY3Rpb24nLCBhY3Rpb24sIGFjdGlvbikKKworICAgIGRlZiBfZ2V0X2hhbmRsZXIoc2VsZik6CisgICAgICAgICMgZGV0ZXJtaW5lIGZ1bmN0aW9uIGZyb20gY29uZmxpY3QgaGFuZGxlciBzdHJpbmcKKyAgICAgICAgaGFuZGxlcl9mdW5jX25hbWUgPSAnX2hhbmRsZV9jb25mbGljdF8lcycgJSBzZWxmLmNvbmZsaWN0X2hhbmRsZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgaGFuZGxlcl9mdW5jX25hbWUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIG1zZyA9IF8oJ2ludmFsaWQgY29uZmxpY3RfcmVzb2x1dGlvbiB2YWx1ZTogJXInKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBzZWxmLmNvbmZsaWN0X2hhbmRsZXIpCisKKyAgICBkZWYgX2NoZWNrX2NvbmZsaWN0KHNlbGYsIGFjdGlvbik6CisKKyAgICAgICAgIyBmaW5kIGFsbCBvcHRpb25zIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGlzIG9wdGlvbgorICAgICAgICBjb25mbF9vcHRpb25hbHMgPSBbXQorICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBjb25mbF9vcHRpb25hbCA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgIGNvbmZsX29wdGlvbmFscy5hcHBlbmQoKG9wdGlvbl9zdHJpbmcsIGNvbmZsX29wdGlvbmFsKSkKKworICAgICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cworICAgICAgICBpZiBjb25mbF9vcHRpb25hbHM6CisgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyID0gc2VsZi5fZ2V0X2hhbmRsZXIoKQorICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcihhY3Rpb24sIGNvbmZsX29wdGlvbmFscykKKworICAgIGRlZiBfaGFuZGxlX2NvbmZsaWN0X2Vycm9yKHNlbGYsIGFjdGlvbiwgY29uZmxpY3RpbmdfYWN0aW9ucyk6CisgICAgICAgIG1lc3NhZ2UgPSBfKCdjb25mbGljdGluZyBvcHRpb24gc3RyaW5nKHMpOiAlcycpCisgICAgICAgIGNvbmZsaWN0X3N0cmluZyA9ICcsICcuam9pbihbb3B0aW9uX3N0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25fc3RyaW5nLCBhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjb25mbGljdGluZ19hY3Rpb25zXSkKKyAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1lc3NhZ2UgJSBjb25mbGljdF9zdHJpbmcpCisKKyAgICBkZWYgX2hhbmRsZV9jb25mbGljdF9yZXNvbHZlKHNlbGYsIGFjdGlvbiwgY29uZmxpY3RpbmdfYWN0aW9ucyk6CisKKyAgICAgICAgIyByZW1vdmUgYWxsIGNvbmZsaWN0aW5nIG9wdGlvbnMKKyAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcsIGFjdGlvbiBpbiBjb25mbGljdGluZ19hY3Rpb25zOgorCisgICAgICAgICAgICAjIHJlbW92ZSB0aGUgY29uZmxpY3Rpbmcgb3B0aW9uCisgICAgICAgICAgICBhY3Rpb24ub3B0aW9uX3N0cmluZ3MucmVtb3ZlKG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnMucG9wKG9wdGlvbl9zdHJpbmcsIE5vbmUpCisKKyAgICAgICAgICAgICMgaWYgdGhlIG9wdGlvbiBub3cgaGFzIG5vIG9wdGlvbiBzdHJpbmcsIHJlbW92ZSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgIyBjb250YWluZXIgaG9sZGluZyBpdAorICAgICAgICAgICAgaWYgbm90IGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgICAgICBhY3Rpb24uY29udGFpbmVyLl9yZW1vdmVfYWN0aW9uKGFjdGlvbikKKworCitjbGFzcyBfQXJndW1lbnRHcm91cChfQWN0aW9uc0NvbnRhaW5lcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyLCB0aXRsZT1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICMgYWRkIGFueSBtaXNzaW5nIGtleXdvcmQgYXJndW1lbnRzIGJ5IGNoZWNraW5nIHRoZSBjb250YWluZXIKKyAgICAgICAgdXBkYXRlID0ga3dhcmdzLnNldGRlZmF1bHQKKyAgICAgICAgdXBkYXRlKCdjb25mbGljdF9oYW5kbGVyJywgY29udGFpbmVyLmNvbmZsaWN0X2hhbmRsZXIpCisgICAgICAgIHVwZGF0ZSgncHJlZml4X2NoYXJzJywgY29udGFpbmVyLnByZWZpeF9jaGFycykKKyAgICAgICAgdXBkYXRlKCdhcmd1bWVudF9kZWZhdWx0JywgY29udGFpbmVyLmFyZ3VtZW50X2RlZmF1bHQpCisgICAgICAgIHN1cGVyX2luaXQgPSBzdXBlcihfQXJndW1lbnRHcm91cCwgc2VsZikuX19pbml0X18KKyAgICAgICAgc3VwZXJfaW5pdChkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgKiprd2FyZ3MpCisKKyAgICAgICAgIyBncm91cCBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLl9ncm91cF9hY3Rpb25zID0gW10KKworICAgICAgICAjIHNoYXJlIG1vc3QgYXR0cmlidXRlcyB3aXRoIHRoZSBjb250YWluZXIKKyAgICAgICAgc2VsZi5fcmVnaXN0cmllcyA9IGNvbnRhaW5lci5fcmVnaXN0cmllcworICAgICAgICBzZWxmLl9hY3Rpb25zID0gY29udGFpbmVyLl9hY3Rpb25zCisgICAgICAgIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9ucyA9IGNvbnRhaW5lci5fb3B0aW9uX3N0cmluZ19hY3Rpb25zCisgICAgICAgIHNlbGYuX2RlZmF1bHRzID0gY29udGFpbmVyLl9kZWZhdWx0cworICAgICAgICBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFscyA9IFwKKyAgICAgICAgICAgIGNvbnRhaW5lci5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHMKKyAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcyA9IGNvbnRhaW5lci5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcworCisgICAgZGVmIF9hZGRfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGFjdGlvbiA9IHN1cGVyKF9Bcmd1bWVudEdyb3VwLCBzZWxmKS5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9yZW1vdmVfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHN1cGVyKF9Bcmd1bWVudEdyb3VwLCBzZWxmKS5fcmVtb3ZlX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMucmVtb3ZlKGFjdGlvbikKKworCitjbGFzcyBfTXV0dWFsbHlFeGNsdXNpdmVHcm91cChfQXJndW1lbnRHcm91cCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyLCByZXF1aXJlZD1GYWxzZSk6CisgICAgICAgIHN1cGVyKF9NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwLCBzZWxmKS5fX2luaXRfXyhjb250YWluZXIpCisgICAgICAgIHNlbGYucmVxdWlyZWQgPSByZXF1aXJlZAorICAgICAgICBzZWxmLl9jb250YWluZXIgPSBjb250YWluZXIKKworICAgIGRlZiBfYWRkX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24ucmVxdWlyZWQ6CisgICAgICAgICAgICBtc2cgPSBfKCdtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIG11c3QgYmUgb3B0aW9uYWwnKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgICAgIGFjdGlvbiA9IHNlbGYuX2NvbnRhaW5lci5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9yZW1vdmVfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuX2NvbnRhaW5lci5fcmVtb3ZlX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMucmVtb3ZlKGFjdGlvbikKKworCitjbGFzcyBBcmd1bWVudFBhcnNlcihfQXR0cmlidXRlSG9sZGVyLCBfQWN0aW9uc0NvbnRhaW5lcik6CisgICAgIiIiT2JqZWN0IGZvciBwYXJzaW5nIGNvbW1hbmQgbGluZSBzdHJpbmdzIGludG8gUHl0aG9uIG9iamVjdHMuCisKKyAgICBLZXl3b3JkIEFyZ3VtZW50czoKKyAgICAgICAgLSBwcm9nIC0tIFRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIChkZWZhdWx0OiBzeXMuYXJndlswXSkKKyAgICAgICAgLSB1c2FnZSAtLSBBIHVzYWdlIG1lc3NhZ2UgKGRlZmF1bHQ6IGF1dG8tZ2VuZXJhdGVkIGZyb20gYXJndW1lbnRzKQorICAgICAgICAtIGRlc2NyaXB0aW9uIC0tIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcHJvZ3JhbSBkb2VzCisgICAgICAgIC0gZXBpbG9nIC0tIFRleHQgZm9sbG93aW5nIHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbnMKKyAgICAgICAgLSBwYXJlbnRzIC0tIFBhcnNlcnMgd2hvc2UgYXJndW1lbnRzIHNob3VsZCBiZSBjb3BpZWQgaW50byB0aGlzIG9uZQorICAgICAgICAtIGZvcm1hdHRlcl9jbGFzcyAtLSBIZWxwRm9ybWF0dGVyIGNsYXNzIGZvciBwcmludGluZyBoZWxwIG1lc3NhZ2VzCisgICAgICAgIC0gcHJlZml4X2NoYXJzIC0tIENoYXJhY3RlcnMgdGhhdCBwcmVmaXggb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgIC0gZnJvbWZpbGVfcHJlZml4X2NoYXJzIC0tIENoYXJhY3RlcnMgdGhhdCBwcmVmaXggZmlsZXMgY29udGFpbmluZworICAgICAgICAgICAgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgLSBhcmd1bWVudF9kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgYXJndW1lbnRzCisgICAgICAgIC0gY29uZmxpY3RfaGFuZGxlciAtLSBTdHJpbmcgaW5kaWNhdGluZyBob3cgdG8gaGFuZGxlIGNvbmZsaWN0cworICAgICAgICAtIGFkZF9oZWxwIC0tIEFkZCBhIC1oLy1oZWxwIG9wdGlvbgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIHByb2c9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdXNhZ2U9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXBpbG9nPU5vbmUsCisgICAgICAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGFyZW50cz1bXSwKKyAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPUhlbHBGb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgIHByZWZpeF9jaGFycz0nLScsCisgICAgICAgICAgICAgICAgIGZyb21maWxlX3ByZWZpeF9jaGFycz1Ob25lLAorICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9J2Vycm9yJywKKyAgICAgICAgICAgICAgICAgYWRkX2hlbHA9VHJ1ZSk6CisKKyAgICAgICAgaWYgdmVyc2lvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiIiJUaGUgInZlcnNpb24iIGFyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIGRlcHJlY2F0ZWQuICIiIgorICAgICAgICAgICAgICAgICIiIlBsZWFzZSB1c2UgIiIiCisgICAgICAgICAgICAgICAgIiIiImFkZF9hcmd1bWVudCguLi4sIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249Ik4iLCAuLi4pIiAiIiIKKyAgICAgICAgICAgICAgICAiIiJpbnN0ZWFkIiIiLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgc3VwZXJpbml0ID0gc3VwZXIoQXJndW1lbnRQYXJzZXIsIHNlbGYpLl9faW5pdF9fCisgICAgICAgIHN1cGVyaW5pdChkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgIHByZWZpeF9jaGFycz1wcmVmaXhfY2hhcnMsCisgICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0PWFyZ3VtZW50X2RlZmF1bHQsCisgICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyPWNvbmZsaWN0X2hhbmRsZXIpCisKKyAgICAgICAgIyBkZWZhdWx0IHNldHRpbmcgZm9yIHByb2cKKyAgICAgICAgaWYgcHJvZyBpcyBOb25lOgorICAgICAgICAgICAgcHJvZyA9IF9vcy5wYXRoLmJhc2VuYW1lKF9zeXMuYXJndlswXSkKKworICAgICAgICBzZWxmLnByb2cgPSBwcm9nCisgICAgICAgIHNlbGYudXNhZ2UgPSB1c2FnZQorICAgICAgICBzZWxmLmVwaWxvZyA9IGVwaWxvZworICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYuZm9ybWF0dGVyX2NsYXNzID0gZm9ybWF0dGVyX2NsYXNzCisgICAgICAgIHNlbGYuZnJvbWZpbGVfcHJlZml4X2NoYXJzID0gZnJvbWZpbGVfcHJlZml4X2NoYXJzCisgICAgICAgIHNlbGYuYWRkX2hlbHAgPSBhZGRfaGVscAorCisgICAgICAgIGFkZF9ncm91cCA9IHNlbGYuYWRkX2FyZ3VtZW50X2dyb3VwCisgICAgICAgIHNlbGYuX3Bvc2l0aW9uYWxzID0gYWRkX2dyb3VwKF8oJ3Bvc2l0aW9uYWwgYXJndW1lbnRzJykpCisgICAgICAgIHNlbGYuX29wdGlvbmFscyA9IGFkZF9ncm91cChfKCdvcHRpb25hbCBhcmd1bWVudHMnKSkKKyAgICAgICAgc2VsZi5fc3VicGFyc2VycyA9IE5vbmUKKworICAgICAgICAjIHJlZ2lzdGVyIHR5cGVzCisgICAgICAgIGRlZiBpZGVudGl0eShzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICBzZWxmLnJlZ2lzdGVyKCd0eXBlJywgTm9uZSwgaWRlbnRpdHkpCisKKyAgICAgICAgIyBhZGQgaGVscCBhbmQgdmVyc2lvbiBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5CisgICAgICAgICMgKHVzaW5nIGV4cGxpY2l0IGRlZmF1bHQgdG8gb3ZlcnJpZGUgZ2xvYmFsIGFyZ3VtZW50X2RlZmF1bHQpCisgICAgICAgIGRlZmF1bHRfcHJlZml4ID0gJy0nIGlmICctJyBpbiBwcmVmaXhfY2hhcnMgZWxzZSBwcmVmaXhfY2hhcnNbMF0KKyAgICAgICAgaWYgc2VsZi5hZGRfaGVscDoKKyAgICAgICAgICAgIHNlbGYuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgIGRlZmF1bHRfcHJlZml4KydoJywgZGVmYXVsdF9wcmVmaXgqMisnaGVscCcsCisgICAgICAgICAgICAgICAgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1TVVBQUkVTUywKKyAgICAgICAgICAgICAgICBoZWxwPV8oJ3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKSkKKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uOgorICAgICAgICAgICAgc2VsZi5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgZGVmYXVsdF9wcmVmaXgrJ3YnLCBkZWZhdWx0X3ByZWZpeCoyKyd2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICBhY3Rpb249J3ZlcnNpb24nLCBkZWZhdWx0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgIHZlcnNpb249c2VsZi52ZXJzaW9uLAorICAgICAgICAgICAgICAgIGhlbHA9Xygic2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQiKSkKKworICAgICAgICAjIGFkZCBwYXJlbnQgYXJndW1lbnRzIGFuZCBkZWZhdWx0cworICAgICAgICBmb3IgcGFyZW50IGluIHBhcmVudHM6CisgICAgICAgICAgICBzZWxmLl9hZGRfY29udGFpbmVyX2FjdGlvbnMocGFyZW50KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlZmF1bHRzID0gcGFyZW50Ll9kZWZhdWx0cworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdHMudXBkYXRlKGRlZmF1bHRzKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgUHJldHR5IF9fcmVwcl9fIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIF9nZXRfa3dhcmdzKHNlbGYpOgorICAgICAgICBuYW1lcyA9IFsKKyAgICAgICAgICAgICdwcm9nJywKKyAgICAgICAgICAgICd1c2FnZScsCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nLAorICAgICAgICAgICAgJ3ZlcnNpb24nLAorICAgICAgICAgICAgJ2Zvcm1hdHRlcl9jbGFzcycsCisgICAgICAgICAgICAnY29uZmxpY3RfaGFuZGxlcicsCisgICAgICAgICAgICAnYWRkX2hlbHAnLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBbKG5hbWUsIGdldGF0dHIoc2VsZiwgbmFtZSkpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBPcHRpb25hbC9Qb3NpdGlvbmFsIGFkZGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIGFkZF9zdWJwYXJzZXJzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5fc3VicGFyc2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoXygnY2Fubm90IGhhdmUgbXVsdGlwbGUgc3VicGFyc2VyIGFyZ3VtZW50cycpKQorCisgICAgICAgICMgYWRkIHRoZSBwYXJzZXIgY2xhc3MgdG8gdGhlIGFyZ3VtZW50cyBpZiBpdCdzIG5vdCBwcmVzZW50CisgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwYXJzZXJfY2xhc3MnLCB0eXBlKHNlbGYpKQorCisgICAgICAgIGlmICd0aXRsZScgaW4ga3dhcmdzIG9yICdkZXNjcmlwdGlvbicgaW4ga3dhcmdzOgorICAgICAgICAgICAgdGl0bGUgPSBfKGt3YXJncy5wb3AoJ3RpdGxlJywgJ3N1YmNvbW1hbmRzJykpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF8oa3dhcmdzLnBvcCgnZGVzY3JpcHRpb24nLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuX3N1YnBhcnNlcnMgPSBzZWxmLmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdWJwYXJzZXJzID0gc2VsZi5fcG9zaXRpb25hbHMKKworICAgICAgICAjIHByb2cgZGVmYXVsdHMgdG8gdGhlIHVzYWdlIG1lc3NhZ2Ugb2YgdGhpcyBwYXJzZXIsIHNraXBwaW5nCisgICAgICAgICMgb3B0aW9uYWwgYXJndW1lbnRzIGFuZCB3aXRoIG5vICJ1c2FnZToiIHByZWZpeAorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdwcm9nJykgaXMgTm9uZToKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2dldF9mb3JtYXR0ZXIoKQorICAgICAgICAgICAgcG9zaXRpb25hbHMgPSBzZWxmLl9nZXRfcG9zaXRpb25hbF9hY3Rpb25zKCkKKyAgICAgICAgICAgIGdyb3VwcyA9IHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMKKyAgICAgICAgICAgIGZvcm1hdHRlci5hZGRfdXNhZ2Uoc2VsZi51c2FnZSwgcG9zaXRpb25hbHMsIGdyb3VwcywgJycpCisgICAgICAgICAgICBrd2FyZ3NbJ3Byb2cnXSA9IGZvcm1hdHRlci5mb3JtYXRfaGVscCgpLnN0cmlwKCkKKworICAgICAgICAjIGNyZWF0ZSB0aGUgcGFyc2VycyBhY3Rpb24gYW5kIGFkZCBpdCB0byB0aGUgcG9zaXRpb25hbHMgbGlzdAorICAgICAgICBwYXJzZXJzX2NsYXNzID0gc2VsZi5fcG9wX2FjdGlvbl9jbGFzcyhrd2FyZ3MsICdwYXJzZXJzJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2Vyc19jbGFzcyhvcHRpb25fc3RyaW5ncz1bXSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3N1YnBhcnNlcnMuX2FkZF9hY3Rpb24oYWN0aW9uKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjcmVhdGVkIHBhcnNlcnMgYWN0aW9uCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBfYWRkX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBzZWxmLl9vcHRpb25hbHMuX2FkZF9hY3Rpb24oYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25hbHMuX2FkZF9hY3Rpb24oYWN0aW9uKQorICAgICAgICByZXR1cm4gYWN0aW9uCisKKyAgICBkZWYgX2dldF9vcHRpb25hbF9hY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gW2FjdGlvbgorICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9ucworICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5vcHRpb25fc3RyaW5nc10KKworICAgIGRlZiBfZ2V0X3Bvc2l0aW9uYWxfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFthY3Rpb24KKyAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzXQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBDb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2luZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJncz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgIGFyZ3MsIGFyZ3YgPSBzZWxmLnBhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICBpZiBhcmd2OgorICAgICAgICAgICAgbXNnID0gXygndW5yZWNvZ25pemVkIGFyZ3VtZW50czogJXMnKQorICAgICAgICAgICAgc2VsZi5lcnJvcihtc2cgJSAnICcuam9pbihhcmd2KSkKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIGRlZiBwYXJzZV9rbm93bl9hcmdzKHNlbGYsIGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAjIGFyZ3MgZGVmYXVsdCB0byB0aGUgc3lzdGVtIGFyZ3MKKyAgICAgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IF9zeXMuYXJndlsxOl0KKworICAgICAgICAjIGRlZmF1bHQgTmFtZXNwYWNlIGJ1aWx0IGZyb20gcGFyc2VyIGRlZmF1bHRzCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgbmFtZXNwYWNlID0gTmFtZXNwYWNlKCkKKworICAgICAgICAjIGFkZCBhbnkgYWN0aW9uIGRlZmF1bHRzIHRoYXQgYXJlbid0IHByZXNlbnQKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlc3QgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG5hbWVzcGFjZSwgYWN0aW9uLmRlc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24uZGVmYXVsdCBpcyBub3QgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWN0aW9uLmRlZmF1bHQsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxmLl9nZXRfdmFsdWUoYWN0aW9uLCBkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIGFjdGlvbi5kZXN0LCBkZWZhdWx0KQorCisgICAgICAgICMgYWRkIGFueSBwYXJzZXIgZGVmYXVsdHMgdGhhdCBhcmVuJ3QgcHJlc2VudAorICAgICAgICBmb3IgZGVzdCBpbiBzZWxmLl9kZWZhdWx0czoKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG5hbWVzcGFjZSwgZGVzdCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIGRlc3QsIHNlbGYuX2RlZmF1bHRzW2Rlc3RdKQorCisgICAgICAgICMgcGFyc2UgdGhlIGFyZ3VtZW50cyBhbmQgZXhpdCBpZiB0aGVyZSBhcmUgYW55IGVycm9ycworICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lc3BhY2UsIGFyZ3MgPSBzZWxmLl9wYXJzZV9rbm93bl9hcmdzKGFyZ3MsIG5hbWVzcGFjZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIobmFtZXNwYWNlLCBfVU5SRUNPR05JWkVEX0FSR1NfQVRUUik6CisgICAgICAgICAgICAgICAgYXJncy5leHRlbmQoZ2V0YXR0cihuYW1lc3BhY2UsIF9VTlJFQ09HTklaRURfQVJHU19BVFRSKSkKKyAgICAgICAgICAgICAgICBkZWxhdHRyKG5hbWVzcGFjZSwgX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIpCisgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlLCBhcmdzCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudEVycm9yOgorICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBzZWxmLmVycm9yKHN0cihlcnIpKQorCisgICAgZGVmIF9wYXJzZV9rbm93bl9hcmdzKHNlbGYsIGFyZ19zdHJpbmdzLCBuYW1lc3BhY2UpOgorICAgICAgICAjIHJlcGxhY2UgYXJnIHN0cmluZ3MgdGhhdCBhcmUgZmlsZSByZWZlcmVuY2VzCisgICAgICAgIGlmIHNlbGYuZnJvbWZpbGVfcHJlZml4X2NoYXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXJnX3N0cmluZ3MgPSBzZWxmLl9yZWFkX2FyZ3NfZnJvbV9maWxlcyhhcmdfc3RyaW5ncykKKworICAgICAgICAjIG1hcCBhbGwgbXV0dWFsbHkgZXhjbHVzaXZlIGFyZ3VtZW50cyB0byB0aGUgb3RoZXIgYXJndW1lbnRzCisgICAgICAgICMgdGhleSBjYW4ndCBvY2N1ciB3aXRoCisgICAgICAgIGFjdGlvbl9jb25mbGljdHMgPSB7fQorICAgICAgICBmb3IgbXV0ZXhfZ3JvdXAgaW4gc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwczoKKyAgICAgICAgICAgIGdyb3VwX2FjdGlvbnMgPSBtdXRleF9ncm91cC5fZ3JvdXBfYWN0aW9ucworICAgICAgICAgICAgZm9yIGksIG11dGV4X2FjdGlvbiBpbiBlbnVtZXJhdGUobXV0ZXhfZ3JvdXAuX2dyb3VwX2FjdGlvbnMpOgorICAgICAgICAgICAgICAgIGNvbmZsaWN0cyA9IGFjdGlvbl9jb25mbGljdHMuc2V0ZGVmYXVsdChtdXRleF9hY3Rpb24sIFtdKQorICAgICAgICAgICAgICAgIGNvbmZsaWN0cy5leHRlbmQoZ3JvdXBfYWN0aW9uc1s6aV0pCisgICAgICAgICAgICAgICAgY29uZmxpY3RzLmV4dGVuZChncm91cF9hY3Rpb25zW2kgKyAxOl0pCisKKyAgICAgICAgIyBmaW5kIGFsbCBvcHRpb24gaW5kaWNlcywgYW5kIGRldGVybWluZSB0aGUgYXJnX3N0cmluZ19wYXR0ZXJuCisgICAgICAgICMgd2hpY2ggaGFzIGFuICdPJyBpZiB0aGVyZSBpcyBhbiBvcHRpb24gYXQgYW4gaW5kZXgsCisgICAgICAgICMgYW4gJ0EnIGlmIHRoZXJlIGlzIGFuIGFyZ3VtZW50LCBvciBhICctJyBpZiB0aGVyZSBpcyBhICctLScKKyAgICAgICAgb3B0aW9uX3N0cmluZ19pbmRpY2VzID0ge30KKyAgICAgICAgYXJnX3N0cmluZ19wYXR0ZXJuX3BhcnRzID0gW10KKyAgICAgICAgYXJnX3N0cmluZ3NfaXRlciA9IGl0ZXIoYXJnX3N0cmluZ3MpCisgICAgICAgIGZvciBpLCBhcmdfc3RyaW5nIGluIGVudW1lcmF0ZShhcmdfc3RyaW5nc19pdGVyKToKKworICAgICAgICAgICAgIyBhbGwgYXJncyBhZnRlciAtLSBhcmUgbm9uLW9wdGlvbnMKKyAgICAgICAgICAgIGlmIGFyZ19zdHJpbmcgPT0gJy0tJzoKKyAgICAgICAgICAgICAgICBhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMuYXBwZW5kKCctJykKKyAgICAgICAgICAgICAgICBmb3IgYXJnX3N0cmluZyBpbiBhcmdfc3RyaW5nc19pdGVyOgorICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMuYXBwZW5kKCdBJykKKworICAgICAgICAgICAgIyBvdGhlcndpc2UsIGFkZCB0aGUgYXJnIHRvIHRoZSBhcmcgc3RyaW5ncworICAgICAgICAgICAgIyBhbmQgbm90ZSB0aGUgaW5kZXggaWYgaXQgd2FzIGFuIG9wdGlvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25fdHVwbGUgPSBzZWxmLl9wYXJzZV9vcHRpb25hbChhcmdfc3RyaW5nKQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbl90dXBsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gJ0EnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ19pbmRpY2VzW2ldID0gb3B0aW9uX3R1cGxlCisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnTycKKyAgICAgICAgICAgICAgICBhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMuYXBwZW5kKHBhdHRlcm4pCisKKyAgICAgICAgIyBqb2luIHRoZSBwaWVjZXMgdG9nZXRoZXIgdG8gZm9ybSB0aGUgcGF0dGVybgorICAgICAgICBhcmdfc3RyaW5nc19wYXR0ZXJuID0gJycuam9pbihhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMpCisKKyAgICAgICAgIyBjb252ZXJ0cyBhcmcgc3RyaW5ncyB0byB0aGUgYXBwcm9wcmlhdGUgYW5kIHRoZW4gdGFrZXMgdGhlIGFjdGlvbgorICAgICAgICBzZWVuX2FjdGlvbnMgPSBzZXQoKQorICAgICAgICBzZWVuX25vbl9kZWZhdWx0X2FjdGlvbnMgPSBzZXQoKQorCisgICAgICAgIGRlZiB0YWtlX2FjdGlvbihhY3Rpb24sIGFyZ3VtZW50X3N0cmluZ3MsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZWVuX2FjdGlvbnMuYWRkKGFjdGlvbikKKyAgICAgICAgICAgIGFyZ3VtZW50X3ZhbHVlcyA9IHNlbGYuX2dldF92YWx1ZXMoYWN0aW9uLCBhcmd1bWVudF9zdHJpbmdzKQorCisgICAgICAgICAgICAjIGVycm9yIGlmIHRoaXMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgd2l0aCBvdGhlciBwcmV2aW91c2x5CisgICAgICAgICAgICAjIHNlZW4gYXJndW1lbnRzLCBhc3N1bWluZyB0aGF0IGFjdGlvbnMgdGhhdCB1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICMgdmFsdWUgZG9uJ3QgcmVhbGx5IGNvdW50IGFzICJwcmVzZW50IgorICAgICAgICAgICAgaWYgYXJndW1lbnRfdmFsdWVzIGlzIG5vdCBhY3Rpb24uZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBzZWVuX25vbl9kZWZhdWx0X2FjdGlvbnMuYWRkKGFjdGlvbikKKyAgICAgICAgICAgICAgICBmb3IgY29uZmxpY3RfYWN0aW9uIGluIGFjdGlvbl9jb25mbGljdHMuZ2V0KGFjdGlvbiwgW10pOgorICAgICAgICAgICAgICAgICAgICBpZiBjb25mbGljdF9hY3Rpb24gaW4gc2Vlbl9ub25fZGVmYXVsdF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gXygnbm90IGFsbG93ZWQgd2l0aCBhcmd1bWVudCAlcycpCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25fbmFtZSA9IF9nZXRfYWN0aW9uX25hbWUoY29uZmxpY3RfYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZyAlIGFjdGlvbl9uYW1lKQorCisgICAgICAgICAgICAjIHRha2UgdGhlIGFjdGlvbiBpZiB3ZSBkaWRuJ3QgcmVjZWl2ZSBhIFNVUFBSRVNTIHZhbHVlCisgICAgICAgICAgICAjIChlLmcuIGZyb20gYSBkZWZhdWx0KQorICAgICAgICAgICAgaWYgYXJndW1lbnRfdmFsdWVzIGlzIG5vdCBTVVBQUkVTUzoKKyAgICAgICAgICAgICAgICBhY3Rpb24oc2VsZiwgbmFtZXNwYWNlLCBhcmd1bWVudF92YWx1ZXMsIG9wdGlvbl9zdHJpbmcpCisKKyAgICAgICAgIyBmdW5jdGlvbiB0byBjb252ZXJ0IGFyZ19zdHJpbmdzIGludG8gYW4gb3B0aW9uYWwgYWN0aW9uCisgICAgICAgIGRlZiBjb25zdW1lX29wdGlvbmFsKHN0YXJ0X2luZGV4KToKKworICAgICAgICAgICAgIyBnZXQgdGhlIG9wdGlvbmFsIGlkZW50aWZpZWQgYXQgdGhpcyBpbmRleAorICAgICAgICAgICAgb3B0aW9uX3R1cGxlID0gb3B0aW9uX3N0cmluZ19pbmRpY2VzW3N0YXJ0X2luZGV4XQorICAgICAgICAgICAgYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcgPSBvcHRpb25fdHVwbGUKKworICAgICAgICAgICAgIyBpZGVudGlmeSBhZGRpdGlvbmFsIG9wdGlvbmFscyBpbiB0aGUgc2FtZSBhcmcgc3RyaW5nCisgICAgICAgICAgICAjIChlLmcuIC14eXogaXMgdGhlIHNhbWUgYXMgLXggLXkgLXogaWYgbm8gYXJncyBhcmUgcmVxdWlyZWQpCisgICAgICAgICAgICBtYXRjaF9hcmd1bWVudCA9IHNlbGYuX21hdGNoX2FyZ3VtZW50CisgICAgICAgICAgICBhY3Rpb25fdHVwbGVzID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisKKyAgICAgICAgICAgICAgICAjIGlmIHdlIGZvdW5kIG5vIG9wdGlvbmFsIGFjdGlvbiwgc2tpcCBpdAorICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBleHRyYXMuYXBwZW5kKGFyZ19zdHJpbmdzW3N0YXJ0X2luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0X2luZGV4ICsgMQorCisgICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhbiBleHBsaWNpdCBhcmd1bWVudCwgdHJ5IHRvIG1hdGNoIHRoZQorICAgICAgICAgICAgICAgICMgb3B0aW9uYWwncyBzdHJpbmcgYXJndW1lbnRzIHRvIG9ubHkgdGhpcworICAgICAgICAgICAgICAgIGlmIGV4cGxpY2l0X2FyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYXJnX2NvdW50ID0gbWF0Y2hfYXJndW1lbnQoYWN0aW9uLCAnQScpCisKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgYWN0aW9uIGlzIGEgc2luZ2xlLWRhc2ggb3B0aW9uIGFuZCB0YWtlcyBubworICAgICAgICAgICAgICAgICAgICAjIGFyZ3VtZW50cywgdHJ5IHRvIHBhcnNlIG1vcmUgc2luZ2xlLWRhc2ggb3B0aW9ucyBvdXQKKyAgICAgICAgICAgICAgICAgICAgIyBvZiB0aGUgdGFpbCBvZiB0aGUgb3B0aW9uIHN0cmluZworICAgICAgICAgICAgICAgICAgICBjaGFycyA9IHNlbGYucHJlZml4X2NoYXJzCisgICAgICAgICAgICAgICAgICAgIGlmIGFyZ19jb3VudCA9PSAwIGFuZCBvcHRpb25fc3RyaW5nWzFdIG5vdCBpbiBjaGFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl90dXBsZXMuYXBwZW5kKChhY3Rpb24sIFtdLCBvcHRpb25fc3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBvcHRpb25fc3RyaW5nWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nID0gY2hhciArIGV4cGxpY2l0X2FyZ1swXQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2V4cGxpY2l0X2FyZyA9IGV4cGxpY2l0X2FyZ1sxOl0gb3IgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxzX21hcCA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyBpbiBvcHRpb25hbHNfbWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IG9wdGlvbmFsc19tYXBbb3B0aW9uX3N0cmluZ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsaWNpdF9hcmcgPSBuZXdfZXhwbGljaXRfYXJnCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF8oJ2lnbm9yZWQgZXhwbGljaXQgYXJndW1lbnQgJXInKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSBleHBsaWNpdF9hcmcpCisKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgYWN0aW9uIGV4cGVjdCBleGFjdGx5IG9uZSBhcmd1bWVudCwgd2UndmUKKyAgICAgICAgICAgICAgICAgICAgIyBzdWNjZXNzZnVsbHkgbWF0Y2hlZCB0aGUgb3B0aW9uOyBleGl0IHRoZSBsb29wCisgICAgICAgICAgICAgICAgICAgIGVsaWYgYXJnX2NvdW50ID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gc3RhcnRfaW5kZXggKyAxCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2V4cGxpY2l0X2FyZ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl90dXBsZXMuYXBwZW5kKChhY3Rpb24sIGFyZ3MsIG9wdGlvbl9zdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICAgICAjIGVycm9yIGlmIGEgZG91YmxlLWRhc2ggb3B0aW9uIGRpZCBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGV4cGxpY2l0IGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfKCdpZ25vcmVkIGV4cGxpY2l0IGFyZ3VtZW50ICVyJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSBleHBsaWNpdF9hcmcpCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZXJlIGlzIG5vIGV4cGxpY2l0IGFyZ3VtZW50LCB0cnkgdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgIyBvcHRpb25hbCdzIHN0cmluZyBhcmd1bWVudHMgd2l0aCB0aGUgZm9sbG93aW5nIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAjIGlmIHN1Y2Nlc3NmdWwsIGV4aXQgdGhlIGxvb3AKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0X2luZGV4ICsgMQorICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZF9wYXR0ZXJucyA9IGFyZ19zdHJpbmdzX3BhdHRlcm5bc3RhcnQ6XQorICAgICAgICAgICAgICAgICAgICBhcmdfY291bnQgPSBtYXRjaF9hcmd1bWVudChhY3Rpb24sIHNlbGVjdGVkX3BhdHRlcm5zKQorICAgICAgICAgICAgICAgICAgICBzdG9wID0gc3RhcnQgKyBhcmdfY291bnQKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ19zdHJpbmdzW3N0YXJ0OnN0b3BdCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbl90dXBsZXMuYXBwZW5kKChhY3Rpb24sIGFyZ3MsIG9wdGlvbl9zdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIGFkZCB0aGUgT3B0aW9uYWwgdG8gdGhlIGxpc3QgYW5kIHJldHVybiB0aGUgaW5kZXggYXQgd2hpY2gKKyAgICAgICAgICAgICMgdGhlIE9wdGlvbmFsJ3Mgc3RyaW5nIGFyZ3Mgc3RvcHBlZAorICAgICAgICAgICAgYXNzZXJ0IGFjdGlvbl90dXBsZXMKKyAgICAgICAgICAgIGZvciBhY3Rpb24sIGFyZ3MsIG9wdGlvbl9zdHJpbmcgaW4gYWN0aW9uX3R1cGxlczoKKyAgICAgICAgICAgICAgICB0YWtlX2FjdGlvbihhY3Rpb24sIGFyZ3MsIG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gc3RvcAorCisgICAgICAgICMgdGhlIGxpc3Qgb2YgUG9zaXRpb25hbHMgbGVmdCB0byBiZSBwYXJzZWQ7IHRoaXMgaXMgbW9kaWZpZWQKKyAgICAgICAgIyBieSBjb25zdW1lX3Bvc2l0aW9uYWxzKCkKKyAgICAgICAgcG9zaXRpb25hbHMgPSBzZWxmLl9nZXRfcG9zaXRpb25hbF9hY3Rpb25zKCkKKworICAgICAgICAjIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYXJnX3N0cmluZ3MgaW50byBwb3NpdGlvbmFsIGFjdGlvbnMKKyAgICAgICAgZGVmIGNvbnN1bWVfcG9zaXRpb25hbHMoc3RhcnRfaW5kZXgpOgorICAgICAgICAgICAgIyBtYXRjaCBhcyBtYW55IFBvc2l0aW9uYWxzIGFzIHBvc3NpYmxlCisgICAgICAgICAgICBtYXRjaF9wYXJ0aWFsID0gc2VsZi5fbWF0Y2hfYXJndW1lbnRzX3BhcnRpYWwKKyAgICAgICAgICAgIHNlbGVjdGVkX3BhdHRlcm4gPSBhcmdfc3RyaW5nc19wYXR0ZXJuW3N0YXJ0X2luZGV4Ol0KKyAgICAgICAgICAgIGFyZ19jb3VudHMgPSBtYXRjaF9wYXJ0aWFsKHBvc2l0aW9uYWxzLCBzZWxlY3RlZF9wYXR0ZXJuKQorCisgICAgICAgICAgICAjIHNsaWNlIG9mZiB0aGUgYXBwcm9wcmlhdGUgYXJnIHN0cmluZ3MgZm9yIGVhY2ggUG9zaXRpb25hbAorICAgICAgICAgICAgIyBhbmQgYWRkIHRoZSBQb3NpdGlvbmFsIGFuZCBpdHMgYXJncyB0byB0aGUgbGlzdAorICAgICAgICAgICAgZm9yIGFjdGlvbiwgYXJnX2NvdW50IGluIHppcChwb3NpdGlvbmFscywgYXJnX2NvdW50cyk6CisgICAgICAgICAgICAgICAgYXJncyA9IGFyZ19zdHJpbmdzW3N0YXJ0X2luZGV4OiBzdGFydF9pbmRleCArIGFyZ19jb3VudF0KKyAgICAgICAgICAgICAgICBzdGFydF9pbmRleCArPSBhcmdfY291bnQKKyAgICAgICAgICAgICAgICB0YWtlX2FjdGlvbihhY3Rpb24sIGFyZ3MpCisKKyAgICAgICAgICAgICMgc2xpY2Ugb2ZmIHRoZSBQb3NpdGlvbmFscyB0aGF0IHdlIGp1c3QgcGFyc2VkIGFuZCByZXR1cm4gdGhlCisgICAgICAgICAgICAjIGluZGV4IGF0IHdoaWNoIHRoZSBQb3NpdGlvbmFscycgc3RyaW5nIGFyZ3Mgc3RvcHBlZAorICAgICAgICAgICAgcG9zaXRpb25hbHNbOl0gPSBwb3NpdGlvbmFsc1tsZW4oYXJnX2NvdW50cyk6XQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0X2luZGV4CisKKyAgICAgICAgIyBjb25zdW1lIFBvc2l0aW9uYWxzIGFuZCBPcHRpb25hbHMgYWx0ZXJuYXRlbHksIHVudGlsIHdlIGhhdmUKKyAgICAgICAgIyBwYXNzZWQgdGhlIGxhc3Qgb3B0aW9uIHN0cmluZworICAgICAgICBleHRyYXMgPSBbXQorICAgICAgICBzdGFydF9pbmRleCA9IDAKKyAgICAgICAgaWYgb3B0aW9uX3N0cmluZ19pbmRpY2VzOgorICAgICAgICAgICAgbWF4X29wdGlvbl9zdHJpbmdfaW5kZXggPSBtYXgob3B0aW9uX3N0cmluZ19pbmRpY2VzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWF4X29wdGlvbl9zdHJpbmdfaW5kZXggPSAtMQorICAgICAgICB3aGlsZSBzdGFydF9pbmRleCA8PSBtYXhfb3B0aW9uX3N0cmluZ19pbmRleDoKKworICAgICAgICAgICAgIyBjb25zdW1lIGFueSBQb3NpdGlvbmFscyBwcmVjZWRpbmcgdGhlIG5leHQgb3B0aW9uCisgICAgICAgICAgICBuZXh0X29wdGlvbl9zdHJpbmdfaW5kZXggPSBtaW4oWworICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICAgICAgZm9yIGluZGV4IGluIG9wdGlvbl9zdHJpbmdfaW5kaWNlcworICAgICAgICAgICAgICAgIGlmIGluZGV4ID49IHN0YXJ0X2luZGV4XSkKKyAgICAgICAgICAgIGlmIHN0YXJ0X2luZGV4ICE9IG5leHRfb3B0aW9uX3N0cmluZ19pbmRleDoKKyAgICAgICAgICAgICAgICBwb3NpdGlvbmFsc19lbmRfaW5kZXggPSBjb25zdW1lX3Bvc2l0aW9uYWxzKHN0YXJ0X2luZGV4KQorCisgICAgICAgICAgICAgICAgIyBvbmx5IHRyeSB0byBwYXJzZSB0aGUgbmV4dCBvcHRpb25hbCBpZiB3ZSBkaWRuJ3QgY29uc3VtZQorICAgICAgICAgICAgICAgICMgdGhlIG9wdGlvbiBzdHJpbmcgZHVyaW5nIHRoZSBwb3NpdGlvbmFscyBwYXJzaW5nCisgICAgICAgICAgICAgICAgaWYgcG9zaXRpb25hbHNfZW5kX2luZGV4ID4gc3RhcnRfaW5kZXg6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gcG9zaXRpb25hbHNfZW5kX2luZGV4CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBwb3NpdGlvbmFsc19lbmRfaW5kZXgKKworICAgICAgICAgICAgIyBpZiB3ZSBjb25zdW1lZCBhbGwgdGhlIHBvc2l0aW9uYWxzIHdlIGNvdWxkIGFuZCB3ZSdyZSBub3QKKyAgICAgICAgICAgICMgYXQgdGhlIGluZGV4IG9mIGFuIG9wdGlvbiBzdHJpbmcsIHRoZXJlIHdlcmUgZXh0cmEgYXJndW1lbnRzCisgICAgICAgICAgICBpZiBzdGFydF9pbmRleCBub3QgaW4gb3B0aW9uX3N0cmluZ19pbmRpY2VzOgorICAgICAgICAgICAgICAgIHN0cmluZ3MgPSBhcmdfc3RyaW5nc1tzdGFydF9pbmRleDpuZXh0X29wdGlvbl9zdHJpbmdfaW5kZXhdCisgICAgICAgICAgICAgICAgZXh0cmFzLmV4dGVuZChzdHJpbmdzKQorICAgICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gbmV4dF9vcHRpb25fc3RyaW5nX2luZGV4CisKKyAgICAgICAgICAgICMgY29uc3VtZSB0aGUgbmV4dCBvcHRpb25hbCBhbmQgYW55IGFyZ3VtZW50cyBmb3IgaXQKKyAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gY29uc3VtZV9vcHRpb25hbChzdGFydF9pbmRleCkKKworICAgICAgICAjIGNvbnN1bWUgYW55IHBvc2l0aW9uYWxzIGZvbGxvd2luZyB0aGUgbGFzdCBPcHRpb25hbAorICAgICAgICBzdG9wX2luZGV4ID0gY29uc3VtZV9wb3NpdGlvbmFscyhzdGFydF9pbmRleCkKKworICAgICAgICAjIGlmIHdlIGRpZG4ndCBjb25zdW1lIGFsbCB0aGUgYXJndW1lbnQgc3RyaW5ncywgdGhlcmUgd2VyZSBleHRyYXMKKyAgICAgICAgZXh0cmFzLmV4dGVuZChhcmdfc3RyaW5nc1tzdG9wX2luZGV4Ol0pCisKKyAgICAgICAgIyBpZiB3ZSBkaWRuJ3QgdXNlIGFsbCB0aGUgUG9zaXRpb25hbCBvYmplY3RzLCB0aGVyZSB3ZXJlIHRvbyBmZXcKKyAgICAgICAgIyBhcmcgc3RyaW5ncyBzdXBwbGllZC4KKyAgICAgICAgaWYgcG9zaXRpb25hbHM6CisgICAgICAgICAgICBzZWxmLmVycm9yKF8oJ3RvbyBmZXcgYXJndW1lbnRzJykpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgYWxsIHJlcXVpcmVkIGFjdGlvbnMgd2VyZSBwcmVzZW50CisgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9uczoKKyAgICAgICAgICAgIGlmIGFjdGlvbi5yZXF1aXJlZDoKKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24gbm90IGluIHNlZW5fYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF9nZXRfYWN0aW9uX25hbWUoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKF8oJ2FyZ3VtZW50ICVzIGlzIHJlcXVpcmVkJykgJSBuYW1lKQorCisgICAgICAgICMgbWFrZSBzdXJlIGFsbCByZXF1aXJlZCBncm91cHMgaGFkIG9uZSBvcHRpb24gcHJlc2VudAorICAgICAgICBmb3IgZ3JvdXAgaW4gc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwczoKKyAgICAgICAgICAgIGlmIGdyb3VwLnJlcXVpcmVkOgorICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gZ3JvdXAuX2dyb3VwX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBpbiBzZWVuX25vbl9kZWZhdWx0X2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgIyBpZiBubyBhY3Rpb25zIHdlcmUgdXNlZCwgcmVwb3J0IHRoZSBlcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzID0gW19nZXRfYWN0aW9uX25hbWUoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGdyb3VwLl9ncm91cF9hY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5oZWxwIGlzIG5vdCBTVVBQUkVTU10KKyAgICAgICAgICAgICAgICAgICAgbXNnID0gXygnb25lIG9mIHRoZSBhcmd1bWVudHMgJXMgaXMgcmVxdWlyZWQnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKG1zZyAlICcgJy5qb2luKG5hbWVzKSkKKworICAgICAgICAjIHJldHVybiB0aGUgdXBkYXRlZCBuYW1lc3BhY2UgYW5kIHRoZSBleHRyYSBhcmd1bWVudHMKKyAgICAgICAgcmV0dXJuIG5hbWVzcGFjZSwgZXh0cmFzCisKKyAgICBkZWYgX3JlYWRfYXJnc19mcm9tX2ZpbGVzKHNlbGYsIGFyZ19zdHJpbmdzKToKKyAgICAgICAgIyBleHBhbmQgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzCisgICAgICAgIG5ld19hcmdfc3RyaW5ncyA9IFtdCisgICAgICAgIGZvciBhcmdfc3RyaW5nIGluIGFyZ19zdHJpbmdzOgorCisgICAgICAgICAgICAjIGZvciByZWd1bGFyIGFyZ3VtZW50cywganVzdCBhZGQgdGhlbSBiYWNrIGludG8gdGhlIGxpc3QKKyAgICAgICAgICAgIGlmIGFyZ19zdHJpbmdbMF0gbm90IGluIHNlbGYuZnJvbWZpbGVfcHJlZml4X2NoYXJzOgorICAgICAgICAgICAgICAgIG5ld19hcmdfc3RyaW5ncy5hcHBlbmQoYXJnX3N0cmluZykKKworICAgICAgICAgICAgIyByZXBsYWNlIGFyZ3VtZW50cyByZWZlcmVuY2luZyBmaWxlcyB3aXRoIHRoZSBmaWxlIGNvbnRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhcmdzX2ZpbGUgPSBvcGVuKGFyZ19zdHJpbmdbMTpdKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnX2xpbmUgaW4gYXJnc19maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhhcmdfbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzLmFwcGVuZChhcmcpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmV4dGVuZChhcmdfc3RyaW5ncykKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGVyciA9IF9zeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKHN0cihlcnIpKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBtb2RpZmllZCBhcmd1bWVudCBsaXN0CisgICAgICAgIHJldHVybiBuZXdfYXJnX3N0cmluZ3MKKworICAgIGRlZiBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3Moc2VsZiwgYXJnX2xpbmUpOgorICAgICAgICByZXR1cm4gW2FyZ19saW5lXQorCisgICAgZGVmIF9tYXRjaF9hcmd1bWVudChzZWxmLCBhY3Rpb24sIGFyZ19zdHJpbmdzX3BhdHRlcm4pOgorICAgICAgICAjIG1hdGNoIHRoZSBwYXR0ZXJuIGZvciB0aGlzIGFjdGlvbiB0byB0aGUgYXJnIHN0cmluZ3MKKyAgICAgICAgbmFyZ3NfcGF0dGVybiA9IHNlbGYuX2dldF9uYXJnc19wYXR0ZXJuKGFjdGlvbikKKyAgICAgICAgbWF0Y2ggPSBfcmUubWF0Y2gobmFyZ3NfcGF0dGVybiwgYXJnX3N0cmluZ3NfcGF0dGVybikKKworICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB3ZSB3ZXJlbid0IGFibGUgdG8gZmluZCBhIG1hdGNoCisgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICBuYXJnc19lcnJvcnMgPSB7CisgICAgICAgICAgICAgICAgTm9uZTogXygnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JyksCisgICAgICAgICAgICAgICAgT1BUSU9OQUw6IF8oJ2V4cGVjdGVkIGF0IG1vc3Qgb25lIGFyZ3VtZW50JyksCisgICAgICAgICAgICAgICAgT05FX09SX01PUkU6IF8oJ2V4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCcpLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdCA9IF8oJ2V4cGVjdGVkICVzIGFyZ3VtZW50KHMpJykgJSBhY3Rpb24ubmFyZ3MKKyAgICAgICAgICAgIG1zZyA9IG5hcmdzX2Vycm9ycy5nZXQoYWN0aW9uLm5hcmdzLCBkZWZhdWx0KQorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZykKKworICAgICAgICAjIHJldHVybiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBtYXRjaGVkCisgICAgICAgIHJldHVybiBsZW4obWF0Y2guZ3JvdXAoMSkpCisKKyAgICBkZWYgX21hdGNoX2FyZ3VtZW50c19wYXJ0aWFsKHNlbGYsIGFjdGlvbnMsIGFyZ19zdHJpbmdzX3BhdHRlcm4pOgorICAgICAgICAjIHByb2dyZXNzaXZlbHkgc2hvcnRlbiB0aGUgYWN0aW9ucyBsaXN0IGJ5IHNsaWNpbmcgb2ZmIHRoZQorICAgICAgICAjIGZpbmFsIGFjdGlvbnMgdW50aWwgd2UgZmluZCBhIG1hdGNoCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhY3Rpb25zKSwgMCwgLTEpOgorICAgICAgICAgICAgYWN0aW9uc19zbGljZSA9IGFjdGlvbnNbOmldCisgICAgICAgICAgICBwYXR0ZXJuID0gJycuam9pbihbc2VsZi5fZ2V0X25hcmdzX3BhdHRlcm4oYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uc19zbGljZV0pCisgICAgICAgICAgICBtYXRjaCA9IF9yZS5tYXRjaChwYXR0ZXJuLCBhcmdfc3RyaW5nc19wYXR0ZXJuKQorICAgICAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChbbGVuKHN0cmluZykgZm9yIHN0cmluZyBpbiBtYXRjaC5ncm91cHMoKV0pCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIHJldHVybiB0aGUgbGlzdCBvZiBhcmcgc3RyaW5nIGNvdW50cworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3BhcnNlX29wdGlvbmFsKHNlbGYsIGFyZ19zdHJpbmcpOgorICAgICAgICAjIGlmIGl0J3MgYW4gZW1wdHkgc3RyaW5nLCBpdCB3YXMgbWVhbnQgdG8gYmUgYSBwb3NpdGlvbmFsCisgICAgICAgIGlmIG5vdCBhcmdfc3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGlmIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHByZWZpeCwgaXQgd2FzIG1lYW50IHRvIGJlIHBvc2l0aW9uYWwKKyAgICAgICAgaWYgbm90IGFyZ19zdHJpbmdbMF0gaW4gc2VsZi5wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaWYgdGhlIG9wdGlvbiBzdHJpbmcgaXMgcHJlc2VudCBpbiB0aGUgcGFyc2VyLCByZXR1cm4gdGhlIGFjdGlvbgorICAgICAgICBpZiBhcmdfc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1thcmdfc3RyaW5nXQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbiwgYXJnX3N0cmluZywgTm9uZQorCisgICAgICAgICMgaWYgaXQncyBqdXN0IGEgc2luZ2xlIGNoYXJhY3RlciwgaXQgd2FzIG1lYW50IHRvIGJlIHBvc2l0aW9uYWwKKyAgICAgICAgaWYgbGVuKGFyZ19zdHJpbmcpID09IDE6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaWYgdGhlIG9wdGlvbiBzdHJpbmcgYmVmb3JlIHRoZSAiPSIgaXMgcHJlc2VudCwgcmV0dXJuIHRoZSBhY3Rpb24KKyAgICAgICAgaWYgJz0nIGluIGFyZ19zdHJpbmc6CisgICAgICAgICAgICBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcgPSBhcmdfc3RyaW5nLnNwbGl0KCc9JywgMSkKKyAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZworCisgICAgICAgICMgc2VhcmNoIHRocm91Z2ggYWxsIHBvc3NpYmxlIHByZWZpeGVzIG9mIHRoZSBvcHRpb24gc3RyaW5nCisgICAgICAgICMgYW5kIGFsbCBhY3Rpb25zIGluIHRoZSBwYXJzZXIgZm9yIHBvc3NpYmxlIGludGVycHJldGF0aW9ucworICAgICAgICBvcHRpb25fdHVwbGVzID0gc2VsZi5fZ2V0X29wdGlvbl90dXBsZXMoYXJnX3N0cmluZykKKworICAgICAgICAjIGlmIG11bHRpcGxlIGFjdGlvbnMgbWF0Y2gsIHRoZSBvcHRpb24gc3RyaW5nIHdhcyBhbWJpZ3VvdXMKKyAgICAgICAgaWYgbGVuKG9wdGlvbl90dXBsZXMpID4gMToKKyAgICAgICAgICAgIG9wdGlvbnMgPSAnLCAnLmpvaW4oW29wdGlvbl9zdHJpbmcKKyAgICAgICAgICAgICAgICBmb3IgYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcgaW4gb3B0aW9uX3R1cGxlc10pCisgICAgICAgICAgICB0dXAgPSBhcmdfc3RyaW5nLCBvcHRpb25zCisgICAgICAgICAgICBzZWxmLmVycm9yKF8oJ2FtYmlndW91cyBvcHRpb246ICVzIGNvdWxkIG1hdGNoICVzJykgJSB0dXApCisKKyAgICAgICAgIyBpZiBleGFjdGx5IG9uZSBhY3Rpb24gbWF0Y2hlZCwgdGhpcyBzZWdtZW50YXRpb24gaXMgZ29vZCwKKyAgICAgICAgIyBzbyByZXR1cm4gdGhlIHBhcnNlZCBhY3Rpb24KKyAgICAgICAgZWxpZiBsZW4ob3B0aW9uX3R1cGxlcykgPT0gMToKKyAgICAgICAgICAgIG9wdGlvbl90dXBsZSwgPSBvcHRpb25fdHVwbGVzCisgICAgICAgICAgICByZXR1cm4gb3B0aW9uX3R1cGxlCisKKyAgICAgICAgIyBpZiBpdCB3YXMgbm90IGZvdW5kIGFzIGFuIG9wdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgYSBuZWdhdGl2ZQorICAgICAgICAjIG51bWJlciwgaXQgd2FzIG1lYW50IHRvIGJlIHBvc2l0aW9uYWwKKyAgICAgICAgIyB1bmxlc3MgdGhlcmUgYXJlIG5lZ2F0aXZlLW51bWJlci1saWtlIG9wdGlvbnMKKyAgICAgICAgaWYgc2VsZi5fbmVnYXRpdmVfbnVtYmVyX21hdGNoZXIubWF0Y2goYXJnX3N0cmluZyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGlmIGl0IGNvbnRhaW5zIGEgc3BhY2UsIGl0IHdhcyBtZWFudCB0byBiZSBhIHBvc2l0aW9uYWwKKyAgICAgICAgaWYgJyAnIGluIGFyZ19zdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaXQgd2FzIG1lYW50IHRvIGJlIGFuIG9wdGlvbmFsIGJ1dCB0aGVyZSBpcyBubyBzdWNoIG9wdGlvbgorICAgICAgICAjIGluIHRoaXMgcGFyc2VyICh0aG91Z2ggaXQgbWlnaHQgYmUgYSB2YWxpZCBvcHRpb24gaW4gYSBzdWJwYXJzZXIpCisgICAgICAgIHJldHVybiBOb25lLCBhcmdfc3RyaW5nLCBOb25lCisKKyAgICBkZWYgX2dldF9vcHRpb25fdHVwbGVzKHNlbGYsIG9wdGlvbl9zdHJpbmcpOgorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgICMgb3B0aW9uIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCB0d28gcHJlZml4IGNoYXJhY3RlcnMgYXJlIG9ubHkKKyAgICAgICAgIyBzcGxpdCBhdCB0aGUgJz0nCisgICAgICAgIGNoYXJzID0gc2VsZi5wcmVmaXhfY2hhcnMKKyAgICAgICAgaWYgb3B0aW9uX3N0cmluZ1swXSBpbiBjaGFycyBhbmQgb3B0aW9uX3N0cmluZ1sxXSBpbiBjaGFyczoKKyAgICAgICAgICAgIGlmICc9JyBpbiBvcHRpb25fc3RyaW5nOgorICAgICAgICAgICAgICAgIG9wdGlvbl9wcmVmaXgsIGV4cGxpY2l0X2FyZyA9IG9wdGlvbl9zdHJpbmcuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25fcHJlZml4ID0gb3B0aW9uX3N0cmluZworICAgICAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgob3B0aW9uX3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgICAgICB0dXAgPSBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR1cCkKKworICAgICAgICAjIHNpbmdsZSBjaGFyYWN0ZXIgb3B0aW9ucyBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlaXIgYXJndW1lbnRzCisgICAgICAgICMgYnV0IG11bHRpcGxlIGNoYXJhY3RlciBvcHRpb25zIGFsd2F5cyBoYXZlIHRvIGhhdmUgdGhlaXIgYXJndW1lbnQKKyAgICAgICAgIyBzZXBhcmF0ZQorICAgICAgICBlbGlmIG9wdGlvbl9zdHJpbmdbMF0gaW4gY2hhcnMgYW5kIG9wdGlvbl9zdHJpbmdbMV0gbm90IGluIGNoYXJzOgorICAgICAgICAgICAgb3B0aW9uX3ByZWZpeCA9IG9wdGlvbl9zdHJpbmcKKyAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IE5vbmUKKyAgICAgICAgICAgIHNob3J0X29wdGlvbl9wcmVmaXggPSBvcHRpb25fc3RyaW5nWzoyXQorICAgICAgICAgICAgc2hvcnRfZXhwbGljaXRfYXJnID0gb3B0aW9uX3N0cmluZ1syOl0KKworICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcgPT0gc2hvcnRfb3B0aW9uX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddCisgICAgICAgICAgICAgICAgICAgIHR1cCA9IGFjdGlvbiwgb3B0aW9uX3N0cmluZywgc2hvcnRfZXhwbGljaXRfYXJnCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHVwKQorICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uX3N0cmluZy5zdGFydHN3aXRoKG9wdGlvbl9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbb3B0aW9uX3N0cmluZ10KKyAgICAgICAgICAgICAgICAgICAgdHVwID0gYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0dXApCisKKyAgICAgICAgIyBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lcnJvcihfKCd1bmV4cGVjdGVkIG9wdGlvbiBzdHJpbmc6ICVzJykgJSBvcHRpb25fc3RyaW5nKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjb2xsZWN0ZWQgb3B0aW9uIHR1cGxlcworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX2dldF9uYXJnc19wYXR0ZXJuKHNlbGYsIGFjdGlvbik6CisgICAgICAgICMgaW4gYWxsIGV4YW1wbGVzIGJlbG93LCB3ZSBoYXZlIHRvIGFsbG93IGZvciAnLS0nIGFyZ3MKKyAgICAgICAgIyB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgJy0nIGluIHRoZSBwYXR0ZXJuCisgICAgICAgIG5hcmdzID0gYWN0aW9uLm5hcmdzCisKKyAgICAgICAgIyB0aGUgZGVmYXVsdCAoTm9uZSkgaXMgYXNzdW1lZCB0byBiZSBhIHNpbmdsZSBhcmd1bWVudAorICAgICAgICBpZiBuYXJncyBpcyBOb25lOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoLSpBLSopJworCisgICAgICAgICMgYWxsb3cgemVybyBvciBvbmUgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gT1BUSU9OQUw6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkE/LSopJworCisgICAgICAgICMgYWxsb3cgemVybyBvciBtb3JlIGFyZ3VtZW50cworICAgICAgICBlbGlmIG5hcmdzID09IFpFUk9fT1JfTU9SRToKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSAnKC0qW0EtXSopJworCisgICAgICAgICMgYWxsb3cgb25lIG9yIG1vcmUgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gT05FX09SX01PUkU6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkFbQS1dKiknCisKKyAgICAgICAgIyBhbGxvdyBhbnkgbnVtYmVyIG9mIG9wdGlvbnMgb3IgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoWy1BT10qKScKKworICAgICAgICAjIGFsbG93IG9uZSBhcmd1bWVudCBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIG9wdGlvbnMgb3IgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gUEFSU0VSOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoLSpBWy1BT10qKScKKworICAgICAgICAjIGFsbCBvdGhlcnMgc2hvdWxkIGJlIGludGVnZXJzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKiVzLSopJyAlICctKicuam9pbignQScgKiBuYXJncykKKworICAgICAgICAjIGlmIHRoaXMgaXMgYW4gb3B0aW9uYWwgYWN0aW9uLCAtLSBpcyBub3QgYWxsb3dlZAorICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gbmFyZ3NfcGF0dGVybi5yZXBsYWNlKCctKicsICcnKQorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9IG5hcmdzX3BhdHRlcm4ucmVwbGFjZSgnLScsICcnKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBwYXR0ZXJuCisgICAgICAgIHJldHVybiBuYXJnc19wYXR0ZXJuCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgVmFsdWUgY29udmVyc2lvbiBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgX2dldF92YWx1ZXMoc2VsZiwgYWN0aW9uLCBhcmdfc3RyaW5ncyk6CisgICAgICAgICMgZm9yIGV2ZXJ5dGhpbmcgYnV0IFBBUlNFUiBhcmdzLCBzdHJpcCBvdXQgJy0tJworICAgICAgICBpZiBhY3Rpb24ubmFyZ3Mgbm90IGluIFtQQVJTRVIsIFJFTUFJTkRFUl06CisgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtzIGZvciBzIGluIGFyZ19zdHJpbmdzIGlmIHMgIT0gJy0tJ10KKworICAgICAgICAjIG9wdGlvbmFsIGFyZ3VtZW50IHByb2R1Y2VzIGEgZGVmYXVsdCB3aGVuIG5vdCBwcmVzZW50CisgICAgICAgIGlmIG5vdCBhcmdfc3RyaW5ncyBhbmQgYWN0aW9uLm5hcmdzID09IE9QVElPTkFMOgorICAgICAgICAgICAgaWYgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmNvbnN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fZ2V0X3ZhbHVlKGFjdGlvbiwgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKworICAgICAgICAjIHdoZW4gbmFyZ3M9JyonIG9uIGEgcG9zaXRpb25hbCwgaWYgdGhlcmUgd2VyZSBubyBjb21tYW5kLWxpbmUKKyAgICAgICAgIyBhcmdzLCB1c2UgdGhlIGRlZmF1bHQgaWYgaXQgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBOb25lCisgICAgICAgIGVsaWYgKG5vdCBhcmdfc3RyaW5ncyBhbmQgYWN0aW9uLm5hcmdzID09IFpFUk9fT1JfTU9SRSBhbmQKKyAgICAgICAgICAgICAgbm90IGFjdGlvbi5vcHRpb25fc3RyaW5ncyk6CisgICAgICAgICAgICBpZiBhY3Rpb24uZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFjdGlvbi5kZWZhdWx0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnX3N0cmluZ3MKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3ZhbHVlKGFjdGlvbiwgdmFsdWUpCisKKyAgICAgICAgIyBzaW5nbGUgYXJndW1lbnQgb3Igb3B0aW9uYWwgYXJndW1lbnQgcHJvZHVjZXMgYSBzaW5nbGUgdmFsdWUKKyAgICAgICAgZWxpZiBsZW4oYXJnX3N0cmluZ3MpID09IDEgYW5kIGFjdGlvbi5uYXJncyBpbiBbTm9uZSwgT1BUSU9OQUxdOgorICAgICAgICAgICAgYXJnX3N0cmluZywgPSBhcmdfc3RyaW5ncworICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9nZXRfdmFsdWUoYWN0aW9uLCBhcmdfc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKworICAgICAgICAjIFJFTUFJTkRFUiBhcmd1bWVudHMgY29udmVydCBhbGwgdmFsdWVzLCBjaGVja2luZyBub25lCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFJFTUFJTkRFUjoKKyAgICAgICAgICAgIHZhbHVlID0gW3NlbGYuX2dldF92YWx1ZShhY3Rpb24sIHYpIGZvciB2IGluIGFyZ19zdHJpbmdzXQorCisgICAgICAgICMgUEFSU0VSIGFyZ3VtZW50cyBjb252ZXJ0IGFsbCB2YWx1ZXMsIGJ1dCBjaGVjayBvbmx5IHRoZSBmaXJzdAorICAgICAgICBlbGlmIGFjdGlvbi5uYXJncyA9PSBQQVJTRVI6CisgICAgICAgICAgICB2YWx1ZSA9IFtzZWxmLl9nZXRfdmFsdWUoYWN0aW9uLCB2KSBmb3IgdiBpbiBhcmdfc3RyaW5nc10KKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3ZhbHVlKGFjdGlvbiwgdmFsdWVbMF0pCisKKyAgICAgICAgIyBhbGwgb3RoZXIgdHlwZXMgb2YgbmFyZ3MgcHJvZHVjZSBhIGxpc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gW3NlbGYuX2dldF92YWx1ZShhY3Rpb24sIHYpIGZvciB2IGluIGFyZ19zdHJpbmdzXQorICAgICAgICAgICAgZm9yIHYgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2KQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgX2dldF92YWx1ZShzZWxmLCBhY3Rpb24sIGFyZ19zdHJpbmcpOgorICAgICAgICB0eXBlX2Z1bmMgPSBzZWxmLl9yZWdpc3RyeV9nZXQoJ3R5cGUnLCBhY3Rpb24udHlwZSwgYWN0aW9uLnR5cGUpCisgICAgICAgIGlmIG5vdCBfY2FsbGFibGUodHlwZV9mdW5jKToKKyAgICAgICAgICAgIG1zZyA9IF8oJyVyIGlzIG5vdCBjYWxsYWJsZScpCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnICUgdHlwZV9mdW5jKQorCisgICAgICAgICMgY29udmVydCB0aGUgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gdHlwZV9mdW5jKGFyZ19zdHJpbmcpCisKKyAgICAgICAgIyBBcmd1bWVudFR5cGVFcnJvcnMgaW5kaWNhdGUgZXJyb3JzCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFR5cGVFcnJvcjoKKyAgICAgICAgICAgIG5hbWUgPSBnZXRhdHRyKGFjdGlvbi50eXBlLCAnX19uYW1lX18nLCByZXByKGFjdGlvbi50eXBlKSkKKyAgICAgICAgICAgIG1zZyA9IHN0cihfc3lzLmV4Y19pbmZvKClbMV0pCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnKQorCisgICAgICAgICMgVHlwZUVycm9ycyBvciBWYWx1ZUVycm9ycyBhbHNvIGluZGljYXRlIGVycm9ycworICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBuYW1lID0gZ2V0YXR0cihhY3Rpb24udHlwZSwgJ19fbmFtZV9fJywgcmVwcihhY3Rpb24udHlwZSkpCisgICAgICAgICAgICBtc2cgPSBfKCdpbnZhbGlkICVzIHZhbHVlOiAlcicpCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnICUgKG5hbWUsIGFyZ19zdHJpbmcpKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9jaGVja192YWx1ZShzZWxmLCBhY3Rpb24sIHZhbHVlKToKKyAgICAgICAgIyBjb252ZXJ0ZWQgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIGNob2ljZXMgKGlmIHNwZWNpZmllZCkKKyAgICAgICAgaWYgYWN0aW9uLmNob2ljZXMgaXMgbm90IE5vbmUgYW5kIHZhbHVlIG5vdCBpbiBhY3Rpb24uY2hvaWNlczoKKyAgICAgICAgICAgIHR1cCA9IHZhbHVlLCAnLCAnLmpvaW4obWFwKHJlcHIsIGFjdGlvbi5jaG9pY2VzKSkKKyAgICAgICAgICAgIG1zZyA9IF8oJ2ludmFsaWQgY2hvaWNlOiAlciAoY2hvb3NlIGZyb20gJXMpJykgJSB0dXAKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cpCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBIZWxwLWZvcm1hdHRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgZm9ybWF0X3VzYWdlKHNlbGYpOgorICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9nZXRfZm9ybWF0dGVyKCkKKyAgICAgICAgZm9ybWF0dGVyLmFkZF91c2FnZShzZWxmLnVzYWdlLCBzZWxmLl9hY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMpCisgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKQorCisgICAgZGVmIGZvcm1hdF9oZWxwKHNlbGYpOgorICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9nZXRfZm9ybWF0dGVyKCkKKworICAgICAgICAjIHVzYWdlCisgICAgICAgIGZvcm1hdHRlci5hZGRfdXNhZ2Uoc2VsZi51c2FnZSwgc2VsZi5fYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzKQorCisgICAgICAgICMgZGVzY3JpcHRpb24KKyAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHNlbGYuZGVzY3JpcHRpb24pCisKKyAgICAgICAgIyBwb3NpdGlvbmFscywgb3B0aW9uYWxzIGFuZCB1c2VyLWRlZmluZWQgZ3JvdXBzCisgICAgICAgIGZvciBhY3Rpb25fZ3JvdXAgaW4gc2VsZi5fYWN0aW9uX2dyb3VwczoKKyAgICAgICAgICAgIGZvcm1hdHRlci5zdGFydF9zZWN0aW9uKGFjdGlvbl9ncm91cC50aXRsZSkKKyAgICAgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dChhY3Rpb25fZ3JvdXAuZGVzY3JpcHRpb24pCisgICAgICAgICAgICBmb3JtYXR0ZXIuYWRkX2FyZ3VtZW50cyhhY3Rpb25fZ3JvdXAuX2dyb3VwX2FjdGlvbnMpCisgICAgICAgICAgICBmb3JtYXR0ZXIuZW5kX3NlY3Rpb24oKQorCisgICAgICAgICMgZXBpbG9nCisgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dChzZWxmLmVwaWxvZykKKworICAgICAgICAjIGRldGVybWluZSBoZWxwIGZyb20gZm9ybWF0IGFib3ZlCisgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKQorCisgICAgZGVmIGZvcm1hdF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICdUaGUgZm9ybWF0X3ZlcnNpb24gbWV0aG9kIGlzIGRlcHJlY2F0ZWQgLS0gdGhlICJ2ZXJzaW9uIiAnCisgICAgICAgICAgICAnYXJndW1lbnQgdG8gQXJndW1lbnRQYXJzZXIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLl9nZXRfZm9ybWF0dGVyKCkKKyAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHNlbGYudmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRfaGVscCgpCisKKyAgICBkZWYgX2dldF9mb3JtYXR0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZvcm1hdHRlcl9jbGFzcyhwcm9nPXNlbGYucHJvZykKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09CisgICAgIyBIZWxwLXByaW50aW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBwcmludF91c2FnZShzZWxmLCBmaWxlPU5vbmUpOgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gX3N5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fcHJpbnRfbWVzc2FnZShzZWxmLmZvcm1hdF91c2FnZSgpLCBmaWxlKQorCisgICAgZGVmIHByaW50X2hlbHAoc2VsZiwgZmlsZT1Ob25lKToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX3ByaW50X21lc3NhZ2Uoc2VsZi5mb3JtYXRfaGVscCgpLCBmaWxlKQorCisgICAgZGVmIHByaW50X3ZlcnNpb24oc2VsZiwgZmlsZT1Ob25lKToKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAnVGhlIHByaW50X3ZlcnNpb24gbWV0aG9kIGlzIGRlcHJlY2F0ZWQgLS0gdGhlICJ2ZXJzaW9uIiAnCisgICAgICAgICAgICAnYXJndW1lbnQgdG8gQXJndW1lbnRQYXJzZXIgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlKHNlbGYuZm9ybWF0X3ZlcnNpb24oKSwgZmlsZSkKKworICAgIGRlZiBfcHJpbnRfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBmaWxlPU5vbmUpOgorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZpbGUgPSBfc3lzLnN0ZGVycgorICAgICAgICAgICAgZmlsZS53cml0ZShtZXNzYWdlKQorCisgICAgIyA9PT09PT09PT09PT09PT0KKyAgICAjIEV4aXRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09CisgICAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1lc3NhZ2U9Tm9uZSk6CisgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlKG1lc3NhZ2UsIF9zeXMuc3RkZXJyKQorICAgICAgICBfc3lzLmV4aXQoc3RhdHVzKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAiIiJlcnJvcihtZXNzYWdlOiBzdHJpbmcpCisKKyAgICAgICAgUHJpbnRzIGEgdXNhZ2UgbWVzc2FnZSBpbmNvcnBvcmF0aW5nIHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBhbmQKKyAgICAgICAgZXhpdHMuCisKKyAgICAgICAgSWYgeW91IG92ZXJyaWRlIHRoaXMgaW4gYSBzdWJjbGFzcywgaXQgc2hvdWxkIG5vdCByZXR1cm4gLS0gaXQKKyAgICAgICAgc2hvdWxkIGVpdGhlciBleGl0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucHJpbnRfdXNhZ2UoX3N5cy5zdGRlcnIpCisgICAgICAgIHNlbGYuZXhpdCgyLCBfKCclczogZXJyb3I6ICVzXG4nKSAlIChzZWxmLnByb2csIG1lc3NhZ2UpKQpkaWZmIC0tZ2l0IGEvTGliL2FzdC5weSBiL0xpYi9hc3QucHkKaW5kZXggNmQ5MmVkZC4uZmQ1ZGZkYiAxMDA2NDQKLS0tIGEvTGliL2FzdC5weQorKysgYi9MaWIvYXN0LnB5CkBAIC0yOSwxMiArMjksMTIgQEAKIGZyb20gX2FzdCBpbXBvcnQgX192ZXJzaW9uX18KIAogCi1kZWYgcGFyc2UoZXhwciwgZmlsZW5hbWU9Jzx1bmtub3duPicsIG1vZGU9J2V4ZWMnKToKK2RlZiBwYXJzZShzb3VyY2UsIGZpbGVuYW1lPSc8dW5rbm93bj4nLCBtb2RlPSdleGVjJyk6CiAgICAgIiIiCi0gICAgUGFyc2UgYW4gZXhwcmVzc2lvbiBpbnRvIGFuIEFTVCBub2RlLgotICAgIEVxdWl2YWxlbnQgdG8gY29tcGlsZShleHByLCBmaWxlbmFtZSwgbW9kZSwgUHlDRl9PTkxZX0FTVCkuCisgICAgUGFyc2UgdGhlIHNvdXJjZSBpbnRvIGFuIEFTVCBub2RlLgorICAgIEVxdWl2YWxlbnQgdG8gY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCBtb2RlLCBQeUNGX09OTFlfQVNUKS4KICAgICAiIiIKLSAgICByZXR1cm4gY29tcGlsZShleHByLCBmaWxlbmFtZSwgbW9kZSwgUHlDRl9PTkxZX0FTVCkKKyAgICByZXR1cm4gY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCBtb2RlLCBQeUNGX09OTFlfQVNUKQogCiAKIGRlZiBsaXRlcmFsX2V2YWwobm9kZV9vcl9zdHJpbmcpOgpAQCAtNjQsNiArNjQsMTggQEAKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWUpOgogICAgICAgICAgICAgaWYgbm9kZS5pZCBpbiBfc2FmZV9uYW1lczoKICAgICAgICAgICAgICAgICByZXR1cm4gX3NhZmVfbmFtZXNbbm9kZS5pZF0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIEJpbk9wKSBhbmQgXAorICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKEFkZCwgU3ViKSkgYW5kIFwKKyAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUucmlnaHQsIE51bSkgYW5kIFwKKyAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUucmlnaHQubiwgY29tcGxleCkgYW5kIFwKKyAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUubGVmdCwgTnVtKSBhbmQgXAorICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5sZWZ0Lm4sIChpbnQsIGxvbmcsIGZsb2F0KSk6CisgICAgICAgICAgICBsZWZ0ID0gbm9kZS5sZWZ0Lm4KKyAgICAgICAgICAgIHJpZ2h0ID0gbm9kZS5yaWdodC5uCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUub3AsIEFkZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgKyByaWdodAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCAtIHJpZ2h0CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ21hbGZvcm1lZCBzdHJpbmcnKQogICAgIHJldHVybiBfY29udmVydChub2RlX29yX3N0cmluZykKIApAQCAtMTQwLDggKzE1Miw2IEBACiAgICAgSW5jcmVtZW50IHRoZSBsaW5lIG51bWJlciBvZiBlYWNoIG5vZGUgaW4gdGhlIHRyZWUgc3RhcnRpbmcgYXQgKm5vZGUqIGJ5ICpuKi4KICAgICBUaGlzIGlzIHVzZWZ1bCB0byAibW92ZSBjb2RlIiB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiBpbiBhIGZpbGUuCiAgICAgIiIiCi0gICAgaWYgJ2xpbmVubycgaW4gbm9kZS5fYXR0cmlidXRlczoKLSAgICAgICAgbm9kZS5saW5lbm8gPSBnZXRhdHRyKG5vZGUsICdsaW5lbm8nLCAwKSArIG4KICAgICBmb3IgY2hpbGQgaW4gd2Fsayhub2RlKToKICAgICAgICAgaWYgJ2xpbmVubycgaW4gY2hpbGQuX2F0dHJpYnV0ZXM6CiAgICAgICAgICAgICBjaGlsZC5saW5lbm8gPSBnZXRhdHRyKGNoaWxkLCAnbGluZW5vJywgMCkgKyBuCkBAIC0xOTIsOSArMjAyLDkgQEAKIAogZGVmIHdhbGsobm9kZSk6CiAgICAgIiIiCi0gICAgUmVjdXJzaXZlbHkgeWllbGQgYWxsIGNoaWxkIG5vZGVzIG9mICpub2RlKiwgaW4gbm8gc3BlY2lmaWVkIG9yZGVyLiAgVGhpcyBpcwotICAgIHVzZWZ1bCBpZiB5b3Ugb25seSB3YW50IHRvIG1vZGlmeSBub2RlcyBpbiBwbGFjZSBhbmQgZG9uJ3QgY2FyZSBhYm91dCB0aGUKLSAgICBjb250ZXh0LgorICAgIFJlY3Vyc2l2ZWx5IHlpZWxkIGFsbCBkZXNjZW5kYW50IG5vZGVzIGluIHRoZSB0cmVlIHN0YXJ0aW5nIGF0ICpub2RlKgorICAgIChpbmNsdWRpbmcgKm5vZGUqIGl0c2VsZiksIGluIG5vIHNwZWNpZmllZCBvcmRlci4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQorICAgIG9ubHkgd2FudCB0byBtb2RpZnkgbm9kZXMgaW4gcGxhY2UgYW5kIGRvbid0IGNhcmUgYWJvdXQgdGhlIGNvbnRleHQuCiAgICAgIiIiCiAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKICAgICB0b2RvID0gZGVxdWUoW25vZGVdKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jb3JlLnB5IGIvTGliL2FzeW5jb3JlLnB5CmluZGV4IGI2ZWI2N2UuLjFhNjIzZGIgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY29yZS5weQorKysgYi9MaWIvYXN5bmNvcmUucHkKQEAgLTUwLDEwICs1MCwxNSBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKK2ltcG9ydCB3YXJuaW5ncwogCiBpbXBvcnQgb3MKLWZyb20gZXJybm8gaW1wb3J0IEVBTFJFQURZLCBFSU5QUk9HUkVTUywgRVdPVUxEQkxPQ0ssIEVDT05OUkVTRVQsIFwKLSAgICAgRU5PVENPTk4sIEVTSFVURE9XTiwgRUlOVFIsIEVJU0NPTk4sIEVCQURGLCBFQ09OTkFCT1JURUQsIGVycm9yY29kZQorZnJvbSBlcnJubyBpbXBvcnQgRUFMUkVBRFksIEVJTlBST0dSRVNTLCBFV09VTERCTE9DSywgRUNPTk5SRVNFVCwgRUlOVkFMLCBcCisgICAgIEVOT1RDT05OLCBFU0hVVERPV04sIEVJTlRSLCBFSVNDT05OLCBFQkFERiwgRUNPTk5BQk9SVEVELCBFUElQRSwgRUFHQUlOLCBcCisgICAgIGVycm9yY29kZQorCitfRElTQ09OTkVDVEVEID0gZnJvemVuc2V0KChFQ09OTlJFU0VULCBFTk9UQ09OTiwgRVNIVVRET1dOLCBFQ09OTkFCT1JURUQsIEVQSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRUJBREYpKQogCiB0cnk6CiAgICAgc29ja2V0X21hcApAQCAtMTA4LDggKzExMyw3IEBACiAgICAgICAgIGlmIGZsYWdzICYgKHNlbGVjdC5QT0xMSFVQIHwgc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTE5WQUwpOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9jbG9zZSgpCiAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKLSAgICAgICAgaWYgZS5hcmdzWzBdIG5vdCBpbiAoRUJBREYsIEVDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV04sCi1FQ09OTkFCT1JURUQpOgorICAgICAgICBpZiBlLmFyZ3NbMF0gbm90IGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Vycm9yKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9iai5oYW5kbGVfY2xvc2UoKQpAQCAtMjY4LDYgKzI3Miw4IEBACiAgICAgICAgICAgICAgICAgc3RhdHVzLmFwcGVuZChyZXByKHNlbGYuYWRkcikpCiAgICAgICAgIHJldHVybiAnPCVzIGF0ICUjeD4nICUgKCcgJy5qb2luKHN0YXR1cyksIGlkKHNlbGYpKQogCisgICAgX19zdHJfXyA9IF9fcmVwcl9fCisKICAgICBkZWYgYWRkX2NoYW5uZWwoc2VsZiwgbWFwPU5vbmUpOgogICAgICAgICAjc2VsZi5sb2dfaW5mbygnYWRkaW5nIGNoYW5uZWwgJXMnICUgc2VsZikKICAgICAgICAgaWYgbWFwIGlzIE5vbmU6CkBAIC0zMzUsOCArMzQxLDggQEAKICAgICBkZWYgY29ubmVjdChzZWxmLCBhZGRyZXNzKToKICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBGYWxzZQogICAgICAgICBlcnIgPSBzZWxmLnNvY2tldC5jb25uZWN0X2V4KGFkZHJlc3MpCi0gICAgICAgICMgWFhYIFNob3VsZCBpbnRlcnByZXQgV2luc29jayByZXR1cm4gdmFsdWVzCi0gICAgICAgIGlmIGVyciBpbiAoRUlOUFJPR1JFU1MsIEVBTFJFQURZLCBFV09VTERCTE9DSyk6CisgICAgICAgIGlmIGVyciBpbiAoRUlOUFJPR1JFU1MsIEVBTFJFQURZLCBFV09VTERCTE9DSykgXAorICAgICAgICBvciBlcnIgPT0gRUlOVkFMIGFuZCBvcy5uYW1lIGluICgnbnQnLCAnY2UnKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBlcnIgaW4gKDAsIEVJU0NPTk4pOgogICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcmVzcwpAQCAtMzQ4LDEyICszNTQsMTUgQEAKICAgICAgICAgIyBYWFggY2FuIHJldHVybiBlaXRoZXIgYW4gYWRkcmVzcyBwYWlyIG9yIE5vbmUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCi0gICAgICAgICAgICByZXR1cm4gY29ubiwgYWRkcgotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB3aHk6Ci0gICAgICAgICAgICBpZiB3aHkuYXJnc1swXSA9PSBFV09VTERCTE9DSzoKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIChFV09VTERCTE9DSywgRUNPTk5BQk9SVEVELCBFQUdBSU4pOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY29ubiwgYWRkcgogCiAgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CiAgICAgICAgIHRyeToKQEAgLTM2Miw3ICszNzEsNyBAQAogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB3aHk6CiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSA9PSBFV09VTERCTE9DSzoKICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgZWxpZiB3aHkuYXJnc1swXSBpbiAoRUNPTk5SRVNFVCwgRU5PVENPTk4sIEVTSFVURE9XTiwgRUNPTk5BQk9SVEVEKToKKyAgICAgICAgICAgIGVsaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgIGVsc2U6CkBAIC0zODAsNyArMzg5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB3aHk6CiAgICAgICAgICAgICAjIHdpbnNvY2sgc29tZXRpbWVzIHRocm93cyBFTk9UQ09OTgotICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gW0VDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV04sIEVDT05OQUJPUlRFRF06CisgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgICAgIGVsc2U6CkBAIC00MDAsMTAgKzQwOSwxNSBAQAogICAgICMgcmVmZXJlbmNlcyB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zb2NrZXQsIGF0dHIpCisgICAgICAgICAgICByZXRhdHRyID0gZ2V0YXR0cihzZWxmLnNvY2tldCwgYXR0cikKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiVzIGluc3RhbmNlIGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0gIiUobWUpcy4lKGF0dHIpcyBpcyBkZXByZWNhdGVkLiBVc2UgJShtZSlzLnNvY2tldC4lKGF0dHIpcyAiIFwKKyAgICAgICAgICAgICAgICAgICJpbnN0ZWFkLiIgJSB7J21lJzogc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICdhdHRyJzphdHRyfQorICAgICAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICAgICAgcmV0dXJuIHJldGF0dHIKIAogICAgICMgbG9nIGFuZCBsb2dfaW5mbyBtYXkgYmUgb3ZlcnJpZGRlbiB0byBwcm92aWRlIG1vcmUgc29waGlzdGljYXRlZAogICAgICMgbG9nZ2luZyBhbmQgd2FybmluZyBtZXRob2RzLiBJbiBnZW5lcmFsLCBsb2cgaXMgZm9yICdoaXQnIGxvZ2dpbmcKQEAgLTQyOCw2ICs0NDIsOSBAQAogICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVhZCgpCiAKICAgICBkZWYgaGFuZGxlX2Nvbm5lY3RfZXZlbnQoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKKyAgICAgICAgaWYgZXJyICE9IDA6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdCgpCiAgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvYmFzZTY0LnB5IGIvTGliL2Jhc2U2NC5weQppbmRleCA0MWE1ZTE0Li44NTIwNGRkIDEwMDc1NQotLS0gYS9MaWIvYmFzZTY0LnB5CisrKyBiL0xpYi9iYXNlNjQucHkKQEAgLTM0Myw3ICszNDMsOCBAQAogICAgICAgICBpZiBvID09ICctdSc6IGZ1bmMgPSBkZWNvZGUKICAgICAgICAgaWYgbyA9PSAnLXQnOiB0ZXN0MSgpOyByZXR1cm4KICAgICBpZiBhcmdzIGFuZCBhcmdzWzBdICE9ICctJzoKLSAgICAgICAgZnVuYyhvcGVuKGFyZ3NbMF0sICdyYicpLCBzeXMuc3Rkb3V0KQorICAgICAgICB3aXRoIG9wZW4oYXJnc1swXSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGZ1bmMoZiwgc3lzLnN0ZG91dCkKICAgICBlbHNlOgogICAgICAgICBmdW5jKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKIApkaWZmIC0tZ2l0IGEvTGliL2JkYi5weSBiL0xpYi9iZGIucHkKaW5kZXggNGEzMTUzYy4uNmFhZDk3OSAxMDA2NDQKLS0tIGEvTGliL2JkYi5weQorKysgYi9MaWIvYmRiLnB5CkBAIC0xLDUgKzEsNiBAQAogIiIiRGVidWdnZXIgYmFzaWNzIiIiCiAKK2ltcG9ydCBmbm1hdGNoCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB0eXBlcwpAQCAtMTksNyArMjAsOCBAQAogICAgIFRoZSBzdGFuZGFyZCBkZWJ1Z2dlciBjbGFzcyAocGRiLlBkYikgaXMgYW4gZXhhbXBsZS4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcD1Ob25lKToKKyAgICAgICAgc2VsZi5za2lwID0gc2V0KHNraXApIGlmIHNraXAgZWxzZSBOb25lCiAgICAgICAgIHNlbGYuYnJlYWtzID0ge30KICAgICAgICAgc2VsZi5mbmNhY2hlID0ge30KIApAQCAtOTQsOSArOTYsMTggQEAKICAgICAjIG1ldGhvZHMsIGJ1dCB0aGV5IG1heSBpZiB0aGV5IHdhbnQgdG8gcmVkZWZpbmUgdGhlCiAgICAgIyBkZWZpbml0aW9uIG9mIHN0b3BwaW5nIGFuZCBicmVha3BvaW50cy4KIAorICAgIGRlZiBpc19za2lwcGVkX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIGZvciBwYXR0ZXJuIGluIHNlbGYuc2tpcDoKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChtb2R1bGVfbmFtZSwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZWYgc3RvcF9oZXJlKHNlbGYsIGZyYW1lKToKICAgICAgICAgIyAoQ1QpIHN0b3BmcmFtZSBtYXkgbm93IGFsc28gYmUgTm9uZSwgc2VlIGRpc3BhdGNoX2NhbGwuCiAgICAgICAgICMgKENUKSB0aGUgZm9ybWVyIHRlc3QgZm9yIE5vbmUgaXMgdGhlcmVmb3JlIHJlbW92ZWQgZnJvbSBoZXJlLgorICAgICAgICBpZiBzZWxmLnNraXAgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuaXNfc2tpcHBlZF9tb2R1bGUoZnJhbWUuZl9nbG9iYWxzLmdldCgnX19uYW1lX18nKSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgaWYgZnJhbWUgaXMgc2VsZi5zdG9wZnJhbWU6CiAgICAgICAgICAgICBpZiBzZWxmLnN0b3BsaW5lbm8gPT0gLTE6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0yMzksNiArMjUwLDEyIEBACiAgICAgICAgICAgICBsaXN0LmFwcGVuZChsaW5lbm8pCiAgICAgICAgIGJwID0gQnJlYWtwb2ludChmaWxlbmFtZSwgbGluZW5vLCB0ZW1wb3JhcnksIGNvbmQsIGZ1bmNuYW1lKQogCisgICAgZGVmIF9wcnVuZV9icmVha3Moc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIGlmIChmaWxlbmFtZSwgbGluZW5vKSBub3QgaW4gQnJlYWtwb2ludC5icGxpc3Q6CisgICAgICAgICAgICBzZWxmLmJyZWFrc1tmaWxlbmFtZV0ucmVtb3ZlKGxpbmVubykKKyAgICAgICAgaWYgbm90IHNlbGYuYnJlYWtzW2ZpbGVuYW1lXToKKyAgICAgICAgICAgIGRlbCBzZWxmLmJyZWFrc1tmaWxlbmFtZV0KKwogICAgIGRlZiBjbGVhcl9icmVhayhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCiAgICAgICAgIGlmIG5vdCBmaWxlbmFtZSBpbiBzZWxmLmJyZWFrczoKQEAgLTI1MCwxMCArMjY3LDcgQEAKICAgICAgICAgIyBwYWlyLCB0aGVuIHJlbW92ZSB0aGUgYnJlYWtzIGVudHJ5CiAgICAgICAgIGZvciBicCBpbiBCcmVha3BvaW50LmJwbGlzdFtmaWxlbmFtZSwgbGluZW5vXVs6XToKICAgICAgICAgICAgIGJwLmRlbGV0ZU1lKCkKLSAgICAgICAgaWYgbm90IEJyZWFrcG9pbnQuYnBsaXN0Lmhhc19rZXkoKGZpbGVuYW1lLCBsaW5lbm8pKToKLSAgICAgICAgICAgIHNlbGYuYnJlYWtzW2ZpbGVuYW1lXS5yZW1vdmUobGluZW5vKQotICAgICAgICBpZiBub3Qgc2VsZi5icmVha3NbZmlsZW5hbWVdOgotICAgICAgICAgICAgZGVsIHNlbGYuYnJlYWtzW2ZpbGVuYW1lXQorICAgICAgICBzZWxmLl9wcnVuZV9icmVha3MoZmlsZW5hbWUsIGxpbmVubykKIAogICAgIGRlZiBjbGVhcl9icGJ5bnVtYmVyKHNlbGYsIGFyZyk6CiAgICAgICAgIHRyeToKQEAgLTI2Niw3ICsyODAsOCBAQAogICAgICAgICAgICAgcmV0dXJuICdCcmVha3BvaW50IG51bWJlciAoJWQpIG91dCBvZiByYW5nZScgJSBudW1iZXIKICAgICAgICAgaWYgbm90IGJwOgogICAgICAgICAgICAgcmV0dXJuICdCcmVha3BvaW50ICglZCkgYWxyZWFkeSBkZWxldGVkJyAlIG51bWJlcgotICAgICAgICBzZWxmLmNsZWFyX2JyZWFrKGJwLmZpbGUsIGJwLmxpbmUpCisgICAgICAgIGJwLmRlbGV0ZU1lKCkKKyAgICAgICAgc2VsZi5fcHJ1bmVfYnJlYWtzKGJwLmZpbGUsIGJwLmxpbmUpCiAKICAgICBkZWYgY2xlYXJfYWxsX2ZpbGVfYnJlYWtzKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCkBAIC00NTcsNyArNDcyLDcgQEAKICAgICAgICAgQnJlYWtwb2ludC5uZXh0ID0gQnJlYWtwb2ludC5uZXh0ICsgMQogICAgICAgICAjIEJ1aWxkIHRoZSB0d28gbGlzdHMKICAgICAgICAgc2VsZi5icGJ5bnVtYmVyLmFwcGVuZChzZWxmKQotICAgICAgICBpZiBzZWxmLmJwbGlzdC5oYXNfa2V5KChmaWxlLCBsaW5lKSk6CisgICAgICAgIGlmIChmaWxlLCBsaW5lKSBpbiBzZWxmLmJwbGlzdDoKICAgICAgICAgICAgIHNlbGYuYnBsaXN0W2ZpbGUsIGxpbmVdLmFwcGVuZChzZWxmKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5icGxpc3RbZmlsZSwgbGluZV0gPSBbc2VsZl0KZGlmZiAtLWdpdCBhL0xpYi9iaW5oZXgucHkgYi9MaWIvYmluaGV4LnB5CmluZGV4IGJkNGU4YjMuLjhhYmM5ZjMgMTAwNjQ0Ci0tLSBhL0xpYi9iaW5oZXgucHkKKysrIGIvTGliL2JpbmhleC5weQpAQCAtMTc1LDkgKzE3NSw2IEBACiAgICAgICAgIGlmIHR5cGUob2ZwKSA9PSB0eXBlKCcnKToKICAgICAgICAgICAgIG9mbmFtZSA9IG9mcAogICAgICAgICAgICAgb2ZwID0gb3BlbihvZm5hbWUsICd3JykKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICAgICAgZnNzID0gRlNTcGVjKG9mbmFtZSkKLSAgICAgICAgICAgICAgICBmc3MuU2V0Q3JlYXRvclR5cGUoJ0JuSHEnLCAnVEVYVCcpCiAgICAgICAgIG9mcC53cml0ZSgnKFRoaXMgZmlsZSBtdXN0IGJlIGNvbnZlcnRlZCB3aXRoIEJpbkhleCA0LjApXG5cbjonKQogICAgICAgICBocXhlciA9IF9IcXhjb2RlcmVuZ2luZShvZnApCiAgICAgICAgIHNlbGYub2ZwID0gX1JsZWNvZGVyZW5naW5lKGhxeGVyKQpAQCAtNDc4LDkgKzQ3NSw2IEBACiAgICAgZmluZm8gPSBpZnAuRkluZm8KICAgICBpZiBub3Qgb3V0OgogICAgICAgICBvdXQgPSBpZnAuRk5hbWUKLSAgICBpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICBvZnNzID0gRlNTcGVjKG91dCkKLSAgICAgICAgb3V0ID0gb2Zzcy5hc19wYXRobmFtZSgpCiAKICAgICBvZnAgPSBvcGVuKG91dCwgJ3diJykKICAgICAjIFhYWFggRG8gdHJhbnNsYXRpb24gb24gbm9uLW1hYyBzeXN0ZW1zCkBAIC01MDEsMTMgKzQ5NSw2IEBACiAgICAgICAgICAgICBvZnAud3JpdGUoZCkKICAgICAgICAgb2ZwLmNsb3NlKCkKIAotICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgIG5maW5mbyA9IG9mc3MuR2V0RkluZm8oKQotICAgICAgICBuZmluZm8uQ3JlYXRvciA9IGZpbmZvLkNyZWF0b3IKLSAgICAgICAgbmZpbmZvLlR5cGUgPSBmaW5mby5UeXBlCi0gICAgICAgIG5maW5mby5GbGFncyA9IGZpbmZvLkZsYWdzCi0gICAgICAgIG9mc3MuU2V0RkluZm8obmZpbmZvKQotCiAgICAgaWZwLmNsb3NlKCkKIAogZGVmIF90ZXN0KCk6CmRpZmYgLS1naXQgYS9MaWIvYmlzZWN0LnB5IGIvTGliL2Jpc2VjdC5weQppbmRleCBmZTg0MjU1Li40YTRkMDUyIDEwMDY0NAotLS0gYS9MaWIvYmlzZWN0LnB5CisrKyBiL0xpYi9iaXNlY3QucHkKQEAgLTg3LDYgKzg3LDYgQEAKIAogIyBPdmVyd3JpdGUgYWJvdmUgZGVmaW5pdGlvbnMgd2l0aCBhIGZhc3QgQyBpbXBsZW1lbnRhdGlvbgogdHJ5OgotICAgIGZyb20gX2Jpc2VjdCBpbXBvcnQgYmlzZWN0X3JpZ2h0LCBiaXNlY3RfbGVmdCwgaW5zb3J0X2xlZnQsIGluc29ydF9yaWdodCwgaW5zb3J0LCBiaXNlY3QKKyAgICBmcm9tIF9iaXNlY3QgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvX19pbml0X18ucHkgYi9MaWIvYnNkZGIvX19pbml0X18ucHkKaW5kZXggMDdjN2M5ZC4uZWQ0ZGVlYSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL19faW5pdF9fLnB5CisrKyBiL0xpYi9ic2RkYi9fX2luaXRfXy5weQpAQCAtMzMsNyArMzMsNyBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0iIiJTdXBwb3J0IGZvciBCZXJrZWxleSBEQiA0LjAgdGhyb3VnaCA0Ljcgd2l0aCBhIHNpbXBsZSBpbnRlcmZhY2UuCisiIiJTdXBwb3J0IGZvciBCZXJrZWxleSBEQiA0LjEgdGhyb3VnaCA0Ljggd2l0aCBhIHNpbXBsZSBpbnRlcmZhY2UuCiAKIEZvciB0aGUgZnVsbCBmZWF0dXJlZCBvYmplY3Qgb3JpZW50ZWQgaW50ZXJmYWNlIHVzZSB0aGUgYnNkZGIuZGIgbW9kdWxlCiBpbnN0ZWFkLiAgSXQgbWlycm9ycyB0aGUgT3JhY2xlIEJlcmtlbGV5IERCIEMgQVBJLgpAQCAtNDIsMTEgKzQyLDE0IEBACiBpbXBvcnQgc3lzCiBhYnNvbHV0ZV9pbXBvcnQgPSAoc3lzLnZlcnNpb25faW5mb1swXSA+PSAzKQogCi1pZiBzeXMucHkza3dhcm5pbmc6CitpZiAoc3lzLnZlcnNpb25faW5mbyA+PSAoMiwgNikpIGFuZCAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAwKSkgOgogICAgIGltcG9ydCB3YXJuaW5ncwotICAgIHdhcm5pbmdzLndhcm5weTNrKCJpbiAzLngsIHRoZSBic2RkYiBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZDsgIgotICAgICAgICAgICAgICAgICAgICAgICJwbGVhc2UgdXNlIHRoZSBweWJzZGRiIHByb2plY3QgaW5zdGVhZCIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGlmIHN5cy5weTNrd2FybmluZyBhbmQgKF9fbmFtZV9fICE9ICdic2RkYjMnKSA6CisgICAgICAgIHdhcm5pbmdzLndhcm5weTNrKCJpbiAzLngsIHRoZSBic2RkYiBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAicGxlYXNlIHVzZSB0aGUgcHlic2RkYiBwcm9qZWN0IGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKkNPYmplY3QuKiIsIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnNkZGIuX19pbml0X18iKQogCiB0cnk6CiAgICAgaWYgX19uYW1lX18gPT0gJ2JzZGRiMyc6CkBAIC04MSw3ICs4NCw3IEBACiAKIGZyb20gd2Vha3JlZiBpbXBvcnQgcmVmCiAKLWlmIHN5cy52ZXJzaW9uX2luZm9bMDoyXSA8PSAoMiwgNSkgOgoraWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CiAgICAgaW1wb3J0IFVzZXJEaWN0CiAgICAgTXV0YWJsZU1hcHBpbmcgPSBVc2VyRGljdC5EaWN0TWl4aW4KIGVsc2UgOgpAQCAtMjU2LDcgKzI1OSw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrT3BlbigpCiAgICAgICAgIHJldHVybiBfRGVhZGxvY2tXcmFwKGxhbWJkYTogbGVuKHNlbGYuZGIpKSAgIyBsZW4oc2VsZi5kYikKIAotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMDoyXSA+PSAoMiwgNikgOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpIDoKICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpIDoKICAgICAgICAgICAgIGlmIHNlbGYuaXNPcGVuKCkgOgogICAgICAgICAgICAgICAgIHJldHVybiByZXByKGRpY3QoX0RlYWRsb2NrV3JhcChzZWxmLmRiLml0ZW1zKSkpCkBAIC00NDIsOCArNDQ1LDEwIEBACiAjIEJlcmtlbGV5IERCIHdhcyB0b28uCiAKIHRyeToKLSAgICBpbXBvcnQgdGhyZWFkCi0gICAgZGVsIHRocmVhZAorICAgICMgMnRvMyBhdXRvbWF0aWNhbGx5IGNoYW5nZXMgImltcG9ydCB0aHJlYWQiIHRvICJpbXBvcnQgX3RocmVhZCIKKyAgICBpbXBvcnQgdGhyZWFkIGFzIFQKKyAgICBkZWwgVAorCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZGIuREJfVEhSRUFEID0gMAogCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvZGJvYmoucHkgYi9MaWIvYnNkZGIvZGJvYmoucHkKaW5kZXggMWU0MjM5Ny4uYzdjNzMyMiAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL2Rib2JqLnB5CisrKyBiL0xpYi9ic2RkYi9kYm9iai5weQpAQCAtMjksNyArMjksNyBAQAogZWxzZSA6CiAgICAgaW1wb3J0IGRiCiAKLWlmIHN5cy52ZXJzaW9uX2luZm9bMDoyXSA8PSAoMiwgNSkgOgoraWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CiAgICAgdHJ5OgogICAgICAgICBmcm9tIFVzZXJEaWN0IGltcG9ydCBEaWN0TWl4aW4KICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xMTAsMTUgKzExMCwxNyBAQAogICAgIGRlZiBsb2dfc3RhdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gc2VsZi5fY29iai5sb2dfc3RhdCgqYXJncywgKiprd2FyZ3MpCiAKLSAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsMSk6Ci0gICAgICAgIGRlZiBkYnJlbW92ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouZGJyZW1vdmUoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBkZWYgZGJyZW5hbWUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLmRicmVuYW1lKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZGVmIHNldF9lbmNyeXB0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29iai5zZXRfZW5jcnlwdCgqYXJncywgKiprd2FyZ3MpCisgICAgZGVmIGRicmVtb3ZlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLmRicmVtb3ZlKCphcmdzLCAqKmt3YXJncykKKyAgICBkZWYgZGJyZW5hbWUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmouZGJyZW5hbWUoKmFyZ3MsICoqa3dhcmdzKQorICAgIGRlZiBzZXRfZW5jcnlwdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29iai5zZXRfZW5jcnlwdCgqYXJncywgKiprd2FyZ3MpCiAKICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsNCk6CisgICAgICAgIGRlZiBmaWxlaWRfcmVzZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLmZpbGVpZF9yZXNldCgqYXJncywgKiprd2FyZ3MpCisKICAgICAgICAgZGVmIGxzbl9yZXNldChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvYmoubHNuX3Jlc2V0KCphcmdzLCAqKmt3YXJncykKIApAQCAtMTM4LDcgKzE0MCw3IEBACiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGFyZyk6CiAgICAgICAgIGRlbCBzZWxmLl9jb2JqW2FyZ10KIAotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMDoyXSA+PSAoMiwgNikgOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpIDoKICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpIDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLl9faXRlcl9fKCkKIApAQCAtMjI5LDkgKzIzMSw4IEBACiAgICAgZGVmIHNldF9nZXRfcmV0dXJuc19ub25lKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLnNldF9nZXRfcmV0dXJuc19ub25lKCphcmdzLCAqKmt3YXJncykKIAotICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwxKToKLSAgICAgICAgZGVmIHNldF9lbmNyeXB0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29iai5zZXRfZW5jcnlwdCgqYXJncywgKiprd2FyZ3MpCisgICAgZGVmIHNldF9lbmNyeXB0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jb2JqLnNldF9lbmNyeXB0KCphcmdzLCAqKmt3YXJncykKIAogCiBjbGFzcyBEQlNlcXVlbmNlOgpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL2Ric2hlbHZlLnB5IGIvTGliL2JzZGRiL2Ric2hlbHZlLnB5CmluZGV4IDdjODc1YjQuLmUzZjZkNGMgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi9kYnNoZWx2ZS5weQorKysgYi9MaWIvYnNkZGIvZGJzaGVsdmUucHkKQEAgLTEsNCArMSw0IEBACi0jIS9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBieSBUb3RhbCBDb250cm9sIFNvZnR3YXJlCiAjICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKQEAgLTI5LDkgKzI5LDYgQEAKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pbXBvcnQgY1BpY2tsZQotaW1wb3J0IHN5cwotCiBpbXBvcnQgc3lzCiBhYnNvbHV0ZV9pbXBvcnQgPSAoc3lzLnZlcnNpb25faW5mb1swXSA+PSAzKQogaWYgYWJzb2x1dGVfaW1wb3J0IDoKQEAgLTQwLDEzICszNyw0MSBAQAogZWxzZSA6CiAgICAgaW1wb3J0IGRiCiAKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CisgICAgaW1wb3J0IGNQaWNrbGUgICMgV2lsbCBiZSBjb252ZXJ0ZWQgdG8gInBpY2tsZSIgYnkgIjJ0bzMiCitlbHNlIDoKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgaW1wb3J0IGNQaWNrbGUKKyAgICBlbHNlIDoKKyAgICAgICAgIyBXaGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgcHl0aG9uIDIuMyBhbmQgMi40CisgICAgICAgICMgd2UgY291bGQgdXNlOiAoaW4gMi41IHdlIG5lZWQgYSBfX2Z1dHVyZV9fIHN0YXRlbWVudCkKKyAgICAgICAgIworICAgICAgICAjICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgIyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoLi4uKQorICAgICAgICAjICAgICAgICAuLi4KKyAgICAgICAgIworICAgICAgICAjIFdlIGNhbiBub3QgdXNlICJ3aXRoIiBhcyBpcywgYmVjYXVzZSBpdCB3b3VsZCBiZSBpbnZhbGlkIHN5bnRheAorICAgICAgICAjIGluIHB5dGhvbiAyLjMsIDIuNCBhbmQgKHdpdGggbm8gX19mdXR1cmVfXykgMi41LgorICAgICAgICAjIEhlcmUgd2Ugc2ltdWxhdGUgIndpdGgiIGZvbGxvd2luZyBQRVAgMzQzIDoKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHcgPSB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpCisgICAgICAgIHcuX19lbnRlcl9fKCkKKyAgICAgICAgdHJ5IDoKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J3RoZSBjUGlja2xlIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAnLAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIGZpbmFsbHkgOgorICAgICAgICAgICAgdy5fX2V4aXRfXygpCisgICAgICAgIGRlbCB3CisKICNBdCB2ZXJzaW9uIDIuMyBjUGlja2xlIHN3aXRjaGVkIHRvIHVzaW5nIHByb3RvY29sIGluc3RlYWQgb2YgYmluCi1pZiBzeXMudmVyc2lvbl9pbmZvWzozXSA+PSAoMiwgMywgMCk6CitpZiBzeXMudmVyc2lvbl9pbmZvID49ICgyLCAzKToKICAgICBISUdIRVNUX1BST1RPQ09MID0gY1BpY2tsZS5ISUdIRVNUX1BST1RPQ09MCiAjIEluIHB5dGhvbiAyLjMuKiwgImNQaWNrbGUuZHVtcHMiIGFjY2VwdHMgbm8KICMgbmFtZWQgcGFyYW1ldGVycy4gInBpY2tsZS5kdW1wcyIgYWNjZXB0cyB0aGVtLAogIyBzbyB0aGlzIHNlZW1zIGEgYnVnLgotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CiAgICAgICAgIGRlZiBfZHVtcHMob2JqZWN0LCBwcm90b2NvbCk6CiAgICAgICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhvYmplY3QsIHByb3RvY29sKQogICAgIGVsc2UgOgpAQCAtNTksMTEgKzg0LDE2IEBACiAgICAgICAgIHJldHVybiBjUGlja2xlLmR1bXBzKG9iamVjdCwgYmluPXByb3RvY29sKQogCiAKLXRyeToKLSAgICBmcm9tIFVzZXJEaWN0IGltcG9ydCBEaWN0TWl4aW4KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIERpY3RNaXhpbiBpcyBuZXcgaW4gUHl0aG9uIDIuMwotICAgIGNsYXNzIERpY3RNaXhpbjogcGFzcworaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgdHJ5OgorICAgICAgICBmcm9tIFVzZXJEaWN0IGltcG9ydCBEaWN0TWl4aW4KKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICMgRGljdE1peGluIGlzIG5ldyBpbiBQeXRob24gMi4zCisgICAgICAgIGNsYXNzIERpY3RNaXhpbjogcGFzcworICAgIE11dGFibGVNYXBwaW5nID0gRGljdE1peGluCitlbHNlIDoKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKyAgICBNdXRhYmxlTWFwcGluZyA9IGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTA2LDcgKzEzNiw3IEBACiBjbGFzcyBEQlNoZWx2ZUVycm9yKGRiLkRCRXJyb3IpOiBwYXNzCiAKIAotY2xhc3MgREJTaGVsZihEaWN0TWl4aW4pOgorY2xhc3MgREJTaGVsZihNdXRhYmxlTWFwcGluZyk6CiAgICAgIiIiQSBzaGVsZiB0byBob2xkIHBpY2tsZWQgb2JqZWN0cywgYnVpbHQgdXBvbiBhIGJzZGRiIERCIG9iamVjdC4gIEl0CiAgICAgYXV0b21hdGljYWxseSBwaWNrbGVzL3VucGlja2xlcyBkYXRhIG9iamVjdHMgZ29pbmcgdG8vZnJvbSB0aGUgREIuCiAgICAgIiIiCkBAIC0xNTcsNiArMTg3LDE3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5kYi5rZXlzKCkKIAorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsIDYpIDoKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpIDogICMgWFhYOiBMb2FkIGFsbCBrZXlzIGluIG1lbW9yeSA6LSgKKyAgICAgICAgICAgIGZvciBrIGluIHNlbGYuZGIua2V5cygpIDoKKyAgICAgICAgICAgICAgICB5aWVsZCBrCisKKyAgICAgICAgIyBEbyB0aGlzIHdoZW4gIkRCIiAgc3VwcG9ydCBpdGVyYXRpb24KKyAgICAgICAgIyBPciBpcyBpdCBlbm91Z2ggdG8gcGFzcyB0aHJ1ICJnZXRhdHRyIj8KKyAgICAgICAgIworICAgICAgICAjIGRlZiBfX2l0ZXJfXyhzZWxmKSA6CisgICAgICAgICMgICAgcmV0dXJuIHNlbGYuZGIuX19pdGVyX18oKQorCiAKICAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLmRiLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL2RidGFibGVzLnB5IGIvTGliL2JzZGRiL2RidGFibGVzLnB5CmluZGV4IDFmYzNhZWYuLjNlYmM2OGQgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi9kYnRhYmxlcy5weQorKysgYi9MaWIvYnNkZGIvZGJ0YWJsZXMucHkKQEAgLTIyLDcgKzIyLDM1IEBACiBpbXBvcnQgY29weQogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN0cnVjdAotaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCisKKworaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKKyAgICBpbXBvcnQgcGlja2xlCitlbHNlIDoKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgaW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCisgICAgZWxzZSA6CisgICAgICAgICMgV2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHB5dGhvbiAyLjMgYW5kIDIuNAorICAgICAgICAjIHdlIGNvdWxkIHVzZTogKGluIDIuNSB3ZSBuZWVkIGEgX19mdXR1cmVfXyBzdGF0ZW1lbnQpCisgICAgICAgICMKKyAgICAgICAgIyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICMgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKC4uLikKKyAgICAgICAgIyAgICAgICAgLi4uCisgICAgICAgICMKKyAgICAgICAgIyBXZSBjYW4gbm90IHVzZSAid2l0aCIgYXMgaXMsIGJlY2F1c2UgaXQgd291bGQgYmUgaW52YWxpZCBzeW50YXgKKyAgICAgICAgIyBpbiBweXRob24gMi4zLCAyLjQgYW5kICh3aXRoIG5vIF9fZnV0dXJlX18pIDIuNS4KKyAgICAgICAgIyBIZXJlIHdlIHNpbXVsYXRlICJ3aXRoIiBmb2xsb3dpbmcgUEVQIDM0MyA6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3ID0gd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKQorICAgICAgICB3Ll9fZW50ZXJfXygpCisgICAgICAgIHRyeSA6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSd0aGUgY1BpY2tsZSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wJywKKyAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKKyAgICAgICAgZmluYWxseSA6CisgICAgICAgICAgICB3Ll9fZXhpdF9fKCkKKyAgICAgICAgZGVsIHcKIAogdHJ5OgogICAgICMgRm9yIFB5dGhvbnMgdy9kaXN0dXRpbHMgcHlic2RkYgpAQCAtMzEsMTIgKzU5LDYgQEAKICAgICAjIEZvciBQeXRob24gMi4zCiAgICAgZnJvbSBic2RkYiBpbXBvcnQgZGIKIAotIyBYWFgobm5vcndpdHopOiBpcyB0aGlzIGNvcnJlY3Q/IERCSW5jb21wbGV0ZUVycm9yIGlzIGNvbmRpdGlvbmFsIGluIF9ic2RkYi5jCi1pZiBub3QgaGFzYXR0cihkYiwiREJJbmNvbXBsZXRlRXJyb3IiKSA6Ci0gICAgY2xhc3MgREJJbmNvbXBsZXRlRXJyb3IoRXhjZXB0aW9uKToKLSAgICAgICAgcGFzcwotICAgIGRiLkRCSW5jb21wbGV0ZUVycm9yID0gREJJbmNvbXBsZXRlRXJyb3IKLQogY2xhc3MgVGFibGVEQkVycm9yKFN0YW5kYXJkRXJyb3IpOgogICAgIHBhc3MKIGNsYXNzIFRhYmxlQWxyZWFkeUV4aXN0cyhUYWJsZURCRXJyb3IpOgpAQCAtMjYxLDE2ICsyODMsMTAgQEAKICAgICAgICAgICAgIHNlbGYuZW52ID0gTm9uZQogCiAgICAgZGVmIGNoZWNrcG9pbnQoc2VsZiwgbWlucz0wKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5lbnYudHhuX2NoZWNrcG9pbnQobWlucykKLSAgICAgICAgZXhjZXB0IGRiLkRCSW5jb21wbGV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmVudi50eG5fY2hlY2twb2ludChtaW5zKQogCiAgICAgZGVmIHN5bmMoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZGIuc3luYygpCi0gICAgICAgIGV4Y2VwdCBkYi5EQkluY29tcGxldGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5kYi5zeW5jKCkKIAogICAgIGRlZiBfZGJfcHJpbnQoc2VsZikgOgogICAgICAgICAiIiJQcmludCB0aGUgZGF0YWJhc2UgdG8gc3Rkb3V0IGZvciBkZWJ1Z2dpbmciIiIKQEAgLTM5OCw3ICs0MTQsNyBAQAogICAgICAgICAgICAgICAgICMgY29sdW1uIG5hbWVzCiAgICAgICAgICAgICAgICAgbmV3Y29sdW1ubGlzdCA9IGNvcHkuY29weShvbGRjb2x1bW5saXN0KQogICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbHVtbnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGMgbm90IGluIG9sZGNvbHVtbmhhc2g6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjIGluIG9sZGNvbHVtbmhhc2g6CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdjb2x1bW5saXN0LmFwcGVuZChjKQogCiAgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgdGFibGUncyBuZXcgZXh0ZW5kZWQgY29sdW1uIGxpc3QKQEAgLTYxNSw3ICs2MzEsNyBAQAogICAgICAgICAgIGFyZ3VtZW50IGFuZCByZXR1cm5pbmcgYSBib29sZWFuLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGFibGUgbm90IGluIHNlbGYuX190YWJsZWNvbHVtbnM6CisgICAgICAgICAgICBpZiBub3QgdGFibGUgaW4gc2VsZi5fX3RhYmxlY29sdW1uczoKICAgICAgICAgICAgICAgICBzZWxmLl9fbG9hZF9jb2x1bW5faW5mbyh0YWJsZSkKICAgICAgICAgICAgIGlmIGNvbHVtbnMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBjb2x1bW5zID0gc2VsZi5fX3RhYmxlY29sdW1uc1t0YWJsZV0KQEAgLTY1OSw2ICs2NzUsMTMgQEAKICAgICAgICAgICAgIGEgPSBhdHVwbGVbMV0KICAgICAgICAgICAgIGIgPSBidHVwbGVbMV0KICAgICAgICAgICAgIGlmIHR5cGUoYSkgaXMgdHlwZShiKToKKworICAgICAgICAgICAgICAgICMgTmVlZGVkIGZvciBweXRob24gMy4gImNtcCIgdmFuaXNoZWQgaW4gMy4wLjEKKyAgICAgICAgICAgICAgICBkZWYgY21wKGEsIGIpIDoKKyAgICAgICAgICAgICAgICAgICAgaWYgYT09YiA6IHJldHVybiAwCisgICAgICAgICAgICAgICAgICAgIGlmIGE8YiA6IHJldHVybiAtMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBQcmVmaXhDb25kKSBhbmQgaXNpbnN0YW5jZShiLCBQcmVmaXhDb25kKToKICAgICAgICAgICAgICAgICAgICAgIyBsb25nZXN0IHByZWZpeCBmaXJzdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21wKGxlbihiLnByZWZpeCksIGxlbihhLnByZWZpeCkpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2FsbC5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYWxsLnB5CmluZGV4IDM5MjMxYzYuLmU5ZmU2MTggMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYWxsLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYWxsLnB5CkBAIC0xNSw2ICsxNSw1MSBAQAogaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKICAgICBjaGFyc2V0ID0gImlzbzg4NTktMSIgICMgRnVsbCA4IGJpdAogCisgICAgY2xhc3MgbG9nY3Vyc29yX3B5M2sob2JqZWN0KSA6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnYpIDoKKyAgICAgICAgICAgIHNlbGYuX2xvZ2N1cnNvciA9IGVudi5sb2dfY3Vyc29yKCkKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdikgOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fbG9nY3Vyc29yLCB2KQorCisgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKSA6CisgICAgICAgICAgICB2ID0gZ2V0YXR0cihzZWxmLl9sb2djdXJzb3IsICJuZXh0IikoKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgbmV4dCA9IF9fbmV4dF9fCisKKyAgICAgICAgZGVmIGZpcnN0KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9sb2djdXJzb3IuZmlyc3QoKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgZGVmIGxhc3Qoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2xvZ2N1cnNvci5sYXN0KCkKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBwcmV2KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9sb2djdXJzb3IucHJldigpCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgY3VycmVudChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fbG9nY3Vyc29yLmN1cnJlbnQoKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgZGVmIHNldChzZWxmLCBsc24pIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9sb2djdXJzb3Iuc2V0KGxzbikKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCiAgICAgY2xhc3MgY3Vyc29yX3B5M2sob2JqZWN0KSA6CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYiwgKmFyZ3MsICoqa3dhcmdzKSA6CiAgICAgICAgICAgICBzZWxmLl9kYmN1cnNvciA9IGRiLmN1cnNvcigqYXJncywgKiprd2FyZ3MpCkBAIC03MSwxMiArMTE2LDEyIEBACiAgICAgICAgICAgICB2ID0gc2VsZi5fZGJjdXJzb3IubmV4dF9ub2R1cCgpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4KHYpCiAKLSAgICAgICAgZGVmIHB1dChzZWxmLCBrZXksIHZhbHVlLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CisgICAgICAgIGRlZiBwdXQoc2VsZiwga2V5LCBkYXRhLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKSA6CiAgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSA6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBieXRlcyh2YWx1ZSwgY2hhcnNldCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYmN1cnNvci5wdXQoa2V5LCB2YWx1ZSwgZmxhZ3M9ZmxhZ3MsIGRsZW49ZGxlbiwKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKSA6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBieXRlcyhkYXRhLCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiY3Vyc29yLnB1dChrZXksIGRhdGEsIGZsYWdzPWZsYWdzLCBkbGVuPWRsZW4sCiAgICAgICAgICAgICAgICAgICAgIGRvZmY9ZG9mZikKIAogICAgICAgICBkZWYgY3VycmVudChzZWxmLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CkBAIC0yMDMsMTIgKzI0OCwyNiBAQAogICAgICAgICAgICAgICAgIGsgPSBieXRlcyhrLCBjaGFyc2V0KQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLmhhc19rZXkoaywgdHhuPXR4bikKIAotICAgICAgICBkZWYgcHV0KHNlbGYsIGtleSwgdmFsdWUsIHR4bj1Ob25lLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CisgICAgICAgIGRlZiBzZXRfcmVfZGVsaW0oc2VsZiwgYykgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjLCBzdHIpIDogICMgV2UgY2FuIHVzZSBhIG51bWVyaWMgdmFsdWUgYnl0ZSB0b28KKyAgICAgICAgICAgICAgICBjID0gYnl0ZXMoYywgY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5zZXRfcmVfZGVsaW0oYykKKworICAgICAgICBkZWYgc2V0X3JlX3BhZChzZWxmLCBjKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGMsIHN0cikgOiAgIyBXZSBjYW4gdXNlIGEgbnVtZXJpYyB2YWx1ZSBieXRlIHRvbworICAgICAgICAgICAgICAgIGMgPSBieXRlcyhjLCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLnNldF9yZV9wYWQoYykKKworICAgICAgICBkZWYgZ2V0X3JlX3NvdXJjZShzZWxmKSA6CisgICAgICAgICAgICBzb3VyY2UgPSBzZWxmLl9kYi5nZXRfcmVfc291cmNlKCkKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2UuZGVjb2RlKGNoYXJzZXQpCisKKyAgICAgICAgZGVmIHB1dChzZWxmLCBrZXksIGRhdGEsIHR4bj1Ob25lLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKSA6CiAgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKSA6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBieXRlcyh2YWx1ZSwgY2hhcnNldCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5wdXQoa2V5LCB2YWx1ZSwgZmxhZ3M9ZmxhZ3MsIHR4bj10eG4sIGRsZW49ZGxlbiwKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKSA6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBieXRlcyhkYXRhLCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLnB1dChrZXksIGRhdGEsIGZsYWdzPWZsYWdzLCB0eG49dHhuLCBkbGVuPWRsZW4sCiAgICAgICAgICAgICAgICAgICAgIGRvZmY9ZG9mZikKIAogICAgICAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlLCB0eG49Tm9uZSkgOgpAQCAtMjIxLDYgKzI4MCwxMSBAQAogICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5nZXRfc2l6ZShrZXkpCiAKKyAgICAgICAgZGVmIGV4aXN0cyhzZWxmLCBrZXksICphcmdzLCAqKmt3YXJncykgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5leGlzdHMoa2V5LCAqYXJncywgKiprd2FyZ3MpCisKICAgICAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Ik1hZ2ljQ29va2llIiwgdHhuPU5vbmUsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKICAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCkBAIC0yODgsMTMgKzM1MiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZShjaGFyc2V0KQogICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoY2hhcnNldCkKICAgICAgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fY2FsbGJhY2soa2V5LCBkYXRhKQotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IGJzZGRiLl9kYi5EQl9ET05PVElOREVYKSBhbmQgaXNpbnN0YW5jZShrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gYnNkZGIuX2RiLkRCX0RPTk9USU5ERVgpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBsaXN0KSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MiA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4ga2V5IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpLCBzdHIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBieXRlcyhpLCBjaGFyc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyLmFwcGVuZChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleTIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleQogCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuYXNzb2NpYXRlKHNlY29uZGFyeWRiLl9kYiwKLSAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlX2NhbGxiYWNrKGNhbGxiYWNrKS5jYWxsYmFjaywgZmxhZ3M9ZmxhZ3MsIHR4bj10eG4pCisgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZV9jYWxsYmFjayhjYWxsYmFjaykuY2FsbGJhY2ssIGZsYWdzPWZsYWdzLAorICAgICAgICAgICAgICAgICAgICB0eG49dHhuKQogCiAgICAgICAgIGRlZiBjdXJzb3Ioc2VsZiwgdHhuPU5vbmUsIGZsYWdzPTApIDoKICAgICAgICAgICAgIHJldHVybiBjdXJzb3JfcHkzayhzZWxmLl9kYiwgdHhuPXR4biwgZmxhZ3M9ZmxhZ3MpCkBAIC0zMTAsNiArMzgyLDIxIEBACiAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB2KSA6CiAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9kYmVudiwgdikKIAorICAgICAgICBkZWYgbG9nX2N1cnNvcihzZWxmLCBmbGFncz0wKSA6CisgICAgICAgICAgICByZXR1cm4gbG9nY3Vyc29yX3B5M2soc2VsZi5fZGJlbnYpCisKKyAgICAgICAgZGVmIGdldF9sZ19kaXIoc2VsZikgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiZW52LmdldF9sZ19kaXIoKS5kZWNvZGUoY2hhcnNldCkKKworICAgICAgICBkZWYgZ2V0X3RtcF9kaXIoc2VsZikgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiZW52LmdldF90bXBfZGlyKCkuZGVjb2RlKGNoYXJzZXQpCisKKyAgICAgICAgZGVmIGdldF9kYXRhX2RpcnMoc2VsZikgOgorICAgICAgICAgICAgIyBIYXZlIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiBhbmQgbm90CisgICAgICAgICAgICAjIGdlbmVyYXRvcnMsIGJlY2F1c2Ugd2UgYXJlIHN1cHBvcnRpbmcgUHl0aG9uIDIuMy4KKyAgICAgICAgICAgIHJldHVybiB0dXBsZSgKKyAgICAgICAgICAgICAgICBbaS5kZWNvZGUoY2hhcnNldCkgZm9yIGkgaW4gc2VsZi5fZGJlbnYuZ2V0X2RhdGFfZGlycygpXSkKKwogICAgIGNsYXNzIERCU2VxdWVuY2VfcHkzayhvYmplY3QpIDoKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiLCAqYXJncywgKiprd2FyZ3MpIDoKICAgICAgICAgICAgIHNlbGYuX2RiPWRiCkBAIC0zMzIsNyArNDE5LDEwIEBACiAKICAgICBic2RkYi5fZGIuREJFbnZfb3JpZyA9IGJzZGRiLl9kYi5EQkVudgogICAgIGJzZGRiLl9kYi5EQl9vcmlnID0gYnNkZGIuX2RiLkRCCi0gICAgYnNkZGIuX2RiLkRCU2VxdWVuY2Vfb3JpZyA9IGJzZGRiLl9kYi5EQlNlcXVlbmNlCisgICAgaWYgYnNkZGIuZGIudmVyc2lvbigpIDw9ICg0LCAzKSA6CisgICAgICAgIGJzZGRiLl9kYi5EQlNlcXVlbmNlX29yaWcgPSBOb25lCisgICAgZWxzZSA6CisgICAgICAgIGJzZGRiLl9kYi5EQlNlcXVlbmNlX29yaWcgPSBic2RkYi5fZGIuREJTZXF1ZW5jZQogCiAgICAgZGVmIGRvX3Byb3h5X2RiX3B5M2soZmxhZykgOgogICAgICAgICBmbGFnMiA9IGRvX3Byb3h5X2RiX3B5M2suZmxhZwpAQCAtMzk2LDggKzQ4NiwxMiBAQAogICAgIHByaW50ICdic2RkYi5kYi52ZXJzaW9uKCk6ICAgJXMnICUgKGRiLnZlcnNpb24oKSwgKQogICAgIHByaW50ICdic2RkYi5kYi5fX3ZlcnNpb25fXzogJXMnICUgZGIuX192ZXJzaW9uX18KICAgICBwcmludCAnYnNkZGIuZGIuY3ZzaWQ6ICAgICAgICVzJyAlIGRiLmN2c2lkCi0gICAgcHJpbnQgJ3B5IG1vZHVsZTogICAgICAgICAgICAlcycgJSBic2RkYi5fX2ZpbGVfXwotICAgIHByaW50ICdleHRlbnNpb24gbW9kdWxlOiAgICAgJXMnICUgYnNkZGIuX2JzZGRiLl9fZmlsZV9fCisKKyAgICAjIFdvcmthcm91bmQgZm9yIGFsbG93aW5nIGdlbmVyYXRpbmcgYW4gRUdHcyBhcyBhIFpJUCBmaWxlcy4KKyAgICBzdWZmaXg9Il9fIgorICAgIHByaW50ICdweSBtb2R1bGU6ICAgICAgICAgICAgJXMnICUgZ2V0YXR0cihic2RkYiwgIl9fZmlsZSIrc3VmZml4KQorICAgIHByaW50ICdleHRlbnNpb24gbW9kdWxlOiAgICAgJXMnICUgZ2V0YXR0cihic2RkYiwgIl9fZmlsZSIrc3VmZml4KQorCiAgICAgcHJpbnQgJ3B5dGhvbiB2ZXJzaW9uOiAgICAgICAlcycgJSBzeXMudmVyc2lvbgogICAgIHByaW50ICdNeSBwaWQ6ICAgICAgICAgICAgICAgJXMnICUgb3MuZ2V0cGlkKCkKICAgICBwcmludCAnLT0nICogMzgKQEAgLTQ4MSw2ICs1NzUsOCBAQAogICAgIHRlc3RfbW9kdWxlcyA9IFsKICAgICAgICAgJ3Rlc3RfYXNzb2NpYXRlJywKICAgICAgICAgJ3Rlc3RfYmFzaWNzJywKKyAgICAgICAgJ3Rlc3RfZGJlbnYnLAorICAgICAgICAndGVzdF9kYicsCiAgICAgICAgICd0ZXN0X2NvbXBhcmUnLAogICAgICAgICAndGVzdF9jb21wYXQnLAogICAgICAgICAndGVzdF9jdXJzb3JfcGdldF9idWcnLApAQCAtNDg5LDYgKzU4NSw3IEBACiAgICAgICAgICd0ZXN0X2RidGFibGVzJywKICAgICAgICAgJ3Rlc3RfZGlzdHJpYnV0ZWRfdHJhbnNhY3Rpb25zJywKICAgICAgICAgJ3Rlc3RfZWFybHlfY2xvc2UnLAorICAgICAgICAndGVzdF9maWxlaWQnLAogICAgICAgICAndGVzdF9nZXRfbm9uZScsCiAgICAgICAgICd0ZXN0X2pvaW4nLAogICAgICAgICAndGVzdF9sb2NrJywKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfYXNzb2NpYXRlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9hc3NvY2lhdGUucHkKaW5kZXggYzBkYTNlOC4uN2E0OWUxMSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9hc3NvY2lhdGUucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9hc3NvY2lhdGUucHkKQEAgLTE0OCwxMiArMTQ4LDggQEAKICAgICAgICAgc2VsZi5zZWNEQiA9IE5vbmUKICAgICAgICAgc2VsZi5wcmltYXJ5ID0gZGIuREIoc2VsZi5lbnYpCiAgICAgICAgIHNlbGYucHJpbWFyeS5zZXRfZ2V0X3JldHVybnNfbm9uZSgyKQotICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDEpOgotICAgICAgICAgICAgc2VsZi5wcmltYXJ5Lm9wZW4oc2VsZi5maWxlbmFtZSwgInByaW1hcnkiLCBzZWxmLmRidHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5kYkZsYWdzLCB0eG49dHhuKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5wcmltYXJ5Lm9wZW4oc2VsZi5maWxlbmFtZSwgInByaW1hcnkiLCBzZWxmLmRidHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5kYkZsYWdzKQorICAgICAgICBzZWxmLnByaW1hcnkub3BlbihzZWxmLmZpbGVuYW1lLCAicHJpbWFyeSIsIHNlbGYuZGJ0eXBlLAorICAgICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCB8IHNlbGYuZGJGbGFncywgdHhuPXR4bikKIAogICAgIGRlZiBjbG9zZURCKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmN1cjoKQEAgLTE2OSwxMiArMTY1LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYucHJpbWFyeQogCiAKLSAgICBkZWYgdGVzdDAxX2Fzc29jaWF0ZVdpdGhEQihzZWxmKToKLSAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAxX2Fzc29jaWF0ZVdpdGhEQi4uLiIgJSBcCi0gICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotCisgICAgZGVmIF9hc3NvY2lhdGVXaXRoREIoc2VsZiwgZ2V0R2VucmUpOgogICAgICAgICBzZWxmLmNyZWF0ZURCKCkKIAogICAgICAgICBzZWxmLnNlY0RCID0gZGIuREIoc2VsZi5lbnYpCkBAIC0xODIsMTkgKzE3MywyMSBAQAogICAgICAgICBzZWxmLnNlY0RCLnNldF9nZXRfcmV0dXJuc19ub25lKDIpCiAgICAgICAgIHNlbGYuc2VjREIub3BlbihzZWxmLmZpbGVuYW1lLCAic2Vjb25kYXJ5IiwgZGIuREJfQlRSRUUsCiAgICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5kYkZsYWdzKQotICAgICAgICBzZWxmLmdldERCKCkuYXNzb2NpYXRlKHNlbGYuc2VjREIsIHNlbGYuZ2V0R2VucmUpCisgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgZ2V0R2VucmUpCiAKICAgICAgICAgc2VsZi5hZGREYXRhVG9EQihzZWxmLmdldERCKCkpCiAKICAgICAgICAgc2VsZi5maW5pc2hfdGVzdChzZWxmLnNlY0RCKQogCi0KLSAgICBkZWYgdGVzdDAyX2Fzc29jaWF0ZUFmdGVyREIoc2VsZik6CisgICAgZGVmIHRlc3QwMV9hc3NvY2lhdGVXaXRoREIoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMl9hc3NvY2lhdGVBZnRlckRCLi4uIiAlIFwKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMV9hc3NvY2lhdGVXaXRoREIuLi4iICUgXAogICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAorICAgICAgICByZXR1cm4gc2VsZi5fYXNzb2NpYXRlV2l0aERCKHNlbGYuZ2V0R2VucmUpCisKKyAgICBkZWYgX2Fzc29jaWF0ZUFmdGVyREIoc2VsZiwgZ2V0R2VucmUpIDoKICAgICAgICAgc2VsZi5jcmVhdGVEQigpCiAgICAgICAgIHNlbGYuYWRkRGF0YVRvREIoc2VsZi5nZXREQigpKQogCkBAIC0yMDQsMTAgKzE5NywzNSBAQAogICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCB8IHNlbGYuZGJGbGFncykKIAogICAgICAgICAjIGFkZGluZyB0aGUgREJfQ1JFQVRFIGZsYWcgd2lsbCBjYXVzZSBpdCB0byBpbmRleCBleGlzdGluZyByZWNvcmRzCi0gICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSwgZGIuREJfQ1JFQVRFKQorICAgICAgICBzZWxmLmdldERCKCkuYXNzb2NpYXRlKHNlbGYuc2VjREIsIGdldEdlbnJlLCBkYi5EQl9DUkVBVEUpCiAKICAgICAgICAgc2VsZi5maW5pc2hfdGVzdChzZWxmLnNlY0RCKQogCisgICAgZGVmIHRlc3QwMl9hc3NvY2lhdGVBZnRlckRCKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDJfYXNzb2NpYXRlQWZ0ZXJEQi4uLiIgJSBcCisgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NvY2lhdGVBZnRlckRCKHNlbGYuZ2V0R2VucmUpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpOgorICAgICAgICBkZWYgdGVzdDAzX2Fzc29jaWF0ZVdpdGhEQihzZWxmKToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAzX2Fzc29jaWF0ZVdpdGhEQi4uLiIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Fzc29jaWF0ZVdpdGhEQihzZWxmLmdldEdlbnJlTGlzdCkKKworICAgICAgICBkZWYgdGVzdDA0X2Fzc29jaWF0ZUFmdGVyREIoc2VsZik6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwNF9hc3NvY2lhdGVBZnRlckRCLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXNzb2NpYXRlQWZ0ZXJEQihzZWxmLmdldEdlbnJlTGlzdCkKKwogCiAgICAgZGVmIGZpbmlzaF90ZXN0KHNlbGYsIHNlY0RCLCB0eG49Tm9uZSk6CiAgICAgICAgICMgJ0JsdWVzJyBzaG91bGQgbm90IGJlIGluIHRoZSBzZWNvbmRhcnkgZGF0YWJhc2UKQEAgLTIxNSw3ICsyMzMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHMsIE5vbmUsIHZhbHMpCiAKICAgICAgICAgdmFscyA9IHNlY0RCLnBnZXQoJ1Vua25vd24nLCB0eG49dHhuKQotICAgICAgICBzZWxmLmFzc2VydF8odmFsc1swXSA9PSA5OSBvciB2YWxzWzBdID09ICc5OScsIHZhbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWxzWzBdID09IDk5IG9yIHZhbHNbMF0gPT0gJzk5JywgdmFscykKICAgICAgICAgdmFsc1sxXS5pbmRleCgnVW5rbm93bicpCiAgICAgICAgIHZhbHNbMV0uaW5kZXgoJ1VubmFtZWQnKQogICAgICAgICB2YWxzWzFdLmluZGV4KCd1bmtub3duJykKQEAgLTIyNyw5ICsyNDUsOSBAQAogICAgICAgICByZWMgPSBzZWxmLmN1ci5maXJzdCgpCiAgICAgICAgIHdoaWxlIHJlYyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIHR5cGUoc2VsZi5rZXl0eXBlKSA9PSB0eXBlKCcnKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KHJlY1swXSkpICAjIGZvciBwcmltYXJ5IGRiLCBrZXkgaXMgYSBudW1iZXIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHJlY1swXSkpICAjIGZvciBwcmltYXJ5IGRiLCBrZXkgaXMgYSBudW1iZXIKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHJlY1swXSBhbmQgdHlwZShyZWNbMF0pID09IHR5cGUoMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlY1swXSBhbmQgdHlwZShyZWNbMF0pID09IHR5cGUoMCkpCiAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCByZWMKQEAgLTI0NCw3ICsyNjIsNyBAQAogCiAgICAgICAgICMgdGVzdCBjdXJzb3IgcGdldAogICAgICAgICB2YWxzID0gc2VsZi5jdXIucGdldCgnVW5rbm93bicsIGZsYWdzPWRiLkRCX0xBU1QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWxzWzFdID09IDk5IG9yIHZhbHNbMV0gPT0gJzk5JywgdmFscykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHNbMV0gPT0gOTkgb3IgdmFsc1sxXSA9PSAnOTknLCB2YWxzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHNbMF0sICdVbmtub3duJykKICAgICAgICAgdmFsc1syXS5pbmRleCgnVW5rbm93bicpCiAgICAgICAgIHZhbHNbMl0uaW5kZXgoJ1VubmFtZWQnKQpAQCAtMjc3LDYgKzI5NSwxMiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGdlbnJlCiAKKyAgICBkZWYgZ2V0R2VucmVMaXN0KHNlbGYsIHByaUtleSwgUHJpRGF0YSkgOgorICAgICAgICB2ID0gc2VsZi5nZXRHZW5yZShwcmlLZXksIFByaURhdGEpCisgICAgICAgIGlmIHR5cGUodikgPT0gdHlwZSgiIikgOgorICAgICAgICAgICAgdiA9IFt2XQorICAgICAgICByZXR1cm4gdgorCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTMyMiwxMCArMzQ2LDcgQEAKICAgICAgICAgICAgIHNlbGYuc2VjREIuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKICAgICAgICAgICAgIHNlbGYuc2VjREIub3BlbihzZWxmLmZpbGVuYW1lLCAic2Vjb25kYXJ5IiwgZGIuREJfQlRSRUUsCiAgICAgICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCwgdHhuPXR4bikKLSAgICAgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwxKToKLSAgICAgICAgICAgICAgICBzZWxmLmdldERCKCkuYXNzb2NpYXRlKHNlbGYuc2VjREIsIHNlbGYuZ2V0R2VucmUsIHR4bj10eG4pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSkKKyAgICAgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSwgdHhuPXR4bikKIAogICAgICAgICAgICAgc2VsZi5hZGREYXRhVG9EQihzZWxmLmdldERCKCksIHR4bj10eG4pCiAgICAgICAgIGV4Y2VwdDoKQEAgLTQyNiw4ICs0NDcsNyBAQAogICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEFzc29jaWF0ZUJUcmVlVGVzdENhc2UpKQogICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEFzc29jaWF0ZVJlY25vVGVzdENhc2UpKQogCi0gICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAxKToKLSAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQXNzb2NpYXRlQlRyZWVUeG5UZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQXNzb2NpYXRlQlRyZWVUeG5UZXN0Q2FzZSkpCiAKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShTaGVsdmVBc3NvY2lhdGVIYXNoVGVzdENhc2UpKQogICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFNoZWx2ZUFzc29jaWF0ZUJUcmVlVGVzdENhc2UpKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9iYXNpY3MucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weQppbmRleCAyMWIxZjhmLi40ZDQzMzkwIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weQpAQCAtMzMsNiArMzMsNyBAQAogCiBjbGFzcyBCYXNpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkYnR5cGUgICAgICAgPSBkYi5EQl9VTktOT1dOICAjIG11c3QgYmUgc2V0IGluIGRlcml2ZWQgY2xhc3MKKyAgICBjYWNoZXNpemUgICAgPSAoMCwgMTAyNCoxMDI0LCAxKQogICAgIGRib3BlbmZsYWdzICA9IDAKICAgICBkYnNldGZsYWdzICAgPSAwCiAgICAgZGJtb2RlICAgICAgID0gMDY2MApAQCAtNDMsNiArNDQsMTMgQEAKIAogICAgIF9udW1LZXlzICAgICAgPSAxMDAyICAgICMgUFJJVkFURS4gIE5PVEU6IG11c3QgYmUgYW4gZXZlbiB2YWx1ZQogCisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisgICAgICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihleHByLG1zZz1tc2cpCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGlmIHNlbGYudXNlRW52OgogICAgICAgICAgICAgc2VsZi5ob21lRGlyPWdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCkBAIC01MCw3ICs1OCw4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5lbnYgPSBkYi5EQkVudigpCiAgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX21heCgxMDI0KjEwMjQpCiAgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3R4X21heCgzMCkKLSAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdHhfdGltZXN0YW1wKGludCh0aW1lLnRpbWUoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5fdCA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdHhfdGltZXN0YW1wKHNlbGYuX3QpCiAgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2ZsYWdzKHNlbGYuZW52c2V0ZmxhZ3MsIDEpCiAgICAgICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIHNlbGYuZW52ZmxhZ3MgfCBkYi5EQl9DUkVBVEUpCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9ICJ0ZXN0IgpAQCAtNjQsNiArNzMsMTUgQEAKIAogICAgICAgICAjIGNyZWF0ZSBhbmQgb3BlbiB0aGUgREIKICAgICAgICAgc2VsZi5kID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGlmIG5vdCBzZWxmLnVzZUVudiA6CisgICAgICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDIpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmQuc2V0X2NhY2hlc2l6ZSgqc2VsZi5jYWNoZXNpemUpCisgICAgICAgICAgICAgICAgY2FjaGVzaXplID0gc2VsZi5kLmdldF9jYWNoZXNpemUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVzaXplWzBdLCBzZWxmLmNhY2hlc2l6ZVswXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZVsyXSwgc2VsZi5jYWNoZXNpemVbMl0pCisgICAgICAgICAgICAgICAgIyBCZXJrZWxleSBEQiBleHBhbmRzIHRoZSBjYWNoZSAyNSUgYWNjb3VudGluZyBvdmVyaGVhZCwKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBjYWNoZSBpcyBzbWFsbC4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyNSwgaW50KDEwMC4wKmNhY2hlc2l6ZVsxXS9zZWxmLmNhY2hlc2l6ZVsxXSkpCiAgICAgICAgIHNlbGYuZC5zZXRfZmxhZ3Moc2VsZi5kYnNldGZsYWdzKQogICAgICAgICBpZiBzZWxmLmRibmFtZToKICAgICAgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUsIHNlbGYuZGJuYW1lLCBzZWxmLmRidHlwZSwKQEAgLTc0LDYgKzkyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBkYnR5cGUgPSBzZWxmLmRidHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gc2VsZi5kYm9wZW5mbGFnc3xkYi5EQl9DUkVBVEUpCiAKKyAgICAgICAgaWYgbm90IHNlbGYudXNlRW52OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5zZXRfY2FjaGVzaXplLCAqc2VsZi5jYWNoZXNpemUpCisKICAgICAgICAgc2VsZi5wb3B1bGF0ZURCKCkKIAogCkBAIC0xMzksNyArMTYxLDExIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGQuZGVsZXRlKCdhYmNkJykKICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24iKQpAQCAtMTU4LDcgKzE4NCwxMSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkLnB1dCgnYWJjZCcsICd0aGlzIHNob3VsZCBmYWlsJywgZmxhZ3M9ZGIuREJfTk9PVkVSV1JJVEUpCiAgICAgICAgIGV4Y2VwdCBkYi5EQktleUV4aXN0RXJyb3IsIHZhbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX0tFWUVYSVNUKQorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX0tFWUVYSVNUKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfS0VZRVhJU1QpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKQEAgLTI2OCw2ICsyOTgsMjEgQEAKICAgICAgICAgICAgIHBwcmludCh2YWx1ZXNbOjEwXSkKIAogCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB0ZXN0MDJiX1NlcXVlbmNlTWV0aG9kcyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorCisgICAgICAgIGZvciBrZXkgaW4gWycwMDAyJywgJzAxMDEnLCAnMDQwMScsICcwNzAxJywgJzA5OTgnXToKKyAgICAgICAgICAgIGRhdGEgPSBkW2tleV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5tYWtlRGF0YShrZXkpKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCBkYXRhCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZCwgIl9fY29udGFpbnNfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIjA0MDEiIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIjEyMzQiIGluIGQpCisKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI5Myw3ICszMzgsMTEgQEAKICAgICAgICAgICAgICAgICByZWMgPSBjLm5leHQoKQogICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgogICAgICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQogICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgICAgICAgICAgICAgcmVjID0gTm9uZQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zMTQsNyArMzYzLDExIEBACiAgICAgICAgICAgICAgICAgcmVjID0gYy5wcmV2KCkKICAgICAgICAgICAgIGV4Y2VwdCBkYi5EQk5vdEZvdW5kRXJyb3IsIHZhbDoKICAgICAgICAgICAgICAgICBpZiBnZXRfcmFpc2VzX2Vycm9yOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgICAgICAgICAgICAgIHJlYyA9IE5vbmUKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMzM3LDcgKzM5MCwxMSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuID0gYy5zZXQoJ2JhZCBrZXknKQogICAgICAgICBleGNlcHQgZGIuREJOb3RGb3VuZEVycm9yLCB2YWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZXRfcmFpc2VzX2Vycm9yOgpAQCAtMzUxLDcgKzQwOCwxMSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuID0gYy5nZXRfYm90aCgnMDQwNCcsICdiYWQgZGF0YScpCiAgICAgICAgIGV4Y2VwdCBkYi5EQk5vdEZvdW5kRXJyb3IsIHZhbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6CkBAIC0zODAsNyArNDQxLDExIEBACiAgICAgICAgICAgICByZWMgPSBjLmN1cnJlbnQoKQogICAgICAgICBleGNlcHQgZGIuREJLZXlFbXB0eUVycm9yLCB2YWw6CiAgICAgICAgICAgICBpZiBnZXRfcmFpc2VzX2Vycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFTVBUWSkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIERCS2V5RW1wdHlFcnJvciIpCkBAIC00MjUsNyArNDkwLDExIEBACiAgICAgICAgICAgICAgICAgIyBhIGJ1ZyBtYXkgY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuLi4KICAgICAgICAgICAgICAgICBnZXRhdHRyKGMsIG1ldGhvZCkoKmFyZ3MpCiAgICAgICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgdmFsOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIDApCisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgMCkKKyAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgMCkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24gcmFpc2VkIHdoZW4gdXNpbmcgYSBidWdneSBjdXJzb3IncyIKQEAgLTQ3Nyw2ICs1NDYsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGQsIDEpCiAgICAgICAgIHNlbGYudGVzdDAzX1NpbXBsZUN1cnNvclN0dWZmKGdldF9yYWlzZXNfZXJyb3I9MCwgc2V0X3JhaXNlc19lcnJvcj0wKQogCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA2KToKKyAgICAgICAgZGVmIHRlc3QwM2RfU2ltcGxlQ3Vyc29yUHJpb3JpdHkoc2VsZikgOgorICAgICAgICAgICAgYyA9IHNlbGYuZC5jdXJzb3IoKQorICAgICAgICAgICAgYy5zZXRfcHJpb3JpdHkoZGIuREJfUFJJT1JJVFlfVkVSWV9MT1cpICAjIFBvc2l0aW9uYWwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfUFJJT1JJVFlfVkVSWV9MT1csIGMuZ2V0X3ByaW9yaXR5KCkpCisgICAgICAgICAgICBjLnNldF9wcmlvcml0eShwcmlvcml0eT1kYi5EQl9QUklPUklUWV9ISUdIKSAgIyBLZXl3b3JkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX1BSSU9SSVRZX0hJR0gsIGMuZ2V0X3ByaW9yaXR5KCkpCisgICAgICAgICAgICBjLmNsb3NlKCkKKwogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBkZWYgdGVzdDA0X1BhcnRpYWxHZXRBbmRQdXQoc2VsZik6CkBAIC01MzAsMTEgKzYwOCwxMSBAQAogICAgICAgICBkID0gc2VsZi5kCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3Q5OV9UcnVuY2F0ZS4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA2X1RydW5jYXRlLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAKICAgICAgICAgZC5wdXQoImFiY2RlIiwgIkFCQ0RFIik7CiAgICAgICAgIG51bSA9IGQudHJ1bmNhdGUoKQotICAgICAgICBzZWxmLmFzc2VydF8obnVtID49IDEsICJ0cnVuY2F0ZSByZXR1cm5lZCA8PSAwIG9uIG5vbi1lbXB0eSBkYXRhYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW0gPj0gMSwgInRydW5jYXRlIHJldHVybmVkIDw9IDAgb24gbm9uLWVtcHR5IGRhdGFiYXNlIikKICAgICAgICAgbnVtID0gZC50cnVuY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtLCAwLAogICAgICAgICAgICAgICAgICJ0cnVuY2F0ZSBvbiBlbXB0eSBEQiByZXR1cm5lZCBub256ZXJvICglcikiICUgKG51bSwpKQpAQCAtNTUwLDYgKzYyOCwzMyBAQAogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNik6CisgICAgICAgIGRlZiB0ZXN0MDhfZXhpc3RzKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZC5wdXQoImFiY2RlIiwgIkFCQ0RFIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmQuZXhpc3RzKCJhYmNkZSIpID09IFRydWUsCisgICAgICAgICAgICAgICAgICAgICJEQi0+ZXhpc3RzKCkgcmV0dXJucyB3cm9uZyB2YWx1ZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kLmV4aXN0cygieCIpID09IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAiREItPmV4aXN0cygpIHJldHVybnMgd3JvbmcgdmFsdWUiKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNyk6CisgICAgICAgIGRlZiB0ZXN0X2NvbXBhY3Qoc2VsZikgOgorICAgICAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkLmNvbXBhY3QoZmxhZ3M9ZGIuREJfRlJFRUxJU1RfT05MWSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGQuY29tcGFjdChmbGFncz1kYi5EQl9GUkVFTElTVF9PTkxZKSkKKyAgICAgICAgICAgIGQucHV0KCJhYmNkZSIsICJBQkNERSIpOworICAgICAgICAgICAgZC5wdXQoImJjZGUiLCAiQkNERSIpOworICAgICAgICAgICAgZC5wdXQoImFiYyIsICJBQkMiKTsKKyAgICAgICAgICAgIGQucHV0KCJtb250eSIsICJweXRob24iKTsKKyAgICAgICAgICAgIGQuZGVsZXRlKCJhYmMiKQorICAgICAgICAgICAgZC5kZWxldGUoImJjZGUiKQorICAgICAgICAgICAgZC5jb21wYWN0KHN0YXJ0PSdhYmNkZScsIHN0b3A9J21vbnR5JywgdHhuPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGNvbXBhY3RfZmlsbHBlcmNlbnQ9NDIsIGNvbXBhY3RfcGFnZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGFjdF90aW1lb3V0PTUwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICBmbGFncz1kYi5EQl9GUkVFTElTVF9PTkxZfGRiLkRCX0ZSRUVfU1BBQ0UpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01NzksMTMgKzY4NCwxMyBAQAogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiB0ZXN0MDhfRW52UmVtb3ZlQW5kUmVuYW1lKHNlbGYpOgorICAgIGRlZiB0ZXN0MDlfRW52UmVtb3ZlQW5kUmVuYW1lKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5lbnY6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCi0gICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDhfRW52UmVtb3ZlQW5kUmVuYW1lLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDlfRW52UmVtb3ZlQW5kUmVuYW1lLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAKICAgICAgICAgIyBjYW4ndCByZW5hbWUgb3IgcmVtb3ZlIGFuIG9wZW4gREIKICAgICAgICAgc2VsZi5kLmNsb3NlKCkKQEAgLTU5NCwxMCArNjk5LDYgQEAKICAgICAgICAgc2VsZi5lbnYuZGJyZW5hbWUoc2VsZi5maWxlbmFtZSwgTm9uZSwgbmV3bmFtZSkKICAgICAgICAgc2VsZi5lbnYuZGJyZW1vdmUobmV3bmFtZSkKIAotICAgICMgZGJyZW1vdmUgYW5kIGRicmVuYW1lIGFyZSBpbiA0LjEgYW5kIGxhdGVyCi0gICAgaWYgZGIudmVyc2lvbigpIDwgKDQsMSk6Ci0gICAgICAgIGRlbCB0ZXN0MDhfRW52UmVtb3ZlQW5kUmVuYW1lCi0KICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBCYXNpY0JUcmVlV2l0aEVudlRlc3RDYXNlKEJhc2ljV2l0aEVudlRlc3RDYXNlKToKQEAgLTYxMiw5ICs3MTMsMTQgQEAKIAogY2xhc3MgQmFzaWNUcmFuc2FjdGlvblRlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgogICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA0LCAwKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpOgogICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisKKyAgICBpZiAoc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KSkgb3IgKChzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKSkgYW5kCisgICAgICAgICAgICAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKSkpIDoKKyAgICAgICAgZGVmIGFzc2VydEluKHNlbGYsIGEsIGIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRUcnVlKGEgaW4gYiwgbXNnPW1zZykKIAogICAgIGRib3BlbmZsYWdzID0gZGIuREJfVEhSRUFEIHwgZGIuREJfQVVUT19DT01NSVQKICAgICB1c2VFbnYgPSAxCkBAIC02NzIsMTYgKzc3OCwxMyBAQAogICAgICAgICBzZWxmLnR4bi5jb21taXQoKQogCiAgICAgICAgICMgZmx1c2ggcGVuZGluZyB1cGRhdGVzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZW52LnR4bl9jaGVja3BvaW50ICgwLCAwLCAwKQotICAgICAgICBleGNlcHQgZGIuREJJbmNvbXBsZXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZW52LnR4bl9jaGVja3BvaW50ICgwLCAwLCAwKQogCiAgICAgICAgIHN0YXREaWN0ID0gc2VsZi5lbnYubG9nX3N0YXQoMCk7Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbWFnaWMnIGluIHN0YXREaWN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3ZlcnNpb24nIGluIHN0YXREaWN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2N1cl9maWxlJyBpbiBzdGF0RGljdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdyZWdpb25fbm93YWl0JyBpbiBzdGF0RGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWFnaWMnLCBzdGF0RGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbicsIHN0YXREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdjdXJfZmlsZScsIHN0YXREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdyZWdpb25fbm93YWl0Jywgc3RhdERpY3QpCiAKICAgICAgICAgIyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGxvZyBmaWxlIHByZXNlbnQ6CiAgICAgICAgIGxvZ3MgPSBzZWxmLmVudi5sb2dfYXJjaGl2ZShkYi5EQl9BUkNIX0FCUyB8IGRiLkRCX0FSQ0hfTE9HKQpAQCAtNjk3LDE2ICs4MDAsMzAgQEAKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgdGVzdDA4X1R4blRydW5jYXRlKHNlbGYpOgorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNik6CisgICAgICAgIGRlZiB0ZXN0MDhfZXhpc3RzKHNlbGYpIDoKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmQucHV0KCJhYmNkZSIsICJBQkNERSIsIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kLmV4aXN0cygiYWJjZGUiLCB0eG49dHhuKSA9PSBUcnVlLAorICAgICAgICAgICAgICAgICAgICAiREItPmV4aXN0cygpIHJldHVybnMgd3JvbmcgdmFsdWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZC5leGlzdHMoIngiLCB0eG49dHhuKSA9PSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIkRCLT5leGlzdHMoKSByZXR1cm5zIHdyb25nIHZhbHVlIikKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwOV9UeG5UcnVuY2F0ZShzZWxmKToKICAgICAgICAgZCA9IHNlbGYuZAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCi0gICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDhfVHhuVHJ1bmNhdGUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOV9UeG5UcnVuY2F0ZS4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCiAgICAgICAgIGQucHV0KCJhYmNkZSIsICJBQkNERSIpOwogICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQogICAgICAgICBudW0gPSBkLnRydW5jYXRlKHR4bikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG51bSA+PSAxLCAidHJ1bmNhdGUgcmV0dXJuZWQgPD0gMCBvbiBub24tZW1wdHkgZGF0YWJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtID49IDEsICJ0cnVuY2F0ZSByZXR1cm5lZCA8PSAwIG9uIG5vbi1lbXB0eSBkYXRhYmFzZSIpCiAgICAgICAgIG51bSA9IGQudHJ1bmNhdGUodHhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bSwgMCwKICAgICAgICAgICAgICAgICAidHJ1bmNhdGUgb24gZW1wdHkgREIgcmV0dXJuZWQgbm9uemVybyAoJXIpIiAlIChudW0sKSkKQEAgLTcxNCw3ICs4MzEsNyBAQAogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiB0ZXN0MDlfVHhuTGF0ZVVzZShzZWxmKToKKyAgICBkZWYgdGVzdDEwX1R4bkxhdGVVc2Uoc2VsZik6CiAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCiAgICAgICAgIHR4bi5hYm9ydCgpCiAgICAgICAgIHRyeToKQEAgLTczNCw2ICs4NTEsMzkgQEAKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkRCVHhuLmNvbW1pdCgpIGNhbGxlZCBhZnRlciBEQl9UWE4gbm8gbG9uZ2VyIHZhbGlkIHcvbyBhbiBleGNlcHRpb24iCiAKIAorICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCk6CisgICAgICAgIGRlZiB0ZXN0X3R4bl9uYW1lKHNlbGYpIDoKKyAgICAgICAgICAgIHR4bj1zZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eG4uZ2V0X25hbWUoKSwgIiIpCisgICAgICAgICAgICB0eG4uc2V0X25hbWUoIlhYWVkiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eG4uZ2V0X25hbWUoKSwgIlhYWVkiKQorICAgICAgICAgICAgdHhuLnNldF9uYW1lKCIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eG4uZ2V0X25hbWUoKSwgIiIpCisgICAgICAgICAgICB0eG4uYWJvcnQoKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgICAgIGRlZiB0ZXN0X3R4bl9zZXRfdGltZW91dChzZWxmKSA6CisgICAgICAgICAgICB0eG49c2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHR4bi5zZXRfdGltZW91dCgxMjM0NTY3LCBkYi5EQl9TRVRfTE9DS19USU1FT1VUKQorICAgICAgICAgICAgdHhuLnNldF90aW1lb3V0KDIzNDU2NzgsIGZsYWdzPWRiLkRCX1NFVF9UWE5fVElNRU9VVCkKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X2dldF90eF9tYXgoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudi5nZXRfdHhfbWF4KCksIDMwKQorCisgICAgICAgIGRlZiB0ZXN0X2dldF90eF90aW1lc3RhbXAoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudi5nZXRfdHhfdGltZXN0YW1wKCksIHNlbGYuX3QpCisKKworCiBjbGFzcyBCVHJlZVRyYW5zYWN0aW9uVGVzdENhc2UoQmFzaWNUcmFuc2FjdGlvblRlc3RDYXNlKToKICAgICBkYnR5cGUgPSBkYi5EQl9CVFJFRQogCkBAIC03NDgsMTEgKzg5OCwxMSBAQAogICAgIGRidHlwZSAgICAgPSBkYi5EQl9CVFJFRQogICAgIGRic2V0ZmxhZ3MgPSBkYi5EQl9SRUNOVU0KIAotICAgIGRlZiB0ZXN0MDhfUmVjbm9JbkJUcmVlKHNlbGYpOgorICAgIGRlZiB0ZXN0MDlfUmVjbm9JbkJUcmVlKHNlbGYpOgogICAgICAgICBkID0gc2VsZi5kCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOF9SZWNub0luQlRyZWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOV9SZWNub0luQlRyZWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAogICAgICAgICByZWMgPSBkLmdldCgyMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZWMpLCB0eXBlKCgpKSkKQEAgLTc4MiwxMSArOTMyLDExIEBACiBjbGFzcyBCYXNpY0RVUFRlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgogICAgIGRic2V0ZmxhZ3MgPSBkYi5EQl9EVVAKIAotICAgIGRlZiB0ZXN0MDlfRHVwbGljYXRlS2V5cyhzZWxmKToKKyAgICBkZWYgdGVzdDEwX0R1cGxpY2F0ZUtleXMoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLmQKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAotICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA5X0R1cGxpY2F0ZUtleXMuLi4iICUgXAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDEwX0R1cGxpY2F0ZUtleXMuLi4iICUgXAogICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KIAogICAgICAgICBkLnB1dCgiZHVwMCIsICJiZWZvcmUiKQpAQCAtODU1LDExICsxMDA1LDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gZGIuREJfQlRSRUUKIAotICAgIGRlZiB0ZXN0MTBfTXVsdGlEQihzZWxmKToKKyAgICBkZWYgdGVzdDExX011bHRpREIoc2VsZik6CiAgICAgICAgIGQxID0gc2VsZi5kCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKLSAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QxMF9NdWx0aURCLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MTFfTXVsdGlEQi4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCiAgICAgICAgIGQyID0gZGIuREIoc2VsZi5lbnYpCiAgICAgICAgIGQyLm9wZW4oc2VsZi5maWxlbmFtZSwgInNlY29uZCIsIHNlbGYuZGJ0eXBlLApAQCAtOTQ5LDcgKzEwOTksNyBAQAogCiBjbGFzcyBQcml2YXRlT2JqZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKSA6CiAgICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTk5Miw3ICsxMTQyLDcgQEAKIAogY2xhc3MgQ3Jhc2hBbmRCdXJuKHVuaXR0ZXN0LlRlc3RDYXNlKSA6CiAgICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTEwMDAsMTEgKzExNTAsMTIgQEAKICAgICAjICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMzA3CiAgICAgIyAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgZGIuREIsIE5vbmUsIDY1NTM1KQogCi0gICAgZGVmIHRlc3QwMl9EQkVudl9kZWFsbG9jKHNlbGYpOgotICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzODg1Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgZGIuREJFbnYsIH5kYi5EQl9SUENDTElFTlQpCi0gICAgICAgIGdjLmNvbGxlY3QoKQorICAgIGlmIGRiLnZlcnNpb24oKSA8ICg0LCA4KSA6CisgICAgICAgIGRlZiB0ZXN0MDJfREJFbnZfZGVhbGxvYyhzZWxmKToKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4ODUKKyAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIGRiLkRCRW52LCB+ZGIuREJfUlBDQ0xJRU5UKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCiAKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weQppbmRleCBjZTM3MjhhLi5kYjljZDc0IDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2NvbXBhcmUucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9jb21wYXJlLnB5CkBAIC0xMiw2ICsxMiwxMiBAQAogICAgICAgICBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aAogCiAKKyMgTmVlZGVkIGZvciBweXRob24gMy4gImNtcCIgdmFuaXNoZWQgaW4gMy4wLjEKK2RlZiBjbXAoYSwgYikgOgorICAgIGlmIGE9PWIgOiByZXR1cm4gMAorICAgIGlmIGE8YiA6IHJldHVybiAtMQorICAgIHJldHVybiAxCisKIGxleGljYWxfY21wID0gY21wCiAKIGRlZiBsb3dlcmNhc2VfY21wKGxlZnQsIHJpZ2h0KToKQEAgLTI2LDEyICszMiwxNiBAQAogX2V4cGVjdGVkX2xvd2VyY2FzZV90ZXN0X2RhdGEgPSBbJycsICdhJywgJ2FhYScsICdiJywgJ2MnLCAnQ0MnLCAnY2NjY2UnLCAnY2NjY2YnLCAnQ0NDUCddCiAKIGNsYXNzIENvbXBhcmF0b3JUZXN0cyAodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCisKICAgICBkZWYgY29tcGFyYXRvcl90ZXN0X2hlbHBlciAoc2VsZiwgY29tcGFyYXRvciwgZXhwZWN0ZWRfZGF0YSk6CiAgICAgICAgIGRhdGEgPSBleHBlY3RlZF9kYXRhWzpdCiAKICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA2LCAwKToKLSAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgogICAgICAgICAgICAgICAgIGRhdGEuc29ydChjb21wYXJhdG9yKQogICAgICAgICAgICAgZWxzZSA6CiAgICAgICAgICAgICAgICAgZGF0YS5zb3J0KGNtcD1jb21wYXJhdG9yKQpAQCAtNDcsNyArNTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBkYXRhMi5hcHBlbmQoaSkKICAgICAgICAgICAgIGRhdGEgPSBkYXRhMgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKGRhdGEsIGV4cGVjdGVkX2RhdGEsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGFyYXRvciBgJXMnIGlzIG5vdCByaWdodDogJXMgdnMuICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvbXBhcmF0b3IsIGV4cGVjdGVkX2RhdGEsIGRhdGEpKQogICAgIGRlZiB0ZXN0X2xleGljYWxfY29tcGFyYXRvciAoc2VsZik6CkBAIC02NSw2ICs3NSwxNSBAQAogICAgIGVudiA9IE5vbmUKICAgICBkYiA9IE5vbmUKIAorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQorCisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywwKSkgYW5kCisgICAgICAgICAgICAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKSkpIDoKKyAgICAgICAgZGVmIGFzc2VydExlc3Moc2VsZiwgYSwgYiwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoYTxiLCBtc2c9bXNnKQorCiAgICAgZGVmIHNldFVwIChzZWxmKToKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJy5kYicKICAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKQEAgLTExNSwxNCArMTM0LDE0IEBACiAgICAgICAgICAgICByZWMgPSBjdXJzLmZpcnN0ICgpCiAgICAgICAgICAgICB3aGlsZSByZWM6CiAgICAgICAgICAgICAgICAga2V5LCBpZ25vcmUgPSByZWMKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUgKGluZGV4IDwgbGVuIChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGluZGV4LCBsZW4gKGV4cGVjdGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBtYW55IHZhbHVlcyByZXR1cm5lZCBmcm9tIGN1cnNvciIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAoZXhwZWN0ZWRbaW5kZXhdLCBrZXksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZFtpbmRleF0sIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB2YWx1ZSBgJXMnIGF0ICVkIGJ1dCBnb3QgYCVzJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdGVkW2luZGV4XSwgaW5kZXgsIGtleSkpCiAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKICAgICAgICAgICAgICAgICByZWMgPSBjdXJzLm5leHQgKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKGluZGV4LCBsZW4gKGV4cGVjdGVkKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXgsIGxlbiAoZXhwZWN0ZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBjdXJzb3IiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY3Vycy5jbG9zZSAoKQpAQCAtMTkzLDcgKzIxMiw4IEBACiAgICAgICAgICAgICBlcnJvck91dCA9IHRlbXAuZ2V0dmFsdWUoKQogICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NSZS5zZWFyY2goZXJyb3JPdXQpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBzdGRlcnIgb3V0cHV0OlxuIitlcnJvck91dCkKLSAgICAgICAgc3lzLmV4Y190cmFjZWJhY2sgPSBzeXMubGFzdF90cmFjZWJhY2sgPSBOb25lCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCkgOiAgIyBYWFg6IEhvdyB0byBkbyB0aGlzIGluIFB5M2sgPz8/CisgICAgICAgICAgICBzeXMuZXhjX3RyYWNlYmFjayA9IHN5cy5sYXN0X3RyYWNlYmFjayA9IE5vbmUKIAogICAgIGRlZiBfdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2V4Y2VwdGlvbiAoc2VsZik6CiAgICAgICAgIHNlbGYuc3RhcnRUZXN0ICgpCkBAIC0yMzcsOCArMjU3LDggQEAKICAgICAgICAgZGVmIG15X2NvbXBhcmUgKGEsIGIpOgogICAgICAgICAgICAgcmV0dXJuIDAKIAotICAgICAgICBzZWxmLnN0YXJ0VGVzdCAoKQotICAgICAgICBzZWxmLmNyZWF0ZURCIChteV9jb21wYXJlKQorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuY3JlYXRlREIobXlfY29tcGFyZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMgKFJ1bnRpbWVFcnJvciwgc2VsZi5kYi5zZXRfYnRfY29tcGFyZSwgbXlfY29tcGFyZSkKIAogZGVmIHRlc3Rfc3VpdGUgKCk6CmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2NvbXBhdC5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGF0LnB5CmluZGV4IDBiMGZhNzAuLjc2NzlmMTkgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGF0LnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfY29tcGF0LnB5CkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgcmVjCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGYuaGFzX2tleSgnZicpLCAnRXJyb3IsIG1pc3Npbmcga2V5IScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmhhc19rZXkoJ2YnKSwgJ0Vycm9yLCBtaXNzaW5nIGtleSEnKQogCiAgICAgICAgICMgdGVzdCB0aGF0IHNldF9sb2NhdGlvbigpIHJldHVybnMgdGhlIG5leHQgbmVhcmVzdCBrZXksIHZhbHVlCiAgICAgICAgICMgb24gYnRyZWUgZGF0YWJhc2VzIGFuZCByYWlzZXMgS2V5RXJyb3Igb24gb3RoZXJzLgpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9jdXJzb3JfcGdldF9idWcucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2N1cnNvcl9wZ2V0X2J1Zy5weQppbmRleCA2OGI2YTg3Li4yMmQzZGMxIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2N1cnNvcl9wZ2V0X2J1Zy5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2N1cnNvcl9wZ2V0X2J1Zy5weQpAQCAtMzcsMTIgKzM3LDEyIEBACiAgICAgZGVmIHRlc3RfcGdldChzZWxmKToKICAgICAgICAgY3Vyc29yID0gc2VsZi5zZWNvbmRhcnlfZGIuY3Vyc29yKCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoJ2VnZ3MnLCAnc2FsYWQnLCAnZWdncycpLCBjdXJzb3IucGdldChrZXk9J2VnZ3MnLCBmbGFncz1kYi5EQl9TRVQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoJ2VnZ3MnLCAnb21lbGV0JywgJ2VnZ3MnKSwgY3Vyc29yLnBnZXQoZGIuREJfTkVYVF9EVVApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdlZ2dzJywgJ3NhbGFkJywgJ2VnZ3MnKSwgY3Vyc29yLnBnZXQoa2V5PSdlZ2dzJywgZmxhZ3M9ZGIuREJfU0VUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2VnZ3MnLCAnb21lbGV0JywgJ2VnZ3MnKSwgY3Vyc29yLnBnZXQoZGIuREJfTkVYVF9EVVApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGN1cnNvci5wZ2V0KGRiLkRCX05FWFRfRFVQKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoJ2hhbScsICdzcGFtJywgJ2hhbScpLCBjdXJzb3IucGdldCgnaGFtJywgJ3NwYW0nLCBmbGFncz1kYi5EQl9TRVQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdoYW0nLCAnc3BhbScsICdoYW0nKSwgY3Vyc29yLnBnZXQoJ2hhbScsICdzcGFtJywgZmxhZ3M9ZGIuREJfU0VUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCiAKICAgICAgICAgY3Vyc29yLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYi5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzYTMyYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGIucHkKQEAgLTAsMCArMSwxNDIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zLCBnbG9iCisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgXAorICAgICAgICBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgREIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGltcG9ydCBzeXMKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpIDoKKyAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsbXNnPW1zZykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmRiCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5wYXRoKQorCitjbGFzcyBEQl9nZW5lcmFsKERCKSA6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X2J0X21pbmtleShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTcsIDEwOCwgMTAzMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X2J0X21pbmtleShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfYnRfbWlua2V5KCkpCisKKyAgICAgICAgZGVmIHRlc3RfbG9yZGVyKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2xvcmRlcigxMjM0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMjM0LCBzZWxmLmRiLmdldF9sb3JkZXIoKSkKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2xvcmRlcig0MzIxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MzIxLCBzZWxmLmRiLmdldF9sb3JkZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLCBzZWxmLmRiLnNldF9sb3JkZXIsIDkxODIpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpIDoKKyAgICAgICAgZGVmIHRlc3RfcHJpb3JpdHkoc2VsZikgOgorICAgICAgICAgICAgZmxhZ3MgPSBbZGIuREJfUFJJT1JJVFlfVkVSWV9MT1csIGRiLkRCX1BSSU9SSVRZX0xPVywKKyAgICAgICAgICAgICAgICAgICAgZGIuREJfUFJJT1JJVFlfREVGQVVMVCwgZGIuREJfUFJJT1JJVFlfSElHSCwKKyAgICAgICAgICAgICAgICAgICAgZGIuREJfUFJJT1JJVFlfVkVSWV9ISUdIXQorICAgICAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ3MgOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3ByaW9yaXR5KGZsYWcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnLCBzZWxmLmRiLmdldF9wcmlvcml0eSgpKQorCitjbGFzcyBEQl9oYXNoKERCKSA6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X2hfZmZhY3RvcihzZWxmKSA6CisgICAgICAgICAgICBmb3IgZmZhY3RvciBpbiBbNCwgMTYsIDI1Nl0gOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X2hfZmZhY3RvcihmZmFjdG9yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmZhY3Rvciwgc2VsZi5kYi5nZXRfaF9mZmFjdG9yKCkpCisKKyAgICAgICAgZGVmIHRlc3RfaF9uZWxlbShzZWxmKSA6CisgICAgICAgICAgICBmb3IgbmVsZW0gaW4gWzEsIDIsIDRdIDoKKyAgICAgICAgICAgICAgICBuZWxlbSA9IG5lbGVtKjEwMjQqMTAyNCAgIyBNaWxsaW9ucworICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X2hfbmVsZW0obmVsZW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZWxlbSwgc2VsZi5kYi5nZXRfaF9uZWxlbSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3BhZ2VzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSg5LCAxNykgOiAgIyBGcm9tIDUxMiB0byA2NTUzNgorICAgICAgICAgICAgICAgIGkgPSAxPDxpCisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcGFnZXNpemUoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZGIuZ2V0X3BhZ2VzaXplKCkpCisKKyAgICAgICAgICAgICMgVGhlIHZhbGlkIHZhbHVlcyBnb2VzIGZyb20gNTEyIHRvIDY1NTM2CisgICAgICAgICAgICAjIFRlc3QgMTMxMDcyIGJ5dGVzLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VsZi5kYi5zZXRfcGFnZXNpemUsIDE8PDE3KQorICAgICAgICAgICAgIyBUZXN0IDI1NiBieXRlcy4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIHNlbGYuZGIuc2V0X3BhZ2VzaXplLCAxPDw4KQorCitjbGFzcyBEQl90eG4oREIpIDoKKyAgICBkZWYgc2V0VXAoc2VsZikgOgorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9UWE4pCisgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmVudikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKSA6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmVudgorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMikgOgorICAgICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmRiLnNldF9mbGFncyhkYi5EQl9DSEtTVU0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX0NIS1NVTSwgc2VsZi5kYi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2ZsYWdzKGRiLkRCX1RYTl9OT1RfRFVSQUJMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfVFhOX05PVF9EVVJBQkxFIHwgZGIuREJfQ0hLU1VNLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmRiLmdldF9mbGFncygpKQorCitjbGFzcyBEQl9yZWNubyhEQikgOgorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMikgOgorICAgICAgICBkZWYgdGVzdF9yZV9wYWQoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWycgJywgJyonXSA6ICAjIENoZWNrIGNoYXJzCisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcmVfcGFkKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoaSksIHNlbGYuZGIuZ2V0X3JlX3BhZCgpKQorICAgICAgICAgICAgZm9yIGkgaW4gWzk3LCA2NV0gOiAgIyBDaGVjayBpbnRlZ2VycworICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX3BhZChpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfcGFkKCkpCisKKyAgICAgICAgZGVmIHRlc3RfcmVfZGVsaW0oc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWycgJywgJyonXSA6ICAjIENoZWNrIGNoYXJzCisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcmVfZGVsaW0oaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZChpKSwgc2VsZi5kYi5nZXRfcmVfZGVsaW0oKSkKKyAgICAgICAgICAgIGZvciBpIGluIFs5NywgNjVdIDogICMgQ2hlY2sgaW50ZWdlcnMKKyAgICAgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9kZWxpbShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfZGVsaW0oKSkKKworICAgICAgICBkZWYgdGVzdF9yZV9zb3VyY2Uoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWyJ0ZXN0IiwgInRlc3QyIiwgInRlc3QzIl0gOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX3NvdXJjZShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfc291cmNlKCkpCisKK2NsYXNzIERCX3F1ZXVlKERCKSA6CisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAyKSA6CisgICAgICAgIGRlZiB0ZXN0X3JlX2xlbihzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMzMsIDY1LCAzMDAsIDIwMDBdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9sZW4oaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZGIuZ2V0X3JlX2xlbigpKQorCisgICAgICAgIGRlZiB0ZXN0X3FfZXh0ZW50c2l6ZShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMSwgNjAsIDEwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZGIuc2V0X3FfZXh0ZW50c2l6ZShpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcV9leHRlbnRzaXplKCkpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJfZ2VuZXJhbCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJfdHhuKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQl9oYXNoKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQl9yZWNubykpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJfcXVldWUpKQorCisgICAgcmV0dXJuIHN1aXRlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2RiZW52LnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYmVudi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzI4MWRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYmVudi5weQpAQCAtMCwwICsxLDUxMyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MsIGdsb2IKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBcCisgICAgICAgIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBEQkVudih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW1wb3J0IHN5cworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQorCisgICAgICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZhaWxJZihleHByLG1zZz1tc2cpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmVudgorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworY2xhc3MgREJFbnZfZ2VuZXJhbChEQkVudikgOgorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNykgOgorICAgICAgICBkZWYgdGVzdF9sa19wYXJ0aXRpb25zKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMCwgMjAsIDQwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX3BhcnRpdGlvbnMoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9sa19wYXJ0aXRpb25zKCkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpIDoKKyAgICAgICAgZGVmIHRlc3RfdGhyZWFkKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxNiwgMTAwLCAxMDAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RocmVhZF9jb3VudChpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X3RocmVhZF9jb3VudCgpKQorCisgICAgICAgIGRlZiB0ZXN0X2NhY2hlX21heChzZWxmKSA6CisgICAgICAgICAgICBmb3Igc2l6ZSBpbiBbNjQsIDEyOF0gOgorICAgICAgICAgICAgICAgIHNpemUgPSBzaXplKjEwMjQqMTAyNCAgIyBNZWdhYnl0ZXMKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfY2FjaGVfbWF4KDAsIHNpemUpCisgICAgICAgICAgICAgICAgc2l6ZTIgPSBzZWxmLmVudi5nZXRfY2FjaGVfbWF4KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNpemUyWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplIDw9IHNpemUyWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKnNpemUgPiBzaXplMlsxXSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCkgOgorICAgICAgICBkZWYgdGVzdF9tdXRleF9zdGF0KHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MIHwKKyAgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0NLKQorICAgICAgICAgICAgc3RhdCA9IHNlbGYuZW52Lm11dGV4X3N0YXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJtdXRleF9pbnVzZV9tYXgiIGluIHN0YXQpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfZmlsZW1vZGUoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzA2MDAsIDA2NjAsIDA2NjZdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfZmlsZW1vZGUoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9sZ19maWxlbW9kZSgpKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCAzKSA6CisgICAgICAgIGRlZiB0ZXN0X21wX21heF9vcGVuZmQoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzE3LCAzMSwgNDJdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbXBfbWF4X29wZW5mZChpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X21wX21heF9vcGVuZmQoKSkKKworICAgICAgICBkZWYgdGVzdF9tcF9tYXhfd3JpdGUoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzEwMCwgMjAwLCAzMDBdIDoKKyAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMSwgMiwgM10gOgorICAgICAgICAgICAgICAgICAgICBqICo9IDEwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X21wX21heF93cml0ZShpLCBqKQorICAgICAgICAgICAgICAgICAgICB2PXNlbGYuZW52LmdldF9tcF9tYXhfd3JpdGUoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChpLCBqKSwgdikKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMikgOgorICAgICAgICBkZWYgdGVzdF9pbnZhbGlkX3R4bihzZWxmKSA6CisgICAgICAgICAgICAjIFRoaXMgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRyYW5zYWN0aW9ucworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIHNlbGYuZW52LnR4bl9iZWdpbikKKworICAgICAgICBkZWYgdGVzdF9tcF9tbWFwc2l6ZShzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTYsIDMyLCA2NF0gOgorICAgICAgICAgICAgICAgIGkgKj0gMTAyNCoxMDI0CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X21wX21tYXBzaXplKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbXBfbW1hcHNpemUoKSkKKworICAgICAgICBkZWYgdGVzdF90bXBfZGlyKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsiYSIsICJiYiIsICJjY2MiXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RtcF9kaXIoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF90bXBfZGlyKCkpCisKKyAgICAgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZikgOgorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2ZsYWdzKGRiLkRCX0FVVE9fQ09NTUlULCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9BVVRPX0NPTU1JVCwgc2VsZi5lbnYuZ2V0X2ZsYWdzKCkpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfZmxhZ3MoZGIuREJfVFhOX05PU1lOQywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfQVVUT19DT01NSVQgfCBkYi5EQl9UWE5fTk9TWU5DLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9mbGFncyhkYi5EQl9BVVRPX0NPTU1JVCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfVFhOX05PU1lOQywgc2VsZi5lbnYuZ2V0X2ZsYWdzKCkpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfZmxhZ3MoZGIuREJfVFhOX05PU1lOQywgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VsZi5lbnYuZ2V0X2ZsYWdzKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGtfbWF4X29iamVjdHMoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzEwMDAsIDIwMDAsIDMwMDBdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGtfbWF4X29iamVjdHMoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9sa19tYXhfb2JqZWN0cygpKQorCisgICAgICAgIGRlZiB0ZXN0X2xrX21heF9sb2NrcyhzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAwMCwgMjAwMCwgMzAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sa19tYXhfbG9ja3MoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9sa19tYXhfbG9ja3MoKSkKKworICAgICAgICBkZWYgdGVzdF9sa19tYXhfbG9ja2VycyhzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAwMCwgMjAwMCwgMzAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sa19tYXhfbG9ja2VycyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX21heF9sb2NrZXJzKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfcmVnaW9ubWF4KHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMjgsIDI1NiwgMTAyNF0gOgorICAgICAgICAgICAgICAgIGkgPSBpKjEwMjQqMTAyNAorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sZ19yZWdpb25tYXgoaSkKKyAgICAgICAgICAgICAgICBqID0gc2VsZi5lbnYuZ2V0X2xnX3JlZ2lvbm1heCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkgPD0gaikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMippID4gaikKKworICAgICAgICBkZWYgdGVzdF9sa19kZXRlY3Qoc2VsZikgOgorICAgICAgICAgICAgZmxhZ3M9IFtkYi5EQl9MT0NLX0RFRkFVTFQsIGRiLkRCX0xPQ0tfRVhQSVJFLCBkYi5EQl9MT0NLX01BWExPQ0tTLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9MT0NLX01JTkxPQ0tTLCBkYi5EQl9MT0NLX01JTldSSVRFLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9MT0NLX09MREVTVCwgZGIuREJfTE9DS19SQU5ET00sIGRiLkRCX0xPQ0tfWU9VTkdFU1RdCisKKyAgICAgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMykgOgorICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZChkYi5EQl9MT0NLX01BWFdSSVRFKQorCisgICAgICAgICAgICBmb3IgaSBpbiBmbGFncyA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX2RldGVjdChpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX2RldGVjdCgpKQorCisgICAgICAgIGRlZiB0ZXN0X2xnX2RpcihzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbImEiLCAiYmIiLCAiY2NjIiwgImRkZGQiXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX2RpcihpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xnX2RpcigpKQorCisgICAgICAgIGRlZiB0ZXN0X2xnX2JzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGxvZ19zaXplID0gNzAqMTAyNAorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX2JzaXplKGxvZ19zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmdldF9sZ19ic2l6ZSgpID49IGxvZ19zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmdldF9sZ19ic2l6ZSgpIDwgNCpsb2dfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9sZ19ic2l6ZSg0KmxvZ19zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmdldF9sZ19ic2l6ZSgpID49IDQqbG9nX3NpemUpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0Z2V0X2RhdGFfZGlycyhzZWxmKSA6CisgICAgICAgICAgICBkaXJzID0gKCJhIiwgImIiLCAiYyIsICJkIikKKyAgICAgICAgICAgIGZvciBpIGluIGRpcnMgOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9kYXRhX2RpcihpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzLCBzZWxmLmVudi5nZXRfZGF0YV9kaXJzKCkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0Z2V0X2NhY2hlc2l6ZShzZWxmKSA6CisgICAgICAgICAgICBjYWNoZXNpemUgPSAoMCwgNTEyKjEwMjQqMTAyNCwgMykKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9jYWNoZXNpemUoKmNhY2hlc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVzaXplLCBzZWxmLmVudi5nZXRfY2FjaGVzaXplKCkpCisKKyAgICAgICAgICAgIGNhY2hlc2l6ZSA9ICgwLCAxKjEwMjQqMTAyNCwgNSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9jYWNoZXNpemUoKmNhY2hlc2l6ZSkKKyAgICAgICAgICAgIGNhY2hlc2l6ZTIgPSBzZWxmLmVudi5nZXRfY2FjaGVzaXplKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVzaXplWzBdLCBjYWNoZXNpemUyWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemVbMl0sIGNhY2hlc2l6ZTJbMl0pCisgICAgICAgICAgICAjIEJlcmtlbGV5IERCIGV4cGFuZHMgdGhlIGNhY2hlIDI1JSBhY2NvdW50aW5nIG92ZXJoZWFkLAorICAgICAgICAgICAgIyBpZiB0aGUgY2FjaGUgaXMgc21hbGwuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyNSwgaW50KDEwMC4wKmNhY2hlc2l6ZTJbMV0vY2FjaGVzaXplWzFdKSkKKworICAgICAgICAgICAgIyBZb3UgY2FuIG5vdCBjaGFuZ2UgY29uZmlndXJhdGlvbiBhZnRlciBvcGVuaW5nCisgICAgICAgICAgICAjIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorICAgICAgICAgICAgY2FjaGVzaXplID0gKDAsIDIqMTAyNCoxMDI0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlc2l6ZSwgKmNhY2hlc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVzaXplMiwgc2VsZi5lbnYuZ2V0X2NhY2hlc2l6ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3NldF9jYWNoZXNpemVfZGJlbnZfZGIoc2VsZikgOgorICAgICAgICAgICAgIyBZb3UgY2FuIG5vdCBjb25maWd1cmUgdGhlIGNhY2hlc2l6ZSB1c2luZworICAgICAgICAgICAgIyB0aGUgZGF0YWJhc2UgaGFuZGxlLCBpZiB5b3UgYXJlIHVzaW5nIGFuIGVudmlyb25tZW50LgorICAgICAgICAgICAgZCA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgZC5zZXRfY2FjaGVzaXplLCAwLCAxMDI0KjEwMjQsIDEpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0Z2V0X3NobV9rZXkoc2VsZikgOgorICAgICAgICAgICAgc2htX2tleT0xMzcKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9zaG1fa2V5KHNobV9rZXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNobV9rZXksIHNlbGYuZW52LmdldF9zaG1fa2V5KCkpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfc2htX2tleShzaG1fa2V5KzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNobV9rZXkrMSwgc2VsZi5lbnYuZ2V0X3NobV9rZXkoKSkKKworICAgICAgICAgICAgIyBZb3UgY2FuIG5vdCBjaGFuZ2UgY29uZmlndXJhdGlvbiBhZnRlciBvcGVuaW5nCisgICAgICAgICAgICAjIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorICAgICAgICAgICAgIyBJZiB3ZSB0cnkgdG8gcmVjb25maWd1cmUgY2FjaGUgYWZ0ZXIgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICMgZW52aXJvbm1lbnQsIGNvcmUgZHVtcC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9zaG1fa2V5LCBzaG1fa2V5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG1fa2V5KzEsIHNlbGYuZW52LmdldF9zaG1fa2V5KCkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpIDoKKyAgICAgICAgZGVmIHRlc3RfbXV0ZXhfc2V0Z2V0X21heChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X21heCgpCisgICAgICAgICAgICB2MiA9IHYqMisxCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9tYXgodjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfbWF4KCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9tYXgodikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X21heCgpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfbWF4LCB2MikKKworICAgICAgICBkZWYgdGVzdF9tdXRleF9zZXRnZXRfaW5jcmVtZW50KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLmVudi5tdXRleF9nZXRfaW5jcmVtZW50KCkKKyAgICAgICAgICAgIHYyID0gMTI3CisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9pbmNyZW1lbnQodjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfaW5jcmVtZW50KCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9pbmNyZW1lbnQodikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X2luY3JlbWVudCgpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfaW5jcmVtZW50LCB2MikKKworICAgICAgICBkZWYgdGVzdF9tdXRleF9zZXRnZXRfdGFzX3NwaW5zKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnMoMCkgICMgRGVmYXVsdCA9IEJEQiBkZWNpZGVzCisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X3Rhc19zcGlucygpCisgICAgICAgICAgICB2MiA9IHYqMisxCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnModjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfdGFzX3NwaW5zKCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnModikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X3Rhc19zcGlucygpKQorCisgICAgICAgICAgICAjIEluIHRoaXMgY2FzZSwgeW91IGNhbiBjaGFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIyBhZnRlciBvcGVuaW5nIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUpCisgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfdGFzX3NwaW5zKHYyKQorCisgICAgICAgIGRlZiB0ZXN0X211dGV4X3NldGdldF9hbGlnbihzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X2FsaWduKCkKKyAgICAgICAgICAgIHYyID0gNjQKKyAgICAgICAgICAgIGlmIHYgPT0gNjQgOgorICAgICAgICAgICAgICAgIHYyID0gMTI4CisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9hbGlnbih2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjIsIHNlbGYuZW52Lm11dGV4X2dldF9hbGlnbigpKQorCisgICAgICAgICAgICAjIFJlcXVpcmVzIGEgbm9uemVybyBwb3dlciBvZiB0d28KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2FsaWduLCAxNykKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2FsaWduKDIqdjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIqdjIsIHNlbGYuZW52Lm11dGV4X2dldF9hbGlnbigpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24sIHYyKQorCisKK2NsYXNzIERCRW52X2xvZyhEQkVudikgOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPRykKKworICAgIGRlZiB0ZXN0X2xvZ19maWxlKHNlbGYpIDoKKyAgICAgICAgbG9nX2ZpbGUgPSBzZWxmLmVudi5sb2dfZmlsZSgoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImxvZy4wMDAwMDAwMDAxIiwgbG9nX2ZpbGVbLTE0Ol0pCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpIDoKKyAgICAgICAgIyBUaGUgdmVyc2lvbiB3aXRoIHRyYW5zYWN0aW9ucyBpcyBjaGVja2VkIGluIG90aGVyIHRlc3Qgb2JqZWN0CisgICAgICAgIGRlZiB0ZXN0X2xvZ19wcmludGYoc2VsZikgOgorICAgICAgICAgICAgbXNnID0gIlRoaXMgaXMgYSB0ZXN0Li4uIgorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2cpCisgICAgICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGluIChsb2djLmxhc3QoKVsxXSkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDcpIDoKKyAgICAgICAgZGVmIHRlc3RfbG9nX2NvbmZpZyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmVudi5sb2dfc2V0X2NvbmZpZyhkYi5EQl9MT0dfRFNZTkMgfCBkYi5EQl9MT0dfWkVSTywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVudi5sb2dfZ2V0X2NvbmZpZyhkYi5EQl9MT0dfRFNZTkMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPKSkKKyAgICAgICAgICAgIHNlbGYuZW52LmxvZ19zZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19EU1lOQykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPKSkKKworCitjbGFzcyBEQkVudl9sb2dfdHhuKERCRW52KSA6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBEQkVudi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX1RYTikKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNSkgOgorICAgICAgICBkZWYgdGVzdF90eF9tYXgoc2VsZikgOgorICAgICAgICAgICAgdHhucz1bXQorICAgICAgICAgICAgZGVmIHR4KCkgOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmVudi5nZXRfdHhfbWF4KCkpIDoKKyAgICAgICAgICAgICAgICAgICAgdHhucy5hcHBlbmQoc2VsZi5lbnYudHhuX2JlZ2luKCkpCisKKyAgICAgICAgICAgIHR4KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCB0eCkKKworICAgICAgICAgICAgIyBBYm9ydCB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSBnYXJiYWdlIGNvbGxlY3Rpb24sCisgICAgICAgICAgICAjIHRvIGF2b2lkICJ3YXJuaW5ncyIuCisgICAgICAgICAgICBmb3IgaSBpbiB0eG5zIDoKKyAgICAgICAgICAgICAgICBpLmFib3J0KCkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCkgOgorICAgICAgICAjIFRoZSB2ZXJzaW9uIHdpdGhvdXQgdHJhbnNhY3Rpb25zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdCBvYmplY3QKKyAgICAgICAgZGVmIHRlc3RfbG9nX3ByaW50ZihzZWxmKSA6CisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhIHRlc3QuLi4iCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2csIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgICAgIGxvZ2MubGFzdCgpICAjIFNraXAgdGhlIGNvbW1pdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpbiAobG9nYy5wcmV2KClbMV0pKQorCisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhbm90aGVyIHRlc3QuLi4iCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2csIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uYWJvcnQoKSAgIyBEbyBub3Qgc3RvcmUgdGhlIG5ldyBtZXNzYWdlCisgICAgICAgICAgICBsb2djLmxhc3QoKSAgIyBTa2lwIHRoZSBhYm9ydAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBub3QgaW4gKGxvZ2MucHJldigpWzFdKSkKKworICAgICAgICAgICAgbXNnID0gIlRoaXMgaXMgYSB0aGlyZCB0ZXN0Li4uIgorICAgICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHNlbGYuZW52LmxvZ19wcmludGYobXNnLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpICAjIERvIG5vdCBzdG9yZSB0aGUgbmV3IG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2MubGFzdCgpICAjIFNraXAgdGhlIGNvbW1pdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpbiAobG9nYy5wcmV2KClbMV0pKQorCisKK2NsYXNzIERCRW52X21lbXAoREJFbnYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPRykKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLmRiLm9wZW4oInRlc3QiLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUsIDA2NjApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBEQkVudi50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RfbWVtcF8xX3RyaWNrbGUoc2VsZikgOgorICAgICAgICBzZWxmLmRiLnB1dCgiaGkiLCAiYnllIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52Lm1lbXBfdHJpY2tsZSgxMDApID4gMCkKKworIyBQcmVzZXJ2ZSB0aGUgb3JkZXIsIGRvICJtZW1wX3RyaWNrbGUiIHRlc3QgZmlyc3QKKyAgICBkZWYgdGVzdF9tZW1wXzJfc3luYyhzZWxmKSA6CisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUiKQorICAgICAgICBzZWxmLmVudi5tZW1wX3N5bmMoKSAgIyBGdWxsIGZsdXNoCisgICAgICAgICMgTm90aGluZyB0byBkby4uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubWVtcF90cmlja2xlKDEwMCkgPT0gMCkKKworICAgICAgICBzZWxmLmRiLnB1dCgiaGkiLCAiYnllMiIpCisgICAgICAgIHNlbGYuZW52Lm1lbXBfc3luYygoMSwgMCkpICAjIE5PUCwgcHJvYmFibHkKKyAgICAgICAgIyBTb21ldGhpbmcgdG8gZG8uLi4gb3Igbm90CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVudi5tZW1wX3RyaWNrbGUoMTAwKSA+PSAwKQorCisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUzIikKKyAgICAgICAgc2VsZi5lbnYubWVtcF9zeW5jKCgxMjMsIDk5KSkgICMgRnVsbCBmbHVzaAorICAgICAgICAjIE5vdGhpbmcgdG8gZG8uLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52Lm1lbXBfdHJpY2tsZSgxMDApID09IDApCisKKyAgICBkZWYgdGVzdF9tZW1wX3N0YXRfMShzZWxmKSA6CisgICAgICAgIHN0YXRzID0gc2VsZi5lbnYubWVtcF9zdGF0KCkgICMgTm8gcGFyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzdGF0cyk9PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2FjaGVfbWlzcyIgaW4gc3RhdHNbMF0pCisgICAgICAgIHN0YXRzID0gc2VsZi5lbnYubWVtcF9zdGF0KGRiLkRCX1NUQVRfQ0xFQVIpICAjIFBvc2l0aW9uYWwgcGFyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjYWNoZV9taXNzIiBpbiBzdGF0c1swXSkKKyAgICAgICAgc3RhdHMgPSBzZWxmLmVudi5tZW1wX3N0YXQoZmxhZ3M9MCkgICMgS2V5d29yZCBwYXJhbQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNhY2hlX21pc3MiIGluIHN0YXRzWzBdKQorCisgICAgZGVmIHRlc3RfbWVtcF9zdGF0XzIoc2VsZikgOgorICAgICAgICBzdGF0cz1zZWxmLmVudi5tZW1wX3N0YXQoKVsxXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHN0YXRzKSk9PTEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ0ZXN0IiBpbiBzdGF0cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwYWdlX2luIiBpbiBzdGF0c1sidGVzdCJdKQorCitjbGFzcyBEQkVudl9sb2djdXJzb3IoREJFbnYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9UWE4pCisgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgc2VsZi5kYi5vcGVuKCJ0ZXN0IiwgZGIuREJfSEFTSCwgZGIuREJfQ1JFQVRFLCAwNjYwLCB0eG49dHhuKQorICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgZm9yIGkgaW4gWyIyIiwgIjgiLCAiMjAiXSA6CisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5kYi5wdXQoa2V5ID0gaSwgZGF0YSA9IGkqaW50KGkpLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBEQkVudi50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIF9jaGVja19yZXR1cm4oc2VsZiwgdmFsdWUpIDoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWUpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZVswXSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZVswXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlWzBdWzBdLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZVswXVsxXSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWVbMV0sIHN0cikpCisKKyAgICAjIFByZXNlcnZlIHRlc3Qgb3JkZXIKKyAgICBkZWYgdGVzdF8xX2ZpcnN0KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICB2ID0gbG9nYy5maXJzdCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDEsIDEpIDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih2WzFdKT4wKQorCisgICAgZGVmIHRlc3RfMl9sYXN0KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgdiA9IGxvZ2MubGFzdCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2ZpcnN0IDwgdlswXSkKKworICAgIGRlZiB0ZXN0XzNfbmV4dChzZWxmKSA6CisgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgbHNuX2xhc3QgPSBsb2djLmxhc3QoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2MubmV4dCgpLCBOb25lKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgdiA9IGxvZ2MubmV4dCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2ZpcnN0IDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9sYXN0ID4gdlswXSkKKworICAgICAgICB2MiA9IGxvZ2MubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MlswXSA+IHZbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fbGFzdCA+IHYyWzBdKQorCisgICAgICAgIHYzID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYzWzBdID4gdjJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fbGFzdCA+IHYzWzBdKQorCisgICAgZGVmIHRlc3RfNF9wcmV2KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2djLnByZXYoKSwgTm9uZSkKKyAgICAgICAgbHNuX2xhc3QgPSBsb2djLmxhc3QoKVswXQorICAgICAgICB2ID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2xhc3QgPiB2WzBdKQorCisgICAgICAgIHYyID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYyWzBdIDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9maXJzdCA8IHYyWzBdKQorCisgICAgICAgIHYzID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYzWzBdIDwgdjJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2M1swXSkKKworICAgIGRlZiB0ZXN0XzVfY3VycmVudChzZWxmKSA6CisgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgbG9nYy5maXJzdCgpCisgICAgICAgIHYgPSBsb2djLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGxvZ2MuY3VycmVudCgpKQorCisgICAgZGVmIHRlc3RfNl9zZXQoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIGxvZ2MuZmlyc3QoKQorICAgICAgICB2ID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCBsb2djLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCBsb2djLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBsb2djLnNldCh2WzBdKSkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Nsb3NlKHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsb2djLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJDdXJzb3JDbG9zZWRFcnJvciwgbG9nYy5uZXh0KQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfY2xvc2Uoc2VsZikgOgorICAgICAgICBsb2djID0gIFtzZWxmLmVudi5sb2dfY3Vyc29yKCkgZm9yIGkgaW4geHJhbmdlKDEwKV0KKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKSAgIyBUaGlzIGNsb3NlIHNob3VsZCBjbG9zZSB0b28gYWxsIGl0cyB0cmVlCisgICAgICAgIGZvciBpIGluIGxvZ2MgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJDdXJzb3JDbG9zZWRFcnJvciwgaS5uZXh0KQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X2dlbmVyYWwpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X21lbXApKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X2xvZ2N1cnNvcikpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJFbnZfbG9nKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQkVudl9sb2dfdHhuKSkKKworICAgIHJldHVybiBzdWl0ZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYnNoZWx2ZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJzaGVsdmUucHkKaW5kZXggMTNmOWNkMi4uYzAxMzVmZSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYnNoZWx2ZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Ric2hlbHZlLnB5CkBAIC0yLDEwICsyLDkgQEAKIFRlc3RDYXNlcyBmb3IgY2hlY2tpbmcgZGJTaGVsdmUgb2JqZWN0cy4KICIiIgogCi1pbXBvcnQgb3MsIHN0cmluZworaW1wb3J0IG9zLCBzdHJpbmcsIHN5cwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIAogCiBmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgZGJzaGVsdmUsIHRlc3Rfc3VwcG9ydCwgdmVyYm9zZSwgXApAQCAtMTMsNiArMTIsMTEgQEAKIAogCiAKK2lmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgIGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIHNldAorCisKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyBXZSB3YW50IHRoZSBvYmplY3RzIHRvIGJlIGNvbXBhcmFibGUgc28gd2UgY2FuIHRlc3QgZGJzaGVsdmUudmFsdWVzCkBAIC0yOSw4ICszMywxNyBAQAogCiAKIGNsYXNzIERCU2hlbHZlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCk6CisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQorCisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCkpIGFuZAorICAgICAgICAgICAgKHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikpKSA6CisgICAgICAgIGRlZiBhc3NlcnRJbihzZWxmLCBhLCBiLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIGIsIG1zZz1tc2cpCisKKwogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgogICAgICAgICAgICAgZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZG9fcHJveHlfZGJfcHkzawogICAgICAgICAgICAgc2VsZi5fZmxhZ19wcm94eV9kYl9weTNrID0gZG9fcHJveHlfZGJfcHkzayhGYWxzZSkKQEAgLTM4LDcgKzUxLDYgQEAKICAgICAgICAgc2VsZi5kb19vcGVuKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgogICAgICAgICAgICAgZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZG9fcHJveHlfZGJfcHkzawogICAgICAgICAgICAgZG9fcHJveHlfZGJfcHkzayhzZWxmLl9mbGFnX3Byb3h5X2RiX3B5M2spCkBAIC00OCw3ICs2MCw2IEBACiAgICAgZGVmIG1rKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlR1cm4ga2V5IGludG8gYW4gYXBwcm9wcmlhdGUga2V5IHR5cGUgZm9yIHRoaXMgZGIiIiIKICAgICAgICAgIyBvdmVycmlkZSBpbiBjaGlsZCBjbGFzcyBmb3IgUkVDTk8KLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICByZXR1cm4ga2V5CiAgICAgICAgIGVsc2UgOgpAQCAtMTE4LDExICsxMjksMTQgQEAKIAogICAgICAgICBkYnZhbHVlcyA9IGQudmFsdWVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGJ2YWx1ZXMpLCBsZW4oZC5rZXlzKCkpKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wYXJpbmcgdW5lcXVhbCB0eXBlcyBub3Qgc3VwcG9ydGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHZhbHVlcyksIHNvcnRlZChkYnZhbHVlcykpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgdmFsdWVzLnNvcnQoKQorICAgICAgICAgICAgZGJ2YWx1ZXMuc29ydCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgZGJ2YWx1ZXMpCisgICAgICAgIGVsc2UgOiAgIyBYWFg6IENvbnZlcnQgYWxsIHRvIHN0cmluZ3MuIFBsZWFzZSwgaW1wcm92ZQorICAgICAgICAgICAgdmFsdWVzLnNvcnQoa2V5PWxhbWJkYSB4IDogc3RyKHgpKQorICAgICAgICAgICAgZGJ2YWx1ZXMuc29ydChrZXk9bGFtYmRhIHggOiBzdHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodmFsdWVzKSwgcmVwcihkYnZhbHVlcykpCiAKICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCBsZW4odmFsdWVzKSkKQEAgLTE5NywxMCArMjExLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5hcHBlbmQsICd1bml0IHRlc3Qgd2FzIGhlcmUnKQogCiAKKyAgICBkZWYgdGVzdDA0X2l0ZXJhYmxlKHNlbGYpIDoKKyAgICAgICAgc2VsZi5wb3B1bGF0ZURCKHNlbGYuZCkKKyAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBrZXlzID0gZC5rZXlzKCkKKyAgICAgICAga2V5c2V0ID0gc2V0KGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXNldCksIGxlbihrZXlzKSkKKworICAgICAgICBmb3Iga2V5IGluIGQgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGtleXNldCkKKyAgICAgICAgICAgIGtleXNldC5yZW1vdmUoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzZXQpLCAwKQorCiAgICAgZGVmIGNoZWNrcmVjKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICAjIG92ZXJyaWRlIHRoaXMgaW4gYSBzdWJjbGFzcyBpZiB0aGUga2V5IHR5cGUgaXMgZGlmZmVyZW50CiAKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIGJ5dGVzKSA6CiAgICAgICAgICAgICAgICAga2V5ID0ga2V5LmRlY29kZSgiaXNvODg1OS0xIikgICMgOCBiaXRzCkBAIC0yMTksNyArMjQ0LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIFt4XSAqIDEwKQogCiAgICAgICAgIGVsaWYga2V5WzBdID09ICdPJzoKLSAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgICAgICBmcm9tIHR5cGVzIGltcG9ydCBJbnN0YW5jZVR5cGUKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBJbnN0YW5jZVR5cGUpCkBAIC0yMzEsNyArMjU1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuTCwgW3hdICogMTApCiAKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwLCAnVW5rbm93biBrZXkgdHlwZSwgZml4IHRoZSB0ZXN0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLCAnVW5rbm93biBrZXkgdHlwZSwgZml4IHRoZSB0ZXN0JykKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjg3LDcgKzMxMSw2IEBACiAgICAgICAgIERCU2hlbHZlVGVzdENhc2Uuc2V0VXAoc2VsZikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgogICAgICAgICAgICAgZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZG9fcHJveHlfZGJfcHkzawogICAgICAgICAgICAgZG9fcHJveHlfZGJfcHkzayhzZWxmLl9mbGFnX3Byb3h5X2RiX3B5M2spCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2RidGFibGVzLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kYnRhYmxlcy5weQppbmRleCA5MzVjOWQ1Li5iYjMxMzgxIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2RidGFibGVzLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGJ0YWJsZXMucHkKQEAgLTIwLDExICsyMCwxNSBAQAogIwogIyAkSWQkCiAKLWltcG9ydCBvcywgcmUKLXRyeToKLSAgICBpbXBvcnQgY1BpY2tsZQotICAgIHBpY2tsZSA9IGNQaWNrbGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKK2ltcG9ydCBvcywgcmUsIHN5cworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgICAgICBwaWNrbGUgPSBjUGlja2xlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgcGlja2xlCitlbHNlIDoKICAgICBpbXBvcnQgcGlja2xlCiAKIGltcG9ydCB1bml0dGVzdApAQCAtODAsOCArODQsOCBAQAogICAgICAgICAgICAgY29sdmFsID0gcGlja2xlLmxvYWRzKHZhbHVlc1swXVtjb2xuYW1lXSkKICAgICAgICAgZWxzZSA6CiAgICAgICAgICAgICBjb2x2YWwgPSBwaWNrbGUubG9hZHMoYnl0ZXModmFsdWVzWzBdW2NvbG5hbWVdLCAiaXNvODg1OS0xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb2x2YWwgPiAzLjE0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbHZhbCA8IDMuMTQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sdmFsID4gMy4xNDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2x2YWwgPCAzLjE0MikKIAogCiAgICAgZGVmIHRlc3QwMihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZGlzdHJpYnV0ZWRfdHJhbnNhY3Rpb25zLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkKaW5kZXggZjg2NGI4OC4uMTcxMWZjNSAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkKQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX1RYTiB8IGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9NUE9PTCB8CiAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0NLLCAwNjY2KQogICAgICAgICBzZWxmLmRiID0gZGIuREIoc2VsZi5kYmVudikKLSAgICAgICAgc2VsZi5kYi5zZXRfcmVfbGVuKGRiLkRCX1hJRERBVEFTSVpFKQorICAgICAgICBzZWxmLmRiLnNldF9yZV9sZW4oZGIuREJfR0lEX1NJWkUpCiAgICAgICAgIGlmIG11c3Rfb3Blbl9kYiA6Ci0gICAgICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPiAoNCwxKSA6CisgICAgICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsMikgOgogICAgICAgICAgICAgICAgIHR4bj1zZWxmLmRiZW52LnR4bl9iZWdpbigpCiAgICAgICAgICAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYuZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBkYi5EQl9RVUVVRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2LApAQCAtNzYsNyArNzYsNyBAQAogICAgICMgbGV0IHRoZW0gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51bV90eG5zKSA6CiAgICAgICAgICAgICB0eG4gPSBzZWxmLmRiZW52LnR4bl9iZWdpbigpCi0gICAgICAgICAgICBnaWQgPSAiJSUlZGQiICVkYi5EQl9YSUREQVRBU0laRQorICAgICAgICAgICAgZ2lkID0gIiUlJWRkIiAlZGIuREJfR0lEX1NJWkUKICAgICAgICAgICAgIGdpZCA9IGFkYXB0KGdpZCAlaSkKICAgICAgICAgICAgIHNlbGYuZGIucHV0KGksIGdpZCwgdHhuPXR4biwgZmxhZ3M9ZGIuREJfQVBQRU5EKQogICAgICAgICAgICAgdHhucy5hZGQoZ2lkKQpAQCAtODgsOSArODgsOSBAQAogICAgICMgR2V0ICJ0byBiZSByZWNvdmVyZWQiIHRyYW5zYWN0aW9ucyBidXQKICAgICAjIGxldCB0aGVtIGJlIGdhcmJhZ2UgY29sbGVjdGVkLgogICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5udW1fdHhucyxsZW4ocmVjb3ZlcmVkX3R4bnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnVtX3R4bnMsbGVuKHJlY292ZXJlZF90eG5zKSkKICAgICAgICAgZm9yIGdpZCx0eG4gaW4gcmVjb3ZlcmVkX3R4bnMgOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdpZCBpbiB0eG5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdpZCBpbiB0eG5zKQogICAgICAgICBkZWwgdHhuCiAgICAgICAgIGRlbCByZWNvdmVyZWRfdHhucwogCkBAIC05OSw3ICs5OSw3IEBACiAgICAgIyBHZXQgInRvIGJlIHJlY292ZXJlZCIgdHJhbnNhY3Rpb25zLiBDb21taXQsIGFib3J0IGFuZAogICAgICMgZGlzY2FyZCB0aGVtLgogICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5udW1fdHhucyxsZW4ocmVjb3ZlcmVkX3R4bnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnVtX3R4bnMsbGVuKHJlY292ZXJlZF90eG5zKSkKICAgICAgICAgZGlzY2FyZF90eG5zPXNldCgpCiAgICAgICAgIGNvbW1pdHRlZF90eG5zPXNldCgpCiAgICAgICAgIHN0YXRlPTAKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICMgVmVyaWZ5IHRoZSBkaXNjYXJkZWQgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbAogICAgICMgYXJvdW5kLCBhbmQgZGlzcG9zZSB0aGVtLgogICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGRpc2NhcmRfdHhucyksbGVuKHJlY292ZXJlZF90eG5zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlzY2FyZF90eG5zKSxsZW4ocmVjb3ZlcmVkX3R4bnMpKQogICAgICAgICBmb3IgZ2lkLHR4biBpbiByZWNvdmVyZWRfdHhucyA6CiAgICAgICAgICAgICB0eG4uYWJvcnQoKQogICAgICAgICBkZWwgdHhuCkBAIC0xMzMsOCArMTMzLDggQEAKICAgICAjIEJlIHN1cmUgdGhlcmUgYXJlIG5vdCBwZW5kaW5nIHRyYW5zYWN0aW9ucy4KICAgICAjIENoZWNrIGFsc28gZGF0YWJhc2Ugc2l6ZS4KICAgICAgICAgcmVjb3ZlcmVkX3R4bnM9c2VsZi5kYmVudi50eG5fcmVjb3ZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4ocmVjb3ZlcmVkX3R4bnMpPT0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oY29tbWl0dGVkX3R4bnMpLHNlbGYuZGIuc3RhdCgpWyJua2V5cyJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlY292ZXJlZF90eG5zKT09MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29tbWl0dGVkX3R4bnMpLHNlbGYuZGIuc3RhdCgpWyJua2V5cyJdKQogCiBjbGFzcyBEQlR4bl9kaXN0cmlidXRlZFNZTkMoREJUeG5fZGlzdHJpYnV0ZWQpOgogICAgIG5vc3luYz1GYWxzZQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9lYXJseV9jbG9zZS5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZWFybHlfY2xvc2UucHkKaW5kZXggY2M2OWU0Ny4uODZiODZkYyAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9lYXJseV9jbG9zZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2Vhcmx5X2Nsb3NlLnB5CkBAIC0yLDcgKzIsNyBAQAogaXMgY2xvc2VkIGJlZm9yZSBpdHMgREIgb2JqZWN0cy4KICIiIgogCi1pbXBvcnQgb3MKK2ltcG9ydCBvcywgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgdmVyYm9zZSwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKQEAgLTE1NSwyMiArMTU1LDQzIEBACiAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9DUkVBVEUpCiAgICAgICAgIGQgPSBkYi5EQihkYmVudikKICAgICAgICAgdHhuID0gZGJlbnYudHhuX2JlZ2luKCkKLSAgICAgICAgaWYgZGIudmVyc2lvbigpIDwgKDQsMSkgOgotICAgICAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRidHlwZSA9IGRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFKQotICAgICAgICBlbHNlIDoKLSAgICAgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYnR5cGUgPSBkYi5EQl9IQVNILCBmbGFncyA9IGRiLkRCX0NSRUFURSwKLSAgICAgICAgICAgICAgICAgICAgdHhuPXR4bikKKyAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRidHlwZSA9IGRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFLAorICAgICAgICAgICAgICAgIHR4bj10eG4pCiAgICAgICAgIGQucHV0KCJYWFgiLCAieXl5IiwgdHhuPXR4bikKICAgICAgICAgdHhuLmNvbW1pdCgpCiAgICAgICAgIHR4biA9IGRiZW52LnR4bl9iZWdpbigpCiAgICAgICAgIGMxID0gZC5jdXJzb3IodHhuKQogICAgICAgICBjMiA9IGMxLmR1cCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgiWFhYIiwgInl5eSIpLCBjMS5maXJzdCgpKQotICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoIlhYWCIsICJ5eXkiKSwgYzEuZmlyc3QoKSkKKwogICAgICAgICAjIE5vdCBpbnRlcmVzdGVkIGluIHdhcm5pbmdzIGFib3V0IGltcGxpY2l0IGNsb3NlLgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICMgQ29tcGxldGVseSByZXNldHRpbmcgdGhlIHdhcm5pbmcgc3RhdGUgaXMKKyAgICAgICAgICAgICMgcHJvYmxlbWF0aWMgd2l0aCBweXRob24gPj0yLjYgd2l0aCAtMyAocHkzayB3YXJuaW5nKSwKKyAgICAgICAgICAgICMgYmVjYXVzZSBzb21lIHN0ZGxpYiBtb2R1bGVzIHNlbGVjdGl2ZWx5IGlnbm9yZXMgd2FybmluZ3MuCiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCiAgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIHdhcm5pbmdzLnJlc2V0d2FybmluZ3MoKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICMgV2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHB5dGhvbiAyLjMgYW5kIDIuNAorICAgICAgICAgICAgIyB3ZSBjb3VsZCB1c2U6IChpbiAyLjUgd2UgbmVlZCBhIF9fZnV0dXJlX18gc3RhdGVtZW50KQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICAjICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2UgY2FuIG5vdCB1c2UgIndpdGgiIGFzIGlzLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGludmFsaWQgc3ludGF4CisgICAgICAgICAgICAjIGluIHB5dGhvbiAyLjMsIDIuNCBhbmQgKHdpdGggbm8gX19mdXR1cmVfXykgMi41LgorICAgICAgICAgICAgIyBIZXJlIHdlIHNpbXVsYXRlICJ3aXRoIiBmb2xsb3dpbmcgUEVQIDM0MyA6CisgICAgICAgICAgICB3ID0gd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKQorICAgICAgICAgICAgdy5fX2VudGVyX18oKQorICAgICAgICAgICAgdHJ5IDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICBmaW5hbGx5IDoKKyAgICAgICAgICAgICAgICB3Ll9fZXhpdF9fKCkKKwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkN1cnNvckNsb3NlZEVycm9yLCBjMi5maXJzdCkKIAogICAgIGlmIGRiLnZlcnNpb24oKSA+ICg0LDMsMCkgOgpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9maWxlaWQucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2ZpbGVpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTVlYzgzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9maWxlaWQucHkKQEAgLTAsMCArMSw2MSBAQAorIiIiVGVzdENhc2UgZm9yIHJlc2V0aW5nIEZpbGUgSUQuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworY2xhc3MgRmlsZWlkUmVzZXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRiX3BhdGhfMSA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCisgICAgICAgIHNlbGYuZGJfcGF0aF8yID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKKyAgICAgICAgc2VsZi5kYl9lbnZfcGF0aCA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisKKyAgICBkZWYgdGVzdF9maWxlaWRfcmVzZXQoc2VsZik6CisgICAgICAgICMgY3JlYXRlIERCIDEKKyAgICAgICAgc2VsZi5kYjEgPSBkYi5EQigpCisgICAgICAgIHNlbGYuZGIxLm9wZW4oc2VsZi5kYl9wYXRoXzEsIGRidHlwZT1kYi5EQl9IQVNILCBmbGFncz0oZGIuREJfQ1JFQVRFfGRiLkRCX0VYQ0wpKQorICAgICAgICBzZWxmLmRiMS5wdXQoJ3NwYW0nLCAnZWdncycpCisgICAgICAgIHNlbGYuZGIxLmNsb3NlKCkKKworICAgICAgICBzaHV0aWwuY29weShzZWxmLmRiX3BhdGhfMSwgc2VsZi5kYl9wYXRoXzIpCisKKyAgICAgICAgc2VsZi5kYjIgPSBkYi5EQigpCisgICAgICAgIHNlbGYuZGIyLm9wZW4oc2VsZi5kYl9wYXRoXzIsIGRidHlwZT1kYi5EQl9IQVNIKQorICAgICAgICBzZWxmLmRiMi5wdXQoJ3NwYW0nLCAnc3BhbScpCisgICAgICAgIHNlbGYuZGIyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmRiX2VudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5kYl9lbnYub3BlbihzZWxmLmRiX2Vudl9wYXRoLCBkYi5EQl9DUkVBVEV8ZGIuREJfSU5JVF9NUE9PTCkKKworICAgICAgICAjIHVzZSBmaWxlaWRfcmVzZXQoKSBoZXJlCisgICAgICAgIHNlbGYuZGJfZW52LmZpbGVpZF9yZXNldChzZWxmLmRiX3BhdGhfMikKKworICAgICAgICBzZWxmLmRiMSA9IGRiLkRCKHNlbGYuZGJfZW52KQorICAgICAgICBzZWxmLmRiMS5vcGVuKHNlbGYuZGJfcGF0aF8xLCBkYnR5cGU9ZGIuREJfSEFTSCwgZmxhZ3M9ZGIuREJfUkRPTkxZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIxLmdldCgnc3BhbScpLCAnZWdncycpCisKKyAgICAgICAgc2VsZi5kYjIgPSBkYi5EQihzZWxmLmRiX2VudikKKyAgICAgICAgc2VsZi5kYjIub3BlbihzZWxmLmRiX3BhdGhfMiwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzPWRiLkRCX1JET05MWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiMi5nZXQoJ3NwYW0nKSwgJ3NwYW0nKQorCisgICAgICAgIHNlbGYuZGIxLmNsb3NlKCkKKyAgICAgICAgc2VsZi5kYjIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuZGJfZW52LmNsb3NlKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmRiX3BhdGhfMSkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmRiX3BhdGhfMikKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmRiX2Vudl9wYXRoKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpOgorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShGaWxlaWRSZXNldFRlc3RDYXNlKSkKKyAgICByZXR1cm4gc3VpdGUKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZ2V0X25vbmUucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2dldF9ub25lLnB5CmluZGV4IDRhYWYyZmQuLjg3NjNiNTQgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfZ2V0X25vbmUucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9nZXRfbm9uZS5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZWMsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhleGNlcHRpb25IYXBwZW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4Y2VwdGlvbkhhcHBlbmVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBsZW4oc3RyaW5nLmxldHRlcnMpKQogCiAgICAgICAgIGMuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9qb2luLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9qb2luLnB5CmluZGV4IDliNDVkZjguLjFmMGRmZmYgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3Rfam9pbi5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X2pvaW4ucHkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICMgRG9uJ3QgZG8gdGhlIC5zZXQoKSBpbiBhbiBhc3NlcnQsIG9yIHlvdSBjYW4gZ2V0IGEgYm9ndXMgZmFpbHVyZQogICAgICAgICAgICAgIyB3aGVuIHJ1bm5pbmcgcHl0aG9uIC1PCiAgICAgICAgICAgICB0bXAgPSBzQ3Vyc29yLnNldCgncmVkJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0bXApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodG1wKQogCiAgICAgICAgICAgICAjIEZJWE1FOiBqQ3Vyc29yIGRvZXNuJ3QgcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byBpdHMKICAgICAgICAgICAgICMgY3Vyc29ycywgaWYgdGhleSBhcmUgY2xvc2VkIGJlZm9yZSBqY3Vyc29yIGlzIHVzZWQgaXQKZGlmZiAtLWdpdCBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfbG9jay5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfbG9jay5weQppbmRleCA0N2RhMzkyLi4yNTI2MGZjIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X2xvY2sucHkKKysrIGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9sb2NrLnB5CkBAIC0yMCw3ICsyMCw3IEBACiAKIGNsYXNzIExvY2tpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgogICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQogCkBAIC04OSw3ICs4OSwxOCBAQAogICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgdC5qb2luKCkKIAotICAgIGRlZiB0ZXN0MDNfbG9ja190aW1lb3V0KHNlbGYpOgorICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgMikgOgorICAgICAgICBkZWYgdGVzdDAzX2xvY2tfdGltZW91dChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDAsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpLCAwKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMCwgZGIuREJfU0VUX1RYTl9USU1FT1VUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudi5nZXRfdGltZW91dChkYi5EQl9TRVRfVFhOX1RJTUVPVVQpLCAwKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMTIzNDU2LCBkYi5EQl9TRVRfTE9DS19USU1FT1VUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudi5nZXRfdGltZW91dChkYi5EQl9TRVRfTE9DS19USU1FT1VUKSwgMTIzNDU2KQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoNzg5MDEyMywgZGIuREJfU0VUX1RYTl9USU1FT1VUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudi5nZXRfdGltZW91dChkYi5EQl9TRVRfVFhOX1RJTUVPVVQpLCA3ODkwMTIzKQorCisgICAgZGVmIHRlc3QwNF9sb2NrX3RpbWVvdXQyKHNlbGYpOgogICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgwLCBkYi5EQl9TRVRfTE9DS19USU1FT1VUKQogICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgwLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCiAgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDEyMzQ1NiwgZGIuREJfU0VUX0xPQ0tfVElNRU9VVCkKQEAgLTEyNCw2ICsxMzUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZW52LmxvY2tfZ2V0LGFuSUQyLCAic2hhcmVkIGxvY2siLCBkYi5EQl9MT0NLX1JFQUQpCiAgICAgICAgIGVuZF90aW1lPXRpbWUudGltZSgpCiAgICAgICAgIGRlYWRsb2NrX2RldGVjdGlvbi5lbmQ9VHJ1ZQorICAgICAgICAjIEZsb2F0aW5nIHBvaW50IHJvdW5kaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kX3RpbWUtc3RhcnRfdGltZSkgPj0gMC4wOTk5KQogICAgICAgICBzZWxmLmVudi5sb2NrX3B1dChsb2NrKQogICAgICAgICB0LmpvaW4oKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9taXNjLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9taXNjLnB5CmluZGV4IDBjZjc1ZTkuLjhkZGEyOTYgMTAwNjQ0Ci0tLSBhL0xpYi9ic2RkYi90ZXN0L3Rlc3RfbWlzYy5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X21pc2MucHkKQEAgLTEsNyArMSw3IEBACiAiIiJNaXNjZWxsYW5lb3VzIGJzZGRiIG1vZHVsZSB0ZXN0IGNhc2VzCiAiIiIKIAotaW1wb3J0IG9zCitpbXBvcnQgb3MsIHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCBkYnNoZWx2ZSwgaGFzaG9wZW4sIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKQEAgLTksNiArOSwxMyBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgTWlzY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDQpIDoKKyAgICAgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGV4cHIsIG1zZz1tc2cpCisKKyAgICAgICAgZGVmIGFzc2VydEZhbHNlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKGV4cHIsIG1zZz1tc2cpCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQogICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQpAQCAtMjUsOSArMzIsOCBAQAogICAgIGRlZiB0ZXN0MDJfZGJfaG9tZShzZWxmKToKICAgICAgICAgZW52ID0gZGIuREJFbnYoKQogICAgICAgICAjIGNoZWNrIGZvciBjcmFzaCBmaXhlZCB3aGVuIGRiX2hvbWUgaXMgdXNlZCBiZWZvcmUgb3BlbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlbnYuZGJfaG9tZSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW52LmRiX2hvbWUgaXMgTm9uZSkKICAgICAgICAgZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUpCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhvbWVEaXIsIGVudi5kYl9ob21lKQogICAgICAgICBlbHNlIDoKQEAgLTM3LDcgKzQzLDcgQEAKICAgICAgICAgZGIgPSBoYXNob3BlbihzZWxmLmZpbGVuYW1lKQogICAgICAgICBkYi5jbG9zZSgpCiAgICAgICAgIHJwID0gcmVwcihkYikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnAsICJ7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnAsICJ7fSIpCiAKICAgICBkZWYgdGVzdDA0X3JlcHJfZGIoc2VsZikgOgogICAgICAgICBkYiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUpCkBAIC00OCw3ICs1NCw3IEBACiAgICAgICAgIGRiLmNsb3NlKCkKICAgICAgICAgZGIgPSBoYXNob3BlbihzZWxmLmZpbGVuYW1lKQogICAgICAgICBycCA9IHJlcHIoZGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJwLCByZXByKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJwLCByZXByKGQpKQogICAgICAgICBkYi5jbG9zZSgpCiAKICAgICAjIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci9pbmRleC5waHA/ZnVuYz1kZXRhaWwmYWlkPTE3MDg4NjgmZ3JvdXBfaWQ9MTM5MDAmYXRpZD0zMTM5MDAKQEAgLTExOSw2ICsxMjUsMTkgQEAKICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAogCisgICAgZGVmIHRlc3QwOF9FeGNlcHRpb25UeXBlcyhzZWxmKSA6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGRiLkRCRXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIGZvciBpLCBqIGluIGRiLl9fZGljdF9fLml0ZW1zKCkgOgorICAgICAgICAgICAgaWYgaS5zdGFydHN3aXRoKCJEQiIpIGFuZCBpLmVuZHN3aXRoKCJFcnJvciIpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhqLCBkYi5EQkVycm9yKSwgbXNnPWkpCisgICAgICAgICAgICAgICAgaWYgaSBub3QgaW4gKCJEQktleUVtcHR5RXJyb3IiLCAiREJOb3RGb3VuZEVycm9yIikgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaiwgS2V5RXJyb3IpLCBtc2c9aSkKKworICAgICAgICAjIFRoaXMgdHdvIGV4Y2VwdGlvbnMgaGF2ZSB0d28gYmFzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZGIuREJLZXlFbXB0eUVycm9yLCBLZXlFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGRiLkRCTm90Rm91bmRFcnJvciwgS2V5RXJyb3IpKQorCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIApkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9waWNrbGUucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weQppbmRleCA0ODljMDkzLi42YTg0NzhkIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weQpAQCAtMSwxMCArMSwxNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBwaWNrbGUKLXRyeToKLSAgICBpbXBvcnQgY1BpY2tsZQotZXhjZXB0IEltcG9ydEVycm9yOgoraW1wb3J0IHN5cworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgY1BpY2tsZSA9IE5vbmUKK2Vsc2UgOgogICAgIGNQaWNrbGUgPSBOb25lCisKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aApkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZWNuby5weSBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkKaW5kZXggZDMzMjQ5Ny4uMzE5MWZkYyAxMDA2NDQKLS0tIGEvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZWNuby5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlY25vLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVGVzdENhc2VzIGZvciBleGVyY2lzaW5nIGEgUmVjbm8gREIuCiAiIiIKIAotaW1wb3J0IG9zCitpbXBvcnQgb3MsIHN5cwogaW1wb3J0IGVycm5vCiBmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE0LDEwICsxNCwxOSBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgU2ltcGxlUmVjbm9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgotICAgICAgICBkZWYgYXNzZXJ0RmFsc2Uoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZXhwcixtc2c9bXNnKQorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgorICAgICAgICBkZWYgYXNzZXJ0RmFsc2Uoc2VsZiwgZXhwciwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZhaWxJZihleHByLG1zZz1tc2cpCisgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRUcnVlKGV4cHIsIG1zZz1tc2cpCisKKyAgICBpZiAoc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KSkgb3IgKChzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKSkgYW5kCisgICAgICAgICAgICAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKSkpIDoKKyAgICAgICAgZGVmIGFzc2VydElzSW5zdGFuY2Uoc2VsZiwgb2JqLCBkYXRhdHlwZSwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydEVxdWFsKHR5cGUob2JqKSwgZGF0YXR5cGUsIG1zZz1tc2cpCisgICAgICAgIGRlZiBhc3NlcnRHcmVhdGVyRXF1YWwoc2VsZiwgYSwgYiwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoYT49YiwgbXNnPW1zZykKKwogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKQEAgLTM4LDggKzQ3LDggQEAKIAogICAgICAgICBmb3IgeCBpbiBsZXR0ZXJzOgogICAgICAgICAgICAgcmVjbm8gPSBkLmFwcGVuZCh4ICogNjApCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyZWNubywgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNubyA+PSAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlY25vLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChyZWNubywgMSkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgcmVjbm8sCiAKQEAgLTU0LDEzICs2MywxNiBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCBkYXRhCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGRhdGEsIHN0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGF0YSwgc3RyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkLmdldChyZWNubykpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IGRbMF0gICMgVGhpcyBzaG91bGQgcmFpc2UgYSBLZXlFcnJvciE/IT8hCiAgICAgICAgIGV4Y2VwdCBkYi5EQkludmFsaWRBcmdFcnJvciwgdmFsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuRUlOVkFMKQorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkVJTlZBTCkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkVJTlZBTCkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24iKQpAQCAtOTEsMTggKzEwMywxOCBAQAogICAgICAgICBrZXlzID0gZC5rZXlzKCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50IGtleXMKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoa2V5cywgbGlzdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGtleXNbMF0sIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXlzLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa2V5c1swXSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgbGVuKGQpKQogCiAgICAgICAgIGl0ZW1zID0gZC5pdGVtcygpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcHJpbnQoaXRlbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0ZW1zLCBsaXN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXRlbXNbMF0sIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF0sIHR1cGxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdGVtc1swXSksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0ZW1zWzBdWzBdLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdGVtc1swXVsxXSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtc1swXVsxXSwgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdGVtcyksIGxlbihkKSkKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KDI1KSkKQEAgLTE3Nyw3ICsxODksMTAgQEAKICAgICAgICAgICAgIGlmIGdldF9yZXR1cm5zX25vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIERCS2V5RW1wdHlFcnJvciBleGNlcHRpb24iKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFTVBUWSkKKyAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFTVBUWSkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIG5vdCBnZXRfcmV0dXJuc19ub25lOgpAQCAtMjY1LDcgKzI4MCwxMCBAQAogICAgICAgICB0cnk6ICAgICAgICAgICAgICAgICAgICAjIHRoaXMgb25lIHdpbGwgZmFpbAogICAgICAgICAgICAgZC5hcHBlbmQoJ2JhZCcgKiAyMCkKICAgICAgICAgZXhjZXB0IGRiLkRCSW52YWxpZEFyZ0Vycm9yLCB2YWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5FSU5WQUwpCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuRUlOVkFMKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuRUlOVkFMKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlcGxpY2F0aW9uLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9yZXBsaWNhdGlvbi5weQppbmRleCBmYWJjMTY1Li5mM2U5NzRmIDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3JlcGxpY2F0aW9uLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3RfcmVwbGljYXRpb24ucHkKQEAgLTQsNyArNCw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3ZWFrcmVmCiAKIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGhhdmVfdGhyZWFkcywgdmVyYm9zZSwgXAogICAgICAgICBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aApAQCAtMTIsOSArMTEsOSBAQAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBEQlJlcGxpY2F0aW9uTWFuYWdlcih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEQlJlcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKSA6CiAgICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bOjNdIDwgKDIsIDQsIDApOgorICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNCkgOgogICAgICAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CiAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwcixtc2c9bXNnKQogCkBAIC0zNSwxNiArMzQsMTMgQEAKICAgICAgICAgICAgICAgICB8IGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9NUE9PTCB8IGRiLkRCX0lOSVRfTE9DSyB8CiAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9SRVAgfCBkYi5EQl9SRUNPVkVSIHwgZGIuREJfVEhSRUFELCAwNjY2KQogCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoc2VsZikKICAgICAgICAgc2VsZi5jb25maXJtZWRfbWFzdGVyPXNlbGYuY2xpZW50X3N0YXJ0dXBkb25lPUZhbHNlCiAgICAgICAgIGRlZiBjb25maXJtZWRfbWFzdGVyKGEsYixjKSA6CiAgICAgICAgICAgICBpZiBiPT1kYi5EQl9FVkVOVF9SRVBfTUFTVEVSIDoKLSAgICAgICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybWVkX21hc3Rlcj1UcnVlCiAKICAgICAgICAgZGVmIGNsaWVudF9zdGFydHVwZG9uZShhLGIsYykgOgogICAgICAgICAgICAgaWYgYj09ZGIuREJfRVZFTlRfUkVQX1NUQVJUVVBET05FIDoKLSAgICAgICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X3N0YXJ0dXBkb25lPVRydWUKIAogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnNldF9ldmVudF9ub3RpZnkoY29uZmlybWVkX21hc3RlcikKQEAgLTYzLDExICs1OSwyMSBAQAogICAgICAgICAgICAgc2VsZi5kYkNsaWVudC5jbG9zZSgpCiAgICAgICAgIGlmIHNlbGYuZGJNYXN0ZXIgOgogICAgICAgICAgICAgc2VsZi5kYk1hc3Rlci5jbG9zZSgpCisKKyAgICAgICAgIyBIZXJlIHdlIGFzc2lnbiBkdW1teSBldmVudCBoYW5kbGVycyB0byBhbGxvdyBHQyBvZiB0aGUgdGVzdCBvYmplY3QuCisgICAgICAgICMgU2luY2UgdGhlIGR1bW15IGhhbmRsZXIgZG9lc24ndCB1c2UgYW55IG91dGVyIHNjb3BlIHZhcmlhYmxlLCBpdAorICAgICAgICAjIGRvZXNuJ3Qga2VlcCBhbnkgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgZGVmIGR1bW15KCphcmdzKSA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShkdW1teSkKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorCiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQuY2xvc2UoKQogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLmNsb3NlKCkKICAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXJDbGllbnQpCiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyTWFzdGVyKQogCitjbGFzcyBEQlJlcGxpY2F0aW9uTWFuYWdlcihEQlJlcGxpY2F0aW9uKSA6CiAgICAgZGVmIHRlc3QwMV9iYXNpY19yZXBsaWNhdGlvbihzZWxmKSA6CiAgICAgICAgIG1hc3Rlcl9wb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zZXRfbG9jYWxfc2l0ZSgiMTI3LjAuMC4xIiwgbWFzdGVyX3BvcnQpCkBAIC04MiwyMyArODgsMjMgQEAKIAogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfQ09OTkVDVElPTl9SRVRSWSwxMDAxMjMpCiAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9DT05ORUNUSU9OX1JFVFJZLDEwMDMyMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCiAgICAgICAgICAgICBkYi5EQl9SRVBfQ09OTkVDVElPTl9SRVRSWSksIDEwMDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3RpbWVvdXQoCiAgICAgICAgICAgICBkYi5EQl9SRVBfQ09OTkVDVElPTl9SRVRSWSksIDEwMDMyMSkKIAogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfRUxFQ1RJT05fVElNRU9VVCwgMTAwMjM0KQogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfRUxFQ1RJT05fVElNRU9VVCwgMTAwNDMyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKICAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VUKSwgMTAwMjM0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKICAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VUKSwgMTAwNDMyKQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSwgMTAwMzQ1KQogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfRUxFQ1RJT05fUkVUUlksIDEwMDU0MykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCiAgICAgICAgICAgICBkYi5EQl9SRVBfRUxFQ1RJT05fUkVUUlkpLCAxMDAzNDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF90aW1lb3V0KAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF90aW1lb3V0KAogICAgICAgICAgICAgZGIuREJfUkVQX0VMRUNUSU9OX1JFVFJZKSwgMTAwNTQzKQogCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX3NldF9hY2tfcG9saWN5KGRiLkRCX1JFUE1HUl9BQ0tTX0FMTCkKQEAgLTEwNywxMyArMTEzLDEzIEBACiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX3N0YXJ0KDEsIGRiLkRCX1JFUF9NQVNURVIpOwogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zdGFydCgxLCBkYi5EQl9SRVBfQ0xJRU5UKTsKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfbnNpdGVzKCksMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X25zaXRlcygpLDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9wcmlvcml0eSgpLDEwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfcHJpb3JpdHkoKSwwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9nZXRfYWNrX3BvbGljeSgpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9uc2l0ZXMoKSwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF9uc2l0ZXMoKSwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9wcmlvcml0eSgpLDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF9wcmlvcml0eSgpLDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBtZ3JfZ2V0X2Fja19wb2xpY3koKSwKICAgICAgICAgICAgICAgICBkYi5EQl9SRVBNR1JfQUNLU19BTEwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZGJlbnZDbGllbnQucmVwbWdyX2dldF9hY2tfcG9saWN5KCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBtZ3JfZ2V0X2Fja19wb2xpY3koKSwKICAgICAgICAgICAgICAgICBkYi5EQl9SRVBNR1JfQUNLU19BTEwpCiAKICAgICAgICAgIyBUaGUgdGltZW91dCBpcyBuZWNlc3NhcnkgaW4gQkRCIDQuNSwgc2luY2UgREJfRVZFTlRfUkVQX1NUQVJUVVBET05FCkBAIC0xMzcsMTYgKzE0MywxNiBAQAogICAgICAgICAgICAgc3RhcnR1cF90aW1lb3V0ID0gVHJ1ZQogCiAgICAgICAgIGQgPSBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zaXRlX2xpc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRbMF1bMF0sICIxMjcuMC4wLjEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkWzBdWzFdLCBjbGllbnRfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXVswXSwgIjEyNy4wLjAuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXVsxXSwgY2xpZW50X3BvcnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZFswXVsyXT09ZGIuREJfUkVQTUdSX0NPTk5FQ1RFRCkgb3IgXAogICAgICAgICAgICAgICAgIChkWzBdWzJdPT1kYi5EQl9SRVBNR1JfRElTQ09OTkVDVEVEKSkKIAogICAgICAgICBkID0gc2VsZi5kYmVudkNsaWVudC5yZXBtZ3Jfc2l0ZV9saXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGQpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkWzBdWzBdLCAiMTI3LjAuMC4xIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZFswXVsxXSwgbWFzdGVyX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF1bMF0sICIxMjcuMC4wLjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF1bMV0sIG1hc3Rlcl9wb3J0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGRbMF1bMl09PWRiLkRCX1JFUE1HUl9DT05ORUNURUQpIG9yIFwKICAgICAgICAgICAgICAgICAoZFswXVsyXT09ZGIuREJfUkVQTUdSX0RJU0NPTk5FQ1RFRCkpCiAKQEAgLTIwMSw3ICsyMDcsNyBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVwbGljYXRpb24gdGVzdCBza2lwcGVkIGR1ZSB0byByYW5kb20gZmFpbHVyZSwgIgogICAgICAgICAgICAgICAgICJzZWUgaXNzdWUgMzg5MiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnRpbWUoKTx0aW1lb3V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiMTIzIiwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgdikKIAogICAgICAgICB0eG49c2VsZi5kYmVudk1hc3Rlci50eG5fYmVnaW4oKQogICAgICAgICBzZWxmLmRiTWFzdGVyLmRlbGV0ZSgiQUJDIiwgdHhuPXR4bikKQEAgLTIxNCwyMCArMjIwLDE3IEBACiAgICAgICAgICAgICBpZiB2IGlzIE5vbmUgOgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudGltZSgpPHRpbWVvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdikKIAotY2xhc3MgREJCYXNlUmVwbGljYXRpb24oREJSZXBsaWNhdGlvbk1hbmFnZXIpOgorY2xhc3MgREJCYXNlUmVwbGljYXRpb24oREJSZXBsaWNhdGlvbikgOgogICAgIGRlZiBzZXRVcChzZWxmKSA6Ci0gICAgICAgIERCUmVwbGljYXRpb25NYW5hZ2VyLnNldFVwKHNlbGYpCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoc2VsZikKKyAgICAgICAgREJSZXBsaWNhdGlvbi5zZXRVcChzZWxmKQogICAgICAgICBkZWYgY29uZmlybWVkX21hc3RlcihhLGIsYykgOgogICAgICAgICAgICAgaWYgKGIgPT0gZGIuREJfRVZFTlRfUkVQX01BU1RFUikgb3IgKGIgPT0gZGIuREJfRVZFTlRfUkVQX0VMRUNURUQpIDoKLSAgICAgICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybWVkX21hc3RlciA9IFRydWUKIAogICAgICAgICBkZWYgY2xpZW50X3N0YXJ0dXBkb25lKGEsYixjKSA6CiAgICAgICAgICAgICBpZiBiID09IGRiLkRCX0VWRU5UX1JFUF9TVEFSVFVQRE9ORSA6Ci0gICAgICAgICAgICAgICAgc2VsZiA9IHdyKCkKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9zdGFydHVwZG9uZSA9IFRydWUKIAogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnNldF9ldmVudF9ub3RpZnkoY29uZmlybWVkX21hc3RlcikKQEAgLTI0MCwxMSArMjQzLDkgQEAKICAgICAgICAgIyBUaGVyZSBhcmUgb25seSB0d28gbm9kZXMsIHNvIHdlIGRvbid0IG5lZWQgdG8KICAgICAgICAgIyBkbyBhbnkgcm91dGluZyBkZWNpc2lvbgogICAgICAgICBkZWYgbTJjKGRiZW52LCBjb250cm9sLCByZWMsIGxzbnAsIGVudmlkLCBmbGFncykgOgotICAgICAgICAgICAgc2VsZiA9IHdyKCkKICAgICAgICAgICAgIHNlbGYubTJjLnB1dCgoY29udHJvbCwgcmVjKSkKIAogICAgICAgICBkZWYgYzJtKGRiZW52LCBjb250cm9sLCByZWMsIGxzbnAsIGVudmlkLCBmbGFncykgOgotICAgICAgICAgICAgc2VsZiA9IHdyKCkKICAgICAgICAgICAgIHNlbGYuYzJtLnB1dCgoY29udHJvbCwgcmVjKSkKIAogICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfdHJhbnNwb3J0KDEzLG0yYykKQEAgLTI1Miw4ICsyNTMsOCBAQAogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdHJhbnNwb3J0KDMsYzJtKQogICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfcHJpb3JpdHkoMCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfcHJpb3JpdHkoKSwxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3ByaW9yaXR5KCksMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfcHJpb3JpdHkoKSwxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfcHJpb3JpdHkoKSwwKQogCiAgICAgICAgICNzZWxmLmRiZW52TWFzdGVyLnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfUkVQTElDQVRJT04sIFRydWUpCiAgICAgICAgICNzZWxmLmRiZW52TWFzdGVyLnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfRklMRU9QU19BTEwsIFRydWUpCkBAIC0yNjEsMTIgKzI2MiwxMCBAQAogICAgICAgICAjc2VsZi5kYmVudkNsaWVudC5zZXRfdmVyYm9zZShkYi5EQl9WRVJCX0ZJTEVPUFNfQUxMLCBUcnVlKQogCiAgICAgICAgIGRlZiB0aHJlYWRfbWFzdGVyKCkgOgotICAgICAgICAgICAgc2VsZiA9IHdyKCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnRocmVhZF9kbyhzZWxmLmRiZW52TWFzdGVyLCBzZWxmLmMybSwgMywKICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXJfZG9pbmdfZWxlY3Rpb24sIFRydWUpCiAKICAgICAgICAgZGVmIHRocmVhZF9jbGllbnQoKSA6Ci0gICAgICAgICAgICBzZWxmID0gd3IoKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGhyZWFkX2RvKHNlbGYuZGJlbnZDbGllbnQsIHNlbGYubTJjLCAxMywKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfZG9pbmdfZWxlY3Rpb24sIEZhbHNlKQogCkBAIC0yOTksNiArMjk4LDE3IEBACiAgICAgICAgIHNlbGYuYzJtLnB1dChOb25lKQogICAgICAgICBzZWxmLnRfbS5qb2luKCkKICAgICAgICAgc2VsZi50X2Muam9pbigpCisKKyAgICAgICAgIyBIZXJlIHdlIGFzc2lnbiBkdW1teSBldmVudCBoYW5kbGVycyB0byBhbGxvdyBHQyBvZiB0aGUgdGVzdCBvYmplY3QuCisgICAgICAgICMgU2luY2UgdGhlIGR1bW15IGhhbmRsZXIgZG9lc24ndCB1c2UgYW55IG91dGVyIHNjb3BlIHZhcmlhYmxlLCBpdAorICAgICAgICAjIGRvZXNuJ3Qga2VlcCBhbnkgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgZGVmIGR1bW15KCphcmdzKSA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShkdW1teSkKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfdHJhbnNwb3J0KDEzLGR1bW15KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdHJhbnNwb3J0KDMsZHVtbXkpCisKICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5jbG9zZSgpCiAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuY2xvc2UoKQogICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpckNsaWVudCkKQEAgLTM1OCw2ICszNjgsOSBAQAogICAgICAgICAgICAgdHhuLmNvbW1pdCgpCiAgICAgICAgICAgICBicmVhawogCisgICAgICAgIGQgPSBzZWxmLmRiZW52TWFzdGVyLnJlcF9zdGF0KGZsYWdzPWRiLkRCX1NUQVRfQ0xFQVIpOworICAgICAgICBzZWxmLmFzc2VydFRydWUoIm1hc3Rlcl9jaGFuZ2VzIiBpbiBkKQorCiAgICAgICAgIHR4bj1zZWxmLmRiZW52TWFzdGVyLnR4bl9iZWdpbigpCiAgICAgICAgIHNlbGYuZGJNYXN0ZXIucHV0KCJBQkMiLCAiMTIzIiwgdHhuPXR4bikKICAgICAgICAgdHhuLmNvbW1pdCgpCkBAIC0zNzEsNyArMzg0LDcgQEAKICAgICAgICAgICAgIGlmIHYgaXMgTm9uZSA6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50aW1lKCk8dGltZW91dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIjEyMyIsIHYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIHYpCiAKICAgICAgICAgdHhuPXNlbGYuZGJlbnZNYXN0ZXIudHhuX2JlZ2luKCkKICAgICAgICAgc2VsZi5kYk1hc3Rlci5kZWxldGUoIkFCQyIsIHR4bj10eG4pCkBAIC0zODQsNyArMzk3LDcgQEAKICAgICAgICAgICAgIGlmIHYgaXMgTm9uZSA6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50aW1lKCk8dGltZW91dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB2KQogCiAgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDcpIDoKICAgICAgICAgZGVmIHRlc3QwMl90ZXN0X3JlcXVlc3Qoc2VsZikgOgpAQCAtNDE5LDcgKzQzMiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgZGIuREJSZXBVbmF2YWlsRXJyb3IgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZWxlY3Rpb25fc3RhdHVzWzBdIGFuZCBub3Qgc2VsZi5jb25maXJtZWRfbWFzdGVyIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Rpb25fc3RhdHVzWzBdID0gVHJ1ZQpAQCAtNDQ5LDYgKzQ2MSwxNCBAQAogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb25maXJtZWRfbWFzdGVyKQogCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDcpIDoKKyAgICAgICAgZGVmIHRlc3QwNF90ZXN0X2Nsb2Nrc2tldyhzZWxmKSA6CisgICAgICAgICAgICBmYXN0LCBzbG93ID0gMTIzNCwgMTIzMAorICAgICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfc2V0X2Nsb2Nrc2tldyhmYXN0LCBzbG93KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoZmFzdCwgc2xvdyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX2dldF9jbG9ja3NrZXcoKSkKKyAgICAgICAgICAgIHNlbGYuYmFzaWNfcmVwX3RocmVhZGluZygpCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CmRpZmYgLS1naXQgYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3NlcXVlbmNlLnB5IGIvTGliL2JzZGRiL3Rlc3QvdGVzdF9zZXF1ZW5jZS5weQppbmRleCBiNjFlYWQ0Li4zZDNlZTI5IDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3NlcXVlbmNlLnB5CisrKyBiL0xpYi9ic2RkYi90ZXN0L3Rlc3Rfc2VxdWVuY2UucHkKQEAgLTYsNyArNiw3IEBACiAKIGNsYXNzIERCU2VxdWVuY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTM3LDUzICszNyw1MyBAQAogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQogICAgICAgICBzdGFydF92YWx1ZSA9IDEwICogc2VsZi5pbnRfMzJfbWF4CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhBMDAwMDAwMDAsIHN0YXJ0X3ZhbHVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5pbml0X3ZhbHVlKHN0YXJ0X3ZhbHVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2lkJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0YXJ0X3ZhbHVlLCBzZWxmLnNlcS5nZXQoNSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0YXJ0X3ZhbHVlICsgNSwgc2VsZi5zZXEuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEuaW5pdGlhbF92YWx1ZShzdGFydF92YWx1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2lkJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfdmFsdWUsIHNlbGYuc2VxLmdldCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF92YWx1ZSArIDUsIHNlbGYuc2VxLmdldCgpKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLnJlbW92ZSh0eG49Tm9uZSwgZmxhZ3M9MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLnJlbW92ZSh0eG49Tm9uZSwgZmxhZ3M9MCkpCiAgICAgICAgIGRlbCBzZWxmLnNlcQogCiAgICAgZGVmIHRlc3RfZ2V0X2tleShzZWxmKToKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKICAgICAgICAga2V5ID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9a2V5LCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoa2V5LCBzZWxmLnNlcS5nZXRfa2V5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9a2V5LCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIHNlbGYuc2VxLmdldF9rZXkoKSkKIAogICAgIGRlZiB0ZXN0X2dldF9kYnAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kLCBzZWxmLnNlcS5nZXRfZGJwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZCwgc2VsZi5zZXEuZ2V0X2RicCgpKQogCiAgICAgZGVmIHRlc3RfY2FjaGVzaXplKHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQogICAgICAgICBjYXNoZV9zaXplID0gMTAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEuc2V0X2NhY2hlc2l6ZShjYXNoZV9zaXplKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjYXNoZV9zaXplLCBzZWxmLnNlcS5nZXRfY2FjaGVzaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEuc2V0X2NhY2hlc2l6ZShjYXNoZV9zaXplKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzaGVfc2l6ZSwgc2VsZi5zZXEuZ2V0X2NhY2hlc2l6ZSgpKQogCiAgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCiAgICAgICAgIGZsYWcgPSBkYi5EQl9TRVFfV1JBUDsKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEuc2V0X2ZsYWdzKGZsYWcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsYWcsIHNlbGYuc2VxLmdldF9mbGFncygpICYgZmxhZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5zZXRfZmxhZ3MoZmxhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWcsIHNlbGYuc2VxLmdldF9mbGFncygpICYgZmxhZykKIAogICAgIGRlZiB0ZXN0X3JhbmdlKHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQogICAgICAgICBzZXFfcmFuZ2UgPSAoMTAgKiBzZWxmLmludF8zMl9tYXgsIDExICogc2VsZi5pbnRfMzJfbWF4IC0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEuc2V0X3JhbmdlKHNlcV9yYW5nZSkpCi0gICAgICAgIHNlbGYuc2VxLmluaXRfdmFsdWUoc2VxX3JhbmdlWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlcV9yYW5nZSwgc2VsZi5zZXEuZ2V0X3JhbmdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEuc2V0X3JhbmdlKHNlcV9yYW5nZSkpCisgICAgICAgIHNlbGYuc2VxLmluaXRpYWxfdmFsdWUoc2VxX3JhbmdlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXFfcmFuZ2UsIHNlbGYuc2VxLmdldF9yYW5nZSgpKQogCiAgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKICAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKICAgICAgICAgc3RhdCA9IHNlbGYuc2VxLnN0YXQoKQogICAgICAgICBmb3IgcGFyYW0gaW4gKCdub3dhaXQnLCAnbWluJywgJ21heCcsICd2YWx1ZScsICdjdXJyZW50JywKICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnLCAnY2FjaGVfc2l6ZScsICdsYXN0X3ZhbHVlJywgJ3dhaXQnKToKQEAgLTEwNiwyNCArMTA2LDI0IEBACiAgICAgZGVmIHRlc3RfNjRiaXRzKHNlbGYpIDoKICAgICAgICAgIyBXZSBkb24ndCB1c2UgYm90aCBleHRyZW1lcyBiZWNhdXNlIHRoZXkgYXJlIHByb2JsZW1hdGljCiAgICAgICAgIHZhbHVlX3BsdXM9KDFMPDw2MyktMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg5MjIzMzcyMDM2ODU0Nzc1ODA2TCx2YWx1ZV9wbHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDkyMjMzNzIwMzY4NTQ3NzU4MDZMLHZhbHVlX3BsdXMpCiAgICAgICAgIHZhbHVlX21pbnVzPSgtMUw8PDYzKSsxICAjIFR3byBjb21wbGVtZW50Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC05MjIzMzcyMDM2ODU0Nzc1ODA3TCx2YWx1ZV9taW51cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtOTIyMzM3MjAzNjg1NDc3NTgwN0wsdmFsdWVfbWludXMpCiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLmluaXRfdmFsdWUodmFsdWVfcGx1cy0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2lkJywgdHhuPU5vbmUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEuaW5pdGlhbF92YWx1ZSh2YWx1ZV9wbHVzLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdpZCcsIHR4bj1Ob25lLAogICAgICAgICAgICAgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsdWVfcGx1cy0xLCBzZWxmLnNlcS5nZXQoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHZhbHVlX3BsdXMsIHNlbGYuc2VxLmdldCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZV9wbHVzLTEsIHNlbGYuc2VxLmdldCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZV9wbHVzLCBzZWxmLnNlcS5nZXQoMSkpCiAKICAgICAgICAgc2VsZi5zZXEucmVtb3ZlKHR4bj1Ob25lLCBmbGFncz0wKQogCiAgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKE5vbmUsIHNlbGYuc2VxLmluaXRfdmFsdWUodmFsdWVfbWludXMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5pbml0aWFsX3ZhbHVlKHZhbHVlX21pbnVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwKICAgICAgICAgICAgIGZsYWdzPWRiLkRCX0NSRUFURSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHZhbHVlX21pbnVzLCBzZWxmLnNlcS5nZXQoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHZhbHVlX21pbnVzKzEsIHNlbGYuc2VxLmdldCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZV9taW51cywgc2VsZi5zZXEuZ2V0KDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlX21pbnVzKzEsIHNlbGYuc2VxLmdldCgxKSkKIAogICAgIGRlZiB0ZXN0X211bHRpcGxlX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kKQpkaWZmIC0tZ2l0IGEvTGliL2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCAyOGEyNTU1Li45MTAwMmI4IDEwMDY0NAotLS0gYS9MaWIvYnNkZGIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvYnNkZGIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtMjEsNyArMjEsNiBAQAogCiBpZiBoYXZlX3RocmVhZHMgOgogICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKLSAgICBpbXBvcnQgc3lzCiAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgY3VycmVudFRocmVhZAogICAgIGVsc2UgOgpAQCAtMzYsOCArMzUsNyBAQAogICAgIGRic2V0ZmxhZ3MgICA9IDAKICAgICBlbnZmbGFncyAgICAgPSAwCiAKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA0KSA6CiAgICAgICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhleHByLG1zZz1tc2cpCiAKQEAgLTk5LDcgKzk3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoc2VsZi5kLCB4KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAncmVhZGVyICVkJyAlIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICApI3ZlcmJvc2UgPSB2ZXJib3NlKQotICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgICAgIHJ0LnNldERhZW1vbihUcnVlKQogICAgICAgICAgICAgZWxzZSA6CkBAIC0xMTgsNyArMTE1LDYgQEAKICAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHd0KQogCiAgICAgICAgIGZvciB0IGluIHdyaXRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgICAgIGVsc2UgOgpAQCAtMTMxLDcgKzEyNyw2IEBACiAgICAgICAgICAgICB0LmpvaW4oKQogCiAgICAgZGVmIHdyaXRlclRocmVhZChzZWxmLCBkLCBrZXlzLCByZWFkZXJzKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQogICAgICAgICBlbHNlIDoKQEAgLTE2MSw3ICsxNTYsNiBAQAogICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQogCiAgICAgZGVmIHJlYWRlclRocmVhZChzZWxmLCBkLCByZWFkZXJOdW0pOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCiAgICAgICAgIGVsc2UgOgpAQCAtMjMxLDcgKzIyNSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gKHNlbGYuZCwgeCksCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ3JlYWRlciAlZCcgJSB4LAogICAgICAgICAgICAgICAgICAgICAgICAgKSN2ZXJib3NlID0gdmVyYm9zZSkKLSAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgICAgICBydC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgICAgIGVsc2UgOgpAQCAtMjUwLDcgKzI0Myw2IEBACiAgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3dCkKIAogICAgICAgICBmb3IgdCBpbiB3cml0ZXJzOgotICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCiAgICAgICAgICAgICBlbHNlIDoKQEAgLTI2Myw3ICsyNTUsNiBAQAogICAgICAgICAgICAgdC5qb2luKCkKIAogICAgIGRlZiB3cml0ZXJUaHJlYWQoc2VsZiwgZCwga2V5cywgcmVhZGVycyk6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgogICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKICAgICAgICAgZWxzZSA6CkBAIC0yOTAsNyArMjgxLDYgQEAKICAgICAgICAgICAgIHByaW50ICIlczogdGhyZWFkIGZpbmlzaGVkIiAlIG5hbWUKIAogICAgIGRlZiByZWFkZXJUaHJlYWQoc2VsZiwgZCwgcmVhZGVyTnVtKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQogICAgICAgICBlbHNlIDoKQEAgLTM2MSw3ICszNTEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChzZWxmLmQsIHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICdyZWFkZXIgJWQnICUgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICkjdmVyYm9zZSA9IHZlcmJvc2UpCi0gICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICAgICAgcnQuc2V0RGFlbW9uKFRydWUpCiAgICAgICAgICAgICBlbHNlIDoKQEAgLTM3OSw3ICszNjgsNiBAQAogICAgICAgICAgICAgd3JpdGVycy5hcHBlbmQod3QpCiAKICAgICAgICAgZHQgPSBUaHJlYWQodGFyZ2V0ID0gc2VsZi5kZWFkbG9ja1RocmVhZCkKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBkdC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgZWxzZSA6CkBAIC0zODcsNyArMzc1LDYgQEAKICAgICAgICAgZHQuc3RhcnQoKQogCiAgICAgICAgIGZvciB0IGluIHdyaXRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKICAgICAgICAgICAgIGVsc2UgOgpAQCAtNDAzLDcgKzM5MCw2IEBACiAgICAgICAgIGR0LmpvaW4oKQogCiAgICAgZGVmIHdyaXRlclRocmVhZChzZWxmLCBkLCBrZXlzLCByZWFkZXJzKToKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CiAgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQogICAgICAgICBlbHNlIDoKQEAgLTQyNCwxNCArNDEwLDE3IEBACiAgICAgICAgICAgICAgICAgcmVhZGVycy5wb3AoKS5zdGFydCgpCiAgICAgICAgICAgICBleGNlcHQgKGRiLkRCTG9ja0RlYWRsb2NrRXJyb3IsIGRiLkRCTG9ja05vdEdyYW50ZWRFcnJvciksIHZhbDoKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsIHZhbC5hcmdzWzFdKQorICAgICAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwgdmFsWzFdKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQogCiAgICAgZGVmIHJlYWRlclRocmVhZChzZWxmLCBkLCByZWFkZXJOdW0pOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCiAgICAgICAgIGVsc2UgOgpAQCAtNDU1LDcgKzQ0NCwxMSBAQAogICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gVHJ1ZQogICAgICAgICAgICAgZXhjZXB0IChkYi5EQkxvY2tEZWFkbG9ja0Vycm9yLCBkYi5EQkxvY2tOb3RHcmFudGVkRXJyb3IpLCB2YWw6CiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBBYm9ydGluZyB0cmFuc2FjdGlvbiAoJXMpIiAlIChuYW1lLCB2YWwuYXJnc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsIHZhbFsxXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJXM6IEFib3J0aW5nIHRyYW5zYWN0aW9uICglcykiICUgKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5hcmdzWzFdKQogICAgICAgICAgICAgICAgIGMuY2xvc2UoKQogICAgICAgICAgICAgICAgIHR4bi5hYm9ydCgpCiAKZGlmZiAtLWdpdCBhL0xpYi9jUHJvZmlsZS5weSBiL0xpYi9jUHJvZmlsZS5weQppbmRleCAxOWQ1ODA0Li5iMmVmZDA0IDEwMDc1NQotLS0gYS9MaWIvY1Byb2ZpbGUucHkKKysrIGIvTGliL2NQcm9maWxlLnB5CkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lKToKK2RlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgogICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCiAgICAgb3B0aW9uYWxseSBzYXZpbmcgcmVzdWx0cyBpbiBmaWxlbmFtZS4KIApAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoKQorICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQogICAgIHJldHVybiByZXN1bHQKIAogIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KQEAgLTE2OSw3ICsxNjksOCBAQAogICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW91dGZpbGUnLCBkZXN0PSJvdXRmaWxlIiwKICAgICAgICAgaGVscD0iU2F2ZSBzdGF0cyB0byA8b3V0ZmlsZT4iLCBkZWZhdWx0PU5vbmUpCiAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc29ydCcsIGRlc3Q9InNvcnQiLAotICAgICAgICBoZWxwPSJTb3J0IG9yZGVyIHdoZW4gcHJpbnRpbmcgdG8gc3Rkb3V0LCBiYXNlZCBvbiBwc3RhdHMuU3RhdHMgY2xhc3MiLCBkZWZhdWx0PS0xKQorICAgICAgICBoZWxwPSJTb3J0IG9yZGVyIHdoZW4gcHJpbnRpbmcgdG8gc3Rkb3V0LCBiYXNlZCBvbiBwc3RhdHMuU3RhdHMgY2xhc3MiLAorICAgICAgICBkZWZhdWx0PS0xKQogCiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKQEAgLTE3OCw5ICsxNzksMTcgQEAKICAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgc3lzLmFyZ3ZbOl0gPSBhcmdzCiAKLSAgICBpZiAobGVuKHN5cy5hcmd2KSA+IDApOgotICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKSkKLSAgICAgICAgcnVuKCdleGVjZmlsZSglciknICUgKHN5cy5hcmd2WzBdLCksIG9wdGlvbnMub3V0ZmlsZSwgb3B0aW9ucy5zb3J0KQorICAgIGlmIGxlbihhcmdzKSA+IDA6CisgICAgICAgIHByb2duYW1lID0gYXJnc1swXQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MucGF0aC5kaXJuYW1lKHByb2duYW1lKSkKKyAgICAgICAgd2l0aCBvcGVuKHByb2duYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGZwLnJlYWQoKSwgcHJvZ25hbWUsICdleGVjJykKKyAgICAgICAgZ2xvYnMgPSB7CisgICAgICAgICAgICAnX19maWxlX18nOiBwcm9nbmFtZSwKKyAgICAgICAgICAgICdfX25hbWVfXyc6ICdfX21haW5fXycsCisgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBOb25lLAorICAgICAgICB9CisgICAgICAgIHJ1bmN0eChjb2RlLCBnbG9icywgTm9uZSwgb3B0aW9ucy5vdXRmaWxlLCBvcHRpb25zLnNvcnQpCiAgICAgZWxzZToKICAgICAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKICAgICByZXR1cm4gcGFyc2VyCmRpZmYgLS1naXQgYS9MaWIvY2FsZW5kYXIucHkgYi9MaWIvY2FsZW5kYXIucHkKaW5kZXggMmU0NWUyNC4uMzEwNmVmMiAxMDA2NDQKLS0tIGEvTGliL2NhbGVuZGFyLnB5CisrKyBiL0xpYi9jYWxlbmRhci5weQpAQCAtOTUsNyArOTUsNyBAQAogCiAKIGRlZiBpc2xlYXAoeWVhcik6Ci0gICAgIiIiUmV0dXJuIDEgZm9yIGxlYXAgeWVhcnMsIDAgZm9yIG5vbi1sZWFwIHllYXJzLiIiIgorICAgICIiIlJldHVybiBUcnVlIGZvciBsZWFwIHllYXJzLCBGYWxzZSBmb3Igbm9uLWxlYXAgeWVhcnMuIiIiCiAgICAgcmV0dXJuIHllYXIgJSA0ID09IDAgYW5kICh5ZWFyICUgMTAwICE9IDAgb3IgeWVhciAlIDQwMCA9PSAwKQogCiAKQEAgLTQ4Niw4ICs0ODYsOCBAQAogICAgICAgICBzZWxmLmxvY2FsZSA9IGxvY2FsZQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5vbGRsb2NhbGUgPSBfbG9jYWxlLnNldGxvY2FsZShfbG9jYWxlLkxDX1RJTUUsIHNlbGYubG9jYWxlKQotICAgICAgICByZXR1cm4gX2xvY2FsZS5nZXRsb2NhbGUoX2xvY2FsZS5MQ19USU1FKVsxXQorICAgICAgICBzZWxmLm9sZGxvY2FsZSA9IF9sb2NhbGUuZ2V0bG9jYWxlKF9sb2NhbGUuTENfVElNRSkKKyAgICAgICAgX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19USU1FLCBzZWxmLmxvY2FsZSkKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CiAgICAgICAgIF9sb2NhbGUuc2V0bG9jYWxlKF9sb2NhbGUuTENfVElNRSwgc2VsZi5vbGRsb2NhbGUpCmRpZmYgLS1naXQgYS9MaWIvY2dpLnB5IGIvTGliL2NnaS5weQppbmRleCBkYjEwYTYyLi5iNGM2MjBhIDEwMDc1NQotLS0gYS9MaWIvY2dpLnB5CisrKyBiL0xpYi9jZ2kucHkKQEAgLTQ1LDEwICs0NSwxMCBAQAogd2l0aCBjYXRjaF93YXJuaW5ncygpOgogICAgIGlmIHN5cy5weTNrd2FybmluZzoKICAgICAgICAgZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKm1pbWV0b29scyBoYXMgYmVlbiByZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBmaWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qcmZjODIyIGhhcyBiZWVuIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgaW1wb3J0IG1pbWV0b29scwotICAgIGlmIHN5cy5weTNrd2FybmluZzoKLSAgICAgICAgZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKnJmYzgyMiBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgIGltcG9ydCByZmM4MjIKIAogdHJ5OgpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICAgIGVudmlyb24gICAgICAgICA6IGVudmlyb25tZW50IGRpY3Rpb25hcnk7IGRlZmF1bHQ6IG9zLmVudmlyb24KIAogICAgICAgICBrZWVwX2JsYW5rX3ZhbHVlczogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYmxhbmsgdmFsdWVzIGluCi0gICAgICAgICAgICBVUkwgZW5jb2RlZCBmb3JtcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLgorICAgICAgICAgICAgcGVyY2VudC1lbmNvZGVkIGZvcm1zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCiAgICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmtzIHNob3VsZCBiZSByZXRhaW5lZCBhcwogICAgICAgICAgICAgYmxhbmsgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlIHZhbHVlIGluZGljYXRlcyB0aGF0CiAgICAgICAgICAgICBibGFuayB2YWx1ZXMgYXJlIHRvIGJlIGlnbm9yZWQgYW5kIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlCkBAIC0xODAsOCArMTgwLDggQEAKIAogZGVmIHBhcnNlX3FzKHFzLCBrZWVwX2JsYW5rX3ZhbHVlcz0wLCBzdHJpY3RfcGFyc2luZz0wKToKICAgICAiIiJQYXJzZSBhIHF1ZXJ5IGdpdmVuIGFzIGEgc3RyaW5nIGFyZ3VtZW50LiIiIgotICAgIHdhcm4oImNnaS5wYXJzZV9xcyBpcyBkZXByZWNhdGVkLCB1c2UgdXJscGFyc2UucGFyc2VfcXMgXAotICAgICAgICAgICAgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgd2FybigiY2dpLnBhcnNlX3FzIGlzIGRlcHJlY2F0ZWQsIHVzZSB1cmxwYXJzZS5wYXJzZV9xcyBpbnN0ZWFkIiwKKyAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgcmV0dXJuIHVybHBhcnNlLnBhcnNlX3FzKHFzLCBrZWVwX2JsYW5rX3ZhbHVlcywgc3RyaWN0X3BhcnNpbmcpCiAKIApAQCAtNDExLDcgKzQxMSw3IEBACiAgICAgICAgIGVudmlyb24gICAgICAgICA6IGVudmlyb25tZW50IGRpY3Rpb25hcnk7IGRlZmF1bHQ6IG9zLmVudmlyb24KIAogICAgICAgICBrZWVwX2JsYW5rX3ZhbHVlczogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYmxhbmsgdmFsdWVzIGluCi0gICAgICAgICAgICBVUkwgZW5jb2RlZCBmb3JtcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLgorICAgICAgICAgICAgcGVyY2VudC1lbmNvZGVkIGZvcm1zIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCiAgICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmtzIHNob3VsZCBiZSByZXRhaW5lZCBhcwogICAgICAgICAgICAgYmxhbmsgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlIHZhbHVlIGluZGljYXRlcyB0aGF0CiAgICAgICAgICAgICBibGFuayB2YWx1ZXMgYXJlIHRvIGJlIGlnbm9yZWQgYW5kIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlCmRpZmYgLS1naXQgYS9MaWIvY2dpdGIucHkgYi9MaWIvY2dpdGIucHkKaW5kZXggNzY2ZDMzMS4uNWJlY2RmMyAxMDA2NDQKLS0tIGEvTGliL2NnaXRiLnB5CisrKyBiL0xpYi9jZ2l0Yi5weQpAQCAtMTksMTMgKzE5LDE5IEBACiBmb3IgeW91LCBjYWxsIGNnaXRiLmhhbmRsZXIoKS4gIFRoZSBvcHRpb25hbCBhcmd1bWVudCB0byBoYW5kbGVyKCkgaXMgYQogMy1pdGVtIHR1cGxlIChldHlwZSwgZXZhbHVlLCBldGIpIGp1c3QgbGlrZSB0aGUgdmFsdWUgb2Ygc3lzLmV4Y19pbmZvKCkuCiBUaGUgZGVmYXVsdCBoYW5kbGVyIGRpc3BsYXlzIG91dHB1dCBhcyBIVE1MLgorCiAiIiIKLQotX19hdXRob3JfXyA9ICdLYS1QaW5nIFllZScKLQotX192ZXJzaW9uX18gPSAnJFJldmlzaW9uJCcKLQoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBrZXl3b3JkCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgb3MKK2ltcG9ydCBweWRvYwogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHRva2VuaXplCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdHlwZXMKIAogZGVmIHJlc2V0KCk6CiAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHRoYXQgcmVzZXRzIHRoZSBDR0kgYW5kIGJyb3dzZXIgdG8gYSBrbm93biBzdGF0ZS4iIiIKQEAgLTc0LDcgKzgwLDYgQEAKIAogZGVmIHNjYW52YXJzKHJlYWRlciwgZnJhbWUsIGxvY2Fscyk6CiAgICAgIiIiU2NhbiBvbmUgbG9naWNhbCBsaW5lIG9mIFB5dGhvbiBhbmQgbG9vayB1cCB2YWx1ZXMgb2YgdmFyaWFibGVzIHVzZWQuIiIiCi0gICAgaW1wb3J0IHRva2VuaXplLCBrZXl3b3JkCiAgICAgdmFycywgbGFzdHRva2VuLCBwYXJlbnQsIHByZWZpeCwgdmFsdWUgPSBbXSwgTm9uZSwgTm9uZSwgJycsIF9fVU5ERUZfXwogICAgIGZvciB0dHlwZSwgdG9rZW4sIHN0YXJ0LCBlbmQsIGxpbmUgaW4gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKHJlYWRlcik6CiAgICAgICAgIGlmIHR0eXBlID09IHRva2VuaXplLk5FV0xJTkU6IGJyZWFrCkBAIC05Niw3ICsxMDEsNiBAQAogCiBkZWYgaHRtbChlaW5mbywgY29udGV4dD01KToKICAgICAiIiJSZXR1cm4gYSBuaWNlIEhUTUwgZG9jdW1lbnQgZGVzY3JpYmluZyBhIGdpdmVuIHRyYWNlYmFjay4iIiIKLSAgICBpbXBvcnQgb3MsIHR5cGVzLCB0aW1lLCB0cmFjZWJhY2ssIGxpbmVjYWNoZSwgaW5zcGVjdCwgcHlkb2MKICAgICBldHlwZSwgZXZhbHVlLCBldGIgPSBlaW5mbwogICAgIGlmIHR5cGUoZXR5cGUpIGlzIHR5cGVzLkNsYXNzVHlwZToKICAgICAgICAgZXR5cGUgPSBldHlwZS5fX25hbWVfXwpAQCAtMTM4LDEwICsxNDIsMTEgQEAKICAgICAgICAgICAgIGkgPSBsbnVtIC0gaW5kZXgKICAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgICAgIG51bSA9IHNtYWxsKCcmbmJzcDsnICogKDUtbGVuKHN0cihpKSkpICsgc3RyKGkpKSArICcmbmJzcDsnCi0gICAgICAgICAgICAgICAgbGluZSA9ICc8dHQ+JXMlczwvdHQ+JyAlIChudW0sIHB5ZG9jLmh0bWwucHJlZm9ybWF0KGxpbmUpKQogICAgICAgICAgICAgICAgIGlmIGkgaW4gaGlnaGxpZ2h0OgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gJzx0dD49Jmd0OyVzJXM8L3R0PicgJSAobnVtLCBweWRvYy5odG1sLnByZWZvcm1hdChsaW5lKSkKICAgICAgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQoJzx0cj48dGQgYmdjb2xvcj0iI2ZmY2NlZSI+JXM8L3RkPjwvdHI+JyAlIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9ICc8dHQ+Jm5ic3A7Jm5ic3A7JXMlczwvdHQ+JyAlIChudW0sIHB5ZG9jLmh0bWwucHJlZm9ybWF0KGxpbmUpKQogICAgICAgICAgICAgICAgICAgICByb3dzLmFwcGVuZCgnPHRyPjx0ZD4lczwvdGQ+PC90cj4nICUgZ3JleShsaW5lKSkKICAgICAgICAgICAgICAgICBpICs9IDEKIApAQCAtMTczLDcgKzE3OCw2IEBACiAgICAgICAgICAgICB2YWx1ZSA9IHB5ZG9jLmh0bWwucmVwcihnZXRhdHRyKGV2YWx1ZSwgbmFtZSkpCiAgICAgICAgICAgICBleGNlcHRpb24uYXBwZW5kKCdcbjxicj4lcyVzJm5ic3A7PVxuJXMnICUgKGluZGVudCwgbmFtZSwgdmFsdWUpKQogCi0gICAgaW1wb3J0IHRyYWNlYmFjawogICAgIHJldHVybiBoZWFkICsgJycuam9pbihmcmFtZXMpICsgJycuam9pbihleGNlcHRpb24pICsgJycnCiAKIApAQCAtMTg4LDcgKzE5Miw2IEBACiAKIGRlZiB0ZXh0KGVpbmZvLCBjb250ZXh0PTUpOgogICAgICIiIlJldHVybiBhIHBsYWluIHRleHQgZG9jdW1lbnQgZGVzY3JpYmluZyBhIGdpdmVuIHRyYWNlYmFjay4iIiIKLSAgICBpbXBvcnQgb3MsIHR5cGVzLCB0aW1lLCB0cmFjZWJhY2ssIGxpbmVjYWNoZSwgaW5zcGVjdCwgcHlkb2MKICAgICBldHlwZSwgZXZhbHVlLCBldGIgPSBlaW5mbwogICAgIGlmIHR5cGUoZXR5cGUpIGlzIHR5cGVzLkNsYXNzVHlwZToKICAgICAgICAgZXR5cGUgPSBldHlwZS5fX25hbWVfXwpAQCAtMjQ1LDcgKzI0OCw2IEBACiAgICAgICAgICAgICB2YWx1ZSA9IHB5ZG9jLnRleHQucmVwcihnZXRhdHRyKGV2YWx1ZSwgbmFtZSkpCiAgICAgICAgICAgICBleGNlcHRpb24uYXBwZW5kKCdcbiVzJXMgPSAlcycgJSAoIiAiKjQsIG5hbWUsIHZhbHVlKSkKIAotICAgIGltcG9ydCB0cmFjZWJhY2sKICAgICByZXR1cm4gaGVhZCArICcnLmpvaW4oZnJhbWVzKSArICcnLmpvaW4oZXhjZXB0aW9uKSArICcnJwogCiBUaGUgYWJvdmUgaXMgYSBkZXNjcmlwdGlvbiBvZiBhbiBlcnJvciBpbiBhIFB5dGhvbiBwcm9ncmFtLiAgSGVyZSBpcwpAQCAtMjc4LDcgKzI4MCw2IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRvYyA9IGZvcm1hdHRlcihpbmZvLCBzZWxmLmNvbnRleHQpCiAgICAgICAgIGV4Y2VwdDogICAgICAgICAgICAgICAgICAgICAgICAgIyBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcKLSAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKICAgICAgICAgICAgIGRvYyA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKmluZm8pKQogICAgICAgICAgICAgcGxhaW4gPSBUcnVlCiAKQEAgLTI5Miw3ICsyOTMsNiBAQAogICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKCc8cD5BIHByb2JsZW0gb2NjdXJyZWQgaW4gYSBQeXRob24gc2NyaXB0LlxuJykKIAogICAgICAgICBpZiBzZWxmLmxvZ2RpciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGVtcGZpbGUKICAgICAgICAgICAgIHN1ZmZpeCA9IFsnLnR4dCcsICcuaHRtbCddW3NlbGYuZm9ybWF0PT0iaHRtbCJdCiAgICAgICAgICAgICAoZmQsIHBhdGgpID0gdGVtcGZpbGUubWtzdGVtcChzdWZmaXg9c3VmZml4LCBkaXI9c2VsZi5sb2dkaXIpCiAgICAgICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvY21kLnB5IGIvTGliL2NtZC5weQppbmRleCBlYzYyYzc0Li4yOWVhNDYwIDEwMDY0NAotLS0gYS9MaWIvY21kLnB5CisrKyBiL0xpYi9jbWQucHkKQEAgLTI4MSwxOSArMjgxLDE1IEBACiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGdldF9uYW1lcyhzZWxmKToKLSAgICAgICAgIyBJbmhlcml0YW5jZSBzYXlzIHdlIGhhdmUgdG8gbG9vayBpbiBjbGFzcyBhbmQKLSAgICAgICAgIyBiYXNlIGNsYXNzZXM7IG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQuCi0gICAgICAgIG5hbWVzID0gW10KLSAgICAgICAgY2xhc3NlcyA9IFtzZWxmLl9fY2xhc3NfX10KLSAgICAgICAgd2hpbGUgY2xhc3NlczoKLSAgICAgICAgICAgIGFjbGFzcyA9IGNsYXNzZXMucG9wKDApCi0gICAgICAgICAgICBpZiBhY2xhc3MuX19iYXNlc19fOgotICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzICsgbGlzdChhY2xhc3MuX19iYXNlc19fKQotICAgICAgICAgICAgbmFtZXMgPSBuYW1lcyArIGRpcihhY2xhc3MpCi0gICAgICAgIHJldHVybiBuYW1lcworICAgICAgICAjIFRoaXMgbWV0aG9kIHVzZWQgdG8gcHVsbCBpbiBiYXNlIGNsYXNzIGF0dHJpYnV0ZXMKKyAgICAgICAgIyBhdCBhIHRpbWUgZGlyKCkgZGlkbid0IGRvIGl0IHlldC4KKyAgICAgICAgcmV0dXJuIGRpcihzZWxmLl9fY2xhc3NfXykKIAogICAgIGRlZiBjb21wbGV0ZV9oZWxwKHNlbGYsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuY29tcGxldGVuYW1lcygqYXJncykKKyAgICAgICAgY29tbWFuZHMgPSBzZXQoc2VsZi5jb21wbGV0ZW5hbWVzKCphcmdzKSkKKyAgICAgICAgdG9waWNzID0gc2V0KGFbNTpdIGZvciBhIGluIHNlbGYuZ2V0X25hbWVzKCkKKyAgICAgICAgICAgICAgICAgICAgIGlmIGEuc3RhcnRzd2l0aCgnaGVscF8nICsgYXJnc1swXSkpCisgICAgICAgIHJldHVybiBsaXN0KGNvbW1hbmRzIHwgdG9waWNzKQogCiAgICAgZGVmIGRvX2hlbHAoc2VsZiwgYXJnKToKICAgICAgICAgaWYgYXJnOgpkaWZmIC0tZ2l0IGEvTGliL2NvZGUucHkgYi9MaWIvY29kZS5weQppbmRleCAyZTNlZTExLi4zYjM5ZDFiIDEwMDY0NAotLS0gYS9MaWIvY29kZS5weQorKysgYi9MaWIvY29kZS5weQpAQCAtMzA2LDYgKzMwNiw1IEBACiAgICAgY29uc29sZS5pbnRlcmFjdChiYW5uZXIpCiAKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgcGRiCi0gICAgcGRiLnJ1bigiaW50ZXJhY3QoKVxuIikKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaW50ZXJhY3QoKQpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zLnB5IGIvTGliL2NvbGxlY3Rpb25zLnB5CmluZGV4IGI4MWVmZmUuLmJiNmIxNWQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMucHkKQEAgLTEsNCArMSw0IEBACi1fX2FsbF9fID0gWydkZXF1ZScsICdkZWZhdWx0ZGljdCcsICduYW1lZHR1cGxlJ10KK19fYWxsX18gPSBbJ0NvdW50ZXInLCAnZGVxdWUnLCAnZGVmYXVsdGRpY3QnLCAnbmFtZWR0dXBsZScsICdPcmRlcmVkRGljdCddCiAjIEZvciBib290c3RyYXBwaW5nIHJlYXNvbnMsIHRoZSBjb2xsZWN0aW9uIEFCQ3MgYXJlIGRlZmluZWQgaW4gX2FiY29sbC5weS4KICMgVGhleSBzaG91bGQgaG93ZXZlciBiZSBjb25zaWRlcmVkIGFuIGludGVncmFsIHBhcnQgb2YgY29sbGVjdGlvbnMucHkuCiBmcm9tIF9hYmNvbGwgaW1wb3J0ICoKQEAgLTYsMTEgKzYsMjIyIEBACiBfX2FsbF9fICs9IF9hYmNvbGwuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0Ci1mcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyCitmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cworaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAsIFwKKyAgICAgICAgICAgICAgICAgICAgICBpZmlsdGVyIGFzIF9pZmlsdGVyLCBpbWFwIGFzIF9pbWFwCit0cnk6CisgICAgZnJvbSB0aHJlYWQgaW1wb3J0IGdldF9pZGVudAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gZHVtbXlfdGhyZWFkIGltcG9ydCBnZXRfaWRlbnQKIAotZGVmIG5hbWVkdHVwbGUodHlwZW5hbWUsIGZpZWxkX25hbWVzLCB2ZXJib3NlPUZhbHNlKToKK2RlZiBfcmVjdXJzaXZlX3JlcHIodXNlcl9mdW5jdGlvbik6CisgICAgJ0RlY29yYXRvciB0byBtYWtlIGEgcmVwciBmdW5jdGlvbiByZXR1cm4gIi4uLiIgZm9yIGEgcmVjdXJzaXZlIGNhbGwnCisgICAgcmVwcl9ydW5uaW5nID0gc2V0KCkKKworICAgIGRlZiB3cmFwcGVyKHNlbGYpOgorICAgICAgICBrZXkgPSBpZChzZWxmKSwgZ2V0X2lkZW50KCkKKyAgICAgICAgaWYga2V5IGluIHJlcHJfcnVubmluZzoKKyAgICAgICAgICAgIHJldHVybiAnLi4uJworICAgICAgICByZXByX3J1bm5pbmcuYWRkKGtleSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbihzZWxmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVwcl9ydW5uaW5nLmRpc2NhcmQoa2V5KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAjIENhbid0IHVzZSBmdW5jdG9vbHMud3JhcHMoKSBoZXJlIGJlY2F1c2Ugb2YgYm9vdHN0cmFwIGlzc3VlcworICAgIHdyYXBwZXIuX19tb2R1bGVfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fbW9kdWxlX18nKQorICAgIHdyYXBwZXIuX19kb2NfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fZG9jX18nKQorICAgIHdyYXBwZXIuX19uYW1lX18gPSBnZXRhdHRyKHVzZXJfZnVuY3Rpb24sICdfX25hbWVfXycpCisgICAgcmV0dXJuIHdyYXBwZXIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIE9yZGVyZWREaWN0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBPcmRlcmVkRGljdChkaWN0KToKKyAgICAnRGljdGlvbmFyeSB0aGF0IHJlbWVtYmVycyBpbnNlcnRpb24gb3JkZXInCisgICAgIyBBbiBpbmhlcml0ZWQgZGljdCBtYXBzIGtleXMgdG8gdmFsdWVzLgorICAgICMgVGhlIGluaGVyaXRlZCBkaWN0IHByb3ZpZGVzIF9fZ2V0aXRlbV9fLCBfX2xlbl9fLCBfX2NvbnRhaW5zX18sIGFuZCBnZXQuCisgICAgIyBUaGUgcmVtYWluaW5nIG1ldGhvZHMgYXJlIG9yZGVyLWF3YXJlLgorICAgICMgQmlnLU8gcnVubmluZyB0aW1lcyBmb3IgYWxsIG1ldGhvZHMgYXJlIHRoZSBzYW1lIGFzIGZvciByZWd1bGFyIGRpY3Rpb25hcmllcy4KKworICAgICMgVGhlIGludGVybmFsIHNlbGYuX19tYXAgZGljdGlvbmFyeSBtYXBzIGtleXMgdG8gbGlua3MgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuCisgICAgIyBUaGUgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgc2VudGluZWwgZWxlbWVudC4KKyAgICAjIFRoZSBzZW50aW5lbCBlbGVtZW50IG5ldmVyIGdldHMgZGVsZXRlZCAodGhpcyBzaW1wbGlmaWVzIHRoZSBhbGdvcml0aG0pLgorICAgICMgRWFjaCBsaW5rIGlzIHN0b3JlZCBhcyBhIGxpc3Qgb2YgbGVuZ3RoIHRocmVlOiAgW1BSRVYsIE5FWFQsIEtFWV0uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICcnJ0luaXRpYWxpemUgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LiAgU2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIGZvcgorICAgICAgICByZWd1bGFyIGRpY3Rpb25hcmllcywgYnV0IGtleXdvcmQgYXJndW1lbnRzIGFyZSBub3QgcmVjb21tZW5kZWQKKyAgICAgICAgYmVjYXVzZSB0aGVpciBpbnNlcnRpb24gb3JkZXIgaXMgYXJiaXRyYXJ5LgorCisgICAgICAgICcnJworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9fcm9vdAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9fcm9vdCA9IHJvb3QgPSBbTm9uZSwgTm9uZSwgTm9uZV0gICAgICMgc2VudGluZWwgbm9kZQorICAgICAgICAgICAgUFJFViA9IDAKKyAgICAgICAgICAgIE5FWFQgPSAxCisgICAgICAgICAgICByb290W1BSRVZdID0gcm9vdFtORVhUXSA9IHJvb3QKKyAgICAgICAgICAgIHNlbGYuX19tYXAgPSB7fQorICAgICAgICBzZWxmLl9fdXBkYXRlKCphcmdzLCAqKmt3ZHMpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSwgUFJFVj0wLCBORVhUPTEsIGRpY3Rfc2V0aXRlbT1kaWN0Ll9fc2V0aXRlbV9fKToKKyAgICAgICAgJ29kLl9fc2V0aXRlbV9fKGksIHkpIDw9PT4gb2RbaV09eScKKyAgICAgICAgIyBTZXR0aW5nIGEgbmV3IGl0ZW0gY3JlYXRlcyBhIG5ldyBsaW5rIHdoaWNoIGdvZXMgYXQgdGhlIGVuZCBvZiB0aGUgbGlua2VkCisgICAgICAgICMgbGlzdCwgYW5kIHRoZSBpbmhlcml0ZWQgZGljdGlvbmFyeSBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBrZXkvdmFsdWUgcGFpci4KKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcm9vdCA9IHNlbGYuX19yb290CisgICAgICAgICAgICBsYXN0ID0gcm9vdFtQUkVWXQorICAgICAgICAgICAgbGFzdFtORVhUXSA9IHJvb3RbUFJFVl0gPSBzZWxmLl9fbWFwW2tleV0gPSBbbGFzdCwgcm9vdCwga2V5XQorICAgICAgICBkaWN0X3NldGl0ZW0oc2VsZiwga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXksIFBSRVY9MCwgTkVYVD0xLCBkaWN0X2RlbGl0ZW09ZGljdC5fX2RlbGl0ZW1fXyk6CisgICAgICAgICdvZC5fX2RlbGl0ZW1fXyh5KSA8PT0+IGRlbCBvZFt5XScKKyAgICAgICAgIyBEZWxldGluZyBhbiBleGlzdGluZyBpdGVtIHVzZXMgc2VsZi5fX21hcCB0byBmaW5kIHRoZSBsaW5rIHdoaWNoIGlzCisgICAgICAgICMgdGhlbiByZW1vdmVkIGJ5IHVwZGF0aW5nIHRoZSBsaW5rcyBpbiB0aGUgcHJlZGVjZXNzb3IgYW5kIHN1Y2Nlc3NvciBub2Rlcy4KKyAgICAgICAgZGljdF9kZWxpdGVtKHNlbGYsIGtleSkKKyAgICAgICAgbGluayA9IHNlbGYuX19tYXAucG9wKGtleSkKKyAgICAgICAgbGlua19wcmV2ID0gbGlua1tQUkVWXQorICAgICAgICBsaW5rX25leHQgPSBsaW5rW05FWFRdCisgICAgICAgIGxpbmtfcHJldltORVhUXSA9IGxpbmtfbmV4dAorICAgICAgICBsaW5rX25leHRbUFJFVl0gPSBsaW5rX3ByZXYKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmLCBORVhUPTEsIEtFWT0yKToKKyAgICAgICAgJ29kLl9faXRlcl9fKCkgPD09PiBpdGVyKG9kKScKKyAgICAgICAgIyBUcmF2ZXJzZSB0aGUgbGlua2VkIGxpc3QgaW4gb3JkZXIuCisgICAgICAgIHJvb3QgPSBzZWxmLl9fcm9vdAorICAgICAgICBjdXJyID0gcm9vdFtORVhUXQorICAgICAgICB3aGlsZSBjdXJyIGlzIG5vdCByb290OgorICAgICAgICAgICAgeWllbGQgY3VycltLRVldCisgICAgICAgICAgICBjdXJyID0gY3VycltORVhUXQorCisgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmLCBQUkVWPTAsIEtFWT0yKToKKyAgICAgICAgJ29kLl9fcmV2ZXJzZWRfXygpIDw9PT4gcmV2ZXJzZWQob2QpJworICAgICAgICAjIFRyYXZlcnNlIHRoZSBsaW5rZWQgbGlzdCBpbiByZXZlcnNlIG9yZGVyLgorICAgICAgICByb290ID0gc2VsZi5fX3Jvb3QKKyAgICAgICAgY3VyciA9IHJvb3RbUFJFVl0KKyAgICAgICAgd2hpbGUgY3VyciBpcyBub3Qgcm9vdDoKKyAgICAgICAgICAgIHlpZWxkIGN1cnJbS0VZXQorICAgICAgICAgICAgY3VyciA9IGN1cnJbUFJFVl0KKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAnUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZycKKyAgICAgICAgaXRlbXMgPSBbW2ssIHNlbGZba11dIGZvciBrIGluIHNlbGZdCisgICAgICAgIHRtcCA9IHNlbGYuX19tYXAsIHNlbGYuX19yb290CisgICAgICAgIGRlbCBzZWxmLl9fbWFwLCBzZWxmLl9fcm9vdAorICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQorICAgICAgICBzZWxmLl9fbWFwLCBzZWxmLl9fcm9vdCA9IHRtcAorICAgICAgICBpZiBpbnN0X2RpY3Q6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICdvZC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gb2QuJworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLl9fbWFwLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBkZWwgbm9kZVs6XQorICAgICAgICAgICAgc2VsZi5fX3Jvb3RbOl0gPSBbc2VsZi5fX3Jvb3QsIHNlbGYuX19yb290LCBOb25lXQorICAgICAgICAgICAgc2VsZi5fX21hcC5jbGVhcigpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGljdC5jbGVhcihzZWxmKQorCisgICAgdXBkYXRlID0gX191cGRhdGUgPSBNdXRhYmxlTWFwcGluZy51cGRhdGUKKyAgICBrZXlzID0gTXV0YWJsZU1hcHBpbmcua2V5cworICAgIHZhbHVlcyA9IE11dGFibGVNYXBwaW5nLnZhbHVlcworICAgIGl0ZW1zID0gTXV0YWJsZU1hcHBpbmcuaXRlbXMKKyAgICBpdGVya2V5cyA9IE11dGFibGVNYXBwaW5nLml0ZXJrZXlzCisgICAgaXRlcnZhbHVlcyA9IE11dGFibGVNYXBwaW5nLml0ZXJ2YWx1ZXMKKyAgICBpdGVyaXRlbXMgPSBNdXRhYmxlTWFwcGluZy5pdGVyaXRlbXMKKyAgICBfX25lX18gPSBNdXRhYmxlTWFwcGluZy5fX25lX18KKworICAgIGRlZiB2aWV3a2V5cyhzZWxmKToKKyAgICAgICAgIm9kLnZpZXdrZXlzKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBvZCdzIGtleXMiCisgICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQorCisgICAgZGVmIHZpZXd2YWx1ZXMoc2VsZik6CisgICAgICAgICJvZC52aWV3dmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gb2QncyB2YWx1ZXMiCisgICAgICAgIHJldHVybiBWYWx1ZXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmlld2l0ZW1zKHNlbGYpOgorICAgICAgICAib2Qudmlld2l0ZW1zKCkgLT4gYSBzZXQtbGlrZSBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBvZCdzIGl0ZW1zIgorICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCisKKyAgICBfX21hcmtlciA9IG9iamVjdCgpCisKKyAgICBkZWYgcG9wKHNlbGYsIGtleSwgZGVmYXVsdD1fX21hcmtlcik6CisgICAgICAgIGlmIGtleSBpbiBzZWxmOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltrZXldCisgICAgICAgICAgICBkZWwgc2VsZltrZXldCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGlmIGRlZmF1bHQgaXMgc2VsZi5fX21hcmtlcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGtleSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ29kLnNldGRlZmF1bHQoa1ssZF0pIC0+IG9kLmdldChrLGQpLCBhbHNvIHNldCBvZFtrXT1kIGlmIGsgbm90IGluIG9kJworICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAgICAgICAgc2VsZltrZXldID0gZGVmYXVsdAorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIHBvcGl0ZW0oc2VsZiwgbGFzdD1UcnVlKToKKyAgICAgICAgJycnb2QucG9waXRlbSgpIC0+IChrLCB2KSwgcmV0dXJuIGFuZCByZW1vdmUgYSAoa2V5LCB2YWx1ZSkgcGFpci4KKyAgICAgICAgUGFpcnMgYXJlIHJldHVybmVkIGluIExJRk8gb3JkZXIgaWYgbGFzdCBpcyB0cnVlIG9yIEZJRk8gb3JkZXIgaWYgZmFsc2UuCisKKyAgICAgICAgJycnCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2RpY3Rpb25hcnkgaXMgZW1wdHknKQorICAgICAgICBrZXkgPSBuZXh0KHJldmVyc2VkKHNlbGYpIGlmIGxhc3QgZWxzZSBpdGVyKHNlbGYpKQorICAgICAgICB2YWx1ZSA9IHNlbGYucG9wKGtleSkKKyAgICAgICAgcmV0dXJuIGtleSwgdmFsdWUKKworICAgIEBfcmVjdXJzaXZlX3JlcHIKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICdvZC5fX3JlcHJfXygpIDw9PT4gcmVwcihvZCknCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuICclcygpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpCisgICAgICAgIHJldHVybiAnJXMoJXIpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5pdGVtcygpKQorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICdvZC5jb3B5KCkgLT4gYSBzaGFsbG93IGNvcHkgb2Ygb2QnCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21rZXlzKGNscywgaXRlcmFibGUsIHZhbHVlPU5vbmUpOgorICAgICAgICAnJydPRC5mcm9ta2V5cyhTWywgdl0pIC0+IE5ldyBvcmRlcmVkIGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gUworICAgICAgICBhbmQgdmFsdWVzIGVxdWFsIHRvIHYgKHdoaWNoIGRlZmF1bHRzIHRvIE5vbmUpLgorCisgICAgICAgICcnJworICAgICAgICBkID0gY2xzKCkKKyAgICAgICAgZm9yIGtleSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgJycnb2QuX19lcV9fKHkpIDw9PT4gb2Q9PXkuICBDb21wYXJpc29uIHRvIGFub3RoZXIgT0QgaXMgb3JkZXItc2Vuc2l0aXZlCisgICAgICAgIHdoaWxlIGNvbXBhcmlzb24gdG8gYSByZWd1bGFyIG1hcHBpbmcgaXMgb3JkZXItaW5zZW5zaXRpdmUuCisKKyAgICAgICAgJycnCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZik9PWxlbihvdGhlcikgYW5kIFwKKyAgICAgICAgICAgICAgICAgICBhbGwoX2ltYXAoX2VxLCBzZWxmLml0ZXJpdGVtcygpLCBvdGhlci5pdGVyaXRlbXMoKSkpCisgICAgICAgIHJldHVybiBkaWN0Ll9fZXFfXyhzZWxmLCBvdGhlcikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIG5hbWVkdHVwbGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBuYW1lZHR1cGxlKHR5cGVuYW1lLCBmaWVsZF9uYW1lcywgdmVyYm9zZT1GYWxzZSwgcmVuYW1lPUZhbHNlKToKICAgICAiIiJSZXR1cm5zIGEgbmV3IHN1YmNsYXNzIG9mIHR1cGxlIHdpdGggbmFtZWQgZmllbGRzLgogCiAgICAgPj4+IFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKQEAgLTM5LDYgKzI1MCwxNiBAQAogICAgIGlmIGlzaW5zdGFuY2UoZmllbGRfbmFtZXMsIGJhc2VzdHJpbmcpOgogICAgICAgICBmaWVsZF9uYW1lcyA9IGZpZWxkX25hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkgIyBuYW1lcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBhbmQvb3IgY29tbWFzCiAgICAgZmllbGRfbmFtZXMgPSB0dXBsZShtYXAoc3RyLCBmaWVsZF9uYW1lcykpCisgICAgaWYgcmVuYW1lOgorICAgICAgICBuYW1lcyA9IGxpc3QoZmllbGRfbmFtZXMpCisgICAgICAgIHNlZW4gPSBzZXQoKQorICAgICAgICBmb3IgaSwgbmFtZSBpbiBlbnVtZXJhdGUobmFtZXMpOgorICAgICAgICAgICAgaWYgKG5vdCBhbGwoYy5pc2FsbnVtKCkgb3IgYz09J18nIGZvciBjIGluIG5hbWUpIG9yIF9pc2tleXdvcmQobmFtZSkKKyAgICAgICAgICAgICAgICBvciBub3QgbmFtZSBvciBuYW1lWzBdLmlzZGlnaXQoKSBvciBuYW1lLnN0YXJ0c3dpdGgoJ18nKQorICAgICAgICAgICAgICAgIG9yIG5hbWUgaW4gc2Vlbik6CisgICAgICAgICAgICAgICAgbmFtZXNbaV0gPSAnXyVkJyAlIGkKKyAgICAgICAgICAgIHNlZW4uYWRkKG5hbWUpCisgICAgICAgIGZpZWxkX25hbWVzID0gdHVwbGUobmFtZXMpCiAgICAgZm9yIG5hbWUgaW4gKHR5cGVuYW1lLCkgKyBmaWVsZF9uYW1lczoKICAgICAgICAgaWYgbm90IGFsbChjLmlzYWxudW0oKSBvciBjPT0nXycgZm9yIGMgaW4gbmFtZSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUeXBlIG5hbWVzIGFuZCBmaWVsZCBuYW1lcyBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3JlczogJXInICUgbmFtZSkKQEAgLTQ4LDcgKzI2OSw3IEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUeXBlIG5hbWVzIGFuZCBmaWVsZCBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCBhIG51bWJlcjogJXInICUgbmFtZSkKICAgICBzZWVuX25hbWVzID0gc2V0KCkKICAgICBmb3IgbmFtZSBpbiBmaWVsZF9uYW1lczoKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnXycpIGFuZCBub3QgcmVuYW1lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRmllbGQgbmFtZXMgY2Fubm90IHN0YXJ0IHdpdGggYW4gdW5kZXJzY29yZTogJXInICUgbmFtZSkKICAgICAgICAgaWYgbmFtZSBpbiBzZWVuX25hbWVzOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRW5jb3VudGVyZWQgZHVwbGljYXRlIGZpZWxkIG5hbWU6ICVyJyAlIG5hbWUpCkBAIC01OCwxMiArMjc5LDEyIEBACiAgICAgbnVtZmllbGRzID0gbGVuKGZpZWxkX25hbWVzKQogICAgIGFyZ3R4dCA9IHJlcHIoZmllbGRfbmFtZXMpLnJlcGxhY2UoIiciLCAiIilbMTotMV0gICAjIHR1cGxlIHJlcHIgd2l0aG91dCBwYXJlbnMgb3IgcXVvdGVzCiAgICAgcmVwcnR4dCA9ICcsICcuam9pbignJXM9JSVyJyAlIG5hbWUgZm9yIG5hbWUgaW4gZmllbGRfbmFtZXMpCi0gICAgZGljdHR4dCA9ICcsICcuam9pbignJXI6IHRbJWRdJyAlIChuYW1lLCBwb3MpIGZvciBwb3MsIG5hbWUgaW4gZW51bWVyYXRlKGZpZWxkX25hbWVzKSkKICAgICB0ZW1wbGF0ZSA9ICcnJ2NsYXNzICUodHlwZW5hbWUpcyh0dXBsZSk6CiAgICAgICAgICclKHR5cGVuYW1lKXMoJShhcmd0eHQpcyknIFxuCiAgICAgICAgIF9fc2xvdHNfXyA9ICgpIFxuCiAgICAgICAgIF9maWVsZHMgPSAlKGZpZWxkX25hbWVzKXIgXG4KICAgICAgICAgZGVmIF9fbmV3X18oX2NscywgJShhcmd0eHQpcyk6CisgICAgICAgICAgICAnQ3JlYXRlIG5ldyBpbnN0YW5jZSBvZiAlKHR5cGVuYW1lKXMoJShhcmd0eHQpcyknCiAgICAgICAgICAgICByZXR1cm4gX3R1cGxlLl9fbmV3X18oX2NscywgKCUoYXJndHh0KXMpKSBcbgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIF9tYWtlKGNscywgaXRlcmFibGUsIG5ldz10dXBsZS5fX25ld19fLCBsZW49bGVuKToKQEAgLTczLDEwICsyOTQsMTEgQEAKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkICUobnVtZmllbGRzKWQgYXJndW1lbnRzLCBnb3QgJSVkJyAlJSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQgXG4KICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgJ1JldHVybiBhIG5pY2VseSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gc3RyaW5nJwogICAgICAgICAgICAgcmV0dXJuICclKHR5cGVuYW1lKXMoJShyZXBydHh0KXMpJyAlJSBzZWxmIFxuCi0gICAgICAgIGRlZiBfYXNkaWN0KHQpOgotICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBkaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJwotICAgICAgICAgICAgcmV0dXJuIHslKGRpY3R0eHQpc30gXG4KKyAgICAgICAgZGVmIF9hc2RpY3Qoc2VsZik6CisgICAgICAgICAgICAnUmV0dXJuIGEgbmV3IE9yZGVyZWREaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJworICAgICAgICAgICAgcmV0dXJuIE9yZGVyZWREaWN0KHppcChzZWxmLl9maWVsZHMsIHNlbGYpKSBcbgogICAgICAgICBkZWYgX3JlcGxhY2UoX3NlbGYsICoqa3dkcyk6CiAgICAgICAgICAgICAnUmV0dXJuIGEgbmV3ICUodHlwZW5hbWUpcyBvYmplY3QgcmVwbGFjaW5nIHNwZWNpZmllZCBmaWVsZHMgd2l0aCBuZXcgdmFsdWVzJwogICAgICAgICAgICAgcmVzdWx0ID0gX3NlbGYuX21ha2UobWFwKGt3ZHMucG9wLCAlKGZpZWxkX25hbWVzKXIsIF9zZWxmKSkKQEAgLTg0LDE2ICszMDYsMTcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdHb3QgdW5leHBlY3RlZCBmaWVsZCBuYW1lczogJSVyJyAlJSBrd2RzLmtleXMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQgXG4KICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgJ1JldHVybiBzZWxmIGFzIGEgcGxhaW4gdHVwbGUuICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZikgXG5cbicnJyAlIGxvY2FscygpCiAgICAgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKGZpZWxkX25hbWVzKToKLSAgICAgICAgdGVtcGxhdGUgKz0gJyAgICAgICAgJXMgPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoJWQpKVxuJyAlIChuYW1lLCBpKQorICAgICAgICB0ZW1wbGF0ZSArPSAiICAgICAgICAlcyA9IF9wcm9wZXJ0eShfaXRlbWdldHRlciglZCksIGRvYz0nQWxpYXMgZm9yIGZpZWxkIG51bWJlciAlZCcpXG4iICUgKG5hbWUsIGksIGkpCiAgICAgaWYgdmVyYm9zZToKICAgICAgICAgcHJpbnQgdGVtcGxhdGUKIAogICAgICMgRXhlY3V0ZSB0aGUgdGVtcGxhdGUgc3RyaW5nIGluIGEgdGVtcG9yYXJ5IG5hbWVzcGFjZSBhbmQKICAgICAjIHN1cHBvcnQgdHJhY2luZyB1dGlsaXRpZXMgYnkgc2V0dGluZyBhIHZhbHVlIGZvciBmcmFtZS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KICAgICBuYW1lc3BhY2UgPSBkaWN0KF9pdGVtZ2V0dGVyPV9pdGVtZ2V0dGVyLCBfX25hbWVfXz0nbmFtZWR0dXBsZV8lcycgJSB0eXBlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIF9wcm9wZXJ0eT1wcm9wZXJ0eSwgX3R1cGxlPXR1cGxlKQorICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3Q9T3JkZXJlZERpY3QsIF9wcm9wZXJ0eT1wcm9wZXJ0eSwgX3R1cGxlPXR1cGxlKQogICAgIHRyeToKICAgICAgICAgZXhlYyB0ZW1wbGF0ZSBpbiBuYW1lc3BhY2UKICAgICBleGNlcHQgU3ludGF4RXJyb3IsIGU6CkBAIC0xMDIsMTUgKzMyNSwyOTAgQEAKIAogICAgICMgRm9yIHBpY2tsaW5nIHRvIHdvcmssIHRoZSBfX21vZHVsZV9fIHZhcmlhYmxlIG5lZWRzIHRvIGJlIHNldCB0byB0aGUgZnJhbWUKICAgICAjIHdoZXJlIHRoZSBuYW1lZCB0dXBsZSBpcyBjcmVhdGVkLiAgQnlwYXNzIHRoaXMgc3RlcCBpbiBlbnZpcm9tZW50cyB3aGVyZQotICAgICMgc3lzLl9nZXRmcmFtZSBpcyBub3QgZGVmaW5lZCAoSnl0aG9uIGZvciBleGFtcGxlKS4KLSAgICBpZiBoYXNhdHRyKF9zeXMsICdfZ2V0ZnJhbWUnKToKKyAgICAjIHN5cy5fZ2V0ZnJhbWUgaXMgbm90IGRlZmluZWQgKEp5dGhvbiBmb3IgZXhhbXBsZSkgb3Igc3lzLl9nZXRmcmFtZSBpcyBub3QKKyAgICAjIGRlZmluZWQgZm9yIGFyZ3VtZW50cyBncmVhdGVyIHRoYW4gMCAoSXJvblB5dGhvbikuCisgICAgdHJ5OgogICAgICAgICByZXN1bHQuX19tb2R1bGVfXyA9IF9zeXMuX2dldGZyYW1lKDEpLmZfZ2xvYmFscy5nZXQoJ19fbmFtZV9fJywgJ19fbWFpbl9fJykKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgcGFzcwogCiAgICAgcmV0dXJuIHJlc3VsdAogCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjICBDb3VudGVyCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorY2xhc3MgQ291bnRlcihkaWN0KToKKyAgICAnJydEaWN0IHN1YmNsYXNzIGZvciBjb3VudGluZyBoYXNoYWJsZSBpdGVtcy4gIFNvbWV0aW1lcyBjYWxsZWQgYSBiYWcKKyAgICBvciBtdWx0aXNldC4gIEVsZW1lbnRzIGFyZSBzdG9yZWQgYXMgZGljdGlvbmFyeSBrZXlzIGFuZCB0aGVpciBjb3VudHMKKyAgICBhcmUgc3RvcmVkIGFzIGRpY3Rpb25hcnkgdmFsdWVzLgogCisgICAgPj4+IGMgPSBDb3VudGVyKCdhYmNkZWFiY2RhYmNhYmEnKSAgIyBjb3VudCBlbGVtZW50cyBmcm9tIGEgc3RyaW5nCisKKyAgICA+Pj4gYy5tb3N0X2NvbW1vbigzKSAgICAgICAgICAgICAgICAjIHRocmVlIG1vc3QgY29tbW9uIGVsZW1lbnRzCisgICAgWygnYScsIDUpLCAoJ2InLCA0KSwgKCdjJywgMyldCisgICAgPj4+IHNvcnRlZChjKSAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0IGFsbCB1bmlxdWUgZWxlbWVudHMKKyAgICBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddCisgICAgPj4+ICcnLmpvaW4oc29ydGVkKGMuZWxlbWVudHMoKSkpICAgIyBsaXN0IGVsZW1lbnRzIHdpdGggcmVwZXRpdGlvbnMKKyAgICAnYWFhYWFiYmJiY2NjZGRlJworICAgID4+PiBzdW0oYy52YWx1ZXMoKSkgICAgICAgICAgICAgICAgICMgdG90YWwgb2YgYWxsIGNvdW50cworICAgIDE1CisKKyAgICA+Pj4gY1snYSddICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvdW50IG9mIGxldHRlciAnYScKKyAgICA1CisgICAgPj4+IGZvciBlbGVtIGluICdzaGF6YW0nOiAgICAgICAgICAgIyB1cGRhdGUgY291bnRzIGZyb20gYW4gaXRlcmFibGUKKyAgICAuLi4gICAgIGNbZWxlbV0gKz0gMSAgICAgICAgICAgICAgICAjIGJ5IGFkZGluZyAxIHRvIGVhY2ggZWxlbWVudCdzIGNvdW50CisgICAgPj4+IGNbJ2EnXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3cgdGhlcmUgYXJlIHNldmVuICdhJworICAgIDcKKyAgICA+Pj4gZGVsIGNbJ2InXSAgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBhbGwgJ2InCisgICAgPj4+IGNbJ2InXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3cgdGhlcmUgYXJlIHplcm8gJ2InCisgICAgMAorCisgICAgPj4+IGQgPSBDb3VudGVyKCdzaW1zYWxhYmltJykgICAgICAgIyBtYWtlIGFub3RoZXIgY291bnRlcgorICAgID4+PiBjLnVwZGF0ZShkKSAgICAgICAgICAgICAgICAgICAgICMgYWRkIGluIHRoZSBzZWNvbmQgY291bnRlcgorICAgID4+PiBjWydhJ10gICAgICAgICAgICAgICAgICAgICAgICAgICMgbm93IHRoZXJlIGFyZSBuaW5lICdhJworICAgIDkKKworICAgID4+PiBjLmNsZWFyKCkgICAgICAgICAgICAgICAgICAgICAgICMgZW1wdHkgdGhlIGNvdW50ZXIKKyAgICA+Pj4gYworICAgIENvdW50ZXIoKQorCisgICAgTm90ZTogIElmIGEgY291bnQgaXMgc2V0IHRvIHplcm8gb3IgcmVkdWNlZCB0byB6ZXJvLCBpdCB3aWxsIHJlbWFpbgorICAgIGluIHRoZSBjb3VudGVyIHVudGlsIHRoZSBlbnRyeSBpcyBkZWxldGVkIG9yIHRoZSBjb3VudGVyIGlzIGNsZWFyZWQ6CisKKyAgICA+Pj4gYyA9IENvdW50ZXIoJ2FhYWJiYycpCisgICAgPj4+IGNbJ2InXSAtPSAyICAgICAgICAgICAgICAgICAgICAgIyByZWR1Y2UgdGhlIGNvdW50IG9mICdiJyBieSB0d28KKyAgICA+Pj4gYy5tb3N0X2NvbW1vbigpICAgICAgICAgICAgICAgICAjICdiJyBpcyBzdGlsbCBpbiwgYnV0IGl0cyBjb3VudCBpcyB6ZXJvCisgICAgWygnYScsIDMpLCAoJ2MnLCAxKSwgKCdiJywgMCldCisKKyAgICAnJycKKyAgICAjIFJlZmVyZW5jZXM6CisgICAgIyAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlzZXQKKyAgICAjICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NtYWxsdGFsay9tYW51YWwtYmFzZS9odG1sX25vZGUvQmFnLmh0bWwKKyAgICAjICAgaHR0cDovL3d3dy5kZW1vMnMuY29tL1R1dG9yaWFsL0NwcC8wMzgwX19zZXQtbXVsdGlzZXQvQ2F0YWxvZzAzODBfX3NldC1tdWx0aXNldC5odG0KKyAgICAjICAgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvMjU5MTc0LworICAgICMgICBLbnV0aCwgVEFPQ1AgVm9sLiBJSSBzZWN0aW9uIDQuNi4zCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGU9Tm9uZSwgKiprd2RzKToKKyAgICAgICAgJycnQ3JlYXRlIGEgbmV3LCBlbXB0eSBDb3VudGVyIG9iamVjdC4gIEFuZCBpZiBnaXZlbiwgY291bnQgZWxlbWVudHMKKyAgICAgICAgZnJvbSBhbiBpbnB1dCBpdGVyYWJsZS4gIE9yLCBpbml0aWFsaXplIHRoZSBjb3VudCBmcm9tIGFub3RoZXIgbWFwcGluZworICAgICAgICBvZiBlbGVtZW50cyB0byB0aGVpciBjb3VudHMuCisKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbmV3LCBlbXB0eSBjb3VudGVyCisgICAgICAgID4+PiBjID0gQ291bnRlcignZ2FsbGFoYWQnKSAgICAgICAgICAgICAgICAgIyBhIG5ldyBjb3VudGVyIGZyb20gYW4gaXRlcmFibGUKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKHsnYSc6IDQsICdiJzogMn0pICAgICAgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBhIG1hcHBpbmcKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKGE9NCwgYj0yKSAgICAgICAgICAgICAgICAgICAjIGEgbmV3IGNvdW50ZXIgZnJvbSBrZXl3b3JkIGFyZ3MKKworICAgICAgICAnJycKKyAgICAgICAgc3VwZXIoQ291bnRlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnVwZGF0ZShpdGVyYWJsZSwgKiprd2RzKQorCisgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICdUaGUgY291bnQgb2YgZWxlbWVudHMgbm90IGluIHRoZSBDb3VudGVyIGlzIHplcm8uJworICAgICAgICAjIE5lZWRlZCBzbyB0aGF0IHNlbGZbbWlzc2luZ19pdGVtXSBkb2VzIG5vdCByYWlzZSBLZXlFcnJvcgorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIG1vc3RfY29tbW9uKHNlbGYsIG49Tm9uZSk6CisgICAgICAgICcnJ0xpc3QgdGhlIG4gbW9zdCBjb21tb24gZWxlbWVudHMgYW5kIHRoZWlyIGNvdW50cyBmcm9tIHRoZSBtb3N0CisgICAgICAgIGNvbW1vbiB0byB0aGUgbGVhc3QuICBJZiBuIGlzIE5vbmUsIHRoZW4gbGlzdCBhbGwgZWxlbWVudCBjb3VudHMuCisKKyAgICAgICAgPj4+IENvdW50ZXIoJ2FiY2RlYWJjZGFiY2FiYScpLm1vc3RfY29tbW9uKDMpCisgICAgICAgIFsoJ2EnLCA1KSwgKCdiJywgNCksICgnYycsIDMpXQorCisgICAgICAgICcnJworICAgICAgICAjIEVtdWxhdGUgQmFnLnNvcnRlZEJ5Q291bnQgZnJvbSBTbWFsbHRhbGsKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNvcnRlZChzZWxmLml0ZXJpdGVtcygpLCBrZXk9X2l0ZW1nZXR0ZXIoMSksIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIF9oZWFwcS5ubGFyZ2VzdChuLCBzZWxmLml0ZXJpdGVtcygpLCBrZXk9X2l0ZW1nZXR0ZXIoMSkpCisKKyAgICBkZWYgZWxlbWVudHMoc2VsZik6CisgICAgICAgICcnJ0l0ZXJhdG9yIG92ZXIgZWxlbWVudHMgcmVwZWF0aW5nIGVhY2ggYXMgbWFueSB0aW1lcyBhcyBpdHMgY291bnQuCisKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCdBQkNBQkMnKQorICAgICAgICA+Pj4gc29ydGVkKGMuZWxlbWVudHMoKSkKKyAgICAgICAgWydBJywgJ0EnLCAnQicsICdCJywgJ0MnLCAnQyddCisKKyAgICAgICAgIyBLbnV0aCdzIGV4YW1wbGUgZm9yIHByaW1lIGZhY3RvcnMgb2YgMTgzNjogIDIqKjIgKiAzKiozICogMTcqKjEKKyAgICAgICAgPj4+IHByaW1lX2ZhY3RvcnMgPSBDb3VudGVyKHsyOiAyLCAzOiAzLCAxNzogMX0pCisgICAgICAgID4+PiBwcm9kdWN0ID0gMQorICAgICAgICA+Pj4gZm9yIGZhY3RvciBpbiBwcmltZV9mYWN0b3JzLmVsZW1lbnRzKCk6ICAgICAjIGxvb3Agb3ZlciBmYWN0b3JzCisgICAgICAgIC4uLiAgICAgcHJvZHVjdCAqPSBmYWN0b3IgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIG11bHRpcGx5IHRoZW0KKyAgICAgICAgPj4+IHByb2R1Y3QKKyAgICAgICAgMTgzNgorCisgICAgICAgIE5vdGUsIGlmIGFuIGVsZW1lbnQncyBjb3VudCBoYXMgYmVlbiBzZXQgdG8gemVybyBvciBpcyBhIG5lZ2F0aXZlCisgICAgICAgIG51bWJlciwgZWxlbWVudHMoKSB3aWxsIGlnbm9yZSBpdC4KKworICAgICAgICAnJycKKyAgICAgICAgIyBFbXVsYXRlIEJhZy5kbyBmcm9tIFNtYWxsdGFsayBhbmQgTXVsdGlzZXQuYmVnaW4gZnJvbSBDKysuCisgICAgICAgIHJldHVybiBfY2hhaW4uZnJvbV9pdGVyYWJsZShfc3Rhcm1hcChfcmVwZWF0LCBzZWxmLml0ZXJpdGVtcygpKSkKKworICAgICMgT3ZlcnJpZGUgZGljdCBtZXRob2RzIHdoZXJlIG5lY2Vzc2FyeQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21rZXlzKGNscywgaXRlcmFibGUsIHY9Tm9uZSk6CisgICAgICAgICMgVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBtZXRob2QgZm9yIGNvdW50ZXJzIGJlY2F1c2Ugc2V0dGluZyB2PTEKKyAgICAgICAgIyBtZWFucyB0aGF0IG5vIGVsZW1lbnQgY2FuIGhhdmUgYSBjb3VudCBncmVhdGVyIHRoYW4gb25lLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgJ0NvdW50ZXIuZnJvbWtleXMoKSBpcyB1bmRlZmluZWQuICBVc2UgQ291bnRlcihpdGVyYWJsZSkgaW5zdGVhZC4nKQorCisgICAgZGVmIHVwZGF0ZShzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgICAgICAnJydMaWtlIGRpY3QudXBkYXRlKCkgYnV0IGFkZCBjb3VudHMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKworICAgICAgICBTb3VyY2UgY2FuIGJlIGFuIGl0ZXJhYmxlLCBhIGRpY3Rpb25hcnksIG9yIGFub3RoZXIgQ291bnRlciBpbnN0YW5jZS4KKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoJ3doaWNoJykKKyAgICAgICAgPj4+IGMudXBkYXRlKCd3aXRjaCcpICAgICAgICAgICAjIGFkZCBlbGVtZW50cyBmcm9tIGFub3RoZXIgaXRlcmFibGUKKyAgICAgICAgPj4+IGQgPSBDb3VudGVyKCd3YXRjaCcpCisgICAgICAgID4+PiBjLnVwZGF0ZShkKSAgICAgICAgICAgICAgICAgIyBhZGQgZWxlbWVudHMgZnJvbSBhbm90aGVyIGNvdW50ZXIKKyAgICAgICAgPj4+IGNbJ2gnXSAgICAgICAgICAgICAgICAgICAgICAjIGZvdXIgJ2gnIGluIHdoaWNoLCB3aXRjaCwgYW5kIHdhdGNoCisgICAgICAgIDQKKworICAgICAgICAnJycKKyAgICAgICAgIyBUaGUgcmVndWxhciBkaWN0LnVwZGF0ZSgpIG9wZXJhdGlvbiBtYWtlcyBubyBzZW5zZSBoZXJlIGJlY2F1c2UgdGhlCisgICAgICAgICMgcmVwbGFjZSBiZWhhdmlvciByZXN1bHRzIGluIHRoZSBzb21lIG9mIG9yaWdpbmFsIHVudG91Y2hlZCBjb3VudHMKKyAgICAgICAgIyBiZWluZyBtaXhlZC1pbiB3aXRoIGFsbCBvZiB0aGUgb3RoZXIgY291bnRzIGZvciBhIG1pc21hc2ggdGhhdAorICAgICAgICAjIGRvZXNuJ3QgaGF2ZSBhIHN0cmFpZ2h0LWZvcndhcmQgaW50ZXJwcmV0YXRpb24gaW4gbW9zdCBjb3VudGluZworICAgICAgICAjIGNvbnRleHRzLiAgSW5zdGVhZCwgd2UgaW1wbGVtZW50IHN0cmFpZ2h0LWFkZGl0aW9uLiAgQm90aCB0aGUgaW5wdXRzCisgICAgICAgICMgYW5kIG91dHB1dHMgYXJlIGFsbG93ZWQgdG8gY29udGFpbiB6ZXJvIGFuZCBuZWdhdGl2ZSBjb3VudHMuCisKKyAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmOgorICAgICAgICAgICAgICAgICAgICBzZWxmX2dldCA9IHNlbGYuZ2V0CisgICAgICAgICAgICAgICAgICAgIGZvciBlbGVtLCBjb3VudCBpbiBpdGVyYWJsZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZbZWxlbV0gPSBzZWxmX2dldChlbGVtLCAwKSArIGNvdW50CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3VwZXIoQ291bnRlciwgc2VsZikudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZl9nZXQgPSBzZWxmLmdldAorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGl0ZXJhYmxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gc2VsZl9nZXQoZWxlbSwgMCkgKyAxCisgICAgICAgIGlmIGt3ZHM6CisgICAgICAgICAgICBzZWxmLnVwZGF0ZShrd2RzKQorCisgICAgZGVmIHN1YnRyYWN0KHNlbGYsIGl0ZXJhYmxlPU5vbmUsICoqa3dkcyk6CisgICAgICAgICcnJ0xpa2UgZGljdC51cGRhdGUoKSBidXQgc3VidHJhY3RzIGNvdW50cyBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtLgorICAgICAgICBDb3VudHMgY2FuIGJlIHJlZHVjZWQgYmVsb3cgemVyby4gIEJvdGggdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBhcmUKKyAgICAgICAgYWxsb3dlZCB0byBjb250YWluIHplcm8gYW5kIG5lZ2F0aXZlIGNvdW50cy4KKworICAgICAgICBTb3VyY2UgY2FuIGJlIGFuIGl0ZXJhYmxlLCBhIGRpY3Rpb25hcnksIG9yIGFub3RoZXIgQ291bnRlciBpbnN0YW5jZS4KKworICAgICAgICA+Pj4gYyA9IENvdW50ZXIoJ3doaWNoJykKKyAgICAgICAgPj4+IGMuc3VidHJhY3QoJ3dpdGNoJykgICAgICAgICAgICAgIyBzdWJ0cmFjdCBlbGVtZW50cyBmcm9tIGFub3RoZXIgaXRlcmFibGUKKyAgICAgICAgPj4+IGMuc3VidHJhY3QoQ291bnRlcignd2F0Y2gnKSkgICAgIyBzdWJ0cmFjdCBlbGVtZW50cyBmcm9tIGFub3RoZXIgY291bnRlcgorICAgICAgICA+Pj4gY1snaCddICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIgaW4gd2hpY2gsIG1pbnVzIDEgaW4gd2l0Y2gsIG1pbnVzIDEgaW4gd2F0Y2gKKyAgICAgICAgMAorICAgICAgICA+Pj4gY1sndyddICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEgaW4gd2hpY2gsIG1pbnVzIDEgaW4gd2l0Y2gsIG1pbnVzIDEgaW4gd2F0Y2gKKyAgICAgICAgLTEKKworICAgICAgICAnJycKKyAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmX2dldCA9IHNlbGYuZ2V0CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKKyAgICAgICAgICAgICAgICBmb3IgZWxlbSwgY291bnQgaW4gaXRlcmFibGUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZltlbGVtXSA9IHNlbGZfZ2V0KGVsZW0sIDApIC0gY291bnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gaXRlcmFibGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGZbZWxlbV0gPSBzZWxmX2dldChlbGVtLCAwKSAtIDEKKyAgICAgICAgaWYga3dkczoKKyAgICAgICAgICAgIHNlbGYuc3VidHJhY3Qoa3dkcykKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICAnTGlrZSBkaWN0LmNvcHkoKSBidXQgcmV0dXJucyBhIENvdW50ZXIgaW5zdGFuY2UgaW5zdGVhZCBvZiBhIGRpY3QuJworICAgICAgICByZXR1cm4gQ291bnRlcihzZWxmKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKGRpY3Qoc2VsZiksKQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGVsZW0pOgorICAgICAgICAnTGlrZSBkaWN0Ll9fZGVsaXRlbV9fKCkgYnV0IGRvZXMgbm90IHJhaXNlIEtleUVycm9yIGZvciBtaXNzaW5nIHZhbHVlcy4nCisgICAgICAgIGlmIGVsZW0gaW4gc2VsZjoKKyAgICAgICAgICAgIHN1cGVyKENvdW50ZXIsIHNlbGYpLl9fZGVsaXRlbV9fKGVsZW0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuICclcygpJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIGl0ZW1zID0gJywgJy5qb2luKG1hcCgnJXI6ICVyJy5fX21vZF9fLCBzZWxmLm1vc3RfY29tbW9uKCkpKQorICAgICAgICByZXR1cm4gJyVzKHslc30pJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaXRlbXMpCisKKyAgICAjIE11bHRpc2V0LXN0eWxlIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIGRpc2N1c3NlZCBpbjoKKyAgICAjICAgICAgIEtudXRoIFRBT0NQIFZvbHVtZSBJSSBzZWN0aW9uIDQuNi4zIGV4ZXJjaXNlIDE5CisgICAgIyAgICAgICBhbmQgYXQgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdWx0aXNldAorICAgICMKKyAgICAjIE91dHB1dHMgZ3VhcmFudGVlZCB0byBvbmx5IGluY2x1ZGUgcG9zaXRpdmUgY291bnRzLgorICAgICMKKyAgICAjIFRvIHN0cmlwIG5lZ2F0aXZlIGFuZCB6ZXJvIGNvdW50cywgYWRkLWluIGFuIGVtcHR5IGNvdW50ZXI6CisgICAgIyAgICAgICBjICs9IENvdW50ZXIoKQorCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAnJydBZGQgY291bnRzIGZyb20gdHdvIGNvdW50ZXJzLgorCisgICAgICAgID4+PiBDb3VudGVyKCdhYmJiJykgKyBDb3VudGVyKCdiY2MnKQorICAgICAgICBDb3VudGVyKHsnYic6IDQsICdjJzogMiwgJ2EnOiAxfSkKKworICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvdW50ZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJlc3VsdCA9IENvdW50ZXIoKQorICAgICAgICBmb3IgZWxlbSBpbiBzZXQoc2VsZikgfCBzZXQob3RoZXIpOgorICAgICAgICAgICAgbmV3Y291bnQgPSBzZWxmW2VsZW1dICsgb3RoZXJbZWxlbV0KKyAgICAgICAgICAgIGlmIG5ld2NvdW50ID4gMDoKKyAgICAgICAgICAgICAgICByZXN1bHRbZWxlbV0gPSBuZXdjb3VudAorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICcnJyBTdWJ0cmFjdCBjb3VudCwgYnV0IGtlZXAgb25seSByZXN1bHRzIHdpdGggcG9zaXRpdmUgY291bnRzLgorCisgICAgICAgID4+PiBDb3VudGVyKCdhYmJiYycpIC0gQ291bnRlcignYmNjZCcpCisgICAgICAgIENvdW50ZXIoeydiJzogMiwgJ2EnOiAxfSkKKworICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvdW50ZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJlc3VsdCA9IENvdW50ZXIoKQorICAgICAgICBmb3IgZWxlbSBpbiBzZXQoc2VsZikgfCBzZXQob3RoZXIpOgorICAgICAgICAgICAgbmV3Y291bnQgPSBzZWxmW2VsZW1dIC0gb3RoZXJbZWxlbV0KKyAgICAgICAgICAgIGlmIG5ld2NvdW50ID4gMDoKKyAgICAgICAgICAgICAgICByZXN1bHRbZWxlbV0gPSBuZXdjb3VudAorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgJycnVW5pb24gaXMgdGhlIG1heGltdW0gb2YgdmFsdWUgaW4gZWl0aGVyIG9mIHRoZSBpbnB1dCBjb3VudGVycy4KKworICAgICAgICA+Pj4gQ291bnRlcignYWJiYicpIHwgQ291bnRlcignYmNjJykKKyAgICAgICAgQ291bnRlcih7J2InOiAzLCAnYyc6IDIsICdhJzogMX0pCisKKyAgICAgICAgJycnCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBDb3VudGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXN1bHQgPSBDb3VudGVyKCkKKyAgICAgICAgZm9yIGVsZW0gaW4gc2V0KHNlbGYpIHwgc2V0KG90aGVyKToKKyAgICAgICAgICAgIHAsIHEgPSBzZWxmW2VsZW1dLCBvdGhlcltlbGVtXQorICAgICAgICAgICAgbmV3Y291bnQgPSBxIGlmIHAgPCBxIGVsc2UgcAorICAgICAgICAgICAgaWYgbmV3Y291bnQgPiAwOgorICAgICAgICAgICAgICAgIHJlc3VsdFtlbGVtXSA9IG5ld2NvdW50CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgJycnIEludGVyc2VjdGlvbiBpcyB0aGUgbWluaW11bSBvZiBjb3JyZXNwb25kaW5nIGNvdW50cy4KKworICAgICAgICA+Pj4gQ291bnRlcignYWJiYicpICYgQ291bnRlcignYmNjJykKKyAgICAgICAgQ291bnRlcih7J2InOiAxfSkKKworICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvdW50ZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJlc3VsdCA9IENvdW50ZXIoKQorICAgICAgICBpZiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpOgorICAgICAgICAgICAgc2VsZiwgb3RoZXIgPSBvdGhlciwgc2VsZgorICAgICAgICBmb3IgZWxlbSBpbiBfaWZpbHRlcihzZWxmLl9fY29udGFpbnNfXywgb3RoZXIpOgorICAgICAgICAgICAgcCwgcSA9IHNlbGZbZWxlbV0sIG90aGVyW2VsZW1dCisgICAgICAgICAgICBuZXdjb3VudCA9IHAgaWYgcCA8IHEgZWxzZSBxCisgICAgICAgICAgICBpZiBuZXdjb3VudCA+IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1dID0gbmV3Y291bnQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvY29sb3JzeXMucHkgYi9MaWIvY29sb3JzeXMucHkKaW5kZXggODUxNDE3Yi4uYTZjMGNmNiAxMDA2NDQKLS0tIGEvTGliL2NvbG9yc3lzLnB5CisrKyBiL0xpYi9jb2xvcnN5cy5weQpAQCAtNDQsMTIgKzQ0LDE4IEBACiAgICAgciA9IHkgKyAwLjk0ODI2MippICsgMC42MjQwMTMqcQogICAgIGcgPSB5IC0gMC4yNzYwNjYqaSAtIDAuNjM5ODEwKnEKICAgICBiID0geSAtIDEuMTA1NDUwKmkgKyAxLjcyOTg2MCpxCi0gICAgaWYgciA8IDAuMDogciA9IDAuMAotICAgIGlmIGcgPCAwLjA6IGcgPSAwLjAKLSAgICBpZiBiIDwgMC4wOiBiID0gMC4wCi0gICAgaWYgciA+IDEuMDogciA9IDEuMAotICAgIGlmIGcgPiAxLjA6IGcgPSAxLjAKLSAgICBpZiBiID4gMS4wOiBiID0gMS4wCisgICAgaWYgciA8IDAuMDoKKyAgICAgICAgciA9IDAuMAorICAgIGlmIGcgPCAwLjA6CisgICAgICAgIGcgPSAwLjAKKyAgICBpZiBiIDwgMC4wOgorICAgICAgICBiID0gMC4wCisgICAgaWYgciA+IDEuMDoKKyAgICAgICAgciA9IDEuMAorICAgIGlmIGcgPiAxLjA6CisgICAgICAgIGcgPSAxLjAKKyAgICBpZiBiID4gMS4wOgorICAgICAgICBiID0gMS4wCiAgICAgcmV0dXJuIChyLCBnLCBiKQogCiAKQEAgLTYzLDMwICs2OSw0MiBAQAogICAgIG1pbmMgPSBtaW4ociwgZywgYikKICAgICAjIFhYWCBDYW4gb3B0aW1pemUgKG1heGMrbWluYykgYW5kIChtYXhjLW1pbmMpCiAgICAgbCA9IChtaW5jK21heGMpLzIuMAotICAgIGlmIG1pbmMgPT0gbWF4YzogcmV0dXJuIDAuMCwgbCwgMC4wCi0gICAgaWYgbCA8PSAwLjU6IHMgPSAobWF4Yy1taW5jKSAvIChtYXhjK21pbmMpCi0gICAgZWxzZTogcyA9IChtYXhjLW1pbmMpIC8gKDIuMC1tYXhjLW1pbmMpCisgICAgaWYgbWluYyA9PSBtYXhjOgorICAgICAgICByZXR1cm4gMC4wLCBsLCAwLjAKKyAgICBpZiBsIDw9IDAuNToKKyAgICAgICAgcyA9IChtYXhjLW1pbmMpIC8gKG1heGMrbWluYykKKyAgICBlbHNlOgorICAgICAgICBzID0gKG1heGMtbWluYykgLyAoMi4wLW1heGMtbWluYykKICAgICByYyA9IChtYXhjLXIpIC8gKG1heGMtbWluYykKICAgICBnYyA9IChtYXhjLWcpIC8gKG1heGMtbWluYykKICAgICBiYyA9IChtYXhjLWIpIC8gKG1heGMtbWluYykKLSAgICBpZiByID09IG1heGM6IGggPSBiYy1nYwotICAgIGVsaWYgZyA9PSBtYXhjOiBoID0gMi4wK3JjLWJjCi0gICAgZWxzZTogaCA9IDQuMCtnYy1yYworICAgIGlmIHIgPT0gbWF4YzoKKyAgICAgICAgaCA9IGJjLWdjCisgICAgZWxpZiBnID09IG1heGM6CisgICAgICAgIGggPSAyLjArcmMtYmMKKyAgICBlbHNlOgorICAgICAgICBoID0gNC4wK2djLXJjCiAgICAgaCA9IChoLzYuMCkgJSAxLjAKICAgICByZXR1cm4gaCwgbCwgcwogCiBkZWYgaGxzX3RvX3JnYihoLCBsLCBzKToKLSAgICBpZiBzID09IDAuMDogcmV0dXJuIGwsIGwsIGwKLSAgICBpZiBsIDw9IDAuNTogbTIgPSBsICogKDEuMCtzKQotICAgIGVsc2U6IG0yID0gbCtzLShsKnMpCisgICAgaWYgcyA9PSAwLjA6CisgICAgICAgIHJldHVybiBsLCBsLCBsCisgICAgaWYgbCA8PSAwLjU6CisgICAgICAgIG0yID0gbCAqICgxLjArcykKKyAgICBlbHNlOgorICAgICAgICBtMiA9IGwrcy0obCpzKQogICAgIG0xID0gMi4wKmwgLSBtMgogICAgIHJldHVybiAoX3YobTEsIG0yLCBoK09ORV9USElSRCksIF92KG0xLCBtMiwgaCksIF92KG0xLCBtMiwgaC1PTkVfVEhJUkQpKQogCiBkZWYgX3YobTEsIG0yLCBodWUpOgogICAgIGh1ZSA9IGh1ZSAlIDEuMAotICAgIGlmIGh1ZSA8IE9ORV9TSVhUSDogcmV0dXJuIG0xICsgKG0yLW0xKSpodWUqNi4wCi0gICAgaWYgaHVlIDwgMC41OiByZXR1cm4gbTIKLSAgICBpZiBodWUgPCBUV09fVEhJUkQ6IHJldHVybiBtMSArIChtMi1tMSkqKFRXT19USElSRC1odWUpKjYuMAorICAgIGlmIGh1ZSA8IE9ORV9TSVhUSDoKKyAgICAgICAgcmV0dXJuIG0xICsgKG0yLW0xKSpodWUqNi4wCisgICAgaWYgaHVlIDwgMC41OgorICAgICAgICByZXR1cm4gbTIKKyAgICBpZiBodWUgPCBUV09fVEhJUkQ6CisgICAgICAgIHJldHVybiBtMSArIChtMi1tMSkqKFRXT19USElSRC1odWUpKjYuMAogICAgIHJldHVybiBtMQogCiAKQEAgLTk5LDI5ICsxMTcsNDAgQEAKICAgICBtYXhjID0gbWF4KHIsIGcsIGIpCiAgICAgbWluYyA9IG1pbihyLCBnLCBiKQogICAgIHYgPSBtYXhjCi0gICAgaWYgbWluYyA9PSBtYXhjOiByZXR1cm4gMC4wLCAwLjAsIHYKKyAgICBpZiBtaW5jID09IG1heGM6CisgICAgICAgIHJldHVybiAwLjAsIDAuMCwgdgogICAgIHMgPSAobWF4Yy1taW5jKSAvIG1heGMKICAgICByYyA9IChtYXhjLXIpIC8gKG1heGMtbWluYykKICAgICBnYyA9IChtYXhjLWcpIC8gKG1heGMtbWluYykKICAgICBiYyA9IChtYXhjLWIpIC8gKG1heGMtbWluYykKLSAgICBpZiByID09IG1heGM6IGggPSBiYy1nYwotICAgIGVsaWYgZyA9PSBtYXhjOiBoID0gMi4wK3JjLWJjCi0gICAgZWxzZTogaCA9IDQuMCtnYy1yYworICAgIGlmIHIgPT0gbWF4YzoKKyAgICAgICAgaCA9IGJjLWdjCisgICAgZWxpZiBnID09IG1heGM6CisgICAgICAgIGggPSAyLjArcmMtYmMKKyAgICBlbHNlOgorICAgICAgICBoID0gNC4wK2djLXJjCiAgICAgaCA9IChoLzYuMCkgJSAxLjAKICAgICByZXR1cm4gaCwgcywgdgogCiBkZWYgaHN2X3RvX3JnYihoLCBzLCB2KToKLSAgICBpZiBzID09IDAuMDogcmV0dXJuIHYsIHYsIHYKKyAgICBpZiBzID09IDAuMDoKKyAgICAgICAgcmV0dXJuIHYsIHYsIHYKICAgICBpID0gaW50KGgqNi4wKSAjIFhYWCBhc3N1bWUgaW50KCkgdHJ1bmNhdGVzIQogICAgIGYgPSAoaCo2LjApIC0gaQogICAgIHAgPSB2KigxLjAgLSBzKQogICAgIHEgPSB2KigxLjAgLSBzKmYpCiAgICAgdCA9IHYqKDEuMCAtIHMqKDEuMC1mKSkKICAgICBpID0gaSU2Ci0gICAgaWYgaSA9PSAwOiByZXR1cm4gdiwgdCwgcAotICAgIGlmIGkgPT0gMTogcmV0dXJuIHEsIHYsIHAKLSAgICBpZiBpID09IDI6IHJldHVybiBwLCB2LCB0Ci0gICAgaWYgaSA9PSAzOiByZXR1cm4gcCwgcSwgdgotICAgIGlmIGkgPT0gNDogcmV0dXJuIHQsIHAsIHYKLSAgICBpZiBpID09IDU6IHJldHVybiB2LCBwLCBxCisgICAgaWYgaSA9PSAwOgorICAgICAgICByZXR1cm4gdiwgdCwgcAorICAgIGlmIGkgPT0gMToKKyAgICAgICAgcmV0dXJuIHEsIHYsIHAKKyAgICBpZiBpID09IDI6CisgICAgICAgIHJldHVybiBwLCB2LCB0CisgICAgaWYgaSA9PSAzOgorICAgICAgICByZXR1cm4gcCwgcSwgdgorICAgIGlmIGkgPT0gNDoKKyAgICAgICAgcmV0dXJuIHQsIHAsIHYKKyAgICBpZiBpID09IDU6CisgICAgICAgIHJldHVybiB2LCBwLCBxCiAgICAgIyBDYW5ub3QgZ2V0IGhlcmUKZGlmZiAtLWdpdCBhL0xpYi9jb21tYW5kcy5weSBiL0xpYi9jb21tYW5kcy5weQppbmRleCA4NThiM2Q2Li5kMGU4ZGQ1IDEwMDY0NAotLS0gYS9MaWIvY29tbWFuZHMucHkKKysrIGIvTGliL2NvbW1hbmRzLnB5CkBAIC0xOCw2ICsxOCwxMCBAQAogCiAgW05vdGU6ICBpdCB3b3VsZCBiZSBuaWNlIHRvIGFkZCBmdW5jdGlvbnMgdG8gaW50ZXJwcmV0IHRoZSBleGl0IHN0YXR1cy5dCiAiIiIKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCit3YXJucHkzaygidGhlIGNvbW1hbmRzIG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjA7ICIKKyAgICAgICAgICJ1c2UgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluc3RlYWQiLCBzdGFja2xldmVsPTIpCitkZWwgd2FybnB5M2sKIAogX19hbGxfXyA9IFsiZ2V0c3RhdHVzb3V0cHV0IiwiZ2V0b3V0cHV0IiwiZ2V0c3RhdHVzIl0KIApAQCAtNjMsOCArNjcsNiBAQAogIyBNYWtlIGNvbW1hbmQgYXJndW1lbnQgZnJvbSBkaXJlY3RvcnkgYW5kIHBhdGhuYW1lIChwcmVmaXggc3BhY2UsIGFkZCBxdW90ZXMpLgogIwogZGVmIG1rMmFyZyhoZWFkLCB4KToKLSAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotICAgIHdhcm5weTNrKCJJbiAzLngsIG1rMmFyZyBoYXMgYmVlbiByZW1vdmVkLiIpCiAgICAgaW1wb3J0IG9zCiAgICAgcmV0dXJuIG1rYXJnKG9zLnBhdGguam9pbihoZWFkLCB4KSkKIApAQCAtNzcsOCArNzksNiBAQAogIyB3aXRoIGJhY2tzbGFzaC4KICMKIGRlZiBta2FyZyh4KToKLSAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotICAgIHdhcm5weTNrKCJpbiAzLngsIG1rYXJnIGhhcyBiZWVuIHJlbW92ZWQuIikKICAgICBpZiAnXCcnIG5vdCBpbiB4OgogICAgICAgICByZXR1cm4gJyBcJycgKyB4ICsgJ1wnJwogICAgIHMgPSAnICInCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZWFsbC5weSBiL0xpYi9jb21waWxlYWxsLnB5CmluZGV4IGE1YzgyYTMuLjkxMGYzMDUgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlYWxsLnB5CisrKyBiL0xpYi9jb21waWxlYWxsLnB5CkBAIC05LDE0ICs5LDE0IEBACiBwYWNrYWdlcyAtLSBmb3Igbm93LCB5b3UnbGwgaGF2ZSB0byBkZWFsIHdpdGggcGFja2FnZXMgc2VwYXJhdGVseS4pCiAKIFNlZSBtb2R1bGUgcHlfY29tcGlsZSBmb3IgZGV0YWlscyBvZiB0aGUgYWN0dWFsIGJ5dGUtY29tcGlsYXRpb24uCi0KICIiIgotCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBweV9jb21waWxlCitpbXBvcnQgc3RydWN0CitpbXBvcnQgaW1wCiAKLV9fYWxsX18gPSBbImNvbXBpbGVfZGlyIiwiY29tcGlsZV9wYXRoIl0KK19fYWxsX18gPSBbImNvbXBpbGVfZGlyIiwiY29tcGlsZV9maWxlIiwiY29tcGlsZV9wYXRoIl0KIAogZGVmIGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzPTEwLCBkZGlyPU5vbmUsCiAgICAgICAgICAgICAgICAgZm9yY2U9MCwgcng9Tm9uZSwgcXVpZXQ9MCk6CkBAIC0zMCw3ICszMCw2IEBACiAgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZSB0aGF0IHdpbGwgc2hvdyB1cCBpbiBlcnJvciBtZXNzYWdlcykKICAgICBmb3JjZTogICAgIGlmIDEsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKICAgICBxdWlldDogICAgIGlmIDEsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgotCiAgICAgIiIiCiAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICBwcmludCAnTGlzdGluZycsIGRpciwgJy4uLicKQEAgLTQ3LDQzICs0Niw3MCBAQAogICAgICAgICAgICAgZGZpbGUgPSBvcy5wYXRoLmpvaW4oZGRpciwgbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRmaWxlID0gTm9uZQotICAgICAgICBpZiByeCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG1vID0gcnguc2VhcmNoKGZ1bGxuYW1lKQotICAgICAgICAgICAgaWYgbW86Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbG5hbWUpOgotICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCi0gICAgICAgICAgICBpZiB0YWlsID09ICcucHknOgotICAgICAgICAgICAgICAgIGNmaWxlID0gZnVsbG5hbWUgKyAoX19kZWJ1Z19fIGFuZCAnYycgb3IgJ28nKQotICAgICAgICAgICAgICAgIGZ0aW1lID0gb3Muc3RhdChmdWxsbmFtZSkuc3RfbXRpbWUKLSAgICAgICAgICAgICAgICB0cnk6IGN0aW1lID0gb3Muc3RhdChjZmlsZSkuc3RfbXRpbWUKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6IGN0aW1lID0gMAotICAgICAgICAgICAgICAgIGlmIChjdGltZSA+IGZ0aW1lKSBhbmQgbm90IGZvcmNlOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb2sgPSBweV9jb21waWxlLmNvbXBpbGUoZnVsbG5hbWUsIE5vbmUsIGRmaWxlLCBUcnVlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvcixlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJwotICAgICAgICAgICAgICAgICAgICBwcmludCBlcnIubXNnCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJTb3JyeSIsIGUKLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBvayA9PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgorICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZmlsZShmdWxsbmFtZSwgZGRpciwgZm9yY2UsIHJ4LCBxdWlldCk6CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKICAgICAgICAgZWxpZiBtYXhsZXZlbHMgPiAwIGFuZCBcCiAgICAgICAgICAgICAgbmFtZSAhPSBvcy5jdXJkaXIgYW5kIG5hbWUgIT0gb3MucGFyZGlyIGFuZCBcCiAgICAgICAgICAgICAgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIFwKICAgICAgICAgICAgICBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpOgotICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZGlyKGZ1bGxuYW1lLCBtYXhsZXZlbHMgLSAxLCBkZmlsZSwgZm9yY2UsIHJ4LCBxdWlldCk6CisgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9kaXIoZnVsbG5hbWUsIG1heGxldmVscyAtIDEsIGRmaWxlLCBmb3JjZSwgcngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQpOgogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgcmV0dXJuIHN1Y2Nlc3MKIAorZGVmIGNvbXBpbGVfZmlsZShmdWxsbmFtZSwgZGRpcj1Ob25lLCBmb3JjZT0wLCByeD1Ob25lLCBxdWlldD0wKToKKyAgICAiIiJCeXRlLWNvbXBpbGUgb25lIGZpbGUuCisKKyAgICBBcmd1bWVudHMgKG9ubHkgZnVsbG5hbWUgaXMgcmVxdWlyZWQpOgorCisgICAgZnVsbG5hbWU6ICB0aGUgZmlsZSB0byBieXRlLWNvbXBpbGUKKyAgICBkZGlyOiAgICAgIGlmIGdpdmVuLCBwdXJwb3J0ZWQgZGlyZWN0b3J5IG5hbWUgKHRoaXMgaXMgdGhlCisgICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZSB0aGF0IHdpbGwgc2hvdyB1cCBpbiBlcnJvciBtZXNzYWdlcykKKyAgICBmb3JjZTogICAgIGlmIDEsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKKyAgICBxdWlldDogICAgIGlmIDEsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgorICAgICIiIgorICAgIHN1Y2Nlc3MgPSAxCisgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZnVsbG5hbWUpCisgICAgaWYgZGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgZGZpbGUgPSBvcy5wYXRoLmpvaW4oZGRpciwgbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBkZmlsZSA9IE5vbmUKKyAgICBpZiByeCBpcyBub3QgTm9uZToKKyAgICAgICAgbW8gPSByeC5zZWFyY2goZnVsbG5hbWUpCisgICAgICAgIGlmIG1vOgorICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgIGhlYWQsIHRhaWwgPSBuYW1lWzotM10sIG5hbWVbLTM6XQorICAgICAgICBpZiB0YWlsID09ICcucHknOgorICAgICAgICAgICAgaWYgbm90IGZvcmNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChmdWxsbmFtZSkuc3RfbXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArIChfX2RlYnVnX18gYW5kICdjJyBvciAnbycpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNoYW5kbGUucmVhZCg4KQorICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3QgPT0gYWN0dWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgIHByaW50ICdDb21waWxpbmcnLCBmdWxsbmFtZSwgJy4uLicKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvayA9IHB5X2NvbXBpbGUuY29tcGlsZShmdWxsbmFtZSwgTm9uZSwgZGZpbGUsIFRydWUpCisgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvcixlcnI6CisgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICdDb21waWxpbmcnLCBmdWxsbmFtZSwgJy4uLicKKyAgICAgICAgICAgICAgICBwcmludCBlcnIubXNnCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHByaW50ICJTb3JyeSIsIGUKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvayA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgIHJldHVybiBzdWNjZXNzCisKIGRlZiBjb21waWxlX3BhdGgoc2tpcF9jdXJkaXI9MSwgbWF4bGV2ZWxzPTAsIGZvcmNlPTAsIHF1aWV0PTApOgogICAgICIiIkJ5dGUtY29tcGlsZSBhbGwgbW9kdWxlIG9uIHN5cy5wYXRoLgogCkBAIC05Myw3ICsxMTksNiBAQAogICAgIG1heGxldmVsczogICBtYXggcmVjdXJzaW9uIGxldmVsIChkZWZhdWx0IDApCiAgICAgZm9yY2U6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IDApCiAgICAgcXVpZXQ6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IDApCi0KICAgICAiIiIKICAgICBzdWNjZXNzID0gMQogICAgIGZvciBkaXIgaW4gc3lzLnBhdGg6CkBAIC0xMDQsMTUgKzEyOSwzNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCBxdWlldD1xdWlldCkKICAgICByZXR1cm4gc3VjY2VzcwogCitkZWYgZXhwYW5kX2FyZ3MoYXJncywgZmxpc3QpOgorICAgICIiInJlYWQgbmFtZXMgaW4gZmxpc3QgYW5kIGFwcGVuZCB0byBhcmdzIiIiCisgICAgZXhwYW5kZWQgPSBhcmdzWzpdCisgICAgaWYgZmxpc3Q6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGZsaXN0ID09ICctJzoKKyAgICAgICAgICAgICAgICBmZCA9IHN5cy5zdGRpbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4oZmxpc3QpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmZC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhwYW5kZWQuYXBwZW5kKGxpbmVbOi0xXSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwcmludCAiRXJyb3IgcmVhZGluZyBmaWxlIGxpc3QgJXMiICUgZmxpc3QKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmV0dXJuIGV4cGFuZGVkCisKIGRlZiBtYWluKCk6CiAgICAgIiIiU2NyaXB0IG1haW4gcHJvZ3JhbS4iIiIKICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdsZnFkOng6JykKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnbGZxZDp4Omk6JykKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CiAgICAgICAgIHByaW50IG1zZwogICAgICAgICBwcmludCAidXNhZ2U6IHB5dGhvbiBjb21waWxlYWxsLnB5IFstbF0gWy1mXSBbLXFdIFstZCBkZXN0ZGlyXSAiIFwKLSAgICAgICAgICAgICAgIlsteCByZWdleHBdIFtkaXJlY3RvcnkgLi4uXSIKKyAgICAgICAgICAgICAgIlsteCByZWdleHBdIFstaSBsaXN0XSBbZGlyZWN0b3J5fGZpbGUgLi4uXSIKICAgICAgICAgcHJpbnQgIi1sOiBkb24ndCByZWN1cnNlIGRvd24iCiAgICAgICAgIHByaW50ICItZjogZm9yY2UgcmVidWlsZCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUiCiAgICAgICAgIHByaW50ICItcTogcXVpZXQgb3BlcmF0aW9uIgpAQCAtMTIwLDEyICsxNjQsMTQgQEAKICAgICAgICAgcHJpbnQgIiAgIGlmIG5vIGRpcmVjdG9yeSBhcmd1bWVudHMsIC1sIHN5cy5wYXRoIGlzIGFzc3VtZWQiCiAgICAgICAgIHByaW50ICIteCByZWdleHA6IHNraXAgZmlsZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiByZWdleHAiCiAgICAgICAgIHByaW50ICIgICB0aGUgcmVnZXhwIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZnVsbCBwYXRoIG9mIHRoZSBmaWxlIgorICAgICAgICBwcmludCAiLWkgbGlzdDogZXhwYW5kIGxpc3Qgd2l0aCBpdHMgY29udGVudCAoZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzKSIKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBtYXhsZXZlbHMgPSAxMAogICAgIGRkaXIgPSBOb25lCiAgICAgZm9yY2UgPSAwCiAgICAgcXVpZXQgPSAwCiAgICAgcnggPSBOb25lCisgICAgZmxpc3QgPSBOb25lCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgaWYgbyA9PSAnLWwnOiBtYXhsZXZlbHMgPSAwCiAgICAgICAgIGlmIG8gPT0gJy1kJzogZGRpciA9IGEKQEAgLTEzNCwxNyArMTgwLDI4IEBACiAgICAgICAgIGlmIG8gPT0gJy14JzoKICAgICAgICAgICAgIGltcG9ydCByZQogICAgICAgICAgICAgcnggPSByZS5jb21waWxlKGEpCisgICAgICAgIGlmIG8gPT0gJy1pJzogZmxpc3QgPSBhCiAgICAgaWYgZGRpcjoKLSAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxIGFuZCBub3Qgb3MucGF0aC5pc2RpcihhcmdzWzBdKToKICAgICAgICAgICAgIHByaW50ICItZCBkZXN0ZGlyIHJlcXVpcmUgZXhhY3RseSBvbmUgZGlyZWN0b3J5IGFyZ3VtZW50IgogICAgICAgICAgICAgc3lzLmV4aXQoMikKICAgICBzdWNjZXNzID0gMQogICAgIHRyeToKLSAgICAgICAgaWYgYXJnczoKLSAgICAgICAgICAgIGZvciBkaXIgaW4gYXJnczoKLSAgICAgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9kaXIoZGlyLCBtYXhsZXZlbHMsIGRkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCByeCwgcXVpZXQpOgotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICBpZiBhcmdzIG9yIGZsaXN0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGZsaXN0OgorICAgICAgICAgICAgICAgICAgICBhcmdzID0gZXhwYW5kX2FyZ3MoYXJncywgZmxpc3QpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYXJnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjb21waWxlX2RpcihhcmcsIG1heGxldmVscywgZGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSwgcngsIHF1aWV0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZmlsZShhcmcsIGRkaXIsIGZvcmNlLCByeCwgcXVpZXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdWNjZXNzID0gY29tcGlsZV9wYXRoKCkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvX19pbml0X18ucHkgYi9MaWIvY29tcGlsZXIvX19pbml0X18ucHkKaW5kZXggZDc1MTQwYS4uMmE2ZjY0ZiAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi9jb21waWxlci9fX2luaXRfXy5weQpAQCAtMjAsOSArMjAsMTEgQEAKIGNvbXBpbGVGaWxlKGZpbGVuYW1lKQogICAgIEdlbmVyYXRlcyBhIC5weWMgZmlsZSBieSBjb21waWxpbmcgZmlsZW5hbWUuCiAiIiIKLWZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCi13YXJucHkzaygidGhlIGNvbXBpbGVyIHBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wIiwgc3RhY2tsZXZlbD0yKQotZGVsIHdhcm5weTNrCisKK2ltcG9ydCB3YXJuaW5ncworCit3YXJuaW5ncy53YXJuKCJUaGUgY29tcGlsZXIgcGFja2FnZSBpcyBkZXByZWNhdGVkIGFuZCByZW1vdmVkIGluIFB5dGhvbiAzLnguIiwKKyAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAKIGZyb20gY29tcGlsZXIudHJhbnNmb3JtZXIgaW1wb3J0IHBhcnNlLCBwYXJzZUZpbGUKIGZyb20gY29tcGlsZXIudmlzaXRvciBpbXBvcnQgd2FsawpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVyL2FzdC5weSBiL0xpYi9jb21waWxlci9hc3QucHkKaW5kZXggZjkyMzA3Ny4uNGMzZmMxNiAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVyL2FzdC5weQorKysgYi9MaWIvY29tcGlsZXIvYXN0LnB5CkBAIC04OTAsNiArODkwLDUxIEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIkxpc3RDb21wSWYoJXMpIiAlIChyZXByKHNlbGYudGVzdCksKQogCitjbGFzcyBTZXRDb21wKE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHByLCBxdWFscywgbGluZW5vPU5vbmUpOgorICAgICAgICBzZWxmLmV4cHIgPSBleHByCisgICAgICAgIHNlbGYucXVhbHMgPSBxdWFscworICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCisgICAgZGVmIGdldENoaWxkcmVuKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFtdCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChzZWxmLmV4cHIpCisgICAgICAgIGNoaWxkcmVuLmV4dGVuZChmbGF0dGVuKHNlbGYucXVhbHMpKQorICAgICAgICByZXR1cm4gdHVwbGUoY2hpbGRyZW4pCisKKyAgICBkZWYgZ2V0Q2hpbGROb2RlcyhzZWxmKToKKyAgICAgICAgbm9kZWxpc3QgPSBbXQorICAgICAgICBub2RlbGlzdC5hcHBlbmQoc2VsZi5leHByKQorICAgICAgICBub2RlbGlzdC5leHRlbmQoZmxhdHRlbl9ub2RlcyhzZWxmLnF1YWxzKSkKKyAgICAgICAgcmV0dXJuIHR1cGxlKG5vZGVsaXN0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlNldENvbXAoJXMsICVzKSIgJSAocmVwcihzZWxmLmV4cHIpLCByZXByKHNlbGYucXVhbHMpKQorCitjbGFzcyBEaWN0Q29tcChOb2RlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2V5LCB2YWx1ZSwgcXVhbHMsIGxpbmVubz1Ob25lKToKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYucXVhbHMgPSBxdWFscworICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworCisgICAgZGVmIGdldENoaWxkcmVuKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFtdCisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChzZWxmLmtleSkKKyAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHNlbGYudmFsdWUpCisgICAgICAgIGNoaWxkcmVuLmV4dGVuZChmbGF0dGVuKHNlbGYucXVhbHMpKQorICAgICAgICByZXR1cm4gdHVwbGUoY2hpbGRyZW4pCisKKyAgICBkZWYgZ2V0Q2hpbGROb2RlcyhzZWxmKToKKyAgICAgICAgbm9kZWxpc3QgPSBbXQorICAgICAgICBub2RlbGlzdC5hcHBlbmQoc2VsZi5rZXkpCisgICAgICAgIG5vZGVsaXN0LmFwcGVuZChzZWxmLnZhbHVlKQorICAgICAgICBub2RlbGlzdC5leHRlbmQoZmxhdHRlbl9ub2RlcyhzZWxmLnF1YWxzKSkKKyAgICAgICAgcmV0dXJuIHR1cGxlKG5vZGVsaXN0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkRpY3RDb21wKCVzLCAlcywgJXMpIiAlIChyZXByKHNlbGYua2V5KSwgcmVwcihzZWxmLnZhbHVlKSwgcmVwcihzZWxmLnF1YWxzKSkKKwogY2xhc3MgTW9kKE5vZGUpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZWZ0cmlnaHQsIGxpbmVubz1Ob25lKToKICAgICAgICAgc2VsZi5sZWZ0ID0gbGVmdHJpZ2h0WzBdCkBAIC0xMTA3LDYgKzExNTIsMjIgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiUmlnaHRTaGlmdCgoJXMsICVzKSkiICUgKHJlcHIoc2VsZi5sZWZ0KSwgcmVwcihzZWxmLnJpZ2h0KSkKIAorY2xhc3MgU2V0KE5vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub2RlcywgbGluZW5vPU5vbmUpOgorICAgICAgICBzZWxmLm5vZGVzID0gbm9kZXMKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKworICAgIGRlZiBnZXRDaGlsZHJlbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHR1cGxlKGZsYXR0ZW4oc2VsZi5ub2RlcykpCisKKyAgICBkZWYgZ2V0Q2hpbGROb2RlcyhzZWxmKToKKyAgICAgICAgbm9kZWxpc3QgPSBbXQorICAgICAgICBub2RlbGlzdC5leHRlbmQoZmxhdHRlbl9ub2RlcyhzZWxmLm5vZGVzKSkKKyAgICAgICAgcmV0dXJuIHR1cGxlKG5vZGVsaXN0KQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlNldCglcykiICUgKHJlcHIoc2VsZi5ub2RlcyksKQorCiBjbGFzcyBTbGljZShOb2RlKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwciwgZmxhZ3MsIGxvd2VyLCB1cHBlciwgbGluZW5vPU5vbmUpOgogICAgICAgICBzZWxmLmV4cHIgPSBleHByCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvY29uc3RzLnB5IGIvTGliL2NvbXBpbGVyL2NvbnN0cy5weQppbmRleCBkZDQyNzkzLi4wMjJmNmRhIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvY29uc3RzLnB5CisrKyBiL0xpYi9jb21waWxlci9jb25zdHMucHkKQEAgLTQsMTAgKzQsMTEgQEAKIE9QX0FQUExZID0gJ09QX0FQUExZJwogCiBTQ19MT0NBTCA9IDEKLVNDX0dMT0JBTCA9IDIKLVNDX0ZSRUUgPSAzCi1TQ19DRUxMID0gNAotU0NfVU5LTk9XTiA9IDUKK1NDX0dMT0JBTF9JTVBMSUNJVCA9IDIKK1NDX0dMT0JBTF9FWFBMSUNUID0gMworU0NfRlJFRSA9IDQKK1NDX0NFTEwgPSA1CitTQ19VTktOT1dOID0gNgogCiBDT19PUFRJTUlaRUQgPSAweDAwMDEKIENPX05FV0xPQ0FMUyA9IDB4MDAwMgpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVyL3B5YXNzZW0ucHkgYi9MaWIvY29tcGlsZXIvcHlhc3NlbS5weQppbmRleCA2ZWZlYzI4Li4yODZiZTBjIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvcHlhc3NlbS5weQorKysgYi9MaWIvY29tcGlsZXIvcHlhc3NlbS5weQpAQCAtMjEsNiArMjEsNyBAQAogICAgICAgICAgICAgaWYgc2VsZi5jdXJyZW50OgogICAgICAgICAgICAgICAgIHByaW50ICJlbmQiLCByZXByKHNlbGYuY3VycmVudCkKICAgICAgICAgICAgICAgICBwcmludCAiICAgIG5leHQiLCBzZWxmLmN1cnJlbnQubmV4dAorICAgICAgICAgICAgICAgIHByaW50ICIgICAgcHJldiIsIHNlbGYuY3VycmVudC5wcmV2CiAgICAgICAgICAgICAgICAgcHJpbnQgIiAgICIsIHNlbGYuY3VycmVudC5nZXRfY2hpbGRyZW4oKQogICAgICAgICAgICAgcHJpbnQgcmVwcihibG9jaykKICAgICAgICAgc2VsZi5jdXJyZW50ID0gYmxvY2sKQEAgLTQwLDEzICs0MSwxMiBAQAogICAgICAgICBpZiBibG9jayBpcyBOb25lOgogICAgICAgICAgICAgYmxvY2sgPSBzZWxmLm5ld0Jsb2NrKCkKIAotICAgICAgICAjIE5vdGU6IElmIHRoZSBjdXJyZW50IGJsb2NrIGVuZHMgd2l0aCBhbiB1bmNvbmRpdGlvbmFsCi0gICAgICAgICMgY29udHJvbCB0cmFuc2ZlciwgdGhlbiBpdCBpcyBpbmNvcnJlY3QgdG8gYWRkIGFuIGltcGxpY2l0Ci0gICAgICAgICMgdHJhbnNmZXIgdG8gdGhlIGJsb2NrIGdyYXBoLiAgVGhlIGN1cnJlbnQgY29kZSByZXF1aXJlcwotICAgICAgICAjIHRoZXNlIGVkZ2VzIHRvIGdldCB0aGUgYmxvY2tzIGVtaXR0ZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLAotICAgICAgICAjIGhvd2V2ZXIuIDotKCAgSWYgYSBjbGllbnQgbmVlZHMgdG8gcmVtb3ZlIHRoZXNlIGVkZ2VzLCBjYWxsCi0gICAgICAgICMgcHJ1bmVFZGdlcygpLgotCisgICAgICAgICMgTm90ZTogSWYgdGhlIGN1cnJlbnQgYmxvY2sgZW5kcyB3aXRoIGFuIHVuY29uZGl0aW9uYWwgY29udHJvbAorICAgICAgICAjIHRyYW5zZmVyLCB0aGVuIGl0IGlzIHRlY2hpY2FsbHkgaW5jb3JyZWN0IHRvIGFkZCBhbiBpbXBsaWNpdAorICAgICAgICAjIHRyYW5zZmVyIHRvIHRoZSBibG9jayBncmFwaC4gRG9pbmcgc28gcmVzdWx0cyBpbiBjb2RlIGdlbmVyYXRpb24KKyAgICAgICAgIyBmb3IgdW5yZWFjaGFibGUgYmxvY2tzLiAgVGhhdCBkb2Vzbid0IGFwcGVhciB0byBiZSB2ZXJ5IGNvbW1vbgorICAgICAgICAjIHdpdGggUHl0aG9uIGNvZGUgYW5kIHNpbmNlIHRoZSBidWlsdC1pbiBjb21waWxlciBkb2Vzbid0IG9wdGltaXplCisgICAgICAgICMgaXQgb3V0IHdlIGRvbid0IGVpdGhlci4KICAgICAgICAgc2VsZi5jdXJyZW50LmFkZE5leHQoYmxvY2spCiAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhibG9jaykKIApAQCAtNjksOCArNjksNiBAQAogICAgIGRlZiBlbWl0KHNlbGYsICppbnN0KToKICAgICAgICAgaWYgc2VsZi5fZGVidWc6CiAgICAgICAgICAgICBwcmludCAiXHQiLCBpbnN0Ci0gICAgICAgIGlmIGluc3RbMF0gaW4gWydSRVRVUk5fVkFMVUUnLCAnWUlFTERfVkFMVUUnXToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudC5hZGRPdXRFZGdlKHNlbGYuZXhpdCkKICAgICAgICAgaWYgbGVuKGluc3QpID09IDIgYW5kIGlzaW5zdGFuY2UoaW5zdFsxXSwgQmxvY2spOgogICAgICAgICAgICAgc2VsZi5jdXJyZW50LmFkZE91dEVkZ2UoaW5zdFsxXSkKICAgICAgICAgc2VsZi5jdXJyZW50LmVtaXQoaW5zdCkKQEAgLTgwLDExOCArNzgsOSBAQAogCiAgICAgICAgIGkuZS4gZWFjaCBub2RlIGFwcGVhcnMgYmVmb3JlIGFsbCBvZiBpdHMgc3VjY2Vzc29ycwogICAgICAgICAiIiIKLSAgICAgICAgIyBYWFggbWFrZSBzdXJlIGV2ZXJ5IG5vZGUgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgbmV4dAotICAgICAgICAjIGlzIHNldCBzbyB0aGF0IG5leHQgcG9pbnRzIHRvIGV4aXQKLSAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3MuZWxlbWVudHMoKToKLSAgICAgICAgICAgIGlmIGIgaXMgc2VsZi5leGl0OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBub3QgYi5uZXh0OgotICAgICAgICAgICAgICAgIGIuYWRkTmV4dChzZWxmLmV4aXQpCi0gICAgICAgIG9yZGVyID0gZGZzX3Bvc3RvcmRlcihzZWxmLmVudHJ5LCB7fSkKLSAgICAgICAgb3JkZXIucmV2ZXJzZSgpCi0gICAgICAgIHNlbGYuZml4dXBPcmRlcihvcmRlciwgc2VsZi5leGl0KQotICAgICAgICAjIGhhY2sgYWxlcnQKLSAgICAgICAgaWYgbm90IHNlbGYuZXhpdCBpbiBvcmRlcjoKLSAgICAgICAgICAgIG9yZGVyLmFwcGVuZChzZWxmLmV4aXQpCi0KKyAgICAgICAgb3JkZXIgPSBvcmRlcl9ibG9ja3Moc2VsZi5lbnRyeSwgc2VsZi5leGl0KQogICAgICAgICByZXR1cm4gb3JkZXIKIAotICAgIGRlZiBmaXh1cE9yZGVyKHNlbGYsIGJsb2NrcywgZGVmYXVsdF9uZXh0KToKLSAgICAgICAgIiIiRml4dXAgYmFkIG9yZGVyIGludHJvZHVjZWQgYnkgREZTLiIiIgotCi0gICAgICAgICMgWFhYIFRoaXMgaXMgYSB0b3RhbCBtZXNzLiAgVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZ2V0Ci0gICAgICAgICMgdGhlIGNvZGUgYmxvY2tzIGluIHRoZSByaWdodCBvcmRlci4KLQotICAgICAgICBzZWxmLmZpeHVwT3JkZXJIb25vck5leHQoYmxvY2tzLCBkZWZhdWx0X25leHQpCi0gICAgICAgIHNlbGYuZml4dXBPcmRlckZvcndhcmQoYmxvY2tzLCBkZWZhdWx0X25leHQpCi0KLSAgICBkZWYgZml4dXBPcmRlckhvbm9yTmV4dChzZWxmLCBibG9ja3MsIGRlZmF1bHRfbmV4dCk6Ci0gICAgICAgICIiIkZpeCBvbmUgcHJvYmxlbSB3aXRoIERGUy4KLQotICAgICAgICBUaGUgREZTIHVzZXMgY2hpbGQgYmxvY2ssIGJ1dCBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIHNwZWNpYWwKLSAgICAgICAgIm5leHQiIGJsb2NrLiAgQXMgYSByZXN1bHQsIHRoZSBERlMgY2FuIG9yZGVyIGJsb2NrcyBzbyB0aGF0IGEKLSAgICAgICAgYmxvY2sgaXNuJ3QgbmV4dCB0byB0aGUgcmlnaHQgYmxvY2sgZm9yIGltcGxpY2l0IGNvbnRyb2wKLSAgICAgICAgdHJhbnNmZXJzLgotICAgICAgICAiIiIKLSAgICAgICAgaW5kZXggPSB7fQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYmxvY2tzKSk6Ci0gICAgICAgICAgICBpbmRleFtibG9ja3NbaV1dID0gaQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihibG9ja3MpIC0gMSk6Ci0gICAgICAgICAgICBiID0gYmxvY2tzW2ldCi0gICAgICAgICAgICBuID0gYmxvY2tzW2kgKyAxXQotICAgICAgICAgICAgaWYgbm90IGIubmV4dCBvciBiLm5leHRbMF0gPT0gZGVmYXVsdF9uZXh0IG9yIGIubmV4dFswXSA9PSBuOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAjIFRoZSBibG9ja3MgYXJlIGluIHRoZSB3cm9uZyBvcmRlci4gIEZpbmQgdGhlIGNoYWluIG9mCi0gICAgICAgICAgICAjIGJsb2NrcyB0byBpbnNlcnQgd2hlcmUgdGhleSBiZWxvbmcuCi0gICAgICAgICAgICBjdXIgPSBiCi0gICAgICAgICAgICBjaGFpbiA9IFtdCi0gICAgICAgICAgICBlbHQgPSBjdXIKLSAgICAgICAgICAgIHdoaWxlIGVsdC5uZXh0IGFuZCBlbHQubmV4dFswXSAhPSBkZWZhdWx0X25leHQ6Ci0gICAgICAgICAgICAgICAgY2hhaW4uYXBwZW5kKGVsdC5uZXh0WzBdKQotICAgICAgICAgICAgICAgIGVsdCA9IGVsdC5uZXh0WzBdCi0gICAgICAgICAgICAjIE5vdyByZW1vdmUgdGhlIGJsb2NrcyBpbiB0aGUgY2hhaW4gZnJvbSB0aGUgY3VycmVudAotICAgICAgICAgICAgIyBibG9jayBsaXN0LCBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlLWluc2VydGVkLgotICAgICAgICAgICAgbCA9IFtdCi0gICAgICAgICAgICBmb3IgYiBpbiBjaGFpbjoKLSAgICAgICAgICAgICAgICBhc3NlcnQgaW5kZXhbYl0gPiBpCi0gICAgICAgICAgICAgICAgbC5hcHBlbmQoKGluZGV4W2JdLCBiKSkKLSAgICAgICAgICAgIGwuc29ydCgpCi0gICAgICAgICAgICBsLnJldmVyc2UoKQotICAgICAgICAgICAgZm9yIGosIGIgaW4gbDoKLSAgICAgICAgICAgICAgICBkZWwgYmxvY2tzW2luZGV4W2JdXQotICAgICAgICAgICAgIyBJbnNlcnQgdGhlIGNoYWluIGluIHRoZSBwcm9wZXIgbG9jYXRpb24KLSAgICAgICAgICAgIGJsb2Nrc1tpOmkgKyAxXSA9IFtjdXJdICsgY2hhaW4KLSAgICAgICAgICAgICMgRmluYWxseSwgcmUtY29tcHV0ZSB0aGUgYmxvY2sgaW5kZXhlcwotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGJsb2NrcykpOgotICAgICAgICAgICAgICAgIGluZGV4W2Jsb2Nrc1tpXV0gPSBpCi0KLSAgICBkZWYgZml4dXBPcmRlckZvcndhcmQoc2VsZiwgYmxvY2tzLCBkZWZhdWx0X25leHQpOgotICAgICAgICAiIiJNYWtlIHN1cmUgYWxsIEpVTVBfRk9SV0FSRHMganVtcCBmb3J3YXJkIiIiCi0gICAgICAgIGluZGV4ID0ge30KLSAgICAgICAgY2hhaW5zID0gW10KLSAgICAgICAgY3VyID0gW10KLSAgICAgICAgZm9yIGIgaW4gYmxvY2tzOgotICAgICAgICAgICAgaW5kZXhbYl0gPSBsZW4oY2hhaW5zKQotICAgICAgICAgICAgY3VyLmFwcGVuZChiKQotICAgICAgICAgICAgaWYgYi5uZXh0IGFuZCBiLm5leHRbMF0gPT0gZGVmYXVsdF9uZXh0OgotICAgICAgICAgICAgICAgIGNoYWlucy5hcHBlbmQoY3VyKQotICAgICAgICAgICAgICAgIGN1ciA9IFtdCi0gICAgICAgIGNoYWlucy5hcHBlbmQoY3VyKQotCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBjb25zdHJhaW50cyA9IFtdCi0KLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjaGFpbnMpKToKLSAgICAgICAgICAgICAgICBsID0gY2hhaW5zW2ldCi0gICAgICAgICAgICAgICAgZm9yIGIgaW4gbDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gYi5nZXRfY2hpbGRyZW4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4W2NdIDwgaToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX3AgPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluc3QgaW4gYi5pbnN0czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdFswXSA9PSAnSlVNUF9GT1JXQVJEJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RbMV0gPT0gYzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX3AgPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZvcndhcmRfcDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5hcHBlbmQoKGluZGV4W2NdLCBpKSkKLQotICAgICAgICAgICAgaWYgbm90IGNvbnN0cmFpbnRzOgotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICMgWFhYIGp1c3QgZG8gb25lIGZvciBub3cKLSAgICAgICAgICAgICMgZG8gc3dhcHMgdG8gZ2V0IHRoaW5ncyBpbiB0aGUgcmlnaHQgb3JkZXIKLSAgICAgICAgICAgIGdvZXNfYmVmb3JlLCBhX2NoYWluID0gY29uc3RyYWludHNbMF0KLSAgICAgICAgICAgIGFzc2VydCBhX2NoYWluID4gZ29lc19iZWZvcmUKLSAgICAgICAgICAgIGMgPSBjaGFpbnNbYV9jaGFpbl0KLSAgICAgICAgICAgIGNoYWlucy5yZW1vdmUoYykKLSAgICAgICAgICAgIGNoYWlucy5pbnNlcnQoZ29lc19iZWZvcmUsIGMpCi0KLSAgICAgICAgZGVsIGJsb2Nrc1s6XQotICAgICAgICBmb3IgYyBpbiBjaGFpbnM6Ci0gICAgICAgICAgICBmb3IgYiBpbiBjOgotICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYikKLQogICAgIGRlZiBnZXRCbG9ja3Moc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmJsb2Nrcy5lbGVtZW50cygpCiAKQEAgLTIwNSwyNyArOTQsODQgQEAKICAgICAgICAgICAgIGwuZXh0ZW5kKGIuZ2V0Q29udGFpbmVkR3JhcGhzKCkpCiAgICAgICAgIHJldHVybiBsCiAKLWRlZiBkZnNfcG9zdG9yZGVyKGIsIHNlZW4pOgotICAgICIiIkRlcHRoLWZpcnN0IHNlYXJjaCBvZiB0cmVlIHJvb3RlZCBhdCBiLCByZXR1cm4gaW4gcG9zdG9yZGVyIiIiCisKK2RlZiBvcmRlcl9ibG9ja3Moc3RhcnRfYmxvY2ssIGV4aXRfYmxvY2spOgorICAgICIiIk9yZGVyIGJsb2NrcyBzbyB0aGF0IHRoZXkgYXJlIGVtaXR0ZWQgaW4gdGhlIHJpZ2h0IG9yZGVyIiIiCisgICAgIyBSdWxlczoKKyAgICAjIC0gd2hlbiBhIGJsb2NrIGhhcyBhIG5leHQgYmxvY2ssIHRoZSBuZXh0IGJsb2NrIG11c3QgYmUgZW1pdHRlZCBqdXN0IGFmdGVyCisgICAgIyAtIHdoZW4gYSBibG9jayBoYXMgZm9sbG93ZXJzIChyZWxhdGl2ZSBqdW1wcyksIGl0IG11c3QgYmUgZW1pdHRlZCBiZWZvcmUKKyAgICAjICAgdGhlbQorICAgICMgLSBhbGwgcmVhY2hhYmxlIGJsb2NrcyBtdXN0IGJlIGVtaXR0ZWQKICAgICBvcmRlciA9IFtdCi0gICAgc2VlbltiXSA9IGIKLSAgICBmb3IgYyBpbiBiLmdldF9jaGlsZHJlbigpOgotICAgICAgICBpZiBjIGluIHNlZW46CisKKyAgICAjIEZpbmQgYWxsIHRoZSBibG9ja3MgdG8gYmUgZW1pdHRlZC4KKyAgICByZW1haW5pbmcgPSBzZXQoKQorICAgIHRvZG8gPSBbc3RhcnRfYmxvY2tdCisgICAgd2hpbGUgdG9kbzoKKyAgICAgICAgYiA9IHRvZG8ucG9wKCkKKyAgICAgICAgaWYgYiBpbiByZW1haW5pbmc6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBvcmRlciA9IG9yZGVyICsgZGZzX3Bvc3RvcmRlcihjLCBzZWVuKQotICAgIG9yZGVyLmFwcGVuZChiKQorICAgICAgICByZW1haW5pbmcuYWRkKGIpCisgICAgICAgIGZvciBjIGluIGIuZ2V0X2NoaWxkcmVuKCk6CisgICAgICAgICAgICBpZiBjIG5vdCBpbiByZW1haW5pbmc6CisgICAgICAgICAgICAgICAgdG9kby5hcHBlbmQoYykKKworICAgICMgQSBibG9jayBpcyBkb21pbmF0ZWQgYnkgYW5vdGhlciBibG9jayBpZiB0aGF0IGJsb2NrIG11c3QgYmUgZW1pdHRlZAorICAgICMgYmVmb3JlIGl0LgorICAgIGRvbWluYXRvcnMgPSB7fQorICAgIGZvciBiIGluIHJlbWFpbmluZzoKKyAgICAgICAgaWYgX19kZWJ1Z19fIGFuZCBiLm5leHQ6CisgICAgICAgICAgICBhc3NlcnQgYiBpcyBiLm5leHRbMF0ucHJldlswXSwgKGIsIGIubmV4dCkKKyAgICAgICAgIyBNYWtlIHN1cmUgZXZlcnkgYmxvY2sgYXBwZWFycyBpbiBkb21pbmF0b3JzLCBldmVuIGlmIG5vCisgICAgICAgICMgb3RoZXIgYmxvY2sgbXVzdCBwcmVjZWRlIGl0LgorICAgICAgICBkb21pbmF0b3JzLnNldGRlZmF1bHQoYiwgc2V0KCkpCisgICAgICAgICMgcHJlY2VlZGluZyBibG9ja3MgZG9taW5hdGUgZm9sbG93aW5nIGJsb2NrcworICAgICAgICBmb3IgYyBpbiBiLmdldF9mb2xsb3dlcnMoKToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZG9taW5hdG9ycy5zZXRkZWZhdWx0KGMsIHNldCgpKS5hZGQoYikKKyAgICAgICAgICAgICAgICAjIEFueSBibG9jayB0aGF0IGhhcyBhIG5leHQgcG9pbnRlciBsZWFkaW5nIHRvIGMgaXMgYWxzbworICAgICAgICAgICAgICAgICMgZG9taW5hdGVkIGJlY2F1c2UgdGhlIHdob2xlIGNoYWluIHdpbGwgYmUgZW1pdHRlZCBhdCBvbmNlLgorICAgICAgICAgICAgICAgICMgV2FsayBiYWNrd2FyZHMgYW5kIGFkZCB0aGVtIGFsbC4KKyAgICAgICAgICAgICAgICBpZiBjLnByZXYgYW5kIGMucHJldlswXSBpcyBub3QgYjoKKyAgICAgICAgICAgICAgICAgICAgYyA9IGMucHJldlswXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZmluZF9uZXh0KCk6CisgICAgICAgICMgRmluZCBhIGJsb2NrIHRoYXQgY2FuIGJlIGVtaXR0ZWQgbmV4dC4KKyAgICAgICAgZm9yIGIgaW4gcmVtYWluaW5nOgorICAgICAgICAgICAgZm9yIGMgaW4gZG9taW5hdG9yc1tiXToKKyAgICAgICAgICAgICAgICBpZiBjIGluIHJlbWFpbmluZzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgIyBjYW4ndCBlbWl0IHlldCwgZG9taW5hdGVkIGJ5IGEgcmVtYWluaW5nIGJsb2NrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBiCisgICAgICAgIGFzc2VydCAwLCAnY2lyY3VsYXIgZGVwZW5kZW5jeSwgY2Fubm90IGZpbmQgbmV4dCBibG9jaycKKworICAgIGIgPSBzdGFydF9ibG9jaworICAgIHdoaWxlIDE6CisgICAgICAgIG9yZGVyLmFwcGVuZChiKQorICAgICAgICByZW1haW5pbmcuZGlzY2FyZChiKQorICAgICAgICBpZiBiLm5leHQ6CisgICAgICAgICAgICBiID0gYi5uZXh0WzBdCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIGIgaXMgbm90IGV4aXRfYmxvY2sgYW5kIG5vdCBiLmhhc191bmNvbmRpdGlvbmFsX3RyYW5zZmVyKCk6CisgICAgICAgICAgICBvcmRlci5hcHBlbmQoZXhpdF9ibG9jaykKKyAgICAgICAgaWYgbm90IHJlbWFpbmluZzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGIgPSBmaW5kX25leHQoKQogICAgIHJldHVybiBvcmRlcgogCisKIGNsYXNzIEJsb2NrOgogICAgIF9jb3VudCA9IDAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbD0nJyk6CiAgICAgICAgIHNlbGYuaW5zdHMgPSBbXQotICAgICAgICBzZWxmLmluRWRnZXMgPSBtaXNjLlNldCgpCi0gICAgICAgIHNlbGYub3V0RWRnZXMgPSBtaXNjLlNldCgpCisgICAgICAgIHNlbGYub3V0RWRnZXMgPSBzZXQoKQogICAgICAgICBzZWxmLmxhYmVsID0gbGFiZWwKICAgICAgICAgc2VsZi5iaWQgPSBCbG9jay5fY291bnQKICAgICAgICAgc2VsZi5uZXh0ID0gW10KKyAgICAgICAgc2VsZi5wcmV2ID0gW10KICAgICAgICAgQmxvY2suX2NvdW50ID0gQmxvY2suX2NvdW50ICsgMQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpAQCAtMjQxLDUxICsxODcsNDYgQEAKIAogICAgIGRlZiBlbWl0KHNlbGYsIGluc3QpOgogICAgICAgICBvcCA9IGluc3RbMF0KLSAgICAgICAgaWYgb3BbOjRdID09ICdKVU1QJzoKLSAgICAgICAgICAgIHNlbGYub3V0RWRnZXMuYWRkKGluc3RbMV0pCiAgICAgICAgIHNlbGYuaW5zdHMuYXBwZW5kKGluc3QpCiAKICAgICBkZWYgZ2V0SW5zdHJ1Y3Rpb25zKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5pbnN0cwogCi0gICAgZGVmIGFkZEluRWRnZShzZWxmLCBibG9jayk6Ci0gICAgICAgIHNlbGYuaW5FZGdlcy5hZGQoYmxvY2spCi0KICAgICBkZWYgYWRkT3V0RWRnZShzZWxmLCBibG9jayk6CiAgICAgICAgIHNlbGYub3V0RWRnZXMuYWRkKGJsb2NrKQogCiAgICAgZGVmIGFkZE5leHQoc2VsZiwgYmxvY2spOgogICAgICAgICBzZWxmLm5leHQuYXBwZW5kKGJsb2NrKQogICAgICAgICBhc3NlcnQgbGVuKHNlbGYubmV4dCkgPT0gMSwgbWFwKHN0ciwgc2VsZi5uZXh0KQorICAgICAgICBibG9jay5wcmV2LmFwcGVuZChzZWxmKQorICAgICAgICBhc3NlcnQgbGVuKGJsb2NrLnByZXYpID09IDEsIG1hcChzdHIsIGJsb2NrLnByZXYpCiAKLSAgICBfdW5jb25kX3RyYW5zZmVyID0gKCdSRVRVUk5fVkFMVUUnLCAnUkFJU0VfVkFSQVJHUycsICdZSUVMRF9WQUxVRScsCi0gICAgICAgICAgICAgICAgICAgICAgICAnSlVNUF9BQlNPTFVURScsICdKVU1QX0ZPUldBUkQnLCAnQ09OVElOVUVfTE9PUCcpCisgICAgX3VuY29uZF90cmFuc2ZlciA9ICgnUkVUVVJOX1ZBTFVFJywgJ1JBSVNFX1ZBUkFSR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0pVTVBfQUJTT0xVVEUnLCAnSlVNUF9GT1JXQVJEJywgJ0NPTlRJTlVFX0xPT1AnLAorICAgICAgICAgICAgICAgICAgICAgICAgKQogCi0gICAgZGVmIHBydW5lTmV4dChzZWxmKToKLSAgICAgICAgIiIiUmVtb3ZlIGJvZ3VzIGVkZ2UgZm9yIHVuY29uZGl0aW9uYWwgdHJhbnNmZXJzCi0KLSAgICAgICAgRWFjaCBibG9jayBoYXMgYSBuZXh0IGVkZ2UgdGhhdCBhY2NvdW50cyBmb3IgaW1wbGljaXQgY29udHJvbAotICAgICAgICB0cmFuc2ZlcnMsIGUuZy4gZnJvbSBhIEpVTVBfSUZfRkFMU0UgdG8gdGhlIGJsb2NrIHRoYXQgd2lsbCBiZQotICAgICAgICBleGVjdXRlZCBpZiB0aGUgdGVzdCBpcyB0cnVlLgotCi0gICAgICAgIFRoZXNlIGVkZ2VzIG11c3QgcmVtYWluIGZvciB0aGUgY3VycmVudCBhc3NlbWJsZXIgY29kZSB0bwotICAgICAgICB3b3JrLiBJZiB0aGV5IGFyZSByZW1vdmVkLCB0aGUgZGZzX3Bvc3RvcmRlciBnZXRzIHRoaW5ncyBpbgotICAgICAgICB3ZWlyZCBvcmRlcnMuICBIb3dldmVyLCB0aGV5IHNob3VsZG4ndCBiZSB0aGVyZSBmb3Igb3RoZXIKLSAgICAgICAgcHVycG9zZXMsIGUuZy4gY29udmVyc2lvbiB0byBTU0EgZm9ybS4gIFRoaXMgbWV0aG9kIHdpbGwKLSAgICAgICAgcmVtb3ZlIHRoZSBuZXh0IGVkZ2Ugd2hlbiBpdCBmb2xsb3dzIGFuIHVuY29uZGl0aW9uYWwgY29udHJvbAotICAgICAgICB0cmFuc2Zlci4KLSAgICAgICAgIiIiCisgICAgZGVmIGhhc191bmNvbmRpdGlvbmFsX3RyYW5zZmVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYW4gdW5jb25kaXRpb25hbCB0cmFuc2ZlciB0byBhbiBvdGhlciBibG9jaworICAgICAgICBhdCB0aGUgZW5kIG9mIHRoaXMgYmxvY2suIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gcmlzayBmb3IgdGhlIGJ5dGVjb2RlCisgICAgICAgIGV4ZWN1dGVyIHRvIGdvIHBhc3QgdGhpcyBibG9jaydzIGJ5dGVjb2RlLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcCwgYXJnID0gc2VsZi5pbnN0c1stMV0KICAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBvcCBpbiBzZWxmLl91bmNvbmRfdHJhbnNmZXI6Ci0gICAgICAgICAgICBzZWxmLm5leHQgPSBbXQorICAgICAgICByZXR1cm4gb3AgaW4gc2VsZi5fdW5jb25kX3RyYW5zZmVyCiAKICAgICBkZWYgZ2V0X2NoaWxkcmVuKHNlbGYpOgotICAgICAgICBpZiBzZWxmLm5leHQgYW5kIHNlbGYubmV4dFswXSBpbiBzZWxmLm91dEVkZ2VzOgotICAgICAgICAgICAgc2VsZi5vdXRFZGdlcy5yZW1vdmUoc2VsZi5uZXh0WzBdKQotICAgICAgICByZXR1cm4gc2VsZi5vdXRFZGdlcy5lbGVtZW50cygpICsgc2VsZi5uZXh0CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYub3V0RWRnZXMpICsgc2VsZi5uZXh0CisKKyAgICBkZWYgZ2V0X2ZvbGxvd2VycyhzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSB3aG9sZSBsaXN0IG9mIGZvbGxvd2VycywgaW5jbHVkaW5nIHRoZSBuZXh0IGJsb2NrLiIiIgorICAgICAgICBmb2xsb3dlcnMgPSBzZXQoc2VsZi5uZXh0KQorICAgICAgICAjIEJsb2NrcyB0aGF0IG11c3QgYmUgZW1pdHRlZCAqYWZ0ZXIqIHRoaXMgb25lLCBiZWNhdXNlIG9mCisgICAgICAgICMgYnl0ZWNvZGUgb2Zmc2V0cyAoZS5nLiByZWxhdGl2ZSBqdW1wcykgcG9pbnRpbmcgdG8gdGhlbS4KKyAgICAgICAgZm9yIGluc3QgaW4gc2VsZi5pbnN0czoKKyAgICAgICAgICAgIGlmIGluc3RbMF0gaW4gUHlGbG93R3JhcGguaGFzanJlbDoKKyAgICAgICAgICAgICAgICBmb2xsb3dlcnMuYWRkKGluc3RbMV0pCisgICAgICAgIHJldHVybiBmb2xsb3dlcnMKIAogICAgIGRlZiBnZXRDb250YWluZWRHcmFwaHMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbGwgZ3JhcGhzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBibG9jay4KQEAgLTQ0NiwxOCArMzg3LDE4IEBACiAgICAgICAgICAgICBlbGlmIGluc3RbMF0gIT0gIlNFVF9MSU5FTk8iOgogICAgICAgICAgICAgICAgIHBjID0gcGMgKyAzCiAgICAgICAgICAgICBvcG5hbWUgPSBpbnN0WzBdCi0gICAgICAgICAgICBpZiBzZWxmLmhhc2pyZWwuaGFzX2VsdChvcG5hbWUpOgorICAgICAgICAgICAgaWYgb3BuYW1lIGluIHNlbGYuaGFzanJlbDoKICAgICAgICAgICAgICAgICBvcGFyZyA9IGluc3RbMV0KICAgICAgICAgICAgICAgICBvZmZzZXQgPSBiZWdpbltvcGFyZ10gLSBwYwogICAgICAgICAgICAgICAgIGluc3RzW2ldID0gb3BuYW1lLCBvZmZzZXQKLSAgICAgICAgICAgIGVsaWYgc2VsZi5oYXNqYWJzLmhhc19lbHQob3BuYW1lKToKKyAgICAgICAgICAgIGVsaWYgb3BuYW1lIGluIHNlbGYuaGFzamFiczoKICAgICAgICAgICAgICAgICBpbnN0c1tpXSA9IG9wbmFtZSwgYmVnaW5baW5zdFsxXV0KICAgICAgICAgc2VsZi5zdGFnZSA9IEZMQVQKIAotICAgIGhhc2pyZWwgPSBtaXNjLlNldCgpCisgICAgaGFzanJlbCA9IHNldCgpCiAgICAgZm9yIGkgaW4gZGlzLmhhc2pyZWw6CiAgICAgICAgIGhhc2pyZWwuYWRkKGRpcy5vcG5hbWVbaV0pCi0gICAgaGFzamFicyA9IG1pc2MuU2V0KCkKKyAgICBoYXNqYWJzID0gc2V0KCkKICAgICBmb3IgaSBpbiBkaXMuaGFzamFiczoKICAgICAgICAgaGFzamFicy5hZGQoZGlzLm9wbmFtZVtpXSkKIApAQCAtNzQ0LDcgKzY4NSw5IEBACiAgICAgZWZmZWN0ID0gewogICAgICAgICAnUE9QX1RPUCc6IC0xLAogICAgICAgICAnRFVQX1RPUCc6IDEsCi0gICAgICAgICdMSVNUX0FQUEVORCc6IC0yLAorICAgICAgICAnTElTVF9BUFBFTkQnOiAtMSwKKyAgICAgICAgJ1NFVF9BREQnOiAtMSwKKyAgICAgICAgJ01BUF9BREQnOiAtMiwKICAgICAgICAgJ1NMSUNFKzEnOiAtMSwKICAgICAgICAgJ1NMSUNFKzInOiAtMSwKICAgICAgICAgJ1NMSUNFKzMnOiAtMiwKQEAgLTc5Myw2ICs3MzYsOCBAQAogICAgICAgICByZXR1cm4gLWNvdW50KzEKICAgICBkZWYgQlVJTERfTElTVChzZWxmLCBjb3VudCk6CiAgICAgICAgIHJldHVybiAtY291bnQrMQorICAgIGRlZiBCVUlMRF9TRVQoc2VsZiwgY291bnQpOgorICAgICAgICByZXR1cm4gLWNvdW50KzEKICAgICBkZWYgQ0FMTF9GVU5DVElPTihzZWxmLCBhcmdjKToKICAgICAgICAgaGksIGxvID0gZGl2bW9kKGFyZ2MsIDI1NikKICAgICAgICAgcmV0dXJuIC0obG8gKyBoaSAqIDIpCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZXIvcHljb2RlZ2VuLnB5IGIvTGliL2NvbXBpbGVyL3B5Y29kZWdlbi5weQppbmRleCAxN2E4ZjRhLi40ZjJlY2YyIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvcHljb2RlZ2VuLnB5CisrKyBiL0xpYi9jb21waWxlci9weWNvZGVnZW4ucHkKQEAgLTcsNyArNyw4IEBACiAKIGZyb20gY29tcGlsZXIgaW1wb3J0IGFzdCwgcGFyc2UsIHdhbGssIHN5bnRheAogZnJvbSBjb21waWxlciBpbXBvcnQgcHlhc3NlbSwgbWlzYywgZnV0dXJlLCBzeW1ib2xzCi1mcm9tIGNvbXBpbGVyLmNvbnN0cyBpbXBvcnQgU0NfTE9DQUwsIFNDX0dMT0JBTCwgU0NfRlJFRSwgU0NfQ0VMTAorZnJvbSBjb21waWxlci5jb25zdHMgaW1wb3J0IFNDX0xPQ0FMLCBTQ19HTE9CQUxfSU1QTElDSVQsIFNDX0dMT0JBTF9FWFBMSUNULCBcCisgICAgIFNDX0ZSRUUsIFNDX0NFTEwKIGZyb20gY29tcGlsZXIuY29uc3RzIGltcG9ydCAoQ09fVkFSQVJHUywgQ09fVkFSS0VZV09SRFMsIENPX05FV0xPQ0FMUywKICAgICAgQ09fTkVTVEVELCBDT19HRU5FUkFUT1IsIENPX0ZVVFVSRV9ESVZJU0lPTiwKICAgICAgQ09fRlVUVVJFX0FCU0lNUE9SVCwgQ09fRlVUVVJFX1dJVEhfU1RBVEVNRU5ULCBDT19GVVRVUkVfUFJJTlRfRlVOQ1RJT04pCkBAIC0yODIsNyArMjgzLDkgQEAKICAgICAgICAgICAgICAgICBzZWxmLmVtaXQocHJlZml4ICsgJ19OQU1FJywgbmFtZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KHByZWZpeCArICdfRkFTVCcsIG5hbWUpCi0gICAgICAgIGVsaWYgc2NvcGUgPT0gU0NfR0xPQkFMOgorICAgICAgICBlbGlmIHNjb3BlID09IFNDX0dMT0JBTF9FWFBMSUNUOgorICAgICAgICAgICAgc2VsZi5lbWl0KHByZWZpeCArICdfR0xPQkFMJywgbmFtZSkKKyAgICAgICAgZWxpZiBzY29wZSA9PSBTQ19HTE9CQUxfSU1QTElDSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5vcHRpbWl6ZWQ6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KHByZWZpeCArICdfTkFNRScsIG5hbWUpCiAgICAgICAgICAgICBlbHNlOgpAQCAtNDE4LDEzICs0MjEsMTEgQEAKICAgICAgICAgICAgIHNlbGYuc2V0X2xpbmVubyh0ZXN0KQogICAgICAgICAgICAgc2VsZi52aXNpdCh0ZXN0KQogICAgICAgICAgICAgbmV4dFRlc3QgPSBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIG5leHRUZXN0KQorICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIG5leHRUZXN0KQogICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgICAgIHNlbGYudmlzaXQoc3VpdGUpCiAgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfRk9SV0FSRCcsIGVuZCkKICAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhuZXh0VGVzdCkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAgICAgICAgIGlmIG5vZGUuZWxzZV86CiAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUuZWxzZV8pCiAgICAgICAgIHNlbGYubmV4dEJsb2NrKGVuZCkKQEAgLTQ0MywxNSArNDQ0LDEzIEBACiAKICAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUsIGZvcmNlPVRydWUpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQotICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfSUZfRkFMU0UnLCBlbHNlXyBvciBhZnRlcikKKyAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIGVsc2VfIG9yIGFmdGVyKQogCiAgICAgICAgIHNlbGYubmV4dEJsb2NrKCkKLSAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgc2VsZi52aXNpdChub2RlLmJvZHkpCiAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9BQlNPTFVURScsIGxvb3ApCiAKICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGVsc2VfKSAjIG9yIGp1c3QgdGhlIFBPUHMgaWYgbm90IGVsc2UgY2xhdXNlCi0gICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAgICAgICAgIHNlbGYuZW1pdCgnUE9QX0JMT0NLJykKICAgICAgICAgc2VsZi5zZXR1cHMucG9wKCkKICAgICAgICAgaWYgbm9kZS5lbHNlXzoKQEAgLTUyMiwyNiArNTIxLDIzIEBACiAgICAgICAgICAgICBzZWxmLnZpc2l0KGNoaWxkKQogICAgICAgICAgICAgc2VsZi5lbWl0KGp1bXAsIGVuZCkKICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKCkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS5ub2Rlc1stMV0pCiAgICAgICAgIHNlbGYubmV4dEJsb2NrKGVuZCkKIAogICAgIGRlZiB2aXNpdEFuZChzZWxmLCBub2RlKToKLSAgICAgICAgc2VsZi52aXNpdFRlc3Qobm9kZSwgJ0pVTVBfSUZfRkFMU0UnKQorICAgICAgICBzZWxmLnZpc2l0VGVzdChub2RlLCAnSlVNUF9JRl9GQUxTRV9PUl9QT1AnKQogCiAgICAgZGVmIHZpc2l0T3Ioc2VsZiwgbm9kZSk6Ci0gICAgICAgIHNlbGYudmlzaXRUZXN0KG5vZGUsICdKVU1QX0lGX1RSVUUnKQorICAgICAgICBzZWxmLnZpc2l0VGVzdChub2RlLCAnSlVNUF9JRl9UUlVFX09SX1BPUCcpCiAKICAgICBkZWYgdmlzaXRJZkV4cChzZWxmLCBub2RlKToKICAgICAgICAgZW5kYmxvY2sgPSBzZWxmLm5ld0Jsb2NrKCkKICAgICAgICAgZWxzZWJsb2NrID0gc2VsZi5uZXdCbG9jaygpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQotICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfSUZfRkFMU0UnLCBlbHNlYmxvY2spCi0gICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCisgICAgICAgIHNlbGYuZW1pdCgnUE9QX0pVTVBfSUZfRkFMU0UnLCBlbHNlYmxvY2spCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS50aGVuKQogICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfRk9SV0FSRCcsIGVuZGJsb2NrKQogICAgICAgICBzZWxmLm5leHRCbG9jayhlbHNlYmxvY2spCi0gICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS5lbHNlXykKICAgICAgICAgc2VsZi5uZXh0QmxvY2soZW5kYmxvY2spCiAKQEAgLTU1Myw5ICs1NDksOCBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCdEVVBfVE9QJykKICAgICAgICAgICAgIHNlbGYuZW1pdCgnUk9UX1RIUkVFJykKICAgICAgICAgICAgIHNlbGYuZW1pdCgnQ09NUEFSRV9PUCcsIG9wKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0lGX0ZBTFNFJywgY2xlYW51cCkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRV9PUl9QT1AnLCBjbGVhbnVwKQogICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgIyBub3cgZG8gdGhlIGxhc3QgY29tcGFyaXNvbgogICAgICAgICBpZiBub2RlLm9wczoKICAgICAgICAgICAgIG9wLCBjb2RlID0gbm9kZS5vcHNbLTFdCkBAIC01NzAsMTYgKzU2NSwxMCBAQAogICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soZW5kKQogCiAgICAgIyBsaXN0IGNvbXByZWhlbnNpb25zCi0gICAgX19saXN0X2NvdW50ID0gMAotCiAgICAgZGVmIHZpc2l0TGlzdENvbXAoc2VsZiwgbm9kZSk6CiAgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlKQogICAgICAgICAjIHNldHVwIGxpc3QKLSAgICAgICAgdG1wbmFtZSA9ICIkbGlzdCVkIiAlIHNlbGYuX19saXN0X2NvdW50Ci0gICAgICAgIHNlbGYuX19saXN0X2NvdW50ID0gc2VsZi5fX2xpc3RfY291bnQgKyAxCiAgICAgICAgIHNlbGYuZW1pdCgnQlVJTERfTElTVCcsIDApCi0gICAgICAgIHNlbGYuZW1pdCgnRFVQX1RPUCcpCi0gICAgICAgIHNlbGYuX2ltcGxpY2l0TmFtZU9wKCdTVE9SRScsIHRtcG5hbWUpCiAKICAgICAgICAgc3RhY2sgPSBbXQogICAgICAgICBmb3IgaSwgZm9yXyBpbiB6aXAocmFuZ2UobGVuKG5vZGUucXVhbHMpKSwgbm9kZS5xdWFscyk6CkBAIC01OTEsMjIgKzU4MCw2MyBAQAogICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoaWZfLCBjb250KQogICAgICAgICAgICAgc3RhY2suaW5zZXJ0KDAsIChzdGFydCwgY29udCwgYW5jaG9yKSkKIAotICAgICAgICBzZWxmLl9pbXBsaWNpdE5hbWVPcCgnTE9BRCcsIHRtcG5hbWUpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS5leHByKQotICAgICAgICBzZWxmLmVtaXQoJ0xJU1RfQVBQRU5EJykKKyAgICAgICAgc2VsZi5lbWl0KCdMSVNUX0FQUEVORCcsIGxlbihub2RlLnF1YWxzKSArIDEpCiAKICAgICAgICAgZm9yIHN0YXJ0LCBjb250LCBhbmNob3IgaW4gc3RhY2s6CiAgICAgICAgICAgICBpZiBjb250OgotICAgICAgICAgICAgICAgIHNraXBfb25lID0gc2VsZi5uZXdCbG9jaygpCi0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0ZPUldBUkQnLCBza2lwX29uZSkKLSAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0QmxvY2soY29udCkKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQotICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKHNraXBfb25lKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKGNvbnQpCiAgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfQUJTT0xVVEUnLCBzdGFydCkKICAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhhbmNob3IpCi0gICAgICAgIHNlbGYuX2ltcGxpY2l0TmFtZU9wKCdERUxFVEUnLCB0bXBuYW1lKQogCi0gICAgICAgIHNlbGYuX19saXN0X2NvdW50ID0gc2VsZi5fX2xpc3RfY291bnQgLSAxCisgICAgZGVmIHZpc2l0U2V0Q29tcChzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUpCisgICAgICAgICMgc2V0dXAgbGlzdAorICAgICAgICBzZWxmLmVtaXQoJ0JVSUxEX1NFVCcsIDApCisKKyAgICAgICAgc3RhY2sgPSBbXQorICAgICAgICBmb3IgaSwgZm9yXyBpbiB6aXAocmFuZ2UobGVuKG5vZGUucXVhbHMpKSwgbm9kZS5xdWFscyk6CisgICAgICAgICAgICBzdGFydCwgYW5jaG9yID0gc2VsZi52aXNpdChmb3JfKQorICAgICAgICAgICAgY29udCA9IE5vbmUKKyAgICAgICAgICAgIGZvciBpZl8gaW4gZm9yXy5pZnM6CisgICAgICAgICAgICAgICAgaWYgY29udCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250ID0gc2VsZi5uZXdCbG9jaygpCisgICAgICAgICAgICAgICAgc2VsZi52aXNpdChpZl8sIGNvbnQpCisgICAgICAgICAgICBzdGFjay5pbnNlcnQoMCwgKHN0YXJ0LCBjb250LCBhbmNob3IpKQorCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5leHByKQorICAgICAgICBzZWxmLmVtaXQoJ1NFVF9BREQnLCBsZW4obm9kZS5xdWFscykgKyAxKQorCisgICAgICAgIGZvciBzdGFydCwgY29udCwgYW5jaG9yIGluIHN0YWNrOgorICAgICAgICAgICAgaWYgY29udDoKKyAgICAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhjb250KQorICAgICAgICAgICAgc2VsZi5lbWl0KCdKVU1QX0FCU09MVVRFJywgc3RhcnQpCisgICAgICAgICAgICBzZWxmLnN0YXJ0QmxvY2soYW5jaG9yKQorCisgICAgZGVmIHZpc2l0RGljdENvbXAoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlKQorICAgICAgICAjIHNldHVwIGxpc3QKKyAgICAgICAgc2VsZi5lbWl0KCdCVUlMRF9NQVAnLCAwKQorCisgICAgICAgIHN0YWNrID0gW10KKyAgICAgICAgZm9yIGksIGZvcl8gaW4gemlwKHJhbmdlKGxlbihub2RlLnF1YWxzKSksIG5vZGUucXVhbHMpOgorICAgICAgICAgICAgc3RhcnQsIGFuY2hvciA9IHNlbGYudmlzaXQoZm9yXykKKyAgICAgICAgICAgIGNvbnQgPSBOb25lCisgICAgICAgICAgICBmb3IgaWZfIGluIGZvcl8uaWZzOgorICAgICAgICAgICAgICAgIGlmIGNvbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udCA9IHNlbGYubmV3QmxvY2soKQorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoaWZfLCBjb250KQorICAgICAgICAgICAgc3RhY2suaW5zZXJ0KDAsIChzdGFydCwgY29udCwgYW5jaG9yKSkKKworICAgICAgICBzZWxmLnZpc2l0KG5vZGUudmFsdWUpCisgICAgICAgIHNlbGYudmlzaXQobm9kZS5rZXkpCisgICAgICAgIHNlbGYuZW1pdCgnTUFQX0FERCcsIGxlbihub2RlLnF1YWxzKSArIDEpCisKKyAgICAgICAgZm9yIHN0YXJ0LCBjb250LCBhbmNob3IgaW4gc3RhY2s6CisgICAgICAgICAgICBpZiBjb250OgorICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKGNvbnQpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfQUJTT0xVVEUnLCBzdGFydCkKKyAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhhbmNob3IpCiAKICAgICBkZWYgdmlzaXRMaXN0Q29tcEZvcihzZWxmLCBub2RlKToKICAgICAgICAgc3RhcnQgPSBzZWxmLm5ld0Jsb2NrKCkKQEAgLTYyNCw5ICs2NTQsOCBAQAogICAgIGRlZiB2aXNpdExpc3RDb21wSWYoc2VsZiwgbm9kZSwgYnJhbmNoKToKICAgICAgICAgc2VsZi5zZXRfbGluZW5vKG5vZGUsIGZvcmNlPVRydWUpCiAgICAgICAgIHNlbGYudmlzaXQobm9kZS50ZXN0KQotICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfSUZfRkFMU0UnLCBicmFuY2gpCisgICAgICAgIHNlbGYuZW1pdCgnUE9QX0pVTVBfSUZfRkFMU0UnLCBicmFuY2gpCiAgICAgICAgIHNlbGYubmV3QmxvY2soKQotICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogCiAgICAgZGVmIF9tYWtlQ2xvc3VyZShzZWxmLCBnZW4sIGFyZ3MpOgogICAgICAgICBmcmVlcyA9IGdlbi5zY29wZS5nZXRfZnJlZV92YXJzKCkKQEAgLTY3MiwxNiArNzAxLDEyIEBACiAKICAgICAgICAgZm9yIHN0YXJ0LCBjb250LCBhbmNob3IsIGVuZCBpbiBzdGFjazoKICAgICAgICAgICAgIGlmIGNvbnQ6Ci0gICAgICAgICAgICAgICAgc2tpcF9vbmUgPSBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfRk9SV0FSRCcsIHNraXBfb25lKQotICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRCbG9jayhjb250KQotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCi0gICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soc2tpcF9vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soY29udCkKICAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9BQlNPTFVURScsIHN0YXJ0KQogICAgICAgICAgICAgc2VsZi5zdGFydEJsb2NrKGFuY2hvcikKICAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX0JMT0NLJykKICAgICAgICAgICAgIHNlbGYuc2V0dXBzLnBvcCgpCi0gICAgICAgICAgICBzZWxmLnN0YXJ0QmxvY2soZW5kKQorICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soZW5kKQogCiAgICAgICAgIHNlbGYuZW1pdCgnTE9BRF9DT05TVCcsIE5vbmUpCiAKQEAgLTcwOSw5ICs3MzQsOCBAQAogICAgIGRlZiB2aXNpdEdlbkV4cHJJZihzZWxmLCBub2RlLCBicmFuY2gpOgogICAgICAgICBzZWxmLnNldF9saW5lbm8obm9kZSwgZm9yY2U9VHJ1ZSkKICAgICAgICAgc2VsZi52aXNpdChub2RlLnRlc3QpCi0gICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9GQUxTRScsIGJyYW5jaCkKKyAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9GQUxTRScsIGJyYW5jaCkKICAgICAgICAgc2VsZi5uZXdCbG9jaygpCi0gICAgICAgIHNlbGYuZW1pdCgnUE9QX1RPUCcpCiAKICAgICAjIGV4Y2VwdGlvbiByZWxhdGVkCiAKQEAgLTcyNiw5ICs3NTAsOCBAQAogICAgICAgICAgICAgIyBpcyBhIHNvcnQgb2YgcmVuYW1pbmcgb3AuCiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jaygpCiAgICAgICAgICAgICBzZWxmLnZpc2l0KG5vZGUudGVzdCkKLSAgICAgICAgICAgIHNlbGYuZW1pdCgnSlVNUF9JRl9UUlVFJywgZW5kKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfSlVNUF9JRl9UUlVFJywgZW5kKQogICAgICAgICAgICAgc2VsZi5uZXh0QmxvY2soKQotICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgICAgIHNlbGYuZW1pdCgnTE9BRF9HTE9CQUwnLCAnQXNzZXJ0aW9uRXJyb3InKQogICAgICAgICAgICAgaWYgbm9kZS5mYWlsOgogICAgICAgICAgICAgICAgIHNlbGYudmlzaXQobm9kZS5mYWlsKQpAQCAtNzM2LDcgKzc1OSw2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnUkFJU0VfVkFSQVJHUycsIDEpCiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhlbmQpCi0gICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogCiAgICAgZGVmIHZpc2l0UmFpc2Uoc2VsZiwgbm9kZSk6CiAgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlKQpAQCAtNzc5LDkgKzgwMSw4IEBACiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdChleHByKQogICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnQ09NUEFSRV9PUCcsICdleGNlcHRpb24gbWF0Y2gnKQogICAgICAgICAgICAgICAgIG5leHQgPSBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ0pVTVBfSUZfRkFMU0UnLCBuZXh0KQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnUE9QX0pVTVBfSUZfRkFMU0UnLCBuZXh0KQogICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKCkKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ1BPUF9UT1AnKQogICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgICAgIGlmIHRhcmdldDoKICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KHRhcmdldCkKQEAgLTc5NCw4ICs4MTUsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKG5leHQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYubmV4dEJsb2NrKCkKLSAgICAgICAgICAgIGlmIGV4cHI6ICMgWFhYCi0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCdQT1BfVE9QJykKICAgICAgICAgc2VsZi5lbWl0KCdFTkRfRklOQUxMWScpCiAgICAgICAgIGlmIG5vZGUuZWxzZV86CiAgICAgICAgICAgICBzZWxmLm5leHRCbG9jayhsRWxzZSkKQEAgLTgyNCw4ICs4NDMsOCBAQAogICAgIGRlZiB2aXNpdFdpdGgoc2VsZiwgbm9kZSk6CiAgICAgICAgIGJvZHkgPSBzZWxmLm5ld0Jsb2NrKCkKICAgICAgICAgZmluYWwgPSBzZWxmLm5ld0Jsb2NrKCkKLSAgICAgICAgdmFsdWV2YXIgPSAiJHZhbHVlJWQiICUgc2VsZi5fX3dpdGhfY291bnQKICAgICAgICAgc2VsZi5fX3dpdGhfY291bnQgKz0gMQorICAgICAgICB2YWx1ZXZhciA9ICJfWyVkXSIgJSBzZWxmLl9fd2l0aF9jb3VudAogICAgICAgICBzZWxmLnNldF9saW5lbm8obm9kZSkKICAgICAgICAgc2VsZi52aXNpdChub2RlLmV4cHIpCiAgICAgICAgIHNlbGYuZW1pdCgnRFVQX1RPUCcpCkBAIC0xMjQ1LDYgKzEyNjQsMTIgQEAKICAgICAgICAgICAgIHNlbGYudmlzaXQoZWx0KQogICAgICAgICBzZWxmLmVtaXQoJ0JVSUxEX0xJU1QnLCBsZW4obm9kZS5ub2RlcykpCiAKKyAgICBkZWYgdmlzaXRTZXQoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYuc2V0X2xpbmVubyhub2RlKQorICAgICAgICBmb3IgZWx0IGluIG5vZGUubm9kZXM6CisgICAgICAgICAgICBzZWxmLnZpc2l0KGVsdCkKKyAgICAgICAgc2VsZi5lbWl0KCdCVUlMRF9TRVQnLCBsZW4obm9kZS5ub2RlcykpCisKICAgICBkZWYgdmlzaXRTbGljZW9iaihzZWxmLCBub2RlKToKICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUubm9kZXM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0KGNoaWxkKQpkaWZmIC0tZ2l0IGEvTGliL2NvbXBpbGVyL3N5bWJvbHMucHkgYi9MaWIvY29tcGlsZXIvc3ltYm9scy5weQppbmRleCAwZTY2MGFlLi4wYmJkYzcxIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvc3ltYm9scy5weQorKysgYi9MaWIvY29tcGlsZXIvc3ltYm9scy5weQpAQCAtMSw3ICsxLDggQEAKICIiIk1vZHVsZSBzeW1ib2wtdGFibGUgZ2VuZXJhdG9yIiIiCiAKIGZyb20gY29tcGlsZXIgaW1wb3J0IGFzdAotZnJvbSBjb21waWxlci5jb25zdHMgaW1wb3J0IFNDX0xPQ0FMLCBTQ19HTE9CQUwsIFNDX0ZSRUUsIFNDX0NFTEwsIFNDX1VOS05PV04KK2Zyb20gY29tcGlsZXIuY29uc3RzIGltcG9ydCBTQ19MT0NBTCwgU0NfR0xPQkFMX0lNUExJQ0lULCBTQ19HTE9CQUxfRVhQTElDVCwgXAorICAgIFNDX0ZSRUUsIFNDX0NFTEwsIFNDX1VOS05PV04KIGZyb20gY29tcGlsZXIubWlzYyBpbXBvcnQgbWFuZ2xlCiBpbXBvcnQgdHlwZXMKIApAQCAtODksNyArOTAsNyBAQAogICAgICAgICBUaGUgc2NvcGUgb2YgYSBuYW1lIGNvdWxkIGJlIExPQ0FMLCBHTE9CQUwsIEZSRUUsIG9yIENFTEwuCiAgICAgICAgICIiIgogICAgICAgICBpZiBuYW1lIGluIHNlbGYuZ2xvYmFsczoKLSAgICAgICAgICAgIHJldHVybiBTQ19HTE9CQUwKKyAgICAgICAgICAgIHJldHVybiBTQ19HTE9CQUxfRVhQTElDVAogICAgICAgICBpZiBuYW1lIGluIHNlbGYuY2VsbHM6CiAgICAgICAgICAgICByZXR1cm4gU0NfQ0VMTAogICAgICAgICBpZiBuYW1lIGluIHNlbGYuZGVmczoKQEAgLTk5LDcgKzEwMCw3IEBACiAgICAgICAgIGlmIHNlbGYubmVzdGVkOgogICAgICAgICAgICAgcmV0dXJuIFNDX1VOS05PV04KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBTQ19HTE9CQUwKKyAgICAgICAgICAgIHJldHVybiBTQ19HTE9CQUxfSU1QTElDSVQKIAogICAgIGRlZiBnZXRfZnJlZV92YXJzKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5uZXN0ZWQ6CkBAIC0xNTIsNyArMTUzLDcgQEAKICAgICAgICAgICAgICAgICBpZiBzYyA9PSBTQ19VTktOT1dOIG9yIHNjID09IFNDX0ZSRUUgXAogICAgICAgICAgICAgICAgICAgIG9yIGlzaW5zdGFuY2Uoc2VsZiwgQ2xhc3NTY29wZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnJlZXNbbmFtZV0gPSAxCi0gICAgICAgICAgICAgICAgZWxpZiBzYyA9PSBTQ19HTE9CQUw6CisgICAgICAgICAgICAgICAgZWxpZiBzYyA9PSBTQ19HTE9CQUxfSU1QTElDSVQ6CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2dsb2JhbHMuYXBwZW5kKG5hbWUpCiAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYsIEZ1bmN0aW9uU2NvcGUpIGFuZCBzYyA9PSBTQ19MT0NBTDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZWxsc1tuYW1lXSA9IDEKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlci90cmFuc2Zvcm1lci5weSBiL0xpYi9jb21waWxlci90cmFuc2Zvcm1lci5weQppbmRleCBmNWZlNTgyLi5kNGY0NjEzIDEwMDY0NAotLS0gYS9MaWIvY29tcGlsZXIvdHJhbnNmb3JtZXIucHkKKysrIGIvTGliL2NvbXBpbGVyL3RyYW5zZm9ybWVyLnB5CkBAIC01ODEsOCArNTgxLDEwIEBACiAgICAgdGVzdGxpc3QxID0gdGVzdGxpc3QKICAgICBleHBybGlzdCA9IHRlc3RsaXN0CiAKLSAgICBkZWYgdGVzdGxpc3RfZ2V4cChzZWxmLCBub2RlbGlzdCk6Ci0gICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMiBhbmQgbm9kZWxpc3RbMV1bMF0gPT0gc3ltYm9sLmdlbl9mb3I6CisgICAgZGVmIHRlc3RsaXN0X2NvbXAoc2VsZiwgbm9kZWxpc3QpOgorICAgICAgICAjIHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKKyAgICAgICAgYXNzZXJ0IG5vZGVsaXN0WzBdWzBdID09IHN5bWJvbC50ZXN0CisgICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMiBhbmQgbm9kZWxpc3RbMV1bMF0gPT0gc3ltYm9sLmNvbXBfZm9yOgogICAgICAgICAgICAgdGVzdCA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMF0pCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fZ2VuZXJhdG9yX2V4cHJlc3Npb24odGVzdCwgbm9kZWxpc3RbMV0pCiAgICAgICAgIHJldHVybiBzZWxmLnRlc3RsaXN0KG5vZGVsaXN0KQpAQCAtNzQ5LDcgKzc1MSw3IEBACiAgICAgZGVmIGF0b21fbGJyYWNlKHNlbGYsIG5vZGVsaXN0KToKICAgICAgICAgaWYgbm9kZWxpc3RbMV1bMF0gPT0gdG9rZW4uUkJSQUNFOgogICAgICAgICAgICAgcmV0dXJuIERpY3QoKCksIGxpbmVubz1ub2RlbGlzdFswXVsyXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuY29tX2RpY3RtYWtlcihub2RlbGlzdFsxXSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tX2RpY3RvcnNldG1ha2VyKG5vZGVsaXN0WzFdKQogCiAgICAgZGVmIGF0b21fYmFja3F1b3RlKHNlbGYsIG5vZGVsaXN0KToKICAgICAgICAgcmV0dXJuIEJhY2txdW90ZShzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzFdKSkKQEAgLTk2NSwxOCArOTY3LDIyIEBACiAgICAgICAgICAgICByZXR1cm4gdHJ5X2V4Y2VwdAogCiAgICAgZGVmIGNvbV93aXRoKHNlbGYsIG5vZGVsaXN0KToKLSAgICAgICAgIyB3aXRoX3N0bXQ6ICd3aXRoJyBleHByIFt3aXRoX3Zhcl0gJzonIHN1aXRlCi0gICAgICAgIGV4cHIgPSBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzFdKQorICAgICAgICAjIHdpdGhfc3RtdDogJ3dpdGgnIHdpdGhfaXRlbSAoJywnIHdpdGhfaXRlbSkqICc6JyBzdWl0ZQogICAgICAgICBib2R5ID0gc2VsZi5jb21fbm9kZShub2RlbGlzdFstMV0pCi0gICAgICAgIGlmIG5vZGVsaXN0WzJdWzBdID09IHRva2VuLkNPTE9OOgotICAgICAgICAgICAgdmFyID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdmFyID0gc2VsZi5jb21fYXNzaWduKG5vZGVsaXN0WzJdWzJdLCBPUF9BU1NJR04pCi0gICAgICAgIHJldHVybiBXaXRoKGV4cHIsIHZhciwgYm9keSwgbGluZW5vPW5vZGVsaXN0WzBdWzJdKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZWxpc3QpIC0gMywgMCwgLTIpOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5jb21fd2l0aF9pdGVtKG5vZGVsaXN0W2ldLCBib2R5LCBub2RlbGlzdFswXVsyXSkKKyAgICAgICAgICAgIGlmIGkgPT0gMToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0CisgICAgICAgICAgICBib2R5ID0gcmV0CiAKLSAgICBkZWYgY29tX3dpdGhfdmFyKHNlbGYsIG5vZGVsaXN0KToKLSAgICAgICAgIyB3aXRoX3ZhcjogJ2FzJyBleHByCi0gICAgICAgIHJldHVybiBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzFdKQorICAgIGRlZiBjb21fd2l0aF9pdGVtKHNlbGYsIG5vZGVsaXN0LCBib2R5LCBsaW5lbm8pOgorICAgICAgICAjIHdpdGhfaXRlbTogdGVzdCBbJ2FzJyBleHByXQorICAgICAgICBpZiBsZW4obm9kZWxpc3QpID09IDQ6CisgICAgICAgICAgICB2YXIgPSBzZWxmLmNvbV9hc3NpZ24obm9kZWxpc3RbM10sIE9QX0FTU0lHTikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhciA9IE5vbmUKKyAgICAgICAgZXhwciA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMV0pCisgICAgICAgIHJldHVybiBXaXRoKGV4cHIsIHZhciwgYm9keSwgbGluZW5vPWxpbmVubykKIAogICAgIGRlZiBjb21fYXVnYXNzaWduX29wKHNlbGYsIG5vZGUpOgogICAgICAgICBhc3NlcnQgbm9kZVswXSA9PSBzeW1ib2wuYXVnYXNzaWduCkBAIC05OTcsNyArMTAwMyw3IEBACiAgICAgICAgICMgbG9vcCB0byBhdm9pZCB0cml2aWFsIHJlY3Vyc2lvbgogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdCA9IG5vZGVbMF0KLSAgICAgICAgICAgIGlmIHQgaW4gKHN5bWJvbC5leHBybGlzdCwgc3ltYm9sLnRlc3RsaXN0LCBzeW1ib2wudGVzdGxpc3Rfc2FmZSwgc3ltYm9sLnRlc3RsaXN0X2dleHApOgorICAgICAgICAgICAgaWYgdCBpbiAoc3ltYm9sLmV4cHJsaXN0LCBzeW1ib2wudGVzdGxpc3QsIHN5bWJvbC50ZXN0bGlzdF9zYWZlLCBzeW1ib2wudGVzdGxpc3RfY29tcCk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKG5vZGUpID4gMjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tX2Fzc2lnbl90dXBsZShub2RlLCBhc3NpZ25pbmcpCiAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVbMV0KQEAgLTEwOTUsMTExICsxMTAxLDE0MSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RtdHMuYXBwZW5kKHJlc3VsdCkKIAotICAgIGlmIGhhc2F0dHIoc3ltYm9sLCAnbGlzdF9mb3InKToKLSAgICAgICAgZGVmIGNvbV9saXN0X2NvbnN0cnVjdG9yKHNlbGYsIG5vZGVsaXN0KToKLSAgICAgICAgICAgICMgbGlzdG1ha2VyOiB0ZXN0ICggbGlzdF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCi0gICAgICAgICAgICB2YWx1ZXMgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG5vZGVsaXN0KSk6Ci0gICAgICAgICAgICAgICAgaWYgbm9kZWxpc3RbaV1bMF0gPT0gc3ltYm9sLmxpc3RfZm9yOgotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKG5vZGVsaXN0W2k6XSkgPT0gMQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21fbGlzdF9jb21wcmVoZW5zaW9uKHZhbHVlc1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlbGlzdFtpXSkKLSAgICAgICAgICAgICAgICBlbGlmIG5vZGVsaXN0W2ldWzBdID09IHRva2VuLkNPTU1BOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSkpCi0gICAgICAgICAgICByZXR1cm4gTGlzdCh2YWx1ZXMsIGxpbmVubz12YWx1ZXNbMF0ubGluZW5vKQorICAgIGRlZiBjb21fbGlzdF9jb25zdHJ1Y3RvcihzZWxmLCBub2RlbGlzdCk6CisgICAgICAgICMgbGlzdG1ha2VyOiB0ZXN0ICggbGlzdF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCisgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihub2RlbGlzdCkpOgorICAgICAgICAgICAgaWYgbm9kZWxpc3RbaV1bMF0gPT0gc3ltYm9sLmxpc3RfZm9yOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obm9kZWxpc3RbaTpdKSA9PSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tX2xpc3RfY29tcHJlaGVuc2lvbih2YWx1ZXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlbGlzdFtpXSkKKyAgICAgICAgICAgIGVsaWYgbm9kZWxpc3RbaV1bMF0gPT0gdG9rZW4uQ09NTUE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSkpCisgICAgICAgIHJldHVybiBMaXN0KHZhbHVlcywgbGluZW5vPXZhbHVlc1swXS5saW5lbm8pCiAKLSAgICAgICAgZGVmIGNvbV9saXN0X2NvbXByZWhlbnNpb24oc2VsZiwgZXhwciwgbm9kZSk6Ci0gICAgICAgICAgICAjIGxpc3RfaXRlcjogbGlzdF9mb3IgfCBsaXN0X2lmCi0gICAgICAgICAgICAjIGxpc3RfZm9yOiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3RsaXN0IFtsaXN0X2l0ZXJdCi0gICAgICAgICAgICAjIGxpc3RfaWY6ICdpZicgdGVzdCBbbGlzdF9pdGVyXQorICAgIGRlZiBjb21fbGlzdF9jb21wcmVoZW5zaW9uKHNlbGYsIGV4cHIsIG5vZGUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb21fY29tcHJlaGVuc2lvbihleHByLCBOb25lLCBub2RlLCAnbGlzdCcpCiAKLSAgICAgICAgICAgICMgWFhYIHNob3VsZCByYWlzZSBTeW50YXhFcnJvciBmb3IgYXNzaWdubWVudAorICAgIGRlZiBjb21fY29tcHJlaGVuc2lvbihzZWxmLCBleHByMSwgZXhwcjIsIG5vZGUsIHR5cGUpOgorICAgICAgICAjIGxpc3RfaXRlcjogbGlzdF9mb3IgfCBsaXN0X2lmCisgICAgICAgICMgbGlzdF9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdGxpc3QgW2xpc3RfaXRlcl0KKyAgICAgICAgIyBsaXN0X2lmOiAnaWYnIHRlc3QgW2xpc3RfaXRlcl0KIAotICAgICAgICAgICAgbGluZW5vID0gbm9kZVsxXVsyXQotICAgICAgICAgICAgZm9ycyA9IFtdCi0gICAgICAgICAgICB3aGlsZSBub2RlOgotICAgICAgICAgICAgICAgIHQgPSBub2RlWzFdWzFdCi0gICAgICAgICAgICAgICAgaWYgdCA9PSAnZm9yJzoKLSAgICAgICAgICAgICAgICAgICAgYXNzaWduTm9kZSA9IHNlbGYuY29tX2Fzc2lnbihub2RlWzJdLCBPUF9BU1NJR04pCi0gICAgICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gc2VsZi5jb21fbm9kZShub2RlWzRdKQotICAgICAgICAgICAgICAgICAgICBuZXdmb3IgPSBMaXN0Q29tcEZvcihhc3NpZ25Ob2RlLCBsaXN0Tm9kZSwgW10pCi0gICAgICAgICAgICAgICAgICAgIG5ld2Zvci5saW5lbm8gPSBub2RlWzFdWzJdCi0gICAgICAgICAgICAgICAgICAgIGZvcnMuYXBwZW5kKG5ld2ZvcikKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKG5vZGUpID09IDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tX2xpc3RfaXRlcihub2RlWzVdKQotICAgICAgICAgICAgICAgIGVsaWYgdCA9PSAnaWYnOgotICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5jb21fbm9kZShub2RlWzJdKQotICAgICAgICAgICAgICAgICAgICBuZXdpZiA9IExpc3RDb21wSWYodGVzdCwgbGluZW5vPW5vZGVbMV1bMl0pCi0gICAgICAgICAgICAgICAgICAgIG5ld2Zvci5pZnMuYXBwZW5kKG5ld2lmKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPT0gMzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fbGlzdF9pdGVyKG5vZGVbM10pCisgICAgICAgICMgWFhYIHNob3VsZCByYWlzZSBTeW50YXhFcnJvciBmb3IgYXNzaWdubWVudAorICAgICAgICAjIFhYWChhdmFzc2Fsb3R0aSkgU2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zIHNob3VsZCBoYXZlIGdlbmVyYXRvcgorICAgICAgICAjICAgICAgICAgICAgICAgICAgc2VtYW50aWNzLiBJbiBvdGhlciB3b3JkcywgdGhleSBzaG91bGRuJ3QgbGVhaworICAgICAgICAjICAgICAgICAgICAgICAgICAgdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGNvbXByZWhlbnNpb24ncyBzY29wZS4KKworICAgICAgICBsaW5lbm8gPSBub2RlWzFdWzJdCisgICAgICAgIGZvcnMgPSBbXQorICAgICAgICB3aGlsZSBub2RlOgorICAgICAgICAgICAgdCA9IG5vZGVbMV1bMV0KKyAgICAgICAgICAgIGlmIHQgPT0gJ2Zvcic6CisgICAgICAgICAgICAgICAgYXNzaWduTm9kZSA9IHNlbGYuY29tX2Fzc2lnbihub2RlWzJdLCBPUF9BU1NJR04pCisgICAgICAgICAgICAgICAgY29tcE5vZGUgPSBzZWxmLmNvbV9ub2RlKG5vZGVbNF0pCisgICAgICAgICAgICAgICAgbmV3Zm9yID0gTGlzdENvbXBGb3IoYXNzaWduTm9kZSwgY29tcE5vZGUsIFtdKQorICAgICAgICAgICAgICAgIG5ld2Zvci5saW5lbm8gPSBub2RlWzFdWzJdCisgICAgICAgICAgICAgICAgZm9ycy5hcHBlbmQobmV3Zm9yKQorICAgICAgICAgICAgICAgIGlmIGxlbihub2RlKSA9PSA1OgorICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsaWYgdHlwZSA9PSAnbGlzdCc6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzZWxmLmNvbV9saXN0X2l0ZXIobm9kZVs1XSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoInVuZXhwZWN0ZWQgbGlzdCBjb21wcmVoZW5zaW9uIGVsZW1lbnQ6ICVzICVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgbGluZW5vKSkKLSAgICAgICAgICAgIHJldHVybiBMaXN0Q29tcChleHByLCBmb3JzLCBsaW5lbm89bGluZW5vKQotCi0gICAgICAgIGRlZiBjb21fbGlzdF9pdGVyKHNlbGYsIG5vZGUpOgotICAgICAgICAgICAgYXNzZXJ0IG5vZGVbMF0gPT0gc3ltYm9sLmxpc3RfaXRlcgotICAgICAgICAgICAgcmV0dXJuIG5vZGVbMV0KLSAgICBlbHNlOgotICAgICAgICBkZWYgY29tX2xpc3RfY29uc3RydWN0b3Ioc2VsZiwgbm9kZWxpc3QpOgotICAgICAgICAgICAgdmFsdWVzID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihub2RlbGlzdCksIDIpOgotICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSkpCi0gICAgICAgICAgICByZXR1cm4gTGlzdCh2YWx1ZXMsIGxpbmVubz12YWx1ZXNbMF0ubGluZW5vKQotCi0gICAgaWYgaGFzYXR0cihzeW1ib2wsICdnZW5fZm9yJyk6Ci0gICAgICAgIGRlZiBjb21fZ2VuZXJhdG9yX2V4cHJlc3Npb24oc2VsZiwgZXhwciwgbm9kZSk6Ci0gICAgICAgICAgICAjIGdlbl9pdGVyOiBnZW5fZm9yIHwgZ2VuX2lmCi0gICAgICAgICAgICAjIGdlbl9mb3I6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdCBbZ2VuX2l0ZXJdCi0gICAgICAgICAgICAjIGdlbl9pZjogJ2lmJyB0ZXN0IFtnZW5faXRlcl0KLQotICAgICAgICAgICAgbGluZW5vID0gbm9kZVsxXVsyXQotICAgICAgICAgICAgZm9ycyA9IFtdCi0gICAgICAgICAgICB3aGlsZSBub2RlOgotICAgICAgICAgICAgICAgIHQgPSBub2RlWzFdWzFdCi0gICAgICAgICAgICAgICAgaWYgdCA9PSAnZm9yJzoKLSAgICAgICAgICAgICAgICAgICAgYXNzaWduTm9kZSA9IHNlbGYuY29tX2Fzc2lnbihub2RlWzJdLCBPUF9BU1NJR04pCi0gICAgICAgICAgICAgICAgICAgIGdlbk5vZGUgPSBzZWxmLmNvbV9ub2RlKG5vZGVbNF0pCi0gICAgICAgICAgICAgICAgICAgIG5ld2ZvciA9IEdlbkV4cHJGb3IoYXNzaWduTm9kZSwgZ2VuTm9kZSwgW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPW5vZGVbMV1bMl0pCi0gICAgICAgICAgICAgICAgICAgIGZvcnMuYXBwZW5kKG5ld2ZvcikKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihub2RlKSkgPT0gNToKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fZ2VuX2l0ZXIobm9kZVs1XSkKLSAgICAgICAgICAgICAgICBlbGlmIHQgPT0gJ2lmJzoKLSAgICAgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYuY29tX25vZGUobm9kZVsyXSkKLSAgICAgICAgICAgICAgICAgICAgbmV3aWYgPSBHZW5FeHBySWYodGVzdCwgbGluZW5vPW5vZGVbMV1bMl0pCi0gICAgICAgICAgICAgICAgICAgIG5ld2Zvci5pZnMuYXBwZW5kKG5ld2lmKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPT0gMzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fZ2VuX2l0ZXIobm9kZVszXSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tX2NvbXBfaXRlcihub2RlWzVdKQorICAgICAgICAgICAgZWxpZiB0ID09ICdpZic6CisgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYuY29tX25vZGUobm9kZVsyXSkKKyAgICAgICAgICAgICAgICBuZXdpZiA9IExpc3RDb21wSWYodGVzdCwgbGluZW5vPW5vZGVbMV1bMl0pCisgICAgICAgICAgICAgICAgbmV3Zm9yLmlmcy5hcHBlbmQobmV3aWYpCisgICAgICAgICAgICAgICAgaWYgbGVuKG5vZGUpID09IDM6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiB0eXBlID09ICdsaXN0JzoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tX2xpc3RfaXRlcihub2RlWzNdKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ1bmV4cGVjdGVkIGdlbmVyYXRvciBleHByZXNzaW9uIGVsZW1lbnQ6ICVzICVkIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChub2RlLCBsaW5lbm8pKQotICAgICAgICAgICAgZm9yc1swXS5pc19vdXRtb3N0ID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIEdlbkV4cHIoR2VuRXhwcklubmVyKGV4cHIsIGZvcnMpLCBsaW5lbm89bGluZW5vKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fY29tcF9pdGVyKG5vZGVbM10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgKCJ1bmV4cGVjdGVkIGNvbXByZWhlbnNpb24gZWxlbWVudDogJXMgJWQiCisgICAgICAgICAgICAgICAgICAgICAgICUgKG5vZGUsIGxpbmVubykpCisgICAgICAgIGlmIHR5cGUgPT0gJ2xpc3QnOgorICAgICAgICAgICAgcmV0dXJuIExpc3RDb21wKGV4cHIxLCBmb3JzLCBsaW5lbm89bGluZW5vKQorICAgICAgICBlbGlmIHR5cGUgPT0gJ3NldCc6CisgICAgICAgICAgICByZXR1cm4gU2V0Q29tcChleHByMSwgZm9ycywgbGluZW5vPWxpbmVubykKKyAgICAgICAgZWxpZiB0eXBlID09ICdkaWN0JzoKKyAgICAgICAgICAgIHJldHVybiBEaWN0Q29tcChleHByMSwgZXhwcjIsIGZvcnMsIGxpbmVubz1saW5lbm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGNvbXByZWhlbnNpb24gdHlwZTogIiArIHJlcHIodHlwZSkpCiAKLSAgICAgICAgZGVmIGNvbV9nZW5faXRlcihzZWxmLCBub2RlKToKLSAgICAgICAgICAgIGFzc2VydCBub2RlWzBdID09IHN5bWJvbC5nZW5faXRlcgotICAgICAgICAgICAgcmV0dXJuIG5vZGVbMV0KKyAgICBkZWYgY29tX2xpc3RfaXRlcihzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IG5vZGVbMF0gPT0gc3ltYm9sLmxpc3RfaXRlcgorICAgICAgICByZXR1cm4gbm9kZVsxXQogCi0gICAgZGVmIGNvbV9kaWN0bWFrZXIoc2VsZiwgbm9kZWxpc3QpOgotICAgICAgICAjIGRpY3RtYWtlcjogdGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHZhbHVlKSogWycsJ10KLSAgICAgICAgaXRlbXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4obm9kZWxpc3QpLCA0KToKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tX25vZGUobm9kZWxpc3RbaSsyXSkpKQotICAgICAgICByZXR1cm4gRGljdChpdGVtcywgbGluZW5vPWl0ZW1zWzBdWzBdLmxpbmVubykKKyAgICBkZWYgY29tX2NvbXBfaXRlcihzZWxmLCBub2RlKToKKyAgICAgICAgYXNzZXJ0IG5vZGVbMF0gPT0gc3ltYm9sLmNvbXBfaXRlcgorICAgICAgICByZXR1cm4gbm9kZVsxXQorCisgICAgZGVmIGNvbV9nZW5lcmF0b3JfZXhwcmVzc2lvbihzZWxmLCBleHByLCBub2RlKToKKyAgICAgICAgIyBjb21wX2l0ZXI6IGNvbXBfZm9yIHwgY29tcF9pZgorICAgICAgICAjIGNvbXBfZm9yOiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3QgW2NvbXBfaXRlcl0KKyAgICAgICAgIyBjb21wX2lmOiAnaWYnIHRlc3QgW2NvbXBfaXRlcl0KKworICAgICAgICBsaW5lbm8gPSBub2RlWzFdWzJdCisgICAgICAgIGZvcnMgPSBbXQorICAgICAgICB3aGlsZSBub2RlOgorICAgICAgICAgICAgdCA9IG5vZGVbMV1bMV0KKyAgICAgICAgICAgIGlmIHQgPT0gJ2Zvcic6CisgICAgICAgICAgICAgICAgYXNzaWduTm9kZSA9IHNlbGYuY29tX2Fzc2lnbihub2RlWzJdLCBPUF9BU1NJR04pCisgICAgICAgICAgICAgICAgZ2VuTm9kZSA9IHNlbGYuY29tX25vZGUobm9kZVs0XSkKKyAgICAgICAgICAgICAgICBuZXdmb3IgPSBHZW5FeHByRm9yKGFzc2lnbk5vZGUsIGdlbk5vZGUsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPW5vZGVbMV1bMl0pCisgICAgICAgICAgICAgICAgZm9ycy5hcHBlbmQobmV3Zm9yKQorICAgICAgICAgICAgICAgIGlmIChsZW4obm9kZSkpID09IDU6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHNlbGYuY29tX2NvbXBfaXRlcihub2RlWzVdKQorICAgICAgICAgICAgZWxpZiB0ID09ICdpZic6CisgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYuY29tX25vZGUobm9kZVsyXSkKKyAgICAgICAgICAgICAgICBuZXdpZiA9IEdlbkV4cHJJZih0ZXN0LCBsaW5lbm89bm9kZVsxXVsyXSkKKyAgICAgICAgICAgICAgICBuZXdmb3IuaWZzLmFwcGVuZChuZXdpZikKKyAgICAgICAgICAgICAgICBpZiBsZW4obm9kZSkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBub2RlID0gc2VsZi5jb21fY29tcF9pdGVyKG5vZGVbM10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoInVuZXhwZWN0ZWQgZ2VuZXJhdG9yIGV4cHJlc3Npb24gZWxlbWVudDogJXMgJWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgbGluZW5vKSkKKyAgICAgICAgZm9yc1swXS5pc19vdXRtb3N0ID0gVHJ1ZQorICAgICAgICByZXR1cm4gR2VuRXhwcihHZW5FeHBySW5uZXIoZXhwciwgZm9ycyksIGxpbmVubz1saW5lbm8pCisKKyAgICBkZWYgY29tX2RpY3RvcnNldG1ha2VyKHNlbGYsIG5vZGVsaXN0KToKKyAgICAgICAgIyBkaWN0b3JzZXRtYWtlcjogKCAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAodGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkpICkKKyAgICAgICAgYXNzZXJ0IG5vZGVsaXN0WzBdID09IHN5bWJvbC5kaWN0b3JzZXRtYWtlcgorICAgICAgICBub2RlbGlzdCA9IG5vZGVsaXN0WzE6XQorICAgICAgICBpZiBsZW4obm9kZWxpc3QpID09IDEgb3Igbm9kZWxpc3RbMV1bMF0gPT0gdG9rZW4uQ09NTUE6CisgICAgICAgICAgICAjIHNldCBsaXRlcmFsCisgICAgICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4obm9kZWxpc3QpLCAyKToKKyAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoc2VsZi5jb21fbm9kZShub2RlbGlzdFtpXSkpCisgICAgICAgICAgICByZXR1cm4gU2V0KGl0ZW1zLCBsaW5lbm89aXRlbXNbMF0ubGluZW5vKQorICAgICAgICBlbGlmIG5vZGVsaXN0WzFdWzBdID09IHN5bWJvbC5jb21wX2ZvcjoKKyAgICAgICAgICAgICMgc2V0IGNvbXByZWhlbnNpb24KKyAgICAgICAgICAgIGV4cHIgPSBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzBdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tX2NvbXByZWhlbnNpb24oZXhwciwgTm9uZSwgbm9kZWxpc3RbMV0sICdzZXQnKQorICAgICAgICBlbGlmIGxlbihub2RlbGlzdCkgPiAzIGFuZCBub2RlbGlzdFszXVswXSA9PSBzeW1ib2wuY29tcF9mb3I6CisgICAgICAgICAgICAjIGRpY3QgY29tcHJlaGVuc2lvbgorICAgICAgICAgICAgYXNzZXJ0IG5vZGVsaXN0WzFdWzBdID09IHRva2VuLkNPTE9OCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzBdKQorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmNvbV9ub2RlKG5vZGVsaXN0WzJdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tX2NvbXByZWhlbnNpb24oa2V5LCB2YWx1ZSwgbm9kZWxpc3RbM10sICdkaWN0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZGljdCBsaXRlcmFsCisgICAgICAgICAgICBpdGVtcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4obm9kZWxpc3QpLCA0KToKKyAgICAgICAgICAgICAgICBpdGVtcy5hcHBlbmQoKHNlbGYuY29tX25vZGUobm9kZWxpc3RbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21fbm9kZShub2RlbGlzdFtpKzJdKSkpCisgICAgICAgICAgICByZXR1cm4gRGljdChpdGVtcywgbGluZW5vPWl0ZW1zWzBdWzBdLmxpbmVubykKIAogICAgIGRlZiBjb21fYXBwbHlfdHJhaWxlcihzZWxmLCBwcmltYXJ5Tm9kZSwgbm9kZWxpc3QpOgogICAgICAgICB0ID0gbm9kZWxpc3RbMV1bMF0KQEAgLTEyNDUsNyArMTI4MSw3IEBACiAgICAgICAgICAgICBrdywgcmVzdWx0ID0gc2VsZi5jb21fYXJndW1lbnQobm9kZSwga3csIHN0YXJfbm9kZSkKIAogICAgICAgICAgICAgaWYgbGVuX25vZGVsaXN0ICE9IDIgYW5kIGlzaW5zdGFuY2UocmVzdWx0LCBHZW5FeHByKSBcCi0gICAgICAgICAgICAgICBhbmQgbGVuKG5vZGUpID09IDMgYW5kIG5vZGVbMl1bMF0gPT0gc3ltYm9sLmdlbl9mb3I6CisgICAgICAgICAgICAgICBhbmQgbGVuKG5vZGUpID09IDMgYW5kIG5vZGVbMl1bMF0gPT0gc3ltYm9sLmNvbXBfZm9yOgogICAgICAgICAgICAgICAgICMgYWxsb3cgZih4IGZvciB4IGluIHkpLCBidXQgcmVqZWN0IGYoeCBmb3IgeCBpbiB5LCAxKQogICAgICAgICAgICAgICAgICMgc2hvdWxkIHVzZSBmKCh4IGZvciB4IGluIHkpLCAxKSBpbnN0ZWFkIG9mIGYoeCBmb3IgeCBpbiB5LCAxKQogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yLCAnZ2VuZXJhdG9yIGV4cHJlc3Npb24gbmVlZHMgcGFyZW50aGVzaXMnCkBAIC0xMjU3LDcgKzEyOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPWV4dHJhY3RMaW5lTm8obm9kZWxpc3QpKQogCiAgICAgZGVmIGNvbV9hcmd1bWVudChzZWxmLCBub2RlbGlzdCwga3csIHN0YXJfbm9kZSk6Ci0gICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMyBhbmQgbm9kZWxpc3RbMl1bMF0gPT0gc3ltYm9sLmdlbl9mb3I6CisgICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMyBhbmQgbm9kZWxpc3RbMl1bMF0gPT0gc3ltYm9sLmNvbXBfZm9yOgogICAgICAgICAgICAgdGVzdCA9IHNlbGYuY29tX25vZGUobm9kZWxpc3RbMV0pCiAgICAgICAgICAgICByZXR1cm4gMCwgc2VsZi5jb21fZ2VuZXJhdG9yX2V4cHJlc3Npb24odGVzdCwgbm9kZWxpc3RbMl0pCiAgICAgICAgIGlmIGxlbihub2RlbGlzdCkgPT0gMjoKZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggYzk3OTNhZi4uZjA1MjA1YiAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCBzeXMKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogCiBfX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJuZXN0ZWQiLCAiY2xvc2luZyJdCiAKQEAgLTg2LDIxICs4NywyMSBAQAogCiBAY29udGV4dG1hbmFnZXIKIGRlZiBuZXN0ZWQoKm1hbmFnZXJzKToKLSAgICAiIiJTdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMgaW4gYSBzaW5nbGUgd2l0aC1zdGF0ZW1lbnQuCisgICAgIiIiQ29tYmluZSBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGludG8gYSBzaW5nbGUgbmVzdGVkIGNvbnRleHQgbWFuYWdlci4KIAotICAgIENvZGUgbGlrZSB0aGlzOgorICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbXVsdGlwbGUgbWFuYWdlciBmb3JtCisgICBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQuCiAKLSAgICAgICAgd2l0aCBuZXN0ZWQoQSwgQiwgQykgYXMgKFgsIFksIFopOgotICAgICAgICAgICAgPGJvZHk+CisgICBUaGUgb25lIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIG92ZXIgdGhlIG11bHRpcGxlIG1hbmFnZXIgZm9ybSBvZiB0aGUKKyAgIHdpdGggc3RhdGVtZW50IGlzIHRoYXQgYXJndW1lbnQgdW5wYWNraW5nIGFsbG93cyBpdCB0byBiZQorICAgdXNlZCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNvbnRleHQgbWFuYWdlcnMgYXMgZm9sbG93czoKIAotICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhpczoKLQotICAgICAgICB3aXRoIEEgYXMgWDoKLSAgICAgICAgICAgIHdpdGggQiBhcyBZOgotICAgICAgICAgICAgICAgIHdpdGggQyBhcyBaOgotICAgICAgICAgICAgICAgICAgICA8Ym9keT4KKyAgICAgIHdpdGggbmVzdGVkKCptYW5hZ2Vycyk6CisgICAgICAgICAgZG9fc29tZXRoaW5nKCkKIAogICAgICIiIgorICAgIHdhcm4oIldpdGgtc3RhdGVtZW50cyBub3cgZGlyZWN0bHkgc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMykKICAgICBleGl0cyA9IFtdCiAgICAgdmFycyA9IFtdCiAgICAgZXhjID0gKE5vbmUsIE5vbmUsIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvY29weS5weSBiL0xpYi9jb3B5LnB5CmluZGV4IDNmMjAzM2YuLmMyMjdhMmUgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5LnB5CisrKyBiL0xpYi9jb3B5LnB5CkBAIC00OSw2ICs0OSw3IEBACiAiIiIKIAogaW1wb3J0IHR5cGVzCitpbXBvcnQgd2Vha3JlZgogZnJvbSBjb3B5X3JlZyBpbXBvcnQgZGlzcGF0Y2hfdGFibGUKIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTEwMiw3ICsxMDMsNyBAQAogZm9yIHQgaW4gKHR5cGUoTm9uZSksIGludCwgbG9uZywgZmxvYXQsIGJvb2wsIHN0ciwgdHVwbGUsCiAgICAgICAgICAgZnJvemVuc2V0LCB0eXBlLCB4cmFuZ2UsIHR5cGVzLkNsYXNzVHlwZSwKICAgICAgICAgICB0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlLCB0eXBlKEVsbGlwc2lzKSwKLSAgICAgICAgICB0eXBlcy5GdW5jdGlvblR5cGUpOgorICAgICAgICAgIHR5cGVzLkZ1bmN0aW9uVHlwZSwgd2Vha3JlZi5yZWYpOgogICAgIGRbdF0gPSBfY29weV9pbW11dGFibGUKIGZvciBuYW1lIGluICgiQ29tcGxleFR5cGUiLCAiVW5pY29kZVR5cGUiLCAiQ29kZVR5cGUiKToKICAgICB0ID0gZ2V0YXR0cih0eXBlcywgbmFtZSwgTm9uZSkKQEAgLTIyMCw2ICsyMjEsNyBAQAogZFt0eXBlcy5DbGFzc1R5cGVdID0gX2RlZXBjb3B5X2F0b21pYwogZFt0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlXSA9IF9kZWVwY29weV9hdG9taWMKIGRbdHlwZXMuRnVuY3Rpb25UeXBlXSA9IF9kZWVwY29weV9hdG9taWMKK2Rbd2Vha3JlZi5yZWZdID0gX2RlZXBjb3B5X2F0b21pYwogCiBkZWYgX2RlZXBjb3B5X2xpc3QoeCwgbWVtbyk6CiAgICAgeSA9IFtdCkBAIC0yNTgsNiArMjYwLDEwIEBACiBpZiBQeVN0cmluZ01hcCBpcyBub3QgTm9uZToKICAgICBkW1B5U3RyaW5nTWFwXSA9IF9kZWVwY29weV9kaWN0CiAKK2RlZiBfZGVlcGNvcHlfbWV0aG9kKHgsIG1lbW8pOiAjIENvcHkgaW5zdGFuY2UgbWV0aG9kcworICAgIHJldHVybiB0eXBlKHgpKHguaW1fZnVuYywgZGVlcGNvcHkoeC5pbV9zZWxmLCBtZW1vKSwgeC5pbV9jbGFzcykKK19kZWVwY29weV9kaXNwYXRjaFt0eXBlcy5NZXRob2RUeXBlXSA9IF9kZWVwY29weV9tZXRob2QKKwogZGVmIF9rZWVwX2FsaXZlKHgsIG1lbW8pOgogICAgICIiIktlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgeCBpbiB0aGUgbWVtby4KIApAQCAtMzIyLDE3ICszMjgsNyBAQAogICAgICAgICBhcmdzID0gZGVlcGNvcHkoYXJncywgbWVtbykKICAgICB5ID0gY2FsbGFibGUoKmFyZ3MpCiAgICAgbWVtb1tpZCh4KV0gPSB5Ci0gICAgaWYgbGlzdGl0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgIGZvciBpdGVtIGluIGxpc3RpdGVyOgotICAgICAgICAgICAgaWYgZGVlcDoKLSAgICAgICAgICAgICAgICBpdGVtID0gZGVlcGNvcHkoaXRlbSwgbWVtbykKLSAgICAgICAgICAgIHkuYXBwZW5kKGl0ZW0pCi0gICAgaWYgZGljdGl0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRpY3RpdGVyOgotICAgICAgICAgICAgaWYgZGVlcDoKLSAgICAgICAgICAgICAgICBrZXkgPSBkZWVwY29weShrZXksIG1lbW8pCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWVwY29weSh2YWx1ZSwgbWVtbykKLSAgICAgICAgICAgIHlba2V5XSA9IHZhbHVlCisKICAgICBpZiBzdGF0ZToKICAgICAgICAgaWYgZGVlcDoKICAgICAgICAgICAgIHN0YXRlID0gZGVlcGNvcHkoc3RhdGUsIG1lbW8pCkBAIC0zNDgsNiArMzQ0LDE4IEBACiAgICAgICAgICAgICBpZiBzbG90c3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2xvdHN0YXRlLml0ZXJpdGVtcygpOgogICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHksIGtleSwgdmFsdWUpCisKKyAgICBpZiBsaXN0aXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdGl0ZXI6CisgICAgICAgICAgICBpZiBkZWVwOgorICAgICAgICAgICAgICAgIGl0ZW0gPSBkZWVwY29weShpdGVtLCBtZW1vKQorICAgICAgICAgICAgeS5hcHBlbmQoaXRlbSkKKyAgICBpZiBkaWN0aXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdGl0ZXI6CisgICAgICAgICAgICBpZiBkZWVwOgorICAgICAgICAgICAgICAgIGtleSA9IGRlZXBjb3B5KGtleSwgbWVtbykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZXBjb3B5KHZhbHVlLCBtZW1vKQorICAgICAgICAgICAgeVtrZXldID0gdmFsdWUKICAgICByZXR1cm4geQogCiBkZWwgZApAQCAtNDEwLDYgKzQxOCwxNiBAQAogICAgIHByaW50IG1hcChyZXByLnJlcHIsIGwxKQogICAgIHByaW50IG1hcChyZXByLnJlcHIsIGwyKQogICAgIHByaW50IG1hcChyZXByLnJlcHIsIGwzKQorICAgIGNsYXNzIG9kaWN0KGRpY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZCA9IHt9KToKKyAgICAgICAgICAgIHNlbGYuYSA9IDk5CisgICAgICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYsIGQpCisgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrLCBpKToKKyAgICAgICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZiwgaywgaSkKKyAgICAgICAgICAgIHNlbGYuYQorICAgIG8gPSBvZGljdCh7IkEiIDogIkIifSkKKyAgICB4ID0gZGVlcGNvcHkobykKKyAgICBwcmludChvLCB4KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIF90ZXN0KCkKZGlmZiAtLWdpdCBhL0xpYi9jc3YucHkgYi9MaWIvY3N2LnB5CmluZGV4IGZmNTFhODYuLjFkZjUwNjIgMTAwNjQ0Ci0tLSBhL0xpYi9jc3YucHkKKysrIGIvTGliL2Nzdi5weQpAQCAtMTMyLDYgKzEzMiwxMCBAQAogICAgICAgICBzZWxmLmV4dHJhc2FjdGlvbiA9IGV4dHJhc2FjdGlvbgogICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcihmLCBkaWFsZWN0LCAqYXJncywgKiprd2RzKQogCisgICAgZGVmIHdyaXRlaGVhZGVyKHNlbGYpOgorICAgICAgICBoZWFkZXIgPSBkaWN0KHppcChzZWxmLmZpZWxkbmFtZXMsIHNlbGYuZmllbGRuYW1lcykpCisgICAgICAgIHNlbGYud3JpdGVyb3coaGVhZGVyKQorCiAgICAgZGVmIF9kaWN0X3RvX2xpc3Qoc2VsZiwgcm93ZGljdCk6CiAgICAgICAgIGlmIHNlbGYuZXh0cmFzYWN0aW9uID09ICJyYWlzZSI6CiAgICAgICAgICAgICB3cm9uZ19maWVsZHMgPSBbayBmb3IgayBpbiByb3dkaWN0IGlmIGsgbm90IGluIHNlbGYuZmllbGRuYW1lc10KQEAgLTE3MCw3ICsxNzQsNyBAQAogICAgICAgICBSZXR1cm5zIGEgZGlhbGVjdCAob3IgTm9uZSkgY29ycmVzcG9uZGluZyB0byB0aGUgc2FtcGxlCiAgICAgICAgICIiIgogCi0gICAgICAgIHF1b3RlY2hhciwgZGVsaW1pdGVyLCBza2lwaW5pdGlhbHNwYWNlID0gXAorICAgICAgICBxdW90ZWNoYXIsIGRvdWJsZXF1b3RlLCBkZWxpbWl0ZXIsIHNraXBpbml0aWFsc3BhY2UgPSBcCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ3Vlc3NfcXVvdGVfYW5kX2RlbGltaXRlcihzYW1wbGUsIGRlbGltaXRlcnMpCiAgICAgICAgIGlmIG5vdCBkZWxpbWl0ZXI6CiAgICAgICAgICAgICBkZWxpbWl0ZXIsIHNraXBpbml0aWFsc3BhY2UgPSBzZWxmLl9ndWVzc19kZWxpbWl0ZXIoc2FtcGxlLApAQCAtMTg0LDggKzE4OCw4IEBACiAgICAgICAgICAgICBsaW5ldGVybWluYXRvciA9ICdcclxuJwogICAgICAgICAgICAgcXVvdGluZyA9IFFVT1RFX01JTklNQUwKICAgICAgICAgICAgICMgZXNjYXBlY2hhciA9ICcnCi0gICAgICAgICAgICBkb3VibGVxdW90ZSA9IEZhbHNlCiAKKyAgICAgICAgZGlhbGVjdC5kb3VibGVxdW90ZSA9IGRvdWJsZXF1b3RlCiAgICAgICAgIGRpYWxlY3QuZGVsaW1pdGVyID0gZGVsaW1pdGVyCiAgICAgICAgICMgX2Nzdi5yZWFkZXIgd29uJ3QgYWNjZXB0IGEgcXVvdGVjaGFyIG9mICcnCiAgICAgICAgIGRpYWxlY3QucXVvdGVjaGFyID0gcXVvdGVjaGFyIG9yICciJwpAQCAtMjE3LDggKzIyMSw4IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBpZiBub3QgbWF0Y2hlczoKLSAgICAgICAgICAgIHJldHVybiAoJycsIE5vbmUsIDApICMgKHF1b3RlY2hhciwgZGVsaW1pdGVyLCBza2lwaW5pdGlhbHNwYWNlKQotCisgICAgICAgICAgICAjIChxdW90ZWNoYXIsIGRvdWJsZXF1b3RlLCBkZWxpbWl0ZXIsIHNraXBpbml0aWFsc3BhY2UpCisgICAgICAgICAgICByZXR1cm4gKCcnLCBGYWxzZSwgTm9uZSwgMCkKICAgICAgICAgcXVvdGVzID0ge30KICAgICAgICAgZGVsaW1zID0ge30KICAgICAgICAgc3BhY2VzID0gMApAQCAtMjU1LDcgKzI1OSwxOSBAQAogICAgICAgICAgICAgZGVsaW0gPSAnJwogICAgICAgICAgICAgc2tpcGluaXRpYWxzcGFjZSA9IDAKIAotICAgICAgICByZXR1cm4gKHF1b3RlY2hhciwgZGVsaW0sIHNraXBpbml0aWFsc3BhY2UpCisgICAgICAgICMgaWYgd2Ugc2VlIGFuIGV4dHJhIHF1b3RlIGJldHdlZW4gZGVsaW1pdGVycywgd2UndmUgZ290IGEKKyAgICAgICAgIyBkb3VibGUgcXVvdGVkIGZvcm1hdAorICAgICAgICBkcV9yZWdleHAgPSByZS5jb21waWxlKHIiKCglKGRlbGltKXMpfF4pXFcqJShxdW90ZSlzW14lKGRlbGltKXNcbl0qJShxdW90ZSlzW14lKGRlbGltKXNcbl0qJShxdW90ZSlzXFcqKCglKGRlbGltKXMpfCQpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2RlbGltJzpkZWxpbSwgJ3F1b3RlJzpxdW90ZWNoYXJ9LCByZS5NVUxUSUxJTkUpCisKKworCisgICAgICAgIGlmIGRxX3JlZ2V4cC5zZWFyY2goZGF0YSk6CisgICAgICAgICAgICBkb3VibGVxdW90ZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gRmFsc2UKKworICAgICAgICByZXR1cm4gKHF1b3RlY2hhciwgZG91YmxlcXVvdGUsIGRlbGltLCBza2lwaW5pdGlhbHNwYWNlKQogCiAKICAgICBkZWYgX2d1ZXNzX2RlbGltaXRlcihzZWxmLCBkYXRhLCBkZWxpbWl0ZXJzKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CmluZGV4IDFiMDM4MzUuLjE2NDg5YjkgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQpAQCAtNDYyLDEwICs0NjIsMTMgQEAKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludAorICAgIGNfc3NpemVfdCA9IGNfaW50CiBlbGlmIHNpemVvZihjX3Vsb25nKSA9PSBzaXplb2YoY192b2lkX3ApOgogICAgIGNfc2l6ZV90ID0gY191bG9uZworICAgIGNfc3NpemVfdCA9IGNfbG9uZwogZWxpZiBzaXplb2YoY191bG9uZ2xvbmcpID09IHNpemVvZihjX3ZvaWRfcCk6CiAgICAgY19zaXplX3QgPSBjX3Vsb25nbG9uZworICAgIGNfc3NpemVfdCA9IGNfbG9uZ2xvbmcKIAogIyBmdW5jdGlvbnMKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYW5vbi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Fub24ucHkKaW5kZXggOTllMDJjYi4uZDg5MmI1OSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYW5vbi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hbm9uLnB5CkBAIC0xNCwyMiArMTQsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfaW50KV0KICAgICAgICAgICAgIF9hbm9ueW1vdXNfID0gWyJfIl0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChZLmEub2Zmc2V0LCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChZLmIub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuYS5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5iLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChBTk9OLmEub2Zmc2V0LCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChBTk9OLmIub2Zmc2V0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEFOT04uYS5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQU5PTi5iLm9mZnNldCwgMCkKIAogICAgIGRlZiB0ZXN0X2Fub25fbm9uc2VxKHNlbGYpOgogICAgICAgICAjIFR5cGVFcnJvcjogX2Fub255bW91c18gbXVzdCBiZSBhIHNlcXVlbmNlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogdHlwZShTdHJ1Y3R1cmUpKCJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJ1Y3R1cmUsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX2ZpZWxkc18iOiBbXSwgIl9hbm9ueW1vdXNfIjogNDJ9KSkKIAogICAgIGRlZiB0ZXN0X2Fub25fbm9ubWVtYmVyKHNlbGYpOgogICAgICAgICAjIEF0dHJpYnV0ZUVycm9yOiB0eXBlIG9iamVjdCAnTmFtZScgaGFzIG5vIGF0dHJpYnV0ZSAneCcKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEF0dHJpYnV0ZUVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogdHlwZShTdHJ1Y3R1cmUpKCJOYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJ1Y3R1cmUsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX2ZpZWxkc18iOiBbXSwKQEAgLTUwLDExICs1MCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19pbnQpXQogICAgICAgICAgICAgX2Fub255bW91c18gPSBbIl8iXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkueC5vZmZzZXQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuYS5vZmZzZXQsIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuYi5vZmZzZXQsIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuXy5vZmZzZXQsIHNpemVvZihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkueS5vZmZzZXQsIHNpemVvZihjX2ludCkgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkueC5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5hLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLmIub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuXy5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS55Lm9mZnNldCwgc2l6ZW9mKGNfaW50KSAqIDIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheV9pbl9wb2ludGVyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlfaW5fcG9pbnRlci5weQppbmRleCAzZWQzMTBjLi5lZTc4NjNjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheV9pbl9wb2ludGVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5X2luX3BvaW50ZXIucHkKQEAgLTYsNyArNiw3IEBACiBkZWYgZHVtcChvYmopOgogICAgICMgaGVscGVyIGZ1bmN0aW9uIHRvIGR1bXAgbWVtb3J5IGNvbnRlbnRzIGluIGhleCwgd2l0aCBhIGh5cGhlbgogICAgICMgYmV0d2VlbiB0aGUgYnl0ZXMuCi0gICAgaCA9IGhleGxpZnkoYnVmZmVyKG9iaikpCisgICAgaCA9IGhleGxpZnkobWVtb3J5dmlldyhvYmopKQogICAgIHJldHVybiByZS5zdWIociIoLi4pIiwgciJcMS0iLCBoKVs6LTFdCiAKIApAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICBjLnB2YWx1ZXMgPSB2YWxfYXJyYXkKIAogICAgICAgICAjIG1lbW9yeSBjb250YWlucyA0IE5VTCBieXRlcyBub3csIHRoYXQncyBjb3JyZWN0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIwMC0wMC0wMC0wMCIsIGR1bXAodmFsX2FycmF5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMDAtMDAtMDAtMDAiLCBkdW1wKHZhbF9hcnJheSkpCiAKICAgICAgICAgIyBzZXQgdGhlIHZhbHVlcyBvZiB0aGUgYXJyYXkgdGhyb3VnaCB0aGUgcG9pbnRlcjoKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIHZhbHVlcyA9IFtjLnB2YWx1ZXNbaV0udmFsIGZvciBpIGluIHJhbmdlKDQpXQogCiAgICAgICAgICMgVGhlc2UgYXJlIHRoZSBleHBlY3RlZCByZXN1bHRzOiBoZXJlIHMgdGhlIGJ1ZyEKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAodmFsdWVzLCBkdW1wKHZhbF9hcnJheSkpLAogICAgICAgICAgICAgKFsxLCAyLCAzLCA0XSwgIjAxLTAyLTAzLTA0IikKICAgICAgICAgKQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICB2YWxfYXJyYXkgPSAoVmFsdWUgKiA0KSgpCiAKICAgICAgICAgIyBtZW1vcnkgY29udGFpbnMgNCBOVUwgYnl0ZXMgbm93LCB0aGF0J3MgY29ycmVjdAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMDAtMDAtMDAtMDAiLCBkdW1wKHZhbF9hcnJheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjAwLTAwLTAwLTAwIiwgZHVtcCh2YWxfYXJyYXkpKQogCiAgICAgICAgIHB0ciA9IGNhc3QodmFsX2FycmF5LCBQT0lOVEVSKFZhbHVlKSkKICAgICAgICAgIyBzZXQgdGhlIHZhbHVlcyBvZiB0aGUgYXJyYXkgdGhyb3VnaCB0aGUgcG9pbnRlcjoKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgICAgdmFsdWVzID0gW3B0cltpXS52YWwgZm9yIGkgaW4gcmFuZ2UoNCldCiAKICAgICAgICAgIyBUaGVzZSBhcmUgdGhlIGV4cGVjdGVkIHJlc3VsdHM6IGhlcmUgcyB0aGUgYnVnIQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICh2YWx1ZXMsIGR1bXAodmFsX2FycmF5KSksCiAgICAgICAgICAgICAoWzEsIDIsIDMsIDRdLCAiMDEtMDItMDMtMDQiKQogICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKaW5kZXggN2VlMTZjMS4uNDMzYTFmZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQpAQCAtMTksMjMgKzE5LDIzIEBACiAKICAgICAgICAgICAgIGlhID0gaW50X2FycmF5KCppbml0KQogICAgICAgICAgICAgIyBsZW5ndGggb2YgaW5zdGFuY2Ugb2s/Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oaWEpLCBhbGVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaWEpLCBhbGVuKQogCiAgICAgICAgICAgICAjIHNsb3QgdmFsdWVzIG9rPwogICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGxlbihpbml0KSldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWx1ZXMsIGluaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgaW5pdCkKIAogICAgICAgICAgICAgIyBjaGFuZ2UgdGhlIGl0ZW1zCiAgICAgICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBzZXRpdGVtCiAgICAgICAgICAgICBuZXdfdmFsdWVzID0gcmFuZ2UoNDIsIDQyK2FsZW4pCiAgICAgICAgICAgICBbc2V0aXRlbShpYSwgbiwgbmV3X3ZhbHVlc1tuXSkgZm9yIG4gaW4gcmFuZ2UoYWxlbildCiAgICAgICAgICAgICB2YWx1ZXMgPSBbaWFbaV0gZm9yIGkgaW4gcmFuZ2UobGVuKGluaXQpKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbHVlcywgbmV3X3ZhbHVlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBuZXdfdmFsdWVzKQogCiAgICAgICAgICAgICAjIGFyZSB0aGUgaXRlbXMgaW5pdGlhbGl6ZWQgdG8gMD8KICAgICAgICAgICAgIGlhID0gaW50X2FycmF5KCkKICAgICAgICAgICAgIHZhbHVlcyA9IFtpYVtpXSBmb3IgaSBpbiByYW5nZShsZW4oaW5pdCkpXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsdWVzLCBbMF0gKiBsZW4oaW5pdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzBdICogbGVuKGluaXQpKQogCiAgICAgICAgICAgICAjIFRvbyBtYW55IGluIGl0aWFsaXplcnMgc2hvdWxkIGJlIGNhdWdodAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgaW50X2FycmF5LCAqcmFuZ2UoYWxlbioyKSkKQEAgLTQ4LDE0ICs0OCwxNCBAQAogICAgICAgICAjIENoYXJBcnJheSgiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDaGFyQXJyYXksICJhYmMiKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhWzBdLCAiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhWzFdLCAiYiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhWzJdLCAiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhWy0zXSwgImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYVstMl0sICJiIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FbLTFdLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVsxXSwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhWzJdLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbLTNdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbLTJdLCAiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbLTFdLCAiYyIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGNhKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2EpLCAzKQogCiAgICAgICAgICMgc2xpY2luZyBpcyBub3cgc3VwcG9ydGVkLCBidXQgbm90IGV4dGVuZGVkIHNsaWNpbmcgKDMtYXJndW1lbnQpIQogICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBnZXRzbGljZSwgZGVsaXRlbQpAQCAtNzIsMzQgKzcyLDM0IEBACiAKICAgICAgICAgbmEgPSBudW1hcnJheSgpCiAgICAgICAgIHZhbHVlcyA9IFtuYVtpXSBmb3IgaSBpbiByYW5nZShhbGVuKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsdWVzLCBbMF0gKiBhbGVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzBdICogYWxlbikKIAogICAgICAgICBuYSA9IG51bWFycmF5KCpbY19pbnQoKV0gKiBhbGVuKQogICAgICAgICB2YWx1ZXMgPSBbbmFbaV0gZm9yIGkgaW4gcmFuZ2UoYWxlbildCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbHVlcywgWzBdKmFsZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbMF0qYWxlbikKIAogICAgICAgICBuYSA9IG51bWFycmF5KDEsIDIsIDMsIDQsIDUpCiAgICAgICAgIHZhbHVlcyA9IFtpIGZvciBpIGluIG5hXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSkKIAogICAgICAgICBuYSA9IG51bWFycmF5KCptYXAoY19pbnQsICgxLCAyLCAzLCA0LCA1KSkpCiAgICAgICAgIHZhbHVlcyA9IFtpIGZvciBpIGluIG5hXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIFsxLCAyLCAzLCA0LCA1XSkKIAogICAgIGRlZiB0ZXN0X2NsYXNzY2FjaGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgQVJSQVkoY19pbnQsIDMpIGlzIEFSUkFZKGNfaW50LCA0KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKEFSUkFZKGNfaW50LCAzKSBpcyBBUlJBWShjX2ludCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgQVJSQVkoY19pbnQsIDMpIGlzIEFSUkFZKGNfaW50LCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEFSUkFZKGNfaW50LCAzKSBpcyBBUlJBWShjX2ludCwgMykpCiAKICAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3Moc2VsZik6CiAgICAgICAgICMgRmFpbGVkIHdpdGggMC45LjgsIHJlcG9ydGVkIGJ5IEpVcm5lcgogICAgICAgICBwID0gY3JlYXRlX3N0cmluZ19idWZmZXIoImZvbyIpCiAgICAgICAgIHN6ID0gKGNfY2hhciAqIDMpLmZyb21fYWRkcmVzcyhhZGRyZXNzb2YocCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6WzpdLCAiZm9vIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbOjpdLCAiZm9vIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3pbOjotMV0sICJvb2YiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzels6OjNdLCAiZiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6WzE6NDoyXSwgIm8iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzei52YWx1ZSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOl0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6XSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjotMV0sICJvb2YiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6M10sICJmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzelsxOjQ6Ml0sICJvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzei52YWx1ZSwgImZvbyIpCiAKICAgICB0cnk6CiAgICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcgpAQCAtMTA5LDEyICsxMDksMTIgQEAKICAgICAgICAgZGVmIHRlc3RfZnJvbV9hZGRyZXNzVyhzZWxmKToKICAgICAgICAgICAgIHAgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImZvbyIpCiAgICAgICAgICAgICBzeiA9IChjX3djaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6WzpdLCAiZm9vIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6Wzo6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzels6Oi0xXSwgIm9vZiIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzels6OjNdLCAiZiIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzelsxOjQ6Ml0sICJvIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN6LnZhbHVlLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOl0sICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Ol0sICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6M10sICJmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCAibyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKIAogICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgogICAgICAgICAjIEFycmF5IHR5cGVzIGFyZSBjYWNoZWQgaW50ZXJuYWxseSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24sCkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgIyBDcmVhdGUgYSBuZXcgYXJyYXkgdHlwZSBiYXNlZCBvbiBpdDoKICAgICAgICAgdDEgPSBteV9pbnQgKiAxCiAgICAgICAgIHQyID0gbXlfaW50ICogMQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgaXMgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSBpcyB0MikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQppbmRleCAwNTgxMDU5Li5mMjUzOWIxIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CkBAIC0yNSw4ICsyNSw4IEBACiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3djaGFyLCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAoMSksIHNlbGYud3JhcCh1IngiKSwgc2VsZi53cmFwKDMpLCBzZWxmLndyYXAoNCksIHNlbGYud3JhcCg1LjApLCBzZWxmLndyYXAoNi4wKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAxMzkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKHJlc3VsdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEzOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVzdWx0KSwgaW50KQogCiAgICAgZGVmIHRlc3RfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMzksMTggKzM5LDE4IEBACiAKICAgICAgICAgdiA9IGNfaW50KDQyKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBvaW50ZXIodikuY29udGVudHMudmFsdWUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvaW50ZXIodikuY29udGVudHMudmFsdWUsIDQyKQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcChwb2ludGVyKHYpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBQT0lOVEVSKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgNDIpCiAKICAgICAgICAgIyBUaGlzIG9uIHdvcmtzLi4uCiAgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKHBvaW50ZXIodikpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIHYudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCB2LnZhbHVlKQogCiAgICAgICAgIHAgPSBwb2ludGVyKGNfaW50KDk5KSkKICAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAocCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgOTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA5OSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0cyhzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfaV9pZgpAQCAtNjcsNyArNjcsNyBAQAogCiAgICAgICAgIGNiID0gQ2FsbEJhY2soY2FsbGJhY2spCiAgICAgICAgIGYoc2VsZi53cmFwKDIqKjE4KSwgc2VsZi53cmFwKGNiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYXJncywgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgZXhwZWN0ZWQpCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTg0LDE3ICs4NCwxNyBAQAogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAKICAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAoLTEwKSwgc2VsZi53cmFwKGNiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMTgpCiAKICAgICAgICAgIyB0ZXN0IHdpdGggcHJvdG90eXBlCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19pbnQsIE15Q2FsbGJhY2tdCiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKIAogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgICAgICBBbm90aGVyQ2FsbGJhY2sgPSBDQUxMQkFDS19GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQpCiAKQEAgLTExNiwxMiArMTE2LDEyIEBACiAKICAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKICAgICAgICAgICAgICNwcmludCAiY2FsbGVkIGJhY2sgd2l0aCIsIHZhbHVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbHVlKSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgaW50KQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgIGRlZiB0ZXN0X2xvbmdsb25nX2NhbGxiYWNrcyhzZWxmKToKIApAQCAtMTMzLDEyICsxMzMsMTIgQEAKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2xvbmdsb25nLCBNeUNhbGxiYWNrXQogCiAgICAgICAgIGRlZiBjYWxsYmFjayh2YWx1ZSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAmIDB4N0ZGRkZGRkYKIAogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMTM1Nzc2MjU1ODcsIGludChmKHNlbGYud3JhcCgxMDAwMDAwMDAwMDAwKSwgc2VsZi53cmFwKGNiKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEzNTc3NjI1NTg3LCBpbnQoZihzZWxmLndyYXAoMTAwMDAwMDAwMDAwMCksIHNlbGYud3JhcChjYikpKSkKIAogICAgIGRlZiB0ZXN0X2J5dmFsKHNlbGYpOgogICAgICAgICAjIHdpdGhvdXQgcHJvdG90eXBlCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZGxsLl90ZXN0ZnVuY19ieXZhbChwdGluLCBieXJlZihwdG91dCkpCiAgICAgICAgIGdvdCA9IHJlc3VsdCwgcHRvdXQueCwgcHRvdXQueQogICAgICAgICBleHBlY3RlZCA9IDMsIDEsIDIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ290LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgICAgICMgd2l0aCBwcm90b3R5cGUKICAgICAgICAgcHRpbiA9IFBPSU5UKDEwMSwgMTAyKQpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIHJlc3VsdCA9IGRsbC5fdGVzdGZ1bmNfYnl2YWwoc2VsZi53cmFwKHB0aW4pLCBieXJlZihwdG91dCkpCiAgICAgICAgIGdvdCA9IHJlc3VsdCwgcHRvdXQueCwgcHRvdXQueQogICAgICAgICBleHBlY3RlZCA9IDIwMywgMTAxLCAxMDIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ290LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl8ySChzZWxmKToKICAgICAgICAgY2xhc3MgUzJIKFN0cnVjdHVyZSk6CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgZGxsLnJldF8yaF9mdW5jLmFyZ3R5cGVzID0gW1MySF0KICAgICAgICAgaW5wID0gUzJIKDk5LCA4OCkKICAgICAgICAgczJoID0gZGxsLnJldF8yaF9mdW5jKHNlbGYud3JhcChpbnApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIKHNlbGYpOgogICAgICAgICBjbGFzcyBTOEkoU3RydWN0dXJlKToKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgICAgICBkbGwucmV0XzhpX2Z1bmMuYXJndHlwZXMgPSBbUzhJXQogICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKICAgICAgICAgczhpID0gZGxsLnJldF84aV9mdW5jKHNlbGYud3JhcChpbnApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkqMiwgOCozLCA3KjQsIDYqNSwgNSo2LCA0KjcsIDMqOCwgMio5KSkKIAogI35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQppbmRleCA5NmNkN2M2Li5lOWM0NmMyIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CkBAIC0zNywxNCArMzcsMTQgQEAKICAgICAgICAgICAgIGZvciBuYW1lIGluICJBQkNERUZHSEkiOgogICAgICAgICAgICAgICAgIGIgPSBCSVRTKCkKICAgICAgICAgICAgICAgICBzZXRhdHRyKGIsIG5hbWUsIGkpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgogICAgICAgICAgICAgZm9yIG5hbWUgaW4gIk1OT1BRUlMiOgogICAgICAgICAgICAgICAgIGIgPSBCSVRTKCkKICAgICAgICAgICAgICAgICBzZXRhdHRyKGIsIG5hbWUsIGkpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQogCiBzaWduZWRfaW50X3R5cGVzID0gKGNfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19sb25nbG9uZykKIHVuc2lnbmVkX2ludF90eXBlcyA9IChjX3VieXRlLCBjX3VzaG9ydCwgY191aW50LCBjX3Vsb25nLCBjX3Vsb25nbG9uZykKQEAgLTU4LDEwICs1OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19sb25nbG9uZywgNjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19sb25nbG9uZywgMSldCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19sb25nbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19sb25nbG9uZykpCiAgICAgICAgIHggPSBYKCkKICAgICAgICAgeC5hLCB4LmIsIHguYyA9IC0xLCA3LCAtMQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeC5hLCB4LmIsIHguYyksICgtMSwgNywgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiwgeC5jKSwgKC0xLCA3LCAtMSkpCiAKICAgICBkZWYgdGVzdF91bG9uZ2xvbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKQEAgLTY5LDExICs2OSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY191bG9uZ2xvbmcsIDYyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfdWxvbmdsb25nLCAxKV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2xvbmdsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2xvbmdsb25nKSkKICAgICAgICAgeCA9IFgoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeC5hLCB4LmIsIHguYyksICgwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5hLCB4LmIsIHguYyksICgwLCAwLCAwKSkKICAgICAgICAgeC5hLCB4LmIsIHguYyA9IDcsIDcsIDcKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHguYSwgeC5iLCB4LmMpLCAoMSwgNywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguYSwgeC5iLCB4LmMpLCAoMSwgNywgMSkpCiAKICAgICBkZWYgdGVzdF9zaWduZWQoc2VsZik6CiAgICAgICAgIGZvciBjX3R5cCBpbiBzaWduZWRfaW50X3R5cGVzOgpAQCAtODIsMTQgKzgyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgY190eXAsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdHlwLCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3R5cCwgMSldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkqMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKjIpCiAKICAgICAgICAgICAgIHggPSBYKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgMCwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgMCwgMCkpCiAgICAgICAgICAgICB4LmEgPSAtMQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAtMSwgMCwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgLTEsIDAsIDApKQogICAgICAgICAgICAgeC5hLCB4LmIgPSAwLCAtMQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAwLCAtMSwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgLTEsIDApKQogCiAKICAgICBkZWYgdGVzdF91bnNpZ25lZChzZWxmKToKQEAgLTk4LDE0ICs5OCwxNCBAQAogICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdHlwLCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3R5cCwgMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY190eXAsIDEpXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCiAKICAgICAgICAgICAgIHggPSBYKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgMCwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgMCwgMCkpCiAgICAgICAgICAgICB4LmEgPSAtMQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCA3LCAwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCA3LCAwLCAwKSkKICAgICAgICAgICAgIHguYSwgeC5iID0gMCwgLTEKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgNywgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgNywgMCkpCiAKIAogICAgIGRlZiBmYWlsX2ZpZWxkcyhzZWxmLCAqZmllbGRzKToKQEAgLTExNSwxNyArMTE1LDE3IEBACiAgICAgZGVmIHRlc3Rfbm9uaW50X3R5cGVzKHNlbGYpOgogICAgICAgICAjIGJpdCBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIG9uIG5vbi1pbnRlZ2VyIHR5cGVzLgogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfY2hhcl9wLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX2NoYXJfcCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyX3AnKSkKIAogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfdm9pZF9wLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3ZvaWRfcCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY192b2lkX3AnKSkKIAogICAgICAgICBpZiBjX2ludCAhPSBjX2xvbmc6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIFBPSU5URVIoY19pbnQpLCAxKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgTFBfY19pbnQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBMUF9jX2ludCcpKQogCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY19jaGFyLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX2NoYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfY2hhcicpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNfd2NoYXIKQEAgLTEzMyw1OSArMTMzLDU5IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfd2NoYXIsIDEpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY193Y2hhcicpKQogCiAgICAgICAgIGNsYXNzIER1bW15KFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFtdCiAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBEdW1teSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgRHVtbXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIER1bW15JykpCiAKICAgICBkZWYgdGVzdF9zaW5nbGVfYml0ZmllbGRfc2l6ZShzZWxmKToKICAgICAgICAgZm9yIGNfdHlwIGluIGludF90eXBlczoKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY190eXAsIC0xKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgKFZhbHVlRXJyb3IsICdudW1iZXIgb2YgYml0cyBpbnZhbGlkIGZvciBiaXQgZmllbGQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQogCiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfdHlwLCAwKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgKFZhbHVlRXJyb3IsICdudW1iZXIgb2YgYml0cyBpbnZhbGlkIGZvciBiaXQgZmllbGQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQogCiAgICAgICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY190eXAsIDEpXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCiAKICAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3R5cCwgc2l6ZW9mKGNfdHlwKSo4KV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdHlwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQogCiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfdHlwLCBzaXplb2YoY190eXApKjggKyAxKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgKFZhbHVlRXJyb3IsICdudW1iZXIgb2YgYml0cyBpbnZhbGlkIGZvciBiaXQgZmllbGQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfYml0ZmllbGRzX3NpemUoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfc2hvcnQsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19zaG9ydCwgMTQpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19zaG9ydCwgMSldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfc2hvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfc2hvcnQpKQogCiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfc2hvcnQsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhMSIsIGNfc2hvcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19zaG9ydCwgMTQpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19zaG9ydCwgMSldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfc2hvcnQpKjMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYS5vZmZzZXQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYTEub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmMub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3Nob3J0KSozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYS5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hMS5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmMub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKIAogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3Nob3J0LCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfc2hvcnQsIDE0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfc2hvcnQsIDE0KV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19zaG9ydCkqMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5hLm9mZnNldCwgc2l6ZW9mKGNfc2hvcnQpKjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmMub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3Nob3J0KSozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYS5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSowKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYy5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQogCiAKICAgICBkZWYgZ2V0X2V4Y2VwdChzZWxmLCBmdW5jLCAqYXJncywgKiprdyk6CkBAIC0xOTksMjEgKzE5OSwyMSBAQAogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlLCA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50LCA0KV0KICAgICAgICAgaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkqMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKjIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSkKIAogICAgIGRlZiB0ZXN0X21peGVkXzIoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSwgNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCwgMzIpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkqMikKIAogICAgIGRlZiB0ZXN0X21peGVkXzMoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSwgNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3VieXRlLCA0KV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19ieXRlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2J5dGUpKQogCiAgICAgZGVmIHRlc3RfbWl4ZWRfNChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpAQCAtMjI3LDkgKzIyNyw5IEBACiAgICAgICAgICMgZG9lcyAodW5sZXNzIEdDQyBpcyBydW4gd2l0aCAnLW1tcy1iaXRmaWVsZHMnIHdoaWNoCiAgICAgICAgICMgcHJvZHVjZXMgY29kZSBjb21wYXRpYmxlIHdpdGggTVNWQykuCiAgICAgICAgIGlmIG9zLm5hbWUgaW4gKCJudCIsICJjZSIpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogNCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSAqIDIpCiAKICAgICBkZWYgdGVzdF9hbm9uX2JpdGZpZWxkcyhzZWxmKToKICAgICAgICAgIyBhbm9ueW1vdXMgYml0LWZpZWxkcyBnYXZlIGEgc3RyYW5nZSBlcnJvciBtZXNzYWdlCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQppbmRleCA1Yjk2ZDEyLi5iZjkzMWFiIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKQEAgLTUsMzIgKzUsMzIgQEAKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKICAgICAgICAgYiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDMyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYiksIDMyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfY2hhcikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGJbMF0pIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY19jaGFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgc3RyKQogCiAgICAgICAgIGIgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigiYWJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX2NoYXIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShiWzBdKSBpcyBzdHIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbMF0sICJhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfY2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19jb252ZXJzaW9uKHNlbGYpOgogICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYmMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfY2hhcikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGJbMF0pIGlzIHN0cikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYlswXSwgImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzpdLCAiYWJjXDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6XSwgImFiY1wwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6OjJdLCAiYWMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6NV0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY19jaGFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiAgICAgdHJ5OgogICAgICAgICBjX3djaGFyCkBAIC0zOSwzMiArMzksMzIgQEAKICAgICBlbHNlOgogICAgICAgICBkZWYgdGVzdF91bmljb2RlX2J1ZmZlcihzZWxmKToKICAgICAgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoMzIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oYiksIDMyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKGIpLCAzMiAqIHNpemVvZihjX3djaGFyKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGJbMF0pIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgMzIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyB1bmljb2RlKQogCiAgICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKHUiYWJjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYlswXSkgaXMgdW5pY29kZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbMF0sIHUiYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzpdLCAiYWJjXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6OjJdLCAiYWMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCB1ImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKIAogICAgICAgICBkZWYgdGVzdF91bmljb2RlX2NvbnZlcnNpb24oc2VsZik6CiAgICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShiWzBdKSBpcyB1bmljb2RlKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYlswXSwgdSJhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOl0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6Ml0sICJhYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiWzo6NV0sICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX3djaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sIHUiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOl0sICJhYmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6Ml0sICJhYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlc3dhcC5weQppbmRleCAxZjY4OTkyLi4zMTYzNzU2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlc3dhcC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlc3dhcC5weQpAQCAtNCw3ICs0LDcgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCiAKIGRlZiBiaW4ocyk6Ci0gICAgcmV0dXJuIGhleGxpZnkoYnVmZmVyKHMpKS51cHBlcigpCisgICAgcmV0dXJuIGhleGxpZnkobWVtb3J5dmlldyhzKSkudXBwZXIoKQogCiAjIEVhY2ggKnNpbXBsZSogdHlwZSB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBieXRlIG9yZGVycyBoYXMgYW4KICMgX19jdHlwZV9iZV9fIGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcyB0aGUgc2FtZSB0eXBlIGluIEJJRyBFTkRJQU4KQEAgLTIzLDEzMSArMjMsMTMxIEBACiAKICAgICBkZWYgdGVzdF9lbmRpYW5fc2hvcnQoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zaG9ydC5fX2N0eXBlX2xlX18gaXMgY19zaG9ydCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3Nob3J0Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19zaG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3Nob3J0Ll9fY3R5cGVfbGVfXyBpcyBjX3Nob3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc2hvcnQuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX3Nob3J0KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc2hvcnQuX19jdHlwZV9iZV9fIGlzIGNfc2hvcnQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zaG9ydC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfc2hvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zaG9ydC5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3Nob3J0Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKICAgICAgICAgcyA9IGNfc2hvcnQuX19jdHlwZV9iZV9fKDB4MTIzNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aCIsIDB4MTIzNCkpLCAiMTIzNCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjEyMzQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aCIsIDB4MTIzNCkpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0KQogCiAgICAgICAgIHMgPSBjX3Nob3J0Ll9fY3R5cGVfbGVfXygweDEyMzQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGgiLCAweDEyMzQpKSwgIjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGgiLCAweDEyMzQpKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNCkKIAogICAgICAgICBzID0gY191c2hvcnQuX19jdHlwZV9iZV9fKDB4MTIzNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aCIsIDB4MTIzNCkpLCAiMTIzNCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIjEyMzQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aCIsIDB4MTIzNCkpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0KQogCiAgICAgICAgIHMgPSBjX3VzaG9ydC5fX2N0eXBlX2xlX18oMHgxMjM0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxoIiwgMHgxMjM0KSksICIzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiMzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxoIiwgMHgxMjM0KSksICIzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQpCiAKICAgICBkZWYgdGVzdF9lbmRpYW5faW50KHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfaW50Ll9fY3R5cGVfbGVfXyBpcyBjX2ludCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2ludC5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfbGVfXyBpcyBjX2ludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2ludC5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfaW50KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfaW50Ll9fY3R5cGVfYmVfXyBpcyBjX2ludCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2ludC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfYmVfXyBpcyBjX2ludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2ludC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfaW50KQogCiAgICAgICAgIHMgPSBjX2ludC5fX2N0eXBlX2JlX18oMHgxMjM0NTY3OCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aSIsIDB4MTIzNDU2NzgpKSwgIjEyMzQ1Njc4IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiMTIzNDU2NzgiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPmkiLCAweDEyMzQ1Njc4KSksICIxMjM0NTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNDU2NzgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCiAKICAgICAgICAgcyA9IGNfaW50Ll9fY3R5cGVfbGVfXygweDEyMzQ1Njc4KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxpIiwgMHgxMjM0NTY3OCkpLCAiNzg1NjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICI3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8aSIsIDB4MTIzNDU2NzgpKSwgIjc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICI3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKIAogICAgICAgICBzID0gY191aW50Ll9fY3R5cGVfYmVfXygweDEyMzQ1Njc4KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5JIiwgMHgxMjM0NTY3OCkpLCAiMTIzNDU2NzgiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIxMjM0NTY3OCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+SSIsIDB4MTIzNDU2NzgpKSwgIjEyMzQ1Njc4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0NTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKIAogICAgICAgICBzID0gY191aW50Ll9fY3R5cGVfbGVfXygweDEyMzQ1Njc4KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxJIiwgMHgxMjM0NTY3OCkpLCAiNzg1NjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICI3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8SSIsIDB4MTIzNDU2NzgpKSwgIjc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICI3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKIAogICAgIGRlZiB0ZXN0X2VuZGlhbl9sb25nbG9uZyhzZWxmKToKICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2xvbmdsb25nLl9fY3R5cGVfbGVfXyBpcyBjX2xvbmdsb25nKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX2xvbmdsb25nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfbG9uZ2xvbmcuX19jdHlwZV9sZV9fIGlzIGNfbG9uZ2xvbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19sb25nbG9uZy5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfbG9uZ2xvbmcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19sb25nbG9uZy5fX2N0eXBlX2JlX18gaXMgY19sb25nbG9uZykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2xvbmdsb25nLl9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19sb25nbG9uZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2xvbmdsb25nLl9fY3R5cGVfYmVfXyBpcyBjX2xvbmdsb25nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfbG9uZ2xvbmcuX19jdHlwZV9sZV9fLl9fY3R5cGVfYmVfXyBpcyBjX2xvbmdsb25nKQogCiAgICAgICAgIHMgPSBjX2xvbmdsb25nLl9fY3R5cGVfYmVfXygweDEyMzQ1Njc4OTBBQkNERUYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPnEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIxMjM0NTY3ODkwQUJDREVGIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPnEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKIAogICAgICAgICBzID0gY19sb25nbG9uZy5fX2N0eXBlX2xlX18oMHgxMjM0NTY3ODkwQUJDREVGKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxxIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICJFRkNEQUI5MDc4NTYzNDEyIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMpLCAiRUZDREFCOTA3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxxIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCiAKICAgICAgICAgcyA9IGNfdWxvbmdsb25nLl9fY3R5cGVfYmVfXygweDEyMzQ1Njc4OTBBQkNERUYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiPlEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4ocyksICIxMjM0NTY3ODkwQUJDREVGIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPlEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjEyMzQ1Njc4OTBBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKIAogICAgICAgICBzID0gY191bG9uZ2xvbmcuX19jdHlwZV9sZV9fKDB4MTIzNDU2Nzg5MEFCQ0RFRikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8USIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiRUZDREFCOTA3ODU2MzQxMiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8USIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiRUZDREFCOTA3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiRUZDREFCOTA3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQogCiAgICAgZGVmIHRlc3RfZW5kaWFuX2Zsb2F0KHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZmxvYXQuX19jdHlwZV9sZV9fIGlzIGNfZmxvYXQpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19mbG9hdC5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfZmxvYXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19mbG9hdC5fX2N0eXBlX2xlX18gaXMgY19mbG9hdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2Zsb2F0Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19mbG9hdCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2Zsb2F0Ll9fY3R5cGVfYmVfXyBpcyBjX2Zsb2F0KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZmxvYXQuX19jdHlwZV9sZV9fLl9fY3R5cGVfYmVfXyBpcyBjX2Zsb2F0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZmxvYXQuX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19mbG9hdC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCiAgICAgICAgIHMgPSBjX2Zsb2F0KG1hdGgucGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzdHJ1Y3QucGFjaygiZiIsIG1hdGgucGkpKSwgYmluKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiZiIsIG1hdGgucGkpKSwgYmluKHMpKQogICAgICAgICAjIEhtLCB3aGF0J3MgdGhlIHByZWNpc2lvbiBvZiBhIGZsb2F0IGNvbXBhcmVkIHRvIGEgZG91YmxlPwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbChzLnZhbHVlLCBtYXRoLnBpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHMudmFsdWUsIG1hdGgucGksIDYpCiAgICAgICAgIHMgPSBjX2Zsb2F0Ll9fY3R5cGVfbGVfXyhtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbChzLnZhbHVlLCBtYXRoLnBpLCA2KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxmIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocy52YWx1ZSwgbWF0aC5waSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxmIiwgbWF0aC5waSkpLCBiaW4ocykpCiAgICAgICAgIHMgPSBjX2Zsb2F0Ll9fY3R5cGVfYmVfXyhtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbChzLnZhbHVlLCBtYXRoLnBpLCA2KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIj5mIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocy52YWx1ZSwgbWF0aC5waSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5mIiwgbWF0aC5waSkpLCBiaW4ocykpCiAKICAgICBkZWYgdGVzdF9lbmRpYW5fZG91YmxlKHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZG91YmxlLl9fY3R5cGVfbGVfXyBpcyBjX2RvdWJsZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2RvdWJsZS5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfZG91YmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZG91YmxlLl9fY3R5cGVfbGVfXyBpcyBjX2RvdWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2RvdWJsZS5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfZG91YmxlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfZG91YmxlLl9fY3R5cGVfYmVfXyBpcyBjX2RvdWJsZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2RvdWJsZS5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfZG91YmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZG91YmxlLl9fY3R5cGVfYmVfXyBpcyBjX2RvdWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2RvdWJsZS5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfZG91YmxlKQogICAgICAgICBzID0gY19kb3VibGUobWF0aC5waSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgbWF0aC5waSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCJkIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soImQiLCBtYXRoLnBpKSksIGJpbihzKSkKICAgICAgICAgcyA9IGNfZG91YmxlLl9fY3R5cGVfbGVfXyhtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLnZhbHVlLCBtYXRoLnBpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oc3RydWN0LnBhY2soIjxkIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxkIiwgbWF0aC5waSkpLCBiaW4ocykpCiAgICAgICAgIHMgPSBjX2RvdWJsZS5fX2N0eXBlX2JlX18obWF0aC5waSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocy52YWx1ZSwgbWF0aC5waSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+ZCIsIG1hdGgucGkpKSwgYmluKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+ZCIsIG1hdGgucGkpKSwgYmluKHMpKQogCiAgICAgZGVmIHRlc3RfZW5kaWFuX290aGVyKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19ieXRlLl9fY3R5cGVfbGVfXyBpcyBjX2J5dGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX2J5dGUuX19jdHlwZV9iZV9fIGlzIGNfYnl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfYnl0ZS5fX2N0eXBlX2xlX18gaXMgY19ieXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19ieXRlLl9fY3R5cGVfYmVfXyBpcyBjX2J5dGUpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfdWJ5dGUuX19jdHlwZV9sZV9fIGlzIGNfdWJ5dGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3VieXRlLl9fY3R5cGVfYmVfXyBpcyBjX3VieXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY191Ynl0ZS5fX2N0eXBlX2xlX18gaXMgY191Ynl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfdWJ5dGUuX19jdHlwZV9iZV9fIGlzIGNfdWJ5dGUpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfY2hhci5fX2N0eXBlX2xlX18gaXMgY19jaGFyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19jaGFyLl9fY3R5cGVfYmVfXyBpcyBjX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2NoYXIuX19jdHlwZV9sZV9fIGlzIGNfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhci5fX2N0eXBlX2JlX18gaXMgY19jaGFyKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X2ZpZWxkc18xKHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgpAQCAtMjE5LDcgKzIxOSw3IEBACiAKICAgICAgICAgczEgPSBTKDB4MTIsIDB4MTIzNCwgMHgxMjM0NTY3OCwgMy4xNCkKICAgICAgICAgczIgPSBzdHJ1Y3QucGFjayhmbXQsIDB4MTIsIDB4MTIzNCwgMHgxMjM0NTY3OCwgMy4xNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmluKHMxKSwgYmluKHMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oczEpLCBiaW4oczIpKQogCiAgICAgZGVmIHRlc3RfdW5hbGlnbmVkX25vbm5hdGl2ZV9zdHJ1Y3RfZmllbGRzKHNlbGYpOgogICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAgICAgICAgIHMxLmkgPSAweDEyMzQ1Njc4CiAgICAgICAgIHMxLmQgPSAzLjE0CiAgICAgICAgIHMyID0gc3RydWN0LnBhY2soZm10LCAweDEyLCAweDEyMzQsIDB4MTIzNDU2NzgsIDMuMTQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJpbihzMSksIGJpbihzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMxKSwgYmluKHMyKSkKIAogICAgIGRlZiB0ZXN0X3VuYWxpZ25lZF9uYXRpdmVfc3RydWN0X2ZpZWxkcyhzZWxmKToKICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICBzMS5pID0gMHgxMjM0NTY3OAogICAgICAgICBzMS5kID0gMy4xNAogICAgICAgICBzMiA9IHN0cnVjdC5wYWNrKGZtdCwgMHgxMiwgMHgxMjM0LCAweDEyMzQ1Njc4LCAzLjE0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChiaW4oczEpLCBiaW4oczIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzMSksIGJpbihzMikpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKaW5kZXggNzE3NzExYy4uNjIxYTAxOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQpAQCAtMTcsMTggKzE3LDE4IEBACiAgICAgICAgIFBST1RPID0gc2VsZi5mdW5jdHlwZS5pbV9mdW5jKHR5cCwgdHlwKQogICAgICAgICByZXN1bHQgPSBQUk9UTyhzZWxmLmNhbGxiYWNrKShhcmcpCiAgICAgICAgIGlmIHR5cCA9PSBjX2Zsb2F0OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwocmVzdWx0LCBhcmcsIHBsYWNlcz01KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXN1bHQsIGFyZywgcGxhY2VzPTUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmdvdF9hcmdzLCAoYXJnLCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nb3RfYXJncywgKGFyZywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGFyZykKIAogICAgICAgICBQUk9UTyA9IHNlbGYuZnVuY3R5cGUuaW1fZnVuYyh0eXAsIGNfYnl0ZSwgdHlwKQogICAgICAgICByZXN1bHQgPSBQUk9UTyhzZWxmLmNhbGxiYWNrKSgtMywgYXJnKQogICAgICAgICBpZiB0eXAgPT0gY19mbG9hdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKHJlc3VsdCwgYXJnLCBwbGFjZXM9NSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmVzdWx0LCBhcmcsIHBsYWNlcz01KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5nb3RfYXJncywgKC0zLCBhcmcpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCBhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ290X2FyZ3MsICgtMywgYXJnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBhcmcpCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTYxLDEwICs2MSwxNiBAQAogICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZywgNDIpCiAKICAgICBkZWYgdGVzdF9sb25nbG9uZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHNvbWUgNjQtYml0IHZhbHVlcywgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmdsb25nLCA1OTQ4MjkxNzU3MjQ1Mjc3NDY3KQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19sb25nbG9uZywgLTUyMjkzODg5MDk3ODQxOTA1ODApCiAgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmdsb25nLCA0MikKICAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2xvbmcsIC00MikKIAogICAgIGRlZiB0ZXN0X3Vsb25nbG9uZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHNvbWUgNjQtYml0IHZhbHVlcywgd2l0aCBhbmQgd2l0aG91dCBtc2Igc2V0LgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZ2xvbmcsIDEwOTU1NDEyMjQyMTcwMzM5NzgyKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZ2xvbmcsIDM2NjU4ODU0OTk4NDExNjc0NTgpCiAgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3Vsb25nbG9uZywgNDIpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTEwMyw3ICsxMDksNyBAQAogICAgICAgICAgICAgIyAuLi5idXQgdGhpcyBjYWxsIGRvZXNuJ3QgbGVhayBhbnkgbW9yZS4gIFdoZXJlIGlzIHRoZSByZWZjb3VudD8KICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHlwZShweV9vYmplY3QsIG8pCiAgICAgICAgICAgICBhZnRlciA9IGdyYyhvKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKGFmdGVyLCBvKSwgKGJlZm9yZSwgbykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhZnRlciwgbyksIChiZWZvcmUsIG8pKQogCiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfcmVzdHlwZV8xKHNlbGYpOgogICAgICAgICAjIE9ubHkgImZ1bmRhbWVudGFsIiByZXN1bHQgdHlwZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FsbGJhY2sKQEAgLTE2NCw3ICsxNzAsNzcgQEAKICAgICAgICAgcmVzdWx0ID0gaW50ZWdyYXRlKDAuMCwgMS4wLCBDQUxMQkFDSyhmdW5jKSwgMTApCiAgICAgICAgIGRpZmYgPSBhYnMocmVzdWx0IC0gMS4vMy4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZmYgPCAwLjAxLCAiJXMgbm90IGxlc3MgdGhhbiAwLjAxIiAlIGRpZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkaWZmLCAwLjAxLCAiJXMgbm90IGxlc3MgdGhhbiAwLjAxIiAlIGRpZmYpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV84OTU5X2Eoc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzLnV0aWwgaW1wb3J0IGZpbmRfbGlicmFyeQorICAgICAgICBsaWJjX3BhdGggPSBmaW5kX2xpYnJhcnkoImMiKQorICAgICAgICBpZiBub3QgbGliY19wYXRoOgorICAgICAgICAgICAgcmV0dXJuICMgY2Fubm90IHRlc3QKKyAgICAgICAgbGliYyA9IENETEwobGliY19wYXRoKQorCisgICAgICAgIEBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoY19pbnQpLCBQT0lOVEVSKGNfaW50KSkKKyAgICAgICAgZGVmIGNtcF9mdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGFbMF0gLSBiWzBdCisKKyAgICAgICAgYXJyYXkgPSAoY19pbnQgKiA1KSg1LCAxLCA5OSwgNywgMzMpCisKKyAgICAgICAgbGliYy5xc29ydChhcnJheSwgbGVuKGFycmF5KSwgc2l6ZW9mKGNfaW50KSwgY21wX2Z1bmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXlbOl0sIFsxLCA1LCA3LCAzMywgOTldKQorCisgICAgdHJ5OgorICAgICAgICBXSU5GVU5DVFlQRQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF9pc3N1ZV84OTU5X2Ioc2VsZik6CisgICAgICAgICAgICBmcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgQk9PTCwgSFdORCwgTFBBUkFNCisgICAgICAgICAgICBnbG9iYWwgd2luZG93Q291bnQKKyAgICAgICAgICAgIHdpbmRvd0NvdW50ID0gMAorCisgICAgICAgICAgICBAV0lORlVOQ1RZUEUoQk9PTCwgSFdORCwgTFBBUkFNKQorICAgICAgICAgICAgZGVmIEVudW1XaW5kb3dzQ2FsbGJhY2tGdW5jKGh3bmQsIGxQYXJhbSk6CisgICAgICAgICAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50CisgICAgICAgICAgICAgICAgd2luZG93Q291bnQgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlICNBbGxvdyB3aW5kb3dzIHRvIGtlZXAgZW51bWVyYXRpbmcKKworICAgICAgICAgICAgd2luZGxsLnVzZXIzMi5FbnVtV2luZG93cyhFbnVtV2luZG93c0NhbGxiYWNrRnVuYywgMCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3JlZ2lzdGVyX2ludChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODI3NTogYnVnZ3kgaGFuZGxpbmcgb2YgY2FsbGJhY2sgYXJncyB1bmRlciBXaW42NAorICAgICAgICAjIE5PVEU6IHNob3VsZCBiZSBydW4gb24gcmVsZWFzZSBidWlsZHMgYXMgd2VsbAorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgQ0FMTEJBQ0sgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCkKKyAgICAgICAgIyBBbGwgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggaXRzIGFyZ3Mgc3F1YXJlZAorICAgICAgICBmdW5jID0gZGxsLl90ZXN0ZnVuY19jYmtfcmVnX2ludAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgQ0FMTEJBQ0spCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfaW50CisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGEsIGIsIGMsIGQsIGUpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlCisKKyAgICAgICAgcmVzdWx0ID0gZnVuYygyLCAzLCA0LCA1LCA2LCBDQUxMQkFDSyhjYWxsYmFjaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBjYWxsYmFjaygyKjIsIDMqMywgNCo0LCA1KjUsIDYqNikpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19yZWdpc3Rlcl9kb3VibGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzgyNzU6IGJ1Z2d5IGhhbmRsaW5nIG9mIGNhbGxiYWNrIGFyZ3MgdW5kZXIgV2luNjQKKyAgICAgICAgIyBOT1RFOiBzaG91bGQgYmUgcnVuIG9uIHJlbGVhc2UgYnVpbGRzIGFzIHdlbGwKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIENBTExCQUNLID0gQ0ZVTkNUWVBFKGNfZG91YmxlLCBjX2RvdWJsZSwgY19kb3VibGUsIGNfZG91YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2RvdWJsZSwgY19kb3VibGUpCisgICAgICAgICMgQWxsIHRoaXMgZnVuY3Rpb24gZG9lcyBpcyBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIGl0cyBhcmdzIHNxdWFyZWQKKyAgICAgICAgZnVuYyA9IGRsbC5fdGVzdGZ1bmNfY2JrX3JlZ19kb3VibGUKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IChjX2RvdWJsZSwgY19kb3VibGUsIGNfZG91YmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlLCBjX2RvdWJsZSwgQ0FMTEJBQ0spCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfZG91YmxlCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGEsIGIsIGMsIGQsIGUpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlCisKKyAgICAgICAgcmVzdWx0ID0gZnVuYygxLjEsIDIuMiwgMy4zLCA0LjQsIDUuNSwgQ0FMTEJBQ0soY2FsbGJhY2spKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygxLjEqMS4xLCAyLjIqMi4yLCAzLjMqMy4zLCA0LjQqNC40LCA1LjUqNS41KSkKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CmluZGV4IDIyYzY0NzUuLjkwNmZmZmMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQpAQCAtOSwxNSArOSwxNSBAQAogCiAgICAgICAgICMgY2FzdGluZyBhbiBhcnJheSB0byBhIHBvaW50ZXIgd29ya3MuCiAgICAgICAgIHB0ciA9IGNhc3QoYXJyYXksIFBPSU5URVIoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzQyLCAxNywgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSgzKV0sIFs0MiwgMTcsIDJdKQogCiAgICAgICAgIGlmIDIqc2l6ZW9mKGNfc2hvcnQpID09IHNpemVvZihjX2ludCk6CiAgICAgICAgICAgICBwdHIgPSBjYXN0KGFycmF5LCBQT0lOVEVSKGNfc2hvcnQpKQogICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDYpXSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoNildLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0MiwgMCwgMTcsIDAsIDIsIDBdKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDYpXSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoNildLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCA0MiwgMCwgMTcsIDAsIDJdKQogCiAgICAgZGVmIHRlc3RfYWRkcmVzczJwb2ludGVyKHNlbGYpOgpAQCAtMjUsNTQgKzI1LDU0IEBACiAKICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3NvZihhcnJheSkKICAgICAgICAgcHRyID0gY2FzdChjX3ZvaWRfcChhZGRyZXNzKSwgUE9JTlRFUihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzQyLCAxNywgMl0pCiAKICAgICAgICAgcHRyID0gY2FzdChhZGRyZXNzLCBQT0lOVEVSKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSgzKV0sIFs0MiwgMTcsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKIAogICAgIGRlZiB0ZXN0X3AyYV9vYmplY3RzKHNlbGYpOgogICAgICAgICBhcnJheSA9IChjX2NoYXJfcCAqIDUpKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYXJyYXkuX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkuX29iamVjdHMsIE5vbmUpCiAgICAgICAgIGFycmF5WzBdID0gImZvbyBiYXIiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFycmF5Ll9vYmplY3RzLCB7JzAnOiAiZm9vIGJhciJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFycmF5Ll9vYmplY3RzLCB7JzAnOiAiZm9vIGJhciJ9KQogCiAgICAgICAgIHAgPSBjYXN0KGFycmF5LCBQT0lOVEVSKGNfY2hhcl9wKSkKICAgICAgICAgIyBhcnJheSBhbmQgcCBzaGFyZSBhIGNvbW1vbiBfb2JqZWN0cyBhdHRyaWJ1dGUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHAuX29iamVjdHMgaXMgYXJyYXkuX29iamVjdHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFycmF5Ll9vYmplY3RzLCB7JzAnOiAiZm9vIGJhciIsIGlkKGFycmF5KTogYXJyYXl9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5fb2JqZWN0cyBpcyBhcnJheS5fb2JqZWN0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheS5fb2JqZWN0cywgeycwJzogImZvbyBiYXIiLCBpZChhcnJheSk6IGFycmF5fSkKICAgICAgICAgcFswXSA9ICJzcGFtIHNwYW0iCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHAuX29iamVjdHMsIHsnMCc6ICJzcGFtIHNwYW0iLCBpZChhcnJheSk6IGFycmF5fSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGFycmF5Ll9vYmplY3RzIGlzIHAuX29iamVjdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fb2JqZWN0cywgeycwJzogInNwYW0gc3BhbSIsIGlkKGFycmF5KTogYXJyYXl9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJyYXkuX29iamVjdHMgaXMgcC5fb2JqZWN0cykKICAgICAgICAgcFsxXSA9ICJmb28gYmFyIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwLl9vYmplY3RzLCB7JzEnOiAnZm9vIGJhcicsICcwJzogInNwYW0gc3BhbSIsIGlkKGFycmF5KTogYXJyYXl9KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYXJyYXkuX29iamVjdHMgaXMgcC5fb2JqZWN0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9vYmplY3RzLCB7JzEnOiAnZm9vIGJhcicsICcwJzogInNwYW0gc3BhbSIsIGlkKGFycmF5KTogYXJyYXl9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJyYXkuX29iamVjdHMgaXMgcC5fb2JqZWN0cykKIAogICAgIGRlZiB0ZXN0X290aGVyKHNlbGYpOgogICAgICAgICBwID0gY2FzdCgoY19pbnQgKiA0KSgxLCAyLCAzLCA0KSwgUE9JTlRFUihjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjRdLCBbMSwyLCAzLCA0XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDpdLCBbMSwgMiwgMywgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbMzotMTotMV0sIFs0LCAzLCAyLCAxXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDozXSwgWzEsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjRdLCBbMSwyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzM6LTE6LTFdLCBbNCwgMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDozXSwgWzEsIDRdKQogICAgICAgICBjX2ludCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjRdLCBbMSwgMiwgMywgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjQ6XSwgWzEsIDIsIDMsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzM6LTE6LTFdLCBbNCwgMywgMiwgMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjQ6M10sIFsxLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0XSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjQ6XSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMzotMTotMV0sIFs0LCAzLCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCiAgICAgICAgIHBbMl0gPSA5NgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6NDpdLCBbMSwgMiwgOTYsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzM6LTE6LTFdLCBbNCwgOTYsIDIsIDFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0OjNdLCBbMSwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NF0sIFsxLCAyLCA5NiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDpdLCBbMSwgMiwgOTYsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMzotMTotMV0sIFs0LCA5NiwgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDozXSwgWzEsIDRdKQogICAgICAgICBjX2ludCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjRdLCBbMSwgMiwgOTYsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbMzotMTotMV0sIFs0LCA5NiwgMiwgMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjQ6M10sIFsxLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFszOi0xOi0xXSwgWzQsIDk2LCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCiAKICAgICBkZWYgdGVzdF9jaGFyX3Aoc2VsZik6CiAgICAgICAgICMgVGhpcyBkaWRuJ3Qgd29yazogYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uCiAgICAgICAgIHMgPSBjX2NoYXJfcCgiaGlobyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfY2hhcl9wKS52YWx1ZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGNhc3QocywgY192b2lkX3ApLCBjX2NoYXJfcCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWhvIikKIAogICAgIHRyeToKQEAgLTgyLDcgKzgyLDcgQEAKICAgICBlbHNlOgogICAgICAgICBkZWYgdGVzdF93Y2hhcl9wKHNlbGYpOgogICAgICAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYXN0KGNhc3QocywgY192b2lkX3ApLCBjX3djaGFyX3ApLnZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGNhc3QocywgY192b2lkX3ApLCBjX3djaGFyX3ApLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CmluZGV4IDhmOTdmYzQuLjQ5M2NiZTkgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKQEAgLTE3LDE3NiArMTcsMTc2IEBACiAgICAgZGVmIHRlc3RfYnl0ZShzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2IucmVzdHlwZSA9IGNfYnl0ZQogICAgICAgICBzZWxmLl9kbGwudGZfYi5hcmd0eXBlcyA9IChjX2J5dGUsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYigtMTI2KSwgLTQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTEyNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYigtMTI2KSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMTI2KQogCiAgICAgZGVmIHRlc3RfYnl0ZV9wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYmIucmVzdHlwZSA9IGNfYnl0ZQogICAgICAgICBzZWxmLl9kbGwudGZfYmIuYXJndHlwZXMgPSAoY19ieXRlLCBjX2J5dGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iYigwLCAtMTI2KSwgLTQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTEyNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmIoMCwgLTEyNiksIC00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTEyNikKIAogICAgIGRlZiB0ZXN0X3VieXRlKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfQi5yZXN0eXBlID0gY191Ynl0ZQogICAgICAgICBzZWxmLl9kbGwudGZfQi5hcmd0eXBlcyA9IChjX3VieXRlLCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX0IoMjU1KSwgODUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0IoMjU1KSwgODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDI1NSkKIAogICAgIGRlZiB0ZXN0X3VieXRlX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iQi5yZXN0eXBlID0gY191Ynl0ZQogICAgICAgICBzZWxmLl9kbGwudGZfYkIuYXJndHlwZXMgPSAoY19ieXRlLCBjX3VieXRlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYkIoMCwgMjU1KSwgODUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JCKDAsIDI1NSksIDg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCAyNTUpCiAKICAgICBkZWYgdGVzdF9zaG9ydChzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2gucmVzdHlwZSA9IGNfc2hvcnQKICAgICAgICAgc2VsZi5fZGxsLnRmX2guYXJndHlwZXMgPSAoY19zaG9ydCwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9oKC0zMjc2NiksIC0xMDkyMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC0zMjc2NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfaCgtMzI3NjYpLCAtMTA5MjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0zMjc2NikKIAogICAgIGRlZiB0ZXN0X3Nob3J0X3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iaC5yZXN0eXBlID0gY19zaG9ydAogICAgICAgICBzZWxmLl9kbGwudGZfYmguYXJndHlwZXMgPSAoY19ieXRlLCBjX3Nob3J0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYmgoMCwgLTMyNzY2KSwgLTEwOTIyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iaCgwLCAtMzI3NjYpLCAtMTA5MjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0zMjc2NikKIAogICAgIGRlZiB0ZXN0X3VzaG9ydChzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX0gucmVzdHlwZSA9IGNfdXNob3J0CiAgICAgICAgIHNlbGYuX2RsbC50Zl9ILmFyZ3R5cGVzID0gKGNfdXNob3J0LCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX0goNjU1MzUpLCAyMTg0NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDY1NTM1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9IKDY1NTM1KSwgMjE4NDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDY1NTM1KQogCiAgICAgZGVmIHRlc3RfdXNob3J0X3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iSC5yZXN0eXBlID0gY191c2hvcnQKICAgICAgICAgc2VsZi5fZGxsLnRmX2JILmFyZ3R5cGVzID0gKGNfYnl0ZSwgY191c2hvcnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iSCgwLCA2NTUzNSksIDIxODQ1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgNjU1MzUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JIKDAsIDY1NTM1KSwgMjE4NDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDY1NTM1KQogCiAgICAgZGVmIHRlc3RfaW50KHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfaS5yZXN0eXBlID0gY19pbnQKICAgICAgICAgc2VsZi5fZGxsLnRmX2kuYXJndHlwZXMgPSAoY19pbnQsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfaSgtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfaSgtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQogCiAgICAgZGVmIHRlc3RfaW50X3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iaS5yZXN0eXBlID0gY19pbnQKICAgICAgICAgc2VsZi5fZGxsLnRmX2JpLmFyZ3R5cGVzID0gKGNfYnl0ZSwgY19pbnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iaSgwLCAtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmkoMCwgLTIxNDc0ODM2NDYpLCAtNzE1ODI3ODgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKIAogICAgIGRlZiB0ZXN0X3VpbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9JLnJlc3R5cGUgPSBjX3VpbnQKICAgICAgICAgc2VsZi5fZGxsLnRmX0kuYXJndHlwZXMgPSAoY191aW50LCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX0koNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9JKDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQogCiAgICAgZGVmIHRlc3RfdWludF9wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYkkucmVzdHlwZSA9IGNfdWludAogICAgICAgICBzZWxmLl9kbGwudGZfYkkuYXJndHlwZXMgPSAoY19ieXRlLCBjX3VpbnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iSSgwLCA0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JJKDAsIDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQogCiAgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2wucmVzdHlwZSA9IGNfbG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfbC5hcmd0eXBlcyA9IChjX2xvbmcsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfbCgtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfbCgtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQogCiAgICAgZGVmIHRlc3RfbG9uZ19wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYmwucmVzdHlwZSA9IGNfbG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfYmwuYXJndHlwZXMgPSAoY19ieXRlLCBjX2xvbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9ibCgwLCAtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmwoMCwgLTIxNDc0ODM2NDYpLCAtNzE1ODI3ODgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKIAogICAgIGRlZiB0ZXN0X3Vsb25nKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfTC5yZXN0eXBlID0gY191bG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfTC5hcmd0eXBlcyA9IChjX3Vsb25nLCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX0woNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9MKDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCA0Mjk0OTY3Mjk1KQogCiAgICAgZGVmIHRlc3RfdWxvbmdfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JMLnJlc3R5cGUgPSBjX3Vsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iTC5hcmd0eXBlcyA9IChjX2NoYXIsIGNfdWxvbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iTCgnICcsIDQyOTQ5NjcyOTUpLCAxNDMxNjU1NzY1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkwoJyAnLCA0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKIAogICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfcS5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfcS5hcmd0eXBlcyA9IChjX2xvbmdsb25nLCApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9xKC05MjIzMzcyMDM2ODU0Nzc1ODA2KSwgLTMwNzQ0NTczNDU2MTgyNTg2MDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtOTIyMzM3MjAzNjg1NDc3NTgwNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfcSgtOTIyMzM3MjAzNjg1NDc3NTgwNiksIC0zMDc0NDU3MzQ1NjE4MjU4NjAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtOTIyMzM3MjAzNjg1NDc3NTgwNikKIAogICAgIGRlZiB0ZXN0X2xvbmdsb25nX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9icS5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfYnEuYXJndHlwZXMgPSAoY19ieXRlLCBjX2xvbmdsb25nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYnEoMCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDYpLCAtMzA3NDQ1NzM0NTYxODI1ODYwMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC05MjIzMzcyMDM2ODU0Nzc1ODA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9icSgwLCAtOTIyMzM3MjAzNjg1NDc3NTgwNiksIC0zMDc0NDU3MzQ1NjE4MjU4NjAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtOTIyMzM3MjAzNjg1NDc3NTgwNikKIAogICAgIGRlZiB0ZXN0X3Vsb25nbG9uZyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX1EucmVzdHlwZSA9IGNfdWxvbmdsb25nCiAgICAgICAgIHNlbGYuX2RsbC50Zl9RLmFyZ3R5cGVzID0gKGNfdWxvbmdsb25nLCApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9RKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSwgNjE0ODkxNDY5MTIzNjUxNzIwNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9RKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSwgNjE0ODkxNDY5MTIzNjUxNzIwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpCiAKICAgICBkZWYgdGVzdF91bG9uZ2xvbmdfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JRLnJlc3R5cGUgPSBjX3Vsb25nbG9uZwogICAgICAgICBzZWxmLl9kbGwudGZfYlEuYXJndHlwZXMgPSAoY19ieXRlLCBjX3Vsb25nbG9uZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JRKDAsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSwgNjE0ODkxNDY5MTIzNjUxNzIwNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5VKCksIDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iUSgwLCAxODQ0Njc0NDA3MzcwOTU1MTYxNSksIDYxNDg5MTQ2OTEyMzY1MTcyMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9mLnJlc3R5cGUgPSBjX2Zsb2F0CiAgICAgICAgIHNlbGYuX2RsbC50Zl9mLmFyZ3R5cGVzID0gKGNfZmxvYXQsKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfZigtNDIuKSwgLTE0LikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfZigtNDIuKSwgLTE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTQyKQogCiAgICAgZGVmIHRlc3RfZmxvYXRfcGx1cyhzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2JmLnJlc3R5cGUgPSBjX2Zsb2F0CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iZi5hcmd0eXBlcyA9IChjX2J5dGUsIGNfZmxvYXQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9iZigwLCAtNDIuKSwgLTE0LikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIC00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmYoMCwgLTQyLiksIC0xNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC00MikKIAogICAgIGRlZiB0ZXN0X2RvdWJsZShzZWxmKToKICAgICAgICAgc2VsZi5fZGxsLnRmX2QucmVzdHlwZSA9IGNfZG91YmxlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9kLmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2QoNDIuKSwgMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2QoNDIuKSwgMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKIAogICAgIGRlZiB0ZXN0X2RvdWJsZV9wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYmQucmVzdHlwZSA9IGNfZG91YmxlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iZC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfZG91YmxlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfYmQoMCwgNDIuKSwgMTQuKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JkKDAsIDQyLiksIDE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCiAKICAgICBkZWYgdGVzdF9sb25nZG91YmxlKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfRC5yZXN0eXBlID0gY19sb25nZG91YmxlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9ELmFyZ3R5cGVzID0gKGNfbG9uZ2RvdWJsZSwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50Zl9EKDQyLiksIDE0LikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9EKDQyLiksIDE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCiAKICAgICBkZWYgdGVzdF9sb25nZG91YmxlX3BsdXMoc2VsZik6CiAgICAgICAgIHNlbGYuX2RsbC50Zl9iRC5yZXN0eXBlID0gY19sb25nZG91YmxlCiAgICAgICAgIHNlbGYuX2RsbC50Zl9iRC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfbG9uZ2RvdWJsZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2JEKDAsIDQyLiksIDE0LikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iRCgwLCA0Mi4pLCAxNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIDQyKQogCiAgICAgZGVmIHRlc3RfY2FsbHdpdGhyZXN1bHQoc2VsZik6CiAgICAgICAgIGRlZiBwcm9jZXNzX3Jlc3VsdChyZXN1bHQpOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIDIKICAgICAgICAgc2VsZi5fZGxsLnRmX2kucmVzdHlwZSA9IHByb2Nlc3NfcmVzdWx0CiAgICAgICAgIHNlbGYuX2RsbC50Zl9pLmFyZ3R5cGVzID0gKGNfaW50LCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5fZGxsLnRmX2koNDIpLCAyOCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIDQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudGZfaSgtNDIpLCAtMjgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuUygpLCAtNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2koNDIpLCAyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2koLTQyKSwgLTI4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCiAKICAgICBkZWYgdGVzdF92b2lkKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudHZfaS5yZXN0eXBlID0gTm9uZQogICAgICAgICBzZWxmLl9kbGwudHZfaS5hcmd0eXBlcyA9IChjX2ludCwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuX2RsbC50dl9pKDQyKSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5TKCksIDQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLl9kbGwudHZfaSgtNDIpLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLlMoKSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50dl9pKDQyKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnR2X2koLTQyKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTQyKQogCiAjIFRoZSBmb2xsb3dpbmcgcmVwZWF0ZXMgdGhlIGFib3ZlIHRlc3RzIHdpdGggc3RkY2FsbCBmdW5jdGlvbnMgKHdoZXJlCiAjIHRoZXkgYXJlIGF2YWlsYWJsZSkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NoZWNrcmV0dmFsLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKaW5kZXggZDE1YmQyZS4uMDFjY2M1NyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKQEAgLTE0LDE2ICsxNCwxNiBAQAogCiAgICAgICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKICAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKIAogICAgICAgICBkbGwuX3Rlc3RmdW5jX3BfcC5yZXN0eXBlID0gQ0hFQ0tFRAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiNDIiLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjQyIiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQogCiAgICAgICAgIGRsbC5fdGVzdGZ1bmNfcF9wLnJlc3R5cGUgPSBOb25lCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKICAgICAgICAgZGVsIGRsbC5fdGVzdGZ1bmNfcF9wLnJlc3R5cGUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQogCiAgICAgdHJ5OgogICAgICAgICBvbGVkbGwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhXaW5kb3dzRXJyb3IsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Vycm5vLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKaW5kZXggYjgwNjU2Yi4uYzdhNWJmMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKQEAgLTEsMjcgKzEsMzIgQEAKIGltcG9ydCB1bml0dGVzdCwgb3MsIGVycm5vCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgogZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Ci1pbXBvcnQgdGhyZWFkaW5nCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CiAgICAgICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCi0gICAgICAgIGlmIGxpYmNfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPVRydWUpCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6Ci0gICAgICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5fb3BlbgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLm9wZW4KKyAgICAgICAgaWYgbGliY19uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIGZpbmQgQyBsaWJyYXJ5IikKKyAgICAgICAgbGliYyA9IENETEwobGliY19uYW1lLCB1c2VfZXJybm89VHJ1ZSkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5fb3BlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5vcGVuCiAKLSAgICAgICAgICAgIGxpYmNfb3Blbi5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2ludAorICAgICAgICBsaWJjX29wZW4uYXJndHlwZXMgPSBjX2NoYXJfcCwgY19pbnQKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGliY19vcGVuKCIiLCAwKSwgLTEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfZXJybm8oKSwgZXJybm8uRU5PRU5UKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYmNfb3BlbigiIiwgMCksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJubygpLCBlcnJuby5FTk9FTlQpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNldF9lcnJubygzMiksIGVycm5vLkVOT0VOVCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdldF9lcnJubygpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfZXJybm8oMzIpLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIDMyKQogCi0KKyAgICAgICAgaWYgdGhyZWFkaW5nOgogICAgICAgICAgICAgZGVmIF93b3JrZXIoKToKICAgICAgICAgICAgICAgICBzZXRfZXJybm8oMCkKIApAQCAtMzEsNDYgKzM2LDQ1IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5vcGVuCiAgICAgICAgICAgICAgICAgbGliY19vcGVuLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfaW50Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGliY19vcGVuKCIiLCAwKSwgLTEpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2V0X2Vycm5vKCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaWJjX29wZW4oIiIsIDApLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJubygpLCAwKQogCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3dvcmtlcikKICAgICAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICAgICAgdC5qb2luKCkKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2V0X2Vycm5vKCksIDMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMzIpCiAgICAgICAgICAgICBzZXRfZXJybm8oMCkKIAotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICdUZXN0IHNwZWNpZmljIHRvIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X0dldExhc3RFcnJvcihzZWxmKToKKyAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPVRydWUpCisgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVBCisgICAgICAgIEdldE1vZHVsZUhhbmRsZS5hcmd0eXBlcyA9IFtjX3djaGFyX3BdCiAKLSAgICAgICAgZGVmIHRlc3RfR2V0TGFzdEVycm9yKHNlbGYpOgotICAgICAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPVRydWUpCi0gICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUgPSBkbGwuR2V0TW9kdWxlSGFuZGxlQQotICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlLmFyZ3R5cGVzID0gW2Nfd2NoYXJfcF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBHZXRNb2R1bGVIYW5kbGUoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDEyNikKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgR2V0TW9kdWxlSGFuZGxlKCJmb28iKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdldF9sYXN0X2Vycm9yKCksIDEyNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfbGFzdF9lcnJvcigzMiksIDEyNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAzMikKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2V0X2xhc3RfZXJyb3IoMzIpLCAxMjYpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAzMikKLQotICAgICAgICAgICAgZGVmIF93b3JrZXIoKToKLSAgICAgICAgICAgICAgICBzZXRfbGFzdF9lcnJvcigwKQotCi0gICAgICAgICAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPUZhbHNlKQotICAgICAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlLmFyZ3R5cGVzID0gW2Nfd2NoYXJfcF0KLSAgICAgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUoImJhciIpCi0KLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAwKQotCi0gICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3dvcmtlcikKLSAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgdC5qb2luKCkKLQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMzIpCi0KKyAgICAgICAgZGVmIF93b3JrZXIoKToKICAgICAgICAgICAgIHNldF9sYXN0X2Vycm9yKDApCiAKKyAgICAgICAgICAgIGRsbCA9IFdpbkRMTCgia2VybmVsMzIiLCB1c2VfbGFzdF9lcnJvcj1GYWxzZSkKKyAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUuYXJndHlwZXMgPSBbY193Y2hhcl9wXQorICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlKCJiYXIiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDApCisKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV93b3JrZXIpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMzIpCisKKyAgICAgICAgc2V0X2xhc3RfZXJyb3IoMCkKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CmluZGV4IGVkMTI5N2QuLjc3ZTc4OWYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQpAQCAtNzYsNyArNzYsNyBAQAogIyMgICAgICAgICAgICBzcXJ0ID0gbGlibS5zcXJ0CiAjIyAgICAgICAgICAgIHNxcnQuYXJndHlwZXMgPSAoY19kb3VibGUsKQogIyMgICAgICAgICAgICBzcXJ0LnJlc3R5cGUgPSBjX2RvdWJsZQotIyMgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FydCgyKSwgbWF0aC5zcXJ0KDIpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Zyb21idWZmZXIucHkKaW5kZXggNDI4NWU0MC4uNjI0ZmI3MCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5CkBAIC0xNiwxNCArMTYsMTQgQEAKIAogICAgICAgICB5ID0gWC5mcm9tX2J1ZmZlcihhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuY19pbnQsIGFbMF0pCi0gICAgICAgIHNlbGYuZmFpbElmKHkuaW5pdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeS5pbml0X2NhbGxlZCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGEudG9saXN0KCkpCiAKICAgICAgICAgYVswXSwgYVstMV0gPSAyMDAsIC0yMDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGluIHguX29iamVjdHMudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIHguX29iamVjdHMudmFsdWVzKCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY19pbnQuZnJvbV9idWZmZXIsIGEsIC0xKQpAQCAtNDksNyArNDksNyBAQAogCiAgICAgICAgIHkgPSBYLmZyb21fYnVmZmVyX2NvcHkoYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmNfaW50LCBhWzBdKQotICAgICAgICBzZWxmLmZhaWxJZih5LmluaXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHkuaW5pdF9jYWxsZWQpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCByYW5nZSgxNikpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmNwdHIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jcHRyLnB5CmluZGV4IDdlYTg3M2YuLjk5YWY1ZWQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmNwdHIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3B0ci5weQpAQCAtMTgsMTAgKzE4LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gbGVuKGFyZ3MpCiAKICAgICAgICAgeCA9IFgoZnVuYykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5yZXN0eXBlLCBjX2ludCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5hcmd0eXBlcywgKGNfaW50LCBjX2ludCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih4KSwgc2l6ZW9mKGNfdm9pZHApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3ZvaWRwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJlc3R5cGUsIGNfaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYXJndHlwZXMsIChjX2ludCwgY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgc2l6ZW9mKGNfdm9pZHApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfdm9pZHApKQogCiAgICAgZGVmIHRlc3RfZmlyc3Qoc2VsZik6CiAgICAgICAgIFN0ZENhbGxiYWNrID0gV0lORlVOQ1RZUEUoY19pbnQsIGNfaW50LCBjX2ludCkKQEAgLTMzLDEyICszMywxMiBAQAogICAgICAgICBzID0gU3RkQ2FsbGJhY2soZnVuYykKICAgICAgICAgYyA9IENkZWNsQ2FsbGJhY2soZnVuYykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzKDEsIDIpLCAzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjKDEsIDIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMoMSwgMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygxLCAyKSwgMykKICAgICAgICAgIyBUaGUgZm9sbG93aW5nIG5vIGxvbmdlciByYWlzZXMgYSBUeXBlRXJyb3IgLSBpdCBpcyBub3cKICAgICAgICAgIyBwb3NzaWJsZSwgYXMgaW4gQywgdG8gY2FsbCBjZGVjbCBmdW5jdGlvbnMgd2l0aCBtb3JlIHBhcmFtZXRlcnMuCiAgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMsIDEsIDIsIDMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGMoMSwgMiwgMywgNCwgNSwgNiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygxLCAyLCAzLCA0LCA1LCA2KSwgMykKICAgICAgICAgaWYgbm90IFdJTkZVTkNUWVBFIGlzIENGVU5DVFlQRSBhbmQgb3MubmFtZSAhPSAiY2UiOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLCAxLCAyLCAzKQogCkBAIC03NSw5ICs3NSw5IEBACiAgICAgICAgICMjICAgICAgICAgICAgICAgICAgImxwZm5XbmRQcm9jIiwgV05EUFJPQ18yKHduZHByb2MpKQogICAgICAgICAjIGluc3RlYWQ6CiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKFdORFBST0MgaXMgV05EUFJPQ18yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoV05EUFJPQyBpcyBXTkRQUk9DXzIpCiAgICAgICAgICMgJ3duZGNsYXNzLmxwZm5XbmRQcm9jJyBsZWFrcyA5NCByZWZlcmVuY2VzLiAgV2h5PwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3bmRjbGFzcy5scGZuV25kUHJvYygxLCAyLCAzLCA0KSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod25kY2xhc3MubHBmblduZFByb2MoMSwgMiwgMywgNCksIDEwKQogCiAKICAgICAgICAgZiA9IHduZGNsYXNzLmxwZm5XbmRQcm9jCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGRlbCB3bmRjbGFzcwogICAgICAgICBkZWwgd25kcHJvYwogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGYoMTAsIDExLCAxMiwgMTMpLCA0NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDEwLCAxMSwgMTIsIDEzKSwgNDYpCiAKICAgICBkZWYgdGVzdF9kbGxmdW5jdGlvbnMoc2VsZik6CiAKQEAgLTk3LDggKzk3LDggQEAKICAgICAgICAgc3RyY2hyID0gbGliLm15X3N0cmNocgogICAgICAgICBzdHJjaHIucmVzdHlwZSA9IGNfY2hhcl9wCiAgICAgICAgIHN0cmNoci5hcmd0eXBlcyA9IChjX2NoYXJfcCwgY19jaGFyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoImFiY2RlZmdoaSIsICJiIiksICJiY2RlZmdoaSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocigiYWJjZGVmZ2hpIiwgIngiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZmdoaSIsICJiIiksICJiY2RlZmdoaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWZnaGkiLCAieCIpLCBOb25lKQogCiAKICAgICAgICAgc3RydG9rID0gbGliLm15X3N0cnRvawpAQCAtMTE4LDEwICsxMTgsMTAgQEAKICMjICAgICAgICBiLnZhbHVlID0gcwogCiAjIyAgICAgICAgYiA9IGNfc3RyaW5nKHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cnRvayhiLCAiXG4iKSwgImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJiIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RydG9rKE5vbmUsICJcbiIpLCAiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cnRvayhOb25lLCAiXG4iKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soYiwgIlxuIiksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksIE5vbmUpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkKaW5kZXggOTNkODk1Yi4uNDUzNDgxNSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQpAQCAtNzEsOCArNzEsOCBAQAogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19pX2JoaWxmZAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY193Y2hhciwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCiAgICAgICAgIHJlc3VsdCA9IGYoMSwgdSJ4IiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMTM5KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEzOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKIAogICAgIGRlZiB0ZXN0X3djaGFyX3Jlc3VsdChzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtODMsMzggKzgzLDM4IEBACiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY193Y2hhcgogICAgICAgICByZXN1bHQgPSBmKDAsIDAsIDAsIDAsIDAsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgdSdceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHUnXHgwMCcpCiAKICAgICBkZWYgdGVzdF92b2lkcmVzdWx0KHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY192CiAgICAgICAgIGYucmVzdHlwZSA9IE5vbmUKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2ludCwgY19pbnQsIFBPSU5URVIoY19pbnQpXQogICAgICAgICByZXN1bHQgPSBjX2ludCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGYoMSwgMiwgYnlyZWYocmVzdWx0KSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmKDEsIDIsIGJ5cmVmKHJlc3VsdCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC52YWx1ZSwgMykKIAogICAgIGRlZiB0ZXN0X2ludHJlc3VsdChzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICBmLnJlc3R5cGUgPSBjX2ludAogICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQogCiAgICAgICAgIHJlc3VsdCA9IGYoLTEsIC0yLCAtMywgLTQsIC01LjAsIC02LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0yMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKIAogICAgICAgICAjIElmIHdlIGRlY2xhcmUgdGhlIGZ1bmN0aW9uIHRvIHJldHVybiBhIHNob3J0LAogICAgICAgICAjIGlzIHRoZSBoaWdoIHBhcnQgc3BsaXQgb2ZmPwogICAgICAgICBmLnJlc3R5cGUgPSBjX3Nob3J0CiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCiAKICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCAweDEwMDA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAyMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGludCkKIAogICAgICAgICAjIFlvdSBjYW5ub3QgYXNzaW5nIGNoYXJhY3RlciBmb3JtYXQgY29kZXMgYXMgcmVzdHlwZSBhbnkgbG9uZ2VyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgZiwgInJlc3R5cGUiLCAiaSIpCkBAIC0xMjQsMzYgKzEyNCwzNiBAQAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCiAgICAgICAgIGYucmVzdHlwZSA9IGNfZmxvYXQKICAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAyMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKICAgICAgICAgcmVzdWx0ID0gZigtMSwgLTIsIC0zLCAtNCwgLTUuMCwgLTYuMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKIAogICAgIGRlZiB0ZXN0X2RvdWJsZXJlc3VsdChzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfZF9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICBmLnJlc3R5cGUgPSBjX2RvdWJsZQogICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKIAogICAgICAgICByZXN1bHQgPSBmKC0xLCAtMiwgLTMsIC00LCAtNS4wLCAtNi4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0yMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0yMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQogCiAgICAgZGVmIHRlc3RfbG9uZ2RvdWJsZXJlc3VsdChzZWxmKToKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfRF9iaGlsZkQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfbG9uZ2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nZG91YmxlCiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQogCiAgICAgICAgIHJlc3VsdCA9IGYoLTEsIC0yLCAtMywgLTQsIC01LjAsIC02LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKICAgICBkZWYgdGVzdF9sb25nbG9uZ3Jlc3VsdChzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtMTY0LDIzICsxNjQsMjMgQEAKICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKIAogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19xX2JoaWxmZHEKICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGUsIGNfbG9uZ2xvbmddCiAgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjAsIDIxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgNDIpCiAKICAgICBkZWYgdGVzdF9zdHJpbmdyZXN1bHQoc2VsZik6CiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3BfcAogICAgICAgICBmLmFyZ3R5cGVzID0gTm9uZQogICAgICAgICBmLnJlc3R5cGUgPSBjX2NoYXJfcAogICAgICAgICByZXN1bHQgPSBmKCIxMjMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgIjEyMyIpCiAKICAgICAgICAgcmVzdWx0ID0gZihOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBOb25lKQogCiAgICAgZGVmIHRlc3RfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTkzLDI5ICsxOTMsMjkgQEAKIAogICAgICAgICB2ID0gY19pbnQoNDIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocG9pbnRlcih2KS5jb250ZW50cy52YWx1ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9pbnRlcih2KS5jb250ZW50cy52YWx1ZSwgNDIpCiAgICAgICAgIHJlc3VsdCA9IGYocG9pbnRlcih2KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZShyZXN1bHQpLCBQT0lOVEVSKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgNDIpCiAKICAgICAgICAgIyBUaGlzIG9uIHdvcmtzLi4uCiAgICAgICAgIHJlc3VsdCA9IGYocG9pbnRlcih2KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCB2LnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgdi52YWx1ZSkKIAogICAgICAgICBwID0gcG9pbnRlcihjX2ludCg5OSkpCiAgICAgICAgIHJlc3VsdCA9IGYocCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDk5KQogCiAgICAgICAgIGFyZyA9IGJ5cmVmKHYpCiAgICAgICAgIHJlc3VsdCA9IGYoYXJnKQotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKHJlc3VsdC5jb250ZW50cywgdi52YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuY29udGVudHMsIHYudmFsdWUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgZiwgYnlyZWYoY19zaG9ydCgyMikpKQogCiAgICAgICAgICMgSXQgaXMgZGFuZ2Vyb3VzLCBob3dldmVyLCBiZWNhdXNlIHlvdSBkb24ndCBjb250cm9sIHRoZSBsaWZldGltZQogICAgICAgICAjIG9mIHRoZSBwb2ludGVyOgogICAgICAgICByZXN1bHQgPSBmKGJ5cmVmKGNfaW50KDk5KSkpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwocmVzdWx0LmNvbnRlbnRzLCA5OSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuY29udGVudHMsIDk5KQogCiAgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgogICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19wX3AKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiAgICAgICAgIGNiID0gQ2FsbEJhY2soY2FsbGJhY2spCiAgICAgICAgIGYoMioqMTgsIGNiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhcmdzLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBleHBlY3RlZCkKIAogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjU5LDEzICsyNTksMTMgQEAKIAogICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCiAgICAgICAgIHJlc3VsdCA9IGYoLTEwLCBjYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCAtMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMTgpCiAKICAgICAgICAgIyB0ZXN0IHdpdGggcHJvdG90eXBlCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19pbnQsIE15Q2FsbGJhY2tdCiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKICAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKIAogICAgICAgICBBbm90aGVyQ2FsbGJhY2sgPSBXSU5GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQpCiAKQEAgLTI4OCwxMiArMjg4LDEyIEBACiAKICAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKICAgICAgICAgICAgICNwcmludCAiY2FsbGVkIGJhY2sgd2l0aCIsIHZhbHVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbHVlKSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgaW50KQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogICAgICAgICByZXN1bHQgPSBmKC0xMCwgY2IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCiAgICAgZGVmIHRlc3RfbG9uZ2xvbmdfY2FsbGJhY2tzKHNlbGYpOgogCkBAIC0zMDUsMTIgKzMwNSwxMiBAQAogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfbG9uZ2xvbmcsIE15Q2FsbGJhY2tdCiAKICAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZSwgKGludCwgbG9uZykpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYgMHg3RkZGRkZGRgogCiAgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgxMzU3NzYyNTU4NywgZigxMDAwMDAwMDAwMDAwLCBjYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTM1Nzc2MjU1ODcsIGYoMTAwMDAwMDAwMDAwMCwgY2IpKQogCiAgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgZGxsLCAiX3h4eF95eXkiKQpAQCAtMzI1LDcgKzMyNSw3IEBACiAgICAgICAgIHJlc3VsdCA9IGRsbC5fdGVzdGZ1bmNfYnl2YWwocHRpbiwgYnlyZWYocHRvdXQpKQogICAgICAgICBnb3QgPSByZXN1bHQsIHB0b3V0LngsIHB0b3V0LnkKICAgICAgICAgZXhwZWN0ZWQgPSAzLCAxLCAyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdvdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgICAgICAjIHdpdGggcHJvdG90eXBlCiAgICAgICAgIHB0aW4gPSBQT0lOVCgxMDEsIDEwMikKQEAgLTMzNSw3ICszMzUsNyBAQAogICAgICAgICByZXN1bHQgPSBkbGwuX3Rlc3RmdW5jX2J5dmFsKHB0aW4sIGJ5cmVmKHB0b3V0KSkKICAgICAgICAgZ290ID0gcmVzdWx0LCBwdG91dC54LCBwdG91dC55CiAgICAgICAgIGV4cGVjdGVkID0gMjAzLCAxMDEsIDEwMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChnb3QsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIKHNlbGYpOgogICAgICAgICBjbGFzcyBTMkgoU3RydWN0dXJlKToKQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgICBkbGwucmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQogICAgICAgICBpbnAgPSBTMkgoOTksIDg4KQogICAgICAgICBzMmggPSBkbGwucmV0XzJoX2Z1bmMoaW5wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCiAKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICAgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl8ySF9zdGRjYWxsKHNlbGYpOgpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgICAgICAgICB3aW5kbGwuc19yZXRfMmhfZnVuYy5yZXN0eXBlID0gUzJICiAgICAgICAgICAgICB3aW5kbGwuc19yZXRfMmhfZnVuYy5hcmd0eXBlcyA9IFtTMkhdCiAgICAgICAgICAgICBzMmggPSB3aW5kbGwuc19yZXRfMmhfZnVuYyhTMkgoOTksIDg4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIKHNlbGYpOgogICAgICAgICBjbGFzcyBTOEkoU3RydWN0dXJlKToKQEAgLTM3Miw3ICszNzIsNyBAQAogICAgICAgICBkbGwucmV0XzhpX2Z1bmMuYXJndHlwZXMgPSBbUzhJXQogICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKICAgICAgICAgczhpID0gZGxsLnJldF84aV9mdW5jKGlucCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg5KjIsIDgqMywgNyo0LCA2KjUsIDUqNiwgNCo3LCAzKjgsIDIqOSkpCiAKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKQEAgLTM5MCw3ICszOTAsNyBAQAogICAgICAgICAgICAgd2luZGxsLnNfcmV0XzhpX2Z1bmMuYXJndHlwZXMgPSBbUzhJXQogICAgICAgICAgICAgaW5wID0gUzhJKDksIDgsIDcsIDYsIDUsIDQsIDMsIDIpCiAgICAgICAgICAgICBzOGkgPSB3aW5kbGwuc19yZXRfOGlfZnVuYyhpbnApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCiAgICAgZGVmIHRlc3Rfc2YxNjUxMjM1KHNlbGYpOgpAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgICAgICByZXR1cm4gMAogCiAgICAgICAgIGNhbGxiYWNrID0gcHJvdG8oY2FsbGJhY2spCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhBcmd1bWVudEVycm9yLCBsYW1iZGE6IGNhbGxiYWNrKCgxLCAyLCAzLCA0KSwgUE9JTlQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIGxhbWJkYTogY2FsbGJhY2soKDEsIDIsIDMsIDQpLCBQT0lOVCgpKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2luY29tcGxldGUucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbmNvbXBsZXRlLnB5CmluZGV4IGFmOWY1MDQuLjFlMDNlOWYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2luY29tcGxldGUucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5jb21wbGV0ZS5weQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSg4KToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocC5uYW1lKQogICAgICAgICAgICAgcCA9IHAubmV4dFswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIFsiZm9vIiwgImJhciJdICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsiZm9vIiwgImJhciJdICogNCkKIAogICAgICAgICAjIHRvIG5vdCBsZWFrIHJlZmVyZW5jZXMsIHdlIG11c3QgY2xlYW4gX3BvaW50ZXJfdHlwZV9jYWNoZQogICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgX3BvaW50ZXJfdHlwZV9jYWNoZQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5pdC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2luaXQucHkKaW5kZXggM2Q5ZGM5Mi4uOTUzYTE0NSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW5pdC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbml0LnB5CkBAIC0yNCwxNyArMjQsMTcgQEAKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlIG9ubHkgYWNjZXNzaW5nIGEgbmVzdGVkIHN0cnVjdHVyZQogICAgICAgICAjIGRvZXNuJ3QgY2FsbCB0aGUgc3RydWN0dXJlJ3MgX19uZXdfXyBhbmQgX19pbml0X18KICAgICAgICAgeSA9IFkoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeS54LmEsIHkueC5iKSwgKDAsIDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh5LngubmV3X3dhc19jYWxsZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh5LnguYSwgeS54LmIpLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS54Lm5ld193YXNfY2FsbGVkLCBGYWxzZSkKIAogICAgICAgICAjIEJ1dCBleHBsaWNpdGVseSBjcmVhdGluZyBhbiBYIHN0cnVjdHVyZSBjYWxscyBfX25ld19fIGFuZCBfX2luaXRfXywgb2YgY291cnNlLgogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh4LmEsIHguYiksICg5LCAxMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHgubmV3X3dhc19jYWxsZWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguYSwgeC5iKSwgKDksIDEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm5ld193YXNfY2FsbGVkLCBUcnVlKQogCiAgICAgICAgIHkueCA9IHgKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHkueC5hLCB5LnguYiksICg5LCAxMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHkueC5uZXdfd2FzX2NhbGxlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHkueC5hLCB5LnguYiksICg5LCAxMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS54Lm5ld193YXNfY2FsbGVkLCBGYWxzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQppbmRleCAwNGIyMDQwLi4yZTViMWZlIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CkBAIC0xOCwyMiArMTgsMjIgQEAKICIiIgogCiBjbGFzcyBPYmplY3RzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBmYWlsVW5sZXNzU2FtZShzZWxmLCBhLCBiKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoaWQoYSksIGlkKGIpKQorICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIGEsIGIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKGEpLCBpZChiKSkKIAogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CiAgICAgICAgIGkgPSA0MjAwMDEyMwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBncmMoaSkpCisgICAgICAgIHJlZmNudCA9IGdyYyhpKQogICAgICAgICBjaSA9IGNfaW50KGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIGdyYyhpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2kuX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY250LCBncmMoaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2kuX29iamVjdHMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9jX2NoYXJfcChzZWxmKToKICAgICAgICAgcyA9ICJIZWxsbywgV29ybGQiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIGdyYyhzKSkKKyAgICAgICAgcmVmY250ID0gZ3JjKHMpCiAgICAgICAgIGNzID0gY19jaGFyX3AocykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNCwgZ3JjKHMpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NTYW1lKGNzLl9vYmplY3RzLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZmNudCArIDEsIGdyYyhzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lKGNzLl9vYmplY3RzLCBzKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX3N0cnVjdChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpAQCAtNDIsMTAgKzQyLDEwIEBACiAgICAgICAgIGEgPSA0MjEyMzQKICAgICAgICAgYiA9IDQyMTIzNQogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeC5hID0gYQogICAgICAgICB4LmIgPSBiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2VtYmVkZGVkX3N0cnVjdHMoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKQEAgLTU1LDEzICs1NSwxMyBAQAogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgWCksICgieSIsIFgpXQogCiAgICAgICAgIHkgPSBZKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9vYmplY3RzLCBOb25lKQogCiAgICAgICAgIHgxLCB4MiA9IFgoKSwgWCgpCiAgICAgICAgIHkueCwgeS55ID0geDEsIHgyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHkuX29iamVjdHMsIHsiMCI6IHt9LCAiMSI6IHt9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9vYmplY3RzLCB7IjAiOiB7fSwgIjEiOiB7fX0pCiAgICAgICAgIHgxLmEsIHgyLmIgPSA0MiwgOTMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS5fb2JqZWN0cywgeyIwIjoge30sICIxIjoge319KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIHsiMCI6IHt9LCAiMSI6IHt9fSkKIAogICAgIGRlZiB0ZXN0X3h4eChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpAQCAtNzYsMTEgKzc2LDExIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgeC5hID0gczEKICAgICAgICAgeC5iID0gczIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeC5fb2JqZWN0cywgeyIwIjogczEsICIxIjogczJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsiMCI6IHMxLCAiMSI6IHMyfSkKIAogICAgICAgICB5ID0gWSgpCiAgICAgICAgIHkueCA9IHgKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS5fb2JqZWN0cywgeyIwIjogeyIwIjogczEsICIxIjogczJ9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9vYmplY3RzLCB7IjAiOiB7IjAiOiBzMSwgIjEiOiBzMn19KQogIyMgICAgICAgIHggPSB5LngKICMjICAgICAgICBkZWwgeQogIyMgICAgICAgIHByaW50IHguX2JfYmFzZV8uX29iamVjdHMKQEAgLTkxLDcgKzkxLDcgQEAKIAogICAgICAgICBBID0gY19pbnQqNAogICAgICAgICBhID0gQSgxMSwgMjIsIDMzLCA0NCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9vYmplY3RzLCBOb25lKQogCiAgICAgICAgIHggPSBYKCkKICAgICAgICAgeC5kYXRhID0gYQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9rZWVwcmVmcy5weQppbmRleCA4MGI2Y2EyLi5iNTA0YzBjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9rZWVwcmVmcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9rZWVwcmVmcy5weQpAQCAtNCwxOSArNCwxOSBAQAogY2xhc3MgU2ltcGxlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NpbnQoc2VsZik6CiAgICAgICAgIHggPSBjX2ludCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeC52YWx1ZSA9IDQyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeCA9IGNfaW50KDk5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Ll9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9jY2hhcnAoc2VsZik6CiAgICAgICAgIHggPSBjX2NoYXJfcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeC52YWx1ZSA9ICJhYmMiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsICJhYmMiKQogICAgICAgICB4ID0gY19jaGFyX3AoInNwYW0iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Ll9vYmplY3RzLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgInNwYW0iKQogCiBjbGFzcyBTdHJ1Y3R1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY2ludF9zdHJ1Y3Qoc2VsZik6CkBAIC0yNSwyMSArMjUsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50KV0KIAogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKICAgICAgICAgeC5hID0gNDIKICAgICAgICAgeC5iID0gOTkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogCiAgICAgZGVmIHRlc3RfY2NoYXJwX3N0cnVjdChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19jaGFyX3ApLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19jaGFyX3ApXQogICAgICAgICB4ID0gWCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKIAogICAgICAgICB4LmEgPSAic3BhbSIKICAgICAgICAgeC5iID0gImZvbyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5fb2JqZWN0cywgeyIwIjogInNwYW0iLCAiMSI6ICJmb28ifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7IjAiOiAic3BhbSIsICIxIjogImZvbyJ9KQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X3N0cnVjdChzZWxmKToKICAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKQEAgLTUyLDI4ICs1MiwyOCBAQAogICAgICAgICByLnVsLnkgPSAxCiAgICAgICAgIHIubHIueCA9IDIKICAgICAgICAgci5sci55ID0gMwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLl9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuX29iamVjdHMsIE5vbmUpCiAKICAgICAgICAgciA9IFJFQ1QoKQogICAgICAgICBwdCA9IFBPSU5UKDEsIDIpCiAgICAgICAgIHIudWwgPSBwdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLl9vYmplY3RzLCB7JzAnOiB7fX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5fb2JqZWN0cywgeycwJzoge319KQogICAgICAgICByLnVsLnggPSAyMgogICAgICAgICByLnVsLnkgPSA0NAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLl9vYmplY3RzLCB7JzAnOiB7fX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5fb2JqZWN0cywgeycwJzoge319KQogICAgICAgICByLmxyID0gUE9JTlQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLl9vYmplY3RzLCB7JzAnOiB7fSwgJzEnOiB7fX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5fb2JqZWN0cywgeycwJzoge30sICcxJzoge319KQogCiBjbGFzcyBBcnJheVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jaW50X2FycmF5KHNlbGYpOgogICAgICAgICBJTlRBUlIgPSBjX2ludCAqIDMKIAogICAgICAgICBpYSA9IElOVEFSUigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGlhLl9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlhLl9vYmplY3RzLCBOb25lKQogICAgICAgICBpYVswXSA9IDEKICAgICAgICAgaWFbMV0gPSAyCiAgICAgICAgIGlhWzJdID0gMwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpYS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpYS5fb2JqZWN0cywgTm9uZSkKIAogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksCkBAIC04MywxNSArODMsMTUgQEAKICAgICAgICAgeC54ID0gMTAwMAogICAgICAgICB4LmFbMF0gPSA0MgogICAgICAgICB4LmFbMV0gPSA5NgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Ll9vYmplY3RzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCiAgICAgICAgIHguYSA9IGlhCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguX29iamVjdHMsIHsnMSc6IHt9fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7JzEnOiB7fX0pCiAKIGNsYXNzIFBvaW50ZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcF9jaW50KHNlbGYpOgogICAgICAgICBpID0gY19pbnQoNDIpCiAgICAgICAgIHggPSBwb2ludGVyKGkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguX29iamVjdHMsIHsnMSc6IGl9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsnMSc6IGl9KQogCiBjbGFzcyBEZWxldGVQb2ludGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBYX3Rlc3Qoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbGliYy5weQppbmRleCA4ZDU5ZjkwLi4zZGM0NjNmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xpYmMucHkKQEAgLTksOSArOSw5IEBACiAgICAgZGVmIHRlc3Rfc3FydChzZWxmKToKICAgICAgICAgbGliLm15X3NxcnQuYXJndHlwZXMgPSBjX2RvdWJsZSwKICAgICAgICAgbGliLm15X3NxcnQucmVzdHlwZSA9IGNfZG91YmxlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxpYi5teV9zcXJ0KDQuMCksIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaWIubXlfc3FydCg0LjApLCAyLjApCiAgICAgICAgIGltcG9ydCBtYXRoCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxpYi5teV9zcXJ0KDIuMCksIG1hdGguc3FydCgyLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYi5teV9zcXJ0KDIuMCksIG1hdGguc3FydCgyLjApKQogCiAgICAgZGVmIHRlc3RfcXNvcnQoc2VsZik6CiAgICAgICAgIGNvbXBhcmVmdW5jID0gQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKGNfY2hhciksIFBPSU5URVIoY19jaGFyKSkKQEAgLTIzLDcgKzIzLDcgQEAKIAogICAgICAgICBjaGFycyA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJzcGFtLCBzcGFtLCBhbmQgc3BhbSIpCiAgICAgICAgIGxpYi5teV9xc29ydChjaGFycywgbGVuKGNoYXJzKS0xLCBzaXplb2YoY19jaGFyKSwgY29tcGFyZWZ1bmMoc29ydCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNoYXJzLnJhdywgIiAgICwsYWFhYWRtbW1ucHBwc3NzXHgwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhcnMucmF3LCAiICAgLCxhYWFhZG1tbW5wcHBzc3NceDAwIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CmluZGV4IDcxMmI2NTAuLjI2NjgzZDggMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQpAQCAtNDMsNyArNDMsNyBAQAogCiAgICAgaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6CiAgICAgICAgIGRlZiB0ZXN0X2xvYWRfbGlicmFyeShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGxpYmNfbmFtZSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsaWJjX25hbWUgaXMgTm9uZSkKICAgICAgICAgICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6CiAgICAgICAgICAgICAgICAgcHJpbnQgZmluZF9saWJyYXJ5KCJrZXJuZWwzMiIpCiAgICAgICAgICAgICAgICAgcHJpbnQgZmluZF9saWJyYXJ5KCJ1c2VyMzIiKQpAQCAtNzAsOSArNzAsOSBAQAogICAgICAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKICAgICAgICAgICAgIGZfb3JkX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9vcmQpLnZhbHVlCiAgICAgICAgICAgICBmX25hbWVfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX25hbWUpLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChoZXgoZl9vcmRfYWRkciksIGhleChmX25hbWVfYWRkcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBkbGwuX19nZXRpdGVtX18sIDEyMzQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZGxsLl9fZ2V0aXRlbV9fLCAxMjM0KQogCiAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICBkZWYgdGVzdF8xNzAzMjg2X0Eoc2VsZik6CkBAIC05NCwxMyArOTQsMTMgQEAKICAgICAgICAgICAgIGFkdmFwaTMyID0gd2luZGxsLmFkdmFwaTMyCiAgICAgICAgICAgICAjIENhbGxpbmcgQ2xvc2VFdmVudExvZyB3aXRoIGEgTlVMTCBhcmd1bWVudCBzaG91bGQgZmFpbCwKICAgICAgICAgICAgICMgYnV0IHRoZSBjYWxsIHNob3VsZCBub3Qgc2VnZmF1bHQgb3Igc28uCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBhZHZhcGkzMi5DbG9zZUV2ZW50TG9nKE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBhZHZhcGkzMi5DbG9zZUV2ZW50TG9nKE5vbmUpKQogICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLmFyZ3R5cGVzID0gY192b2lkX3AsIGNfY2hhcl9wCiAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MucmVzdHlwZSA9IGNfdm9pZF9wCiAgICAgICAgICAgICBwcm9jID0gd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzKGFkdmFwaTMyLl9oYW5kbGUsICJDbG9zZUV2ZW50TG9nIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhwcm9jKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCiAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgY2FsbF9mdW5jdGlvbihwcm9jLCAoTm9uZSwpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgY2FsbF9mdW5jdGlvbihwcm9jLCAoTm9uZSwpKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkKaW5kZXggZjJlZTAzNS4uZWRhODQ2ZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkKQEAgLTQ4LDE0ICs0OCwxNCBAQAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgZGVmIHRlc3RfZmluZChzZWxmKToKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicpCiAKICAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRfbGliKCd6JykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQuc3RhcnRzd2l0aCgnL3Vzci9saWIvbGliei4xJykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0LmVuZHN3aXRoKCcuZHlsaWInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc3RhcnRzd2l0aCgnL3Vzci9saWIvbGliei4xJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmVuZHN3aXRoKCcuZHlsaWInKSkKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZmluZF9saWIoJ0lPS2l0JyksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRfbGliKCdJT0tpdCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQppbmRleCBjYjkwOTlkLi5kMDcyNjAzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5CkBAIC0xOSw0NSArMTksNDUgQEAKICAgICAgICAgYSA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEwMDAwMDApCiAgICAgICAgIHAgPSAiSGVsbG8sIFdvcmxkIgogICAgICAgICByZXN1bHQgPSBtZW1tb3ZlKGEsIHAsIGxlbihwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYS52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyaW5nX2F0KHJlc3VsdCksICJIZWxsbywgV29ybGQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQocmVzdWx0LCA1KSwgIkhlbGxvIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyaW5nX2F0KHJlc3VsdCwgMTYpLCAiSGVsbG8sIFdvcmxkXDBcMFwwXDAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQocmVzdWx0LCAwKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCksICJIZWxsbywgV29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChyZXN1bHQsIDUpLCAiSGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChyZXN1bHQsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQocmVzdWx0LCAwKSwgIiIpCiAKICAgICBkZWYgdGVzdF9tZW1zZXQoc2VsZik6CiAgICAgICAgIGEgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigxMDAwMDAwKQogICAgICAgICByZXN1bHQgPSBtZW1zZXQoYSwgb3JkKCd4JyksIDE2KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhLnZhbHVlLCAieHh4eHh4eHh4eHh4eHh4eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS52YWx1ZSwgInh4eHh4eHh4eHh4eHh4eHgiKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdChyZXN1bHQpLCAieHh4eHh4eHh4eHh4eHh4eCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdChhKSwgInh4eHh4eHh4eHh4eHh4eHgiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQoYSwgMjApLCAieHh4eHh4eHh4eHh4eHh4eFwwXDBcMFwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQocmVzdWx0KSwgInh4eHh4eHh4eHh4eHh4eHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChhKSwgInh4eHh4eHh4eHh4eHh4eHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChhLCAyMCksICJ4eHh4eHh4eHh4eHh4eHh4XDBcMFwwXDAiKQogCiAgICAgZGVmIHRlc3RfY2FzdChzZWxmKToKICAgICAgICAgYSA9IChjX3VieXRlICogMzIpKCptYXAob3JkLCAiYWJjZGVmIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoYSwgY19jaGFyX3ApLnZhbHVlLCAiYWJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3XSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIGNfY2hhcl9wKS52YWx1ZSwgImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjc6XSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjc6XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbNjotMTotMV0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzY6LTE6LTFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMTAyLCAxMDEsIDEwMCwgOTksIDk4LCA5N10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6NzoyXSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjc6Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5NywgOTksIDEwMSwgMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhc3QoYSwgUE9JTlRFUihjX2J5dGUpKVs6Nzo3XSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjc6N10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5N10pCiAKICAgICBkZWYgdGVzdF9zdHJpbmdfYXQoc2VsZik6CiAgICAgICAgIHMgPSBzdHJpbmdfYXQoImZvbyBiYXIiKQogICAgICAgICAjIFhYWCBUaGUgZm9sbG93aW5nIG1heSBiZSB3cm9uZywgZGVwZW5kaW5nIG9uIGhvdyBQeXRob24KICAgICAgICAgIyBtYW5hZ2VzIHN0cmluZyBpbnN0YW5jZXMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHMpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocywgImZvbyBiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMsICJmb28gYmFyIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJpbmdfYXQoImZvbyBiYXIiLCA4KSwgImZvbyBiYXJcMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmluZ19hdCgiZm9vIGJhciIsIDMpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoImZvbyBiYXIiLCA4KSwgImZvbyBiYXJcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KCJmb28gYmFyIiwgMyksICJmb28iKQogCiAgICAgdHJ5OgogICAgICAgICBjcmVhdGVfdW5pY29kZV9idWZmZXIKQEAgLTY4LDEyICs2OCwxMiBAQAogICAgICAgICAgICAgcCA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiSGVsbG8sIFdvcmxkIikKICAgICAgICAgICAgIGEgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoMTAwMDAwMCkKICAgICAgICAgICAgIHJlc3VsdCA9IG1lbW1vdmUoYSwgcCwgbGVuKHApICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYS52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3c3RyaW5nX2F0KGEpLCAiSGVsbG8sIFdvcmxkIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdzdHJpbmdfYXQoYSwgNSksICJIZWxsbyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdzdHJpbmdfYXQoYSwgMCksICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEpLCAiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCA1KSwgIkhlbGxvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAxNiksICJIZWxsbywgV29ybGRcMFwwXDBcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSwgMCksICIiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKaW5kZXggZGZkODRlZS4uYjUxODViZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CkBAIC01NSwyNSArNTUsMjUgQEAKICAgICBkZWYgdGVzdF9kZWZhdWx0X2luaXQoc2VsZik6CiAgICAgICAgICMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNldCB0byB6ZXJvCiAgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzICsgZmxvYXRfdHlwZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KCkudmFsdWUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQoKS52YWx1ZSwgMCkKIAogICAgIGRlZiB0ZXN0X3Vuc2lnbmVkX3ZhbHVlcyhzZWxmKToKICAgICAgICAgIyB0aGUgdmFsdWUgZ2l2ZW4gdG8gdGhlIGNvbnN0cnVjdG9yIGlzIGF2YWlsYWJsZQogICAgICAgICAjIGFzIHRoZSAndmFsdWUnIGF0dHJpYnV0ZQogICAgICAgICBmb3IgdCwgKGwsIGgpIGluIHppcCh1bnNpZ25lZF90eXBlcywgdW5zaWduZWRfcmFuZ2VzKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQobCkudmFsdWUsIGwpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KGgpLnZhbHVlLCBoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGwpLnZhbHVlLCBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGgpLnZhbHVlLCBoKQogCiAgICAgZGVmIHRlc3Rfc2lnbmVkX3ZhbHVlcyhzZWxmKToKICAgICAgICAgIyBzZWUgYWJvdmUKICAgICAgICAgZm9yIHQsIChsLCBoKSBpbiB6aXAoc2lnbmVkX3R5cGVzLCBzaWduZWRfcmFuZ2VzKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQobCkudmFsdWUsIGwpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KGgpLnZhbHVlLCBoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGwpLnZhbHVlLCBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGgpLnZhbHVlLCBoKQogCiAgICAgZGVmIHRlc3RfYm9vbF92YWx1ZXMoc2VsZik6CiAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IHRydXRoCiAgICAgICAgIGZvciB0LCB2IGluIHppcChib29sX3R5cGVzLCBib29sX3ZhbHVlcyk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0KHYpLnZhbHVlLCB0cnV0aCh2KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCh2KS52YWx1ZSwgdHJ1dGgodikpCiAKICAgICBkZWYgdGVzdF90eXBlZXJyb3Ioc2VsZik6CiAgICAgICAgICMgT25seSBudW1iZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBjb250cnVjdG9yLApAQCAtOTMsMTMgKzkzLDEzIEBACiAgICAgICAgICMgdGhlIGZyb21fcGFyYW0gY2xhc3MgbWV0aG9kIGF0dHJpYnV0ZSBhbHdheXMKICAgICAgICAgIyByZXR1cm5zIFB5Q0FyZ09iamVjdCBpbnN0YW5jZXMKICAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKEFyZ1R5cGUsIHR5cGUodC5mcm9tX3BhcmFtKDApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXJnVHlwZSwgdHlwZSh0LmZyb21fcGFyYW0oMCkpKQogCiAgICAgZGVmIHRlc3RfYnlyZWYoc2VsZik6CiAgICAgICAgICMgY2FsbGluZyBieXJlZiByZXR1cm5zIGFsc28gYSBQeUNBcmdPYmplY3QgaW5zdGFuY2UKICAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlcyArIGJvb2xfdHlwZXM6CiAgICAgICAgICAgICBwYXJtID0gYnlyZWYodCgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoQXJnVHlwZSwgdHlwZShwYXJtKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXJnVHlwZSwgdHlwZShwYXJtKSkKIAogCiAgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgpAQCAtMTEwLDEwICsxMTAsMTAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gMi4wCiAgICAgICAgIGYgPSBGbG9hdExpa2UoKQogICAgICAgICBmb3IgdCBpbiBmbG9hdF90eXBlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQoMi4wKS52YWx1ZSwgMi4wKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodCgyKS52YWx1ZSwgMi4wKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodCgyTCkudmFsdWUsIDIuMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHQoZikudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgyLjApLnZhbHVlLCAyLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQoMikudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgyTCkudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodChmKS52YWx1ZSwgMi4wKQogCiAgICAgZGVmIHRlc3RfaW50ZWdlcnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEZsb2F0TGlrZShvYmplY3QpOgpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCAzLjE0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBmKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodChpKS52YWx1ZSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodChpKS52YWx1ZSwgMikKIAogICAgIGRlZiB0ZXN0X3NpemVzKHNlbGYpOgogICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzICsgYm9vbF90eXBlczoKQEAgLTEzOCw5ICsxMzgsOSBAQAogICAgICAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyBzaXplb2Ygb2YgdGhlIHR5cGUuLi4KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih0KSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHQpLCBzaXplKQogICAgICAgICAgICAgIyBhbmQgc2l6ZW9mIG9mIGFuIGluc3RhbmNlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YodCgpKSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHQoKSksIHNpemUpCiAKICAgICBkZWYgdGVzdF9hbGlnbm1lbnRzKHNlbGYpOgogICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzOgpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKICAgICAgICAgICAgIGFsaWduID0gc3RydWN0LmNhbGNzaXplKCJjJWMiICUgY29kZSkgLSBzdHJ1Y3QuY2FsY3NpemUoY29kZSkKIAogICAgICAgICAgICAgIyBhbGlnbm1lbnQgb2YgdGhlIHR5cGUuLi4KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjb2RlLCBhbGlnbm1lbnQodCkpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY29kZSwgYWxpZ25tZW50KHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2RlLCBhbGlnbikpCiAgICAgICAgICAgICAjIGFuZCBhbGlnbm1lbnQgb2YgYW4gaW5zdGFuY2UKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjb2RlLCBhbGlnbm1lbnQodCgpKSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb2RlLCBhbGlnbm1lbnQodCgpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29kZSwgYWxpZ24pKQogCiAgICAgZGVmIHRlc3RfaW50X2Zyb21fYWRkcmVzcyhzZWxmKToKQEAgLTE2NywxMiArMTY3LDEyIEBACiAKICAgICAgICAgICAgICMgdiBub3cgaXMgYW4gaW50ZWdlciBhdCBhbiAnZXh0ZXJuYWwnIG1lbW9yeSBsb2NhdGlvbgogICAgICAgICAgICAgdiA9IHQuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHYpLCB0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpLCB0KQogCiAgICAgICAgICAgICAjIGNoYW5naW5nIHRoZSB2YWx1ZSBhdCB0aGUgbWVtb3J5IGxvY2F0aW9uIGNoYW5nZXMgdidzIHZhbHVlIGFsc28KICAgICAgICAgICAgIGFbMF0gPSA0MgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKIAogCiAgICAgZGVmIHRlc3RfZmxvYXRfZnJvbV9hZGRyZXNzKHNlbGYpOgpAQCAtMTgwLDExICsxODAsMTEgQEAKICAgICAgICAgZm9yIHQgaW4gZmxvYXRfdHlwZXM6CiAgICAgICAgICAgICBhID0gYXJyYXkodC5fdHlwZV8sIFszLjE0XSkKICAgICAgICAgICAgIHYgPSB0LmZyb21fYWRkcmVzcyhhLmJ1ZmZlcl9pbmZvKClbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUodikgaXMgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHYpIGlzIHQpCiAgICAgICAgICAgICBhWzBdID0gMi4zNDU2ZTE3Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUodikgaXMgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHYpIGlzIHQpCiAKICAgICBkZWYgdGVzdF9jaGFyX2Zyb21fYWRkcmVzcyhzZWxmKToKICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfY2hhcgpAQCAtMTkyLDExICsxOTIsMTEgQEAKIAogICAgICAgICBhID0gYXJyYXkoJ2MnLCAneCcpCiAgICAgICAgIHYgPSBjX2NoYXIuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUodikgaXMgY19jaGFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHYpIGlzIGNfY2hhcikKIAogICAgICAgICBhWzBdID0gJz8nCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKIAogICAgICMgYXJyYXkgZG9lcyBub3Qgc3VwcG9ydCBjX2Jvb2wgLyAndCcKICAgICAjIGRlZiB0ZXN0X2Jvb2xfZnJvbV9hZGRyZXNzKHNlbGYpOgpAQCAtMjA0LDExICsyMDQsMTEgQEAKICAgICAjICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQogICAgICMgICAgIGEgPSBhcnJheShjX2Jvb2wuX3R5cGVfLCBbVHJ1ZV0pCiAgICAgIyAgICAgdiA9IHQuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKLSAgICAjICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnZhbHVlLCBhWzBdKQotICAgICMgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodikgaXMgdCkKKyAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCiAgICAgIyAgICAgYVswXSA9IEZhbHNlCi0gICAgIyAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAjICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSBpcyB0KQogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKICAgICAgICAgIyBjX2ludCgpIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tIFB5dGhvbidzIGludCwgYW5kIGNfaW50LgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKaW5kZXggZDQ3N2E4Yy4uODI3MDRkNSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CkBAIC0zMyw4ICszMyw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogNAogICAgICAgICAgICAgZnJvbV9wYXJhbSA9IGNsYXNzbWV0aG9kKGZyb21fcGFyYW0pCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoQ1ZPSURQLmZyb21fcGFyYW0oImFiYyIpLCAiYWJjYWJjIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoQ0NIQVJQLmZyb21fcGFyYW0oImFiYyIpLCAiYWJjYWJjYWJjYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiY2FiYyIpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAqIDMKICAgICAgICAgICAgIGZyb21fcGFyYW0gPSBjbGFzc21ldGhvZChmcm9tX3BhcmFtKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKENXQ0hBUlAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmNhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENXQ0hBUlAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmNhYmMiKQogCiAgICAgIyBYWFggUmVwbGFjZSBieSBjX2NoYXJfcCB0ZXN0cwogICAgIGRlZiB0ZXN0X2NzdHJpbmdzKHNlbGYpOgpAQCAtNTUsMTAgKzU1LDEwIEBACiAgICAgICAgICMgY19jaGFyX3AuZnJvbV9wYXJhbSBvbiBhIFB5dGhvbiBTdHJpbmcgcGFja3MgdGhlIHN0cmluZwogICAgICAgICAjIGludG8gYSBjcGFyYW0gb2JqZWN0CiAgICAgICAgIHMgPSAiMTIzIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19jaGFyX3AuZnJvbV9wYXJhbShzKS5fb2JqIGlzIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2NoYXJfcC5mcm9tX3BhcmFtKHMpLl9vYmogaXMgcykKIAogICAgICAgICAjIG5ldyBpbiAwLjkuMTogY29udmVydCAoZW5jb2RlKSB1bmljb2RlIHRvIGFzY2lpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfY2hhcl9wLmZyb21fcGFyYW0odSIxMjMiKS5fb2JqLCAiMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX2NoYXJfcC5mcm9tX3BhcmFtKHUiMTIzIikuX29iaiwgIjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgY19jaGFyX3AuZnJvbV9wYXJhbSwgdSIxMjNcMzc3IikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhcl9wLmZyb21fcGFyYW0sIDQyKQpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAjIGNhbGxpbmcgY19jaGFyX3AuZnJvbV9wYXJhbSB3aXRoIGEgY19jaGFyX3AgaW5zdGFuY2UKICAgICAgICAgIyByZXR1cm5zIHRoZSBhcmd1bWVudCBpdHNlbGY6CiAgICAgICAgIGEgPSBjX2NoYXJfcCgiMTIzIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfY2hhcl9wLmZyb21fcGFyYW0oYSkgaXMgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhcl9wLmZyb21fcGFyYW0oYSkgaXMgYSkKIAogICAgIGRlZiB0ZXN0X2N3X3N0cmluZ3Moc2VsZik6CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBieXJlZgpAQCAtNzcsMTUgKzc3LDE1IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcyA9IHUiMTIzIgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3djaGFyX3AuZnJvbV9wYXJhbShzKS5fb2JqIGlzIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY193Y2hhcl9wLmZyb21fcGFyYW0ocykuX29iaiBpcyBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgNDIpCiAKICAgICAgICAgICAgICMgbmV3IGluIDAuOS4xOiBjb252ZXJ0IChkZWNvZGUpIGFzY2lpIHRvIHVuaWNvZGUKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKS5fb2JqLCB1IjEyMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKS5fb2JqLCB1IjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY193Y2hhcl9wLmZyb21fcGFyYW0sICIxMjNcMzc3IikKIAogICAgICAgICBwYSA9IGNfd2NoYXJfcC5mcm9tX3BhcmFtKGNfd2NoYXJfcCh1IjEyMyIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHBhKSwgY193Y2hhcl9wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocGEpLCBjX3djaGFyX3ApCiAKICAgICBkZWYgdGVzdF9pbnRfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX3Nob3J0LCBjX3VpbnQsIGNfaW50LCBjX2xvbmcsIFBPSU5URVIsIHBvaW50ZXIKQEAgLTk0LDggKzk0LDggQEAKICMjICAgICAgICBwID0gcG9pbnRlcihjX2ludCg0MikpCiAjIyAgICAgICAgeCA9IExQSU5ULmZyb21fcGFyYW0ocCkKICAgICAgICAgeCA9IExQSU5ULmZyb21fcGFyYW0ocG9pbnRlcihjX2ludCg0MikpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4LmNvbnRlbnRzLnZhbHVlLCA0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTFBJTlQoY19pbnQoNDIpKS5jb250ZW50cy52YWx1ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5jb250ZW50cy52YWx1ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTFBJTlQoY19pbnQoNDIpKS5jb250ZW50cy52YWx1ZSwgNDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMUElOVC5mcm9tX3BhcmFtKE5vbmUpLCBOb25lKQogCkBAIC0xMzMsOCArMTMzLDggQEAKICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfc2hvcnQsIGNfdWludCwgY19pbnQsIGNfbG9uZywgUE9JTlRFUgogICAgICAgICBJTlRBUlJBWSA9IGNfaW50ICogMwogICAgICAgICBpYSA9IElOVEFSUkFZKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGlhKSwgMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoW2lhW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpYSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2lhW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzAsIDAsIDBdKQogCiAgICAgICAgICMgUG9pbnRlcnMgYXJlIG9ubHkgY29tcGF0aWJsZSB3aXRoIGFycmF5cyBjb250YWluaW5nIGl0ZW1zIG9mCiAgICAgICAgICMgdGhlIHNhbWUgdHlwZSEKQEAgLTE2MSw4ICsxNjEsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IChBZGFwdGVyKCksKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKE5vbmUpLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKG9iamVjdCgpKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMob2JqZWN0KCkpLCBOb25lKQogCiAgICAgICAgIGNsYXNzIEFkYXB0ZXIob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBmcm9tX3BhcmFtKGNscywgb2JqKToKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKEFkYXB0ZXIoKSwpCiAgICAgICAgICMgZG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBwYXJhbWV0ZXIgMQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBmdW5jLCBvYmplY3QoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyhjX3ZvaWRfcCg0MikpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGNfdm9pZF9wKDQyKSksIDQyKQogCiAgICAgICAgIGNsYXNzIEFkYXB0ZXIob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBmcm9tX3BhcmFtKGNscywgb2JqKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CmluZGV4IGQzNTUwY2MuLjk3NjQ3M2MgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWltcG9ydCByZSwgc3RydWN0LCBzeXMKK2ltcG9ydCByZSwgc3lzCiAKIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CiAgICAgVEhJU19FTkRJQU4gPSAiPCIKQEAgLTksMjcgKzksNiBAQAogICAgIFRISVNfRU5ESUFOID0gIj4iCiAgICAgT1RIRVJfRU5ESUFOID0gIjwiCiAKLWNsYXNzIG1lbW9yeXZpZXcob2JqZWN0KToKLSAgICAjIFRoaXMgY2xhc3MgY3JlYXRlcyBhIG1lbW9yeXZpZXcgLSBsaWtlIG9iamVjdCBmcm9tIGRhdGEgcmV0dXJuZWQKLSAgICAjIGJ5IHRoZSBwcml2YXRlIF9jdHlwZXMuX2J1ZmZlcl9pbmZvKCkgZnVuY3Rpb24sIGp1c3QgZW5vdWdoIGZvcgotICAgICMgdGhlc2UgdGVzdHMuCi0gICAgIwotICAgICMgSXQgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgcHkzayBtZW1vcnl2aWV3IG9iamVjdCBpcyBiYWNrcG9ydGVkLgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYik6Ci0gICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgX2J1ZmZlcl9pbmZvCi0gICAgICAgIHNlbGYuZm9ybWF0LCBzZWxmLm5kaW0sIHNlbGYuc2hhcGUgPSBfYnVmZmVyX2luZm8ob2IpCi0gICAgICAgIGlmIHNlbGYuc2hhcGUgPT0gKCk6Ci0gICAgICAgICAgICBzZWxmLnNoYXBlID0gTm9uZQotICAgICAgICAgICAgc2VsZi5pdGVtc2l6ZSA9IHNpemVvZihvYikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNpemUgPSBzaXplb2Yob2IpCi0gICAgICAgICAgICBmb3IgZGltIGluIHNlbGYuc2hhcGU6Ci0gICAgICAgICAgICAgICAgc2l6ZSAvLz0gZGltCi0gICAgICAgICAgICBzZWxmLml0ZW1zaXplID0gc2l6ZQotICAgICAgICBzZWxmLnN0cmlkZXMgPSBOb25lCi0gICAgICAgIHNlbGYucmVhZG9ubHkgPSBGYWxzZQotICAgICAgICBzZWxmLnNpemUgPSBzaXplb2Yob2IpCi0KIGRlZiBub3JtYWxpemUoZm9ybWF0KToKICAgICAjIFJlbW92ZSBjdXJyZW50IGVuZGlhbiBzcGVjaWZpZXIgYW5kIHdoaXRlIHNwYWNlIGZyb20gYSBmb3JtYXQKICAgICAjIHN0cmluZwpAQCAtNDUsMjAgKzI0LDIzIEBACiAgICAgICAgICAgICBvYiA9IHRwKCkKICAgICAgICAgICAgIHYgPSBtZW1vcnl2aWV3KG9iKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG5vcm1hbGl6ZSh2LmZvcm1hdCksIG5vcm1hbGl6ZShmbXQpKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuc2l6ZSwgc2l6ZW9mKG9iKSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2Lml0ZW1zaXplLCBzaXplb2YoaXRlbXRwKSkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2LnNoYXBlLCBzaGFwZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm1hbGl6ZSh2LmZvcm1hdCksIG5vcm1hbGl6ZShmbXQpKQorICAgICAgICAgICAgICAgIGlmIHNoYXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgc2hhcGVbMF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odikgKiBzaXplb2YoaXRlbXRwKSwgc2l6ZW9mKG9iKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuaXRlbXNpemUsIHNpemVvZihpdGVtdHApKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5zaGFwZSwgc2hhcGUpCiAgICAgICAgICAgICAgICAgIyBjdHlwZXMgb2JqZWN0IGFsd2F5cyBoYXZlIGEgbm9uLXN0cmlkZWQgbWVtb3J5IGJsb2NrCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5zdHJpZGVzLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5zdHJpZGVzLCBOb25lKQogICAgICAgICAgICAgICAgICMgdGhleSBhcmUgYWx3YXlzIHJlYWQvd3JpdGUKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZih2LnJlYWRvbmx5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uodi5yZWFkb25seSkKIAogICAgICAgICAgICAgICAgIGlmIHYuc2hhcGU6CiAgICAgICAgICAgICAgICAgICAgIG4gPSAxCiAgICAgICAgICAgICAgICAgICAgIGZvciBkaW0gaW4gdi5zaGFwZToKICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuICogZGltCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuaXRlbXNpemUgKiBuLCB2LnNpemUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiAqIHYuaXRlbXNpemUsIGxlbih2LnRvYnl0ZXMoKSkpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHdlIGNhbiBzZWUgdGhlIGZhaWxpbmcgdHlwZQogICAgICAgICAgICAgICAgIHByaW50KHRwKQpAQCAtNjksMjAgKzUxLDIzIEBACiAgICAgICAgICAgICBvYiA9IHRwKCkKICAgICAgICAgICAgIHYgPSBtZW1vcnl2aWV3KG9iKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuZm9ybWF0LCBmbXQpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodi5zaXplLCBzaXplb2Yob2IpKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuaXRlbXNpemUsIHNpemVvZihpdGVtdHApKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuc2hhcGUsIHNoYXBlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5mb3JtYXQsIGZtdCkKKyAgICAgICAgICAgICAgICBpZiBzaGFwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIHNoYXBlWzBdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpICogc2l6ZW9mKGl0ZW10cCksIHNpemVvZihvYikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2Lml0ZW1zaXplLCBzaXplb2YoaXRlbXRwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuc2hhcGUsIHNoYXBlKQogICAgICAgICAgICAgICAgICMgY3R5cGVzIG9iamVjdCBhbHdheXMgaGF2ZSBhIG5vbi1zdHJpZGVkIG1lbW9yeSBibG9jawotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHYuc3RyaWRlcywgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuc3RyaWRlcywgTm9uZSkKICAgICAgICAgICAgICAgICAjIHRoZXkgYXJlIGFsd2F5cyByZWFkL3dyaXRlCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYodi5yZWFkb25seSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHYucmVhZG9ubHkpCiAKICAgICAgICAgICAgICAgICBpZiB2LnNoYXBlOgogICAgICAgICAgICAgICAgICAgICBuID0gMQogICAgICAgICAgICAgICAgICAgICBmb3IgZGltIGluIHYuc2hhcGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiAqIGRpbQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2Lml0ZW1zaXplICogbiwgdi5zaXplKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGxlbih2KSkKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY2FuIHNlZSB0aGUgZmFpbGluZyB0eXBlCiAgICAgICAgICAgICAgICAgcHJpbnQodHApCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9waWNrbGluZy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5CmluZGV4IDI4ODY4ZjQuLjEzNmNiZTkgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5CkBAIC0yNywyNyArMjcsMjcgQEAKICAgICAgICAgICAgIGNfZG91YmxlKDMuMTQpLAogICAgICAgICAgICAgXToKICAgICAgICAgICAgIGRzdCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhzcmMpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3JjLl9fZGljdF9fLCBkc3QuX19kaWN0X18pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZmZXIoc3JjKVs6XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcihkc3QpWzpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMuX19kaWN0X18sIGRzdC5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtb3J5dmlldyhzcmMpLnRvYnl0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZHN0KS50b2J5dGVzKCkpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3Qoc2VsZik6CiAgICAgICAgIFguaW5pdF9jYWxsZWQgPSAwCiAKICAgICAgICAgeCA9IFgoKQogICAgICAgICB4LmEgPSA0MgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmluaXRfY2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguaW5pdF9jYWxsZWQsIDEpCiAKICAgICAgICAgeSA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyh4KSkKIAogICAgICAgICAjIGxvYWRzIG11c3QgTk9UIGNhbGwgX19pbml0X18KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5pbml0X2NhbGxlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmluaXRfY2FsbGVkLCAxKQogCiAgICAgICAgICMgY3R5cGVzIGluc3RhbmNlcyBhcmUgaWRlbnRpY2FsIHdoZW4gdGhlIGluc3RhbmNlIF9fZGljdF9fCiAgICAgICAgICMgYW5kIHRoZSBtZW1vcnkgYnVmZmVyIGFyZSBpZGVudGljYWwKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeS5fX2RpY3RfXywgeC5fX2RpY3RfXykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmZmVyKHkpWzpdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIoeClbOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2RpY3RfXywgeC5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1vcnl2aWV3KHkpLnRvYnl0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyh4KS50b2J5dGVzKCkpCiAKICAgICBkZWYgdGVzdF91bnBpY2thYmxlKHNlbGYpOgogICAgICAgICAjIGN0eXBlcyBvYmplY3RzIHRoYXQgYXJlIHBvaW50ZXJzIG9yIGNvbnRhaW4gcG9pbnRlcnMgYXJlCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5CmluZGV4IDA3NmNkOGIuLjkyYjhjZTYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAKICAgICAgICAgUE9JTlRFUihjX3Vsb25nKShjX3Vsb25nKDIyKSkKICAgICAgICAgIyBQb2ludGVyIGNhbid0IHNldCBjb250ZW50czogaGFzIG5vIF90eXBlXwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBBLCBjX3Vsb25nKDMzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBBLCBjX3Vsb25nKDMzKSkKIAogICAgIGRlZiB0ZXN0X3Bhc3NfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtMjcsMTIgKzI3LDEyIEBACiAgICAgICAgIGkgPSBjX2ludCgxMjM0NTY3OCkKICMjICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKFBPSU5URVIoY19pbnQpLCkKICAgICAgICAgYWRkcmVzcyA9IGZ1bmMoYnlyZWYoaSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfaW50LmZyb21fYWRkcmVzcyhhZGRyZXNzKS52YWx1ZSwgMTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19pbnQuZnJvbV9hZGRyZXNzKGFkZHJlc3MpLnZhbHVlLCAxMjM0NTY3OCkKIAogICAgICAgICBmdW5jLnJlc3R5cGUgPSBQT0lOVEVSKGNfaW50KQogICAgICAgICByZXMgPSBmdW5jKHBvaW50ZXIoaSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcy5jb250ZW50cy52YWx1ZSwgMTIzNDU2NzgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1swXSwgMTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmNvbnRlbnRzLnZhbHVlLCAxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF0sIDEyMzQ1Njc4KQogCiAgICAgZGVmIHRlc3RfY2hhbmdlX3BvaW50ZXJzKHNlbGYpOgogICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKQEAgLTQzLDE4ICs0MywxOCBAQAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKFBPSU5URVIoY19pbnQpLCkKIAogICAgICAgICByZXMgPSBmdW5jKHBvaW50ZXIoaSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1swXSwgODc2NTQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcy5jb250ZW50cy52YWx1ZSwgODc2NTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCA4NzY1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuY29udGVudHMudmFsdWUsIDg3NjU0KQogCiAgICAgICAgICMgQyBjb2RlOiAqcmVzID0gNTQzNDUKICAgICAgICAgcmVzWzBdID0gNTQzNDUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoaS52YWx1ZSwgNTQzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS52YWx1ZSwgNTQzNDUpCiAKICAgICAgICAgIyBDIGNvZGU6CiAgICAgICAgICMgICBpbnQgeCA9IDEyMzIxOwogICAgICAgICAjICAgcmVzID0gJngKICAgICAgICAgcmVzLmNvbnRlbnRzID0gY19pbnQoMTIzMjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGkudmFsdWUsIDU0MzQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkudmFsdWUsIDU0MzQ1KQogCiAgICAgZGVmIHRlc3RfY2FsbGJhY2tzX3dpdGhfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgICMgYSBmdW5jdGlvbiB0eXBlIHJlY2VpdmluZyBhIHBvaW50ZXIKQEAgLTc4LDcgKzc4LDcgQEAKIAogIyMgICAgICAgIGkgPSBjX2ludCg0MikKICMjICAgICAgICBjYWxsYmFjayhieXJlZihpKSkKLSMjICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaS52YWx1ZSA9PSA4NCkKKyMjICAgICAgICBzZWxmLmFzc2VydFRydWUoaS52YWx1ZSA9PSA4NCkKIAogICAgICAgICBkb2l0KGNhbGxiYWNrKQogIyMgICAgICAgIHByaW50IHNlbGYucmVzdWx0CkBAIC05MSwxMSArOTEsMTEgQEAKICAgICAgICAgICAgIGkgPSBjdCg0MikKICAgICAgICAgICAgIHAgPSBwb2ludGVyKGkpCiAjIyAgICAgICAgICAgIHByaW50IHR5cGUocC5jb250ZW50cyksIGN0Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShwLmNvbnRlbnRzKSBpcyBjdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHAuY29udGVudHMpIGlzIGN0KQogICAgICAgICAgICAgIyBwLmNvbnRlbnRzIGlzIHRoZSBzYW1lIGFzIHBbMF0KICMjICAgICAgICAgICAgcHJpbnQgcC5jb250ZW50cwotIyMgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocC5jb250ZW50cyA9PSA0MikKLSMjICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHBbMF0gPT0gNDIpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmNvbnRlbnRzID09IDQyKQorIyMgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocFswXSA9PSA0MikKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxpdGVtLCBwLCAwKQogCkBAIC0xMTcsOSArMTE3LDkgQEAKIAogICAgICAgICBwdCA9IHBvaW50ZXIoVGFibGUoMSwgMiwgMykpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocHQuY29udGVudHMuYSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocHQuY29udGVudHMuYiwgMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocHQuY29udGVudHMuYywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwdC5jb250ZW50cy5hLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB0LmNvbnRlbnRzLmIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHQuY29udGVudHMuYywgMykKIAogICAgICAgICBwdC5jb250ZW50cy5jID0gMzMKIApAQCAtMTMwLDggKzEzMCw4IEBACiAgICAgICAgIHAgPSBwb2ludGVyKGNfaW50KDQyKSkKICAgICAgICAgIyBBbHRob3VnaCBhIHBvaW50ZXIgY2FuIGJlIGluZGV4ZWQsIGl0IGhhIG5vIGxlbmd0aAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgcCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFswXSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHAuY29udGVudHMudmFsdWUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMF0sIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29udGVudHMudmFsdWUsIDQyKQogCiAgICAgZGVmIHRlc3RfY2hhcnBwKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoYXQgYSBjaGFyYWN0ZXIgcG9pbnRlci10by1wb2ludGVyIGlzIGNvcnJlY3RseSBwYXNzZWQiIiIKQEAgLTE1NiwyMCArMTU2LDIwIEBACiAgICAgICAgIHBwID0gcG9pbnRlcihwKQogICAgICAgICBxID0gcG9pbnRlcih5KQogICAgICAgICBwcFswXSA9IHEgICAgICAgICAjIDw9PQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwWzBdLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMF0sIDYpCiAgICAgZGVmIHRlc3RfY192b2lkX3Aoc2VsZik6CiAgICAgICAgICMgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MTUxODE5MCZncm91cF9pZD01NDcwJmF0aWQ9MTA1NDcwCiAgICAgICAgIGlmIHNpemVvZihjX3ZvaWRfcCkgPT0gNDoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZMKS52YWx1ZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkwpLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkZGRkZGRkZGTCkudmFsdWUsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQogICAgICAgICBlbGlmIHNpemVvZihjX3ZvaWRfcCkgPT0gODoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZMKS52YWx1ZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkwpLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkwpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZMKS52YWx1ZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkZGRkZGRkZGTCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCgtMSkudmFsdWUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY192b2lkX3AsIDMuMTQpICMgbWFrZSBzdXJlIGZsb2F0cyBhcmUgTk9UIGFjY2VwdGVkCkBAIC0xNzcsMTYgKzE3NywxNiBAQAogCiAgICAgZGVmIHRlc3RfcG9pbnRlcnNfYm9vbChzZWxmKToKICAgICAgICAgIyBOVUxMIHBvaW50ZXJzIGhhdmUgYSBib29sZWFuIEZhbHNlIHZhbHVlLCBub24tTlVMTCBwb2ludGVycyBUcnVlLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChib29sKFBPSU5URVIoY19pbnQpKCkpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYm9vbChwb2ludGVyKGNfaW50KCkpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKFBPSU5URVIoY19pbnQpKCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKHBvaW50ZXIoY19pbnQoKSkpLCBUcnVlKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJvb2woQ0ZVTkNUWVBFKE5vbmUpKDApKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJvb2woQ0ZVTkNUWVBFKE5vbmUpKDQyKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChDRlVOQ1RZUEUoTm9uZSkoMCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKENGVU5DVFlQRShOb25lKSg0MikpLCBUcnVlKQogCiAgICAgICAgICMgQ09NIG1ldGhvZHMgYXJlIGJvb2xlYW4gVHJ1ZToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICAgICAgICAgICBtdGggPSBXSU5GVU5DVFlQRShOb25lKSg0MiwgIm5hbWUiLCAoKSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJvb2wobXRoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChtdGgpLCBUcnVlKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKaW5kZXggMzNkZWFlMy4uMDliYTY1NSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CkBAIC01OCwyMyArNTgsMjMgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYygpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGRldGFpbHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHIoZGV0YWlscyksICJyZXF1aXJlZCBhcmd1bWVudCAnaW5wdXQnIG1pc3NpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZGV0YWlscyksICJyZXF1aXJlZCBhcmd1bWVudCAnaW5wdXQnIG1pc3NpbmciKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJUeXBlRXJyb3Igbm90IHJhaXNlZCIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyhOb25lKSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyhpbnB1dD1Ob25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoaW5wdXQ9Tm9uZSksIE5vbmUpCiAKIAogICAgIGRlZiB0ZXN0X2ludF9wb2ludGVyX2FyZyhzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAogICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmcKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZnVuYygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmdW5jKDApKQogCiAgICAgICAgIGNpID0gY19pbnQoMCkKIAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihjX2ludCksCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBvc2l0aXZlX2FkZHJlc3MoYWRkcmVzc29mKGNpKSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXRpdmVfYWRkcmVzcyhhZGRyZXNzb2YoY2kpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfYWRkcmVzcyhmdW5jKGJ5cmVmKGNpKSkpKQogCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX2NoYXJfcCwKQEAgLTkxLDQ1ICs5MSw0NSBAQAogICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2NoYXJfcAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihjX2NoYXIpLAogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKCIxMjMiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhjX2NoYXJfcChOb25lKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfY2hhcl9wKCIxMjMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYygiMTIzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX2NoYXJfcChOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYyhjX2J1ZmZlcigiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfYnVmZmVyKCIxMjMiKSkpCiAgICAgICAgIGNhID0gY19jaGFyKCJhIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKIAogICAgIGRlZiB0ZXN0X2NfY2hhcl9wX2FyZyhzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAogICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2NoYXJfcAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY19jaGFyX3AsCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKCIxMjMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2NoYXJfcCgiMTIzIikpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfYnVmZmVyKCIxMjMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19idWZmZXIoIjEyMyIpKSkKICAgICAgICAgY2EgPSBjX2NoYXIoImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiAgICAgZGVmIHRlc3RfY192b2lkX3BfYXJnKHNlbGYpOgogICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCiAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfY2hhcl9wCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX3ZvaWRfcCwKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKE5vbmUpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYygiMTIzIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfY2hhcl9wKCIxMjMiKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoY19jaGFyX3AoTm9uZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfY2hhcl9wKCIxMjMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX2NoYXJfcChOb25lKSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjEyMyIsIGZ1bmMoY19idWZmZXIoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2J1ZmZlcigiMTIzIikpKQogICAgICAgICBjYSA9IGNfY2hhcigiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKICAgICAgICAgZnVuYyhieXJlZihjX2ludCgpKSkKICAgICAgICAgZnVuYyhwb2ludGVyKGNfaW50KCkpKQpAQCAtMTQwLDggKzE0MCw4IEBACiAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh1IjEyMyIsIGZ1bmMoY193Y2hhcl9wKHUiMTIzIikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyhjX3djaGFyX3AodSIxMjMiKSkpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTUxLDEwICsxNTEsMTAgQEAKICAgICAgICAgICAgIF9hc19wYXJhbWV0ZXJfID0gTm9uZQogCiAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX3ZvaWRfcCwKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhYKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoWCgpKSkKIAogICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKFgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhYKCkpKQogCiB0cnk6CiAgICAgY193Y2hhcgpAQCAtMTc0LDE1ICsxNzQsMTUgQEAKICAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAogICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh1IjEyMyIsIGZ1bmModSIxMjMiKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHUiMTIzIiwgZnVuYyhjX3djaGFyX3AodSIxMjMiKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyh1IjEyMyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyhjX3djaGFyX3AodSIxMjMiKSkpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHUiMTIzIiwgZnVuYyhjX3didWZmZXIodSIxMjMiKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyhjX3didWZmZXIodSIxMjMiKSkpCiAgICAgICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodSJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh1ImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKICAgICAgICAgZGVmIHRlc3RfY193Y2hhcl9wX2FyZyhzZWxmKToKICAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKQEAgLTE5MSwxNiArMTkxLDE2IEBACiAKICAgICAgICAgICAgIGNfd2NoYXJfcC5mcm9tX3BhcmFtKHUiMTIzIikKIAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKHUiMTIzIikpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmModSIxMjMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAogICAgICAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCIxMjMiLCBmdW5jKGNfd2J1ZmZlcigiMTIzIikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKICAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiBjbGFzcyBBcnJheVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKaW5kZXggMjY1ZWU1NS4uNjk4MTcwZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplLnJlc3R5cGUgPSBweV9vYmplY3QKICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUuYXJndHlwZXMgPSBjX2NoYXJfcCwgY19weV9zc2l6ZV90CiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoImFiY2RlZmdoaSIsIDMpLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgiYWJjZGVmZ2hpIiwgMyksICJhYmMiKQogCiAgICAgZGVmIHRlc3RfUHlTdHJpbmdfRnJvbVN0cmluZyhzZWxmKToKICAgICAgICAgcHl0aG9uYXBpLlB5U3RyaW5nX0Zyb21TdHJpbmcucmVzdHlwZSA9IHB5X29iamVjdApAQCAtMzIsMTAgKzMyLDEwIEBACiAgICAgICAgIHMgPSAiYWJjIgogICAgICAgICByZWZjbnQgPSBncmMocykKICAgICAgICAgcHlvYiA9IHB5dGhvbmFwaS5QeVN0cmluZ19Gcm9tU3RyaW5nKHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhzKSwgcmVmY250KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLCBweW9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhzKSwgcmVmY250KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHB5b2IpCiAgICAgICAgIGRlbCBweW9iCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhzKSwgcmVmY250KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhzKSwgcmVmY250KQogCiAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicmVmY291bnQiKToKICAgICAgICAgIyBUaGlzIHRlc3QgaXMgdW5yZWxpYWJsZSwgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0aGF0IGNvZGUgaW4KQEAgLTQ0LDI4ICs0NCwyOCBAQAogICAgICAgICBkZWYgdGVzdF9QeUludF9Mb25nKHNlbGYpOgogICAgICAgICAgICAgcmVmNDIgPSBncmMoNDIpCiAgICAgICAgICAgICBweXRob25hcGkuUHlJbnRfRnJvbUxvbmcucmVzdHlwZSA9IHB5X29iamVjdAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocHl0aG9uYXBpLlB5SW50X0Zyb21Mb25nKDQyKSwgNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGhvbmFwaS5QeUludF9Gcm9tTG9uZyg0MiksIDQyKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoNDIpLCByZWY0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKDQyKSwgcmVmNDIpCiAKICAgICAgICAgICAgIHB5dGhvbmFwaS5QeUludF9Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKICAgICAgICAgICAgIHB5dGhvbmFwaS5QeUludF9Bc0xvbmcucmVzdHlwZSA9IGNfbG9uZwogCiAgICAgICAgICAgICByZXMgPSBweXRob25hcGkuUHlJbnRfQXNMb25nKDQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKICAgICAgICAgICAgIGRlbCByZXMKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyg0MiksIHJlZjQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAogICAgIGRlZiB0ZXN0X1B5T2JqX0Zyb21QdHIoc2VsZik6CiAgICAgICAgIHMgPSAiYWJjIGRlZiBnaGkgamtsIgogICAgICAgICByZWYgPSBncmMocykKICAgICAgICAgIyBpZChweXRob24tb2JqZWN0KSBpcyB0aGUgYWRkcmVzcwogICAgICAgICBweW9iaiA9IFB5T2JqX0Zyb21QdHIoaWQocykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzIGlzIHB5b2JqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocyBpcyBweW9iaikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMocyksIHJlZiArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWYgKyAxKQogICAgICAgICBkZWwgcHlvYmoKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKHMpLCByZWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWYpCiAKICAgICBkZWYgdGVzdF9QeU9TX3NucHJpbnRmKHNlbGYpOgogICAgICAgICBQeU9TX3NucHJpbnRmID0gcHl0aG9uYXBpLlB5T1Nfc25wcmludGYKQEAgLTczLDE4ICs3MywxOCBAQAogCiAgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKDI1NikKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiSGVsbG8gZnJvbSAlcyIsICJjdHlwZXMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsICJIZWxsbyBmcm9tIGN0eXBlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8gZnJvbSBjdHlwZXMiKQogCiAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkhlbGxvIGZyb20gJXMiLCAiY3R5cGVzIiwgMSwgMiwgMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8gZnJvbSBjdHlwZXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkhlbGxvIGZyb20gY3R5cGVzIikKIAogICAgICAgICAjIG5vdCBlbm91Z2ggYXJndW1lbnRzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIFB5T1Nfc25wcmludGYsIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQeU9TX3NucHJpbnRmLCBidWYpCiAKICAgICBkZWYgdGVzdF9weW9iamVjdF9yZXByKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXByKHB5X29iamVjdCgpKSwgInB5X29iamVjdCg8TlVMTD4pIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVwcihweV9vYmplY3QoNDIpKSwgInB5X29iamVjdCg0MikiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXByKHB5X29iamVjdChvYmplY3QpKSwgInB5X29iamVjdCglcikiICUgb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocHlfb2JqZWN0KCkpLCAicHlfb2JqZWN0KDxOVUxMPikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocHlfb2JqZWN0KDQyKSksICJweV9vYmplY3QoNDIpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHB5X29iamVjdChvYmplY3QpKSwgInB5X29iamVjdCglcikiICUgb2JqZWN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKaW5kZXggMTgzYjFkNi4uMWMyMTdjMyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0LCBzeXMKIAogZGVmIGNhbGxiYWNrX2Z1bmMoYXJnKToKLSAgICA0MiAvIGFyZworICAgIDQyIC8vIGFyZwogICAgIHJhaXNlIFZhbHVlRXJyb3IoYXJnKQogCiBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgICAgICAgIGhkbGwgPSB3aW5kbGwua2VybmVsMzIuTG9hZExpYnJhcnlBKCJrZXJuZWwzMiIpCiAgICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCAiR2V0TW9kdWxlSGFuZGxlQSIpCiAKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsX2Z1bmN0aW9uKGZ1bmNhZGRyLCAoTm9uZSwpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKQogCiBjbGFzcyBDYWxsYmFja1RyYWNiYWNrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDksMjcgKzQ5LDI3IEBACiAgICAgZGVmIHRlc3RfVmFsdWVFcnJvcihzZWxmKToKICAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KShjYWxsYmFja19mdW5jKQogICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCA0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZUVycm9yOiA0MiIpCiAKICAgICBkZWYgdGVzdF9JbnRlZ2VyRGl2aXNpb25FcnJvcihzZWxmKToKICAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KShjYWxsYmFja19mdW5jKQogICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvdXQuc3BsaXRsaW5lcygpWy0xXVs6MTldLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdWzoxOV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaZXJvRGl2aXNpb25FcnJvcjogIikKIAogICAgIGRlZiB0ZXN0X0Zsb2F0RGl2aXNpb25FcnJvcihzZWxmKToKICAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfZG91YmxlKShjYWxsYmFja19mdW5jKQogICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAwLjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdWzoxOV0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV1bOjE5XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplcm9EaXZpc2lvbkVycm9yOiAiKQogCiAgICAgZGVmIHRlc3RfVHlwZUVycm9yRGl2aXNpb25FcnJvcihzZWxmKToKICAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfY2hhcl9wKShjYWxsYmFja19mdW5jKQogICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAic3BhbSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZUVycm9yOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBvcGVyYW5kIHR5cGUocykgZm9yIC86ICdpbnQnIGFuZCAnc3RyJyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBvcGVyYW5kIHR5cGUocykgZm9yIC8vOiAnaW50JyBhbmQgJ3N0ciciKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVmY291bnRzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVmY291bnRzLnB5CmluZGV4IDQ0OGYyOTIuLjM1YTgxYWEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JlZmNvdW50cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZWZjb3VudHMucHkKQEAgLTIxLDE3ICsyMSwxNyBAQAogICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKICAgICAgICAgICAgIHJldHVybiB2YWx1ZQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhjYWxsYmFjayksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGNhbGxiYWNrKSwgMikKICAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhncmMoY2FsbGJhY2spID4gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhjYWxsYmFjaykgPiAyKQogICAgICAgICByZXN1bHQgPSBmKC0xMCwgY2IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc3VsdCwgLTE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogICAgICAgICBjYiA9IE5vbmUKIAogICAgICAgICBnYy5jb2xsZWN0KCkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoY2FsbGJhY2spLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhjYWxsYmFjayksIDIpCiAKIAogICAgIGRlZiB0ZXN0X3JlZmNvdW50KHNlbGYpOgpAQCAtMzksMTkgKzM5LDE5IEBACiAgICAgICAgIGRlZiBmdW5jKCphcmdzKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyB0aGlzIGlzIHRoZSBzdGFuZGFyZCByZWZjb3VudCBmb3IgZnVuYwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoZnVuYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGZ1bmMpLCAyKQogCiAgICAgICAgICMgdGhlIENGdW5jUHRyIGluc3RhbmNlIGhvbGRzIGF0ciBsZWFzdCBvbmUgcmVmY291bnQgb24gZnVuYzoKICAgICAgICAgZiA9IE90aGVyQ2FsbGJhY2soZnVuYykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhmdW5jKSA+IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShncmMoZnVuYykgPiAyKQogCiAgICAgICAgICMgYW5kIG1heSByZWxlYXNlIGl0IGFnYWluCiAgICAgICAgIGRlbCBmCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhncmMoZnVuYykgPj0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA+PSAyKQogCiAgICAgICAgICMgYnV0IG5vdyBpdCBtdXN0IGJlIGdvbmUKICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhncmMoZnVuYykgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA9PSAyKQogCiAgICAgICAgIGNsYXNzIFgoY3R5cGVzLlN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBPdGhlckNhbGxiYWNrKV0KQEAgLTU5LDI3ICs1OSwyNyBAQAogICAgICAgICB4LmEgPSBPdGhlckNhbGxiYWNrKGZ1bmMpCiAKICAgICAgICAgIyB0aGUgQ0Z1bmNQdHIgaW5zdGFuY2UgaG9sZHMgYXRyIGxlYXN0IG9uZSByZWZjb3VudCBvbiBmdW5jOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ3JjKGZ1bmMpID4gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA+IDIpCiAKICAgICAgICAgIyBhbmQgbWF5IHJlbGVhc2UgaXQgYWdhaW4KICAgICAgICAgZGVsIHgKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhmdW5jKSA+PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID49IDIpCiAKICAgICAgICAgIyBhbmQgbm93IGl0IG11c3QgYmUgZ29uZSBhZ2FpbgogICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKGZ1bmMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhmdW5jKSwgMikKIAogICAgICAgICBmID0gT3RoZXJDYWxsYmFjayhmdW5jKQogCiAgICAgICAgICMgdGhlIENGdW5jUHRyIGluc3RhbmNlIGhvbGRzIGF0ciBsZWFzdCBvbmUgcmVmY291bnQgb24gZnVuYzoKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdyYyhmdW5jKSA+IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShncmMoZnVuYykgPiAyKQogCiAgICAgICAgICMgY3JlYXRlIGEgY3ljbGUKICAgICAgICAgZi5jeWNsZSA9IGYKIAogICAgICAgICBkZWwgZgogICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ3JjKGZ1bmMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhmdW5jKSwgMikKIAogY2xhc3MgQW5vdGhlckxlYWsodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NhbGxiYWNrKHNlbGYpOgpAQCAtOTIsNyArOTIsNyBAQAogCiAgICAgICAgIGEgPSBzeXMuZ2V0cmVmY291bnQoY3R5cGVzLmNfaW50KQogICAgICAgICBmKDEsIDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN5cy5nZXRyZWZjb3VudChjdHlwZXMuY19pbnQpLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChjdHlwZXMuY19pbnQpLCBhKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVwci5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JlcHIucHkKaW5kZXggOWZlZjIxZi4uOTljYzU1NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVwci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5CkBAIC0xOCwxMiArMTgsMTIgQEAKICAgICBkZWYgdGVzdF9udW1iZXJzKHNlbGYpOgogICAgICAgICBmb3IgdHlwIGluIHN1YmNsYXNzZXM6CiAgICAgICAgICAgICBiYXNlID0gdHlwLl9fYmFzZXNfX1swXQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoYmFzZSg0MikpLnN0YXJ0c3dpdGgoYmFzZS5fX25hbWVfXykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiPFggb2JqZWN0IGF0IiwgcmVwcih0eXAoNDIpKVs6MTJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoYmFzZSg0MikpLnN0YXJ0c3dpdGgoYmFzZS5fX25hbWVfXykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8WCBvYmplY3QgYXQiLCByZXByKHR5cCg0MikpWzoxMl0pCiAKICAgICBkZWYgdGVzdF9jaGFyKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgiY19jaGFyKCd4JykiLCByZXByKGNfY2hhcigneCcpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoIjxYIG9iamVjdCBhdCIsIHJlcHIoWCgneCcpKVs6MTJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJjX2NoYXIoJ3gnKSIsIHJlcHIoY19jaGFyKCd4JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8WCBvYmplY3QgYXQiLCByZXByKFgoJ3gnKSlbOjEyXSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JldHVybmZ1bmNwdHJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkKaW5kZXggODhkY2NmMi4uZjc2NjE4OSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkKQEAgLTEyLDggKzEyLDggQEAKICAgICAgICAgZ2V0X3N0cmNociA9IGRsbC5nZXRfc3RyY2hyCiAgICAgICAgIGdldF9zdHJjaHIucmVzdHlwZSA9IENGVU5DVFlQRShjX2NoYXJfcCwgY19jaGFyX3AsIGNfY2hhcikKICAgICAgICAgc3RyY2hyID0gZ2V0X3N0cmNocigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocigiYWJjZGVmIiwgImIiKSwgImJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAieCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgImIiKSwgImJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZiIsICJ4IiksIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgImFiY2RlZiIsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RyY2hyLCAiYWJjZGVmIikKIApAQCAtMjYsOCArMjYsOCBAQAogICAgICAgICAjIF9DRnVuY1B0ciBpbnN0YW5jZXMgYXJlIG5vdyBjYWxsYWJsZSB3aXRoIGFuIGludGVnZXIgYXJndW1lbnQKICAgICAgICAgIyB3aGljaCBkZW5vdGVzIGEgZnVuY3Rpb24gYWRkcmVzczoKICAgICAgICAgc3RyY2hyID0gQ0ZVTkNUWVBFKGNfY2hhcl9wLCBjX2NoYXJfcCwgY19jaGFyKShhZGRyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyY2hyKCJhYmNkZWYiLCAiYiIpLCAiYmNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoImFiY2RlZiIsICJ4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJjaHIoImFiY2RlZiIsICJiIiksICJiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAieCIpLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBzdHJjaHIsICJhYmNkZWYiLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0cmNociwgImFiY2RlZiIpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpbXBsZXN1YmNsYXNzZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaW1wbGVzdWJjbGFzc2VzLnB5CmluZGV4IDU2NzFjY2UuLjFiNzNmYjMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpbXBsZXN1YmNsYXNzZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2ltcGxlc3ViY2xhc3Nlcy5weQpAQCAtMTIsOCArMTIsOCBAQAogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChNeUludCgzKSwgTXlJbnQoMykpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwoTXlJbnQoNDIpLCBNeUludCg0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlJbnQoMyksIE15SW50KDMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKE15SW50KDQyKSwgTXlJbnQoNDMpKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX3JldHZhbChzZWxmKToKICAgICAgICAgIyBUZXN0IGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBjYWxsYmFjayBpcyBpZ25vcmVkCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICAgICByZXR1cm4gKDEsICJhYmMiLCBOb25lKQogCiAgICAgICAgIGNiID0gcHJvdG8oZnVuYykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTm9uZSwgY2IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjYigpKQogCiAKICAgICBkZWYgdGVzdF9pbnRfY2FsbGJhY2soc2VsZik6CkBAIC0zNCwyNCArMzQsMjQgQEAKIAogICAgICAgICBjYiA9IENGVU5DVFlQRShOb25lLCBNeUludCkoZnVuYykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChOb25lLCBjYig0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUoYXJnc1stMV0pLCBNeUludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjYig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhcmdzWy0xXSksIE15SW50KQogCiAgICAgICAgIGNiID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkoZnVuYykKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgY2IoNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKGFyZ3NbLTFdKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBjYig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhcmdzWy0xXSksIGludCkKIAogICAgIGRlZiB0ZXN0X2ludF9zdHJ1Y3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIE15SW50KV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYKCkueCwgTXlJbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkueCwgTXlJbnQoKSkKIAogICAgICAgICBzID0gWCgpCiAgICAgICAgIHMueCA9IE15SW50KDQyKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHMueCwgTXlJbnQoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMueCwgTXlJbnQoNDIpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2l6ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weQppbmRleCAyMDhjMDBlLi5mOWI1ZTk3IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weQpAQCAtMSwyNyArMSwzNCBAQAogIyBUZXN0IHNwZWNpZmljYWxseS1zaXplZCBjb250YWluZXJzLgogCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCiAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKIGNsYXNzIFNpemVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0Xzgoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDEsIHNpemVvZihjX2ludDgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgxLCBzaXplb2YoY191aW50OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2l6ZW9mKGNfaW50OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2l6ZW9mKGNfdWludDgpKQogCiAgICAgZGVmIHRlc3RfMTYoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDIsIHNpemVvZihjX2ludDE2KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMiwgc2l6ZW9mKGNfdWludDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzaXplb2YoY19pbnQxNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2l6ZW9mKGNfdWludDE2KSkKIAogICAgIGRlZiB0ZXN0XzMyKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0LCBzaXplb2YoY19pbnQzMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQsIHNpemVvZihjX3VpbnQzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgc2l6ZW9mKGNfaW50MzIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIHNpemVvZihjX3VpbnQzMikpCiAKICAgICBkZWYgdGVzdF82NChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOCwgc2l6ZW9mKGNfaW50NjQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg4LCBzaXplb2YoY191aW50NjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIHNpemVvZihjX2ludDY0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBzaXplb2YoY191aW50NjQpKQogCiAgICAgZGVmIHRlc3Rfc2l6ZV90KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoY192b2lkX3ApLCBzaXplb2YoY19zaXplX3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihjX3ZvaWRfcCksIHNpemVvZihjX3NpemVfdCkpCisKKyAgICBkZWYgdGVzdF9zc2l6ZV90KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihjX3ZvaWRfcCksIHNpemVvZihjX3NzaXplX3QpKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weQppbmRleCAyNWJkODAxLi5hNTYzMmVjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKQEAgLTcsNDMgKzcsNDMgQEAKICAgICBkZWYgdGVzdF9nZXRzbGljZV9jaW50KHNlbGYpOgogICAgICAgICBhID0gKGNfaW50ICogMTAwKSgqeHJhbmdlKDExMDAsIDEyMDApKQogICAgICAgICBiID0gcmFuZ2UoMTEwMCwgMTIwMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVswOjJdLCBiWzA6Ml0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMDoyOl0sIGJbMDoyOl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihhKSwgbGVuKGIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzU6N10sIGJbNTo3XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVs1Ojc6XSwgYls1Ojc6XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVstMV0sIGJbLTFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzpdLCBiWzpdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzo6XSwgYls6Ol0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMTA6Oi0xXSwgYlsxMDo6LTFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzMwOjIwOi0xXSwgYlszMDoyMDotMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbOjEyOjZdLCBiWzoxMjo2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVsyOjY6NF0sIGJbMjo2OjRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMDoyXSwgYlswOjJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMDoyOl0sIGJbMDoyOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCBsZW4oYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs1OjddLCBiWzU6N10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs1Ojc6XSwgYls1Ojc6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xXSwgYlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYls6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6XSwgYls6Ol0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDo6LTFdLCBiWzEwOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszMDoyMDotMV0sIGJbMzA6MjA6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjEyOjZdLCBiWzoxMjo2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzI6Njo0XSwgYlsyOjY6NF0pCiAKICAgICAgICAgYVswOjVdID0gcmFuZ2UoNSwgMTApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMDo1XSwgcmFuZ2UoNSwgMTApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzA6NTpdLCByYW5nZSg1LCAxMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbNDo6LTFdLCByYW5nZSg5LCA0LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjVdLCByYW5nZSg1LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjU6XSwgcmFuZ2UoNSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbNDo6LTFdLCByYW5nZSg5LCA0LCAtMSkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV9jaW50KHNlbGYpOgogICAgICAgICBhID0gKGNfaW50ICogMTAwKSgqeHJhbmdlKDExMDAsIDEyMDApKQogICAgICAgICBiID0gcmFuZ2UoMTEwMCwgMTIwMCkKIAogICAgICAgICBhWzMyOjQ3XSA9IHJhbmdlKDMyLCA0NykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVszMjo0N10sIHJhbmdlKDMyLCA0NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszMjo0N10sIHJhbmdlKDMyLCA0NykpCiAgICAgICAgIGFbMzI6NDddID0gcmFuZ2UoMTMyLCAxNDcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbMzI6NDc6XSwgcmFuZ2UoMTMyLCAxNDcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMzI6NDc6XSwgcmFuZ2UoMTMyLCAxNDcpKQogICAgICAgICBhWzQ2OjMxOi0xXSA9IHJhbmdlKDIzMiwgMjQ3KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzMyOjQ3OjFdLCByYW5nZSgyNDYsIDIzMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMzI6NDc6MV0sIHJhbmdlKDI0NiwgMjMxLCAtMSkpCiAKICAgICAgICAgYVszMjo0N10gPSByYW5nZSgxMTMyLCAxMTQ3KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhWzpdLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOl0sIGIpCiAgICAgICAgIGFbMzI6NDc6N10gPSByYW5nZSgzKQogICAgICAgICBiWzMyOjQ3OjddID0gcmFuZ2UoMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYVs6XSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCBiKQogICAgICAgICBhWzMzOjotM10gPSByYW5nZSgxMikKICAgICAgICAgYlszMzo6LTNdID0gcmFuZ2UoMTIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFbOl0sIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYikKIAogICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBzZXRzbGljZSwgc2V0aXRlbQogCkBAIC02OSwxMiArNjksMTIgQEAKICAgICAgICAgZGxsLm15X3N0cmR1cC5yZXN0eXBlID0gUE9JTlRFUihjX2NoYXIpCiAgICAgICAgIGRsbC5teV9mcmVlLnJlc3R5cGUgPSBOb25lCiAgICAgICAgIHJlcyA9IGRsbC5teV9zdHJkdXAocykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyldLCBzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOjNdLCBzWzozXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyk6XSwgcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzW2xlbihzKS0xOi0xOi0xXSwgc1s6Oi0xXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzA6LTE6LTFdLCBzWzA6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKV0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzozXSwgc1s6M10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTo1Oi03XSwgc1s6NTotN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzA6LTE6LTFdLCBzWzA6Oi0xXSkKIAogICAgICAgICBpbXBvcnQgb3BlcmF0b3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwKQEAgLTk0LDggKzk0LDggQEAKIAogICAgICAgICBkbGwubXlfc3RyZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfYnl0ZSkKICAgICAgICAgcmVzID0gZGxsLm15X3N0cmR1cChzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKV0sIHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyk6XSwgcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpXSwgcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpOl0sIHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKSkKICAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCiAgICAgZGVmIHRlc3RfY2hhcl9wdHJfd2l0aF9mcmVlKHNlbGYpOgpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgIGRsbC5teV9zdHJkdXAuZXJyY2hlY2sgPSBlcnJjaGVjawogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXMgPSBkbGwubXlfc3RyZHVwKHMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXMsIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgcykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBkbGwubXlfc3RyZHVwLmVycmNoZWNrCiAKQEAgLTEyNCwxMSArMTI0LDExIEBACiAgICAgICAgIHMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcMCIKIAogICAgICAgICBwID0gKGNfY2hhciAqIDI3KSgqcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6XSwgcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFs6Ol0sIHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbOjotMV0sIHNbOjotMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHBbNTo6LTJdLCBzWzU6Oi0yXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocFsyOjU6LTNdLCBzWzI6NTotM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6XSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo6XSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo6LTFdLCBzWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbNTo6LTJdLCBzWzU6Oi0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzI6NTotM10sIHNbMjo1Oi0zXSkKIAogCiAgICAgdHJ5OgpAQCAtMTQ0LDEwICsxNDQsMTAgQEAKICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAuYXJndHlwZXMgPSBQT0lOVEVSKGNfd2NoYXIpLAogICAgICAgICAgICAgZGxsLm15X2ZyZWUucmVzdHlwZSA9IE5vbmUKICAgICAgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1s6bGVuKHMpXSwgcykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1s6bGVuKHMpOl0sIHMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyldLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKTpdLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6NTotN10sIHNbOjU6LTddKQogCiAgICAgICAgICAgICBpbXBvcnQgb3BlcmF0b3IKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0c2xpY2UsCkBAIC0xNjYsMTAgKzE2NiwxMCBAQAogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQogICAgICAgICAgICAgdG1wbCA9IHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbOmxlbihzKS0xOl0sIHRtcGwpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXNbbGVuKHMpLTI6LTE6LTFdLCB0bXBsWzo6LTFdKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTE6XSwgdG1wbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOi0xOi0xXSwgdG1wbFs6Oi0xXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKICAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlcykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5CmluZGV4IDZlZTZhZTAuLmFiZWQ1OGIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3B0ci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdwdHIucHkKQEAgLTE2LDE0ICsxNiwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRhdHRyLCB4LnN0ciwgImNvbnRlbnRzIikKICAgICAgICAgYiA9IGNfYnVmZmVyKCJIZWxsbywgV29ybGQiKQogICAgICAgICBmcm9tIHN5cyBpbXBvcnQgZ2V0cmVmY291bnQgYXMgZ3JjCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGdyYyhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoYiksIDIpCiAgICAgICAgIHguc3RyID0gYgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChncmMoYiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKGIpLCAzKQogCiAgICAgICAgICMgUE9JTlRFUihjX2NoYXIpIGFuZCBQeXRob24gc3RyaW5nIGlzIE5PVCBjb21wYXRpYmxlCiAgICAgICAgICMgUE9JTlRFUihjX2NoYXIpIGFuZCBjX2J1ZmZlcigpIGlzIGNvbXBhdGlibGUKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGIpKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJbaV0sIHguc3RyW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiW2ldLCB4LnN0cltpXSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHgsICJzdHIiLCAiSGVsbG8sIFdvcmxkIikKIApAQCAtMzQsMTEgKzM0LDExIEBACiAKICAgICAgICAgIyBjX2NoYXJfcCBhbmQgUHl0aG9uIHN0cmluZyBpcyBjb21wYXRpYmxlCiAgICAgICAgICMgY19jaGFyX3AgYW5kIGNfYnVmZmVyIGlzIE5PVCBjb21wYXRpYmxlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguc3RyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc3RyLCBOb25lKQogICAgICAgICB4LnN0ciA9ICJIZWxsbywgV29ybGQiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHguc3RyLCAiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnN0ciwgIkhlbGxvLCBXb3JsZCIpCiAgICAgICAgIGIgPSBjX2J1ZmZlcigiSGVsbG8sIFdvcmxkIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgeCwgInN0ciIsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgeCwgInN0ciIsIGIpCiAKIAogICAgIGRlZiB0ZXN0X2Z1bmN0aW9ucyhzZWxmKToKQEAgLTQ4LDE1ICs0OCwxNSBAQAogICAgICAgICAjIGNfY2hhcl9wIGFuZCBQeXRob24gc3RyaW5nIGlzIGNvbXBhdGlibGUKICAgICAgICAgIyBjX2NoYXJfcCBhbmQgY19idWZmZXIgYXJlIG5vdyBjb21wYXRpYmxlCiAgICAgICAgIHN0cmNoci5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2NoYXIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYyIpLCAiY2RlZiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHN0cmNocihjX2J1ZmZlcigiYWJjZGVmIiksICJjIiksICJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZiIsICJjIiksICJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoY19idWZmZXIoImFiY2RlZiIpLCAiYyIpLCAiY2RlZiIpCiAKICAgICAgICAgIyBQT0lOVEVSKGNfY2hhcikgYW5kIFB5dGhvbiBzdHJpbmcgaXMgTk9UIGNvbXBhdGlibGUKICAgICAgICAgIyBQT0lOVEVSKGNfY2hhcikgYW5kIGNfYnVmZmVyKCkgaXMgY29tcGF0aWJsZQogICAgICAgICBzdHJjaHIuYXJndHlwZXMgPSBQT0lOVEVSKGNfY2hhciksIGNfY2hhcgogICAgICAgICBidWYgPSBjX2J1ZmZlcigiYWJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RyY2hyKGJ1ZiwgImMiKSwgImNkZWYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJjaHIoImFiY2RlZiIsICJjIiksICJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoYnVmLCAiYyIpLCAiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYyIpLCAiY2RlZiIpCiAKICAgICAgICAgIyBYWFggVGhlc2UgY2FsbHMgYXJlIGRhbmdlcm91cywgYmVjYXVzZSB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAgICAgIyB0byBzdHJjaHIgaXMgbm8gbG9uZ2VyIHZhbGlkIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIQpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICBidWYgPSBjX2J1ZmZlcigiYWJjZGVmIikKICAgICAgICAgciA9IHN0cmNocihidWYsICJjIikKICAgICAgICAgeCA9IHJbMF0sIHJbMV0sIHJbMl0sIHJbM10sIHJbNF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoeCwgKCJjIiwgImQiLCAiZSIsICJmIiwgIlwwMDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAoImMiLCAiZCIsICJlIiwgImYiLCAiXDAwMCIpKQogICAgICAgICBkZWwgYnVmCiAgICAgICAgICMgeDEgd2lsbCBOT1QgYmUgdGhlIHNhbWUgYXMgeCwgdXN1YWxseToKICAgICAgICAgeDEgPSByWzBdLCByWzFdLCByWzJdLCByWzNdLCByWzRdCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQppbmRleCA3MjI0OGUxLi44OTQ1ZDBjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKQEAgLTEsNDYgKzEsNTMgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKIGNsYXNzIFN0cmluZ0FycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgogICAgICAgICBCVUYgPSBjX2NoYXIgKiA0CiAKICAgICAgICAgYnVmID0gQlVGKCJhIiwgImIiLCAiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgImFiYyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi5yYXcsICJhYmNcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsICJhYmNcMDAwIikKIAogICAgICAgICBidWYudmFsdWUgPSAiQUJDRCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAiQUJDRCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi5yYXcsICJBQkNEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJBQkNEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYucmF3LCAiQUJDRCIpCiAKICAgICAgICAgYnVmLnZhbHVlID0gIngiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgIngiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYucmF3LCAieFwwMDBDRCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnJhdywgInhcMDAwQ0QiKQogCiAgICAgICAgIGJ1ZlsxXSA9ICJaIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsICJ4WkNEIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnJhdywgInhaQ0QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsICJ4WkNEIikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsICJhYWFhYWFhYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCA0MikKIAotICAgIGRlZiB0ZXN0X2NfYnVmZmVyX3ZhbHVlKHNlbGYpOgorICAgIGRlZiB0ZXN0X2NfYnVmZmVyX3ZhbHVlKHNlbGYsIG1lbW9yeXZpZXc9bWVtb3J5dmlldyk6CiAgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKDMyKQogCiAgICAgICAgIGJ1Zi52YWx1ZSA9ICJIZWxsbywgV29ybGQiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIGJ1ZmZlcigiSGVsbG8sIFdvcmxkIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBidWZmZXIoImFiYyIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBidWYsICJyYXciLCBidWZmZXIoIngiICogMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIG1lbW9yeXZpZXcoIkhlbGxvLCBXb3JsZCIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgbWVtb3J5dmlldygiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInJhdyIsIG1lbW9yeXZpZXcoIngiICogMTAwKSkKIAotICAgIGRlZiB0ZXN0X2NfYnVmZmVyX3JhdyhzZWxmKToKKyAgICBkZWYgdGVzdF9jX2J1ZmZlcl9yYXcoc2VsZiwgbWVtb3J5dmlldz1tZW1vcnl2aWV3KToKICAgICAgICAgYnVmID0gY19idWZmZXIoMzIpCiAKLSAgICAgICAgYnVmLnJhdyA9IGJ1ZmZlcigiSGVsbG8sIFdvcmxkIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIGJ1ZmZlcigiYWJjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInJhdyIsIGJ1ZmZlcigieCIgKiAxMDApKQorICAgICAgICBidWYucmF3ID0gbWVtb3J5dmlldygiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJIZWxsbywgV29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgbWVtb3J5dmlldygiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInJhdyIsIG1lbW9yeXZpZXcoIngiICogMTAwKSkKKworICAgIGRlZiB0ZXN0X2NfYnVmZmVyX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgICMgQ29tcGF0aWJpbGl0eSB3aXRoIDIueAorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY19idWZmZXJfdmFsdWUoYnVmZmVyKQorICAgICAgICAgICAgc2VsZi50ZXN0X2NfYnVmZmVyX3JhdyhidWZmZXIpCiAKICAgICBkZWYgdGVzdF9wYXJhbV8xKHNlbGYpOgogICAgICAgICBCVUYgPSBjX2NoYXIgKiA0CkBAIC02MywxNiArNzAsMTYgQEAKICAgICAgICAgICAgIEJVRiA9IGNfd2NoYXIgKiA0CiAKICAgICAgICAgICAgIGJ1ZiA9IEJVRih1ImEiLCB1ImIiLCB1ImMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCB1ImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgdSJhYmMiKQogCiAgICAgICAgICAgICBidWYudmFsdWUgPSB1IkFCQ0QiCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWYudmFsdWUsIHUiQUJDRCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgdSJBQkNEIikKIAogICAgICAgICAgICAgYnVmLnZhbHVlID0gdSJ4IgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmLnZhbHVlLCB1IngiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIHUieCIpCiAKICAgICAgICAgICAgIGJ1ZlsxXSA9IHUiWiIKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zi52YWx1ZSwgdSJ4WkNEIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCB1InhaQ0QiKQogCiBjbGFzcyBTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIFhYX3Rlc3RfYmFzaWNfc3RyaW5ncyhzZWxmKToKQEAgLTgwLDI0ICs4NywyNCBAQAogCiAgICAgICAgICMgQ2Fubm90IGNhbGwgbGVuIG9uIGEgY19zdHJpbmcgYW55IGxvbmdlcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgY3MpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihjcyksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgNykKIAogICAgICAgICAjIFRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBOVUwuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnZhbHVlLCAiYWJjZGVmIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY19zdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQogCiAgICAgICAgICMgVGhlIHJhdyBwcm9wZXJ0eSBpcyB0aGUgdG90YWwgYnVmZmVyIGNvbnRlbnRzOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY19zdHJpbmcoImFiY1wwMDBkZWYiKS5yYXcsICJhYmNcMDAwZGVmXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MucmF3LCAiYWJjZGVmXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiY1wwMDBkZWYiKS5yYXcsICJhYmNcMDAwZGVmXDAwMCIpCiAKICAgICAgICAgIyBXZSBjYW4gY2hhbmdlIHRoZSB2YWx1ZToKICAgICAgICAgY3MudmFsdWUgPSAiYWIiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnZhbHVlLCAiYWIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjcy5yYXcsICJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKIAogICAgICAgICBjcy5yYXcgPSAiWFkiCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNzLnZhbHVlLCAiWFkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjcy5yYXcsICJYWVwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgIlhZIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJYWVwwMDBcMDAwXDAwMFwwMDBcMDAwIikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfc3RyaW5nLCB1IjEyMyIpCiAKQEAgLTEwOCwyNCArMTE1LDI0IEBACiAKICAgICAgICAgIyBOZXcgaW4gcmVsZWFzZXMgbGF0ZXIgdGhhbiAwLjQuMDoKICAgICAgICAgIyBjX3N0cmluZyhudW1iZXIpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9mIHNpemUgbnVtYmVyCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsZW4oY19zdHJpbmcoMzIpLnJhdykgPT0gMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY19zdHJpbmcoMzIpLnJhdykgPT0gMzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfc3RyaW5nLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19zdHJpbmcsIDApCiAKICAgICAgICAgIyBUaGVzZSB0ZXN0cyBmYWlsLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBpbml0aWFsaXplZAotIyMgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygyKS52YWx1ZSA9PSAiIikKLSMjICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zdHJpbmcoMikucmF3ID09ICJcMDAwXDAwMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygyKS5yYXdbLTFdID09ICJcMDAwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxlbihjX3N0cmluZygyKS5yYXcpID09IDIpCisjIyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKDIpLnZhbHVlID09ICIiKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygyKS5yYXcgPT0gIlwwMDBcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKDIpLnJhd1stMV0gPT0gIlwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGNfc3RyaW5nKDIpLnJhdykgPT0gMikKIAogICAgIGRlZiBYWF90ZXN0X2luaXRpYWxpemVkX3N0cmluZ3Moc2VsZik6CiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6Ml0gPT0gImFiIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjpdID09ICJhYiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6LTFdID09ICJiYSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6Ml0gPT0gImEiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY19zdHJpbmcoImFiIiwgNCkucmF3Wy0xXSA9PSAiXDAwMCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3N0cmluZygiYWIiLCAyKS5yYXcgPT0gImFcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6Ml0gPT0gImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1s6MjpdID09ICJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6LTFdID09ICJiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6Ml0gPT0gImEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgNCkucmF3Wy0xXSA9PSAiXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCAyKS5yYXcgPT0gImFcMDAwIikKIAogICAgIGRlZiBYWF90ZXN0X3Rvb2xvbmcoc2VsZik6CiAgICAgICAgIGNzID0gY19zdHJpbmcoImFiY2RlZiIpCkBAIC0xNTYsMjIgKzE2MywyMiBAQAogICAgICAgICAgICAgIyBYWFggVGhpcyBiZWhhdmlvdXIgaXMgYWJvdXQgdG8gY2hhbmdlOgogICAgICAgICAgICAgIyBsZW4gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIGluIGJ5dGVzLgogICAgICAgICAgICAgIyBUaGlzIGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNpemVvZihjcykgPT0gMTQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZW9mKGNzKSA9PSAxNCkKIAogICAgICAgICAgICAgIyBUaGUgdmFsdWUgcHJvcGVydHkgaXMgdGhlIHN0cmluZyB1cCB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgTlVMLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNzLnZhbHVlID09IHUiYWJjZGVmIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikudmFsdWUgPT0gdSJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNzLnZhbHVlID09IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikudmFsdWUgPT0gdSJhYmMiKQogCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY193c3RyaW5nKHUiYWJjXDAwMGRlZiIpLnZhbHVlID09IHUiYWJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikudmFsdWUgPT0gdSJhYmMiKQogCiAgICAgICAgICAgICAjIFRoZSByYXcgcHJvcGVydHkgaXMgdGhlIHRvdGFsIGJ1ZmZlciBjb250ZW50czoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjcy5yYXcgPT0gdSJhYmNkZWZcMDAwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikucmF3ID09IHUiYWJjXDAwMGRlZlwwMDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNzLnJhdyA9PSB1ImFiY2RlZlwwMDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfd3N0cmluZyh1ImFiY1wwMDBkZWYiKS5yYXcgPT0gdSJhYmNcMDAwZGVmXDAwMCIpCiAKICAgICAgICAgICAgICMgV2UgY2FuIGNoYW5nZSB0aGUgdmFsdWU6CiAgICAgICAgICAgICBjcy52YWx1ZSA9IHUiYWIiCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3MudmFsdWUgPT0gdSJhYiIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3MucmF3ID09IHUiYWJcMDAwXDAwMFwwMDBcMDAwXDAwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3MudmFsdWUgPT0gdSJhYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3MucmF3ID09IHUiYWJcMDAwXDAwMFwwMDBcMDAwXDAwMCIpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY193c3RyaW5nLCAiMTIzIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfd3N0cmluZywgMCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdF9maWVsZHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3RfZmllbGRzLnB5CmluZGV4IGVmNWZiNTAuLjIyZWIzYjAgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdF9maWVsZHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0X2ZpZWxkcy5weQpAQCAtMTUsNyArMTUsNyBAQAogICAgIGRlZiB0ZXN0XzFfQShzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIDApICMgbm90IGZpbmFsaXplZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgMCkgIyBub3QgZmluYWxpemVkCiAgICAgICAgIFguX2ZpZWxkc18gPSBbXSAjIGZpbmFsaXplZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgWCwgIl9maWVsZHNfIiwgW10pCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CmluZGV4IDM1YmVhNjIuLjc3Y2ZiMjYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQpAQCAtMTMsMzMgKzEzLDMzIEBACiAgICAgICAgIGNsYXNzIFooWCk6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWSksIHNpemVvZihjX2ludCkqMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFopLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWS5fZmllbGRzXywgWygiYiIsIGNfaW50KV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFouX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWSksIHNpemVvZihjX2ludCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWiksIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5fZmllbGRzXywgWygiYiIsIGNfaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWi5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19kZWxheWVkKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIDApCiAgICAgICAgIFguX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpXQogCiAgICAgICAgIGNsYXNzIFkoWCk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihZKSwgc2l6ZW9mKFgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihZKSwgc2l6ZW9mKFgpKQogICAgICAgICBZLl9maWVsZHNfID0gWygiYiIsIGNfaW50KV0KIAogICAgICAgICBjbGFzcyBaKFgpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoY19pbnQpKjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihaKSwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC5fZmllbGRzXywgWygiYSIsIGNfaW50KV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFkuX2ZpZWxkc18sIFsoImIiLCBjX2ludCldKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChaLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoY19pbnQpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFopLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX2ZpZWxkc18sIFsoImIiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFouX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQogCiBjbGFzcyBTdHJ1Y3R1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZm9ybWF0cyA9IHsiYyI6IGNfY2hhciwKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2NoYXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIHRwKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzaXplb2YoWCksIGNvZGUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2l6ZW9mKFgpLCBjb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxjc2l6ZSgiYyVjMCVjIiAlIChjb2RlLCBjb2RlKSksIGNvZGUpKQogCiAgICAgZGVmIHRlc3RfdW5pb25zKHNlbGYpOgpAQCAtNzAsMzkgKzcwLDM5IEBACiAgICAgICAgICAgICBjbGFzcyBYKFVuaW9uKToKICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2NoYXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIHRwKV0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChzaXplb2YoWCksIGNvZGUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2l6ZW9mKFgpLCBjb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxjc2l6ZSgiJWMiICUgKGNvZGUpKSwgY29kZSkpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RfYWxpZ25tZW50KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2NoYXIgKiAzKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWxpZ25tZW50KFgpLCBjYWxjc2l6ZSgicyIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIGNhbGNzaXplKCIzcyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaWdubWVudChYKSwgY2FsY3NpemUoInMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIGNhbGNzaXplKCIzcyIpKQogCiAgICAgICAgIGNsYXNzIFkoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfY2hhciAqIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19pbnQpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhbGlnbm1lbnQoWSksIGNhbGNzaXplKCJpIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihZKSwgY2FsY3NpemUoIjNzaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaWdubWVudChZKSwgY2FsY3NpemUoImkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWSksIGNhbGNzaXplKCIzc2kiKSkKIAogICAgICAgICBjbGFzcyBTSShTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgWCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBZKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWxpZ25tZW50KFNJKSwgbWF4KGFsaWdubWVudChZKSwgYWxpZ25tZW50KFgpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFNJKSwgY2FsY3NpemUoIjNzMGkgM3NpIDBpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFNJKSwgbWF4KGFsaWdubWVudChZKSwgYWxpZ25tZW50KFgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoU0kpLCBjYWxjc2l6ZSgiM3MwaSAzc2kgMGkiKSkKIAogICAgICAgICBjbGFzcyBJUyhTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJiIiwgWSksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImEiLCBYKV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChhbGlnbm1lbnQoU0kpLCBtYXgoYWxpZ25tZW50KFgpLCBhbGlnbm1lbnQoWSkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoSVMpLCBjYWxjc2l6ZSgiM3NpIDNzIDBpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFNJKSwgbWF4KGFsaWdubWVudChYKSwgYWxpZ25tZW50KFkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoSVMpLCBjYWxjc2l6ZSgiM3NpIDNzIDBpIikpCiAKICAgICAgICAgY2xhc3MgWFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIFgpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgWCldCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGFsaWdubWVudChYWCksIGFsaWdubWVudChYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFhYKSwgY2FsY3NpemUoIjNzIDNzIDBzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFhYKSwgYWxpZ25tZW50KFgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYWCksIGNhbGNzaXplKCIzcyAzcyAwcyIpKQogCiAgICAgZGVmIHRlc3RfZW10cHkoc2VsZik6CiAgICAgICAgICMgSSBoYWQgcHJvYmxlbXMgd2l0aCB0aGVzZQpAQCAtMTE1LDE1ICsxMTUsMTUgQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAogICAgICAgICAjIElzIHRoaXMgcmVhbGx5IHRoZSBjb3JyZWN0IGFsaWdubWVudCwgb3Igc2hvdWxkIGl0IGJlIDA/Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhhbGlnbm1lbnQoWCkgPT0gYWxpZ25tZW50KFkpID09IDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzaXplb2YoWCkgPT0gc2l6ZW9mKFkpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGlnbm1lbnQoWCkgPT0gYWxpZ25tZW50KFkpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplb2YoWCkgPT0gc2l6ZW9mKFkpID09IDApCiAKICAgICAgICAgY2xhc3MgWFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIFgpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgWCldCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWxpZ25tZW50KFhYKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKFhYKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoWFgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYWCksIDApCiAKICAgICBkZWYgdGVzdF9maWVsZHMoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIGF0dHJpYnV0ZXMgb2YgU3RydWN0dXJlL1Vub2luIGZpZWxkcy4KQEAgLTEzMSwxMSArMTMxLDExIEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX2NoYXIpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFgueC5vZmZzZXQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFgueC5zaXplLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueC5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC55Lm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC55LnNpemUsIHNpemVvZihjX2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueS5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55LnNpemUsIHNpemVvZihjX2NoYXIpKQogCiAgICAgICAgICMgcmVhZG9ubHkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBzZXRhdHRyLCBYLngsICJvZmZzZXQiLCA5MikKQEAgLTE0NSwxMSArMTQ1LDExIEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX2NoYXIpXQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFgueC5vZmZzZXQsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFgueC5zaXplLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueC5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC55Lm9mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoWC55LnNpemUsIHNpemVvZihjX2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueS5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55LnNpemUsIHNpemVvZihjX2NoYXIpKQogCiAgICAgICAgICMgcmVhZG9ubHkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBzZXRhdHRyLCBYLngsICJvZmZzZXQiLCA5MikKQEAgLTE2NCwyMiArMTY0LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2xvbmdsb25nKV0KICAgICAgICAgICAgIF9wYWNrXyA9IDEKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIDkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIDEpCiAKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfbG9uZ2xvbmcpXQogICAgICAgICAgICAgX3BhY2tfID0gMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIDEwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmIub2Zmc2V0LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5iLm9mZnNldCwgMikKIAogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19sb25nbG9uZyldCiAgICAgICAgICAgICBfcGFja18gPSA0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgMTIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFguYi5vZmZzZXQsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCA0KQogCiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKICAgICAgICAgbG9uZ2xvbmdfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZSgicSIpCkBAIC0xOTAsOCArMTkwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfbG9uZ2xvbmcpXQogICAgICAgICAgICAgX3BhY2tfID0gOAogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZihYKSwgbG9uZ2xvbmdfYWxpZ24gKyBsb25nbG9uZ19zaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChYLmIub2Zmc2V0LCBtaW4oOCwgbG9uZ2xvbmdfYWxpZ24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgbG9uZ2xvbmdfYWxpZ24gKyBsb25nbG9uZ19zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIG1pbig4LCBsb25nbG9uZ19hbGlnbikpCiAKIAogICAgICAgICBkID0geyJfZmllbGRzXyI6IFsoImEiLCAiYiIpLApAQCAtMjA5LDkgKzIwOSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUGVyc29uLCAiTmFtZSIsICJISSIpCiAKICAgICAgICAgIyBzaG9ydCBlbm91Z2gKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUGVyc29uKCIxMjM0NSIsIDUpLm5hbWUsICIxMjM0NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uKCIxMjM0NSIsIDUpLm5hbWUsICIxMjM0NSIpCiAgICAgICAgICMgZXhhY3QgZml0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFBlcnNvbigiMTIzNDU2IiwgNSkubmFtZSwgIjEyMzQ1NiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uKCIxMjM0NTYiLCA1KS5uYW1lLCAiMTIzNDU2IikKICAgICAgICAgIyB0b28gbG9uZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb24sICIxMjM0NTY3IiwgNSkKIApAQCAtMjI5LDEwICsyMjksMTAgQEAKICAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQogICAgICAgICBwdCA9IFBPSU5UKDEsIDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChwdC54LCBwdC55KSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwdC54LCBwdC55KSwgKDEsIDIpKQogCiAgICAgICAgIHB0ID0gUE9JTlQoeT0yLCB4PTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChwdC54LCBwdC55KSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwdC54LCBwdC55KSwgKDEsIDIpKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9maWVsZF90eXBlcyhzZWxmKToKICAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKQEAgLTI0NCwxNCArMjQ0LDE0IEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCAqIDQpXQogCiAgICAgICAgICMgY2FuIHVzZSB0dXBsZSB0byBpbml0aWFsaXplIGFycmF5IChidXQgbm90IGxpc3QhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbOl0sIFsxLCAyLCAwLCAwXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6XSwgWzEsIDIsIDAsIDBdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbOjotMV0sIFswLCAwLCAyLCAxXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6Ml0sIFsxLCAwXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzE6NTo2XSwgWzJdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMikpLmFbNjo0Oi0xXSwgW10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6XSwgWzEsIDIsIDMsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChTb21lSW50cygoMSwgMiwgMywgNCkpLmFbOjpdLCBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzpdLCBbMSwgMiwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6XSwgWzEsIDIsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs6Oi0xXSwgWzAsIDAsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs6OjJdLCBbMSwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzE6NTo2XSwgWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyKSkuYVs2OjQ6LTFdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMiwgMywgNCkpLmFbOl0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMiwgMywgNCkpLmFbOjpdLCBbMSwgMiwgMywgNF0pCiAgICAgICAgICMgdG9vIGxvbmcKICAgICAgICAgIyBYWFggU2hvdWxkIHJhaXNlIFZhbHVlRXJyb3I/LCBub3QgUnVudGltZUVycm9yCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgU29tZUludHMsICgxLCAyLCAzLCA0LCA1KSkKQEAgLTI2OSwxMCArMjY5LDEwIEBACiAKICAgICAgICAgcCA9IFBlcnNvbigiU29tZW9uZSIsICgiMTIzNCIsICI1Njc4IiksIDUpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5uYW1lLCAiU29tZW9uZSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHAucGhvbmUuYXJlYWNvZGUsICIxMjM0IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5waG9uZS5udW1iZXIsICI1Njc4IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocC5hZ2UsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uYW1lLCAiU29tZW9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5hcmVhY29kZSwgIjEyMzQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGhvbmUubnVtYmVyLCAiNTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZ2UsIDUpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3R1cmVzX3dpdGhfd2NoYXIoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTI4NSwxMiArMjg1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoImFnZSIsIGNfaW50KV0KIAogICAgICAgICBwID0gUGVyc29uVyh1IlNvbWVvbmUiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChwLm5hbWUsICJTb21lb25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5hbWUsICJTb21lb25lIikKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQZXJzb25XKHUiMTIzNDU2Nzg5MCIpLm5hbWUsIHUiMTIzNDU2Nzg5MCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFBlcnNvblcodSIxMjM0NTY3ODkwMSIpLm5hbWUsIHUiMTIzNDU2Nzg5MDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvblcodSIxMjM0NTY3ODkwIikubmFtZSwgdSIxMjM0NTY3ODkwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb25XKHUiMTIzNDU2Nzg5MDEiKS5uYW1lLCB1IjEyMzQ1Njc4OTAxIikKICAgICAgICAgIyBleGFjdCBmaXQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUGVyc29uVyh1IjEyMzQ1Njc4OTAxMiIpLm5hbWUsIHUiMTIzNDU2Nzg5MDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb25XKHUiMTIzNDU2Nzg5MDEyIikubmFtZSwgdSIxMjM0NTY3ODkwMTIiKQogICAgICAgICAjdG9vIGxvbmcKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUGVyc29uVywgdSIxMjM0NTY3ODkwMTIzIikKIApAQCAtMzA1LDI0ICszMDUsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICgiYWdlIiwgY19pbnQpXQogCiAgICAgICAgIGNscywgbXNnID0gc2VsZi5nZXRfZXhjZXB0KFBlcnNvbiwgIlNvbWVvbmUiLCAoMSwgMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNscywgUnVudGltZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscywgUnVudGltZUVycm9yKQogICAgICAgICAjIEluIFB5dGhvbiAyLjUsIEV4Y2VwdGlvbiBpcyBhIG5ldy1zdHlsZSBjbGFzcywgYW5kIHRoZSByZXByIGNoYW5nZWQKICAgICAgICAgaWYgaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtc2csCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUGhvbmUpIDx0eXBlICdleGNlcHRpb25zLlR5cGVFcnJvcic+OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0LCBpbnQgZm91bmQiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobXNnLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFBob25lKSBleGNlcHRpb25zLlR5cGVFcnJvcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCwgaW50IGZvdW5kIikKIAogICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChQZXJzb24sICJTb21lb25lIiwgKCJhIiwgImIiLCAiYyIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjbHMsIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMsIFJ1bnRpbWVFcnJvcikKICAgICAgICAgaWYgaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtc2csCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUGhvbmUpIDx0eXBlICdleGNlcHRpb25zLlR5cGVFcnJvcic+OiB0b28gbWFueSBpbml0aWFsaXplcnMiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobXNnLCAiKFBob25lKSBleGNlcHRpb25zLlR5cGVFcnJvcjogdG9vIG1hbnkgaW5pdGlhbGl6ZXJzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCAiKFBob25lKSBleGNlcHRpb25zLlR5cGVFcnJvcjogdG9vIG1hbnkgaW5pdGlhbGl6ZXJzIikKIAogCiAgICAgZGVmIGdldF9leGNlcHQoc2VsZiwgZnVuYywgKmFyZ3MpOgpAQCAtMzM3LDcgKzMzNyw3IEBACiAjIyAgICAgICAgIyBzYW1lIGFzICdjbGFzcyBYKFN0cnVjdHVyZSk6IHBhc3MnCiAjIyAgICAgICAgIyBmYWlscywgc2luY2Ugd2UgbmVlZCBlaXRoZXIgYSBfZmllbGRzXyBvciBhIF9hYnN0cmFjdF8gYXR0cmlidXRlCiAjIyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQobWV0YSwgIlgiLCAoU3RydWN0dXJlLCksIHt9KQotIyMgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjbHMsIG1zZyksCisjIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY2xzLCBtc2cpLAogIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBdHRyaWJ1dGVFcnJvciwgImNsYXNzIG11c3QgZGVmaW5lIGEgJ19maWVsZHNfJyBhdHRyaWJ1dGUiKSkKIAogICAgIGRlZiB0ZXN0X2Fic3RyYWN0X2NsYXNzKHNlbGYpOgpAQCAtMzQ1LDE1ICszNDUsMTUgQEAKICAgICAgICAgICAgIF9hYnN0cmFjdF8gPSAic29tZXRoaW5nIgogICAgICAgICAjIHRyeSAnWCgpJwogICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChldmFsLCAiWCgpIiwgbG9jYWxzKCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKChjbHMsIG1zZyksIChUeXBlRXJyb3IsICJhYnN0cmFjdCBjbGFzcyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjbHMsIG1zZyksIChUeXBlRXJyb3IsICJhYnN0cmFjdCBjbGFzcyIpKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kcyhzZWxmKToKICMjICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAjIyAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoImluX2RsbCIgaW4gZGlyKHR5cGUoU3RydWN0dXJlKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygiZnJvbV9hZGRyZXNzIiBpbiBkaXIodHlwZShTdHJ1Y3R1cmUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJpbl9kbGwiIGluIGRpcih0eXBlKFN0cnVjdHVyZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImluX2RsbCIgaW4gZGlyKHR5cGUoU3RydWN0dXJlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZnJvbV9hZGRyZXNzIiBpbiBkaXIodHlwZShTdHJ1Y3R1cmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJpbl9kbGwiIGluIGRpcih0eXBlKFN0cnVjdHVyZSkpKQogCiAgICAgZGVmIHRlc3RfcG9zaXRpb25hbF9hcmdzKHNlbGYpOgogICAgICAgICAjIHNlZSBhbHNvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1MDQyCkBAIC0zODUsNyArMzg1LDcgQEAKICAgICAgICAgIyBXZSBjYW4gYXNzaWduIGFycmF5cyBvZiB0aGUgY29ycmVjdCB0eXBlCiAgICAgICAgIHMuYXJyYXkgPSAoY19pbnQgKiAzKSgxLCAyLCAzKQogICAgICAgICBpdGVtcyA9IFtzLmFycmF5W2ldIGZvciBpIGluIHJhbmdlKDMpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpdGVtcywgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbMSwgMiwgM10pCiAKICAgICAgICAgIyBUaGUgZm9sbG93aW5nIGFyZSBidWdzLCBidXQgYXJlIGluY2x1ZGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pdHRlc3RzCiAgICAgICAgICMgYWxzbyBkZXNjcmliZSB0aGUgY3VycmVudCBiZWhhdmlvdXIuCkBAIC0zOTYsMTQgKzM5NiwxNCBAQAogICAgICAgICBzLmFycmF5WzBdID0gNDIKIAogICAgICAgICBpdGVtcyA9IFtzLmFycmF5W2ldIGZvciBpIGluIHJhbmdlKDMpXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpdGVtcywgWzQyLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtcywgWzQyLCAyLCAzXSkKIAogICAgICAgICBzLmFycmF5WzBdID0gMQogCiAjIyAgICAgICAgcy5hcnJheVsxXSA9IDQyCiAKICAgICAgICAgaXRlbXMgPSBbcy5hcnJheVtpXSBmb3IgaSBpbiByYW5nZSgzKV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoaXRlbXMsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtcywgWzEsIDIsIDNdKQogCiAgICAgZGVmIHRlc3Rfbm9uZV90b19wb2ludGVyX2ZpZWxkcyhzZWxmKToKICAgICAgICAgY2xhc3MgUyhTdHJ1Y3R1cmUpOgpAQCAtNDEzLDcgKzQxMyw3IEBACiAgICAgICAgIHMgPSBTKCkKICAgICAgICAgcy54ID0gMTIzNDU2NzgKICAgICAgICAgcy5wID0gTm9uZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzLngsIDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMueCwgMTIzNDU2NzgpCiAKIGNsYXNzIFRlc3RSZWN1cnNpdmVTdHJ1Y3R1cmUodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NvbnRhaW5zX2l0c2VsZihzZWxmKToKQEAgLTQyMyw3ICs0MjMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBSZWN1cnNpdmUuX2ZpZWxkc18gPSBbKCJuZXh0IiwgUmVjdXJzaXZlKV0KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIiBpbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIiBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXRhaWxzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RydWN0dXJlIG9yIHVuaW9uIGNhbm5vdCBjb250YWluIGl0c2VsZiIpCkBAIC00NDAsNyArNDQwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgU2Vjb25kLl9maWVsZHNfID0gWygiZmlyc3QiLCBGaXJzdCldCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZGV0YWlsczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygiX2ZpZWxkc18gaXMgZmluYWwiIGluCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9maWVsZHNfIGlzIGZpbmFsIiBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXRhaWxzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQXR0cmlidXRlRXJyb3Igbm90IHJhaXNlZCIpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmFsaWduZWRfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5CmluZGV4IDg5MzQzYmEuLmJjYWNmYzggMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5CkBAIC0yOCwxOCArMjgsMTggQEAKICAgICBkZWYgdGVzdF9uYXRpdmUoc2VsZik6CiAgICAgICAgIGZvciB0eXAgaW4gc3RydWN0dXJlczoKICMjICAgICAgICAgICAgcHJpbnQgdHlwLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXAudmFsdWUub2Zmc2V0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXAudmFsdWUub2Zmc2V0LCAxKQogICAgICAgICAgICAgbyA9IHR5cCgpCiAgICAgICAgICAgICBvLnZhbHVlID0gNAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoby52YWx1ZSwgNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby52YWx1ZSwgNCkKIAogICAgIGRlZiB0ZXN0X3N3YXBwZWQoc2VsZik6CiAgICAgICAgIGZvciB0eXAgaW4gYnl0ZXN3YXBwZWRfc3RydWN0dXJlczoKICMjICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgdHlwLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXAudmFsdWUub2Zmc2V0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXAudmFsdWUub2Zmc2V0LCAxKQogICAgICAgICAgICAgbyA9IHR5cCgpCiAgICAgICAgICAgICBvLnZhbHVlID0gNAotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoby52YWx1ZSwgNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby52YWx1ZSwgNCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IDg4ZDA3NzMuLjY1NTc0NzkgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtMjMsNTUgKzIzLDU1IEBACiAgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3N0cmljdChzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQogICAgICAgICAgICAgIyBubyBjb252ZXJzaW9ucyB0YWtlIHBsYWNlIHdpdGggdW5pY29kZSBhcmd1bWVudHMKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKHUiYWJcdTIwNzAiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCiAgICAgICAgICAgICAjIHN0cmluZyBhcmdzIGFyZSBjb252ZXJ0ZWQKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbigiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIHdjc2xlbiwgImFi5CIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgd2NzbGVuLCAiYWLkIikKIAogICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbigiYWLkIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFi5CIpLCAzKQogCiAgICAgICAgIGRlZiB0ZXN0X2FzY2lpX2lnbm9yZShzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJpZ25vcmUiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJcdTIwNzAiKSwgMykKICAgICAgICAgICAgICMgaWdub3JlIGVycm9yIG1vZGUgc2tpcHMgbm9uLWFzY2lpIGNoYXJhY3RlcnMKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbigiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4oIuT2/N8iKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCLk9vzfIiksIDApCiAKICAgICAgICAgZGVmIHRlc3RfbGF0aW4xX3N0cmljdChzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJsYXRpbi0xIiwgInN0cmljdCIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwod2NzbGVuKCLk9vzfIiksIDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oIuT2/N8iKSwgNCkKIAogICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCiAgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKGJ1ZiksIDMrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKIAogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQogICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWLk9vwiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzpdLCB1ImFiXHVGRkZEXHVGRkZEXHVGRkZEXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6XSwgdSJhYlx1RkZGRFx1RkZGRFx1RkZGRFwwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6Oi0xXSwgdSJcMFx1RkZGRFx1RkZGRFx1RkZGRGJhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6OjJdLCB1ImFcdUZGRkRcdUZGRkQiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzY6NTotMV0sIHUiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCB1ImFiXHVGRkZEXHVGRkZEXHVGRkZEXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCB1ImFiXHVGRkZEXHVGRkZEXHVGRkZEXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjotMV0sIHUiXDBcdUZGRkRcdUZGRkRcdUZGRkRiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCB1ImFcdUZGRkRcdUZGRkQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgdSIiKQogCiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKICAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFi5Pb8IikKICAgICAgICAgICAgICMgaXMgdGhhdCBjb3JyZWN0PyBub3Qgc3VyZS4gIEJ1dCB3aXRoICdpZ25vcmUnLCB5b3UgZ2V0IHdoYXQgeW91IHBheSBmb3IuLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzpdLCB1ImFiXDBcMFwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6XSwgdSJhYlwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6Oi0xXSwgdSJcMFwwXDBcMGJhIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6OjJdLCB1ImFcMFwwIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls2OjU6LTFdLCB1IiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgdSJhYlwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgdSJhYlwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCB1IlwwXDBcMFwwYmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgdSJhXDBcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCB1IiIpCiAKICAgICBpbXBvcnQgX2N0eXBlc190ZXN0CiAgICAgZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcApAQCAtODksNDEgKzg5LDQxIEBACiAKICAgICAgICAgZGVmIHRlc3RfYXNjaWlfcmVwbGFjZShzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyh1ImFiYyIpLCAiYWJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIGZ1bmMsIHUiYWLkIikKIAogICAgICAgICBkZWYgdGVzdF9hc2NpaV9pZ25vcmUoc2VsZik6CiAgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmMoImFiYyIpLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmModSJhYmMiKSwgImFiYyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChmdW5jKHUi5Pb83yIpLCAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUi5Pb83yIpLCAiIikKIAogICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZnVuYyh1ImFiYyIpLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZ1bmModSLk9vzfIiksICI/Pz8/IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUi5Pb83yIpLCAiPz8/PyIpCiAKICAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQogICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKHUiYWJjIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihidWYpLCAzKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCiAKICAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJyZXBsYWNlIikKICAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcih1ImFi5Pb8IikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6XSwgImFiPz8/XDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6XSwgImFiPz8/XDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6LTFdLCAiXDA/Pz9iYSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbOjoyXSwgImE/PyIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChidWZbNjo1Oi0xXSwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgImFiPz8/XDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWI/Pz9cMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgIlwwPz8/YmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgImE/PyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCAiIikKIAogICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgImlnbm9yZSIpCiAgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYuT2/CIpCiAgICAgICAgICAgICAjIGlzIHRoYXQgY29ycmVjdD8gbm90IHN1cmUuICBCdXQgd2l0aCAnaWdub3JlJywgeW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLi4KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGJ1Zls6XSwgImFiXDBcMFwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6XSwgImFiXDBcMFwwXDAiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYnVmWzo6LTFdLCAiXDBcMFwwXDBiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgImFiXDBcMFwwXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWJcMFwwXDBcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgIlwwXDBcMFwwYmEiKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CmluZGV4IDdiYTNlMjEuLjRjYmZkNGIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKQEAgLTEzLDkgKzEzLDkgQEAKICAgICAgICAgY3RkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKICAgICAgICAgYW5faW50ZWdlciA9IGNfaW50LmluX2RsbChjdGRsbCwgImFuX2ludGVnZXIiKQogICAgICAgICB4ID0gYW5faW50ZWdlci52YWx1ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4LCBjdGRsbC5nZXRfYW5faW50ZWdlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGN0ZGxsLmdldF9hbl9pbnRlZ2VyKCkpCiAgICAgICAgIGFuX2ludGVnZXIudmFsdWUgKj0gMgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh4KjIsIGN0ZGxsLmdldF9hbl9pbnRlZ2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCoyLCBjdGRsbC5nZXRfYW5faW50ZWdlcigpKQogCiAgICAgZGVmIHRlc3RfdW5kZWZpbmVkKHNlbGYpOgogICAgICAgICBjdGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtMzQsMTEgKzM0LDExIEBACiAgICAgICAgICAgICAjIGRvY3N0cmluZ3MgYXJlIGFsc28gcmVtb3ZlZCBpbiB0aGUgbGF0dGVyIGNhc2UuCiAgICAgICAgICAgICBvcHQgPSBjX2ludC5pbl9kbGwocHlkbGwsICJQeV9PcHRpbWl6ZUZsYWciKS52YWx1ZQogICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9wdCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMCkKICAgICAgICAgICAgIGVsaWYgVmFsdWVzVGVzdENhc2UuX19kb2NfXyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvcHQsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQsIDEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9wdCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMikKIAogICAgICAgICBkZWYgdGVzdF9mcm96ZW50YWJsZShzZWxmKToKICAgICAgICAgICAgICMgUHl0aG9uIGV4cG9ydHMgYSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHN5bWJvbC4gVGhpcyBpcyBhCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbKCJfX2hlbGxvX18iLCAxMDQpLCAoIl9fcGhlbGxvX18iLCAtMTA0KSwgKCJfX3BoZWxsb19fLnNwYW0iLCAxMDQpXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwMCksICgiX19waGVsbG9fXyIsIC0xMDApLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwMCldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChpdGVtcywgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKIAogICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKICAgICAgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW3N0cnVjdF9mcm96ZW5dCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YXJzaXplX3N0cnVjdC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5CmluZGV4IDA2ZDIzMjMuLmY0MDk1MDAgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5CkBAIC03LDQ0ICs3LDQ0IEBACiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIml0ZW0iLCBjX2ludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImFycmF5IiwgY19pbnQgKiAxKV0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSAqIDIpCiAgICAgICAgIHggPSBYKCkKICAgICAgICAgeC5pdGVtID0gNDIKICAgICAgICAgeC5hcnJheVswXSA9IDEwMAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoeCksIHNpemVvZihjX2ludCkgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgc2l6ZW9mKGNfaW50KSAqIDIpCiAKICAgICAgICAgIyBtYWtlIHJvb20gZm9yIG9uZSBhZGRpdGlvbmFsIGl0ZW0KICAgICAgICAgbmV3X3NpemUgPSBzaXplb2YoWCkgKyBzaXplb2YoY19pbnQpICogMQogICAgICAgICByZXNpemUoeCwgbmV3X3NpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih4KSwgbmV3X3NpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKCh4Lml0ZW0sIHguYXJyYXlbMF0pLCAoNDIsIDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBuZXdfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5pdGVtLCB4LmFycmF5WzBdKSwgKDQyLCAxMDApKQogCiAgICAgICAgICMgbWFrZSByb29tIGZvciAxMCBhZGRpdGlvbmFsIGl0ZW1zCiAgICAgICAgIG5ld19zaXplID0gc2l6ZW9mKFgpICsgc2l6ZW9mKGNfaW50KSAqIDkKICAgICAgICAgcmVzaXplKHgsIG5ld19zaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2YoeCksIG5ld19zaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgoeC5pdGVtLCB4LmFycmF5WzBdKSwgKDQyLCAxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgbmV3X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguaXRlbSwgeC5hcnJheVswXSksICg0MiwgMTAwKSkKIAogICAgICAgICAjIG1ha2Ugcm9vbSBmb3Igb25lIGFkZGl0aW9uYWwgaXRlbQogICAgICAgICBuZXdfc2l6ZSA9IHNpemVvZihYKSArIHNpemVvZihjX2ludCkgKiAxCiAgICAgICAgIHJlc2l6ZSh4LCBuZXdfc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHgpLCBuZXdfc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKHguaXRlbSwgeC5hcnJheVswXSksICg0MiwgMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoeCksIG5ld19zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4Lml0ZW0sIHguYXJyYXlbMF0pLCAoNDIsIDEwMCkpCiAKICAgICBkZWYgdGVzdF9hcnJheV9pbnZhbGlkX2xlbmd0aChzZWxmKToKICAgICAgICAgIyBjYW5ub3QgY3JlYXRlIGFycmF5cyB3aXRoIG5vbi1wb3NpdGl2ZSBzaXplCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGNfaW50ICogLTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGNfaW50ICogLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogY19pbnQgKiAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBjX2ludCAqIC0zKQogCiAgICAgZGVmIHRlc3RfemVyb3NpemVkX2FycmF5KHNlbGYpOgogICAgICAgICBhcnJheSA9IChjX2ludCAqIDApKCkKICAgICAgICAgIyBhY2Nlc3NpbmcgZWxlbWVudHMgb2YgemVyby1zaXplZCBhcnJheXMgcmFpc2UgSW5kZXhFcnJvcgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19zZXRpdGVtX18sIDAsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fc2V0aXRlbV9fLCAxLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19nZXRpdGVtX18sIDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX3NldGl0ZW1fXywgLTEsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fc2V0aXRlbV9fLCAwLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19zZXRpdGVtX18sIDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fZ2V0aXRlbV9fLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX3NldGl0ZW1fXywgLTEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fZ2V0aXRlbV9fLCAtMSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggNTA2N2I2MC4uNWRlZGQ5ZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93KQogCiAgICAgICAgICAgICAjIFRoaXMgb25lIHNob3VsZCBzdWNjZWVlZC4uLgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgSXNXaW5kb3coMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIElzV2luZG93KDApKQogCiAgICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSBhcmd1bWVudHMgKDggYnl0ZXMgaW4gZXhjZXNzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3csIDAsIDAsIDApCkBAIC00OSwxMyArNDksMTMgQEAKICAgICBjbGFzcyBUZXN0V2ludHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgogICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzaXplb2Yod2ludHlwZXMuSFdORCksIHNpemVvZihjX3ZvaWRfcCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5IV05EKSwgc2l6ZW9mKGNfdm9pZF9wKSkKIAogICAgICAgICBkZWYgdGVzdF9QQVJBTShzZWxmKToKICAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5XUEFSQU0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfdm9pZF9wKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNpemVvZih3aW50eXBlcy5MUEFSQU0pLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuTFBBUkFNKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCiAKICAgICAgICAgZGVmIHRlc3RfQ09NRXJyb3Ioc2VsZik6CkBAIC04NCw3ICs4NCw3IEBACiAKICAgICAgICAgcHQgPSBQT0lOVCgxMCwgMTApCiAgICAgICAgIHJlY3QgPSBSRUNUKDAsIDAsIDIwLCAyMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMSwgZGxsLlBvaW50SW5SZWN0KGJ5cmVmKHJlY3QpLCBwdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGxsLlBvaW50SW5SZWN0KGJ5cmVmKHJlY3QpLCBwdCkpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3V0aWwucHkgYi9MaWIvY3R5cGVzL3V0aWwucHkKaW5kZXggZTJhMzFjOC4uNTJiMzUyMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy91dGlsLnB5CisrKyBiL0xpYi9jdHlwZXMvdXRpbC5weQpAQCAtOTYsOCArOTYsMTAgQEAKICAgICAgICAgICAgICAgJyRDQyAtV2wsLXQgLW8gJyArIGNjb3V0ICsgJyAyPiYxIC1sJyArIG5hbWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCkKLSAgICAgICAgICAgIHRyYWNlID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJhY2UgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhjY291dCkKQEAgLTExOCw3ICsxMjAsMTIgQEAKICAgICAgICAgICAgIGlmIG5vdCBmOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBjbWQgPSAiL3Vzci9jY3MvYmluL2R1bXAgLUxwdiAyPi9kZXYvbnVsbCAiICsgZgotICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKHInXFsuKlxdXHNTT05BTUVccysoW15cc10rKScsIG9zLnBvcGVuKGNtZCkucmVhZCgpKQorICAgICAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcWy4qXF1cc1NPTkFNRVxzKyhbXlxzXSspJywgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHJldHVybiByZXMuZ3JvdXAoMSkKQEAgLTEzNCw3ICsxNDEsMTIgQEAKICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yLCAnb2JqZHVtcCBjb21tYW5kIG5vdCBmb3VuZCcKLSAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBvcy5wb3BlbihjbWQpLnJlYWQoKSkKKyAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKHInXHNTT05BTUVccysoW15cc10rKScsIGRhdGEpCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICByZXR1cm4gcmVzLmdyb3VwKDEpCkBAIC0xNTcsOCArMTY5LDEyIEBACiAgICAgICAgIGRlZiBmaW5kX2xpYnJhcnkobmFtZSk6CiAgICAgICAgICAgICBlbmFtZSA9IHJlLmVzY2FwZShuYW1lKQogICAgICAgICAgICAgZXhwciA9IHInOi1sJXNcLlxTKyA9PiBcUyovKGxpYiVzXC5cUyspJyAlIChlbmFtZSwgZW5hbWUpCi0gICAgICAgICAgICByZXMgPSByZS5maW5kYWxsKGV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtciAyPi9kZXYvbnVsbCcpLnJlYWQoKSkKKyAgICAgICAgICAgIGYgPSBvcy5wb3BlbignL3NiaW4vbGRjb25maWcgLXIgMj4vZGV2L251bGwnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLmZpbmRhbGwoZXhwciwgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRfc29uYW1lKF9maW5kTGliX2djYyhuYW1lKSkKICAgICAgICAgICAgIHJlcy5zb3J0KGNtcD0gbGFtYmRhIHgseTogY21wKF9udW1fdmVyc2lvbih4KSwgX251bV92ZXJzaW9uKHkpKSkKQEAgLTE2OSwxMiArMTg1LDIxIEBACiAgICAgICAgIGRlZiBfZmluZExpYl9sZGNvbmZpZyhuYW1lKToKICAgICAgICAgICAgICMgWFhYIGFzc3VtaW5nIEdMSUJDJ3MgbGRjb25maWcgKHdpdGggb3B0aW9uIC1wKQogICAgICAgICAgICAgZXhwciA9IHInL1teXChcKVxzXSpsaWIlc1wuW15cKFwpXHNdKicgJSByZS5lc2NhcGUobmFtZSkKLSAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtcCAyPi9kZXYvbnVsbCcpLnJlYWQoKSkKKyAgICAgICAgICAgIGYgPSBvcy5wb3BlbignTENfQUxMPUMgTEFORz1DIC9zYmluL2xkY29uZmlnIC1wIDI+L2Rldi9udWxsJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgIyBIbSwgdGhpcyB3b3JrcyBvbmx5IGZvciBsaWJzIG5lZWRlZCBieSB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCiAgICAgICAgICAgICAgICAgY21kID0gJ2xkZCAlcyAyPi9kZXYvbnVsbCcgJSBzeXMuZXhlY3V0YWJsZQotICAgICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLCBvcy5wb3BlbihjbWQpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIGRhdGEpCiAgICAgICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHJldHVybiByZXMuZ3JvdXAoMCkKQEAgLTE5Nyw4ICsyMjIsMTIgQEAKICAgICAgICAgICAgICMgWFhYIGFzc3VtaW5nIEdMSUJDJ3MgbGRjb25maWcgKHdpdGggb3B0aW9uIC1wKQogICAgICAgICAgICAgZXhwciA9IHInKFxTKylccytcKCglcyg/OiwgT1MgQUJJOlteXCldKik/KVwpW14vXSooL1teXChcKVxzXSpsaWIlc1wuW15cKFwpXHNdKiknIFwKICAgICAgICAgICAgICAgICAgICAlIChhYmlfdHlwZSwgcmUuZXNjYXBlKG5hbWUpKQotICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucG9wZW4oJ0xBTkc9QyAvc2Jpbi9sZGNvbmZpZyAtcCAyPi9kZXYvbnVsbCcpLnJlYWQoKSkKKyAgICAgICAgICAgIGYgPSBvcy5wb3BlbignL3NiaW4vbGRjb25maWcgLXAgMj4vZGV2L251bGwnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlcy5ncm91cCgxKQpkaWZmIC0tZ2l0IGEvTGliL2N1cnNlcy9oYXNfa2V5LnB5IGIvTGliL2N1cnNlcy9oYXNfa2V5LnB5CmluZGV4IDYwYjdiZTkuLjFkZDVhM2IgMTAwNjQ0Ci0tLSBhL0xpYi9jdXJzZXMvaGFzX2tleS5weQorKysgYi9MaWIvY3Vyc2VzL2hhc19rZXkucHkKQEAgLTE4Miw3ICsxODIsNyBAQAogICAgICAgICBMID0gW10KICAgICAgICAgX2N1cnNlcy5pbml0c2NyKCkKICAgICAgICAgZm9yIGtleSBpbiBfY2FwYWJpbGl0eV9uYW1lcy5rZXlzKCk6Ci0gICAgICAgICAgICBzeXN0ZW0gPSBfY3Vyc2VzLmhhc19rZXkoa2V5KQorICAgICAgICAgICAgc3lzdGVtID0ga2V5IGluIF9jdXJzZXMKICAgICAgICAgICAgIHB5dGhvbiA9IGhhc19rZXkoa2V5KQogICAgICAgICAgICAgaWYgc3lzdGVtICE9IHB5dGhvbjoKICAgICAgICAgICAgICAgICBMLmFwcGVuZCggJ01pc21hdGNoIGZvciBrZXkgJXMsIHN5c3RlbT0laSwgUHl0aG9uPSVpJwpkaWZmIC0tZ2l0IGEvTGliL2RiaGFzaC5weSBiL0xpYi9kYmhhc2gucHkKaW5kZXggNzdhODc4ZS4uYTVkNTM3NSAxMDA2NDQKLS0tIGEvTGliL2RiaGFzaC5weQorKysgYi9MaWIvZGJoYXNoLnB5CkBAIC0xLDkgKzEsOCBAQAogIiIiUHJvdmlkZSBhIChnKWRibS1jb21wYXRpYmxlIGludGVyZmFjZSB0byBic2RkYi5oYXNob3Blbi4iIiIKIAogaW1wb3J0IHN5cwotaWYgc3lzLnB5M2t3YXJuaW5nOgotICAgIGltcG9ydCB3YXJuaW5ncwotICAgIHdhcm5pbmdzLndhcm5weTNrKCJpbiAzLngsIHRoZSBkYmhhc2ggbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLndhcm5weTNrKCJpbiAzLngsIHRoZSBkYmhhc2ggbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQiLCBzdGFja2xldmVsPTIpCiB0cnk6CiAgICAgaW1wb3J0IGJzZGRiCiBleGNlcHQgSW1wb3J0RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvZGVjaW1hbC5weSBiL0xpYi9kZWNpbWFsLnB5CmluZGV4IGIzYmRjN2YuLmZlYmEzZDcgMTAwNjQ0Ci0tLSBhL0xpYi9kZWNpbWFsLnB5CisrKyBiL0xpYi9kZWNpbWFsLnB5CkBAIC0xMzQsNyArMTM0LDEwIEBACiAgICAgJ3NldGNvbnRleHQnLCAnZ2V0Y29udGV4dCcsICdsb2NhbGNvbnRleHQnCiBdCiAKK19fdmVyc2lvbl9fID0gJzEuNzAnICAgICMgSGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoaXMgY29tcGxpZXMgd2l0aAorCiBpbXBvcnQgY29weSBhcyBfY29weQoraW1wb3J0IG1hdGggYXMgX21hdGgKIGltcG9ydCBudW1iZXJzIGFzIF9udW1iZXJzCiAKIHRyeToKQEAgLTY0NSwxMSArNjQ4LDU1IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgZmxvYXQgdG8gRGVjaW1hbC4gICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJzdCBjb252ZXJ0IHRoZSBmbG9hdCB0byBhIHN0cmluZyIpCisgICAgICAgICAgICB2YWx1ZSA9IERlY2ltYWwuZnJvbV9mbG9hdCh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuX2V4cCAgPSB2YWx1ZS5fZXhwCisgICAgICAgICAgICBzZWxmLl9zaWduID0gdmFsdWUuX3NpZ24KKyAgICAgICAgICAgIHNlbGYuX2ludCAgPSB2YWx1ZS5faW50CisgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsICA9IHZhbHVlLl9pc19zcGVjaWFsCisgICAgICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXIgdG8gRGVjaW1hbCIgJSB2YWx1ZSkKIAorICAgICMgQGNsYXNzbWV0aG9kLCBidXQgQGRlY29yYXRvciBpcyBub3QgdmFsaWQgUHl0aG9uIDIuMyBzeW50YXgsIHNvCisgICAgIyBkb24ndCB1c2UgaXQgKHNlZSBub3RlcyBvbiBQeTIuMyBjb21wYXRpYmlsaXR5IGF0IHRvcCBvZiBmaWxlKQorICAgIGRlZiBmcm9tX2Zsb2F0KGNscywgZik6CisgICAgICAgICIiIkNvbnZlcnRzIGEgZmxvYXQgdG8gYSBkZWNpbWFsIG51bWJlciwgZXhhY3RseS4KKworICAgICAgICBOb3RlIHRoYXQgRGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSkgaXMgbm90IHRoZSBzYW1lIGFzIERlY2ltYWwoJzAuMScpLgorICAgICAgICBTaW5jZSAwLjEgaXMgbm90IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQsIHRoZQorICAgICAgICB2YWx1ZSBpcyBzdG9yZWQgYXMgdGhlIG5lYXJlc3QgcmVwcmVzZW50YWJsZSB2YWx1ZSB3aGljaCBpcworICAgICAgICAweDEuOTk5OTk5OTk5OTk5YXAtNC4gIFRoZSBleGFjdCBlcXVpdmFsZW50IG9mIHRoZSB2YWx1ZSBpbiBkZWNpbWFsCisgICAgICAgIGlzIDAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNS4KKworICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSkKKyAgICAgICAgRGVjaW1hbCgnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JykKKyAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnbmFuJykpCisgICAgICAgIERlY2ltYWwoJ05hTicpCisgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKQorICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoLWZsb2F0KCdpbmYnKSkKKyAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKKyAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdCgtMC4wKQorICAgICAgICBEZWNpbWFsKCctMCcpCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgKGludCwgbG9uZykpOiAgICAgICAgIyBoYW5kbGUgaW50ZWdlciBpbnB1dHMKKyAgICAgICAgICAgIHJldHVybiBjbHMoZikKKyAgICAgICAgaWYgX21hdGguaXNpbmYoZikgb3IgX21hdGguaXNuYW4oZik6ICAjIHJhaXNlcyBUeXBlRXJyb3IgaWYgbm90IGEgZmxvYXQKKyAgICAgICAgICAgIHJldHVybiBjbHMocmVwcihmKSkKKyAgICAgICAgaWYgX21hdGguY29weXNpZ24oMS4wLCBmKSA9PSAxLjA6CisgICAgICAgICAgICBzaWduID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnbiA9IDEKKyAgICAgICAgbiwgZCA9IGFicyhmKS5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgayA9IGQuYml0X2xlbmd0aCgpIC0gMQorICAgICAgICByZXN1bHQgPSBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIHN0cihuKjUqKmspLCAtaykKKyAgICAgICAgaWYgY2xzIGlzIERlY2ltYWw6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY2xzKHJlc3VsdCkKKyAgICBmcm9tX2Zsb2F0ID0gY2xhc3NtZXRob2QoZnJvbV9mbG9hdCkKKwogICAgIGRlZiBfaXNuYW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgbnVtYmVyIGlzIG5vdCBhY3R1YWxseSBvbmUuCiAKQEAgLTgwMiw4ICs4NDksMTEgQEAKICAgICAjIHN1YmplY3Qgb2Ygd2hhdCBzaG91bGQgaGFwcGVuIGZvciBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGEgTmFOLgogICAgICMgV2UgdGFrZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoOgogICAgICMKLSAgICAjICAgPT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgTmFOIGFsd2F5cyByZXR1cm4gRmFsc2UKLSAgICAjICAgIT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgTmFOIGFsd2F5cyByZXR1cm4gVHJ1ZQorICAgICMgICA9PSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBGYWxzZQorICAgICMgICAhPSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBUcnVlCisgICAgIyAgID09IG9yICE9IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHNpZ25hbGluZyBOYU4gc2lnbmFsCisgICAgIyAgICAgIEludmFsaWRPcGVyYXRpb24sIGFuZCByZXR1cm4gRmFsc2Ugb3IgVHJ1ZSBhcyBhYm92ZSBpZiB0aGUKKyAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KICAgICAjICAgPCwgPiwgPD0gYW5kID49IGNvbXBhcmlzb25zIGludm9sdmluZyBhIChxdWlldCBvciBzaWduYWxpbmcpCiAgICAgIyAgICAgIE5hTiBzaWduYWwgSW52YWxpZE9wZXJhdGlvbiwgYW5kIHJldHVybiBGYWxzZSBpZiB0aGUKICAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KQEAgLTgxMSwyNCArODYxLDI0IEBACiAgICAgIyBUaGlzIGJlaGF2aW9yIGlzIGRlc2lnbmVkIHRvIGNvbmZvcm0gYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0bwogICAgICMgdGhhdCBzcGVjaWZpZWQgYnkgSUVFRSA3NTQuCiAKLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCBhbGxvd19mbG9hdD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLmlzX25hbigpIG9yIG90aGVyLmlzX25hbigpOgorICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCBhbGxvd19mbG9hdD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLmlzX25hbigpIG9yIG90aGVyLmlzX25hbigpOgorICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpICE9IDAKIAogICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTgzNyw3ICs4ODcsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8IDAKIAogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIGFsbG93X2Zsb2F0PVRydWUpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTg0Niw3ICs4OTYsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8PSAwCiAKICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCBhbGxvd19mbG9hdD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgogICAgICAgICBhbnMgPSBzZWxmLl9jb21wYXJlX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCkBAIC04NTUsNyArOTA1LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCiAKICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCBhbGxvd19mbG9hdD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgogICAgICAgICBhbnMgPSBzZWxmLl9jb21wYXJlX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCkBAIC04ODksMTIgKzkzOSwzNCBAQAogICAgICAgICAjIFRoZSBoYXNoIG9mIGEgbm9uc3BlY2lhbCBub25pbnRlZ2VyIERlY2ltYWwgbXVzdCBkZXBlbmQgb25seQogICAgICAgICAjIG9uIHRoZSB2YWx1ZSBvZiB0aGF0IERlY2ltYWwsIGFuZCBub3Qgb24gaXRzIHJlcHJlc2VudGF0aW9uLgogICAgICAgICAjIEZvciBleGFtcGxlOiBoYXNoKERlY2ltYWwoJzEwMEUtMScpKSA9PSBoYXNoKERlY2ltYWwoJzEwJykpLgorCisgICAgICAgICMgRXF1YWxpdHkgY29tcGFyaXNvbnMgaW52b2x2aW5nIHNpZ25hbGluZyBuYW5zIGNhbiByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbjsgc2luY2UgZXF1YWxpdHkgY2hlY2tzIGFyZSBpbXBsaWNpdGx5IGFuZAorICAgICAgICAjIHVucHJlZGljdGFibHkgdXNlZCB3aGVuIGNoZWNraW5nIHNldCBhbmQgZGljdCBtZW1iZXJzaGlwLCB3ZQorICAgICAgICAjIHByZXZlbnQgc2lnbmFsaW5nIG5hbnMgZnJvbSBiZWluZyB1c2VkIGFzIHNldCBlbGVtZW50cyBvcgorICAgICAgICAjIGRpY3Qga2V5cyBieSBtYWtpbmcgX19oYXNoX18gcmFpc2UgYW4gZXhjZXB0aW9uLgogICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgaWYgc2VsZi5faXNuYW4oKToKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBoYXNoIGEgTmFOIHZhbHVlLicpCi0gICAgICAgICAgICByZXR1cm4gaGFzaChzdHIoc2VsZikpCi0gICAgICAgIGlmIG5vdCBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfc25hbigpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGhhc2ggYSBzaWduYWxpbmcgTmFOIHZhbHVlLicpCisgICAgICAgICAgICBlbGlmIHNlbGYuaXNfbmFuKCk6CisgICAgICAgICAgICAgICAgIyAwIHRvIG1hdGNoIGhhc2goZmxvYXQoJ25hbicpKQorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgdmFsdWVzIGNob3NlbiB0byBtYXRjaCBoYXNoKGZsb2F0KCdpbmYnKSkgYW5kCisgICAgICAgICAgICAgICAgIyBoYXNoKGZsb2F0KCctaW5mJykpLgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NpZ246CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMjcxODI4CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMxNDE1OQorCisgICAgICAgICMgSW4gUHl0aG9uIDIuNywgd2UncmUgYWxsb3dpbmcgY29tcGFyaXNvbnMgKGJ1dCBub3QKKyAgICAgICAgIyBhcml0aG1ldGljIG9wZXJhdGlvbnMpIGJldHdlZW4gZmxvYXRzIGFuZCBEZWNpbWFsczsgIHNvIGlmCisgICAgICAgICMgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIGZsb2F0IHRoZW4KKyAgICAgICAgIyBpdHMgaGFzaCBzaG91bGQgbWF0Y2ggdGhhdCBvZiB0aGUgZmxvYXQuCisgICAgICAgIHNlbGZfYXNfZmxvYXQgPSBmbG9hdChzZWxmKQorICAgICAgICBpZiBEZWNpbWFsLmZyb21fZmxvYXQoc2VsZl9hc19mbG9hdCkgPT0gc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGZfYXNfZmxvYXQpCisKICAgICAgICAgaWYgc2VsZi5faXNpbnRlZ2VyKCk6CiAgICAgICAgICAgICBvcCA9IF9Xb3JrUmVwKHNlbGYudG9faW50ZWdyYWxfdmFsdWUoKSkKICAgICAgICAgICAgICMgdG8gbWFrZSBjb21wdXRhdGlvbiBmZWFzaWJsZSBmb3IgRGVjaW1hbHMgd2l0aCBsYXJnZQpAQCAtMjgxMyw2ICsyODg1LDcgQEAKIAogICAgIGRlZiBjb3B5X3NpZ24oc2VsZiwgb3RoZXIpOgogICAgICAgICAiIiJSZXR1cm5zIHNlbGYgd2l0aCB0aGUgc2lnbiBvZiBvdGhlci4iIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShvdGhlci5fc2lnbiwgc2VsZi5faW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHAsIHNlbGYuX2lzX3NwZWNpYWwpCiAKQEAgLTM1MTcsMjcgKzM1OTAsMjUgQEAKICAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgKHN0cihzZWxmKSwpKQogCiAgICAgZGVmIF9fY29weV9fKHNlbGYpOgotICAgICAgICBpZiB0eXBlKHNlbGYpID09IERlY2ltYWw6CisgICAgICAgIGlmIHR5cGUoc2VsZikgaXMgRGVjaW1hbDoKICAgICAgICAgICAgIHJldHVybiBzZWxmICAgICAjIEknbSBpbW11dGFibGU7IHRoZXJlZm9yZSBJIGFtIG15IG93biBjbG9uZQogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3RyKHNlbGYpKQogCiAgICAgZGVmIF9fZGVlcGNvcHlfXyhzZWxmLCBtZW1vKToKLSAgICAgICAgaWYgdHlwZShzZWxmKSA9PSBEZWNpbWFsOgorICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIERlY2ltYWw6CiAgICAgICAgICAgICByZXR1cm4gc2VsZiAgICAgIyBNeSBjb21wb25lbnRzIGFyZSBhbHNvIGltbXV0YWJsZQogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3RyKHNlbGYpKQogCi0gICAgIyBQRVAgMzEwMSBzdXBwb3J0LiAgU2VlIGFsc28gX3BhcnNlX2Zvcm1hdF9zcGVjaWZpZXIgYW5kIF9mb3JtYXRfYWxpZ24KLSAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjaWZpZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgIyBQRVAgMzEwMSBzdXBwb3J0LiAgdGhlIF9sb2NhbGVjb252IGtleXdvcmQgYXJndW1lbnQgc2hvdWxkIGJlCisgICAgIyBjb25zaWRlcmVkIHByaXZhdGU6IGl0J3MgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgdGVzdGluZyBvbmx5LgorICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWNpZmllciwgY29udGV4dD1Ob25lLCBfbG9jYWxlY29udj1Ob25lKToKICAgICAgICAgIiIiRm9ybWF0IGEgRGVjaW1hbCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHNwZWNpZmllci4KIAogICAgICAgICBUaGUgc3BlY2lmaWVyIHNob3VsZCBiZSBhIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIsIHdpdGggdGhlCiAgICAgICAgIGZvcm0gZGVzY3JpYmVkIGluIFBFUCAzMTAxLiAgRm9ybWF0dGluZyB0eXBlcyAnZScsICdFJywgJ2YnLAotICAgICAgICAnRicsICdnJywgJ0cnLCBhbmQgJyUnIGFyZSBzdXBwb3J0ZWQuICBJZiB0aGUgZm9ybWF0dGluZyB0eXBlCi0gICAgICAgIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZQotICAgICAgICBvZiBjb250ZXh0LmNhcGl0YWxzLgotCi0gICAgICAgIEF0IHRoaXMgdGltZSB0aGUgJ24nIGZvcm1hdCBzcGVjaWZpZXIgdHlwZSAod2hpY2ggaXMgc3VwcG9zZWQKLSAgICAgICAgdG8gdXNlIHRoZSBjdXJyZW50IGxvY2FsZSkgaXMgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgJ0YnLCAnZycsICdHJywgJ24nIGFuZCAnJScgYXJlIHN1cHBvcnRlZC4gIElmIHRoZSBmb3JtYXR0aW5nCisgICAgICAgIHR5cGUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byAnZycgb3IgJ0cnLCBkZXBlbmRpbmcgb24gdGhlCisgICAgICAgIHZhbHVlIG9mIGNvbnRleHQuY2FwaXRhbHMuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgTm90ZTogUEVQIDMxMDEgc2F5cyB0aGF0IGlmIHRoZSB0eXBlIGlzIG5vdCBwcmVzZW50IHRoZW4KQEAgLTM1NDgsMTcgKzM2MTksMjAgQEAKICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgogICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQogCi0gICAgICAgIHNwZWMgPSBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihzcGVjaWZpZXIpCisgICAgICAgIHNwZWMgPSBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihzcGVjaWZpZXIsIF9sb2NhbGVjb252PV9sb2NhbGVjb252KQogCi0gICAgICAgICMgc3BlY2lhbCB2YWx1ZXMgZG9uJ3QgY2FyZSBhYm91dCB0aGUgdHlwZSBvciBwcmVjaXNpb24uLi4KKyAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyBkb24ndCBjYXJlIGFib3V0IHRoZSB0eXBlIG9yIHByZWNpc2lvbgogICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgcmV0dXJuIF9mb3JtYXRfYWxpZ24oc3RyKHNlbGYpLCBzcGVjKQorICAgICAgICAgICAgc2lnbiA9IF9mb3JtYXRfc2lnbihzZWxmLl9zaWduLCBzcGVjKQorICAgICAgICAgICAgYm9keSA9IHN0cihzZWxmLmNvcHlfYWJzKCkpCisgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKQogCiAgICAgICAgICMgYSB0eXBlIG9mIE5vbmUgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIGNvbnRleHQKLSAgICAgICAgIyBpZiB0eXBlIGlzICclJywgYWRqdXN0IGV4cG9uZW50IG9mIHNlbGYgYWNjb3JkaW5nbHkKICAgICAgICAgaWYgc3BlY1sndHlwZSddIGlzIE5vbmU6CiAgICAgICAgICAgICBzcGVjWyd0eXBlJ10gPSBbJ2cnLCAnRyddW2NvbnRleHQuY2FwaXRhbHNdCi0gICAgICAgIGVsaWYgc3BlY1sndHlwZSddID09ICclJzoKKworICAgICAgICAjIGlmIHR5cGUgaXMgJyUnLCBhZGp1c3QgZXhwb25lbnQgb2Ygc2VsZiBhY2NvcmRpbmdseQorICAgICAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgogICAgICAgICAgICAgc2VsZiA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgc2VsZi5faW50LCBzZWxmLl9leHArMikKIAogICAgICAgICAjIHJvdW5kIGlmIG5lY2Vzc2FyeSwgdGFraW5nIHJvdW5kaW5nIG1vZGUgZnJvbSB0aGUgY29udGV4dApAQCAtMzU2Nyw1MyArMzY0MSw0NSBAQAogICAgICAgICBpZiBwcmVjaXNpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBzcGVjWyd0eXBlJ10gaW4gJ2VFJzoKICAgICAgICAgICAgICAgICBzZWxmID0gc2VsZi5fcm91bmQocHJlY2lzaW9uKzEsIHJvdW5kaW5nKQotICAgICAgICAgICAgZWxpZiBzcGVjWyd0eXBlJ10gaW4gJ2dHJzoKLSAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5faW50KSA+IHByZWNpc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZiA9IHNlbGYuX3JvdW5kKHByZWNpc2lvbiwgcm91bmRpbmcpCiAgICAgICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKICAgICAgICAgICAgICAgICBzZWxmID0gc2VsZi5fcmVzY2FsZSgtcHJlY2lzaW9uLCByb3VuZGluZykKKyAgICAgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdnRycgYW5kIGxlbihzZWxmLl9pbnQpID4gcHJlY2lzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24sIHJvdW5kaW5nKQogICAgICAgICAjIHNwZWNpYWwgY2FzZTogemVyb3Mgd2l0aCBhIHBvc2l0aXZlIGV4cG9uZW50IGNhbid0IGJlCiAgICAgICAgICMgcmVwcmVzZW50ZWQgaW4gZml4ZWQgcG9pbnQ7IHJlc2NhbGUgdGhlbSB0byAwZTAuCi0gICAgICAgIGVsaWYgbm90IHNlbGYgYW5kIHNlbGYuX2V4cCA+IDAgYW5kIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKKyAgICAgICAgaWYgbm90IHNlbGYgYW5kIHNlbGYuX2V4cCA+IDAgYW5kIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yZXNjYWxlKDAsIHJvdW5kaW5nKQogCiAgICAgICAgICMgZmlndXJlIG91dCBwbGFjZW1lbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQKICAgICAgICAgbGVmdGRpZ2l0cyA9IHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpCi0gICAgICAgIGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKLSAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cwotICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgorICAgICAgICBpZiBzcGVjWyd0eXBlJ10gaW4gJ2VFJzoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmIGFuZCBwcmVjaXNpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxIC0gcHJlY2lzaW9uCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRvdHBsYWNlID0gMQorICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKKyAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cwogICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZ0cnOgogICAgICAgICAgICAgaWYgc2VsZi5fZXhwIDw9IDAgYW5kIGxlZnRkaWdpdHMgPiAtNjoKICAgICAgICAgICAgICAgICBkb3RwbGFjZSA9IGxlZnRkaWdpdHMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxCiAKLSAgICAgICAgIyBmaWd1cmUgb3V0IG1haW4gcGFydCBvZiBudW1lcmljIHN0cmluZy4uLgotICAgICAgICBpZiBkb3RwbGFjZSA8PSAwOgotICAgICAgICAgICAgbnVtID0gJzAuJyArICcwJyooLWRvdHBsYWNlKSArIHNlbGYuX2ludAotICAgICAgICBlbGlmIGRvdHBsYWNlID49IGxlbihzZWxmLl9pbnQpOgotICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UncmUgbm90IHBhZGRpbmcgYSAnMCcgd2l0aCBleHRyYSB6ZXJvcyBvbiB0aGUgcmlnaHQKLSAgICAgICAgICAgIGFzc2VydCBkb3RwbGFjZT09bGVuKHNlbGYuX2ludCkgb3Igc2VsZi5faW50ICE9ICcwJwotICAgICAgICAgICAgbnVtID0gc2VsZi5faW50ICsgJzAnKihkb3RwbGFjZS1sZW4oc2VsZi5faW50KSkKKyAgICAgICAgIyBmaW5kIGRpZ2l0cyBiZWZvcmUgYW5kIGFmdGVyIGRlY2ltYWwgcG9pbnQsIGFuZCBnZXQgZXhwb25lbnQKKyAgICAgICAgaWYgZG90cGxhY2UgPCAwOgorICAgICAgICAgICAgaW50cGFydCA9ICcwJworICAgICAgICAgICAgZnJhY3BhcnQgPSAnMCcqKC1kb3RwbGFjZSkgKyBzZWxmLl9pbnQKKyAgICAgICAgZWxpZiBkb3RwbGFjZSA+IGxlbihzZWxmLl9pbnQpOgorICAgICAgICAgICAgaW50cGFydCA9IHNlbGYuX2ludCArICcwJyooZG90cGxhY2UtbGVuKHNlbGYuX2ludCkpCisgICAgICAgICAgICBmcmFjcGFydCA9ICcnCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBudW0gPSBzZWxmLl9pbnRbOmRvdHBsYWNlXSArICcuJyArIHNlbGYuX2ludFtkb3RwbGFjZTpdCisgICAgICAgICAgICBpbnRwYXJ0ID0gc2VsZi5faW50Wzpkb3RwbGFjZV0gb3IgJzAnCisgICAgICAgICAgICBmcmFjcGFydCA9IHNlbGYuX2ludFtkb3RwbGFjZTpdCisgICAgICAgIGV4cCA9IGxlZnRkaWdpdHMtZG90cGxhY2UKIAotICAgICAgICAjIC4uLnRoZW4gdGhlIHRyYWlsaW5nIGV4cG9uZW50LCBvciB0cmFpbGluZyAnJScKLSAgICAgICAgaWYgbGVmdGRpZ2l0cyAhPSBkb3RwbGFjZSBvciBzcGVjWyd0eXBlJ10gaW4gJ2VFJzoKLSAgICAgICAgICAgIGVjaGFyID0geydFJzogJ0UnLCAnZSc6ICdlJywgJ0cnOiAnRScsICdnJzogJ2UnfVtzcGVjWyd0eXBlJ11dCi0gICAgICAgICAgICBudW0gPSBudW0gKyAiezB9ezE6K30iLmZvcm1hdChlY2hhciwgbGVmdGRpZ2l0cy1kb3RwbGFjZSkKLSAgICAgICAgZWxpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgotICAgICAgICAgICAgbnVtID0gbnVtICsgJyUnCi0KLSAgICAgICAgIyBhZGQgc2lnbgotICAgICAgICBpZiBzZWxmLl9zaWduID09IDE6Ci0gICAgICAgICAgICBudW0gPSAnLScgKyBudW0KLSAgICAgICAgcmV0dXJuIF9mb3JtYXRfYWxpZ24obnVtLCBzcGVjKQotCisgICAgICAgICMgZG9uZSB3aXRoIHRoZSBkZWNpbWFsLXNwZWNpZmljIHN0dWZmOyAgaGFuZCBvdmVyIHRoZSByZXN0CisgICAgICAgICMgb2YgdGhlIGZvcm1hdHRpbmcgdG8gdGhlIF9mb3JtYXRfbnVtYmVyIGZ1bmN0aW9uCisgICAgICAgIHJldHVybiBfZm9ybWF0X251bWJlcihzZWxmLl9zaWduLCBpbnRwYXJ0LCBmcmFjcGFydCwgZXhwLCBzcGVjKQogCiBkZWYgX2RlY19mcm9tX3RyaXBsZShzaWduLCBjb2VmZmljaWVudCwgZXhwb25lbnQsIHNwZWNpYWw9RmFsc2UpOgogICAgICIiIkNyZWF0ZSBhIGRlY2ltYWwgaW5zdGFuY2UgZGlyZWN0bHksIHdpdGhvdXQgYW55IHZhbGlkYXRpb24sCkBAIC0zODQyLDYgKzM5MDgsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlhZ25vc3RpYyBpbmZvIHRvbyBsb25nIGluIE5hTiIpCiAgICAgICAgIHJldHVybiBkLl9maXgoc2VsZikKIAorICAgIGRlZiBjcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KHNlbGYsIGYpOgorICAgICAgICAiIiJDcmVhdGVzIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UgZnJvbSBhIGZsb2F0IGJ1dCByb3VuZGluZyB1c2luZyBzZWxmCisgICAgICAgIGFzIHRoZSBjb250ZXh0LgorCisgICAgICAgID4+PiBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pCisgICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQorICAgICAgICBEZWNpbWFsKCczLjE0MTUnKQorICAgICAgICA+Pj4gY29udGV4dCA9IENvbnRleHQocHJlYz01LCB0cmFwcz1bSW5leGFjdF0pCisgICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgSW5leGFjdDogTm9uZQorCisgICAgICAgICIiIgorICAgICAgICBkID0gRGVjaW1hbC5mcm9tX2Zsb2F0KGYpICAgICAgICMgQW4gZXhhY3QgY29udmVyc2lvbgorICAgICAgICByZXR1cm4gZC5fZml4KHNlbGYpICAgICAgICAgICAgICMgQXBwbHkgdGhlIGNvbnRleHQgcm91bmRpbmcKKwogICAgICMgTWV0aG9kcwogICAgIGRlZiBhYnMoc2VsZiwgYSk6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBvcGVyYW5kLgpAQCAtMzg1OCw3ICszOTQxLDEwIEBACiAgICAgICAgIERlY2ltYWwoJzEwMS41JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnLTEwMS41JykpCiAgICAgICAgIERlY2ltYWwoJzEwMS41JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoLTEpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19hYnNfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgYWRkKHNlbGYsIGEsIGIpOgpAQCAtMzg2OCw4ICszOTU0LDE5IEBACiAgICAgICAgIERlY2ltYWwoJzE5LjAwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCgnMUUrMicpLCBEZWNpbWFsKCcxLjAxRSs0JykpCiAgICAgICAgIERlY2ltYWwoJzEuMDJFKzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZCgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCg4KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMTMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZCg1LCA1KQorICAgICAgICBEZWNpbWFsKCcxMCcpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX2FkZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19hZGRfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgX2FwcGx5KHNlbGYsIGEpOgogICAgICAgICByZXR1cm4gc3RyKGEuX2ZpeChzZWxmKSkKQEAgLTM5MTEsNyArNDAwOCwxNCBAQAogICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKERlY2ltYWwoJy0zJyksIERlY2ltYWwoJzIuMScpKQogICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZSgxLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKDEpLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZSgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb21wYXJlKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBjb21wYXJlX3NpZ25hbChzZWxmLCBhLCBiKToKQEAgLTM5MzksNyArNDA0MywxNCBAQAogICAgICAgICBEZWNpbWFsKCdOYU4nKQogICAgICAgICA+Pj4gcHJpbnQgYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXQogICAgICAgICAxCisgICAgICAgID4+PiBjLmNvbXBhcmVfc2lnbmFsKC0xLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBjLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoLTEpLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBjLmNvbXBhcmVfc2lnbmFsKC0xLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb21wYXJlX3NpZ25hbChiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgY29tcGFyZV90b3RhbChzZWxmLCBhLCBiKToKQEAgLTM5NjEsNyArNDA3MiwxNCBAQAogICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoJzEyLjMnKSwgIERlY2ltYWwoJ05hTicpKQogICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbCgxLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKDEpLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbCgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb21wYXJlX3RvdGFsKGIpCiAKICAgICBkZWYgY29tcGFyZV90b3RhbF9tYWcoc2VsZiwgYSwgYik6CkBAIC0zOTY5LDYgKzQwODcsNyBAQAogCiAgICAgICAgIExpa2UgY29tcGFyZV90b3RhbCwgYnV0IHdpdGggb3BlcmFuZCdzIHNpZ24gaWdub3JlZCBhbmQgYXNzdW1lZCB0byBiZSAwLgogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29tcGFyZV90b3RhbF9tYWcoYikKIAogICAgIGRlZiBjb3B5X2FicyhzZWxmLCBhKToKQEAgLTM5NzgsMTcgKzQwOTcsMjMgQEAKICAgICAgICAgRGVjaW1hbCgnMi4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2FicyhEZWNpbWFsKCctMTAwJykpCiAgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoLTEpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29weV9hYnMoKQogCiAgICAgZGVmIGNvcHlfZGVjaW1hbChzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGNvcHkgb2YgdGhlIGRlY2ltYWwgb2JqZXQuCisgICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBkZWNpbWFsIG9iamVjdC4KIAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbChEZWNpbWFsKCcyLjEnKSkKICAgICAgICAgRGVjaW1hbCgnMi4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2RlY2ltYWwoRGVjaW1hbCgnLTEuMDAnKSkKICAgICAgICAgRGVjaW1hbCgnLTEuMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbCgxKQorICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBEZWNpbWFsKGEpCiAKICAgICBkZWYgY29weV9uZWdhdGUoc2VsZiwgYSk6CkBAIC0zOTk4LDcgKzQxMjMsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnLTEwMS41JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X25lZ2F0ZShEZWNpbWFsKCctMTAxLjUnKSkKICAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfbmVnYXRlKDEpCisgICAgICAgIERlY2ltYWwoJy0xJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvcHlfbmVnYXRlKCkKIAogICAgIGRlZiBjb3B5X3NpZ24oc2VsZiwgYSwgYik6CkBAIC00MDE1LDcgKzQxNDMsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnLTEuNTAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbihEZWNpbWFsKCctMS41MCcpLCBEZWNpbWFsKCctNy4zMycpKQogICAgICAgICBEZWNpbWFsKCctMS41MCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKDEsIC0yKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoMSksIC0yKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb3B5X3NpZ24oYikKIAogICAgIGRlZiBkaXZpZGUoc2VsZiwgYSwgYik6CkBAIC00MDQxLDggKzQxNzYsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnMTAwMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzIuNDBFKzYnKSwgRGVjaW1hbCgnMicpKQogICAgICAgICBEZWNpbWFsKCcxLjIwRSs2JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoNSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoNSksIDUpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZSg1LCBEZWNpbWFsKDUpKQorICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fZGl2X18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX2Rpdl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBkaXZpZGVfaW50KHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJEaXZpZGVzIHR3byBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHJlc3VsdC4KQEAgLTQwNTMsMTggKzQxOTksNDAgQEAKICAgICAgICAgRGVjaW1hbCgnMycpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAuMycpKQogICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KDEwLCAzKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KERlY2ltYWwoMTApLCAzKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KDEwLCBEZWNpbWFsKDMpKQorICAgICAgICBEZWNpbWFsKCczJykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fZmxvb3JkaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fZmxvb3JkaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgZGl2bW9kKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJSZXR1cm4gKGEgLy8gYiwgYSAlIGIpCisgICAgICAgICIiIlJldHVybiAoYSAvLyBiLCBhICUgYikuCiAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoRGVjaW1hbCg4KSwgRGVjaW1hbCgzKSkKICAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMicpKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCBEZWNpbWFsKDQpKQogICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKDgsIDQpCisgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoRGVjaW1hbCg4KSwgNCkKKyAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZCg4LCBEZWNpbWFsKDQpKQorICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX2Rpdm1vZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19kaXZtb2RfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgZXhwKHNlbGYsIGEpOgogICAgICAgICAiIiJSZXR1cm5zIGUgKiogYS4KQEAgLTQwODQsNyArNDI1MiwxMCBAQAogICAgICAgICBEZWNpbWFsKCcyLjAwMDAwMDAwJykKICAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJytJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmV4cCgxMCkKKyAgICAgICAgRGVjaW1hbCgnMjIwMjYuNDY1OCcpCiAgICAgICAgICIiIgorICAgICAgICBhID1fY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmV4cChjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgZm1hKHNlbGYsIGEsIGIsIGMpOgpAQCAtNDEwMCw3ICs0MjcxLDE0IEBACiAgICAgICAgIERlY2ltYWwoJy04JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoRGVjaW1hbCgnODg4NTY1MjkwJyksIERlY2ltYWwoJzE1NTcuOTY5MzAnKSwgRGVjaW1hbCgnLTg2MDg3Ljc1NzgnKSkKICAgICAgICAgRGVjaW1hbCgnMS4zODQzNTczNkUrMTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYSgxLCAzLCA0KQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoMSwgRGVjaW1hbCgzKSwgNCkKKyAgICAgICAgRGVjaW1hbCgnNycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKDEsIDMsIERlY2ltYWwoNCkpCisgICAgICAgIERlY2ltYWwoJzcnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuZm1hKGIsIGMsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc19jYW5vbmljYWwoc2VsZiwgYSk6CkBAIC00MTMwLDcgKzQzMDgsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKDEpCisgICAgICAgIFRydWUKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX2Zpbml0ZSgpCiAKICAgICBkZWYgaXNfaW5maW5pdGUoc2VsZiwgYSk6CkBAIC00MTQyLDcgKzQzMjMsMTAgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJ05hTicpKQogICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19pbmZpbml0ZSgpCiAKICAgICBkZWYgaXNfbmFuKHNlbGYsIGEpOgpAQCAtNDE1NSw3ICs0MzM5LDEwIEBACiAgICAgICAgIFRydWUKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19uYW4oRGVjaW1hbCgnLXNOYU4nKSkKICAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX25hbigxKQorICAgICAgICBGYWxzZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfbmFuKCkKIAogICAgIGRlZiBpc19ub3JtYWwoc2VsZiwgYSk6CkBAIC00MTc1LDcgKzQzNjIsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJ05hTicpKQogICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gYy5pc19ub3JtYWwoMSkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfbm9ybWFsKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc19xbmFuKHNlbGYsIGEpOgpAQCAtNDE4Nyw3ICs0Mzc3LDEwIEBACiAgICAgICAgIFRydWUKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKERlY2ltYWwoJ3NOYU4nKSkKICAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19xbmFuKCkKIAogICAgIGRlZiBpc19zaWduZWQoc2VsZiwgYSk6CkBAIC00MTk5LDcgKzQzOTIsMTIgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZChEZWNpbWFsKCctMCcpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKDgpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKC04KQorICAgICAgICBUcnVlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19zaWduZWQoKQogCiAgICAgZGVmIGlzX3NuYW4oc2VsZiwgYSk6CkBAIC00MjEyLDcgKzQ0MTAsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJ3NOYU4nKSkKICAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NuYW4oMSkKKyAgICAgICAgRmFsc2UKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX3NuYW4oKQogCiAgICAgZGVmIGlzX3N1Ym5vcm1hbChzZWxmLCBhKToKQEAgLTQyMzEsNyArNDQzMiwxMCBAQAogICAgICAgICBGYWxzZQogICAgICAgICA+Pj4gYy5pc19zdWJub3JtYWwoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBjLmlzX3N1Ym5vcm1hbCgxKQorICAgICAgICBGYWxzZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfc3Vibm9ybWFsKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc196ZXJvKHNlbGYsIGEpOgpAQCAtNDI0Myw3ICs0NDQ3LDEyIEBACiAgICAgICAgIEZhbHNlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybyhEZWNpbWFsKCctMEUrMicpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybygxKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3plcm8oMCkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfemVybygpCiAKICAgICBkZWYgbG4oc2VsZiwgYSk6CkBAIC00MjYyLDcgKzQ0NzEsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMi4zMDI1ODUwOScpCiAgICAgICAgID4+PiBjLmxuKERlY2ltYWwoJytJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmxuKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG4oY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZzEwKHNlbGYsIGEpOgpAQCAtNDI4NSw3ICs0NDk3LDEyIEBACiAgICAgICAgIERlY2ltYWwoJzEuODQ1MDk4MDQnKQogICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcrSW5maW5pdHknKSkKICAgICAgICAgRGVjaW1hbCgnSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5sb2cxMCgwKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5sb2cxMCgxKQorICAgICAgICBEZWNpbWFsKCcwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZzEwKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBsb2diKHNlbGYsIGEpOgpAQCAtNDMwNCw3ICs0NTIxLDE0IEBACiAgICAgICAgIERlY2ltYWwoJy0yJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKERlY2ltYWwoJzAnKSkKICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMTApCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMTAwKQorICAgICAgICBEZWNpbWFsKCcyJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2IoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfYW5kKHNlbGYsIGEsIGIpOgpAQCAtNDMyNCw3ICs0NTQ4LDE0IEBACiAgICAgICAgIERlY2ltYWwoJzEwMDAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKDExMCwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoMTEwLCBEZWNpbWFsKDExMDEpKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9naWNhbF9hbmQoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfaW52ZXJ0KHNlbGYsIGEpOgpAQCAtNDM0MCw3ICs0NTcxLDEwIEBACiAgICAgICAgIERlY2ltYWwoJzAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzEwMTAxMDEwMScpKQogICAgICAgICBEZWNpbWFsKCcxMDEwMTAxMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMTEwMDEwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfaW52ZXJ0KGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBsb2dpY2FsX29yKHNlbGYsIGEsIGIpOgpAQCAtNDM2MCw3ICs0NTk0LDE0IEBACiAgICAgICAgIERlY2ltYWwoJzExMTAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoRGVjaW1hbCgnMTExMCcpLCBEZWNpbWFsKCcxMCcpKQogICAgICAgICBEZWNpbWFsKCcxMTEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX29yKDExMCwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzExMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoMTEwLCBEZWNpbWFsKDExMDEpKQorICAgICAgICBEZWNpbWFsKCcxMTExJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfb3IoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfeG9yKHNlbGYsIGEsIGIpOgpAQCAtNDM4MCwxMCArNDYyMSwxNyBAQAogICAgICAgICBEZWNpbWFsKCcxMTAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMTEwMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMDExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKDExMCwgRGVjaW1hbCgxMTAxKSkKKyAgICAgICAgRGVjaW1hbCgnMTAxMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5sb2dpY2FsX3hvcihiLCBjb250ZXh0PXNlbGYpCiAKLSAgICBkZWYgbWF4KHNlbGYsIGEsYik6CisgICAgZGVmIG1heChzZWxmLCBhLCBiKToKICAgICAgICAgIiIibWF4IGNvbXBhcmVzIHR3byB2YWx1ZXMgbnVtZXJpY2FsbHkgYW5kIHJldHVybnMgdGhlIG1heGltdW0uCiAKICAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBOYU4gdGhlbiB0aGUgZ2VuZXJhbCBydWxlcyBhcHBseS4KQEAgLTQ0MDAsMTQgKzQ2NDgsMzQgQEAKICAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heCgxLCAyKQorICAgICAgICBEZWNpbWFsKCcyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJzInKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubWF4KGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBtYXhfbWFnKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLiIiIgorICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZyhEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTEwJykpCisgICAgICAgIERlY2ltYWwoJy0xMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZygxLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJy0yJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5tYXhfbWFnKGIsIGNvbnRleHQ9c2VsZikKIAotICAgIGRlZiBtaW4oc2VsZiwgYSxiKToKKyAgICBkZWYgbWluKHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJtaW4gY29tcGFyZXMgdHdvIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJucyB0aGUgbWluaW11bS4KIAogICAgICAgICBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTiB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgpAQCAtNDQyNCwxMSArNDY5MiwzMSBAQAogICAgICAgICBEZWNpbWFsKCcxLjAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbihEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQogICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW4oMSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbigxLCBEZWNpbWFsKDI5KSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5taW4oYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG1pbl9tYWcoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuIiIiCisgICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKERlY2ltYWwoJzMnKSwgRGVjaW1hbCgnLTInKSkKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgnLTMnKSwgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJy0zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKDEsIC0yKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKERlY2ltYWwoMSksIC0yKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm1pbl9tYWcoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG1pbnVzKHNlbGYsIGEpOgpAQCAtNDQ0MiwxNiArNDczMCwxOSBAQAogICAgICAgICBEZWNpbWFsKCctMS4zJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW51cyhEZWNpbWFsKCctMS4zJykpCiAgICAgICAgIERlY2ltYWwoJzEuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWludXMoMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19uZWdfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbXVsdGlwbHkoc2VsZiwgYSwgYik6CiAgICAgICAgICIiIm11bHRpcGx5IG11bHRpcGxpZXMgdHdvIG9wZXJhbmRzLgogCiAgICAgICAgIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgotICAgICAgICBPdGhlcndpc2UsIHRoZSBvcGVyYW5kcyBhcmUgbXVsdGlwbGllZCB0b2dldGhlciAoJ2xvbmcgbXVsdGlwbGljYXRpb24nKSwKLSAgICAgICAgcmVzdWx0aW5nIGluIGEgbnVtYmVyIHdoaWNoIG1heSBiZSBhcyBsb25nIGFzIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMKLSAgICAgICAgb2YgdGhlIHR3byBvcGVyYW5kcy4KKyAgICAgICAgT3RoZXJ3aXNlLCB0aGUgb3BlcmFuZHMgYXJlIG11bHRpcGxpZWQgdG9nZXRoZXIKKyAgICAgICAgKCdsb25nIG11bHRpcGxpY2F0aW9uJyksIHJlc3VsdGluZyBpbiBhIG51bWJlciB3aGljaCBtYXkgYmUgYXMgbG9uZyBhcworICAgICAgICB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIHRoZSB0d28gb3BlcmFuZHMuCiAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseShEZWNpbWFsKCcxLjIwJyksIERlY2ltYWwoJzMnKSkKICAgICAgICAgRGVjaW1hbCgnMy42MCcpCkBAIC00NDYzLDggKzQ3NTQsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnLTAuMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnNjU0MzIxJyksIERlY2ltYWwoJzY1NDMyMScpKQogICAgICAgICBEZWNpbWFsKCc0LjI4MTM1OTcxRSsxMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoNywgNykKKyAgICAgICAgRGVjaW1hbCgnNDknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoNyksIDcpCisgICAgICAgIERlY2ltYWwoJzQ5JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseSg3LCBEZWNpbWFsKDcpKQorICAgICAgICBEZWNpbWFsKCc0OScpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX211bF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19tdWxfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgbmV4dF9taW51cyhzZWxmLCBhKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgbGFyZ2VzdCByZXByZXNlbnRhYmxlIG51bWJlciBzbWFsbGVyIHRoYW4gYS4KQEAgLTQ0ODAsNyArNDc4MiwxMCBAQAogICAgICAgICBEZWNpbWFsKCctMS4wMDAwMDAwNCcpCiAgICAgICAgID4+PiBjLm5leHRfbWludXMoRGVjaW1hbCgnSW5maW5pdHknKSkKICAgICAgICAgRGVjaW1hbCgnOS45OTk5OTk5OUUrOTk5JykKKyAgICAgICAgPj4+IGMubmV4dF9taW51cygxKQorICAgICAgICBEZWNpbWFsKCcwLjk5OTk5OTk5OScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5uZXh0X21pbnVzKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBuZXh0X3BsdXMoc2VsZiwgYSk6CkBAIC00NDk3LDcgKzQ4MDIsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDInKQogICAgICAgICA+Pj4gYy5uZXh0X3BsdXMoRGVjaW1hbCgnLUluZmluaXR5JykpCiAgICAgICAgIERlY2ltYWwoJy05Ljk5OTk5OTk5RSs5OTknKQorICAgICAgICA+Pj4gYy5uZXh0X3BsdXMoMSkKKyAgICAgICAgRGVjaW1hbCgnMS4wMDAwMDAwMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5uZXh0X3BsdXMoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG5leHRfdG93YXJkKHNlbGYsIGEsIGIpOgpAQCAtNDUyNSw3ICs0ODMzLDE0IEBACiAgICAgICAgIERlY2ltYWwoJy0xLjAwMDAwMDA0JykKICAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoRGVjaW1hbCgnMC4wMCcpLCBEZWNpbWFsKCctMC4wMDAwJykpCiAgICAgICAgIERlY2ltYWwoJy0wLjAwJykKKyAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoMCwgMSkKKyAgICAgICAgRGVjaW1hbCgnMUUtMTAwNycpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoMCksIDEpCisgICAgICAgIERlY2ltYWwoJzFFLTEwMDcnKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZCgwLCBEZWNpbWFsKDEpKQorICAgICAgICBEZWNpbWFsKCcxRS0xMDA3JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm5leHRfdG93YXJkKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBub3JtYWxpemUoc2VsZiwgYSk6CkBAIC00NTQ2LDcgKzQ4NjEsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMS4yRSsyJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMC4wMCcpKQogICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoNikKKyAgICAgICAgRGVjaW1hbCgnNicpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5ub3JtYWxpemUoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG51bWJlcl9jbGFzcyhzZWxmLCBhKToKQEAgLTQ1OTMsNyArNDkxMSwxMCBAQAogICAgICAgICAnTmFOJwogICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnc05hTicpKQogICAgICAgICAnc05hTicKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKDEyMykKKyAgICAgICAgJytOb3JtYWwnCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5udW1iZXJfY2xhc3MoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHBsdXMoc2VsZiwgYSk6CkBAIC00NjA3LDcgKzQ5MjgsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMS4zJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wbHVzKERlY2ltYWwoJy0xLjMnKSkKICAgICAgICAgRGVjaW1hbCgnLTEuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cygtMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19wb3NfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcG93ZXIoc2VsZiwgYSwgYiwgbW9kdWxvPU5vbmUpOgpAQCAtNDY3Niw4ICs1MDAwLDE5IEBACiAgICAgICAgIERlY2ltYWwoJy0wJykKICAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTIzJyksIERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnNjU1MzcnKSkKICAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucG93ZXIoNywgNykKKyAgICAgICAgRGVjaW1hbCgnODIzNTQzJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wb3dlcihEZWNpbWFsKDcpLCA3KQorICAgICAgICBEZWNpbWFsKCc4MjM1NDMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBvd2VyKDcsIERlY2ltYWwoNyksIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19wb3dfXyhiLCBtb2R1bG8sIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19wb3dfXyhiLCBtb2R1bG8sIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBxdWFudGl6ZShzZWxmLCBhLCBiKToKICAgICAgICAgIiIiUmV0dXJucyBhIHZhbHVlIGVxdWFsIHRvICdhJyAocm91bmRlZCksIGhhdmluZyB0aGUgZXhwb25lbnQgb2YgJ2InLgpAQCAtNDcyNyw3ICs1MDYyLDE0IEBACiAgICAgICAgIERlY2ltYWwoJzIuMkUrMicpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMjE3JyksIERlY2ltYWwoJzFlKzInKSkKICAgICAgICAgRGVjaW1hbCgnMkUrMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoMSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5xdWFudGl6ZShiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcmFkaXgoc2VsZik6CkBAIC00NzYyLDggKzUxMDQsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnMC4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgnMy42JyksIERlY2ltYWwoJzEuMycpKQogICAgICAgICBEZWNpbWFsKCcxLjAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcigyMiwgNikKKyAgICAgICAgRGVjaW1hbCgnNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoMjIpLCA2KQorICAgICAgICBEZWNpbWFsKCc0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoMjIsIERlY2ltYWwoNikpCisgICAgICAgIERlY2ltYWwoJzQnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19tb2RfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fbW9kX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgogCiAgICAgZGVmIHJlbWFpbmRlcl9uZWFyKHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJSZXR1cm5zIHRvIGJlICJhIC0gYiAqIG4iLCB3aGVyZSBuIGlzIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdGhlIGV4YWN0CkBAIC00Nzg5LDcgKzUxNDIsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMC4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKCczLjYnKSwgRGVjaW1hbCgnMS4zJykpCiAgICAgICAgIERlY2ltYWwoJy0wLjMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKDMsIDExKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDMpLCAxMSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoMywgRGVjaW1hbCgxMSkpCisgICAgICAgIERlY2ltYWwoJzMnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEucmVtYWluZGVyX25lYXIoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHJvdGF0ZShzZWxmLCBhLCBiKToKQEAgLTQ4MTEsNyArNTE3MSwxNCBAQAogICAgICAgICBEZWNpbWFsKCcxMjM0NTY3ODknKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnKzInKSkKICAgICAgICAgRGVjaW1hbCgnMzQ1Njc4OTEyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoMTMzMzMzMywgMSkKKyAgICAgICAgRGVjaW1hbCgnMTMzMzMzMzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKDEzMzMzMzMpLCAxKQorICAgICAgICBEZWNpbWFsKCcxMzMzMzMzMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKDEzMzMzMzMsIERlY2ltYWwoMSkpCisgICAgICAgIERlY2ltYWwoJzEzMzMzMzMwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnJvdGF0ZShiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgc2FtZV9xdWFudHVtKHNlbGYsIGEsIGIpOgpAQCAtNDgyOCw3ICs1MTk1LDE0IEBACiAgICAgICAgIEZhbHNlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJ0luZicpLCBEZWNpbWFsKCctSW5mJykpCiAgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oMTAwMDAsIC0xKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoMTAwMDApLCAtMSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNhbWVfcXVhbnR1bSgxMDAwMCwgRGVjaW1hbCgtMSkpCisgICAgICAgIFRydWUKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNhbWVfcXVhbnR1bShiKQogCiAgICAgZGVmIHNjYWxlYiAoc2VsZiwgYSwgYik6CkBAIC00ODQwLDggKzUyMTQsMTUgQEAKICAgICAgICAgRGVjaW1hbCgnNy41MCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoJzcuNTAnKSwgRGVjaW1hbCgnMycpKQogICAgICAgICBEZWNpbWFsKCc3LjUwRSszJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoMSwgNCkKKyAgICAgICAgRGVjaW1hbCgnMUUrNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoMSksIDQpCisgICAgICAgIERlY2ltYWwoJzFFKzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYigxLCBEZWNpbWFsKDQpKQorICAgICAgICBEZWNpbWFsKCcxRSs0JykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLnNjYWxlYiAoYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5zY2FsZWIoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHNoaWZ0KHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJSZXR1cm5zIGEgc2hpZnRlZCBjb3B5IG9mIGEsIGIgdGltZXMuCkBAIC00ODYzLDcgKzUyNDQsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMTIzNDU2Nzg5JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnKzInKSkKICAgICAgICAgRGVjaW1hbCgnMzQ1Njc4OTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdCg4ODg4ODg4OCwgMikKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKDg4ODg4ODg4KSwgMikKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdCg4ODg4ODg4OCwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNoaWZ0KGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBzcXJ0KHNlbGYsIGEpOgpAQCAtNDg5MCw5ICs1Mjc4LDEyIEBACiAgICAgICAgIERlY2ltYWwoJzIuNjQ1NzUxMzEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMy4xNjIyNzc2NicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydCgyKQorICAgICAgICBEZWNpbWFsKCcxLjQxNDIxMzU2JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wcmVjCiAgICAgICAgIDkKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNxcnQoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHN1YnRyYWN0KHNlbGYsIGEsIGIpOgpAQCAtNDkwNCwxNCArNTI5NSwyNiBAQAogICAgICAgICBEZWNpbWFsKCcwLjAwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMi4wNycpKQogICAgICAgICBEZWNpbWFsKCctMC43NycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoRGVjaW1hbCg4KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgRGVjaW1hbCg1KSkKKyAgICAgICAgRGVjaW1hbCgnMycpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX3N1Yl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19zdWJfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgdG9fZW5nX3N0cmluZyhzZWxmLCBhKToKICAgICAgICAgIiIiQ29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHVzaW5nIHNjaWVudGlmaWMgbm90YXRpb24uCiAKICAgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIGNvbnRleHQuCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS50b19lbmdfc3RyaW5nKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiB0b19zY2lfc3RyaW5nKHNlbGYsIGEpOgpAQCAtNDkxOSw2ICs1MzIyLDcgQEAKIAogICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29udGV4dC4KICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLl9fc3RyX18oY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHRvX2ludGVncmFsX2V4YWN0KHNlbGYsIGEpOgpAQCAtNDk0OCw2ICs1MzUyLDcgQEAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCctSW5mJykpCiAgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS50b19pbnRlZ3JhbF9leGFjdChjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgdG9faW50ZWdyYWxfdmFsdWUoc2VsZiwgYSk6CkBAIC00OTc2LDYgKzUzODEsNyBAQAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJy1JbmYnKSkKICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnRvX2ludGVncmFsX3ZhbHVlKGNvbnRleHQ9c2VsZikKIAogICAgICMgdGhlIG1ldGhvZCBuYW1lIGNoYW5nZWQsIGJ1dCB3ZSBwcm92aWRlIGFsc28gdGhlIG9sZCBvbmUsIGZvciBjb21wYXRpYmlsaXR5CkBAIC01Mzc3LDE1ICs1NzgzLDIxIEBACiAKICMjIyMjIEhlbHBlciBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1kZWYgX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9RmFsc2UpOgorZGVmIF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PUZhbHNlLCBhbGxvd19mbG9hdD1GYWxzZSk6CiAgICAgIiIiQ29udmVydCBvdGhlciB0byBEZWNpbWFsLgogCiAgICAgVmVyaWZpZXMgdGhhdCBpdCdzIG9rIHRvIHVzZSBpbiBhbiBpbXBsaWNpdCBjb25zdHJ1Y3Rpb24uCisgICAgSWYgYWxsb3dfZmxvYXQgaXMgdHJ1ZSwgYWxsb3cgY29udmVyc2lvbiBmcm9tIGZsb2F0OyAgdGhpcworICAgIGlzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gbWV0aG9kcyAoX19lcV9fIGFuZCBmcmllbmRzKS4KKwogICAgICIiIgogICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIERlY2ltYWwpOgogICAgICAgICByZXR1cm4gb3RoZXIKICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCAoaW50LCBsb25nKSk6CiAgICAgICAgIHJldHVybiBEZWNpbWFsKG90aGVyKQorICAgIGlmIGFsbG93X2Zsb2F0IGFuZCBpc2luc3RhbmNlKG90aGVyLCBmbG9hdCk6CisgICAgICAgIHJldHVybiBEZWNpbWFsLmZyb21fZmxvYXQob3RoZXIpCisKICAgICBpZiByYWlzZWl0OgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgb3RoZXIpCiAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCkBAIC01NDYwLDE0ICs1ODcyLDEzIEBACiBfZXhhY3RfaGFsZiA9IHJlLmNvbXBpbGUoJzUwKiQnKS5tYXRjaAogCiAjIyMjIyBQRVAzMTAxIHN1cHBvcnQgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGhlIGZ1bmN0aW9ucyBwYXJzZV9mb3JtYXRfc3BlY2lmaWVyIGFuZCBmb3JtYXRfYWxpZ24gaGF2ZSBsaXR0bGUgdG8gZG8KLSMgd2l0aCB0aGUgRGVjaW1hbCBjbGFzcywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJldXNlZCBmb3Igb3RoZXIgcHVyZQorIyBUaGUgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiBoYXZlIGxpdHRsZSB0byBkbyB3aXRoIHRoZSBEZWNpbWFsCisjIGNsYXNzLCBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgcmV1c2VkIG9yIGFkYXB0ZWQgZm9yIG90aGVyIHB1cmUKICMgUHl0aG9uIG51bWVyaWMgY2xhc3NlcyB0aGF0IHdhbnQgdG8gaW1wbGVtZW50IF9fZm9ybWF0X18KICMKICMgQSBmb3JtYXQgc3BlY2lmaWVyIGZvciBEZWNpbWFsIGxvb2tzIGxpa2U6CiAjCi0jICAgW1tmaWxsXWFsaWduXVtzaWduXVswXVttaW5pbXVtd2lkdGhdWy5wcmVjaXNpb25dW3R5cGVdCi0jCisjICAgW1tmaWxsXWFsaWduXVtzaWduXVswXVttaW5pbXVtd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdCiAKIF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyX3JlZ2V4ID0gcmUuY29tcGlsZShyIiIiXEEKICg/OgpAQCAtNTQ3NywxNCArNTg4OCwyMyBAQAogKD9QPHNpZ24+Wy0rIF0pPwogKD9QPHplcm9wYWQ+MCk/CiAoP1A8bWluaW11bXdpZHRoPig/ITApXGQrKT8KKyg/UDx0aG91c2FuZHNfc2VwPiwpPwogKD86XC4oP1A8cHJlY2lzaW9uPjB8KD8hMClcZCspKT8KLSg/UDx0eXBlPltlRWZGZ0clXSk/CisoP1A8dHlwZT5bZUVmRmdHbiVdKT8KIFxaCiAiIiIsIHJlLlZFUkJPU0UpCiAKIGRlbCByZQogCi1kZWYgX3BhcnNlX2Zvcm1hdF9zcGVjaWZpZXIoZm9ybWF0X3NwZWMpOgorIyBUaGUgbG9jYWxlIG1vZHVsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlICduJyBmb3JtYXQgc3BlY2lmaWVyLiAgVGhlCisjIHJlc3Qgb2YgdGhlIFBFUCAzMTAxIGNvZGUgZnVuY3Rpb25zIHF1aXRlIGhhcHBpbHkgd2l0aG91dCBpdCwgc28gd2UKKyMgZG9uJ3QgY2FyZSB0b28gbXVjaCBpZiBsb2NhbGUgaXNuJ3QgcHJlc2VudC4KK3RyeToKKyAgICBpbXBvcnQgbG9jYWxlIGFzIF9sb2NhbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKK2RlZiBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihmb3JtYXRfc3BlYywgX2xvY2FsZWNvbnY9Tm9uZSk6CiAgICAgIiIiUGFyc2UgYW5kIHZhbGlkYXRlIGEgZm9ybWF0IHNwZWNpZmllci4KIAogICAgIFR1cm5zIGEgc3RhbmRhcmQgbnVtZXJpYyBmb3JtYXQgc3BlY2lmaWVyIGludG8gYSBkaWN0LCB3aXRoIHRoZQpAQCAtNTQ5NCw5ICs1OTE0LDE0IEBACiAgICAgICBhbGlnbjogYWxpZ25tZW50IHR5cGUsIGVpdGhlciAnPCcsICc+JywgJz0nIG9yICdeJwogICAgICAgc2lnbjogZWl0aGVyICcrJywgJy0nIG9yICcgJwogICAgICAgbWluaW11bXdpZHRoOiBub25uZWdhdGl2ZSBpbnRlZ2VyIGdpdmluZyBtaW5pbXVtIHdpZHRoCisgICAgICB6ZXJvcGFkOiBib29sZWFuLCBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcGFkIHdpdGggemVyb3MKKyAgICAgIHRob3VzYW5kc19zZXA6IHN0cmluZyB0byB1c2UgYXMgdGhvdXNhbmRzIHNlcGFyYXRvciwgb3IgJycKKyAgICAgIGdyb3VwaW5nOiBncm91cGluZyBmb3IgdGhvdXNhbmRzIHNlcGFyYXRvcnMsIGluIGZvcm1hdAorICAgICAgICB1c2VkIGJ5IGxvY2FsZWNvbnYKKyAgICAgIGRlY2ltYWxfcG9pbnQ6IHN0cmluZyB0byB1c2UgZm9yIGRlY2ltYWwgcG9pbnQKICAgICAgIHByZWNpc2lvbjogbm9ubmVnYXRpdmUgaW50ZWdlciBnaXZpbmcgcHJlY2lzaW9uLCBvciBOb25lCiAgICAgICB0eXBlOiBvbmUgb2YgdGhlIGNoYXJhY3RlcnMgJ2VFZkZnRyUnLCBvciBOb25lCi0gICAgICB1bmljb2RlOiBlaXRoZXIgVHJ1ZSBvciBGYWxzZSAoYWx3YXlzIFRydWUgZm9yIFB5dGhvbiAzLngpCisgICAgICB1bmljb2RlOiBib29sZWFuIChhbHdheXMgVHJ1ZSBmb3IgUHl0aG9uIDMueCkKIAogICAgICIiIgogICAgIG0gPSBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcl9yZWdleC5tYXRjaChmb3JtYXRfc3BlYykKQEAgLTU1MDYsMjYgKzU5MzEsMjggQEAKICAgICAjIGdldCB0aGUgZGljdGlvbmFyeQogICAgIGZvcm1hdF9kaWN0ID0gbS5ncm91cGRpY3QoKQogCi0gICAgIyBkZWZhdWx0cyBmb3IgZmlsbCBhbmQgYWxpZ25tZW50CisgICAgIyB6ZXJvcGFkOyBkZWZhdWx0cyBmb3IgZmlsbCBhbmQgYWxpZ25tZW50LiAgSWYgemVybyBwYWRkaW5nCisgICAgIyBpcyByZXF1ZXN0ZWQsIHRoZSBmaWxsIGFuZCBhbGlnbiBmaWVsZHMgc2hvdWxkIGJlIGFic2VudC4KICAgICBmaWxsID0gZm9ybWF0X2RpY3RbJ2ZpbGwnXQogICAgIGFsaWduID0gZm9ybWF0X2RpY3RbJ2FsaWduJ10KLSAgICBpZiBmb3JtYXRfZGljdC5wb3AoJ3plcm9wYWQnKSBpcyBub3QgTm9uZToKLSAgICAgICAgIyBpbiB0aGUgZmFjZSBvZiBjb25mbGljdCwgcmVmdXNlIHRoZSB0ZW1wdGF0aW9uIHRvIGd1ZXNzCi0gICAgICAgIGlmIGZpbGwgaXMgbm90IE5vbmUgYW5kIGZpbGwgIT0gJzAnOgorICAgIGZvcm1hdF9kaWN0Wyd6ZXJvcGFkJ10gPSAoZm9ybWF0X2RpY3RbJ3plcm9wYWQnXSBpcyBub3QgTm9uZSkKKyAgICBpZiBmb3JtYXRfZGljdFsnemVyb3BhZCddOgorICAgICAgICBpZiBmaWxsIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsbCBjaGFyYWN0ZXIgY29uZmxpY3RzIHdpdGggJzAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluIGZvcm1hdCBzcGVjaWZpZXI6ICIgKyBmb3JtYXRfc3BlYykKLSAgICAgICAgaWYgYWxpZ24gaXMgbm90IE5vbmUgYW5kIGFsaWduICE9ICc9JzoKKyAgICAgICAgaWYgYWxpZ24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBbGlnbm1lbnQgY29uZmxpY3RzIHdpdGggJzAnIGluICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCBzcGVjaWZpZXI6ICIgKyBmb3JtYXRfc3BlYykKLSAgICAgICAgZmlsbCA9ICcwJwotICAgICAgICBhbGlnbiA9ICc9JwogICAgIGZvcm1hdF9kaWN0WydmaWxsJ10gPSBmaWxsIG9yICcgJwotICAgIGZvcm1hdF9kaWN0WydhbGlnbiddID0gYWxpZ24gb3IgJzwnCisgICAgIyBQRVAgMzEwMSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGF0IHRoZSBkZWZhdWx0IGFsaWdubWVudCBzaG91bGQKKyAgICAjIGJlIGxlZnQ7ICBpdCB3YXMgbGF0ZXIgYWdyZWVkIHRoYXQgcmlnaHQtYWxpZ25lZCBtYWtlcyBtb3JlIHNlbnNlCisgICAgIyBmb3IgbnVtZXJpYyB0eXBlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjg1Ny4KKyAgICBmb3JtYXRfZGljdFsnYWxpZ24nXSA9IGFsaWduIG9yICc+JwogCisgICAgIyBkZWZhdWx0IHNpZ24gaGFuZGxpbmc6ICctJyBmb3IgbmVnYXRpdmUsICcnIGZvciBwb3NpdGl2ZQogICAgIGlmIGZvcm1hdF9kaWN0WydzaWduJ10gaXMgTm9uZToKICAgICAgICAgZm9ybWF0X2RpY3RbJ3NpZ24nXSA9ICctJwogCi0gICAgIyB0dXJuIG1pbmltdW13aWR0aCBhbmQgcHJlY2lzaW9uIGVudHJpZXMgaW50byBpbnRlZ2Vycy4KICAgICAjIG1pbmltdW13aWR0aCBkZWZhdWx0cyB0byAwOyBwcmVjaXNpb24gcmVtYWlucyBOb25lIGlmIG5vdCBnaXZlbgogICAgIGZvcm1hdF9kaWN0WydtaW5pbXVtd2lkdGgnXSA9IGludChmb3JtYXRfZGljdFsnbWluaW11bXdpZHRoJ10gb3IgJzAnKQogICAgIGlmIGZvcm1hdF9kaWN0WydwcmVjaXNpb24nXSBpcyBub3QgTm9uZToKQEAgLTU1MzcsNTggKzU5NjQsMTcxIEBACiAgICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0eXBlJ10gaXMgTm9uZSBvciBmb3JtYXRfZGljdFsndHlwZSddIGluICdnRyc6CiAgICAgICAgICAgICBmb3JtYXRfZGljdFsncHJlY2lzaW9uJ10gPSAxCiAKKyAgICAjIGRldGVybWluZSB0aG91c2FuZHMgc2VwYXJhdG9yLCBncm91cGluZywgYW5kIGRlY2ltYWwgc2VwYXJhdG9yLCBhbmQKKyAgICAjIGFkZCBhcHByb3ByaWF0ZSBlbnRyaWVzIHRvIGZvcm1hdF9kaWN0CisgICAgaWYgZm9ybWF0X2RpY3RbJ3R5cGUnXSA9PSAnbic6CisgICAgICAgICMgYXBhcnQgZnJvbSBzZXBhcmF0b3JzLCAnbicgYmVoYXZlcyBqdXN0IGxpa2UgJ2cnCisgICAgICAgIGZvcm1hdF9kaWN0Wyd0eXBlJ10gPSAnZycKKyAgICAgICAgaWYgX2xvY2FsZWNvbnYgaXMgTm9uZToKKyAgICAgICAgICAgIF9sb2NhbGVjb252ID0gX2xvY2FsZS5sb2NhbGVjb252KCkKKyAgICAgICAgaWYgZm9ybWF0X2RpY3RbJ3Rob3VzYW5kc19zZXAnXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGxpY2l0IHRob3VzYW5kcyBzZXBhcmF0b3IgY29uZmxpY3RzIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ24nIHR5cGUgaW4gZm9ybWF0IHNwZWNpZmllcjogIiArIGZvcm1hdF9zcGVjKQorICAgICAgICBmb3JtYXRfZGljdFsndGhvdXNhbmRzX3NlcCddID0gX2xvY2FsZWNvbnZbJ3Rob3VzYW5kc19zZXAnXQorICAgICAgICBmb3JtYXRfZGljdFsnZ3JvdXBpbmcnXSA9IF9sb2NhbGVjb252Wydncm91cGluZyddCisgICAgICAgIGZvcm1hdF9kaWN0WydkZWNpbWFsX3BvaW50J10gPSBfbG9jYWxlY29udlsnZGVjaW1hbF9wb2ludCddCisgICAgZWxzZToKKyAgICAgICAgaWYgZm9ybWF0X2RpY3RbJ3Rob3VzYW5kc19zZXAnXSBpcyBOb25lOgorICAgICAgICAgICAgZm9ybWF0X2RpY3RbJ3Rob3VzYW5kc19zZXAnXSA9ICcnCisgICAgICAgIGZvcm1hdF9kaWN0Wydncm91cGluZyddID0gWzMsIDBdCisgICAgICAgIGZvcm1hdF9kaWN0WydkZWNpbWFsX3BvaW50J10gPSAnLicKKwogICAgICMgcmVjb3JkIHdoZXRoZXIgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIHN0ciBvciB1bmljb2RlCiAgICAgZm9ybWF0X2RpY3RbJ3VuaWNvZGUnXSA9IGlzaW5zdGFuY2UoZm9ybWF0X3NwZWMsIHVuaWNvZGUpCiAKICAgICByZXR1cm4gZm9ybWF0X2RpY3QKIAotZGVmIF9mb3JtYXRfYWxpZ24oYm9keSwgc3BlY19kaWN0KToKLSAgICAiIiJHaXZlbiBhbiB1bnBhZGRlZCwgbm9uLWFsaWduZWQgbnVtZXJpYyBzdHJpbmcsIGFkZCBwYWRkaW5nIGFuZAotICAgIGFsaWdtZW50IHRvIGNvbmZvcm0gd2l0aCB0aGUgZ2l2ZW4gZm9ybWF0IHNwZWNpZmllciBkaWN0aW9uYXJ5IChhcwotICAgIG91dHB1dCBmcm9tIHBhcnNlX2Zvcm1hdF9zcGVjaWZpZXIpLgorZGVmIF9mb3JtYXRfYWxpZ24oc2lnbiwgYm9keSwgc3BlYyk6CisgICAgIiIiR2l2ZW4gYW4gdW5wYWRkZWQsIG5vbi1hbGlnbmVkIG51bWVyaWMgc3RyaW5nICdib2R5JyBhbmQgc2lnbgorICAgIHN0cmluZyAnc2lnbicsIGFkZCBwYWRkaW5nIGFuZCBhbGlnbWVudCBjb25mb3JtaW5nIHRvIHRoZSBnaXZlbgorICAgIGZvcm1hdCBzcGVjaWZpZXIgZGljdGlvbmFyeSAnc3BlYycgKGFzIHByb2R1Y2VkIGJ5CisgICAgcGFyc2VfZm9ybWF0X3NwZWNpZmllcikuCiAKLSAgICBJdCdzIGFzc3VtZWQgdGhhdCBpZiBib2R5IGlzIG5lZ2F0aXZlIHRoZW4gaXQgc3RhcnRzIHdpdGggJy0nLgotICAgIEFueSBsZWFkaW5nIHNpZ24gKCctJyBvciAnKycpIGlzIHN0cmlwcGVkIGZyb20gdGhlIGJvZHkgYmVmb3JlCi0gICAgYXBwbHlpbmcgdGhlIGFsaWdubWVudCBhbmQgcGFkZGluZyBydWxlcywgYW5kIHJlcGxhY2VkIGluIHRoZQotICAgIGFwcHJvcHJpYXRlIHBvc2l0aW9uLgorICAgIEFsc28gY29udmVydHMgcmVzdWx0IHRvIHVuaWNvZGUgaWYgbmVjZXNzYXJ5LgogCiAgICAgIiIiCi0gICAgIyBmaWd1cmUgb3V0IHRoZSBzaWduOyB3ZSBvbmx5IGV4YW1pbmUgdGhlIGZpcnN0IGNoYXJhY3Rlciwgc28gaWYKLSAgICAjIGJvZHkgaGFzIGxlYWRpbmcgd2hpdGVzcGFjZSB0aGUgcmVzdWx0cyBtYXkgYmUgc3VycHJpc2luZy4KLSAgICBpZiBsZW4oYm9keSkgPiAwIGFuZCBib2R5WzBdIGluICctKyc6Ci0gICAgICAgIHNpZ24gPSBib2R5WzBdCi0gICAgICAgIGJvZHkgPSBib2R5WzE6XQotICAgIGVsc2U6Ci0gICAgICAgIHNpZ24gPSAnJwotCi0gICAgaWYgc2lnbiAhPSAnLSc6Ci0gICAgICAgIGlmIHNwZWNfZGljdFsnc2lnbiddIGluICcgKyc6Ci0gICAgICAgICAgICBzaWduID0gc3BlY19kaWN0WydzaWduJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNpZ24gPSAnJwotCiAgICAgIyBob3cgbXVjaCBleHRyYSBzcGFjZSBkbyB3ZSBoYXZlIHRvIHBsYXkgd2l0aD8KLSAgICBtaW5pbXVtd2lkdGggPSBzcGVjX2RpY3RbJ21pbmltdW13aWR0aCddCi0gICAgZmlsbCA9IHNwZWNfZGljdFsnZmlsbCddCi0gICAgcGFkZGluZyA9IGZpbGwqKG1heChtaW5pbXVtd2lkdGggLSAobGVuKHNpZ24rYm9keSkpLCAwKSkKKyAgICBtaW5pbXVtd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXQorICAgIGZpbGwgPSBzcGVjWydmaWxsJ10KKyAgICBwYWRkaW5nID0gZmlsbCoobWluaW11bXdpZHRoIC0gbGVuKHNpZ24pIC0gbGVuKGJvZHkpKQogCi0gICAgYWxpZ24gPSBzcGVjX2RpY3RbJ2FsaWduJ10KKyAgICBhbGlnbiA9IHNwZWNbJ2FsaWduJ10KICAgICBpZiBhbGlnbiA9PSAnPCc6CiAgICAgICAgIHJlc3VsdCA9IHNpZ24gKyBib2R5ICsgcGFkZGluZwogICAgIGVsaWYgYWxpZ24gPT0gJz4nOgogICAgICAgICByZXN1bHQgPSBwYWRkaW5nICsgc2lnbiArIGJvZHkKICAgICBlbGlmIGFsaWduID09ICc9JzoKICAgICAgICAgcmVzdWx0ID0gc2lnbiArIHBhZGRpbmcgKyBib2R5Ci0gICAgZWxzZTogI2FsaWduID09ICdeJworICAgIGVsaWYgYWxpZ24gPT0gJ14nOgogICAgICAgICBoYWxmID0gbGVuKHBhZGRpbmcpLy8yCiAgICAgICAgIHJlc3VsdCA9IHBhZGRpbmdbOmhhbGZdICsgc2lnbiArIGJvZHkgKyBwYWRkaW5nW2hhbGY6XQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VucmVjb2duaXNlZCBhbGlnbm1lbnQgZmllbGQnKQogCiAgICAgIyBtYWtlIHN1cmUgdGhhdCByZXN1bHQgaXMgdW5pY29kZSBpZiBuZWNlc3NhcnkKLSAgICBpZiBzcGVjX2RpY3RbJ3VuaWNvZGUnXToKKyAgICBpZiBzcGVjWyd1bmljb2RlJ106CiAgICAgICAgIHJlc3VsdCA9IHVuaWNvZGUocmVzdWx0KQogCiAgICAgcmV0dXJuIHJlc3VsdAogCitkZWYgX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgorICAgICIiIkNvbnZlcnQgYSBsb2NhbGVjb252LXN0eWxlIGdyb3VwaW5nIGludG8gYSAocG9zc2libHkgaW5maW5pdGUpCisgICAgaXRlcmFibGUgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIGdyb3VwIGxlbmd0aHMuCisKKyAgICAiIiIKKyAgICAjIFRoZSByZXN1bHQgZnJvbSBsb2NhbGVjb252KClbJ2dyb3VwaW5nJ10sIGFuZCB0aGUgaW5wdXQgdG8gdGhpcworICAgICMgZnVuY3Rpb24sIHNob3VsZCBiZSBhIGxpc3Qgb2YgaW50ZWdlcnMgaW4gb25lIG9mIHRoZQorICAgICMgZm9sbG93aW5nIHRocmVlIGZvcm1zOgorICAgICMKKyAgICAjICAgKDEpIGFuIGVtcHR5IGxpc3QsIG9yCisgICAgIyAgICgyKSBub25lbXB0eSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgWzBdCisgICAgIyAgICgzKSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgW2xvY2FsZS5DSEFSX01BWF0sIG9yCisKKyAgICBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIHJlcGVhdAorICAgIGlmIG5vdCBncm91cGluZzoKKyAgICAgICAgcmV0dXJuIFtdCisgICAgZWxpZiBncm91cGluZ1stMV0gPT0gMCBhbmQgbGVuKGdyb3VwaW5nKSA+PSAyOgorICAgICAgICByZXR1cm4gY2hhaW4oZ3JvdXBpbmdbOi0xXSwgcmVwZWF0KGdyb3VwaW5nWy0yXSkpCisgICAgZWxpZiBncm91cGluZ1stMV0gPT0gX2xvY2FsZS5DSEFSX01BWDoKKyAgICAgICAgcmV0dXJuIGdyb3VwaW5nWzotMV0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbmlzZWQgZm9ybWF0IGZvciBncm91cGluZycpCisKK2RlZiBfaW5zZXJ0X3Rob3VzYW5kc19zZXAoZGlnaXRzLCBzcGVjLCBtaW5fd2lkdGg9MSk6CisgICAgIiIiSW5zZXJ0IHRob3VzYW5kcyBzZXBhcmF0b3JzIGludG8gYSBkaWdpdCBzdHJpbmcuCisKKyAgICBzcGVjIGlzIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzIHNob3VsZCBpbmNsdWRlICd0aG91c2FuZHNfc2VwJyBhbmQKKyAgICAnZ3JvdXBpbmcnOyB0eXBpY2FsbHkgaXQncyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGZvcm1hdAorICAgIHNwZWNpZmllciB1c2luZyBfcGFyc2VfZm9ybWF0X3NwZWNpZmllci4KKworICAgIFRoZSBtaW5fd2lkdGgga2V5d29yZCBhcmd1bWVudCBnaXZlcyB0aGUgbWluaW11bSBsZW5ndGggb2YgdGhlCisgICAgcmVzdWx0LCB3aGljaCB3aWxsIGJlIHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4KKworICAgIElmIG5lY2Vzc2FyeSwgdGhlIHplcm8gcGFkZGluZyBhZGRzIGFuIGV4dHJhICcwJyBvbiB0aGUgbGVmdCB0bworICAgIGF2b2lkIGEgbGVhZGluZyB0aG91c2FuZHMgc2VwYXJhdG9yLiAgRm9yIGV4YW1wbGUsIGluc2VydGluZworICAgIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdpdHMgaW4gJzEyMzQ1NicsIHdpdGggbWluX3dpZHRoPTgsIGdpdmVzCisgICAgJzAsMTIzLDQ1NicsIGV2ZW4gdGhvdWdoIHRoYXQgaGFzIGxlbmd0aCA5LgorCisgICAgIiIiCisKKyAgICBzZXAgPSBzcGVjWyd0aG91c2FuZHNfc2VwJ10KKyAgICBncm91cGluZyA9IHNwZWNbJ2dyb3VwaW5nJ10KKworICAgIGdyb3VwcyA9IFtdCisgICAgZm9yIGwgaW4gX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgorICAgICAgICBpZiBsIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJncm91cCBsZW5ndGggc2hvdWxkIGJlIHBvc2l0aXZlIikKKyAgICAgICAgIyBtYXgoLi4uLCAxKSBmb3JjZXMgYXQgbGVhc3QgMSBkaWdpdCB0byB0aGUgbGVmdCBvZiBhIHNlcGFyYXRvcgorICAgICAgICBsID0gbWluKG1heChsZW4oZGlnaXRzKSwgbWluX3dpZHRoLCAxKSwgbCkKKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgnMCcqKGwgLSBsZW4oZGlnaXRzKSkgKyBkaWdpdHNbLWw6XSkKKyAgICAgICAgZGlnaXRzID0gZGlnaXRzWzotbF0KKyAgICAgICAgbWluX3dpZHRoIC09IGwKKyAgICAgICAgaWYgbm90IGRpZ2l0cyBhbmQgbWluX3dpZHRoIDw9IDA6CisgICAgICAgICAgICBicmVhaworICAgICAgICBtaW5fd2lkdGggLT0gbGVuKHNlcCkKKyAgICBlbHNlOgorICAgICAgICBsID0gbWF4KGxlbihkaWdpdHMpLCBtaW5fd2lkdGgsIDEpCisgICAgICAgIGdyb3Vwcy5hcHBlbmQoJzAnKihsIC0gbGVuKGRpZ2l0cykpICsgZGlnaXRzWy1sOl0pCisgICAgcmV0dXJuIHNlcC5qb2luKHJldmVyc2VkKGdyb3VwcykpCisKK2RlZiBfZm9ybWF0X3NpZ24oaXNfbmVnYXRpdmUsIHNwZWMpOgorICAgICIiIkRldGVybWluZSBzaWduIGNoYXJhY3Rlci4iIiIKKworICAgIGlmIGlzX25lZ2F0aXZlOgorICAgICAgICByZXR1cm4gJy0nCisgICAgZWxpZiBzcGVjWydzaWduJ10gaW4gJyArJzoKKyAgICAgICAgcmV0dXJuIHNwZWNbJ3NpZ24nXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJworCitkZWYgX2Zvcm1hdF9udW1iZXIoaXNfbmVnYXRpdmUsIGludHBhcnQsIGZyYWNwYXJ0LCBleHAsIHNwZWMpOgorICAgICIiIkZvcm1hdCBhIG51bWJlciwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBkYXRhOgorCisgICAgaXNfbmVnYXRpdmU6IHRydWUgaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZWxzZSBmYWxzZQorICAgIGludHBhcnQ6IHN0cmluZyBvZiBkaWdpdHMgdGhhdCBtdXN0IGFwcGVhciBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBmcmFjcGFydDogc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IG11c3QgY29tZSBhZnRlciB0aGUgcG9pbnQKKyAgICBleHA6IGV4cG9uZW50LCBhcyBhbiBpbnRlZ2VyCisgICAgc3BlYzogZGljdGlvbmFyeSByZXN1bHRpbmcgZnJvbSBwYXJzaW5nIHRoZSBmb3JtYXQgc3BlY2lmaWVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGluZm9ybWF0aW9uIGluIHNwZWMgdG86CisgICAgICBpbnNlcnQgc2VwYXJhdG9ycyAoZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzKQorICAgICAgZm9ybWF0IHRoZSBzaWduCisgICAgICBmb3JtYXQgdGhlIGV4cG9uZW50CisgICAgICBhZGQgdHJhaWxpbmcgJyUnIGZvciB0aGUgJyUnIHR5cGUKKyAgICAgIHplcm8tcGFkIGlmIG5lY2Vzc2FyeQorICAgICAgZmlsbCBhbmQgYWxpZ24gaWYgbmVjZXNzYXJ5CisgICAgIiIiCisKKyAgICBzaWduID0gX2Zvcm1hdF9zaWduKGlzX25lZ2F0aXZlLCBzcGVjKQorCisgICAgaWYgZnJhY3BhcnQ6CisgICAgICAgIGZyYWNwYXJ0ID0gc3BlY1snZGVjaW1hbF9wb2ludCddICsgZnJhY3BhcnQKKworICAgIGlmIGV4cCAhPSAwIG9yIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgorICAgICAgICBlY2hhciA9IHsnRSc6ICdFJywgJ2UnOiAnZScsICdHJzogJ0UnLCAnZyc6ICdlJ31bc3BlY1sndHlwZSddXQorICAgICAgICBmcmFjcGFydCArPSAiezB9ezE6K30iLmZvcm1hdChlY2hhciwgZXhwKQorICAgIGlmIHNwZWNbJ3R5cGUnXSA9PSAnJSc6CisgICAgICAgIGZyYWNwYXJ0ICs9ICclJworCisgICAgaWYgc3BlY1snemVyb3BhZCddOgorICAgICAgICBtaW5fd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXSAtIGxlbihmcmFjcGFydCkgLSBsZW4oc2lnbikKKyAgICBlbHNlOgorICAgICAgICBtaW5fd2lkdGggPSAwCisgICAgaW50cGFydCA9IF9pbnNlcnRfdGhvdXNhbmRzX3NlcChpbnRwYXJ0LCBzcGVjLCBtaW5fd2lkdGgpCisKKyAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBpbnRwYXJ0K2ZyYWNwYXJ0LCBzcGVjKQorCisKICMjIyMjIFVzZWZ1bCBDb25zdGFudHMgKGludGVybmFsIHVzZSBvbmx5KSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiAjIFJldXNhYmxlIGRlZmF1bHRzCmRpZmYgLS1naXQgYS9MaWIvZGlmZmxpYi5weSBiL0xpYi9kaWZmbGliLnB5CmluZGV4IGI0M2RjOTcuLmU1OTEwYmMgMTAwNjQ0Ci0tLSBhL0xpYi9kaWZmbGliLnB5CisrKyBiL0xpYi9kaWZmbGliLnB5CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgUmV0dXJuIGFuIHVwcGVyIGJvdW5kIG9uIHJhdGlvKCkgdmVyeSBxdWlja2x5LgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGlzanVuaz1Ob25lLCBhPScnLCBiPScnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXNqdW5rPU5vbmUsIGE9JycsIGI9JycsIGF1dG9qdW5rPVRydWUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBTZXF1ZW5jZU1hdGNoZXIuCiAKICAgICAgICAgT3B0aW9uYWwgYXJnIGlzanVuayBpcyBOb25lICh0aGUgZGVmYXVsdCksIG9yIGEgb25lLWFyZ3VtZW50CkBAIC0xNjksNiArMTY5LDEwIEBACiAgICAgICAgIE9wdGlvbmFsIGFyZyBiIGlzIHRoZSBzZWNvbmQgb2YgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4gIEJ5CiAgICAgICAgIGRlZmF1bHQsIGFuIGVtcHR5IHN0cmluZy4gIFRoZSBlbGVtZW50cyBvZiBiIG11c3QgYmUgaGFzaGFibGUuIFNlZQogICAgICAgICBhbHNvIC5zZXRfc2VxcygpIGFuZCAuc2V0X3NlcTIoKS4KKworICAgICAgICBPcHRpb25hbCBhcmcgYXV0b2p1bmsgc2hvdWxkIGJlIHNldCB0byBGYWxzZSB0byBkaXNhYmxlIHRoZQorICAgICAgICAiYXV0b21hdGljIGp1bmsgaGV1cmlzdGljIiB0aGF0IHRyZWF0cyBwb3B1bGFyIGVsZW1lbnRzIGFzIGp1bmsKKyAgICAgICAgKHNlZSBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgTWVtYmVyczoKQEAgLTIwNywxMSArMjExLDEzIEBACiAgICAgICAgICMgICAgICBET0VTIE5PVCBXT1JLIGZvciB4IGluIGEhCiAgICAgICAgICMgaXNicG9wdWxhcgogICAgICAgICAjICAgICAgZm9yIHggaW4gYiwgaXNicG9wdWxhcih4KSBpcyB0cnVlIGlmZiBiIGlzIHJlYXNvbmFibHkgbG9uZwotICAgICAgICAjICAgICAgKGF0IGxlYXN0IDIwMCBlbGVtZW50cykgYW5kIHggYWNjb3VudHMgZm9yIG1vcmUgdGhhbiAxJSBvZgotICAgICAgICAjICAgICAgaXRzIGVsZW1lbnRzLiAgRE9FUyBOT1QgV09SSyBmb3IgeCBpbiBhIQorICAgICAgICAjICAgICAgKGF0IGxlYXN0IDIwMCBlbGVtZW50cykgYW5kIHggYWNjb3VudHMgZm9yIG1vcmUgdGhhbiAxICsgMSUgb2YKKyAgICAgICAgIyAgICAgIGl0cyBlbGVtZW50cyAod2hlbiBhdXRvanVuayBpcyBlbmFibGVkKS4KKyAgICAgICAgIyAgICAgIERPRVMgTk9UIFdPUksgZm9yIHggaW4gYSEKIAogICAgICAgICBzZWxmLmlzanVuayA9IGlzanVuawogICAgICAgICBzZWxmLmEgPSBzZWxmLmIgPSBOb25lCisgICAgICAgIHNlbGYuYXV0b2p1bmsgPSBhdXRvanVuawogICAgICAgICBzZWxmLnNldF9zZXFzKGEsIGIpCiAKICAgICBkZWYgc2V0X3NlcXMoc2VsZiwgYSwgYik6CkBAIC0yODgsNyArMjk0LDcgQEAKICAgICAjIGZyb20gc3RhcnRpbmcgYW55IG1hdGNoaW5nIGJsb2NrIGF0IGEganVuayBlbGVtZW50IC4uLgogICAgICMgYWxzbyBjcmVhdGVzIHRoZSBmYXN0IGlzYmp1bmsgZnVuY3Rpb24gLi4uCiAgICAgIyBiMmogYWxzbyBkb2VzIG5vdCBjb250YWluIGVudHJpZXMgZm9yICJwb3B1bGFyIiBlbGVtZW50cywgbWVhbmluZwotICAgICMgZWxlbWVudHMgdGhhdCBhY2NvdW50IGZvciBtb3JlIHRoYW4gMSUgb2YgdGhlIHRvdGFsIGVsZW1lbnRzLCBhbmQKKyAgICAjIGVsZW1lbnRzIHRoYXQgYWNjb3VudCBmb3IgbW9yZSB0aGFuIDEgKyAxJSBvZiB0aGUgdG90YWwgZWxlbWVudHMsIGFuZAogICAgICMgd2hlbiB0aGUgc2VxdWVuY2UgaXMgcmVhc29uYWJseSBsYXJnZSAoPj0gMjAwIGVsZW1lbnRzKTsgdGhpcyBjYW4KICAgICAjIGJlIHZpZXdlZCBhcyBhbiBhZGFwdGl2ZSBub3Rpb24gb2Ygc2VtaS1qdW5rLCBhbmQgeWllbGRzIGFuIGVub3Jtb3VzCiAgICAgIyBzcGVlZHVwIHdoZW4sIGUuZy4sIGNvbXBhcmluZyBwcm9ncmFtIGZpbGVzIHdpdGggaHVuZHJlZHMgb2YKQEAgLTMwOSw0NCArMzE1LDM3IEBACiAgICAgICAgICMgb3V0IHRoZSBqdW5rIGxhdGVyIGlzIG11Y2ggY2hlYXBlciB0aGFuIGJ1aWxkaW5nIGIyaiAicmlnaHQiCiAgICAgICAgICMgZnJvbSB0aGUgc3RhcnQuCiAgICAgICAgIGIgPSBzZWxmLmIKLSAgICAgICAgbiA9IGxlbihiKQogICAgICAgICBzZWxmLmIyaiA9IGIyaiA9IHt9Ci0gICAgICAgIHBvcHVsYXJkaWN0ID0ge30KKwogICAgICAgICBmb3IgaSwgZWx0IGluIGVudW1lcmF0ZShiKToKLSAgICAgICAgICAgIGlmIGVsdCBpbiBiMmo6Ci0gICAgICAgICAgICAgICAgaW5kaWNlcyA9IGIyaltlbHRdCi0gICAgICAgICAgICAgICAgaWYgbiA+PSAyMDAgYW5kIGxlbihpbmRpY2VzKSAqIDEwMCA+IG46Ci0gICAgICAgICAgICAgICAgICAgIHBvcHVsYXJkaWN0W2VsdF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGRlbCBpbmRpY2VzWzpdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy5hcHBlbmQoaSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYjJqW2VsdF0gPSBbaV0KKyAgICAgICAgICAgIGluZGljZXMgPSBiMmouc2V0ZGVmYXVsdChlbHQsIFtdKQorICAgICAgICAgICAgaW5kaWNlcy5hcHBlbmQoaSkKIAotICAgICAgICAjIFB1cmdlIGxlZnRvdmVyIGluZGljZXMgZm9yIHBvcHVsYXIgZWxlbWVudHMuCi0gICAgICAgIGZvciBlbHQgaW4gcG9wdWxhcmRpY3Q6Ci0gICAgICAgICAgICBkZWwgYjJqW2VsdF0KLQotICAgICAgICAjIE5vdyBiMmoua2V5cygpIGNvbnRhaW5zIGVsZW1lbnRzIHVuaXF1ZWx5LCBhbmQgZXNwZWNpYWxseSB3aGVuCi0gICAgICAgICMgdGhlIHNlcXVlbmNlIGlzIGEgc3RyaW5nLCB0aGF0J3MgdXN1YWxseSBhIGdvb2QgZGVhbCBzbWFsbGVyCi0gICAgICAgICMgdGhhbiBsZW4oc3RyaW5nKS4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoZSBudW1iZXIgb2YgaXNqdW5rIGNhbGxzCi0gICAgICAgICMgc2F2ZWQuCisgICAgICAgICMgUHVyZ2UganVuayBlbGVtZW50cworICAgICAgICBqdW5rID0gc2V0KCkKICAgICAgICAgaXNqdW5rID0gc2VsZi5pc2p1bmsKLSAgICAgICAganVua2RpY3QgPSB7fQogICAgICAgICBpZiBpc2p1bms6Ci0gICAgICAgICAgICBmb3IgZCBpbiBwb3B1bGFyZGljdCwgYjJqOgotICAgICAgICAgICAgICAgIGZvciBlbHQgaW4gZC5rZXlzKCk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzanVuayhlbHQpOgotICAgICAgICAgICAgICAgICAgICAgICAganVua2RpY3RbZWx0XSA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBkW2VsdF0KKyAgICAgICAgICAgIGZvciBlbHQgaW4gbGlzdChiMmoua2V5cygpKTogICMgdXNpbmcgbGlzdCgpIHNpbmNlIGIyaiBpcyBtb2RpZmllZAorICAgICAgICAgICAgICAgIGlmIGlzanVuayhlbHQpOgorICAgICAgICAgICAgICAgICAgICBqdW5rLmFkZChlbHQpCisgICAgICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQogCi0gICAgICAgICMgTm93IGZvciB4IGluIGIsIGlzanVuayh4KSA9PSB4IGluIGp1bmtkaWN0LCBidXQgdGhlCi0gICAgICAgICMgbGF0dGVyIGlzIG11Y2ggZmFzdGVyLiAgTm90ZSB0b28gdGhhdCB3aGlsZSB0aGVyZSBtYXkgYmUgYQotICAgICAgICAjIGxvdCBvZiBqdW5rIGluIHRoZSBzZXF1ZW5jZSwgdGhlIG51bWJlciBvZiAqdW5pcXVlKiBqdW5rCi0gICAgICAgICMgZWxlbWVudHMgaXMgcHJvYmFibHkgc21hbGwuICBTbyB0aGUgbWVtb3J5IGJ1cmRlbiBvZiBrZWVwaW5nCi0gICAgICAgICMgdGhpcyBkaWN0IGFsaXZlIGlzIGxpa2VseSB0cml2aWFsIGNvbXBhcmVkIHRvIHRoZSBzaXplIG9mIGIyai4KLSAgICAgICAgc2VsZi5pc2JqdW5rID0ganVua2RpY3QuX19jb250YWluc19fCi0gICAgICAgIHNlbGYuaXNicG9wdWxhciA9IHBvcHVsYXJkaWN0Ll9fY29udGFpbnNfXworICAgICAgICAjIFB1cmdlIHBvcHVsYXIgZWxlbWVudHMgdGhhdCBhcmUgbm90IGp1bmsKKyAgICAgICAgcG9wdWxhciA9IHNldCgpCisgICAgICAgIG4gPSBsZW4oYikKKyAgICAgICAgaWYgc2VsZi5hdXRvanVuayBhbmQgbiA+PSAyMDA6CisgICAgICAgICAgICBudGVzdCA9IG4gLy8gMTAwICsgMQorICAgICAgICAgICAgZm9yIGVsdCwgaWR4cyBpbiBsaXN0KGIyai5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oaWR4cykgPiBudGVzdDoKKyAgICAgICAgICAgICAgICAgICAgcG9wdWxhci5hZGQoZWx0KQorICAgICAgICAgICAgICAgICAgICBkZWwgYjJqW2VsdF0KKworICAgICAgICAjIE5vdyBmb3IgeCBpbiBiLCBpc2p1bmsoeCkgPT0geCBpbiBqdW5rLCBidXQgdGhlIGxhdHRlciBpcyBtdWNoIGZhc3Rlci4KKyAgICAgICAgIyBTaWNuZSB0aGUgbnVtYmVyIG9mICp1bmlxdWUqIGp1bmsgZWxlbWVudHMgaXMgcHJvYmFibHkgc21hbGwsIHRoZQorICAgICAgICAjIG1lbW9yeSBidXJkZW4gb2Yga2VlcGluZyB0aGlzIHNldCBhbGl2ZSBpcyBsaWtlbHkgdHJpdmlhbCBjb21wYXJlZCB0bworICAgICAgICAjIHRoZSBzaXplIG9mIGIyai4KKyAgICAgICAgc2VsZi5pc2JqdW5rID0ganVuay5fX2NvbnRhaW5zX18KKyAgICAgICAgc2VsZi5pc2Jwb3B1bGFyID0gcG9wdWxhci5fX2NvbnRhaW5zX18KIAogICAgIGRlZiBmaW5kX2xvbmdlc3RfbWF0Y2goc2VsZiwgYWxvLCBhaGksIGJsbywgYmhpKToKICAgICAgICAgIiIiRmluZCBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGluIGFbYWxvOmFoaV0gYW5kIGJbYmxvOmJoaV0uCkBAIC0xMTYxLDE4ICsxMTYwLDE4IEBACiAKICAgICBUaGUgdW5pZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kIG1vZGlmaWNhdGlvbgogICAgIHRpbWVzLiAgQW55IG9yIGFsbCBvZiB0aGVzZSBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nIHN0cmluZ3MgZm9yCi0gICAgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLiAgVGhlIG1vZGlmaWNhdGlvbgotICAgIHRpbWVzIGFyZSBub3JtYWxseSBleHByZXNzZWQgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSB0aW1lLmN0aW1lKCkuCisgICAgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLgorICAgIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5IGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LgogCiAgICAgRXhhbXBsZToKIAogICAgID4+PiBmb3IgbGluZSBpbiB1bmlmaWVkX2RpZmYoJ29uZSB0d28gdGhyZWUgZm91cicuc3BsaXQoKSwKICAgICAuLi4gICAgICAgICAgICAgJ3plcm8gb25lIHRyZWUgZm91cicuc3BsaXQoKSwgJ09yaWdpbmFsJywgJ0N1cnJlbnQnLAotICAgIC4uLiAgICAgICAgICAgICAnU2F0IEphbiAyNiAyMzozMDo1MCAxOTkxJywgJ0ZyaSBKdW4gMDYgMTA6MjA6NTIgMjAwMycsCisgICAgLi4uICAgICAgICAgICAgICcyMDA1LTAxLTI2IDIzOjMwOjUwJywgJzIwMTAtMDQtMDIgMTA6MjA6NTInLAogICAgIC4uLiAgICAgICAgICAgICBsaW5ldGVybT0nJyk6Ci0gICAgLi4uICAgICBwcmludCBsaW5lCi0gICAgLS0tIE9yaWdpbmFsIFNhdCBKYW4gMjYgMjM6MzA6NTAgMTk5MQotICAgICsrKyBDdXJyZW50IEZyaSBKdW4gMDYgMTA6MjA6NTIgMjAwMworICAgIC4uLiAgICAgcHJpbnQgbGluZSAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLS0tIE9yaWdpbmFsICAgICAgICAyMDA1LTAxLTI2IDIzOjMwOjUwCisgICAgKysrIEN1cnJlbnQgICAgICAgICAyMDEwLTA0LTAyIDEwOjIwOjUyCiAgICAgQEAgLTEsNCArMSw0IEBACiAgICAgK3plcm8KICAgICAgb25lCkBAIC0xMTg1LDggKzExODQsMTAgQEAKICAgICBzdGFydGVkID0gRmFsc2UKICAgICBmb3IgZ3JvdXAgaW4gU2VxdWVuY2VNYXRjaGVyKE5vbmUsYSxiKS5nZXRfZ3JvdXBlZF9vcGNvZGVzKG4pOgogICAgICAgICBpZiBub3Qgc3RhcnRlZDoKLSAgICAgICAgICAgIHlpZWxkICctLS0gJXMgJXMlcycgJSAoZnJvbWZpbGUsIGZyb21maWxlZGF0ZSwgbGluZXRlcm0pCi0gICAgICAgICAgICB5aWVsZCAnKysrICVzICVzJXMnICUgKHRvZmlsZSwgdG9maWxlZGF0ZSwgbGluZXRlcm0pCisgICAgICAgICAgICBmcm9tZGF0ZSA9ICdcdCVzJyAlIGZyb21maWxlZGF0ZSBpZiBmcm9tZmlsZWRhdGUgZWxzZSAnJworICAgICAgICAgICAgdG9kYXRlID0gJ1x0JXMnICUgdG9maWxlZGF0ZSBpZiB0b2ZpbGVkYXRlIGVsc2UgJycKKyAgICAgICAgICAgIHlpZWxkICctLS0gJXMlcyVzJyAlIChmcm9tZmlsZSwgZnJvbWRhdGUsIGxpbmV0ZXJtKQorICAgICAgICAgICAgeWllbGQgJysrKyAlcyVzJXMnICUgKHRvZmlsZSwgdG9kYXRlLCBsaW5ldGVybSkKICAgICAgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCiAgICAgICAgIGkxLCBpMiwgajEsIGoyID0gZ3JvdXBbMF1bMV0sIGdyb3VwWy0xXVsyXSwgZ3JvdXBbMF1bM10sIGdyb3VwWy0xXVs0XQogICAgICAgICB5aWVsZCAiQEAgLSVkLCVkICslZCwlZCBAQCVzIiAlIChpMSsxLCBpMi1pMSwgajErMSwgajItajEsIGxpbmV0ZXJtKQpAQCAtMTIyNCwxNiArMTIyNSwxNSBAQAogICAgIFRoZSBjb250ZXh0IGRpZmYgZm9ybWF0IG5vcm1hbGx5IGhhcyBhIGhlYWRlciBmb3IgZmlsZW5hbWVzIGFuZAogICAgIG1vZGlmaWNhdGlvbiB0aW1lcy4gIEFueSBvciBhbGwgb2YgdGhlc2UgbWF5IGJlIHNwZWNpZmllZCB1c2luZwogICAgIHN0cmluZ3MgZm9yICdmcm9tZmlsZScsICd0b2ZpbGUnLCAnZnJvbWZpbGVkYXRlJywgYW5kICd0b2ZpbGVkYXRlJy4KLSAgICBUaGUgbW9kaWZpY2F0aW9uIHRpbWVzIGFyZSBub3JtYWxseSBleHByZXNzZWQgaW4gdGhlIGZvcm1hdCByZXR1cm5lZAotICAgIGJ5IHRpbWUuY3RpbWUoKS4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBzdHJpbmdzIGRlZmF1bHQgdG8gYmxhbmtzLgorICAgIFRoZSBtb2RpZmljYXRpb24gdGltZXMgYXJlIG5vcm1hbGx5IGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LgorICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBzdHJpbmdzIGRlZmF1bHQgdG8gYmxhbmtzLgogCiAgICAgRXhhbXBsZToKIAogICAgID4+PiBwcmludCAnJy5qb2luKGNvbnRleHRfZGlmZignb25lXG50d29cbnRocmVlXG5mb3VyXG4nLnNwbGl0bGluZXMoMSksCi0gICAgLi4uICAgICAgICd6ZXJvXG5vbmVcbnRyZWVcbmZvdXJcbicuc3BsaXRsaW5lcygxKSwgJ09yaWdpbmFsJywgJ0N1cnJlbnQnLAotICAgIC4uLiAgICAgICAnU2F0IEphbiAyNiAyMzozMDo1MCAxOTkxJywgJ0ZyaSBKdW4gMDYgMTA6MjI6NDYgMjAwMycpKSwKLSAgICAqKiogT3JpZ2luYWwgU2F0IEphbiAyNiAyMzozMDo1MCAxOTkxCi0gICAgLS0tIEN1cnJlbnQgRnJpIEp1biAwNiAxMDoyMjo0NiAyMDAzCisgICAgLi4uICAgICAgICd6ZXJvXG5vbmVcbnRyZWVcbmZvdXJcbicuc3BsaXRsaW5lcygxKSwgJ09yaWdpbmFsJywgJ0N1cnJlbnQnKSksCisgICAgKioqIE9yaWdpbmFsCisgICAgLS0tIEN1cnJlbnQKICAgICAqKioqKioqKioqKioqKioKICAgICAqKiogMSw0ICoqKioKICAgICAgIG9uZQpAQCAtMTI1MSw4ICsxMjUxLDEwIEBACiAgICAgcHJlZml4bWFwID0geydpbnNlcnQnOicrICcsICdkZWxldGUnOictICcsICdyZXBsYWNlJzonISAnLCAnZXF1YWwnOicgICd9CiAgICAgZm9yIGdyb3VwIGluIFNlcXVlbmNlTWF0Y2hlcihOb25lLGEsYikuZ2V0X2dyb3VwZWRfb3Bjb2RlcyhuKToKICAgICAgICAgaWYgbm90IHN0YXJ0ZWQ6Ci0gICAgICAgICAgICB5aWVsZCAnKioqICVzICVzJXMnICUgKGZyb21maWxlLCBmcm9tZmlsZWRhdGUsIGxpbmV0ZXJtKQotICAgICAgICAgICAgeWllbGQgJy0tLSAlcyAlcyVzJyAlICh0b2ZpbGUsIHRvZmlsZWRhdGUsIGxpbmV0ZXJtKQorICAgICAgICAgICAgZnJvbWRhdGUgPSAnXHQlcycgJSBmcm9tZmlsZWRhdGUgaWYgZnJvbWZpbGVkYXRlIGVsc2UgJycKKyAgICAgICAgICAgIHRvZGF0ZSA9ICdcdCVzJyAlIHRvZmlsZWRhdGUgaWYgdG9maWxlZGF0ZSBlbHNlICcnCisgICAgICAgICAgICB5aWVsZCAnKioqICVzJXMlcycgJSAoZnJvbWZpbGUsIGZyb21kYXRlLCBsaW5ldGVybSkKKyAgICAgICAgICAgIHlpZWxkICctLS0gJXMlcyVzJyAlICh0b2ZpbGUsIHRvZGF0ZSwgbGluZXRlcm0pCiAgICAgICAgICAgICBzdGFydGVkID0gVHJ1ZQogCiAgICAgICAgIHlpZWxkICcqKioqKioqKioqKioqKiolcycgJSAobGluZXRlcm0sKQpkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggMzVhZTU5NS4uNWFhMDljOSAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC02LDcgKzYsOCBAQAogZnJvbSBvcGNvZGUgaW1wb3J0ICoKIGZyb20gb3Bjb2RlIGltcG9ydCBfX2FsbF9fIGFzIF9vcGNvZGVzX2FsbAogCi1fX2FsbF9fID0gWyJkaXMiLCJkaXNhc3NlbWJsZSIsImRpc3RiIiwiZGlzY28iXSArIF9vcGNvZGVzX2FsbAorX19hbGxfXyA9IFsiZGlzIiwgImRpc2Fzc2VtYmxlIiwgImRpc3RiIiwgImRpc2NvIiwKKyAgICAgICAgICAgImZpbmRsaW5lc3RhcnRzIiwgImZpbmRsYWJlbHMiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCiBfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsCkBAIC0yMSw3ICsyMiw3IEBACiAgICAgaWYgeCBpcyBOb25lOgogICAgICAgICBkaXN0YigpCiAgICAgICAgIHJldHVybgotICAgIGlmIHR5cGUoeCkgaXMgdHlwZXMuSW5zdGFuY2VUeXBlOgorICAgIGlmIGlzaW5zdGFuY2UoeCwgdHlwZXMuSW5zdGFuY2VUeXBlKToKICAgICAgICAgeCA9IHguX19jbGFzc19fCiAgICAgaWYgaGFzYXR0cih4LCAnaW1fZnVuYycpOgogICAgICAgICB4ID0geC5pbV9mdW5jCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL1JFQURNRSBiL0xpYi9kaXN0dXRpbHMvUkVBRE1FCmluZGV4IDQ1YzdjYTguLjQwOGEyMDMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvUkVBRE1FCisrKyBiL0xpYi9kaXN0dXRpbHMvUkVBRE1FCkBAIC0xLDIyICsxLDEzIEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBvbmx5IGEgc3Vic2V0IG9mIHRoZSBEaXN0dXRpbHMsIHNwZWNpZmljYWxseQotdGhlIFB5dGhvbiBtb2R1bGVzIGluIHRoZSAnZGlzdHV0aWxzJyBhbmQgJ2Rpc3R1dGlscy5jb21tYW5kJwotcGFja2FnZXMuICBUaGlzIGlzIGFsbCB5b3UgbmVlZCB0byBkaXN0cmlidXRlIGFuZCBpbnN0YWxsIFB5dGhvbgotbW9kdWxlcyB1c2luZyB0aGUgRGlzdHV0aWxzLiAgVGhlcmUgaXMgYWxzbyBhIHNlcGFyYXRlbHkgcGFja2FnZWQKLXN0YW5kYWxvbmUgdmVyc2lvbiBvZiB0aGUgRGlzdHV0aWxzIGF2YWlsYWJsZSBmb3IgcGVvcGxlIHdobyB3YW50IHRvCi11cGdyYWRlIHRoZSBEaXN0dXRpbHMgd2l0aG91dCB1cGdyYWRpbmcgUHl0aG9uLCBhdmFpbGFibGUgZnJvbSB0aGUKLURpc3R1dGlscyB3ZWIgcGFnZToKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBEaXN0dXRpbHMgcGFja2FnZS4KKworVGhlcmUncyBhIGZ1bGwgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUgYXQ6CisKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rpc3R1dGlscy8KKworVGhlIERpc3R1dGlscy1TSUcgd2ViIHBhZ2UgaXMgYWxzbyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ6CiAKICAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLwogCi1UaGUgc3RhbmRhbG9uZSB2ZXJzaW9uIGluY2x1ZGVzIGFsbCBvZiB0aGUgY29kZSBpbiB0aGlzIGRpcmVjdG9yeSwKLXBsdXMgZG9jdW1lbnRhdGlvbiwgdGVzdCBzY3JpcHRzLCBleGFtcGxlcywgZXRjLgotCi1UaGUgRGlzdHV0aWxzIGRvY3VtZW50YXRpb24gaXMgZGl2aWRlZCBpbnRvIHR3byBkb2N1bWVudHMsICJJbnN0YWxsaW5nCi1QeXRob24gTW9kdWxlcyIsIHdoaWNoIGV4cGxhaW5zIGhvdyB0byBpbnN0YWxsIFB5dGhvbiBwYWNrYWdlcywgYW5kCi0iRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzIiwgd2hpY2ggZXhwbGFpbnMgaG93IHRvIHdyaXRlIHNldHVwLnB5Ci1maWxlcy4gIEJvdGggZG9jdW1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBQeXRob24gZG9jdW1lbnRhdGlvbgotc2V0LCBhbmQgYXJlIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvY3VycmVudC8gLgotCi0gICAgICAgIEdyZWcgV2FyZCAoZ3dhcmRAcHl0aG9uLm5ldCkKK1dBUk5JTkcgOiBEaXN0dXRpbHMgbXVzdCByZW1haW4gY29tcGF0aWJsZSB3aXRoIDIuMwogCiAkSWQkCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5IGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQppbmRleCA5MGY5NmZlLi5hODJkNGNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKQEAgLTgsMTkgKzgsMTIgQEAKICAgIHNldHVwICguLi4pCiAiIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKICMgRGlzdHV0aWxzIHZlcnNpb24KICMKLSMgUGxlYXNlIGNvb3JkaW5hdGUgd2l0aCBNYXJjLUFuZHJlIExlbWJ1cmcgPG1hbEBlZ2VuaXguY29tPiB3aGVuIGFkZGluZwotIyBuZXcgZmVhdHVyZXMgdG8gZGlzdHV0aWxzIHRoYXQgd291bGQgd2FycmFudCBidW1waW5nIHRoZSB2ZXJzaW9uIG51bWJlci4KKyMgVXBkYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBQeXRob24gcmVsZWFzZSBwcm9jZXNzLgogIwotIyBJbiBnZW5lcmFsLCBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBzaG91bGQgbG9vc2VseSBmb2xsb3cgdGhlIFB5dGhvbgotIyB2ZXJzaW9uIG51bWJlciB0aGUgZGlzdHV0aWxzIGNvZGUgd2FzIHNoaXBwZWQgd2l0aC4KLSMKLQogIy0tc3RhcnQgY29uc3RhbnRzLS0KLV9fdmVyc2lvbl9fID0gIjIuNi42IgorX192ZXJzaW9uX18gPSAiMi43LjEiCiAjLS1lbmQgY29uc3RhbnRzLS0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkKaW5kZXggNzgyZDRlZi4uODM0YjcyMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkKQEAgLTMsNjYgKzMsMTI5IEBACiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYXJjaGl2ZSBmaWxlcyAodGFyYmFsbHMsIHppcCBmaWxlcywKIHRoYXQgc29ydCBvZiB0aGluZykuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2ltcG9ydCBzeXMKKwogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IKIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgogZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IG1rcGF0aAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi1kZWYgbWFrZV90YXJiYWxsIChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Ci0gICAgIiIiQ3JlYXRlIGEgKHBvc3NpYmx5IGNvbXByZXNzZWQpIHRhciBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlcgotICAgICdiYXNlX2RpcicuICAnY29tcHJlc3MnIG11c3QgYmUgImd6aXAiICh0aGUgZGVmYXVsdCksICJjb21wcmVzcyIsCi0gICAgImJ6aXAyIiwgb3IgTm9uZS4gIEJvdGggInRhciIgYW5kIHRoZSBjb21wcmVzc2lvbiB1dGlsaXR5IG5hbWVkIGJ5Ci0gICAgJ2NvbXByZXNzJyBtdXN0IGJlIG9uIHRoZSBkZWZhdWx0IHByb2dyYW0gc2VhcmNoIHBhdGgsIHNvIHRoaXMgaXMKLSAgICBwcm9iYWJseSBVbml4LXNwZWNpZmljLiAgVGhlIG91dHB1dCB0YXIgZmlsZSB3aWxsIGJlIG5hbWVkICdiYXNlX2RpcicgKwotICAgICIudGFyIiwgcG9zc2libHkgcGx1cyB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwKLSAgICAiLmJ6MiIgb3IgIi5aIikuICBSZXR1cm4gdGhlIG91dHB1dCBmaWxlbmFtZS4KLSAgICAiIiIKLSAgICAjIFhYWCBHTlUgdGFyIDEuMTMgaGFzIGEgbmlmdHkgb3B0aW9uIHRvIGFkZCBhIHByZWZpeCBkaXJlY3RvcnkuCi0gICAgIyBJdCdzIHByZXR0eSBuZXcsIHRob3VnaCwgc28gd2UgY2VydGFpbmx5IGNhbid0IHJlcXVpcmUgaXQgLS0KLSAgICAjIGJ1dCBpdCB3b3VsZCBiZSBuaWNlIHRvIHRha2UgYWR2YW50YWdlIG9mIGl0IHRvIHNraXAgdGhlCi0gICAgIyAiY3JlYXRlIGEgdHJlZSBvZiBoYXJkbGlua3MiIHN0ZXAhICAoV291bGQgYWxzbyBiZSBuaWNlIHRvCi0gICAgIyBkZXRlY3QgR05VIHRhciB0byB1c2UgaXRzICd6JyBvcHRpb24gYW5kIHNhdmUgYSBzdGVwLikKK3RyeToKKyAgICBmcm9tIHB3ZCBpbXBvcnQgZ2V0cHduYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRwd25hbSA9IE5vbmUKIAotICAgIGNvbXByZXNzX2V4dCA9IHsgJ2d6aXAnOiAiLmd6IiwKLSAgICAgICAgICAgICAgICAgICAgICdiemlwMic6ICcuYnoyJywKLSAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzcyc6ICIuWiIgfQordHJ5OgorICAgIGZyb20gZ3JwIGltcG9ydCBnZXRncm5hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGdybmFtID0gTm9uZQorCitkZWYgX2dldF9naWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhIGdpZCwgZ2l2ZW4gYSBncm91cCBuYW1lLiIiIgorICAgIGlmIGdldGdybmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0Z3JuYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgX2dldF91aWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhbiB1aWQsIGdpdmVuIGEgdXNlciBuYW1lLiIiIgorICAgIGlmIGdldHB3bmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0cHduYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIChwb3NzaWJseSBjb21wcmVzc2VkKSB0YXIgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIKKyAgICAnYmFzZV9kaXInLgorCisgICAgJ2NvbXByZXNzJyBtdXN0IGJlICJnemlwIiAodGhlIGRlZmF1bHQpLCAiY29tcHJlc3MiLCAiYnppcDIiLCBvciBOb25lLgorICAgIChjb21wcmVzcyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMikKKworICAgICdvd25lcicgYW5kICdncm91cCcgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG93bmVyIGFuZCBhIGdyb3VwIGZvciB0aGUKKyAgICBhcmNoaXZlIHRoYXQgaXMgYmVpbmcgYnVpbHQuIElmIG5vdCBwcm92aWRlZCwgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwCisgICAgd2lsbCBiZSB1c2VkLgorCisgICAgVGhlIG91dHB1dCB0YXIgZmlsZSB3aWxsIGJlIG5hbWVkICdiYXNlX2RpcicgKyAgIi50YXIiLCBwb3NzaWJseSBwbHVzCisgICAgdGhlIGFwcHJvcHJpYXRlIGNvbXByZXNzaW9uIGV4dGVuc2lvbiAoIi5neiIsICIuYnoyIiBvciAiLloiKS4KKworICAgIFJldHVybnMgdGhlIG91dHB1dCBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICB0YXJfY29tcHJlc3Npb24gPSB7J2d6aXAnOiAnZ3onLCAnYnppcDInOiAnYnoyJywgTm9uZTogJycsICdjb21wcmVzcyc6ICcnfQorICAgIGNvbXByZXNzX2V4dCA9IHsnZ3ppcCc6ICcuZ3onLCAnYnppcDInOiAnLmJ6MicsICdjb21wcmVzcyc6ICcuWid9CiAKICAgICAjIGZsYWdzIGZvciBjb21wcmVzc2lvbiBwcm9ncmFtLCBlYWNoIGVsZW1lbnQgb2YgbGlzdCB3aWxsIGJlIGFuIGFyZ3VtZW50Ci0gICAgY29tcHJlc3NfZmxhZ3MgPSB7J2d6aXAnOiBbIi1mOSJdLAotICAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzcyc6IFsiLWYiXSwKLSAgICAgICAgICAgICAgICAgICAgICAnYnppcDInOiBbJy1mOSddfQotCiAgICAgaWYgY29tcHJlc3MgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzIG5vdCBpbiBjb21wcmVzc19leHQua2V5cygpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCBcCi0gICAgICAgICAgICAgICJiYWQgdmFsdWUgZm9yICdjb21wcmVzcyc6IG11c3QgYmUgTm9uZSwgJ2d6aXAnLCBvciAnY29tcHJlc3MnIgorICAgICAgICAgICAgICAoImJhZCB2YWx1ZSBmb3IgJ2NvbXByZXNzJzogbXVzdCBiZSBOb25lLCAnZ3ppcCcsICdiemlwMicgIgorICAgICAgICAgICAgICAgIm9yICdjb21wcmVzcyciKQogCi0gICAgYXJjaGl2ZV9uYW1lID0gYmFzZV9uYW1lICsgIi50YXIiCisgICAgYXJjaGl2ZV9uYW1lID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgaWYgY29tcHJlc3MgIT0gJ2NvbXByZXNzJzoKKyAgICAgICAgYXJjaGl2ZV9uYW1lICs9IGNvbXByZXNzX2V4dC5nZXQoY29tcHJlc3MsICcnKQorCiAgICAgbWtwYXRoKG9zLnBhdGguZGlybmFtZShhcmNoaXZlX25hbWUpLCBkcnlfcnVuPWRyeV9ydW4pCi0gICAgY21kID0gWyJ0YXIiLCAiLWNmIiwgYXJjaGl2ZV9uYW1lLCBiYXNlX2Rpcl0KLSAgICBzcGF3bihjbWQsIGRyeV9ydW49ZHJ5X3J1bikKIAotICAgIGlmIGNvbXByZXNzOgotICAgICAgICBzcGF3bihbY29tcHJlc3NdICsgY29tcHJlc3NfZmxhZ3NbY29tcHJlc3NdICsgW2FyY2hpdmVfbmFtZV0sCi0gICAgICAgICAgICAgIGRyeV9ydW49ZHJ5X3J1bikKLSAgICAgICAgcmV0dXJuIGFyY2hpdmVfbmFtZSArIGNvbXByZXNzX2V4dFtjb21wcmVzc10KLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gYXJjaGl2ZV9uYW1lCisgICAgIyBjcmVhdGluZyB0aGUgdGFyYmFsbAorICAgIGltcG9ydCB0YXJmaWxlICAjIGxhdGUgaW1wb3J0IHNvIFB5dGhvbiBidWlsZCBpdHNlbGYgZG9lc24ndCBicmVhawogCi0jIG1ha2VfdGFyYmFsbCAoKQorICAgIGxvZy5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCiAKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKIAotZGVmIG1ha2VfemlwZmlsZSAoYmFzZV9uYW1lLCBiYXNlX2RpciwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgICIiIkNyZWF0ZSBhIHppcCBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlciAnYmFzZV9kaXInLiAgVGhlIG91dHB1dAotICAgIHppcCBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICIuemlwIi4gIFVzZXMgZWl0aGVyIHRoZSAiemlwZmlsZSIKLSAgICBQeXRob24gbW9kdWxlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBJbmZvWklQICJ6aXAiIHV0aWxpdHkgKGlmIGluc3RhbGxlZAotICAgIGFuZCBmb3VuZCBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCkuICBJZiBuZWl0aGVyIHRvb2wgaXMgYXZhaWxhYmxlLAotICAgIHJhaXNlcyBEaXN0dXRpbHNFeGVjRXJyb3IuICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgemlwIGZpbGUuCisgICAgZGVmIF9zZXRfdWlkX2dpZCh0YXJpbmZvKToKKyAgICAgICAgaWYgZ2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby5naWQgPSBnaWQKKyAgICAgICAgICAgIHRhcmluZm8uZ25hbWUgPSBncm91cAorICAgICAgICBpZiB1aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IHVpZAorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9IG93bmVyCisgICAgICAgIHJldHVybiB0YXJpbmZvCisKKyAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSwgJ3d8JXMnICUgdGFyX2NvbXByZXNzaW9uW2NvbXByZXNzXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyLmFkZChiYXNlX2RpciwgZmlsdGVyPV9zZXRfdWlkX2dpZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAjIGNvbXByZXNzaW9uIHVzaW5nIGBjb21wcmVzc2AKKyAgICBpZiBjb21wcmVzcyA9PSAnY29tcHJlc3MnOgorICAgICAgICB3YXJuKCInY29tcHJlc3MnIHdpbGwgYmUgZGVwcmVjYXRlZC4iLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAjIHRoZSBvcHRpb24gdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0KKyAgICAgICAgY29tcHJlc3NlZF9uYW1lID0gYXJjaGl2ZV9uYW1lICsgY29tcHJlc3NfZXh0W2NvbXByZXNzXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGNtZCA9IFtjb21wcmVzcywgYXJjaGl2ZV9uYW1lLCBjb21wcmVzc2VkX25hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSBbY29tcHJlc3MsICctZicsIGFyY2hpdmVfbmFtZV0KKyAgICAgICAgc3Bhd24oY21kLCBkcnlfcnVuPWRyeV9ydW4pCisgICAgICAgIHJldHVybiBjb21wcmVzc2VkX25hbWUKKworICAgIHJldHVybiBhcmNoaXZlX25hbWUKKworZGVmIG1ha2VfemlwZmlsZShiYXNlX25hbWUsIGJhc2VfZGlyLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6CisgICAgIiIiQ3JlYXRlIGEgemlwIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyICdiYXNlX2RpcicuCisKKyAgICBUaGUgb3V0cHV0IHppcCBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfbmFtZScgKyAiLnppcCIuICBVc2VzIGVpdGhlciB0aGUKKyAgICAiemlwZmlsZSIgUHl0aG9uIG1vZHVsZSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgSW5mb1pJUCAiemlwIiB1dGlsaXR5CisgICAgKGlmIGluc3RhbGxlZCBhbmQgZm91bmQgb24gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGgpLiAgSWYgbmVpdGhlciB0b29sIGlzCisgICAgYXZhaWxhYmxlLCByYWlzZXMgRGlzdHV0aWxzRXhlY0Vycm9yLiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IHppcAorICAgIGZpbGUuCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBpbXBvcnQgemlwZmlsZQpAQCAtOTYsMjIgKzE1OSwxOSBAQAogICAgICAgICAgICAgICAgICB6aXBfZmlsZW5hbWUsIGJhc2VfZGlyKQogCiAgICAgICAgIGlmIG5vdCBkcnlfcnVuOgotICAgICAgICAgICAgeiA9IHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZW5hbWUsICJ3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgICAgICAgICB6aXAgPSB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGVuYW1lLCAidyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpCiAKICAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoYmFzZV9kaXIpOgogICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpKQogICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHoud3JpdGUocGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHppcC53cml0ZShwYXRoLCBwYXRoKQogICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmluZm8oImFkZGluZyAnJXMnIiAlIHBhdGgpCi0gICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIHppcC5jbG9zZSgpCiAKICAgICByZXR1cm4gemlwX2ZpbGVuYW1lCiAKLSMgbWFrZV96aXBmaWxlICgpCi0KLQogQVJDSElWRV9GT1JNQVRTID0gewogICAgICdnenRhcic6IChtYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgJ2d6aXAnKV0sICJnemlwJ2VkIHRhci1maWxlIiksCiAgICAgJ2J6dGFyJzogKG1ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnYnppcDInKV0sICJiemlwMidlZCB0YXItZmlsZSIpLApAQCAtMTIwLDI1ICsxODAsMzMgQEAKICAgICAnemlwJzogICAobWFrZV96aXBmaWxlLCBbXSwiWklQIGZpbGUiKQogICAgIH0KIAotZGVmIGNoZWNrX2FyY2hpdmVfZm9ybWF0cyAoZm9ybWF0cyk6CitkZWYgY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKGZvcm1hdHMpOgorICAgICIiIlJldHVybnMgdGhlIGZpcnN0IGZvcm1hdCBmcm9tIHRoZSAnZm9ybWF0JyBsaXN0IHRoYXQgaXMgdW5rbm93bi4KKworICAgIElmIGFsbCBmb3JtYXRzIGFyZSBrbm93biwgcmV0dXJucyBOb25lCisgICAgIiIiCiAgICAgZm9yIGZvcm1hdCBpbiBmb3JtYXRzOgogICAgICAgICBpZiBmb3JtYXQgbm90IGluIEFSQ0hJVkVfRk9STUFUUzoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBOb25lCiAKLWRlZiBtYWtlX2FyY2hpdmUgKGJhc2VfbmFtZSwgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICAiIiJDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChlZy4gemlwIG9yIHRhcikuICAnYmFzZV9uYW1lJyBpcyB0aGUgbmFtZQotICAgIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYyBleHRlbnNpb247ICdmb3JtYXQnCi0gICAgaXMgdGhlIGFyY2hpdmUgZm9ybWF0OiBvbmUgb2YgInppcCIsICJ0YXIiLCAienRhciIsIG9yICJnenRhciIuCitkZWYgbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLCB2ZXJib3NlPTAsCisgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgorCisgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCisgICAgZXh0ZW5zaW9uOyAnZm9ybWF0JyBpcyB0aGUgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiAiemlwIiwgInRhciIsICJ6dGFyIiwKKyAgICBvciAiZ3p0YXIiLgorCiAgICAgJ3Jvb3RfZGlyJyBpcyBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZQogICAgIGFyY2hpdmU7IGllLiB3ZSB0eXBpY2FsbHkgY2hkaXIgaW50byAncm9vdF9kaXInIGJlZm9yZSBjcmVhdGluZyB0aGUKICAgICBhcmNoaXZlLiAgJ2Jhc2VfZGlyJyBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIHN0YXJ0IGFyY2hpdmluZyBmcm9tOwogICAgIGllLiAnYmFzZV9kaXInIHdpbGwgYmUgdGhlIGNvbW1vbiBwcmVmaXggb2YgYWxsIGZpbGVzIGFuZAogICAgIGRpcmVjdG9yaWVzIGluIHRoZSBhcmNoaXZlLiAgJ3Jvb3RfZGlyJyBhbmQgJ2Jhc2VfZGlyJyBib3RoIGRlZmF1bHQKICAgICB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhcmNoaXZlIGZpbGUuCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGFyZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgYXJjaGl2ZS4gQnkgZGVmYXVsdCwKKyAgICB1c2VzIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cC4KICAgICAiIiIKICAgICBzYXZlX2N3ZCA9IG9zLmdldGN3ZCgpCiAgICAgaWYgcm9vdF9kaXIgaXMgbm90IE5vbmU6CkBAIC0xNTAsNyArMjE4LDcgQEAKICAgICBpZiBiYXNlX2RpciBpcyBOb25lOgogICAgICAgICBiYXNlX2RpciA9IG9zLmN1cmRpcgogCi0gICAga3dhcmdzID0geyAnZHJ5X3J1bic6IGRyeV9ydW4gfQorICAgIGt3YXJncyA9IHsnZHJ5X3J1bic6IGRyeV9ydW59CiAKICAgICB0cnk6CiAgICAgICAgIGZvcm1hdF9pbmZvID0gQVJDSElWRV9GT1JNQVRTW2Zvcm1hdF0KQEAgLTE1OCw5ICsyMjYsMTIgQEAKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgInVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIgJSBmb3JtYXQKIAogICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1swXQotICAgIGZvciAoYXJnLHZhbCkgaW4gZm9ybWF0X2luZm9bMV06CisgICAgZm9yIGFyZywgdmFsIGluIGZvcm1hdF9pbmZvWzFdOgogICAgICAgICBrd2FyZ3NbYXJnXSA9IHZhbAotICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKKworICAgIGlmIGZvcm1hdCAhPSAnemlwJzoKKyAgICAgICAga3dhcmdzWydvd25lciddID0gb3duZXIKKyAgICAgICAga3dhcmdzWydncm91cCddID0gZ3JvdXAKIAogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQpAQCAtMTcwLDUgKzI0MSwzIEBACiAgICAgICAgICAgICBvcy5jaGRpcihzYXZlX2N3ZCkKIAogICAgIHJldHVybiBmaWxlbmFtZQotCi0jIG1ha2VfYXJjaGl2ZSAoKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9iY3BwY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQppbmRleCBkNGZjNTMzLi5mMjZlN2FlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2JjcHBjb21waWxlci5weQpAQCAtMTEsMTcgKzExLDEzIEBACiAjIHNvbWVvbmUgc2hvdWxkIHNpdCBkb3duIGFuZCBmYWN0b3Igb3V0IHRoZSBjb21tb24gY29kZSBhcwogIyBXaW5kb3dzQ0NvbXBpbGVyISAgLS1HUFcKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLQogaW1wb3J0IG9zCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IFwKLSAgICAgRGlzdHV0aWxzRXhlY0Vycm9yLCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBcCi0gICAgIENvbXBpbGVFcnJvciwgTGliRXJyb3IsIExpbmtFcnJvciwgVW5rbm93bkZpbGVFcnJvcgotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBcCi0gICAgIENDb21waWxlciwgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCisKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKERpc3R1dGlsc0V4ZWNFcnJvciwgQ29tcGlsZUVycm9yLCBMaWJFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtFcnJvciwgVW5rbm93bkZpbGVFcnJvcikKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgQ0NvbXBpbGVyLCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zCiBmcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKIGZyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlcgogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQppbmRleCBiZjkyZDc4Li5jMmIxZjZmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQpAQCAtMywyMSArMyw3MyBAQAogQ29udGFpbnMgQ0NvbXBpbGVyLCBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlCiBmb3IgdGhlIERpc3R1dGlscyBjb21waWxlciBhYnN0cmFjdGlvbiBtb2RlbC4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSB0eXBlcyBpbXBvcnQgKgotZnJvbSBjb3B5IGltcG9ydCBjb3B5Ci1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKENvbXBpbGVFcnJvciwgTGlua0Vycm9yLCBVbmtub3duRmlsZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgRGlzdHV0aWxzTW9kdWxlRXJyb3IpCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgbW92ZV9maWxlCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCi1mcm9tIGRpc3R1dGlscy5kZXBfdXRpbCBpbXBvcnQgbmV3ZXJfcGFpcndpc2UsIG5ld2VyX2dyb3VwCitmcm9tIGRpc3R1dGlscy5kZXBfdXRpbCBpbXBvcnQgbmV3ZXJfZ3JvdXAKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IHNwbGl0X3F1b3RlZCwgZXhlY3V0ZQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCitfc3lzY29uZmlnID0gX19pbXBvcnRfXygnc3lzY29uZmlnJykKKworZGVmIGN1c3RvbWl6ZV9jb21waWxlcihjb21waWxlcik6CisgICAgIiIiRG8gYW55IHBsYXRmb3JtLXNwZWNpZmljIGN1c3RvbWl6YXRpb24gb2YgYSBDQ29tcGlsZXIgaW5zdGFuY2UuCisKKyAgICBNYWlubHkgbmVlZGVkIG9uIFVuaXgsIHNvIHdlIGNhbiBwbHVnIGluIHRoZSBpbmZvcm1hdGlvbiB0aGF0CisgICAgdmFyaWVzIGFjcm9zcyBVbmljZXMgYW5kIGlzIHN0b3JlZCBpbiBQeXRob24ncyBNYWtlZmlsZS4KKyAgICAiIiIKKyAgICBpZiBjb21waWxlci5jb21waWxlcl90eXBlID09ICJ1bml4IjoKKyAgICAgICAgKGNjLCBjeHgsIG9wdCwgY2ZsYWdzLCBjY3NoYXJlZCwgbGRzaGFyZWQsIHNvX2V4dCwgYXIsIGFyX2ZsYWdzKSA9IFwKKyAgICAgICAgICAgIF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQycsICdDWFgnLCAnT1BUJywgJ0NGTEFHUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ0NTSEFSRUQnLCAnTERTSEFSRUQnLCAnU08nLCAnQVInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FSRkxBR1MnKQorCisgICAgICAgIGlmICdDQycgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGNjID0gb3MuZW52aXJvblsnQ0MnXQorICAgICAgICBpZiAnQ1hYJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgY3h4ID0gb3MuZW52aXJvblsnQ1hYJ10KKyAgICAgICAgaWYgJ0xEU0hBUkVEJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgbGRzaGFyZWQgPSBvcy5lbnZpcm9uWydMRFNIQVJFRCddCisgICAgICAgIGlmICdDUFAnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBjcHAgPSBvcy5lbnZpcm9uWydDUFAnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3BwID0gY2MgKyAiIC1FIiAgICAgICAgICAgIyBub3QgYWx3YXlzCisgICAgICAgIGlmICdMREZMQUdTJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgbGRzaGFyZWQgPSBsZHNoYXJlZCArICcgJyArIG9zLmVudmlyb25bJ0xERkxBR1MnXQorICAgICAgICBpZiAnQ0ZMQUdTJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgY2ZsYWdzID0gb3B0ICsgJyAnICsgb3MuZW52aXJvblsnQ0ZMQUdTJ10KKyAgICAgICAgICAgIGxkc2hhcmVkID0gbGRzaGFyZWQgKyAnICcgKyBvcy5lbnZpcm9uWydDRkxBR1MnXQorICAgICAgICBpZiAnQ1BQRkxBR1MnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBjcHAgPSBjcHAgKyAnICcgKyBvcy5lbnZpcm9uWydDUFBGTEFHUyddCisgICAgICAgICAgICBjZmxhZ3MgPSBjZmxhZ3MgKyAnICcgKyBvcy5lbnZpcm9uWydDUFBGTEFHUyddCisgICAgICAgICAgICBsZHNoYXJlZCA9IGxkc2hhcmVkICsgJyAnICsgb3MuZW52aXJvblsnQ1BQRkxBR1MnXQorICAgICAgICBpZiAnQVInIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBhciA9IG9zLmVudmlyb25bJ0FSJ10KKyAgICAgICAgaWYgJ0FSRkxBR1MnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICBhcmNoaXZlciA9IGFyICsgJyAnICsgb3MuZW52aXJvblsnQVJGTEFHUyddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmNoaXZlciA9IGFyICsgJyAnICsgYXJfZmxhZ3MKKworICAgICAgICBjY19jbWQgPSBjYyArICcgJyArIGNmbGFncworICAgICAgICBjb21waWxlci5zZXRfZXhlY3V0YWJsZXMoCisgICAgICAgICAgICBwcmVwcm9jZXNzb3I9Y3BwLAorICAgICAgICAgICAgY29tcGlsZXI9Y2NfY21kLAorICAgICAgICAgICAgY29tcGlsZXJfc289Y2NfY21kICsgJyAnICsgY2NzaGFyZWQsCisgICAgICAgICAgICBjb21waWxlcl9jeHg9Y3h4LAorICAgICAgICAgICAgbGlua2VyX3NvPWxkc2hhcmVkLAorICAgICAgICAgICAgbGlua2VyX2V4ZT1jYywKKyAgICAgICAgICAgIGFyY2hpdmVyPWFyY2hpdmVyKQorCisgICAgICAgIGNvbXBpbGVyLnNoYXJlZF9saWJfZXh0ZW5zaW9uID0gc29fZXh0CisKIGNsYXNzIENDb21waWxlcjoKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGRlZmluZSB0aGUgaW50ZXJmYWNlIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZAogICAgIGJ5IHJlYWwgY29tcGlsZXIgY2xhc3Nlcy4gIEFsc28gaGFzIHNvbWUgdXRpbGl0eSBtZXRob2RzIHVzZWQgYnkKQEAgLTg4LDExICsxNDAsNyBAQAogICAgICAgICAgICAgICAgICAgIH0KICAgICBsYW5ndWFnZV9vcmRlciA9IFsiYysrIiwgIm9iamMiLCAiYyJdCiAKLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQorICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsIGZvcmNlPTApOgogICAgICAgICBzZWxmLmRyeV9ydW4gPSBkcnlfcnVuCiAgICAgICAgIHNlbGYuZm9yY2UgPSBmb3JjZQogICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCkBAIC0xMjgsMTEgKzE3Niw3IEBACiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5leGVjdXRhYmxlcy5rZXlzKCk6CiAgICAgICAgICAgICBzZWxmLnNldF9leGVjdXRhYmxlKGtleSwgc2VsZi5leGVjdXRhYmxlc1trZXldKQogCi0gICAgIyBfX2luaXRfXyAoKQotCi0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGVzIChzZWxmLCAqKmFyZ3MpOgotCisgICAgZGVmIHNldF9leGVjdXRhYmxlcyhzZWxmLCAqKmFyZ3MpOgogICAgICAgICAiIiJEZWZpbmUgdGhlIGV4ZWN1dGFibGVzIChhbmQgb3B0aW9ucyBmb3IgdGhlbSkgdGhhdCB3aWxsIGJlIHJ1bgogICAgICAgICB0byBwZXJmb3JtIHRoZSB2YXJpb3VzIHN0YWdlcyBvZiBjb21waWxhdGlvbi4gIFRoZSBleGFjdCBzZXQgb2YKICAgICAgICAgZXhlY3V0YWJsZXMgdGhhdCBtYXkgYmUgc3BlY2lmaWVkIGhlcmUgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXIKQEAgLTE2NSwzNiArMjA5LDMxIEBACiAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgICAgICBzZWxmLnNldF9leGVjdXRhYmxlKGtleSwgYXJnc1trZXldKQogCi0gICAgIyBzZXRfZXhlY3V0YWJsZXMgKCkKLQogICAgIGRlZiBzZXRfZXhlY3V0YWJsZShzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgU3RyaW5nVHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCBzcGxpdF9xdW90ZWQodmFsdWUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIHZhbHVlKQogCi0KLSAgICBkZWYgX2ZpbmRfbWFjcm8gKHNlbGYsIG5hbWUpOgorICAgIGRlZiBfZmluZF9tYWNybyhzZWxmLCBuYW1lKToKICAgICAgICAgaSA9IDAKICAgICAgICAgZm9yIGRlZm4gaW4gc2VsZi5tYWNyb3M6CiAgICAgICAgICAgICBpZiBkZWZuWzBdID09IG5hbWU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGkKICAgICAgICAgICAgIGkgPSBpICsgMQotCiAgICAgICAgIHJldHVybiBOb25lCiAKLQotICAgIGRlZiBfY2hlY2tfbWFjcm9fZGVmaW5pdGlvbnMgKHNlbGYsIGRlZmluaXRpb25zKToKKyAgICBkZWYgX2NoZWNrX21hY3JvX2RlZmluaXRpb25zKHNlbGYsIGRlZmluaXRpb25zKToKICAgICAgICAgIiIiRW5zdXJlcyB0aGF0IGV2ZXJ5IGVsZW1lbnQgb2YgJ2RlZmluaXRpb25zJyBpcyBhIHZhbGlkIG1hY3JvCiAgICAgICAgIGRlZmluaXRpb24sIGllLiBlaXRoZXIgKG5hbWUsdmFsdWUpIDItdHVwbGUgb3IgYSAobmFtZSwpIHR1cGxlLiAgRG8KICAgICAgICAgbm90aGluZyBpZiBhbGwgZGVmaW5pdGlvbnMgYXJlIE9LLCByYWlzZSBUeXBlRXJyb3Igb3RoZXJ3aXNlLgogICAgICAgICAiIiIKICAgICAgICAgZm9yIGRlZm4gaW4gZGVmaW5pdGlvbnM6Ci0gICAgICAgICAgICBpZiBub3QgKHR5cGUgKGRlZm4pIGlzIFR1cGxlVHlwZSBhbmQKKyAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShkZWZuLCB0dXBsZSkgYW5kCiAgICAgICAgICAgICAgICAgICAgIChsZW4gKGRlZm4pID09IDEgb3IKICAgICAgICAgICAgICAgICAgICAgIChsZW4gKGRlZm4pID09IDIgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgKHR5cGUgKGRlZm5bMV0pIGlzIFN0cmluZ1R5cGUgb3IgZGVmblsxXSBpcyBOb25lKSkpIGFuZAotICAgICAgICAgICAgICAgICAgICB0eXBlIChkZWZuWzBdKSBpcyBTdHJpbmdUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAoaXNpbnN0YW5jZShkZWZuWzFdLCBzdHIpIG9yIGRlZm5bMV0gaXMgTm9uZSkpKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShkZWZuWzBdLCBzdHIpKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAoImludmFsaWQgbWFjcm8gZGVmaW5pdGlvbiAnJXMnOiAiICUgZGVmbikgKyBcCiAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgdHVwbGUgKHN0cmluZywpLCAoc3RyaW5nLCBzdHJpbmcpLCBvciAiICsgXApAQCAtMjAzLDcgKzI0Miw3IEBACiAKICAgICAjIC0tIEJvb2trZWVwaW5nIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGRlZmluZV9tYWNybyAoc2VsZiwgbmFtZSwgdmFsdWU9Tm9uZSk6CisgICAgZGVmIGRlZmluZV9tYWNybyhzZWxmLCBuYW1lLCB2YWx1ZT1Ob25lKToKICAgICAgICAgIiIiRGVmaW5lIGEgcHJlcHJvY2Vzc29yIG1hY3JvIGZvciBhbGwgY29tcGlsYXRpb25zIGRyaXZlbiBieSB0aGlzCiAgICAgICAgIGNvbXBpbGVyIG9iamVjdC4gIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgJ3ZhbHVlJyBzaG91bGQgYmUgYQogICAgICAgICBzdHJpbmc7IGlmIGl0IGlzIG5vdCBzdXBwbGllZCwgdGhlbiB0aGUgbWFjcm8gd2lsbCBiZSBkZWZpbmVkCkBAIC0yMTksOCArMjU4LDcgQEAKICAgICAgICAgZGVmbiA9IChuYW1lLCB2YWx1ZSkKICAgICAgICAgc2VsZi5tYWNyb3MuYXBwZW5kIChkZWZuKQogCi0KLSAgICBkZWYgdW5kZWZpbmVfbWFjcm8gKHNlbGYsIG5hbWUpOgorICAgIGRlZiB1bmRlZmluZV9tYWNybyhzZWxmLCBuYW1lKToKICAgICAgICAgIiIiVW5kZWZpbmUgYSBwcmVwcm9jZXNzb3IgbWFjcm8gZm9yIGFsbCBjb21waWxhdGlvbnMgZHJpdmVuIGJ5CiAgICAgICAgIHRoaXMgY29tcGlsZXIgb2JqZWN0LiAgSWYgdGhlIHNhbWUgbWFjcm8gaXMgZGVmaW5lZCBieQogICAgICAgICAnZGVmaW5lX21hY3JvKCknIGFuZCB1bmRlZmluZWQgYnkgJ3VuZGVmaW5lX21hY3JvKCknIHRoZSBsYXN0IGNhbGwKQEAgLTIzOCw4ICsyNzYsNyBAQAogICAgICAgICB1bmRlZm4gPSAobmFtZSwpCiAgICAgICAgIHNlbGYubWFjcm9zLmFwcGVuZCAodW5kZWZuKQogCi0KLSAgICBkZWYgYWRkX2luY2x1ZGVfZGlyIChzZWxmLCBkaXIpOgorICAgIGRlZiBhZGRfaW5jbHVkZV9kaXIoc2VsZiwgZGlyKToKICAgICAgICAgIiIiQWRkICdkaXInIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IKICAgICAgICAgaGVhZGVyIGZpbGVzLiAgVGhlIGNvbXBpbGVyIGlzIGluc3RydWN0ZWQgdG8gc2VhcmNoIGRpcmVjdG9yaWVzIGluCiAgICAgICAgIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBzdXBwbGllZCBieSBzdWNjZXNzaXZlIGNhbGxzIHRvCkBAIC0yNDcsNyArMjg0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzLmFwcGVuZCAoZGlyKQogCi0gICAgZGVmIHNldF9pbmNsdWRlX2RpcnMgKHNlbGYsIGRpcnMpOgorICAgIGRlZiBzZXRfaW5jbHVkZV9kaXJzKHNlbGYsIGRpcnMpOgogICAgICAgICAiIiJTZXQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlIHNlYXJjaGVkIHRvICdkaXJzJyAoYQogICAgICAgICBsaXN0IG9mIHN0cmluZ3MpLiAgT3ZlcnJpZGVzIGFueSBwcmVjZWRpbmcgY2FsbHMgdG8KICAgICAgICAgJ2FkZF9pbmNsdWRlX2RpcigpJzsgc3Vic2VxdWVuY2UgY2FsbHMgdG8gJ2FkZF9pbmNsdWRlX2RpcigpJyBhZGQKQEAgLTI1NSwxMCArMjkyLDkgQEAKICAgICAgICAgYW55IGxpc3Qgb2Ygc3RhbmRhcmQgaW5jbHVkZSBkaXJlY3RvcmllcyB0aGF0IHRoZSBjb21waWxlciBtYXkKICAgICAgICAgc2VhcmNoIGJ5IGRlZmF1bHQuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmluY2x1ZGVfZGlycyA9IGNvcHkgKGRpcnMpCisgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gZGlyc1s6XQogCi0KLSAgICBkZWYgYWRkX2xpYnJhcnkgKHNlbGYsIGxpYm5hbWUpOgorICAgIGRlZiBhZGRfbGlicmFyeShzZWxmLCBsaWJuYW1lKToKICAgICAgICAgIiIiQWRkICdsaWJuYW1lJyB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluCiAgICAgICAgIGFsbCBsaW5rcyBkcml2ZW4gYnkgdGhpcyBjb21waWxlciBvYmplY3QuICBOb3RlIHRoYXQgJ2xpYm5hbWUnCiAgICAgICAgIHNob3VsZCAqbm90KiBiZSB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIGxpYnJhcnksIGJ1dCB0aGUKQEAgLTI3NCw2MSArMzEwLDU5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmxpYnJhcmllcy5hcHBlbmQgKGxpYm5hbWUpCiAKLSAgICBkZWYgc2V0X2xpYnJhcmllcyAoc2VsZiwgbGlibmFtZXMpOgorICAgIGRlZiBzZXRfbGlicmFyaWVzKHNlbGYsIGxpYm5hbWVzKToKICAgICAgICAgIiIiU2V0IHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBiZSBpbmNsdWRlZCBpbiBhbGwgbGlua3MgZHJpdmVuIGJ5CiAgICAgICAgIHRoaXMgY29tcGlsZXIgb2JqZWN0IHRvICdsaWJuYW1lcycgKGEgbGlzdCBvZiBzdHJpbmdzKS4gIFRoaXMgZG9lcwogICAgICAgICBub3QgYWZmZWN0IGFueSBzdGFuZGFyZCBzeXN0ZW0gbGlicmFyaWVzIHRoYXQgdGhlIGxpbmtlciBtYXkKICAgICAgICAgaW5jbHVkZSBieSBkZWZhdWx0LgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5saWJyYXJpZXMgPSBjb3B5IChsaWJuYW1lcykKKyAgICAgICAgc2VsZi5saWJyYXJpZXMgPSBsaWJuYW1lc1s6XQogCiAKLSAgICBkZWYgYWRkX2xpYnJhcnlfZGlyIChzZWxmLCBkaXIpOgorICAgIGRlZiBhZGRfbGlicmFyeV9kaXIoc2VsZiwgZGlyKToKICAgICAgICAgIiIiQWRkICdkaXInIHRvIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IKICAgICAgICAgbGlicmFyaWVzIHNwZWNpZmllZCB0byAnYWRkX2xpYnJhcnkoKScgYW5kICdzZXRfbGlicmFyaWVzKCknLiAgVGhlCiAgICAgICAgIGxpbmtlciB3aWxsIGJlIGluc3RydWN0ZWQgdG8gc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gdGhlIG9yZGVyIHRoZXkKICAgICAgICAgYXJlIHN1cHBsaWVkIHRvICdhZGRfbGlicmFyeV9kaXIoKScgYW5kL29yICdzZXRfbGlicmFyeV9kaXJzKCknLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kIChkaXIpCisgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChkaXIpCiAKLSAgICBkZWYgc2V0X2xpYnJhcnlfZGlycyAoc2VsZiwgZGlycyk6CisgICAgZGVmIHNldF9saWJyYXJ5X2RpcnMoc2VsZiwgZGlycyk6CiAgICAgICAgICIiIlNldCB0aGUgbGlzdCBvZiBsaWJyYXJ5IHNlYXJjaCBkaXJlY3RvcmllcyB0byAnZGlycycgKGEgbGlzdCBvZgogICAgICAgICBzdHJpbmdzKS4gIFRoaXMgZG9lcyBub3QgYWZmZWN0IGFueSBzdGFuZGFyZCBsaWJyYXJ5IHNlYXJjaCBwYXRoCiAgICAgICAgIHRoYXQgdGhlIGxpbmtlciBtYXkgc2VhcmNoIGJ5IGRlZmF1bHQuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmxpYnJhcnlfZGlycyA9IGNvcHkgKGRpcnMpCisgICAgICAgIHNlbGYubGlicmFyeV9kaXJzID0gZGlyc1s6XQogCi0KLSAgICBkZWYgYWRkX3J1bnRpbWVfbGlicmFyeV9kaXIgKHNlbGYsIGRpcik6CisgICAgZGVmIGFkZF9ydW50aW1lX2xpYnJhcnlfZGlyKHNlbGYsIGRpcik6CiAgICAgICAgICIiIkFkZCAnZGlyJyB0byB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQgZm9yCiAgICAgICAgIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYucnVudGltZV9saWJyYXJ5X2RpcnMuYXBwZW5kIChkaXIpCisgICAgICAgIHNlbGYucnVudGltZV9saWJyYXJ5X2RpcnMuYXBwZW5kKGRpcikKIAotICAgIGRlZiBzZXRfcnVudGltZV9saWJyYXJ5X2RpcnMgKHNlbGYsIGRpcnMpOgorICAgIGRlZiBzZXRfcnVudGltZV9saWJyYXJ5X2RpcnMoc2VsZiwgZGlycyk6CiAgICAgICAgICIiIlNldCB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHNoYXJlZCBsaWJyYXJpZXMgYXQKICAgICAgICAgcnVudGltZSB0byAnZGlycycgKGEgbGlzdCBvZiBzdHJpbmdzKS4gIFRoaXMgZG9lcyBub3QgYWZmZWN0IGFueQogICAgICAgICBzdGFuZGFyZCBzZWFyY2ggcGF0aCB0aGF0IHRoZSBydW50aW1lIGxpbmtlciBtYXkgc2VhcmNoIGJ5CiAgICAgICAgIGRlZmF1bHQuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLnJ1bnRpbWVfbGlicmFyeV9kaXJzID0gY29weSAoZGlycykKKyAgICAgICAgc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlycyA9IGRpcnNbOl0KIAotCi0gICAgZGVmIGFkZF9saW5rX29iamVjdCAoc2VsZiwgb2JqZWN0KToKKyAgICBkZWYgYWRkX2xpbmtfb2JqZWN0KHNlbGYsIG9iamVjdCk6CiAgICAgICAgICIiIkFkZCAnb2JqZWN0JyB0byB0aGUgbGlzdCBvZiBvYmplY3QgZmlsZXMgKG9yIGFuYWxvZ3Vlcywgc3VjaCBhcwogICAgICAgICBleHBsaWNpdGx5IG5hbWVkIGxpYnJhcnkgZmlsZXMgb3IgdGhlIG91dHB1dCBvZiAicmVzb3VyY2UKICAgICAgICAgY29tcGlsZXJzIikgdG8gYmUgaW5jbHVkZWQgaW4gZXZlcnkgbGluayBkcml2ZW4gYnkgdGhpcyBjb21waWxlcgogICAgICAgICBvYmplY3QuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLm9iamVjdHMuYXBwZW5kIChvYmplY3QpCisgICAgICAgIHNlbGYub2JqZWN0cy5hcHBlbmQob2JqZWN0KQogCi0gICAgZGVmIHNldF9saW5rX29iamVjdHMgKHNlbGYsIG9iamVjdHMpOgorICAgIGRlZiBzZXRfbGlua19vYmplY3RzKHNlbGYsIG9iamVjdHMpOgogICAgICAgICAiIiJTZXQgdGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIChvciBhbmFsb2d1ZXMpIHRvIGJlIGluY2x1ZGVkIGluCiAgICAgICAgIGV2ZXJ5IGxpbmsgdG8gJ29iamVjdHMnLiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgYW55IHN0YW5kYXJkIG9iamVjdAogICAgICAgICBmaWxlcyB0aGF0IHRoZSBsaW5rZXIgbWF5IGluY2x1ZGUgYnkgZGVmYXVsdCAoc3VjaCBhcyBzeXN0ZW0KICAgICAgICAgbGlicmFyaWVzKS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYub2JqZWN0cyA9IGNvcHkgKG9iamVjdHMpCisgICAgICAgIHNlbGYub2JqZWN0cyA9IG9iamVjdHNbOl0KIAogCiAgICAgIyAtLSBQcml2YXRlIHV0aWxpdHkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQxLDE5ICszNzUsMTkgQEAKICAgICAgICAgIiIiUHJvY2VzcyBhcmd1bWVudHMgYW5kIGRlY2lkZSB3aGljaCBzb3VyY2UgZmlsZXMgdG8gY29tcGlsZS4iIiIKICAgICAgICAgaWYgb3V0ZGlyIGlzIE5vbmU6CiAgICAgICAgICAgICBvdXRkaXIgPSBzZWxmLm91dHB1dF9kaXIKLSAgICAgICAgZWxpZiB0eXBlKG91dGRpcikgaXMgbm90IFN0cmluZ1R5cGU6CisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3V0ZGlyLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiJ291dHB1dF9kaXInIG11c3QgYmUgYSBzdHJpbmcgb3IgTm9uZSIKIAogICAgICAgICBpZiBtYWNyb3MgaXMgTm9uZToKICAgICAgICAgICAgIG1hY3JvcyA9IHNlbGYubWFjcm9zCi0gICAgICAgIGVsaWYgdHlwZShtYWNyb3MpIGlzIExpc3RUeXBlOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFjcm9zLCBsaXN0KToKICAgICAgICAgICAgIG1hY3JvcyA9IG1hY3JvcyArIChzZWxmLm1hY3JvcyBvciBbXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIidtYWNyb3MnIChpZiBzdXBwbGllZCkgbXVzdCBiZSBhIGxpc3Qgb2YgdHVwbGVzIgogCiAgICAgICAgIGlmIGluY2RpcnMgaXMgTm9uZToKICAgICAgICAgICAgIGluY2RpcnMgPSBzZWxmLmluY2x1ZGVfZGlycwotICAgICAgICBlbGlmIHR5cGUoaW5jZGlycykgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoaW5jZGlycywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBpbmNkaXJzID0gbGlzdChpbmNkaXJzKSArIChzZWxmLmluY2x1ZGVfZGlycyBvciBbXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXApAQCAtMzg5LDcgKzQyMyw3IEBACiAgICAgICAgICAgICBjY19hcmdzWzowXSA9IGJlZm9yZQogICAgICAgICByZXR1cm4gY2NfYXJncwogCi0gICAgZGVmIF9maXhfY29tcGlsZV9hcmdzIChzZWxmLCBvdXRwdXRfZGlyLCBtYWNyb3MsIGluY2x1ZGVfZGlycyk6CisgICAgZGVmIF9maXhfY29tcGlsZV9hcmdzKHNlbGYsIG91dHB1dF9kaXIsIG1hY3JvcywgaW5jbHVkZV9kaXJzKToKICAgICAgICAgIiIiVHlwZWNoZWNrIGFuZCBmaXgtdXAgc29tZSBvZiB0aGUgYXJndW1lbnRzIHRvIHRoZSAnY29tcGlsZSgpJwogICAgICAgICBtZXRob2QsIGFuZCByZXR1cm4gZml4ZWQtdXAgdmFsdWVzLiAgU3BlY2lmaWNhbGx5OiBpZiAnb3V0cHV0X2RpcicKICAgICAgICAgaXMgTm9uZSwgcmVwbGFjZXMgaXQgd2l0aCAnc2VsZi5vdXRwdXRfZGlyJzsgZW5zdXJlcyB0aGF0ICdtYWNyb3MnCkBAIC00MDEsMTkgKzQzNSwxOSBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgb3V0cHV0X2RpciBpcyBOb25lOgogICAgICAgICAgICAgb3V0cHV0X2RpciA9IHNlbGYub3V0cHV0X2RpcgotICAgICAgICBlbGlmIHR5cGUgKG91dHB1dF9kaXIpIGlzIG5vdCBTdHJpbmdUeXBlOgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKG91dHB1dF9kaXIsIHN0cik6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsICInb3V0cHV0X2RpcicgbXVzdCBiZSBhIHN0cmluZyBvciBOb25lIgogCiAgICAgICAgIGlmIG1hY3JvcyBpcyBOb25lOgogICAgICAgICAgICAgbWFjcm9zID0gc2VsZi5tYWNyb3MKLSAgICAgICAgZWxpZiB0eXBlIChtYWNyb3MpIGlzIExpc3RUeXBlOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFjcm9zLCBsaXN0KToKICAgICAgICAgICAgIG1hY3JvcyA9IG1hY3JvcyArIChzZWxmLm1hY3JvcyBvciBbXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIidtYWNyb3MnIChpZiBzdXBwbGllZCkgbXVzdCBiZSBhIGxpc3Qgb2YgdHVwbGVzIgogCiAgICAgICAgIGlmIGluY2x1ZGVfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gc2VsZi5pbmNsdWRlX2RpcnMKLSAgICAgICAgZWxpZiB0eXBlIChpbmNsdWRlX2RpcnMpIGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGluY2x1ZGVfZGlycywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBsaXN0IChpbmNsdWRlX2RpcnMpICsgKHNlbGYuaW5jbHVkZV9kaXJzIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCkBAIC00MjEsNDQgKzQ1NSwyNSBAQAogCiAgICAgICAgIHJldHVybiBvdXRwdXRfZGlyLCBtYWNyb3MsIGluY2x1ZGVfZGlycwogCi0gICAgIyBfZml4X2NvbXBpbGVfYXJncyAoKQotCi0gICAgZGVmIF9wcmVwX2NvbXBpbGUoc2VsZiwgc291cmNlcywgb3V0cHV0X2RpciwgZGVwZW5kcz1Ob25lKToKLSAgICAgICAgIiIiRGVjaWRlIHdoaWNoIHNvdWNlIGZpbGVzIG11c3QgYmUgcmVjb21waWxlZC4KLQotICAgICAgICBEZXRlcm1pbmUgdGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gJ3NvdXJjZXMnLAotICAgICAgICBhbmQgZmlndXJlIG91dCB3aGljaCBvbmVzIHJlYWxseSBuZWVkIHRvIGJlIHJlY29tcGlsZWQuCi0gICAgICAgIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9iamVjdCBmaWxlcyBhbmQgYSBkaWN0aW9uYXJ5IHRlbGxpbmcKLSAgICAgICAgd2hpY2ggc291cmNlIGZpbGVzIGNhbiBiZSBza2lwcGVkLgotICAgICAgICAiIiIKLSAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2YgZXhwZWN0ZWQgb3V0cHV0IChvYmplY3QpIGZpbGVzCi0gICAgICAgIG9iamVjdHMgPSBzZWxmLm9iamVjdF9maWxlbmFtZXMoc291cmNlcywgb3V0cHV0X2Rpcj1vdXRwdXRfZGlyKQotICAgICAgICBhc3NlcnQgbGVuKG9iamVjdHMpID09IGxlbihzb3VyY2VzKQotCi0gICAgICAgICMgUmV0dXJuIGFuIGVtcHR5IGRpY3QgZm9yIHRoZSAid2hpY2ggc291cmNlIGZpbGVzIGNhbiBiZSBza2lwcGVkIgotICAgICAgICAjIHJldHVybiB2YWx1ZSB0byBwcmVzZXJ2ZSBBUEkgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgcmV0dXJuIG9iamVjdHMsIHt9Ci0KLSAgICBkZWYgX2ZpeF9vYmplY3RfYXJncyAoc2VsZiwgb2JqZWN0cywgb3V0cHV0X2Rpcik6CisgICAgZGVmIF9maXhfb2JqZWN0X2FyZ3Moc2VsZiwgb2JqZWN0cywgb3V0cHV0X2Rpcik6CiAgICAgICAgICIiIlR5cGVjaGVjayBhbmQgZml4IHVwIHNvbWUgYXJndW1lbnRzIHN1cHBsaWVkIHRvIHZhcmlvdXMgbWV0aG9kcy4KICAgICAgICAgU3BlY2lmaWNhbGx5OiBlbnN1cmUgdGhhdCAnb2JqZWN0cycgaXMgYSBsaXN0OyBpZiBvdXRwdXRfZGlyIGlzCiAgICAgICAgIE5vbmUsIHJlcGxhY2Ugd2l0aCBzZWxmLm91dHB1dF9kaXIuICBSZXR1cm4gZml4ZWQgdmVyc2lvbnMgb2YKICAgICAgICAgJ29iamVjdHMnIGFuZCAnb3V0cHV0X2RpcicuCiAgICAgICAgICIiIgotICAgICAgICBpZiB0eXBlIChvYmplY3RzKSBub3QgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmplY3RzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgIidvYmplY3RzJyBtdXN0IGJlIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIgogICAgICAgICBvYmplY3RzID0gbGlzdCAob2JqZWN0cykKIAogICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6CiAgICAgICAgICAgICBvdXRwdXRfZGlyID0gc2VsZi5vdXRwdXRfZGlyCi0gICAgICAgIGVsaWYgdHlwZSAob3V0cHV0X2RpcikgaXMgbm90IFN0cmluZ1R5cGU6CisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3V0cHV0X2Rpciwgc3RyKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIidvdXRwdXRfZGlyJyBtdXN0IGJlIGEgc3RyaW5nIG9yIE5vbmUiCiAKICAgICAgICAgcmV0dXJuIChvYmplY3RzLCBvdXRwdXRfZGlyKQogCi0KLSAgICBkZWYgX2ZpeF9saWJfYXJncyAoc2VsZiwgbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzKToKKyAgICBkZWYgX2ZpeF9saWJfYXJncyhzZWxmLCBsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMpOgogICAgICAgICAiIiJUeXBlY2hlY2sgYW5kIGZpeCB1cCBzb21lIG9mIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQgdG8gdGhlCiAgICAgICAgICdsaW5rXyonIG1ldGhvZHMuICBTcGVjaWZpY2FsbHk6IGVuc3VyZSB0aGF0IGFsbCBhcmd1bWVudHMgYXJlCiAgICAgICAgIGxpc3RzLCBhbmQgYXVnbWVudCB0aGVtIHdpdGggdGhlaXIgcGVybWFuZW50IHZlcnNpb25zCkBAIC00NjcsNyArNDgyLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGxpYnJhcmllcyBpcyBOb25lOgogICAgICAgICAgICAgbGlicmFyaWVzID0gc2VsZi5saWJyYXJpZXMKLSAgICAgICAgZWxpZiB0eXBlIChsaWJyYXJpZXMpIGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGxpYnJhcmllcywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBsaXN0IChsaWJyYXJpZXMpICsgKHNlbGYubGlicmFyaWVzIG9yIFtdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCBcCkBAIC00NzUsNyArNDkwLDcgQEAKIAogICAgICAgICBpZiBsaWJyYXJ5X2RpcnMgaXMgTm9uZToKICAgICAgICAgICAgIGxpYnJhcnlfZGlycyA9IHNlbGYubGlicmFyeV9kaXJzCi0gICAgICAgIGVsaWYgdHlwZSAobGlicmFyeV9kaXJzKSBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShsaWJyYXJ5X2RpcnMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgbGlicmFyeV9kaXJzID0gbGlzdCAobGlicmFyeV9kaXJzKSArIChzZWxmLmxpYnJhcnlfZGlycyBvciBbXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXApAQCAtNDgzLDcgKzQ5OCw3IEBACiAKICAgICAgICAgaWYgcnVudGltZV9saWJyYXJ5X2RpcnMgaXMgTm9uZToKICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzID0gc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlycwotICAgICAgICBlbGlmIHR5cGUgKHJ1bnRpbWVfbGlicmFyeV9kaXJzKSBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShydW50aW1lX2xpYnJhcnlfZGlycywgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycyA9IChsaXN0IChydW50aW1lX2xpYnJhcnlfZGlycykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYucnVudGltZV9saWJyYXJ5X2RpcnMgb3IgW10pKQogICAgICAgICBlbHNlOgpAQCAtNDkzLDEwICs1MDgsNyBAQAogCiAgICAgICAgIHJldHVybiAobGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzKQogCi0gICAgIyBfZml4X2xpYl9hcmdzICgpCi0KLQotICAgIGRlZiBfbmVlZF9saW5rIChzZWxmLCBvYmplY3RzLCBvdXRwdXRfZmlsZSk6CisgICAgZGVmIF9uZWVkX2xpbmsoc2VsZiwgb2JqZWN0cywgb3V0cHV0X2ZpbGUpOgogICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHJlbGluayB0aGUgZmlsZXMgbGlzdGVkIGluICdvYmplY3RzJwogICAgICAgICB0byByZWNyZWF0ZSAnb3V0cHV0X2ZpbGUnLgogICAgICAgICAiIiIKQEAgLTUwOSwxMyArNTIxLDExIEBACiAgICAgICAgICAgICAgICAgbmV3ZXIgPSBuZXdlcl9ncm91cCAob2JqZWN0cywgb3V0cHV0X2ZpbGUpCiAgICAgICAgICAgICByZXR1cm4gbmV3ZXIKIAotICAgICMgX25lZWRfbGluayAoKQotCi0gICAgZGVmIGRldGVjdF9sYW5ndWFnZSAoc2VsZiwgc291cmNlcyk6CisgICAgZGVmIGRldGVjdF9sYW5ndWFnZShzZWxmLCBzb3VyY2VzKToKICAgICAgICAgIiIiRGV0ZWN0IHRoZSBsYW5ndWFnZSBvZiBhIGdpdmVuIGZpbGUsIG9yIGxpc3Qgb2YgZmlsZXMuIFVzZXMKICAgICAgICAgbGFuZ3VhZ2VfbWFwLCBhbmQgbGFuZ3VhZ2Vfb3JkZXIgdG8gZG8gdGhlIGpvYi4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHR5cGUoc291cmNlcykgaXMgbm90IExpc3RUeXBlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2VzLCBsaXN0KToKICAgICAgICAgICAgIHNvdXJjZXMgPSBbc291cmNlc10KICAgICAgICAgbGFuZyA9IE5vbmUKICAgICAgICAgaW5kZXggPSBsZW4oc2VsZi5sYW5ndWFnZV9vcmRlcikKQEAgLTUzMSwxOCArNTQxLDExIEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gbGFuZwogCi0gICAgIyBkZXRlY3RfbGFuZ3VhZ2UgKCkKLQogICAgICMgLS0gV29ya2VyIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyAobXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzKQogCi0gICAgZGVmIHByZXByb2Nlc3MgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2ZpbGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbWFjcm9zPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUpOgorICAgIGRlZiBwcmVwcm9jZXNzKHNlbGYsIHNvdXJjZSwgb3V0cHV0X2ZpbGU9Tm9uZSwgbWFjcm9zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPU5vbmUsIGV4dHJhX3ByZWFyZ3M9Tm9uZSwgZXh0cmFfcG9zdGFyZ3M9Tm9uZSk6CiAgICAgICAgICIiIlByZXByb2Nlc3MgYSBzaW5nbGUgQy9DKysgc291cmNlIGZpbGUsIG5hbWVkIGluICdzb3VyY2UnLgogICAgICAgICBPdXRwdXQgd2lsbCBiZSB3cml0dGVuIHRvIGZpbGUgbmFtZWQgJ291dHB1dF9maWxlJywgb3Igc3Rkb3V0IGlmCiAgICAgICAgICdvdXRwdXRfZmlsZScgbm90IHN1cHBsaWVkLiAgJ21hY3JvcycgaXMgYSBsaXN0IG9mIG1hY3JvCkBAIC02MzAsMTIgKzYzMyw4IEBACiAgICAgICAgICMgc2hvdWxkIGltcGxlbWVudCBfY29tcGlsZSgpLgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgY3JlYXRlX3N0YXRpY19saWIgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xpYm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9Tm9uZSk6CisgICAgZGVmIGNyZWF0ZV9zdGF0aWNfbGliKHNlbGYsIG9iamVjdHMsIG91dHB1dF9saWJuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsIHRhcmdldF9sYW5nPU5vbmUpOgogICAgICAgICAiIiJMaW5rIGEgYnVuY2ggb2Ygc3R1ZmYgdG9nZXRoZXIgdG8gY3JlYXRlIGEgc3RhdGljIGxpYnJhcnkgZmlsZS4KICAgICAgICAgVGhlICJidW5jaCBvZiBzdHVmZiIgY29uc2lzdHMgb2YgdGhlIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIHN1cHBsaWVkCiAgICAgICAgIGFzICdvYmplY3RzJywgdGhlIGV4dHJhIG9iamVjdCBmaWxlcyBzdXBwbGllZCB0bwpAQCAtNjYwLDI2ICs2NTksMTUgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHBhc3MKIAotCiAgICAgIyB2YWx1ZXMgZm9yIHRhcmdldF9kZXNjIHBhcmFtZXRlciBpbiBsaW5rKCkKICAgICBTSEFSRURfT0JKRUNUID0gInNoYXJlZF9vYmplY3QiCiAgICAgU0hBUkVEX0xJQlJBUlkgPSAic2hhcmVkX2xpYnJhcnkiCiAgICAgRVhFQ1VUQUJMRSA9ICJleGVjdXRhYmxlIgogCi0gICAgZGVmIGxpbmsgKHNlbGYsCi0gICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLAotICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKLSAgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9Tm9uZSk6CisgICAgZGVmIGxpbmsoc2VsZiwgdGFyZ2V0X2Rlc2MsIG9iamVjdHMsIG91dHB1dF9maWxlbmFtZSwgb3V0cHV0X2Rpcj1Ob25lLAorICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLCBkZWJ1Zz0wLCBleHRyYV9wcmVhcmdzPU5vbmUsCisgICAgICAgICAgICAgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwgYnVpbGRfdGVtcD1Ob25lLCB0YXJnZXRfbGFuZz1Ob25lKToKICAgICAgICAgIiIiTGluayBhIGJ1bmNoIG9mIHN0dWZmIHRvZ2V0aGVyIHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIG9yCiAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCiAKQEAgLTcyOCwxOSArNzE2LDExIEBACiAKICAgICAjIE9sZCAnbGlua18qKCknIG1ldGhvZHMsIHJld3JpdHRlbiB0byB1c2UgdGhlIG5ldyAnbGluaygpJyBtZXRob2QuCiAKLSAgICBkZWYgbGlua19zaGFyZWRfbGliIChzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xpYm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKyAgICBkZWYgbGlua19zaGFyZWRfbGliKHNlbGYsIG9iamVjdHMsIG91dHB1dF9saWJuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLCBleHBvcnRfc3ltYm9scz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9MCwgZXh0cmFfcHJlYXJncz1Ob25lLCBleHRyYV9wb3N0YXJncz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRfdGVtcD1Ob25lLCB0YXJnZXRfbGFuZz1Ob25lKToKICAgICAgICAgc2VsZi5saW5rKENDb21waWxlci5TSEFSRURfTElCUkFSWSwgb2JqZWN0cywKICAgICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9maWxlbmFtZShvdXRwdXRfbGlibmFtZSwgbGliX3R5cGU9J3NoYXJlZCcpLAogICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpciwKQEAgLTc0OSwzNyArNzI5LDIxIEBACiAgICAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzLCBleHRyYV9wb3N0YXJncywgYnVpbGRfdGVtcCwgdGFyZ2V0X2xhbmcpCiAKIAotICAgIGRlZiBsaW5rX3NoYXJlZF9vYmplY3QgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKyAgICBkZWYgbGlua19zaGFyZWRfb2JqZWN0KHNlbGYsIG9iamVjdHMsIG91dHB1dF9maWxlbmFtZSwgb3V0cHV0X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPTAsIGV4dHJhX3ByZWFyZ3M9Tm9uZSwgZXh0cmFfcG9zdGFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwgdGFyZ2V0X2xhbmc9Tm9uZSk6CiAgICAgICAgIHNlbGYubGluayhDQ29tcGlsZXIuU0hBUkVEX09CSkVDVCwgb2JqZWN0cywKICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwgb3V0cHV0X2RpciwKICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycywKICAgICAgICAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzLCBkZWJ1ZywKICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsIGV4dHJhX3Bvc3RhcmdzLCBidWlsZF90ZW1wLCB0YXJnZXRfbGFuZykKIAotCi0gICAgZGVmIGxpbmtfZXhlY3V0YWJsZSAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wcm9nbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgorICAgIGRlZiBsaW5rX2V4ZWN1dGFibGUoc2VsZiwgb2JqZWN0cywgb3V0cHV0X3Byb2duYW1lLCBvdXRwdXRfZGlyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLCBkZWJ1Zz0wLCBleHRyYV9wcmVhcmdzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLCB0YXJnZXRfbGFuZz1Ob25lKToKICAgICAgICAgc2VsZi5saW5rKENDb21waWxlci5FWEVDVVRBQkxFLCBvYmplY3RzLAogICAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlX2ZpbGVuYW1lKG91dHB1dF9wcm9nbmFtZSksIG91dHB1dF9kaXIsCiAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMsIE5vbmUsCkBAIC03OTEsMjkgKzc1NSwyNiBAQAogICAgICMgbm8gYXBwcm9wcmlhdGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzbyBzdWJjbGFzc2VzIHNob3VsZAogICAgICMgaW1wbGVtZW50IGFsbCBvZiB0aGVzZS4KIAotICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24gKHNlbGYsIGRpcik6CisgICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YKICAgICAgICAgZGlyZWN0b3JpZXMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcy4KICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbiAoc2VsZiwgZGlyKToKKyAgICBkZWYgcnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjb21waWxlciBvcHRpb24gdG8gYWRkICdkaXInIHRvIHRoZSBsaXN0IG9mCiAgICAgICAgIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGZvciBydW50aW1lIGxpYnJhcmllcy4KICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBsaWJyYXJ5X29wdGlvbiAoc2VsZiwgbGliKToKKyAgICBkZWYgbGlicmFyeV9vcHRpb24oc2VsZiwgbGliKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjb21waWxlciBvcHRpb24gdG8gYWRkICdkaXInIHRvIHRoZSBsaXN0IG9mIGxpYnJhcmllcwogICAgICAgICBsaW5rZWQgaW50byB0aGUgc2hhcmVkIGxpYnJhcnkgb3IgZXhlY3V0YWJsZS4KICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBoYXNfZnVuY3Rpb24oc2VsZiwgZnVuY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lKToKKyAgICBkZWYgaGFzX2Z1bmN0aW9uKHNlbGYsIGZ1bmNuYW1lLCBpbmNsdWRlcz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGZ1bmNuYW1lIGlzIHN1cHBvcnRlZCBvbgogICAgICAgICB0aGUgY3VycmVudCBwbGF0Zm9ybS4gIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8KICAgICAgICAgYXVnbWVudCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQuCkBAIC04MzMsMTQgKzc5NCwxNiBAQAogICAgICAgICAgICAgbGlicmFyeV9kaXJzID0gW10KICAgICAgICAgZmQsIGZuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgiLmMiLCBmdW5jbmFtZSwgdGV4dD1UcnVlKQogICAgICAgICBmID0gb3MuZmRvcGVuKGZkLCAidyIpCi0gICAgICAgIGZvciBpbmNsIGluIGluY2x1ZGVzOgotICAgICAgICAgICAgZi53cml0ZSgiIiIjaW5jbHVkZSAiJXMiXG4iIiIgJSBpbmNsKQotICAgICAgICBmLndyaXRlKCIiIlwKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGluY2wgaW4gaW5jbHVkZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiIiIjaW5jbHVkZSAiJXMiXG4iIiIgJSBpbmNsKQorICAgICAgICAgICAgZi53cml0ZSgiIiJcCiBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKICAgICAlcygpOwogfQogIiIiICUgZnVuY25hbWUpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9iamVjdHMgPSBzZWxmLmNvbXBpbGUoW2ZuYW1lXSwgaW5jbHVkZV9kaXJzPWluY2x1ZGVfZGlycykKICAgICAgICAgZXhjZXB0IENvbXBpbGVFcnJvcjoKQEAgLTk0NCwyOCArOTA3LDI4IEBACiAKICAgICAjIC0tIFV0aWxpdHkgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGFubm91bmNlIChzZWxmLCBtc2csIGxldmVsPTEpOgorICAgIGRlZiBhbm5vdW5jZShzZWxmLCBtc2csIGxldmVsPTEpOgogICAgICAgICBsb2cuZGVidWcobXNnKQogCi0gICAgZGVmIGRlYnVnX3ByaW50IChzZWxmLCBtc2cpOgorICAgIGRlZiBkZWJ1Z19wcmludChzZWxmLCBtc2cpOgogICAgICAgICBmcm9tIGRpc3R1dGlscy5kZWJ1ZyBpbXBvcnQgREVCVUcKICAgICAgICAgaWYgREVCVUc6CiAgICAgICAgICAgICBwcmludCBtc2cKIAotICAgIGRlZiB3YXJuIChzZWxmLCBtc2cpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlICgid2FybmluZzogJXNcbiIgJSBtc2cpCisgICAgZGVmIHdhcm4oc2VsZiwgbXNnKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgid2FybmluZzogJXNcbiIgJSBtc2cpCiAKLSAgICBkZWYgZXhlY3V0ZSAoc2VsZiwgZnVuYywgYXJncywgbXNnPU5vbmUsIGxldmVsPTEpOgorICAgIGRlZiBleGVjdXRlKHNlbGYsIGZ1bmMsIGFyZ3MsIG1zZz1Ob25lLCBsZXZlbD0xKToKICAgICAgICAgZXhlY3V0ZShmdW5jLCBhcmdzLCBtc2csIHNlbGYuZHJ5X3J1bikKIAotICAgIGRlZiBzcGF3biAoc2VsZiwgY21kKToKLSAgICAgICAgc3Bhd24gKGNtZCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCisgICAgZGVmIHNwYXduKHNlbGYsIGNtZCk6CisgICAgICAgIHNwYXduKGNtZCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbW92ZV9maWxlIChzZWxmLCBzcmMsIGRzdCk6Ci0gICAgICAgIHJldHVybiBtb3ZlX2ZpbGUgKHNyYywgZHN0LCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKKyAgICBkZWYgbW92ZV9maWxlKHNlbGYsIHNyYywgZHN0KToKKyAgICAgICAgcmV0dXJuIG1vdmVfZmlsZShzcmMsIGRzdCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWtwYXRoIChzZWxmLCBuYW1lLCBtb2RlPTA3NzcpOgotICAgICAgICBta3BhdGggKG5hbWUsIG1vZGUsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgIGRlZiBta3BhdGgoc2VsZiwgbmFtZSwgbW9kZT0wNzc3KToKKyAgICAgICAgbWtwYXRoKG5hbWUsIG1vZGUsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCiAKICMgY2xhc3MgQ0NvbXBpbGVyCkBAIC05ODcsMTIgKzk1MCwxMCBAQAogICAgICMgT1MgbmFtZSBtYXBwaW5ncwogICAgICgncG9zaXgnLCAndW5peCcpLAogICAgICgnbnQnLCAnbXN2YycpLAotICAgICgnbWFjJywgJ213ZXJrcycpLAogCiAgICAgKQogCiBkZWYgZ2V0X2RlZmF1bHRfY29tcGlsZXIob3NuYW1lPU5vbmUsIHBsYXRmb3JtPU5vbmUpOgotCiAgICAgIiIiIERldGVybWluZSB0aGUgZGVmYXVsdCBjb21waWxlciB0byB1c2UgZm9yIHRoZSBnaXZlbiBwbGF0Zm9ybS4KIAogICAgICAgICBvc25hbWUgc2hvdWxkIGJlIG9uZSBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIE9TIG5hbWVzIChpLmUuIHRoZQpAQCAtMTAyNyw4ICs5ODgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5ndzMyIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIFdpbjMyIiksCiAgICAgICAgICAgICAgICAgICAgJ2JjcHAnOiAgICAoJ2JjcHBjb21waWxlcicsICdCQ1BQQ29tcGlsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb3JsYW5kIEMrKyBDb21waWxlciIpLAotICAgICAgICAgICAgICAgICAgICdtd2Vya3MnOiAgKCdtd2Vya3Njb21waWxlcicsICdNV2Vya3NDb21waWxlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ldHJvV2Vya3MgQ29kZVdhcnJpb3IiKSwKICAgICAgICAgICAgICAgICAgICAnZW14JzogICAgICgnZW14Y2NvbXBpbGVyJywgJ0VNWENDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVNWCBwb3J0IG9mIEdOVSBDIENvbXBpbGVyIGZvciBPUy8yIiksCiAgICAgICAgICAgICAgICAgIH0KQEAgLTEwNTAsMTEgKzEwMDksNyBAQAogICAgIHByZXR0eV9wcmludGVyLnByaW50X2hlbHAoIkxpc3Qgb2YgYXZhaWxhYmxlIGNvbXBpbGVyczoiKQogCiAKLWRlZiBuZXdfY29tcGlsZXIgKHBsYXQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIGNvbXBpbGVyPU5vbmUsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKK2RlZiBuZXdfY29tcGlsZXIocGxhdD1Ob25lLCBjb21waWxlcj1Ob25lLCB2ZXJib3NlPTAsIGRyeV9ydW49MCwgZm9yY2U9MCk6CiAgICAgIiIiR2VuZXJhdGUgYW4gaW5zdGFuY2Ugb2Ygc29tZSBDQ29tcGlsZXIgc3ViY2xhc3MgZm9yIHRoZSBzdXBwbGllZAogICAgIHBsYXRmb3JtL2NvbXBpbGVyIGNvbWJpbmF0aW9uLiAgJ3BsYXQnIGRlZmF1bHRzIHRvICdvcy5uYW1lJwogICAgIChlZy4gJ3Bvc2l4JywgJ250JyksIGFuZCAnY29tcGlsZXInIGRlZmF1bHRzIHRvIHRoZSBkZWZhdWx0IGNvbXBpbGVyCkBAIC0xMDk2LDEwICsxMDUxLDEwIEBACiAgICAgIyBYWFggVGhlIE5vbmUgaXMgbmVjZXNzYXJ5IHRvIHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgIyB3aXRoIGNsYXNzZXMgdGhhdCBleHBlY3QgdmVyYm9zZSB0byBiZSB0aGUgZmlyc3QgcG9zaXRpb25hbAogICAgICMgYXJndW1lbnQuCi0gICAgcmV0dXJuIGtsYXNzIChOb25lLCBkcnlfcnVuLCBmb3JjZSkKKyAgICByZXR1cm4ga2xhc3MoTm9uZSwgZHJ5X3J1biwgZm9yY2UpCiAKIAotZGVmIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMgKG1hY3JvcywgaW5jbHVkZV9kaXJzKToKK2RlZiBnZW5fcHJlcHJvY2Vzc19vcHRpb25zKG1hY3JvcywgaW5jbHVkZV9kaXJzKToKICAgICAiIiJHZW5lcmF0ZSBDIHByZS1wcm9jZXNzb3Igb3B0aW9ucyAoLUQsIC1VLCAtSSkgYXMgdXNlZCBieSBhdCBsZWFzdAogICAgIHR3byB0eXBlcyBvZiBjb21waWxlcnM6IHRoZSB0eXBpY2FsIFVuaXggY29tcGlsZXIgYW5kIFZpc3VhbCBDKysuCiAgICAgJ21hY3JvcycgaXMgdGhlIHVzdWFsIHRoaW5nLCBhIGxpc3Qgb2YgMS0gb3IgMi10dXBsZXMsIHdoZXJlIChuYW1lLCkKQEAgLTExMjQsNyArMTA3OSw3IEBACiAgICAgcHBfb3B0cyA9IFtdCiAgICAgZm9yIG1hY3JvIGluIG1hY3JvczoKIAotICAgICAgICBpZiBub3QgKHR5cGUgKG1hY3JvKSBpcyBUdXBsZVR5cGUgYW5kCisgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShtYWNybywgdHVwbGUpIGFuZAogICAgICAgICAgICAgICAgIDEgPD0gbGVuIChtYWNybykgPD0gMik6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICgiYmFkIG1hY3JvIGRlZmluaXRpb24gJyVzJzogIiArCkBAIC0xMTQ3LDI3ICsxMTAyLDI3IEBACiAKICAgICByZXR1cm4gcHBfb3B0cwogCi0jIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMgKCkKIAotCi1kZWYgZ2VuX2xpYl9vcHRpb25zIChjb21waWxlciwgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycywgbGlicmFyaWVzKToKK2RlZiBnZW5fbGliX29wdGlvbnMoY29tcGlsZXIsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMsIGxpYnJhcmllcyk6CiAgICAgIiIiR2VuZXJhdGUgbGlua2VyIG9wdGlvbnMgZm9yIHNlYXJjaGluZyBsaWJyYXJ5IGRpcmVjdG9yaWVzIGFuZAotICAgIGxpbmtpbmcgd2l0aCBzcGVjaWZpYyBsaWJyYXJpZXMuICAnbGlicmFyaWVzJyBhbmQgJ2xpYnJhcnlfZGlycycgYXJlLAotICAgIHJlc3BlY3RpdmVseSwgbGlzdHMgb2YgbGlicmFyeSBuYW1lcyAobm90IGZpbGVuYW1lcyEpIGFuZCBzZWFyY2gKLSAgICBkaXJlY3Rvcmllcy4gIFJldHVybnMgYSBsaXN0IG9mIGNvbW1hbmQtbGluZSBvcHRpb25zIHN1aXRhYmxlIGZvciB1c2UKLSAgICB3aXRoIHNvbWUgY29tcGlsZXIgKGRlcGVuZGluZyBvbiB0aGUgdHdvIGZvcm1hdCBzdHJpbmdzIHBhc3NlZCBpbikuCisgICAgbGlua2luZyB3aXRoIHNwZWNpZmljIGxpYnJhcmllcy4KKworICAgICdsaWJyYXJpZXMnIGFuZCAnbGlicmFyeV9kaXJzJyBhcmUsIHJlc3BlY3RpdmVseSwgbGlzdHMgb2YgbGlicmFyeSBuYW1lcworICAgIChub3QgZmlsZW5hbWVzISkgYW5kIHNlYXJjaCBkaXJlY3Rvcmllcy4gIFJldHVybnMgYSBsaXN0IG9mIGNvbW1hbmQtbGluZQorICAgIG9wdGlvbnMgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHNvbWUgY29tcGlsZXIgKGRlcGVuZGluZyBvbiB0aGUgdHdvIGZvcm1hdAorICAgIHN0cmluZ3MgcGFzc2VkIGluKS4KICAgICAiIiIKICAgICBsaWJfb3B0cyA9IFtdCiAKICAgICBmb3IgZGlyIGluIGxpYnJhcnlfZGlyczoKLSAgICAgICAgbGliX29wdHMuYXBwZW5kIChjb21waWxlci5saWJyYXJ5X2Rpcl9vcHRpb24gKGRpcikpCisgICAgICAgIGxpYl9vcHRzLmFwcGVuZChjb21waWxlci5saWJyYXJ5X2Rpcl9vcHRpb24oZGlyKSkKIAogICAgIGZvciBkaXIgaW4gcnVudGltZV9saWJyYXJ5X2RpcnM6Ci0gICAgICAgIG9wdCA9IGNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9uIChkaXIpCi0gICAgICAgIGlmIHR5cGUob3B0KSBpcyBMaXN0VHlwZToKLSAgICAgICAgICAgIGxpYl9vcHRzID0gbGliX29wdHMgKyBvcHQKKyAgICAgICAgb3B0ID0gY29tcGlsZXIucnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb24oZGlyKQorICAgICAgICBpZiBpc2luc3RhbmNlKG9wdCwgbGlzdCk6CisgICAgICAgICAgICBsaWJfb3B0cy5leHRlbmQob3B0KQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGliX29wdHMuYXBwZW5kIChvcHQpCisgICAgICAgICAgICBsaWJfb3B0cy5hcHBlbmQob3B0KQogCiAgICAgIyBYWFggaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSAqbm90KiByZW1vdmUgcmVkdW5kYW50IGxpYnJhcnkgbWVudGlvbnMhCiAgICAgIyBzb21ldGltZXMgeW91IHJlYWxseSBkbyBoYXZlIHRvIHNheSAiLWxmb28gLWxiYXIgLWxmb28iIGluIG9yZGVyIHRvCkBAIC0xMTc2LDE3ICsxMTMxLDE1IEBACiAgICAgIyBwcmV0dHkgbmFzdHkgd2F5IHRvIGFycmFuZ2UgeW91ciBDIGNvZGUuCiAKICAgICBmb3IgbGliIGluIGxpYnJhcmllczoKLSAgICAgICAgKGxpYl9kaXIsIGxpYl9uYW1lKSA9IG9zLnBhdGguc3BsaXQgKGxpYikKLSAgICAgICAgaWYgbGliX2RpcjoKLSAgICAgICAgICAgIGxpYl9maWxlID0gY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUgKFtsaWJfZGlyXSwgbGliX25hbWUpCi0gICAgICAgICAgICBpZiBsaWJfZmlsZToKLSAgICAgICAgICAgICAgICBsaWJfb3B0cy5hcHBlbmQgKGxpYl9maWxlKQorICAgICAgICBsaWJfZGlyLCBsaWJfbmFtZSA9IG9zLnBhdGguc3BsaXQobGliKQorICAgICAgICBpZiBsaWJfZGlyICE9ICcnOgorICAgICAgICAgICAgbGliX2ZpbGUgPSBjb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShbbGliX2Rpcl0sIGxpYl9uYW1lKQorICAgICAgICAgICAgaWYgbGliX2ZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGliX29wdHMuYXBwZW5kKGxpYl9maWxlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb21waWxlci53YXJuICgibm8gbGlicmFyeSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGZvdW5kIChza2lwcGluZykiICUgbGliKQorICAgICAgICAgICAgICAgIGNvbXBpbGVyLndhcm4oIm5vIGxpYnJhcnkgZmlsZSBjb3JyZXNwb25kaW5nIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGZvdW5kIChza2lwcGluZykiICUgbGliKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGliX29wdHMuYXBwZW5kIChjb21waWxlci5saWJyYXJ5X29wdGlvbiAobGliKSkKKyAgICAgICAgICAgIGxpYl9vcHRzLmFwcGVuZChjb21waWxlci5saWJyYXJ5X29wdGlvbihsaWIpKQogCiAgICAgcmV0dXJuIGxpYl9vcHRzCi0KLSMgZ2VuX2xpYl9vcHRpb25zICgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NtZC5weSBiL0xpYi9kaXN0dXRpbHMvY21kLnB5CmluZGV4IDNjZDU4NTguLmRjNDBjMTQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY21kLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY21kLnB5CkBAIC00LDEzICs0LDEwIEBACiBpbiB0aGUgZGlzdHV0aWxzLmNvbW1hbmQgcGFja2FnZS4KICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHN0cmluZywgcmUKLWZyb20gdHlwZXMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgoraW1wb3J0IHN5cywgb3MsIHJlCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgdXRpbCwgZGlyX3V0aWwsIGZpbGVfdXRpbCwgYXJjaGl2ZV91dGlsLCBkZXBfdXRpbAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCkBAIC00OSw3ICs0Niw3IEBACiAKICAgICAjIC0tIENyZWF0aW9uL2luaXRpYWxpemF0aW9uIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCBkaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlzdCk6CiAgICAgICAgICIiIkNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBDb21tYW5kIG9iamVjdC4gIE1vc3QgaW1wb3J0YW50bHksCiAgICAgICAgIGludm9rZXMgdGhlICdpbml0aWFsaXplX29wdGlvbnMoKScgbWV0aG9kLCB3aGljaCBpcyB0aGUgcmVhbAogICAgICAgICBpbml0aWFsaXplciBhbmQgZGVwZW5kcyBvbiB0aGUgYWN0dWFsIGNvbW1hbmQgYmVpbmcKQEAgLTk2LDEyICs5Myw4IEBACiAgICAgICAgICMgYWx3YXlzIGNhbGxzICdmaW5hbGl6ZV9vcHRpb25zKCknLCB0byByZXNwZWN0L3VwZGF0ZSBpdC4KICAgICAgICAgc2VsZi5maW5hbGl6ZWQgPSAwCiAKLSAgICAjIF9faW5pdF9fICgpCi0KLQogICAgICMgWFhYIEEgbW9yZSBleHBsaWNpdCB3YXkgdG8gY3VzdG9taXplIGRyeV9ydW4gd291bGQgYmUgYmV0dGVyLgotCi0gICAgZGVmIF9fZ2V0YXR0cl9fIChzZWxmLCBhdHRyKToKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgIGlmIGF0dHIgPT0gJ2RyeV9ydW4nOgogICAgICAgICAgICAgbXl2YWwgPSBnZXRhdHRyKHNlbGYsICJfIiArIGF0dHIpCiAgICAgICAgICAgICBpZiBteXZhbCBpcyBOb25lOgpAQCAtMTExLDEzICsxMDQsMTEgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBhdHRyCiAKLQotICAgIGRlZiBlbnN1cmVfZmluYWxpemVkIChzZWxmKToKKyAgICBkZWYgZW5zdXJlX2ZpbmFsaXplZChzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuZmluYWxpemVkOgogICAgICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKICAgICAgICAgc2VsZi5maW5hbGl6ZWQgPSAxCiAKLQogICAgICMgU3ViY2xhc3NlcyBtdXN0IGRlZmluZToKICAgICAjICAgaW5pdGlhbGl6ZV9vcHRpb25zKCkKICAgICAjICAgICBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgb3B0aW9uczsgbWF5IGJlIGN1c3RvbWl6ZWQgYnkKQEAgLTEzMSw3ICsxMjIsNyBAQAogICAgICMgICAgIHJ1biB0aGUgY29tbWFuZDogZG8gd2hhdGV2ZXIgaXQgaXMgd2UncmUgaGVyZSB0byBkbywKICAgICAjICAgICBjb250cm9sbGVkIGJ5IHRoZSBjb21tYW5kJ3MgdmFyaW91cyBvcHRpb24gdmFsdWVzCiAKLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAiIiJTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgb3B0aW9ucyB0aGF0IHRoaXMgY29tbWFuZAogICAgICAgICBzdXBwb3J0cy4gIE5vdGUgdGhhdCB0aGVzZSBkZWZhdWx0cyBtYXkgYmUgb3ZlcnJpZGRlbiBieSBvdGhlcgogICAgICAgICBjb21tYW5kcywgYnkgdGhlIHNldHVwIHNjcmlwdCwgYnkgY29uZmlnIGZpbGVzLCBvciBieSB0aGUKQEAgLTE0NCw3ICsxMzUsNyBAQAogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsIFwKICAgICAgICAgICAgICAgImFic3RyYWN0IG1ldGhvZCAtLSBzdWJjbGFzcyAlcyBtdXN0IG92ZXJyaWRlIiAlIHNlbGYuX19jbGFzc19fCiAKLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICIiIlNldCBmaW5hbCB2YWx1ZXMgZm9yIGFsbCB0aGUgb3B0aW9ucyB0aGF0IHRoaXMgY29tbWFuZCBzdXBwb3J0cy4KICAgICAgICAgVGhpcyBpcyBhbHdheXMgY2FsbGVkIGFzIGxhdGUgYXMgcG9zc2libGUsIGllLiAgYWZ0ZXIgYW55IG9wdGlvbgogICAgICAgICBhc3NpZ25tZW50cyBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgZnJvbSBvdGhlciBjb21tYW5kcyBoYXZlIGJlZW4KQEAgLTE1OSwyMSArMTUwLDIxIEBACiAgICAgICAgICAgICAgICJhYnN0cmFjdCBtZXRob2QgLS0gc3ViY2xhc3MgJXMgbXVzdCBvdmVycmlkZSIgJSBzZWxmLl9fY2xhc3NfXwogCiAKLSAgICBkZWYgZHVtcF9vcHRpb25zIChzZWxmLCBoZWFkZXI9Tm9uZSwgaW5kZW50PSIiKToKKyAgICBkZWYgZHVtcF9vcHRpb25zKHNlbGYsIGhlYWRlcj1Ob25lLCBpbmRlbnQ9IiIpOgogICAgICAgICBmcm9tIGRpc3R1dGlscy5mYW5jeV9nZXRvcHQgaW1wb3J0IGxvbmdvcHRfeGxhdGUKICAgICAgICAgaWYgaGVhZGVyIGlzIE5vbmU6CiAgICAgICAgICAgICBoZWFkZXIgPSAiY29tbWFuZCBvcHRpb25zIGZvciAnJXMnOiIgJSBzZWxmLmdldF9jb21tYW5kX25hbWUoKQotICAgICAgICBwcmludCBpbmRlbnQgKyBoZWFkZXIKKyAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKyBoZWFkZXIsIGxldmVsPWxvZy5JTkZPKQogICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyAiICAiCiAgICAgICAgIGZvciAob3B0aW9uLCBfLCBfKSBpbiBzZWxmLnVzZXJfb3B0aW9uczoKLSAgICAgICAgICAgIG9wdGlvbiA9IHN0cmluZy50cmFuc2xhdGUob3B0aW9uLCBsb25nb3B0X3hsYXRlKQorICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uLnRyYW5zbGF0ZShsb25nb3B0X3hsYXRlKQogICAgICAgICAgICAgaWYgb3B0aW9uWy0xXSA9PSAiPSI6CiAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uWzotMV0KICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihzZWxmLCBvcHRpb24pCi0gICAgICAgICAgICBwcmludCBpbmRlbnQgKyAiJXMgPSAlcyIgJSAob3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoaW5kZW50ICsgIiVzID0gJXMiICUgKG9wdGlvbiwgdmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD1sb2cuSU5GTykKIAotCi0gICAgZGVmIHJ1biAoc2VsZik6CisgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgIiIiQSBjb21tYW5kJ3MgcmFpc29uIGQnZXRyZTogY2Fycnkgb3V0IHRoZSBhY3Rpb24gaXQgZXhpc3RzIHRvCiAgICAgICAgIHBlcmZvcm0sIGNvbnRyb2xsZWQgYnkgdGhlIG9wdGlvbnMgaW5pdGlhbGl6ZWQgaW4KICAgICAgICAgJ2luaXRpYWxpemVfb3B0aW9ucygpJywgY3VzdG9taXplZCBieSBvdGhlciBjb21tYW5kcywgdGhlIHNldHVwCkBAIC0xODMsMTcgKzE3NCwxNiBAQAogCiAgICAgICAgIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYWxsIGNvbW1hbmQgY2xhc3Nlcy4KICAgICAgICAgIiIiCi0KICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCBcCiAgICAgICAgICAgICAgICJhYnN0cmFjdCBtZXRob2QgLS0gc3ViY2xhc3MgJXMgbXVzdCBvdmVycmlkZSIgJSBzZWxmLl9fY2xhc3NfXwogCi0gICAgZGVmIGFubm91bmNlIChzZWxmLCBtc2csIGxldmVsPTEpOgorICAgIGRlZiBhbm5vdW5jZShzZWxmLCBtc2csIGxldmVsPTEpOgogICAgICAgICAiIiJJZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgbGV2ZWwgaXMgb2YgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvCiAgICAgICAgICdsZXZlbCcgcHJpbnQgJ21zZycgdG8gc3Rkb3V0LgogICAgICAgICAiIiIKICAgICAgICAgbG9nLmxvZyhsZXZlbCwgbXNnKQogCi0gICAgZGVmIGRlYnVnX3ByaW50IChzZWxmLCBtc2cpOgorICAgIGRlZiBkZWJ1Z19wcmludChzZWxmLCBtc2cpOgogICAgICAgICAiIiJQcmludCAnbXNnJyB0byBzdGRvdXQgaWYgdGhlIGdsb2JhbCBERUJVRyAodGFrZW4gZnJvbSB0aGUKICAgICAgICAgRElTVFVUSUxTX0RFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlKSBmbGFnIGlzIHRydWUuCiAgICAgICAgICIiIgpAQCAtMjAzLDcgKzE5Myw2IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogCi0KICAgICAjIC0tIE9wdGlvbiB2YWxpZGF0aW9uIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgKHRoZXNlIGFyZSB2ZXJ5IGhhbmR5IGluIHdyaXRpbmcgdGhlICdmaW5hbGl6ZV9vcHRpb25zKCknIG1ldGhvZCkKICAgICAjCkBAIC0yMTcsMjMgKzIwNiwyMyBAQAogICAgICMgYW5kIHRoZXkgY2FuIGJlIGd1YXJhbnRlZWQgdGhhdCB0aGVyZWFmdGVyLCBzZWxmLmZvbyB3aWxsIGJlCiAgICAgIyBhIGxpc3Qgb2Ygc3RyaW5ncy4KIAotICAgIGRlZiBfZW5zdXJlX3N0cmluZ2xpa2UgKHNlbGYsIG9wdGlvbiwgd2hhdCwgZGVmYXVsdD1Ob25lKToKKyAgICBkZWYgX2Vuc3VyZV9zdHJpbmdsaWtlKHNlbGYsIG9wdGlvbiwgd2hhdCwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgdmFsID0gZ2V0YXR0cihzZWxmLCBvcHRpb24pCiAgICAgICAgIGlmIHZhbCBpcyBOb25lOgogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBvcHRpb24sIGRlZmF1bHQpCiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbGlmIHR5cGUodmFsKSBpcyBub3QgU3RyaW5nVHlwZToKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWwsIHN0cik6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvciwgXAogICAgICAgICAgICAgICAgICAgIiclcycgbXVzdCBiZSBhICVzIChnb3QgYCVzYCkiICUgKG9wdGlvbiwgd2hhdCwgdmFsKQogICAgICAgICByZXR1cm4gdmFsCiAKLSAgICBkZWYgZW5zdXJlX3N0cmluZyAoc2VsZiwgb3B0aW9uLCBkZWZhdWx0PU5vbmUpOgorICAgIGRlZiBlbnN1cmVfc3RyaW5nKHNlbGYsIG9wdGlvbiwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgIiIiRW5zdXJlIHRoYXQgJ29wdGlvbicgaXMgYSBzdHJpbmc7IGlmIG5vdCBkZWZpbmVkLCBzZXQgaXQgdG8KICAgICAgICAgJ2RlZmF1bHQnLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZW5zdXJlX3N0cmluZ2xpa2Uob3B0aW9uLCAic3RyaW5nIiwgZGVmYXVsdCkKIAotICAgIGRlZiBlbnN1cmVfc3RyaW5nX2xpc3QgKHNlbGYsIG9wdGlvbik6CisgICAgZGVmIGVuc3VyZV9zdHJpbmdfbGlzdChzZWxmLCBvcHRpb24pOgogICAgICAgICAiIiJFbnN1cmUgdGhhdCAnb3B0aW9uJyBpcyBhIGxpc3Qgb2Ygc3RyaW5ncy4gIElmICdvcHRpb24nIGlzCiAgICAgICAgIGN1cnJlbnRseSBhIHN0cmluZywgd2Ugc3BsaXQgaXQgZWl0aGVyIG9uIC8sXHMqLyBvciAvXHMrLywgc28KICAgICAgICAgImZvbyBiYXIgYmF6IiwgImZvbyxiYXIsYmF6IiwgYW5kICJmb28sICAgYmFyIGJheiIgYWxsIGJlY29tZQpAQCAtMjQyLDM0ICsyMzEsMzkgQEAKICAgICAgICAgdmFsID0gZ2V0YXR0cihzZWxmLCBvcHRpb24pCiAgICAgICAgIGlmIHZhbCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgdHlwZSh2YWwpIGlzIFN0cmluZ1R5cGU6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWwsIHN0cik6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG9wdGlvbiwgcmUuc3BsaXQocicsXHMqfFxzKycsIHZhbCkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiB0eXBlKHZhbCkgaXMgTGlzdFR5cGU6Ci0gICAgICAgICAgICAgICAgdHlwZXMgPSBtYXAodHlwZSwgdmFsKQotICAgICAgICAgICAgICAgIG9rID0gKHR5cGVzID09IFtTdHJpbmdUeXBlXSAqIGxlbih2YWwpKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGxpc3QpOgorICAgICAgICAgICAgICAgICMgY2hlY2tzIGlmIGFsbCBlbGVtZW50cyBhcmUgc3RyCisgICAgICAgICAgICAgICAgb2sgPSAxCisgICAgICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdmFsOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtZW50LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBvayA9IDAKIAogICAgICAgICAgICAgaWYgbm90IG9rOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgIiclcycgbXVzdCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncyAoZ290ICVyKSIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgdmFsKQorICAgICAgICAgICAgICAgICAgICAiJyVzJyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzIChnb3QgJXIpIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24sIHZhbCkKIAotICAgIGRlZiBfZW5zdXJlX3Rlc3RlZF9zdHJpbmcgKHNlbGYsIG9wdGlvbiwgdGVzdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQsIGVycm9yX2ZtdCwgZGVmYXVsdD1Ob25lKToKKworICAgIGRlZiBfZW5zdXJlX3Rlc3RlZF9zdHJpbmcoc2VsZiwgb3B0aW9uLCB0ZXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0LCBlcnJvcl9mbXQsIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHZhbCA9IHNlbGYuX2Vuc3VyZV9zdHJpbmdsaWtlKG9wdGlvbiwgd2hhdCwgZGVmYXVsdCkKICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lIGFuZCBub3QgdGVzdGVyKHZhbCk6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvciwgXAogICAgICAgICAgICAgICAgICAgKCJlcnJvciBpbiAnJXMnIG9wdGlvbjogIiArIGVycm9yX2ZtdCkgJSAob3B0aW9uLCB2YWwpCiAKLSAgICBkZWYgZW5zdXJlX2ZpbGVuYW1lIChzZWxmLCBvcHRpb24pOgorICAgIGRlZiBlbnN1cmVfZmlsZW5hbWUoc2VsZiwgb3B0aW9uKToKICAgICAgICAgIiIiRW5zdXJlIHRoYXQgJ29wdGlvbicgaXMgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmlsZS4iIiIKICAgICAgICAgc2VsZi5fZW5zdXJlX3Rlc3RlZF9zdHJpbmcob3B0aW9uLCBvcy5wYXRoLmlzZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZmlsZSIpCiAKLSAgICBkZWYgZW5zdXJlX2Rpcm5hbWUgKHNlbGYsIG9wdGlvbik6CisgICAgZGVmIGVuc3VyZV9kaXJuYW1lKHNlbGYsIG9wdGlvbik6CiAgICAgICAgIHNlbGYuX2Vuc3VyZV90ZXN0ZWRfc3RyaW5nKG9wdGlvbiwgb3MucGF0aC5pc2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSBuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5IikKQEAgLTI3NywxNCArMjcxLDEzIEBACiAKICAgICAjIC0tIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGdldF9jb21tYW5kX25hbWUgKHNlbGYpOgorICAgIGRlZiBnZXRfY29tbWFuZF9uYW1lKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjb21tYW5kX25hbWUnKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbW1hbmRfbmFtZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAKLQotICAgIGRlZiBzZXRfdW5kZWZpbmVkX29wdGlvbnMgKHNlbGYsIHNyY19jbWQsICpvcHRpb25fcGFpcnMpOgorICAgIGRlZiBzZXRfdW5kZWZpbmVkX29wdGlvbnMoc2VsZiwgc3JjX2NtZCwgKm9wdGlvbl9wYWlycyk6CiAgICAgICAgICIiIlNldCB0aGUgdmFsdWVzIG9mIGFueSAidW5kZWZpbmVkIiBvcHRpb25zIGZyb20gY29ycmVzcG9uZGluZwogICAgICAgICBvcHRpb24gdmFsdWVzIGluIHNvbWUgb3RoZXIgY29tbWFuZCBvYmplY3QuICAiVW5kZWZpbmVkIiBoZXJlIG1lYW5zCiAgICAgICAgICJpcyBOb25lIiwgd2hpY2ggaXMgdGhlIGNvbnZlbnRpb24gdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIG9wdGlvbgpAQCAtMzA5LDcgKzMwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHNyY19jbWRfb2JqLCBzcmNfb3B0aW9uKSkKIAogCi0gICAgZGVmIGdldF9maW5hbGl6ZWRfY29tbWFuZCAoc2VsZiwgY29tbWFuZCwgY3JlYXRlPTEpOgorICAgIGRlZiBnZXRfZmluYWxpemVkX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgY3JlYXRlPTEpOgogICAgICAgICAiIiJXcmFwcGVyIGFyb3VuZCBEaXN0cmlidXRpb24ncyAnZ2V0X2NvbW1hbmRfb2JqKCknIG1ldGhvZDogZmluZAogICAgICAgICAoY3JlYXRlIGlmIG5lY2Vzc2FyeSBhbmQgJ2NyZWF0ZScgaXMgdHJ1ZSkgdGhlIGNvbW1hbmQgb2JqZWN0IGZvcgogICAgICAgICAnY29tbWFuZCcsIGNhbGwgaXRzICdlbnN1cmVfZmluYWxpemVkKCknIG1ldGhvZCwgYW5kIHJldHVybiB0aGUKQEAgLTMyMSwxOSArMzE0LDE4IEBACiAKICAgICAjIFhYWCByZW5hbWUgdG8gJ2dldF9yZWluaXRpYWxpemVkX2NvbW1hbmQoKSc/IChzaG91bGQgZG8gdGhlCiAgICAgIyBzYW1lIGluIGRpc3QucHksIGlmIHNvKQotICAgIGRlZiByZWluaXRpYWxpemVfY29tbWFuZCAoc2VsZiwgY29tbWFuZCwgcmVpbml0X3N1YmNvbW1hbmRzPTApOgorICAgIGRlZiByZWluaXRpYWxpemVfY29tbWFuZChzZWxmLCBjb21tYW5kLCByZWluaXRfc3ViY29tbWFuZHM9MCk6CiAgICAgICAgIHJldHVybiBzZWxmLmRpc3RyaWJ1dGlvbi5yZWluaXRpYWxpemVfY29tbWFuZCgKICAgICAgICAgICAgIGNvbW1hbmQsIHJlaW5pdF9zdWJjb21tYW5kcykKIAotICAgIGRlZiBydW5fY29tbWFuZCAoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIHJ1bl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICAiIiJSdW4gc29tZSBvdGhlciBjb21tYW5kOiB1c2VzIHRoZSAncnVuX2NvbW1hbmQoKScgbWV0aG9kIG9mCiAgICAgICAgIERpc3RyaWJ1dGlvbiwgd2hpY2ggY3JlYXRlcyBhbmQgZmluYWxpemVzIHRoZSBjb21tYW5kIG9iamVjdCBpZgogICAgICAgICBuZWNlc3NhcnkgYW5kIHRoZW4gaW52b2tlcyBpdHMgJ3J1bigpJyBtZXRob2QuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5ydW5fY29tbWFuZChjb21tYW5kKQogCi0KLSAgICBkZWYgZ2V0X3N1Yl9jb21tYW5kcyAoc2VsZik6CisgICAgZGVmIGdldF9zdWJfY29tbWFuZHMoc2VsZik6CiAgICAgICAgICIiIkRldGVybWluZSB0aGUgc3ViLWNvbW1hbmRzIHRoYXQgYXJlIHJlbGV2YW50IGluIHRoZSBjdXJyZW50CiAgICAgICAgIGRpc3RyaWJ1dGlvbiAoaWUuLCB0aGF0IG5lZWQgdG8gYmUgcnVuKS4gIFRoaXMgaXMgYmFzZWQgb24gdGhlCiAgICAgICAgICdzdWJfY29tbWFuZHMnIGNsYXNzIGF0dHJpYnV0ZTogZWFjaCB0dXBsZSBpbiB0aGF0IGxpc3QgbWF5IGluY2x1ZGUKQEAgLTM0OSwyMCArMzQxLDE3IEBACiAKICAgICAjIC0tIEV4dGVybmFsIHdvcmxkIG1hbmlwdWxhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIHdhcm4gKHNlbGYsIG1zZyk6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIndhcm5pbmc6ICVzOiAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2V0X2NvbW1hbmRfbmFtZSgpLCBtc2cpKQorICAgIGRlZiB3YXJuKHNlbGYsIG1zZyk6CisgICAgICAgIGxvZy53YXJuKCJ3YXJuaW5nOiAlczogJXNcbiIgJQorICAgICAgICAgICAgICAgIChzZWxmLmdldF9jb21tYW5kX25hbWUoKSwgbXNnKSkKIAotCi0gICAgZGVmIGV4ZWN1dGUgKHNlbGYsIGZ1bmMsIGFyZ3MsIG1zZz1Ob25lLCBsZXZlbD0xKToKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBmdW5jLCBhcmdzLCBtc2c9Tm9uZSwgbGV2ZWw9MSk6CiAgICAgICAgIHV0aWwuZXhlY3V0ZShmdW5jLCBhcmdzLCBtc2csIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCi0KLSAgICBkZWYgbWtwYXRoIChzZWxmLCBuYW1lLCBtb2RlPTA3NzcpOgorICAgIGRlZiBta3BhdGgoc2VsZiwgbmFtZSwgbW9kZT0wNzc3KToKICAgICAgICAgZGlyX3V0aWwubWtwYXRoKG5hbWUsIG1vZGUsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCi0KLSAgICBkZWYgY29weV9maWxlIChzZWxmLCBpbmZpbGUsIG91dGZpbGUsCisgICAgZGVmIGNvcHlfZmlsZShzZWxmLCBpbmZpbGUsIG91dGZpbGUsCiAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfbW9kZT0xLCBwcmVzZXJ2ZV90aW1lcz0xLCBsaW5rPU5vbmUsIGxldmVsPTEpOgogICAgICAgICAiIiJDb3B5IGEgZmlsZSByZXNwZWN0aW5nIHZlcmJvc2UsIGRyeS1ydW4gYW5kIGZvcmNlIGZsYWdzLiAgKFRoZQogICAgICAgICBmb3JtZXIgdHdvIGRlZmF1bHQgdG8gd2hhdGV2ZXIgaXMgaW4gdGhlIERpc3RyaWJ1dGlvbiBvYmplY3QsIGFuZApAQCAtMzc1LDggKzM2NCw3IEBACiAgICAgICAgICAgICBsaW5rLAogICAgICAgICAgICAgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLQotICAgIGRlZiBjb3B5X3RyZWUgKHNlbGYsIGluZmlsZSwgb3V0ZmlsZSwKKyAgICBkZWYgY29weV90cmVlKHNlbGYsIGluZmlsZSwgb3V0ZmlsZSwKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9tb2RlPTEsIHByZXNlcnZlX3RpbWVzPTEsIHByZXNlcnZlX3N5bWxpbmtzPTAsCiAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSk6CiAgICAgICAgICIiIkNvcHkgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlIHJlc3BlY3RpbmcgdmVyYm9zZSwgZHJ5LXJ1biwKQEAgLTM5NywxNCArMzg1LDE0IEBACiAgICAgICAgIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgogICAgICAgICBzcGF3bihjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPSBzZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWFrZV9hcmNoaXZlIChzZWxmLCBiYXNlX25hbWUsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lKToKLSAgICAgICAgcmV0dXJuIGFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmUoCi0gICAgICAgICAgICBiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXIsIGJhc2VfZGlyLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKKyAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CisgICAgICAgIHJldHVybiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9kaXIsIGRyeV9ydW49c2VsZi5kcnlfcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCiAKLQotICAgIGRlZiBtYWtlX2ZpbGUgKHNlbGYsIGluZmlsZXMsIG91dGZpbGUsIGZ1bmMsIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CisgICAgZGVmIG1ha2VfZmlsZShzZWxmLCBpbmZpbGVzLCBvdXRmaWxlLCBmdW5jLCBhcmdzLAorICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CiAgICAgICAgICIiIlNwZWNpYWwgY2FzZSBvZiAnZXhlY3V0ZSgpJyBmb3Igb3BlcmF0aW9ucyB0aGF0IHByb2Nlc3Mgb25lIG9yCiAgICAgICAgIG1vcmUgaW5wdXQgZmlsZXMgYW5kIGdlbmVyYXRlIG9uZSBvdXRwdXQgZmlsZS4gIFdvcmtzIGp1c3QgbGlrZQogICAgICAgICAnZXhlY3V0ZSgpJywgZXhjZXB0IHRoZSBvcGVyYXRpb24gaXMgc2tpcHBlZCBhbmQgYSBkaWZmZXJlbnQKQEAgLTQxMyw0MSArNDAxLDM2IEBACiAgICAgICAgIGFuZCBpdCBpcyB0cnVlLCB0aGVuIHRoZSBjb21tYW5kIGlzIHVuY29uZGl0aW9uYWxseSBydW4gLS0gZG9lcyBubwogICAgICAgICB0aW1lc3RhbXAgY2hlY2tzLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgZXhlY19tc2cgaXMgTm9uZToKLSAgICAgICAgICAgIGV4ZWNfbXNnID0gImdlbmVyYXRpbmcgJXMgZnJvbSAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgIChvdXRmaWxlLCBzdHJpbmcuam9pbihpbmZpbGVzLCAnLCAnKSkKICAgICAgICAgaWYgc2tpcF9tc2cgaXMgTm9uZToKICAgICAgICAgICAgIHNraXBfbXNnID0gInNraXBwaW5nICVzIChpbnB1dHMgdW5jaGFuZ2VkKSIgJSBvdXRmaWxlCiAKLQogICAgICAgICAjIEFsbG93ICdpbmZpbGVzJyB0byBiZSBhIHNpbmdsZSBzdHJpbmcKLSAgICAgICAgaWYgdHlwZShpbmZpbGVzKSBpcyBTdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZmlsZXMsIHN0cik6CiAgICAgICAgICAgICBpbmZpbGVzID0gKGluZmlsZXMsKQotICAgICAgICBlbGlmIHR5cGUoaW5maWxlcykgbm90IGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShpbmZpbGVzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgXAogICAgICAgICAgICAgICAgICAgIidpbmZpbGVzJyBtdXN0IGJlIGEgc3RyaW5nLCBvciBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncyIKIAorICAgICAgICBpZiBleGVjX21zZyBpcyBOb25lOgorICAgICAgICAgICAgZXhlY19tc2cgPSAiZ2VuZXJhdGluZyAlcyBmcm9tICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKG91dGZpbGUsICcsICcuam9pbihpbmZpbGVzKSkKKwogICAgICAgICAjIElmICdvdXRmaWxlJyBtdXN0IGJlIHJlZ2VuZXJhdGVkIChlaXRoZXIgYmVjYXVzZSBpdCBkb2Vzbid0CiAgICAgICAgICMgZXhpc3QsIGlzIG91dC1vZi1kYXRlLCBvciB0aGUgJ2ZvcmNlJyBmbGFnIGlzIHRydWUpIHRoZW4KICAgICAgICAgIyBwZXJmb3JtIHRoZSBhY3Rpb24gdGhhdCBwcmVzdW1hYmx5IHJlZ2VuZXJhdGVzIGl0Ci0gICAgICAgIGlmIHNlbGYuZm9yY2Ugb3IgZGVwX3V0aWwubmV3ZXJfZ3JvdXAgKGluZmlsZXMsIG91dGZpbGUpOgorICAgICAgICBpZiBzZWxmLmZvcmNlIG9yIGRlcF91dGlsLm5ld2VyX2dyb3VwKGluZmlsZXMsIG91dGZpbGUpOgogICAgICAgICAgICAgc2VsZi5leGVjdXRlKGZ1bmMsIGFyZ3MsIGV4ZWNfbXNnLCBsZXZlbCkKIAogICAgICAgICAjIE90aGVyd2lzZSwgcHJpbnQgdGhlICJza2lwIiBtZXNzYWdlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2cuZGVidWcoc2tpcF9tc2cpCiAKLSAgICAjIG1ha2VfZmlsZSAoKQotCi0jIGNsYXNzIENvbW1hbmQKLQotCiAjIFhYWCAnaW5zdGFsbF9taXNjJyBjbGFzcyBub3QgY3VycmVudGx5IHVzZWQgLS0gaXQgd2FzIHRoZSBiYXNlIGNsYXNzIGZvcgogIyBib3RoICdpbnN0YWxsX3NjcmlwdHMnIGFuZCAnaW5zdGFsbF9kYXRhJywgYnV0IHRoZXkgb3V0Z3JldyBpdC4gIEl0IG1pZ2h0CiAjIHN0aWxsIGJlIHVzZWZ1bCBmb3IgJ2luc3RhbGxfaGVhZGVycycsIHRob3VnaCwgc28gSSdtIGtlZXBpbmcgaXQgYXJvdW5kCiAjIGZvciB0aGUgdGltZSBiZWluZy4KIAotY2xhc3MgaW5zdGFsbF9taXNjIChDb21tYW5kKToKK2NsYXNzIGluc3RhbGxfbWlzYyhDb21tYW5kKToKICAgICAiIiJDb21tb24gYmFzZSBjbGFzcyBmb3IgaW5zdGFsbGluZyBzb21lIGZpbGVzIGluIGEgc3ViZGlyZWN0b3J5LgogICAgIEN1cnJlbnRseSB1c2VkIGJ5IGluc3RhbGxfZGF0YSBhbmQgaW5zdGFsbF9zY3JpcHRzLgogICAgICIiIgpAQCAtNDU4LDEwICs0NDEsMTAgQEAKICAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5vdXRmaWxlcyA9IFtdCiAKLSAgICBkZWYgX2luc3RhbGxfZGlyX2Zyb20gKHNlbGYsIGRpcm5hbWUpOgorICAgIGRlZiBfaW5zdGFsbF9kaXJfZnJvbShzZWxmLCBkaXJuYW1lKToKICAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLCAoZGlybmFtZSwgJ2luc3RhbGxfZGlyJykpCiAKLSAgICBkZWYgX2NvcHlfZmlsZXMgKHNlbGYsIGZpbGVsaXN0KToKKyAgICBkZWYgX2NvcHlfZmlsZXMoc2VsZiwgZmlsZWxpc3QpOgogICAgICAgICBzZWxmLm91dGZpbGVzID0gW10KICAgICAgICAgaWYgbm90IGZpbGVsaXN0OgogICAgICAgICAgICAgcmV0dXJuCkBAIC00NzAsOSArNDUzLDUgQEAKICAgICAgICAgICAgIHNlbGYuY29weV9maWxlKGYsIHNlbGYuaW5zdGFsbF9kaXIpCiAgICAgICAgICAgICBzZWxmLm91dGZpbGVzLmFwcGVuZChvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2RpciwgZikpCiAKLSAgICBkZWYgZ2V0X291dHB1dHMgKHNlbGYpOgorICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3V0ZmlsZXMKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHByaW50ICJvayIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9fX2luaXRfXy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9fX2luaXRfXy5weQppbmRleCAwNWM3NThhLi4yMGIxNTlmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL19faW5pdF9fLnB5CkBAIC0zLDggKzMsNiBAQAogUGFja2FnZSBjb250YWluaW5nIGltcGxlbWVudGF0aW9uIG9mIGFsbCB0aGUgc3RhbmRhcmQgRGlzdHV0aWxzCiBjb21tYW5kcy4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIF9fYWxsX18gPSBbJ2J1aWxkJywKQEAgLTI1LDcgKzIzLDcgQEAKICAgICAgICAgICAgJ2JkaXN0X3JwbScsCiAgICAgICAgICAgICdiZGlzdF93aW5pbnN0JywKICAgICAgICAgICAgJ3VwbG9hZCcsCi0KKyAgICAgICAgICAgJ2NoZWNrJywKICAgICAgICAgICAgIyBUaGVzZSB0d28gYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOgogICAgICAgICAgICAjJ2JkaXN0X3NkdXgnLAogICAgICAgICAgICAjJ2JkaXN0X3BrZ3Rvb2wnLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CmluZGV4IGNhM2RhNzQuLmQ3OTEwYjEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKQEAgLTMsMjIgKzMsMjAgQEAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYmRpc3QnIGNvbW1hbmQgKGNyZWF0ZSBhIGJ1aWx0IFtiaW5hcnldCiBkaXN0cmlidXRpb24pLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zCi1mcm9tIHR5cGVzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKKwogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIERpc3R1dGlsc09wdGlvbkVycm9yCiAKIAotZGVmIHNob3dfZm9ybWF0cyAoKToKK2RlZiBzaG93X2Zvcm1hdHMoKToKICAgICAiIiJQcmludCBsaXN0IG9mIGF2YWlsYWJsZSBmb3JtYXRzIChhcmd1bWVudHMgdG8gIi0tZm9ybWF0IiBvcHRpb24pLgogICAgICIiIgogICAgIGZyb20gZGlzdHV0aWxzLmZhbmN5X2dldG9wdCBpbXBvcnQgRmFuY3lHZXRvcHQKLSAgICBmb3JtYXRzPVtdCisgICAgZm9ybWF0cyA9IFtdCiAgICAgZm9yIGZvcm1hdCBpbiBiZGlzdC5mb3JtYXRfY29tbWFuZHM6CiAgICAgICAgIGZvcm1hdHMuYXBwZW5kKCgiZm9ybWF0cz0iICsgZm9ybWF0LCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgYmRpc3QuZm9ybWF0X2NvbW1hbmRbZm9ybWF0XVsxXSkpCkBAIC0yNiw3ICsyNCw3IEBACiAgICAgcHJldHR5X3ByaW50ZXIucHJpbnRfaGVscCgiTGlzdCBvZiBhdmFpbGFibGUgZGlzdHJpYnV0aW9uIGZvcm1hdHM6IikKIAogCi1jbGFzcyBiZGlzdCAoQ29tbWFuZCk6CitjbGFzcyBiZGlzdChDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImNyZWF0ZSBhIGJ1aWx0IChiaW5hcnkpIGRpc3RyaWJ1dGlvbiIKIApAQCAtNDIsNiArNDAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKICAgICAgICAgICAgICAgICAgICAgKCdza2lwLWJ1aWxkJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJza2lwIHJlYnVpbGRpbmcgZXZlcnl0aGluZyAoZm9yIHRlc3RpbmcvZGVidWdnaW5nKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3NraXAtYnVpbGQnXQpAQCAtNTIsNDkgKzU2LDQxIEBACiAgICAgICAgIF0KIAogICAgICMgVGhlIGZvbGxvd2luZyBjb21tYW5kcyBkbyBub3QgdGFrZSBhIGZvcm1hdCBvcHRpb24gZnJvbSBiZGlzdAotICAgIG5vX2Zvcm1hdF9vcHRpb24gPSAoJ2JkaXN0X3JwbScsCi0gICAgICAgICAgICAgICAgICAgICAgICAjJ2JkaXN0X3NkdXgnLCAnYmRpc3RfcGtndG9vbCcKLSAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBub19mb3JtYXRfb3B0aW9uID0gKCdiZGlzdF9ycG0nLCkKIAogICAgICMgVGhpcyB3b24ndCBkbyBpbiByZWFsaXR5OiB3aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggUlBNLWlzaCBMaW51eCwKICAgICAjIERlYmlhbi1pc2ggTGludXgsIFNvbGFyaXMsIEZyZWVCU0QsIC4uLiwgV2luZG93cywgTWFjIE9TLgotICAgIGRlZmF1bHRfZm9ybWF0ID0geyAncG9zaXgnOiAnZ3p0YXInLAotICAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnLCB9CisgICAgZGVmYXVsdF9mb3JtYXQgPSB7J3Bvc2l4JzogJ2d6dGFyJywKKyAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJywKKyAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCd9CiAKICAgICAjIEVzdGFibGlzaCB0aGUgcHJlZmVycmVkIG9yZGVyIChmb3IgdGhlIC0taGVscC1mb3JtYXRzIG9wdGlvbikuCiAgICAgZm9ybWF0X2NvbW1hbmRzID0gWydycG0nLCAnZ3p0YXInLCAnYnp0YXInLCAnenRhcicsICd0YXInLAotICAgICAgICAgICAgICAgICAgICAgICAnd2luaW5zdCcsICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICAjJ3BrZ3Rvb2wnLCAnc2R1eCcKLSAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAnd2luaW5zdCcsICd6aXAnLCAnbXNpJ10KIAogICAgICMgQW5kIHRoZSByZWFsIGluZm9ybWF0aW9uLgotICAgIGZvcm1hdF9jb21tYW5kID0geyAncnBtJzogICAoJ2JkaXN0X3JwbScsICAiUlBNIGRpc3RyaWJ1dGlvbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAnemlwJzogICAoJ2JkaXN0X2R1bWInLCAiWklQIGZpbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ2d6dGFyJzogKCdiZGlzdF9kdW1iJywgImd6aXAnZWQgdGFyIGZpbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgJ2J6dGFyJzogKCdiZGlzdF9kdW1iJywgImJ6aXAyJ2VkIHRhciBmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICd6dGFyJzogICgnYmRpc3RfZHVtYicsICJjb21wcmVzc2VkIHRhciBmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICd0YXInOiAgICgnYmRpc3RfZHVtYicsICJ0YXIgZmlsZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAnd2luaW5zdCc6ICgnYmRpc3Rfd2luaW5zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5kb3dzIGV4ZWN1dGFibGUgaW5zdGFsbGVyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICd6aXAnOiAgICgnYmRpc3RfZHVtYicsICJaSVAgZmlsZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAjJ3BrZ3Rvb2wnOiAoJ2JkaXN0X3BrZ3Rvb2wnLAotICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgIlNvbGFyaXMgcGtndG9vbCBkaXN0cmlidXRpb24iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIydzZHV4JzogICgnYmRpc3Rfc2R1eCcsICJIUC1VWCBzd2luc3RhbGwgZGVwb3QiKSwKKyAgICBmb3JtYXRfY29tbWFuZCA9IHsncnBtJzogICAoJ2JkaXN0X3JwbScsICAiUlBNIGRpc3RyaWJ1dGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICdnenRhcic6ICgnYmRpc3RfZHVtYicsICJnemlwJ2VkIHRhciBmaWxlIiksCisgICAgICAgICAgICAgICAgICAgICAgJ2J6dGFyJzogKCdiZGlzdF9kdW1iJywgImJ6aXAyJ2VkIHRhciBmaWxlIiksCisgICAgICAgICAgICAgICAgICAgICAgJ3p0YXInOiAgKCdiZGlzdF9kdW1iJywgImNvbXByZXNzZWQgdGFyIGZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAndGFyJzogICAoJ2JkaXN0X2R1bWInLCAidGFyIGZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnd2luaW5zdCc6ICgnYmRpc3Rfd2luaW5zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldpbmRvd3MgZXhlY3V0YWJsZSBpbnN0YWxsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnemlwJzogICAoJ2JkaXN0X2R1bWInLCAiWklQIGZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAnbXNpJzogICAoJ2JkaXN0X21zaScsICAiTWljcm9zb2Z0IEluc3RhbGxlciIpCiAgICAgICAgICAgICAgICAgICAgICAgfQogCiAKLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmJkaXN0X2Jhc2UgPSBOb25lCiAgICAgICAgIHNlbGYucGxhdF9uYW1lID0gTm9uZQogICAgICAgICBzZWxmLmZvcm1hdHMgPSBOb25lCiAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYuc2tpcF9idWlsZCA9IDAKKyAgICAgICAgc2VsZi5ncm91cCA9IE5vbmUKKyAgICAgICAgc2VsZi5vd25lciA9IE5vbmUKIAotICAgICMgaW5pdGlhbGl6ZV9vcHRpb25zKCkKLQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIGhhdmUgdG8gZmluYWxpemUgJ3BsYXRfbmFtZScgYmVmb3JlICdiZGlzdF9iYXNlJwogICAgICAgICBpZiBzZWxmLnBsYXRfbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgaWYgc2VsZi5za2lwX2J1aWxkOgpAQCAtMTIyLDEwICsxMTgsNyBAQAogICAgICAgICBpZiBzZWxmLmRpc3RfZGlyIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmRpc3RfZGlyID0gImRpc3QiCiAKLSAgICAjIGZpbmFsaXplX29wdGlvbnMoKQotCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjIEZpZ3VyZSBvdXQgd2hpY2ggc3ViLWNvbW1hbmRzIHdlIG5lZWQgdG8gcnVuLgogICAgICAgICBjb21tYW5kcyA9IFtdCiAgICAgICAgIGZvciBmb3JtYXQgaW4gc2VsZi5mb3JtYXRzOgpAQCAtMTQxLDEyICsxMzQsMTMgQEAKICAgICAgICAgICAgIGlmIGNtZF9uYW1lIG5vdCBpbiBzZWxmLm5vX2Zvcm1hdF9vcHRpb246CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5mb3JtYXQgPSBzZWxmLmZvcm1hdHNbaV0KIAorICAgICAgICAgICAgIyBwYXNzaW5nIHRoZSBvd25lciBhbmQgZ3JvdXAgbmFtZXMgZm9yIHRhciBhcmNoaXZpbmcKKyAgICAgICAgICAgIGlmIGNtZF9uYW1lID09ICdiZGlzdF9kdW1iJzoKKyAgICAgICAgICAgICAgICBzdWJfY21kLm93bmVyID0gc2VsZi5vd25lcgorICAgICAgICAgICAgICAgIHN1Yl9jbWQuZ3JvdXAgPSBzZWxmLmdyb3VwCisKICAgICAgICAgICAgICMgSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGFnYWluLCB0ZWxsIGl0IHRvCiAgICAgICAgICAgICAjIGtlZXAgaXRzIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQgc28gc3Vic2VxdWVudCBydW5zIGdvIGZhc3Rlci4KICAgICAgICAgICAgIGlmIGNtZF9uYW1lIGluIGNvbW1hbmRzW2krMTpdOgogICAgICAgICAgICAgICAgIHN1Yl9jbWQua2VlcF90ZW1wID0gMQogICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZChjbWRfbmFtZSkKLQotICAgICMgcnVuKCkKLQotIyBjbGFzcyBiZGlzdApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCBmNzQwYzQ2Li43YzYwZDM5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtNCwyMSArNCwyMSBAQAogZGlzdHJpYnV0aW9uIC0tIGkuZS4sIGp1c3QgYW4gYXJjaGl2ZSB0byBiZSB1bnBhY2tlZCB1bmRlciAkcHJlZml4IG9yCiAkZXhlY19wcmVmaXgpLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCisKK2Zyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcHl0aG9uX3ZlcnNpb24KKwogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgcmVtb3ZlX3RyZWUsIGVuc3VyZV9yZWxhdGl2ZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fdmVyc2lvbgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKIGNsYXNzIGJkaXN0X2R1bWIgKENvbW1hbmQpOgogCi0gICAgZGVzY3JpcHRpb24gPSAiY3JlYXRlIGEgXCJkdW1iXCIgYnVpbHQgZGlzdHJpYnV0aW9uIgorICAgIGRlc2NyaXB0aW9uID0gJ2NyZWF0ZSBhICJkdW1iIiBidWlsdCBkaXN0cmlidXRpb24nCiAKICAgICB1c2VyX29wdGlvbnMgPSBbKCdiZGlzdC1kaXI9JywgJ2QnLAogICAgICAgICAgICAgICAgICAgICAgInRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNyZWF0aW5nIHRoZSBkaXN0cmlidXRpb24iKSwKQEAgLTM3LDYgKzM3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICgncmVsYXRpdmUnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHRoZSBhcmNoaXZlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIgogICAgICAgICAgICAgICAgICAgICAgIihkZWZhdWx0OiBmYWxzZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnc2tpcC1idWlsZCcsICdyZWxhdGl2ZSddCkBAIC01NCwxMiArNjAsMTAgQEAKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gMAogICAgICAgICBzZWxmLnJlbGF0aXZlID0gMAorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQogCi0gICAgIyBpbml0aWFsaXplX29wdGlvbnMoKQotCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6Ci0KKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKICAgICAgICAgICAgIGJkaXN0X2Jhc2UgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYmRpc3QnKS5iZGlzdF9iYXNlCiAgICAgICAgICAgICBzZWxmLmJkaXN0X2RpciA9IG9zLnBhdGguam9pbihiZGlzdF9iYXNlLCAnZHVtYicpCkBAIC03NiwxMSArODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Rpc3RfZGlyJywgJ2Rpc3RfZGlyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGxhdF9uYW1lJywgJ3BsYXRfbmFtZScpKQogCi0gICAgIyBmaW5hbGl6ZV9vcHRpb25zKCkKLQotCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5za2lwX2J1aWxkOgogICAgICAgICAgICAgc2VsZi5ydW5fY29tbWFuZCgnYnVpbGQnKQogCkBAIC0xMTksNyArMTE5LDggQEAKIAogICAgICAgICAjIE1ha2UgdGhlIGFyY2hpdmUKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm1ha2VfYXJjaGl2ZShwc2V1ZG9pbnN0YWxsX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgcHl2ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKICAgICAgICAgZWxzZToKQEAgLTEyOSw3ICsxMzAsMyBAQAogCiAgICAgICAgIGlmIG5vdCBzZWxmLmtlZXBfdGVtcDoKICAgICAgICAgICAgIHJlbW92ZV90cmVlKHNlbGYuYmRpc3RfZGlyLCBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKLQotICAgICMgcnVuKCkKLQotIyBjbGFzcyBiZGlzdF9kdW1iCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfbXNpLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X21zaS5weQppbmRleCA0MjI3MWM0Li5kZWQ4MzdkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfbXNpLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9tc2kucHkKQEAgLTEsMjAgKzEsMjEgQEAKICMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KLSMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1hcnRpbiB2LiBM9ndpcworIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWFydGluIHZvbiBM9ndpcwogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjIFRoZSBiZGlzdF93aW5pbnN0IGNvbW1hbmQgcHJvcGVyCiAjIGJhc2VkIG9uIGJkaXN0X3dpbmluc3QKICIiIgogSW1wbGVtZW50cyB0aGUgYmRpc3RfbXNpIGNvbW1hbmQuCiAiIiIKLQogaW1wb3J0IHN5cywgb3MKK2Zyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcHl0aG9uX3ZlcnNpb24KKwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IHJlbW92ZV90cmVlCi1mcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fdmVyc2lvbgogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgU3RyaWN0VmVyc2lvbgogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KKwogaW1wb3J0IG1zaWxpYgogZnJvbSBtc2lsaWIgaW1wb3J0IHNjaGVtYSwgc2VxdWVuY2UsIHRleHQKIGZyb20gbXNpbGliIGltcG9ydCBEaXJlY3RvcnksIEZlYXR1cmUsIERpYWxvZywgYWRkX2RhdGEKQEAgLTI4LDcgKzI5LDYgQEAKICAgICAgICAgZGVmYXVsdCwgY2FuY2VsLCBiaXRtYXA9dHJ1ZSkiIiIKICAgICAgICAgRGlhbG9nLl9faW5pdF9fKHNlbGYsICphcmdzKQogICAgICAgICBydWxlciA9IHNlbGYuaCAtIDM2Ci0gICAgICAgIGJtd2lkdGggPSAxNTIqcnVsZXIvMzI4CiAgICAgICAgICNpZiBrdy5nZXQoImJpdG1hcCIsIFRydWUpOgogICAgICAgICAjICAgIHNlbGYuYml0bWFwKCJCaXRtYXAiLCAwLCAwLCBibXdpZHRoLCBydWxlciwgIlB5dGhvbldpbiIpCiAgICAgICAgIHNlbGYubGluZSgiQm90dG9tTGluZSIsIDAsIHJ1bGVyLCBzZWxmLncsIDApCkBAIC0xMTcsNiArMTE3LDEyIEBACiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnbm8tdGFyZ2V0LWNvbXBpbGUnLCAnbm8tdGFyZ2V0LW9wdGltaXplJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3NraXAtYnVpbGQnXQogCisgICAgYWxsX3ZlcnNpb25zID0gWycyLjAnLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMi40JywKKyAgICAgICAgICAgICAgICAgICAgJzIuNScsICcyLjYnLCAnMi43JywgJzIuOCcsICcyLjknLAorICAgICAgICAgICAgICAgICAgICAnMy4wJywgJzMuMScsICczLjInLCAnMy4zJywgJzMuNCcsCisgICAgICAgICAgICAgICAgICAgICczLjUnLCAnMy42JywgJzMuNycsICczLjgnLCAnMy45J10KKyAgICBvdGhlcl92ZXJzaW9uID0gJ1gnCisKICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zIChzZWxmKToKICAgICAgICAgc2VsZi5iZGlzdF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYucGxhdF9uYW1lID0gTm9uZQpAQCAtMTI4LDIwICsxMzQsMjQgQEAKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gMAogICAgICAgICBzZWxmLmluc3RhbGxfc2NyaXB0ID0gTm9uZQogICAgICAgICBzZWxmLnByZV9pbnN0YWxsX3NjcmlwdCA9IE5vbmUKKyAgICAgICAgc2VsZi52ZXJzaW9ucyA9IE5vbmUKIAogICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKICAgICAgICAgICAgIGJkaXN0X2Jhc2UgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYmRpc3QnKS5iZGlzdF9iYXNlCiAgICAgICAgICAgICBzZWxmLmJkaXN0X2RpciA9IG9zLnBhdGguam9pbihiZGlzdF9iYXNlLCAnbXNpJykKICAgICAgICAgc2hvcnRfdmVyc2lvbiA9IGdldF9weXRob25fdmVyc2lvbigpCisgICAgICAgIGlmIChub3Qgc2VsZi50YXJnZXRfdmVyc2lvbikgYW5kIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgorICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVyc2lvbiA9IHNob3J0X3ZlcnNpb24KICAgICAgICAgaWYgc2VsZi50YXJnZXRfdmVyc2lvbjoKKyAgICAgICAgICAgIHNlbGYudmVyc2lvbnMgPSBbc2VsZi50YXJnZXRfdmVyc2lvbl0KICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNraXBfYnVpbGQgYW5kIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpXAogICAgICAgICAgICAgICAgYW5kIHNlbGYudGFyZ2V0X3ZlcnNpb24gIT0gc2hvcnRfdmVyc2lvbjoKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICJ0YXJnZXQgdmVyc2lvbiBjYW4gb25seSBiZSAlcywgb3IgdGhlICctLXNraXAtYnVpbGQnIiBcCiAgICAgICAgICAgICAgICAgICAgICAgIiBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQiICUgKHNob3J0X3ZlcnNpb24sKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi50YXJnZXRfdmVyc2lvbiA9IHNob3J0X3ZlcnNpb24KKyAgICAgICAgICAgIHNlbGYudmVyc2lvbnMgPSBsaXN0KHNlbGYuYWxsX3ZlcnNpb25zKQogCiAgICAgICAgIHNlbGYuc2V0X3VuZGVmaW5lZF9vcHRpb25zKCdiZGlzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZGlzdF9kaXInLCAnZGlzdF9kaXInKSwKQEAgLTIyMyw4ICsyMzMsMTEgQEAKICAgICAgICAgIyBQcmVmaXggUHJvZHVjdE5hbWUgd2l0aCBQeXRob24geC55LCBzbyB0aGF0CiAgICAgICAgICMgaXQgc29ydHMgdG9nZXRoZXIgd2l0aCB0aGUgb3RoZXIgUHl0aG9uIHBhY2thZ2VzCiAgICAgICAgICMgaW4gQWRkLVJlbW92ZS1Qcm9ncmFtcyAoQVBSKQotICAgICAgICBwcm9kdWN0X25hbWUgPSAiUHl0aG9uICVzICVzIiAlIChzZWxmLnRhcmdldF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfZnVsbG5hbWUoKSkKKyAgICAgICAgZnVsbG5hbWUgPSBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfZnVsbG5hbWUoKQorICAgICAgICBpZiBzZWxmLnRhcmdldF92ZXJzaW9uOgorICAgICAgICAgICAgcHJvZHVjdF9uYW1lID0gIlB5dGhvbiAlcyAlcyIgJSAoc2VsZi50YXJnZXRfdmVyc2lvbiwgZnVsbG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcm9kdWN0X25hbWUgPSAiUHl0aG9uICVzIiAlIChmdWxsbmFtZSkKICAgICAgICAgc2VsZi5kYiA9IG1zaWxpYi5pbml0X2RhdGFiYXNlKGluc3RhbGxlcl9uYW1lLCBzY2hlbWEsCiAgICAgICAgICAgICAgICAgcHJvZHVjdF9uYW1lLCBtc2lsaWIuZ2VuX3V1aWQoKSwKICAgICAgICAgICAgICAgICBzdmVyc2lvbiwgYXV0aG9yKQpAQCAtMjQ1LDcgKzI1OCw4IEBACiAgICAgICAgIHNlbGYuZGIuQ29tbWl0KCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuZGlzdHJpYnV0aW9uLCAnZGlzdF9maWxlcycpOgotICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoKCdiZGlzdF9tc2knLCBzZWxmLnRhcmdldF92ZXJzaW9uLCBmdWxsbmFtZSkpCisgICAgICAgICAgICB0dXAgPSAnYmRpc3RfbXNpJywgc2VsZi50YXJnZXRfdmVyc2lvbiBvciAnYW55JywgZnVsbG5hbWUKKyAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKHR1cCkKIAogICAgICAgICBpZiBub3Qgc2VsZi5rZWVwX3RlbXA6CiAgICAgICAgICAgICByZW1vdmVfdHJlZShzZWxmLmJkaXN0X2RpciwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCkBAIC0yNTMsNzAgKzI2NywxMjUgQEAKICAgICBkZWYgYWRkX2ZpbGVzKHNlbGYpOgogICAgICAgICBkYiA9IHNlbGYuZGIKICAgICAgICAgY2FiID0gbXNpbGliLkNBQigiZGlzdGZpbGVzIikKLSAgICAgICAgZiA9IEZlYXR1cmUoZGIsICJkZWZhdWx0IiwgIkRlZmF1bHQgRmVhdHVyZSIsICJFdmVyeXRoaW5nIiwgMSwgZGlyZWN0b3J5PSJUQVJHRVRESVIiKQotICAgICAgICBmLnNldF9jdXJyZW50KCkKICAgICAgICAgcm9vdGRpciA9IG9zLnBhdGguYWJzcGF0aChzZWxmLmJkaXN0X2RpcikKLSAgICAgICAgcm9vdCA9IERpcmVjdG9yeShkYiwgY2FiLCBOb25lLCByb290ZGlyLCAiVEFSR0VURElSIiwgIlNvdXJjZURpciIpCi0gICAgICAgIGRiLkNvbW1pdCgpCi0gICAgICAgIHRvZG8gPSBbcm9vdF0KLSAgICAgICAgd2hpbGUgdG9kbzoKLSAgICAgICAgICAgIGRpciA9IHRvZG8ucG9wKCkKLSAgICAgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyLmFic29sdXRlKToKLSAgICAgICAgICAgICAgICBhZmlsZSA9IG9zLnBhdGguam9pbihkaXIuYWJzb2x1dGUsIGZpbGUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihhZmlsZSk6Ci0gICAgICAgICAgICAgICAgICAgIG5ld2RpciA9IERpcmVjdG9yeShkYiwgY2FiLCBkaXIsIGZpbGUsIGZpbGUsICIlc3wlcyIgJSAoZGlyLm1ha2Vfc2hvcnQoZmlsZSksIGZpbGUpKQotICAgICAgICAgICAgICAgICAgICB0b2RvLmFwcGVuZChuZXdkaXIpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gZGlyLmFkZF9maWxlKGZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGZpbGU9PXNlbGYuaW5zdGFsbF9zY3JpcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmluc3RhbGxfc2NyaXB0X2tleToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvciwgIk11bHRpcGxlIGZpbGVzIHdpdGggbmFtZSAlcyIgJSBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluc3RhbGxfc2NyaXB0X2tleSA9ICdbIyVzXScgJSBrZXkKIAorICAgICAgICByb290ID0gRGlyZWN0b3J5KGRiLCBjYWIsIE5vbmUsIHJvb3RkaXIsICJUQVJHRVRESVIiLCAiU291cmNlRGlyIikKKyAgICAgICAgZiA9IEZlYXR1cmUoZGIsICJQeXRob24iLCAiUHl0aG9uIiwgIkV2ZXJ5dGhpbmciLAorICAgICAgICAgICAgICAgICAgICAwLCAxLCBkaXJlY3Rvcnk9IlRBUkdFVERJUiIpCisKKyAgICAgICAgaXRlbXMgPSBbKGYsIHJvb3QsICcnKV0KKyAgICAgICAgZm9yIHZlcnNpb24gaW4gc2VsZi52ZXJzaW9ucyArIFtzZWxmLm90aGVyX3ZlcnNpb25dOgorICAgICAgICAgICAgdGFyZ2V0ID0gIlRBUkdFVERJUiIgKyB2ZXJzaW9uCisgICAgICAgICAgICBuYW1lID0gZGVmYXVsdCA9ICJQeXRob24iICsgdmVyc2lvbgorICAgICAgICAgICAgZGVzYyA9ICJFdmVyeXRoaW5nIgorICAgICAgICAgICAgaWYgdmVyc2lvbiBpcyBzZWxmLm90aGVyX3ZlcnNpb246CisgICAgICAgICAgICAgICAgdGl0bGUgPSAiUHl0aG9uIGZyb20gYW5vdGhlciBsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICBsZXZlbCA9IDIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGl0bGUgPSAiUHl0aG9uICVzIGZyb20gcmVnaXN0cnkiICUgdmVyc2lvbgorICAgICAgICAgICAgICAgIGxldmVsID0gMQorICAgICAgICAgICAgZiA9IEZlYXR1cmUoZGIsIG5hbWUsIHRpdGxlLCBkZXNjLCAxLCBsZXZlbCwgZGlyZWN0b3J5PXRhcmdldCkKKyAgICAgICAgICAgIGRpciA9IERpcmVjdG9yeShkYiwgY2FiLCByb290LCByb290ZGlyLCB0YXJnZXQsIGRlZmF1bHQpCisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoKGYsIGRpciwgdmVyc2lvbikpCisgICAgICAgIGRiLkNvbW1pdCgpCisKKyAgICAgICAgc2VlbiA9IHt9CisgICAgICAgIGZvciBmZWF0dXJlLCBkaXIsIHZlcnNpb24gaW4gaXRlbXM6CisgICAgICAgICAgICB0b2RvID0gW2Rpcl0KKyAgICAgICAgICAgIHdoaWxlIHRvZG86CisgICAgICAgICAgICAgICAgZGlyID0gdG9kby5wb3AoKQorICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyLmFic29sdXRlKToKKyAgICAgICAgICAgICAgICAgICAgYWZpbGUgPSBvcy5wYXRoLmpvaW4oZGlyLmFic29sdXRlLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGFmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ID0gIiVzfCVzIiAlIChkaXIubWFrZV9zaG9ydChmaWxlKSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBmaWxlICsgdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGlyID0gRGlyZWN0b3J5KGRiLCBjYWIsIGRpciwgZmlsZSwgZGVmYXVsdCwgc2hvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICB0b2RvLmFwcGVuZChuZXdkaXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGlyLmNvbXBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIuc3RhcnRfY29tcG9uZW50KGRpci5sb2dpY2FsLCBmZWF0dXJlLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWZpbGUgbm90IGluIHNlZW46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gc2VlblthZmlsZV0gPSBkaXIuYWRkX2ZpbGUoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWxlPT1zZWxmLmluc3RhbGxfc2NyaXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmluc3RhbGxfc2NyaXB0X2tleToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11bHRpcGxlIGZpbGVzIHdpdGggbmFtZSAlcyIgJSBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluc3RhbGxfc2NyaXB0X2tleSA9ICdbIyVzXScgJSBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gc2VlblthZmlsZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiRHVwbGljYXRlRmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoa2V5ICsgdmVyc2lvbiwgZGlyLmNvbXBvbmVudCwga2V5LCBOb25lLCBkaXIubG9naWNhbCldKQorICAgICAgICAgICAgZGIuQ29tbWl0KCkKICAgICAgICAgY2FiLmNvbW1pdChkYikKIAogICAgIGRlZiBhZGRfZmluZF9weXRob24oc2VsZik6CiAgICAgICAgICIiIkFkZHMgY29kZSB0byB0aGUgaW5zdGFsbGVyIHRvIGNvbXB1dGUgdGhlIGxvY2F0aW9uIG9mIFB5dGhvbi4KLSAgICAgICAgUHJvcGVydGllcyBQWVRIT04uTUFDSElORSwgUFlUSE9OLlVTRVIsIFBZVEhPTkRJUiBhbmQgUFlUSE9OIHdpbGwgYmUgc2V0Ci0gICAgICAgIGluIGJvdGggdGhlIGV4ZWN1dGUgYW5kIFVJIHNlcXVlbmNlczsgUFlUSE9ORElSIHdpbGwgYmUgc2V0IGZyb20KLSAgICAgICAgUFlUSE9OLlVTRVIgaWYgZGVmaW5lZCwgZWxzZSBmcm9tIFBZVEhPTi5NQUNISU5FLgotICAgICAgICBQWVRIT04gaXMgUFlUSE9ORElSXHB5dGhvbi5leGUiIiIKLSAgICAgICAgaW5zdGFsbF9wYXRoID0gciJTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwlc1xJbnN0YWxsUGF0aCIgJSBzZWxmLnRhcmdldF92ZXJzaW9uCi0gICAgICAgIGlmIG1zaWxpYi5XaW42NDoKLSAgICAgICAgICAgICMgdHlwZTogbXNpZGJMb2NhdG9yVHlwZVJhd1ZhbHVlICsgbXNpZGJMb2NhdG9yVHlwZTY0Yml0Ci0gICAgICAgICAgICBUeXBlID0gMisxNgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgVHlwZSA9IDIKLSAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIlJlZ0xvY2F0b3IiLAotICAgICAgICAgICAgICAgIFsoInB5dGhvbi5tYWNoaW5lIiwgMiwgaW5zdGFsbF9wYXRoLCBOb25lLCBUeXBlKSwKLSAgICAgICAgICAgICAgICAgKCJweXRob24udXNlciIsIDEsIGluc3RhbGxfcGF0aCwgTm9uZSwgVHlwZSldKQotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQXBwU2VhcmNoIiwKLSAgICAgICAgICAgICAgICBbKCJQWVRIT04uTUFDSElORSIsICJweXRob24ubWFjaGluZSIpLAotICAgICAgICAgICAgICAgICAoIlBZVEhPTi5VU0VSIiwgInB5dGhvbi51c2VyIildKQotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ3VzdG9tQWN0aW9uIiwKLSAgICAgICAgICAgICAgICBbKCJQeXRob25Gcm9tTWFjaGluZSIsIDUxKzI1NiwgIlBZVEhPTkRJUiIsICJbUFlUSE9OLk1BQ0hJTkVdIiksCi0gICAgICAgICAgICAgICAgICgiUHl0aG9uRnJvbVVzZXIiLCA1MSsyNTYsICJQWVRIT05ESVIiLCAiW1BZVEhPTi5VU0VSXSIpLAotICAgICAgICAgICAgICAgICAoIlB5dGhvbkV4ZSIsIDUxKzI1NiwgIlBZVEhPTiIsICJbUFlUSE9ORElSXVxccHl0aG9uLmV4ZSIpLAotICAgICAgICAgICAgICAgICAoIkluaXRpYWxUYXJnZXREaXIiLCA1MSsyNTYsICJUQVJHRVRESVIiLCAiW1BZVEhPTkRJUl0iKV0pCi0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKLSAgICAgICAgICAgICAgICBbKCJQeXRob25Gcm9tTWFjaGluZSIsICJQWVRIT04uTUFDSElORSIsIDQwMSksCi0gICAgICAgICAgICAgICAgICgiUHl0aG9uRnJvbVVzZXIiLCAiUFlUSE9OLlVTRVIiLCA0MDIpLAotICAgICAgICAgICAgICAgICAoIlB5dGhvbkV4ZSIsIE5vbmUsIDQwMyksCi0gICAgICAgICAgICAgICAgICgiSW5pdGlhbFRhcmdldERpciIsICdUQVJHRVRESVI9IiInLCA0MDQpLAotICAgICAgICAgICAgICAgIF0pCi0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJJbnN0YWxsVUlTZXF1ZW5jZSIsCi0gICAgICAgICAgICAgICAgWygiUHl0aG9uRnJvbU1hY2hpbmUiLCAiUFlUSE9OLk1BQ0hJTkUiLCA0MDEpLAotICAgICAgICAgICAgICAgICAoIlB5dGhvbkZyb21Vc2VyIiwgIlBZVEhPTi5VU0VSIiwgNDAyKSwKLSAgICAgICAgICAgICAgICAgKCJQeXRob25FeGUiLCBOb25lLCA0MDMpLAotICAgICAgICAgICAgICAgICAoIkluaXRpYWxUYXJnZXREaXIiLCAnVEFSR0VURElSPSIiJywgNDA0KSwKLSAgICAgICAgICAgICAgICBdKQorCisgICAgICAgIFByb3BlcnRpZXMgUFlUSE9OLk1BQ0hJTkUuWC5ZIGFuZCBQWVRIT04uVVNFUi5YLlkgd2lsbCBiZSBzZXQgZnJvbSB0aGUKKyAgICAgICAgcmVnaXN0cnkgZm9yIGVhY2ggdmVyc2lvbiBvZiBQeXRob24uCisKKyAgICAgICAgUHJvcGVydGllcyBUQVJHRVRESVJYLlkgd2lsbCBiZSBzZXQgZnJvbSBQWVRIT04uVVNFUi5YLlkgaWYgZGVmaW5lZCwKKyAgICAgICAgZWxzZSBmcm9tIFBZVEhPTi5NQUNISU5FLlguWS4KKworICAgICAgICBQcm9wZXJ0aWVzIFBZVEhPTlguWSB3aWxsIGJlIHNldCB0byBUQVJHRVRESVJYLllcXHB5dGhvbi5leGUiIiIKKworICAgICAgICBzdGFydCA9IDQwMgorICAgICAgICBmb3IgdmVyIGluIHNlbGYudmVyc2lvbnM6CisgICAgICAgICAgICBpbnN0YWxsX3BhdGggPSByIlNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXCVzXEluc3RhbGxQYXRoIiAlIHZlcgorICAgICAgICAgICAgbWFjaGluZV9yZWcgPSAicHl0aG9uLm1hY2hpbmUuIiArIHZlcgorICAgICAgICAgICAgdXNlcl9yZWcgPSAicHl0aG9uLnVzZXIuIiArIHZlcgorICAgICAgICAgICAgbWFjaGluZV9wcm9wID0gIlBZVEhPTi5NQUNISU5FLiIgKyB2ZXIKKyAgICAgICAgICAgIHVzZXJfcHJvcCA9ICJQWVRIT04uVVNFUi4iICsgdmVyCisgICAgICAgICAgICBtYWNoaW5lX2FjdGlvbiA9ICJQeXRob25Gcm9tTWFjaGluZSIgKyB2ZXIKKyAgICAgICAgICAgIHVzZXJfYWN0aW9uID0gIlB5dGhvbkZyb21Vc2VyIiArIHZlcgorICAgICAgICAgICAgZXhlX2FjdGlvbiA9ICJQeXRob25FeGUiICsgdmVyCisgICAgICAgICAgICB0YXJnZXRfZGlyX3Byb3AgPSAiVEFSR0VURElSIiArIHZlcgorICAgICAgICAgICAgZXhlX3Byb3AgPSAiUFlUSE9OIiArIHZlcgorICAgICAgICAgICAgaWYgbXNpbGliLldpbjY0OgorICAgICAgICAgICAgICAgICMgdHlwZTogbXNpZGJMb2NhdG9yVHlwZVJhd1ZhbHVlICsgbXNpZGJMb2NhdG9yVHlwZTY0Yml0CisgICAgICAgICAgICAgICAgVHlwZSA9IDIrMTYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgVHlwZSA9IDIKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJSZWdMb2NhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgWyhtYWNoaW5lX3JlZywgMiwgaW5zdGFsbF9wYXRoLCBOb25lLCBUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICh1c2VyX3JlZywgMSwgaW5zdGFsbF9wYXRoLCBOb25lLCBUeXBlKV0pCisgICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQXBwU2VhcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgWyhtYWNoaW5lX3Byb3AsIG1hY2hpbmVfcmVnKSwKKyAgICAgICAgICAgICAgICAgICAgICh1c2VyX3Byb3AsIHVzZXJfcmVnKV0pCisgICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ3VzdG9tQWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgWyhtYWNoaW5lX2FjdGlvbiwgNTErMjU2LCB0YXJnZXRfZGlyX3Byb3AsICJbIiArIG1hY2hpbmVfcHJvcCArICJdIiksCisgICAgICAgICAgICAgICAgICAgICAodXNlcl9hY3Rpb24sIDUxKzI1NiwgdGFyZ2V0X2Rpcl9wcm9wLCAiWyIgKyB1c2VyX3Byb3AgKyAiXSIpLAorICAgICAgICAgICAgICAgICAgICAgKGV4ZV9hY3Rpb24sIDUxKzI1NiwgZXhlX3Byb3AsICJbIiArIHRhcmdldF9kaXJfcHJvcCArICJdXFxweXRob24uZXhlIiksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCisgICAgICAgICAgICAgICAgICAgIFsobWFjaGluZV9hY3Rpb24sIG1hY2hpbmVfcHJvcCwgc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgKHVzZXJfYWN0aW9uLCB1c2VyX3Byb3AsIHN0YXJ0ICsgMSksCisgICAgICAgICAgICAgICAgICAgICAoZXhlX2FjdGlvbiwgTm9uZSwgc3RhcnQgKyAyKSwKKyAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJJbnN0YWxsVUlTZXF1ZW5jZSIsCisgICAgICAgICAgICAgICAgICAgIFsobWFjaGluZV9hY3Rpb24sIG1hY2hpbmVfcHJvcCwgc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgKHVzZXJfYWN0aW9uLCB1c2VyX3Byb3AsIHN0YXJ0ICsgMSksCisgICAgICAgICAgICAgICAgICAgICAoZXhlX2FjdGlvbiwgTm9uZSwgc3RhcnQgKyAyKSwKKyAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDb25kaXRpb24iLAorICAgICAgICAgICAgICAgICAgICBbKCJQeXRob24iICsgdmVyLCAwLCAiTk9UIFRBUkdFVERJUiIgKyB2ZXIpXSkKKyAgICAgICAgICAgIHN0YXJ0ICs9IDQKKyAgICAgICAgICAgIGFzc2VydCBzdGFydCA8IDUwMAogCiAgICAgZGVmIGFkZF9zY3JpcHRzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmluc3RhbGxfc2NyaXB0OgotICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkN1c3RvbUFjdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgIFsoImluc3RhbGxfc2NyaXB0IiwgNTAsICJQWVRIT04iLCBzZWxmLmluc3RhbGxfc2NyaXB0X2tleSldKQotICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkluc3RhbGxFeGVjdXRlU2VxdWVuY2UiLAotICAgICAgICAgICAgICAgICAgICBbKCJpbnN0YWxsX3NjcmlwdCIsICJOT1QgSW5zdGFsbGVkIiwgNjgwMCldKQorICAgICAgICAgICAgc3RhcnQgPSA2ODAwCisgICAgICAgICAgICBmb3IgdmVyIGluIHNlbGYudmVyc2lvbnMgKyBbc2VsZi5vdGhlcl92ZXJzaW9uXToKKyAgICAgICAgICAgICAgICBpbnN0YWxsX2FjdGlvbiA9ICJpbnN0YWxsX3NjcmlwdC4iICsgdmVyCisgICAgICAgICAgICAgICAgZXhlX3Byb3AgPSAiUFlUSE9OIiArIHZlcgorICAgICAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDdXN0b21BY3Rpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnN0YWxsX2FjdGlvbiwgNTAsIGV4ZV9wcm9wLCBzZWxmLmluc3RhbGxfc2NyaXB0X2tleSldKQorICAgICAgICAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5zdGFsbF9hY3Rpb24sICImUHl0aG9uJXM9MyIgJSB2ZXIsIHN0YXJ0KV0pCisgICAgICAgICAgICAgICAgc3RhcnQgKz0gMQorICAgICAgICAjIFhYWCBwcmUtaW5zdGFsbCBzY3JpcHRzIGFyZSBjdXJyZW50bHkgcmVmdXNlZCBpbiBmaW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgIyAgICAgYnV0IGlmIHRoaXMgZmVhdHVyZSBpcyBjb21wbGV0ZWQsIGl0IHdpbGwgYWxzbyBuZWVkIHRvIGFkZAorICAgICAgICAjICAgICBlbnRyaWVzIGZvciBlYWNoIHZlcnNpb24gYXMgdGhlIGFib3ZlIGNvZGUgZG9lcwogICAgICAgICBpZiBzZWxmLnByZV9pbnN0YWxsX3NjcmlwdDoKICAgICAgICAgICAgIHNjcmlwdGZuID0gb3MucGF0aC5qb2luKHNlbGYuYmRpc3RfZGlyLCAicHJlaW5zdGFsbC5iYXQiKQogICAgICAgICAgICAgZiA9IG9wZW4oc2NyaXB0Zm4sICJ3IikKQEAgLTM1MSw3ICs0MjAsNiBAQAogICAgICAgICAjIHNlZSAiRGlhbG9nIFN0eWxlIEJpdHMiCiAgICAgICAgIG1vZGFsID0gMyAgICAgICMgdmlzaWJsZSB8IG1vZGFsCiAgICAgICAgIG1vZGVsZXNzID0gMSAgICMgdmlzaWJsZQotICAgICAgICB0cmFja19kaXNrX3NwYWNlID0gMzIKIAogICAgICAgICAjIFVJIGN1c3RvbWl6YXRpb24gcHJvcGVydGllcwogICAgICAgICBhZGRfZGF0YShkYiwgIlByb3BlcnR5IiwKQEAgLTM4MCw3ICs0NDgsNyBAQAogICAgICAgICAgICAgICAgICBbKCJQcmVwYXJlRGxnIiwgIk5vdCBQcml2aWxlZ2VkIG9yIFdpbmRvd3M5eCBvciBJbnN0YWxsZWQiLCAxNDApLAogICAgICAgICAgICAgICAgICAgKCJXaGljaFVzZXJzRGxnIiwgIlByaXZpbGVnZWQgYW5kIG5vdCBXaW5kb3dzOXggYW5kIG5vdCBJbnN0YWxsZWQiLCAxNDEpLAogICAgICAgICAgICAgICAgICAgIyBJbiB0aGUgdXNlciBpbnRlcmZhY2UsIGFzc3VtZSBhbGwtdXNlcnMgaW5zdGFsbGF0aW9uIGlmIHByaXZpbGVnZWQuCi0gICAgICAgICAgICAgICAgICAoIlNlbGVjdERpcmVjdG9yeURsZyIsICJOb3QgSW5zdGFsbGVkIiwgMTIzMCksCisgICAgICAgICAgICAgICAgICAoIlNlbGVjdEZlYXR1cmVzRGxnIiwgIk5vdCBJbnN0YWxsZWQiLCAxMjMwKSwKICAgICAgICAgICAgICAgICAgICMgWFhYIG5vIHN1cHBvcnQgZm9yIHJlc3VtZSBpbnN0YWxsYXRpb25zIHlldAogICAgICAgICAgICAgICAgICAgIygiUmVzdW1lRGxnIiwgIkluc3RhbGxlZCBBTkQgKFJFU1VNRSBPUiBQcmVzZWxlY3RlZCkiLCAxMjQwKSwKICAgICAgICAgICAgICAgICAgICgiTWFpbnRlbmFuY2VUeXBlRGxnIiwgIkluc3RhbGxlZCBBTkQgTk9UIFJFU1VNRSBBTkQgTk9UIFByZXNlbGVjdGVkIiwgMTI1MCksCkBAIC01MDMsMzMgKzU3MSw0OSBAQAogICAgICAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJDYW5jZWxEbGciKQogCiAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIFRhcmdldCBkaXJlY3Rvcnkgc2VsZWN0aW9uCi0gICAgICAgIHNlbGRsZyA9IFB5RGlhbG9nKGRiLCAiU2VsZWN0RGlyZWN0b3J5RGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAorICAgICAgICAjIEZlYXR1cmUgKFB5dGhvbiBkaXJlY3RvcnkpIHNlbGVjdGlvbgorICAgICAgICBzZWxkbGcgPSBQeURpYWxvZyhkYiwgIlNlbGVjdEZlYXR1cmVzRGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIk5leHQiLCAiTmV4dCIsICJDYW5jZWwiKQotICAgICAgICBzZWxkbGcudGl0bGUoIlNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkiKQorICAgICAgICBzZWxkbGcudGl0bGUoIlNlbGVjdCBQeXRob24gSW5zdGFsbGF0aW9ucyIpCiAKLSAgICAgICAgdmVyc2lvbiA9IHN5cy52ZXJzaW9uWzozXSsiICIKLSAgICAgICAgc2VsZGxnLnRleHQoIkhpbnQiLCAxNSwgMzAsIDMwMCwgNDAsIDMsCi0gICAgICAgICAgICAgICAgIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgc2hvdWxkIGNvbnRhaW4gYSBQeXRob24gJXNpbnN0YWxsYXRpb24iICUgdmVyc2lvbikKKyAgICAgICAgc2VsZGxnLnRleHQoIkhpbnQiLCAxNSwgMzAsIDMwMCwgMjAsIDMsCisgICAgICAgICAgICAgICAgICAgICJTZWxlY3QgdGhlIFB5dGhvbiBsb2NhdGlvbnMgd2hlcmUgJXMgc2hvdWxkIGJlIGluc3RhbGxlZC4iCisgICAgICAgICAgICAgICAgICAgICUgc2VsZi5kaXN0cmlidXRpb24uZ2V0X2Z1bGxuYW1lKCkpCiAKICAgICAgICAgc2VsZGxnLmJhY2soIjwgQmFjayIsIE5vbmUsIGFjdGl2ZT0wKQogICAgICAgICBjID0gc2VsZGxnLm5leHQoIk5leHQgPiIsICJDYW5jZWwiKQotICAgICAgICBjLmV2ZW50KCJTZXRUYXJnZXRQYXRoIiwgIlRBUkdFVERJUiIsIG9yZGVyaW5nPTEpCi0gICAgICAgIGMuZXZlbnQoIlNwYXduV2FpdERpYWxvZyIsICJXYWl0Rm9yQ29zdGluZ0RsZyIsIG9yZGVyaW5nPTIpCi0gICAgICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJSZXR1cm4iLCBvcmRlcmluZz0zKQotCi0gICAgICAgIGMgPSBzZWxkbGcuY2FuY2VsKCJDYW5jZWwiLCAiRGlyZWN0b3J5Q29tYm8iKQorICAgICAgICBvcmRlciA9IDEKKyAgICAgICAgYy5ldmVudCgiW1RBUkdFVERJUl0iLCAiW1NvdXJjZURpcl0iLCBvcmRlcmluZz1vcmRlcikKKyAgICAgICAgZm9yIHZlcnNpb24gaW4gc2VsZi52ZXJzaW9ucyArIFtzZWxmLm90aGVyX3ZlcnNpb25dOgorICAgICAgICAgICAgb3JkZXIgKz0gMQorICAgICAgICAgICAgYy5ldmVudCgiW1RBUkdFVERJUl0iLCAiW1RBUkdFVERJUiVzXSIgJSB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAiRkVBVFVSRV9TRUxFQ1RFRCBBTkQgJlB5dGhvbiVzPTMiICUgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmc9b3JkZXIpCisgICAgICAgIGMuZXZlbnQoIlNwYXduV2FpdERpYWxvZyIsICJXYWl0Rm9yQ29zdGluZ0RsZyIsIG9yZGVyaW5nPW9yZGVyICsgMSkKKyAgICAgICAgYy5ldmVudCgiRW5kRGlhbG9nIiwgIlJldHVybiIsIG9yZGVyaW5nPW9yZGVyICsgMikKKyAgICAgICAgYyA9IHNlbGRsZy5jYW5jZWwoIkNhbmNlbCIsICJGZWF0dXJlcyIpCiAgICAgICAgIGMuZXZlbnQoIlNwYXduRGlhbG9nIiwgIkNhbmNlbERsZyIpCiAKLSAgICAgICAgc2VsZGxnLmNvbnRyb2woIkRpcmVjdG9yeUNvbWJvIiwgIkRpcmVjdG9yeUNvbWJvIiwgMTUsIDcwLCAyNzIsIDgwLCAzOTMyMTksCi0gICAgICAgICAgICAgICAgICAgICAgICJUQVJHRVRESVIiLCBOb25lLCAiRGlyZWN0b3J5TGlzdCIsIE5vbmUpCi0gICAgICAgIHNlbGRsZy5jb250cm9sKCJEaXJlY3RvcnlMaXN0IiwgIkRpcmVjdG9yeUxpc3QiLCAxNSwgOTAsIDMwOCwgMTM2LCAzLCAiVEFSR0VURElSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgIlBhdGhFZGl0IiwgTm9uZSkKLSAgICAgICAgc2VsZGxnLmNvbnRyb2woIlBhdGhFZGl0IiwgIlBhdGhFZGl0IiwgMTUsIDIzMCwgMzA2LCAxNiwgMywgIlRBUkdFVERJUiIsIE5vbmUsICJOZXh0IiwgTm9uZSkKLSAgICAgICAgYyA9IHNlbGRsZy5wdXNoYnV0dG9uKCJVcCIsIDMwNiwgNzAsIDE4LCAxOCwgMywgIlVwIiwgTm9uZSkKLSAgICAgICAgYy5ldmVudCgiRGlyZWN0b3J5TGlzdFVwIiwgIjAiKQotICAgICAgICBjID0gc2VsZGxnLnB1c2hidXR0b24oIk5ld0RpciIsIDMyNCwgNzAsIDMwLCAxOCwgMywgIk5ldyIsIE5vbmUpCi0gICAgICAgIGMuZXZlbnQoIkRpcmVjdG9yeUxpc3ROZXciLCAiMCIpCisgICAgICAgIGMgPSBzZWxkbGcuY29udHJvbCgiRmVhdHVyZXMiLCAiU2VsZWN0aW9uVHJlZSIsIDE1LCA2MCwgMzAwLCAxMjAsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkVBVFVSRSIsIE5vbmUsICJQYXRoRWRpdCIsIE5vbmUpCisgICAgICAgIGMuZXZlbnQoIltGRUFUVVJFX1NFTEVDVEVEXSIsICIxIikKKyAgICAgICAgdmVyID0gc2VsZi5vdGhlcl92ZXJzaW9uCisgICAgICAgIGluc3RhbGxfb3RoZXJfY29uZCA9ICJGRUFUVVJFX1NFTEVDVEVEIEFORCAmUHl0aG9uJXM9MyIgJSB2ZXIKKyAgICAgICAgZG9udF9pbnN0YWxsX290aGVyX2NvbmQgPSAiRkVBVFVSRV9TRUxFQ1RFRCBBTkQgJlB5dGhvbiVzPD4zIiAlIHZlcgorCisgICAgICAgIGMgPSBzZWxkbGcudGV4dCgiT3RoZXIiLCAxNSwgMjAwLCAzMDAsIDE1LCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgIlByb3ZpZGUgYW4gYWx0ZXJuYXRlIFB5dGhvbiBsb2NhdGlvbiIpCisgICAgICAgIGMuY29uZGl0aW9uKCJFbmFibGUiLCBpbnN0YWxsX290aGVyX2NvbmQpCisgICAgICAgIGMuY29uZGl0aW9uKCJTaG93IiwgaW5zdGFsbF9vdGhlcl9jb25kKQorICAgICAgICBjLmNvbmRpdGlvbigiRGlzYWJsZSIsIGRvbnRfaW5zdGFsbF9vdGhlcl9jb25kKQorICAgICAgICBjLmNvbmRpdGlvbigiSGlkZSIsIGRvbnRfaW5zdGFsbF9vdGhlcl9jb25kKQorCisgICAgICAgIGMgPSBzZWxkbGcuY29udHJvbCgiUGF0aEVkaXQiLCAiUGF0aEVkaXQiLCAxNSwgMjE1LCAzMDAsIDE2LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRBUkdFVERJUiIgKyB2ZXIsIE5vbmUsICJOZXh0IiwgTm9uZSkKKyAgICAgICAgYy5jb25kaXRpb24oIkVuYWJsZSIsIGluc3RhbGxfb3RoZXJfY29uZCkKKyAgICAgICAgYy5jb25kaXRpb24oIlNob3ciLCBpbnN0YWxsX290aGVyX2NvbmQpCisgICAgICAgIGMuY29uZGl0aW9uKCJEaXNhYmxlIiwgZG9udF9pbnN0YWxsX290aGVyX2NvbmQpCisgICAgICAgIGMuY29uZGl0aW9uKCJIaWRlIiwgZG9udF9pbnN0YWxsX290aGVyX2NvbmQpCiAKICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgICMgRGlzayBjb3N0CkBAIC02NDUsNyArNzI5LDEwIEBACiAKICAgICBkZWYgZ2V0X2luc3RhbGxlcl9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICMgRmFjdG9yZWQgb3V0IHRvIGFsbG93IG92ZXJyaWRpbmcgaW4gc3ViY2xhc3NlcwotICAgICAgICBiYXNlX25hbWUgPSAiJXMuJXMtcHklcy5tc2kiICUgKGZ1bGxuYW1lLCBzZWxmLnBsYXRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF92ZXJzaW9uKQorICAgICAgICBpZiBzZWxmLnRhcmdldF92ZXJzaW9uOgorICAgICAgICAgICAgYmFzZV9uYW1lID0gIiVzLiVzLXB5JXMubXNpIiAlIChmdWxsbmFtZSwgc2VsZi5wbGF0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X3ZlcnNpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX25hbWUgPSAiJXMuJXMubXNpIiAlIChmdWxsbmFtZSwgc2VsZi5wbGF0X25hbWUpCiAgICAgICAgIGluc3RhbGxlcl9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZGlzdF9kaXIsIGJhc2VfbmFtZSkKICAgICAgICAgcmV0dXJuIGluc3RhbGxlcl9uYW1lCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfcnBtLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3JwbS5weQppbmRleCA5YWE3MDMwLi4wYmJhMzYzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfcnBtLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9ycG0ucHkKQEAgLTMsMTggKzMsMTcgQEAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYmRpc3RfcnBtJyBjb21tYW5kIChjcmVhdGUgUlBNIHNvdXJjZSBhbmQgYmluYXJ5CiBkaXN0cmlidXRpb25zKS4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCBzdHJpbmcKLWZyb20gdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5kZWJ1ZyBpbXBvcnQgREVCVUcKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCB3cml0ZV9maWxlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl92ZXJzaW9uCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNPcHRpb25FcnJvciwgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3R1dGlsc0ZpbGVFcnJvciwgRGlzdHV0aWxzRXhlY0Vycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiBjbGFzcyBiZGlzdF9ycG0gKENvbW1hbmQpOgpAQCAtMTI1LDEwICsxMjQsMTMgQEAKICAgICAgICAgIyBBbGxvdyBhIHBhY2thZ2VyIHRvIGV4cGxpY2l0bHkgZm9yY2UgYW4gYXJjaGl0ZWN0dXJlCiAgICAgICAgICgnZm9yY2UtYXJjaD0nLCBOb25lLAogICAgICAgICAgIkZvcmNlIGFuIGFyY2hpdGVjdHVyZSBvbnRvIHRoZSBSUE0gYnVpbGQgcHJvY2VzcyIpLAotICAgICAgIF0KKworICAgICAgICAoJ3F1aWV0JywgJ3EnLAorICAgICAgICAgIlJ1biB0aGUgSU5TVEFMTCBwaGFzZSBvZiBSUE0gYnVpbGRpbmcgaW4gcXVpZXQgbW9kZSIpLAorICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2tlZXAtdGVtcCcsICd1c2UtcnBtLW9wdC1mbGFncycsICdycG0zLW1vZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAnbm8tYXV0b3JlcSddCisgICAgICAgICAgICAgICAgICAgICAgICduby1hdXRvcmVxJywgJ3F1aWV0J10KIAogICAgIG5lZ2F0aXZlX29wdCA9IHsnbm8ta2VlcC10ZW1wJzogJ2tlZXAtdGVtcCcsCiAgICAgICAgICAgICAgICAgICAgICduby1ycG0tb3B0LWZsYWdzJzogJ3VzZS1ycG0tb3B0LWZsYWdzJywKQEAgLTE3OCw2ICsxODAsNyBAQAogICAgICAgICBzZWxmLm5vX2F1dG9yZXEgPSAwCiAKICAgICAgICAgc2VsZi5mb3JjZV9hcmNoID0gTm9uZQorICAgICAgICBzZWxmLnF1aWV0ID0gMAogCiAgICAgIyBpbml0aWFsaXplX29wdGlvbnMoKQogCkBAIC0yMjMsNyArMjI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfY29udGFjdF9lbWFpbCgpKSkKICAgICAgICAgc2VsZi5lbnN1cmVfc3RyaW5nKCdwYWNrYWdlcicpCiAgICAgICAgIHNlbGYuZW5zdXJlX3N0cmluZ19saXN0KCdkb2NfZmlsZXMnKQotICAgICAgICBpZiB0eXBlKHNlbGYuZG9jX2ZpbGVzKSBpcyBMaXN0VHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmRvY19maWxlcywgbGlzdCk6CiAgICAgICAgICAgICBmb3IgcmVhZG1lIGluICgnUkVBRE1FJywgJ1JFQURNRS50eHQnKToKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyZWFkbWUpIGFuZCByZWFkbWUgbm90IGluIHNlbGYuZG9jX2ZpbGVzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY19maWxlcy5hcHBlbmQocmVhZG1lKQpAQCAtMzI0LDYgKzMyNyw3IEBACiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCcvdXNyL2Jpbi9ycG1idWlsZCcpIG9yIFwKICAgICAgICAgICAgb3MucGF0aC5leGlzdHMoJy9iaW4vcnBtYnVpbGQnKToKICAgICAgICAgICAgIHJwbV9jbWQgPSBbJ3JwbWJ1aWxkJ10KKwogICAgICAgICBpZiBzZWxmLnNvdXJjZV9vbmx5OiAjIHdoYXQga2luZCBvZiBSUE1zPwogICAgICAgICAgICAgcnBtX2NtZC5hcHBlbmQoJy1icycpCiAgICAgICAgIGVsaWYgc2VsZi5iaW5hcnlfb25seToKQEAgLTMzNSw2ICszMzksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ190b3BkaXIgJXMnICUgb3MucGF0aC5hYnNwYXRoKHNlbGYucnBtX2Jhc2UpXSkKICAgICAgICAgaWYgbm90IHNlbGYua2VlcF90ZW1wOgogICAgICAgICAgICAgcnBtX2NtZC5hcHBlbmQoJy0tY2xlYW4nKQorCisgICAgICAgIGlmIHNlbGYucXVpZXQ6CisgICAgICAgICAgICBycG1fY21kLmFwcGVuZCgnLS1xdWlldCcpCisKICAgICAgICAgcnBtX2NtZC5hcHBlbmQoc3BlY19wYXRoKQogICAgICAgICAjIERldGVybWluZSB0aGUgYmluYXJ5IHJwbSBuYW1lcyB0aGF0IHNob3VsZCBiZSBidWlsdCBvdXQgb2YgdGhpcyBzcGVjCiAgICAgICAgICMgZmlsZQpAQCAtMzQ3LDIyICszNTUsMjYgQEAKICAgICAgICAgICAgIHNyY19ycG0sIG5vbl9zcmNfcnBtLCBzcGVjX3BhdGgpCiAKICAgICAgICAgb3V0ID0gb3MucG9wZW4ocV9jbWQpCi0gICAgICAgIGJpbmFyeV9ycG1zID0gW10KLSAgICAgICAgc291cmNlX3JwbSA9IE5vbmUKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBvdXQucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGwgPSBzdHJpbmcuc3BsaXQoc3RyaW5nLnN0cmlwKGxpbmUpKQotICAgICAgICAgICAgYXNzZXJ0KGxlbihsKSA9PSAyKQotICAgICAgICAgICAgYmluYXJ5X3JwbXMuYXBwZW5kKGxbMV0pCi0gICAgICAgICAgICAjIFRoZSBzb3VyY2UgcnBtIGlzIG5hbWVkIGFmdGVyIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgc3BlYyBmaWxlCi0gICAgICAgICAgICBpZiBzb3VyY2VfcnBtIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc291cmNlX3JwbSA9IGxbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmluYXJ5X3JwbXMgPSBbXQorICAgICAgICAgICAgc291cmNlX3JwbSA9IE5vbmUKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgbGluZSA9IG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbCA9IHN0cmluZy5zcGxpdChzdHJpbmcuc3RyaXAobGluZSkpCisgICAgICAgICAgICAgICAgYXNzZXJ0KGxlbihsKSA9PSAyKQorICAgICAgICAgICAgICAgIGJpbmFyeV9ycG1zLmFwcGVuZChsWzFdKQorICAgICAgICAgICAgICAgICMgVGhlIHNvdXJjZSBycG0gaXMgbmFtZWQgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBzcGVjIGZpbGUKKyAgICAgICAgICAgICAgICBpZiBzb3VyY2VfcnBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9ycG0gPSBsWzBdCiAKLSAgICAgICAgc3RhdHVzID0gb3V0LmNsb3NlKCkKLSAgICAgICAgaWYgc3RhdHVzOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZTogJXMiICUgcmVwcihxX2NtZCkpCisgICAgICAgICAgICBzdGF0dXMgPSBvdXQuY2xvc2UoKQorICAgICAgICAgICAgaWYgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGU6ICVzIiAlIHJlcHIocV9jbWQpKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXQuY2xvc2UoKQogCiAgICAgICAgIHNlbGYuc3Bhd24ocnBtX2NtZCkKIApAQCAtNDM3LDcgKzQ0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgJ09ic29sZXRlcycsCiAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIoc2VsZiwgc3RyaW5nLmxvd2VyKGZpZWxkKSkKLSAgICAgICAgICAgIGlmIHR5cGUodmFsKSBpcyBMaXN0VHlwZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KToKICAgICAgICAgICAgICAgICBzcGVjX2ZpbGUuYXBwZW5kKCclczogJXMnICUgKGZpZWxkLCBzdHJpbmcuam9pbih2YWwpKSkKICAgICAgICAgICAgIGVsaWYgdmFsIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHNwZWNfZmlsZS5hcHBlbmQoJyVzOiAlcycgJSAoZmllbGQsIHZhbCkpCkBAIC00ODgsMTMgKzUwMCwxMyBAQAogICAgICAgICAjIHRoYXQgd2Ugb3BlbiBhbmQgaW50ZXJwb2xhdGUgaW50byB0aGUgc3BlYyBmaWxlLCBidXQgdGhlIGRlZmF1bHRzCiAgICAgICAgICMgYXJlIGp1c3QgdGV4dCB0aGF0IHdlIGRyb3AgaW4gYXMtaXMuICBIbW1tLgogCisgICAgICAgIGluc3RhbGxfY21kID0gKCclcyBpbnN0YWxsIC1PMSAtLXJvb3Q9JFJQTV9CVUlMRF9ST09UICcKKyAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVjb3JkPUlOU1RBTExFRF9GSUxFUycpICUgZGVmX3NldHVwX2NhbGwKKwogICAgICAgICBzY3JpcHRfb3B0aW9ucyA9IFsKICAgICAgICAgICAgICgncHJlcCcsICdwcmVwX3NjcmlwdCcsICIlc2V0dXAgLW4gJXtuYW1lfS0le3VubWFuZ2xlZF92ZXJzaW9ufSIpLAogICAgICAgICAgICAgKCdidWlsZCcsICdidWlsZF9zY3JpcHQnLCBkZWZfYnVpbGQpLAotICAgICAgICAgICAgKCdpbnN0YWxsJywgJ2luc3RhbGxfc2NyaXB0JywKLSAgICAgICAgICAgICAoIiVzIGluc3RhbGwgIgotICAgICAgICAgICAgICAiLS1yb290PSRSUE1fQlVJTERfUk9PVCAiCi0gICAgICAgICAgICAgICItLXJlY29yZD1JTlNUQUxMRURfRklMRVMiKSAlIGRlZl9zZXR1cF9jYWxsKSwKKyAgICAgICAgICAgICgnaW5zdGFsbCcsICdpbnN0YWxsX3NjcmlwdCcsIGluc3RhbGxfY21kKSwKICAgICAgICAgICAgICgnY2xlYW4nLCAnY2xlYW5fc2NyaXB0JywgInJtIC1yZiAkUlBNX0JVSUxEX1JPT1QiKSwKICAgICAgICAgICAgICgndmVyaWZ5c2NyaXB0JywgJ3ZlcmlmeV9zY3JpcHQnLCBOb25lKSwKICAgICAgICAgICAgICgncHJlJywgJ3ByZV9pbnN0YWxsJywgTm9uZSksCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3Rfd2luaW5zdC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF93aW5pbnN0LnB5CmluZGV4IDEyOGUxOTkuLjM2ZDQ2YmQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF93aW5pbnN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF93aW5pbnN0LnB5CkBAIC0zLDE3ICszLDE5IEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2JkaXN0X3dpbmluc3QnIGNvbW1hbmQ6IGNyZWF0ZSBhIHdpbmRvd3MgaW5zdGFsbGVyCiBleGUtcHJvZ3JhbS4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCBzdHJpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworCitmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl92ZXJzaW9uCisKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQotZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IGNyZWF0ZV90cmVlLCByZW1vdmVfdHJlZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9weXRob25fdmVyc2lvbgorZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IHJlbW92ZV90cmVlCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yLCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIAogY2xhc3MgYmRpc3Rfd2luaW5zdCAoQ29tbWFuZCk6CiAKQEAgLTM1NCw1ICszNTYsOSBAQAogICAgICAgICAgICAgc2ZpeCA9ICcnCiAKICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAid2luaW5zdC0lLjFmJXMuZXhlIiAlIChidiwgc2ZpeCkpCi0gICAgICAgIHJldHVybiBvcGVuKGZpbGVuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAjIGNsYXNzIGJkaXN0X3dpbmluc3QKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZC5weQppbmRleCA3NDYyZTkzLi5mODRiZjM1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkLnB5CkBAIC0yLDIyICsyLDE5IEBACiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYnVpbGQnIGNvbW1hbmQuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgc3lzLCBvcworCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGdldF9wbGF0Zm9ybQogCi0KLWRlZiBzaG93X2NvbXBpbGVycyAoKToKK2RlZiBzaG93X2NvbXBpbGVycygpOgogICAgIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgc2hvd19jb21waWxlcnMKICAgICBzaG93X2NvbXBpbGVycygpCiAKLQotY2xhc3MgYnVpbGQgKENvbW1hbmQpOgorY2xhc3MgYnVpbGQoQ29tbWFuZCk6CiAKICAgICBkZXNjcmlwdGlvbiA9ICJidWlsZCBldmVyeXRoaW5nIG5lZWRlZCB0byBpbnN0YWxsIgogCkBAIC01NSw3ICs1Miw3IEBACiAgICAgICAgICAibGlzdCBhdmFpbGFibGUgY29tcGlsZXJzIiwgc2hvd19jb21waWxlcnMpLAogICAgICAgICBdCiAKLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmJ1aWxkX2Jhc2UgPSAnYnVpbGQnCiAgICAgICAgICMgdGhlc2UgYXJlIGRlY2lkZWQgb25seSBhZnRlciAnYnVpbGRfYmFzZScgaGFzIGl0cyBmaW5hbCB2YWx1ZQogICAgICAgICAjICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciBvciBjbGllbnQpCkBAIC03MCw4ICs2Nyw3IEBACiAgICAgICAgIHNlbGYuZm9yY2UgPSAwCiAgICAgICAgIHNlbGYuZXhlY3V0YWJsZSA9IE5vbmUKIAotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKLQorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnBsYXRfbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5wbGF0X25hbWUgPSBnZXRfcGxhdGZvcm0oKQogICAgICAgICBlbHNlOgpAQCAtMTIwLDExICsxMTYsOCBAQAogCiAgICAgICAgIGlmIHNlbGYuZXhlY3V0YWJsZSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5leGVjdXRhYmxlID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY3V0YWJsZSkKLSAgICAjIGZpbmFsaXplX29wdGlvbnMgKCkKIAotCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjIFJ1biBhbGwgcmVsZXZhbnQgc3ViLWNvbW1hbmRzLiAgVGhpcyB3aWxsIGJlIHNvbWUgc3Vic2V0IG9mOgogICAgICAgICAjICAtIGJ1aWxkX3B5ICAgICAgLSBwdXJlIFB5dGhvbiBtb2R1bGVzCiAgICAgICAgICMgIC0gYnVpbGRfY2xpYiAgICAtIHN0YW5kYWxvbmUgQyBsaWJyYXJpZXMKQEAgLTEzMyw3ICsxMjYsNiBAQAogICAgICAgICBmb3IgY21kX25hbWUgaW4gc2VsZi5nZXRfc3ViX2NvbW1hbmRzKCk6CiAgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKGNtZF9uYW1lKQogCi0KICAgICAjIC0tIFByZWRpY2F0ZXMgZm9yIHRoZSBzdWItY29tbWFuZCBsaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgZGVmIGhhc19wdXJlX21vZHVsZXMgKHNlbGYpOgpAQCAtMTQ4LDExICsxNDAsOCBAQAogICAgIGRlZiBoYXNfc2NyaXB0cyAoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfc2NyaXB0cygpCiAKLQogICAgIHN1Yl9jb21tYW5kcyA9IFsoJ2J1aWxkX3B5JywgICAgICBoYXNfcHVyZV9tb2R1bGVzKSwKICAgICAgICAgICAgICAgICAgICAgKCdidWlsZF9jbGliJywgICAgaGFzX2NfbGlicmFyaWVzKSwKICAgICAgICAgICAgICAgICAgICAgKCdidWlsZF9leHQnLCAgICAgaGFzX2V4dF9tb2R1bGVzKSwKICAgICAgICAgICAgICAgICAgICAgKCdidWlsZF9zY3JpcHRzJywgaGFzX3NjcmlwdHMpLAogICAgICAgICAgICAgICAgICAgIF0KLQotIyBjbGFzcyBidWlsZApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2NsaWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfY2xpYi5weQppbmRleCA2OWQ4Yzc1Li45OGExNzI2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfY2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfY2xpYi5weQpAQCAtNCw4ICs0LDYgQEAKIHRoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIG1vZHVsZSBkaXN0cmlidXRpb24gYW5kIG5lZWRlZCBieSBhbiBleHRlbnNpb24KIG1vZHVsZS4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIApAQCAtMTgsMjYgKzE2LDI1IEBACiAjIHR3byBtb2R1bGVzLCBtYWlubHkgYmVjYXVzZSBhIG51bWJlciBvZiBzdWJ0bGUgZGV0YWlscyBjaGFuZ2VkIGluIHRoZQogIyBjdXQgJ24gcGFzdGUuICBTaWdoLgogCi1pbXBvcnQgb3MsIHN0cmluZwotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IG9zCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKK2Zyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBzaG93X2NvbXBpbGVycyAoKToKK2RlZiBzaG93X2NvbXBpbGVycygpOgogICAgIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgc2hvd19jb21waWxlcnMKICAgICBzaG93X2NvbXBpbGVycygpCiAKIAotY2xhc3MgYnVpbGRfY2xpYiAoQ29tbWFuZCk6CitjbGFzcyBidWlsZF9jbGliKENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiYnVpbGQgQy9DKysgbGlicmFyaWVzIHVzZWQgYnkgUHl0aG9uIGV4dGVuc2lvbnMiCiAKICAgICB1c2VyX29wdGlvbnMgPSBbCi0gICAgICAgICgnYnVpbGQtY2xpYicsICdiJywKKyAgICAgICAgKCdidWlsZC1jbGliPScsICdiJywKICAgICAgICAgICJkaXJlY3RvcnkgdG8gYnVpbGQgQy9DKysgbGlicmFyaWVzIHRvIiksCi0gICAgICAgICgnYnVpbGQtdGVtcCcsICd0JywKKyAgICAgICAgKCdidWlsZC10ZW1wPScsICd0JywKICAgICAgICAgICJkaXJlY3RvcnkgdG8gcHV0IHRlbXBvcmFyeSBidWlsZCBieS1wcm9kdWN0cyIpLAogICAgICAgICAoJ2RlYnVnJywgJ2cnLAogICAgICAgICAgImNvbXBpbGUgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24iKSwKQEAgLTU0LDcgKzUxLDcgQEAKICAgICAgICAgICJsaXN0IGF2YWlsYWJsZSBjb21waWxlcnMiLCBzaG93X2NvbXBpbGVycyksCiAgICAgICAgIF0KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYnVpbGRfY2xpYiA9IE5vbmUKICAgICAgICAgc2VsZi5idWlsZF90ZW1wID0gTm9uZQogCkBAIC02OSwxMSArNjYsOCBAQAogICAgICAgICBzZWxmLmZvcmNlID0gMAogICAgICAgICBzZWxmLmNvbXBpbGVyID0gTm9uZQogCi0gICAgIyBpbml0aWFsaXplX29wdGlvbnMoKQogCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6Ci0KKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUaGlzIG1pZ2h0IGJlIGNvbmZ1c2luZzogYm90aCBidWlsZC1jbGliIGFuZCBidWlsZC10ZW1wIGRlZmF1bHQKICAgICAgICAgIyB0byBidWlsZC10ZW1wIGFzIGRlZmluZWQgYnkgdGhlICJidWlsZCIgY29tbWFuZC4gIFRoaXMgaXMgYmVjYXVzZQogICAgICAgICAjIEkgdGhpbmsgdGhhdCBDIGxpYnJhcmllcyBhcmUgcmVhbGx5IGp1c3QgdGVtcG9yYXJ5IGJ1aWxkCkBAIC05MiwxOCArODYsMTMgQEAKIAogICAgICAgICBpZiBzZWxmLmluY2x1ZGVfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5pbmNsdWRlX2RpcnMgPSBzZWxmLmRpc3RyaWJ1dGlvbi5pbmNsdWRlX2RpcnMgb3IgW10KLSAgICAgICAgaWYgdHlwZShzZWxmLmluY2x1ZGVfZGlycykgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gc3RyaW5nLnNwbGl0KHNlbGYuaW5jbHVkZV9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmluY2x1ZGVfZGlycywgc3RyKToKKyAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gc2VsZi5pbmNsdWRlX2RpcnMuc3BsaXQob3MucGF0aHNlcCkKIAogICAgICAgICAjIFhYWCBzYW1lIGFzIGZvciBidWlsZF9leHQgLS0gd2hhdCBhYm91dCAnc2VsZi5kZWZpbmUnIGFuZAogICAgICAgICAjICdzZWxmLnVuZGVmJyA/CiAKLSAgICAjIGZpbmFsaXplX29wdGlvbnMoKQotCi0KLSAgICBkZWYgcnVuIChzZWxmKToKLQorICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmxpYnJhcmllczoKICAgICAgICAgICAgIHJldHVybgogCkBAIC0xMjYsNTEgKzExNSw0NiBAQAogCiAgICAgICAgIHNlbGYuYnVpbGRfbGlicmFyaWVzKHNlbGYubGlicmFyaWVzKQogCi0gICAgIyBydW4oKQogCisgICAgZGVmIGNoZWNrX2xpYnJhcnlfbGlzdChzZWxmLCBsaWJyYXJpZXMpOgorICAgICAgICAiIiJFbnN1cmUgdGhhdCB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgaXMgdmFsaWQuCiAKLSAgICBkZWYgY2hlY2tfbGlicmFyeV9saXN0IChzZWxmLCBsaWJyYXJpZXMpOgotICAgICAgICAiIiJFbnN1cmUgdGhhdCB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgKHByZXN1bWFibHkgcHJvdmlkZWQgYXMgYQotICAgICAgICAgICBjb21tYW5kIG9wdGlvbiAnbGlicmFyaWVzJykgaXMgdmFsaWQsIGkuZS4gaXQgaXMgYSBsaXN0IG9mCi0gICAgICAgICAgIDItdHVwbGVzLCB3aGVyZSB0aGUgdHVwbGVzIGFyZSAobGlicmFyeV9uYW1lLCBidWlsZF9pbmZvX2RpY3QpLgotICAgICAgICAgICBSYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaW52YWxpZCBhbnl3aGVyZTsKLSAgICAgICAgICAganVzdCByZXR1cm5zIG90aGVyd2lzZS4iIiIKKyAgICAgICAgYGxpYnJhcnlgIGlzIHByZXN1bWFibHkgcHJvdmlkZWQgYXMgYSBjb21tYW5kIG9wdGlvbiAnbGlicmFyaWVzJy4KKyAgICAgICAgVGhpcyBtZXRob2QgY2hlY2tzIHRoYXQgaXQgaXMgYSBsaXN0IG9mIDItdHVwbGVzLCB3aGVyZSB0aGUgdHVwbGVzCisgICAgICAgIGFyZSAobGlicmFyeV9uYW1lLCBidWlsZF9pbmZvX2RpY3QpLgogCi0gICAgICAgICMgWWVjaGgsIGJsZWNjaCwgYWNrazogdGhpcyBpcyByaXBwZWQgc3RyYWlnaHQgb3V0IG9mIGJ1aWxkX2V4dC5weSwKLSAgICAgICAgIyB3aXRoIG9ubHkgbmFtZXMgY2hhbmdlZCB0byBwcm90ZWN0IHRoZSBpbm5vY2VudCEKLQotICAgICAgICBpZiB0eXBlKGxpYnJhcmllcykgaXMgbm90IExpc3RUeXBlOgorICAgICAgICBSYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgaW52YWxpZCBhbnl3aGVyZTsKKyAgICAgICAganVzdCByZXR1cm5zIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxpYnJhcmllcywgbGlzdCk6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiJ2xpYnJhcmllcycgb3B0aW9uIG11c3QgYmUgYSBsaXN0IG9mIHR1cGxlcyIKIAogICAgICAgICBmb3IgbGliIGluIGxpYnJhcmllczoKLSAgICAgICAgICAgIGlmIHR5cGUobGliKSBpcyBub3QgVHVwbGVUeXBlIGFuZCBsZW4obGliKSAhPSAyOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGliLCB0dXBsZSkgYW5kIGxlbihsaWIpICE9IDI6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzU2V0dXBFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICJlYWNoIGVsZW1lbnQgb2YgJ2xpYnJhcmllcycgbXVzdCBhIDItdHVwbGUiCiAKLSAgICAgICAgICAgIGlmIHR5cGUobGliWzBdKSBpcyBub3QgU3RyaW5nVHlwZToKKyAgICAgICAgICAgIG5hbWUsIGJ1aWxkX2luZm8gPSBsaWIKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGVsZW1lbnQgb2YgZWFjaCB0dXBsZSBpbiAnbGlicmFyaWVzJyAiICsgXAogICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgc3RyaW5nICh0aGUgbGlicmFyeSBuYW1lKSIKLSAgICAgICAgICAgIGlmICcvJyBpbiBsaWJbMF0gb3IgKG9zLnNlcCAhPSAnLycgYW5kIG9zLnNlcCBpbiBsaWJbMF0pOgorICAgICAgICAgICAgaWYgJy8nIGluIG5hbWUgb3IgKG9zLnNlcCAhPSAnLycgYW5kIG9zLnNlcCBpbiBuYW1lKToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgKCJiYWQgbGlicmFyeSBuYW1lICclcyc6ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAibWF5IG5vdCBjb250YWluIGRpcmVjdG9yeSBzZXBhcmF0b3JzIikgJSBcCiAgICAgICAgICAgICAgICAgICAgICAgbGliWzBdCiAKLSAgICAgICAgICAgIGlmIHR5cGUobGliWzFdKSBpcyBub3QgRGljdGlvbmFyeVR5cGU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShidWlsZF9pbmZvLCBkaWN0KToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgaW4gJ2xpYnJhcmllcycgIiArIFwKICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIGRpY3Rpb25hcnkgKGJ1aWxkIGluZm8pIgotICAgICAgICAjIGZvciBsaWIKIAotICAgICMgY2hlY2tfbGlicmFyeV9saXN0ICgpCi0KLQotICAgIGRlZiBnZXRfbGlicmFyeV9uYW1lcyAoc2VsZik6CisgICAgZGVmIGdldF9saWJyYXJ5X25hbWVzKHNlbGYpOgogICAgICAgICAjIEFzc3VtZSB0aGUgbGlicmFyeSBsaXN0IGlzIHZhbGlkIC0tICdjaGVja19saWJyYXJ5X2xpc3QoKScgaXMKICAgICAgICAgIyBjYWxsZWQgZnJvbSAnZmluYWxpemVfb3B0aW9ucygpJywgc28gaXQgc2hvdWxkIGJlIQotCiAgICAgICAgIGlmIG5vdCBzZWxmLmxpYnJhcmllczoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKQEAgLTE3OSwzMiArMTYzLDI1IEBACiAgICAgICAgICAgICBsaWJfbmFtZXMuYXBwZW5kKGxpYl9uYW1lKQogICAgICAgICByZXR1cm4gbGliX25hbWVzCiAKLSAgICAjIGdldF9saWJyYXJ5X25hbWVzICgpCiAKLQotICAgIGRlZiBnZXRfc291cmNlX2ZpbGVzIChzZWxmKToKKyAgICBkZWYgZ2V0X3NvdXJjZV9maWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19saWJyYXJ5X2xpc3Qoc2VsZi5saWJyYXJpZXMpCiAgICAgICAgIGZpbGVuYW1lcyA9IFtdCiAgICAgICAgIGZvciAobGliX25hbWUsIGJ1aWxkX2luZm8pIGluIHNlbGYubGlicmFyaWVzOgogICAgICAgICAgICAgc291cmNlcyA9IGJ1aWxkX2luZm8uZ2V0KCdzb3VyY2VzJykKLSAgICAgICAgICAgIGlmIChzb3VyY2VzIGlzIE5vbmUgb3IKLSAgICAgICAgICAgICAgICB0eXBlKHNvdXJjZXMpIG5vdCBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSkgKToKKyAgICAgICAgICAgIGlmIHNvdXJjZXMgaXMgTm9uZSBvciBub3QgaXNpbnN0YW5jZShzb3VyY2VzLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgKCJpbiAnbGlicmFyaWVzJyBvcHRpb24gKGxpYnJhcnkgJyVzJyksICIKICAgICAgICAgICAgICAgICAgICAgICAgIidzb3VyY2VzJyBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgYmUgIgogICAgICAgICAgICAgICAgICAgICAgICAiYSBsaXN0IG9mIHNvdXJjZSBmaWxlbmFtZXMiKSAlIGxpYl9uYW1lCiAKICAgICAgICAgICAgIGZpbGVuYW1lcy5leHRlbmQoc291cmNlcykKLQogICAgICAgICByZXR1cm4gZmlsZW5hbWVzCi0gICAgIyBnZXRfc291cmNlX2ZpbGVzICgpCiAKLQotICAgIGRlZiBidWlsZF9saWJyYXJpZXMgKHNlbGYsIGxpYnJhcmllcyk6Ci0KKyAgICBkZWYgYnVpbGRfbGlicmFyaWVzKHNlbGYsIGxpYnJhcmllcyk6CiAgICAgICAgIGZvciAobGliX25hbWUsIGJ1aWxkX2luZm8pIGluIGxpYnJhcmllczoKICAgICAgICAgICAgIHNvdXJjZXMgPSBidWlsZF9pbmZvLmdldCgnc291cmNlcycpCi0gICAgICAgICAgICBpZiBzb3VyY2VzIGlzIE5vbmUgb3IgdHlwZShzb3VyY2VzKSBub3QgaW4gKExpc3RUeXBlLCBUdXBsZVR5cGUpOgorICAgICAgICAgICAgaWYgc291cmNlcyBpcyBOb25lIG9yIG5vdCBpc2luc3RhbmNlKHNvdXJjZXMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAoImluICdsaWJyYXJpZXMnIG9wdGlvbiAobGlicmFyeSAnJXMnKSwgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICInc291cmNlcycgbXVzdCBiZSBwcmVzZW50IGFuZCBtdXN0IGJlICIgKwpAQCAtMjMwLDkgKzIwNywzIEBACiAgICAgICAgICAgICBzZWxmLmNvbXBpbGVyLmNyZWF0ZV9zdGF0aWNfbGliKG9iamVjdHMsIGxpYl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPXNlbGYuYnVpbGRfY2xpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9c2VsZi5kZWJ1ZykKLQotICAgICAgICAjIGZvciBsaWJyYXJpZXMKLQotICAgICMgYnVpbGRfbGlicmFyaWVzICgpCi0KLSMgY2xhc3MgYnVpbGRfbGliCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQppbmRleCBhZWI2Yjc0Li41NWE0Mjg4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAgICAgICAgICAgICBlbGlmIE1TVkNfVkVSU0lPTiA9PSA4OgogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEMnLCAnVlM4LjAnLCAnd2luMzJyZWxlYXNlJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWUzguMCcpKQogICAgICAgICAgICAgZWxpZiBNU1ZDX1ZFUlNJT04gPT0gNzoKICAgICAgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJywgJ1ZTNy4xJykpCkBAIC03NTMsNyArNzUzLDkgQEAKICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICAjIERvbid0IHVzZSB0aGUgZGVmYXVsdCBjb2RlIGJlbG93CiAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcwotCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnYWl4JzoKKyAgICAgICAgICAgICMgRG9uJ3QgdXNlIHRoZSBkZWZhdWx0IGNvZGUgYmVsb3cKKyAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAgICAgICAgICAgICBpZiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQppbmRleCA5ZjhhNzU5Li4wNGM0NTVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CkBAIC0yLDIxICsyLDE4IEBACiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYnVpbGRfcHknIGNvbW1hbmQuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3RyaW5nLCBvcwotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yLCBEaXN0dXRpbHNGaWxlRXJyb3IKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNvbnZlcnRfcGF0aAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi1jbGFzcyBidWlsZF9weSAoQ29tbWFuZCk6CitjbGFzcyBidWlsZF9weShDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gIlwiYnVpbGRcIiBwdXJlIFB5dGhvbiBtb2R1bGVzIChjb3B5IHRvIGJ1aWxkIGRpcmVjdG9yeSkiCiAKQEAgLTMzLDggKzMwLDcgQEAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2NvbXBpbGUnLCAnZm9yY2UnXQogICAgIG5lZ2F0aXZlX29wdCA9IHsnbm8tY29tcGlsZScgOiAnY29tcGlsZSd9CiAKLQotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYnVpbGRfbGliID0gTm9uZQogICAgICAgICBzZWxmLnB5X21vZHVsZXMgPSBOb25lCiAgICAgICAgIHNlbGYucGFja2FnZSA9IE5vbmUKQEAgLTQ0LDcgKzQwLDcgQEAKICAgICAgICAgc2VsZi5vcHRpbWl6ZSA9IDAKICAgICAgICAgc2VsZi5mb3JjZSA9IE5vbmUKIAotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2J1aWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdidWlsZF9saWInLCAnYnVpbGRfbGliJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9yY2UnLCAnZm9yY2UnKSkKQEAgLTYyLDE1ICs1OCwxNCBAQAogCiAgICAgICAgICMgSWNrLCBjb3BpZWQgc3RyYWlnaHQgZnJvbSBpbnN0YWxsX2xpYi5weSAoZmFuY3lfZ2V0b3B0IG5lZWRzIGEKICAgICAgICAgIyB0eXBlIHN5c3RlbSEgIEhlbGwsICpldmVyeXRoaW5nKiBuZWVkcyBhIHR5cGUgc3lzdGVtISEhKQotICAgICAgICBpZiB0eXBlKHNlbGYub3B0aW1pemUpIGlzIG5vdCBJbnRUeXBlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLm9wdGltaXplLCBpbnQpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYub3B0aW1pemUgPSBpbnQoc2VsZi5vcHRpbWl6ZSkKICAgICAgICAgICAgICAgICBhc3NlcnQgMCA8PSBzZWxmLm9wdGltaXplIDw9IDIKICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgQXNzZXJ0aW9uRXJyb3IpOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCAib3B0aW1pemUgbXVzdCBiZSAwLCAxLCBvciAyIgorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yKCJvcHRpbWl6ZSBtdXN0IGJlIDAsIDEsIG9yIDIiKQogCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjIFhYWCBjb3B5X2ZpbGUgYnkgZGVmYXVsdCBwcmVzZXJ2ZXMgYXRpbWUgYW5kIG10aW1lLiAgSU1ITyB0aGlzIGlzCiAgICAgICAgICMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBidXQgcGVyaGFwcyBpdCBzaG91bGQgYmUgYW4gb3B0aW9uIC0tIGluCiAgICAgICAgICMgcGFydGljdWxhciwgYSBzaXRlIGFkbWluaXN0cmF0b3IgbWlnaHQgd2FudCBpbnN0YWxsZWQgZmlsZXMgdG8KQEAgLTEwMCw5ICs5NSw3IEBACiAKICAgICAgICAgc2VsZi5ieXRlX2NvbXBpbGUoc2VsZi5nZXRfb3V0cHV0cyhpbmNsdWRlX2J5dGVjb2RlPTApKQogCi0gICAgIyBydW4gKCkKLQotICAgIGRlZiBnZXRfZGF0YV9maWxlcyAoc2VsZik6CisgICAgZGVmIGdldF9kYXRhX2ZpbGVzKHNlbGYpOgogICAgICAgICAiIiJHZW5lcmF0ZSBsaXN0IG9mICcocGFja2FnZSxzcmNfZGlyLGJ1aWxkX2RpcixmaWxlbmFtZXMpJyB0dXBsZXMiIiIKICAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgIGlmIG5vdCBzZWxmLnBhY2thZ2VzOgpAQCAtMTI2LDcgKzExOSw3IEBACiAgICAgICAgICAgICBkYXRhLmFwcGVuZCgocGFja2FnZSwgc3JjX2RpciwgYnVpbGRfZGlyLCBmaWxlbmFtZXMpKQogICAgICAgICByZXR1cm4gZGF0YQogCi0gICAgZGVmIGZpbmRfZGF0YV9maWxlcyAoc2VsZiwgcGFja2FnZSwgc3JjX2Rpcik6CisgICAgZGVmIGZpbmRfZGF0YV9maWxlcyhzZWxmLCBwYWNrYWdlLCBzcmNfZGlyKToKICAgICAgICAgIiIiUmV0dXJuIGZpbGVuYW1lcyBmb3IgcGFja2FnZSdzIGRhdGEgZmlsZXMgaW4gJ3NyY19kaXInIiIiCiAgICAgICAgIGdsb2JzID0gKHNlbGYucGFja2FnZV9kYXRhLmdldCgnJywgW10pCiAgICAgICAgICAgICAgICAgICsgc2VsZi5wYWNrYWdlX2RhdGEuZ2V0KHBhY2thZ2UsIFtdKSkKQEAgLTEzOCw5ICsxMzEsOCBAQAogICAgICAgICAgICAgZmlsZXMuZXh0ZW5kKFtmbiBmb3IgZm4gaW4gZmlsZWxpc3QgaWYgZm4gbm90IGluIGZpbGVzXSkKICAgICAgICAgcmV0dXJuIGZpbGVzCiAKLSAgICBkZWYgYnVpbGRfcGFja2FnZV9kYXRhIChzZWxmKToKKyAgICBkZWYgYnVpbGRfcGFja2FnZV9kYXRhKHNlbGYpOgogICAgICAgICAiIiJDb3B5IGRhdGEgZmlsZXMgaW50byBidWlsZCBkaXJlY3RvcnkiIiIKLSAgICAgICAgbGFzdGRpciA9IE5vbmUKICAgICAgICAgZm9yIHBhY2thZ2UsIHNyY19kaXIsIGJ1aWxkX2RpciwgZmlsZW5hbWVzIGluIHNlbGYuZGF0YV9maWxlczoKICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgZmlsZW5hbWUpCkBAIC0xNDgsMTIgKzE0MCwxMiBAQAogICAgICAgICAgICAgICAgIHNlbGYuY29weV9maWxlKG9zLnBhdGguam9pbihzcmNfZGlyLCBmaWxlbmFtZSksIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9tb2RlPUZhbHNlKQogCi0gICAgZGVmIGdldF9wYWNrYWdlX2RpciAoc2VsZiwgcGFja2FnZSk6CisgICAgZGVmIGdldF9wYWNrYWdlX2RpcihzZWxmLCBwYWNrYWdlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBkaXJlY3RvcnksIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZQogICAgICAgICAgICBkaXN0cmlidXRpb24sIHdoZXJlIHBhY2thZ2UgJ3BhY2thZ2UnIHNob3VsZCBiZSBmb3VuZAogICAgICAgICAgICAoYXQgbGVhc3QgYWNjb3JkaW5nIHRvIHRoZSAncGFja2FnZV9kaXInIG9wdGlvbiwgaWYgYW55KS4iIiIKIAotICAgICAgICBwYXRoID0gc3RyaW5nLnNwbGl0KHBhY2thZ2UsICcuJykKKyAgICAgICAgcGF0aCA9IHBhY2thZ2Uuc3BsaXQoJy4nKQogCiAgICAgICAgIGlmIG5vdCBzZWxmLnBhY2thZ2VfZGlyOgogICAgICAgICAgICAgaWYgcGF0aDoKQEAgLTE2NCw3ICsxNTYsNyBAQAogICAgICAgICAgICAgdGFpbCA9IFtdCiAgICAgICAgICAgICB3aGlsZSBwYXRoOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGRpciA9IHNlbGYucGFja2FnZV9kaXJbc3RyaW5nLmpvaW4ocGF0aCwgJy4nKV0KKyAgICAgICAgICAgICAgICAgICAgcGRpciA9IHNlbGYucGFja2FnZV9kaXJbJy4nLmpvaW4ocGF0aCldCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICB0YWlsLmluc2VydCgwLCBwYXRoWy0xXSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHBhdGhbLTFdCkBAIC0xODgsMjMgKzE4MCwxOSBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJwogCi0gICAgIyBnZXRfcGFja2FnZV9kaXIgKCkKLQotCi0gICAgZGVmIGNoZWNrX3BhY2thZ2UgKHNlbGYsIHBhY2thZ2UsIHBhY2thZ2VfZGlyKToKLQorICAgIGRlZiBjaGVja19wYWNrYWdlKHNlbGYsIHBhY2thZ2UsIHBhY2thZ2VfZGlyKToKICAgICAgICAgIyBFbXB0eSBkaXIgbmFtZSBtZWFucyBjdXJyZW50IGRpcmVjdG9yeSwgd2hpY2ggd2UgY2FuIHByb2JhYmx5CiAgICAgICAgICMgYXNzdW1lIGV4aXN0cy4gIEFsc28sIG9zLnBhdGguZXhpc3RzIGFuZCBpc2RpciBkb24ndCBrbm93IGFib3V0CiAgICAgICAgICMgbXkgImVtcHR5IHN0cmluZyBtZWFucyBjdXJyZW50IGRpciIgY29udmVudGlvbiwgc28gd2UgaGF2ZSB0bwogICAgICAgICAjIGNpcmN1bXZlbnQgdGhlbS4KICAgICAgICAgaWYgcGFja2FnZV9kaXIgIT0gIiI6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGFja2FnZV9kaXIpOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlIGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIHBhY2thZ2VfZGlyCisgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlIGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIHBhY2thZ2VfZGlyKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGFja2FnZV9kaXIpOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICgic3VwcG9zZWQgcGFja2FnZSBkaXJlY3RvcnkgJyVzJyBleGlzdHMsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGlzIG5vdCBhIGRpcmVjdG9yeSIpICUgcGFja2FnZV9kaXIKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3NlZCBwYWNrYWdlIGRpcmVjdG9yeSAnJXMnIGV4aXN0cywgIgorICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGlzIG5vdCBhIGRpcmVjdG9yeSIgJSBwYWNrYWdlX2RpcikKIAogICAgICAgICAjIFJlcXVpcmUgX19pbml0X18ucHkgZm9yIGFsbCBidXQgdGhlICJyb290IHBhY2thZ2UiCiAgICAgICAgIGlmIHBhY2thZ2U6CkBAIC0yMTksMjAgKzIwNywxNCBAQAogICAgICAgICAjIF9faW5pdF9fLnB5IGRvZXNuJ3QgZXhpc3QgLS0gc28gZG9uJ3QgcmV0dXJuIHRoZSBmaWxlbmFtZS4KICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgICMgY2hlY2tfcGFja2FnZSAoKQotCi0KLSAgICBkZWYgY2hlY2tfbW9kdWxlIChzZWxmLCBtb2R1bGUsIG1vZHVsZV9maWxlKToKKyAgICBkZWYgY2hlY2tfbW9kdWxlKHNlbGYsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobW9kdWxlX2ZpbGUpOgogICAgICAgICAgICAgbG9nLndhcm4oImZpbGUgJXMgKGZvciBtb2R1bGUgJXMpIG5vdCBmb3VuZCIsIG1vZHVsZV9maWxlLCBtb2R1bGUpCi0gICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICMgY2hlY2tfbW9kdWxlICgpCi0KLQotICAgIGRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyAoc2VsZiwgcGFja2FnZSwgcGFja2FnZV9kaXIpOgorICAgIGRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhzZWxmLCBwYWNrYWdlLCBwYWNrYWdlX2Rpcik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFja2FnZShwYWNrYWdlLCBwYWNrYWdlX2RpcikKICAgICAgICAgbW9kdWxlX2ZpbGVzID0gZ2xvYihvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsICIqLnB5IikpCiAgICAgICAgIG1vZHVsZXMgPSBbXQpAQCAtMjQ3LDggKzIyOSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiZXhjbHVkaW5nICVzIiAlIHNldHVwX3NjcmlwdCkKICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAotCi0gICAgZGVmIGZpbmRfbW9kdWxlcyAoc2VsZik6CisgICAgZGVmIGZpbmRfbW9kdWxlcyhzZWxmKToKICAgICAgICAgIiIiRmluZHMgaW5kaXZpZHVhbGx5LXNwZWNpZmllZCBQeXRob24gbW9kdWxlcywgaWUuIHRob3NlIGxpc3RlZCBieQogICAgICAgICBtb2R1bGUgbmFtZSBpbiAnc2VsZi5weV9tb2R1bGVzJy4gIFJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyAocGFja2FnZSwKICAgICAgICAgbW9kdWxlX2Jhc2UsIGZpbGVuYW1lKTogJ3BhY2thZ2UnIGlzIGEgdHVwbGUgb2YgdGhlIHBhdGggdGhyb3VnaApAQCAtMjU3LDcgKzIzOCw2IEBACiAgICAgICAgICIucHkiIGZpbGUgKHJlbGF0aXZlIHRvIHRoZSBkaXN0cmlidXRpb24gcm9vdCkgdGhhdCBpbXBsZW1lbnRzIHRoZQogICAgICAgICBtb2R1bGUuCiAgICAgICAgICIiIgotCiAgICAgICAgICMgTWFwIHBhY2thZ2UgbmFtZXMgdG8gdHVwbGVzIG9mIHVzZWZ1bCBpbmZvIGFib3V0IHRoZSBwYWNrYWdlOgogICAgICAgICAjICAgIChwYWNrYWdlX2RpciwgY2hlY2tlZCkKICAgICAgICAgIyBwYWNrYWdlX2RpciAtIHRoZSBkaXJlY3Rvcnkgd2hlcmUgd2UnbGwgZmluZCBzb3VyY2UgZmlsZXMgZm9yCkBAIC0yNzMsMTAgKzI1Myw5IEBACiAgICAgICAgICMganVzdCB0aGUgInBhY2thZ2UiIGZvciBhIHRvcGxldmVsIGlzIGVtcHR5IChlaXRoZXIgYW4gZW1wdHkKICAgICAgICAgIyBzdHJpbmcgb3IgZW1wdHkgbGlzdCwgZGVwZW5kaW5nIG9uIGNvbnRleHQpLiAgRGlmZmVyZW5jZXM6CiAgICAgICAgICMgICAtIGRvbid0IGNoZWNrIGZvciBfX2luaXRfXy5weSBpbiBkaXJlY3RvcnkgZm9yIGVtcHR5IHBhY2thZ2UKLQogICAgICAgICBmb3IgbW9kdWxlIGluIHNlbGYucHlfbW9kdWxlczoKLSAgICAgICAgICAgIHBhdGggPSBzdHJpbmcuc3BsaXQobW9kdWxlLCAnLicpCi0gICAgICAgICAgICBwYWNrYWdlID0gc3RyaW5nLmpvaW4ocGF0aFswOi0xXSwgJy4nKQorICAgICAgICAgICAgcGF0aCA9IG1vZHVsZS5zcGxpdCgnLicpCisgICAgICAgICAgICBwYWNrYWdlID0gJy4nLmpvaW4ocGF0aFswOi0xXSkKICAgICAgICAgICAgIG1vZHVsZV9iYXNlID0gcGF0aFstMV0KIAogICAgICAgICAgICAgdHJ5OgpAQCAtMzAyLDE2ICsyODEsMTIgQEAKIAogICAgICAgICByZXR1cm4gbW9kdWxlcwogCi0gICAgIyBmaW5kX21vZHVsZXMgKCkKLQotCi0gICAgZGVmIGZpbmRfYWxsX21vZHVsZXMgKHNlbGYpOgorICAgIGRlZiBmaW5kX2FsbF9tb2R1bGVzKHNlbGYpOgogICAgICAgICAiIiJDb21wdXRlIHRoZSBsaXN0IG9mIGFsbCBtb2R1bGVzIHRoYXQgd2lsbCBiZSBidWlsdCwgd2hldGhlcgogICAgICAgICB0aGV5IGFyZSBzcGVjaWZpZWQgb25lLW1vZHVsZS1hdC1hLXRpbWUgKCdzZWxmLnB5X21vZHVsZXMnKSBvcgogICAgICAgICBieSB3aG9sZSBwYWNrYWdlcyAoJ3NlbGYucGFja2FnZXMnKS4gIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzCiAgICAgICAgIChwYWNrYWdlLCBtb2R1bGUsIG1vZHVsZV9maWxlKSwganVzdCBsaWtlICdmaW5kX21vZHVsZXMoKScgYW5kCiAgICAgICAgICdmaW5kX3BhY2thZ2VfbW9kdWxlcygpJyBkby4iIiIKLQogICAgICAgICBtb2R1bGVzID0gW10KICAgICAgICAgaWYgc2VsZi5weV9tb2R1bGVzOgogICAgICAgICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5maW5kX21vZHVsZXMoKSkKQEAgLTMyMCwzMiArMjk1LDIwIEBACiAgICAgICAgICAgICAgICAgcGFja2FnZV9kaXIgPSBzZWxmLmdldF9wYWNrYWdlX2RpcihwYWNrYWdlKQogICAgICAgICAgICAgICAgIG0gPSBzZWxmLmZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIHBhY2thZ2VfZGlyKQogICAgICAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5kKG0pCi0KICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAotICAgICMgZmluZF9hbGxfbW9kdWxlcyAoKQorICAgIGRlZiBnZXRfc291cmNlX2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gW21vZHVsZVstMV0gZm9yIG1vZHVsZSBpbiBzZWxmLmZpbmRfYWxsX21vZHVsZXMoKV0KIAotCi0gICAgZGVmIGdldF9zb3VyY2VfZmlsZXMgKHNlbGYpOgotCi0gICAgICAgIG1vZHVsZXMgPSBzZWxmLmZpbmRfYWxsX21vZHVsZXMoKQotICAgICAgICBmaWxlbmFtZXMgPSBbXQotICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKG1vZHVsZVstMV0pCi0KLSAgICAgICAgcmV0dXJuIGZpbGVuYW1lcwotCi0KLSAgICBkZWYgZ2V0X21vZHVsZV9vdXRmaWxlIChzZWxmLCBidWlsZF9kaXIsIHBhY2thZ2UsIG1vZHVsZSk6CisgICAgZGVmIGdldF9tb2R1bGVfb3V0ZmlsZShzZWxmLCBidWlsZF9kaXIsIHBhY2thZ2UsIG1vZHVsZSk6CiAgICAgICAgIG91dGZpbGVfcGF0aCA9IFtidWlsZF9kaXJdICsgbGlzdChwYWNrYWdlKSArIFttb2R1bGUgKyAiLnB5Il0KICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbigqb3V0ZmlsZV9wYXRoKQogCi0KLSAgICBkZWYgZ2V0X291dHB1dHMgKHNlbGYsIGluY2x1ZGVfYnl0ZWNvZGU9MSk6CisgICAgZGVmIGdldF9vdXRwdXRzKHNlbGYsIGluY2x1ZGVfYnl0ZWNvZGU9MSk6CiAgICAgICAgIG1vZHVsZXMgPSBzZWxmLmZpbmRfYWxsX21vZHVsZXMoKQogICAgICAgICBvdXRwdXRzID0gW10KICAgICAgICAgZm9yIChwYWNrYWdlLCBtb2R1bGUsIG1vZHVsZV9maWxlKSBpbiBtb2R1bGVzOgotICAgICAgICAgICAgcGFja2FnZSA9IHN0cmluZy5zcGxpdChwYWNrYWdlLCAnLicpCisgICAgICAgICAgICBwYWNrYWdlID0gcGFja2FnZS5zcGxpdCgnLicpCiAgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuZ2V0X21vZHVsZV9vdXRmaWxlKHNlbGYuYnVpbGRfbGliLCBwYWNrYWdlLCBtb2R1bGUpCiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIGluY2x1ZGVfYnl0ZWNvZGU6CkBAIC0zNjIsMTMgKzMyNSwxMiBAQAogCiAgICAgICAgIHJldHVybiBvdXRwdXRzCiAKLQotICAgIGRlZiBidWlsZF9tb2R1bGUgKHNlbGYsIG1vZHVsZSwgbW9kdWxlX2ZpbGUsIHBhY2thZ2UpOgotICAgICAgICBpZiB0eXBlKHBhY2thZ2UpIGlzIFN0cmluZ1R5cGU6Ci0gICAgICAgICAgICBwYWNrYWdlID0gc3RyaW5nLnNwbGl0KHBhY2thZ2UsICcuJykKLSAgICAgICAgZWxpZiB0eXBlKHBhY2thZ2UpIG5vdCBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICIncGFja2FnZScgbXVzdCBiZSBhIHN0cmluZyAoZG90LXNlcGFyYXRlZCksIGxpc3QsIG9yIHR1cGxlIgorICAgIGRlZiBidWlsZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCBtb2R1bGVfZmlsZSwgcGFja2FnZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFja2FnZSwgc3RyKToKKyAgICAgICAgICAgIHBhY2thZ2UgPSBwYWNrYWdlLnNwbGl0KCcuJykKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShwYWNrYWdlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICIncGFja2FnZScgbXVzdCBiZSBhIHN0cmluZyAoZG90LXNlcGFyYXRlZCksIGxpc3QsIG9yIHR1cGxlIikKIAogICAgICAgICAjIE5vdyBwdXQgdGhlIG1vZHVsZSBzb3VyY2UgZmlsZSBpbnRvIHRoZSAiYnVpbGQiIGFyZWEgLS0gdGhpcyBpcwogICAgICAgICAjIGVhc3ksIHdlIGp1c3QgY29weSBpdCBzb21ld2hlcmUgdW5kZXIgc2VsZi5idWlsZF9saWIgKHRoZSBidWlsZApAQCAtMzc4LDkgKzM0MCw3IEBACiAgICAgICAgIHNlbGYubWtwYXRoKGRpcikKICAgICAgICAgcmV0dXJuIHNlbGYuY29weV9maWxlKG1vZHVsZV9maWxlLCBvdXRmaWxlLCBwcmVzZXJ2ZV9tb2RlPTApCiAKLQotICAgIGRlZiBidWlsZF9tb2R1bGVzIChzZWxmKToKLQorICAgIGRlZiBidWlsZF9tb2R1bGVzKHNlbGYpOgogICAgICAgICBtb2R1bGVzID0gc2VsZi5maW5kX21vZHVsZXMoKQogICAgICAgICBmb3IgKHBhY2thZ2UsIG1vZHVsZSwgbW9kdWxlX2ZpbGUpIGluIG1vZHVsZXM6CiAKQEAgLTM5MCwxMSArMzUwLDcgQEAKICAgICAgICAgICAgICMgdW5kZXIgc2VsZi5idWlsZF9saWIuKQogICAgICAgICAgICAgc2VsZi5idWlsZF9tb2R1bGUobW9kdWxlLCBtb2R1bGVfZmlsZSwgcGFja2FnZSkKIAotICAgICMgYnVpbGRfbW9kdWxlcyAoKQotCi0KLSAgICBkZWYgYnVpbGRfcGFja2FnZXMgKHNlbGYpOgotCisgICAgZGVmIGJ1aWxkX3BhY2thZ2VzKHNlbGYpOgogICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnBhY2thZ2VzOgogCiAgICAgICAgICAgICAjIEdldCBsaXN0IG9mIChwYWNrYWdlLCBtb2R1bGUsIG1vZHVsZV9maWxlKSB0dXBsZXMgYmFzZWQgb24KQEAgLTQxNSwxMCArMzcxLDcgQEAKICAgICAgICAgICAgICAgICBhc3NlcnQgcGFja2FnZSA9PSBwYWNrYWdlXwogICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfbW9kdWxlKG1vZHVsZSwgbW9kdWxlX2ZpbGUsIHBhY2thZ2UpCiAKLSAgICAjIGJ1aWxkX3BhY2thZ2VzICgpCi0KLQotICAgIGRlZiBieXRlX2NvbXBpbGUgKHNlbGYsIGZpbGVzKToKKyAgICBkZWYgYnl0ZV9jb21waWxlKHNlbGYsIGZpbGVzKToKICAgICAgICAgaWYgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICBzZWxmLndhcm4oJ2J5dGUtY29tcGlsaW5nIGlzIGRpc2FibGVkLCBza2lwcGluZy4nKQogICAgICAgICAgICAgcmV0dXJuCkBAIC00MzgsNSArMzkxLDMgQEAKICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6CiAgICAgICAgICAgICBieXRlX2NvbXBpbGUoZmlsZXMsIG9wdGltaXplPXNlbGYub3B0aW1pemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2U9c2VsZi5mb3JjZSwgcHJlZml4PXByZWZpeCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCi0KLSMgY2xhc3MgYnVpbGRfcHkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKaW5kZXggNDUzMzMwZi4uNTY3ZGY2NSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKQEAgLTIsMTMgKzIsMTAgQEAKIAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdidWlsZF9zY3JpcHRzJyBjb21tYW5kLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zLCByZQogZnJvbSBzdGF0IGltcG9ydCBTVF9NT0RFCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5kZXBfdXRpbCBpbXBvcnQgbmV3ZXIKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNvbnZlcnRfcGF0aApAQCAtNTksNiArNTYsNyBAQAogICAgICAgICBpZS4gc3RhcnRzIHdpdGggIlwjISIgYW5kIGNvbnRhaW5zICJweXRob24iKSwgdGhlbiBhZGp1c3QgdGhlIGZpcnN0CiAgICAgICAgIGxpbmUgdG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQgUHl0aG9uIGludGVycHJldGVyIGFzIHdlIGNvcHkuCiAgICAgICAgICIiIgorICAgICAgICBfc3lzY29uZmlnID0gX19pbXBvcnRfXygnc3lzY29uZmlnJykKICAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kaXIpCiAgICAgICAgIG91dGZpbGVzID0gW10KICAgICAgICAgZm9yIHNjcmlwdCBpbiBzZWxmLnNjcmlwdHM6CkBAIC05NiwxNiArOTQsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX2RpcikKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgogICAgICAgICAgICAgICAgICAgICBvdXRmID0gb3BlbihvdXRmaWxlLCAidyIpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzeXNjb25maWcucHl0aG9uX2J1aWxkOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgX3N5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGUoIiMhJXMlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmV4ZWN1dGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X2ludGVycCkpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlKCIjISVzJXNcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MucGF0aC5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQklORElSIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJXMlcyIgJSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJWRVJTSU9OIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJFWEUiKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkJJTkRJUiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVzJXMiICUgKF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlZFUlNJT04iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJFWEUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnApKQogICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlbGluZXMoZi5yZWFkbGluZXMoKSkKICAgICAgICAgICAgICAgICAgICAgb3V0Zi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2hlY2sucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOWJhYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weQpAQCAtMCwwICsxLDE0MyBAQAorIiIiZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2sKKworSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdjaGVjaycgY29tbWFuZC4KKyIiIgorX19yZXZpc2lvbl9fID0gIiRJZCQiCisKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzU2V0dXBFcnJvcgorCit0cnk6CisgICAgIyBkb2N1dGlscyBpcyBpbnN0YWxsZWQKKyAgICBmcm9tIGRvY3V0aWxzLnV0aWxzIGltcG9ydCBSZXBvcnRlcgorICAgIGZyb20gZG9jdXRpbHMucGFyc2Vycy5yc3QgaW1wb3J0IFBhcnNlcgorICAgIGZyb20gZG9jdXRpbHMgaW1wb3J0IGZyb250ZW5kCisgICAgZnJvbSBkb2N1dGlscyBpbXBvcnQgbm9kZXMKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCisgICAgY2xhc3MgU2lsZW50UmVwb3J0ZXIoUmVwb3J0ZXIpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIHJlcG9ydF9sZXZlbCwgaGFsdF9sZXZlbCwgc3RyZWFtPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLCBlbmNvZGluZz0nYXNjaWknLCBlcnJvcl9oYW5kbGVyPSdyZXBsYWNlJyk6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VzID0gW10KKyAgICAgICAgICAgIFJlcG9ydGVyLl9faW5pdF9fKHNlbGYsIHNvdXJjZSwgcmVwb3J0X2xldmVsLCBoYWx0X2xldmVsLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywgZW5jb2RpbmcsIGVycm9yX2hhbmRsZXIpCisKKyAgICAgICAgZGVmIHN5c3RlbV9tZXNzYWdlKHNlbGYsIGxldmVsLCBtZXNzYWdlLCAqY2hpbGRyZW4sICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZXMuYXBwZW5kKChsZXZlbCwgbWVzc2FnZSwgY2hpbGRyZW4sIGt3YXJncykpCisKKyAgICBIQVNfRE9DVVRJTFMgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBkb2N1dGlscyBpcyBub3QgaW5zdGFsbGVkCisgICAgSEFTX0RPQ1VUSUxTID0gRmFsc2UKKworY2xhc3MgY2hlY2soQ29tbWFuZCk6CisgICAgIiIiVGhpcyBjb21tYW5kIGNoZWNrcyB0aGUgbWV0YS1kYXRhIG9mIHRoZSBwYWNrYWdlLgorICAgICIiIgorICAgIGRlc2NyaXB0aW9uID0gKCJwZXJmb3JtIHNvbWUgY2hlY2tzIG9uIHRoZSBwYWNrYWdlIikKKyAgICB1c2VyX29wdGlvbnMgPSBbKCdtZXRhZGF0YScsICdtJywgJ1ZlcmlmeSBtZXRhLWRhdGEnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdyZXN0cnVjdHVyZWR0ZXh0JywgJ3InLAorICAgICAgICAgICAgICAgICAgICAgKCdDaGVja3MgaWYgbG9uZyBzdHJpbmcgbWV0YS1kYXRhIHN5bnRheCAnCisgICAgICAgICAgICAgICAgICAgICAgJ2FyZSByZVN0cnVjdHVyZWRUZXh0LWNvbXBsaWFudCcpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdHJpY3QnLCAncycsCisgICAgICAgICAgICAgICAgICAgICAnV2lsbCBleGl0IHdpdGggYW4gZXJyb3IgaWYgYSBjaGVjayBmYWlscycpXQorCisgICAgYm9vbGVhbl9vcHRpb25zID0gWydtZXRhZGF0YScsICdyZXN0cnVjdHVyZWR0ZXh0JywgJ3N0cmljdCddCisKKyAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICAiIiJTZXRzIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zLiIiIgorICAgICAgICBzZWxmLnJlc3RydWN0dXJlZHRleHQgPSAwCisgICAgICAgIHNlbGYubWV0YWRhdGEgPSAxCisgICAgICAgIHNlbGYuc3RyaWN0ID0gMAorICAgICAgICBzZWxmLl93YXJuaW5ncyA9IDAKKworICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FybihzZWxmLCBtc2cpOgorICAgICAgICAiIiJDb3VudHMgdGhlIG51bWJlciBvZiB3YXJuaW5ncyB0aGF0IG9jY3Vycy4iIiIKKyAgICAgICAgc2VsZi5fd2FybmluZ3MgKz0gMQorICAgICAgICByZXR1cm4gQ29tbWFuZC53YXJuKHNlbGYsIG1zZykKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIlJ1bnMgdGhlIGNvbW1hbmQuIiIiCisgICAgICAgICMgcGVyZm9ybSB0aGUgdmFyaW91cyB0ZXN0cworICAgICAgICBpZiBzZWxmLm1ldGFkYXRhOgorICAgICAgICAgICAgc2VsZi5jaGVja19tZXRhZGF0YSgpCisgICAgICAgIGlmIHNlbGYucmVzdHJ1Y3R1cmVkdGV4dDoKKyAgICAgICAgICAgIGlmIEhBU19ET0NVVElMUzoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Jlc3RydWN0dXJlZHRleHQoKQorICAgICAgICAgICAgZWxpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNTZXR1cEVycm9yKCdUaGUgZG9jdXRpbHMgcGFja2FnZSBpcyBuZWVkZWQuJykKKworICAgICAgICAjIGxldCdzIHJhaXNlIGFuIGVycm9yIGluIHN0cmljdCBtb2RlLCBpZiB3ZSBoYXZlIGF0IGxlYXN0CisgICAgICAgICMgb25lIHdhcm5pbmcKKyAgICAgICAgaWYgc2VsZi5zdHJpY3QgYW5kIHNlbGYuX3dhcm5pbmdzID4gMDoKKyAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IoJ1BsZWFzZSBjb3JyZWN0IHlvdXIgcGFja2FnZS4nKQorCisgICAgZGVmIGNoZWNrX21ldGFkYXRhKHNlbGYpOgorICAgICAgICAiIiJFbnN1cmVzIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSBhcmUgc3VwcGxpZWQuCisKKyAgICAgICAgbmFtZSwgdmVyc2lvbiwgVVJMLCAoYXV0aG9yIGFuZCBhdXRob3JfZW1haWwpIG9yCisgICAgICAgIChtYWludGFpbmVyIGFuZCBtYWludGFpbmVyX2VtYWlsKSkuCisKKyAgICAgICAgV2FybnMgaWYgYW55IGFyZSBtaXNzaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgbWV0YWRhdGEgPSBzZWxmLmRpc3RyaWJ1dGlvbi5tZXRhZGF0YQorCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBmb3IgYXR0ciBpbiAoJ25hbWUnLCAndmVyc2lvbicsICd1cmwnKToKKyAgICAgICAgICAgIGlmIG5vdCAoaGFzYXR0cihtZXRhZGF0YSwgYXR0cikgYW5kIGdldGF0dHIobWV0YWRhdGEsIGF0dHIpKToKKyAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChhdHRyKQorCisgICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgcmVxdWlyZWQgbWV0YS1kYXRhOiAlcyIgICUgJywgJy5qb2luKG1pc3NpbmcpKQorICAgICAgICBpZiBtZXRhZGF0YS5hdXRob3I6CisgICAgICAgICAgICBpZiBub3QgbWV0YWRhdGEuYXV0aG9yX2VtYWlsOgorICAgICAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGlmICdhdXRob3InIHN1cHBsaWVkLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidhdXRob3JfZW1haWwnIG11c3QgYmUgc3VwcGxpZWQgdG9vIikKKyAgICAgICAgZWxpZiBtZXRhZGF0YS5tYWludGFpbmVyOgorICAgICAgICAgICAgaWYgbm90IG1ldGFkYXRhLm1haW50YWluZXJfZW1haWw6CisgICAgICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogaWYgJ21haW50YWluZXInIHN1cHBsaWVkLCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIidtYWludGFpbmVyX2VtYWlsJyBtdXN0IGJlIHN1cHBsaWVkIHRvbyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBlaXRoZXIgKGF1dGhvciBhbmQgYXV0aG9yX2VtYWlsKSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAib3IgKG1haW50YWluZXIgYW5kIG1haW50YWluZXJfZW1haWwpICIgKworICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN1cHBsaWVkIikKKworICAgIGRlZiBjaGVja19yZXN0cnVjdHVyZWR0ZXh0KHNlbGYpOgorICAgICAgICAiIiJDaGVja3MgaWYgdGhlIGxvbmcgc3RyaW5nIGZpZWxkcyBhcmUgcmVTVC1jb21wbGlhbnQuIiIiCisgICAgICAgIGRhdGEgPSBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfbG9uZ19kZXNjcmlwdGlvbigpCisgICAgICAgIGZvciB3YXJuaW5nIGluIHNlbGYuX2NoZWNrX3JzdF9kYXRhKGRhdGEpOgorICAgICAgICAgICAgbGluZSA9IHdhcm5pbmdbLTFdLmdldCgnbGluZScpCisgICAgICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgd2FybmluZyA9IHdhcm5pbmdbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2FybmluZyA9ICclcyAobGluZSAlcyknICUgKHdhcm5pbmdbMV0sIGxpbmUpCisgICAgICAgICAgICBzZWxmLndhcm4od2FybmluZykKKworICAgIGRlZiBfY2hlY2tfcnN0X2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlJldHVybnMgd2FybmluZ3Mgd2hlbiB0aGUgcHJvdmlkZWQgZGF0YSBkb2Vzbid0IGNvbXBpbGUuIiIiCisgICAgICAgIHNvdXJjZV9wYXRoID0gU3RyaW5nSU8oKQorICAgICAgICBwYXJzZXIgPSBQYXJzZXIoKQorICAgICAgICBzZXR0aW5ncyA9IGZyb250ZW5kLk9wdGlvblBhcnNlcigpLmdldF9kZWZhdWx0X3ZhbHVlcygpCisgICAgICAgIHNldHRpbmdzLnRhYl93aWR0aCA9IDQKKyAgICAgICAgc2V0dGluZ3MucGVwX3JlZmVyZW5jZXMgPSBOb25lCisgICAgICAgIHNldHRpbmdzLnJmY19yZWZlcmVuY2VzID0gTm9uZQorICAgICAgICByZXBvcnRlciA9IFNpbGVudFJlcG9ydGVyKHNvdXJjZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5yZXBvcnRfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmhhbHRfbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1zZXR0aW5ncy53YXJuaW5nX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9c2V0dGluZ3MuZGVidWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPXNldHRpbmdzLmVycm9yX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9oYW5kbGVyPXNldHRpbmdzLmVycm9yX2VuY29kaW5nX2Vycm9yX2hhbmRsZXIpCisKKyAgICAgICAgZG9jdW1lbnQgPSBub2Rlcy5kb2N1bWVudChzZXR0aW5ncywgcmVwb3J0ZXIsIHNvdXJjZT1zb3VyY2VfcGF0aCkKKyAgICAgICAgZG9jdW1lbnQubm90ZV9zb3VyY2Uoc291cmNlX3BhdGgsIC0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIucGFyc2UoZGF0YSwgZG9jdW1lbnQpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJlcG9ydGVyLm1lc3NhZ2VzLmFwcGVuZCgoLTEsICdDb3VsZCBub3QgZmluaXNoIHRoZSBwYXJzaW5nLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCB7fSkpCisKKyAgICAgICAgcmV0dXJuIHJlcG9ydGVyLm1lc3NhZ2VzCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2xlYW4ucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2xlYW4ucHkKaW5kZXggMDIxODljNS4uOTBlZjM1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NsZWFuLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jbGVhbi5weQpAQCAtNCw4ICs0LDYgQEAKIAogIyBjb250cmlidXRlZCBieSBCYXN0aWFuIEtsZWluZWlkYW0gPGNhbHZpbkBjcy51bmktc2IuZGU+LCBhZGRlZCAyMDAwLTAzLTE4CiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKQEAgLTEzLDcgKzExLDcgQEAKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCByZW1vdmVfdHJlZQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi1jbGFzcyBjbGVhbiAoQ29tbWFuZCk6CitjbGFzcyBjbGVhbihDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBmcm9tICdidWlsZCcgY29tbWFuZCIKICAgICB1c2VyX29wdGlvbnMgPSBbCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NvbmZpZy5weQppbmRleCA1MjBjMWIwLi5kYThkYTU5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jb25maWcucHkKQEAgLTksMjEgKzksMTkgQEAKIHRoaXMgaGVhZGVyIGZpbGUgbGl2ZXMiLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nLCByZQotZnJvbSB0eXBlcyBpbXBvcnQgKgoraW1wb3J0IG9zCitpbXBvcnQgcmUKKwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyCitmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGN1c3RvbWl6ZV9jb21waWxlcgogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi1MQU5HX0VYVCA9IHsnYyc6ICcuYycsCi0gICAgICAgICAgICAnYysrJzogJy5jeHgnfQorTEFOR19FWFQgPSB7J2MnOiAnLmMnLCAnYysrJzogJy5jeHgnfQogCi1jbGFzcyBjb25maWcgKENvbW1hbmQpOgorY2xhc3MgY29uZmlnKENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAicHJlcGFyZSB0byBidWlsZCIKIApAQCAtNTMsMTIgKzUxLDEwIEBACiAgICAgIyBUaGUgdGhyZWUgc3RhbmRhcmQgY29tbWFuZCBtZXRob2RzOiBzaW5jZSB0aGUgImNvbmZpZyIgY29tbWFuZAogICAgICMgZG9lcyBub3RoaW5nIGJ5IGRlZmF1bHQsIHRoZXNlIGFyZSBlbXB0eS4KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuY29tcGlsZXIgPSBOb25lCiAgICAgICAgIHNlbGYuY2MgPSBOb25lCiAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gTm9uZQotICAgICAgICAjc2VsZi5kZWZpbmUgPSBOb25lCi0gICAgICAgICNzZWxmLnVuZGVmID0gTm9uZQogICAgICAgICBzZWxmLmxpYnJhcmllcyA9IE5vbmUKICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMgPSBOb25lCiAKQEAgLTcwLDI0ICs2NiwyMyBAQAogICAgICAgICAjIHRvIGNsZWFuIGF0IHNvbWUgcG9pbnQKICAgICAgICAgc2VsZi50ZW1wX2ZpbGVzID0gW10KIAotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKKyAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5pbmNsdWRlX2RpcnMgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gc2VsZi5kaXN0cmlidXRpb24uaW5jbHVkZV9kaXJzIG9yIFtdCi0gICAgICAgIGVsaWYgdHlwZShzZWxmLmluY2x1ZGVfZGlycykgaXMgU3RyaW5nVHlwZToKLSAgICAgICAgICAgIHNlbGYuaW5jbHVkZV9kaXJzID0gc3RyaW5nLnNwbGl0KHNlbGYuaW5jbHVkZV9kaXJzLCBvcy5wYXRoc2VwKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5pbmNsdWRlX2RpcnMsIHN0cik6CisgICAgICAgICAgICBzZWxmLmluY2x1ZGVfZGlycyA9IHNlbGYuaW5jbHVkZV9kaXJzLnNwbGl0KG9zLnBhdGhzZXApCiAKICAgICAgICAgaWYgc2VsZi5saWJyYXJpZXMgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYubGlicmFyaWVzID0gW10KLSAgICAgICAgZWxpZiB0eXBlKHNlbGYubGlicmFyaWVzKSBpcyBTdHJpbmdUeXBlOgorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5saWJyYXJpZXMsIHN0cik6CiAgICAgICAgICAgICBzZWxmLmxpYnJhcmllcyA9IFtzZWxmLmxpYnJhcmllc10KIAogICAgICAgICBpZiBzZWxmLmxpYnJhcnlfZGlycyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMgPSBbXQotICAgICAgICBlbGlmIHR5cGUoc2VsZi5saWJyYXJ5X2RpcnMpIGlzIFN0cmluZ1R5cGU6Ci0gICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycyA9IHN0cmluZy5zcGxpdChzZWxmLmxpYnJhcnlfZGlycywgb3MucGF0aHNlcCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYubGlicmFyeV9kaXJzLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMgPSBzZWxmLmxpYnJhcnlfZGlycy5zcGxpdChvcy5wYXRoc2VwKQogCi0KLSAgICBkZWYgcnVuIChzZWxmKToKKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBwYXNzCiAKIApAQCAtOTUsNyArOTAsNyBAQAogICAgICMgbG9vc2VseSBiYXNlZCBvbiBBdXRvY29uZiBtYWNyb3Mgb2Ygc2ltaWxhciBuYW1lcy4gIFN1Yi1jbGFzc2VzCiAgICAgIyBtYXkgdXNlIHRoZXNlIGZyZWVseS4KIAotICAgIGRlZiBfY2hlY2tfY29tcGlsZXIgKHNlbGYpOgorICAgIGRlZiBfY2hlY2tfY29tcGlsZXIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrIHRoYXQgJ3NlbGYuY29tcGlsZXInIHJlYWxseSBpcyBhIENDb21waWxlciBvYmplY3Q7CiAgICAgICAgIGlmIG5vdCwgbWFrZSBpdCBvbmUuCiAgICAgICAgICIiIgpAQCAtMTE0LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfbGlicmFyeV9kaXJzKHNlbGYubGlicmFyeV9kaXJzKQogCiAKLSAgICBkZWYgX2dlbl90ZW1wX3NvdXJjZWZpbGUgKHNlbGYsIGJvZHksIGhlYWRlcnMsIGxhbmcpOgorICAgIGRlZiBfZ2VuX3RlbXBfc291cmNlZmlsZShzZWxmLCBib2R5LCBoZWFkZXJzLCBsYW5nKToKICAgICAgICAgZmlsZW5hbWUgPSAiX2NvbmZpZ3Rlc3QiICsgTEFOR19FWFRbbGFuZ10KICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICJ3IikKICAgICAgICAgaWYgaGVhZGVyczoKQEAgLTEyNywxNCArMTIyLDE0IEBACiAgICAgICAgIGZpbGUuY2xvc2UoKQogICAgICAgICByZXR1cm4gZmlsZW5hbWUKIAotICAgIGRlZiBfcHJlcHJvY2VzcyAoc2VsZiwgYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsYW5nKToKKyAgICBkZWYgX3ByZXByb2Nlc3Moc2VsZiwgYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsYW5nKToKICAgICAgICAgc3JjID0gc2VsZi5fZ2VuX3RlbXBfc291cmNlZmlsZShib2R5LCBoZWFkZXJzLCBsYW5nKQogICAgICAgICBvdXQgPSAiX2NvbmZpZ3Rlc3QuaSIKICAgICAgICAgc2VsZi50ZW1wX2ZpbGVzLmV4dGVuZChbc3JjLCBvdXRdKQogICAgICAgICBzZWxmLmNvbXBpbGVyLnByZXByb2Nlc3Moc3JjLCBvdXQsIGluY2x1ZGVfZGlycz1pbmNsdWRlX2RpcnMpCiAgICAgICAgIHJldHVybiAoc3JjLCBvdXQpCiAKLSAgICBkZWYgX2NvbXBpbGUgKHNlbGYsIGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywgbGFuZyk6CisgICAgZGVmIF9jb21waWxlKHNlbGYsIGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywgbGFuZyk6CiAgICAgICAgIHNyYyA9IHNlbGYuX2dlbl90ZW1wX3NvdXJjZWZpbGUoYm9keSwgaGVhZGVycywgbGFuZykKICAgICAgICAgaWYgc2VsZi5kdW1wX3NvdXJjZToKICAgICAgICAgICAgIGR1bXBfZmlsZShzcmMsICJjb21waWxpbmcgJyVzJzoiICUgc3JjKQpAQCAtMTQzLDkgKzEzOCw4IEBACiAgICAgICAgIHNlbGYuY29tcGlsZXIuY29tcGlsZShbc3JjXSwgaW5jbHVkZV9kaXJzPWluY2x1ZGVfZGlycykKICAgICAgICAgcmV0dXJuIChzcmMsIG9iaikKIAotICAgIGRlZiBfbGluayAoc2VsZiwgYm9keSwKLSAgICAgICAgICAgICAgIGhlYWRlcnMsIGluY2x1ZGVfZGlycywKLSAgICAgICAgICAgICAgIGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBsYW5nKToKKyAgICBkZWYgX2xpbmsoc2VsZiwgYm9keSwgaGVhZGVycywgaW5jbHVkZV9kaXJzLCBsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywKKyAgICAgICAgICAgICAgbGFuZyk6CiAgICAgICAgIChzcmMsIG9iaikgPSBzZWxmLl9jb21waWxlKGJvZHksIGhlYWRlcnMsIGluY2x1ZGVfZGlycywgbGFuZykKICAgICAgICAgcHJvZyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzcmMpKVswXQogICAgICAgICBzZWxmLmNvbXBpbGVyLmxpbmtfZXhlY3V0YWJsZShbb2JqXSwgcHJvZywKQEAgLTE1OSwxMSArMTUzLDExIEBACiAKICAgICAgICAgcmV0dXJuIChzcmMsIG9iaiwgcHJvZykKIAotICAgIGRlZiBfY2xlYW4gKHNlbGYsICpmaWxlbmFtZXMpOgorICAgIGRlZiBfY2xlYW4oc2VsZiwgKmZpbGVuYW1lcyk6CiAgICAgICAgIGlmIG5vdCBmaWxlbmFtZXM6CiAgICAgICAgICAgICBmaWxlbmFtZXMgPSBzZWxmLnRlbXBfZmlsZXMKICAgICAgICAgICAgIHNlbGYudGVtcF9maWxlcyA9IFtdCi0gICAgICAgIGxvZy5pbmZvKCJyZW1vdmluZzogJXMiLCBzdHJpbmcuam9pbihmaWxlbmFtZXMpKQorICAgICAgICBsb2cuaW5mbygicmVtb3Zpbmc6ICVzIiwgJyAnLmpvaW4oZmlsZW5hbWVzKSkKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCkBAIC0xODEsNyArMTc1LDcgQEAKIAogICAgICMgWFhYIG5lZWQgYWNjZXNzIHRvIHRoZSBoZWFkZXIgc2VhcmNoIHBhdGggYW5kIG1heWJlIGRlZmF1bHQgbWFjcm9zLgogCi0gICAgZGVmIHRyeV9jcHAgKHNlbGYsIGJvZHk9Tm9uZSwgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgbGFuZz0iYyIpOgorICAgIGRlZiB0cnlfY3BwKHNlbGYsIGJvZHk9Tm9uZSwgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgbGFuZz0iYyIpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBzb3VyY2UgZmlsZSBmcm9tICdib2R5JyAoYSBzdHJpbmcgY29udGFpbmluZyBsaW5lcwogICAgICAgICBvZiBDL0MrKyBjb2RlKSBhbmQgJ2hlYWRlcnMnIChhIGxpc3Qgb2YgaGVhZGVyIGZpbGVzIHRvIGluY2x1ZGUpCiAgICAgICAgIGFuZCBydW4gaXQgdGhyb3VnaCB0aGUgcHJlcHJvY2Vzc29yLiAgUmV0dXJuIHRydWUgaWYgdGhlCkBAIC0xOTksOCArMTkzLDggQEAKICAgICAgICAgc2VsZi5fY2xlYW4oKQogICAgICAgICByZXR1cm4gb2sKIAotICAgIGRlZiBzZWFyY2hfY3BwIChzZWxmLCBwYXR0ZXJuLCBib2R5PU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsIGxhbmc9ImMiKToKKyAgICBkZWYgc2VhcmNoX2NwcChzZWxmLCBwYXR0ZXJuLCBib2R5PU5vbmUsIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgbGFuZz0iYyIpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBzb3VyY2UgZmlsZSAoanVzdCBsaWtlICd0cnlfY3BwKCknKSwgcnVuIGl0IHRocm91Z2gKICAgICAgICAgdGhlIHByZXByb2Nlc3NvciwgYW5kIHJldHVybiB0cnVlIGlmIGFueSBsaW5lIG9mIHRoZSBvdXRwdXQgbWF0Y2hlcwogICAgICAgICAncGF0dGVybicuICAncGF0dGVybicgc2hvdWxkIGVpdGhlciBiZSBhIGNvbXBpbGVkIHJlZ2V4IG9iamVjdCBvciBhCkBAIC0yMDgsMTEgKzIwMiwxMCBAQAogICAgICAgICBwcmVwcm9jZXNzZXMgYW4gZW1wdHkgZmlsZSAtLSB3aGljaCBjYW4gYmUgdXNlZnVsIHRvIGRldGVybWluZSB0aGUKICAgICAgICAgc3ltYm9scyB0aGUgcHJlcHJvY2Vzc29yIGFuZCBjb21waWxlciBzZXQgYnkgZGVmYXVsdC4KICAgICAgICAgIiIiCi0KICAgICAgICAgc2VsZi5fY2hlY2tfY29tcGlsZXIoKQotICAgICAgICAoc3JjLCBvdXQpID0gc2VsZi5fcHJlcHJvY2Vzcyhib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsIGxhbmcpCisgICAgICAgIHNyYywgb3V0ID0gc2VsZi5fcHJlcHJvY2Vzcyhib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsIGxhbmcpCiAKLSAgICAgICAgaWYgdHlwZShwYXR0ZXJuKSBpcyBTdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm4sIHN0cik6CiAgICAgICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZShwYXR0ZXJuKQogCiAgICAgICAgIGZpbGUgPSBvcGVuKG91dCkKQEAgLTIyOSw3ICsyMjIsNyBAQAogICAgICAgICBzZWxmLl9jbGVhbigpCiAgICAgICAgIHJldHVybiBtYXRjaAogCi0gICAgZGVmIHRyeV9jb21waWxlIChzZWxmLCBib2R5LCBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBsYW5nPSJjIik6CisgICAgZGVmIHRyeV9jb21waWxlKHNlbGYsIGJvZHksIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsIGxhbmc9ImMiKToKICAgICAgICAgIiIiVHJ5IHRvIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBidWlsdCBmcm9tICdib2R5JyBhbmQgJ2hlYWRlcnMnLgogICAgICAgICBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICAgICIiIgpAQCAtMjQ1LDEwICsyMzgsOCBAQAogICAgICAgICBzZWxmLl9jbGVhbigpCiAgICAgICAgIHJldHVybiBvawogCi0gICAgZGVmIHRyeV9saW5rIChzZWxmLCBib2R5LAotICAgICAgICAgICAgICAgICAgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIGxhbmc9ImMiKToKKyAgICBkZWYgdHJ5X2xpbmsoc2VsZiwgYm9keSwgaGVhZGVycz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgbGlicmFyaWVzPU5vbmUsCisgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLCBsYW5nPSJjIik6CiAgICAgICAgICIiIlRyeSB0byBjb21waWxlIGFuZCBsaW5rIGEgc291cmNlIGZpbGUsIGJ1aWx0IGZyb20gJ2JvZHknIGFuZAogICAgICAgICAnaGVhZGVycycsIHRvIGV4ZWN1dGFibGUgZm9ybS4gIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlCiAgICAgICAgIG90aGVyd2lzZS4KQEAgLTI2NiwxMCArMjU3LDggQEAKICAgICAgICAgc2VsZi5fY2xlYW4oKQogICAgICAgICByZXR1cm4gb2sKIAotICAgIGRlZiB0cnlfcnVuIChzZWxmLCBib2R5LAotICAgICAgICAgICAgICAgICBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgIGxhbmc9ImMiKToKKyAgICBkZWYgdHJ5X3J1bihzZWxmLCBib2R5LCBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBsaWJyYXJpZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwgbGFuZz0iYyIpOgogICAgICAgICAiIiJUcnkgdG8gY29tcGlsZSwgbGluayB0byBhbiBleGVjdXRhYmxlLCBhbmQgcnVuIGEgcHJvZ3JhbQogICAgICAgICBidWlsdCBmcm9tICdib2R5JyBhbmQgJ2hlYWRlcnMnLiAgUmV0dXJuIHRydWUgb24gc3VjY2VzcywgZmFsc2UKICAgICAgICAgb3RoZXJ3aXNlLgpAQCAtMjkzLDEwICsyODIsOCBAQAogICAgICMgKHRoZXNlIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBhY3R1YWxseSBsaWtlbHkgdG8gYmUgdXNlZnVsCiAgICAgIyB3aGVuIGltcGxlbWVudGluZyBhIHJlYWwtd29ybGQgY29uZmlnIGNvbW1hbmQhKQogCi0gICAgZGVmIGNoZWNrX2Z1bmMgKHNlbGYsIGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZGVjbD0wLCBjYWxsPTApOgorICAgIGRlZiBjaGVja19mdW5jKHNlbGYsIGZ1bmMsIGhlYWRlcnM9Tm9uZSwgaW5jbHVkZV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsIGxpYnJhcnlfZGlycz1Ob25lLCBkZWNsPTAsIGNhbGw9MCk6CiAKICAgICAgICAgIiIiRGV0ZXJtaW5lIGlmIGZ1bmN0aW9uICdmdW5jJyBpcyBhdmFpbGFibGUgYnkgY29uc3RydWN0aW5nIGEKICAgICAgICAgc291cmNlIGZpbGUgdGhhdCByZWZlcnMgdG8gJ2Z1bmMnLCBhbmQgY29tcGlsZXMgYW5kIGxpbmtzIGl0LgpAQCAtMzIyLDE1ICszMDksMTUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJvZHkuYXBwZW5kKCIgICVzOyIgJSBmdW5jKQogICAgICAgICBib2R5LmFwcGVuZCgifSIpCi0gICAgICAgIGJvZHkgPSBzdHJpbmcuam9pbihib2R5LCAiXG4iKSArICJcbiIKKyAgICAgICAgYm9keSA9ICJcbiIuam9pbihib2R5KSArICJcbiIKIAogICAgICAgICByZXR1cm4gc2VsZi50cnlfbGluayhib2R5LCBoZWFkZXJzLCBpbmNsdWRlX2RpcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcywgbGlicmFyeV9kaXJzKQogCiAgICAgIyBjaGVja19mdW5jICgpCiAKLSAgICBkZWYgY2hlY2tfbGliIChzZWxmLCBsaWJyYXJ5LCBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICBoZWFkZXJzPU5vbmUsIGluY2x1ZGVfZGlycz1Ob25lLCBvdGhlcl9saWJyYXJpZXM9W10pOgorICAgIGRlZiBjaGVja19saWIoc2VsZiwgbGlicmFyeSwgbGlicmFyeV9kaXJzPU5vbmUsIGhlYWRlcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1Ob25lLCBvdGhlcl9saWJyYXJpZXM9W10pOgogICAgICAgICAiIiJEZXRlcm1pbmUgaWYgJ2xpYnJhcnknIGlzIGF2YWlsYWJsZSB0byBiZSBsaW5rZWQgYWdhaW5zdCwKICAgICAgICAgd2l0aG91dCBhY3R1YWxseSBjaGVja2luZyB0aGF0IGFueSBwYXJ0aWN1bGFyIHN5bWJvbHMgYXJlIHByb3ZpZGVkCiAgICAgICAgIGJ5IGl0LiAgJ2hlYWRlcnMnIHdpbGwgYmUgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHNvdXJjZSBmaWxlIHRvCkBAIC0zNDQsOCArMzMxLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycywgaW5jbHVkZV9kaXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlicmFyeV0rb3RoZXJfbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMpCiAKLSAgICBkZWYgY2hlY2tfaGVhZGVyIChzZWxmLCBoZWFkZXIsIGluY2x1ZGVfZGlycz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLCBsYW5nPSJjIik6CisgICAgZGVmIGNoZWNrX2hlYWRlcihzZWxmLCBoZWFkZXIsIGluY2x1ZGVfZGlycz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGxhbmc9ImMiKToKICAgICAgICAgIiIiRGV0ZXJtaW5lIGlmIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGUgbmFtZWQgYnkgJ2hlYWRlcl9maWxlJwogICAgICAgICBleGlzdHMgYW5kIGNhbiBiZSBmb3VuZCBieSB0aGUgcHJlcHJvY2Vzc29yOyByZXR1cm4gdHJ1ZSBpZiBzbywKICAgICAgICAgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMzU0LDE1ICszNDEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9aW5jbHVkZV9kaXJzKQogCiAKLSMgY2xhc3MgY29uZmlnCitkZWYgZHVtcF9maWxlKGZpbGVuYW1lLCBoZWFkPU5vbmUpOgorICAgICIiIkR1bXBzIGEgZmlsZSBjb250ZW50IGludG8gbG9nLmluZm8uCiAKLQotZGVmIGR1bXBfZmlsZSAoZmlsZW5hbWUsIGhlYWQ9Tm9uZSk6CisgICAgSWYgaGVhZCBpcyBub3QgTm9uZSwgd2lsbCBiZSBkdW1wZWQgYmVmb3JlIHRoZSBmaWxlIGNvbnRlbnQuCisgICAgIiIiCiAgICAgaWYgaGVhZCBpcyBOb25lOgotICAgICAgICBwcmludCBmaWxlbmFtZSArICI6IgorICAgICAgICBsb2cuaW5mbygnJXMnICUgZmlsZW5hbWUpCiAgICAgZWxzZToKLSAgICAgICAgcHJpbnQgaGVhZAotCisgICAgICAgIGxvZy5pbmZvKGhlYWQpCiAgICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUpCi0gICAgc3lzLnN0ZG91dC53cml0ZShmaWxlLnJlYWQoKSkKLSAgICBmaWxlLmNsb3NlKCkKKyAgICB0cnk6CisgICAgICAgIGxvZy5pbmZvKGZpbGUucmVhZCgpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQppbmRleCA0NGM3NjkyLi5mMWYzYmQ1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQpAQCAtNjksMjAgKzY5LDYgQEAKICAgICAgICAgJ3NjcmlwdHMnOiAnJHVzZXJiYXNlL1NjcmlwdHMnLAogICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAogICAgICAgICB9LAotICAgICdtYWMnOiB7Ci0gICAgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotICAgICAgICB9LAotICAgICdtYWNfdXNlcic6IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlLyRweV92ZXJzaW9uX3Nob3J0L2luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9LAogICAgICdvczInOiB7CiAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKICAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfZGF0YS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2RhdGEucHkKaW5kZXggMTA2OTgzMC4uYWI0MDc5NyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfZGF0YS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9kYXRhLnB5CkBAIC01LDE2ICs1LDEzIEBACiAKICMgY29udHJpYnV0ZWQgYnkgQmFzdGlhbiBLbGVpbmVpZGFtCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKLWZyb20gdHlwZXMgaW1wb3J0IFN0cmluZ1R5cGUKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNoYW5nZV9yb290LCBjb252ZXJ0X3BhdGgKIAotY2xhc3MgaW5zdGFsbF9kYXRhIChDb21tYW5kKToKK2NsYXNzIGluc3RhbGxfZGF0YShDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImluc3RhbGwgZGF0YSBmaWxlcyIKIApAQCAtMjksMjYgKzI2LDI1IEBACiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2ZvcmNlJ10KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuaW5zdGFsbF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYub3V0ZmlsZXMgPSBbXQogICAgICAgICBzZWxmLnJvb3QgPSBOb25lCiAgICAgICAgIHNlbGYuZm9yY2UgPSAwCi0KICAgICAgICAgc2VsZi5kYXRhX2ZpbGVzID0gc2VsZi5kaXN0cmlidXRpb24uZGF0YV9maWxlcwogICAgICAgICBzZWxmLndhcm5fZGlyID0gMQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnaW5zdGFsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnaW5zdGFsbF9kYXRhJywgJ2luc3RhbGxfZGlyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9yY2UnLCAnZm9yY2UnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAKLSAgICBkZWYgcnVuIChzZWxmKToKKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmluc3RhbGxfZGlyKQogICAgICAgICBmb3IgZiBpbiBzZWxmLmRhdGFfZmlsZXM6Ci0gICAgICAgICAgICBpZiB0eXBlKGYpIGlzIFN0cmluZ1R5cGU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGYsIHN0cik6CiAgICAgICAgICAgICAgICAgIyBpdCdzIGEgc2ltcGxlIGZpbGUsIHNvIGNvcHkgaXQKICAgICAgICAgICAgICAgICBmID0gY29udmVydF9wYXRoKGYpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi53YXJuX2RpcjoKQEAgLTc4LDggKzc0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIChvdXQsIF8pID0gc2VsZi5jb3B5X2ZpbGUoZGF0YSwgZGlyKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdXRmaWxlcy5hcHBlbmQob3V0KQogCi0gICAgZGVmIGdldF9pbnB1dHMgKHNlbGYpOgorICAgIGRlZiBnZXRfaW5wdXRzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhX2ZpbGVzIG9yIFtdCiAKLSAgICBkZWYgZ2V0X291dHB1dHMgKHNlbGYpOgorICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3V0ZmlsZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2hlYWRlcnMucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9oZWFkZXJzLnB5CmluZGV4IDQ4OTUyNDAuLmQ4OTI0MTYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2hlYWRlcnMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfaGVhZGVycy5weQpAQCAtMywxNCArMywxMyBAQAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdpbnN0YWxsX2hlYWRlcnMnIGNvbW1hbmQsIHRvIGluc3RhbGwgQy9DKysgaGVhZGVyCiBmaWxlcyB0byB0aGUgUHl0aG9uIGluY2x1ZGUgZGlyZWN0b3J5LiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogCiAKLWNsYXNzIGluc3RhbGxfaGVhZGVycyAoQ29tbWFuZCk6CisjIFhYWCBmb3JjZSBpcyBuZXZlciB1c2VkCitjbGFzcyBpbnN0YWxsX2hlYWRlcnMoQ29tbWFuZCk6CiAKICAgICBkZXNjcmlwdGlvbiA9ICJpbnN0YWxsIEMvQysrIGhlYWRlciBmaWxlcyIKIApAQCAtMjIsMTggKzIxLDE4IEBACiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2ZvcmNlJ10KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuaW5zdGFsbF9kaXIgPSBOb25lCiAgICAgICAgIHNlbGYuZm9yY2UgPSAwCiAgICAgICAgIHNlbGYub3V0ZmlsZXMgPSBbXQogCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnaW5zdGFsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnaW5zdGFsbF9oZWFkZXJzJywgJ2luc3RhbGxfZGlyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9yY2UnLCAnZm9yY2UnKSkKIAogCi0gICAgZGVmIHJ1biAoc2VsZik6CisgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgaGVhZGVycyA9IHNlbGYuZGlzdHJpYnV0aW9uLmhlYWRlcnMKICAgICAgICAgaWYgbm90IGhlYWRlcnM6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTQzLDEwICs0MiwxMCBAQAogICAgICAgICAgICAgKG91dCwgXykgPSBzZWxmLmNvcHlfZmlsZShoZWFkZXIsIHNlbGYuaW5zdGFsbF9kaXIpCiAgICAgICAgICAgICBzZWxmLm91dGZpbGVzLmFwcGVuZChvdXQpCiAKLSAgICBkZWYgZ2V0X2lucHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9pbnB1dHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRpc3RyaWJ1dGlvbi5oZWFkZXJzIG9yIFtdCiAKLSAgICBkZWYgZ2V0X291dHB1dHMgKHNlbGYpOgorICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYub3V0ZmlsZXMKIAogIyBjbGFzcyBpbnN0YWxsX2hlYWRlcnMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCBmYjE1NTMwLi4wNDNlOGI2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC0xLDQgKzEsMyBAQAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KICIiImRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliCiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnaW5zdGFsbF9saWInIGNvbW1hbmQKQEAgLTcsNyArNiw2IEBACiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zCi1mcm9tIHR5cGVzIGltcG9ydCBJbnRUeXBlCiBpbXBvcnQgc3lzCiAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKQEAgLTIwLDcgKzE4LDcgQEAKIGVsc2U6CiAgICAgUFlUSE9OX1NPVVJDRV9FWFRFTlNJT04gPSAiLnB5IgogCi1jbGFzcyBpbnN0YWxsX2xpYiAoQ29tbWFuZCk6CitjbGFzcyBpbnN0YWxsX2xpYihDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gImluc3RhbGwgYWxsIFB5dGhvbiBtb2R1bGVzIChleHRlbnNpb25zIGFuZCBwdXJlIFB5dGhvbikiCiAKQEAgLTU0LDggKzUyLDcgQEAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ2ZvcmNlJywgJ2NvbXBpbGUnLCAnc2tpcC1idWlsZCddCiAgICAgbmVnYXRpdmVfb3B0ID0geyduby1jb21waWxlJyA6ICdjb21waWxlJ30KIAotCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBsZXQgdGhlICdpbnN0YWxsJyBjb21tYW5kIGRpY3RhdGUgb3VyIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkKICAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5idWlsZF9kaXIgPSBOb25lCkBAIC02NCw4ICs2MSw3IEBACiAgICAgICAgIHNlbGYub3B0aW1pemUgPSBOb25lCiAgICAgICAgIHNlbGYuc2tpcF9idWlsZCA9IE5vbmUKIAotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zIChzZWxmKToKLQorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIEdldCBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgdG8gaW5zdGFsbCBwdXJlIFB5dGhvbiBtb2R1bGVzCiAgICAgICAgICMgZnJvbSB0aGUgdW1icmVsbGEgJ2luc3RhbGwnIGNvbW1hbmQgLS0gYnVpbGQgKHNvdXJjZSkgZGlyZWN0b3J5LAogICAgICAgICAjIGluc3RhbGwgKHRhcmdldCkgZGlyZWN0b3J5LCBhbmQgd2hldGhlciB0byBjb21waWxlIC5weSBmaWxlcy4KQEAgLTgzLDcgKzc5LDcgQEAKICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5vcHRpbWl6ZSA9IDAKIAotICAgICAgICBpZiB0eXBlKHNlbGYub3B0aW1pemUpIGlzIG5vdCBJbnRUeXBlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLm9wdGltaXplLCBpbnQpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYub3B0aW1pemUgPSBpbnQoc2VsZi5vcHRpbWl6ZSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplIG5vdCBpbiAoMCwgMSwgMik6CkBAIC05MSw4ICs4Nyw3IEBACiAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEFzc2VydGlvbkVycm9yKToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvciwgIm9wdGltaXplIG11c3QgYmUgMCwgMSwgb3IgMiIKIAotICAgIGRlZiBydW4gKHNlbGYpOgotCisgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBidWlsdCBldmVyeXRoaW5nIHdlIG5lZWQgZmlyc3QKICAgICAgICAgc2VsZi5idWlsZCgpCiAKQEAgLTEwNSwyMCArMTAwLDE3IEBACiAgICAgICAgIGlmIG91dGZpbGVzIGlzIG5vdCBOb25lIGFuZCBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfcHVyZV9tb2R1bGVzKCk6CiAgICAgICAgICAgICBzZWxmLmJ5dGVfY29tcGlsZShvdXRmaWxlcykKIAotICAgICMgcnVuICgpCi0KLQogICAgICMgLS0gVG9wLWxldmVsIHdvcmtlciBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyAoY2FsbGVkIGZyb20gJ3J1bigpJykKIAotICAgIGRlZiBidWlsZCAoc2VsZik6CisgICAgZGVmIGJ1aWxkKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5za2lwX2J1aWxkOgogICAgICAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX3B1cmVfbW9kdWxlcygpOgogICAgICAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoJ2J1aWxkX3B5JykKICAgICAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoJ2J1aWxkX2V4dCcpCiAKLSAgICBkZWYgaW5zdGFsbCAoc2VsZik6CisgICAgZGVmIGluc3RhbGwoc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5idWlsZF9kaXIpOgogICAgICAgICAgICAgb3V0ZmlsZXMgPSBzZWxmLmNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rpciwgc2VsZi5pbnN0YWxsX2RpcikKICAgICAgICAgZWxzZToKQEAgLTEyNyw3ICsxMTksNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJldHVybiBvdXRmaWxlcwogCi0gICAgZGVmIGJ5dGVfY29tcGlsZSAoc2VsZiwgZmlsZXMpOgorICAgIGRlZiBieXRlX2NvbXBpbGUoc2VsZiwgZmlsZXMpOgogICAgICAgICBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKICAgICAgICAgICAgIHNlbGYud2FybignYnl0ZS1jb21waWxpbmcgaXMgZGlzYWJsZWQsIHNraXBwaW5nLicpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTE1Miw4ICsxNDQsNyBAQAogCiAgICAgIyAtLSBVdGlsaXR5IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBfbXV0YXRlX291dHB1dHMgKHNlbGYsIGhhc19hbnksIGJ1aWxkX2NtZCwgY21kX29wdGlvbiwgb3V0cHV0X2Rpcik6Ci0KKyAgICBkZWYgX211dGF0ZV9vdXRwdXRzKHNlbGYsIGhhc19hbnksIGJ1aWxkX2NtZCwgY21kX29wdGlvbiwgb3V0cHV0X2Rpcik6CiAgICAgICAgIGlmIG5vdCBoYXNfYW55OgogICAgICAgICAgICAgcmV0dXJuIFtdCiAKQEAgLTE2OCw5ICsxNTksNyBAQAogCiAgICAgICAgIHJldHVybiBvdXRwdXRzCiAKLSAgICAjIF9tdXRhdGVfb3V0cHV0cyAoKQotCi0gICAgZGVmIF9ieXRlY29kZV9maWxlbmFtZXMgKHNlbGYsIHB5X2ZpbGVuYW1lcyk6CisgICAgZGVmIF9ieXRlY29kZV9maWxlbmFtZXMoc2VsZiwgcHlfZmlsZW5hbWVzKToKICAgICAgICAgYnl0ZWNvZGVfZmlsZXMgPSBbXQogICAgICAgICBmb3IgcHlfZmlsZSBpbiBweV9maWxlbmFtZXM6CiAgICAgICAgICAgICAjIFNpbmNlIGJ1aWxkX3B5IGhhbmRsZXMgcGFja2FnZSBkYXRhIGluc3RhbGxhdGlvbiwgdGhlCkBAIC0xOTAsNyArMTc5LDcgQEAKICAgICAjIC0tIEV4dGVybmFsIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgKGNhbGxlZCBieSBvdXRzaWRlcnMpCiAKLSAgICBkZWYgZ2V0X291dHB1dHMgKHNlbGYpOgorICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgd291bGQgYmUgaW5zdGFsbGVkIGlmIHRoaXMgY29tbWFuZAogICAgICAgICB3ZXJlIGFjdHVhbGx5IHJ1bi4gIE5vdCBhZmZlY3RlZCBieSB0aGUgImRyeS1ydW4iIGZsYWcgb3Igd2hldGhlcgogICAgICAgICBtb2R1bGVzIGhhdmUgYWN0dWFsbHkgYmVlbiBidWlsdCB5ZXQuCkBAIC0yMTEsOSArMjAwLDcgQEAKIAogICAgICAgICByZXR1cm4gcHVyZV9vdXRwdXRzICsgYnl0ZWNvZGVfb3V0cHV0cyArIGV4dF9vdXRwdXRzCiAKLSAgICAjIGdldF9vdXRwdXRzICgpCi0KLSAgICBkZWYgZ2V0X2lucHV0cyAoc2VsZik6CisgICAgZGVmIGdldF9pbnB1dHMoc2VsZik6CiAgICAgICAgICIiIkdldCB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGFyZSBpbnB1dCB0byB0aGlzIGNvbW1hbmQsIGllLiB0aGUKICAgICAgICAgZmlsZXMgdGhhdCBnZXQgaW5zdGFsbGVkIGFzIHRoZXkgYXJlIG5hbWVkIGluIHRoZSBidWlsZCB0cmVlLgogICAgICAgICBUaGUgZmlsZXMgaW4gdGhpcyBsaXN0IGNvcnJlc3BvbmQgb25lLXRvLW9uZSB0byB0aGUgb3V0cHV0CkBAIC0yMzAsNSArMjE3LDMgQEAKICAgICAgICAgICAgIGlucHV0cy5leHRlbmQoYnVpbGRfZXh0LmdldF9vdXRwdXRzKCkpCiAKICAgICAgICAgcmV0dXJuIGlucHV0cwotCi0jIGNsYXNzIGluc3RhbGxfbGliCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9zY3JpcHRzLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfc2NyaXB0cy5weQppbmRleCBmZTkzZWY1Li4yOWNkOWU3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX3NjcmlwdHMucHkKQEAgLTUsOCArNSw2IEBACiAKICMgY29udHJpYnV0ZWQgYnkgQmFzdGlhbiBLbGVpbmVpZGFtCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiBpbXBvcnQgb3MKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weQppbmRleCBmNTMxZDBmLi5kYzA4OTkwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5CkBAIC03LDExICs3LDEzIEBACiAKIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgb3MsIHN0cmluZywgdXJsbGliMiwgZ2V0cGFzcywgdXJscGFyc2UKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IHVybHBhcnNlCiBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKIGNsYXNzIHJlZ2lzdGVyKFB5UElSQ0NvbW1hbmQpOgpAQCAtMjAsMTggKzIyLDM0IEBACiAgICAgdXNlcl9vcHRpb25zID0gUHlQSVJDQ29tbWFuZC51c2VyX29wdGlvbnMgKyBbCiAgICAgICAgICgnbGlzdC1jbGFzc2lmaWVycycsIE5vbmUsCiAgICAgICAgICAnbGlzdCB0aGUgdmFsaWQgVHJvdmUgY2xhc3NpZmllcnMnKSwKKyAgICAgICAgKCdzdHJpY3QnLCBOb25lICwKKyAgICAgICAgICdXaWxsIHN0b3AgdGhlIHJlZ2lzdGVyaW5nIGlmIHRoZSBtZXRhLWRhdGEgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQnKQogICAgICAgICBdCiAgICAgYm9vbGVhbl9vcHRpb25zID0gUHlQSVJDQ29tbWFuZC5ib29sZWFuX29wdGlvbnMgKyBbCi0gICAgICAgICd2ZXJpZnknLCAnbGlzdC1jbGFzc2lmaWVycyddCisgICAgICAgICd2ZXJpZnknLCAnbGlzdC1jbGFzc2lmaWVycycsICdzdHJpY3QnXQorCisgICAgc3ViX2NvbW1hbmRzID0gWygnY2hlY2snLCBsYW1iZGEgc2VsZjogVHJ1ZSldCiAKICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBQeVBJUkNDb21tYW5kLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQogICAgICAgICBzZWxmLmxpc3RfY2xhc3NpZmllcnMgPSAwCisgICAgICAgIHNlbGYuc3RyaWN0ID0gMAorCisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIFB5UElSQ0NvbW1hbmQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQorICAgICAgICAjIHNldHRpbmcgb3B0aW9ucyBmb3IgdGhlIGBjaGVja2Agc3ViY29tbWFuZAorICAgICAgICBjaGVja19vcHRpb25zID0geydzdHJpY3QnOiAoJ3JlZ2lzdGVyJywgc2VsZi5zdHJpY3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN0cnVjdHVyZWR0ZXh0JzogKCdyZWdpc3RlcicsIDEpfQorICAgICAgICBzZWxmLmRpc3RyaWJ1dGlvbi5jb21tYW5kX29wdGlvbnNbJ2NoZWNrJ10gPSBjaGVja19vcHRpb25zCiAKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBzZWxmLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBzZWxmLl9zZXRfY29uZmlnKCkKLSAgICAgICAgc2VsZi5jaGVja19tZXRhZGF0YSgpCisKKyAgICAgICAgIyBSdW4gc3ViIGNvbW1hbmRzCisgICAgICAgIGZvciBjbWRfbmFtZSBpbiBzZWxmLmdldF9zdWJfY29tbWFuZHMoKToKKyAgICAgICAgICAgIHNlbGYucnVuX2NvbW1hbmQoY21kX25hbWUpCisKICAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgogICAgICAgICAgICAgc2VsZi52ZXJpZnlfbWV0YWRhdGEoKQogICAgICAgICBlbGlmIHNlbGYubGlzdF9jbGFzc2lmaWVyczoKQEAgLTQwLDM0ICs1OCwxNCBAQAogICAgICAgICAgICAgc2VsZi5zZW5kX21ldGFkYXRhKCkKIAogICAgIGRlZiBjaGVja19tZXRhZGF0YShzZWxmKToKLSAgICAgICAgIiIiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAobmFtZSwgdmVyc2lvbiwKLSAgICAgICAgICAgVVJMLCAoYXV0aG9yIGFuZCBhdXRob3JfZW1haWwpIG9yIChtYWludGFpbmVyIGFuZAotICAgICAgICAgICBtYWludGFpbmVyX2VtYWlsKSkgYXJlIHN1cHBsaWVkIGJ5IHRoZSBEaXN0cmlidXRpb24gb2JqZWN0OyB3YXJuIGlmCi0gICAgICAgICAgIGFueSBhcmUgbWlzc2luZy4KLSAgICAgICAgIiIiCi0gICAgICAgIG1ldGFkYXRhID0gc2VsZi5kaXN0cmlidXRpb24ubWV0YWRhdGEKLQotICAgICAgICBtaXNzaW5nID0gW10KLSAgICAgICAgZm9yIGF0dHIgaW4gKCduYW1lJywgJ3ZlcnNpb24nLCAndXJsJyk6Ci0gICAgICAgICAgICBpZiBub3QgKGhhc2F0dHIobWV0YWRhdGEsIGF0dHIpIGFuZCBnZXRhdHRyKG1ldGFkYXRhLCBhdHRyKSk6Ci0gICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoYXR0cikKLQotICAgICAgICBpZiBtaXNzaW5nOgotICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIHJlcXVpcmVkIG1ldGEtZGF0YTogIiArCi0gICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmpvaW4obWlzc2luZywgIiwgIikpCi0KLSAgICAgICAgaWYgbWV0YWRhdGEuYXV0aG9yOgotICAgICAgICAgICAgaWYgbm90IG1ldGFkYXRhLmF1dGhvcl9lbWFpbDoKLSAgICAgICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBpZiAnYXV0aG9yJyBzdXBwbGllZCwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICInYXV0aG9yX2VtYWlsJyBtdXN0IGJlIHN1cHBsaWVkIHRvbyIpCi0gICAgICAgIGVsaWYgbWV0YWRhdGEubWFpbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIG5vdCBtZXRhZGF0YS5tYWludGFpbmVyX2VtYWlsOgotICAgICAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGlmICdtYWludGFpbmVyJyBzdXBwbGllZCwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICInbWFpbnRhaW5lcl9lbWFpbCcgbXVzdCBiZSBzdXBwbGllZCB0b28iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogZWl0aGVyIChhdXRob3IgYW5kIGF1dGhvcl9lbWFpbCkgIiArCi0gICAgICAgICAgICAgICAgICAgICAgIm9yIChtYWludGFpbmVyIGFuZCBtYWludGFpbmVyX2VtYWlsKSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdXBwbGllZCIpCisgICAgICAgICIiIkRlcHJlY2F0ZWQgQVBJLiIiIgorICAgICAgICB3YXJuKCJkaXN0dXRpbHMuY29tbWFuZC5yZWdpc3Rlci5jaGVja19tZXRhZGF0YSBpcyBkZXByZWNhdGVkLCBcCisgICAgICAgICAgICAgIHVzZSB0aGUgY2hlY2sgY29tbWFuZCBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfY29tbWFuZF9vYmooJ2NoZWNrJykKKyAgICAgICAgY2hlY2suZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNoZWNrLnN0cmljdCA9IHNlbGYuc3RyaWN0CisgICAgICAgIGNoZWNrLnJlc3RydWN0dXJlZHRleHQgPSAxCisgICAgICAgIGNoZWNrLnJ1bigpCiAKICAgICBkZWYgX3NldF9jb25maWcoc2VsZik6CiAgICAgICAgICcnJyBSZWFkcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBzZXQgYXR0cmlidXRlcy4KQEAgLTkwLDE0ICs4OCwxNCBAQAogICAgICAgICAnJycgRmV0Y2ggdGhlIGxpc3Qgb2YgY2xhc3NpZmllcnMgZnJvbSB0aGUgc2VydmVyLgogICAgICAgICAnJycKICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIyLnVybG9wZW4oc2VsZi5yZXBvc2l0b3J5Kyc/OmFjdGlvbj1saXN0X2NsYXNzaWZpZXJzJykKLSAgICAgICAgcHJpbnQgcmVzcG9uc2UucmVhZCgpCisgICAgICAgIGxvZy5pbmZvKHJlc3BvbnNlLnJlYWQoKSkKIAogICAgIGRlZiB2ZXJpZnlfbWV0YWRhdGEoc2VsZik6CiAgICAgICAgICcnJyBTZW5kIHRoZSBtZXRhZGF0YSB0byB0aGUgcGFja2FnZSBpbmRleCBzZXJ2ZXIgdG8gYmUgY2hlY2tlZC4KICAgICAgICAgJycnCiAgICAgICAgICMgc2VuZCB0aGUgaW5mbyB0byB0aGUgc2VydmVyIGFuZCByZXBvcnQgdGhlIHJlc3VsdAogICAgICAgICAoY29kZSwgcmVzdWx0KSA9IHNlbGYucG9zdF90b19zZXJ2ZXIoc2VsZi5idWlsZF9wb3N0X2RhdGEoJ3ZlcmlmeScpKQotICAgICAgICBwcmludCAnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyUoY29kZSwgcmVzdWx0KQorICAgICAgICBsb2cuaW5mbygnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChjb2RlLCByZXN1bHQpKQogCiAKICAgICBkZWYgc2VuZF9tZXRhZGF0YShzZWxmKToKQEAgLTE3MywxOSArMTcxLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQogCiAgICAgICAgICAgICAjIHBvc3NpYmx5IHNhdmUgdGhlIGxvZ2luCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXNfY29uZmlnIGFuZCBjb2RlID09IDIwMDoKLSAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCgnSSBjYW4gc3RvcmUgeW91ciBQeVBJIGxvZ2luIHNvIGZ1dHVyZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pc3Npb25zIHdpbGwgYmUgZmFzdGVyLicpLCBsb2cuSU5GTykKLSAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcodGhlIGxvZ2luIHdpbGwgYmUgc3RvcmVkIGluICVzKScgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfcmNfZmlsZSgpLCBsb2cuSU5GTykKLQotICAgICAgICAgICAgICAgIGNob2ljZSA9ICdYJwotICAgICAgICAgICAgICAgIHdoaWxlIGNob2ljZS5sb3dlcigpIG5vdCBpbiAneW4nOgotICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSByYXdfaW5wdXQoJ1NhdmUgeW91ciBsb2dpbiAoeS9OKT8nKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2hvaWNlOgotICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlID0gJ24nCi0gICAgICAgICAgICAgICAgaWYgY2hvaWNlLmxvd2VyKCkgPT0gJ3knOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdG9yZV9weXBpcmModXNlcm5hbWUsIHBhc3N3b3JkKQorICAgICAgICAgICAgaWYgY29kZSA9PSAyMDA6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5oYXNfY29uZmlnOgorICAgICAgICAgICAgICAgICAgICAjIHNoYXJpbmcgdGhlIHBhc3N3b3JkIGluIHRoZSBkaXN0cmlidXRpb24gaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgIyBzbyB0aGUgdXBsb2FkIGNvbW1hbmQgY2FuIHJldXNlIGl0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLnBhc3N3b3JkID0gcGFzc3dvcmQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCgnSSBjYW4gc3RvcmUgeW91ciBQeVBJIGxvZ2luIHNvIGZ1dHVyZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWJtaXNzaW9ucyB3aWxsIGJlIGZhc3Rlci4nKSwgbG9nLklORk8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyh0aGUgbG9naW4gd2lsbCBiZSBzdG9yZWQgaW4gJXMpJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfcmNfZmlsZSgpLCBsb2cuSU5GTykKKyAgICAgICAgICAgICAgICAgICAgY2hvaWNlID0gJ1gnCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGNob2ljZS5sb3dlcigpIG5vdCBpbiAneW4nOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlID0gcmF3X2lucHV0KCdTYXZlIHlvdXIgbG9naW4gKHkvTik/JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaG9pY2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlID0gJ24nCisgICAgICAgICAgICAgICAgICAgIGlmIGNob2ljZS5sb3dlcigpID09ICd5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3JlX3B5cGlyYyh1c2VybmFtZSwgcGFzc3dvcmQpCiAKICAgICAgICAgZWxpZiBjaG9pY2UgPT0gJzInOgogICAgICAgICAgICAgZGF0YSA9IHsnOmFjdGlvbic6ICd1c2VyJ30KQEAgLTIwNiwxNyArMjA4LDE4IEBACiAgICAgICAgICAgICAgICAgZGF0YVsnZW1haWwnXSA9IHJhd19pbnB1dCgnICAgRU1haWw6ICcpCiAgICAgICAgICAgICBjb2RlLCByZXN1bHQgPSBzZWxmLnBvc3RfdG9fc2VydmVyKGRhdGEpCiAgICAgICAgICAgICBpZiBjb2RlICE9IDIwMDoKLSAgICAgICAgICAgICAgICBwcmludCAnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyUoY29kZSwgcmVzdWx0KQorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnICUgKGNvZGUsIHJlc3VsdCkpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50ICdZb3Ugd2lsbCByZWNlaXZlIGFuIGVtYWlsIHNob3J0bHkuJwotICAgICAgICAgICAgICAgIHByaW50ICdGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiBpdCB0byBjb21wbGV0ZSByZWdpc3RyYXRpb24uJworICAgICAgICAgICAgICAgIGxvZy5pbmZvKCdZb3Ugd2lsbCByZWNlaXZlIGFuIGVtYWlsIHNob3J0bHkuJykKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygoJ0ZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIGl0IHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXRlIHJlZ2lzdHJhdGlvbi4nKSkKICAgICAgICAgZWxpZiBjaG9pY2UgPT0gJzMnOgogICAgICAgICAgICAgZGF0YSA9IHsnOmFjdGlvbic6ICdwYXNzd29yZF9yZXNldCd9CiAgICAgICAgICAgICBkYXRhWydlbWFpbCddID0gJycKICAgICAgICAgICAgIHdoaWxlIG5vdCBkYXRhWydlbWFpbCddOgogICAgICAgICAgICAgICAgIGRhdGFbJ2VtYWlsJ10gPSByYXdfaW5wdXQoJ1lvdXIgZW1haWwgYWRkcmVzczogJykKICAgICAgICAgICAgIGNvZGUsIHJlc3VsdCA9IHNlbGYucG9zdF90b19zZXJ2ZXIoZGF0YSkKLSAgICAgICAgICAgIHByaW50ICdTZXJ2ZXIgcmVzcG9uc2UgKCVzKTogJXMnJShjb2RlLCByZXN1bHQpCisgICAgICAgICAgICBsb2cuaW5mbygnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChjb2RlLCByZXN1bHQpKQogCiAgICAgZGVmIGJ1aWxkX3Bvc3RfZGF0YShzZWxmLCBhY3Rpb24pOgogICAgICAgICAjIGZpZ3VyZSB0aGUgZGF0YSB0byBzZW5kIC0gdGhlIG1ldGFkYXRhIHBsdXMgc29tZSBhZGRpdGlvbmFsCkBAIC0yNDksOCArMjUyLDEwIEBACiAgICAgZGVmIHBvc3RfdG9fc2VydmVyKHNlbGYsIGRhdGEsIGF1dGg9Tm9uZSk6CiAgICAgICAgICcnJyBQb3N0IGEgcXVlcnkgdG8gdGhlIHNlcnZlciwgYW5kIHJldHVybiBhIHN0cmluZyByZXNwb25zZS4KICAgICAgICAgJycnCi0gICAgICAgIHNlbGYuYW5ub3VuY2UoJ1JlZ2lzdGVyaW5nICVzIHRvICVzJyAlIChkYXRhWyduYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnkpLCBsb2cuSU5GTykKKyAgICAgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCdSZWdpc3RlcmluZyAlcyB0byAlcycgJSAoZGF0YVsnbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQogICAgICAgICAjIEJ1aWxkIHVwIHRoZSBNSU1FIHBheWxvYWQgZm9yIHRoZSB1cmxsaWIyIFBPU1QgZGF0YQogICAgICAgICBib3VuZGFyeSA9ICctLS0tLS0tLS0tLS0tLUdIU0tGSkRMR0RTNzU0M0ZKS0xGSFJFNzU2NDI3NTY3NDMyNTQnCiAgICAgICAgIHNlcF9ib3VuZGFyeSA9ICdcbi0tJyArIGJvdW5kYXJ5CkBAIC0yOTYsNSArMzAxLDcgQEAKICAgICAgICAgICAgICAgICBkYXRhID0gcmVzdWx0LnJlYWQoKQogICAgICAgICAgICAgcmVzdWx0ID0gMjAwLCAnT0snCiAgICAgICAgIGlmIHNlbGYuc2hvd19yZXNwb25zZToKLSAgICAgICAgICAgIHByaW50ICctJyo3NSwgZGF0YSwgJy0nKjc1CisgICAgICAgICAgICBkYXNoZXMgPSAnLScgKiA3NQorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnJXMlcyVzJyAlIChkYXNoZXMsIGRhdGEsIGRhc2hlcykpCisKICAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CmluZGV4IGEzNjZkMWUuLjBjM2IwYjUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKQEAgLTIsNDEgKzIsNDcgQEAKIAogSW1wbGVtZW50cyB0aGUgRGlzdHV0aWxzICdzZGlzdCcgY29tbWFuZCAoY3JlYXRlIGEgc291cmNlIGRpc3RyaWJ1dGlvbikuIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgb3MsIHN0cmluZworaW1wb3J0IG9zCitpbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3lzCi1mcm9tIHR5cGVzIGltcG9ydCAqCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KKwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGRpcl91dGlsLCBkZXBfdXRpbCwgZmlsZV91dGlsLCBhcmNoaXZlX3V0aWwKIGZyb20gZGlzdHV0aWxzLnRleHRfZmlsZSBpbXBvcnQgVGV4dEZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgRGlzdHV0aWxzT3B0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0dXRpbHNUZW1wbGF0ZUVycm9yKQogZnJvbSBkaXN0dXRpbHMuZmlsZWxpc3QgaW1wb3J0IEZpbGVMaXN0CiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBjb252ZXJ0X3BhdGgKIAotCi1kZWYgc2hvd19mb3JtYXRzICgpOgorZGVmIHNob3dfZm9ybWF0cygpOgogICAgICIiIlByaW50IGFsbCBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSAnZm9ybWF0cycgb3B0aW9uICh1c2VkIGJ5CiAgICAgdGhlICItLWhlbHAtZm9ybWF0cyIgY29tbWFuZC1saW5lIG9wdGlvbikuCiAgICAgIiIiCiAgICAgZnJvbSBkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0IGltcG9ydCBGYW5jeUdldG9wdAogICAgIGZyb20gZGlzdHV0aWxzLmFyY2hpdmVfdXRpbCBpbXBvcnQgQVJDSElWRV9GT1JNQVRTCi0gICAgZm9ybWF0cz1bXQorICAgIGZvcm1hdHMgPSBbXQogICAgIGZvciBmb3JtYXQgaW4gQVJDSElWRV9GT1JNQVRTLmtleXMoKToKICAgICAgICAgZm9ybWF0cy5hcHBlbmQoKCJmb3JtYXRzPSIgKyBmb3JtYXQsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBBUkNISVZFX0ZPUk1BVFNbZm9ybWF0XVsyXSkpCiAgICAgZm9ybWF0cy5zb3J0KCkKLSAgICBwcmV0dHlfcHJpbnRlciA9IEZhbmN5R2V0b3B0KGZvcm1hdHMpCi0gICAgcHJldHR5X3ByaW50ZXIucHJpbnRfaGVscCgKKyAgICBGYW5jeUdldG9wdChmb3JtYXRzKS5wcmludF9oZWxwKAogICAgICAgICAiTGlzdCBvZiBhdmFpbGFibGUgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3JtYXRzOiIpCiAKLWNsYXNzIHNkaXN0IChDb21tYW5kKToKK2NsYXNzIHNkaXN0KENvbW1hbmQpOgogCiAgICAgZGVzY3JpcHRpb24gPSAiY3JlYXRlIGEgc291cmNlIGRpc3RyaWJ1dGlvbiAodGFyYmFsbCwgemlwIGZpbGUsIGV0Yy4pIgogCisgICAgZGVmIGNoZWNraW5nX21ldGFkYXRhKHNlbGYpOgorICAgICAgICAiIiJDYWxsYWJsZSB1c2VkIGZvciB0aGUgY2hlY2sgc3ViLWNvbW1hbmQuCisKKyAgICAgICAgUGxhY2VkIGhlcmUgc28gdXNlcl9vcHRpb25zIGNhbiB2aWV3IGl0IiIiCisgICAgICAgIHJldHVybiBzZWxmLm1ldGFkYXRhX2NoZWNrCisKICAgICB1c2VyX29wdGlvbnMgPSBbCiAgICAgICAgICgndGVtcGxhdGU9JywgJ3QnLAogICAgICAgICAgIm5hbWUgb2YgbWFuaWZlc3QgdGVtcGxhdGUgZmlsZSBbZGVmYXVsdDogTUFOSUZFU1QuaW5dIiksCkBAIC01Nyw3ICs2Myw4IEBACiAgICAgICAgICAianVzdCByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdCBhbmQgdGhlbiBzdG9wICIKICAgICAgICAgICIoaW1wbGllcyAtLWZvcmNlLW1hbmlmZXN0KSIpLAogICAgICAgICAoJ2ZvcmNlLW1hbmlmZXN0JywgJ2YnLAotICAgICAgICAgImZvcmNpYmx5IHJlZ2VuZXJhdGUgdGhlIG1hbmlmZXN0IGFuZCBjYXJyeSBvbiBhcyB1c3VhbCIpLAorICAgICAgICAgImZvcmNpYmx5IHJlZ2VuZXJhdGUgdGhlIG1hbmlmZXN0IGFuZCBjYXJyeSBvbiBhcyB1c3VhbC4gIgorICAgICAgICAgIkRlcHJlY2F0ZWQ6IG5vdyB0aGUgbWFuaWZlc3QgaXMgYWx3YXlzIHJlZ2VuZXJhdGVkLiIpLAogICAgICAgICAoJ2Zvcm1hdHM9JywgTm9uZSwKICAgICAgICAgICJmb3JtYXRzIGZvciBzb3VyY2UgZGlzdHJpYnV0aW9uIChjb21tYS1zZXBhcmF0ZWQgbGlzdCkiKSwKICAgICAgICAgKCdrZWVwLXRlbXAnLCAnaycsCkBAIC02NiwxMSArNzMsMTggQEAKICAgICAgICAgKCdkaXN0LWRpcj0nLCAnZCcsCiAgICAgICAgICAiZGlyZWN0b3J5IHRvIHB1dCB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhcmNoaXZlKHMpIGluICIKICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKKyAgICAgICAgKCdtZXRhZGF0YS1jaGVjaycsIE5vbmUsCisgICAgICAgICAiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAiCisgICAgICAgICAiYXJlIHN1cHBsaWVkLiBXYXJuIGlmIGFueSBtaXNzaW5nLiBbZGVmYXVsdF0iKSwKKyAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3VzZS1kZWZhdWx0cycsICdwcnVuZScsCiAgICAgICAgICAgICAgICAgICAgICAgICdtYW5pZmVzdC1vbmx5JywgJ2ZvcmNlLW1hbmlmZXN0JywKLSAgICAgICAgICAgICAgICAgICAgICAgJ2tlZXAtdGVtcCddCisgICAgICAgICAgICAgICAgICAgICAgICdrZWVwLXRlbXAnLCAnbWV0YWRhdGEtY2hlY2snXQogCiAgICAgaGVscF9vcHRpb25zID0gWwogICAgICAgICAoJ2hlbHAtZm9ybWF0cycsIE5vbmUsCkBAIC04MCwxMCArOTQsMTIgQEAKICAgICBuZWdhdGl2ZV9vcHQgPSB7J25vLWRlZmF1bHRzJzogJ3VzZS1kZWZhdWx0cycsCiAgICAgICAgICAgICAgICAgICAgICduby1wcnVuZSc6ICdwcnVuZScgfQogCi0gICAgZGVmYXVsdF9mb3JtYXQgPSB7ICdwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KKyAgICBkZWZhdWx0X2Zvcm1hdCA9IHsncG9zaXgnOiAnZ3p0YXInLAorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KIAotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIHN1Yl9jb21tYW5kcyA9IFsoJ2NoZWNrJywgY2hlY2tpbmdfbWV0YWRhdGEpXQorCisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyAndGVtcGxhdGUnIGFuZCAnbWFuaWZlc3QnIGFyZSwgcmVzcGVjdGl2ZWx5LCB0aGUgbmFtZXMgb2YKICAgICAgICAgIyB0aGUgbWFuaWZlc3QgdGVtcGxhdGUgYW5kIG1hbmlmZXN0IGZpbGUuCiAgICAgICAgIHNlbGYudGVtcGxhdGUgPSBOb25lCkBAIC0xMDIsOSArMTE4LDExIEBACiAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSBOb25lCiAKICAgICAgICAgc2VsZi5hcmNoaXZlX2ZpbGVzID0gTm9uZQorICAgICAgICBzZWxmLm1ldGFkYXRhX2NoZWNrID0gMQorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQogCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYubWFuaWZlc3QgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYubWFuaWZlc3QgPSAiTUFOSUZFU1QiCiAgICAgICAgIGlmIHNlbGYudGVtcGxhdGUgaXMgTm9uZToKQEAgLTEyNywxNiArMTQ1LDE0IEBACiAgICAgICAgIGlmIHNlbGYuZGlzdF9kaXIgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGlzdF9kaXIgPSAiZGlzdCIKIAotCi0gICAgZGVmIHJ1biAoc2VsZik6Ci0KKyAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjICdmaWxlbGlzdCcgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB3aWxsIG1ha2UgdXAgdGhlCiAgICAgICAgICMgbWFuaWZlc3QKICAgICAgICAgc2VsZi5maWxlbGlzdCA9IEZpbGVMaXN0KCkKIAotICAgICAgICAjIEVuc3VyZSB0aGF0IGFsbCByZXF1aXJlZCBtZXRhLWRhdGEgaXMgZ2l2ZW47IHdhcm4gaWYgbm90IChidXQKLSAgICAgICAgIyBkb24ndCBkaWUsIGl0J3Mgbm90ICp0aGF0KiBzZXJpb3VzISkKLSAgICAgICAgc2VsZi5jaGVja19tZXRhZGF0YSgpCisgICAgICAgICMgUnVuIHN1YiBjb21tYW5kcworICAgICAgICBmb3IgY21kX25hbWUgaW4gc2VsZi5nZXRfc3ViX2NvbW1hbmRzKCk6CisgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKGNtZF9uYW1lKQogCiAgICAgICAgICMgRG8gd2hhdGV2ZXIgaXQgdGFrZXMgdG8gZ2V0IHRoZSBsaXN0IG9mIGZpbGVzIHRvIHByb2Nlc3MKICAgICAgICAgIyAocHJvY2VzcyB0aGUgbWFuaWZlc3QgdGVtcGxhdGUsIHJlYWQgYW4gZXhpc3RpbmcgbWFuaWZlc3QsCkBAIC0xNTEsMTE2ICsxNjcsNTcgQEAKICAgICAgICAgIyBvciB6aXBmaWxlLCBvciB3aGF0ZXZlci4KICAgICAgICAgc2VsZi5tYWtlX2Rpc3RyaWJ1dGlvbigpCiAKKyAgICBkZWYgY2hlY2tfbWV0YWRhdGEoc2VsZik6CisgICAgICAgICIiIkRlcHJlY2F0ZWQgQVBJLiIiIgorICAgICAgICB3YXJuKCJkaXN0dXRpbHMuY29tbWFuZC5zZGlzdC5jaGVja19tZXRhZGF0YSBpcyBkZXByZWNhdGVkLCBcCisgICAgICAgICAgICAgIHVzZSB0aGUgY2hlY2sgY29tbWFuZCBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfY29tbWFuZF9vYmooJ2NoZWNrJykKKyAgICAgICAgY2hlY2suZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNoZWNrLnJ1bigpCiAKLSAgICBkZWYgY2hlY2tfbWV0YWRhdGEgKHNlbGYpOgotICAgICAgICAiIiJFbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhIChuYW1lLCB2ZXJzaW9uLAotICAgICAgICBVUkwsIChhdXRob3IgYW5kIGF1dGhvcl9lbWFpbCkgb3IgKG1haW50YWluZXIgYW5kCi0gICAgICAgIG1haW50YWluZXJfZW1haWwpKSBhcmUgc3VwcGxpZWQgYnkgdGhlIERpc3RyaWJ1dGlvbiBvYmplY3Q7IHdhcm4gaWYKLSAgICAgICAgYW55IGFyZSBtaXNzaW5nLgotICAgICAgICAiIiIKLSAgICAgICAgbWV0YWRhdGEgPSBzZWxmLmRpc3RyaWJ1dGlvbi5tZXRhZGF0YQotCi0gICAgICAgIG1pc3NpbmcgPSBbXQotICAgICAgICBmb3IgYXR0ciBpbiAoJ25hbWUnLCAndmVyc2lvbicsICd1cmwnKToKLSAgICAgICAgICAgIGlmIG5vdCAoaGFzYXR0cihtZXRhZGF0YSwgYXR0cikgYW5kIGdldGF0dHIobWV0YWRhdGEsIGF0dHIpKToKLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChhdHRyKQotCi0gICAgICAgIGlmIG1pc3Npbmc6Ci0gICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgcmVxdWlyZWQgbWV0YS1kYXRhOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuam9pbihtaXNzaW5nLCAiLCAiKSkKLQotICAgICAgICBpZiBtZXRhZGF0YS5hdXRob3I6Ci0gICAgICAgICAgICBpZiBub3QgbWV0YWRhdGEuYXV0aG9yX2VtYWlsOgotICAgICAgICAgICAgICAgIHNlbGYud2FybigibWlzc2luZyBtZXRhLWRhdGE6IGlmICdhdXRob3InIHN1cHBsaWVkLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIidhdXRob3JfZW1haWwnIG11c3QgYmUgc3VwcGxpZWQgdG9vIikKLSAgICAgICAgZWxpZiBtZXRhZGF0YS5tYWludGFpbmVyOgotICAgICAgICAgICAgaWYgbm90IG1ldGFkYXRhLm1haW50YWluZXJfZW1haWw6Ci0gICAgICAgICAgICAgICAgc2VsZi53YXJuKCJtaXNzaW5nIG1ldGEtZGF0YTogaWYgJ21haW50YWluZXInIHN1cHBsaWVkLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIidtYWludGFpbmVyX2VtYWlsJyBtdXN0IGJlIHN1cHBsaWVkIHRvbyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndhcm4oIm1pc3NpbmcgbWV0YS1kYXRhOiBlaXRoZXIgKGF1dGhvciBhbmQgYXV0aG9yX2VtYWlsKSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAib3IgKG1haW50YWluZXIgYW5kIG1haW50YWluZXJfZW1haWwpICIgKwotICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN1cHBsaWVkIikKLQotICAgICMgY2hlY2tfbWV0YWRhdGEgKCkKLQotCi0gICAgZGVmIGdldF9maWxlX2xpc3QgKHNlbGYpOgorICAgIGRlZiBnZXRfZmlsZV9saXN0KHNlbGYpOgogICAgICAgICAiIiJGaWd1cmUgb3V0IHRoZSBsaXN0IG9mIGZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHNvdXJjZQogICAgICAgICBkaXN0cmlidXRpb24sIGFuZCBwdXQgaXQgaW4gJ3NlbGYuZmlsZWxpc3QnLiAgVGhpcyBtaWdodCBpbnZvbHZlCiAgICAgICAgIHJlYWRpbmcgdGhlIG1hbmlmZXN0IHRlbXBsYXRlIChhbmQgd3JpdGluZyB0aGUgbWFuaWZlc3QpLCBvciBqdXN0CiAgICAgICAgIHJlYWRpbmcgdGhlIG1hbmlmZXN0LCBvciBqdXN0IHVzaW5nIHRoZSBkZWZhdWx0IGZpbGUgc2V0IC0tIGl0IGFsbAotICAgICAgICBkZXBlbmRzIG9uIHRoZSB1c2VyJ3Mgb3B0aW9ucyBhbmQgdGhlIHN0YXRlIG9mIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICBkZXBlbmRzIG9uIHRoZSB1c2VyJ3Mgb3B0aW9ucy4KICAgICAgICAgIiIiCi0KLSAgICAgICAgIyBJZiB3ZSBoYXZlIGEgbWFuaWZlc3QgdGVtcGxhdGUsIHNlZSBpZiBpdCdzIG5ld2VyIHRoYW4gdGhlCi0gICAgICAgICMgbWFuaWZlc3Q7IGlmIHNvLCB3ZSdsbCByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdC4KKyAgICAgICAgIyBuZXcgYmVoYXZpb3I6CisgICAgICAgICMgdGhlIGZpbGUgbGlzdCBpcyByZWNhbGN1bGF0ZWQgZXZlcnl0aW1lIGJlY2F1c2UKKyAgICAgICAgIyBldmVuIGlmIE1BTklGRVNULmluIG9yIHNldHVwLnB5IGFyZSBub3QgY2hhbmdlZAorICAgICAgICAjIHRoZSB1c2VyIG1pZ2h0IGhhdmUgYWRkZWQgc29tZSBmaWxlcyBpbiB0aGUgdHJlZSB0aGF0CisgICAgICAgICMgbmVlZCB0byBiZSBpbmNsdWRlZC4KKyAgICAgICAgIworICAgICAgICAjICBUaGlzIG1ha2VzIC0tZm9yY2UgdGhlIGRlZmF1bHQgYW5kIG9ubHkgYmVoYXZpb3IuCiAgICAgICAgIHRlbXBsYXRlX2V4aXN0cyA9IG9zLnBhdGguaXNmaWxlKHNlbGYudGVtcGxhdGUpCisgICAgICAgIGlmIG5vdCB0ZW1wbGF0ZV9leGlzdHM6CisgICAgICAgICAgICBzZWxmLndhcm4oKCJtYW5pZmVzdCB0ZW1wbGF0ZSAnJXMnIGRvZXMgbm90IGV4aXN0ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIih1c2luZyBkZWZhdWx0IGZpbGUgbGlzdCkiKSAlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbXBsYXRlKQorICAgICAgICBzZWxmLmZpbGVsaXN0LmZpbmRhbGwoKQorCisgICAgICAgIGlmIHNlbGYudXNlX2RlZmF1bHRzOgorICAgICAgICAgICAgc2VsZi5hZGRfZGVmYXVsdHMoKQorCiAgICAgICAgIGlmIHRlbXBsYXRlX2V4aXN0czoKLSAgICAgICAgICAgIHRlbXBsYXRlX25ld2VyID0gZGVwX3V0aWwubmV3ZXIoc2VsZi50ZW1wbGF0ZSwgc2VsZi5tYW5pZmVzdCkKKyAgICAgICAgICAgIHNlbGYucmVhZF90ZW1wbGF0ZSgpCiAKLSAgICAgICAgIyBUaGUgY29udGVudHMgb2YgdGhlIG1hbmlmZXN0IGZpbGUgYWxtb3N0IGNlcnRhaW5seSBkZXBlbmQgb24gdGhlCi0gICAgICAgICMgc2V0dXAgc2NyaXB0IGFzIHdlbGwgYXMgdGhlIG1hbmlmZXN0IHRlbXBsYXRlIC0tIHNvIGlmIHRoZSBzZXR1cAotICAgICAgICAjIHNjcmlwdCBpcyBuZXdlciB0aGFuIHRoZSBtYW5pZmVzdCwgd2UnbGwgcmVnZW5lcmF0ZSB0aGUgbWFuaWZlc3QKLSAgICAgICAgIyBmcm9tIHRoZSB0ZW1wbGF0ZS4gIChXZWxsLCBub3QgcXVpdGU6IGlmIHdlIGFscmVhZHkgaGF2ZSBhCi0gICAgICAgICMgbWFuaWZlc3QsIGJ1dCB0aGVyZSdzIG5vIHRlbXBsYXRlIC0tIHdoaWNoIHdpbGwgaGFwcGVuIGlmIHRoZQotICAgICAgICAjIGRldmVsb3BlciBlbGVjdHMgdG8gZ2VuZXJhdGUgYSBtYW5pZmVzdCBzb21lIG90aGVyIHdheSAtLSB0aGVuIHdlCi0gICAgICAgICMgY2FuJ3QgcmVnZW5lcmF0ZSB0aGUgbWFuaWZlc3QsIHNvIHdlIGRvbid0LikKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiY2hlY2tpbmcgaWYgJXMgbmV3ZXIgdGhhbiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZSwgc2VsZi5tYW5pZmVzdCkpCi0gICAgICAgIHNldHVwX25ld2VyID0gZGVwX3V0aWwubmV3ZXIoc2VsZi5kaXN0cmlidXRpb24uc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdCkKKyAgICAgICAgaWYgc2VsZi5wcnVuZToKKyAgICAgICAgICAgIHNlbGYucHJ1bmVfZmlsZV9saXN0KCkKIAotICAgICAgICAjIGNhc2VzOgotICAgICAgICAjICAgMSkgbm8gbWFuaWZlc3QsIHRlbXBsYXRlIGV4aXN0czogZ2VuZXJhdGUgbWFuaWZlc3QKLSAgICAgICAgIyAgICAgIChjb3ZlcmVkIGJ5IDJhOiBubyBtYW5pZmVzdCA9PSB0ZW1wbGF0ZSBuZXdlcikKLSAgICAgICAgIyAgIDIpIG1hbmlmZXN0ICYgdGVtcGxhdGUgZXhpc3Q6Ci0gICAgICAgICMgICAgICAyYSkgdGVtcGxhdGUgb3Igc2V0dXAgc2NyaXB0IG5ld2VyIHRoYW4gbWFuaWZlc3Q6Ci0gICAgICAgICMgICAgICAgICAgcmVnZW5lcmF0ZSBtYW5pZmVzdAotICAgICAgICAjICAgICAgMmIpIG1hbmlmZXN0IG5ld2VyIHRoYW4gYm90aDoKLSAgICAgICAgIyAgICAgICAgICBkbyBub3RoaW5nICh1bmxlc3MgLS1mb3JjZSBvciAtLW1hbmlmZXN0LW9ubHkpCi0gICAgICAgICMgICAzKSBtYW5pZmVzdCBleGlzdHMsIG5vIHRlbXBsYXRlOgotICAgICAgICAjICAgICAgZG8gbm90aGluZyAodW5sZXNzIC0tZm9yY2Ugb3IgLS1tYW5pZmVzdC1vbmx5KQotICAgICAgICAjICAgNCkgbm8gbWFuaWZlc3QsIG5vIHRlbXBsYXRlOiBnZW5lcmF0ZSB3LyB3YXJuaW5nICgiZGVmYXVsdHMgb25seSIpCisgICAgICAgIHNlbGYuZmlsZWxpc3Quc29ydCgpCisgICAgICAgIHNlbGYuZmlsZWxpc3QucmVtb3ZlX2R1cGxpY2F0ZXMoKQorICAgICAgICBzZWxmLndyaXRlX21hbmlmZXN0KCkKIAotICAgICAgICBtYW5pZmVzdF9vdXRvZmRhdGUgPSAodGVtcGxhdGVfZXhpc3RzIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXBsYXRlX25ld2VyIG9yIHNldHVwX25ld2VyKSkKLSAgICAgICAgZm9yY2VfcmVnZW4gPSBzZWxmLmZvcmNlX21hbmlmZXN0IG9yIHNlbGYubWFuaWZlc3Rfb25seQotICAgICAgICBtYW5pZmVzdF9leGlzdHMgPSBvcy5wYXRoLmlzZmlsZShzZWxmLm1hbmlmZXN0KQotICAgICAgICBuZWl0aGVyX2V4aXN0cyA9IChub3QgdGVtcGxhdGVfZXhpc3RzIGFuZCBub3QgbWFuaWZlc3RfZXhpc3RzKQotCi0gICAgICAgICMgUmVnZW5lcmF0ZSB0aGUgbWFuaWZlc3QgaWYgbmVjZXNzYXJ5IChvciBpZiBleHBsaWNpdGx5IHRvbGQgdG8pCi0gICAgICAgIGlmIG1hbmlmZXN0X291dG9mZGF0ZSBvciBuZWl0aGVyX2V4aXN0cyBvciBmb3JjZV9yZWdlbjoKLSAgICAgICAgICAgIGlmIG5vdCB0ZW1wbGF0ZV9leGlzdHM6Ci0gICAgICAgICAgICAgICAgc2VsZi53YXJuKCgibWFuaWZlc3QgdGVtcGxhdGUgJyVzJyBkb2VzIG5vdCBleGlzdCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIodXNpbmcgZGVmYXVsdCBmaWxlIGxpc3QpIikgJQotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbXBsYXRlKQotICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5maW5kYWxsKCkKLQotICAgICAgICAgICAgaWYgc2VsZi51c2VfZGVmYXVsdHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hZGRfZGVmYXVsdHMoKQotICAgICAgICAgICAgaWYgdGVtcGxhdGVfZXhpc3RzOgotICAgICAgICAgICAgICAgIHNlbGYucmVhZF90ZW1wbGF0ZSgpCi0gICAgICAgICAgICBpZiBzZWxmLnBydW5lOgotICAgICAgICAgICAgICAgIHNlbGYucHJ1bmVfZmlsZV9saXN0KCkKLQotICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QucmVtb3ZlX2R1cGxpY2F0ZXMoKQotICAgICAgICAgICAgc2VsZi53cml0ZV9tYW5pZmVzdCgpCi0KLSAgICAgICAgIyBEb24ndCByZWdlbmVyYXRlIHRoZSBtYW5pZmVzdCwganVzdCByZWFkIGl0IGluLgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZWFkX21hbmlmZXN0KCkKLQotICAgICMgZ2V0X2ZpbGVfbGlzdCAoKQotCi0KLSAgICBkZWYgYWRkX2RlZmF1bHRzIChzZWxmKToKKyAgICBkZWYgYWRkX2RlZmF1bHRzKHNlbGYpOgogICAgICAgICAiIiJBZGQgYWxsIHRoZSBkZWZhdWx0IGZpbGVzIHRvIHNlbGYuZmlsZWxpc3Q6CiAgICAgICAgICAgLSBSRUFETUUgb3IgUkVBRE1FLnR4dAogICAgICAgICAgIC0gc2V0dXAucHkKICAgICAgICAgICAtIHRlc3QvdGVzdCoucHkKICAgICAgICAgICAtIGFsbCBwdXJlIFB5dGhvbiBtb2R1bGVzIG1lbnRpb25lZCBpbiBzZXR1cCBzY3JpcHQKKyAgICAgICAgICAtIGFsbCBmaWxlcyBwb2ludGVkIGJ5IHBhY2thZ2VfZGF0YSAoYnVpbGRfcHkpCisgICAgICAgICAgLSBhbGwgZmlsZXMgZGVmaW5lZCBpbiBkYXRhX2ZpbGVzLgorICAgICAgICAgIC0gYWxsIGZpbGVzIGRlZmluZWQgYXMgc2NyaXB0cy4KICAgICAgICAgICAtIGFsbCBDIHNvdXJjZXMgbGlzdGVkIGFzIHBhcnQgb2YgZXh0ZW5zaW9ucyBvciBDIGxpYnJhcmllcwogICAgICAgICAgICAgaW4gdGhlIHNldHVwIHNjcmlwdCAoZG9lc24ndCBjYXRjaCBDIGhlYWRlcnMhKQogICAgICAgICBXYXJucyBpZiAoUkVBRE1FIG9yIFJFQURNRS50eHQpIG9yIHNldHVwLnB5IGFyZSBtaXNzaW5nOyBldmVyeXRoaW5nCkBAIC0yNjksNyArMjI2LDcgQEAKIAogICAgICAgICBzdGFuZGFyZHMgPSBbKCdSRUFETUUnLCAnUkVBRE1FLnR4dCcpLCBzZWxmLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZV0KICAgICAgICAgZm9yIGZuIGluIHN0YW5kYXJkczoKLSAgICAgICAgICAgIGlmIHR5cGUoZm4pIGlzIFR1cGxlVHlwZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm4sIHR1cGxlKToKICAgICAgICAgICAgICAgICBhbHRzID0gZm4KICAgICAgICAgICAgICAgICBnb3RfaXQgPSAwCiAgICAgICAgICAgICAgICAgZm9yIGZuIGluIGFsdHM6CkBAIC0yOTMsMTAgKzI1MCwzNSBAQAogICAgICAgICAgICAgaWYgZmlsZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5leHRlbmQoZmlsZXMpCiAKKyAgICAgICAgIyBidWlsZF9weSBpcyB1c2VkIHRvIGdldDoKKyAgICAgICAgIyAgLSBweXRob24gbW9kdWxlcworICAgICAgICAjICAtIGZpbGVzIGRlZmluZWQgaW4gcGFja2FnZV9kYXRhCisgICAgICAgIGJ1aWxkX3B5ID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX3B5JykKKworICAgICAgICAjIGdldHRpbmcgcHl0aG9uIGZpbGVzCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19wdXJlX21vZHVsZXMoKToKLSAgICAgICAgICAgIGJ1aWxkX3B5ID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX3B5JykKICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuZXh0ZW5kKGJ1aWxkX3B5LmdldF9zb3VyY2VfZmlsZXMoKSkKIAorICAgICAgICAjIGdldHRpbmcgcGFja2FnZV9kYXRhIGZpbGVzCisgICAgICAgICMgKGNvbXB1dGVkIGluIGJ1aWxkX3B5LmRhdGFfZmlsZXMgYnkgYnVpbGRfcHkuZmluYWxpemVfb3B0aW9ucykKKyAgICAgICAgZm9yIHBrZywgc3JjX2RpciwgYnVpbGRfZGlyLCBmaWxlbmFtZXMgaW4gYnVpbGRfcHkuZGF0YV9maWxlczoKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSkKKworICAgICAgICAjIGdldHRpbmcgZGlzdHJpYnV0aW9uLmRhdGFfZmlsZXMKKyAgICAgICAgaWYgc2VsZi5kaXN0cmlidXRpb24uaGFzX2RhdGFfZmlsZXMoKToKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuZGlzdHJpYnV0aW9uLmRhdGFfZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBzdHIpOiAjIHBsYWluIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGNvbnZlcnRfcGF0aChpdGVtKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShpdGVtKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICAgICAgZWxzZTogICAgIyBhIChkaXJuYW1lLCBmaWxlbmFtZXMpIHR1cGxlCisgICAgICAgICAgICAgICAgICAgIGRpcm5hbWUsIGZpbGVuYW1lcyA9IGl0ZW0KKyAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGNvbnZlcnRfcGF0aChmKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoZikKKwogICAgICAgICBpZiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfZXh0X21vZHVsZXMoKToKICAgICAgICAgICAgIGJ1aWxkX2V4dCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZF9leHQnKQogICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5leHRlbmQoYnVpbGRfZXh0LmdldF9zb3VyY2VfZmlsZXMoKSkKQEAgLTMwOSwxMCArMjkxLDcgQEAKICAgICAgICAgICAgIGJ1aWxkX3NjcmlwdHMgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfc2NyaXB0cycpCiAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmV4dGVuZChidWlsZF9zY3JpcHRzLmdldF9zb3VyY2VfZmlsZXMoKSkKIAotICAgICMgYWRkX2RlZmF1bHRzICgpCi0KLQotICAgIGRlZiByZWFkX3RlbXBsYXRlIChzZWxmKToKKyAgICBkZWYgcmVhZF90ZW1wbGF0ZShzZWxmKToKICAgICAgICAgIiIiUmVhZCBhbmQgcGFyc2UgbWFuaWZlc3QgdGVtcGxhdGUgZmlsZSBuYW1lZCBieSBzZWxmLnRlbXBsYXRlLgogCiAgICAgICAgICh1c3VhbGx5ICJNQU5JRkVTVC5pbiIpIFRoZSBwYXJzaW5nIGFuZCBwcm9jZXNzaW5nIGlzIGRvbmUgYnkKQEAgLTMzOSwxMCArMzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuY3VycmVudF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpKQogCi0gICAgIyByZWFkX3RlbXBsYXRlICgpCi0KLQotICAgIGRlZiBwcnVuZV9maWxlX2xpc3QgKHNlbGYpOgorICAgIGRlZiBwcnVuZV9maWxlX2xpc3Qoc2VsZik6CiAgICAgICAgICIiIlBydW5lIG9mZiBicmFuY2hlcyB0aGF0IG1pZ2h0IHNsaXAgaW50byB0aGUgZmlsZSBsaXN0IGFzIGNyZWF0ZWQKICAgICAgICAgYnkgJ3JlYWRfdGVtcGxhdGUoKScsIGJ1dCByZWFsbHkgZG9uJ3QgYmVsb25nIHRoZXJlOgogICAgICAgICAgICogdGhlIGJ1aWxkIHRyZWUgKHR5cGljYWxseSAiYnVpbGQiKQpAQCAtMzY4LDE5ICszNDQsMjkgQEAKICAgICAgICAgdmNzX3B0cm4gPSByJyhefCVzKSglcykoJXMpLionICUgKHNlcHMsICd8Jy5qb2luKHZjc19kaXJzKSwgc2VwcykKICAgICAgICAgc2VsZi5maWxlbGlzdC5leGNsdWRlX3BhdHRlcm4odmNzX3B0cm4sIGlzX3JlZ2V4PTEpCiAKLSAgICBkZWYgd3JpdGVfbWFuaWZlc3QgKHNlbGYpOgorICAgIGRlZiB3cml0ZV9tYW5pZmVzdChzZWxmKToKICAgICAgICAgIiIiV3JpdGUgdGhlIGZpbGUgbGlzdCBpbiAnc2VsZi5maWxlbGlzdCcgKHByZXN1bWFibHkgYXMgZmlsbGVkIGluCiAgICAgICAgIGJ5ICdhZGRfZGVmYXVsdHMoKScgYW5kICdyZWFkX3RlbXBsYXRlKCknKSB0byB0aGUgbWFuaWZlc3QgZmlsZQogICAgICAgICBuYW1lZCBieSAnc2VsZi5tYW5pZmVzdCcuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmV4ZWN1dGUoZmlsZV91dGlsLndyaXRlX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYW5pZmVzdCwgc2VsZi5maWxlbGlzdC5maWxlcyksCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYubWFuaWZlc3QpOgorICAgICAgICAgICAgZnAgPSBvcGVuKHNlbGYubWFuaWZlc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlyc3RfbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICBpZiBmaXJzdF9saW5lICE9ICcjIGZpbGUgR0VORVJBVEVEIGJ5IGRpc3R1dGlscywgZG8gTk9UIGVkaXRcbic6CisgICAgICAgICAgICAgICAgbG9nLmluZm8oIm5vdCB3cml0aW5nIHRvIG1hbnVhbGx5IG1haW50YWluZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJtYW5pZmVzdCBmaWxlICclcyciICUgc2VsZi5tYW5pZmVzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjb250ZW50ID0gc2VsZi5maWxlbGlzdC5maWxlc1s6XQorICAgICAgICBjb250ZW50Lmluc2VydCgwLCAnIyBmaWxlIEdFTkVSQVRFRCBieSBkaXN0dXRpbHMsIGRvIE5PVCBlZGl0JykKKyAgICAgICAgc2VsZi5leGVjdXRlKGZpbGVfdXRpbC53cml0ZV9maWxlLCAoc2VsZi5tYW5pZmVzdCwgY29udGVudCksCiAgICAgICAgICAgICAgICAgICAgICAid3JpdGluZyBtYW5pZmVzdCBmaWxlICclcyciICUgc2VsZi5tYW5pZmVzdCkKIAotICAgICMgd3JpdGVfbWFuaWZlc3QgKCkKLQotCi0gICAgZGVmIHJlYWRfbWFuaWZlc3QgKHNlbGYpOgorICAgIGRlZiByZWFkX21hbmlmZXN0KHNlbGYpOgogICAgICAgICAiIiJSZWFkIHRoZSBtYW5pZmVzdCBmaWxlIChuYW1lZCBieSAnc2VsZi5tYW5pZmVzdCcpIGFuZCB1c2UgaXQgdG8KICAgICAgICAgZmlsbCBpbiAnc2VsZi5maWxlbGlzdCcsIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHNvdXJjZQogICAgICAgICBkaXN0cmlidXRpb24uCkBAIC0zOTYsMTAgKzM4Miw3IEBACiAgICAgICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZChsaW5lKQogICAgICAgICBtYW5pZmVzdC5jbG9zZSgpCiAKLSAgICAjIHJlYWRfbWFuaWZlc3QgKCkKLQotCi0gICAgZGVmIG1ha2VfcmVsZWFzZV90cmVlIChzZWxmLCBiYXNlX2RpciwgZmlsZXMpOgorICAgIGRlZiBtYWtlX3JlbGVhc2VfdHJlZShzZWxmLCBiYXNlX2RpciwgZmlsZXMpOgogICAgICAgICAiIiJDcmVhdGUgdGhlIGRpcmVjdG9yeSB0cmVlIHRoYXQgd2lsbCBiZWNvbWUgdGhlIHNvdXJjZQogICAgICAgICBkaXN0cmlidXRpb24gYXJjaGl2ZS4gIEFsbCBkaXJlY3RvcmllcyBpbXBsaWVkIGJ5IHRoZSBmaWxlbmFtZXMgaW4KICAgICAgICAgJ2ZpbGVzJyBhcmUgY3JlYXRlZCB1bmRlciAnYmFzZV9kaXInLCBhbmQgdGhlbiB3ZSBoYXJkIGxpbmsgb3IgY29weQpAQCAtNDQxLDkgKzQyNCw3IEBACiAKICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24ubWV0YWRhdGEud3JpdGVfcGtnX2luZm8oYmFzZV9kaXIpCiAKLSAgICAjIG1ha2VfcmVsZWFzZV90cmVlICgpCi0KLSAgICBkZWYgbWFrZV9kaXN0cmlidXRpb24gKHNlbGYpOgorICAgIGRlZiBtYWtlX2Rpc3RyaWJ1dGlvbihzZWxmKToKICAgICAgICAgIiIiQ3JlYXRlIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uKHMpLiAgRmlyc3QsIHdlIGNyZWF0ZSB0aGUgcmVsZWFzZQogICAgICAgICB0cmVlIHdpdGggJ21ha2VfcmVsZWFzZV90cmVlKCknOyB0aGVuLCB3ZSBjcmVhdGUgYWxsIHJlcXVpcmVkCiAgICAgICAgIGFyY2hpdmUgZmlsZXMgKGFjY29yZGluZyB0byAnc2VsZi5mb3JtYXRzJykgZnJvbSB0aGUgcmVsZWFzZSB0cmVlLgpAQCAtNDYzLDcgKzQ0NCw4IEBACiAgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKHNlbGYuZm9ybWF0cy5wb3Aoc2VsZi5mb3JtYXRzLmluZGV4KCd0YXInKSkpCiAKICAgICAgICAgZm9yIGZtdCBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKCgnc2Rpc3QnLCAnJywgZmlsZSkpCiAKQEAgLTQ3MiwxMCArNDU0LDggQEAKICAgICAgICAgaWYgbm90IHNlbGYua2VlcF90ZW1wOgogICAgICAgICAgICAgZGlyX3V0aWwucmVtb3ZlX3RyZWUoYmFzZV9kaXIsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCi0gICAgZGVmIGdldF9hcmNoaXZlX2ZpbGVzIChzZWxmKToKKyAgICBkZWYgZ2V0X2FyY2hpdmVfZmlsZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBhcmNoaXZlIGZpbGVzIGNyZWF0ZWQgd2hlbiB0aGUgY29tbWFuZAogICAgICAgICB3YXMgcnVuLCBvciBOb25lIGlmIHRoZSBjb21tYW5kIGhhc24ndCBydW4geWV0LgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXJjaGl2ZV9maWxlcwotCi0jIGNsYXNzIHNkaXN0CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQppbmRleCA5MzcyN2FlLi5kMDEzMzM1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKQEAgLTEsMjEgKzEsMTkgQEAKICIiImRpc3R1dGlscy5jb21tYW5kLnVwbG9hZAogCiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ3VwbG9hZCcgc3ViY29tbWFuZCAodXBsb2FkIHBhY2thZ2UgdG8gUHlQSSkuIiIiCi0KLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi1mcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQogaW1wb3J0IG9zCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgcGxhdGZvcm0KLWltcG9ydCBodHRwbGliCitmcm9tIHVybGxpYjIgaW1wb3J0IHVybG9wZW4sIFJlcXVlc3QsIEhUVFBFcnJvcgogZnJvbSBiYXNlNjQgaW1wb3J0IHN0YW5kYXJkX2I2NGVuY29kZQogaW1wb3J0IHVybHBhcnNlCiBpbXBvcnQgY1N0cmluZ0lPIGFzIFN0cmluZ0lPCi1mcm9tIENvbmZpZ1BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyCitmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQogCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCitmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogY2xhc3MgdXBsb2FkKFB5UElSQ0NvbW1hbmQpOgogCkBAIC01MCw2ICs0OCwxMSBAQAogICAgICAgICAgICAgc2VsZi5yZXBvc2l0b3J5ID0gY29uZmlnWydyZXBvc2l0b3J5J10KICAgICAgICAgICAgIHNlbGYucmVhbG0gPSBjb25maWdbJ3JlYWxtJ10KIAorICAgICAgICAjIGdldHRpbmcgdGhlIHBhc3N3b3JkIGZyb20gdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIGlmIHByZXZpb3VzbHkgc2V0IGJ5IHRoZSByZWdpc3RlciBjb21tYW5kCisgICAgICAgIGlmIG5vdCBzZWxmLnBhc3N3b3JkIGFuZCBzZWxmLmRpc3RyaWJ1dGlvbi5wYXNzd29yZDoKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBzZWxmLmRpc3RyaWJ1dGlvbi5wYXNzd29yZAorCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXM6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcigiTm8gZGlzdCBmaWxlIGNyZWF0ZWQgaW4gZWFybGllciBjb21tYW5kIikKQEAgLTU3LDYgKzYwLDE1IEBACiAgICAgICAgICAgICBzZWxmLnVwbG9hZF9maWxlKGNvbW1hbmQsIHB5dmVyc2lvbiwgZmlsZW5hbWUpCiAKICAgICBkZWYgdXBsb2FkX2ZpbGUoc2VsZiwgY29tbWFuZCwgcHl2ZXJzaW9uLCBmaWxlbmFtZSk6CisgICAgICAgICMgTWFrZXMgc3VyZSB0aGUgcmVwb3NpdG9yeSBVUkwgaXMgY29tcGxpYW50CisgICAgICAgIHNjaGVtYSwgbmV0bG9jLCB1cmwsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50cyA9IFwKKyAgICAgICAgICAgIHVybHBhcnNlLnVybHBhcnNlKHNlbGYucmVwb3NpdG9yeSkKKyAgICAgICAgaWYgcGFyYW1zIG9yIHF1ZXJ5IG9yIGZyYWdtZW50czoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJJbmNvbXBhdGlibGUgdXJsICVzIiAlIHNlbGYucmVwb3NpdG9yeSkKKworICAgICAgICBpZiBzY2hlbWEgbm90IGluICgnaHR0cCcsICdodHRwcycpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInVuc3VwcG9ydGVkIHNjaGVtYSAiICsgc2NoZW1hKQorCiAgICAgICAgICMgU2lnbiBpZiByZXF1ZXN0ZWQKICAgICAgICAgaWYgc2VsZi5zaWduOgogICAgICAgICAgICAgZ3BnX2FyZ3MgPSBbImdwZyIsICItLWRldGFjaC1zaWduIiwgIi1hIiwgZmlsZW5hbWVdCkBAIC02Nyw3ICs3OSwxMSBAQAogCiAgICAgICAgICMgRmlsbCBpbiB0aGUgZGF0YSAtIHNlbmQgYWxsIHRoZSBtZXRhLWRhdGEgaW4gY2FzZSB3ZSBuZWVkIHRvCiAgICAgICAgICMgcmVnaXN0ZXIgYSBuZXcgcmVsZWFzZQotICAgICAgICBjb250ZW50ID0gb3BlbihmaWxlbmFtZSwncmInKS5yZWFkKCkKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsJ3JiJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgbWV0YSA9IHNlbGYuZGlzdHJpYnV0aW9uLm1ldGFkYXRhCiAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICAjIGFjdGlvbgpAQCAtMTI1LDEwICsxNDEsMTAgQEAKICAgICAgICAgYm9keSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgogICAgICAgICAgICAgIyBoYW5kbGUgbXVsdGlwbGUgZW50cmllcyBmb3IgdGhlIHNhbWUgbmFtZQotICAgICAgICAgICAgaWYgdHlwZSh2YWx1ZSkgIT0gdHlwZShbXSk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBbdmFsdWVdCiAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgdHVwbGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpOgogICAgICAgICAgICAgICAgICAgICBmbiA9ICc7ZmlsZW5hbWU9IiVzIicgJSB2YWx1ZVswXQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzFdCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE0OCwzOSArMTY0LDMxIEBACiAgICAgICAgIHNlbGYuYW5ub3VuY2UoIlN1Ym1pdHRpbmcgJXMgdG8gJXMiICUgKGZpbGVuYW1lLCBzZWxmLnJlcG9zaXRvcnkpLCBsb2cuSU5GTykKIAogICAgICAgICAjIGJ1aWxkIHRoZSBSZXF1ZXN0Ci0gICAgICAgICMgV2UgY2FuJ3QgdXNlIHVybGxpYjIgc2luY2Ugd2UgbmVlZCB0byBzZW5kIHRoZSBCYXNpYwotICAgICAgICAjIGF1dGggcmlnaHQgd2l0aCB0aGUgZmlyc3QgcmVxdWVzdAotICAgICAgICBzY2hlbWEsIG5ldGxvYywgdXJsLCBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudHMgPSBcCi0gICAgICAgICAgICB1cmxwYXJzZS51cmxwYXJzZShzZWxmLnJlcG9zaXRvcnkpCi0gICAgICAgIGFzc2VydCBub3QgcGFyYW1zIGFuZCBub3QgcXVlcnkgYW5kIG5vdCBmcmFnbWVudHMKLSAgICAgICAgaWYgc2NoZW1hID09ICdodHRwJzoKLSAgICAgICAgICAgIGh0dHAgPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKG5ldGxvYykKLSAgICAgICAgZWxpZiBzY2hlbWEgPT0gJ2h0dHBzJzoKLSAgICAgICAgICAgIGh0dHAgPSBodHRwbGliLkhUVFBTQ29ubmVjdGlvbihuZXRsb2MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvciwgInVuc3VwcG9ydGVkIHNjaGVtYSAiK3NjaGVtYQorICAgICAgICBoZWFkZXJzID0geydDb250ZW50LXR5cGUnOgorICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSVzJyAlIGJvdW5kYXJ5LAorICAgICAgICAgICAgICAgICAgICdDb250ZW50LWxlbmd0aCc6IHN0cihsZW4oYm9keSkpLAorICAgICAgICAgICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYXV0aH0KIAotICAgICAgICBkYXRhID0gJycKLSAgICAgICAgbG9nbGV2ZWwgPSBsb2cuSU5GTworICAgICAgICByZXF1ZXN0ID0gUmVxdWVzdChzZWxmLnJlcG9zaXRvcnksIGRhdGE9Ym9keSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1oZWFkZXJzKQorICAgICAgICAjIHNlbmQgdGhlIGRhdGEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaHR0cC5jb25uZWN0KCkKLSAgICAgICAgICAgIGh0dHAucHV0cmVxdWVzdCgiUE9TVCIsIHVybCkKLSAgICAgICAgICAgIGh0dHAucHV0aGVhZGVyKCdDb250ZW50LXR5cGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSVzJyVib3VuZGFyeSkKLSAgICAgICAgICAgIGh0dHAucHV0aGVhZGVyKCdDb250ZW50LWxlbmd0aCcsIHN0cihsZW4oYm9keSkpKQotICAgICAgICAgICAgaHR0cC5wdXRoZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBhdXRoKQotICAgICAgICAgICAgaHR0cC5lbmRoZWFkZXJzKCkKLSAgICAgICAgICAgIGh0dHAuc2VuZChib2R5KQorICAgICAgICAgICAgcmVzdWx0ID0gdXJsb3BlbihyZXF1ZXN0KQorICAgICAgICAgICAgc3RhdHVzID0gcmVzdWx0LmdldGNvZGUoKQorICAgICAgICAgICAgcmVhc29uID0gcmVzdWx0Lm1zZworICAgICAgICAgICAgaWYgc2VsZi5zaG93X3Jlc3BvbnNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICdcbicuam9pbigoJy0nICogNzUsIHIucmVhZCgpLCAnLScgKiA3NSkpCisgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShtc2csIGxvZy5JTkZPKQogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShzdHIoZSksIGxvZy5FUlJPUikKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgSFRUUEVycm9yLCBlOgorICAgICAgICAgICAgc3RhdHVzID0gZS5jb2RlCisgICAgICAgICAgICByZWFzb24gPSBlLm1zZwogCi0gICAgICAgIHIgPSBodHRwLmdldHJlc3BvbnNlKCkKLSAgICAgICAgaWYgci5zdGF0dXMgPT0gMjAwOgotICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChyLnN0YXR1cywgci5yZWFzb24pLAorICAgICAgICBpZiBzdGF0dXMgPT0gMjAwOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoci5zdGF0dXMsIHIucmVhc29uKSwKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJ1VwbG9hZCBmYWlsZWQgKCVzKTogJXMnICUgKHN0YXR1cywgcmVhc29uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLkVSUk9SKQotICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6Ci0gICAgICAgICAgICBwcmludCAnLScqNzUsIHIucmVhZCgpLCAnLScqNzUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKaW5kZXggNDE4NmM5Yi4uYWZhNDAzZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKQEAgLTQsNyArNCw2IEBACiB0aGF0IHVzZXMgLnB5cGlyYyBpbiB0aGUgZGlzdHV0aWxzLmNvbW1hbmQgcGFja2FnZS4KICIiIgogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBmcm9tIENvbmZpZ1BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyCiAKIGZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZApAQCAtNjAsOCArNTksNiBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyYyk6CiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCdVc2luZyBQeVBJIGxvZ2luIGZyb20gJXMnICUgcmMpCiAgICAgICAgICAgICByZXBvc2l0b3J5ID0gc2VsZi5yZXBvc2l0b3J5IG9yIHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZCi0gICAgICAgICAgICByZWFsbSA9IHNlbGYucmVhbG0gb3Igc2VsZi5ERUZBVUxUX1JFQUxNCi0KICAgICAgICAgICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlcigpCiAgICAgICAgICAgICBjb25maWcucmVhZChyYykKICAgICAgICAgICAgIHNlY3Rpb25zID0gY29uZmlnLnNlY3Rpb25zKCkKQEAgLTgyLDEyICs3OSwxMiBAQAogICAgICAgICAgICAgICAgIGZvciBzZXJ2ZXIgaW4gX3NlcnZlcnM6CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB7J3NlcnZlcic6IHNlcnZlcn0KICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsndXNlcm5hbWUnXSA9IGNvbmZpZy5nZXQoc2VydmVyLCAndXNlcm5hbWUnKQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydwYXNzd29yZCddID0gY29uZmlnLmdldChzZXJ2ZXIsICdwYXNzd29yZCcpCiAKICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBwYXJhbXMKICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZGVmYXVsdCBpbiAoKCdyZXBvc2l0b3J5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZWFsbScsIHNlbGYuREVGQVVMVF9SRUFMTSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgc2VsZi5ERUZBVUxUX1JFQUxNKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwYXNzd29yZCcsIE5vbmUpKToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmZpZy5oYXNfb3B0aW9uKHNlcnZlciwga2V5KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSBjb25maWcuZ2V0KHNlcnZlciwga2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCA2MmEzMzg5Li5iODk1NTdkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC02LDE1ICs2LDE0IEBACiByZWFsbHkgZGVmaW5lZCBpbiBkaXN0dXRpbHMuZGlzdCBhbmQgZGlzdHV0aWxzLmNtZC4KICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MKLWZyb20gdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcwogCiBmcm9tIGRpc3R1dGlscy5kZWJ1ZyBpbXBvcnQgREVCVUcKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzU2V0dXBFcnJvciwgRGlzdHV0aWxzQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0dXRpbHNFcnJvciwgQ0NvbXBpbGVyRXJyb3IpCiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBncm9rX2Vudmlyb25tZW50X2Vycm9yCiAKICMgTWFpbmx5IGltcG9ydCB0aGVzZSBzbyBzZXR1cCBzY3JpcHRzIGNhbiAiZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQiIHRoZW0uCkBAIC0zNCw5ICszMyw5IEBACiAgICBvcjogJShzY3JpcHQpcyBjbWQgLS1oZWxwCiAiIiIKIAotZGVmIGdlbl91c2FnZSAoc2NyaXB0X25hbWUpOgorZGVmIGdlbl91c2FnZShzY3JpcHRfbmFtZSk6CiAgICAgc2NyaXB0ID0gb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkKLSAgICByZXR1cm4gVVNBR0UgJSB2YXJzKCkKKyAgICByZXR1cm4gVVNBR0UgJSB7J3NjcmlwdCc6IHNjcmlwdH0KIAogCiAjIFNvbWUgbWlsZCBtYWdpYyB0byBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgJ3NldHVwKCknIGZyb20gJ3J1bl9zZXR1cCgpJy4KQEAgLTU5LDcgKzU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFfb2JqZWN0cycsICdleHRyYV9jb21waWxlX2FyZ3MnLCAnZXh0cmFfbGlua19hcmdzJywKICAgICAgICAgICAgICAgICAgICAgICAnc3dpZ19vcHRzJywgJ2V4cG9ydF9zeW1ib2xzJywgJ2RlcGVuZHMnLCAnbGFuZ3VhZ2UnKQogCi1kZWYgc2V0dXAgKCoqYXR0cnMpOgorZGVmIHNldHVwKCoqYXR0cnMpOgogICAgICIiIlRoZSBnYXRld2F5IHRvIHRoZSBEaXN0dXRpbHM6IGRvIGV2ZXJ5dGhpbmcgeW91ciBzZXR1cCBzY3JpcHQgbmVlZHMKICAgICB0byBkbywgaW4gYSBoaWdobHkgZmxleGlibGUgYW5kIHVzZXItZHJpdmVuIHdheS4gIEJyaWVmbHk6IGNyZWF0ZSBhCiAgICAgRGlzdHJpYnV0aW9uIGluc3RhbmNlOyBmaW5kIGFuZCBwYXJzZSBjb25maWcgZmlsZXM7IHBhcnNlIHRoZSBjb21tYW5kCkBAIC0xMzIsOCArMTMxLDkgQEAKICAgICBpZiBfc2V0dXBfc3RvcF9hZnRlciA9PSAiY29uZmlnIjoKICAgICAgICAgcmV0dXJuIGRpc3QKIAotICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZTsgYW55IGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzCi0gICAgIyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8gU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgorICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhbmQgb3ZlcnJpZGUgY29uZmlnIGZpbGVzOyBhbnkKKyAgICAjIGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50bworICAgICMgU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgogICAgIHRyeToKICAgICAgICAgb2sgPSBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCiAgICAgZXhjZXB0IERpc3R1dGlsc0FyZ0Vycm9yLCBtc2c6CkBAIC0xNzAsMTAgKzE3MCw4IEBACiAKICAgICByZXR1cm4gZGlzdAogCi0jIHNldHVwICgpCiAKLQotZGVmIHJ1bl9zZXR1cCAoc2NyaXB0X25hbWUsIHNjcmlwdF9hcmdzPU5vbmUsIHN0b3BfYWZ0ZXI9InJ1biIpOgorZGVmIHJ1bl9zZXR1cChzY3JpcHRfbmFtZSwgc2NyaXB0X2FyZ3M9Tm9uZSwgc3RvcF9hZnRlcj0icnVuIik6CiAgICAgIiIiUnVuIGEgc2V0dXAgc2NyaXB0IGluIGEgc29tZXdoYXQgY29udHJvbGxlZCBlbnZpcm9ubWVudCwgYW5kCiAgICAgcmV0dXJuIHRoZSBEaXN0cmlidXRpb24gaW5zdGFuY2UgdGhhdCBkcml2ZXMgdGhpbmdzLiAgVGhpcyBpcyB1c2VmdWwKICAgICBpZiB5b3UgbmVlZCB0byBmaW5kIG91dCB0aGUgZGlzdHJpYnV0aW9uIG1ldGEtZGF0YSAocGFzc2VkIGFzCkBAIC0yMTgsNyArMjE2LDExIEBACiAgICAgICAgICAgICBzeXMuYXJndlswXSA9IHNjcmlwdF9uYW1lCiAgICAgICAgICAgICBpZiBzY3JpcHRfYXJncyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzeXMuYXJndlsxOl0gPSBzY3JpcHRfYXJncwotICAgICAgICAgICAgZXhlYyBvcGVuKHNjcmlwdF9uYW1lLCAncicpLnJlYWQoKSBpbiBnLCBsCisgICAgICAgICAgICBmID0gb3BlbihzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjIGYucmVhZCgpIGluIGcsIGwKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuYXJndiA9IHNhdmVfYXJndgogICAgICAgICAgICAgX3NldHVwX3N0b3BfYWZ0ZXIgPSBOb25lCkBAIC0yMzcsNyArMjM5LDQgQEAKIAogICAgICMgSSB3b25kZXIgaWYgdGhlIHNldHVwIHNjcmlwdCdzIG5hbWVzcGFjZSAtLSBnIGFuZCBsIC0tIHdvdWxkIGJlIG9mCiAgICAgIyBhbnkgaW50ZXJlc3QgdG8gY2FsbGVycz8KLSAgICAjcHJpbnQgIl9zZXR1cF9kaXN0cmlidXRpb246IiwgX3NldHVwX2Rpc3RyaWJ1dGlvbgogICAgIHJldHVybiBfc2V0dXBfZGlzdHJpYnV0aW9uCi0KLSMgcnVuX3NldHVwICgpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CmluZGV4IDJkYWJjMGYuLmExZWU4MTUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CkBAIC0zODIsOCArMzgyLDEwIEBACiAgICAgICAgICMgSXQgd291bGQgcHJvYmFibHkgYmV0dGVyIHRvIHJlYWQgc2luZ2xlIGxpbmVzIHRvIHNlYXJjaC4KICAgICAgICAgIyBCdXQgd2UgZG8gdGhpcyBvbmx5IG9uY2UsIGFuZCBpdCBpcyBmYXN0IGVub3VnaAogICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgcyA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZXhjZXB0IElPRXJyb3IsIGV4YzoKICAgICAgICAgIyBpZiB3ZSBjYW4ndCByZWFkIHRoaXMgZmlsZSwgd2UgY2Fubm90IHNheSBpdCBpcyB3cm9uZwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kZWJ1Zy5weSBiL0xpYi9kaXN0dXRpbHMvZGVidWcucHkKaW5kZXggYjY3MTM5Yy4uMjg4Njc0NCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kZWJ1Zy5weQorKysgYi9MaWIvZGlzdHV0aWxzL2RlYnVnLnB5CkBAIC0xLDcgKzEsNSBAQAogaW1wb3J0IG9zCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCiAjIElmIERJU1RVVElMU19ERUJVRyBpcyBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBlbXB0eSBzdHJpbmcsIHdlIHJ1biBpbgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kZXBfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGVwX3V0aWwucHkKaW5kZXggMmM2ZDc5Mi4uNGU0MGRmNiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kZXBfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2RlcF91dGlsLnB5CkBAIC00LDM2ICs0LDMyIEBACiBhbmQgZ3JvdXBzIG9mIGZpbGVzOyBhbHNvLCBmdW5jdGlvbiBiYXNlZCBlbnRpcmVseSBvbiBzdWNoCiB0aW1lc3RhbXAgZGVwZW5kZW5jeSBhbmFseXNpcy4iIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKIGltcG9ydCBvcwogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNGaWxlRXJyb3IKIAorZGVmIG5ld2VyKHNvdXJjZSwgdGFyZ2V0KToKKyAgICAiIiJUZWxscyBpZiB0aGUgdGFyZ2V0IGlzIG5ld2VyIHRoYW4gdGhlIHNvdXJjZS4KIAotZGVmIG5ld2VyIChzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIiUmV0dXJuIHRydWUgaWYgJ3NvdXJjZScgZXhpc3RzIGFuZCBpcyBtb3JlIHJlY2VudGx5IG1vZGlmaWVkIHRoYW4KLSAgICAndGFyZ2V0Jywgb3IgaWYgJ3NvdXJjZScgZXhpc3RzIGFuZCAndGFyZ2V0JyBkb2Vzbid0LiAgUmV0dXJuIGZhbHNlIGlmCi0gICAgYm90aCBleGlzdCBhbmQgJ3RhcmdldCcgaXMgdGhlIHNhbWUgYWdlIG9yIHlvdW5nZXIgdGhhbiAnc291cmNlJy4KLSAgICBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgJ3NvdXJjZScgZG9lcyBub3QgZXhpc3QuCisgICAgUmV0dXJuIHRydWUgaWYgJ3NvdXJjZScgZXhpc3RzIGFuZCBpcyBtb3JlIHJlY2VudGx5IG1vZGlmaWVkIHRoYW4KKyAgICAndGFyZ2V0Jywgb3IgaWYgJ3NvdXJjZScgZXhpc3RzIGFuZCAndGFyZ2V0JyBkb2Vzbid0LgorCisgICAgUmV0dXJuIGZhbHNlIGlmIGJvdGggZXhpc3QgYW5kICd0YXJnZXQnIGlzIHRoZSBzYW1lIGFnZSBvciB5b3VuZ2VyCisgICAgdGhhbiAnc291cmNlJy4gUmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yIGlmICdzb3VyY2UnIGRvZXMgbm90IGV4aXN0LgorCisgICAgTm90ZSB0aGF0IHRoaXMgdGVzdCBpcyBub3QgdmVyeSBhY2N1cmF0ZTogZmlsZXMgY3JlYXRlZCBpbiB0aGUgc2FtZSBzZWNvbmQKKyAgICB3aWxsIGhhdmUgdGhlIHNhbWUgImFnZSIuCiAgICAgIiIiCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNvdXJjZSk6Ci0gICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgKCJmaWxlICclcycgZG9lcyBub3QgZXhpc3QiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKHNvdXJjZSkpCisgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigiZmlsZSAnJXMnIGRvZXMgbm90IGV4aXN0IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0KToKLSAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGZyb20gc3RhdCBpbXBvcnQgU1RfTVRJTUUKLSAgICBtdGltZTEgPSBvcy5zdGF0KHNvdXJjZSlbU1RfTVRJTUVdCi0gICAgbXRpbWUyID0gb3Muc3RhdCh0YXJnZXQpW1NUX01USU1FXQorICAgIHJldHVybiBvcy5zdGF0KHNvdXJjZSkuc3RfbXRpbWUgPiBvcy5zdGF0KHRhcmdldCkuc3RfbXRpbWUKIAotICAgIHJldHVybiBtdGltZTEgPiBtdGltZTIKLQotIyBuZXdlciAoKQotCi0KLWRlZiBuZXdlcl9wYWlyd2lzZSAoc291cmNlcywgdGFyZ2V0cyk6CitkZWYgbmV3ZXJfcGFpcndpc2Uoc291cmNlcywgdGFyZ2V0cyk6CiAgICAgIiIiV2FsayB0d28gZmlsZW5hbWUgbGlzdHMgaW4gcGFyYWxsZWwsIHRlc3RpbmcgaWYgZWFjaCBzb3VyY2UgaXMgbmV3ZXIKICAgICB0aGFuIGl0cyBjb3JyZXNwb25kaW5nIHRhcmdldC4gIFJldHVybiBhIHBhaXIgb2YgbGlzdHMgKHNvdXJjZXMsCiAgICAgdGFyZ2V0cykgd2hlcmUgc291cmNlIGlzIG5ld2VyIHRoYW4gdGFyZ2V0LCBhY2NvcmRpbmcgdG8gdGhlIHNlbWFudGljcwpAQCAtNDUsMTkgKzQxLDE4IEBACiAgICAgIyBidWlsZCBhIHBhaXIgb2YgbGlzdHMgKHNvdXJjZXMsIHRhcmdldHMpIHdoZXJlICBzb3VyY2UgaXMgbmV3ZXIKICAgICBuX3NvdXJjZXMgPSBbXQogICAgIG5fdGFyZ2V0cyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNvdXJjZXMpKToKLSAgICAgICAgaWYgbmV3ZXIoc291cmNlc1tpXSwgdGFyZ2V0c1tpXSk6Ci0gICAgICAgICAgICBuX3NvdXJjZXMuYXBwZW5kKHNvdXJjZXNbaV0pCi0gICAgICAgICAgICBuX3RhcmdldHMuYXBwZW5kKHRhcmdldHNbaV0pCisgICAgZm9yIHNvdXJjZSwgdGFyZ2V0IGluIHppcChzb3VyY2VzLCB0YXJnZXRzKToKKyAgICAgICAgaWYgbmV3ZXIoc291cmNlLCB0YXJnZXQpOgorICAgICAgICAgICAgbl9zb3VyY2VzLmFwcGVuZChzb3VyY2UpCisgICAgICAgICAgICBuX3RhcmdldHMuYXBwZW5kKHRhcmdldCkKIAotICAgIHJldHVybiAobl9zb3VyY2VzLCBuX3RhcmdldHMpCisgICAgcmV0dXJuIG5fc291cmNlcywgbl90YXJnZXRzCiAKLSMgbmV3ZXJfcGFpcndpc2UgKCkKLQotCi1kZWYgbmV3ZXJfZ3JvdXAgKHNvdXJjZXMsIHRhcmdldCwgbWlzc2luZz0nZXJyb3InKToKK2RlZiBuZXdlcl9ncm91cChzb3VyY2VzLCB0YXJnZXQsIG1pc3Npbmc9J2Vycm9yJyk6CiAgICAgIiIiUmV0dXJuIHRydWUgaWYgJ3RhcmdldCcgaXMgb3V0LW9mLWRhdGUgd2l0aCByZXNwZWN0IHRvIGFueSBmaWxlCi0gICAgbGlzdGVkIGluICdzb3VyY2VzJy4gIEluIG90aGVyIHdvcmRzLCBpZiAndGFyZ2V0JyBleGlzdHMgYW5kIGlzIG5ld2VyCisgICAgbGlzdGVkIGluICdzb3VyY2VzJy4KKworICAgIEluIG90aGVyIHdvcmRzLCBpZiAndGFyZ2V0JyBleGlzdHMgYW5kIGlzIG5ld2VyCiAgICAgdGhhbiBldmVyeSBmaWxlIGluICdzb3VyY2VzJywgcmV0dXJuIGZhbHNlOyBvdGhlcndpc2UgcmV0dXJuIHRydWUuCiAgICAgJ21pc3NpbmcnIGNvbnRyb2xzIHdoYXQgd2UgZG8gd2hlbiBhIHNvdXJjZSBmaWxlIGlzIG1pc3Npbmc7IHRoZQogICAgIGRlZmF1bHQgKCJlcnJvciIpIGlzIHRvIGJsb3cgdXAgd2l0aCBhbiBPU0Vycm9yIGZyb20gaW5zaWRlICdzdGF0KCknOwpAQCAtNzAsMTQgKzY1LDE0IEBACiAgICAgIiIiCiAgICAgIyBJZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXZlbiBleGlzdCwgdGhlbiBpdCdzIGRlZmluaXRlbHkgb3V0LW9mLWRhdGUuCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldCk6Ci0gICAgICAgIHJldHVybiAxCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIE90aGVyd2lzZSB3ZSBoYXZlIHRvIGZpbmQgb3V0IHRoZSBoYXJkIHdheTogaWYgKmFueSogc291cmNlIGZpbGUKICAgICAjIGlzIG1vcmUgcmVjZW50IHRoYW4gJ3RhcmdldCcsIHRoZW4gJ3RhcmdldCcgaXMgb3V0LW9mLWRhdGUgYW5kCiAgICAgIyB3ZSBjYW4gaW1tZWRpYXRlbHkgcmV0dXJuIHRydWUuICBJZiB3ZSBmYWxsIHRocm91Z2ggdG8gdGhlIGVuZAogICAgICMgb2YgdGhlIGxvb3AsIHRoZW4gJ3RhcmdldCcgaXMgdXAtdG8tZGF0ZSBhbmQgd2UgcmV0dXJuIGZhbHNlLgotICAgIGZyb20gc3RhdCBpbXBvcnQgU1RfTVRJTUUKLSAgICB0YXJnZXRfbXRpbWUgPSBvcy5zdGF0KHRhcmdldClbU1RfTVRJTUVdCisgICAgdGFyZ2V0X210aW1lID0gb3Muc3RhdCh0YXJnZXQpLnN0X210aW1lCisKICAgICBmb3Igc291cmNlIGluIHNvdXJjZXM6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2UpOgogICAgICAgICAgICAgaWYgbWlzc2luZyA9PSAnZXJyb3InOiAgICAgICMgYmxvdyB1cCB3aGVuIHdlIHN0YXQoKSB0aGUgZmlsZQpAQCAtODUsMTIgKzgwLDkgQEAKICAgICAgICAgICAgIGVsaWYgbWlzc2luZyA9PSAnaWdub3JlJzogICAjIG1pc3Npbmcgc291cmNlIGRyb3BwZWQgZnJvbQogICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgICAgICAgICAgICAgICMgIHRhcmdldCdzIGRlcGVuZGVuY3kgbGlzdAogICAgICAgICAgICAgZWxpZiBtaXNzaW5nID09ICduZXdlcic6ICAgICMgbWlzc2luZyBzb3VyY2UgbWVhbnMgdGFyZ2V0IGlzCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEgICAgICAgICAgICAgICAgIyAgb3V0LW9mLWRhdGUKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAgICAgICAgICAgICAjICBvdXQtb2YtZGF0ZQogCi0gICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnN0YXQoc291cmNlKVtTVF9NVElNRV0KLSAgICAgICAgaWYgc291cmNlX210aW1lID4gdGFyZ2V0X210aW1lOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBvcy5zdGF0KHNvdXJjZSkuc3RfbXRpbWUgPiB0YXJnZXRfbXRpbWU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0jIG5ld2VyX2dyb3VwICgpCisgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQppbmRleCA5MmY0OTM0Li45YzVjZjMzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKQEAgLTIsMTIgKzIsMTAgQEAKIAogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBkaXJlY3RvcmllcyBhbmQgZGlyZWN0b3J5IHRyZWVzLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IG9zLCBzeXMKLWZyb20gdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvciwgRGlzdHV0aWxzSW50ZXJuYWxFcnJvcgogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCkBAIC0xOCwyMCArMTYsMjEgQEAKICMgSSBkb24ndCB1c2Ugb3MubWFrZWRpcnMgYmVjYXVzZSBhKSBpdCdzIG5ldyB0byBQeXRob24gMS41LjIsIGFuZAogIyBiKSBpdCBibG93cyB1cCBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIChJIHdhbnQgdG8gc2lsZW50bHkKICMgc3VjY2VlZCBpbiB0aGF0IGNhc2UpLgotZGVmIG1rcGF0aCAobmFtZSwgbW9kZT0wNzc3LCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Ci0gICAgIiIiQ3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBhbnkgbWlzc2luZyBhbmNlc3RvciBkaXJlY3Rvcmllcy4gIElmIHRoZQotICAgICAgIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyAob3IgaWYgJ25hbWUnIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHdoaWNoCi0gICAgICAgbWVhbnMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBvZiBjb3Vyc2UgZXhpc3RzKSwgdGhlbiBkbwotICAgICAgIG5vdGhpbmcuICBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgdW5hYmxlIHRvIGNyZWF0ZSBzb21lCi0gICAgICAgZGlyZWN0b3J5IGFsb25nIHRoZSB3YXkgKGVnLiBzb21lIHN1Yi1wYXRoIGV4aXN0cywgYnV0IGlzIGEgZmlsZQotICAgICAgIHJhdGhlciB0aGFuIGEgZGlyZWN0b3J5KS4gIElmICd2ZXJib3NlJyBpcyB0cnVlLCBwcmludCBhIG9uZS1saW5lCi0gICAgICAgc3VtbWFyeSBvZiBlYWNoIG1rZGlyIHRvIHN0ZG91dC4gIFJldHVybiB0aGUgbGlzdCBvZiBkaXJlY3RvcmllcwotICAgICAgIGFjdHVhbGx5IGNyZWF0ZWQuIiIiCitkZWYgbWtwYXRoKG5hbWUsIG1vZGU9MDc3NywgdmVyYm9zZT0xLCBkcnlfcnVuPTApOgorICAgICIiIkNyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgYW55IG1pc3NpbmcgYW5jZXN0b3IgZGlyZWN0b3JpZXMuCisKKyAgICBJZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIChvciBpZiAnbmFtZScgaXMgdGhlIGVtcHR5IHN0cmluZywgd2hpY2gKKyAgICBtZWFucyB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoaWNoIG9mIGNvdXJzZSBleGlzdHMpLCB0aGVuIGRvIG5vdGhpbmcuCisgICAgUmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yIGlmIHVuYWJsZSB0byBjcmVhdGUgc29tZSBkaXJlY3RvcnkgYWxvbmcgdGhlIHdheQorICAgIChlZy4gc29tZSBzdWItcGF0aCBleGlzdHMsIGJ1dCBpcyBhIGZpbGUgcmF0aGVyIHRoYW4gYSBkaXJlY3RvcnkpLgorICAgIElmICd2ZXJib3NlJyBpcyB0cnVlLCBwcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgZWFjaCBta2RpciB0byBzdGRvdXQuCisgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIGFjdHVhbGx5IGNyZWF0ZWQuCisgICAgIiIiCiAKICAgICBnbG9iYWwgX3BhdGhfY3JlYXRlZAogCiAgICAgIyBEZXRlY3QgYSBjb21tb24gYnVnIC0tIG5hbWUgaXMgTm9uZQotICAgIGlmIG5vdCBpc2luc3RhbmNlKG5hbWUsIFN0cmluZ1R5cGVzKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzSW50ZXJuYWxFcnJvciwgXAogICAgICAgICAgICAgICAibWtwYXRoOiAnbmFtZScgbXVzdCBiZSBhIHN0cmluZyAoZ290ICVyKSIgJSAobmFtZSwpCiAKQEAgLTUxLDEzICs1MCw5IEBACiAgICAgdGFpbHMgPSBbdGFpbF0gICAgICAgICAgICAgICAgICAgICAgIyBzdGFjayBvZiBsb25lIGRpcnMgdG8gY3JlYXRlCiAKICAgICB3aGlsZSBoZWFkIGFuZCB0YWlsIGFuZCBub3Qgb3MucGF0aC5pc2RpcihoZWFkKToKLSAgICAgICAgI3ByaW50ICJzcGxpdHRpbmcgJyVzJzogIiAlIGhlYWQsCiAgICAgICAgIChoZWFkLCB0YWlsKSA9IG9zLnBhdGguc3BsaXQoaGVhZCkKLSAgICAgICAgI3ByaW50ICJ0byAoJyVzJywnJXMnKSIgJSAoaGVhZCwgdGFpbCkKICAgICAgICAgdGFpbHMuaW5zZXJ0KDAsIHRhaWwpICAgICAgICAgICMgcHVzaCBuZXh0IGhpZ2hlciBkaXIgb250byBzdGFjawogCi0gICAgI3ByaW50ICJzdGFjayBvZiB0YWlsczoiLCB0YWlscwotCiAgICAgIyBub3cgJ2hlYWQnIGNvbnRhaW5zIHRoZSBkZWVwZXN0IGRpcmVjdG9yeSB0aGF0IGFscmVhZHkgZXhpc3RzCiAgICAgIyAodGhhdCBpcywgdGhlIGNoaWxkIG9mICdoZWFkJyBpbiAnbmFtZScgaXMgdGhlIGhpZ2hlc3QgZGlyZWN0b3J5CiAgICAgIyB0aGF0IGRvZXMgKm5vdCogZXhpc3QpCkBAIC02OSwzMiArNjQsMzEgQEAKICAgICAgICAgaWYgX3BhdGhfY3JlYXRlZC5nZXQoYWJzX2hlYWQpOgogICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICBsb2cuaW5mbygiY3JlYXRpbmcgJXMiLCBoZWFkKQorICAgICAgICBpZiB2ZXJib3NlID49IDE6CisgICAgICAgICAgICBsb2cuaW5mbygiY3JlYXRpbmcgJXMiLCBoZWFkKQogCiAgICAgICAgIGlmIG5vdCBkcnlfcnVuOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKGhlYWQpCi0gICAgICAgICAgICAgICAgY3JlYXRlZF9kaXJzLmFwcGVuZChoZWFkKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKGhlYWQsIG1vZGUpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXhjOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlICclcyc6ICVzIiAlIChoZWFkLCBleGNbLTFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCAoZXhjLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgb3MucGF0aC5pc2RpcihoZWFkKSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgJyVzJzogJXMiICUgKGhlYWQsIGV4Yy5hcmdzWy0xXSkpCisgICAgICAgICAgICBjcmVhdGVkX2RpcnMuYXBwZW5kKGhlYWQpCiAKICAgICAgICAgX3BhdGhfY3JlYXRlZFthYnNfaGVhZF0gPSAxCiAgICAgcmV0dXJuIGNyZWF0ZWRfZGlycwogCi0jIG1rcGF0aCAoKQorZGVmIGNyZWF0ZV90cmVlKGJhc2VfZGlyLCBmaWxlcywgbW9kZT0wNzc3LCB2ZXJib3NlPTEsIGRyeV9ydW49MCk6CisgICAgIiIiQ3JlYXRlIGFsbCB0aGUgZW1wdHkgZGlyZWN0b3JpZXMgdW5kZXIgJ2Jhc2VfZGlyJyBuZWVkZWQgdG8gcHV0ICdmaWxlcycKKyAgICB0aGVyZS4KIAotCi1kZWYgY3JlYXRlX3RyZWUgKGJhc2VfZGlyLCBmaWxlcywgbW9kZT0wNzc3LCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Ci0KLSAgICAiIiJDcmVhdGUgYWxsIHRoZSBlbXB0eSBkaXJlY3RvcmllcyB1bmRlciAnYmFzZV9kaXInIG5lZWRlZCB0bwotICAgICAgIHB1dCAnZmlsZXMnIHRoZXJlLiAgJ2Jhc2VfZGlyJyBpcyBqdXN0IHRoZSBhIG5hbWUgb2YgYSBkaXJlY3RvcnkKLSAgICAgICB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGV4aXN0IHlldDsgJ2ZpbGVzJyBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzCi0gICAgICAgdG8gYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gJ2Jhc2VfZGlyJy4gICdiYXNlX2RpcicgKyB0aGUKLSAgICAgICBkaXJlY3RvcnkgcG9ydGlvbiBvZiBldmVyeSBmaWxlIGluICdmaWxlcycgd2lsbCBiZSBjcmVhdGVkIGlmIGl0Ci0gICAgICAgZG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgJ21vZGUnLCAndmVyYm9zZScgYW5kICdkcnlfcnVuJyBmbGFncyBhcmUgYXMKLSAgICAgICBmb3IgJ21rcGF0aCgpJy4iIiIKLQorICAgICdiYXNlX2RpcicgaXMganVzdCB0aGUgYSBuYW1lIG9mIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkKKyAgICBleGlzdCB5ZXQ7ICdmaWxlcycgaXMgYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0bworICAgICdiYXNlX2RpcicuICAnYmFzZV9kaXInICsgdGhlIGRpcmVjdG9yeSBwb3J0aW9uIG9mIGV2ZXJ5IGZpbGUgaW4gJ2ZpbGVzJworICAgIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICAnbW9kZScsICd2ZXJib3NlJyBhbmQKKyAgICAnZHJ5X3J1bicgZmxhZ3MgYXJlIGFzIGZvciAnbWtwYXRoKCknLgorICAgICIiIgogICAgICMgRmlyc3QgZ2V0IHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZQogICAgIG5lZWRfZGlyID0ge30KICAgICBmb3IgZmlsZSBpbiBmaWxlczoKQEAgLTEwNCwzNyArOTgsMjkgQEAKIAogICAgICMgTm93IGNyZWF0ZSB0aGVtCiAgICAgZm9yIGRpciBpbiBuZWVkX2RpcnM6Ci0gICAgICAgIG1rcGF0aChkaXIsIG1vZGUsIGRyeV9ydW49ZHJ5X3J1bikKKyAgICAgICAgbWtwYXRoKGRpciwgbW9kZSwgdmVyYm9zZT12ZXJib3NlLCBkcnlfcnVuPWRyeV9ydW4pCiAKLSMgY3JlYXRlX3RyZWUgKCkKK2RlZiBjb3B5X3RyZWUoc3JjLCBkc3QsIHByZXNlcnZlX21vZGU9MSwgcHJlc2VydmVfdGltZXM9MSwKKyAgICAgICAgICAgICAgcHJlc2VydmVfc3ltbGlua3M9MCwgdXBkYXRlPTAsIHZlcmJvc2U9MSwgZHJ5X3J1bj0wKToKKyAgICAiIiJDb3B5IGFuIGVudGlyZSBkaXJlY3RvcnkgdHJlZSAnc3JjJyB0byBhIG5ldyBsb2NhdGlvbiAnZHN0Jy4KIAorICAgIEJvdGggJ3NyYycgYW5kICdkc3QnIG11c3QgYmUgZGlyZWN0b3J5IG5hbWVzLiAgSWYgJ3NyYycgaXMgbm90IGEKKyAgICBkaXJlY3RvcnksIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvci4gIElmICdkc3QnIGRvZXMgbm90IGV4aXN0LCBpdCBpcworICAgIGNyZWF0ZWQgd2l0aCAnbWtwYXRoKCknLiAgVGhlIGVuZCByZXN1bHQgb2YgdGhlIGNvcHkgaXMgdGhhdCBldmVyeQorICAgIGZpbGUgaW4gJ3NyYycgaXMgY29waWVkIHRvICdkc3QnLCBhbmQgZGlyZWN0b3JpZXMgdW5kZXIgJ3NyYycgYXJlCisgICAgcmVjdXJzaXZlbHkgY29waWVkIHRvICdkc3QnLiAgUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgd2VyZQorICAgIGNvcGllZCBvciBtaWdodCBoYXZlIGJlZW4gY29waWVkLCB1c2luZyB0aGVpciBvdXRwdXQgbmFtZS4gIFRoZQorICAgIHJldHVybiB2YWx1ZSBpcyB1bmFmZmVjdGVkIGJ5ICd1cGRhdGUnIG9yICdkcnlfcnVuJzogaXQgaXMgc2ltcGx5CisgICAgdGhlIGxpc3Qgb2YgYWxsIGZpbGVzIHVuZGVyICdzcmMnLCB3aXRoIHRoZSBuYW1lcyBjaGFuZ2VkIHRvIGJlCisgICAgdW5kZXIgJ2RzdCcuCiAKLWRlZiBjb3B5X3RyZWUgKHNyYywgZHN0LAotICAgICAgICAgICAgICAgcHJlc2VydmVfbW9kZT0xLAotICAgICAgICAgICAgICAgcHJlc2VydmVfdGltZXM9MSwKLSAgICAgICAgICAgICAgIHByZXNlcnZlX3N5bWxpbmtzPTAsCi0gICAgICAgICAgICAgICB1cGRhdGU9MCwKLSAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgIGRyeV9ydW49MCk6Ci0KLSAgICAiIiJDb3B5IGFuIGVudGlyZSBkaXJlY3RvcnkgdHJlZSAnc3JjJyB0byBhIG5ldyBsb2NhdGlvbiAnZHN0Jy4gIEJvdGgKLSAgICAgICAnc3JjJyBhbmQgJ2RzdCcgbXVzdCBiZSBkaXJlY3RvcnkgbmFtZXMuICBJZiAnc3JjJyBpcyBub3QgYQotICAgICAgIGRpcmVjdG9yeSwgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLiAgSWYgJ2RzdCcgZG9lcyBub3QgZXhpc3QsIGl0IGlzCi0gICAgICAgY3JlYXRlZCB3aXRoICdta3BhdGgoKScuICBUaGUgZW5kIHJlc3VsdCBvZiB0aGUgY29weSBpcyB0aGF0IGV2ZXJ5Ci0gICAgICAgZmlsZSBpbiAnc3JjJyBpcyBjb3BpZWQgdG8gJ2RzdCcsIGFuZCBkaXJlY3RvcmllcyB1bmRlciAnc3JjJyBhcmUKLSAgICAgICByZWN1cnNpdmVseSBjb3BpZWQgdG8gJ2RzdCcuICBSZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCB3ZXJlCi0gICAgICAgY29waWVkIG9yIG1pZ2h0IGhhdmUgYmVlbiBjb3BpZWQsIHVzaW5nIHRoZWlyIG91dHB1dCBuYW1lLiAgVGhlCi0gICAgICAgcmV0dXJuIHZhbHVlIGlzIHVuYWZmZWN0ZWQgYnkgJ3VwZGF0ZScgb3IgJ2RyeV9ydW4nOiBpdCBpcyBzaW1wbHkKLSAgICAgICB0aGUgbGlzdCBvZiBhbGwgZmlsZXMgdW5kZXIgJ3NyYycsIHdpdGggdGhlIG5hbWVzIGNoYW5nZWQgdG8gYmUKLSAgICAgICB1bmRlciAnZHN0Jy4KLQotICAgICAgICdwcmVzZXJ2ZV9tb2RlJyBhbmQgJ3ByZXNlcnZlX3RpbWVzJyBhcmUgdGhlIHNhbWUgYXMgZm9yCi0gICAgICAgJ2NvcHlfZmlsZSc7IG5vdGUgdGhhdCB0aGV5IG9ubHkgYXBwbHkgdG8gcmVndWxhciBmaWxlcywgbm90IHRvCi0gICAgICAgZGlyZWN0b3JpZXMuICBJZiAncHJlc2VydmVfc3ltbGlua3MnIGlzIHRydWUsIHN5bWxpbmtzIHdpbGwgYmUKLSAgICAgICBjb3BpZWQgYXMgc3ltbGlua3MgKG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbSEpOyBvdGhlcndpc2UKLSAgICAgICAodGhlIGRlZmF1bHQpLCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHN5bWxpbmsgd2lsbCBiZSBjb3BpZWQuCi0gICAgICAgJ3VwZGF0ZScgYW5kICd2ZXJib3NlJyBhcmUgdGhlIHNhbWUgYXMgZm9yICdjb3B5X2ZpbGUnLiIiIgotCisgICAgJ3ByZXNlcnZlX21vZGUnIGFuZCAncHJlc2VydmVfdGltZXMnIGFyZSB0aGUgc2FtZSBhcyBmb3IKKyAgICAnY29weV9maWxlJzsgbm90ZSB0aGF0IHRoZXkgb25seSBhcHBseSB0byByZWd1bGFyIGZpbGVzLCBub3QgdG8KKyAgICBkaXJlY3Rvcmllcy4gIElmICdwcmVzZXJ2ZV9zeW1saW5rcycgaXMgdHJ1ZSwgc3ltbGlua3Mgd2lsbCBiZQorICAgIGNvcGllZCBhcyBzeW1saW5rcyAob24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtISk7IG90aGVyd2lzZQorICAgICh0aGUgZGVmYXVsdCksIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc3ltbGluayB3aWxsIGJlIGNvcGllZC4KKyAgICAndXBkYXRlJyBhbmQgJ3ZlcmJvc2UnIGFyZSB0aGUgc2FtZSBhcyBmb3IgJ2NvcHlfZmlsZScuCisgICAgIiIiCiAgICAgZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBjb3B5X2ZpbGUKIAogICAgIGlmIG5vdCBkcnlfcnVuIGFuZCBub3Qgb3MucGF0aC5pc2RpcihzcmMpOgpAQCAtMTUwLDcgKzEzNiw3IEBACiAgICAgICAgICAgICAgICAgICAiZXJyb3IgbGlzdGluZyBmaWxlcyBpbiAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpCiAKICAgICBpZiBub3QgZHJ5X3J1bjoKLSAgICAgICAgbWtwYXRoKGRzdCkKKyAgICAgICAgbWtwYXRoKGRzdCwgdmVyYm9zZT12ZXJib3NlKQogCiAgICAgb3V0cHV0cyA9IFtdCiAKQEAgLTE2MCw3ICsxNDYsOCBAQAogCiAgICAgICAgIGlmIHByZXNlcnZlX3N5bWxpbmtzIGFuZCBvcy5wYXRoLmlzbGluayhzcmNfbmFtZSk6CiAgICAgICAgICAgICBsaW5rX2Rlc3QgPSBvcy5yZWFkbGluayhzcmNfbmFtZSkKLSAgICAgICAgICAgIGxvZy5pbmZvKCJsaW5raW5nICVzIC0+ICVzIiwgZHN0X25hbWUsIGxpbmtfZGVzdCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPj0gMToKKyAgICAgICAgICAgICAgICBsb2cuaW5mbygibGlua2luZyAlcyAtPiAlcyIsIGRzdF9uYW1lLCBsaW5rX2Rlc3QpCiAgICAgICAgICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtfZGVzdCwgZHN0X25hbWUpCiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChkc3RfbmFtZSkKQEAgLTE2OSwxOCArMTU2LDE3IEBACiAgICAgICAgICAgICBvdXRwdXRzLmV4dGVuZCgKICAgICAgICAgICAgICAgICBjb3B5X3RyZWUoc3JjX25hbWUsIGRzdF9uYW1lLCBwcmVzZXJ2ZV9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV90aW1lcywgcHJlc2VydmVfc3ltbGlua3MsIHVwZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1kcnlfcnVuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBkcnlfcnVuPWRyeV9ydW4pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29weV9maWxlKHNyY19uYW1lLCBkc3RfbmFtZSwgcHJlc2VydmVfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV90aW1lcywgdXBkYXRlLCBkcnlfcnVuPWRyeV9ydW4pCisgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfdGltZXMsIHVwZGF0ZSwgdmVyYm9zZT12ZXJib3NlLAorICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49ZHJ5X3J1bikKICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGRzdF9uYW1lKQogCiAgICAgcmV0dXJuIG91dHB1dHMKIAotIyBjb3B5X3RyZWUgKCkKLQotIyBIZWxwZXIgZm9yIHJlbW92ZV90cmVlKCkKIGRlZiBfYnVpbGRfY21kdHVwbGUocGF0aCwgY21kdHVwbGVzKToKKyAgICAiIiJIZWxwZXIgZm9yIHJlbW92ZV90cmVlKCkuIiIiCiAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgcmVhbF9mID0gb3MucGF0aC5qb2luKHBhdGgsZikKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihyZWFsX2YpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsocmVhbF9mKToKQEAgLTE4OSwxNSArMTc1LDE3IEBACiAgICAgICAgICAgICBjbWR0dXBsZXMuYXBwZW5kKChvcy5yZW1vdmUsIHJlYWxfZikpCiAgICAgY21kdHVwbGVzLmFwcGVuZCgob3Mucm1kaXIsIHBhdGgpKQogCitkZWYgcmVtb3ZlX3RyZWUoZGlyZWN0b3J5LCB2ZXJib3NlPTEsIGRyeV9ydW49MCk6CisgICAgIiIiUmVjdXJzaXZlbHkgcmVtb3ZlIGFuIGVudGlyZSBkaXJlY3RvcnkgdHJlZS4KIAotZGVmIHJlbW92ZV90cmVlIChkaXJlY3RvcnksIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKLSAgICAiIiJSZWN1cnNpdmVseSByZW1vdmUgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlLiAgQW55IGVycm9ycyBhcmUgaWdub3JlZAotICAgIChhcGFydCBmcm9tIGJlaW5nIHJlcG9ydGVkIHRvIHN0ZG91dCBpZiAndmVyYm9zZScgaXMgdHJ1ZSkuCisgICAgQW55IGVycm9ycyBhcmUgaWdub3JlZCAoYXBhcnQgZnJvbSBiZWluZyByZXBvcnRlZCB0byBzdGRvdXQgaWYgJ3ZlcmJvc2UnCisgICAgaXMgdHJ1ZSkuCiAgICAgIiIiCiAgICAgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ3Jva19lbnZpcm9ubWVudF9lcnJvcgogICAgIGdsb2JhbCBfcGF0aF9jcmVhdGVkCiAKLSAgICBsb2cuaW5mbygicmVtb3ZpbmcgJyVzJyAoYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgaXQpIiwgZGlyZWN0b3J5KQorICAgIGlmIHZlcmJvc2UgPj0gMToKKyAgICAgICAgbG9nLmluZm8oInJlbW92aW5nICclcycgKGFuZCBldmVyeXRoaW5nIHVuZGVyIGl0KSIsIGRpcmVjdG9yeSkKICAgICBpZiBkcnlfcnVuOgogICAgICAgICByZXR1cm4KICAgICBjbWR0dXBsZXMgPSBbXQpAQCAtMjEzLDE1ICsyMDEsMTIgQEAKICAgICAgICAgICAgIGxvZy53YXJuKGdyb2tfZW52aXJvbm1lbnRfZXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIGV4YywgImVycm9yIHJlbW92aW5nICVzOiAiICUgZGlyZWN0b3J5KSkKIAorZGVmIGVuc3VyZV9yZWxhdGl2ZShwYXRoKToKKyAgICAiIiJUYWtlIHRoZSBmdWxsIHBhdGggJ3BhdGgnLCBhbmQgbWFrZSBpdCBhIHJlbGF0aXZlIHBhdGguCiAKLWRlZiBlbnN1cmVfcmVsYXRpdmUgKHBhdGgpOgotICAgICIiIlRha2UgdGhlIGZ1bGwgcGF0aCAncGF0aCcsIGFuZCBtYWtlIGl0IGEgcmVsYXRpdmUgcGF0aCBzbwotICAgIGl0IGNhbiBiZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIG9zLnBhdGguam9pbigpLgorICAgIFRoaXMgaXMgdXNlZnVsIHRvIG1ha2UgJ3BhdGgnIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gb3MucGF0aC5qb2luKCkuCiAgICAgIiIiCiAgICAgZHJpdmUsIHBhdGggPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aCkKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgICAgIHJldHVybiBvcy5zZXAgKyBwYXRoCi0gICAgZWxzZToKLSAgICAgICAgaWYgcGF0aFswOjFdID09IG9zLnNlcDoKLSAgICAgICAgICAgIHBhdGggPSBkcml2ZSArIHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBwYXRoCisgICAgaWYgcGF0aFswOjFdID09IG9zLnNlcDoKKyAgICAgICAgcGF0aCA9IGRyaXZlICsgcGF0aFsxOl0KKyAgICByZXR1cm4gcGF0aApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CmluZGV4IDMwMjYwZjMuLjU5NzkwOWUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKQEAgLTQsMjAgKzQsMTggQEAKIGJlaW5nIGJ1aWx0L2luc3RhbGxlZC9kaXN0cmlidXRlZC4KICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotaW1wb3J0IHN5cywgb3MsIHN0cmluZywgcmUKLWZyb20gdHlwZXMgaW1wb3J0ICoKLWZyb20gY29weSBpbXBvcnQgY29weQoraW1wb3J0IHN5cywgb3MsIHJlCitmcm9tIGVtYWlsIGltcG9ydCBtZXNzYWdlX2Zyb21fZmlsZQogCiB0cnk6CiAgICAgaW1wb3J0IHdhcm5pbmdzCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgd2FybmluZ3MgPSBOb25lCiAKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIERpc3R1dGlsc0FyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzdHV0aWxzTW9kdWxlRXJyb3IsIERpc3R1dGlsc0NsYXNzRXJyb3IpCiBmcm9tIGRpc3R1dGlscy5mYW5jeV9nZXRvcHQgaW1wb3J0IEZhbmN5R2V0b3B0LCB0cmFuc2xhdGVfbG9uZ29wdAogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hlY2tfZW52aXJvbiwgc3RydG9ib29sLCByZmM4MjJfZXNjYXBlCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCkBAIC02MCw3ICs1OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICgnZHJ5LXJ1bicsICduJywgImRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ2gnLCAic2hvdyBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZSBweWRpc3R1dGlscy5jZmcgaW4geW91ciBob21lIGRpcmVjdG9yeScpLAorICAgIF0KIAogICAgICMgJ2NvbW1vbl91c2FnZScgaXMgYSBzaG9ydCAoMi0zIGxpbmUpIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb21tb24KICAgICAjIHVzYWdlIG9mIHRoZSBzZXR1cCBzY3JpcHQuCkBAIC0yMDYsNiArMjA2LDcgQEAKICAgICAgICAgc2VsZi5leHRyYV9wYXRoID0gTm9uZQogICAgICAgICBzZWxmLnNjcmlwdHMgPSBOb25lCiAgICAgICAgIHNlbGYuZGF0YV9maWxlcyA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9ICcnCiAKICAgICAgICAgIyBBbmQgbm93IGluaXRpYWxpemUgYm9va2tlZXBpbmcgc3R1ZmYgdGhhdCBjYW4ndCBiZSBzdXBwbGllZCBieQogICAgICAgICAjIHRoZSBjYWxsZXIgYXQgYWxsLiAgJ2NvbW1hbmRfb2JqJyBtYXBzIGNvbW1hbmQgbmFtZXMgdG8KQEAgLTI1Myw3ICsyNTQsNyBAQAogCiAgICAgICAgICAgICAjIE5vdyB3b3JrIG9uIHRoZSByZXN0IG9mIHRoZSBhdHRyaWJ1dGVzLiAgQW55IGF0dHJpYnV0ZSB0aGF0J3MKICAgICAgICAgICAgICMgbm90IGFscmVhZHkgZGVmaW5lZCBpcyBpbnZhbGlkIQotICAgICAgICAgICAgZm9yIChrZXksdmFsKSBpbiBhdHRycy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIChrZXksIHZhbCkgaW4gYXR0cnMuaXRlbXMoKToKICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYubWV0YWRhdGEsICJzZXRfIiArIGtleSk6CiAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZi5tZXRhZGF0YSwgInNldF8iICsga2V5KSh2YWwpCiAgICAgICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHNlbGYubWV0YWRhdGEsIGtleSk6CkBAIC0yNjcsMjUgKzI2OCwzNiBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cgKyAiXG4iKQogCisgICAgICAgICMgbm8tdXNlci1jZmcgaXMgaGFuZGxlZCBiZWZvcmUgb3RoZXIgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgIyBiZWNhdXNlIG90aGVyIGFyZ3Mgb3ZlcnJpZGUgdGhlIGNvbmZpZyBmaWxlcywgYW5kIHRoaXMKKyAgICAgICAgIyBvbmUgaXMgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gbG9hZCB0aGUgY29uZmlnIGZpbGVzLgorICAgICAgICAjIElmIGF0dHJzWydzY3JpcHRfYXJncyddIHdhc24ndCBwYXNzZWQsIGFzc3VtZSBmYWxzZS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgYWxzbyBtYWtlIHN1cmUgd2UganVzdCBsb29rIGF0IHRoZSBnbG9iYWwgb3B0aW9ucworICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5zY3JpcHRfYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5zY3JpcHRfYXJnczoKKyAgICAgICAgICAgICAgICBpZiBub3QgYXJnLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBhcmcgPT0gJy0tbm8tdXNlci1jZmcnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndhbnRfdXNlcl9jZmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCiAKLSAgICAjIF9faW5pdF9fICgpCi0KLQotICAgIGRlZiBnZXRfb3B0aW9uX2RpY3QgKHNlbGYsIGNvbW1hbmQpOgorICAgIGRlZiBnZXRfb3B0aW9uX2RpY3Qoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgICIiIkdldCB0aGUgb3B0aW9uIGRpY3Rpb25hcnkgZm9yIGEgZ2l2ZW4gY29tbWFuZC4gIElmIHRoYXQKICAgICAgICAgY29tbWFuZCdzIG9wdGlvbiBkaWN0aW9uYXJ5IGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LCB0aGVuIGNyZWF0ZSBpdAogICAgICAgICBhbmQgcmV0dXJuIHRoZSBuZXcgZGljdGlvbmFyeTsgb3RoZXJ3aXNlLCByZXR1cm4gdGhlIGV4aXN0aW5nCiAgICAgICAgIG9wdGlvbiBkaWN0aW9uYXJ5LgogICAgICAgICAiIiIKLQogICAgICAgICBkaWN0ID0gc2VsZi5jb21tYW5kX29wdGlvbnMuZ2V0KGNvbW1hbmQpCiAgICAgICAgIGlmIGRpY3QgaXMgTm9uZToKICAgICAgICAgICAgIGRpY3QgPSBzZWxmLmNvbW1hbmRfb3B0aW9uc1tjb21tYW5kXSA9IHt9CiAgICAgICAgIHJldHVybiBkaWN0CiAKLQotICAgIGRlZiBkdW1wX29wdGlvbl9kaWN0cyAoc2VsZiwgaGVhZGVyPU5vbmUsIGNvbW1hbmRzPU5vbmUsIGluZGVudD0iIik6CisgICAgZGVmIGR1bXBfb3B0aW9uX2RpY3RzKHNlbGYsIGhlYWRlcj1Ob25lLCBjb21tYW5kcz1Ob25lLCBpbmRlbnQ9IiIpOgogICAgICAgICBmcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAogCiAgICAgICAgIGlmIGNvbW1hbmRzIGlzIE5vbmU6ICAgICAgICAgICAgICMgZHVtcCBhbGwgY29tbWFuZCBvcHRpb24gZGljdHMKQEAgLTI5MywzMCArMzA1LDI4IEBACiAgICAgICAgICAgICBjb21tYW5kcy5zb3J0KCkKIAogICAgICAgICBpZiBoZWFkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwcmludCBpbmRlbnQgKyBoZWFkZXIKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoaW5kZW50ICsgaGVhZGVyKQogICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgIiAgIgogCiAgICAgICAgIGlmIG5vdCBjb21tYW5kczoKLSAgICAgICAgICAgIHByaW50IGluZGVudCArICJubyBjb21tYW5kcyBrbm93biB5ZXQiCisgICAgICAgICAgICBzZWxmLmFubm91bmNlKGluZGVudCArICJubyBjb21tYW5kcyBrbm93biB5ZXQiKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgZm9yIGNtZF9uYW1lIGluIGNvbW1hbmRzOgogICAgICAgICAgICAgb3B0X2RpY3QgPSBzZWxmLmNvbW1hbmRfb3B0aW9ucy5nZXQoY21kX25hbWUpCiAgICAgICAgICAgICBpZiBvcHRfZGljdCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHByaW50IGluZGVudCArICJubyBvcHRpb24gZGljdCBmb3IgJyVzJyBjb21tYW5kIiAlIGNtZF9uYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShpbmRlbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIG9wdGlvbiBkaWN0IGZvciAnJXMnIGNvbW1hbmQiICUgY21kX25hbWUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50IGluZGVudCArICJvcHRpb24gZGljdCBmb3IgJyVzJyBjb21tYW5kOiIgJSBjbWRfbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoaW5kZW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gZGljdCBmb3IgJyVzJyBjb21tYW5kOiIgJSBjbWRfbmFtZSkKICAgICAgICAgICAgICAgICBvdXQgPSBwZm9ybWF0KG9wdF9kaWN0KQotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHN0cmluZy5zcGxpdChvdXQsICJcbiIpOgotICAgICAgICAgICAgICAgICAgICBwcmludCBpbmRlbnQgKyAiICAiICsgbGluZQotCi0gICAgIyBkdW1wX29wdGlvbl9kaWN0cyAoKQotCi0KKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoaW5kZW50ICsgIiAgIiArIGxpbmUpCiAKICAgICAjIC0tIENvbmZpZyBmaWxlIGZpbmRpbmcvcGFyc2luZyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGZpbmRfY29uZmlnX2ZpbGVzIChzZWxmKToKKyAgICBkZWYgZmluZF9jb25maWdfZmlsZXMoc2VsZik6CiAgICAgICAgICIiIkZpbmQgYXMgbWFueSBjb25maWd1cmF0aW9uIGZpbGVzIGFzIHNob3VsZCBiZSBwcm9jZXNzZWQgZm9yIHRoaXMKICAgICAgICAgcGxhdGZvcm0sIGFuZCByZXR1cm4gYSBsaXN0IG9mIGZpbGVuYW1lcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQogICAgICAgICBzaG91bGQgYmUgcGFyc2VkLiAgVGhlIGZpbGVuYW1lcyByZXR1cm5lZCBhcmUgZ3VhcmFudGVlZCB0byBleGlzdApAQCAtMzI2LDcgKzMzNiwxMCBAQAogICAgICAgICBEaXN0dXRpbHMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSAoaWUuIHdoZXJlIHRoZSB0b3AtbGV2ZWwKICAgICAgICAgRGlzdHV0aWxzIF9faW5zdF9fLnB5IGZpbGUgbGl2ZXMpLCBhIGZpbGUgaW4gdGhlIHVzZXIncyBob21lCiAgICAgICAgIGRpcmVjdG9yeSBuYW1lZCAucHlkaXN0dXRpbHMuY2ZnIG9uIFVuaXggYW5kIHB5ZGlzdHV0aWxzLmNmZwotICAgICAgICBvbiBXaW5kb3dzL01hYywgYW5kIHNldHVwLmNmZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgIG9uIFdpbmRvd3MvTWFjOyBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGUgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIHRoZQorICAgICAgICAtLW5vLXVzZXItY2ZnIG9wdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAgIGZpbGVzID0gW10KICAgICAgICAgY2hlY2tfZW52aXJvbigpCkBAIC0zNDYsMzEgKzM1OSwzNCBAQAogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICJweWRpc3R1dGlscy5jZmciCiAKICAgICAgICAgIyBBbmQgbG9vayBmb3IgdGhlIHVzZXIgY29uZmlnIGZpbGUKLSAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHVzZXJfZmlsZSkKKyAgICAgICAgaWYgc2VsZi53YW50X3VzZXJfY2ZnOgorICAgICAgICAgICAgdXNlcl9maWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZXhwYW5kdXNlcignficpLCB1c2VyX2ZpbGVuYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodXNlcl9maWxlKToKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQogCiAgICAgICAgICMgQWxsIHBsYXRmb3JtcyBzdXBwb3J0IGxvY2FsIHNldHVwLmNmZwogICAgICAgICBsb2NhbF9maWxlID0gInNldHVwLmNmZyIKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobG9jYWxfZmlsZSk6CiAgICAgICAgICAgICBmaWxlcy5hcHBlbmQobG9jYWxfZmlsZSkKIAorICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoInVzaW5nIGNvbmZpZyBmaWxlczogJXMiICUgJywgJy5qb2luKGZpbGVzKSkKKwogICAgICAgICByZXR1cm4gZmlsZXMKIAotICAgICMgZmluZF9jb25maWdfZmlsZXMgKCkKLQotCi0gICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyAoc2VsZiwgZmlsZW5hbWVzPU5vbmUpOgorICAgIGRlZiBwYXJzZV9jb25maWdfZmlsZXMoc2VsZiwgZmlsZW5hbWVzPU5vbmUpOgogICAgICAgICBmcm9tIENvbmZpZ1BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyCiAKICAgICAgICAgaWYgZmlsZW5hbWVzIGlzIE5vbmU6CiAgICAgICAgICAgICBmaWxlbmFtZXMgPSBzZWxmLmZpbmRfY29uZmlnX2ZpbGVzKCkKIAotICAgICAgICBpZiBERUJVRzogcHJpbnQgIkRpc3RyaWJ1dGlvbi5wYXJzZV9jb25maWdfZmlsZXMoKToiCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgiRGlzdHJpYnV0aW9uLnBhcnNlX2NvbmZpZ19maWxlcygpOiIpCiAKICAgICAgICAgcGFyc2VyID0gQ29uZmlnUGFyc2VyKCkKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgIGlmIERFQlVHOiBwcmludCAiICByZWFkaW5nIiwgZmlsZW5hbWUKKyAgICAgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoIiAgcmVhZGluZyAlcyIgJSBmaWxlbmFtZSkKICAgICAgICAgICAgIHBhcnNlci5yZWFkKGZpbGVuYW1lKQogICAgICAgICAgICAgZm9yIHNlY3Rpb24gaW4gcGFyc2VyLnNlY3Rpb25zKCk6CiAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHBhcnNlci5vcHRpb25zKHNlY3Rpb24pCkBAIC0zNzksNyArMzk1LDcgQEAKICAgICAgICAgICAgICAgICBmb3Igb3B0IGluIG9wdGlvbnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIG9wdCAhPSAnX19uYW1lX18nOgogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFyc2VyLmdldChzZWN0aW9uLG9wdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdCA9IHN0cmluZy5yZXBsYWNlKG9wdCwgJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHQgPSBvcHQucmVwbGFjZSgnLScsICdfJykKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kaWN0W29wdF0gPSAoZmlsZW5hbWUsIHZhbCkKIAogICAgICAgICAgICAgIyBNYWtlIHRoZSBDb25maWdQYXJzZXIgZm9yZ2V0IGV2ZXJ5dGhpbmcgKHNvIHdlIHJldGFpbgpAQCAtNDAyLDEyICs0MTgsOSBAQAogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBtc2cKIAotICAgICMgcGFyc2VfY29uZmlnX2ZpbGVzICgpCi0KLQogICAgICMgLS0gQ29tbWFuZC1saW5lIHBhcnNpbmcgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgcGFyc2VfY29tbWFuZF9saW5lIChzZWxmKToKKyAgICBkZWYgcGFyc2VfY29tbWFuZF9saW5lKHNlbGYpOgogICAgICAgICAiIiJQYXJzZSB0aGUgc2V0dXAgc2NyaXB0J3MgY29tbWFuZCBsaW5lLCB0YWtlbiBmcm9tIHRoZQogICAgICAgICAnc2NyaXB0X2FyZ3MnIGluc3RhbmNlIGF0dHJpYnV0ZSAod2hpY2ggZGVmYXVsdHMgdG8gJ3N5cy5hcmd2WzE6XScKICAgICAgICAgLS0gc2VlICdzZXR1cCgpJyBpbiBjb3JlLnB5KS4gIFRoaXMgbGlzdCBpcyBmaXJzdCBwcm9jZXNzZWQgZm9yCkBAIC00MzEsMTEgKzQ0NCw2IEBACiAgICAgICAgICMgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gaW50ZXJhY3RpdmVseSBzcGVjaWZ5IHRoZSAiY29tbWFuZCBsaW5lIi4KICAgICAgICAgIwogICAgICAgICB0b3BsZXZlbF9vcHRpb25zID0gc2VsZi5fZ2V0X3RvcGxldmVsX29wdGlvbnMoKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgICAgICAgICBpbXBvcnQgRWFzeURpYWxvZ3MKLSAgICAgICAgICAgIGNtZGxpc3QgPSBzZWxmLmdldF9jb21tYW5kX2xpc3QoKQotICAgICAgICAgICAgc2VsZi5zY3JpcHRfYXJncyA9IEVhc3lEaWFsb2dzLkdldEFyZ3YoCi0gICAgICAgICAgICAgICAgdG9wbGV2ZWxfb3B0aW9ucyArIHNlbGYuZGlzcGxheV9vcHRpb25zLCBjbWRsaXN0KQogCiAgICAgICAgICMgV2UgaGF2ZSB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGEgYml0IGF0IGEgdGltZSAtLSBnbG9iYWwKICAgICAgICAgIyBvcHRpb25zLCB0aGVuIHRoZSBmaXJzdCBjb21tYW5kLCB0aGVuIGl0cyBvcHRpb25zLCBhbmQgc28gb24gLS0KQEAgLTQ1NSw3ICs0NjMsNiBAQAogICAgICAgICAjIGZvciBkaXNwbGF5IG9wdGlvbnMgd2UgcmV0dXJuIGltbWVkaWF0ZWx5CiAgICAgICAgIGlmIHNlbGYuaGFuZGxlX2Rpc3BsYXlfb3B0aW9ucyhvcHRpb25fb3JkZXIpOgogICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgd2hpbGUgYXJnczoKICAgICAgICAgICAgIGFyZ3MgPSBzZWxmLl9wYXJzZV9jb21tYW5kX29wdHMocGFyc2VyLCBhcmdzKQogICAgICAgICAgICAgaWYgYXJncyBpcyBOb25lOiAgICAgICAgICAgICMgdXNlciBhc2tlZCBmb3IgaGVscCAoYW5kIGdvdCBpdCkKQEAgLTQ4MCw5ICs0ODcsNyBAQAogICAgICAgICAjIEFsbCBpcyB3ZWxsOiByZXR1cm4gdHJ1ZQogICAgICAgICByZXR1cm4gMQogCi0gICAgIyBwYXJzZV9jb21tYW5kX2xpbmUoKQotCi0gICAgZGVmIF9nZXRfdG9wbGV2ZWxfb3B0aW9ucyAoc2VsZik6CisgICAgZGVmIF9nZXRfdG9wbGV2ZWxfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBub24tZGlzcGxheSBvcHRpb25zIHJlY29nbml6ZWQgYXQgdGhlIHRvcCBsZXZlbC4KIAogICAgICAgICBUaGlzIGluY2x1ZGVzIG9wdGlvbnMgdGhhdCBhcmUgcmVjb2duaXplZCAqb25seSogYXQgdGhlIHRvcApAQCAtNDkzLDcgKzQ5OCw3IEBACiAgICAgICAgICAgICAgImxpc3Qgb2YgcGFja2FnZXMgdGhhdCBwcm92aWRlIGRpc3R1dGlscyBjb21tYW5kcyIpLAogICAgICAgICAgICAgXQogCi0gICAgZGVmIF9wYXJzZV9jb21tYW5kX29wdHMgKHNlbGYsIHBhcnNlciwgYXJncyk6CisgICAgZGVmIF9wYXJzZV9jb21tYW5kX29wdHMoc2VsZiwgcGFyc2VyLCBhcmdzKToKICAgICAgICAgIiIiUGFyc2UgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBhIHNpbmdsZSBjb21tYW5kLgogICAgICAgICAncGFyc2VyJyBtdXN0IGJlIGEgRmFuY3lHZXRvcHQgaW5zdGFuY2U7ICdhcmdzJyBtdXN0IGJlIHRoZSBsaXN0CiAgICAgICAgIG9mIGFyZ3VtZW50cywgc3RhcnRpbmcgd2l0aCB0aGUgY3VycmVudCBjb21tYW5kICh3aG9zZSBvcHRpb25zCkBAIC01MjgsNyArNTMzLDcgQEAKICAgICAgICAgIyBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21tYW5kIG9iamVjdCBwcm92aWRlcyBhIGxpc3Qgb2YgaXRzCiAgICAgICAgICMga25vd24gb3B0aW9ucy4KICAgICAgICAgaWYgbm90IChoYXNhdHRyKGNtZF9jbGFzcywgJ3VzZXJfb3B0aW9ucycpIGFuZAotICAgICAgICAgICAgICAgIHR5cGUoY21kX2NsYXNzLnVzZXJfb3B0aW9ucykgaXMgTGlzdFR5cGUpOgorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoY21kX2NsYXNzLnVzZXJfb3B0aW9ucywgbGlzdCkpOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzQ2xhc3NFcnJvciwgXAogICAgICAgICAgICAgICAgICAgKCJjb21tYW5kIGNsYXNzICVzIG11c3QgcHJvdmlkZSAiICsKICAgICAgICAgICAgICAgICAgICAiJ3VzZXJfb3B0aW9ucycgYXR0cmlidXRlIChhIGxpc3Qgb2YgdHVwbGVzKSIpICUgXApAQCAtNTM4LDEzICs1NDMsMTMgQEAKICAgICAgICAgIyBtZXJnZSBpdCBpbiB3aXRoIHRoZSBnbG9iYWwgbmVnYXRpdmUgYWxpYXNlcy4KICAgICAgICAgbmVnYXRpdmVfb3B0ID0gc2VsZi5uZWdhdGl2ZV9vcHQKICAgICAgICAgaWYgaGFzYXR0cihjbWRfY2xhc3MsICduZWdhdGl2ZV9vcHQnKToKLSAgICAgICAgICAgIG5lZ2F0aXZlX29wdCA9IGNvcHkobmVnYXRpdmVfb3B0KQorICAgICAgICAgICAgbmVnYXRpdmVfb3B0ID0gbmVnYXRpdmVfb3B0LmNvcHkoKQogICAgICAgICAgICAgbmVnYXRpdmVfb3B0LnVwZGF0ZShjbWRfY2xhc3MubmVnYXRpdmVfb3B0KQogCiAgICAgICAgICMgQ2hlY2sgZm9yIGhlbHBfb3B0aW9ucyBpbiBjb21tYW5kIGNsYXNzLiAgVGhleSBoYXZlIGEgZGlmZmVyZW50CiAgICAgICAgICMgZm9ybWF0ICh0dXBsZSBvZiBmb3VyKSBzbyB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlbSBoZXJlLgogICAgICAgICBpZiAoaGFzYXR0cihjbWRfY2xhc3MsICdoZWxwX29wdGlvbnMnKSBhbmQKLSAgICAgICAgICAgIHR5cGUoY21kX2NsYXNzLmhlbHBfb3B0aW9ucykgaXMgTGlzdFR5cGUpOgorICAgICAgICAgICAgaXNpbnN0YW5jZShjbWRfY2xhc3MuaGVscF9vcHRpb25zLCBsaXN0KSk6CiAgICAgICAgICAgICBoZWxwX29wdGlvbnMgPSBmaXhfaGVscF9vcHRpb25zKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBoZWxwX29wdGlvbnMgPSBbXQpAQCAtNTYyLDE1ICs1NjcsMTIgQEAKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGlmIChoYXNhdHRyKGNtZF9jbGFzcywgJ2hlbHBfb3B0aW9ucycpIGFuZAotICAgICAgICAgICAgdHlwZShjbWRfY2xhc3MuaGVscF9vcHRpb25zKSBpcyBMaXN0VHlwZSk6CisgICAgICAgICAgICBpc2luc3RhbmNlKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKICAgICAgICAgICAgIGhlbHBfb3B0aW9uX2ZvdW5kPTAKICAgICAgICAgICAgIGZvciAoaGVscF9vcHRpb24sIHNob3J0LCBkZXNjLCBmdW5jKSBpbiBjbWRfY2xhc3MuaGVscF9vcHRpb25zOgogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3B0cywgcGFyc2VyLmdldF9hdHRyX25hbWUoaGVscF9vcHRpb24pKToKICAgICAgICAgICAgICAgICAgICAgaGVscF9vcHRpb25fZm91bmQ9MQotICAgICAgICAgICAgICAgICAgICAjcHJpbnQgInNob3dpbmcgaGVscCBmb3Igb3B0aW9uICVzIG9mIGNvbW1hbmQgJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAjICAgICAgKGhlbHBfb3B0aW9uWzBdLGNtZF9jbGFzcykKLQotICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYWJsZShmdW5jKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmdW5jLCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMoKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzQ2xhc3NFcnJvcigKQEAgLTU4OSwzMSArNTkxLDIxIEBACiAKICAgICAgICAgcmV0dXJuIGFyZ3MKIAotICAgICMgX3BhcnNlX2NvbW1hbmRfb3B0cyAoKQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMgKHNlbGYpOgorICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICAiIiJTZXQgZmluYWwgdmFsdWVzIGZvciBhbGwgdGhlIG9wdGlvbnMgb24gdGhlIERpc3RyaWJ1dGlvbgogICAgICAgICBpbnN0YW5jZSwgYW5hbG9nb3VzIHRvIHRoZSAuZmluYWxpemVfb3B0aW9ucygpIG1ldGhvZCBvZiBDb21tYW5kCiAgICAgICAgIG9iamVjdHMuCiAgICAgICAgICIiIgorICAgICAgICBmb3IgYXR0ciBpbiAoJ2tleXdvcmRzJywgJ3BsYXRmb3JtcycpOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHNlbGYubWV0YWRhdGEsIGF0dHIpCisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gW2VsbS5zdHJpcCgpIGZvciBlbG0gaW4gdmFsdWUuc3BsaXQoJywnKV0KKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYubWV0YWRhdGEsIGF0dHIsIHZhbHVlKQogCi0gICAgICAgIGtleXdvcmRzID0gc2VsZi5tZXRhZGF0YS5rZXl3b3JkcwotICAgICAgICBpZiBrZXl3b3JkcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIHR5cGUoa2V5d29yZHMpIGlzIFN0cmluZ1R5cGU6Ci0gICAgICAgICAgICAgICAga2V5d29yZGxpc3QgPSBzdHJpbmcuc3BsaXQoa2V5d29yZHMsICcsJykKLSAgICAgICAgICAgICAgICBzZWxmLm1ldGFkYXRhLmtleXdvcmRzID0gbWFwKHN0cmluZy5zdHJpcCwga2V5d29yZGxpc3QpCi0KLSAgICAgICAgcGxhdGZvcm1zID0gc2VsZi5tZXRhZGF0YS5wbGF0Zm9ybXMKLSAgICAgICAgaWYgcGxhdGZvcm1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdHlwZShwbGF0Zm9ybXMpIGlzIFN0cmluZ1R5cGU6Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm1saXN0ID0gc3RyaW5nLnNwbGl0KHBsYXRmb3JtcywgJywnKQotICAgICAgICAgICAgICAgIHNlbGYubWV0YWRhdGEucGxhdGZvcm1zID0gbWFwKHN0cmluZy5zdHJpcCwgcGxhdGZvcm1saXN0KQotCi0gICAgZGVmIF9zaG93X2hlbHAgKHNlbGYsCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX29wdGlvbnM9MSwKLSAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9vcHRpb25zPTEsCi0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzPVtdKToKKyAgICBkZWYgX3Nob3dfaGVscChzZWxmLCBwYXJzZXIsIGdsb2JhbF9vcHRpb25zPTEsIGRpc3BsYXlfb3B0aW9ucz0xLAorICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzPVtdKToKICAgICAgICAgIiIiU2hvdyBoZWxwIGZvciB0aGUgc2V0dXAgc2NyaXB0IGNvbW1hbmQtbGluZSBpbiB0aGUgZm9ybSBvZgogICAgICAgICBzZXZlcmFsIGxpc3RzIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgJ3BhcnNlcicgc2hvdWxkIGJlIGEKICAgICAgICAgRmFuY3lHZXRvcHQgaW5zdGFuY2U7IGRvIG5vdCBleHBlY3QgaXQgdG8gYmUgcmV0dXJuZWQgaW4gdGhlCkBAIC02MzcsMzYgKzYyOSwzMiBAQAogICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLmdsb2JhbF9vcHRpb25zCiAgICAgICAgICAgICBwYXJzZXIuc2V0X29wdGlvbl90YWJsZShvcHRpb25zKQogICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoc2VsZi5jb21tb25fdXNhZ2UgKyAiXG5HbG9iYWwgb3B0aW9uczoiKQotICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50KCcnKQogCiAgICAgICAgIGlmIGRpc3BsYXlfb3B0aW9uczoKICAgICAgICAgICAgIHBhcnNlci5zZXRfb3B0aW9uX3RhYmxlKHNlbGYuZGlzcGxheV9vcHRpb25zKQogICAgICAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoCiAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIGRpc3BsYXkgb3B0aW9ucyAoanVzdCBkaXNwbGF5ICIgKwogICAgICAgICAgICAgICAgICJpbmZvcm1hdGlvbiwgaWdub3JlIGFueSBjb21tYW5kcykiKQotICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50KCcnKQogCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHM6Ci0gICAgICAgICAgICBpZiB0eXBlKGNvbW1hbmQpIGlzIENsYXNzVHlwZSBhbmQgaXNzdWJjbGFzcyhjb21tYW5kLCBDb21tYW5kKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29tbWFuZCwgdHlwZSkgYW5kIGlzc3ViY2xhc3MoY29tbWFuZCwgQ29tbWFuZCk6CiAgICAgICAgICAgICAgICAga2xhc3MgPSBjb21tYW5kCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGtsYXNzID0gc2VsZi5nZXRfY29tbWFuZF9jbGFzcyhjb21tYW5kKQogICAgICAgICAgICAgaWYgKGhhc2F0dHIoa2xhc3MsICdoZWxwX29wdGlvbnMnKSBhbmQKLSAgICAgICAgICAgICAgICB0eXBlKGtsYXNzLmhlbHBfb3B0aW9ucykgaXMgTGlzdFR5cGUpOgorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2Uoa2xhc3MuaGVscF9vcHRpb25zLCBsaXN0KSk6CiAgICAgICAgICAgICAgICAgcGFyc2VyLnNldF9vcHRpb25fdGFibGUoa2xhc3MudXNlcl9vcHRpb25zICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhfaGVscF9vcHRpb25zKGtsYXNzLmhlbHBfb3B0aW9ucykpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHBhcnNlci5zZXRfb3B0aW9uX3RhYmxlKGtsYXNzLnVzZXJfb3B0aW9ucykKICAgICAgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCJPcHRpb25zIGZvciAnJXMnIGNvbW1hbmQ6IiAlIGtsYXNzLl9fbmFtZV9fKQotICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50KCcnKQogCi0gICAgICAgIHByaW50IGdlbl91c2FnZShzZWxmLnNjcmlwdF9uYW1lKQotICAgICAgICByZXR1cm4KKyAgICAgICAgcHJpbnQoZ2VuX3VzYWdlKHNlbGYuc2NyaXB0X25hbWUpKQogCi0gICAgIyBfc2hvd19oZWxwICgpCi0KLQotICAgIGRlZiBoYW5kbGVfZGlzcGxheV9vcHRpb25zIChzZWxmLCBvcHRpb25fb3JkZXIpOgorICAgIGRlZiBoYW5kbGVfZGlzcGxheV9vcHRpb25zKHNlbGYsIG9wdGlvbl9vcmRlcik6CiAgICAgICAgICIiIklmIHRoZXJlIHdlcmUgYW55IG5vbi1nbG9iYWwgImRpc3BsYXktb25seSIgb3B0aW9ucwogICAgICAgICAoLS1oZWxwLWNvbW1hbmRzIG9yIHRoZSBtZXRhZGF0YSBkaXNwbGF5IG9wdGlvbnMpIG9uIHRoZSBjb21tYW5kCiAgICAgICAgIGxpbmUsIGRpc3BsYXkgdGhlIHJlcXVlc3RlZCBpbmZvIGFuZCByZXR1cm4gdHJ1ZTsgZWxzZSByZXR1cm4KQEAgLTY3OSw4ICs2NjcsOCBAQAogICAgICAgICAjIHdlIGlnbm9yZSAiZm9vIGJhciIpLgogICAgICAgICBpZiBzZWxmLmhlbHBfY29tbWFuZHM6CiAgICAgICAgICAgICBzZWxmLnByaW50X2NvbW1hbmRzKCkKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBwcmludCBnZW5fdXNhZ2Uoc2VsZi5zY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHByaW50KCcnKQorICAgICAgICAgICAgcHJpbnQoZ2VuX3VzYWdlKHNlbGYuc2NyaXB0X25hbWUpKQogICAgICAgICAgICAgcmV0dXJuIDEKIAogICAgICAgICAjIElmIHVzZXIgc3VwcGxpZWQgYW55IG9mIHRoZSAiZGlzcGxheSBtZXRhZGF0YSIgb3B0aW9ucywgdGhlbgpAQCAtNjk2LDI0ICs2ODQsMjEgQEAKICAgICAgICAgICAgICAgICBvcHQgPSB0cmFuc2xhdGVfbG9uZ29wdChvcHQpCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHNlbGYubWV0YWRhdGEsICJnZXRfIitvcHQpKCkKICAgICAgICAgICAgICAgICBpZiBvcHQgaW4gWydrZXl3b3JkcycsICdwbGF0Zm9ybXMnXToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgc3RyaW5nLmpvaW4odmFsdWUsICcsJykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJywnLmpvaW4odmFsdWUpKQogICAgICAgICAgICAgICAgIGVsaWYgb3B0IGluICgnY2xhc3NpZmllcnMnLCAncHJvdmlkZXMnLCAncmVxdWlyZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2Jzb2xldGVzJyk6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50IHN0cmluZy5qb2luKHZhbHVlLCAnXG4nKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnXG4nLmpvaW4odmFsdWUpKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHByaW50KHZhbHVlKQogICAgICAgICAgICAgICAgIGFueV9kaXNwbGF5X29wdGlvbnMgPSAxCiAKICAgICAgICAgcmV0dXJuIGFueV9kaXNwbGF5X29wdGlvbnMKIAotICAgICMgaGFuZGxlX2Rpc3BsYXlfb3B0aW9ucygpCi0KLSAgICBkZWYgcHJpbnRfY29tbWFuZF9saXN0IChzZWxmLCBjb21tYW5kcywgaGVhZGVyLCBtYXhfbGVuZ3RoKToKKyAgICBkZWYgcHJpbnRfY29tbWFuZF9saXN0KHNlbGYsIGNvbW1hbmRzLCBoZWFkZXIsIG1heF9sZW5ndGgpOgogICAgICAgICAiIiJQcmludCBhIHN1YnNldCBvZiB0aGUgbGlzdCBvZiBhbGwgY29tbWFuZHMgLS0gdXNlZCBieQogICAgICAgICAncHJpbnRfY29tbWFuZHMoKScuCiAgICAgICAgICIiIgotCi0gICAgICAgIHByaW50IGhlYWRlciArICI6IgorICAgICAgICBwcmludChoZWFkZXIgKyAiOiIpCiAKICAgICAgICAgZm9yIGNtZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgIGtsYXNzID0gc2VsZi5jbWRjbGFzcy5nZXQoY21kKQpAQCAtNzI0LDEyICs3MDksOSBAQAogICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIihubyBkZXNjcmlwdGlvbiBhdmFpbGFibGUpIgogCi0gICAgICAgICAgICBwcmludCAiICAlLSpzICAlcyIgJSAobWF4X2xlbmd0aCwgY21kLCBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHByaW50KCIgICUtKnMgICVzIiAlIChtYXhfbGVuZ3RoLCBjbWQsIGRlc2NyaXB0aW9uKSkKIAotICAgICMgcHJpbnRfY29tbWFuZF9saXN0ICgpCi0KLQotICAgIGRlZiBwcmludF9jb21tYW5kcyAoc2VsZik6CisgICAgZGVmIHByaW50X2NvbW1hbmRzKHNlbGYpOgogICAgICAgICAiIiJQcmludCBvdXQgYSBoZWxwIG1lc3NhZ2UgbGlzdGluZyBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIHdpdGggYQogICAgICAgICBkZXNjcmlwdGlvbiBvZiBlYWNoLiAgVGhlIGxpc3QgaXMgZGl2aWRlZCBpbnRvICJzdGFuZGFyZCBjb21tYW5kcyIKICAgICAgICAgKGxpc3RlZCBpbiBkaXN0dXRpbHMuY29tbWFuZC5fX2FsbF9fKSBhbmQgImV4dHJhIGNvbW1hbmRzIgpAQCAtNzM3LDcgKzcxOSw2IEBACiAgICAgICAgIGRlc2NyaXB0aW9ucyBjb21lIGZyb20gdGhlIGNvbW1hbmQgY2xhc3MgYXR0cmlidXRlCiAgICAgICAgICdkZXNjcmlwdGlvbicuCiAgICAgICAgICIiIgotCiAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZAogICAgICAgICBzdGRfY29tbWFuZHMgPSBkaXN0dXRpbHMuY29tbWFuZC5fX2FsbF9fCiAgICAgICAgIGlzX3N0ZCA9IHt9CkBAIC03NjMsOSArNzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHRyYSBjb21tYW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoKQogCi0gICAgIyBwcmludF9jb21tYW5kcyAoKQotCi0gICAgZGVmIGdldF9jb21tYW5kX2xpc3QgKHNlbGYpOgorICAgIGRlZiBnZXRfY29tbWFuZF9saXN0KHNlbGYpOgogICAgICAgICAiIiJHZXQgYSBsaXN0IG9mIChjb21tYW5kLCBkZXNjcmlwdGlvbikgdHVwbGVzLgogICAgICAgICBUaGUgbGlzdCBpcyBkaXZpZGVkIGludG8gInN0YW5kYXJkIGNvbW1hbmRzIiAobGlzdGVkIGluCiAgICAgICAgIGRpc3R1dGlscy5jb21tYW5kLl9fYWxsX18pIGFuZCAiZXh0cmEgY29tbWFuZHMiIChtZW50aW9uZWQgaW4KQEAgLTgwMCwyMCArNzc5LDE5IEBACiAKICAgICAjIC0tIENvbW1hbmQgY2xhc3Mvb2JqZWN0IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGdldF9jb21tYW5kX3BhY2thZ2VzIChzZWxmKToKKyAgICBkZWYgZ2V0X2NvbW1hbmRfcGFja2FnZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgcGFja2FnZXMgZnJvbSB3aGljaCBjb21tYW5kcyBhcmUgbG9hZGVkLiIiIgogICAgICAgICBwa2dzID0gc2VsZi5jb21tYW5kX3BhY2thZ2VzCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBrZ3MsIHR5cGUoW10pKToKLSAgICAgICAgICAgIHBrZ3MgPSBzdHJpbmcuc3BsaXQocGtncyBvciAiIiwgIiwiKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBrZ3MpKToKLSAgICAgICAgICAgICAgICBwa2dzW2ldID0gc3RyaW5nLnN0cmlwKHBrZ3NbaV0pCi0gICAgICAgICAgICBwa2dzID0gZmlsdGVyKE5vbmUsIHBrZ3MpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBrZ3MsIGxpc3QpOgorICAgICAgICAgICAgaWYgcGtncyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHBrZ3MgPSAnJworICAgICAgICAgICAgcGtncyA9IFtwa2cuc3RyaXAoKSBmb3IgcGtnIGluIHBrZ3Muc3BsaXQoJywnKSBpZiBwa2cgIT0gJyddCiAgICAgICAgICAgICBpZiAiZGlzdHV0aWxzLmNvbW1hbmQiIG5vdCBpbiBwa2dzOgogICAgICAgICAgICAgICAgIHBrZ3MuaW5zZXJ0KDAsICJkaXN0dXRpbHMuY29tbWFuZCIpCiAgICAgICAgICAgICBzZWxmLmNvbW1hbmRfcGFja2FnZXMgPSBwa2dzCiAgICAgICAgIHJldHVybiBwa2dzCiAKLSAgICBkZWYgZ2V0X2NvbW1hbmRfY2xhc3MgKHNlbGYsIGNvbW1hbmQpOgorICAgIGRlZiBnZXRfY29tbWFuZF9jbGFzcyhzZWxmLCBjb21tYW5kKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIERpc3R1dGlscyBjb21tYW5kIG5hbWVkIGJ5CiAgICAgICAgICdjb21tYW5kJy4gIEZpcnN0IHdlIGNoZWNrIHRoZSAnY21kY2xhc3MnIGRpY3Rpb25hcnk7IGlmIHRoZQogICAgICAgICBjb21tYW5kIGlzIG1lbnRpb25lZCB0aGVyZSwgd2UgZmV0Y2ggdGhlIGNsYXNzIG9iamVjdCBmcm9tIHRoZQpAQCAtODUyLDkgKzgzMCw3IEBACiAgICAgICAgIHJhaXNlIERpc3R1dGlsc01vZHVsZUVycm9yKCJpbnZhbGlkIGNvbW1hbmQgJyVzJyIgJSBjb21tYW5kKQogCiAKLSAgICAjIGdldF9jb21tYW5kX2NsYXNzICgpCi0KLSAgICBkZWYgZ2V0X2NvbW1hbmRfb2JqIChzZWxmLCBjb21tYW5kLCBjcmVhdGU9MSk6CisgICAgZGVmIGdldF9jb21tYW5kX29iaihzZWxmLCBjb21tYW5kLCBjcmVhdGU9MSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY29tbWFuZCBvYmplY3QgZm9yICdjb21tYW5kJy4gIE5vcm1hbGx5IHRoaXMgb2JqZWN0CiAgICAgICAgIGlzIGNhY2hlZCBvbiBhIHByZXZpb3VzIGNhbGwgdG8gJ2dldF9jb21tYW5kX29iaigpJzsgaWYgbm8gY29tbWFuZAogICAgICAgICBvYmplY3QgZm9yICdjb21tYW5kJyBpcyBpbiB0aGUgY2FjaGUsIHRoZW4gd2UgZWl0aGVyIGNyZWF0ZSBhbmQKQEAgLTg2Myw4ICs4MzksOCBAQAogICAgICAgICBjbWRfb2JqID0gc2VsZi5jb21tYW5kX29iai5nZXQoY29tbWFuZCkKICAgICAgICAgaWYgbm90IGNtZF9vYmogYW5kIGNyZWF0ZToKICAgICAgICAgICAgIGlmIERFQlVHOgotICAgICAgICAgICAgICAgIHByaW50ICJEaXN0cmlidXRpb24uZ2V0X2NvbW1hbmRfb2JqKCk6ICIgXAotICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGluZyAnJXMnIGNvbW1hbmQgb2JqZWN0IiAlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCJEaXN0cmlidXRpb24uZ2V0X2NvbW1hbmRfb2JqKCk6ICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0aW5nICclcycgY29tbWFuZCBvYmplY3QiICUgY29tbWFuZCkKIAogICAgICAgICAgICAga2xhc3MgPSBzZWxmLmdldF9jb21tYW5kX2NsYXNzKGNvbW1hbmQpCiAgICAgICAgICAgICBjbWRfb2JqID0gc2VsZi5jb21tYW5kX29ialtjb21tYW5kXSA9IGtsYXNzKHNlbGYpCkBAIC04ODEsNyArODU3LDcgQEAKIAogICAgICAgICByZXR1cm4gY21kX29iagogCi0gICAgZGVmIF9zZXRfY29tbWFuZF9vcHRpb25zIChzZWxmLCBjb21tYW5kX29iaiwgb3B0aW9uX2RpY3Q9Tm9uZSk6CisgICAgZGVmIF9zZXRfY29tbWFuZF9vcHRpb25zKHNlbGYsIGNvbW1hbmRfb2JqLCBvcHRpb25fZGljdD1Ob25lKToKICAgICAgICAgIiIiU2V0IHRoZSBvcHRpb25zIGZvciAnY29tbWFuZF9vYmonIGZyb20gJ29wdGlvbl9kaWN0Jy4gIEJhc2ljYWxseQogICAgICAgICB0aGlzIG1lYW5zIGNvcHlpbmcgZWxlbWVudHMgb2YgYSBkaWN0aW9uYXJ5ICgnb3B0aW9uX2RpY3QnKSB0bwogICAgICAgICBhdHRyaWJ1dGVzIG9mIGFuIGluc3RhbmNlICgnY29tbWFuZCcpLgpAQCAtODk0LDkgKzg3MCwxMiBAQAogICAgICAgICBpZiBvcHRpb25fZGljdCBpcyBOb25lOgogICAgICAgICAgICAgb3B0aW9uX2RpY3QgPSBzZWxmLmdldF9vcHRpb25fZGljdChjb21tYW5kX25hbWUpCiAKLSAgICAgICAgaWYgREVCVUc6IHByaW50ICIgIHNldHRpbmcgb3B0aW9ucyBmb3IgJyVzJyBjb21tYW5kOiIgJSBjb21tYW5kX25hbWUKKyAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKCIgIHNldHRpbmcgb3B0aW9ucyBmb3IgJyVzJyBjb21tYW5kOiIgJSBjb21tYW5kX25hbWUpCiAgICAgICAgIGZvciAob3B0aW9uLCAoc291cmNlLCB2YWx1ZSkpIGluIG9wdGlvbl9kaWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBERUJVRzogcHJpbnQgIiAgICAlcyA9ICVzIChmcm9tICVzKSIgJSAob3B0aW9uLCB2YWx1ZSwgc291cmNlKQorICAgICAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgiICAgICVzID0gJXMgKGZyb20gJXMpIiAlIChvcHRpb24sIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBib29sX29wdHMgPSBtYXAodHJhbnNsYXRlX2xvbmdvcHQsIGNvbW1hbmRfb2JqLmJvb2xlYW5fb3B0aW9ucykKICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTkwNyw3ICs4ODYsNyBAQAogICAgICAgICAgICAgICAgIG5lZ19vcHQgPSB7fQogCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaXNfc3RyaW5nID0gdHlwZSh2YWx1ZSkgaXMgU3RyaW5nVHlwZQorICAgICAgICAgICAgICAgIGlzX3N0cmluZyA9IGlzaW5zdGFuY2UodmFsdWUsIHN0cikKICAgICAgICAgICAgICAgICBpZiBvcHRpb24gaW4gbmVnX29wdCBhbmQgaXNfc3RyaW5nOgogICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKGNvbW1hbmRfb2JqLCBuZWdfb3B0W29wdGlvbl0sIG5vdCBzdHJ0b2Jvb2wodmFsdWUpKQogICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uIGluIGJvb2xfb3B0cyBhbmQgaXNfc3RyaW5nOgpAQCAtOTIxLDcgKzkwMCw3IEBACiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc09wdGlvbkVycm9yLCBtc2cKIAotICAgIGRlZiByZWluaXRpYWxpemVfY29tbWFuZCAoc2VsZiwgY29tbWFuZCwgcmVpbml0X3N1YmNvbW1hbmRzPTApOgorICAgIGRlZiByZWluaXRpYWxpemVfY29tbWFuZChzZWxmLCBjb21tYW5kLCByZWluaXRfc3ViY29tbWFuZHM9MCk6CiAgICAgICAgICIiIlJlaW5pdGlhbGl6ZXMgYSBjb21tYW5kIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gd2hlbiBmaXJzdAogICAgICAgICByZXR1cm5lZCBieSAnZ2V0X2NvbW1hbmRfb2JqKCknOiBpZS4sIGluaXRpYWxpemVkIGJ1dCBub3QgeWV0CiAgICAgICAgIGZpbmFsaXplZC4gIFRoaXMgcHJvdmlkZXMgdGhlIG9wcG9ydHVuaXR5IHRvIHNuZWFrIG9wdGlvbgpAQCAtOTYwLDEzICs5MzksMTIgQEAKIAogICAgICAgICByZXR1cm4gY29tbWFuZAogCi0KICAgICAjIC0tIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIHRoZSBEaXN0cmlidXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgZGVmIGFubm91bmNlIChzZWxmLCBtc2csIGxldmVsPTEpOgotICAgICAgICBsb2cuZGVidWcobXNnKQorICAgIGRlZiBhbm5vdW5jZShzZWxmLCBtc2csIGxldmVsPWxvZy5JTkZPKToKKyAgICAgICAgbG9nLmxvZyhsZXZlbCwgbXNnKQogCi0gICAgZGVmIHJ1bl9jb21tYW5kcyAoc2VsZik6CisgICAgZGVmIHJ1bl9jb21tYW5kcyhzZWxmKToKICAgICAgICAgIiIiUnVuIGVhY2ggY29tbWFuZCB0aGF0IHdhcyBzZWVuIG9uIHRoZSBzZXR1cCBzY3JpcHQgY29tbWFuZCBsaW5lLgogICAgICAgICBVc2VzIHRoZSBsaXN0IG9mIGNvbW1hbmRzIGZvdW5kIGFuZCBjYWNoZSBvZiBjb21tYW5kIG9iamVjdHMKICAgICAgICAgY3JlYXRlZCBieSAnZ2V0X2NvbW1hbmRfb2JqKCknLgpAQCAtOTc0LDEwICs5NTIsOSBAQAogICAgICAgICBmb3IgY21kIGluIHNlbGYuY29tbWFuZHM6CiAgICAgICAgICAgICBzZWxmLnJ1bl9jb21tYW5kKGNtZCkKIAotCiAgICAgIyAtLSBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBpdHMgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBydW5fY29tbWFuZCAoc2VsZiwgY29tbWFuZCk6CisgICAgZGVmIHJ1bl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICAiIiJEbyB3aGF0ZXZlciBpdCB0YWtlcyB0byBydW4gYSBjb21tYW5kIChpbmNsdWRpbmcgbm90aGluZyBhdCBhbGwsCiAgICAgICAgIGlmIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IGJlZW4gcnVuKS4gIFNwZWNpZmljYWxseTogaWYgd2UgaGF2ZQogICAgICAgICBhbHJlYWR5IGNyZWF0ZWQgYW5kIHJ1biB0aGUgY29tbWFuZCBuYW1lZCBieSAnY29tbWFuZCcsIHJldHVybgpAQCAtOTk4LDI4ICs5NzUsMjggQEAKIAogICAgICMgLS0gRGlzdHJpYnV0aW9uIHF1ZXJ5IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgaGFzX3B1cmVfbW9kdWxlcyAoc2VsZik6CisgICAgZGVmIGhhc19wdXJlX21vZHVsZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5wYWNrYWdlcyBvciBzZWxmLnB5X21vZHVsZXMgb3IgW10pID4gMAogCi0gICAgZGVmIGhhc19leHRfbW9kdWxlcyAoc2VsZik6CisgICAgZGVmIGhhc19leHRfbW9kdWxlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZXh0X21vZHVsZXMgYW5kIGxlbihzZWxmLmV4dF9tb2R1bGVzKSA+IDAKIAotICAgIGRlZiBoYXNfY19saWJyYXJpZXMgKHNlbGYpOgorICAgIGRlZiBoYXNfY19saWJyYXJpZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxpYnJhcmllcyBhbmQgbGVuKHNlbGYubGlicmFyaWVzKSA+IDAKIAotICAgIGRlZiBoYXNfbW9kdWxlcyAoc2VsZik6CisgICAgZGVmIGhhc19tb2R1bGVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oYXNfcHVyZV9tb2R1bGVzKCkgb3Igc2VsZi5oYXNfZXh0X21vZHVsZXMoKQogCi0gICAgZGVmIGhhc19oZWFkZXJzIChzZWxmKToKKyAgICBkZWYgaGFzX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmhlYWRlcnMgYW5kIGxlbihzZWxmLmhlYWRlcnMpID4gMAogCi0gICAgZGVmIGhhc19zY3JpcHRzIChzZWxmKToKKyAgICBkZWYgaGFzX3NjcmlwdHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnNjcmlwdHMgYW5kIGxlbihzZWxmLnNjcmlwdHMpID4gMAogCi0gICAgZGVmIGhhc19kYXRhX2ZpbGVzIChzZWxmKToKKyAgICBkZWYgaGFzX2RhdGFfZmlsZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGFfZmlsZXMgYW5kIGxlbihzZWxmLmRhdGFfZmlsZXMpID4gMAogCi0gICAgZGVmIGlzX3B1cmUgKHNlbGYpOgorICAgIGRlZiBpc19wdXJlKHNlbGYpOgogICAgICAgICByZXR1cm4gKHNlbGYuaGFzX3B1cmVfbW9kdWxlcygpIGFuZAogICAgICAgICAgICAgICAgIG5vdCBzZWxmLmhhc19leHRfbW9kdWxlcygpIGFuZAogICAgICAgICAgICAgICAgIG5vdCBzZWxmLmhhc19jX2xpYnJhcmllcygpKQpAQCAtMTAzMSw5ICsxMDA4LDYgQEAKICAgICAjIHRvIHNlbGYubWV0YWRhdGEuZ2V0X1hYWC4gIFRoZSBhY3R1YWwgY29kZSBpcyBpbiB0aGUKICAgICAjIERpc3RyaWJ1dGlvbk1ldGFkYXRhIGNsYXNzLCBiZWxvdy4KIAotIyBjbGFzcyBEaXN0cmlidXRpb24KLQotCiBjbGFzcyBEaXN0cmlidXRpb25NZXRhZGF0YToKICAgICAiIiJEdW1teSBjbGFzcyB0byBob2xkIHRoZSBkaXN0cmlidXRpb24gbWV0YS1kYXRhOiBuYW1lLCB2ZXJzaW9uLAogICAgIGF1dGhvciwgYW5kIHNvIGZvcnRoLgpAQCAtMTA0OSwzOCArMTAyMyw5MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyIsICJyZXF1aXJlcyIsICJvYnNvbGV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICkKIAotICAgIGRlZiBfX2luaXRfXyAoc2VsZik6Ci0gICAgICAgIHNlbGYubmFtZSA9IE5vbmUKLSAgICAgICAgc2VsZi52ZXJzaW9uID0gTm9uZQotICAgICAgICBzZWxmLmF1dGhvciA9IE5vbmUKLSAgICAgICAgc2VsZi5hdXRob3JfZW1haWwgPSBOb25lCi0gICAgICAgIHNlbGYubWFpbnRhaW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5tYWludGFpbmVyX2VtYWlsID0gTm9uZQotICAgICAgICBzZWxmLnVybCA9IE5vbmUKLSAgICAgICAgc2VsZi5saWNlbnNlID0gTm9uZQotICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gTm9uZQotICAgICAgICBzZWxmLmxvbmdfZGVzY3JpcHRpb24gPSBOb25lCi0gICAgICAgIHNlbGYua2V5d29yZHMgPSBOb25lCi0gICAgICAgIHNlbGYucGxhdGZvcm1zID0gTm9uZQotICAgICAgICBzZWxmLmNsYXNzaWZpZXJzID0gTm9uZQotICAgICAgICBzZWxmLmRvd25sb2FkX3VybCA9IE5vbmUKLSAgICAgICAgIyBQRVAgMzE0Ci0gICAgICAgIHNlbGYucHJvdmlkZXMgPSBOb25lCi0gICAgICAgIHNlbGYucmVxdWlyZXMgPSBOb25lCi0gICAgICAgIHNlbGYub2Jzb2xldGVzID0gTm9uZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgorICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5yZWFkX3BrZ19maWxlKG9wZW4ocGF0aCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgICAgICBzZWxmLnZlcnNpb24gPSBOb25lCisgICAgICAgICAgICBzZWxmLmF1dGhvciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yX2VtYWlsID0gTm9uZQorICAgICAgICAgICAgc2VsZi5tYWludGFpbmVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5tYWludGFpbmVyX2VtYWlsID0gTm9uZQorICAgICAgICAgICAgc2VsZi51cmwgPSBOb25lCisgICAgICAgICAgICBzZWxmLmxpY2Vuc2UgPSBOb25lCisgICAgICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gTm9uZQorICAgICAgICAgICAgc2VsZi5sb25nX2Rlc2NyaXB0aW9uID0gTm9uZQorICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGxhdGZvcm1zID0gTm9uZQorICAgICAgICAgICAgc2VsZi5jbGFzc2lmaWVycyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZG93bmxvYWRfdXJsID0gTm9uZQorICAgICAgICAgICAgIyBQRVAgMzE0CisgICAgICAgICAgICBzZWxmLnByb3ZpZGVzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5yZXF1aXJlcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYub2Jzb2xldGVzID0gTm9uZQogCi0gICAgZGVmIHdyaXRlX3BrZ19pbmZvIChzZWxmLCBiYXNlX2Rpcik6CisgICAgZGVmIHJlYWRfcGtnX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgICIiIlJlYWRzIHRoZSBtZXRhZGF0YSB2YWx1ZXMgZnJvbSBhIGZpbGUgb2JqZWN0LiIiIgorICAgICAgICBtc2cgPSBtZXNzYWdlX2Zyb21fZmlsZShmaWxlKQorCisgICAgICAgIGRlZiBfcmVhZF9maWVsZChuYW1lKToKKyAgICAgICAgICAgIHZhbHVlID0gbXNnW25hbWVdCisgICAgICAgICAgICBpZiB2YWx1ZSA9PSAnVU5LTk9XTic6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGRlZiBfcmVhZF9saXN0KG5hbWUpOgorICAgICAgICAgICAgdmFsdWVzID0gbXNnLmdldF9hbGwobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIHZhbHVlcyA9PSBbXToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgICAgIG1ldGFkYXRhX3ZlcnNpb24gPSBtc2dbJ21ldGFkYXRhLXZlcnNpb24nXQorICAgICAgICBzZWxmLm5hbWUgPSBfcmVhZF9maWVsZCgnbmFtZScpCisgICAgICAgIHNlbGYudmVyc2lvbiA9IF9yZWFkX2ZpZWxkKCd2ZXJzaW9uJykKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IF9yZWFkX2ZpZWxkKCdzdW1tYXJ5JykKKyAgICAgICAgIyB3ZSBhcmUgZmlsbGluZyBhdXRob3Igb25seS4KKyAgICAgICAgc2VsZi5hdXRob3IgPSBfcmVhZF9maWVsZCgnYXV0aG9yJykKKyAgICAgICAgc2VsZi5tYWludGFpbmVyID0gTm9uZQorICAgICAgICBzZWxmLmF1dGhvcl9lbWFpbCA9IF9yZWFkX2ZpZWxkKCdhdXRob3ItZW1haWwnKQorICAgICAgICBzZWxmLm1haW50YWluZXJfZW1haWwgPSBOb25lCisgICAgICAgIHNlbGYudXJsID0gX3JlYWRfZmllbGQoJ2hvbWUtcGFnZScpCisgICAgICAgIHNlbGYubGljZW5zZSA9IF9yZWFkX2ZpZWxkKCdsaWNlbnNlJykKKworICAgICAgICBpZiAnZG93bmxvYWQtdXJsJyBpbiBtc2c6CisgICAgICAgICAgICBzZWxmLmRvd25sb2FkX3VybCA9IF9yZWFkX2ZpZWxkKCdkb3dubG9hZC11cmwnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kb3dubG9hZF91cmwgPSBOb25lCisKKyAgICAgICAgc2VsZi5sb25nX2Rlc2NyaXB0aW9uID0gX3JlYWRfZmllbGQoJ2Rlc2NyaXB0aW9uJykKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IF9yZWFkX2ZpZWxkKCdzdW1tYXJ5JykKKworICAgICAgICBpZiAna2V5d29yZHMnIGluIG1zZzoKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBfcmVhZF9maWVsZCgna2V5d29yZHMnKS5zcGxpdCgnLCcpCisKKyAgICAgICAgc2VsZi5wbGF0Zm9ybXMgPSBfcmVhZF9saXN0KCdwbGF0Zm9ybScpCisgICAgICAgIHNlbGYuY2xhc3NpZmllcnMgPSBfcmVhZF9saXN0KCdjbGFzc2lmaWVyJykKKworICAgICAgICAjIFBFUCAzMTQgLSB0aGVzZSBmaWVsZHMgb25seSBleGlzdCBpbiAxLjEKKyAgICAgICAgaWYgbWV0YWRhdGFfdmVyc2lvbiA9PSAnMS4xJzoKKyAgICAgICAgICAgIHNlbGYucmVxdWlyZXMgPSBfcmVhZF9saXN0KCdyZXF1aXJlcycpCisgICAgICAgICAgICBzZWxmLnByb3ZpZGVzID0gX3JlYWRfbGlzdCgncHJvdmlkZXMnKQorICAgICAgICAgICAgc2VsZi5vYnNvbGV0ZXMgPSBfcmVhZF9saXN0KCdvYnNvbGV0ZXMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZXF1aXJlcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucHJvdmlkZXMgPSBOb25lCisgICAgICAgICAgICBzZWxmLm9ic29sZXRlcyA9IE5vbmUKKworICAgIGRlZiB3cml0ZV9wa2dfaW5mbyhzZWxmLCBiYXNlX2Rpcik6CiAgICAgICAgICIiIldyaXRlIHRoZSBQS0ctSU5GTyBmaWxlIGludG8gdGhlIHJlbGVhc2UgdHJlZS4KICAgICAgICAgIiIiCi0gICAgICAgIHBrZ19pbmZvID0gb3Blbiggb3MucGF0aC5qb2luKGJhc2VfZGlyLCAnUEtHLUlORk8nKSwgJ3cnKQorICAgICAgICBwa2dfaW5mbyA9IG9wZW4ob3MucGF0aC5qb2luKGJhc2VfZGlyLCAnUEtHLUlORk8nKSwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLndyaXRlX3BrZ19maWxlKHBrZ19pbmZvKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcGtnX2luZm8uY2xvc2UoKQogCi0gICAgICAgIHNlbGYud3JpdGVfcGtnX2ZpbGUocGtnX2luZm8pCi0KLSAgICAgICAgcGtnX2luZm8uY2xvc2UoKQotCi0gICAgIyB3cml0ZV9wa2dfaW5mbyAoKQotCi0gICAgZGVmIHdyaXRlX3BrZ19maWxlIChzZWxmLCBmaWxlKToKKyAgICBkZWYgd3JpdGVfcGtnX2ZpbGUoc2VsZiwgZmlsZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBQS0ctSU5GTyBmb3JtYXQgZGF0YSB0byBhIGZpbGUgb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgdmVyc2lvbiA9ICcxLjAnCkBAIC0xMDk4LDEwICsxMTI1LDEwIEBACiAgICAgICAgIGlmIHNlbGYuZG93bmxvYWRfdXJsOgogICAgICAgICAgICAgc2VsZi5fd3JpdGVfZmllbGQoZmlsZSwgJ0Rvd25sb2FkLVVSTCcsIHNlbGYuZG93bmxvYWRfdXJsKQogCi0gICAgICAgIGxvbmdfZGVzYyA9IHJmYzgyMl9lc2NhcGUoIHNlbGYuZ2V0X2xvbmdfZGVzY3JpcHRpb24oKSkKKyAgICAgICAgbG9uZ19kZXNjID0gcmZjODIyX2VzY2FwZShzZWxmLmdldF9sb25nX2Rlc2NyaXB0aW9uKCkpCiAgICAgICAgIHNlbGYuX3dyaXRlX2ZpZWxkKGZpbGUsICdEZXNjcmlwdGlvbicsIGxvbmdfZGVzYykKIAotICAgICAgICBrZXl3b3JkcyA9IHN0cmluZy5qb2luKCBzZWxmLmdldF9rZXl3b3JkcygpLCAnLCcpCisgICAgICAgIGtleXdvcmRzID0gJywnLmpvaW4oc2VsZi5nZXRfa2V5d29yZHMoKSkKICAgICAgICAgaWYga2V5d29yZHM6CiAgICAgICAgICAgICBzZWxmLl93cml0ZV9maWVsZChmaWxlLCAnS2V5d29yZHMnLCBrZXl3b3JkcykKIApAQCAtMTExNyw3ICsxMTQ0LDYgQEAKICAgICAgICAgZmlsZS53cml0ZSgnJXM6ICVzXG4nICUgKG5hbWUsIHNlbGYuX2VuY29kZV9maWVsZCh2YWx1ZSkpKQogCiAgICAgZGVmIF93cml0ZV9saXN0IChzZWxmLCBmaWxlLCBuYW1lLCB2YWx1ZXMpOgotCiAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CiAgICAgICAgICAgICBzZWxmLl93cml0ZV9maWVsZChmaWxlLCBuYW1lLCB2YWx1ZSkKIApAQCAtMTEzMCwxMyArMTE1NiwxMyBAQAogCiAgICAgIyAtLSBNZXRhZGF0YSBxdWVyeSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBnZXRfbmFtZSAoc2VsZik6CisgICAgZGVmIGdldF9uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5uYW1lIG9yICJVTktOT1dOIgogCiAgICAgZGVmIGdldF92ZXJzaW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi52ZXJzaW9uIG9yICIwLjAuMCIKIAotICAgIGRlZiBnZXRfZnVsbG5hbWUgKHNlbGYpOgorICAgIGRlZiBnZXRfZnVsbG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXMtJXMiICUgKHNlbGYuZ2V0X25hbWUoKSwgc2VsZi5nZXRfdmVyc2lvbigpKQogCiAgICAgZGVmIGdldF9hdXRob3Ioc2VsZik6CkBAIC0xMTU2LDkgKzExODIsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2VuY29kZV9maWVsZChzZWxmLmF1dGhvcikgb3IgIlVOS05PV04iKQogCiAgICAgZGVmIGdldF9jb250YWN0X2VtYWlsKHNlbGYpOgotICAgICAgICByZXR1cm4gKHNlbGYubWFpbnRhaW5lcl9lbWFpbCBvcgotICAgICAgICAgICAgICAgIHNlbGYuYXV0aG9yX2VtYWlsIG9yCi0gICAgICAgICAgICAgICAgIlVOS05PV04iKQorICAgICAgICByZXR1cm4gc2VsZi5tYWludGFpbmVyX2VtYWlsIG9yIHNlbGYuYXV0aG9yX2VtYWlsIG9yICJVTktOT1dOIgogCiAgICAgZGVmIGdldF91cmwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnVybCBvciAiVU5LTk9XTiIKQEAgLTExODYsNyArMTIxMCw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLmRvd25sb2FkX3VybCBvciAiVU5LTk9XTiIKIAogICAgICMgUEVQIDMxNAotCiAgICAgZGVmIGdldF9yZXF1aXJlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVxdWlyZXMgb3IgW10KIApAQCAtMTIxNSwxMCArMTIzOCw3IEBACiAgICAgICAgICAgICBkaXN0dXRpbHMudmVyc2lvbnByZWRpY2F0ZS5WZXJzaW9uUHJlZGljYXRlKHYpCiAgICAgICAgIHNlbGYub2Jzb2xldGVzID0gdmFsdWUKIAotIyBjbGFzcyBEaXN0cmlidXRpb25NZXRhZGF0YQotCi0KLWRlZiBmaXhfaGVscF9vcHRpb25zIChvcHRpb25zKToKK2RlZiBmaXhfaGVscF9vcHRpb25zKG9wdGlvbnMpOgogICAgICIiIkNvbnZlcnQgYSA0LXR1cGxlICdoZWxwX29wdGlvbnMnIGxpc3QgYXMgZm91bmQgaW4gdmFyaW91cyBjb21tYW5kCiAgICAgY2xhc3NlcyB0byB0aGUgMy10dXBsZSBmb3JtIHJlcXVpcmVkIGJ5IEZhbmN5R2V0b3B0LgogICAgICIiIgpAQCAtMTIyNiw4ICsxMjQ2LDMgQEAKICAgICBmb3IgaGVscF90dXBsZSBpbiBvcHRpb25zOgogICAgICAgICBuZXdfb3B0aW9ucy5hcHBlbmQoaGVscF90dXBsZVswOjNdKQogICAgIHJldHVybiBuZXdfb3B0aW9ucwotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgcHJpbnQgIm9rIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9lbXhjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQppbmRleCBmNTJlNjMyLi5hMDE3MjA1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weQpAQCAtMjcyLDggKzI3MiwxMCBAQAogICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCiAgICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKICAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGV4Y2VwdCBJT0Vycm9yLCBleGM6CiAgICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKQEAgLTMwMCw4ICszMDIsMTAgQEAKICAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQogICAgIGlmIGdjY19leGU6CiAgICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBvdXQuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3V0LmNsb3NlKCkKICAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLG91dF9zdHJpbmcpCiAgICAgICAgIGlmIHJlc3VsdDoKICAgICAgICAgICAgIGdjY192ZXJzaW9uID0gU3RyaWN0VmVyc2lvbihyZXN1bHQuZ3JvdXAoMSkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IDlkMTc1NmIuLmQ5YzQ3YzcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC04LDk0ICs4LDgxIEBACiBUaGlzIG1vZHVsZSBpcyBzYWZlIHRvIHVzZSBpbiAiZnJvbSAuLi4gaW1wb3J0ICoiIG1vZGU7IGl0IG9ubHkgZXhwb3J0cwogc3ltYm9scyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJEaXN0dXRpbHMiIGFuZCBlbmQgd2l0aCAiRXJyb3IiLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotY2xhc3MgRGlzdHV0aWxzRXJyb3IgKEV4Y2VwdGlvbik6CitjbGFzcyBEaXN0dXRpbHNFcnJvcihFeGNlcHRpb24pOgogICAgICIiIlRoZSByb290IG9mIGFsbCBEaXN0dXRpbHMgZXZpbC4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc01vZHVsZUVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNNb2R1bGVFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiVW5hYmxlIHRvIGxvYWQgYW4gZXhwZWN0ZWQgbW9kdWxlLCBvciB0byBmaW5kIGFuIGV4cGVjdGVkIGNsYXNzCiAgICAgd2l0aGluIHNvbWUgbW9kdWxlIChpbiBwYXJ0aWN1bGFyLCBjb21tYW5kIG1vZHVsZXMgYW5kIGNsYXNzZXMpLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzQ2xhc3NFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgorY2xhc3MgRGlzdHV0aWxzQ2xhc3NFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiU29tZSBjb21tYW5kIGNsYXNzIChvciBwb3NzaWJseSBkaXN0cmlidXRpb24gY2xhc3MsIGlmIGFueW9uZQogICAgIGZlZWxzIGEgbmVlZCB0byBzdWJjbGFzcyBEaXN0cmlidXRpb24pIGlzIGZvdW5kIG5vdCB0byBiZSBob2xkaW5nCiAgICAgdXAgaXRzIGVuZCBvZiB0aGUgYmFyZ2FpbiwgaWUuIGltcGxlbWVudGluZyBzb21lIHBhcnQgb2YgdGhlCiAgICAgImNvbW1hbmQgImludGVyZmFjZS4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc0dldG9wdEVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNHZXRvcHRFcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiVGhlIG9wdGlvbiB0YWJsZSBwcm92aWRlZCB0byAnZmFuY3lfZ2V0b3B0KCknIGlzIGJvZ3VzLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzQXJnRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc0FyZ0Vycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJSYWlzZWQgYnkgZmFuY3lfZ2V0b3B0IGluIHJlc3BvbnNlIHRvIGdldG9wdC5lcnJvciAtLSBpZS4gYW4KICAgICBlcnJvciBpbiB0aGUgY29tbWFuZCBsaW5lIHVzYWdlLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzRmlsZUVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNGaWxlRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KICAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKICAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc09wdGlvbkVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiU3ludGFjdGljL3NlbWFudGljIGVycm9ycyBpbiBjb21tYW5kIG9wdGlvbnMsIHN1Y2ggYXMgdXNlIG9mCiAgICAgbXV0dWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucywgb3IgaW5jb25zaXN0ZW50IG9wdGlvbnMsCiAgICAgYmFkbHktc3BlbGxlZCB2YWx1ZXMsIGV0Yy4gIE5vIGRpc3RpbmN0aW9uIGlzIG1hZGUgYmV0d2VlbiBvcHRpb24KICAgICB2YWx1ZXMgb3JpZ2luYXRpbmcgaW4gdGhlIHNldHVwIHNjcmlwdCwgdGhlIGNvbW1hbmQgbGluZSwgY29uZmlnCiAgICAgZmlsZXMsIG9yIHdoYXQtaGF2ZS15b3UgLS0gYnV0IGlmIHdlICprbm93KiBzb21ldGhpbmcgb3JpZ2luYXRlZCBpbgogICAgIHRoZSBzZXR1cCBzY3JpcHQsIHdlJ2xsIHJhaXNlIERpc3R1dGlsc1NldHVwRXJyb3IgaW5zdGVhZC4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc1NldHVwRXJyb3IgKERpc3R1dGlsc0Vycm9yKToKK2NsYXNzIERpc3R1dGlsc1NldHVwRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkZvciBlcnJvcnMgdGhhdCBjYW4gYmUgZGVmaW5pdGVseSBibGFtZWQgb24gdGhlIHNldHVwIHNjcmlwdCwKICAgICBzdWNoIGFzIGludmFsaWQga2V5d29yZCBhcmd1bWVudHMgdG8gJ3NldHVwKCknLiIiIgotICAgIHBhc3MKIAotY2xhc3MgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgorY2xhc3MgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihEaXN0dXRpbHNFcnJvcik6CiAgICAgIiIiV2UgZG9uJ3Qga25vdyBob3cgdG8gZG8gc29tZXRoaW5nIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtIChidXQKICAgICB3ZSBkbyBrbm93IGhvdyB0byBkbyBpdCBvbiBzb21lIHBsYXRmb3JtKSAtLSBlZy4gdHJ5aW5nIHRvIGNvbXBpbGUKICAgICBDIGZpbGVzIG9uIGEgcGxhdGZvcm0gbm90IHN1cHBvcnRlZCBieSBhIENDb21waWxlciBzdWJjbGFzcy4iIiIKLSAgICBwYXNzCiAKLWNsYXNzIERpc3R1dGlsc0V4ZWNFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgorY2xhc3MgRGlzdHV0aWxzRXhlY0Vycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJBbnkgcHJvYmxlbXMgZXhlY3V0aW5nIGFuIGV4dGVybmFsIHByb2dyYW0gKHN1Y2ggYXMgdGhlIEMKICAgICBjb21waWxlciwgd2hlbiBjb21waWxpbmcgQyBmaWxlcykuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNJbnRlcm5hbEVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNJbnRlcm5hbEVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJJbnRlcm5hbCBpbmNvbnNpc3RlbmNpZXMgb3IgaW1wb3NzaWJpbGl0aWVzIChvYnZpb3VzbHksIHRoaXMKICAgICBzaG91bGQgbmV2ZXIgYmUgc2VlbiBpZiB0aGUgY29kZSBpcyB3b3JraW5nISkuIiIiCi0gICAgcGFzcwogCi1jbGFzcyBEaXN0dXRpbHNUZW1wbGF0ZUVycm9yIChEaXN0dXRpbHNFcnJvcik6CitjbGFzcyBEaXN0dXRpbHNUZW1wbGF0ZUVycm9yKERpc3R1dGlsc0Vycm9yKToKICAgICAiIiJTeW50YXggZXJyb3IgaW4gYSBmaWxlIGxpc3QgdGVtcGxhdGUuIiIiCiAKIGNsYXNzIERpc3R1dGlsc0J5dGVDb21waWxlRXJyb3IoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkJ5dGUgY29tcGlsZSBlcnJvci4iIiIKIAogIyBFeGNlcHRpb24gY2xhc3NlcyB1c2VkIGJ5IHRoZSBDQ29tcGlsZXIgaW1wbGVtZW50YXRpb24gY2xhc3NlcwotY2xhc3MgQ0NvbXBpbGVyRXJyb3IgKEV4Y2VwdGlvbik6CitjbGFzcyBDQ29tcGlsZXJFcnJvcihFeGNlcHRpb24pOgogICAgICIiIlNvbWUgY29tcGlsZS9saW5rIG9wZXJhdGlvbiBmYWlsZWQuIiIiCiAKLWNsYXNzIFByZXByb2Nlc3NFcnJvciAoQ0NvbXBpbGVyRXJyb3IpOgorY2xhc3MgUHJlcHJvY2Vzc0Vycm9yKENDb21waWxlckVycm9yKToKICAgICAiIiJGYWlsdXJlIHRvIHByZXByb2Nlc3Mgb25lIG9yIG1vcmUgQy9DKysgZmlsZXMuIiIiCiAKLWNsYXNzIENvbXBpbGVFcnJvciAoQ0NvbXBpbGVyRXJyb3IpOgorY2xhc3MgQ29tcGlsZUVycm9yKENDb21waWxlckVycm9yKToKICAgICAiIiJGYWlsdXJlIHRvIGNvbXBpbGUgb25lIG9yIG1vcmUgQy9DKysgc291cmNlIGZpbGVzLiIiIgogCi1jbGFzcyBMaWJFcnJvciAoQ0NvbXBpbGVyRXJyb3IpOgorY2xhc3MgTGliRXJyb3IoQ0NvbXBpbGVyRXJyb3IpOgogICAgICIiIkZhaWx1cmUgdG8gY3JlYXRlIGEgc3RhdGljIGxpYnJhcnkgZnJvbSBvbmUgb3IgbW9yZSBDL0MrKyBvYmplY3QKICAgICBmaWxlcy4iIiIKIAotY2xhc3MgTGlua0Vycm9yIChDQ29tcGlsZXJFcnJvcik6CitjbGFzcyBMaW5rRXJyb3IoQ0NvbXBpbGVyRXJyb3IpOgogICAgICIiIkZhaWx1cmUgdG8gbGluayBvbmUgb3IgbW9yZSBDL0MrKyBvYmplY3QgZmlsZXMgaW50byBhbiBleGVjdXRhYmxlCiAgICAgb3Igc2hhcmVkIGxpYnJhcnkgZmlsZS4iIiIKIAotY2xhc3MgVW5rbm93bkZpbGVFcnJvciAoQ0NvbXBpbGVyRXJyb3IpOgorY2xhc3MgVW5rbm93bkZpbGVFcnJvcihDQ29tcGlsZXJFcnJvcik6CiAgICAgIiIiQXR0ZW1wdCB0byBwcm9jZXNzIGFuIHVua25vd24gZmlsZSB0eXBlLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9leHRlbnNpb24ucHkgYi9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQppbmRleCA0NDBkMTI4Li45YTY3Y2E4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQpAQCAtMTUwLDg3ICsxNTAsOTYgQEAKICAgICBmaWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsIGpvaW5fbGluZXM9MSwKICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTEsIHJzdHJpcF93cz0xKQotICAgIGV4dGVuc2lvbnMgPSBbXQorICAgIHRyeToKKyAgICAgICAgZXh0ZW5zaW9ucyA9IFtdCiAKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZmlsZS5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmUgaXMgTm9uZTogICAgICAgICAgICAgICAgIyBlb2YKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIF92YXJpYWJsZV9yeC5tYXRjaChsaW5lKTogICAgIyBWQVI9VkFMVUUsIGhhbmRsZWQgaW4gZmlyc3QgcGFzcwotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBpZiBsaW5lWzBdID09IGxpbmVbLTFdID09ICIqIjoKLSAgICAgICAgICAgIGZpbGUud2FybigiJyVzJyBsaW5lcyBub3QgaGFuZGxlZCB5ZXQiICUgbGluZSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgI3ByaW50ICJvcmlnaW5hbCBsaW5lOiAiICsgbGluZQotICAgICAgICBsaW5lID0gZXhwYW5kX21ha2VmaWxlX3ZhcnMobGluZSwgdmFycykKLSAgICAgICAgd29yZHMgPSBzcGxpdF9xdW90ZWQobGluZSkKLSAgICAgICAgI3ByaW50ICJleHBhbmRlZCBsaW5lOiAiICsgbGluZQotCi0gICAgICAgICMgTkIuIHRoaXMgcGFyc2VzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN5bnRheCB0aGFuIHRoZSBvbGQKLSAgICAgICAgIyBtYWtlc2V0dXAgc2NyaXB0OiBoZXJlLCB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGV4dGVuc2lvbiBwZXIKLSAgICAgICAgIyBsaW5lLCBhbmQgaXQgbXVzdCBiZSB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgbGluZS4gIEkgaGF2ZSBubyBpZGVhCi0gICAgICAgICMgd2h5IHRoZSBvbGQgc3ludGF4IHN1cHBvcnRlZCBtdWx0aXBsZSBleHRlbnNpb25zIHBlciBsaW5lLCBhcwotICAgICAgICAjIHRoZXkgYWxsIHdpbmQgdXAgYmVpbmcgdGhlIHNhbWUuCi0KLSAgICAgICAgbW9kdWxlID0gd29yZHNbMF0KLSAgICAgICAgZXh0ID0gRXh0ZW5zaW9uKG1vZHVsZSwgW10pCi0gICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBOb25lCi0KLSAgICAgICAgZm9yIHdvcmQgaW4gd29yZHNbMTpdOgotICAgICAgICAgICAgaWYgYXBwZW5kX25leHRfd29yZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkLmFwcGVuZCh3b3JkKQotICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBOb25lCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBsaW5lID0gZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsaW5lIGlzIE5vbmU6ICAgICAgICAgICAgICAgICMgZW9mCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIF92YXJpYWJsZV9yeC5tYXRjaChsaW5lKTogICAgIyBWQVI9VkFMVUUsIGhhbmRsZWQgaW4gZmlyc3QgcGFzcwogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQod29yZClbMV0KLSAgICAgICAgICAgIHN3aXRjaCA9IHdvcmRbMDoyXSA7IHZhbHVlID0gd29yZFsyOl0KKyAgICAgICAgICAgICAgICBpZiBsaW5lWzBdID09IGxpbmVbLTFdID09ICIqIjoKKyAgICAgICAgICAgICAgICAgICAgZmlsZS53YXJuKCInJXMnIGxpbmVzIG5vdCBoYW5kbGVkIHlldCIgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiBzdWZmaXggaW4gKCIuYyIsICIuY2MiLCAiLmNwcCIsICIuY3h4IiwgIi5jKysiLCAiLm0iLCAiLm1tIik6Ci0gICAgICAgICAgICAgICAgIyBobW0sIHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgYWJvdXQgQyB2cy4gQysrIHNvdXJjZXM/Ci0gICAgICAgICAgICAgICAgIyBvciBsZWF2ZSBpdCB1cCB0byB0aGUgQ0NvbXBpbGVyIGltcGxlbWVudGF0aW9uIHRvCi0gICAgICAgICAgICAgICAgIyB3b3JyeSBhYm91dD8KLSAgICAgICAgICAgICAgICBleHQuc291cmNlcy5hcHBlbmQod29yZCkKLSAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItSSI6Ci0gICAgICAgICAgICAgICAgZXh0LmluY2x1ZGVfZGlycy5hcHBlbmQodmFsdWUpCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUQiOgotICAgICAgICAgICAgICAgIGVxdWFscyA9IHN0cmluZy5maW5kKHZhbHVlLCAiPSIpCi0gICAgICAgICAgICAgICAgaWYgZXF1YWxzID09IC0xOiAgICAgICAgIyBiYXJlICItREZPTyIgLS0gbm8gdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgZXh0LmRlZmluZV9tYWNyb3MuYXBwZW5kKCh2YWx1ZSwgTm9uZSkpCi0gICAgICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgIyAiLURGT089YmxhaCIKLSAgICAgICAgICAgICAgICAgICAgZXh0LmRlZmluZV9tYWNyb3MuYXBwZW5kKCh2YWx1ZVswOmVxdWFsc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbZXF1YWxzKzI6XSkpCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLVUiOgotICAgICAgICAgICAgICAgIGV4dC51bmRlZl9tYWNyb3MuYXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1DIjogICAgICAgICMgb25seSBoZXJlICdjYXVzZSBtYWtlc2V0dXAgaGFzIGl0IQotICAgICAgICAgICAgICAgIGV4dC5leHRyYV9jb21waWxlX2FyZ3MuYXBwZW5kKHdvcmQpCi0gICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLWwiOgotICAgICAgICAgICAgICAgIGV4dC5saWJyYXJpZXMuYXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1MIjoKLSAgICAgICAgICAgICAgICBleHQubGlicmFyeV9kaXJzLmFwcGVuZCh2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItUiI6Ci0gICAgICAgICAgICAgICAgZXh0LnJ1bnRpbWVfbGlicmFyeV9kaXJzLmFwcGVuZCh2YWx1ZSkKLSAgICAgICAgICAgIGVsaWYgd29yZCA9PSAiLXJwYXRoIjoKLSAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LnJ1bnRpbWVfbGlicmFyeV9kaXJzCi0gICAgICAgICAgICBlbGlmIHdvcmQgPT0gIi1YbGlua2VyIjoKLSAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LmV4dHJhX2xpbmtfYXJncwotICAgICAgICAgICAgZWxpZiB3b3JkID09ICItWGNvbXBpbGVyIjoKLSAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LmV4dHJhX2NvbXBpbGVfYXJncwotICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi11IjoKLSAgICAgICAgICAgICAgICBleHQuZXh0cmFfbGlua19hcmdzLmFwcGVuZCh3b3JkKQotICAgICAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICNwcmludCAib3JpZ2luYWwgbGluZTogIiArIGxpbmUKKyAgICAgICAgICAgIGxpbmUgPSBleHBhbmRfbWFrZWZpbGVfdmFycyhsaW5lLCB2YXJzKQorICAgICAgICAgICAgd29yZHMgPSBzcGxpdF9xdW90ZWQobGluZSkKKyAgICAgICAgICAgICNwcmludCAiZXhwYW5kZWQgbGluZTogIiArIGxpbmUKKworICAgICAgICAgICAgIyBOQi4gdGhpcyBwYXJzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc3ludGF4IHRoYW4gdGhlIG9sZAorICAgICAgICAgICAgIyBtYWtlc2V0dXAgc2NyaXB0OiBoZXJlLCB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGV4dGVuc2lvbiBwZXIKKyAgICAgICAgICAgICMgbGluZSwgYW5kIGl0IG11c3QgYmUgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGxpbmUuICBJIGhhdmUgbm8gaWRlYQorICAgICAgICAgICAgIyB3aHkgdGhlIG9sZCBzeW50YXggc3VwcG9ydGVkIG11bHRpcGxlIGV4dGVuc2lvbnMgcGVyIGxpbmUsIGFzCisgICAgICAgICAgICAjIHRoZXkgYWxsIHdpbmQgdXAgYmVpbmcgdGhlIHNhbWUuCisKKyAgICAgICAgICAgIG1vZHVsZSA9IHdvcmRzWzBdCisgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24obW9kdWxlLCBbXSkKKyAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBOb25lCisKKyAgICAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzWzE6XToKKyAgICAgICAgICAgICAgICBpZiBhcHBlbmRfbmV4dF93b3JkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkLmFwcGVuZCh3b3JkKQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dCh3b3JkKVsxXQorICAgICAgICAgICAgICAgIHN3aXRjaCA9IHdvcmRbMDoyXSA7IHZhbHVlID0gd29yZFsyOl0KKworICAgICAgICAgICAgICAgIGlmIHN1ZmZpeCBpbiAoIi5jIiwgIi5jYyIsICIuY3BwIiwgIi5jeHgiLCAiLmMrKyIsICIubSIsICIubW0iKToKKyAgICAgICAgICAgICAgICAgICAgIyBobW0sIHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgYWJvdXQgQyB2cy4gQysrIHNvdXJjZXM/CisgICAgICAgICAgICAgICAgICAgICMgb3IgbGVhdmUgaXQgdXAgdG8gdGhlIENDb21waWxlciBpbXBsZW1lbnRhdGlvbiB0bworICAgICAgICAgICAgICAgICAgICAjIHdvcnJ5IGFib3V0PworICAgICAgICAgICAgICAgICAgICBleHQuc291cmNlcy5hcHBlbmQod29yZCkKKyAgICAgICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUkiOgorICAgICAgICAgICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIHN3aXRjaCA9PSAiLUQiOgorICAgICAgICAgICAgICAgICAgICBlcXVhbHMgPSBzdHJpbmcuZmluZCh2YWx1ZSwgIj0iKQorICAgICAgICAgICAgICAgICAgICBpZiBlcXVhbHMgPT0gLTE6ICAgICAgICAjIGJhcmUgIi1ERk9PIiAtLSBubyB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZXh0LmRlZmluZV9tYWNyb3MuYXBwZW5kKCh2YWx1ZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICMgIi1ERk9PPWJsYWgiCisgICAgICAgICAgICAgICAgICAgICAgICBleHQuZGVmaW5lX21hY3Jvcy5hcHBlbmQoKHZhbHVlWzA6ZXF1YWxzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbZXF1YWxzKzI6XSkpCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1VIjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LnVuZGVmX21hY3Jvcy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi1DIjogICAgICAgICMgb25seSBoZXJlICdjYXVzZSBtYWtlc2V0dXAgaGFzIGl0IQorICAgICAgICAgICAgICAgICAgICBleHQuZXh0cmFfY29tcGlsZV9hcmdzLmFwcGVuZCh3b3JkKQorICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItbCI6CisgICAgICAgICAgICAgICAgICAgIGV4dC5saWJyYXJpZXMuYXBwZW5kKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItTCI6CisgICAgICAgICAgICAgICAgICAgIGV4dC5saWJyYXJ5X2RpcnMuYXBwZW5kKHZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItUiI6CisgICAgICAgICAgICAgICAgICAgIGV4dC5ydW50aW1lX2xpYnJhcnlfZGlycy5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiB3b3JkID09ICItcnBhdGgiOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LnJ1bnRpbWVfbGlicmFyeV9kaXJzCisgICAgICAgICAgICAgICAgZWxpZiB3b3JkID09ICItWGxpbmtlciI6CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfbGlua19hcmdzCi0gICAgICAgICAgICBlbGlmIHN1ZmZpeCBpbiAoIi5hIiwgIi5zbyIsICIuc2wiLCAiLm8iLCAiLmR5bGliIik6Ci0gICAgICAgICAgICAgICAgIyBOQi4gYSByZWFsbHkgZmFpdGhmdWwgZW11bGF0aW9uIG9mIG1ha2VzZXR1cCB3b3VsZAotICAgICAgICAgICAgICAgICMgYXBwZW5kIGEgLm8gZmlsZSB0byBleHRyYV9vYmplY3RzIG9ubHkgaWYgaXQKLSAgICAgICAgICAgICAgICAjIGhhZCBhIHNsYXNoIGluIGl0OyBvdGhlcndpc2UsIGl0IHdvdWxkIHMvLm8vLmMvCi0gICAgICAgICAgICAgICAgIyBhbmQgYXBwZW5kIGl0IHRvIHNvdXJjZXMuICBIbW1tbS4KLSAgICAgICAgICAgICAgICBleHQuZXh0cmFfb2JqZWN0cy5hcHBlbmQod29yZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZmlsZS53YXJuKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQgJyVzJyIgJSB3b3JkKQorICAgICAgICAgICAgICAgIGVsaWYgd29yZCA9PSAiLVhjb21waWxlciI6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfY29tcGlsZV9hcmdzCisgICAgICAgICAgICAgICAgZWxpZiBzd2l0Y2ggPT0gIi11IjoKKyAgICAgICAgICAgICAgICAgICAgZXh0LmV4dHJhX2xpbmtfYXJncy5hcHBlbmQod29yZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25leHRfd29yZCA9IGV4dC5leHRyYV9saW5rX2FyZ3MKKyAgICAgICAgICAgICAgICBlbGlmIHdvcmQgPT0gIi1YY29tcGlsZXIiOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbmV4dF93b3JkID0gZXh0LmV4dHJhX2NvbXBpbGVfYXJncworICAgICAgICAgICAgICAgIGVsaWYgc3dpdGNoID09ICItdSI6CisgICAgICAgICAgICAgICAgICAgIGV4dC5leHRyYV9saW5rX2FyZ3MuYXBwZW5kKHdvcmQpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9uZXh0X3dvcmQgPSBleHQuZXh0cmFfbGlua19hcmdzCisgICAgICAgICAgICAgICAgZWxpZiBzdWZmaXggaW4gKCIuYSIsICIuc28iLCAiLnNsIiwgIi5vIiwgIi5keWxpYiIpOgorICAgICAgICAgICAgICAgICAgICAjIE5CLiBhIHJlYWxseSBmYWl0aGZ1bCBlbXVsYXRpb24gb2YgbWFrZXNldHVwIHdvdWxkCisgICAgICAgICAgICAgICAgICAgICMgYXBwZW5kIGEgLm8gZmlsZSB0byBleHRyYV9vYmplY3RzIG9ubHkgaWYgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBoYWQgYSBzbGFzaCBpbiBpdDsgb3RoZXJ3aXNlLCBpdCB3b3VsZCBzLy5vLy5jLworICAgICAgICAgICAgICAgICAgICAjIGFuZCBhcHBlbmQgaXQgdG8gc291cmNlcy4gIEhtbW1tLgorICAgICAgICAgICAgICAgICAgICBleHQuZXh0cmFfb2JqZWN0cy5hcHBlbmQod29yZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndhcm4oInVucmVjb2duaXplZCBhcmd1bWVudCAnJXMnIiAlIHdvcmQpCiAKLSAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoZXh0KQorICAgICAgICAgICAgZXh0ZW5zaW9ucy5hcHBlbmQoZXh0KQorICAgIGZpbmFsbHk6CisgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgICAgICNwcmludCAibW9kdWxlOiIsIG1vZHVsZQogICAgICAgICAjcHJpbnQgInNvdXJjZSBmaWxlczoiLCBzb3VyY2VfZmlsZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZmFuY3lfZ2V0b3B0LnB5IGIvTGliL2Rpc3R1dGlscy9mYW5jeV9nZXRvcHQucHkKaW5kZXggMzFjZjBjNS4uMmRlYTk0OCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9mYW5jeV9nZXRvcHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9mYW5jeV9nZXRvcHQucHkKQEAgLTgsMTQgKzgsMTMgQEAKICAgKiBvcHRpb25zIHNldCBhdHRyaWJ1dGVzIG9mIGEgcGFzc2VkLWluIG9iamVjdAogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBzdHJpbmcsIHJlCi1mcm9tIHR5cGVzIGltcG9ydCAqCitpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgcmUKIGltcG9ydCBnZXRvcHQKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNHZXRvcHRFcnJvciwgRGlzdHV0aWxzQXJnRXJyb3IKIAogIyBNdWNoIGxpa2UgY29tbWFuZF9yZSBpbiBkaXN0dXRpbHMuY29yZSwgdGhpcyBpcyBjbG9zZSB0byBidXQgbm90IHF1aXRlCiAjIHRoZSBzYW1lIGFzIGEgUHl0aG9uIE5BTUUgLS0gZXhjZXB0LCBpbiB0aGUgc3Bpcml0IG9mIG1vc3QgR05VCkBAIC0xMTksNyArMTE4LDcgQEAKIAogCiAgICAgZGVmIF9jaGVja19hbGlhc19kaWN0IChzZWxmLCBhbGlhc2VzLCB3aGF0KToKLSAgICAgICAgYXNzZXJ0IHR5cGUoYWxpYXNlcykgaXMgRGljdGlvbmFyeVR5cGUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYWxpYXNlcywgZGljdCkKICAgICAgICAgZm9yIChhbGlhcywgb3B0KSBpbiBhbGlhc2VzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBhbGlhcyBub3QgaW4gc2VsZi5vcHRpb25faW5kZXg6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzR2V0b3B0RXJyb3IsIFwKQEAgLTE2NiwxMyArMTY1LDEzIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgImludmFsaWQgb3B0aW9uIHR1cGxlOiAlciIgJSAob3B0aW9uLCkKIAogICAgICAgICAgICAgIyBUeXBlLSBhbmQgdmFsdWUtY2hlY2sgdGhlIG9wdGlvbiBuYW1lcwotICAgICAgICAgICAgaWYgdHlwZShsb25nKSBpcyBub3QgU3RyaW5nVHlwZSBvciBsZW4obG9uZykgPCAyOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9uZywgc3RyKSBvciBsZW4obG9uZykgPCAyOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0dldG9wdEVycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgKCJpbnZhbGlkIGxvbmcgb3B0aW9uICclcyc6ICIKICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoID49IDIiKSAlIGxvbmcKIAogICAgICAgICAgICAgaWYgKG5vdCAoKHNob3J0IGlzIE5vbmUpIG9yCi0gICAgICAgICAgICAgICAgICAgICAodHlwZShzaG9ydCkgaXMgU3RyaW5nVHlwZSBhbmQgbGVuKHNob3J0KSA9PSAxKSkpOgorICAgICAgICAgICAgICAgICAgICAgKGlzaW5zdGFuY2Uoc2hvcnQsIHN0cikgYW5kIGxlbihzaG9ydCkgPT0gMSkpKToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNHZXRvcHRFcnJvciwgXAogICAgICAgICAgICAgICAgICAgICAgICgiaW52YWxpZCBzaG9ydCBvcHRpb24gJyVzJzogIgogICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBhIHNpbmdsZSBjaGFyYWN0ZXIgb3IgTm9uZSIpICUgc2hvcnQKQEAgLTQ2NiwxMCArNDY1LDggQEAKIAogICAgIHJldHVybiBsaW5lcwogCi0jIHdyYXBfdGV4dCAoKQogCi0KLWRlZiB0cmFuc2xhdGVfbG9uZ29wdCAob3B0KToKK2RlZiB0cmFuc2xhdGVfbG9uZ29wdChvcHQpOgogICAgICIiIkNvbnZlcnQgYSBsb25nIG9wdGlvbiBuYW1lIHRvIGEgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXIgYnkKICAgICBjaGFuZ2luZyAiLSIgdG8gIl8iLgogICAgICIiIgpAQCAtNDg1LDE4ICs0ODIsMyBAQAogICAgICAgICAnb3B0aW9ucycgd2lsbCBiZSBpbml0aWFsaXplZCB0byBOb25lLiIiIgogICAgICAgICBmb3Igb3B0IGluIG9wdGlvbnM6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG9wdCwgTm9uZSkKLQotIyBjbGFzcyBPcHRpb25EdW1teQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGV4dCA9ICIiIlwKLVRyYS1sYS1sYSwgc3VwZXJjYWxpZnJhZ2lsaXN0aWNleHBpYWxpZG9jaW91cy4KLUhvdyAqZG8qIHlvdSBzcGVsbCB0aGF0IG9kZCB3b3JkLCBhbnl3YXlzPwotKFNvbWVvbmUgYXNrIE1hcnkgLS0gc2hlJ2xsIGtub3cgW29yIHNoZSdsbAotc2F5LCAiSG93IHNob3VsZCBJIGtub3c/Il0uKSIiIgotCi0gICAgZm9yIHcgaW4gKDEwLCAyMCwgMzAsIDQwKToKLSAgICAgICAgcHJpbnQgIndpZHRoOiAlZCIgJSB3Ci0gICAgICAgIHByaW50IHN0cmluZy5qb2luKHdyYXBfdGV4dCh0ZXh0LCB3KSwgIlxuIikKLSAgICAgICAgcHJpbnQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKaW5kZXggMzdiMTUyZS4uYjlmMDc4NiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKQEAgLTMsOCArMyw2IEBACiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3Igb3BlcmF0aW5nIG9uIHNpbmdsZSBmaWxlcy4KICIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAogaW1wb3J0IG9zCkBAIC0xMiw0OSArMTAsNDggQEAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogIyBmb3IgZ2VuZXJhdGluZyB2ZXJib3NlIG91dHB1dCBpbiAnY29weV9maWxlKCknCi1fY29weV9hY3Rpb24gPSB7IE5vbmU6ICAgJ2NvcHlpbmcnLAotICAgICAgICAgICAgICAgICAnaGFyZCc6ICdoYXJkIGxpbmtpbmcnLAotICAgICAgICAgICAgICAgICAnc3ltJzogICdzeW1ib2xpY2FsbHkgbGlua2luZycgfQorX2NvcHlfYWN0aW9uID0ge05vbmU6ICdjb3B5aW5nJywKKyAgICAgICAgICAgICAgICAnaGFyZCc6ICdoYXJkIGxpbmtpbmcnLAorICAgICAgICAgICAgICAgICdzeW0nOiAnc3ltYm9saWNhbGx5IGxpbmtpbmcnfQogCiAKLWRlZiBfY29weV9maWxlX2NvbnRlbnRzIChzcmMsIGRzdCwgYnVmZmVyX3NpemU9MTYqMTAyNCk6Ci0gICAgIiIiQ29weSB0aGUgZmlsZSAnc3JjJyB0byAnZHN0JzsgYm90aCBtdXN0IGJlIGZpbGVuYW1lcy4gIEFueSBlcnJvcgotICAgIG9wZW5pbmcgZWl0aGVyIGZpbGUsIHJlYWRpbmcgZnJvbSAnc3JjJywgb3Igd3JpdGluZyB0byAnZHN0JywgcmFpc2VzCi0gICAgRGlzdHV0aWxzRmlsZUVycm9yLiAgRGF0YSBpcyByZWFkL3dyaXR0ZW4gaW4gY2h1bmtzIG9mICdidWZmZXJfc2l6ZScKLSAgICBieXRlcyAoZGVmYXVsdCAxNmspLiAgTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGhhbmRsZSBhbnl0aGluZyBhcGFydCBmcm9tCi0gICAgcmVndWxhciBmaWxlcy4KK2RlZiBfY29weV9maWxlX2NvbnRlbnRzKHNyYywgZHN0LCBidWZmZXJfc2l6ZT0xNioxMDI0KToKKyAgICAiIiJDb3B5IHRoZSBmaWxlICdzcmMnIHRvICdkc3QnLgorCisgICAgQm90aCBtdXN0IGJlIGZpbGVuYW1lcy4gQW55IGVycm9yIG9wZW5pbmcgZWl0aGVyIGZpbGUsIHJlYWRpbmcgZnJvbQorICAgICdzcmMnLCBvciB3cml0aW5nIHRvICdkc3QnLCByYWlzZXMgRGlzdHV0aWxzRmlsZUVycm9yLiAgRGF0YSBpcworICAgIHJlYWQvd3JpdHRlbiBpbiBjaHVua3Mgb2YgJ2J1ZmZlcl9zaXplJyBieXRlcyAoZGVmYXVsdCAxNmspLiAgTm8gYXR0ZW1wdAorICAgIGlzIG1hZGUgdG8gaGFuZGxlIGFueXRoaW5nIGFwYXJ0IGZyb20gcmVndWxhciBmaWxlcy4KICAgICAiIiIKICAgICAjIFN0b2xlbiBmcm9tIHNodXRpbCBtb2R1bGUgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIGJ1dCB3aXRoCiAgICAgIyBjdXN0b20gZXJyb3ItaGFuZGxpbmcgYWRkZWQuCi0KICAgICBmc3JjID0gTm9uZQogICAgIGZkc3QgPSBOb25lCiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCiAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAiY291bGQgbm90IG9wZW4gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKQorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpKQogCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgotICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBkZWxldGUgJyVzJzogJXMiICUgKGRzdCwgZXJyc3RyKSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZHN0ID0gb3Blbihkc3QsICd3YicpCiAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKGVycm5vLCBlcnJzdHIpOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlcnJzdHIpCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlcnJzdHIpKQogCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYnVmID0gZnNyYy5yZWFkKGJ1ZmZlcl9zaXplKQogICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yLCAoZXJybm8sIGVycnN0cik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKQorICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHJlYWQgZnJvbSAnJXMnOiAlcyIgJSAoc3JjLCBlcnJzdHIpKQogCiAgICAgICAgICAgICBpZiBub3QgYnVmOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC02Miw4ICs1OSw4IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmRzdC53cml0ZShidWYpCiAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IsIChlcnJubywgZXJyc3RyKToKLSAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGVycnN0cikKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCB3cml0ZSB0byAnJXMnOiAlcyIgJSAoZHN0LCBlcnJzdHIpKQogCiAgICAgZmluYWxseToKICAgICAgICAgaWYgZmRzdDoKQEAgLTcxLDI1ICs2OCwxOCBAQAogICAgICAgICBpZiBmc3JjOgogICAgICAgICAgICAgZnNyYy5jbG9zZSgpCiAKLSMgX2NvcHlfZmlsZV9jb250ZW50cygpCitkZWYgY29weV9maWxlKHNyYywgZHN0LCBwcmVzZXJ2ZV9tb2RlPTEsIHByZXNlcnZlX3RpbWVzPTEsIHVwZGF0ZT0wLAorICAgICAgICAgICAgICBsaW5rPU5vbmUsIHZlcmJvc2U9MSwgZHJ5X3J1bj0wKToKKyAgICAiIiJDb3B5IGEgZmlsZSAnc3JjJyB0byAnZHN0Jy4KIAotZGVmIGNvcHlfZmlsZSAoc3JjLCBkc3QsCi0gICAgICAgICAgICAgICBwcmVzZXJ2ZV9tb2RlPTEsCi0gICAgICAgICAgICAgICBwcmVzZXJ2ZV90aW1lcz0xLAotICAgICAgICAgICAgICAgdXBkYXRlPTAsCi0gICAgICAgICAgICAgICBsaW5rPU5vbmUsCi0gICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICBkcnlfcnVuPTApOgotCi0gICAgIiIiQ29weSBhIGZpbGUgJ3NyYycgdG8gJ2RzdCcuICBJZiAnZHN0JyBpcyBhIGRpcmVjdG9yeSwgdGhlbiAnc3JjJyBpcwotICAgIGNvcGllZCB0aGVyZSB3aXRoIHRoZSBzYW1lIG5hbWU7IG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZpbGVuYW1lLiAgKElmCi0gICAgdGhlIGZpbGUgZXhpc3RzLCBpdCB3aWxsIGJlIHJ1dGhsZXNzbHkgY2xvYmJlcmVkLikgIElmICdwcmVzZXJ2ZV9tb2RlJwotICAgIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlIGZpbGUncyBtb2RlICh0eXBlIGFuZCBwZXJtaXNzaW9uIGJpdHMsIG9yCi0gICAgd2hhdGV2ZXIgaXMgYW5hbG9nb3VzIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtKSBpcyBjb3BpZWQuICBJZgotICAgICdwcmVzZXJ2ZV90aW1lcycgaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgbGFzdC1tb2RpZmllZCBhbmQKLSAgICBsYXN0LWFjY2VzcyB0aW1lcyBhcmUgY29waWVkIGFzIHdlbGwuICBJZiAndXBkYXRlJyBpcyB0cnVlLCAnc3JjJyB3aWxsCi0gICAgb25seSBiZSBjb3BpZWQgaWYgJ2RzdCcgZG9lcyBub3QgZXhpc3QsIG9yIGlmICdkc3QnIGRvZXMgZXhpc3QgYnV0IGlzCi0gICAgb2xkZXIgdGhhbiAnc3JjJy4KKyAgICBJZiAnZHN0JyBpcyBhIGRpcmVjdG9yeSwgdGhlbiAnc3JjJyBpcyBjb3BpZWQgdGhlcmUgd2l0aCB0aGUgc2FtZSBuYW1lOworICAgIG90aGVyd2lzZSwgaXQgbXVzdCBiZSBhIGZpbGVuYW1lLiAgKElmIHRoZSBmaWxlIGV4aXN0cywgaXQgd2lsbCBiZQorICAgIHJ1dGhsZXNzbHkgY2xvYmJlcmVkLikgIElmICdwcmVzZXJ2ZV9tb2RlJyBpcyB0cnVlICh0aGUgZGVmYXVsdCksCisgICAgdGhlIGZpbGUncyBtb2RlICh0eXBlIGFuZCBwZXJtaXNzaW9uIGJpdHMsIG9yIHdoYXRldmVyIGlzIGFuYWxvZ291cyBvbgorICAgIHRoZSBjdXJyZW50IHBsYXRmb3JtKSBpcyBjb3BpZWQuICBJZiAncHJlc2VydmVfdGltZXMnIGlzIHRydWUgKHRoZQorICAgIGRlZmF1bHQpLCB0aGUgbGFzdC1tb2RpZmllZCBhbmQgbGFzdC1hY2Nlc3MgdGltZXMgYXJlIGNvcGllZCBhcyB3ZWxsLgorICAgIElmICd1cGRhdGUnIGlzIHRydWUsICdzcmMnIHdpbGwgb25seSBiZSBjb3BpZWQgaWYgJ2RzdCcgZG9lcyBub3QgZXhpc3QsCisgICAgb3IgaWYgJ2RzdCcgZG9lcyBleGlzdCBidXQgaXMgb2xkZXIgdGhhbiAnc3JjJy4KIAogICAgICdsaW5rJyBhbGxvd3MgeW91IHRvIG1ha2UgaGFyZCBsaW5rcyAob3MubGluaykgb3Igc3ltYm9saWMgbGlua3MKICAgICAob3Muc3ltbGluaykgaW5zdGVhZCBvZiBjb3B5aW5nOiBzZXQgaXQgdG8gImhhcmQiIG9yICJzeW0iOyBpZiBpdCBpcwpAQCAtMTE1LDggKzEwNSw4IEBACiAgICAgZnJvbSBzdGF0IGltcG9ydCBTVF9BVElNRSwgU1RfTVRJTUUsIFNUX01PREUsIFNfSU1PREUKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcmMpOgotICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgImNhbid0IGNvcHkgJyVzJzogZG9lc24ndCBleGlzdCBvciBub3QgYSByZWd1bGFyIGZpbGUiICUgc3JjCisgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKKyAgICAgICAgICAgICAgImNhbid0IGNvcHkgJyVzJzogZG9lc24ndCBleGlzdCBvciBub3QgYSByZWd1bGFyIGZpbGUiICUgc3JjKQogCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkaXIgPSBkc3QKQEAgLTEyNSwzNCArMTE1LDI3IEBACiAgICAgICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShkc3QpCiAKICAgICBpZiB1cGRhdGUgYW5kIG5vdCBuZXdlcihzcmMsIGRzdCk6Ci0gICAgICAgIGxvZy5kZWJ1Zygibm90IGNvcHlpbmcgJXMgKG91dHB1dCB1cC10by1kYXRlKSIsIHNyYykKKyAgICAgICAgaWYgdmVyYm9zZSA+PSAxOgorICAgICAgICAgICAgbG9nLmRlYnVnKCJub3QgY29weWluZyAlcyAob3V0cHV0IHVwLXRvLWRhdGUpIiwgc3JjKQogICAgICAgICByZXR1cm4gZHN0LCAwCiAKICAgICB0cnk6CiAgICAgICAgIGFjdGlvbiA9IF9jb3B5X2FjdGlvbltsaW5rXQogICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZSAnJXMnIGZvciAnbGluaycgYXJndW1lbnQiICUgbGluawotICAgIGlmIG9zLnBhdGguYmFzZW5hbWUoZHN0KSA9PSBvcy5wYXRoLmJhc2VuYW1lKHNyYyk6Ci0gICAgICAgIGxvZy5pbmZvKCIlcyAlcyAtPiAlcyIsIGFjdGlvbiwgc3JjLCBkaXIpCi0gICAgZWxzZToKLSAgICAgICAgbG9nLmluZm8oIiVzICVzIC0+ICVzIiwgYWN0aW9uLCBzcmMsIGRzdCkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB2YWx1ZSAnJXMnIGZvciAnbGluaycgYXJndW1lbnQiICUgbGluaykKKworICAgIGlmIHZlcmJvc2UgPj0gMToKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShkc3QpID09IG9zLnBhdGguYmFzZW5hbWUoc3JjKToKKyAgICAgICAgICAgIGxvZy5pbmZvKCIlcyAlcyAtPiAlcyIsIGFjdGlvbiwgc3JjLCBkaXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuaW5mbygiJXMgJXMgLT4gJXMiLCBhY3Rpb24sIHNyYywgZHN0KQogCiAgICAgaWYgZHJ5X3J1bjoKICAgICAgICAgcmV0dXJuIChkc3QsIDEpCiAKLSAgICAjIE9uIE1hYyBPUywgdXNlIHRoZSBuYXRpdmUgZmlsZSBjb3B5IHJvdXRpbmUKLSAgICBpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICBpbXBvcnQgbWFjb3N0b29scwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWNvc3Rvb2xzLmNvcHkoc3JjLCBkc3QsIDAsIHByZXNlcnZlX3RpbWVzKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IsIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjb3B5ICclcycgdG8gJyVzJzogJXMiICUgKHNyYywgZHN0LCBleGNbLTFdKQotCiAgICAgIyBJZiBsaW5raW5nIChoYXJkIG9yIHN5bWJvbGljKSwgdXNlIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gY2FsbAogICAgICMgKFVuaXggb25seSwgb2YgY291cnNlLCBidXQgdGhhdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSkKLSAgICBlbGlmIGxpbmsgPT0gJ2hhcmQnOgorICAgIGlmIGxpbmsgPT0gJ2hhcmQnOgogICAgICAgICBpZiBub3QgKG9zLnBhdGguZXhpc3RzKGRzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoc3JjLCBkc3QpKToKICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCiAgICAgZWxpZiBsaW5rID09ICdzeW0nOgpAQCAtMTc1LDE3ICsxNTgsMTMgQEAKIAogICAgIHJldHVybiAoZHN0LCAxKQogCi0jIGNvcHlfZmlsZSAoKQotCi0KICMgWFhYIEkgc3VzcGVjdCB0aGlzIGlzIFVuaXgtc3BlY2lmaWMgLS0gbmVlZCBwb3J0aW5nIGhlbHAhCi1kZWYgbW92ZV9maWxlIChzcmMsIGRzdCwKLSAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgIGRyeV9ydW49MCk6CitkZWYgbW92ZV9maWxlIChzcmMsIGRzdCwgdmVyYm9zZT0xLCBkcnlfcnVuPTApOgorICAgICIiIk1vdmUgYSBmaWxlICdzcmMnIHRvICdkc3QnLgogCi0gICAgIiIiTW92ZSBhIGZpbGUgJ3NyYycgdG8gJ2RzdCcuICBJZiAnZHN0JyBpcyBhIGRpcmVjdG9yeSwgdGhlIGZpbGUgd2lsbAotICAgIGJlIG1vdmVkIGludG8gaXQgd2l0aCB0aGUgc2FtZSBuYW1lOyBvdGhlcndpc2UsICdzcmMnIGlzIGp1c3QgcmVuYW1lZAotICAgIHRvICdkc3QnLiAgUmV0dXJuIHRoZSBuZXcgZnVsbCBuYW1lIG9mIHRoZSBmaWxlLgorICAgIElmICdkc3QnIGlzIGEgZGlyZWN0b3J5LCB0aGUgZmlsZSB3aWxsIGJlIG1vdmVkIGludG8gaXQgd2l0aCB0aGUgc2FtZQorICAgIG5hbWU7IG90aGVyd2lzZSwgJ3NyYycgaXMganVzdCByZW5hbWVkIHRvICdkc3QnLiAgUmV0dXJuIHRoZSBuZXcKKyAgICBmdWxsIG5hbWUgb2YgdGhlIGZpbGUuCiAKICAgICBIYW5kbGVzIGNyb3NzLWRldmljZSBtb3ZlcyBvbiBVbml4IHVzaW5nICdjb3B5X2ZpbGUoKScuICBXaGF0IGFib3V0CiAgICAgb3RoZXIgc3lzdGVtcz8/PwpAQCAtMTkzLDI2ICsxNzIsMjYgQEAKICAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGV4aXN0cywgaXNmaWxlLCBpc2RpciwgYmFzZW5hbWUsIGRpcm5hbWUKICAgICBpbXBvcnQgZXJybm8KIAotICAgIGxvZy5pbmZvKCJtb3ZpbmcgJXMgLT4gJXMiLCBzcmMsIGRzdCkKKyAgICBpZiB2ZXJib3NlID49IDE6CisgICAgICAgIGxvZy5pbmZvKCJtb3ZpbmcgJXMgLT4gJXMiLCBzcmMsIGRzdCkKIAogICAgIGlmIGRyeV9ydW46CiAgICAgICAgIHJldHVybiBkc3QKIAogICAgIGlmIG5vdCBpc2ZpbGUoc3JjKToKLSAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yLCBcCi0gICAgICAgICAgICAgICJjYW4ndCBtb3ZlICclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSIgJSBzcmMKKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjYW4ndCBtb3ZlICclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSIgJSBzcmMpCiAKICAgICBpZiBpc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBiYXNlbmFtZShzcmMpKQogICAgIGVsaWYgZXhpc3RzKGRzdCk6Ci0gICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvciwgXAotICAgICAgICAgICAgICAiY2FuJ3QgbW92ZSAnJXMnOiBkZXN0aW5hdGlvbiAnJXMnIGFscmVhZHkgZXhpc3RzIiAlIFwKLSAgICAgICAgICAgICAgKHNyYywgZHN0KQorICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICJjYW4ndCBtb3ZlICclcyc6IGRlc3RpbmF0aW9uICclcycgYWxyZWFkeSBleGlzdHMiICUKKyAgICAgICAgICAgICAgKHNyYywgZHN0KSkKIAogICAgIGlmIG5vdCBpc2RpcihkaXJuYW1lKGRzdCkpOgotICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAiY2FuJ3QgbW92ZSAnJXMnOiBkZXN0aW5hdGlvbiAnJXMnIG5vdCBhIHZhbGlkIHBhdGgiICUgXAotICAgICAgICAgICAgICAoc3JjLCBkc3QpCisgICAgICAgICAgICAgIChzcmMsIGRzdCkpCiAKICAgICBjb3B5X2l0ID0gMAogICAgIHRyeToKQEAgLTIyMSwxMSArMjAwLDExIEBACiAgICAgICAgIGlmIG51bSA9PSBlcnJuby5FWERFVjoKICAgICAgICAgICAgIGNvcHlfaXQgPSAxCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBtb3ZlICclcycgdG8gJyVzJzogJXMiICUgKHNyYywgZHN0LCBtc2cpCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCisgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbW92ZSAnJXMnIHRvICclcyc6ICVzIiAlIChzcmMsIGRzdCwgbXNnKSkKIAogICAgIGlmIGNvcHlfaXQ6Ci0gICAgICAgIGNvcHlfZmlsZShzcmMsIGRzdCkKKyAgICAgICAgY29weV9maWxlKHNyYywgZHN0LCB2ZXJib3NlPXZlcmJvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCiAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciwgKG51bSwgbXNnKToKQEAgLTIzMywyMSArMjEyLDIwIEBACiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGRzdCkKICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IsIFwKKyAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICgiY291bGRuJ3QgbW92ZSAnJXMnIHRvICclcycgYnkgY29weS9kZWxldGU6ICIgKwotICAgICAgICAgICAgICAgICAgICJkZWxldGUgJyVzJyBmYWlsZWQ6ICVzIikgJSBcCi0gICAgICAgICAgICAgICAgICAoc3JjLCBkc3QsIHNyYywgbXNnKQotCisgICAgICAgICAgICAgICAgICAgImRlbGV0ZSAnJXMnIGZhaWxlZDogJXMiKSAlCisgICAgICAgICAgICAgICAgICAoc3JjLCBkc3QsIHNyYywgbXNnKSkKICAgICByZXR1cm4gZHN0CiAKLSMgbW92ZV9maWxlICgpCi0KIAogZGVmIHdyaXRlX2ZpbGUgKGZpbGVuYW1lLCBjb250ZW50cyk6CiAgICAgIiIiQ3JlYXRlIGEgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgd3JpdGUgJ2NvbnRlbnRzJyAoYQogICAgIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2l0aG91dCBsaW5lIHRlcm1pbmF0b3JzKSB0byBpdC4KICAgICAiIiIKICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgIGZvciBsaW5lIGluIGNvbnRlbnRzOgotICAgICAgICBmLndyaXRlKGxpbmUgKyAiXG4iKQotICAgIGYuY2xvc2UoKQorICAgIHRyeToKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudHM6CisgICAgICAgICAgICBmLndyaXRlKGxpbmUgKyAiXG4iKQorICAgIGZpbmFsbHk6CisgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlbGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZmlsZWxpc3QucHkKaW5kZXggNDQ0OGQ1Yy4uNGFhYzZkMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9maWxlbGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVsaXN0LnB5CkBAIC00LDE5ICs0LDE1IEBACiBhbmQgYnVpbGRpbmcgbGlzdHMgb2YgZmlsZXMuCiAiIiIKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBvcywgc3RyaW5nLCByZQoraW1wb3J0IG9zLCByZQogaW1wb3J0IGZubWF0Y2gKLWZyb20gdHlwZXMgaW1wb3J0ICoKIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNvbnZlcnRfcGF0aAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNUZW1wbGF0ZUVycm9yLCBEaXN0dXRpbHNJbnRlcm5hbEVycm9yCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKIGNsYXNzIEZpbGVMaXN0OgotCiAgICAgIiIiQSBsaXN0IG9mIGZpbGVzIGJ1aWx0IGJ5IG9uIGV4cGxvcmluZyB0aGUgZmlsZXN5c3RlbSBhbmQgZmlsdGVyZWQgYnkKICAgICBhcHBseWluZyB2YXJpb3VzIHBhdHRlcm5zIHRvIHdoYXQgd2UgZmluZCB0aGVyZS4KIApAQCAtMzEsMjIgKzI3LDE5IEBACiAgICAgICAgIGZpbHRlcmluZyBhcHBsaWVkKQogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsCi0gICAgICAgICAgICAgICAgIHdhcm49Tm9uZSwKLSAgICAgICAgICAgICAgICAgZGVidWdfcHJpbnQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhcm49Tm9uZSwgZGVidWdfcHJpbnQ9Tm9uZSk6CiAgICAgICAgICMgaWdub3JlIGFyZ3VtZW50IHRvIEZpbGVMaXN0LCBidXQga2VlcCB0aGVtIGZvciBiYWNrd2FyZHMKICAgICAgICAgIyBjb21wYXRpYmlsaXR5Ci0KICAgICAgICAgc2VsZi5hbGxmaWxlcyA9IE5vbmUKICAgICAgICAgc2VsZi5maWxlcyA9IFtdCiAKLSAgICBkZWYgc2V0X2FsbGZpbGVzIChzZWxmLCBhbGxmaWxlcyk6CisgICAgZGVmIHNldF9hbGxmaWxlcyhzZWxmLCBhbGxmaWxlcyk6CiAgICAgICAgIHNlbGYuYWxsZmlsZXMgPSBhbGxmaWxlcwogCi0gICAgZGVmIGZpbmRhbGwgKHNlbGYsIGRpcj1vcy5jdXJkaXIpOgorICAgIGRlZiBmaW5kYWxsKHNlbGYsIGRpcj1vcy5jdXJkaXIpOgogICAgICAgICBzZWxmLmFsbGZpbGVzID0gZmluZGFsbChkaXIpCiAKLSAgICBkZWYgZGVidWdfcHJpbnQgKHNlbGYsIG1zZyk6CisgICAgZGVmIGRlYnVnX3ByaW50KHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlByaW50ICdtc2cnIHRvIHN0ZG91dCBpZiB0aGUgZ2xvYmFsIERFQlVHICh0YWtlbiBmcm9tIHRoZQogICAgICAgICBESVNUVVRJTFNfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUpIGZsYWcgaXMgdHJ1ZS4KICAgICAgICAgIiIiCkBAIC01NiwxMyArNDksMTMgQEAKIAogICAgICMgLS0gTGlzdC1saWtlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgYXBwZW5kIChzZWxmLCBpdGVtKToKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGl0ZW0pOgogICAgICAgICBzZWxmLmZpbGVzLmFwcGVuZChpdGVtKQogCi0gICAgZGVmIGV4dGVuZCAoc2VsZiwgaXRlbXMpOgorICAgIGRlZiBleHRlbmQoc2VsZiwgaXRlbXMpOgogICAgICAgICBzZWxmLmZpbGVzLmV4dGVuZChpdGVtcykKIAotICAgIGRlZiBzb3J0IChzZWxmKToKKyAgICBkZWYgc29ydChzZWxmKToKICAgICAgICAgIyBOb3QgYSBzdHJpY3QgbGV4aWNhbCBzb3J0IQogICAgICAgICBzb3J0YWJsZV9maWxlcyA9IG1hcChvcy5wYXRoLnNwbGl0LCBzZWxmLmZpbGVzKQogICAgICAgICBzb3J0YWJsZV9maWxlcy5zb3J0KCkKQEAgLTczLDcgKzY2LDcgQEAKIAogICAgICMgLS0gT3RoZXIgbWlzY2VsbGFuZW91cyB1dGlsaXR5IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgcmVtb3ZlX2R1cGxpY2F0ZXMgKHNlbGYpOgorICAgIGRlZiByZW1vdmVfZHVwbGljYXRlcyhzZWxmKToKICAgICAgICAgIyBBc3N1bWVzIGxpc3QgaGFzIGJlZW4gc29ydGVkIQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5maWxlcykgLSAxLCAwLCAtMSk6CiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVzW2ldID09IHNlbGYuZmlsZXNbaSAtIDFdOgpAQCAtODIsOCArNzUsOCBAQAogCiAgICAgIyAtLSAiRmlsZSB0ZW1wbGF0ZSIgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBfcGFyc2VfdGVtcGxhdGVfbGluZSAoc2VsZiwgbGluZSk6Ci0gICAgICAgIHdvcmRzID0gc3RyaW5nLnNwbGl0KGxpbmUpCisgICAgZGVmIF9wYXJzZV90ZW1wbGF0ZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICB3b3JkcyA9IGxpbmUuc3BsaXQoKQogICAgICAgICBhY3Rpb24gPSB3b3Jkc1swXQogCiAgICAgICAgIHBhdHRlcm5zID0gZGlyID0gZGlyX3BhdHRlcm4gPSBOb25lCkBAIC0xMTYsNDQgKzEwOSw0MCBAQAogCiAgICAgICAgIHJldHVybiAoYWN0aW9uLCBwYXR0ZXJucywgZGlyLCBkaXJfcGF0dGVybikKIAotICAgICMgX3BhcnNlX3RlbXBsYXRlX2xpbmUgKCkKLQotCi0gICAgZGVmIHByb2Nlc3NfdGVtcGxhdGVfbGluZSAoc2VsZiwgbGluZSk6Ci0KKyAgICBkZWYgcHJvY2Vzc190ZW1wbGF0ZV9saW5lKHNlbGYsIGxpbmUpOgogICAgICAgICAjIFBhcnNlIHRoZSBsaW5lOiBzcGxpdCBpdCB1cCwgbWFrZSBzdXJlIHRoZSByaWdodCBudW1iZXIgb2Ygd29yZHMKICAgICAgICAgIyBpcyB0aGVyZSwgYW5kIHJldHVybiB0aGUgcmVsZXZhbnQgd29yZHMuICAnYWN0aW9uJyBpcyBhbHdheXMKICAgICAgICAgIyBkZWZpbmVkOiBpdCdzIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lLiAgV2hpY2ggb2YgdGhlIG90aGVyCiAgICAgICAgICMgdGhyZWUgYXJlIGRlZmluZWQgZGVwZW5kcyBvbiB0aGUgYWN0aW9uOyBpdCdsbCBiZSBlaXRoZXIKICAgICAgICAgIyBwYXR0ZXJucywgKGRpciBhbmQgcGF0dGVybnMpLCBvciAoZGlyX3BhdHRlcm4pLgotICAgICAgICAoYWN0aW9uLCBwYXR0ZXJucywgZGlyLCBkaXJfcGF0dGVybikgPSBzZWxmLl9wYXJzZV90ZW1wbGF0ZV9saW5lKGxpbmUpCisgICAgICAgIGFjdGlvbiwgcGF0dGVybnMsIGRpciwgZGlyX3BhdHRlcm4gPSBzZWxmLl9wYXJzZV90ZW1wbGF0ZV9saW5lKGxpbmUpCiAKICAgICAgICAgIyBPSywgbm93IHdlIGtub3cgdGhhdCB0aGUgYWN0aW9uIGlzIHZhbGlkIGFuZCB3ZSBoYXZlIHRoZQogICAgICAgICAjIHJpZ2h0IG51bWJlciBvZiB3b3JkcyBvbiB0aGUgbGluZSBmb3IgdGhhdCBhY3Rpb24gLS0gc28gd2UKICAgICAgICAgIyBjYW4gcHJvY2VlZCB3aXRoIG1pbmltYWwgZXJyb3ItY2hlY2tpbmcuCiAgICAgICAgIGlmIGFjdGlvbiA9PSAnaW5jbHVkZSc6Ci0gICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJpbmNsdWRlICIgKyBzdHJpbmcuam9pbihwYXR0ZXJucykpCisgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJpbmNsdWRlICIgKyAnICcuam9pbihwYXR0ZXJucykpCiAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbmNsdWRlX3BhdHRlcm4ocGF0dGVybiwgYW5jaG9yPTEpOgogICAgICAgICAgICAgICAgICAgICBsb2cud2Fybigid2FybmluZzogbm8gZmlsZXMgZm91bmQgbWF0Y2hpbmcgJyVzJyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4pCiAKICAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ2V4Y2x1ZGUnOgotICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiZXhjbHVkZSAiICsgc3RyaW5nLmpvaW4ocGF0dGVybnMpKQorICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiZXhjbHVkZSAiICsgJyAnLmpvaW4ocGF0dGVybnMpKQogICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZXhjbHVkZV9wYXR0ZXJuKHBhdHRlcm4sIGFuY2hvcj0xKToKICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oKCJ3YXJuaW5nOiBubyBwcmV2aW91c2x5LWluY2x1ZGVkIGZpbGVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCBtYXRjaGluZyAnJXMnIiksIHBhdHRlcm4pCiAKICAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ2dsb2JhbC1pbmNsdWRlJzoKLSAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoImdsb2JhbC1pbmNsdWRlICIgKyBzdHJpbmcuam9pbihwYXR0ZXJucykpCisgICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJnbG9iYWwtaW5jbHVkZSAiICsgJyAnLmpvaW4ocGF0dGVybnMpKQogICAgICAgICAgICAgZm9yIHBhdHRlcm4gaW4gcGF0dGVybnM6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaW5jbHVkZV9wYXR0ZXJuKHBhdHRlcm4sIGFuY2hvcj0wKToKICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oKCJ3YXJuaW5nOiBubyBmaWxlcyBmb3VuZCBtYXRjaGluZyAnJXMnICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFueXdoZXJlIGluIGRpc3RyaWJ1dGlvbiIpLCBwYXR0ZXJuKQogCiAgICAgICAgIGVsaWYgYWN0aW9uID09ICdnbG9iYWwtZXhjbHVkZSc6Ci0gICAgICAgICAgICBzZWxmLmRlYnVnX3ByaW50KCJnbG9iYWwtZXhjbHVkZSAiICsgc3RyaW5nLmpvaW4ocGF0dGVybnMpKQorICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiZ2xvYmFsLWV4Y2x1ZGUgIiArICcgJy5qb2luKHBhdHRlcm5zKSkKICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmV4Y2x1ZGVfcGF0dGVybihwYXR0ZXJuLCBhbmNob3I9MCk6CiAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCgid2FybmluZzogbm8gcHJldmlvdXNseS1pbmNsdWRlZCBmaWxlcyBtYXRjaGluZyAiCkBAIC0xNjIsNyArMTUxLDcgQEAKIAogICAgICAgICBlbGlmIGFjdGlvbiA9PSAncmVjdXJzaXZlLWluY2x1ZGUnOgogICAgICAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgicmVjdXJzaXZlLWluY2x1ZGUgJXMgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpciwgc3RyaW5nLmpvaW4ocGF0dGVybnMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpciwgJyAnLmpvaW4ocGF0dGVybnMpKSkKICAgICAgICAgICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmluY2x1ZGVfcGF0dGVybihwYXR0ZXJuLCBwcmVmaXg9ZGlyKToKICAgICAgICAgICAgICAgICAgICAgbG9nLndhcm4oKCJ3YXJuaW5nOiBubyBmaWxlcyBmb3VuZCBtYXRjaGluZyAnJXMnICIgKwpAQCAtMTcxLDcgKzE2MCw3IEBACiAKICAgICAgICAgZWxpZiBhY3Rpb24gPT0gJ3JlY3Vyc2l2ZS1leGNsdWRlJzoKICAgICAgICAgICAgIHNlbGYuZGVidWdfcHJpbnQoInJlY3Vyc2l2ZS1leGNsdWRlICVzICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXIsIHN0cmluZy5qb2luKHBhdHRlcm5zKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXIsICcgJy5qb2luKHBhdHRlcm5zKSkpCiAgICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJuczoKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5leGNsdWRlX3BhdHRlcm4ocGF0dGVybiwgcHJlZml4PWRpcik6CiAgICAgICAgICAgICAgICAgICAgIGxvZy53YXJuKCgid2FybmluZzogbm8gcHJldmlvdXNseS1pbmNsdWRlZCBmaWxlcyBtYXRjaGluZyAiCkBAIC0xOTMsMTggKzE4MiwxNSBAQAogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzSW50ZXJuYWxFcnJvciwgXAogICAgICAgICAgICAgICAgICAgInRoaXMgY2Fubm90IGhhcHBlbjogaW52YWxpZCBhY3Rpb24gJyVzJyIgJSBhY3Rpb24KIAotICAgICMgcHJvY2Vzc190ZW1wbGF0ZV9saW5lICgpCi0KLQogICAgICMgLS0gRmlsdGVyaW5nL3NlbGVjdGlvbiBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBkZWYgaW5jbHVkZV9wYXR0ZXJuIChzZWxmLCBwYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj0xLCBwcmVmaXg9Tm9uZSwgaXNfcmVnZXg9MCk6CisgICAgZGVmIGluY2x1ZGVfcGF0dGVybihzZWxmLCBwYXR0ZXJuLCBhbmNob3I9MSwgcHJlZml4PU5vbmUsIGlzX3JlZ2V4PTApOgogICAgICAgICAiIiJTZWxlY3Qgc3RyaW5ncyAocHJlc3VtYWJseSBmaWxlbmFtZXMpIGZyb20gJ3NlbGYuZmlsZXMnIHRoYXQKLSAgICAgICAgbWF0Y2ggJ3BhdHRlcm4nLCBhIFVuaXgtc3R5bGUgd2lsZGNhcmQgKGdsb2IpIHBhdHRlcm4uICBQYXR0ZXJucwotICAgICAgICBhcmUgbm90IHF1aXRlIHRoZSBzYW1lIGFzIGltcGxlbWVudGVkIGJ5IHRoZSAnZm5tYXRjaCcgbW9kdWxlOiAnKicKLSAgICAgICAgYW5kICc/JyAgbWF0Y2ggbm9uLXNwZWNpYWwgY2hhcmFjdGVycywgd2hlcmUgInNwZWNpYWwiIGlzIHBsYXRmb3JtLQotICAgICAgICBkZXBlbmRlbnQ6IHNsYXNoIG9uIFVuaXg7IGNvbG9uLCBzbGFzaCwgYW5kIGJhY2tzbGFzaCBvbgorICAgICAgICBtYXRjaCAncGF0dGVybicsIGEgVW5peC1zdHlsZSB3aWxkY2FyZCAoZ2xvYikgcGF0dGVybi4KKworICAgICAgICBQYXR0ZXJucyBhcmUgbm90IHF1aXRlIHRoZSBzYW1lIGFzIGltcGxlbWVudGVkIGJ5IHRoZSAnZm5tYXRjaCcKKyAgICAgICAgbW9kdWxlOiAnKicgYW5kICc/JyAgbWF0Y2ggbm9uLXNwZWNpYWwgY2hhcmFjdGVycywgd2hlcmUgInNwZWNpYWwiCisgICAgICAgIGlzIHBsYXRmb3JtLWRlcGVuZGVudDogc2xhc2ggb24gVW5peDsgY29sb24sIHNsYXNoLCBhbmQgYmFja3NsYXNoIG9uCiAgICAgICAgIERPUy9XaW5kb3dzOyBhbmQgY29sb24gb24gTWFjIE9TLgogCiAgICAgICAgIElmICdhbmNob3InIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlbiB0aGUgcGF0dGVybiBtYXRjaCBpcyBtb3JlCkBAIC0yNDEsMTYgKzIyNywxNCBAQAogCiAgICAgICAgIHJldHVybiBmaWxlc19mb3VuZAogCi0gICAgIyBpbmNsdWRlX3BhdHRlcm4gKCkKIAotCi0gICAgZGVmIGV4Y2x1ZGVfcGF0dGVybiAoc2VsZiwgcGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I9MSwgcHJlZml4PU5vbmUsIGlzX3JlZ2V4PTApOgorICAgIGRlZiBleGNsdWRlX3BhdHRlcm4oc2VsZiwgcGF0dGVybiwgYW5jaG9yPTEsIHByZWZpeD1Ob25lLCBpc19yZWdleD0wKToKICAgICAgICAgIiIiUmVtb3ZlIHN0cmluZ3MgKHByZXN1bWFibHkgZmlsZW5hbWVzKSBmcm9tICdmaWxlcycgdGhhdCBtYXRjaAotICAgICAgICAncGF0dGVybicuICBPdGhlciBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyBmb3IKLSAgICAgICAgJ2luY2x1ZGVfcGF0dGVybigpJywgYWJvdmUuCi0gICAgICAgIFRoZSBsaXN0ICdzZWxmLmZpbGVzJyBpcyBtb2RpZmllZCBpbiBwbGFjZS4KLSAgICAgICAgUmV0dXJuIDEgaWYgZmlsZXMgYXJlIGZvdW5kLgorICAgICAgICAncGF0dGVybicuCisKKyAgICAgICAgT3RoZXIgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgZm9yICdpbmNsdWRlX3BhdHRlcm4oKScsIGFib3ZlLgorICAgICAgICBUaGUgbGlzdCAnc2VsZi5maWxlcycgaXMgbW9kaWZpZWQgaW4gcGxhY2UuIFJldHVybiAxIGlmIGZpbGVzIGFyZQorICAgICAgICBmb3VuZC4KICAgICAgICAgIiIiCiAgICAgICAgIGZpbGVzX2ZvdW5kID0gMAogICAgICAgICBwYXR0ZXJuX3JlID0gdHJhbnNsYXRlX3BhdHRlcm4ocGF0dGVybiwgYW5jaG9yLCBwcmVmaXgsIGlzX3JlZ2V4KQpAQCAtMjY0LDE1ICsyNDgsMTEgQEAKIAogICAgICAgICByZXR1cm4gZmlsZXNfZm91bmQKIAotICAgICMgZXhjbHVkZV9wYXR0ZXJuICgpCi0KLSMgY2xhc3MgRmlsZUxpc3QKLQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0eSBmdW5jdGlvbnMKIAotZGVmIGZpbmRhbGwgKGRpciA9IG9zLmN1cmRpcik6CitkZWYgZmluZGFsbChkaXIgPSBvcy5jdXJkaXIpOgogICAgICIiIkZpbmQgYWxsIGZpbGVzIHVuZGVyICdkaXInIGFuZCByZXR1cm4gdGhlIGxpc3Qgb2YgZnVsbCBmaWxlbmFtZXMKICAgICAocmVsYXRpdmUgdG8gJ2RpcicpLgogICAgICIiIgpAQCAtMzA1LDEwICsyODUsMTEgQEAKIAogCiBkZWYgZ2xvYl90b19yZShwYXR0ZXJuKToKLSAgICAiIiJUcmFuc2xhdGUgYSBzaGVsbC1saWtlIGdsb2IgcGF0dGVybiB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbjsgcmV0dXJuCi0gICAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVnZXguICBEaWZmZXJzIGZyb20gJ2ZubWF0Y2gudHJhbnNsYXRlKCknIGluCi0gICAgdGhhdCAnKicgZG9lcyBub3QgbWF0Y2ggInNwZWNpYWwgY2hhcmFjdGVycyIgKHdoaWNoIGFyZQotICAgIHBsYXRmb3JtLXNwZWNpZmljKS4KKyAgICAiIiJUcmFuc2xhdGUgYSBzaGVsbC1saWtlIGdsb2IgcGF0dGVybiB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKworICAgIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSByZWdleC4gIERpZmZlcnMgZnJvbQorICAgICdmbm1hdGNoLnRyYW5zbGF0ZSgpJyBpbiB0aGF0ICcqJyBkb2VzIG5vdCBtYXRjaCAic3BlY2lhbCBjaGFyYWN0ZXJzIgorICAgICh3aGljaCBhcmUgcGxhdGZvcm0tc3BlY2lmaWMpLgogICAgICIiIgogICAgIHBhdHRlcm5fcmUgPSBmbm1hdGNoLnRyYW5zbGF0ZShwYXR0ZXJuKQogCkBAIC0zMjMsMTcgKzMwNCwxNyBAQAogCiAgICAgcmV0dXJuIHBhdHRlcm5fcmUKIAotIyBnbG9iX3RvX3JlICgpCiAKLQotZGVmIHRyYW5zbGF0ZV9wYXR0ZXJuIChwYXR0ZXJuLCBhbmNob3I9MSwgcHJlZml4PU5vbmUsIGlzX3JlZ2V4PTApOgorZGVmIHRyYW5zbGF0ZV9wYXR0ZXJuKHBhdHRlcm4sIGFuY2hvcj0xLCBwcmVmaXg9Tm9uZSwgaXNfcmVnZXg9MCk6CiAgICAgIiIiVHJhbnNsYXRlIGEgc2hlbGwtbGlrZSB3aWxkY2FyZCBwYXR0ZXJuIHRvIGEgY29tcGlsZWQgcmVndWxhcgotICAgIGV4cHJlc3Npb24uICBSZXR1cm4gdGhlIGNvbXBpbGVkIHJlZ2V4LiAgSWYgJ2lzX3JlZ2V4JyB0cnVlLAorICAgIGV4cHJlc3Npb24uCisKKyAgICBSZXR1cm4gdGhlIGNvbXBpbGVkIHJlZ2V4LiAgSWYgJ2lzX3JlZ2V4JyB0cnVlLAogICAgIHRoZW4gJ3BhdHRlcm4nIGlzIGRpcmVjdGx5IGNvbXBpbGVkIHRvIGEgcmVnZXggKGlmIGl0J3MgYSBzdHJpbmcpCiAgICAgb3IganVzdCByZXR1cm5lZCBhcy1pcyAoYXNzdW1lcyBpdCdzIGEgcmVnZXggb2JqZWN0KS4KICAgICAiIiIKICAgICBpZiBpc19yZWdleDoKLSAgICAgICAgaWYgdHlwZShwYXR0ZXJuKSBpcyBTdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm4sIHN0cik6CiAgICAgICAgICAgICByZXR1cm4gcmUuY29tcGlsZShwYXR0ZXJuKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm4KQEAgLTM0NiwxMiArMzI3LDEwIEBACiAgICAgaWYgcHJlZml4IGlzIG5vdCBOb25lOgogICAgICAgICAjIGRpdGNoIGVuZCBvZiBwYXR0ZXJuIGNoYXJhY3RlcgogICAgICAgICBlbXB0eV9wYXR0ZXJuID0gZ2xvYl90b19yZSgnJykKLSAgICAgICAgcHJlZml4X3JlID0gKGdsb2JfdG9fcmUocHJlZml4KSlbOi1sZW4oZW1wdHlfcGF0dGVybildCisgICAgICAgIHByZWZpeF9yZSA9IGdsb2JfdG9fcmUocHJlZml4KVs6LWxlbihlbXB0eV9wYXR0ZXJuKV0KICAgICAgICAgcGF0dGVybl9yZSA9ICJeIiArIG9zLnBhdGguam9pbihwcmVmaXhfcmUsICIuKiIgKyBwYXR0ZXJuX3JlKQogICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gcHJlZml4IC0tIHJlc3BlY3QgYW5jaG9yIGZsYWcKICAgICAgICAgaWYgYW5jaG9yOgogICAgICAgICAgICAgcGF0dGVybl9yZSA9ICJeIiArIHBhdHRlcm5fcmUKIAogICAgIHJldHVybiByZS5jb21waWxlKHBhdHRlcm5fcmUpCi0KLSMgdHJhbnNsYXRlX3BhdHRlcm4gKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvbG9nLnB5IGIvTGliL2Rpc3R1dGlscy9sb2cucHkKaW5kZXggOTVkNGMxYy4uNzU4ODU3MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9sb2cucHkKKysrIGIvTGliL2Rpc3R1dGlscy9sb2cucHkKQEAgLTEsNyArMSw1IEBACiAiIiJBIHNpbXBsZSBsb2cgbWVjaGFuaXNtIHN0eWxlZCBhZnRlciBQRVAgMjgyLiIiIgogCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCiAjIFRoZSBjbGFzcyBoZXJlIGlzIHN0eWxlZCBhZnRlciBQRVAgMjgyIHNvIHRoYXQgaXQgY291bGQgbGF0ZXIgYmUKICMgcmVwbGFjZWQgd2l0aCBhIHN0YW5kYXJkIFB5dGhvbiBsb2dnaW5nIGltcGxlbWVudGF0aW9uLgogCkBAIC0xOSwxNCArMTcsMTggQEAKICAgICAgICAgc2VsZi50aHJlc2hvbGQgPSB0aHJlc2hvbGQKIAogICAgIGRlZiBfbG9nKHNlbGYsIGxldmVsLCBtc2csIGFyZ3MpOgorICAgICAgICBpZiBsZXZlbCBub3QgaW4gKERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgd3JvbmcgbG9nIGxldmVsJyAlIHN0cihsZXZlbCkpCisKICAgICAgICAgaWYgbGV2ZWwgPj0gc2VsZi50aHJlc2hvbGQ6Ci0gICAgICAgICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgICAgICAjIG1zZyBtYXkgY29udGFpbiBhICclJy4gSWYgYXJncyBpcyBlbXB0eSwKLSAgICAgICAgICAgICAgICAjIGRvbid0IGV2ZW4gdHJ5IHRvIHN0cmluZy1mb3JtYXQKLSAgICAgICAgICAgICAgICBwcmludCBtc2cKKyAgICAgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAgICAgbXNnID0gbXNnICUgYXJncworICAgICAgICAgICAgaWYgbGV2ZWwgaW4gKFdBUk4sIEVSUk9SLCBGQVRBTCk6CisgICAgICAgICAgICAgICAgc3RyZWFtID0gc3lzLnN0ZGVycgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCBtc2cgJSBhcmdzCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJyVzXG4nICUgbXNnKQorICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkKIAogICAgIGRlZiBsb2coc2VsZiwgbGV2ZWwsIG1zZywgKmFyZ3MpOgogICAgICAgICBzZWxmLl9sb2cobGV2ZWwsIG1zZywgYXJncykKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQppbmRleCA5ZmU4Yzc0Li5iZjg1YWM3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CkBAIC0xOCwxMCArMTgsMTAgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKKwogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAotICAgIENvbXBpbGVFcnJvciwgTGliRXJyb3IsIExpbmtFcnJvcikKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgKENDb21waWxlciwgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywKLSAgICBnZW5fbGliX29wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlRXJyb3IsIExpYkVycm9yLCBMaW5rRXJyb3IpCitmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IENDb21waWxlciwgZ2VuX2xpYl9vcHRpb25zCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIApAQCAtNDMsMTAgKzQzLDEyIEBACiAgICAgIyB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RyeSBicmFuY2gsIGlmIHdlJ3JlIHJ1bm5pbmcgYQogICAgICMgNjQtYml0IFB5dGhvbiBvbiBXaW42NAogICAgIFZTX0JBU0UgPSByIlNvZnR3YXJlXFdvdzY0MzJOb2RlXE1pY3Jvc29mdFxWaXN1YWxTdHVkaW9cJTAuMWYiCisgICAgVlNFWFBSRVNTX0JBU0UgPSByIlNvZnR3YXJlXFdvdzY0MzJOb2RlXE1pY3Jvc29mdFxWQ0V4cHJlc3NcJTAuMWYiCiAgICAgV0lOU0RLX0JBU0UgPSByIlNvZnR3YXJlXFdvdzY0MzJOb2RlXE1pY3Jvc29mdFxNaWNyb3NvZnQgU0RLc1xXaW5kb3dzIgogICAgIE5FVF9CQVNFID0gciJTb2Z0d2FyZVxXb3c2NDMyTm9kZVxNaWNyb3NvZnRcLk5FVEZyYW1ld29yayIKIGVsc2U6CiAgICAgVlNfQkFTRSA9IHIiU29mdHdhcmVcTWljcm9zb2Z0XFZpc3VhbFN0dWRpb1wlMC4xZiIKKyAgICBWU0VYUFJFU1NfQkFTRSA9IHIiU29mdHdhcmVcTWljcm9zb2Z0XFZDRXhwcmVzc1wlMC4xZiIKICAgICBXSU5TREtfQkFTRSA9IHIiU29mdHdhcmVcTWljcm9zb2Z0XE1pY3Jvc29mdCBTREtzXFdpbmRvd3MiCiAgICAgTkVUX0JBU0UgPSByIlNvZnR3YXJlXE1pY3Jvc29mdFwuTkVURnJhbWV3b3JrIgogCkBAIC02MywxNSArNjUsMTQgQEAKICAgICAiIiJIZWxwZXIgY2xhc3MgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUgcmVnaXN0cnkKICAgICAiIiIKIAotICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBnZXRfdmFsdWUoY2xzLCBwYXRoLCBrZXkpOgogICAgICAgICBmb3IgYmFzZSBpbiBIS0VZUzoKICAgICAgICAgICAgIGQgPSBjbHMucmVhZF92YWx1ZXMoYmFzZSwgcGF0aCkKICAgICAgICAgICAgIGlmIGQgYW5kIGtleSBpbiBkOgogICAgICAgICAgICAgICAgIHJldHVybiBkW2tleV0KICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgIGdldF92YWx1ZSA9IGNsYXNzbWV0aG9kKGdldF92YWx1ZSkKIAotICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiByZWFkX2tleXMoY2xzLCBiYXNlLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gbGlzdCBvZiByZWdpc3RyeSBrZXlzLiIiIgogICAgICAgICB0cnk6CkBAIC04OCw4ICs4OSw4IEBACiAgICAgICAgICAgICBMLmFwcGVuZChrKQogICAgICAgICAgICAgaSArPSAxCiAgICAgICAgIHJldHVybiBMCisgICAgcmVhZF9rZXlzID0gY2xhc3NtZXRob2QocmVhZF9rZXlzKQogCi0gICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHJlYWRfdmFsdWVzKGNscywgYmFzZSwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGRpY3Qgb2YgcmVnaXN0cnkga2V5cyBhbmQgdmFsdWVzLgogCkBAIC0xMTAsOCArMTExLDggQEAKICAgICAgICAgICAgIGRbY2xzLmNvbnZlcnRfbWJjcyhuYW1lKV0gPSBjbHMuY29udmVydF9tYmNzKHZhbHVlKQogICAgICAgICAgICAgaSArPSAxCiAgICAgICAgIHJldHVybiBkCisgICAgcmVhZF92YWx1ZXMgPSBjbGFzc21ldGhvZChyZWFkX3ZhbHVlcykKIAotICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY29udmVydF9tYmNzKHMpOgogICAgICAgICBkZWMgPSBnZXRhdHRyKHMsICJkZWNvZGUiLCBOb25lKQogICAgICAgICBpZiBkZWMgaXMgbm90IE5vbmU6CkBAIC0xMjAsNiArMTIxLDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gcworICAgIGNvbnZlcnRfbWJjcyA9IHN0YXRpY21ldGhvZChjb252ZXJ0X21iY3MpCiAKIGNsYXNzIE1hY3JvRXhwYW5kZXI6CiAKQEAgLTE0MSw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZGtpbnN0YWxscm9vdHYyLjAiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigic2RraW5zdGFsbHJvb3R2Mi4wIikKLSAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGV4YzogIworICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgIiIiUHl0aG9uIHdhcyBidWlsdCB3aXRoIFZpc3VhbCBTdHVkaW8gMjAwODsKIGV4dGVuc2lvbnMgbXVzdCBiZSBidWlsdCB3aXRoIGEgY29tcGlsZXIgdGhhbiBjYW4gZ2VuZXJhdGUgY29tcGF0aWJsZSBiaW5hcmllcy4KQEAgLTIyNSw5ICsyMjcsMTggQEAKICAgICAgICAgcHJvZHVjdGRpciA9IFJlZy5nZXRfdmFsdWUociIlc1xTZXR1cFxWQyIgJSB2c2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9kdWN0ZGlyIikKICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIGxvZy5kZWJ1ZygiVW5hYmxlIHRvIGZpbmQgcHJvZHVjdGRpciBpbiByZWdpc3RyeSIpCiAgICAgICAgIHByb2R1Y3RkaXIgPSBOb25lCiAKKyAgICAjIHRyeWluZyBFeHByZXNzIGVkaXRpb24KKyAgICBpZiBwcm9kdWN0ZGlyIGlzIE5vbmU6CisgICAgICAgIHZzYmFzZSA9IFZTRVhQUkVTU19CQVNFICUgdmVyc2lvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9kdWN0ZGlyID0gUmVnLmdldF92YWx1ZShyIiVzXFNldHVwXFZDIiAlIHZzYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9kdWN0ZGlyIikKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcHJvZHVjdGRpciA9IE5vbmUKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiVW5hYmxlIHRvIGZpbmQgcHJvZHVjdGRpciBpbiByZWdpc3RyeSIpCisKICAgICBpZiBub3QgcHJvZHVjdGRpciBvciBub3Qgb3MucGF0aC5pc2Rpcihwcm9kdWN0ZGlyKToKICAgICAgICAgdG9vbHNrZXkgPSAiVlMlMC5mMENPTU5UT09MUyIgJSB2ZXJzaW9uCiAgICAgICAgIHRvb2xzZGlyID0gb3MuZW52aXJvbi5nZXQodG9vbHNrZXksIE5vbmUpCkBAIC0yNjIsMjMgKzI3MywyNyBAQAogICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbignIiVzIiAlcyAmIHNldCcgJSAodmN2YXJzYWxsLCBhcmNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICB0cnk6CisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgICAgICBpZiBwb3Blbi53YWl0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3Ioc3RkZXJyLmRlY29kZSgibWJjcyIpKQogCi0gICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgaWYgcG9wZW4ud2FpdCgpICE9IDA6Ci0gICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3Ioc3RkZXJyLmRlY29kZSgibWJjcyIpKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQuZGVjb2RlKCJtYmNzIikKKyAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgbGluZSA9IFJlZy5jb252ZXJ0X21iY3MobGluZSkKKyAgICAgICAgICAgIGlmICc9JyBub3QgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGtleSBpbiBpbnRlcmVzdGluZzoKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZS5lbmRzd2l0aChvcy5wYXRoc2VwKToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVs6LTFdCisgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByZW1vdmVEdXBsaWNhdGVzKHZhbHVlKQogCi0gICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgibWJjcyIpCi0gICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0KCJcbiIpOgotICAgICAgICBsaW5lID0gUmVnLmNvbnZlcnRfbWJjcyhsaW5lKQotICAgICAgICBpZiAnPScgbm90IGluIGxpbmU6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCc9JywgMSkKLSAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKLSAgICAgICAgaWYga2V5IGluIGludGVyZXN0aW5nOgotICAgICAgICAgICAgaWYgdmFsdWUuZW5kc3dpdGgob3MucGF0aHNlcCk6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVs6LTFdCi0gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJlbW92ZUR1cGxpY2F0ZXModmFsdWUpCisgICAgZmluYWxseToKKyAgICAgICAgcG9wZW4uc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgcG9wZW4uc3RkZXJyLmNsb3NlKCkKIAogICAgIGlmIGxlbihyZXN1bHQpICE9IGxlbihpbnRlcmVzdGluZyk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKGxpc3QocmVzdWx0LmtleXMoKSkpKQpAQCAtNDg5LDcgKzUwNCw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFtzZWxmLnJjXSArIHBwX29wdHMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvdXRwdXRfb3B0XSArIFtpbnB1dF9vcHRdKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxpZiBleHQgaW4gc2VsZi5fbWNfZXh0ZW5zaW9uczoKQEAgLTUxNiw3ICs1MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFtzZWxmLnJjXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIvZm8iICsgb2JqXSArIFtyY19maWxlXSkKIAotICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKQEAgLTUyOSw3ICs1NDQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYuY2NdICsgY29tcGlsZV9vcHRzICsgcHBfb3B0cyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRfb3B0LCBvdXRwdXRfb3B0XSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCiAKICAgICAgICAgcmV0dXJuIG9iamVjdHMKQEAgLTU1NCw3ICs1NjksNyBAQAogICAgICAgICAgICAgICAgIHBhc3MgIyBYWFggd2hhdCBnb2VzIGhlcmU/CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbc2VsZi5saWJdICsgbGliX2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICByYWlzZSBMaWJFcnJvcihtc2cpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2cuZGVidWcoInNraXBwaW5nICVzICh1cC10by1kYXRlKSIsIG91dHB1dF9maWxlbmFtZSkKQEAgLTY0Myw3ICs2NTgsNyBAQAogICAgICAgICAgICAgc2VsZi5ta3BhdGgob3MucGF0aC5kaXJuYW1lKG91dHB1dF9maWxlbmFtZSkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbc2VsZi5saW5rZXJdICsgbGRfYXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciwgbXNnOgogICAgICAgICAgICAgICAgIHJhaXNlIExpbmtFcnJvcihtc2cpCiAKICAgICAgICAgICAgICMgZW1iZWQgdGhlIG1hbmlmZXN0CkBAIC02NTUsMzcgKzY3MCw0MyBAQAogICAgICAgICAgICAgICAgIG1maWQgPSAxCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1maWQgPSAyCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBWaXN1YWwgQyBydW50aW1lLCBzbyB0aGV5IHdpbGwKLSAgICAgICAgICAgICAgICAgICAgIyBmYWxsIHRocm91Z2ggdG8gdGhlIFZpc3VhbCBDIGRlcGVuZGVuY3kgb2YgUHl0aG9uLmV4ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdheSwgd2hlbiBpbnN0YWxsZWQgZm9yIGEgcmVzdHJpY3RlZCB1c2VyIChlLmcuCi0gICAgICAgICAgICAgICAgICAgICMgcnVudGltZXMgYXJlIG5vdCBpbiBXaW5TeFMgZm9sZGVyLCBidXQgaW4gUHl0aG9uJ3Mgb3duCi0gICAgICAgICAgICAgICAgICAgICMgZm9sZGVyKSwgdGhlIHJ1bnRpbWVzIGRvIG5vdCBuZWVkIHRvIGJlIGluIGV2ZXJ5IGZvbGRlcgotICAgICAgICAgICAgICAgICAgICAjIHdpdGggLnB5ZCdzLgotICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9mID0gb3Blbih0ZW1wX21hbmlmZXN0LCAicmIiKQotICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9idWYgPSBtYW5pZmVzdF9mLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IHJlLmNvbXBpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICByIiIiPGFzc2VtYmx5SWRlbnRpdHkuKj9uYW1lPSgifCcpTWljcm9zb2Z0XC4iIiJcCi0gICAgICAgICAgICAgICAgICAgICAgICByIiIiVkNcZHsyfVwuQ1JUKCJ8JykuKj8oLz58PC9hc3NlbWJseUlkZW50aXR5PikiIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICByZS5ET1RBTEwpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2J1ZiA9IHJlLnN1YihwYXR0ZXJuLCAiIiwgbWFuaWZlc3RfYnVmKQotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIjxkZXBlbmRlbnRBc3NlbWJseT5ccyo8L2RlcGVuZGVudEFzc2VtYmx5PiIKLSAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfYnVmID0gcmUuc3ViKHBhdHRlcm4sICIiLCBtYW5pZmVzdF9idWYpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2YgPSBvcGVuKHRlbXBfbWFuaWZlc3QsICJ3YiIpCi0gICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X2Yud3JpdGUobWFuaWZlc3RfYnVmKQotICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZV92aXN1YWxfY19yZWYodGVtcF9tYW5pZmVzdCkKICAgICAgICAgICAgIG91dF9hcmcgPSAnLW91dHB1dHJlc291cmNlOiVzOyVzJyAlIChvdXRwdXRfZmlsZW5hbWUsIG1maWQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbJ210LmV4ZScsICctbm9sb2dvJywgJy1tYW5pZmVzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9tYW5pZmVzdCwgb3V0X2FyZ10pCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IsIG1zZzoKICAgICAgICAgICAgICAgICByYWlzZSBMaW5rRXJyb3IobXNnKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbG9nLmRlYnVnKCJza2lwcGluZyAlcyAodXAtdG8tZGF0ZSkiLCBvdXRwdXRfZmlsZW5hbWUpCiAKKyAgICBkZWYgX3JlbW92ZV92aXN1YWxfY19yZWYoc2VsZiwgbWFuaWZlc3RfZmlsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIFZpc3VhbCBDIHJ1bnRpbWUsIHNvIHRoZXkgd2lsbAorICAgICAgICAgICAgIyBmYWxsIHRocm91Z2ggdG8gdGhlIFZpc3VhbCBDIGRlcGVuZGVuY3kgb2YgUHl0aG9uLmV4ZS4KKyAgICAgICAgICAgICMgVGhpcyB3YXksIHdoZW4gaW5zdGFsbGVkIGZvciBhIHJlc3RyaWN0ZWQgdXNlciAoZS5nLgorICAgICAgICAgICAgIyBydW50aW1lcyBhcmUgbm90IGluIFdpblN4UyBmb2xkZXIsIGJ1dCBpbiBQeXRob24ncyBvd24KKyAgICAgICAgICAgICMgZm9sZGVyKSwgdGhlIHJ1bnRpbWVzIGRvIG5vdCBuZWVkIHRvIGJlIGluIGV2ZXJ5IGZvbGRlcgorICAgICAgICAgICAgIyB3aXRoIC5weWQncy4KKyAgICAgICAgICAgIG1hbmlmZXN0X2YgPSBvcGVuKG1hbmlmZXN0X2ZpbGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFuaWZlc3RfYnVmID0gbWFuaWZlc3RfZi5yZWFkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi5jbG9zZSgpCisgICAgICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgKKyAgICAgICAgICAgICAgICByIiIiPGFzc2VtYmx5SWRlbnRpdHkuKj9uYW1lPSgifCcpTWljcm9zb2Z0XC4iIiJcCisgICAgICAgICAgICAgICAgciIiIlZDXGR7Mn1cLkNSVCgifCcpLio/KC8+fDwvYXNzZW1ibHlJZGVudGl0eT4pIiIiLAorICAgICAgICAgICAgICAgIHJlLkRPVEFMTCkKKyAgICAgICAgICAgIG1hbmlmZXN0X2J1ZiA9IHJlLnN1YihwYXR0ZXJuLCAiIiwgbWFuaWZlc3RfYnVmKQorICAgICAgICAgICAgcGF0dGVybiA9ICI8ZGVwZW5kZW50QXNzZW1ibHk+XHMqPC9kZXBlbmRlbnRBc3NlbWJseT4iCisgICAgICAgICAgICBtYW5pZmVzdF9idWYgPSByZS5zdWIocGF0dGVybiwgIiIsIG1hbmlmZXN0X2J1ZikKKyAgICAgICAgICAgIG1hbmlmZXN0X2YgPSBvcGVuKG1hbmlmZXN0X2ZpbGUsICd3JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLndyaXRlKG1hbmlmZXN0X2J1ZikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcwogCiAgICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAjIFRoZXNlIGFyZSBhbGwgdXNlZCBieSB0aGUgJ2dlbl9saWJfb3B0aW9ucygpIGZ1bmN0aW9uLCBpbgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQppbmRleCAzMGE5ZmM2Li4wZTY5ZmQzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weQpAQCAtOCwxNiArOCwxNSBAQAogIyBoYWNrZWQgYnkgUm9iaW4gQmVja2VyIGFuZCBUaG9tYXMgSGVsbGVyIHRvIGRvIGEgYmV0dGVyIGpvYiBvZgogIyAgIGZpbmRpbmcgRGV2U3R1ZGlvICh0aHJvdWdoIHRoZSByZWdpc3RyeSkKIAotIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMS4KLQogX19yZXZpc2lvbl9fID0gIiRJZCQiCiAKLWltcG9ydCBzeXMsIG9zLCBzdHJpbmcKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgXAotICAgICBEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKLSAgICAgQ29tcGlsZUVycm9yLCBMaWJFcnJvciwgTGlua0Vycm9yCi1mcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IFwKLSAgICAgQ0NvbXBpbGVyLCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlRXJyb3IsIExpYkVycm9yLCBMaW5rRXJyb3IpCitmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IENDb21waWxlciwgZ2VuX2xpYl9vcHRpb25zCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKIF9jYW5fcmVhZF9yZWcgPSAwCkBAIC0xMjksNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNldF9tYWNybygiRnJhbWV3b3JrU0RLRGlyIiwgbmV0LCAic2RraW5zdGFsbHJvb3R2MS4xIikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRfbWFjcm8oIkZyYW1ld29ya1NES0RpciIsIG5ldCwgInNka2luc3RhbGxyb290IikKLSAgICAgICAgZXhjZXB0IEtleUVycm9yLCBleGM6ICMKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgXAogICAgICAgICAgICAgICAgICAgKCIiIlB5dGhvbiB3YXMgYnVpbHQgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMDM7CiBleHRlbnNpb25zIG11c3QgYmUgYnVpbHQgd2l0aCBhIGNvbXBpbGVyIHRoYW4gY2FuIGdlbmVyYXRlIGNvbXBhdGlibGUgYmluYXJpZXMuCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL213ZXJrc2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9td2Vya3Njb21waWxlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQzYzZjZS4uMDAwMDAwMAotLS0gYS9MaWIvZGlzdHV0aWxzL213ZXJrc2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLSIiImRpc3R1dGlscy5td2Vya3Njb21waWxlcgotCi1Db250YWlucyBNV2Vya3NDb21waWxlciwgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGFic3RyYWN0IENDb21waWxlciBjbGFzcwotZm9yIE1ldHJvV2Vya3MgQ29kZVdhcnJpb3Igb24gdGhlIE1hY2ludG9zaC4gTmVlZHMgd29yayB0byBzdXBwb3J0IENXIG9uCi1XaW5kb3dzLiIiIgotCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi4xLgotCi1fX3JldmlzaW9uX18gPSAiJElkJCIKLQotaW1wb3J0IHN5cywgb3MsIHN0cmluZwotZnJvbSB0eXBlcyBpbXBvcnQgKgotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBcCi0gICAgIERpc3R1dGlsc0V4ZWNFcnJvciwgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgXAotICAgICBDb21waWxlRXJyb3IsIExpYkVycm9yLCBMaW5rRXJyb3IKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgXAotICAgICBDQ29tcGlsZXIsIGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucwotaW1wb3J0IGRpc3R1dGlscy51dGlsCi1pbXBvcnQgZGlzdHV0aWxzLmRpcl91dGlsCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi0KLWNsYXNzIE1XZXJrc0NvbXBpbGVyIChDQ29tcGlsZXIpIDoKLSAgICAiIiJDb25jcmV0ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIHRvIE1ldHJvV2Vya3MgQ29kZVdhcnJpb3IsCi0gICAgICAgYXMgZGVmaW5lZCBieSB0aGUgQ0NvbXBpbGVyIGFic3RyYWN0IGNsYXNzLiIiIgotCi0gICAgY29tcGlsZXJfdHlwZSA9ICdtd2Vya3MnCi0KLSAgICAjIEp1c3Qgc2V0IHRoaXMgc28gQ0NvbXBpbGVyJ3MgY29uc3RydWN0b3IgZG9lc24ndCBiYXJmLiAgV2UgY3VycmVudGx5Ci0gICAgIyBkb24ndCB1c2UgdGhlICdzZXRfZXhlY3V0YWJsZXMoKScgYnVyZWF1Y3JhY3kgcHJvdmlkZWQgYnkgQ0NvbXBpbGVyLAotICAgICMgYXMgaXQgcmVhbGx5IGlzbid0IG5lY2Vzc2FyeSBmb3IgdGhpcyBzb3J0IG9mIHNpbmdsZS1jb21waWxlciBjbGFzcy4KLSAgICAjIFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHdpdGggVW5peENDb21waWxlciwKLSAgICAjIHRob3VnaCwgc28gaXQncyB3b3J0aCB0aGlua2luZyBhYm91dC4KLSAgICBleGVjdXRhYmxlcyA9IHt9Ci0KLSAgICAjIFByaXZhdGUgY2xhc3MgZGF0YSAobmVlZCB0byBkaXN0aW5ndWlzaCBDIGZyb20gQysrIHNvdXJjZSBmb3IgY29tcGlsZXIpCi0gICAgX2NfZXh0ZW5zaW9ucyA9IFsnLmMnXQotICAgIF9jcHBfZXh0ZW5zaW9ucyA9IFsnLmNjJywgJy5jcHAnLCAnLmN4eCddCi0gICAgX3JjX2V4dGVuc2lvbnMgPSBbJy5yJ10KLSAgICBfZXhwX2V4dGVuc2lvbiA9ICcuZXhwJwotCi0gICAgIyBOZWVkZWQgZm9yIHRoZSBmaWxlbmFtZSBnZW5lcmF0aW9uIG1ldGhvZHMgcHJvdmlkZWQgYnkgdGhlCi0gICAgIyBiYXNlIGNsYXNzLCBDQ29tcGlsZXIuCi0gICAgc3JjX2V4dGVuc2lvbnMgPSAoX2NfZXh0ZW5zaW9ucyArIF9jcHBfZXh0ZW5zaW9ucyArCi0gICAgICAgICAgICAgICAgICAgICAgX3JjX2V4dGVuc2lvbnMpCi0gICAgcmVzX2V4dGVuc2lvbiA9ICcucnNyYycKLSAgICBvYmpfZXh0ZW5zaW9uID0gJy5vYmonICMgTm90IHVzZWQsIHJlYWxseQotICAgIHN0YXRpY19saWJfZXh0ZW5zaW9uID0gJy5saWInCi0gICAgc2hhcmVkX2xpYl9leHRlbnNpb24gPSAnLnNsYicKLSAgICBzdGF0aWNfbGliX2Zvcm1hdCA9IHNoYXJlZF9saWJfZm9ybWF0ID0gJyVzJXMnCi0gICAgZXhlX2V4dGVuc2lvbiA9ICcnCi0KLQotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MCwKLSAgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwKLSAgICAgICAgICAgICAgICAgIGZvcmNlPTApOgotCi0gICAgICAgIENDb21waWxlci5fX2luaXRfXyAoc2VsZiwgdmVyYm9zZSwgZHJ5X3J1biwgZm9yY2UpCi0KLQotICAgIGRlZiBjb21waWxlIChzZWxmLAotICAgICAgICAgICAgICAgICBzb3VyY2VzLAotICAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgICAgIG1hY3Jvcz1Ob25lLAotICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICAgICBkZXBlbmRzPU5vbmUpOgotICAgICAgICAob3V0cHV0X2RpciwgbWFjcm9zLCBpbmNsdWRlX2RpcnMpID0gXAotICAgICAgICAgICBzZWxmLl9maXhfY29tcGlsZV9hcmdzIChvdXRwdXRfZGlyLCBtYWNyb3MsIGluY2x1ZGVfZGlycykKLSAgICAgICAgc2VsZi5fX3NvdXJjZXMgPSBzb3VyY2VzCi0gICAgICAgIHNlbGYuX19tYWNyb3MgPSBtYWNyb3MKLSAgICAgICAgc2VsZi5fX2luY2x1ZGVfZGlycyA9IGluY2x1ZGVfZGlycwotICAgICAgICAjIERvbid0IG5lZWQgZXh0cmFfcHJlYXJncyBhbmQgZXh0cmFfcG9zdGFyZ3MgZm9yIENXCi0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVmIGxpbmsgKHNlbGYsCi0gICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICBvYmplY3RzLAotICAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCi0gICAgICAgICAgICAgIG91dHB1dF9kaXI9Tm9uZSwKLSAgICAgICAgICAgICAgbGlicmFyaWVzPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1Ob25lLAotICAgICAgICAgICAgICBleHBvcnRfc3ltYm9scz1Ob25lLAotICAgICAgICAgICAgICBkZWJ1Zz0wLAotICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKLSAgICAgICAgICAgICAgdGFyZ2V0X2xhbmc9Tm9uZSk6Ci0gICAgICAgICMgRmlyc3QgZml4dXAuCi0gICAgICAgIChvYmplY3RzLCBvdXRwdXRfZGlyKSA9IHNlbGYuX2ZpeF9vYmplY3RfYXJncyAob2JqZWN0cywgb3V0cHV0X2RpcikKLSAgICAgICAgKGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycykgPSBcCi0gICAgICAgICAgICBzZWxmLl9maXhfbGliX2FyZ3MgKGxpYnJhcmllcywgbGlicmFyeV9kaXJzLCBydW50aW1lX2xpYnJhcnlfZGlycykKLQotICAgICAgICAjIEZpcnN0IGV4YW1pbmUgYSBjb3VwbGUgb2Ygb3B0aW9ucyBmb3IgdGhpbmdzIHRoYXQgYXJlbid0IGltcGxlbWVudGVkIHlldAotICAgICAgICBpZiBub3QgdGFyZ2V0X2Rlc2MgaW4gKHNlbGYuU0hBUkVEX0xJQlJBUlksIHNlbGYuU0hBUkVEX09CSkVDVCk6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCAnQ2FuIG9ubHkgbWFrZSBTSEFSRURfTElCUkFSWSBvciBTSEFSRURfT0JKRUNUIHRhcmdldHMgb24gdGhlIE1hYycKLSAgICAgICAgaWYgcnVudGltZV9saWJyYXJ5X2RpcnM6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCAnUnVudGltZSBsaWJyYXJ5IGRpcnMgbm90IGltcGxlbWVudGVkIHlldCcKLSAgICAgICAgaWYgZXh0cmFfcHJlYXJncyBvciBleHRyYV9wb3N0YXJnczoKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsICdSdW50aW1lIGxpYnJhcnkgZGlycyBub3QgaW1wbGVtZW50ZWQgeWV0JwotICAgICAgICBpZiBsZW4oZXhwb3J0X3N5bWJvbHMpICE9IDE6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCAnTmVlZCBleGFjdGx5IG9uZSBleHBvcnQgc3ltYm9sJwotICAgICAgICAjIE5leHQgdGhlcmUgYXJlIHZhcmlvdXMgdGhpbmdzIGZvciB3aGljaCB3ZSBuZWVkIGFic29sdXRlIHBhdGhuYW1lcy4KLSAgICAgICAgIyBUaGlzIGlzIGJlY2F1c2Ugd2UgKHVzdWFsbHkpIGNyZWF0ZSB0aGUgcHJvamVjdCBpbiBhIHN1YmRpcmVjdG9yeSBvZgotICAgICAgICAjIHdoZXJlIHdlIGFyZSBub3csIGFuZCBrZWVwaW5nIHRoZSBwYXRocyByZWxhdGl2ZSBpcyB0b28gbXVjaCB3b3JrIHJpZ2h0Ci0gICAgICAgICMgbm93LgotICAgICAgICBzb3VyY2VzID0gbWFwKHNlbGYuX2ZpbGVuYW1lX3RvX2Ficywgc2VsZi5fX3NvdXJjZXMpCi0gICAgICAgIGluY2x1ZGVfZGlycyA9IG1hcChzZWxmLl9maWxlbmFtZV90b19hYnMsIHNlbGYuX19pbmNsdWRlX2RpcnMpCi0gICAgICAgIGlmIG9iamVjdHM6Ci0gICAgICAgICAgICBvYmplY3RzID0gbWFwKHNlbGYuX2ZpbGVuYW1lX3RvX2Ficywgb2JqZWN0cykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9iamVjdHMgPSBbXQotICAgICAgICBpZiBidWlsZF90ZW1wOgotICAgICAgICAgICAgYnVpbGRfdGVtcCA9IHNlbGYuX2ZpbGVuYW1lX3RvX2FicyhidWlsZF90ZW1wKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnVpbGRfdGVtcCA9IG9zLmN1cmRpcigpCi0gICAgICAgIGlmIG91dHB1dF9kaXI6Ci0gICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2Rpciwgb3V0cHV0X2ZpbGVuYW1lKQotICAgICAgICAjIFRoZSBvdXRwdXQgZmlsZW5hbWUgbmVlZHMgc3BlY2lhbCBoYW5kbGluZzogc3BsaXR0aW5nIGl0IGludG8gZGlyIGFuZAotICAgICAgICAjIGZpbGVuYW1lIHBhcnQuIEFjdHVhbGx5IEknbSBub3Qgc3VyZSB0aGlzIGlzIHJlYWxseSBuZWVkZWQsIGJ1dCBpdAotICAgICAgICAjIGNhbid0IGh1cnQuCi0gICAgICAgIG91dHB1dF9maWxlbmFtZSA9IHNlbGYuX2ZpbGVuYW1lX3RvX2FicyhvdXRwdXRfZmlsZW5hbWUpCi0gICAgICAgIG91dHB1dF9kaXIsIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguc3BsaXQob3V0cHV0X2ZpbGVuYW1lKQotICAgICAgICAjIE5vdyB3ZSBuZWVkIHRoZSBzaG9ydCBuYW1lcyBvZiBhIGNvdXBsZSBvZiB0aGluZ3MgZm9yIHB1dHRpbmcgdGhlbQotICAgICAgICAjIGludG8gdGhlIHByb2plY3QuCi0gICAgICAgIGlmIG91dHB1dF9maWxlbmFtZVstODpdID09ICcucHBjLnNsYic6Ci0gICAgICAgICAgICBiYXNlbmFtZSA9IG91dHB1dF9maWxlbmFtZVs6LThdCi0gICAgICAgIGVsaWYgb3V0cHV0X2ZpbGVuYW1lWy0xMTpdID09ICcuY2FyYm9uLnNsYic6Ci0gICAgICAgICAgICBiYXNlbmFtZSA9IG91dHB1dF9maWxlbmFtZVs6LTExXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLnN0cmlwKG91dHB1dF9maWxlbmFtZSlbMF0KLSAgICAgICAgcHJvamVjdG5hbWUgPSBiYXNlbmFtZSArICcubWNwJwotICAgICAgICB0YXJnZXRuYW1lID0gYmFzZW5hbWUKLSAgICAgICAgeG1sbmFtZSA9IGJhc2VuYW1lICsgJy54bWwnCi0gICAgICAgIGV4cG9ydG5hbWUgPSBiYXNlbmFtZSArICcubWNwLmV4cCcKLSAgICAgICAgcHJlZml4bmFtZSA9ICdtd2Vya3NfJXNfY29uZmlnLmgnJWJhc2VuYW1lCi0gICAgICAgICMgQ3JlYXRlIHRoZSBkaXJlY3RvcmllcyB3ZSBuZWVkCi0gICAgICAgIGRpc3R1dGlscy5kaXJfdXRpbC5ta3BhdGgoYnVpbGRfdGVtcCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCi0gICAgICAgIGRpc3R1dGlscy5kaXJfdXRpbC5ta3BhdGgob3V0cHV0X2RpciwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCi0gICAgICAgICMgQW5kIG9uIHRvIGZpbGxpbmcgaW4gdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9qZWN0IGJ1aWxkZXIKLSAgICAgICAgc2V0dGluZ3MgPSB7fQotICAgICAgICBzZXR0aW5nc1snbWFjX2V4cG9ydG5hbWUnXSA9IGV4cG9ydG5hbWUKLSAgICAgICAgc2V0dGluZ3NbJ21hY19vdXRwdXRkaXInXSA9IG91dHB1dF9kaXIKLSAgICAgICAgc2V0dGluZ3NbJ21hY19kbGxuYW1lJ10gPSBvdXRwdXRfZmlsZW5hbWUKLSAgICAgICAgc2V0dGluZ3NbJ21hY190YXJnZXRuYW1lJ10gPSB0YXJnZXRuYW1lCi0gICAgICAgIHNldHRpbmdzWydzeXNwcmVmaXgnXSA9IHN5cy5wcmVmaXgKLSAgICAgICAgc2V0dGluZ3NbJ21hY19zeXNwcmVmaXh0eXBlJ10gPSAnQWJzb2x1dGUnCi0gICAgICAgIHNvdXJjZWZpbGVuYW1lcyA9IFtdCi0gICAgICAgIHNvdXJjZWZpbGVkaXJzID0gW10KLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNvdXJjZXMgKyBvYmplY3RzOgotICAgICAgICAgICAgZGlybmFtZSwgZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQotICAgICAgICAgICAgc291cmNlZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBkaXJuYW1lIGluIHNvdXJjZWZpbGVkaXJzOgotICAgICAgICAgICAgICAgIHNvdXJjZWZpbGVkaXJzLmFwcGVuZChkaXJuYW1lKQotICAgICAgICBzZXR0aW5nc1snc291cmNlcyddID0gc291cmNlZmlsZW5hbWVzCi0gICAgICAgIHNldHRpbmdzWydsaWJyYXJpZXMnXSA9IGxpYnJhcmllcwotICAgICAgICBzZXR0aW5nc1snZXh0cmFzZWFyY2hkaXJzJ10gPSBzb3VyY2VmaWxlZGlycyArIGluY2x1ZGVfZGlycyArIGxpYnJhcnlfZGlycwotICAgICAgICBpZiBzZWxmLmRyeV9ydW46Ci0gICAgICAgICAgICBwcmludCAnQ0FMTElORyBMSU5LRVIgSU4nLCBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2V0dGluZ3MuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBwcmludCAnJTIwLjIwcyAlcyclKGtleSwgdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgIyBCdWlsZCB0aGUgZXhwb3J0IGZpbGUKLSAgICAgICAgZXhwb3J0ZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oYnVpbGRfdGVtcCwgZXhwb3J0bmFtZSkKLSAgICAgICAgbG9nLmRlYnVnKCJcdENyZWF0ZSBleHBvcnQgZmlsZSAlcyIsIGV4cG9ydGZpbGVuYW1lKQotICAgICAgICBmcCA9IG9wZW4oZXhwb3J0ZmlsZW5hbWUsICd3JykKLSAgICAgICAgZnAud3JpdGUoJyVzXG4nJWV4cG9ydF9zeW1ib2xzWzBdKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICMgR2VuZXJhdGUgdGhlIHByZWZpeCBmaWxlLCBpZiBuZWVkZWQsIGFuZCBwdXQgaXQgaW4gdGhlIHNldHRpbmdzCi0gICAgICAgIGlmIHNlbGYuX19tYWNyb3M6Ci0gICAgICAgICAgICBwcmVmaXhmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgb3MucGF0aC5qb2luKGJ1aWxkX3RlbXAsIHByZWZpeG5hbWUpKQotICAgICAgICAgICAgZnAgPSBvcGVuKHByZWZpeGZpbGVuYW1lLCAndycpCi0gICAgICAgICAgICBmcC53cml0ZSgnI2luY2x1ZGUgIm13ZXJrc19zaGNhcmJvbl9jb25maWcuaCJcbicpCi0gICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5fX21hY3JvczoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZSgnI2RlZmluZSAlc1xuJyVuYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZwLndyaXRlKCcjZGVmaW5lICVzICVzXG4nJShuYW1lLCB2YWx1ZSkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICBzZXR0aW5nc1sncHJlZml4bmFtZSddID0gcHJlZml4bmFtZQotCi0gICAgICAgICMgQnVpbGQgdGhlIFhNTCBmaWxlLiBXZSBuZWVkIHRoZSBmdWxsIHBhdGhuYW1lIChvbmx5IGxhdGVyb24sIHJlYWxseSkKLSAgICAgICAgIyBiZWNhdXNlIHdlIHBhc3MgdGhpcyBwYXRobmFtZSB0byBDb2RlV2FycmlvciBpbiBhbiBBcHBsZUV2ZW50LCBhbmQgQ1cKLSAgICAgICAgIyBkb2Vzbid0IGhhdmUgYSBjbHVlIGFib3V0IG91ciB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgeG1sZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIG9zLnBhdGguam9pbihidWlsZF90ZW1wLCB4bWxuYW1lKSkKLSAgICAgICAgbG9nLmRlYnVnKCJcdENyZWF0ZSBYTUwgZmlsZSAlcyIsIHhtbGZpbGVuYW1lKQotICAgICAgICBpbXBvcnQgbWtjd3Byb2plY3QKLSAgICAgICAgeG1sYnVpbGRlciA9IG1rY3dwcm9qZWN0LmN3eG1sZ2VuLlByb2plY3RCdWlsZGVyKHNldHRpbmdzKQotICAgICAgICB4bWxidWlsZGVyLmdlbmVyYXRlKCkKLSAgICAgICAgeG1sZGF0YSA9IHNldHRpbmdzWyd0bXBfcHJvamVjdHhtbGRhdGEnXQotICAgICAgICBmcCA9IG9wZW4oeG1sZmlsZW5hbWUsICd3JykKLSAgICAgICAgZnAud3JpdGUoeG1sZGF0YSkKLSAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAjIEdlbmVyYXRlIHRoZSBwcm9qZWN0LiBBZ2FpbiBhIGZ1bGwgcGF0aG5hbWUuCi0gICAgICAgIHByb2plY3RmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgb3MucGF0aC5qb2luKGJ1aWxkX3RlbXAsIHByb2plY3RuYW1lKSkKLSAgICAgICAgbG9nLmRlYnVnKCdcdENyZWF0ZSBwcm9qZWN0IGZpbGUgJXMnLCBwcm9qZWN0ZmlsZW5hbWUpCi0gICAgICAgIG1rY3dwcm9qZWN0Lm1ha2Vwcm9qZWN0KHhtbGZpbGVuYW1lLCBwcm9qZWN0ZmlsZW5hbWUpCi0gICAgICAgICMgQW5kIGJ1aWxkIGl0Ci0gICAgICAgIGxvZy5kZWJ1ZygnXHRCdWlsZCBwcm9qZWN0JykKLSAgICAgICAgbWtjd3Byb2plY3QuYnVpbGRwcm9qZWN0KHByb2plY3RmaWxlbmFtZSkKLQotICAgIGRlZiBfZmlsZW5hbWVfdG9fYWJzKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgIyBTb21lIGZpbGVuYW1lcyBzZWVtIHRvIGJlIHVuaXgtbGlrZS4gQ29udmVydCB0byBNYWMgbmFtZXMuCi0jIyAgICAgICAgaWYgJy8nIGluIGZpbGVuYW1lIGFuZCAnOicgaW4gZmlsZW5hbWU6Ci0jIyAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwgJ0ZpbGVuYW1lIG1heSBiZSBVbml4IG9yIE1hYyBzdHlsZTogJXMnJWZpbGVuYW1lCi0jIyAgICAgICAgaWYgJy8nIGluIGZpbGVuYW1lOgotIyMgICAgICAgICAgIGZpbGVuYW1lID0gbWFjdXJsMnBhdGgoZmlsZW5hbWUpCi0gICAgICAgIGZpbGVuYW1lID0gZGlzdHV0aWxzLnV0aWwuY29udmVydF9wYXRoKGZpbGVuYW1lKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlbmFtZSk6Ci0gICAgICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgIyBGaW5hbGx5IHJlbW92ZSAuLiBjb21wb25lbnRzCi0gICAgICAgIGNvbXBvbmVudHMgPSBzdHJpbmcuc3BsaXQoZmlsZW5hbWUsICc6JykKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGNvbXBvbmVudHMpKToKLSAgICAgICAgICAgIGlmIGNvbXBvbmVudHNbaV0gPT0gJy4uJzoKLSAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldID0gJycKLSAgICAgICAgcmV0dXJuIHN0cmluZy5qb2luKGNvbXBvbmVudHMsICc6JykKLQotICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24gKHNlbGYsIGRpcik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAnZGlyJyB0byB0aGUgbGlzdCBvZgotICAgICAgICBkaXJlY3RvcmllcyBzZWFyY2hlZCBmb3IgbGlicmFyaWVzLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuICMgWFhYWCBOb3QgY29ycmVjdC4uLgotCi0gICAgZGVmIHJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9uIChzZWxmLCBkaXIpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YKLSAgICAgICAgZGlyZWN0b3JpZXMgc2VhcmNoZWQgZm9yIHJ1bnRpbWUgbGlicmFyaWVzLgotICAgICAgICAiIiIKLSAgICAgICAgIyBOb3RoaW5nIG5lZWRlZCBvciBNd2Vya3MvTWFjLgotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBsaWJyYXJ5X29wdGlvbiAoc2VsZiwgbGliKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBjb21waWxlciBvcHRpb24gdG8gYWRkICdkaXInIHRvIHRoZSBsaXN0IG9mIGxpYnJhcmllcwotICAgICAgICBsaW5rZWQgaW50byB0aGUgc2hhcmVkIGxpYnJhcnkgb3IgZXhlY3V0YWJsZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIGZpbmRfbGlicmFyeV9maWxlIChzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICAiIiJTZWFyY2ggdGhlIHNwZWNpZmllZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGZvciBhIHN0YXRpYyBvciBzaGFyZWQKLSAgICAgICAgbGlicmFyeSBmaWxlICdsaWInIGFuZCByZXR1cm4gdGhlIGZ1bGwgcGF0aCB0byB0aGF0IGZpbGUuICBJZgotICAgICAgICAnZGVidWcnIHRydWUsIGxvb2sgZm9yIGEgZGVidWdnaW5nIHZlcnNpb24gKGlmIHRoYXQgbWFrZXMgc2Vuc2Ugb24KLSAgICAgICAgdGhlIGN1cnJlbnQgcGxhdGZvcm0pLiAgUmV0dXJuIE5vbmUgaWYgJ2xpYicgd2Fzbid0IGZvdW5kIGluIGFueSBvZgotICAgICAgICB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yaWVzLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CmluZGV4IGU1NjU0ZmYuLjVjMDE0YzQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQpAQCAtNiwyMSArNiwxOCBAQAogZXhlY3V0YWJsZSBuYW1lLgogIiIiCiAKLSMgVGhpcyBtb2R1bGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjEuCi0KIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIERpc3R1dGlsc0V4ZWNFcnJvcgogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCi1kZWYgc3Bhd24gKGNtZCwKLSAgICAgICAgICAgc2VhcmNoX3BhdGg9MSwKLSAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICBkcnlfcnVuPTApOgorZGVmIHNwYXduKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgorICAgICIiIlJ1biBhbm90aGVyIHByb2dyYW0sIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQgbGlzdCAnY21kJywgaW4gYSBuZXcgcHJvY2Vzcy4KIAotICAgICIiIlJ1biBhbm90aGVyIHByb2dyYW0sIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQgbGlzdCAnY21kJywgaW4gYSBuZXcKLSAgICBwcm9jZXNzLiAgJ2NtZCcgaXMganVzdCB0aGUgYXJndW1lbnQgbGlzdCBmb3IgdGhlIG5ldyBwcm9jZXNzLCBpZS4KKyAgICAnY21kJyBpcyBqdXN0IHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgbmV3IHByb2Nlc3MsIGllLgogICAgIGNtZFswXSBpcyB0aGUgcHJvZ3JhbSB0byBydW4gYW5kIGNtZFsxOl0gYXJlIHRoZSByZXN0IG9mIGl0cyBhcmd1bWVudHMuCiAgICAgVGhlcmUgaXMgbm8gd2F5IHRvIHJ1biBhIHByb2dyYW0gd2l0aCBhIG5hbWUgZGlmZmVyZW50IGZyb20gdGhhdCBvZiBpdHMKICAgICBleGVjdXRhYmxlLgpAQCAtNDMsMzcgKzQwLDI5IEBACiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKICAgICAgICAgICAgICAgImRvbid0IGtub3cgaG93IHRvIHNwYXduIHByb2dyYW1zIG9uIHBsYXRmb3JtICclcyciICUgb3MubmFtZQogCi0jIHNwYXduICgpCitkZWYgX250X3F1b3RlX2FyZ3MoYXJncyk6CisgICAgIiIiUXVvdGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgRE9TL1dpbmRvd3MgY29udmVudGlvbnMuCiAKLQotZGVmIF9udF9xdW90ZV9hcmdzIChhcmdzKToKLSAgICAiIiJRdW90ZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGZvciBET1MvV2luZG93cyBjb252ZW50aW9uczoganVzdAotICAgIHdyYXBzIGV2ZXJ5IGFyZ3VtZW50IHdoaWNoIGNvbnRhaW5zIGJsYW5rcyBpbiBkb3VibGUgcXVvdGVzLCBhbmQKKyAgICBKdXN0IHdyYXBzIGV2ZXJ5IGFyZ3VtZW50IHdoaWNoIGNvbnRhaW5zIGJsYW5rcyBpbiBkb3VibGUgcXVvdGVzLCBhbmQKICAgICByZXR1cm5zIGEgbmV3IGFyZ3VtZW50IGxpc3QuCiAgICAgIiIiCi0KICAgICAjIFhYWCB0aGlzIGRvZXNuJ3Qgc2VlbSB2ZXJ5IHJvYnVzdCB0byBtZSAtLSBidXQgaWYgdGhlIFdpbmRvd3MgZ3V5cwogICAgICMgc2F5IGl0J2xsIHdvcmssIEkgZ3Vlc3MgSSdsbCBoYXZlIHRvIGFjY2VwdCBpdC4gIChXaGF0IGlmIGFuIGFyZwogICAgICMgY29udGFpbnMgcXVvdGVzPyAgV2hhdCBvdGhlciBtYWdpYyBjaGFyYWN0ZXJzLCBvdGhlciB0aGFuIHNwYWNlcywKICAgICAjIGhhdmUgdG8gYmUgZXNjYXBlZD8gIElzIHRoZXJlIGFuIGVzY2FwaW5nIG1lY2hhbmlzbSBvdGhlciB0aGFuCiAgICAgIyBxdW90aW5nPykKLQotICAgIGZvciBpIGluIHJhbmdlKGxlbihhcmdzKSk6Ci0gICAgICAgIGlmIHN0cmluZy5maW5kKGFyZ3NbaV0sICcgJykgIT0gLTE6Ci0gICAgICAgICAgICBhcmdzW2ldID0gJyIlcyInICUgYXJnc1tpXQorICAgIGZvciBpLCBhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICBpZiAnICcgaW4gYXJnOgorICAgICAgICAgICAgYXJnc1tpXSA9ICciJXMiJyAlIGFyZwogICAgIHJldHVybiBhcmdzCiAKLWRlZiBfc3Bhd25fbnQgKGNtZCwKLSAgICAgICAgICAgICAgIHNlYXJjaF9wYXRoPTEsCi0gICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICBkcnlfcnVuPTApOgotCitkZWYgX3NwYXduX250KGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgogICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KICAgICBjbWQgPSBfbnRfcXVvdGVfYXJncyhjbWQpCiAgICAgaWYgc2VhcmNoX3BhdGg6CiAgICAgICAgICMgZWl0aGVyIHdlIGZpbmQgb25lIG9yIGl0IHN0YXlzIHRoZSBzYW1lCiAgICAgICAgIGV4ZWN1dGFibGUgPSBmaW5kX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkgb3IgZXhlY3V0YWJsZQotICAgIGxvZy5pbmZvKHN0cmluZy5qb2luKFtleGVjdXRhYmxlXSArIGNtZFsxOl0sICcgJykpCisgICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgICMgc3Bhd24gZm9yIE5UIHJlcXVpcmVzIGEgZnVsbCBwYXRoIHRvIHRoZSAuZXhlCiAgICAgICAgIHRyeToKQEAgLTg3LDE4ICs3NiwxMiBAQAogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yLCBcCiAgICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKQogCi0KLWRlZiBfc3Bhd25fb3MyIChjbWQsCi0gICAgICAgICAgICAgICAgc2VhcmNoX3BhdGg9MSwKLSAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgZHJ5X3J1bj0wKToKLQorZGVmIF9zcGF3bl9vczIoY21kLCBzZWFyY2hfcGF0aD0xLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6CiAgICAgZXhlY3V0YWJsZSA9IGNtZFswXQotICAgICNjbWQgPSBfbnRfcXVvdGVfYXJncyhjbWQpCiAgICAgaWYgc2VhcmNoX3BhdGg6CiAgICAgICAgICMgZWl0aGVyIHdlIGZpbmQgb25lIG9yIGl0IHN0YXlzIHRoZSBzYW1lCiAgICAgICAgIGV4ZWN1dGFibGUgPSBmaW5kX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkgb3IgZXhlY3V0YWJsZQotICAgIGxvZy5pbmZvKHN0cmluZy5qb2luKFtleGVjdXRhYmxlXSArIGNtZFsxOl0sICcgJykpCisgICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQogICAgICAgICB0cnk6CkBAIC0xMDksMjcgKzkyLDIwIEBACiAgICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZFswXSwgZXhjWy0xXSkKICAgICAgICAgaWYgcmMgIT0gMDoKICAgICAgICAgICAgICMgYW5kIHRoaXMgcmVmbGVjdHMgdGhlIGNvbW1hbmQgcnVubmluZyBidXQgZmFpbGluZwotICAgICAgICAgICAgcHJpbnQgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiY29tbWFuZCAnJXMnIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWRbMF0sIHJjKSkKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvciwgXAogICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykKIAogCi1kZWYgX3NwYXduX3Bvc2l4IChjbWQsCi0gICAgICAgICAgICAgICAgICBzZWFyY2hfcGF0aD0xLAotICAgICAgICAgICAgICAgICAgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICAgZHJ5X3J1bj0wKToKLQotICAgIGxvZy5pbmZvKHN0cmluZy5qb2luKGNtZCwgJyAnKSkKK2RlZiBfc3Bhd25fcG9zaXgoY21kLCBzZWFyY2hfcGF0aD0xLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6CisgICAgbG9nLmluZm8oJyAnLmpvaW4oY21kKSkKICAgICBpZiBkcnlfcnVuOgogICAgICAgICByZXR1cm4KICAgICBleGVjX2ZuID0gc2VhcmNoX3BhdGggYW5kIG9zLmV4ZWN2cCBvciBvcy5leGVjdgotCiAgICAgcGlkID0gb3MuZm9yaygpCiAKLSAgICBpZiBwaWQgPT0gMDogICAgICAgICAgICAgICAgICAgICAgICAjIGluIHRoZSBjaGlsZAorICAgIGlmIHBpZCA9PSAwOiAgIyBpbiB0aGUgY2hpbGQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgI3ByaW50ICJjbWRbMF0gPSIsIGNtZFswXQotICAgICAgICAgICAgI3ByaW50ICJjbWQgPSIsIGNtZAogICAgICAgICAgICAgZXhlY19mbihjbWRbMF0sIGNtZCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ1bmFibGUgdG8gZXhlY3V0ZSAlczogJXNcbiIgJQpAQCAtMTM4LDE0ICsxMTQsMTIgQEAKIAogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ1bmFibGUgdG8gZXhlY3V0ZSAlcyBmb3IgdW5rbm93biByZWFzb25zIiAlIGNtZFswXSkKICAgICAgICAgb3MuX2V4aXQoMSkKLQotCi0gICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgcGFyZW50CisgICAgZWxzZTogICAjIGluIHRoZSBwYXJlbnQKICAgICAgICAgIyBMb29wIHVudGlsIHRoZSBjaGlsZCBlaXRoZXIgZXhpdHMgb3IgaXMgdGVybWluYXRlZCBieSBhIHNpZ25hbAogICAgICAgICAjIChpZS4ga2VlcCB3YWl0aW5nIGlmIGl0J3MgbWVyZWx5IHN0b3BwZWQpCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgKHBpZCwgc3RhdHVzKSA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXhjOgogICAgICAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FSU5UUjoKQEAgLTE2MCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgZWxpZiBvcy5XSUZFWElURUQoc3RhdHVzKToKICAgICAgICAgICAgICAgICBleGl0X3N0YXR1cyA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKICAgICAgICAgICAgICAgICBpZiBleGl0X3N0YXR1cyA9PSAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgICMgaGV5LCBpdCBzdWNjZWVkZWQhCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAgICMgaGV5LCBpdCBzdWNjZWVkZWQhCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgXApAQCAtMTczLDIxICsxNDcsMjEgQEAKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IsIFwKICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBlcnJvciBleGVjdXRpbmcgJyVzJzogdGVybWluYXRpb24gc3RhdHVzICVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAoY21kWzBdLCBzdGF0dXMpCi0jIF9zcGF3bl9wb3NpeCAoKQotCiAKIGRlZiBmaW5kX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSwgcGF0aD1Ob25lKToKLSAgICAiIiJUcnkgdG8gZmluZCAnZXhlY3V0YWJsZScgaW4gdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAncGF0aCcgKGEKLSAgICBzdHJpbmcgbGlzdGluZyBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgJ29zLnBhdGhzZXAnOyBkZWZhdWx0cyB0bwotICAgIG9zLmVudmlyb25bJ1BBVEgnXSkuICBSZXR1cm5zIHRoZSBjb21wbGV0ZSBmaWxlbmFtZSBvciBOb25lIGlmIG5vdAotICAgIGZvdW5kLgorICAgICIiIlRyaWVzIHRvIGZpbmQgJ2V4ZWN1dGFibGUnIGluIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJ3BhdGgnLgorCisgICAgQSBzdHJpbmcgbGlzdGluZyBkaXJlY3RvcmllcyBzZXBhcmF0ZWQgYnkgJ29zLnBhdGhzZXAnOyBkZWZhdWx0cyB0bworICAgIG9zLmVudmlyb25bJ1BBVEgnXS4gIFJldHVybnMgdGhlIGNvbXBsZXRlIGZpbGVuYW1lIG9yIE5vbmUgaWYgbm90IGZvdW5kLgogICAgICIiIgogICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgcGF0aCA9IG9zLmVudmlyb25bJ1BBVEgnXQotICAgIHBhdGhzID0gc3RyaW5nLnNwbGl0KHBhdGgsIG9zLnBhdGhzZXApCi0gICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCisgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCisgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQorCiAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCisKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CiAgICAgICAgIGZvciBwIGluIHBhdGhzOgogICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihwLCBleGVjdXRhYmxlKQpAQCAtMTk3LDUgKzE3MSwzIEBACiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGUKLQotIyBmaW5kX2V4ZWN1dGFibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCA0NmQyM2VjLi4zM2NjNWEzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtMjUsNyArMjUsNyBAQAogIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQogIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCiAjIGl0J2xsIGxpdmUgaW4gcHJvamVjdC9QQ2J1aWxkL2FtZDY0LgotcHJvamVjdF9iYXNlID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorcHJvamVjdF9iYXNlID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSkpCiBpZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBwcm9qZWN0X2Jhc2VbLTg6XS5sb3dlcigpOgogICAgIHByb2plY3RfYmFzZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocHJvamVjdF9iYXNlLCBvcy5wYXRoLnBhcmRpcikpCiAjIFBDL1ZTNy4xCkBAIC03NCw3ICs3NCw3IEBACiAKICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CiAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKLSAgICAgICAgICAgIGJ1aWxkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgICAgICAgICBidWlsZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKQogICAgICAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKICAgICAgICAgICAgICAgICAjIHB5dGhvbi5oIGlzIGxvY2F0ZWQgaW4gdGhlIGJ1aWxkaXIKICAgICAgICAgICAgICAgICBpbmNfZGlyID0gYnVpbGRpcgpAQCAtODgsMTEgKzg4LDYgQEAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKICAgICBlbGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm1hYyI6Ci0gICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIk1hYyIsICJJbmNsdWRlIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkluY2x1ZGUiKQogICAgIGVsc2U6CkBAIC0xMzUsMTggKzEzMCw2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQogCi0gICAgZWxpZiBvcy5uYW1lID09ICJtYWMiOgotICAgICAgICBpZiBwbGF0X3NwZWNpZmljOgotICAgICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgImxpYi1keW5sb2FkIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzdGFuZGFyZF9saWI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKLQogICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQpAQCAtMjIyLDggKzIwNSw3IEBACiBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CiAgICAgIiIiUmV0dXJuIGZ1bGwgcGF0aG5hbWUgb2YgaW5zdGFsbGVkIE1ha2VmaWxlIGZyb20gdGhlIFB5dGhvbiBidWlsZC4iIiIKICAgICBpZiBweXRob25fYnVpbGQ6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWFrZWZpbGUiKQorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksICJNYWtlZmlsZSIpCiAgICAgbGliX2RpciA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCiAgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCAiY29uZmlnIiwgIk1ha2VmaWxlIikKIApAQCAtMzM2LDYgKzMxOCwxMSBAQAogCiAgICAgZnAuY2xvc2UoKQogCisgICAgIyBzdHJpcCBzcHVyaW91cyBzcGFjZXMKKyAgICBmb3IgaywgdiBpbiBkb25lLml0ZW1zKCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uodiwgc3RyKToKKyAgICAgICAgICAgIGRvbmVba10gPSB2LnN0cmlwKCkKKwogICAgICMgc2F2ZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkKICAgICBnLnVwZGF0ZShkb25lKQogICAgIHJldHVybiBnCkBAIC00NjAsMzggKzQ0NywxMiBAQAogICAgIGdbJ1NPJ10gPSAnLnB5ZCcKICAgICBnWydFWEUnXSA9ICIuZXhlIgogICAgIGdbJ1ZFUlNJT04nXSA9IGdldF9weXRob25fdmVyc2lvbigpLnJlcGxhY2UoIi4iLCAiIikKLSAgICBnWydCSU5ESVInXSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICBnWydCSU5ESVInXSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQogCiAgICAgZ2xvYmFsIF9jb25maWdfdmFycwogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfbWFjKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBNYWNpbnRvc2ggc3lzdGVtcyIiIgotICAgIGcgPSB7fQotICAgICMgc2V0IGJhc2ljIGluc3RhbGwgZGlyZWN0b3JpZXMKLSAgICBnWydMSUJERVNUJ10gPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0xKQotICAgIGdbJ0JJTkxJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MSwgc3RhbmRhcmRfbGliPTEpCi0KLSAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQotICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQotCi0gICAgaW1wb3J0IE1hY09TCi0gICAgaWYgbm90IGhhc2F0dHIoTWFjT1MsICdydW50aW1lbW9kZWwnKToKLSAgICAgICAgZ1snU08nXSA9ICcucHBjLnNsYicKLSAgICBlbHNlOgotICAgICAgICBnWydTTyddID0gJy4lcy5zbGInICUgTWFjT1MucnVudGltZW1vZGVsCi0KLSAgICAjIFhYWCBhcmUgdGhlc2UgdXNlZCBhbnl3aGVyZT8KLSAgICBnWydpbnN0YWxsX2xpYiddID0gb3MucGF0aC5qb2luKEVYRUNfUFJFRklYLCAiTGliIikKLSAgICBnWydpbnN0YWxsX3BsYXRsaWInXSA9IG9zLnBhdGguam9pbihFWEVDX1BSRUZJWCwgIk1hYyIsICJMaWIiKQotCi0gICAgIyBUaGVzZSBhcmUgdXNlZCBieSB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZAotICAgIGdbJ3NyY2RpciddID0gJzonCi0gICAgZ2xvYmFsIF9jb25maWdfdmFycwotICAgIF9jb25maWdfdmFycyA9IGcKLQotCiBkZWYgX2luaXRfb3MyKCk6CiAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCiAgICAgZyA9IHt9CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL1NldHVwLnNhbXBsZSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvU2V0dXAuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2YzQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL1NldHVwLnNhbXBsZQpAQCAtMCwwICsxLDY3IEBACisjIFNldHVwIGZpbGUgZnJvbSB0aGUgcHlnYW1lIHByb2plY3QKKworIy0tU3RhcnRDb25maWcKK1NETCA9IC1JL3Vzci9pbmNsdWRlL1NETCAtRF9SRUVOVFJBTlQgLWxTREwKK0ZPTlQgPSAtbFNETF90dGYKK0lNQUdFID0gLWxTRExfaW1hZ2UKK01JWEVSID0gLWxTRExfbWl4ZXIKK1NNUEVHID0gLWxzbXBlZworUE5HID0gLWxwbmcKK0pQRUcgPSAtbGpwZWcKK1NDUkFQID0gLWxYMTEKK1BPUlRNSURJID0gLWxwb3J0bWlkaQorUE9SVFRJTUUgPSAtbHBvcnR0aW1lCisjLS1FbmRDb25maWcKKworI0RFQlVHID0gLUMtVyAtQy1XYWxsCitERUJVRyA9IAorCisjdGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBvcHRpb25hbC4geW91IHdpbGwgd2FudCB0byBjb21waWxlCisjZXZlcnl0aGluZyB5b3UgY2FuLCBidXQgeW91IGNhbiBpZ25vcmUgb25lcyB5b3UgZG9uJ3QgaGF2ZQorI2RlcGVuZGVuY2llcyBmb3IsIGp1c3QgY29tbWVudCB0aGVtIG91dAorCitpbWFnZWV4dCBzcmMvaW1hZ2VleHQuYyAkKFNETCkgJChJTUFHRSkgJChQTkcpICQoSlBFRykgJChERUJVRykKK2ZvbnQgc3JjL2ZvbnQuYyAkKFNETCkgJChGT05UKSAkKERFQlVHKQorbWl4ZXIgc3JjL21peGVyLmMgJChTREwpICQoTUlYRVIpICQoREVCVUcpCittaXhlcl9tdXNpYyBzcmMvbXVzaWMuYyAkKFNETCkgJChNSVhFUikgJChERUJVRykKK19udW1lcmljc3VyZmFycmF5IHNyYy9fbnVtZXJpY3N1cmZhcnJheS5jICQoU0RMKSAkKERFQlVHKQorX251bWVyaWNzbmRhcnJheSBzcmMvX251bWVyaWNzbmRhcnJheS5jICQoU0RMKSAkKE1JWEVSKSAkKERFQlVHKQorbW92aWUgc3JjL21vdmllLmMgJChTREwpICQoU01QRUcpICQoREVCVUcpCitzY3JhcCBzcmMvc2NyYXAuYyAkKFNETCkgJChTQ1JBUCkgJChERUJVRykKK19jYW1lcmEgc3JjL19jYW1lcmEuYyBzcmMvY2FtZXJhX3Y0bDIuYyBzcmMvY2FtZXJhX3Y0bC5jICQoU0RMKSAkKERFQlVHKQorcHlwbSBzcmMvcHlwbS5jICQoU0RMKSAkKFBPUlRNSURJKSAkKFBPUlRUSU1FKSAkKERFQlVHKQorCitHRlggPSBzcmMvU0RMX2dmeC9TRExfZ2Z4UHJpbWl0aXZlcy5jIAorI0dGWCA9IHNyYy9TRExfZ2Z4L1NETF9nZnhCbGl0RnVuYy5jIHNyYy9TRExfZ2Z4L1NETF9nZnhQcmltaXRpdmVzLmMgCitnZnhkcmF3IHNyYy9nZnhkcmF3LmMgJChTREwpICQoR0ZYKSAkKERFQlVHKQorCisKKworI3RoZXNlIG1vZHVsZXMgYXJlIHJlcXVpcmVkIGZvciBweWdhbWUgdG8gcnVuLiB0aGV5IG9ubHkgcmVxdWlyZQorI1NETCBhcyBhIGRlcGVuZGVuY3kuIHRoZXNlIHNob3VsZCBub3QgYmUgYWx0ZXJlZAorCitiYXNlIHNyYy9iYXNlLmMgJChTREwpICQoREVCVUcpCitjZHJvbSBzcmMvY2Ryb20uYyAkKFNETCkgJChERUJVRykKK2NvbG9yIHNyYy9jb2xvci5jICQoU0RMKSAkKERFQlVHKQorY29uc3RhbnRzIHNyYy9jb25zdGFudHMuYyAkKFNETCkgJChERUJVRykKK2Rpc3BsYXkgc3JjL2Rpc3BsYXkuYyAkKFNETCkgJChERUJVRykKK2V2ZW50IHNyYy9ldmVudC5jICQoU0RMKSAkKERFQlVHKQorZmFzdGV2ZW50IHNyYy9mYXN0ZXZlbnQuYyBzcmMvZmFzdGV2ZW50cy5jICQoU0RMKSAkKERFQlVHKQora2V5IHNyYy9rZXkuYyAkKFNETCkgJChERUJVRykKK21vdXNlIHNyYy9tb3VzZS5jICQoU0RMKSAkKERFQlVHKQorcmVjdCBzcmMvcmVjdC5jICQoU0RMKSAkKERFQlVHKQorcndvYmplY3Qgc3JjL3J3b2JqZWN0LmMgJChTREwpICQoREVCVUcpCitzdXJmYWNlIHNyYy9zdXJmYWNlLmMgc3JjL2FscGhhYmxpdC5jIHNyYy9zdXJmYWNlX2ZpbGwuYyAkKFNETCkgJChERUJVRykKK3N1cmZsb2NrIHNyYy9zdXJmbG9jay5jICQoU0RMKSAkKERFQlVHKQordGltZSBzcmMvdGltZS5jICQoU0RMKSAkKERFQlVHKQoram95c3RpY2sgc3JjL2pveXN0aWNrLmMgJChTREwpICQoREVCVUcpCitkcmF3IHNyYy9kcmF3LmMgJChTREwpICQoREVCVUcpCitpbWFnZSBzcmMvaW1hZ2UuYyAkKFNETCkgJChERUJVRykKK292ZXJsYXkgc3JjL292ZXJsYXkuYyAkKFNETCkgJChERUJVRykKK3RyYW5zZm9ybSBzcmMvdHJhbnNmb3JtLmMgc3JjL3JvdG96b29tLmMgc3JjL3NjYWxlMnguYyBzcmMvc2NhbGVfbW14LmMgJChTREwpICQoREVCVUcpCittYXNrIHNyYy9tYXNrLmMgc3JjL2JpdG1hc2suYyAkKFNETCkgJChERUJVRykKK2J1ZmZlcnByb3h5IHNyYy9idWZmZXJwcm94eS5jICQoU0RMKSAkKERFQlVHKQorcGl4ZWxhcnJheSBzcmMvcGl4ZWxhcnJheS5jICQoU0RMKSAkKERFQlVHKQorX2FycmF5c3VyZmFycmF5IHNyYy9fYXJyYXlzdXJmYXJyYXkuYyAkKFNETCkgJChERUJVRykKKworCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL19faW5pdF9fLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy9fX2luaXRfXy5weQppbmRleCA3YmRiOTEyLi42OTdmZjg0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL19faW5pdF9fLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvX19pbml0X18ucHkKQEAgLTE1LDkgKzE1LDEwIEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIAotaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKK2hlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgogCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CkBAIC0zMiw0ICszMyw0IEBACiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5CmluZGV4IDJhMDM3NjUuLjc4MzMxOGUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvc3VwcG9ydC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3N1cHBvcnQucHkKQEAgLTIsMTEgKzIsMTkgQEAKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IHRlbXBmaWxlCitmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CitpbXBvcnQgd2FybmluZ3MKIAotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi1mcm9tIGRpc3R1dGlscy5kaXN0IGltcG9ydCBEaXN0cmlidXRpb24KLWZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAorZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KKworZGVmIGNhcHR1cmVfd2FybmluZ3MoZnVuYyk6CisgICAgZGVmIF9jYXB0dXJlX3dhcm5pbmdzKCphcmdzLCAqKmt3KToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgcmV0dXJuIF9jYXB0dXJlX3dhcm5pbmdzCiAKIGNsYXNzIExvZ2dpbmdTaWxlbmNlcihvYmplY3QpOgogCkBAIC0xOSwxOCArMjcsMTIgQEAKICAgICAgICAgc2VsZi5fb2xkX2xvZyA9IGxvZy5Mb2cuX2xvZwogICAgICAgICBsb2cuTG9nLl9sb2cgPSBzZWxmLl9sb2cKICAgICAgICAgc2VsZi5sb2dzID0gW10KLSAgICAgICAgc2VsZi5fb2xkX3dhcm4gPSBDb21tYW5kLndhcm4KLSAgICAgICAgQ29tbWFuZC53YXJuID0gc2VsZi5fd2FybgogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBsb2cuc2V0X3RocmVzaG9sZChzZWxmLnRocmVzaG9sZCkKICAgICAgICAgbG9nLkxvZy5fbG9nID0gc2VsZi5fb2xkX2xvZwotICAgICAgICBDb21tYW5kLndhcm4gPSBzZWxmLl9vbGRfd2FybgogICAgICAgICBzdXBlcihMb2dnaW5nU2lsZW5jZXIsIHNlbGYpLnRlYXJEb3duKCkKIAotICAgIGRlZiBfd2FybihzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLmxvZ3MuYXBwZW5kKCgnJywgbXNnLCAnJykpCi0KICAgICBkZWYgX2xvZyhzZWxmLCBsZXZlbCwgbXNnLCBhcmdzKToKICAgICAgICAgaWYgbGV2ZWwgbm90IGluIChERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzIHdyb25nIGxvZyBsZXZlbCcgJSBzdHIobGV2ZWwpKQpAQCAtNDcsNyArNDksNiBAQAogICAgIGRlZiBjbGVhcl9sb2dzKHNlbGYpOgogICAgICAgICBzZWxmLmxvZ3MgPSBbXQogCi0KIGNsYXNzIFRlbXBkaXJNYW5hZ2VyKG9iamVjdCk6CiAgICAgIiIiTWl4LWluIGNsYXNzIHRoYXQgaGFuZGxlcyB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgZm9yIHRlc3QgY2FzZXMuCiAKQEAgLTYyLDcgKzYzLDcgQEAKICAgICAgICAgc3VwZXIoVGVtcGRpck1hbmFnZXIsIHNlbGYpLnRlYXJEb3duKCkKICAgICAgICAgd2hpbGUgc2VsZi50ZW1wZGlyczoKICAgICAgICAgICAgIGQgPSBzZWxmLnRlbXBkaXJzLnBvcCgpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGQpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGQsIG9zLm5hbWUgaW4gKCdudCcsICdjeWd3aW4nKSkKIAogICAgIGRlZiBta2R0ZW1wKHNlbGYpOgogICAgICAgICAiIiJDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBjbGVhbmVkIHVwLgpAQCAtNzYsNiArNzcsNyBAQAogICAgIGRlZiB3cml0ZV9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnQ9J3h4eCcpOgogICAgICAgICAiIiJXcml0ZXMgYSBmaWxlIGluIHRoZSBnaXZlbiBwYXRoLgogCisKICAgICAgICAgcGF0aCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBzZXF1ZW5jZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgKGxpc3QsIHR1cGxlKSk6CkBAIC0xMTIsMyArMTE0LDIwIEBACiAKICAgICBkZWYgZW5zdXJlX2ZpbmFsaXplZChzZWxmKToKICAgICAgICAgcGFzcworCitjbGFzcyBFbnZpcm9uR3VhcmQob2JqZWN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoRW52aXJvbkd1YXJkLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYub2xkX2Vudmlyb24gPSBkZWVwY29weShvcy5lbnZpcm9uKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLm9sZF9lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBvcy5lbnZpcm9uLmdldChrZXkpICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCisKKyAgICAgICAgZm9yIGtleSBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5vbGRfZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICAgICAgc3VwZXIoRW52aXJvbkd1YXJkLCBzZWxmKS50ZWFyRG93bigpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjcxMDZmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQpAQCAtMCwwICsxLDI4NCBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5hcmNoaXZlX3V0aWwuIiIiCitfX3JldmlzaW9uX18gPSAiJElkJCIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0YXJmaWxlCitmcm9tIG9zLnBhdGggaW1wb3J0IHNwbGl0ZHJpdmUKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIGRpc3R1dGlscy5hcmNoaXZlX3V0aWwgaW1wb3J0IChjaGVja19hcmNoaXZlX2Zvcm1hdHMsIG1ha2VfdGFyYmFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfemlwZmlsZSwgbWFrZV9hcmNoaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJDSElWRV9GT1JNQVRTKQorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZSwgc3Bhd24KK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0CisKK3RyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQorCit0cnk6CisgICAgaW1wb3J0IHppcGZpbGUKKyAgICBaSVBfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBaSVBfU1VQUE9SVCA9IGZpbmRfZXhlY3V0YWJsZSgnemlwJykKKworIyBzb21lIHRlc3RzIHdpbGwgZmFpbCBpZiB6bGliIGlzIG5vdCBhdmFpbGFibGUKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKKworY2xhc3MgQXJjaGl2ZVV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbChzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbih0bXBkaXIsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdzdWInLCAnZmlsZTMnXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHVuaXR0ZXN0LnNraXBVbmxlc3Moc3BsaXRkcml2ZSh0bXBkaXIpWzBdID09IHNwbGl0ZHJpdmUodG1wZGlyMilbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKKworICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorCisgICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzIHRvIGF2b2lkIHRhciB3YXJuaW5ncworICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgZGVmIF90YXJpbmZvKHNlbGYsIHBhdGgpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4ocGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSB0YXIuZ2V0bmFtZXMoKQorICAgICAgICAgICAgbmFtZXMuc29ydCgpCisgICAgICAgICAgICByZXR1cm4gdHVwbGUobmFtZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIF9jcmVhdGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBkaXN0ID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpc3QnKQorICAgICAgICBvcy5ta2RpcihkaXN0KQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ3N1YicsICdmaWxlMyddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWIyJykpCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICByZXR1cm4gdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGFuZCBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdGFyIGNvbW1hbmQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF90YXJmaWxlX3ZzX3RhcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyBub3cgY3JlYXRlIGFub3RoZXIgdGFyYmFsbCB1c2luZyBgdGFyYAorICAgICAgICB0YXJiYWxsMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhcmNoaXZlMi50YXIuZ3onKQorICAgICAgICB0YXJfY21kID0gWyd0YXInLCAnLWNmJywgJ2FyY2hpdmUyLnRhcicsICdkaXN0J10KKyAgICAgICAgZ3ppcF9jbWQgPSBbJ2d6aXAnLCAnLWY5JywgJ2FyY2hpdmUyLnRhciddCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwYXduKHRhcl9jbWQpCisgICAgICAgICAgICBzcGF3bihnemlwX2NtZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwyKSkKKyAgICAgICAgIyBsZXQncyBjb21wYXJlIGJvdGggdGFyYmFsbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHRhcmJhbGwpLCBzZWxmLl90YXJpbmZvKHRhcmJhbGwyKSkKKworICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgbm93IGZvciBhIGRyeV9ydW4KKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLCBkcnlfcnVuPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgnY29tcHJlc3MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGNvbXByZXNzIHByb2dyYW0gaXMgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X2NvbXByZXNzX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisKKyAgICAgICAgIyB1c2luZyBjb21wcmVzcyBhbmQgdGVzdGluZyB0aGUgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZworICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz0nY29tcHJlc3MnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLlonCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisKKyAgICAgICAgIyBzYW1lIHRlc3Qgd2l0aCBkcnlfcnVuCisgICAgICAgIG9zLnJlbW92ZSh0YXJiYWxsKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz0nY29tcHJlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPVRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaSVBfU1VQUE9SVCwgJ05lZWQgemlwIHN1cHBvcnQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF9tYWtlX3ppcGZpbGUoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQorCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBtYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCB0bXBkaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnppcCcKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FyY2hpdmVfZm9ybWF0cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja19hcmNoaXZlX2Zvcm1hdHMoWydnenRhcicsICd4eHgnLCAnemlwJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICd4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrX2FyY2hpdmVfZm9ybWF0cyhbJ2d6dGFyJywgJ3ppcCddKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYWtlX2FyY2hpdmUsIGJhc2VfbmFtZSwgJ3h4eCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydAorICAgICAgICBpZiBVSURfR0lEX1NVUFBPUlQ6CisgICAgICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyb3VwID0gb3duZXIgPSAncm9vdCcKKworICAgICAgICBiYXNlX2Rpciwgcm9vdF9kaXIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IG1ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYXJjaGl2ZV9uYW1lKSkKKworICAgICAgICAjIG5vdyBjaGVja3MgdGhlIHJpZ2h0cworICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfY3dkKHNlbGYpOgorICAgICAgICBjdXJyZW50X2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIGRlZiBfYnJlYWtzKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgIEFSQ0hJVkVfRk9STUFUU1sneHh4J10gPSAoX2JyZWFrcywgW10sICd4eHggZmlsZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYWtlX2FyY2hpdmUoJ3h4eCcsICd4eHgnLCByb290X2Rpcj1zZWxmLm1rZHRlbXAoKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldGN3ZCgpLCBjdXJyZW50X2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBBUkNISVZFX0ZPUk1BVFNbJ3h4eCddCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShBcmNoaXZlVXRpbFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3Y2Q1YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdC5weQpAQCAtMCwwICsxLDQ1IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3QuIiIiCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3QgaW1wb3J0IGJkaXN0Citmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHNwYXduCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorCitjbGFzcyBCdWlsZFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHMoc2VsZik6CisKKyAgICAgICAgIyBsZXQncyBjcmVhdGUgYSBjb21tYW5kIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgIyB3ZSBjYW4gZml4IHRoZSBmb3JtYXQKKyAgICAgICAgcGtnX3B0aCwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBiZGlzdChkaXN0KQorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnbXNpJ10KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5mb3JtYXRzLCBbJ21zaSddKQorCisgICAgICAgICMgd2hhdCBmb3JtYXQgYmRpc3Qgb2ZmZXJzID8KKyAgICAgICAgIyBYWFggYW4gZXhwbGljaXQgbGlzdCBpbiBiZGlzdCBpcworICAgICAgICAjIG5vdCB0aGUgYmVzdCB3YXkgdG8gIGJkaXN0XyogY29tbWFuZHMKKyAgICAgICAgIyB3ZSBzaG91bGQgYWRkIGEgcmVnaXN0cnkKKyAgICAgICAgZm9ybWF0cyA9IFsncnBtJywgJ3ppcCcsICdnenRhcicsICdienRhcicsICd6dGFyJywKKyAgICAgICAgICAgICAgICAgICAndGFyJywgJ3dpbmluc3QnLCAnbXNpJ10KKyAgICAgICAgZm9ybWF0cy5zb3J0KCkKKyAgICAgICAgZm91bmRlZCA9IGNtZC5mb3JtYXRfY29tbWFuZC5rZXlzKCkKKyAgICAgICAgZm91bmRlZC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZGVkLCBmb3JtYXRzKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTIyYTEwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKQEAgLTAsMCArMSwxMDUgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCisjIHpsaWIgaXMgbm90IHVzZWQgaGVyZSwgYnV0IGlmIGl0J3Mgbm90IGF2YWlsYWJsZQorIyB0ZXN0X3NpbXBsZV9idWlsdCB3aWxsIGZhaWwKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYiBpbXBvcnQgYmRpc3RfZHVtYgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKKworU0VUVVBfUFkgPSAiIiJcCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoraW1wb3J0IGZvbworCitzZXR1cChuYW1lPSdmb28nLCB2ZXJzaW9uPScwLjEnLCBweV9tb2R1bGVzPVsnZm9vJ10sCisgICAgICB1cmw9J3h4eCcsIGF1dGhvcj0neHh4JywgYXV0aG9yX2VtYWlsPSd4eHgnKQorCisiIiIKKworY2xhc3MgQnVpbGREdW1iVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKEJ1aWxkRHVtYlRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYub2xkX2xvY2F0aW9uID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgc2VsZi5vbGRfc3lzX2FyZ3YgPSBzeXMuYXJndiwgc3lzLmFyZ3ZbOl0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfbG9jYXRpb24pCisgICAgICAgIHN5cy5hcmd2ID0gc2VsZi5vbGRfc3lzX2FyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLm9sZF9zeXNfYXJndlsxXQorICAgICAgICBzdXBlcihCdWlsZER1bWJUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3NpbXBsZV9idWlsdChzZWxmKToKKworICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIHNpbXBsZSBwYWNrYWdlCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28nKQorICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdzZXR1cC5weScpLCBTRVRVUF9QWSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnZm9vLnB5JyksICcjJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnTUFOSUZFU1QuaW4nKSwgJ2luY2x1ZGUgZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnUkVBRE1FJyksICcnKQorCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2ZvbycsICd2ZXJzaW9uJzogJzAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweV9tb2R1bGVzJzogWydmb28nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4J30pCisgICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisgICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCisKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ3NldHVwLnB5J10KKyAgICAgICAgY21kID0gYmRpc3RfZHVtYihkaXN0KQorCisgICAgICAgICMgc28gdGhlIG91dHB1dCBpcyB0aGUgc2FtZSBubyBtYXR0ZXIKKyAgICAgICAgIyB3aGF0IGlzIHRoZSBwbGF0Zm9ybQorICAgICAgICBjbWQuZm9ybWF0ID0gJ3ppcCcKKworICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgc2VlIHdoYXQgd2UgaGF2ZQorICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQorICAgICAgICBiYXNlID0gIiVzLiVzIiAlIChkaXN0LmdldF9mdWxsbmFtZSgpLCBjbWQucGxhdF9uYW1lKQorICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgorICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgnOicsICctJykKKworICAgICAgICB3YW50ZWQgPSBbJyVzLnppcCcgJSBiYXNlXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RfY3JlYXRlZCwgd2FudGVkKQorCisgICAgICAgICMgbm93IGxldCdzIGNoZWNrIHdoYXQgd2UgaGF2ZSBpbiB0aGUgemlwIGZpbGUKKyAgICAgICAgIyBYWFggdG8gYmUgZG9uZQorCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBvcy5jaGRpcihwa2dfZGlyKQorICAgICAgICBjbWQgPSBiZGlzdF9kdW1iKGRpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJkaXN0X2RpciwgTm9uZSkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgYmRpc3RfZGlyIGlzIGluaXRpYWxpemVkIHRvIGJkaXN0X2Jhc2UvZHVtYiBpZiBub3Qgc2V0CisgICAgICAgIGJhc2UgPSBjbWQuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdiZGlzdCcpLmJkaXN0X2Jhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYmRpc3RfZGlyLCBvcy5wYXRoLmpvaW4oYmFzZSwgJ2R1bWInKSkKKworICAgICAgICAjIHRoZSBmb3JtYXQgaXMgc2V0IHRvIGEgZGVmYXVsdCB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIG9zLm5hbWUKKyAgICAgICAgZGVmYXVsdCA9IGNtZC5kZWZhdWx0X2Zvcm1hdFtvcy5uYW1lXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5mb3JtYXQsIGRlZmF1bHQpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZER1bWJUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X21zaS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9tc2kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4OTdhYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9tc2kucHkKQEAgLTAsMCArMSwyNSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaS4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtPT0id2luMzIiLCAiVGhlc2UgdGVzdHMgYXJlIG9ubHkgZm9yIHdpbjMyIikKK2NsYXNzIEJEaXN0TVNJVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21pbmltYWwoc2VsZik6CisgICAgICAgICMgbWluaW1hbCB0ZXN0IFhYWCBuZWVkIG1vcmUgdGVzdHMKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2kgaW1wb3J0IGJkaXN0X21zaQorICAgICAgICBwa2dfcHRoLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGJkaXN0X21zaShkaXN0KQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCRGlzdE1TSVRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWE1NzYzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weQpAQCAtMCwwICsxLDEyNyBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbSBpbXBvcnQgYmRpc3RfcnBtCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHNwYXduCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorCitTRVRVUF9QWSA9ICIiIlwKK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCitpbXBvcnQgZm9vCisKK3NldHVwKG5hbWU9J2ZvbycsIHZlcnNpb249JzAuMScsIHB5X21vZHVsZXM9Wydmb28nXSwKKyAgICAgIHVybD0neHh4JywgYXV0aG9yPSd4eHgnLCBhdXRob3JfZW1haWw9J3h4eCcpCisKKyIiIgorCitjbGFzcyBCdWlsZFJwbVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKEJ1aWxkUnBtVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5vbGRfbG9jYXRpb24gPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLm9sZF9zeXNfYXJndiA9IHN5cy5hcmd2LCBzeXMuYXJndls6XQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9sb2NhdGlvbikKKyAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLm9sZF9zeXNfYXJndlswXQorICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYub2xkX3N5c19hcmd2WzFdCisgICAgICAgIHN1cGVyKEJ1aWxkUnBtVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgorCisgICAgICAgICMgWFhYIEkgYW0gdW5hYmxlIHlldCB0byBtYWtlIHRoaXMgdGVzdCB3b3JrIHdpdGhvdXQKKyAgICAgICAgIyBzcHVyaW91cyBzZHRvdXQvc3RkZXJyIG91dHB1dCB1bmRlciBNYWMgT1MgWAorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2xpbnV4Mic6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIHJ1biBvbmx5IGlmIHRoZSBycG0gY29tbWFuZHMgYXJlIGZvdW5kCisgICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3JwbScpIGlzIE5vbmUgb3IKKyAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgncnBtYnVpbGQnKSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcGFja2FnZQorICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZm9vJykKKyAgICAgICAgb3MubWtkaXIocGtnX2RpcikKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnc2V0dXAucHknKSwgU0VUVVBfUFkpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ2Zvby5weScpLCAnIycpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ01BTklGRVNULmluJyksICdpbmNsdWRlIGZvby5weScpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ1JFQURNRScpLCAnJykKKworICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdmb28nLCAndmVyc2lvbic6ICcwLjEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHlfbW9kdWxlcyc6IFsnZm9vJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ3h4eCd9KQorICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JworICAgICAgICBvcy5jaGRpcihwa2dfZGlyKQorCisgICAgICAgIHN5cy5hcmd2ID0gWydzZXR1cC5weSddCisgICAgICAgIGNtZCA9IGJkaXN0X3JwbShkaXN0KQorICAgICAgICBjbWQuZml4X3B5dGhvbiA9IFRydWUKKworICAgICAgICAjIHJ1bm5pbmcgaW4gcXVpZXQgbW9kZQorICAgICAgICBjbWQucXVpZXQgPSAxCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgZGlzdF9jcmVhdGVkID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Rpc3QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb28tMC4xLTEubm9hcmNoLnJwbScgaW4gZGlzdF9jcmVhdGVkKQorCisgICAgZGVmIHRlc3Rfbm9fb3B0aW1pemVfZmxhZyhzZWxmKToKKworICAgICAgICAjIFhYWCBJIGFtIHVuYWJsZSB5ZXQgdG8gbWFrZSB0aGlzIHRlc3Qgd29yayB3aXRob3V0CisgICAgICAgICMgc3B1cmlvdXMgc2R0b3V0L3N0ZGVyciBvdXRwdXQgdW5kZXIgTWFjIE9TIFgKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdsaW51eDInOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUzMzE2NAorICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIHJ1biBvbmx5IGlmIHRoZSBycG0gY29tbWFuZCBpcyBmb3VuZAorICAgICAgICBpZiAoZmluZF9leGVjdXRhYmxlKCdycG0nKSBpcyBOb25lIG9yCisgICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ3JwbWJ1aWxkJykgaXMgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIHBhY2thZ2UgdGhhdCBicmFrZXMgYmRpc3RfcnBtCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28nKQorICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdzZXR1cC5weScpLCBTRVRVUF9QWSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnZm9vLnB5JyksICcjJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnTUFOSUZFU1QuaW4nKSwgJ2luY2x1ZGUgZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnUkVBRE1FJyksICcnKQorCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2ZvbycsICd2ZXJzaW9uJzogJzAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweV9tb2R1bGVzJzogWydmb28nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4J30pCisgICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCisgICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCisKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ3NldHVwLnB5J10KKyAgICAgICAgY21kID0gYmRpc3RfcnBtKGRpc3QpCisgICAgICAgIGNtZC5maXhfcHl0aG9uID0gVHJ1ZQorCisgICAgICAgIGNtZC5xdWlldCA9IDEKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvby0wLjEtMS5ub2FyY2gucnBtJyBpbiBkaXN0X2NyZWF0ZWQpCisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Rpc3QnLCAnZm9vLTAuMS0xLm5vYXJjaC5ycG0nKSkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJ1aWxkUnBtVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF93aW5pbnN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3dpbmluc3QucHkKaW5kZXggODVhYTAyYS4uYzJiMTNiMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3dpbmluc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3dpbmluc3QucHkKQEAgLTEsOCArMSw4IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3Rfd2luaW5zdC4iIiIKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCiAKLWZyb20gZGlzdHV0aWxzLmRpc3QgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3Rfd2luaW5zdCBpbXBvcnQgYmRpc3Rfd2luaW5zdAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIApAQCAtMTUsMTAgKzE1LDcgQEAKICAgICAgICAgIyBpc3N1ZTU3MzE6IGNvbW1hbmQgd2FzIGJyb2tlbiBvbiBub24td2luZG93cyBwbGF0Zm9ybXMKICAgICAgICAgIyB0aGlzIHRlc3QgbWFrZXMgc3VyZSBpdCB3b3JrcyBub3cgZm9yIGV2ZXJ5IHBsYXRmb3JtCiAgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgY29tbWFuZAotICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZm9vJykKLSAgICAgICAgb3MubWtkaXIocGtnX2RpcikKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgIHBrZ19wdGgsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKICAgICAgICAgY21kID0gYmRpc3Rfd2luaW5zdChkaXN0KQogICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCiAKQEAgLTI2LDEwICsyMywxMCBAQAogICAgICAgICAjIGFuZCBtYWtlIHN1cmUgaXQgZmluZHMgaXQgYW5kIHJldHVybnMgaXRzIGNvbnRlbnQKICAgICAgICAgIyBubyBtYXR0ZXIgd2hhdCBwbGF0Zm9ybSB3ZSBoYXZlCiAgICAgICAgIGV4ZV9maWxlID0gY21kLmdldF9leGVfYnl0ZXMoKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGV4ZV9maWxlKSA+IDEwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGV4ZV9maWxlKSA+IDEwKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRXaW5JbnN0VGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI4ZDczCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkLnB5CkBAIC0wLDAgKzEsNTUgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5idWlsZC4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZCBpbXBvcnQgYnVpbGQKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtCisKK2NsYXNzIEJ1aWxkVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGQoZGlzdCkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgaWYgbm90IHNwZWNpZmllZCwgcGxhdF9uYW1lIGdldHMgdGhlIGN1cnJlbnQgcGxhdGZvcm0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGxhdF9uYW1lLCBnZXRfcGxhdGZvcm0oKSkKKworICAgICAgICAjIGJ1aWxkX3B1cmVsaWIgaXMgYnVpbGQgKyBsaWIKKyAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9iYXNlLCAnbGliJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYnVpbGRfcHVyZWxpYiwgd2FudGVkKQorCisgICAgICAgICMgYnVpbGRfcGxhdGxpYiBpcyAnYnVpbGQvbGliLnBsYXRmb3JtLXgueFstcHlkZWJ1Z10nCisgICAgICAgICMgZXhhbXBsZXM6CisgICAgICAgICMgICBidWlsZC9saWIubWFjb3N4LTEwLjMtaTM4Ni0yLjcKKyAgICAgICAgcGxhdF9zcGVjID0gJy4lcy0lcycgJSAoY21kLnBsYXRfbmFtZSwgc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmJ1aWxkX3BsYXRsaWIuZW5kc3dpdGgoJy1weWRlYnVnJykpCisgICAgICAgICAgICBwbGF0X3NwZWMgKz0gJy1weWRlYnVnJworICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2Jhc2UsICdsaWInICsgcGxhdF9zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9wbGF0bGliLCB3YW50ZWQpCisKKyAgICAgICAgIyBieSBkZWZhdWx0LCBidWlsZF9saWIgPSBidWlsZF9wdXJlbGliCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2xpYiwgY21kLmJ1aWxkX3B1cmVsaWIpCisKKyAgICAgICAgIyBidWlsZF90ZW1wIGlzIGJ1aWxkL3RlbXAuPHBsYXQ+CisgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3RlbXAnICsgcGxhdF9zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF90ZW1wLCB3YW50ZWQpCisKKyAgICAgICAgIyBidWlsZF9zY3JpcHRzIGlzIGJ1aWxkL3NjcmlwdHMteC54CisgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3NjcmlwdHMtJyArICBzeXMudmVyc2lvblswOjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9zY3JpcHRzLCB3YW50ZWQpCisKKyAgICAgICAgIyBleGVjdXRhYmxlIGlzIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4ZWN1dGFibGUsIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2NsaWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfY2xpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjRlMmJjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2NsaWIucHkKQEAgLTAsMCArMSwxNDUgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9jbGliLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfY2xpYiBpbXBvcnQgYnVpbGRfY2xpYgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNTZXR1cEVycm9yCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQorCitjbGFzcyBCdWlsZENMaWJUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jaGVja19saWJyYXJ5X2Rpc3Qoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGRfY2xpYihkaXN0KQorCisgICAgICAgICMgJ2xpYnJhcmllcycgb3B0aW9uIG11c3QgYmUgYSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19saWJyYXJ5X2xpc3QsICdmb28nKQorCisgICAgICAgICMgZWFjaCBlbGVtZW50IG9mICdsaWJyYXJpZXMnIG11c3QgYSAyLXR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19saWJyYXJ5X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZm9vMScsICdmb28yJ10pCisKKyAgICAgICAgIyBmaXJzdCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgaW4gJ2xpYnJhcmllcycKKyAgICAgICAgIyBtdXN0IGJlIGEgc3RyaW5nICh0aGUgbGlicmFyeSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfbGlicmFyeV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsICdmb28xJyksICgnbmFtZScsICdmb28yJyldKQorCisgICAgICAgICMgbGlicmFyeSBuYW1lIG1heSBub3QgY29udGFpbiBkaXJlY3Rvcnkgc2VwYXJhdG9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfbGlicmFyeV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCduYW1lJywgJ2ZvbzEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYW5vdGhlci9uYW1lJywgJ2ZvbzInKV0pCisKKyAgICAgICAgIyBzZWNvbmQgZWxlbWVudCBvZiBlYWNoIHR1cGxlIG11c3QgYmUgYSBkaWN0aW9uYXJ5IChidWlsZCBpbmZvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfbGlicmFyeV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCduYW1lJywge30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhbm90aGVyJywgJ2ZvbzInKV0pCisKKyAgICAgICAgIyB0aG9zZSB3b3JrCisgICAgICAgIGxpYnMgPSBbKCduYW1lJywge30pLCAoJ25hbWUnLCB7J29rJzogJ2dvb2QnfSldCisgICAgICAgIGNtZC5jaGVja19saWJyYXJ5X2xpc3QobGlicykKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZmlsZXMoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGRfY2xpYihkaXN0KQorCisgICAgICAgICMgImluICdsaWJyYXJpZXMnIG9wdGlvbiAnc291cmNlcycgbXVzdCBiZSBwcmVzZW50IGFuZCBtdXN0IGJlCisgICAgICAgICMgYSBsaXN0IG9mIHNvdXJjZSBmaWxlbmFtZXMKKyAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ25hbWUnLCB7fSldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5nZXRfc291cmNlX2ZpbGVzKQorCisgICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCduYW1lJywgeydzb3VyY2VzJzogMX0pXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuZ2V0X3NvdXJjZV9maWxlcykKKworICAgICAgICBjbWQubGlicmFyaWVzID0gWygnbmFtZScsIHsnc291cmNlcyc6IFsnYScsICdiJ119KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X3NvdXJjZV9maWxlcygpLCBbJ2EnLCAnYiddKQorCisgICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCduYW1lJywgeydzb3VyY2VzJzogKCdhJywgJ2InKX0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsnYScsICdiJ10pCisKKyAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiAoJ2EnLCAnYicpfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCduYW1lMicsIHsnc291cmNlcyc6IFsnYycsICdkJ119KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X3NvdXJjZV9maWxlcygpLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKworICAgIGRlZiB0ZXN0X2J1aWxkX2xpYnJhcmllcyhzZWxmKToKKworICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGJ1aWxkX2NsaWIoZGlzdCkKKyAgICAgICAgY2xhc3MgRmFrZUNvbXBpbGVyOgorICAgICAgICAgICAgZGVmIGNvbXBpbGUoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNyZWF0ZV9zdGF0aWNfbGliID0gY29tcGlsZQorCisgICAgICAgIGNtZC5jb21waWxlciA9IEZha2VDb21waWxlcigpCisKKyAgICAgICAgIyBidWlsZF9saWJyYXJpZXMgaXMgYWxzbyBkb2luZyBhIGJpdCBvZiB0eXBvZSBjaGVja2luZworICAgICAgICBsaWIgPSBbKCduYW1lJywgeydzb3VyY2VzJzogJ25vdHZhbGlkJ30pXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuYnVpbGRfbGlicmFyaWVzLCBsaWIpCisKKyAgICAgICAgbGliID0gWygnbmFtZScsIHsnc291cmNlcyc6IGxpc3QoKX0pXQorICAgICAgICBjbWQuYnVpbGRfbGlicmFyaWVzKGxpYikKKworICAgICAgICBsaWIgPSBbKCduYW1lJywgeydzb3VyY2VzJzogdHVwbGUoKX0pXQorICAgICAgICBjbWQuYnVpbGRfbGlicmFyaWVzKGxpYikKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGRfY2xpYihkaXN0KQorCisgICAgICAgIGNtZC5pbmNsdWRlX2RpcnMgPSAnb25lLWRpcicKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5pbmNsdWRlX2RpcnMsIFsnb25lLWRpciddKQorCisgICAgICAgIGNtZC5pbmNsdWRlX2RpcnMgPSBOb25lCisgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuaW5jbHVkZV9kaXJzLCBbXSkKKworICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLmxpYnJhcmllcyA9ICdXT05UV09SSycKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmZpbmFsaXplX29wdGlvbnMpCisKKyAgICBkZWYgdGVzdF9ydW4oc2VsZik6CisgICAgICAgICMgY2FuJ3QgdGVzdCBvbiB3aW5kb3dzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBidWlsZF9jbGliKGRpc3QpCisKKyAgICAgICAgZm9vX2MgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Zvby5jJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGZvb19jLCAnaW50IG1haW4odm9pZCkgeyByZXR1cm4gMTt9XG4nKQorICAgICAgICBjbWQubGlicmFyaWVzID0gWygnZm9vJywgeydzb3VyY2VzJzogW2Zvb19jXX0pXQorCisgICAgICAgIGJ1aWxkX3RlbXAgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2J1aWxkJykKKyAgICAgICAgb3MubWtkaXIoYnVpbGRfdGVtcCkKKyAgICAgICAgY21kLmJ1aWxkX3RlbXAgPSBidWlsZF90ZW1wCisgICAgICAgIGNtZC5idWlsZF9jbGliID0gYnVpbGRfdGVtcAorCisgICAgICAgICMgYmVmb3JlIHdlIHJ1biB0aGUgY29tbWFuZCwgd2Ugd2FudCB0byBtYWtlIHN1cmUKKyAgICAgICAgIyBhbGwgY29tbWFuZHMgYXJlIHByZXNlbnQgb24gdGhlIHN5c3RlbQorICAgICAgICAjIGJ5IGNyZWF0aW5nIGEgY29tcGlsZXIgYW5kIGNoZWNraW5nIGl0cyBleGVjdXRhYmxlcworICAgICAgICBmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IG5ld19jb21waWxlciwgY3VzdG9taXplX2NvbXBpbGVyCisKKyAgICAgICAgY29tcGlsZXIgPSBuZXdfY29tcGlsZXIoKQorICAgICAgICBjdXN0b21pemVfY29tcGlsZXIoY29tcGlsZXIpCisgICAgICAgIGZvciBjY21kIGluIGNvbXBpbGVyLmV4ZWN1dGFibGVzLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgY2NtZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmaW5kX2V4ZWN1dGFibGUoY2NtZFswXSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIyBjYW4ndCB0ZXN0CisKKyAgICAgICAgIyB0aGlzIHNob3VsZCB3b3JrCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbGV0J3MgY2hlY2sgdGhlIHJlc3VsdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xpYmZvby5hJyBpbiBvcy5saXN0ZGlyKGJ1aWxkX3RlbXApKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRDTGliVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CmluZGV4IDFlZDlkMDQuLjg2NTY4ZWIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQpAQCAtMjMsNiArMjMsOCBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5wcm9qZWN0X2Jhc2UsICdNb2R1bGVzJywgJ3h4bW9kdWxlLmMnKQogICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTW9kdWxlcycsICd4eG1vZHVsZS5jJykKIAorX1hYX01PRFVMRV9QQVRIID0gX2dldF9zb3VyY2VfZmlsZW5hbWUoKQorCiBjbGFzcyBCdWlsZEV4dFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAogICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zMSwxMCArMzMsNDMgQEAKICAgICAgICAgIyBOb3RlIHRoYXQgd2UncmUgbWFraW5nIGNoYW5nZXMgdG8gc3lzLnBhdGgKICAgICAgICAgc3VwZXIoQnVpbGRFeHRUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLnRtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0icHl0aG9udGVzdF8iKQotICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KLSAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYudG1wX2RpcikKLSAgICAgICAgc2h1dGlsLmNvcHkoX2dldF9zb3VyY2VfZmlsZW5hbWUoKSwgc2VsZi50bXBfZGlyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhfWFhfTU9EVUxFX1BBVEgpOgorICAgICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi50bXBfZGlyKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkoX1hYX01PRFVMRV9QQVRILCBzZWxmLnRtcF9kaXIpCiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgR2V0IGV2ZXJ5dGhpbmcgYmFjayB0byBub3JtYWwKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoX1hYX01PRFVMRV9QQVRIKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3h4JykKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aAorICAgICAgICAgICAgIyBYWFggb24gV2luZG93cyB0aGUgdGVzdCBsZWF2ZXMgYSBkaXJlY3RvcnkKKyAgICAgICAgICAgICMgd2l0aCB4eCBtb2R1bGUgaW4gVEVNUAorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wX2Rpciwgb3MubmFtZSA9PSAnbnQnIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpCisgICAgICAgIHN1cGVyKEJ1aWxkRXh0VGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiBfZml4dXBfY29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICAjIFdoZW4gUHl0aG9uIHdhcyBidWlsZCB3aXRoIC0tZW5hYmxlLXNoYXJlZCwgLUwuIGlzIG5vdCBnb29kIGVub3VnaAorICAgICAgICAjIHRvIGZpbmQgdGhlIGxpYnB5dGhvbjxibGFoPi5zby4gIFRoaXMgaXMgYmVjYXVzZSByZWdydGVzdCBydW5zIGl0CisgICAgICAgICMgdW5kZXIgYSB0ZW1wZGlyLCBub3QgaW4gdGhlIHRvcCBsZXZlbCB3aGVyZSB0aGUgLnNvIGxpdmVzLiAgQnkgdGhlCisgICAgICAgICMgdGltZSB3ZSd2ZSBnb3R0ZW4gaGVyZSwgUHl0aG9uJ3MgYWxyZWFkeSBiZWVuIGNoZGlyJ2QgdG8gdGhlCisgICAgICAgICMgdGVtcGRpci4KKyAgICAgICAgIworICAgICAgICAjIFRvIGZ1cnRoZXIgYWRkIHRvIHRoZSBmdW4sIHdlIGNhbid0IGp1c3QgYWRkIGxpYnJhcnlfZGlycyB0byB0aGUKKyAgICAgICAgIyBFeHRlbnNpb24oKSBpbnN0YW5jZSBiZWNhdXNlIHRoYXQgZG9lc24ndCBnZXQgcGx1bWJlZCB0aHJvdWdoIHRvIHRoZQorICAgICAgICAjIGZpbmFsIGNvbXBpbGVyIGNvbW1hbmQuCisgICAgICAgIGlmIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKSBhbmQKKyAgICAgICAgICAgIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykpOgorICAgICAgICAgICAgcnVuc2hhcmVkID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdSVU5TSEFSRUQnKQorICAgICAgICAgICAgaWYgcnVuc2hhcmVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY21kLmxpYnJhcnlfZGlycyA9IFsnLiddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWUsIGVxdWFscywgdmFsdWUgPSBydW5zaGFyZWQucGFydGl0aW9uKCc9JykKKyAgICAgICAgICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gdmFsdWUuc3BsaXQob3MucGF0aHNlcCkKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IG9zLnBhdGguZXhpc3RzKF9YWF9NT0RVTEVfUEFUSCksCisgICAgICAgICAgICAgICAgICAgICAneHhtb2R1bGUuYyBub3QgZm91bmQnKQogICAgIGRlZiB0ZXN0X2J1aWxkX2V4dChzZWxmKToKICAgICAgICAgZ2xvYmFsIEFMUkVBRFlfVEVTVEVECiAgICAgICAgIHh4X2MgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAneHhtb2R1bGUuYycpCkBAIC00Miw2ICs3Nyw3IEBACiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ3h4JywgJ2V4dF9tb2R1bGVzJzogW3h4X2V4dF19KQogICAgICAgICBkaXN0LnBhY2thZ2VfZGlyID0gc2VsZi50bXBfZGlyCiAgICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQorICAgICAgICBzZWxmLl9maXh1cF9jb21tYW5kKGNtZCkKICAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICAgICAgIyBPbiBXaW5kb3dzLCB3ZSBtdXN0IGJ1aWxkIGEgZGVidWcgdmVyc2lvbiBpZmYgcnVubmluZwogICAgICAgICAgICAgIyBhIGRlYnVnIGJ1aWxkIG9mIFB5dGhvbgpAQCAtNjcsMjMgKzEwMywxNSBAQAogICAgICAgICBpbXBvcnQgeHgKIAogICAgICAgICBmb3IgYXR0ciBpbiAoJ2Vycm9yJywgJ2ZvbycsICduZXcnLCAncm9qJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cih4eCwgYXR0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih4eCwgYXR0cikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeHguZm9vKDIsIDUpLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4eC5mb28oMTMsMTUpLCAyOCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeHgubmV3KCkuZGVtbygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHh4LmZvbygyLCA1KSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4eC5mb28oMTMsMTUpLCAyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4eC5uZXcoKS5kZW1vKCksIE5vbmUpCiAgICAgICAgIGRvYyA9ICdUaGlzIGlzIGEgdGVtcGxhdGUgbW9kdWxlIGp1c3QgZm9yIGluc3RydWN0aW9uLicKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeHguX19kb2NfXywgZG9jKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4eC5OdWxsKCksIHh4Lk51bGwpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4eC5TdHIoKSwgeHguU3RyKSkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIyBHZXQgZXZlcnl0aGluZyBiYWNrIHRvIG5vcm1hbAotICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKCd4eCcpCi0gICAgICAgIHN5cy5wYXRoID0gc2VsZi5zeXNfcGF0aAotICAgICAgICAjIFhYWCBvbiBXaW5kb3dzIHRoZSB0ZXN0IGxlYXZlcyBhIGRpcmVjdG9yeSB3aXRoIHh4IG1vZHVsZSBpbiBURU1QCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50bXBfZGlyLCBvcy5uYW1lID09ICdudCcgb3Igc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nKQotICAgICAgICBzdXBlcihCdWlsZEV4dFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeHguX19kb2NfXywgZG9jKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4eC5OdWxsKCksIHh4Lk51bGwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4eC5TdHIoKSwgeHguU3RyKSkKIAogICAgIGRlZiB0ZXN0X3NvbGFyaXNfZW5hYmxlX3NoYXJlZChzZWxmKToKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKQEAgLTEwNCw3ICsxMzIsNyBAQAogICAgICAgICAgICAgICAgIF9jb25maWdfdmFyc1snUHlfRU5BQkxFX1NIQVJFRCddID0gb2xkX3ZhcgogCiAgICAgICAgICMgbWFrZSBzdXJlIHdlIGdldCBzb21lIGxpYnJhcnkgZGlycyB1bmRlciBzb2xhcmlzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oY21kLmxpYnJhcnlfZGlycykgPiAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGNtZC5saWJyYXJ5X2RpcnMpID4gMCkKIAogICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIFB5dGhvbidzIGluY2x1ZGUgZGlyZWN0b3JpZXMgKGZvciBQeXRob24uaCwgcHljb25maWcuaCwKQEAgLTExNiwzMSArMTQ0LDMxIEBACiAKICAgICAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogICAgICAgICBweV9pbmNsdWRlID0gc3lzY29uZmlnLmdldF9weXRob25faW5jKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHB5X2luY2x1ZGUgaW4gY21kLmluY2x1ZGVfZGlycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5X2luY2x1ZGUgaW4gY21kLmluY2x1ZGVfZGlycykKIAogICAgICAgICBwbGF0X3B5X2luY2x1ZGUgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKQotICAgICAgICBzZWxmLmFzc2VydF8ocGxhdF9weV9pbmNsdWRlIGluIGNtZC5pbmNsdWRlX2RpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0X3B5X2luY2x1ZGUgaW4gY21kLmluY2x1ZGVfZGlycykKIAogICAgICAgICAjIG1ha2Ugc3VyZSBjbWQubGlicmFyaWVzIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAogICAgICAgICAjIGlmIGl0J3MgYSBzdHJpbmcKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5saWJyYXJpZXMgPSAnbXlfbGliJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtZC5saWJyYXJpZXMsIFsnbXlfbGliJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmxpYnJhcmllcywgWydteV9saWInXSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSBjbWQubGlicmFyeV9kaXJzIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAogICAgICAgICAjIGlmIGl0J3MgYSBzdHJpbmcKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5saWJyYXJ5X2RpcnMgPSAnbXlfbGliX2RpcicKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydF8oJ215X2xpYl9kaXInIGluIGNtZC5saWJyYXJ5X2RpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbXlfbGliX2RpcicgaW4gY21kLmxpYnJhcnlfZGlycykKIAogICAgICAgICAjIG1ha2Ugc3VyZSBycGF0aCBpcyB0dXJuZWQgaW50byBhIGxpc3QKICAgICAgICAgIyBpZiBpdCdzIGEgbGlzdCBvZiBvcy5wYXRoc2VwJ3MgcGF0aHMKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5ycGF0aCA9IG9zLnBhdGhzZXAuam9pbihbJ29uZScsICd0d28nXSkKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjbWQucnBhdGgsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5ycGF0aCwgWydvbmUnLCAndHdvJ10pCiAKICAgICAgICAgIyBYWFggbW9yZSB0ZXN0cyB0byBwZXJmb3JtIGZvciB3aW4zMgogCkBAIC0xNDksMjUgKzE3NywyNSBAQAogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmRlZmluZSA9ICdvbmUsdHdvJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtZC5kZWZpbmUsIFsoJ29uZScsICcxJyksICgndHdvJywgJzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmRlZmluZSwgWygnb25lJywgJzEnKSwgKCd0d28nLCAnMScpXSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSB1bmRlZiBpcyB0dXJuZWQgaW50byBhIGxpc3Qgb2YKICAgICAgICAgIyBzdHJpbmdzIGlmIHRoZXkgYXJlICcsJy1zZXBhcmF0ZWQgc3RyaW5ncwogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLnVuZGVmID0gJ29uZSx0d28nCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLnVuZGVmLCBbJ29uZScsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQudW5kZWYsIFsnb25lJywgJ3R3byddKQogCiAgICAgICAgICMgbWFrZSBzdXJlIHN3aWdfb3B0cyBpcyB0dXJuZWQgaW50byBhIGxpc3QKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5zd2lnX29wdHMgPSBOb25lCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLnN3aWdfb3B0cywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgW10pCiAKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5zd2lnX29wdHMgPSAnMSAyJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtZC5zd2lnX29wdHMsIFsnMScsICcyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgWycxJywgJzInXSkKIAogICAgIGRlZiB0ZXN0X2NoZWNrX2V4dGVuc2lvbnNfbGlzdChzZWxmKToKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCkBAIC0xOTgsMTMgKzIyNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZSc6ICdiYXInfSldCiAgICAgICAgIGNtZC5jaGVja19leHRlbnNpb25zX2xpc3QoZXh0cykKICAgICAgICAgZXh0ID0gZXh0c1swXQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShleHQsIEV4dGVuc2lvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGV4dCwgRXh0ZW5zaW9uKSkKIAogICAgICAgICAjIGNoZWNrX2V4dGVuc2lvbnNfbGlzdCBhZGRzIGluIGV4dCB0aGUgdmFsdWVzIHBhc3NlZAogICAgICAgICAjIHdoZW4gdGhleSBhcmUgaW4gKCdpbmNsdWRlX2RpcnMnLCAnbGlicmFyeV9kaXJzJywgJ2xpYnJhcmllcycKICAgICAgICAgIyAnZXh0cmFfb2JqZWN0cycsICdleHRyYV9jb21waWxlX2FyZ3MnLCAnZXh0cmFfbGlua19hcmdzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXh0LmxpYnJhcmllcywgJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihleHQsICdzb21lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0LmxpYnJhcmllcywgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihleHQsICdzb21lJykpCiAKICAgICAgICAgIyAnbWFjcm9zJyBlbGVtZW50IG9mIGJ1aWxkIGluZm8gZGljdCBtdXN0IGJlIDEtIG9yIDItdHVwbGUKICAgICAgICAgZXh0cyA9IFsoJ2Zvby5iYXInLCB7J3NvdXJjZXMnOiBbJyddLCAnbGlicmFyaWVzJzogJ2ZvbycsCkBAIC0yMTMsMTUgKzI0MSwxNSBAQAogCiAgICAgICAgIGV4dHNbMF1bMV1bJ21hY3JvcyddID0gWygnMScsICcyJyksICgnMycsKV0KICAgICAgICAgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdChleHRzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHRzWzBdLnVuZGVmX21hY3JvcywgWyczJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4dHNbMF0uZGVmaW5lX21hY3JvcywgWygnMScsICcyJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHNbMF0udW5kZWZfbWFjcm9zLCBbJzMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRzWzBdLmRlZmluZV9tYWNyb3MsIFsoJzEnLCAnMicpXSkKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZmlsZXMoc2VsZik6CiAgICAgICAgIG1vZHVsZXMgPSBbRXh0ZW5zaW9uKCdmb28nLCBbJ3h4eCddKV0KICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0X21vZHVsZXMnOiBtb2R1bGVzfSkKICAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21kLmdldF9zb3VyY2VfZmlsZXMoKSwgWyd4eHgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X3NvdXJjZV9maWxlcygpLCBbJ3h4eCddKQogCiAgICAgZGVmIHRlc3RfY29tcGlsZXJfb3B0aW9uKHNlbGYpOgogICAgICAgICAjIGNtZC5jb21waWxlciBpcyBhbiBvcHRpb24gYW5kCkBAIC0yMzIsNyArMjYwLDcgQEAKICAgICAgICAgY21kLmNvbXBpbGVyID0gJ3VuaXgnCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKICAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtZC5jb21waWxlciwgJ3VuaXgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5jb21waWxlciwgJ3VuaXgnKQogCiAgICAgZGVmIHRlc3RfZ2V0X291dHB1dHMoc2VsZik6CiAgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMjQyLDggKzI3MCw5IEBACiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ3h4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dF9tb2R1bGVzJzogW2V4dF19KQogICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgc2VsZi5fZml4dXBfY29tbWFuZChjbWQpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAxKQogCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgICAgIGNtZC5kZWJ1ZyA9IHN5cy5leGVjdXRhYmxlLmVuZHN3aXRoKCJfZC5leGUiKQpAQCAtMjYyLDIwICsyOTEsMjAgQEAKICAgICAgICAgICAgIHNvX2ZpbGUgPSBjbWQuZ2V0X291dHB1dHMoKVswXQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2hkaXIob2xkX3dkKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoc29fZmlsZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnBhdGguc3BsaXRleHQoc29fZmlsZSlbLTFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzb19maWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLnNwbGl0ZXh0KHNvX2ZpbGUpWy0xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJykpCiAgICAgICAgIHNvX2RpciA9IG9zLnBhdGguZGlybmFtZShzb19maWxlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzb19kaXIsIG90aGVyX3RtcF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29fZGlyLCBvdGhlcl90bXBfZGlyKQogICAgICAgICBjbWQuY29tcGlsZXIgPSBOb25lCiAgICAgICAgIGNtZC5pbnBsYWNlID0gMAogICAgICAgICBjbWQucnVuKCkKICAgICAgICAgc29fZmlsZSA9IGNtZC5nZXRfb3V0cHV0cygpWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhzb19maWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNvX2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguc3BsaXRleHQoc29fZmlsZSlbLTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSkKICAgICAgICAgc29fZGlyID0gb3MucGF0aC5kaXJuYW1lKHNvX2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNvX2RpciwgY21kLmJ1aWxkX2xpYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb19kaXIsIGNtZC5idWlsZF9saWIpCiAKICAgICAgICAgIyBpbnBsYWNlID0gMCwgY21kLnBhY2thZ2UgPSAnYmFyJwogICAgICAgICBidWlsZF9weSA9IGNtZC5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX3B5JykKQEAgLTI4Myw3ICszMTIsNyBAQAogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2ZvbycpCiAgICAgICAgICMgY2hlY2tpbmcgdGhhdCB0aGUgbGFzdCBkaXJlY3RvcnkgaXMgdGhlIGJ1aWxkX2RpcgogICAgICAgICBwYXRoID0gb3MucGF0aC5zcGxpdChwYXRoKVswXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXRoLCBjbWQuYnVpbGRfbGliKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIGNtZC5idWlsZF9saWIpCiAKICAgICAgICAgIyBpbnBsYWNlID0gMSwgY21kLnBhY2thZ2UgPSAnYmFyJwogICAgICAgICBjbWQuaW5wbGFjZSA9IDEKQEAgLTI5Nyw3ICszMjYsNyBAQAogICAgICAgICAjIGNoZWNraW5nIHRoYXQgdGhlIGxhc3QgZGlyZWN0b3J5IGlzIGJhcgogICAgICAgICBwYXRoID0gb3MucGF0aC5zcGxpdChwYXRoKVswXQogICAgICAgICBsYXN0ZGlyID0gb3MucGF0aC5zcGxpdChwYXRoKVstMV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGFzdGRpciwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFzdGRpciwgJ2JhcicpCiAKICAgICBkZWYgdGVzdF9leHRfZnVsbHBhdGgoc2VsZik6CiAgICAgICAgIGV4dCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKVsnU08nXQpAQCAtMzA5LDE0ICszMzgsMTQgQEAKICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3NyYycsICdseG1sJywgJ2V0cmVlJyArIGV4dCkKICAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod2FudGVkLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhbnRlZCwgcGF0aCkKIAogICAgICAgICAjIGJ1aWxkaW5nIGx4bWwuZXRyZWUgbm90IGlucGxhY2UKICAgICAgICAgY21kLmlucGxhY2UgPSAwCiAgICAgICAgIGNtZC5idWlsZF9saWIgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAndG1wZGlyJykKICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3RtcGRpcicsICdseG1sJywgJ2V0cmVlJyArIGV4dCkKICAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod2FudGVkLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhbnRlZCwgcGF0aCkKIAogICAgICAgICAjIGJ1aWxkaW5nIHR3aXN0ZWQucnVubmVyLnBvcnRtYXAgbm90IGlucGxhY2UKICAgICAgICAgYnVpbGRfcHkgPSBjbWQuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZF9weScpCkBAIC0zMjUsMTMgKzM1NCwxMyBAQAogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ3R3aXN0ZWQucnVubmVyLnBvcnRtYXAnKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAndG1wZGlyJywgJ3R3aXN0ZWQnLCAncnVubmVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3J0bWFwJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod2FudGVkLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhbnRlZCwgcGF0aCkKIAogICAgICAgICAjIGJ1aWxkaW5nIHR3aXN0ZWQucnVubmVyLnBvcnRtYXAgaW5wbGFjZQogICAgICAgICBjbWQuaW5wbGFjZSA9IDEKICAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCd0d2lzdGVkLnJ1bm5lci5wb3J0bWFwJykKICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3R3aXN0ZWQnLCAncnVubmVyJywgJ3BvcnRtYXAnICsgZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQogCiAgICAgZGVmIHRlc3RfYnVpbGRfZXh0X2lucGxhY2Uoc2VsZik6CiAgICAgICAgIGV0cmVlX2MgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnbHhtbC5ldHJlZS5jJykKQEAgLTM0NiwzMCArMzc1LDM3IEBACiAgICAgICAgIGV4dCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiU08iKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAnc3JjJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQogICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2x4bWwuZXRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh3YW50ZWQsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQogCiAgICAgZGVmIHRlc3Rfc2V0dXB0b29sc19jb21wYXQoc2VsZik6CisgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29yZSwgZGlzdHV0aWxzLmV4dGVuc2lvbiwgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0CisgICAgICAgIHNhdmVkX2V4dCA9IGRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgb24gc29tZSBwbGF0Zm9ybXMsIGl0IGxvYWRzIHRoZSBkZXByZWNhdGVkICJkbCIgbW9kdWxlCiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnc2V0dXB0b29sc19idWlsZF9leHQnLCBkZXByZWNhdGVkPVRydWUpCi0gICAgICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQ6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZnJvbSBzZXR1cHRvb2xzX2J1aWxkX2V4dCBpbXBvcnQgYnVpbGRfZXh0IGFzIHNldHVwdG9vbHNfYnVpbGRfZXh0Ci0gICAgICAgIGZyb20gc2V0dXB0b29sc19leHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbgogCi0gICAgICAgIGV0cmVlX2MgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnbHhtbC5ldHJlZS5jJykKLSAgICAgICAgZXRyZWVfZXh0ID0gRXh0ZW5zaW9uKCdseG1sLmV0cmVlJywgW2V0cmVlX2NdKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdseG1sJywgJ2V4dF9tb2R1bGVzJzogW2V0cmVlX2V4dF19KQotICAgICAgICBjbWQgPSBzZXR1cHRvb2xzX2J1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5pbnBsYWNlID0gMQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VfZGlyID0geycnOiAnc3JjJ30KLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFsnbHhtbCcsICdseG1sLmh0bWwnXQotICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBleHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlNPIikKLSAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3NyYycsICdseG1sJywgJ2V0cmVlJyArIGV4dCkKLSAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMod2FudGVkLCBwYXRoKQorICAgICAgICAgICAgIyB0aGVzZXMgaW1wb3J0IHBhdGNoIERpc3R1dGlscycgRXh0ZW5zaW9uIGNsYXNzCisgICAgICAgICAgICBmcm9tIHNldHVwdG9vbHNfYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgc2V0dXB0b29sc19idWlsZF9leHQKKyAgICAgICAgICAgIGZyb20gc2V0dXB0b29sc19leHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbgorCisgICAgICAgICAgICBldHJlZV9jID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJ2x4bWwuZXRyZWUuYycpCisgICAgICAgICAgICBldHJlZV9leHQgPSBFeHRlbnNpb24oJ2x4bWwuZXRyZWUnLCBbZXRyZWVfY10pCisgICAgICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdseG1sJywgJ2V4dF9tb2R1bGVzJzogW2V0cmVlX2V4dF19KQorICAgICAgICAgICAgY21kID0gc2V0dXB0b29sc19idWlsZF9leHQoZGlzdCkKKyAgICAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgICAgIGNtZC5pbnBsYWNlID0gMQorICAgICAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlX2RpciA9IHsnJzogJ3NyYyd9CisgICAgICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gWydseG1sJywgJ2x4bWwuaHRtbCddCisgICAgICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgZXh0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJTTyIpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAnc3JjJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQorICAgICAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyByZXN0b3JpbmcgRGlzdHV0aWxzJyBFeHRlbnNpb24gY2xhc3Mgb3RoZXJ3aXNlIGl0cyBicm9rZW4KKyAgICAgICAgICAgIGRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uID0gc2F2ZWRfZXh0CisgICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5FeHRlbnNpb24gPSBzYXZlZF9leHQKKyAgICAgICAgICAgIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dC5FeHRlbnNpb24gPSBzYXZlZF9leHQKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2V4dF9wYXRoX3dpdGhfb3Nfc2VwKHNlbGYpOgogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdVcGRhdGVNYW5hZ2VyJ30pCkBAIC0zNzksNyArNDE1LDcgQEAKICAgICAgICAgZXh0X25hbWUgPSBvcy5wYXRoLmpvaW4oJ1VwZGF0ZU1hbmFnZXInLCAnZmRzZW5kJykKICAgICAgICAgZXh0X3BhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aChleHRfbmFtZSkKICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdVcGRhdGVNYW5hZ2VyJywgJ2Zkc2VuZCcgKyBleHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4dF9wYXRoLCB3YW50ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0X3BhdGgsIHdhbnRlZCkKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2V4dF9wYXRoX2Nyb3NzX3BsYXRmb3JtKHNlbGYpOgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKQEAgLTM5MiwxNiArNDI4LDEwIEBACiAgICAgICAgIGV4dF9uYW1lID0gJ1VwZGF0ZU1hbmFnZXIvZmRzZW5kJwogICAgICAgICBleHRfcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKGV4dF9uYW1lKQogICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2xpYiwgJ1VwZGF0ZU1hbmFnZXInLCAnZmRzZW5kJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXh0X3BhdGgsIHdhbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRfcGF0aCwgd2FudGVkKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgotICAgIHNyYyA9IF9nZXRfc291cmNlX2ZpbGVuYW1lKCkKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3JjKToKLSAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAoJ3Rlc3RfYnVpbGRfZXh0OiBDYW5ub3QgZmluZCBzb3VyY2UgY29kZSAodGVzdCcKLSAgICAgICAgICAgICAgICAgICAnIG11c3QgcnVuIGluIHB5dGhvbiBidWlsZCBkaXIpJykKLSAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgZWxzZTogcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZEV4dFRlc3RDYXNlKQorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRFeHRUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCA0YTA1NGYyLi45MzdmYTBjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0xMCwyMCArMTAsMjUgQEAKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRmlsZUVycm9yCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBCdWlsZFB5VGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF9wYWNrYWdlX2RhdGEoc2VsZik6CisgICAgZGVmIF9zZXR1cF9wYWNrYWdlX2RhdGEoc2VsZik6CiAgICAgICAgIHNvdXJjZXMgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc291cmNlcywgIl9faW5pdF9fLnB5IiksICJ3IikKLSAgICAgICAgZi53cml0ZSgiIyBQcmV0ZW5kIHRoaXMgaXMgYSBwYWNrYWdlLiIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCIjIFByZXRlbmQgdGhpcyBpcyBhIHBhY2thZ2UuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc291cmNlcywgIlJFQURNRS50eHQiKSwgInciKQotICAgICAgICBmLndyaXRlKCJJbmZvIGFib3V0IHRoaXMgcGFja2FnZSIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJJbmZvIGFib3V0IHRoaXMgcGFja2FnZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYubWtkdGVtcCgpCiAKQEAgLTUyLDkgKzU3LDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgMykKICAgICAgICAgcGtnZGVzdCA9IG9zLnBhdGguam9pbihkZXN0aW5hdGlvbiwgInBrZyIpCiAgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwa2dkZXN0KQotICAgICAgICBzZWxmLmFzc2VydF8oIl9faW5pdF9fLnB5IiBpbiBmaWxlcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJfX2luaXRfXy5weWMiIGluIGZpbGVzKQotICAgICAgICBzZWxmLmFzc2VydF8oIlJFQURNRS50eHQiIGluIGZpbGVzKQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfZGF0YShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBzZWxmLl9zZXR1cF9wYWNrYWdlX2RhdGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9faW5pdF9fLnB5IiBpbiBmaWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJSRUFETUUudHh0IiBpbiBmaWxlcykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAicHljIGZpbGVzIGFyZSBub3Qgd3JpdHRlbiB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3BhY2thZ2VfZGF0YV9weWMoc2VsZik6CisgICAgICAgIGZpbGVzID0gc2VsZi5fc2V0dXBfcGFja2FnZV9kYXRhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfX2luaXRfXy5weWMiIGluIGZpbGVzKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfcGFja2FnZV9kaXIgKHNlbGYpOgogICAgICAgICAjIFNlZSBTRiAxNjY4NTk2LzE3MjA4OTcuCkBAIC0xMTAsNCArMTI0LDQgQEAKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJ1aWxkUHlUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weQppbmRleCBiNTVlYjU4Li40ZGE5M2NjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weQpAQCAtNSw5ICs1LDEwIEBACiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0cyBpbXBvcnQgYnVpbGRfc2NyaXB0cwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgc3lzY29uZmlnCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBCdWlsZFNjcmlwdHNUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLApAQCAtMTYsMTIgKzE3LDEyIEBACiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3NldHRpbmdzKHNlbGYpOgogICAgICAgICBjbWQgPSBzZWxmLmdldF9idWlsZF9zY3JpcHRzX2NtZCgiL2Zvby9iYXIiLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjbWQuZm9yY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWQuYnVpbGRfZGlyIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY21kLmZvcmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmJ1aWxkX2RpciBpcyBOb25lKQogCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oY21kLmZvcmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmZvcmNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9kaXIsICIvZm9vL2JhciIpCiAKICAgICBkZWYgdGVzdF9idWlsZChzZWxmKToKQEAgLTM3LDcgKzM4LDcgQEAKIAogICAgICAgICBidWlsdCA9IG9zLmxpc3RkaXIodGFyZ2V0KQogICAgICAgICBmb3IgbmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuYW1lIGluIGJ1aWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gYnVpbHQpCiAKICAgICBkZWYgZ2V0X2J1aWxkX3NjcmlwdHNfY21kKHNlbGYsIHRhcmdldCwgc2NyaXB0cyk6CiAgICAgICAgIGltcG9ydCBzeXMKQEAgLTcxLDggKzcyLDEwIEBACiAKICAgICBkZWYgd3JpdGVfc2NyaXB0KHNlbGYsIGRpciwgbmFtZSwgdGV4dCk6CiAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihkaXIsIG5hbWUpLCAidyIpCi0gICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9pbnQoc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYubWtkdGVtcCgpCkBAIC05MSwxOSArOTQsMTkgQEAKICAgICAgICAgIyAtLXdpdGgtc3VmZml4PTNgLCBweXRob24gaXMgY29tcGlsZWQgb2theSBidXQgdGhlIGJ1aWxkIHNjcmlwdHMKICAgICAgICAgIyBmYWlsZWQgd2hlbiB3cml0aW5nIHRoZSBuYW1lIG9mIHRoZSBleGVjdXRhYmxlCiAgICAgICAgIG9sZCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKS5nZXQoJ1ZFUlNJT04nKQotICAgICAgICBzeXNjb25maWcuX2NvbmZpZ192YXJzWydWRVJTSU9OJ10gPSA0CisgICAgICAgIHN5c2NvbmZpZy5fQ09ORklHX1ZBUlNbJ1ZFUlNJT04nXSA9IDQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY21kLnJ1bigpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBvbGQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3lzY29uZmlnLl9jb25maWdfdmFyc1snVkVSU0lPTiddID0gb2xkCisgICAgICAgICAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSU1snVkVSU0lPTiddID0gb2xkCiAKICAgICAgICAgYnVpbHQgPSBvcy5saXN0ZGlyKHRhcmdldCkKICAgICAgICAgZm9yIG5hbWUgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obmFtZSBpbiBidWlsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIGJ1aWx0KQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRTY3JpcHRzVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2NvbXBpbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTg3M2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2NvbXBpbGVyLnB5CkBAIC0wLDAgKzEsODEgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY2NvbXBpbGVyLiIiIgoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dAorCitmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IChnZW5fbGliX29wdGlvbnMsIENDb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kZWZhdWx0X2NvbXBpbGVyLCBjdXN0b21pemVfY29tcGlsZXIpCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgZGVidWcKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CisKK2NsYXNzIEZha2VDb21waWxlcihvYmplY3QpOgorICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKKyAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKworICAgIGRlZiBydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgorICAgICAgICByZXR1cm4gWyItY29vbCIsICItUiIgKyBkaXJdCisKKyAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgZGlycywgbGliLCBkZWJ1Zz0wKToKKyAgICAgICAgcmV0dXJuICdmb3VuZCcKKworICAgIGRlZiBsaWJyYXJ5X29wdGlvbihzZWxmLCBsaWIpOgorICAgICAgICByZXR1cm4gIi1sIiArIGxpYgorCitjbGFzcyBDQ29tcGlsZXJUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ2VuX2xpYl9vcHRpb25zKHNlbGYpOgorICAgICAgICBjb21waWxlciA9IEZha2VDb21waWxlcigpCisgICAgICAgIGxpYmRpcnMgPSBbJ2xpYjEnLCAnbGliMiddCisgICAgICAgIHJ1bmxpYmRpcnMgPSBbJ3J1bmxpYjEnXQorICAgICAgICBsaWJzID0gW29zLnBhdGguam9pbignZGlyJywgJ25hbWUnKSwgJ25hbWUyJ10KKworICAgICAgICBvcHRzID0gZ2VuX2xpYl9vcHRpb25zKGNvbXBpbGVyLCBsaWJkaXJzLCBydW5saWJkaXJzLCBsaWJzKQorICAgICAgICB3YW50ZWQgPSBbJy1MbGliMScsICctTGxpYjInLCAnLWNvb2wnLCAnLVJydW5saWIxJywgJ2ZvdW5kJywKKyAgICAgICAgICAgICAgICAgICctbG5hbWUyJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB3YW50ZWQpCisKKyAgICBkZWYgdGVzdF9kZWJ1Z19wcmludChzZWxmKToKKworICAgICAgICBjbGFzcyBNeUNDb21waWxlcihDQ29tcGlsZXIpOgorICAgICAgICAgICAgZXhlY3V0YWJsZXMgPSB7fQorCisgICAgICAgIGNvbXBpbGVyID0gTXlDQ29tcGlsZXIoKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIGNvbXBpbGVyLmRlYnVnX3ByaW50KCd4eHgnKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQorCisgICAgICAgIGRlYnVnLkRFQlVHID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBjb21waWxlci5kZWJ1Z19wcmludCgneHh4JykKKyAgICAgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICd4eHhcbicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWJ1Zy5ERUJVRyA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9jdXN0b21pemVfY29tcGlsZXIoc2VsZik6CisKKyAgICAgICAgIyBub3QgdGVzdGluZyBpZiBkZWZhdWx0IGNvbXBpbGVyIGlzIG5vdCB1bml4CisgICAgICAgIGlmIGdldF9kZWZhdWx0X2NvbXBpbGVyKCkgIT0gJ3VuaXgnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3MuZW52aXJvblsnQVInXSA9ICdteV9hcicKKyAgICAgICAgb3MuZW52aXJvblsnQVJGTEFHUyddID0gJy1hcmZsYWdzJworCisgICAgICAgICMgbWFrZSBzdXJlIEFSIGdldHMgY2F1Z2h0CisgICAgICAgIGNsYXNzIGNvbXBpbGVyOgorICAgICAgICAgICAgY29tcGlsZXJfdHlwZSA9ICd1bml4JworCisgICAgICAgICAgICBkZWYgc2V0X2V4ZWN1dGFibGVzKHNlbGYsICoqa3cpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhlcyA9IGt3CisKKyAgICAgICAgY29tcCA9IGNvbXBpbGVyKCkKKyAgICAgICAgY3VzdG9taXplX2NvbXBpbGVyKGNvbXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcC5leGVzWydhcmNoaXZlciddLCAnbXlfYXIgLWFyZmxhZ3MnKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ0NvbXBpbGVyVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2hlY2sucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2hlY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhODNkYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weQpAQCAtMCwwICsxLDk5IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2suIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmNoZWNrIGltcG9ydCBjaGVjaywgSEFTX0RPQ1VUSUxTCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNTZXR1cEVycm9yCisKK2NsYXNzIENoZWNrVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfcnVuKHNlbGYsIG1ldGFkYXRhPU5vbmUsICoqb3B0aW9ucyk6CisgICAgICAgIGlmIG1ldGFkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBtZXRhZGF0YSA9IHt9CisgICAgICAgIHBrZ19pbmZvLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgqKm1ldGFkYXRhKQorICAgICAgICBjbWQgPSBjaGVjayhkaXN0KQorICAgICAgICBjbWQuaW5pdGlhbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG9wdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIoY21kLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgcmV0dXJuIGNtZAorCisgICAgZGVmIHRlc3RfY2hlY2tfbWV0YWRhdGEoc2VsZik6CisgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kIHdpdGggbm8gbWV0YWRhdGEgYXQgYWxsCisgICAgICAgICMgYnkgZGVmYXVsdCwgY2hlY2sgaXMgY2hlY2tpbmcgdGhlIG1ldGFkYXRhCisgICAgICAgICMgc2hvdWxkIGhhdmUgc29tZSB3YXJuaW5ncworICAgICAgICBjbWQgPSBzZWxmLl9ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDIpCisKKyAgICAgICAgIyBub3cgbGV0J3MgYWRkIHRoZSByZXF1aXJlZCBmaWVsZHMKKyAgICAgICAgIyBhbmQgcnVuIGl0IGFnYWluLCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0CisgICAgICAgICMgYW55IHdhcm5pbmcgYW55bW9yZQorICAgICAgICBtZXRhZGF0YSA9IHsndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICd4eHgnLCAndmVyc2lvbic6ICd4eHgnfQorICAgICAgICBjbWQgPSBzZWxmLl9ydW4obWV0YWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMCkKKworICAgICAgICAjIG5vdyB3aXRoIHRoZSBzdHJpY3QgbW9kZSwgd2Ugc2hvdWxkCisgICAgICAgICMgZ2V0IGFuIGVycm9yIGlmIHRoZXJlIGFyZSBtaXNzaW5nIG1ldGFkYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIHNlbGYuX3J1biwge30sICoqeydzdHJpY3QnOiAxfSkKKworICAgICAgICAjIGFuZCBvZiBjb3Vyc2UsIG5vIGVycm9yIHdoZW4gYWxsIG1ldGFkYXRhIGFyZSBwcmVzZW50CisgICAgICAgIGNtZCA9IHNlbGYuX3J1bihtZXRhZGF0YSwgc3RyaWN0PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2RvY3VtZW50KHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX0RPQ1VUSUxTOiAjIHdvbid0IHRlc3Qgd2l0aG91dCBkb2N1dGlscworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBrZ19pbmZvLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGNoZWNrKGRpc3QpCisKKyAgICAgICAgIyBsZXQncyBzZWUgaWYgaXQgZGV0ZWN0cyBicm9rZW4gcmVzdAorICAgICAgICBicm9rZW5fcmVzdCA9ICd0aXRsZVxuPT09XG5cbnRlc3QnCisgICAgICAgIG1zZ3MgPSBjbWQuX2NoZWNrX3JzdF9kYXRhKGJyb2tlbl9yZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtc2dzKSwgMSkKKworICAgICAgICAjIGFuZCBub24tYnJva2VuIHJlc3QKKyAgICAgICAgcmVzdCA9ICd0aXRsZVxuPT09PT1cblxudGVzdCcKKyAgICAgICAgbXNncyA9IGNtZC5fY2hlY2tfcnN0X2RhdGEocmVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNncyksIDApCisKKyAgICBkZWYgdGVzdF9jaGVja19yZXN0cnVjdHVyZWR0ZXh0KHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX0RPQ1VUSUxTOiAjIHdvbid0IHRlc3Qgd2l0aG91dCBkb2N1dGlscworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgbGV0J3Mgc2VlIGlmIGl0IGRldGVjdHMgYnJva2VuIHJlc3QgaW4gbG9uZ19kZXNjcmlwdGlvbgorICAgICAgICBicm9rZW5fcmVzdCA9ICd0aXRsZVxuPT09XG5cbnRlc3QnCisgICAgICAgIHBrZ19pbmZvLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdChsb25nX2Rlc2NyaXB0aW9uPWJyb2tlbl9yZXN0KQorICAgICAgICBjbWQgPSBjaGVjayhkaXN0KQorICAgICAgICBjbWQuY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMSkKKworICAgICAgICAjIGxldCdzIHNlZSBpZiB3ZSBoYXZlIGFuIGVycm9yIHdpdGggc3RyaWN0PTEKKyAgICAgICAgbWV0YWRhdGEgPSB7J3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgJ2xvbmdfZGVzY3JpcHRpb24nOiBicm9rZW5fcmVzdH0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgc2VsZi5fcnVuLCBtZXRhZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKip7J3N0cmljdCc6IDEsICdyZXN0cnVjdHVyZWR0ZXh0JzogMX0pCisKKyAgICAgICAgIyBhbmQgbm9uLWJyb2tlbiByZXN0CisgICAgICAgIG1ldGFkYXRhWydsb25nX2Rlc2NyaXB0aW9uJ10gPSAndGl0bGVcbj09PT09XG5cbnRlc3QnCisgICAgICAgIGNtZCA9IHNlbGYuX3J1bihtZXRhZGF0YSwgc3RyaWN0PTEsIHJlc3RydWN0dXJlZHRleHQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAwKQorCisgICAgZGVmIHRlc3RfY2hlY2tfYWxsKHNlbGYpOgorCisgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnfQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBzZWxmLl9ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHt9LCAqKnsnc3RyaWN0JzogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN0cnVjdHVyZWR0ZXh0JzogMX0pCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDaGVja1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2xlYW4ucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2xlYW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxNjEwZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weQpAQCAtMCwwICsxLDUxIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuY2xlYW4uIiIiCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGdldHBhc3MKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5jbGVhbiBpbXBvcnQgY2xlYW4KK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworY2xhc3MgY2xlYW5UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3J1bihzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBjbGVhbihkaXN0KQorCisgICAgICAgICMgbGV0J3MgYWRkIHNvbWUgZWxlbWVudHMgY2xlYW4gc2hvdWxkIHJlbW92ZQorICAgICAgICBkaXJzID0gWyhkLCBvcy5wYXRoLmpvaW4ocGtnX2RpciwgZCkpCisgICAgICAgICAgICAgICAgZm9yIGQgaW4gKCdidWlsZF90ZW1wJywgJ2J1aWxkX2xpYicsICdiZGlzdF9iYXNlJywKKyAgICAgICAgICAgICAgICAnYnVpbGRfc2NyaXB0cycsICdidWlsZF9iYXNlJyldCisKKyAgICAgICAgZm9yIG5hbWUsIHBhdGggaW4gZGlyczoKKyAgICAgICAgICAgIG9zLm1rZGlyKHBhdGgpCisgICAgICAgICAgICBzZXRhdHRyKGNtZCwgbmFtZSwgcGF0aCkKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2J1aWxkX2Jhc2UnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgZiBpbiAoJ29uZScsICd0d28nLCAndGhyZWUnKToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2ZpbGUob3MucGF0aC5qb2luKHBhdGgsIGYpKQorCisgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCisgICAgICAgIGNtZC5hbGwgPSAxCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGZpbGVzIHdoZXJlIHJlbW92ZWQKKyAgICAgICAgZm9yIG5hbWUsIHBhdGggaW4gZGlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyVzIHdhcyBub3QgcmVtb3ZlZCcgJSBwYXRoKQorCisgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kIGFnYWluIChzaG91bGQgc3BpdCB3YXJuaW5ncyBidXQgc3VjZWVkKQorICAgICAgICBjbWQuYWxsID0gMQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoY2xlYW5UZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NtZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NDA5OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbWQucHkKQEAgLTAsMCArMSwxMjcgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY21kLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAorZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgZGVidWcKKworY2xhc3MgTXlDbWQoQ29tbWFuZCk6CisgICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBDb21tYW5kVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgc2VsZi5jbWQgPSBNeUNtZChkaXN0KQorCisgICAgZGVmIHRlc3RfZW5zdXJlX3N0cmluZ19saXN0KHNlbGYpOgorCisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIGNtZC5ub3Rfc3RyaW5nX2xpc3QgPSBbJ29uZScsIDIsICd0aHJlZSddCisgICAgICAgIGNtZC55ZXNfc3RyaW5nX2xpc3QgPSBbJ29uZScsICd0d28nLCAndGhyZWUnXQorICAgICAgICBjbWQubm90X3N0cmluZ19saXN0MiA9IG9iamVjdCgpCisgICAgICAgIGNtZC55ZXNfc3RyaW5nX2xpc3QyID0gJ29rJworICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCd5ZXNfc3RyaW5nX2xpc3QnKQorICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCd5ZXNfc3RyaW5nX2xpc3QyJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCwgJ25vdF9zdHJpbmdfbGlzdCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nX2xpc3QsICdub3Rfc3RyaW5nX2xpc3QyJykKKworICAgIGRlZiB0ZXN0X21ha2VfZmlsZShzZWxmKToKKworICAgICAgICBjbWQgPSBzZWxmLmNtZAorCisgICAgICAgICMgbWFraW5nIHN1cmUgaXQgcmFpc2VzIHdoZW4gaW5maWxlcyBpcyBub3QgYSBzdHJpbmcgb3IgYSBsaXN0L3R1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21kLm1ha2VfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5maWxlcz0xLCBvdXRmaWxlPScnLCBmdW5jPSdmdW5jJywgYXJncz0oKSkKKworICAgICAgICAjIG1ha2luZyBzdXJlIGV4ZWN1dGUgZ2V0cyBjYWxsZWQgcHJvcGVybHkKKyAgICAgICAgZGVmIF9leGVjdXRlKGZ1bmMsIGFyZ3MsIGV4ZWNfbXNnLCBsZXZlbCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4ZWNfbXNnLCAnZ2VuZXJhdGluZyBvdXQgZnJvbSBpbicpCisgICAgICAgIGNtZC5mb3JjZSA9IFRydWUKKyAgICAgICAgY21kLmV4ZWN1dGUgPSBfZXhlY3V0ZQorICAgICAgICBjbWQubWFrZV9maWxlKGluZmlsZXM9J2luJywgb3V0ZmlsZT0nb3V0JywgZnVuYz0nZnVuYycsIGFyZ3M9KCkpCisKKyAgICBkZWYgdGVzdF9kdW1wX29wdGlvbnMoc2VsZik6CisKKyAgICAgICAgbXNncyA9IFtdCisgICAgICAgIGRlZiBfYW5ub3VuY2UobXNnLCBsZXZlbCk6CisgICAgICAgICAgICBtc2dzLmFwcGVuZChtc2cpCisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIGNtZC5hbm5vdW5jZSA9IF9hbm5vdW5jZQorICAgICAgICBjbWQub3B0aW9uMSA9IDEKKyAgICAgICAgY21kLm9wdGlvbjIgPSAxCisgICAgICAgIGNtZC51c2VyX29wdGlvbnMgPSBbKCdvcHRpb24xJywgJycsICcnKSwgKCdvcHRpb24yJywgJycsICcnKV0KKyAgICAgICAgY21kLmR1bXBfb3B0aW9ucygpCisKKyAgICAgICAgd2FudGVkID0gWyJjb21tYW5kIG9wdGlvbnMgZm9yICdNeUNtZCc6IiwgJyAgb3B0aW9uMSA9IDEnLAorICAgICAgICAgICAgICAgICAgJyAgb3B0aW9uMiA9IDEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ3MsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9zdHJpbmcoc2VsZik6CisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIGNtZC5vcHRpb24xID0gJ29rJworICAgICAgICBjbWQuZW5zdXJlX3N0cmluZygnb3B0aW9uMScpCisKKyAgICAgICAgY21kLm9wdGlvbjIgPSBOb25lCisgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nKCdvcHRpb24yJywgJ3h4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGNtZCwgJ29wdGlvbjInKSkKKworICAgICAgICBjbWQub3B0aW9uMyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5lbnN1cmVfc3RyaW5nLCAnb3B0aW9uMycpCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfc3RyaW5nX2xpc3Qoc2VsZik6CisgICAgICAgIGNtZCA9IHNlbGYuY21kCisgICAgICAgIGNtZC5vcHRpb24xID0gJ29rLGRvaycKKyAgICAgICAgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCgnb3B0aW9uMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm9wdGlvbjEsIFsnb2snLCAnZG9rJ10pCisKKyAgICAgICAgY21kLm9wdGlvbjIgPSBbJ3h4eCcsICd3d3cnXQorICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCdvcHRpb24yJykKKworICAgICAgICBjbWQub3B0aW9uMyA9IFsnb2snLCAyXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbjMnKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBjbWQgPSBzZWxmLmNtZAorICAgICAgICBjbWQub3B0aW9uMSA9IF9fZmlsZV9fCisgICAgICAgIGNtZC5lbnN1cmVfZmlsZW5hbWUoJ29wdGlvbjEnKQorICAgICAgICBjbWQub3B0aW9uMiA9ICd4eHgnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZW5zdXJlX2ZpbGVuYW1lLCAnb3B0aW9uMicpCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfZGlybmFtZShzZWxmKToKKyAgICAgICAgY21kID0gc2VsZi5jbWQKKyAgICAgICAgY21kLm9wdGlvbjEgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgorICAgICAgICBjbWQuZW5zdXJlX2Rpcm5hbWUoJ29wdGlvbjEnKQorICAgICAgICBjbWQub3B0aW9uMiA9ICd4eHgnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZW5zdXJlX2Rpcm5hbWUsICdvcHRpb24yJykKKworICAgIGRlZiB0ZXN0X2RlYnVnX3ByaW50KHNlbGYpOgorICAgICAgICBjbWQgPSBzZWxmLmNtZAorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIGNtZC5kZWJ1Z19wcmludCgneHh4JykKKyAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAnJykKKworICAgICAgICBkZWJ1Zy5ERUJVRyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICAgICAgY21kLmRlYnVnX3ByaW50KCd4eHgnKQorICAgICAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJ3h4eFxuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlYnVnLkRFQlVHID0gRmFsc2UKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKENvbW1hbmRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKaW5kZXggMjMyOTFkYS4uY2ZkMDk2ZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CkBAIC0yLDYgKzIsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KQEAgLTksNiArMTEsNyBAQAogZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBXQVJOCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogUFlQSVJDID0gIiIiXAogW2Rpc3R1dGlsc10KQEAgLTQ1LDE4ICs0OCwxNyBAQAogIiIiCiAKIAotY2xhc3MgUHlQSVJDQ29tbWFuZFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiUGF0Y2hlcyB0aGUgZW52aXJvbm1lbnQuIiIiCiAgICAgICAgIHN1cGVyKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQotICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0hPTUUnKToKLSAgICAgICAgICAgIHNlbGYuX29sZF9ob21lID0gb3MuZW52aXJvblsnSE9NRSddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9vbGRfaG9tZSA9IE5vbmUKLSAgICAgICAgdGVtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRlbXBkaXIKLSAgICAgICAgc2VsZi5yYyA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLnB5cGlyYycpCisgICAgICAgIHNlbGYudG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHNlbGYudG1wX2RpcgorICAgICAgICBzZWxmLnJjID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJy5weXBpcmMnKQogICAgICAgICBzZWxmLmRpc3QgPSBEaXN0cmlidXRpb24oKQogCiAgICAgICAgIGNsYXNzIGNvbW1hbmQoUHlQSVJDQ29tbWFuZCk6CkBAIC03MSwxMCArNzMsNiBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZW1vdmVzIHRoZSBwYXRjaC4iIiIKLSAgICAgICAgaWYgc2VsZi5fb2xkX2hvbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWydIT01FJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHNlbGYuX29sZF9ob21lCiAgICAgICAgIHNldF90aHJlc2hvbGQoc2VsZi5vbGRfdGhyZXNob2xkKQogICAgICAgICBzdXBlcihQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIApAQCAtODQsMTIgKzgyLDcgQEAKICAgICAgICAgIyAyLiBoYW5kbGUgdGhlIG9sZCBmb3JtYXQKIAogICAgICAgICAjIG5ldyBmb3JtYXQKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5yYywgJ3cnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKFBZUElSQykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShzZWxmLnJjLCBQWVBJUkMpCiAgICAgICAgIGNtZCA9IHNlbGYuX2NtZChzZWxmLmRpc3QpCiAgICAgICAgIGNvbmZpZyA9IGNtZC5fcmVhZF9weXBpcmMoKQogCkBAIC05OCwzNyArOTEsMzMgQEAKICAgICAgICAgd2FpdGVkID0gWygncGFzc3dvcmQnLCAnc2VjcmV0JyksICgncmVhbG0nLCAncHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyMScpLCAoJ3VzZXJuYW1lJywgJ21lJyldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbmZpZywgd2FpdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmZpZywgd2FpdGVkKQogCiAgICAgICAgICMgb2xkIGZvcm1hdAotICAgICAgICBmID0gb3BlbihzZWxmLnJjLCAndycpCi0gICAgICAgIGYud3JpdGUoUFlQSVJDX09MRCkKLSAgICAgICAgZi5jbG9zZSgpCi0KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQ19PTEQpCiAgICAgICAgIGNvbmZpZyA9IGNtZC5fcmVhZF9weXBpcmMoKQogICAgICAgICBjb25maWcgPSBjb25maWcuaXRlbXMoKQogICAgICAgICBjb25maWcuc29ydCgpCiAgICAgICAgIHdhaXRlZCA9IFsoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLCAoJ3JlYWxtJywgJ3B5cGknKSwKICAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKICAgICAgICAgICAgICAgICAgICgnc2VydmVyJywgJ3NlcnZlci1sb2dpbicpLCAoJ3VzZXJuYW1lJywgJ3RhcmVrJyldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbmZpZywgd2FpdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmZpZywgd2FpdGVkKQogCiAgICAgZGVmIHRlc3Rfc2VydmVyX2VtcHR5X3JlZ2lzdHJhdGlvbihzZWxmKToKLQogICAgICAgICBjbWQgPSBzZWxmLl9jbWQoc2VsZi5kaXN0KQogICAgICAgICByYyA9IGNtZC5fZ2V0X3JjX2ZpbGUoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG9zLnBhdGguZXhpc3RzKHJjKSkKLQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHJjKSkKICAgICAgICAgY21kLl9zdG9yZV9weXBpcmMoJ3RhcmVrJywgJ3h4eCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHJjKSkKLSAgICAgICAgY29udGVudCA9IG9wZW4ocmMpLnJlYWQoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvbnRlbnQsIFdBTlRFRCkKLQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmMpKQorICAgICAgICBmID0gb3BlbihyYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsIFdBTlRFRCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnX2NtZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWdfY21kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNmExZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnX2NtZC5weQpAQCAtMCwwICsxLDkwIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlnLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRpc3R1dGlscy5jb21tYW5kLmNvbmZpZyBpbXBvcnQgZHVtcF9maWxlLCBjb25maWcKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCisKK2NsYXNzIENvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfaW5mbyhzZWxmLCBtc2csICphcmdzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gbXNnLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKGxpbmUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKENvbmZpZ1Rlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuX2xvZ3MgPSBbXQorICAgICAgICBzZWxmLm9sZF9sb2cgPSBsb2cuaW5mbworICAgICAgICBsb2cuaW5mbyA9IHNlbGYuX2luZm8KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgbG9nLmluZm8gPSBzZWxmLm9sZF9sb2cKKyAgICAgICAgc3VwZXIoQ29uZmlnVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2R1bXBfZmlsZShzZWxmKToKKyAgICAgICAgdGhpc19maWxlID0gb3MucGF0aC5zcGxpdGV4dChfX2ZpbGVfXylbMF0gKyAnLnB5JworICAgICAgICBmID0gb3Blbih0aGlzX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG51bWxpbmVzID0gbGVuKGYucmVhZGxpbmVzKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBkdW1wX2ZpbGUodGhpc19maWxlLCAnSSBhbSB0aGUgaGVhZGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fbG9ncyksIG51bWxpbmVzKzEpCisKKyAgICBkZWYgdGVzdF9zZWFyY2hfY3BwKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCisgICAgICAgIGNtZCA9IGNvbmZpZyhkaXN0KQorCisgICAgICAgICMgc2ltcGxlIHBhdHRlcm4gc2VhcmNoZXMKKyAgICAgICAgbWF0Y2ggPSBjbWQuc2VhcmNoX2NwcChwYXR0ZXJuPSd4eHgnLCBib2R5PScvLyB4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLCAwKQorCisgICAgICAgIG1hdGNoID0gY21kLnNlYXJjaF9jcHAocGF0dGVybj0nX2NvbmZpZ3Rlc3QnLCBib2R5PScvLyB4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLCAxKQorCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgIyBmaW5hbGl6ZV9vcHRpb25zIGRvZXMgYSBiaXQgb2YgdHJhbnNmb3JtYXRpb24KKyAgICAgICAgIyBvbiBvcHRpb25zCisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gY29uZmlnKGRpc3QpCisgICAgICAgIGNtZC5pbmNsdWRlX2RpcnMgPSAnb25lJXN0d28nICUgb3MucGF0aHNlcAorICAgICAgICBjbWQubGlicmFyaWVzID0gJ29uZScKKyAgICAgICAgY21kLmxpYnJhcnlfZGlycyA9ICd0aHJlZSVzZm91cicgJSBvcy5wYXRoc2VwCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5pbmNsdWRlX2RpcnMsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5saWJyYXJpZXMsIFsnb25lJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmxpYnJhcnlfZGlycywgWyd0aHJlZScsICdmb3VyJ10pCisKKyAgICBkZWYgdGVzdF9jbGVhbihzZWxmKToKKyAgICAgICAgIyBfY2xlYW4gcmVtb3ZlcyBmaWxlcworICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZjEgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ29uZScpCisgICAgICAgIGYyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICd0d28nKQorCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmMSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmMiwgJ3h4eCcpCisKKyAgICAgICAgZm9yIGYgaW4gKGYxLCBmMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZikpCisKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBjb25maWcoZGlzdCkKKyAgICAgICAgY21kLl9jbGVhbihmMSwgZjIpCisKKyAgICAgICAgZm9yIGYgaW4gKGYxLCBmMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKGYpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ29uZmlnVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb3JlLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkKaW5kZXggZTQ4MWU4ZC4uMGQ5NzliYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkKQEAgLTYsOCArNiw5IEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKLQorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIAogIyBzZXR1cCBzY3JpcHQgdGhhdCB1c2VzIF9fZmlsZV9fCiBzZXR1cF91c2luZ19fX2ZpbGVfXyA9ICIiIlwKQEAgLTI4LDE1ICsyOSwyMCBAQAogIiIiCiAKIAotY2xhc3MgQ29yZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENvcmVUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihDb3JlVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi5vbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLmNsZWFudXBfdGVzdGZuKCkKKyAgICAgICAgc2VsZi5vbGRfYXJndiA9IHN5cy5hcmd2LCBzeXMuYXJndls6XQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vbGRfc3Rkb3V0CiAgICAgICAgIHNlbGYuY2xlYW51cF90ZXN0Zm4oKQorICAgICAgICBzeXMuYXJndiA9IHNlbGYub2xkX2FyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLm9sZF9hcmd2WzFdCisgICAgICAgIHN1cGVyKENvcmVUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIGNsZWFudXBfdGVzdGZuKHNlbGYpOgogICAgICAgICBwYXRoID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCkBAIC00Niw3ICs1MiwxMSBAQAogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQogCiAgICAgZGVmIHdyaXRlX3NldHVwKHNlbGYsIHRleHQsIHBhdGg9dGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOKToKLSAgICAgICAgb3BlbihwYXRoLCAidyIpLndyaXRlKHRleHQpCisgICAgICAgIGYgPSBvcGVuKHBhdGgsICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHJldHVybiBwYXRoCiAKICAgICBkZWYgdGVzdF9ydW5fc2V0dXBfcHJvdmlkZXNfZmlsZShzZWxmKToKQEAgLTczLDkgKzgzLDI2IEBACiAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXRbOi0xXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN3ZCwgb3V0cHV0KQogCisgICAgZGVmIHRlc3RfZGVidWdfbW9kZShzZWxmKToKKyAgICAgICAgIyB0aGlzIGNvdmVycyB0aGUgY29kZSBjYWxsZWQgd2hlbiBERUJVRyBpcyBzZXQKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ3NldHVwLnB5JywgJy0tbmFtZSddCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgZGlzdHV0aWxzLmNvcmUuc2V0dXAobmFtZT0nYmFyJykKKyAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAnYmFyXG4nKQorCisgICAgICAgIGRpc3R1dGlscy5jb3JlLkRFQlVHID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5zZXR1cChuYW1lPSdiYXInKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGlzdHV0aWxzLmNvcmUuREVCVUcgPSBGYWxzZQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICB3YW50ZWQgPSAib3B0aW9ucyAoYWZ0ZXIgcGFyc2luZyBjb25maWcgZmlsZXMpOlxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkbGluZXMoKVswXSwgd2FudGVkKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ29yZVRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMDQzNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kZXBfdXRpbC5weQpAQCAtMCwwICsxLDgxIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRlcF91dGlsLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlciwgbmV3ZXJfcGFpcndpc2UsIG5ld2VyX2dyb3VwCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBEZXBVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbmV3ZXIoc2VsZik6CisKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgbmV3X2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbmV3JykKKyAgICAgICAgb2xkX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICAgICAgIyBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgJ25ld19maWxlJyBkb2VzIG5vdCBleGlzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRmlsZUVycm9yLCBuZXdlciwgbmV3X2ZpbGUsIG9sZF9maWxlKQorCisgICAgICAgICMgUmV0dXJuIHRydWUgaWYgJ25ld19maWxlJyBleGlzdHMgYW5kIGlzIG1vcmUgcmVjZW50bHkgbW9kaWZpZWQgdGhhbgorICAgICAgICAjICdvbGRfZmlsZScsIG9yIGlmICduZXdfZmlsZScgZXhpc3RzIGFuZCAnb2xkX2ZpbGUnIGRvZXNuJ3QuCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShuZXdfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2VyKG5ld19maWxlLCAnSV9kb250X2V4aXN0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcihuZXdfZmlsZSwgb2xkX2ZpbGUpKQorCisgICAgICAgICMgUmV0dXJuIGZhbHNlIGlmIGJvdGggZXhpc3QgYW5kICdvbGRfZmlsZScgaXMgdGhlIHNhbWUgYWdlIG9yIHlvdW5nZXIKKyAgICAgICAgIyB0aGFuICduZXdfZmlsZScuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3ZXIob2xkX2ZpbGUsIG5ld19maWxlKSkKKworICAgIGRlZiB0ZXN0X25ld2VyX3BhaXJ3aXNlKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzb3VyY2VzID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ3NvdXJjZXMnKQorICAgICAgICB0YXJnZXRzID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ3RhcmdldHMnKQorICAgICAgICBvcy5ta2Rpcihzb3VyY2VzKQorICAgICAgICBvcy5ta2Rpcih0YXJnZXRzKQorICAgICAgICBvbmUgPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ29uZScpCisgICAgICAgIHR3byA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAndHdvJykKKyAgICAgICAgdGhyZWUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pICAgICMgSSBhbSB0aGUgb2xkIGZpbGUKKyAgICAgICAgZm91ciA9IG9zLnBhdGguam9pbih0YXJnZXRzLCAnZm91cicpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShvbmUpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSh0d28pCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmb3VyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZXJfcGFpcndpc2UoW29uZSwgdHdvXSwgW3RocmVlLCBmb3VyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKFtvbmVdLFt0aHJlZV0pKQorCisgICAgZGVmIHRlc3RfbmV3ZXJfZ3JvdXAoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNvdXJjZXMgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnc291cmNlcycpCisgICAgICAgIG9zLm1rZGlyKHNvdXJjZXMpCisgICAgICAgIG9uZSA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAnb25lJykKKyAgICAgICAgdHdvID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICd0d28nKQorICAgICAgICB0aHJlZSA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAndGhyZWUnKQorICAgICAgICBvbGRfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKworICAgICAgICAjIHJldHVybiB0cnVlIGlmICdvbGRfZmlsZScgaXMgb3V0LW9mLWRhdGUgd2l0aCByZXNwZWN0IHRvIGFueSBmaWxlCisgICAgICAgICMgbGlzdGVkIGluICdzb3VyY2VzJy4KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKG9uZSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHR3bykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHRocmVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCB0aHJlZV0sIG9sZF9maWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdlcl9ncm91cChbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUpKQorCisgICAgICAgICMgbWlzc2luZyBoYW5kbGluZworICAgICAgICBvcy5yZW1vdmUob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBuZXdlcl9ncm91cCwgW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmc9J2lnbm9yZScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcl9ncm91cChbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nPSduZXdlcicpKQorCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShEZXBVdGlsVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTNmNzdjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CkBAIC0wLDAgKzEsMTE2IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRpcl91dGlsLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzdGF0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCisKK2Zyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCAobWtwYXRoLCByZW1vdmVfdHJlZSwgY3JlYXRlX3RyZWUsIGNvcHlfdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlX3JlbGF0aXZlKQorCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIERpclV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2xvZyhzZWxmLCBtc2csICphcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZyAlIGFyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb2dzLmFwcGVuZChtc2cpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKERpclV0aWxUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLl9sb2dzID0gW10KKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYucm9vdF90YXJnZXQgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2RlZXAnKQorICAgICAgICBzZWxmLnRhcmdldCA9IG9zLnBhdGguam9pbihzZWxmLnJvb3RfdGFyZ2V0LCAnaGVyZScpCisgICAgICAgIHNlbGYudGFyZ2V0MiA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZGVlcDInKQorICAgICAgICBzZWxmLm9sZF9sb2cgPSBsb2cuaW5mbworICAgICAgICBsb2cuaW5mbyA9IHNlbGYuX2xvZworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBsb2cuaW5mbyA9IHNlbGYub2xkX2xvZworICAgICAgICBzdXBlcihEaXJVdGlsVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X21rcGF0aF9yZW1vdmVfdHJlZV92ZXJib3NpdHkoc2VsZik6CisKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisgICAgICAgIHdhbnRlZCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQorICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCB2ZXJib3NlPTEpCisgICAgICAgIHdhbnRlZCA9IFsnY3JlYXRpbmcgJXMnICUgc2VsZi5yb290X3RhcmdldCwKKyAgICAgICAgICAgICAgICAgICdjcmVhdGluZyAlcycgJSBzZWxmLnRhcmdldF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCisgICAgICAgIHNlbGYuX2xvZ3MgPSBbXQorCisgICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MSkKKyAgICAgICAgd2FudGVkID0gWyJyZW1vdmluZyAnJXMnIChhbmQgZXZlcnl0aGluZyB1bmRlciBpdCkiICUgc2VsZi5yb290X3RhcmdldF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgUE9TSVgtbGlrZSBzeXN0ZW1zLiIpCisgICAgZGVmIHRlc3RfbWtwYXRoX3dpdGhfY3VzdG9tX21vZGUoc2VsZik6CisgICAgICAgICMgR2V0IGFuZCBzZXQgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUgZm9yIHRlc3RpbmcgbW9kZSBiaXRzLgorICAgICAgICB1bWFzayA9IG9zLnVtYXNrKDBvMDAyKQorICAgICAgICBvcy51bWFzayh1bWFzaykKKyAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCAwbzcwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHN0YXQuU19JTU9ERShvcy5zdGF0KHNlbGYudGFyZ2V0KS5zdF9tb2RlKSwgMG83MDAgJiB+dW1hc2spCisgICAgICAgIG1rcGF0aChzZWxmLnRhcmdldDIsIDBvNTU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc3RhdC5TX0lNT0RFKG9zLnN0YXQoc2VsZi50YXJnZXQyKS5zdF9tb2RlKSwgMG81NTUgJiB+dW1hc2spCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdHJlZV92ZXJib3NpdHkoc2VsZik6CisKKyAgICAgICAgY3JlYXRlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgWydvbmUnLCAndHdvJywgJ3RocmVlJ10sIHZlcmJvc2U9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCBbXSkKKyAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQorCisgICAgICAgIHdhbnRlZCA9IFsnY3JlYXRpbmcgJXMnICUgc2VsZi5yb290X3RhcmdldF0KKyAgICAgICAgY3JlYXRlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgWydvbmUnLCAndHdvJywgJ3RocmVlJ10sIHZlcmJvc2U9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCisKKyAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQorCisKKyAgICBkZWYgdGVzdF9jb3B5X3RyZWVfdmVyYm9zaXR5KHNlbGYpOgorCisgICAgICAgIG1rcGF0aChzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorCisgICAgICAgIGNvcHlfdHJlZShzZWxmLnRhcmdldCwgc2VsZi50YXJnZXQyLCB2ZXJib3NlPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgW10pCisKKyAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQorCisgICAgICAgIG1rcGF0aChzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorICAgICAgICBhX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXQsICdvay50eHQnKQorICAgICAgICBmID0gb3BlbihhX2ZpbGUsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgnc29tZSBjb250ZW50JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHdhbnRlZCA9IFsnY29weWluZyAlcyAtPiAlcycgJSAoYV9maWxlLCBzZWxmLnRhcmdldDIpXQorICAgICAgICBjb3B5X3RyZWUoc2VsZi50YXJnZXQsIHNlbGYudGFyZ2V0MiwgdmVyYm9zZT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTApCisgICAgICAgIHJlbW92ZV90cmVlKHNlbGYudGFyZ2V0MiwgdmVyYm9zZT0wKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX3JlbGF0aXZlKHNlbGYpOgorICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVfcmVsYXRpdmUoJy9ob21lL2ZvbycpLCAnaG9tZS9mb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVfcmVsYXRpdmUoJ3NvbWUvcGF0aCcpLCAnc29tZS9wYXRoJykKKyAgICAgICAgZWxzZTogICAjIFxcCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnYzpcXGhvbWVcXGZvbycpLCAnYzpob21lXFxmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVfcmVsYXRpdmUoJ2hvbWVcXGZvbycpLCAnaG9tZVxcZm9vJykKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKERpclV0aWxUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCBhZjQwMTg2Li5iYTYwNjM4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMSw5ICsxLDYgQEAKLSMgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KKyMgLSotIGNvZGluZzogdXRmOCAtKi0KIAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5kaXN0LiIiIgotCi1pbXBvcnQgZGlzdHV0aWxzLmNtZAotaW1wb3J0IGRpc3R1dGlscy5kaXN0CiBpbXBvcnQgb3MKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN5cwpAQCAtMTEsMTAgKzgsMTMgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHRleHR3cmFwCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgorZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uLCBmaXhfaGVscF9vcHRpb25zLCBEaXN0cmlidXRpb25NZXRhZGF0YQorZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCitpbXBvcnQgZGlzdHV0aWxzLmRpc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiAKLQotY2xhc3MgdGVzdF9kaXN0KGRpc3R1dGlscy5jbWQuQ29tbWFuZCk6CitjbGFzcyB0ZXN0X2Rpc3QoQ29tbWFuZCk6CiAgICAgIiIiU2FtcGxlIGRpc3R1dGlscyBleHRlbnNpb24gY29tbWFuZC4iIiIKIAogICAgIHVzZXJfb3B0aW9ucyA9IFsKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgc2VsZi5zYW1wbGVfb3B0aW9uID0gTm9uZQogCiAKLWNsYXNzIFRlc3REaXN0cmlidXRpb24oZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uKToKK2NsYXNzIFRlc3REaXN0cmlidXRpb24oRGlzdHJpYnV0aW9uKToKICAgICAiIiJEaXN0cmlidXRpb24gc3ViY2xhc3NlcyB0aGF0IGF2b2lkcyB0aGUgZGVmYXVsdCBzZWFyY2ggZm9yCiAgICAgY29uZmlndXJhdGlvbiBmaWxlcy4KIApAQCAtMzcsMTQgKzM3LDIwIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jb25maWdfZmlsZXMKIAogCi1jbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3ZbOl0KKyAgICAgICAgc3VwZXIoRGlzdHJpYnV0aW9uVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCiAgICAgICAgIGRlbCBzeXMuYXJndlsxOl0KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLmFyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLmFyZ3ZbMV0KKyAgICAgICAgc3VwZXIoRGlzdHJpYnV0aW9uVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiBjcmVhdGVfZGlzdHJpYnV0aW9uKHNlbGYsIGNvbmZpZ2ZpbGVzPSgpKToKICAgICAgICAgZCA9IFRlc3REaXN0cmlidXRpb24oKQpAQCAtNTMsNiArNTksMjcgQEAKICAgICAgICAgZC5wYXJzZV9jb21tYW5kX2xpbmUoKQogICAgICAgICByZXR1cm4gZAogCisgICAgZGVmIHRlc3RfZGVidWdfbW9kZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiW2dsb2JhbF0iKQorICAgICAgICAgICAgZi53cml0ZSgiY29tbWFuZF9wYWNrYWdlcyA9IGZvby5iYXIsIHNwbGF0IikKKworICAgICAgICBmaWxlcyA9IFtURVNURk5dCisgICAgICAgIHN5cy5hcmd2LmFwcGVuZCgiYnVpbGQiKQorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKGZpbGVzKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQorICAgICAgICBkaXN0dXRpbHMuZGlzdC5ERUJVRyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKGZpbGVzKQorICAgICAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkaXN0dXRpbHMuZGlzdC5ERUJVRyA9IEZhbHNlCisKICAgICBkZWYgdGVzdF9jb21tYW5kX3BhY2thZ2VzX3Vuc3BlY2lmaWVkKHNlbGYpOgogICAgICAgICBzeXMuYXJndi5hcHBlbmQoImJ1aWxkIikKICAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbigpCkBAIC03MCw1NSArOTcsNTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyJkaXN0dXRpbHMuY29tbWFuZCIsICJmb28uYmFyIiwgImRpc3R1dGlscy50ZXN0cyJdKQogICAgICAgICBjbWQgPSBkLmdldF9jb21tYW5kX29iaigidGVzdF9kaXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoY21kLCB0ZXN0X2Rpc3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjbWQsIHRlc3RfZGlzdCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnNhbXBsZV9vcHRpb24sICJzb21ldGV4dCIpCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX3BhY2thZ2VzX2NvbmZpZ2ZpbGUoc2VsZik6CiAgICAgICAgIHN5cy5hcmd2LmFwcGVuZCgiYnVpbGQiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW5saW5rLCBURVNURk4pCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwcmludCA+PmYsICJbZ2xvYmFsXSIKICAgICAgICAgICAgIHByaW50ID4+ZiwgImNvbW1hbmRfcGFja2FnZXMgPSBmb28uYmFyLCBzcGxhdCIKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbihbVEVTVEZOXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImRpc3R1dGlscy5jb21tYW5kIiwgImZvby5iYXIiLCAic3BsYXQiXSkKLQotICAgICAgICAgICAgIyBlbnN1cmUgY29tbWFuZCBsaW5lIG92ZXJyaWRlcyBjb25maWc6Ci0gICAgICAgICAgICBzeXMuYXJndlsxOl0gPSBbIi0tY29tbWFuZC1wYWNrYWdlcyIsICJzcG9yayIsICJidWlsZCJdCi0gICAgICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKFtURVNURk5dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZGlzdHV0aWxzLmNvbW1hbmQiLCAic3BvcmsiXSkKLQotICAgICAgICAgICAgIyBTZXR0aW5nIC0tY29tbWFuZC1wYWNrYWdlcyB0byAnJyBzaG91bGQgY2F1c2UgdGhlIGRlZmF1bHQgdG8KLSAgICAgICAgICAgICMgYmUgdXNlZCBldmVuIGlmIGEgY29uZmlnIGZpbGUgc3BlY2lmaWVkIHNvbWV0aGluZyBlbHNlOgotICAgICAgICAgICAgc3lzLmFyZ3ZbMTpdID0gWyItLWNvbW1hbmQtcGFja2FnZXMiLCAiIiwgImJ1aWxkIl0KLSAgICAgICAgICAgIGQgPSBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oW1RFU1RGTl0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwgWyJkaXN0dXRpbHMuY29tbWFuZCJdKQotCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbihbVEVTVEZOXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyJkaXN0dXRpbHMuY29tbWFuZCIsICJmb28uYmFyIiwgInNwbGF0Il0pCisKKyAgICAgICAgIyBlbnN1cmUgY29tbWFuZCBsaW5lIG92ZXJyaWRlcyBjb25maWc6CisgICAgICAgIHN5cy5hcmd2WzE6XSA9IFsiLS1jb21tYW5kLXBhY2thZ2VzIiwgInNwb3JrIiwgImJ1aWxkIl0KKyAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbihbVEVTVEZOXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyJkaXN0dXRpbHMuY29tbWFuZCIsICJzcG9yayJdKQorCisgICAgICAgICMgU2V0dGluZyAtLWNvbW1hbmQtcGFja2FnZXMgdG8gJycgc2hvdWxkIGNhdXNlIHRoZSBkZWZhdWx0IHRvCisgICAgICAgICMgYmUgdXNlZCBldmVuIGlmIGEgY29uZmlnIGZpbGUgc3BlY2lmaWVkIHNvbWV0aGluZyBlbHNlOgorICAgICAgICBzeXMuYXJndlsxOl0gPSBbIi0tY29tbWFuZC1wYWNrYWdlcyIsICIiLCAiYnVpbGQiXQorICAgICAgICBkID0gc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKFtURVNURk5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKSwgWyJkaXN0dXRpbHMuY29tbWFuZCJdKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcGtnX2ZpbGUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgRGlzdHJpYnV0aW9uTWV0YWRhdGEgaGFuZGxpbmcgb2YgVW5pY29kZSBmaWVsZHMKLSAgICAgICAgbXlfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZicpCi0gICAgICAgIGtsYXNzID0gZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBteV9maWxlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmJykKKyAgICAgICAga2xhc3MgPSBEaXN0cmlidXRpb24KIAotICAgICAgICBkaXN0ID0ga2xhc3MoYXR0cnM9eydhdXRob3InOiB1J01pc3RlciBDYWbpJywKKyAgICAgICAgZGlzdCA9IGtsYXNzKGF0dHJzPXsnYXV0aG9yJzogdSdNaXN0ZXIgQ2Fmw6knLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ215LnBhY2thZ2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWludGFpbmVyJzogdSdDYWbpIEp1bmlvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogdSdDYWbpIHRvcnLpZmnpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6IHUnSOlo6WjpJ30pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haW50YWluZXInOiB1J0NhZsOpIEp1bmlvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogdSdDYWbDqSB0b3Jyw6lmacOpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6IHUnSMOpaMOpaMOpJ30pCiAKIAogICAgICAgICAjIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlsZSBjYW4gYmUgd3JpdHRlbgogICAgICAgICAjIHdpdGggVW5pY29kZSBmaWVsZHMuIHRoZXkgYXJlIGVuY29kZWQgd2l0aAogICAgICAgICAjIFBLR19JTkZPX0VOQ09ESU5HCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRpc3QubWV0YWRhdGEud3JpdGVfcGtnX2ZpbGUob3BlbihteV9maWxlLCAndycpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobXlfZmlsZSk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKG15X2ZpbGUpCisgICAgICAgIGRpc3QubWV0YWRhdGEud3JpdGVfcGtnX2ZpbGUob3BlbihteV9maWxlLCAndycpKQogCiAgICAgICAgICMgcmVndWxhciBhc2NpaSBpcyBvZiBjb3Vyc2UgYWx3YXlzIHVzYWJsZQogICAgICAgICBkaXN0ID0ga2xhc3MoYXR0cnM9eydhdXRob3InOiAnTWlzdGVyIENhZmUnLApAQCAtMTI3LDE2ICsxNTEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQ2FmZSB0b3JyZWZpZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvbmdfZGVzY3JpcHRpb24nOiAnSGVoZWhlJ30pCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhteV9maWxlKToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUobXlfZmlsZSkKKyAgICAgICAgbXlfZmlsZTIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2YyJykKKyAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIGFuIGVtcHR5IG9wdGlvbnMgZGljdGlvbmFyeSBzaG91bGQgbm90IHN0YXkgaW4gdGhlCiAgICAgICAgICMgbGlzdCBvZiBhdHRyaWJ1dGVzCi0gICAgICAgIGtsYXNzID0gZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uCisgICAgICAgIGtsYXNzID0gRGlzdHJpYnV0aW9uCiAKICAgICAgICAgIyBjYXRjaGluZyB3YXJuaW5ncwogICAgICAgICB3YXJucyA9IFtdCkBAIC0xNTQsMzcgKzE3NSwxMDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4gPSBvbGRfd2FybgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3YXJucyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdhcm5zKSwgMCkKIAotY2xhc3MgTWV0YWRhdGFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKworICAgICAgICBhdHRycyA9IHsna2V5d29yZHMnOiAnb25lLHR3bycsCisgICAgICAgICAgICAgICAgICdwbGF0Zm9ybXMnOiAnb25lLHR3byd9CisKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycz1hdHRycykKKyAgICAgICAgZGlzdC5maW5hbGl6ZV9vcHRpb25zKCkKKworICAgICAgICAjIGZpbmFsaXplX29wdGlvbiBzcGxpdHMgcGxhdGZvcm1zIGFuZCBrZXl3b3JkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QubWV0YWRhdGEucGxhdGZvcm1zLCBbJ29uZScsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0Lm1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKKworICAgIGRlZiB0ZXN0X2dldF9jb21tYW5kX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmNvbW1hbmRfcGFja2FnZXMsIE5vbmUpCisgICAgICAgIGNtZHMgPSBkaXN0LmdldF9jb21tYW5kX3BhY2thZ2VzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWRzLCBbJ2Rpc3R1dGlscy5jb21tYW5kJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5jb21tYW5kX3BhY2thZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnZGlzdHV0aWxzLmNvbW1hbmQnXSkKKworICAgICAgICBkaXN0LmNvbW1hbmRfcGFja2FnZXMgPSAnb25lLHR3bycKKyAgICAgICAgY21kcyA9IGRpc3QuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZHMsIFsnZGlzdHV0aWxzLmNvbW1hbmQnLCAnb25lJywgJ3R3byddKQorCisKKyAgICBkZWYgdGVzdF9hbm5vdW5jZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGxldmVsIGlzIGtub3duCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQorICAgICAgICBhcmdzID0gKCdvaycsKQorICAgICAgICBrd2FyZ3MgPSB7J2xldmVsJzogJ29rMid9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRpc3QuYW5ub3VuY2UsIGFyZ3MsIGt3YXJncykKKworICAgIGRlZiB0ZXN0X2ZpbmRfY29uZmlnX2ZpbGVzX2Rpc2FibGUoc2VsZik6CisgICAgICAgICMgVGlja2V0ICMxMTgwOiBBbGxvdyB1c2VyIHRvIGRpc2FibGUgdGhlaXIgaG9tZSBjb25maWcgZmlsZS4KKyAgICAgICAgdGVtcF9ob21lID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICIucHlkaXN0dXRpbHMuY2ZnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAicHlkaXN0dXRpbHMuY2ZnIikKKworICAgICAgICB3aXRoIG9wZW4odXNlcl9maWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnW2Rpc3R1dGlsc11cbicpCisKKyAgICAgICAgZGVmIF9leHBhbmRlcihwYXRoKToKKyAgICAgICAgICAgIHJldHVybiB0ZW1wX2hvbWUKKworICAgICAgICBvbGRfZXhwYW5kZXIgPSBvcy5wYXRoLmV4cGFuZHVzZXIKKyAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gX2V4cGFuZGVyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oKQorICAgICAgICAgICAgYWxsX2ZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCisKKyAgICAgICAgICAgIGQgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnM9eydzY3JpcHRfYXJncyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1uby11c2VyLWNmZyddfSkKKyAgICAgICAgICAgIGZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBvbGRfZXhwYW5kZXIKKworICAgICAgICAjIG1ha2Ugc3VyZSAtLW5vLXVzZXItY2ZnIGRpc2FibGVzIHRoZSB1c2VyIGNmZyBmaWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbF9maWxlcyktMSwgbGVuKGZpbGVzKSkKKworCitjbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKE1ldGFkYXRhVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5hcmd2ID0gc2VsZi5hcmd2WzBdCisgICAgICAgIHN5cy5hcmd2WzpdID0gc2VsZi5hcmd2WzFdCisgICAgICAgIHN1cGVyKE1ldGFkYXRhVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiB0ZXN0X3NpbXBsZV9tZXRhZGF0YShzZWxmKToKICAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCJ9Ci0gICAgICAgIGRpc3QgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnMpCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCiAgICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydF8oIk1ldGFkYXRhLVZlcnNpb246IDEuMCIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJwcm92aWRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygicmVxdWlyZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oIm9ic29sZXRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTWV0YWRhdGEtVmVyc2lvbjogMS4wIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInByb3ZpZGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJyZXF1aXJlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgib2Jzb2xldGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKIAogICAgIGRlZiB0ZXN0X3Byb3ZpZGVzKHNlbGYpOgogICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKICAgICAgICAgICAgICAgICAgInByb3ZpZGVzIjogWyJwYWNrYWdlIiwgInBhY2thZ2Uuc3ViIl19Ci0gICAgICAgIGRpc3QgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnMpCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5nZXRfcHJvdmlkZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbInBhY2thZ2UiLCAicGFja2FnZS5zdWIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmdldF9wcm92aWRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsicGFja2FnZSIsICJwYWNrYWdlLnN1YiJdKQogICAgICAgICBtZXRhID0gc2VsZi5mb3JtYXRfbWV0YWRhdGEoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjEiIGluIG1ldGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygicmVxdWlyZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oIm9ic29sZXRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlcXVpcmVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJvYnNvbGV0ZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQogCiAgICAgZGVmIHRlc3RfcHJvdmlkZXNfaWxsZWdhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEaXN0cmlidXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXMiOiBbIm15LnBrZyAoc3BsYXQpIl19KQpAQCAtMTkzLDIxICsyODUsMjAgQEAKICAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyI6IFsib3RoZXIiLCAiYW5vdGhlciAoPT0xLjApIl19Ci0gICAgICAgIGRpc3QgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnMpCisgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5nZXRfcmVxdWlyZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbIm90aGVyIiwgImFub3RoZXIgKD09MS4wKSJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QuZ2V0X3JlcXVpcmVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWyJvdGhlciIsICJhbm90aGVyICg9PTEuMCkiXSkKICAgICAgICAgbWV0YSA9IHNlbGYuZm9ybWF0X21ldGFkYXRhKGRpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiBpbiBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydF8oInByb3ZpZGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJSZXF1aXJlczogb3RoZXIiIGluIG1ldGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiUmVxdWlyZXM6IGFub3RoZXIgKD09MS4wKSIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJvYnNvbGV0ZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIk1ldGFkYXRhLVZlcnNpb246IDEuMSIgaW4gbWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwcm92aWRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiUmVxdWlyZXM6IG90aGVyIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIlJlcXVpcmVzOiBhbm90aGVyICg9PTEuMCkiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgib2Jzb2xldGVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKIAogICAgIGRlZiB0ZXN0X3JlcXVpcmVzX2lsbGVnYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbiwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGlzdHJpYnV0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAicGFja2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIjogWyJteS5wa2cgKHNwbGF0KSJdfSkKQEAgLTIxNiwyMSArMzA3LDIwIEBACiAgICAgICAgIGF0dHJzID0geyJuYW1lIjogInBhY2thZ2UiLAogICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAiLAogICAgICAgICAgICAgICAgICAib2Jzb2xldGVzIjogWyJvdGhlciIsICJhbm90aGVyICg8MS4wKSJdfQotICAgICAgICBkaXN0ID0gZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uKGF0dHJzKQorICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QubWV0YWRhdGEuZ2V0X29ic29sZXRlcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsib3RoZXIiLCAiYW5vdGhlciAoPDEuMCkiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmdldF9vYnNvbGV0ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbIm90aGVyIiwgImFub3RoZXIgKDwxLjApIl0pCiAgICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydF8oIk1ldGFkYXRhLVZlcnNpb246IDEuMSIgaW4gbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJwcm92aWRlczoiIG5vdCBpbiBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygicmVxdWlyZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oIk9ic29sZXRlczogb3RoZXIiIGluIG1ldGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiT2Jzb2xldGVzOiBhbm90aGVyICg8MS4wKSIgaW4gbWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjEiIGluIG1ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHJvdmlkZXM6IiBub3QgaW4gbWV0YS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlcXVpcmVzOiIgbm90IGluIG1ldGEubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJPYnNvbGV0ZXM6IG90aGVyIiBpbiBtZXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIk9ic29sZXRlczogYW5vdGhlciAoPDEuMCkiIGluIG1ldGEpCiAKICAgICBkZWYgdGVzdF9vYnNvbGV0ZXNfaWxsZWdhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEaXN0cmlidXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibmFtZSI6ICJwYWNrYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Jzb2xldGVzIjogWyJteS5wa2cgKHNwbGF0KSJdfSkKQEAgLTI0Myw0NyArMzMzLDU3IEBACiAgICAgZGVmIHRlc3RfY3VzdG9tX3B5ZGlzdHV0aWxzKHNlbGYpOgogICAgICAgICAjIGZpeGVzICMyMTY2CiAgICAgICAgICMgbWFrZSBzdXJlIHB5ZGlzdHV0aWxzLmNmZyBpcyBmb3VuZAotICAgICAgICBvbGQgPSB7fQotICAgICAgICBmb3IgZW52IGluICgnSE9NRScsICdIT01FUEFUSCcsICdIT01FRFJJVkUnKToKLSAgICAgICAgICAgIHZhbHVlID0gb3MuZW52aXJvbi5nZXQoZW52KQotICAgICAgICAgICAgb2xkW2Vudl0gPSB2YWx1ZQotICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25bZW52XQotCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKICAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSAiLnB5ZGlzdHV0aWxzLmNmZyIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSAicHlkaXN0dXRpbHMuY2ZnIgogCi0gICAgICAgIGN1cmRpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbihjdXJkaXIsIHVzZXJfZmlsZW5hbWUpCisgICAgICAgIHRlbXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2RpciwgdXNlcl9maWxlbmFtZSkKICAgICAgICAgZiA9IG9wZW4odXNlcl9maWxlbmFtZSwgJ3cnKQotICAgICAgICBmLndyaXRlKCcuJykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoJy4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlzdCA9IGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbigpCisgICAgICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKIAogICAgICAgICAgICAgIyBsaW51eC1zdHlsZQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnZGFyd2luJyk6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gY3VyZGlyCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gdGVtcF9kaXIKICAgICAgICAgICAgICAgICBmaWxlcyA9IGRpc3QuZmluZF9jb25maWdfZmlsZXMoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2ZpbGVuYW1lIGluIGZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2ZpbGVuYW1lIGluIGZpbGVzKQogCiAgICAgICAgICAgICAjIHdpbjMyLXN0eWxlCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgICAgICAjIGhvbWUgZHJpdmUgc2hvdWxkIGJlIGZvdW5kCi0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gY3VyZGlyCisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gdGVtcF9kaXIKICAgICAgICAgICAgICAgICBmaWxlcyA9IGRpc3QuZmluZF9jb25maWdfZmlsZXMoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2ZpbGVuYW1lIGluIGZpbGVzLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2ZpbGVuYW1lIGluIGZpbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXIgbm90IGZvdW5kIGluICVyJyAlICh1c2VyX2ZpbGVuYW1lLCBmaWxlcykpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvbGQuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCiAgICAgICAgICAgICBvcy5yZW1vdmUodXNlcl9maWxlbmFtZSkKIAorICAgIGRlZiB0ZXN0X2ZpeF9oZWxwX29wdGlvbnMoc2VsZik6CisgICAgICAgIGhlbHBfdHVwbGVzID0gWygnYScsICdiJywgJ2MnLCAnZCcpLCAoMSwgMiwgMywgNCldCisgICAgICAgIGZhbmN5X29wdGlvbnMgPSBmaXhfaGVscF9vcHRpb25zKGhlbHBfdHVwbGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbmN5X29wdGlvbnNbMF0sICgnYScsICdiJywgJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW5jeV9vcHRpb25zWzFdLCAoMSwgMiwgMykpCisKKyAgICBkZWYgdGVzdF9zaG93X2hlbHAoc2VsZik6CisgICAgICAgICMgc21va2UgdGVzdCwganVzdCBtYWtlcyBzdXJlIHNvbWUgaGVscCBpcyBkaXNwbGF5ZWQKKyAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgIHN5cy5hcmd2ID0gW10KKyAgICAgICAgZGlzdC5oZWxwID0gMQorICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6CisgICAgICAgICAgICBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCisKKyAgICAgICAgb3V0cHV0ID0gW2xpbmUgZm9yIGxpbmUgaW4gcy5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ob3V0cHV0KSA+IDApCisKICAgICBkZWYgdGVzdF9sb25nX2Rlc2NyaXB0aW9uKHNlbGYpOgogICAgICAgICBsb25nX2Rlc2MgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAogICAgICAgICBleGFtcGxlOjoKQEAgLTI5OSw2ICszOTksMzMgQEAKICAgICAgICAgbWV0YSA9IG1ldGEucmVwbGFjZSgnXG4nICsgOCAqICcgJywgJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvbmdfZGVzYyBpbiBtZXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF9tZXRhZGF0YShzZWxmKToKKyAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCisgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCisgICAgICAgICAgICAgICAgICJsb25nX2Rlc2NyaXB0aW9uIjogImRlc2MiLAorICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAieHh4IiwKKyAgICAgICAgICAgICAgICAgImRvd25sb2FkX3VybCI6ICJodHRwOi8vZXhhbXBsZS5jb20iLAorICAgICAgICAgICAgICAgICAia2V5d29yZHMiOiBbJ29uZScsICd0d28nXSwKKyAgICAgICAgICAgICAgICAgInJlcXVpcmVzIjogWydmb28nXX0KKworICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzKQorICAgICAgICBtZXRhZGF0YSA9IGRpc3QubWV0YWRhdGEKKworICAgICAgICAjIHdyaXRlIGl0IHRoZW4gcmVsb2FkcyBpdAorICAgICAgICBQS0dfSU5GTyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgbWV0YWRhdGEud3JpdGVfcGtnX2ZpbGUoUEtHX0lORk8pCisgICAgICAgIFBLR19JTkZPLnNlZWsoMCkKKyAgICAgICAgbWV0YWRhdGEucmVhZF9wa2dfZmlsZShQS0dfSU5GTykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLm5hbWUsICJwYWNrYWdlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS52ZXJzaW9uLCAiMS4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5kZXNjcmlwdGlvbiwgInh4eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEuZG93bmxvYWRfdXJsLCAnaHR0cDovL2V4YW1wbGUuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5rZXl3b3JkcywgWydvbmUnLCAndHdvJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEucGxhdGZvcm1zLCBbJ1VOS05PV04nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5vYnNvbGV0ZXMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEucmVxdWlyZXMsIFsnZm9vJ10pCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQogICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERpc3RyaWJ1dGlvblRlc3RDYXNlKSkKQEAgLTMwNiw0ICs0MzMsNCBAQAogICAgIHJldHVybiBzdWl0ZQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGJjZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQpAQCAtMCwwICsxLDgxIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmZpbGVfdXRpbC4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCisKK2Zyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgbW92ZV9maWxlLCB3cml0ZV9maWxlLCBjb3B5X2ZpbGUKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworY2xhc3MgRmlsZVV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2xvZyhzZWxmLCBtc2csICphcmdzKToKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZyAlIGFyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb2dzLmFwcGVuZChtc2cpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKEZpbGVVdGlsVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5fbG9ncyA9IFtdCisgICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCisgICAgICAgIGxvZy5pbmZvID0gc2VsZi5fbG9nCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLnNvdXJjZSA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZjEnKQorICAgICAgICBzZWxmLnRhcmdldCA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZjInKQorICAgICAgICBzZWxmLnRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2QxJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgbG9nLmluZm8gPSBzZWxmLm9sZF9sb2cKKyAgICAgICAgc3VwZXIoRmlsZVV0aWxUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbW92ZV9maWxlX3ZlcmJvc2l0eShzZWxmKToKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5zb3VyY2UsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgnc29tZSBjb250ZW50JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIG1vdmVfZmlsZShzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQsIHZlcmJvc2U9MCkKKyAgICAgICAgd2FudGVkID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCisKKyAgICAgICAgIyBiYWNrIHRvIG9yaWdpbmFsIHN0YXRlCisgICAgICAgIG1vdmVfZmlsZShzZWxmLnRhcmdldCwgc2VsZi5zb3VyY2UsIHZlcmJvc2U9MCkKKworICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCB2ZXJib3NlPTEpCisgICAgICAgIHdhbnRlZCA9IFsnbW92aW5nICVzIC0+ICVzJyAlIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgICAgICAjIGJhY2sgdG8gb3JpZ2luYWwgc3RhdGUKKyAgICAgICAgbW92ZV9maWxlKHNlbGYudGFyZ2V0LCBzZWxmLnNvdXJjZSwgdmVyYm9zZT0wKQorCisgICAgICAgIHNlbGYuX2xvZ3MgPSBbXQorICAgICAgICAjIG5vdyB0aGUgdGFyZ2V0IGlzIGEgZGlyCisgICAgICAgIG9zLm1rZGlyKHNlbGYudGFyZ2V0X2RpcikKKyAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldF9kaXIsIHZlcmJvc2U9MSkKKyAgICAgICAgd2FudGVkID0gWydtb3ZpbmcgJXMgLT4gJXMnICUgKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldF9kaXIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbGUoc2VsZik6CisgICAgICAgIGxpbmVzID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGZvbyA9IG9zLnBhdGguam9pbihkaXIsICdmb28nKQorICAgICAgICB3cml0ZV9maWxlKGZvbywgbGluZXMpCisgICAgICAgIGNvbnRlbnQgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIG9wZW4oZm9vKS5yZWFkbGluZXMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCBsaW5lcykKKworICAgIGRlZiB0ZXN0X2NvcHlfZmlsZShzZWxmKToKKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGZvbyA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKKyAgICAgICAgd3JpdGVfZmlsZShmb28sICdjb250ZW50JykKKyAgICAgICAgZHN0X2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGNvcHlfZmlsZShmb28sIGRzdF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ2ZvbycpKSkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEZpbGVVdGlsVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlbGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlbGlzdC5weQppbmRleCAxZmFjY2ZhLi5iZTExZWE1ZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVsaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlbGlzdC5weQpAQCAtMSwyMyArMSw4NSBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5maWxlbGlzdC4iIiIKK2Zyb20gb3MucGF0aCBpbXBvcnQgam9pbgogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGRpc3R1dGlscy5maWxlbGlzdCBpbXBvcnQgZ2xvYl90b19yZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuZmlsZWxpc3QgaW1wb3J0IGdsb2JfdG9fcmUsIEZpbGVMaXN0Citmcm9tIGRpc3R1dGlscyBpbXBvcnQgZGVidWcKKworTUFOSUZFU1RfSU4gPSAiIiJcCitpbmNsdWRlIG9rCitpbmNsdWRlIHhvCitleGNsdWRlIHhvCitpbmNsdWRlIGZvby50bXAKK2dsb2JhbC1pbmNsdWRlICoueAorZ2xvYmFsLWluY2x1ZGUgKi50eHQKK2dsb2JhbC1leGNsdWRlICoudG1wCityZWN1cnNpdmUtaW5jbHVkZSBmICoub28KK3JlY3Vyc2l2ZS1leGNsdWRlIGdsb2JhbCAqLngKK2dyYWZ0IGRpcgorcHJ1bmUgZGlyMworIiIiCiAKIGNsYXNzIEZpbGVMaXN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZ2xvYl90b19yZShzZWxmKToKICAgICAgICAgIyBzaW1wbGUgY2FzZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZSgnZm9vKicpLCAnZm9vW14vXSpcXFooP21zKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdsb2JfdG9fcmUoJ2Zvbz8nKSwgJ2Zvb1teL11cXFooP21zKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdsb2JfdG9fcmUoJ2Zvbz8/JyksICdmb29bXi9dW14vXVxcWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iX3RvX3JlKCdmb28qJyksICdmb29bXi9dKlxcWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iX3RvX3JlKCdmb28/JyksICdmb29bXi9dXFxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUoJ2Zvbz8/JyksICdmb29bXi9dW14vXVxcWig/bXMpJykKIAogICAgICAgICAjIHNwZWNpYWwgY2FzZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYl90b19yZShyJ2Zvb1xcKicpLCByJ2Zvb1xcXFxbXi9dKlxaKD9tcyknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnbG9iX3RvX3JlKHInZm9vXFxcKicpLCByJ2Zvb1xcXFxcXFteL10qXFooP21zKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdsb2JfdG9fcmUoJ2Zvbz8/Pz8nKSwgcidmb29bXi9dW14vXVteL11bXi9dXFooP21zKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdsb2JfdG9fcmUocidmb29cXD8/JyksIHInZm9vXFxcXFteL11bXi9dXFooP21zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYl90b19yZShyJ2Zvb1xcKicpLCByJ2Zvb1xcXFxbXi9dKlxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUocidmb29cXFwqJyksIHInZm9vXFxcXFxcW14vXSpcWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iX3RvX3JlKCdmb28/Pz8/JyksIHInZm9vW14vXVteL11bXi9dW14vXVxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUocidmb29cXD8/JyksIHInZm9vXFxcXFteL11bXi9dXFooP21zKScpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX3RlbXBsYXRlX2xpbmUoc2VsZik6CisgICAgICAgICMgdGVzdGluZyAgYWxsIE1BTklGRVNULmluIHRlbXBsYXRlIHBhdHRlcm5zCisgICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKKworICAgICAgICAjIHNpbXVsYXRlZCBmaWxlIGxpc3QKKyAgICAgICAgZmlsZV9saXN0LmFsbGZpbGVzID0gWydmb28udG1wJywgJ29rJywgJ3hvJywgJ2ZvdXIudHh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2dsb2JhbCcsICdvbmUudHh0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luKCdnbG9iYWwnLCAndHdvLnR4dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZ2xvYmFsJywgJ2ZpbGVzLngnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2dsb2JhbCcsICdoZXJlLnRtcCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZicsICdvJywgJ2Yub28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2RpcicsICdncmFmdC1vbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJ2RpcicsICdkaXIyJywgJ2dyYWZ0MicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZGlyMycsICdvaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbignZGlyMycsICdzdWInLCAnb2sudHh0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKworICAgICAgICBmb3IgbGluZSBpbiBNQU5JRkVTVF9JTi5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSA9PSAnJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmlsZV9saXN0LnByb2Nlc3NfdGVtcGxhdGVfbGluZShsaW5lKQorCisgICAgICAgIHdhbnRlZCA9IFsnb2snLCAnZm91ci50eHQnLCBqb2luKCdnbG9iYWwnLCAnb25lLnR4dCcpLAorICAgICAgICAgICAgICAgICAgam9pbignZ2xvYmFsJywgJ3R3by50eHQnKSwgam9pbignZicsICdvJywgJ2Yub28nKSwKKyAgICAgICAgICAgICAgICAgIGpvaW4oJ2RpcicsICdncmFmdC1vbmUnKSwgam9pbignZGlyJywgJ2RpcjInLCAnZ3JhZnQyJyldCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xpc3QuZmlsZXMsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2RlYnVnX3ByaW50KHNlbGYpOgorICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgZmlsZV9saXN0LmRlYnVnX3ByaW50KCd4eHgnKQorICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQorCisgICAgICAgIGRlYnVnLkRFQlVHID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBmaWxlX2xpc3QuZGVidWdfcHJpbnQoJ3h4eCcpCisgICAgICAgICAgICBzdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAneHh4XG4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVidWcuREVCVUcgPSBGYWxzZQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoRmlsZUxpc3RUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQppbmRleCBjODM0YjkxLi40Zjk3NmYzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQpAQCAtMyw2ICszLDggQEAKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGwgaW1wb3J0IGluc3RhbGwKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgogCkBAIC01Miw0ICs1NCw0IEBACiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2RhdGEucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NzU2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9kYXRhLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGdldHBhc3MKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEgaW1wb3J0IGluc3RhbGxfZGF0YQorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBJbnN0YWxsRGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3J1bihzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2RhdGEoZGlzdCkKKyAgICAgICAgY21kLmluc3RhbGxfZGlyID0gaW5zdCA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnaW5zdCcpCisKKyAgICAgICAgIyBkYXRhX2ZpbGVzIGNhbiBjb250YWluCisgICAgICAgICMgIC0gc2ltcGxlIGZpbGVzCisgICAgICAgICMgIC0gYSB0dXBsZSB3aXRoIGEgcGF0aCwgYW5kIGEgbGlzdCBvZiBmaWxlCisgICAgICAgIG9uZSA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnb25lJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKG9uZSwgJ3h4eCcpCisgICAgICAgIGluc3QyID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdpbnN0MicpCisgICAgICAgIHR3byA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAndHdvJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHR3bywgJ3h4eCcpCisKKyAgICAgICAgY21kLmRhdGFfZmlsZXMgPSBbb25lLCAoaW5zdDIsIFt0d29dKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X2lucHV0cygpLCBbb25lLCAoaW5zdDIsIFt0d29dKV0pCisKKyAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIGxldCdzIGNoZWNrIHRoZSByZXN1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAyKQorICAgICAgICBydHdvID0gb3MucGF0aC5zcGxpdCh0d28pWy0xXQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QyLCBydHdvKSkpCisgICAgICAgIHJvbmUgPSBvcy5wYXRoLnNwbGl0KG9uZSlbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdCwgcm9uZSkpKQorICAgICAgICBjbWQub3V0ZmlsZXMgPSBbXQorCisgICAgICAgICMgbGV0J3MgdHJ5IHdpdGggd2Fybl9kaXIgb25lCisgICAgICAgIGNtZC53YXJuX2RpciA9IDEKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIGxldCdzIGNoZWNrIHRoZSByZXN1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QyLCBydHdvKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdCwgcm9uZSkpKQorICAgICAgICBjbWQub3V0ZmlsZXMgPSBbXQorCisgICAgICAgICMgbm93IHVzaW5nIHJvb3QgYW5kIGVtcHR5IGRpcgorICAgICAgICBjbWQucm9vdCA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAncm9vdCcpCisgICAgICAgIGluc3QzID0gb3MucGF0aC5qb2luKGNtZC5pbnN0YWxsX2RpciwgJ2luc3QzJykKKyAgICAgICAgaW5zdDQgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2luc3Q0JykKKyAgICAgICAgdGhyZWUgPSBvcy5wYXRoLmpvaW4oY21kLmluc3RhbGxfZGlyLCAndGhyZWUnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUodGhyZWUsICd4eCcpCisgICAgICAgIGNtZC5kYXRhX2ZpbGVzID0gW29uZSwgKGluc3QyLCBbdHdvXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnaW5zdDMnLCBbdGhyZWVdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc3Q0LCBbXSldCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0MiwgcnR3bykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QsIHJvbmUpKSkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEluc3RhbGxEYXRhVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2hlYWRlcnMucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNzIyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9oZWFkZXJzLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2hlYWRlcnMuIiIiCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGdldHBhc3MKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2hlYWRlcnMgaW1wb3J0IGluc3RhbGxfaGVhZGVycworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBJbnN0YWxsSGVhZGVyc1Rlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3J1bihzZWxmKToKKyAgICAgICAgIyB3ZSBoYXZlIHR3byBoZWFkZXJzCisgICAgICAgIGhlYWRlcl9saXN0ID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgaGVhZGVyMSA9IG9zLnBhdGguam9pbihoZWFkZXJfbGlzdCwgJ2hlYWRlcjEnKQorICAgICAgICBoZWFkZXIyID0gb3MucGF0aC5qb2luKGhlYWRlcl9saXN0LCAnaGVhZGVyMicpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShoZWFkZXIxKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoaGVhZGVyMikKKyAgICAgICAgaGVhZGVycyA9IFtoZWFkZXIxLCBoZWFkZXIyXQorCisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAgY21kID0gaW5zdGFsbF9oZWFkZXJzKGRpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmdldF9pbnB1dHMoKSwgaGVhZGVycykKKworICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAorICAgICAgICBjbWQuaW5zdGFsbF9kaXIgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2luc3QnKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbGV0J3MgY2hlY2sgdGhlIHJlc3VsdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAyKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoSW5zdGFsbEhlYWRlcnNUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CmluZGV4IDc4OTIyZjQuLjRkODYzMDggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKQEAgLTEsMTcgKzEsODkgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCi1pbXBvcnQgc3lzCiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliIGltcG9ydCBpbnN0YWxsX2xpYgogZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogY2xhc3MgSW5zdGFsbExpYlRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQorCisgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuY29tcGlsZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQub3B0aW1pemUsIDApCisKKyAgICAgICAgIyBvcHRpbWl6ZSBtdXN0IGJlIDAsIDEsIG9yIDIKKyAgICAgICAgY21kLm9wdGltaXplID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQorICAgICAgICBjbWQub3B0aW1pemUgPSAnNCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQorCisgICAgICAgIGNtZC5vcHRpbWl6ZSA9ICcyJworICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm9wdGltaXplLCAyKQorCisgICAgZGVmIF9zZXR1cF9ieXRlX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gaW5zdGFsbF9saWIoZGlzdCkKKyAgICAgICAgY21kLmNvbXBpbGUgPSBjbWQub3B0aW1pemUgPSAxCisKKyAgICAgICAgZiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKKyAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCisgICAgICAgIHJldHVybiBwa2dfZGlyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIG5vdCBlbmFibGVkJykKKyAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHBrZ19kaXIgPSBzZWxmLl9zZXR1cF9ieXRlX2NvbXBpbGUoKQorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAxOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5YycpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Zvby5weW8nKSkpCisKKyAgICBkZWYgdGVzdF9nZXRfb3V0cHV0cyhzZWxmKToKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQorCisgICAgICAgICMgc2V0dGluZyB1cCBhIGRpc3QgZW52aXJvbm1lbnQKKyAgICAgICAgY21kLmNvbXBpbGUgPSBjbWQub3B0aW1pemUgPSAxCisgICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IHBrZ19kaXIKKyAgICAgICAgZiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5weV9tb2R1bGVzID0gW3BrZ19kaXJdCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24uZXh0X21vZHVsZXMgPSBbRXh0ZW5zaW9uKCdmb28nLCBbJ3h4eCddKV0KKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFtwa2dfZGlyXQorICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JworCisgICAgICAgICMgZ2V0X291dHB1dCBzaG91bGQgcmV0dXJuIDQgZWxlbWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjbWQuZ2V0X291dHB1dHMoKSkgPj0gMikKKworICAgIGRlZiB0ZXN0X2dldF9pbnB1dHMoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gaW5zdGFsbF9saWIoZGlzdCkKKworICAgICAgICAjIHNldHRpbmcgdXAgYSBkaXN0IGVudmlyb25tZW50CisgICAgICAgIGNtZC5jb21waWxlID0gY21kLm9wdGltaXplID0gMQorICAgICAgICBjbWQuaW5zdGFsbF9kaXIgPSBwa2dfZGlyCisgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Zvby5weScpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShmLCAnIyBweXRob24gZmlsZScpCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24ucHlfbW9kdWxlcyA9IFtwa2dfZGlyXQorICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLmV4dF9tb2R1bGVzID0gW0V4dGVuc2lvbignZm9vJywgWyd4eHgnXSldCisgICAgICAgIGNtZC5kaXN0cmlidXRpb24ucGFja2FnZXMgPSBbcGtnX2Rpcl0KKyAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKKworICAgICAgICAjIGdldF9pbnB1dCBzaG91bGQgcmV0dXJuIDIgZWxlbWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9pbnB1dHMoKSksIDIpCisKICAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgogICAgICAgICAjIG1ha2VzIHN1cmUgYnl0ZV9jb21waWxlIGlzIG5vdCB1c2VkCiAgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKQEAgLTMyLDQgKzEwNCw0IEBACiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsTGliVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX3NjcmlwdHMucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9zY3JpcHRzLnB5CmluZGV4IGZmZmE2ZWYuLjQ2MDg1NDUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX3NjcmlwdHMucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfc2NyaXB0cy5weQpAQCAtNyw2ICs3LDcgQEAKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgogCiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIAogY2xhc3MgSW5zdGFsbFNjcmlwdHNUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLApAQCAtMjMsMTUgKzI0LDE1IEBACiAgICAgICAgICAgICBza2lwX2J1aWxkPTEsCiAgICAgICAgICAgICApCiAgICAgICAgIGNtZCA9IGluc3RhbGxfc2NyaXB0cyhkaXN0KQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNtZC5mb3JjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjbWQuc2tpcF9idWlsZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtZC5idWlsZF9kaXIgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtZC5pbnN0YWxsX2RpciBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNtZC5mb3JjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbWQuc2tpcF9idWlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5idWlsZF9kaXIgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5pbnN0YWxsX2RpciBpcyBOb25lKQogCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oY21kLmZvcmNlKQotICAgICAgICBzZWxmLmFzc2VydF8oY21kLnNraXBfYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuZm9yY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuc2tpcF9idWlsZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYnVpbGRfZGlyLCAiL2Zvby9iYXIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5pbnN0YWxsX2RpciwgIi9zcGxhdC9mdW5rIikKIApAQCAtNDIsOCArNDMsMTAgQEAKICAgICAgICAgZGVmIHdyaXRlX3NjcmlwdChuYW1lLCB0ZXh0KToKICAgICAgICAgICAgIGV4cGVjdGVkLmFwcGVuZChuYW1lKQogICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNvdXJjZSwgbmFtZSksICJ3IikKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgd3JpdGVfc2NyaXB0KCJzY3JpcHQxLnB5IiwgKCIjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi4zXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBib2d1cyBzY3JpcHQgdy8gUHl0aG9uIHNoLWJhbmdcbiIKQEAgLTY5LDExICs3MiwxMSBAQAogCiAgICAgICAgIGluc3RhbGxlZCA9IG9zLmxpc3RkaXIodGFyZ2V0KQogICAgICAgICBmb3IgbmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuYW1lIGluIGluc3RhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIGluc3RhbGxlZCkKIAogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoSW5zdGFsbFNjcmlwdHNUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmM5Y29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbXN2Yzljb21waWxlci5weQppbmRleCAwYzhiZDZlLi5lMTU1ZGJmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbXN2Yzljb21waWxlci5weQpAQCAtMSwyMiArMSw4MyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5tc3ZjOWNvbXBpbGVyLiIiIgogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKLWNsYXNzIG1zdmM5Y29tcGlsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitfTUFOSUZFU1QgPSAiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Cis8YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIgorICAgICAgICAgIG1hbmlmZXN0VmVyc2lvbj0iMS4wIj4KKyAgPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPgorICAgIDxzZWN1cml0eT4KKyAgICAgIDxyZXF1ZXN0ZWRQcml2aWxlZ2VzPgorICAgICAgICA8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIj4KKyAgICAgICAgPC9yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbD4KKyAgICAgIDwvcmVxdWVzdGVkUHJpdmlsZWdlcz4KKyAgICA8L3NlY3VyaXR5PgorICA8L3RydXN0SW5mbz4KKyAgPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVudEFzc2VtYmx5PgorICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLkNSVCIKKyAgICAgICAgIHZlcnNpb249IjkuMC4yMTAyMi44IiBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9Ing4NiIKKyAgICAgICAgIHB1YmxpY0tleVRva2VuPSJYWFhYIj4KKyAgICAgIDwvYXNzZW1ibHlJZGVudGl0eT4KKyAgICA8L2RlcGVuZGVudEFzc2VtYmx5PgorICA8L2RlcGVuZGVuY3k+CisgIDxkZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbnRBc3NlbWJseT4KKyAgICAgIDxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiBuYW1lPSJNaWNyb3NvZnQuVkM5MC5NRkMiCisgICAgICAgIHZlcnNpb249IjkuMC4yMTAyMi44IiBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9Ing4NiIKKyAgICAgICAgcHVibGljS2V5VG9rZW49IlhYWFgiPjwvYXNzZW1ibHlJZGVudGl0eT4KKyAgICA8L2RlcGVuZGVudEFzc2VtYmx5PgorICA8L2RlcGVuZGVuY3k+Cis8L2Fzc2VtYmx5PgorIiIiCisKK19DTEVBTkVEX01BTklGRVNUID0gIiIiXAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgorPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIKKyAgICAgICAgICBtYW5pZmVzdFZlcnNpb249IjEuMCI+CisgIDx0cnVzdEluZm8geG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4KKyAgICA8c2VjdXJpdHk+CisgICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4KKyAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSI+CisgICAgICAgIDwvcmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWw+CisgICAgICA8L3JlcXVlc3RlZFByaXZpbGVnZXM+CisgICAgPC9zZWN1cml0eT4KKyAgPC90cnVzdEluZm8+CisgIDxkZXBlbmRlbmN5PgorCisgIDwvZGVwZW5kZW5jeT4KKyAgPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVudEFzc2VtYmx5PgorICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLk1GQyIKKyAgICAgICAgdmVyc2lvbj0iOS4wLjIxMDIyLjgiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0ieDg2IgorICAgICAgICBwdWJsaWNLZXlUb2tlbj0iWFhYWCI+PC9hc3NlbWJseUlkZW50aXR5PgorICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+CisgIDwvZGVwZW5kZW5jeT4KKzwvYXNzZW1ibHk+IiIiCisKK2lmIHN5cy5wbGF0Zm9ybT09IndpbjMyIjoKKyAgICBmcm9tIGRpc3R1dGlscy5tc3ZjY29tcGlsZXIgaW1wb3J0IGdldF9idWlsZF92ZXJzaW9uCisgICAgaWYgZ2V0X2J1aWxkX3ZlcnNpb24oKT49OC4wOgorICAgICAgICBTS0lQX01FU1NBR0UgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgU0tJUF9NRVNTQUdFID0gIlRoZXNlIHRlc3RzIGFyZSBvbmx5IGZvciBNU1ZDOC4wIG9yIGFib3ZlIgorZWxzZToKKyAgICBTS0lQX01FU1NBR0UgPSAiVGhlc2UgdGVzdHMgYXJlIG9ubHkgZm9yIHdpbjMyIgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhTS0lQX01FU1NBR0UgaXMgTm9uZSwgU0tJUF9NRVNTQUdFKQorY2xhc3MgbXN2Yzljb21waWxlclRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfbm9fY29tcGlsZXIoc2VsZik6CiAgICAgICAgICMgbWFrZXMgc3VyZSBxdWVyeV92Y3ZhcnNhbGwgdGhyb3dzCiAgICAgICAgICMgYSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yIGlmIHRoZSBjb21waWxlcgogICAgICAgICAjIGlzIG5vdCBmb3VuZAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICAgICAgICAgICMgdGhpcyB0ZXN0IGlzIG9ubHkgZm9yIHdpbjMyCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZnJvbSBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyIGltcG9ydCBnZXRfYnVpbGRfdmVyc2lvbgotICAgICAgICBpZiBnZXRfYnVpbGRfdmVyc2lvbigpIDwgOC4wOgotICAgICAgICAgICAgIyB0aGlzIHRlc3QgaXMgb25seSBmb3IgTVNWQzguMCBvciBhYm92ZQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGZyb20gZGlzdHV0aWxzLm1zdmM5Y29tcGlsZXIgaW1wb3J0IHF1ZXJ5X3ZjdmFyc2FsbAogICAgICAgICBkZWYgX2ZpbmRfdmN2YXJzYWxsKHZlcnNpb24pOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTMwLDggKzkxLDUxIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBtc3ZjOWNvbXBpbGVyLmZpbmRfdmN2YXJzYWxsID0gb2xkX2ZpbmRfdmN2YXJzYWxsCiAKKyAgICBkZWYgdGVzdF9yZWdfY2xhc3Moc2VsZik6CisgICAgICAgIGZyb20gZGlzdHV0aWxzLm1zdmM5Y29tcGlsZXIgaW1wb3J0IFJlZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgUmVnLmdldF92YWx1ZSwgJ3h4eCcsICd4eHgnKQorCisgICAgICAgICMgbG9va2luZyBmb3IgdmFsdWVzIHRoYXQgc2hvdWxkIGV4aXN0IG9uIGFsbAorICAgICAgICAjIHdpbmRvd3MgcmVnaXN0ZXJpZXMgdmVyc2lvbnMuCisgICAgICAgIHBhdGggPSByJ0NvbnRyb2wgUGFuZWxcRGVza3RvcCcKKyAgICAgICAgdiA9IFJlZy5nZXRfdmFsdWUocGF0aCwgdSdkcmFnZnVsbHdpbmRvd3MnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpbiAodScwJywgdScxJywgdScyJykpCisKKyAgICAgICAgaW1wb3J0IF93aW5yZWcKKyAgICAgICAgSEtDVSA9IF93aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIKKyAgICAgICAga2V5cyA9IFJlZy5yZWFkX2tleXMoSEtDVSwgJ3h4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIE5vbmUpCisKKyAgICAgICAga2V5cyA9IFJlZy5yZWFkX2tleXMoSEtDVSwgcidDb250cm9sIFBhbmVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdEZXNrdG9wJyBpbiBrZXlzKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3Zpc3VhbF9jX3JlZihzZWxmKToKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMubXN2Yzljb21waWxlciBpbXBvcnQgTVNWQ0NvbXBpbGVyCisgICAgICAgIHRlbXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBtYW5pZmVzdCA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbWFuaWZlc3QnKQorICAgICAgICBmID0gb3BlbihtYW5pZmVzdCwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKF9NQU5JRkVTVCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGNvbXBpbGVyID0gTVNWQ0NvbXBpbGVyKCkKKyAgICAgICAgY29tcGlsZXIuX3JlbW92ZV92aXN1YWxfY19yZWYobWFuaWZlc3QpCisKKyAgICAgICAgIyBzZWUgd2hhdCB3ZSBnb3QKKyAgICAgICAgZiA9IG9wZW4obWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgcmVtb3ZpbmcgdHJhaWxpbmcgc3BhY2VzCisgICAgICAgICAgICBjb250ZW50ID0gJ1xuJy5qb2luKFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCldKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBtYWtlcyBzdXJlIHRoZSBtYW5pZmVzdCB3YXMgcHJvcGVybHkgY2xlYW5lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsIF9DTEVBTkVEX01BTklGRVNUKQorCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShtc3ZjOWNvbXBpbGVyVGVzdENhc2UpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weQppbmRleCAzYTNhM2I3Li5kZDYwZjhjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5CkBAIC0xLDE0ICsxLDQyIEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXIuIiIiCisjIC0qLSBlbmNvZGluZzogdXRmOCAtKi0KIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZ2V0cGFzcworaW1wb3J0IHVybGxpYjIKK2ltcG9ydCB3YXJuaW5ncwogCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IHJlZ2lzdGVyIGFzIHJlZ2lzdGVyX21vZHVsZQogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5yZWdpc3RlciBpbXBvcnQgcmVnaXN0ZXIKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNTZXR1cEVycm9yCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiBmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUFlQSVJDLCBQeVBJUkNDb21tYW5kVGVzdENhc2UKIAorUFlQSVJDX05PUEFTU1dPUkQgPSAiIiJcCitbZGlzdHV0aWxzXQorCitpbmRleC1zZXJ2ZXJzID0KKyAgICBzZXJ2ZXIxCisKK1tzZXJ2ZXIxXQordXNlcm5hbWU6bWUKKyIiIgorCitXQU5URURfUFlQSVJDID0gIiIiXAorW2Rpc3R1dGlsc10KK2luZGV4LXNlcnZlcnMgPQorICAgIHB5cGkKKworW3B5cGldCit1c2VybmFtZTp0YXJlaworcGFzc3dvcmQ6cGFzc3dvcmQKKyIiIgorCiBjbGFzcyBSYXdJbnB1dHMob2JqZWN0KToKICAgICAiIiJGYWtlcyB1c2VyIGlucHV0cy4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFuc3dlcnMpOgpAQCAtMjEsMzQgKzQ5LDU1IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKIAotV0FOVEVEX1BZUElSQyA9ICIiIlwKLVtkaXN0dXRpbHNdCi1pbmRleC1zZXJ2ZXJzID0KLSAgICBweXBpCitjbGFzcyBGYWtlT3BlbmVyKG9iamVjdCk6CisgICAgIiIiRmFrZXMgYSBQeVBJIHNlcnZlciIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXFzID0gW10KIAotW3B5cGldCi11c2VybmFtZTp0YXJlawotcGFzc3dvcmQ6eHh4Ci0iIiIKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZgogCi1jbGFzcyByZWdpc3RlclRlc3RDYXNlKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CisgICAgZGVmIG9wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgc2VsZi5yZXFzLmFwcGVuZChyZXEpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgcmV0dXJuICd4eHgnCisKK2NsYXNzIFJlZ2lzdGVyVGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoUmVnaXN0ZXJUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICAjIHBhdGNoaW5nIHRoZSBwYXNzd29yZCBwcm9tcHQKKyAgICAgICAgc2VsZi5fb2xkX2dldHBhc3MgPSBnZXRwYXNzLmdldHBhc3MKKyAgICAgICAgZGVmIF9nZXRwYXNzKHByb21wdCk6CisgICAgICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkJworICAgICAgICBnZXRwYXNzLmdldHBhc3MgPSBfZ2V0cGFzcworICAgICAgICBzZWxmLm9sZF9vcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcgorICAgICAgICBzZWxmLmNvbm4gPSB1cmxsaWIyLmJ1aWxkX29wZW5lciA9IEZha2VPcGVuZXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBnZXRwYXNzLmdldHBhc3MgPSBzZWxmLl9vbGRfZ2V0cGFzcworICAgICAgICB1cmxsaWIyLmJ1aWxkX29wZW5lciA9IHNlbGYub2xkX29wZW5lcgorICAgICAgICBzdXBlcihSZWdpc3RlclRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgX2dldF9jbWQoc2VsZiwgbWV0YWRhdGE9Tm9uZSk6CisgICAgICAgIGlmIG1ldGFkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBtZXRhZGF0YSA9IHsndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ3h4eCcsICd2ZXJzaW9uJzogJ3h4eCd9CisgICAgICAgIHBrZ19pbmZvLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgqKm1ldGFkYXRhKQorICAgICAgICByZXR1cm4gcmVnaXN0ZXIoZGlzdCkKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9weXBpcmMoc2VsZik6CiAgICAgICAgICMgdGhpcyB0ZXN0IG1ha2VzIHN1cmUgYSAucHlwaXJjIGZpbGUKICAgICAgICAgIyBpcyBjcmVhdGVkIHdoZW4gcmVxdWVzdGVkLgogCi0gICAgICAgICMgbGV0J3MgY3JlYXRlIGEgZmFrZSBkaXN0cmlidXRpb24KLSAgICAgICAgIyBhbmQgYSByZWdpc3RlciBpbnN0YW5jZQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgZGlzdC5tZXRhZGF0YS51cmwgPSAneHh4JwotICAgICAgICBkaXN0Lm1ldGFkYXRhLmF1dGhvciA9ICd4eHgnCi0gICAgICAgIGRpc3QubWV0YWRhdGEuYXV0aG9yX2VtYWlsID0gJ3h4eCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5uYW1lID0gJ3h4eCcKLSAgICAgICAgZGlzdC5tZXRhZGF0YS52ZXJzaW9uID0gICd4eHgnCi0gICAgICAgIGNtZCA9IHJlZ2lzdGVyKGRpc3QpCisgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcmVnaXN0ZXIgaW5zdGFuY2UKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCiAKICAgICAgICAgIyB3ZSBzaG91bGRuJ3QgaGF2ZSBhIC5weXBpcmMgZmlsZSB5ZXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJjKSkKIAogICAgICAgICAjIHBhdGNoaW5nIHJhd19pbnB1dCBhbmQgZ2V0cGFzcy5nZXRwYXNzCiAgICAgICAgICMgc28gcmVnaXN0ZXIgZ2V0cyBoYXBweQpAQCAtNTYsMzcgKzEwNSwyNiBAQAogICAgICAgICAjIEhlcmUncyB3aGF0IHdlIGFyZSBmYWtpbmcgOgogICAgICAgICAjIHVzZSB5b3VyIGV4aXN0aW5nIGxvZ2luIChjaG9pY2UgMS4pCiAgICAgICAgICMgVXNlcm5hbWUgOiAndGFyZWsnCi0gICAgICAgICMgUGFzc3dvcmQgOiAneHh4JworICAgICAgICAjIFBhc3N3b3JkIDogJ3Bhc3N3b3JkJwogICAgICAgICAjIFNhdmUgeW91ciBsb2dpbiAoeS9OKT8gOiAneScKICAgICAgICAgaW5wdXRzID0gUmF3SW5wdXRzKCcxJywgJ3RhcmVrJywgJ3knKQotICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCByZWdpc3RlciBhcyByZWdpc3Rlcl9tb2R1bGUKICAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXwotICAgICAgICBkZWYgX2dldHBhc3MocHJvbXB0KToKLSAgICAgICAgICAgIHJldHVybiAneHh4JwotICAgICAgICByZWdpc3Rlcl9tb2R1bGUuZ2V0cGFzcy5nZXRwYXNzID0gX2dldHBhc3MKLSAgICAgICAgY2xhc3MgRmFrZVNlcnZlcihvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuY2FsbHMgPSBbXQotCi0gICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgotICAgICAgICAgICAgICAgICMgd2Ugd2FudCB0byBjb21wYXJlIHRoZW0sIHNvIGxldCdzIHN0b3JlCi0gICAgICAgICAgICAgICAgIyBzb21ldGhpbmcgY29tcGFyYWJsZQotICAgICAgICAgICAgICAgIGVscyA9IGFyZ3NbMF0uaXRlbXMoKQotICAgICAgICAgICAgICAgIGVscy5zb3J0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmNhbGxzLmFwcGVuZCh0dXBsZShlbHMpKQotICAgICAgICAgICAgICAgIHJldHVybiAyMDAsICdPSycKLQotICAgICAgICBjbWQucG9zdF90b19zZXJ2ZXIgPSBweXBpX3NlcnZlciA9IEZha2VTZXJ2ZXIoKQotCiAgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgIGNtZC5ydW4oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0CiAKICAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBhIGJyYW5kIG5ldyAucHlwaXJjIGZpbGUKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKHNlbGYucmMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5yYykpCiAKICAgICAgICAgIyB3aXRoIHRoZSBjb250ZW50IHNpbWlsYXIgdG8gV0FOVEVEX1BZUElSQwotICAgICAgICBjb250ZW50ID0gb3BlbihzZWxmLnJjKS5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29udGVudCwgV0FOVEVEX1BZUElSQykKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5yYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsIFdBTlRFRF9QWVBJUkMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAjIG5vdyBsZXQncyBtYWtlIHN1cmUgdGhlIC5weXBpcmMgZmlsZSBnZW5lcmF0ZWQKICAgICAgICAgIyByZWFsbHkgd29ya3MgOiB3ZSBzaG91bGRuJ3QgYmUgYXNrZWQgYW55dGhpbmcKQEAgLTk1LDE1ICsxMzMsMTI5IEBACiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihwcm9tcHQpCiAgICAgICAgIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQgPSBfbm9fd2F5CiAKKyAgICAgICAgY21kLnNob3dfcmVzcG9uc2UgPSAxCiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgICMgbGV0J3Mgc2VlIHdoYXQgdGhlIHNlcnZlciByZWNlaXZlZCA6IHdlIHNob3VsZAogICAgICAgICAjIGhhdmUgMiBzaW1pbGFyIHJlcXVlc3RzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4ocHlwaV9zZXJ2ZXIuY2FsbHMpLCAyKQotICAgICAgICBzZWxmLmFzc2VydF8ocHlwaV9zZXJ2ZXIuY2FsbHNbMF0sIHB5cGlfc2VydmVyLmNhbGxzWzFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb25uLnJlcXMsIDIpCisgICAgICAgIHJlcTEgPSBkaWN0KHNlbGYuY29ubi5yZXFzWzBdLmhlYWRlcnMpCisgICAgICAgIHJlcTIgPSBkaWN0KHNlbGYuY29ubi5yZXFzWzFdLmhlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxMlsnQ29udGVudC1sZW5ndGgnXSwgcmVxMVsnQ29udGVudC1sZW5ndGgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4eHgnIGluIHNlbGYuY29ubi5yZXFzWzFdLmRhdGEpCisKKyAgICBkZWYgdGVzdF9wYXNzd29yZF9ub3RfaW5fZmlsZShzZWxmKToKKworICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX05PUEFTU1dPUkQpCisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQorICAgICAgICBjbWQuX3NldF9jb25maWcoKQorICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCisgICAgICAgIGNtZC5zZW5kX21ldGFkYXRhKCkKKworICAgICAgICAjIGRpc3QucGFzc3dvcmQgc2hvdWxkIGJlIHNldAorICAgICAgICAjIHRoZXJlZm9yZSB1c2VkIGFmdGVyd2FyZHMgYnkgb3RoZXIgY29tbWFuZHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZGlzdHJpYnV0aW9uLnBhc3N3b3JkLCAncGFzc3dvcmQnKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJpbmcoc2VsZik6CisgICAgICAgICMgdGhpcyB0ZXN0IHJ1bnMgY2hvaWNlIDIKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCisgICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMicsICd0YXJlaycsICd0YXJla0B6aWFkZS5vcmcnKQorICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCisgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0CisKKyAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBzZW5kIGEgcmVxdWVzdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb25uLnJlcXMsIDEpCisgICAgICAgIHJlcSA9IHNlbGYuY29ubi5yZXFzWzBdCisgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS5oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICc2MDgnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RhcmVrJyBpbiByZXEuZGF0YSkKKworICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3Jlc2V0KHNlbGYpOgorICAgICAgICAjIHRoaXMgdGVzdCBydW5zIGNob2ljZSAzCisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQorICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzMnLCAndGFyZWtAemlhZGUub3JnJykKKyAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAorICAgICAgICAgICAgY21kLnJ1bigpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dAorCisgICAgICAgICMgd2Ugc2hvdWxkIGhhdmUgc2VuZCBhIHJlcXVlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY29ubi5yZXFzLCAxKQorICAgICAgICByZXEgPSBzZWxmLmNvbm4ucmVxc1swXQorICAgICAgICBoZWFkZXJzID0gZGljdChyZXEuaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjkwJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0YXJlaycgaW4gcmVxLmRhdGEpCisKKyAgICBkZWYgdGVzdF9zdHJpY3Qoc2VsZik6CisgICAgICAgICMgdGVzdGluZyB0aGUgc2NyaXB0IG9wdGlvbgorICAgICAgICAjIHdoZW4gb24sIHRoZSByZWdpc3RlciBjb21tYW5kIHN0b3BzIGlmCisgICAgICAgICMgdGhlIG1ldGFkYXRhIGlzIGluY29tcGxldGUgb3IgaWYKKyAgICAgICAgIyBsb25nX2Rlc2NyaXB0aW9uIGlzIG5vdCByZVN0IGNvbXBsaWFudAorCisgICAgICAgICMgZW1wdHkgbWV0YWRhdGEKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCh7fSkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQuc3RyaWN0ID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQucnVuKQorCisgICAgICAgICMgd2UgZG9uJ3QgdGVzdCB0aGUgcmVTdCBmZWF0dXJlIGlmIGRvY3V0aWxzCisgICAgICAgICMgaXMgbm90IGluc3RhbGxlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgZG9jdXRpbHMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBtZXRhZGF0YSBhcmUgT0sgYnV0IGxvbmdfZGVzY3JpcHRpb24gaXMgYnJva2VuCisgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogdSfDqXjDqXjDqScsCisgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ3h4eCcsICd2ZXJzaW9uJzogJ3h4eCcsCisgICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogJ3RpdGxlXG49PVxuXG50ZXh0J30KKworICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKG1ldGFkYXRhKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5zdHJpY3QgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5ydW4pCisKKyAgICAgICAgIyBub3cgc29tZXRoaW5nIHRoYXQgd29ya3MKKyAgICAgICAgbWV0YWRhdGFbJ2xvbmdfZGVzY3JpcHRpb24nXSA9ICd0aXRsZVxuPT09PT1cblxudGV4dCcKKyAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZChtZXRhZGF0YSkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQuc3RyaWN0ID0gMQorICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzEnLCAndGFyZWsnLCAneScpCisgICAgICAgIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQgPSBpbnB1dHMuX19jYWxsX18KKyAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kLnJ1bigpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dAorCisgICAgICAgICMgc3RyaWN0IGlzIG5vdCBieSBkZWZhdWx0CisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMScsICd0YXJlaycsICd5JykKKyAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXworICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0CisKKyAgICBkZWYgdGVzdF9jaGVja19tZXRhZGF0YV9kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICAjIG1ha2VzIHN1cmUgbWFrZV9tZXRhZGF0YSBpcyBkZXByZWNhdGVkCisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGNtZC5jaGVja19tZXRhZGF0YSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHJlZ2lzdGVyVGVzdENhc2UpCisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShSZWdpc3RlclRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKaW5kZXggZTMyMmMxMy4uYWI4YzNkOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQpAQCAtMywxNCArMywzNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQoraW1wb3J0IHRhcmZpbGUKKworIyB6bGliIGlzIG5vdCB1c2VkIGhlcmUsIGJ1dCBpZiBpdCdzIG5vdCBhdmFpbGFibGUKKyMgdGhlIHRlc3RzIHRoYXQgdXNlIHppcGZpbGUgbWF5IGZhaWwKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKK3RyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQorCiBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHdhcm5pbmdzCiAKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QsIHNob3dfZm9ybWF0cwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCiBmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc09wdGlvbkVycm9yCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBXQVJOCitmcm9tIGRpc3R1dGlscy5hcmNoaXZlX3V0aWwgaW1wb3J0IEFSQ0hJVkVfRk9STUFUUwogCiBTRVRVUF9QWSA9ICIiIgogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKQEAgLTE5LDgyICs0Miw5MCBAQAogc2V0dXAobmFtZT0nZmFrZScpCiAiIiIKIAotTUFOSUZFU1RfSU4gPSAiIiIKLXJlY3Vyc2l2ZS1pbmNsdWRlIHNvbWVjb2RlICoKK01BTklGRVNUID0gIiIiXAorIyBmaWxlIEdFTkVSQVRFRCBieSBkaXN0dXRpbHMsIGRvIE5PVCBlZGl0CitSRUFETUUKK2lucm9vdC50eHQKK3NldHVwLnB5CitkYXRhJShzZXApc2RhdGEuZHQKK3NjcmlwdHMlKHNlcClzc2NyaXB0LnB5Citzb21lJShzZXApc2ZpbGUudHh0Citzb21lJShzZXApc290aGVyX2ZpbGUudHh0Citzb21lY29kZSUoc2VwKXNfX2luaXRfXy5weQorc29tZWNvZGUlKHNlcClzZG9jLmRhdAorc29tZWNvZGUlKHNlcClzZG9jLnR4dAogIiIiCiAKLWNsYXNzIHNkaXN0VGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKK2NsYXNzIFNEaXN0VGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoc2Rpc3RUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQorICAgICAgICAjIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSBjcmVhdGVzIGEgdGVtcCBkaXIgYWxyZWFkeQorICAgICAgICAjIGFuZCBwdXQgaXQgaW4gc2VsZi50bXBfZGlyCisgICAgICAgIHN1cGVyKFNEaXN0VGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgIyBzZXR0aW5nIHVwIGFuIGVudmlyb25tZW50CiAgICAgICAgIHNlbGYub2xkX3BhdGggPSBvcy5nZXRjd2QoKQotICAgICAgICBzZWxmLnRlbXBfcGtnID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAndGVtcHBrZycpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykpCisgICAgICAgICMgYSBwYWNrYWdlLCBhbmQgYSBSRUFETUUKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdSRUFETUUnKSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnX19pbml0X18ucHknKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQorICAgICAgICBvcy5jaGRpcihzZWxmLnRtcF9kaXIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgYmFjayB0byBub3JtYWwKICAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfcGF0aCkKLSAgICAgICAgc3VwZXIoc2Rpc3RUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorICAgICAgICBzdXBlcihTRGlzdFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCiAKLSAgICBkZWYgX2luaXRfdG1wX3BrZyhzZWxmKToKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi50ZW1wX3BrZyk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9wa2cpCi0gICAgICAgIG9zLm1rZGlyKHNlbGYudGVtcF9wa2cpCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJykpCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50ZW1wX3BrZywgJ2Rpc3QnKSkKLSAgICAgICAgIyBjcmVhdGluZyBhIE1BTklGRVNULCBhIHBhY2thZ2UsIGFuZCBhIFJFQURNRQotICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudGVtcF9wa2csICdNQU5JRkVTVC5pbicpLCBNQU5JRkVTVF9JTikKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRlbXBfcGtnLCAnUkVBRE1FJyksICd4eHgnKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudGVtcF9wa2csICdzb21lY29kZScsICdfX2luaXRfXy5weScpLCAnIycpCi0gICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQotICAgICAgICBvcy5jaGRpcihzZWxmLnRlbXBfcGtnKQorICAgIGRlZiBnZXRfY21kKHNlbGYsIG1ldGFkYXRhPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgY21kIiIiCisgICAgICAgIGlmIG1ldGFkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICBtZXRhZGF0YSA9IHsnbmFtZSc6ICdmYWtlJywgJ3ZlcnNpb24nOiAnMS4wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnfQorICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKG1ldGFkYXRhKQorICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JworICAgICAgICBkaXN0LnBhY2thZ2VzID0gWydzb21lY29kZSddCisgICAgICAgIGRpc3QuaW5jbHVkZV9wYWNrYWdlX2RhdGEgPSBUcnVlCisgICAgICAgIGNtZCA9IHNkaXN0KGRpc3QpCisgICAgICAgIGNtZC5kaXN0X2RpciA9ICdkaXN0JworICAgICAgICBkZWYgX3dhcm4oKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbWQud2FybiA9IF93YXJuCisgICAgICAgIHJldHVybiBkaXN0LCBjbWQKIAotICAgIGRlZiBfd3JpdGUoc2VsZiwgcGF0aCwgY29udGVudCk6Ci0gICAgICAgIGYgPSBvcGVuKHBhdGgsICd3JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZShjb250ZW50KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiAgICAgZGVmIHRlc3RfcHJ1bmVfZmlsZV9saXN0KHNlbGYpOgogICAgICAgICAjIHRoaXMgdGVzdCBjcmVhdGVzIGEgcGFja2FnZSB3aXRoIHNvbWUgdmNzIGRpcnMgaW4gaXQKICAgICAgICAgIyBhbmQgbGF1bmNoIHNkaXN0IHRvIG1ha2Ugc3VyZSB0aGV5IGdldCBwcnVuZWQKICAgICAgICAgIyBvbiBhbGwgc3lzdGVtcwotICAgICAgICBzZWxmLl9pbml0X3RtcF9wa2coKQogCiAgICAgICAgICMgY3JlYXRpbmcgVkNTIGRpcmVjdG9yaWVzIHdpdGggc29tZSBmaWxlcyBpbiB0aGVtCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJywgJy5zdm4nKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRlbXBfcGtnLCAnc29tZWNvZGUnLCAnLnN2bicsICdvay5weScpLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuc3ZuJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnLnN2bicsICdvay5weScpLCAneHh4JykKIAotICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudGVtcF9wa2csICdzb21lY29kZScsICcuaGcnKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRlbXBfcGtnLCAnc29tZWNvZGUnLCAnLmhnJywKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvaycpLCAneHh4JykKIAotICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudGVtcF9wa2csICdzb21lY29kZScsICcuZ2l0JykpCi0gICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oc2VsZi50ZW1wX3BrZywgJ3NvbWVjb2RlJywgJy5naXQnLAorICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5naXQnKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuZ2l0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnb2snKSwgJ3h4eCcpCiAKICAgICAgICAgIyBub3cgYnVpbGRpbmcgYSBzZGlzdAotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgZGlzdC5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5uYW1lID0gJ2Zha2UnCi0gICAgICAgIGRpc3QubWV0YWRhdGEudmVyc2lvbiA9ICcxLjAnCi0gICAgICAgIGRpc3QubWV0YWRhdGEudXJsID0gJ2h0dHA6Ly94eHgnCi0gICAgICAgIGRpc3QubWV0YWRhdGEuYXV0aG9yID0gZGlzdC5tZXRhZGF0YS5hdXRob3JfZW1haWwgPSAneHh4JwotICAgICAgICBkaXN0LnBhY2thZ2VzID0gWydzb21lY29kZSddCi0gICAgICAgIGRpc3QuaW5jbHVkZV9wYWNrYWdlX2RhdGEgPSBUcnVlCi0gICAgICAgIGNtZCA9IHNkaXN0KGRpc3QpCi0gICAgICAgIGNtZC5tYW5pZmVzdCA9ICdNQU5JRkVTVCcKLSAgICAgICAgY21kLnRlbXBsYXRlID0gJ01BTklGRVNULmluJwotICAgICAgICBjbWQuZGlzdF9kaXIgPSAnZGlzdCcKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKIAogICAgICAgICAjIHppcCBpcyBhdmFpbGFibGUgdW5pdmVyc2FsbHkKICAgICAgICAgIyAodGFyIG1pZ2h0IG5vdCBiZSBpbnN0YWxsZWQgdW5kZXIgd2luMzIpCiAgICAgICAgIGNtZC5mb3JtYXRzID0gWyd6aXAnXQorCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKICAgICAgICAgY21kLnJ1bigpCiAKICAgICAgICAgIyBub3cgbGV0J3MgY2hlY2sgd2hhdCB3ZSBoYXZlCi0gICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRlbXBfcGtnLCAnZGlzdCcpCisgICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykKICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGRpc3RfZm9sZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaWxlcywgWydmYWtlLTEuMC56aXAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgWydmYWtlLTEuMC56aXAnXSkKIAogICAgICAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZShqb2luKGRpc3RfZm9sZGVyLCAnZmFrZS0xLjAuemlwJykpCiAgICAgICAgIHRyeToKQEAgLTEwMyw4ICsxMzQsOSBAQAogICAgICAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQogCiAgICAgICAgICMgbWFraW5nIHN1cmUgZXZlcnl0aGluZyBoYXMgYmVlbiBwcnVuZWQgY29ycmVjdGx5Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjb250ZW50KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29udGVudCksIDQpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiAgICAgZGVmIHRlc3RfbWFrZV9kaXN0cmlidXRpb24oc2VsZik6CiAKICAgICAgICAgIyBjaGVjayBpZiB0YXIgYW5kIGd6aXAgYXJlIGluc3RhbGxlZApAQCAtMTEyLDQ3ICsxNDQsMjg0IEBACiAgICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lKToKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIHNlbGYuX2luaXRfdG1wX3BrZygpCi0KICAgICAgICAgIyBub3cgYnVpbGRpbmcgYSBzZGlzdAotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgZGlzdC5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKLSAgICAgICAgZGlzdC5tZXRhZGF0YS5uYW1lID0gJ2Zha2UnCi0gICAgICAgIGRpc3QubWV0YWRhdGEudmVyc2lvbiA9ICcxLjAnCi0gICAgICAgIGRpc3QubWV0YWRhdGEudXJsID0gJ2h0dHA6Ly94eHgnCi0gICAgICAgIGRpc3QubWV0YWRhdGEuYXV0aG9yID0gZGlzdC5tZXRhZGF0YS5hdXRob3JfZW1haWwgPSAneHh4JwotICAgICAgICBkaXN0LnBhY2thZ2VzID0gWydzb21lY29kZSddCi0gICAgICAgIGRpc3QuaW5jbHVkZV9wYWNrYWdlX2RhdGEgPSBUcnVlCi0gICAgICAgIGNtZCA9IHNkaXN0KGRpc3QpCi0gICAgICAgIGNtZC5tYW5pZmVzdCA9ICdNQU5JRkVTVCcKLSAgICAgICAgY21kLnRlbXBsYXRlID0gJ01BTklGRVNULmluJwotICAgICAgICBjbWQuZGlzdF9kaXIgPSAnZGlzdCcKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKIAogICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIgdGhlbiBhIHRhcgogICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInLCAndGFyJ10KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQogICAgICAgICBjbWQucnVuKCkKIAogICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdHdvIGZpbGVzCi0gICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRlbXBfcGtnLCAnZGlzdCcpCisgICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykKICAgICAgICAgcmVzdWx0ID0gb3MubGlzdGRpcihkaXN0X2ZvbGRlcikKICAgICAgICAgcmVzdWx0LnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnZmFrZS0xLjAudGFyJywgJ2Zha2UtMS4wLnRhci5neiddICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsnZmFrZS0xLjAudGFyJywgJ2Zha2UtMS4wLnRhci5neiddICkKIAogICAgICAgICBvcy5yZW1vdmUoam9pbihkaXN0X2ZvbGRlciwgJ2Zha2UtMS4wLnRhcicpKQogICAgICAgICBvcy5yZW1vdmUoam9pbihkaXN0X2ZvbGRlciwgJ2Zha2UtMS4wLnRhci5neicpKQogCiAgICAgICAgICMgbm93IHRyeWluZyBhIHRhciB0aGVuIGEgZ3p0YXIKICAgICAgICAgY21kLmZvcm1hdHMgPSBbJ3RhcicsICdnenRhciddCisKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQogICAgICAgICBjbWQucnVuKCkKIAogICAgICAgICByZXN1bHQgPSBvcy5saXN0ZGlyKGRpc3RfZm9sZGVyKQogICAgICAgICByZXN1bHQuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwKLSAgICAgICAgICAgICAgICBbJ2Zha2UtMS4wLnRhcicsICdmYWtlLTEuMC50YXIuZ3onXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsnZmFrZS0xLjAudGFyJywgJ2Zha2UtMS4wLnRhci5neiddKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2FkZF9kZWZhdWx0cyhzZWxmKToKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMjc5CisKKyAgICAgICAgIyBhZGRfZGVmYXVsdCBzaG91bGQgYWxzbyBpbmNsdWRlCisgICAgICAgICMgZGF0YV9maWxlcyBhbmQgcGFja2FnZV9kYXRhCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBmaWxsaW5nIGRhdGFfZmlsZXMgYnkgcG9pbnRpbmcgZmlsZXMKKyAgICAgICAgIyBpbiBwYWNrYWdlX2RhdGEKKyAgICAgICAgZGlzdC5wYWNrYWdlX2RhdGEgPSB7Jyc6IFsnKi5jZmcnLCAnKi5kYXQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVjb2RlJzogWycqLnR4dCddfQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ2RvYy50eHQnKSwgJyMnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ2RvYy5kYXQnKSwgJyMnKQorCisgICAgICAgICMgYWRkaW5nIHNvbWUgZGF0YSBpbiBkYXRhX2ZpbGVzCisgICAgICAgIGRhdGFfZGlyID0gam9pbihzZWxmLnRtcF9kaXIsICdkYXRhJykKKyAgICAgICAgb3MubWtkaXIoZGF0YV9kaXIpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoZGF0YV9kaXIsICdkYXRhLmR0JyksICcjJykKKyAgICAgICAgc29tZV9kaXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ3NvbWUnKQorICAgICAgICBvcy5ta2Rpcihzb21lX2RpcikKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdpbnJvb3QudHh0JyksICcjJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzb21lX2RpciwgJ2ZpbGUudHh0JyksICcjJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzb21lX2RpciwgJ290aGVyX2ZpbGUudHh0JyksICcjJykKKworICAgICAgICBkaXN0LmRhdGFfZmlsZXMgPSBbKCdkYXRhJywgWydkYXRhL2RhdGEuZHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnJvb3QudHh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90ZXhpc3RpbmcnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZS9maWxlLnR4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZS9vdGhlcl9maWxlLnR4dCddCisKKyAgICAgICAgIyBhZGRpbmcgYSBzY3JpcHQKKyAgICAgICAgc2NyaXB0X2RpciA9IGpvaW4oc2VsZi50bXBfZGlyLCAnc2NyaXB0cycpCisgICAgICAgIG9zLm1rZGlyKHNjcmlwdF9kaXIpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2NyaXB0X2RpciwgJ3NjcmlwdC5weScpLCAnIycpCisgICAgICAgIGRpc3Quc2NyaXB0cyA9IFtqb2luKCdzY3JpcHRzJywgJ3NjcmlwdC5weScpXQorCisgICAgICAgIGNtZC5mb3JtYXRzID0gWyd6aXAnXQorICAgICAgICBjbWQudXNlX2RlZmF1bHRzID0gVHJ1ZQorCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBub3cgbGV0J3MgY2hlY2sgd2hhdCB3ZSBoYXZlCisgICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKGRpc3RfZm9sZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzLCBbJ2Zha2UtMS4wLnppcCddKQorCisgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGpvaW4oZGlzdF9mb2xkZXIsICdmYWtlLTEuMC56aXAnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29udGVudCA9IHppcF9maWxlLm5hbWVsaXN0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHppcF9maWxlLmNsb3NlKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgd2FzIGFkZGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNvbnRlbnQpLCAxMSkKKworICAgICAgICAjIGNoZWNraW5nIHRoZSBNQU5JRkVTVAorICAgICAgICBmID0gb3Blbihqb2luKHNlbGYudG1wX2RpciwgJ01BTklGRVNUJykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFuaWZlc3QsIE1BTklGRVNUICUgeydzZXAnOiBvcy5zZXB9KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWV0YWRhdGFfY2hlY2tfb3B0aW9uKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgdGhlIGBtZWRhdGEtY2hlY2tgIG9wdGlvbgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQobWV0YWRhdGE9e30pCisKKyAgICAgICAgIyB0aGlzIHNob3VsZCByYWlzZSBzb21lIHdhcm5pbmdzICEKKyAgICAgICAgIyB3aXRoIHRoZSBgY2hlY2tgIHN1YmNvbW1hbmQKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgd2FybmluZ3MgPSBzZWxmLmdldF9sb2dzKFdBUk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdhcm5pbmdzKSwgMikKKworICAgICAgICAjIHRyeWluZyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIG1ldGFkYXRhCisgICAgICAgIHNlbGYuY2xlYXJfbG9ncygpCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLm1ldGFkYXRhX2NoZWNrID0gMAorICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgd2FybmluZ3MgPSBzZWxmLmdldF9sb2dzKFdBUk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdhcm5pbmdzKSwgMCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX21ldGFkYXRhX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgICMgbWFrZXMgc3VyZSBtYWtlX21ldGFkYXRhIGlzIGRlcHJlY2F0ZWQKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICBjbWQuY2hlY2tfbWV0YWRhdGEoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisKKyAgICBkZWYgdGVzdF9zaG93X2Zvcm1hdHMoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2hvd19mb3JtYXRzKCkKKworICAgICAgICAjIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGEgaGVhZGVyIGxpbmUgKyBvbmUgbGluZSBwZXIgZm9ybWF0CisgICAgICAgIG51bV9mb3JtYXRzID0gbGVuKEFSQ0hJVkVfRk9STUFUUy5rZXlzKCkpCisgICAgICAgIG91dHB1dCA9IFtsaW5lIGZvciBsaW5lIGluIHN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgnLS1mb3JtYXRzPScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXRwdXQpLCBudW1fZm9ybWF0cykKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CisKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgZGVmYXVsdCBvcHRpb25zIHNldCBieSBmaW5hbGl6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5tYW5pZmVzdCwgJ01BTklGRVNUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQudGVtcGxhdGUsICdNQU5JRkVTVC5pbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmRpc3RfZGlyLCAnZGlzdCcpCisKKyAgICAgICAgIyBmb3JtYXRzIGhhcyB0byBiZSBhIHN0cmluZyBzcGxpdGFibGUgb24gKCcgJywgJywnKSBvcgorICAgICAgICAjIGEgc3RyaW5nbGlzdAorICAgICAgICBjbWQuZm9ybWF0cyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnemlwJ10KKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgZm9ybWF0cyBoYXMgdG8gYmUga25vd24KKyAgICAgICAgY21kLmZvcm1hdHMgPSAnc3VwYXppcGEnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZmluYWxpemVfb3B0aW9ucykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbl9vd25lcl9ncm91cChzZWxmKToKKworICAgICAgICAjIGNoZWNrIGlmIHRhciBhbmQgZ3ppcCBhcmUgaW5zdGFsbGVkCisgICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGlzIE5vbmUgb3IKKyAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpIGlzIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBub3cgYnVpbGRpbmcgYSBzZGlzdAorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhciBhbmQgc3BlY2lmeWluZyB0aGUgb3duZXIrZ3JvdXAKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLm93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGNtZC5ncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgICAgICAjIGJ1aWxkaW5nIGEgc2Rpc3QgYWdhaW4KKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIKKyAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIGdvb2QgcmlnaHRzCisgICAgICAgIGFyY2hpdmVfbmFtZSA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcsICdmYWtlLTEuMC50YXIuZ3onKQorICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKworICAgICAgICAjIG5vdGUgdGhhdCB3ZSBhcmUgbm90IHRlc3RpbmcgdGhlIGdyb3VwIG93bmVyc2hpcCBoZXJlCisgICAgICAgICMgYmVjYXVzZSwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybXMgYW5kIHRoZSBjb250YWluZXIKKyAgICAgICAgIyByaWdodHMgKHNlZSAjNzQwOCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIG9zLmdldHVpZCgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVfbGlzdChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgTUFOSUZFU1QgaXMgcmVjYWxjdWxhdGVkCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBmaWxsaW5nIGRhdGFfZmlsZXMgYnkgcG9pbnRpbmcgZmlsZXMgaW4gcGFja2FnZV9kYXRhCisgICAgICAgIGRpc3QucGFja2FnZV9kYXRhID0geydzb21lY29kZSc6IFsnKi50eHQnXX0KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICdkb2MudHh0JyksICcjJykKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICBmID0gb3BlbihjbWQubWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBmLnJlYWQoKS5zcGxpdCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpICE9ICcnXQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWFuaWZlc3QpLCA1KQorCisgICAgICAgICMgYWRkaW5nIGEgZmlsZQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ2RvYzIudHh0JyksICcjJykKKworICAgICAgICAjIG1ha2Ugc3VyZSBidWlsZF9weSBpcyByZWluaXRpbmlhbGl6ZWQsIGxpa2UgYSBmcmVzaCBydW4KKyAgICAgICAgYnVpbGRfcHkgPSBkaXN0LmdldF9jb21tYW5kX29iaignYnVpbGRfcHknKQorICAgICAgICBidWlsZF9weS5maW5hbGl6ZWQgPSBGYWxzZQorICAgICAgICBidWlsZF9weS5lbnN1cmVfZmluYWxpemVkKCkKKworICAgICAgICBjbWQucnVuKCkKKworICAgICAgICBmID0gb3BlbihjbWQubWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hbmlmZXN0MiA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gZi5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIGRvIHdlIGhhdmUgdGhlIG5ldyBmaWxlIGluIE1BTklGRVNUID8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWFuaWZlc3QyKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZG9jMi50eHQnLCBtYW5pZmVzdDJbLTFdKQorCisgICAgZGVmIHRlc3RfbWFuaWZlc3RfbWFya2VyKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgYXV0b2dlbmVyYXRlZCBNQU5JRkVTVHMgaGF2ZSBhIG1hcmtlcgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgIGYgPSBvcGVuKGNtZC5tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuaWZlc3QgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZCgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hbmlmZXN0WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICcjIGZpbGUgR0VORVJBVEVEIGJ5IGRpc3R1dGlscywgZG8gTk9UIGVkaXQnKQorCisgICAgZGVmIHRlc3RfbWFudWFsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgYSBNQU5JRkVTVCB3aXRob3V0IGEgbWFya2VyIGlzIGxlZnQgYWxvbmUKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgY21kLm1hbmlmZXN0KSwgJ1JFQURNRS5tYW51YWwnKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICBmID0gb3BlbihjbWQubWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hbmlmZXN0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBmLnJlYWQoKS5zcGxpdCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpICE9ICcnXQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYW5pZmVzdCwgWydSRUFETUUubWFudWFsJ10pCiAKIGRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShzZGlzdFRlc3RDYXNlKQorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU0Rpc3RUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NwYXduLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NwYXduLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZmE1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3Bhd24ucHkKQEAgLTAsMCArMSw2MCBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zcGF3bi4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgdGltZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IF9udF9xdW90ZV9hcmdzCitmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24sIGZpbmRfZXhlY3V0YWJsZQorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CisKK2NsYXNzIFNwYXduVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X250X3F1b3RlX2FyZ3Moc2VsZik6CisKKyAgICAgICAgZm9yIChhcmdzLCB3YW50ZWQpIGluICgoWyd3aXRoIHNwYWNlJywgJ25vc3BhY2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycid2l0aCBzcGFjZSInLCAnbm9zcGFjZSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWydub2NoYW5nZScsICdub3NwYWNlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbm9jaGFuZ2UnLCAnbm9zcGFjZSddKSk6CisgICAgICAgICAgICByZXMgPSBfbnRfcXVvdGVfYXJncyhhcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHdhbnRlZCkKKworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSBpbiAoJ250JywgJ3Bvc2l4JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1J1bnMgb25seSB1bmRlciBwb3NpeCBvciBudCcpCisgICAgZGVmIHRlc3Rfc3Bhd24oc2VsZik6CisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgZXhlY3V0YWJsZQorICAgICAgICAjIHRocm91Z2ggdGhlIHNoZWxsIHRoYXQgcmV0dXJucyAxCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmb28uc2gnKQorICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKGV4ZSwgJyMhL2Jpbi9zaFxuZXhpdCAxJykKKyAgICAgICAgICAgIG9zLmNobW9kKGV4ZSwgMDc3NykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmb28uYmF0JykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZmlsZShleGUsICdleGl0IDEnKQorCisgICAgICAgIG9zLmNobW9kKGV4ZSwgMDc3NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRXhlY0Vycm9yLCBzcGF3biwgW2V4ZV0pCisKKyAgICAgICAgIyBub3cgc29tZXRoaW5nIHRoYXQgd29ya3MKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5zaCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZXhlLCAnIyEvYmluL3NoXG5leGl0IDAnKQorICAgICAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5iYXQnKQorICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKGV4ZSwgJ2V4aXQgMCcpCisKKyAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQorICAgICAgICBzcGF3bihbZXhlXSkgICMgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgZXJyb3IKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFNwYXduVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CmluZGV4IDg4ZjllZDguLjQ5NTcwYzQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQpAQCAtMSwxMyArMSwxNSBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5kaXN0LiIiIgotCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnN5c2NvbmZpZy4iIiIKIGltcG9ydCBvcwogaW1wb3J0IHRlc3QKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNodXRpbAogCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiAKLWNsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoU3lzY29uZmlnVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKQEAgLTE1LDE5ICsxNywyNiBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYWtlZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLm1ha2VmaWxlKQorICAgICAgICBzZWxmLmNsZWFudXBfdGVzdGZuKCkKICAgICAgICAgc3VwZXIoU3lzY29uZmlnVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAotICAgIGRlZiB0ZXN0X2dldF9jb25maWdfaF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgY29uZmlnX2ggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCisgICAgZGVmIGNsZWFudXBfdGVzdGZuKHNlbGYpOgorICAgICAgICBwYXRoID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKIAogICAgIGRlZiB0ZXN0X2dldF9weXRob25fbGliKHNlbGYpOgogICAgICAgICBsaWJfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKCkKICAgICAgICAgIyBYWFggZG9lc24ndCB3b3JrIG9uIExpbnV4IHdoZW4gUHl0aG9uIHdhcyBuZXZlciBpbnN0YWxsZWQgYmVmb3JlCi0gICAgICAgICNzZWxmLmFzc2VydF8ob3MucGF0aC5pc2RpcihsaWJfZGlyKSwgbGliX2RpcikKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGxpYl9kaXIpLCBsaWJfZGlyKQogICAgICAgICAjIHRlc3QgZm9yIHB5dGhvbnh4LmxpYj8KICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocHJlZml4PVRFU1RGTikpCisgICAgICAgIF9zeXNjb25maWcgPSBfX2ltcG9ydF9fKCdzeXNjb25maWcnKQorICAgICAgICByZXMgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoVHJ1ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0c3RkbGliJyksIHJlcykKIAogICAgIGRlZiB0ZXN0X2dldF9weXRob25faW5jKHNlbGYpOgogICAgICAgICBpbmNfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25faW5jKCkKQEAgLTM4LDIwICs0NywyOSBAQAogICAgICAgICBweXRob25faCA9IG9zLnBhdGguam9pbihpbmNfZGlyLCAiUHl0aG9uLmgiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocHl0aG9uX2gpLCBweXRob25faCkKIAotICAgIGRlZiB0ZXN0X2dldF9jb25maWdfdmFycyhzZWxmKToKLSAgICAgICAgY3ZhcnMgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoY3ZhcnMsIGRpY3QpKQotICAgICAgICBzZWxmLmFzc2VydF8oY3ZhcnMpCisgICAgZGVmIHRlc3RfcGFyc2VfbWFrZWZpbGVfYmFzZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlZmlsZSA9IHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBmZCA9IG9wZW4oc2VsZi5tYWtlZmlsZSwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZC53cml0ZShyIkNPTkZJR19BUkdTPSAgJy0tYXJnMT1vcHRhcmcxJyAnRU5WPUxJQiciICdcbicpCisgICAgICAgICAgICBmZC53cml0ZSgnVkFSPSRPVEhFUlxuT1RIRVI9Zm9vJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgZCA9IHN5c2NvbmZpZy5wYXJzZV9tYWtlZmlsZShzZWxmLm1ha2VmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnQ09ORklHX0FSR1MnOiAiJy0tYXJnMT1vcHRhcmcxJyAnRU5WPUxJQiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCiAKICAgICBkZWYgdGVzdF9wYXJzZV9tYWtlZmlsZV9saXRlcmFsX2RvbGxhcihzZWxmKToKICAgICAgICAgc2VsZi5tYWtlZmlsZSA9IHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTgogICAgICAgICBmZCA9IG9wZW4oc2VsZi5tYWtlZmlsZSwgJ3cnKQotICAgICAgICBmZC53cml0ZShyIkNPTkZJR19BUkdTPSAgJy0tYXJnMT1vcHRhcmcxJyAnRU5WPVwkJExJQiciICdcbicpCi0gICAgICAgIGZkLndyaXRlKCdWQVI9JE9USEVSXG5PVEhFUj1mb28nKQotICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkLndyaXRlKHIiQ09ORklHX0FSR1M9ICAnLS1hcmcxPW9wdGFyZzEnICdFTlY9XCQkTElCJyIgJ1xuJykKKyAgICAgICAgICAgIGZkLndyaXRlKCdWQVI9JE9USEVSXG5PVEhFUj1mb28nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmQuY2xvc2UoKQogICAgICAgICBkID0gc3lzY29uZmlnLnBhcnNlX21ha2VmaWxlKHNlbGYubWFrZWZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQsIHsnQ09ORklHX0FSR1MnOiByIictLWFyZzE9b3B0YXJnMScgJ0VOVj1cJExJQiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09USEVSJzogJ2Zvbyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnQ09ORklHX0FSR1MnOiByIictLWFyZzE9b3B0YXJnMScgJ0VOVj1cJExJQiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCiAKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF90ZXh0X2ZpbGUucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdGV4dF9maWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTljZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdGV4dF9maWxlLnB5CkBAIC0wLDAgKzEsMTA3IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnRleHRfZmlsZS4iIiIKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGRpc3R1dGlscy50ZXh0X2ZpbGUgaW1wb3J0IFRleHRGaWxlCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK1RFU1RfREFUQSA9ICIiIiMgdGVzdCBmaWxlCisKK2xpbmUgMyBcXAorIyBpbnRlcnZlbmluZyBjb21tZW50CisgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUKKyIiIgorCitjbGFzcyBUZXh0RmlsZVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICAjIG9sZCB0ZXN0cyBtb3ZlZCBmcm9tIHRleHRfZmlsZS5fX21haW5fXworICAgICAgICAjIHNvIHRoZXkgYXJlIHJlYWxseSBjYWxsZWQgYnkgdGhlIGJ1aWxkYm90cworCisgICAgICAgICMgcmVzdWx0IDE6IG5vIGZhbmN5IG9wdGlvbnMKKyAgICAgICAgcmVzdWx0MSA9IFsnIyB0ZXN0IGZpbGVcbicsICdcbicsICdsaW5lIDMgXFxcbicsCisgICAgICAgICAgICAgICAgICAgJyMgaW50ZXJ2ZW5pbmcgY29tbWVudFxuJywKKyAgICAgICAgICAgICAgICAgICAnICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4nXQorCisgICAgICAgICMgcmVzdWx0IDI6IGp1c3Qgc3RyaXAgY29tbWVudHMKKyAgICAgICAgcmVzdWx0MiA9IFsiXG4iLAorICAgICAgICAgICAgICAgICAgICJsaW5lIDMgXFxcbiIsCisgICAgICAgICAgICAgICAgICAgIiAgY29udGludWVzIG9uIG5leHQgbGluZVxuIl0KKworICAgICAgICAjIHJlc3VsdCAzOiBqdXN0IHN0cmlwIGJsYW5rIGxpbmVzCisgICAgICAgIHJlc3VsdDMgPSBbIiMgdGVzdCBmaWxlXG4iLAorICAgICAgICAgICAgICAgICAgICJsaW5lIDMgXFxcbiIsCisgICAgICAgICAgICAgICAgICAgIiMgaW50ZXJ2ZW5pbmcgY29tbWVudFxuIiwKKyAgICAgICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4iXQorCisgICAgICAgICMgcmVzdWx0IDQ6IGRlZmF1bHQsIHN0cmlwIGNvbW1lbnRzLCBibGFuayBsaW5lcywKKyAgICAgICAgIyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorICAgICAgICByZXN1bHQ0ID0gWyJsaW5lIDMgXFwiLAorICAgICAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUiXQorCisgICAgICAgICMgcmVzdWx0IDU6IHN0cmlwIGNvbW1lbnRzIGFuZCBibGFua3MsIHBsdXMgam9pbiBsaW5lcyAoYnV0IGRvbid0CisgICAgICAgICMgImNvbGxhcHNlIiBqb2luZWQgbGluZXMKKyAgICAgICAgcmVzdWx0NSA9IFsibGluZSAzICAgY29udGludWVzIG9uIG5leHQgbGluZSJdCisKKyAgICAgICAgIyByZXN1bHQgNjogc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rcywgcGx1cyBqb2luIGxpbmVzIChhbmQKKyAgICAgICAgIyAiY29sbGFwc2UiIGpvaW5lZCBsaW5lcworICAgICAgICByZXN1bHQ2ID0gWyJsaW5lIDMgY29udGludWVzIG9uIG5leHQgbGluZSJdCisKKyAgICAgICAgZGVmIHRlc3RfaW5wdXQoY291bnQsIGRlc2NyaXB0aW9uLCBmaWxlLCBleHBlY3RlZF9yZXN1bHQpOgorICAgICAgICAgICAgcmVzdWx0ID0gZmlsZS5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkX3Jlc3VsdCkKKworICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJ0ZXN0LnR4dCIpCisgICAgICAgIG91dF9maWxlID0gb3BlbihmaWxlbmFtZSwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShURVNUX0RBVEEpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0wLCBza2lwX2JsYW5rcz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTAsIHJzdHJpcF93cz0wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDEsICJubyBwcm9jZXNzaW5nIiwgaW5fZmlsZSwgcmVzdWx0MSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGluX2ZpbGUuY2xvc2UoKQorCisgICAgICAgIGluX2ZpbGUgPSBUZXh0RmlsZShmaWxlbmFtZSwgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdHJpcF93cz0wLCByc3RyaXBfd3M9MCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9pbnB1dCgyLCAic3RyaXAgY29tbWVudHMiLCBpbl9maWxlLCByZXN1bHQyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0wLCBza2lwX2JsYW5rcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTAsIHJzdHJpcF93cz0wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDMsICJzdHJpcCBibGFua3MiLCBpbl9maWxlLCByZXN1bHQzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDQsICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpbl9maWxlLCByZXN1bHQ0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0xLCBza2lwX2JsYW5rcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9saW5lcz0xLCByc3RyaXBfd3M9MSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9pbnB1dCg1LCAiam9pbiBsaW5lcyB3aXRob3V0IGNvbGxhcHNpbmciLCBpbl9maWxlLCByZXN1bHQ1KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCisKKyAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0xLCBza2lwX2JsYW5rcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9saW5lcz0xLCByc3RyaXBfd3M9MSwgY29sbGFwc2Vfam9pbj0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2lucHV0KDYsICJqb2luIGxpbmVzIHdpdGggY29sbGFwc2luZyIsIGluX2ZpbGUsIHJlc3VsdDYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFRleHRGaWxlVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91bml4Y2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKaW5kZXggM2YyMzNlMi4uNDBjOTA4YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKQEAgLTEsNiArMSw3IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCkBAIC0xMjYsNCArMTI3LDQgQEAKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFVuaXhDQ29tcGlsZXJUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKaW5kZXggMzgyNjk3Zi4uOTkxMTE5OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CkBAIC0xLDE0ICsxLDEzIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkLiIiIgogIyAtKi0gZW5jb2Rpbmc6IHV0ZjggLSotCi1pbXBvcnQgc3lzCisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkLiIiIgogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBodHRwbGliCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAorZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgdXBsb2FkIGFzIHVwbG9hZF9tb2QKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkIGltcG9ydCB1cGxvYWQKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgogCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFBZUElSQywgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCiAKIFBZUElSQ19MT05HX1BBU1NXT1JEID0gIiIiXApAQCAtMjksNjMgKzI4LDc1IEBACiByZXBvc2l0b3J5Omh0dHA6Ly9hbm90aGVyLnB5cGkvCiAiIiIKIAotY2xhc3MgX1Jlc3Aob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzKToKLSAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKLSAgICAgICAgc2VsZi5yZWFzb24gPSAnT0snCiAKLV9DT05ORUNUSU9OUyA9IFtdCitQWVBJUkNfTk9QQVNTV09SRCA9ICIiIlwKK1tkaXN0dXRpbHNdCiAKLWNsYXNzIF9GYWtlSFRUUENvbm5lY3Rpb24ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmV0bG9jKToKLSAgICAgICAgc2VsZi5yZXF1ZXN0cyA9IFtdCi0gICAgICAgIHNlbGYuaGVhZGVycyA9IHt9Ci0gICAgICAgIHNlbGYuYm9keSA9IE5vbmUKLSAgICAgICAgc2VsZi5uZXRsb2MgPSBuZXRsb2MKLSAgICAgICAgX0NPTk5FQ1RJT05TLmFwcGVuZChzZWxmKQoraW5kZXgtc2VydmVycyA9CisgICAgc2VydmVyMQogCi0gICAgZGVmIGNvbm5lY3Qoc2VsZik6Ci0gICAgICAgIHBhc3MKLSAgICBlbmRoZWFkZXJzID0gY29ubmVjdAorW3NlcnZlcjFdCit1c2VybmFtZTptZQorIiIiCiAKLSAgICBkZWYgc2VuZChzZWxmLCBib2R5KToKLSAgICAgICAgc2VsZi5ib2R5ID0gYm9keQorY2xhc3MgRmFrZU9wZW4ob2JqZWN0KToKIAotICAgIGRlZiBwdXRyZXF1ZXN0KHNlbGYsIHR5cGVfLCBkYXRhKToKLSAgICAgICAgc2VsZi5yZXF1ZXN0cy5hcHBlbmQoKHR5cGVfLCBkYXRhKSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5yZXEgPSB1cmwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVxID0gTm9uZQorICAgICAgICBzZWxmLm1zZyA9ICdPSycKIAotICAgIGRlZiBwdXRoZWFkZXIoc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICBzZWxmLmhlYWRlcnNbbmFtZV0gPSB2YWx1ZQorICAgIGRlZiBnZXRjb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gMjAwCiAKLSAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiBfUmVzcCgyMDApCiAKIGNsYXNzIHVwbG9hZFRlc3RDYXNlKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKHVwbG9hZFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYub2xkX2tsYXNzID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbgotICAgICAgICBodHRwbGliLkhUVFBDb25uZWN0aW9uID0gX0Zha2VIVFRQQ29ubmVjdGlvbgorICAgICAgICBzZWxmLm9sZF9vcGVuID0gdXBsb2FkX21vZC51cmxvcGVuCisgICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYuX3VybG9wZW4KKyAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBOb25lCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGh0dHBsaWIuSFRUUENvbm5lY3Rpb24gPSBzZWxmLm9sZF9rbGFzcworICAgICAgICB1cGxvYWRfbW9kLnVybG9wZW4gPSBzZWxmLm9sZF9vcGVuCiAgICAgICAgIHN1cGVyKHVwbG9hZFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCiAKKyAgICBkZWYgX3VybG9wZW4oc2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBGYWtlT3Blbih1cmwpCisgICAgICAgIHJldHVybiBzZWxmLmxhc3Rfb3BlbgorCiAgICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKIAogICAgICAgICAjIG5ldyBmb3JtYXQKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5yYywgJ3cnKQotICAgICAgICBmLndyaXRlKFBZUElSQykKLSAgICAgICAgZi5jbG9zZSgpCi0KKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQykKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCiAgICAgICAgIGNtZCA9IHVwbG9hZChkaXN0KQogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIGZvciBhdHRyLCB3YWl0ZWQgaW4gKCgndXNlcm5hbWUnLCAnbWUnKSwgKCdwYXNzd29yZCcsICdzZWNyZXQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZWFsbScsICdweXBpJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRhdHRyKGNtZCwgYXR0ciksIHdhaXRlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjbWQsIGF0dHIpLCB3YWl0ZWQpCiAKKyAgICBkZWYgdGVzdF9zYXZlZF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIyBmaWxlIHdpdGggbm8gcGFzc3dvcmQKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQ19OT1BBU1NXT1JEKQorCisgICAgICAgICMgbWFrZSBzdXJlIGl0IHBhc3NlcworICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCisgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGFzc3dvcmQsIE5vbmUpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZ2V0IGl0IGFzIHdlbGwsIGlmIGFub3RoZXIgY29tbWFuZAorICAgICAgICAjIGluaXRpYWxpemVkIGl0IGF0IHRoZSBkaXN0IGxldmVsCisgICAgICAgIGRpc3QucGFzc3dvcmQgPSAneHh4JworICAgICAgICBjbWQgPSB1cGxvYWQoZGlzdCkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5wYXNzd29yZCwgJ3h4eCcpCiAKICAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6CiAgICAgICAgIHRtcCA9IHNlbGYubWtkdGVtcCgpCkBAIC0xMDIsMjEgKzExMywxOSBAQAogICAgICAgICBjbWQucnVuKCkKIAogICAgICAgICAjIHdoYXQgZGlkIHdlIHNlbmQgPwotICAgICAgICByZXMgPSBfQ09OTkVDVElPTlNbLTFdCi0KLSAgICAgICAgaGVhZGVycyA9IHJlcy5oZWFkZXJzCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnZMOpZMOpJyBpbiByZXMuYm9keSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIwODUnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdkw6lkw6knLCBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKKyAgICAgICAgaGVhZGVycyA9IGRpY3Qoc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIwODUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGVhZGVyc1snQ29udGVudC10eXBlJ10uc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQotCi0gICAgICAgIG1ldGhvZCwgcmVxdWVzdCA9IHJlcy5yZXF1ZXN0c1stMV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0aG9kLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5uZXRsb2MsICdweXBpLnB5dGhvbi5vcmcnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3h4eCcgaW4gcmVzLmJvZHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1xuJyBpbiBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9tZXRob2QoKSwgJ1BPU1QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfZnVsbF91cmwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4eHgnIGluIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQorICAgICAgICBhdXRoID0gc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdcbicgaW4gYXV0aCkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHVwbG9hZFRlc3RDYXNlKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InRlc3Rfc3VpdGUiKQorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CmluZGV4IDk4MWFkMDAuLjY3Y2Q0Y2MgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CkBAIC0xLDYgKzEsNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy51dGlsLiIiIgogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBEaXN0dXRpbHNCeXRlQ29tcGlsZUVycm9yCiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBieXRlX2NvbXBpbGUKQEAgLTIxLDQgKzIyLDQgQEAKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFV0aWxUZXN0Q2FzZSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSJ0ZXN0X3N1aXRlIikKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb24ucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdmVyc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTg5OTU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb24ucHkKQEAgLTAsMCArMSw3MSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy52ZXJzaW9uLiIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KK2Zyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitjbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcHJlcmVsZWFzZShzZWxmKToKKyAgICAgICAgdmVyc2lvbiA9IFN0cmljdFZlcnNpb24oJzEuMi4zYTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb24udmVyc2lvbiwgKDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb24ucHJlcmVsZWFzZSwgKCdhJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZlcnNpb24pLCAnMS4yLjNhMScpCisKKyAgICAgICAgdmVyc2lvbiA9IFN0cmljdFZlcnNpb24oJzEuMi4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmVyc2lvbiksICcxLjInKQorCisgICAgZGVmIHRlc3RfY21wX3N0cmljdChzZWxmKToKKyAgICAgICAgdmVyc2lvbnMgPSAoKCcxLjUuMScsICcxLjUuMmIyJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzE2MScsICczLjEwYScsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAoJzguMDInLCAnOC4wMicsIDApLAorICAgICAgICAgICAgICAgICAgICAoJzMuNGonLCAnMTk5Ni4wNy4xMicsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAoJzMuMi5wbDAnLCAnMy4xLjEuNicsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAoJzJnNicsICcxMWcnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgKCcwLjknLCAnMi4yJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzEuMi4xJywgJzEuMicsIDEpLAorICAgICAgICAgICAgICAgICAgICAoJzEuMScsICcxLjIuMicsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgKCcxLjInLCAnMS4xJywgMSksCisgICAgICAgICAgICAgICAgICAgICgnMS4yLjEnLCAnMS4yLjInLCAtMSksCisgICAgICAgICAgICAgICAgICAgICgnMS4yLjInLCAnMS4yJywgMSksCisgICAgICAgICAgICAgICAgICAgICgnMS4yJywgJzEuMi4yJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzAuNC4wJywgJzAuNCcsIDApLAorICAgICAgICAgICAgICAgICAgICAoJzEuMTMrKycsICc1LjUua3cnLCBWYWx1ZUVycm9yKSkKKworICAgICAgICBmb3IgdjEsIHYyLCB3YW50ZWQgaW4gdmVyc2lvbnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzID0gU3RyaWN0VmVyc2lvbih2MSkuX19jbXBfXyhTdHJpY3RWZXJzaW9uKHYyKSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGlmIHdhbnRlZCBpcyBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCgiY21wKCVzLCAlcykgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAodjEsIHYyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCB3YW50ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbXAoJXMsICVzKSBzaG91bGQgYmUgJXMsIGdvdCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodjEsIHYyLCB3YW50ZWQsIHJlcykpCisKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgdmVyc2lvbnMgPSAoKCcxLjUuMScsICcxLjUuMmIyJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzE2MScsICczLjEwYScsIDEpLAorICAgICAgICAgICAgICAgICAgICAoJzguMDInLCAnOC4wMicsIDApLAorICAgICAgICAgICAgICAgICAgICAoJzMuNGonLCAnMTk5Ni4wNy4xMicsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgKCczLjIucGwwJywgJzMuMS4xLjYnLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgKCcyZzYnLCAnMTFnJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAoJzAuOTYwOTIzJywgJzIuMmJldGEyOScsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgKCcxLjEzKysnLCAnNS41Lmt3JywgLTEpKQorCisKKyAgICAgICAgZm9yIHYxLCB2Miwgd2FudGVkIGluIHZlcnNpb25zOgorICAgICAgICAgICAgcmVzID0gTG9vc2VWZXJzaW9uKHYxKS5fX2NtcF9fKExvb3NlVmVyc2lvbih2MikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgd2FudGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY21wKCVzLCAlcykgc2hvdWxkIGJlICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYxLCB2Miwgd2FudGVkLCByZXMpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVmVyc2lvblRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdmVyc2lvbnByZWRpY2F0ZS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9ucHJlZGljYXRlLnB5CmluZGV4IDhhNjBkYmUuLjFkNmM4ZDUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9ucHJlZGljYXRlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9ucHJlZGljYXRlLnB5CkBAIC00LDYgKzQsMTAgQEAKIAogaW1wb3J0IGRpc3R1dGlscy52ZXJzaW9ucHJlZGljYXRlCiBpbXBvcnQgZG9jdGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIGRvY3Rlc3QuRG9jVGVzdFN1aXRlKGRpc3R1dGlscy52ZXJzaW9ucHJlZGljYXRlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weSBiL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CmluZGV4IGZmMjg3OGQuLjA5YTc5OGIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CkBAIC02LDggKzYsNyBAQAogCiBfX3JldmlzaW9uX18gPSAiJElkJCIKIAotZnJvbSB0eXBlcyBpbXBvcnQgKgotaW1wb3J0IHN5cywgb3MsIHN0cmluZworaW1wb3J0IHN5cwogCiAKIGNsYXNzIFRleHRGaWxlOgpAQCAtMTM3LDEyICsxMzYsMTIgQEAKICAgICAgICAgaWYgbGluZSBpcyBOb25lOgogICAgICAgICAgICAgbGluZSA9IHNlbGYuY3VycmVudF9saW5lCiAgICAgICAgIG91dG1zZy5hcHBlbmQoc2VsZi5maWxlbmFtZSArICIsICIpCi0gICAgICAgIGlmIHR5cGUgKGxpbmUpIGluIChMaXN0VHlwZSwgVHVwbGVUeXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIG91dG1zZy5hcHBlbmQoImxpbmVzICVkLSVkOiAiICUgdHVwbGUgKGxpbmUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3V0bXNnLmFwcGVuZCgibGluZSAlZDogIiAlIGxpbmUpCiAgICAgICAgIG91dG1zZy5hcHBlbmQoc3RyKG1zZykpCi0gICAgICAgIHJldHVybiBzdHJpbmcuam9pbihvdXRtc2csICIiKQorICAgICAgICByZXR1cm4gJycuam9pbihvdXRtc2cpCiAKIAogICAgIGRlZiBlcnJvciAoc2VsZiwgbXNnLCBsaW5lPU5vbmUpOgpAQCAtMTk2LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgIyB1bmVzY2FwZSBpdCAoYW5kIGFueSBvdGhlciBlc2NhcGVkICIjIidzIHRoYXQgbWlnaHQgYmUKICAgICAgICAgICAgICAgICAjIGx1cmtpbmcgaW4gdGhlcmUpIGFuZCBvdGhlcndpc2UgbGVhdmUgdGhlIGxpbmUgYWxvbmUuCiAKLSAgICAgICAgICAgICAgICBwb3MgPSBzdHJpbmcuZmluZCAobGluZSwgIiMiKQorICAgICAgICAgICAgICAgIHBvcyA9IGxpbmUuZmluZCgiIyIpCiAgICAgICAgICAgICAgICAgaWYgcG9zID09IC0xOiAgICAgICAgICAgIyBubyAiIyIgLS0gbm8gY29tbWVudHMKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCkBAIC0yMTksMTEgKzIxOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAjICAgIyBjb21tZW50IHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQKICAgICAgICAgICAgICAgICAgICAgIyAgIHRoZXJlCiAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGluICJoZWxsbyB0aGVyZSIuCi0gICAgICAgICAgICAgICAgICAgIGlmIHN0cmluZy5zdHJpcChsaW5lKSA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpID09ICIiOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICMgaXQncyBhbiBlc2NhcGVkICIjIgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLnJlcGxhY2UgKGxpbmUsICJcXCMiLCAiIyIpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIlxcIyIsICIjIikKIAogCiAgICAgICAgICAgICAjIGRpZCBwcmV2aW91cyBsaW5lIGVuZCB3aXRoIGEgYmFja3NsYXNoPyB0aGVuIGFjY3VtdWxhdGUKQEAgLTIzNSwxMSArMjM0LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWlsZHVwX2xpbmUKIAogICAgICAgICAgICAgICAgIGlmIHNlbGYuY29sbGFwc2Vfam9pbjoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN0cmluZy5sc3RyaXAgKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCiAgICAgICAgICAgICAgICAgbGluZSA9IGJ1aWxkdXBfbGluZSArIGxpbmUKIAogICAgICAgICAgICAgICAgICMgY2FyZWZ1bDogcGF5IGF0dGVudGlvbiB0byBsaW5lIG51bWJlciB3aGVuIGluY3JlbWVudGluZyBpdAotICAgICAgICAgICAgICAgIGlmIHR5cGUgKHNlbGYuY3VycmVudF9saW5lKSBpcyBMaXN0VHlwZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY3VycmVudF9saW5lLCBsaXN0KToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xpbmVbMV0gPSBzZWxmLmN1cnJlbnRfbGluZVsxXSArIDEKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbGluZSA9IFtzZWxmLmN1cnJlbnRfbGluZSwKQEAgLTI1MCw3ICsyNDksNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgICAgICAgICAgIyBzdGlsbCBoYXZlIHRvIGJlIGNhcmVmdWwgYWJvdXQgaW5jcmVtZW50aW5nIHRoZSBsaW5lIG51bWJlciEKLSAgICAgICAgICAgICAgICBpZiB0eXBlIChzZWxmLmN1cnJlbnRfbGluZSkgaXMgTGlzdFR5cGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLmN1cnJlbnRfbGluZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9saW5lID0gc2VsZi5jdXJyZW50X2xpbmVbMV0gKyAxCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2xpbmUgPSBzZWxmLmN1cnJlbnRfbGluZSArIDEKQEAgLTI1OSwxMSArMjU4LDExIEBACiAgICAgICAgICAgICAjIHN0cmlwIHdoaXRlc3BhY2UgaG93ZXZlciB0aGUgY2xpZW50IHdhbnRzIChsZWFkaW5nIGFuZAogICAgICAgICAgICAgIyB0cmFpbGluZywgb3Igb25lIG9yIHRoZSBvdGhlciwgb3IgbmVpdGhlcikKICAgICAgICAgICAgIGlmIHNlbGYubHN0cmlwX3dzIGFuZCBzZWxmLnJzdHJpcF93czoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3RyaW5nLnN0cmlwIChsaW5lKQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKICAgICAgICAgICAgIGVsaWYgc2VsZi5sc3RyaXBfd3M6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN0cmluZy5sc3RyaXAgKGxpbmUpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKICAgICAgICAgICAgIGVsaWYgc2VsZi5yc3RyaXBfd3M6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHN0cmluZy5yc3RyaXAgKGxpbmUpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKIAogICAgICAgICAgICAgIyBibGFuayBsaW5lICh3aGV0aGVyIHdlIHJzdHJpcCdlZCBvciBub3QpPyBza2lwIHRvIG5leHQgbGluZQogICAgICAgICAgICAgIyBpZiBhcHByb3ByaWF0ZQpAQCAtMzAzLDgwICszMDIsMyBAQAogICAgICAgICAgICBhIHBhcnNlciB3aXRoIGxpbmUtYXQtYS10aW1lIGxvb2thaGVhZC4iIiIKIAogICAgICAgICBzZWxmLmxpbmVidWYuYXBwZW5kIChsaW5lKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9kYXRhID0gIiIiIyB0ZXN0IGZpbGUKLQotbGluZSAzIFxcCi0jIGludGVydmVuaW5nIGNvbW1lbnQKLSAgY29udGludWVzIG9uIG5leHQgbGluZQotIiIiCi0gICAgIyByZXN1bHQgMTogbm8gZmFuY3kgb3B0aW9ucwotICAgIHJlc3VsdDEgPSBtYXAgKGxhbWJkYSB4OiB4ICsgIlxuIiwgc3RyaW5nLnNwbGl0ICh0ZXN0X2RhdGEsICJcbiIpWzA6LTFdKQotCi0gICAgIyByZXN1bHQgMjoganVzdCBzdHJpcCBjb21tZW50cwotICAgIHJlc3VsdDIgPSBbIlxuIiwKLSAgICAgICAgICAgICAgICJsaW5lIDMgXFxcbiIsCi0gICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4iXQotCi0gICAgIyByZXN1bHQgMzoganVzdCBzdHJpcCBibGFuayBsaW5lcwotICAgIHJlc3VsdDMgPSBbIiMgdGVzdCBmaWxlXG4iLAotICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKLSAgICAgICAgICAgICAgICIjIGludGVydmVuaW5nIGNvbW1lbnRcbiIsCi0gICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4iXQotCi0gICAgIyByZXN1bHQgNDogZGVmYXVsdCwgc3RyaXAgY29tbWVudHMsIGJsYW5rIGxpbmVzLCBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQotICAgIHJlc3VsdDQgPSBbImxpbmUgMyBcXCIsCi0gICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lIl0KLQotICAgICMgcmVzdWx0IDU6IHN0cmlwIGNvbW1lbnRzIGFuZCBibGFua3MsIHBsdXMgam9pbiBsaW5lcyAoYnV0IGRvbid0Ci0gICAgIyAiY29sbGFwc2UiIGpvaW5lZCBsaW5lcwotICAgIHJlc3VsdDUgPSBbImxpbmUgMyAgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUiXQotCi0gICAgIyByZXN1bHQgNjogc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rcywgcGx1cyBqb2luIGxpbmVzIChhbmQKLSAgICAjICJjb2xsYXBzZSIgam9pbmVkIGxpbmVzCi0gICAgcmVzdWx0NiA9IFsibGluZSAzIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUiXQotCi0gICAgZGVmIHRlc3RfaW5wdXQgKGNvdW50LCBkZXNjcmlwdGlvbiwgZmlsZSwgZXhwZWN0ZWRfcmVzdWx0KToKLSAgICAgICAgcmVzdWx0ID0gZmlsZS5yZWFkbGluZXMgKCkKLSAgICAgICAgIyByZXN1bHQgPSBzdHJpbmcuam9pbiAocmVzdWx0LCAnJykKLSAgICAgICAgaWYgcmVzdWx0ID09IGV4cGVjdGVkX3Jlc3VsdDoKLSAgICAgICAgICAgIHByaW50ICJvayAlZCAoJXMpIiAlIChjb3VudCwgZGVzY3JpcHRpb24pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAibm90IG9rICVkICglcyk6IiAlIChjb3VudCwgZGVzY3JpcHRpb24pCi0gICAgICAgICAgICBwcmludCAiKiogZXhwZWN0ZWQ6IgotICAgICAgICAgICAgcHJpbnQgZXhwZWN0ZWRfcmVzdWx0Ci0gICAgICAgICAgICBwcmludCAiKiogcmVjZWl2ZWQ6IgotICAgICAgICAgICAgcHJpbnQgcmVzdWx0Ci0KLQotICAgIGZpbGVuYW1lID0gInRlc3QudHh0IgotICAgIG91dF9maWxlID0gb3BlbiAoZmlsZW5hbWUsICJ3IikKLSAgICBvdXRfZmlsZS53cml0ZSAodGVzdF9kYXRhKQotICAgIG91dF9maWxlLmNsb3NlICgpCi0KLSAgICBpbl9maWxlID0gVGV4dEZpbGUgKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0wLCBza2lwX2JsYW5rcz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTAsIHJzdHJpcF93cz0wKQotICAgIHRlc3RfaW5wdXQgKDEsICJubyBwcm9jZXNzaW5nIiwgaW5fZmlsZSwgcmVzdWx0MSkKLQotICAgIGluX2ZpbGUgPSBUZXh0RmlsZSAoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCi0gICAgdGVzdF9pbnB1dCAoMiwgInN0cmlwIGNvbW1lbnRzIiwgaW5fZmlsZSwgcmVzdWx0MikKLQotICAgIGluX2ZpbGUgPSBUZXh0RmlsZSAoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCi0gICAgdGVzdF9pbnB1dCAoMywgInN0cmlwIGJsYW5rcyIsIGluX2ZpbGUsIHJlc3VsdDMpCi0KLSAgICBpbl9maWxlID0gVGV4dEZpbGUgKGZpbGVuYW1lKQotICAgIHRlc3RfaW5wdXQgKDQsICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpbl9maWxlLCByZXN1bHQ0KQotCi0gICAgaW5fZmlsZSA9IFRleHRGaWxlIChmaWxlbmFtZSwgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGpvaW5fbGluZXM9MSwgcnN0cmlwX3dzPTEpCi0gICAgdGVzdF9pbnB1dCAoNSwgImpvaW4gbGluZXMgd2l0aG91dCBjb2xsYXBzaW5nIiwgaW5fZmlsZSwgcmVzdWx0NSkKLQotICAgIGluX2ZpbGUgPSBUZXh0RmlsZSAoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICBqb2luX2xpbmVzPTEsIHJzdHJpcF93cz0xLCBjb2xsYXBzZV9qb2luPTEpCi0gICAgdGVzdF9pbnB1dCAoNiwgImpvaW4gbGluZXMgd2l0aCBjb2xsYXBzaW5nIiwgaW5fZmlsZSwgcmVzdWx0NikKLQotICAgIG9zLnJlbW92ZSAoZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKaW5kZXggZTkyYmVmMS4uZjA2ZTRmZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQpAQCAtMTE2LDEzICsxMTYsMTUgQEAKICAgICAgICAgICAgICAgICAjIGJlaGF2aW91ci4KICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG0gPSByZS5zZWFyY2goCi0gICAgICAgICAgICAgICAgICAgICAgICByJzxrZXk+UHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lvbjwva2V5PlxzKicgKwotICAgICAgICAgICAgICAgICAgICAgICAgcic8c3RyaW5nPiguKj8pPC9zdHJpbmc+JywgZi5yZWFkKCkpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICcuJy5qb2luKG0uZ3JvdXAoMSkuc3BsaXQoJy4nKVs6Ml0pCi0gICAgICAgICAgICAgICAgIyBlbHNlOiBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPGtleT5Qcm9kdWN0VXNlclZpc2libGVWZXJzaW9uPC9rZXk+XHMqJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcic8c3RyaW5nPiguKj8pPC9zdHJpbmc+JywgZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtYWNyZWxlYXNlID0gJy4nLmpvaW4obS5ncm91cCgxKS5zcGxpdCgnLicpWzoyXSkKKyAgICAgICAgICAgICAgICAgICAgIyBlbHNlOiBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgaWYgbm90IG1hY3ZlcjoKICAgICAgICAgICAgIG1hY3ZlciA9IG1hY3JlbGVhc2UKQEAgLTIzNCwxNSArMjM2LDYgQEAKICAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQogCi0gICAgZWxpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhwYXRobmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRobmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgQ2hvcCBvZmYgdm9sdW1lIG5hbWUgZnJvbSBzdGFydCBvZiBwYXRoCi0gICAgICAgICAgICBlbGVtZW50cyA9IHN0cmluZy5zcGxpdChwYXRobmFtZSwgIjoiLCAxKQotICAgICAgICAgICAgcGF0aG5hbWUgPSAiOiIgKyBlbGVtZW50c1sxXQotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihuZXdfcm9vdCwgcGF0aG5hbWUpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLCBcCiAgICAgICAgICAgICAgICJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZQpkaWZmIC0tZ2l0IGEvTGliL2RvY3Rlc3QucHkgYi9MaWIvZG9jdGVzdC5weQppbmRleCBmMWNiMWYyLi41NTY1YWFiIDEwMDY0NAotLS0gYS9MaWIvZG9jdGVzdC5weQorKysgYi9MaWIvZG9jdGVzdC5weQpAQCAtMjE2LDcgKzIxNiw4IEBACiAgICAgICAgICAgICAgICAgIyBnZXRfZGF0YSgpIG9wZW5zIGZpbGVzIGFzICdyYicsIHNvIG9uZSBtdXN0IGRvIHRoZSBlcXVpdmFsZW50CiAgICAgICAgICAgICAgICAgIyBjb252ZXJzaW9uIGFzIHVuaXZlcnNhbCBuZXdsaW5lcyB3b3VsZCBkby4KICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZV9jb250ZW50cy5yZXBsYWNlKG9zLmxpbmVzZXAsICdcbicpLCBmaWxlbmFtZQotICAgIHJldHVybiBvcGVuKGZpbGVuYW1lKS5yZWFkKCksIGZpbGVuYW1lCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmOgorICAgICAgICByZXR1cm4gZi5yZWFkKCksIGZpbGVuYW1lCiAKICMgVXNlIHN5cy5zdGRvdXQgZW5jb2RpbmcgZm9yIG91cHV0LgogX2VuY29kaW5nID0gZ2V0YXR0cihzeXMuX19zdGRvdXRfXywgJ2VuY29kaW5nJywgTm9uZSkgb3IgJ3V0Zi04JwpAQCAtMTI4Nyw5ICsxMjg4LDkgQEAKIAogICAgICAgICAgICAgICAgICMgQW5vdGhlciBjaGFuY2UgaWYgdGhleSBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgZGV0YWlsLgogICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5vcHRpb25mbGFncyAmIElHTk9SRV9FWENFUFRJT05fREVUQUlMOgotICAgICAgICAgICAgICAgICAgICBtMSA9IHJlLm1hdGNoKHInW146XSo6JywgZXhhbXBsZS5leGNfbXNnKQotICAgICAgICAgICAgICAgICAgICBtMiA9IHJlLm1hdGNoKHInW146XSo6JywgZXhjX21zZykKLSAgICAgICAgICAgICAgICAgICAgaWYgbTEgYW5kIG0yIGFuZCBjaGVjayhtMS5ncm91cCgwKSwgbTIuZ3JvdXAoMCksCisgICAgICAgICAgICAgICAgICAgIG0xID0gcmUubWF0Y2gocicoPzpbXjpdKlwuKT8oW146XSo6KScsIGV4YW1wbGUuZXhjX21zZykKKyAgICAgICAgICAgICAgICAgICAgbTIgPSByZS5tYXRjaChyJyg/OlteOl0qXC4pPyhbXjpdKjopJywgZXhjX21zZykKKyAgICAgICAgICAgICAgICAgICAgaWYgbTEgYW5kIG0yIGFuZCBjaGVjayhtMS5ncm91cCgxKSwgbTIuZ3JvdXAoMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcHRpb25mbGFncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjb21lID0gU1VDQ0VTUwogCkBAIC0xMzI3LDEzICsxMzI4LDE1IEBACiAgICAgICAgIHNlbGYudHJpZXMgKz0gdAogCiAgICAgX19MSU5FQ0FDSEVfRklMRU5BTUVfUkUgPSByZS5jb21waWxlKHInPGRvY3Rlc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJyg/UDxuYW1lPltcd1wuXSspJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJyg/UDxuYW1lPi4rKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidcWyg/UDxleGFtcGxlbnVtPlxkKylcXT4kJykKICAgICBkZWYgX19wYXRjaGVkX2xpbmVjYWNoZV9nZXRsaW5lcyhzZWxmLCBmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHM9Tm9uZSk6CiAgICAgICAgIG0gPSBzZWxmLl9fTElORUNBQ0hFX0ZJTEVOQU1FX1JFLm1hdGNoKGZpbGVuYW1lKQogICAgICAgICBpZiBtIGFuZCBtLmdyb3VwKCduYW1lJykgPT0gc2VsZi50ZXN0Lm5hbWU6CiAgICAgICAgICAgICBleGFtcGxlID0gc2VsZi50ZXN0LmV4YW1wbGVzW2ludChtLmdyb3VwKCdleGFtcGxlbnVtJykpXQotICAgICAgICAgICAgc291cmNlID0gZXhhbXBsZS5zb3VyY2UuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIHNvdXJjZSA9IGV4YW1wbGUuc291cmNlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLmVuY29kZSgnYXNjaWknLCAnYmFja3NsYXNocmVwbGFjZScpCiAgICAgICAgICAgICByZXR1cm4gc291cmNlLnNwbGl0bGluZXMoVHJ1ZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnNhdmVfbGluZWNhY2hlX2dldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKQEAgLTE3NzEsNyArMTc3NCw3IEBACiAKICAgICBSZXR1cm4gKCNmYWlsdXJlcywgI3Rlc3RzKS4KIAotICAgIFNlZSBkb2N0ZXN0Ll9fZG9jX18gZm9yIGFuIG92ZXJ2aWV3LgorICAgIFNlZSBoZWxwKGRvY3Rlc3QpIGZvciBhbiBvdmVydmlldy4KIAogICAgIE9wdGlvbmFsIGtleXdvcmQgYXJnICJuYW1lIiBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlOyBieSBkZWZhdWx0CiAgICAgdXNlIG0uX19uYW1lX18uCkBAIC0yMjU4LDYgKzIyNjEsMTkgQEAKICAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKICAgICAgICAgcmV0dXJuICJEb2N0ZXN0OiAiICsgc2VsZi5fZHRfdGVzdC5uYW1lCiAKK2NsYXNzIFNraXBEb2NUZXN0Q2FzZShEb2NUZXN0Q2FzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBEb2NUZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCBOb25lKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBUZXN0KCJEb2NUZXN0U3VpdGUgd2lsbCBub3Qgd29yayB3aXRoIC1PMiBhbmQgYWJvdmUiKQorCisgICAgZGVmIHRlc3Rfc2tpcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAiU2tpcHBpbmcgdGVzdHMgZnJvbSAlcyIgJSBtb2R1bGUuX19uYW1lX18KKwogZGVmIERvY1Rlc3RTdWl0ZShtb2R1bGU9Tm9uZSwgZ2xvYnM9Tm9uZSwgZXh0cmFnbG9icz1Ob25lLCB0ZXN0X2ZpbmRlcj1Ob25lLAogICAgICAgICAgICAgICAgICAqKm9wdGlvbnMpOgogICAgICIiIgpAQCAtMjMwMCwxMyArMjMxNiwyMCBAQAogCiAgICAgbW9kdWxlID0gX25vcm1hbGl6ZV9tb2R1bGUobW9kdWxlKQogICAgIHRlc3RzID0gdGVzdF9maW5kZXIuZmluZChtb2R1bGUsIGdsb2JzPWdsb2JzLCBleHRyYWdsb2JzPWV4dHJhZ2xvYnMpCi0gICAgaWYgbm90IHRlc3RzOgorCisgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgorICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UoKSkKKyAgICAgICAgcmV0dXJuIHN1aXRlCisgICAgZWxpZiBub3QgdGVzdHM6CiAgICAgICAgICMgV2h5IGRvIHdlIHdhbnQgdG8gZG8gdGhpcz8gQmVjYXVzZSBpdCByZXZlYWxzIGEgYnVnIHRoYXQgbWlnaHQKICAgICAgICAgIyBvdGhlcndpc2UgYmUgaGlkZGVuLgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyB0ZXN0cyIpCiAKICAgICB0ZXN0cy5zb3J0KCkKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKICAgICAgICAgaWYgbGVuKHRlc3QuZXhhbXBsZXMpID09IDA6CiAgICAgICAgICAgICBjb250aW51ZQpAQCAtMjY3OCwyNyArMjcwMSwzMSBAQAogICAgICAgICAgICAgIiIiLAogICAgICAgICAgICB9CiAKKwogZGVmIF90ZXN0KCk6CiAgICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgdGVzdGZpbGVzOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gdGVzdGZpbGVzOgotICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgICAgICMgSXQgaXMgYSBtb2R1bGUgLS0gaW5zZXJ0IGl0cyBkaXIgaW50byBzeXMucGF0aCBhbmQgdHJ5IHRvCi0gICAgICAgICAgICAgICAgIyBpbXBvcnQgaXQuIElmIGl0IGlzIHBhcnQgb2YgYSBwYWNrYWdlLCB0aGF0IHBvc3NpYmx5IHdvbid0IHdvcmsKLSAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugb2YgcGFja2FnZSBpbXBvcnRzLgotICAgICAgICAgICAgICAgIGRpcm5hbWUsIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlybmFtZSkKLSAgICAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQotICAgICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCi0gICAgICAgICAgICBpZiBmYWlsdXJlczoKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgIGVsc2U6Ci0gICAgICAgIHIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCi0gICAgICAgIHIucnVuKERvY1Rlc3RTdWl0ZSgpKQorICAgIGlmIG5vdCB0ZXN0ZmlsZXM6CisgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorICAgICAgICBpZiAnX19sb2FkZXJfXycgaW4gZ2xvYmFscygpOiAgICAgICAgICAjIHB5dGhvbiAtbQorICAgICAgICAgICAgbmFtZSwgXyA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKKyAgICAgICAgcHJpbnQoInVzYWdlOiB7MH0gWy12XSBmaWxlIC4uLiIuZm9ybWF0KG5hbWUpKQorICAgICAgICByZXR1cm4gMgorICAgIGZvciBmaWxlbmFtZSBpbiB0ZXN0ZmlsZXM6CisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgICMgSXQgaXMgYSBtb2R1bGUgLS0gaW5zZXJ0IGl0cyBkaXIgaW50byBzeXMucGF0aCBhbmQgdHJ5IHRvCisgICAgICAgICAgICAjIGltcG9ydCBpdC4gSWYgaXQgaXMgcGFydCBvZiBhIHBhY2thZ2UsIHRoYXQgcG9zc2libHkKKyAgICAgICAgICAgICMgd29uJ3Qgd29yayBiZWNhdXNlIG9mIHBhY2thZ2UgaW1wb3J0cy4KKyAgICAgICAgICAgIGRpcm5hbWUsIGZpbGVuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBkaXJuYW1lKQorICAgICAgICAgICAgbSA9IF9faW1wb3J0X18oZmlsZW5hbWVbOi0zXSkKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0bW9kKG0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgIGlmIGZhaWx1cmVzOgorICAgICAgICAgICAgcmV0dXJuIDEKICAgICByZXR1cm4gMAogCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgc3lzLmV4aXQoX3Rlc3QoKSkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi9lbWFpbC9fX2luaXRfXy5weQppbmRleCBhNzkzNDM2Li5hNzgwZWJlIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX19pbml0X18ucHkKKysrIGIvTGliL2VtYWlsL19faW5pdF9fLnB5CkBAIC00LDcgKzQsNyBAQAogCiAiIiJBIHBhY2thZ2UgZm9yIHBhcnNpbmcsIGhhbmRsaW5nLCBhbmQgZ2VuZXJhdGluZyBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX192ZXJzaW9uX18gPSAnNC4wLjInCitfX3ZlcnNpb25fXyA9ICc0LjAuMycKIAogX19hbGxfXyA9IFsKICAgICAjIE9sZCBuYW1lcwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL19wYXJzZWFkZHIucHkgYi9MaWIvZW1haWwvX3BhcnNlYWRkci5weQppbmRleCA4MTkxM2EzLi4zYmQ0YmE0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX3BhcnNlYWRkci5weQorKysgYi9MaWIvZW1haWwvX3BhcnNlYWRkci5weQpAQCAtMTA3LDYgKzEwNywxOCBAQAogICAgICAgICB0c3MgPSBpbnQodHNzKQogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICByZXR1cm4gTm9uZQorICAgICMgQ2hlY2sgZm9yIGEgeXkgc3BlY2lmaWVkIGluIHR3by1kaWdpdCBmb3JtYXQsIHRoZW4gY29udmVydCBpdCB0byB0aGUKKyAgICAjIGFwcHJvcHJpYXRlIGZvdXItZGlnaXQgZm9ybWF0LCBhY2NvcmRpbmcgdG8gdGhlIFBPU0lYIHN0YW5kYXJkLiBSRkMgODIyCisgICAgIyBjYWxscyBmb3IgYSB0d28tZGlnaXQgeXksIGJ1dCBSRkMgMjgyMiAod2hpY2ggb2Jzb2xldGVzIFJGQyA4MjIpCisgICAgIyBtYW5kYXRlcyBhIDQtZGlnaXQgeXkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisgICAgIyB0aGUgdGltZSBtb2R1bGUuCisgICAgaWYgeXkgPCAxMDA6CisgICAgICAgICMgVGhlIHllYXIgaXMgYmV0d2VlbiAxOTY5IGFuZCAxOTk5IChpbmNsdXNpdmUpLgorICAgICAgICBpZiB5eSA+IDY4OgorICAgICAgICAgICAgeXkgKz0gMTkwMAorICAgICAgICAjIFRoZSB5ZWFyIGlzIGJldHdlZW4gMjAwMCBhbmQgMjA2OCAoaW5jbHVzaXZlKS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHl5ICs9IDIwMDAKICAgICB0em9mZnNldCA9IE5vbmUKICAgICB0eiA9IHR6LnVwcGVyKCkKICAgICBpZiB0eiBpbiBfdGltZXpvbmVzOgpAQCAtMTQ4LDcgKzE2MCwxMiBAQAogCiAKIGRlZiBxdW90ZShzdHIpOgotICAgICIiIkFkZCBxdW90ZXMgYXJvdW5kIGEgc3RyaW5nLiIiIgorICAgICIiIlByZXBhcmUgc3RyaW5nIHRvIGJlIHVzZWQgaW4gYSBxdW90ZWQgc3RyaW5nLgorCisgICAgVHVybnMgYmFja3NsYXNoIGFuZCBkb3VibGUgcXVvdGUgY2hhcmFjdGVycyBpbnRvIHF1b3RlZCBwYWlycy4gIFRoZXNlCisgICAgYXJlIHRoZSBvbmx5IGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIHF1b3RlZCBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nLgorICAgIERvZXMgbm90IGFkZCB0aGUgc3Vycm91bmRpbmcgZG91YmxlIHF1b3Rlcy4KKyAgICAiIiIKICAgICByZXR1cm4gc3RyLnJlcGxhY2UoJ1xcJywgJ1xcXFwnKS5yZXBsYWNlKCciJywgJ1xcIicpCiAKIApAQCAtMzA2LDcgKzMyMyw3IEBACiAgICAgICAgICAgICAgICAgYXNsaXN0LmFwcGVuZCgnLicpCiAgICAgICAgICAgICAgICAgc2VsZi5wb3MgKz0gMQogICAgICAgICAgICAgZWxpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSA9PSAnIic6Ci0gICAgICAgICAgICAgICAgYXNsaXN0LmFwcGVuZCgnIiVzIicgJSBzZWxmLmdldHF1b3RlKCkpCisgICAgICAgICAgICAgICAgYXNsaXN0LmFwcGVuZCgnIiVzIicgJSBxdW90ZShzZWxmLmdldHF1b3RlKCkpKQogICAgICAgICAgICAgZWxpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSBpbiBzZWxmLmF0b21lbmRzOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2NoYXJzZXQucHkgYi9MaWIvZW1haWwvY2hhcnNldC5weQppbmRleCA5YmViZjZmLi5kZGRhYTc2IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvY2hhcnNldC5weQorKysgYi9MaWIvZW1haWwvY2hhcnNldC5weQpAQCAtOSw2ICs5LDcgQEAKICAgICAnYWRkX2NvZGVjJywKICAgICBdCiAKK2ltcG9ydCBjb2RlY3MKIGltcG9ydCBlbWFpbC5iYXNlNjRtaW1lCiBpbXBvcnQgZW1haWwucXVvcHJpbWltZQogCkBAIC0yMDgsOCArMjA5LDEzIEBACiAgICAgICAgICAgICAgICAgaW5wdXRfY2hhcnNldCA9IHVuaWNvZGUoaW5wdXRfY2hhcnNldCwgJ2FzY2lpJykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIGVycm9ycy5DaGFyc2V0RXJyb3IoaW5wdXRfY2hhcnNldCkKLSAgICAgICAgaW5wdXRfY2hhcnNldCA9IGlucHV0X2NoYXJzZXQubG93ZXIoKQotICAgICAgICAjIFNldCB0aGUgaW5wdXQgY2hhcnNldCBhZnRlciBmaWx0ZXJpbmcgdGhyb3VnaCB0aGUgYWxpYXNlcworICAgICAgICBpbnB1dF9jaGFyc2V0ID0gaW5wdXRfY2hhcnNldC5sb3dlcigpLmVuY29kZSgnYXNjaWknKQorICAgICAgICAjIFNldCB0aGUgaW5wdXQgY2hhcnNldCBhZnRlciBmaWx0ZXJpbmcgdGhyb3VnaCB0aGUgYWxpYXNlcyBhbmQvb3IgY29kZWNzCisgICAgICAgIGlmIG5vdCAoaW5wdXRfY2hhcnNldCBpbiBBTElBU0VTIG9yIGlucHV0X2NoYXJzZXQgaW4gQ0hBUlNFVFMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlucHV0X2NoYXJzZXQgPSBjb2RlY3MubG9va3VwKGlucHV0X2NoYXJzZXQpLm5hbWUKKyAgICAgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuaW5wdXRfY2hhcnNldCA9IEFMSUFTRVMuZ2V0KGlucHV0X2NoYXJzZXQsIGlucHV0X2NoYXJzZXQpCiAgICAgICAgICMgV2UgY2FuIHRyeSB0byBndWVzcyB3aGljaCBlbmNvZGluZyBhbmQgY29udmVyc2lvbiB0byB1c2UgYnkgdGhlCiAgICAgICAgICMgY2hhcnNldF9tYXAgZGljdGlvbmFyeS4gIFRyeSB0aGF0IGZpcnN0LCBidXQgbGV0IHRoZSB1c2VyIG92ZXJyaWRlCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZW5jb2RlcnMucHkgYi9MaWIvZW1haWwvZW5jb2RlcnMucHkKaW5kZXggMDYwMTZjZC4uYWY0NWU2MiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2VuY29kZXJzLnB5CisrKyBiL0xpYi9lbWFpbC9lbmNvZGVycy5weQpAQCAtNzIsMTMgKzcyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIG9yaWcuZW5jb2RlKCdhc2NpaScpCiAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKLSAgICAgICAgIyBpc28tMjAyMi0qIGlzIG5vbi1BU0NJSSBidXQgc3RpbGwgNy1iaXQKLSAgICAgICAgY2hhcnNldCA9IG1zZy5nZXRfY2hhcnNldCgpCi0gICAgICAgIG91dHB1dF9jc2V0ID0gY2hhcnNldCBhbmQgY2hhcnNldC5vdXRwdXRfY2hhcnNldAotICAgICAgICBpZiBvdXRwdXRfY3NldCBhbmQgb3V0cHV0X2NzZXQubG93ZXIoKS5zdGFydHN3aXRoKCdpc28tMjIwMi0nKToKLSAgICAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc4Yml0JworICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc4Yml0JwogICAgIGVsc2U6CiAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkgYi9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CmluZGV4IDU2MGNlOWEuLmViNzEwNDQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKKysrIGIvTGliL2VtYWlsL2dlbmVyYXRvci5weQpAQCAtMTU1LDEwICsxNTUsMTMgQEAKICAgICAgICAgICAgICAgICAjIGJlIHRvIG5vdCBzcGxpdCB0aGUgc3RyaW5nIGFuZCByaXNrIGl0IGJlaW5nIHRvbyBsb25nLgogICAgICAgICAgICAgICAgIHByaW50ID4+IHNlbGYuX2ZwLCB2CiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgSGVhZGVyJ3MgZ290IGxvdHMgb2Ygc21hcnRzLCBzbyB1c2UgaXQuCisgICAgICAgICAgICAgICAgIyBIZWFkZXIncyBnb3QgbG90cyBvZiBzbWFydHMsIHNvIHVzZSBpdC4gIE5vdGUgdGhhdCB0aGlzIGlzCisgICAgICAgICAgICAgICAgIyBmdW5kYW1lbnRhbGx5IGJyb2tlbiB0aG91Z2ggYmVjYXVzZSB3ZSBsb3NlIGlkZW1wb3RlbmN5IHdoZW4KKyAgICAgICAgICAgICAgICAjIHRoZSBoZWFkZXIgc3RyaW5nIGlzIGNvbnRpbnVlZCB3aXRoIHRhYnMuICBJdCB3aWxsIG5vdyBiZQorICAgICAgICAgICAgICAgICMgY29udGludWVkIHdpdGggc3BhY2VzLiAgVGhpcyB3YXMgcmV2ZXJzZWRseSBicm9rZW4gYmVmb3JlIHdlCisgICAgICAgICAgICAgICAgIyBmaXhlZCBidWcgMTk3NC4gIEVpdGhlciB3YXksIHdlIGxvc2UuCiAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5fZnAsIEhlYWRlcigKLSAgICAgICAgICAgICAgICAgICAgdiwgbWF4bGluZWxlbj1zZWxmLl9tYXhoZWFkZXJsZW4sCi0gICAgICAgICAgICAgICAgICAgIGhlYWRlcl9uYW1lPWgsIGNvbnRpbnVhdGlvbl93cz0nXHQnKS5lbmNvZGUoKQorICAgICAgICAgICAgICAgICAgICB2LCBtYXhsaW5lbGVuPXNlbGYuX21heGhlYWRlcmxlbiwgaGVhZGVyX25hbWU9aCkuZW5jb2RlKCkKICAgICAgICAgIyBBIGJsYW5rIGxpbmUgYWx3YXlzIHNlcGFyYXRlcyBoZWFkZXJzIGZyb20gYm9keQogICAgICAgICBwcmludCA+PiBzZWxmLl9mcAogCkBAIC0xOTksMTggKzIwMiwxMyBAQAogICAgICAgICAgICAgZyA9IHNlbGYuY2xvbmUocykKICAgICAgICAgICAgIGcuZmxhdHRlbihwYXJ0LCB1bml4ZnJvbT1GYWxzZSkKICAgICAgICAgICAgIG1zZ3RleHRzLmFwcGVuZChzLmdldHZhbHVlKCkpCi0gICAgICAgICMgTm93IG1ha2Ugc3VyZSB0aGUgYm91bmRhcnkgd2UndmUgc2VsZWN0ZWQgZG9lc24ndCBhcHBlYXIgaW4gYW55IG9mCi0gICAgICAgICMgdGhlIG1lc3NhZ2UgdGV4dHMuCi0gICAgICAgIGFsbHRleHQgPSBOTC5qb2luKG1zZ3RleHRzKQogICAgICAgICAjIEJBVzogV2hhdCBhYm91dCBib3VuZGFyaWVzIHRoYXQgYXJlIHdyYXBwZWQgaW4gZG91YmxlLXF1b3Rlcz8KLSAgICAgICAgYm91bmRhcnkgPSBtc2cuZ2V0X2JvdW5kYXJ5KGZhaWxvYmo9X21ha2VfYm91bmRhcnkoYWxsdGV4dCkpCi0gICAgICAgICMgSWYgd2UgaGFkIHRvIGNhbGN1bGF0ZSBhIG5ldyBib3VuZGFyeSBiZWNhdXNlIHRoZSBib2R5IHRleHQKLSAgICAgICAgIyBjb250YWluZWQgdGhhdCBzdHJpbmcsIHNldCB0aGUgbmV3IGJvdW5kYXJ5LiAgV2UgZG9uJ3QgZG8gaXQKLSAgICAgICAgIyB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSwgd2hpbGUgc2V0X2JvdW5kYXJ5KCkgcHJlc2VydmVzIG9yZGVyLCBpdAotICAgICAgICAjIGRvZXNuJ3QgcHJlc2VydmUgbmV3bGluZXMvY29udGludWF0aW9ucyBpbiBoZWFkZXJzLiAgVGhpcyBpcyBubyBiaWcKLSAgICAgICAgIyBkZWFsIGluIHByYWN0aWNlLCBidXQgdHVybnMgb3V0IHRvIGJlIGluY29udmVuaWVudCBmb3IgdGhlIHVuaXR0ZXN0Ci0gICAgICAgICMgc3VpdGUuCi0gICAgICAgIGlmIG1zZy5nZXRfYm91bmRhcnkoKSAhPSBib3VuZGFyeToKKyAgICAgICAgYm91bmRhcnkgPSBtc2cuZ2V0X2JvdW5kYXJ5KCkKKyAgICAgICAgaWYgbm90IGJvdW5kYXJ5OgorICAgICAgICAgICAgIyBDcmVhdGUgYSBib3VuZGFyeSB0aGF0IGRvZXNuJ3QgYXBwZWFyIGluIGFueSBvZiB0aGUKKyAgICAgICAgICAgICMgbWVzc2FnZSB0ZXh0cy4KKyAgICAgICAgICAgIGFsbHRleHQgPSBOTC5qb2luKG1zZ3RleHRzKQorICAgICAgICAgICAgYm91bmRhcnkgPSBfbWFrZV9ib3VuZGFyeShhbGx0ZXh0KQogICAgICAgICAgICAgbXNnLnNldF9ib3VuZGFyeShib3VuZGFyeSkKICAgICAgICAgIyBJZiB0aGVyZSdzIGEgcHJlYW1ibGUsIHdyaXRlIGl0IG91dCwgd2l0aCBhIHRyYWlsaW5nIENSTEYKICAgICAgICAgaWYgbXNnLnByZWFtYmxlIGlzIG5vdCBOb25lOgpAQCAtMjg5LDcgKzI4Nyw3IEBACiBfRk1UID0gJ1tOb24tdGV4dCAoJSh0eXBlKXMpIHBhcnQgb2YgbWVzc2FnZSBvbWl0dGVkLCBmaWxlbmFtZSAlKGZpbGVuYW1lKXNdJwogCiBjbGFzcyBEZWNvZGVkR2VuZXJhdG9yKEdlbmVyYXRvcik6Ci0gICAgIiIiR2VuZXJhdG9yIGEgdGV4dCByZXByZXNlbnRhdGlvbiBvZiBhIG1lc3NhZ2UuCisgICAgIiIiR2VuZXJhdGVzIGEgdGV4dCByZXByZXNlbnRhdGlvbiBvZiBhIG1lc3NhZ2UuCiAKICAgICBMaWtlIHRoZSBHZW5lcmF0b3IgYmFzZSBjbGFzcywgZXhjZXB0IHRoYXQgbm9uLXRleHQgcGFydHMgYXJlIHN1YnN0aXR1dGVkCiAgICAgd2l0aCBhIGZvcm1hdCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXJ0LgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2hlYWRlci5weSBiL0xpYi9lbWFpbC9oZWFkZXIucHkKaW5kZXggNmUwMzkyMi4uNzAyYWRmMSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2hlYWRlci5weQorKysgYi9MaWIvZW1haWwvaGVhZGVyLnB5CkBAIC00Nyw2ICs0NywxMCBAQAogIyBGb3IgdXNlIHdpdGggLm1hdGNoKCkKIGZjcmUgPSByZS5jb21waWxlKHInW1wwNDEtXDE3Nl0rOiQnKQogCisjIEZpbmQgYSBoZWFkZXIgZW1iZWRlZCBpbiBhIHB1dGF0aXZlIGhlYWRlciB2YWx1ZS4gIFVzZWQgdG8gY2hlY2sgZm9yCisjIGhlYWRlciBpbmplY3Rpb24gYXR0YWNrLgorX2VtYmVkZWRfaGVhZGVyID0gcmUuY29tcGlsZShyJ1xuW14gXHRdKzonKQorCiAKIAwKICMgSGVscGVycwpAQCAtOTIsNiArOTYsOSBAQAogICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nID09ICdxJzoKICAgICAgICAgICAgICAgICAgICAgZGVjID0gZW1haWwucXVvcHJpbWltZS5oZWFkZXJfZGVjb2RlKGVuY29kZWQpCiAgICAgICAgICAgICAgICAgZWxpZiBlbmNvZGluZyA9PSAnYic6CisgICAgICAgICAgICAgICAgICAgIHBhZGVyciA9IGxlbihlbmNvZGVkKSAlIDQgICAjIFBvc3RlbCdzIGxhdzogYWRkIG1pc3NpbmcgcGFkZGluZworICAgICAgICAgICAgICAgICAgICBpZiBwYWRlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkICs9ICc9PT0nWzo0IC0gcGFkZXJyXQogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWMgPSBlbWFpbC5iYXNlNjRtaW1lLmRlY29kZShlbmNvZGVkKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgYmluYXNjaWkuRXJyb3I6CkBAIC00MDAsNyArNDA3LDExIEBACiAgICAgICAgICAgICBuZXdjaHVua3MgKz0gc2VsZi5fc3BsaXQocywgY2hhcnNldCwgdGFyZ2V0bGVuLCBzcGxpdGNoYXJzKQogICAgICAgICAgICAgbGFzdGNodW5rLCBsYXN0Y2hhcnNldCA9IG5ld2NodW5rc1stMV0KICAgICAgICAgICAgIGxhc3RsZW4gPSBsYXN0Y2hhcnNldC5lbmNvZGVkX2hlYWRlcl9sZW4obGFzdGNodW5rKQotICAgICAgICByZXR1cm4gc2VsZi5fZW5jb2RlX2NodW5rcyhuZXdjaHVua3MsIG1heGxpbmVsZW4pCisgICAgICAgIHZhbHVlID0gc2VsZi5fZW5jb2RlX2NodW5rcyhuZXdjaHVua3MsIG1heGxpbmVsZW4pCisgICAgICAgIGlmIF9lbWJlZGVkX2hlYWRlci5zZWFyY2godmFsdWUpOgorICAgICAgICAgICAgcmFpc2UgSGVhZGVyUGFyc2VFcnJvcigiaGVhZGVyIHZhbHVlIGFwcGVhcnMgdG8gY29udGFpbiAiCisgICAgICAgICAgICAgICAgImFuIGVtYmVkZGVkIGhlYWRlcjogeyFyfSIuZm9ybWF0KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCiAKIAogDApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21lc3NhZ2UucHkgYi9MaWIvZW1haWwvbWVzc2FnZS5weQppbmRleCA2MjY3MzliLi43YzkzMzcwIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWVzc2FnZS5weQorKysgYi9MaWIvZW1haWwvbWVzc2FnZS5weQpAQCAtMzgsNyArMzgsOSBAQAogZGVmIF9mb3JtYXRwYXJhbShwYXJhbSwgdmFsdWU9Tm9uZSwgcXVvdGU9VHJ1ZSk6CiAgICAgIiIiQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZm9ybWF0IGFuZCByZXR1cm4gYSBrZXk9dmFsdWUgcGFpci4KIAotICAgIFRoaXMgd2lsbCBxdW90ZSB0aGUgdmFsdWUgaWYgbmVlZGVkIG9yIGlmIHF1b3RlIGlzIHRydWUuCisgICAgVGhpcyB3aWxsIHF1b3RlIHRoZSB2YWx1ZSBpZiBuZWVkZWQgb3IgaWYgcXVvdGUgaXMgdHJ1ZS4gIElmIHZhbHVlIGlzIGEKKyAgICB0aHJlZSB0dXBsZSAoY2hhcnNldCwgbGFuZ3VhZ2UsIHZhbHVlKSwgaXQgd2lsbCBiZSBlbmNvZGVkIGFjY29yZGluZworICAgIHRvIFJGQzIyMzEgcnVsZXMuCiAgICAgIiIiCiAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgYW5kIGxlbih2YWx1ZSkgPiAwOgogICAgICAgICAjIEEgdHVwbGUgaXMgdXNlZCBmb3IgUkZDIDIyMzEgZW5jb2RlZCBwYXJhbWV0ZXIgdmFsdWVzIHdoZXJlIGl0ZW1zCkBAIC05Nyw3ICs5OSw3IEBACiAgICAgb2JqZWN0cywgb3RoZXJ3aXNlIGl0IGlzIGEgc3RyaW5nLgogCiAgICAgTWVzc2FnZSBvYmplY3RzIGltcGxlbWVudCBwYXJ0IG9mIHRoZSBgbWFwcGluZycgaW50ZXJmYWNlLCB3aGljaCBhc3N1bWVzCi0gICAgdGhlcmUgaXMgZXhhY3RseSBvbmUgb2NjdXJyYW5jZSBvZiB0aGUgaGVhZGVyIHBlciBtZXNzYWdlLiAgU29tZSBoZWFkZXJzCisgICAgdGhlcmUgaXMgZXhhY3RseSBvbmUgb2NjdXJyZW5jZSBvZiB0aGUgaGVhZGVyIHBlciBtZXNzYWdlLiAgU29tZSBoZWFkZXJzCiAgICAgZG8gaW4gZmFjdCBhcHBlYXIgbXVsdGlwbGUgdGltZXMgKGUuZy4gUmVjZWl2ZWQpIGFuZCBmb3IgdGhvc2UgaGVhZGVycywKICAgICB5b3UgbXVzdCB1c2UgdGhlIGV4cGxpY2l0IEFQSSB0byBzZXQgb3IgZ2V0IGFsbCB0aGUgaGVhZGVycy4gIE5vdCBhbGwgb2YKICAgICB0aGUgbWFwcGluZyBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZC4KQEAgLTI0OSw5ICsyNTEsOSBAQAogICAgICAgICAjIEJBVzogc2hvdWxkIHdlIGFjY2VwdCBzdHJpbmdzIHRoYXQgY2FuIHNlcnZlIGFzIGFyZ3VtZW50cyB0byB0aGUKICAgICAgICAgIyBDaGFyc2V0IGNvbnN0cnVjdG9yPwogICAgICAgICBzZWxmLl9jaGFyc2V0ID0gY2hhcnNldAotICAgICAgICBpZiBub3Qgc2VsZi5oYXNfa2V5KCdNSU1FLVZlcnNpb24nKToKKyAgICAgICAgaWYgJ01JTUUtVmVyc2lvbicgbm90IGluIHNlbGY6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoJ01JTUUtVmVyc2lvbicsICcxLjAnKQotICAgICAgICBpZiBub3Qgc2VsZi5oYXNfa2V5KCdDb250ZW50LVR5cGUnKToKKyAgICAgICAgaWYgJ0NvbnRlbnQtVHlwZScgbm90IGluIHNlbGY6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PWNoYXJzZXQuZ2V0X291dHB1dF9jaGFyc2V0KCkpCiAgICAgICAgIGVsc2U6CkBAIC0yNjAsNyArMjYyLDcgQEAKICAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBzZWxmLl9wYXlsb2FkLmVuY29kZShjaGFyc2V0Lm91dHB1dF9jaGFyc2V0KQogICAgICAgICBpZiBzdHIoY2hhcnNldCkgIT0gY2hhcnNldC5nZXRfb3V0cHV0X2NoYXJzZXQoKToKICAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBjaGFyc2V0LmJvZHlfZW5jb2RlKHNlbGYuX3BheWxvYWQpCi0gICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnKToKKyAgICAgICAgaWYgJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnIG5vdCBpbiBzZWxmOgogICAgICAgICAgICAgY3RlID0gY2hhcnNldC5nZXRfYm9keV9lbmNvZGluZygpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY3RlKHNlbGYpCkBAIC0yODYsNyArMjg4LDcgQEAKICAgICAgICAgUmV0dXJuIE5vbmUgaWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nIGluc3RlYWQgb2YgcmFpc2luZyBhbiBleGNlcHRpb24uCiAKICAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBoZWFkZXIgYXBwZWFyZWQgbXVsdGlwbGUgdGltZXMsIGV4YWN0bHkgd2hpY2gKLSAgICAgICAgb2NjdXJyYW5jZSBnZXRzIHJldHVybmVkIGlzIHVuZGVmaW5lZC4gIFVzZSBnZXRfYWxsKCkgdG8gZ2V0IGFsbAorICAgICAgICBvY2N1cnJlbmNlIGdldHMgcmV0dXJuZWQgaXMgdW5kZWZpbmVkLiAgVXNlIGdldF9hbGwoKSB0byBnZXQgYWxsCiAgICAgICAgIHRoZSB2YWx1ZXMgbWF0Y2hpbmcgYSBoZWFkZXIgZmllbGQgbmFtZS4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmdldChuYW1lKQpAQCAtMzg5LDcgKzM5MSwxMCBAQAogICAgICAgICBuYW1lIGlzIHRoZSBoZWFkZXIgZmllbGQgdG8gYWRkLiAga2V5d29yZCBhcmd1bWVudHMgY2FuIGJlIHVzZWQgdG8gc2V0CiAgICAgICAgIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGhlYWRlciBmaWVsZCwgd2l0aCB1bmRlcnNjb3JlcyBjb252ZXJ0ZWQKICAgICAgICAgdG8gZGFzaGVzLiAgTm9ybWFsbHkgdGhlIHBhcmFtZXRlciB3aWxsIGJlIGFkZGVkIGFzIGtleT0idmFsdWUiIHVubGVzcwotICAgICAgICB2YWx1ZSBpcyBOb25lLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGtleSB3aWxsIGJlIGFkZGVkLgorICAgICAgICB2YWx1ZSBpcyBOb25lLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGtleSB3aWxsIGJlIGFkZGVkLiAgSWYgYQorICAgICAgICBwYXJhbWV0ZXIgdmFsdWUgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaXQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYQorICAgICAgICB0aHJlZS10dXBsZSBvZiAoY2hhcnNldCwgbGFuZ3VhZ2UsIHZhbHVlKSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCisgICAgICAgIGVuY29kZWQgYWNjb3JkaW5nIHRvIFJGQzIyMzEgcnVsZXMuCiAKICAgICAgICAgRXhhbXBsZToKIApAQCAtNTUzLDcgKzU1OCw3IEBACiAgICAgICAgIFZBTFVFIGl0ZW0gaW4gdGhlIDMtdHVwbGUpIGlzIGFsd2F5cyB1bnF1b3RlZCwgdW5sZXNzIHVucXVvdGUgaXMgc2V0CiAgICAgICAgIHRvIEZhbHNlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleShoZWFkZXIpOgorICAgICAgICBpZiBoZWFkZXIgbm90IGluIHNlbGY6CiAgICAgICAgICAgICByZXR1cm4gZmFpbG9iagogICAgICAgICBmb3IgaywgdiBpbiBzZWxmLl9nZXRfcGFyYW1zX3ByZXNlcnZlKGZhaWxvYmosIGhlYWRlcik6CiAgICAgICAgICAgICBpZiBrLmxvd2VyKCkgPT0gcGFyYW0ubG93ZXIoKToKQEAgLTU4NCw3ICs1ODksNyBAQAogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgdHVwbGUpIGFuZCBjaGFyc2V0OgogICAgICAgICAgICAgdmFsdWUgPSAoY2hhcnNldCwgbGFuZ3VhZ2UsIHZhbHVlKQogCi0gICAgICAgIGlmIG5vdCBzZWxmLmhhc19rZXkoaGVhZGVyKSBhbmQgaGVhZGVyLmxvd2VyKCkgPT0gJ2NvbnRlbnQtdHlwZSc6CisgICAgICAgIGlmIGhlYWRlciBub3QgaW4gc2VsZiBhbmQgaGVhZGVyLmxvd2VyKCkgPT0gJ2NvbnRlbnQtdHlwZSc6CiAgICAgICAgICAgICBjdHlwZSA9ICd0ZXh0L3BsYWluJwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY3R5cGUgPSBzZWxmLmdldChoZWFkZXIpCkBAIC02MTksNyArNjI0LDcgQEAKICAgICAgICAgRmFsc2UuICBPcHRpb25hbCBoZWFkZXIgc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBDb250ZW50LVR5cGUKICAgICAgICAgaGVhZGVyLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleShoZWFkZXIpOgorICAgICAgICBpZiBoZWFkZXIgbm90IGluIHNlbGY6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbmV3X2N0eXBlID0gJycKICAgICAgICAgZm9yIHAsIHYgaW4gc2VsZi5nZXRfcGFyYW1zKGhlYWRlcj1oZWFkZXIsIHVucXVvdGU9cmVxdW90ZSk6CkBAIC02NTUsNyArNjYwLDcgQEAKICAgICAgICAgaWYgaGVhZGVyLmxvd2VyKCkgPT0gJ2NvbnRlbnQtdHlwZSc6CiAgICAgICAgICAgICBkZWwgc2VsZlsnbWltZS12ZXJzaW9uJ10KICAgICAgICAgICAgIHNlbGZbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKLSAgICAgICAgaWYgbm90IHNlbGYuaGFzX2tleShoZWFkZXIpOgorICAgICAgICBpZiBoZWFkZXIgbm90IGluIHNlbGY6CiAgICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSB0eXBlCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcGFyYW1zID0gc2VsZi5nZXRfcGFyYW1zKGhlYWRlcj1oZWFkZXIsIHVucXVvdGU9cmVxdW90ZSkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9taW1lL25vbm11bHRpcGFydC5weSBiL0xpYi9lbWFpbC9taW1lL25vbm11bHRpcGFydC5weQppbmRleCBkZDI4MGI1Li5mYzNiOWViIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWltZS9ub25tdWx0aXBhcnQucHkKKysrIGIvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5CkBAIC0xNCwxMyArMTQsOSBAQAogY2xhc3MgTUlNRU5vbk11bHRpcGFydChNSU1FQmFzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgTUlNRSBtdWx0aXBhcnQvKiB0eXBlIG1lc3NhZ2VzLiIiIgogCi0gICAgX19weWNoZWNrZXJfXyA9ICd1bnVzZWRuYW1lcz1wYXlsb2FkJwotCiAgICAgZGVmIGF0dGFjaChzZWxmLCBwYXlsb2FkKToKICAgICAgICAgIyBUaGUgcHVibGljIEFQSSBwcm9oaWJpdHMgYXR0YWNoaW5nIG11bHRpcGxlIHN1YnBhcnRzIHRvIE1JTUVCYXNlCiAgICAgICAgICMgZGVyaXZlZCBzdWJ0eXBlcyBzaW5jZSBub25lIG9mIHRoZW0gYXJlLCBieSBkZWZpbml0aW9uLCBvZiBjb250ZW50CiAgICAgICAgICMgdHlwZSBtdWx0aXBhcnQvKgogICAgICAgICByYWlzZSBlcnJvcnMuTXVsdGlwYXJ0Q29udmVyc2lvbkVycm9yKAogICAgICAgICAgICAgJ0Nhbm5vdCBhdHRhY2ggYWRkaXRpb25hbCBzdWJwYXJ0cyB0byBub24tbXVsdGlwYXJ0LyonKQotCi0gICAgZGVsIF9fcHljaGVja2VyX18KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5IGIvTGliL2VtYWlsL3F1b3ByaW1pbWUucHkKaW5kZXggYjlkYmZhOS4uMGMxOGE5ZSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3F1b3ByaW1pbWUucHkKKysrIGIvTGliL2VtYWlsL3F1b3ByaW1pbWUucHkKQEAgLTMzMyw0ICszMzMsNCBAQAogICAgIHRoZSBoaWdoIGxldmVsIGVtYWlsLmhlYWRlciBjbGFzcyBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5LgogICAgICIiIgogICAgIHMgPSBzLnJlcGxhY2UoJ18nLCAnICcpCi0gICAgcmV0dXJuIHJlLnN1YihyJz1cd3syfScsIF91bnF1b3RlX21hdGNoLCBzKQorICAgIHJldHVybiByZS5zdWIocic9W2EtZkEtRjAtOV17Mn0nLCBfdW5xdW90ZV9tYXRjaCwgcykKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzEwLnR4dCBiL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzEwLnR4dAppbmRleCBiZDMwZDEzLi4wNzkwMzk2IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQKKysrIGIvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTAudHh0CkBAIC0yNiw2ICsyNiwxMyBAQAogCiAtLUJPVU5EQVJZCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBCYXNlNjQKKworVkdocGN5QnBjeUJoSUVKaGMyVTJOQ0JsYm1OdlpHVmtJRzFsYzNOaFoyVXVDZz09CisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgogCiBUaGlzIGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dCBiL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dAppbmRleCA2YzcxYmNlLi4yOTIxOTdiIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18yNi50eHQKKysrIGIvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjYudHh0CkBAIC0xLDQ1ICsxLDQ1IEBACi1SZWNlaXZlZDogZnJvbSB4Y2FyIFsxOTIuMTY4LjAuMl0gYnkgamVldmVzLndvb3N0ZXIubG9jYWwNCi0gIChTTVRQRDMyLTcuMDcgRVZBTCkgaWQgQUZGOTJGMDIxNDsgU3VuLCAxMiBNYXkgMjAwMiAwODo1NTozNyArMDEwMA0KLURhdGU6IFN1biwgMTIgTWF5IDIwMDIgMDg6NTY6MTUgKzAxMDANCi1Gcm9tOiBGYXRoZXIgVGltZSA8ZmF0aGVyLnRpbWVAeGNhci53b29zdGVyLmxvY2FsPg0KLVRvOiB0aW1ib0BqZWV2ZXMud29vc3Rlci5sb2NhbA0KLVN1YmplY3Q6IElNQVAgZmlsZSB0ZXN0DQotTWVzc2FnZS1JRDogPDZkZjY1ZDM1NGIuZmF0aGVyLnRpbWVAcnBjLndvb3N0ZXIubG9jYWw+DQotWC1Pcmdhbml6YXRpb246IEhvbWUNCi1Vc2VyLUFnZW50OiBNZXNzZW5nZXItUHJvLzIuNTBhIChNc2dTZXJ2ZS8xLjUwKSAoUklTQy1PUy80LjAyKSBQT1BzdGFyLzIuMDMNCi1NSU1FLVZlcnNpb246IDEuMA0KLUNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwIg0KLVN0YXR1czogUg0KLVgtVUlETDogMzE5OTk4MzAyDQotDQotVGhpcyBtZXNzYWdlIGlzIGluIE1JTUUgZm9ybWF0IHdoaWNoIHlvdXIgbWFpbGVyIGFwcGFyZW50bHkgZG9lcyBub3Qgc3VwcG9ydC4NCi1Zb3UgZWl0aGVyIHJlcXVpcmUgYSBuZXdlciB2ZXJzaW9uIG9mIHlvdXIgc29mdHdhcmUgd2hpY2ggc3VwcG9ydHMgTUlNRSwgb3INCi1hIHNlcGFyYXRlIE1JTUUgZGVjb2RpbmcgdXRpbGl0eS4gIEFsdGVybmF0aXZlbHksIGFzayB0aGUgc2VuZGVyIG9mIHRoaXMNCi1tZXNzYWdlIHRvIHJlc2VuZCBpdCBpbiBhIGRpZmZlcmVudCBmb3JtYXQuDQotDQotLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODANCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkNCi0NCi1TaW1wbGUgZW1haWwgd2l0aCBhdHRhY2htZW50Lg0KLQ0KLQ0KLS0tMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwDQotQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9yaXNjb3M7IG5hbWU9ImNsb2NrLmJtcCw2OWMiOyB0eXBlPUJNUDsgbG9hZD0mZmZmNjljNGI7IGV4ZWM9JjM1NWRkNGQxOyBhY2Nlc3M9JjAzDQotQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImNsb2NrLmJtcCINCi1Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQNCi0NCi1RazEyQWdBQUFBQUFBSFlBQUFBb0FBQUFJQUFBQUNBQUFBQUJBQVFBQUFBQUFBQUFBQURYRFFBQTF3MEFBQUFBQUFBQQ0KLUFBQUFBQUFBQUFBQWlBQUFpQUFBQUlpSUFJZ0FBQUNJQUlnQWlJZ0FBTHU3dXdDSWlJZ0FFUkhkQUNMdUlnQXovLzhBDQotekFBQUFOMFIzUUR1N2lJQS8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWkzQUFBQUFBQUFBRGVBQUFBQUFBQUENCi1DM0FETXpNek1BTndBQUFBQUFBQUFBQUhNQUFBQUFOd0FBQUFBQUFBQUFDQU1BZDN6UGZ3QXdnQUFBQUFBQUFJQXdkLw0KLWY4eC9mM0F3Z0FBQUFBQUFnREIweC9mMy8velBBd2dBQUFBQUFBY0hmTTkvLy8vOHovQXdBQUFBQUFpd2QvZjMvLy8vDQotLy8vL0E0QUFBQUFBY0V4L2YvLy8vLy8vekFNQUFBQUFpd2ZNOS8vLy8zLy8vOHp3T0FBQUFBY0hmMy8vLy9CLy8vLy8NCi04REFBQUFBTEIvZjMvLy93ZDNkMy8vQXdBQUFBQndUUGYvL3dDUUFBRC96QU1BQUFBQXNFeC9mLy8vQi8vLy84d0RBQQ0KLUFBQUhCMzkvLy8vd2YvLy8vL0F3QUFBQUN3ZjM5Ly8vOEgvLy8vL3dNQUFBQUljSGZNOS8vL0IvLy8vTThEZ0FBQUFBDQotc0hUSC8vL3dmLy8veEFNQUFBQUFDSEIzZjMvLzhILy8vL2NEZ0FBQUFBQUxCM3pILy9ELy9NOXdNQUFBQUFBQWdMQjANCi16MzkvLy94SEF3Z0FBQUFBQUFnTEIzZDNSSGQzY0RDQUFBQUFBQUFBZ0xBSGQwUjNjQU1JQUFBQUFBQUFnQWdMY0FBQQ0KLUFBTXdnQWdBQUFBQUNEQUFBQXU3dDdjd0FBZ0RnQUFBQUFCemNJQUFBQUFBQUFnRE13QUFBQUFBTjd1d2dBQUFBQWdIDQotTXpNQUFBQUFDSDk3dHpBQUFBQUx1M2MzZ0FBQUFBQUwrN3R6REFCQXU3ZjdjQUFBQUFBQUNBKzNNQTdFUUF2L3NJQUENCi1BQUFBQUFBSUFBQUFBQUFBQUlBQUFBQUENCi0NCi0tLTE2MTg0OTI4NjAtLTIwNTEzMDExOTAtLTExMzg1MzY4MC0tDQorUmVjZWl2ZWQ6IGZyb20geGNhciBbMTkyLjE2OC4wLjJdIGJ5IGplZXZlcy53b29zdGVyLmxvY2FsCisgIChTTVRQRDMyLTcuMDcgRVZBTCkgaWQgQUZGOTJGMDIxNDsgU3VuLCAxMiBNYXkgMjAwMiAwODo1NTozNyArMDEwMAorRGF0ZTogU3VuLCAxMiBNYXkgMjAwMiAwODo1NjoxNSArMDEwMAorRnJvbTogRmF0aGVyIFRpbWUgPGZhdGhlci50aW1lQHhjYXIud29vc3Rlci5sb2NhbD4KK1RvOiB0aW1ib0BqZWV2ZXMud29vc3Rlci5sb2NhbAorU3ViamVjdDogSU1BUCBmaWxlIHRlc3QKK01lc3NhZ2UtSUQ6IDw2ZGY2NWQzNTRiLmZhdGhlci50aW1lQHJwYy53b29zdGVyLmxvY2FsPgorWC1Pcmdhbml6YXRpb246IEhvbWUKK1VzZXItQWdlbnQ6IE1lc3Nlbmdlci1Qcm8vMi41MGEgKE1zZ1NlcnZlLzEuNTApIChSSVNDLU9TLzQuMDIpIFBPUHN0YXIvMi4wMworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwIgorU3RhdHVzOiBSCitYLVVJREw6IDMxOTk5ODMwMgorCitUaGlzIG1lc3NhZ2UgaXMgaW4gTUlNRSBmb3JtYXQgd2hpY2ggeW91ciBtYWlsZXIgYXBwYXJlbnRseSBkb2VzIG5vdCBzdXBwb3J0LgorWW91IGVpdGhlciByZXF1aXJlIGEgbmV3ZXIgdmVyc2lvbiBvZiB5b3VyIHNvZnR3YXJlIHdoaWNoIHN1cHBvcnRzIE1JTUUsIG9yCithIHNlcGFyYXRlIE1JTUUgZGVjb2RpbmcgdXRpbGl0eS4gIEFsdGVybmF0aXZlbHksIGFzayB0aGUgc2VuZGVyIG9mIHRoaXMKK21lc3NhZ2UgdG8gcmVzZW5kIGl0IGluIGEgZGlmZmVyZW50IGZvcm1hdC4KKworLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorCitTaW1wbGUgZW1haWwgd2l0aCBhdHRhY2htZW50LgorCisKKy0tMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3Jpc2NvczsgbmFtZT0iY2xvY2suYm1wLDY5YyI7IHR5cGU9Qk1QOyBsb2FkPSZmZmY2OWM0YjsgZXhlYz0mMzU1ZGQ0ZDE7IGFjY2Vzcz0mMDMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJjbG9jay5ibXAiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworUWsxMkFnQUFBQUFBQUhZQUFBQW9BQUFBSUFBQUFDQUFBQUFCQUFRQUFBQUFBQUFBQUFEWERRQUExdzBBQUFBQUFBQUEKK0FBQUFBQUFBQUFBQWlBQUFpQUFBQUlpSUFJZ0FBQUNJQUlnQWlJZ0FBTHU3dXdDSWlJZ0FFUkhkQUNMdUlnQXovLzhBCit6QUFBQU4wUjNRRHU3aUlBLy8vL0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBaTNBQUFBQUFBQUFEZUFBQUFBQUFBQQorQzNBRE16TXpNQU53QUFBQUFBQUFBQUFITUFBQUFBTndBQUFBQUFBQUFBQ0FNQWQzelBmd0F3Z0FBQUFBQUFBSUF3ZC8KK2Y4eC9mM0F3Z0FBQUFBQUFnREIweC9mMy8velBBd2dBQUFBQUFBY0hmTTkvLy8vOHovQXdBQUFBQUFpd2QvZjMvLy8vCisvLy8vQTRBQUFBQUFjRXgvZi8vLy8vLy96QU1BQUFBQWl3Zk05Ly8vLzMvLy84endPQUFBQUFjSGYzLy8vL0IvLy8vLworOERBQUFBQUxCL2YzLy8vd2QzZDMvL0F3QUFBQUJ3VFBmLy93Q1FBQUQvekFNQUFBQUFzRXgvZi8vL0IvLy8vOHdEQUEKK0FBQUhCMzkvLy8vd2YvLy8vL0F3QUFBQUN3ZjM5Ly8vOEgvLy8vL3dNQUFBQUljSGZNOS8vL0IvLy8vTThEZ0FBQUFBCitzSFRILy8vd2YvLy94QU1BQUFBQUNIQjNmMy8vOEgvLy8vY0RnQUFBQUFBTEIzekgvL0QvL005d01BQUFBQUFBZ0xCMAorejM5Ly8veEhBd2dBQUFBQUFBZ0xCM2QzUkhkM2NEQ0FBQUFBQUFBQWdMQUhkMFIzY0FNSUFBQUFBQUFBZ0FnTGNBQUEKK0FBTXdnQWdBQUFBQUNEQUFBQXU3dDdjd0FBZ0RnQUFBQUFCemNJQUFBQUFBQUFnRE13QUFBQUFBTjd1d2dBQUFBQWdICitNek1BQUFBQUNIOTd0ekFBQUFBTHUzYzNnQUFBQUFBTCs3dHpEQUJBdTdmN2NBQUFBQUFBQ0ErM01BN0VRQXYvc0lBQQorQUFBQUFBQUlBQUFBQUFBQUFJQUFBQUFBCisKKy0tMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwLS0KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsLnB5CmluZGV4IGJmNTI3MmUuLjVjOWE3MjUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkKKysrIGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbC5weQpAQCAtNDAsMTcgKzQwLDE3IEBACiBTUEFDRSA9ICcgJwogCiAKLQwKKwogZGVmIG9wZW5maWxlKGZpbGVuYW1lLCBtb2RlPSdyJyk6CiAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUobGFuZG1hcmspLCAnZGF0YScsIGZpbGVuYW1lKQogICAgIHJldHVybiBvcGVuKHBhdGgsIG1vZGUpCiAKIAotDAorCiAjIEJhc2UgdGVzdCBjbGFzcwogY2xhc3MgVGVzdEVtYWlsQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIG5kaWZmQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCk6Ci0gICAgICAgICIiIkxpa2UgZmFpbFVubGVzc0VxdWFsIGV4Y2VwdCB1c2UgbmRpZmYgZm9yIHJlYWRhYmxlIG91dHB1dC4iIiIKKyAgICAgICAgIiIiTGlrZSBhc3NlcnRFcXVhbCBleGNlcHQgdXNlIG5kaWZmIGZvciByZWFkYWJsZSBvdXRwdXQuIiIiCiAgICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKICAgICAgICAgICAgIHNmaXJzdCA9IHN0cihmaXJzdCkKICAgICAgICAgICAgIHNzZWNvbmQgPSBzdHIoc2Vjb25kKQpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICByZXR1cm4gbXNnCiAKIAotDAorCiAjIFRlc3QgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBNZXNzYWdlIGNsYXNzJ3MgQVBJCiBjbGFzcyBUZXN0TWVzc2FnZUFQSShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgpAQCAtMTc5LDYgKzE3OSwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnJvcnMuSGVhZGVyUGFyc2VFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLnNldF9ib3VuZGFyeSwgJ0JPVU5EQVJZJykKIAorICAgIGRlZiB0ZXN0X21ha2VfYm91bmRhcnkoc2VsZik6CisgICAgICAgIG1zZyA9IE1JTUVNdWx0aXBhcnQoJ2Zvcm0tZGF0YScpCisgICAgICAgICMgTm90ZSB0aGF0IHdoZW4gdGhlIGJvdW5kYXJ5IGdldHMgY3JlYXRlZCBpcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIGRldGFpbCBhbmQgbWlnaHQgY2hhbmdlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5pdGVtcygpWzBdWzFdLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpCisgICAgICAgICMgVHJpZ2dlciBjcmVhdGlvbiBvZiBib3VuZGFyeQorICAgICAgICBtc2cuYXNfc3RyaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuaXRlbXMoKVswXVsxXVs6MzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSI9PScpCisgICAgICAgICMgWFhYOiB0aGVyZSBvdWdodCB0byBiZSB0ZXN0cyBvZiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgYm91bmRhcnksIHRvby4KKwogICAgIGRlZiB0ZXN0X21lc3NhZ2VfcmZjODIyX29ubHkoc2VsZik6CiAgICAgICAgICMgSXNzdWUgNzk3MDogbWVzc2FnZS9yZmM4MjIgbm90IGluIG11bHRpcGFydCBwYXJzZWQgYnkKICAgICAgICAgIyBIZWFkZXJQYXJzZXIgY2F1c2VkIGFuIGV4Y2VwdGlvbiB3aGVuIGZsYXR0ZW5lZC4KQEAgLTIwNSw4ICsyMTYsMTIgQEAKICAgICAgICAgIyBTdWJwYXJ0IDMgaXMgYmFzZTY0CiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgyKS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCiAgICAgICAgICAgICdUaGlzIGlzIGEgQmFzZTY0IGVuY29kZWQgbWVzc2FnZS4nKQotICAgICAgICAjIFN1YnBhcnQgNCBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLgorICAgICAgICAjIFN1YnBhcnQgNCBpcyBiYXNlNjQgd2l0aCBhIHRyYWlsaW5nIG5ld2xpbmUsIHdoaWNoCisgICAgICAgICMgdXNlZCB0byBiZSBzdHJpcHBlZCAoaXNzdWUgNzE0MykuCiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgzKS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICdUaGlzIGlzIGEgQmFzZTY0IGVuY29kZWQgbWVzc2FnZS5cbicpCisgICAgICAgICMgU3VicGFydCA1IGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCg0KS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCiAgICAgICAgICAgICdUaGlzIGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X2RlY29kZWRfdXVfcGF5bG9hZChzZWxmKToKQEAgLTI1MSwyNSArMjY2LDM0IEBACiAgICAgICAgIG1zZ1snRnJvbSddID0gJ01lJwogICAgICAgICBtc2dbJ3RvJ10gPSAnWW91JwogICAgICAgICAjIENoZWNrIGZvciBjYXNlIGluc2Vuc2l0aXZpdHkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdmcm9tJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnRnJvbScgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ0ZST00nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCd0bycgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ1RvJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnVE8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmcm9tJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRnJvbScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0ZST00nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0bycgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RvJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVE8nIGluIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgICAgICAjIEJBVyAzMC1NYXItMjAwOSBFdmlsIGJlIGhlcmUuICBTbywgdGhlIGdlbmVyYXRvciBpcyBicm9rZW4gd2l0aAorICAgICAgICAgICAgIyByZXNwZWN0IHRvIGxvbmcgbGluZSBicmVha2luZy4gIEl0J3MgYWxzbyBub3QgaWRlbXBvdGVudCB3aGVuIGEKKyAgICAgICAgICAgICMgaGVhZGVyIGZyb20gYSBwYXJzZWQgbWVzc2FnZSBpcyBjb250aW51ZWQgd2l0aCB0YWJzIHJhdGhlciB0aGFuCisgICAgICAgICAgICAjIHNwYWNlcy4gIEJlZm9yZSB3ZSBmaXhlZCBidWcgMTk3NCBpdCB3YXMgcmV2ZXJzZWRseSBicm9rZW4sCisgICAgICAgICAgICAjIGkuZS4gaGVhZGVycyB0aGF0IHdlcmUgY29udGludWVkIHdpdGggc3BhY2VzIGdvdCBjb250aW51ZWQgd2l0aAorICAgICAgICAgICAgIyB0YWJzLiAgRm9yIFB5dGhvbiAyLnggdGhlcmUncyByZWFsbHkgbm8gZ29vZCBmaXggYW5kIGluIFB5dGhvbgorICAgICAgICAgICAgIyAzLnggYWxsIHRoaXMgc3R1ZmYgaXMgcmUtd3JpdHRlbiB0byBiZSByaWdodChlcikuICBDaHJpcyBXaXRoZXJzCisgICAgICAgICAgICAjIGNvbnZpbmNlZCBtZSB0aGF0IHVzaW5nIHNwYWNlIGFzIHRoZSBkZWZhdWx0IGNvbnRpbnVhdGlvbgorICAgICAgICAgICAgIyBjaGFyYWN0ZXIgaXMgbGVzcyBiYWQgZm9yIG1vcmUgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKS5yZXBsYWNlKCdcdCcsICcgJykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgZXEodGV4dCwgbXNnLmFzX3N0cmluZygpKQogICAgICAgICBmdWxscmVwciA9IHN0cihtc2cpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5zdGFydHN3aXRoKCdGcm9tICcpKQogICAgICAgICBlcSh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW0oc2VsZik6CkBAIC0zNDgsMTAgKzM3MiwxMCBAQAogCiAgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygnSGVhZGVyOiBleGlzdHMnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ2hlYWRlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ0hlYWRlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ0hFQURFUicpKQotICAgICAgICBzZWxmLmZhaWxJZihtc2cuaGFzX2tleSgnaGVhZGVyaScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ2hlYWRlcicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ0hlYWRlcicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ0hFQURFUicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1zZy5oYXNfa2V5KCdoZWFkZXJpJykpCiAKICAgICBkZWYgdGVzdF9zZXRfcGFyYW0oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNTI5LDggKzU1MywxOSBAQAogICAgICAgICBtc2cuc2V0X2NoYXJzZXQodSd1cy1hc2NpaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3VzLWFzY2lpJywgbXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSkKIAorICAgICMgSXNzdWUgNTg3MTogcmVqZWN0IGFuIGF0dGVtcHQgdG8gZW1iZWQgYSBoZWFkZXIgaW5zaWRlIGEgaGVhZGVyIHZhbHVlCisgICAgIyAoaGVhZGVyIGluamVjdGlvbiBhdHRhY2spLgorICAgIGRlZiB0ZXN0X2VtYmVkZWRfaGVhZGVyX3ZpYV9IZWFkZXJfcmVqZWN0ZWQoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0R1bW15J10gPSBIZWFkZXIoJ2R1bW15XG5YLUluamVjdGVkLUhlYWRlcjogdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBtc2cuYXNfc3RyaW5nKQogCi0MCisgICAgZGVmIHRlc3RfZW1iZWRlZF9oZWFkZXJfdmlhX3N0cmluZ19yZWplY3RlZChzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRHVtbXknXSA9ICdkdW1teVxuWC1JbmplY3RlZC1IZWFkZXI6IHRlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBtc2cuYXNfc3RyaW5nKQorCisKICMgVGVzdCB0aGUgZW1haWwuRW5jb2RlcnMgbW9kdWxlCiBjbGFzcyBUZXN0RW5jb2RlcnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2VuY29kZV9lbXB0eV9wYXlsb2FkKHNlbGYpOgpAQCAtNTUxLDggKzU4NiwxNSBAQAogICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gXHhmOCB3b3JsZCcsIF9jaGFyc2V0PSdpc28tODg1OS0xJykKICAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICdxdW90ZWQtcHJpbnRhYmxlJykKIAorICAgIGRlZiB0ZXN0X2VuY29kZTdvcjhiaXQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGEgY2hhcnNldCB3aG9zZSBpbnB1dCBjaGFyYWN0ZXIgc2V0IGlzIDhiaXQgYnV0CisgICAgICAgICMgd2hvc2Ugb3V0cHV0IGNoYXJhY3RlciBzZXQgaXMgN2JpdCBnZXRzIGEgdHJhbnNmZXItZW5jb2RpbmcKKyAgICAgICAgIyBvZiA3Yml0LgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gZW1haWwuTUlNRVRleHQuTUlNRVRleHQoJ1x4Y2FceGI4JywgX2NoYXJzZXQ9J2V1Yy1qcCcpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAnN2JpdCcpCiAKLQwKKwogIyBUZXN0IGxvbmcgaGVhZGVyIHdyYXBwaW5nCiBjbGFzcyBUZXN0TG9uZ0hlYWRlcnMoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3Rfc3BsaXRfbG9uZ19jb250aW51YXRpb24oc2VsZik6CkBAIC01NjksOCArNjExLDggQEAKICAgICAgICAgZy5mbGF0dGVuKG1zZykKICAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKIFN1YmplY3Q6IGJ1ZyBkZW1vbnN0cmF0aW9uCi1cdDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyMzQ1Njc4OTcxMjM0NTY3ODk4MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5Ci1cdG1vcmUgdGV4dAorIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyMzQ1Njc4OTcxMjM0NTY3ODk4MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5CisgbW9yZSB0ZXh0CiAKIHRlc3QKICIiIikKQEAgLTY3MCw3ICs3MTIsNyBAQAogTUlNRS1WZXJzaW9uOiAxLjAKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKIFgtRm9vYmFyLVNwb2luay1EZWZyb2JuaXQ6IHdhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7Ci1cdHNwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IgorIHNwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IgogCiAnJycpCiAKQEAgLTY4Niw3ICs3MjgsNyBAQAogICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAogRnJvbTogdGVzdEBkb20uYWluCiBSZWZlcmVuY2VzOiA8MEBkb20uYWluPiA8MUBkb20uYWluPiA8MkBkb20uYWluPiA8M0Bkb20uYWluPiA8NEBkb20uYWluPgotXHQ8NUBkb20uYWluPiA8NkBkb20uYWluPiA8N0Bkb20uYWluPiA8OEBkb20uYWluPiA8OUBkb20uYWluPgorIDw1QGRvbS5haW4+IDw2QGRvbS5haW4+IDw3QGRvbS5haW4+IDw4QGRvbS5haW4+IDw5QGRvbS5haW4+CiAKIFRlc3QiIiIpCiAKQEAgLTc2NCw5ICs4MDYsOSBAQAogICAgICAgICBtc2dbJ1RvJ10gPSB0bwogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKDApLCAnJydcCiBUbzogIlNvbWVvbmUgVGVzdCAjQSIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LCA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sCi1cdCJTb21lb25lIFRlc3QgI0IiIDxzb21lb25lQHVtaWNoLmVkdT4sCi1cdCJTb21lb25lIFRlc3QgI0MiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwKLVx0IlNvbWVvbmUgVGVzdCAjRCIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+CisgIlNvbWVvbmUgVGVzdCAjQiIgPHNvbWVvbmVAdW1pY2guZWR1PiwKKyAiU29tZW9uZSBUZXN0ICNDIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sCisgIlNvbWVvbmUgVGVzdCAjRCIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+CiAKICcnJykKIApAQCAtODA5LDIyICs4NTEsMjIgQEAKIFx0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKIFx0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAogUmVjZWl2ZWQtMjogZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5Ci1cdGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7Ci1cdFdlZCwgMDUgTWFyIDIwMDMgMTg6MTA6MTggLTA3MDAKKyBocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOworIFdlZCwgMDUgTWFyIDIwMDMgMTg6MTA6MTggLTA3MDAKIAogIiIiKQogCiAgICAgZGVmIHRlc3Rfc3RyaW5nX2hlYWRlcmluc3RfZXEoc2VsZik6CiAgICAgICAgIGggPSAnPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQgQnJlbW5lclwncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKScKICAgICAgICAgbXNnID0gTWVzc2FnZSgpCi0gICAgICAgIG1zZ1snUmVjZWl2ZWQtMSddID0gSGVhZGVyKGgsIGhlYWRlcl9uYW1lPSdSZWNlaXZlZC0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCi0gICAgICAgIG1zZ1snUmVjZWl2ZWQtMiddID0gaAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAotUmVjZWl2ZWQtMTogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbl93cz0nXHQnKQorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBoCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICIiIlwKK1JlY2VpdmVkOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CiBcdChEYXZpZCBCcmVtbmVyJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIikKLVJlY2VpdmVkLTI6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KLVx0KERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQorUmVjZWl2ZWQ6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KKyAoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpCiAKICIiIikKIApAQCAtODM4LDcgKzg4MCw3IEBACiAgICAgICAgIG1zZ1snRmFjZS0yJ10gPSBIZWFkZXIodCwgaGVhZGVyX25hbWU9J0ZhY2UtMicpCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAogRmFjZS0xOiBpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0JBTUFBQUNsTE9TMEFBQUFHRkJNVkVVQUFBQWtIaUplUlVJY0dCaTkKLVx0bG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCisgbG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCiBGYWNlLTI6IGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQogIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAogCkBAIC04NDgsMTEgKzg5MCwxMSBAQAogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAogICAgICAgICBtID0gJycnXAogUmVjZWl2ZWQ6IGZyb20gc2lpbWFnZS5jb20gKFsxNzIuMjUuMS4zXSkgYnkgemltYS5zaWxpY29uaW1hZ2UuY29tIHdpdGggTWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7Ci1cdFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAnJycKKyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwJycnCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAnJydcCiBSZWNlaXZlZDogZnJvbSBzaWltYWdlLmNvbSAoWzE3Mi4yNS4xLjNdKSBieSB6aW1hLnNpbGljb25pbWFnZS5jb20gd2l0aAotXHRNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsgV2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMAorIE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwCiAKICcnJykKIApAQCAtODY2LDE0ICs5MDgsMTQgQEAKICAgICAgICAgbXNnWydMaXN0J10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J0xpc3QnKQogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKIExpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCi1cdDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KKyA8bWFpbHRvOnNwYW1hc3Nhc3Npbi10YWxrLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0P3N1YmplY3Q9dW5zdWJzY3JpYmU+CiBMaXN0OiBMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAogIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KIAogIiIiKQogCiAKLQwKKwogIyBUZXN0IG1hbmdsaW5nIG9mICJGcm9tICIgbGluZXMgaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlCiBjbGFzcyBUZXN0RnJvbU1hbmdsaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05MDcsNyArOTQ5LDcgQEAKICIiIikKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRUF1ZGlvIGNsYXNzCiBjbGFzcyBUZXN0TUlNRUF1ZGlvKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05MzcsNyArOTc5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2FkZF9oZWFkZXIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHNlbGYuX2F1LmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2F1ZGlvdGVzdC5hdScpCiAgICAgICAgIGVxKHNlbGYuX2F1Wydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCkBAIC05NTYsNyArOTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J2Zvb2JhcicpIGlzIG1pc3NpbmcpCiAKIAotDAorCiAjIFRlc3QgdGhlIGJhc2ljIE1JTUVJbWFnZSBjbGFzcwogY2xhc3MgVGVzdE1JTUVJbWFnZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtOTgwLDcgKzEwMjIsNyBAQAogCiAgICAgZGVmIHRlc3RfYWRkX2hlYWRlcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgc2VsZi5faW0uYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT0nZGluZ3VzZmlzaC5naWYnKQogICAgICAgICBlcShzZWxmLl9pbVsnY29udGVudC1kaXNwb3NpdGlvbiddLApAQCAtOTk5LDcgKzEwNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRVRleHQgY2xhc3MKIGNsYXNzIFRlc3RNSU1FVGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTAwNyw3ICsxMDQ5LDcgQEAKIAogICAgIGRlZiB0ZXN0X3R5cGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBlcShzZWxmLl9tc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCiAgICAgICAgIGVxKHNlbGYuX21zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnKSwgJ3VzLWFzY2lpJykKICAgICAgICAgbWlzc2luZyA9IFtdCkBAIC0xMDE3LDcgKzEwNTksNyBAQAogCiAgICAgZGVmIHRlc3RfcGF5bG9hZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9tc2cuZ2V0X3BheWxvYWQoKSwgJ2hlbGxvIHRoZXJlJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBzZWxmLl9tc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5fbXNnLmlzX211bHRpcGFydCgpKQogCiAgICAgZGVmIHRlc3RfY2hhcnNldChzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0xMDUxLDcgKzEwOTMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIE1JTUVUZXh0LCB0ZXN0c3RyKQogCiAKLQwKKwogIyBUZXN0IGNvbXBsaWNhdGVkIG11bHRpcGFydC8qIG1lc3NhZ2VzCiBjbGFzcyBUZXN0TXVsdGlwYXJ0KFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTEwOTcsNyArMTEzOSw3IEBACiAgICAgZGVmIHRlc3RfaGllcmFyY2h5KHNlbGYpOgogICAgICAgICAjIGNvbnZlbmllbmNlCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCiAgICAgICAgICMgdGVzdHMKICAgICAgICAgbSA9IHNlbGYuX21zZwpAQCAtMTQxMSw3ICsxNDUzLDcgQEAKIAogLS0gICAgWFhYWC0tCiAnJycpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaXNfbXVsdGlwYXJ0KCkpCiAgICAgICAgIGVxKG1zZy5nZXRfYm91bmRhcnkoKSwgJyAgICBYWFhYJykKICAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMikKIApAQCAtMTQyNywxMCArMTQ2OSwxMCBAQAogCiBZWE5rWmc9PQogLS09PT09PT09PT09PT09PT0wMDEyMzk0MTY0PT0tLSIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkuZ2V0X3BheWxvYWQoKSwgJ1lYTmtaZz09JykKIAogCi0MCisKICMgVGVzdCBzb21lIGJhZGx5IGZvcm1hdHRlZCBtZXNzYWdlcwogY2xhc3MgVGVzdE5vbkNvbmZvcm1hbnQoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfcGFyc2VfbWlzc2luZ19taW5vcl90eXBlKHNlbGYpOgpAQCAtMTQ0MSw3ICsxNDgzLDcgQEAKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3N1YnR5cGUoKSwgJ3BsYWluJykKIAogICAgIGRlZiB0ZXN0X3NhbWVfYm91bmRhcnlfaW5uZXJfb3V0ZXIoc2VsZik6Ci0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTUudHh0JykKICAgICAgICAgIyBYWFggV2UgY2FuIHByb2JhYmx5IGV2ZW50dWFsbHkgZG8gYmV0dGVyCiAgICAgICAgIGlubmVyID0gbXNnLmdldF9wYXlsb2FkKDApCkBAIC0xNDUxLDcgKzE0OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKIAogICAgIGRlZiB0ZXN0X211bHRpcGFydF9ub19ib3VuZGFyeShzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yNS50eHQnKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQpAQCAtMTUwOSw3ICsxNTUxLDcgQEAKICIiIikKIAogICAgIGRlZiB0ZXN0X2x5aW5nX211bHRpcGFydChzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ180MS50eHQnKQogICAgICAgICB1bmxlc3MoaGFzYXR0cihtc2csICdkZWZlY3RzJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZy5kZWZlY3RzKSwgMikKQEAgLTE1MjksNyArMTU3MSw3IEBACiAgICAgICAgICMgWypdIFRoaXMgbWVzc2FnZSBpcyBtaXNzaW5nIGl0cyBzdGFydCBib3VuZGFyeQogICAgICAgICBiYWQgPSBvdXRlci5nZXRfcGF5bG9hZCgxKS5nZXRfcGF5bG9hZCgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYWQuZGVmZWN0cyksIDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiYWQuZGVmZWN0c1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCkpCiAKICAgICBkZWYgdGVzdF9maXJzdF9saW5lX2lzX2NvbnRpbnVhdGlvbl9oZWFkZXIoc2VsZik6CkBAIC0xNTM5LDEzICsxNTgxLDEzIEBACiAgICAgICAgIGVxKG1zZy5rZXlzKCksIFtdKQogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ0xpbmUgMlxuTGluZSAzJykKICAgICAgICAgZXEobGVuKG1zZy5kZWZlY3RzKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnLmRlZmVjdHNbMF0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuRmlyc3RIZWFkZXJMaW5lSXNDb250aW51YXRpb25EZWZlY3QpKQogICAgICAgICBlcShtc2cuZGVmZWN0c1swXS5saW5lLCAnIExpbmUgMVxuJykKIAogCiAKLQwKKwogIyBUZXN0IFJGQyAyMDQ3IGhlYWRlciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKIGNsYXNzIFRlc3RSRkMyMDQ3KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZmMyMDQ3X211bHRpbGluZShzZWxmKToKQEAgLTE1OTEsOCArMTYzMywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZycsIE5vbmUpLCAoJ1x4ZTUnLCAnaXNvLTg4NTktMScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdzYm9yZCcsIE5vbmUpXSkKIAorICAgIGRlZiB0ZXN0X3JmYzIwNDdfQl9iYWRfcGFkZGluZyhzZWxmKToKKyAgICAgICAgcyA9ICc9P2lzby04ODU5LTE/Qj8lcz89JworICAgICAgICBkYXRhID0gWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IHRlc3QgY29tcGxldGUgYnl0ZXMKKyAgICAgICAgICAgICgnZG09PScsICd2JyksICgnZG09JywgJ3YnKSwgKCdkbScsICd2JyksCisgICAgICAgICAgICAoJ2Rtaz0nLCAndmknKSwgKCdkbWsnLCAndmknKQorICAgICAgICAgIF0KKyAgICAgICAgZm9yIHEsIGEgaW4gZGF0YToKKyAgICAgICAgICAgIGRoID0gZGVjb2RlX2hlYWRlcihzICUgcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGgsIFsoYSwgJ2lzby04ODU5LTEnKV0pCiAKLQwKKyAgICBkZWYgdGVzdF9yZmMyMDQ3X1FfaW52YWxpZF9kaWdpdHMoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTAwMDQuCisgICAgICAgIHMgPSAnPT9pc28tODY1OS0xP1E/YW5kcj1lOT16ej89JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZV9oZWFkZXIocyksCisgICAgICAgICAgICAgICAgICAgICAgICBbKGInYW5kclx4ZTk9enonLCAnaXNvLTg2NTktMScpXSkKKworCiAjIFRlc3QgdGhlIE1JTUVNZXNzYWdlIGNsYXNzCiBjbGFzcyBUZXN0TUlNRU1lc3NhZ2UoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTYwNyw3ICsxNjY0LDcgQEAKIAogICAgIGRlZiB0ZXN0X3ZhbGlkX2FyZ3VtZW50KHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBzdWJqZWN0ID0gJ0Egc3ViLW1lc3NhZ2UnCiAgICAgICAgIG0gPSBNZXNzYWdlKCkKICAgICAgICAgbVsnU3ViamVjdCddID0gc3ViamVjdApAQCAtMTY1MSwyMCArMTcwOCwyMCBAQAogCiAgICAgZGVmIHRlc3RfcGFyc2VfbWVzc2FnZV9yZmM4MjIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzExLnR4dCcpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCiAgICAgICAgIHBheWxvYWQgPSBtc2cuZ2V0X3BheWxvYWQoKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KSkKICAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxKQogICAgICAgICBzdWJtc2cgPSBwYXlsb2FkWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1Ym1zZywgTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN1Ym1zZywgTWVzc2FnZSkpCiAgICAgICAgIGVxKHN1Ym1zZ1snc3ViamVjdCddLCAnQW4gZW5jbG9zZWQgbWVzc2FnZScpCiAgICAgICAgIGVxKHN1Ym1zZy5nZXRfcGF5bG9hZCgpLCAnSGVyZSBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS5cbicpCiAKICAgICBkZWYgdGVzdF9kc24oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgICMgbXNnIDE2IGlzIGEgRGVsaXZlcnkgU3RhdHVzIE5vdGlmaWNhdGlvbiwgc2VlIFJGQyAxODk0CiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzE2LnR4dCcpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvcmVwb3J0JykKQEAgLTE5MDUsNyArMTk2Miw3IEBACiAgICAgICAgIG1zZyA9IE1JTUVNdWx0aXBhcnQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmlzX211bHRpcGFydCgpKQogCi0MCisKICMgQSBnZW5lcmFsIHRlc3Qgb2YgcGFyc2VyLT5tb2RlbC0+Z2VuZXJhdG9yIGlkZW1wb3RlbmN5LiAgSU9XLCByZWFkIGEgbWVzc2FnZQogIyBpbiwgcGFyc2UgaXQgaW50byBhIG1lc3NhZ2Ugb2JqZWN0IHRyZWUsIHRoZW4gd2l0aG91dCB0b3VjaGluZyB0aGUgdHJlZSwKICMgcmVnZW5lcmF0ZSB0aGUgcGxhaW4gdGV4dC4gIFRoZSBvcmlnaW5hbCB0ZXh0IGFuZCB0aGUgdHJhbnNmb3JtZWQgdGV4dApAQCAtMTkyOSw3ICsxOTg2LDcgQEAKICAgICAgICAgZXEodGV4dCwgcy5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfdGV4dF9tZXNzYWdlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCkBAIC0xOTQxLDcgKzE5OTgsNyBAQAogICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX3VudHlwZWRfbWVzc2FnZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQogICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBOb25lKQpAQCAtMjAxMyw4ICsyMDcwLDggQEAKICAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCiAKICAgICBkZWYgdGVzdF9jb250ZW50X3R5cGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBHZXQgYSBtZXNzYWdlIG9iamVjdCBhbmQgcmVzZXQgdGhlIHNlZWsgcG9pbnRlciBmb3Igb3RoZXIgdGVzdHMKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDUudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ211bHRpcGFydC9yZXBvcnQnKQpAQCAtMjAzNiw3ICsyMDkzLDcgQEAKICAgICAgICAgZXEobXNnMi5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCiAgICAgICAgIG1zZzMgPSBtc2cuZ2V0X3BheWxvYWQoMikKICAgICAgICAgZXEobXNnMy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG1zZzMsIE1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2czLCBNZXNzYWdlKSkKICAgICAgICAgcGF5bG9hZCA9IG1zZzMuZ2V0X3BheWxvYWQoKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KSkKICAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxKQpAQCAtMjA0NSw4ICsyMTAyLDggQEAKICAgICAgICAgZXEobXNnNC5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCiAKICAgICBkZWYgdGVzdF9wYXJzZXIoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDYudHh0JykKICAgICAgICAgIyBDaGVjayBzb21lIG9mIHRoZSBvdXRlciBoZWFkZXJzCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCkBAIC0yMDU2LDEzICsyMTEzLDEzIEBACiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCiAgICAgICAgIG1zZzEgPSBwYXlsb2FkWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG1zZzEsIE1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLCBNZXNzYWdlKSkKICAgICAgICAgZXEobXNnMS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMS5nZXRfcGF5bG9hZCgpLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLmdldF9wYXlsb2FkKCksIHN0cikpCiAgICAgICAgIGVxKG1zZzEuZ2V0X3BheWxvYWQoKSwgJ1xuJykKIAogCi0MCisKICMgVGVzdCB2YXJpb3VzIG90aGVyIGJpdHMgb2YgdGhlIHBhY2thZ2UncyBmdW5jdGlvbmFsaXR5CiBjbGFzcyBUZXN0TWlzY2VsbGFuZW91cyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fc3RyaW5nKHNlbGYpOgpAQCAtMjA5NSw3ICsyMTUyLDcgQEAKICAgICAgICAgICAgIGZwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmdfd2l0aF9jbGFzcyhzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQpAQCAtMjExOCw3ICsyMTc1LDcgQEAKICAgICAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHN1YnBhcnQsIE15TWVzc2FnZSkpCiAKICAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fZmlsZV93aXRoX2NsYXNzKHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgICMgQ3JlYXRlIGEgc3ViY2xhc3MKICAgICAgICAgY2xhc3MgTXlNZXNzYWdlKE1lc3NhZ2UpOgogICAgICAgICAgICAgcGFzcwpAQCAtMjIwNSw2ICsyMjYyLDE5IEBACiAgICAgICAgIGVxKHRpbWUubG9jYWx0aW1lKHQpWzo2XSwgdGltZXR1cFs6Nl0pCiAgICAgICAgIGVxKGludCh0aW1lLnN0cmZ0aW1lKCclWScsIHRpbWV0dXBbOjldKSksIDIwMDMpCiAKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfeTJrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGZvciBwYXJzaW5nIGEgZGF0ZSB3aXRoIGEgdHdvLWRpZ2l0IHllYXIuCisKKyAgICAgICAgUGFyc2luZyBhIGRhdGUgd2l0aCBhIHR3by1kaWdpdCB5ZWFyIHNob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QKKyAgICAgICAgZm91ci1kaWdpdCB5ZWFyLiBSRkM4MjIgYWxsb3dzIHR3by1kaWdpdCB5ZWFycywgYnV0IFJGQzI4MjIgKHdoaWNoCisgICAgICAgIG9ic29sZXRlcyBSRkM4MjIpIHJlcXVpcmVzIGZvdXItZGlnaXQgeWVhcnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VkYXRlX3R6KCcyNSBGZWIgMDMgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VkYXRlX3R6KCcyNSBGZWIgNzEgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAxOTcxIDEzOjQ3OjI2IC0wODAwJykpCisKICAgICBkZWYgdGVzdF9wYXJzZWFkZHJfZW1wdHkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VhZGRyKCc8PicpLCAoJycsICcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5mb3JtYXRhZGRyKFV0aWxzLnBhcnNlYWRkcignPD4nKSksICcnKQpAQCAtMjIzOSw2ICsyMzA5LDI0IEBACiAgICAgICAgICMgZm9ybWF0YWRkcigpIHF1b3RlcyB0aGUgbmFtZSBpZiB0aGVyZSdzIGEgZG90IGluIGl0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMuZm9ybWF0YWRkcigoYSwgYikpLCB5KQogCisgICAgZGVmIHRlc3RfcGFyc2VhZGRyX3ByZXNlcnZlc19xdW90ZWRfcGFpcnNfaW5fYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDEwMDA1LiAgTm90ZSB0aGF0IGluIHRoZSB0aGlyZCB0ZXN0IHRoZSBzZWNvbmQgcGFpciBvZgorICAgICAgICAjIGJhY2tzbGFzaGVzIGlzIG5vdCBhY3R1YWxseSBhIHF1b3RlZCBwYWlyIGJlY2F1c2UgaXQgaXMgbm90IGluc2lkZSBhCisgICAgICAgICMgY29tbWVudCBvciBxdW90ZWQgc3RyaW5nOiB0aGUgYWRkcmVzcyBiZWluZyBwYXJzZWQgaGFzIGEgcXVvdGVkCisgICAgICAgICMgc3RyaW5nIGNvbnRhaW5pbmcgYSBxdW90ZWQgYmFja3NsYXNoLCBmb2xsb3dlZCBieSAnZXhhbXBsZScgYW5kIHR3bworICAgICAgICAjIGJhY2tzbGFzaGVzLCBmb2xsb3dlZCBieSBhbm90aGVyIHF1b3RlZCBzdHJpbmcgY29udGFpbmluZyBhIHNwYWNlIGFuZAorICAgICAgICAjIHRoZSB3b3JkICdleGFtcGxlJy4gIHBhcnNlYWRkciBjb3BpZXMgdGhvc2UgdHdvIGJhY2tzbGFzaGVzCisgICAgICAgICMgbGl0ZXJhbGx5LiAgUGVyIHJmYzUzMjIgdGhpcyBpcyBub3QgdGVjaG5pY2FsbHkgY29ycmVjdCBzaW5jZSBhIFwgbWF5CisgICAgICAgICMgbm90IGFwcGVhciBpbiBhbiBhZGRyZXNzIG91dHNpZGUgb2YgYSBxdW90ZWQgc3RyaW5nLiAgSXQgaXMgcHJvYmFibHkKKyAgICAgICAgIyBhIHNlbnNpYmxlIFBvc3RlbCBpbnRlcnByZXRhdGlvbiwgdGhvdWdoLgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoVXRpbHMucGFyc2VhZGRyKCciImV4YW1wbGUiIGV4YW1wbGUiQGV4YW1wbGUuY29tJyksCisgICAgICAgICAgKCcnLCAnIiJleGFtcGxlIiBleGFtcGxlIkBleGFtcGxlLmNvbScpKQorICAgICAgICBlcShVdGlscy5wYXJzZWFkZHIoJyJcXCJleGFtcGxlXFwiIGV4YW1wbGUiQGV4YW1wbGUuY29tJyksCisgICAgICAgICAgKCcnLCAnIlxcImV4YW1wbGVcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSkKKyAgICAgICAgZXEoVXRpbHMucGFyc2VhZGRyKCciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSwKKyAgICAgICAgICAoJycsICciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSkKKwogICAgIGRlZiB0ZXN0X211bHRpbGluZV9mcm9tX2NvbW1lbnQoc2VsZik6CiAgICAgICAgIHggPSAiIiJcCiBGb28KQEAgLTIyNjAsNyArMjM0OCw3IEBACiAKICAgICBkZWYgdGVzdF9jaGFyc2V0X3JpY2hjb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIG5lID0gc2VsZi5mYWlsSWZFcXVhbAorICAgICAgICBuZSA9IHNlbGYuYXNzZXJ0Tm90RXF1YWwKICAgICAgICAgY3NldDEgPSBDaGFyc2V0KCkKICAgICAgICAgY3NldDIgPSBDaGFyc2V0KCkKICAgICAgICAgZXEoY3NldDEsICd1cy1hc2NpaScpCkBAIC0yMzg2LDcgKzI0NzQsNyBAQAogIiIiKQogCiAKLQwKKwogIyBUZXN0IHRoZSBpdGVyYXRvci9nZW5lcmF0b3JzCiBjbGFzcyBUZXN0SXRlcmF0b3JzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X2JvZHlfbGluZV9pdGVyYXRvcihzZWxmKToKQEAgLTI0NzksNyArMjU2Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnJy5qb2luKFtpbCBmb3IgaWwsIG4gaW4gaW10XSkgPT0gJycuam9pbihvbSkpCiAKIAotDAorCiBjbGFzcyBUZXN0UGFyc2VycyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9oZWFkZXJfcGFyc2VyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI0OTIsOCArMjU4MCw4IEBACiAgICAgICAgIGVxKG1zZ1snZnJvbSddLCAncHBwLXJlcXVlc3RAenp6Lm9yZycpCiAgICAgICAgIGVxKG1zZ1sndG8nXSwgJ3BwcEB6enoub3JnJykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ211bHRpcGFydC9taXhlZCcpCi0gICAgICAgIHNlbGYuZmFpbElmKG1zZy5pc19tdWx0aXBhcnQoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnLmdldF9wYXlsb2FkKCksIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKIAogICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfY29udGludWF0aW9uKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI2NDIsNyArMjczMCw3IEBACiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLmVuZHN3aXRoKCdcclxuJykpCiAKLQwKKwogY2xhc3MgVGVzdEJhc2U2NCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI3MTQsNyArMjgwMiw3IEBACiAgPT9pc28tODg1OS0xP2I/ZUhoNGVDQjRlSGg0SUhoNGVIZ2c/PSIiIikKIAogCi0MCisKIGNsYXNzIFRlc3RRdW9wcmkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5obGl0ID0gW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsgXApAQCAtMjczMCwxNSArMjgxOCwxNSBAQAogCiAgICAgZGVmIHRlc3RfaGVhZGVyX3F1b3ByaV9jaGVjayhzZWxmKToKICAgICAgICAgZm9yIGMgaW4gc2VsZi5obGl0OgotICAgICAgICAgICAgc2VsZi5mYWlsSWYocXVvcHJpTUlNRS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxdW9wcmlNSU1FLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCiAgICAgICAgIGZvciBjIGluIHNlbGYuaG5vbjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdW9wcmlNSU1FLmhlYWRlcl9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpTUlNRS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQogCiAgICAgZGVmIHRlc3RfYm9keV9xdW9wcmlfY2hlY2soc2VsZik6CiAgICAgICAgIGZvciBjIGluIHNlbGYuYmxpdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHF1b3ByaU1JTUUuYm9keV9xdW9wcmlfY2hlY2soYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaU1JTUUuYm9keV9xdW9wcmlfY2hlY2soYykpCiAgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdW9wcmlNSU1FLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaU1JTUUuYm9keV9xdW9wcmlfY2hlY2soYykpCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfcXVvcHJpX2xlbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yODI0LDcgKzI5MTIsNyBAQAogdHdvIGxpbmUiIiIpCiAKIAotDAorCiAjIFRlc3QgdGhlIENoYXJzZXQgY2xhc3MKIGNsYXNzIFRlc3RDaGFyc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0yODgxLDggKzI5NjksMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY2hhcnNldCksICd1cy1hc2NpaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5DaGFyc2V0RXJyb3IsIENoYXJzZXQsICdhc2NceGZmaWknKQogCisgICAgZGVmIHRlc3RfY29kZWNzX2FsaWFzZXNfYWNjZXB0ZWQoc2VsZik6CisgICAgICAgIGNoYXJzZXQgPSBDaGFyc2V0KCd1dGY4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY2hhcnNldCksICd1dGYtOCcpCiAKLQwKKwogIyBUZXN0IG11bHRpbGluZ3VhbCBNSU1FIGhlYWRlcnMuCiBjbGFzcyBUZXN0SGVhZGVyKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKQEAgLTI5MDcsNyArMjk5OCw3IEBACiAgICAgICAgIGggPSBIZWFkZXIoIkkgYW0gdGhlIHZlcnkgbW9kZWwgb2YgYSBtb2Rlcm4gTWFqb3ItR2VuZXJhbDsgSSd2ZSBpbmZvcm1hdGlvbiB2ZWdldGFibGUsIGFuaW1hbCwgYW5kIG1pbmVyYWw7IEkga25vdyB0aGUga2luZ3Mgb2YgRW5nbGFuZCwgYW5kIEkgcXVvdGUgdGhlIGZpZ2h0cyBoaXN0b3JpY2FsIGZyb20gTWFyYXRob24gdG8gV2F0ZXJsb28sIGluIG9yZGVyIGNhdGVnb3JpY2FsOyBJJ20gdmVyeSB3ZWxsIGFjcXVhaW50ZWQsIHRvbywgd2l0aCBtYXR0ZXJzIG1hdGhlbWF0aWNhbDsgSSB1bmRlcnN0YW5kIGVxdWF0aW9ucywgYm90aCB0aGUgc2ltcGxlIGFuZCBxdWFkcmF0aWNhbDsgYWJvdXQgYmlub21pYWwgdGhlb3JlbSBJJ20gdGVlbWluZyB3aXRoIGEgbG90IG8nIG5ld3MsIHdpdGggbWFueSBjaGVlcmZ1bCBmYWN0cyBhYm91dCB0aGUgc3F1YXJlIG9mIHRoZSBoeXBvdGVudXNlLiIsCiAgICAgICAgICAgICAgICAgICAgbWF4bGluZWxlbj03NikKICAgICAgICAgZm9yIGwgaW4gaC5lbmNvZGUoc3BsaXRjaGFycz0nICcpLnNwbGl0KCdcbiAnKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhsZW4obCkgPD0gNzYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGwpIDw9IDc2KQogCiAgICAgZGVmIHRlc3RfbXVsdGlsaW5ndWFsKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbApAQCAtMzA0MSwxMSArMzEzMiwzMyBAQAogCiAgICAgZGVmIHRlc3RfYnJva2VuX2Jhc2U2NF9oZWFkZXIoc2VsZik6CiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCi0gICAgICAgIHMgPSAnU3ViamVjdDogPT9FVUMtS1I/Qj9DU2l4cExEdEtTQy83TGl1dnNheDRpQzZ1TG13TWNpaklLSGFJTHpTd2QvSDBTQzgrTENqd0xzZ3Y3Vy8rTWozSVE/PScKKyAgICAgICAgcyA9ICdTdWJqZWN0OiA9P0VVQy1LUj9CP0NTaXhwTER0S1NDLzdMaXV2c2F4NGlDNnVMbXdNY2lqSUtIYUlMelN3ZC9IMFNDOCtMQ2p3THNndjdXLytNajNJID89JwogICAgICAgICByYWlzZXMoRXJyb3JzLkhlYWRlclBhcnNlRXJyb3IsIGRlY29kZV9oZWFkZXIsIHMpCiAKKyAgICAjIElzc3VlIDEwNzg5MTkKKyAgICBkZWYgdGVzdF9hc2NpaV9hZGRfaGVhZGVyKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdidWQuZ2lmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJ1ZC5naWYiJywKKyAgICAgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQogCi0MCisgICAgZGVmIHRlc3Rfbm9uYXNjaWlfYWRkX2hlYWRlcl92aWFfdHJpcGxlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICBmaWxlbmFtZT0oJ2lzby04ODU5LTEnLCAnJywgJ0Z1XHhkZmJhbGxlci5wcHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZSo9Imlzby04ODU5LTFcJ1wnRnUlREZiYWxsZXIucHB0IicsCisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSkKKworICAgIGRlZiB0ZXN0X2VuY29kZV91bmFsaWFzZWRfY2hhcnNldChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMzc5NDE2OiB3aGVuIHRoZSBjaGFyc2V0IGhhcyBubyBvdXRwdXQgY29udmVyc2lvbiwKKyAgICAgICAgIyBvdXRwdXQgd2FzIGFjY2lkZW50YWxseSBnZXR0aW5nIGNvZXJjZWQgdG8gdW5pY29kZS4KKyAgICAgICAgcmVzID0gSGVhZGVyKCdhYmMnLCdpc28tODg1OS0yJykuZW5jb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICc9P2lzby04ODU5LTI/cT9hYmM/PScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXMsIHN0cikKKworCiAjIFRlc3QgUkZDIDIyMzEgaGVhZGVyIHBhcmFtZXRlcnMgKGVuL2RlKWNvZGluZwogY2xhc3MgVGVzdFJGQzIyMzEoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfZ2V0X3BhcmFtKHNlbGYpOgpAQCAtMzA3MCwxMSArMzE4MywxMSBAQAogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQogICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD0ndXMtYXNjaWknLCBsYW5ndWFnZT0nZW4nKQotICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKKyAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAogUmV0dXJuLVBhdGg6IDxiYmJAenp6Lm9yZz4KIERlbGl2ZXJlZC1UbzogYmJiQHp6ei5vcmcKIFJlY2VpdmVkOiBieSBtYWlsLnp6ei5vcmcgKFBvc3RmaXgsIGZyb20gdXNlcmlkIDg4OSkKLVx0aWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKIE1JTUUtVmVyc2lvbjogMS4wCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CiBNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgpAQCAtMzA4Myw3ICszMTk2LDcgQEAKIFN1YmplY3Q6IFRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UKIERhdGU6IEZyaSwgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMAogQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpOwotXHR0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgorIHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCiAKIAogSGksCkBAIC0zMTA0LDcgKzMyMTcsNyBAQAogUmV0dXJuLVBhdGg6IDxiYmJAenp6Lm9yZz4KIERlbGl2ZXJlZC1UbzogYmJiQHp6ei5vcmcKIFJlY2VpdmVkOiBieSBtYWlsLnp6ei5vcmcgKFBvc3RmaXgsIGZyb20gdXNlcmlkIDg4OSkKLVx0aWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKIE1JTUUtVmVyc2lvbjogMS4wCiBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CiBNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgpAQCAtMzExMyw3ICszMjI2LDcgQEAKIFN1YmplY3Q6IFRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UKIERhdGU6IEZyaSwgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMAogQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSI7Ci1cdHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCisgdGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKIAogCiBIaSwKQEAgLTMxMzcsNyArMzI1MCw3IEBACiAnJycKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBwYXJhbSA9IG1zZy5nZXRfcGFyYW0oJ05BTUUnKQotICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGFyYW0sCiAgICAgICAgICAgICAnZmlsZV9fX19DX19ET0NVTUVOVFNfMjBBTkRfMjBTRVRUSU5HU19GQUJJRU5fTE9DQUxfMjBTRVRUSU5HU19URU1QX25zbWFpbC5odG0nKQpAQCAtMzI5MCw3ICszNDAzLDcgQEAKICIiIgogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnbmFtZScpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW0sICJGcmFuaydzIERvY3VtZW50IikKIAogICAgIGRlZiB0ZXN0X3JmYzIyMzFfdGlja19hdHRhY2tfZXh0ZW5kZWQoc2VsZik6CkBAIC0zMzE0LDcgKzM0MjcsNyBAQAogIiIiCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbSwgInVzLWFzY2lpJ2VuLXVzJ0ZyYW5rJ3MgRG9jdW1lbnQiKQogCiAgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19leHRlbmRlZF92YWx1ZXMoc2VsZik6CkBAIC0zMzU3LDcgKzM0NzAsNyBAQAogICAgICAgICBlcShzLCAnTXkgRG9jdW1lbnQgRm9yIFlvdScpCiAKIAotDAorCiAjIFRlc3RzIHRvIGVuc3VyZSB0aGF0IHNpZ25lZCBwYXJ0cyBvZiBhbiBlbWFpbCBhcmUgY29tcGxldGVseSBwcmVzZXJ2ZWQsIGFzCiAjIHJlcXVpcmVkIGJ5IFJGQzE4NDcgc2VjdGlvbiAyLjEuICBOb3RlIHRoYXQgdGhlc2UgYXJlIGluY29tcGxldGUsIGJlY2F1c2UgdGhlCiAjIGVtYWlsIHBhY2thZ2UgZG9lcyBub3QgY3VycmVudGx5IGFsd2F5cyBwcmVzZXJ2ZSB0aGUgYm9keS4gIFNlZSBpc3N1ZSAxNjcwNzY1LgpAQCAtMzM5Myw3ICszNTA2LDcgQEAKICAgICAgICAgc2VsZi5fc2lnbmVkX3BhcnRzX2VxKG9yaWdpbmFsLCByZXN1bHQpCiAKIAotDAorCiBkZWYgX3Rlc3RjbGFzc2VzKCk6CiAgICAgbW9kID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgcmV0dXJuIFtnZXRhdHRyKG1vZCwgbmFtZSkgZm9yIG5hbWUgaW4gZGlyKG1vZCkgaWYgbmFtZS5zdGFydHN3aXRoKCdUZXN0JyldCkBAIC0zNDExLDYgKzM1MjQsNiBAQAogICAgICAgICBydW5fdW5pdHRlc3QodGVzdGNsYXNzKQogCiAKLQwKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSdzdWl0ZScpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weSBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5CmluZGV4IDU2YmFjY2QuLjUzMjc1MGEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5CisrKyBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5CkBAIC0zLDcgKzMsNyBAQAogIyBlbWFpbCBwYWNrYWdlIHVuaXQgdGVzdHMgZm9yIChvcHRpb25hbCkgQXNpYW4gY29kZWNzCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGZyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCiBmcm9tIGVtYWlsLmNoYXJzZXQgaW1wb3J0IENoYXJzZXQKQEAgLTE1LDcgKzE1LDcgQEAKIHRyeToKICAgICB1bmljb2RlKCdmb28nLCAnZXVjLWpwJykKIGV4Y2VwdCBMb29rdXBFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZAorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CiAKIAogDApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3NfcmVuYW1lZC5weSBiL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzX3JlbmFtZWQucHkKaW5kZXggNTZiYWNjZC4uNTMyNzUwYSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3NfcmVuYW1lZC5weQorKysgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnB5CkBAIC0zLDcgKzMsNyBAQAogIyBlbWFpbCBwYWNrYWdlIHVuaXQgdGVzdHMgZm9yIChvcHRpb25hbCkgQXNpYW4gY29kZWNzCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGZyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCiBmcm9tIGVtYWlsLmNoYXJzZXQgaW1wb3J0IENoYXJzZXQKQEAgLTE1LDcgKzE1LDcgQEAKIHRyeToKICAgICB1bmljb2RlKCdmb28nLCAnZXVjLWpwJykKIGV4Y2VwdCBMb29rdXBFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZAorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CiAKIAogDApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5IGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5CmluZGV4IDIyYmJlNjYuLjQ5N2I2NmIgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfcmVuYW1lZC5weQorKysgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkKQEAgLTQxLDE3ICs0MSwxNyBAQAogU1BBQ0UgPSAnICcKIAogCi0MCisKIGRlZiBvcGVuZmlsZShmaWxlbmFtZSwgbW9kZT0ncicpOgogICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGxhbmRtYXJrKSwgJ2RhdGEnLCBmaWxlbmFtZSkKICAgICByZXR1cm4gb3BlbihwYXRoLCBtb2RlKQogCiAKLQwKKwogIyBCYXNlIHRlc3QgY2xhc3MKIGNsYXNzIFRlc3RFbWFpbEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBuZGlmZkFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgotICAgICAgICAiIiJMaWtlIGZhaWxVbmxlc3NFcXVhbCBleGNlcHQgdXNlIG5kaWZmIGZvciByZWFkYWJsZSBvdXRwdXQuIiIiCisgICAgICAgICIiIkxpa2UgYXNzZXJ0RXF1YWwgZXhjZXB0IHVzZSBuZGlmZiBmb3IgcmVhZGFibGUgb3V0cHV0LiIiIgogICAgICAgICBpZiBmaXJzdCAhPSBzZWNvbmQ6CiAgICAgICAgICAgICBzZmlyc3QgPSBzdHIoZmlyc3QpCiAgICAgICAgICAgICBzc2Vjb25kID0gc3RyKHNlY29uZCkKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgcmV0dXJuIG1zZwogCiAKLQwKKwogIyBUZXN0IHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgTWVzc2FnZSBjbGFzcydzIEFQSQogY2xhc3MgVGVzdE1lc3NhZ2VBUEkoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKQEAgLTE5NCw4ICsxOTQsMTIgQEAKICAgICAgICAgIyBTdWJwYXJ0IDMgaXMgYmFzZTY0CiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgyKS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCiAgICAgICAgICAgICdUaGlzIGlzIGEgQmFzZTY0IGVuY29kZWQgbWVzc2FnZS4nKQotICAgICAgICAjIFN1YnBhcnQgNCBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLgorICAgICAgICAjIFN1YnBhcnQgNCBpcyBiYXNlNjQgd2l0aCBhIHRyYWlsaW5nIG5ld2xpbmUsIHdoaWNoCisgICAgICAgICMgdXNlZCB0byBiZSBzdHJpcHBlZCAoaXNzdWUgNzE0MykuCiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgzKS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICdUaGlzIGlzIGEgQmFzZTY0IGVuY29kZWQgbWVzc2FnZS5cbicpCisgICAgICAgICMgU3VicGFydCA1IGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCg0KS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCiAgICAgICAgICAgICdUaGlzIGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X2RlY29kZWRfdXVfcGF5bG9hZChzZWxmKToKQEAgLTIyNywyNSArMjMxLDM0IEBACiAgICAgICAgIG1zZ1snRnJvbSddID0gJ01lJwogICAgICAgICBtc2dbJ3RvJ10gPSAnWW91JwogICAgICAgICAjIENoZWNrIGZvciBjYXNlIGluc2Vuc2l0aXZpdHkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCdmcm9tJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnRnJvbScgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ0ZST00nIGluIG1zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCd0bycgaW4gbXNnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ1RvJyBpbiBtc2cpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygnVE8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmcm9tJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRnJvbScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0ZST00nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0bycgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RvJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVE8nIGluIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgICAgICAjIEJBVyAzMC1NYXItMjAwOSBFdmlsIGJlIGhlcmUuICBTbywgdGhlIGdlbmVyYXRvciBpcyBicm9rZW4gd2l0aAorICAgICAgICAgICAgIyByZXNwZWN0IHRvIGxvbmcgbGluZSBicmVha2luZy4gIEl0J3MgYWxzbyBub3QgaWRlbXBvdGVudCB3aGVuIGEKKyAgICAgICAgICAgICMgaGVhZGVyIGZyb20gYSBwYXJzZWQgbWVzc2FnZSBpcyBjb250aW51ZWQgd2l0aCB0YWJzIHJhdGhlciB0aGFuCisgICAgICAgICAgICAjIHNwYWNlcy4gIEJlZm9yZSB3ZSBmaXhlZCBidWcgMTk3NCBpdCB3YXMgcmV2ZXJzZWRseSBicm9rZW4sCisgICAgICAgICAgICAjIGkuZS4gaGVhZGVycyB0aGF0IHdlcmUgY29udGludWVkIHdpdGggc3BhY2VzIGdvdCBjb250aW51ZWQgd2l0aAorICAgICAgICAgICAgIyB0YWJzLiAgRm9yIFB5dGhvbiAyLnggdGhlcmUncyByZWFsbHkgbm8gZ29vZCBmaXggYW5kIGluIFB5dGhvbgorICAgICAgICAgICAgIyAzLnggYWxsIHRoaXMgc3R1ZmYgaXMgcmUtd3JpdHRlbiB0byBiZSByaWdodChlcikuICBDaHJpcyBXaXRoZXJzCisgICAgICAgICAgICAjIGNvbnZpbmNlZCBtZSB0aGF0IHVzaW5nIHNwYWNlIGFzIHRoZSBkZWZhdWx0IGNvbnRpbnVhdGlvbgorICAgICAgICAgICAgIyBjaGFyYWN0ZXIgaXMgbGVzcyBiYWQgZm9yIG1vcmUgYXBwbGljYXRpb25zLgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKS5yZXBsYWNlKCdcdCcsICcgJykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXEodGV4dCwgbXNnLmFzX3N0cmluZygpKQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwodGV4dCwgbXNnLmFzX3N0cmluZygpKQogICAgICAgICBmdWxscmVwciA9IHN0cihtc2cpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5zdGFydHN3aXRoKCdGcm9tICcpKQogICAgICAgICBlcSh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW0oc2VsZik6CkBAIC0zMTYsMTAgKzMyOSwxMCBAQAogCiAgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygnSGVhZGVyOiBleGlzdHMnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ2hlYWRlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ0hlYWRlcicpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobXNnLmhhc19rZXkoJ0hFQURFUicpKQotICAgICAgICBzZWxmLmZhaWxJZihtc2cuaGFzX2tleSgnaGVhZGVyaScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ2hlYWRlcicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ0hlYWRlcicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmhhc19rZXkoJ0hFQURFUicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1zZy5oYXNfa2V5KCdoZWFkZXJpJykpCiAKICAgICBkZWYgdGVzdF9zZXRfcGFyYW0oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNDkxLDcgKzUwNCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgeCkKIAogCi0MCisKICMgVGVzdCB0aGUgZW1haWwuZW5jb2RlcnMgbW9kdWxlCiBjbGFzcyBUZXN0RW5jb2RlcnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2VuY29kZV9lbXB0eV9wYXlsb2FkKHNlbGYpOgpAQCAtNTE4LDcgKzUzMSw3IEBACiAgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAncXVvdGVkLXByaW50YWJsZScpCiAKIAotDAorCiAjIFRlc3QgbG9uZyBoZWFkZXIgd3JhcHBpbmcKIGNsYXNzIFRlc3RMb25nSGVhZGVycyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9zcGxpdF9sb25nX2NvbnRpbnVhdGlvbihzZWxmKToKQEAgLTUzNSw4ICs1NDgsOCBAQAogICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAogU3ViamVjdDogYnVnIGRlbW9uc3RyYXRpb24KLVx0MTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKLVx0bW9yZSB0ZXh0CisgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKKyBtb3JlIHRleHQKIAogdGVzdAogIiIiKQpAQCAtNjM2LDcgKzY0OSw3IEBACiBNSU1FLVZlcnNpb246IDEuMAogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAogWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdDogd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsKLVx0c3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiCisgc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiCiAKICcnJykKIApAQCAtNjUyLDcgKzY2NSw3IEBACiAgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCiBGcm9tOiB0ZXN0QGRvbS5haW4KIFJlZmVyZW5jZXM6IDwwQGRvbS5haW4+IDwxQGRvbS5haW4+IDwyQGRvbS5haW4+IDwzQGRvbS5haW4+IDw0QGRvbS5haW4+Ci1cdDw1QGRvbS5haW4+IDw2QGRvbS5haW4+IDw3QGRvbS5haW4+IDw4QGRvbS5haW4+IDw5QGRvbS5haW4+CisgPDVAZG9tLmFpbj4gPDZAZG9tLmFpbj4gPDdAZG9tLmFpbj4gPDhAZG9tLmFpbj4gPDlAZG9tLmFpbj4KIAogVGVzdCIiIikKIApAQCAtNzMwLDkgKzc0Myw5IEBACiAgICAgICAgIG1zZ1snVG8nXSA9IHRvCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoMCksICcnJ1wKIFRvOiAiU29tZW9uZSBUZXN0ICNBIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwKLVx0IlNvbWVvbmUgVGVzdCAjQiIgPHNvbWVvbmVAdW1pY2guZWR1PiwKLVx0IlNvbWVvbmUgVGVzdCAjQyIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAotXHQiU29tZW9uZSBUZXN0ICNEIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4KKyAiU29tZW9uZSBUZXN0ICNCIiA8c29tZW9uZUB1bWljaC5lZHU+LAorICJTb21lb25lIFRlc3QgI0MiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwKKyAiU29tZW9uZSBUZXN0ICNEIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4KIAogJycnKQogCkBAIC03NzAsMjcgKzc4MywyNyBAQAogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKICAgICAgICAgbXNnWydSZWNlaXZlZC0xJ10gPSBIZWFkZXIoaCwgY29udGludWF0aW9uX3dzPSdcdCcpCiAgICAgICAgIG1zZ1snUmVjZWl2ZWQtMiddID0gaAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCiBSZWNlaXZlZC0xOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkKIFx0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKIFx0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAogUmVjZWl2ZWQtMjogZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5Ci1cdGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7Ci1cdFdlZCwgMDUgTWFyIDIwMDMgMTg6MTA6MTggLTA3MDAKKyBocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOworIFdlZCwgMDUgTWFyIDIwMDMgMTg6MTA6MTggLTA3MDAKIAogIiIiKQogCiAgICAgZGVmIHRlc3Rfc3RyaW5nX2hlYWRlcmluc3RfZXEoc2VsZik6CiAgICAgICAgIGggPSAnPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQgQnJlbW5lclwncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKScKICAgICAgICAgbXNnID0gTWVzc2FnZSgpCi0gICAgICAgIG1zZ1snUmVjZWl2ZWQtMSddID0gSGVhZGVyKGgsIGhlYWRlcl9uYW1lPSdSZWNlaXZlZC0xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCi0gICAgICAgIG1zZ1snUmVjZWl2ZWQtMiddID0gaAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAotUmVjZWl2ZWQtMTogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkLTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIG1zZ1snUmVjZWl2ZWQnXSA9IGgKKyAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorUmVjZWl2ZWQ6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KIFx0KERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQotUmVjZWl2ZWQtMjogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgotXHQoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpCitSZWNlaXZlZDogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPgorIChEYXZpZCBCcmVtbmVyJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIikKIAogIiIiKQogCkBAIC04MDQsNyArODE3LDcgQEAKICAgICAgICAgbXNnWydGYWNlLTInXSA9IEhlYWRlcih0LCBoZWFkZXJfbmFtZT0nRmFjZS0yJykKICAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCiBGYWNlLTE6IGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQotXHRsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKKyBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKIEZhY2UtMjogaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBR0ZCTVZFVUFBQUFrSGlKZVJVSWNHQmk5CiAgbG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCiAKQEAgLTgxNCwxMSArODI3LDExIEBACiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG0gPSAnJydcCiBSZWNlaXZlZDogZnJvbSBzaWltYWdlLmNvbSAoWzE3Mi4yNS4xLjNdKSBieSB6aW1hLnNpbGljb25pbWFnZS5jb20gd2l0aCBNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsKLVx0V2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMCcnJworIFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAnJycKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICcnJ1wKIFJlY2VpdmVkOiBmcm9tIHNpaW1hZ2UuY29tIChbMTcyLjI1LjEuM10pIGJ5IHppbWEuc2lsaWNvbmltYWdlLmNvbSB3aXRoCi1cdE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwCisgTWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7IFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAKIAogJycnKQogCkBAIC04MzAsMTYgKzg0MywxNiBAQAogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKICAgICAgICAgbXNnWydMaXN0J10gPSBoCiAgICAgICAgIG1zZ1snTGlzdCddID0gSGVhZGVyKGgsIGhlYWRlcl9uYW1lPSdMaXN0JykKLSAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICIiIlwKIExpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCi1cdDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KKyA8bWFpbHRvOnNwYW1hc3Nhc3Npbi10YWxrLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0P3N1YmplY3Q9dW5zdWJzY3JpYmU+CiBMaXN0OiBMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAogIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KIAogIiIiKQogCiAKLQwKKwogIyBUZXN0IG1hbmdsaW5nIG9mICJGcm9tICIgbGluZXMgaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlCiBjbGFzcyBUZXN0RnJvbU1hbmdsaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC04NzMsNyArODg2LDcgQEAKICIiIikKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRUF1ZGlvIGNsYXNzCiBjbGFzcyBUZXN0TUlNRUF1ZGlvKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05MDMsNyArOTE2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2FkZF9oZWFkZXIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHNlbGYuX2F1LmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2F1ZGlvdGVzdC5hdScpCiAgICAgICAgIGVxKHNlbGYuX2F1Wydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCkBAIC05MjIsNyArOTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J2Zvb2JhcicpIGlzIG1pc3NpbmcpCiAKIAotDAorCiAjIFRlc3QgdGhlIGJhc2ljIE1JTUVJbWFnZSBjbGFzcwogY2xhc3MgVGVzdE1JTUVJbWFnZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtOTQ2LDcgKzk1OSw3IEBACiAKICAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBzZWxmLl9pbS5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdkaW5ndXNmaXNoLmdpZicpCiAgICAgICAgIGVxKHNlbGYuX2ltWydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCkBAIC05NjUsNyArOTc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J2Zvb2JhcicpIGlzIG1pc3NpbmcpCiAKIAotDAorCiAjIFRlc3QgdGhlIGJhc2ljIE1JTUVBcHBsaWNhdGlvbiBjbGFzcwogY2xhc3MgVGVzdE1JTUVBcHBsaWNhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaGVhZGVycyhzZWxmKToKQEAgLTk4Miw3ICs5OTUsNyBAQAogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlcykKIAogCi0MCisKICMgVGVzdCB0aGUgYmFzaWMgTUlNRVRleHQgY2xhc3MKIGNsYXNzIFRlc3RNSU1FVGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtOTkwLDcgKzEwMDMsNyBAQAogCiAgICAgZGVmIHRlc3RfdHlwZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIGVxKHNlbGYuX21zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKICAgICAgICAgZXEoc2VsZi5fbXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCAndXMtYXNjaWknKQogICAgICAgICBtaXNzaW5nID0gW10KQEAgLTEwMDAsNyArMTAxMyw3IEBACiAKICAgICBkZWYgdGVzdF9wYXlsb2FkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX21zZy5nZXRfcGF5bG9hZCgpLCAnaGVsbG8gdGhlcmUnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHNlbGYuX21zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLl9tc2cuaXNfbXVsdGlwYXJ0KCkpCiAKICAgICBkZWYgdGVzdF9jaGFyc2V0KHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTEwMDksNyArMTAyMiw3IEBACiAgICAgICAgIGVxKG1zZ1snY29udGVudC10eXBlJ10sICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSInKQogCiAKLQwKKwogIyBUZXN0IGNvbXBsaWNhdGVkIG11bHRpcGFydC8qIG1lc3NhZ2VzCiBjbGFzcyBUZXN0TXVsdGlwYXJ0KFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTEwNTUsNyArMTA2OCw3IEBACiAgICAgZGVmIHRlc3RfaGllcmFyY2h5KHNlbGYpOgogICAgICAgICAjIGNvbnZlbmllbmNlCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCiAgICAgICAgICMgdGVzdHMKICAgICAgICAgbSA9IHNlbGYuX21zZwpAQCAtMTM2OSw3ICsxMzgyLDcgQEAKIAogLS0gICAgWFhYWC0tCiAnJycpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaXNfbXVsdGlwYXJ0KCkpCiAgICAgICAgIGVxKG1zZy5nZXRfYm91bmRhcnkoKSwgJyAgICBYWFhYJykKICAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMikKIApAQCAtMTM4NSwxMCArMTM5OCwxMCBAQAogCiBZWE5rWmc9PQogLS09PT09PT09PT09PT09PT0wMDEyMzk0MTY0PT0tLSIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkuZ2V0X3BheWxvYWQoKSwgJ1lYTmtaZz09JykKIAogCi0MCisKICMgVGVzdCBzb21lIGJhZGx5IGZvcm1hdHRlZCBtZXNzYWdlcwogY2xhc3MgVGVzdE5vbkNvbmZvcm1hbnQoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfcGFyc2VfbWlzc2luZ19taW5vcl90eXBlKHNlbGYpOgpAQCAtMTM5OSw3ICsxNDEyLDcgQEAKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3N1YnR5cGUoKSwgJ3BsYWluJykKIAogICAgIGRlZiB0ZXN0X3NhbWVfYm91bmRhcnlfaW5uZXJfb3V0ZXIoc2VsZik6Ci0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTUudHh0JykKICAgICAgICAgIyBYWFggV2UgY2FuIHByb2JhYmx5IGV2ZW50dWFsbHkgZG8gYmV0dGVyCiAgICAgICAgIGlubmVyID0gbXNnLmdldF9wYXlsb2FkKDApCkBAIC0xNDA5LDcgKzE0MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKIAogICAgIGRlZiB0ZXN0X211bHRpcGFydF9ub19ib3VuZGFyeShzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yNS50eHQnKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQpAQCAtMTQ2Nyw3ICsxNDgwLDcgQEAKICIiIikKIAogICAgIGRlZiB0ZXN0X2x5aW5nX211bHRpcGFydChzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ180MS50eHQnKQogICAgICAgICB1bmxlc3MoaGFzYXR0cihtc2csICdkZWZlY3RzJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZy5kZWZlY3RzKSwgMikKQEAgLTE0ODcsNyArMTUwMCw3IEBACiAgICAgICAgICMgWypdIFRoaXMgbWVzc2FnZSBpcyBtaXNzaW5nIGl0cyBzdGFydCBib3VuZGFyeQogICAgICAgICBiYWQgPSBvdXRlci5nZXRfcGF5bG9hZCgxKS5nZXRfcGF5bG9hZCgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYWQuZGVmZWN0cyksIDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiYWQuZGVmZWN0c1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCkpCiAKICAgICBkZWYgdGVzdF9maXJzdF9saW5lX2lzX2NvbnRpbnVhdGlvbl9oZWFkZXIoc2VsZik6CkBAIC0xNDk3LDEyICsxNTEwLDEyIEBACiAgICAgICAgIGVxKG1zZy5rZXlzKCksIFtdKQogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ0xpbmUgMlxuTGluZSAzJykKICAgICAgICAgZXEobGVuKG1zZy5kZWZlY3RzKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnLmRlZmVjdHNbMF0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuRmlyc3RIZWFkZXJMaW5lSXNDb250aW51YXRpb25EZWZlY3QpKQogICAgICAgICBlcShtc2cuZGVmZWN0c1swXS5saW5lLCAnIExpbmUgMVxuJykKIAogCi0MCisKICMgVGVzdCBSRkMgMjA0NyBoZWFkZXIgZW5jb2RpbmcgYW5kIGRlY29kaW5nCiBjbGFzcyBUZXN0UkZDMjA0Nyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmZjMjA0N19tdWx0aWxpbmUoc2VsZik6CkBAIC0xNTQ5LDcgKzE1NjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdzYm9yZCcsIE5vbmUpXSkKIAogCi0MCisKICMgVGVzdCB0aGUgTUlNRU1lc3NhZ2UgY2xhc3MKIGNsYXNzIFRlc3RNSU1FTWVzc2FnZShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNTY0LDcgKzE1NzcsNyBAQAogCiAgICAgZGVmIHRlc3RfdmFsaWRfYXJndW1lbnQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIHN1YmplY3QgPSAnQSBzdWItbWVzc2FnZScKICAgICAgICAgbSA9IE1lc3NhZ2UoKQogICAgICAgICBtWydTdWJqZWN0J10gPSBzdWJqZWN0CkBAIC0xNjA4LDIwICsxNjIxLDIwIEBACiAKICAgICBkZWYgdGVzdF9wYXJzZV9tZXNzYWdlX3JmYzgyMihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTEudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKICAgICAgICAgcGF5bG9hZCA9IG1zZy5nZXRfcGF5bG9hZCgpCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCiAgICAgICAgIHN1Ym1zZyA9IHBheWxvYWRbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VibXNnLCBNZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VibXNnLCBNZXNzYWdlKSkKICAgICAgICAgZXEoc3VibXNnWydzdWJqZWN0J10sICdBbiBlbmNsb3NlZCBtZXNzYWdlJykKICAgICAgICAgZXEoc3VibXNnLmdldF9wYXlsb2FkKCksICdIZXJlIGlzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLlxuJykKIAogICAgIGRlZiB0ZXN0X2RzbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHVubGVzcyA9IHNlbGYuZmFpbFVubGVzcworICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBtc2cgMTYgaXMgYSBEZWxpdmVyeSBTdGF0dXMgTm90aWZpY2F0aW9uLCBzZWUgUkZDIDE4OTQKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTYudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ211bHRpcGFydC9yZXBvcnQnKQpAQCAtMTg1OSw3ICsxODcyLDcgQEAKICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDEpLCB0ZXh0MikKIAogCi0MCisKICMgQSBnZW5lcmFsIHRlc3Qgb2YgcGFyc2VyLT5tb2RlbC0+Z2VuZXJhdG9yIGlkZW1wb3RlbmN5LiAgSU9XLCByZWFkIGEgbWVzc2FnZQogIyBpbiwgcGFyc2UgaXQgaW50byBhIG1lc3NhZ2Ugb2JqZWN0IHRyZWUsIHRoZW4gd2l0aG91dCB0b3VjaGluZyB0aGUgdHJlZSwKICMgcmVnZW5lcmF0ZSB0aGUgcGxhaW4gdGV4dC4gIFRoZSBvcmlnaW5hbCB0ZXh0IGFuZCB0aGUgdHJhbnNmb3JtZWQgdGV4dApAQCAtMTg4Myw3ICsxODk2LDcgQEAKICAgICAgICAgZXEodGV4dCwgcy5nZXR2YWx1ZSgpKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfdGV4dF9tZXNzYWdlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCkBAIC0xODk1LDcgKzE5MDgsNyBAQAogICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX3VudHlwZWRfbWVzc2FnZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQogICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBOb25lKQpAQCAtMTk2Nyw4ICsxOTgwLDggQEAKICAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCiAKICAgICBkZWYgdGVzdF9jb250ZW50X3R5cGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgIyBHZXQgYSBtZXNzYWdlIG9iamVjdCBhbmQgcmVzZXQgdGhlIHNlZWsgcG9pbnRlciBmb3Igb3RoZXIgdGVzdHMKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDUudHh0JykKICAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ211bHRpcGFydC9yZXBvcnQnKQpAQCAtMTk5MCw3ICsyMDAzLDcgQEAKICAgICAgICAgZXEobXNnMi5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCiAgICAgICAgIG1zZzMgPSBtc2cuZ2V0X3BheWxvYWQoMikKICAgICAgICAgZXEobXNnMy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG1zZzMsIE1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2czLCBNZXNzYWdlKSkKICAgICAgICAgcGF5bG9hZCA9IG1zZzMuZ2V0X3BheWxvYWQoKQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KSkKICAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxKQpAQCAtMTk5OSw4ICsyMDEyLDggQEAKICAgICAgICAgZXEobXNnNC5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCiAKICAgICBkZWYgdGVzdF9wYXJzZXIoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKICAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDYudHh0JykKICAgICAgICAgIyBDaGVjayBzb21lIG9mIHRoZSBvdXRlciBoZWFkZXJzCiAgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCkBAIC0yMDEwLDEzICsyMDIzLDEzIEBACiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHBheWxvYWQsIGxpc3QpKQogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCiAgICAgICAgIG1zZzEgPSBwYXlsb2FkWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKG1zZzEsIE1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLCBNZXNzYWdlKSkKICAgICAgICAgZXEobXNnMS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobXNnMS5nZXRfcGF5bG9hZCgpLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLmdldF9wYXlsb2FkKCksIHN0cikpCiAgICAgICAgIGVxKG1zZzEuZ2V0X3BheWxvYWQoKSwgJ1xuJykKIAogCi0MCisKICMgVGVzdCB2YXJpb3VzIG90aGVyIGJpdHMgb2YgdGhlIHBhY2thZ2UncyBmdW5jdGlvbmFsaXR5CiBjbGFzcyBUZXN0TWlzY2VsbGFuZW91cyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fc3RyaW5nKHNlbGYpOgpAQCAtMjA0OSw3ICsyMDYyLDcgQEAKICAgICAgICAgICAgIGZwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmdfd2l0aF9jbGFzcyhzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQpAQCAtMjA3Miw3ICsyMDg1LDcgQEAKICAgICAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHN1YnBhcnQsIE15TWVzc2FnZSkpCiAKICAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fZmlsZV93aXRoX2NsYXNzKHNlbGYpOgotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgICMgQ3JlYXRlIGEgc3ViY2xhc3MKICAgICAgICAgY2xhc3MgTXlNZXNzYWdlKE1lc3NhZ2UpOgogICAgICAgICAgICAgcGFzcwpAQCAtMjIxNSw3ICsyMjI4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2NoYXJzZXRfcmljaGNvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgbmUgPSBzZWxmLmZhaWxJZkVxdWFsCisgICAgICAgIG5lID0gc2VsZi5hc3NlcnROb3RFcXVhbAogICAgICAgICBjc2V0MSA9IENoYXJzZXQoKQogICAgICAgICBjc2V0MiA9IENoYXJzZXQoKQogICAgICAgICBlcShjc2V0MSwgJ3VzLWFzY2lpJykKQEAgLTIzNDEsNyArMjM1NCw3IEBACiAiIiIpCiAKIAotDAorCiAjIFRlc3QgdGhlIGl0ZXJhdG9yL2dlbmVyYXRvcnMKIGNsYXNzIFRlc3RJdGVyYXRvcnMoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3RfYm9keV9saW5lX2l0ZXJhdG9yKHNlbGYpOgpAQCAtMjQwMSw3ICsyNDE0LDcgQEAKICIiIikKIAogCi0MCisKIGNsYXNzIFRlc3RQYXJzZXJzKFRlc3RFbWFpbEJhc2UpOgogICAgIGRlZiB0ZXN0X2hlYWRlcl9wYXJzZXIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjQxNCw4ICsyNDI3LDggQEAKICAgICAgICAgZXEobXNnWydmcm9tJ10sICdwcHAtcmVxdWVzdEB6enoub3JnJykKICAgICAgICAgZXEobXNnWyd0byddLCAncHBwQHp6ei5vcmcnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L21peGVkJykKLSAgICAgICAgc2VsZi5mYWlsSWYobXNnLmlzX211bHRpcGFydCgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQogCiAgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZV9jb250aW51YXRpb24oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjU0Niw3ICsyNTU5LDcgQEAKICAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKCksICdib2R5JykKIAogCi0MCisKIGNsYXNzIFRlc3RCYXNlNjQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNjE4LDcgKzI2MzEsNyBAQAogID0/aXNvLTg4NTktMT9iP2VIaDRlQ0I0ZUhoNElIaDRlSGdnPz0iIiIpCiAKIAotDAorCiBjbGFzcyBUZXN0UXVvcHJpKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaGxpdCA9IFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArIFwKQEAgLTI2MzQsMTUgKzI2NDcsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2hlYWRlcl9xdW9wcmlfY2hlY2soc2VsZik6CiAgICAgICAgIGZvciBjIGluIHNlbGYuaGxpdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHF1b3ByaW1pbWUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocXVvcHJpbWltZS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQogICAgICAgICBmb3IgYyBpbiBzZWxmLmhub246Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocXVvcHJpbWltZS5oZWFkZXJfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaW1pbWUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKIAogICAgIGRlZiB0ZXN0X2JvZHlfcXVvcHJpX2NoZWNrKHNlbGYpOgogICAgICAgICBmb3IgYyBpbiBzZWxmLmJsaXQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQogICAgICAgICBmb3IgYyBpbiBzZWxmLmJub246Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MocXVvcHJpbWltZS5ib2R5X3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQogCiAgICAgZGVmIHRlc3RfaGVhZGVyX3F1b3ByaV9sZW4oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjcyOCw3ICsyNzQxLDcgQEAKIHR3byBsaW5lIiIiKQogCiAKLQwKKwogIyBUZXN0IHRoZSBDaGFyc2V0IGNsYXNzCiBjbGFzcyBUZXN0Q2hhcnNldCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMjc4Niw3ICsyNzk5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLkNoYXJzZXRFcnJvciwgQ2hhcnNldCwgJ2FzY1x4ZmZpaScpCiAKIAotDAorCiAjIFRlc3QgbXVsdGlsaW5ndWFsIE1JTUUgaGVhZGVycy4KIGNsYXNzIFRlc3RIZWFkZXIoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgpAQCAtMjgxMSw3ICsyODI0LDcgQEAKICAgICAgICAgaCA9IEhlYWRlcigiSSBhbSB0aGUgdmVyeSBtb2RlbCBvZiBhIG1vZGVybiBNYWpvci1HZW5lcmFsOyBJJ3ZlIGluZm9ybWF0aW9uIHZlZ2V0YWJsZSwgYW5pbWFsLCBhbmQgbWluZXJhbDsgSSBrbm93IHRoZSBraW5ncyBvZiBFbmdsYW5kLCBhbmQgSSBxdW90ZSB0aGUgZmlnaHRzIGhpc3RvcmljYWwgZnJvbSBNYXJhdGhvbiB0byBXYXRlcmxvbywgaW4gb3JkZXIgY2F0ZWdvcmljYWw7IEknbSB2ZXJ5IHdlbGwgYWNxdWFpbnRlZCwgdG9vLCB3aXRoIG1hdHRlcnMgbWF0aGVtYXRpY2FsOyBJIHVuZGVyc3RhbmQgZXF1YXRpb25zLCBib3RoIHRoZSBzaW1wbGUgYW5kIHF1YWRyYXRpY2FsOyBhYm91dCBiaW5vbWlhbCB0aGVvcmVtIEknbSB0ZWVtaW5nIHdpdGggYSBsb3QgbycgbmV3cywgd2l0aCBtYW55IGNoZWVyZnVsIGZhY3RzIGFib3V0IHRoZSBzcXVhcmUgb2YgdGhlIGh5cG90ZW51c2UuIiwKICAgICAgICAgICAgICAgICAgICBtYXhsaW5lbGVuPTc2KQogICAgICAgICBmb3IgbCBpbiBoLmVuY29kZShzcGxpdGNoYXJzPScgJykuc3BsaXQoJ1xuICcpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxlbihsKSA8PSA3NikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obCkgPD0gNzYpCiAKICAgICBkZWYgdGVzdF9tdWx0aWxpbmd1YWwoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCkBAIC0yOTQ1LDExICsyOTU4LDExIEBACiAKICAgICBkZWYgdGVzdF9icm9rZW5fYmFzZTY0X2hlYWRlcihzZWxmKToKICAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKLSAgICAgICAgcyA9ICdTdWJqZWN0OiA9P0VVQy1LUj9CP0NTaXhwTER0S1NDLzdMaXV2c2F4NGlDNnVMbXdNY2lqSUtIYUlMelN3ZC9IMFNDOCtMQ2p3THNndjdXLytNajNJUT89JworICAgICAgICBzID0gJ1N1YmplY3Q6ID0/RVVDLUtSP0I/Q1NpeHBMRHRLU0MvN0xpdXZzYXg0aUM2dUxtd01jaWpJS0hhSUx6U3dkL0gwU0M4K0xDandMc2d2N1cvK01qM0kgPz0nCiAgICAgICAgIHJhaXNlcyhlcnJvcnMuSGVhZGVyUGFyc2VFcnJvciwgZGVjb2RlX2hlYWRlciwgcykKIAogCi0MCisKICMgVGVzdCBSRkMgMjIzMSBoZWFkZXIgcGFyYW1ldGVycyAoZW4vZGUpY29kaW5nCiBjbGFzcyBUZXN0UkZDMjIzMShUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9nZXRfcGFyYW0oc2VsZik6CkBAIC0yOTc0LDExICsyOTg3LDExIEBACiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIG1zZy5zZXRfcGFyYW0oJ3RpdGxlJywgJ1RoaXMgaXMgZXZlbiBtb3JlICoqKmZ1bioqKiBpc25cJ3QgaXQhJywKICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PSd1cy1hc2NpaScsIGxhbmd1YWdlPSdlbicpCi0gICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCiBSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgogRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZwogUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQotXHRpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCisgaWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQogTUlNRS1WZXJzaW9uOiAxLjAKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKIE1lc3NhZ2UtSUQ6IDwxNTA5MC42MTMwNC4xMTA5MjkuNDU2ODRAYWFhLnp6ei5vcmc+CkBAIC0yOTg3LDcgKzMwMDAsNyBAQAogU3ViamVjdDogVGhpcyBpcyBhIHRlc3QgbWVzc2FnZQogRGF0ZTogRnJpLCA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWk7Ci1cdHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCisgdGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKIAogCiBIaSwKQEAgLTMwMDgsNyArMzAyMSw3IEBACiBSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgogRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZwogUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQotXHRpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCisgaWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQogTUlNRS1WZXJzaW9uOiAxLjAKIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKIE1lc3NhZ2UtSUQ6IDwxNTA5MC42MTMwNC4xMTA5MjkuNDU2ODRAYWFhLnp6ei5vcmc+CkBAIC0zMDE3LDcgKzMwMzAsNyBAQAogU3ViamVjdDogVGhpcyBpcyBhIHRlc3QgbWVzc2FnZQogRGF0ZTogRnJpLCA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwCiBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIjsKLVx0dGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKKyB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgogCiAKIEhpLApAQCAtMzA0MSw3ICszMDU0LDcgQEAKICcnJwogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnTkFNRScpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBwYXJhbSwKICAgICAgICAgICAgICdmaWxlX19fX0NfX0RPQ1VNRU5UU18yMEFORF8yMFNFVFRJTkdTX0ZBQklFTl9MT0NBTF8yMFNFVFRJTkdTX1RFTVBfbnNtYWlsLmh0bScpCkBAIC0zMTk0LDcgKzMyMDcsNyBAQAogIiIiCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKICAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UocGFyYW0sIHR1cGxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbSwgIkZyYW5rJ3MgRG9jdW1lbnQiKQogCiAgICAgZGVmIHRlc3RfcmZjMjIzMV90aWNrX2F0dGFja19leHRlbmRlZChzZWxmKToKQEAgLTMyMTgsNyArMzIzMSw3IEBACiAiIiIKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQogICAgICAgICBwYXJhbSA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQotICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtLCAidXMtYXNjaWknZW4tdXMnRnJhbmsncyBEb2N1bWVudCIpCiAKICAgICBkZWYgdGVzdF9yZmMyMjMxX25vX2V4dGVuZGVkX3ZhbHVlcyhzZWxmKToKQEAgLTMyNjEsNyArMzI3NCw3IEBACiAgICAgICAgIGVxKHMsICdNeSBEb2N1bWVudCBGb3IgWW91JykKIAogCi0MCisKIGRlZiBfdGVzdGNsYXNzZXMoKToKICAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KICAgICByZXR1cm4gW2dldGF0dHIobW9kLCBuYW1lKSBmb3IgbmFtZSBpbiBkaXIobW9kKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1Rlc3QnKV0KQEAgLTMyNzksNiArMzI5Miw2IEBACiAgICAgICAgIHJ1bl91bml0dGVzdCh0ZXN0Y2xhc3MpCiAKIAotDAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC91dGlscy5weSBiL0xpYi9lbWFpbC91dGlscy5weQppbmRleCBiOWE3NjQyLi42ZDIyY2E3IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdXRpbHMucHkKKysrIGIvTGliL2VtYWlsL3V0aWxzLnB5CkBAIC02MCwxNCArNjAsMTUgQEAKIAogCiBkZWYgX2JkZWNvZGUocyk6Ci0gICAgIyBXZSBjYW4ndCBxdWl0ZSB1c2UgYmFzZTY0LmVuY29kZXN0cmluZygpIHNpbmNlIGl0IHRhY2tzIG9uIGEgImNvdXJ0ZXN5Ci0gICAgIyBuZXdsaW5lIi4gIEJsZWNoIQorICAgICIiIkRlY29kZXMgYSBiYXNlNjQgc3RyaW5nLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGJhc2U2NC5kZWNvZGVzdHJpbmcgYW5kIGl0J3MgcmV0YWluZWQgb25seQorICAgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBJdCB1c2VkIHRvIHJlbW92ZSB0aGUgbGFzdCBcbiBvZiB0aGUgZGVjb2RlZAorICAgIHN0cmluZywgaWYgaXQgaGFkIGFueSAoc2VlIGlzc3VlIDcxNDMpLgorICAgICIiIgogICAgIGlmIG5vdCBzOgogICAgICAgICByZXR1cm4gcwotICAgIHZhbHVlID0gYmFzZTY0LmRlY29kZXN0cmluZyhzKQotICAgIGlmIG5vdCBzLmVuZHN3aXRoKCdcbicpIGFuZCB2YWx1ZS5lbmRzd2l0aCgnXG4nKToKLSAgICAgICAgcmV0dXJuIHZhbHVlWzotMV0KLSAgICByZXR1cm4gdmFsdWUKKyAgICByZXR1cm4gYmFzZTY0LmRlY29kZXN0cmluZyhzKQogCiAKIAwKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvX19pbml0X18ucHkgYi9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5CmluZGV4IGFlYTdjNWUuLmI4NWNhODIgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvX19pbml0X18ucHkKKysrIGIvTGliL2VuY29kaW5ncy9fX2luaXRfXy5weQpAQCAtMTIzLDEyICsxMjMsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIENvZGVjUmVnaXN0cnlFcnJvcixcCiAgICAgICAgICAgICAgICAgICdtb2R1bGUgIiVzIiAoJXMpIGZhaWxlZCB0byByZWdpc3RlcicgJSBcCiAgICAgICAgICAgICAgICAgICAobW9kLl9fbmFtZV9fLCBtb2QuX19maWxlX18pCi0gICAgICAgIGlmIG5vdCBjYWxsYWJsZShlbnRyeVswXSkgb3IgXAotICAgICAgICAgICBub3QgY2FsbGFibGUoZW50cnlbMV0pIG9yIFwKLSAgICAgICAgICAgKGVudHJ5WzJdIGlzIG5vdCBOb25lIGFuZCBub3QgY2FsbGFibGUoZW50cnlbMl0pKSBvciBcCi0gICAgICAgICAgIChlbnRyeVszXSBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKGVudHJ5WzNdKSkgb3IgXAotICAgICAgICAgICAobGVuKGVudHJ5KSA+IDQgYW5kIGVudHJ5WzRdIGlzIG5vdCBOb25lIGFuZCBub3QgY2FsbGFibGUoZW50cnlbNF0pKSBvciBcCi0gICAgICAgICAgIChsZW4oZW50cnkpID4gNSBhbmQgZW50cnlbNV0gaXMgbm90IE5vbmUgYW5kIG5vdCBjYWxsYWJsZShlbnRyeVs1XSkpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihlbnRyeVswXSwgJ19fY2FsbF9fJykgb3IgXAorICAgICAgICAgICBub3QgaGFzYXR0cihlbnRyeVsxXSwgJ19fY2FsbF9fJykgb3IgXAorICAgICAgICAgICAoZW50cnlbMl0gaXMgbm90IE5vbmUgYW5kIG5vdCBoYXNhdHRyKGVudHJ5WzJdLCAnX19jYWxsX18nKSkgb3IgXAorICAgICAgICAgICAoZW50cnlbM10gaXMgbm90IE5vbmUgYW5kIG5vdCBoYXNhdHRyKGVudHJ5WzNdLCAnX19jYWxsX18nKSkgb3IgXAorICAgICAgICAgICAobGVuKGVudHJ5KSA+IDQgYW5kIGVudHJ5WzRdIGlzIG5vdCBOb25lIGFuZCBub3QgaGFzYXR0cihlbnRyeVs0XSwgJ19fY2FsbF9fJykpIG9yIFwKKyAgICAgICAgICAgKGxlbihlbnRyeSkgPiA1IGFuZCBlbnRyeVs1XSBpcyBub3QgTm9uZSBhbmQgbm90IGhhc2F0dHIoZW50cnlbNV0sICdfX2NhbGxfXycpKToKICAgICAgICAgICAgIHJhaXNlIENvZGVjUmVnaXN0cnlFcnJvcixcCiAgICAgICAgICAgICAgICAgJ2luY29tcGF0aWJsZSBjb2RlY3MgaW4gbW9kdWxlICIlcyIgKCVzKScgJSBcCiAgICAgICAgICAgICAgICAgKG1vZC5fX25hbWVfXywgbW9kLl9fZmlsZV9fKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHBhc3MKICAgICBlbHNlOgogICAgICAgICBmb3IgYWxpYXMgaW4gY29kZWNhbGlhc2VzOgotICAgICAgICAgICAgaWYgbm90IF9hbGlhc2VzLmhhc19rZXkoYWxpYXMpOgorICAgICAgICAgICAgaWYgYWxpYXMgbm90IGluIF9hbGlhc2VzOgogICAgICAgICAgICAgICAgIF9hbGlhc2VzW2FsaWFzXSA9IG1vZG5hbWUKIAogICAgICMgUmV0dXJuIHRoZSByZWdpc3RyeSBlbnRyeQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5IGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CmluZGV4IGM2ZjVhZWIuLmE1NGNmNzcgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKQEAgLTE0Niw2ICsxNDYsMTEgQEAKICAgICAnY3NpYm04NTcnICAgICAgICAgICA6ICdjcDg1NycsCiAgICAgJ2libTg1NycgICAgICAgICAgICAgOiAnY3A4NTcnLAogCisgICAgIyBjcDg1OCBjb2RlYworICAgICc4NTgnICAgICAgICAgICAgICAgIDogJ2NwODU4JywKKyAgICAnY3NpYm04NTgnICAgICAgICAgICA6ICdjcDg1OCcsCisgICAgJ2libTg1OCcgICAgICAgICAgICAgOiAnY3A4NTgnLAorCiAgICAgIyBjcDg2MCBjb2RlYwogICAgICc4NjAnICAgICAgICAgICAgICAgIDogJ2NwODYwJywKICAgICAnY3NpYm04NjAnICAgICAgICAgICA6ICdjcDg2MCcsCkBAIC00NDIsNyArNDQ3LDcgQEAKICAgICAnY3NwdGNwMTU0JyAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAncHQxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAnY3AxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKLSAgICAnY3lyaWxsaWMtYXNpYW4nICAgICA6ICdwdGNwMTU0JywKKyAgICAnY3lyaWxsaWNfYXNpYW4nICAgICA6ICdwdGNwMTU0JywKIAogICAgICMgcXVvcHJpX2NvZGVjIGNvZGVjCiAgICAgJ3F1b3ByaScgICAgICAgICAgICAgOiAncXVvcHJpX2NvZGVjJywKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3A3MjAucHkgYi9MaWIvZW5jb2RpbmdzL2NwNzIwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTZkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwNzIwLnB5CkBAIC0wLDAgKzEsMzA5IEBACisiIiJQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgY3A3MjAgZ2VuZXJhdGVkIG9uIFdpbmRvd3M6CitWaXN0YSA2LjAuNjAwMiBTUDIgTXVsdGlwcm9jZXNzb3IgRnJlZSB3aXRoIHRoZSBjb21tYW5kOgorICBweXRob24gVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weSA3MjAKKyIiIiMiCisKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX3RhYmxlKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwNzIwJywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICB1J1x4MDAnICAgICAjICAweDAwIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDAxJyAgICAgIyAgMHgwMSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwMicgICAgICMgIDB4MDIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MDMnICAgICAjICAweDAzIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDA0JyAgICAgIyAgMHgwNCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwNScgICAgICMgIDB4MDUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MDYnICAgICAjICAweDA2IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDA3JyAgICAgIyAgMHgwNyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwOCcgICAgICMgIDB4MDggLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x0JyAgICAgICAjICAweDA5IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdcbicgICAgICAgIyAgMHgwQSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwYicgICAgICMgIDB4MEIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MGMnICAgICAjICAweDBDIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdccicgICAgICAgIyAgMHgwRCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgwZScgICAgICMgIDB4MEUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MGYnICAgICAjICAweDBGIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDEwJyAgICAgIyAgMHgxMCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxMScgICAgICMgIDB4MTEgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTInICAgICAjICAweDEyIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDEzJyAgICAgIyAgMHgxMyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxNCcgICAgICMgIDB4MTQgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTUnICAgICAjICAweDE1IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDE2JyAgICAgIyAgMHgxNiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxNycgICAgICMgIDB4MTcgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MTgnICAgICAjICAweDE4IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDE5JyAgICAgIyAgMHgxOSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxYScgICAgICMgIDB4MUEgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MWInICAgICAjICAweDFCIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDFjJyAgICAgIyAgMHgxQyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHgxZCcgICAgICMgIDB4MUQgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICB1J1x4MWUnICAgICAjICAweDFFIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgdSdceDFmJyAgICAgIyAgMHgxRiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnICcgICAgICAgICMgIDB4MjAgLT4gU1BBQ0UKKyAgICB1JyEnICAgICAgICAjICAweDIxIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICB1JyInICAgICAgICAjICAweDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgdScjJyAgICAgICAgIyAgMHgyMyAtPiBOVU1CRVIgU0lHTgorICAgIHUnJCcgICAgICAgICMgIDB4MjQgLT4gRE9MTEFSIFNJR04KKyAgICB1JyUnICAgICAgICAjICAweDI1IC0+IFBFUkNFTlQgU0lHTgorICAgIHUnJicgICAgICAgICMgIDB4MjYgLT4gQU1QRVJTQU5ECisgICAgdSInIiAgICAgICAgIyAgMHgyNyAtPiBBUE9TVFJPUEhFCisgICAgdScoJyAgICAgICAgIyAgMHgyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgdScpJyAgICAgICAgIyAgMHgyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgIHUnKicgICAgICAgICMgIDB4MkEgLT4gQVNURVJJU0sKKyAgICB1JysnICAgICAgICAjICAweDJCIC0+IFBMVVMgU0lHTgorICAgIHUnLCcgICAgICAgICMgIDB4MkMgLT4gQ09NTUEKKyAgICB1Jy0nICAgICAgICAjICAweDJEIC0+IEhZUEhFTi1NSU5VUworICAgIHUnLicgICAgICAgICMgIDB4MkUgLT4gRlVMTCBTVE9QCisgICAgdScvJyAgICAgICAgIyAgMHgyRiAtPiBTT0xJRFVTCisgICAgdScwJyAgICAgICAgIyAgMHgzMCAtPiBESUdJVCBaRVJPCisgICAgdScxJyAgICAgICAgIyAgMHgzMSAtPiBESUdJVCBPTkUKKyAgICB1JzInICAgICAgICAjICAweDMyIC0+IERJR0lUIFRXTworICAgIHUnMycgICAgICAgICMgIDB4MzMgLT4gRElHSVQgVEhSRUUKKyAgICB1JzQnICAgICAgICAjICAweDM0IC0+IERJR0lUIEZPVVIKKyAgICB1JzUnICAgICAgICAjICAweDM1IC0+IERJR0lUIEZJVkUKKyAgICB1JzYnICAgICAgICAjICAweDM2IC0+IERJR0lUIFNJWAorICAgIHUnNycgICAgICAgICMgIDB4MzcgLT4gRElHSVQgU0VWRU4KKyAgICB1JzgnICAgICAgICAjICAweDM4IC0+IERJR0lUIEVJR0hUCisgICAgdSc5JyAgICAgICAgIyAgMHgzOSAtPiBESUdJVCBOSU5FCisgICAgdSc6JyAgICAgICAgIyAgMHgzQSAtPiBDT0xPTgorICAgIHUnOycgICAgICAgICMgIDB4M0IgLT4gU0VNSUNPTE9OCisgICAgdSc8JyAgICAgICAgIyAgMHgzQyAtPiBMRVNTLVRIQU4gU0lHTgorICAgIHUnPScgICAgICAgICMgIDB4M0QgLT4gRVFVQUxTIFNJR04KKyAgICB1Jz4nICAgICAgICAjICAweDNFIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgdSc/JyAgICAgICAgIyAgMHgzRiAtPiBRVUVTVElPTiBNQVJLCisgICAgdSdAJyAgICAgICAgIyAgMHg0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgdSdBJyAgICAgICAgIyAgMHg0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgdSdCJyAgICAgICAgIyAgMHg0MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgdSdDJyAgICAgICAgIyAgMHg0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgdSdEJyAgICAgICAgIyAgMHg0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgdSdFJyAgICAgICAgIyAgMHg0NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgdSdGJyAgICAgICAgIyAgMHg0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgdSdHJyAgICAgICAgIyAgMHg0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgdSdIJyAgICAgICAgIyAgMHg0OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgdSdJJyAgICAgICAgIyAgMHg0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgdSdKJyAgICAgICAgIyAgMHg0QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgdSdLJyAgICAgICAgIyAgMHg0QiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgdSdMJyAgICAgICAgIyAgMHg0QyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgdSdNJyAgICAgICAgIyAgMHg0RCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgdSdOJyAgICAgICAgIyAgMHg0RSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgdSdPJyAgICAgICAgIyAgMHg0RiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgdSdQJyAgICAgICAgIyAgMHg1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgdSdRJyAgICAgICAgIyAgMHg1MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgdSdSJyAgICAgICAgIyAgMHg1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgdSdTJyAgICAgICAgIyAgMHg1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgdSdUJyAgICAgICAgIyAgMHg1NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgdSdVJyAgICAgICAgIyAgMHg1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgdSdWJyAgICAgICAgIyAgMHg1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgdSdXJyAgICAgICAgIyAgMHg1NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgdSdYJyAgICAgICAgIyAgMHg1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgdSdZJyAgICAgICAgIyAgMHg1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgdSdaJyAgICAgICAgIyAgMHg1QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgdSdbJyAgICAgICAgIyAgMHg1QiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgdSdcXCcgICAgICAgIyAgMHg1QyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICB1J10nICAgICAgICAjICAweDVEIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgdSdeJyAgICAgICAgIyAgMHg1RSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIHUnXycgICAgICAgICMgIDB4NUYgLT4gTE9XIExJTkUKKyAgICB1J2AnICAgICAgICAjICAweDYwIC0+IEdSQVZFIEFDQ0VOVAorICAgIHUnYScgICAgICAgICMgIDB4NjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICB1J2InICAgICAgICAjICAweDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgdSdjJyAgICAgICAgIyAgMHg2MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgIHUnZCcgICAgICAgICMgIDB4NjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICB1J2UnICAgICAgICAjICAweDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgdSdmJyAgICAgICAgIyAgMHg2NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgIHUnZycgICAgICAgICMgIDB4NjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICB1J2gnICAgICAgICAjICAweDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgdSdpJyAgICAgICAgIyAgMHg2OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgIHUnaicgICAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICB1J2snICAgICAgICAjICAweDZCIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgdSdsJyAgICAgICAgIyAgMHg2QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgIHUnbScgICAgICAgICMgIDB4NkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICB1J24nICAgICAgICAjICAweDZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgdSdvJyAgICAgICAgIyAgMHg2RiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgIHUncCcgICAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICB1J3EnICAgICAgICAjICAweDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgdSdyJyAgICAgICAgIyAgMHg3MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgIHUncycgICAgICAgICMgIDB4NzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICB1J3QnICAgICAgICAjICAweDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgdSd1JyAgICAgICAgIyAgMHg3NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgIHUndicgICAgICAgICMgIDB4NzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICB1J3cnICAgICAgICAjICAweDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgdSd4JyAgICAgICAgIyAgMHg3OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgIHUneScgICAgICAgICMgIDB4NzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICB1J3onICAgICAgICAjICAweDdBIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgdSd7JyAgICAgICAgIyAgMHg3QiAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICB1J3wnICAgICAgICAjICAweDdDIC0+IFZFUlRJQ0FMIExJTkUKKyAgICB1J30nICAgICAgICAjICAweDdEIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICB1J34nICAgICAgICAjICAweDdFIC0+IFRJTERFCisgICAgdSdceDdmJyAgICAgIyAgMHg3RiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgIHUnXHg4MCcKKyAgICB1J1x4ODEnCisgICAgdSdceGU5JyAgICAgIyAgMHg4MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgdSdceGUyJyAgICAgIyAgMHg4MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ODQnCisgICAgdSdceGUwJyAgICAgIyAgMHg4NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgdSdceDg2JworICAgIHUnXHhlNycgICAgICMgIDB4ODcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgdSdceGVhJyAgICAgIyAgMHg4OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZWInICAgICAjICAweDg5IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgdSdceGU4JyAgICAgIyAgMHg4QSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgdSdceGVmJyAgICAgIyAgMHg4QiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIHUnXHhlZScgICAgICMgIDB4OEMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceDhkJworICAgIHUnXHg4ZScKKyAgICB1J1x4OGYnCisgICAgdSdceDkwJworICAgIHUnXHUwNjUxJyAgICMgIDB4OTEgLT4gQVJBQklDIFNIQUREQQorICAgIHUnXHUwNjUyJyAgICMgIDB4OTIgLT4gQVJBQklDIFNVS1VOCisgICAgdSdceGY0JyAgICAgIyAgMHg5MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4YTQnICAgICAjICAweDk0IC0+IENVUlJFTkNZIFNJR04KKyAgICB1J1x1MDY0MCcgICAjICAweDk1IC0+IEFSQUJJQyBUQVRXRUVMCisgICAgdSdceGZiJyAgICAgIyAgMHg5NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZjknICAgICAjICAweDk3IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICB1J1x1MDYyMScgICAjICAweDk4IC0+IEFSQUJJQyBMRVRURVIgSEFNWkEKKyAgICB1J1x1MDYyMicgICAjICAweDk5IC0+IEFSQUJJQyBMRVRURVIgQUxFRiBXSVRIIE1BRERBIEFCT1ZFCisgICAgdSdcdTA2MjMnICAgIyAgMHg5QSAtPiBBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBIQU1aQSBBQk9WRQorICAgIHUnXHUwNjI0JyAgICMgIDB4OUIgLT4gQVJBQklDIExFVFRFUiBXQVcgV0lUSCBIQU1aQSBBQk9WRQorICAgIHUnXHhhMycgICAgICMgIDB4OUMgLT4gUE9VTkQgU0lHTgorICAgIHUnXHUwNjI1JyAgICMgIDB4OUQgLT4gQVJBQklDIExFVFRFUiBBTEVGIFdJVEggSEFNWkEgQkVMT1cKKyAgICB1J1x1MDYyNicgICAjICAweDlFIC0+IEFSQUJJQyBMRVRURVIgWUVIIFdJVEggSEFNWkEgQUJPVkUKKyAgICB1J1x1MDYyNycgICAjICAweDlGIC0+IEFSQUJJQyBMRVRURVIgQUxFRgorICAgIHUnXHUwNjI4JyAgICMgIDB4QTAgLT4gQVJBQklDIExFVFRFUiBCRUgKKyAgICB1J1x1MDYyOScgICAjICAweEExIC0+IEFSQUJJQyBMRVRURVIgVEVIIE1BUkJVVEEKKyAgICB1J1x1MDYyYScgICAjICAweEEyIC0+IEFSQUJJQyBMRVRURVIgVEVICisgICAgdSdcdTA2MmInICAgIyAgMHhBMyAtPiBBUkFCSUMgTEVUVEVSIFRIRUgKKyAgICB1J1x1MDYyYycgICAjICAweEE0IC0+IEFSQUJJQyBMRVRURVIgSkVFTQorICAgIHUnXHUwNjJkJyAgICMgIDB4QTUgLT4gQVJBQklDIExFVFRFUiBIQUgKKyAgICB1J1x1MDYyZScgICAjICAweEE2IC0+IEFSQUJJQyBMRVRURVIgS0hBSAorICAgIHUnXHUwNjJmJyAgICMgIDB4QTcgLT4gQVJBQklDIExFVFRFUiBEQUwKKyAgICB1J1x1MDYzMCcgICAjICAweEE4IC0+IEFSQUJJQyBMRVRURVIgVEhBTAorICAgIHUnXHUwNjMxJyAgICMgIDB4QTkgLT4gQVJBQklDIExFVFRFUiBSRUgKKyAgICB1J1x1MDYzMicgICAjICAweEFBIC0+IEFSQUJJQyBMRVRURVIgWkFJTgorICAgIHUnXHUwNjMzJyAgICMgIDB4QUIgLT4gQVJBQklDIExFVFRFUiBTRUVOCisgICAgdSdcdTA2MzQnICAgIyAgMHhBQyAtPiBBUkFCSUMgTEVUVEVSIFNIRUVOCisgICAgdSdcdTA2MzUnICAgIyAgMHhBRCAtPiBBUkFCSUMgTEVUVEVSIFNBRAorICAgIHUnXHhhYicgICAgICMgIDB4QUUgLT4gTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICB1J1x4YmInICAgICAjICAweEFGIC0+IFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIHUnXHUyNTkxJyAgICMgIDB4QjAgLT4gTElHSFQgU0hBREUKKyAgICB1J1x1MjU5MicgICAjICAweEIxIC0+IE1FRElVTSBTSEFERQorICAgIHUnXHUyNTkzJyAgICMgIDB4QjIgLT4gREFSSyBTSEFERQorICAgIHUnXHUyNTAyJyAgICMgIDB4QjMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgdSdcdTI1MjQnICAgIyAgMHhCNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICB1J1x1MjU2MScgICAjICAweEI1IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgdSdcdTI1NjInICAgIyAgMHhCNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIHUnXHUyNTU2JyAgICMgIDB4QjcgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIHUnXHUyNTU1JyAgICMgIDB4QjggLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIHUnXHUyNTYzJyAgICMgIDB4QjkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIHUnXHUyNTUxJyAgICMgIDB4QkEgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIHUnXHUyNTU3JyAgICMgIDB4QkIgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgdSdcdTI1NWQnICAgIyAgMHhCQyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgdSdcdTI1NWMnICAgIyAgMHhCRCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIHUnXHUyNTViJyAgICMgIDB4QkUgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICB1J1x1MjUxMCcgICAjICAweEJGIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgdSdcdTI1MTQnICAgIyAgMHhDMCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgdSdcdTI1MzQnICAgIyAgMHhDMSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjUyYycgICAjICAweEMyIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1MWMnICAgIyAgMHhDMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgdSdcdTI1MDAnICAgIyAgMHhDNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTNjJyAgICMgIDB4QzUgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1NWUnICAgIyAgMHhDNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICB1J1x1MjU1ZicgICAjICAweEM3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIHUnXHUyNTVhJyAgICMgIDB4QzggLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICB1J1x1MjU1NCcgICAjICAweEM5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICB1J1x1MjU2OScgICAjICAweENBIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjU2NicgICAjICAweENCIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTYwJyAgICMgIDB4Q0MgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICB1J1x1MjU1MCcgICAjICAweENEIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIHUnXHUyNTZjJyAgICMgIDB4Q0UgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTY3JyAgICMgIDB4Q0YgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICB1J1x1MjU2OCcgICAjICAweEQwIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgdSdcdTI1NjQnICAgIyAgMHhEMSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgdSdcdTI1NjUnICAgIyAgMHhEMiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgdSdcdTI1NTknICAgIyAgMHhEMyAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICB1J1x1MjU1OCcgICAjICAweEQ0IC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIHUnXHUyNTUyJyAgICMgIDB4RDUgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICB1J1x1MjU1MycgICAjICAweEQ2IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgdSdcdTI1NmInICAgIyAgMHhENyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIHUnXHUyNTZhJyAgICMgIDB4RDggLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICB1J1x1MjUxOCcgICAjICAweEQ5IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIHUnXHUyNTBjJyAgICMgIDB4REEgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgdSdcdTI1ODgnICAgIyAgMHhEQiAtPiBGVUxMIEJMT0NLCisgICAgdSdcdTI1ODQnICAgIyAgMHhEQyAtPiBMT1dFUiBIQUxGIEJMT0NLCisgICAgdSdcdTI1OGMnICAgIyAgMHhERCAtPiBMRUZUIEhBTEYgQkxPQ0sKKyAgICB1J1x1MjU5MCcgICAjICAweERFIC0+IFJJR0hUIEhBTEYgQkxPQ0sKKyAgICB1J1x1MjU4MCcgICAjICAweERGIC0+IFVQUEVSIEhBTEYgQkxPQ0sKKyAgICB1J1x1MDYzNicgICAjICAweEUwIC0+IEFSQUJJQyBMRVRURVIgREFECisgICAgdSdcdTA2MzcnICAgIyAgMHhFMSAtPiBBUkFCSUMgTEVUVEVSIFRBSAorICAgIHUnXHUwNjM4JyAgICMgIDB4RTIgLT4gQVJBQklDIExFVFRFUiBaQUgKKyAgICB1J1x1MDYzOScgICAjICAweEUzIC0+IEFSQUJJQyBMRVRURVIgQUlOCisgICAgdSdcdTA2M2EnICAgIyAgMHhFNCAtPiBBUkFCSUMgTEVUVEVSIEdIQUlOCisgICAgdSdcdTA2NDEnICAgIyAgMHhFNSAtPiBBUkFCSUMgTEVUVEVSIEZFSAorICAgIHUnXHhiNScgICAgICMgIDB4RTYgLT4gTUlDUk8gU0lHTgorICAgIHUnXHUwNjQyJyAgICMgIDB4RTcgLT4gQVJBQklDIExFVFRFUiBRQUYKKyAgICB1J1x1MDY0MycgICAjICAweEU4IC0+IEFSQUJJQyBMRVRURVIgS0FGCisgICAgdSdcdTA2NDQnICAgIyAgMHhFOSAtPiBBUkFCSUMgTEVUVEVSIExBTQorICAgIHUnXHUwNjQ1JyAgICMgIDB4RUEgLT4gQVJBQklDIExFVFRFUiBNRUVNCisgICAgdSdcdTA2NDYnICAgIyAgMHhFQiAtPiBBUkFCSUMgTEVUVEVSIE5PT04KKyAgICB1J1x1MDY0NycgICAjICAweEVDIC0+IEFSQUJJQyBMRVRURVIgSEVICisgICAgdSdcdTA2NDgnICAgIyAgMHhFRCAtPiBBUkFCSUMgTEVUVEVSIFdBVworICAgIHUnXHUwNjQ5JyAgICMgIDB4RUUgLT4gQVJBQklDIExFVFRFUiBBTEVGIE1BS1NVUkEKKyAgICB1J1x1MDY0YScgICAjICAweEVGIC0+IEFSQUJJQyBMRVRURVIgWUVICisgICAgdSdcdTIyNjEnICAgIyAgMHhGMCAtPiBJREVOVElDQUwgVE8KKyAgICB1J1x1MDY0YicgICAjICAweEYxIC0+IEFSQUJJQyBGQVRIQVRBTgorICAgIHUnXHUwNjRjJyAgICMgIDB4RjIgLT4gQVJBQklDIERBTU1BVEFOCisgICAgdSdcdTA2NGQnICAgIyAgMHhGMyAtPiBBUkFCSUMgS0FTUkFUQU4KKyAgICB1J1x1MDY0ZScgICAjICAweEY0IC0+IEFSQUJJQyBGQVRIQQorICAgIHUnXHUwNjRmJyAgICMgIDB4RjUgLT4gQVJBQklDIERBTU1BCisgICAgdSdcdTA2NTAnICAgIyAgMHhGNiAtPiBBUkFCSUMgS0FTUkEKKyAgICB1J1x1MjI0OCcgICAjICAweEY3IC0+IEFMTU9TVCBFUVVBTCBUTworICAgIHUnXHhiMCcgICAgICMgIDB4RjggLT4gREVHUkVFIFNJR04KKyAgICB1J1x1MjIxOScgICAjICAweEY5IC0+IEJVTExFVCBPUEVSQVRPUgorICAgIHUnXHhiNycgICAgICMgIDB4RkEgLT4gTUlERExFIERPVAorICAgIHUnXHUyMjFhJyAgICMgIDB4RkIgLT4gU1FVQVJFIFJPT1QKKyAgICB1J1x1MjA3ZicgICAjICAweEZDIC0+IFNVUEVSU0NSSVBUIExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgdSdceGIyJyAgICAgIyAgMHhGRCAtPiBTVVBFUlNDUklQVCBUV08KKyAgICB1J1x1MjVhMCcgICAjICAweEZFIC0+IEJMQUNLIFNRVUFSRQorICAgIHUnXHhhMCcgICAgICMgIDB4RkYgLT4gTk8tQlJFQUsgU1BBQ0UKKykKKworIyMjIEVuY29kaW5nIHRhYmxlCitlbmNvZGluZ190YWJsZT1jb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3A4NTgucHkgYi9MaWIvZW5jb2RpbmdzL2NwODU4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTc2MjEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwODU4LnB5CkBAIC0wLDAgKzEsNjk4IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGZvciBDUDg1OCwgbW9kaWZpZWQgZnJvbSBjcDg1MC4KKworIiIiCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ19tYXApCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfbWFwKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwODU4JywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisjIyMgRGVjb2RpbmcgTWFwCisKK2RlY29kaW5nX21hcCA9IGNvZGVjcy5tYWtlX2lkZW50aXR5X2RpY3QocmFuZ2UoMjU2KSkKK2RlY29kaW5nX21hcC51cGRhdGUoeworICAgIDB4MDA4MDogMHgwMGM3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAweDAwODE6IDB4MDBmYywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDgyOiAweDAwZTksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgMHgwMDgzOiAweDAwZTIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwODQ6IDB4MDBlNCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDg1OiAweDAwZTAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgMHgwMDg2OiAweDAwZTUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwODc6IDB4MDBlNywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgIDB4MDA4ODogMHgwMGVhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMDg5OiAweDAwZWIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA4YTogMHgwMGU4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIDB4MDA4YjogMHgwMGVmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOGM6IDB4MDBlZSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDA4ZDogMHgwMGVjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIDB4MDA4ZTogMHgwMGM0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA4ZjogMHgwMGM1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwOTA6IDB4MDBjOSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIDB4MDA5MTogMHgwMGU2LCAgICAgIyAgTEFUSU4gU01BTEwgTElHQVRVUkUgQUUKKyAgICAweDAwOTI6IDB4MDBjNiwgICAgICMgIExBVElOIENBUElUQUwgTElHQVRVUkUgQUUKKyAgICAweDAwOTM6IDB4MDBmNCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDA5NDogMHgwMGY2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOTU6IDB4MDBmMiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAweDAwOTY6IDB4MDBmYiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDA5NzogMHgwMGY5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgIDB4MDA5ODogMHgwMGZmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOTk6IDB4MDBkNiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOWE6IDB4MDBkYywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOWI6IDB4MDBmOCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMDljOiAweDAwYTMsICAgICAjICBQT1VORCBTSUdOCisgICAgMHgwMDlkOiAweDAwZDgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMDllOiAweDAwZDcsICAgICAjICBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgMHgwMDlmOiAweDAxOTIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKKyAgICAweDAwYTA6IDB4MDBlMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAweDAwYTE6IDB4MDBlZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAweDAwYTI6IDB4MDBmMywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAweDAwYTM6IDB4MDBmYSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAweDAwYTQ6IDB4MDBmMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwYTU6IDB4MDBkMSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgIDB4MDBhNjogMHgwMGFhLCAgICAgIyAgRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAweDAwYTc6IDB4MDBiYSwgICAgICMgIE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBhODogMHgwMGJmLCAgICAgIyAgSU5WRVJURUQgUVVFU1RJT04gTUFSSworICAgIDB4MDBhOTogMHgwMGFlLCAgICAgIyAgUkVHSVNURVJFRCBTSUdOCisgICAgMHgwMGFhOiAweDAwYWMsICAgICAjICBOT1QgU0lHTgorICAgIDB4MDBhYjogMHgwMGJkLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgMHgwMGFjOiAweDAwYmMsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAweDAwYWQ6IDB4MDBhMSwgICAgICMgIElOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKyAgICAweDAwYWU6IDB4MDBhYiwgICAgICMgIExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMGFmOiAweDAwYmIsICAgICAjICBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwYjA6IDB4MjU5MSwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgwMGIxOiAweDI1OTIsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDAwYjI6IDB4MjU5MywgICAgICMgIERBUksgU0hBREUKKyAgICAweDAwYjM6IDB4MjUwMiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIDB4MDBiNDogMHgyNTI0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGI1OiAweDAwYzEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAweDAwYjY6IDB4MDBjMiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGI3OiAweDAwYzAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAweDAwYjg6IDB4MDBhOSwgICAgICMgIENPUFlSSUdIVCBTSUdOCisgICAgMHgwMGI5OiAweDI1NjMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGJhOiAweDI1NTEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgMHgwMGJiOiAweDI1NTcsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAweDAwYmM6IDB4MjU1ZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDAwYmQ6IDB4MDBhMiwgICAgICMgIENFTlQgU0lHTgorICAgIDB4MDBiZTogMHgwMGE1LCAgICAgIyAgWUVOIFNJR04KKyAgICAweDAwYmY6IDB4MjUxMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgwMGMwOiAweDI1MTQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgwMGMxOiAweDI1MzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzI6IDB4MjUyYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMzOiAweDI1MWMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGM0OiAweDI1MDAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MDBjNTogMHgyNTNjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGM2OiAweDAwZTMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgMHgwMGM3OiAweDAwYzMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAweDAwYzg6IDB4MjU1YSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgMHgwMGM5OiAweDI1NTQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGNhOiAweDI1NjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNiOiAweDI1NjYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2M6IDB4MjU2MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGNkOiAweDI1NTAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDAwY2U6IDB4MjU2YywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2Y6IDB4MDBhNCwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwZDA6IDB4MDBmMCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFVEgKKyAgICAweDAwZDE6IDB4MDBkMCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEVUSAorICAgIDB4MDBkMjogMHgwMGNhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZDM6IDB4MDBjYiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZDQ6IDB4MDBjOCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIDB4MDBkNTogMHgyMGFjLCAgICAgIyAgRVVSTyBTSUdOCisgICAgMHgwMGQ2OiAweDAwY2QsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAweDAwZDc6IDB4MDBjZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGQ4OiAweDAwY2YsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGQ5OiAweDI1MTgsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDAwZGE6IDB4MjUwYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgIDB4MDBkYjogMHgyNTg4LCAgICAgIyAgRlVMTCBCTE9DSworICAgIDB4MDBkYzogMHgyNTg0LCAgICAgIyAgTE9XRVIgSEFMRiBCTE9DSworICAgIDB4MDBkZDogMHgwMGE2LCAgICAgIyAgQlJPS0VOIEJBUgorICAgIDB4MDBkZTogMHgwMGNjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgMHgwMGRmOiAweDI1ODAsICAgICAjICBVUFBFUiBIQUxGIEJMT0NLCisgICAgMHgwMGUwOiAweDAwZDMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAweDAwZTE6IDB4MDBkZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCisgICAgMHgwMGUyOiAweDAwZDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlMzogMHgwMGQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgMHgwMGU0OiAweDAwZjUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgMHgwMGU1OiAweDAwZDUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAweDAwZTY6IDB4MDBiNSwgICAgICMgIE1JQ1JPIFNJR04KKyAgICAweDAwZTc6IDB4MDBmZSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBUSE9STgorICAgIDB4MDBlODogMHgwMGRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZTk6IDB4MDBkYSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIDB4MDBlYTogMHgwMGRiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZWI6IDB4MDBkOSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgIDB4MDBlYzogMHgwMGZkLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgIDB4MDBlZDogMHgwMGRkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgMHgwMGVlOiAweDAwYWYsICAgICAjICBNQUNST04KKyAgICAweDAwZWY6IDB4MDBiNCwgICAgICMgIEFDVVRFIEFDQ0VOVAorICAgIDB4MDBmMDogMHgwMGFkLCAgICAgIyAgU09GVCBIWVBIRU4KKyAgICAweDAwZjE6IDB4MDBiMSwgICAgICMgIFBMVVMtTUlOVVMgU0lHTgorICAgIDB4MDBmMjogMHgyMDE3LCAgICAgIyAgRE9VQkxFIExPVyBMSU5FCisgICAgMHgwMGYzOiAweDAwYmUsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICAweDAwZjQ6IDB4MDBiNiwgICAgICMgIFBJTENST1cgU0lHTgorICAgIDB4MDBmNTogMHgwMGE3LCAgICAgIyAgU0VDVElPTiBTSUdOCisgICAgMHgwMGY2OiAweDAwZjcsICAgICAjICBESVZJU0lPTiBTSUdOCisgICAgMHgwMGY3OiAweDAwYjgsICAgICAjICBDRURJTExBCisgICAgMHgwMGY4OiAweDAwYjAsICAgICAjICBERUdSRUUgU0lHTgorICAgIDB4MDBmOTogMHgwMGE4LCAgICAgIyAgRElBRVJFU0lTCisgICAgMHgwMGZhOiAweDAwYjcsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwMGZiOiAweDAwYjksICAgICAjICBTVVBFUlNDUklQVCBPTkUKKyAgICAweDAwZmM6IDB4MDBiMywgICAgICMgIFNVUEVSU0NSSVBUIFRIUkVFCisgICAgMHgwMGZkOiAweDAwYjIsICAgICAjICBTVVBFUlNDUklQVCBUV08KKyAgICAweDAwZmU6IDB4MjVhMCwgICAgICMgIEJMQUNLIFNRVUFSRQorICAgIDB4MDBmZjogMHgwMGEwLCAgICAgIyAgTk8tQlJFQUsgU1BBQ0UKK30pCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICB1J1x4MDAnICAgICAjICAweDAwMDAgLT4gTlVMTAorICAgIHUnXHgwMScgICAgICMgIDB4MDAwMSAtPiBTVEFSVCBPRiBIRUFESU5HCisgICAgdSdceDAyJyAgICAgIyAgMHgwMDAyIC0+IFNUQVJUIE9GIFRFWFQKKyAgICB1J1x4MDMnICAgICAjICAweDAwMDMgLT4gRU5EIE9GIFRFWFQKKyAgICB1J1x4MDQnICAgICAjICAweDAwMDQgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgIHUnXHgwNScgICAgICMgIDB4MDAwNSAtPiBFTlFVSVJZCisgICAgdSdceDA2JyAgICAgIyAgMHgwMDA2IC0+IEFDS05PV0xFREdFCisgICAgdSdceDA3JyAgICAgIyAgMHgwMDA3IC0+IEJFTEwKKyAgICB1J1x4MDgnICAgICAjICAweDAwMDggLT4gQkFDS1NQQUNFCisgICAgdSdcdCcgICAgICAgIyAgMHgwMDA5IC0+IEhPUklaT05UQUwgVEFCVUxBVElPTgorICAgIHUnXG4nICAgICAgICMgIDB4MDAwYSAtPiBMSU5FIEZFRUQKKyAgICB1J1x4MGInICAgICAjICAweDAwMGIgLT4gVkVSVElDQUwgVEFCVUxBVElPTgorICAgIHUnXHgwYycgICAgICMgIDB4MDAwYyAtPiBGT1JNIEZFRUQKKyAgICB1J1xyJyAgICAgICAjICAweDAwMGQgLT4gQ0FSUklBR0UgUkVUVVJOCisgICAgdSdceDBlJyAgICAgIyAgMHgwMDBlIC0+IFNISUZUIE9VVAorICAgIHUnXHgwZicgICAgICMgIDB4MDAwZiAtPiBTSElGVCBJTgorICAgIHUnXHgxMCcgICAgICMgIDB4MDAxMCAtPiBEQVRBIExJTksgRVNDQVBFCisgICAgdSdceDExJyAgICAgIyAgMHgwMDExIC0+IERFVklDRSBDT05UUk9MIE9ORQorICAgIHUnXHgxMicgICAgICMgIDB4MDAxMiAtPiBERVZJQ0UgQ09OVFJPTCBUV08KKyAgICB1J1x4MTMnICAgICAjICAweDAwMTMgLT4gREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICB1J1x4MTQnICAgICAjICAweDAwMTQgLT4gREVWSUNFIENPTlRST0wgRk9VUgorICAgIHUnXHgxNScgICAgICMgIDB4MDAxNSAtPiBORUdBVElWRSBBQ0tOT1dMRURHRQorICAgIHUnXHgxNicgICAgICMgIDB4MDAxNiAtPiBTWU5DSFJPTk9VUyBJRExFCisgICAgdSdceDE3JyAgICAgIyAgMHgwMDE3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICB1J1x4MTgnICAgICAjICAweDAwMTggLT4gQ0FOQ0VMCisgICAgdSdceDE5JyAgICAgIyAgMHgwMDE5IC0+IEVORCBPRiBNRURJVU0KKyAgICB1J1x4MWEnICAgICAjICAweDAwMWEgLT4gU1VCU1RJVFVURQorICAgIHUnXHgxYicgICAgICMgIDB4MDAxYiAtPiBFU0NBUEUKKyAgICB1J1x4MWMnICAgICAjICAweDAwMWMgLT4gRklMRSBTRVBBUkFUT1IKKyAgICB1J1x4MWQnICAgICAjICAweDAwMWQgLT4gR1JPVVAgU0VQQVJBVE9SCisgICAgdSdceDFlJyAgICAgIyAgMHgwMDFlIC0+IFJFQ09SRCBTRVBBUkFUT1IKKyAgICB1J1x4MWYnICAgICAjICAweDAwMWYgLT4gVU5JVCBTRVBBUkFUT1IKKyAgICB1JyAnICAgICAgICAjICAweDAwMjAgLT4gU1BBQ0UKKyAgICB1JyEnICAgICAgICAjICAweDAwMjEgLT4gRVhDTEFNQVRJT04gTUFSSworICAgIHUnIicgICAgICAgICMgIDB4MDAyMiAtPiBRVU9UQVRJT04gTUFSSworICAgIHUnIycgICAgICAgICMgIDB4MDAyMyAtPiBOVU1CRVIgU0lHTgorICAgIHUnJCcgICAgICAgICMgIDB4MDAyNCAtPiBET0xMQVIgU0lHTgorICAgIHUnJScgICAgICAgICMgIDB4MDAyNSAtPiBQRVJDRU5UIFNJR04KKyAgICB1JyYnICAgICAgICAjICAweDAwMjYgLT4gQU1QRVJTQU5ECisgICAgdSInIiAgICAgICAgIyAgMHgwMDI3IC0+IEFQT1NUUk9QSEUKKyAgICB1JygnICAgICAgICAjICAweDAwMjggLT4gTEVGVCBQQVJFTlRIRVNJUworICAgIHUnKScgICAgICAgICMgIDB4MDAyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgIHUnKicgICAgICAgICMgIDB4MDAyYSAtPiBBU1RFUklTSworICAgIHUnKycgICAgICAgICMgIDB4MDAyYiAtPiBQTFVTIFNJR04KKyAgICB1JywnICAgICAgICAjICAweDAwMmMgLT4gQ09NTUEKKyAgICB1Jy0nICAgICAgICAjICAweDAwMmQgLT4gSFlQSEVOLU1JTlVTCisgICAgdScuJyAgICAgICAgIyAgMHgwMDJlIC0+IEZVTEwgU1RPUAorICAgIHUnLycgICAgICAgICMgIDB4MDAyZiAtPiBTT0xJRFVTCisgICAgdScwJyAgICAgICAgIyAgMHgwMDMwIC0+IERJR0lUIFpFUk8KKyAgICB1JzEnICAgICAgICAjICAweDAwMzEgLT4gRElHSVQgT05FCisgICAgdScyJyAgICAgICAgIyAgMHgwMDMyIC0+IERJR0lUIFRXTworICAgIHUnMycgICAgICAgICMgIDB4MDAzMyAtPiBESUdJVCBUSFJFRQorICAgIHUnNCcgICAgICAgICMgIDB4MDAzNCAtPiBESUdJVCBGT1VSCisgICAgdSc1JyAgICAgICAgIyAgMHgwMDM1IC0+IERJR0lUIEZJVkUKKyAgICB1JzYnICAgICAgICAjICAweDAwMzYgLT4gRElHSVQgU0lYCisgICAgdSc3JyAgICAgICAgIyAgMHgwMDM3IC0+IERJR0lUIFNFVkVOCisgICAgdSc4JyAgICAgICAgIyAgMHgwMDM4IC0+IERJR0lUIEVJR0hUCisgICAgdSc5JyAgICAgICAgIyAgMHgwMDM5IC0+IERJR0lUIE5JTkUKKyAgICB1JzonICAgICAgICAjICAweDAwM2EgLT4gQ09MT04KKyAgICB1JzsnICAgICAgICAjICAweDAwM2IgLT4gU0VNSUNPTE9OCisgICAgdSc8JyAgICAgICAgIyAgMHgwMDNjIC0+IExFU1MtVEhBTiBTSUdOCisgICAgdSc9JyAgICAgICAgIyAgMHgwMDNkIC0+IEVRVUFMUyBTSUdOCisgICAgdSc+JyAgICAgICAgIyAgMHgwMDNlIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgdSc/JyAgICAgICAgIyAgMHgwMDNmIC0+IFFVRVNUSU9OIE1BUksKKyAgICB1J0AnICAgICAgICAjICAweDAwNDAgLT4gQ09NTUVSQ0lBTCBBVAorICAgIHUnQScgICAgICAgICMgIDB4MDA0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgdSdCJyAgICAgICAgIyAgMHgwMDQyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICB1J0MnICAgICAgICAjICAweDAwNDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgIHUnRCcgICAgICAgICMgIDB4MDA0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgdSdFJyAgICAgICAgIyAgMHgwMDQ1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICB1J0YnICAgICAgICAjICAweDAwNDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgIHUnRycgICAgICAgICMgIDB4MDA0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgdSdIJyAgICAgICAgIyAgMHgwMDQ4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICB1J0knICAgICAgICAjICAweDAwNDkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgIHUnSicgICAgICAgICMgIDB4MDA0YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgdSdLJyAgICAgICAgIyAgMHgwMDRiIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICB1J0wnICAgICAgICAjICAweDAwNGMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgIHUnTScgICAgICAgICMgIDB4MDA0ZCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgdSdOJyAgICAgICAgIyAgMHgwMDRlIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICB1J08nICAgICAgICAjICAweDAwNGYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgIHUnUCcgICAgICAgICMgIDB4MDA1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgdSdRJyAgICAgICAgIyAgMHgwMDUxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICB1J1InICAgICAgICAjICAweDAwNTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgIHUnUycgICAgICAgICMgIDB4MDA1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgdSdUJyAgICAgICAgIyAgMHgwMDU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICB1J1UnICAgICAgICAjICAweDAwNTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgIHUnVicgICAgICAgICMgIDB4MDA1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgdSdXJyAgICAgICAgIyAgMHgwMDU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICB1J1gnICAgICAgICAjICAweDAwNTggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgIHUnWScgICAgICAgICMgIDB4MDA1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgdSdaJyAgICAgICAgIyAgMHgwMDVhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICB1J1snICAgICAgICAjICAweDAwNWIgLT4gTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgIHUnXFwnICAgICAgICMgIDB4MDA1YyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICB1J10nICAgICAgICAjICAweDAwNWQgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICB1J14nICAgICAgICAjICAweDAwNWUgLT4gQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICB1J18nICAgICAgICAjICAweDAwNWYgLT4gTE9XIExJTkUKKyAgICB1J2AnICAgICAgICAjICAweDAwNjAgLT4gR1JBVkUgQUNDRU5UCisgICAgdSdhJyAgICAgICAgIyAgMHgwMDYxIC0+IExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgdSdiJyAgICAgICAgIyAgMHgwMDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgdSdjJyAgICAgICAgIyAgMHgwMDYzIC0+IExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgdSdkJyAgICAgICAgIyAgMHgwMDY0IC0+IExBVElOIFNNQUxMIExFVFRFUiBECisgICAgdSdlJyAgICAgICAgIyAgMHgwMDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgdSdmJyAgICAgICAgIyAgMHgwMDY2IC0+IExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgdSdnJyAgICAgICAgIyAgMHgwMDY3IC0+IExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgdSdoJyAgICAgICAgIyAgMHgwMDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgdSdpJyAgICAgICAgIyAgMHgwMDY5IC0+IExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgdSdqJyAgICAgICAgIyAgMHgwMDZhIC0+IExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgdSdrJyAgICAgICAgIyAgMHgwMDZiIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgdSdsJyAgICAgICAgIyAgMHgwMDZjIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgdSdtJyAgICAgICAgIyAgMHgwMDZkIC0+IExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgdSduJyAgICAgICAgIyAgMHgwMDZlIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgdSdvJyAgICAgICAgIyAgMHgwMDZmIC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgdSdwJyAgICAgICAgIyAgMHgwMDcwIC0+IExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgdSdxJyAgICAgICAgIyAgMHgwMDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgdSdyJyAgICAgICAgIyAgMHgwMDcyIC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgdSdzJyAgICAgICAgIyAgMHgwMDczIC0+IExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgdSd0JyAgICAgICAgIyAgMHgwMDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgdSd1JyAgICAgICAgIyAgMHgwMDc1IC0+IExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgdSd2JyAgICAgICAgIyAgMHgwMDc2IC0+IExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgdSd3JyAgICAgICAgIyAgMHgwMDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgdSd4JyAgICAgICAgIyAgMHgwMDc4IC0+IExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgdSd5JyAgICAgICAgIyAgMHgwMDc5IC0+IExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgdSd6JyAgICAgICAgIyAgMHgwMDdhIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgdSd7JyAgICAgICAgIyAgMHgwMDdiIC0+IExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgIHUnfCcgICAgICAgICMgIDB4MDA3YyAtPiBWRVJUSUNBTCBMSU5FCisgICAgdSd9JyAgICAgICAgIyAgMHgwMDdkIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICB1J34nICAgICAgICAjICAweDAwN2UgLT4gVElMREUKKyAgICB1J1x4N2YnICAgICAjICAweDAwN2YgLT4gREVMRVRFCisgICAgdSdceGM3JyAgICAgIyAgMHgwMDgwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgdSdceGZjJyAgICAgIyAgMHgwMDgxIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgdSdceGU5JyAgICAgIyAgMHgwMDgyIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICB1J1x4ZTInICAgICAjICAweDAwODMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGU0JyAgICAgIyAgMHgwMDg0IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgdSdceGUwJyAgICAgIyAgMHgwMDg1IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICB1J1x4ZTUnICAgICAjICAweDAwODYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgdSdceGU3JyAgICAgIyAgMHgwMDg3IC0+IExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgIHUnXHhlYScgICAgICMgIDB4MDA4OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZWInICAgICAjICAweDAwODkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZTgnICAgICAjICAweDAwOGEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgIHUnXHhlZicgICAgICMgIDB4MDA4YiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIHUnXHhlZScgICAgICMgIDB4MDA4YyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZWMnICAgICAjICAweDAwOGQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIHUnXHhjNCcgICAgICMgIDB4MDA4ZSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgdSdceGM1JyAgICAgIyAgMHgwMDhmIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgdSdceGM5JyAgICAgIyAgMHgwMDkwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIHUnXHhlNicgICAgICMgIDB4MDA5MSAtPiBMQVRJTiBTTUFMTCBMSUdBVFVSRSBBRQorICAgIHUnXHhjNicgICAgICMgIDB4MDA5MiAtPiBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIEFFCisgICAgdSdceGY0JyAgICAgIyAgMHgwMDkzIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhmNicgICAgICMgIDB4MDA5NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgIHUnXHhmMicgICAgICMgIDB4MDA5NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgdSdceGZiJyAgICAgIyAgMHgwMDk2IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhmOScgICAgICMgIDB4MDA5NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgdSdceGZmJyAgICAgIyAgMHgwMDk4IC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgdSdceGQ2JyAgICAgIyAgMHgwMDk5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICB1J1x4ZGMnICAgICAjICAweDAwOWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgIHUnXHhmOCcgICAgICMgIDB4MDA5YiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgIHUnXHhhMycgICAgICMgIDB4MDA5YyAtPiBQT1VORCBTSUdOCisgICAgdSdceGQ4JyAgICAgIyAgMHgwMDlkIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICB1J1x4ZDcnICAgICAjICAweDAwOWUgLT4gTVVMVElQTElDQVRJT04gU0lHTgorICAgIHUnXHUwMTkyJyAgICMgIDB4MDA5ZiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKKyAgICB1J1x4ZTEnICAgICAjICAweDAwYTAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIHUnXHhlZCcgICAgICMgIDB4MDBhMSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgdSdceGYzJyAgICAgIyAgMHgwMGEyIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICB1J1x4ZmEnICAgICAjICAweDAwYTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIHUnXHhmMScgICAgICMgIDB4MDBhNCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgdSdceGQxJyAgICAgIyAgMHgwMGE1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgIHUnXHhhYScgICAgICMgIDB4MDBhNiAtPiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgIHUnXHhiYScgICAgICMgIDB4MDBhNyAtPiBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICB1J1x4YmYnICAgICAjICAweDAwYTggLT4gSU5WRVJURUQgUVVFU1RJT04gTUFSSworICAgIHUnXHhhZScgICAgICMgIDB4MDBhOSAtPiBSRUdJU1RFUkVEIFNJR04KKyAgICB1J1x4YWMnICAgICAjICAweDAwYWEgLT4gTk9UIFNJR04KKyAgICB1J1x4YmQnICAgICAjICAweDAwYWIgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgdSdceGJjJyAgICAgIyAgMHgwMGFjIC0+IFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgIHUnXHhhMScgICAgICMgIDB4MDBhZCAtPiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisgICAgdSdceGFiJyAgICAgIyAgMHgwMGFlIC0+IExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgdSdceGJiJyAgICAgIyAgMHgwMGFmIC0+IFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIHUnXHUyNTkxJyAgICMgIDB4MDBiMCAtPiBMSUdIVCBTSEFERQorICAgIHUnXHUyNTkyJyAgICMgIDB4MDBiMSAtPiBNRURJVU0gU0hBREUKKyAgICB1J1x1MjU5MycgICAjICAweDAwYjIgLT4gREFSSyBTSEFERQorICAgIHUnXHUyNTAyJyAgICMgIDB4MDBiMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICB1J1x1MjUyNCcgICAjICAweDAwYjQgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgdSdceGMxJyAgICAgIyAgMHgwMGI1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIHUnXHhjMicgICAgICMgIDB4MDBiNiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhjMCcgICAgICMgIDB4MDBiNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICB1J1x4YTknICAgICAjICAweDAwYjggLT4gQ09QWVJJR0hUIFNJR04KKyAgICB1J1x1MjU2MycgICAjICAweDAwYjkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIHUnXHUyNTUxJyAgICMgIDB4MDBiYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgdSdcdTI1NTcnICAgIyAgMHgwMGJiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIHUnXHUyNTVkJyAgICMgIDB4MDBiYyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgdSdceGEyJyAgICAgIyAgMHgwMGJkIC0+IENFTlQgU0lHTgorICAgIHUnXHhhNScgICAgICMgIDB4MDBiZSAtPiBZRU4gU0lHTgorICAgIHUnXHUyNTEwJyAgICMgIDB4MDBiZiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIHUnXHUyNTE0JyAgICMgIDB4MDBjMCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgdSdcdTI1MzQnICAgIyAgMHgwMGMxIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTJjJyAgICMgIDB4MDBjMiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHUyNTFjJyAgICMgIDB4MDBjMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgdSdcdTI1MDAnICAgIyAgMHgwMGM0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgdSdcdTI1M2MnICAgIyAgMHgwMGM1IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIHUnXHhlMycgICAgICMgIDB4MDBjNiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgdSdceGMzJyAgICAgIyAgMHgwMGM3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIHUnXHUyNTVhJyAgICMgIDB4MDBjOCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIHUnXHUyNTU0JyAgICMgIDB4MDBjOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgdSdcdTI1NjknICAgIyAgMHgwMGNhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICB1J1x1MjU2NicgICAjICAweDAwY2IgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgdSdcdTI1NjAnICAgIyAgMHgwMGNjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgdSdcdTI1NTAnICAgIyAgMHgwMGNkIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIHUnXHUyNTZjJyAgICMgIDB4MDBjZSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgdSdceGE0JyAgICAgIyAgMHgwMGNmIC0+IENVUlJFTkNZIFNJR04KKyAgICB1J1x4ZjAnICAgICAjICAweDAwZDAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEVUSAorICAgIHUnXHhkMCcgICAgICMgIDB4MDBkMSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEgKKyAgICB1J1x4Y2EnICAgICAjICAweDAwZDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4Y2InICAgICAjICAweDAwZDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgIHUnXHhjOCcgICAgICMgIDB4MDBkNCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICB1J1x1MjBhYycgICAjICAweDAwZDUgLT4gRVVSTyBTSUdOCisgICAgdSdceGNkJyAgICAgIyAgMHgwMGQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgIHUnXHhjZScgICAgICMgIDB4MDBkNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIHUnXHhjZicgICAgICMgIDB4MDBkOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgdSdcdTI1MTgnICAgIyAgMHgwMGQ5IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIHUnXHUyNTBjJyAgICMgIDB4MDBkYSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICB1J1x1MjU4OCcgICAjICAweDAwZGIgLT4gRlVMTCBCTE9DSworICAgIHUnXHUyNTg0JyAgICMgIDB4MDBkYyAtPiBMT1dFUiBIQUxGIEJMT0NLCisgICAgdSdceGE2JyAgICAgIyAgMHgwMGRkIC0+IEJST0tFTiBCQVIKKyAgICB1J1x4Y2MnICAgICAjICAweDAwZGUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgdSdcdTI1ODAnICAgIyAgMHgwMGRmIC0+IFVQUEVSIEhBTEYgQkxPQ0sKKyAgICB1J1x4ZDMnICAgICAjICAweDAwZTAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgdSdceGRmJyAgICAgIyAgMHgwMGUxIC0+IExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCisgICAgdSdceGQ0JyAgICAgIyAgMHgwMGUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgdSdceGQyJyAgICAgIyAgMHgwMGUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIHUnXHhmNScgICAgICMgIDB4MDBlNCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgdSdceGQ1JyAgICAgIyAgMHgwMGU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgIHUnXHhiNScgICAgICMgIDB4MDBlNiAtPiBNSUNSTyBTSUdOCisgICAgdSdceGZlJyAgICAgIyAgMHgwMGU3IC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STgorICAgIHUnXHhkZScgICAgICMgIDB4MDBlOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUSE9STgorICAgIHUnXHhkYScgICAgICMgIDB4MDBlOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICB1J1x4ZGInICAgICAjICAweDAwZWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICB1J1x4ZDknICAgICAjICAweDAwZWIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgdSdceGZkJyAgICAgIyAgMHgwMGVjIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICB1J1x4ZGQnICAgICAjICAweDAwZWQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgdSdceGFmJyAgICAgIyAgMHgwMGVlIC0+IE1BQ1JPTgorICAgIHUnXHhiNCcgICAgICMgIDB4MDBlZiAtPiBBQ1VURSBBQ0NFTlQKKyAgICB1J1x4YWQnICAgICAjICAweDAwZjAgLT4gU09GVCBIWVBIRU4KKyAgICB1J1x4YjEnICAgICAjICAweDAwZjEgLT4gUExVUy1NSU5VUyBTSUdOCisgICAgdSdcdTIwMTcnICAgIyAgMHgwMGYyIC0+IERPVUJMRSBMT1cgTElORQorICAgIHUnXHhiZScgICAgICMgIDB4MDBmMyAtPiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICB1J1x4YjYnICAgICAjICAweDAwZjQgLT4gUElMQ1JPVyBTSUdOCisgICAgdSdceGE3JyAgICAgIyAgMHgwMGY1IC0+IFNFQ1RJT04gU0lHTgorICAgIHUnXHhmNycgICAgICMgIDB4MDBmNiAtPiBESVZJU0lPTiBTSUdOCisgICAgdSdceGI4JyAgICAgIyAgMHgwMGY3IC0+IENFRElMTEEKKyAgICB1J1x4YjAnICAgICAjICAweDAwZjggLT4gREVHUkVFIFNJR04KKyAgICB1J1x4YTgnICAgICAjICAweDAwZjkgLT4gRElBRVJFU0lTCisgICAgdSdceGI3JyAgICAgIyAgMHgwMGZhIC0+IE1JRERMRSBET1QKKyAgICB1J1x4YjknICAgICAjICAweDAwZmIgLT4gU1VQRVJTQ1JJUFQgT05FCisgICAgdSdceGIzJyAgICAgIyAgMHgwMGZjIC0+IFNVUEVSU0NSSVBUIFRIUkVFCisgICAgdSdceGIyJyAgICAgIyAgMHgwMGZkIC0+IFNVUEVSU0NSSVBUIFRXTworICAgIHUnXHUyNWEwJyAgICMgIDB4MDBmZSAtPiBCTEFDSyBTUVVBUkUKKyAgICB1J1x4YTAnICAgICAjICAweDAwZmYgLT4gTk8tQlJFQUsgU1BBQ0UKKykKKworIyMjIEVuY29kaW5nIE1hcAorCitlbmNvZGluZ19tYXAgPSB7CisgICAgMHgwMDAwOiAweDAwMDAsICAgICAjICBOVUxMCisgICAgMHgwMDAxOiAweDAwMDEsICAgICAjICBTVEFSVCBPRiBIRUFESU5HCisgICAgMHgwMDAyOiAweDAwMDIsICAgICAjICBTVEFSVCBPRiBURVhUCisgICAgMHgwMDAzOiAweDAwMDMsICAgICAjICBFTkQgT0YgVEVYVAorICAgIDB4MDAwNDogMHgwMDA0LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgIDB4MDAwNTogMHgwMDA1LCAgICAgIyAgRU5RVUlSWQorICAgIDB4MDAwNjogMHgwMDA2LCAgICAgIyAgQUNLTk9XTEVER0UKKyAgICAweDAwMDc6IDB4MDAwNywgICAgICMgIEJFTEwKKyAgICAweDAwMDg6IDB4MDAwOCwgICAgICMgIEJBQ0tTUEFDRQorICAgIDB4MDAwOTogMHgwMDA5LCAgICAgIyAgSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBhOiAweDAwMGEsICAgICAjICBMSU5FIEZFRUQKKyAgICAweDAwMGI6IDB4MDAwYiwgICAgICMgIFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAweDAwMGM6IDB4MDAwYywgICAgICMgIEZPUk0gRkVFRAorICAgIDB4MDAwZDogMHgwMDBkLCAgICAgIyAgQ0FSUklBR0UgUkVUVVJOCisgICAgMHgwMDBlOiAweDAwMGUsICAgICAjICBTSElGVCBPVVQKKyAgICAweDAwMGY6IDB4MDAwZiwgICAgICMgIFNISUZUIElOCisgICAgMHgwMDEwOiAweDAwMTAsICAgICAjICBEQVRBIExJTksgRVNDQVBFCisgICAgMHgwMDExOiAweDAwMTEsICAgICAjICBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAweDAwMTI6IDB4MDAxMiwgICAgICMgIERFVklDRSBDT05UUk9MIFRXTworICAgIDB4MDAxMzogMHgwMDEzLCAgICAgIyAgREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAweDAwMTQ6IDB4MDAxNCwgICAgICMgIERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAweDAwMTU6IDB4MDAxNSwgICAgICMgIE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgMHgwMDE2OiAweDAwMTYsICAgICAjICBTWU5DSFJPTk9VUyBJRExFCisgICAgMHgwMDE3OiAweDAwMTcsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgMHgwMDE4OiAweDAwMTgsICAgICAjICBDQU5DRUwKKyAgICAweDAwMTk6IDB4MDAxOSwgICAgICMgIEVORCBPRiBNRURJVU0KKyAgICAweDAwMWE6IDB4MDAxYSwgICAgICMgIFNVQlNUSVRVVEUKKyAgICAweDAwMWI6IDB4MDAxYiwgICAgICMgIEVTQ0FQRQorICAgIDB4MDAxYzogMHgwMDFjLCAgICAgIyAgRklMRSBTRVBBUkFUT1IKKyAgICAweDAwMWQ6IDB4MDAxZCwgICAgICMgIEdST1VQIFNFUEFSQVRPUgorICAgIDB4MDAxZTogMHgwMDFlLCAgICAgIyAgUkVDT1JEIFNFUEFSQVRPUgorICAgIDB4MDAxZjogMHgwMDFmLCAgICAgIyAgVU5JVCBTRVBBUkFUT1IKKyAgICAweDAwMjA6IDB4MDAyMCwgICAgICMgIFNQQUNFCisgICAgMHgwMDIxOiAweDAwMjEsICAgICAjICBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMDIyOiAweDAwMjIsICAgICAjICBRVU9UQVRJT04gTUFSSworICAgIDB4MDAyMzogMHgwMDIzLCAgICAgIyAgTlVNQkVSIFNJR04KKyAgICAweDAwMjQ6IDB4MDAyNCwgICAgICMgIERPTExBUiBTSUdOCisgICAgMHgwMDI1OiAweDAwMjUsICAgICAjICBQRVJDRU5UIFNJR04KKyAgICAweDAwMjY6IDB4MDAyNiwgICAgICMgIEFNUEVSU0FORAorICAgIDB4MDAyNzogMHgwMDI3LCAgICAgIyAgQVBPU1RST1BIRQorICAgIDB4MDAyODogMHgwMDI4LCAgICAgIyAgTEVGVCBQQVJFTlRIRVNJUworICAgIDB4MDAyOTogMHgwMDI5LCAgICAgIyAgUklHSFQgUEFSRU5USEVTSVMKKyAgICAweDAwMmE6IDB4MDAyYSwgICAgICMgIEFTVEVSSVNLCisgICAgMHgwMDJiOiAweDAwMmIsICAgICAjICBQTFVTIFNJR04KKyAgICAweDAwMmM6IDB4MDAyYywgICAgICMgIENPTU1BCisgICAgMHgwMDJkOiAweDAwMmQsICAgICAjICBIWVBIRU4tTUlOVVMKKyAgICAweDAwMmU6IDB4MDAyZSwgICAgICMgIEZVTEwgU1RPUAorICAgIDB4MDAyZjogMHgwMDJmLCAgICAgIyAgU09MSURVUworICAgIDB4MDAzMDogMHgwMDMwLCAgICAgIyAgRElHSVQgWkVSTworICAgIDB4MDAzMTogMHgwMDMxLCAgICAgIyAgRElHSVQgT05FCisgICAgMHgwMDMyOiAweDAwMzIsICAgICAjICBESUdJVCBUV08KKyAgICAweDAwMzM6IDB4MDAzMywgICAgICMgIERJR0lUIFRIUkVFCisgICAgMHgwMDM0OiAweDAwMzQsICAgICAjICBESUdJVCBGT1VSCisgICAgMHgwMDM1OiAweDAwMzUsICAgICAjICBESUdJVCBGSVZFCisgICAgMHgwMDM2OiAweDAwMzYsICAgICAjICBESUdJVCBTSVgKKyAgICAweDAwMzc6IDB4MDAzNywgICAgICMgIERJR0lUIFNFVkVOCisgICAgMHgwMDM4OiAweDAwMzgsICAgICAjICBESUdJVCBFSUdIVAorICAgIDB4MDAzOTogMHgwMDM5LCAgICAgIyAgRElHSVQgTklORQorICAgIDB4MDAzYTogMHgwMDNhLCAgICAgIyAgQ09MT04KKyAgICAweDAwM2I6IDB4MDAzYiwgICAgICMgIFNFTUlDT0xPTgorICAgIDB4MDAzYzogMHgwMDNjLCAgICAgIyAgTEVTUy1USEFOIFNJR04KKyAgICAweDAwM2Q6IDB4MDAzZCwgICAgICMgIEVRVUFMUyBTSUdOCisgICAgMHgwMDNlOiAweDAwM2UsICAgICAjICBHUkVBVEVSLVRIQU4gU0lHTgorICAgIDB4MDAzZjogMHgwMDNmLCAgICAgIyAgUVVFU1RJT04gTUFSSworICAgIDB4MDA0MDogMHgwMDQwLCAgICAgIyAgQ09NTUVSQ0lBTCBBVAorICAgIDB4MDA0MTogMHgwMDQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA0MjogMHgwMDQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgIDB4MDA0MzogMHgwMDQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgIDB4MDA0NDogMHgwMDQ0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgIDB4MDA0NTogMHgwMDQ1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA0NjogMHgwMDQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgIDB4MDA0NzogMHgwMDQ3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgIDB4MDA0ODogMHgwMDQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgIDB4MDA0OTogMHgwMDQ5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA0YTogMHgwMDRhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgIDB4MDA0YjogMHgwMDRiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgIDB4MDA0YzogMHgwMDRjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgIDB4MDA0ZDogMHgwMDRkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgIDB4MDA0ZTogMHgwMDRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgIDB4MDA0ZjogMHgwMDRmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA1MDogMHgwMDUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgIDB4MDA1MTogMHgwMDUxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgIDB4MDA1MjogMHgwMDUyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgIDB4MDA1MzogMHgwMDUzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgIDB4MDA1NDogMHgwMDU0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgIDB4MDA1NTogMHgwMDU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA1NjogMHgwMDU2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgIDB4MDA1NzogMHgwMDU3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgIDB4MDA1ODogMHgwMDU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgIDB4MDA1OTogMHgwMDU5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgIDB4MDA1YTogMHgwMDVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgIDB4MDA1YjogMHgwMDViLCAgICAgIyAgTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1YzogMHgwMDVjLCAgICAgIyAgUkVWRVJTRSBTT0xJRFVTCisgICAgMHgwMDVkOiAweDAwNWQsICAgICAjICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1ZTogMHgwMDVlLCAgICAgIyAgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAweDAwNWY6IDB4MDA1ZiwgICAgICMgIExPVyBMSU5FCisgICAgMHgwMDYwOiAweDAwNjAsICAgICAjICBHUkFWRSBBQ0NFTlQKKyAgICAweDAwNjE6IDB4MDA2MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMDYyOiAweDAwNjIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgIDB4MDA2MzogMHgwMDYzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAweDAwNjQ6IDB4MDA2NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBECisgICAgMHgwMDY1OiAweDAwNjUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgIDB4MDA2NjogMHgwMDY2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAweDAwNjc6IDB4MDA2NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgMHgwMDY4OiAweDAwNjgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgIDB4MDA2OTogMHgwMDY5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAweDAwNmE6IDB4MDA2YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgMHgwMDZiOiAweDAwNmIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgIDB4MDA2YzogMHgwMDZjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAweDAwNmQ6IDB4MDA2ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgMHgwMDZlOiAweDAwNmUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgIDB4MDA2ZjogMHgwMDZmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAweDAwNzA6IDB4MDA3MCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgMHgwMDcxOiAweDAwNzEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgIDB4MDA3MjogMHgwMDcyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAweDAwNzM6IDB4MDA3MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgMHgwMDc0OiAweDAwNzQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgIDB4MDA3NTogMHgwMDc1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAweDAwNzY6IDB4MDA3NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgMHgwMDc3OiAweDAwNzcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgIDB4MDA3ODogMHgwMDc4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAweDAwNzk6IDB4MDA3OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgMHgwMDdhOiAweDAwN2EsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgIDB4MDA3YjogMHgwMDdiLCAgICAgIyAgTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdjOiAweDAwN2MsICAgICAjICBWRVJUSUNBTCBMSU5FCisgICAgMHgwMDdkOiAweDAwN2QsICAgICAjICBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdlOiAweDAwN2UsICAgICAjICBUSUxERQorICAgIDB4MDA3ZjogMHgwMDdmLCAgICAgIyAgREVMRVRFCisgICAgMHgwMGEwOiAweDAwZmYsICAgICAjICBOTy1CUkVBSyBTUEFDRQorICAgIDB4MDBhMTogMHgwMGFkLCAgICAgIyAgSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgIDB4MDBhMjogMHgwMGJkLCAgICAgIyAgQ0VOVCBTSUdOCisgICAgMHgwMGEzOiAweDAwOWMsICAgICAjICBQT1VORCBTSUdOCisgICAgMHgwMGE0OiAweDAwY2YsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGE1OiAweDAwYmUsICAgICAjICBZRU4gU0lHTgorICAgIDB4MDBhNjogMHgwMGRkLCAgICAgIyAgQlJPS0VOIEJBUgorICAgIDB4MDBhNzogMHgwMGY1LCAgICAgIyAgU0VDVElPTiBTSUdOCisgICAgMHgwMGE4OiAweDAwZjksICAgICAjICBESUFFUkVTSVMKKyAgICAweDAwYTk6IDB4MDBiOCwgICAgICMgIENPUFlSSUdIVCBTSUdOCisgICAgMHgwMGFhOiAweDAwYTYsICAgICAjICBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBhYjogMHgwMGFlLCAgICAgIyAgTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwYWM6IDB4MDBhYSwgICAgICMgIE5PVCBTSUdOCisgICAgMHgwMGFkOiAweDAwZjAsICAgICAjICBTT0ZUIEhZUEhFTgorICAgIDB4MDBhZTogMHgwMGE5LCAgICAgIyAgUkVHSVNURVJFRCBTSUdOCisgICAgMHgwMGFmOiAweDAwZWUsICAgICAjICBNQUNST04KKyAgICAweDAwYjA6IDB4MDBmOCwgICAgICMgIERFR1JFRSBTSUdOCisgICAgMHgwMGIxOiAweDAwZjEsICAgICAjICBQTFVTLU1JTlVTIFNJR04KKyAgICAweDAwYjI6IDB4MDBmZCwgICAgICMgIFNVUEVSU0NSSVBUIFRXTworICAgIDB4MDBiMzogMHgwMGZjLCAgICAgIyAgU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICAweDAwYjQ6IDB4MDBlZiwgICAgICMgIEFDVVRFIEFDQ0VOVAorICAgIDB4MDBiNTogMHgwMGU2LCAgICAgIyAgTUlDUk8gU0lHTgorICAgIDB4MDBiNjogMHgwMGY0LCAgICAgIyAgUElMQ1JPVyBTSUdOCisgICAgMHgwMGI3OiAweDAwZmEsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwMGI4OiAweDAwZjcsICAgICAjICBDRURJTExBCisgICAgMHgwMGI5OiAweDAwZmIsICAgICAjICBTVVBFUlNDUklQVCBPTkUKKyAgICAweDAwYmE6IDB4MDBhNywgICAgICMgIE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBiYjogMHgwMGFmLCAgICAgIyAgUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMGJjOiAweDAwYWMsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAweDAwYmQ6IDB4MDBhYiwgICAgICMgIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorICAgIDB4MDBiZTogMHgwMGYzLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisgICAgMHgwMGJmOiAweDAwYTgsICAgICAjICBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgMHgwMGMwOiAweDAwYjcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAweDAwYzE6IDB4MDBiNSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIDB4MDBjMjogMHgwMGI2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwYzM6IDB4MDBjNywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIDB4MDBjNDogMHgwMDhlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBjNTogMHgwMDhmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwYzY6IDB4MDA5MiwgICAgICMgIExBVElOIENBUElUQUwgTElHQVRVUkUgQUUKKyAgICAweDAwYzc6IDB4MDA4MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgMHgwMGM4OiAweDAwZDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwYzk6IDB4MDA5MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIDB4MDBjYTogMHgwMGQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwY2I6IDB4MDBkMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwY2M6IDB4MDBkZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIDB4MDBjZDogMHgwMGQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgMHgwMGNlOiAweDAwZDcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBjZjogMHgwMGQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBkMDogMHgwMGQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICisgICAgMHgwMGQxOiAweDAwYTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwZDI6IDB4MDBlMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIDB4MDBkMzogMHgwMGUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgMHgwMGQ0OiAweDAwZTIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBkNTogMHgwMGU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgMHgwMGQ2OiAweDAwOTksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGQ3OiAweDAwOWUsICAgICAjICBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgMHgwMGQ4OiAweDAwOWQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMGQ5OiAweDAwZWIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAweDAwZGE6IDB4MDBlOSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIDB4MDBkYjogMHgwMGVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZGM6IDB4MDA5YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZGQ6IDB4MDBlZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgIDB4MDBkZTogMHgwMGU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZGY6IDB4MDBlMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCisgICAgMHgwMGUwOiAweDAwODUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgMHgwMGUxOiAweDAwYTAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgMHgwMGUyOiAweDAwODMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZTM6IDB4MDBjNiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAweDAwZTQ6IDB4MDA4NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGU1OiAweDAwODYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwZTY6IDB4MDA5MSwgICAgICMgIExBVElOIFNNQUxMIExJR0FUVVJFIEFFCisgICAgMHgwMGU3OiAweDAwODcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAweDAwZTg6IDB4MDA4YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwZTk6IDB4MDA4MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAweDAwZWE6IDB4MDA4OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlYjogMHgwMDg5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZWM6IDB4MDA4ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAweDAwZWQ6IDB4MDBhMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAweDAwZWU6IDB4MDA4YywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlZjogMHgwMDhiLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZjA6IDB4MDBkMCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFVEgKKyAgICAweDAwZjE6IDB4MDBhNCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwZjI6IDB4MDA5NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAweDAwZjM6IDB4MDBhMiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAweDAwZjQ6IDB4MDA5MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBmNTogMHgwMGU0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgIDB4MDBmNjogMHgwMDk0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZjc6IDB4MDBmNiwgICAgICMgIERJVklTSU9OIFNJR04KKyAgICAweDAwZjg6IDB4MDA5YiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMGY5OiAweDAwOTcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgMHgwMGZhOiAweDAwYTMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgMHgwMGZiOiAweDAwOTYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZmM6IDB4MDA4MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGZkOiAweDAwZWMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgMHgwMGZlOiAweDAwZTcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZmY6IDB4MDA5OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgMHgyMGFjOiAweDAwZDUsICAgICAjICBFVVJPIFNJR04KKyAgICAweDAxOTI6IDB4MDA5ZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworICAgIDB4MjAxNzogMHgwMGYyLCAgICAgIyAgRE9VQkxFIExPVyBMSU5FCisgICAgMHgyNTAwOiAweDAwYzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MjUwMjogMHgwMGIzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgyNTBjOiAweDAwZGEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1MTA6IDB4MDBiZiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgyNTE0OiAweDAwYzAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgyNTE4OiAweDAwZDksICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDI1MWM6IDB4MDBjMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1MjQ6IDB4MDBiNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjUyYzogMHgwMGMyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1MzQ6IDB4MDBjMSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzYzogMHgwMGM1LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTUwOiAweDAwY2QsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDI1NTE6IDB4MDBiYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDI1NTQ6IDB4MDBjOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1NTc6IDB4MDBiYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MjU1YTogMHgwMGM4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDI1NWQ6IDB4MDBiYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDI1NjA6IDB4MDBjYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTYzOiAweDAwYjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTY2OiAweDAwY2IsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1Njk6IDB4MDBjYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NmM6IDB4MDBjZSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1ODA6IDB4MDBkZiwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODQ6IDB4MDBkYywgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODg6IDB4MDBkYiwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDI1OTE6IDB4MDBiMCwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgyNTkyOiAweDAwYjEsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDI1OTM6IDB4MDBiMiwgICAgICMgIERBUksgU0hBREUKKyAgICAweDI1YTA6IDB4MDBmZSwgICAgICMgIEJMQUNLIFNRVUFSRQorfQpkaWZmIC0tZ2l0IGEvTGliL2ZpbGVjbXAucHkgYi9MaWIvZmlsZWNtcC5weQppbmRleCAwYjdjZTE2Li44OWE0ODM1IDEwMDY0NAotLS0gYS9MaWIvZmlsZWNtcC5weQorKysgYi9MaWIvZmlsZWNtcC5weQpAQCAtNjIsMTUgKzYyLDE0IEBACiAKIGRlZiBfZG9fY21wKGYxLCBmMik6CiAgICAgYnVmc2l6ZSA9IEJVRlNJWkUKLSAgICBmcDEgPSBvcGVuKGYxLCAncmInKQotICAgIGZwMiA9IG9wZW4oZjIsICdyYicpCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQotICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKKyAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKKyAgICAgICAgICAgIGlmIGIxICE9IGIyOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgbm90IGIxOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICMgRGlyZWN0b3J5IGNvbXBhcmlzb24gY2xhc3MuCiAjCmRpZmYgLS1naXQgYS9MaWIvZnJhY3Rpb25zLnB5IGIvTGliL2ZyYWN0aW9ucy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDJkNmY2NzIuLmEwZDg2YTQKLS0tIGEvTGliL2ZyYWN0aW9ucy5weQorKysgYi9MaWIvZnJhY3Rpb25zLnB5CkBAIC00LDYgKzQsNyBAQAogIiIiUmF0aW9uYWwsIGluZmluaXRlLXByZWNpc2lvbiwgcmVhbCBudW1iZXJzLiIiIgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKIGltcG9ydCBtYXRoCiBpbXBvcnQgbnVtYmVycwogaW1wb3J0IG9wZXJhdG9yCkBAIC0zMCw3NCArMzEsMTM1IEBACiAgICAgKD9QPHNpZ24+Wy0rXT8pICAgICAgICAgICAgIyBhbiBvcHRpb25hbCBzaWduLCB0aGVuCiAgICAgKD89XGR8XC5cZCkgICAgICAgICAgICAgICAgIyBsb29rYWhlYWQgZm9yIGRpZ2l0IG9yIC5kaWdpdAogICAgICg/UDxudW0+XGQqKSAgICAgICAgICAgICAgICMgbnVtZXJhdG9yIChwb3NzaWJseSBlbXB0eSkKLSAgICAoPzogICAgICAgICAgICAgICAgICAgICAgICAjIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsCi0gICAgICAgLyg/UDxkZW5vbT5cZCspICAgICAgICAgIyAvIGFuZCBkZW5vbWluYXRvcgorICAgICg/OiAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkKKyAgICAgICAoPzovKD9QPGRlbm9tPlxkKykpPyAgICAjIGFuIG9wdGlvbmFsIGRlbm9taW5hdG9yCiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcgotICAgICAgIFwuKD9QPGRlY2ltYWw+XGQqKSAgICAgICMgZGVjaW1hbCBwb2ludCBhbmQgZnJhY3Rpb25hbCBwYXJ0Ci0gICAgKT8KKyAgICAgICAoPzpcLig/UDxkZWNpbWFsPlxkKikpPyAjIGFuIG9wdGlvbmFsIGZyYWN0aW9uYWwgcGFydAorICAgICAgICg/OkUoP1A8ZXhwPlstK10/XGQrKSk/ICMgYW5kIG9wdGlvbmFsIGV4cG9uZW50CisgICAgKQogICAgIFxzKlxaICAgICAgICAgICAgICAgICAgICAgICMgYW5kIG9wdGlvbmFsIHdoaXRlc3BhY2UgdG8gZmluaXNoCi0iIiIsIHJlLlZFUkJPU0UpCisiIiIsIHJlLlZFUkJPU0UgfCByZS5JR05PUkVDQVNFKQogCiAKIGNsYXNzIEZyYWN0aW9uKFJhdGlvbmFsKToKICAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgcmF0aW9uYWwgbnVtYmVycy4KIAotICAgIEZyYWN0aW9uKDgsIDYpIHdpbGwgcHJvZHVjZSBhIHJhdGlvbmFsIG51bWJlciBlcXVpdmFsZW50IHRvCi0gICAgNC8zLiBCb3RoIGFyZ3VtZW50cyBtdXN0IGJlIEludGVncmFsLiBUaGUgbnVtZXJhdG9yIGRlZmF1bHRzIHRvIDAKLSAgICBhbmQgdGhlIGRlbm9taW5hdG9yIGRlZmF1bHRzIHRvIDEgc28gdGhhdCBGcmFjdGlvbigzKSA9PSAzIGFuZAotICAgIEZyYWN0aW9uKCkgPT0gMC4KKyAgICBJbiB0aGUgdHdvLWFyZ3VtZW50IGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yLCBGcmFjdGlvbig4LCA2KSB3aWxsCisgICAgcHJvZHVjZSBhIHJhdGlvbmFsIG51bWJlciBlcXVpdmFsZW50IHRvIDQvMy4gQm90aCBhcmd1bWVudHMgbXVzdAorICAgIGJlIFJhdGlvbmFsLiBUaGUgbnVtZXJhdG9yIGRlZmF1bHRzIHRvIDAgYW5kIHRoZSBkZW5vbWluYXRvcgorICAgIGRlZmF1bHRzIHRvIDEgc28gdGhhdCBGcmFjdGlvbigzKSA9PSAzIGFuZCBGcmFjdGlvbigpID09IDAuCiAKLSAgICBGcmFjdGlvbnMgY2FuIGFsc28gYmUgY29uc3RydWN0ZWQgZnJvbSBzdHJpbmdzIG9mIHRoZSBmb3JtCi0gICAgJ1stK10/WzAtOV0rKCgvfC4pWzAtOV0rKT8nLCBvcHRpb25hbGx5IHN1cnJvdW5kZWQgYnkgc3BhY2VzLgorICAgIEZyYWN0aW9ucyBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCBmcm9tOgorCisgICAgICAtIG51bWVyaWMgc3RyaW5ncyBzaW1pbGFyIHRvIHRob3NlIGFjY2VwdGVkIGJ5IHRoZQorICAgICAgICBmbG9hdCBjb25zdHJ1Y3RvciAoZm9yIGV4YW1wbGUsICctMi4zJyBvciAnMWUxMCcpCisKKyAgICAgIC0gc3RyaW5ncyBvZiB0aGUgZm9ybSAnMTIzLzQ1NicKKworICAgICAgLSBmbG9hdCBhbmQgRGVjaW1hbCBpbnN0YW5jZXMKKworICAgICAgLSBvdGhlciBSYXRpb25hbCBpbnN0YW5jZXMgKGluY2x1ZGluZyBpbnRlZ2VycykKIAogICAgICIiIgogCiAgICAgX19zbG90c19fID0gKCdfbnVtZXJhdG9yJywgJ19kZW5vbWluYXRvcicpCiAKICAgICAjIFdlJ3JlIGltbXV0YWJsZSwgc28gdXNlIF9fbmV3X18gbm90IF9faW5pdF9fCi0gICAgZGVmIF9fbmV3X18oY2xzLCBudW1lcmF0b3I9MCwgZGVub21pbmF0b3I9MSk6CisgICAgZGVmIF9fbmV3X18oY2xzLCBudW1lcmF0b3I9MCwgZGVub21pbmF0b3I9Tm9uZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdHMgYSBGcmFjdGlvbi4KIAotICAgICAgICBUYWtlcyBhIHN0cmluZyBsaWtlICczLzInIG9yICcxLjUnLCBhbm90aGVyIEZyYWN0aW9uLCBvciBhCi0gICAgICAgIG51bWVyYXRvci9kZW5vbWluYXRvciBwYWlyLgorICAgICAgICBUYWtlcyBhIHN0cmluZyBsaWtlICczLzInIG9yICcxLjUnLCBhbm90aGVyIFJhdGlvbmFsIGluc3RhbmNlLCBhCisgICAgICAgIG51bWVyYXRvci9kZW5vbWluYXRvciBwYWlyLCBvciBhIGZsb2F0LgorCisgICAgICAgIEV4YW1wbGVzCisgICAgICAgIC0tLS0tLS0tCisKKyAgICAgICAgPj4+IEZyYWN0aW9uKDEwLCAtOCkKKyAgICAgICAgRnJhY3Rpb24oLTUsIDQpCisgICAgICAgID4+PiBGcmFjdGlvbihGcmFjdGlvbigxLCA3KSwgNSkKKyAgICAgICAgRnJhY3Rpb24oMSwgMzUpCisgICAgICAgID4+PiBGcmFjdGlvbihGcmFjdGlvbigxLCA3KSwgRnJhY3Rpb24oMiwgMykpCisgICAgICAgIEZyYWN0aW9uKDMsIDE0KQorICAgICAgICA+Pj4gRnJhY3Rpb24oJzMxNCcpCisgICAgICAgIEZyYWN0aW9uKDMxNCwgMSkKKyAgICAgICAgPj4+IEZyYWN0aW9uKCctMzUvNCcpCisgICAgICAgIEZyYWN0aW9uKC0zNSwgNCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKCczLjE0MTUnKSAjIGNvbnZlcnNpb24gZnJvbSBudW1lcmljIHN0cmluZworICAgICAgICBGcmFjdGlvbig2MjgzLCAyMDAwKQorICAgICAgICA+Pj4gRnJhY3Rpb24oJy00N2UtMicpICMgc3RyaW5nIG1heSBpbmNsdWRlIGEgZGVjaW1hbCBleHBvbmVudAorICAgICAgICBGcmFjdGlvbigtNDcsIDEwMCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKDEuNDcpICAjIGRpcmVjdCBjb25zdHJ1Y3Rpb24gZnJvbSBmbG9hdCAoZXhhY3QgY29udmVyc2lvbikKKyAgICAgICAgRnJhY3Rpb24oNjYyMDI5MTQ1MjIzNDYyOSwgNDUwMzU5OTYyNzM3MDQ5NikKKyAgICAgICAgPj4+IEZyYWN0aW9uKDIuMjUpCisgICAgICAgIEZyYWN0aW9uKDksIDQpCisgICAgICAgID4+PiBGcmFjdGlvbihEZWNpbWFsKCcxLjQ3JykpCisgICAgICAgIEZyYWN0aW9uKDE0NywgMTAwKQogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmID0gc3VwZXIoRnJhY3Rpb24sIGNscykuX19uZXdfXyhjbHMpCiAKLSAgICAgICAgaWYgdHlwZShudW1lcmF0b3IpIG5vdCBpbiAoaW50LCBsb25nKSBhbmQgZGVub21pbmF0b3IgPT0gMToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobnVtZXJhdG9yLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICAjIEhhbmRsZSBjb25zdHJ1Y3Rpb24gZnJvbSBzdHJpbmdzLgotICAgICAgICAgICAgICAgIGlucHV0ID0gbnVtZXJhdG9yCi0gICAgICAgICAgICAgICAgbSA9IF9SQVRJT05BTF9GT1JNQVQubWF0Y2goaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgbSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAlcicgJSBpbnB1dCkKLSAgICAgICAgICAgICAgICBudW1lcmF0b3IgPSBtLmdyb3VwKCdudW0nKQotICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBtLmdyb3VwKCdkZWNpbWFsJykKLSAgICAgICAgICAgICAgICBpZiBkZWNpbWFsOgotICAgICAgICAgICAgICAgICAgICAjIFRoZSBsaXRlcmFsIGlzIGEgZGVjaW1hbCBudW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IGludChudW1lcmF0b3IgKyBkZWNpbWFsKQotICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IDEwKipsZW4oZGVjaW1hbCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoZSBsaXRlcmFsIGlzIGFuIGludGVnZXIgb3IgZnJhY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IGludChudW1lcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCBkZW5vbWluYXRvciB0byAxLgotICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciA9IGludChtLmdyb3VwKCdkZW5vbScpIG9yIDEpCisgICAgICAgIGlmIGRlbm9taW5hdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgUmF0aW9uYWwpOgorICAgICAgICAgICAgICAgIHNlbGYuX251bWVyYXRvciA9IG51bWVyYXRvci5udW1lcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IG51bWVyYXRvci5kZW5vbWluYXRvcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShudW1lcmF0b3IsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAjIEV4YWN0IGNvbnZlcnNpb24gZnJvbSBmbG9hdAorICAgICAgICAgICAgICAgIHZhbHVlID0gRnJhY3Rpb24uZnJvbV9mbG9hdChudW1lcmF0b3IpCisgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gdmFsdWUuX251bWVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gdmFsdWUuX2Rlbm9taW5hdG9yCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgRGVjaW1hbCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBGcmFjdGlvbi5mcm9tX2RlY2ltYWwobnVtZXJhdG9yKQorICAgICAgICAgICAgICAgIHNlbGYuX251bWVyYXRvciA9IHZhbHVlLl9udW1lcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IHZhbHVlLl9kZW5vbWluYXRvcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShudW1lcmF0b3IsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgICMgSGFuZGxlIGNvbnN0cnVjdGlvbiBmcm9tIHN0cmluZ3MuCisgICAgICAgICAgICAgICAgbSA9IF9SQVRJT05BTF9GT1JNQVQubWF0Y2gobnVtZXJhdG9yKQorICAgICAgICAgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IpCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gaW50KG0uZ3JvdXAoJ251bScpIG9yICcwJykKKyAgICAgICAgICAgICAgICBkZW5vbSA9IG0uZ3JvdXAoJ2Rlbm9tJykKKyAgICAgICAgICAgICAgICBpZiBkZW5vbToKKyAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBpbnQoZGVub20pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBtLmdyb3VwKCdkZWNpbWFsJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVjaW1hbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gMTAqKmxlbihkZWNpbWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gbnVtZXJhdG9yICogc2NhbGUgKyBpbnQoZGVjaW1hbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yICo9IHNjYWxlCisgICAgICAgICAgICAgICAgICAgIGV4cCA9IG0uZ3JvdXAoJ2V4cCcpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4cDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cCA9IGludChleHApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHAgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IgKj0gMTAqKmV4cAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvciAqPSAxMCoqLWV4cAogICAgICAgICAgICAgICAgIGlmIG0uZ3JvdXAoJ3NpZ24nKSA9PSAnLSc6CiAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciA9IC1udW1lcmF0b3IKIAotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgUmF0aW9uYWwpOgotICAgICAgICAgICAgICAgICMgSGFuZGxlIGNvcGllcyBmcm9tIG90aGVyIHJhdGlvbmFscy4gSW50ZWdyYWxzIGdldAotICAgICAgICAgICAgICAgICMgY2F1Z2h0IGhlcmUgdG9vLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgYmVjYXVzZQotICAgICAgICAgICAgICAgICMgZGVub21pbmF0b3IgaXMgYWxyZWFkeSAxLgotICAgICAgICAgICAgICAgIG90aGVyX3JhdGlvbmFsID0gbnVtZXJhdG9yCi0gICAgICAgICAgICAgICAgbnVtZXJhdG9yID0gb3RoZXJfcmF0aW9uYWwubnVtZXJhdG9yCi0gICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBvdGhlcl9yYXRpb25hbC5kZW5vbWluYXRvcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBhIFJhdGlvbmFsIGluc3RhbmNlIikKKworICAgICAgICBlbGlmIChpc2luc3RhbmNlKG51bWVyYXRvciwgUmF0aW9uYWwpIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZShkZW5vbWluYXRvciwgUmF0aW9uYWwpKToKKyAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IgPSAoCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLm51bWVyYXRvciAqIGRlbm9taW5hdG9yLmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLm51bWVyYXRvciAqIG51bWVyYXRvci5kZW5vbWluYXRvcgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYm90aCBhcmd1bWVudHMgc2hvdWxkIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmF0aW9uYWwgaW5zdGFuY2VzIikKIAogICAgICAgICBpZiBkZW5vbWluYXRvciA9PSAwOgogICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ0ZyYWN0aW9uKCVzLCAwKScgJSBudW1lcmF0b3IpCi0gICAgICAgIG51bWVyYXRvciA9IG9wZXJhdG9yLmluZGV4KG51bWVyYXRvcikKLSAgICAgICAgZGVub21pbmF0b3IgPSBvcGVyYXRvci5pbmRleChkZW5vbWluYXRvcikKICAgICAgICAgZyA9IGdjZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKQogICAgICAgICBzZWxmLl9udW1lcmF0b3IgPSBudW1lcmF0b3IgLy8gZwogICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IGRlbm9taW5hdG9yIC8vIGcKQEAgLTQ3MCw1NCArNTMyLDU4IEBACiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgbnVtYmVycy5Db21wbGV4KSBhbmQgYi5pbWFnID09IDA6CiAgICAgICAgICAgICBiID0gYi5yZWFsCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgZmxvYXQpOgotICAgICAgICAgICAgcmV0dXJuIGEgPT0gYS5mcm9tX2Zsb2F0KGIpCisgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKGIpIG9yIG1hdGguaXNpbmYoYik6CisgICAgICAgICAgICAgICAgIyBjb21wYXJpc29ucyB3aXRoIGFuIGluZmluaXR5IG9yIG5hbiBzaG91bGQgYmVoYXZlIGluCisgICAgICAgICAgICAgICAgIyB0aGUgc2FtZSB3YXkgZm9yIGFueSBmaW5pdGUgYSwgc28gdHJlYXQgYSBhcyB6ZXJvLgorICAgICAgICAgICAgICAgIHJldHVybiAwLjAgPT0gYgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYSA9PSBhLmZyb21fZmxvYXQoYikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgWFhYOiBJZiBiLl9fZXFfXyBpcyBpbXBsZW1lbnRlZCBsaWtlIHRoaXMgbWV0aG9kLCBpdCBtYXkKLSAgICAgICAgICAgICMgZ2l2ZSB0aGUgd3JvbmcgYW5zd2VyIGFmdGVyIGZsb2F0KGEpIGNoYW5nZXMgYSdzCi0gICAgICAgICAgICAjIHZhbHVlLiBCZXR0ZXIgd2F5cyBvZiBkb2luZyB0aGlzIGFyZSB3ZWxjb21lLgotICAgICAgICAgICAgcmV0dXJuIGZsb2F0KGEpID09IGIKKyAgICAgICAgICAgICMgU2luY2UgYSBkb2Vzbid0IGtub3cgaG93IHRvIGNvbXBhcmUgd2l0aCBiLCBsZXQncyBnaXZlIGIKKyAgICAgICAgICAgICMgYSBjaGFuY2UgdG8gY29tcGFyZSBpdHNlbGYgd2l0aCBhLgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKLSAgICBkZWYgX3N1YnRyYWN0QW5kQ29tcGFyZVRvWmVybyhhLCBiLCBvcCk6Ci0gICAgICAgICIiIkhlbHBlciBmdW5jdGlvbiBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMuCisgICAgZGVmIF9yaWNoY21wKHNlbGYsIG90aGVyLCBvcCk6CisgICAgICAgICIiIkhlbHBlciBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KIAotICAgICAgICBTdWJ0cmFjdHMgYiBmcm9tIGEsIGV4YWN0bHkgaWYgcG9zc2libGUsIGFuZCBjb21wYXJlcyB0aGUKLSAgICAgICAgcmVzdWx0IHdpdGggMCB1c2luZyBvcCwgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBjb21wYXJpc29uCi0gICAgICAgIHdvbid0IHJlY3Vyc2UuIElmIHRoZSBkaWZmZXJlbmNlIHJhaXNlcyBhIFR5cGVFcnJvciwgcmV0dXJucwotICAgICAgICBOb3RJbXBsZW1lbnRlZCBpbnN0ZWFkLgorICAgICAgICBJbXBsZW1lbnQgY29tcGFyaXNvbiBiZXR3ZWVuIGEgUmF0aW9uYWwgaW5zdGFuY2UgYHNlbGZgLCBhbmQKKyAgICAgICAgZWl0aGVyIGFub3RoZXIgUmF0aW9uYWwgaW5zdGFuY2Ugb3IgYSBmbG9hdCBgb3RoZXJgLiAgSWYKKyAgICAgICAgYG90aGVyYCBpcyBub3QgYSBSYXRpb25hbCBpbnN0YW5jZSBvciBhIGZsb2F0LCByZXR1cm4KKyAgICAgICAgTm90SW1wbGVtZW50ZWQuIGBvcGAgc2hvdWxkIGJlIG9uZSBvZiB0aGUgc2l4IHN0YW5kYXJkCisgICAgICAgIGNvbXBhcmlzb24gb3BlcmF0b3JzLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKGIsIG51bWJlcnMuQ29tcGxleCkgYW5kIGIuaW1hZyA9PSAwOgotICAgICAgICAgICAgYiA9IGIucmVhbAotICAgICAgICBpZiBpc2luc3RhbmNlKGIsIGZsb2F0KToKLSAgICAgICAgICAgIGIgPSBhLmZyb21fZmxvYXQoYikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBYWFg6IElmIGIgPDogUmVhbCBidXQgbm90IDw6IFJhdGlvbmFsLCB0aGlzIGlzIGxpa2VseQotICAgICAgICAgICAgIyB0byBmYWxsIGJhY2sgdG8gYSBmbG9hdC4gSWYgdGhlIGFjdHVhbCB2YWx1ZXMgZGlmZmVyIGJ5Ci0gICAgICAgICAgICAjIGxlc3MgdGhhbiBNSU5fRkxPQVQsIHRoaXMgY291bGQgZmFsc2VseSBjYWxsIHRoZW0gZXF1YWwsCi0gICAgICAgICAgICAjIHdoaWNoIHdvdWxkIG1ha2UgPD0gaW5jb25zaXN0ZW50IHdpdGggPT0uIEJldHRlciB3YXlzIG9mCi0gICAgICAgICAgICAjIGRvaW5nIHRoaXMgYXJlIHdlbGNvbWUuCi0gICAgICAgICAgICBkaWZmID0gYSAtIGIKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgIyBjb252ZXJ0IG90aGVyIHRvIGEgUmF0aW9uYWwgaW5zdGFuY2Ugd2hlcmUgcmVhc29uYWJsZS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgUmF0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIG9wKHNlbGYuX251bWVyYXRvciAqIG90aGVyLmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yICogb3RoZXIubnVtZXJhdG9yKQorICAgICAgICAjIGNvbXBhcmlzb25zIHdpdGggY29tcGxleCBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IsIGZvciBjb25zaXN0ZW5jeQorICAgICAgICAjIHdpdGggaW50PC0+Y29tcGxleCwgZmxvYXQ8LT5jb21wbGV4LCBhbmQgY29tcGxleDwtPmNvbXBsZXggY29tcGFyaXNvbnMuCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGNvbXBsZXgpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMiKQorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBmbG9hdCk6CisgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKG90aGVyKSBvciBtYXRoLmlzaW5mKG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3AoMC4wLCBvdGhlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9wKHNlbGYsIHNlbGYuZnJvbV9mbG9hdChvdGhlcikpCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgaWYgaXNpbnN0YW5jZShkaWZmLCBSYXRpb25hbCk6Ci0gICAgICAgICAgICByZXR1cm4gb3AoZGlmZi5udW1lcmF0b3IsIDApCi0gICAgICAgIHJldHVybiBvcChkaWZmLCAwKQogCiAgICAgZGVmIF9fbHRfXyhhLCBiKToKICAgICAgICAgIiIiYSA8IGIiIiIKLSAgICAgICAgcmV0dXJuIGEuX3N1YnRyYWN0QW5kQ29tcGFyZVRvWmVybyhiLCBvcGVyYXRvci5sdCkKKyAgICAgICAgcmV0dXJuIGEuX3JpY2hjbXAoYiwgb3BlcmF0b3IubHQpCiAKICAgICBkZWYgX19ndF9fKGEsIGIpOgogICAgICAgICAiIiJhID4gYiIiIgotICAgICAgICByZXR1cm4gYS5fc3VidHJhY3RBbmRDb21wYXJlVG9aZXJvKGIsIG9wZXJhdG9yLmd0KQorICAgICAgICByZXR1cm4gYS5fcmljaGNtcChiLCBvcGVyYXRvci5ndCkKIAogICAgIGRlZiBfX2xlX18oYSwgYik6CiAgICAgICAgICIiImEgPD0gYiIiIgotICAgICAgICByZXR1cm4gYS5fc3VidHJhY3RBbmRDb21wYXJlVG9aZXJvKGIsIG9wZXJhdG9yLmxlKQorICAgICAgICByZXR1cm4gYS5fcmljaGNtcChiLCBvcGVyYXRvci5sZSkKIAogICAgIGRlZiBfX2dlX18oYSwgYik6CiAgICAgICAgICIiImEgPj0gYiIiIgotICAgICAgICByZXR1cm4gYS5fc3VidHJhY3RBbmRDb21wYXJlVG9aZXJvKGIsIG9wZXJhdG9yLmdlKQorICAgICAgICByZXR1cm4gYS5fcmljaGNtcChiLCBvcGVyYXRvci5nZSkKIAogICAgIGRlZiBfX25vbnplcm9fXyhhKToKICAgICAgICAgIiIiYSAhPSAwIiIiCmRpZmYgLS1naXQgYS9MaWIvZnRwbGliLnB5IGIvTGliL2Z0cGxpYi5weQppbmRleCAyMmRlY2IyLi5jMWNlZjhlIDEwMDY0NAotLS0gYS9MaWIvZnRwbGliLnB5CisrKyBiL0xpYi9mdHBsaWIucHkKQEAgLTMzLDYgKzMzLDcgQEAKICMgTW9kaWZpZWQgYnkgSmFjayB0byB3b3JrIG9uIHRoZSBtYWMuCiAjIE1vZGlmaWVkIGJ5IFNpZWJyZW4gdG8gc3VwcG9ydCBkb2NzdHJpbmdzIGFuZCBQQVNWLgogIyBNb2RpZmllZCBieSBQaGlsIFNjaHdhcnR6IHRvIGFkZCBzdG9yYmluYXJ5IGFuZCBzdG9ybGluZXMgY2FsbGJhY2tzLgorIyBNb2RpZmllZCBieSBHaWFtcGFvbG8gUm9kb2xhJyB0byBhZGQgVExTIHN1cHBvcnQuCiAjCiAKIGltcG9ydCBvcwpAQCAtNDM0LDcgKzQzNSw3IEBACiAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKLSAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSk6CisgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CiAgICAgICAgICIiIlN0b3JlIGEgZmlsZSBpbiBiaW5hcnkgbW9kZS4gIEEgbmV3IHBvcnQgaXMgY3JlYXRlZCBmb3IgeW91LgogCiAgICAgICAgIEFyZ3M6CkBAIC00NDQsMTIgKzQ0NSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gYXQgb25jZS4gIFtkZWZhdWx0OiA4MTkyXQogICAgICAgICAgIGNhbGxiYWNrOiBBbiBvcHRpb25hbCBzaW5nbGUgcGFyYW1ldGVyIGNhbGxhYmxlIHRoYXQgaXMgY2FsbGVkIG9uCiAgICAgICAgICAgICAgICAgICAgIG9uIGVhY2ggYmxvY2sgb2YgZGF0YSBhZnRlciBpdCBpcyBzZW50LiAgW2RlZmF1bHQ6IE5vbmVdCisgICAgICAgICAgcmVzdDogUGFzc2VkIHRvIHRyYW5zZmVyY21kKCkuICBbZGVmYXVsdDogTm9uZV0KIAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCisgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQogICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKQEAgLTU3OSw2ICs1ODEsMTgxIEBACiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2sgPSBOb25lCiAKIAordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIEZUUF9UTFMoRlRQKToKKyAgICAgICAgJycnQSBGVFAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBUTFMgc3VwcG9ydCB0byBGVFAgYXMgZGVzY3JpYmVkCisgICAgICAgIGluIFJGQy00MjE3LgorCisgICAgICAgIENvbm5lY3QgYXMgdXN1YWwgdG8gcG9ydCAyMSBpbXBsaWNpdGx5IHNlY3VyaW5nIHRoZSBGVFAgY29udHJvbAorICAgICAgICBjb25uZWN0aW9uIGJlZm9yZSBhdXRoZW50aWNhdGluZy4KKworICAgICAgICBTZWN1cmluZyB0aGUgZGF0YSBjb25uZWN0aW9uIHJlcXVpcmVzIHVzZXIgdG8gZXhwbGljaXRseSBhc2sKKyAgICAgICAgZm9yIGl0IGJ5IGNhbGxpbmcgcHJvdF9wKCkgbWV0aG9kLgorCisgICAgICAgIFVzYWdlIGV4YW1wbGU6CisgICAgICAgID4+PiBmcm9tIGZ0cGxpYiBpbXBvcnQgRlRQX1RMUworICAgICAgICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5weXRob24ub3JnJykKKyAgICAgICAgPj4+IGZ0cHMubG9naW4oKSAgIyBsb2dpbiBhbm9uaW1vdXNseSBwcmV2aW91c2x5IHNlY3VyaW5nIGNvbnRyb2wgY2hhbm5lbAorICAgICAgICAnMjMwIEd1ZXN0IGxvZ2luIG9rLCBhY2Nlc3MgcmVzdHJpY3Rpb25zIGFwcGx5LicKKyAgICAgICAgPj4+IGZ0cHMucHJvdF9wKCkgICMgc3dpdGNoIHRvIHNlY3VyZSBkYXRhIGNvbm5lY3Rpb24KKyAgICAgICAgJzIwMCBQcm90ZWN0aW9uIGxldmVsIHNldCB0byBQJworICAgICAgICA+Pj4gZnRwcy5yZXRybGluZXMoJ0xJU1QnKSAgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IHNlY3VyZWx5CisgICAgICAgIHRvdGFsIDkKKyAgICAgICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4KKyAgICAgICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4uCisgICAgICAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBiaW4KKyAgICAgICAgZHJ3eHIteHIteCAgIDIgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IGV0YworICAgICAgICBkLXd4cnd4ci14ICAgMiBmdHAgICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgIDUgMTM6NDMgaW5jb21pbmcKKyAgICAgICAgZHJ3eHIteHIteCAgIDIgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgTm92IDE3ICAxOTkzIGxpYgorICAgICAgICBkcnd4ci14ci14ICAgNiAxMDk0ICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgMTMgMTk6MDcgcHViCisgICAgICAgIGRyd3hyLXhyLXggICAzIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCB1c3IKKyAgICAgICAgLXJ3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAzMTIgQXVnICAxICAxOTk0IHdlbGNvbWUubXNnCisgICAgICAgICcyMjYgVHJhbnNmZXIgY29tcGxldGUuJworICAgICAgICA+Pj4gZnRwcy5xdWl0KCkKKyAgICAgICAgJzIyMSBHb29kYnllLicKKyAgICAgICAgPj4+CisgICAgICAgICcnJworICAgICAgICBzc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PScnLCB1c2VyPScnLCBwYXNzd2Q9JycsIGFjY3Q9JycsIGtleWZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPU5vbmUsIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQorICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBzZWxmLl9wcm90X3AgPSBGYWxzZQorICAgICAgICAgICAgRlRQLl9faW5pdF9fKHNlbGYsIGhvc3QsIHVzZXIsIHBhc3N3ZCwgYWNjdCwgdGltZW91dCkKKworICAgICAgICBkZWYgbG9naW4oc2VsZiwgdXNlcj0nJywgcGFzc3dkPScnLCBhY2N0PScnLCBzZWN1cmU9VHJ1ZSk6CisgICAgICAgICAgICBpZiBzZWN1cmUgYW5kIG5vdCBpc2luc3RhbmNlKHNlbGYuc29jaywgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgc2VsZi5hdXRoKCkKKyAgICAgICAgICAgIHJldHVybiBGVFAubG9naW4oc2VsZiwgdXNlciwgcGFzc3dkLCBhY2N0KQorCisgICAgICAgIGRlZiBhdXRoKHNlbGYpOgorICAgICAgICAgICAgJycnU2V0IHVwIHNlY3VyZSBjb250cm9sIGNvbm5lY3Rpb24gYnkgdXNpbmcgVExTL1NTTC4nJycKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zb2NrLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBbHJlYWR5IHVzaW5nIFRMUyIpCisgICAgICAgICAgICBpZiBzZWxmLnNzbF92ZXJzaW9uID09IHNzbC5QUk9UT0NPTF9UTFN2MToKKyAgICAgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdBVVRIIFRMUycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggU1NMJykKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKG1vZGU9J3JiJykKKyAgICAgICAgICAgIHJldHVybiByZXNwCisKKyAgICAgICAgZGVmIHByb3RfcChzZWxmKToKKyAgICAgICAgICAgICcnJ1NldCB1cCBzZWN1cmUgZGF0YSBjb25uZWN0aW9uLicnJworICAgICAgICAgICAgIyBQUk9UIGRlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGRhdGEgY2hhbm5lbCBpcyB0byBiZSBwcm90ZWN0ZWQuCisgICAgICAgICAgICAjIFRob3VnaCBSRkMtMjIyOCBkZWZpbmVzIGZvdXIgcG9zc2libGUgcHJvdGVjdGlvbiBsZXZlbHMsCisgICAgICAgICAgICAjIFJGQy00MjE3IG9ubHkgcmVjb21tZW5kcyB0d28sIENsZWFyIGFuZCBQcml2YXRlLgorICAgICAgICAgICAgIyBDbGVhciAoUFJPVCBDKSBtZWFucyB0aGF0IG5vIHNlY3VyaXR5IGlzIHRvIGJlIHVzZWQgb24gdGhlCisgICAgICAgICAgICAjIGRhdGEtY2hhbm5lbCwgUHJpdmF0ZSAoUFJPVCBQKSBtZWFucyB0aGF0IHRoZSBkYXRhLWNoYW5uZWwKKyAgICAgICAgICAgICMgc2hvdWxkIGJlIHByb3RlY3RlZCBieSBUTFMuCisgICAgICAgICAgICAjIFBCU1ogY29tbWFuZCBNVVNUIHN0aWxsIGJlIGlzc3VlZCwgYnV0IG11c3QgaGF2ZSBhIHBhcmFtZXRlciBvZgorICAgICAgICAgICAgIyAnMCcgdG8gaW5kaWNhdGUgdGhhdCBubyBidWZmZXJpbmcgaXMgdGFraW5nIHBsYWNlIGFuZCB0aGUgZGF0YQorICAgICAgICAgICAgIyBjb25uZWN0aW9uIHNob3VsZCBub3QgYmUgZW5jYXBzdWxhdGVkLgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdQQlNaIDAnKQorICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnUFJPVCBQJykKKyAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXNwCisKKyAgICAgICAgZGVmIHByb3RfYyhzZWxmKToKKyAgICAgICAgICAgICcnJ1NldCB1cCBjbGVhciB0ZXh0IGRhdGEgY29ubmVjdGlvbi4nJycKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ1BST1QgQycpCisgICAgICAgICAgICBzZWxmLl9wcm90X3AgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICAjIC0tLSBPdmVycmlkZGVuIEZUUCBtZXRob2RzCisKKyAgICAgICAgZGVmIG50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3Q9Tm9uZSk6CisgICAgICAgICAgICBjb25uLCBzaXplID0gRlRQLm50cmFuc2ZlcmNtZChzZWxmLCBjbWQsIHJlc3QpCisgICAgICAgICAgICBpZiBzZWxmLl9wcm90X3A6CisgICAgICAgICAgICAgICAgY29ubiA9IHNzbC53cmFwX3NvY2tldChjb25uLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4sIHNpemUKKworICAgICAgICBkZWYgcmV0cmJpbmFyeShzZWxmLCBjbWQsIGNhbGxiYWNrLCBibG9ja3NpemU9ODE5MiwgcmVzdD1Ob25lKToKKyAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KGJsb2Nrc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKKworICAgICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKKyAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKKyAgICAgICAgICAgIGZwID0gY29ubi5tYWtlZmlsZSgncmInKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQgJypyZXRyKicsIHJlcHIobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKKyAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQorCisgICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQorICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKKworICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQ1JMRjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQ1JMRjogYnVmID0gYnVmWzotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIENSTEYKKyAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKKyAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCisKKyAgICBfX2FsbF9fLmFwcGVuZCgnRlRQX1RMUycpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgSU9FcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKKworCiBfMTUwX3JlID0gTm9uZQogCiBkZWYgcGFyc2UxNTAocmVzcCk6CmRpZmYgLS1naXQgYS9MaWIvZnVuY3Rvb2xzLnB5IGIvTGliL2Z1bmN0b29scy5weQppbmRleCBhNTRmMDMwLi4xYTFmMjJlIDEwMDY0NAotLS0gYS9MaWIvZnVuY3Rvb2xzLnB5CisrKyBiL0xpYi9mdW5jdG9vbHMucHkKQEAgLTQ5LDMgKzQ5LDUxIEBACiAgICAgIiIiCiAgICAgcmV0dXJuIHBhcnRpYWwodXBkYXRlX3dyYXBwZXIsIHdyYXBwZWQ9d3JhcHBlZCwKICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZD1hc3NpZ25lZCwgdXBkYXRlZD11cGRhdGVkKQorCitkZWYgdG90YWxfb3JkZXJpbmcoY2xzKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgdGhhdCBmaWxscyBpbiBtaXNzaW5nIG9yZGVyaW5nIG1ldGhvZHMiIiIKKyAgICBjb252ZXJ0ID0geworICAgICAgICAnX19sdF9fJzogWygnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBvdGhlciA8IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgb3RoZXIgPCBzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPCBvdGhlcildLAorICAgICAgICAnX19sZV9fJzogWygnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBvdGhlciA8PSBzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IG90aGVyIDw9IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA8PSBvdGhlcildLAorICAgICAgICAnX19ndF9fJzogWygnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBvdGhlciA+IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgb3RoZXIgPiBzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPiBvdGhlcildLAorICAgICAgICAnX19nZV9fJzogWygnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBvdGhlciA+PSBzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IG90aGVyID49IHNlbGYpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgfQorICAgIHJvb3RzID0gc2V0KGRpcihjbHMpKSAmIHNldChjb252ZXJ0KQorICAgIGlmIG5vdCByb290czoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIG9yZGVyaW5nIG9wZXJhdGlvbjogPCA+IDw9ID49JykKKyAgICByb290ID0gbWF4KHJvb3RzKSAgICAgICAjIHByZWZlciBfX2x0X18gdG8gX19sZV9fIHRvIF9fZ3RfXyB0byBfX2dlX18KKyAgICBmb3Igb3BuYW1lLCBvcGZ1bmMgaW4gY29udmVydFtyb290XToKKyAgICAgICAgaWYgb3BuYW1lIG5vdCBpbiByb290czoKKyAgICAgICAgICAgIG9wZnVuYy5fX25hbWVfXyA9IG9wbmFtZQorICAgICAgICAgICAgb3BmdW5jLl9fZG9jX18gPSBnZXRhdHRyKGludCwgb3BuYW1lKS5fX2RvY19fCisgICAgICAgICAgICBzZXRhdHRyKGNscywgb3BuYW1lLCBvcGZ1bmMpCisgICAgcmV0dXJuIGNscworCitkZWYgY21wX3RvX2tleShteWNtcCk6CisgICAgIiIiQ29udmVydCBhIGNtcD0gZnVuY3Rpb24gaW50byBhIGtleT0gZnVuY3Rpb24iIiIKKyAgICBjbGFzcyBLKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosICphcmdzKToKKyAgICAgICAgICAgIHNlbGYub2JqID0gb2JqCisgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopIDwgMAorICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA+IDAKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPT0gMAorICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA8PSAwCisgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopID49IDAKKyAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgIT0gMAorICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2hhc2ggbm90IGltcGxlbWVudGVkJykKKyAgICByZXR1cm4gSwpkaWZmIC0tZ2l0IGEvTGliL2dlbmVyaWNwYXRoLnB5IGIvTGliL2dlbmVyaWNwYXRoLnB5CmluZGV4IDczZDdiMjYuLmEwYmY2MDEgMTAwNjQ0Ci0tLSBhL0xpYi9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvZ2VuZXJpY3BhdGgucHkKQEAgLTE1LDcgKzE1LDcgQEAKIGRlZiBleGlzdHMocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIEZhbHNlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6Ci0gICAgICAgIHN0ID0gb3Muc3RhdChwYXRoKQorICAgICAgICBvcy5zdGF0KHBhdGgpCiAgICAgZXhjZXB0IG9zLmVycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL2dldG9wdC5weSBiL0xpYi9nZXRvcHQucHkKaW5kZXggZjc2ZDNkZS4uMjUxZDg5YyAxMDA2NDQKLS0tIGEvTGliL2dldG9wdC5weQorKysgYi9MaWIvZ2V0b3B0LnB5CkBAIC0xLDQgKzEsMyBAQAotIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQogIiIiUGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucy4KIAogVGhpcyBtb2R1bGUgaGVscHMgc2NyaXB0cyB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbgpAQCAtMjAsNyArMTksNyBAQAogIyBHZXJyaXQgSG9sbCA8Z2Vycml0QG5sLmxpbnV4Lm9yZz4gbW92ZWQgdGhlIHN0cmluZy1iYXNlZCBleGNlcHRpb25zCiAjIHRvIGNsYXNzLWJhc2VkIGV4Y2VwdGlvbnMuCiAjCi0jIFBldGVyIMVzdHJhbmQgPGFzdHJhbmRAbHlzYXRvci5saXUuc2U+IGFkZGVkIGdudV9nZXRvcHQoKS4KKyMgUGV0ZXIgQXN0cmFuZCA8YXN0cmFuZEBseXNhdG9yLmxpdS5zZT4gYWRkZWQgZ251X2dldG9wdCgpLgogIwogIyBUT0RPIGZvciBnbnVfZ2V0b3B0KCk6CiAjCkBAIC0xMzAsNyArMTI5LDcgQEAKIAogICAgICAgICBpZiBhcmdzWzBdWzoyXSA9PSAnLS0nOgogICAgICAgICAgICAgb3B0cywgYXJncyA9IGRvX2xvbmdzKG9wdHMsIGFyZ3NbMF1bMjpdLCBsb25nb3B0cywgYXJnc1sxOl0pCi0gICAgICAgIGVsaWYgYXJnc1swXVs6MV0gPT0gJy0nOgorICAgICAgICBlbGlmIGFyZ3NbMF1bOjFdID09ICctJyBhbmQgYXJnc1swXSAhPSAnLSc6CiAgICAgICAgICAgICBvcHRzLCBhcmdzID0gZG9fc2hvcnRzKG9wdHMsIGFyZ3NbMF1bMTpdLCBzaG9ydG9wdHMsIGFyZ3NbMTpdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgYWxsX29wdGlvbnNfZmlyc3Q6CmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDNjYTdmYjIuLjQ3NDVlYTkgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICMgSWYgdGhhdCBmYWlscywgc2VlIGlmIHN0ZGluIGNhbiBiZSBjb250cm9sbGVkLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcGFzc3dkID0gZmFsbGJhY2tfZ2V0cGFzcyhwcm9tcHQsIHN0cmVhbSkKICAgICAgICAgaW5wdXQgPSBzeXMuc3RkaW4KICAgICAgICAgaWYgbm90IHN0cmVhbToKZGlmZiAtLWdpdCBhL0xpYi9nZXR0ZXh0LnB5IGIvTGliL2dldHRleHQucHkKaW5kZXggOTBlYmM1MS4uOTk3MzUzNSAxMDA2NDQKLS0tIGEvTGliL2dldHRleHQucHkKKysrIGIvTGliL2dldHRleHQucHkKQEAgLTQ2NywxNSArNDY3LDE1IEBACiAgICAgICAgIGlmIGZhbGxiYWNrOgogICAgICAgICAgICAgcmV0dXJuIE51bGxUcmFuc2xhdGlvbnMoKQogICAgICAgICByYWlzZSBJT0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKLSAgICAjIFRCRDogZG8gd2UgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgZmlsZSBwb2ludGVyIGdldHRpbmcgY29sbGVjdGVkPwogICAgICMgQXZvaWQgb3BlbmluZywgcmVhZGluZywgYW5kIHBhcnNpbmcgdGhlIC5tbyBmaWxlIGFmdGVyIGl0J3MgYmVlbiBkb25lCiAgICAgIyBvbmNlLgogICAgIHJlc3VsdCA9IE5vbmUKICAgICBmb3IgbW9maWxlIGluIG1vZmlsZXM6Ci0gICAgICAgIGtleSA9IG9zLnBhdGguYWJzcGF0aChtb2ZpbGUpCisgICAgICAgIGtleSA9IChjbGFzc18sIG9zLnBhdGguYWJzcGF0aChtb2ZpbGUpKQogICAgICAgICB0ID0gX3RyYW5zbGF0aW9ucy5nZXQoa2V5KQogICAgICAgICBpZiB0IGlzIE5vbmU6Ci0gICAgICAgICAgICB0ID0gX3RyYW5zbGF0aW9ucy5zZXRkZWZhdWx0KGtleSwgY2xhc3NfKG9wZW4obW9maWxlLCAncmInKSkpCisgICAgICAgICAgICB3aXRoIG9wZW4obW9maWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB0ID0gX3RyYW5zbGF0aW9ucy5zZXRkZWZhdWx0KGtleSwgY2xhc3NfKGZwKSkKICAgICAgICAgIyBDb3B5IHRoZSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gYWxsb3cgc2V0dGluZyBmYWxsYmFja3MgYW5kCiAgICAgICAgICMgb3V0cHV0IGNoYXJzZXQuIEFsbCBvdGhlciBpbnN0YW5jZSBkYXRhIGlzIHNoYXJlZCB3aXRoIHRoZQogICAgICAgICAjIGNhY2hlZCBvYmplY3QuCmRpZmYgLS1naXQgYS9MaWIvZ3ppcC5weSBiL0xpYi9nemlwLnB5CmluZGV4IGZjMjFhZDQuLjJiY2I0ZGIgMTAwNjQ0Ci0tLSBhL0xpYi9nemlwLnB5CisrKyBiL0xpYi9nemlwLnB5CkBAIC01LDggKzUsOSBAQAogCiAjIGJhc2VkIG9uIEFuZHJldyBLdWNobGluZydzIG1pbmlnemlwLnB5IGRpc3RyaWJ1dGVkIHdpdGggdGhlIHpsaWIgbW9kdWxlCiAKLWltcG9ydCBzdHJ1Y3QsIHN5cywgdGltZQoraW1wb3J0IHN0cnVjdCwgc3lzLCB0aW1lLCBvcwogaW1wb3J0IHpsaWIKK2ltcG9ydCBpbwogaW1wb3J0IF9fYnVpbHRpbl9fCiAKIF9fYWxsX18gPSBbIkd6aXBGaWxlIiwib3BlbiJdCkBAIC0zMiw3ICszMyw3IEBACiAgICAgIiIiCiAgICAgcmV0dXJuIEd6aXBGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKQogCi1jbGFzcyBHemlwRmlsZToKK2NsYXNzIEd6aXBGaWxlKGlvLkJ1ZmZlcmVkSU9CYXNlKToKICAgICAiIiJUaGUgR3ppcEZpbGUgY2xhc3Mgc2ltdWxhdGVzIG1vc3Qgb2YgdGhlIG1ldGhvZHMgb2YgYSBmaWxlIG9iamVjdCB3aXRoCiAgICAgdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcmVhZGludG8oKSBhbmQgdHJ1bmNhdGUoKSBtZXRob2RzLgogCkBAIC00Miw3ICs0Myw3IEBACiAgICAgbWF4X3JlYWRfY2h1bmsgPSAxMCAqIDEwMjQgKiAxMDI0ICAgIyAxME1iCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Tm9uZSwgbW9kZT1Ob25lLAotICAgICAgICAgICAgICAgICBjb21wcmVzc2xldmVsPTksIGZpbGVvYmo9Tm9uZSk6CisgICAgICAgICAgICAgICAgIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lLCBtdGltZT1Ob25lKToKICAgICAgICAgIiIiQ29uc3RydWN0b3IgZm9yIHRoZSBHemlwRmlsZSBjbGFzcy4KIAogICAgICAgICBBdCBsZWFzdCBvbmUgb2YgZmlsZW9iaiBhbmQgZmlsZW5hbWUgbXVzdCBiZSBnaXZlbiBhCkBAIC02OSw2ICs3MCwxNSBAQAogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCiAgICAgICAgIGFuZCA5IGlzIHNsb3dlc3QgYW5kIHByb2R1Y2VzIHRoZSBtb3N0IGNvbXByZXNzaW9uLiAgVGhlIGRlZmF1bHQgaXMgOS4KIAorICAgICAgICBUaGUgbXRpbWUgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgbnVtZXJpYyB0aW1lc3RhbXAgdG8gYmUgd3JpdHRlbgorICAgICAgICB0byB0aGUgc3RyZWFtIHdoZW4gY29tcHJlc3NpbmcuICBBbGwgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbXMKKyAgICAgICAgYXJlIHJlcXVpcmVkIHRvIGNvbnRhaW4gYSB0aW1lc3RhbXAuICBJZiBvbWl0dGVkIG9yIE5vbmUsIHRoZQorICAgICAgICBjdXJyZW50IHRpbWUgaXMgdXNlZC4gIFRoaXMgbW9kdWxlIGlnbm9yZXMgdGhlIHRpbWVzdGFtcCB3aGVuCisgICAgICAgIGRlY29tcHJlc3Npbmc7IGhvd2V2ZXIsIHNvbWUgcHJvZ3JhbXMsIHN1Y2ggYXMgZ3VuemlwLCBtYWtlIHVzZQorICAgICAgICBvZiBpdC4gIFRoZSBmb3JtYXQgb2YgdGhlIHRpbWVzdGFtcCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZQorICAgICAgICByZXR1cm4gdmFsdWUgb2YgdGltZS50aW1lKCkgYW5kIG9mIHRoZSBzdF9tdGltZSBtZW1iZXIgb2YgdGhlCisgICAgICAgIG9iamVjdCByZXR1cm5lZCBieSBvcy5zdGF0KCkuCisKICAgICAgICAgIiIiCiAKICAgICAgICAgIyBndWFyYW50ZWUgdGhlIGZpbGUgaXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlIG9uIHBsYXRmb3JtcwpAQCAtODgsOCArOTgsMTIgQEAKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFJFQUQKICAgICAgICAgICAgICMgU2V0IGZsYWcgaW5kaWNhdGluZyBzdGFydCBvZiBhIG5ldyBtZW1iZXIKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCisgICAgICAgICAgICAjIEJ1ZmZlciBkYXRhIHJlYWQgZnJvbSBnemlwIGZpbGUuIGV4dHJhc3RhcnQgaXMgb2Zmc2V0IGluCisgICAgICAgICAgICAjIHN0cmVhbSB3aGVyZSBidWZmZXIgc3RhcnRzLiBleHRyYXNpemUgaXMgbnVtYmVyIG9mCisgICAgICAgICAgICAjIGJ5dGVzIHJlbWFpbmluZyBpbiBidWZmZXIgZnJvbSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4KICAgICAgICAgICAgIHNlbGYuZXh0cmFidWYgPSAiIgogICAgICAgICAgICAgc2VsZi5leHRyYXNpemUgPSAwCisgICAgICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSAwCiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBmaWxlbmFtZQogICAgICAgICAgICAgIyBTdGFydHMgc21hbGwsIHNjYWxlcyBleHBvbmVudGlhbGx5CiAgICAgICAgICAgICBzZWxmLm1pbl9yZWFkc2l6ZSA9IDEwMApAQCAtMTA3LDYgKzEyMSw3IEBACiAKICAgICAgICAgc2VsZi5maWxlb2JqID0gZmlsZW9iagogICAgICAgICBzZWxmLm9mZnNldCA9IDAKKyAgICAgICAgc2VsZi5tdGltZSA9IG10aW1lCiAKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgogICAgICAgICAgICAgc2VsZi5fd3JpdGVfZ3ppcF9oZWFkZXIoKQpAQCAtMTIzLDYgKzEzOCwxMyBAQAogICAgICAgICBzID0gcmVwcihzZWxmLmZpbGVvYmopCiAgICAgICAgIHJldHVybiAnPGd6aXAgJyArIHNbMTotMV0gKyAnICcgKyBoZXgoaWQoc2VsZikpICsgJz4nCiAKKyAgICBkZWYgX2NoZWNrX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiUmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgdW5kZXJseWluZyBmaWxlIG9iamVjdCBoYXMgYmVlbiBjbG9zZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4nKQorCiAgICAgZGVmIF9pbml0X3dyaXRlKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgc2VsZi5uYW1lID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKCIiKSAmIDB4ZmZmZmZmZmZMCkBAIC0xMzMsMTQgKzE1NSwxNyBAQAogICAgIGRlZiBfd3JpdGVfZ3ppcF9oZWFkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSgnXDAzN1wyMTMnKSAgICAgICAgICAgICAjIG1hZ2ljIGhlYWRlcgogICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoJ1wwMTAnKSAgICAgICAgICAgICAgICAgIyBjb21wcmVzc2lvbiBtZXRob2QKLSAgICAgICAgZm5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubmFtZSkKICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoIi5neiIpOgogICAgICAgICAgICAgZm5hbWUgPSBmbmFtZVs6LTNdCiAgICAgICAgIGZsYWdzID0gMAogICAgICAgICBpZiBmbmFtZToKICAgICAgICAgICAgIGZsYWdzID0gRk5BTUUKICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKGNocihmbGFncykpCi0gICAgICAgIHdyaXRlMzJ1KHNlbGYuZmlsZW9iaiwgbG9uZyh0aW1lLnRpbWUoKSkpCisgICAgICAgIG10aW1lID0gc2VsZi5tdGltZQorICAgICAgICBpZiBtdGltZSBpcyBOb25lOgorICAgICAgICAgICAgbXRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICB3cml0ZTMydShzZWxmLmZpbGVvYmosIGxvbmcobXRpbWUpKQogICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoJ1wwMDInKQogICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoJ1wzNzcnKQogICAgICAgICBpZiBmbmFtZToKQEAgLTE1OCwxMCArMTgzLDEwIEBACiAgICAgICAgIGlmIG1ldGhvZCAhPSA4OgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvciwgJ1Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJwogICAgICAgICBmbGFnID0gb3JkKCBzZWxmLmZpbGVvYmoucmVhZCgxKSApCi0gICAgICAgICMgbW9kdGltZSA9IHNlbGYuZmlsZW9iai5yZWFkKDQpCisgICAgICAgIHNlbGYubXRpbWUgPSByZWFkMzIoc2VsZi5maWxlb2JqKQogICAgICAgICAjIGV4dHJhZmxhZyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCiAgICAgICAgICMgb3MgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQotICAgICAgICBzZWxmLmZpbGVvYmoucmVhZCg2KQorICAgICAgICBzZWxmLmZpbGVvYmoucmVhZCgyKQogCiAgICAgICAgIGlmIGZsYWcgJiBGRVhUUkE6CiAgICAgICAgICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSBleHRyYSBmaWVsZCwgaWYgcHJlc2VudApAQCAtMTgzLDIxICsyMDgsMjkgQEAKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgogICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCiAKLQogICAgIGRlZiB3cml0ZShzZWxmLGRhdGEpOgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gV1JJVEU6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJ3cml0ZSgpIG9uIHJlYWQtb25seSBHemlwRmlsZSBvYmplY3QiKQogCiAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIKKworICAgICAgICAjIENvbnZlcnQgZGF0YSB0eXBlIGlmIGNhbGxlZCBieSBpby5CdWZmZXJlZFdyaXRlci4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBtZW1vcnl2aWV3KToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQorCiAgICAgICAgIGlmIGxlbihkYXRhKSA+IDA6CiAgICAgICAgICAgICBzZWxmLnNpemUgPSBzZWxmLnNpemUgKyBsZW4oZGF0YSkKICAgICAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihkYXRhLCBzZWxmLmNyYykgJiAweGZmZmZmZmZmTAogICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKCBzZWxmLmNvbXByZXNzLmNvbXByZXNzKGRhdGEpICkKICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IGxlbihkYXRhKQogCisgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKwogICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCkBAIC0yMjIsMTUgKzI1NSwxNCBAQAogICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCiAKLSAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmWzpzaXplXQotICAgICAgICBzZWxmLmV4dHJhYnVmID0gc2VsZi5leHRyYWJ1ZltzaXplOl0KKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKKyAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KICAgICAgICAgc2VsZi5leHRyYXNpemUgPSBzZWxmLmV4dHJhc2l6ZSAtIHNpemUKIAogICAgICAgICBzZWxmLm9mZnNldCArPSBzaXplCiAgICAgICAgIHJldHVybiBjaHVuawogCiAgICAgZGVmIF91bnJlYWQoc2VsZiwgYnVmKToKLSAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IGJ1ZiArIHNlbGYuZXh0cmFidWYKICAgICAgICAgc2VsZi5leHRyYXNpemUgPSBsZW4oYnVmKSArIHNlbGYuZXh0cmFzaXplCiAgICAgICAgIHNlbGYub2Zmc2V0IC09IGxlbihidWYpCiAKQEAgLTI4Niw4ICszMTgsMTAgQEAKIAogICAgIGRlZiBfYWRkX3JlYWRfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmZMCi0gICAgICAgIHNlbGYuZXh0cmFidWYgPSBzZWxmLmV4dHJhYnVmICsgZGF0YQorICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCAtIHNlbGYuZXh0cmFzdGFydAorICAgICAgICBzZWxmLmV4dHJhYnVmID0gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6XSArIGRhdGEKICAgICAgICAgc2VsZi5leHRyYXNpemUgPSBzZWxmLmV4dHJhc2l6ZSArIGxlbihkYXRhKQorICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSBzZWxmLm9mZnNldAogICAgICAgICBzZWxmLnNpemUgPSBzZWxmLnNpemUgKyBsZW4oZGF0YSkKIAogICAgIGRlZiBfcmVhZF9lb2Yoc2VsZik6CkBAIC0zMDUsNiArMzM5LDE5IEBACiAgICAgICAgIGVsaWYgaXNpemUgIT0gKHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmZMKToKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IsICJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiCiAKKyAgICAgICAgIyBHemlwIGZpbGVzIGNhbiBiZSBwYWRkZWQgd2l0aCB6ZXJvZXMgYW5kIHN0aWxsIGhhdmUgYXJjaGl2ZXMuCisgICAgICAgICMgQ29uc3VtZSBhbGwgemVybyBieXRlcyBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdAorICAgICAgICAjIG5vbi16ZXJvIGJ5dGUuIFNlZSBodHRwOi8vd3d3Lmd6aXAub3JnLyNmYXE4CisgICAgICAgIGMgPSAiXHgwMCIKKyAgICAgICAgd2hpbGUgYyA9PSAiXHgwMCI6CisgICAgICAgICAgICBjID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKKyAgICAgICAgaWYgYzoKKyAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKC0xLCAxKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW9iaiBpcyBOb25lCisKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCkBAIC0zMjAsMTYgKzM2Nyw4IEBACiAgICAgICAgICAgICBzZWxmLm15ZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLm15ZmlsZW9iaiA9IE5vbmUKIAotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiAoc2VsZi5teWZpbGVvYmogaXMgTm9uZSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmogaXMgTm9uZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmNsb3NlKCkKLQogICAgIGRlZiBmbHVzaChzZWxmLHpsaWJfbW9kZT16bGliLlpfU1lOQ19GTFVTSCk6CisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBjb21wcmVzc29yJ3MgYnVmZmVyIGlzIGZsdXNoZWQKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmNvbXByZXNzLmZsdXNoKHpsaWJfbW9kZSkpCkBAIC0zNDMsMTIgKzM4Miw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5maWxlb2JqLmZpbGVubygpCiAKLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKLQogICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCkBAIC0zNTgsOCArMzkxLDE4IEBACiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSAiIgogICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IDAKKyAgICAgICAgc2VsZi5leHRyYXN0YXJ0ID0gMAogICAgICAgICBzZWxmLm9mZnNldCA9IDAKIAorICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kZSA9PSBSRUFECisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1vZGUgPT0gV1JJVEUKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgogICAgICAgICBpZiB3aGVuY2U6CiAgICAgICAgICAgICBpZiB3aGVuY2UgPT0gMToKQEAgLTM4Miw4ICs0MjUsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLnJlYWQoMTAyNCkKICAgICAgICAgICAgIHNlbGYucmVhZChjb3VudCAlIDEwMjQpCiAKKyAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0CisKICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgIGlmIHNpemUgPCAwOgorICAgICAgICAgICAgIyBTaG9ydGN1dCBjb21tb24gY2FzZSAtIG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyLgorICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKKyAgICAgICAgICAgIGkgPSBzZWxmLmV4dHJhYnVmLmZpbmQoJ1xuJywgb2Zmc2V0KSArIDEKKyAgICAgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFzaXplIC09IGkgLSBvZmZzZXQKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBpIC0gb2Zmc2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0cmFidWZbb2Zmc2V0OiBpXQorCiAgICAgICAgICAgICBzaXplID0gc3lzLm1heGludAogICAgICAgICAgICAgcmVhZHNpemUgPSBzZWxmLm1pbl9yZWFkc2l6ZQogICAgICAgICBlbHNlOgpAQCAtNDEzLDM0ICs0NjYsNiBAQAogICAgICAgICAgICAgc2VsZi5taW5fcmVhZHNpemUgPSBtaW4ocmVhZHNpemUsIHNlbGYubWluX3JlYWRzaXplICogMiwgNTEyKQogICAgICAgICByZXR1cm4gJycuam9pbihidWZzKSAjIFJldHVybiByZXN1bHRpbmcgbGluZQogCi0gICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBzaXplaGludD0wKToKLSAgICAgICAgIyBOZWdhdGl2ZSBudW1iZXJzIHJlc3VsdCBpbiByZWFkaW5nIGFsbCB0aGUgbGluZXMKLSAgICAgICAgaWYgc2l6ZWhpbnQgPD0gMDoKLSAgICAgICAgICAgIHNpemVoaW50ID0gc3lzLm1heGludAotICAgICAgICBMID0gW10KLSAgICAgICAgd2hpbGUgc2l6ZWhpbnQgPiAwOgotICAgICAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbGluZSA9PSAiIjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgTC5hcHBlbmQobGluZSkKLSAgICAgICAgICAgIHNpemVoaW50ID0gc2l6ZWhpbnQgLSBsZW4obGluZSkKLQotICAgICAgICByZXR1cm4gTAotCi0gICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgTCk6Ci0gICAgICAgIGZvciBsaW5lIGluIEw6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgcmV0dXJuIGxpbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQogCiBkZWYgX3Rlc3QoKToKICAgICAjIEFjdCBsaWtlIGd6aXA7IHdpdGggLWQsIGFjdCBsaWtlIGd1bnppcC4KZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggYTkwNjhhNS4uNDhmMmNmZCAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTU0LDYgKzU0LDE0IEBACiAKICIiIgogCisjIFRoaXMgdHVwbGUgYW5kIF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoKSBtdXN0IGJlIG1vZGlmaWVkIGlmIGEgbmV3CisjIGFsd2F5cyBhdmFpbGFibGUgYWxnb3JpdGhtIGlzIGFkZGVkLgorX19hbHdheXNfc3VwcG9ydGVkID0gKCdtZDUnLCAnc2hhMScsICdzaGEyMjQnLCAnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInKQorCithbGdvcml0aG1zID0gX19hbHdheXNfc3VwcG9ydGVkCisKK19fYWxsX18gPSBfX2Fsd2F5c19zdXBwb3J0ZWQgKyAoJ25ldycsICdhbGdvcml0aG1zJykKKwogCiBkZWYgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKICAgICBpZiBuYW1lIGluICgnU0hBMScsICdzaGExJyk6CkBAIC03Nyw3ICs4NSwxOSBAQAogICAgICAgICBlbGlmIGJzID09ICczODQnOgogICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhMzg0CiAKLSAgICByYWlzZSBWYWx1ZUVycm9yLCAidW5zdXBwb3J0ZWQgaGFzaCB0eXBlIgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZSAlcycgJSBuYW1lKQorCisKK2RlZiBfX2dldF9vcGVuc3NsX2NvbnN0cnVjdG9yKG5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZiA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycgKyBuYW1lKQorICAgICAgICAjIEFsbG93IHRoZSBDIG1vZHVsZSB0byByYWlzZSBWYWx1ZUVycm9yLiAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUKKyAgICAgICAgIyBkZWZpbmVkIGJ1dCB0aGUgaGFzaCBub3QgYWN0dWFsbHkgYXZhaWxhYmxlIHRoYW5rcyB0byBPcGVuU1NMLgorICAgICAgICBmKCkKKyAgICAgICAgIyBVc2UgdGhlIEMgZnVuY3Rpb24gZGlyZWN0bHkgKHZlcnkgZmFzdCkKKyAgICAgICAgcmV0dXJuIGYKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgcmV0dXJuIF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSkKIAogCiBkZWYgX19weV9uZXcobmFtZSwgc3RyaW5nPScnKToKQEAgLTEwMywzOSArMTIzLDIxIEBACiAKIHRyeToKICAgICBpbXBvcnQgX2hhc2hsaWIKLSAgICAjIHVzZSB0aGUgd3JhcHBlciBvZiB0aGUgQyBpbXBsZW1lbnRhdGlvbgogICAgIG5ldyA9IF9faGFzaF9uZXcKLQotICAgIGZvciBvcGVuc3NsRnVuY05hbWUgaW4gZmlsdGVyKGxhbWJkYSBuOiBuLnN0YXJ0c3dpdGgoJ29wZW5zc2xfJyksIGRpcihfaGFzaGxpYikpOgotICAgICAgICBmdW5jTmFtZSA9IG9wZW5zc2xGdW5jTmFtZVtsZW4oJ29wZW5zc2xfJyk6XQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHRyeSB0aGVtIGFsbCwgc29tZSBtYXkgbm90IHdvcmsgZHVlIHRvIHRoZSBPcGVuU1NMCi0gICAgICAgICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCi0gICAgICAgICAgICBmID0gZ2V0YXR0cihfaGFzaGxpYiwgb3BlbnNzbEZ1bmNOYW1lKQotICAgICAgICAgICAgZigpCi0gICAgICAgICAgICAjIFVzZSB0aGUgQyBmdW5jdGlvbiBkaXJlY3RseSAodmVyeSBmYXN0KQotICAgICAgICAgICAgZXhlYyBmdW5jTmFtZSArICcgPSBmJwotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseSAoZmFzdCkKLSAgICAgICAgICAgICAgICBleGVjIGZ1bmNOYW1lICsgJyA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoZnVuY05hbWUpJwotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyB0aGlzIG9uZSBoYXMgbm8gYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiwgZG9uJ3QgZGVmaW5lIGl0Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICMgY2xlYW4gdXAgb3VyIGxvY2FscwotICAgIGRlbCBmCi0gICAgZGVsIG9wZW5zc2xGdW5jTmFtZQotICAgIGRlbCBmdW5jTmFtZQotCisgICAgX19nZXRfaGFzaCA9IF9fZ2V0X29wZW5zc2xfY29uc3RydWN0b3IKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIFdlIGRvbid0IGhhdmUgdGhlIF9oYXNobGliIE9wZW5TU0wgbW9kdWxlPwotICAgICMgdXNlIHRoZSBidWlsdCBpbiBsZWdhY3kgaW50ZXJmYWNlcyB2aWEgYSB3cmFwcGVyIGZ1bmN0aW9uCiAgICAgbmV3ID0gX19weV9uZXcKKyAgICBfX2dldF9oYXNoID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcgogCi0gICAgIyBsb29rdXAgdGhlIEMgZnVuY3Rpb24gdG8gdXNlIGRpcmVjdGx5IGZvciB0aGUgbmFtZWQgY29uc3RydWN0b3JzCi0gICAgbWQ1ID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKLSAgICBzaGExID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMScpCi0gICAgc2hhMjI0ID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjI0JykKLSAgICBzaGEyNTYgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyNTYnKQotICAgIHNoYTM4NCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTM4NCcpCi0gICAgc2hhNTEyID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhNTEyJykKK2ZvciBfX2Z1bmNfbmFtZSBpbiBfX2Fsd2F5c19zdXBwb3J0ZWQ6CisgICAgIyB0cnkgdGhlbSBhbGwsIHNvbWUgbWF5IG5vdCB3b3JrIGR1ZSB0byB0aGUgT3BlblNTTAorICAgICMgdmVyc2lvbiBub3Qgc3VwcG9ydGluZyB0aGF0IGFsZ29yaXRobS4KKyAgICB0cnk6CisgICAgICAgIGdsb2JhbHMoKVtfX2Z1bmNfbmFtZV0gPSBfX2dldF9oYXNoKF9fZnVuY19uYW1lKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBpbXBvcnQgbG9nZ2luZworICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbignY29kZSBmb3IgaGFzaCAlcyB3YXMgbm90IGZvdW5kLicsIF9fZnVuY19uYW1lKQorCisjIENsZWFudXAgbG9jYWxzKCkKK2RlbCBfX2Fsd2F5c19zdXBwb3J0ZWQsIF9fZnVuY19uYW1lLCBfX2dldF9oYXNoCitkZWwgX19weV9uZXcsIF9faGFzaF9uZXcsIF9fZ2V0X29wZW5zc2xfY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL0xpYi9oZWFwcS5weSBiL0xpYi9oZWFwcS5weQppbmRleCA0OGY4MDRhLi5hNDRkMWJlIDEwMDY0NAotLS0gYS9MaWIvaGVhcHEucHkKKysrIGIvTGliL2hlYXBxLnB5CkBAIC0xMjksOCArMTI5LDggQEAKIF9fYWxsX18gPSBbJ2hlYXBwdXNoJywgJ2hlYXBwb3AnLCAnaGVhcGlmeScsICdoZWFwcmVwbGFjZScsICdtZXJnZScsCiAgICAgICAgICAgICdubGFyZ2VzdCcsICduc21hbGxlc3QnLCAnaGVhcHB1c2hwb3AnXQogCi1mcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlLCByZXBlYXQsIGNvdW50LCBpbWFwLCBpemlwLCB0ZWUKLWZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIsIG5lZworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSwgcmVwZWF0LCBjb3VudCwgaW1hcCwgaXppcCwgdGVlLCBjaGFpbgorZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgogaW1wb3J0IGJpc2VjdAogCiBkZWYgaGVhcHB1c2goaGVhcCwgaXRlbSk6CkBAIC0zMDgsNyArMzA4LDcgQEAKIAogIyBJZiBhdmFpbGFibGUsIHVzZSBDIGltcGxlbWVudGF0aW9uCiB0cnk6Ci0gICAgZnJvbSBfaGVhcHEgaW1wb3J0IGhlYXBwdXNoLCBoZWFwcG9wLCBoZWFwaWZ5LCBoZWFwcmVwbGFjZSwgbmxhcmdlc3QsIG5zbWFsbGVzdCwgaGVhcHB1c2hwb3AKKyAgICBmcm9tIF9oZWFwcSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIApAQCAtMzU0LDEwICszNTQsMzIgQEAKIAogICAgIEVxdWl2YWxlbnQgdG86ICBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXkpWzpuXQogICAgICIiIgorICAgICMgU2hvcnQtY3V0IGZvciBuPT0xIGlzIHRvIHVzZSBtaW4oKSB3aGVuIGxlbihpdGVyYWJsZSk+MAorICAgIGlmIG4gPT0gMToKKyAgICAgICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQorICAgICAgICBoZWFkID0gbGlzdChpc2xpY2UoaXQsIDEpKQorICAgICAgICBpZiBub3QgaGVhZDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBpZiBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBbbWluKGNoYWluKGhlYWQsIGl0KSldCisgICAgICAgIHJldHVybiBbbWluKGNoYWluKGhlYWQsIGl0KSwga2V5PWtleSldCisKKyAgICAjIFdoZW4gbj49c2l6ZSwgaXQncyBmYXN0ZXIgdG8gdXNlIHNvcnQoKQorICAgIHRyeToKKyAgICAgICAgc2l6ZSA9IGxlbihpdGVyYWJsZSkKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgbiA+PSBzaXplOgorICAgICAgICAgICAgcmV0dXJuIHNvcnRlZChpdGVyYWJsZSwga2V5PWtleSlbOm5dCisKKyAgICAjIFdoZW4ga2V5IGlzIG5vbmUsIHVzZSBzaW1wbGVyIGRlY29yYXRpb24KICAgICBpZiBrZXkgaXMgTm9uZToKICAgICAgICAgaXQgPSBpemlwKGl0ZXJhYmxlLCBjb3VudCgpKSAgICAgICAgICAgICAgICAgICAgICAgICMgZGVjb3JhdGUKICAgICAgICAgcmVzdWx0ID0gX25zbWFsbGVzdChuLCBpdCkKICAgICAgICAgcmV0dXJuIG1hcChpdGVtZ2V0dGVyKDApLCByZXN1bHQpICAgICAgICAgICAgICAgICAgICMgdW5kZWNvcmF0ZQorCisgICAgIyBHZW5lcmFsIGNhc2UsIHNsb3dlc3QgbWV0aG9kCiAgICAgaW4xLCBpbjIgPSB0ZWUoaXRlcmFibGUpCiAgICAgaXQgPSBpemlwKGltYXAoa2V5LCBpbjEpLCBjb3VudCgpLCBpbjIpICAgICAgICAgICAgICAgICAjIGRlY29yYXRlCiAgICAgcmVzdWx0ID0gX25zbWFsbGVzdChuLCBpdCkKQEAgLTM2OSwxMiArMzkxLDM1IEBACiAKICAgICBFcXVpdmFsZW50IHRvOiAgc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5LCByZXZlcnNlPVRydWUpWzpuXQogICAgICIiIgorCisgICAgIyBTaG9ydC1jdXQgZm9yIG49PTEgaXMgdG8gdXNlIG1heCgpIHdoZW4gbGVuKGl0ZXJhYmxlKT4wCisgICAgaWYgbiA9PSAxOgorICAgICAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCisgICAgICAgIGhlYWQgPSBsaXN0KGlzbGljZShpdCwgMSkpCisgICAgICAgIGlmIG5vdCBoZWFkOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGlmIGtleSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFttYXgoY2hhaW4oaGVhZCwgaXQpKV0KKyAgICAgICAgcmV0dXJuIFttYXgoY2hhaW4oaGVhZCwgaXQpLCBrZXk9a2V5KV0KKworICAgICMgV2hlbiBuPj1zaXplLCBpdCdzIGZhc3RlciB0byB1c2Ugc29ydCgpCisgICAgdHJ5OgorICAgICAgICBzaXplID0gbGVuKGl0ZXJhYmxlKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiBuID49IHNpemU6CisgICAgICAgICAgICByZXR1cm4gc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5LCByZXZlcnNlPVRydWUpWzpuXQorCisgICAgIyBXaGVuIGtleSBpcyBub25lLCB1c2Ugc2ltcGxlciBkZWNvcmF0aW9uCiAgICAgaWYga2V5IGlzIE5vbmU6Ci0gICAgICAgIGl0ID0gaXppcChpdGVyYWJsZSwgaW1hcChuZWcsIGNvdW50KCkpKSAgICAgICAgICAgICAjIGRlY29yYXRlCisgICAgICAgIGl0ID0gaXppcChpdGVyYWJsZSwgY291bnQoMCwtMSkpICAgICAgICAgICAgICAgICAgICAjIGRlY29yYXRlCiAgICAgICAgIHJlc3VsdCA9IF9ubGFyZ2VzdChuLCBpdCkKICAgICAgICAgcmV0dXJuIG1hcChpdGVtZ2V0dGVyKDApLCByZXN1bHQpICAgICAgICAgICAgICAgICAgICMgdW5kZWNvcmF0ZQorCisgICAgIyBHZW5lcmFsIGNhc2UsIHNsb3dlc3QgbWV0aG9kCiAgICAgaW4xLCBpbjIgPSB0ZWUoaXRlcmFibGUpCi0gICAgaXQgPSBpemlwKGltYXAoa2V5LCBpbjEpLCBpbWFwKG5lZywgY291bnQoKSksIGluMikgICAgICAjIGRlY29yYXRlCisgICAgaXQgPSBpemlwKGltYXAoa2V5LCBpbjEpLCBjb3VudCgwLC0xKSwgaW4yKSAgICAgICAgICAgICAjIGRlY29yYXRlCiAgICAgcmVzdWx0ID0gX25sYXJnZXN0KG4sIGl0KQogICAgIHJldHVybiBtYXAoaXRlbWdldHRlcigyKSwgcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgIyB1bmRlY29yYXRlCiAKZGlmZiAtLWdpdCBhL0xpYi9odHRwbGliLnB5IGIvTGliL2h0dHBsaWIucHkKaW5kZXggNjgwZTg3NS4uNWFmMGQwMiAxMDA2NDQKLS0tIGEvTGliL2h0dHBsaWIucHkKKysrIGIvTGliL2h0dHBsaWIucHkKQEAgLTY3LDYgKzY3LDcgQEAKICIiIgogCiBmcm9tIGFycmF5IGltcG9ydCBhcnJheQoraW1wb3J0IG9zCiBpbXBvcnQgc29ja2V0CiBmcm9tIHN5cyBpbXBvcnQgcHkza3dhcm5pbmcKIGZyb20gdXJscGFyc2UgaW1wb3J0IHVybHNwbGl0CkBAIC0yMTEsNiArMjEyLDkgQEAKICMgbWF4aW1hbCBhbW91bnQgb2YgZGF0YSB0byByZWFkIGF0IG9uZSB0aW1lIGluIF9zYWZlX3JlYWQKIE1BWEFNT1VOVCA9IDEwNDg1NzYKIAorIyBtYXhpbWFsIGxpbmUgbGVuZ3RoIHdoZW4gY2FsbGluZyByZWFkbGluZSgpLgorX01BWExJTkUgPSA2NTUzNgorCiBjbGFzcyBIVFRQTWVzc2FnZShtaW1ldG9vbHMuTWVzc2FnZSk6CiAKICAgICBkZWYgYWRkaGVhZGVyKHNlbGYsIGtleSwgdmFsdWUpOgpAQCAtMjczLDcgKzI3Nyw5IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0b2ZsaW5lID0gdGVsbCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IDAKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgorICAgICAgICAgICAgICAgIHJhaXNlIExpbmVUb29Mb25nKCJoZWFkZXIgbGluZSIpCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9ICdFT0YgaW4gaGVhZGVycycKICAgICAgICAgICAgICAgICBicmVhawpAQCAtMzI2LDggKzMzMiwxOCBAQAogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIGRlYnVnbGV2ZWw9MCwgc3RyaWN0PTAsIG1ldGhvZD1Ob25lKToKLSAgICAgICAgc2VsZi5mcCA9IHNvY2subWFrZWZpbGUoJ3JiJywgMCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgZGVidWdsZXZlbD0wLCBzdHJpY3Q9MCwgbWV0aG9kPU5vbmUsIGJ1ZmZlcmluZz1GYWxzZSk6CisgICAgICAgIGlmIGJ1ZmZlcmluZzoKKyAgICAgICAgICAgICMgVGhlIGNhbGxlciB3b24ndCBiZSB1c2luZyBhbnkgc29jay5yZWN2KCkgY2FsbHMsIHNvIGJ1ZmZlcmluZworICAgICAgICAgICAgIyBpcyBmaW5lIGFuZCByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UuCisgICAgICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgYnVmZmVyIHNpemUgaXMgc3BlY2lmaWVkIGFzIHplcm8sIGJlY2F1c2UgdGhlIGhlYWRlcnMgb2YKKyAgICAgICAgICAgICMgdGhlIHJlc3BvbnNlIGFyZSByZWFkIHdpdGggcmVhZGxpbmUoKS4gIElmIHRoZSByZWFkcyB3ZXJlCisgICAgICAgICAgICAjIGJ1ZmZlcmVkIHRoZSByZWFkbGluZSgpIGNhbGxzIGNvdWxkIGNvbnN1bWUgc29tZSBvZiB0aGUKKyAgICAgICAgICAgICMgcmVzcG9uc2UsIHdoaWNoIG1ha2UgYmUgcmVhZCB2aWEgYSByZWN2KCkgb24gdGhlIHVuZGVybHlpbmcKKyAgICAgICAgICAgICMgc29ja2V0LgorICAgICAgICAgICAgc2VsZi5mcCA9IHNvY2subWFrZWZpbGUoJ3JiJywgMCkKICAgICAgICAgc2VsZi5kZWJ1Z2xldmVsID0gZGVidWdsZXZlbAogICAgICAgICBzZWxmLnN0cmljdCA9IHN0cmljdAogICAgICAgICBzZWxmLl9tZXRob2QgPSBtZXRob2QKQEAgLTM5Myw3ICs0MDksMTAgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIyBza2lwIHRoZSBoZWFkZXIgZnJvbSB0aGUgMTAwIHJlc3BvbnNlCiAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNraXAgPSBzZWxmLmZwLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIHNraXAgPSBzZWxmLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2tpcCkgPiBfTUFYTElORToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGluZVRvb0xvbmcoImhlYWRlciBsaW5lIikKKyAgICAgICAgICAgICAgICBza2lwID0gc2tpcC5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYgbm90IHNraXA6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTU1Miw3ICs1NzEsOSBAQAogICAgICAgICB2YWx1ZSA9IFtdCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBjaHVua19sZWZ0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGluZVRvb0xvbmcoImNodW5rIHNpemUiKQogICAgICAgICAgICAgICAgIGkgPSBsaW5lLmZpbmQoJzsnKQogICAgICAgICAgICAgICAgIGlmIGkgPj0gMDoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOmldICMgc3RyaXAgY2h1bmstZXh0ZW5zaW9ucwpAQCAtNTg3LDcgKzYwOCw5IEBACiAgICAgICAgICMgcmVhZCBhbmQgZGlzY2FyZCB0cmFpbGVyIHVwIHRvIHRoZSBDUkxGIHRlcm1pbmF0b3IKICAgICAgICAgIyMjIG5vdGU6IHdlIHNob3VsZG4ndCBoYXZlIGFueSB0cmFpbGVycyEKICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKKyAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgorICAgICAgICAgICAgICAgIHJhaXNlIExpbmVUb29Mb25nKCJ0cmFpbGVyIGxpbmUiKQogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgIyBhIHZhbmlzaGluZ2x5IHNtYWxsIG51bWJlciBvZiBzaXRlcyBFT0Ygd2l0aG91dAogICAgICAgICAgICAgICAgICMgc2VuZGluZyB0aGUgdHJhaWxlcgpAQCAtNjE0LDYgKzYzNywxMSBAQAogICAgICAgICByZWFkaW5nLiBJZiB0aGUgYnl0ZXMgYXJlIHRydWx5IG5vdCBhdmFpbGFibGUgKGR1ZSB0byBFT0YpLCB0aGVuIHRoZQogICAgICAgICBJbmNvbXBsZXRlUmVhZCBleGNlcHRpb24gY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBwcm9ibGVtLgogICAgICAgICAiIiIKKyAgICAgICAgIyBOT1RFKGdwcyk6IEFzIG9mIHN2biByNzQ0MjYgc29ja2V0Ll9maWxlb2JqZWN0LnJlYWQoeCkgd2lsbCBuZXZlcgorICAgICAgICAjIHJldHVybiBsZXNzIHRoYW4geCBieXRlcyB1bmxlc3MgRU9GIGlzIGVuY291bnRlcmVkLiAgSXQgbm93IGhhbmRsZXMKKyAgICAgICAgIyBzaWduYWwgaW50ZXJydXB0aW9ucyAoc29ja2V0LmVycm9yIEVJTlRSKSBpbnRlcm5hbGx5LiAgVGhpcyBjb2RlCisgICAgICAgICMgbmV2ZXIgY2F1Z2h0IHRoYXQgZXhjZXB0aW9uIGFueXdheXMuICBJdCBzZWVtcyBsYXJnZWx5IHBvaW50bGVzcy4KKyAgICAgICAgIyBzZWxmLmZwLnJlYWQoYW10KSB3aWxsIHdvcmsgZmluZS4KICAgICAgICAgcyA9IFtdCiAgICAgICAgIHdoaWxlIGFtdCA+IDA6CiAgICAgICAgICAgICBjaHVuayA9IHNlbGYuZnAucmVhZChtaW4oYW10LCBNQVhBTU9VTlQpKQpAQCAtNjIzLDYgKzY1MSw5IEBACiAgICAgICAgICAgICBhbXQgLT0gbGVuKGNodW5rKQogICAgICAgICByZXR1cm4gJycuam9pbihzKQogCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZnAuZmlsZW5vKCkKKwogICAgIGRlZiBnZXRoZWFkZXIoc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKICAgICAgICAgaWYgc2VsZi5tc2cgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFJlc3BvbnNlTm90UmVhZHkoKQpAQCAtNjQ3LDggKzY3OCw5IEBACiAgICAgc3RyaWN0ID0gMAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgc3RyaWN0PU5vbmUsCi0gICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCiAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCiAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKQEAgLTY2Miw3ICs2OTQsNyBAQAogICAgICAgICBpZiBzdHJpY3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnN0cmljdCA9IHN0cmljdAogCi0gICAgZGVmIF9zZXRfdHVubmVsKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBkZWYgc2V0X3R1bm5lbChzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGhlYWRlcnM9Tm9uZSk6CiAgICAgICAgICIiIiBTZXRzIHVwIHRoZSBob3N0IGFuZCB0aGUgcG9ydCBmb3IgdGhlIEhUVFAgQ09OTkVDVCBUdW5uZWxsaW5nLgogCiAgICAgICAgIFRoZSBoZWFkZXJzIGFyZ3VtZW50IHNob3VsZCBiZSBhIG1hcHBpbmcgb2YgZXh0cmEgSFRUUCBoZWFkZXJzCkBAIC03MTAsMTQgKzc0MiwxNiBAQAogICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmlwKCkpKQogICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbGluZSA9IHJlc3BvbnNlLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUgPSByZXNwb25zZS5mcC5yZWFkbGluZShfTUFYTElORSArIDEpCisgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKKyAgICAgICAgICAgICAgICByYWlzZSBMaW5lVG9vTG9uZygiaGVhZGVyIGxpbmUiKQogICAgICAgICAgICAgaWYgbGluZSA9PSAnXHJcbic6IGJyZWFrCiAKIAogICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAiIiJDb25uZWN0IHRvIHRoZSBob3N0IGFuZCBwb3J0IHNwZWNpZmllZCBpbiBfX2luaXRfXy4iIiIKICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCwgc2VsZi5zb3VyY2VfYWRkcmVzcykKIAogICAgICAgICBpZiBzZWxmLl90dW5uZWxfaG9zdDoKICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCkBAIC03MzIsMzUgKzc2NiwyNSBAQAogICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gTm9uZQogICAgICAgICBzZWxmLl9fc3RhdGUgPSBfQ1NfSURMRQogCi0gICAgZGVmIHNlbmQoc2VsZiwgc3RyKToKLSAgICAgICAgIiIiU2VuZCBgc3RyJyB0byB0aGUgc2VydmVyLiIiIgorICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJTZW5kIGBkYXRhJyB0byB0aGUgc2VydmVyLiIiIgogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgTm9uZToKICAgICAgICAgICAgIGlmIHNlbGYuYXV0b19vcGVuOgogICAgICAgICAgICAgICAgIHNlbGYuY29ubmVjdCgpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIE5vdENvbm5lY3RlZCgpCiAKLSAgICAgICAgIyBzZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuIGlmIHdlIGdldCBhIGJyb2tlbiBwaXBlLCB0aGVuIGNsb3NlCi0gICAgICAgICMgdGhlIHNvY2tldC4gd2Ugd2FudCB0byByZWNvbm5lY3Qgd2hlbiBzb21lYm9keSB0cmllcyB0byBzZW5kIGFnYWluLgotICAgICAgICAjCi0gICAgICAgICMgTk9URTogd2UgRE8gcHJvcGFnYXRlIHRoZSBlcnJvciwgdGhvdWdoLCBiZWNhdXNlIHdlIGNhbm5vdCBzaW1wbHkKLSAgICAgICAgIyAgICAgICBpZ25vcmUgdGhlIGVycm9yLi4uIHRoZSBjYWxsZXIgd2lsbCBrbm93IGlmIHRoZXkgY2FuIHJldHJ5LgogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQgInNlbmQ6IiwgcmVwcihzdHIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGJsb2Nrc2l6ZT04MTkyCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHN0ciwncmVhZCcpIGFuZCBub3QgaXNpbnN0YW5jZShzdHIsIGFycmF5KToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAic2VuZEluZyBhIHJlYWQoKWFibGUiCi0gICAgICAgICAgICAgICAgZGF0YT1zdHIucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgd2hpbGUgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YT1zdHIucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHN0cikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgdjoKLSAgICAgICAgICAgIGlmIHYuYXJnc1swXSA9PSAzMjogICAgICAjIEJyb2tlbiBwaXBlCi0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcHJpbnQgInNlbmQ6IiwgcmVwcihkYXRhKQorICAgICAgICBibG9ja3NpemUgPSA4MTkyCisgICAgICAgIGlmIGhhc2F0dHIoZGF0YSwncmVhZCcpIGFuZCBub3QgaXNpbnN0YW5jZShkYXRhLCBhcnJheSk6CisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCAic2VuZEluZyBhIHJlYWQoKWFibGUiCisgICAgICAgICAgICBkYXRhYmxvY2sgPSBkYXRhLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgd2hpbGUgZGF0YWJsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGRhdGFibG9jaykKKyAgICAgICAgICAgICAgICBkYXRhYmxvY2sgPSBkYXRhLnJlYWQoYmxvY2tzaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoZGF0YSkKIAogICAgIGRlZiBfb3V0cHV0KHNlbGYsIHMpOgogICAgICAgICAiIiJBZGQgYSBsaW5lIG9mIG91dHB1dCB0byB0aGUgY3VycmVudCByZXF1ZXN0IGJ1ZmZlci4KQEAgLTc2OSwxNSArNzkzLDI2IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKHMpCiAKLSAgICBkZWYgX3NlbmRfb3V0cHV0KHNlbGYpOgorICAgIGRlZiBfc2VuZF9vdXRwdXQoc2VsZiwgbWVzc2FnZV9ib2R5PU5vbmUpOgogICAgICAgICAiIiJTZW5kIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgcmVxdWVzdCBhbmQgY2xlYXIgdGhlIGJ1ZmZlci4KIAogICAgICAgICBBcHBlbmRzIGFuIGV4dHJhIFxcclxcbiB0byB0aGUgYnVmZmVyLgorICAgICAgICBBIG1lc3NhZ2VfYm9keSBtYXkgYmUgc3BlY2lmaWVkLCB0byBiZSBhcHBlbmRlZCB0byB0aGUgcmVxdWVzdC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoKCIiLCAiIikpCiAgICAgICAgIG1zZyA9ICJcclxuIi5qb2luKHNlbGYuX2J1ZmZlcikKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQorICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAorICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgorICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aGltLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfYm9keSwgc3RyKToKKyAgICAgICAgICAgIG1zZyArPSBtZXNzYWdlX2JvZHkKKyAgICAgICAgICAgIG1lc3NhZ2VfYm9keSA9IE5vbmUKICAgICAgICAgc2VsZi5zZW5kKG1zZykKKyAgICAgICAgaWYgbWVzc2FnZV9ib2R5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgI21lc3NhZ2VfYm9keSB3YXMgbm90IGEgc3RyaW5nIChpLmUuIGl0IGlzIGEgZmlsZSkgYW5kCisgICAgICAgICAgICAjd2UgbXVzdCBydW4gdGhlIHJpc2sgb2YgTmFnbGUKKyAgICAgICAgICAgIHNlbGYuc2VuZChtZXNzYWdlX2JvZHkpCiAKICAgICBkZWYgcHV0cmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgc2tpcF9ob3N0PTAsIHNraXBfYWNjZXB0X2VuY29kaW5nPTApOgogICAgICAgICAiIiJTZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyLgpAQCAtODIxLDkgKzg1Niw5IEBACiAgICAgICAgIHNlbGYuX21ldGhvZCA9IG1ldGhvZAogICAgICAgICBpZiBub3QgdXJsOgogICAgICAgICAgICAgdXJsID0gJy8nCi0gICAgICAgIHN0ciA9ICclcyAlcyAlcycgJSAobWV0aG9kLCB1cmwsIHNlbGYuX2h0dHBfdnNuX3N0cikKKyAgICAgICAgaGRyID0gJyVzICVzICVzJyAlIChtZXRob2QsIHVybCwgc2VsZi5faHR0cF92c25fc3RyKQogCi0gICAgICAgIHNlbGYuX291dHB1dChzdHIpCisgICAgICAgIHNlbGYuX291dHB1dChoZHIpCiAKICAgICAgICAgaWYgc2VsZi5faHR0cF92c24gPT0gMTE6CiAgICAgICAgICAgICAjIElzc3VlIHNvbWUgc3RhbmRhcmQgaGVhZGVycyBmb3IgYmV0dGVyIEhUVFAvMS4xIGNvbXBsaWFuY2UKQEAgLTg1OCw2ICs4OTMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBzZWxmLmhvc3QuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X2VuYyA9IHNlbGYuaG9zdC5lbmNvZGUoImlkbmEiKQorICAgICAgICAgICAgICAgICAgICAjIFdyYXAgdGhlIElQdjYgSG9zdCBIZWFkZXIgd2l0aCBbXSAoUkZDIDI3MzIpCisgICAgICAgICAgICAgICAgICAgIGlmIGhvc3RfZW5jLmZpbmQoJzonKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSAiWyIgKyBob3N0X2VuYyArICJdIgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBvcnQgPT0gc2VsZi5kZWZhdWx0X3BvcnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIGhvc3RfZW5jKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtODg2LDcgKzkyNCw3IEBACiAgICAgICAgICAgICAjIEZvciBIVFRQLzEuMCwgdGhlIHNlcnZlciB3aWxsIGFzc3VtZSAibm90IGNodW5rZWQiCiAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgcHV0aGVhZGVyKHNlbGYsIGhlYWRlciwgdmFsdWUpOgorICAgIGRlZiBwdXRoZWFkZXIoc2VsZiwgaGVhZGVyLCAqdmFsdWVzKToKICAgICAgICAgIiIiU2VuZCBhIHJlcXVlc3QgaGVhZGVyIGxpbmUgdG8gdGhlIHNlcnZlci4KIAogICAgICAgICBGb3IgZXhhbXBsZTogaC5wdXRoZWFkZXIoJ0FjY2VwdCcsICd0ZXh0L2h0bWwnKQpAQCAtODk0LDMzICs5MzIsNDcgQEAKICAgICAgICAgaWYgc2VsZi5fX3N0YXRlICE9IF9DU19SRVFfU1RBUlRFRDoKICAgICAgICAgICAgIHJhaXNlIENhbm5vdFNlbmRIZWFkZXIoKQogCi0gICAgICAgIHN0ciA9ICclczogJXMnICUgKGhlYWRlciwgdmFsdWUpCi0gICAgICAgIHNlbGYuX291dHB1dChzdHIpCisgICAgICAgIGhkciA9ICclczogJXMnICUgKGhlYWRlciwgJ1xyXG5cdCcuam9pbihbc3RyKHYpIGZvciB2IGluIHZhbHVlc10pKQorICAgICAgICBzZWxmLl9vdXRwdXQoaGRyKQogCi0gICAgZGVmIGVuZGhlYWRlcnMoc2VsZik6Ci0gICAgICAgICIiIkluZGljYXRlIHRoYXQgdGhlIGxhc3QgaGVhZGVyIGxpbmUgaGFzIGJlZW4gc2VudCB0byB0aGUgc2VydmVyLiIiIgorICAgIGRlZiBlbmRoZWFkZXJzKHNlbGYsIG1lc3NhZ2VfYm9keT1Ob25lKToKKyAgICAgICAgIiIiSW5kaWNhdGUgdGhhdCB0aGUgbGFzdCBoZWFkZXIgbGluZSBoYXMgYmVlbiBzZW50IHRvIHRoZSBzZXJ2ZXIuCiAKKyAgICAgICAgVGhpcyBtZXRob2Qgc2VuZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHNlcnZlci4gIFRoZSBvcHRpb25hbAorICAgICAgICBtZXNzYWdlX2JvZHkgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gcGFzcyBtZXNzYWdlIGJvZHkKKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0LiAgVGhlIG1lc3NhZ2UgYm9keSB3aWxsIGJlIHNlbnQgaW4KKyAgICAgICAgdGhlIHNhbWUgcGFja2V0IGFzIHRoZSBtZXNzYWdlIGhlYWRlcnMgaWYgcG9zc2libGUuICBUaGUKKyAgICAgICAgbWVzc2FnZV9ib2R5IHNob3VsZCBiZSBhIHN0cmluZy4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuX19zdGF0ZSA9PSBfQ1NfUkVRX1NUQVJURUQ6CiAgICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSBfQ1NfUkVRX1NFTlQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIENhbm5vdFNlbmRIZWFkZXIoKQotCi0gICAgICAgIHNlbGYuX3NlbmRfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5fc2VuZF9vdXRwdXQobWVzc2FnZV9ib2R5KQogCiAgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGJvZHk9Tm9uZSwgaGVhZGVycz17fSk6CiAgICAgICAgICIiIlNlbmQgYSBjb21wbGV0ZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuIiIiCisgICAgICAgIHNlbGYuX3NlbmRfcmVxdWVzdChtZXRob2QsIHVybCwgYm9keSwgaGVhZGVycykKIAorICAgIGRlZiBfc2V0X2NvbnRlbnRfbGVuZ3RoKHNlbGYsIGJvZHkpOgorICAgICAgICAjIFNldCB0aGUgY29udGVudC1sZW5ndGggYmFzZWQgb24gdGhlIGJvZHkuCisgICAgICAgIHRoZWxlbiA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fc2VuZF9yZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBoZWFkZXJzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCB2OgotICAgICAgICAgICAgIyB0cmFwICdCcm9rZW4gcGlwZScgaWYgd2UncmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IHJlY29ubmVjdAotICAgICAgICAgICAgaWYgdi5hcmdzWzBdICE9IDMyIG9yIG5vdCBzZWxmLmF1dG9fb3BlbjoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgIyB0cnkgb25lIG1vcmUgdGltZQotICAgICAgICAgICAgc2VsZi5fc2VuZF9yZXF1ZXN0KG1ldGhvZCwgdXJsLCBib2R5LCBoZWFkZXJzKQorICAgICAgICAgICAgdGhlbGVuID0gc3RyKGxlbihib2R5KSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgdGU6CisgICAgICAgICAgICAjIElmIHRoaXMgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LCB0cnkgdG8KKyAgICAgICAgICAgICMgZnN0YXQgaXRzIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRoZWxlbiA9IHN0cihvcy5mc3RhdChib2R5LmZpbGVubygpKS5zdF9zaXplKQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgIyBEb24ndCBzZW5kIGEgbGVuZ3RoIGlmIHRoaXMgZmFpbGVkCisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQgIkNhbm5vdCBzdGF0ISEiCisKKyAgICAgICAgaWYgdGhlbGVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgdGhlbGVuKQogCiAgICAgZGVmIF9zZW5kX3JlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpOgotICAgICAgICAjIGhvbm91ciBleHBsaWNpdGx5IHJlcXVlc3RlZCBIb3N0OiBhbmQgQWNjZXB0LUVuY29kaW5nIGhlYWRlcnMKKyAgICAgICAgIyBIb25vciBleHBsaWNpdGx5IHJlcXVlc3RlZCBIb3N0OiBhbmQgQWNjZXB0LUVuY29kaW5nOiBoZWFkZXJzLgogICAgICAgICBoZWFkZXJfbmFtZXMgPSBkaWN0LmZyb21rZXlzKFtrLmxvd2VyKCkgZm9yIGsgaW4gaGVhZGVyc10pCiAgICAgICAgIHNraXBzID0ge30KICAgICAgICAgaWYgJ2hvc3QnIGluIGhlYWRlcl9uYW1lczoKQEAgLTkzMSwyOSArOTgzLDEyIEBACiAgICAgICAgIHNlbGYucHV0cmVxdWVzdChtZXRob2QsIHVybCwgKipza2lwcykKIAogICAgICAgICBpZiBib2R5IGFuZCAoJ2NvbnRlbnQtbGVuZ3RoJyBub3QgaW4gaGVhZGVyX25hbWVzKToKLSAgICAgICAgICAgIHRoZWxlbj1Ob25lCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGhlbGVuPXN0cihsZW4oYm9keSkpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCB0ZToKLSAgICAgICAgICAgICAgICAjIElmIHRoaXMgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LCB0cnkgdG8KLSAgICAgICAgICAgICAgICAjIGZzdGF0IGl0cyBmaWxlIGRlc2NyaXB0b3IKLSAgICAgICAgICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRoZWxlbiA9IHN0cihvcy5mc3RhdChib2R5LmZpbGVubygpKS5zdF9zaXplKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICAjIERvbid0IHNlbmQgYSBsZW5ndGggaWYgdGhpcyBmYWlsZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQgIkNhbm5vdCBzdGF0ISEiCi0KLSAgICAgICAgICAgIGlmIHRoZWxlbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLHRoZWxlbikKKyAgICAgICAgICAgIHNlbGYuX3NldF9jb250ZW50X2xlbmd0aChib2R5KQogICAgICAgICBmb3IgaGRyLCB2YWx1ZSBpbiBoZWFkZXJzLml0ZXJpdGVtcygpOgogICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoaGRyLCB2YWx1ZSkKLSAgICAgICAgc2VsZi5lbmRoZWFkZXJzKCkKKyAgICAgICAgc2VsZi5lbmRoZWFkZXJzKGJvZHkpCiAKLSAgICAgICAgaWYgYm9keToKLSAgICAgICAgICAgIHNlbGYuc2VuZChib2R5KQotCi0gICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgorICAgIGRlZiBnZXRyZXNwb25zZShzZWxmLCBidWZmZXJpbmc9RmFsc2UpOgogICAgICAgICAiR2V0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIgogCiAgICAgICAgICMgaWYgYSBwcmlvciByZXNwb25zZSBoYXMgYmVlbiBjb21wbGV0ZWQsIHRoZW4gZm9yZ2V0IGFib3V0IGl0LgpAQCAtOTc5LDEzICsxMDE0LDE1IEBACiAgICAgICAgIGlmIHNlbGYuX19zdGF0ZSAhPSBfQ1NfUkVRX1NFTlQgb3Igc2VsZi5fX3Jlc3BvbnNlOgogICAgICAgICAgICAgcmFpc2UgUmVzcG9uc2VOb3RSZWFkeSgpCiAKKyAgICAgICAgYXJncyA9IChzZWxmLnNvY2ssKQorICAgICAgICBrd2RzID0geyJzdHJpY3QiOnNlbGYuc3RyaWN0LCAibWV0aG9kIjpzZWxmLl9tZXRob2R9CiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBzZWxmLmRlYnVnbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PXNlbGYuc3RyaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD1zZWxmLl9tZXRob2QpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBzdHJpY3Q9c2VsZi5zdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPXNlbGYuX21ldGhvZCkKKyAgICAgICAgICAgIGFyZ3MgKz0gKHNlbGYuZGVidWdsZXZlbCwpCisgICAgICAgIGlmIGJ1ZmZlcmluZzoKKyAgICAgICAgICAgICNvbmx5IGFkZCB0aGlzIGtleXdvcmQgaWYgbm9uLWRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgICAgICAgICNvdGhlciByZXNwb25zZV9jbGFzc2VzLgorICAgICAgICAgICAga3dkc1siYnVmZmVyaW5nIl0gPSBUcnVlOworICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3MoKmFyZ3MsICoqa3dkcykKIAogICAgICAgICByZXNwb25zZS5iZWdpbigpCiAgICAgICAgIGFzc2VydCByZXNwb25zZS53aWxsX2Nsb3NlICE9IF9VTktOT1dOCkBAIC0xMDI5LDYgKzEwNjYsNyBAQAogICAgICAgICAjIHNldCB1cCBkZWxlZ2F0aW9uIHRvIGZsZXNoIG91dCBpbnRlcmZhY2UKICAgICAgICAgc2VsZi5zZW5kID0gY29ubi5zZW5kCiAgICAgICAgIHNlbGYucHV0cmVxdWVzdCA9IGNvbm4ucHV0cmVxdWVzdAorICAgICAgICBzZWxmLnB1dGhlYWRlciA9IGNvbm4ucHV0aGVhZGVyCiAgICAgICAgIHNlbGYuZW5kaGVhZGVycyA9IGNvbm4uZW5kaGVhZGVycwogICAgICAgICBzZWxmLnNldF9kZWJ1Z2xldmVsID0gY29ubi5zZXRfZGVidWdsZXZlbAogCkBAIC0xMDQ4LDExICsxMDg2LDcgQEAKICAgICAgICAgIlByb3ZpZGUgYSBnZXRmaWxlLCBzaW5jZSB0aGUgc3VwZXJjbGFzcycgZG9lcyBub3QgdXNlIHRoaXMgY29uY2VwdC4iCiAgICAgICAgIHJldHVybiBzZWxmLmZpbGUKIAotICAgIGRlZiBwdXRoZWFkZXIoc2VsZiwgaGVhZGVyLCAqdmFsdWVzKToKLSAgICAgICAgIlRoZSBzdXBlcmNsYXNzIGFsbG93cyBvbmx5IG9uZSB2YWx1ZSBhcmd1bWVudC4iCi0gICAgICAgIHNlbGYuX2Nvbm4ucHV0aGVhZGVyKGhlYWRlciwgJ1xyXG5cdCcuam9pbih2YWx1ZXMpKQotCi0gICAgZGVmIGdldHJlcGx5KHNlbGYpOgorICAgIGRlZiBnZXRyZXBseShzZWxmLCBidWZmZXJpbmc9RmFsc2UpOgogICAgICAgICAiIiJDb21wYXQgZGVmaW5pdGlvbiBzaW5jZSBzdXBlcmNsYXNzIGRvZXMgbm90IGRlZmluZSBpdC4KIAogICAgICAgICBSZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZjoKQEAgLTEwNjEsNyArMTA5NSwxMiBAQAogICAgICAgICAtIGFueSBSRkM4MjIgaGVhZGVycyBpbiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyCiAgICAgICAgICIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuX2Nvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgaWYgbm90IGJ1ZmZlcmluZzoKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuX2Nvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjb25seSBhZGQgdGhpcyBrZXl3b3JkIGlmIG5vbi1kZWZhdWx0IGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgI3dpdGggb3RoZXIgY29ubmVjdGlvbiBjbGFzc2VzCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9jb25uLmdldHJlc3BvbnNlKGJ1ZmZlcmluZykKICAgICAgICAgZXhjZXB0IEJhZFN0YXR1c0xpbmUsIGU6CiAgICAgICAgICAgICAjIyMgaG1tLiBpZiBnZXRyZXNwb25zZSgpIGV2ZXIgY2xvc2VzIHRoZSBzb2NrZXQgb24gYSBiYWQgcmVxdWVzdCwKICAgICAgICAgICAgICMjIyB0aGVuIHdlIGFyZSBnb2luZyB0byBoYXZlIHByb2JsZW1zIHdpdGggc2VsZi5zb2NrCkBAIC0xMTAxLDE1ICsxMTQwLDE4IEBACiAgICAgICAgIGRlZmF1bHRfcG9ydCA9IEhUVFBTX1BPUlQKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBrZXlfZmlsZT1Ob25lLCBjZXJ0X2ZpbGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1Ob25lLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6Ci0gICAgICAgICAgICBIVFRQQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCBzdHJpY3QsIHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKKyAgICAgICAgICAgIEhUVFBDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQsIHN0cmljdCwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgc2VsZi5rZXlfZmlsZSA9IGtleV9maWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfZmlsZSA9IGNlcnRfZmlsZQogCiAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gKFNTTCkgcG9ydC4iCiAKLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwgc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LCBzZWxmLnBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBpZiBzZWxmLl90dW5uZWxfaG9zdDoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCiAgICAgICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKQEAgLTEyMDAsOSArMTI0MiwxNiBAQAogCiBjbGFzcyBCYWRTdGF0dXNMaW5lKEhUVFBFeGNlcHRpb24pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICBsaW5lID0gcmVwcihsaW5lKQogICAgICAgICBzZWxmLmFyZ3MgPSBsaW5lLAogICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCiAKK2NsYXNzIExpbmVUb29Mb25nKEhUVFBFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lX3R5cGUpOgorICAgICAgICBIVFRQRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsICJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIHdoZW4gcmVhZGluZyAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChfTUFYTElORSwgbGluZV90eXBlKSkKKwogIyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKIGVycm9yID0gSFRUUEV4Y2VwdGlvbgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weSBiL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CmluZGV4IDc0YTkzZDMuLmVjMjcyMGIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CisrKyBiL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5CkBAIC05OCwxNCArOTgsNiBAQAogICAgICMgbWVudQogICAgIGRlbCBtZW51ZGVmc1stMV1bMV1bMDoyXQogCi0gICAgbWVudWRlZnMuaW5zZXJ0KDAsCi0gICAgICAgICAgICAoJ2FwcGxpY2F0aW9uJywgWwotICAgICAgICAgICAgICAgICgnQWJvdXQgSURMRScsICc8PGFib3V0LWlkbGU+PicpLAotICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAgICAgKCdfUHJlZmVyZW5jZXMuLi4uJywgJzw8b3Blbi1jb25maWctZGlhbG9nPj4nKSwKLSAgICAgICAgICAgIF0pKQotCi0KIGRlZmF1bHRfa2V5ZGVmcyA9IGlkbGVDb25mLkdldEN1cnJlbnRLZXlTZXQoKQogCiBkZWwgc3lzCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9DUkVESVRTLnR4dCBiL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CmluZGV4IDQ1NjA3OWIuLjVmZjU5OWQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CisrKyBiL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CkBAIC0yNSw4ICsyNSw4IEBACiAKIFNjb3R0IERhdmlkIERhbmllbHMsIFRhbCBFaW5hdCwgSGVybmFuIEZvZmZhbmksIENocmlzdG9zIEdlb3JnaW91LAogSmltIEpld2V0dCwgTWFydGluIHYuIEz2d2lzLCBKYXNvbiBPcmVuZG9yZmYsIEd1aWxoZXJtZSBQb2xvLCBKb3NoIFJvYmIsCi1OaWdlbCBSb3dlLCBCcnVjZSBTaGVyd29vZCwgYW5kIEplZmYgU2h1dGUgaGF2ZSBzdWJtaXR0ZWQgdXNlZnVsIHBhdGNoZXMuCi1UaGFua3MsIGd1eXMhCitOaWdlbCBSb3dlLCBCcnVjZSBTaGVyd29vZCwgSmVmZiBTaHV0ZSwgYW5kIFdlZWJsZSBoYXZlIHN1Ym1pdHRlZCB1c2VmdWwKK3BhdGNoZXMuICBUaGFua3MsIGd1eXMhCiAKIEZvciBhZGRpdGlvbmFsIGRldGFpbHMgcmVmZXIgdG8gTkVXUy50eHQgYW5kIENoYW5nZWxvZy4KIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IDdjYzY5Y2IuLmE0ODczMDIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTIsNyArMiw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IGltcAotZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvdW50CiBmcm9tIFRraW50ZXIgaW1wb3J0ICoKIGltcG9ydCB0a1NpbXBsZURpYWxvZwogaW1wb3J0IHRrTWVzc2FnZUJveApAQCAtMjcsOCArMjYsMTAgQEAKICAgICBtYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwogICAgIHJlbGVhc2UgPSAnJXMlcycgJSAobWFqb3IsIG1pbm9yKQogICAgIGlmIG1pY3JvOgotICAgICAgICByZWxlYXNlICs9ICclcycgJSBtaWNybwotICAgIGlmIGxldmVsICE9ICdmaW5hbCc6CisgICAgICAgIHJlbGVhc2UgKz0gJyVzJyAlIChtaWNybywpCisgICAgaWYgbGV2ZWwgPT0gJ2NhbmRpZGF0ZSc6CisgICAgICAgIHJlbGVhc2UgKz0gJ3JjJXMnICUgKHNlcmlhbCwpCisgICAgZWxpZiBsZXZlbCAhPSAnZmluYWwnOgogICAgICAgICByZWxlYXNlICs9ICclcyVzJyAlIChsZXZlbFswXSwgc2VyaWFsKQogICAgIHJldHVybiByZWxlYXNlCiAKQEAgLTEzNSw2ICsxMzYsMTQgQEAKICAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKICAgICAgICAgICAgICMgQ29tbWFuZC1XIG9uIGVkaXRvcndpbmRvd3MgZG9lc24ndCB3b3JrIHdpdGhvdXQgdGhpcy4KICAgICAgICAgICAgIHRleHQuYmluZCgnPDxjbG9zZS13aW5kb3c+PicsIHNlbGYuY2xvc2VfZXZlbnQpCisgICAgICAgICAgICAjIFNvbWUgT1MgWCBzeXN0ZW1zIGhhdmUgb25seSBvbmUgbW91c2UgYnV0dG9uLAorICAgICAgICAgICAgIyBzbyB1c2UgY29udHJvbC1jbGljayBmb3IgcHVsbGRvd24gbWVudXMgdGhlcmUuCisgICAgICAgICAgICAjICAoTm90ZSwgQXF1YVRrIGRlZmluZXMgPDI+IGFzIHRoZSByaWdodCBidXR0b24gaWYKKyAgICAgICAgICAgICMgICBwcmVzZW50IGFuZCB0aGUgVGsgVGV4dCB3aWRnZXQgYWxyZWFkeSBiaW5kcyA8Mj4uKQorICAgICAgICAgICAgdGV4dC5iaW5kKCI8Q29udHJvbC1CdXR0b24tMT4iLHNlbGYucmlnaHRfbWVudV9ldmVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRWxzZXdoZXJlLCB1c2UgcmlnaHQtY2xpY2sgZm9yIHB1bGxkb3duIG1lbnVzLgorICAgICAgICAgICAgdGV4dC5iaW5kKCI8Mz4iLHNlbGYucmlnaHRfbWVudV9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PGN1dD4+Iiwgc2VsZi5jdXQpCiAgICAgICAgIHRleHQuYmluZCgiPDxjb3B5Pj4iLCBzZWxmLmNvcHkpCiAgICAgICAgIHRleHQuYmluZCgiPDxwYXN0ZT4+Iiwgc2VsZi5wYXN0ZSkKQEAgLTE1Myw3ICsxNjIsNiBAQAogICAgICAgICB0ZXh0LmJpbmQoIjw8ZmluZC1zZWxlY3Rpb24+PiIsIHNlbGYuZmluZF9zZWxlY3Rpb25fZXZlbnQpCiAgICAgICAgIHRleHQuYmluZCgiPDxyZXBsYWNlPj4iLCBzZWxmLnJlcGxhY2VfZXZlbnQpCiAgICAgICAgIHRleHQuYmluZCgiPDxnb3RvLWxpbmU+PiIsIHNlbGYuZ290b19saW5lX2V2ZW50KQotICAgICAgICB0ZXh0LmJpbmQoIjwzPiIsIHNlbGYucmlnaHRfbWVudV9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PHNtYXJ0LWJhY2tzcGFjZT4+IixzZWxmLnNtYXJ0X2JhY2tzcGFjZV9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PG5ld2xpbmUtYW5kLWluZGVudD4+IixzZWxmLm5ld2xpbmVfYW5kX2luZGVudF9ldmVudCkKICAgICAgICAgdGV4dC5iaW5kKCI8PHNtYXJ0LWluZGVudD4+IixzZWxmLnNtYXJ0X2luZGVudF9ldmVudCkKQEAgLTM4NCw3ICszOTIsNyBAQAogICAgICAgICAgICAgbWVudWRpY3RbbmFtZV0gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPW5hbWUpCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPWxhYmVsLCBtZW51PW1lbnUsIHVuZGVybGluZT11bmRlcmxpbmUpCiAKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NhcmJvbkFxdWFUayhzZWxmLnJvb3QpOgogICAgICAgICAgICAgIyBJbnNlcnQgdGhlIGFwcGxpY2F0aW9uIG1lbnUKICAgICAgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT0nYXBwbGUnKQogICAgICAgICAgICAgbWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKQEAgLTQ0NCw3ICs0NTIsMTEgQEAKIAogICAgIGRlZiBweXRob25fZG9jcyhzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKLSAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShzZWxmLmhlbHBfdXJsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShzZWxmLmhlbHBfdXJsKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3ZWJicm93c2VyLm9wZW4oc2VsZi5oZWxwX3VybCkKICAgICAgICAgcmV0dXJuICJicmVhayIKQEAgLTcwNCw4ICs3MTYsOCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBhY2NlbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lID0gbWVudS5lbnRyeWNnZXQoaW5kZXgsICdsYWJlbCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCA9ICcnCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBtZW51RXZlbnREaWN0Lmhhc19rZXkobWVudWJhckl0ZW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1lbnVFdmVudERpY3RbbWVudWJhckl0ZW1dLmhhc19rZXkoaXRlbU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWVudWJhckl0ZW0gaW4gbWVudUV2ZW50RGljdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtTmFtZSBpbiBtZW51RXZlbnREaWN0W21lbnViYXJJdGVtXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQgPSBtZW51RXZlbnREaWN0W21lbnViYXJJdGVtXVtpdGVtTmFtZV0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV2ZW50OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VsID0gZ2V0X2FjY2VsZXJhdG9yKGtleWRlZnMsIGV2ZW50KQpAQCAtNzM5LDkgKzc1MSwxMyBAQAogICAgICAgICAiQ3JlYXRlIGEgY2FsbGJhY2sgd2l0aCB0aGUgaGVscGZpbGUgdmFsdWUgZnJvemVuIGF0IGRlZmluaXRpb24gdGltZSIKICAgICAgICAgZGVmIGRpc3BsYXlfZXh0cmFfaGVscChoZWxwZmlsZT1oZWxwZmlsZSk6CiAgICAgICAgICAgICBpZiBub3QgaGVscGZpbGUuc3RhcnRzd2l0aCgoJ3d3dycsICdodHRwJykpOgotICAgICAgICAgICAgICAgIHVybCA9IG9zLnBhdGgubm9ybXBhdGgoaGVscGZpbGUpCisgICAgICAgICAgICAgICAgaGVscGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGhlbHBmaWxlKQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKLSAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoaGVscGZpbGUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoaGVscGZpbGUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgd2ViYnJvd3Nlci5vcGVuKGhlbHBmaWxlKQogICAgICAgICByZXR1cm4gZGlzcGxheV9leHRyYV9oZWxwCkBAIC03NzcsOCArNzkzLDggQEAKICAgICAgICAgZm9yIGluc3RhbmNlIGluIHNlbGYudG9wLmluc3RhbmNlX2RpY3Qua2V5cygpOgogICAgICAgICAgICAgbWVudSA9IGluc3RhbmNlLnJlY2VudF9maWxlc19tZW51CiAgICAgICAgICAgICBtZW51LmRlbGV0ZSgxLCBFTkQpICAjIGNsZWFyLCBhbmQgcmVidWlsZDoKLSAgICAgICAgICAgIGZvciBpLCBmaWxlIGluIHppcChjb3VudCgpLCByZl9saXN0KToKLSAgICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlWzA6LTFdICAjIHphcCBcbgorICAgICAgICAgICAgZm9yIGksIGZpbGVfbmFtZSBpbiBlbnVtZXJhdGUocmZfbGlzdCk6CisgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gZmlsZV9uYW1lLnJzdHJpcCgpICAjIHphcCBcbgogICAgICAgICAgICAgICAgICMgbWFrZSB1bmljb2RlIHN0cmluZyB0byBkaXNwbGF5IG5vbi1BU0NJSSBjaGFycyBjb3JyZWN0bHkKICAgICAgICAgICAgICAgICB1ZmlsZV9uYW1lID0gc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlX25hbWUpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBpbnN0YW5jZS5fX3JlY2VudF9maWxlX2NhbGxiYWNrKGZpbGVfbmFtZSkKQEAgLTE1MjUsNyArMTU0MSwxMiBAQAogCiBkZWYgZ2V0X2FjY2VsZXJhdG9yKGtleWRlZnMsIGV2ZW50bmFtZSk6CiAgICAga2V5bGlzdCA9IGtleWRlZnMuZ2V0KGV2ZW50bmFtZSkKLSAgICBpZiBub3Qga2V5bGlzdDoKKyAgICAjIGlzc3VlMTA5NDA6IHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHByZXZlbnQgaGFuZyB3aXRoIE9TIFggQ29jb2EgVGsgOC41CisgICAgIyBpZiBub3Qga2V5bGlzdDoKKyAgICBpZiAobm90IGtleWxpc3QpIG9yIChtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBldmVudG5hbWUgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PG9wZW4tbW9kdWxlPj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PGdvdG8tbGluZT4+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDxjaGFuZ2UtaW5kZW50d2lkdGg+PiJ9KToKICAgICAgICAgcmV0dXJuICIiCiAgICAgcyA9IGtleWxpc3RbMF0KICAgICBzID0gcmUuc3ViKHIiLVthLXpdXGIiLCBsYW1iZGEgbTogbS5ncm91cCgpLnVwcGVyKCksIHMpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weSBiL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CmluZGV4IDU2MjI4MDUuLjgzMThmZjEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CisrKyBiL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYucm9vdCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGtleSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCi0gICAgICAgIGlmIHNlbGYuZGljdC5oYXNfa2V5KGtleSk6CisgICAgICAgIGlmIGtleSBpbiBzZWxmLmRpY3Q6CiAgICAgICAgICAgICBlZGl0ID0gc2VsZi5kaWN0W2tleV0KICAgICAgICAgICAgIGVkaXQudG9wLndha2V1cCgpCiAgICAgICAgICAgICByZXR1cm4gZWRpdApAQCAtNDMsNyArNDMsNyBAQAogICAgIGRlZiBuZXcoc2VsZiwgZmlsZW5hbWU9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxmLkVkaXRvcldpbmRvdyhzZWxmLCBmaWxlbmFtZSkKIAotICAgIGRlZiBjbG9zZV9hbGxfY2FsbGJhY2soc2VsZiwgZXZlbnQpOgorICAgIGRlZiBjbG9zZV9hbGxfY2FsbGJhY2soc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIGZvciBlZGl0IGluIHNlbGYuaW52ZXJzZWRpY3Qua2V5cygpOgogICAgICAgICAgICAgcmVwbHkgPSBlZGl0LmNsb3NlKCkKICAgICAgICAgICAgIGlmIHJlcGx5ID09ICJjYW5jZWwiOgpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBuZXdrZXkgPSBvcy5wYXRoLm5vcm1jYXNlKGZpbGVuYW1lKQogICAgICAgICBpZiBuZXdrZXkgPT0ga2V5OgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNlbGYuZGljdC5oYXNfa2V5KG5ld2tleSk6CisgICAgICAgIGlmIG5ld2tleSBpbiBzZWxmLmRpY3Q6CiAgICAgICAgICAgICBjb25mbGljdCA9IHNlbGYuZGljdFtuZXdrZXldCiAgICAgICAgICAgICBzZWxmLmludmVyc2VkaWN0W2NvbmZsaWN0XSA9IE5vbmUKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKaW5kZXggY2JjMWMzMy4uYTViNjEwZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQpAQCAtNTIxLDggKzUyMSw4IEBACiAgICAgc2F2ZWRpYWxvZyA9IE5vbmUKIAogICAgIGZpbGV0eXBlcyA9IFsKLSAgICAgICAgKCJQeXRob24gYW5kIHRleHQgZmlsZXMiLCAiKi5weSAqLnB5dyAqLnR4dCIsICJURVhUIiksCi0gICAgICAgICgiQWxsIHRleHQgZmlsZXMiLCAiKiIsICJURVhUIiksCisgICAgICAgICgiUHl0aG9uIGZpbGVzIiwgIioucHkgKi5weXciLCAiVEVYVCIpLAorICAgICAgICAoIlRleHQgZmlsZXMiLCAiKi50eHQiLCAiVEVYVCIpLAogICAgICAgICAoIkFsbCBmaWxlcyIsICIqIiksCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5IGIvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CmluZGV4IDViNzM0ODEuLmI4MWM1ZWQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQorKysgYi9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcSwgaGFuZGxlcikpKQogCiAgICAgZGVmIGJpbmQoc2VsZiwgdHJpcGxldCwgZnVuYyk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmJpbmRlZGZ1bmNzLmhhc19rZXkodHJpcGxldFsyXSk6CisgICAgICAgIGlmIHRyaXBsZXRbMl0gbm90IGluIHNlbGYuYmluZGVkZnVuY3M6CiAgICAgICAgICAgICBzZWxmLmJpbmRlZGZ1bmNzW3RyaXBsZXRbMl1dID0gW1tdIGZvciBzIGluIF9zdGF0ZXNdCiAgICAgICAgICAgICBmb3IgcyBpbiBfc3RhdGVzOgogICAgICAgICAgICAgICAgIGxpc3RzID0gWyBzZWxmLmJpbmRlZGZ1bmNzW2RldGFpbF1baV0KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5IGIvTGliL2lkbGVsaWIvTXVsdGlTdGF0dXNCYXIucHkKaW5kZXggMmQ0YzU0Ny4uOGVlMmQwMyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTXVsdGlTdGF0dXNCYXIucHkKKysrIGIvTGliL2lkbGVsaWIvTXVsdGlTdGF0dXNCYXIucHkKQEAgLTksNyArOSw3IEBACiAgICAgICAgIHNlbGYubGFiZWxzID0ge30KIAogICAgIGRlZiBzZXRfbGFiZWwoc2VsZiwgbmFtZSwgdGV4dD0nJywgc2lkZT1MRUZUKToKLSAgICAgICAgaWYgbm90IHNlbGYubGFiZWxzLmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYubGFiZWxzOgogICAgICAgICAgICAgbGFiZWwgPSBMYWJlbChzZWxmLCBiZD0xLCByZWxpZWY9U1VOS0VOLCBhbmNob3I9VykKICAgICAgICAgICAgIGxhYmVsLnBhY2soc2lkZT1zaWRlKQogICAgICAgICAgICAgc2VsZi5sYWJlbHNbbmFtZV0gPSBsYWJlbApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCBiYjRjMTQzLi5kMzJkYjFlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMSwzNiArMSwzMCBAQAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjRyYzEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIElETEUgMi43PworPT09PT09PT09PT09PT09PT09PT09PT0KIAotKlJlbGVhc2UgZGF0ZTogMDctT2N0LTIwMDkqCisqUmVsZWFzZSBkYXRlOiAwNy0wMy0yMDEwKgorCistIGlkbGUucHkgbW9kaWZpZWQgYW5kIHNpbXBsaWZpZWQgdG8gYmV0dGVyIHN1cHBvcnQgZGV2ZWxvcGluZyBleHBlcmltZW50YWwKKyAgdmVyc2lvbnMgb2YgSURMRSB3aGljaCBhcmUgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgbG9jYXRpb24uCiAKIC0gT3V0cHV0V2luZG93L1B5U2hlbGwgcmlnaHQgY2xpY2sgbWVudSAiR28gdG8gZmlsZS9saW5lIiB3YXNuJ3Qgd29ya2luZyB3aXRoCiAgIGZpbGUgcGF0aHMgY29udGFpbmluZyBzcGFjZXMuICBCdWcgNTU1OS4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjMKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDAyLU9jdC0yMDA5KgotCi1XaGF0J3MgTmV3IGluIElETEUgMi42LjNyYzE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI4LVNlcC0yMDA5KgotCi0tIE9uIE9TIFggSURMRSAyLjYgc2hvd3MgdHdvIFByZWZlcmVuY2UgbWVudSBpdGVtcy4gIElzc3VlNjk1MS4KLQogLSBXaW5kb3dzOiBWZXJzaW9uIHN0cmluZyBmb3IgdGhlIC5jaG0gaGVscCBmaWxlIGNoYW5nZWQsIGZpbGUgbm90IGJlaW5nCiAgIGFjY2Vzc2VkICBQYXRjaCA1NzgzIEd1aWxoZXJtZSBQb2xvCiAKKy0gQWxsb3cgbXVsdGlwbGUgSURMRSBHVUkvc3VicHJvY2VzcyBwYWlycyB0byBleGlzdCBzaW11bHRhbmVvdXNseS4gVGhhbmtzIHRvCisgIERhdmlkIFNjaGVyZXIgZm9yIHN1Z2dlc3RpbmcgdGhlIHVzZSBvZiBhbiBlcGhlbWVyYWwgcG9ydCBmb3IgdGhlIEdVSS4KKyAgUGF0Y2ggMTUyOTE0MiBXZWVibGUuCisKKy0gUmVtb3ZlIHBvcnQgc3BlYyBmcm9tIHJ1bi5weSBhbmQgZml4IGJ1ZyB3aGVyZSBzdWJwcm9jZXNzIGZhaWxzIHRvCisgIGV4dHJhY3QgcG9ydCBmcm9tIGNvbW1hbmQgbGluZSB3aGVuIHdhcm5pbmdzIGFyZSBwcmVzZW50LgorCiAtIFRrIDguNSBUZXh0IHdpZGdldCByZXF1aXJlcyAnd29yZHByb2Nlc3NvcicgdGFic3R5bGUgYXR0ciB0byBoYW5kbGUKICAgbWl4ZWQgc3BhY2UvdGFiIHByb3Blcmx5LiBJc3N1ZSA1MTI5LCBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotV2hhdCdzIE5ldyBpbiBJRExFIDIuNi4ycmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNi1BcHItMjAwOSoKLQorICAKIC0gSXNzdWUgIzM1NDk6IE9uIE1hY09TIHRoZSBwcmVmZXJlbmNlcyBtZW51IHdhcyBub3QgcHJlc2VudAogCisKIFdoYXQncyBOZXcgaW4gSURMRSAyLjY/CiA9PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC01Niw3ICs1MCw3IEBACiAgIGluIHRoZSBjb25maWcgZGlhbG9nIHdvdWxkIGNhdXNlIG5vbi1QeXRob24gZmlsZXMgdG8gYmUgY29sb3JlZCBhcyBpZiB0aGV5CiAgIHdlcmUgUHl0aG9uIHNvdXJjZTsgaW1wcm92ZSB1c2Ugb2YgQ29sb3JEZWxhZ2F0b3IuICBQYXRjaCAxMzM0LiBUYWwgRWluYXQuCiAKLS0gU2NyaXB0QmluZGluZyBldmVudCBoYW5kbGVycyB3ZXJlbid0IHJldHVybmluZyAnYnJlYWsnLiBQYXRjaCAyMDUwLCBUYWwgRWluYXQKKy0gU2NyaXB0QmluZGluZyBldmVudCBoYW5kbGVycyB3ZXJlbid0IHJldHVybmluZyAnYnJlYWsnLiBQYXRjaCAyMDUwLCBUYWwgRWluYXQuCiAKIC0gVGhlcmUgd2FzIGFuIGVycm9yIG9uIGV4aXQgaWYgbm8gc3lzLmV4aXRmdW5jIHdhcyBkZWZpbmVkLiBJc3N1ZSAxNjQ3LgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvT2JqZWN0QnJvd3Nlci5weQppbmRleCA4MzgzMDgxLi43ZGU2OTg4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiBkZWYgbWFrZV9vYmplY3R0cmVlaXRlbShsYWJlbHRleHQsIG9iamVjdCwgc2V0ZnVuY3Rpb249Tm9uZSk6CiAgICAgdCA9IHR5cGUob2JqZWN0KQotICAgIGlmIGRpc3BhdGNoLmhhc19rZXkodCk6CisgICAgaWYgdCBpbiBkaXNwYXRjaDoKICAgICAgICAgYyA9IGRpc3BhdGNoW3RdCiAgICAgZWxzZToKICAgICAgICAgYyA9IE9iamVjdFRyZWVJdGVtCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXRoQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CmluZGV4IDZiMmMwNzEuLmQ4OGE0OGUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgICAgICAgICAgbm9ybWVkX25hbWUgPSBvcy5wYXRoLm5vcm1jYXNlKG5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbm9ybWVkX25hbWVbaTpdID09IHN1ZmY6CiAgICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lID0gbmFtZVs6aV0KLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG1vZHVsZXMuaGFzX2tleShtb2RfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG1vZF9uYW1lIG5vdCBpbiBtb2R1bGVzOgogICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2RfbmFtZV0gPSBOb25lCiAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQuYXBwZW5kKChub3JtZWRfbmFtZSwgbmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxuYW1lcy5yZW1vdmUobmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CmluZGV4IDY1MjRkZmYuLjBjOTVkZjQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKKysrIGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQpAQCAtMzYsNyArMzYsOCBAQAogZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CiAKIElERU5UQ0hBUlMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIKLUxPQ0FMSE9TVCA9ICcxMjcuMC4wLjEnCitIT1NUID0gJzEyNy4wLjAuMScgIyBweXRob24gZXhlY3V0aW9uIHNlcnZlciBvbiBsb2NhbGhvc3QgbG9vcGJhY2sKK1BPUlQgPSAwICAjIHNvbWVkYXkgcGFzcyBpbiBob3N0LCBwb3J0IGZvciByZW1vdGUgZGVidWcgY2FwYWJpbGl0eQogCiB0cnk6CiAgICAgZnJvbSBzaWduYWwgaW1wb3J0IFNJR1RFUk0KQEAgLTU2LDIwICs1NywyMSBAQAogZWxzZToKICAgICBkZWYgaWRsZV9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPU5vbmUsIGxpbmU9Tm9uZSk6Ci0gICAgICAgIGZpbGUgPSB3YXJuaW5nX3N0cmVhbQorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gd2FybmluZ19zdHJlYW0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZS53cml0ZSh3YXJuaW5ncy5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSxcCisgICAgICAgICAgICBmaWxlLndyaXRlKHdhcm5pbmdzLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgZmlsZT1maWxlLCBsaW5lPWxpbmUpKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIHBhc3MgICMjIGZpbGUgKHByb2JhYmx5IF9fc3RkZXJyX18pIGlzIGludmFsaWQsIHdhcm5pbmcgZHJvcHBlZC4KICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IGlkbGVfc2hvd3dhcm5pbmcKLSAgICBkZWYgaWRsZV9mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgIGRlZiBpZGxlX2Zvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmU9Tm9uZSk6CiAgICAgICAgICIiIkZvcm1hdCB3YXJuaW5ncyB0aGUgSURMRSB3YXkiIiIKICAgICAgICAgcyA9ICJcbldhcm5pbmcgKGZyb20gd2FybmluZ3MgbW9kdWxlKTpcbiIKICAgICAgICAgcyArPSAnICBGaWxlIFwiJXNcIiwgbGluZSAlc1xuJyAlIChmaWxlbmFtZSwgbGluZW5vKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykuc3RyaXAoKSBcCi0gICAgICAgICAgICBpZiBsaW5lIGlzIE5vbmUgZWxzZSBsaW5lCisgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgICBzICs9ICIgICAgJXNcbiIgJSBsaW5lCiAgICAgICAgIHMgKz0gIiVzOiAlc1xuPj4+ICIgJSAoY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCkBAIC04MiwxOCArODQsMTcgQEAKIAogICAgIFJhdGhlciB0aGFuIHJlcGVhdGluZyB0aGUgbGluZWNhY2hlIGNvZGUsIHBhdGNoIGl0IHRvIHNhdmUgdGhlCiAgICAgPHB5c2hlbGwjLi4uPiBlbnRyaWVzLCBjYWxsIHRoZSBvcmlnaW5hbCBsaW5lY2FjaGUuY2hlY2tjYWNoZSgpCi0gICAgKHdoaWNoIGRlc3Ryb3lzIHRoZW0pLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBzYXZlZCBlbnRyaWVzLgorICAgIChza2lwcGluZyB0aGVtKSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgc2F2ZWQgZW50cmllcy4KIAogICAgIG9yaWdfY2hlY2tjYWNoZSBpcyBib3VuZCBhdCBkZWZpbml0aW9uIHRpbWUgdG8gdGhlIG9yaWdpbmFsCiAgICAgbWV0aG9kLCBhbGxvd2luZyBpdCB0byBiZSBwYXRjaGVkLgotCiAgICAgIiIiCiAgICAgY2FjaGUgPSBsaW5lY2FjaGUuY2FjaGUKICAgICBzYXZlID0ge30KLSAgICBmb3IgZmlsZW5hbWUgaW4gY2FjaGUua2V5cygpOgotICAgICAgICBpZiBmaWxlbmFtZVs6MV0gKyBmaWxlbmFtZVstMTpdID09ICc8Pic6Ci0gICAgICAgICAgICBzYXZlW2ZpbGVuYW1lXSA9IGNhY2hlW2ZpbGVuYW1lXQotICAgIG9yaWdfY2hlY2tjYWNoZSgpCisgICAgZm9yIGtleSBpbiBsaXN0KGNhY2hlKToKKyAgICAgICAgaWYga2V5WzoxXSArIGtleVstMTpdID09ICc8Pic6CisgICAgICAgICAgICBzYXZlW2tleV0gPSBjYWNoZS5wb3Aoa2V5KQorICAgIG9yaWdfY2hlY2tjYWNoZShmaWxlbmFtZSkKICAgICBjYWNoZS51cGRhdGUoc2F2ZSkKIAogIyBQYXRjaCBsaW5lY2FjaGUuY2hlY2tjYWNoZSgpOgpAQCAtMzQxLDE3ICszNDIsMjEgQEAKICAgICAgICAgSW50ZXJhY3RpdmVJbnRlcnByZXRlci5fX2luaXRfXyhzZWxmLCBsb2NhbHM9bG9jYWxzKQogICAgICAgICBzZWxmLnNhdmVfd2FybmluZ3NfZmlsdGVycyA9IE5vbmUKICAgICAgICAgc2VsZi5yZXN0YXJ0aW5nID0gRmFsc2UKLSAgICAgICAgc2VsZi5zdWJwcm9jZXNzX2FyZ2xpc3QgPSBzZWxmLmJ1aWxkX3N1YnByb2Nlc3NfYXJnbGlzdCgpCisgICAgICAgIHNlbGYuc3VicHJvY2Vzc19hcmdsaXN0ID0gTm9uZQorICAgICAgICBzZWxmLnBvcnQgPSBQT1JUCiAKLSAgICBwb3J0ID0gODgzMwogICAgIHJwY2NsdCA9IE5vbmUKICAgICBycGNwaWQgPSBOb25lCiAKICAgICBkZWYgc3Bhd25fc3VicHJvY2VzcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdWJwcm9jZXNzX2FyZ2xpc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3VicHJvY2Vzc19hcmdsaXN0ID0gc2VsZi5idWlsZF9zdWJwcm9jZXNzX2FyZ2xpc3QoKQogICAgICAgICBhcmdzID0gc2VsZi5zdWJwcm9jZXNzX2FyZ2xpc3QKICAgICAgICAgc2VsZi5ycGNwaWQgPSBvcy5zcGF3bnYob3MuUF9OT1dBSVQsIHN5cy5leGVjdXRhYmxlLCBhcmdzKQogCiAgICAgZGVmIGJ1aWxkX3N1YnByb2Nlc3NfYXJnbGlzdChzZWxmKToKKyAgICAgICAgYXNzZXJ0IChzZWxmLnBvcnQhPTApLCAoCisgICAgICAgICAgICAiU29ja2V0IHNob3VsZCBoYXZlIGJlZW4gYXNzaWduZWQgYSBwb3J0IG51bWJlci4iKQogICAgICAgICB3ID0gWyctVycgKyBzIGZvciBzIGluIHN5cy53YXJub3B0aW9uc10KICAgICAgICAgaWYgMS8yID4gMDogIyBhY2NvdW50IGZvciBuZXcgZGl2aXNpb24KICAgICAgICAgICAgIHcuYXBwZW5kKCctUW5ldycpCkBAIC0zNzIsMTEgKzM3Nyw4IEBACiAgICAgICAgIHJldHVybiBbZGVjb3JhdGVkX2V4ZWNdICsgdyArIFsiLWMiLCBjb21tYW5kLCBzdHIoc2VsZi5wb3J0KV0KIAogICAgIGRlZiBzdGFydF9zdWJwcm9jZXNzKHNlbGYpOgotICAgICAgICAjIHNwYXduaW5nIGZpcnN0IGF2b2lkcyBwYXNzaW5nIGEgbGlzdGVuaW5nIHNvY2tldCB0byB0aGUgc3VicHJvY2VzcwotICAgICAgICBzZWxmLnNwYXduX3N1YnByb2Nlc3MoKQotICAgICAgICAjdGltZS5zbGVlcCgyMCkgIyB0ZXN0IHRvIHNpbXVsYXRlIEdVSSBub3QgYWNjZXB0aW5nIGNvbm5lY3Rpb24KLSAgICAgICAgYWRkciA9IChMT0NBTEhPU1QsIHNlbGYucG9ydCkKLSAgICAgICAgIyBJZGxlIHN0YXJ0cyBsaXN0ZW5pbmcgZm9yIGNvbm5lY3Rpb24gb24gbG9jYWxob3N0CisgICAgICAgIGFkZHIgPSAoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICAjIEdVSSBtYWtlcyBzZXZlcmFsIGF0dGVtcHRzIHRvIGFjcXVpcmUgc29ja2V0LCBsaXN0ZW5zIGZvciBjb25uZWN0aW9uCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgogICAgICAgICAgICAgdGltZS5zbGVlcChpKQogICAgICAgICAgICAgdHJ5OgpAQCAtMzg3LDYgKzM4OSwxOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5kaXNwbGF5X3BvcnRfYmluZGluZ19lcnJvcigpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAjIGlmIFBPUlQgd2FzIDAsIHN5c3RlbSB3aWxsIGFzc2lnbiBhbiAnZXBoZW1lcmFsJyBwb3J0LiBGaW5kIGl0IG91dDoKKyAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5ycGNjbHQubGlzdGVuaW5nX3NvY2suZ2V0c29ja25hbWUoKVsxXQorICAgICAgICAjIGlmIFBPUlQgd2FzIG5vdCAwLCBwcm9iYWJseSB3b3JraW5nIHdpdGggYSByZW1vdGUgZXhlY3V0aW9uIHNlcnZlcgorICAgICAgICBpZiBQT1JUICE9IDA6CisgICAgICAgICAgICAjIFRvIGFsbG93IHJlY29ubmVjdGlvbiB3aXRoaW4gdGhlIDJNU0wgd2FpdCAoY2YuIFN0ZXZlbnMgVENQCisgICAgICAgICAgICAjIFYxLCAxOC42KSwgIHNldCBTT19SRVVTRUFERFIuICBOb3RlIHRoYXQgdGhpcyBjYW4gYmUgcHJvYmxlbWF0aWMKKyAgICAgICAgICAgICMgb24gV2luZG93cyBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gYWxsb3dzIHR3byBhY3RpdmUgc29ja2V0cyBvbgorICAgICAgICAgICAgIyB0aGUgc2FtZSBhZGRyZXNzIQorICAgICAgICAgICAgc2VsZi5ycGNjbHQubGlzdGVuaW5nX3NvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzZWxmLnNwYXduX3N1YnByb2Nlc3MoKQorICAgICAgICAjdGltZS5zbGVlcCgyMCkgIyB0ZXN0IHRvIHNpbXVsYXRlIEdVSSBub3QgYWNjZXB0aW5nIGNvbm5lY3Rpb24KICAgICAgICAgIyBBY2NlcHQgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIKICAgICAgICAgc2VsZi5ycGNjbHQubGlzdGVuaW5nX3NvY2suc2V0dGltZW91dCgxMCkKICAgICAgICAgdHJ5OgpAQCAtNzUzLDEzICs3NjcsMTIgQEAKICAgICBkZWYgZGlzcGxheV9wb3J0X2JpbmRpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCiAgICAgICAgICAgICAiUG9ydCBCaW5kaW5nIEVycm9yIiwKLSAgICAgICAgICAgICJJRExFIGNhbid0IGJpbmQgVENQL0lQIHBvcnQgODgzMywgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvICIKLSAgICAgICAgICAgICJjb21tdW5pY2F0ZSB3aXRoIGl0cyBQeXRob24gZXhlY3V0aW9uIHNlcnZlci4gIEVpdGhlciAiCi0gICAgICAgICAgICAibm8gbmV0d29ya2luZyBpcyBpbnN0YWxsZWQgb24gdGhpcyBjb21wdXRlciBvciBhbm90aGVyICIKLSAgICAgICAgICAgICJwcm9jZXNzIChhbm90aGVyIElETEU/KSBpcyB1c2luZyB0aGUgcG9ydC4gIFJ1biBJRExFIHdpdGggdGhlIC1uICIKLSAgICAgICAgICAgICJjb21tYW5kIGxpbmUgc3dpdGNoIHRvIHN0YXJ0IHdpdGhvdXQgYSBzdWJwcm9jZXNzIGFuZCByZWZlciB0byAiCi0gICAgICAgICAgICAiSGVscC9JRExFIEhlbHAgJ1J1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3MnIGZvciBmdXJ0aGVyICIKLSAgICAgICAgICAgICJkZXRhaWxzLiIsCisgICAgICAgICAgICAiSURMRSBjYW4ndCBiaW5kIHRvIGEgVENQL0lQIHBvcnQsIHdoaWNoIGlzIG5lY2Vzc2FyeSB0byAiCisgICAgICAgICAgICAiY29tbXVuaWNhdGUgd2l0aCBpdHMgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIG1pZ2h0IGJlICIKKyAgICAgICAgICAgICJiZWNhdXNlIG5vIG5ldHdvcmtpbmcgaXMgaW5zdGFsbGVkIG9uIHRoaXMgY29tcHV0ZXIuICAiCisgICAgICAgICAgICAiUnVuIElETEUgd2l0aCB0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaCB0byBzdGFydCB3aXRob3V0IGEgIgorICAgICAgICAgICAgInN1YnByb2Nlc3MgYW5kIHJlZmVyIHRvIEhlbHAvSURMRSBIZWxwICdSdW5uaW5nIHdpdGhvdXQgYSAiCisgICAgICAgICAgICAic3VicHJvY2VzcycgZm9yIGZ1cnRoZXIgZGV0YWlscy4iLAogICAgICAgICAgICAgbWFzdGVyPXNlbGYudGtjb25zb2xlLnRleHQpCiAKICAgICBkZWYgZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKHNlbGYpOgpAQCAtOTcyLDE1ICs5ODUsNiBAQAogICAgIENPUFlSSUdIVCA9IFwKICAgICAgICAgICAnVHlwZSAiY29weXJpZ2h0IiwgImNyZWRpdHMiIG9yICJsaWNlbnNlKCkiIGZvciBtb3JlIGluZm9ybWF0aW9uLicKIAotICAgIGZpcmV3YWxsbWVzc2FnZSA9ICIiIgotICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICBQZXJzb25hbCBmaXJld2FsbCBzb2Z0d2FyZSBtYXkgd2FybiBhYm91dCB0aGUgY29ubmVjdGlvbiBJRExFCi0gICAgbWFrZXMgdG8gaXRzIHN1YnByb2Nlc3MgdXNpbmcgdGhpcyBjb21wdXRlcidzIGludGVybmFsIGxvb3BiYWNrCi0gICAgaW50ZXJmYWNlLiAgVGhpcyBjb25uZWN0aW9uIGlzIG5vdCB2aXNpYmxlIG9uIGFueSBleHRlcm5hbAotICAgIGludGVyZmFjZSBhbmQgbm8gZGF0YSBpcyBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gdGhlIEludGVybmV0LgotICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAiIiIKLQogICAgIGRlZiBiZWdpbihzZWxmKToKICAgICAgICAgc2VsZi5yZXNldG91dHB1dCgpCiAgICAgICAgIGlmIHVzZV9zdWJwcm9jZXNzOgpAQCAtOTkxLDkgKzk5NSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBub3N1YiA9ICI9PT09IE5vIFN1YnByb2Nlc3MgPT09PSIKLSAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuJXNcbklETEUgJXMgICAgICAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgKHN5cy52ZXJzaW9uLCBzeXMucGxhdGZvcm0sIHNlbGYuQ09QWVJJR0hULAotICAgICAgICAgICAgICAgICAgICBzZWxmLmZpcmV3YWxsbWVzc2FnZSwgaWRsZXZlci5JRExFX1ZFUlNJT04sIG5vc3ViKSkKKyAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuJXMiICUKKyAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgc2VsZi5DT1BZUklHSFQsIG5vc3ViKSkKICAgICAgICAgc2VsZi5zaG93cHJvbXB0KCkKICAgICAgICAgaW1wb3J0IFRraW50ZXIKICAgICAgICAgVGtpbnRlci5fZGVmYXVsdF9yb290ID0gTm9uZSAjIDAzSmFuMDQgS0JLIFdoYXQncyB0aGlzPwpAQCAtMTMxMCw3ICsxMzEzLDcgQEAKICAgICBnbG9iYWwgZmxpc3QsIHJvb3QsIHVzZV9zdWJwcm9jZXNzCiAKICAgICB1c2Vfc3VicHJvY2VzcyA9IFRydWUKLSAgICBlbmFibGVfc2hlbGwgPSBGYWxzZQorICAgIGVuYWJsZV9zaGVsbCA9IFRydWUKICAgICBlbmFibGVfZWRpdCA9IEZhbHNlCiAgICAgZGVidWcgPSBGYWxzZQogICAgIGNtZCA9IE5vbmUKQEAgLTEzMzEsNiArMTMzNCw3IEBACiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1lJzoKICAgICAgICAgICAgIGVuYWJsZV9lZGl0ID0gVHJ1ZQorICAgICAgICAgICAgZW5hYmxlX3NoZWxsID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLWgnOgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh1c2FnZV9tc2cpCiAgICAgICAgICAgICBzeXMuZXhpdCgpCkBAIC0xMzgxLDcgKzEzODUsNiBAQAogICAgIGVkaXRfc3RhcnQgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnR2VuZXJhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdG9yLW9uLXN0YXJ0dXAnLCB0eXBlPSdib29sJykKICAgICBlbmFibGVfZWRpdCA9IGVuYWJsZV9lZGl0IG9yIGVkaXRfc3RhcnQKLSAgICBlbmFibGVfc2hlbGwgPSBlbmFibGVfc2hlbGwgb3Igbm90IGVkaXRfc3RhcnQKICAgICAjIHN0YXJ0IGVkaXRvciBhbmQvb3Igc2hlbGwgd2luZG93czoKICAgICByb290ID0gVGsoY2xhc3NOYW1lPSJJZGxlIikKIApAQCAtMTQyOSw2ICsxNDMyLDEzIEBACiAgICAgICAgICAgICBzaGVsbC5pbnRlcnAucHJlcGVuZF9zeXNwYXRoKHNjcmlwdCkKICAgICAgICAgICAgIHNoZWxsLmludGVycC5leGVjZmlsZShzY3JpcHQpCiAKKyAgICAjIENoZWNrIGZvciBwcm9ibGVtYXRpYyBPUyBYIFRrIHZlcnNpb25zIGFuZCBwcmludCBhIHdhcm5pbmcgbWVzc2FnZQorICAgICMgaW4gdGhlIElETEUgc2hlbGwgd2luZG93OyB0aGlzIGlzIGxlc3MgaW50cnVzaXZlIHRoYW4gYWx3YXlzIG9wZW5pbmcKKyAgICAjIGEgc2VwYXJhdGUgd2luZG93LgorICAgIHRrdmVyc2lvbndhcm5pbmcgPSBtYWNvc3hTdXBwb3J0LnRrVmVyc2lvbldhcm5pbmcocm9vdCkKKyAgICBpZiB0a3ZlcnNpb253YXJuaW5nOgorICAgICAgICBzaGVsbC5pbnRlcnAucnVuY29tbWFuZCgnJy5qb2luKCgicHJpbnQoJyIsIHRrdmVyc2lvbndhcm5pbmcsICInKSIpKSkKKwogICAgIHJvb3QubWFpbmxvb3AoKQogICAgIHJvb3QuZGVzdHJveSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JlbW90ZURlYnVnZ2VyLnB5IGIvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkKaW5kZXggZmZlZmZjZS4uNjQ3Mjg1ZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RpY3RfcHJveHkoZGlkKQogCiAgICAgZGVmIF9nZXRfZGljdF9wcm94eShzZWxmLCBkaWQpOgotICAgICAgICBpZiBzZWxmLl9kaWN0Y2FjaGUuaGFzX2tleShkaWQpOgorICAgICAgICBpZiBkaWQgaW4gc2VsZi5fZGljdGNhY2hlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RpY3RjYWNoZVtkaWRdCiAgICAgICAgIGRwID0gRGljdFByb3h5KHNlbGYuX2Nvbm4sIHNlbGYuX29pZCwgZGlkKQogICAgICAgICBzZWxmLl9kaWN0Y2FjaGVbZGlkXSA9IGRwCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9Sc3RyaXBFeHRlbnNpb24ucHkgYi9MaWIvaWRsZWxpYi9Sc3RyaXBFeHRlbnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllMzVkNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL1JzdHJpcEV4dGVuc2lvbi5weQpAQCAtMCwwICsxLDI5IEBACisnUHJvdmlkZXMgIlN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UiIHVuZGVyIHRoZSAiRm9ybWF0IiBtZW51LicKKworX19hdXRob3JfXyA9ICJSb2dlciBELiBTZXJ3eSA8cm9nZXIuc2Vyd3kgYXQgZ21haWwuY29tPiIKKworY2xhc3MgUnN0cmlwRXh0ZW5zaW9uOgorCisgICAgbWVudWRlZnMgPSBbCisgICAgICAgICgnZm9ybWF0JywgW05vbmUsCisgICAgICAgICAgICAgICAoJ1N0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UnLCAnPDxkby1yc3RyaXA+PicpLAorICAgICAgIF0pLF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlZGl0d2luKToKKyAgICAgICAgc2VsZi5lZGl0d2luID0gZWRpdHdpbgorICAgICAgICBzZWxmLmVkaXR3aW4udGV4dC5iaW5kKCI8PGRvLXJzdHJpcD4+Iiwgc2VsZi5kb19yc3RyaXApCisKKyAgICBkZWYgZG9fcnN0cmlwKHNlbGYsIGV2ZW50PU5vbmUpOgorCisgICAgICAgIHRleHQgPSBzZWxmLmVkaXR3aW4udGV4dAorICAgICAgICB1bmRvID0gc2VsZi5lZGl0d2luLnVuZG8KKworICAgICAgICB1bmRvLnVuZG9fYmxvY2tfc3RhcnQoKQorCisgICAgICAgIGVuZF9saW5lID0gaW50KGZsb2F0KHRleHQuaW5kZXgoJ2VuZCcpKSkgKyAxCisgICAgICAgIGZvciBjdXIgaW4gcmFuZ2UoMSwgZW5kX2xpbmUpOgorICAgICAgICAgICAgdHh0ID0gdGV4dC5nZXQoJyVpLjAnICUgY3VyLCAnJWkuMCBsaW5lZW5kJyAlIGN1cikKKyAgICAgICAgICAgIGN1dCA9IGxlbih0eHQucnN0cmlwKCkpCisgICAgICAgICAgICB0ZXh0LmRlbGV0ZSgnJWkuJWknICUgKGN1ciwgY3V0KSwgJyVpLjAgbGluZWVuZCcgJSBjdXIpCisKKyAgICAgICAgdW5kby51bmRvX2Jsb2NrX3N0b3AoKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weSBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKaW5kZXggN2Q5NjJmZS4uMGZlY2EwMSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQorKysgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CkBAIC00MDksNyArNDA5LDcgQEAKIAogY2xhc3MgU2Nyb2xsZWRDYW52YXM6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgKipvcHRzKToKLSAgICAgICAgaWYgbm90IG9wdHMuaGFzX2tleSgneXNjcm9sbGluY3JlbWVudCcpOgorICAgICAgICBpZiAneXNjcm9sbGluY3JlbWVudCcgbm90IGluIG9wdHM6CiAgICAgICAgICAgICBvcHRzWyd5c2Nyb2xsaW5jcmVtZW50J10gPSAxNwogICAgICAgICBzZWxmLm1hc3RlciA9IG1hc3RlcgogICAgICAgICBzZWxmLmZyYW1lID0gRnJhbWUobWFzdGVyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnLWV4dGVuc2lvbnMuZGVmIGIvTGliL2lkbGVsaWIvY29uZmlnLWV4dGVuc2lvbnMuZGVmCmluZGV4IDJkNWNmNjguLjc4YjY4ZjYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZgorKysgYi9MaWIvaWRsZWxpYi9jb25maWctZXh0ZW5zaW9ucy5kZWYKQEAgLTg2LDMgKzg2LDkgQEAKIGZnY29sb3I9QmxhY2sKIFtDb2RlQ29udGV4dF9iaW5kaW5nc10KIHRvZ2dsZS1jb2RlLWNvbnRleHQ9CisKK1tSc3RyaXBFeHRlbnNpb25dCitlbmFibGU9MQorZW5hYmxlX3NoZWxsPTAKK2VuYWJsZV9lZGl0b3I9MQorCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYgYi9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYKaW5kZXggZmIwYWFmNC4uZmRjMzViYSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZgpAQCAtMTc2LDcgKzE3Niw3IEBACiByZWRvID0gPFNoaWZ0LUNvbW1hbmQtS2V5LVo+CiBjbG9zZS13aW5kb3cgPSA8Q29tbWFuZC1LZXktdz4KIHJlc3RhcnQtc2hlbGwgPSA8Q29udHJvbC1LZXktRjY+Ci1zYXZlLXdpbmRvdy1hcy1maWxlID0gPENvbW1hbmQtS2V5LVM+CitzYXZlLXdpbmRvdy1hcy1maWxlID0gPFNoaWZ0LUNvbW1hbmQtS2V5LVM+CiBjbG9zZS1hbGwtd2luZG93cyA9IDxDb21tYW5kLUtleS1xPgogdmlldy1yZXN0YXJ0ID0gPEtleS1GNj4KIHRhYmlmeS1yZWdpb24gPSA8Q29udHJvbC1LZXktNT4KQEAgLTIwOCw3ICsyMDgsNyBAQAogb3Blbi1tb2R1bGUgPSA8Q29tbWFuZC1LZXktbT4KIGZpbmQtc2VsZWN0aW9uID0gPFNoaWZ0LUNvbW1hbmQtS2V5LUYzPgogcHl0aG9uLWNvbnRleHQtaGVscCA9IDxTaGlmdC1LZXktRjE+Ci1zYXZlLWNvcHktb2Ytd2luZG93LWFzLWZpbGUgPSA8U2hpZnQtQ29tbWFuZC1LZXktcz4KK3NhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZSA9IDxPcHRpb24tQ29tbWFuZC1LZXktcz4KIG9wZW4td2luZG93LWZyb20tZmlsZSA9IDxDb21tYW5kLUtleS1vPgogcHl0aG9uLWRvY3MgPSA8S2V5LUYxPgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKaW5kZXggOGQzYTQ5ZC4uZGJhZWRjNyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQpAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICBzZWxmLndtX3dpdGhkcmF3KCkKIAogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQorICAgICAgICBzZWxmLnRpdGxlKCdJRExFIFByZWZlcmVuY2VzJykKICAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSsyMCwKICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSszMCkpCiAgICAgICAgICNUaGVtZSBFbGVtZW50cy4gRWFjaCB0aGVtZSBlbGVtZW50IGtleSBpcyBpdHMgZGlzcGxheSBuYW1lLgpAQCAtNTYxLDcgKzU2Miw3IEBACiAKICAgICBkZWYgQWRkQ2hhbmdlZEl0ZW0oc2VsZix0eXBlLHNlY3Rpb24saXRlbSx2YWx1ZSk6CiAgICAgICAgIHZhbHVlPXN0cih2YWx1ZSkgI21ha2Ugc3VyZSB3ZSB1c2UgYSBzdHJpbmcKLSAgICAgICAgaWYgbm90IHNlbGYuY2hhbmdlZEl0ZW1zW3R5cGVdLmhhc19rZXkoc2VjdGlvbik6CisgICAgICAgIGlmIHNlY3Rpb24gbm90IGluIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cGVdOgogICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl09e30KICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl1baXRlbV09dmFsdWUKIApAQCAtNzA4LDcgKzcwOSw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgI3JlbW92ZSBrZXkgc2V0IGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5yZW1vdmVfc2VjdGlvbihrZXlTZXROYW1lKQotICAgICAgICBpZiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddLmhhc19rZXkoa2V5U2V0TmFtZSk6CisgICAgICAgIGlmIGtleVNldE5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2tleXMnXToKICAgICAgICAgICAgIGRlbChzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdKQogICAgICAgICAjd3JpdGUgY2hhbmdlcwogICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uU2F2ZSgpCkBAIC03MzUsNyArNzM2LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjcmVtb3ZlIHRoZW1lIGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLnJlbW92ZV9zZWN0aW9uKHRoZW1lTmFtZSkKLSAgICAgICAgaWYgc2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddLmhhc19rZXkodGhlbWVOYW1lKToKKyAgICAgICAgaWYgdGhlbWVOYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXToKICAgICAgICAgICAgIGRlbChzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J11bdGhlbWVOYW1lXSkKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2F2ZSgpCkBAIC04NzAsOSArODcxLDkgQEAKICAgICAgICAgICAgICNoYW5kbGUgYW55IHVuc2F2ZWQgY2hhbmdlcyB0byB0aGlzIHRoZW1lCiAgICAgICAgICAgICBpZiB0aGVtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J10ua2V5cygpOgogICAgICAgICAgICAgICAgIHRoZW1lRGljdD1zZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J11bdGhlbWVdCi0gICAgICAgICAgICAgICAgaWYgdGhlbWVEaWN0Lmhhc19rZXkoZWxlbWVudCsnLWZvcmVncm91bmQnKToKKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50KyctZm9yZWdyb3VuZCcgaW4gdGhlbWVEaWN0OgogICAgICAgICAgICAgICAgICAgICBjb2xvdXJzWydmb3JlZ3JvdW5kJ109dGhlbWVEaWN0W2VsZW1lbnQrJy1mb3JlZ3JvdW5kJ10KLSAgICAgICAgICAgICAgICBpZiB0aGVtZURpY3QuaGFzX2tleShlbGVtZW50KyctYmFja2dyb3VuZCcpOgorICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CiAgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQogICAgICAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLnRhZ19jb25maWcoZWxlbWVudCwgKipjb2xvdXJzKQogICAgICAgICBzZWxmLlNldENvbG91clNhbXBsZSgpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQppbmRleCBiMDBiZGNmLi43MzQ4N2Q1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgICAgICBlbHNlOiAjcmV0dXJuaW5nIGRlZmF1bHQsIHByaW50IHdhcm5pbmcKICAgICAgICAgICAgIGlmIHdhcm5fb25fZGVmYXVsdDoKICAgICAgICAgICAgICAgICB3YXJuaW5nID0gKCdcbiBXYXJuaW5nOiBjb25maWdIYW5kbGVyLnB5IC0gSWRsZUNvbmYuR2V0T3B0aW9uIC1cbicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcHJvYmxlbSByZXRyaWV2aW5nIGNvbmZpZ3JhdGlvbiBvcHRpb24gJXJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcHJvYmxlbSByZXRyaWV2aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uICVyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZyb20gc2VjdGlvbiAlci5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcmV0dXJuaW5nIGRlZmF1bHQgdmFsdWU6ICVyXG4nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24sIHNlY3Rpb24sIGRlZmF1bHQpKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZS5iYXQgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdAppbmRleCBjMWI1ZmQyLi5jYzY1M2RjIDEwMDc1NQotLS0gYS9MaWIvaWRsZWxpYi9pZGxlLmJhdAorKysgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdApAQCAtMSwzICsxLDQgQEAKIEBlY2hvIG9mZgotcmVtIFdvcmtpbmcgSURMRSBiYXQgZm9yIFdpbmRvd3MgLSB1c2VzIHN0YXJ0IGluc3RlYWQgb2YgYWJzb2x1dGUgcGF0aG5hbWUKLXN0YXJ0IGlkbGUucHl3ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5CityZW0gU3RhcnQgSURMRSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIGludGVycHJldGVyCitzZXQgQ1VSUkRJUj0lfmRwMAorc3RhcnQgIiVDVVJSRElSJS4uXC4uXHB5dGhvbncuZXhlIiAiJUNVUlJESVIlaWRsZS5weXciICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlLnB5IGIvTGliL2lkbGVsaWIvaWRsZS5weQppbmRleCA1MzdkZDVhLi5hMjQ5NTU3IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGUucHkKQEAgLTEsMjEgKzEsMTEgQEAKLXRyeToKLSAgICBpbXBvcnQgaWRsZWxpYi5QeVNoZWxsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBJRExFIGlzIG5vdCBpbnN0YWxsZWQsIGJ1dCBtYXliZSBQeVNoZWxsIGlzIG9uIHN5cy5wYXRoOgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IFB5U2hlbGwKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJhaXNlCi0gICAgZWxzZToKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIGlkbGVkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKFB5U2hlbGwuX19maWxlX18pKQotICAgICAgICBpZiBpZGxlZGlyICE9IG9zLmdldGN3ZCgpOgotICAgICAgICAgICAgIyBXZSdyZSBub3QgaW4gdGhlIElETEUgZGlyZWN0b3J5LCBoZWxwIHRoZSBzdWJwcm9jZXNzIGZpbmQgcnVuLnB5Ci0gICAgICAgICAgICBweXBhdGggPSBvcy5lbnZpcm9uLmdldCgnUFlUSE9OUEFUSCcsICcnKQotICAgICAgICAgICAgaWYgcHlwYXRoOgotICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IHB5cGF0aCArICc6JyArIGlkbGVkaXIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gaWRsZWRpcgotICAgICAgICBQeVNoZWxsLm1haW4oKQotZWxzZToKLSAgICBpZGxlbGliLlB5U2hlbGwubWFpbigpCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworCisjIElmIHdlIGFyZSB3b3JraW5nIG9uIGEgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBJRExFLCB3ZSBuZWVkIHRvIHByZXBlbmQgdGhlCisjIHBhcmVudCBvZiB0aGlzIGlkbGVsaWIgZGlyIHRvIHN5cy5wYXRoLiAgT3RoZXJ3aXNlLCBpbXBvcnRpbmcgaWRsZWxpYiBnZXRzCisjIHRoZSB2ZXJzaW9uIGluc3RhbGxlZCB3aXRoIHRoZSBQeXRob24gdXNlZCB0byBjYWxsIHRoaXMgbW9kdWxlOgoraWRsZWxpYl9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKQorc3lzLnBhdGguaW5zZXJ0KDAsIGlkbGVsaWJfZGlyKQorCitpbXBvcnQgaWRsZWxpYi5QeVNoZWxsCitpZGxlbGliLlB5U2hlbGwubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5IGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQppbmRleCAyODg4YWFmLi5iNmUxYTFkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKQEAgLTEgKzEgQEAKLUlETEVfVkVSU0lPTiA9ICIyLjYuNiIKK0lETEVfVkVSU0lPTiA9ICIyLjcuMSIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CmluZGV4IDdlZjU2ZjMuLjcyMmFjNTQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKKysrIGIvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQpAQCAtNCwxNCArNCw1MiBAQAogIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgVGtpbnRlcgorZnJvbSBvcyBpbXBvcnQgcGF0aAorCisKK19hcHBidW5kbGUgPSBOb25lCiAKIGRlZiBydW5uaW5nQXNPU1hBcHAoKToKICAgICAiIiIKICAgICBSZXR1cm5zIFRydWUgaWYgUHl0aG9uIGlzIHJ1bm5pbmcgZnJvbSB3aXRoaW4gYW4gYXBwIG9uIE9TWC4KICAgICBJZiBzbywgYXNzdW1lIHRoYXQgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEFxdWEgVGNsL1RrIHJhdGhlciB0aGFuCi0gICAgWDExIFRjay9Uay4KKyAgICBYMTEgVGNsL1RrLgogICAgICIiIgotICAgIHJldHVybiAoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAnLmFwcCcgaW4gc3lzLmV4ZWN1dGFibGUpCisgICAgZ2xvYmFsIF9hcHBidW5kbGUKKyAgICBpZiBfYXBwYnVuZGxlIGlzIE5vbmU6CisgICAgICAgIF9hcHBidW5kbGUgPSAoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAnLmFwcCcgaW4gc3lzLmV4ZWN1dGFibGUpCisgICAgcmV0dXJuIF9hcHBidW5kbGUKKworX2NhcmJvbmFxdWF0ayA9IE5vbmUKKworZGVmIGlzQ2FyYm9uQXF1YVRrKHJvb3QpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBJRExFIGlzIHVzaW5nIGEgQ2FyYm9uIEFxdWEgVGsgKGluc3RlYWQgb2YgdGhlCisgICAgbmV3ZXIgQ29jb2EgQXF1YSBUaykuCisgICAgIiIiCisgICAgZ2xvYmFsIF9jYXJib25hcXVhdGsKKyAgICBpZiBfY2FyYm9uYXF1YXRrIGlzIE5vbmU6CisgICAgICAgIF9jYXJib25hcXVhdGsgPSAocnVubmluZ0FzT1NYQXBwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FxdWEnIGluIHJvb3QudGsuY2FsbCgndGsnLCAnd2luZG93aW5nc3lzdGVtJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FwcEtpdCcgbm90IGluIHJvb3QudGsuY2FsbCgnd2luZm8nLCAnc2VydmVyJywgJy4nKSkKKyAgICByZXR1cm4gX2NhcmJvbmFxdWF0aworCitkZWYgdGtWZXJzaW9uV2FybmluZyhyb290KToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgc3RyaW5nIHdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgVGsgdmVyc2lvbiBpbiB1c2UgYXBwZWFycyB0bworICAgIGJlIG9uZSBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIElETEUuICBUaGUgQXBwbGUgQ29jb2EtYmFzZWQgVGsgOC41CisgICAgdGhhdCB3YXMgc2hpcHBlZCB3aXRoIE1hYyBPUyBYIDEwLjYuCisgICAgIiIiCisKKyAgICBpZiAocnVubmluZ0FzT1NYQXBwKCkgYW5kCisgICAgICAgICAgICAoJ0FwcEtpdCcgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKSBhbmQKKyAgICAgICAgICAgIChyb290LnRrLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpID09ICc4LjUuNycpICk6CisgICAgICAgIHJldHVybiAociJXQVJOSU5HOiBUaGUgdmVyc2lvbiBvZiBUY2wvVGsgKDguNS43KSBpbiB1c2UgbWF5IgorICAgICAgICAgICAgICAgIHIiIGJlIHVuc3RhYmxlLlxuIgorICAgICAgICAgICAgICAgIHIiVmlzaXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8iCisgICAgICAgICAgICAgICAgciIgZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24uIikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogZGVmIGFkZE9wZW5FdmVudFN1cHBvcnQocm9vdCwgZmxpc3QpOgogICAgICIiIgpAQCAtNzMsOSArMTExLDYgQEAKICAgICAgICAgV2luZG93TGlzdC5hZGRfd2luZG93c190b19tZW51KG1lbnUpCiAgICAgV2luZG93TGlzdC5yZWdpc3Rlcl9jYWxsYmFjayhwb3N0d2luZG93c21lbnUpCiAKLSAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1lbnViYXIsIG5hbWU9J2FwcGxlJykKLSAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQotCiAgICAgZGVmIGFib3V0X2RpYWxvZyhldmVudD1Ob25lKToKICAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBhYm91dERpYWxvZwogICAgICAgICBhYm91dERpYWxvZy5BYm91dERpYWxvZyhyb290LCAnQWJvdXQgSURMRScpCkBAIC04NSw0MSArMTIwLDQ1IEBACiAgICAgICAgIHJvb3QuaW5zdGFuY2VfZGljdCA9IGZsaXN0LmludmVyc2VkaWN0CiAgICAgICAgIGNvbmZpZ0RpYWxvZy5Db25maWdEaWFsb2cocm9vdCwgJ1NldHRpbmdzJykKIAorICAgIGRlZiBoZWxwX2RpYWxvZyhldmVudD1Ob25lKToKKyAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCB0ZXh0VmlldworICAgICAgICBmbiA9IHBhdGguam9pbihwYXRoLmFic3BhdGgocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSksICdoZWxwLnR4dCcpCisgICAgICAgIHRleHRWaWV3LnZpZXdfZmlsZShyb290LCAnSGVscCcsIGZuKQogCiAgICAgcm9vdC5iaW5kKCc8PGFib3V0LWlkbGU+PicsIGFib3V0X2RpYWxvZykKICAgICByb290LmJpbmQoJzw8b3Blbi1jb25maWctZGlhbG9nPj4nLCBjb25maWdfZGlhbG9nKQorICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMnLCBjb25maWdfZGlhbG9nKQogICAgIGlmIGZsaXN0OgogICAgICAgICByb290LmJpbmQoJzw8Y2xvc2UtYWxsLXdpbmRvd3M+PicsIGZsaXN0LmNsb3NlX2FsbF9jYWxsYmFjaykKIAorICAgICAgICAjIFRoZSBiaW5kaW5nIGFib3ZlIGRvZXNuJ3QgcmVsaWFibHkgd29yayBvbiBhbGwgdmVyc2lvbnMgb2YgVGsKKyAgICAgICAgIyBvbiBNYWNPU1guIEFkZGluZyBjb21tYW5kIGRlZmluaXRpb24gYmVsb3cgZG9lcyBzZWVtIHRvIGRvIHRoZQorICAgICAgICAjIHJpZ2h0IHRoaW5nIGZvciBub3cuCisgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnZXhpdCcsIGZsaXN0LmNsb3NlX2FsbF9jYWxsYmFjaykKIAotICAgICMjI2NoZWNrIGlmIFRrIHZlcnNpb24gPj0gOC40LjE0OyBpZiBzbywgdXNlIGhhcmQtY29kZWQgc2hvd3ByZWZzIGJpbmRpbmcKLSAgICB0a3ZlcnNpb24gPSByb290LnRrLmV2YWwoJ2luZm8gcGF0Y2hsZXZlbCcpCi0gICAgIyBOb3RlOiB3ZSBjYW5ub3QgY2hlY2sgaWYgdGhlIHN0cmluZyB0a3ZlcnNpb24gPj0gJzguNC4xNCcsIGJlY2F1c2UKLSAgICAjIHRoZSBzdHJpbmcgJzguNC43JyBpcyBncmVhdGVyIHRoYW4gdGhlIHN0cmluZyAnOC40LjE0Jy4KLSAgICBpZiB0dXBsZShtYXAoaW50LCB0a3ZlcnNpb24uc3BsaXQoJy4nKSkpID49ICg4LCA0LCAxNCk6Ci0gICAgICAgIEJpbmRpbmdzLm1lbnVkZWZzWzBdID0gICgnYXBwbGljYXRpb24nLCBbCisgICAgaWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgICAgICMgZm9yIENhcmJvbiBBcXVhVGssIHJlcGxhY2UgdGhlIGRlZmF1bHQgVGsgYXBwbGUgbWVudQorICAgICAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1lbnViYXIsIG5hbWU9J2FwcGxlJykKKyAgICAgICAgbWVudWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKKyAgICAgICAgQmluZGluZ3MubWVudWRlZnMuaW5zZXJ0KDAsCisgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uJywgWwogICAgICAgICAgICAgICAgICgnQWJvdXQgSURMRScsICc8PGFib3V0LWlkbGU+PicpLAotICAgICAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICBdKQotICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJzo6dGs6Om1hYzo6U2hvd1ByZWZlcmVuY2VzJywgY29uZmlnX2RpYWxvZykKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICBdKSkKKyAgICAgICAgdGt2ZXJzaW9uID0gcm9vdC50ay5ldmFsKCdpbmZvIHBhdGNobGV2ZWwnKQorICAgICAgICBpZiB0dXBsZShtYXAoaW50LCB0a3ZlcnNpb24uc3BsaXQoJy4nKSkpIDwgKDgsIDQsIDE0KToKKyAgICAgICAgICAgICMgZm9yIGVhcmxpZXIgQXF1YVRrIHZlcnNpb25zLCBzdXBwbHkgYSBQcmVmZXJlbmNlcyBtZW51IGl0ZW0KKyAgICAgICAgICAgIEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgKCdfUHJlZmVyZW5jZXMuLi4uJywgJzw8b3Blbi1jb25maWctZGlhbG9nPj4nKSwKKyAgICAgICAgICAgICAgICApCiAgICAgZWxzZToKLSAgICAgICAgZm9yIG1uYW1lLCBlbnRyeWxpc3QgaW4gQmluZGluZ3MubWVudWRlZnM6Ci0gICAgICAgICAgICBtZW51ID0gbWVudWRpY3QuZ2V0KG1uYW1lKQotICAgICAgICAgICAgaWYgbm90IG1lbnU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIGVudHJ5bGlzdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVudHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgbWVudS5hZGRfc2VwYXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsLCBldmVudG5hbWUgPSBlbnRyeQotICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lLCBsYWJlbCA9IHByZXBzdHIobGFiZWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBhY2NlbGVyYXRvciA9IGdldF9hY2NlbGVyYXRvcihCaW5kaW5ncy5kZWZhdWx0X2tleWRlZnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBldmVudG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgY29tbWFuZCh0ZXh0PXJvb3QsIGV2ZW50bmFtZT1ldmVudG5hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuZXZlbnRfZ2VuZXJhdGUoZXZlbnRuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD1sYWJlbCwgdW5kZXJsaW5lPXVuZGVybGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9Y29tbWFuZCwgYWNjZWxlcmF0b3I9YWNjZWxlcmF0b3IpCisgICAgICAgICMgYXNzdW1lIENvY29hIEFxdWFUaworICAgICAgICAjIHJlcGxhY2UgZGVmYXVsdCBBYm91dCBkaWFsb2cgd2l0aCBBYm91dCBJRExFIG9uZQorICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJ3RrQWJvdXREaWFsb2cnLCBhYm91dF9kaWFsb2cpCisgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0ICJIZWxwIiBpdGVtIGluIEhlbHAgbWVudQorICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJzo6dGs6Om1hYzo6U2hvd0hlbHAnLCBoZWxwX2RpYWxvZykKKyAgICAgICAgIyByZW1vdmUgcmVkdW5kYW50ICJJRExFIEhlbHAiIGZyb20gbWVudQorICAgICAgICBkZWwgQmluZGluZ3MubWVudWRlZnNbLTFdWzFdWzBdCiAKIGRlZiBzZXR1cEFwcChyb290LCBmbGlzdCk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ycGMucHkgYi9MaWIvaWRsZWxpYi9ycGMucHkKaW5kZXggM2JhYzZhMy4uMTM5NTA1OCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvcnBjLnB5CisrKyBiL0xpYi9pZGxlbGliL3JwYy5weQpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgICAgICBob3csIChvaWQsIG1ldGhvZG5hbWUsIGFyZ3MsIGt3YXJncykgPSByZXF1ZXN0CiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gKCJFUlJPUiIsICJCYWQgcmVxdWVzdCBmb3JtYXQiKQotICAgICAgICBpZiBub3Qgc2VsZi5vYmp0YWJsZS5oYXNfa2V5KG9pZCk6CisgICAgICAgIGlmIG9pZCBub3QgaW4gc2VsZi5vYmp0YWJsZToKICAgICAgICAgICAgIHJldHVybiAoIkVSUk9SIiwgIlVua25vd24gb2JqZWN0IGlkOiAlciIgJSAob2lkLCkpCiAgICAgICAgIG9iaiA9IHNlbGYub2JqdGFibGVbb2lkXQogICAgICAgICBpZiBtZXRob2RuYW1lID09ICJfX21ldGhvZHNfXyI6CkBAIC0zMDQsNyArMzA0LDcgQEAKICAgICAgICAgICAgICMgd2FpdCBmb3Igbm90aWZpY2F0aW9uIGZyb20gc29ja2V0IGhhbmRsaW5nIHRocmVhZAogICAgICAgICAgICAgY3ZhciA9IHNlbGYuY3ZhcnNbbXlzZXFdCiAgICAgICAgICAgICBjdmFyLmFjcXVpcmUoKQotICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYucmVzcG9uc2VzLmhhc19rZXkobXlzZXEpOgorICAgICAgICAgICAgd2hpbGUgbXlzZXEgbm90IGluIHNlbGYucmVzcG9uc2VzOgogICAgICAgICAgICAgICAgIGN2YXIud2FpdCgpCiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VzW215c2VxXQogICAgICAgICAgICAgc2VsZi5kZWJ1ZygiX2dldHJlc3BvbnNlOiVzOiB0aHJlYWQgd29rZSB1cDogcmVzcG9uc2U6ICVzIiAlCkBAIC01MTgsOCArNTE4LDYgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzLCBmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKToKICAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlKQotICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQogICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrLmJpbmQoYWRkcmVzcykKICAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29jay5saXN0ZW4oMSkKIApAQCAtNTUyLDcgKzU1MCw3IEBACiAgICAgICAgICAgICByZXR1cm4gTWV0aG9kUHJveHkoc2VsZi5zb2NraW8sIHNlbGYub2lkLCBuYW1lKQogICAgICAgICBpZiBzZWxmLl9fYXR0cmlidXRlcyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5fX2dldGF0dHJpYnV0ZXMoKQotICAgICAgICBpZiBzZWxmLl9fYXR0cmlidXRlcy5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuX19hdHRyaWJ1dGVzOgogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLnNvY2tpby5yZW1vdGVjYWxsKHNlbGYub2lkLCAnX19nZXRhdHRyaWJ1dGVfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsKSwge30pCiAgICAgICAgICAgICByZXR1cm4gdmFsdWUKQEAgLTU3Miw3ICs1NzAsNyBAQAogICAgICMgQWRkcyBuYW1lcyB0byBkaWN0aW9uYXJ5IGFyZ3VtZW50ICdtZXRob2RzJwogICAgIGZvciBuYW1lIGluIGRpcihvYmopOgogICAgICAgICBhdHRyID0gZ2V0YXR0cihvYmosIG5hbWUpCi0gICAgICAgIGlmIGNhbGxhYmxlKGF0dHIpOgorICAgICAgICBpZiBoYXNhdHRyKGF0dHIsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgbWV0aG9kc1tuYW1lXSA9IDEKICAgICBpZiB0eXBlKG9iaikgPT0gdHlwZXMuSW5zdGFuY2VUeXBlOgogICAgICAgICBfZ2V0bWV0aG9kcyhvYmouX19jbGFzc19fLCBtZXRob2RzKQpAQCAtNTgzLDcgKzU4MSw3IEBACiBkZWYgX2dldGF0dHJpYnV0ZXMob2JqLCBhdHRyaWJ1dGVzKToKICAgICBmb3IgbmFtZSBpbiBkaXIob2JqKToKICAgICAgICAgYXR0ciA9IGdldGF0dHIob2JqLCBuYW1lKQotICAgICAgICBpZiBub3QgY2FsbGFibGUoYXR0cik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXSA9IDEKIAogY2xhc3MgTWV0aG9kUHJveHkob2JqZWN0KToKQEAgLTU5OSw0ICs1OTcsNCBAQAogCiAKICMgWFhYIEtCSyAwOVNlcDAzICBXZSBuZWVkIGEgcHJvcGVyIHVuaXQgdGVzdCBmb3IgdGhpcyBtb2R1bGUuICBQcmV2aW91c2x5Ci0jICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgdGVzdCBjb2RlIHdhcyByZW1vdmVkIGF0IFJldiAxLjI3LgorIyAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIHRlc3QgY29kZSB3YXMgcmVtb3ZlZCBhdCBSZXYgMS4yNyAocjM0MDk4KS4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3J1bi5weSBiL0xpYi9pZGxlbGliL3J1bi5weQppbmRleCAyNzBlYTE1Li42NDJiOTc5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ydW4ucHkKKysrIGIvTGliL2lkbGVsaWIvcnVuLnB5CkBAIC0yNSwxMiArMjUsMTMgQEAKICAgICBwYXNzCiBlbHNlOgogICAgIGRlZiBpZGxlX2Zvcm1hdHdhcm5pbmdfc3VicHJvYyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lPU5vbmUpOgogICAgICAgICAiIiJGb3JtYXQgd2FybmluZ3MgdGhlIElETEUgd2F5IiIiCiAgICAgICAgIHMgPSAiXG5XYXJuaW5nIChmcm9tIHdhcm5pbmdzIG1vZHVsZSk6XG4iCiAgICAgICAgIHMgKz0gJyAgRmlsZSBcIiVzXCIsIGxpbmUgJXNcbicgJSAoZmlsZW5hbWUsIGxpbmVubykKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pLnN0cmlwKCkgXAotICAgICAgICAgICAgaWYgbGluZSBpcyBOb25lIGVsc2UgbGluZQorICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgcyArPSAiICAgICVzXG4iICUgbGluZQogICAgICAgICBzICs9ICIlczogJXNcbiIgJSAoY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCkBAIC02NywxMCArNjgsMTMgQEAKICAgICBnbG9iYWwgcXVpdHRpbmcKICAgICBnbG9iYWwgbm9fZXhpdGZ1bmMKICAgICBub19leGl0ZnVuYyA9IGRlbF9leGl0ZnVuYwotICAgIHBvcnQgPSA4ODMzCiAgICAgI3RpbWUuc2xlZXAoMTUpICMgdGVzdCBzdWJwcm9jZXNzIG5vdCByZXNwb25kaW5nCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBwb3J0ID0gaW50KHN5cy5hcmd2WzFdKQorICAgIHRyeToKKyAgICAgICAgYXNzZXJ0KGxlbihzeXMuYXJndikgPiAxKQorICAgICAgICBwb3J0ID0gaW50KHN5cy5hcmd2Wy0xXSkKKyAgICBleGNlcHQ6CisgICAgICAgIHByaW50Pj5zeXMuc3RkZXJyLCAiSURMRSBTdWJwcm9jZXNzOiBubyBJUCBwb3J0IHBhc3NlZCBpbiBzeXMuYXJndi4iCisgICAgICAgIHJldHVybgogICAgIHN5cy5hcmd2WzpdID0gWyIiXQogICAgIHNvY2t0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1tYW5hZ2Vfc29ja2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9J1NvY2tUaHJlYWQnLApkaWZmIC0tZ2l0IGEvTGliL2lob29rcy5weSBiL0xpYi9paG9va3MucHkKaW5kZXggODZiMGY2NS4uODc2MWRhYyAxMDA2NDQKLS0tIGEvTGliL2lob29rcy5weQorKysgYi9MaWIvaWhvb2tzLnB5CkBAIC00OSw3ICs0OSw3IEBACiB3b3VsZCBhbHNvIGRvIHdpc2UgdG8gaW5zdGFsbCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHJlbG9hZCgpLgogCiAiIiIKLWZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCitmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzaywgd2Fybgogd2FybnB5M2soInRoZSBpaG9va3MgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMCIsIHN0YWNrbGV2ZWw9MikKIGRlbCB3YXJucHkzawogCkBAIC00MDEsOCArNDAxLDkgQEAKIAogICAgICIiIkEgbW9kdWxlIGltcG9ydGVyIHRoYXQgc3VwcG9ydHMgcGFja2FnZXMuIiIiCiAKLSAgICBkZWYgaW1wb3J0X21vZHVsZShzZWxmLCBuYW1lLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lLCBmcm9tbGlzdD1Ob25lKToKLSAgICAgICAgcGFyZW50ID0gc2VsZi5kZXRlcm1pbmVfcGFyZW50KGdsb2JhbHMpCisgICAgZGVmIGltcG9ydF9tb2R1bGUoc2VsZiwgbmFtZSwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSwgZnJvbWxpc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0tMSk6CisgICAgICAgIHBhcmVudCA9IHNlbGYuZGV0ZXJtaW5lX3BhcmVudChnbG9iYWxzLCBsZXZlbCkKICAgICAgICAgcSwgdGFpbCA9IHNlbGYuZmluZF9oZWFkX3BhY2thZ2UocGFyZW50LCBzdHIobmFtZSkpCiAgICAgICAgIG0gPSBzZWxmLmxvYWRfdGFpbChxLCB0YWlsKQogICAgICAgICBpZiBub3QgZnJvbWxpc3Q6CkBAIC00MTEsMjEgKzQxMiw1MCBAQAogICAgICAgICAgICAgc2VsZi5lbnN1cmVfZnJvbWxpc3QobSwgZnJvbWxpc3QpCiAgICAgICAgIHJldHVybiBtCiAKLSAgICBkZWYgZGV0ZXJtaW5lX3BhcmVudChzZWxmLCBnbG9iYWxzKToKLSAgICAgICAgaWYgbm90IGdsb2JhbHMgb3Igbm90ICJfX25hbWVfXyIgaW4gZ2xvYmFsczoKKyAgICBkZWYgZGV0ZXJtaW5lX3BhcmVudChzZWxmLCBnbG9iYWxzLCBsZXZlbD0tMSk6CisgICAgICAgIGlmIG5vdCBnbG9iYWxzIG9yIG5vdCBsZXZlbDoKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHBuYW1lID0gZ2xvYmFsc1snX19uYW1lX18nXQotICAgICAgICBpZiAiX19wYXRoX18iIGluIGdsb2JhbHM6Ci0gICAgICAgICAgICBwYXJlbnQgPSBzZWxmLm1vZHVsZXNbcG5hbWVdCi0gICAgICAgICAgICBhc3NlcnQgZ2xvYmFscyBpcyBwYXJlbnQuX19kaWN0X18KLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQKLSAgICAgICAgaWYgJy4nIGluIHBuYW1lOgotICAgICAgICAgICAgaSA9IHBuYW1lLnJmaW5kKCcuJykKLSAgICAgICAgICAgIHBuYW1lID0gcG5hbWVbOmldCi0gICAgICAgICAgICBwYXJlbnQgPSBzZWxmLm1vZHVsZXNbcG5hbWVdCi0gICAgICAgICAgICBhc3NlcnQgcGFyZW50Ll9fbmFtZV9fID09IHBuYW1lCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50Ci0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHBrZ25hbWUgPSBnbG9iYWxzLmdldCgnX19wYWNrYWdlX18nKQorICAgICAgICBpZiBwa2duYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IHBrZ25hbWUgYW5kIGxldmVsID4gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAnQXR0ZW1wdGVkIHJlbGF0aXZlIGltcG9ydCBpbiBub24tcGFja2FnZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgX19wYWNrYWdlX18gbm90IHNldCwgZmlndXJlIGl0IG91dCBhbmQgc2V0IGl0CisgICAgICAgICAgICBtb2RuYW1lID0gZ2xvYmFscy5nZXQoJ19fbmFtZV9fJykKKyAgICAgICAgICAgIGlmIG1vZG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgaWYgIl9fcGF0aF9fIiBpbiBnbG9iYWxzOgorICAgICAgICAgICAgICAgICMgX19wYXRoX18gaXMgc2V0IHNvIG1vZG5hbWUgaXMgYWxyZWFkeSB0aGUgcGFja2FnZSBuYW1lCisgICAgICAgICAgICAgICAgcGtnbmFtZSA9IG1vZG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBub3JtYWwgbW9kdWxlLCB3b3JrIG91dCBwYWNrYWdlIG5hbWUgaWYgYW55CisgICAgICAgICAgICAgICAgaWYgJy4nIG5vdCBpbiBtb2RuYW1lOgorICAgICAgICAgICAgICAgICAgICBpZiBsZXZlbCA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAoJ0F0dGVtcHRlZCByZWxhdGl2ZSBpbXBvcnQgaW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub24tcGFja2FnZScpCisgICAgICAgICAgICAgICAgICAgIGdsb2JhbHNbJ19fcGFja2FnZV9fJ10gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgcGtnbmFtZSA9IG1vZG5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBnbG9iYWxzWydfX3BhY2thZ2VfXyddID0gcGtnbmFtZQorICAgICAgICBpZiBsZXZlbCA+IDA6CisgICAgICAgICAgICBkb3QgPSBsZW4ocGtnbmFtZSkKKyAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKGxldmVsLCAxLCAtMSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkb3QgPSBwa2duYW1lLnJpbmRleCgnLicsIDAsIGRvdCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYXR0ZW1wdGVkIHJlbGF0aXZlIGltcG9ydCBiZXlvbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b3AtbGV2ZWwgcGFja2FnZScpCisgICAgICAgICAgICBwa2duYW1lID0gcGtnbmFtZVs6ZG90XQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbcGtnbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgbGV2ZWwgPCAxOgorICAgICAgICAgICAgICAgIHdhcm4oIlBhcmVudCBtb2R1bGUgJyVzJyBub3QgZm91bmQgd2hpbGUgaGFuZGxpbmcgIgorICAgICAgICAgICAgICAgICAgICAgImFic29sdXRlIGltcG9ydCIgJSBwa2duYW1lLCBSdW50aW1lV2FybmluZywgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvciwgKCJQYXJlbnQgbW9kdWxlICclcycgbm90IGxvYWRlZCwgY2Fubm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJmb3JtIHJlbGF0aXZlIGltcG9ydCIgJSBwa2duYW1lKQogCiAgICAgZGVmIGZpbmRfaGVhZF9wYWNrYWdlKHNlbGYsIHBhcmVudCwgbmFtZSk6CiAgICAgICAgIGlmICcuJyBpbiBuYW1lOgpAQCAtNDQ2LDcgKzQ3Niw3IEBACiAgICAgICAgICAgICBwYXJlbnQgPSBOb25lCiAgICAgICAgICAgICBxID0gc2VsZi5pbXBvcnRfaXQoaGVhZCwgcW5hbWUsIHBhcmVudCkKICAgICAgICAgICAgIGlmIHE6IHJldHVybiBxLCB0YWlsCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICIgKyBxbmFtZQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAnJXMnIiAlIHFuYW1lCiAKICAgICBkZWYgbG9hZF90YWlsKHNlbGYsIHEsIHRhaWwpOgogICAgICAgICBtID0gcQpAQCAtNDU3LDcgKzQ4Nyw3IEBACiAgICAgICAgICAgICBtbmFtZSA9ICIlcy4lcyIgJSAobS5fX25hbWVfXywgaGVhZCkKICAgICAgICAgICAgIG0gPSBzZWxmLmltcG9ydF9pdChoZWFkLCBtbmFtZSwgbSkKICAgICAgICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICIgKyBtbmFtZQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiTm8gbW9kdWxlIG5hbWVkICclcyciICUgbW5hbWUKICAgICAgICAgcmV0dXJuIG0KIAogICAgIGRlZiBlbnN1cmVfZnJvbWxpc3Qoc2VsZiwgbSwgZnJvbWxpc3QsIHJlY3Vyc2l2ZT0wKToKQEAgLTQ3NSwxMSArNTA1LDEzIEBACiAgICAgICAgICAgICAgICAgc3VibmFtZSA9ICIlcy4lcyIgJSAobS5fX25hbWVfXywgc3ViKQogICAgICAgICAgICAgICAgIHN1Ym1vZCA9IHNlbGYuaW1wb3J0X2l0KHN1Yiwgc3VibmFtZSwgbSkKICAgICAgICAgICAgICAgICBpZiBub3Qgc3VibW9kOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAiICsgc3VibmFtZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvciwgIk5vIG1vZHVsZSBuYW1lZCAnJXMnIiAlIHN1Ym5hbWUKIAogICAgIGRlZiBpbXBvcnRfaXQoc2VsZiwgcGFydG5hbWUsIGZxbmFtZSwgcGFyZW50LCBmb3JjZV9sb2FkPTApOgogICAgICAgICBpZiBub3QgcGFydG5hbWU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiRW1wdHkgbW9kdWxlIG5hbWUiCisgICAgICAgICAgICAjIGNvbXBsZXRlbHkgZW1wdHkgbW9kdWxlIG5hbWUgc2hvdWxkIG9ubHkgaGFwcGVuIGluCisgICAgICAgICAgICAjICdmcm9tIC4gaW1wb3J0JyBvciBfX2ltcG9ydF9fKCIiKQorICAgICAgICAgICAgcmV0dXJuIHBhcmVudAogICAgICAgICBpZiBub3QgZm9yY2VfbG9hZDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW2ZxbmFtZV0KZGlmZiAtLWdpdCBhL0xpYi9pbWFwbGliLnB5IGIvTGliL2ltYXBsaWIucHkKaW5kZXggODczNGE4NC4uZmRhZTQ0NSAxMDA2NDQKLS0tIGEvTGliL2ltYXBsaWIucHkKKysrIGIvTGliL2ltYXBsaWIucHkKQEAgLTIyLDcgKzIyLDcgQEAKIAogX192ZXJzaW9uX18gPSAiMi41OCIKIAotaW1wb3J0IGJpbmFzY2lpLCByYW5kb20sIHJlLCBzb2NrZXQsIHN1YnByb2Nlc3MsIHN5cywgdGltZQoraW1wb3J0IGJpbmFzY2lpLCBlcnJubywgcmFuZG9tLCByZSwgc29ja2V0LCBzdWJwcm9jZXNzLCBzeXMsIHRpbWUKIAogX19hbGxfXyA9IFsiSU1BUDQiLCAiSU1BUDRfc3RyZWFtIiwgIkludGVybmFsZGF0ZTJ0dXBsZSIsCiAgICAgICAgICAgICJJbnQyQVAiLCAiUGFyc2VGbGFncyIsICJUaW1lMkludGVybmFsZGF0ZSJdCkBAIC0yNDgsNyArMjQ4LDE0IEBACiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgogICAgICAgICAiIiJDbG9zZSBJL08gZXN0YWJsaXNoZWQgaW4gIm9wZW4iLiIiIgogICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAKIAogICAgIGRlZiBzb2NrZXQoc2VsZik6CkBAIC04ODMsMTQgKzg5MCwxNyBAQAogCiAKICAgICBkZWYgX2NvbW1hbmRfY29tcGxldGUoc2VsZiwgbmFtZSwgdGFnKToKLSAgICAgICAgc2VsZi5fY2hlY2tfYnllKCkKKyAgICAgICAgIyBCWUUgaXMgZXhwZWN0ZWQgYWZ0ZXIgTE9HT1VUCisgICAgICAgIGlmIG5hbWUgIT0gJ0xPR09VVCc6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ieWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0eXAsIGRhdGEgPSBzZWxmLl9nZXRfdGFnZ2VkX3Jlc3BvbnNlKHRhZykKICAgICAgICAgZXhjZXB0IHNlbGYuYWJvcnQsIHZhbDoKICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ2NvbW1hbmQ6ICVzID0+ICVzJyAlIChuYW1lLCB2YWwpKQogICAgICAgICBleGNlcHQgc2VsZi5lcnJvciwgdmFsOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcignY29tbWFuZDogJXMgPT4gJXMnICUgKG5hbWUsIHZhbCkpCi0gICAgICAgIHNlbGYuX2NoZWNrX2J5ZSgpCisgICAgICAgIGlmIG5hbWUgIT0gJ0xPR09VVCc6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ieWUoKQogICAgICAgICBpZiB0eXAgPT0gJ0JBRCc6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmVycm9yKCclcyBjb21tYW5kIGVycm9yOiAlcyAlcycgJSAobmFtZSwgdHlwLCBkYXRhKSkKICAgICAgICAgcmV0dXJuIHR5cCwgZGF0YQpAQCAtMTMxMSw5ICsxMzIxLDEwIEBACiAgICAgICAgICdKdWwnOiA3LCAnQXVnJzogOCwgJ1NlcCc6IDksICdPY3QnOiAxMCwgJ05vdic6IDExLCAnRGVjJzogMTJ9CiAKIGRlZiBJbnRlcm5hbGRhdGUydHVwbGUocmVzcCk6Ci0gICAgIiIiQ29udmVydCBJTUFQNCBJTlRFUk5BTERBVEUgdG8gVVQuCisgICAgIiIiUGFyc2UgYW4gSU1BUDQgSU5URVJOQUxEQVRFIHN0cmluZy4KIAotICAgIFJldHVybnMgUHl0aG9uIHRpbWUgbW9kdWxlIHR1cGxlLgorICAgIFJldHVybiBjb3JyZXNwb25kaW5nIGxvY2FsIHRpbWUuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEKKyAgICB0aW1lLnN0cnVjdF90aW1lIGluc3RhbmNlIG9yIE5vbmUgaWYgdGhlIHN0cmluZyBoYXMgd3JvbmcgZm9ybWF0LgogICAgICIiIgogCiAgICAgbW8gPSBJbnRlcm5hbERhdGUubWF0Y2gocmVzcCkKQEAgLTEzODAsOSArMTM5MSwxNCBAQAogCiBkZWYgVGltZTJJbnRlcm5hbGRhdGUoZGF0ZV90aW1lKToKIAotICAgICIiIkNvbnZlcnQgJ2RhdGVfdGltZScgdG8gSU1BUDQgSU5URVJOQUxEQVRFIHJlcHJlc2VudGF0aW9uLgorICAgICIiIkNvbnZlcnQgZGF0ZV90aW1lIHRvIElNQVA0IElOVEVSTkFMREFURSByZXByZXNlbnRhdGlvbi4KIAotICAgIFJldHVybiBzdHJpbmcgaW4gZm9ybTogJyJERC1NbW0tWVlZWSBISDpNTTpTUyArSEhNTSInCisgICAgUmV0dXJuIHN0cmluZyBpbiBmb3JtOiAnIkRELU1tbS1ZWVlZIEhIOk1NOlNTICtISE1NIicuICBUaGUKKyAgICBkYXRlX3RpbWUgYXJndW1lbnQgY2FuIGJlIGEgbnVtYmVyIChpbnQgb3IgZmxvYXQpIHJlcHJlc2VuaW5nCisgICAgc2Vjb25kcyBzaW5jZSBlcG9jaCAoYXMgcmV0dXJuZWQgYnkgdGltZS50aW1lKCkpLCBhIDktdHVwbGUKKyAgICByZXByZXNlbnRpbmcgbG9jYWwgdGltZSAoYXMgcmV0dXJuZWQgYnkgdGltZS5sb2NhbHRpbWUoKSksIG9yIGEKKyAgICBkb3VibGUtcXVvdGVkIHN0cmluZy4gIEluIHRoZSBsYXN0IGNhc2UsIGl0IGlzIGFzc3VtZWQgdG8gYWxyZWFkeQorICAgIGJlIGluIHRoZSBjb3JyZWN0IGZvcm1hdC4KICAgICAiIiIKIAogICAgIGlmIGlzaW5zdGFuY2UoZGF0ZV90aW1lLCAoaW50LCBmbG9hdCkpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weSBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzMWExYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTAsMCArMSwzOCBAQAorIiIiQmFja3BvcnQgb2YgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUgZnJvbSAzLnguIiIiCisjIFdoaWxlIG5vdCBjcml0aWNhbCAoYW5kIGluIG5vIHdheSBndWFyYW50ZWVkISksIGl0IHdvdWxkIGJlIG5pY2UgdG8ga2VlcCB0aGlzCisjIGNvZGUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjMuCitpbXBvcnQgc3lzCisKK2RlZiBfcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UsIGxldmVsKToKKyAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZC4iIiIKKyAgICBpZiBub3QgaGFzYXR0cihwYWNrYWdlLCAncmluZGV4Jyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIidwYWNrYWdlJyBub3Qgc2V0IHRvIGEgc3RyaW5nIikKKyAgICBkb3QgPSBsZW4ocGFja2FnZSkKKyAgICBmb3IgeCBpbiB4cmFuZ2UobGV2ZWwsIDEsIC0xKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZG90ID0gcGFja2FnZS5yaW5kZXgoJy4nLCAwLCBkb3QpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXR0ZW1wdGVkIHJlbGF0aXZlIGltcG9ydCBiZXlvbmQgdG9wLWxldmVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlIikKKyAgICByZXR1cm4gIiVzLiVzIiAlIChwYWNrYWdlWzpkb3RdLCBuYW1lKQorCisKK2RlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSk6CisgICAgIiIiSW1wb3J0IGEgbW9kdWxlLgorCisgICAgVGhlICdwYWNrYWdlJyBhcmd1bWVudCBpcyByZXF1aXJlZCB3aGVuIHBlcmZvcm1pbmcgYSByZWxhdGl2ZSBpbXBvcnQuIEl0CisgICAgc3BlY2lmaWVzIHRoZSBwYWNrYWdlIHRvIHVzZSBhcyB0aGUgYW5jaG9yIHBvaW50IGZyb20gd2hpY2ggdG8gcmVzb2x2ZSB0aGUKKyAgICByZWxhdGl2ZSBpbXBvcnQgdG8gYW4gYWJzb2x1dGUgaW1wb3J0LgorCisgICAgIiIiCisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCcuJyk6CisgICAgICAgIGlmIG5vdCBwYWNrYWdlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJyZWxhdGl2ZSBpbXBvcnRzIHJlcXVpcmUgdGhlICdwYWNrYWdlJyBhcmd1bWVudCIpCisgICAgICAgIGxldmVsID0gMAorICAgICAgICBmb3IgY2hhcmFjdGVyIGluIG5hbWU6CisgICAgICAgICAgICBpZiBjaGFyYWN0ZXIgIT0gJy4nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsZXZlbCArPSAxCisgICAgICAgIG5hbWUgPSBfcmVzb2x2ZV9uYW1lKG5hbWVbbGV2ZWw6XSwgcGFja2FnZSwgbGV2ZWwpCisgICAgX19pbXBvcnRfXyhuYW1lKQorICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQpkaWZmIC0tZ2l0IGEvTGliL2ltcHV0aWwucHkgYi9MaWIvaW1wdXRpbC5weQppbmRleCBlMWQwYTgyLi5hNWZhNmVhIDEwMDY0NAotLS0gYS9MaWIvaW1wdXRpbC5weQorKysgYi9MaWIvaW1wdXRpbC5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBzZWxmLm5hbWVzcGFjZVsnX19pbXBvcnRfXyddID0gc2VsZi5wcmV2aW91c19pbXBvcnRlcgogCiAgICAgZGVmIGFkZF9zdWZmaXgoc2VsZiwgc3VmZml4LCBpbXBvcnRGdW5jKToKLSAgICAgICAgYXNzZXJ0IGNhbGxhYmxlKGltcG9ydEZ1bmMpCisgICAgICAgIGFzc2VydCBoYXNhdHRyKGltcG9ydEZ1bmMsICdfX2NhbGxfXycpCiAgICAgICAgIHNlbGYuZnNfaW1wLmFkZF9zdWZmaXgoc3VmZml4LCBpbXBvcnRGdW5jKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDYyLDE2ICs0NjIsNiBAQAogICAgIGVsaWYgJ29zMicgaW4gbmFtZXM6CiAgICAgICAgIHNlcCA9ICdcXCcKICAgICAgICAgZnJvbSBvczIgaW1wb3J0IHN0YXQKLSAgICBlbGlmICdtYWMnIGluIG5hbWVzOgotICAgICAgICBmcm9tIG1hYyBpbXBvcnQgc3RhdAotICAgICAgICBkZWYgam9pbihhLCBiKToKLSAgICAgICAgICAgIGlmIGEgPT0gJyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIKLSAgICAgICAgICAgIGlmICc6JyBub3QgaW4gYToKLSAgICAgICAgICAgICAgICBhID0gJzonICsgYQotICAgICAgICAgICAgaWYgYVstMTpdICE9ICc6JzoKLSAgICAgICAgICAgICAgICBhID0gYSArICc6JwotICAgICAgICAgICAgcmV0dXJuIGEgKyBiCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IsICdubyBvcyBzcGVjaWZpYyBtb2R1bGUgZm91bmQnCiAKQEAgLTU0MCw3ICs1MzAsNyBAQAogICAgICAgICBzZWxmLnN1ZmZpeGVzID0gWyBdCiAKICAgICBkZWYgYWRkX3N1ZmZpeChzZWxmLCBzdWZmaXgsIGltcG9ydEZ1bmMpOgotICAgICAgICBhc3NlcnQgY2FsbGFibGUoaW1wb3J0RnVuYykKKyAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0RnVuYywgJ19fY2FsbF9fJykKICAgICAgICAgc2VsZi5zdWZmaXhlcy5hcHBlbmQoKHN1ZmZpeCwgaW1wb3J0RnVuYykpCiAKICAgICBkZWYgaW1wb3J0X2Zyb21fZGlyKHNlbGYsIGRpciwgZnFuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggMmVjOTkxZi4uMzMwNjVmNSAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTE3LDcgKzE3LDcgQEAKICAgICBnZXRtb2R1bGUoKSAtIGRldGVybWluZSB0aGUgbW9kdWxlIHRoYXQgYW4gb2JqZWN0IGNhbWUgZnJvbQogICAgIGdldGNsYXNzdHJlZSgpIC0gYXJyYW5nZSBjbGFzc2VzIHNvIGFzIHRvIHJlcHJlc2VudCB0aGVpciBoaWVyYXJjaHkKIAotICAgIGdldGFyZ3NwZWMoKSwgZ2V0YXJndmFsdWVzKCkgLSBnZXQgaW5mbyBhYm91dCBmdW5jdGlvbiBhcmd1bWVudHMKKyAgICBnZXRhcmdzcGVjKCksIGdldGFyZ3ZhbHVlcygpLCBnZXRjYWxsYXJncygpIC0gZ2V0IGluZm8gYWJvdXQgZnVuY3Rpb24gYXJndW1lbnRzCiAgICAgZm9ybWF0YXJnc3BlYygpLCBmb3JtYXRhcmd2YWx1ZXMoKSAtIGZvcm1hdCBhbiBhcmd1bWVudCBzcGVjCiAgICAgZ2V0b3V0ZXJmcmFtZXMoKSwgZ2V0aW5uZXJmcmFtZXMoKSAtIGdldCBpbmZvIGFib3V0IGZyYW1lcwogICAgIGN1cnJlbnRmcmFtZSgpIC0gZ2V0IHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lCkBAIC02Miw3ICs2Miw3IEBACiAgICAgQ2xhc3Mgb2JqZWN0cyBwcm92aWRlIHRoZXNlIGF0dHJpYnV0ZXM6CiAgICAgICAgIF9fZG9jX18gICAgICAgICBkb2N1bWVudGF0aW9uIHN0cmluZwogICAgICAgICBfX21vZHVsZV9fICAgICAgbmFtZSBvZiBtb2R1bGUgaW4gd2hpY2ggdGhpcyBjbGFzcyB3YXMgZGVmaW5lZCIiIgotICAgIHJldHVybiBpc2luc3RhbmNlKG9iamVjdCwgdHlwZXMuQ2xhc3NUeXBlKSBvciBoYXNhdHRyKG9iamVjdCwgJ19fYmFzZXNfXycpCisgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqZWN0LCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSkKIAogZGVmIGlzbWV0aG9kKG9iamVjdCk6CiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBtZXRob2QuCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogICAgIEdlbmVyYXRvciBmdW5jdGlvbiBvYmplY3RzIHByb3ZpZGVzIHNhbWUgYXR0cmlidXRlcyBhcyBmdW5jdGlvbnMuCiAKLSAgICBTZWUgaXNmdW5jdGlvbi5fX2RvY19fIGZvciBhdHRyaWJ1dGVzIGxpc3RpbmcuIiIiCisgICAgU2VlIGhlbHAoaXNmdW5jdGlvbikgZm9yIGF0dHJpYnV0ZXMgbGlzdGluZy4iIiIKICAgICByZXR1cm4gYm9vbCgoaXNmdW5jdGlvbihvYmplY3QpIG9yIGlzbWV0aG9kKG9iamVjdCkpIGFuZAogICAgICAgICAgICAgICAgIG9iamVjdC5mdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IpCiAKQEAgLTI0MiwxNCArMjQyLDE3IEBACiAKIGRlZiBpc2Fic3RyYWN0KG9iamVjdCk6CiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIChBQkMpLiIiIgotICAgIHJldHVybiBpc2luc3RhbmNlKG9iamVjdCwgdHlwZSkgYW5kIG9iamVjdC5fX2ZsYWdzX18gJiBUUEZMQUdTX0lTX0FCU1RSQUNUCisgICAgcmV0dXJuIGJvb2woaXNpbnN0YW5jZShvYmplY3QsIHR5cGUpIGFuZCBvYmplY3QuX19mbGFnc19fICYgVFBGTEFHU19JU19BQlNUUkFDVCkKIAogZGVmIGdldG1lbWJlcnMob2JqZWN0LCBwcmVkaWNhdGU9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGFsbCBtZW1iZXJzIG9mIGFuIG9iamVjdCBhcyAobmFtZSwgdmFsdWUpIHBhaXJzIHNvcnRlZCBieSBuYW1lLgogICAgIE9wdGlvbmFsbHksIG9ubHkgcmV0dXJuIG1lbWJlcnMgdGhhdCBzYXRpc2Z5IGEgZ2l2ZW4gcHJlZGljYXRlLiIiIgogICAgIHJlc3VsdHMgPSBbXQogICAgIGZvciBrZXkgaW4gZGlyKG9iamVjdCk6Ci0gICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3QgcHJlZGljYXRlIG9yIHByZWRpY2F0ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCiAgICAgcmVzdWx0cy5zb3J0KCkKQEAgLTM5OSwxMiArNDAyLDEyIEBACiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKICAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX2ZpbGVfXycpOgogICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXwotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2FyZyBpcyBhIGJ1aWx0LWluIG1vZHVsZScpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNjbGFzcyhvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCiAgICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19maWxlX18nKToKICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19maWxlX18KLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhcmcgaXMgYSBidWlsdC1pbiBjbGFzcycpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIGNsYXNzJy5mb3JtYXQob2JqZWN0KSkKICAgICBpZiBpc21ldGhvZChvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBvYmplY3QuaW1fZnVuYwogICAgIGlmIGlzZnVuY3Rpb24ob2JqZWN0KToKQEAgLTQxNSw4ICs0MTgsOCBAQAogICAgICAgICBvYmplY3QgPSBvYmplY3QuZl9jb2RlCiAgICAgaWYgaXNjb2RlKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBvYmplY3QuY29fZmlsZW5hbWUKLSAgICByYWlzZSBUeXBlRXJyb3IoJ2FyZyBpcyBub3QgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsICcKLSAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLCBvciBjb2RlIG9iamVjdCcpCisgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgJworICAgICAgICAgICAgICAgICAgICAnZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsIG9yIGNvZGUgb2JqZWN0Jy5mb3JtYXQob2JqZWN0KSkKIAogTW9kdWxlSW5mbyA9IG5hbWVkdHVwbGUoJ01vZHVsZUluZm8nLCAnbmFtZSBzdWZmaXggbW9kZSBtb2R1bGVfdHlwZScpCiAKQEAgLTQzNyw3ICs0NDAsOSBAQAogICAgIGlmIGluZm86IHJldHVybiBpbmZvWzBdCiAKIGRlZiBnZXRzb3VyY2VmaWxlKG9iamVjdCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBQeXRob24gc291cmNlIGZpbGUgYW4gb2JqZWN0IHdhcyBkZWZpbmVkIGluLCBpZiBpdCBleGlzdHMuIiIiCisgICAgIiIiUmV0dXJuIHRoZSBmaWxlbmFtZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGxvY2F0ZSBhbiBvYmplY3QncyBzb3VyY2UuCisgICAgUmV0dXJuIE5vbmUgaWYgbm8gd2F5IGNhbiBiZSBpZGVudGlmaWVkIHRvIGdldCB0aGUgc291cmNlLgorICAgICIiIgogICAgIGZpbGVuYW1lID0gZ2V0ZmlsZShvYmplY3QpCiAgICAgaWYgc3RyaW5nLmxvd2VyKGZpbGVuYW1lWy00Ol0pIGluICgnLnB5YycsICcucHlvJyk6CiAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi00XSArICcucHknCkBAIC00NTAsNiArNDU1LDkgQEAKICAgICAjIG9ubHkgcmV0dXJuIGEgbm9uLWV4aXN0ZW50IGZpbGVuYW1lIGlmIHRoZSBtb2R1bGUgaGFzIGEgUEVQIDMwMiBsb2FkZXIKICAgICBpZiBoYXNhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nKToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisgICAgIyBvciBpdCBpcyBpbiB0aGUgbGluZWNhY2hlCisgICAgaWYgZmlsZW5hbWUgaW4gbGluZWNhY2hlLmNhY2hlOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUKIAogZGVmIGdldGFic2ZpbGUob2JqZWN0LCBfZmlsZW5hbWU9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHNvdXJjZSBvciBjb21waWxlZCBmaWxlIGZvciBhbiBvYmplY3QuCkBAIC01MTYsNyArNTI0LDkgQEAKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgYWxsIHRoZSBsaW5lcwogICAgIGluIHRoZSBmaWxlIGFuZCB0aGUgbGluZSBudW1iZXIgaW5kZXhlcyBhIGxpbmUgaW4gdGhhdCBsaXN0LiAgQW4gSU9FcnJvcgogICAgIGlzIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKLSAgICBmaWxlID0gZ2V0c291cmNlZmlsZShvYmplY3QpIG9yIGdldGZpbGUob2JqZWN0KQorICAgIGZpbGUgPSBnZXRzb3VyY2VmaWxlKG9iamVjdCkKKyAgICBpZiBub3QgZmlsZToKKyAgICAgICAgcmFpc2UgSU9FcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCiAgICAgbW9kdWxlID0gZ2V0bW9kdWxlKG9iamVjdCwgZmlsZSkKICAgICBpZiBtb2R1bGU6CiAgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKGZpbGUsIG1vZHVsZS5fX2RpY3RfXykKQEAgLTczNiw3ICs3NDYsNyBAQAogICAgICd2YXJhcmdzJyBhbmQgJ3Zhcmt3JyBhcmUgdGhlIG5hbWVzIG9mIHRoZSAqIGFuZCAqKiBhcmd1bWVudHMgb3IgTm9uZS4iIiIKIAogICAgIGlmIG5vdCBpc2NvZGUoY28pOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2FyZyBpcyBub3QgYSBjb2RlIG9iamVjdCcpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBjb2RlIG9iamVjdCcuZm9ybWF0KGNvKSkKIAogICAgIG5hcmdzID0gY28uY29fYXJnY291bnQKICAgICBuYW1lcyA9IGNvLmNvX3Zhcm5hbWVzCkBAIC04MDAsNyArODEwLDcgQEAKICAgICBpZiBpc21ldGhvZChmdW5jKToKICAgICAgICAgZnVuYyA9IGZ1bmMuaW1fZnVuYwogICAgIGlmIG5vdCBpc2Z1bmN0aW9uKGZ1bmMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2FyZyBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgbm90IGEgUHl0aG9uIGZ1bmN0aW9uJy5mb3JtYXQoZnVuYykpCiAgICAgYXJncywgdmFyYXJncywgdmFya3cgPSBnZXRhcmdzKGZ1bmMuZnVuY19jb2RlKQogICAgIHJldHVybiBBcmdTcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBmdW5jLmZ1bmNfZGVmYXVsdHMpCiAKQEAgLTg0NCw4ICs4NTQsOCBAQAogICAgIHNwZWNzID0gW10KICAgICBpZiBkZWZhdWx0czoKICAgICAgICAgZmlyc3RkZWZhdWx0ID0gbGVuKGFyZ3MpIC0gbGVuKGRlZmF1bHRzKQotICAgIGZvciBpIGluIHJhbmdlKGxlbihhcmdzKSk6Ci0gICAgICAgIHNwZWMgPSBzdHJzZXEoYXJnc1tpXSwgZm9ybWF0YXJnLCBqb2luKQorICAgIGZvciBpLCBhcmcgaW4gZW51bWVyYXRlKGFyZ3MpOgorICAgICAgICBzcGVjID0gc3Ryc2VxKGFyZywgZm9ybWF0YXJnLCBqb2luKQogICAgICAgICBpZiBkZWZhdWx0cyBhbmQgaSA+PSBmaXJzdGRlZmF1bHQ6CiAgICAgICAgICAgICBzcGVjID0gc3BlYyArIGZvcm1hdHZhbHVlKGRlZmF1bHRzW2kgLSBmaXJzdGRlZmF1bHRdKQogICAgICAgICBzcGVjcy5hcHBlbmQoc3BlYykKQEAgLTg3OSw2ICs4ODksODkgQEAKICAgICAgICAgc3BlY3MuYXBwZW5kKGZvcm1hdHZhcmt3KHZhcmt3KSArIGZvcm1hdHZhbHVlKGxvY2Fsc1t2YXJrd10pKQogICAgIHJldHVybiAnKCcgKyBzdHJpbmcuam9pbihzcGVjcywgJywgJykgKyAnKScKIAorZGVmIGdldGNhbGxhcmdzKGZ1bmMsICpwb3NpdGlvbmFsLCAqKm5hbWVkKToKKyAgICAiIiJHZXQgdGhlIG1hcHBpbmcgb2YgYXJndW1lbnRzIHRvIHZhbHVlcy4KKworICAgIEEgZGljdCBpcyByZXR1cm5lZCwgd2l0aCBrZXlzIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBuYW1lcyAoaW5jbHVkaW5nIHRoZQorICAgIG5hbWVzIG9mIHRoZSAqIGFuZCAqKiBhcmd1bWVudHMsIGlmIGFueSksIGFuZCB2YWx1ZXMgdGhlIHJlc3BlY3RpdmUgYm91bmQKKyAgICB2YWx1ZXMgZnJvbSAncG9zaXRpb25hbCcgYW5kICduYW1lZCcuIiIiCisgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzID0gZ2V0YXJnc3BlYyhmdW5jKQorICAgIGZfbmFtZSA9IGZ1bmMuX19uYW1lX18KKyAgICBhcmcydmFsdWUgPSB7fQorCisgICAgIyBUaGUgZm9sbG93aW5nIGNsb3N1cmVzIGFyZSBiYXNpY2FsbHkgYmVjYXVzZSBvZiB0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nLgorICAgIGFzc2lnbmVkX3R1cGxlX3BhcmFtcyA9IFtdCisgICAgZGVmIGFzc2lnbihhcmcsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6CisgICAgICAgICAgICBhcmcydmFsdWVbYXJnXSA9IHZhbHVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NpZ25lZF90dXBsZV9wYXJhbXMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIHZhbHVlID0gaXRlcih2YWx1ZSkKKyAgICAgICAgICAgIGZvciBpLCBzdWJhcmcgaW4gZW51bWVyYXRlKGFyZyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdWJ2YWx1ZSA9IG5leHQodmFsdWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25lZWQgbW9yZSB0aGFuICVkICVzIHRvIHVucGFjaycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLCAndmFsdWVzJyBpZiBpID4gMSBlbHNlICd2YWx1ZScpKQorICAgICAgICAgICAgICAgIGFzc2lnbihzdWJhcmcsc3VidmFsdWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjaycpCisgICAgZGVmIGlzX2Fzc2lnbmVkKGFyZyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLHN0cik6CisgICAgICAgICAgICByZXR1cm4gYXJnIGluIGFyZzJ2YWx1ZQorICAgICAgICByZXR1cm4gYXJnIGluIGFzc2lnbmVkX3R1cGxlX3BhcmFtcworICAgIGlmIGlzbWV0aG9kKGZ1bmMpIGFuZCBmdW5jLmltX3NlbGYgaXMgbm90IE5vbmU6CisgICAgICAgICMgaW1wbGljaXQgJ3NlbGYnIChvciAnY2xzJyBmb3IgY2xhc3NtZXRob2RzKSBhcmd1bWVudAorICAgICAgICBwb3NpdGlvbmFsID0gKGZ1bmMuaW1fc2VsZiwpICsgcG9zaXRpb25hbAorICAgIG51bV9wb3MgPSBsZW4ocG9zaXRpb25hbCkKKyAgICBudW1fdG90YWwgPSBudW1fcG9zICsgbGVuKG5hbWVkKQorICAgIG51bV9hcmdzID0gbGVuKGFyZ3MpCisgICAgbnVtX2RlZmF1bHRzID0gbGVuKGRlZmF1bHRzKSBpZiBkZWZhdWx0cyBlbHNlIDAKKyAgICBmb3IgYXJnLCB2YWx1ZSBpbiB6aXAoYXJncywgcG9zaXRpb25hbCk6CisgICAgICAgIGFzc2lnbihhcmcsIHZhbHVlKQorICAgIGlmIHZhcmFyZ3M6CisgICAgICAgIGlmIG51bV9wb3MgPiBudW1fYXJnczoKKyAgICAgICAgICAgIGFzc2lnbih2YXJhcmdzLCBwb3NpdGlvbmFsWy0obnVtX3Bvcy1udW1fYXJncyk6XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2lnbih2YXJhcmdzLCAoKSkKKyAgICBlbGlmIDAgPCBudW1fYXJncyA8IG51bV9wb3M6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMoKSB0YWtlcyAlcyAlZCAlcyAoJWQgZ2l2ZW4pJyAlICgKKyAgICAgICAgICAgIGZfbmFtZSwgJ2F0IG1vc3QnIGlmIGRlZmF1bHRzIGVsc2UgJ2V4YWN0bHknLCBudW1fYXJncywKKyAgICAgICAgICAgICdhcmd1bWVudHMnIGlmIG51bV9hcmdzID4gMSBlbHNlICdhcmd1bWVudCcsIG51bV90b3RhbCkpCisgICAgZWxpZiBudW1fYXJncyA9PSAwIGFuZCBudW1fdG90YWw6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCVkIGdpdmVuKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGZfbmFtZSwgbnVtX3RvdGFsKSkKKyAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBzdHIpIGFuZCBhcmcgaW4gbmFtZWQ6CisgICAgICAgICAgICBpZiBpc19hc3NpZ25lZChhcmcpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICclcyciICUgKGZfbmFtZSwgYXJnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzaWduKGFyZywgbmFtZWQucG9wKGFyZykpCisgICAgaWYgZGVmYXVsdHM6ICAgICMgZmlsbCBpbiBhbnkgbWlzc2luZyB2YWx1ZXMgd2l0aCB0aGUgZGVmYXVsdHMKKyAgICAgICAgZm9yIGFyZywgdmFsdWUgaW4gemlwKGFyZ3NbLW51bV9kZWZhdWx0czpdLCBkZWZhdWx0cyk6CisgICAgICAgICAgICBpZiBub3QgaXNfYXNzaWduZWQoYXJnKToKKyAgICAgICAgICAgICAgICBhc3NpZ24oYXJnLCB2YWx1ZSkKKyAgICBpZiB2YXJrdzoKKyAgICAgICAgYXNzaWduKHZhcmt3LCBuYW1lZCkKKyAgICBlbGlmIG5hbWVkOgorICAgICAgICB1bmV4cGVjdGVkID0gbmV4dChpdGVyKG5hbWVkKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh1bmV4cGVjdGVkLCB1bmljb2RlKToKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQgPSB1bmV4cGVjdGVkLmVuY29kZShzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCksICdyZXBsYWNlJykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKGZfbmFtZSwgdW5leHBlY3RlZCkpCisgICAgdW5hc3NpZ25lZCA9IG51bV9hcmdzIC0gbGVuKFthcmcgZm9yIGFyZyBpbiBhcmdzIGlmIGlzX2Fzc2lnbmVkKGFyZyldKQorICAgIGlmIHVuYXNzaWduZWQ6CisgICAgICAgIG51bV9yZXF1aXJlZCA9IG51bV9hcmdzIC0gbnVtX2RlZmF1bHRzCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMoKSB0YWtlcyAlcyAlZCAlcyAoJWQgZ2l2ZW4pJyAlICgKKyAgICAgICAgICAgIGZfbmFtZSwgJ2F0IGxlYXN0JyBpZiBkZWZhdWx0cyBlbHNlICdleGFjdGx5JywgbnVtX3JlcXVpcmVkLAorICAgICAgICAgICAgJ2FyZ3VtZW50cycgaWYgbnVtX3JlcXVpcmVkID4gMSBlbHNlICdhcmd1bWVudCcsIG51bV90b3RhbCkpCisgICAgcmV0dXJuIGFyZzJ2YWx1ZQorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YWNrIGZyYW1lIGV4dHJhY3Rpb24KIAogVHJhY2ViYWNrID0gbmFtZWR0dXBsZSgnVHJhY2ViYWNrJywgJ2ZpbGVuYW1lIGxpbmVubyBmdW5jdGlvbiBjb2RlX2NvbnRleHQgaW5kZXgnKQpAQCAtODk3LDcgKzk5MCw3IEBACiAgICAgZWxzZToKICAgICAgICAgbGluZW5vID0gZnJhbWUuZl9saW5lbm8KICAgICBpZiBub3QgaXNmcmFtZShmcmFtZSk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJnIGlzIG5vdCBhIGZyYW1lIG9yIHRyYWNlYmFjayBvYmplY3QnKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgbm90IGEgZnJhbWUgb3IgdHJhY2ViYWNrIG9iamVjdCcuZm9ybWF0KGZyYW1lKSkKIAogICAgIGZpbGVuYW1lID0gZ2V0c291cmNlZmlsZShmcmFtZSkgb3IgZ2V0ZmlsZShmcmFtZSkKICAgICBpZiBjb250ZXh0ID4gMDoKZGlmZiAtLWdpdCBhL0xpYi9pby5weSBiL0xpYi9pby5weQppbmRleCA0MDYyM2Q2Li41YzQyOWM2IDEwMDY0NAotLS0gYS9MaWIvaW8ucHkKKysrIGIvTGliL2lvLnB5CkBAIC0xLDUgKzEsNCBAQAotIiIiCi1UaGUgaW8gbW9kdWxlIHByb3ZpZGVzIHRoZSBQeXRob24gaW50ZXJmYWNlcyB0byBzdHJlYW0gaGFuZGxpbmcuIFRoZQorIiIiVGhlIGlvIG1vZHVsZSBwcm92aWRlcyB0aGUgUHl0aG9uIGludGVyZmFjZXMgdG8gc3RyZWFtIGhhbmRsaW5nLiBUaGUKIGJ1aWx0aW4gb3BlbiBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgogCiBBdCB0aGUgdG9wIG9mIHRoZSBJL08gaGllcmFyY2h5IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIElPQmFzZS4gSXQKQEAgLTM1LDkgKzM0LDYgQEAKICIiIgogIyBOZXcgSS9PIGxpYnJhcnkgY29uZm9ybWluZyB0byBQRVAgMzExNi4KIAotIyBUaGlzIGlzIGEgcHJvdG90eXBlOyBob3BlZnVsbHkgZXZlbnR1YWxseSBzb21lIG9mIHRoaXMgd2lsbCBiZQotIyByZWltcGxlbWVudGVkIGluIEMuCi0KICMgWFhYIGVkZ2UgY2FzZXMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiByZWFkaW5nL3dyaXRpbmcKICMgWFhYIG5lZWQgdG8gc3VwcG9ydCAxIG1lYW5pbmcgbGluZS1idWZmZXJlZAogIyBYWFggd2hlbmV2ZXIgYW4gYXJndW1lbnQgaXMgTm9uZSwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlCkBAIC00NSwxODYxICs0MSw1OCBAQAogIyBYWFggYnVmZmVyZWQgcmVhZGludG8gc2hvdWxkIHdvcmsgd2l0aCBhcmJpdHJhcnkgYnVmZmVyIG9iamVjdHMKICMgWFhYIHVzZSBpbmNyZW1lbnRhbCBlbmNvZGVyIGZvciB0ZXh0IG91dHB1dCwgYXQgbGVhc3QgZm9yIFVURi0xNiBhbmQgVVRGLTgtU0lHCiAjIFhYWCBjaGVjayB3cml0YWJsZSwgcmVhZGFibGUgYW5kIHNlZWthYmxlIGluIGFwcHJvcHJpYXRlIHBsYWNlcwotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKIAogX19hdXRob3JfXyA9ICgiR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4sICIKICAgICAgICAgICAgICAgIk1pa2UgVmVyZG9uZSA8bWlrZS52ZXJkb25lQGdtYWlsLmNvbT4sICIKLSAgICAgICAgICAgICAgIk1hcmsgUnVzc2VsbCA8bWFyay5ydXNzZWxsQHplbi5jby51az4iKQorICAgICAgICAgICAgICAiTWFyayBSdXNzZWxsIDxtYXJrLnJ1c3NlbGxAemVuLmNvLnVrPiwgIgorICAgICAgICAgICAgICAiQW50b2luZSBQaXRyb3UgPHNvbGlwc2lzQHBpdHJvdS5uZXQ+LCAiCisgICAgICAgICAgICAgICJBbWF1cnkgRm9yZ2VvdCBkJ0FyYyA8YW1hdXJ5ZmFAZ21haWwuY29tPiwgIgorICAgICAgICAgICAgICAiQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+IikKIAogX19hbGxfXyA9IFsiQmxvY2tpbmdJT0Vycm9yIiwgIm9wZW4iLCAiSU9CYXNlIiwgIlJhd0lPQmFzZSIsICJGaWxlSU8iLAogICAgICAgICAgICAiQnl0ZXNJTyIsICJTdHJpbmdJTyIsICJCdWZmZXJlZElPQmFzZSIsCiAgICAgICAgICAgICJCdWZmZXJlZFJlYWRlciIsICJCdWZmZXJlZFdyaXRlciIsICJCdWZmZXJlZFJXUGFpciIsCi0gICAgICAgICAgICJCdWZmZXJlZFJhbmRvbSIsICJUZXh0SU9CYXNlIiwgIlRleHRJT1dyYXBwZXIiXQorICAgICAgICAgICAiQnVmZmVyZWRSYW5kb20iLCAiVGV4dElPQmFzZSIsICJUZXh0SU9XcmFwcGVyIiwKKyAgICAgICAgICAgIlVuc3VwcG9ydGVkT3BlcmF0aW9uIiwgIlNFRUtfU0VUIiwgIlNFRUtfQ1VSIiwgIlNFRUtfRU5EIl0KIAotaW1wb3J0IG9zCisKK2ltcG9ydCBfaW8KIGltcG9ydCBhYmMKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBfZmlsZWlvCi1pbXBvcnQgdGhyZWFkaW5nCiAKLSMgb3BlbigpIHVzZXMgc3RfYmxrc2l6ZSB3aGVuZXZlciB3ZSBjYW4KLURFRkFVTFRfQlVGRkVSX1NJWkUgPSA4ICogMTAyNCAgIyBieXRlcworZnJvbSBfaW8gaW1wb3J0IChERUZBVUxUX0JVRkZFUl9TSVpFLCBCbG9ja2luZ0lPRXJyb3IsIFVuc3VwcG9ydGVkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICBvcGVuLCBGaWxlSU8sIEJ5dGVzSU8sIFN0cmluZ0lPLCBCdWZmZXJlZFJlYWRlciwKKyAgICAgICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIsIEJ1ZmZlcmVkUldQYWlyLCBCdWZmZXJlZFJhbmRvbSwKKyAgICAgICAgICAgICAgICAgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciwgVGV4dElPV3JhcHBlcikKIAotIyBweTNrIGhhcyBvbmx5IG5ldyBzdHlsZSBjbGFzc2VzCi1fX21ldGFjbGFzc19fID0gdHlwZQorT3BlbldyYXBwZXIgPSBfaW8ub3BlbiAjIGZvciBjb21wYXRpYmlsaXR5IHdpdGggX3B5aW8KIAotY2xhc3MgQmxvY2tpbmdJT0Vycm9yKElPRXJyb3IpOgorIyBmb3Igc2VlaygpCitTRUVLX1NFVCA9IDAKK1NFRUtfQ1VSID0gMQorU0VFS19FTkQgPSAyCiAKLSAgICAiIiJFeGNlcHRpb24gcmFpc2VkIHdoZW4gSS9PIHdvdWxkIGJsb2NrIG9uIGEgbm9uLWJsb2NraW5nIEkvTyBzdHJlYW0uIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXJybm8sIHN0cmVycm9yLCBjaGFyYWN0ZXJzX3dyaXR0ZW49MCk6Ci0gICAgICAgIElPRXJyb3IuX19pbml0X18oc2VsZiwgZXJybm8sIHN0cmVycm9yKQotICAgICAgICBzZWxmLmNoYXJhY3RlcnNfd3JpdHRlbiA9IGNoYXJhY3RlcnNfd3JpdHRlbgotCi0KLWRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsCi0gICAgICAgICBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSk6Ci0gICAgciIiIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLCBhbiBJT0Vycm9yIGlzCi0gICAgcmFpc2VkLgotCi0gICAgZmlsZSBpcyBlaXRoZXIgYSBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIChhbmQgdGhlIHBhdGggaWYgdGhlIGZpbGUKLSAgICBpc24ndCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSkgb2YgdGhlIGZpbGUgdG8gYmUgb3BlbmVkIG9yIGFuCi0gICAgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gYmUgd3JhcHBlZC4gKElmIGEgZmlsZQotICAgIGRlc2NyaXB0b3IgaXMgZ2l2ZW4sIGl0IGlzIGNsb3NlZCB3aGVuIHRoZSByZXR1cm5lZCBJL08gb2JqZWN0IGlzCi0gICAgY2xvc2VkLCB1bmxlc3MgY2xvc2VmZCBpcyBzZXQgdG8gRmFsc2UuKQotCi0gICAgbW9kZSBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGZpbGUKLSAgICBpcyBvcGVuZWQuIEl0IGRlZmF1bHRzIHRvICdyJyB3aGljaCBtZWFucyBvcGVuIGZvciByZWFkaW5nIGluIHRleHQKLSAgICBtb2RlLiAgT3RoZXIgY29tbW9uIHZhbHVlcyBhcmUgJ3cnIGZvciB3cml0aW5nICh0cnVuY2F0aW5nIHRoZSBmaWxlIGlmCi0gICAgaXQgYWxyZWFkeSBleGlzdHMpLCBhbmQgJ2EnIGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIHNvbWUgVW5peCBzeXN0ZW1zLAotICAgIG1lYW5zIHRoYXQgYWxsIHdyaXRlcyBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSByZWdhcmRsZXNzIG9mIHRoZQotICAgIGN1cnJlbnQgc2VlayBwb3NpdGlvbikuIEluIHRleHQgbW9kZSwgaWYgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZCB0aGUKLSAgICBlbmNvZGluZyB1c2VkIGlzIHBsYXRmb3JtIGRlcGVuZGVudC4gKEZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJhdwotICAgIGJ5dGVzIHVzZSBiaW5hcnkgbW9kZSBhbmQgbGVhdmUgZW5jb2RpbmcgdW5zcGVjaWZpZWQuKSBUaGUgYXZhaWxhYmxlCi0gICAgbW9kZXMgYXJlOgotCi0gICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIENoYXJhY3RlciBNZWFuaW5nCi0gICAgLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICdyJyAgICAgICBvcGVuIGZvciByZWFkaW5nIChkZWZhdWx0KQotICAgICd3JyAgICAgICBvcGVuIGZvciB3cml0aW5nLCB0cnVuY2F0aW5nIHRoZSBmaWxlIGZpcnN0Ci0gICAgJ2EnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIGl0IGV4aXN0cwotICAgICdiJyAgICAgICBiaW5hcnkgbW9kZQotICAgICd0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpCi0gICAgJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQotICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkCi0gICAgICAgICAgICAgIGZvciBuZXcgY29kZSkKLSAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGUgZGVmYXVsdCBtb2RlIGlzICdydCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tCi0gICAgYWNjZXNzLCB0aGUgbW9kZSAndytiJyBvcGVucyBhbmQgdHJ1bmNhdGVzIHRoZSBmaWxlIHRvIDAgYnl0ZXMsIHdoaWxlCi0gICAgJ3IrYicgb3BlbnMgdGhlIGZpbGUgd2l0aG91dCB0cnVuY2F0aW9uLgotCi0gICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmaWxlcyBvcGVuZWQgaW4gYmluYXJ5IGFuZCB0ZXh0IG1vZGVzLAotICAgIGV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXNuJ3QuIEZpbGVzIG9wZW5lZCBpbgotICAgIGJpbmFyeSBtb2RlIChhcHBlbmRpbmcgJ2InIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSByZXR1cm4gY29udGVudHMgYXMKLSAgICBieXRlcyBvYmplY3RzIHdpdGhvdXQgYW55IGRlY29kaW5nLiBJbiB0ZXh0IG1vZGUgKHRoZSBkZWZhdWx0LCBvciB3aGVuCi0gICAgJ3QnIGlzIGFwcGVuZGVkIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZQotICAgIHJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGEKLSAgICBwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi4KLQotICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgotICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKLSAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCi0gICAgdGhlIHNpemUgb2YgYSBmaXhlZC1zaXplIGNodW5rIGJ1ZmZlci4gIFdoZW4gbm8gYnVmZmVyaW5nIGFyZ3VtZW50IGlzCi0gICAgZ2l2ZW4sIHRoZSBkZWZhdWx0IGJ1ZmZlcmluZyBwb2xpY3kgd29ya3MgYXMgZm9sbG93czoKLQotICAgICogQmluYXJ5IGZpbGVzIGFyZSBidWZmZXJlZCBpbiBmaXhlZC1zaXplIGNodW5rczsgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgotICAgICAgaXMgY2hvc2VuIHVzaW5nIGEgaGV1cmlzdGljIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIHVuZGVybHlpbmcgZGV2aWNlJ3MKLSAgICAgICJibG9jayBzaXplIiBhbmQgZmFsbGluZyBiYWNrIG9uIGBpby5ERUZBVUxUX0JVRkZFUl9TSVpFYC4KLSAgICAgIE9uIG1hbnkgc3lzdGVtcywgdGhlIGJ1ZmZlciB3aWxsIHR5cGljYWxseSBiZSA0MDk2IG9yIDgxOTIgYnl0ZXMgbG9uZy4KLQotICAgICogIkludGVyYWN0aXZlIiB0ZXh0IGZpbGVzIChmaWxlcyBmb3Igd2hpY2ggaXNhdHR5KCkgcmV0dXJucyBUcnVlKQotICAgICAgdXNlIGxpbmUgYnVmZmVyaW5nLiAgT3RoZXIgdGV4dCBmaWxlcyB1c2UgdGhlIHBvbGljeSBkZXNjcmliZWQgYWJvdmUKLSAgICAgIGZvciBiaW5hcnkgZmlsZXMuCi0KLSAgICBlbmNvZGluZyBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZQotICAgIGZpbGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzCi0gICAgcGxhdGZvcm0gZGVwZW5kZW50LCBidXQgYW55IGVuY29kaW5nIHN1cHBvcnRlZCBieSBQeXRob24gY2FuIGJlCi0gICAgcGFzc2VkLiAgU2VlIHRoZSBjb2RlY3MgbW9kdWxlIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgotCi0gICAgZXJyb3JzIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyBob3cgZW5jb2RpbmcgZXJyb3JzIGFyZSB0bwotICAgIGJlIGhhbmRsZWQtLS10aGlzIGFyZ3VtZW50IHNob3VsZCBub3QgYmUgdXNlZCBpbiBiaW5hcnkgbW9kZS4gUGFzcwotICAgICdzdHJpY3QnIHRvIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3IKLSAgICAodGhlIGRlZmF1bHQgb2YgTm9uZSBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyAnaWdub3JlJyB0byBpZ25vcmUKLSAgICBlcnJvcnMuIChOb3RlIHRoYXQgaWdub3JpbmcgZW5jb2RpbmcgZXJyb3JzIGNhbiBsZWFkIHRvIGRhdGEgbG9zcy4pCi0gICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBjb2RlY3MucmVnaXN0ZXIgZm9yIGEgbGlzdCBvZiB0aGUgcGVybWl0dGVkCi0gICAgZW5jb2RpbmcgZXJyb3Igc3RyaW5ncy4KLQotICAgIG5ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHQKLSAgICBtb2RlKS4gSXQgY2FuIGJlIE5vbmUsICcnLCAnXG4nLCAnXHInLCBhbmQgJ1xyXG4nLiAgSXQgd29ya3MgYXMKLSAgICBmb2xsb3dzOgotCi0gICAgKiBPbiBpbnB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcwotICAgICAgZW5hYmxlZC4gTGluZXMgaW4gdGhlIGlucHV0IGNhbiBlbmQgaW4gJ1xuJywgJ1xyJywgb3IgJ1xyXG4nLCBhbmQKLSAgICAgIHRoZXNlIGFyZSB0cmFuc2xhdGVkIGludG8gJ1xuJyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlCi0gICAgICBjYWxsZXIuIElmIGl0IGlzICcnLCB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGlzIGVuYWJsZWQsIGJ1dCBsaW5lCi0gICAgICBlbmRpbmdzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4gSWYgaXQgaGFzIGFueSBvZgotICAgICAgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgaW5wdXQgbGluZXMgYXJlIG9ubHkgdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4KLSAgICAgIHN0cmluZywgYW5kIHRoZSBsaW5lIGVuZGluZyBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4KLQotICAgICogT24gb3V0cHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIGFueSAnXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUKLSAgICAgIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpbmUgc2VwYXJhdG9yLCBvcy5saW5lc2VwLiBJZgotICAgICAgbmV3bGluZSBpcyAnJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55IG9mIHRoZQotICAgICAgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgJ1xuJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlIHRyYW5zbGF0ZWQgdG8KLSAgICAgIHRoZSBnaXZlbiBzdHJpbmcuCi0KLSAgICBJZiBjbG9zZWZkIGlzIEZhbHNlLCB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBrZXB0IG9wZW4KLSAgICB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gVGhpcyBkb2VzIG5vdCB3b3JrIHdoZW4gYSBmaWxlIG5hbWUgaXMgZ2l2ZW4KLSAgICBhbmQgbXVzdCBiZSBUcnVlIGluIHRoYXQgY2FzZS4KLQotICAgIG9wZW4oKSByZXR1cm5zIGEgZmlsZSBvYmplY3Qgd2hvc2UgdHlwZSBkZXBlbmRzIG9uIHRoZSBtb2RlLCBhbmQKLSAgICB0aHJvdWdoIHdoaWNoIHRoZSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyByZWFkaW5nIGFuZCB3cml0aW5nCi0gICAgYXJlIHBlcmZvcm1lZC4gV2hlbiBvcGVuKCkgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQgbW9kZSAoJ3cnLAotICAgICdyJywgJ3d0JywgJ3J0JywgZXRjLiksIGl0IHJldHVybnMgYSBUZXh0SU9XcmFwcGVyLiBXaGVuIHVzZWQgdG8gb3BlbgotICAgIGEgZmlsZSBpbiBhIGJpbmFyeSBtb2RlLCB0aGUgcmV0dXJuZWQgY2xhc3MgdmFyaWVzOiBpbiByZWFkIGJpbmFyeQotICAgIG1vZGUsIGl0IHJldHVybnMgYSBCdWZmZXJlZFJlYWRlcjsgaW4gd3JpdGUgYmluYXJ5IGFuZCBhcHBlbmQgYmluYXJ5Ci0gICAgbW9kZXMsIGl0IHJldHVybnMgYSBCdWZmZXJlZFdyaXRlciwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucwotICAgIGEgQnVmZmVyZWRSYW5kb20uCi0KLSAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIHN0cmluZyBvciBieXRlYXJyYXkgYXMgYSBmaWxlIGZvciBib3RoCi0gICAgcmVhZGluZyBhbmQgd3JpdGluZy4gRm9yIHN0cmluZ3MgU3RyaW5nSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUKLSAgICBvcGVuZWQgaW4gYSB0ZXh0IG1vZGUsIGFuZCBmb3IgYnl0ZXMgYSBCeXRlc0lPIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlCi0gICAgb3BlbmVkIGluIGEgYmluYXJ5IG1vZGUuCi0gICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZSwgKGJhc2VzdHJpbmcsIGludCkpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgZmlsZTogJXIiICUgZmlsZSkKLSAgICBpZiBub3QgaXNpbnN0YW5jZShtb2RlLCBiYXNlc3RyaW5nKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgaWYgYnVmZmVyaW5nIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShidWZmZXJpbmcsIGludCk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBidWZmZXJpbmc6ICVyIiAlIGJ1ZmZlcmluZykKLSAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoZW5jb2RpbmcsIGJhc2VzdHJpbmcpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludmFsaWQgZW5jb2Rpbmc6ICVyIiAlIGVuY29kaW5nKQotICAgIGlmIGVycm9ycyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoZXJyb3JzLCBiYXNlc3RyaW5nKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGVycm9yczogJXIiICUgZXJyb3JzKQotICAgIG1vZGVzID0gc2V0KG1vZGUpCi0gICAgaWYgbW9kZXMgLSBzZXQoImFyd2IrdFUiKSBvciBsZW4obW9kZSkgPiBsZW4obW9kZXMpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgcmVhZGluZyA9ICJyIiBpbiBtb2RlcwotICAgIHdyaXRpbmcgPSAidyIgaW4gbW9kZXMKLSAgICBhcHBlbmRpbmcgPSAiYSIgaW4gbW9kZXMKLSAgICB1cGRhdGluZyA9ICIrIiBpbiBtb2RlcwotICAgIHRleHQgPSAidCIgaW4gbW9kZXMKLSAgICBiaW5hcnkgPSAiYiIgaW4gbW9kZXMKLSAgICBpZiAiVSIgaW4gbW9kZXM6Ci0gICAgICAgIGlmIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKLSAgICAgICAgcmVhZGluZyA9IFRydWUKLSAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCi0gICAgaWYgcmVhZGluZyArIHdyaXRpbmcgKyBhcHBlbmRpbmcgPiAxOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBoYXZlIHJlYWQvd3JpdGUvYXBwZW5kIG1vZGUgYXQgb25jZSIpCi0gICAgaWYgbm90IChyZWFkaW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIHJlYWQvd3JpdGUvYXBwZW5kIG1vZGUiKQotICAgIGlmIGJpbmFyeSBhbmQgZW5jb2RpbmcgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhbiBlbmNvZGluZyBhcmd1bWVudCIpCi0gICAgaWYgYmluYXJ5IGFuZCBlcnJvcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJpbmFyeSBtb2RlIGRvZXNuJ3QgdGFrZSBhbiBlcnJvcnMgYXJndW1lbnQiKQotICAgIGlmIGJpbmFyeSBhbmQgbmV3bGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGEgbmV3bGluZSBhcmd1bWVudCIpCi0gICAgcmF3ID0gRmlsZUlPKGZpbGUsCi0gICAgICAgICAgICAgICAgIChyZWFkaW5nIGFuZCAiciIgb3IgIiIpICsKLSAgICAgICAgICAgICAgICAgKHdyaXRpbmcgYW5kICJ3IiBvciAiIikgKwotICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKLSAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAotICAgICAgICAgICAgICAgICBjbG9zZWZkKQotICAgIGlmIGJ1ZmZlcmluZyBpcyBOb25lOgotICAgICAgICBidWZmZXJpbmcgPSAtMQotICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKLSAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IC0xCi0gICAgICAgIGxpbmVfYnVmZmVyaW5nID0gVHJ1ZQotICAgIGlmIGJ1ZmZlcmluZyA8IDA6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgYnMgPiAxOgotICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyA9IGJzCi0gICAgaWYgYnVmZmVyaW5nIDwgMDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXJpbmcgc2l6ZSIpCi0gICAgaWYgYnVmZmVyaW5nID09IDA6Ci0gICAgICAgIGlmIGJpbmFyeToKLSAgICAgICAgICAgIHJldHVybiByYXcKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIikKLSAgICBpZiB1cGRhdGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiB3cml0aW5nIG9yIGFwcGVuZGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiByZWFkaW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgaWYgYmluYXJ5OgotICAgICAgICByZXR1cm4gYnVmZmVyCi0gICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKLSAgICB0ZXh0Lm1vZGUgPSBtb2RlCi0gICAgcmV0dXJuIHRleHQKLQotY2xhc3MgX0RvY0Rlc2NyaXB0b3I6Ci0gICAgIiIiSGVscGVyIGZvciBidWlsdGlucy5vcGVuLl9fZG9jX18KLSAgICAiIiIKLSAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIHR5cCk6Ci0gICAgICAgIHJldHVybiAoCi0gICAgICAgICAgICAib3BlbihmaWxlLCBtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsIGVuY29kaW5nPU5vbmUsICIKLSAgICAgICAgICAgICAgICAgImVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSlcblxuIiArCi0gICAgICAgICAgICBvcGVuLl9fZG9jX18pCi0KLWNsYXNzIE9wZW5XcmFwcGVyOgotICAgICIiIldyYXBwZXIgZm9yIGJ1aWx0aW5zLm9wZW4KLQotICAgIFRyaWNrIHNvIHRoYXQgb3BlbiB3b24ndCBiZWNvbWUgYSBib3VuZCBtZXRob2Qgd2hlbiBzdG9yZWQKLSAgICBhcyBhIGNsYXNzIHZhcmlhYmxlIChhcyBkdW1iZGJtIGRvZXMpLgotCi0gICAgU2VlIGluaXRzdGRpbygpIGluIFB5dGhvbi9weXRob25ydW4uYy4KLSAgICAiIiIKLSAgICBfX2RvY19fID0gX0RvY0Rlc2NyaXB0b3IoKQotCi0gICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICByZXR1cm4gb3BlbigqYXJncywgKiprd2FyZ3MpCi0KLQotY2xhc3MgVW5zdXBwb3J0ZWRPcGVyYXRpb24oVmFsdWVFcnJvciwgSU9FcnJvcik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIElPQmFzZShvYmplY3QpOgotCi0gICAgIiIiVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBJL08gY2xhc3NlcywgYWN0aW5nIG9uIHN0cmVhbXMgb2YKLSAgICBieXRlcy4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBkdW1teSBpbXBsZW1lbnRhdGlvbnMgZm9yIG1hbnkgbWV0aG9kcyB0aGF0Ci0gICAgZGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBzZWxlY3RpdmVseTsgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zCi0gICAgcmVwcmVzZW50IGEgZmlsZSB0aGF0IGNhbm5vdCBiZSByZWFkLCB3cml0dGVuIG9yIHNlZWtlZC4KLQotICAgIEV2ZW4gdGhvdWdoIElPQmFzZSBkb2VzIG5vdCBkZWNsYXJlIHJlYWQsIHJlYWRpbnRvLCBvciB3cml0ZSBiZWNhdXNlCi0gICAgdGhlaXIgc2lnbmF0dXJlcyB3aWxsIHZhcnksIGltcGxlbWVudGF0aW9ucyBhbmQgY2xpZW50cyBzaG91bGQKLSAgICBjb25zaWRlciB0aG9zZSBtZXRob2RzIHBhcnQgb2YgdGhlIGludGVyZmFjZS4gQWxzbywgaW1wbGVtZW50YXRpb25zCi0gICAgbWF5IHJhaXNlIGEgSU9FcnJvciB3aGVuIG9wZXJhdGlvbnMgdGhleSBkbyBub3Qgc3VwcG9ydCBhcmUgY2FsbGVkLgotCi0gICAgVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzCi0gICAgYnl0ZXMuIGJ5dGVhcnJheXMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXMKLSAgICByZWFkaW50bykgbmVlZGVkLiBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aCBzdHIgZGF0YS4KLQotICAgIE5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV2ZW4gaW5xdWlyaWVzKSBvbiBhIGNsb3NlZCBzdHJlYW0gaXMKLSAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgSU9FcnJvciBpbiB0aGlzIGNhc2UuCi0KLSAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKLSAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKLSAgICBzdHJlYW0uCi0KLSAgICBJT0Jhc2UgYWxzbyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gSW4gdGhpcyBleGFtcGxlLAotICAgIGZwIGlzIGNsb3NlZCBhZnRlciB0aGUgc3VpdGUgb2YgdGhlIHdpdGggc3RhdG1lbnQgaXMgY29tcGxldGU6Ci0KLSAgICB3aXRoIG9wZW4oJ3NwYW0udHh0JywgJ3InKSBhcyBmcDoKLSAgICAgICAgZnAud3JpdGUoJ1NwYW0gYW5kIGVnZ3MhJykKLSAgICAiIiIKLQorIyBEZWNsYXJpbmcgQUJDcyBpbiBDIGlzIHRyaWNreSBzbyB3ZSBkbyBpdCBoZXJlLgorIyBNZXRob2QgZGVzY3JpcHRpb25zIGFuZCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIEMKKyMgdmVyc2lvbiBob3dldmVyLgorY2xhc3MgSU9CYXNlKF9pby5fSU9CYXNlKToKICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKIAotICAgICMjIyBJbnRlcm5hbCAjIyMKK2NsYXNzIFJhd0lPQmFzZShfaW8uX1Jhd0lPQmFzZSwgSU9CYXNlKToKKyAgICBwYXNzCiAKLSAgICBkZWYgX3Vuc3VwcG9ydGVkKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgotICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCitjbGFzcyBCdWZmZXJlZElPQmFzZShfaW8uX0J1ZmZlcmVkSU9CYXNlLCBJT0Jhc2UpOgorICAgIHBhc3MKIAotICAgICMjIyBQb3NpdGlvbmluZyAjIyMKK2NsYXNzIFRleHRJT0Jhc2UoX2lvLl9UZXh0SU9CYXNlLCBJT0Jhc2UpOgorICAgIHBhc3MKIAotICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlID0gMCk6Ci0gICAgICAgICIiIkNoYW5nZSBzdHJlYW0gcG9zaXRpb24uCitSYXdJT0Jhc2UucmVnaXN0ZXIoRmlsZUlPKQogCi0gICAgICAgIENoYW5nZSB0aGUgc3RyZWFtIHBvc2l0aW9uIHRvIGJ5dGUgb2Zmc2V0IG9mZnNldC4gb2Zmc2V0IGlzCi0gICAgICAgIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlLiAgVmFsdWVzCi0gICAgICAgIGZvciB3aGVuY2UgYXJlOgorZm9yIGtsYXNzIGluIChCeXRlc0lPLCBCdWZmZXJlZFJlYWRlciwgQnVmZmVyZWRXcml0ZXIsIEJ1ZmZlcmVkUmFuZG9tLAorICAgICAgICAgICAgICBCdWZmZXJlZFJXUGFpcik6CisgICAgQnVmZmVyZWRJT0Jhc2UucmVnaXN0ZXIoa2xhc3MpCiAKLSAgICAgICAgKiAwIC0tIHN0YXJ0IG9mIHN0cmVhbSAodGhlIGRlZmF1bHQpOyBvZmZzZXQgc2hvdWxkIGJlIHplcm8gb3IgcG9zaXRpdmUKLSAgICAgICAgKiAxIC0tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uOyBvZmZzZXQgbWF5IGJlIG5lZ2F0aXZlCi0gICAgICAgICogMiAtLSBlbmQgb2Ygc3RyZWFtOyBvZmZzZXQgaXMgdXN1YWxseSBuZWdhdGl2ZQotCi0gICAgICAgIFJldHVybiB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInNlZWsiKQotCi0gICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuc2VlaygwLCAxKQotCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcyA9IE5vbmUpOgotICAgICAgICAiIiJUcnVuY2F0ZSBmaWxlIHRvIHNpemUgYnl0ZXMuCi0KLSAgICAgICAgU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBJTyBwb3NpdGlvbiBhcyByZXBvcnRlZCBieSB0ZWxsKCkuICBSZXR1cm4KLSAgICAgICAgdGhlIG5ldyBzaXplLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInRydW5jYXRlIikKLQotICAgICMjIyBGbHVzaCBhbmQgY2xvc2UgIyMjCi0KLSAgICBkZWYgZmx1c2goc2VsZik6Ci0gICAgICAgICIiIkZsdXNoIHdyaXRlIGJ1ZmZlcnMsIGlmIGFwcGxpY2FibGUuCi0KLSAgICAgICAgVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWQtb25seSBhbmQgbm9uLWJsb2NraW5nIHN0cmVhbXMuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9fY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmx1c2ggb2YgY2xvc2VkIGZpbGUiKQotICAgICAgICAjc2VsZi5fY2hlY2tDbG9zZWQoKQotICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuPz8/Ci0KLSAgICBfX2Nsb3NlZCA9IEZhbHNlCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICIiIkZsdXNoIGFuZCBjbG9zZSB0aGUgSU8gb2JqZWN0LgotCi0gICAgICAgIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjbG9zZWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fX2Nsb3NlZDoKLSAgICAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5fX2Nsb3NlZCA9IFRydWUKLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAiIiJEZXN0cnVjdG9yLiAgQ2FsbHMgY2xvc2UoKS4iIiIKLSAgICAgICAgIyBUaGUgdHJ5L2V4Y2VwdCBibG9jayBpcyBpbiBjYXNlIHRoaXMgaXMgY2FsbGVkIGF0IHByb2dyYW0KLSAgICAgICAgIyBleGl0IHRpbWUsIHdoZW4gaXQncyBwb3NzaWJsZSB0aGF0IGdsb2JhbHMgaGF2ZSBhbHJlYWR5IGJlZW4KLSAgICAgICAgIyBkZWxldGVkLCBhbmQgdGhlbiB0aGUgY2xvc2UoKSBjYWxsIG1pZ2h0IGZhaWwuICBTaW5jZQotICAgICAgICAjIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgc3VjaCBmYWlsdXJlcyBhbmQgdGhleSBhbm5veQotICAgICAgICAjIHRoZSBlbmQgdXNlcnMsIHdlIHN1cHByZXNzIHRoZSB0cmFjZWJhY2suCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAjIyMgSW5xdWlyaWVzICMjIwotCi0gICAgZGVmIHNlZWthYmxlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy4KLQotICAgICAgICBJZiBGYWxzZSwgc2VlaygpLCB0ZWxsKCkgYW5kIHRydW5jYXRlKCkgd2lsbCByYWlzZSBJT0Vycm9yLgotICAgICAgICBUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX2NoZWNrU2Vla2FibGUoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBpZiBmaWxlIGlzIG5vdCBzZWVrYWJsZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQotCi0KLSAgICBkZWYgcmVhZGFibGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciByZWFkaW5nLgotCi0gICAgICAgIElmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX2NoZWNrUmVhZGFibGUoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBpZiBmaWxlIGlzIG5vdCByZWFkYWJsZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCByZWFkYWJsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQotCi0gICAgZGVmIHdyaXRhYmxlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4KLQotICAgICAgICBJZiBGYWxzZSwgd3JpdGUoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfY2hlY2tXcml0YWJsZShzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHdyaXRhYmxlCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHdyaXRhYmxlLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgY2xvc2VkKHNlbGYpOgotICAgICAgICAiIiJjbG9zZWQ6IGJvb2wuICBUcnVlIGlmZiB0aGUgZmlsZSBoYXMgYmVlbiBjbG9zZWQuCi0KLSAgICAgICAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIGlzIGEgcHJvcGVydHksIG5vdCBhIHByZWRpY2F0ZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xvc2VkCi0KLSAgICBkZWYgX2NoZWNrQ2xvc2VkKHNlbGYsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIFZhbHVlRXJyb3IgaWYgZmlsZSBpcyBjbG9zZWQKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQotCi0gICAgIyMjIENvbnRleHQgbWFuYWdlciAjIyMKLQotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgICIiIkNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIFJldHVybnMgc2VsZi4iIiIKLSAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgQ2FsbHMgY2xvc2UoKSIiIgotICAgICAgICBzZWxmLmNsb3NlKCkKLQotICAgICMjIyBMb3dlci1sZXZlbCBBUElzICMjIwotCi0gICAgIyBYWFggU2hvdWxkIHRoZXNlIGJlIHByZXNlbnQgZXZlbiBpZiB1bmltcGxlbWVudGVkPwotCi0gICAgZGVmIGZpbGVubyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBpZiBvbmUgZXhpc3RzLgotCi0gICAgICAgIEFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoImZpbGVubyIpCi0KLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGlzIGlzIGFuICdpbnRlcmFjdGl2ZScgc3RyZWFtLgotCi0gICAgICAgIFJldHVybiBGYWxzZSBpZiBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKLQotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdCA9IC0xKToKLSAgICAgICAgciIiIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtLgotCi0gICAgICAgIElmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuCi0KLSAgICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYidcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQKLSAgICAgICAgZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQotICAgICAgICB0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgInBlZWsiKToKLSAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6Ci0gICAgICAgICAgICAgICAgcmVhZGFoZWFkID0gc2VsZi5wZWVrKDEpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlYWRhaGVhZDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgICAgICBuID0gKHJlYWRhaGVhZC5maW5kKGIiXG4iKSArIDEpIG9yIGxlbihyZWFkYWhlYWQpCi0gICAgICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBsaW1pdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQotICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKHJlcykgPCBsaW1pdDoKLSAgICAgICAgICAgIGIgPSBzZWxmLnJlYWQobnJlYWRhaGVhZCgpKQotICAgICAgICAgICAgaWYgbm90IGI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJlcyArPSBiCi0gICAgICAgICAgICBpZiByZXMuZW5kc3dpdGgoYiJcbiIpOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBieXRlcyhyZXMpCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICByZXR1cm4gbGluZQotCi0gICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBoaW50PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGxpbmVzIGZyb20gdGhlIHN0cmVhbS4KLQotICAgICAgICBoaW50IGNhbiBiZSBzcGVjaWZpZWQgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQ6IG5vIG1vcmUKLSAgICAgICAgbGluZXMgd2lsbCBiZSByZWFkIGlmIHRoZSB0b3RhbCBzaXplIChpbiBieXRlcy9jaGFyYWN0ZXJzKSBvZiBhbGwKLSAgICAgICAgbGluZXMgc28gZmFyIGV4Y2VlZHMgaGludC4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGhpbnQgaXMgTm9uZToKLSAgICAgICAgICAgIGhpbnQgPSAtMQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoaW50LCAoaW50LCBsb25nKSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImhpbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKLSAgICAgICAgaWYgaGludCA8PSAwOgotICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKLSAgICAgICAgbiA9IDAKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgbGluZSBpbiBzZWxmOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgICAgICAgICBuICs9IGxlbihsaW5lKQotICAgICAgICAgICAgaWYgbiA+PSBoaW50OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIHdyaXRlbGluZXMoc2VsZiwgbGluZXMpOgotICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQotCi0KLWNsYXNzIFJhd0lPQmFzZShJT0Jhc2UpOgotCi0gICAgIiIiQmFzZSBjbGFzcyBmb3IgcmF3IGJpbmFyeSBJL08uIiIiCi0KLSAgICAjIFRoZSByZWFkKCkgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgcmVhZGludG8oKTsgZGVyaXZlZAotICAgICMgY2xhc3NlcyB0aGF0IHdhbnQgdG8gc3VwcG9ydCByZWFkKCkgb25seSBuZWVkIHRvIGltcGxlbWVudAotICAgICMgcmVhZGludG8oKSBhcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24uICBJbiBnZW5lcmFsLCByZWFkaW50bygpIGNhbiBiZQotICAgICMgbW9yZSBlZmZpY2llbnQgdGhhbiByZWFkKCkuCi0KLSAgICAjIChJdCB3b3VsZCBiZSB0ZW1wdGluZyB0byBhbHNvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YKLSAgICAjIHJlYWRpbnRvKCkgaW4gdGVybXMgb2YgcmVhZCgpLCBpbiBjYXNlIHRoZSBsYXR0ZXIgaXMgYSBtb3JlIHN1aXRhYmxlCi0gICAgIyBwcmltaXRpdmUgb3BlcmF0aW9uLCBidXQgdGhhdCB3b3VsZCBsZWFkIHRvIG5hc3R5IHJlY3Vyc2lvbiBpbiBjYXNlCi0gICAgIyBhIHN1YmNsYXNzIGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlci4pCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuID0gLTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcy4KLQotICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIGFycmF5IG9uIEVPRiwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0IGlzCi0gICAgICAgIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbiA8IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKLSAgICAgICAgYiA9IGJ5dGVhcnJheShuLl9faW5kZXhfXygpKQotICAgICAgICBuID0gc2VsZi5yZWFkaW50byhiKQotICAgICAgICBkZWwgYltuOl0KLSAgICAgICAgcmV0dXJuIGJ5dGVzKGIpCi0KLSAgICBkZWYgcmVhZGFsbChzZWxmKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBFT0YsIHVzaW5nIG11bHRpcGxlIHJlYWQoKSBjYWxsLiIiIgotICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChERUZBVUxUX0JVRkZFUl9TSVpFKQotICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJlcyArPSBkYXRhCi0gICAgICAgIHJldHVybiBieXRlcyhyZXMpCi0KLSAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYi4KLQotICAgICAgICBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkICgwIGZvciBFT0YpLCBvciBOb25lIGlmIHRoZSBvYmplY3QKLSAgICAgICAgaXMgc2V0IG5vdCB0byBibG9jayBhcyBoYXMgbm8gZGF0YSB0byByZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWRpbnRvIikKLQotICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgIiIiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLgotCi0gICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIGxlbihiKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCi0KLQotY2xhc3MgRmlsZUlPKF9maWxlaW8uX0ZpbGVJTywgUmF3SU9CYXNlKToKLQotICAgICIiIlJhdyBJL08gaW1wbGVtZW50YXRpb24gZm9yIE9TIGZpbGVzLiIiIgotCi0gICAgIyBUaGlzIG11bHRpcGx5IGluaGVyaXRzIGZyb20gX0ZpbGVJTyBhbmQgUmF3SU9CYXNlIHRvIG1ha2UKLSAgICAjIGlzaW5zdGFuY2UoaW8uRmlsZUlPKCksIGlvLlJhd0lPQmFzZSkgcmV0dXJuIFRydWUgd2l0aG91dCByZXF1aXJpbmcKLSAgICAjIHRoYXQgX2ZpbGVpby5fRmlsZUlPIGluaGVyaXRzIGZyb20gaW8uUmF3SU9CYXNlICh3aGljaCB3b3VsZCBiZSBoYXJkCi0gICAgIyB0byBkbyBzaW5jZSBfZmlsZWlvLmMgaXMgd3JpdHRlbiBpbiBDKS4KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2RlPSJyIiwgY2xvc2VmZD1UcnVlKToKLSAgICAgICAgX2ZpbGVpby5fRmlsZUlPLl9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZGUsIGNsb3NlZmQpCi0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIF9maWxlaW8uX0ZpbGVJTy5jbG9zZShzZWxmKQotICAgICAgICBSYXdJT0Jhc2UuY2xvc2Uoc2VsZikKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0KLWNsYXNzIEJ1ZmZlcmVkSU9CYXNlKElPQmFzZSk6Ci0KLSAgICAiIiJCYXNlIGNsYXNzIGZvciBidWZmZXJlZCBJTyBvYmplY3RzLgotCi0gICAgVGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIFJhd0lPQmFzZSBpcyB0aGF0IHRoZSByZWFkKCkgbWV0aG9kCi0gICAgc3VwcG9ydHMgb21pdHRpbmcgdGhlIHNpemUgYXJndW1lbnQsIGFuZCBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdAotICAgIGltcGxlbWVudGF0aW9uIHRoYXQgZGVmZXJzIHRvIHJlYWRpbnRvKCkuCi0KLSAgICBJbiBhZGRpdGlvbiwgcmVhZCgpLCByZWFkaW50bygpIGFuZCB3cml0ZSgpIG1heSByYWlzZQotICAgIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluIG5vbi1ibG9ja2luZwotICAgIG1vZGUgYW5kIG5vdCByZWFkeTsgdW5saWtlIHRoZWlyIHJhdyBjb3VudGVycGFydHMsIHRoZXkgd2lsbCBuZXZlcgotICAgIHJldHVybiBOb25lLgotCi0gICAgQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgaW5oZXJpdCBmcm9tIGEgUmF3SU9CYXNlCi0gICAgaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZS4KLSAgICAiIiIKLQotICAgIGRlZiByZWFkKHNlbGYsIG4gPSBOb25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCi0KLSAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIE5vbmUsIG9yIG5lZ2F0aXZlLCByZWFkcyBhbmQKLSAgICAgICAgcmV0dXJucyBhbGwgZGF0YSB1bnRpbCBFT0YuCi0KLSAgICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcwotICAgICAgICBub3QgJ2ludGVyYWN0aXZlJywgbXVsdGlwbGUgcmF3IHJlYWRzIG1heSBiZSBpc3N1ZWQgdG8gc2F0aXNmeQotICAgICAgICB0aGUgYnl0ZSBjb3VudCAodW5sZXNzIEVPRiBpcyByZWFjaGVkIGZpcnN0KS4gIEJ1dCBmb3IKLSAgICAgICAgaW50ZXJhY3RpdmUgcmF3IHN0cmVhbXMgKFhYWCBhbmQgZm9yIHBpcGVzPyksIGF0IG1vc3Qgb25lIHJhdwotICAgICAgICByZWFkIHdpbGwgYmUgaXNzdWVkLCBhbmQgYSBzaG9ydCByZXN1bHQgZG9lcyBub3QgaW1wbHkgdGhhdAotICAgICAgICBFT0YgaXMgaW1taW5lbnQuCi0KLSAgICAgICAgUmV0dXJucyBhbiBlbXB0eSBieXRlcyBhcnJheSBvbiBFT0YuCi0KLSAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubwotICAgICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCi0KLSAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYi4KLQotICAgICAgICBMaWtlIHJlYWQoKSwgdGhpcyBtYXkgaXNzdWUgbXVsdGlwbGUgcmVhZHMgdG8gdGhlIHVuZGVybHlpbmcgcmF3Ci0gICAgICAgIHN0cmVhbSwgdW5sZXNzIHRoZSBsYXR0ZXIgaXMgJ2ludGVyYWN0aXZlJy4KLQotICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKS4KLQotICAgICAgICBSYWlzZXMgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaGFzIG5vCi0gICAgICAgIGRhdGEgYXQgdGhlIG1vbWVudC4KLSAgICAgICAgIiIiCi0gICAgICAgICMgWFhYIFRoaXMgb3VnaHQgdG8gd29yayB3aXRoIGFueXRoaW5nIHRoYXQgc3VwcG9ydHMgdGhlIGJ1ZmZlciBBUEkKLSAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4oYikpCi0gICAgICAgIG4gPSBsZW4oZGF0YSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYls6bl0gPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShiLCBhcnJheS5hcnJheSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyCi0gICAgICAgICAgICBiWzpuXSA9IGFycmF5LmFycmF5KGInYicsIGRhdGEpCi0gICAgICAgIHJldHVybiBuCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgYik6Ci0gICAgICAgICIiIldyaXRlIHRoZSBnaXZlbiBidWZmZXIgdG8gdGhlIElPIHN0cmVhbS4KLQotICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBpcyBuZXZlciBsZXNzIHRoYW4KLSAgICAgICAgbGVuKGIpLgotCi0gICAgICAgIFJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGUKLSAgICAgICAgdW5kZXJseWluZyByYXcgc3RyZWFtIGNhbm5vdCBhY2NlcHQgbW9yZSBkYXRhIGF0IHRoZSBtb21lbnQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgid3JpdGUiKQotCi0KLWNsYXNzIF9CdWZmZXJlZElPTWl4aW4oQnVmZmVyZWRJT0Jhc2UpOgotCi0gICAgIiIiQSBtaXhpbiBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJlZElPQmFzZSB3aXRoIGFuIHVuZGVybHlpbmcgcmF3IHN0cmVhbS4KLQotICAgIFRoaXMgcGFzc2VzIG1vc3QgcmVxdWVzdHMgb24gdG8gdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbS4gIEl0Ci0gICAgZG9lcyAqbm90KiBwcm92aWRlIGltcGxlbWVudGF0aW9ucyBvZiByZWFkKCksIHJlYWRpbnRvKCkgb3IKLSAgICB3cml0ZSgpLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdyk6Ci0gICAgICAgIHNlbGYucmF3ID0gcmF3Ci0KLSAgICAjIyMgUG9zaXRpb25pbmcgIyMjCi0KLSAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRlbGwoKQotCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKLSAgICAgICAgIyBGbHVzaCB0aGUgc3RyZWFtLiAgV2UncmUgbWl4aW5nIGJ1ZmZlcmVkIEkvTyB3aXRoIGxvd2VyLWxldmVsIEkvTywKLSAgICAgICAgIyBhbmQgYSBmbHVzaCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHN5bmNoIGJvdGggdmlld3Mgb2YgdGhlIGN1cnJlbnQKLSAgICAgICAgIyBmaWxlIHN0YXRlLgotICAgICAgICBzZWxmLmZsdXNoKCkKLQotICAgICAgICBpZiBwb3MgaXMgTm9uZToKLSAgICAgICAgICAgIHBvcyA9IHNlbGYudGVsbCgpCi0gICAgICAgICMgWFhYOiBTaG91bGQgc2VlaygpIGJlIHVzZWQsIGluc3RlYWQgb2YgcGFzc2luZyB0aGUgcG9zaXRpb24KLSAgICAgICAgIyBYWFggIGRpcmVjdGx5IHRvIHRydW5jYXRlPwotICAgICAgICByZXR1cm4gc2VsZi5yYXcudHJ1bmNhdGUocG9zKQotCi0gICAgIyMjIEZsdXNoIGFuZCBjbG9zZSAjIyMKLQotICAgIGRlZiBmbHVzaChzZWxmKToKLSAgICAgICAgc2VsZi5yYXcuZmx1c2goKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgICAgIHNlbGYucmF3LmNsb3NlKCkKLQotICAgICMjIyBJbnF1aXJpZXMgIyMjCi0KLSAgICBkZWYgc2Vla2FibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5zZWVrYWJsZSgpCi0KLSAgICBkZWYgcmVhZGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5yZWFkYWJsZSgpCi0KLSAgICBkZWYgd3JpdGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy53cml0YWJsZSgpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgY2xvc2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcuY2xvc2VkCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3Lm5hbWUKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBtb2RlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcubW9kZQotCi0gICAgIyMjIExvd2VyLWxldmVsIEFQSXMgIyMjCi0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcuZmlsZW5vKCkKLQotICAgIGRlZiBpc2F0dHkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhdy5pc2F0dHkoKQotCi0KLWNsYXNzIF9CeXRlc0lPKEJ1ZmZlcmVkSU9CYXNlKToKLQotICAgICIiIkJ1ZmZlcmVkIEkvTyBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnl0ZXMgYnVmZmVyLiIiIgotCi0gICAgIyBYWFggTW9yZSBkb2NzCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF9ieXRlcz1Ob25lKToKLSAgICAgICAgYnVmID0gYnl0ZWFycmF5KCkKLSAgICAgICAgaWYgaW5pdGlhbF9ieXRlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGJ1ZiArPSBieXRlYXJyYXkoaW5pdGlhbF9ieXRlcykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gYnVmCi0gICAgICAgIHNlbGYuX3BvcyA9IDAKLQotICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBieXRlcyB2YWx1ZSAoY29udGVudHMpIG9mIHRoZSBidWZmZXIKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZ2V0dmFsdWUgb24gY2xvc2VkIGZpbGUiKQotICAgICAgICByZXR1cm4gYnl0ZXMoc2VsZi5fYnVmZmVyKQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobiwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXIiKQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQotICAgICAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9wb3M6Ci0gICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgbikKLSAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCi0gICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcwotICAgICAgICByZXR1cm4gYnl0ZXMoYikKLQotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgIiIidGhpcyBpcyB0aGUgc2FtZSBhcyByZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZChuKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgaXNpbnN0YW5jZShiLCB1bmljb2RlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3Qgd3JpdGUgdW5pY29kZSB0byBiaW5hcnkgc3RyZWFtIikKLSAgICAgICAgbiA9IGxlbihiKQotICAgICAgICBpZiBuID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBwb3MgPSBzZWxmLl9wb3MKLSAgICAgICAgaWYgcG9zID4gbGVuKHNlbGYuX2J1ZmZlcik6Ci0gICAgICAgICAgICAjIEluc2VydHMgbnVsbCBieXRlcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgZmlsZQotICAgICAgICAgICAgIyBhbmQgdGhlIG5ldyB3cml0ZSBwb3NpdGlvbi4KLSAgICAgICAgICAgIHBhZGRpbmcgPSBiJ1x4MDAnICogKHBvcyAtIGxlbihzZWxmLl9idWZmZXIpKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyICs9IHBhZGRpbmcKLSAgICAgICAgc2VsZi5fYnVmZmVyW3Bvczpwb3MgKyBuXSA9IGIKLSAgICAgICAgc2VsZi5fcG9zICs9IG4KLSAgICAgICAgcmV0dXJuIG4KLQotICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNlZWsgb24gY2xvc2VkIGZpbGUiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwb3MuX19pbmRleF9fCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpICMgZnJvbSBlcnIKLSAgICAgICAgaWYgd2hlbmNlID09IDA6Ci0gICAgICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHNlZWsgcG9zaXRpb24gJXIiICUgKHBvcywpKQotICAgICAgICAgICAgc2VsZi5fcG9zID0gcG9zCi0gICAgICAgIGVsaWYgd2hlbmNlID09IDE6Ci0gICAgICAgICAgICBzZWxmLl9wb3MgPSBtYXgoMCwgc2VsZi5fcG9zICsgcG9zKQotICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgotICAgICAgICAgICAgc2VsZi5fcG9zID0gbWF4KDAsIGxlbihzZWxmLl9idWZmZXIpICsgcG9zKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aGVuY2UgdmFsdWUiKQotICAgICAgICByZXR1cm4gc2VsZi5fcG9zCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0ZWxsIG9uIGNsb3NlZCBmaWxlIikKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcwotCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0cnVuY2F0ZSBvbiBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIHBvcyBpcyBOb25lOgotICAgICAgICAgICAgcG9zID0gc2VsZi5fcG9zCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcG9zLl9faW5kZXhfXwotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpCi0gICAgICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRydW5jYXRlIHBvc2l0aW9uICVyIiAlIChwb3MsKSkKLSAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcltwb3M6XQotICAgICAgICByZXR1cm4gcG9zCi0KLSAgICBkZWYgcmVhZGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgd3JpdGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgc2Vla2FibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLSMgVXNlIHRoZSBmYXN0ZXIgaW1wbGVtZW50YXRpb24gb2YgQnl0ZXNJTyBpZiBhdmFpbGFibGUKLXRyeToKLSAgICBpbXBvcnQgX2J5dGVzaW8KLQotICAgIGNsYXNzIEJ5dGVzSU8oX2J5dGVzaW8uX0J5dGVzSU8sIEJ1ZmZlcmVkSU9CYXNlKToKLSAgICAgICAgX19kb2NfXyA9IF9ieXRlc2lvLl9CeXRlc0lPLl9fZG9jX18KLQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIEJ5dGVzSU8gPSBfQnl0ZXNJTwotCi0KLWNsYXNzIEJ1ZmZlcmVkUmVhZGVyKF9CdWZmZXJlZElPTWl4aW4pOgotCi0gICAgIiIiQnVmZmVyZWRSZWFkZXIocmF3WywgYnVmZmVyX3NpemVdKQotCi0gICAgQSBidWZmZXIgZm9yIGEgcmVhZGFibGUsIHNlcXVlbnRpYWwgQmFzZVJhd0lPIG9iamVjdC4KLQotICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRSZWFkZXIgZm9yIHRoZSBnaXZlbiByZWFkYWJsZSByYXcKLSAgICBzdHJlYW0gYW5kIGJ1ZmZlcl9zaXplLiBJZiBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkLCBERUZBVUxUX0JVRkZFUl9TSVpFCi0gICAgaXMgdXNlZC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUpOgotICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgotICAgICAgICAiIiIKLSAgICAgICAgcmF3Ll9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCi0gICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQotICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCi0gICAgICAgIHNlbGYuX3JlYWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLQotICAgIGRlZiBfcmVzZXRfcmVhZF9idWYoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JlYWRfYnVmID0gYiIiCi0gICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAotCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBuIGJ5dGVzLgotCi0gICAgICAgIFJldHVybnMgZXhhY3RseSBuIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTwotICAgICAgICBzdHJlYW0gcmVhY2hlcyBFT0Ygb3IgaWYgdGhlIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nCi0gICAgICAgIG1vZGUuIElmIG4gaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZAotICAgICAgICBibG9jay4KLSAgICAgICAgIiIiCi0gICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQobikKLQotICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBub2RhdGFfdmFsID0gYiIiCi0gICAgICAgIGVtcHR5X3ZhbHVlcyA9IChiIiIsIE5vbmUpCi0gICAgICAgIGJ1ZiA9IHNlbGYuX3JlYWRfYnVmCi0gICAgICAgIHBvcyA9IHNlbGYuX3JlYWRfcG9zCi0KLSAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkIGlzIHVuc3BlY2lmaWVkLgotICAgICAgICBpZiBuIGlzIE5vbmUgb3IgbiA9PSAtMToKLSAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKLSAgICAgICAgICAgIGNodW5rcyA9IFtidWZbcG9zOl1dICAjIFN0cmlwIHRoZSBjb25zdW1lZCBieXRlcy4KLSAgICAgICAgICAgIGN1cnJlbnRfc2l6ZSA9IDAKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgIyBSZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suCi0gICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJhdy5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBjaHVuayBpbiBlbXB0eV92YWx1ZXM6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGF0YV92YWwgPSBjaHVuawotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGN1cnJlbnRfc2l6ZSArPSBsZW4oY2h1bmspCi0gICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChjaHVuaykKLSAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihjaHVua3MpIG9yIG5vZGF0YV92YWwKLQotICAgICAgICAjIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBpcyBzcGVjaWZpZWQsIHJldHVybiBhdCBtb3N0IG4gYnl0ZXMuCi0gICAgICAgIGF2YWlsID0gbGVuKGJ1ZikgLSBwb3MgICMgTGVuZ3RoIG9mIHRoZSBhdmFpbGFibGUgYnVmZmVyZWQgZGF0YS4KLSAgICAgICAgaWYgbiA8PSBhdmFpbDoKLSAgICAgICAgICAgICMgRmFzdCBwYXRoOiB0aGUgZGF0YSB0byByZWFkIGlzIGZ1bGx5IGJ1ZmZlcmVkLgotICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgKz0gbgotICAgICAgICAgICAgcmV0dXJuIGJ1Zltwb3M6cG9zK25dCi0gICAgICAgICMgU2xvdyBwYXRoOiByZWFkIGZyb20gdGhlIHN0cmVhbSB1bnRpbCBlbm91Z2ggYnl0ZXMgYXJlIHJlYWQsCi0gICAgICAgICMgb3IgdW50aWwgYW4gRU9GIG9jY3VycyBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suCi0gICAgICAgIGNodW5rcyA9IFtidWZbcG9zOl1dCi0gICAgICAgIHdhbnRlZCA9IG1heChzZWxmLmJ1ZmZlcl9zaXplLCBuKQotICAgICAgICB3aGlsZSBhdmFpbCA8IG46Ci0gICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQod2FudGVkKQotICAgICAgICAgICAgaWYgY2h1bmsgaW4gZW1wdHlfdmFsdWVzOgotICAgICAgICAgICAgICAgIG5vZGF0YV92YWwgPSBjaHVuawotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBhdmFpbCArPSBsZW4oY2h1bmspCi0gICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQotICAgICAgICAjIG4gaXMgbW9yZSB0aGVuIGF2YWlsIG9ubHkgd2hlbiBhbiBFT0Ygb2NjdXJyZWQgb3Igd2hlbgotICAgICAgICAjIHJlYWQoKSB3b3VsZCBoYXZlIGJsb2NrZWQuCi0gICAgICAgIG4gPSBtaW4obiwgYXZhaWwpCi0gICAgICAgIG91dCA9IGIiIi5qb2luKGNodW5rcykKLSAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBvdXRbbjpdICAjIFNhdmUgdGhlIGV4dHJhIGRhdGEgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCi0gICAgICAgIHJldHVybiBvdXRbOm5dIGlmIG91dCBlbHNlIG5vZGF0YV92YWwKLQotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6Ci0gICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLgotCi0gICAgICAgIFRoZSBhcmd1bWVudCBpbmRpY2F0ZXMgYSBkZXNpcmVkIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzOyB3ZQotICAgICAgICBkbyBhdCBtb3N0IG9uZSByYXcgcmVhZCB0byBzYXRpc2Z5IGl0LiAgV2UgbmV2ZXIgcmV0dXJuIG1vcmUKLSAgICAgICAgdGhhbiBzZWxmLmJ1ZmZlcl9zaXplLgotICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGVla191bmxvY2tlZChuKQotCi0gICAgZGVmIF9wZWVrX3VubG9ja2VkKHNlbGYsIG49MCk6Ci0gICAgICAgIHdhbnQgPSBtaW4obiwgc2VsZi5idWZmZXJfc2l6ZSkKLSAgICAgICAgaGF2ZSA9IGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcwotICAgICAgICBpZiBoYXZlIDwgd2FudDoKLSAgICAgICAgICAgIHRvX3JlYWQgPSBzZWxmLmJ1ZmZlcl9zaXplIC0gaGF2ZQotICAgICAgICAgICAgY3VycmVudCA9IHNlbGYucmF3LnJlYWQodG9fcmVhZCkKLSAgICAgICAgICAgIGlmIGN1cnJlbnQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdICsgY3VycmVudAotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQotCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLSAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKLSAgICAgICAgIyBvbmx5IHJldHVybiBidWZmZXJlZCBieXRlcy4gIE90aGVyd2lzZSwgd2UgZG8gb25lIHJhdyByZWFkLgotICAgICAgICBpZiBuIDw9IDA6Ci0gICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgc2VsZi5fcGVla191bmxvY2tlZCgxKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoCi0gICAgICAgICAgICAgICAgbWluKG4sIGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcykpCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRlbGwoKSAtIGxlbihzZWxmLl9yZWFkX2J1ZikgKyBzZWxmLl9yZWFkX3BvcwotCi0gICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6Ci0gICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgaWYgd2hlbmNlID09IDE6Ci0gICAgICAgICAgICAgICAgcG9zIC09IGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcwotICAgICAgICAgICAgcG9zID0gc2VsZi5yYXcuc2Vlayhwb3MsIHdoZW5jZSkKLSAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKLSAgICAgICAgICAgIHJldHVybiBwb3MKLQotCi1jbGFzcyBCdWZmZXJlZFdyaXRlcihfQnVmZmVyZWRJT01peGluKToKLQotICAgICIiIkEgYnVmZmVyIGZvciBhIHdyaXRlYWJsZSBzZXF1ZW50aWFsIFJhd0lPIG9iamVjdC4KLQotICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRXcml0ZXIgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUgcmF3Ci0gICAgc3RyZWFtLiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0bwotICAgIERFQUZVTFRfQlVGRkVSX1NJWkUuIElmIG1heF9idWZmZXJfc2l6ZSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0bwotICAgIHR3aWNlIHRoZSBidWZmZXIgc2l6ZS4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsCi0gICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKLSAgICAgICAgcmF3Ll9jaGVja1dyaXRhYmxlKCkKLSAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCi0gICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQotICAgICAgICBzZWxmLm1heF9idWZmZXJfc2l6ZSA9ICgyKmJ1ZmZlcl9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1heF9idWZmZXJfc2l6ZSBpcyBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbWF4X2J1ZmZlcl9zaXplKQotICAgICAgICBzZWxmLl93cml0ZV9idWYgPSBieXRlYXJyYXkoKQotICAgICAgICBzZWxmLl93cml0ZV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgaXNpbnN0YW5jZShiLCB1bmljb2RlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3Qgd3JpdGUgdW5pY29kZSB0byBiaW5hcnkgc3RyZWFtIikKLSAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgotICAgICAgICAgICAgIyBYWFggd2UgY2FuIGltcGxlbWVudCBzb21lIG1vcmUgdHJpY2tzIHRvIHRyeSBhbmQgYXZvaWQKLSAgICAgICAgICAgICMgcGFydGlhbCB3cml0ZXMKLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl93cml0ZV9idWYpID4gc2VsZi5idWZmZXJfc2l6ZToKLSAgICAgICAgICAgICAgICAjIFdlJ3JlIGZ1bGwsIHNvIGxldCdzIHByZS1mbHVzaCB0aGUgYnVmZmVyCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mbHVzaF91bmxvY2tlZCgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAjIFdlIGNhbid0IGFjY2VwdCBhbnl0aGluZyBlbHNlLgotICAgICAgICAgICAgICAgICAgICAjIFhYWCBXaHkgbm90IGp1c3QgbGV0IHRoZSBleGNlcHRpb24gcGFzcyB0aHJvdWdoPwotICAgICAgICAgICAgICAgICAgICByYWlzZSBCbG9ja2luZ0lPRXJyb3IoZS5lcnJubywgZS5zdHJlcnJvciwgMCkKLSAgICAgICAgICAgIGJlZm9yZSA9IGxlbihzZWxmLl93cml0ZV9idWYpCi0gICAgICAgICAgICBzZWxmLl93cml0ZV9idWYuZXh0ZW5kKGIpCi0gICAgICAgICAgICB3cml0dGVuID0gbGVuKHNlbGYuX3dyaXRlX2J1ZikgLSBiZWZvcmUKLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl93cml0ZV9idWYpID4gc2VsZi5idWZmZXJfc2l6ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZsdXNoX3VubG9ja2VkKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLl93cml0ZV9idWYpID4gc2VsZi5tYXhfYnVmZmVyX3NpemU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFdlJ3ZlIGhpdCBtYXhfYnVmZmVyX3NpemUuIFdlIGhhdmUgdG8gYWNjZXB0IGEKLSAgICAgICAgICAgICAgICAgICAgICAgICMgcGFydGlhbCB3cml0ZSBhbmQgY3V0IGJhY2sgb3VyIGJ1ZmZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJhZ2UgPSBsZW4oc2VsZi5fd3JpdGVfYnVmKSAtIHNlbGYubWF4X2J1ZmZlcl9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9idWYgPSBzZWxmLl93cml0ZV9idWZbOnNlbGYubWF4X2J1ZmZlcl9zaXplXQotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmxvY2tpbmdJT0Vycm9yKGUuZXJybm8sIGUuc3RyZXJyb3IsIG92ZXJhZ2UpCi0gICAgICAgICAgICByZXR1cm4gd3JpdHRlbgotCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKLSAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgotICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQotICAgICAgICAgICAgaWYgcG9zIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yYXcudHJ1bmNhdGUocG9zKQotCi0gICAgZGVmIGZsdXNoKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZsdXNoIG9mIGNsb3NlZCBmaWxlIikKLSAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgotICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQotCi0gICAgZGVmIF9mbHVzaF91bmxvY2tlZChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmbHVzaCBvZiBjbG9zZWQgZmlsZSIpCi0gICAgICAgIHdyaXR0ZW4gPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3dyaXRlX2J1ZjoKLSAgICAgICAgICAgICAgICBuID0gc2VsZi5yYXcud3JpdGUoc2VsZi5fd3JpdGVfYnVmKQotICAgICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCi0gICAgICAgICAgICAgICAgd3JpdHRlbiArPSBuCi0gICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3IgYXMgZToKLSAgICAgICAgICAgIG4gPSBlLmNoYXJhY3RlcnNfd3JpdHRlbgotICAgICAgICAgICAgZGVsIHNlbGYuX3dyaXRlX2J1Zls6bl0KLSAgICAgICAgICAgIHdyaXR0ZW4gKz0gbgotICAgICAgICAgICAgcmFpc2UgQmxvY2tpbmdJT0Vycm9yKGUuZXJybm8sIGUuc3RyZXJyb3IsIHdyaXR0ZW4pCi0KLSAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3LnRlbGwoKSArIGxlbihzZWxmLl93cml0ZV9idWYpCi0KLSAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKLSAgICAgICAgd2l0aCBzZWxmLl93cml0ZV9sb2NrOgotICAgICAgICAgICAgc2VsZi5fZmx1c2hfdW5sb2NrZWQoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCi0KLQotY2xhc3MgQnVmZmVyZWRSV1BhaXIoQnVmZmVyZWRJT0Jhc2UpOgotCi0gICAgIiIiQSBidWZmZXJlZCByZWFkZXIgYW5kIHdyaXRlciBvYmplY3QgdG9nZXRoZXIuCi0KLSAgICBBIGJ1ZmZlcmVkIHJlYWRlciBvYmplY3QgYW5kIGJ1ZmZlcmVkIHdyaXRlciBvYmplY3QgcHV0IHRvZ2V0aGVyIHRvCi0gICAgZm9ybSBhIHNlcXVlbnRpYWwgSU8gb2JqZWN0IHRoYXQgY2FuIHJlYWQgYW5kIHdyaXRlLiBUaGlzIGlzIHR5cGljYWxseQotICAgIHVzZWQgd2l0aCBhIHNvY2tldCBvciB0d28td2F5IHBpcGUuCi0KLSAgICByZWFkZXIgYW5kIHdyaXRlciBhcmUgUmF3SU9CYXNlIG9iamVjdHMgdGhhdCBhcmUgcmVhZGFibGUgYW5kCi0gICAgd3JpdGVhYmxlIHJlc3BlY3RpdmVseS4gSWYgdGhlIGJ1ZmZlcl9zaXplIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8KLSAgICBERUZBVUxUX0JVRkZFUl9TSVpFLiBUaGUgbWF4X2J1ZmZlcl9zaXplIChmb3IgdGhlIGJ1ZmZlcmVkIHdyaXRlcikKLSAgICBkZWZhdWx0cyB0byB0d2ljZSB0aGUgYnVmZmVyIHNpemUuCi0gICAgIiIiCi0KLSAgICAjIFhYWCBUaGUgdXNlZnVsbmVzcyBvZiB0aGlzIChjb21wYXJlZCB0byBoYXZpbmcgdHdvIHNlcGFyYXRlIElPCi0gICAgIyBvYmplY3RzKSBpcyBxdWVzdGlvbmFibGUuCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGVyLCB3cml0ZXIsCi0gICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKLSAgICAgICAgIiIiQ29uc3RydWN0b3IuCi0KLSAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdHdvIFJhd0lPIGluc3RhbmNlcy4KLSAgICAgICAgIiIiCi0gICAgICAgIHJlYWRlci5fY2hlY2tSZWFkYWJsZSgpCi0gICAgICAgIHdyaXRlci5fY2hlY2tXcml0YWJsZSgpCi0gICAgICAgIHNlbGYucmVhZGVyID0gQnVmZmVyZWRSZWFkZXIocmVhZGVyLCBidWZmZXJfc2l6ZSkKLSAgICAgICAgc2VsZi53cml0ZXIgPSBCdWZmZXJlZFdyaXRlcih3cml0ZXIsIGJ1ZmZlcl9zaXplLCBtYXhfYnVmZmVyX3NpemUpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQobikKLQotICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvKGIpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgYik6Ci0gICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZShiKQotCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsobikKLQotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKG4pCi0KLSAgICBkZWYgcmVhZGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCi0KLSAgICBkZWYgd3JpdGFibGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0YWJsZSgpCi0KLSAgICBkZWYgZmx1c2goc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLndyaXRlci5mbHVzaCgpCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYud3JpdGVyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5yZWFkZXIuY2xvc2UoKQotCi0gICAgZGVmIGlzYXR0eShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLmlzYXR0eSgpIG9yIHNlbGYud3JpdGVyLmlzYXR0eSgpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgY2xvc2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIuY2xvc2VkCi0KLQotY2xhc3MgQnVmZmVyZWRSYW5kb20oQnVmZmVyZWRXcml0ZXIsIEJ1ZmZlcmVkUmVhZGVyKToKLQotICAgICIiIkEgYnVmZmVyZWQgaW50ZXJmYWNlIHRvIHJhbmRvbSBhY2Nlc3Mgc3RyZWFtcy4KLQotICAgIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgcmVhZGVyIGFuZCB3cml0ZXIgZm9yIGEgc2Vla2FibGUgc3RyZWFtLAotICAgIHJhdywgZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdAotICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfQlVGRkVSX1NJWkUuIFRoZSBtYXhfYnVmZmVyX3NpemUgKGZvciB0aGUgYnVmZmVyZWQKLSAgICB3cml0ZXIpIGRlZmF1bHRzIHRvIHR3aWNlIHRoZSBidWZmZXIgc2l6ZS4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXcsCi0gICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfQlVGRkVSX1NJWkUsIG1heF9idWZmZXJfc2l6ZT1Ob25lKToKLSAgICAgICAgcmF3Ll9jaGVja1NlZWthYmxlKCkKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIuX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZSkKLSAgICAgICAgQnVmZmVyZWRXcml0ZXIuX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZSwgbWF4X2J1ZmZlcl9zaXplKQotCi0gICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICAjIEZpcnN0IGRvIHRoZSByYXcgc2VlaywgdGhlbiBlbXB0eSB0aGUgcmVhZCBidWZmZXIsIHNvIHRoYXQKLSAgICAgICAgIyBpZiB0aGUgcmF3IHNlZWsgZmFpbHMsIHdlIGRvbid0IGxvc2UgYnVmZmVyZWQgZGF0YSBmb3JldmVyLgotICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZiBhbmQgd2hlbmNlID09IDE6Ci0gICAgICAgICAgICAjIFVuZG8gcmVhZCBhaGVhZC4KLSAgICAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgICAgIHNlbGYucmF3LnNlZWsoc2VsZi5fcmVhZF9wb3MgLSBsZW4oc2VsZi5fcmVhZF9idWYpLCAxKQotICAgICAgICBwb3MgPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQotICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKLSAgICAgICAgcmV0dXJuIHBvcwotCi0gICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3dyaXRlX2J1ZjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJhdy50ZWxsKCkgKyBsZW4oc2VsZi5fd3JpdGVfYnVmKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnRlbGwoc2VsZikKLQotICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6Ci0gICAgICAgIGlmIHBvcyBpcyBOb25lOgotICAgICAgICAgICAgcG9zID0gc2VsZi50ZWxsKCkKLSAgICAgICAgIyBVc2Ugc2VlayB0byBmbHVzaCB0aGUgcmVhZCBidWZmZXIuCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci50cnVuY2F0ZShzZWxmLCBwb3MpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIG4pCi0KLSAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZGludG8oc2VsZiwgYikKLQotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucGVlayhzZWxmLCBuKQotCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIG4pCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgYik6Ci0gICAgICAgIGlmIHNlbGYuX3JlYWRfYnVmOgotICAgICAgICAgICAgIyBVbmRvIHJlYWRhaGVhZAotICAgICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5yYXcuc2VlayhzZWxmLl9yZWFkX3BvcyAtIGxlbihzZWxmLl9yZWFkX2J1ZiksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRXcml0ZXIud3JpdGUoc2VsZiwgYikKLQotCi1jbGFzcyBUZXh0SU9CYXNlKElPQmFzZSk6Ci0KLSAgICAiIiJCYXNlIGNsYXNzIGZvciB0ZXh0IEkvTy4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgYW5kIGxpbmUgYmFzZWQgaW50ZXJmYWNlIHRvIHN0cmVhbQotICAgIEkvTy4gVGhlcmUgaXMgbm8gcmVhZGludG8gbWV0aG9kIGJlY2F1c2UgUHl0aG9uJ3MgY2hhcmFjdGVyIHN0cmluZ3MKLSAgICBhcmUgaW1tdXRhYmxlLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCi0gICAgIiIiCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuID0gLTEpOgotICAgICAgICAiIiJSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLgotCi0gICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgotICAgICAgICBJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIHMpOgotICAgICAgICAiIiJXcml0ZSBzdHJpbmcgcyB0byBzdHJlYW0uIiIiCi0gICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zID0gTm9uZSk6Ci0gICAgICAgICIiIlRydW5jYXRlIHNpemUgdG8gcG9zLiIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgidHJ1bmNhdGUiKQotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GLgotCi0gICAgICAgIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIEVPRiBpcyBoaXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZGxpbmUiKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGVuY29kaW5nKHNlbGYpOgotICAgICAgICAiIiJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS4iIiIKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBuZXdsaW5lcyhzZWxmKToKLSAgICAgICAgIiIiTGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgc28gZmFyLgotCi0gICAgICAgIE9ubHkgbGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgZHVyaW5nIHJlYWRpbmcgYXJlIGNvbnNpZGVyZWQuCi0KLSAgICAgICAgU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6Ci0gICAgIiIiQ29kZWMgdXNlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLgotICAgIEl0IHdyYXBzIGFub3RoZXIgaW5jcmVtZW50YWwgZGVjb2RlciwgdHJhbnNsYXRpbmcgXFxyXFxuIGFuZCBcXHIgaW50byBcXG4uCi0gICAgSXQgYWxzbyByZWNvcmRzIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZC4KLSAgICBXaGVuIHVzZWQgd2l0aCB0cmFuc2xhdGU9RmFsc2UsIGl0IGVuc3VyZXMgdGhhdCB0aGUgbmV3bGluZSBzZXF1ZW5jZSBpcwotICAgIHJldHVybmVkIGluIG9uZSBwaWVjZS4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVjb2RlciwgdHJhbnNsYXRlLCBlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICBjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLl9faW5pdF9fKHNlbGYsIGVycm9ycz1lcnJvcnMpCi0gICAgICAgIHNlbGYudHJhbnNsYXRlID0gdHJhbnNsYXRlCi0gICAgICAgIHNlbGYuZGVjb2RlciA9IGRlY29kZXIKLSAgICAgICAgc2VsZi5zZWVubmwgPSAwCi0gICAgICAgIHNlbGYucGVuZGluZ2NyID0gRmFsc2UKLQotICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgIyBkZWNvZGUgaW5wdXQgKHdpdGggdGhlIGV2ZW50dWFsIFxyIGZyb20gYSBwcmV2aW91cyBwYXNzKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmRlY29kZXIuZGVjb2RlKGlucHV0LCBmaW5hbD1maW5hbCkKLSAgICAgICAgaWYgc2VsZi5wZW5kaW5nY3IgYW5kIChvdXRwdXQgb3IgZmluYWwpOgotICAgICAgICAgICAgb3V0cHV0ID0gIlxyIiArIG91dHB1dAotICAgICAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBGYWxzZQotCi0gICAgICAgICMgcmV0YWluIGxhc3QgXHIgZXZlbiB3aGVuIG5vdCB0cmFuc2xhdGluZyBkYXRhOgotICAgICAgICAjIHRoZW4gcmVhZGxpbmUoKSBpcyBzdXJlIHRvIGdldCBcclxuIGluIG9uZSBwYXNzCi0gICAgICAgIGlmIG91dHB1dC5lbmRzd2l0aCgiXHIiKSBhbmQgbm90IGZpbmFsOgotICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0WzotMV0KLSAgICAgICAgICAgIHNlbGYucGVuZGluZ2NyID0gVHJ1ZQotCi0gICAgICAgICMgUmVjb3JkIHdoaWNoIG5ld2xpbmVzIGFyZSByZWFkCi0gICAgICAgIGNybGYgPSBvdXRwdXQuY291bnQoJ1xyXG4nKQotICAgICAgICBjciA9IG91dHB1dC5jb3VudCgnXHInKSAtIGNybGYKLSAgICAgICAgbGYgPSBvdXRwdXQuY291bnQoJ1xuJykgLSBjcmxmCi0gICAgICAgIHNlbGYuc2Vlbm5sIHw9IChsZiBhbmQgc2VsZi5fTEYpIHwgKGNyIGFuZCBzZWxmLl9DUikgXAotICAgICAgICAgICAgICAgICAgICB8IChjcmxmIGFuZCBzZWxmLl9DUkxGKQotCi0gICAgICAgIGlmIHNlbGYudHJhbnNsYXRlOgotICAgICAgICAgICAgaWYgY3JsZjoKLSAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgiXHJcbiIsICJcbiIpCi0gICAgICAgICAgICBpZiBjcjoKLSAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQucmVwbGFjZSgiXHIiLCAiXG4iKQotCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKLSAgICAgICAgYnVmLCBmbGFnID0gc2VsZi5kZWNvZGVyLmdldHN0YXRlKCkKLSAgICAgICAgZmxhZyA8PD0gMQotICAgICAgICBpZiBzZWxmLnBlbmRpbmdjcjoKLSAgICAgICAgICAgIGZsYWcgfD0gMQotICAgICAgICByZXR1cm4gYnVmLCBmbGFnCi0KLSAgICBkZWYgc2V0c3RhdGUoc2VsZiwgc3RhdGUpOgotICAgICAgICBidWYsIGZsYWcgPSBzdGF0ZQotICAgICAgICBzZWxmLnBlbmRpbmdjciA9IGJvb2woZmxhZyAmIDEpCi0gICAgICAgIHNlbGYuZGVjb2Rlci5zZXRzdGF0ZSgoYnVmLCBmbGFnID4+IDEpKQotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBzZWxmLnNlZW5ubCA9IDAKLSAgICAgICAgc2VsZi5wZW5kaW5nY3IgPSBGYWxzZQotICAgICAgICBzZWxmLmRlY29kZXIucmVzZXQoKQotCi0gICAgX0xGID0gMQotICAgIF9DUiA9IDIKLSAgICBfQ1JMRiA9IDQKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBuZXdsaW5lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIChOb25lLAotICAgICAgICAgICAgICAgICJcbiIsCi0gICAgICAgICAgICAgICAgIlxyIiwKLSAgICAgICAgICAgICAgICAoIlxyIiwgIlxuIiksCi0gICAgICAgICAgICAgICAgIlxyXG4iLAotICAgICAgICAgICAgICAgICgiXG4iLCAiXHJcbiIpLAotICAgICAgICAgICAgICAgICgiXHIiLCAiXHJcbiIpLAotICAgICAgICAgICAgICAgICgiXHIiLCAiXG4iLCAiXHJcbiIpCi0gICAgICAgICAgICAgICApW3NlbGYuc2Vlbm5sXQotCi0KLWNsYXNzIFRleHRJT1dyYXBwZXIoVGV4dElPQmFzZSk6Ci0KLSAgICByIiIiQ2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGxheWVyIG92ZXIgYSBCdWZmZXJlZElPQmFzZSBvYmplY3QsIGJ1ZmZlci4KLQotICAgIGVuY29kaW5nIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0aGF0IHRoZSBzdHJlYW0gd2lsbCBiZQotICAgIGRlY29kZWQgb3IgZW5jb2RlZCB3aXRoLiBJdCBkZWZhdWx0cyB0byBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcuCi0KLSAgICBlcnJvcnMgZGV0ZXJtaW5lcyB0aGUgc3RyaWN0bmVzcyBvZiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKHNlZSB0aGUKLSAgICBjb2RlY3MucmVnaXN0ZXIpIGFuZCBkZWZhdWx0cyB0byAic3RyaWN0Ii4KLQotICAgIG5ld2xpbmUgY2FuIGJlIE5vbmUsICcnLCAnXG4nLCAnXHInLCBvciAnXHJcbicuICBJdCBjb250cm9scyB0aGUKLSAgICBoYW5kbGluZyBvZiBsaW5lIGVuZGluZ3MuIElmIGl0IGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBpcwotICAgIGVuYWJsZWQuICBXaXRoIHRoaXMgZW5hYmxlZCwgb24gaW5wdXQsIHRoZSBsaW5lcyBlbmRpbmdzICdcbicsICdccicsCi0gICAgb3IgJ1xyXG4nIGFyZSB0cmFuc2xhdGVkIHRvICdcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZQotICAgIGNhbGxlci4gQ29udmVyc2VseSwgb24gb3V0cHV0LCAnXG4nIGlzIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbQotICAgIGRlZmF1bHQgbGluZSBzZXBhcmF0b3IsIG9zLmxpbmVzZXAuIElmIG5ld2xpbmUgaXMgYW55IG90aGVyIG9mIGl0cwotICAgIGxlZ2FsIHZhbHVlcywgdGhhdCBuZXdsaW5lIGJlY29tZXMgdGhlIG5ld2xpbmUgd2hlbiB0aGUgZmlsZSBpcyByZWFkCi0gICAgYW5kIGl0IGlzIHJldHVybmVkIHVudHJhbnNsYXRlZC4gT24gb3V0cHV0LCAnXG4nIGlzIGNvbnZlcnRlZCB0byB0aGUKLSAgICBuZXdsaW5lLgotCi0gICAgSWYgbGluZV9idWZmZXJpbmcgaXMgVHJ1ZSwgYSBjYWxsIHRvIGZsdXNoIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG8KLSAgICB3cml0ZSBjb250YWlucyBhIG5ld2xpbmUgY2hhcmFjdGVyLgotICAgICIiIgotCi0gICAgX0NIVU5LX1NJWkUgPSAxMjgKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBidWZmZXIsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsCi0gICAgICAgICAgICAgICAgIGxpbmVfYnVmZmVyaW5nPUZhbHNlKToKLSAgICAgICAgaWYgbmV3bGluZSBub3QgaW4gKE5vbmUsICIiLCAiXG4iLCAiXHIiLCAiXHJcbiIpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaWxsZWdhbCBuZXdsaW5lIHZhbHVlOiAlciIgJSAobmV3bGluZSwpKQotICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gb3MuZGV2aWNlX2VuY29kaW5nKGJ1ZmZlci5maWxlbm8oKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFVuc3VwcG9ydGVkT3BlcmF0aW9uKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiBlbmNvZGluZyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgIyBJbXBvcnRpbmcgbG9jYWxlIG1heSBmYWlsIGlmIFB5dGhvbiBpcyBiZWluZyBidWlsdAotICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICJhc2NpaSIKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCi0KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZW5jb2RpbmcsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBlbmNvZGluZzogJXIiICUgZW5jb2RpbmcpCi0KLSAgICAgICAgaWYgZXJyb3JzIGlzIE5vbmU6Ci0gICAgICAgICAgICBlcnJvcnMgPSAic3RyaWN0IgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXJyb3JzLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGVycm9yczogJXIiICUgZXJyb3JzKQotCi0gICAgICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCi0gICAgICAgIHNlbGYuX2xpbmVfYnVmZmVyaW5nID0gbGluZV9idWZmZXJpbmcKLSAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZwotICAgICAgICBzZWxmLl9lcnJvcnMgPSBlcnJvcnMKLSAgICAgICAgc2VsZi5fcmVhZHVuaXZlcnNhbCA9IG5vdCBuZXdsaW5lCi0gICAgICAgIHNlbGYuX3JlYWR0cmFuc2xhdGUgPSBuZXdsaW5lIGlzIE5vbmUKLSAgICAgICAgc2VsZi5fcmVhZG5sID0gbmV3bGluZQotICAgICAgICBzZWxmLl93cml0ZXRyYW5zbGF0ZSA9IG5ld2xpbmUgIT0gJycKLSAgICAgICAgc2VsZi5fd3JpdGVubCA9IG5ld2xpbmUgb3Igb3MubGluZXNlcAotICAgICAgICBzZWxmLl9lbmNvZGVyID0gTm9uZQotICAgICAgICBzZWxmLl9kZWNvZGVyID0gTm9uZQotICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzID0gJycgICMgYnVmZmVyIGZvciB0ZXh0IHJldHVybmVkIGZyb20gZGVjb2RlcgotICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSAwICAjIG9mZnNldCBpbnRvIF9kZWNvZGVkX2NoYXJzIGZvciByZWFkKCkKLSAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lICAjIGluZm8gZm9yIHJlY29uc3RydWN0aW5nIGRlY29kZXIgc3RhdGUKLSAgICAgICAgc2VsZi5fc2Vla2FibGUgPSBzZWxmLl90ZWxsaW5nID0gc2VsZi5idWZmZXIuc2Vla2FibGUoKQotCi0gICAgICAgIGlmIHNlbGYuX3NlZWthYmxlIGFuZCBzZWxmLndyaXRhYmxlKCk6Ci0gICAgICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQotICAgICAgICAgICAgaWYgcG9zaXRpb24gIT0gMDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2dldF9lbmNvZGVyKCkuc2V0c3RhdGUoMCkKLSAgICAgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICMgU29tZXRpbWVzIHRoZSBlbmNvZGVyIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgIyBzZWxmLl9zbmFwc2hvdCBpcyBlaXRoZXIgTm9uZSwgb3IgYSB0dXBsZSAoZGVjX2ZsYWdzLCBuZXh0X2lucHV0KQotICAgICMgd2hlcmUgZGVjX2ZsYWdzIGlzIHRoZSBzZWNvbmQgKGludGVnZXIpIGl0ZW0gb2YgdGhlIGRlY29kZXIgc3RhdGUKLSAgICAjIGFuZCBuZXh0X2lucHV0IGlzIHRoZSBjaHVuayBvZiBpbnB1dCBieXRlcyB0aGF0IGNvbWVzIG5leHQgYWZ0ZXIgdGhlCi0gICAgIyBzbmFwc2hvdCBwb2ludC4gIFdlIHVzZSB0aGlzIHRvIHJlY29uc3RydWN0IGRlY29kZXIgc3RhdGVzIGluIHRlbGwoKS4KLQotICAgICMgTmFtaW5nIGNvbnZlbnRpb246Ci0gICAgIyAgIC0gImJ5dGVzXy4uLiIgZm9yIGludGVnZXIgdmFyaWFibGVzIHRoYXQgY291bnQgaW5wdXQgYnl0ZXMKLSAgICAjICAgLSAiY2hhcnNfLi4uIiBmb3IgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBjb3VudCBkZWNvZGVkIGNoYXJhY3RlcnMKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBlbmNvZGluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2VuY29kaW5nCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgZXJyb3JzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZXJyb3JzCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgbGluZV9idWZmZXJpbmcoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9saW5lX2J1ZmZlcmluZwotCi0gICAgZGVmIHNlZWthYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2Vla2FibGUKLQotICAgIGRlZiByZWFkYWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLnJlYWRhYmxlKCkKLQotICAgIGRlZiB3cml0YWJsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLndyaXRhYmxlKCkKLQotICAgIGRlZiBmbHVzaChzZWxmKToKLSAgICAgICAgc2VsZi5idWZmZXIuZmx1c2goKQotICAgICAgICBzZWxmLl90ZWxsaW5nID0gc2VsZi5fc2Vla2FibGUKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLmJ1ZmZlci5jbG9zZSgpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgY2xvc2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuY2xvc2VkCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLm5hbWUKLQotICAgIGRlZiBmaWxlbm8oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmJ1ZmZlci5maWxlbm8oKQotCi0gICAgZGVmIGlzYXR0eShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmlzYXR0eSgpCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgcyk6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigid3JpdGUgdG8gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCB1bmljb2RlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3Qgd3JpdGUgJXMgdG8gdGV4dCBzdHJlYW0iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICAgICAgbGVuZ3RoID0gbGVuKHMpCi0gICAgICAgIGhhc2xmID0gKHNlbGYuX3dyaXRldHJhbnNsYXRlIG9yIHNlbGYuX2xpbmVfYnVmZmVyaW5nKSBhbmQgIlxuIiBpbiBzCi0gICAgICAgIGlmIGhhc2xmIGFuZCBzZWxmLl93cml0ZXRyYW5zbGF0ZSBhbmQgc2VsZi5fd3JpdGVubCAhPSAiXG4iOgotICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiXG4iLCBzZWxmLl93cml0ZW5sKQotICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCi0gICAgICAgICMgWFhYIFdoYXQgaWYgd2Ugd2VyZSBqdXN0IHJlYWRpbmc/Ci0gICAgICAgIGIgPSBlbmNvZGVyLmVuY29kZShzKQotICAgICAgICBzZWxmLmJ1ZmZlci53cml0ZShiKQotICAgICAgICBpZiBzZWxmLl9saW5lX2J1ZmZlcmluZyBhbmQgKGhhc2xmIG9yICJcciIgaW4gcyk6Ci0gICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgc2VsZi5fc25hcHNob3QgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX2RlY29kZXI6Ci0gICAgICAgICAgICBzZWxmLl9kZWNvZGVyLnJlc2V0KCkKLSAgICAgICAgcmV0dXJuIGxlbmd0aAotCi0gICAgZGVmIF9nZXRfZW5jb2RlcihzZWxmKToKLSAgICAgICAgbWFrZV9lbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihzZWxmLl9lbmNvZGluZykKLSAgICAgICAgc2VsZi5fZW5jb2RlciA9IG1ha2VfZW5jb2RlcihzZWxmLl9lcnJvcnMpCi0gICAgICAgIHJldHVybiBzZWxmLl9lbmNvZGVyCi0KLSAgICBkZWYgX2dldF9kZWNvZGVyKHNlbGYpOgotICAgICAgICBtYWtlX2RlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKHNlbGYuX2VuY29kaW5nKQotICAgICAgICBkZWNvZGVyID0gbWFrZV9kZWNvZGVyKHNlbGYuX2Vycm9ycykKLSAgICAgICAgaWYgc2VsZi5fcmVhZHVuaXZlcnNhbDoKLSAgICAgICAgICAgIGRlY29kZXIgPSBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGRlY29kZXIsIHNlbGYuX3JlYWR0cmFuc2xhdGUpCi0gICAgICAgIHNlbGYuX2RlY29kZXIgPSBkZWNvZGVyCi0gICAgICAgIHJldHVybiBkZWNvZGVyCi0KLSAgICAjIFRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcyBpbXBsZW1lbnQgYW4gQURUIGZvciBfZGVjb2RlZF9jaGFycy4KLSAgICAjIFRleHQgcmV0dXJuZWQgZnJvbSB0aGUgZGVjb2RlciBpcyBidWZmZXJlZCBoZXJlIHVudGlsIHRoZSBjbGllbnQKLSAgICAjIHJlcXVlc3RzIGl0IGJ5IGNhbGxpbmcgb3VyIHJlYWQoKSBvciByZWFkbGluZSgpIG1ldGhvZC4KLSAgICBkZWYgX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIGNoYXJzKToKLSAgICAgICAgIiIiU2V0IHRoZSBfZGVjb2RlZF9jaGFycyBidWZmZXIuIiIiCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnMgPSBjaGFycwotICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSAwCi0KLSAgICBkZWYgX2dldF9kZWNvZGVkX2NoYXJzKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIkFkdmFuY2UgaW50byB0aGUgX2RlY29kZWRfY2hhcnMgYnVmZmVyLiIiIgotICAgICAgICBvZmZzZXQgPSBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgY2hhcnMgPSBzZWxmLl9kZWNvZGVkX2NoYXJzW29mZnNldDpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjaGFycyA9IHNlbGYuX2RlY29kZWRfY2hhcnNbb2Zmc2V0Om9mZnNldCArIG5dCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCArPSBsZW4oY2hhcnMpCi0gICAgICAgIHJldHVybiBjaGFycwotCi0gICAgZGVmIF9yZXdpbmRfZGVjb2RlZF9jaGFycyhzZWxmLCBuKToKLSAgICAgICAgIiIiUmV3aW5kIHRoZSBfZGVjb2RlZF9jaGFycyBidWZmZXIuIiIiCi0gICAgICAgIGlmIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA8IG46Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigicmV3aW5kIGRlY29kZWRfY2hhcnMgb3V0IG9mIGJvdW5kcyIpCi0gICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCAtPSBuCi0KLSAgICBkZWYgX3JlYWRfY2h1bmsoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBSZWFkIGFuZCBkZWNvZGUgdGhlIG5leHQgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBCdWZmZXJlZFJlYWRlci4KLQotICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIFRydWUgdW5sZXNzIEVPRiB3YXMgcmVhY2hlZC4gIFRoZSBkZWNvZGVkIHN0cmluZwotICAgICAgICBpcyBwbGFjZWQgaW4gc2VsZi5fZGVjb2RlZF9jaGFycyAocmVwbGFjaW5nIGl0cyBwcmV2aW91cyB2YWx1ZSkuCi0gICAgICAgIFRoZSBlbnRpcmUgaW5wdXQgY2h1bmsgaXMgc2VudCB0byB0aGUgZGVjb2RlciwgdGhvdWdoIHNvbWUgb2YgaXQKLSAgICAgICAgbWF5IHJlbWFpbiBidWZmZXJlZCBpbiB0aGUgZGVjb2RlciwgeWV0IHRvIGJlIGNvbnZlcnRlZC4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgaWYgc2VsZi5fZGVjb2RlciBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gZGVjb2RlciIpCi0KLSAgICAgICAgaWYgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgICMgVG8gcHJlcGFyZSBmb3IgdGVsbCgpLCB3ZSBuZWVkIHRvIHNuYXBzaG90IGEgcG9pbnQgaW4gdGhlCi0gICAgICAgICAgICAjIGZpbGUgd2hlcmUgdGhlIGRlY29kZXIncyBpbnB1dCBidWZmZXIgaXMgZW1wdHkuCi0KLSAgICAgICAgICAgIGRlY19idWZmZXIsIGRlY19mbGFncyA9IHNlbGYuX2RlY29kZXIuZ2V0c3RhdGUoKQotICAgICAgICAgICAgIyBHaXZlbiB0aGlzLCB3ZSBrbm93IHRoZXJlIHdhcyBhIHZhbGlkIHNuYXBzaG90IHBvaW50Ci0gICAgICAgICAgICAjIGxlbihkZWNfYnVmZmVyKSBieXRlcyBhZ28gd2l0aCBkZWNvZGVyIHN0YXRlIChiJycsIGRlY19mbGFncykuCi0KLSAgICAgICAgIyBSZWFkIGEgY2h1bmssIGRlY29kZSBpdCwgYW5kIHB1dCB0aGUgcmVzdWx0IGluIHNlbGYuX2RlY29kZWRfY2hhcnMuCi0gICAgICAgIGlucHV0X2NodW5rID0gc2VsZi5idWZmZXIucmVhZDEoc2VsZi5fQ0hVTktfU0laRSkKLSAgICAgICAgZW9mID0gbm90IGlucHV0X2NodW5rCi0gICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYuX2RlY29kZXIuZGVjb2RlKGlucHV0X2NodW5rLCBlb2YpKQotCi0gICAgICAgIGlmIHNlbGYuX3RlbGxpbmc6Ci0gICAgICAgICAgICAjIEF0IHRoZSBzbmFwc2hvdCBwb2ludCwgbGVuKGRlY19idWZmZXIpIGJ5dGVzIGJlZm9yZSB0aGUgcmVhZCwKLSAgICAgICAgICAgICMgdGhlIG5leHQgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBkZWNfYnVmZmVyICsgaW5wdXRfY2h1bmsuCi0gICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IChkZWNfZmxhZ3MsIGRlY19idWZmZXIgKyBpbnB1dF9jaHVuaykKLQotICAgICAgICByZXR1cm4gbm90IGVvZgotCi0gICAgZGVmIF9wYWNrX2Nvb2tpZShzZWxmLCBwb3NpdGlvbiwgZGVjX2ZsYWdzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190b19mZWVkPTAsIG5lZWRfZW9mPTAsIGNoYXJzX3RvX3NraXA9MCk6Ci0gICAgICAgICMgVGhlIG1lYW5pbmcgb2YgYSB0ZWxsKCkgY29va2llIGlzOiBzZWVrIHRvIHBvc2l0aW9uLCBzZXQgdGhlCi0gICAgICAgICMgZGVjb2RlciBmbGFncyB0byBkZWNfZmxhZ3MsIHJlYWQgYnl0ZXNfdG9fZmVlZCBieXRlcywgZmVlZCB0aGVtCi0gICAgICAgICMgaW50byB0aGUgZGVjb2RlciB3aXRoIG5lZWRfZW9mIGFzIHRoZSBFT0YgZmxhZywgdGhlbiBza2lwCi0gICAgICAgICMgY2hhcnNfdG9fc2tpcCBjaGFyYWN0ZXJzIG9mIHRoZSBkZWNvZGVkIHJlc3VsdC4gIEZvciBtb3N0IHNpbXBsZQotICAgICAgICAjIGRlY29kZXJzLCB0ZWxsKCkgd2lsbCBvZnRlbiBqdXN0IGdpdmUgYSBieXRlIG9mZnNldCBpbiB0aGUgZmlsZS4KLSAgICAgICAgcmV0dXJuIChwb3NpdGlvbiB8IChkZWNfZmxhZ3M8PDY0KSB8IChieXRlc190b19mZWVkPDwxMjgpIHwKLSAgICAgICAgICAgICAgIChjaGFyc190b19za2lwPDwxOTIpIHwgYm9vbChuZWVkX2VvZik8PDI1NikKLQotICAgIGRlZiBfdW5wYWNrX2Nvb2tpZShzZWxmLCBiaWdpbnQpOgotICAgICAgICByZXN0LCBwb3NpdGlvbiA9IGRpdm1vZChiaWdpbnQsIDE8PDY0KQotICAgICAgICByZXN0LCBkZWNfZmxhZ3MgPSBkaXZtb2QocmVzdCwgMTw8NjQpCi0gICAgICAgIHJlc3QsIGJ5dGVzX3RvX2ZlZWQgPSBkaXZtb2QocmVzdCwgMTw8NjQpCi0gICAgICAgIG5lZWRfZW9mLCBjaGFyc190b19za2lwID0gZGl2bW9kKHJlc3QsIDE8PDY0KQotICAgICAgICByZXR1cm4gcG9zaXRpb24sIGRlY19mbGFncywgYnl0ZXNfdG9fZmVlZCwgbmVlZF9lb2YsIGNoYXJzX3RvX3NraXAKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQotICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKLSAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKLSAgICAgICAgaWYgZGVjb2RlciBpcyBOb25lIG9yIHNlbGYuX3NuYXBzaG90IGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgotICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJwZW5kaW5nIGRlY29kZWQgdGV4dCIpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24KLQotICAgICAgICAjIFNraXAgYmFja3dhcmQgdG8gdGhlIHNuYXBzaG90IHBvaW50IChzZWUgX3JlYWRfY2h1bmspLgotICAgICAgICBkZWNfZmxhZ3MsIG5leHRfaW5wdXQgPSBzZWxmLl9zbmFwc2hvdAotICAgICAgICBwb3NpdGlvbiAtPSBsZW4obmV4dF9pbnB1dCkKLQotICAgICAgICAjIEhvdyBtYW55IGRlY29kZWQgY2hhcmFjdGVycyBoYXZlIGJlZW4gdXNlZCB1cCBzaW5jZSB0aGUgc25hcHNob3Q/Ci0gICAgICAgIGNoYXJzX3RvX3NraXAgPSBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQKLSAgICAgICAgaWYgY2hhcnNfdG9fc2tpcCA9PSAwOgotICAgICAgICAgICAgIyBXZSBoYXZlbid0IG1vdmVkIGZyb20gdGhlIHNuYXBzaG90IHBvaW50LgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhY2tfY29va2llKHBvc2l0aW9uLCBkZWNfZmxhZ3MpCi0KLSAgICAgICAgIyBTdGFydGluZyBmcm9tIHRoZSBzbmFwc2hvdCBwb3NpdGlvbiwgd2Ugd2lsbCB3YWxrIHRoZSBkZWNvZGVyCi0gICAgICAgICMgZm9yd2FyZCB1bnRpbCBpdCBnaXZlcyB1cyBlbm91Z2ggZGVjb2RlZCBjaGFyYWN0ZXJzLgotICAgICAgICBzYXZlZF9zdGF0ZSA9IGRlY29kZXIuZ2V0c3RhdGUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIE5vdGUgb3VyIGluaXRpYWwgc3RhcnQgcG9pbnQuCi0gICAgICAgICAgICBkZWNvZGVyLnNldHN0YXRlKChiJycsIGRlY19mbGFncykpCi0gICAgICAgICAgICBzdGFydF9wb3MgPSBwb3NpdGlvbgotICAgICAgICAgICAgc3RhcnRfZmxhZ3MsIGJ5dGVzX2ZlZCwgY2hhcnNfZGVjb2RlZCA9IGRlY19mbGFncywgMCwgMAotICAgICAgICAgICAgbmVlZF9lb2YgPSAwCi0KLSAgICAgICAgICAgICMgRmVlZCB0aGUgZGVjb2RlciBvbmUgYnl0ZSBhdCBhIHRpbWUuICBBcyB3ZSBnbywgbm90ZSB0aGUKLSAgICAgICAgICAgICMgbmVhcmVzdCAic2FmZSBzdGFydCBwb2ludCIgYmVmb3JlIHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gICAgICAgICAgICAjIChhIHBvaW50IHdoZXJlIHRoZSBkZWNvZGVyIGhhcyBub3RoaW5nIGJ1ZmZlcmVkLCBzbyBzZWVrKCkKLSAgICAgICAgICAgICMgY2FuIHNhZmVseSBzdGFydCBmcm9tIHRoZXJlIGFuZCBhZHZhbmNlIHRvIHRoaXMgbG9jYXRpb24pLgotICAgICAgICAgICAgZm9yIG5leHRfYnl0ZSBpbiBuZXh0X2lucHV0OgotICAgICAgICAgICAgICAgIGJ5dGVzX2ZlZCArPSAxCi0gICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUobmV4dF9ieXRlKSkKLSAgICAgICAgICAgICAgICBkZWNfYnVmZmVyLCBkZWNfZmxhZ3MgPSBkZWNvZGVyLmdldHN0YXRlKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGVjX2J1ZmZlciBhbmQgY2hhcnNfZGVjb2RlZCA8PSBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICAjIERlY29kZXIgYnVmZmVyIGlzIGVtcHR5LCBzbyB0aGlzIGlzIGEgc2FmZSBzdGFydCBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9zICs9IGJ5dGVzX2ZlZAotICAgICAgICAgICAgICAgICAgICBjaGFyc190b19za2lwIC09IGNoYXJzX2RlY29kZWQKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmxhZ3MsIGJ5dGVzX2ZlZCwgY2hhcnNfZGVjb2RlZCA9IGRlY19mbGFncywgMCwgMAotICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPj0gY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBXZSBkaWRuJ3QgZ2V0IGVub3VnaCBkZWNvZGVkIGRhdGE7IHNpZ25hbCBFT0YgdG8gZ2V0IG1vcmUuCi0gICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKLSAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKLSAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKLQotICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCi0gICAgICAgICAgICAgICAgc3RhcnRfcG9zLCBzdGFydF9mbGFncywgYnl0ZXNfZmVkLCBuZWVkX2VvZiwgY2hhcnNfdG9fc2tpcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlY29kZXIuc2V0c3RhdGUoc2F2ZWRfc3RhdGUpCi0KLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zPU5vbmUpOgotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgaWYgcG9zIGlzIE5vbmU6Ci0gICAgICAgICAgICBwb3MgPSBzZWxmLnRlbGwoKQotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIudHJ1bmNhdGUocG9zKQotCi0gICAgZGVmIHNlZWsoc2VsZiwgY29va2llLCB3aGVuY2U9MCk6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGVsbCBvbiBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSIpCi0gICAgICAgIGlmIHdoZW5jZSA9PSAxOiAjIHNlZWsgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbgotICAgICAgICAgICAgaWYgY29va2llICE9IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgZG8gbm9uemVybyBjdXItcmVsYXRpdmUgc2Vla3MiKQotICAgICAgICAgICAgIyBTZWVraW5nIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNob3VsZCBhdHRlbXB0IHRvCi0gICAgICAgICAgICAjIHN5bmMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgICAgICB3aGVuY2UgPSAwCi0gICAgICAgICAgICBjb29raWUgPSBzZWxmLnRlbGwoKQotICAgICAgICBpZiB3aGVuY2UgPT0gMjogIyBzZWVrIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlCi0gICAgICAgICAgICBpZiBjb29raWUgIT0gMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCBkbyBub256ZXJvIGVuZC1yZWxhdGl2ZSBzZWVrcyIpCi0gICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgICAgIHBvc2l0aW9uID0gc2VsZi5idWZmZXIuc2VlaygwLCAyKQotICAgICAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoJycpCi0gICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZXI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5yZXNldCgpCi0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24KLSAgICAgICAgaWYgd2hlbmNlICE9IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdoZW5jZSAoJXIsIHNob3VsZCBiZSAwLCAxIG9yIDIpIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuY2UsKSkKLSAgICAgICAgaWYgY29va2llIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHNlZWsgcG9zaXRpb24gJXIiICUgKGNvb2tpZSwpKQotICAgICAgICBzZWxmLmZsdXNoKCkKLQotICAgICAgICAjIFRoZSBzdHJhdGVneSBvZiBzZWVrKCkgaXMgdG8gZ28gYmFjayB0byB0aGUgc2FmZSBzdGFydCBwb2ludAotICAgICAgICAjIGFuZCByZXBsYXkgdGhlIGVmZmVjdCBvZiByZWFkKGNoYXJzX3RvX3NraXApIGZyb20gdGhlcmUuCi0gICAgICAgIHN0YXJ0X3BvcywgZGVjX2ZsYWdzLCBieXRlc190b19mZWVkLCBuZWVkX2VvZiwgY2hhcnNfdG9fc2tpcCA9IFwKLSAgICAgICAgICAgIHNlbGYuX3VucGFja19jb29raWUoY29va2llKQotCi0gICAgICAgICMgU2VlayBiYWNrIHRvIHRoZSBzYWZlIHN0YXJ0IHBvaW50LgotICAgICAgICBzZWxmLmJ1ZmZlci5zZWVrKHN0YXJ0X3BvcykKLSAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoJycpCi0gICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQotCi0gICAgICAgICMgUmVzdG9yZSB0aGUgZGVjb2RlciB0byBpdHMgc3RhdGUgZnJvbSB0aGUgc2FmZSBzdGFydCBwb2ludC4KLSAgICAgICAgaWYgc2VsZi5fZGVjb2RlciBvciBkZWNfZmxhZ3Mgb3IgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgIHNlbGYuX2RlY29kZXIgPSBzZWxmLl9kZWNvZGVyIG9yIHNlbGYuX2dldF9kZWNvZGVyKCkKLSAgICAgICAgICAgIHNlbGYuX2RlY29kZXIuc2V0c3RhdGUoKGInJywgZGVjX2ZsYWdzKSkKLSAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gKGRlY19mbGFncywgYicnKQotCi0gICAgICAgIGlmIGNoYXJzX3RvX3NraXA6Ci0gICAgICAgICAgICAjIEp1c3QgbGlrZSBfcmVhZF9jaHVuaywgZmVlZCB0aGUgZGVjb2RlciBhbmQgc2F2ZSBhIHNuYXBzaG90LgotICAgICAgICAgICAgaW5wdXRfY2h1bmsgPSBzZWxmLmJ1ZmZlci5yZWFkKGJ5dGVzX3RvX2ZlZWQpCi0gICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygKLSAgICAgICAgICAgICAgICBzZWxmLl9kZWNvZGVyLmRlY29kZShpbnB1dF9jaHVuaywgbmVlZF9lb2YpKQotICAgICAgICAgICAgc2VsZi5fc25hcHNob3QgPSAoZGVjX2ZsYWdzLCBpbnB1dF9jaHVuaykKLQotICAgICAgICAgICAgIyBTa2lwIGNoYXJzX3RvX3NraXAgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycy4KLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9kZWNvZGVkX2NoYXJzKSA8IGNoYXJzX3RvX3NraXA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQotICAgICAgICAgICAgc2VsZi5fZGVjb2RlZF9jaGFyc191c2VkID0gY2hhcnNfdG9fc2tpcAotCi0gICAgICAgICMgRmluYWxseSwgcmVzZXQgdGhlIGVuY29kZXIgKG1lcmVseSB1c2VmdWwgZm9yIHByb3BlciBCT00gaGFuZGxpbmcpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kZXIgPSBzZWxmLl9lbmNvZGVyIG9yIHNlbGYuX2dldF9lbmNvZGVyKCkKLSAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOgotICAgICAgICAgICAgIyBTb21ldGltZXMgdGhlIGVuY29kZXIgZG9lc24ndCBleGlzdAotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgY29va2llICE9IDA6Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci5zZXRzdGF0ZSgwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKLSAgICAgICAgcmV0dXJuIGNvb2tpZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGRlY29kZXIgPSBzZWxmLl9kZWNvZGVyIG9yIHNlbGYuX2dldF9kZWNvZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbi5fX2luZGV4X18KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikKLSAgICAgICAgaWYgbiA8IDA6Ci0gICAgICAgICAgICAjIFJlYWQgZXZlcnl0aGluZy4KLSAgICAgICAgICAgIHJlc3VsdCA9IChzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpICsKLSAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLmRlY29kZShzZWxmLmJ1ZmZlci5yZWFkKCksIGZpbmFsPVRydWUpKQotICAgICAgICAgICAgc2VsZi5fc2V0X2RlY29kZWRfY2hhcnMoJycpCi0gICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyB0byByZXR1cm4uCi0gICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKLSAgICAgICAgICAgICAgICBlb2YgPSBub3Qgc2VsZi5fcmVhZF9jaHVuaygpCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKG4gLSBsZW4ocmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBzZWxmLl90ZWxsaW5nID0gRmFsc2UKLSAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5fdGVsbGluZyA9IHNlbGYuX3NlZWthYmxlCi0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9Tm9uZSk6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGltaXQsIChpbnQsIGxvbmcpKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKLQotICAgICAgICAjIEdyYWIgYWxsIHRoZSBkZWNvZGVkIHRleHQgKHdlIHdpbGwgcmV3aW5kIGFueSBleHRyYSBiaXRzIGxhdGVyKS4KLSAgICAgICAgbGluZSA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkKLQotICAgICAgICBzdGFydCA9IDAKLSAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQotCi0gICAgICAgIHBvcyA9IGVuZHBvcyA9IE5vbmUKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX3JlYWR0cmFuc2xhdGU6Ci0gICAgICAgICAgICAgICAgIyBOZXdsaW5lcyBhcmUgYWxyZWFkeSB0cmFuc2xhdGVkLCBvbmx5IHNlYXJjaCBmb3IgXG4KLSAgICAgICAgICAgICAgICBwb3MgPSBsaW5lLmZpbmQoJ1xuJywgc3RhcnQpCi0gICAgICAgICAgICAgICAgaWYgcG9zID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IHBvcyArIDEKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxlbihsaW5lKQotCi0gICAgICAgICAgICBlbGlmIHNlbGYuX3JlYWR1bml2ZXJzYWw6Ci0gICAgICAgICAgICAgICAgIyBVbml2ZXJzYWwgbmV3bGluZSBzZWFyY2guIEZpbmQgYW55IG9mIFxyLCBcclxuLCBcbgotICAgICAgICAgICAgICAgICMgVGhlIGRlY29kZXIgZW5zdXJlcyB0aGF0IFxyXG4gYXJlIG5vdCBzcGxpdCBpbiB0d28gcGllY2VzCi0KLSAgICAgICAgICAgICAgICAjIEluIEMgd2UnZCBsb29rIGZvciB0aGVzZSBpbiBwYXJhbGxlbCBvZiBjb3Vyc2UuCi0gICAgICAgICAgICAgICAgbmxwb3MgPSBsaW5lLmZpbmQoIlxuIiwgc3RhcnQpCi0gICAgICAgICAgICAgICAgY3Jwb3MgPSBsaW5lLmZpbmQoIlxyIiwgc3RhcnQpCi0gICAgICAgICAgICAgICAgaWYgY3Jwb3MgPT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5scG9zID09IC0xOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBOb3RoaW5nIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGxlbihsaW5lKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBGb3VuZCBcbgotICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gbmxwb3MgKyAxCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsaWYgbmxwb3MgPT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgICMgRm91bmQgbG9uZSBccgotICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjcnBvcyArIDEKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbGlmIG5scG9zIDwgY3Jwb3M6Ci0gICAgICAgICAgICAgICAgICAgICMgRm91bmQgXG4KLSAgICAgICAgICAgICAgICAgICAgZW5kcG9zID0gbmxwb3MgKyAxCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxpZiBubHBvcyA9PSBjcnBvcyArIDE6Ci0gICAgICAgICAgICAgICAgICAgICMgRm91bmQgXHJcbgotICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjcnBvcyArIDIKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIFxyCi0gICAgICAgICAgICAgICAgICAgIGVuZHBvcyA9IGNycG9zICsgMQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIG5vbi11bml2ZXJzYWwKLSAgICAgICAgICAgICAgICBwb3MgPSBsaW5lLmZpbmQoc2VsZi5fcmVhZG5sKQotICAgICAgICAgICAgICAgIGlmIHBvcyA+PSAwOgotICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQotICAgICAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKLSAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICAjIE5vIGxpbmUgZW5kaW5nIHNlZW4geWV0IC0gZ2V0IG1vcmUgZGF0YQotICAgICAgICAgICAgbW9yZV9saW5lID0gJycKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3JlYWRfY2h1bmsoKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvZGVkX2NoYXJzOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgc2VsZi5fZGVjb2RlZF9jaGFyczoKLSAgICAgICAgICAgICAgICBsaW5lICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBlbmQgb2YgZmlsZQotICAgICAgICAgICAgICAgIHNlbGYuX3NldF9kZWNvZGVkX2NoYXJzKCcnKQotICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQotICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCi0KLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKLQotICAgICAgICAjIFJld2luZCBfZGVjb2RlZF9jaGFycyB0byBqdXN0IGFmdGVyIHRoZSBsaW5lIGVuZGluZyB3ZSBmb3VuZC4KLSAgICAgICAgc2VsZi5fcmV3aW5kX2RlY29kZWRfY2hhcnMobGVuKGxpbmUpIC0gZW5kcG9zKQotICAgICAgICByZXR1cm4gbGluZVs6ZW5kcG9zXQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5ld2xpbmVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZGVjb2Rlci5uZXdsaW5lcyBpZiBzZWxmLl9kZWNvZGVyIGVsc2UgTm9uZQotCi1jbGFzcyBTdHJpbmdJTyhUZXh0SU9XcmFwcGVyKToKLQotICAgICIiIkFuIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQuIFRoZSBpbml0aWFsX3ZhbHVlIGFyZ3VtZW50IHNldHMgdGhlCi0gICAgdmFsdWUgb2Ygb2JqZWN0LiBUaGUgb3RoZXIgYXJndW1lbnRzIGFyZSBsaWtlIHRob3NlIG9mIFRleHRJT1dyYXBwZXIncwotICAgIGNvbnN0cnVjdG9yLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluaXRpYWxfdmFsdWU9IiIsIGVuY29kaW5nPSJ1dGYtOCIsCi0gICAgICAgICAgICAgICAgIGVycm9ycz0ic3RyaWN0IiwgbmV3bGluZT0iXG4iKToKLSAgICAgICAgc3VwZXIoU3RyaW5nSU8sIHNlbGYpLl9faW5pdF9fKEJ5dGVzSU8oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPWVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9bmV3bGluZSkKLSAgICAgICAgIyBJc3N1ZSAjNTY0NTogbWFrZSB1bml2ZXJzYWwgbmV3bGluZXMgc2VtYW50aWNzIHRoZSBzYW1lIGFzIGluIHRoZQotICAgICAgICAjIEMgdmVyc2lvbiwgZXZlbiB1bmRlciBXaW5kb3dzLgotICAgICAgICBpZiBuZXdsaW5lIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl93cml0ZXRyYW5zbGF0ZSA9IEZhbHNlCi0gICAgICAgIGlmIGluaXRpYWxfdmFsdWU6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpbml0aWFsX3ZhbHVlLCB1bmljb2RlKToKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gdW5pY29kZShpbml0aWFsX3ZhbHVlKQotICAgICAgICAgICAgc2VsZi53cml0ZShpbml0aWFsX3ZhbHVlKQotICAgICAgICAgICAgc2VsZi5zZWVrKDApCi0KLSAgICBkZWYgZ2V0dmFsdWUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gc2VsZi5idWZmZXIuZ2V0dmFsdWUoKS5kZWNvZGUoc2VsZi5fZW5jb2RpbmcsIHNlbGYuX2Vycm9ycykKK2ZvciBrbGFzcyBpbiAoU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIpOgorICAgIFRleHRJT0Jhc2UucmVnaXN0ZXIoa2xhc3MpCitkZWwga2xhc3MKZGlmZiAtLWdpdCBhL0xpYi9qc29uL19faW5pdF9fLnB5IGIvTGliL2pzb24vX19pbml0X18ucHkKaW5kZXggNTYxMTZmNC4uNDE0YzcwMiAxMDA2NDQKLS0tIGEvTGliL2pzb24vX19pbml0X18ucHkKKysrIGIvTGliL2pzb24vX19pbml0X18ucHkKQEAgLTEsMTEgKzEsMTMgQEAKLXIiIiJBIHNpbXBsZSwgZmFzdCwgZXh0ZW5zaWJsZSBKU09OIGVuY29kZXIgYW5kIGRlY29kZXIKLQotSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mCityIiIiSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mCiBKYXZhU2NyaXB0IHN5bnRheCAoRUNNQS0yNjIgM3JkIGVkaXRpb24pIHVzZWQgYXMgYSBsaWdodHdlaWdodCBkYXRhCiBpbnRlcmNoYW5nZSBmb3JtYXQuCiAKLWpzb24gZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcyBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeQotbWFyc2hhbCBhbmQgcGlja2xlIG1vZHVsZXMuCis6bW9kOmBqc29uYCBleHBvc2VzIGFuIEFQSSBmYW1pbGlhciB0byB1c2VycyBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeQorOm1vZDpgbWFyc2hhbGAgYW5kIDptb2Q6YHBpY2tsZWAgbW9kdWxlcy4gSXQgaXMgdGhlIGV4dGVybmFsbHkgbWFpbnRhaW5lZAordmVyc2lvbiBvZiB0aGUgOm1vZDpganNvbmAgbGlicmFyeSBjb250YWluZWQgaW4gUHl0aG9uIDIuNiwgYnV0IG1haW50YWlucworY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjQgYW5kIFB5dGhvbiAyLjUgYW5kIChjdXJyZW50bHkpIGhhcworc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYWR2YW50YWdlcywgZXZlbiB3aXRob3V0IHVzaW5nIHRoZSBvcHRpb25hbCBDCitleHRlbnNpb24gZm9yIHNwZWVkdXBzLgogCiBFbmNvZGluZyBiYXNpYyBQeXRob24gb2JqZWN0IGhpZXJhcmNoaWVzOjoKIApAQCAtMzIsMjMgKzM0LDI4IEBACiAgICAgPj4+IGpzb24uZHVtcHMoWzEsMiwzLHsnNCc6IDUsICc2JzogN31dLCBzZXBhcmF0b3JzPSgnLCcsJzonKSkKICAgICAnWzEsMiwzLHsiNCI6NSwiNiI6N31dJwogCi1QcmV0dHkgcHJpbnRpbmcgKHVzaW5nIHJlcHIoKSBiZWNhdXNlIG9mIGV4dHJhbmVvdXMgd2hpdGVzcGFjZSBpbiB0aGUgb3V0cHV0KTo6CitQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50IHJlcHIoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQotICAgICd7XG4gICAgIjQiOiA1LCBcbiAgICAiNiI6IDdcbn0nCisgICAgPj4+IHMgPSBqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKKyAgICA+Pj4gcHJpbnQgJ1xuJy5qb2luKFtsLnJzdHJpcCgpIGZvciBsIGluICBzLnNwbGl0bGluZXMoKV0pCisgICAgeworICAgICAgICAiNCI6IDUsCisgICAgICAgICI2IjogNworICAgIH0KIAogRGVjb2RpbmcgSlNPTjo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4ganNvbi5sb2FkcygnWyJmb28iLCB7ImJhciI6WyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nKQotICAgIFt1J2ZvbycsIHt1J2Jhcic6IFt1J2JheicsIE5vbmUsIDEuMCwgMl19XQotICAgID4+PiBqc29uLmxvYWRzKCciXFwiZm9vXFxiYXIiJykKLSAgICB1JyJmb29ceDA4YXInCisgICAgPj4+IG9iaiA9IFt1J2ZvbycsIHt1J2Jhcic6IFt1J2JheicsIE5vbmUsIDEuMCwgMl19XQorICAgID4+PiBqc29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19XScpID09IG9iagorICAgIFRydWUKKyAgICA+Pj4ganNvbi5sb2FkcygnIlxcImZvb1xcYmFyIicpID09IHUnImZvb1x4MDhhcicKKyAgICBUcnVlCiAgICAgPj4+IGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAgICAgPj4+IGlvID0gU3RyaW5nSU8oJ1sic3RyZWFtaW5nIEFQSSJdJykKLSAgICA+Pj4ganNvbi5sb2FkKGlvKQotICAgIFt1J3N0cmVhbWluZyBBUEknXQorICAgID4+PiBqc29uLmxvYWQoaW8pWzBdID09ICdzdHJlYW1pbmcgQVBJJworICAgIFRydWUKIAogU3BlY2lhbGl6aW5nIEpTT04gb2JqZWN0IGRlY29kaW5nOjoKIApAQCAtNjEsNDMgKzY4LDM2IEBACiAgICAgPj4+IGpzb24ubG9hZHMoJ3siX19jb21wbGV4X18iOiB0cnVlLCAicmVhbCI6IDEsICJpbWFnIjogMn0nLAogICAgIC4uLiAgICAgb2JqZWN0X2hvb2s9YXNfY29tcGxleCkKICAgICAoMSsyaikKLSAgICA+Pj4gaW1wb3J0IGRlY2ltYWwKLSAgICA+Pj4ganNvbi5sb2FkcygnMS4xJywgcGFyc2VfZmxvYXQ9ZGVjaW1hbC5EZWNpbWFsKQotICAgIERlY2ltYWwoJzEuMScpCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorICAgID4+PiBqc29uLmxvYWRzKCcxLjEnLCBwYXJzZV9mbG9hdD1EZWNpbWFsKSA9PSBEZWNpbWFsKCcxLjEnKQorICAgIFRydWUKIAotRXh0ZW5kaW5nIEpTT05FbmNvZGVyOjoKK1NwZWNpYWxpemluZyBKU09OIG9iamVjdCBlbmNvZGluZzo6CiAKICAgICA+Pj4gaW1wb3J0IGpzb24KLSAgICA+Pj4gY2xhc3MgQ29tcGxleEVuY29kZXIoanNvbi5KU09ORW5jb2Rlcik6Ci0gICAgLi4uICAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgotICAgIC4uLiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjb21wbGV4KToKLSAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIFtvYmoucmVhbCwgb2JqLmltYWddCi0gICAgLi4uICAgICAgICAgcmV0dXJuIGpzb24uSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvYmopCisgICAgPj4+IGRlZiBlbmNvZGVfY29tcGxleChvYmopOgorICAgIC4uLiAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNvbXBsZXgpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBbb2JqLnJlYWwsIG9iai5pbWFnXQorICAgIC4uLiAgICAgcmFpc2UgVHlwZUVycm9yKHJlcHIobykgKyAiIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIpCiAgICAgLi4uCi0gICAgPj4+IGR1bXBzKDIgKyAxaiwgY2xzPUNvbXBsZXhFbmNvZGVyKQorICAgID4+PiBqc29uLmR1bXBzKDIgKyAxaiwgZGVmYXVsdD1lbmNvZGVfY29tcGxleCkKICAgICAnWzIuMCwgMS4wXScKLSAgICA+Pj4gQ29tcGxleEVuY29kZXIoKS5lbmNvZGUoMiArIDFqKQorICAgID4+PiBqc29uLkpTT05FbmNvZGVyKGRlZmF1bHQ9ZW5jb2RlX2NvbXBsZXgpLmVuY29kZSgyICsgMWopCiAgICAgJ1syLjAsIDEuMF0nCi0gICAgPj4+IGxpc3QoQ29tcGxleEVuY29kZXIoKS5pdGVyZW5jb2RlKDIgKyAxaikpCi0gICAgWydbJywgJzIuMCcsICcsICcsICcxLjAnLCAnXSddCisgICAgPj4+ICcnLmpvaW4oanNvbi5KU09ORW5jb2RlcihkZWZhdWx0PWVuY29kZV9jb21wbGV4KS5pdGVyZW5jb2RlKDIgKyAxaikpCisgICAgJ1syLjAsIDEuMF0nCiAKIAotVXNpbmcganNvbi50b29sIGZyb20gdGhlIHNoZWxsIHRvIHZhbGlkYXRlIGFuZAotcHJldHR5LXByaW50OjoKK1VzaW5nIGpzb24udG9vbCBmcm9tIHRoZSBzaGVsbCB0byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50OjoKIAotICAgICQgZWNobyAneyJqc29uIjoib2JqIn0nIHwgcHl0aG9uIC1tanNvbi50b29sCisgICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgewogICAgICAgICAianNvbiI6ICJvYmoiCiAgICAgfQotICAgICQgZWNobyAneyAxLjI6My40fScgfCBweXRob24gLW1qc29uLnRvb2wKKyAgICAkIGVjaG8gJ3sgMS4yOjMuNH0nIHwgcHl0aG9uIC1tIGpzb24udG9vbAogICAgIEV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lOiBsaW5lIDEgY29sdW1uIDIgKGNoYXIgMikKLQotTm90ZSB0aGF0IHRoZSBKU09OIHByb2R1Y2VkIGJ5IHRoaXMgbW9kdWxlJ3MgZGVmYXVsdCBzZXR0aW5ncwotaXMgYSBzdWJzZXQgb2YgWUFNTCwgc28gaXQgbWF5IGJlIHVzZWQgYXMgYSBzZXJpYWxpemVyIGZvciB0aGF0IGFzIHdlbGwuCi0KICIiIgotCi1fX3ZlcnNpb25fXyA9ICcxLjknCitfX3ZlcnNpb25fXyA9ICcyLjAuOScKIF9fYWxsX18gPSBbCiAgICAgJ2R1bXAnLCAnZHVtcHMnLCAnbG9hZCcsICdsb2FkcycsCiAgICAgJ0pTT05EZWNvZGVyJywgJ0pTT05FbmNvZGVyJywKQEAgLTEyNSwyOCArMTI1LDI5IEBACiAgICAgIiIiU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09OIGZvcm1hdHRlZCBzdHJlYW0gdG8gYGBmcGBgIChhCiAgICAgYGAud3JpdGUoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCkuCiAKLSAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcworICAgIElmIGBgc2tpcGtleXNgYCBpcyB0cnVlIHRoZW4gYGBkaWN0YGAga2V5cyB0aGF0IGFyZSBub3QgYmFzaWMgdHlwZXMKICAgICAoYGBzdHJgYCwgYGB1bmljb2RlYGAsIGBgaW50YGAsIGBgbG9uZ2BgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBgYE5vbmVgYCkKICAgICB3aWxsIGJlIHNraXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KIAotICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBzb21lIGNodW5rcyB3cml0dGVuIHRvIGBgZnBgYAorICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgZmFsc2UsIHRoZW4gdGhlIHNvbWUgY2h1bmtzIHdyaXR0ZW4gdG8gYGBmcGBgCiAgICAgbWF5IGJlIGBgdW5pY29kZWBgIGluc3RhbmNlcywgc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3RyYGAgdG8KICAgICBgYHVuaWNvZGVgYCBjb2VyY2lvbiBydWxlcy4gVW5sZXNzIGBgZnAud3JpdGUoKWBgIGV4cGxpY2l0bHkKICAgICB1bmRlcnN0YW5kcyBgYHVuaWNvZGVgYCAoYXMgaW4gYGBjb2RlY3MuZ2V0d3JpdGVyKClgYCkgdGhpcyBpcyBsaWtlbHkKICAgICB0byBjYXVzZSBhbiBlcnJvci4KIAotICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjaworICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBmYWxzZSwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCiAgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKICAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KIAotICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgZmFsc2UsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCiAgICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkKICAgICBpbiBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQogICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCiAKLSAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0Ci0gICAgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBsZXZlbAotICAgIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKKyAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAorICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAorICAgIHJlcHJlc2VudGF0aW9uLgogCiAgICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCiAgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCkBAIC0xNTksMTIgKzE2MCwxMiBAQAogCiAgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCiAgICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCi0gICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgdGhlIGBgY2xzYGAga3dhcmc7IG90aGVyd2lzZSBgYEpTT05FbmNvZGVyYGAgaXMgdXNlZC4KIAogICAgICIiIgogICAgICMgY2FjaGVkIGVuY29kZXIKLSAgICBpZiAoc2tpcGtleXMgaXMgRmFsc2UgYW5kIGVuc3VyZV9hc2NpaSBpcyBUcnVlIGFuZAotICAgICAgICBjaGVja19jaXJjdWxhciBpcyBUcnVlIGFuZCBhbGxvd19uYW4gaXMgVHJ1ZSBhbmQKKyAgICBpZiAobm90IHNraXBrZXlzIGFuZCBlbnN1cmVfYXNjaWkgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGFuZCBhbGxvd19uYW4gYW5kCiAgICAgICAgIGNscyBpcyBOb25lIGFuZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAogICAgICAgICBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBkZWZhdWx0IGlzIE5vbmUgYW5kIG5vdCBrdyk6CiAgICAgICAgIGl0ZXJhYmxlID0gX2RlZmF1bHRfZW5jb2Rlci5pdGVyZW5jb2RlKG9iaikKQEAgLTE4NiwxOSArMTg3LDE5IEBACiAgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsIGRlZmF1bHQ9Tm9uZSwgKiprdyk6CiAgICAgIiIiU2VyaWFsaXplIGBgb2JqYGAgdG8gYSBKU09OIGZvcm1hdHRlZCBgYHN0cmBgLgogCi0gICAgSWYgYGBza2lwa2V5c2BgIGlzIGBgVHJ1ZWBgIHRoZW4gYGBkaWN0YGAga2V5cyB0aGF0IGFyZSBub3QgYmFzaWMgdHlwZXMKKyAgICBJZiBgYHNraXBrZXlzYGAgaXMgZmFsc2UgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwogICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKQogICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgogCi0gICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKKyAgICBJZiBgYGVuc3VyZV9hc2NpaWBgIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhCiAgICAgYGB1bmljb2RlYGAgaW5zdGFuY2Ugc3ViamVjdCB0byBub3JtYWwgUHl0aG9uIGBgc3RyYGAgdG8gYGB1bmljb2RlYGAKICAgICBjb2VyY2lvbiBydWxlcyBpbnN0ZWFkIG9mIGJlaW5nIGVzY2FwZWQgdG8gYW4gQVNDSUkgYGBzdHJgYC4KIAotICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjaGVjaworICAgIElmIGBgY2hlY2tfY2lyY3VsYXJgYCBpcyBmYWxzZSwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCiAgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKICAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KIAotICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgZmFsc2UsIHRoZW4gaXQgd2lsbCBiZSBhIGBgVmFsdWVFcnJvcmBgIHRvCiAgICAgc2VyaWFsaXplIG91dCBvZiByYW5nZSBgYGZsb2F0YGAgdmFsdWVzIChgYG5hbmBgLCBgYGluZmBgLCBgYC1pbmZgYCkgaW4KICAgICBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZQogICAgIEphdmFTY3JpcHQgZXF1aXZhbGVudHMgKGBgTmFOYGAsIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkuCkBAIC0yMTksMTIgKzIyMCwxMiBAQAogCiAgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCiAgICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCi0gICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgdGhlIGBgY2xzYGAga3dhcmc7IG90aGVyd2lzZSBgYEpTT05FbmNvZGVyYGAgaXMgdXNlZC4KIAogICAgICIiIgogICAgICMgY2FjaGVkIGVuY29kZXIKLSAgICBpZiAoc2tpcGtleXMgaXMgRmFsc2UgYW5kIGVuc3VyZV9hc2NpaSBpcyBUcnVlIGFuZAotICAgICAgICBjaGVja19jaXJjdWxhciBpcyBUcnVlIGFuZCBhbGxvd19uYW4gaXMgVHJ1ZSBhbmQKKyAgICBpZiAobm90IHNraXBrZXlzIGFuZCBlbnN1cmVfYXNjaWkgYW5kCisgICAgICAgIGNoZWNrX2NpcmN1bGFyIGFuZCBhbGxvd19uYW4gYW5kCiAgICAgICAgIGNscyBpcyBOb25lIGFuZCBpbmRlbnQgaXMgTm9uZSBhbmQgc2VwYXJhdG9ycyBpcyBOb25lIGFuZAogICAgICAgICBlbmNvZGluZyA9PSAndXRmLTgnIGFuZCBkZWZhdWx0IGlzIE5vbmUgYW5kIG5vdCBrdyk6CiAgICAgICAgIHJldHVybiBfZGVmYXVsdF9lbmNvZGVyLmVuY29kZShvYmopCkBAIC0yMzcsMTMgKzIzOCwxNCBAQAogICAgICAgICAqKmt3KS5lbmNvZGUob2JqKQogCiAKLV9kZWZhdWx0X2RlY29kZXIgPSBKU09ORGVjb2RlcihlbmNvZGluZz1Ob25lLCBvYmplY3RfaG9vaz1Ob25lKQorX2RlZmF1bHRfZGVjb2RlciA9IEpTT05EZWNvZGVyKGVuY29kaW5nPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSkKIAogCiBkZWYgbG9hZChmcCwgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsCi0gICAgICAgIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCAqKmt3KToKLSAgICAiIiJEZXNlcmlhbGl6ZSBgYGZwYGAgKGEgYGAucmVhZCgpYGAtc3VwcG9ydGluZyBmaWxlLWxpa2Ugb2JqZWN0Ci0gICAgY29udGFpbmluZyBhIEpTT04gZG9jdW1lbnQpIHRvIGEgUHl0aG9uIG9iamVjdC4KKyAgICAgICAgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsICoqa3cpOgorICAgICIiIkRlc2VyaWFsaXplIGBgZnBgYCAoYSBgYC5yZWFkKClgYC1zdXBwb3J0aW5nIGZpbGUtbGlrZSBvYmplY3QgY29udGFpbmluZworICAgIGEgSlNPTiBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgogCiAgICAgSWYgdGhlIGNvbnRlbnRzIG9mIGBgZnBgYCBpcyBlbmNvZGVkIHdpdGggYW4gQVNDSUkgYmFzZWQgZW5jb2Rpbmcgb3RoZXIKICAgICB0aGFuIHV0Zi04IChlLmcuIGxhdGluLTEpLCB0aGVuIGFuIGFwcHJvcHJpYXRlIGBgZW5jb2RpbmdgYCBuYW1lIG11c3QKQEAgLTI1NywxOCArMjU5LDI3IEBACiAgICAgYGBvYmplY3RfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gVGhpcyBmZWF0dXJlCiAgICAgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyAoZS5nLiBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KIAorICAgIGBgb2JqZWN0X3BhaXJzX2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlCisgICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGVkIHdpdGggYW4gb3JkZXJlZCBsaXN0IG9mIHBhaXJzLiAgVGhlCisgICAgcmV0dXJuIHZhbHVlIG9mIGBgb2JqZWN0X3BhaXJzX2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYGBkaWN0YGAuCisgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgdGhhdCByZWx5IG9uIHRoZQorICAgIG9yZGVyIHRoYXQgdGhlIGtleSBhbmQgdmFsdWUgcGFpcnMgYXJlIGRlY29kZWQgKGZvciBleGFtcGxlLAorICAgIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IHdpbGwgcmVtZW1iZXIgdGhlIG9yZGVyIG9mIGluc2VydGlvbikuIElmCisgICAgYGBvYmplY3RfaG9va2BgIGlzIGFsc28gZGVmaW5lZCwgdGhlIGBgb2JqZWN0X3BhaXJzX2hvb2tgYCB0YWtlcyBwcmlvcml0eS4KKwogICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05EZWNvZGVyYGAgc3ViY2xhc3MsIHNwZWNpZnkgaXQgd2l0aCB0aGUgYGBjbHNgYAotICAgIGt3YXJnLgorICAgIGt3YXJnOyBvdGhlcndpc2UgYGBKU09ORGVjb2RlcmBgIGlzIHVzZWQuCiAKICAgICAiIiIKICAgICByZXR1cm4gbG9hZHMoZnAucmVhZCgpLAogICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgY2xzPWNscywgb2JqZWN0X2hvb2s9b2JqZWN0X2hvb2ssCiAgICAgICAgIHBhcnNlX2Zsb2F0PXBhcnNlX2Zsb2F0LCBwYXJzZV9pbnQ9cGFyc2VfaW50LAotICAgICAgICBwYXJzZV9jb25zdGFudD1wYXJzZV9jb25zdGFudCwgKiprdykKKyAgICAgICAgcGFyc2VfY29uc3RhbnQ9cGFyc2VfY29uc3RhbnQsIG9iamVjdF9wYWlyc19ob29rPW9iamVjdF9wYWlyc19ob29rLAorICAgICAgICAqKmt3KQogCiAKIGRlZiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwKLSAgICAgICAgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsICoqa3cpOgorICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSwgKiprdyk6CiAgICAgIiIiRGVzZXJpYWxpemUgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYCBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTgogICAgIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCiAKQEAgLTI4Miw2ICsyOTMsMTQgQEAKICAgICBgYG9iamVjdF9ob29rYGAgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBgZGljdGBgLiBUaGlzIGZlYXR1cmUKICAgICBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgogCisgICAgYGBvYmplY3RfcGFpcnNfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZWQgd2l0aCBhbiBvcmRlcmVkIGxpc3Qgb2YgcGFpcnMuICBUaGUKKyAgICByZXR1cm4gdmFsdWUgb2YgYGBvYmplY3RfcGFpcnNfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4KKyAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBkZWNvZGVycyB0aGF0IHJlbHkgb24gdGhlCisgICAgb3JkZXIgdGhhdCB0aGUga2V5IGFuZCB2YWx1ZSBwYWlycyBhcmUgZGVjb2RlZCAoZm9yIGV4YW1wbGUsCisgICAgY29sbGVjdGlvbnMuT3JkZXJlZERpY3Qgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YgaW5zZXJ0aW9uKS4gSWYKKyAgICBgYG9iamVjdF9ob29rYGAgaXMgYWxzbyBkZWZpbmVkLCB0aGUgYGBvYmplY3RfcGFpcnNfaG9va2BgIHRha2VzIHByaW9yaXR5LgorCiAgICAgYGBwYXJzZV9mbG9hdGBgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHN0cmluZwogICAgIG9mIGV2ZXJ5IEpTT04gZmxvYXQgdG8gYmUgZGVjb2RlZC4gQnkgZGVmYXVsdCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KICAgICBmbG9hdChudW1fc3RyKS4gVGhpcyBjYW4gYmUgdXNlZCB0byB1c2UgYW5vdGhlciBkYXRhdHlwZSBvciBwYXJzZXIKQEAgLTI5OCwxNyArMzE3LDE5IEBACiAgICAgYXJlIGVuY291bnRlcmVkLgogCiAgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCi0gICAga3dhcmcuCisgICAga3dhcmc7IG90aGVyd2lzZSBgYEpTT05EZWNvZGVyYGAgaXMgdXNlZC4KIAogICAgICIiIgogICAgIGlmIChjbHMgaXMgTm9uZSBhbmQgZW5jb2RpbmcgaXMgTm9uZSBhbmQgb2JqZWN0X2hvb2sgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2ludCBpcyBOb25lIGFuZCBwYXJzZV9mbG9hdCBpcyBOb25lIGFuZAotICAgICAgICAgICAgcGFyc2VfY29uc3RhbnQgaXMgTm9uZSBhbmQgbm90IGt3KToKKyAgICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9iamVjdF9wYWlyc19ob29rIGlzIE5vbmUgYW5kIG5vdCBrdyk6CiAgICAgICAgIHJldHVybiBfZGVmYXVsdF9kZWNvZGVyLmRlY29kZShzKQogICAgIGlmIGNscyBpcyBOb25lOgogICAgICAgICBjbHMgPSBKU09ORGVjb2RlcgogICAgIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOgogICAgICAgICBrd1snb2JqZWN0X2hvb2snXSA9IG9iamVjdF9ob29rCisgICAgaWYgb2JqZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGt3WydvYmplY3RfcGFpcnNfaG9vayddID0gb2JqZWN0X3BhaXJzX2hvb2sKICAgICBpZiBwYXJzZV9mbG9hdCBpcyBub3QgTm9uZToKICAgICAgICAga3dbJ3BhcnNlX2Zsb2F0J10gPSBwYXJzZV9mbG9hdAogICAgIGlmIHBhcnNlX2ludCBpcyBub3QgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2RlY29kZXIucHkgYi9MaWIvanNvbi9kZWNvZGVyLnB5CmluZGV4IGU4MGI5MzUuLmI5NzQ1ZjcgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2RlY29kZXIucHkKKysrIGIvTGliL2pzb24vZGVjb2Rlci5weQpAQCAtMSwxMCArMSwxMCBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKICIiIgotCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKIAotZnJvbSBqc29uLnNjYW5uZXIgaW1wb3J0IFNjYW5uZXIsIHBhdHRlcm4KK2Zyb20ganNvbi5zY2FubmVyIGltcG9ydCBtYWtlX3NjYW5uZXIKIHRyeToKICAgICBmcm9tIF9qc29uIGltcG9ydCBzY2Fuc3RyaW5nIGFzIGNfc2NhbnN0cmluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTQsNyArMTQsMTQgQEAKIAogRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMCiAKLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBmbG9hdCgnbmFuJyksIGZsb2F0KCdpbmYnKSwgZmxvYXQoJy1pbmYnKQorZGVmIF9mbG9hdGNvbnN0YW50cygpOgorICAgIF9CWVRFUyA9ICc3RkY4MDAwMDAwMDAwMDAwN0ZGMDAwMDAwMDAwMDAwMCcuZGVjb2RlKCdoZXgnKQorICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6CisgICAgICAgIF9CWVRFUyA9IF9CWVRFU1s6OF1bOjotMV0gKyBfQllURVNbODpdWzo6LTFdCisgICAgbmFuLCBpbmYgPSBzdHJ1Y3QudW5wYWNrKCdkZCcsIF9CWVRFUykKKyAgICByZXR1cm4gbmFuLCBpbmYsIC1pbmYKKworTmFOLCBQb3NJbmYsIE5lZ0luZiA9IF9mbG9hdGNvbnN0YW50cygpCiAKIAogZGVmIGxpbmVjb2woZG9jLCBwb3MpOgpAQCAtMjcsNDkgKzM0LDI2IEBACiAKIAogZGVmIGVycm1zZyhtc2csIGRvYywgcG9zLCBlbmQ9Tm9uZSk6CisgICAgIyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBfanNvbgogICAgIGxpbmVubywgY29sbm8gPSBsaW5lY29sKGRvYywgcG9zKQogICAgIGlmIGVuZCBpcyBOb25lOgogICAgICAgICBmbXQgPSAnezB9OiBsaW5lIHsxfSBjb2x1bW4gezJ9IChjaGFyIHszfSknCiAgICAgICAgIHJldHVybiBmbXQuZm9ybWF0KG1zZywgbGluZW5vLCBjb2xubywgcG9zKQorICAgICAgICAjZm10ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCknCisgICAgICAgICNyZXR1cm4gZm10ICUgKG1zZywgbGluZW5vLCBjb2xubywgcG9zKQogICAgIGVuZGxpbmVubywgZW5kY29sbm8gPSBsaW5lY29sKGRvYywgZW5kKQogICAgIGZtdCA9ICd7MH06IGxpbmUgezF9IGNvbHVtbiB7Mn0gLSBsaW5lIHszfSBjb2x1bW4gezR9IChjaGFyIHs1fSAtIHs2fSknCiAgICAgcmV0dXJuIGZtdC5mb3JtYXQobXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKKyAgICAjZm10ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQpJworICAgICNyZXR1cm4gZm10ICUgKG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCiAKIAogX0NPTlNUQU5UUyA9IHsKICAgICAnLUluZmluaXR5JzogTmVnSW5mLAogICAgICdJbmZpbml0eSc6IFBvc0luZiwKICAgICAnTmFOJzogTmFOLAotICAgICd0cnVlJzogVHJ1ZSwKLSAgICAnZmFsc2UnOiBGYWxzZSwKLSAgICAnbnVsbCc6IE5vbmUsCiB9CiAKLQotZGVmIEpTT05Db25zdGFudChtYXRjaCwgY29udGV4dCwgYz1fQ09OU1RBTlRTKToKLSAgICBzID0gbWF0Y2guZ3JvdXAoMCkKLSAgICBmbiA9IGdldGF0dHIoY29udGV4dCwgJ3BhcnNlX2NvbnN0YW50JywgTm9uZSkKLSAgICBpZiBmbiBpcyBOb25lOgotICAgICAgICBydmFsID0gY1tzXQotICAgIGVsc2U6Ci0gICAgICAgIHJ2YWwgPSBmbihzKQotICAgIHJldHVybiBydmFsLCBOb25lCi1wYXR0ZXJuKCcoLT9JbmZpbml0eXxOYU58dHJ1ZXxmYWxzZXxudWxsKScpKEpTT05Db25zdGFudCkKLQotCi1kZWYgSlNPTk51bWJlcihtYXRjaCwgY29udGV4dCk6Ci0gICAgbWF0Y2ggPSBKU09OTnVtYmVyLnJlZ2V4Lm1hdGNoKG1hdGNoLnN0cmluZywgKm1hdGNoLnNwYW4oKSkKLSAgICBpbnRlZ2VyLCBmcmFjLCBleHAgPSBtYXRjaC5ncm91cHMoKQotICAgIGlmIGZyYWMgb3IgZXhwOgotICAgICAgICBmbiA9IGdldGF0dHIoY29udGV4dCwgJ3BhcnNlX2Zsb2F0JywgTm9uZSkgb3IgZmxvYXQKLSAgICAgICAgcmVzID0gZm4oaW50ZWdlciArIChmcmFjIG9yICcnKSArIChleHAgb3IgJycpKQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gZ2V0YXR0cihjb250ZXh0LCAncGFyc2VfaW50JywgTm9uZSkgb3IgaW50Ci0gICAgICAgIHJlcyA9IGZuKGludGVnZXIpCi0gICAgcmV0dXJuIHJlcywgTm9uZQotcGF0dGVybihyJygtPyg/OjB8WzEtOV1cZCopKShcLlxkKyk/KFtlRV1bLStdP1xkKyk/JykoSlNPTk51bWJlcikKLQotCiBTVFJJTkdDSFVOSyA9IHJlLmNvbXBpbGUocicoLio/KShbIlxcXHgwMC1ceDFmXSknLCBGTEFHUykKIEJBQ0tTTEFTSCA9IHsKICAgICAnIic6IHUnIicsICdcXCc6IHUnXFwnLCAnLyc6IHUnLycsCkBAIC03OCw4ICs2MiwxNiBAQAogCiBERUZBVUxUX0VOQ09ESU5HID0gInV0Zi04IgogCitkZWYgcHlfc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nPU5vbmUsIHN0cmljdD1UcnVlLAorICAgICAgICBfYj1CQUNLU0xBU0gsIF9tPVNUUklOR0NIVU5LLm1hdGNoKToKKyAgICAiIiJTY2FuIHRoZSBzdHJpbmcgcyBmb3IgYSBKU09OIHN0cmluZy4gRW5kIGlzIHRoZSBpbmRleCBvZiB0aGUKKyAgICBjaGFyYWN0ZXIgaW4gcyBhZnRlciB0aGUgcXVvdGUgdGhhdCBzdGFydGVkIHRoZSBKU09OIHN0cmluZy4KKyAgICBVbmVzY2FwZXMgYWxsIHZhbGlkIEpTT04gc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZXMgYW5kIHJhaXNlcyBWYWx1ZUVycm9yCisgICAgb24gYXR0ZW1wdCB0byBkZWNvZGUgYW4gaW52YWxpZCBzdHJpbmcuIElmIHN0cmljdCBpcyBGYWxzZSB0aGVuIGxpdGVyYWwKKyAgICBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIHN0cmluZy4KIAotZGVmIHB5X3NjYW5zdHJpbmcocywgZW5kLCBlbmNvZGluZz1Ob25lLCBzdHJpY3Q9VHJ1ZSwgX2I9QkFDS1NMQVNILCBfbT1TVFJJTkdDSFVOSy5tYXRjaCk6CisgICAgUmV0dXJucyBhIHR1cGxlIG9mIHRoZSBkZWNvZGVkIHN0cmluZyBhbmQgdGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gcworICAgIGFmdGVyIHRoZSBlbmQgcXVvdGUuIiIiCiAgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKICAgICAgICAgZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HCiAgICAgY2h1bmtzID0gW10KQEAgLTkyLDE0ICs4NCwxOCBAQAogICAgICAgICAgICAgICAgIGVycm1zZygiVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCIsIHMsIGJlZ2luKSkKICAgICAgICAgZW5kID0gY2h1bmsuZW5kKCkKICAgICAgICAgY29udGVudCwgdGVybWluYXRvciA9IGNodW5rLmdyb3VwcygpCisgICAgICAgICMgQ29udGVudCBpcyBjb250YWlucyB6ZXJvIG9yIG1vcmUgdW5lc2NhcGVkIHN0cmluZyBjaGFyYWN0ZXJzCiAgICAgICAgIGlmIGNvbnRlbnQ6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjb250ZW50LCB1bmljb2RlKToKICAgICAgICAgICAgICAgICBjb250ZW50ID0gdW5pY29kZShjb250ZW50LCBlbmNvZGluZykKICAgICAgICAgICAgIF9hcHBlbmQoY29udGVudCkKKyAgICAgICAgIyBUZXJtaW5hdG9yIGlzIHRoZSBlbmQgb2Ygc3RyaW5nLCBhIGxpdGVyYWwgY29udHJvbCBjaGFyYWN0ZXIsCisgICAgICAgICMgb3IgYSBiYWNrc2xhc2ggZGVub3RpbmcgdGhhdCBhbiBlc2NhcGUgc2VxdWVuY2UgZm9sbG93cwogICAgICAgICBpZiB0ZXJtaW5hdG9yID09ICciJzoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsaWYgdGVybWluYXRvciAhPSAnXFwnOgogICAgICAgICAgICAgaWYgc3RyaWN0OgorICAgICAgICAgICAgICAgICNtc2cgPSAiSW52YWxpZCBjb250cm9sIGNoYXJhY3RlciAlciBhdCIgJSAodGVybWluYXRvciwpCiAgICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgY29udHJvbCBjaGFyYWN0ZXIgezAhcn0gYXQiLmZvcm1hdCh0ZXJtaW5hdG9yKQogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgZW5kKSkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMTAsMTM2ICsxMDYsMTY0IEBACiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgICMgSWYgbm90IGEgdW5pY29kZSBlc2NhcGUgc2VxdWVuY2UsIG11c3QgYmUgaW4gdGhlIGxvb2t1cCB0YWJsZQogICAgICAgICBpZiBlc2MgIT0gJ3UnOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0gPSBfYltlc2NdCisgICAgICAgICAgICAgICAgY2hhciA9IF9iW2VzY10KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXGVzY2FwZTogezAhcn0iLmZvcm1hdChlc2MpCisgICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFxlc2NhcGU6ICIgKyByZXByKGVzYykKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZyhtc2csIHMsIGVuZCkpCiAgICAgICAgICAgICBlbmQgKz0gMQogICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZQogICAgICAgICAgICAgZXNjID0gc1tlbmQgKyAxOmVuZCArIDVdCiAgICAgICAgICAgICBuZXh0X2VuZCA9IGVuZCArIDUKLSAgICAgICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGxlbihlc2MpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgICB1bmkgPSBpbnQoZXNjLCAxNikKLSAgICAgICAgICAgICAgICBpZiAweGQ4MDAgPD0gdW5pIDw9IDB4ZGJmZiBhbmQgc3lzLm1heHVuaWNvZGUgPiA2NTUzNToKLSAgICAgICAgICAgICAgICAgICAgbXNnID0gIkludmFsaWQgXFx1WFhYWFxcdVhYWFggc3Vycm9nYXRlIHBhaXIiCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzW2VuZCArIDU6ZW5kICsgN10gPT0gJ1xcdSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICAgICAgICAgIGVzYzIgPSBzW2VuZCArIDc6ZW5kICsgMTFdCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihlc2MyKSAhPSA0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgICAgICAgICB1bmkyID0gaW50KGVzYzIsIDE2KQotICAgICAgICAgICAgICAgICAgICB1bmkgPSAweDEwMDAwICsgKCgodW5pIC0gMHhkODAwKSA8PCAxMCkgfCAodW5pMiAtIDB4ZGMwMCkpCi0gICAgICAgICAgICAgICAgICAgIG5leHRfZW5kICs9IDYKLSAgICAgICAgICAgICAgICBtID0gdW5pY2hyKHVuaSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgaWYgbGVuKGVzYykgIT0gNDoKKyAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZyhtc2csIHMsIGVuZCkpCisgICAgICAgICAgICB1bmkgPSBpbnQoZXNjLCAxNikKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHN1cnJvZ2F0ZSBwYWlyIG9uIFVDUy00IHN5c3RlbXMKKyAgICAgICAgICAgIGlmIDB4ZDgwMCA8PSB1bmkgPD0gMHhkYmZmIGFuZCBzeXMubWF4dW5pY29kZSA+IDY1NTM1OgorICAgICAgICAgICAgICAgIG1zZyA9ICJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIgorICAgICAgICAgICAgICAgIGlmIG5vdCBzW2VuZCArIDU6ZW5kICsgN10gPT0gJ1xcdSc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgZW5kKSkKKyAgICAgICAgICAgICAgICBlc2MyID0gc1tlbmQgKyA3OmVuZCArIDExXQorICAgICAgICAgICAgICAgIGlmIGxlbihlc2MyKSAhPSA0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZyhtc2csIHMsIGVuZCkpCisgICAgICAgICAgICAgICAgdW5pMiA9IGludChlc2MyLCAxNikKKyAgICAgICAgICAgICAgICB1bmkgPSAweDEwMDAwICsgKCgodW5pIC0gMHhkODAwKSA8PCAxMCkgfCAodW5pMiAtIDB4ZGMwMCkpCisgICAgICAgICAgICAgICAgbmV4dF9lbmQgKz0gNgorICAgICAgICAgICAgY2hhciA9IHVuaWNocih1bmkpCiAgICAgICAgICAgICBlbmQgPSBuZXh0X2VuZAotICAgICAgICBfYXBwZW5kKG0pCisgICAgICAgICMgQXBwZW5kIHRoZSB1bmVzY2FwZWQgY2hhcmFjdGVyCisgICAgICAgIF9hcHBlbmQoY2hhcikKICAgICByZXR1cm4gdScnLmpvaW4oY2h1bmtzKSwgZW5kCiAKIAotIyBVc2Ugc3BlZWR1cAotaWYgY19zY2Fuc3RyaW5nIGlzIG5vdCBOb25lOgotICAgIHNjYW5zdHJpbmcgPSBjX3NjYW5zdHJpbmcKLWVsc2U6Ci0gICAgc2NhbnN0cmluZyA9IHB5X3NjYW5zdHJpbmcKKyMgVXNlIHNwZWVkdXAgaWYgYXZhaWxhYmxlCitzY2Fuc3RyaW5nID0gY19zY2Fuc3RyaW5nIG9yIHB5X3NjYW5zdHJpbmcKIAotZGVmIEpTT05TdHJpbmcobWF0Y2gsIGNvbnRleHQpOgotICAgIGVuY29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQotICAgIHN0cmljdCA9IGdldGF0dHIoY29udGV4dCwgJ3N0cmljdCcsIFRydWUpCi0gICAgcmV0dXJuIHNjYW5zdHJpbmcobWF0Y2guc3RyaW5nLCBtYXRjaC5lbmQoKSwgZW5jb2RpbmcsIHN0cmljdCkKLXBhdHRlcm4ociciJykoSlNPTlN0cmluZykKK1dISVRFU1BBQ0UgPSByZS5jb21waWxlKHInWyBcdFxuXHJdKicsIEZMQUdTKQorV0hJVEVTUEFDRV9TVFIgPSAnIFx0XG5ccicKIAotCi1XSElURVNQQUNFID0gcmUuY29tcGlsZShyJ1xzKicsIEZMQUdTKQotCi0KLWRlZiBKU09OT2JqZWN0KG1hdGNoLCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToKLSAgICBwYWlycyA9IHt9Ci0gICAgcyA9IG1hdGNoLnN0cmluZwotICAgIGVuZCA9IF93KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQorZGVmIEpTT05PYmplY3Qoc19hbmRfZW5kLCBlbmNvZGluZywgc3RyaWN0LCBzY2FuX29uY2UsIG9iamVjdF9ob29rLAorICAgICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2ssIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NUUik6CisgICAgcywgZW5kID0gc19hbmRfZW5kCisgICAgcGFpcnMgPSBbXQorICAgIHBhaXJzX2FwcGVuZCA9IHBhaXJzLmFwcGVuZAorICAgICMgVXNlIGEgc2xpY2UgdG8gcHJldmVudCBJbmRleEVycm9yIGZyb20gYmVpbmcgcmFpc2VkLCB0aGUgZm9sbG93aW5nCisgICAgIyBjaGVjayB3aWxsIHJhaXNlIGEgbW9yZSBzcGVjaWZpYyBWYWx1ZUVycm9yIGlmIHRoZSBzdHJpbmcgaXMgZW1wdHkKICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCi0gICAgIyBUcml2aWFsIGVtcHR5IG9iamVjdAotICAgIGlmIG5leHRjaGFyID09ICd9JzoKLSAgICAgICAgcmV0dXJuIHBhaXJzLCBlbmQgKyAxCisgICAgIyBOb3JtYWxseSB3ZSBleHBlY3QgbmV4dGNoYXIgPT0gJyInCiAgICAgaWYgbmV4dGNoYXIgIT0gJyInOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQpKQorICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgICMgVHJpdmlhbCBlbXB0eSBvYmplY3QKKyAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICAgICAgcmV0dXJuIHBhaXJzLCBlbmQgKyAxCisgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJyInOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcywgZW5kKSkKICAgICBlbmQgKz0gMQotICAgIGVuY29kaW5nID0gZ2V0YXR0cihjb250ZXh0LCAnZW5jb2RpbmcnLCBOb25lKQotICAgIHN0cmljdCA9IGdldGF0dHIoY29udGV4dCwgJ3N0cmljdCcsIFRydWUpCi0gICAgaXRlcnNjYW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIGtleSwgZW5kID0gc2NhbnN0cmluZyhzLCBlbmQsIGVuY29kaW5nLCBzdHJpY3QpCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKworICAgICAgICAjIFRvIHNraXAgc29tZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIHdlIG9wdGltaXplIHRoZSBmYXN0IHBhdGhzIHdoZXJlCisgICAgICAgICMgdGhlIEpTT04ga2V5IHNlcGFyYXRvciBpcyAiOiAiIG9yIGp1c3QgIjoiLgogICAgICAgICBpZiBzW2VuZDplbmQgKyAxXSAhPSAnOic6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIDogZGVsaW1pdGVyIiwgcywgZW5kKSkKLSAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgICAgIGlmIHNbZW5kOmVuZCArIDFdICE9ICc6JzoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIDogZGVsaW1pdGVyIiwgcywgZW5kKSkKKworICAgICAgICBlbmQgKz0gMQorCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQoKQorICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKKyAgICAgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKLSAgICAgICAgcGFpcnNba2V5XSA9IHZhbHVlCi0gICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKLSAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBwYWlyc19hcHBlbmQoKGtleSwgdmFsdWUpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCisgICAgICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIG5leHRjaGFyID0gJycKICAgICAgICAgZW5kICs9IDEKKwogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnfSc6CiAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBuZXh0Y2hhciAhPSAnLCc6CisgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHMsIGVuZCAtIDEpKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCi0gICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0Y2hhciA9IHNbZW5kXQorICAgICAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgorICAgICAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KKyAgICAgICAgICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCisgICAgICAgICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbmV4dGNoYXIgPSAnJworCiAgICAgICAgIGVuZCArPSAxCiAgICAgICAgIGlmIG5leHRjaGFyICE9ICciJzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCAtIDEpKQotICAgIG9iamVjdF9ob29rID0gZ2V0YXR0cihjb250ZXh0LCAnb2JqZWN0X2hvb2snLCBOb25lKQorCisgICAgaWYgb2JqZWN0X3BhaXJzX2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIHJlc3VsdCA9IG9iamVjdF9wYWlyc19ob29rKHBhaXJzKQorICAgICAgICByZXR1cm4gcmVzdWx0LCBlbmQKKyAgICBwYWlycyA9IGRpY3QocGFpcnMpCiAgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CiAgICAgICAgIHBhaXJzID0gb2JqZWN0X2hvb2socGFpcnMpCiAgICAgcmV0dXJuIHBhaXJzLCBlbmQKLXBhdHRlcm4ocid7JykoSlNPTk9iamVjdCkKIAotCi1kZWYgSlNPTkFycmF5KG1hdGNoLCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToKK2RlZiBKU09OQXJyYXkoc19hbmRfZW5kLCBzY2FuX29uY2UsIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NUUik6CisgICAgcywgZW5kID0gc19hbmRfZW5kCiAgICAgdmFsdWVzID0gW10KLSAgICBzID0gbWF0Y2guc3RyaW5nCi0gICAgZW5kID0gX3cocywgbWF0Y2guZW5kKCkpLmVuZCgpCi0gICAgIyBMb29rLWFoZWFkIGZvciB0cml2aWFsIGVtcHR5IGFycmF5CiAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgIGlmIG5leHRjaGFyIGluIF93czoKKyAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICMgTG9vay1haGVhZCBmb3IgdHJpdmlhbCBlbXB0eSBhcnJheQogICAgIGlmIG5leHRjaGFyID09ICddJzoKICAgICAgICAgcmV0dXJuIHZhbHVlcywgZW5kICsgMQotICAgIGl0ZXJzY2FuID0gSlNPTlNjYW5uZXIuaXRlcnNjYW4KKyAgICBfYXBwZW5kID0gdmFsdWVzLmFwcGVuZAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQoKQorICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQotICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIF9hcHBlbmQodmFsdWUpCiAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAgICAgaWYgbmV4dGNoYXIgaW4gX3dzOgorICAgICAgICAgICAgZW5kID0gX3cocywgZW5kICsgMSkuZW5kKCkKKyAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KICAgICAgICAgZW5kICs9IDEKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbmV4dGNoYXIgIT0gJywnOgorICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcsJzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBzLCBlbmQpKQotICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKKyAgICAgICAgICAgICAgICBlbmQgKz0gMQorICAgICAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworCiAgICAgcmV0dXJuIHZhbHVlcywgZW5kCi1wYXR0ZXJuKHInXFsnKShKU09OQXJyYXkpCi0KLQotQU5ZVEhJTkcgPSBbCi0gICAgSlNPTk9iamVjdCwKLSAgICBKU09OQXJyYXksCi0gICAgSlNPTlN0cmluZywKLSAgICBKU09OQ29uc3RhbnQsCi0gICAgSlNPTk51bWJlciwKLV0KLQotSlNPTlNjYW5uZXIgPSBTY2FubmVyKEFOWVRISU5HKQotCiAKIGNsYXNzIEpTT05EZWNvZGVyKG9iamVjdCk6CiAgICAgIiIiU2ltcGxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZGVjb2RlcgpAQCAtMjY4LDEzICsyOTIsMTIgQEAKIAogICAgIEl0IGFsc28gdW5kZXJzdGFuZHMgYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQgYGAtSW5maW5pdHlgYCBhcwogICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYGBmbG9hdGBgIHZhbHVlcywgd2hpY2ggaXMgb3V0c2lkZSB0aGUgSlNPTiBzcGVjLgorCiAgICAgIiIiCiAKLSAgICBfc2Nhbm5lciA9IFNjYW5uZXIoQU5ZVEhJTkcpCi0gICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAnZGVjb2RlJywgJ3Jhd19kZWNvZGUnXQotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kaW5nPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsCi0gICAgICAgICAgICBwYXJzZV9pbnQ9Tm9uZSwgcGFyc2VfY29uc3RhbnQ9Tm9uZSwgc3RyaWN0PVRydWUpOgorICAgICAgICAgICAgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIHN0cmljdD1UcnVlLAorICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2s9Tm9uZSk6CiAgICAgICAgICIiImBgZW5jb2RpbmdgYCBkZXRlcm1pbmVzIHRoZSBlbmNvZGluZyB1c2VkIHRvIGludGVycHJldCBhbnkgYGBzdHJgYAogICAgICAgICBvYmplY3RzIGRlY29kZWQgYnkgdGhpcyBpbnN0YW5jZSAodXRmLTggYnkgZGVmYXVsdCkuICBJdCBoYXMgbm8KICAgICAgICAgZWZmZWN0IHdoZW4gZGVjb2RpbmcgYGB1bmljb2RlYGAgb2JqZWN0cy4KQEAgLTI4MiwxMSArMzA1LDIwIEBACiAgICAgICAgIE5vdGUgdGhhdCBjdXJyZW50bHkgb25seSBlbmNvZGluZ3MgdGhhdCBhcmUgYSBzdXBlcnNldCBvZiBBU0NJSSB3b3JrLAogICAgICAgICBzdHJpbmdzIG9mIG90aGVyIGVuY29kaW5ncyBzaG91bGQgYmUgcGFzc2VkIGluIGFzIGBgdW5pY29kZWBgLgogCi0gICAgICAgIGBgb2JqZWN0X2hvb2tgYCwgaWYgc3BlY2lmaWVkLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YKLSAgICAgICAgZXZlcnkgSlNPTiBvYmplY3QgZGVjb2RlZCBhbmQgaXRzIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQgaW4KKyAgICAgICAgYGBvYmplY3RfaG9va2BgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdAorICAgICAgICBvZiBldmVyeSBKU09OIG9iamVjdCBkZWNvZGVkIGFuZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBpbgogICAgICAgICBwbGFjZSBvZiB0aGUgZ2l2ZW4gYGBkaWN0YGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCiAgICAgICAgIGRlc2VyaWFsaXphdGlvbnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KIAorICAgICAgICBgYG9iamVjdF9wYWlyc19ob29rYGAsIGlmIHNwZWNpZmllZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSByZXN1bHQgb2YKKyAgICAgICAgZXZlcnkgSlNPTiBvYmplY3QgZGVjb2RlZCB3aXRoIGFuIG9yZGVyZWQgbGlzdCBvZiBwYWlycy4gIFRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgb2YgYGBvYmplY3RfcGFpcnNfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4KKyAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgdGhhdCByZWx5IG9uIHRoZQorICAgICAgICBvcmRlciB0aGF0IHRoZSBrZXkgYW5kIHZhbHVlIHBhaXJzIGFyZSBkZWNvZGVkIChmb3IgZXhhbXBsZSwKKyAgICAgICAgY29sbGVjdGlvbnMuT3JkZXJlZERpY3Qgd2lsbCByZW1lbWJlciB0aGUgb3JkZXIgb2YgaW5zZXJ0aW9uKS4gSWYKKyAgICAgICAgYGBvYmplY3RfaG9va2BgIGlzIGFsc28gZGVmaW5lZCwgdGhlIGBgb2JqZWN0X3BhaXJzX2hvb2tgYCB0YWtlcworICAgICAgICBwcmlvcml0eS4KKwogICAgICAgICBgYHBhcnNlX2Zsb2F0YGAsIGlmIHNwZWNpZmllZCwgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc3RyaW5nCiAgICAgICAgIG9mIGV2ZXJ5IEpTT04gZmxvYXQgdG8gYmUgZGVjb2RlZC4gQnkgZGVmYXVsdCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KICAgICAgICAgZmxvYXQobnVtX3N0cikuIFRoaXMgY2FuIGJlIHVzZWQgdG8gdXNlIGFub3RoZXIgZGF0YXR5cGUgb3IgcGFyc2VyCkBAIC0yOTgsMjEgKzMzMCwzMCBAQAogICAgICAgICBmb3IgSlNPTiBpbnRlZ2VycyAoZS5nLiBmbG9hdCkuCiAKICAgICAgICAgYGBwYXJzZV9jb25zdGFudGBgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIG9mIHRoZQotICAgICAgICBmb2xsb3dpbmcgc3RyaW5nczogLUluZmluaXR5LCBJbmZpbml0eSwgTmFOLCBudWxsLCB0cnVlLCBmYWxzZS4KKyAgICAgICAgZm9sbG93aW5nIHN0cmluZ3M6IC1JbmZpbml0eSwgSW5maW5pdHksIE5hTi4KICAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byByYWlzZSBhbiBleGNlcHRpb24gaWYgaW52YWxpZCBKU09OIG51bWJlcnMKICAgICAgICAgYXJlIGVuY291bnRlcmVkLgogCisgICAgICAgIElmIGBgc3RyaWN0YGAgaXMgZmFsc2UgKHRydWUgaXMgdGhlIGRlZmF1bHQpLCB0aGVuIGNvbnRyb2wKKyAgICAgICAgY2hhcmFjdGVycyB3aWxsIGJlIGFsbG93ZWQgaW5zaWRlIHN0cmluZ3MuICBDb250cm9sIGNoYXJhY3RlcnMgaW4KKyAgICAgICAgdGhpcyBjb250ZXh0IGFyZSB0aG9zZSB3aXRoIGNoYXJhY3RlciBjb2RlcyBpbiB0aGUgMC0zMSByYW5nZSwKKyAgICAgICAgaW5jbHVkaW5nIGBgJ1xcdCdgYCAodGFiKSwgYGAnXFxuJ2BgLCBgYCdcXHInYGAgYW5kIGBgJ1xcMCdgYC4KKwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCiAgICAgICAgIHNlbGYub2JqZWN0X2hvb2sgPSBvYmplY3RfaG9vawotICAgICAgICBzZWxmLnBhcnNlX2Zsb2F0ID0gcGFyc2VfZmxvYXQKLSAgICAgICAgc2VsZi5wYXJzZV9pbnQgPSBwYXJzZV9pbnQKLSAgICAgICAgc2VsZi5wYXJzZV9jb25zdGFudCA9IHBhcnNlX2NvbnN0YW50CisgICAgICAgIHNlbGYub2JqZWN0X3BhaXJzX2hvb2sgPSBvYmplY3RfcGFpcnNfaG9vaworICAgICAgICBzZWxmLnBhcnNlX2Zsb2F0ID0gcGFyc2VfZmxvYXQgb3IgZmxvYXQKKyAgICAgICAgc2VsZi5wYXJzZV9pbnQgPSBwYXJzZV9pbnQgb3IgaW50CisgICAgICAgIHNlbGYucGFyc2VfY29uc3RhbnQgPSBwYXJzZV9jb25zdGFudCBvciBfQ09OU1RBTlRTLl9fZ2V0aXRlbV9fCiAgICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CisgICAgICAgIHNlbGYucGFyc2Vfb2JqZWN0ID0gSlNPTk9iamVjdAorICAgICAgICBzZWxmLnBhcnNlX2FycmF5ID0gSlNPTkFycmF5CisgICAgICAgIHNlbGYucGFyc2Vfc3RyaW5nID0gc2NhbnN0cmluZworICAgICAgICBzZWxmLnNjYW5fb25jZSA9IG1ha2Vfc2Nhbm5lcihzZWxmKQogCiAgICAgZGVmIGRlY29kZShzZWxmLCBzLCBfdz1XSElURVNQQUNFLm1hdGNoKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiB0aGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYAogICAgICAgICBpbnN0YW5jZSBjb250YWluaW5nIGEgSlNPTiBkb2N1bWVudCkKIAogICAgICAgICAiIiIKQEAgLTMyMiwxOCArMzYzLDE3IEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXh0cmEgZGF0YSIsIHMsIGVuZCwgbGVuKHMpKSkKICAgICAgICAgcmV0dXJuIG9iagogCi0gICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgKiprdyk6Ci0gICAgICAgICIiIkRlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJvbSBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgIGJlZ2lubmluZwotICAgICAgICB3aXRoIGEgSlNPTiBkb2N1bWVudCkgYW5kIHJldHVybiBhIDItdHVwbGUgb2YgdGhlIFB5dGhvbgorICAgIGRlZiByYXdfZGVjb2RlKHNlbGYsIHMsIGlkeD0wKToKKyAgICAgICAgIiIiRGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAKKyAgICAgICAgYmVnaW5uaW5nIHdpdGggYSBKU09OIGRvY3VtZW50KSBhbmQgcmV0dXJuIGEgMi10dXBsZSBvZiB0aGUgUHl0aG9uCiAgICAgICAgIHJlcHJlc2VudGF0aW9uIGFuZCB0aGUgaW5kZXggaW4gYGBzYGAgd2hlcmUgdGhlIGRvY3VtZW50IGVuZGVkLgogCiAgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gZGVjb2RlIGEgSlNPTiBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIHRoYXQgbWF5CiAgICAgICAgIGhhdmUgZXh0cmFuZW91cyBkYXRhIGF0IHRoZSBlbmQuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGt3LnNldGRlZmF1bHQoJ2NvbnRleHQnLCBzZWxmKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuX3NjYW5uZXIuaXRlcnNjYW4ocywgKiprdykubmV4dCgpCisgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKICAgICAgICAgcmV0dXJuIG9iaiwgZW5kCmRpZmYgLS1naXQgYS9MaWIvanNvbi9lbmNvZGVyLnB5IGIvTGliL2pzb24vZW5jb2Rlci5weQppbmRleCBiMWRkNTcwLi5kODY5MmM0IDEwMDY0NAotLS0gYS9MaWIvanNvbi9lbmNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2VuY29kZXIucHkKQEAgLTEsMTUgKzEsMTUgQEAKICIiIkltcGxlbWVudGF0aW9uIG9mIEpTT05FbmNvZGVyCiAiIiIKLQogaW1wb3J0IHJlCi1pbXBvcnQgbWF0aAogCiB0cnk6CiAgICAgZnJvbSBfanNvbiBpbXBvcnQgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgYXMgY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgPSBOb25lCi0KLV9fYWxsX18gPSBbJ0pTT05FbmNvZGVyJ10KK3RyeToKKyAgICBmcm9tIF9qc29uIGltcG9ydCBtYWtlX2VuY29kZXIgYXMgY19tYWtlX2VuY29kZXIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBjX21ha2VfZW5jb2RlciA9IE5vbmUKIAogRVNDQVBFID0gcmUuY29tcGlsZShyJ1tceDAwLVx4MWZcXCJcYlxmXG5cclx0XScpCiBFU0NBUEVfQVNDSUkgPSByZS5jb21waWxlKHInKFtcXCJdfFteXCAtfl0pJykKQEAgLTI1LDMwICsyNSwxMiBAQAogfQogZm9yIGkgaW4gcmFuZ2UoMHgyMCk6CiAgICAgRVNDQVBFX0RDVC5zZXRkZWZhdWx0KGNocihpKSwgJ1xcdXswOjA0eH0nLmZvcm1hdChpKSkKKyAgICAjRVNDQVBFX0RDVC5zZXRkZWZhdWx0KGNocihpKSwgJ1xcdSUwNHgnICUgKGksKSkKIAorIyBBc3N1bWUgdGhpcyBwcm9kdWNlcyBhbiBpbmZpbml0eSBvbiBhbGwgbWFjaGluZXMgKHByb2JhYmx5IG5vdCBndWFyYW50ZWVkKQorSU5GSU5JVFkgPSBmbG9hdCgnMWU2NjY2NicpCiBGTE9BVF9SRVBSID0gcmVwcgogCi1kZWYgZmxvYXRzdHIobywgYWxsb3dfbmFuPVRydWUpOgotICAgICMgQ2hlY2sgZm9yIHNwZWNpYWxzLiAgTm90ZSB0aGF0IHRoaXMgdHlwZSBvZiB0ZXN0IGlzIHByb2Nlc3Nvci0gYW5kL29yCi0gICAgIyBwbGF0Zm9ybS1zcGVjaWZpYywgc28gZG8gdGVzdHMgd2hpY2ggZG9uJ3QgZGVwZW5kIG9uIHRoZSBpbnRlcm5hbHMuCi0KLSAgICBpZiBtYXRoLmlzbmFuKG8pOgotICAgICAgICB0ZXh0ID0gJ05hTicKLSAgICBlbGlmIG1hdGguaXNpbmYobyk6Ci0gICAgICAgIGlmIG1hdGguY29weXNpZ24oMS4sIG8pID09IDEuOgotICAgICAgICAgICAgdGV4dCA9ICdJbmZpbml0eScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRleHQgPSAnLUluZmluaXR5JwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBGTE9BVF9SRVBSKG8pCi0KLSAgICBpZiBub3QgYWxsb3dfbmFuOgotICAgICAgICBtc2cgPSAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50OiAiICsgcmVwcihvKQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLQotICAgIHJldHVybiB0ZXh0Ci0KLQogZGVmIGVuY29kZV9iYXNlc3RyaW5nKHMpOgogICAgICIiIlJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nCiAKQEAgLTU5LDYgKzQxLDkgQEAKIAogCiBkZWYgcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkocyk6CisgICAgIiIiUmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcKKworICAgICIiIgogICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKSBhbmQgSEFTX1VURjguc2VhcmNoKHMpIGlzIG5vdCBOb25lOgogICAgICAgICBzID0gcy5kZWNvZGUoJ3V0Zi04JykKICAgICBkZWYgcmVwbGFjZShtYXRjaCk6CkBAIC02OSwyMCArNTQsMTkgQEAKICAgICAgICAgICAgIG4gPSBvcmQocykKICAgICAgICAgICAgIGlmIG4gPCAweDEwMDAwOgogICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ezA6MDR4fScuZm9ybWF0KG4pCisgICAgICAgICAgICAgICAgI3JldHVybiAnXFx1JTA0eCcgJSAobiwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgc3Vycm9nYXRlIHBhaXIKICAgICAgICAgICAgICAgICBuIC09IDB4MTAwMDAKICAgICAgICAgICAgICAgICBzMSA9IDB4ZDgwMCB8ICgobiA+PiAxMCkgJiAweDNmZikKICAgICAgICAgICAgICAgICBzMiA9IDB4ZGMwMCB8IChuICYgMHgzZmYpCiAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHV7MDowNHh9XFx1ezE6MDR4fScuZm9ybWF0KHMxLCBzMikKKyAgICAgICAgICAgICAgICAjcmV0dXJuICdcXHUlMDR4XFx1JTA0eCcgJSAoczEsIHMyKQogICAgIHJldHVybiAnIicgKyBzdHIoRVNDQVBFX0FTQ0lJLnN1YihyZXBsYWNlLCBzKSkgKyAnIicKIAogCi1pZiBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpIGlzIG5vdCBOb25lOgotICAgIGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaQotZWxzZToKLSAgICBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSA9IHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpCi0KK2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gKAorICAgIGNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgb3IgcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpCiAKIGNsYXNzIEpTT05FbmNvZGVyKG9iamVjdCk6CiAgICAgIiIiRXh0ZW5zaWJsZSBKU09OIDxodHRwOi8vanNvbi5vcmc+IGVuY29kZXIgZm9yIFB5dGhvbiBkYXRhIHN0cnVjdHVyZXMuCkBAIC0xMTMsNyArOTcsNiBAQAogICAgIGltcGxlbWVudGF0aW9uICh0byByYWlzZSBgYFR5cGVFcnJvcmBgKS4KIAogICAgICIiIgotICAgIF9fYWxsX18gPSBbJ19faW5pdF9fJywgJ2RlZmF1bHQnLCAnZW5jb2RlJywgJ2l0ZXJlbmNvZGUnXQogICAgIGl0ZW1fc2VwYXJhdG9yID0gJywgJwogICAgIGtleV9zZXBhcmF0b3IgPSAnOiAnCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwKQEAgLTEyMSwyNSArMTA0LDI1IEBACiAgICAgICAgICAgICBpbmRlbnQ9Tm9uZSwgc2VwYXJhdG9ycz1Ob25lLCBlbmNvZGluZz0ndXRmLTgnLCBkZWZhdWx0PU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCiAKLSAgICAgICAgSWYgc2tpcGtleXMgaXMgRmFsc2UsIHRoZW4gaXQgaXMgYSBUeXBlRXJyb3IgdG8gYXR0ZW1wdAorICAgICAgICBJZiBza2lwa2V5cyBpcyBmYWxzZSwgdGhlbiBpdCBpcyBhIFR5cGVFcnJvciB0byBhdHRlbXB0CiAgICAgICAgIGVuY29kaW5nIG9mIGtleXMgdGhhdCBhcmUgbm90IHN0ciwgaW50LCBsb25nLCBmbG9hdCBvciBOb25lLiAgSWYKICAgICAgICAgc2tpcGtleXMgaXMgVHJ1ZSwgc3VjaCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCiAKLSAgICAgICAgSWYgZW5zdXJlX2FzY2lpIGlzIFRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIKKyAgICAgICAgSWYgZW5zdXJlX2FzY2lpIGlzIHRydWUsIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHIKICAgICAgICAgb2JqZWN0cyB3aXRoIGFsbCBpbmNvbWluZyB1bmljb2RlIGNoYXJhY3RlcnMgZXNjYXBlZC4gIElmCiAgICAgICAgIGVuc3VyZV9hc2NpaSBpcyBmYWxzZSwgdGhlIG91dHB1dCB3aWxsIGJlIHVuaWNvZGUgb2JqZWN0LgogCi0gICAgICAgIElmIGNoZWNrX2NpcmN1bGFyIGlzIFRydWUsIHRoZW4gbGlzdHMsIGRpY3RzLCBhbmQgY3VzdG9tIGVuY29kZWQKKyAgICAgICAgSWYgY2hlY2tfY2lyY3VsYXIgaXMgdHJ1ZSwgdGhlbiBsaXN0cywgZGljdHMsIGFuZCBjdXN0b20gZW5jb2RlZAogICAgICAgICBvYmplY3RzIHdpbGwgYmUgY2hlY2tlZCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBkdXJpbmcgZW5jb2RpbmcgdG8KICAgICAgICAgcHJldmVudCBhbiBpbmZpbml0ZSByZWN1cnNpb24gKHdoaWNoIHdvdWxkIGNhdXNlIGFuIE92ZXJmbG93RXJyb3IpLgogICAgICAgICBPdGhlcndpc2UsIG5vIHN1Y2ggY2hlY2sgdGFrZXMgcGxhY2UuCiAKLSAgICAgICAgSWYgYWxsb3dfbmFuIGlzIFRydWUsIHRoZW4gTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSB3aWxsIGJlCisgICAgICAgIElmIGFsbG93X25hbiBpcyB0cnVlLCB0aGVuIE5hTiwgSW5maW5pdHksIGFuZCAtSW5maW5pdHkgd2lsbCBiZQogICAgICAgICBlbmNvZGVkIGFzIHN1Y2guICBUaGlzIGJlaGF2aW9yIGlzIG5vdCBKU09OIHNwZWNpZmljYXRpb24gY29tcGxpYW50LAogICAgICAgICBidXQgaXMgY29uc2lzdGVudCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZCBlbmNvZGVycyBhbmQgZGVjb2RlcnMuCiAgICAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhIFZhbHVlRXJyb3IgdG8gZW5jb2RlIHN1Y2ggZmxvYXRzLgogCi0gICAgICAgIElmIHNvcnRfa2V5cyBpcyBUcnVlLCB0aGVuIHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgICAgICAgSWYgc29ydF9rZXlzIGlzIHRydWUsIHRoZW4gdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMgd2lsbCBiZQogICAgICAgICBzb3J0ZWQgYnkga2V5OyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVncmVzc2lvbiB0ZXN0cyB0byBlbnN1cmUKICAgICAgICAgdGhhdCBKU09OIHNlcmlhbGl6YXRpb25zIGNhbiBiZSBjb21wYXJlZCBvbiBhIGRheS10by1kYXkgYmFzaXMuCiAKQEAgLTE2MSwxNzUgKzE0NCwyNiBAQAogICAgICAgICBUaGUgZGVmYXVsdCBpcyBVVEYtOC4KIAogICAgICAgICAiIiIKKwogICAgICAgICBzZWxmLnNraXBrZXlzID0gc2tpcGtleXMKICAgICAgICAgc2VsZi5lbnN1cmVfYXNjaWkgPSBlbnN1cmVfYXNjaWkKICAgICAgICAgc2VsZi5jaGVja19jaXJjdWxhciA9IGNoZWNrX2NpcmN1bGFyCiAgICAgICAgIHNlbGYuYWxsb3dfbmFuID0gYWxsb3dfbmFuCiAgICAgICAgIHNlbGYuc29ydF9rZXlzID0gc29ydF9rZXlzCiAgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0gICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgPSAwCiAgICAgICAgIGlmIHNlcGFyYXRvcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yLCBzZWxmLmtleV9zZXBhcmF0b3IgPSBzZXBhcmF0b3JzCiAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CiAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwogCi0gICAgZGVmIF9uZXdsaW5lX2luZGVudChzZWxmKToKLSAgICAgICAgcmV0dXJuICdcbicgKyAoJyAnICogKHNlbGYuaW5kZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCkpCi0KLSAgICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChzZWxmLCBsc3QsIG1hcmtlcnM9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBsc3Q6Ci0gICAgICAgICAgICB5aWVsZCAnW10nCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQotICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBsc3QKLSAgICAgICAgeWllbGQgJ1snCi0gICAgICAgIGlmIHNlbGYuaW5kZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCi0gICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKLSAgICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAotICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQotICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgotICAgICAgICBmaXJzdCA9IFRydWUKLSAgICAgICAgZm9yIHZhbHVlIGluIGxzdDoKLSAgICAgICAgICAgIGlmIGZpcnN0OgotICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgeWllbGQgc2VwYXJhdG9yCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKLSAgICAgICAgeWllbGQgJ10nCi0gICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KLQotICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KHNlbGYsIGRjdCwgbWFya2Vycz1Ob25lKToKLSAgICAgICAgaWYgbm90IGRjdDoKLSAgICAgICAgICAgIHlpZWxkICd7fScKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCi0gICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCi0gICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAotICAgICAgICB5aWVsZCAneycKLSAgICAgICAga2V5X3NlcGFyYXRvciA9IHNlbGYua2V5X3NlcGFyYXRvcgotICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQotICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCi0gICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAotICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQotICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCi0gICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKLSAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCi0gICAgICAgIGFsbG93X25hbiA9IHNlbGYuYWxsb3dfbmFuCi0gICAgICAgIGlmIHNlbGYuc29ydF9rZXlzOgotICAgICAgICAgICAga2V5cyA9IGRjdC5rZXlzKCkKLSAgICAgICAgICAgIGtleXMuc29ydCgpCi0gICAgICAgICAgICBpdGVtcyA9IFsoaywgZGN0W2tdKSBmb3IgayBpbiBrZXlzXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0ZW1zKCkKLSAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZwotICAgICAgICBfZG9fZGVjb2RlID0gKF9lbmNvZGluZyBpcyBub3QgTm9uZQotICAgICAgICAgICAgYW5kIG5vdCAoX2VuY29kaW5nID09ICd1dGYtOCcpKQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgotICAgICAgICAgICAgICAgIGlmIF9kb19kZWNvZGU6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5kZWNvZGUoX2VuY29kaW5nKQotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCi0gICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIGtleSA9IGZsb2F0c3RyKGtleSwgYWxsb3dfbmFuKQotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCi0gICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgotICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJwotICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6Ci0gICAgICAgICAgICAgICAga2V5ID0gJ2ZhbHNlJwotICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKLSAgICAgICAgICAgIGVsaWYgc2VsZi5za2lwa2V5czoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleSB7MCFyfSBpcyBub3QgYSBzdHJpbmciLmZvcm1hdChrZXkpKQotICAgICAgICAgICAgaWYgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB5aWVsZCBpdGVtX3NlcGFyYXRvcgotICAgICAgICAgICAgeWllbGQgZW5jb2RlcihrZXkpCi0gICAgICAgICAgICB5aWVsZCBrZXlfc2VwYXJhdG9yCi0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKLSAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKLSAgICAgICAgeWllbGQgJ30nCi0gICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KLQotICAgIGRlZiBfaXRlcmVuY29kZShzZWxmLCBvLCBtYXJrZXJzPU5vbmUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6Ci0gICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZwotICAgICAgICAgICAgX2VuY29kaW5nID0gc2VsZi5lbmNvZGluZwotICAgICAgICAgICAgaWYgKF9lbmNvZGluZyBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvLCBzdHIpCi0gICAgICAgICAgICAgICAgICAgIGFuZCBub3QgKF9lbmNvZGluZyA9PSAndXRmLTgnKSk6Ci0gICAgICAgICAgICAgICAgbyA9IG8uZGVjb2RlKF9lbmNvZGluZykKLSAgICAgICAgICAgIHlpZWxkIGVuY29kZXIobykKLSAgICAgICAgZWxpZiBvIGlzIE5vbmU6Ci0gICAgICAgICAgICB5aWVsZCAnbnVsbCcKLSAgICAgICAgZWxpZiBvIGlzIFRydWU6Ci0gICAgICAgICAgICB5aWVsZCAndHJ1ZScKLSAgICAgICAgZWxpZiBvIGlzIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGludCwgbG9uZykpOgotICAgICAgICAgICAgeWllbGQgc3RyKG8pCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6Ci0gICAgICAgICAgICB5aWVsZCBmbG9hdHN0cihvLCBzZWxmLmFsbG93X25hbikKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfbGlzdChvLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9kaWN0KG8sIG1hcmtlcnMpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobykKLSAgICAgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQotICAgICAgICAgICAgICAgIG1hcmtlcnNbbWFya2VyaWRdID0gbwotICAgICAgICAgICAgZm9yIGNodW5rIGluIHNlbGYuX2l0ZXJlbmNvZGVfZGVmYXVsdChvLCBtYXJrZXJzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuawotICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KLQotICAgIGRlZiBfaXRlcmVuY29kZV9kZWZhdWx0KHNlbGYsIG8sIG1hcmtlcnM9Tm9uZSk6Ci0gICAgICAgIG5ld29iaiA9IHNlbGYuZGVmYXVsdChvKQotICAgICAgICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShuZXdvYmosIG1hcmtlcnMpCi0KICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKLSAgICAgICAgIiIiSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIGEgc3ViY2xhc3Mgc3VjaCB0aGF0IGl0IHJldHVybnMgYSBzZXJpYWxpemFibGUKLSAgICAgICAgb2JqZWN0IGZvciBgYG9gYCwgb3IgY2FsbHMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gKHRvIHJhaXNlIGEKLSAgICAgICAgYGBUeXBlRXJyb3JgYCkuCisgICAgICAgICIiIkltcGxlbWVudCB0aGlzIG1ldGhvZCBpbiBhIHN1YmNsYXNzIHN1Y2ggdGhhdCBpdCByZXR1cm5zCisgICAgICAgIGEgc2VyaWFsaXphYmxlIG9iamVjdCBmb3IgYGBvYGAsIG9yIGNhbGxzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uCisgICAgICAgICh0byByYWlzZSBhIGBgVHlwZUVycm9yYGApLgogCi0gICAgICAgIEZvciBleGFtcGxlLCB0byBzdXBwb3J0IGFyYml0cmFyeSBpdGVyYXRvcnMsIHlvdSBjb3VsZCBpbXBsZW1lbnQKLSAgICAgICAgZGVmYXVsdCBsaWtlIHRoaXM6OgorICAgICAgICBGb3IgZXhhbXBsZSwgdG8gc3VwcG9ydCBhcmJpdHJhcnkgaXRlcmF0b3JzLCB5b3UgY291bGQKKyAgICAgICAgaW1wbGVtZW50IGRlZmF1bHQgbGlrZSB0aGlzOjoKIAogICAgICAgICAgICAgZGVmIGRlZmF1bHQoc2VsZiwgbyk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzY0LDEyICsxOTgsMTQgQEAKICAgICAgICAgIyBUaGlzIGRvZXNuJ3QgcGFzcyB0aGUgaXRlcmF0b3IgZGlyZWN0bHkgdG8gJycuam9pbigpIGJlY2F1c2UgdGhlCiAgICAgICAgICMgZXhjZXB0aW9ucyBhcmVuJ3QgYXMgZGV0YWlsZWQuICBUaGUgbGlzdCBjYWxsIHNob3VsZCBiZSByb3VnaGx5CiAgICAgICAgICMgZXF1aXZhbGVudCB0byB0aGUgUHlTZXF1ZW5jZV9GYXN0IHRoYXQgJycuam9pbigpIHdvdWxkIGRvLgotICAgICAgICBjaHVua3MgPSBsaXN0KHNlbGYuaXRlcmVuY29kZShvKSkKKyAgICAgICAgY2h1bmtzID0gc2VsZi5pdGVyZW5jb2RlKG8sIF9vbmVfc2hvdD1UcnVlKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjaHVua3MsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgY2h1bmtzID0gbGlzdChjaHVua3MpCiAgICAgICAgIHJldHVybiAnJy5qb2luKGNodW5rcykKIAotICAgIGRlZiBpdGVyZW5jb2RlKHNlbGYsIG8pOgotICAgICAgICAiIiJFbmNvZGUgdGhlIGdpdmVuIG9iamVjdCBhbmQgeWllbGQgZWFjaCBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMKLSAgICAgICAgYXZhaWxhYmxlLgorICAgIGRlZiBpdGVyZW5jb2RlKHNlbGYsIG8sIF9vbmVfc2hvdD1GYWxzZSk6CisgICAgICAgICIiIkVuY29kZSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCB5aWVsZCBlYWNoIHN0cmluZworICAgICAgICByZXByZXNlbnRhdGlvbiBhcyBhdmFpbGFibGUuCiAKICAgICAgICAgRm9yIGV4YW1wbGU6OgogCkBAIC0zODEsNCArMjE3LDIyNiBAQAogICAgICAgICAgICAgbWFya2VycyA9IHt9CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtYXJrZXJzID0gTm9uZQotICAgICAgICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShvLCBtYXJrZXJzKQorICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKKyAgICAgICAgICAgIF9lbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9lbmNvZGVyID0gZW5jb2RlX2Jhc2VzdHJpbmcKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZyAhPSAndXRmLTgnOgorICAgICAgICAgICAgZGVmIF9lbmNvZGVyKG8sIF9vcmlnX2VuY29kZXI9X2VuY29kZXIsIF9lbmNvZGluZz1zZWxmLmVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgICAgICAgICAgICAgIG8gPSBvLmRlY29kZShfZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIF9vcmlnX2VuY29kZXIobykKKworICAgICAgICBkZWYgZmxvYXRzdHIobywgYWxsb3dfbmFuPXNlbGYuYWxsb3dfbmFuLAorICAgICAgICAgICAgICAgIF9yZXByPUZMT0FUX1JFUFIsIF9pbmY9SU5GSU5JVFksIF9uZWdpbmY9LUlORklOSVRZKToKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHNwZWNpYWxzLiAgTm90ZSB0aGF0IHRoaXMgdHlwZSBvZiB0ZXN0IGlzIHByb2Nlc3NvcgorICAgICAgICAgICAgIyBhbmQvb3IgcGxhdGZvcm0tc3BlY2lmaWMsIHNvIGRvIHRlc3RzIHdoaWNoIGRvbid0IGRlcGVuZCBvbiB0aGUKKyAgICAgICAgICAgICMgaW50ZXJuYWxzLgorCisgICAgICAgICAgICBpZiBvICE9IG86CisgICAgICAgICAgICAgICAgdGV4dCA9ICdOYU4nCisgICAgICAgICAgICBlbGlmIG8gPT0gX2luZjoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gJ0luZmluaXR5JworICAgICAgICAgICAgZWxpZiBvID09IF9uZWdpbmY6CisgICAgICAgICAgICAgICAgdGV4dCA9ICctSW5maW5pdHknCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBfcmVwcihvKQorCisgICAgICAgICAgICBpZiBub3QgYWxsb3dfbmFuOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQ6ICIgKworICAgICAgICAgICAgICAgICAgICByZXByKG8pKQorCisgICAgICAgICAgICByZXR1cm4gdGV4dAorCisKKyAgICAgICAgaWYgKF9vbmVfc2hvdCBhbmQgY19tYWtlX2VuY29kZXIgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbm90IHNlbGYuaW5kZW50IGFuZCBub3Qgc2VsZi5zb3J0X2tleXMpOgorICAgICAgICAgICAgX2l0ZXJlbmNvZGUgPSBjX21ha2VfZW5jb2RlcigKKyAgICAgICAgICAgICAgICBtYXJrZXJzLCBzZWxmLmRlZmF1bHQsIF9lbmNvZGVyLCBzZWxmLmluZGVudCwKKyAgICAgICAgICAgICAgICBzZWxmLmtleV9zZXBhcmF0b3IsIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYuc29ydF9rZXlzLAorICAgICAgICAgICAgICAgIHNlbGYuc2tpcGtleXMsIHNlbGYuYWxsb3dfbmFuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2l0ZXJlbmNvZGUgPSBfbWFrZV9pdGVyZW5jb2RlKAorICAgICAgICAgICAgICAgIG1hcmtlcnMsIHNlbGYuZGVmYXVsdCwgX2VuY29kZXIsIHNlbGYuaW5kZW50LCBmbG9hdHN0ciwKKyAgICAgICAgICAgICAgICBzZWxmLmtleV9zZXBhcmF0b3IsIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYuc29ydF9rZXlzLAorICAgICAgICAgICAgICAgIHNlbGYuc2tpcGtleXMsIF9vbmVfc2hvdCkKKyAgICAgICAgcmV0dXJuIF9pdGVyZW5jb2RlKG8sIDApCisKK2RlZiBfbWFrZV9pdGVyZW5jb2RlKG1hcmtlcnMsIF9kZWZhdWx0LCBfZW5jb2RlciwgX2luZGVudCwgX2Zsb2F0c3RyLAorICAgICAgICBfa2V5X3NlcGFyYXRvciwgX2l0ZW1fc2VwYXJhdG9yLCBfc29ydF9rZXlzLCBfc2tpcGtleXMsIF9vbmVfc2hvdCwKKyAgICAgICAgIyMgSEFDSzogaGFuZC1vcHRpbWl6ZWQgYnl0ZWNvZGU7IHR1cm4gZ2xvYmFscyBpbnRvIGxvY2FscworICAgICAgICBWYWx1ZUVycm9yPVZhbHVlRXJyb3IsCisgICAgICAgIGJhc2VzdHJpbmc9YmFzZXN0cmluZywKKyAgICAgICAgZGljdD1kaWN0LAorICAgICAgICBmbG9hdD1mbG9hdCwKKyAgICAgICAgaWQ9aWQsCisgICAgICAgIGludD1pbnQsCisgICAgICAgIGlzaW5zdGFuY2U9aXNpbnN0YW5jZSwKKyAgICAgICAgbGlzdD1saXN0LAorICAgICAgICBsb25nPWxvbmcsCisgICAgICAgIHN0cj1zdHIsCisgICAgICAgIHR1cGxlPXR1cGxlLAorICAgICk6CisKKyAgICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChsc3QsIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgIGlmIG5vdCBsc3Q6CisgICAgICAgICAgICB5aWVsZCAnW10nCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQorICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBsc3QKKyAgICAgICAgYnVmID0gJ1snCisgICAgICAgIGlmIF9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CisgICAgICAgICAgICBidWYgKz0gbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBmb3IgdmFsdWUgaW4gbHN0OgorICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBidWYgPSBzZXBhcmF0b3IKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9lbmNvZGVyKHZhbHVlKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICdudWxsJworICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArICd0cnVlJworICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFsc2UnCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIodmFsdWUpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9saXN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfZGljdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlKHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCisgICAgICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICAgICAgeWllbGQgJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgIHlpZWxkICddJworICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCisKKyAgICBkZWYgX2l0ZXJlbmNvZGVfZGljdChkY3QsIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgIGlmIG5vdCBkY3Q6CisgICAgICAgICAgICB5aWVsZCAne30nCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQoZGN0KQorICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBkY3QKKyAgICAgICAgeWllbGQgJ3snCisgICAgICAgIGlmIF9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSAnXG4nICsgKCcgJyAqIChfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yICsgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgICAgIHlpZWxkIG5ld2xpbmVfaW5kZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IE5vbmUKKyAgICAgICAgICAgIGl0ZW1fc2VwYXJhdG9yID0gX2l0ZW1fc2VwYXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBpZiBfc29ydF9rZXlzOgorICAgICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoZGN0Lml0ZW1zKCksIGtleT1sYW1iZGEga3Y6IGt2WzBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCisgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihrZXkpCisgICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAga2V5ID0gJ2ZhbHNlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIChpbnQsIGxvbmcpKToKKyAgICAgICAgICAgICAgICBrZXkgPSBzdHIoa2V5KQorICAgICAgICAgICAgZWxpZiBfc2tpcGtleXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXkgIiArIHJlcHIoa2V5KSArICIgaXMgbm90IGEgc3RyaW5nIikKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgaXRlbV9zZXBhcmF0b3IKKyAgICAgICAgICAgIHlpZWxkIF9lbmNvZGVyKGtleSkKKyAgICAgICAgICAgIHlpZWxkIF9rZXlfc2VwYXJhdG9yCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICB5aWVsZCBfZW5jb2Rlcih2YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB5aWVsZCAnbnVsbCcKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICB5aWVsZCAndHJ1ZScKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICAgICAgeWllbGQgc3RyKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQorICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkICdcbicgKyAoJyAnICogKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpKQorICAgICAgICB5aWVsZCAnfScKKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQorCisgICAgZGVmIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICB5aWVsZCBfZW5jb2RlcihvKQorICAgICAgICBlbGlmIG8gaXMgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICdudWxsJworICAgICAgICBlbGlmIG8gaXMgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkICd0cnVlJworICAgICAgICBlbGlmIG8gaXMgRmFsc2U6CisgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKKyAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihvKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQorICAgICAgICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBvCisgICAgICAgICAgICBvID0gX2RlZmF1bHQobykKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQorCisgICAgcmV0dXJuIF9pdGVyZW5jb2RlCmRpZmYgLS1naXQgYS9MaWIvanNvbi9zY2FubmVyLnB5IGIvTGliL2pzb24vc2Nhbm5lci5weQppbmRleCA0YjA2NWFiLi43NGU2ODA1IDEwMDY0NAotLS0gYS9MaWIvanNvbi9zY2FubmVyLnB5CisrKyBiL0xpYi9qc29uL3NjYW5uZXIucHkKQEAgLTEsNjkgKzEsNjcgQEAKLSIiIkl0ZXJhdG9yIGJhc2VkIHNyZSB0b2tlbiBzY2FubmVyCi0KKyIiIkpTT04gdG9rZW4gc2Nhbm5lcgogIiIiCi0KIGltcG9ydCByZQotaW1wb3J0IHNyZV9wYXJzZQotaW1wb3J0IHNyZV9jb21waWxlCi1pbXBvcnQgc3JlX2NvbnN0YW50cwordHJ5OgorICAgIGZyb20gX2pzb24gaW1wb3J0IG1ha2Vfc2Nhbm5lciBhcyBjX21ha2Vfc2Nhbm5lcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGNfbWFrZV9zY2FubmVyID0gTm9uZQogCi1mcm9tIHJlIGltcG9ydCBWRVJCT1NFLCBNVUxUSUxJTkUsIERPVEFMTAotZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCBCUkFOQ0gsIFNVQlBBVFRFUk4KK19fYWxsX18gPSBbJ21ha2Vfc2Nhbm5lciddCiAKLV9fYWxsX18gPSBbJ1NjYW5uZXInLCAncGF0dGVybiddCitOVU1CRVJfUkUgPSByZS5jb21waWxlKAorICAgIHInKC0/KD86MHxbMS05XVxkKikpKFwuXGQrKT8oW2VFXVstK10/XGQrKT8nLAorICAgIChyZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKSkKIAotRkxBR1MgPSAoVkVSQk9TRSB8IE1VTFRJTElORSB8IERPVEFMTCkKK2RlZiBweV9tYWtlX3NjYW5uZXIoY29udGV4dCk6CisgICAgcGFyc2Vfb2JqZWN0ID0gY29udGV4dC5wYXJzZV9vYmplY3QKKyAgICBwYXJzZV9hcnJheSA9IGNvbnRleHQucGFyc2VfYXJyYXkKKyAgICBwYXJzZV9zdHJpbmcgPSBjb250ZXh0LnBhcnNlX3N0cmluZworICAgIG1hdGNoX251bWJlciA9IE5VTUJFUl9SRS5tYXRjaAorICAgIGVuY29kaW5nID0gY29udGV4dC5lbmNvZGluZworICAgIHN0cmljdCA9IGNvbnRleHQuc3RyaWN0CisgICAgcGFyc2VfZmxvYXQgPSBjb250ZXh0LnBhcnNlX2Zsb2F0CisgICAgcGFyc2VfaW50ID0gY29udGV4dC5wYXJzZV9pbnQKKyAgICBwYXJzZV9jb25zdGFudCA9IGNvbnRleHQucGFyc2VfY29uc3RhbnQKKyAgICBvYmplY3RfaG9vayA9IGNvbnRleHQub2JqZWN0X2hvb2sKKyAgICBvYmplY3RfcGFpcnNfaG9vayA9IGNvbnRleHQub2JqZWN0X3BhaXJzX2hvb2sKIAotY2xhc3MgU2Nhbm5lcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsZXhpY29uLCBmbGFncz1GTEFHUyk6Ci0gICAgICAgIHNlbGYuYWN0aW9ucyA9IFtOb25lXQotICAgICAgICAjIENvbWJpbmUgcGhyYXNlcyBpbnRvIGEgY29tcG91bmQgcGF0dGVybgotICAgICAgICBzID0gc3JlX3BhcnNlLlBhdHRlcm4oKQotICAgICAgICBzLmZsYWdzID0gZmxhZ3MKLSAgICAgICAgcCA9IFtdCi0gICAgICAgIGZvciBpZHgsIHRva2VuIGluIGVudW1lcmF0ZShsZXhpY29uKToKLSAgICAgICAgICAgIHBocmFzZSA9IHRva2VuLnBhdHRlcm4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuID0gc3JlX3BhcnNlLlN1YlBhdHRlcm4ocywKLSAgICAgICAgICAgICAgICAgICAgWyhTVUJQQVRURVJOLCAoaWR4ICsgMSwgc3JlX3BhcnNlLnBhcnNlKHBocmFzZSwgZmxhZ3MpKSldKQotICAgICAgICAgICAgZXhjZXB0IHNyZV9jb25zdGFudHMuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHAuYXBwZW5kKHN1YnBhdHRlcm4pCi0gICAgICAgICAgICBzZWxmLmFjdGlvbnMuYXBwZW5kKHRva2VuKQorICAgIGRlZiBfc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dGNoYXIgPSBzdHJpbmdbaWR4XQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KIAotICAgICAgICBzLmdyb3VwcyA9IGxlbihwKSArIDEgIyBOT1RFKGd1aWRvKTogQWRkZWQgdG8gbWFrZSBTUkUgdmFsaWRhdGlvbiB3b3JrCi0gICAgICAgIHAgPSBzcmVfcGFyc2UuU3ViUGF0dGVybihzLCBbKEJSQU5DSCwgKE5vbmUsIHApKV0pCi0gICAgICAgIHNlbGYuc2Nhbm5lciA9IHNyZV9jb21waWxlLmNvbXBpbGUocCkKKyAgICAgICAgaWYgbmV4dGNoYXIgPT0gJyInOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIGVuY29kaW5nLCBzdHJpY3QpCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ3snOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX29iamVjdCgoc3RyaW5nLCBpZHggKyAxKSwgZW5jb2RpbmcsIHN0cmljdCwKKyAgICAgICAgICAgICAgICBfc2Nhbl9vbmNlLCBvYmplY3RfaG9vaywgb2JqZWN0X3BhaXJzX2hvb2spCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ1snOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2FycmF5KChzdHJpbmcsIGlkeCArIDEpLCBfc2Nhbl9vbmNlKQorICAgICAgICBlbGlmIG5leHRjaGFyID09ICduJyBhbmQgc3RyaW5nW2lkeDppZHggKyA0XSA9PSAnbnVsbCc6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgaWR4ICsgNAorICAgICAgICBlbGlmIG5leHRjaGFyID09ICd0JyBhbmQgc3RyaW5nW2lkeDppZHggKyA0XSA9PSAndHJ1ZSc6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgaWR4ICsgNAorICAgICAgICBlbGlmIG5leHRjaGFyID09ICdmJyBhbmQgc3RyaW5nW2lkeDppZHggKyA1XSA9PSAnZmFsc2UnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBpZHggKyA1CiAKLSAgICBkZWYgaXRlcnNjYW4oc2VsZiwgc3RyaW5nLCBpZHg9MCwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiWWllbGQgbWF0Y2gsIGVuZF9pZHggZm9yIGVhY2ggbWF0Y2gKKyAgICAgICAgbSA9IG1hdGNoX251bWJlcihzdHJpbmcsIGlkeCkKKyAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGludGVnZXIsIGZyYWMsIGV4cCA9IG0uZ3JvdXBzKCkKKyAgICAgICAgICAgIGlmIGZyYWMgb3IgZXhwOgorICAgICAgICAgICAgICAgIHJlcyA9IHBhcnNlX2Zsb2F0KGludGVnZXIgKyAoZnJhYyBvciAnJykgKyAoZXhwIG9yICcnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzID0gcGFyc2VfaW50KGludGVnZXIpCisgICAgICAgICAgICByZXR1cm4gcmVzLCBtLmVuZCgpCisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ04nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDNdID09ICdOYU4nOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnN0YW50KCdOYU4nKSwgaWR4ICsgMworICAgICAgICBlbGlmIG5leHRjaGFyID09ICdJJyBhbmQgc3RyaW5nW2lkeDppZHggKyA4XSA9PSAnSW5maW5pdHknOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnN0YW50KCdJbmZpbml0eScpLCBpZHggKyA4CisgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJy0nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDldID09ICctSW5maW5pdHknOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnN0YW50KCctSW5maW5pdHknKSwgaWR4ICsgOQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogCi0gICAgICAgICIiIgotICAgICAgICBtYXRjaCA9IHNlbGYuc2Nhbm5lci5zY2FubmVyKHN0cmluZywgaWR4KS5tYXRjaAotICAgICAgICBhY3Rpb25zID0gc2VsZi5hY3Rpb25zCi0gICAgICAgIGxhc3RlbmQgPSBpZHgKLSAgICAgICAgZW5kID0gbGVuKHN0cmluZykKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIG0gPSBtYXRjaCgpCi0gICAgICAgICAgICBpZiBtIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIG1hdGNoYmVnaW4sIG1hdGNoZW5kID0gbS5zcGFuKCkKLSAgICAgICAgICAgIGlmIGxhc3RlbmQgPT0gbWF0Y2hlbmQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbnNbbS5sYXN0aW5kZXhdCi0gICAgICAgICAgICBpZiBhY3Rpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcnZhbCwgbmV4dF9wb3MgPSBhY3Rpb24obSwgY29udGV4dCkKLSAgICAgICAgICAgICAgICBpZiBuZXh0X3BvcyBpcyBub3QgTm9uZSBhbmQgbmV4dF9wb3MgIT0gbWF0Y2hlbmQ6Ci0gICAgICAgICAgICAgICAgICAgICMgImZhc3QgZm9yd2FyZCIgdGhlIHNjYW5uZXIKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlbmQgPSBuZXh0X3BvcwotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuc2Nhbm5lci5zY2FubmVyKHN0cmluZywgbWF0Y2hlbmQpLm1hdGNoCi0gICAgICAgICAgICAgICAgeWllbGQgcnZhbCwgbWF0Y2hlbmQKLSAgICAgICAgICAgIGxhc3RlbmQgPSBtYXRjaGVuZAorICAgIHJldHVybiBfc2Nhbl9vbmNlCiAKLQotZGVmIHBhdHRlcm4ocGF0dGVybiwgZmxhZ3M9RkxBR1MpOgotICAgIGRlZiBkZWNvcmF0b3IoZm4pOgotICAgICAgICBmbi5wYXR0ZXJuID0gcGF0dGVybgotICAgICAgICBmbi5yZWdleCA9IHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpCi0gICAgICAgIHJldHVybiBmbgotICAgIHJldHVybiBkZWNvcmF0b3IKK21ha2Vfc2Nhbm5lciA9IGNfbWFrZV9zY2FubmVyIG9yIHB5X21ha2Vfc2Nhbm5lcgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9jaGVja19jaXJjdWxhci5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfY2hlY2tfY2lyY3VsYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzZjk2YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfY2hlY2tfY2lyY3VsYXIucHkKQEAgLTAsMCArMSwzMCBAQAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2ltcG9ydCBqc29uCisKK2RlZiBkZWZhdWx0X2l0ZXJhYmxlKG9iaik6CisgICAgcmV0dXJuIGxpc3Qob2JqKQorCitjbGFzcyBUZXN0Q2hlY2tDaXJjdWxhcihUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2lyY3VsYXJfZGljdChzZWxmKToKKyAgICAgICAgZGN0ID0ge30KKyAgICAgICAgZGN0WydhJ10gPSBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwganNvbi5kdW1wcywgZGN0KQorCisgICAgZGVmIHRlc3RfY2lyY3VsYXJfbGlzdChzZWxmKToKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgbHN0LmFwcGVuZChsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGpzb24uZHVtcHMsIGxzdCkKKworICAgIGRlZiB0ZXN0X2NpcmN1bGFyX2NvbXBvc2l0ZShzZWxmKToKKyAgICAgICAgZGN0MiA9IHt9CisgICAgICAgIGRjdDJbJ2EnXSA9IFtdCisgICAgICAgIGRjdDJbJ2EnXS5hcHBlbmQoZGN0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwganNvbi5kdW1wcywgZGN0MikKKworICAgIGRlZiB0ZXN0X2NpcmN1bGFyX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGpzb24uZHVtcHMoW3NldCgpXSwgZGVmYXVsdD1kZWZhdWx0X2l0ZXJhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGpzb24uZHVtcHMsIFtzZXQoKV0pCisKKyAgICBkZWYgdGVzdF9jaXJjdWxhcl9vZmZfZGVmYXVsdChzZWxmKToKKyAgICAgICAganNvbi5kdW1wcyhbc2V0KCldLCBkZWZhdWx0PWRlZmF1bHRfaXRlcmFibGUsIGNoZWNrX2NpcmN1bGFyPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGpzb24uZHVtcHMsIFtzZXQoKV0sIGNoZWNrX2NpcmN1bGFyPUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9kZWNvZGUucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weQppbmRleCA2MDlmNjIyLi42YWZhZmU2IDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weQpAQCAtMSwxNSArMSw0MSBAQAogaW1wb3J0IGRlY2ltYWwKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBpbXBvcnQganNvbgorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKIAogY2xhc3MgVGVzdERlY29kZShUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKICAgICAgICAgcnZhbCA9IGpzb24ubG9hZHMoJzEuMScsIHBhcnNlX2Zsb2F0PWRlY2ltYWwuRGVjaW1hbCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocnZhbCwgZGVjaW1hbC5EZWNpbWFsKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnZhbCwgZGVjaW1hbC5EZWNpbWFsKCcxLjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocnZhbCwgZGVjaW1hbC5EZWNpbWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydmFsLCBkZWNpbWFsLkRlY2ltYWwoJzEuMScpKQogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CiAgICAgICAgIHJ2YWwgPSBqc29uLmxvYWRzKCcxJywgcGFyc2VfaW50PWZsb2F0KQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShydmFsLCBmbG9hdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJ2YWwsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocnZhbCwgZmxvYXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2YWwsIDEuMCkKKworICAgIGRlZiB0ZXN0X2RlY29kZXJfb3B0aW1pemF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBTZXZlcmFsIG9wdGltaXphdGlvbnMgd2VyZSBtYWRlIHRoYXQgc2tpcCBvdmVyIGNhbGxzIHRvCisgICAgICAgICMgdGhlIHdoaXRlc3BhY2UgcmVnZXgsIHNvIHRoaXMgdGVzdCBpcyBkZXNpZ25lZCB0byB0cnkgYW5kCisgICAgICAgICMgZXhlcmNpc2UgdGhlIHVuY29tbW9uIGNhc2VzLiBUaGUgYXJyYXkgY2FzZXMgYXJlIGFscmVhZHkgY292ZXJlZC4KKyAgICAgICAgcnZhbCA9IGpzb24ubG9hZHMoJ3sgICAia2V5IiAgICA6ICAgICJ2YWx1ZSIgICAgLCAgImsiOiJ2IiAgICB9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydmFsLCB7ImtleSI6InZhbHVlIiwgImsiOiJ2In0pCisKKyAgICBkZWYgdGVzdF9vYmplY3RfcGFpcnNfaG9vayhzZWxmKToKKyAgICAgICAgcyA9ICd7InhrZCI6MSwgImtjdyI6MiwgImFydCI6MywgImh4bSI6NCwgInFydCI6NSwgInBhZCI6NiwgImhveSI6N30nCisgICAgICAgIHAgPSBbKCJ4a2QiLCAxKSwgKCJrY3ciLCAyKSwgKCJhcnQiLCAzKSwgKCJoeG0iLCA0KSwKKyAgICAgICAgICAgICAoInFydCIsIDUpLCAoInBhZCIsIDYpLCAoImhveSIsIDcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocyksIGV2YWwocykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vaz1sYW1iZGEgeDogeCksIHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkKFN0cmluZ0lPKHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1sYW1iZGEgeDogeCksIHApCisgICAgICAgIG9kID0ganNvbi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vaz1PcmRlcmVkRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZCwgT3JkZXJlZERpY3QocCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvZCksIE9yZGVyZWREaWN0KQorICAgICAgICAjIHRoZSBvYmplY3RfcGFpcnNfaG9vayB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZSBvYmplY3RfaG9vaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9wYWlyc19ob29rPU9yZGVyZWREaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2hvb2s9bGFtYmRhIHg6IE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KHApKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5CmluZGV4IDQ5ZjA1YWQuLjZhMDNlZWIgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVmYXVsdC5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2RlZmF1bHQucHkKQEAgLTQsNiArNCw2IEBACiAKIGNsYXNzIFRlc3REZWZhdWx0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGpzb24uZHVtcHModHlwZSwgZGVmYXVsdD1yZXByKSwKICAgICAgICAgICAgIGpzb24uZHVtcHMocmVwcih0eXBlKSkpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2R1bXAucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2R1bXAucHkKaW5kZXggZDI4OGMwZC4uODk5NzhlMCAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9kdW1wLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weQpAQCAtNyw3ICs3LDE1IEBACiAgICAgZGVmIHRlc3RfZHVtcChzZWxmKToKICAgICAgICAgc2lvID0gU3RyaW5nSU8oKQogICAgICAgICBqc29uLmR1bXAoe30sIHNpbykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2lvLmdldHZhbHVlKCksICd7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICd7fScpCiAKICAgICBkZWYgdGVzdF9kdW1wcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoanNvbi5kdW1wcyh7fSksICd7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5kdW1wcyh7fSksICd7fScpCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfdHJ1ZWZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24uZHVtcHMoCisgICAgICAgICAgICAgICAgIHtUcnVlOiBGYWxzZSwgRmFsc2U6IFRydWV9LCBzb3J0X2tleXM9VHJ1ZSksCisgICAgICAgICAgICAgICAgICd7ImZhbHNlIjogdHJ1ZSwgInRydWUiOiBmYWxzZX0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24uZHVtcHMoCisgICAgICAgICAgICAgICAgezI6IDMuMCwgNC4wOiA1TCwgRmFsc2U6IDEsIDZMOiBUcnVlfSwgc29ydF9rZXlzPVRydWUpLAorICAgICAgICAgICAgICAgICd7ImZhbHNlIjogMSwgIjIiOiAzLjAsICI0LjAiOiA1LCAiNiI6IHRydWV9JykKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5CmluZGV4IDM1MjQyM2UuLjBlNTAxMTAgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weQpAQCAtMSw2ICsxLDggQEAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiAKIGltcG9ydCBqc29uLmVuY29kZXIKK2Zyb20ganNvbiBpbXBvcnQgZHVtcHMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKIENBU0VTID0gWwogICAgICh1Jy9cXCJcdWNhZmVcdWJhYmVcdWFiOThcdWZjZGVcdWJjZGFcdWVmNGFceDA4XHgwY1xuXHJcdGAxfiFAIyQlXiYqKClfKy09W117fXw7OlwnLC4vPD4/JywgJyIvXFxcXFxcIlxcdWNhZmVcXHViYWJlXFx1YWI5OFxcdWZjZGVcXHViY2RhXFx1ZWY0YVxcYlxcZlxcblxcclxcdGAxfiFAIyQlXiYqKClfKy09W117fXw7OlwnLC4vPD4/IicpLApAQCAtMjYsMTAgKzI4LDIwIEBACiAgICAgICAgIHNlbGYuX3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoanNvbi5lbmNvZGVyLnB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKQogCiAgICAgZGVmIHRlc3RfY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzZWxmKToKKyAgICAgICAgaWYgbm90IGpzb24uZW5jb2Rlci5jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpOgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuX3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoanNvbi5lbmNvZGVyLmNfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpCiAKICAgICBkZWYgX3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoc2VsZiwgZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOgogICAgICAgICBmbmFtZSA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLl9fbmFtZV9fCiAgICAgICAgIGZvciBpbnB1dF9zdHJpbmcsIGV4cGVjdCBpbiBDQVNFUzoKICAgICAgICAgICAgIHJlc3VsdCA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKGlucHV0X3N0cmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdCwKKyAgICAgICAgICAgICAgICAnezAhcn0gIT0gezEhcn0gZm9yIHsyfSh7MyFyfSknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBleHBlY3QsIGZuYW1lLCBpbnB1dF9zdHJpbmcpKQorCisgICAgZGVmIHRlc3Rfb3JkZXJlZF9kaWN0KHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSA2MTA1CisgICAgICAgIGl0ZW1zID0gWygnb25lJywgMSksICgndHdvJywgMiksICgndGhyZWUnLCAzKSwgKCdmb3VyJywgNCksICgnZml2ZScsIDUpXQorICAgICAgICBzID0ganNvbi5kdW1wcyhPcmRlcmVkRGljdChpdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgJ3sib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDMsICJmb3VyIjogNCwgImZpdmUiOiA1fScpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkKaW5kZXggZWUzMWJmYS4uZGQ5ZWM0MSAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9mYWlsLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmFpbC5weQpAQCAtNzMsNCArNzMsMTMgQEAKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBmYWlsdXJlIGZvciBmYWlsJWQuanNvbjogJXIiICUgKGlkeCwgZG9jKSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGZhaWx1cmUgZm9yIGZhaWx7MH0uanNvbjogezEhcn0iLmZvcm1hdChpZHgsIGRvYykpCisKKyAgICBkZWYgdGVzdF9ub25fc3RyaW5nX2tleXNfZGljdChzZWxmKToKKyAgICAgICAgZGF0YSA9IHsnYScgOiAxLCAoMSwgMikgOiAyfQorCisgICAgICAgICNUaGlzIGlzIGZvciBjIGVuY29kZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBqc29uLmR1bXBzLCBkYXRhKQorCisgICAgICAgICNUaGlzIGlzIGZvciBweXRob24gZW5jb2RlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGpzb24uZHVtcHMsIGRhdGEsIGluZGVudD1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9mbG9hdC5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmxvYXQucHkKaW5kZXggOWRmNmQxZS4uZWMwY2FkMSAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9mbG9hdC5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X2Zsb2F0LnB5CkBAIC01LDUgKzUsMTUgQEAKIAogY2xhc3MgVGVzdEZsb2F0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6Ci0gICAgICAgIGZvciBudW0gaW4gWzE2MTcxNjE3NzEuNzY1MDAwMSwgbWF0aC5waSwgbWF0aC5waSoqMTAwLCBtYXRoLnBpKiotMTAwXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0KGpzb24uZHVtcHMobnVtKSksIG51bSkKKyAgICAgICAgZm9yIG51bSBpbiBbMTYxNzE2MTc3MS43NjUwMDAxLCBtYXRoLnBpLCBtYXRoLnBpKioxMDAsCisgICAgICAgICAgICAgICAgICAgIG1hdGgucGkqKi0xMDAsIDMuMV06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGpzb24uZHVtcHMobnVtKSksIG51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2Fkcyhqc29uLmR1bXBzKG51bSkpLCBudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHModW5pY29kZShqc29uLmR1bXBzKG51bSkpKSwgbnVtKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgZm9yIG51bSBpbiBbMSwgMUwsIDE8PDMyLCAxPDw2NF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24uZHVtcHMobnVtKSwgc3RyKG51bSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChqc29uLmR1bXBzKG51bSkpLCBudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMoanNvbi5kdW1wcyhudW0pKSwgbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHVuaWNvZGUoanNvbi5kdW1wcyhudW0pKSksIG51bSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfaW5kZW50LnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkKaW5kZXggNjA1NTE2Mi4uY2Q2MDhkOSAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkKQEAgLTM2LDYgKzM2LDYgQEAKICAgICAgICAgaDEgPSBqc29uLmxvYWRzKGQxKQogICAgICAgICBoMiA9IGpzb24ubG9hZHMoZDIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaDEsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGgyLCBoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkMiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgyLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MxLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMS5weQppbmRleCAyMTZlMjUyLi43MTljMTEzIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MxLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczEucHkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIyB0ZXN0IGluL291dCBlcXVpdmFsZW5jZSBhbmQgcGFyc2luZwogICAgICAgICByZXMgPSBqc29uLmxvYWRzKEpTT04pCiAgICAgICAgIG91dCA9IGpzb24uZHVtcHMocmVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMsIGpzb24ubG9hZHMob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGpzb24ubG9hZHMob3V0KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAganNvbi5kdW1wcyhyZXMsIGFsbG93X25hbj1GYWxzZSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MyLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMi5weQppbmRleCA4MGQ4NDMzLi4zNzkxMTdlIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MyLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczIucHkKQEAgLTExLDQgKzExLDQgQEAKICAgICAgICAgIyB0ZXN0IGluL291dCBlcXVpdmFsZW5jZSBhbmQgcGFyc2luZwogICAgICAgICByZXMgPSBqc29uLmxvYWRzKEpTT04pCiAgICAgICAgIG91dCA9IGpzb24uZHVtcHMocmVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMsIGpzb24ubG9hZHMob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGpzb24ubG9hZHMob3V0KSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczMucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5CmluZGV4IDc3ZDg3YjIuLjkxNTFjNDMgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczMucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMy5weQpAQCAtMTcsNCArMTcsNCBAQAogICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCiAgICAgICAgIHJlcyA9IGpzb24ubG9hZHMoSlNPTikKICAgICAgICAgb3V0ID0ganNvbi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywganNvbi5sb2FkcyhvdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywganNvbi5sb2FkcyhvdXQpKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9yZWN1cnNpb24ucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3JlY3Vyc2lvbi5weQppbmRleCAwNzNkM2MxLi4xZTliOGFiIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3JlY3Vyc2lvbi5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3JlY3Vyc2lvbi5weQpAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgZGVmIHRlc3RfZGVmYXVsdHJlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZW5jID0gUmVjdXJzaXZlSlNPTkVuY29kZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbmMuZW5jb2RlKEpTT05UZXN0T2JqZWN0KSwgJyJKU09OVGVzdE9iamVjdCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuYy5lbmNvZGUoSlNPTlRlc3RPYmplY3QpLCAnIkpTT05UZXN0T2JqZWN0IicpCiAgICAgICAgIGVuYy5yZWN1cnNlID0gVHJ1ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmMuZW5jb2RlKEpTT05UZXN0T2JqZWN0KQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9zY2Fuc3RyaW5nLnB5IGIvTGliL2pzb24vdGVzdHMvdGVzdF9zY2Fuc3RyaW5nLnB5CmluZGV4IDZiNjAwZGIuLmJmM2NjZDUgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2NhbnN0cmluZy5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3NjYW5zdHJpbmcucHkKQEAgLTEzLDkyICsxMyw5MiBAQAogICAgICAgICBzZWxmLl90ZXN0X3NjYW5zdHJpbmcoanNvbi5kZWNvZGVyLmNfc2NhbnN0cmluZykKIAogICAgIGRlZiBfdGVzdF9zY2Fuc3RyaW5nKHNlbGYsIHNjYW5zdHJpbmcpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJyJ6XFx1ZDgzNFxcdWRkMjB4IicsIDEsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnelxVMDAwMWQxMjB4JywgMTYpKQogCiAgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID09IDY1NTM1OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIHNjYW5zdHJpbmcodScielxVMDAwMWQxMjB4IicsIDEsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgICAgICh1J3pcVTAwMDFkMTIweCcsIDYpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIHNjYW5zdHJpbmcodScielxVMDAwMWQxMjB4IicsIDEsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgICAgICh1J3pcVTAwMDFkMTIweCcsIDUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnIlxcdTAwN2IiJywgMSwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSd7JywgOCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCciQSBKU09OIHBheWxvYWQgc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhcnJheSwgbm90IGEgc3RyaW5nLiInLCAxLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0EgSlNPTiBwYXlsb2FkIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYXJyYXksIG5vdCBhIHN0cmluZy4nLCA2MCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIlVuY2xvc2VkIGFycmF5IicsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnVW5jbG9zZWQgYXJyYXknLCAxNykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbImV4dHJhIGNvbW1hIixdJywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdleHRyYSBjb21tYScsIDE0KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siZG91YmxlIGV4dHJhIGNvbW1hIiwsXScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnZG91YmxlIGV4dHJhIGNvbW1hJywgMjEpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnWyJDb21tYSBhZnRlciB0aGUgY2xvc2UiXSwnLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0NvbW1hIGFmdGVyIHRoZSBjbG9zZScsIDI0KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siRXh0cmEgY2xvc2UiXV0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0V4dHJhIGNsb3NlJywgMTQpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygneyJFeHRyYSBjb21tYSI6IHRydWUsfScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnRXh0cmEgY29tbWEnLCAxNCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IkV4dHJhIHZhbHVlIGFmdGVyIGNsb3NlIjogdHJ1ZX0gIm1pc3BsYWNlZCBxdW90ZWQgdmFsdWUiJywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdFeHRyYSB2YWx1ZSBhZnRlciBjbG9zZScsIDI2KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siSWxsZWdhbCBleHByZXNzaW9uIjogMSArIDJ9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdJbGxlZ2FsIGV4cHJlc3Npb24nLCAyMSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IklsbGVnYWwgaW52b2NhdGlvbiI6IGFsZXJ0KCl9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdJbGxlZ2FsIGludm9jYXRpb24nLCAyMSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7Ik51bWJlcnMgY2Fubm90IGhhdmUgbGVhZGluZyB6ZXJvZXMiOiAwMTN9JywgMiwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdOdW1iZXJzIGNhbm5vdCBoYXZlIGxlYWRpbmcgemVyb2VzJywgMzcpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygneyJOdW1iZXJzIGNhbm5vdCBiZSBoZXgiOiAweDE0fScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnTnVtYmVycyBjYW5ub3QgYmUgaGV4JywgMjQpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygnW1tbW1tbW1tbW1tbW1tbW1tbW1siVG9vIGRlZXAiXV1dXV1dXV1dXV1dXV1dXV1dXV0nLCAyMSwgTm9uZSwgVHJ1ZSksCiAgICAgICAgICAgICAodSdUb28gZGVlcCcsIDMwKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siTWlzc2luZyBjb2xvbiIgbnVsbH0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J01pc3NpbmcgY29sb24nLCAxNikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IkRvdWJsZSBjb2xvbiI6OiBudWxsfScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnRG91YmxlIGNvbG9uJywgMTUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgc2NhbnN0cmluZygneyJDb21tYSBpbnN0ZWFkIG9mIGNvbG9uIiwgbnVsbH0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0NvbW1hIGluc3RlYWQgb2YgY29sb24nLCAyNSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIkNvbG9uIGluc3RlYWQgb2YgY29tbWEiOiBmYWxzZV0nLCAyLCBOb25lLCBUcnVlKSwKICAgICAgICAgICAgICh1J0NvbG9uIGluc3RlYWQgb2YgY29tbWEnLCAyNSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIkJhZCB2YWx1ZSIsIHRydXRoXScsIDIsIE5vbmUsIFRydWUpLAogICAgICAgICAgICAgKHUnQmFkIHZhbHVlJywgMTIpKQogCkBAIC0xMDcsMyArMTA3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInh4eCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi5lbmNvZGVyLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLCBiInh4XHhmZiIpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwganNvbi5kZWNvZGVyLnNjYW5zdHJpbmcsIGIieHh4Iiwgc3lzLm1heHNpemUrMSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2VwYXJhdG9ycy5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2VwYXJhdG9ycy5weQppbmRleCAzMmRiMzQxLi5kNWI5MmJkIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X3NlcGFyYXRvcnMucHkKKysrIGIvTGliL2pzb24vdGVzdHMvdGVzdF9zZXBhcmF0b3JzLnB5CkBAIC0zNyw2ICszNyw2IEBACiAgICAgICAgIGgxID0ganNvbi5sb2FkcyhkMSkKICAgICAgICAgaDIgPSBqc29uLmxvYWRzKGQyKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGgxLCBoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoMiwgaCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZDIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMSwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZXhwZWN0KQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9zcGVlZHVwcy5weSBiL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc3BlZWR1cHMucHkKaW5kZXggOGZmOWEzOC4uM2I0Y2NiMyAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF9zcGVlZHVwcy5weQorKysgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3NwZWVkdXBzLnB5CkBAIC0xLDE1ICsxLDI0IEBACiBpbXBvcnQgZGVjaW1hbAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIAotZnJvbSBqc29uIGltcG9ydCBkZWNvZGVyCi1mcm9tIGpzb24gaW1wb3J0IGVuY29kZXIKK2Zyb20ganNvbiBpbXBvcnQgZGVjb2RlciwgZW5jb2Rlciwgc2Nhbm5lcgogCiBjbGFzcyBUZXN0U3BlZWR1cHMoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3NjYW5zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuc2NhbnN0cmluZy5fX21vZHVsZV9fLCAiX2pzb24iKQotICAgICAgICBzZWxmLmFzc2VydF8oZGVjb2Rlci5zY2Fuc3RyaW5nIGlzIGRlY29kZXIuY19zY2Fuc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuc2NhbnN0cmluZy5fX21vZHVsZV9fLCAiX2pzb24iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVjb2Rlci5zY2Fuc3RyaW5nIGlzIGRlY29kZXIuY19zY2Fuc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuX19tb2R1bGVfXywgIl9qc29uIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgaXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLl9fbW9kdWxlX18sICJfanNvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbmNvZGVyLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIuY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSkKKworY2xhc3MgVGVzdERlY29kZShUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWFrZV9zY2FubmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2Nhbm5lci5jX21ha2Vfc2Nhbm5lciwgMSkKKworICAgIGRlZiB0ZXN0X21ha2VfZW5jb2RlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBlbmNvZGVyLmNfbWFrZV9lbmNvZGVyLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICJceENEXHg3RFx4M0RceDRFXHgxMlx4NENceEY5XHg3OVx4RDdceDUyXHhCQVx4ODJceEYyXHgyN1x4NEFceDdEXHhBMFx4Q0FceDc1IiwKKyAgICAgICAgICAgIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3VuaWNvZGUucHkgYi9MaWIvanNvbi90ZXN0cy90ZXN0X3VuaWNvZGUucHkKaW5kZXggM2FjNDU0MS4uYWQ3ZmUyNCAxMDA2NDQKLS0tIGEvTGliL2pzb24vdGVzdHMvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi9qc29uL3Rlc3RzL3Rlc3RfdW5pY29kZS5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiAKIGltcG9ydCBqc29uCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogCiBjbGFzcyBUZXN0VW5pY29kZShUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW5jb2RpbmcxKHNlbGYpOgpAQCAtOSw0NyArMTAsNzMgQEAKICAgICAgICAgcyA9IHUuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIGp1ID0gZW5jb2Rlci5lbmNvZGUodSkKICAgICAgICAganMgPSBlbmNvZGVyLmVuY29kZShzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqdSwganMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanUsIGpzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RpbmcyKHNlbGYpOgogICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwogICAgICAgICBzID0gdS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICAganUgPSBqc29uLmR1bXBzKHUsIGVuY29kaW5nPSd1dGYtOCcpCiAgICAgICAgIGpzID0ganNvbi5kdW1wcyhzLCBlbmNvZGluZz0ndXRmLTgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqdSwganMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanUsIGpzKQogCiAgICAgZGVmIHRlc3RfZW5jb2RpbmczKHNlbGYpOgogICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwogICAgICAgICBqID0ganNvbi5kdW1wcyh1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqLCAnIlxcdTAzYjFcXHUwM2E5IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaiwgJyJcXHUwM2IxXFx1MDNhOSInKQogCiAgICAgZGVmIHRlc3RfZW5jb2Rpbmc0KHNlbGYpOgogICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwogICAgICAgICBqID0ganNvbi5kdW1wcyhbdV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGosICdbIlxcdTAzYjFcXHUwM2E5Il0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosICdbIlxcdTAzYjFcXHUwM2E5Il0nKQogCiAgICAgZGVmIHRlc3RfZW5jb2Rpbmc1KHNlbGYpOgogICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwogICAgICAgICBqID0ganNvbi5kdW1wcyh1LCBlbnN1cmVfYXNjaWk9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGosIHUnInswfSInLmZvcm1hdCh1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqLCB1JyJ7MH0iJy5mb3JtYXQodSkpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZzYoc2VsZik6CiAgICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCiAgICAgICAgIGogPSBqc29uLmR1bXBzKFt1XSwgZW5zdXJlX2FzY2lpPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqLCB1J1siezB9Il0nLmZvcm1hdCh1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqLCB1J1siezB9Il0nLmZvcm1hdCh1KSkKIAogICAgIGRlZiB0ZXN0X2JpZ191bmljb2RlX2VuY29kZShzZWxmKToKICAgICAgICAgdSA9IHUnXFUwMDAxZDEyMCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoanNvbi5kdW1wcyh1KSwgJyJcXHVkODM0XFx1ZGQyMCInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqc29uLmR1bXBzKHUsIGVuc3VyZV9hc2NpaT1GYWxzZSksIHUnIlxVMDAwMWQxMjAiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmR1bXBzKHUpLCAnIlxcdWQ4MzRcXHVkZDIwIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5kdW1wcyh1LCBlbnN1cmVfYXNjaWk9RmFsc2UpLCB1JyJcVTAwMDFkMTIwIicpCiAKICAgICBkZWYgdGVzdF9iaWdfdW5pY29kZV9kZWNvZGUoc2VsZik6CiAgICAgICAgIHUgPSB1J3pcVTAwMDFkMTIweCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoanNvbi5sb2FkcygnIicgKyB1ICsgJyInKSwgdSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoanNvbi5sb2FkcygnInpcXHVkODM0XFx1ZGQyMHgiJyksIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcygnIicgKyB1ICsgJyInKSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKCcielxcdWQ4MzRcXHVkZDIweCInKSwgdSkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfZGVjb2RlKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAweGQ3ZmYpOgogICAgICAgICAgICAgdSA9IHVuaWNocihpKQotICAgICAgICAgICAganMgPSAnIlxcdXswOjA0eH0iJy5mb3JtYXQoaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGpzb24ubG9hZHMoanMpLCB1KQorICAgICAgICAgICAgcyA9ICciXFx1ezA6MDR4fSInLmZvcm1hdChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHMpLCB1KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X3BhaXJzX2hvb2tfd2l0aF91bmljb2RlKHNlbGYpOgorICAgICAgICBzID0gdSd7InhrZCI6MSwgImtjdyI6MiwgImFydCI6MywgImh4bSI6NCwgInFydCI6NSwgInBhZCI6NiwgImhveSI6N30nCisgICAgICAgIHAgPSBbKHUieGtkIiwgMSksICh1ImtjdyIsIDIpLCAodSJhcnQiLCAzKSwgKHUiaHhtIiwgNCksCisgICAgICAgICAgICAgKHUicXJ0IiwgNSksICh1InBhZCIsIDYpLCAodSJob3kiLCA3KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHMpLCBldmFsKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpzb24ubG9hZHMocywgb2JqZWN0X3BhaXJzX2hvb2sgPSBsYW1iZGEgeDogeCksIHApCisgICAgICAgIG9kID0ganNvbi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vayA9IE9yZGVyZWREaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLCBPcmRlcmVkRGljdChwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG9kKSwgT3JkZXJlZERpY3QpCisgICAgICAgICMgdGhlIG9iamVjdF9wYWlyc19ob29rIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlIG9iamVjdF9ob29rCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanNvbi5sb2FkcyhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2sgPSBPcmRlcmVkRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9ob29rID0gbGFtYmRhIHg6IE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KHApKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqc29uLmxvYWRzKHUneyJhIjogIlx4ZTkifScuZW5jb2RlKCd1dGYtOCcpKSwKKyAgICAgICAgICAgIHsnYSc6IHUnXHhlOSd9KQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9wcmVzZXJ2YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShqc29uLmxvYWRzKHUnIiInKSksIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShqc29uLmxvYWRzKHUnImEiJykpLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoanNvbi5sb2Fkcyh1J1siYSJdJylbMF0pLCB1bmljb2RlKQorICAgICAgICAjIElzc3VlIDEwMDM4LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoanNvbi5sb2FkcygnImZvbyInKSksIHVuaWNvZGUpCmRpZmYgLS1naXQgYS9MaWIvanNvbi90b29sLnB5IGIvTGliL2pzb24vdG9vbC5weQppbmRleCBkYWVkYmI1Li5jMzdiYjc3IDEwMDY0NAotLS0gYS9MaWIvanNvbi90b29sLnB5CisrKyBiL0xpYi9qc29uL3Rvb2wucHkKQEAgLTIsMTEgKzIsMTEgQEAKIAogVXNhZ2U6OgogCi0gICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW1qc29uLnRvb2wKKyAgICAkIGVjaG8gJ3sianNvbiI6Im9iaiJ9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKICAgICB7CiAgICAgICAgICJqc29uIjogIm9iaiIKICAgICB9Ci0gICAgJCBlY2hvICd7IDEuMjozLjR9JyB8IHB5dGhvbiAtbWpzb24udG9vbAorICAgICQgZWNobyAneyAxLjI6My40fScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgRXhwZWN0aW5nIHByb3BlcnR5IG5hbWU6IGxpbmUgMSBjb2x1bW4gMiAoY2hhciAyKQogCiAiIiIKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAgICAgaW5maWxlID0gb3BlbihzeXMuYXJndlsxXSwgJ3JiJykKICAgICAgICAgb3V0ZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMl0sICd3YicpCiAgICAgZWxzZToKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiezB9IFtpbmZpbGUgW291dGZpbGVdXSIuZm9ybWF0KHN5cy5hcmd2WzBdKSkKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChzeXMuYXJndlswXSArICIgW2luZmlsZSBbb3V0ZmlsZV1dIikKICAgICB0cnk6CiAgICAgICAgIG9iaiA9IGpzb24ubG9hZChpbmZpbGUpCiAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL0ZpbGVEaWFsb2cucHkgYi9MaWIvbGliLXRrL0ZpbGVEaWFsb2cucHkKaW5kZXggYjA4ZDNhOC4uMDZjZTJiOSAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay9GaWxlRGlhbG9nLnB5CisrKyBiL0xpYi9saWItdGsvRmlsZURpYWxvZy5weQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIHNlbGYudG9wLmJpbmQoJzxBbHQtVz4nLCBzZWxmLmNhbmNlbF9jb21tYW5kKQogCiAgICAgZGVmIGdvKHNlbGYsIGRpcl9vcl9maWxlPW9zLmN1cmRpciwgcGF0dGVybj0iKiIsIGRlZmF1bHQ9IiIsIGtleT1Ob25lKToKLSAgICAgICAgaWYga2V5IGFuZCBkaWFsb2dzdGF0ZXMuaGFzX2tleShrZXkpOgorICAgICAgICBpZiBrZXkgYW5kIGtleSBpbiBkaWFsb2dzdGF0ZXM6CiAgICAgICAgICAgICBzZWxmLmRpcmVjdG9yeSwgcGF0dGVybiA9IGRpYWxvZ3N0YXRlc1trZXldCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkaXJfb3JfZmlsZSA9IG9zLnBhdGguZXhwYW5kdXNlcihkaXJfb3JfZmlsZSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvRml4VGsucHkgYi9MaWIvbGliLXRrL0ZpeFRrLnB5CmluZGV4IDM3NWMzNGMuLjQ5OTYwYzcgMTAwNjQ0Ci0tLSBhL0xpYi9saWItdGsvRml4VGsucHkKKysrIGIvTGliL2xpYi10ay9GaXhUay5weQpAQCAtNTQsNyArNTQsNyBAQAogIyBpZiB0aGlzIGRvZXMgbm90IGV4aXN0LCBubyBmdXJ0aGVyIHNlYXJjaCBpcyBuZWVkZWQKIGlmIG9zLnBhdGguZXhpc3RzKHByZWZpeCk6CiAgICAgcHJlZml4ID0gY29udmVydF9wYXRoKHByZWZpeCkKLSAgICBpZiBub3Qgb3MuZW52aXJvbi5oYXNfa2V5KCJUQ0xfTElCUkFSWSIpOgorICAgIGlmICJUQ0xfTElCUkFSWSIgbm90IGluIG9zLmVudmlyb246CiAgICAgICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIocHJlZml4KToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgidGNsIik6CiAgICAgICAgICAgICAgICAgdGNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCxuYW1lKQpAQCAtNjQsMTMgKzY0LDEzIEBACiAgICAgIyBhcyBUY2wKICAgICBpbXBvcnQgX3RraW50ZXIKICAgICB2ZXIgPSBzdHIoX3RraW50ZXIuVENMX1ZFUlNJT04pCi0gICAgaWYgbm90IG9zLmVudmlyb24uaGFzX2tleSgiVEtfTElCUkFSWSIpOgorICAgIGlmICJUS19MSUJSQVJZIiBub3QgaW4gb3MuZW52aXJvbjoKICAgICAgICAgdiA9IG9zLnBhdGguam9pbihwcmVmaXgsICd0aycrdmVyKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odiwgInRjbEluZGV4IikpOgogICAgICAgICAgICAgb3MuZW52aXJvblsnVEtfTElCUkFSWSddID0gdgogICAgICMgV2UgZG9uJ3Qga25vdyB0aGUgVGl4IHZlcnNpb24sIHNvIHdlIG11c3Qgc2VhcmNoIHRoZSBlbnRpcmUKICAgICAjIGRpcmVjdG9yeQotICAgIGlmIG5vdCBvcy5lbnZpcm9uLmhhc19rZXkoIlRJWF9MSUJSQVJZIik6CisgICAgaWYgIlRJWF9MSUJSQVJZIiBub3QgaW4gb3MuZW52aXJvbjoKICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwcmVmaXgpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJ0aXgiKToKICAgICAgICAgICAgICAgICB0aXhkaXIgPSBvcy5wYXRoLmpvaW4ocHJlZml4LG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL1Njcm9sbGVkVGV4dC5weSBiL0xpYi9saWItdGsvU2Nyb2xsZWRUZXh0LnB5CmluZGV4IDgwNzZiYzQuLmExZWY3OWMgMTAwNjQ0Ci0tLSBhL0xpYi9saWItdGsvU2Nyb2xsZWRUZXh0LnB5CisrKyBiL0xpYi9saWItdGsvU2Nyb2xsZWRUZXh0LnB5CkBAIC0yNyw4ICsyNywxMSBAQAogICAgICAgICBzZWxmLnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgsIGV4cGFuZD1UcnVlKQogICAgICAgICBzZWxmLnZiYXJbJ2NvbW1hbmQnXSA9IHNlbGYueXZpZXcKIAotICAgICAgICAjIENvcHkgZ2VvbWV0cnkgbWV0aG9kcyBvZiBzZWxmLmZyYW1lIC0tIGhhY2shCisgICAgICAgICMgQ29weSBnZW9tZXRyeSBtZXRob2RzIG9mIHNlbGYuZnJhbWUgd2l0aG91dCBvdmVycmlkaW5nIFRleHQKKyAgICAgICAgIyBtZXRob2RzIC0tIGhhY2shCisgICAgICAgIHRleHRfbWV0aHMgPSB2YXJzKFRleHQpLmtleXMoKQogICAgICAgICBtZXRob2RzID0gdmFycyhQYWNrKS5rZXlzKCkgKyB2YXJzKEdyaWQpLmtleXMoKSArIHZhcnMoUGxhY2UpLmtleXMoKQorICAgICAgICBtZXRob2RzID0gc2V0KG1ldGhvZHMpLmRpZmZlcmVuY2UodGV4dF9tZXRocykKIAogICAgICAgICBmb3IgbSBpbiBtZXRob2RzOgogICAgICAgICAgICAgaWYgbVswXSAhPSAnXycgYW5kIG0gIT0gJ2NvbmZpZycgYW5kIG0gIT0gJ2NvbmZpZ3VyZSc6CmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL1RpeC5weSBiL0xpYi9saWItdGsvVGl4LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNzM3NTg2NC4uYzgxY2M4MwotLS0gYS9MaWIvbGliLXRrL1RpeC5weQorKysgYi9MaWIvbGliLXRrL1RpeC5weQpAQCAtNDYsNiArNDYsMjEgQEAKIEFVVE8gPSAnYXV0bycKIEFDUk9TU1RPUCA9ICdhY3Jvc3N0b3AnCiAKKyMgQSBmZXcgdXNlZnVsIGNvbnN0YW50cyBmb3IgdGhlIEdyaWQgd2lkZ2V0CitBU0NJSSA9ICdhc2NpaScKK0NFTEwgPSAnY2VsbCcKK0NPTFVNTiA9ICdjb2x1bW4nCitERUNSRUFTSU5HID0gJ2RlY3JlYXNpbmcnCitJTkNSRUFTSU5HID0gJ2luY3JlYXNpbmcnCitJTlRFR0VSID0gJ2ludGVnZXInCitNQUlOID0gJ21haW4nCitNQVggPSAnbWF4JworUkVBTCA9ICdyZWFsJworUk9XID0gJ3JvdycKK1NfUkVHSU9OID0gJ3MtcmVnaW9uJworWF9SRUdJT04gPSAneC1yZWdpb24nCitZX1JFR0lPTiA9ICd5LXJlZ2lvbicKKwogIyBTb21lIGNvbnN0YW50cyB1c2VkIGJ5IFRraW50ZXIgZG9vbmVldmVudCgpCiBUQ0xfRE9OVF9XQUlUICAgICA9IDEgPDwgMQogVENMX1dJTkRPV19FVkVOVFMgPSAxIDw8IDIKQEAgLTMyMSw3ICszMzYsNyBAQAogICAgICMgV2UgY2FuIGV2ZW4gZG8gdy5vay5pbnZva2UoKSBiZWNhdXNlIHcub2sgaXMgc3ViY2xhc3NlZCBmcm9tIHRoZQogICAgICMgQnV0dG9uIGNsYXNzIGlmIHlvdSBnbyB0aHJvdWdoIHRoZSBwcm9wZXIgY29uc3RydWN0b3JzCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBzZWxmLnN1YndpZGdldF9saXN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zdWJ3aWRnZXRfbGlzdDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLnN1YndpZGdldF9saXN0W25hbWVdCiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBuYW1lCiAKQEAgLTM5MCw3ICs0MDUsNyBAQAogICAgICAgICBlbGlmIGt3OiBjbmYgPSBrdwogICAgICAgICBvcHRpb25zID0gKCkKICAgICAgICAgZm9yIGssIHYgaW4gY25mLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBjYWxsYWJsZSh2KToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIodiwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3JlZ2lzdGVyKHYpCiAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyArICgnLScraywgdikKICAgICAgICAgcmV0dXJuIG1hc3Rlci50ay5jYWxsKCgnaW1hZ2UnLCAnY3JlYXRlJywgaW1ndHlwZSwpICsgb3B0aW9ucykKQEAgLTQ0OSw5ICs0NjQsOSBAQAogICAgICAgICAjIGFsc28gZGVzdHJveXMgdGhlIHBhcmVudCBOb3RlQm9vayB0aHVzIGxlYWRpbmcgdG8gYW4gZXhjZXB0aW9uCiAgICAgICAgICMgaW4gVGtpbnRlciB3aGVuIGl0IGZpbmFsbHkgY2FsbHMgVGNsIHRvIGRlc3Ryb3kgdGhlIE5vdGVCb29rCiAgICAgICAgIGZvciBjIGluIHNlbGYuY2hpbGRyZW4udmFsdWVzKCk6IGMuZGVzdHJveSgpCi0gICAgICAgIGlmIHNlbGYubWFzdGVyLmNoaWxkcmVuLmhhc19rZXkoc2VsZi5fbmFtZSk6CisgICAgICAgIGlmIHNlbGYuX25hbWUgaW4gc2VsZi5tYXN0ZXIuY2hpbGRyZW46CiAgICAgICAgICAgICBkZWwgc2VsZi5tYXN0ZXIuY2hpbGRyZW5bc2VsZi5fbmFtZV0KLSAgICAgICAgaWYgc2VsZi5tYXN0ZXIuc3Vid2lkZ2V0X2xpc3QuaGFzX2tleShzZWxmLl9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiBzZWxmLm1hc3Rlci5zdWJ3aWRnZXRfbGlzdDoKICAgICAgICAgICAgIGRlbCBzZWxmLm1hc3Rlci5zdWJ3aWRnZXRfbGlzdFtzZWxmLl9uYW1lXQogICAgICAgICBpZiBzZWxmLmRlc3Ryb3lfcGh5c2ljYWxseToKICAgICAgICAgICAgICMgVGhpcyBpcyBieXBhc3NlZCBvbmx5IGZvciBhIGZldyB3aWRnZXRzCkBAIC00NzMsOCArNDg4LDggQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtdHlwZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgbWFzdGVyID0gX2RlZmF1bHRfcm9vdCAgICAgICAgICAgICAgIyBnbG9iYWwgZnJvbSBUa2ludGVyCi0gICAgICAgIGlmIG5vdCBtYXN0ZXIgYW5kIGNuZi5oYXNfa2V5KCdyZWZ3aW5kb3cnKTogbWFzdGVyPWNuZlsncmVmd2luZG93J10KLSAgICAgICAgZWxpZiBub3QgbWFzdGVyIGFuZCBrdy5oYXNfa2V5KCdyZWZ3aW5kb3cnKTogIG1hc3Rlcj0ga3dbJ3JlZndpbmRvdyddCisgICAgICAgIGlmIG5vdCBtYXN0ZXIgYW5kICdyZWZ3aW5kb3cnIGluIGNuZjogbWFzdGVyPWNuZlsncmVmd2luZG93J10KKyAgICAgICAgZWxpZiBub3QgbWFzdGVyIGFuZCAncmVmd2luZG93JyBpbiBrdzogIG1hc3Rlcj0ga3dbJ3JlZndpbmRvdyddCiAgICAgICAgIGVsaWYgbm90IG1hc3RlcjogcmFpc2UgUnVudGltZUVycm9yLCAiVG9vIGVhcmx5IHRvIGNyZWF0ZSBkaXNwbGF5IHN0eWxlOiBubyByb290IHdpbmRvdyIKICAgICAgICAgc2VsZi50ayA9IG1hc3Rlci50awogICAgICAgICBzZWxmLnN0eWxlbmFtZSA9IHNlbGYudGsuY2FsbCgndGl4RGlzcGxheVN0eWxlJywgaXRlbXR5cGUsCkBAIC01NTYsNyArNTcxLDcgQEAKICAgICAgICAgcmV0dXJuIGJ0bgogCiAgICAgZGVmIGludm9rZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgc2VsZi5zdWJ3aWRnZXRfbGlzdC5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuc3Vid2lkZ2V0X2xpc3Q6CiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScsIG5hbWUpCiAKIGNsYXNzIENvbWJvQm94KFRpeFdpZGdldCk6CkBAIC04NTAsNyArODY1LDcgQEAKICAgICAgICAgIyBGSVhNRTogcmV0dXJuIHB5dGhvbiBvYmplY3QKICAgICAgICAgcGFzcwogCi1jbGFzcyBITGlzdChUaXhXaWRnZXQpOgorY2xhc3MgSExpc3QoVGl4V2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIkhMaXN0IC0gSGllcmFyY2h5IGRpc3BsYXkgIHdpZGdldCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGFueSBkYXRhCiAgICAgdGhhdCBoYXZlIGEgaGllcmFyY2hpY2FsIHN0cnVjdHVyZSwgZm9yIGV4YW1wbGUsIGZpbGUgc3lzdGVtIGRpcmVjdG9yeQogICAgIHRyZWVzLiBUaGUgbGlzdCBlbnRyaWVzIGFyZSBpbmRlbnRlZCBhbmQgY29ubmVjdGVkIGJ5IGJyYW5jaCBsaW5lcwpAQCAtOTYxLDYgKzk3NiwxMCBAQAogICAgIGRlZiBpbmZvX2FuY2hvcihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdhbmNob3InKQogCisgICAgZGVmIGluZm9fYmJveChzZWxmLCBlbnRyeSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdiYm94JywgZW50cnkpKSBvciBOb25lCisKICAgICBkZWYgaW5mb19jaGlsZHJlbihzZWxmLCBlbnRyeT1Ob25lKToKICAgICAgICAgYyA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdjaGlsZHJlbicsIGVudHJ5KQogICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3QoYykKQEAgLTk2OCw2ICs5ODcsMTIgQEAKICAgICBkZWYgaW5mb19kYXRhKHNlbGYsIGVudHJ5KToKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdkYXRhJywgZW50cnkpCiAKKyAgICBkZWYgaW5mb19kcmFnc2l0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdkcmFnc2l0ZScpCisKKyAgICBkZWYgaW5mb19kcm9wc2l0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdkcm9wc2l0ZScpCisKICAgICBkZWYgaW5mb19leGlzdHMoc2VsZiwgZW50cnkpOgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbmZvJywgJ2V4aXN0cycsIGVudHJ5KQogCkBAIC0xMDM3LDEyICsxMDYyLDYgQEAKICAgICBkZWYgc2hvd19lbnRyeShzZWxmLCBlbnRyeSk6CiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3Nob3cnLCAnZW50cnknLCBlbnRyeSkKIAotICAgIGRlZiB4dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAqYXJncykKLQotICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAqYXJncykKLQogY2xhc3MgSW5wdXRPbmx5KFRpeFdpZGdldCk6CiAgICAgIiIiSW5wdXRPbmx5IC0gSW52aXNpYmxlIHdpZGdldC4gVW5peCBvbmx5LgogCkBAIC0xMTgyLDcgKzEyMDEsOCBAQAogICAgIG1lbnUgICAgICAgICAgICBNZW51IiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCBjbmY9e30sICoqa3cpOgotICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGl4T3B0aW9uTWVudScsIFsnb3B0aW9ucyddLCBjbmYsIGt3KQorICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGl4T3B0aW9uTWVudScsCisgICAgICAgICAgICAgICAgWydsYWJlbHNpZGUnLCAnb3B0aW9ucyddLCBjbmYsIGt3KQogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0WydtZW51YnV0dG9uJ10gPSBfZHVtbXlNZW51YnV0dG9uKHNlbGYsICdtZW51YnV0dG9uJykKICAgICAgICAgc2VsZi5zdWJ3aWRnZXRfbGlzdFsnbWVudSddID0gX2R1bW15TWVudShzZWxmLCAnbWVudScpCiAKQEAgLTEyNDEsMTEgKzEyNjEsOCBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3BhbmVjb25maWd1cmUnLCBlbnRyeSwgKnNlbGYuX29wdGlvbnMoY25mLCBrdykpCiAKICAgICBkZWYgcGFuZXMoc2VsZik6Ci0gICAgICAgIG5hbWVzID0gc2VsZi50ay5jYWxsKHNlbGYuX3csICdwYW5lcycpCi0gICAgICAgIHJldCA9IFtdCi0gICAgICAgIGZvciB4IGluIG5hbWVzOgotICAgICAgICAgICAgcmV0LmFwcGVuZChzZWxmLnN1YndpZGdldCh4KSkKLSAgICAgICAgcmV0dXJuIHJldAorICAgICAgICBuYW1lcyA9IHNlbGYudGsuc3BsaXRsaXN0KHNlbGYudGsuY2FsbChzZWxmLl93LCAncGFuZXMnKSkKKyAgICAgICAgcmV0dXJuIFtzZWxmLnN1YndpZGdldCh4KSBmb3IgeCBpbiBuYW1lc10KIAogY2xhc3MgUG9wdXBNZW51KFRpeFdpZGdldCk6CiAgICAgIiIiUG9wdXBNZW51IHdpZGdldCBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50IG9mIHRoZSB0a19wb3B1cCBjb21tYW5kLgpAQCAtMTQxNiwxMCArMTQzMywxMCBAQAogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0WydoZWxwJ10gPSBfZHVtbXlCdXR0b24oc2VsZiwgJ2hlbHAnKQogCiAgICAgZGVmIGludm9rZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgc2VsZi5zdWJ3aWRnZXRfbGlzdC5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuc3Vid2lkZ2V0X2xpc3Q6CiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScsIG5hbWUpCiAKLWNsYXNzIFRMaXN0KFRpeFdpZGdldCk6CitjbGFzcyBUTGlzdChUaXhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiVExpc3QgLSBIaWVyYXJjaHkgZGlzcGxheSB3aWRnZXQgd2hpY2ggY2FuIGJlCiAgICAgdXNlZCB0byBkaXNwbGF5IGRhdGEgaW4gYSB0YWJ1bGFyIGZvcm1hdC4gVGhlIGxpc3QgZW50cmllcyBvZiBhIFRMaXN0CiAgICAgd2lkZ2V0IGFyZSBzaW1pbGFyIHRvIHRoZSBlbnRyaWVzIGluIHRoZSBUayBsaXN0Ym94IHdpZGdldC4gVGhlIG1haW4KQEAgLTE1MDIsMTIgKzE1MTksNiBAQAogICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGZpcnN0LCBsYXN0PU5vbmUpOgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdzZXQnLCBmaXJzdCwgbGFzdCkKIAotICAgIGRlZiB4dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAqYXJncykKLQotICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAqYXJncykKLQogY2xhc3MgVHJlZShUaXhXaWRnZXQpOgogICAgICIiIlRyZWUgLSBUaGUgdGl4VHJlZSB3aWRnZXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBoaWVyYWNoaWNhbAogICAgIGRhdGEgaW4gYSB0cmVlIGZvcm0uIFRoZSB1c2VyIGNhbiBhZGp1c3QKQEAgLTE1NjMsNyArMTU3NCw3IEBACiAgICAgIyBGSVhNRTogSXQgc2hvdWxkIGluaGVyaXQgLXN1cGVyY2xhc3MgdGl4VHJlZQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgVGl4V2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgJ3RpeENoZWNrTGlzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbJ29wdGlvbnMnXSwgY25mLCBrdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnb3B0aW9ucycsICdyYWRpbyddLCBjbmYsIGt3KQogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0WydobGlzdCddID0gX2R1bW15SExpc3Qoc2VsZiwgJ2hsaXN0JykKICAgICAgICAgc2VsZi5zdWJ3aWRnZXRfbGlzdFsndnNiJ10gPSBfZHVtbXlTY3JvbGxiYXIoc2VsZiwgJ3ZzYicpCiAgICAgICAgIHNlbGYuc3Vid2lkZ2V0X2xpc3RbJ2hzYiddID0gX2R1bW15U2Nyb2xsYmFyKHNlbGYsICdoc2InKQpAQCAtMTc3Nyw3ICsxNzg4LDcgQEAKICAgICBwYXNzCiAKIAotY2xhc3MgR3JpZChUaXhXaWRnZXQpOgorY2xhc3MgR3JpZChUaXhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgJycnVGhlIFRpeCBHcmlkIGNvbW1hbmQgY3JlYXRlcyBhIG5ldyB3aW5kb3cgIGFuZCBtYWtlcyBpdCBpbnRvIGEKICAgICB0aXhHcmlkIHdpZGdldC4gQWRkaXRpb25hbCBvcHRpb25zLCBtYXkgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kCiAgICAgbGluZSBvciBpbiB0aGUgb3B0aW9uIGRhdGFiYXNlIHRvIGNvbmZpZ3VyZSBhc3BlY3RzIHN1Y2ggYXMgaXRzIGN1cnNvcgpAQCAtMTgwMSwxNiArMTgxMiwyMSBAQAogICAgICAgICBUaXhXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGl4R3JpZCcsIHN0YXRpYywgY25mLCBrdykKIAogICAgICMgdmFsaWQgb3B0aW9ucyBhcyBvZiBUayA4LjQKLSAgICAjIGFuY2hvciwgYmR0eXBlLCBjZ2V0LCBjb25maWd1cmUsIGRlbGV0ZSwgZHJhZ3NpdGUsIGRyb3BzaXRlLCBlbnRyeWNnZXQsIGVkaXQKLSAgICAjIGVudHJ5Y29uZmlndXJlLCBmb3JtYXQsIGdlb21ldHJ5aW5mbywgaW5mbywgaW5kZXgsIG1vdmUsIG5lYXJlc3QsIHNlbGVjdGlvbgotICAgICMgc2V0LCBzaXplLCB1bnNldCwgeHZpZXcsIHl2aWV3Ci0gICAgIyBkZWYgYW5jaG9yIG9wdGlvbiA/YXJncyAuLi4/CisgICAgIyBhbmNob3IsIGJkdHlwZSwgY2dldCwgY29uZmlndXJlLCBkZWxldGUsIGRyYWdzaXRlLCBkcm9wc2l0ZSwgZW50cnljZ2V0LAorICAgICMgZWRpdCwgZW50cnljb25maWd1cmUsIGZvcm1hdCwgZ2VvbWV0cnlpbmZvLCBpbmZvLCBpbmRleCwgbW92ZSwgbmVhcmVzdCwKKyAgICAjIHNlbGVjdGlvbiwgc2V0LCBzaXplLCB1bnNldCwgeHZpZXcsIHl2aWV3CisgICAgZGVmIGFuY2hvcl9jbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgc2VsZWN0aW9uIGFuY2hvci4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdhbmNob3InLCAnY2xlYXInKQorCiAgICAgZGVmIGFuY2hvcl9nZXQoc2VsZik6CiAgICAgICAgICJHZXQgdGhlICh4LHkpIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnQgYW5jaG9yIGNlbGwiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLCAnYW5jaG9yJywgJ2dldCcpKQogCi0gICAgIyBkZWYgYmR0eXBlCi0gICAgIyBkZWYgZGVsZXRlIGRpbSBmcm9tID90bz8KKyAgICBkZWYgYW5jaG9yX3NldChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiU2V0IHRoZSBzZWxlY3Rpb24gYW5jaG9yIHRvIHRoZSBjZWxsIGF0ICh4LCB5KS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdhbmNob3InLCAnc2V0JywgeCwgeSkKKwogICAgIGRlZiBkZWxldGVfcm93KHNlbGYsIGZyb21fLCB0bz1Ob25lKToKICAgICAgICAgIiIiRGVsZXRlIHJvd3MgYmV0d2VlbiBmcm9tXyBhbmQgdG8gaW5jbHVzaXZlLgogICAgICAgICBJZiB0byBpcyBub3QgcHJvdmlkZWQsICBkZWxldGUgb25seSByb3cgYXQgZnJvbV8iIiIKQEAgLTE4MTgsNiArMTgzNCw3IEBACiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2RlbGV0ZScsICdyb3cnLCBmcm9tXykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZGVsZXRlJywgJ3JvdycsIGZyb21fLCB0bykKKwogICAgIGRlZiBkZWxldGVfY29sdW1uKHNlbGYsIGZyb21fLCB0bz1Ob25lKToKICAgICAgICAgIiIiRGVsZXRlIGNvbHVtbnMgYmV0d2VlbiBmcm9tXyBhbmQgdG8gaW5jbHVzaXZlLgogICAgICAgICBJZiB0byBpcyBub3QgcHJvdmlkZWQsICBkZWxldGUgb25seSBjb2x1bW4gYXQgZnJvbV8iIiIKQEAgLTE4MjUsMjYgKzE4NDIsNDkgQEAKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZGVsZXRlJywgJ2NvbHVtbicsIGZyb21fKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdkZWxldGUnLCAnY29sdW1uJywgZnJvbV8sIHRvKQotICAgICMgZGVmIGVkaXQgYXBwbHkKLSAgICAjIGRlZiBlZGl0IHNldCB4IHkKKworICAgIGRlZiBlZGl0X2FwcGx5KHNlbGYpOgorICAgICAgICAiIiJJZiBhbnkgY2VsbCBpcyBiZWluZyBlZGl0ZWQsIGRlLWhpZ2hsaWdodCB0aGUgY2VsbCAgYW5kICBhcHBsaWVzCisgICAgICAgIHRoZSBjaGFuZ2VzLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2VkaXQnLCAnYXBwbHknKQorCisgICAgZGVmIGVkaXRfc2V0KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJIaWdobGlnaHRzICB0aGUgIGNlbGwgIGF0ICAoeCwgeSkgZm9yIGVkaXRpbmcsIGlmIHRoZSAtZWRpdG5vdGlmeQorICAgICAgICBjb21tYW5kIHJldHVybnMgVHJ1ZSBmb3IgdGhpcyBjZWxsLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2VkaXQnLCAnc2V0JywgeCwgeSkKIAogICAgIGRlZiBlbnRyeWNnZXQoc2VsZiwgeCwgeSwgb3B0aW9uKToKICAgICAgICAgIkdldCB0aGUgb3B0aW9uIHZhbHVlIGZvciBjZWxsIGF0ICh4LHkpIgorICAgICAgICBpZiBvcHRpb24gYW5kIG9wdGlvblswXSAhPSAnLSc6CisgICAgICAgICAgICBvcHRpb24gPSAnLScgKyBvcHRpb24KICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLCAnZW50cnljZ2V0JywgeCwgeSwgb3B0aW9uKQogCi0gICAgZGVmIGVudHJ5Y29uZmlndXJlKHNlbGYsIHgsIHksICoqa3cpOgotICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYsICdlbnRyeWNvbmZpZ3VyZScsIHgsIHksICpzZWxmLl9vcHRpb25zKE5vbmUsIGt3KSkKKyAgICBkZWYgZW50cnljb25maWd1cmUoc2VsZiwgeCwgeSwgY25mPU5vbmUsICoqa3cpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlndXJlKCgnZW50cnljb25maWd1cmUnLCB4LCB5KSwgY25mLCBrdykKKwogICAgICMgZGVmIGZvcm1hdAogICAgICMgZGVmIGluZGV4CiAKICAgICBkZWYgaW5mb19leGlzdHMoc2VsZiwgeCwgeSk6CiAgICAgICAgICJSZXR1cm4gVHJ1ZSBpZiBkaXNwbGF5IGl0ZW0gZXhpc3RzIGF0ICh4LHkpIgotICAgICAgICByZXR1cm4gYm9vbChpbnQoc2VsZi50ay5jYWxsKHNlbGYsICdpbmZvJywgJ2V4aXN0cycsIHgsIHkpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldGJvb2xlYW4oc2VsZi50ay5jYWxsKHNlbGYsICdpbmZvJywgJ2V4aXN0cycsIHgsIHkpKQogCiAgICAgZGVmIGluZm9fYmJveChzZWxmLCB4LCB5KToKICAgICAgICAgIyBUaGlzIHNlZW1zIHRvIGFsd2F5cyByZXR1cm4gJycsIGF0IGxlYXN0IGZvciAndGV4dCcgZGlzcGxheWl0ZW1zCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZiwgJ2luZm8nLCAnYmJveCcsIHgsIHkpCiAKKyAgICBkZWYgbW92ZV9jb2x1bW4oc2VsZiwgZnJvbV8sIHRvLCBvZmZzZXQpOgorICAgICAgICAiIiJNb3ZlcyB0aGUgdGhlIHJhbmdlIG9mIGNvbHVtbnMgZnJvbSBwb3NpdGlvbiBGUk9NIHRocm91Z2ggVE8gYnkKKyAgICAgICAgdGhlIGRpc3RhbmNlIGluZGljYXRlZCBieSBPRkZTRVQuIEZvciBleGFtcGxlLCBtb3ZlX2NvbHVtbigyLCA0LCAxKQorICAgICAgICBtb3ZlcyB0aGUgY29sdW1ucyAyLDMsNCB0byBjb2x1bW5zIDMsNCw1LiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ21vdmUnLCAnY29sdW1uJywgZnJvbV8sIHRvLCBvZmZzZXQpCisKKyAgICBkZWYgbW92ZV9yb3coc2VsZiwgZnJvbV8sIHRvLCBvZmZzZXQpOgorICAgICAgICAiIiJNb3ZlcyB0aGUgdGhlIHJhbmdlIG9mIHJvd3MgZnJvbSBwb3NpdGlvbiBGUk9NIHRocm91Z2ggVE8gYnkKKyAgICAgICAgdGhlIGRpc3RhbmNlIGluZGljYXRlZCBieSBPRkZTRVQuCisgICAgICAgIEZvciBleGFtcGxlLCBtb3ZlX3JvdygyLCA0LCAxKSBtb3ZlcyB0aGUgcm93cyAyLDMsNCB0byByb3dzIDMsNCw1LiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ21vdmUnLCAncm93JywgZnJvbV8sIHRvLCBvZmZzZXQpCisKICAgICBkZWYgbmVhcmVzdChzZWxmLCB4LCB5KToKICAgICAgICAgIlJldHVybiBjb29yZGluYXRlIG9mIGNlbGwgbmVhcmVzdCBwaXhlbCBjb29yZGluYXRlICh4LHkpIgogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cyhzZWxmLnRrLmNhbGwoc2VsZiwgJ25lYXJlc3QnLCB4LCB5KSkKQEAgLTE4NTQsNyArMTg5NCw2IEBACiAgICAgIyBkZWYgc2VsZWN0aW9uIGluY2x1ZGVzCiAgICAgIyBkZWYgc2VsZWN0aW9uIHNldAogICAgICMgZGVmIHNlbGVjdGlvbiB0b2dnbGUKLSAgICAjIGRlZiBtb3ZlIGRpbSBmcm9tIHRvIG9mZnNldAogCiAgICAgZGVmIHNldChzZWxmLCB4LCB5LCBpdGVtdHlwZT1Ob25lLCAqKmt3KToKICAgICAgICAgYXJncz0gc2VsZi5fb3B0aW9ucyhzZWxmLmNuZiwga3cpCkBAIC0xODYyLDI0ICsxOTAxLDU5IEBACiAgICAgICAgICAgICBhcmdzPSAoJy1pdGVtdHlwZScsIGl0ZW10eXBlKSArIGFyZ3MKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdzZXQnLCB4LCB5LCAqYXJncykKIAotICAgICMgZGVmIHNpemUgZGltIGluZGV4ID9vcHRpb24gdmFsdWUgLi4uPwotICAgICMgZGVmIHVuc2V0IHggeQorICAgIGRlZiBzaXplX2NvbHVtbihzZWxmLCBpbmRleCwgKiprdyk6CisgICAgICAgICIiIlF1ZXJpZXMgIG9yICBzZXRzIHRoZSBzaXplIG9mIHRoZSBjb2x1bW4gZ2l2ZW4gYnkKKyAgICAgICAgSU5ERVguICBJTkRFWCBtYXkgYmUgYW55ICBub24tbmVnYXRpdmUKKyAgICAgICAgaW50ZWdlciAgdGhhdCAgZ2l2ZXMgIHRoZSAgcG9zaXRpb24gIG9mIGEgZ2l2ZW4gY29sdW1uLgorICAgICAgICBJTkRFWCBjYW4gYWxzbyBiZSB0aGUgc3RyaW5nICJkZWZhdWx0IjsgaW4gdGhpcyBjYXNlLCB0aGlzIGNvbW1hbmQKKyAgICAgICAgcXVlcmllcyBvciBzZXRzIHRoZSBkZWZhdWx0IHNpemUgb2YgYWxsIGNvbHVtbnMuCisgICAgICAgIFdoZW4gIG5vICBvcHRpb24tdmFsdWUgIHBhaXIgaXMgZ2l2ZW4sIHRoaXMgY29tbWFuZCByZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgY29udGFpbmluZyB0aGUgY3VycmVudCBzaXplIHNldHRpbmcgb2YgdGhlIGdpdmVuICBjb2x1bW4uICBXaGVuCisgICAgICAgIG9wdGlvbi12YWx1ZSAgcGFpcnMgIGFyZSAgZ2l2ZW4sICB0aGUgY29ycmVzcG9uZGluZyBvcHRpb25zIG9mIHRoZQorICAgICAgICBzaXplIHNldHRpbmcgb2YgdGhlIGdpdmVuIGNvbHVtbiBhcmUgY2hhbmdlZC4gT3B0aW9ucyBtYXkgYmUgb25lCisgICAgICAgIG9mICB0aGUgIGZvbGx3aW5nOgorICAgICAgICAgICAgICBwYWQwIHBpeGVscworICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzIHRoZSBwYWRkaW5ncyB0byB0aGUgbGVmdCBvZiBhIGNvbHVtbi4KKyAgICAgICAgICAgICAgcGFkMSBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFkZGluZ3MgdG8gdGhlIHJpZ2h0IG9mIGEgIGNvbHVtbi4KKyAgICAgICAgICAgICAgc2l6ZSB2YWwKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyAgdGhlICB3aWR0aCBvZiBhIGNvbHVtbiAuCisgICAgICAgICAgICAgICAgICAgICBWYWwgbWF5IGJlOiAiYXV0byIgLS0gdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gaXMgc2V0IHRoZQorICAgICAgICAgICAgICAgICAgICAgdGhlIHdpZGVzdCBjZWxsIGluIHRoZSBjb2x1bW47IGEgdmFsaWQgVGsgc2NyZWVuIGRpc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICB1bml0OyBvciBhIHJlYWwgbnVtYmVyIGZvbGxvd2luZyBieSB0aGUgd29yZCBjaGFycworICAgICAgICAgICAgICAgICAgICAgKGUuZy4gMy40Y2hhcnMpIHRoYXQgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdChzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NpemUnLCAnY29sdW1uJywgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWxmLl9vcHRpb25zKHt9LCBrdykpKQogCi0gICAgZGVmIHh2aWV3KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZiwgJ3h2aWV3JykpCi0gICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIGNvdW50LCB3aGF0PSJ1bml0cyIpOgotICAgICAgICAiU2Nyb2xsIHJpZ2h0IChjb3VudD4wKSBvciBsZWZ0IDxjb3VudD4gb2YgdW5pdHN8cGFnZXMiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAneHZpZXcnLCAnc2Nyb2xsJywgY291bnQsIHdoYXQpCisgICAgZGVmIHNpemVfcm93KHNlbGYsIGluZGV4LCAqKmt3KToKKyAgICAgICAgIiIiUXVlcmllcyAgb3IgIHNldHMgdGhlIHNpemUgb2YgdGhlIHJvdyBnaXZlbiBieQorICAgICAgICBJTkRFWC4gSU5ERVggbWF5IGJlIGFueSAgbm9uLW5lZ2F0aXZlCisgICAgICAgIGludGVnZXIgIHRoYXQgIGdpdmVzICB0aGUgIHBvc2l0aW9uICBvZiBhIGdpdmVuIHJvdyAuCisgICAgICAgIElOREVYIGNhbiBhbHNvIGJlIHRoZSBzdHJpbmcgImRlZmF1bHQiOyBpbiB0aGlzIGNhc2UsIHRoaXMgY29tbWFuZAorICAgICAgICBxdWVyaWVzIG9yIHNldHMgdGhlIGRlZmF1bHQgc2l6ZSBvZiBhbGwgcm93cy4KKyAgICAgICAgV2hlbiAgbm8gb3B0aW9uLXZhbHVlIHBhaXIgaXMgZ2l2ZW4sIHRoaXMgY29tbWFuZCByZXR1cm5zIGEgbGlzdCBjb24tCisgICAgICAgIHRhaW5pbmcgdGhlIGN1cnJlbnQgc2l6ZSBzZXR0aW5nIG9mIHRoZSBnaXZlbiAgcm93IC4gV2hlbiBvcHRpb24tdmFsdWUKKyAgICAgICAgcGFpcnMgYXJlIGdpdmVuLCB0aGUgY29ycmVzcG9uZGluZyBvcHRpb25zIG9mIHRoZSBzaXplIHNldHRpbmcgb2YgdGhlCisgICAgICAgIGdpdmVuIHJvdyBhcmUgY2hhbmdlZC4gT3B0aW9ucyBtYXkgYmUgb25lIG9mIHRoZSBmb2xsd2luZzoKKyAgICAgICAgICAgICAgcGFkMCBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFkZGluZ3MgdG8gdGhlIHRvcCBvZiBhIHJvdy4KKyAgICAgICAgICAgICAgcGFkMSBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFkZGluZ3MgdG8gdGhlIHRoZSBib3R0b20gb2YgYSByb3cuCisgICAgICAgICAgICAgIHNpemUgdmFsCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgIHRoZSBoZWlnaHQgb2YgYSByb3cuCisgICAgICAgICAgICAgICAgICAgICBWYWwgbWF5IGJlOiAiYXV0byIgLS0gdGhlIGhlaWdodCBvZiB0aGUgcm93ICBpcyAgc2V0ICB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHRoZSBoaWdoZXN0IGNlbGwgaW4gdGhlIHJvdzsgYSB2YWxpZCBUayBzY3JlZW4gZGlzdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgIHVuaXQ7IG9yIGEgcmVhbCBudW1iZXIgZm9sbG93aW5nIGJ5IHRoZSB3b3JkIGNoYXJzCisgICAgICAgICAgICAgICAgICAgICAoZS5nLiAzLjRjaGFycykgdGhhdCBzZXRzIHRoZSBoZWlnaHQgb2YgdGhlIHJvdyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdChzZWxmLnRrLmNhbGwoCisgICAgICAgICAgICAgICAgICAgIHNlbGYsICdzaXplJywgJ3JvdycsIGluZGV4LCAqc2VsZi5fb3B0aW9ucyh7fSwga3cpKSkKIAotICAgIGRlZiB5dmlldyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYsICd5dmlldycpKQotICAgIGRlZiB5dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwneXN2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB5dmlld19zY3JvbGwoc2VsZiwgY291bnQsIHdoYXQ9InVuaXRzIik6Ci0gICAgICAgICJTY3JvbGwgZG93biAoY291bnQ+MCkgb3IgdXAgPGNvdW50PiBvZiB1bml0c3xwYWdlcyIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICd5dmlldycsICdzY3JvbGwnLCBjb3VudCwgd2hhdCkKKyAgICBkZWYgdW5zZXQoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIkNsZWFycyB0aGUgY2VsbCBhdCAoeCwgeSkgYnkgcmVtb3ZpbmcgaXRzIGRpc3BsYXkgaXRlbS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd1bnNldCcsIHgsIHkpCisKIAogY2xhc3MgU2Nyb2xsZWRHcmlkKEdyaWQpOgogICAgICcnJ1Njcm9sbGVkIEdyaWQgd2lkZ2V0cycnJwpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay9Ua2ludGVyLnB5IGIvTGliL2xpYi10ay9Ua2ludGVyLnB5CmluZGV4IDNjY2UyNzYuLjE1MTZkNzkgMTAwNjQ0Ci0tLSBhL0xpYi9saWItdGsvVGtpbnRlci5weQorKysgYi9MaWIvbGliLXRrL1RraW50ZXIucHkKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAgICAgICAgIEEgd2lkZ2V0IHNwZWNpZmllZCBmb3IgdGhlIG9wdGlvbmFsIGRpc3BsYXlvZiBrZXl3b3JkCiAgICAgICAgIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgdGFyZ2V0IGRpc3BsYXkuIiIiCi0gICAgICAgIGlmIG5vdCBrdy5oYXNfa2V5KCdkaXNwbGF5b2YnKToga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdworICAgICAgICBpZiAnZGlzcGxheW9mJyBub3QgaW4ga3c6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKICAgICAgICAgc2VsZi50ay5jYWxsKCgnY2xpcGJvYXJkJywgJ2NsZWFyJykgKyBzZWxmLl9vcHRpb25zKGt3KSkKICAgICBkZWYgY2xpcGJvYXJkX2FwcGVuZChzZWxmLCBzdHJpbmcsICoqa3cpOgogICAgICAgICAiIiJBcHBlbmQgU1RSSU5HIHRvIHRoZSBUayBjbGlwYm9hcmQuCkBAIC01NTUsNyArNTU1LDcgQEAKICAgICAgICAgQSB3aWRnZXQgc3BlY2lmaWVkIGF0IHRoZSBvcHRpb25hbCBkaXNwbGF5b2Yga2V5d29yZAogICAgICAgICBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIHRhcmdldCBkaXNwbGF5LiBUaGUgY2xpcGJvYXJkCiAgICAgICAgIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCBzZWxlY3Rpb25fZ2V0LiIiIgotICAgICAgICBpZiBub3Qga3cuaGFzX2tleSgnZGlzcGxheW9mJyk6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKKyAgICAgICAgaWYgJ2Rpc3BsYXlvZicgbm90IGluIGt3OiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CiAgICAgICAgIHNlbGYudGsuY2FsbCgoJ2NsaXBib2FyZCcsICdhcHBlbmQnKSArIHNlbGYuX29wdGlvbnMoa3cpCiAgICAgICAgICAgICAgICsgKCctLScsIHN0cmluZykpCiAgICAgIyBYWFggZ3JhYiBjdXJyZW50IHcvbyB3aW5kb3cgYXJndW1lbnQKQEAgLTYxMyw3ICs2MTMsNyBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoJ29wdGlvbicsICdyZWFkZmlsZScsIGZpbGVOYW1lLCBwcmlvcml0eSkKICAgICBkZWYgc2VsZWN0aW9uX2NsZWFyKHNlbGYsICoqa3cpOgogICAgICAgICAiIiJDbGVhciB0aGUgY3VycmVudCBYIHNlbGVjdGlvbi4iIiIKLSAgICAgICAgaWYgbm90IGt3Lmhhc19rZXkoJ2Rpc3BsYXlvZicpOiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CisgICAgICAgIGlmICdkaXNwbGF5b2YnIG5vdCBpbiBrdzoga3dbJ2Rpc3BsYXlvZiddID0gc2VsZi5fdwogICAgICAgICBzZWxmLnRrLmNhbGwoKCdzZWxlY3Rpb24nLCAnY2xlYXInKSArIHNlbGYuX29wdGlvbnMoa3cpKQogICAgIGRlZiBzZWxlY3Rpb25fZ2V0KHNlbGYsICoqa3cpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IFggc2VsZWN0aW9uLgpAQCAtNjIyLDcgKzYyMiw3IEBACiAgICAgICAgIHRoZSBzZWxlY3Rpb24gYW5kIGRlZmF1bHRzIHRvIFBSSU1BUlkuICBBIGtleXdvcmQKICAgICAgICAgcGFyYW1ldGVyIGRpc3BsYXlvZiBzcGVjaWZpZXMgYSB3aWRnZXQgb24gdGhlIGRpc3BsYXkKICAgICAgICAgdG8gdXNlLiIiIgotICAgICAgICBpZiBub3Qga3cuaGFzX2tleSgnZGlzcGxheW9mJyk6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKKyAgICAgICAgaWYgJ2Rpc3BsYXlvZicgbm90IGluIGt3OiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoKCdzZWxlY3Rpb24nLCAnZ2V0JykgKyBzZWxmLl9vcHRpb25zKGt3KSkKICAgICBkZWYgc2VsZWN0aW9uX2hhbmRsZShzZWxmLCBjb21tYW5kLCAqKmt3KToKICAgICAgICAgIiIiU3BlY2lmeSBhIGZ1bmN0aW9uIENPTU1BTkQgdG8gY2FsbCBpZiB0aGUgWApAQCAtNjUzLDcgKzY1Myw3IEBACiAgICAgICAgIGJlIHByb3ZpZGVkOgogICAgICAgICBzZWxlY3Rpb24gLSBuYW1lIG9mIHRoZSBzZWxlY3Rpb24gKGRlZmF1bHQgUFJJTUFSWSksCiAgICAgICAgIHR5cGUgLSB0eXBlIG9mIHRoZSBzZWxlY3Rpb24gKGUuZy4gU1RSSU5HLCBGSUxFX05BTUUpLiIiIgotICAgICAgICBpZiBub3Qga3cuaGFzX2tleSgnZGlzcGxheW9mJyk6IGt3WydkaXNwbGF5b2YnXSA9IHNlbGYuX3cKKyAgICAgICAgaWYgJ2Rpc3BsYXlvZicgbm90IGluIGt3OiBrd1snZGlzcGxheW9mJ10gPSBzZWxmLl93CiAgICAgICAgIG5hbWUgPSBzZWxmLnRrLmNhbGwoKCdzZWxlY3Rpb24nLCAnb3duJykgKyBzZWxmLl9vcHRpb25zKGt3KSkKICAgICAgICAgaWYgbm90IG5hbWU6IHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1ldG93aWRnZXQobmFtZSkKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAgICAgICAgIGZvciBrLCB2IGluIGNuZi5pdGVtcygpOgogICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBpZiBrWy0xXSA9PSAnXyc6IGsgPSBrWzotMV0KLSAgICAgICAgICAgICAgICBpZiBjYWxsYWJsZSh2KToKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHYsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fcmVnaXN0ZXIodikKICAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodiwgKHR1cGxlLCBsaXN0KSk6CiAgICAgICAgICAgICAgICAgICAgIG52ID0gW10KQEAgLTE0MTQsNiArMTQxNCw0OCBAQAogICAgICAgICAgICAgc2VsZi53aWRnZXQuX3JlcG9ydF9leGNlcHRpb24oKQogCiAKK2NsYXNzIFhWaWV3OgorICAgICIiIk1peC1pbiBjbGFzcyBmb3IgcXVlcnlpbmcgYW5kIGNoYW5naW5nIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uCisgICAgb2YgYSB3aWRnZXQncyB3aW5kb3cuIiIiCisKKyAgICBkZWYgeHZpZXcoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgorICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgKmFyZ3MpCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMocmVzKQorCisgICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6CisgICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQorICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCisKKyAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6CisgICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiCisgICAgICAgIG9yICJwYWdlcyIgKFdIQVQpLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKKworCitjbGFzcyBZVmlldzoKKyAgICAiIiJNaXgtaW4gY2xhc3MgZm9yIHF1ZXJ5aW5nIGFuZCBjaGFuZ2luZyB0aGUgdmVydGljYWwgcG9zaXRpb24KKyAgICBvZiBhIHdpZGdldCdzIHdpbmRvdy4iIiIKKworICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgorICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgKmFyZ3MpCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMocmVzKQorCisgICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6CisgICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQorICAgICAgICB0b3RhbCBoZWlnaHQgb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSB0b3AuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCisKKyAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6CisgICAgICAgICIiIlNoaWZ0IHRoZSB5LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbgorICAgICAgICAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKKworCiBjbGFzcyBXbToKICAgICAiIiJQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyLiIiIgogCkBAIC0xNjkzLDcgKzE3MzUsNyBAQAogICAgICAgICB0aGUgVGNsIEludGVycHJldGVyIGFuZCBjYWxscyBleGVjZmlsZSBvbiBCQVNFTkFNRS5weSBhbmQgQ0xBU1NOQU1FLnB5IGlmCiAgICAgICAgIHN1Y2ggYSBmaWxlIGV4aXN0cyBpbiB0aGUgaG9tZSBkaXJlY3RvcnkuIiIiCiAgICAgICAgIGltcG9ydCBvcwotICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0hPTUUnKTogaG9tZSA9IG9zLmVudmlyb25bJ0hPTUUnXQorICAgICAgICBpZiAnSE9NRScgaW4gb3MuZW52aXJvbjogaG9tZSA9IG9zLmVudmlyb25bJ0hPTUUnXQogICAgICAgICBlbHNlOiBob21lID0gb3MuY3VyZGlyCiAgICAgICAgIGNsYXNzX3RjbCA9IG9zLnBhdGguam9pbihob21lLCAnLiVzLnRjbCcgJSBjbGFzc05hbWUpCiAgICAgICAgIGNsYXNzX3B5ID0gb3MucGF0aC5qb2luKGhvbWUsICcuJXMucHknICUgY2xhc3NOYW1lKQpAQCAtMTkwMCw3ICsxOTQyLDcgQEAKICAgICAgICAgc2VsZi5tYXN0ZXIgPSBtYXN0ZXIKICAgICAgICAgc2VsZi50ayA9IG1hc3Rlci50awogICAgICAgICBuYW1lID0gTm9uZQotICAgICAgICBpZiBjbmYuaGFzX2tleSgnbmFtZScpOgorICAgICAgICBpZiAnbmFtZScgaW4gY25mOgogICAgICAgICAgICAgbmFtZSA9IGNuZlsnbmFtZSddCiAgICAgICAgICAgICBkZWwgY25mWyduYW1lJ10KICAgICAgICAgaWYgbm90IG5hbWU6CkBAIC0xOTExLDcgKzE5NTMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdyA9IG1hc3Rlci5fdyArICcuJyArIG5hbWUKICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IHt9Ci0gICAgICAgIGlmIHNlbGYubWFzdGVyLmNoaWxkcmVuLmhhc19rZXkoc2VsZi5fbmFtZSk6CisgICAgICAgIGlmIHNlbGYuX25hbWUgaW4gc2VsZi5tYXN0ZXIuY2hpbGRyZW46CiAgICAgICAgICAgICBzZWxmLm1hc3Rlci5jaGlsZHJlbltzZWxmLl9uYW1lXS5kZXN0cm95KCkKICAgICAgICAgc2VsZi5tYXN0ZXIuY2hpbGRyZW5bc2VsZi5fbmFtZV0gPSBzZWxmCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlciwgd2lkZ2V0TmFtZSwgY25mPXt9LCBrdz17fSwgZXh0cmE9KCkpOgpAQCAtMTkzNiw3ICsxOTc4LDcgQEAKICAgICAgICAgIiIiRGVzdHJveSB0aGlzIGFuZCBhbGwgZGVzY2VuZGFudHMgd2lkZ2V0cy4iIiIKICAgICAgICAgZm9yIGMgaW4gc2VsZi5jaGlsZHJlbi52YWx1ZXMoKTogYy5kZXN0cm95KCkKICAgICAgICAgc2VsZi50ay5jYWxsKCdkZXN0cm95Jywgc2VsZi5fdykKLSAgICAgICAgaWYgc2VsZi5tYXN0ZXIuY2hpbGRyZW4uaGFzX2tleShzZWxmLl9uYW1lKToKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiBzZWxmLm1hc3Rlci5jaGlsZHJlbjoKICAgICAgICAgICAgIGRlbCBzZWxmLm1hc3Rlci5jaGlsZHJlbltzZWxmLl9uYW1lXQogICAgICAgICBNaXNjLmRlc3Ryb3koc2VsZikKICAgICBkZWYgX2RvKHNlbGYsIG5hbWUsIGFyZ3M9KCkpOgpAQCAtMTk2NCw3ICsyMDA2LDcgQEAKICAgICAgICAgZXh0cmEgPSAoKQogICAgICAgICBmb3Igd21rZXkgaW4gWydzY3JlZW4nLCAnY2xhc3NfJywgJ2NsYXNzJywgJ3Zpc3VhbCcsCiAgICAgICAgICAgICAgICAgICAnY29sb3JtYXAnXToKLSAgICAgICAgICAgIGlmIGNuZi5oYXNfa2V5KHdta2V5KToKKyAgICAgICAgICAgIGlmIHdta2V5IGluIGNuZjoKICAgICAgICAgICAgICAgICB2YWwgPSBjbmZbd21rZXldCiAgICAgICAgICAgICAgICAgIyBUQkQ6IGEgaGFjayBuZWVkZWQgYmVjYXVzZSBzb21lIGtleXMKICAgICAgICAgICAgICAgICAjIGFyZSBub3QgdmFsaWQgYXMga2V5d29yZCBhcmd1bWVudHMKQEAgLTIwNTcsNyArMjA5OSw3IEBACiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuICdAJXIsJXInICUgKHgsIHkpCiAKLWNsYXNzIENhbnZhcyhXaWRnZXQpOgorY2xhc3MgQ2FudmFzKFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJDYW52YXMgd2lkZ2V0IHRvIGRpc3BsYXkgZ3JhcGhpY2FsIGVsZW1lbnRzIGxpa2UgbGluZXMgb3IgdGV4dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIGNhbnZhcyB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IE1BU1RFUi4KQEAgLTIyOTcsMzAgKzIzMzksNiBAQAogICAgIGRlZiB0eXBlKHNlbGYsIHRhZ09ySWQpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGl0ZW0gVEFHT1JJRC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAndHlwZScsIHRhZ09ySWQpIG9yIE5vbmUKLSAgICBkZWYgeHZpZXcoc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd4dmlldycpICsgYXJncykKLSAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBjYW52YXMgaXMgb2ZmLXNjcmVlbiB0byB0aGUgbGVmdC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKLSAgICBkZWYgeXZpZXcoc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneXZpZXcnKSArIGFyZ3MpCi0gICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCBoZWlnaHQgb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSB0b3AuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHl2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeS12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCiAKIGNsYXNzIENoZWNrYnV0dG9uKFdpZGdldCk6CiAgICAgIiIiQ2hlY2tidXR0b24gd2lkZ2V0IHdoaWNoIGlzIGVpdGhlciBpbiBvbi0gb3Igb2ZmLXN0YXRlLiIiIgpAQCAtMjM1MSw3ICsyMzY5LDcgQEAKICAgICAgICAgIiIiVG9nZ2xlIHRoZSBidXR0b24uIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAndG9nZ2xlJykKIAotY2xhc3MgRW50cnkoV2lkZ2V0KToKK2NsYXNzIEVudHJ5KFdpZGdldCwgWFZpZXcpOgogICAgICIiIkVudHJ5IHdpZGdldCB3aGljaCBhbGxvd3MgdG8gZGlzcGxheSBzaW1wbGUgdGV4dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhbiBlbnRyeSB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IE1BU1RFUi4KQEAgLTI0MDIsNyArMjQyMCw4IEBACiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2VsZWN0aW9uJywgJ2Zyb20nLCBpbmRleCkKICAgICBzZWxlY3RfZnJvbSA9IHNlbGVjdGlvbl9mcm9tCiAgICAgZGVmIHNlbGVjdGlvbl9wcmVzZW50KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgd2lkZ2V0IGhhcyB0aGUgc2VsZWN0aW9uLiIiIgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGVyZSBhcmUgY2hhcmFjdGVycyBzZWxlY3RlZCBpbiB0aGUgZW50cnksIEZhbHNlCisgICAgICAgIG90aGVyd2lzZS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbigKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2VsZWN0aW9uJywgJ3ByZXNlbnQnKSkKICAgICBzZWxlY3RfcHJlc2VudCA9IHNlbGVjdGlvbl9wcmVzZW50CkBAIC0yNDE0LDE2ICsyNDMzLDYgQEAKICAgICAgICAgIiIiU2V0IHRoZSB2YXJpYWJsZSBlbmQgb2YgYSBzZWxlY3Rpb24gdG8gSU5ERVguIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2VsZWN0aW9uJywgJ3RvJywgaW5kZXgpCiAgICAgc2VsZWN0X3RvID0gc2VsZWN0aW9uX3RvCi0gICAgZGVmIHh2aWV3KHNlbGYsIGluZGV4KToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgaW5kZXgpCi0gICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdCB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBlbnRyeSBpcyBvZmYtc2NyZWVuIHRvIHRoZSBsZWZ0LiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHgtdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQogCiBjbGFzcyBGcmFtZShXaWRnZXQpOgogICAgICIiIkZyYW1lIHdpZGdldCB3aGljaCBtYXkgY29udGFpbiBvdGhlciB3aWRnZXRzIGFuZCBjYW4gaGF2ZSBhIDNEIGJvcmRlci4iIiIKQEAgLTI0MzUsMTAgKzI0NDQsMTAgQEAKICAgICAgICAgaGlnaGxpZ2h0Y29sb3IsIGhpZ2hsaWdodHRoaWNrbmVzcywgcmVsaWVmLCB0YWtlZm9jdXMsIHZpc3VhbCwgd2lkdGguIiIiCiAgICAgICAgIGNuZiA9IF9jbmZtZXJnZSgoY25mLCBrdykpCiAgICAgICAgIGV4dHJhID0gKCkKLSAgICAgICAgaWYgY25mLmhhc19rZXkoJ2NsYXNzXycpOgorICAgICAgICBpZiAnY2xhc3NfJyBpbiBjbmY6CiAgICAgICAgICAgICBleHRyYSA9ICgnLWNsYXNzJywgY25mWydjbGFzc18nXSkKICAgICAgICAgICAgIGRlbCBjbmZbJ2NsYXNzXyddCi0gICAgICAgIGVsaWYgY25mLmhhc19rZXkoJ2NsYXNzJyk6CisgICAgICAgIGVsaWYgJ2NsYXNzJyBpbiBjbmY6CiAgICAgICAgICAgICBleHRyYSA9ICgnLWNsYXNzJywgY25mWydjbGFzcyddKQogICAgICAgICAgICAgZGVsIGNuZlsnY2xhc3MnXQogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnZnJhbWUnLCBjbmYsIHt9LCBleHRyYSkKQEAgLTI0NjUsNyArMjQ3NCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnbGFiZWwnLCBjbmYsIGt3KQogCi1jbGFzcyBMaXN0Ym94KFdpZGdldCk6CitjbGFzcyBMaXN0Ym94KFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJMaXN0Ym94IHdpZGdldCB3aGljaCBjYW4gZGlzcGxheSBhIGxpc3Qgb2Ygc3RyaW5ncy4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIGxpc3Rib3ggd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBNQVNURVIuCkBAIC0yNTQ0LDMwICsyNTUzLDYgQEAKICAgICBkZWYgc2l6ZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3Rib3guIiIiCiAgICAgICAgIHJldHVybiBnZXRpbnQoc2VsZi50ay5jYWxsKHNlbGYuX3csICdzaXplJykpCi0gICAgZGVmIHh2aWV3KHNlbGYsICp3aGF0KToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3Qgd2hhdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneHZpZXcnKSArIHdoYXQpCi0gICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdCB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBlbnRyeSBpcyBvZmYtc2NyZWVuIHRvIHRoZSBsZWZ0LiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB4dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHgtdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQotICAgIGRlZiB5dmlldyhzZWxmLCAqd2hhdCk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCB3aGF0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd5dmlldycpICsgd2hhdCkKLSAgICBkZWYgeXZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0IHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgd2lkdGggb2YgdGhlIGVudHJ5IGlzIG9mZi1zY3JlZW4gdG8gdGhlIHRvcC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB5LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKICAgICBkZWYgaXRlbWNnZXQoc2VsZiwgaW5kZXgsIG9wdGlvbik6CiAgICAgICAgICIiIlJldHVybiB0aGUgcmVzb3VyY2UgdmFsdWUgZm9yIGFuIElURU0gYW5kIGFuIE9QVElPTi4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbCgKQEAgLTI4MTQsNyArMjc5OSw3IEBACiAKIAogCi1jbGFzcyBUZXh0KFdpZGdldCk6CitjbGFzcyBUZXh0KFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJUZXh0IHdpZGdldCB3aGljaCBjYW4gZGlzcGxheSB0ZXh0IGluIHZhcmlvdXMgZm9ybXMuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSB0ZXh0IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpAQCAtMzEzNiwzMiArMzEyMSw2IEBACiAgICAgICAgICIiIlJldHVybiBhbGwgbmFtZXMgb2YgZW1iZWRkZWQgd2luZG93cyBpbiB0aGlzIHdpZGdldC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd3aW5kb3cnLCAnbmFtZXMnKSkKLSAgICBkZWYgeHZpZXcoc2VsZiwgKndoYXQpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHZpZXcuIiIiCi0gICAgICAgIGlmIG5vdCB3aGF0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycpKQotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd4dmlldycpICsgd2hhdCkKLSAgICBkZWYgeHZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgIiIiQWRqdXN0cyB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBjYW52YXMgaXMgb2ZmLXNjcmVlbiB0byB0aGUgbGVmdC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZAotICAgICAgICBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKLSAgICBkZWYgeXZpZXcoc2VsZiwgKndoYXQpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3Qgd2hhdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneXZpZXcnKSArIHdoYXQpCi0gICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCBoZWlnaHQgb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSB0b3AuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHl2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeS12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQKLSAgICAgICAgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCiAgICAgZGVmIHl2aWV3X3BpY2twbGFjZShzZWxmLCAqd2hhdCk6CiAgICAgICAgICIiIk9ic29sZXRlIGZ1bmN0aW9uLCB1c2Ugc2VlLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICd5dmlldycsICctcGlja3BsYWNlJykgKyB3aGF0KQpAQCAtMzE5NCw3ICszMTUzLDcgQEAKICAgICAgICAgc2VsZi5tZW51bmFtZSA9IG1lbnUuX3cKICAgICAgICAgIyAnY29tbWFuZCcgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGtleXdvcmQKICAgICAgICAgY2FsbGJhY2sgPSBrd2FyZ3MuZ2V0KCdjb21tYW5kJykKLSAgICAgICAgaWYga3dhcmdzLmhhc19rZXkoJ2NvbW1hbmQnKToKKyAgICAgICAgaWYgJ2NvbW1hbmQnIGluIGt3YXJnczoKICAgICAgICAgICAgIGRlbCBrd2FyZ3NbJ2NvbW1hbmQnXQogICAgICAgICBpZiBrd2FyZ3M6CiAgICAgICAgICAgICByYWlzZSBUY2xFcnJvciwgJ3Vua25vd24gb3B0aW9uIC0nK2t3YXJncy5rZXlzKClbMF0KQEAgLTMyMzUsNyArMzE5NCw3IEBACiAgICAgICAgIGVsaWYga3c6IGNuZiA9IGt3CiAgICAgICAgIG9wdGlvbnMgPSAoKQogICAgICAgICBmb3IgaywgdiBpbiBjbmYuaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGNhbGxhYmxlKHYpOgorICAgICAgICAgICAgaWYgaGFzYXR0cih2LCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fcmVnaXN0ZXIodikKICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zICsgKCctJytrLCB2KQogICAgICAgICBzZWxmLnRrLmNhbGwoKCdpbWFnZScsICdjcmVhdGUnLCBpbWd0eXBlLCBuYW1lLCkgKyBvcHRpb25zKQpAQCAtMzI1OCw3ICszMjE3LDcgQEAKICAgICAgICAgZm9yIGssIHYgaW4gX2NuZm1lcmdlKGt3KS5pdGVtcygpOgogICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBpZiBrWy0xXSA9PSAnXyc6IGsgPSBrWzotMV0KLSAgICAgICAgICAgICAgICBpZiBjYWxsYWJsZSh2KToKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHYsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fcmVnaXN0ZXIodikKICAgICAgICAgICAgICAgICByZXMgPSByZXMgKyAoJy0nK2ssIHYpCiAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5uYW1lLCAnY29uZmlnJykgKyByZXMpCkBAIC0zMzQ3LDcgKzMzMDYsNyBAQAogZGVmIGltYWdlX3R5cGVzKCk6IHJldHVybiBfZGVmYXVsdF9yb290LnRrLmNhbGwoJ2ltYWdlJywgJ3R5cGVzJykKIAogCi1jbGFzcyBTcGluYm94KFdpZGdldCk6CitjbGFzcyBTcGluYm94KFdpZGdldCwgWFZpZXcpOgogICAgICIiInNwaW5ib3ggd2lkZ2V0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgc3BpbmJveCB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IE1BU1RFUi4KQEAgLTM1NTAsOCArMzUwOSw4IEBACiAKICAgICAgICAgVGhlIGNoaWxkIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBjaGlsZCB3aWRnZXQKICAgICAgICAgZm9sbG93ZWQgYnkgcGFpcnMgb2YgYXJndW1lbnRzIHRoYXQgc3BlY2lmeSBob3cgdG8KLSAgICAgICAgbWFuYWdlIHRoZSB3aW5kb3dzLiBPcHRpb25zIG1heSBoYXZlIGFueSBvZiB0aGUgdmFsdWVzCi0gICAgICAgIGFjY2VwdGVkIGJ5IHRoZSBjb25maWd1cmUgc3ViY29tbWFuZC4KKyAgICAgICAgbWFuYWdlIHRoZSB3aW5kb3dzLiBUaGUgcG9zc2libGUgb3B0aW9ucyBhbmQgdmFsdWVzCisgICAgICAgIGFyZSB0aGUgb25lcyBhY2NlcHRlZCBieSB0aGUgcGFuZWNvbmZpZ3VyZSBtZXRob2QuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdhZGQnLCBjaGlsZCkgKyBzZWxmLl9vcHRpb25zKGt3KSkKIApkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L1JFQURNRSBiL0xpYi9saWItdGsvdGVzdC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljZDE2YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC9SRUFETUUKQEAgLTAsMCArMSwxNCBAQAorV3JpdGluZyBuZXcgdGVzdHMKKz09PT09PT09PT09PT09PT09CisKK1ByZWNhdXRpb24KKy0tLS0tLS0tLS0KKworICAgIE5ldyB0ZXN0cyBzaG91bGQgYWx3YXlzIHVzZSBvbmx5IG9uZSBUayB3aW5kb3cgYXQgb25jZSwgbGlrZSBhbGwgdGhlCisgICAgY3VycmVudCB0ZXN0cyBkby4gVGhpcyBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIGRlc3Ryb3kgdGhlIGN1cnJlbnQgd2luZG93CisgICAgYmVmb3JlIGNyZWF0aW5nIGFub3RoZXIgb25lLCBhbmQgY2xlYW4gdXAgYWZ0ZXIgdGhlIHRlc3QuIFRoZSBtb3RpdmF0aW9uCisgICAgYmVoaW5kIHRoaXMgaXMgdGhhdCBzb21lIHRlc3RzIG1heSBkZXBlbmQgb24gaGF2aW5nIGl0cyB3aW5kb3cgZm9jdXNlZAorICAgIHdoaWxlIGl0IGlzIHJ1bm5pbmcgdG8gd29yayBwcm9wZXJseSwgYW5kIGl0IG1heSBiZSBoYXJkIHRvIGZvcmNlIGZvY3VzCisgICAgb24geW91ciB3aW5kb3cgYWNyb3NzIHBsYXRmb3JtcyAocmlnaHQgbm93IG9ubHkgdGVzdF90cmF2ZXJzYWwgYXQKKyAgICB0ZXN0X3R0ay50ZXN0X3dpZGdldHMuTm90ZWJvb2tUZXN0IGRlcGVuZHMgb24gdGhpcykuCisKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC9ydW50a3Rlc3RzLnB5IGIvTGliL2xpYi10ay90ZXN0L3J1bnRrdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyYzM0MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC9ydW50a3Rlc3RzLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyIiIgorVXNlIHRoaXMgbW9kdWxlIHRvIGdldCBhbmQgcnVuIGFsbCB0ayB0ZXN0cy4KKworVGtpbnRlciB0ZXN0cyBzaG91bGQgbGl2ZSBpbiBhIHBhY2thZ2UgaW5zaWRlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhpcyBmaWxlCitsaXZlcywgbGlrZSB0ZXN0X3RraW50ZXIuCitFeHRlbnNpb25zIGFsc28gc2hvdWxkIGxpdmUgaW4gcGFja2FnZXMgZm9sbG93aW5nIHRoZSBzYW1lIHJ1bGUgYXMgYWJvdmUuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCit0aGlzX2Rpcl9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisKK2RlZiBpc19wYWNrYWdlKHBhdGgpOgorICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgIGlmIG5hbWUgaW4gKCdfX2luaXRfXy5weScsICdfX2luaXRfXy5weWMnLCAnX19pbml0LnB5bycpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGdldF90ZXN0c19tb2R1bGVzKGJhc2VwYXRoPXRoaXNfZGlyX3BhdGgsIGd1aT1UcnVlLCBwYWNrYWdlcz1Ob25lKToKKyAgICAiIiJUaGlzIHdpbGwgaW1wb3J0IGFuZCB5aWVsZCBtb2R1bGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggdGVzdF8KKyAgICBhbmQgYXJlIGluc2lkZSBwYWNrYWdlcyBmb3VuZCBpbiB0aGUgcGF0aCBzdGFydGluZyBhdCBiYXNlcGF0aC4KKworICAgIElmIHBhY2thZ2VzIGlzIHNwZWNpZmllZCBpdCBzaG91bGQgY29udGFpbiBwYWNrYWdlIG5hbWVzIHRoYXQgd2FudAorICAgIHRoZWlyIHRlc3RzIGNvbGxldGVkLgorICAgICIiIgorICAgIHB5X2V4dCA9ICcucHknCisKKyAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGJhc2VwYXRoKToKKyAgICAgICAgZm9yIGRpcm5hbWUgaW4gbGlzdChkaXJuYW1lcyk6CisgICAgICAgICAgICBpZiBkaXJuYW1lWzBdID09ICcuJzoKKyAgICAgICAgICAgICAgICBkaXJuYW1lcy5yZW1vdmUoZGlybmFtZSkKKworICAgICAgICBpZiBpc19wYWNrYWdlKGRpcnBhdGgpIGFuZCBmaWxlbmFtZXM6CisgICAgICAgICAgICBwa2dfbmFtZSA9IGRpcnBhdGhbbGVuKGJhc2VwYXRoKSArIGxlbihvcy5zZXApOl0ucmVwbGFjZSgnLycsICcuJykKKyAgICAgICAgICAgIGlmIHBhY2thZ2VzIGFuZCBwa2dfbmFtZSBub3QgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZW5hbWVzID0gZmlsdGVyKAorICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogeC5zdGFydHN3aXRoKCd0ZXN0XycpIGFuZCB4LmVuZHN3aXRoKHB5X2V4dCksCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lcykKKworICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4lcyIgJSBuYW1lWzotbGVuKHB5X2V4dCldLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgdGVzdC50ZXN0X3N1cHBvcnQuUmVzb3VyY2VEZW5pZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGd1aToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBnZXRfdGVzdHModGV4dD1UcnVlLCBndWk9VHJ1ZSwgcGFja2FnZXM9Tm9uZSk6CisgICAgIiIiWWllbGQgYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbW9kdWxlcyBmb3VuZCBieSBnZXRfdGVzdHNfbW9kdWxlcy4KKworICAgIElmIG5vZ3VpIGlzIFRydWUsIG9ubHkgdGVzdHMgdGhhdCBkbyBub3QgcmVxdWlyZSBhIEdVSSB3aWxsIGJlCisgICAgcmV0dXJuZWQuIiIiCisgICAgYXR0cnMgPSBbXQorICAgIGlmIHRleHQ6CisgICAgICAgIGF0dHJzLmFwcGVuZCgndGVzdHNfbm9ndWknKQorICAgIGlmIGd1aToKKyAgICAgICAgYXR0cnMuYXBwZW5kKCd0ZXN0c19ndWknKQorICAgIGZvciBtb2R1bGUgaW4gZ2V0X3Rlc3RzX21vZHVsZXMoZ3VpPWd1aSwgcGFja2FnZXM9cGFja2FnZXMpOgorICAgICAgICBmb3IgYXR0ciBpbiBhdHRyczoKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIGdldGF0dHIobW9kdWxlLCBhdHRyLCAoKSk6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCpnZXRfdGVzdHMoKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvY29weXJpZ2h0IGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9jb3B5cmlnaHQKcmVuYW1lIHRvIExpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9sb2FkdGsucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzY0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5CkBAIC0wLDAgKzEsNDUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBUa2ludGVyIGltcG9ydCBUY2wsIFRjbEVycm9yCisKK3Rlc3Rfc3VwcG9ydC5yZXF1aXJlcygnZ3VpJykKKworY2xhc3MgVGtMb2FkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKCdESVNQTEFZJyBub3QgaW4gb3MuZW52aXJvbiwgJ05vICRESVNQTEFZIHNldC4nKQorICAgIGRlZiB0ZXN0TG9hZFRrKHNlbGYpOgorICAgICAgICB0Y2wgPSBUY2woKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wud2luZm9fZ2VvbWV0cnkpCisgICAgICAgIHRjbC5sb2FkdGsoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxeDErMCswJywgdGNsLndpbmZvX2dlb21ldHJ5KCkpCisgICAgICAgIHRjbC5kZXN0cm95KCkKKworICAgIGRlZiB0ZXN0TG9hZFRrRmFpbHVyZShzZWxmKToKKyAgICAgICAgb2xkX2Rpc3BsYXkgPSBOb25lCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgnd2luJywgJ2RhcndpbicsICdjeWd3aW4nKSk6CisgICAgICAgICAgICAjIG5vIGZhaWx1cmUgcG9zc2libGUgb24gd2luZG93cz8KKworICAgICAgICAgICAgIyBYWFggTWF5YmUgb24gdGsgb2xkZXIgdGhhbiA4LjQuMTMgaXQgd291bGQgYmUgcG9zc2libGUsCisgICAgICAgICAgICAjIHNlZSB0a2ludGVyLmguCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGlmICdESVNQTEFZJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorICAgICAgICAgICAgICAgICMgb24gc29tZSBwbGF0Zm9ybXMsIGRlbGV0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgICAgICAgICAgICMgZG9lc24ndCBhY3R1YWxseSBjYXJyeSB0aHJvdWdoIHRvIHRoZSBwcm9jZXNzIGxldmVsCisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIHRoZXkgZG9uJ3Qgc3VwcG9ydCB1bnNldGVudgorICAgICAgICAgICAgICAgICMgSWYgdGhhdCdzIHRoZSBjYXNlLCBhYm9ydC4KKyAgICAgICAgICAgICAgICBkaXNwbGF5ID0gb3MucG9wZW4oJ2VjaG8gJERJU1BMQVknKS5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGRpc3BsYXk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICB0Y2wgPSBUY2woKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC53aW5mb19nZW9tZXRyeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wubG9hZHRrKQorCit0ZXN0c19ndWkgPSAoVGtMb2FkVGVzdCwgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzX2d1aSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5IGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjMDhiZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5CkBAIC0wLDAgKzEsMzkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKK2Zyb20gdHRrIGltcG9ydCBzZXR1cF9tYXN0ZXIKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFRleHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yb290ID0gc2V0dXBfbWFzdGVyKCkKKyAgICAgICAgc2VsZi50ZXh0ID0gVGtpbnRlci5UZXh0KHNlbGYucm9vdCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0LmRlc3Ryb3koKQorCisKKyAgICBkZWYgdGVzdF9zZWFyY2goc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKworICAgICAgICAjIHBhdHRlcm4gYW5kIGluZGV4IGFyZSBvYmxpZ2F0b3J5IGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdGV4dC5zZWFyY2gsIE5vbmUsICcxLjAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB0ZXh0LnNlYXJjaCwgJ2EnLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCB0ZXh0LnNlYXJjaCwgTm9uZSwgTm9uZSkKKworICAgICAgICAjIEludmFsaWQgdGV4dCBpbmRleC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdGV4dC5zZWFyY2gsICcnLCAwKQorCisgICAgICAgICMgQ2hlY2sgaWYgd2UgYXJlIGdldHRpbmcgdGhlIGluZGljZXMgYXMgc3RyaW5ncyAtLSB5b3UgYXJlIGxpa2VseQorICAgICAgICAjIHRvIGdldCBUY2xfT2JqIHVuZGVyIFRrIDguNSBpZiBUa2ludGVyIGRvZXNuJ3QgY29udmVydCBpdC4KKyAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsICdoaS10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnNlYXJjaCgnLXRlc3QnLCAnMS4wJywgJ2VuZCcpLCAnMS4yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnNlYXJjaCgndGVzdCcsICcxLjAnLCAnZW5kJyksICcxLjMnKQorCisKK3Rlc3RzX2d1aSA9IChUZXh0VGVzdCwgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9jb3B5cmlnaHQgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvX19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBUb29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL2NvcHlyaWdodApjb3B5IHRvIExpYi9saWItdGsvdGVzdC90ZXN0X3R0ay9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3N1cHBvcnQucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvc3VwcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U3ODAzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3N1cHBvcnQucHkKQEAgLTAsMCArMSwzMyBAQAoraW1wb3J0IFRraW50ZXIKKworZGVmIGdldF90a19yb290KCk6CisgICAgdHJ5OgorICAgICAgICByb290ID0gVGtpbnRlci5fZGVmYXVsdF9yb290CisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAjIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgZGVmYXVsdCByb290IGluIFRraW50ZXIsIGFsdGhvdWdoCisgICAgICAgICMgSSBoYXZlbid0IHNlZW4gcGVvcGxlIGRvaW5nIGl0IChidXQgYXBwYXJlbnRseSBzb21lb25lIGRpZCBpdAorICAgICAgICAjIGhlcmUpLgorICAgICAgICByb290ID0gTm9uZQorCisgICAgaWYgcm9vdCBpcyBOb25lOgorICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYXN0ZXIgb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeQorICAgICAgICByb290ID0gVGtpbnRlci5UaygpCisKKyAgICByZXR1cm4gcm9vdAorCitkZWYgcm9vdF9kZWljb25pZnkoKToKKyAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQorICAgIHJvb3QuZGVpY29uaWZ5KCkKKworZGVmIHJvb3Rfd2l0aGRyYXcoKToKKyAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQorICAgIHJvb3Qud2l0aGRyYXcoKQorCisKK2RlZiBzaW11bGF0ZV9tb3VzZV9jbGljayh3aWRnZXQsIHgsIHkpOgorICAgICIiIkdlbmVyYXRlIHByb3BlciBldmVudHMgdG8gY2xpY2sgYXQgdGhlIHgsIHkgcG9zaXRpb24gKHRyaWVzIHRvIGFjdAorICAgIGxpa2UgYW4gWCBzZXJ2ZXIpLiIiIgorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPEVudGVyPicsIHg9MCwgeT0wKQorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPE1vdGlvbj4nLCB4PXgsIHk9eSkKKyAgICB3aWRnZXQuZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25QcmVzcy0xPicsIHg9eCwgeT15KQorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPEJ1dHRvblJlbGVhc2UtMT4nLCB4PXgsIHk9eSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDZjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5CkBAIC0wLDAgKzEsMjc0IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0CisKK2ltcG9ydCBzdXBwb3J0CisKK3JlcXVpcmVzKCdndWknKQorCitjbGFzcyBMYWJlbGVkU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgorICAgICAgICAjIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB2YXJpYWJsZQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHZhciA9IHguX3ZhcmlhYmxlLl9uYW1lCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHgudGsuZ2xvYmFsZ2V0dmFyLCB2YXIpCisKKyAgICAgICAgIyBtYW51YWxseSBjcmVhdGVkIHZhcmlhYmxlCisgICAgICAgIG15dmFyID0gVGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICBuYW1lID0gbXl2YXIuX25hbWUKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50ay5nbG9iYWxnZXR2YXIobmFtZSksIG15dmFyLmdldCgpKQorICAgICAgICBkZWwgbXl2YXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgeC50ay5nbG9iYWxnZXR2YXIsIG5hbWUpCisKKyAgICAgICAgIyBjaGVja2luZyB0aGF0IHRoZSB0cmFjaW5nIGNhbGxiYWNrIGlzIHByb3Blcmx5IHJlbW92ZWQKKyAgICAgICAgbXl2YXIgPSBUa2ludGVyLkludFZhcigpCisgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpbGwgc3RhcnQgdHJhY2luZyBteXZhcgorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgIyBVbmxlc3MgdGhlIHRyYWNpbmcgY2FsbGJhY2sgd2FzIHJlbW92ZWQsIGNyZWF0aW5nIGEgbmV3CisgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpdGggdGhlIHNhbWUgdmFyIHdpbGwgY2F1c2UgYW4gZXJyb3Igbm93LiBUaGlzCisgICAgICAgICMgaGFwcGVucyBiZWNhdXNlIHRoZSB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAocG9zc2libHkpIGEgbmV3CisgICAgICAgICMgdmFsdWUgd2hpY2ggY2F1c2VzIHRoZSB0cmFjaW5nIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhbmQgdGhlbgorICAgICAgICAjIGl0IHRyaWVzIGNhbGxpbmcgaW5zdGFuY2UgYXR0cmlidXRlcyBub3QgeWV0IGRlZmluZWQuCisgICAgICAgIHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnbGFzdF90eXBlJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN5cy5sYXN0X3R5cGUgPT0gVGtpbnRlci5UY2xFcnJvcikKKworCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgbWFzdGVyIHBhc3NpbmcKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCBUa2ludGVyLl9kZWZhdWx0X3Jvb3QpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIG1hc3RlciA9IFRraW50ZXIuRnJhbWUoKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShtYXN0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5tYXN0ZXIsIG1hc3RlcikKKyAgICAgICAgeC5kZXN0cm95KCkKKworICAgICAgICAjIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uL3Bhc3NpbmcKKyAgICAgICAgcGFzc2VkX2V4cGVjdGVkID0gKCgyLjUsIDIpLCAoJzAnLCAwKSwgKDAsIDApLCAoMTAsIDEwKSwKKyAgICAgICAgICAgICgtMSwgLTEpLCAoc3lzLm1heGludCArIDEsIHN5cy5tYXhpbnQgKyAxKSkKKyAgICAgICAgZm9yIHBhaXIgaW4gcGFzc2VkX2V4cGVjdGVkOgorICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89cGFpclswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgcGFpclsxXSkKKyAgICAgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPScyLjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4Ll92YXJpYWJsZS5nZXQpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHguX3ZhcmlhYmxlLmdldCkKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgIyB2YXJpYWJsZSBzaG91bGQgaGF2ZSBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgdG8gdGhlIGZyb21fIHZhbHVlCisgICAgICAgIG15dmFyID0gVGtpbnRlci5Eb3VibGVWYXIodmFsdWU9MjApCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsdWUsIDApCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgICMgY2hlY2sgdGhhdCBpdCBpcyByZWFsbHkgdXNpbmcgYSBEb3VibGVWYXIKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIsIGZyb21fPTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fdmFyaWFibGUuX25hbWUsIG15dmFyLl9uYW1lKQorICAgICAgICB4LmRlc3Ryb3koKQorCisgICAgICAgICMgd2lkZ2V0IHBvc2l0aW9ubWVudAorICAgICAgICBkZWYgY2hlY2tfcG9zaXRpb25zKHNjYWxlLCBzY2FsZV9wb3MsIGxhYmVsLCBsYWJlbF9wb3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FsZS5wYWNrX2luZm8oKVsnc2lkZSddLCBzY2FsZV9wb3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsLnBsYWNlX2luZm8oKVsnYW5jaG9yJ10sIGxhYmVsX3BvcykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3RvcCcpCisgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQorICAgICAgICB4LmRlc3Ryb3koKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0nYm90dG9tJykKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSd1bmtub3duJykgIyBpbnZlcnQgZGVmYXVsdCBwb3NpdGlvbnMKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCisgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQorICAgICAgICB4LmRlc3Ryb3koKQorCisgICAgICAgICMgZXh0cmEsIGFuZCBpbnZhbGlkLCBrd2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdHRrLkxhYmVsZWRTY2FsZSwgYT0nYicpCisKKworICAgIGRlZiB0ZXN0X2hvcml6b250YWxfcmFuZ2Uoc2VsZik6CisgICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89MCwgdG89MTApCisgICAgICAgIGxzY2FsZS5wYWNrKCkKKyAgICAgICAgbHNjYWxlLndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIGxzY2FsZS51cGRhdGUoKQorCisgICAgICAgIGxpbmZvXzEgPSBsc2NhbGUubGFiZWwucGxhY2VfaW5mbygpCisgICAgICAgIHByZXZfeGNvb3JkID0gbHNjYWxlLnNjYWxlLmNvb3JkcygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJldl94Y29vcmQsIGludChsaW5mb18xWyd4J10pKQorICAgICAgICAjIGNoYW5nZSByYW5nZSB0bzogZnJvbSAtNSB0byA1LiBUaGlzIHNob3VsZCBjaGFuZ2UgdGhlIHggY29vcmQgb2YKKyAgICAgICAgIyB0aGUgc2NhbGUgd2lkZ2V0LCBzaW5jZSAwIGlzIGF0IHRoZSBtaWRkbGUgb2YgdGhlIG5ldworICAgICAgICAjIHJhbmdlLgorICAgICAgICBsc2NhbGUuc2NhbGUuY29uZmlndXJlKGZyb21fPS01LCB0bz01KQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdXBkYXRlIGlzIG5lZWRlZCBzaW5jZSB0aGUgdGVzdCBkb2Vzbid0IHVzZSBtYWlubG9vcCwKKyAgICAgICAgIyBhdCB0aGUgc2FtZSB0aW1lIHRoaXMgc2hvdWxkbid0IGFmZmVjdCB0ZXN0IG91dGNvbWUKKyAgICAgICAgbHNjYWxlLnVwZGF0ZSgpCisgICAgICAgIGN1cnJfeGNvb3JkID0gbHNjYWxlLnNjYWxlLmNvb3JkcygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcmV2X3hjb29yZCAhPSBjdXJyX3hjb29yZCkKKyAgICAgICAgIyB0aGUgbGFiZWwgd2lkZ2V0IHNob3VsZCBoYXZlIGJlZW4gcmVwb3NpdGlvbmVkIHRvbworICAgICAgICBsaW5mb18yID0gbHNjYWxlLmxhYmVsLnBsYWNlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzY2FsZS5sYWJlbFsndGV4dCddLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJfeGNvb3JkLCBpbnQobGluZm9fMlsneCddKSkKKyAgICAgICAgIyBjaGFuZ2UgdGhlIHJhbmdlIGJhY2sKKyAgICAgICAgbHNjYWxlLnNjYWxlLmNvbmZpZ3VyZShmcm9tXz0wLCB0bz0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByZXZfeGNvb3JkICE9IGN1cnJfeGNvb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZXZfeGNvb3JkLCBpbnQobGluZm9fMVsneCddKSkKKworICAgICAgICBsc2NhbGUuZGVzdHJveSgpCisKKworICAgIGRlZiB0ZXN0X3ZhcmlhYmxlX2NoYW5nZShzZWxmKToKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICB4LnBhY2soKQorICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHgudXBkYXRlKCkKKworICAgICAgICBjdXJyX3hjb29yZCA9IHguc2NhbGUuY29vcmRzKClbMF0KKyAgICAgICAgbmV3dmFsID0geC52YWx1ZSArIDEKKyAgICAgICAgeC52YWx1ZSA9IG5ld3ZhbAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdXBkYXRlIGlzIG5lZWRlZCBzaW5jZSB0aGUgdGVzdCBkb2Vzbid0IHVzZSBtYWlubG9vcCwKKyAgICAgICAgIyBhdCB0aGUgc2FtZSB0aW1lIHRoaXMgc2hvdWxkbid0IGFmZmVjdCB0ZXN0IG91dGNvbWUKKyAgICAgICAgeC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGFiZWxbJ3RleHQnXSwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zY2FsZS5jb29yZHMoKVswXSA+IGN1cnJfeGNvb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc2NhbGUuY29vcmRzKClbMF0sCisgICAgICAgICAgICBpbnQoeC5sYWJlbC5wbGFjZV9pbmZvKClbJ3gnXSkpCisKKyAgICAgICAgIyB2YWx1ZSBvdXRzaWRlIHJhbmdlCisgICAgICAgIHgudmFsdWUgPSB4LnNjYWxlWyd0byddICsgMSAjIG5vIGNoYW5nZXMgc2hvdWxkbid0IGhhcHBlbgorICAgICAgICB4LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sYWJlbFsndGV4dCddLCBuZXd2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zY2FsZS5jb29yZHMoKVswXSwKKyAgICAgICAgICAgIGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSkKKworICAgICAgICB4LmRlc3Ryb3koKQorCisKKyAgICBkZWYgdGVzdF9yZXNpemUoc2VsZik6CisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeC5wYWNrKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgeC53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICB4LnVwZGF0ZSgpCisKKyAgICAgICAgd2lkdGgsIGhlaWdodCA9IHgubWFzdGVyLndpbmZvX3dpZHRoKCksIHgubWFzdGVyLndpbmZvX2hlaWdodCgpCisgICAgICAgIHdpZHRoX25ldywgaGVpZ2h0X25ldyA9IHdpZHRoICogMiwgaGVpZ2h0ICogMgorCisgICAgICAgIHgudmFsdWUgPSAzCisgICAgICAgIHgudXBkYXRlKCkKKyAgICAgICAgeC5tYXN0ZXIud21fZ2VvbWV0cnkoIiVkeCVkIiAlICh3aWR0aF9uZXcsIGhlaWdodF9uZXcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSwKKyAgICAgICAgICAgIHguc2NhbGUuY29vcmRzKClbMF0pCisKKyAgICAgICAgIyBSZXNldCBnZW9tZXRyeQorICAgICAgICB4Lm1hc3Rlci53bV9nZW9tZXRyeSgiJWR4JWQiICUgKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICB4LmRlc3Ryb3koKQorCisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYudGV4dHZhciA9IFRraW50ZXIuU3RyaW5nVmFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsIHNlbGYudGV4dHZhcgorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF93aWRnZXRfZGVzdHJveShzZWxmKToKKyAgICAgICAgdmFyID0gVGtpbnRlci5TdHJpbmdWYXIoKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgdmFyKQorICAgICAgICBuYW1lID0gdmFyLl9uYW1lCisgICAgICAgIG9wdG1lbnUudXBkYXRlX2lkbGV0YXNrcygpCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS50ay5nbG9iYWxnZXR2YXIobmFtZSksIHZhci5nZXQoKSkKKyAgICAgICAgZGVsIHZhcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBvcHRtZW51LnRrLmdsb2JhbGdldHZhciwgbmFtZSkKKworCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgTm9uZSwgc2VsZi50ZXh0dmFyLCBpbnZhbGlkPSd0aGluZycpCisKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgJ2InLCAnYScsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51Ll92YXJpYWJsZS5nZXQoKSwgJ2InKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRtZW51WydtZW51J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRtZW51Wyd0ZXh0dmFyaWFibGUnXSkKKworICAgICAgICBvcHRtZW51LmRlc3Ryb3koKQorCisKKyAgICBkZWYgdGVzdF9tZW51KHNlbGYpOgorICAgICAgICBpdGVtcyA9ICgnYScsICdiJywgJ2MnKQorICAgICAgICBkZWZhdWx0ID0gJ2EnCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKKyAgICAgICAgZm91bmRfZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihpdGVtcykpOgorICAgICAgICAgICAgdmFsdWUgPSBvcHRtZW51WydtZW51J10uZW50cnljZ2V0KGksICd2YWx1ZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBpdGVtc1tpXSkKKyAgICAgICAgICAgIGlmIHZhbHVlID09IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZm91bmRfZGVmYXVsdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kX2RlZmF1bHQpCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisKKyAgICAgICAgIyBkZWZhdWx0IHNob3VsZG4ndCBiZSBpbiBtZW51IGlmIGl0IGlzIG5vdCBwYXJ0IG9mIHZhbHVlcworICAgICAgICBkZWZhdWx0ID0gJ2QnCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKKyAgICAgICAgY3VyciA9IE5vbmUKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxhc3QsIGN1cnIgPSBjdXJyLCBvcHRtZW51WydtZW51J10uZW50cnljb25maWd1cmUoaSwgJ3ZhbHVlJykKKyAgICAgICAgICAgIGlmIGxhc3QgPT0gY3VycjoKKyAgICAgICAgICAgICAgICAjIG5vIG1vcmUgbWVudSBlbnRyaWVzCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3VyciA9PSBkZWZhdWx0KQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgbGVuKGl0ZW1zKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdmFyaWFibGUgaXMgdXBkYXRlZCBjb3JyZWN0bHkKKyAgICAgICAgb3B0bWVudS5wYWNrKCkKKyAgICAgICAgb3B0bWVudS53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBvcHRtZW51WydtZW51J10uaW52b2tlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS5fdmFyaWFibGUuZ2V0KCksIGl0ZW1zWzBdKQorCisgICAgICAgICMgY2hhbmdpbmcgdG8gYW4gaW52YWxpZCBpbmRleCBzaG91bGRuJ3QgY2hhbmdlIHRoZSB2YXJpYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBvcHRtZW51WydtZW51J10uaW52b2tlLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51Ll92YXJpYWJsZS5nZXQoKSwgaXRlbXNbMF0pCisKKyAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKKworICAgICAgICAjIHNwZWNpZnlpbmcgYSBjYWxsYmFjaworICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgZGVmIGNiX3Rlc3QoaXRlbSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGl0ZW1zWzFdKQorICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgJ2EnLCBjb21tYW5kPWNiX3Rlc3QsCisgICAgICAgICAgICAqaXRlbXMpCisgICAgICAgIG9wdG1lbnVbJ21lbnUnXS5pbnZva2UoMSkKKyAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk1lbnUgY2FsbGJhY2sgbm90IGludm9rZWQiKQorCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisKKwordGVzdHNfZ3VpID0gKExhYmVsZWRTY2FsZVRlc3QsIE9wdGlvbk1lbnVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5IGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODAwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKQEAgLTAsMCArMSw0MjYgQEAKKyMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHR0aworCitjbGFzcyBNb2NrVGNsT2JqKG9iamVjdCk6CisgICAgdHlwZW5hbWUgPSAndGVzdCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiB1bmljb2RlKHNlbGYudmFsKQorCisKK2NsYXNzIE1vY2tTdGF0ZVNwZWMob2JqZWN0KToKKyAgICB0eXBlbmFtZSA9ICdTdGF0ZVNwZWMnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnZhbCA9IGFyZ3MKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4oc2VsZi52YWwpCisKKworY2xhc3MgSW50ZXJuYWxGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9vcHRkaWN0KHNlbGYpOgorICAgICAgICBkZWYgY2hlY2tfYWdhaW5zdChmbXRfb3B0cywgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihmbXRfb3B0cyksIDIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnBvcChmbXRfb3B0c1tpXSksIGZtdF9vcHRzW2kgKyAxXSkKKyAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBzdGlsbCBnb3QgZWxlbWVudHM6ICVzIiAlIHJlc3VsdCkKKworICAgICAgICAjIHBhc3NpbmcgYW4gZW1wdHkgZGljdCBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCAodHVwbGUgaGVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2Zvcm1hdF9vcHRkaWN0KHt9KSkKKworICAgICAgICAjIGNoZWNrIGxpc3QgZm9ybWF0dGluZworICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCh7J2ZnJzogJ2JsdWUnLCAncGFkZGluZyc6IFsxLCAyLCAzLCA0XX0pLAorICAgICAgICAgICAgeyctZmcnOiAnYmx1ZScsICctcGFkZGluZyc6ICcxIDIgMyA0J30pCisKKyAgICAgICAgIyBjaGVjayB0dXBsZSBmb3JtYXR0aW5nIChzYW1lIGFzIGxpc3QpCisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KHsndGVzdCc6ICgxLCAyLCAnJywgMCl9KSwKKyAgICAgICAgICAgIHsnLXRlc3QnOiAnMSAyIHt9IDAnfSkKKworICAgICAgICAjIGNoZWNrIHVudG91Y2hlZCB2YWx1ZXMKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3Qoeyd0ZXN0JzogeydsZWZ0JzogJ2FzIGlzJ319KSwKKyAgICAgICAgICAgIHsnLXRlc3QnOiB7J2xlZnQnOiAnYXMgaXMnfX0pCisKKyAgICAgICAgIyBjaGVjayBzY3JpcHQgZm9ybWF0dGluZyBhbmQgdW50b3VjaGVkIHZhbHVlKHMpCisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KAorICAgICAgICAgICAgICAgIHsndGVzdCc6IFsxLCAtMSwgJycsICcybScsIDBdLCAnbm9jaGFuZ2UxJzogMywKKyAgICAgICAgICAgICAgICAgJ25vY2hhbmdlMic6ICdhYmMgZGVmJ30sIHNjcmlwdD1UcnVlKSwKKyAgICAgICAgICAgIHsnLXRlc3QnOiAnezEgLTEge30gMm0gMH0nLCAnLW5vY2hhbmdlMSc6IDMsCisgICAgICAgICAgICAgJy1ub2NoYW5nZTInOiAnYWJjIGRlZicgfSkKKworICAgICAgICBvcHRzID0ge3UnzrHOss6zJzogVHJ1ZSwgdSfDoSc6IEZhbHNlfQorICAgICAgICBvcmlnX29wdHMgPSBvcHRzLmNvcHkoKQorICAgICAgICAjIGNoZWNrIGlmIGdpdmluZyB1bmljb2RlIGtleXMgaXMgZmluZQorICAgICAgICBjaGVja19hZ2FpbnN0KHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cyksIHt1Jy3Osc6yzrMnOiBUcnVlLCB1Jy3DoSc6IEZhbHNlfSkKKyAgICAgICAgIyBvcHRzIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgb3JpZ19vcHRzKQorCisgICAgICAgICMgcGFzc2luZyB2YWx1ZXMgd2l0aCBzcGFjZXMgaW5zaWRlIGEgdHVwbGUvbGlzdAorICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCgKKyAgICAgICAgICAgICAgICB7J29wdGlvbic6ICgnb25lIHR3bycsICd0aHJlZScpfSksCisgICAgICAgICAgICB7Jy1vcHRpb24nOiAne29uZSB0d299IHRocmVlJ30pCisKKyAgICAgICAgIyBpZ25vcmUgYW4gb3B0aW9uCisgICAgICAgIGFtb3VudF9vcHRzID0gbGVuKHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cywgaWdub3JlPSh1J8OhJykpKSAvLyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW1vdW50X29wdHMsIGxlbihvcHRzKSAtIDEpCisKKyAgICAgICAgIyBpZ25vcmUgbm9uLWV4aXN0aW5nIG9wdGlvbnMKKyAgICAgICAgYW1vdW50X29wdHMgPSBsZW4odHRrLl9mb3JtYXRfb3B0ZGljdChvcHRzLCBpZ25vcmU9KHUnw6EnLCAnYicpKSkgLy8gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFtb3VudF9vcHRzLCBsZW4ob3B0cykgLSAxKQorCisgICAgICAgICMgaWdub3JlIGV2ZXJ5IG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cywgaWdub3JlPW9wdHMua2V5cygpKSkKKworCisgICAgZGVmIHRlc3RfZm9ybWF0X21hcGRpY3Qoc2VsZik6CisgICAgICAgIG9wdHMgPSB7J2EnOiBbKCdiJywgJ2MnLCAndmFsJyksICgnZCcsICdvdGhlcnZhbCcpLCAoJycsICdzaW5nbGUnKV19CisgICAgICAgIHJlc3VsdCA9IHR0ay5fZm9ybWF0X21hcGRpY3Qob3B0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbGVuKG9wdHMua2V5cygpKSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJy1hJywgJ3tiIGN9IHZhbCBkIG90aGVydmFsIHt9IHNpbmdsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X21hcGRpY3Qob3B0cywgc2NyaXB0PVRydWUpLAorICAgICAgICAgICAgKCctYScsICd7e2IgY30gdmFsIGQgb3RoZXJ2YWwge30gc2luZ2xlfScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh7MjogW119KSwgKCctMicsICcnKSkKKworICAgICAgICBvcHRzID0ge3Unw7zDscOtxIfDs2TDqCc6IFsodSfDoScsIHUndsOjbCcpXX0KKyAgICAgICAgcmVzdWx0ID0gdHRrLl9mb3JtYXRfbWFwZGljdChvcHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKHUnLcO8w7HDrcSHw7Nkw6gnLCB1J8OhIHbDo2wnKSkKKworICAgICAgICAjIGVtcHR5IHN0YXRlcworICAgICAgICB2YWxpZCA9IHsnb3B0JzogWygnJywgdScnLCAnaGknKV19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh2YWxpZCksICgnLW9wdCcsICd7IH0gaGknKSkKKworICAgICAgICAjIHdoZW4gcGFzc2luZyBtdWx0aXBsZSBzdGF0ZXMsIHRoZXkgYWxsIG11c3QgYmUgc3RyaW5ncworICAgICAgICBpbnZhbGlkID0geydvcHQnOiBbKDEsIDIsICd2YWxpZCB2YWwnKV19CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbWFwZGljdCwgaW52YWxpZCkKKyAgICAgICAgaW52YWxpZCA9IHsnb3B0JzogWyhbMV0sICcyJywgJ3ZhbGlkIHZhbCcpXX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dGsuX2Zvcm1hdF9tYXBkaWN0LCBpbnZhbGlkKQorICAgICAgICAjIGJ1dCB3aGVuIHBhc3NpbmcgYSBzaW5nbGUgc3RhdGUsIGl0IGNhbiBiZSBhbnl0aGluZworICAgICAgICB2YWxpZCA9IHsnb3B0JzogW1sxLCAndmFsdWUnXV19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh2YWxpZCksICgnLW9wdCcsICcxIHZhbHVlJykpCisgICAgICAgICMgc3BlY2lhbCBhdHRlbnRpb24gdG8gc2luZ2xlIHN0YXRlcyB3aGljaCBldmFsdXRlIHRvIEZhbHNlCisgICAgICAgIGZvciBzdGF0ZXZhbCBpbiAoTm9uZSwgMCwgRmFsc2UsICcnLCBzZXQoKSk6ICMganVzdCBzb21lIHNhbXBsZXMKKyAgICAgICAgICAgIHZhbGlkID0geydvcHQnOiBbKHN0YXRldmFsLCAndmFsdWUnKV19CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X21hcGRpY3QodmFsaWQpLAorICAgICAgICAgICAgICAgICgnLW9wdCcsICd7fSB2YWx1ZScpKQorCisgICAgICAgICMgdmFsdWVzIG11c3QgYmUgaXRlcmFibGUKKyAgICAgICAgb3B0cyA9IHsnYSc6IE5vbmV9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbWFwZGljdCwgb3B0cykKKworICAgICAgICAjIGl0ZW1zIGluIHRoZSB2YWx1ZSBtdXN0IGhhdmUgc2l6ZSA+PSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHR0ay5fZm9ybWF0X21hcGRpY3QsCisgICAgICAgICAgICB7J2EnOiBbKCdpbnZhbGlkJywgKV19KQorCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZWxlbWNyZWF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoTm9uZSksIChOb25lLCAoKSkpCisKKyAgICAgICAgIyMgVGVzdGluZyB0eXBlID0gaW1hZ2UKKyAgICAgICAgIyBpbWFnZSB0eXBlIGV4cGVjdHMgYXQgbGVhc3QgYW4gaW1hZ2UgbmFtZSwgc28gdGhpcyBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBJbmRleEVycm9yIHNpbmNlIGl0IHRyaWVzIHRvIGFjY2VzcyB0aGUgaW5kZXggMCBvZiBhbiBlbXB0eSB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlLCAnaW1hZ2UnKQorCisgICAgICAgICMgZG9uJ3QgZm9ybWF0IHJldHVybmVkIHZhbHVlcyBhcyBhIHRjbCBzY3JpcHQKKyAgICAgICAgIyBtaW5pbXVtIGFjY2VwdGFibGUgZm9yIGltYWdlIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIEZhbHNlLCAndGVzdCcpLAorICAgICAgICAgICAgKCJ0ZXN0ICIsICgpKSkKKyAgICAgICAgIyBzcGVjaWZpeW5nIGEgc3RhdGUgc3BlYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2ltYWdlJywgRmFsc2UsICd0ZXN0JywKKyAgICAgICAgICAgICgnJywgJ2EnKSksICgidGVzdCB7fSBhIiwgKCkpKQorICAgICAgICAjIHN0YXRlIHNwZWMgd2l0aCBtdWx0aXBsZSBzdGF0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIEZhbHNlLCAndGVzdCcsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJykpLCAoInRlc3Qge2EgYn0gYyIsICgpKSkKKyAgICAgICAgIyBzdGF0ZSBzcGVjIGFuZCBvcHRpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnaW1hZ2UnLCBGYWxzZSwgJ3Rlc3QnLAorICAgICAgICAgICAgKCdhJywgJ2InKSwgYT0neCcsIGI9J3knKSwgKCJ0ZXN0IGEgYiIsICgiLWEiLCAieCIsICItYiIsICJ5IikpKQorICAgICAgICAjIGZvcm1hdCByZXR1cm5lZCB2YWx1ZXMgYXMgYSB0Y2wgc2NyaXB0CisgICAgICAgICMgc3RhdGUgc3BlYyB3aXRoIG11bHRpcGxlIHN0YXRlcyBhbmQgYW4gb3B0aW9uIHdpdGggYSBtdWx0aXZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnaW1hZ2UnLCBUcnVlLCAndGVzdCcsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJywgJ2QnKSwgeD1bMiwgM10pLCAoInt0ZXN0IHthIGIgY30gZH0iLCAiLXggezIgM30iKSkKKworICAgICAgICAjIyBUZXN0aW5nIHR5cGUgPSB2c2FwaQorICAgICAgICAjIHZzYXBpIHR5cGUgZXhwZWN0cyBhdCBsZWFzdCBhIGNsYXNzIG5hbWUgYW5kIGEgcGFydF9pZCwgc28gdGhpcworICAgICAgICAjIHNob3VsZCByYWlzZSBhbiBWYWx1ZUVycm9yIHNpbmNlIGl0IHRyaWVzIHRvIGdldCB0d28gZWxlbWVudHMgZnJvbQorICAgICAgICAjIGFuIGVtcHR5IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUsICd2c2FwaScpCisKKyAgICAgICAgIyBkb24ndCBmb3JtYXQgcmV0dXJuZWQgdmFsdWVzIGFzIGEgdGNsIHNjcmlwdAorICAgICAgICAjIG1pbmltdW0gYWNjZXB0YWJsZSBmb3IgdnNhcGkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCd2c2FwaScsIEZhbHNlLCAnYScsICdiJyksCisgICAgICAgICAgICAoImEgYiAiLCAoKSkpCisgICAgICAgICMgbm93IHdpdGggYSBzdGF0ZSBzcGVjIHdpdGggbXVsdGlwbGUgc3RhdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgndnNhcGknLCBGYWxzZSwgJ2EnLCAnYicsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJykpLCAoImEgYiB7YSBifSBjIiwgKCkpKQorICAgICAgICAjIHN0YXRlIHNwZWMgYW5kIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ3ZzYXBpJywgRmFsc2UsICdhJywgJ2InLAorICAgICAgICAgICAgKCdhJywgJ2InKSwgb3B0PSd4JyksICgiYSBiIGEgYiIsICgiLW9wdCIsICJ4IikpKQorICAgICAgICAjIGZvcm1hdCByZXR1cm5lZCB2YWx1ZXMgYXMgYSB0Y2wgc2NyaXB0CisgICAgICAgICMgc3RhdGUgc3BlYyB3aXRoIGEgbXVsdGl2YWx1ZSBhbmQgYW4gb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgndnNhcGknLCBUcnVlLCAnYScsICdiJywKKyAgICAgICAgICAgICgnYScsICdiJywgWzEsIDJdKSwgb3B0PSd4JyksICgie2EgYiB7YSBifSB7MSAyfX0iLCAiLW9wdCB4IikpCisKKyAgICAgICAgIyBUZXN0aW5nIHR5cGUgPSBmcm9tCisgICAgICAgICMgZnJvbSB0eXBlIGV4cGVjdHMgYXQgbGVhc3QgYSB0eXBlIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSwgJ2Zyb20nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnZnJvbScsIEZhbHNlLCAnYScpLAorICAgICAgICAgICAgKCdhJywgKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2Zyb20nLCBGYWxzZSwgJ2EnLCAnYicpLAorICAgICAgICAgICAgKCdhJywgKCdiJywgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnZnJvbScsIFRydWUsICdhJywgJ2InKSwKKyAgICAgICAgICAgICgne2F9JywgJ2InKSkKKworCisgICAgZGVmIHRlc3RfZm9ybWF0X2xheW91dGxpc3Qoc2VsZik6CisgICAgICAgIGRlZiBzYW1wbGUoaW5kZW50PTAsIGluZGVudF9zaXplPTIpOgorICAgICAgICAgICAgcmV0dXJuIHR0ay5fZm9ybWF0X2xheW91dGxpc3QoCisgICAgICAgICAgICBbKCdhJywgeydvdGhlcic6IFsxLCAyLCAzXSwgJ2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICBbKCdiJywgeydjaGlsZHJlbic6CisgICAgICAgICAgICAgICAgICAgIFsoJ2MnLCB7J2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2QnLCB7J25pY2UnOiAnb3B0J30pXSwgJ3NvbWV0aGluZyc6ICgxLCAyKQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgIH0pXSwgaW5kZW50PWluZGVudCwgaW5kZW50X3NpemU9aW5kZW50X3NpemUpWzBdCisKKyAgICAgICAgZGVmIHNhbXBsZV9leHBlY3RlZChpbmRlbnQ9MCwgaW5kZW50X3NpemU9Mik6CisgICAgICAgICAgICBzcGFjZXMgPSBsYW1iZGEgYW1vdW50PTA6ICcgJyAqIChhbW91bnQgKyBpbmRlbnQpCisgICAgICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgICAgICIlc2EgLW90aGVyIHsxIDIgM30gLWNoaWxkcmVuIHtcbiIKKyAgICAgICAgICAgICAgICAiJXNiIC1jaGlsZHJlbiB7XG4iCisgICAgICAgICAgICAgICAgIiVzYyAtc29tZXRoaW5nIHsxIDJ9IC1jaGlsZHJlbiB7XG4iCisgICAgICAgICAgICAgICAgIiVzZCAtbmljZSBvcHRcbiIKKyAgICAgICAgICAgICAgICAiJXN9XG4iCisgICAgICAgICAgICAgICAgIiVzfVxuIgorICAgICAgICAgICAgICAgICIlc30iICUgKHNwYWNlcygpLCBzcGFjZXMoaW5kZW50X3NpemUpLAorICAgICAgICAgICAgICAgICAgICBzcGFjZXMoMiAqIGluZGVudF9zaXplKSwgc3BhY2VzKDMgKiBpbmRlbnRfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcygyICogaW5kZW50X3NpemUpLCBzcGFjZXMoaW5kZW50X3NpemUpLCBzcGFjZXMoKSkpCisKKyAgICAgICAgIyBlbXB0eSBsYXlvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0KFtdKVswXSwgJycpCisKKyAgICAgICAgIyBzbWFsbGVzdCAoYWZ0ZXIgYW4gZW1wdHkgb25lKSBhY2NlcHRhYmxlIGxheW91dAorICAgICAgICBzbWFsbGVzdCA9IHR0ay5fZm9ybWF0X2xheW91dGxpc3QoWygnYScsIE5vbmUpXSwgaW5kZW50PTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc21hbGxlc3QsCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0KFsoJ2EnLCAnJyldLCBpbmRlbnQ9MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc21hbGxlc3RbMF0sICdhJykKKworICAgICAgICAjIHRlc3RpbmcgaW5kZW50YXRpb24gbGV2ZWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlKCksIHNhbXBsZV9leHBlY3RlZCgpKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlKGkpLCBzYW1wbGVfZXhwZWN0ZWQoaSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXBsZShpLCBpKSwgc2FtcGxlX2V4cGVjdGVkKGksIGkpKQorCisgICAgICAgICMgaW52YWxpZCBsYXlvdXQgZm9ybWF0LCBkaWZmZXJlbnQga2luZCBvZiBleGNlcHRpb25zIHdpbGwgYmUKKyAgICAgICAgIyByYWlzZWQKKworICAgICAgICAjIHBsYWluIHdyb25nIGZvcm1hdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LAorICAgICAgICAgICAgWydiYWQnLCAnZm9ybWF0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbGF5b3V0bGlzdCwgTm9uZSkKKyAgICAgICAgIyBfZm9ybWF0X2xheW91dGxpc3QgYWx3YXlzIGV4cGVjdHMgdGhlIHNlY29uZCBpdGVtIChpbiBldmVyeSBpdGVtKQorICAgICAgICAjIHRvIGFjdCBsaWtlIGEgZGljdCAoZXhjZXB0IHdoZW4gdGhlIHZhbHVlIGV2YWx1dGVzIHRvIEZhbHNlKS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LCBbKCdhJywgJ2InKV0pCisgICAgICAgICMgYmFkIGNoaWxkcmVuIGZvcm1hdHRpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9mb3JtYXRfbGF5b3V0bGlzdCwKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J2NoaWxkcmVuJzogeydhJzogTm9uZX19KV0pCisKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9mcm9tX3NldHRpbmdzKHNlbGYpOgorICAgICAgICAjIGVtcHR5IG9wdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6CisgICAgICAgICAgICB7J2NvbmZpZ3VyZSc6IE5vbmUsICdtYXAnOiBOb25lLCAnZWxlbWVudCBjcmVhdGUnOiBOb25lfX0pKQorCisgICAgICAgICMgZW1wdHkgbGF5b3V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6IHsnbGF5b3V0JzogTm9uZX19KSwKKyAgICAgICAgICAgICJ0dGs6OnN0eWxlIGxheW91dCBuYW1lIHtcbm51bGxcbn0iKQorCisgICAgICAgIGNvbmZpZ2RpY3QgPSB7dSfOsc6yzrMnOiBUcnVlLCB1J8OhJzogRmFsc2V9CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoeyduYW1lJzogeydjb25maWd1cmUnOiBjb25maWdkaWN0fX0pKQorCisgICAgICAgIG1hcGRpY3QgPSB7dSfDvMOxw63Eh8OzZMOoJzogWyh1J8OhJywgdSd2w6NsJyldfQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICB0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6IHsnbWFwJzogbWFwZGljdH19KSkKKworICAgICAgICAjIGludmFsaWQgaW1hZ2UgZWxlbWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLAorICAgICAgICAgICAgdHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncywgeyduYW1lJzogeydlbGVtZW50IGNyZWF0ZSc6IFsnaW1hZ2UnXX19KQorCisgICAgICAgICMgbWluaW1hbCB2YWxpZCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyh7J25hbWUnOgorICAgICAgICAgICAgeydlbGVtZW50IGNyZWF0ZSc6IFsnaW1hZ2UnLCAnbmFtZSddfX0pKQorCisgICAgICAgIGltYWdlID0geyd0aGluZyc6IHsnZWxlbWVudCBjcmVhdGUnOgorICAgICAgICAgICAgWydpbWFnZScsICduYW1lJywgKCdzdGF0ZTEnLCAnc3RhdGUyJywgJ3ZhbCcpXX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyhpbWFnZSksCisgICAgICAgICAgICAidHRrOjpzdHlsZSBlbGVtZW50IGNyZWF0ZSB0aGluZyBpbWFnZSB7bmFtZSB7c3RhdGUxIHN0YXRlMn0gdmFsfSAiKQorCisgICAgICAgIGltYWdlWyd0aGluZyddWydlbGVtZW50IGNyZWF0ZSddLmFwcGVuZCh7J29wdCc6IDMwfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKGltYWdlKSwKKyAgICAgICAgICAgICJ0dGs6OnN0eWxlIGVsZW1lbnQgY3JlYXRlIHRoaW5nIGltYWdlIHtuYW1lIHtzdGF0ZTEgc3RhdGUyfSB2YWx9ICIKKyAgICAgICAgICAgICItb3B0IDMwIikKKworICAgICAgICBpbWFnZVsndGhpbmcnXVsnZWxlbWVudCBjcmVhdGUnXVstMV1bJ29wdCddID0gW01vY2tUY2xPYmooMyksCisgICAgICAgICAgICBNb2NrVGNsT2JqKCcybScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoaW1hZ2UpLAorICAgICAgICAgICAgInR0azo6c3R5bGUgZWxlbWVudCBjcmVhdGUgdGhpbmcgaW1hZ2Uge25hbWUge3N0YXRlMSBzdGF0ZTJ9IHZhbH0gIgorICAgICAgICAgICAgIi1vcHQgezMgMm19IikKKworCisgICAgZGVmIHRlc3RfZGljdF9mcm9tX3RjbHR1cGxlKHNlbGYpOgorICAgICAgICBmYWtldHR1cGxlID0gKCctYScsICd7MSAyIDN9JywgJy1zb21ldGhpbmcnLCAnZm9vJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKGZha2V0dHVwbGUsIEZhbHNlKSwKKyAgICAgICAgICAgIHsnLWEnOiAnezEgMiAzfScsICctc29tZXRoaW5nJzogJ2Zvbyd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSksCisgICAgICAgICAgICB7J2EnOiAnezEgMiAzfScsICdzb21ldGhpbmcnOiAnZm9vJ30pCisKKyAgICAgICAgIyBwYXNzaW5nIGEgdHVwbGUgd2l0aCBhIHNpbmdsZSBpdGVtIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgZGljdCwKKyAgICAgICAgIyBzaW5jZSBpdCB0cmllcyB0byBicmVhayB0aGUgdHVwbGUgYnkgcGFpcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCdzaW5nbGUnLCApKSkKKworICAgICAgICBzc3BlYyA9IE1vY2tTdGF0ZVNwZWMoJ2EnLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCctYScsIChzc3BlYywgJ3ZhbCcpKSksCisgICAgICAgICAgICB7J2EnOiBbKCdhJywgJ2InLCAndmFsJyldfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKChNb2NrVGNsT2JqKCctcGFkZGluZycpLAorICAgICAgICAgICAgW01vY2tUY2xPYmooJzEnKSwgMiwgTW9ja1RjbE9iaignM20nKV0pKSwKKyAgICAgICAgICAgIHsncGFkZGluZyc6IFsxLCAyLCAnM20nXX0pCisKKworICAgIGRlZiB0ZXN0X2xpc3RfZnJvbV9zdGF0ZXNwZWMoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0X2l0KHNzcGVjLCB2YWx1ZSwgcmVzX3ZhbHVlLCBzdGF0ZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9zdGF0ZXNwZWMoCisgICAgICAgICAgICAgICAgKHNzcGVjLCB2YWx1ZSkpLCBbc3RhdGVzICsgKHJlc192YWx1ZSwgKV0pCisKKyAgICAgICAgc3RhdGVzX2V2ZW4gPSB0dXBsZSgnc3RhdGUlZCcgJSBpIGZvciBpIGluIHJhbmdlKDYpKQorICAgICAgICBzdGF0ZXNwZWMgPSBNb2NrU3RhdGVTcGVjKCpzdGF0ZXNfZXZlbikKKyAgICAgICAgdGVzdF9pdChzdGF0ZXNwZWMsICd2YWwnLCAndmFsJywgc3RhdGVzX2V2ZW4pCisgICAgICAgIHRlc3RfaXQoc3RhdGVzcGVjLCBNb2NrVGNsT2JqKCd2YWwnKSwgJ3ZhbCcsIHN0YXRlc19ldmVuKQorCisgICAgICAgIHN0YXRlc19vZGQgPSB0dXBsZSgnc3RhdGUlZCcgJSBpIGZvciBpIGluIHJhbmdlKDUpKQorICAgICAgICBzdGF0ZXNwZWMgPSBNb2NrU3RhdGVTcGVjKCpzdGF0ZXNfb2RkKQorICAgICAgICB0ZXN0X2l0KHN0YXRlc3BlYywgJ3ZhbCcsICd2YWwnLCBzdGF0ZXNfb2RkKQorCisgICAgICAgIHRlc3RfaXQoKCdhJywgJ2InLCAnYycpLCBNb2NrVGNsT2JqKCd2YWwnKSwgJ3ZhbCcsICgnYScsICdiJywgJ2MnKSkKKworCisgICAgZGVmIHRlc3RfbGlzdF9mcm9tX2xheW91dHR1cGxlKHNlbGYpOgorICAgICAgICAjIGVtcHR5IGxheW91dCB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgpKSkKKworICAgICAgICAjIHNob3J0ZXN0IGxheW91dCB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgnbmFtZScsICkpLAorICAgICAgICAgICAgWygnbmFtZScsIHt9KV0pCisKKyAgICAgICAgIyBub3Qgc28gaW50ZXJlc3RpbmcgbHR1cGxlCisgICAgICAgIHNhbXBsZV9sdHVwbGUgPSAoJ25hbWUnLCAnLW9wdGlvbicsICd2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUoc2FtcGxlX2x0dXBsZSksCisgICAgICAgICAgICBbKCduYW1lJywgeydvcHRpb24nOiAndmFsdWUnfSldKQorCisgICAgICAgICMgZW1wdHkgY2hpbGRyZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgKKyAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICgpKSksCisgICAgICAgICAgICBbKCdzb21ldGhpbmcnLCB7J2NoaWxkcmVuJzogW119KV0KKyAgICAgICAgKQorCisgICAgICAgICMgbW9yZSBpbnRlcmVzdGluZyBsdHVwbGUKKyAgICAgICAgbHR1cGxlID0gKAorICAgICAgICAgICAgJ25hbWUnLCAnLW9wdGlvbicsICduaWNlb25lJywgJy1jaGlsZHJlbicsICgKKyAgICAgICAgICAgICAgICAoJ290aGVyb25lJywgJy1jaGlsZHJlbicsICgKKyAgICAgICAgICAgICAgICAgICAgKCdjaGlsZCcsICkpLCAnLW90aGVyb3B0JywgJ290aGVydmFsdWUnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUobHR1cGxlKSwKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICduaWNlb25lJywgJ2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICBbKCdvdGhlcm9uZScsIHsnb3RoZXJvcHQnOiAnb3RoZXJ2YWx1ZScsICdjaGlsZHJlbic6CisgICAgICAgICAgICAgICAgICAgIFsoJ2NoaWxkJywge30pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldCisgICAgICAgICkKKworICAgICAgICAjIGJhZCB0dXBsZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnLCAndmFsdWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ3NvbWV0aGluZycsICctY2hpbGRyZW4nKSkgIyBubyBjaGlsZHJlbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICd2YWx1ZScpKSAjIGludmFsaWQgY2hpbGRyZW4KKworCisgICAgZGVmIHRlc3RfdmFsX29yX2RpY3Qoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKG9wdCwgdmFsPU5vbmUpOgorICAgICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXN0IHZhbCIKKyAgICAgICAgICAgIHJldHVybiAob3B0LCB2YWwpCisKKyAgICAgICAgb3B0aW9ucyA9IHsndGVzdCc6IE5vbmV9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jKSwgInRlc3QgdmFsIikKKworICAgICAgICBvcHRpb25zID0geyd0ZXN0JzogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMpLCBvcHRpb25zKQorCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X3N0cmluZ3ZhbChzZWxmKToKKyAgICAgICAgdGVzdHMgPSAoCisgICAgICAgICAgICAoMCwgMCksICgnMDknLCA5KSwgKCdhJywgJ2EnKSwgKHUnw6HDmicsIHUnw6HDmicpLCAoW10sICdbXScpLAorICAgICAgICAgICAgKE5vbmUsICdOb25lJykKKyAgICAgICAgKQorICAgICAgICBmb3Igb3JpZywgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fY29udmVydF9zdHJpbmd2YWwob3JpZyksIGV4cGVjdGVkKQorCisgICAgICAgIGlmIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSA9PSAnYXNjaWknOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgIHR0ay5fY29udmVydF9zdHJpbmd2YWwsICfDoScpCisKKworY2xhc3MgVGNsT2Jqc1RvUHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGFkaWN0ID0geydvcHQnOiB1J3bDpGzDusOoJ30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogdSd2w6Rsw7rDqCd9KQorCisgICAgICAgIGFkaWN0WydvcHQnXSA9IE1vY2tUY2xPYmooYWRpY3RbJ29wdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwgeydvcHQnOiB1J3bDpGzDusOoJ30pCisKKyAgICBkZWYgdGVzdF9tdWx0aXZhbHVlcyhzZWxmKToKKyAgICAgICAgYWRpY3QgPSB7J29wdCc6IFsxLCAyLCAzLCA0XX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogWzEsIDIsIDMsIDRdfSkKKworICAgICAgICBhZGljdFsnb3B0J10gPSBbMSwgJ3htJywgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogWzEsICd4bScsIDNdfSkKKworICAgICAgICBhZGljdFsnb3B0J10gPSAoTW9ja1N0YXRlU3BlYygnYScsICdiJyksIHUndsOhbMWpw6gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwKKyAgICAgICAgICAgIHsnb3B0JzogWygnYScsICdiJywgdSd2w6FsxanDqCcpXX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weSh7J3gnOiBbJ3kgeiddfSksCisgICAgICAgICAgICB7J3gnOiBbJ3kgeiddfSkKKworICAgIGRlZiB0ZXN0X25vc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLnRjbG9ianNfdG9fcHkoeyd0ZXh0JzogJ3NvbWUgdGV4dCd9KSwKKyAgICAgICAgICAgIHsndGV4dCc6ICdzb21lIHRleHQnfSkKKwordGVzdHNfbm9ndWkgPSAoSW50ZXJuYWxGdW5jdGlvbnNUZXN0LCBUY2xPYmpzVG9QeVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ub2d1aSkKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5IGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwZTA3NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5CkBAIC0wLDAgKzEsOTEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKKworaW1wb3J0IHN1cHBvcnQKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFN0eWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQorCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmUoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzdHlsZS5jb25maWd1cmUoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPSd5ZWxsb3cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmNvbmZpZ3VyZSgnVEJ1dHRvbicsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAneWVsbG93JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3R5bGUuY29uZmlndXJlKCdUQnV0dG9uJyksIGRpY3QpKQorCisKKyAgICBkZWYgdGVzdF9tYXAoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzdHlsZS5tYXAoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPVsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubWFwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgIFsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0eWxlLm1hcCgnVEJ1dHRvbicpLCBkaWN0KSkKKworCisgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgorICAgICAgICBzdHlsZSA9IHNlbGYuc3R5bGUKKyAgICAgICAgc3R5bGUuY29uZmlndXJlKCdUQnV0dG9uJywgYmFja2dyb3VuZD0neWVsbG93JykKKyAgICAgICAgc3R5bGUubWFwKCdUQnV0dG9uJywgYmFja2dyb3VuZD1bKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubG9va3VwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnKSwgJ3llbGxvdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubG9va3VwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnLAorICAgICAgICAgICAgWydhY3RpdmUnLCAnYmFja2dyb3VuZCddKSwgJ2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmxvb2t1cCgnVEJ1dHRvbicsICdvcHRpb25ub3RkZWZpbmVkJywKKyAgICAgICAgICAgIGRlZmF1bHQ9J2lrbmV3aXQnKSwgJ2lrbmV3aXQnKQorCisKKyAgICBkZWYgdGVzdF9sYXlvdXQoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzdHlsZS5sYXlvdXQsICdOb3RBTGF5b3V0JykKKyAgICAgICAgdHZfc3R5bGUgPSBzdHlsZS5sYXlvdXQoJ1RyZWV2aWV3JykKKworICAgICAgICAjICJlcmFzZSIgVHJlZXZpZXcgbGF5b3V0CisgICAgICAgIHN0eWxlLmxheW91dCgnVHJlZXZpZXcnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5sYXlvdXQoJ1RyZWV2aWV3JyksCisgICAgICAgICAgICBbKCdudWxsJywgeydzdGlja3knOiAnbnN3ZSd9KV0KKyAgICAgICAgKQorCisgICAgICAgICMgcmVzdG9yZSBsYXlvdXQKKyAgICAgICAgc3R5bGUubGF5b3V0KCdUcmVldmlldycsIHR2X3N0eWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmxheW91dCgnVHJlZXZpZXcnKSwgdHZfc3R5bGUpCisKKyAgICAgICAgIyBzaG91bGQgcmV0dXJuIGEgbGlzdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdHlsZS5sYXlvdXQoJ1RCdXR0b24nKSwgbGlzdCkpCisKKyAgICAgICAgIyBjb3JyZWN0IGxheW91dCwgYnV0ICJvcHRpb24iIGRvZXNuJ3QgZXhpc3QgYXMgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHN0eWxlLmxheW91dCwgJ1RyZWV2aWV3JywKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICdpbmV4aXN0ZW50J30pXSkKKworCisgICAgZGVmIHRlc3RfdGhlbWVfdXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnN0eWxlLnRoZW1lX3VzZSwKKyAgICAgICAgICAgICdub25leGlzdGluZ25hbWUnKQorCisgICAgICAgIGN1cnJfdGhlbWUgPSBzZWxmLnN0eWxlLnRoZW1lX3VzZSgpCisgICAgICAgIG5ld190aGVtZSA9IE5vbmUKKyAgICAgICAgZm9yIHRoZW1lIGluIHNlbGYuc3R5bGUudGhlbWVfbmFtZXMoKToKKyAgICAgICAgICAgIGlmIHRoZW1lICE9IGN1cnJfdGhlbWU6CisgICAgICAgICAgICAgICAgbmV3X3RoZW1lID0gdGhlbWUKKyAgICAgICAgICAgICAgICBzZWxmLnN0eWxlLnRoZW1lX3VzZSh0aGVtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBqdXN0IG9uZSB0aGVtZSBhdmFpbGFibGUsIGNhbid0IGdvIG9uIHdpdGggdGVzdHMKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3Vycl90aGVtZSA9PSBuZXdfdGhlbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3X3RoZW1lICE9IHNlbGYuc3R5bGUudGhlbWVfdXNlKCkpCisKKyAgICAgICAgc2VsZi5zdHlsZS50aGVtZV91c2UoY3Vycl90aGVtZSkKKworCit0ZXN0c19ndWkgPSAoU3R5bGVUZXN0LCApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5IGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYzMjNjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMCwwICsxLDExMzcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKKworaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdF9mdW5jdGlvbnMgaW1wb3J0IE1vY2tUY2xPYmosIE1vY2tTdGF0ZVNwZWMKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFdpZGdldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG1ldGhvZHMgYXZhaWxhYmxlIGluIGV2ZXJ5IHR0ayB3aWRnZXQuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorICAgICAgICBzZWxmLndpZGdldCA9IHR0ay5CdXR0b24od2lkdGg9MCwgdGV4dD0iVGV4dCIpCisgICAgICAgIHNlbGYud2lkZ2V0LnBhY2soKQorICAgICAgICBzZWxmLndpZGdldC53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLndpZGdldC5kZXN0cm95KCkKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3RfaWRlbnRpZnkoc2VsZik6CisgICAgICAgIHNlbGYud2lkZ2V0LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmlkZW50aWZ5KAorICAgICAgICAgICAgaW50KHNlbGYud2lkZ2V0LndpbmZvX3dpZHRoKCkgLyAyKSwKKyAgICAgICAgICAgIGludChzZWxmLndpZGdldC53aW5mb19oZWlnaHQoKSAvIDIpCisgICAgICAgICAgICApLCAibGFiZWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmlkZW50aWZ5KC0xLCAtMSksICIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYud2lkZ2V0LmlkZW50aWZ5LCBOb25lLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pZGVudGlmeSwgNSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi53aWRnZXQuaWRlbnRpZnksIDUsICcnKQorCisKKyAgICBkZWYgdGVzdF93aWRnZXRfc3RhdGUoc2VsZik6CisgICAgICAgICMgWFhYIG5vdCBzdXJlIGFib3V0IHRoZSBwb3J0YWJpbGl0eSBvZiBhbGwgdGhlc2UgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZSgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5pbnN0YXRlKFsnIWRpc2FibGVkJ10pLCBUcnVlKQorCisgICAgICAgICMgY2hhbmdpbmcgZnJvbSAhZGlzYWJsZWQgdG8gZGlzYWJsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJ2Rpc2FibGVkJ10pLCAoJyFkaXNhYmxlZCcsICkpCisgICAgICAgICMgbm8gc3RhdGUgY2hhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoWydkaXNhYmxlZCddKSwgKCkpCisgICAgICAgICMgY2hhbmdlIGJhY2sgdG8gIWRpc2FibGUgYnV0IGFsc28gYWN0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoWychZGlzYWJsZWQnLCAnYWN0aXZlJ10pLAorICAgICAgICAgICAgKCchYWN0aXZlJywgJ2Rpc2FibGVkJykpCisgICAgICAgICMgbm8gc3RhdGUgY2hhbmdlcywgYWdhaW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJyFkaXNhYmxlZCcsICdhY3RpdmUnXSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnN0YXRlKFsnYWN0aXZlJywgJyFkaXNhYmxlZCddKSwgKCkpCisKKyAgICAgICAgZGVmIHRlc3RfY2IoYXJnMSwgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gYXJnMSwga3cKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5pbnN0YXRlKFsnIWRpc2FibGVkJ10sCisgICAgICAgICAgICB0ZXN0X2NiLCAiaGkiLCAqKnsibXNnIjogInRoZXJlIn0pLAorICAgICAgICAgICAgKCdoaScsIHsnbXNnJzogJ3RoZXJlJ30pKQorCisgICAgICAgICMgYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBzdGF0ZXNwZWMKKyAgICAgICAgY3VycnN0YXRlID0gc2VsZi53aWRnZXQuc3RhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pbnN0YXRlLAorICAgICAgICAgICAgWydiYWRzdGF0ZSddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pbnN0YXRlLAorICAgICAgICAgICAgWydkaXNhYmxlZCcsICdiYWRzdGF0ZSddKQorICAgICAgICAjIHZlcmlmeSB0aGF0IHdpZGdldCBkaWRuJ3QgY2hhbmdlIGl0cyBzdGF0ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzdGF0ZSwgc2VsZi53aWRnZXQuc3RhdGUoKSkKKworICAgICAgICAjIGVuc3VyaW5nIHRoYXQgcGFzc2luZyBOb25lIGFzIHN0YXRlIGRvZXNuJ3QgbW9kaWZ5IGN1cnJlbnQgc3RhdGUKKyAgICAgICAgc2VsZi53aWRnZXQuc3RhdGUoWydhY3RpdmUnLCAnIWRpc2FibGVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoKSwgKCdhY3RpdmUnLCApKQorCisKK2NsYXNzIEJ1dHRvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52b2tlKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgYnRuID0gdHRrLkJ1dHRvbihjb21tYW5kPWxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoMSkpCisgICAgICAgIGJ0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworCitjbGFzcyBDaGVja2J1dHRvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52b2tlKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgZGVmIGNiX3Rlc3QoKToKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gImNiIHRlc3QgY2FsbGVkIgorCisgICAgICAgIGNidG4gPSB0dGsuQ2hlY2tidXR0b24oY29tbWFuZD1jYl90ZXN0KQorICAgICAgICAjIHRoZSB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdHRrLkNoZWNrYnV0dG9uIGlzIGFjdHVhbGx5CisgICAgICAgICMgdW5kZWZpbmVkIHRpbGwgd2UgaW52b2tlIHRoZSBDaGVja2J1dHRvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG4uc3RhdGUoKSwgKCdhbHRlcm5hdGUnLCApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBjYnRuLnRrLmdsb2JhbGdldHZhciwKKyAgICAgICAgICAgIGNidG5bJ3ZhcmlhYmxlJ10pCisKKyAgICAgICAgcmVzID0gY2J0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgImNiIHRlc3QgY2FsbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuWydvbnZhbHVlJ10sCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKyAgICAgICAgY2J0blsnY29tbWFuZCddID0gJycKKyAgICAgICAgcmVzID0gY2J0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN1Y2Nlc3MpID4gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuWydvZmZ2YWx1ZSddLAorICAgICAgICAgICAgY2J0bi50ay5nbG9iYWxnZXR2YXIoY2J0blsndmFyaWFibGUnXSkpCisKKworY2xhc3MgQ29tYm9ib3hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuY29tYm8gPSB0dGsuQ29tYm9ib3goKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbWJvLmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisgICAgZGVmIF9zaG93X2Ryb3BfZG93bl9saXN0Ym94KHNlbGYpOgorICAgICAgICB3aWR0aCA9IHNlbGYuY29tYm8ud2luZm9fd2lkdGgoKQorICAgICAgICBzZWxmLmNvbWJvLmV2ZW50X2dlbmVyYXRlKCc8QnV0dG9uUHJlc3MtMT4nLCB4PXdpZHRoIC0gNSwgeT01KQorICAgICAgICBzZWxmLmNvbWJvLmV2ZW50X2dlbmVyYXRlKCc8QnV0dG9uUmVsZWFzZS0xPicsIHg9d2lkdGggLSA1LCB5PTUpCisgICAgICAgIHNlbGYuY29tYm8udXBkYXRlX2lkbGV0YXNrcygpCisKKworICAgIGRlZiB0ZXN0X3ZpcnR1YWxfZXZlbnQoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorCisgICAgICAgIHNlbGYuY29tYm9bJ3ZhbHVlcyddID0gWzFdCisgICAgICAgIHNlbGYuY29tYm8uYmluZCgnPDxDb21ib2JveFNlbGVjdGVkPj4nLAorICAgICAgICAgICAgbGFtYmRhIGV2dDogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkpCisgICAgICAgIHNlbGYuY29tYm8ucGFjaygpCisgICAgICAgIHNlbGYuY29tYm8ud2FpdF92aXNpYmlsaXR5KCkKKworICAgICAgICBoZWlnaHQgPSBzZWxmLmNvbWJvLndpbmZvX2hlaWdodCgpCisgICAgICAgIHNlbGYuX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goKQorICAgICAgICBzZWxmLmNvbWJvLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxSZXR1cm4+JykKKyAgICAgICAgc2VsZi5jb21iby51cGRhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisKKyAgICBkZWYgdGVzdF9wb3N0Y29tbWFuZChzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisKKyAgICAgICAgc2VsZi5jb21ib1sncG9zdGNvbW1hbmQnXSA9IGxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgc2VsZi5jb21iby5wYWNrKCkKKyAgICAgICAgc2VsZi5jb21iby53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIHNlbGYuX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworICAgICAgICAjIHRlc3RpbmcgcG9zdGNvbW1hbmQgcmVtb3ZhbAorICAgICAgICBzZWxmLmNvbWJvWydwb3N0Y29tbWFuZCddID0gJycKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQorCisKKyAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVja19nZXRfY3VycmVudChnZXR2YWwsIGN1cnJ2YWwpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvLmdldCgpLCBnZXR2YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm8uY3VycmVudCgpLCBjdXJydmFsKQorCisgICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCcnLCAtMSkKKworICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYScsIDEsICdjJ10KKworICAgICAgICBzZWxmLmNvbWJvLnNldCgnYycpCisgICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCdjJywgMikKKworICAgICAgICBzZWxmLmNvbWJvLmN1cnJlbnQoMCkKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2EnLCAwKQorCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCdkJykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2QnLCAtMSkKKworICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCcnKQorICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9ICgxLCAyLCAnJywgMykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJycsIDIpCisKKyAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIGVtcHR5IHN0cmluZyBzZXQgdGhyb3VnaCBjb25maWd1cmUKKyAgICAgICAgc2VsZi5jb21iby5jb25maWd1cmUodmFsdWVzPVsxLCAnJywgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sICgnMScsICcnLCAnMicpKQorCisgICAgICAgICMgb3V0IG9mIHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuY29tYm8uY3VycmVudCwKKyAgICAgICAgICAgIGxlbihzZWxmLmNvbWJvWyd2YWx1ZXMnXSkpCisgICAgICAgICMgaXQgZXhwZWN0cyBhbiBpbnRlZ2VyIChvciBzb21ldGhpbmcgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5jb21iby5jdXJyZW50LCAnJykKKworICAgICAgICAjIHRlc3RpbmcgY3JlYXRpbmcgY29tYm9ib3ggd2l0aCBlbXB0eSBzdHJpbmcgaW4gdmFsdWVzCisgICAgICAgIGNvbWJvMiA9IHR0ay5Db21ib2JveCh2YWx1ZXM9WzEsIDIsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21ibzJbJ3ZhbHVlcyddLCAoJzEnLCAnMicsICcnKSkKKyAgICAgICAgY29tYm8yLmRlc3Ryb3koKQorCisKK2NsYXNzIEVudHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorICAgICAgICBzZWxmLmVudHJ5ID0gdHRrLkVudHJ5KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5lbnRyeS5kZXN0cm95KCkKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3RfYmJveChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5lbnRyeS5iYm94KDApKSwgNCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5lbnRyeS5iYm94KDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXRlbSwgaW50KSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsICdub2luZGV4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5iYm94LCBOb25lKQorCisKKyAgICBkZWYgdGVzdF9pZGVudGlmeShzZWxmKToKKyAgICAgICAgc2VsZi5lbnRyeS5wYWNrKCkKKyAgICAgICAgc2VsZi5lbnRyeS53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBzZWxmLmVudHJ5LnVwZGF0ZV9pZGxldGFza3MoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5pZGVudGlmeSg1LCA1KSwgInRleHRhcmVhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmlkZW50aWZ5KC0xLCAtMSksICIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuaWRlbnRpZnksIE5vbmUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuaWRlbnRpZnksIDUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuaWRlbnRpZnksIDUsICcnKQorCisKKyAgICBkZWYgdGVzdF92YWxpZGF0aW9uX29wdGlvbnMoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICB0ZXN0X2ludmFsaWQgPSBsYW1iZGE6IHN1Y2Nlc3MuYXBwZW5kKFRydWUpCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGUnXSA9ICdub25lJworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IGxhbWJkYTogRmFsc2UKKworICAgICAgICBzZWxmLmVudHJ5WydpbnZhbGlkY29tbWFuZCddID0gdGVzdF9pbnZhbGlkCisgICAgICAgIHNlbGYuZW50cnkudmFsaWRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworICAgICAgICBzZWxmLmVudHJ5WydpbnZhbGlkY29tbWFuZCddID0gJycKKyAgICAgICAgc2VsZi5lbnRyeS52YWxpZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQorCisgICAgICAgIHNlbGYuZW50cnlbJ2ludmFsaWRjb21tYW5kJ10gPSB0ZXN0X2ludmFsaWQKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5lbnRyeS52YWxpZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQorCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gJycKKyAgICAgICAgc2VsZi5lbnRyeS52YWxpZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQorCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LnZhbGlkYXRlKQorCisKKyAgICBkZWYgdGVzdF92YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICB2YWxpZGF0aW9uID0gW10KKyAgICAgICAgZGVmIHZhbGlkYXRlKHRvX2luc2VydCk6CisgICAgICAgICAgICBpZiBub3QgJ2EnIDw9IHRvX2luc2VydC5sb3dlcigpIDw9ICd6JzoKKyAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLmFwcGVuZChGYWxzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHZhbGlkYXRpb24uYXBwZW5kKFRydWUpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlJ10gPSAna2V5JworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IHNlbGYuZW50cnkucmVnaXN0ZXIodmFsaWRhdGUpLCAnJVMnCisKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsIDEpCisgICAgICAgIHNlbGYuZW50cnkuaW5zZXJ0KCdlbmQnLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsaWRhdGlvbiwgW0ZhbHNlLCBUcnVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmdldCgpLCAnYScpCisKKworICAgIGRlZiB0ZXN0X3JldmFsaWRhdGlvbihzZWxmKToKKyAgICAgICAgZGVmIHZhbGlkYXRlKGNvbnRlbnQpOgorICAgICAgICAgICAgZm9yIGxldHRlciBpbiBjb250ZW50OgorICAgICAgICAgICAgICAgIGlmIG5vdCAnYScgPD0gbGV0dGVyLmxvd2VyKCkgPD0gJ3onOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSBzZWxmLmVudHJ5LnJlZ2lzdGVyKHZhbGlkYXRlKSwgJyVQJworCisgICAgICAgIHNlbGYuZW50cnkuaW5zZXJ0KCdlbmQnLCAnYXZvY2FkbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS52YWxpZGF0ZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuc3RhdGUoKSwgKCkpCisKKyAgICAgICAgc2VsZi5lbnRyeS5kZWxldGUoMCwgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5nZXQoKSwgJycpCisKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsICdhMWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkudmFsaWRhdGUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5zdGF0ZSgpLCAoJ2ludmFsaWQnLCApKQorCisgICAgICAgIHNlbGYuZW50cnkuZGVsZXRlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS52YWxpZGF0ZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuc3RhdGUoKSwgKCkpCisKKworY2xhc3MgUGFuZWR3aW5kb3dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYucGFuZWQgPSB0dGsuUGFuZWR3aW5kb3coKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnBhbmVkLmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgICMgYXR0ZW1wdCB0byBhZGQgYSBjaGlsZCB0aGF0IGlzIG5vdCBhIGRpcmVjdCBjaGlsZCBvZiB0aGUgcGFuZWQgd2luZG93CisgICAgICAgIGxhYmVsID0gdHRrLkxhYmVsKHNlbGYucGFuZWQpCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKGxhYmVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmFkZCwgY2hpbGQpCisgICAgICAgIGxhYmVsLmRlc3Ryb3koKQorICAgICAgICBjaGlsZC5kZXN0cm95KCkKKyAgICAgICAgIyBhbm90aGVyIGF0dGVtcHQKKyAgICAgICAgbGFiZWwgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbChsYWJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5hZGQsIGNoaWxkKQorICAgICAgICBjaGlsZC5kZXN0cm95KCkKKyAgICAgICAgbGFiZWwuZGVzdHJveSgpCisKKyAgICAgICAgZ29vZF9jaGlsZCA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYucGFuZWQuYWRkKGdvb2RfY2hpbGQpCisgICAgICAgICMgcmUtYWRkaW5nIGEgY2hpbGQgaXMgbm90IGFjY2VwdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBnb29kX2NoaWxkKQorCisgICAgICAgIG90aGVyX2NoaWxkID0gdHRrLkxhYmVsKHNlbGYucGFuZWQpCisgICAgICAgIHNlbGYucGFuZWQuYWRkKG90aGVyX2NoaWxkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZSgwKSwgc2VsZi5wYW5lZC5wYW5lKDEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnBhbmUsIDIpCisgICAgICAgIGdvb2RfY2hpbGQuZGVzdHJveSgpCisgICAgICAgIG90aGVyX2NoaWxkLmRlc3Ryb3koKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnBhbmUsIDApCisKKworICAgIGRlZiB0ZXN0X2ZvcmdldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5mb3JnZXQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQorCisgICAgICAgIHNlbGYucGFuZWQuYWRkKHR0ay5MYWJlbCgpKQorICAgICAgICBzZWxmLnBhbmVkLmZvcmdldCgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmZvcmdldCwgMCkKKworCisgICAgZGVmIHRlc3RfaW5zZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmluc2VydCwgTm9uZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCAwKQorCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQyID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQzID0gdHRrLkxhYmVsKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmluc2VydCwgMCwgY2hpbGQpCisKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoJ2VuZCcsIGNoaWxkMikKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoMCwgY2hpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lcygpLCAoc3RyKGNoaWxkKSwgc3RyKGNoaWxkMikpKQorCisgICAgICAgIHNlbGYucGFuZWQuaW5zZXJ0KDAsIGNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmVzKCksIChzdHIoY2hpbGQyKSwgc3RyKGNoaWxkKSkpCisKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoJ2VuZCcsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmVzKCksCisgICAgICAgICAgICAoc3RyKGNoaWxkMiksIHN0cihjaGlsZCksIHN0cihjaGlsZDMpKSkKKworICAgICAgICAjIHJlaW5zZXJ0aW5nIGEgY2hpbGQgc2hvdWxkIG1vdmUgaXQgdG8gaXRzIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICAgcGFuZXMgPSBzZWxmLnBhbmVkLnBhbmVzKCkKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoJ2VuZCcsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYW5lcywgc2VsZi5wYW5lZC5wYW5lcygpKQorCisgICAgICAgICMgbW92aW5nIGNoaWxkMyB0byBjaGlsZDIgcG9zaXRpb24gc2hvdWxkIHJlc3VsdCBpbiBjaGlsZDIgZW5kaW5nIHVwCisgICAgICAgICMgaW4gcHJldmlvdXMgY2hpbGQgcG9zaXRpb24gYW5kIGNoaWxkIGVuZGluZyB1cCBpbiBwcmV2aW91cyBjaGlsZDMKKyAgICAgICAgIyBwb3NpdGlvbgorICAgICAgICBzZWxmLnBhbmVkLmluc2VydChjaGlsZDIsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmVzKCksCisgICAgICAgICAgICAoc3RyKGNoaWxkMyksIHN0cihjaGlsZDIpLCBzdHIoY2hpbGQpKSkKKworCisgICAgZGVmIHRlc3RfcGFuZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5wYW5lLCAwKQorCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoY2hpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYucGFuZWQucGFuZSgwKSwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lKDAsIHdlaWdodD1Ob25lKSwgMCkKKyAgICAgICAgIyBuZXdlciBmb3JtIGZvciBxdWVyeWluZyBhIHNpbmdsZSBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmUoMCwgJ3dlaWdodCcpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZSgwKSwgc2VsZi5wYW5lZC5wYW5lKHN0cihjaGlsZCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQucGFuZSwgMCwKKyAgICAgICAgICAgIGJhZG9wdGlvbj0nc29tZXZhbHVlJykKKworCisgICAgZGVmIHRlc3Rfc2FzaHBvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5zYXNocG9zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIDApCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCwgdGV4dD0nYScpCisgICAgICAgIHNlbGYucGFuZWQuYWRkKGNoaWxkLCB3ZWlnaHQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5zYXNocG9zLCAwKQorICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCwgdGV4dD0nYicpCisgICAgICAgIHNlbGYucGFuZWQuYWRkKGNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5zYXNocG9zLCAxKQorCisgICAgICAgIHNlbGYucGFuZWQucGFjayhleHBhbmQ9VHJ1ZSwgZmlsbD0nYm90aCcpCisgICAgICAgIHNlbGYucGFuZWQud2FpdF92aXNpYmlsaXR5KCkKKworICAgICAgICBjdXJyX3BvcyA9IHNlbGYucGFuZWQuc2FzaHBvcygwKQorICAgICAgICBzZWxmLnBhbmVkLnNhc2hwb3MoMCwgMTAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnJfcG9zICE9IHNlbGYucGFuZWQuc2FzaHBvcygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5wYW5lZC5zYXNocG9zKDApLCBpbnQpKQorCisKK2NsYXNzIFJhZGlvYnV0dG9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZva2Uoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICBkZWYgY2JfdGVzdCgpOgorICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiAiY2IgdGVzdCBjYWxsZWQiCisKKyAgICAgICAgbXl2YXIgPSBUa2ludGVyLkludFZhcigpCisgICAgICAgIGNidG4gPSB0dGsuUmFkaW9idXR0b24oY29tbWFuZD1jYl90ZXN0LCB2YXJpYWJsZT1teXZhciwgdmFsdWU9MCkKKyAgICAgICAgY2J0bjIgPSB0dGsuUmFkaW9idXR0b24oY29tbWFuZD1jYl90ZXN0LCB2YXJpYWJsZT1teXZhciwgdmFsdWU9MSkKKworICAgICAgICByZXMgPSBjYnRuLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAiY2IgdGVzdCBjYWxsZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG5bJ3ZhbHVlJ10sIG15dmFyLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15dmFyLmdldCgpLAorICAgICAgICAgICAgY2J0bi50ay5nbG9iYWxnZXR2YXIoY2J0blsndmFyaWFibGUnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisgICAgICAgIGNidG4yWydjb21tYW5kJ10gPSAnJworICAgICAgICByZXMgPSBjYnRuMi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN1Y2Nlc3MpID4gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuMlsndmFsdWUnXSwgbXl2YXIuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXl2YXIuZ2V0KCksCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjYnRuWyd2YXJpYWJsZSddKSwgc3RyKGNidG4yWyd2YXJpYWJsZSddKSkKKworCisKK2NsYXNzIFNjYWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorICAgICAgICBzZWxmLnNjYWxlID0gdHRrLlNjYWxlKCkKKyAgICAgICAgc2VsZi5zY2FsZS5wYWNrKCkKKyAgICAgICAgc2VsZi5zY2FsZS51cGRhdGUoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNjYWxlLmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9jdXN0b21fZXZlbnQoc2VsZik6CisgICAgICAgIGZhaWx1cmUgPSBbMSwgMSwgMV0gIyB3aWxsIG5lZWQgdG8gYmUgZW1wdHkKKworICAgICAgICBmdW5jaWQgPSBzZWxmLnNjYWxlLmJpbmQoJzw8UmFuZ2VDaGFuZ2VkPj4nLCBsYW1iZGEgZXZ0OiBmYWlsdXJlLnBvcCgpKQorCisgICAgICAgIHNlbGYuc2NhbGVbJ2Zyb20nXSA9IDEwCisgICAgICAgIHNlbGYuc2NhbGVbJ2Zyb21fJ10gPSAxMAorICAgICAgICBzZWxmLnNjYWxlWyd0byddID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbHVyZSkKKworICAgICAgICBmYWlsdXJlID0gWzEsIDEsIDFdCisgICAgICAgIHNlbGYuc2NhbGUuY29uZmlndXJlKGZyb21fPTIsIHRvPTUpCisgICAgICAgIHNlbGYuc2NhbGUuY29uZmlndXJlKGZyb21fPTAsIHRvPS0yKQorICAgICAgICBzZWxmLnNjYWxlLmNvbmZpZ3VyZSh0bz0xMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWx1cmUpCisKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgc2NhbGVfd2lkdGggPSBzZWxmLnNjYWxlLndpbmZvX3dpZHRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldChzY2FsZV93aWR0aCwgMCksIHNlbGYuc2NhbGVbJ3RvJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldCgwLCAwKSwgc2VsZi5zY2FsZVsnZnJvbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIHNlbGYuc2NhbGVbJ3ZhbHVlJ10pCisgICAgICAgIHNlbGYuc2NhbGVbJ3ZhbHVlJ10gPSAzMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIHNlbGYuc2NhbGVbJ3ZhbHVlJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5zY2FsZS5nZXQsICcnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnNjYWxlLmdldCwgMCwgJycpCisKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgIyBzZXQgcmVzdHJpY3RzIHRoZSBtYXgvbWluIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcmFuZ2UKKyAgICAgICAgbWF4ID0gc2VsZi5zY2FsZVsndG8nXQorICAgICAgICBuZXdfbWF4ID0gbWF4ICsgMTAKKyAgICAgICAgc2VsZi5zY2FsZS5zZXQobmV3X21heCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldCgpLCBtYXgpCisgICAgICAgIG1pbiA9IHNlbGYuc2NhbGVbJ2Zyb20nXQorICAgICAgICBzZWxmLnNjYWxlLnNldChtaW4gLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIG1pbikKKworICAgICAgICAjIGNoYW5naW5nIGRpcmVjdGx5IHRoZSB2YXJpYWJsZSBkb2Vzbid0IGltcG9zZSB0aGlzIGxpbWl0YXRpb24gdGhvCisgICAgICAgIHZhciA9IFRraW50ZXIuRG91YmxlVmFyKCkKKyAgICAgICAgc2VsZi5zY2FsZVsndmFyaWFibGUnXSA9IHZhcgorICAgICAgICB2YXIuc2V0KG1heCArIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgdmFyLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIG1heCArIDUpCisgICAgICAgIGRlbCB2YXIKKworICAgICAgICAjIHRoZSBzYW1lIGhhcHBlbnMgd2l0aCB0aGUgdmFsdWUgb3B0aW9uCisgICAgICAgIHNlbGYuc2NhbGVbJ3ZhbHVlJ10gPSBtYXggKyAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIG1heCArIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIHNlbGYuc2NhbGVbJ3ZhbHVlJ10pCisKKyAgICAgICAgIyBuZXZlcnRoZWxlc3MsIG5vdGUgdGhhdCB0aGUgbWF4L21pbiB2YWx1ZXMgd2UgY2FuIGdldCBzcGVjaWZ5aW5nCisgICAgICAgICMgeCwgeSBjb29yZHMgYXJlIHRoZSBvbmVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCByYW5nZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KDAsIDApLCBtaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoc2VsZi5zY2FsZS53aW5mb193aWR0aCgpLCAwKSwgbWF4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuc2NhbGUuc2V0LCBOb25lKQorCisKK2NsYXNzIE5vdGVib29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorICAgICAgICBzZWxmLm5iID0gdHRrLk5vdGVib29rKHBhZGRpbmc9MCkKKyAgICAgICAgc2VsZi5jaGlsZDEgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLmNoaWxkMiA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQxLCB0ZXh0PSdhJykKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDIsIHRleHQ9J2InKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNoaWxkMS5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5jaGlsZDIuZGVzdHJveSgpCisgICAgICAgIHNlbGYubmIuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X3RhYl9pZGVudGlmaWVycyhzZWxmKToKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoMCkKKyAgICAgICAgc2VsZi5uYi5oaWRlKHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLnRhYiwgc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleCgnZW5kJyksIDEpCisgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoJ2VuZCcpLCAxKQorICAgICAgICBzZWxmLm5iLnNlbGVjdChzZWxmLmNoaWxkMikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5uYi50YWIoJ2N1cnJlbnQnKSkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEsIHRleHQ9J2EnKQorCisgICAgICAgIHNlbGYubmIucGFjaygpCisgICAgICAgIHNlbGYubmIud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYignQDUsNScpLCBzZWxmLm5iLnRhYignY3VycmVudCcpKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUsIDEwMCwgNSk6CisgICAgICAgICAgICBpZiBzZWxmLm5iLnRhYignQCVkLCA1JyAlIGksIHRleHQ9Tm9uZSkgPT0gJ2EnOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRhYiB3aXRoIHRleHQgJ2EnIG5vdCBmb3VuZCIpCisKKworICAgIGRlZiB0ZXN0X2FkZF9hbmRfaGlkZGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmhpZGUsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmhpZGUsICdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuYWRkLCB0dGsuTGFiZWwoKSwKKyAgICAgICAgICAgIHVua25vd249J29wdGlvbicpCisKKyAgICAgICAgdGFicyA9IHNlbGYubmIudGFicygpCisgICAgICAgIHNlbGYubmIuaGlkZShzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIHRhYnMpCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLm5iLmFkZChjaGlsZCwgdGV4dD0nYycpCisgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQorCisgICAgICAgIGN1cnIgPSBzZWxmLm5iLmluZGV4KCdjdXJyZW50JykKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCB0aGUgdGFiIGdldHMgcmVhZGRlZCBhdCBpdHMgcHJldmlvdXMgcG9zaXRpb24KKyAgICAgICAgY2hpbGQyX2luZGV4ID0gc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMikKKyAgICAgICAgc2VsZi5uYi5oaWRlKHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQyKSwgY2hpbGQyX2luZGV4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKHNlbGYuY2hpbGQyKSA9PSBzZWxmLm5iLnRhYnMoKVtjaGlsZDJfaW5kZXhdKQorICAgICAgICAjIGJ1dCB0aGUgdGFiIG5leHQgdG8gaXQgKG5vdCBoaWRkZW4pIGlzIHRoZSBvbmUgc2VsZWN0ZWQgbm93CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleCgnY3VycmVudCcpLCBjdXJyICsgMSkKKworCisgICAgZGVmIHRlc3RfZm9yZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmZvcmdldCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuZm9yZ2V0LCAnaGknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmZvcmdldCwgTm9uZSkKKworICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKKyAgICAgICAgY2hpbGQxX2luZGV4ID0gc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyKHNlbGYuY2hpbGQxKSBpbiBzZWxmLm5iLnRhYnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFicykgLSAxLCBsZW4oc2VsZi5uYi50YWJzKCkpKQorCisgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaWxkMV9pbmRleCA9PSBzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQxKSkKKworCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5kZXgsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluZGV4LCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYubmIuaW5kZXgoJ2VuZCcpLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoJ2VuZCcpLCAyKQorCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgICMgbW92aW5nIHRhYnMKKyAgICAgICAgdGFicyA9IHNlbGYubmIudGFicygpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KDEsIHRhYnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICh0YWJzWzFdLCB0YWJzWzBdKSkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoc2VsZi5jaGlsZDEsIHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQorICAgICAgICBzZWxmLm5iLmluc2VydCgnZW5kJywgc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICh0YWJzWzFdLCB0YWJzWzBdKSkKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoJ2VuZCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIHRhYnMpCisgICAgICAgICMgYmFkIG1vdmVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCAyLCB0YWJzWzBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgLTEsIHRhYnNbMF0pCisKKyAgICAgICAgIyBuZXcgdGFiCisgICAgICAgIGNoaWxkMyA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KDEsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKHRhYnNbMF0sIHN0cihjaGlsZDMpLCB0YWJzWzFdKSkKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQorICAgICAgICBzZWxmLm5iLmluc2VydChzZWxmLmNoaWxkMSwgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCAoc3RyKGNoaWxkMyksICkgKyB0YWJzKQorICAgICAgICBzZWxmLm5iLmZvcmdldChjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCAyLCBjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCAtMSwgY2hpbGQzKQorCisgICAgICAgICMgYmFkIGluc2VydHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsICdlbmQnLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgTm9uZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIE5vbmUsIE5vbmUpCisKKworICAgIGRlZiB0ZXN0X3NlbGVjdChzZWxmKToKKyAgICAgICAgc2VsZi5uYi5wYWNrKCkKKyAgICAgICAgc2VsZi5uYi53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIHN1Y2Nlc3MgPSBbXQorICAgICAgICB0YWJfY2hhbmdlZCA9IFtdCisKKyAgICAgICAgc2VsZi5jaGlsZDEuYmluZCgnPFVubWFwPicsIGxhbWJkYSBldnQ6IHN1Y2Nlc3MuYXBwZW5kKFRydWUpKQorICAgICAgICBzZWxmLm5iLmJpbmQoJzw8Tm90ZWJvb2tUYWJDaGFuZ2VkPj4nLAorICAgICAgICAgICAgbGFtYmRhIGV2dDogdGFiX2NoYW5nZWQuYXBwZW5kKFRydWUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQxKSkKKyAgICAgICAgc2VsZi5uYi5zZWxlY3Qoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMikpCisKKyAgICAgICAgc2VsZi5uYi51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFiX2NoYW5nZWQpCisKKworICAgIGRlZiB0ZXN0X3RhYihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi50YWIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLnRhYiwgJ25vdGFiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi50YWIsIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEpLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgdGV4dD1Ob25lKSwgJ2EnKQorICAgICAgICAjIG5ld2VyIGZvcm0gZm9yIHF1ZXJ5aW5nIGEgc2luZ2xlIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCAndGV4dCcpLCAnYScpCisgICAgICAgIHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCB0ZXh0PSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCB0ZXh0PU5vbmUpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgJ3RleHQnKSwgJ2FiYycpCisKKworICAgIGRlZiB0ZXN0X3RhYnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubmIudGFicygpKSwgMikKKworICAgICAgICBzZWxmLm5iLmZvcmdldChzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoc2VsZi5jaGlsZDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKCkpCisKKworICAgIGRlZiB0ZXN0X3RyYXZlcnNhbChzZWxmKToKKyAgICAgICAgc2VsZi5uYi5wYWNrKCkKKyAgICAgICAgc2VsZi5uYi53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIHNlbGYubmIuc2VsZWN0KDApCisKKyAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLm5iLCA1LCA1KQorICAgICAgICBzZWxmLm5iLmZvY3VzX2ZvcmNlKCkKKyAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPENvbnRyb2wtVGFiPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQyKSkKKyAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCisgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxTaGlmdC1Db250cm9sLVRhYj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMSkpCisgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQorICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8U2hpZnQtQ29udHJvbC1UYWI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDIpKQorCisgICAgICAgIHNlbGYubmIudGFiKHNlbGYuY2hpbGQxLCB0ZXh0PSdhJywgdW5kZXJsaW5lPTApCisgICAgICAgIHNlbGYubmIuZW5hYmxlX3RyYXZlcnNhbCgpCisgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQorICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCisgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxBbHQtYT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMSkpCisKKworY2xhc3MgVHJlZXZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYudHYgPSB0dGsuVHJlZXZpZXcocGFkZGluZz0wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnR2LmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9iYm94KHNlbGYpOgorICAgICAgICBzZWxmLnR2LnBhY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuYmJveCgnJyksICcnKQorICAgICAgICBzZWxmLnR2LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYudHYudXBkYXRlKCkKKworICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaWxkcmVuKQorCisgICAgICAgIGJib3ggPSBzZWxmLnR2LmJib3goY2hpbGRyZW5bMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJib3gpLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiYm94LCB0dXBsZSkpCisgICAgICAgIGZvciBpdGVtIGluIGJib3g6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiSW52YWxpZCBib3VuZGluZyBib3g6ICVzIiAlIGJib3gpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIGNvbXBhcmUgd2lkdGggaW4gYmJveGVzCisgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsndGVzdCddCisgICAgICAgIHNlbGYudHYuY29sdW1uKCd0ZXN0Jywgd2lkdGg9NTApCisgICAgICAgIGJib3hfY29sdW1uMCA9IHNlbGYudHYuYmJveChjaGlsZHJlblswXSwgMCkKKyAgICAgICAgcm9vdF93aWR0aCA9IHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmJveF9jb2x1bW4wWzBdLCBiYm94WzBdICsgcm9vdF93aWR0aCkKKworICAgICAgICAjIHZlcmlmeSB0aGF0IGJib3ggb2YgYSBjbG9zZWQgaXRlbSBpcyB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgIGNoaWxkMSA9IHNlbGYudHYuaW5zZXJ0KGl0ZW1faWQsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuYmJveChjaGlsZDEpLCAnJykKKworCisgICAgZGVmIHRlc3RfY2hpbGRyZW4oc2VsZik6CisgICAgICAgICMgbm8gY2hpbGRyZW4geWV0LCBzaG91bGQgZ2V0IGFuIGVtcHR5IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKCkpCisKKyAgICAgICAgaXRlbV9pZCA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKClbMF0sIGl0ZW1faWQpCisKKyAgICAgICAgIyBhZGQgaXRlbV9pZCBhbmQgY2hpbGQzIGFzIGNoaWxkcmVuIG9mIGNoaWxkMgorICAgICAgICBjaGlsZDIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGNoaWxkMyA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgc2VsZi50di5zZXRfY2hpbGRyZW4oY2hpbGQyLCBpdGVtX2lkLCBjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oY2hpbGQyKSwgKGl0ZW1faWQsIGNoaWxkMykpCisKKyAgICAgICAgIyBjaGlsZDMgaGFzIGNoaWxkMiBhcyBwYXJlbnQsIHRodXMgdHJ5aW5nIHRvIHNldCBjaGlsZDIgYXMgYSBjaGlsZHJlbgorICAgICAgICAjIG9mIGNoaWxkMyBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LnNldF9jaGlsZHJlbiwgY2hpbGQzLCBjaGlsZDIpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQyIGNoaWxkcmVuCisgICAgICAgIHNlbGYudHYuc2V0X2NoaWxkcmVuKGNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihjaGlsZDIpLCAoKSkKKworICAgICAgICAjIHJlbW92ZSByb290J3MgY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5zZXRfY2hpbGRyZW4oJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKCkpCisKKworICAgIGRlZiB0ZXN0X2NvbHVtbihzZWxmKToKKyAgICAgICAgIyByZXR1cm4gYSBkaWN0IHdpdGggYWxsIG9wdGlvbnMvdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYuY29sdW1uKCcjMCcpLCBkaWN0KSkKKyAgICAgICAgIyByZXR1cm4gYSBzaW5nbGUgdmFsdWUgb2YgdGhlIGdpdmVuIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD1Ob25lKSwgaW50KSkKKyAgICAgICAgIyBzZXQgYSBuZXcgdmFsdWUgZm9yIGFuIG9wdGlvbgorICAgICAgICBzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD0xMCkKKyAgICAgICAgIyB0ZXN0aW5nIG5ldyB3YXkgdG8gZ2V0IG9wdGlvbiB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuY29sdW1uKCcjMCcsICd3aWR0aCcpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD1Ob25lKSwgMTApCisgICAgICAgICMgY2hlY2sgcmVhZC1vbmx5IG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmNvbHVtbiwgJyMwJywgaWQ9J1gnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuY29sdW1uLCAnaW52YWxpZCcpCisgICAgICAgIGludmFsaWRfa3dzID0gWworICAgICAgICAgICAgeyd1bmtub3duX29wdGlvbic6ICdzb21lIHZhbHVlJ30sICB7J3N0cmV0Y2gnOiAnd3JvbmcnfSwKKyAgICAgICAgICAgIHsnYW5jaG9yJzogJ3dyb25nJ30sIHsnd2lkdGgnOiAnd3JvbmcnfSwgeydtaW53aWR0aCc6ICd3cm9uZyd9CisgICAgICAgIF0KKyAgICAgICAgZm9yIGt3IGluIGludmFsaWRfa3dzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5jb2x1bW4sICcjMCcsCisgICAgICAgICAgICAgICAgKiprdykKKworCisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmRlbGV0ZSwgJyMwJykKKworICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBpdGVtMiA9IHNlbGYudHYuaW5zZXJ0KGl0ZW1faWQsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtX2lkLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoaXRlbTIsICkpCisKKyAgICAgICAgc2VsZi50di5kZWxldGUoaXRlbV9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgICMgcmVhdHRhY2ggc2hvdWxkIGZhaWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW1faWQsICcnLCAnZW5kJykKKworICAgICAgICAjIHRlc3QgbXVsdGlwbGUgaXRlbSBkZWxldGUKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtMSwgaXRlbTIpKQorCisgICAgICAgIHNlbGYudHYuZGVsZXRlKGl0ZW0xLCBpdGVtMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisKKyAgICBkZWYgdGVzdF9kZXRhY2hfcmVhdHRhY2goc2VsZik6CisgICAgICAgIGl0ZW1faWQgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoaXRlbV9pZCwgJ2VuZCcpCisKKyAgICAgICAgIyBjYWxsaW5nIGRldGFjaCB3aXRob3V0IGl0ZW1zIGlzIHZhbGlkLCBhbHRob3VnaCBpdCBkb2VzIG5vdGhpbmcKKyAgICAgICAgcHJldiA9IHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkKKyAgICAgICAgc2VsZi50di5kZXRhY2goKSAjIHRoaXMgc2hvdWxkIGRvIG5vdGhpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmV2LCBzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oaXRlbV9pZCksIChpdGVtMiwgKSkKKworICAgICAgICAjIGRldGFjaCBpdGVtIHdpdGggY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5kZXRhY2goaXRlbV9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgICMgcmVhdHRhY2ggaXRlbSB3aXRoIGNoaWxkcmVuCisgICAgICAgIHNlbGYudHYucmVhdHRhY2goaXRlbV9pZCwgJycsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtX2lkLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoaXRlbTIsICkpCisKKyAgICAgICAgIyBtb3ZlIGEgY2hpbGRyZW4gdG8gdGhlIHJvb3QKKyAgICAgICAgc2VsZi50di5tb3ZlKGl0ZW0yLCAnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihpdGVtX2lkKSwgKCkpCisKKyAgICAgICAgIyBiYWQgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LnJlYXR0YWNoLCAnbm9uZXhpc3RlbnQnLCAnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LmRldGFjaCwgJ25vbmV4aXN0ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW0yLCAnb3RoZXJwYXJlbnQnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW0yLCAnJywgJ2ludmFsaWQnKQorCisgICAgICAgICMgbXVsdGlwbGUgZGV0YWNoCisgICAgICAgIHNlbGYudHYuZGV0YWNoKGl0ZW1faWQsIGl0ZW0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoKSkKKworCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZXhpc3RzKCdzb21ldGhpbmcnKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5leGlzdHMoJycpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZXhpc3RzKHt9KSwgRmFsc2UpCisKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIHdpbGwgbWFrZSBhIHRrLmNhbGwgZXF1aXZhbGVudCB0bworICAgICAgICAjIHRrLmNhbGwodHJlZXZpZXcsICJleGlzdHMiKSB3aGljaCBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9yCisgICAgICAgICMgaW4gdGhlIHRjbCBpbnRlcnByZXRlciBzaW5jZSB0ayByZXF1aXJlcyBhbiBpdGVtLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmV4aXN0cywgTm9uZSkKKworCisgICAgZGVmIHRlc3RfZm9jdXMoc2VsZik6CisgICAgICAgICMgbm90aGluZyBpcyBmb2N1c2VkIHJpZ2h0IG5vdworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZm9jdXMoKSwgJycpCisKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIHNlbGYudHYuZm9jdXMoaXRlbTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5mb2N1cygpLCBpdGVtMSkKKworICAgICAgICBzZWxmLnR2LmRlbGV0ZShpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmZvY3VzKCksICcnKQorCisgICAgICAgICMgdHJ5IGZvY3VzaW5nIGluZXhpc3RlbnQgaXRlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmZvY3VzLCAnaGknKQorCisKKyAgICBkZWYgdGVzdF9oZWFkaW5nKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGEgZGljdCBpcyByZXR1cm5lZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LmhlYWRpbmcoJyMwJyksIGRpY3QpKQorCisgICAgICAgICMgY2hlY2sgYSB2YWx1ZSBpcyByZXR1cm5lZAorICAgICAgICBzZWxmLnR2LmhlYWRpbmcoJyMwJywgdGV4dD0naGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaGVhZGluZygnIzAnLCAndGV4dCcpLCAnaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaGVhZGluZygnIzAnLCB0ZXh0PU5vbmUpLCAnaGknKQorCisgICAgICAgICMgaW52YWxpZCBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5oZWFkaW5nLCAnIzAnLAorICAgICAgICAgICAgYmFja2dyb3VuZD1Ob25lKQorICAgICAgICAjIGludmFsaWQgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5oZWFkaW5nLCAnIzAnLAorICAgICAgICAgICAgYW5jaG9yPTEpCisKKworICAgIGRlZiB0ZXN0X2hlYWRpbmdfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGRlZiBzaW11bGF0ZV9oZWFkaW5nX2NsaWNrKHgsIHkpOgorICAgICAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCB4LCB5KQorICAgICAgICAgICAgc2VsZi50di51cGRhdGVfaWRsZXRhc2tzKCkKKworICAgICAgICBzdWNjZXNzID0gW10gIyBubyBzdWNjZXNzIGZvciBub3cKKworICAgICAgICBzZWxmLnR2LnBhY2soKQorICAgICAgICBzZWxmLnR2LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYudHYuaGVhZGluZygnIzAnLCBjb21tYW5kPWxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkpCisgICAgICAgIHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPTEwMCkKKyAgICAgICAgc2VsZi50di51cGRhdGUoKQorCisgICAgICAgICMgYXNzdW1pbmcgdGhhdCB0aGUgY29vcmRzICg1LCA1KSBmYWxsIGludG8gaGVhZGluZyAjMAorICAgICAgICBzaW11bGF0ZV9oZWFkaW5nX2NsaWNrKDUsIDUpCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgY29tbWFuZCBhc3NvY2lhdGVkIHRvIHRoZSB0cmVldmlldyBoZWFkaW5nIHdhc24ndCAiCisgICAgICAgICAgICAgICAgImludm9rZWQuIikKKworICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBzZWxmLnR2Lm1hc3Rlci5fdGNsQ29tbWFuZHMKKyAgICAgICAgc2VsZi50di5oZWFkaW5nKCcjMCcsIGNvbW1hbmQ9c3RyKHNlbGYudHYuaGVhZGluZygnIzAnLCBjb21tYW5kPU5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tYW5kcywgc2VsZi50di5tYXN0ZXIuX3RjbENvbW1hbmRzKQorICAgICAgICBzaW11bGF0ZV9oZWFkaW5nX2NsaWNrKDUsIDUpCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgY29tbWFuZCBhc3NvY2lhdGVkIHRvIHRoZSB0cmVldmlldyBoZWFkaW5nIHdhc24ndCAiCisgICAgICAgICAgICAgICAgImludm9rZWQuIikKKworICAgICAgICAjIFhYWCBUaGUgZm9sbG93aW5nIHJhaXNlcyBhbiBlcnJvciBpbiBhIHRjbCBpbnRlcnByZXRlciwgYnV0IG5vdCBpbgorICAgICAgICAjIFB5dGhvbgorICAgICAgICAjc2VsZi50di5oZWFkaW5nKCcjMCcsIGNvbW1hbmQ9J0kgZG9udCBleGlzdCcpCisgICAgICAgICNzaW11bGF0ZV9oZWFkaW5nX2NsaWNrKDUsIDUpCisKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICAjIGl0ZW0gJ3doYXQnIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbmRleCwgJ3doYXQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleCgnJyksIDApCisKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBjMSA9IHNlbGYudHYuaW5zZXJ0KGl0ZW0xLCAnZW5kJykKKyAgICAgICAgYzIgPSBzZWxmLnR2Lmluc2VydChpdGVtMSwgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChpdGVtMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChjMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChjMiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChpdGVtMiksIDEpCisKKyAgICAgICAgc2VsZi50di5tb3ZlKGl0ZW0yLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGl0ZW0yKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGl0ZW0xKSwgMSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgaW5kZXggc3RpbGwgd29ya3MgZXZlbiBhZnRlciBpdHMgcGFyZW50IGFuZCBzaWJsaW5ncworICAgICAgICAjIGhhdmUgYmVlbiBkZXRhY2hlZAorICAgICAgICBzZWxmLnR2LmRldGFjaChpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmluZGV4KGMyKSwgMSkKKyAgICAgICAgc2VsZi50di5kZXRhY2goYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChjMiksIDApCisKKyAgICAgICAgIyBidXQgaXQgZmFpbHMgYWZ0ZXIgaXRlbSBoYXMgYmVlbiBkZWxldGVkCisgICAgICAgIHNlbGYudHYuZGVsZXRlKGl0ZW0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmluZGV4LCBjMikKKworCisgICAgZGVmIHRlc3RfaW5zZXJ0X2l0ZW0oc2VsZik6CisgICAgICAgICMgcGFyZW50ICdub25lJyBkb2Vzbid0IGV4aXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnbm9uZScsICdlbmQnKQorCisgICAgICAgICMgb3BlbiB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICcnLCAnZW5kJywKKyAgICAgICAgICAgIG9wZW49JycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnJywgJ2VuZCcsCisgICAgICAgICAgICBvcGVuPSdwbGVhc2UnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuZGVsZXRlKHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgb3Blbj1UcnVlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di5kZWxldGUoc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCBvcGVuPUZhbHNlKSkpCisKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnJywgJ21pZGRsZScpCisKKyAgICAgICAgIyB0cnlpbmcgdG8gZHVwbGljYXRlIGl0ZW0gaWQgaXMgaW52YWxpZAorICAgICAgICBpdGVtaWQgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsICdmaXJzdC1pdGVtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtaWQsICdmaXJzdC1pdGVtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICcnLCAnZW5kJywKKyAgICAgICAgICAgICdmaXJzdC1pdGVtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbnNlcnQsICcnLCAnZW5kJywKKyAgICAgICAgICAgIE1vY2tUY2xPYmooJ2ZpcnN0LWl0ZW0nKSkKKworICAgICAgICAjIHVuaWNvZGUgdmFsdWVzCisgICAgICAgIHZhbHVlID0gdSdceGUxYmEnCisgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz0odmFsdWUsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sICd2YWx1ZXMnKSwgKHZhbHVlLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksICh2YWx1ZSwgKSkKKworICAgICAgICBzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPWxpc3Qoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwgKHZhbHVlLCApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYuaXRlbShpdGVtKSwgZGljdCkpCisKKyAgICAgICAgIyBlcmFzZSBpdGVtIHZhbHVlcworICAgICAgICBzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPScnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSkpCisKKyAgICAgICAgIyBpdGVtIHRhZ3MKKyAgICAgICAgaXRlbSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGFncz1bMSwgMiwgdmFsdWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB0YWdzPU5vbmUpLCAoJzEnLCAnMicsIHZhbHVlKSkKKyAgICAgICAgc2VsZi50di5pdGVtKGl0ZW0sIHRhZ3M9W10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di5pdGVtKGl0ZW0sIHRhZ3M9Tm9uZSkpCisgICAgICAgIHNlbGYudHYuaXRlbShpdGVtLCB0YWdzPSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdGFncz1Ob25lKSwgKCcxJywgJzInKSkKKworICAgICAgICAjIHZhbHVlcyB3aXRoIHNwYWNlcworICAgICAgICBpdGVtID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9KCdhIGIgYycsCisgICAgICAgICAgICAnJXMgJXMnICUgKHZhbHVlLCB2YWx1ZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksCisgICAgICAgICAgICAoJ2EgYiBjJywgJyVzICVzJyAlICh2YWx1ZSwgdmFsdWUpKSkKKworICAgICAgICAjIHRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oCisgICAgICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRleHQ9IkxhYmVsIGhlcmUiKSwgdGV4dD1Ob25lKSwKKyAgICAgICAgICAgICJMYWJlbCBoZXJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oCisgICAgICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRleHQ9dmFsdWUpLCB0ZXh0PU5vbmUpLAorICAgICAgICAgICAgdmFsdWUpCisKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgc2VsZi50dlsnY29sdW1ucyddID0gWydBJywgJ0InXQorICAgICAgICBpdGVtID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9WydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNldChpdGVtKSwgeydBJzogJ2EnLCAnQic6ICdiJ30pCisKKyAgICAgICAgc2VsZi50di5zZXQoaXRlbSwgJ0InLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwgKCdhJywgJ2EnKSkKKworICAgICAgICBzZWxmLnR2Wydjb2x1bW5zJ10gPSBbJ0InXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2V0KGl0ZW0pLCB7J0InOiAnYSd9KQorCisgICAgICAgIHNlbGYudHYuc2V0KGl0ZW0sICdCJywgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2V0KGl0ZW0sIGNvbHVtbj0nQicpLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwgKCdiJywgJ2EnKSkKKworICAgICAgICBzZWxmLnR2LnNldChpdGVtLCAnQicsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNldChpdGVtLCAnQicpLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1Ob25lKSwgKDEyMywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNldChpdGVtKSwgeydCJzogMTIzfSkKKworICAgICAgICAjIGluZXhpc3RlbnQgY29sdW1uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuc2V0LCBpdGVtLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuc2V0LCBpdGVtLCAnQScsICdiJykKKworICAgICAgICAjIGluZXhpc3RlbnQgaXRlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnNldCwgJ25vdG1lJykKKworCisgICAgZGVmIHRlc3RfdGFnX2JpbmQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIGl0ZW0xID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0YWdzPVsnY2FsbCddKQorICAgICAgICBpdGVtMiA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGFncz1bJ2NhbGwnXSkKKyAgICAgICAgc2VsZi50di50YWdfYmluZCgnY2FsbCcsICc8QnV0dG9uUHJlc3MtMT4nLAorICAgICAgICAgICAgbGFtYmRhIGV2dDogZXZlbnRzLmFwcGVuZCgxKSkKKyAgICAgICAgc2VsZi50di50YWdfYmluZCgnY2FsbCcsICc8QnV0dG9uUmVsZWFzZS0xPicsCisgICAgICAgICAgICBsYW1iZGEgZXZ0OiBldmVudHMuYXBwZW5kKDIpKQorCisgICAgICAgIHNlbGYudHYucGFjaygpCisgICAgICAgIHNlbGYudHYud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgc2VsZi50di51cGRhdGUoKQorCisgICAgICAgIHBvc195ID0gc2V0KCkKKyAgICAgICAgZm91bmQgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAxMDAsIDEwKToKKyAgICAgICAgICAgIGlmIGxlbihmb3VuZCkgPT0gMjogIyBpdGVtMSBhbmQgaXRlbTIgYWxyZWFkeSBmb3VuZAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pZGVudGlmeV9yb3coaSkKKyAgICAgICAgICAgIGlmIGl0ZW1faWQgYW5kIGl0ZW1faWQgbm90IGluIGZvdW5kOgorICAgICAgICAgICAgICAgIHBvc195LmFkZChpKQorICAgICAgICAgICAgICAgIGZvdW5kLmFkZChpdGVtX2lkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvc195KSwgMikgIyBpdGVtMSBhbmQgaXRlbTIgeSBwb3MKKyAgICAgICAgZm9yIHkgaW4gcG9zX3k6CisgICAgICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIDAsIHkpCisKKyAgICAgICAgIyBieSBub3cgdGhlcmUgc2hvdWxkIGJlIDQgdGhpbmdzIGluIHRoZSBldmVudHMgbGlzdCwgc2luY2UgZWFjaAorICAgICAgICAjIGl0ZW0gaGFkIGEgYmluZCBmb3IgdHdvIGV2ZW50cyB0aGF0IHdlcmUgc2ltdWxhdGVkIGFib3ZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV2ZW50cyksIDQpCisgICAgICAgIGZvciBldnQgaW4gemlwKGV2ZW50c1s6OjJdLCBldmVudHNbMTo6Ml0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldnQsICgxLCAyKSkKKworCisgICAgZGVmIHRlc3RfdGFnX2NvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgIyBKdXN0IHRlc3RpbmcgcGFyYW1ldGVyIHBhc3NpbmcgZm9yIG5vdworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHYudGFnX2NvbmZpZ3VyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di50YWdfY29uZmlndXJlLAorICAgICAgICAgICAgJ3Rlc3QnLCBza3k9J2JsdWUnKQorICAgICAgICBzZWxmLnR2LnRhZ19jb25maWd1cmUoJ3Rlc3QnLCBmb3JlZ3JvdW5kPSdibHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50di50YWdfY29uZmlndXJlKCd0ZXN0JywgJ2ZvcmVncm91bmQnKSksCisgICAgICAgICAgICAnYmx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYudHYudGFnX2NvbmZpZ3VyZSgndGVzdCcsIGZvcmVncm91bmQ9Tm9uZSkpLAorICAgICAgICAgICAgJ2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LnRhZ19jb25maWd1cmUoJ3Rlc3QnKSwgZGljdCkpCisKKwordGVzdHNfZ3VpID0gKAorICAgICAgICBXaWRnZXRUZXN0LCBCdXR0b25UZXN0LCBDaGVja2J1dHRvblRlc3QsIFJhZGlvYnV0dG9uVGVzdCwKKyAgICAgICAgQ29tYm9ib3hUZXN0LCBFbnRyeVRlc3QsIFBhbmVkd2luZG93VGVzdCwgU2NhbGVUZXN0LCBOb3RlYm9va1Rlc3QsCisgICAgICAgIFRyZWV2aWV3VGVzdAorICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9MaWIvbGliLXRrL3RrU2ltcGxlRGlhbG9nLnB5IGIvTGliL2xpYi10ay90a1NpbXBsZURpYWxvZy5weQppbmRleCA2OTQ4YTQ5Li4yNDM4OGE1IDEwMDY0NAotLS0gYS9MaWIvbGliLXRrL3RrU2ltcGxlRGlhbG9nLnB5CisrKyBiL0xpYi9saWItdGsvdGtTaW1wbGVEaWFsb2cucHkKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICAgICAgJycnCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKIAorICAgICAgICBzZWxmLndpdGhkcmF3KCkgIyByZW1haW4gaW52aXNpYmxlIGZvciBub3cKICAgICAgICAgIyBJZiB0aGUgbWFzdGVyIGlzIG5vdCB2aWV3YWJsZSwgZG9uJ3QKICAgICAgICAgIyBtYWtlIHRoZSBjaGlsZCB0cmFuc2llbnQsIG9yIGVsc2UgaXQKICAgICAgICAgIyB3b3VsZCBiZSBvcGVuZWQgd2l0aGRyYXduCkBAIC02NSw4ICs2Niw2IEBACiAKICAgICAgICAgc2VsZi5idXR0b25ib3goKQogCi0gICAgICAgIHNlbGYud2FpdF92aXNpYmlsaXR5KCkgIyB3aW5kb3cgbmVlZHMgdG8gYmUgdmlzaWJsZSBmb3IgdGhlIGdyYWIKLSAgICAgICAgc2VsZi5ncmFiX3NldCgpCiAKICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbF9mb2N1czoKICAgICAgICAgICAgIHNlbGYuaW5pdGlhbF9mb2N1cyA9IHNlbGYKQEAgLTc3LDggKzc2LDEzIEBACiAgICAgICAgICAgICBzZWxmLmdlb21ldHJ5KCIrJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpKzUwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSs1MCkpCiAKKyAgICAgICAgc2VsZi5kZWljb25pZnkoKSAjIGJlY29tZSB2aXNpYmlsZSBub3cKKwogICAgICAgICBzZWxmLmluaXRpYWxfZm9jdXMuZm9jdXNfc2V0KCkKIAorICAgICAgICAjIHdhaXQgZm9yIHdpbmRvdyB0byBhcHBlYXIgb24gc2NyZWVuIGJlZm9yZSBjYWxsaW5nIGdyYWJfc2V0CisgICAgICAgIHNlbGYud2FpdF92aXNpYmlsaXR5KCkKKyAgICAgICAgc2VsZi5ncmFiX3NldCgpCiAgICAgICAgIHNlbGYud2FpdF93aW5kb3coc2VsZikKIAogICAgIGRlZiBkZXN0cm95KHNlbGYpOgpAQCAtMjc5LDcgKzI4Myw3IEBACiAKIGNsYXNzIF9RdWVyeVN0cmluZyhfUXVlcnlEaWFsb2cpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6Ci0gICAgICAgIGlmIGt3Lmhhc19rZXkoInNob3ciKToKKyAgICAgICAgaWYgInNob3ciIGluIGt3OgogICAgICAgICAgICAgc2VsZi5fX3Nob3cgPSBrd1sic2hvdyJdCiAgICAgICAgICAgICBkZWwga3dbInNob3ciXQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2xpYi10ay90dGsucHkgYi9MaWIvbGliLXRrL3R0ay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjc4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYi10ay90dGsucHkKQEAgLTAsMCArMSwxNjM1IEBACisiIiJUdGsgd3JhcHBlci4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyB0byBhbGxvdyB1c2luZyBUayB0aGVtZWQgd2lkZ2V0IHNldC4KKworVHRrIGlzIGJhc2VkIG9uIGEgcmV2aXNlZCBhbmQgZW5oYW5jZWQgdmVyc2lvbiBvZgorVElQICM0OCAoaHR0cDovL3RpcC50Y2wudGsvNDgpIHNwZWNpZmllZCBzdHlsZSBlbmdpbmUuCisKK0l0cyBiYXNpYyBpZGVhIGlzIHRvIHNlcGFyYXRlLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGUgY29kZQoraW1wbGVtZW50aW5nIGEgd2lkZ2V0J3MgYmVoYXZpb3IgZnJvbSB0aGUgY29kZSBpbXBsZW1lbnRpbmcgaXRzCithcHBlYXJhbmNlLiBXaWRnZXQgY2xhc3MgYmluZGluZ3MgYXJlIHByaW1hcmlseSByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIHRoZSB3aWRnZXQgc3RhdGUgYW5kIGludm9raW5nIGNhbGxiYWNrcywgYWxsIGFzcGVjdHMKK29mIHRoZSB3aWRnZXRzIGFwcGVhcmFuY2UgbGllcyBhdCBUaGVtZXMuCisiIiIKKworX192ZXJzaW9uX18gPSAiMC4zLjEiCisKK19fYXV0aG9yX18gPSAiR3VpbGhlcm1lIFBvbG8gPGdncG9sb0BnbWFpbC5jb20+IgorCitfX2FsbF9fID0gWyJCdXR0b24iLCAiQ2hlY2tidXR0b24iLCAiQ29tYm9ib3giLCAiRW50cnkiLCAiRnJhbWUiLCAiTGFiZWwiLAorICAgICAgICAgICAiTGFiZWxmcmFtZSIsICJMYWJlbEZyYW1lIiwgIk1lbnVidXR0b24iLCAiTm90ZWJvb2siLCAiUGFuZWR3aW5kb3ciLAorICAgICAgICAgICAiUGFuZWRXaW5kb3ciLCAiUHJvZ3Jlc3NiYXIiLCAiUmFkaW9idXR0b24iLCAiU2NhbGUiLCAiU2Nyb2xsYmFyIiwKKyAgICAgICAgICAgIlNlcGFyYXRvciIsICJTaXplZ3JpcCIsICJTdHlsZSIsICJUcmVldmlldyIsCisgICAgICAgICAgICMgRXh0ZW5zaW9ucworICAgICAgICAgICAiTGFiZWxlZFNjYWxlIiwgIk9wdGlvbk1lbnUiLAorICAgICAgICAgICAjIGZ1bmN0aW9ucworICAgICAgICAgICAidGNsb2Jqc190b19weSIsICJzZXR1cF9tYXN0ZXIiXQorCitpbXBvcnQgVGtpbnRlcgorCitfZmxhdHRlbiA9IFRraW50ZXIuX2ZsYXR0ZW4KKworIyBWZXJpZnkgaWYgVGsgaXMgbmV3IGVub3VnaCB0byBub3QgbmVlZCB0aGUgVGlsZSBwYWNrYWdlCitfUkVRVUlSRV9USUxFID0gVHJ1ZSBpZiBUa2ludGVyLlRrVmVyc2lvbiA8IDguNSBlbHNlIEZhbHNlCisKK2RlZiBfbG9hZF90aWxlKG1hc3Rlcik6CisgICAgaWYgX1JFUVVJUkVfVElMRToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIHRpbGVsaWIgPSBvcy5lbnZpcm9uLmdldCgnVElMRV9MSUJSQVJZJykKKyAgICAgICAgaWYgdGlsZWxpYjoKKyAgICAgICAgICAgICMgYXBwZW5kIGN1c3RvbSB0aWxlIHBhdGggdG8gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdAorICAgICAgICAgICAgIyBUY2wgdXNlcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVzb2x2ZSBwYWNrYWdlcyB3aXRoIHRoZSBwYWNrYWdlCisgICAgICAgICAgICAjIGNvbW1hbmQKKyAgICAgICAgICAgIG1hc3Rlci50ay5ldmFsKAorICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsIGF1dG9fcGF0aDsgJworICAgICAgICAgICAgICAgICAgICAnbGFwcGVuZCBhdXRvX3BhdGggeyVzfScgJSB0aWxlbGliKQorCisgICAgICAgIG1hc3Rlci50ay5ldmFsKCdwYWNrYWdlIHJlcXVpcmUgdGlsZScpICMgVGNsRXJyb3IgbWF5IGJlIHJhaXNlZCBoZXJlCisgICAgICAgIG1hc3Rlci5fdGlsZV9sb2FkZWQgPSBUcnVlCisKK2RlZiBfZm9ybWF0X29wdGRpY3Qob3B0ZGljdCwgc2NyaXB0PUZhbHNlLCBpZ25vcmU9Tm9uZSk6CisgICAgIiIiRm9ybWF0cyBvcHRkaWN0IHRvIGEgdHVwbGUgdG8gcGFzcyBpdCB0byB0ay5jYWxsLgorCisgICAgRS5nLiAoc2NyaXB0PUZhbHNlKToKKyAgICAgIHsnZm9yZWdyb3VuZCc6ICdibHVlJywgJ3BhZGRpbmcnOiBbMSwgMiwgMywgNF19IHJldHVybnM6CisgICAgICAoJy1mb3JlZ3JvdW5kJywgJ2JsdWUnLCAnLXBhZGRpbmcnLCAnMSAyIDMgNCcpIiIiCisgICAgZm9ybWF0ID0gIiVzIiBpZiBub3Qgc2NyaXB0IGVsc2UgInslc30iCisKKyAgICBvcHRzID0gW10KKyAgICBmb3Igb3B0LCB2YWx1ZSBpbiBvcHRkaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICBpZiBpZ25vcmUgYW5kIG9wdCBpbiBpZ25vcmU6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgdiA9IFtdCisgICAgICAgICAgICBmb3IgdmFsIGluIHZhbHVlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICAgICAgdi5hcHBlbmQodW5pY29kZSh2YWwpIGlmIHZhbCBlbHNlICd7fScpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdi5hcHBlbmQoc3RyKHZhbCkpCisKKyAgICAgICAgICAgICMgZm9ybWF0IHYgYWNjb3JkaW5nIHRvIHRoZSBzY3JpcHQgb3B0aW9uLCBidXQgYWxzbyBjaGVjayBmb3IKKyAgICAgICAgICAgICMgc3BhY2UgaW4gYW55IHZhbHVlIGluIHYgaW4gb3JkZXIgdG8gZ3JvdXAgdGhlbSBjb3JyZWN0bHkKKyAgICAgICAgICAgIHZhbHVlID0gZm9ybWF0ICUgJyAnLmpvaW4oCisgICAgICAgICAgICAgICAgKCd7JXN9JyBpZiAnICcgaW4gdmFsIGVsc2UgJyVzJykgJSB2YWwgZm9yIHZhbCBpbiB2KQorCisgICAgICAgIGlmIHNjcmlwdCBhbmQgdmFsdWUgPT0gJyc6CisgICAgICAgICAgICB2YWx1ZSA9ICd7fScgIyBlbXB0eSBzdHJpbmcgaW4gUHl0aG9uIGlzIGVxdWl2YWxlbnQgdG8ge30gaW4gVGNsCisKKyAgICAgICAgb3B0cy5hcHBlbmQoKCItJXMiICUgb3B0LCB2YWx1ZSkpCisKKyAgICAjIFJlbWVtYmVyOiBfZmxhdHRlbiBza2lwcyBvdmVyIE5vbmUKKyAgICByZXR1cm4gX2ZsYXR0ZW4ob3B0cykKKworZGVmIF9mb3JtYXRfbWFwZGljdChtYXBkaWN0LCBzY3JpcHQ9RmFsc2UpOgorICAgICIiIkZvcm1hdHMgbWFwZGljdCB0byBwYXNzIGl0IHRvIHRrLmNhbGwuCisKKyAgICBFLmcuIChzY3JpcHQ9RmFsc2UpOgorICAgICAgeydleHBhbmQnOiBbKCdhY3RpdmUnLCAnc2VsZWN0ZWQnLCAnZ3JleScpLCAoJ2ZvY3VzJywgWzEsIDIsIDMsIDRdKV19CisKKyAgICAgIHJldHVybnM6CisKKyAgICAgICgnLWV4cGFuZCcsICd7YWN0aXZlIHNlbGVjdGVkfSBncmV5IGZvY3VzIHsxLCAyLCAzLCA0fScpIiIiCisgICAgIyBpZiBjYWxsZXIgcGFzc2VzIGEgVGNsIHNjcmlwdCB0byB0ay5jYWxsLCBhbGwgdGhlIHZhbHVlcyBuZWVkIHRvCisgICAgIyBiZSBncm91cGVkIGludG8gd29yZHMgKGFyZ3VtZW50cyB0byBhIGNvbW1hbmQgaW4gVGNsIGRpYWxlY3QpCisgICAgZm9ybWF0ID0gIiVzIiBpZiBub3Qgc2NyaXB0IGVsc2UgInslc30iCisKKyAgICBvcHRzID0gW10KKyAgICBmb3Igb3B0LCB2YWx1ZSBpbiBtYXBkaWN0Lml0ZXJpdGVtcygpOgorCisgICAgICAgIG9wdF92YWwgPSBbXQorICAgICAgICAjIGVhY2ggdmFsdWUgaW4gbWFwZGljdCBpcyBleHBlY3RlZCB0byBiZSBhIHNlcXVlbmNlLCB3aGVyZSBlYWNoIGl0ZW0KKyAgICAgICAgIyBpcyBhbm90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgYSBzdGF0ZSAob3Igc2V2ZXJhbCkgYW5kIGEgdmFsdWUKKyAgICAgICAgZm9yIHN0YXRlc3BlYyBpbiB2YWx1ZToKKyAgICAgICAgICAgIHN0YXRlLCB2YWwgPSBzdGF0ZXNwZWNbOi0xXSwgc3RhdGVzcGVjWy0xXQorCisgICAgICAgICAgICBpZiBsZW4oc3RhdGUpID4gMTogIyBncm91cCBtdWx0aXBsZSBzdGF0ZXMKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICJ7JXN9IiAlICcgJy5qb2luKHN0YXRlKQorICAgICAgICAgICAgZWxzZTogIyBzaW5nbGUgc3RhdGUKKyAgICAgICAgICAgICAgICAjIGlmIGl0IGlzIGVtcHR5IChzb21ldGhpbmcgdGhhdCBldmFsdWF0ZXMgdG8gRmFsc2UpLCB0aGVuCisgICAgICAgICAgICAgICAgIyBmb3JtYXQgaXQgdG8gVGNsIGNvZGUgdG8gZGVub3RlIHRoZSAibm9ybWFsIiBzdGF0ZQorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF0gb3IgJ3t9JworCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgKGxpc3QsIHR1cGxlKSk6ICMgdmFsIG5lZWRzIHRvIGJlIGdyb3VwZWQKKyAgICAgICAgICAgICAgICB2YWwgPSAieyVzfSIgJSAnICcuam9pbihtYXAoc3RyLCB2YWwpKQorCisgICAgICAgICAgICBvcHRfdmFsLmFwcGVuZCgiJXMgJXMiICUgKHN0YXRlLCB2YWwpKQorCisgICAgICAgIG9wdHMuYXBwZW5kKCgiLSVzIiAlIG9wdCwgZm9ybWF0ICUgJyAnLmpvaW4ob3B0X3ZhbCkpKQorCisgICAgcmV0dXJuIF9mbGF0dGVuKG9wdHMpCisKK2RlZiBfZm9ybWF0X2VsZW1jcmVhdGUoZXR5cGUsIHNjcmlwdD1GYWxzZSwgKmFyZ3MsICoqa3cpOgorICAgICIiIkZvcm1hdHMgYXJncyBhbmQga3cgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBlbGVtZW50IGZhY3RvcnkgZXR5cGUuIiIiCisgICAgc3BlYyA9IE5vbmUKKyAgICBvcHRzID0gKCkKKyAgICBpZiBldHlwZSBpbiAoImltYWdlIiwgInZzYXBpIik6CisgICAgICAgIGlmIGV0eXBlID09ICJpbWFnZSI6ICMgZGVmaW5lIGFuIGVsZW1lbnQgYmFzZWQgb24gYW4gaW1hZ2UKKyAgICAgICAgICAgICMgZmlyc3QgYXJnIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBpbWFnZSBuYW1lCisgICAgICAgICAgICBpbmFtZSA9IGFyZ3NbMF0KKyAgICAgICAgICAgICMgbmV4dCBhcmdzLCBpZiBhbnksIGFyZSBzdGF0ZXNwZWMvdmFsdWUgcGFpcnMgd2hpY2ggaXMgYWxtb3N0CisgICAgICAgICAgICAjIGEgbWFwZGljdCwgYnV0IHdlIGp1c3QgbmVlZCB0aGUgdmFsdWUKKyAgICAgICAgICAgIGltYWdlc3BlYyA9IF9mb3JtYXRfbWFwZGljdCh7Tm9uZTogYXJnc1sxOl19KVsxXQorICAgICAgICAgICAgc3BlYyA9ICIlcyAlcyIgJSAoaW5hbWUsIGltYWdlc3BlYykKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBkZWZpbmUgYW4gZWxlbWVudCB3aG9zZSB2aXN1YWwgYXBwZWFyYW5jZSBpcyBkcmF3biB1c2luZyB0aGUKKyAgICAgICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBTdHlsZXMgQVBJIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUKKyAgICAgICAgICAgICMgdGhlbWVkIHN0eWxlcyBvbiBXaW5kb3dzIFhQIGFuZCBWaXN0YS4KKyAgICAgICAgICAgICMgQXZhaWxhYmlsaXR5OiBUayA4LjYsIFdpbmRvd3MgWFAgYW5kIFZpc3RhLgorICAgICAgICAgICAgY2xhc3NfbmFtZSwgcGFydF9pZCA9IGFyZ3NbOjJdCisgICAgICAgICAgICBzdGF0ZW1hcCA9IF9mb3JtYXRfbWFwZGljdCh7Tm9uZTogYXJnc1syOl19KVsxXQorICAgICAgICAgICAgc3BlYyA9ICIlcyAlcyAlcyIgJSAoY2xhc3NfbmFtZSwgcGFydF9pZCwgc3RhdGVtYXApCisKKyAgICAgICAgb3B0cyA9IF9mb3JtYXRfb3B0ZGljdChrdywgc2NyaXB0KQorCisgICAgZWxpZiBldHlwZSA9PSAiZnJvbSI6ICMgY2xvbmUgYW4gZWxlbWVudAorICAgICAgICAjIGl0IGV4cGVjdHMgYSB0aGVtZW5hbWUgYW5kIG9wdGlvbmFsbHkgYW4gZWxlbWVudCB0byBjbG9uZSBmcm9tLAorICAgICAgICAjIG90aGVyd2lzZSBpdCB3aWxsIGNsb25lIHt9IChlbXB0eSBlbGVtZW50KQorICAgICAgICBzcGVjID0gYXJnc1swXSAjIHRoZW1lIG5hbWUKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMTogIyBlbGVtZW50ZnJvbSBzcGVjaWZpZWQKKyAgICAgICAgICAgIG9wdHMgPSAoYXJnc1sxXSwgKQorCisgICAgaWYgc2NyaXB0OgorICAgICAgICBzcGVjID0gJ3slc30nICUgc3BlYworICAgICAgICBvcHRzID0gJyAnLmpvaW4obWFwKHN0ciwgb3B0cykpCisKKyAgICByZXR1cm4gc3BlYywgb3B0cworCitkZWYgX2Zvcm1hdF9sYXlvdXRsaXN0KGxheW91dCwgaW5kZW50PTAsIGluZGVudF9zaXplPTIpOgorICAgICIiIkZvcm1hdHMgYSBsYXlvdXQgbGlzdCBzbyB3ZSBjYW4gcGFzcyB0aGUgcmVzdWx0IHRvIHR0azo6c3R5bGUKKyAgICBsYXlvdXQgYW5kIHR0azo6c3R5bGUgc2V0dGluZ3MuIE5vdGUgdGhhdCB0aGUgbGF5b3V0IGRvZXNuJ3QgaGFzIHRvCisgICAgYmUgYSBsaXN0IG5lY2Vzc2FyaWx5LgorCisgICAgRS5nLjoKKyAgICAgIFsoIk1lbnVidXR0b24uYmFja2dyb3VuZCIsIE5vbmUpLAorICAgICAgICgiTWVudWJ1dHRvbi5idXR0b24iLCB7ImNoaWxkcmVuIjoKKyAgICAgICAgICAgWygiTWVudWJ1dHRvbi5mb2N1cyIsIHsiY2hpbGRyZW4iOgorICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5wYWRkaW5nIiwgeyJjaGlsZHJlbiI6CisgICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5sYWJlbCIsIHsic2lkZSI6ICJsZWZ0IiwgImV4cGFuZCI6IDF9KV0KKyAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICB9KV0KKyAgICAgICB9KSwKKyAgICAgICAoIk1lbnVidXR0b24uaW5kaWNhdG9yIiwgeyJzaWRlIjogInJpZ2h0In0pCisgICAgICBdCisKKyAgICAgIHJldHVybnM6CisKKyAgICAgIE1lbnVidXR0b24uYmFja2dyb3VuZAorICAgICAgTWVudWJ1dHRvbi5idXR0b24gLWNoaWxkcmVuIHsKKyAgICAgICAgTWVudWJ1dHRvbi5mb2N1cyAtY2hpbGRyZW4geworICAgICAgICAgIE1lbnVidXR0b24ucGFkZGluZyAtY2hpbGRyZW4geworICAgICAgICAgICAgTWVudWJ1dHRvbi5sYWJlbCAtc2lkZSBsZWZ0IC1leHBhbmQgMQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgTWVudWJ1dHRvbi5pbmRpY2F0b3IgLXNpZGUgcmlnaHQiIiIKKyAgICBzY3JpcHQgPSBbXQorCisgICAgZm9yIGxheW91dF9lbGVtIGluIGxheW91dDoKKyAgICAgICAgZWxlbSwgb3B0cyA9IGxheW91dF9lbGVtCisgICAgICAgIG9wdHMgPSBvcHRzIG9yIHt9CisgICAgICAgIGZvcHRzID0gJyAnLmpvaW4obWFwKHN0ciwgX2Zvcm1hdF9vcHRkaWN0KG9wdHMsIFRydWUsICJjaGlsZHJlbiIpKSkKKyAgICAgICAgaGVhZCA9ICIlcyVzJXMiICUgKCcgJyAqIGluZGVudCwgZWxlbSwgKCIgJXMiICUgZm9wdHMpIGlmIGZvcHRzIGVsc2UgJycpCisKKyAgICAgICAgaWYgImNoaWxkcmVuIiBpbiBvcHRzOgorICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChoZWFkICsgIiAtY2hpbGRyZW4geyIpCisgICAgICAgICAgICBpbmRlbnQgKz0gaW5kZW50X3NpemUKKyAgICAgICAgICAgIG5ld3NjcmlwdCwgaW5kZW50ID0gX2Zvcm1hdF9sYXlvdXRsaXN0KG9wdHNbJ2NoaWxkcmVuJ10sIGluZGVudCwKKyAgICAgICAgICAgICAgICBpbmRlbnRfc2l6ZSkKKyAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQobmV3c2NyaXB0KQorICAgICAgICAgICAgaW5kZW50IC09IGluZGVudF9zaXplCisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCclc30nICUgKCcgJyAqIGluZGVudCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKGhlYWQpCisKKyAgICByZXR1cm4gJ1xuJy5qb2luKHNjcmlwdCksIGluZGVudAorCitkZWYgX3NjcmlwdF9mcm9tX3NldHRpbmdzKHNldHRpbmdzKToKKyAgICAiIiJSZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHNjcmlwdCwgYmFzZWQgb24gc2V0dGluZ3MsIGFjY29yZGluZyB0bworICAgIHRoZW1lX3NldHRpbmdzIGRlZmluaXRpb24gdG8gYmUgdXNlZCBieSB0aGVtZV9zZXR0aW5ncyBhbmQKKyAgICB0aGVtZV9jcmVhdGUuIiIiCisgICAgc2NyaXB0ID0gW10KKyAgICAjIGEgc2NyaXB0IHdpbGwgYmUgZ2VuZXJhdGVkIGFjY29yZGluZyB0byBzZXR0aW5ncyBwYXNzZWQsIHdoaWNoCisgICAgIyB3aWxsIHRoZW4gYmUgZXZhbHVhdGVkIGJ5IFRjbAorICAgIGZvciBuYW1lLCBvcHRzIGluIHNldHRpbmdzLml0ZXJpdGVtcygpOgorICAgICAgICAjIHdpbGwgZm9ybWF0IHNwZWNpZmljIGtleXMgYWNjb3JkaW5nIHRvIFRjbCBjb2RlCisgICAgICAgIGlmIG9wdHMuZ2V0KCdjb25maWd1cmUnKTogIyBmb3JtYXQgJ2NvbmZpZ3VyZScKKyAgICAgICAgICAgIHMgPSAnICcuam9pbihtYXAodW5pY29kZSwgX2Zvcm1hdF9vcHRkaWN0KG9wdHNbJ2NvbmZpZ3VyZSddLCBUcnVlKSkpCisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJ0dGs6OnN0eWxlIGNvbmZpZ3VyZSAlcyAlczsiICUgKG5hbWUsIHMpKQorCisgICAgICAgIGlmIG9wdHMuZ2V0KCdtYXAnKTogIyBmb3JtYXQgJ21hcCcKKyAgICAgICAgICAgIHMgPSAnICcuam9pbihtYXAodW5pY29kZSwgX2Zvcm1hdF9tYXBkaWN0KG9wdHNbJ21hcCddLCBUcnVlKSkpCisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJ0dGs6OnN0eWxlIG1hcCAlcyAlczsiICUgKG5hbWUsIHMpKQorCisgICAgICAgIGlmICdsYXlvdXQnIGluIG9wdHM6ICMgZm9ybWF0ICdsYXlvdXQnIHdoaWNoIG1heSBiZSBlbXB0eQorICAgICAgICAgICAgaWYgbm90IG9wdHNbJ2xheW91dCddOgorICAgICAgICAgICAgICAgIHMgPSAnbnVsbCcgIyBjb3VsZCBiZSBhbnkgb3RoZXIgd29yZCwgYnV0IHRoaXMgb25lIG1ha2VzIHNlbnNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMsIF8gPSBfZm9ybWF0X2xheW91dGxpc3Qob3B0c1snbGF5b3V0J10pCisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJ0dGs6OnN0eWxlIGxheW91dCAlcyB7XG4lc1xufSIgJSAobmFtZSwgcykpCisKKyAgICAgICAgaWYgb3B0cy5nZXQoJ2VsZW1lbnQgY3JlYXRlJyk6ICMgZm9ybWF0ICdlbGVtZW50IGNyZWF0ZScKKyAgICAgICAgICAgIGVvcHRzID0gb3B0c1snZWxlbWVudCBjcmVhdGUnXQorICAgICAgICAgICAgZXR5cGUgPSBlb3B0c1swXQorCisgICAgICAgICAgICAjIGZpbmQgd2hlcmUgYXJncyBlbmQsIGFuZCB3aGVyZSBrd2FyZ3Mgc3RhcnQKKyAgICAgICAgICAgIGFyZ2MgPSAxICMgZXR5cGUgd2FzIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgICAgIHdoaWxlIGFyZ2MgPCBsZW4oZW9wdHMpIGFuZCBub3QgaGFzYXR0cihlb3B0c1thcmdjXSwgJ2l0ZXJpdGVtcycpOgorICAgICAgICAgICAgICAgIGFyZ2MgKz0gMQorCisgICAgICAgICAgICBlbGVtYXJncyA9IGVvcHRzWzE6YXJnY10KKyAgICAgICAgICAgIGVsZW1rdyA9IGVvcHRzW2FyZ2NdIGlmIGFyZ2MgPCBsZW4oZW9wdHMpIGFuZCBlb3B0c1thcmdjXSBlbHNlIHt9CisgICAgICAgICAgICBzcGVjLCBvcHRzID0gX2Zvcm1hdF9lbGVtY3JlYXRlKGV0eXBlLCBUcnVlLCAqZWxlbWFyZ3MsICoqZWxlbWt3KQorCisgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJ0dGs6OnN0eWxlIGVsZW1lbnQgY3JlYXRlICVzICVzICVzICVzIiAlICgKKyAgICAgICAgICAgICAgICBuYW1lLCBldHlwZSwgc3BlYywgb3B0cykpCisKKyAgICByZXR1cm4gJ1xuJy5qb2luKHNjcmlwdCkKKworZGVmIF9kaWN0X2Zyb21fdGNsdHVwbGUodHR1cGxlLCBjdXRfbWludXM9VHJ1ZSk6CisgICAgIiIiQnJlYWsgdHVwbGUgaW4gcGFpcnMsIGZvcm1hdCBpdCBwcm9wZXJseSwgdGhlbiBidWlsZCB0aGUgcmV0dXJuCisgICAgZGljdC4gSWYgY3V0X21pbnVzIGlzIFRydWUsIHRoZSBzdXBwb3NlZCAnLScgcHJlZml4aW5nIG9wdGlvbnMgd2lsbAorICAgIGJlIHJlbW92ZWQuCisKKyAgICB0dHVwbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBlbGVtZW50cy4iIiIKKyAgICBvcHRfc3RhcnQgPSAxIGlmIGN1dF9taW51cyBlbHNlIDAKKworICAgIHJldGRpY3QgPSB7fQorICAgIGl0ID0gaXRlcih0dHVwbGUpCisgICAgZm9yIG9wdCwgdmFsIGluIHppcChpdCwgaXQpOgorICAgICAgICByZXRkaWN0W3N0cihvcHQpW29wdF9zdGFydDpdXSA9IHZhbAorCisgICAgcmV0dXJuIHRjbG9ianNfdG9fcHkocmV0ZGljdCkKKworZGVmIF9saXN0X2Zyb21fc3RhdGVzcGVjKHN0dXBsZSk6CisgICAgIiIiQ29uc3RydWN0IGEgbGlzdCBmcm9tIHRoZSBnaXZlbiBzdGF0ZXNwZWMgdHVwbGUgYWNjb3JkaW5nIHRvIHRoZQorICAgIGFjY2VwdGVkIHN0YXRlc3BlYyBhY2NlcHRlZCBieSBfZm9ybWF0X21hcGRpY3QuIiIiCisgICAgbnZhbCA9IFtdCisgICAgZm9yIHZhbCBpbiBzdHVwbGU6CisgICAgICAgIHR5cGVuYW1lID0gZ2V0YXR0cih2YWwsICd0eXBlbmFtZScsIE5vbmUpCisgICAgICAgIGlmIHR5cGVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBudmFsLmFwcGVuZCh2YWwpCisgICAgICAgIGVsc2U6ICMgdGhpcyBpcyBhIFRjbCBvYmplY3QKKyAgICAgICAgICAgIHZhbCA9IHN0cih2YWwpCisgICAgICAgICAgICBpZiB0eXBlbmFtZSA9PSAnU3RhdGVTcGVjJzoKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3BsaXQoKQorICAgICAgICAgICAgbnZhbC5hcHBlbmQodmFsKQorCisgICAgaXQgPSBpdGVyKG52YWwpCisgICAgcmV0dXJuIFtfZmxhdHRlbihzcGVjKSBmb3Igc3BlYyBpbiB6aXAoaXQsIGl0KV0KKworZGVmIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUobHR1cGxlKToKKyAgICAiIiJDb25zdHJ1Y3QgYSBsaXN0IGZyb20gdGhlIHR1cGxlIHJldHVybmVkIGJ5IHR0azo6bGF5b3V0LCB0aGlzIGlzCisgICAgc29tZXdoYXQgdGhlIHJldmVyc2Ugb2YgX2Zvcm1hdF9sYXlvdXRsaXN0LiIiIgorICAgIHJlcyA9IFtdCisKKyAgICBpbmR4ID0gMAorICAgIHdoaWxlIGluZHggPCBsZW4obHR1cGxlKToKKyAgICAgICAgbmFtZSA9IGx0dXBsZVtpbmR4XQorICAgICAgICBvcHRzID0ge30KKyAgICAgICAgcmVzLmFwcGVuZCgobmFtZSwgb3B0cykpCisgICAgICAgIGluZHggKz0gMQorCisgICAgICAgIHdoaWxlIGluZHggPCBsZW4obHR1cGxlKTogIyBncmFiIG5hbWUncyBvcHRpb25zCisgICAgICAgICAgICBvcHQsIHZhbCA9IGx0dXBsZVtpbmR4OmluZHggKyAyXQorICAgICAgICAgICAgaWYgbm90IG9wdC5zdGFydHN3aXRoKCctJyk6ICMgZm91bmQgbmV4dCBuYW1lCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgb3B0ID0gb3B0WzE6XSAjIHJlbW92ZSB0aGUgJy0nIGZyb20gdGhlIG9wdGlvbgorICAgICAgICAgICAgaW5keCArPSAyCisKKyAgICAgICAgICAgIGlmIG9wdCA9PSAnY2hpbGRyZW4nOgorICAgICAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fbGF5b3V0dHVwbGUodmFsKQorCisgICAgICAgICAgICBvcHRzW29wdF0gPSB2YWwKKworICAgIHJldHVybiByZXMKKworZGVmIF92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jLCAqYXJncyk6CisgICAgIiIiRm9ybWF0IG9wdGlvbnMgdGhlbiBjYWxsIGZ1bmMgd2l0aCBhcmdzIGFuZCBvcHRpb25zIGFuZCByZXR1cm4KKyAgICB0aGUgYXBwcm9wcmlhdGUgcmVzdWx0LgorCisgICAgSWYgbm8gb3B0aW9uIGlzIHNwZWNpZmllZCwgYSBkaWN0IGlzIHJldHVybmVkLiBJZiBhIG9wdGlvbiBpcworICAgIHNwZWNpZmllZCB3aXRoIHRoZSBOb25lIHZhbHVlLCB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGlzIHJldHVybmVkLgorICAgIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGp1c3Qgc2V0cyB0aGUgcGFzc2VkIG9wdGlvbnMgYW5kIHRoZSBjYWxsZXIKKyAgICBzaG91bGRuJ3QgYmUgZXhwZWN0aW5nIGEgcmV0dXJuIHZhbHVlIGFueXdheS4iIiIKKyAgICBvcHRpb25zID0gX2Zvcm1hdF9vcHRkaWN0KG9wdGlvbnMpCisgICAgcmVzID0gZnVuYygqKGFyZ3MgKyBvcHRpb25zKSkKKworICAgIGlmIGxlbihvcHRpb25zKSAlIDI6ICMgb3B0aW9uIHNwZWNpZmllZCB3aXRob3V0IGEgdmFsdWUsIHJldHVybiBpdHMgdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUocmVzKQorCitkZWYgX2NvbnZlcnRfc3RyaW5ndmFsKHZhbHVlKToKKyAgICAiIiJDb252ZXJ0cyBhIHZhbHVlIHRvLCBob3BlZnVsbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBQeXRob24gb2JqZWN0LiIiIgorICAgIHZhbHVlID0gdW5pY29kZSh2YWx1ZSkKKyAgICB0cnk6CisgICAgICAgIHZhbHVlID0gaW50KHZhbHVlKQorICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgcGFzcworCisgICAgcmV0dXJuIHZhbHVlCisKK2RlZiB0Y2xvYmpzX3RvX3B5KGFkaWN0KToKKyAgICAiIiJSZXR1cm5zIGFkaWN0IHdpdGggaXRzIHZhbHVlcyBjb252ZXJ0ZWQgZnJvbSBUY2wgb2JqZWN0cyB0byBQeXRob24KKyAgICBvYmplY3RzLiIiIgorICAgIGZvciBvcHQsIHZhbCBpbiBhZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgdmFsIGFuZCBoYXNhdHRyKHZhbCwgJ19fbGVuX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodmFsLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGlmIGdldGF0dHIodmFsWzBdLCAndHlwZW5hbWUnLCBOb25lKSA9PSAnU3RhdGVTcGVjJzoKKyAgICAgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX3N0YXRlc3BlYyh2YWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9IG1hcChfY29udmVydF9zdHJpbmd2YWwsIHZhbCkKKworICAgICAgICBlbGlmIGhhc2F0dHIodmFsLCAndHlwZW5hbWUnKTogIyBzb21lIG90aGVyIChzaW5nbGUpIFRjbCBvYmplY3QKKyAgICAgICAgICAgIHZhbCA9IF9jb252ZXJ0X3N0cmluZ3ZhbCh2YWwpCisKKyAgICAgICAgYWRpY3Rbb3B0XSA9IHZhbAorCisgICAgcmV0dXJuIGFkaWN0CisKK2RlZiBzZXR1cF9tYXN0ZXIobWFzdGVyPU5vbmUpOgorICAgICIiIklmIG1hc3RlciBpcyBub3QgTm9uZSwgaXRzZWxmIGlzIHJldHVybmVkLiBJZiBtYXN0ZXIgaXMgTm9uZSwKKyAgICB0aGUgZGVmYXVsdCBtYXN0ZXIgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXMgb25lLCBvdGhlcndpc2UgYSBuZXcKKyAgICBtYXN0ZXIgaXMgY3JlYXRlZCBhbmQgcmV0dXJuZWQuCisKKyAgICBJZiBpdCBpcyBub3QgYWxsb3dlZCB0byB1c2UgdGhlIGRlZmF1bHQgcm9vdCBhbmQgbWFzdGVyIGlzIE5vbmUsCisgICAgUnVudGltZUVycm9yIGlzIHJhaXNlZC4iIiIKKyAgICBpZiBtYXN0ZXIgaXMgTm9uZToKKyAgICAgICAgaWYgVGtpbnRlci5fc3VwcG9ydF9kZWZhdWx0X3Jvb3Q6CisgICAgICAgICAgICBtYXN0ZXIgPSBUa2ludGVyLl9kZWZhdWx0X3Jvb3Qgb3IgVGtpbnRlci5UaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJObyBtYXN0ZXIgc3BlY2lmaWVkIGFuZCBUa2ludGVyIGlzICIKKyAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyZWQgdG8gbm90IHN1cHBvcnQgZGVmYXVsdCByb290IikKKyAgICByZXR1cm4gbWFzdGVyCisKKworY2xhc3MgU3R5bGUob2JqZWN0KToKKyAgICAiIiJNYW5pcHVsYXRlIHN0eWxlIGRhdGFiYXNlLiIiIgorCisgICAgX25hbWUgPSAidHRrOjpzdHlsZSIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6CisgICAgICAgIG1hc3RlciA9IHNldHVwX21hc3RlcihtYXN0ZXIpCisKKyAgICAgICAgaWYgbm90IGdldGF0dHIobWFzdGVyLCAnX3RpbGVfbG9hZGVkJywgRmFsc2UpOgorICAgICAgICAgICAgIyBMb2FkIHRpbGUgbm93LCBpZiBuZWVkZWQKKyAgICAgICAgICAgIF9sb2FkX3RpbGUobWFzdGVyKQorCisgICAgICAgIHNlbGYubWFzdGVyID0gbWFzdGVyCisgICAgICAgIHNlbGYudGsgPSBzZWxmLm1hc3Rlci50aworCisKKyAgICBkZWYgY29uZmlndXJlKHNlbGYsIHN0eWxlLCBxdWVyeV9vcHQ9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24ocykgaW4KKyAgICAgICAgc3R5bGUuCisKKyAgICAgICAgRWFjaCBrZXkgaW4ga3cgaXMgYW4gb3B0aW9uIGFuZCBlYWNoIHZhbHVlIGlzIGVpdGhlciBhIHN0cmluZyBvcgorICAgICAgICBhIHNlcXVlbmNlIGlkZW50aWZ5aW5nIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24uIiIiCisgICAgICAgIGlmIHF1ZXJ5X29wdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3W3F1ZXJ5X29wdF0gPSBOb25lCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fbmFtZSwgImNvbmZpZ3VyZSIsIHN0eWxlKQorCisKKyAgICBkZWYgbWFwKHNlbGYsIHN0eWxlLCBxdWVyeV9vcHQ9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIHNldHMgZHluYW1pYyB2YWx1ZXMgb2YgdGhlIHNwZWNpZmllZCBvcHRpb24ocykgaW4KKyAgICAgICAgc3R5bGUuCisKKyAgICAgICAgRWFjaCBrZXkgaW4ga3cgaXMgYW4gb3B0aW9uIGFuZCBlYWNoIHZhbHVlIHNob3VsZCBiZSBhIGxpc3Qgb3IgYQorICAgICAgICB0dXBsZSAodXN1YWxseSkgY29udGFpbmluZyBzdGF0ZXNwZWNzIGdyb3VwZWQgaW4gdHVwbGVzLCBvciBsaXN0LAorICAgICAgICBvciBzb21ldGhpbmcgZWxzZSBvZiB5b3VyIHByZWZlcmVuY2UuIEEgc3RhdGVzcGVjIGlzIGNvbXBvdW5kIG9mCisgICAgICAgIG9uZSBvciBtb3JlIHN0YXRlcyBhbmQgdGhlbiBhIHZhbHVlLiIiIgorICAgICAgICBpZiBxdWVyeV9vcHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9zdGF0ZXNwZWMoCisgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJtYXAiLCBzdHlsZSwgJy0lcycgJSBxdWVyeV9vcHQpKQorCisgICAgICAgIHJldHVybiBfZGljdF9mcm9tX3RjbHR1cGxlKAorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJtYXAiLCBzdHlsZSwgKihfZm9ybWF0X21hcGRpY3Qoa3cpKSkpCisKKworICAgIGRlZiBsb29rdXAoc2VsZiwgc3R5bGUsIG9wdGlvbiwgc3RhdGU9Tm9uZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciBvcHRpb24gaW4gc3R5bGUuCisKKyAgICAgICAgSWYgc3RhdGUgaXMgc3BlY2lmaWVkIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2VxdWVuY2Ugb2Ygb25lCisgICAgICAgIG9yIG1vcmUgc3RhdGVzLiBJZiB0aGUgZGVmYXVsdCBhcmd1bWVudCBpcyBzZXQsIGl0IGlzIHVzZWQgYXMKKyAgICAgICAgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG5vIHNwZWNpZmljYXRpb24gZm9yIG9wdGlvbiBpcyBmb3VuZC4iIiIKKyAgICAgICAgc3RhdGUgPSAnICcuam9pbihzdGF0ZSkgaWYgc3RhdGUgZWxzZSAnJworCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImxvb2t1cCIsIHN0eWxlLCAnLSVzJyAlIG9wdGlvbiwKKyAgICAgICAgICAgIHN0YXRlLCBkZWZhdWx0KQorCisKKyAgICBkZWYgbGF5b3V0KHNlbGYsIHN0eWxlLCBsYXlvdXRzcGVjPU5vbmUpOgorICAgICAgICAiIiJEZWZpbmUgdGhlIHdpZGdldCBsYXlvdXQgZm9yIGdpdmVuIHN0eWxlLiBJZiBsYXlvdXRzcGVjIGlzCisgICAgICAgIG9taXR0ZWQsIHJldHVybiB0aGUgbGF5b3V0IHNwZWNpZmljYXRpb24gZm9yIGdpdmVuIHN0eWxlLgorCisgICAgICAgIGxheW91dHNwZWMgaXMgZXhwZWN0ZWQgdG8gYmUgYSBsaXN0IG9yIGFuIG9iamVjdCBkaWZmZXJlbnQgdGhhbgorICAgICAgICBOb25lIHRoYXQgZXZhbHVhdGVzIHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvICJ0dXJuIG9mZiIgdGhhdCBzdHlsZS4KKyAgICAgICAgSWYgaXQgaXMgYSBsaXN0IChvciB0dXBsZSwgb3Igc29tZXRoaW5nIGVsc2UpLCBlYWNoIGl0ZW0gc2hvdWxkIGJlCisgICAgICAgIGEgdHVwbGUgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIGxheW91dCBuYW1lIGFuZCB0aGUgc2Vjb25kIGl0ZW0KKyAgICAgICAgc2hvdWxkIGhhdmUgdGhlIGZvcm1hdCBkZXNjcmliZWQgYmVsb3c6CisKKyAgICAgICAgTEFZT1VUUworCisgICAgICAgICAgICBBIGxheW91dCBjYW4gY29udGFpbiB0aGUgdmFsdWUgTm9uZSwgaWYgdGFrZXMgbm8gb3B0aW9ucywgb3IKKyAgICAgICAgICAgIGEgZGljdCBvZiBvcHRpb25zIHNwZWNpZnlpbmcgaG93IHRvIGFycmFuZ2UgdGhlIGVsZW1lbnQuCisgICAgICAgICAgICBUaGUgbGF5b3V0IG1lY2hhbmlzbSB1c2VzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBwYWNrCisgICAgICAgICAgICBnZW9tZXRyeSBtYW5hZ2VyOiBnaXZlbiBhbiBpbml0aWFsIGNhdml0eSwgZWFjaCBlbGVtZW50IGlzCisgICAgICAgICAgICBhbGxvY2F0ZWQgYSBwYXJjZWwuIFZhbGlkIG9wdGlvbnMvdmFsdWVzIGFyZToKKworICAgICAgICAgICAgICAgIHNpZGU6IHdoaWNoc2lkZQorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgd2hpY2ggc2lkZSBvZiB0aGUgY2F2aXR5IHRvIHBsYWNlIHRoZQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50OyBvbmUgb2YgdG9wLCByaWdodCwgYm90dG9tIG9yIGxlZnQuIElmCisgICAgICAgICAgICAgICAgICAgIG9taXR0ZWQsIHRoZSBlbGVtZW50IG9jY3VwaWVzIHRoZSBlbnRpcmUgY2F2aXR5LgorCisgICAgICAgICAgICAgICAgc3RpY2t5OiBuc3dlCisgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB3aGVyZSB0aGUgZWxlbWVudCBpcyBwbGFjZWQgaW5zaWRlIGl0cworICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgcGFyY2VsLgorCisgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtzdWJsYXlvdXQuLi4gXQorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgYSBsaXN0IG9mIGVsZW1lbnRzIHRvIHBsYWNlIGluc2lkZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC4gRWFjaCBlbGVtZW50IGlzIGEgdHVwbGUgKG9yIG90aGVyIHNlcXVlbmNlKQorICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgbGF5b3V0IG5hbWUsIGFuZCB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgaXMgYSBMQVlPVVQuIiIiCisgICAgICAgIGxzcGVjID0gTm9uZQorICAgICAgICBpZiBsYXlvdXRzcGVjOgorICAgICAgICAgICAgbHNwZWMgPSBfZm9ybWF0X2xheW91dGxpc3QobGF5b3V0c3BlYylbMF0KKyAgICAgICAgZWxpZiBsYXlvdXRzcGVjIGlzIG5vdCBOb25lOiAjIHdpbGwgZGlzYWJsZSB0aGUgbGF5b3V0ICh7fSwgJycsIGV0YykKKyAgICAgICAgICAgIGxzcGVjID0gIm51bGwiICMgY291bGQgYmUgYW55IG90aGVyIHdvcmQsIGJ1dCB0aGlzIG1heSBtYWtlIHNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdoZW4gY2FsbGluZyBsYXlvdXQoc3R5bGUpIGxhdGVyCisKKyAgICAgICAgcmV0dXJuIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUoCisgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImxheW91dCIsIHN0eWxlLCBsc3BlYykpCisKKworICAgIGRlZiBlbGVtZW50X2NyZWF0ZShzZWxmLCBlbGVtZW50bmFtZSwgZXR5cGUsICphcmdzLCAqKmt3KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgdGhlbWUgb2YgZ2l2ZW4gZXR5cGUuIiIiCisgICAgICAgIHNwZWMsIG9wdHMgPSBfZm9ybWF0X2VsZW1jcmVhdGUoZXR5cGUsIEZhbHNlLCAqYXJncywgKiprdykKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJlbGVtZW50IiwgImNyZWF0ZSIsIGVsZW1lbnRuYW1lLCBldHlwZSwKKyAgICAgICAgICAgIHNwZWMsICpvcHRzKQorCisKKyAgICBkZWYgZWxlbWVudF9uYW1lcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBlbGVtZW50cyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IHRoZW1lLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJlbGVtZW50IiwgIm5hbWVzIikKKworCisgICAgZGVmIGVsZW1lbnRfb3B0aW9ucyhzZWxmLCBlbGVtZW50bmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiBlbGVtZW50bmFtZSdzIG9wdGlvbnMuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImVsZW1lbnQiLCAib3B0aW9ucyIsIGVsZW1lbnRuYW1lKQorCisKKyAgICBkZWYgdGhlbWVfY3JlYXRlKHNlbGYsIHRoZW1lbmFtZSwgcGFyZW50PU5vbmUsIHNldHRpbmdzPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGVzIGEgbmV3IHRoZW1lLgorCisgICAgICAgIEl0IGlzIGFuIGVycm9yIGlmIHRoZW1lbmFtZSBhbHJlYWR5IGV4aXN0cy4gSWYgcGFyZW50IGlzCisgICAgICAgIHNwZWNpZmllZCwgdGhlIG5ldyB0aGVtZSB3aWxsIGluaGVyaXQgc3R5bGVzLCBlbGVtZW50cyBhbmQKKyAgICAgICAgbGF5b3V0cyBmcm9tIHRoZSBzcGVjaWZpZWQgcGFyZW50IHRoZW1lLiBJZiBzZXR0aW5ncyBhcmUgcHJlc2VudCwKKyAgICAgICAgdGhleSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBzeW50YXggdXNlZCBmb3IgdGhlbWVfc2V0dGluZ3MuIiIiCisgICAgICAgIHNjcmlwdCA9IF9zY3JpcHRfZnJvbV9zZXR0aW5ncyhzZXR0aW5ncykgaWYgc2V0dGluZ3MgZWxzZSAnJworCisgICAgICAgIGlmIHBhcmVudDoKKyAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAidGhlbWUiLCAiY3JlYXRlIiwgdGhlbWVuYW1lLAorICAgICAgICAgICAgICAgICItcGFyZW50IiwgcGFyZW50LCAiLXNldHRpbmdzIiwgc2NyaXB0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJ0aGVtZSIsICJjcmVhdGUiLCB0aGVtZW5hbWUsCisgICAgICAgICAgICAgICAgIi1zZXR0aW5ncyIsIHNjcmlwdCkKKworCisgICAgZGVmIHRoZW1lX3NldHRpbmdzKHNlbGYsIHRoZW1lbmFtZSwgc2V0dGluZ3MpOgorICAgICAgICAiIiJUZW1wb3JhcmlseSBzZXRzIHRoZSBjdXJyZW50IHRoZW1lIHRvIHRoZW1lbmFtZSwgYXBwbHkgc3BlY2lmaWVkCisgICAgICAgIHNldHRpbmdzIGFuZCB0aGVuIHJlc3RvcmUgdGhlIHByZXZpb3VzIHRoZW1lLgorCisgICAgICAgIEVhY2gga2V5IGluIHNldHRpbmdzIGlzIGEgc3R5bGUgYW5kIGVhY2ggdmFsdWUgbWF5IGNvbnRhaW4gdGhlCisgICAgICAgIGtleXMgJ2NvbmZpZ3VyZScsICdtYXAnLCAnbGF5b3V0JyBhbmQgJ2VsZW1lbnQgY3JlYXRlJyBhbmQgdGhleQorICAgICAgICBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMgc3BlY2lmaWVkIGJ5IHRoZSBtZXRob2RzCisgICAgICAgIGNvbmZpZ3VyZSwgbWFwLCBsYXlvdXQgYW5kIGVsZW1lbnRfY3JlYXRlIHJlc3BlY3RpdmVseS4iIiIKKyAgICAgICAgc2NyaXB0ID0gX3NjcmlwdF9mcm9tX3NldHRpbmdzKHNldHRpbmdzKQorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgInRoZW1lIiwgInNldHRpbmdzIiwgdGhlbWVuYW1lLCBzY3JpcHQpCisKKworICAgIGRlZiB0aGVtZV9uYW1lcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGtub3duIHRoZW1lcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAidGhlbWUiLCAibmFtZXMiKQorCisKKyAgICBkZWYgdGhlbWVfdXNlKHNlbGYsIHRoZW1lbmFtZT1Ob25lKToKKyAgICAgICAgIiIiSWYgdGhlbWVuYW1lIGlzIE5vbmUsIHJldHVybnMgdGhlIHRoZW1lIGluIHVzZSwgb3RoZXJ3aXNlLCBzZXQKKyAgICAgICAgdGhlIGN1cnJlbnQgdGhlbWUgdG8gdGhlbWVuYW1lLCByZWZyZXNoZXMgYWxsIHdpZGdldHMgYW5kIGVtaXRzCisgICAgICAgIGEgPDxUaGVtZUNoYW5nZWQ+PiBldmVudC4iIiIKKyAgICAgICAgaWYgdGhlbWVuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAjIFN0YXJ0aW5nIG9uIFRrIDguNiwgY2hlY2tpbmcgdGhpcyBnbG9iYWwgaXMgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAgICAgICAgIyBzaW5jZSBpdCBhbGxvd3MgZG9pbmcgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJ0aGVtZSIsICJ1c2UiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuZXZhbCgicmV0dXJuICR0dGs6OmN1cnJlbnRUaGVtZSIpCisKKyAgICAgICAgIyB1c2luZyAidHRrOjpzZXRUaGVtZSIgaW5zdGVhZCBvZiAidHRrOjpzdHlsZSB0aGVtZSB1c2UiIGNhdXNlcworICAgICAgICAjIHRoZSB2YXJpYWJsZSBjdXJyZW50VGhlbWUgdG8gYmUgdXBkYXRlZCwgYWxzbywgdHRrOjpzZXRUaGVtZSBjYWxscworICAgICAgICAjICJ0dGs6OnN0eWxlIHRoZW1lIHVzZSIgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZW1lLgorICAgICAgICBzZWxmLnRrLmNhbGwoInR0azo6c2V0VGhlbWUiLCB0aGVtZW5hbWUpCisKKworY2xhc3MgV2lkZ2V0KFRraW50ZXIuV2lkZ2V0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBUayB0aGVtZWQgd2lkZ2V0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXIsIHdpZGdldG5hbWUsIGt3PU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGEgVHRrIFdpZGdldCB3aXRoIHRoZSBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgdGFrZWZvY3VzLCBzdHlsZQorCisgICAgICAgIFNDUk9MTEFCTEUgV0lER0VUIE9QVElPTlMKKworICAgICAgICAgICAgeHNjcm9sbGNvbW1hbmQsIHlzY3JvbGxjb21tYW5kCisKKyAgICAgICAgTEFCRUwgV0lER0VUIE9QVElPTlMKKworICAgICAgICAgICAgdGV4dCwgdGV4dHZhcmlhYmxlLCB1bmRlcmxpbmUsIGltYWdlLCBjb21wb3VuZCwgd2lkdGgKKworICAgICAgICBXSURHRVQgU1RBVEVTCisKKyAgICAgICAgICAgIGFjdGl2ZSwgZGlzYWJsZWQsIGZvY3VzLCBwcmVzc2VkLCBzZWxlY3RlZCwgYmFja2dyb3VuZCwKKyAgICAgICAgICAgIHJlYWRvbmx5LCBhbHRlcm5hdGUsIGludmFsaWQKKyAgICAgICAgIiIiCisgICAgICAgIG1hc3RlciA9IHNldHVwX21hc3RlcihtYXN0ZXIpCisgICAgICAgIGlmIG5vdCBnZXRhdHRyKG1hc3RlciwgJ190aWxlX2xvYWRlZCcsIEZhbHNlKToKKyAgICAgICAgICAgICMgTG9hZCB0aWxlIG5vdywgaWYgbmVlZGVkCisgICAgICAgICAgICBfbG9hZF90aWxlKG1hc3RlcikKKyAgICAgICAgVGtpbnRlci5XaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCB3aWRnZXRuYW1lLCBrdz1rdykKKworCisgICAgZGVmIGlkZW50aWZ5KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IGF0IHBvc2l0aW9uIHgsIHksIG9yIHRoZSBlbXB0eQorICAgICAgICBzdHJpbmcgaWYgdGhlIHBvaW50IGRvZXMgbm90IGxpZSB3aXRoaW4gYW55IGVsZW1lbnQuCisKKyAgICAgICAgeCBhbmQgeSBhcmUgcGl4ZWwgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHdpZGdldC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaWRlbnRpZnkiLCB4LCB5KQorCisKKyAgICBkZWYgaW5zdGF0ZShzZWxmLCBzdGF0ZXNwZWMsIGNhbGxiYWNrPU5vbmUsICphcmdzLCAqKmt3KToKKyAgICAgICAgIiIiVGVzdCB0aGUgd2lkZ2V0J3Mgc3RhdGUuCisKKyAgICAgICAgSWYgY2FsbGJhY2sgaXMgbm90IHNwZWNpZmllZCwgcmV0dXJucyBUcnVlIGlmIHRoZSB3aWRnZXQgc3RhdGUKKyAgICAgICAgbWF0Y2hlcyBzdGF0ZXNwZWMgYW5kIEZhbHNlIG90aGVyd2lzZS4gSWYgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLAorICAgICAgICB0aGVuIGl0IHdpbGwgYmUgaW52b2tlZCB3aXRoICphcmdzLCAqKmt3IGlmIHRoZSB3aWRnZXQgc3RhdGUKKyAgICAgICAgbWF0Y2hlcyBzdGF0ZXNwZWMuIHN0YXRlc3BlYyBpcyBleHBlY3RlZCB0byBiZSBhIHNlcXVlbmNlLiIiIgorICAgICAgICByZXQgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluc3RhdGUiLCAnICcuam9pbihzdGF0ZXNwZWMpKQorICAgICAgICBpZiByZXQgYW5kIGNhbGxiYWNrOgorICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCphcmdzLCAqKmt3KQorCisgICAgICAgIHJldHVybiBib29sKHJldCkKKworCisgICAgZGVmIHN0YXRlKHNlbGYsIHN0YXRlc3BlYz1Ob25lKToKKyAgICAgICAgIiIiTW9kaWZ5IG9yIGlucXVpcmUgd2lkZ2V0IHN0YXRlLgorCisgICAgICAgIFdpZGdldCBzdGF0ZSBpcyByZXR1cm5lZCBpZiBzdGF0ZXNwZWMgaXMgTm9uZSwgb3RoZXJ3aXNlIGl0IGlzCisgICAgICAgIHNldCBhY2NvcmRpbmcgdG8gdGhlIHN0YXRlc3BlYyBmbGFncyBhbmQgdGhlbiBhIG5ldyBzdGF0ZSBzcGVjCisgICAgICAgIGlzIHJldHVybmVkIGluZGljYXRpbmcgd2hpY2ggZmxhZ3Mgd2VyZSBjaGFuZ2VkLiBzdGF0ZXNwZWMgaXMKKyAgICAgICAgZXhwZWN0ZWQgdG8gYmUgYSBzZXF1ZW5jZS4iIiIKKyAgICAgICAgaWYgc3RhdGVzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhdGVzcGVjID0gJyAnLmpvaW4oc3RhdGVzcGVjKQorCisgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdChzdHIoc2VsZi50ay5jYWxsKHNlbGYuX3csICJzdGF0ZSIsIHN0YXRlc3BlYykpKQorCisKK2NsYXNzIEJ1dHRvbihXaWRnZXQpOgorICAgICIiIlR0ayBCdXR0b24gd2lkZ2V0LCBkaXNwbGF5cyBhIHRleHR1YWwgbGFiZWwgYW5kL29yIGltYWdlLCBhbmQKKyAgICBldmFsdWF0ZXMgYSBjb21tYW5kIHdoZW4gcHJlc3NlZC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBCdXR0b24gd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY29tcG91bmQsIGN1cnNvciwgaW1hZ2UsIHN0YXRlLCBzdHlsZSwgdGFrZWZvY3VzLAorICAgICAgICAgICAgdGV4dCwgdGV4dHZhcmlhYmxlLCB1bmRlcmxpbmUsIHdpZHRoCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgY29tbWFuZCwgZGVmYXVsdCwgd2lkdGgKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmJ1dHRvbiIsIGt3KQorCisKKyAgICBkZWYgaW52b2tlKHNlbGYpOgorICAgICAgICAiIiJJbnZva2VzIHRoZSBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnV0dG9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJpbnZva2UiKQorCisKK2NsYXNzIENoZWNrYnV0dG9uKFdpZGdldCk6CisgICAgIiIiVHRrIENoZWNrYnV0dG9uIHdpZGdldCB3aGljaCBpcyBlaXRoZXIgaW4gb24tIG9yIG9mZi1zdGF0ZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBDaGVja2J1dHRvbiB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjb21wb3VuZCwgY3Vyc29yLCBpbWFnZSwgc3RhdGUsIHN0eWxlLCB0YWtlZm9jdXMsCisgICAgICAgICAgICB0ZXh0LCB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgd2lkdGgKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb21tYW5kLCBvZmZ2YWx1ZSwgb252YWx1ZSwgdmFyaWFibGUKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmNoZWNrYnV0dG9uIiwga3cpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZik6CisgICAgICAgICIiIlRvZ2dsZXMgYmV0d2VlbiB0aGUgc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQgc3RhdGVzIGFuZAorICAgICAgICBpbnZva2VzIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQuIElmIHRoZSB3aWRnZXQgaXMgY3VycmVudGx5CisgICAgICAgIHNlbGVjdGVkLCBzZXRzIHRoZSBvcHRpb24gdmFyaWFibGUgdG8gdGhlIG9mZnZhbHVlIG9wdGlvbgorICAgICAgICBhbmQgZGVzZWxlY3RzIHRoZSB3aWRnZXQ7IG90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9uIHZhcmlhYmxlCisgICAgICAgIHRvIHRoZSBvcHRpb24gb252YWx1ZS4KKworICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGFzc29jaWF0ZWQgY29tbWFuZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaW52b2tlIikKKworCitjbGFzcyBFbnRyeShXaWRnZXQsIFRraW50ZXIuRW50cnkpOgorICAgICIiIlR0ayBFbnRyeSB3aWRnZXQgZGlzcGxheXMgYSBvbmUtbGluZSB0ZXh0IHN0cmluZyBhbmQgYWxsb3dzIHRoYXQKKyAgICBzdHJpbmcgdG8gYmUgZWRpdGVkIGJ5IHRoZSB1c2VyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB3aWRnZXQ9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdHMgYSBUdGsgRW50cnkgd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzLCB4c2Nyb2xsY29tbWFuZAorCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGV4cG9ydHNlbGVjdGlvbiwgaW52YWxpZGNvbW1hbmQsIGp1c3RpZnksIHNob3csIHN0YXRlLAorICAgICAgICAgICAgdGV4dHZhcmlhYmxlLCB2YWxpZGF0ZSwgdmFsaWRhdGVjb21tYW5kLCB3aWR0aAorCisgICAgICAgIFZBTElEQVRJT04gTU9ERVMKKworICAgICAgICAgICAgbm9uZSwga2V5LCBmb2N1cywgZm9jdXNpbiwgZm9jdXNvdXQsIGFsbAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3Rlciwgd2lkZ2V0IG9yICJ0dGs6OmVudHJ5Iiwga3cpCisKKworICAgIGRlZiBiYm94KHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiUmV0dXJuIGEgdHVwbGUgb2YgKHgsIHksIHdpZHRoLCBoZWlnaHQpIHdoaWNoIGRlc2NyaWJlcyB0aGUKKyAgICAgICAgYm91bmRpbmcgYm94IG9mIHRoZSBjaGFyYWN0ZXIgZ2l2ZW4gYnkgaW5kZXguIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImJib3giLCBpbmRleCkKKworCisgICAgZGVmIGlkZW50aWZ5KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IGF0IHBvc2l0aW9uIHgsIHksIG9yIHRoZQorICAgICAgICBlbXB0eSBzdHJpbmcgaWYgdGhlIGNvb3JkaW5hdGVzIGFyZSBvdXRzaWRlIHRoZSB3aW5kb3cuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImlkZW50aWZ5IiwgeCwgeSkKKworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICAiIiJGb3JjZSByZXZhbGlkYXRpb24sIGluZGVwZW5kZW50IG9mIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZAorICAgICAgICBieSB0aGUgdmFsaWRhdGUgb3B0aW9uLiBSZXR1cm5zIEZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMsIFRydWUKKyAgICAgICAgaWYgaXQgc3VjY2VlZHMuIFNldHMgb3IgY2xlYXJzIHRoZSBpbnZhbGlkIHN0YXRlIGFjY29yZGluZ2x5LiIiIgorICAgICAgICByZXR1cm4gYm9vbChzZWxmLnRrLmNhbGwoc2VsZi5fdywgInZhbGlkYXRlIikpCisKKworY2xhc3MgQ29tYm9ib3goRW50cnkpOgorICAgICIiIlR0ayBDb21ib2JveCB3aWRnZXQgY29tYmluZXMgYSB0ZXh0IGZpZWxkIHdpdGggYSBwb3AtZG93biBsaXN0IG9mCisgICAgdmFsdWVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIENvbWJvYm94IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGV4cG9ydHNlbGVjdGlvbiwganVzdGlmeSwgaGVpZ2h0LCBwb3N0Y29tbWFuZCwgc3RhdGUsCisgICAgICAgICAgICB0ZXh0dmFyaWFibGUsIHZhbHVlcywgd2lkdGgKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlICJ2YWx1ZXMiIG9wdGlvbiBtYXkgbmVlZCBzcGVjaWFsIGZvcm1hdHRpbmcsIHNvIGxlYXZlIHRvCisgICAgICAgICMgX2Zvcm1hdF9vcHRkaWN0IHRoZSByZXNwb25zYWJpbGl0eSB0byBmb3JtYXQgaXQKKyAgICAgICAgaWYgInZhbHVlcyIgaW4ga3c6CisgICAgICAgICAgICBrd1sidmFsdWVzIl0gPSBfZm9ybWF0X29wdGRpY3Qoeyd2Jzoga3dbInZhbHVlcyJdfSlbMV0KKworICAgICAgICBFbnRyeS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmNvbWJvYm94IiwgKiprdykKKworCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGl0ZW0sIHZhbHVlKToKKyAgICAgICAgaWYgaXRlbSA9PSAidmFsdWVzIjoKKyAgICAgICAgICAgIHZhbHVlID0gX2Zvcm1hdF9vcHRkaWN0KHtpdGVtOiB2YWx1ZX0pWzFdCisKKyAgICAgICAgRW50cnkuX19zZXRpdGVtX18oc2VsZiwgaXRlbSwgdmFsdWUpCisKKworICAgIGRlZiBjb25maWd1cmUoc2VsZiwgY25mPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDdXN0b20gQ29tYm9ib3ggY29uZmlndXJlLCBjcmVhdGVkIHRvIHByb3Blcmx5IGZvcm1hdCB0aGUgdmFsdWVzCisgICAgICAgIG9wdGlvbi4iIiIKKyAgICAgICAgaWYgInZhbHVlcyIgaW4ga3c6CisgICAgICAgICAgICBrd1sidmFsdWVzIl0gPSBfZm9ybWF0X29wdGRpY3Qoeyd2Jzoga3dbInZhbHVlcyJdfSlbMV0KKworICAgICAgICByZXR1cm4gRW50cnkuY29uZmlndXJlKHNlbGYsIGNuZiwgKiprdykKKworCisgICAgZGVmIGN1cnJlbnQoc2VsZiwgbmV3aW5kZXg9Tm9uZSk6CisgICAgICAgICIiIklmIG5ld2luZGV4IGlzIHN1cHBsaWVkLCBzZXRzIHRoZSBjb21ib2JveCB2YWx1ZSB0byB0aGUKKyAgICAgICAgZWxlbWVudCBhdCBwb3NpdGlvbiBuZXdpbmRleCBpbiB0aGUgbGlzdCBvZiB2YWx1ZXMuIE90aGVyd2lzZSwKKyAgICAgICAgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIGxpc3Qgb2YgdmFsdWVzCisgICAgICAgIG9yIC0xIGlmIHRoZSBjdXJyZW50IHZhbHVlIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiY3VycmVudCIsIG5ld2luZGV4KQorCisKKyAgICBkZWYgc2V0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNvbWJvYm94IHRvIHZhbHVlLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNldCIsIHZhbHVlKQorCisKK2NsYXNzIEZyYW1lKFdpZGdldCk6CisgICAgIiIiVHRrIEZyYW1lIHdpZGdldCBpcyBhIGNvbnRhaW5lciwgdXNlZCB0byBncm91cCBvdGhlciB3aWRnZXRzCisgICAgdG9nZXRoZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgRnJhbWUgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGJvcmRlcndpZHRoLCByZWxpZWYsIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OmZyYW1lIiwga3cpCisKKworY2xhc3MgTGFiZWwoV2lkZ2V0KToKKyAgICAiIiJUdGsgTGFiZWwgd2lkZ2V0IGRpc3BsYXlzIGEgdGV4dHVhbCBsYWJlbCBhbmQvb3IgaW1hZ2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgTGFiZWwgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGNvbXBvdW5kLCBjdXJzb3IsIGltYWdlLCBzdHlsZSwgdGFrZWZvY3VzLCB0ZXh0LAorICAgICAgICAgICAgdGV4dHZhcmlhYmxlLCB1bmRlcmxpbmUsIHdpZHRoCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgYW5jaG9yLCBiYWNrZ3JvdW5kLCBmb250LCBmb3JlZ3JvdW5kLCBqdXN0aWZ5LCBwYWRkaW5nLAorICAgICAgICAgICAgcmVsaWVmLCB0ZXh0LCB3cmFwbGVuZ3RoCisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpsYWJlbCIsIGt3KQorCisKK2NsYXNzIExhYmVsZnJhbWUoV2lkZ2V0KToKKyAgICAiIiJUdGsgTGFiZWxmcmFtZSB3aWRnZXQgaXMgYSBjb250YWluZXIgdXNlZCB0byBncm91cCBvdGhlciB3aWRnZXRzCisgICAgdG9nZXRoZXIuIEl0IGhhcyBhbiBvcHRpb25hbCBsYWJlbCwgd2hpY2ggbWF5IGJlIGEgcGxhaW4gdGV4dCBzdHJpbmcKKyAgICBvciBhbm90aGVyIHdpZGdldC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBMYWJlbGZyYW1lIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworICAgICAgICAgICAgbGFiZWxhbmNob3IsIHRleHQsIHVuZGVybGluZSwgcGFkZGluZywgbGFiZWx3aWRnZXQsIHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0CisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpsYWJlbGZyYW1lIiwga3cpCisKK0xhYmVsRnJhbWUgPSBMYWJlbGZyYW1lICMgVGtpbnRlciBuYW1lIGNvbXBhdGliaWxpdHkKKworCitjbGFzcyBNZW51YnV0dG9uKFdpZGdldCk6CisgICAgIiIiVHRrIE1lbnVidXR0b24gd2lkZ2V0IGRpc3BsYXlzIGEgdGV4dHVhbCBsYWJlbCBhbmQvb3IgaW1hZ2UsIGFuZAorICAgIGRpc3BsYXlzIGEgbWVudSB3aGVuIHByZXNzZWQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgTWVudWJ1dHRvbiB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY29tcG91bmQsIGN1cnNvciwgaW1hZ2UsIHN0YXRlLCBzdHlsZSwgdGFrZWZvY3VzLAorICAgICAgICAgICAgdGV4dCwgdGV4dHZhcmlhYmxlLCB1bmRlcmxpbmUsIHdpZHRoCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgZGlyZWN0aW9uLCBtZW51CisgICAgICAgICIiIgorICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjptZW51YnV0dG9uIiwga3cpCisKKworY2xhc3MgTm90ZWJvb2soV2lkZ2V0KToKKyAgICAiIiJUdGsgTm90ZWJvb2sgd2lkZ2V0IG1hbmFnZXMgYSBjb2xsZWN0aW9uIG9mIHdpbmRvd3MgYW5kIGRpc3BsYXlzCisgICAgYSBzaW5nbGUgb25lIGF0IGEgdGltZS4gRWFjaCBjaGlsZCB3aW5kb3cgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdGFiLAorICAgIHdoaWNoIHRoZSB1c2VyIG1heSBzZWxlY3QgdG8gY2hhbmdlIHRoZSBjdXJyZW50bHktZGlzcGxheWVkIHdpbmRvdy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBOb3RlYm9vayB3aXRoIHBhcmVudCBtYXN0ZXIuCisKKyAgICAgICAgU1RBTkRBUkQgT1BUSU9OUworCisgICAgICAgICAgICBjbGFzcywgY3Vyc29yLCBzdHlsZSwgdGFrZWZvY3VzCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgaGVpZ2h0LCBwYWRkaW5nLCB3aWR0aAorCisgICAgICAgIFRBQiBPUFRJT05TCisKKyAgICAgICAgICAgIHN0YXRlLCBzdGlja3ksIHBhZGRpbmcsIHRleHQsIGltYWdlLCBjb21wb3VuZCwgdW5kZXJsaW5lCisKKyAgICAgICAgVEFCIElERU5USUZJRVJTICh0YWJfaWQpCisKKyAgICAgICAgICAgIFRoZSB0YWJfaWQgYXJndW1lbnQgZm91bmQgaW4gc2V2ZXJhbCBtZXRob2RzIG1heSB0YWtlIGFueSBvZgorICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBmb3JtczoKKworICAgICAgICAgICAgICAgICogQW4gaW50ZWdlciBiZXR3ZWVuIHplcm8gYW5kIHRoZSBudW1iZXIgb2YgdGFicworICAgICAgICAgICAgICAgICogVGhlIG5hbWUgb2YgYSBjaGlsZCB3aW5kb3cKKyAgICAgICAgICAgICAgICAqIEEgcG9zaXRpb25hbCBzcGVjaWZpY2F0aW9uIG9mIHRoZSBmb3JtICJAeCx5Iiwgd2hpY2gKKyAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIHRhYgorICAgICAgICAgICAgICAgICogVGhlIHN0cmluZyAiY3VycmVudCIsIHdoaWNoIGlkZW50aWZpZXMgdGhlCisgICAgICAgICAgICAgICAgICBjdXJyZW50bHktc2VsZWN0ZWQgdGFiCisgICAgICAgICAgICAgICAgKiBUaGUgc3RyaW5nICJlbmQiLCB3aGljaCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGFicyAob25seQorICAgICAgICAgICAgICAgICAgdmFsaWQgZm9yIG1ldGhvZCBpbmRleCkKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6Om5vdGVib29rIiwga3cpCisKKworICAgIGRlZiBhZGQoc2VsZiwgY2hpbGQsICoqa3cpOgorICAgICAgICAiIiJBZGRzIGEgbmV3IHRhYiB0byB0aGUgbm90ZWJvb2suCisKKyAgICAgICAgSWYgd2luZG93IGlzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vayBidXQgaGlkZGVuLCBpdCBpcworICAgICAgICByZXN0b3JlZCB0byBpdHMgcHJldmlvdXMgcG9zaXRpb24uIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAiYWRkIiwgY2hpbGQsICooX2Zvcm1hdF9vcHRkaWN0KGt3KSkpCisKKworICAgIGRlZiBmb3JnZXQoc2VsZiwgdGFiX2lkKToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgdGFiIHNwZWNpZmllZCBieSB0YWJfaWQsIHVubWFwcyBhbmQgdW5tYW5hZ2VzIHRoZQorICAgICAgICBhc3NvY2lhdGVkIHdpbmRvdy4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJmb3JnZXQiLCB0YWJfaWQpCisKKworICAgIGRlZiBoaWRlKHNlbGYsIHRhYl9pZCk6CisgICAgICAgICIiIkhpZGVzIHRoZSB0YWIgc3BlY2lmaWVkIGJ5IHRhYl9pZC4KKworICAgICAgICBUaGUgdGFiIHdpbGwgbm90IGJlIGRpc3BsYXllZCwgYnV0IHRoZSBhc3NvY2lhdGVkIHdpbmRvdyByZW1haW5zCisgICAgICAgIG1hbmFnZWQgYnkgdGhlIG5vdGVib29rIGFuZCBpdHMgY29uZmlndXJhdGlvbiByZW1lbWJlcmVkLiBIaWRkZW4KKyAgICAgICAgdGFicyBtYXkgYmUgcmVzdG9yZWQgd2l0aCB0aGUgYWRkIGNvbW1hbmQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAiaGlkZSIsIHRhYl9pZCkKKworCisgICAgZGVmIGlkZW50aWZ5KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0YWIgZWxlbWVudCBhdCBwb3NpdGlvbiB4LCB5LCBvciB0aGUKKyAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vbmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImlkZW50aWZ5IiwgeCwgeSkKKworCisgICAgZGVmIGluZGV4KHNlbGYsIHRhYl9pZCk6CisgICAgICAgICIiIlJldHVybnMgdGhlIG51bWVyaWMgaW5kZXggb2YgdGhlIHRhYiBzcGVjaWZpZWQgYnkgdGFiX2lkLCBvcgorICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHRhYnMgaWYgdGFiX2lkIGlzIHRoZSBzdHJpbmcgImVuZCIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluZGV4IiwgdGFiX2lkKQorCisKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIHBvcywgY2hpbGQsICoqa3cpOgorICAgICAgICAiIiJJbnNlcnRzIGEgcGFuZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgorCisgICAgICAgIHBvcyBpcyBlaXRoZXIgdGhlIHN0cmluZyBlbmQsIGFuIGludGVnZXIgaW5kZXgsIG9yIHRoZSBuYW1lIG9mCisgICAgICAgIGEgbWFuYWdlZCBjaGlsZC4gSWYgY2hpbGQgaXMgYWxyZWFkeSBtYW5hZ2VkIGJ5IHRoZSBub3RlYm9vaywKKyAgICAgICAgbW92ZXMgaXQgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJpbnNlcnQiLCBwb3MsIGNoaWxkLCAqKF9mb3JtYXRfb3B0ZGljdChrdykpKQorCisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRhYl9pZD1Ob25lKToKKyAgICAgICAgIiIiU2VsZWN0cyB0aGUgc3BlY2lmaWVkIHRhYi4KKworICAgICAgICBUaGUgYXNzb2NpYXRlZCBjaGlsZCB3aW5kb3cgd2lsbCBiZSBkaXNwbGF5ZWQsIGFuZCB0aGUKKyAgICAgICAgcHJldmlvdXNseS1zZWxlY3RlZCB3aW5kb3cgKGlmIGRpZmZlcmVudCkgaXMgdW5tYXBwZWQuIElmIHRhYl9pZAorICAgICAgICBpcyBvbWl0dGVkLCByZXR1cm5zIHRoZSB3aWRnZXQgbmFtZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCisgICAgICAgIHBhbmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNlbGVjdCIsIHRhYl9pZCkKKworCisgICAgZGVmIHRhYihzZWxmLCB0YWJfaWQsIG9wdGlvbj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiUXVlcnkgb3IgbW9kaWZ5IHRoZSBvcHRpb25zIG9mIHRoZSBzcGVjaWZpYyB0YWJfaWQuCisKKyAgICAgICAgSWYga3cgaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdCBvZiB0aGUgdGFiIG9wdGlvbiB2YWx1ZXMuIElmIG9wdGlvbgorICAgICAgICBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoYXQgb3B0aW9uLiBPdGhlcndpc2UsIHNldHMgdGhlCisgICAgICAgIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiIiIgorICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJ0YWIiLCB0YWJfaWQpCisKKworICAgIGRlZiB0YWJzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiB3aW5kb3dzIG1hbmFnZWQgYnkgdGhlIG5vdGVib29rLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJ0YWJzIikgb3IgKCkKKworCisgICAgZGVmIGVuYWJsZV90cmF2ZXJzYWwoc2VsZik6CisgICAgICAgICIiIkVuYWJsZSBrZXlib2FyZCB0cmF2ZXJzYWwgZm9yIGEgdG9wbGV2ZWwgd2luZG93IGNvbnRhaW5pbmcKKyAgICAgICAgdGhpcyBub3RlYm9vay4KKworICAgICAgICBUaGlzIHdpbGwgZXh0ZW5kIHRoZSBiaW5kaW5ncyBmb3IgdGhlIHRvcGxldmVsIHdpbmRvdyBjb250YWluaW5nCisgICAgICAgIHRoaXMgbm90ZWJvb2sgYXMgZm9sbG93czoKKworICAgICAgICAgICAgQ29udHJvbC1UYWI6IHNlbGVjdHMgdGhlIHRhYiBmb2xsb3dpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZAorICAgICAgICAgICAgICAgICAgICAgICAgIG9uZQorCisgICAgICAgICAgICBTaGlmdC1Db250cm9sLVRhYjogc2VsZWN0cyB0aGUgdGFiIHByZWNlZGluZyB0aGUgY3VycmVudGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgb25lCisKKyAgICAgICAgICAgIEFsdC1LOiB3aGVyZSBLIGlzIHRoZSBtbmVtb25pYyAodW5kZXJsaW5lZCkgY2hhcmFjdGVyIG9mIGFueQorICAgICAgICAgICAgICAgICAgIHRhYiwgd2lsbCBzZWxlY3QgdGhhdCB0YWIuCisKKyAgICAgICAgTXVsdGlwbGUgbm90ZWJvb2tzIGluIGEgc2luZ2xlIHRvcGxldmVsIG1heSBiZSBlbmFibGVkIGZvcgorICAgICAgICB0cmF2ZXJzYWwsIGluY2x1ZGluZyBuZXN0ZWQgbm90ZWJvb2tzLiBIb3dldmVyLCBub3RlYm9vayB0cmF2ZXJzYWwKKyAgICAgICAgb25seSB3b3JrcyBwcm9wZXJseSBpZiBhbGwgcGFuZXMgYXJlIGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUKKyAgICAgICAgbm90ZWJvb2suIiIiCisgICAgICAgICMgVGhlIG9ubHksIGFuZCBnb29kLCBkaWZmZXJlbmNlIEkgc2VlIGlzIGFib3V0IG1uZW1vbmljcywgd2hpY2ggd29ya3MKKyAgICAgICAgIyBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLiBDb250cm9sLVRhYiBhbmQgU2hpZnQtQ29udHJvbC1UYWIgYWx3YXlzCisgICAgICAgICMgd29ya3MgKGhlcmUgYXQgbGVhc3QpLgorICAgICAgICBzZWxmLnRrLmNhbGwoInR0azo6bm90ZWJvb2s6OmVuYWJsZVRyYXZlcnNhbCIsIHNlbGYuX3cpCisKKworY2xhc3MgUGFuZWR3aW5kb3coV2lkZ2V0LCBUa2ludGVyLlBhbmVkV2luZG93KToKKyAgICAiIiJUdGsgUGFuZWR3aW5kb3cgd2lkZ2V0IGRpc3BsYXlzIGEgbnVtYmVyIG9mIHN1YndpbmRvd3MsIHN0YWNrZWQKKyAgICBlaXRoZXIgdmVydGljYWxseSBvciBob3Jpem9udGFsbHkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgUGFuZWR3aW5kb3cgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIG9yaWVudCwgd2lkdGgsIGhlaWdodAorCisgICAgICAgIFBBTkUgT1BUSU9OUworCisgICAgICAgICAgICB3ZWlnaHQKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OnBhbmVkd2luZG93Iiwga3cpCisKKworICAgIGZvcmdldCA9IFRraW50ZXIuUGFuZWRXaW5kb3cuZm9yZ2V0ICMgb3ZlcnJpZGVzIFBhY2suZm9yZ2V0CisKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgcG9zLCBjaGlsZCwgKiprdyk6CisgICAgICAgICIiIkluc2VydHMgYSBwYW5lIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb25zLgorCisgICAgICAgIHBvcyBpcyBlaXRoZXIgdGhlIHN0cmluZyBlbmQsIGFuZCBpbnRlZ2VyIGluZGV4LCBvciB0aGUgbmFtZQorICAgICAgICBvZiBhIGNoaWxkLiBJZiBjaGlsZCBpcyBhbHJlYWR5IG1hbmFnZWQgYnkgdGhlIHBhbmVkIHdpbmRvdywKKyAgICAgICAgbW92ZXMgaXQgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJpbnNlcnQiLCBwb3MsIGNoaWxkLCAqKF9mb3JtYXRfb3B0ZGljdChrdykpKQorCisKKyAgICBkZWYgcGFuZShzZWxmLCBwYW5lLCBvcHRpb249Tm9uZSwgKiprdyk6CisgICAgICAgICIiIlF1ZXJ5IG9yIG1vZGlmeSB0aGUgb3B0aW9ucyBvZiB0aGUgc3BlY2lmaWVkIHBhbmUuCisKKyAgICAgICAgcGFuZSBpcyBlaXRoZXIgYW4gaW50ZWdlciBpbmRleCBvciB0aGUgbmFtZSBvZiBhIG1hbmFnZWQgc3Vid2luZG93LgorICAgICAgICBJZiBrdyBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSBwYW5lIG9wdGlvbiB2YWx1ZXMuIElmCisgICAgICAgIG9wdGlvbiBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGlzIHJldHVybmVkLgorICAgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvZGluZyB2YWx1ZXMuIiIiCisgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInBhbmUiLCBwYW5lKQorCisKKyAgICBkZWYgc2FzaHBvcyhzZWxmLCBpbmRleCwgbmV3cG9zPU5vbmUpOgorICAgICAgICAiIiJJZiBuZXdwb3MgaXMgc3BlY2lmaWVkLCBzZXRzIHRoZSBwb3NpdGlvbiBvZiBzYXNoIG51bWJlciBpbmRleC4KKworICAgICAgICBNYXkgYWRqdXN0IHRoZSBwb3NpdGlvbnMgb2YgYWRqYWNlbnQgc2FzaGVzIHRvIGVuc3VyZSB0aGF0CisgICAgICAgIHBvc2l0aW9ucyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLiBTYXNoIHBvc2l0aW9ucyBhcmUgZnVydGhlcgorICAgICAgICBjb25zdHJhaW5lZCB0byBiZSBiZXR3ZWVuIDAgYW5kIHRoZSB0b3RhbCBzaXplIG9mIHRoZSB3aWRnZXQuCisKKyAgICAgICAgUmV0dXJucyB0aGUgbmV3IHBvc2l0aW9uIG9mIHNhc2ggbnVtYmVyIGluZGV4LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJzYXNocG9zIiwgaW5kZXgsIG5ld3BvcykKKworUGFuZWRXaW5kb3cgPSBQYW5lZHdpbmRvdyAjIFRraW50ZXIgbmFtZSBjb21wYXRpYmlsaXR5CisKKworY2xhc3MgUHJvZ3Jlc3NiYXIoV2lkZ2V0KToKKyAgICAiIiJUdGsgUHJvZ3Jlc3NiYXIgd2lkZ2V0IHNob3dzIHRoZSBzdGF0dXMgb2YgYSBsb25nLXJ1bm5pbmcKKyAgICBvcGVyYXRpb24uIFRoZXkgY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzOiBkZXRlcm1pbmF0ZSBtb2RlIHNob3dzIHRoZQorICAgIGFtb3VudCBjb21wbGV0ZWQgcmVsYXRpdmUgdG8gdGhlIHRvdGFsIGFtb3VudCBvZiB3b3JrIHRvIGJlIGRvbmUsIGFuZAorICAgIGluZGV0ZXJtaW5hdGUgbW9kZSBwcm92aWRlcyBhbiBhbmltYXRlZCBkaXNwbGF5IHRvIGxldCB0aGUgdXNlciBrbm93CisgICAgdGhhdCBzb21ldGhpbmcgaXMgaGFwcGVuaW5nLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFByb2dyZXNzYmFyIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBvcmllbnQsIGxlbmd0aCwgbW9kZSwgbWF4aW11bSwgdmFsdWUsIHZhcmlhYmxlLCBwaGFzZQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6cHJvZ3Jlc3NiYXIiLCBrdykKKworCisgICAgZGVmIHN0YXJ0KHNlbGYsIGludGVydmFsPU5vbmUpOgorICAgICAgICAiIiJCZWdpbiBhdXRvaW5jcmVtZW50IG1vZGU6IHNjaGVkdWxlcyBhIHJlY3VycmluZyB0aW1lciBldmVudAorICAgICAgICB0aGF0IGNhbGxzIG1ldGhvZCBzdGVwIGV2ZXJ5IGludGVydmFsIG1pbGxpc2Vjb25kcy4KKworICAgICAgICBpbnRlcnZhbCBkZWZhdWx0cyB0byA1MCBtaWxsaXNlY29uZHMgKDIwIHN0ZXBzL3NlY29uZCkgaWYgb21taXRlZC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJzdGFydCIsIGludGVydmFsKQorCisKKyAgICBkZWYgc3RlcChzZWxmLCBhbW91bnQ9Tm9uZSk6CisgICAgICAgICIiIkluY3JlbWVudHMgdGhlIHZhbHVlIG9wdGlvbiBieSBhbW91bnQuCisKKyAgICAgICAgYW1vdW50IGRlZmF1bHRzIHRvIDEuMCBpZiBvbWl0dGVkLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInN0ZXAiLCBhbW91bnQpCisKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIGF1dG9pbmNyZW1lbnQgbW9kZTogY2FuY2VscyBhbnkgcmVjdXJyaW5nIHRpbWVyIGV2ZW50CisgICAgICAgIGluaXRpYXRlZCBieSBzdGFydC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJzdG9wIikKKworCitjbGFzcyBSYWRpb2J1dHRvbihXaWRnZXQpOgorICAgICIiIlR0ayBSYWRpb2J1dHRvbiB3aWRnZXRzIGFyZSB1c2VkIGluIGdyb3VwcyB0byBzaG93IG9yIGNoYW5nZSBhCisgICAgc2V0IG9mIG11dHVhbGx5LWV4Y2x1c2l2ZSBvcHRpb25zLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFJhZGlvYnV0dG9uIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjb21wb3VuZCwgY3Vyc29yLCBpbWFnZSwgc3RhdGUsIHN0eWxlLCB0YWtlZm9jdXMsCisgICAgICAgICAgICB0ZXh0LCB0ZXh0dmFyaWFibGUsIHVuZGVybGluZSwgd2lkdGgKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb21tYW5kLCB2YWx1ZSwgdmFyaWFibGUKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OnJhZGlvYnV0dG9uIiwga3cpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZik6CisgICAgICAgICIiIlNldHMgdGhlIG9wdGlvbiB2YXJpYWJsZSB0byB0aGUgb3B0aW9uIHZhbHVlLCBzZWxlY3RzIHRoZQorICAgICAgICB3aWRnZXQsIGFuZCBpbnZva2VzIHRoZSBhc3NvY2lhdGVkIGNvbW1hbmQuCisKKyAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYKKyAgICAgICAgbm8gY29tbWFuZCBpcyBzcGVjaWZpZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImludm9rZSIpCisKKworY2xhc3MgU2NhbGUoV2lkZ2V0LCBUa2ludGVyLlNjYWxlKToKKyAgICAiIiJUdGsgU2NhbGUgd2lkZ2V0IGlzIHR5cGljYWxseSB1c2VkIHRvIGNvbnRyb2wgdGhlIG51bWVyaWMgdmFsdWUgb2YKKyAgICBhIGxpbmtlZCB2YXJpYWJsZSB0aGF0IHZhcmllcyB1bmlmb3JtbHkgb3ZlciBzb21lIHJhbmdlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFNjYWxlIHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb21tYW5kLCBmcm9tLCBsZW5ndGgsIG9yaWVudCwgdG8sIHZhbHVlLCB2YXJpYWJsZQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6c2NhbGUiLCBrdykKKworCisgICAgZGVmIGNvbmZpZ3VyZShzZWxmLCBjbmY9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIk1vZGlmeSBvciBxdWVyeSBzY2FsZSBvcHRpb25zLgorCisgICAgICAgIFNldHRpbmcgYSB2YWx1ZSBmb3IgYW55IG9mIHRoZSAiZnJvbSIsICJmcm9tXyIgb3IgInRvIiBvcHRpb25zCisgICAgICAgIGdlbmVyYXRlcyBhIDw8UmFuZ2VDaGFuZ2VkPj4gZXZlbnQuIiIiCisgICAgICAgIGlmIGNuZjoKKyAgICAgICAgICAgIGt3LnVwZGF0ZShjbmYpCisgICAgICAgIFdpZGdldC5jb25maWd1cmUoc2VsZiwgKiprdykKKyAgICAgICAgaWYgYW55KFsnZnJvbScgaW4ga3csICdmcm9tXycgaW4ga3csICd0bycgaW4ga3ddKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRfZ2VuZXJhdGUoJzw8UmFuZ2VDaGFuZ2VkPj4nKQorCisKKyAgICBkZWYgZ2V0KHNlbGYsIHg9Tm9uZSwgeT1Ob25lKToKKyAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB2YWx1ZSBvcHRpb24sIG9yIHRoZSB2YWx1ZQorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb29yZGluYXRlcyB4LCB5IGlmIHRoZXkgYXJlIHNwZWNpZmllZC4KKworICAgICAgICB4IGFuZCB5IGFyZSBwaXhlbCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgc2NhbGUgd2lkZ2V0CisgICAgICAgIG9yaWdpbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnZ2V0JywgeCwgeSkKKworCitjbGFzcyBTY3JvbGxiYXIoV2lkZ2V0LCBUa2ludGVyLlNjcm9sbGJhcik6CisgICAgIiIiVHRrIFNjcm9sbGJhciBjb250cm9scyB0aGUgdmlld3BvcnQgb2YgYSBzY3JvbGxhYmxlIHdpZGdldC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBTY3JvbGxiYXIgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIGNvbW1hbmQsIG9yaWVudAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6c2Nyb2xsYmFyIiwga3cpCisKKworY2xhc3MgU2VwYXJhdG9yKFdpZGdldCk6CisgICAgIiIiVHRrIFNlcGFyYXRvciB3aWRnZXQgZGlzcGxheXMgYSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHNlcGFyYXRvcgorICAgIGJhci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFR0ayBTZXBhcmF0b3Igd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3R5bGUsIHRha2Vmb2N1cworCisgICAgICAgIFdJREdFVC1TUEVDSUZJQyBPUFRJT05TCisKKyAgICAgICAgICAgIG9yaWVudAorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6c2VwYXJhdG9yIiwga3cpCisKKworY2xhc3MgU2l6ZWdyaXAoV2lkZ2V0KToKKyAgICAiIiJUdGsgU2l6ZWdyaXAgYWxsb3dzIHRoZSB1c2VyIHRvIHJlc2l6ZSB0aGUgY29udGFpbmluZyB0b3BsZXZlbAorICAgIHdpbmRvdyBieSBwcmVzc2luZyBhbmQgZHJhZ2dpbmcgdGhlIGdyaXAuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUdGsgU2l6ZWdyaXAgd2l0aCBwYXJlbnQgbWFzdGVyLgorCisgICAgICAgIFNUQU5EQVJEIE9QVElPTlMKKworICAgICAgICAgICAgY2xhc3MsIGN1cnNvciwgc3RhdGUsIHN0eWxlLCB0YWtlZm9jdXMKKyAgICAgICAgIiIiCisgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICJ0dGs6OnNpemVncmlwIiwga3cpCisKKworY2xhc3MgVHJlZXZpZXcoV2lkZ2V0LCBUa2ludGVyLlhWaWV3LCBUa2ludGVyLllWaWV3KToKKyAgICAiIiJUdGsgVHJlZXZpZXcgd2lkZ2V0IGRpc3BsYXlzIGEgaGllcmFyY2hpY2FsIGNvbGxlY3Rpb24gb2YgaXRlbXMuCisKKyAgICBFYWNoIGl0ZW0gaGFzIGEgdGV4dHVhbCBsYWJlbCwgYW4gb3B0aW9uYWwgaW1hZ2UsIGFuZCBhbiBvcHRpb25hbCBsaXN0CisgICAgb2YgZGF0YSB2YWx1ZXMuIFRoZSBkYXRhIHZhbHVlcyBhcmUgZGlzcGxheWVkIGluIHN1Y2Nlc3NpdmUgY29sdW1ucworICAgIGFmdGVyIHRoZSB0cmVlIGxhYmVsLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgVHRrIFRyZWV2aWV3IHdpdGggcGFyZW50IG1hc3Rlci4KKworICAgICAgICBTVEFOREFSRCBPUFRJT05TCisKKyAgICAgICAgICAgIGNsYXNzLCBjdXJzb3IsIHN0eWxlLCB0YWtlZm9jdXMsIHhzY3JvbGxjb21tYW5kLAorICAgICAgICAgICAgeXNjcm9sbGNvbW1hbmQKKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb2x1bW5zLCBkaXNwbGF5Y29sdW1ucywgaGVpZ2h0LCBwYWRkaW5nLCBzZWxlY3Rtb2RlLCBzaG93CisKKyAgICAgICAgSVRFTSBPUFRJT05TCisKKyAgICAgICAgICAgIHRleHQsIGltYWdlLCB2YWx1ZXMsIG9wZW4sIHRhZ3MKKworICAgICAgICBUQUcgT1BUSU9OUworCisgICAgICAgICAgICBmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kLCBmb250LCBpbWFnZQorICAgICAgICAiIiIKKyAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgInR0azo6dHJlZXZpZXciLCBrdykKKworCisgICAgZGVmIGJib3goc2VsZiwgaXRlbSwgY29sdW1uPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggKHJlbGF0aXZlIHRvIHRoZSB0cmVldmlldyB3aWRnZXQncworICAgICAgICB3aW5kb3cpIG9mIHRoZSBzcGVjaWZpZWQgaXRlbSBpbiB0aGUgZm9ybSB4IHkgd2lkdGggaGVpZ2h0LgorCisgICAgICAgIElmIGNvbHVtbiBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGF0IGNlbGwuCisgICAgICAgIElmIHRoZSBpdGVtIGlzIG5vdCB2aXNpYmxlIChpLmUuLCBpZiBpdCBpcyBhIGRlc2NlbmRhbnQgb2YgYQorICAgICAgICBjbG9zZWQgaXRlbSBvciBpcyBzY3JvbGxlZCBvZmZzY3JlZW4pLCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAiYmJveCIsIGl0ZW0sIGNvbHVtbikKKworCisgICAgZGVmIGdldF9jaGlsZHJlbihzZWxmLCBpdGVtPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgdHVwbGUgb2YgY2hpbGRyZW4gYmVsb25naW5nIHRvIGl0ZW0uCisKKyAgICAgICAgSWYgaXRlbSBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHJvb3QgY2hpbGRyZW4uIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImNoaWxkcmVuIiwgaXRlbSBvciAnJykgb3IgKCkKKworCisgICAgZGVmIHNldF9jaGlsZHJlbihzZWxmLCBpdGVtLCAqbmV3Y2hpbGRyZW4pOgorICAgICAgICAiIiJSZXBsYWNlcyBpdGVtJ3MgY2hpbGQgd2l0aCBuZXdjaGlsZHJlbi4KKworICAgICAgICBDaGlsZHJlbiBwcmVzZW50IGluIGl0ZW0gdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gbmV3Y2hpbGRyZW4KKyAgICAgICAgYXJlIGRldGFjaGVkIGZyb20gdHJlZS4gTm8gaXRlbXMgaW4gbmV3Y2hpbGRyZW4gbWF5IGJlIGFuCisgICAgICAgIGFuY2VzdG9yIG9mIGl0ZW0uIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAiY2hpbGRyZW4iLCBpdGVtLCBuZXdjaGlsZHJlbikKKworCisgICAgZGVmIGNvbHVtbihzZWxmLCBjb2x1bW4sIG9wdGlvbj1Ob25lLCAqKmt3KToKKyAgICAgICAgIiIiUXVlcnkgb3IgbW9kaWZ5IHRoZSBvcHRpb25zIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbi4KKworICAgICAgICBJZiBrdyBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSBjb2x1bW4gb3B0aW9uIHZhbHVlcy4gSWYKKyAgICAgICAgb3B0aW9uIGlzIHNwZWNpZmllZCB0aGVuIHRoZSB2YWx1ZSBmb3IgdGhhdCBvcHRpb24gaXMgcmV0dXJuZWQuCisgICAgICAgIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCisgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgImNvbHVtbiIsIGNvbHVtbikKKworCisgICAgZGVmIGRlbGV0ZShzZWxmLCAqaXRlbXMpOgorICAgICAgICAiIiJEZWxldGUgYWxsIHNwZWNpZmllZCBpdGVtcyBhbmQgYWxsIHRoZWlyIGRlc2NlbmRhbnRzLiBUaGUgcm9vdAorICAgICAgICBpdGVtIG1heSBub3QgYmUgZGVsZXRlZC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJkZWxldGUiLCBpdGVtcykKKworCisgICAgZGVmIGRldGFjaChzZWxmLCAqaXRlbXMpOgorICAgICAgICAiIiJVbmxpbmtzIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGl0ZW1zIGZyb20gdGhlIHRyZWUuCisKKyAgICAgICAgVGhlIGl0ZW1zIGFuZCBhbGwgb2YgdGhlaXIgZGVzY2VuZGFudHMgYXJlIHN0aWxsIHByZXNlbnQsIGFuZCBtYXkKKyAgICAgICAgYmUgcmVpbnNlcnRlZCBhdCBhbm90aGVyIHBvaW50IGluIHRoZSB0cmVlLCBidXQgd2lsbCBub3QgYmUKKyAgICAgICAgZGlzcGxheWVkLiBUaGUgcm9vdCBpdGVtIG1heSBub3QgYmUgZGV0YWNoZWQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAiZGV0YWNoIiwgaXRlbXMpCisKKworICAgIGRlZiBleGlzdHMoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGl0ZW0gaXMgcHJlc2VudCBpbiB0aGUgdGhyZWUsCisgICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICAgICAgcmV0dXJuIGJvb2woc2VsZi50ay5jYWxsKHNlbGYuX3csICJleGlzdHMiLCBpdGVtKSkKKworCisgICAgZGVmIGZvY3VzKHNlbGYsIGl0ZW09Tm9uZSk6CisgICAgICAgICIiIklmIGl0ZW0gaXMgc3BlY2lmaWVkLCBzZXRzIHRoZSBmb2N1cyBpdGVtIHRvIGl0ZW0uIE90aGVyd2lzZSwKKyAgICAgICAgcmV0dXJucyB0aGUgY3VycmVudCBmb2N1cyBpdGVtLCBvciAnJyBpZiB0aGVyZSBpcyBub25lLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJmb2N1cyIsIGl0ZW0pCisKKworICAgIGRlZiBoZWFkaW5nKHNlbGYsIGNvbHVtbiwgb3B0aW9uPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdGhlIGhlYWRpbmcgb3B0aW9ucyBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4uCisKKyAgICAgICAgSWYga3cgaXMgbm90IGdpdmVuLCByZXR1cm5zIGEgZGljdCBvZiB0aGUgaGVhZGluZyBvcHRpb24gdmFsdWVzLiBJZgorICAgICAgICBvcHRpb24gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbiBpcyByZXR1cm5lZC4KKyAgICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4KKworICAgICAgICBWYWxpZCBvcHRpb25zL3ZhbHVlcyBhcmU6CisgICAgICAgICAgICB0ZXh0OiB0ZXh0CisgICAgICAgICAgICAgICAgVGhlIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgY29sdW1uIGhlYWRpbmcKKyAgICAgICAgICAgIGltYWdlOiBpbWFnZV9uYW1lCisgICAgICAgICAgICAgICAgU3BlY2lmaWVzIGFuIGltYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjb2x1bW4KKyAgICAgICAgICAgICAgICBoZWFkaW5nCisgICAgICAgICAgICBhbmNob3I6IGFuY2hvcgorICAgICAgICAgICAgICAgIFNwZWNpZmllcyBob3cgdGhlIGhlYWRpbmcgdGV4dCBzaG91bGQgYmUgYWxpZ25lZC4gT25lIG9mCisgICAgICAgICAgICAgICAgdGhlIHN0YW5kYXJkIFRrIGFuY2hvciB2YWx1ZXMKKyAgICAgICAgICAgIGNvbW1hbmQ6IGNhbGxiYWNrCisgICAgICAgICAgICAgICAgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGhlYWRpbmcgbGFiZWwgaXMKKyAgICAgICAgICAgICAgICBwcmVzc2VkLgorCisgICAgICAgIFRvIGNvbmZpZ3VyZSB0aGUgdHJlZSBjb2x1bW4gaGVhZGluZywgY2FsbCB0aGlzIHdpdGggY29sdW1uID0gIiMwIiAiIiIKKyAgICAgICAgY21kID0ga3cuZ2V0KCdjb21tYW5kJykKKyAgICAgICAgaWYgY21kIGFuZCBub3QgaXNpbnN0YW5jZShjbWQsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgIyBjYWxsYmFjayBub3QgcmVnaXN0ZXJlZCB5ZXQsIGRvIGl0IG5vdworICAgICAgICAgICAga3dbJ2NvbW1hbmQnXSA9IHNlbGYubWFzdGVyLnJlZ2lzdGVyKGNtZCwgc2VsZi5fc3Vic3RpdHV0ZSkKKworICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQorCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgJ2hlYWRpbmcnLCBjb2x1bW4pCisKKworICAgIGRlZiBpZGVudGlmeShzZWxmLCBjb21wb25lbnQsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWNpZmllZCBjb21wb25lbnQgdW5kZXIgdGhlCisgICAgICAgIHBvaW50IGdpdmVuIGJ5IHggYW5kIHksIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm8gc3VjaCBjb21wb25lbnQKKyAgICAgICAgaXMgcHJlc2VudCBhdCB0aGF0IHBvc2l0aW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJpZGVudGlmeSIsIGNvbXBvbmVudCwgeCwgeSkKKworCisgICAgZGVmIGlkZW50aWZ5X3JvdyhzZWxmLCB5KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaXRlbSBJRCBvZiB0aGUgaXRlbSBhdCBwb3NpdGlvbiB5LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5pZGVudGlmeSgicm93IiwgMCwgeSkKKworCisgICAgZGVmIGlkZW50aWZ5X2NvbHVtbihzZWxmLCB4KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZGF0YSBjb2x1bW4gaWRlbnRpZmllciBvZiB0aGUgY2VsbCBhdCBwb3NpdGlvbiB4LgorCisgICAgICAgIFRoZSB0cmVlIGNvbHVtbiBoYXMgSUQgIzAuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZ5KCJjb2x1bW4iLCB4LCAwKQorCisKKyAgICBkZWYgaWRlbnRpZnlfcmVnaW9uKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJSZXR1cm5zIG9uZSBvZjoKKworICAgICAgICBoZWFkaW5nOiBUcmVlIGhlYWRpbmcgYXJlYS4KKyAgICAgICAgc2VwYXJhdG9yOiBTcGFjZSBiZXR3ZWVuIHR3byBjb2x1bW5zIGhlYWRpbmdzOworICAgICAgICB0cmVlOiBUaGUgdHJlZSBhcmVhLgorICAgICAgICBjZWxsOiBBIGRhdGEgY2VsbC4KKworICAgICAgICAqIEF2YWlsYWJpbGl0eTogVGsgOC42IiIiCisgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZ5KCJyZWdpb24iLCB4LCB5KQorCisKKyAgICBkZWYgaWRlbnRpZnlfZWxlbWVudChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZWxlbWVudCBhdCBwb3NpdGlvbiB4LCB5LgorCisgICAgICAgICogQXZhaWxhYmlsaXR5OiBUayA4LjYiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaWRlbnRpZnkoImVsZW1lbnQiLCB4LCB5KQorCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGludGVnZXIgaW5kZXggb2YgaXRlbSB3aXRoaW4gaXRzIHBhcmVudCdzIGxpc3QKKyAgICAgICAgb2YgY2hpbGRyZW4uIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluZGV4IiwgaXRlbSkKKworCisgICAgZGVmIGluc2VydChzZWxmLCBwYXJlbnQsIGluZGV4LCBpaWQ9Tm9uZSwgKiprdyk6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgaXRlbSBhbmQgcmV0dXJuIHRoZSBpdGVtIGlkZW50aWZpZXIgb2YgdGhlIG5ld2x5CisgICAgICAgIGNyZWF0ZWQgaXRlbS4KKworICAgICAgICBwYXJlbnQgaXMgdGhlIGl0ZW0gSUQgb2YgdGhlIHBhcmVudCBpdGVtLCBvciB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgIHRvIGNyZWF0ZSBhIG5ldyB0b3AtbGV2ZWwgaXRlbS4gaW5kZXggaXMgYW4gaW50ZWdlciwgb3IgdGhlIHZhbHVlCisgICAgICAgIGVuZCwgc3BlY2lmeWluZyB3aGVyZSBpbiB0aGUgbGlzdCBvZiBwYXJlbnQncyBjaGlsZHJlbiB0byBpbnNlcnQKKyAgICAgICAgdGhlIG5ldyBpdGVtLiBJZiBpbmRleCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhlIG5ldyBub2RlCisgICAgICAgIGlzIGluc2VydGVkIGF0IHRoZSBiZWdpbm5pbmcsIGlmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bworICAgICAgICB0aGUgY3VycmVudCBudW1iZXIgb2YgY2hpbGRyZW4sIGl0IGlzIGluc2VydGVkIGF0IHRoZSBlbmQuIElmIGlpZAorICAgICAgICBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgYXMgdGhlIGl0ZW0gaWRlbnRpZmllciwgaWlkIG11c3Qgbm90CisgICAgICAgIGFscmVhZHkgZXhpc3QgaW4gdGhlIHRyZWUuIE90aGVyd2lzZSwgYSBuZXcgdW5pcXVlIGlkZW50aWZpZXIKKyAgICAgICAgaXMgZ2VuZXJhdGVkLiIiIgorICAgICAgICBvcHRzID0gX2Zvcm1hdF9vcHRkaWN0KGt3KQorICAgICAgICBpZiBpaWQ6CisgICAgICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluc2VydCIsIHBhcmVudCwgaW5kZXgsCisgICAgICAgICAgICAgICAgIi1pZCIsIGlpZCwgKm9wdHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgImluc2VydCIsIHBhcmVudCwgaW5kZXgsICpvcHRzKQorCisgICAgICAgIHJldHVybiByZXMKKworCisgICAgZGVmIGl0ZW0oc2VsZiwgaXRlbSwgb3B0aW9uPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbS4KKworICAgICAgICBJZiBubyBvcHRpb25zIGFyZSBnaXZlbiwgYSBkaWN0IHdpdGggb3B0aW9ucy92YWx1ZXMgZm9yIHRoZSBpdGVtCisgICAgICAgIGlzIHJldHVybmVkLiBJZiBvcHRpb24gaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbgorICAgICAgICBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgIHZhbHVlcyBhcyBnaXZlbiBieSBrdy4iIiIKKyAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAiaXRlbSIsIGl0ZW0pCisKKworICAgIGRlZiBtb3ZlKHNlbGYsIGl0ZW0sIHBhcmVudCwgaW5kZXgpOgorICAgICAgICAiIiJNb3ZlcyBpdGVtIHRvIHBvc2l0aW9uIGluZGV4IGluIHBhcmVudCdzIGxpc3Qgb2YgY2hpbGRyZW4uCisKKyAgICAgICAgSXQgaXMgaWxsZWdhbCB0byBtb3ZlIGFuIGl0ZW0gdW5kZXIgb25lIG9mIGl0cyBkZXNjZW5kYW50cy4gSWYKKyAgICAgICAgaW5kZXggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0ZW0gaXMgbW92ZWQgdG8gdGhlCisgICAgICAgIGJlZ2lubmluZywgaWYgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4sCisgICAgICAgIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQuIElmIGl0ZW0gd2FzIGRldGFjaGVkIGl0IGlzIHJlYXR0YWNoZWQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAibW92ZSIsIGl0ZW0sIHBhcmVudCwgaW5kZXgpCisKKyAgICByZWF0dGFjaCA9IG1vdmUgIyBBIHNlbnNpYmxlIG1ldGhvZCBuYW1lIGZvciByZWF0dGFjaGluZyBkZXRhY2hlZCBpdGVtcworCisKKyAgICBkZWYgbmV4dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiBpdGVtJ3MgbmV4dCBzaWJsaW5nLCBvciAnJyBpZiBpdGVtCisgICAgICAgIGlzIHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgIm5leHQiLCBpdGVtKQorCisKKyAgICBkZWYgcGFyZW50KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBJRCBvZiB0aGUgcGFyZW50IG9mIGl0ZW0sIG9yICcnIGlmIGl0ZW0gaXMgYXQgdGhlCisgICAgICAgIHRvcCBsZXZlbCBvZiB0aGUgaGllcmFyY2h5LiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJwYXJlbnQiLCBpdGVtKQorCisKKyAgICBkZWYgcHJldihzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaWRlbnRpZmllciBvZiBpdGVtJ3MgcHJldmlvdXMgc2libGluZywgb3IgJycgaWYKKyAgICAgICAgaXRlbSBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAicHJldiIsIGl0ZW0pCisKKworICAgIGRlZiBzZWUoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIkVuc3VyZSB0aGF0IGl0ZW0gaXMgdmlzaWJsZS4KKworICAgICAgICBTZXRzIGFsbCBvZiBpdGVtJ3MgYW5jZXN0b3JzIG9wZW4gb3B0aW9uIHRvIFRydWUsIGFuZCBzY3JvbGxzCisgICAgICAgIHRoZSB3aWRnZXQgaWYgbmVjZXNzYXJ5IHNvIHRoYXQgaXRlbSBpcyB3aXRoaW4gdGhlIHZpc2libGUKKyAgICAgICAgcG9ydGlvbiBvZiB0aGUgdHJlZS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJzZWUiLCBpdGVtKQorCisKKyAgICBkZWYgc2VsZWN0aW9uKHNlbGYsIHNlbG9wPU5vbmUsIGl0ZW1zPU5vbmUpOgorICAgICAgICAiIiJJZiBzZWxvcCBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHNlbGVjdGVkIGl0ZW1zLiIiIgorICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJzZWxlY3Rpb24iLCBzZWxvcCwgaXRlbXMpCisKKworICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIiIiaXRlbXMgYmVjb21lcyB0aGUgbmV3IHNlbGVjdGlvbi4iIiIKKyAgICAgICAgc2VsZi5zZWxlY3Rpb24oInNldCIsIGl0ZW1zKQorCisKKyAgICBkZWYgc2VsZWN0aW9uX2FkZChzZWxmLCBpdGVtcyk6CisgICAgICAgICIiIkFkZCBpdGVtcyB0byB0aGUgc2VsZWN0aW9uLiIiIgorICAgICAgICBzZWxmLnNlbGVjdGlvbigiYWRkIiwgaXRlbXMpCisKKworICAgIGRlZiBzZWxlY3Rpb25fcmVtb3ZlKHNlbGYsIGl0ZW1zKToKKyAgICAgICAgIiIiUmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNlbGVjdGlvbi4iIiIKKyAgICAgICAgc2VsZi5zZWxlY3Rpb24oInJlbW92ZSIsIGl0ZW1zKQorCisKKyAgICBkZWYgc2VsZWN0aW9uX3RvZ2dsZShzZWxmLCBpdGVtcyk6CisgICAgICAgICIiIlRvZ2dsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIGVhY2ggaXRlbSBpbiBpdGVtcy4iIiIKKyAgICAgICAgc2VsZi5zZWxlY3Rpb24oInRvZ2dsZSIsIGl0ZW1zKQorCisKKyAgICBkZWYgc2V0KHNlbGYsIGl0ZW0sIGNvbHVtbj1Ob25lLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgIiIiV2l0aCBvbmUgYXJndW1lbnQsIHJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGNvbHVtbi92YWx1ZSBwYWlycworICAgICAgICBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBXaXRoIHR3byBhcmd1bWVudHMsIHJldHVybnMgdGhlIGN1cnJlbnQKKyAgICAgICAgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBjb2x1bW4uIFdpdGggdGhyZWUgYXJndW1lbnRzLCBzZXRzIHRoZQorICAgICAgICB2YWx1ZSBvZiBnaXZlbiBjb2x1bW4gaW4gZ2l2ZW4gaXRlbSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiIiIgorICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNldCIsIGl0ZW0sIGNvbHVtbiwgdmFsdWUpCisgICAgICAgIGlmIGNvbHVtbiBpcyBOb25lIGFuZCB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUocmVzLCBGYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByZXMKKworCisgICAgZGVmIHRhZ19iaW5kKHNlbGYsIHRhZ25hbWUsIHNlcXVlbmNlPU5vbmUsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICAiIiJCaW5kIGEgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiBldmVudCBzZXF1ZW5jZSB0byB0aGUgdGFnIHRhZ25hbWUuCisgICAgICAgIFdoZW4gYW4gZXZlbnQgaXMgZGVsaXZlcmVkIHRvIGFuIGl0ZW0sIHRoZSBjYWxsYmFja3MgZm9yIGVhY2gKKyAgICAgICAgb2YgdGhlIGl0ZW0ncyB0YWdzIG9wdGlvbiBhcmUgY2FsbGVkLiIiIgorICAgICAgICBzZWxmLl9iaW5kKChzZWxmLl93LCAidGFnIiwgImJpbmQiLCB0YWduYW1lKSwgc2VxdWVuY2UsIGNhbGxiYWNrLCBhZGQ9MCkKKworCisgICAgZGVmIHRhZ19jb25maWd1cmUoc2VsZiwgdGFnbmFtZSwgb3B0aW9uPU5vbmUsICoqa3cpOgorICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdGhlIG9wdGlvbnMgZm9yIHRoZSBzcGVjaWZpZWQgdGFnbmFtZS4KKworICAgICAgICBJZiBrdyBpcyBub3QgZ2l2ZW4sIHJldHVybnMgYSBkaWN0IG9mIHRoZSBvcHRpb24gc2V0dGluZ3MgZm9yIHRhZ25hbWUuCisgICAgICAgIElmIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHJldHVybnMgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbiBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCB0YWduYW1lLiBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFnbmFtZS4iIiIKKyAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAidGFnIiwgImNvbmZpZ3VyZSIsCisgICAgICAgICAgICB0YWduYW1lKQorCisKKyAgICBkZWYgdGFnX2hhcyhzZWxmLCB0YWduYW1lLCBpdGVtPU5vbmUpOgorICAgICAgICAiIiJJZiBpdGVtIGlzIHNwZWNpZmllZCwgcmV0dXJucyAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCisgICAgICAgIHNwZWNpZmllZCBpdGVtIGhhcyB0aGUgZ2l2ZW4gdGFnbmFtZS4gT3RoZXJ3aXNlLCByZXR1cm5zIGEgbGlzdCBvZgorICAgICAgICBhbGwgaXRlbXMgd2hpY2ggaGF2ZSB0aGUgc3BlY2lmaWVkIHRhZy4KKworICAgICAgICAqIEF2YWlsYWJpbGl0eTogVGsgOC42IiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInRhZyIsICJoYXMiLCB0YWduYW1lLCBpdGVtKQorCisKKyMgRXh0ZW5zaW9ucworCitjbGFzcyBMYWJlbGVkU2NhbGUoRnJhbWUsIG9iamVjdCk6CisgICAgIiIiQSBUdGsgU2NhbGUgd2lkZ2V0IHdpdGggYSBUdGsgTGFiZWwgd2lkZ2V0IGluZGljYXRpbmcgaXRzCisgICAgY3VycmVudCB2YWx1ZS4KKworICAgIFRoZSBUdGsgU2NhbGUgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggaW5zdGFuY2Uuc2NhbGUsIGFuZCBUdGsgTGFiZWwKKyAgICBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBpbnN0YW5jZS5sYWJlbCIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB2YXJpYWJsZT1Ob25lLCBmcm9tXz0wLCB0bz0xMCwgKiprdyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBob3Jpem9udGFsIExhYmVsZWRTY2FsZSB3aXRoIHBhcmVudCBtYXN0ZXIsIGEKKyAgICAgICAgdmFyaWFibGUgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBUdGsgU2NhbGUgd2lkZ2V0IGFuZCBpdHMgcmFuZ2UuCisgICAgICAgIElmIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGEgVGtpbnRlci5JbnRWYXIgaXMgY3JlYXRlZC4KKworICAgICAgICBXSURHRVQtU1BFQ0lGSUMgT1BUSU9OUworCisgICAgICAgICAgICBjb21wb3VuZDogJ3RvcCcgb3IgJ2JvdHRvbScKKyAgICAgICAgICAgICAgICBTcGVjaWZpZXMgaG93IHRvIGRpc3BsYXkgdGhlIGxhYmVsIHJlbGF0aXZlIHRvIHRoZSBzY2FsZS4KKyAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byAndG9wJy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2xhYmVsX3RvcCA9IGt3LnBvcCgnY29tcG91bmQnLCAndG9wJykgPT0gJ3RvcCcKKworICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqa3cpCisgICAgICAgIHNlbGYuX3ZhcmlhYmxlID0gdmFyaWFibGUgb3IgVGtpbnRlci5JbnRWYXIobWFzdGVyKQorICAgICAgICBzZWxmLl92YXJpYWJsZS5zZXQoZnJvbV8pCisgICAgICAgIHNlbGYuX2xhc3RfdmFsaWQgPSBmcm9tXworCisgICAgICAgIHNlbGYubGFiZWwgPSBMYWJlbChzZWxmKQorICAgICAgICBzZWxmLnNjYWxlID0gU2NhbGUoc2VsZiwgdmFyaWFibGU9c2VsZi5fdmFyaWFibGUsIGZyb21fPWZyb21fLCB0bz10bykKKyAgICAgICAgc2VsZi5zY2FsZS5iaW5kKCc8PFJhbmdlQ2hhbmdlZD4+Jywgc2VsZi5fYWRqdXN0KQorCisgICAgICAgICMgcG9zaXRpb24gc2NhbGUgYW5kIGxhYmVsIGFjY29yZGluZyB0byB0aGUgY29tcG91bmQgb3B0aW9uCisgICAgICAgIHNjYWxlX3NpZGUgPSAnYm90dG9tJyBpZiBzZWxmLl9sYWJlbF90b3AgZWxzZSAndG9wJworICAgICAgICBsYWJlbF9zaWRlID0gJ3RvcCcgaWYgc2NhbGVfc2lkZSA9PSAnYm90dG9tJyBlbHNlICdib3R0b20nCisgICAgICAgIHNlbGYuc2NhbGUucGFjayhzaWRlPXNjYWxlX3NpZGUsIGZpbGw9J3gnKQorICAgICAgICB0bXAgPSBMYWJlbChzZWxmKS5wYWNrKHNpZGU9bGFiZWxfc2lkZSkgIyBwbGFjZSBob2xkZXIKKyAgICAgICAgc2VsZi5sYWJlbC5wbGFjZShhbmNob3I9J24nIGlmIGxhYmVsX3NpZGUgPT0gJ3RvcCcgZWxzZSAncycpCisKKyAgICAgICAgIyB1cGRhdGUgdGhlIGxhYmVsIGFzIHNjYWxlIG9yIHZhcmlhYmxlIGNoYW5nZXMKKyAgICAgICAgc2VsZi5fX3RyYWNlY2IgPSBzZWxmLl92YXJpYWJsZS50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuX2FkanVzdCkKKyAgICAgICAgc2VsZi5iaW5kKCc8Q29uZmlndXJlPicsIHNlbGYuX2FkanVzdCkKKyAgICAgICAgc2VsZi5iaW5kKCc8TWFwPicsIHNlbGYuX2FkanVzdCkKKworCisgICAgZGVmIGRlc3Ryb3koc2VsZik6CisgICAgICAgICIiIkRlc3Ryb3kgdGhpcyB3aWRnZXQgYW5kIHBvc3NpYmx5IGl0cyBhc3NvY2lhdGVkIHZhcmlhYmxlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl92YXJpYWJsZS50cmFjZV92ZGVsZXRlKCd3Jywgc2VsZi5fX3RyYWNlY2IpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgd2lkZ2V0IGhhcyBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgc2VsZi5fdmFyaWFibGUKKyAgICAgICAgICAgIEZyYW1lLmRlc3Ryb3koc2VsZikKKworCisgICAgZGVmIF9hZGp1c3Qoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJBZGp1c3QgdGhlIGxhYmVsIHBvc2l0aW9uIGFjY29yZGluZyB0byB0aGUgc2NhbGUuIiIiCisgICAgICAgIGRlZiBhZGp1c3RfbGFiZWwoKToKKyAgICAgICAgICAgIHNlbGYudXBkYXRlX2lkbGV0YXNrcygpICMgImZvcmNlIiBzY2FsZSByZWRyYXcKKworICAgICAgICAgICAgeCwgeSA9IHNlbGYuc2NhbGUuY29vcmRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2xhYmVsX3RvcDoKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5zY2FsZS53aW5mb195KCkgLSBzZWxmLmxhYmVsLndpbmZvX3JlcWhlaWdodCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHkgPSBzZWxmLnNjYWxlLndpbmZvX3JlcWhlaWdodCgpICsgc2VsZi5sYWJlbC53aW5mb19yZXFoZWlnaHQoKQorCisgICAgICAgICAgICBzZWxmLmxhYmVsLnBsYWNlX2NvbmZpZ3VyZSh4PXgsIHk9eSkKKworICAgICAgICBmcm9tXywgdG8gPSBzZWxmLnNjYWxlWydmcm9tJ10sIHNlbGYuc2NhbGVbJ3RvJ10KKyAgICAgICAgaWYgdG8gPCBmcm9tXzoKKyAgICAgICAgICAgIGZyb21fLCB0byA9IHRvLCBmcm9tXworICAgICAgICBuZXd2YWwgPSBzZWxmLl92YXJpYWJsZS5nZXQoKQorICAgICAgICBpZiBub3QgZnJvbV8gPD0gbmV3dmFsIDw9IHRvOgorICAgICAgICAgICAgIyB2YWx1ZSBvdXRzaWRlIHJhbmdlLCBzZXQgdmFsdWUgYmFjayB0byB0aGUgbGFzdCB2YWxpZCBvbmUKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSBzZWxmLl9sYXN0X3ZhbGlkCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9sYXN0X3ZhbGlkID0gbmV3dmFsCisgICAgICAgIHNlbGYubGFiZWxbJ3RleHQnXSA9IG5ld3ZhbAorICAgICAgICBzZWxmLmFmdGVyX2lkbGUoYWRqdXN0X2xhYmVsKQorCisKKyAgICBkZWYgX2dldF92YWx1ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGN1cnJlbnQgc2NhbGUgdmFsdWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YXJpYWJsZS5nZXQoKQorCisKKyAgICBkZWYgX3NldF92YWx1ZShzZWxmLCB2YWwpOgorICAgICAgICAiIiJTZXQgbmV3IHNjYWxlIHZhbHVlLiIiIgorICAgICAgICBzZWxmLl92YXJpYWJsZS5zZXQodmFsKQorCisKKyAgICB2YWx1ZSA9IHByb3BlcnR5KF9nZXRfdmFsdWUsIF9zZXRfdmFsdWUpCisKKworY2xhc3MgT3B0aW9uTWVudShNZW51YnV0dG9uKToKKyAgICAiIiJUaGVtZWQgT3B0aW9uTWVudSwgYmFzZWQgYWZ0ZXIgVGtpbnRlcidzIE9wdGlvbk1lbnUsIHdoaWNoIGFsbG93cworICAgIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSBtZW51LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgdmFyaWFibGUsIGRlZmF1bHQ9Tm9uZSwgKnZhbHVlcywgKiprd2FyZ3MpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSB0aGVtZWQgT3B0aW9uTWVudSB3aWRnZXQgd2l0aCBtYXN0ZXIgYXMgdGhlIHBhcmVudCwKKyAgICAgICAgdGhlIHJlc291cmNlIHRleHR2YXJpYWJsZSBzZXQgdG8gdmFyaWFibGUsIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQKKyAgICAgICAgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZSBkZWZhdWx0IHBhcmFtZXRlciwgdGhlIG1lbnUgdmFsdWVzIGdpdmVuIGJ5CisgICAgICAgICp2YWx1ZXMgYW5kIGFkZGl0aW9uYWwga2V5d29yZHMuCisKKyAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKKworICAgICAgICAgICAgc3R5bGU6IHN0eWxlbmFtZQorICAgICAgICAgICAgICAgIE1lbnVidXR0b24gc3R5bGUuCisgICAgICAgICAgICBkaXJlY3Rpb246ICdhYm92ZScsICdiZWxvdycsICdsZWZ0JywgJ3JpZ2h0Jywgb3IgJ2ZsdXNoJworICAgICAgICAgICAgICAgIE1lbnVidXR0b24gZGlyZWN0aW9uLgorICAgICAgICAgICAgY29tbWFuZDogY2FsbGJhY2sKKyAgICAgICAgICAgICAgICBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBpbnZva2VkIGFmdGVyIHNlbGVjdGluZyBhbiBpdGVtLgorICAgICAgICAiIiIKKyAgICAgICAga3cgPSB7J3RleHR2YXJpYWJsZSc6IHZhcmlhYmxlLCAnc3R5bGUnOiBrd2FyZ3MucG9wKCdzdHlsZScsIE5vbmUpLAorICAgICAgICAgICAgICAnZGlyZWN0aW9uJzoga3dhcmdzLnBvcCgnZGlyZWN0aW9uJywgTm9uZSl9CisgICAgICAgIE1lbnVidXR0b24uX19pbml0X18oc2VsZiwgbWFzdGVyLCAqKmt3KQorICAgICAgICBzZWxmWydtZW51J10gPSBUa2ludGVyLk1lbnUoc2VsZiwgdGVhcm9mZj1GYWxzZSkKKworICAgICAgICBzZWxmLl92YXJpYWJsZSA9IHZhcmlhYmxlCisgICAgICAgIHNlbGYuX2NhbGxiYWNrID0ga3dhcmdzLnBvcCgnY29tbWFuZCcsIE5vbmUpCisgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFRraW50ZXIuVGNsRXJyb3IoJ3Vua25vd24gb3B0aW9uIC0lcycgJSAoCisgICAgICAgICAgICAgICAga3dhcmdzLml0ZXJrZXlzKCkubmV4dCgpKSkKKworICAgICAgICBzZWxmLnNldF9tZW51KGRlZmF1bHQsICp2YWx1ZXMpCisKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtKToKKyAgICAgICAgaWYgaXRlbSA9PSAnbWVudSc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1ldG93aWRnZXQoTWVudWJ1dHRvbi5fX2dldGl0ZW1fXyhzZWxmLCBpdGVtKSkKKworICAgICAgICByZXR1cm4gTWVudWJ1dHRvbi5fX2dldGl0ZW1fXyhzZWxmLCBpdGVtKQorCisKKyAgICBkZWYgc2V0X21lbnUoc2VsZiwgZGVmYXVsdD1Ob25lLCAqdmFsdWVzKToKKyAgICAgICAgIiIiQnVpbGQgYSBuZXcgbWVudSBvZiByYWRpb2J1dHRvbnMgd2l0aCAqdmFsdWVzIGFuZCBvcHRpb25hbGx5CisgICAgICAgIGEgZGVmYXVsdCB2YWx1ZS4iIiIKKyAgICAgICAgbWVudSA9IHNlbGZbJ21lbnUnXQorICAgICAgICBtZW51LmRlbGV0ZSgwLCAnZW5kJykKKyAgICAgICAgZm9yIHZhbCBpbiB2YWx1ZXM6CisgICAgICAgICAgICBtZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD12YWwsCisgICAgICAgICAgICAgICAgY29tbWFuZD1Ua2ludGVyLl9zZXRpdChzZWxmLl92YXJpYWJsZSwgdmFsLCBzZWxmLl9jYWxsYmFjaykpCisKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuX3ZhcmlhYmxlLnNldChkZWZhdWx0KQorCisKKyAgICBkZWYgZGVzdHJveShzZWxmKToKKyAgICAgICAgIiIiRGVzdHJveSB0aGlzIHdpZGdldCBhbmQgaXRzIGFzc29jaWF0ZWQgdmFyaWFibGUuIiIiCisgICAgICAgIGRlbCBzZWxmLl92YXJpYWJsZQorICAgICAgICBNZW51YnV0dG9uLmRlc3Ryb3koc2VsZikKZGlmZiAtLWdpdCBhL0xpYi9saWItdGsvdHVydGxlLnB5IGIvTGliL2xpYi10ay90dXJ0bGUucHkKaW5kZXggNzY3MDEyMC4uMjNlNDA3ZCAxMDA2NDQKLS0tIGEvTGliL2xpYi10ay90dXJ0bGUucHkKKysrIGIvTGliL2xpYi10ay90dXJ0bGUucHkKQEAgLTMzNSwxMCArMzM1LDEwIEBACiAgICAgICAgIGlmIGV4WzoxXSA9PSAnXycgb3IgZXhbLTE6XSA9PSAnXyc6CiAgICAgICAgICAgICBkZWwgX2RpY3RbZXhdCiAgICAgZm9yIGV4IGluIGV4Y2x1ZGU6Ci0gICAgICAgIGlmIF9kaWN0Lmhhc19rZXkoZXgpOgorICAgICAgICBpZiBleCBpbiBfZGljdDoKICAgICAgICAgICAgIGRlbCBfZGljdFtleF0KICAgICBmb3IgZXggaW4gX19tZXRob2RzKGZyb21DbGFzcyk6Ci0gICAgICAgIGlmIF9kaWN0Lmhhc19rZXkoZXgpOgorICAgICAgICBpZiBleCBpbiBfZGljdDoKICAgICAgICAgICAgIGRlbCBfZGljdFtleF0KIAogICAgIGZvciBtZXRob2QsIGZ1bmMgaW4gX2RpY3QuaXRlbXMoKToKQEAgLTE0OTUsNyArMTQ5NSwxMCBAQAogICAgICAgICA+Pj4gdHVydGxlLmxlZnQoOTApCiAgICAgICAgID4+PiB0dXJ0bGUuaGVhZGluZygpCiAgICAgICAgIDkwCi0gICAgICAgID4+PiB0dXJ0bGUuZGVncmVlcyg0MDAuMCkgICMgYW5nbGUgbWVhc3VyZW1lbnQgaW4gZ29uCisKKyAgICAgICAgQ2hhbmdlIGFuZ2xlIG1lYXN1cmVtZW50IHVuaXQgdG8gZ3JhZCAoYWxzbyBrbm93biBhcyBnb24sCisgICAgICAgIGdyYWRlLCBvciBncmFkaWFuIGFuZCBlcXVhbHMgMS8xMDAtdGggb2YgdGhlIHJpZ2h0IGFuZ2xlLikKKyAgICAgICAgPj4+IHR1cnRsZS5kZWdyZWVzKDQwMC4wKQogICAgICAgICA+Pj4gdHVydGxlLmhlYWRpbmcoKQogICAgICAgICAxMDAKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQgYi9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dAppbmRleCBiZTAzNGUxLi44YTk2NzI2IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dAorKysgYi9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dApAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgJ2AnIHRlc3RsaXN0MSAnYCcgfAogICAgICAgIE5BTUUgfCBOVU1CRVIgfCBTVFJJTkcrIHwgJy4nICcuJyAnLicpCiBsaXN0bWFrZXI6ICh0ZXN0fHN0YXJfZXhwcikgKCBjb21wX2ZvciB8ICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddICkKLXRlc3RsaXN0X2dleHA6IHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddICkKK3Rlc3RsaXN0X2dleHA6ICh0ZXN0fHN0YXJfZXhwcikgKCBjb21wX2ZvciB8ICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddICkKIGxhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdzbGlzdF0gJzonIHRlc3QKIHRyYWlsZXI6ICcoJyBbYXJnbGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdGxpc3QgJ10nIHwgJy4nIE5BTUUKIHN1YnNjcmlwdGxpc3Q6IHN1YnNjcmlwdCAoJywnIHN1YnNjcmlwdCkqIFsnLCddCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9fX21haW5fXy5weSBiL0xpYi9saWIydG8zL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNjg4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9fX21haW5fXy5weQpAQCAtMCwwICsxLDQgQEAKK2ltcG9ydCBzeXMKK2Zyb20gLm1haW4gaW1wb3J0IG1haW4KKworc3lzLmV4aXQobWFpbigibGliMnRvMy5maXhlcyIpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX21hdGNoZXIucHkgYi9MaWIvbGliMnRvMy9idG1fbWF0Y2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZiYTJiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvYnRtX21hdGNoZXIucHkKQEAgLTAsMCArMSwxNjggQEAKKyIiIkEgYm90dG9tLXVwIHRyZWUgbWF0Y2hpbmcgYWxnb3JpdGhtIGltcGxlbWVudGF0aW9uIG1lYW50IHRvIHNwZWVkCit1cCAydG8zJ3MgbWF0Y2hpbmcgcHJvY2Vzcy4gQWZ0ZXIgdGhlIHRyZWUgcGF0dGVybnMgYXJlIHJlZHVjZWQgdG8KK3RoZWlyIHJhcmVzdCBsaW5lYXIgcGF0aCwgYSBsaW5lYXIgQWhvLUNvcmFzaWNrIGF1dG9tYXRvbiBpcworY3JlYXRlZC4gVGhlIGxpbmVhciBhdXRvbWF0b24gdHJhdmVyc2VzIHRoZSBsaW5lYXIgcGF0aHMgZnJvbSB0aGUKK2xlYXZlcyB0byB0aGUgcm9vdCBvZiB0aGUgQVNUIGFuZCByZXR1cm5zIGEgc2V0IG9mIG5vZGVzIGZvciBmdXJ0aGVyCittYXRjaGluZy4gVGhpcyByZWR1Y2VzIHNpZ25pZmljYW50bHkgdGhlIG51bWJlciBvZiBjYW5kaWRhdGUgbm9kZXMuIiIiCisKK19fYXV0aG9yX18gPSAiR2VvcmdlIEJvdXRzaW91a2lzIDxnYm91dHNpb3VraXNAZ21haWwuY29tPiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBpdGVydG9vbHMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2Zyb20gLiBpbXBvcnQgcHl0cmVlCitmcm9tIC5idG1fdXRpbHMgaW1wb3J0IHJlZHVjZV90cmVlCisKK2NsYXNzIEJNTm9kZShvYmplY3QpOgorICAgICIiIkNsYXNzIGZvciBhIG5vZGUgb2YgdGhlIEFoby1Db3Jhc2ljayBhdXRvbWF0b24gdXNlZCBpbiBtYXRjaGluZyIiIgorICAgIGNvdW50ID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudHJhbnNpdGlvbl90YWJsZSA9IHt9CisgICAgICAgIHNlbGYuZml4ZXJzID0gW10KKyAgICAgICAgc2VsZi5pZCA9IG5leHQoQk1Ob2RlLmNvdW50KQorICAgICAgICBzZWxmLmNvbnRlbnQgPSAnJworCitjbGFzcyBCb3R0b21NYXRjaGVyKG9iamVjdCk6CisgICAgIiIiVGhlIG1haW4gbWF0Y2hlciBjbGFzcy4gQWZ0ZXIgaW5zdGFudGlhdGluZyB0aGUgcGF0dGVybnMgc2hvdWxkCisgICAgYmUgYWRkZWQgdXNpbmcgdGhlIGFkZF9maXhlciBtZXRob2QiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5tYXRjaCA9IHNldCgpCisgICAgICAgIHNlbGYucm9vdCA9IEJNTm9kZSgpCisgICAgICAgIHNlbGYubm9kZXMgPSBbc2VsZi5yb290XQorICAgICAgICBzZWxmLmZpeGVycyA9IFtdCisgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIlJlZmFjdG9yaW5nVG9vbCIpCisKKyAgICBkZWYgYWRkX2ZpeGVyKHNlbGYsIGZpeGVyKToKKyAgICAgICAgIiIiUmVkdWNlcyBhIGZpeGVyJ3MgcGF0dGVybiB0cmVlIHRvIGEgbGluZWFyIHBhdGggYW5kIGFkZHMgaXQKKyAgICAgICAgdG8gdGhlIG1hdGNoZXIoYSBjb21tb24gQWhvLUNvcmFzaWNrIGF1dG9tYXRvbikuIFRoZSBmaXhlciBpcworICAgICAgICBhcHBlbmRlZCBvbiB0aGUgbWF0Y2hpbmcgc3RhdGVzIGFuZCBjYWxsZWQgd2hlbiB0aGV5IGFyZQorICAgICAgICByZWFjaGVkIiIiCisgICAgICAgIHNlbGYuZml4ZXJzLmFwcGVuZChmaXhlcikKKyAgICAgICAgdHJlZSA9IHJlZHVjZV90cmVlKGZpeGVyLnBhdHRlcm5fdHJlZSkKKyAgICAgICAgbGluZWFyID0gdHJlZS5nZXRfbGluZWFyX3N1YnBhdHRlcm4oKQorICAgICAgICBtYXRjaF9ub2RlcyA9IHNlbGYuYWRkKGxpbmVhciwgc3RhcnQ9c2VsZi5yb290KQorICAgICAgICBmb3IgbWF0Y2hfbm9kZSBpbiBtYXRjaF9ub2RlczoKKyAgICAgICAgICAgIG1hdGNoX25vZGUuZml4ZXJzLmFwcGVuZChmaXhlcikKKworICAgIGRlZiBhZGQoc2VsZiwgcGF0dGVybiwgc3RhcnQpOgorICAgICAgICAiUmVjdXJzaXZlbHkgYWRkcyBhIGxpbmVhciBwYXR0ZXJuIHRvIHRoZSBBQyBhdXRvbWF0b24iCisgICAgICAgICNwcmludCgiYWRkaW5nIHBhdHRlcm4iLCBwYXR0ZXJuLCAidG8iLCBzdGFydCkKKyAgICAgICAgaWYgbm90IHBhdHRlcm46CisgICAgICAgICAgICAjcHJpbnQoImVtcHR5IHBhdHRlcm4iKQorICAgICAgICAgICAgcmV0dXJuIFtzdGFydF0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXR0ZXJuWzBdLCB0dXBsZSk6CisgICAgICAgICAgICAjYWx0ZXJuYXRpdmVzCisgICAgICAgICAgICAjcHJpbnQoImFsdGVybmF0aXZlcyIpCisgICAgICAgICAgICBtYXRjaF9ub2RlcyA9IFtdCisgICAgICAgICAgICBmb3IgYWx0ZXJuYXRpdmUgaW4gcGF0dGVyblswXToKKyAgICAgICAgICAgICAgICAjYWRkIGFsbCBhbHRlcm5hdGl2ZXMsIGFuZCBhZGQgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAjdG8gZWFjaCBlbmQgbm9kZQorICAgICAgICAgICAgICAgIGVuZF9ub2RlcyA9IHNlbGYuYWRkKGFsdGVybmF0aXZlLCBzdGFydD1zdGFydCkKKyAgICAgICAgICAgICAgICBmb3IgZW5kIGluIGVuZF9ub2RlczoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfbm9kZXMuZXh0ZW5kKHNlbGYuYWRkKHBhdHRlcm5bMTpdLCBlbmQpKQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoX25vZGVzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjc2luZ2xlIHRva2VuCisgICAgICAgICAgICAjbm90IGxhc3QKKyAgICAgICAgICAgIGlmIHBhdHRlcm5bMF0gbm90IGluIHN0YXJ0LnRyYW5zaXRpb25fdGFibGU6CisgICAgICAgICAgICAgICAgI3RyYW5zaXRpb24gZGlkIG5vdCBleGlzdCwgY3JlYXRlIG5ldworICAgICAgICAgICAgICAgIG5leHRfbm9kZSA9IEJNTm9kZSgpCisgICAgICAgICAgICAgICAgc3RhcnQudHJhbnNpdGlvbl90YWJsZVtwYXR0ZXJuWzBdXSA9IG5leHRfbm9kZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjdHJhbnNpdGlvbiBleGlzdHMgYWxyZWFkeSwgZm9sbG93CisgICAgICAgICAgICAgICAgbmV4dF9ub2RlID0gc3RhcnQudHJhbnNpdGlvbl90YWJsZVtwYXR0ZXJuWzBdXQorCisgICAgICAgICAgICBpZiBwYXR0ZXJuWzE6XToKKyAgICAgICAgICAgICAgICBlbmRfbm9kZXMgPSBzZWxmLmFkZChwYXR0ZXJuWzE6XSwgc3RhcnQ9bmV4dF9ub2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbmRfbm9kZXMgPSBbbmV4dF9ub2RlXQorICAgICAgICAgICAgcmV0dXJuIGVuZF9ub2RlcworCisgICAgZGVmIHJ1bihzZWxmLCBsZWF2ZXMpOgorICAgICAgICAiIiJUaGUgbWFpbiBpbnRlcmZhY2Ugd2l0aCB0aGUgYm90dG9tIG1hdGNoZXIuIFRoZSB0cmVlIGlzCisgICAgICAgIHRyYXZlcnNlZCBmcm9tIHRoZSBib3R0b20gdXNpbmcgdGhlIGNvbnN0cnVjdGVkCisgICAgICAgIGF1dG9tYXRvbi4gTm9kZXMgYXJlIG9ubHkgY2hlY2tlZCBvbmNlIGFzIHRoZSB0cmVlIGlzCisgICAgICAgIHJldHJhdmVyc2VkLiBXaGVuIHRoZSBhdXRvbWF0b24gZmFpbHMsIHdlIGdpdmUgaXQgb25lIG1vcmUKKyAgICAgICAgc2hvdChpbiBjYXNlIHRoZSBhYm92ZSB0cmVlIG1hdGNoZXMgYXMgYSB3aG9sZSB3aXRoIHRoZQorICAgICAgICByZWplY3RlZCBsZWFmKSwgdGhlbiB3ZSBicmVhayBmb3IgdGhlIG5leHQgbGVhZi4gVGhlcmUgaXMgdGhlCisgICAgICAgIHNwZWNpYWwgY2FzZSBvZiBtdWx0aXBsZSBhcmd1bWVudHMoc2VlIGNvZGUgY29tbWVudHMpIHdoZXJlIHdlCisgICAgICAgIHJlY2hlY2sgdGhlIG5vZGVzCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgVGhlIGxlYXZlcyBvZiB0aGUgQVNUIHRyZWUgdG8gYmUgbWF0Y2hlZAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgIEEgZGljdGlvbmFyeSBvZiBub2RlIG1hdGNoZXMgd2l0aCBmaXhlcnMgYXMgdGhlIGtleXMKKyAgICAgICAgIiIiCisgICAgICAgIGN1cnJlbnRfYWNfbm9kZSA9IHNlbGYucm9vdAorICAgICAgICByZXN1bHRzID0gZGVmYXVsdGRpY3QobGlzdCkKKyAgICAgICAgZm9yIGxlYWYgaW4gbGVhdmVzOgorICAgICAgICAgICAgY3VycmVudF9hc3Rfbm9kZSA9IGxlYWYKKyAgICAgICAgICAgIHdoaWxlIGN1cnJlbnRfYXN0X25vZGU6CisgICAgICAgICAgICAgICAgY3VycmVudF9hc3Rfbm9kZS53YXNfY2hlY2tlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gY3VycmVudF9hc3Rfbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICAgICAgIyBtdWx0aXBsZSBzdGF0ZW1lbnRzLCByZWNoZWNrCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIHB5dHJlZS5MZWFmKSBhbmQgY2hpbGQudmFsdWUgPT0gdSI7IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXN0X25vZGUud2FzX2NoZWNrZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBjdXJyZW50X2FzdF9ub2RlLnR5cGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgI25hbWUKKyAgICAgICAgICAgICAgICAgICAgbm9kZV90b2tlbiA9IGN1cnJlbnRfYXN0X25vZGUudmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBub2RlX3Rva2VuID0gY3VycmVudF9hc3Rfbm9kZS50eXBlCisKKyAgICAgICAgICAgICAgICBpZiBub2RlX3Rva2VuIGluIGN1cnJlbnRfYWNfbm9kZS50cmFuc2l0aW9uX3RhYmxlOgorICAgICAgICAgICAgICAgICAgICAjdG9rZW4gbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FjX25vZGUgPSBjdXJyZW50X2FjX25vZGUudHJhbnNpdGlvbl90YWJsZVtub2RlX3Rva2VuXQorICAgICAgICAgICAgICAgICAgICBmb3IgZml4ZXIgaW4gY3VycmVudF9hY19ub2RlLmZpeGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaXhlciBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbZml4ZXJdID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbZml4ZXJdLmFwcGVuZChjdXJyZW50X2FzdF9ub2RlKQorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgI21hdGNoaW5nIGZhaWxlZCwgcmVzZXQgYXV0b21hdG9uCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYWNfbm9kZSA9IHNlbGYucm9vdAorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9hc3Rfbm9kZS5wYXJlbnQgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBjdXJyZW50X2FzdF9ub2RlLnBhcmVudC53YXNfY2hlY2tlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjdGhlIHJlc3Qgb2YgdGhlIHRyZWUgdXB3YXJkcyBoYXMgYmVlbiBjaGVja2VkLCBuZXh0IGxlYWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgI3JlY2hlY2sgdGhlIHJlamVjdGVkIG5vZGUgb25jZSBmcm9tIHRoZSByb290CisgICAgICAgICAgICAgICAgICAgIGlmIG5vZGVfdG9rZW4gaW4gY3VycmVudF9hY19ub2RlLnRyYW5zaXRpb25fdGFibGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjdG9rZW4gbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hY19ub2RlID0gY3VycmVudF9hY19ub2RlLnRyYW5zaXRpb25fdGFibGVbbm9kZV90b2tlbl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaXhlciBpbiBjdXJyZW50X2FjX25vZGUuZml4ZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaXhlciBpbiByZXN1bHRzLmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tmaXhlcl0gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbZml4ZXJdLmFwcGVuZChjdXJyZW50X2FzdF9ub2RlKQorCisgICAgICAgICAgICAgICAgY3VycmVudF9hc3Rfbm9kZSA9IGN1cnJlbnRfYXN0X25vZGUucGFyZW50CisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBkZWYgcHJpbnRfYWMoc2VsZik6CisgICAgICAgICJQcmludHMgYSBncmFwaHZpeiBkaWFncmFtIG9mIHRoZSBCTSBhdXRvbWF0b24oZm9yIGRlYnVnZ2luZykiCisgICAgICAgIHByaW50KCJkaWdyYXBoIGd7IikKKyAgICAgICAgZGVmIHByaW50X25vZGUobm9kZSk6CisgICAgICAgICAgICBmb3Igc3Vibm9kZV9rZXkgaW4gbm9kZS50cmFuc2l0aW9uX3RhYmxlLmtleXMoKToKKyAgICAgICAgICAgICAgICBzdWJub2RlID0gbm9kZS50cmFuc2l0aW9uX3RhYmxlW3N1Ym5vZGVfa2V5XQorICAgICAgICAgICAgICAgIHByaW50KCIlZCAtPiAlZCBbbGFiZWw9JXNdIC8vJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAobm9kZS5pZCwgc3Vibm9kZS5pZCwgdHlwZV9yZXByKHN1Ym5vZGVfa2V5KSwgc3RyKHN1Ym5vZGUuZml4ZXJzKSkpCisgICAgICAgICAgICAgICAgaWYgc3Vibm9kZV9rZXkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoc3Vibm9kZS5jb250ZW50KQorICAgICAgICAgICAgICAgIHByaW50X25vZGUoc3Vibm9kZSkKKyAgICAgICAgcHJpbnRfbm9kZShzZWxmLnJvb3QpCisgICAgICAgIHByaW50KCJ9IikKKworIyB0YWtlbiBmcm9tIHB5dHJlZS5weSBmb3IgZGVidWdnaW5nOyBvbmx5IHVzZWQgYnkgcHJpbnRfYWMKK190eXBlX3JlcHJzID0ge30KK2RlZiB0eXBlX3JlcHIodHlwZV9udW0pOgorICAgIGdsb2JhbCBfdHlwZV9yZXBycworICAgIGlmIG5vdCBfdHlwZV9yZXByczoKKyAgICAgICAgZnJvbSAucHlncmFtIGltcG9ydCBweXRob25fc3ltYm9scworICAgICAgICAjIHByaW50aW5nIHRva2VucyBpcyBwb3NzaWJsZSBidXQgbm90IGFzIHVzZWZ1bAorICAgICAgICAjIGZyb20gLnBnZW4yIGltcG9ydCB0b2tlbiAvLyB0b2tlbi5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICBmb3IgbmFtZSwgdmFsIGluIHB5dGhvbl9zeW1ib2xzLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB0eXBlKHZhbCkgPT0gaW50OiBfdHlwZV9yZXByc1t2YWxdID0gbmFtZQorICAgIHJldHVybiBfdHlwZV9yZXBycy5zZXRkZWZhdWx0KHR5cGVfbnVtLCB0eXBlX251bSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weSBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjc2ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CkBAIC0wLDAgKzEsMjgzIEBACisiVXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBieSB0aGUgYnRtX21hdGNoZXIgbW9kdWxlIgorCitmcm9tIC4gaW1wb3J0IHB5dHJlZQorZnJvbSAucGdlbjIgaW1wb3J0IGdyYW1tYXIsIHRva2VuCitmcm9tIC5weWdyYW0gaW1wb3J0IHBhdHRlcm5fc3ltYm9scywgcHl0aG9uX3N5bWJvbHMKKworc3ltcyA9IHBhdHRlcm5fc3ltYm9scworcHlzeW1zID0gcHl0aG9uX3N5bWJvbHMKK3Rva2VucyA9IGdyYW1tYXIub3BtYXAKK3Rva2VuX2xhYmVscyA9IHRva2VuCisKK1RZUEVfQU5ZID0gLTEKK1RZUEVfQUxURVJOQVRJVkVTID0gLTIKK1RZUEVfR1JPVVAgPSAtMworCitjbGFzcyBNaW5Ob2RlKG9iamVjdCk6CisgICAgIiIiVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgIHBhdHRlcm4gdHJlZSBkdXJpbmcgdGhlIGNvbnZlcnNpb24gdG8gc2V0cyBvZiBsZWFmLXRvLXJvb3QKKyAgICBzdWJwYXR0ZXJucyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGU9Tm9uZSwgbmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBbXQorICAgICAgICBzZWxmLmxlYWYgPSBGYWxzZQorICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5hbHRlcm5hdGl2ZXMgPSBbXQorICAgICAgICBzZWxmLmdyb3VwID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLnR5cGUpICsgJyAnICsgc3RyKHNlbGYubmFtZSkKKworICAgIGRlZiBsZWFmX3RvX3Jvb3Qoc2VsZik6CisgICAgICAgICIiIkludGVybmFsIG1ldGhvZC4gUmV0dXJucyBhIGNoYXJhY3RlcmlzdGljIHBhdGggb2YgdGhlCisgICAgICAgIHBhdHRlcm4gdHJlZS4gVGhpcyBtZXRob2QgbXVzdCBiZSBydW4gZm9yIGFsbCBsZWF2ZXMgdW50aWwgdGhlCisgICAgICAgIGxpbmVhciBzdWJwYXR0ZXJucyBhcmUgbWVyZ2VkIGludG8gYSBzaW5nbGUiIiIKKyAgICAgICAgbm9kZSA9IHNlbGYKKyAgICAgICAgc3VicCA9IFtdCisgICAgICAgIHdoaWxlIG5vZGU6CisgICAgICAgICAgICBpZiBub2RlLnR5cGUgPT0gVFlQRV9BTFRFUk5BVElWRVM6CisgICAgICAgICAgICAgICAgbm9kZS5hbHRlcm5hdGl2ZXMuYXBwZW5kKHN1YnApCisgICAgICAgICAgICAgICAgaWYgbGVuKG5vZGUuYWx0ZXJuYXRpdmVzKSA9PSBsZW4obm9kZS5jaGlsZHJlbik6CisgICAgICAgICAgICAgICAgICAgICNsYXN0IGFsdGVybmF0aXZlCisgICAgICAgICAgICAgICAgICAgIHN1YnAgPSBbdHVwbGUobm9kZS5hbHRlcm5hdGl2ZXMpXQorICAgICAgICAgICAgICAgICAgICBub2RlLmFsdGVybmF0aXZlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICAgICAgICAgICAgICBzdWJwID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub2RlLnR5cGUgPT0gVFlQRV9HUk9VUDoKKyAgICAgICAgICAgICAgICBub2RlLmdyb3VwLmFwcGVuZChzdWJwKQorICAgICAgICAgICAgICAgICNwcm9iYWJseSBzaG91bGQgY2hlY2sgdGhlIG51bWJlciBvZiBsZWF2ZXMKKyAgICAgICAgICAgICAgICBpZiBsZW4obm9kZS5ncm91cCkgPT0gbGVuKG5vZGUuY2hpbGRyZW4pOgorICAgICAgICAgICAgICAgICAgICBzdWJwID0gZ2V0X2NoYXJhY3RlcmlzdGljX3N1YnBhdHRlcm4obm9kZS5ncm91cCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5ncm91cCA9IFtdCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICAgICAgICAgICAgICBzdWJwID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub2RlLnR5cGUgPT0gdG9rZW5fbGFiZWxzLk5BTUUgYW5kIG5vZGUubmFtZToKKyAgICAgICAgICAgICAgICAjaW4gY2FzZSBvZiB0eXBlPW5hbWUsIHVzZSB0aGUgbmFtZSBpbnN0ZWFkCisgICAgICAgICAgICAgICAgc3VicC5hcHBlbmQobm9kZS5uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWJwLmFwcGVuZChub2RlLnR5cGUpCisKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudAorICAgICAgICByZXR1cm4gc3VicAorCisgICAgZGVmIGdldF9saW5lYXJfc3VicGF0dGVybihzZWxmKToKKyAgICAgICAgIiIiRHJpdmVzIHRoZSBsZWFmX3RvX3Jvb3QgbWV0aG9kLiBUaGUgcmVhc29uIHRoYXQKKyAgICAgICAgbGVhZl90b19yb290IG11c3QgYmUgcnVuIG11bHRpcGxlIHRpbWVzIGlzIGJlY2F1c2Ugd2UgbmVlZCB0bworICAgICAgICByZWplY3QgJ2dyb3VwJyBtYXRjaGVzOyBmb3IgZXhhbXBsZSB0aGUgYWx0ZXJuYXRpdmUgZm9ybQorICAgICAgICAoYSB8IGIgYykgY3JlYXRlcyBhIGdyb3VwIFtiIGNdIHRoYXQgbmVlZHMgdG8gYmUgbWF0Y2hlZC4gU2luY2UKKyAgICAgICAgbWF0Y2hpbmcgbXVsdGlwbGUgbGluZWFyIHBhdHRlcm5zIG92ZXJjb21lcyB0aGUgYXV0b21hdG9uJ3MKKyAgICAgICAgY2FwYWJpbGl0aWVzLCBsZWFmX3RvX3Jvb3QgbWVyZ2VzIGVhY2ggZ3JvdXAgaW50byBhIHNpbmdsZQorICAgICAgICBjaG9pY2UgYmFzZWQgb24gJ2NoYXJhY3RlcmlzdGljJ2l0eSwKKworICAgICAgICBpLmUuIChhfGIgYykgLT4gKGF8YikgaWYgYiBtb3JlIGNoYXJhY3RlcmlzdGljIHRoYW4gYworCisgICAgICAgIFJldHVybnM6IFRoZSBtb3N0ICdjaGFyYWN0ZXJpc3RpYycoYXMgZGVmaW5lZCBieQorICAgICAgICAgIGdldF9jaGFyYWN0ZXJpc3RpY19zdWJwYXR0ZXJuKSBwYXRoIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybgorICAgICAgICAgIHRyZWUuCisgICAgICAgICIiIgorCisgICAgICAgIGZvciBsIGluIHNlbGYubGVhdmVzKCk6CisgICAgICAgICAgICBzdWJwID0gbC5sZWFmX3RvX3Jvb3QoKQorICAgICAgICAgICAgaWYgc3VicDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VicAorCisgICAgZGVmIGxlYXZlcyhzZWxmKToKKyAgICAgICAgIkdlbmVyYXRvciB0aGF0IHJldHVybnMgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSIKKyAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46CisgICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKKyAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIGlmIG5vdCBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgeWllbGQgc2VsZgorCitkZWYgcmVkdWNlX3RyZWUobm9kZSwgcGFyZW50PU5vbmUpOgorICAgICIiIgorICAgIEludGVybmFsIGZ1bmN0aW9uLiBSZWR1Y2VzIGEgY29tcGlsZWQgcGF0dGVybiB0cmVlIHRvIGFuCisgICAgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uIHN1aXRhYmxlIGZvciBmZWVkaW5nIHRoZQorICAgIGF1dG9tYXRvbi4gVGhpcyBhbHNvIHRyaW1zIG9mZiBhbnkgb3B0aW9uYWwgcGF0dGVybiBlbGVtZW50cyhsaWtlCisgICAgW2FdLCBhKikuCisgICAgIiIiCisKKyAgICBuZXdfbm9kZSA9IE5vbmUKKyAgICAjc3dpdGNoIG9uIHRoZSBub2RlIHR5cGUKKyAgICBpZiBub2RlLnR5cGUgPT0gc3ltcy5NYXRjaGVyOgorICAgICAgICAjc2tpcAorICAgICAgICBub2RlID0gbm9kZS5jaGlsZHJlblswXQorCisgICAgaWYgbm9kZS50eXBlID09IHN5bXMuQWx0ZXJuYXRpdmVzICA6CisgICAgICAgICMyIGNhc2VzCisgICAgICAgIGlmIGxlbihub2RlLmNoaWxkcmVuKSA8PSAyOgorICAgICAgICAgICAgI2p1c3QgYSBzaW5nbGUgJ0FsdGVybmF0aXZlJywgc2tpcCB0aGlzIG5vZGUKKyAgICAgICAgICAgIG5ld19ub2RlID0gcmVkdWNlX3RyZWUobm9kZS5jaGlsZHJlblswXSwgcGFyZW50KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3JlYWwgYWx0ZXJuYXRpdmVzCisgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT1UWVBFX0FMVEVSTkFUSVZFUykKKyAgICAgICAgICAgICNza2lwIG9kZCBjaGlsZHJlbignfCcgdG9rZW5zKQorICAgICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuY2hpbGRyZW46CisgICAgICAgICAgICAgICAgaWYgbm9kZS5jaGlsZHJlbi5pbmRleChjaGlsZCklMjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZWR1Y2VkID0gcmVkdWNlX3RyZWUoY2hpbGQsIG5ld19ub2RlKQorICAgICAgICAgICAgICAgIGlmIHJlZHVjZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlLmNoaWxkcmVuLmFwcGVuZChyZWR1Y2VkKQorICAgIGVsaWYgbm9kZS50eXBlID09IHN5bXMuQWx0ZXJuYXRpdmU6CisgICAgICAgIGlmIGxlbihub2RlLmNoaWxkcmVuKSA+IDE6CisKKyAgICAgICAgICAgIG5ld19ub2RlID0gTWluTm9kZSh0eXBlPVRZUEVfR1JPVVApCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZS5jaGlsZHJlbjoKKyAgICAgICAgICAgICAgICByZWR1Y2VkID0gcmVkdWNlX3RyZWUoY2hpbGQsIG5ld19ub2RlKQorICAgICAgICAgICAgICAgIGlmIHJlZHVjZWQ6CisgICAgICAgICAgICAgICAgICAgIG5ld19ub2RlLmNoaWxkcmVuLmFwcGVuZChyZWR1Y2VkKQorICAgICAgICAgICAgaWYgbm90IG5ld19ub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBncm91cCBpZiBhbGwgb2YgdGhlIGNoaWxkcmVuIHdlcmUgcmVkdWNlZCB0byBOb25lCisgICAgICAgICAgICAgICAgbmV3X25vZGUgPSBOb25lCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld19ub2RlID0gcmVkdWNlX3RyZWUobm9kZS5jaGlsZHJlblswXSwgcGFyZW50KQorCisgICAgZWxpZiBub2RlLnR5cGUgPT0gc3ltcy5Vbml0OgorICAgICAgICBpZiAoaXNpbnN0YW5jZShub2RlLmNoaWxkcmVuWzBdLCBweXRyZWUuTGVhZikgYW5kCisgICAgICAgICAgICBub2RlLmNoaWxkcmVuWzBdLnZhbHVlID09ICcoJyk6CisgICAgICAgICAgICAjc2tpcCBwYXJlbnRoZXNlcworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZV90cmVlKG5vZGUuY2hpbGRyZW5bMV0sIHBhcmVudCkKKyAgICAgICAgaWYgKChpc2luc3RhbmNlKG5vZGUuY2hpbGRyZW5bMF0sIHB5dHJlZS5MZWFmKSBhbmQKKyAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udmFsdWUgPT0gJ1snKQorICAgICAgICAgICAgICAgb3IKKyAgICAgICAgICAgICAgIChsZW4obm9kZS5jaGlsZHJlbik+MSBhbmQKKyAgICAgICAgICAgICAgIGhhc2F0dHIobm9kZS5jaGlsZHJlblsxXSwgInZhbHVlIikgYW5kCisgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuWzFdLnZhbHVlID09ICdbJykpOgorICAgICAgICAgICAgI3NraXAgd2hvbGUgdW5pdCBpZiBpdHMgb3B0aW9uYWwKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbGVhZiA9IFRydWUKKyAgICAgICAgZGV0YWlsc19ub2RlID0gTm9uZQorICAgICAgICBhbHRlcm5hdGl2ZXNfbm9kZSA9IE5vbmUKKyAgICAgICAgaGFzX3JlcGVhdGVyID0gRmFsc2UKKyAgICAgICAgcmVwZWF0ZXJfbm9kZSA9IE5vbmUKKyAgICAgICAgaGFzX3ZhcmlhYmxlX25hbWUgPSBGYWxzZQorCisgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgorICAgICAgICAgICAgaWYgY2hpbGQudHlwZSA9PSBzeW1zLkRldGFpbHM6CisgICAgICAgICAgICAgICAgbGVhZiA9IEZhbHNlCisgICAgICAgICAgICAgICAgZGV0YWlsc19ub2RlID0gY2hpbGQKKyAgICAgICAgICAgIGVsaWYgY2hpbGQudHlwZSA9PSBzeW1zLlJlcGVhdGVyOgorICAgICAgICAgICAgICAgIGhhc19yZXBlYXRlciA9IFRydWUKKyAgICAgICAgICAgICAgICByZXBlYXRlcl9ub2RlID0gY2hpbGQKKyAgICAgICAgICAgIGVsaWYgY2hpbGQudHlwZSA9PSBzeW1zLkFsdGVybmF0aXZlczoKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXNfbm9kZSA9IGNoaWxkCisgICAgICAgICAgICBpZiBoYXNhdHRyKGNoaWxkLCAndmFsdWUnKSBhbmQgY2hpbGQudmFsdWUgPT0gJz0nOiAjIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgICAgICAgICBoYXNfdmFyaWFibGVfbmFtZSA9IFRydWUKKworICAgICAgICAjc2tpcCB2YXJpYWJsZSBuYW1lCisgICAgICAgIGlmIGhhc192YXJpYWJsZV9uYW1lOgorICAgICAgICAgICAgI3NraXAgdmFyaWFibGUgbmFtZSwgJz0nCisgICAgICAgICAgICBuYW1lX2xlYWYgPSBub2RlLmNoaWxkcmVuWzJdCisgICAgICAgICAgICBpZiBoYXNhdHRyKG5hbWVfbGVhZiwgJ3ZhbHVlJykgYW5kIG5hbWVfbGVhZi52YWx1ZSA9PSAnKCc6CisgICAgICAgICAgICAgICAgIyBza2lwIHBhcmVudGhlc2lzCisgICAgICAgICAgICAgICAgbmFtZV9sZWFmID0gbm9kZS5jaGlsZHJlblszXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZV9sZWFmID0gbm9kZS5jaGlsZHJlblswXQorCisgICAgICAgICNzZXQgbm9kZSB0eXBlCisgICAgICAgIGlmIG5hbWVfbGVhZi50eXBlID09IHRva2VuX2xhYmVscy5OQU1FOgorICAgICAgICAgICAgIyhweXRob24pIG5vbi1uYW1lIG9yIHdpbGRjYXJkCisgICAgICAgICAgICBpZiBuYW1lX2xlYWYudmFsdWUgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgbmV3X25vZGUgPSBNaW5Ob2RlKHR5cGU9VFlQRV9BTlkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodG9rZW5fbGFiZWxzLCBuYW1lX2xlYWYudmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT1nZXRhdHRyKHRva2VuX2xhYmVscywgbmFtZV9sZWFmLnZhbHVlKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT1nZXRhdHRyKHB5c3ltcywgbmFtZV9sZWFmLnZhbHVlKSkKKworICAgICAgICBlbGlmIG5hbWVfbGVhZi50eXBlID09IHRva2VuX2xhYmVscy5TVFJJTkc6CisgICAgICAgICAgICAjKHB5dGhvbikgbmFtZSBvciBjaGFyYWN0ZXI7IHJlbW92ZSB0aGUgYXBvc3Ryb3BoZXMgZnJvbQorICAgICAgICAgICAgI3RoZSBzdHJpbmcgdmFsdWUKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lX2xlYWYudmFsdWUuc3RyaXAoIiciKQorICAgICAgICAgICAgaWYgbmFtZSBpbiB0b2tlbnM6CisgICAgICAgICAgICAgICAgbmV3X25vZGUgPSBNaW5Ob2RlKHR5cGU9dG9rZW5zW25hbWVdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfbm9kZSA9IE1pbk5vZGUodHlwZT10b2tlbl9sYWJlbHMuTkFNRSwgbmFtZT1uYW1lKQorICAgICAgICBlbGlmIG5hbWVfbGVhZi50eXBlID09IHN5bXMuQWx0ZXJuYXRpdmVzOgorICAgICAgICAgICAgbmV3X25vZGUgPSByZWR1Y2VfdHJlZShhbHRlcm5hdGl2ZXNfbm9kZSwgcGFyZW50KQorCisgICAgICAgICNoYW5kbGUgcmVwZWF0ZXJzCisgICAgICAgIGlmIGhhc19yZXBlYXRlcjoKKyAgICAgICAgICAgIGlmIHJlcGVhdGVyX25vZGUuY2hpbGRyZW5bMF0udmFsdWUgPT0gJyonOgorICAgICAgICAgICAgICAgICNyZWR1Y2UgdG8gTm9uZQorICAgICAgICAgICAgICAgIG5ld19ub2RlID0gTm9uZQorICAgICAgICAgICAgZWxpZiByZXBlYXRlcl9ub2RlLmNoaWxkcmVuWzBdLnZhbHVlID09ICcrJzoKKyAgICAgICAgICAgICAgICAjcmVkdWNlIHRvIGEgc2luZ2xlIG9jY3VyZW5jZSBpLmUuIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICNUT0RPOiBoYW5kbGUge21pbiwgbWF4fSByZXBlYXRlcnMKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICNhZGQgY2hpbGRyZW4KKyAgICAgICAgaWYgZGV0YWlsc19ub2RlIGFuZCBuZXdfbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBjaGlsZCBpbiBkZXRhaWxzX25vZGUuY2hpbGRyZW5bMTotMV06CisgICAgICAgICAgICAgICAgI3NraXAgJzwnLCAnPicgbWFya2VycworICAgICAgICAgICAgICAgIHJlZHVjZWQgPSByZWR1Y2VfdHJlZShjaGlsZCwgbmV3X25vZGUpCisgICAgICAgICAgICAgICAgaWYgcmVkdWNlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbmV3X25vZGUuY2hpbGRyZW4uYXBwZW5kKHJlZHVjZWQpCisgICAgaWYgbmV3X25vZGU6CisgICAgICAgIG5ld19ub2RlLnBhcmVudCA9IHBhcmVudAorICAgIHJldHVybiBuZXdfbm9kZQorCisKK2RlZiBnZXRfY2hhcmFjdGVyaXN0aWNfc3VicGF0dGVybihzdWJwYXR0ZXJucyk6CisgICAgIiIiUGlja3MgdGhlIG1vc3QgY2hhcmFjdGVyaXN0aWMgZnJvbSBhIGxpc3Qgb2YgbGluZWFyIHBhdHRlcm5zCisgICAgQ3VycmVudCBvcmRlciB1c2VkIGlzOgorICAgIG5hbWVzID4gY29tbW9uX25hbWVzID4gY29tbW9uX2NoYXJzCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3VicGF0dGVybnMsIGxpc3QpOgorICAgICAgICByZXR1cm4gc3VicGF0dGVybnMKKyAgICBpZiBsZW4oc3VicGF0dGVybnMpPT0xOgorICAgICAgICByZXR1cm4gc3VicGF0dGVybnNbMF0KKworICAgICMgZmlyc3QgcGljayBvdXQgdGhlIG9uZXMgY29udGFpbmluZyB2YXJpYWJsZSBuYW1lcworICAgIHN1YnBhdHRlcm5zX3dpdGhfbmFtZXMgPSBbXQorICAgIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX25hbWVzID0gW10KKyAgICBjb21tb25fbmFtZXMgPSBbJ2luJywgJ2ZvcicsICdpZicgLCAnbm90JywgJ05vbmUnXQorICAgIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX2NoYXJzID0gW10KKyAgICBjb21tb25fY2hhcnMgPSAiW10oKS4sOiIKKyAgICBmb3Igc3VicGF0dGVybiBpbiBzdWJwYXR0ZXJuczoKKyAgICAgICAgaWYgYW55KHJlY190ZXN0KHN1YnBhdHRlcm4sIGxhbWJkYSB4OiB0eXBlKHgpIGlzIHN0cikpOgorICAgICAgICAgICAgaWYgYW55KHJlY190ZXN0KHN1YnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6IGlzaW5zdGFuY2UoeCwgc3RyKSBhbmQgeCBpbiBjb21tb25fY2hhcnMpKToKKyAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuc193aXRoX2NvbW1vbl9jaGFycy5hcHBlbmQoc3VicGF0dGVybikKKyAgICAgICAgICAgIGVsaWYgYW55KHJlY190ZXN0KHN1YnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgeDogaXNpbnN0YW5jZSh4LCBzdHIpIGFuZCB4IGluIGNvbW1vbl9uYW1lcykpOgorICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX25hbWVzLmFwcGVuZChzdWJwYXR0ZXJuKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5zX3dpdGhfbmFtZXMuYXBwZW5kKHN1YnBhdHRlcm4pCisKKyAgICBpZiBzdWJwYXR0ZXJuc193aXRoX25hbWVzOgorICAgICAgICBzdWJwYXR0ZXJucyA9IHN1YnBhdHRlcm5zX3dpdGhfbmFtZXMKKyAgICBlbGlmIHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX25hbWVzOgorICAgICAgICBzdWJwYXR0ZXJucyA9IHN1YnBhdHRlcm5zX3dpdGhfY29tbW9uX25hbWVzCisgICAgZWxpZiBzdWJwYXR0ZXJuc193aXRoX2NvbW1vbl9jaGFyczoKKyAgICAgICAgc3VicGF0dGVybnMgPSBzdWJwYXR0ZXJuc193aXRoX2NvbW1vbl9jaGFycworICAgICMgb2YgdGhlIHJlbWFpbmluZyBzdWJwYXR0ZXJucyBwaWNrIG91dCB0aGUgbG9uZ2VzdCBvbmUKKyAgICByZXR1cm4gbWF4KHN1YnBhdHRlcm5zLCBrZXk9bGVuKQorCitkZWYgcmVjX3Rlc3Qoc2VxdWVuY2UsIHRlc3RfZnVuYyk6CisgICAgIiIiVGVzdHMgdGVzdF9mdW5jIG9uIGFsbCBpdGVtcyBvZiBzZXF1ZW5jZSBhbmQgaXRlbXMgb2YgaW5jbHVkZWQKKyAgICBzdWItaXRlcmFibGVzIiIiCisgICAgZm9yIHggaW4gc2VxdWVuY2U6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgeSBpbiByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpOgorICAgICAgICAgICAgICAgIHlpZWxkIHkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHRlc3RfZnVuYyh4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXJfYmFzZS5weSBiL0xpYi9saWIydG8zL2ZpeGVyX2Jhc2UucHkKaW5kZXggMTY4ODdhYS4uZjY0MjFiYSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXJfYmFzZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5CkBAIC0yNCw2ICsyNCw3IEBACiAKICAgICBQQVRURVJOID0gTm9uZSAgIyBNb3N0IHN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHdpdGggYSBzdHJpbmcgbGl0ZXJhbAogICAgIHBhdHRlcm4gPSBOb25lICAjIENvbXBpbGVkIHBhdHRlcm4sIHNldCBieSBjb21waWxlX3BhdHRlcm4oKQorICAgIHBhdHRlcm5fdHJlZSA9IE5vbmUgIyBUcmVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXR0ZXJuCiAgICAgb3B0aW9ucyA9IE5vbmUgICMgT3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIGluaXRpYWxpemVyCiAgICAgZmlsZW5hbWUgPSBOb25lICMgVGhlIGZpbGVuYW1lIChzZXQgYnkgc2V0X2ZpbGVuYW1lKQogICAgIGxvZ2dlciA9IE5vbmUgICAjIEEgbG9nZ2VyIChzZXQgYnkgc2V0X2ZpbGVuYW1lKQpAQCAtMzYsNiArMzcsMTIgQEAKICAgICBfYWNjZXB0X3R5cGUgPSBOb25lICMgW0FkdmFuY2VkIGFuZCBub3QgcHVibGljXSBUaGlzIHRlbGxzIFJlZmFjdG9yaW5nVG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgIyB3aGljaCBub2RlIHR5cGUgdG8gYWNjZXB0IHdoZW4gdGhlcmUncyBub3QgYSBwYXR0ZXJuLgogCisgICAga2VlcF9saW5lX29yZGVyID0gRmFsc2UgIyBGb3IgdGhlIGJvdHRvbSBtYXRjaGVyOiBtYXRjaCB3aXRoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3JpZ2luYWwgbGluZSBvcmRlcgorICAgIEJNX2NvbXBhdGlibGUgPSBGYWxzZSAjIENvbXBhdGliaWxpdHkgd2l0aCB0aGUgYm90dG9tIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgbW9kdWxlOyBldmVyeSBmaXhlciBzaG91bGQgc2V0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYW51YWxseQorCiAgICAgIyBTaG9ydGN1dCBmb3IgYWNjZXNzIHRvIFB5dGhvbiBncmFtbWFyIHN5bWJvbHMKICAgICBzeW1zID0gcHlncmFtLnB5dGhvbl9zeW1ib2xzCiAKQEAgLTU4LDcgKzY1LDkgQEAKICAgICAgICAgc2VsZi57cGF0dGVybixQQVRURVJOfSBpbiAubWF0Y2goKS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuUEFUVEVSTiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYucGF0dGVybiA9IFBhdHRlcm5Db21waWxlcigpLmNvbXBpbGVfcGF0dGVybihzZWxmLlBBVFRFUk4pCisgICAgICAgICAgICBQQyA9IFBhdHRlcm5Db21waWxlcigpCisgICAgICAgICAgICBzZWxmLnBhdHRlcm4sIHNlbGYucGF0dGVybl90cmVlID0gUEMuY29tcGlsZV9wYXR0ZXJuKHNlbGYuUEFUVEVSTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aF90cmVlPVRydWUpCiAKICAgICBkZWYgc2V0X2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiU2V0IHRoZSBmaWxlbmFtZSwgYW5kIGEgbG9nZ2VyIGRlcml2ZWQgZnJvbSBpdC4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CmluZGV4IDNiMTM2NjkuLjMwZGE4OTMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQpAQCAtMSw2ICsxLDggQEAKICIiIlV0aWxpdHkgZnVuY3Rpb25zLCBub2RlIGNvbnN0cnVjdGlvbiBtYWNyb3MsIGV0Yy4iIiIKICMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCiAKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UKKwogIyBMb2NhbCBpbXBvcnRzCiBmcm9tIC5wZ2VuMiBpbXBvcnQgdG9rZW4KIGZyb20gLnB5dHJlZSBpbXBvcnQgTGVhZiwgTm9kZQpAQCAtMTQsNyArMTYsNyBAQAogCiBkZWYgS2V5d29yZEFyZyhrZXl3b3JkLCB2YWx1ZSk6CiAgICAgcmV0dXJuIE5vZGUoc3ltcy5hcmd1bWVudCwKLSAgICAgICAgICAgICAgICBba2V5d29yZCwgTGVhZih0b2tlbi5FUVVBTCwgdSc9JyksIHZhbHVlXSkKKyAgICAgICAgICAgICAgICBba2V5d29yZCwgTGVhZih0b2tlbi5FUVVBTCwgdSI9IiksIHZhbHVlXSkKIAogZGVmIExQYXJlbigpOgogICAgIHJldHVybiBMZWFmKHRva2VuLkxQQVIsIHUiKCIpCkBAIC03Niw5ICs3OCw5IEBACiAKIGRlZiBTdWJzY3JpcHQoaW5kZXhfbm9kZSk6CiAgICAgIiIiQSBudW1lcmljIG9yIHN0cmluZyBzdWJzY3JpcHQiIiIKLSAgICByZXR1cm4gTm9kZShzeW1zLnRyYWlsZXIsIFtMZWFmKHRva2VuLkxCUkFDRSwgdSdbJyksCisgICAgcmV0dXJuIE5vZGUoc3ltcy50cmFpbGVyLCBbTGVhZih0b2tlbi5MQlJBQ0UsIHUiWyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVhZih0b2tlbi5SQlJBQ0UsIHUnXScpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWFmKHRva2VuLlJCUkFDRSwgdSJdIildKQogCiBkZWYgU3RyaW5nKHN0cmluZywgcHJlZml4PU5vbmUpOgogICAgICIiIkEgc3RyaW5nIGxlYWYiIiIKQEAgLTEyMCw5ICsxMjIsOSBAQAogICAgICAgICAjIFB1bGwgdGhlIGxlYXZlcyBvdXQgb2YgdGhlaXIgb2xkIHRyZWUKICAgICAgICAgbGVhZi5yZW1vdmUoKQogCi0gICAgY2hpbGRyZW4gPSBbTGVhZih0b2tlbi5OQU1FLCB1J2Zyb20nKSwKKyAgICBjaGlsZHJlbiA9IFtMZWFmKHRva2VuLk5BTUUsIHUiZnJvbSIpLAogICAgICAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgcGFja2FnZV9uYW1lLCBwcmVmaXg9dSIgIiksCi0gICAgICAgICAgICAgICAgTGVhZih0b2tlbi5OQU1FLCB1J2ltcG9ydCcsIHByZWZpeD11IiAiKSwKKyAgICAgICAgICAgICAgICBMZWFmKHRva2VuLk5BTUUsIHUiaW1wb3J0IiwgcHJlZml4PXUiICIpLAogICAgICAgICAgICAgICAgIE5vZGUoc3ltcy5pbXBvcnRfYXNfbmFtZXMsIG5hbWVfbGVhZnMpXQogICAgIGltcCA9IE5vZGUoc3ltcy5pbXBvcnRfZnJvbSwgY2hpbGRyZW4pCiAgICAgcmV0dXJuIGltcApAQCAtMjQ1LDYgKzI0NywxNiBAQAogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCitkZWYgZmluZF9pbmRlbnRhdGlvbihub2RlKToKKyAgICAiIiJGaW5kIHRoZSBpbmRlbnRhdGlvbiBvZiAqbm9kZSouIiIiCisgICAgd2hpbGUgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbm9kZS50eXBlID09IHN5bXMuc3VpdGUgYW5kIGxlbihub2RlLmNoaWxkcmVuKSA+IDI6CisgICAgICAgICAgICBpbmRlbnQgPSBub2RlLmNoaWxkcmVuWzFdCisgICAgICAgICAgICBpZiBpbmRlbnQudHlwZSA9PSB0b2tlbi5JTkRFTlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudC52YWx1ZQorICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQKKyAgICByZXR1cm4gdSIiCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHRvIGZpbmQgYmluZGluZ3MgaW4gYSBzdWl0ZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTI4Myw4ICsyOTUsOCBAQAogICAgICIiIiBXb3JrcyBsaWtlIGBkb2VzX3RyZWVfaW1wb3J0YCBidXQgYWRkcyBhbiBpbXBvcnQgc3RhdGVtZW50CiAgICAgICAgIGlmIGl0IHdhcyBub3QgaW1wb3J0ZWQuICIiIgogICAgIGRlZiBpc19pbXBvcnRfc3RtdChub2RlKToKLSAgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PSBzeW1zLnNpbXBsZV9zdG10IGFuZCBub2RlLmNoaWxkcmVuIGFuZCBcCi0gICAgICAgICAgICAgICBpc19pbXBvcnQobm9kZS5jaGlsZHJlblswXSkKKyAgICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT0gc3ltcy5zaW1wbGVfc3RtdCBhbmQgbm9kZS5jaGlsZHJlbiBhbmQKKyAgICAgICAgICAgICAgICBpc19pbXBvcnQobm9kZS5jaGlsZHJlblswXSkpCiAKICAgICByb290ID0gZmluZF9yb290KG5vZGUpCiAKQEAgLTMwNywxOCArMzE5LDE4IEBACiAgICAgIyBpZiB0aGF0IGFsc28gZmFpbHMsIHdlIHN0aWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUKICAgICBpZiBpbnNlcnRfcG9zID09IDA6CiAgICAgICAgIGZvciBpZHgsIG5vZGUgaW4gZW51bWVyYXRlKHJvb3QuY2hpbGRyZW4pOgotICAgICAgICAgICAgaWYgbm9kZS50eXBlID09IHN5bXMuc2ltcGxlX3N0bXQgYW5kIG5vZGUuY2hpbGRyZW4gYW5kIFwKLSAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PSB0b2tlbi5TVFJJTkc6CisgICAgICAgICAgICBpZiAobm9kZS50eXBlID09IHN5bXMuc2ltcGxlX3N0bXQgYW5kIG5vZGUuY2hpbGRyZW4gYW5kCisgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuWzBdLnR5cGUgPT0gdG9rZW4uU1RSSU5HKToKICAgICAgICAgICAgICAgICBpbnNlcnRfcG9zID0gaWR4ICsgMQogICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICBpZiBwYWNrYWdlIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydF8gPSBOb2RlKHN5bXMuaW1wb3J0X25hbWUsIFsKLSAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgdSdpbXBvcnQnKSwKLSAgICAgICAgICAgIExlYWYodG9rZW4uTkFNRSwgbmFtZSwgcHJlZml4PXUnICcpCisgICAgICAgICAgICBMZWFmKHRva2VuLk5BTUUsIHUiaW1wb3J0IiksCisgICAgICAgICAgICBMZWFmKHRva2VuLk5BTUUsIG5hbWUsIHByZWZpeD11IiAiKQogICAgICAgICBdKQogICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydF8gPSBGcm9tSW1wb3J0KHBhY2thZ2UsIFtMZWFmKHRva2VuLk5BTUUsIG5hbWUsIHByZWZpeD11JyAnKV0pCisgICAgICAgIGltcG9ydF8gPSBGcm9tSW1wb3J0KHBhY2thZ2UsIFtMZWFmKHRva2VuLk5BTUUsIG5hbWUsIHByZWZpeD11IiAiKV0pCiAKICAgICBjaGlsZHJlbiA9IFtpbXBvcnRfLCBOZXdsaW5lKCldCiAgICAgcm9vdC5pbnNlcnRfY2hpbGQoaW5zZXJ0X3BvcywgTm9kZShzeW1zLnNpbXBsZV9zdG10LCBjaGlsZHJlbikpCkBAIC00MDQsNyArNDE2LDcgQEAKICAgICAgICAgaWYgcGFja2FnZSBhbmQgdW5pY29kZShub2RlLmNoaWxkcmVuWzFdKS5zdHJpcCgpICE9IHBhY2thZ2U6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBuID0gbm9kZS5jaGlsZHJlblszXQotICAgICAgICBpZiBwYWNrYWdlIGFuZCBfZmluZCh1J2FzJywgbik6CisgICAgICAgIGlmIHBhY2thZ2UgYW5kIF9maW5kKHUiYXMiLCBuKToKICAgICAgICAgICAgICMgU2VlIHRlc3RfZnJvbV9pbXBvcnRfYXMgZm9yIGV4cGxhbmF0aW9uCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBlbGlmIG4udHlwZSA9PSBzeW1zLmltcG9ydF9hc19uYW1lcyBhbmQgX2ZpbmQobmFtZSwgbik6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXBwbHkucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXBwbHkucHkKaW5kZXggNmQxYzVkOS4uYTdkYzNhMCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2FwcGx5LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hcHBseS5weQpAQCAtMTIsNiArMTIsNyBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IENhbGwsIENvbW1hLCBwYXJlbnRoZXNpemUKIAogY2xhc3MgRml4QXBwbHkoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCAnYXBwbHknCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYmFzZXN0cmluZy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9iYXNlc3RyaW5nLnB5CmluZGV4IDBkZTZjMjYuLmEzYzlhNDMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9iYXNlc3RyaW5nLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9iYXNlc3RyaW5nLnB5CkBAIC02LDYgKzYsNyBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUKIAogY2xhc3MgRml4QmFzZXN0cmluZyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIidiYXNlc3RyaW5nJyIKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2J1ZmZlci5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9idWZmZXIucHkKaW5kZXggMWMxYzRhMS4uYzZiMDkyOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2J1ZmZlci5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYnVmZmVyLnB5CkBAIC05LDYgKzksNyBAQAogCiAKIGNsYXNzIEZpeEJ1ZmZlcihmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBleHBsaWNpdCA9IFRydWUgIyBUaGUgdXNlciBtdXN0IGFzayBmb3IgdGhpcyBmaXhlcgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfY2FsbGFibGUucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfY2FsbGFibGUucHkKaW5kZXggY2E1ZDIwYi4uZGYzM2Q2MSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2NhbGxhYmxlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9jYWxsYWJsZS5weQpAQCAtMTEsNiArMTEsOSBAQAogZnJvbSBsaWIydG8zLmZpeGVyX3V0aWwgaW1wb3J0IENhbGwsIE5hbWUsIFN0cmluZywgQXR0ciwgdG91Y2hfaW1wb3J0CiAKIGNsYXNzIEZpeENhbGxhYmxlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKworICAgIG9yZGVyID0gInByZSIKIAogICAgICMgSWdub3JlIGNhbGxhYmxlKCphcmdzKSBvciB1c2Ugb2Yga2V5d29yZHMuCiAgICAgIyBFaXRoZXIgY291bGQgYmUgYSBoaW50IHRoYXQgdGhlIGJ1aWx0aW4gY2FsbGFibGUoKSBpcyBub3QgYmVpbmcgdXNlZC4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9kaWN0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKaW5kZXggNTkxMmNiZi4uZjY4MWU0ZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKQEAgLTQwLDYgKzQwLDggQEAKIAogCiBjbGFzcyBGaXhEaWN0KGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKwogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgaGVhZD1hbnkrCiAgICAgICAgICB0cmFpbGVyPCAnLicgbWV0aG9kPSgna2V5cyd8J2l0ZW1zJ3wndmFsdWVzJ3wKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGNlcHQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhjZXB0LnB5CmluZGV4IDgxMTgwNTguLmUzMjQ3MTggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGNlcHQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4Y2VwdC5weQpAQCAtMzQsNiArMzQsNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIChuLCBub2Rlc1tpKzJdKQogCiBjbGFzcyBGaXhFeGNlcHQoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHRyeV9zdG10PCAndHJ5JyAnOicgKHNpbXBsZV9zdG10IHwgc3VpdGUpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlYy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CmluZGV4IDEyMTQzMWMuLjUwZTE4NTQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjLnB5CkBAIC0xNiw2ICsxNiw3IEBACiAKIAogY2xhc3MgRml4RXhlYyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgZXhlY19zdG10PCAnZXhlYycgYT1hbnkgJ2luJyBiPWFueSBbJywnIGM9YW55XSA+CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlY2ZpbGUucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhlY2ZpbGUucHkKaW5kZXggMzhkNmFiYy4uMmYyOWQzYiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4ZWNmaWxlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGVjZmlsZS5weQpAQCAtMTMsNiArMTMsNyBAQAogCiAKIGNsYXNzIEZpeEV4ZWNmaWxlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgJ2V4ZWNmaWxlJyB0cmFpbGVyPCAnKCcgYXJnbGlzdDwgZmlsZW5hbWU9YW55IFsnLCcgZ2xvYmFscz1hbnkgWycsJyBsb2NhbHM9YW55IF0gXSA+ICcpJyA+ID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGl0ZnVuYy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGl0ZnVuYy5weQppbmRleCAyOGQzMGI4Li44OWZiM2RiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhpdGZ1bmMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5CkBAIC05LDYgKzksOCBAQAogCiAKIGNsYXNzIEZpeEV4aXRmdW5jKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAga2VlcF9saW5lX29yZGVyID0gVHJ1ZQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgICgKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9maWx0ZXIucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZmlsdGVyLnB5CmluZGV4IDBlOTJiMTQuLjE4ZWUyZmYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9maWx0ZXIucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ZpbHRlci5weQpAQCAtMTksNiArMTksNyBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIENhbGwsIExpc3RDb21wLCBpbl9zcGVjaWFsX2NvbnRleHQKIAogY2xhc3MgRml4RmlsdGVyKGZpeGVyX2Jhc2UuQ29uZGl0aW9uYWxGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgZmlsdGVyX2xhbWJkYT1wb3dlcjwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdW5jYXR0cnMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZnVuY2F0dHJzLnB5CmluZGV4IDVkMWJhOGMuLjllNDVjMDIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdW5jYXR0cnMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1bmNhdHRycy5weQpAQCAtNyw2ICs3LDggQEAKIAogCiBjbGFzcyBGaXhGdW5jYXR0cnMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCBhbnkrIHRyYWlsZXI8ICcuJyBhdHRyPSgnZnVuY19jbG9zdXJlJyB8ICdmdW5jX2RvYycgfCAnZnVuY19nbG9iYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJ2Z1bmNfbmFtZScgfCAnZnVuY19kZWZhdWx0cycgfCAnZnVuY19jb2RlJwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1dHVyZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9mdXR1cmUucHkKaW5kZXggODYxZTEzYy4uZmJjYjg2YSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Z1dHVyZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZnV0dXJlLnB5CkBAIC05LDYgKzksOCBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IEJsYW5rTGluZQogCiBjbGFzcyBGaXhGdXR1cmUoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorCiAgICAgUEFUVEVSTiA9ICIiImltcG9ydF9mcm9tPCAnZnJvbScgbW9kdWxlX25hbWU9Il9fZnV0dXJlX18iICdpbXBvcnQnIGFueSA+IiIiCiAKICAgICAjIFRoaXMgc2hvdWxkIGJlIHJ1biBsYXN0IC0tIHNvbWUgdGhpbmdzIGNoZWNrIGZvciB0aGUgaW1wb3J0CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfZ2V0Y3dkdS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9nZXRjd2R1LnB5CmluZGV4IGE1YjVhYTMuLjgyMjMzYzggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9nZXRjd2R1LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9nZXRjd2R1LnB5CkBAIC04LDYgKzgsNyBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUKIAogY2xhc3MgRml4R2V0Y3dkdShmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHBvd2VyPCAnb3MnIHRyYWlsZXI8IGRvdD0nLicgbmFtZT0nZ2V0Y3dkdScgPiBhbnkqID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9oYXNfa2V5LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2hhc19rZXkucHkKaW5kZXggMDkxNWEzNi4uYmVhZDRjYiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2hhc19rZXkucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2hhc19rZXkucHkKQEAgLTM3LDYgKzM3LDcgQEAKIAogCiBjbGFzcyBGaXhIYXNLZXkoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIGFuY2hvcj1wb3dlcjwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pZGlvbXMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaWRpb21zLnB5CmluZGV4IGMwN2I3N2UuLjM3YjZlZWYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pZGlvbXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lkaW9tcy5weQpAQCAtMzUsNyArMzUsNiBAQAogVFlQRSA9ICJwb3dlcjwgJ3R5cGUnIHRyYWlsZXI8ICcoJyB4PWFueSAnKScgPiA+IgogCiBjbGFzcyBGaXhJZGlvbXMoZml4ZXJfYmFzZS5CYXNlRml4KToKLQogICAgIGV4cGxpY2l0ID0gVHJ1ZSAjIFRoZSB1c2VyIG11c3QgYXNrIGZvciB0aGlzIGZpeGVyCiAKICAgICBQQVRURVJOID0gciIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbXBvcnQucHkKaW5kZXggZDM1ZmEwYy4uMjAxZTgxMSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW1wb3J0LnB5CkBAIC0zNiw2ICszNiw3IEBACiAKIAogY2xhc3MgRml4SW1wb3J0KGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBpbXBvcnRfZnJvbTwgJ2Zyb20nIGltcD1hbnkgJ2ltcG9ydCcgWycoJ10gYW55IFsnKSddID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbXBvcnRzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydHMucHkKaW5kZXggZTFhZDY2Ny4uOTNjOWU2NyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydHMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ltcG9ydHMucHkKQEAgLTg0LDYgKzg0LDggQEAKIAogY2xhc3MgRml4SW1wb3J0cyhmaXhlcl9iYXNlLkJhc2VGaXgpOgogCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBrZWVwX2xpbmVfb3JkZXIgPSBUcnVlCiAgICAgIyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gZml4X2ltcG9ydHMyLgogICAgIG1hcHBpbmcgPSBNQVBQSU5HCiAKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weQppbmRleCAyOTFjYWRmLi5mYmY0YzcyIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW5wdXQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5CkBAIC0xMSw3ICsxMSw3IEBACiAKIAogY2xhc3MgRml4SW5wdXQoZml4ZXJfYmFzZS5CYXNlRml4KToKLQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBwb3dlcjwgJ2lucHV0JyBhcmdzPXRyYWlsZXI8ICcoJyBbYW55XSAnKScgPiA+CiAgICAgICAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNjdmOThlZi4uZTdiYjUwNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC0xMiw2ICsxMiw4IEBACiAKIAogY2xhc3MgRml4SW50ZXJuKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCiAKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8ICdpbnRlcm4nCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaXNpbnN0YW5jZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pc2luc3RhbmNlLnB5CmluZGV4IGM3MjBhODMuLjRiMDRjOGYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pc2luc3RhbmNlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pc2luc3RhbmNlLnB5CkBAIC0xNCw3ICsxNCw3IEBACiAKIAogY2xhc3MgRml4SXNpbnN0YW5jZShmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8CiAgICAgICAgICdpc2luc3RhbmNlJwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29scy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHMucHkKaW5kZXggNzdiM2EwMS4uNTM5MWEzNyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29scy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzLnB5CkBAIC0xMiw2ICsxMiw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQogCiBjbGFzcyBGaXhJdGVydG9vbHMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIGl0X2Z1bmNzID0gIignaW1hcCd8J2lmaWx0ZXInfCdpemlwJ3wnaWZpbHRlcmZhbHNlJykiCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBwb3dlcjwgaXQ9J2l0ZXJ0b29scycKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHNfaW1wb3J0cy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pdGVydG9vbHNfaW1wb3J0cy5weQppbmRleCBjNzIyM2RlLi5jMWRlYjAzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaXRlcnRvb2xzX2ltcG9ydHMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2l0ZXJ0b29sc19pbXBvcnRzLnB5CkBAIC02LDYgKzYsNyBAQAogCiAKIGNsYXNzIEZpeEl0ZXJ0b29sc0ltcG9ydHMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgaW1wb3J0X2Zyb208ICdmcm9tJyAnaXRlcnRvb2xzJyAnaW1wb3J0JyBpbXBvcnRzPWFueSA+CiAgICAgICAgICAgICAgICIiIiAlKGxvY2FscygpKQpAQCAtMjAsNiArMjEsOSBAQAogICAgICAgICAgICAgaWYgY2hpbGQudHlwZSA9PSB0b2tlbi5OQU1FOgogICAgICAgICAgICAgICAgIG1lbWJlciA9IGNoaWxkLnZhbHVlCiAgICAgICAgICAgICAgICAgbmFtZV9ub2RlID0gY2hpbGQKKyAgICAgICAgICAgIGVsaWYgY2hpbGQudHlwZSA9PSB0b2tlbi5TVEFSOgorICAgICAgICAgICAgICAgICMgSnVzdCBsZWF2ZSB0aGUgaW1wb3J0IGFzIGlzLgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhc3NlcnQgY2hpbGQudHlwZSA9PSBzeW1zLmltcG9ydF9hc19uYW1lCiAgICAgICAgICAgICAgICAgbmFtZV9ub2RlID0gY2hpbGQuY2hpbGRyZW5bMF0KQEAgLTQwLDEyICs0NCwxMiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZW1vdmVfY29tbWEgXj0gVHJ1ZQogCi0gICAgICAgIGlmIGNoaWxkcmVuWy0xXS50eXBlID09IHRva2VuLkNPTU1BOgotICAgICAgICAgICAgY2hpbGRyZW5bLTFdLnJlbW92ZSgpCisgICAgICAgIHdoaWxlIGNoaWxkcmVuIGFuZCBjaGlsZHJlblstMV0udHlwZSA9PSB0b2tlbi5DT01NQToKKyAgICAgICAgICAgIGNoaWxkcmVuLnBvcCgpLnJlbW92ZSgpCiAKICAgICAgICAgIyBJZiB0aGVyZSBhcmUgbm8gaW1wb3J0cyBsZWZ0LCBqdXN0IGdldCByaWQgb2YgdGhlIGVudGlyZSBzdGF0ZW1lbnQKLSAgICAgICAgaWYgbm90IChpbXBvcnRzLmNoaWxkcmVuIG9yIGdldGF0dHIoaW1wb3J0cywgJ3ZhbHVlJywgTm9uZSkpIG9yIFwKLSAgICAgICAgICAgICAgICBpbXBvcnRzLnBhcmVudCBpcyBOb25lOgorICAgICAgICBpZiAobm90IChpbXBvcnRzLmNoaWxkcmVuIG9yIGdldGF0dHIoaW1wb3J0cywgJ3ZhbHVlJywgTm9uZSkpIG9yCisgICAgICAgICAgICBpbXBvcnRzLnBhcmVudCBpcyBOb25lKToKICAgICAgICAgICAgIHAgPSBub2RlLnByZWZpeAogICAgICAgICAgICAgbm9kZSA9IEJsYW5rTGluZSgpCiAgICAgICAgICAgICBub2RlLnByZWZpeCA9IHAKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9sb25nLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2xvbmcucHkKaW5kZXggNmYzNjYxYy4uNWRkZGRlMCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2xvbmcucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2xvbmcucHkKQEAgLTEwLDcgKzEwLDcgQEAKIAogCiBjbGFzcyBGaXhMb25nKGZpeGVyX2Jhc2UuQmFzZUZpeCk6Ci0KKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiJ2xvbmcnIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tYXAucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWFwLnB5CmluZGV4IDZkMjY5NTcuLjdhN2QwZGIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tYXAucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21hcC5weQpAQCAtMjYsNiArMjYsNyBAQAogZnJvbSAuLnB5Z3JhbSBpbXBvcnQgcHl0aG9uX3N5bWJvbHMgYXMgc3ltcwogCiBjbGFzcyBGaXhNYXAoZml4ZXJfYmFzZS5Db25kaXRpb25hbEZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBtYXBfbm9uZT1wb3dlcjwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CmluZGV4IDc4OWNiMTYuLmY0MDNmZDYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQpAQCAtMTQzLDYgKzE0Myw3IEBACiAKIAogY2xhc3MgRml4TWV0YWNsYXNzKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKIAogICAgIFBBVFRFUk4gPSAiIiIKICAgICBjbGFzc2RlZjxhbnkqPgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGhvZGF0dHJzLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGhvZGF0dHJzLnB5CmluZGV4IDVlOTRhOWMuLmYzYzFlY2YgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRob2RhdHRycy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0aG9kYXR0cnMucHkKQEAgLTEzLDYgKzEzLDcgQEAKICAgICB9CiAKIGNsYXNzIEZpeE1ldGhvZGF0dHJzKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgcG93ZXI8IGFueSsgdHJhaWxlcjwgJy4nIGF0dHI9KCdpbV9mdW5jJyB8ICdpbV9zZWxmJyB8ICdpbV9jbGFzcycpID4gYW55KiA+CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbmV4dC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZXh0LnB5CmluZGV4IDk1MTQ3OTguLmYwMjFhOWIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZXh0LnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9uZXh0LnB5CkBAIC0xNSw2ICsxNSw3IEBACiAKIAogY2xhc3MgRml4TmV4dChmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCBiYXNlPWFueSsgdHJhaWxlcjwgJy4nIGF0dHI9J25leHQnID4gdHJhaWxlcjwgJygnICcpJyA+ID4KICAgICB8CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfbm9uemVyby5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9ub256ZXJvLnB5CmluZGV4IDE3YmUzNzcuLmJhODM0NzggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9ub256ZXJvLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9ub256ZXJvLnB5CkBAIC02LDYgKzYsNyBAQAogZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIHN5bXMKIAogY2xhc3MgRml4Tm9uemVybyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIGNsYXNzZGVmPCAnY2xhc3MnIGFueSsgJzonCiAgICAgICAgICAgICAgIHN1aXRlPCBhbnkqCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfb3BlcmF0b3IucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfb3BlcmF0b3IucHkKaW5kZXggZDliZjE2MC4uN2JmMmMwZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X29wZXJhdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9vcGVyYXRvci5weQpAQCAtMSw0MCArMSw5NiBAQAotIiIiRml4ZXIgZm9yIG9wZXJhdG9yLntpc0NhbGxhYmxlLHNlcXVlbmNlSW5jbHVkZXN9CisiIiJGaXhlciBmb3Igb3BlcmF0b3IgZnVuY3Rpb25zLgogCi1vcGVyYXRvci5pc0NhbGxhYmxlKG9iaikgLT4gaGFzYXR0cihvYmosICdfX2NhbGxfXycpCitvcGVyYXRvci5pc0NhbGxhYmxlKG9iaikgICAgICAgLT4gaGFzYXR0cihvYmosICdfX2NhbGxfXycpCiBvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKG9iaikgLT4gb3BlcmF0b3IuY29udGFpbnMob2JqKQorb3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUob2JqKSAgIC0+IGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkKK29wZXJhdG9yLmlzTWFwcGluZ1R5cGUob2JqKSAgICAtPiBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuTWFwcGluZykKK29wZXJhdG9yLmlzTnVtYmVyVHlwZShvYmopICAgICAtPiBpc2luc3RhbmNlKG9iaiwgbnVtYmVycy5OdW1iZXIpCitvcGVyYXRvci5yZXBlYXQob2JqLCBuKSAgICAgICAgLT4gb3BlcmF0b3IubXVsKG9iaiwgbikKK29wZXJhdG9yLmlyZXBlYXQob2JqLCBuKSAgICAgICAtPiBvcGVyYXRvci5pbXVsKG9iaiwgbikKICIiIgogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKLWZyb20gLi5maXhlcl91dGlsIGltcG9ydCBDYWxsLCBOYW1lLCBTdHJpbmcKK2Zyb20gbGliMnRvMyBpbXBvcnQgZml4ZXJfYmFzZQorZnJvbSBsaWIydG8zLmZpeGVyX3V0aWwgaW1wb3J0IENhbGwsIE5hbWUsIFN0cmluZywgdG91Y2hfaW1wb3J0CisKKworZGVmIGludm9jYXRpb24ocyk6CisgICAgZGVmIGRlYyhmKToKKyAgICAgICAgZi5pbnZvY2F0aW9uID0gcworICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBkZWMKKwogCiBjbGFzcyBGaXhPcGVyYXRvcihmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCisgICAgb3JkZXIgPSAicHJlIgogCi0gICAgbWV0aG9kcyA9ICJtZXRob2Q9KCdpc0NhbGxhYmxlJ3wnc2VxdWVuY2VJbmNsdWRlcycpIgotICAgIGZ1bmMgPSAiJygnIGZ1bmM9YW55ICcpJyIKKyAgICBtZXRob2RzID0gIiIiCisgICAgICAgICAgICAgIG1ldGhvZD0oJ2lzQ2FsbGFibGUnfCdzZXF1ZW5jZUluY2x1ZGVzJworICAgICAgICAgICAgICAgICAgICAgfCdpc1NlcXVlbmNlVHlwZSd8J2lzTWFwcGluZ1R5cGUnfCdpc051bWJlclR5cGUnCisgICAgICAgICAgICAgICAgICAgICB8J3JlcGVhdCd8J2lyZXBlYXQnKQorICAgICAgICAgICAgICAiIiIKKyAgICBvYmogPSAiJygnIG9iaj1hbnkgJyknIgogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgcG93ZXI8IG1vZHVsZT0nb3BlcmF0b3InCi0gICAgICAgICAgICAgICAgdHJhaWxlcjwgJy4nICUobWV0aG9kcylzID4gdHJhaWxlcjwgJShmdW5jKXMgPiA+CisgICAgICAgICAgICAgICAgdHJhaWxlcjwgJy4nICUobWV0aG9kcylzID4gdHJhaWxlcjwgJShvYmopcyA+ID4KICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICBwb3dlcjwgJShtZXRob2RzKXMgdHJhaWxlcjwgJShmdW5jKXMgPiA+Ci0gICAgICAgICAgICAgICIiIiAlIGRpY3QobWV0aG9kcz1tZXRob2RzLCBmdW5jPWZ1bmMpCisgICAgICAgICAgICAgIHBvd2VyPCAlKG1ldGhvZHMpcyB0cmFpbGVyPCAlKG9iailzID4gPgorICAgICAgICAgICAgICAiIiIgJSBkaWN0KG1ldGhvZHM9bWV0aG9kcywgb2JqPW9iaikKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIG1ldGhvZCA9IHJlc3VsdHNbIm1ldGhvZCJdWzBdCisgICAgICAgIG1ldGhvZCA9IHNlbGYuX2NoZWNrX21ldGhvZChub2RlLCByZXN1bHRzKQorICAgICAgICBpZiBtZXRob2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gbWV0aG9kKG5vZGUsIHJlc3VsdHMpCiAKLSAgICAgICAgaWYgbWV0aG9kLnZhbHVlID09IHUic2VxdWVuY2VJbmNsdWRlcyI6Ci0gICAgICAgICAgICBpZiAibW9kdWxlIiBub3QgaW4gcmVzdWx0czoKLSAgICAgICAgICAgICAgICAjIG9wZXJhdG9yIG1heSBub3QgYmUgaW4gc2NvcGUsIHNvIHdlIGNhbid0IG1ha2UgYSBjaGFuZ2UuCi0gICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nKG5vZGUsICJZb3Ugc2hvdWxkIHVzZSBvcGVyYXRvci5jb250YWlucyBoZXJlLiIpCisgICAgQGludm9jYXRpb24oIm9wZXJhdG9yLmNvbnRhaW5zKCVzKSIpCisgICAgZGVmIF9zZXF1ZW5jZUluY2x1ZGVzKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3JlbmFtZShub2RlLCByZXN1bHRzLCB1ImNvbnRhaW5zIikKKworICAgIEBpbnZvY2F0aW9uKCJoYXNhdHRyKCVzLCAnX19jYWxsX18nKSIpCisgICAgZGVmIF9pc0NhbGxhYmxlKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICBvYmogPSByZXN1bHRzWyJvYmoiXQorICAgICAgICBhcmdzID0gW29iai5jbG9uZSgpLCBTdHJpbmcodSIsICIpLCBTdHJpbmcodSInX19jYWxsX18nIildCisgICAgICAgIHJldHVybiBDYWxsKE5hbWUodSJoYXNhdHRyIiksIGFyZ3MsIHByZWZpeD1ub2RlLnByZWZpeCkKKworICAgIEBpbnZvY2F0aW9uKCJvcGVyYXRvci5tdWwoJXMpIikKKyAgICBkZWYgX3JlcGVhdChzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9yZW5hbWUobm9kZSwgcmVzdWx0cywgdSJtdWwiKQorCisgICAgQGludm9jYXRpb24oIm9wZXJhdG9yLmltdWwoJXMpIikKKyAgICBkZWYgX2lyZXBlYXQoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfcmVuYW1lKG5vZGUsIHJlc3VsdHMsIHUiaW11bCIpCisKKyAgICBAaW52b2NhdGlvbigiaXNpbnN0YW5jZSglcywgY29sbGVjdGlvbnMuU2VxdWVuY2UpIikKKyAgICBkZWYgX2lzU2VxdWVuY2VUeXBlKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3R5cGUyYWJjKG5vZGUsIHJlc3VsdHMsIHUiY29sbGVjdGlvbnMiLCB1IlNlcXVlbmNlIikKKworICAgIEBpbnZvY2F0aW9uKCJpc2luc3RhbmNlKCVzLCBjb2xsZWN0aW9ucy5NYXBwaW5nKSIpCisgICAgZGVmIF9pc01hcHBpbmdUeXBlKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlX3R5cGUyYWJjKG5vZGUsIHJlc3VsdHMsIHUiY29sbGVjdGlvbnMiLCB1Ik1hcHBpbmciKQorCisgICAgQGludm9jYXRpb24oImlzaW5zdGFuY2UoJXMsIG51bWJlcnMuTnVtYmVyKSIpCisgICAgZGVmIF9pc051bWJlclR5cGUoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVfdHlwZTJhYmMobm9kZSwgcmVzdWx0cywgdSJudW1iZXJzIiwgdSJOdW1iZXIiKQorCisgICAgZGVmIF9oYW5kbGVfcmVuYW1lKHNlbGYsIG5vZGUsIHJlc3VsdHMsIG5hbWUpOgorICAgICAgICBtZXRob2QgPSByZXN1bHRzWyJtZXRob2QiXVswXQorICAgICAgICBtZXRob2QudmFsdWUgPSBuYW1lCisgICAgICAgIG1ldGhvZC5jaGFuZ2VkKCkKKworICAgIGRlZiBfaGFuZGxlX3R5cGUyYWJjKHNlbGYsIG5vZGUsIHJlc3VsdHMsIG1vZHVsZSwgYWJjKToKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsIG1vZHVsZSwgbm9kZSkKKyAgICAgICAgb2JqID0gcmVzdWx0c1sib2JqIl0KKyAgICAgICAgYXJncyA9IFtvYmouY2xvbmUoKSwgU3RyaW5nKHUiLCAiICsgdSIuIi5qb2luKFttb2R1bGUsIGFiY10pKV0KKyAgICAgICAgcmV0dXJuIENhbGwoTmFtZSh1ImlzaW5zdGFuY2UiKSwgYXJncywgcHJlZml4PW5vZGUucHJlZml4KQorCisgICAgZGVmIF9jaGVja19tZXRob2Qoc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgIl8iICsgcmVzdWx0c1sibWV0aG9kIl1bMF0udmFsdWUuZW5jb2RlKCJhc2NpaSIpKQorICAgICAgICBpZiBjYWxsYWJsZShtZXRob2QpOgorICAgICAgICAgICAgaWYgIm1vZHVsZSIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1ldGhvZC52YWx1ZSA9IHUiY29udGFpbnMiCi0gICAgICAgICAgICAgICAgbWV0aG9kLmNoYW5nZWQoKQotICAgICAgICBlbGlmIG1ldGhvZC52YWx1ZSA9PSB1ImlzQ2FsbGFibGUiOgotICAgICAgICAgICAgaWYgIm1vZHVsZSIgbm90IGluIHJlc3VsdHM6Ci0gICAgICAgICAgICAgICAgc2VsZi53YXJuaW5nKG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZb3Ugc2hvdWxkIHVzZSBoYXNhdHRyKCVzLCAnX19jYWxsX18nKSBoZXJlLiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJmdW5jIl0udmFsdWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZ1bmMgPSByZXN1bHRzWyJmdW5jIl0KLSAgICAgICAgICAgICAgICBhcmdzID0gW2Z1bmMuY2xvbmUoKSwgU3RyaW5nKHUiLCAiKSwgU3RyaW5nKHUiJ19fY2FsbF9fJyIpXQotICAgICAgICAgICAgICAgIHJldHVybiBDYWxsKE5hbWUodSJoYXNhdHRyIiksIGFyZ3MsIHByZWZpeD1ub2RlLnByZWZpeCkKKyAgICAgICAgICAgICAgICBzdWIgPSAodW5pY29kZShyZXN1bHRzWyJvYmoiXSksKQorICAgICAgICAgICAgICAgIGludm9jYXRpb25fc3RyID0gdW5pY29kZShtZXRob2QuaW52b2NhdGlvbikgJSBzdWIKKyAgICAgICAgICAgICAgICBzZWxmLndhcm5pbmcobm9kZSwgdSJZb3Ugc2hvdWxkIHVzZSAnJXMnIGhlcmUuIiAlIGludm9jYXRpb25fc3RyKQorICAgICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3BhcmVuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3BhcmVuLnB5CmluZGV4IGVlYjBkNDAuLjg2NTBjZDkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wYXJlbi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcGFyZW4ucHkKQEAgLTEwLDYgKzEwLDggQEAKIAogIyBYWFggVGhpcyBkb2Vzbid0IHN1cHBvcnQgbmVzdGVkIGZvciBsb29wcyBsaWtlIFt4IGZvciB4IGluIDEsIDIgZm9yIHggaW4gMSwgMl0KIGNsYXNzIEZpeFBhcmVuKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKwogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgYXRvbTwgKCdbJyB8ICcoJykKICAgICAgICAgICAgIChsaXN0bWFrZXI8IGFueQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ByaW50LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ByaW50LnB5CmluZGV4IDZjYWQ4Y2UuLjk4Nzg2YjMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9wcmludC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcHJpbnQucHkKQEAgLTI4LDYgKzI4LDggQEAKIAogY2xhc3MgRml4UHJpbnQoZml4ZXJfYmFzZS5CYXNlRml4KToKIAorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCisKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHNpbXBsZV9zdG10PCBhbnkqIGJhcmU9J3ByaW50JyBhbnkqID4gfCBwcmludF9zdG10CiAgICAgICAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JhaXNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JhaXNlLnB5CmluZGV4IDI0ZTEyM2MuLmI5NThiYTAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYWlzZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmFpc2UucHkKQEAgLTQsNiArNCw3IEBACiByYWlzZSBFICAgICAgIC0+IHJhaXNlIEUKIHJhaXNlIEUsIFYgICAgLT4gcmFpc2UgRShWKQogcmFpc2UgRSwgViwgVCAtPiByYWlzZSBFKFYpLndpdGhfdHJhY2ViYWNrKFQpCityYWlzZSBFLCBOb25lLCBUIC0+IHJhaXNlIEUud2l0aF90cmFjZWJhY2soVCkKIAogcmFpc2UgKCgoRSwgRScpLCBFJycpLCBFJycnKSwgViAtPiByYWlzZSBFKFYpCiByYWlzZSAiZm9vIiwgViwgVCAgICAgICAgICAgICAgIC0+IHdhcm5zIGFib3V0IHN0cmluZyBleGNlcHRpb25zCkBAIC0yOSw2ICszMCw3IEBACiAKIGNsYXNzIEZpeFJhaXNlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICByYWlzZV9zdG10PCAncmFpc2UnIGV4Yz1hbnkgWycsJyB2YWw9YW55IFsnLCcgdGI9YW55XV0gPgogICAgICIiIgpAQCAtMzcsOCArMzksOSBAQAogICAgICAgICBzeW1zID0gc2VsZi5zeW1zCiAKICAgICAgICAgZXhjID0gcmVzdWx0c1siZXhjIl0uY2xvbmUoKQotICAgICAgICBpZiBleGMudHlwZSBpcyB0b2tlbi5TVFJJTkc6Ci0gICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICJQeXRob24gMyBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyBleGNlcHRpb25zIikKKyAgICAgICAgaWYgZXhjLnR5cGUgPT0gdG9rZW4uU1RSSU5HOgorICAgICAgICAgICAgbXNnID0gIlB5dGhvbiAzIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIGV4Y2VwdGlvbnMiCisgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsIG1zZykKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgUHl0aG9uIDIgc3VwcG9ydHMKQEAgLTUyLDcgKzU1LDcgQEAKICAgICAgICAgICAgICAgICAjIGV4Yy5jaGlsZHJlblsxOi0xXSBpcyB0aGUgdW5wYXJlbnRoZXNpemVkIHR1cGxlCiAgICAgICAgICAgICAgICAgIyBleGMuY2hpbGRyZW5bMV0uY2hpbGRyZW5bMF0gaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHR1cGxlCiAgICAgICAgICAgICAgICAgZXhjID0gZXhjLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzBdLmNsb25lKCkKLSAgICAgICAgICAgIGV4Yy5wcmVmaXggPSAiICIKKyAgICAgICAgICAgIGV4Yy5wcmVmaXggPSB1IiAiCiAKICAgICAgICAgaWYgInZhbCIgbm90IGluIHJlc3VsdHM6CiAgICAgICAgICAgICAjIE9uZS1hcmd1bWVudCByYWlzZQpAQCAtNzEsNyArNzQsMTIgQEAKICAgICAgICAgICAgIHRiID0gcmVzdWx0c1sidGIiXS5jbG9uZSgpCiAgICAgICAgICAgICB0Yi5wcmVmaXggPSB1IiIKIAotICAgICAgICAgICAgZSA9IENhbGwoZXhjLCBhcmdzKQorICAgICAgICAgICAgZSA9IGV4YworICAgICAgICAgICAgIyBJZiB0aGVyZSdzIGEgdHJhY2ViYWNrIGFuZCBOb25lIGlzIHBhc3NlZCBhcyB0aGUgdmFsdWUsIHRoZW4gZG9uJ3QKKyAgICAgICAgICAgICMgYWRkIGEgY2FsbCwgc2luY2UgdGhlIHVzZXIgcHJvYmFibHkganVzdCB3YW50cyB0byBhZGQgYQorICAgICAgICAgICAgIyB0cmFjZWJhY2suIFNlZSBpc3N1ZSAjOTY2MS4KKyAgICAgICAgICAgIGlmIHZhbC50eXBlICE9IHRva2VuLk5BTUUgb3IgdmFsLnZhbHVlICE9IHUiTm9uZSI6CisgICAgICAgICAgICAgICAgZSA9IENhbGwoZXhjLCBhcmdzKQogICAgICAgICAgICAgd2l0aF90YiA9IEF0dHIoZSwgTmFtZSh1J3dpdGhfdHJhY2ViYWNrJykpICsgW0FyZ0xpc3QoW3RiXSldCiAgICAgICAgICAgICBuZXcgPSBweXRyZWUuTm9kZShzeW1zLnNpbXBsZV9zdG10LCBbTmFtZSh1InJhaXNlIildICsgd2l0aF90YikKICAgICAgICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Jhd19pbnB1dC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yYXdfaW5wdXQucHkKaW5kZXggYmEwNDVkNi4uM2E3M2I4MSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Jhd19pbnB1dC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmF3X2lucHV0LnB5CkBAIC03LDYgKzcsNyBAQAogCiBjbGFzcyBGaXhSYXdJbnB1dChmaXhlcl9iYXNlLkJhc2VGaXgpOgogCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIHBvd2VyPCBuYW1lPSdyYXdfaW5wdXQnIHRyYWlsZXI8ICcoJyBbYW55XSAnKScgPiBhbnkqID4KICAgICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVkdWNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlZHVjZS5weQppbmRleCAxOTQ4NjZkLi42YmQ3ODVjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVkdWNlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWR1Y2UucHkKQEAgLTE0LDYgKzE0LDkgQEAKIAogY2xhc3MgRml4UmVkdWNlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQorICAgIG9yZGVyID0gInByZSIKKwogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgJ3JlZHVjZScKICAgICAgICAgdHJhaWxlcjwgJygnCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVuYW1lcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZW5hbWVzLnB5CmluZGV4IGE0NTM0NWEuLjRiY2NlOGMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZW5hbWVzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZW5hbWVzLnB5CkBAIC00MCw2ICs0MCw3IEBACiAKIAogY2xhc3MgRml4UmVuYW1lcyhmaXhlcl9iYXNlLkJhc2VGaXgpOgorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICJ8Ii5qb2luKGJ1aWxkX3BhdHRlcm4oKSkKIAogICAgIG9yZGVyID0gInByZSIgIyBQcmUtb3JkZXIgdHJlZSB0cmF2ZXJzYWwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZXByLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlcHIucHkKaW5kZXggNGIzN2U3My4uZjM0MzY1NiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlcHIucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3JlcHIucHkKQEAgLTEwLDYgKzEwLDcgQEAKIAogY2xhc3MgRml4UmVwcihmaXhlcl9iYXNlLkJhc2VGaXgpOgogCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgIGF0b20gPCAnYCcgZXhwcj1hbnkgJ2AnID4KICAgICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfc2V0X2xpdGVyYWwucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfc2V0X2xpdGVyYWwucHkKaW5kZXggY2ZjNTIyYy4uZDNkMzhlYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3NldF9saXRlcmFsLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zZXRfbGl0ZXJhbC5weQpAQCAtMTEsNiArMTEsNyBAQAogCiBjbGFzcyBGaXhTZXRMaXRlcmFsKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIGV4cGxpY2l0ID0gVHJ1ZQogCiAgICAgUEFUVEVSTiA9ICIiInBvd2VyPCAnc2V0JyB0cmFpbGVyPCAnKCcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zdGFuZGFyZGVycm9yLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N0YW5kYXJkZXJyb3IucHkKaW5kZXggYTU3ODliYS4uNmNhZDUxMSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N0YW5kYXJkZXJyb3IucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N0YW5kYXJkZXJyb3IucHkKQEAgLTksNyArOSw3IEBACiAKIAogY2xhc3MgRml4U3RhbmRhcmRlcnJvcihmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gIiIiCiAgICAgICAgICAgICAgICdTdGFuZGFyZEVycm9yJwogICAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9zeXNfZXhjLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKaW5kZXggMzQ4OTI5Yi4uMmVjY2EyYiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3N5c19leGMucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGNsYXNzIEZpeFN5c0V4YyhmaXhlcl9iYXNlLkJhc2VGaXgpOgogICAgICMgVGhpcyBvcmRlciBtYXRjaGVzIHRoZSBvcmRlcmluZyBvZiBzeXMuZXhjX2luZm8oKS4KICAgICBleGNfaW5mbyA9IFt1ImV4Y190eXBlIiwgdSJleGNfdmFsdWUiLCB1ImV4Y190cmFjZWJhY2siXQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgICAgICAgICAgICBwb3dlcjwgJ3N5cycgdHJhaWxlcjwgZG90PScuJyBhdHRyaWJ1dGU9KCVzKSA+ID4KICAgICAgICAgICAgICAgIiIiICUgJ3wnLmpvaW4oIiclcyciICUgZSBmb3IgZSBpbiBleGNfaW5mbykKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90aHJvdy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90aHJvdy5weQppbmRleCA2MzI3MWNmLi4xNDY4ZDg5IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdGhyb3cucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3Rocm93LnB5CkBAIC0xNCw3ICsxNCw3IEBACiBmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZSwgQ2FsbCwgQXJnTGlzdCwgQXR0ciwgaXNfdHVwbGUKIAogY2xhc3MgRml4VGhyb3coZml4ZXJfYmFzZS5CYXNlRml4KToKLQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICIiIgogICAgIHBvd2VyPCBhbnkgdHJhaWxlcjwgJy4nICd0aHJvdycgPgogICAgICAgICAgICB0cmFpbGVyPCAnKCcgYXJncz1hcmdsaXN0PCBleGM9YW55ICcsJyB2YWw9YW55IFsnLCcgdGI9YW55XSA+ICcpJyA+CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdHVwbGVfcGFyYW1zLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R1cGxlX3BhcmFtcy5weQppbmRleCA2NDdlZWMwLi42MzYxNzE3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdHVwbGVfcGFyYW1zLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90dXBsZV9wYXJhbXMucHkKQEAgLTI5LDYgKzI5LDEwIEBACiAgICAgICAgICAgIHN0bXQuY2hpbGRyZW5bMF0udHlwZSA9PSB0b2tlbi5TVFJJTkcKIAogY2xhc3MgRml4VHVwbGVQYXJhbXMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBydW5fb3JkZXIgPSA0ICN1c2UgYSBsb3dlciBvcmRlciBzaW5jZSBsYW1iZGEgaXMgcGFydCBvZiBvdGhlcgorICAgICAgICAgICAgICAgICAgI3BhdHRlcm5zCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKwogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgZnVuY2RlZjwgJ2RlZicgYW55IHBhcmFtZXRlcnM8ICcoJyBhcmdzPWFueSAnKScgPgogICAgICAgICAgICAgICAgICAgICAgICBbJy0+JyBhbnldICc6JyBzdWl0ZT1hbnkrID4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90eXBlcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF90eXBlcy5weQppbmRleCAyZmJiYWI4Li5mYzlkNDk1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdHlwZXMucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3R5cGVzLnB5CkBAIC01Miw3ICs1Miw3IEBACiBfcGF0cyA9IFsicG93ZXI8ICd0eXBlcycgdHJhaWxlcjwgJy4nIG5hbWU9JyVzJyA+ID4iICUgdCBmb3IgdCBpbiBfVFlQRV9NQVBQSU5HXQogCiBjbGFzcyBGaXhUeXBlcyhmaXhlcl9iYXNlLkJhc2VGaXgpOgotCisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKICAgICBQQVRURVJOID0gJ3wnLmpvaW4oX3BhdHMpCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3VuaWNvZGUucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdW5pY29kZS5weQppbmRleCBjZDNiODljLi42Yzg5NTc2IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdW5pY29kZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfdW5pY29kZS5weQpAQCAtMTAsNyArMTAsNyBAQAogX2xpdGVyYWxfcmUgPSByZS5jb21waWxlKHVyIlt1VV1bclJdP1tcJ1wiXSIpCiAKIGNsYXNzIEZpeFVuaWNvZGUoZml4ZXJfYmFzZS5CYXNlRml4KToKLQorICAgIEJNX2NvbXBhdGlibGUgPSBUcnVlCiAgICAgUEFUVEVSTiA9ICJTVFJJTkcgfCAndW5pY29kZScgfCAndW5pY2hyJyIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdXJsbGliLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3VybGxpYi5weQppbmRleCBkYjE4Y2E4Li4zNGUxYjI3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfdXJsbGliLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF91cmxsaWIucHkKQEAgLTUsMzkgKzUsNDAgQEAKICMgQXV0aG9yOiBOaWNrIEVkZHMKIAogIyBMb2NhbCBpbXBvcnRzCi1mcm9tIC5maXhfaW1wb3J0cyBpbXBvcnQgYWx0ZXJuYXRlcywgRml4SW1wb3J0cwotZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIENvbW1hLCBGcm9tSW1wb3J0LCBOZXdsaW5lLCBhdHRyX2NoYWluCitmcm9tIGxpYjJ0bzMuZml4ZXMuZml4X2ltcG9ydHMgaW1wb3J0IGFsdGVybmF0ZXMsIEZpeEltcG9ydHMKK2Zyb20gbGliMnRvMyBpbXBvcnQgZml4ZXJfYmFzZQorZnJvbSBsaWIydG8zLmZpeGVyX3V0aWwgaW1wb3J0IChOYW1lLCBDb21tYSwgRnJvbUltcG9ydCwgTmV3bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZF9pbmRlbnRhdGlvbiwgTm9kZSwgc3ltcykKIAotTUFQUElORyA9IHsndXJsbGliJzogIFsKLSAgICAgICAgICAgICAgICAoJ3VybGxpYi5yZXF1ZXN0JywKLSAgICAgICAgICAgICAgICAgICAgWydVUkxPcGVuZXInLCAnRmFuY3lVUkxPcGVuZXInLCAndXJscmV0cmlldmUnLAotICAgICAgICAgICAgICAgICAgICAgJ191cmxvcGVuZXInLCAndXJsb3BlbicsICd1cmxjbGVhbnVwJywKLSAgICAgICAgICAgICAgICAgICAgICdwYXRobmFtZTJ1cmwnLCAndXJsMnBhdGhuYW1lJ10pLAotICAgICAgICAgICAgICAgICgndXJsbGliLnBhcnNlJywKLSAgICAgICAgICAgICAgICAgICAgWydxdW90ZScsICdxdW90ZV9wbHVzJywgJ3VucXVvdGUnLCAndW5xdW90ZV9wbHVzJywKLSAgICAgICAgICAgICAgICAgICAgICd1cmxlbmNvZGUnLCAnc3BsaXRhdHRyJywgJ3NwbGl0aG9zdCcsICdzcGxpdG5wb3J0JywKLSAgICAgICAgICAgICAgICAgICAgICdzcGxpdHBhc3N3ZCcsICdzcGxpdHBvcnQnLCAnc3BsaXRxdWVyeScsICdzcGxpdHRhZycsCi0gICAgICAgICAgICAgICAgICAgICAnc3BsaXR0eXBlJywgJ3NwbGl0dXNlcicsICdzcGxpdHZhbHVlJywgXSksCi0gICAgICAgICAgICAgICAgKCd1cmxsaWIuZXJyb3InLAotICAgICAgICAgICAgICAgICAgICBbJ0NvbnRlbnRUb29TaG9ydEVycm9yJ10pXSwKLSAgICAgICAgICAgJ3VybGxpYjInIDogWwotICAgICAgICAgICAgICAgICgndXJsbGliLnJlcXVlc3QnLAotICAgICAgICAgICAgICAgICAgICBbJ3VybG9wZW4nLCAnaW5zdGFsbF9vcGVuZXInLCAnYnVpbGRfb3BlbmVyJywKLSAgICAgICAgICAgICAgICAgICAgICdSZXF1ZXN0JywgJ09wZW5lckRpcmVjdG9yJywgJ0Jhc2VIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdIVFRQRGVmYXVsdEVycm9ySGFuZGxlcicsICdIVFRQUmVkaXJlY3RIYW5kbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICdIVFRQQ29va2llUHJvY2Vzc29yJywgJ1Byb3h5SGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnSFRUUFBhc3N3b3JkTWdyJywKLSAgICAgICAgICAgICAgICAgICAgICdIVFRQUGFzc3dvcmRNZ3JXaXRoRGVmYXVsdFJlYWxtJywKLSAgICAgICAgICAgICAgICAgICAgICdBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgJ0hUVFBCYXNpY0F1dGhIYW5kbGVyJywgJ1Byb3h5QmFzaWNBdXRoSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnSFRUUERpZ2VzdEF1dGhIYW5kbGVyJywgJ1Byb3h5RGlnZXN0QXV0aEhhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgJ0hUVFBIYW5kbGVyJywgJ0hUVFBTSGFuZGxlcicsICdGaWxlSGFuZGxlcicsCi0gICAgICAgICAgICAgICAgICAgICAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgJ1Vua25vd25IYW5kbGVyJ10pLAotICAgICAgICAgICAgICAgICgndXJsbGliLmVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgWydVUkxFcnJvcicsICdIVFRQRXJyb3InXSksCitNQVBQSU5HID0geyJ1cmxsaWIiOiAgWworICAgICAgICAgICAgICAgICgidXJsbGliLnJlcXVlc3QiLAorICAgICAgICAgICAgICAgICAgICBbIlVSTG9wZW5lciIsICJGYW5jeVVSTG9wZW5lciIsICJ1cmxyZXRyaWV2ZSIsCisgICAgICAgICAgICAgICAgICAgICAiX3VybG9wZW5lciIsICJ1cmxvcGVuIiwgInVybGNsZWFudXAiLAorICAgICAgICAgICAgICAgICAgICAgInBhdGhuYW1lMnVybCIsICJ1cmwycGF0aG5hbWUiXSksCisgICAgICAgICAgICAgICAgKCJ1cmxsaWIucGFyc2UiLAorICAgICAgICAgICAgICAgICAgICBbInF1b3RlIiwgInF1b3RlX3BsdXMiLCAidW5xdW90ZSIsICJ1bnF1b3RlX3BsdXMiLAorICAgICAgICAgICAgICAgICAgICAgInVybGVuY29kZSIsICJzcGxpdGF0dHIiLCAic3BsaXRob3N0IiwgInNwbGl0bnBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgInNwbGl0cGFzc3dkIiwgInNwbGl0cG9ydCIsICJzcGxpdHF1ZXJ5IiwgInNwbGl0dGFnIiwKKyAgICAgICAgICAgICAgICAgICAgICJzcGxpdHR5cGUiLCAic3BsaXR1c2VyIiwgInNwbGl0dmFsdWUiLCBdKSwKKyAgICAgICAgICAgICAgICAoInVybGxpYi5lcnJvciIsCisgICAgICAgICAgICAgICAgICAgIFsiQ29udGVudFRvb1Nob3J0RXJyb3IiXSldLAorICAgICAgICAgICAidXJsbGliMiIgOiBbCisgICAgICAgICAgICAgICAgKCJ1cmxsaWIucmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgIFsidXJsb3BlbiIsICJpbnN0YWxsX29wZW5lciIsICJidWlsZF9vcGVuZXIiLAorICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QiLCAiT3BlbmVyRGlyZWN0b3IiLCAiQmFzZUhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkhUVFBEZWZhdWx0RXJyb3JIYW5kbGVyIiwgIkhUVFBSZWRpcmVjdEhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgIkhUVFBDb29raWVQcm9jZXNzb3IiLCAiUHJveHlIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJIVFRQUGFzc3dvcmRNZ3IiLAorICAgICAgICAgICAgICAgICAgICAgIkhUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0iLAorICAgICAgICAgICAgICAgICAgICAgIkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAiSFRUUEJhc2ljQXV0aEhhbmRsZXIiLCAiUHJveHlCYXNpY0F1dGhIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJIVFRQRGlnZXN0QXV0aEhhbmRsZXIiLCAiUHJveHlEaWdlc3RBdXRoSGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAiSFRUUEhhbmRsZXIiLCAiSFRUUFNIYW5kbGVyIiwgIkZpbGVIYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICJGVFBIYW5kbGVyIiwgIkNhY2hlRlRQSGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAiVW5rbm93bkhhbmRsZXIiXSksCisgICAgICAgICAgICAgICAgKCJ1cmxsaWIuZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICBbIlVSTEVycm9yIiwgIkhUVFBFcnJvciJdKSwKICAgICAgICAgICAgXQogfQogCkBAIC03OCw3ICs3OSw3IEBACiAgICAgICAgICAgIGltcG9ydCBuYW1lIHdpdGggYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBpdHMKICAgICAgICAgICAgcmVwbGFjZW1lbnRzLgogICAgICAgICAiIiIKLSAgICAgICAgaW1wb3J0X21vZCA9IHJlc3VsdHMuZ2V0KCdtb2R1bGUnKQorICAgICAgICBpbXBvcnRfbW9kID0gcmVzdWx0cy5nZXQoIm1vZHVsZSIpCiAgICAgICAgIHByZWYgPSBpbXBvcnRfbW9kLnByZWZpeAogCiAgICAgICAgIG5hbWVzID0gW10KQEAgLTk0LDkgKzk1LDkgQEAKICAgICAgICAgICAgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZCBmcm9tIHdpdGggdGhlIGFwcHJvcHJpYXRlIG5ldwogICAgICAgICAgICBtb2R1bGUuCiAgICAgICAgICIiIgotICAgICAgICBtb2RfbWVtYmVyID0gcmVzdWx0cy5nZXQoJ21vZF9tZW1iZXInKQorICAgICAgICBtb2RfbWVtYmVyID0gcmVzdWx0cy5nZXQoIm1vZF9tZW1iZXIiKQogICAgICAgICBwcmVmID0gbW9kX21lbWJlci5wcmVmaXgKLSAgICAgICAgbWVtYmVyID0gcmVzdWx0cy5nZXQoJ21lbWJlcicpCisgICAgICAgIG1lbWJlciA9IHJlc3VsdHMuZ2V0KCJtZW1iZXIiKQogCiAgICAgICAgICMgU2ltcGxlIGNhc2Ugd2l0aCBvbmx5IGEgc2luZ2xlIG1lbWJlciBiZWluZyBpbXBvcnRlZAogICAgICAgICBpZiBtZW1iZXI6CkBAIC0xMTEsMzUgKzExMiw1MSBAQAogICAgICAgICAgICAgaWYgbmV3X25hbWU6CiAgICAgICAgICAgICAgICAgbW9kX21lbWJlci5yZXBsYWNlKE5hbWUobmV3X25hbWUsIHByZWZpeD1wcmVmKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgaXMgYW4gaW52YWxpZCBtb2R1bGUgZWxlbWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAiVGhpcyBpcyBhbiBpbnZhbGlkIG1vZHVsZSBlbGVtZW50IikKIAogICAgICAgICAjIE11bHRpcGxlIG1lbWJlcnMgYmVpbmcgaW1wb3J0ZWQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgYSBkaWN0aW9uYXJ5IGZvciByZXBsYWNlbWVudHMsIG9yZGVyIG1hdHRlcnMKICAgICAgICAgICAgIG1vZHVsZXMgPSBbXQogICAgICAgICAgICAgbW9kX2RpY3QgPSB7fQotICAgICAgICAgICAgbWVtYmVycyA9IHJlc3VsdHMuZ2V0KCdtZW1iZXJzJykKKyAgICAgICAgICAgIG1lbWJlcnMgPSByZXN1bHRzWyJtZW1iZXJzIl0KICAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gbWVtYmVyczoKLSAgICAgICAgICAgICAgICBtZW1iZXIgPSBtZW1iZXIudmFsdWUKICAgICAgICAgICAgICAgICAjIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgYWN0dWFsIG1lbWJlcnMKLSAgICAgICAgICAgICAgICBpZiBtZW1iZXIgIT0gJywnOgorICAgICAgICAgICAgICAgIGlmIG1lbWJlci50eXBlID09IHN5bXMuaW1wb3J0X2FzX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGFzX25hbWUgPSBtZW1iZXIuY2hpbGRyZW5bMl0udmFsdWUKKyAgICAgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUgPSBtZW1iZXIuY2hpbGRyZW5bMF0udmFsdWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSA9IG1lbWJlci52YWx1ZQorICAgICAgICAgICAgICAgICAgICBhc19uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIG1lbWJlcl9uYW1lICE9IHUiLCI6CiAgICAgICAgICAgICAgICAgICAgIGZvciBjaGFuZ2UgaW4gTUFQUElOR1ttb2RfbWVtYmVyLnZhbHVlXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlciBpbiBjaGFuZ2VbMV06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhbmdlWzBdIGluIG1vZF9kaWN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfZGljdFtjaGFuZ2VbMF1dLmFwcGVuZChtZW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2RpY3RbY2hhbmdlWzBdXSA9IFttZW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtZW1iZXJfbmFtZSBpbiBjaGFuZ2VbMV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhbmdlWzBdIG5vdCBpbiBtb2RfZGljdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoY2hhbmdlWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9kaWN0LnNldGRlZmF1bHQoY2hhbmdlWzBdLCBbXSkuYXBwZW5kKG1lbWJlcikKIAogICAgICAgICAgICAgbmV3X25vZGVzID0gW10KKyAgICAgICAgICAgIGluZGVudGF0aW9uID0gZmluZF9pbmRlbnRhdGlvbihub2RlKQorICAgICAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgICAgICBkZWYgaGFuZGxlX25hbWUobmFtZSwgcHJlZml4KToKKyAgICAgICAgICAgICAgICBpZiBuYW1lLnR5cGUgPT0gc3ltcy5pbXBvcnRfYXNfbmFtZToKKyAgICAgICAgICAgICAgICAgICAga2lkcyA9IFtOYW1lKG5hbWUuY2hpbGRyZW5bMF0udmFsdWUsIHByZWZpeD1wcmVmaXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuY2hpbGRyZW5bMV0uY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLmNoaWxkcmVuWzJdLmNsb25lKCldCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbTm9kZShzeW1zLmltcG9ydF9hc19uYW1lLCBraWRzKV0KKyAgICAgICAgICAgICAgICByZXR1cm4gW05hbWUobmFtZS52YWx1ZSwgcHJlZml4PXByZWZpeCldCiAgICAgICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6CiAgICAgICAgICAgICAgICAgZWx0cyA9IG1vZF9kaWN0W21vZHVsZV0KICAgICAgICAgICAgICAgICBuYW1lcyA9IFtdCiAgICAgICAgICAgICAgICAgZm9yIGVsdCBpbiBlbHRzWzotMV06Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVzLmV4dGVuZChbTmFtZShlbHQsIHByZWZpeD1wcmVmKSwgQ29tbWEoKV0pCi0gICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKE5hbWUoZWx0c1stMV0sIHByZWZpeD1wcmVmKSkKLSAgICAgICAgICAgICAgICBuZXdfbm9kZXMuYXBwZW5kKEZyb21JbXBvcnQobW9kdWxlLCBuYW1lcykpCisgICAgICAgICAgICAgICAgICAgIG5hbWVzLmV4dGVuZChoYW5kbGVfbmFtZShlbHQsIHByZWYpKQorICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoQ29tbWEoKSkKKyAgICAgICAgICAgICAgICBuYW1lcy5leHRlbmQoaGFuZGxlX25hbWUoZWx0c1stMV0sIHByZWYpKQorICAgICAgICAgICAgICAgIG5ldyA9IEZyb21JbXBvcnQobW9kdWxlLCBuYW1lcykKKyAgICAgICAgICAgICAgICBpZiBub3QgZmlyc3Qgb3Igbm9kZS5wYXJlbnQucHJlZml4LmVuZHN3aXRoKGluZGVudGF0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgbmV3LnByZWZpeCA9IGluZGVudGF0aW9uCisgICAgICAgICAgICAgICAgbmV3X25vZGVzLmFwcGVuZChuZXcpCisgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgaWYgbmV3X25vZGVzOgogICAgICAgICAgICAgICAgIG5vZGVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgbmV3X25vZGUgaW4gbmV3X25vZGVzWzotMV06CkBAIC0xNDcsMTIgKzE2NCwxMiBAQAogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuZXdfbm9kZXNbLTFdKQogICAgICAgICAgICAgICAgIG5vZGUucmVwbGFjZShub2RlcykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAnQWxsIG1vZHVsZSBlbGVtZW50cyBhcmUgaW52YWxpZCcpCisgICAgICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAiQWxsIG1vZHVsZSBlbGVtZW50cyBhcmUgaW52YWxpZCIpCiAKICAgICBkZWYgdHJhbnNmb3JtX2RvdChzZWxmLCBub2RlLCByZXN1bHRzKToKICAgICAgICAgIiIiVHJhbnNmb3JtIGZvciBjYWxscyB0byBtb2R1bGUgbWVtYmVycyBpbiBjb2RlLiIiIgotICAgICAgICBtb2R1bGVfZG90ID0gcmVzdWx0cy5nZXQoJ2JhcmVfd2l0aF9hdHRyJykKLSAgICAgICAgbWVtYmVyID0gcmVzdWx0cy5nZXQoJ21lbWJlcicpCisgICAgICAgIG1vZHVsZV9kb3QgPSByZXN1bHRzLmdldCgiYmFyZV93aXRoX2F0dHIiKQorICAgICAgICBtZW1iZXIgPSByZXN1bHRzLmdldCgibWVtYmVyIikKICAgICAgICAgbmV3X25hbWUgPSBOb25lCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyLCBsaXN0KToKICAgICAgICAgICAgIG1lbWJlciA9IG1lbWJlclswXQpAQCAtMTY0LDE3ICsxODEsMTcgQEAKICAgICAgICAgICAgIG1vZHVsZV9kb3QucmVwbGFjZShOYW1lKG5ld19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PW1vZHVsZV9kb3QucHJlZml4KSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgJ1RoaXMgaXMgYW4gaW52YWxpZCBtb2R1bGUgZWxlbWVudCcpCisgICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICJUaGlzIGlzIGFuIGludmFsaWQgbW9kdWxlIGVsZW1lbnQiKQogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgaWYgcmVzdWx0cy5nZXQoJ21vZHVsZScpOgorICAgICAgICBpZiByZXN1bHRzLmdldCgibW9kdWxlIik6CiAgICAgICAgICAgICBzZWxmLnRyYW5zZm9ybV9pbXBvcnQobm9kZSwgcmVzdWx0cykKLSAgICAgICAgZWxpZiByZXN1bHRzLmdldCgnbW9kX21lbWJlcicpOgorICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCJtb2RfbWVtYmVyIik6CiAgICAgICAgICAgICBzZWxmLnRyYW5zZm9ybV9tZW1iZXIobm9kZSwgcmVzdWx0cykKLSAgICAgICAgZWxpZiByZXN1bHRzLmdldCgnYmFyZV93aXRoX2F0dHInKToKKyAgICAgICAgZWxpZiByZXN1bHRzLmdldCgiYmFyZV93aXRoX2F0dHIiKToKICAgICAgICAgICAgIHNlbGYudHJhbnNmb3JtX2RvdChub2RlLCByZXN1bHRzKQogICAgICAgICAjIFJlbmFtaW5nIGFuZCBzdGFyIGltcG9ydHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZXNlIG1vZHVsZXMuCi0gICAgICAgIGVsaWYgcmVzdWx0cy5nZXQoJ21vZHVsZV9zdGFyJyk6Ci0gICAgICAgICAgICBzZWxmLmNhbm5vdF9jb252ZXJ0KG5vZGUsICdDYW5ub3QgaGFuZGxlIHN0YXIgaW1wb3J0cy4nKQotICAgICAgICBlbGlmIHJlc3VsdHMuZ2V0KCdtb2R1bGVfYXMnKToKLSAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgJ1RoaXMgbW9kdWxlIGlzIG5vdyBtdWx0aXBsZSBtb2R1bGVzJykKKyAgICAgICAgZWxpZiByZXN1bHRzLmdldCgibW9kdWxlX3N0YXIiKToKKyAgICAgICAgICAgIHNlbGYuY2Fubm90X2NvbnZlcnQobm9kZSwgIkNhbm5vdCBoYW5kbGUgc3RhciBpbXBvcnRzLiIpCisgICAgICAgIGVsaWYgcmVzdWx0cy5nZXQoIm1vZHVsZV9hcyIpOgorICAgICAgICAgICAgc2VsZi5jYW5ub3RfY29udmVydChub2RlLCAiVGhpcyBtb2R1bGUgaXMgbm93IG11bHRpcGxlIG1vZHVsZXMiKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyYW5nZS5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmFuZ2UucHkKaW5kZXggMmViMTA2NS4uZjE0MzY3MiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3hyYW5nZS5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJhbmdlLnB5CkBAIC0xMCw3ICsxMCw3IEBACiAKIAogY2xhc3MgRml4WHJhbmdlKGZpeGVyX2Jhc2UuQmFzZUZpeCk6Ci0KKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICAgICAgICAgICAgcG93ZXI8CiAgICAgICAgICAgICAgICAgIChuYW1lPSdyYW5nZSd8bmFtZT0neHJhbmdlJykgdHJhaWxlcjwgJygnIGFyZ3M9YW55ICcpJyA+CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfeHJlYWRsaW5lcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmVhZGxpbmVzLnB5CmluZGV4IGVlNGIzNTYuLmY1MGI5YTIgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmVhZGxpbmVzLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF94cmVhZGxpbmVzLnB5CkBAIC05LDYgKzksNyBAQAogCiAKIGNsYXNzIEZpeFhyZWFkbGluZXMoZml4ZXJfYmFzZS5CYXNlRml4KToKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgY2FsbD1hbnkrIHRyYWlsZXI8ICcuJyAneHJlYWRsaW5lcycgPiB0cmFpbGVyPCAnKCcgJyknID4gPgogICAgIHwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF96aXAucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfemlwLnB5CmluZGV4IDY3MzZhN2UuLmM1ZDdiNjYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF96aXAucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X3ppcC5weQpAQCAtMTMsNiArMTMsNyBAQAogCiBjbGFzcyBGaXhaaXAoZml4ZXJfYmFzZS5Db25kaXRpb25hbEZpeCk6CiAKKyAgICBCTV9jb21wYXRpYmxlID0gVHJ1ZQogICAgIFBBVFRFUk4gPSAiIiIKICAgICBwb3dlcjwgJ3ppcCcgYXJncz10cmFpbGVyPCAnKCcgW2FueV0gJyknID4KICAgICA+CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmZmE0MmFiLi4zOTI5ZGI3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgIHBhcnNlci5hZGRfb3B0aW9uKCItaiIsICItLXByb2Nlc3NlcyIsIGFjdGlvbj0ic3RvcmUiLCBkZWZhdWx0PTEsCiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iaW50IiwgaGVscD0iUnVuIDJ0bzMgY29uY3VycmVudGx5IikKICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXgiLCAiLS1ub2ZpeCIsIGFjdGlvbj0iYXBwZW5kIiwgZGVmYXVsdD1bXSwKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmV2ZW50IGEgZml4ZXIgZnJvbSBiZWluZyBydW4uIikKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQcmV2ZW50IGEgdHJhbnNmb3JtYXRpb24gZnJvbSBiZWluZyBydW4iKQogICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxpc3QtZml4ZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ikxpc3QgYXZhaWxhYmxlIHRyYW5zZm9ybWF0aW9ucyIpCiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1wIiwgIi0tcHJpbnQtZnVuY3Rpb24iLCBhY3Rpb249InN0b3JlX3RydWUiLApAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi13IiwgIi0td3JpdGUiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IldyaXRlIGJhY2sgbW9kaWZpZWQgZmlsZXMiKQogICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5vYmFja3VwcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iRG9uJ3Qgd3JpdGUgYmFja3VwcyBmb3IgbW9kaWZpZWQgZmlsZXMuIikKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEb24ndCB3cml0ZSBiYWNrdXBzIGZvciBtb2RpZmllZCBmaWxlcyIpCiAKICAgICAjIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKICAgICByZWZhY3Rvcl9zdGRpbiA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wYXRjb21wLnB5IGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQppbmRleCBkYWE2N2ZhLi4wOTNlNWY5IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wYXRjb21wLnB5CisrKyBiL0xpYi9saWIydG8zL3BhdGNvbXAucHkKQEAgLTEyLDYgKzEyLDcgQEAKIAogIyBQeXRob24gaW1wb3J0cwogaW1wb3J0IG9zCitpbXBvcnQgU3RyaW5nSU8KIAogIyBGYWlybHkgbG9jYWwgaW1wb3J0cwogZnJvbSAucGdlbjIgaW1wb3J0IGRyaXZlciwgbGl0ZXJhbHMsIHRva2VuLCB0b2tlbml6ZSwgcGFyc2UsIGdyYW1tYXIKQEAgLTMyLDcgKzMzLDcgQEAKIGRlZiB0b2tlbml6ZV93cmFwcGVyKGlucHV0KToKICAgICAiIiJUb2tlbml6ZXMgYSBzdHJpbmcgc3VwcHJlc3Npbmcgc2lnbmlmaWNhbnQgd2hpdGVzcGFjZS4iIiIKICAgICBza2lwID0gc2V0KCh0b2tlbi5ORVdMSU5FLCB0b2tlbi5JTkRFTlQsIHRva2VuLkRFREVOVCkpCi0gICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGRyaXZlci5nZW5lcmF0ZV9saW5lcyhpbnB1dCkubmV4dCkKKyAgICB0b2tlbnMgPSB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMoU3RyaW5nSU8uU3RyaW5nSU8oaW5wdXQpLnJlYWRsaW5lKQogICAgIGZvciBxdWludHVwbGUgaW4gdG9rZW5zOgogICAgICAgICB0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbGluZV90ZXh0ID0gcXVpbnR1cGxlCiAgICAgICAgIGlmIHR5cGUgbm90IGluIHNraXA6CkBAIC01MiwxNCArNTMsMTcgQEAKICAgICAgICAgc2VsZi5weXN5bXMgPSBweWdyYW0ucHl0aG9uX3N5bWJvbHMKICAgICAgICAgc2VsZi5kcml2ZXIgPSBkcml2ZXIuRHJpdmVyKHNlbGYuZ3JhbW1hciwgY29udmVydD1wYXR0ZXJuX2NvbnZlcnQpCiAKLSAgICBkZWYgY29tcGlsZV9wYXR0ZXJuKHNlbGYsIGlucHV0LCBkZWJ1Zz1GYWxzZSk6CisgICAgZGVmIGNvbXBpbGVfcGF0dGVybihzZWxmLCBpbnB1dCwgZGVidWc9RmFsc2UsIHdpdGhfdHJlZT1GYWxzZSk6CiAgICAgICAgICIiIkNvbXBpbGVzIGEgcGF0dGVybiBzdHJpbmcgdG8gYSBuZXN0ZWQgcHl0cmVlLipQYXR0ZXJuIG9iamVjdC4iIiIKICAgICAgICAgdG9rZW5zID0gdG9rZW5pemVfd3JhcHBlcihpbnB1dCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcm9vdCA9IHNlbGYuZHJpdmVyLnBhcnNlX3Rva2Vucyh0b2tlbnMsIGRlYnVnPWRlYnVnKQotICAgICAgICBleGNlcHQgcGFyc2UuUGFyc2VFcnJvciwgZToKKyAgICAgICAgZXhjZXB0IHBhcnNlLlBhcnNlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFBhdHRlcm5TeW50YXhFcnJvcihzdHIoZSkpCi0gICAgICAgIHJldHVybiBzZWxmLmNvbXBpbGVfbm9kZShyb290KQorICAgICAgICBpZiB3aXRoX3RyZWU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21waWxlX25vZGUocm9vdCksIHJvb3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbXBpbGVfbm9kZShyb290KQogCiAgICAgZGVmIGNvbXBpbGVfbm9kZShzZWxmLCBub2RlKToKICAgICAgICAgIiIiQ29tcGlsZXMgYSBub2RlLCByZWN1cnNpdmVseS4KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weSBiL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQppbmRleCA2YjM4MjVlLi4xNmFkZWMwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCitpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKIAogIyBQZ2VuIGltcG9ydHMKQEAgLTEwMSwxOCArMTAyLDEwIEBACiAKICAgICBkZWYgcGFyc2Vfc3RyaW5nKHNlbGYsIHRleHQsIGRlYnVnPUZhbHNlKToKICAgICAgICAgIiIiUGFyc2UgYSBzdHJpbmcgYW5kIHJldHVybiB0aGUgc3ludGF4IHRyZWUuIiIiCi0gICAgICAgIHRva2VucyA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhnZW5lcmF0ZV9saW5lcyh0ZXh0KS5uZXh0KQorICAgICAgICB0b2tlbnMgPSB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMoU3RyaW5nSU8uU3RyaW5nSU8odGV4dCkucmVhZGxpbmUpCiAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3Rva2Vucyh0b2tlbnMsIGRlYnVnKQogCiAKLWRlZiBnZW5lcmF0ZV9saW5lcyh0ZXh0KToKLSAgICAiIiJHZW5lcmF0b3IgdGhhdCBiZWhhdmVzIGxpa2UgcmVhZGxpbmUgd2l0aG91dCB1c2luZyBTdHJpbmdJTy4iIiIKLSAgICBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoVHJ1ZSk6Ci0gICAgICAgIHlpZWxkIGxpbmUKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICB5aWVsZCAiIgotCi0KIGRlZiBsb2FkX2dyYW1tYXIoZ3Q9IkdyYW1tYXIudHh0IiwgZ3A9Tm9uZSwKICAgICAgICAgICAgICAgICAgc2F2ZT1UcnVlLCBmb3JjZT1GYWxzZSwgbG9nZ2VyPU5vbmUpOgogICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgKG1heWJlIGZyb20gYSBwaWNrbGUpLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcHlncmFtLnB5IGIvTGliL2xpYjJ0bzMvcHlncmFtLnB5CmluZGV4IDZjZGIzYTQuLjYyMWZmMjQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3B5Z3JhbS5weQorKysgYi9MaWIvbGliMnRvMy9weWdyYW0ucHkKQEAgLTEzLDYgKzEzLDggQEAKIAogIyBUaGUgZ3JhbW1hciBmaWxlCiBfR1JBTU1BUl9GSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJHcmFtbWFyLnR4dCIpCitfUEFUVEVSTl9HUkFNTUFSX0ZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGF0dGVybkdyYW1tYXIudHh0IikKIAogCiBjbGFzcyBTeW1ib2xzKG9iamVjdCk6CkBAIC0zMywzICszNSw2IEBACiAKIHB5dGhvbl9ncmFtbWFyX25vX3ByaW50X3N0YXRlbWVudCA9IHB5dGhvbl9ncmFtbWFyLmNvcHkoKQogZGVsIHB5dGhvbl9ncmFtbWFyX25vX3ByaW50X3N0YXRlbWVudC5rZXl3b3Jkc1sicHJpbnQiXQorCitwYXR0ZXJuX2dyYW1tYXIgPSBkcml2ZXIubG9hZF9ncmFtbWFyKF9QQVRURVJOX0dSQU1NQVJfRklMRSkKK3BhdHRlcm5fc3ltYm9scyA9IFN5bWJvbHMocGF0dGVybl9ncmFtbWFyKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcHl0cmVlLnB5IGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CmluZGV4IDYyNDVjOGMuLmIyNDI4M2UgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3B5dHJlZS5weQorKysgYi9MaWIvbGliMnRvMy9weXRyZWUucHkKQEAgLTE2LDcgKzE2LDYgQEAKIGltcG9ydCB3YXJuaW5ncwogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAotCiBIVUdFID0gMHg3RkZGRkZGRiAgIyBtYXhpbXVtIHJlcGVhdCBjb3VudCwgZGVmYXVsdCBtYXgKIAogX3R5cGVfcmVwcnMgPSB7fQpAQCAtMzAsNyArMjksNiBAQAogICAgICAgICAgICAgaWYgdHlwZSh2YWwpID09IGludDogX3R5cGVfcmVwcnNbdmFsXSA9IG5hbWUKICAgICByZXR1cm4gX3R5cGVfcmVwcnMuc2V0ZGVmYXVsdCh0eXBlX251bSwgdHlwZV9udW0pCiAKLQogY2xhc3MgQmFzZShvYmplY3QpOgogCiAgICAgIiIiCkBAIC00Nyw2ICs0NSw3IEBACiAgICAgcGFyZW50ID0gTm9uZSAgIyBQYXJlbnQgbm9kZSBwb2ludGVyLCBvciBOb25lCiAgICAgY2hpbGRyZW4gPSAoKSAgIyBUdXBsZSBvZiBzdWJub2RlcwogICAgIHdhc19jaGFuZ2VkID0gRmFsc2UKKyAgICB3YXNfY2hlY2tlZCA9IEZhbHNlCiAKICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAiIiJDb25zdHJ1Y3RvciB0aGF0IHByZXZlbnRzIEJhc2UgZnJvbSBiZWluZyBpbnN0YW50aWF0ZWQuIiIiCkBAIC0yMTMsNiArMjEyLDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50LmNoaWxkcmVuW2ktMV0KIAorICAgIGRlZiBsZWF2ZXMoc2VsZik6CisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgorICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6CisgICAgICAgICAgICAgICAgeWllbGQgeAorCisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgcmV0dXJuIDEgKyBzZWxmLnBhcmVudC5kZXB0aCgpCisKICAgICBkZWYgZ2V0X3N1ZmZpeChzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybiB0aGUgc3RyaW5nIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgaW52b2NhbnQgbm9kZS4gVGhpcyBpcwpAQCAtMjI3LDEyICsyMzYsMTQgQEAKICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gdW5pY29kZShzZWxmKS5lbmNvZGUoImFzY2lpIikKIAotCiBjbGFzcyBOb2RlKEJhc2UpOgogCiAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gZm9yIGludGVyaW9yIG5vZGVzLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIGNoaWxkcmVuLCBjb250ZXh0PU5vbmUsIHByZWZpeD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZix0eXBlLCBjaGlsZHJlbiwKKyAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lLAorICAgICAgICAgICAgICAgICBwcmVmaXg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZml4ZXJzX2FwcGxpZWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplci4KIApAQCAtMjQ5LDYgKzI2MCwxMCBAQAogICAgICAgICAgICAgY2gucGFyZW50ID0gc2VsZgogICAgICAgICBpZiBwcmVmaXggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAorICAgICAgICBpZiBmaXhlcnNfYXBwbGllZDoKKyAgICAgICAgICAgIHNlbGYuZml4ZXJzX2FwcGxpZWQgPSBmaXhlcnNfYXBwbGllZFs6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maXhlcnNfYXBwbGllZCA9IE5vbmUKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4iIiIKQEAgLTI3Myw3ICsyODgsOCBAQAogCiAgICAgZGVmIGNsb25lKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBjbG9uZWQgKGRlZXApIGNvcHkgb2Ygc2VsZi4iIiIKLSAgICAgICAgcmV0dXJuIE5vZGUoc2VsZi50eXBlLCBbY2guY2xvbmUoKSBmb3IgY2ggaW4gc2VsZi5jaGlsZHJlbl0pCisgICAgICAgIHJldHVybiBOb2RlKHNlbGYudHlwZSwgW2NoLmNsb25lKCkgZm9yIGNoIGluIHNlbGYuY2hpbGRyZW5dLAorICAgICAgICAgICAgICAgICAgICBmaXhlcnNfYXBwbGllZD1zZWxmLmZpeGVyc19hcHBsaWVkKQogCiAgICAgZGVmIHBvc3Rfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHBvc3Qtb3JkZXIgaXRlcmF0b3IgZm9yIHRoZSB0cmVlLiIiIgpAQCAtMjg2LDcgKzMwMiw3IEBACiAgICAgICAgICIiIlJldHVybiBhIHByZS1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wb3N0X29yZGVyKCk6CisgICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wcmVfb3JkZXIoKToKICAgICAgICAgICAgICAgICB5aWVsZCBub2RlCiAKICAgICBkZWYgX3ByZWZpeF9nZXR0ZXIoc2VsZik6CkBAIC0zNDEsNyArMzU3LDEwIEBACiAgICAgbGluZW5vID0gMCAgICAjIExpbmUgd2hlcmUgdGhpcyB0b2tlbiBzdGFydHMgaW4gdGhlIGlucHV0CiAgICAgY29sdW1uID0gMCAgICAjIENvbHVtbiB3aGVyZSB0aGlzIHRva2VuIHRhcnRzIGluIHRoZSBpbnB1dAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCBjb250ZXh0PU5vbmUsIHByZWZpeD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgIGNvbnRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcHJlZml4PU5vbmUsCisgICAgICAgICAgICAgICAgIGZpeGVyc19hcHBsaWVkPVtdKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemVyLgogCkBAIC0zNTUsNiArMzc0LDcgQEAKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAorICAgICAgICBzZWxmLmZpeGVyc19hcHBsaWVkID0gZml4ZXJzX2FwcGxpZWRbOl0KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4iIiIKQEAgLTM4MCw3ICs0MDAsMTEgQEAKICAgICBkZWYgY2xvbmUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGNsb25lZCAoZGVlcCkgY29weSBvZiBzZWxmLiIiIgogICAgICAgICByZXR1cm4gTGVhZihzZWxmLnR5cGUsIHNlbGYudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLnByZWZpeCwgKHNlbGYubGluZW5vLCBzZWxmLmNvbHVtbikpKQorICAgICAgICAgICAgICAgICAgICAoc2VsZi5wcmVmaXgsIChzZWxmLmxpbmVubywgc2VsZi5jb2x1bW4pKSwKKyAgICAgICAgICAgICAgICAgICAgZml4ZXJzX2FwcGxpZWQ9c2VsZi5maXhlcnNfYXBwbGllZCkKKworICAgIGRlZiBsZWF2ZXMoc2VsZik6CisgICAgICAgIHlpZWxkIHNlbGYKIAogICAgIGRlZiBwb3N0X29yZGVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwb3N0LW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5IGIvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKaW5kZXggM2U5NDY5OS4uN2QwMGQxMiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKKysrIGIvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKQEAgLTI0LDcgKzI0LDEwIEBACiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSAucGdlbjIgaW1wb3J0IGRyaXZlciwgdG9rZW5pemUsIHRva2VuCitmcm9tIC5maXhlcl91dGlsIGltcG9ydCBmaW5kX3Jvb3QKIGZyb20gLiBpbXBvcnQgcHl0cmVlLCBweWdyYW0KK2Zyb20gLiBpbXBvcnQgYnRtX3V0aWxzIGFzIGJ1Citmcm9tIC4gaW1wb3J0IGJ0bV9tYXRjaGVyIGFzIGJtCiAKIAogZGVmIGdldF9hbGxfZml4X25hbWVzKGZpeGVyX3BrZywgcmVtb3ZlX3ByZWZpeD1UcnVlKToKQEAgLTIwMSwxMSArMjA0LDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXI9c2VsZi5sb2dnZXIpCiAgICAgICAgIHNlbGYucHJlX29yZGVyLCBzZWxmLnBvc3Rfb3JkZXIgPSBzZWxmLmdldF9maXhlcnMoKQogCi0gICAgICAgIHNlbGYucHJlX29yZGVyX2hlYWRzID0gX2dldF9oZWFkbm9kZV9kaWN0KHNlbGYucHJlX29yZGVyKQotICAgICAgICBzZWxmLnBvc3Rfb3JkZXJfaGVhZHMgPSBfZ2V0X2hlYWRub2RlX2RpY3Qoc2VsZi5wb3N0X29yZGVyKQogCiAgICAgICAgIHNlbGYuZmlsZXMgPSBbXSAgIyBMaXN0IG9mIGZpbGVzIHRoYXQgd2VyZSBvciBzaG91bGQgYmUgbW9kaWZpZWQKIAorICAgICAgICBzZWxmLkJNID0gYm0uQm90dG9tTWF0Y2hlcigpCisgICAgICAgIHNlbGYuYm1pX3ByZV9vcmRlciA9IFtdICMgQm90dG9tIE1hdGNoZXIgaW5jb21wYXRpYmxlIGZpeGVycworICAgICAgICBzZWxmLmJtaV9wb3N0X29yZGVyID0gW10KKworICAgICAgICBmb3IgZml4ZXIgaW4gY2hhaW4oc2VsZi5wb3N0X29yZGVyLCBzZWxmLnByZV9vcmRlcik6CisgICAgICAgICAgICBpZiBmaXhlci5CTV9jb21wYXRpYmxlOgorICAgICAgICAgICAgICAgIHNlbGYuQk0uYWRkX2ZpeGVyKGZpeGVyKQorICAgICAgICAgICAgICAgICMgcmVtb3ZlIGZpeGVycyB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgYm90dG9tLXVwCisgICAgICAgICAgICAgICAgIyBtYXRjaGVyCisgICAgICAgICAgICBlbGlmIGZpeGVyIGluIHNlbGYucHJlX29yZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYm1pX3ByZV9vcmRlci5hcHBlbmQoZml4ZXIpCisgICAgICAgICAgICBlbGlmIGZpeGVyIGluIHNlbGYucG9zdF9vcmRlcjoKKyAgICAgICAgICAgICAgICBzZWxmLmJtaV9wb3N0X29yZGVyLmFwcGVuZChmaXhlcikKKworICAgICAgICBzZWxmLmJtaV9wcmVfb3JkZXJfaGVhZHMgPSBfZ2V0X2hlYWRub2RlX2RpY3Qoc2VsZi5ibWlfcHJlX29yZGVyKQorICAgICAgICBzZWxmLmJtaV9wb3N0X29yZGVyX2hlYWRzID0gX2dldF9oZWFkbm9kZV9kaWN0KHNlbGYuYm1pX3Bvc3Rfb3JkZXIpCisKKworCiAgICAgZGVmIGdldF9maXhlcnMoc2VsZik6CiAgICAgICAgICIiIkluc3BlY3RzIHRoZSBvcHRpb25zIHRvIGxvYWQgdGhlIHJlcXVlc3RlZCBwYXR0ZXJucyBhbmQgaGFuZGxlcnMuCiAKQEAgLTI2OCw2ICsyODgsNyBAQAogCiAgICAgZGVmIHJlZmFjdG9yKHNlbGYsIGl0ZW1zLCB3cml0ZT1GYWxzZSwgZG9jdGVzdHNfb25seT1GYWxzZSk6CiAgICAgICAgICIiIlJlZmFjdG9yIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIiIiCisKICAgICAgICAgZm9yIGRpcl9vcl9maWxlIGluIGl0ZW1zOgogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkaXJfb3JfZmlsZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5yZWZhY3Rvcl9kaXIoZGlyX29yX2ZpbGUsIHdyaXRlLCBkb2N0ZXN0c19vbmx5KQpAQCAtMjgxLDEzICszMDIsMTQgQEAKIAogICAgICAgICBGaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgc3RhcnRpbmcgd2l0aCAnLicgYXJlIHNraXBwZWQuCiAgICAgICAgICIiIgorICAgICAgICBweV9leHQgPSBvcy5leHRzZXAgKyAicHkiCiAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGlyX25hbWUpOgogICAgICAgICAgICAgc2VsZi5sb2dfZGVidWcoIkRlc2NlbmRpbmcgaW50byAlcyIsIGRpcnBhdGgpCiAgICAgICAgICAgICBkaXJuYW1lcy5zb3J0KCkKICAgICAgICAgICAgIGZpbGVuYW1lcy5zb3J0KCkKICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCIuIikgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXRleHQobmFtZSlbMV0uZW5kc3dpdGgoInB5Iik6CisgICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lLnN0YXJ0c3dpdGgoIi4iKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChuYW1lKVsxXSA9PSBweV9leHQpOgogICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZmFjdG9yX2ZpbGUoZnVsbG5hbWUsIHdyaXRlLCBkb2N0ZXN0c19vbmx5KQogICAgICAgICAgICAgIyBNb2RpZnkgZGlybmFtZXMgaW4tcGxhY2UgdG8gcmVtb3ZlIHN1YmRpcnMgd2l0aCBsZWFkaW5nIGRvdHMKQEAgLTI5OSw3ICszMjEsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgICAgICB0cnk6CkBAIC0zNDgsNyArMzcwLDcgQEAKICAgICAgICAgICAgIHNlbGYuZHJpdmVyLmdyYW1tYXIgPSBweWdyYW0ucHl0aG9uX2dyYW1tYXJfbm9fcHJpbnRfc3RhdGVtZW50CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRyZWUgPSBzZWxmLmRyaXZlci5wYXJzZV9zdHJpbmcoZGF0YSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJDYW4ndCBwYXJzZSAlczogJXM6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGVyci5fX2NsYXNzX18uX19uYW1lX18sIGVycikKICAgICAgICAgICAgIHJldHVybgpAQCAtMzc4LDYgKzQwMCwxMCBAQAogICAgIGRlZiByZWZhY3Rvcl90cmVlKHNlbGYsIHRyZWUsIG5hbWUpOgogICAgICAgICAiIiJSZWZhY3RvcnMgYSBwYXJzZSB0cmVlIChtb2RpZnlpbmcgdGhlIHRyZWUgaW4gcGxhY2UpLgogCisgICAgICAgIEZvciBjb21wYXRpYmxlIHBhdHRlcm5zIHRoZSBib3R0b20gbWF0Y2hlciBtb2R1bGUgaXMKKyAgICAgICAgdXNlZC4gT3RoZXJ3aXNlIHRoZSB0cmVlIGlzIHRyYXZlcnNlZCBub2RlLXRvLW5vZGUgZm9yCisgICAgICAgIG1hdGNoZXMuCisKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIHRyZWU6IGEgcHl0cmVlLk5vZGUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSByb290IG9mIHRoZSB0cmVlCiAgICAgICAgICAgICAgICAgICB0byBiZSByZWZhY3RvcmVkLgpAQCAtMzg2LDExICs0MTIsNjUgQEAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIFRydWUgaWYgdGhlIHRyZWUgd2FzIG1vZGlmaWVkLCBGYWxzZSBvdGhlcndpc2UuCiAgICAgICAgICIiIgorCiAgICAgICAgIGZvciBmaXhlciBpbiBjaGFpbihzZWxmLnByZV9vcmRlciwgc2VsZi5wb3N0X29yZGVyKToKICAgICAgICAgICAgIGZpeGVyLnN0YXJ0X3RyZWUodHJlZSwgbmFtZSkKIAotICAgICAgICBzZWxmLnRyYXZlcnNlX2J5KHNlbGYucHJlX29yZGVyX2hlYWRzLCB0cmVlLnByZV9vcmRlcigpKQotICAgICAgICBzZWxmLnRyYXZlcnNlX2J5KHNlbGYucG9zdF9vcmRlcl9oZWFkcywgdHJlZS5wb3N0X29yZGVyKCkpCisgICAgICAgICN1c2UgdHJhZGl0aW9uYWwgbWF0Y2hpbmcgZm9yIHRoZSBpbmNvbXBhdGlibGUgZml4ZXJzCisgICAgICAgIHNlbGYudHJhdmVyc2VfYnkoc2VsZi5ibWlfcHJlX29yZGVyX2hlYWRzLCB0cmVlLnByZV9vcmRlcigpKQorICAgICAgICBzZWxmLnRyYXZlcnNlX2J5KHNlbGYuYm1pX3Bvc3Rfb3JkZXJfaGVhZHMsIHRyZWUucG9zdF9vcmRlcigpKQorCisgICAgICAgICMgb2J0YWluIGEgc2V0IG9mIGNhbmRpZGF0ZSBub2RlcworICAgICAgICBtYXRjaF9zZXQgPSBzZWxmLkJNLnJ1bih0cmVlLmxlYXZlcygpKQorCisgICAgICAgIHdoaWxlIGFueShtYXRjaF9zZXQudmFsdWVzKCkpOgorICAgICAgICAgICAgZm9yIGZpeGVyIGluIHNlbGYuQk0uZml4ZXJzOgorICAgICAgICAgICAgICAgIGlmIGZpeGVyIGluIG1hdGNoX3NldCBhbmQgbWF0Y2hfc2V0W2ZpeGVyXToKKyAgICAgICAgICAgICAgICAgICAgI3NvcnQgYnkgZGVwdGg7IGFwcGx5IGZpeGVycyBmcm9tIGJvdHRvbShvZiB0aGUgQVNUKSB0byB0b3AKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfc2V0W2ZpeGVyXS5zb3J0KGtleT1weXRyZWUuQmFzZS5kZXB0aCwgcmV2ZXJzZT1UcnVlKQorCisgICAgICAgICAgICAgICAgICAgIGlmIGZpeGVyLmtlZXBfbGluZV9vcmRlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICNzb21lIGZpeGVycyhlZyBmaXhfaW1wb3J0cykgbXVzdCBiZSBhcHBsaWVkCisgICAgICAgICAgICAgICAgICAgICAgICAjd2l0aCB0aGUgb3JpZ2luYWwgZmlsZSdzIGxpbmUgb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3NldFtmaXhlcl0uc29ydChrZXk9cHl0cmVlLkJhc2UuZ2V0X2xpbmVubykKKworICAgICAgICAgICAgICAgICAgICBmb3Igbm9kZSBpbiBsaXN0KG1hdGNoX3NldFtmaXhlcl0pOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm9kZSBpbiBtYXRjaF9zZXRbZml4ZXJdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3NldFtmaXhlcl0ucmVtb3ZlKG5vZGUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3Jvb3Qobm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgbm9kZSBoYXMgYmVlbiBjdXQgb2ZmIGZyb20gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHJldmlvdXMgdHJhbnNmb3JtYXRpb24gOyBza2lwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm9kZS5maXhlcnNfYXBwbGllZCBhbmQgZml4ZXIgaW4gbm9kZS5maXhlcnNfYXBwbGllZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBhcHBseSB0aGUgc2FtZSBmaXhlciBhZ2FpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBmaXhlci5tYXRjaChub2RlKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyA9IGZpeGVyLnRyYW5zZm9ybShub2RlLCByZXN1bHRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5ldyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5yZXBsYWNlKG5ldykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25ldy5maXhlcnNfYXBwbGllZC5hcHBlbmQoZml4ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBub2RlIGluIG5ldy5wb3N0X29yZGVyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBhcHBseSB0aGUgZml4ZXIgYWdhaW4gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBvciBhbnkgc3Vibm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5vZGUuZml4ZXJzX2FwcGxpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5maXhlcnNfYXBwbGllZCA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmZpeGVyc19hcHBsaWVkLmFwcGVuZChmaXhlcikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgb3JpZ2luYWwgbWF0Y2ggc2V0IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBhZGRlZCBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19tYXRjaGVzID0gc2VsZi5CTS5ydW4obmV3LmxlYXZlcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZnhyIGluIG5ld19tYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZ4ciBpbiBtYXRjaF9zZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfc2V0W2Z4cl09W10KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfc2V0W2Z4cl0uZXh0ZW5kKG5ld19tYXRjaGVzW2Z4cl0pCiAKICAgICAgICAgZm9yIGZpeGVyIGluIGNoYWluKHNlbGYucHJlX29yZGVyLCBzZWxmLnBvc3Rfb3JkZXIpOgogICAgICAgICAgICAgZml4ZXIuZmluaXNoX3RyZWUodHJlZSwgbmFtZSkKQEAgLTQ0OCwxMiArNTI4LDEyIEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX29wZW5fd2l0aF9lbmNvZGluZyhmaWxlbmFtZSwgInciLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yLCBlcnI6CisgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgd3JpdGUgJXM6ICVzIiwgZmlsZW5hbWUsIGVycikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQpAQCAtNTE2LDggKzU5Niw4IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0cmVlID0gc2VsZi5wYXJzZV9ibG9jayhibG9jaywgbGluZW5vLCBpbmRlbnQpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKLSAgICAgICAgICAgIGlmIHNlbGYubG9nLmlzRW5hYmxlZEZvcihsb2dnaW5nLkRFQlVHKToKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICBpZiBzZWxmLmxvZ2dlci5pc0VuYWJsZWRGb3IobG9nZ2luZy5ERUJVRyk6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gYmxvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX2RlYnVnKCJTb3VyY2U6ICVzIiwgbGluZS5yc3RyaXAodSJcbiIpKQogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHBhcnNlIGRvY3N0cmluZyBpbiAlcyBsaW5lICVzOiAlczogJXMiLApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvZGF0YS9ib20ucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weQppbmRleCBlY2I3ODJhLi45YmMzOTc1IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weQpAQCAtMSwzICsxLDIgQEAKIO+7vyMgY29kaW5nOiB1dGYtOAogcHJpbnQgIkJPTSBCT09NISIKLQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQppbmRleCBlOGU4ZTEyLi4xODU4OWQzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQpAQCAtODY4LDYgKzg2OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oNSkud2l0aF90cmFjZWJhY2soNikgIyBmb28iIiIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCisgICAgZGVmIHRlc3RfTm9uZV92YWx1ZShzZWxmKToKKyAgICAgICAgYiA9ICIiInJhaXNlIEV4Y2VwdGlvbig1KSwgTm9uZSwgdGIiIiIKKyAgICAgICAgYSA9ICIiInJhaXNlIEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayh0YikiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCiAgICAgZGVmIHRlc3RfdHVwbGVfdmFsdWUoc2VsZik6CiAgICAgICAgIGIgPSAiIiJyYWlzZSBFeGNlcHRpb24sICg1LCA2LCA3KSIiIgogICAgICAgICBhID0gIiIicmFpc2UgRXhjZXB0aW9uKDUsIDYsIDcpIiIiCkBAIC0xODEyLDEyICsxODE3LDQyIEBACiAgICAgICAgICAgICAgICAgICAgIGIgPSAiZnJvbSAlcyBpbXBvcnQgJXMgYXMgZm9vX2JhciIgJSAob2xkLCBtZW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIGEgPSAiZnJvbSAlcyBpbXBvcnQgJXMgYXMgZm9vX2JhciIgJSAobmV3LCBtZW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgICAgICAgICAgICAgYiA9ICJmcm9tICVzIGltcG9ydCAlcyBhcyBibGFoLCAlcyIgJSAob2xkLCBtZW1iZXIsIG1lbWJlcikKKyAgICAgICAgICAgICAgICAgICAgYSA9ICJmcm9tICVzIGltcG9ydCAlcyBhcyBibGFoLCAlcyIgJSAobmV3LCBtZW1iZXIsIG1lbWJlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCiAgICAgZGVmIHRlc3Rfc3RhcihzZWxmKToKICAgICAgICAgZm9yIG9sZCBpbiBzZWxmLm1vZHVsZXM6CiAgICAgICAgICAgICBzID0gImZyb20gJXMgaW1wb3J0ICoiICUgb2xkCiAgICAgICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2Fubm90IGhhbmRsZSBzdGFyIGltcG9ydHMiKQogCisgICAgZGVmIHRlc3RfaW5kZW50ZWQoc2VsZik6CisgICAgICAgIGIgPSAiIiIKK2RlZiBmb28oKToKKyAgICBmcm9tIHVybGxpYiBpbXBvcnQgdXJsZW5jb2RlLCB1cmxvcGVuCisiIiIKKyAgICAgICAgYSA9ICIiIgorZGVmIGZvbygpOgorICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxlbmNvZGUKKyAgICBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCisiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiIKK2RlZiBmb28oKToKKyAgICBvdGhlcigpCisgICAgZnJvbSB1cmxsaWIgaW1wb3J0IHVybGVuY29kZSwgdXJsb3BlbgorIiIiCisgICAgICAgIGEgPSAiIiIKK2RlZiBmb28oKToKKyAgICBvdGhlcigpCisgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybGVuY29kZQorICAgIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KKyIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKworCiAgICAgZGVmIHRlc3RfaW1wb3J0X21vZHVsZV91c2FnZShzZWxmKToKICAgICAgICAgZm9yIG9sZCwgY2hhbmdlcyBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGZvciBuZXcsIG1lbWJlcnMgaW4gY2hhbmdlczoKQEAgLTM2MjMsNiArMzY1OCwxMCBAQAogICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBiYXIsIGZvbyIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCisgICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBpbWFwLCBpemlwIgorICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCiAgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CiAgICAgICAgIGIgPSAiI2Zvb1xuZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAsIGl6aXAiCiAgICAgICAgIGEgPSAiI2Zvb1xuIgpAQCAtMzY3MCw2ICszNzA5LDEwIEBACiAgICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGJhciwgZmlsdGVyZmFsc2UsIGZvbyIKICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQogCisgICAgZGVmIHRlc3RfaW1wb3J0X3N0YXIoc2VsZik6CisgICAgICAgIHMgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0ICoiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKIAogICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKICAgICAgICAgcyA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZm9vIgpAQCAtNDI5OSwxMyArNDM0Miw4OSBAQAogICAgICAgICBhID0gIm9wZXJhdG9yLmNvbnRhaW5zKHgsIHkpIgogICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCiAKKyAgICAgICAgYiA9ICJvcGVyYXRvciAuc2VxdWVuY2VJbmNsdWRlcyh4LCB5KSIKKyAgICAgICAgYSA9ICJvcGVyYXRvciAuY29udGFpbnMoeCwgeSkiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIm9wZXJhdG9yLiAgc2VxdWVuY2VJbmNsdWRlcyh4LCB5KSIKKyAgICAgICAgYSA9ICJvcGVyYXRvci4gIGNvbnRhaW5zKHgsIHkpIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9vcGVyYXRvcl9pc1NlcXVlbmNlVHlwZShzZWxmKToKKyAgICAgICAgYiA9ICJvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSh4KSIKKyAgICAgICAgYSA9ICJpbXBvcnQgY29sbGVjdGlvbnNcbmlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuU2VxdWVuY2UpIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9vcGVyYXRvcl9pc01hcHBpbmdUeXBlKHNlbGYpOgorICAgICAgICBiID0gIm9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoeCkiCisgICAgICAgIGEgPSAiaW1wb3J0IGNvbGxlY3Rpb25zXG5pc2luc3RhbmNlKHgsIGNvbGxlY3Rpb25zLk1hcHBpbmcpIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF9vcGVyYXRvcl9pc051bWJlclR5cGUoc2VsZik6CisgICAgICAgIGIgPSAib3BlcmF0b3IuaXNOdW1iZXJUeXBlKHgpIgorICAgICAgICBhID0gImltcG9ydCBudW1iZXJzXG5pc2luc3RhbmNlKHgsIG51bWJlcnMuTnVtYmVyKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfb3BlcmF0b3JfcmVwZWF0KHNlbGYpOgorICAgICAgICBiID0gIm9wZXJhdG9yLnJlcGVhdCh4LCBuKSIKKyAgICAgICAgYSA9ICJvcGVyYXRvci5tdWwoeCwgbikiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIm9wZXJhdG9yIC5yZXBlYXQoeCwgbikiCisgICAgICAgIGEgPSAib3BlcmF0b3IgLm11bCh4LCBuKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAib3BlcmF0b3IuICByZXBlYXQoeCwgbikiCisgICAgICAgIGEgPSAib3BlcmF0b3IuICBtdWwoeCwgbikiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X29wZXJhdG9yX2lyZXBlYXQoc2VsZik6CisgICAgICAgIGIgPSAib3BlcmF0b3IuaXJlcGVhdCh4LCBuKSIKKyAgICAgICAgYSA9ICJvcGVyYXRvci5pbXVsKHgsIG4pIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICJvcGVyYXRvciAuaXJlcGVhdCh4LCBuKSIKKyAgICAgICAgYSA9ICJvcGVyYXRvciAuaW11bCh4LCBuKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAib3BlcmF0b3IuICBpcmVwZWF0KHgsIG4pIgorICAgICAgICBhID0gIm9wZXJhdG9yLiAgaW11bCh4LCBuKSIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCiAgICAgZGVmIHRlc3RfYmFyZV9pc0NhbGxhYmxlKHNlbGYpOgogICAgICAgICBzID0gImlzQ2FsbGFibGUoeCkiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJZb3Ugc2hvdWxkIHVzZSBoYXNhdHRyKHgsICdfX2NhbGxfXycpIGhlcmUuIikKKyAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnaGFzYXR0cih4LCAnX19jYWxsX18nKScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCiAKICAgICBkZWYgdGVzdF9iYXJlX3NlcXVlbmNlSW5jbHVkZXMoc2VsZik6CiAgICAgICAgIHMgPSAic2VxdWVuY2VJbmNsdWRlcyh4LCB5KSIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIllvdSBzaG91bGQgdXNlIG9wZXJhdG9yLmNvbnRhaW5zIGhlcmUuIikKKyAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnb3BlcmF0b3IuY29udGFpbnMoeCwgeSknIGhlcmUuIgorICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCB0KQorCisgICAgZGVmIHRlc3RfYmFyZV9vcGVyYXRvcl9pc1NlcXVlbmNlVHlwZShzZWxmKToKKyAgICAgICAgcyA9ICJpc1NlcXVlbmNlVHlwZSh6KSIKKyAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnaXNpbnN0YW5jZSh6LCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSknIGhlcmUuIgorICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCB0KQorCisgICAgZGVmIHRlc3RfYmFyZV9vcGVyYXRvcl9pc01hcHBpbmdUeXBlKHNlbGYpOgorICAgICAgICBzID0gImlzTWFwcGluZ1R5cGUoeCkiCisgICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ2lzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuTWFwcGluZyknIGhlcmUuIgorICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCB0KQorCisgICAgZGVmIHRlc3RfYmFyZV9vcGVyYXRvcl9pc051bWJlclR5cGUoc2VsZik6CisgICAgICAgIHMgPSAiaXNOdW1iZXJUeXBlKHkpIgorICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdpc2luc3RhbmNlKHksIG51bWJlcnMuTnVtYmVyKScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCisKKyAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX3JlcGVhdChzZWxmKToKKyAgICAgICAgcyA9ICJyZXBlYXQoeCwgbikiCisgICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ29wZXJhdG9yLm11bCh4LCBuKScgaGVyZS4iCisgICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCisKKyAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lyZXBlYXQoc2VsZik6CisgICAgICAgIHMgPSAiaXJlcGVhdCh5LCAxODcpIgorICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdvcGVyYXRvci5pbXVsKHksIDE4NyknIGhlcmUuIgorICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCB0KQogCiAKIGNsYXNzIFRlc3RfZXhpdGZ1bmMoRml4ZXJUZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CmluZGV4IDcwM2Q4NzkuLjI2MDIzODEgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5CkBAIC0xOSw2ICsxOSwxNiBAQAogIyBMb2NhbCBpbXBvcnRzCiBmcm9tIGxpYjJ0bzMucGdlbjIgaW1wb3J0IHRva2VuaXplCiBmcm9tIC4ucGdlbjIucGFyc2UgaW1wb3J0IFBhcnNlRXJyb3IKK2Zyb20gbGliMnRvMy5weWdyYW0gaW1wb3J0IHB5dGhvbl9zeW1ib2xzIGFzIHN5bXMKKworCitjbGFzcyBUZXN0RHJpdmVyKHN1cHBvcnQuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9ybWZlZWQoc2VsZik6CisgICAgICAgIHMgPSAiIiJwcmludCAxXG5ceDBDcHJpbnQgMlxuIiIiCisgICAgICAgIHQgPSBkcml2ZXIucGFyc2Vfc3RyaW5nKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5jaGlsZHJlblswXS5jaGlsZHJlblswXS50eXBlLCBzeW1zLnByaW50X3N0bXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5jaGlsZHJlblsxXS5jaGlsZHJlblswXS50eXBlLCBzeW1zLnByaW50X3N0bXQpCiAKIAogY2xhc3MgR3JhbW1hclRlc3Qoc3VwcG9ydC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CmluZGV4IGQzMWY2N2QuLmFjN2Q5MDAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CkBAIC0xNzgsMTcgKzE3OCw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihuMSksICJmb28qKmJhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG4xLmNoaWxkcmVuLCBsaXN0KSkKIAorICAgIGRlZiB0ZXN0X2xlYXZlcyhzZWxmKToKKyAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQorICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCisgICAgICAgIGwzID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vZXkiKQorICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQorICAgICAgICBuMyA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsM10pCisgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW24yLCBuM10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLmxlYXZlcygpKSwgW2wxLCBsMiwgbDNdKQorCisgICAgZGVmIHRlc3RfZGVwdGgoc2VsZik6CisgICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKKyAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQorICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQorICAgICAgICBuMyA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQorICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtuMiwgbjNdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZGVwdGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMy5kZXB0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmRlcHRoKCksIDApCisKICAgICBkZWYgdGVzdF9wb3N0X29yZGVyKHNlbGYpOgogICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCiAgICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLnBvc3Rfb3JkZXIoKSksIFtsMSwgbDIsIG4xXSkKKyAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJmb29leSIpCisgICAgICAgIGMxID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCisgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2MxLCBsM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChuMS5wb3N0X29yZGVyKCkpLCBbbDEsIGwyLCBjMSwgbDMsIG4xXSkKIAogICAgIGRlZiB0ZXN0X3ByZV9vcmRlcihzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQogICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChuMS5wcmVfb3JkZXIoKSksIFtuMSwgbDEsIGwyXSkKKyAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJmb29leSIpCisgICAgICAgIGMxID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCisgICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2MxLCBsM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChuMS5wcmVfb3JkZXIoKSksIFtuMSwgYzEsIGwxLCBsMiwgbDNdKQogCiAgICAgZGVmIHRlc3RfY2hhbmdlZChzZWxmKToKICAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmIikKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3JlZmFjdG9yLnB5CmluZGV4IDU5ZTVhNzQuLjNlZWNkZTggMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQpAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgICAgICAgICAgICAgImhpLnB5IiwKICAgICAgICAgICAgICAgICAiLmR1bWIiLAogICAgICAgICAgICAgICAgICIuYWZ0ZXIucHkiLAorICAgICAgICAgICAgICAgICJub3RweS5ucHkiLAogICAgICAgICAgICAgICAgICJzYXBweSJdCiAgICAgICAgIGV4cGVjdGVkID0gWyJoaS5weSJdCiAgICAgICAgIGNoZWNrKHRyZWUsIGV4cGVjdGVkKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5CmluZGV4IDYxODZiNGYuLjJmYWI4YjkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3V0aWwucHkKQEAgLTU2OCwxMCArNTY4LDI3IEBACiAKICAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydChzZWxmKToKICAgICAgICAgbm9kZSA9IHBhcnNlKCdiYXIoKScpCi0gICAgICAgIGZpeGVyX3V0aWwudG91Y2hfaW1wb3J0KCJjZ2kiLCAiZXNjYXBlIiwgbm9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICdmcm9tIGNnaSBpbXBvcnQgZXNjYXBlXG5iYXIoKVxuXG4nKQorICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydCgiaHRtbCIsICJlc2NhcGUiLCBub2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihub2RlKSwgJ2Zyb20gaHRtbCBpbXBvcnQgZXNjYXBlXG5iYXIoKVxuXG4nKQogCiAgICAgZGVmIHRlc3RfbmFtZV9pbXBvcnQoc2VsZik6CiAgICAgICAgIG5vZGUgPSBwYXJzZSgnYmFyKCknKQogICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydChOb25lLCAiY2dpIiwgbm9kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICdpbXBvcnQgY2dpXG5iYXIoKVxuXG4nKQorCitjbGFzcyBUZXN0X2ZpbmRfaW5kZW50YXRpb24oc3VwcG9ydC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICBmaSA9IGZpeGVyX3V0aWwuZmluZF9pbmRlbnRhdGlvbgorICAgICAgICBub2RlID0gcGFyc2UoIm5vZGUoKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZSksIHUiIikKKyAgICAgICAgbm9kZSA9IHBhcnNlKCIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUpLCB1IiIpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIGZpID0gZml4ZXJfdXRpbC5maW5kX2luZGVudGF0aW9uCisgICAgICAgIG5vZGUgPSBwYXJzZSgiZGVmIGYoKTpcbiAgICB4KCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZS5jaGlsZHJlblswXS5jaGlsZHJlbls0XS5jaGlsZHJlblsyXSksIHUiICAgICIpCisgICAgICAgIG5vZGUgPSBwYXJzZSgiZGVmIGYoKTpcbiAgICB4KClcbiAgICB5KCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUuY2hpbGRyZW5bMF0uY2hpbGRyZW5bNF0uY2hpbGRyZW5bNF0pLCB1IiAgICAiKQpkaWZmIC0tZ2l0IGEvTGliL2xpbmVjYWNoZS5weSBiL0xpYi9saW5lY2FjaGUucHkKaW5kZXggYzk5OTg1MS4uODExZjI3ZiAxMDA2NDQKLS0tIGEvTGliL2xpbmVjYWNoZS5weQorKysgYi9MaWIvbGluZWNhY2hlLnB5CkBAIC03MiwxMyArNzIsMTMgQEAKIAogICAgIGlmIGZpbGVuYW1lIGluIGNhY2hlOgogICAgICAgICBkZWwgY2FjaGVbZmlsZW5hbWVdCi0gICAgaWYgbm90IGZpbGVuYW1lIG9yIGZpbGVuYW1lWzBdICsgZmlsZW5hbWVbLTFdID09ICc8Pic6CisgICAgaWYgbm90IGZpbGVuYW1lIG9yIChmaWxlbmFtZS5zdGFydHN3aXRoKCc8JykgYW5kIGZpbGVuYW1lLmVuZHN3aXRoKCc+JykpOgogICAgICAgICByZXR1cm4gW10KIAogICAgIGZ1bGxuYW1lID0gZmlsZW5hbWUKICAgICB0cnk6CiAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciwgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBiYXNlbmFtZSA9IGZpbGVuYW1lCiAKICAgICAgICAgIyBUcnkgZm9yIGEgX19sb2FkZXJfXywgaWYgYXZhaWxhYmxlCkBAIC0xMTUsMjMgKzExNSwxOCBAQAogICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIGJhc2VuYW1lKQogICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgICAgICAjIE5vdCBzdWZmaWNpZW50bHkgc3RyaW5nLWxpa2UgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGguCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgTm8gbHVjawotIyMgICAgICAgICAgcHJpbnQgJyoqKiBDYW5ub3Qgc3RhdCcsIGZpbGVuYW1lLCAnOicsIG1zZwogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgdHJ5OgotICAgICAgICBmcCA9IG9wZW4oZnVsbG5hbWUsICdyVScpCi0gICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKLSAgICAgICAgZnAuY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6Ci0jIyAgICAgIHByaW50ICcqKiogQ2Fubm90IG9wZW4nLCBmdWxsbmFtZSwgJzonLCBtc2cKKyAgICAgICAgd2l0aCBvcGVuKGZ1bGxuYW1lLCAnclUnKSBhcyBmcDoKKyAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbGluZXMgYW5kIG5vdCBsaW5lc1stMV0uZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgIGxpbmVzWy0xXSArPSAnXG4nCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCBkZjVhYjM5Li45MjFmNGY2IDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTExLDcgKzExLDExIEBACiAKICIiIgogCi1pbXBvcnQgc3lzLCBlbmNvZGluZ3MsIGVuY29kaW5ncy5hbGlhc2VzCitpbXBvcnQgc3lzCitpbXBvcnQgZW5jb2RpbmdzCitpbXBvcnQgZW5jb2RpbmdzLmFsaWFzZXMKK2ltcG9ydCByZQoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgZnVuY3Rvb2xzCiAKICMgVHJ5IGltcG9ydGluZyB0aGUgX2xvY2FsZSBtb2R1bGUuCkBAIC0xMTAsMTIgKzExNCwxNSBAQAogCiAjIEl0ZXJhdGUgb3ZlciBncm91cGluZyBpbnRlcnZhbHMKIGRlZiBfZ3JvdXBpbmdfaW50ZXJ2YWxzKGdyb3VwaW5nKToKKyAgICBsYXN0X2ludGVydmFsID0gTm9uZQogICAgIGZvciBpbnRlcnZhbCBpbiBncm91cGluZzoKICAgICAgICAgIyBpZiBncm91cGluZyBpcyAtMSwgd2UgYXJlIGRvbmUKICAgICAgICAgaWYgaW50ZXJ2YWwgPT0gQ0hBUl9NQVg6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyAwOiByZS11c2UgbGFzdCBncm91cCBhZCBpbmZpbml0dW0KICAgICAgICAgaWYgaW50ZXJ2YWwgPT0gMDoKKyAgICAgICAgICAgIGlmIGxhc3RfaW50ZXJ2YWwgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGdyb3VwaW5nIikKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgeWllbGQgbGFzdF9pbnRlcnZhbAogICAgICAgICB5aWVsZCBpbnRlcnZhbApAQCAtMTY2LDYgKzE3Myw5IEBACiAgICAgICAgIGFtb3VudCAtPSAxCiAgICAgcmV0dXJuIHNbbHBvczpycG9zKzFdCiAKK19wZXJjZW50X3JlID0gcmUuY29tcGlsZShyJyUoPzpcKCg/UDxrZXk+Lio/KVwpKT8nCisgICAgICAgICAgICAgICAgICAgICAgICAgcicoP1A8bW9kaWZpZXJzPlstIzAtOSArKi5obExdKj8pW2VFZkZnR2Rpb3V4WGNycyVdJykKKwogZGVmIGZvcm1hdChwZXJjZW50LCB2YWx1ZSwgZ3JvdXBpbmc9RmFsc2UsIG1vbmV0YXJ5PUZhbHNlLCAqYWRkaXRpb25hbCk6CiAgICAgIiIiUmV0dXJucyB0aGUgbG9jYWxlLWF3YXJlIHN1YnN0aXR1dGlvbiBvZiBhICU/IHNwZWNpZmllcgogICAgIChwZXJjZW50KS4KQEAgLTE3Myw5ICsxODMsMTMgQEAKICAgICBhZGRpdGlvbmFsIGlzIGZvciBmb3JtYXQgc3RyaW5ncyB3aGljaCBjb250YWluIG9uZSBvciBtb3JlCiAgICAgJyonIG1vZGlmaWVycy4iIiIKICAgICAjIHRoaXMgaXMgb25seSBmb3Igb25lLXBlcmNlbnQtc3BlY2lmaWVyIHN0cmluZ3MgYW5kIHRoaXMgc2hvdWxkIGJlIGNoZWNrZWQKLSAgICBpZiBwZXJjZW50WzBdICE9ICclJzoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZm9ybWF0KCkgbXVzdCBiZSBnaXZlbiBleGFjdGx5IG9uZSAlY2hhciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCBzcGVjaWZpZXIiKQorICAgIG1hdGNoID0gX3BlcmNlbnRfcmUubWF0Y2gocGVyY2VudCkKKyAgICBpZiBub3QgbWF0Y2ggb3IgbGVuKG1hdGNoLmdyb3VwKCkpIT0gbGVuKHBlcmNlbnQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCgiZm9ybWF0KCkgbXVzdCBiZSBnaXZlbiBleGFjdGx5IG9uZSAlJWNoYXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgc3BlY2lmaWVyLCAlcyBub3QgdmFsaWQiKSAlIHJlcHIocGVyY2VudCkpCisgICAgcmV0dXJuIF9mb3JtYXQocGVyY2VudCwgdmFsdWUsIGdyb3VwaW5nLCBtb25ldGFyeSwgKmFkZGl0aW9uYWwpCisKK2RlZiBfZm9ybWF0KHBlcmNlbnQsIHZhbHVlLCBncm91cGluZz1GYWxzZSwgbW9uZXRhcnk9RmFsc2UsICphZGRpdGlvbmFsKToKICAgICBpZiBhZGRpdGlvbmFsOgogICAgICAgICBmb3JtYXR0ZWQgPSBwZXJjZW50ICUgKCh2YWx1ZSwpICsgYWRkaXRpb25hbCkKICAgICBlbHNlOgpAQCAtMTk5LDEwICsyMTMsNiBAQAogICAgICAgICAgICAgZm9ybWF0dGVkID0gX3N0cmlwX3BhZGRpbmcoZm9ybWF0dGVkLCBzZXBzKQogICAgIHJldHVybiBmb3JtYXR0ZWQKIAotaW1wb3J0IHJlLCBvcGVyYXRvcgotX3BlcmNlbnRfcmUgPSByZS5jb21waWxlKHInJSg/OlwoKD9QPGtleT4uKj8pXCkpPycKLSAgICAgICAgICAgICAgICAgICAgICAgICByJyg/UDxtb2RpZmllcnM+Wy0jMC05ICsqLmhsTF0qPylbZUVmRmdHZGlvdXhYY3JzJV0nKQotCiBkZWYgZm9ybWF0X3N0cmluZyhmLCB2YWwsIGdyb3VwaW5nPUZhbHNlKToKICAgICAiIiJGb3JtYXRzIGEgc3RyaW5nIGluIHRoZSBzYW1lIHdheSB0aGF0IHRoZSAlIGZvcm1hdHRpbmcgd291bGQgdXNlLAogICAgIGJ1dCB0YWtlcyB0aGUgY3VycmVudCBsb2NhbGUgaW50byBhY2NvdW50LgpAQCAtMjEwLDIyICsyMjAsMzAgQEAKICAgICBwZXJjZW50cyA9IGxpc3QoX3BlcmNlbnRfcmUuZmluZGl0ZXIoZikpCiAgICAgbmV3X2YgPSBfcGVyY2VudF9yZS5zdWIoJyVzJywgZikKIAotICAgIGlmIGlzaW5zdGFuY2UodmFsLCB0dXBsZSk6Ci0gICAgICAgIG5ld192YWwgPSBsaXN0KHZhbCkKKyAgICBpZiBvcGVyYXRvci5pc01hcHBpbmdUeXBlKHZhbCk6CisgICAgICAgIG5ld192YWwgPSBbXQorICAgICAgICBmb3IgcGVyYyBpbiBwZXJjZW50czoKKyAgICAgICAgICAgIGlmIHBlcmMuZ3JvdXAoKVstMV09PSclJzoKKyAgICAgICAgICAgICAgICBuZXdfdmFsLmFwcGVuZCgnJScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld192YWwuYXBwZW5kKGZvcm1hdChwZXJjLmdyb3VwKCksIHZhbCwgZ3JvdXBpbmcpKQorICAgIGVsc2U6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgdHVwbGUpOgorICAgICAgICAgICAgdmFsID0gKHZhbCwpCisgICAgICAgIG5ld192YWwgPSBbXQogICAgICAgICBpID0gMAogICAgICAgICBmb3IgcGVyYyBpbiBwZXJjZW50czoKLSAgICAgICAgICAgIHN0YXJjb3VudCA9IHBlcmMuZ3JvdXAoJ21vZGlmaWVycycpLmNvdW50KCcqJykKLSAgICAgICAgICAgIG5ld192YWxbaV0gPSBmb3JtYXQocGVyYy5ncm91cCgpLCBuZXdfdmFsW2ldLCBncm91cGluZywgRmFsc2UsICpuZXdfdmFsW2krMTppKzErc3RhcmNvdW50XSkKLSAgICAgICAgICAgIGRlbCBuZXdfdmFsW2krMTppKzErc3RhcmNvdW50XQotICAgICAgICAgICAgaSArPSAoMSArIHN0YXJjb3VudCkKLSAgICAgICAgdmFsID0gdHVwbGUobmV3X3ZhbCkKLSAgICBlbGlmIG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUodmFsKToKLSAgICAgICAgZm9yIHBlcmMgaW4gcGVyY2VudHM6Ci0gICAgICAgICAgICBrZXkgPSBwZXJjLmdyb3VwKCJrZXkiKQotICAgICAgICAgICAgdmFsW2tleV0gPSBmb3JtYXQocGVyYy5ncm91cCgpLCB2YWxba2V5XSwgZ3JvdXBpbmcpCi0gICAgZWxzZToKLSAgICAgICAgIyB2YWwgaXMgYSBzaW5nbGUgdmFsdWUKLSAgICAgICAgdmFsID0gZm9ybWF0KHBlcmNlbnRzWzBdLmdyb3VwKCksIHZhbCwgZ3JvdXBpbmcpCisgICAgICAgICAgICBpZiBwZXJjLmdyb3VwKClbLTFdPT0nJSc6CisgICAgICAgICAgICAgICAgbmV3X3ZhbC5hcHBlbmQoJyUnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGFyY291bnQgPSBwZXJjLmdyb3VwKCdtb2RpZmllcnMnKS5jb3VudCgnKicpCisgICAgICAgICAgICAgICAgbmV3X3ZhbC5hcHBlbmQoX2Zvcm1hdChwZXJjLmdyb3VwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFsW2krMTppKzErc3RhcmNvdW50XSkpCisgICAgICAgICAgICAgICAgaSArPSAoMSArIHN0YXJjb3VudCkKKyAgICB2YWwgPSB0dXBsZShuZXdfdmFsKQogCiAgICAgcmV0dXJuIG5ld19mICUgdmFsCiAKQEAgLTUyMiwxMCArNTQwLDggQEAKICAgICAiIiIKICAgICBfc2V0bG9jYWxlKGNhdGVnb3J5LCBfYnVpbGRfbG9jYWxlbmFtZShnZXRkZWZhdWx0bG9jYWxlKCkpKQogCi1pZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdkYXJ3aW4nLCAnbWFjJyk6CitpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CiAgICAgIyBPbiBXaW4zMiwgdGhpcyB3aWxsIHJldHVybiB0aGUgQU5TSSBjb2RlIHBhZ2UKLSAgICAjIE9uIHRoZSBNYWMsIGl0IHNob3VsZCByZXR1cm4gdGhlIHN5c3RlbSBlbmNvZGluZzsKLSAgICAjIGl0IG1pZ2h0IHJldHVybiAiYXNjaWkiIGluc3RlYWQKICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZy4iIiIKICAgICAgICAgaW1wb3J0IF9sb2NhbGUKQEAgLTU5MSw2ICs2MDcsNyBAQAogICAgICdpc284ODU5XzEzJzogICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMTMnLAogICAgICdpc284ODU5XzE0JzogICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMTQnLAogICAgICdpc284ODU5XzE1JzogICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMTUnLAorICAgICdpc284ODU5XzE2JzogICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMTYnLAogICAgICdpc284ODU5XzInOiAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktMicsCiAgICAgJ2lzbzg4NTlfMyc6ICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0zJywKICAgICAnaXNvODg1OV80JzogICAgICAgICAgICAgICAgICAgICdJU084ODU5LTQnLApAQCAtNjc5LDYgKzY5NiwyOCBAQAogIyAgICB1cGRhdGVkICdzcl95dS5taWNyb3NvZnRjcDEyNTFAY3lyaWxsaWMnIC0+ICdzcl9ZVS5DUDEyNTEnIHRvICdzcl9DUy5DUDEyNTEnCiAjICAgIHVwZGF0ZWQgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnIC0+ICdzcl9ZVS5VVEYtOCcgdG8gJ3NyX0NTLlVURi04JwogIyAgICB1cGRhdGVkICdzcl95dUBjeXJpbGxpYycgLT4gJ3NyX1lVLklTTzg4NTktNScgdG8gJ3NyX0NTLklTTzg4NTktNScKKyMKKyMgQVAgMjAxMC0wNC0xMjoKKyMgVXBkYXRlZCBhbGlhcyBtYXBwaW5nIHRvIG1vc3QgcmVjZW50IGxvY2FsZS5hbGlhcyBmaWxlCisjIGZyb20gWC5vcmcgZGlzdHJpYnV0aW9uIHVzaW5nIG1ha2Vsb2NhbGVhbGlhcy5weS4KKyMKKyMgVGhlc2UgYXJlIHRoZSBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byB0aGUgb2xkIG1hcHBpbmcgKFB5dGhvbiAyLjYuNQorIyBhbmQgb2xkZXIpOgorIworIyAgICB1cGRhdGVkICdydScgLT4gJ3J1X1JVLklTTzg4NTktNScgdG8gJ3J1X1JVLlVURi04JworIyAgICB1cGRhdGVkICdydV9ydScgLT4gJ3J1X1JVLklTTzg4NTktNScgdG8gJ3J1X1JVLlVURi04JworIyAgICB1cGRhdGVkICdzZXJib2Nyb2F0aWFuJyAtPiAnc3JfQ1MuSVNPODg1OS0yJyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NoJyAtPiAnc3JfQ1MuSVNPODg1OS0yJyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NoX3l1JyAtPiAnc3JfQ1MuSVNPODg1OS0yJyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NyJyAtPiAnc3JfQ1MuSVNPODg1OS01JyB0byAnc3JfUlMuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3NyQGN5cmlsbGljJyAtPiAnc3JfQ1MuSVNPODg1OS01JyB0byAnc3JfUlMuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3NyQGxhdG4nIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc3JfY3MudXRmOEBsYXRuJyAtPiAnc3JfQ1MuVVRGLTgnIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc3JfY3NAbGF0bicgLT4gJ3NyX0NTLklTTzg4NTktMicgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl95dScgLT4gJ3NyX0NTLklTTzg4NTktNScgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl95dS51dGY4QGN5cmlsbGljJyAtPiAnc3JfQ1MuVVRGLTgnIHRvICdzcl9SUy5VVEYtOCcKKyMgICAgdXBkYXRlZCAnc3JfeXVAY3lyaWxsaWMnIC0+ICdzcl9DUy5JU084ODU5LTUnIHRvICdzcl9SUy5VVEYtOCcKKyMKIAogbG9jYWxlX2FsaWFzID0gewogICAgICdhMyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYTNfQVouS09JOC1DJywKQEAgLTczMCwxMyArNzY5LDE3IEBACiAgICAgJ2FyX3llLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9ZRS5JU084ODU5LTYnLAogICAgICdhcmFiaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXJhYmljLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCisgICAgJ2FzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc19JTi5VVEYtOCcsCiAgICAgJ2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKICAgICAnYXpfYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLklTTzg4NTktOUUnLAogICAgICdhel9hei5pc284ODU5OWUnOiAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCiAgICAgJ2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAorICAgICdiZUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZV9ieSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKICAgICAnYmVfYnkuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCiAgICAgJ2JlX2J5Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAorICAgICdiZV9ieS51dGY4QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAorICAgICdiZV9ieUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCiAgICAgJ2JnX2JnLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLApAQCAtNzY2LDEyICs4MDksMzAgQEAKICAgICAnY19jJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdjX2MuYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAorICAgICdjYV9hZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xJywKKyAgICAnY2FfYWQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMScsCisgICAgJ2NhX2FkLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKKyAgICAnY2FfYWQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAorICAgICdjYV9hZC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuVVRGLTgnLAorICAgICdjYV9hZEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCiAgICAgJ2NhX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjYV9lcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKICAgICAnY2FfZXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAogICAgICdjYV9lcy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCiAgICAgJ2NhX2VzLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5VVEYtOCcsCiAgICAgJ2NhX2VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKKyAgICAnY2FfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCisgICAgJ2NhX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTEnLAorICAgICdjYV9mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCisgICAgJ2NhX2ZyLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKKyAgICAnY2FfZnIudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLlVURi04JywKKyAgICAnY2FfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAorICAgICdjYV9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKKyAgICAnY2FfaXQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMScsCisgICAgJ2NhX2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKKyAgICAnY2FfaXQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAorICAgICdjYV9pdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuVVRGLTgnLAorICAgICdjYV9pdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCiAgICAgJ2NhdGFsYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnY2V4dGVuZC5lbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCkBAIC03OTMsNiArODU0LDcgQEAKICAgICAnY3pfY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2N6ZWNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdkYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKKyAgICAnZGEuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMTUnLAogICAgICdkYV9kayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGFfZGsuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCiAgICAgJ2RhX2RrLjg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKQEAgLTgwMyw2ICs4NjUsNyBAQAogICAgICdkYW5pc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGFuc2snOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCiAgICAgJ2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAorICAgICdkZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCiAgICAgJ2RlX2F0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAogICAgICdkZV9hdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xJywKICAgICAnZGVfYXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMTUnLApAQCAtOTg0LDYgKzEwNDcsNyBAQAogICAgICdmYV9pcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuVVRGLTgnLAogICAgICdmYV9pci5pc2lyaTMzNDInOiAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuSVNJUkktMzM0MicsCiAgICAgJ2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKKyAgICAnZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAogICAgICdmaV9maSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCiAgICAgJ2ZpX2ZpLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLAogICAgICdmaV9maS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKQEAgLTk5OSw2ICsxMDYzLDcgQEAKICAgICAnZm9fZm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMTUnLAogICAgICdmb19mb0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xNScsCiAgICAgJ2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAorICAgICdmci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAogICAgICdmcl9iZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKICAgICAnZnJfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCkBAIC0xMDg1LDYgKzExNTAsNyBAQAogICAgICdoaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKICAgICAnaGlfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCiAgICAgJ2hpX2luLmlzY2lpZGV2JzogICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAorICAgICdobmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG5lX0lOLlVURi04JywKICAgICAnaHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2hyX2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdocl9oci5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKQEAgLTExMTEsNiArMTE3Nyw3IEBACiAgICAgJ2lzb184ODU5XzEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdpc29fODg1OV8xNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCiAgICAgJ2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAorICAgICdpdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCiAgICAgJ2l0X2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTEnLAogICAgICdpdF9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xJywKICAgICAnaXRfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMTUnLApAQCAtMTE0Miw2ICsxMjA5LDcgQEAKICAgICAnamFfanAuamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAogICAgICdqYV9qcC5qaXM3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCiAgICAgJ2phX2pwLm1zY29kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKKyAgICAnamFfanAucGNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqYV9qcC5zamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCiAgICAgJ2phX2pwLnVqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCkBAIC0xMTYxLDYgKzEyMjksNyBAQAogICAgICdrbF9nbC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xNScsCiAgICAgJ2tsX2dsQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTE1JywKICAgICAna21fa2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ttX0tILlVURi04JywKKyAgICAna24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tuX0lOLlVURi04JywKICAgICAna25faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tuX0lOLlVURi04JywKICAgICAna28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKICAgICAna29fa3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tvX0tSLmV1Y0tSJywKQEAgLTExNjgsNiArMTIzNyw4IEBACiAgICAgJ2tvX2tyLmV1Y2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvcmVhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvcmVhbi5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCisgICAgJ2tzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrc19JTi5VVEYtOCcsCisgICAgJ2tzX2luQGRldmFuYWdhcmknOiAgICAgICAgICAgICAgICAgICAgICdrc19JTkBkZXZhbmFnYXJpLlVURi04JywKICAgICAna3cnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCiAgICAgJ2t3X2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAogICAgICdrd19nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKQEAgLTExOTAsNiArMTI2MSw3IEBACiAgICAgJ2x2X2x2JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKICAgICAnbHZfbHYuaXNvODg1OTEzJzogICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAogICAgICdsdl9sdi5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS00JywKKyAgICAnbWFpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haV9JTi5VVEYtOCcsCiAgICAgJ21pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAogICAgICdtaV9ueic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKICAgICAnbWlfbnouaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCkBAIC0xMTk4LDYgKzEyNzAsOCBAQAogICAgICdta19tay5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKICAgICAnbWtfbWsuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLklTTzg4NTktNScsCiAgICAgJ21rX21rLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdta19NSy5DUDEyNTEnLAorICAgICdtbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWxfSU4uVVRGLTgnLAorICAgICdtcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXJfSU4uVVRGLTgnLAogICAgICdtcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXJfSU4uVVRGLTgnLAogICAgICdtcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKICAgICAnbXNfbXknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCkBAIC0xMjEyLDYgKzEyODYsNyBAQAogICAgICduYl9uby5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xNScsCiAgICAgJ25iX25vQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTE1JywKICAgICAnbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCisgICAgJ25sLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKICAgICAnbmxfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCiAgICAgJ25sX2JlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAogICAgICdubF9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKQEAgLTEyMzgsNiArMTMxMyw4IEBACiAgICAgJ25vX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub19uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9fbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMTUnLAorICAgICdub19uby5pc284ODU5MUBib2ttYWwnOiAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKKyAgICAnbm9fbm8uaXNvODg1OTFAbnlub3Jzayc6ICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vX25vQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTE1JywKICAgICAnbm9yd2VnaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vcndlZ2lhbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLApAQCAtMTI1OSw2ICsxMzM2LDggQEAKICAgICAnb2NfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMScsCiAgICAgJ29jX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTE1JywKICAgICAnb2NfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMTUnLAorICAgICdvcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAorICAgICdwYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xJywKICAgICAncGRfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX0RFLklTTzg4NTktMScsCkBAIC0xMjg2LDYgKzEzNjUsNyBAQAogICAgICdwcF9hbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKICAgICAncHBfYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCiAgICAgJ3B0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAorICAgICdwdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCiAgICAgJ3B0X2JyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAogICAgICdwdF9ici44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKICAgICAncHRfYnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCkBAIC0xMzAyLDggKzEzODIsOSBAQAogICAgICdyb19ybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncm9fcm8uaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3JvbWFuaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAotICAgICdydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKLSAgICAncnVfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLklTTzg4NTktNScsCisgICAgJ3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5VVEYtOCcsCisgICAgJ3J1LmtvaThyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5LT0k4LVInLAorICAgICdydV9ydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuVVRGLTgnLAogICAgICdydV9ydS5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuQ1AxMjUxJywKICAgICAncnVfcnUuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLklTTzg4NTktNScsCiAgICAgJ3J1X3J1LmtvaThyJzogICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5LT0k4LVInLApAQCAtMTMxNywxMyArMTM5OCwxNSBAQAogICAgICdydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKICAgICAncndfcncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCiAgICAgJ3J3X3J3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAorICAgICdzZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2RfSU5AZGV2YW5hZ2FyaS5VVEYtOCcsCiAgICAgJ3NlX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZV9OTy5VVEYtOCcsCi0gICAgJ3NlcmJvY3JvYXRpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAotICAgICdzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKKyAgICAnc2VyYm9jcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc2hfYmEuaXNvODg1OTJAYm9zbmlhJzogICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NoX2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaF9IUi5JU084ODU5LTInLAogICAgICdzaF9oci5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnc2hfc3AnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCi0gICAgJ3NoX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAorICAgICdzaF95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2lfTEsuVVRGLTgnLAogICAgICdzaV9sayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2lfTEsuVVRGLTgnLAogICAgICdzaW5oYWxhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2lfTEsuVVRGLTgnLApAQCAtMTM0NiwyMyArMTQyOSwzMCBAQAogICAgICdzcSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKICAgICAnc3FfYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCiAgICAgJ3NxX2FsLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAotICAgICdzcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKLSAgICAnc3JAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCi0gICAgJ3NyQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAorICAgICdzcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAorICAgICdzckBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAorICAgICdzckBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzckBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzcl9jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzcl9jcy5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfY3MuaXNvODg1OTJAbGF0bic6ICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NyX2NzLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAotICAgICdzcl9jcy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLTgnLAotICAgICdzcl9jc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKKyAgICAnc3JfY3MudXRmOEBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JfY3NAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JfbWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX01FLlVURi04JywKKyAgICAnc3JfcnMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKKyAgICAnc3JfcnMudXRmOEBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JfcnNAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JfcnNAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc3Jfc3AnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCi0gICAgJ3NyX3l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAorICAgICdzcl95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl95dS5jcDEyNTFAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAnc3JfQ1MuQ1AxMjUxJywKICAgICAnc3JfeXUuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NyX3l1Lmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcl95dS5pc284ODU5NUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3JfeXUubWljcm9zb2Z0Y3AxMjUxQGN5cmlsbGljJzogICAgICAgJ3NyX0NTLkNQMTI1MScsCi0gICAgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICdzcl9DUy5VVEYtOCcsCi0gICAgJ3NyX3l1QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAorICAgICdzcl95dS51dGY4QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAorICAgICdzcl95dUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKICAgICAnc3NfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCiAgICAgJ3NzX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLApAQCAtMTM3MCw2ICsxNDYwLDcgQEAKICAgICAnc3RfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCiAgICAgJ3N0X3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAogICAgICdzdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKKyAgICAnc3YuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMTUnLAogICAgICdzdl9maSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xJywKICAgICAnc3ZfZmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMScsCiAgICAgJ3N2X2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTE1JywKQEAgLTEzODcsNiArMTQ3OCw3IEBACiAgICAgJ3RhX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKICAgICAndGFfaW4udHNjaWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbi50c2NpaTAnOiAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCisgICAgJ3RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZV9JTi5VVEYtOCcsCiAgICAgJ3RnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAogICAgICd0Z190aic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKICAgICAndGdfdGoua29pOGMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCkBAIC0xNDYyLDYgKzE1NTQsNyBAQAogICAgICd6aF9jbi5nYmsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2JrJywKICAgICAnemhfaGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCiAgICAgJ3poX2hrLmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1JywKKyAgICAnemhfaGsuYmlnNWhrJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCiAgICAgJ3poX2hrLmJpZzVoa3Njcyc6ICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAogICAgICd6aF90dyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuYmlnNScsCiAgICAgJ3poX3R3LmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKQEAgLTE0NzcsNyArMTU3MCw3IEBACiAjCiAjIFRoaXMgbGlzdCBoYXMgYmVlbiB1cGRhdGVkIGZyb20KICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9pbnRsL25sc18yMzh6LmFzcAotIyB0byBpbmNsdWRlIGV2ZXJ5IGxvY2FsZSB1cCB0byBXaW5kb3dzIFhQLgorIyB0byBpbmNsdWRlIGV2ZXJ5IGxvY2FsZSB1cCB0byBXaW5kb3dzIFZpc3RhLgogIwogIyBOT1RFOiB0aGlzIG1hcHBpbmcgaXMgaW5jb21wbGV0ZS4gIElmIHlvdXIgbGFuZ3VhZ2UgaXMgbWlzc2luZywgcGxlYXNlCiAjIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgdG8gUHl0aG9uIGJ1ZyBtYW5hZ2VyLCB3aGljaCB5b3UgY2FuIGZpbmQgdmlhOgpAQCAtMTQ4OSw2ICsxNTgyLDggQEAKIHdpbmRvd3NfbG9jYWxlID0gewogICAgIDB4MDQzNjogImFmX1pBIiwgIyBBZnJpa2FhbnMKICAgICAweDA0MWM6ICJzcV9BTCIsICMgQWxiYW5pYW4KKyAgICAweDA0ODQ6ICJnc3dfRlIiLCMgQWxzYXRpYW4gLSBGcmFuY2UKKyAgICAweDA0NWU6ICJhbV9FVCIsICMgQW1oYXJpYyAtIEV0aGlvcGlhCiAgICAgMHgwNDAxOiAiYXJfU0EiLCAjIEFyYWJpYyAtIFNhdWRpIEFyYWJpYQogICAgIDB4MDgwMTogImFyX0lRIiwgIyBBcmFiaWMgLSBJcmFxCiAgICAgMHgwYzAxOiAiYXJfRUciLCAjIEFyYWJpYyAtIEVneXB0CkBAIC0xNTA2LDE1ICsxNjAxLDE4IEBACiAgICAgMHgzYzAxOiAiYXJfQkgiLCAjIEFyYWJpYyAtIEJhaHJhaW4KICAgICAweDQwMDE6ICJhcl9RQSIsICMgQXJhYmljIC0gUWF0YXIKICAgICAweDA0MmI6ICJoeV9BTSIsICMgQXJtZW5pYW4KLSAgICAweDA0MmM6ICJhel9BWiIsICMgQXplcmkgTGF0aW4KKyAgICAweDA0NGQ6ICJhc19JTiIsICMgQXNzYW1lc2UgLSBJbmRpYQorICAgIDB4MDQyYzogImF6X0FaIiwgIyBBemVyaSAtIExhdGluCiAgICAgMHgwODJjOiAiYXpfQVoiLCAjIEF6ZXJpIC0gQ3lyaWxsaWMKLSAgICAweDA0MmQ6ICJldV9FUyIsICMgQmFzcXVlCisgICAgMHgwNDZkOiAiYmFfUlUiLCAjIEJhc2hraXIKKyAgICAweDA0MmQ6ICJldV9FUyIsICMgQmFzcXVlIC0gUnVzc2lhCiAgICAgMHgwNDIzOiAiYmVfQlkiLCAjIEJlbGFydXNpYW4KICAgICAweDA0NDU6ICJibl9JTiIsICMgQmVnYWxpCi0gICAgMHgyMDFhOiAiYnNfQkEiLCAjIEJvc25pYW4KLSAgICAweDE0MWE6ICJic19CQSIsICMgQm9zbmlhbiAtIEN5cmlsbGljCisgICAgMHgyMDFhOiAiYnNfQkEiLCAjIEJvc25pYW4gLSBDeXJpbGxpYworICAgIDB4MTQxYTogImJzX0JBIiwgIyBCb3NuaWFuIC0gTGF0aW4KICAgICAweDA0N2U6ICJicl9GUiIsICMgQnJldG9uIC0gRnJhbmNlCiAgICAgMHgwNDAyOiAiYmdfQkciLCAjIEJ1bGdhcmlhbgorIyAgICAweDA0NTU6ICJteV9NTSIsICMgQnVybWVzZSAtIE5vdCBzdXBwb3J0ZWQKICAgICAweDA0MDM6ICJjYV9FUyIsICMgQ2F0YWxhbgogICAgIDB4MDAwNDogInpoX0NIUyIsIyBDaGluZXNlIC0gU2ltcGxpZmllZAogICAgIDB4MDQwNDogInpoX1RXIiwgIyBDaGluZXNlIC0gVGFpd2FuCkBAIC0xNTIzLDYgKzE2MjEsNyBAQAogICAgIDB4MTAwNDogInpoX1NHIiwgIyBDaGluZXNlIC0gU2luZ2Fwb3JlCiAgICAgMHgxNDA0OiAiemhfTU8iLCAjIENoaW5lc2UgLSBNYWNhbyBTLkEuUi4KICAgICAweDdjMDQ6ICJ6aF9DSFQiLCMgQ2hpbmVzZSAtIFRyYWRpdGlvbmFsCisgICAgMHgwNDgzOiAiY29fRlIiLCAjIENvcnNpY2FuIC0gRnJhbmNlCiAgICAgMHgwNDFhOiAiaHJfSFIiLCAjIENyb2F0aWFuCiAgICAgMHgxMDFhOiAiaHJfQkEiLCAjIENyb2F0aWFuIC0gQm9zbmlhCiAgICAgMHgwNDA1OiAiY3NfQ1oiLCAjIEN6ZWNoCkBAIC0xNTQzLDcgKzE2NDIsMTAgQEAKICAgICAweDI4MDk6ICJlbl9CWiIsICMgRW5nbGlzaCAtIEJlbGl6ZQogICAgIDB4MmMwOTogImVuX1RUIiwgIyBFbmdsaXNoIC0gVHJpbmlkYWQKICAgICAweDMwMDk6ICJlbl9aVyIsICMgRW5nbGlzaCAtIFppbWJhYndlCi0gICAgMHgzNDA5OiAiZW5fUEgiLCAjIEVuZ2xpc2ggLSBQaGlsbGlwcGluZXMKKyAgICAweDM0MDk6ICJlbl9QSCIsICMgRW5nbGlzaCAtIFBoaWxpcHBpbmVzCisgICAgMHg0MDA5OiAiZW5fSU4iLCAjIEVuZ2xpc2ggLSBJbmRpYQorICAgIDB4NDQwOTogImVuX01ZIiwgIyBFbmdsaXNoIC0gTWFsYXlzaWEKKyAgICAweDQ4MDk6ICJlbl9JTiIsICMgRW5nbGlzaCAtIFNpbmdhcG9yZQogICAgIDB4MDQyNTogImV0X0VFIiwgIyBFc3RvbmlhbgogICAgIDB4MDQzODogImZvX0ZPIiwgIyBGYXJvZXNlCiAgICAgMHgwNDY0OiAiZmlsX1BIIiwjIEZpbGlwaW5vCkBAIC0xNTYzLDM4ICsxNjY1LDQ0IEBACiAgICAgMHgxMDA3OiAiZGVfTFUiLCAjIEdlcm1hbiAtIEx1eGVtYm91cmcKICAgICAweDE0MDc6ICJkZV9MSSIsICMgR2VybWFuIC0gTGllY2h0ZW5zdGVpbgogICAgIDB4MDQwODogImVsX0dSIiwgIyBHcmVlaworICAgIDB4MDQ2ZjogImtsX0dMIiwgIyBHcmVlbmxhbmRpYyAtIEdyZWVubGFuZAogICAgIDB4MDQ0NzogImd1X0lOIiwgIyBHdWphcmF0aQorICAgIDB4MDQ2ODogImhhX05HIiwgIyBIYXVzYSAtIExhdGluCiAgICAgMHgwNDBkOiAiaGVfSUwiLCAjIEhlYnJldwogICAgIDB4MDQzOTogImhpX0lOIiwgIyBIaW5kaQogICAgIDB4MDQwZTogImh1X0hVIiwgIyBIdW5nYXJpYW4KICAgICAweDA0MGY6ICJpc19JUyIsICMgSWNlbGFuZGljCiAgICAgMHgwNDIxOiAiaWRfSUQiLCAjIEluZG9uZXNpYW4KLSAgICAweDA0NWQ6ICJpdV9DQSIsICMgSW51a3RpdHV0CisgICAgMHgwNDVkOiAiaXVfQ0EiLCAjIEludWt0aXR1dCAtIFN5bGxhYmljcwogICAgIDB4MDg1ZDogIml1X0NBIiwgIyBJbnVrdGl0dXQgLSBMYXRpbgogICAgIDB4MDgzYzogImdhX0lFIiwgIyBJcmlzaCAtIElyZWxhbmQKLSAgICAweDA0MzQ6ICJ4aF9aQSIsICMgWGhvc2EgLSBTb3V0aCBBZnJpY2EKLSAgICAweDA0MzU6ICJ6dV9aQSIsICMgWnVsdQogICAgIDB4MDQxMDogIml0X0lUIiwgIyBJdGFsaWFuIC0gSXRhbHkKICAgICAweDA4MTA6ICJpdF9DSCIsICMgSXRhbGlhbiAtIFN3aXR6ZXJsYW5kCiAgICAgMHgwNDExOiAiamFfSlAiLCAjIEphcGFuZXNlCiAgICAgMHgwNDRiOiAia25fSU4iLCAjIEthbm5hZGEgLSBJbmRpYQogICAgIDB4MDQzZjogImtrX0taIiwgIyBLYXpha2gKKyAgICAweDA0NTM6ICJraF9LSCIsICMgS2htZXIgLSBDYW1ib2RpYQorICAgIDB4MDQ4NjogInF1dF9HVCIsIyBLJ2ljaGUgLSBHdWF0ZW1hbGEKKyAgICAweDA0ODc6ICJyd19SVyIsICMgS2lueWFyd2FuZGEgLSBSd2FuZGEKICAgICAweDA0NTc6ICJrb2tfSU4iLCMgS29ua2FuaQogICAgIDB4MDQxMjogImtvX0tSIiwgIyBLb3JlYW4KICAgICAweDA0NDA6ICJreV9LRyIsICMgS3lyZ3l6CisgICAgMHgwNDU0OiAibG9fTEEiLCAjIExhbyAtIExhbyBQRFIKICAgICAweDA0MjY6ICJsdl9MViIsICMgTGF0dmlhbgogICAgIDB4MDQyNzogImx0X0xUIiwgIyBMaXRodWFuaWFuCisgICAgMHgwODJlOiAiZHNiX0RFIiwjIExvd2VyIFNvcmJpYW4gLSBHZXJtYW55CiAgICAgMHgwNDZlOiAibGJfTFUiLCAjIEx1eGVtYm91cmdpc2gKLSAgICAweDA0MmY6ICJta19NSyIsICMgRllSTyBNYWNlZG9uaWFuCisgICAgMHgwNDJmOiAibWtfTUsiLCAjIEZZUk9NIE1hY2Vkb25pYW4KICAgICAweDA0M2U6ICJtc19NWSIsICMgTWFsYXkgLSBNYWxheXNpYQotICAgIDB4MDgzZTogIm1zX0JOIiwgIyBNYWxheSAtIEJydW5laQorICAgIDB4MDgzZTogIm1zX0JOIiwgIyBNYWxheSAtIEJydW5laSBEYXJ1c3NhbGFtCiAgICAgMHgwNDRjOiAibWxfSU4iLCAjIE1hbGF5YWxhbSAtIEluZGlhCiAgICAgMHgwNDNhOiAibXRfTVQiLCAjIE1hbHRlc2UKICAgICAweDA0ODE6ICJtaV9OWiIsICMgTWFvcmkKICAgICAweDA0N2E6ICJhcm5fQ0wiLCMgTWFwdWR1bmd1bgogICAgIDB4MDQ0ZTogIm1yX0lOIiwgIyBNYXJhdGhpCiAgICAgMHgwNDdjOiAibW9oX0NBIiwjIE1vaGF3ayAtIENhbmFkYQotICAgIDB4MDQ1MDogIm1uX01OIiwgIyBNb25nb2xpYW4KKyAgICAweDA0NTA6ICJtbl9NTiIsICMgTW9uZ29saWFuIC0gQ3lyaWxsaWMKKyAgICAweDA4NTA6ICJtbl9DTiIsICMgTW9uZ29saWFuIC0gUFJDCiAgICAgMHgwNDYxOiAibmVfTlAiLCAjIE5lcGFsaQogICAgIDB4MDQxNDogIm5iX05PIiwgIyBOb3J3ZWdpYW4gLSBCb2ttYWwKICAgICAweDA4MTQ6ICJubl9OTyIsICMgTm9yd2VnaWFuIC0gTnlub3JzawpAQCAtMTYxMCw3ICsxNzE4LDcgQEAKICAgICAweDA4NmI6ICJxdXpfRUMiLCMgUXVlY2h1YSAoRWN1YWRvcikKICAgICAweDBjNmI6ICJxdXpfUEUiLCMgUXVlY2h1YSAoUGVydSkKICAgICAweDA0MTg6ICJyb19STyIsICMgUm9tYW5pYW4gLSBSb21hbmlhCi0gICAgMHgwNDE3OiAicm1fQ0giLCAjIFJhZXRvLVJvbWFuZXNlCisgICAgMHgwNDE3OiAicm1fQ0giLCAjIFJvbWFuc2gKICAgICAweDA0MTk6ICJydV9SVSIsICMgUnVzc2lhbgogICAgIDB4MjQzYjogInNtbl9GSSIsIyBTYW1pIEZpbmxhbmQKICAgICAweDEwM2I6ICJzbWpfTk8iLCMgU2FtaSBOb3J3YXkKQEAgLTE2MjYsNiArMTczNCw3IEBACiAgICAgMHgxYzFhOiAic3JfQkEiLCAjIFNlcmJpYW4gLSBCb3NuaWEgQ3lyaWxsaWMKICAgICAweDA4MWE6ICJzcl9TUCIsICMgU2VyYmlhbiAtIExhdGluCiAgICAgMHgxODFhOiAic3JfQkEiLCAjIFNlcmJpYW4gLSBCb3NuaWEgTGF0aW4KKyAgICAweDA0NWI6ICJzaV9MSyIsICMgU2luaGFsYSAtIFNyaSBMYW5rYQogICAgIDB4MDQ2YzogIm5zX1pBIiwgIyBOb3J0aGVybiBTb3RobwogICAgIDB4MDQzMjogInRuX1pBIiwgIyBTZXRzd2FuYSAtIFNvdXRoZXJuIEFmcmljYQogICAgIDB4MDQxYjogInNrX1NLIiwgIyBTbG92YWsKQEAgLTE2NTAsMjIgKzE3NTksMzcgQEAKICAgICAweDQ4MGE6ICJlc19ITiIsICMgU3BhbmlzaCAtIEhvbmR1cmFzCiAgICAgMHg0YzBhOiAiZXNfTkkiLCAjIFNwYW5pc2ggLSBOaWNhcmFndWEKICAgICAweDUwMGE6ICJlc19QUiIsICMgU3BhbmlzaCAtIFB1ZXJ0byBSaWNvCisgICAgMHg1NDBhOiAiZXNfVVMiLCAjIFNwYW5pc2ggLSBVbml0ZWQgU3RhdGVzCisjICAgIDB4MDQzMDogIiIsICMgU3V0dSAtIE5vdCBzdXBwb3J0ZWQKICAgICAweDA0NDE6ICJzd19LRSIsICMgU3dhaGlsaQogICAgIDB4MDQxZDogInN2X1NFIiwgIyBTd2VkaXNoIC0gU3dlZGVuCiAgICAgMHgwODFkOiAic3ZfRkkiLCAjIFN3ZWRpc2ggLSBGaW5sYW5kCiAgICAgMHgwNDVhOiAic3lyX1NZIiwjIFN5cmlhYworICAgIDB4MDQyODogInRnX1RKIiwgIyBUYWppayAtIEN5cmlsbGljCisgICAgMHgwODVmOiAidG16X0RaIiwjIFRhbWF6aWdodCAtIExhdGluCiAgICAgMHgwNDQ5OiAidGFfSU4iLCAjIFRhbWlsCiAgICAgMHgwNDQ0OiAidHRfUlUiLCAjIFRhdGFyCiAgICAgMHgwNDRhOiAidGVfSU4iLCAjIFRlbHVndQogICAgIDB4MDQxZTogInRoX1RIIiwgIyBUaGFpCisgICAgMHgwODUxOiAiYm9fQlQiLCAjIFRpYmV0YW4gLSBCaHV0YW4KKyAgICAweDA0NTE6ICJib19DTiIsICMgVGliZXRhbiAtIFBSQwogICAgIDB4MDQxZjogInRyX1RSIiwgIyBUdXJraXNoCisgICAgMHgwNDQyOiAidGtfVE0iLCAjIFR1cmttZW4gLSBDeXJpbGxpYworICAgIDB4MDQ4MDogInVnX0NOIiwgIyBVaWdodXIgLSBBcmFiaWMKICAgICAweDA0MjI6ICJ1a19VQSIsICMgVWtyYWluaWFuCisgICAgMHgwNDJlOiAid2VuX0RFIiwjIFVwcGVyIFNvcmJpYW4gLSBHZXJtYW55CiAgICAgMHgwNDIwOiAidXJfUEsiLCAjIFVyZHUKICAgICAweDA4MjA6ICJ1cl9JTiIsICMgVXJkdSAtIEluZGlhCiAgICAgMHgwNDQzOiAidXpfVVoiLCAjIFV6YmVrIC0gTGF0aW4KICAgICAweDA4NDM6ICJ1el9VWiIsICMgVXpiZWsgLSBDeXJpbGxpYwogICAgIDB4MDQyYTogInZpX1ZOIiwgIyBWaWV0bmFtZXNlCiAgICAgMHgwNDUyOiAiY3lfR0IiLCAjIFdlbHNoCisgICAgMHgwNDg4OiAid29fU04iLCAjIFdvbG9mIC0gU2VuZWdhbAorICAgIDB4MDQzNDogInhoX1pBIiwgIyBYaG9zYSAtIFNvdXRoIEFmcmljYQorICAgIDB4MDQ4NTogInNhaF9SVSIsIyBZYWt1dCAtIEN5cmlsbGljCisgICAgMHgwNDc4OiAiaWlfQ04iLCAjIFlpIC0gUFJDCisgICAgMHgwNDZhOiAieW9fTkciLCAjIFlvcnViYSAtIE5pZ2VyaWEKKyAgICAweDA0MzU6ICJ6dV9aQSIsICMgWnVsdQogfQogCiBkZWYgX3ByaW50X2xvY2FsZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQppbmRleCBiNDhiZWU4Li4yZjA4MWEwIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAwOSBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxMCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTIzLDE2ICsyMywxNiBAQAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAoraW1wb3J0IHN5cywgb3MsIHRpbWUsIGNTdHJpbmdJTywgdHJhY2ViYWNrLCB3YXJuaW5ncywgd2Vha3JlZgorCiBfX2FsbF9fID0gWydCQVNJQ19GT1JNQVQnLCAnQnVmZmVyaW5nRm9ybWF0dGVyJywgJ0NSSVRJQ0FMJywgJ0RFQlVHJywgJ0VSUk9SJywKICAgICAgICAgICAgJ0ZBVEFMJywgJ0ZpbGVIYW5kbGVyJywgJ0ZpbHRlcicsICdGb3JtYXR0ZXInLCAnSGFuZGxlcicsICdJTkZPJywKLSAgICAgICAgICAgJ0xvZ1JlY29yZCcsICdMb2dnZXInLCAnTG9nZ2VyQWRhcHRlcicsICdOT1RTRVQnLAorICAgICAgICAgICAnTG9nUmVjb3JkJywgJ0xvZ2dlcicsICdMb2dnZXJBZGFwdGVyJywgJ05PVFNFVCcsICdOdWxsSGFuZGxlcicsCiAgICAgICAgICAgICdTdHJlYW1IYW5kbGVyJywgJ1dBUk4nLCAnV0FSTklORycsICdhZGRMZXZlbE5hbWUnLCAnYmFzaWNDb25maWcnLAotICAgICAgICAgICAnY3JpdGljYWwnLCAnZGVidWcnLCAnZGlzYWJsZScsICdlcnJvcicsCisgICAgICAgICAgICdjYXB0dXJlV2FybmluZ3MnLCAnY3JpdGljYWwnLCAnZGVidWcnLCAnZGlzYWJsZScsICdlcnJvcicsCiAgICAgICAgICAgICdleGNlcHRpb24nLCAnZmF0YWwnLCAnZ2V0TGV2ZWxOYW1lJywgJ2dldExvZ2dlcicsICdnZXRMb2dnZXJDbGFzcycsCiAgICAgICAgICAgICdpbmZvJywgJ2xvZycsICdtYWtlTG9nUmVjb3JkJywgJ3NldExvZ2dlckNsYXNzJywgJ3dhcm4nLCAnd2FybmluZyddCiAKLWltcG9ydCBzeXMsIG9zLCB0eXBlcywgdGltZSwgc3RyaW5nLCBjU3RyaW5nSU8sIHRyYWNlYmFjawotCiB0cnk6CiAgICAgaW1wb3J0IGNvZGVjcwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNDYsMTIgKzQ2LDE3IEBACiAKIF9fYXV0aG9yX18gID0gIlZpbmF5IFNhamlwIDx2aW5heV9zYWppcEByZWQtZG92ZS5jb20+IgogX19zdGF0dXNfXyAgPSAicHJvZHVjdGlvbiIKLV9fdmVyc2lvbl9fID0gIjAuNS4wLjUiCi1fX2RhdGVfXyAgICA9ICIxNyBGZWJydWFyeSAyMDA5IgorX192ZXJzaW9uX18gPSAiMC41LjEuMiIKK19fZGF0ZV9fICAgID0gIjA3IEZlYnJ1YXJ5IDIwMTAiCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgICBNaXNjZWxsYW5lb3VzIG1vZHVsZSBkYXRhCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0cnk6CisgICAgdW5pY29kZQorICAgIF91bmljb2RlID0gVHJ1ZQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBfdW5pY29kZSA9IEZhbHNlCiAKICMKICMgX3NyY2ZpbGUgaXMgdXNlZCB3aGVuIHdhbGtpbmcgdGhlIHN0YWNrIHRvIGNoZWNrIHdoZW4gd2UndmUgZ290IHRoZSBmaXJzdApAQCAtNTksNyArNjQsNyBAQAogIwogaWYgaGFzYXR0cihzeXMsICdmcm96ZW4nKTogI3N1cHBvcnQgZm9yIHB5MmV4ZQogICAgIF9zcmNmaWxlID0gImxvZ2dpbmclc19faW5pdF9fJXMiICUgKG9zLnNlcCwgX19maWxlX19bLTQ6XSkKLWVsaWYgc3RyaW5nLmxvd2VyKF9fZmlsZV9fWy00Ol0pIGluIFsnLnB5YycsICcucHlvJ106CitlbGlmIF9fZmlsZV9fWy00Ol0ubG93ZXIoKSBpbiBbJy5weWMnLCAnLnB5byddOgogICAgIF9zcmNmaWxlID0gX19maWxlX19bOi00XSArICcucHknCiBlbHNlOgogICAgIF9zcmNmaWxlID0gX19maWxlX18KQEAgLTcxLDcgKzc2LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgogICAgIGV4Y2VwdDoKLSAgICAgICAgcmV0dXJuIHN5cy5leGNfdHJhY2ViYWNrLnRiX2ZyYW1lLmZfYmFjaworICAgICAgICByZXR1cm4gc3lzLmV4Y19pbmZvKClbMl0udGJfZnJhbWUuZl9iYWNrCiAKIGlmIGhhc2F0dHIoc3lzLCAnX2dldGZyYW1lJyk6IGN1cnJlbnRmcmFtZSA9IGxhbWJkYTogc3lzLl9nZXRmcmFtZSgzKQogIyBkb25lIGZpbGNoaW5nCkBAIC0xNzQsMTUgKzE3OSwyNiBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIF9yZWxlYXNlTG9jaygpCiAKK2RlZiBfY2hlY2tMZXZlbChsZXZlbCk6CisgICAgaWYgaXNpbnN0YW5jZShsZXZlbCwgaW50KToKKyAgICAgICAgcnYgPSBsZXZlbAorICAgIGVsaWYgc3RyKGxldmVsKSA9PSBsZXZlbDoKKyAgICAgICAgaWYgbGV2ZWwgbm90IGluIF9sZXZlbE5hbWVzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBsZXZlbDogJXIiICUgbGV2ZWwpCisgICAgICAgIHJ2ID0gX2xldmVsTmFtZXNbbGV2ZWxdCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCisgICAgcmV0dXJuIHJ2CisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgICBUaHJlYWQtcmVsYXRlZCBzdHVmZgogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjCiAjX2xvY2sgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgaW4gdGhpcyBtb2R1bGUuCi0jVGhpcyBuZWVkcyB0byBiZSBhbiBSTG9jayBiZWNhdXNlIGZpbGVDb25maWcoKSBjcmVhdGVzIEhhbmRsZXJzIGFuZCBzbwotI21pZ2h0IGFyYml0cmFyeSB1c2VyIHRocmVhZHMuIFNpbmNlIEhhbmRsZXIuX19pbml0X18oKSB1cGRhdGVzIHRoZSBzaGFyZWQKLSNkaWN0aW9uYXJ5IF9oYW5kbGVycywgaXQgbmVlZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4gQnV0IGlmIGNvbmZpZ3VyaW5nLAorI1RoaXMgbmVlZHMgdG8gYmUgYW4gUkxvY2sgYmVjYXVzZSBmaWxlQ29uZmlnKCkgY3JlYXRlcyBhbmQgY29uZmlndXJlcworI0hhbmRsZXJzLCBhbmQgc28gbWlnaHQgYXJiaXRyYXJ5IHVzZXIgdGhyZWFkcy4gU2luY2UgSGFuZGxlciBjb2RlIHVwZGF0ZXMgdGhlCisjc2hhcmVkIGRpY3Rpb25hcnkgX2hhbmRsZXJzLCBpdCBuZWVkcyB0byBhY3F1aXJlIHRoZSBsb2NrLiBCdXQgaWYgY29uZmlndXJpbmcsCiAjdGhlIGxvY2sgd291bGQgYWxyZWFkeSBoYXZlIGJlZW4gYWNxdWlyZWQgLSBzbyB3ZSBuZWVkIGFuIFJMb2NrLgogI1RoZSBzYW1lIGFyZ3VtZW50IGFwcGxpZXMgdG8gTG9nZ2VycyBhbmQgTWFuYWdlci5sb2dnZXJEaWN0LgogIwpAQCAtMjExLDcgKzIyNyw3IEBACiAjICAgVGhlIGxvZ2dpbmcgcmVjb3JkCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIExvZ1JlY29yZDoKK2NsYXNzIExvZ1JlY29yZChvYmplY3QpOgogICAgICIiIgogICAgIEEgTG9nUmVjb3JkIGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZXZlbnQgYmVpbmcgbG9nZ2VkLgogCkBAIC0yNDQsOSArMjYwLDcgQEAKICAgICAgICAgIyAnVmFsdWUgaXMgJWQnIGluc3RlYWQgb2YgJ1ZhbHVlIGlzIDAnLgogICAgICAgICAjIEZvciB0aGUgdXNlIGNhc2Ugb2YgcGFzc2luZyBhIGRpY3Rpb25hcnksIHRoaXMgc2hvdWxkIG5vdCBiZSBhCiAgICAgICAgICMgcHJvYmxlbS4KLSAgICAgICAgaWYgYXJncyBhbmQgbGVuKGFyZ3MpID09IDEgYW5kICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbMF0pID09IHR5cGVzLkRpY3RUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFuZCBhcmdzWzBdOgorICAgICAgICBpZiBhcmdzIGFuZCBsZW4oYXJncykgPT0gMSBhbmQgaXNpbnN0YW5jZShhcmdzWzBdLCBkaWN0KSBhbmQgYXJnc1swXToKICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdCiAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICAgc2VsZi5sZXZlbG5hbWUgPSBnZXRMZXZlbE5hbWUobGV2ZWwpCkBAIC0yNzMsMTAgKzI4NywxOCBAQAogICAgICAgICAgICAgc2VsZi50aHJlYWROYW1lID0gTm9uZQogICAgICAgICBpZiBub3QgbG9nTXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9IE5vbmUKLSAgICAgICAgZWxpZiAnbXVsdGlwcm9jZXNzaW5nJyBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gJ01haW5Qcm9jZXNzJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9IHN5cy5tb2R1bGVzWydtdWx0aXByb2Nlc3NpbmcnXS5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gJ01haW5Qcm9jZXNzJworICAgICAgICAgICAgbXAgPSBzeXMubW9kdWxlcy5nZXQoJ211bHRpcHJvY2Vzc2luZycpCisgICAgICAgICAgICBpZiBtcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIEVycm9ycyBtYXkgb2NjdXIgaWYgbXVsdGlwcm9jZXNzaW5nIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZworICAgICAgICAgICAgICAgICMgeWV0IC0gZS5nLiBpZiBhIGN1c3RvbSBpbXBvcnQgaG9vayBjYXVzZXMgdGhpcmQtcGFydHkgY29kZQorICAgICAgICAgICAgICAgICMgdG8gcnVuIHdoZW4gbXVsdGlwcm9jZXNzaW5nIGNhbGxzIGltcG9ydC4gU2VlIGlzc3VlIDgyMDAKKyAgICAgICAgICAgICAgICAjIGZvciBhbiBleGFtcGxlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gbXAuY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIGxvZ1Byb2Nlc3NlcyBhbmQgaGFzYXR0cihvcywgJ2dldHBpZCcpOgogICAgICAgICAgICAgc2VsZi5wcm9jZXNzID0gb3MuZ2V0cGlkKCkKICAgICAgICAgZWxzZToKQEAgLTI5MywxMSArMzE1LDExIEBACiAgICAgICAgIFJldHVybiB0aGUgbWVzc2FnZSBmb3IgdGhpcyBMb2dSZWNvcmQgYWZ0ZXIgbWVyZ2luZyBhbnkgdXNlci1zdXBwbGllZAogICAgICAgICBhcmd1bWVudHMgd2l0aCB0aGUgbWVzc2FnZS4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHR5cGVzLCAiVW5pY29kZVR5cGUiKTogI2lmIG5vIHVuaWNvZGUgc3VwcG9ydC4uLgorICAgICAgICBpZiBub3QgX3VuaWNvZGU6ICNpZiBubyB1bmljb2RlIHN1cHBvcnQuLi4KICAgICAgICAgICAgIG1zZyA9IHN0cihzZWxmLm1zZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1zZyA9IHNlbGYubXNnCi0gICAgICAgICAgICBpZiB0eXBlKG1zZykgbm90IGluICh0eXBlcy5Vbmljb2RlVHlwZSwgdHlwZXMuU3RyaW5nVHlwZSk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtc2csIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgbXNnID0gc3RyKHNlbGYubXNnKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CkBAIC0zMjEsNyArMzQzLDcgQEAKICMgICBGb3JtYXR0ZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEZvcm1hdHRlcjoKK2NsYXNzIEZvcm1hdHRlcihvYmplY3QpOgogICAgICIiIgogICAgIEZvcm1hdHRlciBpbnN0YW5jZXMgYXJlIHVzZWQgdG8gY29udmVydCBhIExvZ1JlY29yZCB0byB0ZXh0LgogCkBAIC00MjAsNiArNDQyLDEyIEBACiAgICAgICAgICAgICBzID0gc1s6LTFdCiAgICAgICAgIHJldHVybiBzCiAKKyAgICBkZWYgdXNlc1RpbWUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayBpZiB0aGUgZm9ybWF0IHVzZXMgdGhlIGNyZWF0aW9uIHRpbWUgb2YgdGhlIHJlY29yZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mbXQuZmluZCgiJShhc2N0aW1lKSIpID49IDAKKwogICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCiAgICAgICAgIEZvcm1hdCB0aGUgc3BlY2lmaWVkIHJlY29yZCBhcyB0ZXh0LgpAQCAtNDI4LDEzICs0NTYsMTMgQEAKICAgICAgICAgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uIHdoaWNoIHlpZWxkcyB0aGUgcmV0dXJuZWQgc3RyaW5nLgogICAgICAgICBCZWZvcmUgZm9ybWF0dGluZyB0aGUgZGljdGlvbmFyeSwgYSBjb3VwbGUgb2YgcHJlcGFyYXRvcnkgc3RlcHMKICAgICAgICAgYXJlIGNhcnJpZWQgb3V0LiBUaGUgbWVzc2FnZSBhdHRyaWJ1dGUgb2YgdGhlIHJlY29yZCBpcyBjb21wdXRlZAotICAgICAgICB1c2luZyBMb2dSZWNvcmQuZ2V0TWVzc2FnZSgpLiBJZiB0aGUgZm9ybWF0dGluZyBzdHJpbmcgY29udGFpbnMKLSAgICAgICAgIiUoYXNjdGltZSkiLCBmb3JtYXRUaW1lKCkgaXMgY2FsbGVkIHRvIGZvcm1hdCB0aGUgZXZlbnQgdGltZS4KLSAgICAgICAgSWYgdGhlcmUgaXMgZXhjZXB0aW9uIGluZm9ybWF0aW9uLCBpdCBpcyBmb3JtYXR0ZWQgdXNpbmcKLSAgICAgICAgZm9ybWF0RXhjZXB0aW9uKCkgYW5kIGFwcGVuZGVkIHRvIHRoZSBtZXNzYWdlLgorICAgICAgICB1c2luZyBMb2dSZWNvcmQuZ2V0TWVzc2FnZSgpLiBJZiB0aGUgZm9ybWF0dGluZyBzdHJpbmcgdXNlcyB0aGUKKyAgICAgICAgdGltZSAoYXMgZGV0ZXJtaW5lZCBieSBhIGNhbGwgdG8gdXNlc1RpbWUoKSwgZm9ybWF0VGltZSgpIGlzCisgICAgICAgIGNhbGxlZCB0byBmb3JtYXQgdGhlIGV2ZW50IHRpbWUuIElmIHRoZXJlIGlzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiwKKyAgICAgICAgaXQgaXMgZm9ybWF0dGVkIHVzaW5nIGZvcm1hdEV4Y2VwdGlvbigpIGFuZCBhcHBlbmRlZCB0byB0aGUgbWVzc2FnZS4KICAgICAgICAgIiIiCiAgICAgICAgIHJlY29yZC5tZXNzYWdlID0gcmVjb3JkLmdldE1lc3NhZ2UoKQotICAgICAgICBpZiBzdHJpbmcuZmluZChzZWxmLl9mbXQsIiUoYXNjdGltZSkiKSA+PSAwOgorICAgICAgICBpZiBzZWxmLnVzZXNUaW1lKCk6CiAgICAgICAgICAgICByZWNvcmQuYXNjdGltZSA9IHNlbGYuZm9ybWF0VGltZShyZWNvcmQsIHNlbGYuZGF0ZWZtdCkKICAgICAgICAgcyA9IHNlbGYuX2ZtdCAlIHJlY29yZC5fX2RpY3RfXwogICAgICAgICBpZiByZWNvcmQuZXhjX2luZm86CkBAIC00NTksNyArNDg3LDcgQEAKICMKIF9kZWZhdWx0Rm9ybWF0dGVyID0gRm9ybWF0dGVyKCkKIAotY2xhc3MgQnVmZmVyaW5nRm9ybWF0dGVyOgorY2xhc3MgQnVmZmVyaW5nRm9ybWF0dGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgQSBmb3JtYXR0ZXIgc3VpdGFibGUgZm9yIGZvcm1hdHRpbmcgYSBudW1iZXIgb2YgcmVjb3Jkcy4KICAgICAiIiIKQEAgLTUwMSw3ICs1MjksNyBAQAogIyAgIEZpbHRlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgRmlsdGVyOgorY2xhc3MgRmlsdGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgRmlsdGVyIGluc3RhbmNlcyBhcmUgdXNlZCB0byBwZXJmb3JtIGFyYml0cmFyeSBmaWx0ZXJpbmcgb2YgTG9nUmVjb3Jkcy4KIApAQCAtNTM0LDExICs1NjIsMTEgQEAKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIGVsaWYgc2VsZi5uYW1lID09IHJlY29yZC5uYW1lOgogICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZWxpZiBzdHJpbmcuZmluZChyZWNvcmQubmFtZSwgc2VsZi5uYW1lLCAwLCBzZWxmLm5sZW4pICE9IDA6CisgICAgICAgIGVsaWYgcmVjb3JkLm5hbWUuZmluZChzZWxmLm5hbWUsIDAsIHNlbGYubmxlbikgIT0gMDoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHJldHVybiAocmVjb3JkLm5hbWVbc2VsZi5ubGVuXSA9PSAiLiIpCiAKLWNsYXNzIEZpbHRlcmVyOgorY2xhc3MgRmlsdGVyZXIob2JqZWN0KToKICAgICAiIiIKICAgICBBIGJhc2UgY2xhc3MgZm9yIGxvZ2dlcnMgYW5kIGhhbmRsZXJzIHdoaWNoIGFsbG93cyB0aGVtIHRvIHNoYXJlCiAgICAgY29tbW9uIGNvZGUuCkBAIC01ODIsOSArNjEwLDM0IEBACiAjICAgSGFuZGxlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotX2hhbmRsZXJzID0ge30gICNyZXBvc2l0b3J5IG9mIGhhbmRsZXJzIChmb3IgZmx1c2hpbmcgd2hlbiBzaHV0ZG93biBjYWxsZWQpCitfaGFuZGxlcnMgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKSAgI21hcCBvZiBoYW5kbGVyIG5hbWVzIHRvIGhhbmRsZXJzCiBfaGFuZGxlckxpc3QgPSBbXSAjIGFkZGVkIHRvIGFsbG93IGhhbmRsZXJzIHRvIGJlIHJlbW92ZWQgaW4gcmV2ZXJzZSBvZiBvcmRlciBpbml0aWFsaXplZAogCitkZWYgX3JlbW92ZUhhbmRsZXJSZWYod3IpOgorICAgICIiIgorICAgIFJlbW92ZSBhIGhhbmRsZXIgcmVmZXJlbmNlIGZyb20gdGhlIGludGVybmFsIGNsZWFudXAgbGlzdC4KKyAgICAiIiIKKyAgICAjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHRlYXJkb3duLCB3aGVuIGdsb2JhbHMgYXJlCisgICAgIyBzZXQgdG8gTm9uZS4gSWYgX2FjcXVpcmVMb2NrIGlzIE5vbmUsIGFzc3VtZSB0aGlzIGlzIHRoZSBjYXNlIGFuZCBkbworICAgICMgbm90aGluZy4KKyAgICBpZiBfYWNxdWlyZUxvY2sgaXMgbm90IE5vbmU6CisgICAgICAgIF9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHdyIGluIF9oYW5kbGVyTGlzdDoKKyAgICAgICAgICAgICAgICBfaGFuZGxlckxpc3QucmVtb3ZlKHdyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKKworZGVmIF9hZGRIYW5kbGVyUmVmKGhhbmRsZXIpOgorICAgICIiIgorICAgIEFkZCBhIGhhbmRsZXIgdG8gdGhlIGludGVybmFsIGNsZWFudXAgbGlzdCB1c2luZyBhIHdlYWsgcmVmZXJlbmNlLgorICAgICIiIgorICAgIF9hY3F1aXJlTG9jaygpCisgICAgdHJ5OgorICAgICAgICBfaGFuZGxlckxpc3QuYXBwZW5kKHdlYWtyZWYucmVmKGhhbmRsZXIsIF9yZW1vdmVIYW5kbGVyUmVmKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBfcmVsZWFzZUxvY2soKQorCiBjbGFzcyBIYW5kbGVyKEZpbHRlcmVyKToKICAgICAiIiIKICAgICBIYW5kbGVyIGluc3RhbmNlcyBkaXNwYXRjaCBsb2dnaW5nIGV2ZW50cyB0byBzcGVjaWZpYyBkZXN0aW5hdGlvbnMuCkBAIC02MDAsMTYgKzY1MywyOCBAQAogICAgICAgICBhbmQgdGhlIGZpbHRlciBsaXN0IHRvIGVtcHR5LgogICAgICAgICAiIiIKICAgICAgICAgRmlsdGVyZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYuX25hbWUgPSBOb25lCisgICAgICAgIHNlbGYubGV2ZWwgPSBfY2hlY2tMZXZlbChsZXZlbCkKICAgICAgICAgc2VsZi5mb3JtYXR0ZXIgPSBOb25lCi0gICAgICAgICNnZXQgdGhlIG1vZHVsZSBkYXRhIGxvY2ssIGFzIHdlJ3JlIHVwZGF0aW5nIGEgc2hhcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgIyBBZGQgdGhlIGhhbmRsZXIgdG8gdGhlIGdsb2JhbCBfaGFuZGxlckxpc3QgKGZvciBjbGVhbnVwIG9uIHNodXRkb3duKQorICAgICAgICBfYWRkSGFuZGxlclJlZihzZWxmKQorICAgICAgICBzZWxmLmNyZWF0ZUxvY2soKQorCisgICAgZGVmIGdldF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHNldF9uYW1lKHNlbGYsIG5hbWUpOgogICAgICAgICBfYWNxdWlyZUxvY2soKQotICAgICAgICB0cnk6ICAgICN1bmxpa2VseSB0byByYWlzZSBhbiBleGNlcHRpb24sIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgotICAgICAgICAgICAgX2hhbmRsZXJzW3NlbGZdID0gMQotICAgICAgICAgICAgX2hhbmRsZXJMaXN0Lmluc2VydCgwLCBzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBkZWwgX2hhbmRsZXJzW3NlbGYuX25hbWVdCisgICAgICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICAgICAgaWYgbmFtZToKKyAgICAgICAgICAgICAgICBfaGFuZGxlcnNbbmFtZV0gPSBzZWxmCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQotICAgICAgICBzZWxmLmNyZWF0ZUxvY2soKQorCisgICAgbmFtZSA9IHByb3BlcnR5KGdldF9uYW1lLCBzZXRfbmFtZSkKIAogICAgIGRlZiBjcmVhdGVMb2NrKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTYzOCw3ICs3MDMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgU2V0IHRoZSBsb2dnaW5nIGxldmVsIG9mIHRoaXMgaGFuZGxlci4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorICAgICAgICBzZWxmLmxldmVsID0gX2NoZWNrTGV2ZWwobGV2ZWwpCiAKICAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CiAgICAgICAgICIiIgpAQCAtNjYwLDggKzcyNSw4IEBACiAgICAgICAgIFRoaXMgdmVyc2lvbiBpcyBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGFuZCBzbwogICAgICAgICByYWlzZXMgYSBOb3RJbXBsZW1lbnRlZEVycm9yLgogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgJ2VtaXQgbXVzdCBiZSBpbXBsZW1lbnRlZCAnXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5IEhhbmRsZXIgc3ViY2xhc3NlcycKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignZW1pdCBtdXN0IGJlIGltcGxlbWVudGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnkgSGFuZGxlciBzdWJjbGFzc2VzJykKIAogICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCkBAIC03MDAsMTggKzc2NSwxNiBAQAogICAgICAgICAiIiIKICAgICAgICAgVGlkeSB1cCBhbnkgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGhhbmRsZXIuCiAKLSAgICAgICAgVGhpcyB2ZXJzaW9uIGRvZXMgcmVtb3ZlcyB0aGUgaGFuZGxlciBmcm9tIGFuIGludGVybmFsIGxpc3QKLSAgICAgICAgb2YgaGFuZGxlcnMgd2hpY2ggaXMgY2xvc2VkIHdoZW4gc2h1dGRvd24oKSBpcyBjYWxsZWQuIFN1YmNsYXNzZXMKKyAgICAgICAgVGhpcyB2ZXJzaW9uIHJlbW92ZXMgdGhlIGhhbmRsZXIgZnJvbSBhbiBpbnRlcm5hbCBtYXAgb2YgaGFuZGxlcnMsCisgICAgICAgIF9oYW5kbGVycywgd2hpY2ggaXMgdXNlZCBmb3IgaGFuZGxlciBsb29rdXAgYnkgbmFtZS4gU3ViY2xhc3NlcwogICAgICAgICBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBnZXRzIGNhbGxlZCBmcm9tIG92ZXJyaWRkZW4gY2xvc2UoKQogICAgICAgICBtZXRob2RzLgogICAgICAgICAiIiIKICAgICAgICAgI2dldCB0aGUgbW9kdWxlIGRhdGEgbG9jaywgYXMgd2UncmUgdXBkYXRpbmcgYSBzaGFyZWQgc3RydWN0dXJlLgogICAgICAgICBfYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6ICAgICN1bmxpa2VseSB0byByYWlzZSBhbiBleGNlcHRpb24sIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgotICAgICAgICAgICAgaWYgc2VsZiBpbiBfaGFuZGxlcnM6Ci0gICAgICAgICAgICAgICAgZGVsIF9oYW5kbGVyc1tzZWxmXQotICAgICAgICAgICAgaWYgc2VsZiBpbiBfaGFuZGxlckxpc3Q6Ci0gICAgICAgICAgICAgICAgX2hhbmRsZXJMaXN0LnJlbW92ZShzZWxmKQorICAgICAgICAgICAgaWYgc2VsZi5fbmFtZSBhbmQgc2VsZi5fbmFtZSBpbiBfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgZGVsIF9oYW5kbGVyc1tzZWxmLl9uYW1lXQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKIApAQCAtNzMwLDcgKzc5MywxMCBAQAogICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICBlaSA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLCBOb25lLCBzeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oZWlbMF0sIGVpWzFdLCBlaVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5maWxlbmFtZSwgcmVjb3JkLmxpbmVubykpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC03NDMsMTYgKzgwOSwxNiBAQAogICAgIHN5cy5zdGRvdXQgb3Igc3lzLnN0ZGVyciBtYXkgYmUgdXNlZC4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW09Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBoYW5kbGVyLgogCi0gICAgICAgIElmIHN0cm0gaXMgbm90IHNwZWNpZmllZCwgc3lzLnN0ZGVyciBpcyB1c2VkLgorICAgICAgICBJZiBzdHJlYW0gaXMgbm90IHNwZWNpZmllZCwgc3lzLnN0ZGVyciBpcyB1c2VkLgogICAgICAgICAiIiIKICAgICAgICAgSGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBpZiBzdHJtIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdHJtID0gc3lzLnN0ZGVycgotICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cm0KKyAgICAgICAgaWYgc3RyZWFtIGlzIE5vbmU6CisgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCiAKICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICIiIgpAQCAtNzY5LDIyICs4MzUsMjIgQEAKICAgICAgICAgVGhlIHJlY29yZCBpcyB0aGVuIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSB3aXRoIGEgdHJhaWxpbmcgbmV3bGluZS4gIElmCiAgICAgICAgIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCBpdCBpcyBmb3JtYXR0ZWQgdXNpbmcKICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbiBhbmQgYXBwZW5kZWQgdG8gdGhlIHN0cmVhbS4gIElmIHRoZSBzdHJlYW0KLSAgICAgICAgaGFzIGFuICdlbmNvZGluZycgYXR0cmlidXRlLCBpdCBpcyB1c2VkIHRvIGVuY29kZSB0aGUgbWVzc2FnZSBiZWZvcmUKKyAgICAgICAgaGFzIGFuICdlbmNvZGluZycgYXR0cmlidXRlLCBpdCBpcyB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gZG8gdGhlCiAgICAgICAgIG91dHB1dCB0byB0aGUgc3RyZWFtLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdHJlYW0KICAgICAgICAgICAgIGZzID0gIiVzXG4iCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cih0eXBlcywgIlVuaWNvZGVUeXBlIik6ICNpZiBubyB1bmljb2RlIHN1cHBvcnQuLi4KKyAgICAgICAgICAgIGlmIG5vdCBfdW5pY29kZTogI2lmIG5vIHVuaWNvZGUgc3VwcG9ydC4uLgogICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZShmcyAlIG1zZykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShtc2csIHVuaWNvZGUpIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzdHJlYW0sICdlbmNvZGluZycsIE5vbmUpKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZzID0gZnMuZGVjb2RlKHN0cmVhbS5lbmNvZGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHVmcyA9IGZzLmRlY29kZShzdHJlYW0uZW5jb2RpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKGZzICUgbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSh1ZnMgJSBtc2cpCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICNQcmludGluZyB0byB0ZXJtaW5hbHMgc29tZXRpbWVzIGZhaWxzLiBGb3IgZXhhbXBsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjd2l0aCBhbiBlbmNvZGluZyBvZiAnY3AxMjUxJywgdGhlIGFib3ZlIHdyaXRlIHdpbGwKQEAgLTc5Miw3ICs4NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aGUgY29kZWNzIG1vZHVsZSwgYnV0IGZhaWwgd2hlbiB3cml0aW5nIHRvIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVybWluYWwgZXZlbiB3aGVuIHRoZSBjb2RlcGFnZSBpcyBzZXQgdG8gY3AxMjUxLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBbiBleHRyYSBlbmNvZGluZyBzdGVwIHNlZW1zIHRvIGJlIG5lZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoKGZzICUgbXNnKS5lbmNvZGUoc3RyZWFtLmVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoKHVmcyAlIG1zZykuZW5jb2RlKHN0cmVhbS5lbmNvZGluZykpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoZnMgJSBtc2cpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKQEAgLTg2Myw3ICs5MjksNyBAQAogIyAgIE1hbmFnZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFBsYWNlSG9sZGVyOgorY2xhc3MgUGxhY2VIb2xkZXIob2JqZWN0KToKICAgICAiIiIKICAgICBQbGFjZUhvbGRlciBpbnN0YW5jZXMgYXJlIHVzZWQgaW4gdGhlIE1hbmFnZXIgbG9nZ2VyIGhpZXJhcmNoeSB0byB0YWtlCiAgICAgdGhlIHBsYWNlIG9mIG5vZGVzIGZvciB3aGljaCBubyBsb2dnZXJzIGhhdmUgYmVlbiBkZWZpbmVkLiBUaGlzIGNsYXNzIGlzCkBAIC04OTgsOCArOTY0LDggQEAKICAgICAiIiIKICAgICBpZiBrbGFzcyAhPSBMb2dnZXI6CiAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGtsYXNzLCBMb2dnZXIpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAibG9nZ2VyIG5vdCBkZXJpdmVkIGZyb20gbG9nZ2luZy5Mb2dnZXI6ICIgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2xhc3MuX19uYW1lX18KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibG9nZ2VyIG5vdCBkZXJpdmVkIGZyb20gbG9nZ2luZy5Mb2dnZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtsYXNzLl9fbmFtZV9fKQogICAgIGdsb2JhbCBfbG9nZ2VyQ2xhc3MKICAgICBfbG9nZ2VyQ2xhc3MgPSBrbGFzcwogCkBAIC05MTAsNyArOTc2LDcgQEAKIAogICAgIHJldHVybiBfbG9nZ2VyQ2xhc3MKIAotY2xhc3MgTWFuYWdlcjoKK2NsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAiIiIKICAgICBUaGVyZSBpcyBbdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXNdIGp1c3Qgb25lIE1hbmFnZXIgaW5zdGFuY2UsIHdoaWNoCiAgICAgaG9sZHMgdGhlIGhpZXJhcmNoeSBvZiBsb2dnZXJzLgpAQCAtOTIzLDYgKzk4OSw3IEBACiAgICAgICAgIHNlbGYuZGlzYWJsZSA9IDAKICAgICAgICAgc2VsZi5lbWl0dGVkTm9IYW5kbGVyV2FybmluZyA9IDAKICAgICAgICAgc2VsZi5sb2dnZXJEaWN0ID0ge30KKyAgICAgICAgc2VsZi5sb2dnZXJDbGFzcyA9IE5vbmUKIAogICAgIGRlZiBnZXRMb2dnZXIoc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIgpAQCAtOTQyLDEzICsxMDA5LDEzIEBACiAgICAgICAgICAgICAgICAgcnYgPSBzZWxmLmxvZ2dlckRpY3RbbmFtZV0KICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJ2LCBQbGFjZUhvbGRlcik6CiAgICAgICAgICAgICAgICAgICAgIHBoID0gcnYKLSAgICAgICAgICAgICAgICAgICAgcnYgPSBfbG9nZ2VyQ2xhc3MobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcnYgPSAoc2VsZi5sb2dnZXJDbGFzcyBvciBfbG9nZ2VyQ2xhc3MpKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJ2Lm1hbmFnZXIgPSBzZWxmCiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyRGljdFtuYW1lXSA9IHJ2CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpeHVwQ2hpbGRyZW4ocGgsIHJ2KQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maXh1cFBhcmVudHMocnYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJ2ID0gX2xvZ2dlckNsYXNzKG5hbWUpCisgICAgICAgICAgICAgICAgcnYgPSAoc2VsZi5sb2dnZXJDbGFzcyBvciBfbG9nZ2VyQ2xhc3MpKG5hbWUpCiAgICAgICAgICAgICAgICAgcnYubWFuYWdlciA9IHNlbGYKICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlckRpY3RbbmFtZV0gPSBydgogICAgICAgICAgICAgICAgIHNlbGYuX2ZpeHVwUGFyZW50cyhydikKQEAgLTk1NiwxMyArMTAyMywyMyBAQAogICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKICAgICAgICAgcmV0dXJuIHJ2CiAKKyAgICBkZWYgc2V0TG9nZ2VyQ2xhc3Moc2VsZiwga2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBjbGFzcyB0byBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGxvZ2dlciB3aXRoIHRoaXMgTWFuYWdlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGtsYXNzICE9IExvZ2dlcjoKKyAgICAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGtsYXNzLCBMb2dnZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibG9nZ2VyIG5vdCBkZXJpdmVkIGZyb20gbG9nZ2luZy5Mb2dnZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrbGFzcy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5sb2dnZXJDbGFzcyA9IGtsYXNzCisKICAgICBkZWYgX2ZpeHVwUGFyZW50cyhzZWxmLCBhbG9nZ2VyKToKICAgICAgICAgIiIiCiAgICAgICAgIEVuc3VyZSB0aGF0IHRoZXJlIGFyZSBlaXRoZXIgbG9nZ2VycyBvciBwbGFjZWhvbGRlcnMgYWxsIHRoZSB3YXkKICAgICAgICAgZnJvbSB0aGUgc3BlY2lmaWVkIGxvZ2dlciB0byB0aGUgcm9vdCBvZiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4KICAgICAgICAgIiIiCiAgICAgICAgIG5hbWUgPSBhbG9nZ2VyLm5hbWUKLSAgICAgICAgaSA9IHN0cmluZy5yZmluZChuYW1lLCAiLiIpCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCIuIikKICAgICAgICAgcnYgPSBOb25lCiAgICAgICAgIHdoaWxlIChpID4gMCkgYW5kIG5vdCBydjoKICAgICAgICAgICAgIHN1YnN0ciA9IG5hbWVbOmldCkBAIC05NzUsNyArMTA1Miw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob2JqLCBQbGFjZUhvbGRlcikKICAgICAgICAgICAgICAgICAgICAgb2JqLmFwcGVuZChhbG9nZ2VyKQotICAgICAgICAgICAgaSA9IHN0cmluZy5yZmluZChuYW1lLCAiLiIsIDAsIGkgLSAxKQorICAgICAgICAgICAgaSA9IG5hbWUucmZpbmQoIi4iLCAwLCBpIC0gMSkKICAgICAgICAgaWYgbm90IHJ2OgogICAgICAgICAgICAgcnYgPSBzZWxmLnJvb3QKICAgICAgICAgYWxvZ2dlci5wYXJlbnQgPSBydgpAQCAtOTg5LDcgKzEwNjYsNiBAQAogICAgICAgICBuYW1lbGVuID0gbGVuKG5hbWUpCiAgICAgICAgIGZvciBjIGluIHBoLmxvZ2dlck1hcC5rZXlzKCk6CiAgICAgICAgICAgICAjVGhlIGlmIG1lYW5zIC4uLiBpZiBub3QgYy5wYXJlbnQubmFtZS5zdGFydHN3aXRoKG5tKQotICAgICAgICAgICAgI2lmIHN0cmluZy5maW5kKGMucGFyZW50Lm5hbWUsIG5tKSA8PiAwOgogICAgICAgICAgICAgaWYgYy5wYXJlbnQubmFtZVs6bmFtZWxlbl0gIT0gbmFtZToKICAgICAgICAgICAgICAgICBhbG9nZ2VyLnBhcmVudCA9IGMucGFyZW50CiAgICAgICAgICAgICAgICAgYy5wYXJlbnQgPSBhbG9nZ2VyCkBAIC0xMDE5LDcgKzEwOTUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgRmlsdGVyZXIuX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5sZXZlbCA9IF9jaGVja0xldmVsKGxldmVsKQogICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKICAgICAgICAgc2VsZi5wcm9wYWdhdGUgPSAxCiAgICAgICAgIHNlbGYuaGFuZGxlcnMgPSBbXQpAQCAtMTAyOSw3ICsxMTA1LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB0aGUgbG9nZ2luZyBsZXZlbCBvZiB0aGlzIGxvZ2dlci4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorICAgICAgICBzZWxmLmxldmVsID0gX2NoZWNrTGV2ZWwobGV2ZWwpCiAKICAgICBkZWYgZGVidWcoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKQEAgLTEwODUsNyArMTE2MSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvZ2dpbmcgYW4gRVJST1Igd2l0aCBleGNlcHRpb24gaW5mb3JtYXRpb24uCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmVycm9yKCooKG1zZywpICsgYXJncyksICoqeydleGNfaW5mbyc6IDF9KQorICAgICAgICBzZWxmLmVycm9yKG1zZywgZXhjX2luZm89MSwgKmFyZ3MpCiAKICAgICBkZWYgY3JpdGljYWwoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKQEAgLTExMTAsOSArMTE4Niw5IEBACiAKICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgIldlIGhhdmUgYSAlcyIsICJteXN0ZXJpb3VzIHByb2JsZW0iLCBleGNfaW5mbz0xKQogICAgICAgICAiIiIKLSAgICAgICAgaWYgdHlwZShsZXZlbCkgIT0gdHlwZXMuSW50VHlwZToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGV2ZWwsIGludCk6CiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAibGV2ZWwgbXVzdCBiZSBhbiBpbnRlZ2VyIgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGV2ZWwgbXVzdCBiZSBhbiBpbnRlZ2VyIikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYuaXNFbmFibGVkRm9yKGxldmVsKToKQEAgLTExMzUsNyArMTIxMSw3IEBACiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSBfc3JjZmlsZToKICAgICAgICAgICAgICAgICBmID0gZi5mX2JhY2sKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgcnYgPSAoZmlsZW5hbWUsIGYuZl9saW5lbm8sIGNvLmNvX25hbWUpCisgICAgICAgICAgICBydiA9IChjby5jb19maWxlbmFtZSwgZi5mX2xpbmVubywgY28uY29fbmFtZSkKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHJldHVybiBydgogCkBAIC0xMTU5LDcgKzEyMzUsOCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgX3NyY2ZpbGU6CiAgICAgICAgICAgICAjSXJvblB5dGhvbiBkb2Vzbid0IHRyYWNrIFB5dGhvbiBmcmFtZXMsIHNvIGZpbmRDYWxsZXIgdGhyb3dzIGFuCi0gICAgICAgICAgICAjZXhjZXB0aW9uLiBXZSB0cmFwIGl0IGhlcmUgc28gdGhhdCBJcm9uUHl0aG9uIGNhbiB1c2UgbG9nZ2luZy4KKyAgICAgICAgICAgICNleGNlcHRpb24gb24gc29tZSB2ZXJzaW9ucyBvZiBJcm9uUHl0aG9uLiBXZSB0cmFwIGl0IGhlcmUgc28gdGhhdAorICAgICAgICAgICAgI0lyb25QeXRob24gY2FuIHVzZSBsb2dnaW5nLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZuLCBsbm8sIGZ1bmMgPSBzZWxmLmZpbmRDYWxsZXIoKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC0xMTY3LDcgKzEyNDQsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm4sIGxubywgZnVuYyA9ICIodW5rbm93biBmaWxlKSIsIDAsICIodW5rbm93biBmdW5jdGlvbikiCiAgICAgICAgIGlmIGV4Y19pbmZvOgotICAgICAgICAgICAgaWYgdHlwZShleGNfaW5mbykgIT0gdHlwZXMuVHVwbGVUeXBlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjX2luZm8sIHR1cGxlKToKICAgICAgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgIHJlY29yZCA9IHNlbGYubWFrZVJlY29yZChzZWxmLm5hbWUsIGxldmVsLCBmbiwgbG5vLCBtc2csIGFyZ3MsIGV4Y19pbmZvLCBmdW5jLCBleHRyYSkKICAgICAgICAgc2VsZi5oYW5kbGUocmVjb3JkKQpAQCAtMTE4NiwyMCArMTI2MywyMyBAQAogICAgICAgICAiIiIKICAgICAgICAgQWRkIHRoZSBzcGVjaWZpZWQgaGFuZGxlciB0byB0aGlzIGxvZ2dlci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCAoaGRsciBpbiBzZWxmLmhhbmRsZXJzKToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlcnMuYXBwZW5kKGhkbHIpCisgICAgICAgIF9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCAoaGRsciBpbiBzZWxmLmhhbmRsZXJzKToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJzLmFwcGVuZChoZGxyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKIAogICAgIGRlZiByZW1vdmVIYW5kbGVyKHNlbGYsIGhkbHIpOgogICAgICAgICAiIiIKICAgICAgICAgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgaGFuZGxlciBmcm9tIHRoaXMgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgaGRsciBpbiBzZWxmLmhhbmRsZXJzOgotICAgICAgICAgICAgI2hkbHIuY2xvc2UoKQotICAgICAgICAgICAgaGRsci5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgX2FjcXVpcmVMb2NrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaGRsciBpbiBzZWxmLmhhbmRsZXJzOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlcnMucmVtb3ZlKGhkbHIpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGhkbHIucmVsZWFzZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogCiAgICAgZGVmIGNhbGxIYW5kbGVycyhzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKQEAgLTEyNDksNiArMTMyOSwyNSBAQAogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgcmV0dXJuIGxldmVsID49IHNlbGYuZ2V0RWZmZWN0aXZlTGV2ZWwoKQogCisgICAgZGVmIGdldENoaWxkKHNlbGYsIHN1ZmZpeCk6CisgICAgICAgICIiIgorICAgICAgICBHZXQgYSBsb2dnZXIgd2hpY2ggaXMgYSBkZXNjZW5kYW50IHRvIHRoaXMgb25lLgorCisgICAgICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QsIHN1Y2ggdGhhdAorCisgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMnKS5nZXRDaGlsZCgnZGVmLmdoaScpCisKKyAgICAgICAgaXMgdGhlIHNhbWUgYXMKKworICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKQorCisgICAgICAgIEl0J3MgdXNlZnVsLCBmb3IgZXhhbXBsZSwgd2hlbiB0aGUgcGFyZW50IGxvZ2dlciBpcyBuYW1lZCB1c2luZworICAgICAgICBfX25hbWVfXyByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5yb290IGlzIG5vdCBzZWxmOgorICAgICAgICAgICAgc3VmZml4ID0gJy4nLmpvaW4oKHNlbGYubmFtZSwgc3VmZml4KSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFuYWdlci5nZXRMb2dnZXIoc3VmZml4KQorCiBjbGFzcyBSb290TG9nZ2VyKExvZ2dlcik6CiAgICAgIiIiCiAgICAgQSByb290IGxvZ2dlciBpcyBub3QgdGhhdCBkaWZmZXJlbnQgdG8gYW55IG90aGVyIGxvZ2dlciwgZXhjZXB0IHRoYXQKQEAgLTEyNjMsNyArMTM2Miw3IEBACiAKIF9sb2dnZXJDbGFzcyA9IExvZ2dlcgogCi1jbGFzcyBMb2dnZXJBZGFwdGVyOgorY2xhc3MgTG9nZ2VyQWRhcHRlcihvYmplY3QpOgogICAgICIiIgogICAgIEFuIGFkYXB0ZXIgZm9yIGxvZ2dlcnMgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNwZWNpZnkgY29udGV4dHVhbAogICAgIGluZm9ybWF0aW9uIGluIGxvZ2dpbmcgb3V0cHV0LgpAQCAtMTM1Myw2ICsxNDUyLDEyIEBACiAgICAgICAgIG1zZywga3dhcmdzID0gc2VsZi5wcm9jZXNzKG1zZywga3dhcmdzKQogICAgICAgICBzZWxmLmxvZ2dlci5sb2cobGV2ZWwsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCisgICAgZGVmIGlzRW5hYmxlZEZvcihzZWxmLCBsZXZlbCk6CisgICAgICAgICIiIgorICAgICAgICBTZWUgaWYgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIGlzIGVuYWJsZWQgZm9yIHRoZSBzcGVjaWZpZWQgbGV2ZWwuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5sb2dnZXIuaXNFbmFibGVkRm9yKGxldmVsKQorCiByb290ID0gUm9vdExvZ2dlcihXQVJOSU5HKQogTG9nZ2VyLnJvb3QgPSByb290CiBMb2dnZXIubWFuYWdlciA9IE1hbmFnZXIoTG9nZ2VyLnJvb3QpCkBAIC0xMzk1LDIyICsxNTAwLDI4IEBACiAgICAgdXNpbmcgc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyKSwgd2hlcmVhcyBGaWxlSGFuZGxlciBjbG9zZXMgaXRzIHN0cmVhbQogICAgIHdoZW4gdGhlIGhhbmRsZXIgaXMgY2xvc2VkLgogICAgICIiIgotICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgotICAgICAgICBmaWxlbmFtZSA9IGt3YXJncy5nZXQoImZpbGVuYW1lIikKLSAgICAgICAgaWYgZmlsZW5hbWU6Ci0gICAgICAgICAgICBtb2RlID0ga3dhcmdzLmdldCgiZmlsZW1vZGUiLCAnYScpCi0gICAgICAgICAgICBoZGxyID0gRmlsZUhhbmRsZXIoZmlsZW5hbWUsIG1vZGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdHJlYW0gPSBrd2FyZ3MuZ2V0KCJzdHJlYW0iKQotICAgICAgICAgICAgaGRsciA9IFN0cmVhbUhhbmRsZXIoc3RyZWFtKQotICAgICAgICBmcyA9IGt3YXJncy5nZXQoImZvcm1hdCIsIEJBU0lDX0ZPUk1BVCkKLSAgICAgICAgZGZzID0ga3dhcmdzLmdldCgiZGF0ZWZtdCIsIE5vbmUpCi0gICAgICAgIGZtdCA9IEZvcm1hdHRlcihmcywgZGZzKQotICAgICAgICBoZGxyLnNldEZvcm1hdHRlcihmbXQpCi0gICAgICAgIHJvb3QuYWRkSGFuZGxlcihoZGxyKQotICAgICAgICBsZXZlbCA9IGt3YXJncy5nZXQoImxldmVsIikKLSAgICAgICAgaWYgbGV2ZWwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByb290LnNldExldmVsKGxldmVsKQorICAgICMgQWRkIHRocmVhZCBzYWZldHkgaW4gY2FzZSBzb21lb25lIG1pc3Rha2VubHkgY2FsbHMKKyAgICAjIGJhc2ljQ29uZmlnKCkgZnJvbSBtdWx0aXBsZSB0aHJlYWRzCisgICAgX2FjcXVpcmVMb2NrKCkKKyAgICB0cnk6CisgICAgICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBrd2FyZ3MuZ2V0KCJmaWxlbmFtZSIpCisgICAgICAgICAgICBpZiBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICBtb2RlID0ga3dhcmdzLmdldCgiZmlsZW1vZGUiLCAnYScpCisgICAgICAgICAgICAgICAgaGRsciA9IEZpbGVIYW5kbGVyKGZpbGVuYW1lLCBtb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBrd2FyZ3MuZ2V0KCJzdHJlYW0iKQorICAgICAgICAgICAgICAgIGhkbHIgPSBTdHJlYW1IYW5kbGVyKHN0cmVhbSkKKyAgICAgICAgICAgIGZzID0ga3dhcmdzLmdldCgiZm9ybWF0IiwgQkFTSUNfRk9STUFUKQorICAgICAgICAgICAgZGZzID0ga3dhcmdzLmdldCgiZGF0ZWZtdCIsIE5vbmUpCisgICAgICAgICAgICBmbXQgPSBGb3JtYXR0ZXIoZnMsIGRmcykKKyAgICAgICAgICAgIGhkbHIuc2V0Rm9ybWF0dGVyKGZtdCkKKyAgICAgICAgICAgIHJvb3QuYWRkSGFuZGxlcihoZGxyKQorICAgICAgICAgICAgbGV2ZWwgPSBrd2FyZ3MuZ2V0KCJsZXZlbCIpCisgICAgICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByb290LnNldExldmVsKGxldmVsKQorICAgIGZpbmFsbHk6CisgICAgICAgIF9yZWxlYXNlTG9jaygpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVXRpbGl0eSBmdW5jdGlvbnMgYXQgbW9kdWxlIGxldmVsLgpAQCAtMTQ0Myw3ICsxNTU0LDcgQEAKICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQotICAgIHJvb3QuY3JpdGljYWwoKigobXNnLCkrYXJncyksICoqa3dhcmdzKQorICAgIHJvb3QuY3JpdGljYWwobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKIGZhdGFsID0gY3JpdGljYWwKIApAQCAtMTQ1MywxNCArMTU2NCwxNCBAQAogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCi0gICAgcm9vdC5lcnJvcigqKChtc2csKSthcmdzKSwgKiprd2FyZ3MpCisgICAgcm9vdC5lcnJvcihtc2csICphcmdzLCAqKmt3YXJncykKIAogZGVmIGV4Y2VwdGlvbihtc2csICphcmdzKToKICAgICAiIiIKICAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0VSUk9SJyBvbiB0aGUgcm9vdCBsb2dnZXIsCiAgICAgd2l0aCBleGNlcHRpb24gaW5mb3JtYXRpb24uCiAgICAgIiIiCi0gICAgZXJyb3IoKigobXNnLCkrYXJncyksICoqeydleGNfaW5mbyc6IDF9KQorICAgIGVycm9yKG1zZywgZXhjX2luZm89MSwgKmFyZ3MpCiAKIGRlZiB3YXJuaW5nKG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAiIiIKQEAgLTE0NjgsNyArMTU3OSw3IEBACiAgICAgIiIiCiAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6CiAgICAgICAgIGJhc2ljQ29uZmlnKCkKLSAgICByb290Lndhcm5pbmcoKigobXNnLCkrYXJncyksICoqa3dhcmdzKQorICAgIHJvb3Qud2FybmluZyhtc2csICphcmdzLCAqKmt3YXJncykKIAogd2FybiA9IHdhcm5pbmcKIApAQCAtMTQ3OCw3ICsxNTg5LDcgQEAKICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQotICAgIHJvb3QuaW5mbygqKChtc2csKSthcmdzKSwgKiprd2FyZ3MpCisgICAgcm9vdC5pbmZvKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiBkZWYgZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgpAQCAtMTQ4Niw3ICsxNTk3LDcgQEAKICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQotICAgIHJvb3QuZGVidWcoKigobXNnLCkrYXJncyksICoqa3dhcmdzKQorICAgIHJvb3QuZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKIGRlZiBsb2cobGV2ZWwsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAiIiIKQEAgLTE0OTQsMTEgKzE2MDUsMTEgQEAKICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQotICAgIHJvb3QubG9nKCooKGxldmVsLCBtc2cpK2FyZ3MpLCAqKmt3YXJncykKKyAgICByb290LmxvZyhsZXZlbCwgbXNnLCAqYXJncywgKiprd2FyZ3MpCiAKIGRlZiBkaXNhYmxlKGxldmVsKToKICAgICAiIiIKLSAgICBEaXNhYmxlIGFsbCBsb2dnaW5nIGNhbGxzIGxlc3Mgc2V2ZXJlIHRoYW4gJ2xldmVsJy4KKyAgICBEaXNhYmxlIGFsbCBsb2dnaW5nIGNhbGxzIG9mIHNldmVyaXR5ICdsZXZlbCcgYW5kIGJlbG93LgogICAgICIiIgogICAgIHJvb3QubWFuYWdlci5kaXNhYmxlID0gbGV2ZWwKIApAQCAtMTUwOSwyNiArMTYyMCw4NSBAQAogCiAgICAgU2hvdWxkIGJlIGNhbGxlZCBhdCBhcHBsaWNhdGlvbiBleGl0LgogICAgICIiIgotICAgIGZvciBoIGluIGhhbmRsZXJMaXN0WzpdOgorICAgIGZvciB3ciBpbiByZXZlcnNlZChoYW5kbGVyTGlzdFs6XSk6CiAgICAgICAgICNlcnJvcnMgbWlnaHQgb2NjdXIsIGZvciBleGFtcGxlLCBpZiBmaWxlcyBhcmUgbG9ja2VkCiAgICAgICAgICN3ZSBqdXN0IGlnbm9yZSB0aGVtIGlmIHJhaXNlRXhjZXB0aW9ucyBpcyBub3Qgc2V0CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGguZmx1c2goKQotICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICBoID0gd3IoKQorICAgICAgICAgICAgaWYgaDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGguZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBlcnJvcnMgd2hpY2ggbWlnaHQgYmUgY2F1c2VkCisgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBoYW5kbGVycyBoYXZlIGJlZW4gY2xvc2VkIGJ1dAorICAgICAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZXMgdG8gdGhlbSBhcmUgc3RpbGwgYXJvdW5kIGF0CisgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24gZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CiAKICNMZXQncyB0cnkgYW5kIHNodXRkb3duIGF1dG9tYXRpY2FsbHkgb24gYXBwbGljYXRpb24gZXhpdC4uLgotdHJ5OgotICAgIGltcG9ydCBhdGV4aXQKLSAgICBhdGV4aXQucmVnaXN0ZXIoc2h1dGRvd24pCi1leGNlcHQgSW1wb3J0RXJyb3I6ICMgZm9yIFB5dGhvbiB2ZXJzaW9ucyA8IDIuMAotICAgIGRlZiBleGl0aG9vayhzdGF0dXMsIG9sZF9leGl0PXN5cy5leGl0KToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2h1dGRvd24oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb2xkX2V4aXQoc3RhdHVzKQoraW1wb3J0IGF0ZXhpdAorYXRleGl0LnJlZ2lzdGVyKHNodXRkb3duKQogCi0gICAgc3lzLmV4aXQgPSBleGl0aG9vaworIyBOdWxsIGhhbmRsZXIKKworY2xhc3MgTnVsbEhhbmRsZXIoSGFuZGxlcik6CisgICAgIiIiCisgICAgVGhpcyBoYW5kbGVyIGRvZXMgbm90aGluZy4gSXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGF2b2lkIHRoZQorICAgICJObyBoYW5kbGVycyBjb3VsZCBiZSBmb3VuZCBmb3IgbG9nZ2VyIFhYWCIgb25lLW9mZiB3YXJuaW5nLiBUaGlzIGlzCisgICAgaW1wb3J0YW50IGZvciBsaWJyYXJ5IGNvZGUsIHdoaWNoIG1heSBjb250YWluIGNvZGUgdG8gbG9nIGV2ZW50cy4gSWYgYSB1c2VyCisgICAgb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgY29uZmlndXJlIGxvZ2dpbmcsIHRoZSBvbmUtb2ZmIHdhcm5pbmcgbWlnaHQgYmUKKyAgICBwcm9kdWNlZDsgdG8gYXZvaWQgdGhpcywgdGhlIGxpYnJhcnkgZGV2ZWxvcGVyIHNpbXBseSBuZWVkcyB0byBpbnN0YW50aWF0ZQorICAgIGEgTnVsbEhhbmRsZXIgYW5kIGFkZCBpdCB0byB0aGUgdG9wLWxldmVsIGxvZ2dlciBvZiB0aGUgbGlicmFyeSBtb2R1bGUgb3IKKyAgICBwYWNrYWdlLgorICAgICIiIgorICAgIGRlZiBoYW5kbGUoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZUxvY2soc2VsZik6CisgICAgICAgIHNlbGYubG9jayA9IE5vbmUKKworIyBXYXJuaW5ncyBpbnRlZ3JhdGlvbgorCitfd2FybmluZ3Nfc2hvd3dhcm5pbmcgPSBOb25lCisKK2RlZiBfc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGU9Tm9uZSwgbGluZT1Ob25lKToKKyAgICAiIiIKKyAgICBJbXBsZW1lbnRhdGlvbiBvZiBzaG93d2FybmluZ3Mgd2hpY2ggcmVkaXJlY3RzIHRvIGxvZ2dpbmcsIHdoaWNoIHdpbGwgZmlyc3QKKyAgICBjaGVjayB0byBzZWUgaWYgdGhlIGZpbGUgcGFyYW1ldGVyIGlzIE5vbmUuIElmIGEgZmlsZSBpcyBzcGVjaWZpZWQsIGl0IHdpbGwKKyAgICBkZWxlZ2F0ZSB0byB0aGUgb3JpZ2luYWwgd2FybmluZ3MgaW1wbGVtZW50YXRpb24gb2Ygc2hvd3dhcm5pbmcuIE90aGVyd2lzZSwKKyAgICBpdCB3aWxsIGNhbGwgd2FybmluZ3MuZm9ybWF0d2FybmluZyBhbmQgd2lsbCBsb2cgdGhlIHJlc3VsdGluZyBzdHJpbmcgdG8gYQorICAgIHdhcm5pbmdzIGxvZ2dlciBuYW1lZCAicHkud2FybmluZ3MiIHdpdGggbGV2ZWwgbG9nZ2luZy5XQVJOSU5HLgorICAgICIiIgorICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIF93YXJuaW5nc19zaG93d2FybmluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZSwgbGluZSkKKyAgICBlbHNlOgorICAgICAgICBzID0gd2FybmluZ3MuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZSkKKyAgICAgICAgbG9nZ2VyID0gZ2V0TG9nZ2VyKCJweS53YXJuaW5ncyIpCisgICAgICAgIGlmIG5vdCBsb2dnZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihOdWxsSGFuZGxlcigpKQorICAgICAgICBsb2dnZXIud2FybmluZygiJXMiLCBzKQorCitkZWYgY2FwdHVyZVdhcm5pbmdzKGNhcHR1cmUpOgorICAgICIiIgorICAgIElmIGNhcHR1cmUgaXMgdHJ1ZSwgcmVkaXJlY3QgYWxsIHdhcm5pbmdzIHRvIHRoZSBsb2dnaW5nIHBhY2thZ2UuCisgICAgSWYgY2FwdHVyZSBpcyBGYWxzZSwgZW5zdXJlIHRoYXQgd2FybmluZ3MgYXJlIG5vdCByZWRpcmVjdGVkIHRvIGxvZ2dpbmcKKyAgICBidXQgdG8gdGhlaXIgb3JpZ2luYWwgZGVzdGluYXRpb25zLgorICAgICIiIgorICAgIGdsb2JhbCBfd2FybmluZ3Nfc2hvd3dhcm5pbmcKKyAgICBpZiBjYXB0dXJlOgorICAgICAgICBpZiBfd2FybmluZ3Nfc2hvd3dhcm5pbmcgaXMgTm9uZToKKyAgICAgICAgICAgIF93YXJuaW5nc19zaG93d2FybmluZyA9IHdhcm5pbmdzLnNob3d3YXJuaW5nCisgICAgICAgICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IF9zaG93d2FybmluZworICAgIGVsc2U6CisgICAgICAgIGlmIF93YXJuaW5nc19zaG93d2FybmluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gX3dhcm5pbmdzX3Nob3d3YXJuaW5nCisgICAgICAgICAgICBfd2FybmluZ3Nfc2hvd3dhcm5pbmcgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggZWIyYzI0OC4uOGU0ZmE4MCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAwNyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxMCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE5LDE1ICsxOSwxMyBAQAogaXMgYmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbiBjb21wLmxhbmcucHl0aG9uLCBhbmQgaW5mbHVlbmNlZAogYnkgQXBhY2hlJ3MgbG9nNGogc3lzdGVtLgogCi1TaG91bGQgd29yayB1bmRlciBQeXRob24gdmVyc2lvbnMgPj0gMS41LjIsIGV4Y2VwdCB0aGF0IHNvdXJjZSBsaW5lCi1pbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHVubGVzcyAnc3lzLl9nZXRmcmFtZSgpJyBpcy4KLQotQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IHN5cywgbG9nZ2luZywgbG9nZ2luZy5oYW5kbGVycywgc3RyaW5nLCBzb2NrZXQsIHN0cnVjdCwgb3MsIHRyYWNlYmFjaywgdHlwZXMKK2ltcG9ydCBzeXMsIGxvZ2dpbmcsIGxvZ2dpbmcuaGFuZGxlcnMsIHNvY2tldCwgc3RydWN0LCBvcywgdHJhY2ViYWNrLCByZQoraW1wb3J0IHR5cGVzLCBjU3RyaW5nSU8KIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWQKQEAgLTUyLDcgKzUwLDcgQEAKICMgICBfbGlzdGVuZXIgaG9sZHMgdGhlIHNlcnZlciBvYmplY3QgZG9pbmcgdGhlIGxpc3RlbmluZwogX2xpc3RlbmVyID0gTm9uZQogCi1kZWYgZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPTEpOgorZGVmIGZpbGVDb25maWcoZm5hbWUsIGRlZmF1bHRzPU5vbmUsIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycz1UcnVlKToKICAgICAiIiIKICAgICBSZWFkIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIENvbmZpZ1BhcnNlci1mb3JtYXQgZmlsZS4KIApAQCAtNjAsMTUgKzU4LDExIEBACiAgICAgdGhlIGFiaWxpdHkgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUKICAgICBkZXZlbG9wZXIgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcyBhbmQgbG9hZCB0aGUgY2hvc2VuCiAgICAgY29uZmlndXJhdGlvbikuCi0gICAgSW4gdmVyc2lvbnMgb2YgQ29uZmlnUGFyc2VyIHdoaWNoIGhhdmUgdGhlIHJlYWRmcCBtZXRob2QgW3R5cGljYWxseQotICAgIHNoaXBwZWQgaW4gMi54IHZlcnNpb25zIG9mIFB5dGhvbl0sIHlvdSBjYW4gcGFzcyBpbiBhIGZpbGUtbGlrZSBvYmplY3QKLSAgICByYXRoZXIgdGhhbiBhIGZpbGVuYW1lLCBpbiB3aGljaCBjYXNlIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IHdpbGwgYmUgcmVhZAotICAgIHVzaW5nIHJlYWRmcC4KICAgICAiIiIKICAgICBpbXBvcnQgQ29uZmlnUGFyc2VyCiAKICAgICBjcCA9IENvbmZpZ1BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCi0gICAgaWYgaGFzYXR0cihjcCwgJ3JlYWRmcCcpIGFuZCBoYXNhdHRyKGZuYW1lLCAncmVhZGxpbmUnKToKKyAgICBpZiBoYXNhdHRyKGZuYW1lLCAncmVhZGxpbmUnKToKICAgICAgICAgY3AucmVhZGZwKGZuYW1lKQogICAgIGVsc2U6CiAgICAgICAgIGNwLnJlYWQoZm5hbWUpCkBAIC04OSw3ICs4Myw3IEBACiAKIGRlZiBfcmVzb2x2ZShuYW1lKToKICAgICAiIiJSZXNvbHZlIGEgZG90dGVkIG5hbWUgdG8gYSBnbG9iYWwgb2JqZWN0LiIiIgotICAgIG5hbWUgPSBzdHJpbmcuc3BsaXQobmFtZSwgJy4nKQorICAgIG5hbWUgPSBuYW1lLnNwbGl0KCcuJykKICAgICB1c2VkID0gbmFtZS5wb3AoMCkKICAgICBmb3VuZCA9IF9faW1wb3J0X18odXNlZCkKICAgICBmb3IgbiBpbiBuYW1lOgpAQCAtMTAyLDcgKzk2LDcgQEAKICAgICByZXR1cm4gZm91bmQKIAogZGVmIF9zdHJpcF9zcGFjZXMoYWxpc3QpOgotICAgIHJldHVybiBtYXAobGFtYmRhIHg6IHN0cmluZy5zdHJpcCh4KSwgYWxpc3QpCisgICAgcmV0dXJuIG1hcChsYW1iZGEgeDogeC5zdHJpcCgpLCBhbGlzdCkKIAogZGVmIF9lbmNvZGVkKHMpOgogICAgIHJldHVybiBzIGlmIGlzaW5zdGFuY2Uocywgc3RyKSBlbHNlIHMuZW5jb2RlKCd1dGYtOCcpCkBAIC0xMTIsNyArMTA2LDcgQEAKICAgICBmbGlzdCA9IGNwLmdldCgiZm9ybWF0dGVycyIsICJrZXlzIikKICAgICBpZiBub3QgbGVuKGZsaXN0KToKICAgICAgICAgcmV0dXJuIHt9Ci0gICAgZmxpc3QgPSBzdHJpbmcuc3BsaXQoZmxpc3QsICIsIikKKyAgICBmbGlzdCA9IGZsaXN0LnNwbGl0KCIsIikKICAgICBmbGlzdCA9IF9zdHJpcF9zcGFjZXMoZmxpc3QpCiAgICAgZm9ybWF0dGVycyA9IHt9CiAgICAgZm9yIGZvcm0gaW4gZmxpc3Q6CkBAIC0xNDEsNyArMTM1LDcgQEAKICAgICBobGlzdCA9IGNwLmdldCgiaGFuZGxlcnMiLCAia2V5cyIpCiAgICAgaWYgbm90IGxlbihobGlzdCk6CiAgICAgICAgIHJldHVybiB7fQotICAgIGhsaXN0ID0gc3RyaW5nLnNwbGl0KGhsaXN0LCAiLCIpCisgICAgaGxpc3QgPSBobGlzdC5zcGxpdCgiLCIpCiAgICAgaGxpc3QgPSBfc3RyaXBfc3BhY2VzKGhsaXN0KQogICAgIGhhbmRsZXJzID0ge30KICAgICBmaXh1cHMgPSBbXSAjZm9yIGludGVyLWhhbmRsZXIgcmVmZXJlbmNlcwpAQCAtMTg0LDggKzE3OCw4IEBACiAKICAgICAjIGNvbmZpZ3VyZSB0aGUgcm9vdCBmaXJzdAogICAgIGxsaXN0ID0gY3AuZ2V0KCJsb2dnZXJzIiwgImtleXMiKQotICAgIGxsaXN0ID0gc3RyaW5nLnNwbGl0KGxsaXN0LCAiLCIpCi0gICAgbGxpc3QgPSBtYXAobGFtYmRhIHg6IHN0cmluZy5zdHJpcCh4KSwgbGxpc3QpCisgICAgbGxpc3QgPSBsbGlzdC5zcGxpdCgiLCIpCisgICAgbGxpc3QgPSBsaXN0KG1hcChsYW1iZGEgeDogeC5zdHJpcCgpLCBsbGlzdCkpCiAgICAgbGxpc3QucmVtb3ZlKCJyb290IikKICAgICBzZWN0bmFtZSA9ICJsb2dnZXJfcm9vdCIKICAgICByb290ID0gbG9nZ2luZy5yb290CkBAIC0xOTgsNyArMTkyLDcgQEAKICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKGgpCiAgICAgaGxpc3QgPSBjcC5nZXQoc2VjdG5hbWUsICJoYW5kbGVycyIpCiAgICAgaWYgbGVuKGhsaXN0KToKLSAgICAgICAgaGxpc3QgPSBzdHJpbmcuc3BsaXQoaGxpc3QsICIsIikKKyAgICAgICAgaGxpc3QgPSBobGlzdC5zcGxpdCgiLCIpCiAgICAgICAgIGhsaXN0ID0gX3N0cmlwX3NwYWNlcyhobGlzdCkKICAgICAgICAgZm9yIGhhbmQgaW4gaGxpc3Q6CiAgICAgICAgICAgICBsb2cuYWRkSGFuZGxlcihoYW5kbGVyc1toYW5kXSkKQEAgLTIxMiw3ICsyMDYsNyBAQAogICAgICN3aGF0J3MgbGVmdCBpbiBleGlzdGluZyBpcyB0aGUgc2V0IG9mIGxvZ2dlcnMKICAgICAjd2hpY2ggd2VyZSBpbiB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBidXQKICAgICAjd2hpY2ggYXJlIG5vdCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCi0gICAgZXhpc3RpbmcgPSByb290Lm1hbmFnZXIubG9nZ2VyRGljdC5rZXlzKCkKKyAgICBleGlzdGluZyA9IGxpc3Qocm9vdC5tYW5hZ2VyLmxvZ2dlckRpY3Qua2V5cygpKQogICAgICNUaGUgbGlzdCBuZWVkcyB0byBiZSBzb3J0ZWQgc28gdGhhdCB3ZSBjYW4KICAgICAjYXZvaWQgZGlzYWJsaW5nIGNoaWxkIGxvZ2dlcnMgb2YgZXhwbGljaXRseQogICAgICNuYW1lZCBsb2dnZXJzLiBXaXRoIGEgc29ydGVkIGxpc3QgaXQgaXMgZWFzaWVyCkBAIC0yNTAsNyArMjQ0LDcgQEAKICAgICAgICAgbG9nZ2VyLmRpc2FibGVkID0gMAogICAgICAgICBobGlzdCA9IGNwLmdldChzZWN0bmFtZSwgImhhbmRsZXJzIikKICAgICAgICAgaWYgbGVuKGhsaXN0KToKLSAgICAgICAgICAgIGhsaXN0ID0gc3RyaW5nLnNwbGl0KGhsaXN0LCAiLCIpCisgICAgICAgICAgICBobGlzdCA9IGhsaXN0LnNwbGl0KCIsIikKICAgICAgICAgICAgIGhsaXN0ID0gX3N0cmlwX3NwYWNlcyhobGlzdCkKICAgICAgICAgICAgIGZvciBoYW5kIGluIGhsaXN0OgogICAgICAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXJzW2hhbmRdKQpAQCAtMjcwLDYgKzI2NCw1MTggQEAKICAgICAgICAgICAgIGxvZ2dlci5kaXNhYmxlZCA9IDEKIAogCisKK0lERU5USUZJRVIgPSByZS5jb21waWxlKCdeW2Etel9dW2EtejAtOV9dKiQnLCByZS5JKQorCisKK2RlZiB2YWxpZF9pZGVudChzKToKKyAgICBtID0gSURFTlRJRklFUi5tYXRjaChzKQorICAgIGlmIG5vdCBtOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb3QgYSB2YWxpZCBQeXRob24gaWRlbnRpZmllcjogJXInICUgcykKKyAgICByZXR1cm4gVHJ1ZQorCisKKyMgVGhlIENvbnZlcnRpbmdYWFggY2xhc3NlcyBhcmUgd3JhcHBlcnMgYXJvdW5kIHN0YW5kYXJkIFB5dGhvbiBjb250YWluZXJzLAorIyBhbmQgdGhleSBzZXJ2ZSB0byBjb252ZXJ0IGFueSBzdWl0YWJsZSB2YWx1ZXMgaW4gdGhlIGNvbnRhaW5lci4gVGhlCisjIGNvbnZlcnNpb24gY29udmVydHMgYmFzZSBkaWN0cywgbGlzdHMgYW5kIHR1cGxlcyB0byB0aGVpciB3cmFwcGVkCisjIGVxdWl2YWxlbnRzLCB3aGVyZWFzIHN0cmluZ3Mgd2hpY2ggbWF0Y2ggYSBjb252ZXJzaW9uIGZvcm1hdCBhcmUgY29udmVydGVkCisjIGFwcHJvcHJpYXRlbHkuCisjCisjIEVhY2ggd3JhcHBlciBzaG91bGQgaGF2ZSBhIGNvbmZpZ3VyYXRvciBhdHRyaWJ1dGUgaG9sZGluZyB0aGUgYWN0dWFsCisjIGNvbmZpZ3VyYXRvciB0byB1c2UgZm9yIGNvbnZlcnNpb24uCisKK2NsYXNzIENvbnZlcnRpbmdEaWN0KGRpY3QpOgorICAgICIiIkEgY29udmVydGluZyBkaWN0aW9uYXJ5IHdyYXBwZXIuIiIiCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdmFsdWUgPSBkaWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB2YWx1ZSA9IGRpY3QuZ2V0KHNlbGYsIGtleSwgZGVmYXVsdCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB2YWx1ZSA9IGRpY3QucG9wKHNlbGYsIGtleSwgZGVmYXVsdCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCisgICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIENvbnZlcnRpbmdMaXN0KGxpc3QpOgorICAgICIiIkEgY29udmVydGluZyBsaXN0IHdyYXBwZXIuIiIiCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gbGlzdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBzZWxmW2tleV0gPSByZXN1bHQKKyAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCisgICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcG9wKHNlbGYsIGlkeD0tMSk6CisgICAgICAgIHZhbHVlID0gbGlzdC5wb3Aoc2VsZiwgaWR4KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBDb252ZXJ0aW5nVHVwbGUodHVwbGUpOgorICAgICIiIkEgY29udmVydGluZyB0dXBsZSB3cmFwcGVyLiIiIgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IHR1cGxlLl9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCisgICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIEJhc2VDb25maWd1cmF0b3Iob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGUgY29uZmlndXJhdG9yIGJhc2UgY2xhc3Mgd2hpY2ggZGVmaW5lcyBzb21lIHVzZWZ1bCBkZWZhdWx0cy4KKyAgICAiIiIKKworICAgIENPTlZFUlRfUEFUVEVSTiA9IHJlLmNvbXBpbGUocideKD9QPHByZWZpeD5bYS16XSspOi8vKD9QPHN1ZmZpeD4uKikkJykKKworICAgIFdPUkRfUEFUVEVSTiA9IHJlLmNvbXBpbGUocideXHMqKFx3KylccyonKQorICAgIERPVF9QQVRURVJOID0gcmUuY29tcGlsZShyJ15cLlxzKihcdyspXHMqJykKKyAgICBJTkRFWF9QQVRURVJOID0gcmUuY29tcGlsZShyJ15cW1xzKihcdyspXHMqXF1ccyonKQorICAgIERJR0lUX1BBVFRFUk4gPSByZS5jb21waWxlKHInXlxkKyQnKQorCisgICAgdmFsdWVfY29udmVydGVycyA9IHsKKyAgICAgICAgJ2V4dCcgOiAnZXh0X2NvbnZlcnQnLAorICAgICAgICAnY2ZnJyA6ICdjZmdfY29udmVydCcsCisgICAgfQorCisgICAgIyBXZSBtaWdodCB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBvbmUsIGUuZy4gaW1wb3J0bGliCisgICAgaW1wb3J0ZXIgPSBfX2ltcG9ydF9fCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29uZmlnKToKKyAgICAgICAgc2VsZi5jb25maWcgPSBDb252ZXJ0aW5nRGljdChjb25maWcpCisgICAgICAgIHNlbGYuY29uZmlnLmNvbmZpZ3VyYXRvciA9IHNlbGYKKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHMpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzb2x2ZSBzdHJpbmdzIHRvIG9iamVjdHMgdXNpbmcgc3RhbmRhcmQgaW1wb3J0IGFuZCBhdHRyaWJ1dGUKKyAgICAgICAgc3ludGF4LgorICAgICAgICAiIiIKKyAgICAgICAgbmFtZSA9IHMuc3BsaXQoJy4nKQorICAgICAgICB1c2VkID0gbmFtZS5wb3AoMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmltcG9ydGVyKHVzZWQpCisgICAgICAgICAgICBmb3IgZnJhZyBpbiBuYW1lOgorICAgICAgICAgICAgICAgIHVzZWQgKz0gJy4nICsgZnJhZworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBnZXRhdHRyKGZvdW5kLCBmcmFnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRlcih1c2VkKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIoZm91bmQsIGZyYWcpCisgICAgICAgICAgICByZXR1cm4gZm91bmQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgZSwgdGIgPSBzeXMuZXhjX2luZm8oKVsxOl0KKyAgICAgICAgICAgIHYgPSBWYWx1ZUVycm9yKCdDYW5ub3QgcmVzb2x2ZSAlcjogJXMnICUgKHMsIGUpKQorICAgICAgICAgICAgdi5fX2NhdXNlX18sIHYuX190cmFjZWJhY2tfXyA9IGUsIHRiCisgICAgICAgICAgICByYWlzZSB2CisKKyAgICBkZWYgZXh0X2NvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJEZWZhdWx0IGNvbnZlcnRlciBmb3IgdGhlIGV4dDovLyBwcm90b2NvbC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzb2x2ZSh2YWx1ZSkKKworICAgIGRlZiBjZmdfY29udmVydChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIkRlZmF1bHQgY29udmVydGVyIGZvciB0aGUgY2ZnOi8vIHByb3RvY29sLiIiIgorICAgICAgICByZXN0ID0gdmFsdWUKKyAgICAgICAgbSA9IHNlbGYuV09SRF9QQVRURVJOLm1hdGNoKHJlc3QpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVyIiAlIHZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdCA9IHJlc3RbbS5lbmQoKTpdCisgICAgICAgICAgICBkID0gc2VsZi5jb25maWdbbS5ncm91cHMoKVswXV0KKyAgICAgICAgICAgICNwcmludCBkLCByZXN0CisgICAgICAgICAgICB3aGlsZSByZXN0OgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLkRPVF9QQVRURVJOLm1hdGNoKHJlc3QpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZCA9IGRbbS5ncm91cHMoKVswXV0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtID0gc2VsZi5JTkRFWF9QQVRURVJOLm1hdGNoKHJlc3QpCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBpZHggPSBtLmdyb3VwcygpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ESUdJVF9QQVRURVJOLm1hdGNoKGlkeCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGRbaWR4XQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpbnQoaWR4KSAjIHRyeSBhcyBudW1iZXIgZmlyc3QgKG1vc3QgbGlrZWx5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZFtuXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBkW2lkeF0KKyAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICByZXN0ID0gcmVzdFttLmVuZCgpOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29udmVydCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyIGF0ICVyJyAlICh2YWx1ZSwgcmVzdCkpCisgICAgICAgICNyZXN0IHNob3VsZCBiZSBlbXB0eQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGNvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCB2YWx1ZXMgdG8gYW4gYXBwcm9wcmlhdGUgdHlwZS4gZGljdHMsIGxpc3RzIGFuZCB0dXBsZXMgYXJlCisgICAgICAgIHJlcGxhY2VkIGJ5IHRoZWlyIGNvbnZlcnRpbmcgYWx0ZXJuYXRpdmVzLiBTdHJpbmdzIGFyZSBjaGVja2VkIHRvCisgICAgICAgIHNlZSBpZiB0aGV5IGhhdmUgYSBjb252ZXJzaW9uIGZvcm1hdCBhbmQgYXJlIGNvbnZlcnRlZCBpZiB0aGV5IGRvLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIENvbnZlcnRpbmdEaWN0KSBhbmQgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICB2YWx1ZSA9IENvbnZlcnRpbmdEaWN0KHZhbHVlKQorICAgICAgICAgICAgdmFsdWUuY29uZmlndXJhdG9yID0gc2VsZgorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDb252ZXJ0aW5nTGlzdCkgYW5kIGlzaW5zdGFuY2UodmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgdmFsdWUgPSBDb252ZXJ0aW5nTGlzdCh2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlLmNvbmZpZ3VyYXRvciA9IHNlbGYKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ29udmVydGluZ1R1cGxlKSBhbmRcCisgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgIHZhbHVlID0gQ29udmVydGluZ1R1cGxlKHZhbHVlKQorICAgICAgICAgICAgdmFsdWUuY29uZmlndXJhdG9yID0gc2VsZgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOiAjIHN0ciBmb3IgcHkzaworICAgICAgICAgICAgbSA9IHNlbGYuQ09OVkVSVF9QQVRURVJOLm1hdGNoKHZhbHVlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQorICAgICAgICAgICAgICAgIHByZWZpeCA9IGRbJ3ByZWZpeCddCisgICAgICAgICAgICAgICAgY29udmVydGVyID0gc2VsZi52YWx1ZV9jb252ZXJ0ZXJzLmdldChwcmVmaXgsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgY29udmVydGVyOgorICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSBkWydzdWZmaXgnXQorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBnZXRhdHRyKHNlbGYsIGNvbnZlcnRlcikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb252ZXJ0ZXIoc3VmZml4KQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBjb25maWd1cmVfY3VzdG9tKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhbiBvYmplY3Qgd2l0aCBhIHVzZXItc3VwcGxpZWQgZmFjdG9yeS4iIiIKKyAgICAgICAgYyA9IGNvbmZpZy5wb3AoJygpJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoYywgJ19fY2FsbF9fJykgYW5kIGhhc2F0dHIodHlwZXMsICdDbGFzc1R5cGUnKSBhbmQgdHlwZShjKSAhPSB0eXBlcy5DbGFzc1R5cGU6CisgICAgICAgICAgICBjID0gc2VsZi5yZXNvbHZlKGMpCisgICAgICAgIHByb3BzID0gY29uZmlnLnBvcCgnLicsIE5vbmUpCisgICAgICAgICMgQ2hlY2sgZm9yIHZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIGt3YXJncyA9IGRpY3QoWyhrLCBjb25maWdba10pIGZvciBrIGluIGNvbmZpZyBpZiB2YWxpZF9pZGVudChrKV0pCisgICAgICAgIHJlc3VsdCA9IGMoKiprd2FyZ3MpCisgICAgICAgIGlmIHByb3BzOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHByb3BzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYXNfdHVwbGUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJVdGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIGxpc3RzIHRvIHR1cGxlcy4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICB2YWx1ZSA9IHR1cGxlKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgRGljdENvbmZpZ3VyYXRvcihCYXNlQ29uZmlndXJhdG9yKToKKyAgICAiIiIKKyAgICBDb25maWd1cmUgbG9nZ2luZyB1c2luZyBhIGRpY3Rpb25hcnktbGlrZSBvYmplY3QgdG8gZGVzY3JpYmUgdGhlCisgICAgY29uZmlndXJhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBjb25maWd1cmUoc2VsZik6CisgICAgICAgICIiIkRvIHRoZSBjb25maWd1cmF0aW9uLiIiIgorCisgICAgICAgIGNvbmZpZyA9IHNlbGYuY29uZmlnCisgICAgICAgIGlmICd2ZXJzaW9uJyBub3QgaW4gY29uZmlnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGljdGlvbmFyeSBkb2Vzbid0IHNwZWNpZnkgYSB2ZXJzaW9uIikKKyAgICAgICAgaWYgY29uZmlnWyd2ZXJzaW9uJ10gIT0gMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVzIiAlIGNvbmZpZ1sndmVyc2lvbiddKQorICAgICAgICBpbmNyZW1lbnRhbCA9IGNvbmZpZy5wb3AoJ2luY3JlbWVudGFsJywgRmFsc2UpCisgICAgICAgIEVNUFRZX0RJQ1QgPSB7fQorICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGluY3JlbWVudGFsOgorICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gY29uZmlnLmdldCgnaGFuZGxlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBsb2dnaW5nLl9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIGhhbmRsZXIgZm91bmQgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lICVyJyAgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLl9oYW5kbGVyc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfY29uZmlnID0gaGFuZGxlcnNbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGhhbmRsZXJfY29uZmlnLmdldCgnbGV2ZWwnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuX2NoZWNrTGV2ZWwobGV2ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSBoYW5kbGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgICAgIGxvZ2dlcnMgPSBjb25maWcuZ2V0KCdsb2dnZXJzJywgRU1QVFlfRElDVCkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBsb2dnZXJzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9sb2dnZXIobmFtZSwgbG9nZ2Vyc1tuYW1lXSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlIGxvZ2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgICAgIHJvb3QgPSBjb25maWcuZ2V0KCdyb290JywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiByb290OgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9yb290KHJvb3QsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSByb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2dlcjogJXMnICUgZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlzYWJsZV9leGlzdGluZyA9IGNvbmZpZy5wb3AoJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2VycycsIFRydWUpCisKKyAgICAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCisgICAgICAgICAgICAgICAgZGVsIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCisKKyAgICAgICAgICAgICAgICAjIERvIGZvcm1hdHRlcnMgZmlyc3QgLSB0aGV5IGRvbid0IHJlZmVyIHRvIGFueXRoaW5nIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzID0gY29uZmlnLmdldCgnZm9ybWF0dGVycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZm9ybWF0dGVyczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyc1tuYW1lXSA9IHNlbGYuY29uZmlndXJlX2Zvcm1hdHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcnNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXIgJXI6ICVzJyAlIChuYW1lLCBlKSkKKyAgICAgICAgICAgICAgICAjIE5leHQsIGRvIGZpbHRlcnMgLSB0aGV5IGRvbid0IHJlZmVyIHRvIGFueXRoaW5nIGVsc2UsIGVpdGhlcgorICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBjb25maWcuZ2V0KCdmaWx0ZXJzJywgRU1QVFlfRElDVCkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzW25hbWVdID0gc2VsZi5jb25maWd1cmVfZmlsdGVyKGZpbHRlcnNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXIgJXI6ICVzJyAlIChuYW1lLCBlKSkKKworICAgICAgICAgICAgICAgICMgTmV4dCwgZG8gaGFuZGxlcnMgLSB0aGV5IHJlZmVyIHRvIGZvcm1hdHRlcnMgYW5kIGZpbHRlcnMKKyAgICAgICAgICAgICAgICAjIEFzIGhhbmRsZXJzIGNhbiByZWZlciB0byBvdGhlciBoYW5kbGVycywgc29ydCB0aGUga2V5cworICAgICAgICAgICAgICAgICMgdG8gYWxsb3cgYSBkZXRlcm1pbmlzdGljIG9yZGVyIG9mIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGNvbmZpZy5nZXQoJ2hhbmRsZXJzJywgRU1QVFlfRElDVCkKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoaGFuZGxlcnMpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5jb25maWd1cmVfaGFuZGxlcihoYW5kbGVyc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIubmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gaGFuZGxlcgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgICAgICMgTmV4dCwgZG8gbG9nZ2VycyAtIHRoZXkgcmVmZXIgdG8gaGFuZGxlcnMgYW5kIGZpbHRlcnMKKworICAgICAgICAgICAgICAgICN3ZSBkb24ndCB3YW50IHRvIGxvc2UgdGhlIGV4aXN0aW5nIGxvZ2dlcnMsCisgICAgICAgICAgICAgICAgI3NpbmNlIG90aGVyIHRocmVhZHMgbWF5IGhhdmUgcG9pbnRlcnMgdG8gdGhlbS4KKyAgICAgICAgICAgICAgICAjZXhpc3RpbmcgaXMgc2V0IHRvIGNvbnRhaW4gYWxsIGV4aXN0aW5nIGxvZ2dlcnMsCisgICAgICAgICAgICAgICAgI2FuZCBhcyB3ZSBnbyB0aHJvdWdoIHRoZSBuZXcgY29uZmlndXJhdGlvbiB3ZQorICAgICAgICAgICAgICAgICNyZW1vdmUgYW55IHdoaWNoIGFyZSBjb25maWd1cmVkLiBBdCB0aGUgZW5kLAorICAgICAgICAgICAgICAgICN3aGF0J3MgbGVmdCBpbiBleGlzdGluZyBpcyB0aGUgc2V0IG9mIGxvZ2dlcnMKKyAgICAgICAgICAgICAgICAjd2hpY2ggd2VyZSBpbiB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBidXQKKyAgICAgICAgICAgICAgICAjd2hpY2ggYXJlIG5vdCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgcm9vdCA9IGxvZ2dpbmcucm9vdAorICAgICAgICAgICAgICAgIGV4aXN0aW5nID0gcm9vdC5tYW5hZ2VyLmxvZ2dlckRpY3Qua2V5cygpCisgICAgICAgICAgICAgICAgI1RoZSBsaXN0IG5lZWRzIHRvIGJlIHNvcnRlZCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgICAgICNhdm9pZCBkaXNhYmxpbmcgY2hpbGQgbG9nZ2VycyBvZiBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgI25hbWVkIGxvZ2dlcnMuIFdpdGggYSBzb3J0ZWQgbGlzdCBpdCBpcyBlYXNpZXIKKyAgICAgICAgICAgICAgICAjdG8gZmluZCB0aGUgY2hpbGQgbG9nZ2Vycy4KKyAgICAgICAgICAgICAgICBleGlzdGluZy5zb3J0KGtleT1fZW5jb2RlZCkKKyAgICAgICAgICAgICAgICAjV2UnbGwga2VlcCB0aGUgbGlzdCBvZiBleGlzdGluZyBsb2dnZXJzCisgICAgICAgICAgICAgICAgI3doaWNoIGFyZSBjaGlsZHJlbiBvZiBuYW1lZCBsb2dnZXJzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBjaGlsZF9sb2dnZXJzID0gW10KKyAgICAgICAgICAgICAgICAjbm93IHNldCB1cCB0aGUgbmV3IG9uZXMuLi4KKyAgICAgICAgICAgICAgICBsb2dnZXJzID0gY29uZmlnLmdldCgnbG9nZ2VycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBleGlzdGluZy5pbmRleChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ZWQgPSBuYW1lICsgIi4iCisgICAgICAgICAgICAgICAgICAgICAgICBwZmxlbiA9IGxlbihwcmVmaXhlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bV9leGlzdGluZyA9IGxlbihleGlzdGluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMSAjIGxvb2sgYXQgdGhlIGVudHJ5IGFmdGVyIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbnVtX2V4aXN0aW5nKSBhbmRcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpc3RpbmdbaV1bOnBmbGVuXSA9PSBwcmVmaXhlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfbG9nZ2Vycy5hcHBlbmQoZXhpc3RpbmdbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmVfbG9nZ2VyKG5hbWUsIGxvZ2dlcnNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSBsb2dnZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXI6ICVzJyAlIChuYW1lLCBlKSkKKworICAgICAgICAgICAgICAgICNEaXNhYmxlIGFueSBvbGQgbG9nZ2Vycy4gVGhlcmUncyBubyBwb2ludCBkZWxldGluZworICAgICAgICAgICAgICAgICN0aGVtIGFzIG90aGVyIHRocmVhZHMgbWF5IGNvbnRpbnVlIHRvIGhvbGQgcmVmZXJlbmNlcworICAgICAgICAgICAgICAgICNhbmQgYnkgZGlzYWJsaW5nIHRoZW0sIHlvdSBzdG9wIHRoZW0gZG9pbmcgYW55IGxvZ2dpbmcuCisgICAgICAgICAgICAgICAgI0hvd2V2ZXIsIGRvbid0IGRpc2FibGUgY2hpbGRyZW4gb2YgbmFtZWQgbG9nZ2VycywgYXMgdGhhdCdzCisgICAgICAgICAgICAgICAgI3Byb2JhYmx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZCBieSB0aGUgdXNlci4KKyAgICAgICAgICAgICAgICBmb3IgbG9nIGluIGV4aXN0aW5nOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIgPSByb290Lm1hbmFnZXIubG9nZ2VyRGljdFtsb2ddCisgICAgICAgICAgICAgICAgICAgIGlmIGxvZyBpbiBjaGlsZF9sb2dnZXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxldmVsID0gbG9nZ2luZy5OT1RTRVQKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGRpc2FibGVfZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGlzYWJsZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAjIEFuZCBmaW5hbGx5LCBkbyB0aGUgcm9vdCBsb2dnZXIKKyAgICAgICAgICAgICAgICByb290ID0gY29uZmlnLmdldCgncm9vdCcsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgcm9vdDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmVfcm9vdChyb290KQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2dnZXI6ICVzJyAlIGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCisKKyAgICBkZWYgY29uZmlndXJlX2Zvcm1hdHRlcihzZWxmLCBjb25maWcpOgorICAgICAgICAiIiJDb25maWd1cmUgYSBmb3JtYXR0ZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIGlmICcoKScgaW4gY29uZmlnOgorICAgICAgICAgICAgZmFjdG9yeSA9IGNvbmZpZ1snKCknXSAjIGZvciB1c2UgaW4gZXhjZXB0aW9uIGhhbmRsZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyZV9jdXN0b20oY29uZmlnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgdGU6CisgICAgICAgICAgICAgICAgaWYgIidmb3JtYXQnIiBub3QgaW4gc3RyKHRlKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAjTmFtZSBvZiBwYXJhbWV0ZXIgY2hhbmdlZCBmcm9tIGZtdCB0byBmb3JtYXQuCisgICAgICAgICAgICAgICAgI1JldHJ5IHdpdGggb2xkIG5hbWUuCisgICAgICAgICAgICAgICAgI1RoaXMgaXMgc28gdGhhdCBjb2RlIGNhbiBiZSB1c2VkIHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zCisgICAgICAgICAgICAgICAgIyhlLmcuIGJ5IERqYW5nbykKKyAgICAgICAgICAgICAgICBjb25maWdbJ2ZtdCddID0gY29uZmlnLnBvcCgnZm9ybWF0JykKKyAgICAgICAgICAgICAgICBjb25maWdbJygpJ10gPSBmYWN0b3J5CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmVfY3VzdG9tKGNvbmZpZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZtdCA9IGNvbmZpZy5nZXQoJ2Zvcm1hdCcsIE5vbmUpCisgICAgICAgICAgICBkZm10ID0gY29uZmlnLmdldCgnZGF0ZWZtdCcsIE5vbmUpCisgICAgICAgICAgICByZXN1bHQgPSBsb2dnaW5nLkZvcm1hdHRlcihmbXQsIGRmbXQpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBjb25maWd1cmVfZmlsdGVyKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIGZpbHRlciBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKyAgICAgICAgaWYgJygpJyBpbiBjb25maWc6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyZV9jdXN0b20oY29uZmlnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IGNvbmZpZy5nZXQoJ25hbWUnLCAnJykKKyAgICAgICAgICAgIHJlc3VsdCA9IGxvZ2dpbmcuRmlsdGVyKG5hbWUpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBhZGRfZmlsdGVycyhzZWxmLCBmaWx0ZXJlciwgZmlsdGVycyk6CisgICAgICAgICIiIkFkZCBmaWx0ZXJzIHRvIGEgZmlsdGVyZXIgZnJvbSBhIGxpc3Qgb2YgbmFtZXMuIiIiCisgICAgICAgIGZvciBmIGluIGZpbHRlcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlsdGVyZXIuYWRkRmlsdGVyKHNlbGYuY29uZmlnWydmaWx0ZXJzJ11bZl0pCisgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gYWRkIGZpbHRlciAlcjogJXMnICUgKGYsIGUpKQorCisgICAgZGVmIGNvbmZpZ3VyZV9oYW5kbGVyKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIGhhbmRsZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIGZvcm1hdHRlciA9IGNvbmZpZy5wb3AoJ2Zvcm1hdHRlcicsIE5vbmUpCisgICAgICAgIGlmIGZvcm1hdHRlcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLmNvbmZpZ1snZm9ybWF0dGVycyddW2Zvcm1hdHRlcl0KKyAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBzZXQgZm9ybWF0dGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKGZvcm1hdHRlciwgZSkpCisgICAgICAgIGxldmVsID0gY29uZmlnLnBvcCgnbGV2ZWwnLCBOb25lKQorICAgICAgICBmaWx0ZXJzID0gY29uZmlnLnBvcCgnZmlsdGVycycsIE5vbmUpCisgICAgICAgIGlmICcoKScgaW4gY29uZmlnOgorICAgICAgICAgICAgYyA9IGNvbmZpZy5wb3AoJygpJykKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGMsICdfX2NhbGxfXycpIGFuZCBoYXNhdHRyKHR5cGVzLCAnQ2xhc3NUeXBlJykgYW5kIHR5cGUoYykgIT0gdHlwZXMuQ2xhc3NUeXBlOgorICAgICAgICAgICAgICAgIGMgPSBzZWxmLnJlc29sdmUoYykKKyAgICAgICAgICAgIGZhY3RvcnkgPSBjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrbGFzcyA9IHNlbGYucmVzb2x2ZShjb25maWcucG9wKCdjbGFzcycpKQorICAgICAgICAgICAgI1NwZWNpYWwgY2FzZSBmb3IgaGFuZGxlciB3aGljaCByZWZlcnMgdG8gYW5vdGhlciBoYW5kbGVyCisgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpIGFuZFwKKyAgICAgICAgICAgICAgICAndGFyZ2V0JyBpbiBjb25maWc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb25maWdbJ3RhcmdldCddID0gc2VsZi5jb25maWdbJ2hhbmRsZXJzJ11bY29uZmlnWyd0YXJnZXQnXV0KKyAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIHNldCB0YXJnZXQgaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAoY29uZmlnWyd0YXJnZXQnXSwgZSkpCisgICAgICAgICAgICBlbGlmIGlzc3ViY2xhc3Moa2xhc3MsIGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIpIGFuZFwKKyAgICAgICAgICAgICAgICAnbWFpbGhvc3QnIGluIGNvbmZpZzoKKyAgICAgICAgICAgICAgICBjb25maWdbJ21haWxob3N0J10gPSBzZWxmLmFzX3R1cGxlKGNvbmZpZ1snbWFpbGhvc3QnXSkKKyAgICAgICAgICAgIGVsaWYgaXNzdWJjbGFzcyhrbGFzcywgbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyKSBhbmRcCisgICAgICAgICAgICAgICAgJ2FkZHJlc3MnIGluIGNvbmZpZzoKKyAgICAgICAgICAgICAgICBjb25maWdbJ2FkZHJlc3MnXSA9IHNlbGYuYXNfdHVwbGUoY29uZmlnWydhZGRyZXNzJ10pCisgICAgICAgICAgICBmYWN0b3J5ID0ga2xhc3MKKyAgICAgICAga3dhcmdzID0gZGljdChbKGssIGNvbmZpZ1trXSkgZm9yIGsgaW4gY29uZmlnIGlmIHZhbGlkX2lkZW50KGspXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gZmFjdG9yeSgqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgdGU6CisgICAgICAgICAgICBpZiAiJ3N0cmVhbSciIG5vdCBpbiBzdHIodGUpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjVGhlIGFyZ3VtZW50IG5hbWUgY2hhbmdlZCBmcm9tIHN0cm0gdG8gc3RyZWFtCisgICAgICAgICAgICAjUmV0cnkgd2l0aCBvbGQgbmFtZS4KKyAgICAgICAgICAgICNUaGlzIGlzIHNvIHRoYXQgY29kZSBjYW4gYmUgdXNlZCB3aXRoIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucworICAgICAgICAgICAgIyhlLmcuIGJ5IERqYW5nbykKKyAgICAgICAgICAgIGt3YXJnc1snc3RybSddID0ga3dhcmdzLnBvcCgnc3RyZWFtJykKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhY3RvcnkoKiprd2FyZ3MpCisgICAgICAgIGlmIGZvcm1hdHRlcjoKKyAgICAgICAgICAgIHJlc3VsdC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdC5zZXRMZXZlbChsb2dnaW5nLl9jaGVja0xldmVsKGxldmVsKSkKKyAgICAgICAgaWYgZmlsdGVyczoKKyAgICAgICAgICAgIHNlbGYuYWRkX2ZpbHRlcnMocmVzdWx0LCBmaWx0ZXJzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYWRkX2hhbmRsZXJzKHNlbGYsIGxvZ2dlciwgaGFuZGxlcnMpOgorICAgICAgICAiIiJBZGQgaGFuZGxlcnMgdG8gYSBsb2dnZXIgZnJvbSBhIGxpc3Qgb2YgbmFtZXMuIiIiCisgICAgICAgIGZvciBoIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKHNlbGYuY29uZmlnWydoYW5kbGVycyddW2hdKQorICAgICAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGFkZCBoYW5kbGVyICVyOiAlcycgJSAoaCwgZSkpCisKKyAgICBkZWYgY29tbW9uX2xvZ2dlcl9jb25maWcoc2VsZiwgbG9nZ2VyLCBjb25maWcsIGluY3JlbWVudGFsPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIFBlcmZvcm0gY29uZmlndXJhdGlvbiB3aGljaCBpcyBjb21tb24gdG8gcm9vdCBhbmQgbm9uLXJvb3QgbG9nZ2Vycy4KKyAgICAgICAgIiIiCisgICAgICAgIGxldmVsID0gY29uZmlnLmdldCgnbGV2ZWwnLCBOb25lKQorICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLl9jaGVja0xldmVsKGxldmVsKSkKKyAgICAgICAgaWYgbm90IGluY3JlbWVudGFsOgorICAgICAgICAgICAgI1JlbW92ZSBhbnkgZXhpc3RpbmcgaGFuZGxlcnMKKyAgICAgICAgICAgIGZvciBoIGluIGxvZ2dlci5oYW5kbGVyc1s6XToKKyAgICAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQorICAgICAgICAgICAgaGFuZGxlcnMgPSBjb25maWcuZ2V0KCdoYW5kbGVycycsIE5vbmUpCisgICAgICAgICAgICBpZiBoYW5kbGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9oYW5kbGVycyhsb2dnZXIsIGhhbmRsZXJzKQorICAgICAgICAgICAgZmlsdGVycyA9IGNvbmZpZy5nZXQoJ2ZpbHRlcnMnLCBOb25lKQorICAgICAgICAgICAgaWYgZmlsdGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKGxvZ2dlciwgZmlsdGVycykKKworICAgIGRlZiBjb25maWd1cmVfbG9nZ2VyKHNlbGYsIG5hbWUsIGNvbmZpZywgaW5jcmVtZW50YWw9RmFsc2UpOgorICAgICAgICAiIiJDb25maWd1cmUgYSBub24tcm9vdCBsb2dnZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgICAgIHNlbGYuY29tbW9uX2xvZ2dlcl9jb25maWcobG9nZ2VyLCBjb25maWcsIGluY3JlbWVudGFsKQorICAgICAgICBwcm9wYWdhdGUgPSBjb25maWcuZ2V0KCdwcm9wYWdhdGUnLCBOb25lKQorICAgICAgICBpZiBwcm9wYWdhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCisKKyAgICBkZWYgY29uZmlndXJlX3Jvb3Qoc2VsZiwgY29uZmlnLCBpbmNyZW1lbnRhbD1GYWxzZSk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIHJvb3QgbG9nZ2VyIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorICAgICAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBzZWxmLmNvbW1vbl9sb2dnZXJfY29uZmlnKHJvb3QsIGNvbmZpZywgaW5jcmVtZW50YWwpCisKK2RpY3RDb25maWdDbGFzcyA9IERpY3RDb25maWd1cmF0b3IKKworZGVmIGRpY3RDb25maWcoY29uZmlnKToKKyAgICAiIiJDb25maWd1cmUgbG9nZ2luZyB1c2luZyBhIGRpY3Rpb25hcnkuIiIiCisgICAgZGljdENvbmZpZ0NsYXNzKGNvbmZpZykuY29uZmlndXJlKCkKKworCiBkZWYgbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKToKICAgICAiIiIKICAgICBTdGFydCB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVuIGZvciBuZXcKQEAgLTI4MSw3ICs3ODcsNyBAQAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KICAgICAiIiIKICAgICBpZiBub3QgdGhyZWFkOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLCAibGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKIAogICAgIGNsYXNzIENvbmZpZ1N0cmVhbUhhbmRsZXIoU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAiIiIKQEAgLTMwNywyNCArODEzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICAjQXBwbHkgbmV3IGNvbmZpZ3VyYXRpb24uIFdlJ2QgbGlrZSB0byBiZSBhYmxlIHRvCi0gICAgICAgICAgICAgICAgICAgICNjcmVhdGUgYSBTdHJpbmdJTyBhbmQgcGFzcyB0aGF0IGluLCBidXQgdW5mb3J0dW5hdGVseQotICAgICAgICAgICAgICAgICAgICAjMS41LjIgQ29uZmlnUGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgICNvYmplY3RzLCBvbmx5IGFjdHVhbCBmaWxlcy4gU28gd2UgY3JlYXRlIGEgdGVtcG9yYXJ5Ci0gICAgICAgICAgICAgICAgICAgICNmaWxlIGFuZCByZW1vdmUgaXQgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgIGZpbGUgPSB0ZW1wZmlsZS5ta3RlbXAoIi5pbmkiKQotICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihmaWxlLCAidyIpCi0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoY2h1bmspCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ29uZmlnKGZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBqc29uCisgICAgICAgICAgICAgICAgICAgICAgICBkID1qc29uLmxvYWRzKGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RDb25maWcoZCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgI0FwcGx5IG5ldyBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLnJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVhZHkuc2V0KCkKICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgdHlwZShlLmFyZ3MpICE9IHR5cGVzLlR1cGxlVHlwZToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmFyZ3MsIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBlcnJjb2RlID0gZS5hcmdzWzBdCkBAIC0zMzksMTIgKzg0NiwxMyBAQAogICAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwKLSAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUpOgogICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIChob3N0LCBwb3J0KSwgaGFuZGxlcikKICAgICAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgICAgIHNlbGYuYWJvcnQgPSAwCiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSAxCisgICAgICAgICAgICBzZWxmLnJlYWR5ID0gcmVhZHkKIAogICAgICAgICBkZWYgc2VydmVfdW50aWxfc3RvcHBlZChzZWxmKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTM1OCwyNiArODY2LDQwIEBACiAgICAgICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgICAgIGFib3J0ID0gc2VsZi5hYm9ydAogICAgICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKKyAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKIAotICAgIGRlZiBzZXJ2ZShyY3ZyLCBoZGxyLCBwb3J0KToKLSAgICAgICAgc2VydmVyID0gcmN2cihwb3J0PXBvcnQsIGhhbmRsZXI9aGRscikKLSAgICAgICAgZ2xvYmFsIF9saXN0ZW5lcgotICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCi0gICAgICAgIF9saXN0ZW5lciA9IHNlcnZlcgotICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCi0gICAgICAgIHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKKyAgICBjbGFzcyBTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICByZXR1cm4gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oQ29uZmlnU29ja2V0UmVjZWl2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCkpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0KToKKyAgICAgICAgICAgIHN1cGVyKFNlcnZlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5yY3ZyID0gcmN2cgorICAgICAgICAgICAgc2VsZi5oZGxyID0gaGRscgorICAgICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICAgICAgc2VsZi5yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYucmN2cihwb3J0PXNlbGYucG9ydCwgaGFuZGxlcj1zZWxmLmhkbHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSkKKyAgICAgICAgICAgIGlmIHNlbGYucG9ydCA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlcnZlci5zZXJ2ZXJfYWRkcmVzc1sxXQorICAgICAgICAgICAgc2VsZi5yZWFkeS5zZXQoKQorICAgICAgICAgICAgZ2xvYmFsIF9saXN0ZW5lcgorICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQorICAgICAgICAgICAgX2xpc3RlbmVyID0gc2VydmVyCisgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCisgICAgICAgICAgICBzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCgpCisKKyAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0KQogCiBkZWYgc3RvcExpc3RlbmluZygpOgogICAgICIiIgogICAgIFN0b3AgdGhlIGxpc3RlbmluZyBzZXJ2ZXIgd2hpY2ggd2FzIGNyZWF0ZWQgd2l0aCBhIGNhbGwgdG8gbGlzdGVuKCkuCiAgICAgIiIiCiAgICAgZ2xvYmFsIF9saXN0ZW5lcgotICAgIGlmIF9saXN0ZW5lcjoKLSAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQotICAgICAgICBfbGlzdGVuZXIuYWJvcnQgPSAxCi0gICAgICAgIF9saXN0ZW5lciA9IE5vbmUKKyAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgdHJ5OgorICAgICAgICBpZiBfbGlzdGVuZXI6CisgICAgICAgICAgICBfbGlzdGVuZXIuYWJvcnQgPSAxCisgICAgICAgICAgICBfbGlzdGVuZXIgPSBOb25lCisgICAgZmluYWxseToKICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCA3NTZiYWYwLi5mOGM3MTY0IDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAwNyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxMCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE5LDEzICsxOSwxMyBAQAogYmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbiBjb21wLmxhbmcucHl0aG9uLCBhbmQgaW5mbHVlbmNlZCBieQogQXBhY2hlJ3MgbG9nNGogc3lzdGVtLgogCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDEwIFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgbG9nZ2luZywgc29ja2V0LCB0eXBlcywgb3MsIHN0cmluZywgY1BpY2tsZSwgc3RydWN0LCB0aW1lLCByZQotZnJvbSBzdGF0IGltcG9ydCBTVF9ERVYsIFNUX0lOTworaW1wb3J0IGxvZ2dpbmcsIHNvY2tldCwgb3MsIGNQaWNrbGUsIHN0cnVjdCwgdGltZSwgcmUKK2Zyb20gc3RhdCBpbXBvcnQgU1RfREVWLCBTVF9JTk8sIFNUX01USU1FCiAKIHRyeToKICAgICBpbXBvcnQgY29kZWNzCkBAIC00Niw2ICs0Niw3IEBACiBERUZBVUxUX0hUVFBfTE9HR0lOR19QT1JUICAgPSA5MDIyCiBERUZBVUxUX1NPQVBfTE9HR0lOR19QT1JUICAgPSA5MDIzCiBTWVNMT0dfVURQX1BPUlQgICAgICAgICAgICAgPSA1MTQKK1NZU0xPR19UQ1BfUE9SVCAgICAgICAgICAgICA9IDUxNAogCiBfTUlETklHSFQgPSAyNCAqIDYwICogNjAgICMgbnVtYmVyIG9mIHNlY29uZHMgaW4gYSBkYXkKIApAQCAtMTA3LDggKzEwOCwxMyBAQAogCiAgICAgICAgIElmIG1heEJ5dGVzIGlzIHplcm8sIHJvbGxvdmVyIG5ldmVyIG9jY3Vycy4KICAgICAgICAgIiIiCisgICAgICAgICMgSWYgcm90YXRpb24vcm9sbG92ZXIgaXMgd2FudGVkLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdXNlIGFub3RoZXIKKyAgICAgICAgIyBtb2RlLiBJZiBmb3IgZXhhbXBsZSAndycgd2VyZSBzcGVjaWZpZWQsIHRoZW4gaWYgdGhlcmUgd2VyZSBtdWx0aXBsZQorICAgICAgICAjIHJ1bnMgb2YgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24sIHRoZSBsb2dzIGZyb20gcHJldmlvdXMgcnVucyB3b3VsZCBiZQorICAgICAgICAjIGxvc3QgaWYgdGhlICd3JyBpcyByZXNwZWN0ZWQsIGJlY2F1c2UgdGhlIGxvZyBmaWxlIHdvdWxkIGJlIHRydW5jYXRlZAorICAgICAgICAjIG9uIGVhY2ggcnVuLgogICAgICAgICBpZiBtYXhCeXRlcyA+IDA6Ci0gICAgICAgICAgICBtb2RlID0gJ2EnICMgZG9lc24ndCBtYWtlIHNlbnNlIG90aGVyd2lzZSEKKyAgICAgICAgICAgIG1vZGUgPSAnYScKICAgICAgICAgQmFzZVJvdGF0aW5nSGFuZGxlci5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZSwgZW5jb2RpbmcsIGRlbGF5KQogICAgICAgICBzZWxmLm1heEJ5dGVzID0gbWF4Qnl0ZXMKICAgICAgICAgc2VsZi5iYWNrdXBDb3VudCA9IGJhY2t1cENvdW50CkBAIC0xMTcsOCArMTIzLDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIERvIGEgcm9sbG92ZXIsIGFzIGRlc2NyaWJlZCBpbiBfX2luaXRfXygpLgogICAgICAgICAiIiIKLQotICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuc3RyZWFtOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBOb25lCiAgICAgICAgIGlmIHNlbGYuYmFja3VwQ291bnQgPiAwOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5iYWNrdXBDb3VudCAtIDEsIDAsIC0xKToKICAgICAgICAgICAgICAgICBzZm4gPSAiJXMuJWQiICUgKHNlbGYuYmFzZUZpbGVuYW1lLCBpKQpAQCAtMTYwLDkgKzE2Nyw5IEBACiAgICAgSWYgYmFja3VwQ291bnQgaXMgPiAwLCB3aGVuIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXBDb3VudAogICAgIGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PTAsIHV0Yz0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIHdoZW49J2gnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCBlbmNvZGluZz1Ob25lLCBkZWxheT1GYWxzZSwgdXRjPUZhbHNlKToKICAgICAgICAgQmFzZVJvdGF0aW5nSGFuZGxlci5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZywgZGVsYXkpCi0gICAgICAgIHNlbGYud2hlbiA9IHN0cmluZy51cHBlcih3aGVuKQorICAgICAgICBzZWxmLndoZW4gPSB3aGVuLnVwcGVyKCkKICAgICAgICAgc2VsZi5iYWNrdXBDb3VudCA9IGJhY2t1cENvdW50CiAgICAgICAgIHNlbGYudXRjID0gdXRjCiAgICAgICAgICMgQ2FsY3VsYXRlIHRoZSByZWFsIHJvbGxvdmVyIGludGVydmFsLCB3aGljaCBpcyBqdXN0IHRoZSBudW1iZXIgb2YKQEAgLTE3Nyw3ICsxODQsNiBAQAogICAgICAgICAjCiAgICAgICAgICMgQ2FzZSBvZiB0aGUgJ3doZW4nIHNwZWNpZmllciBpcyBub3QgaW1wb3J0YW50OyBsb3dlciBvciB1cHBlciBjYXNlCiAgICAgICAgICMgd2lsbCB3b3JrLgotICAgICAgICBjdXJyZW50VGltZSA9IGludCh0aW1lLnRpbWUoKSkKICAgICAgICAgaWYgc2VsZi53aGVuID09ICdTJzoKICAgICAgICAgICAgIHNlbGYuaW50ZXJ2YWwgPSAxICMgb25lIHNlY29uZAogICAgICAgICAgICAgc2VsZi5zdWZmaXggPSAiJVktJW0tJWRfJUgtJU0tJVMiCkBAIC0yMDgsOSArMjE0LDExIEBACiAKICAgICAgICAgc2VsZi5leHRNYXRjaCA9IHJlLmNvbXBpbGUoc2VsZi5leHRNYXRjaCkKICAgICAgICAgc2VsZi5pbnRlcnZhbCA9IHNlbGYuaW50ZXJ2YWwgKiBpbnRlcnZhbCAjIG11bHRpcGx5IGJ5IHVuaXRzIHJlcXVlc3RlZAotICAgICAgICBzZWxmLnJvbGxvdmVyQXQgPSBzZWxmLmNvbXB1dGVSb2xsb3ZlcihpbnQodGltZS50aW1lKCkpKQotCi0gICAgICAgICNwcmludCAiV2lsbCByb2xsb3ZlciBhdCAlZCwgJWQgc2Vjb25kcyBmcm9tIG5vdyIgJSAoc2VsZi5yb2xsb3ZlckF0LCBzZWxmLnJvbGxvdmVyQXQgLSBjdXJyZW50VGltZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgdCA9IG9zLnN0YXQoZmlsZW5hbWUpW1NUX01USU1FXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdCA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgc2VsZi5yb2xsb3ZlckF0ID0gc2VsZi5jb21wdXRlUm9sbG92ZXIodCkKIAogICAgIGRlZiBjb21wdXRlUm9sbG92ZXIoc2VsZiwgY3VycmVudFRpbWUpOgogICAgICAgICAiIiIKQEAgLTMxNyw2ICszMjUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5zdHJlYW06CiAgICAgICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IE5vbmUKICAgICAgICAgIyBnZXQgdGhlIHRpbWUgdGhhdCB0aGlzIHNlcXVlbmNlIHN0YXJ0ZWQgYXQgYW5kIG1ha2UgaXQgYSBUaW1lVHVwbGUKICAgICAgICAgdCA9IHNlbGYucm9sbG92ZXJBdCAtIHNlbGYuaW50ZXJ2YWwKICAgICAgICAgaWYgc2VsZi51dGM6CkBAIC02MzYsNyArNjQ1LDggQEAKICAgICBMT0dfTkVXUyAgICAgID0gNyAgICAgICAjICBuZXR3b3JrIG5ld3Mgc3Vic3lzdGVtCiAgICAgTE9HX1VVQ1AgICAgICA9IDggICAgICAgIyAgVVVDUCBzdWJzeXN0ZW0KICAgICBMT0dfQ1JPTiAgICAgID0gOSAgICAgICAjICBjbG9jayBkYWVtb24KLSAgICBMT0dfQVVUSFBSSVYgID0gMTAgICMgIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHByaXZhdGUpCisgICAgTE9HX0FVVEhQUklWICA9IDEwICAgICAgIyAgc2VjdXJpdHkvYXV0aG9yaXphdGlvbiBtZXNzYWdlcyAocHJpdmF0ZSkKKyAgICBMT0dfRlRQICAgICAgID0gMTEgICAgICAjICBGVFAgZGFlbW9uCiAKICAgICAjICBvdGhlciBjb2RlcyB0aHJvdWdoIDE1IHJlc2VydmVkIGZvciBzeXN0ZW0gdXNlCiAgICAgTE9HX0xPQ0FMMCAgICA9IDE2ICAgICAgIyAgcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZQpAQCAtNjY4LDYgKzY3OCw3IEBACiAgICAgICAgICJhdXRocHJpdiI6IExPR19BVVRIUFJJViwKICAgICAgICAgImNyb24iOiAgICAgTE9HX0NST04sCiAgICAgICAgICJkYWVtb24iOiAgIExPR19EQUVNT04sCisgICAgICAgICJmdHAiOiAgICAgIExPR19GVFAsCiAgICAgICAgICJrZXJuIjogICAgIExPR19LRVJOLAogICAgICAgICAibHByIjogICAgICBMT0dfTFBSLAogICAgICAgICAibWFpbCI6ICAgICBMT0dfTUFJTCwKQEAgLTY5OCw3ICs3MDksOCBAQAogICAgICAgICAiQ1JJVElDQUwiIDogImNyaXRpY2FsIgogICAgIH0KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPSgnbG9jYWxob3N0JywgU1lTTE9HX1VEUF9QT1JUKSwgZmFjaWxpdHk9TE9HX1VTRVIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPSgnbG9jYWxob3N0JywgU1lTTE9HX1VEUF9QT1JUKSwKKyAgICAgICAgICAgICAgICAgZmFjaWxpdHk9TE9HX1VTRVIsIHNvY2t0eXBlPXNvY2tldC5TT0NLX0RHUkFNKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgYSBoYW5kbGVyLgogCkBAIC03MTAsMTMgKzcyMiwxNiBAQAogCiAgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKICAgICAgICAgc2VsZi5mYWNpbGl0eSA9IGZhY2lsaXR5Ci0gICAgICAgIGlmIHR5cGUoYWRkcmVzcykgPT0gdHlwZXMuU3RyaW5nVHlwZToKKyAgICAgICAgc2VsZi5zb2NrdHlwZSA9IHNvY2t0eXBlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhZGRyZXNzLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgIHNlbGYudW5peHNvY2tldCA9IDEKICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RfdW5peHNvY2tldChhZGRyZXNzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi51bml4c29ja2V0ID0gMAotICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKLQorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrdHlwZSkKKyAgICAgICAgICAgIGlmIHNvY2t0eXBlID09IHNvY2tldC5TT0NLX1NUUkVBTToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgIHNlbGYuZm9ybWF0dGVyID0gTm9uZQogCiAgICAgZGVmIF9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZiwgYWRkcmVzcyk6CkBAIC03NDIsOSArNzU3LDkgQEAKICAgICAgICAgcHJpb3JpdHlfbmFtZXMgbWFwcGluZyBkaWN0aW9uYXJpZXMgYXJlIHVzZWQgdG8gY29udmVydCB0aGVtIHRvCiAgICAgICAgIGludGVnZXJzLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgdHlwZShmYWNpbGl0eSkgPT0gdHlwZXMuU3RyaW5nVHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmYWNpbGl0eSwgYmFzZXN0cmluZyk6CiAgICAgICAgICAgICBmYWNpbGl0eSA9IHNlbGYuZmFjaWxpdHlfbmFtZXNbZmFjaWxpdHldCi0gICAgICAgIGlmIHR5cGUocHJpb3JpdHkpID09IHR5cGVzLlN0cmluZ1R5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocHJpb3JpdHksIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgcHJpb3JpdHkgPSBzZWxmLnByaW9yaXR5X25hbWVzW3ByaW9yaXR5XQogICAgICAgICByZXR1cm4gKGZhY2lsaXR5IDw8IDMpIHwgcHJpb3JpdHkKIApAQCAtNzczLDIwICs3ODgsMTkgQEAKICAgICAgICAgVGhlIHJlY29yZCBpcyBmb3JtYXR0ZWQsIGFuZCB0aGVuIHNlbnQgdG8gdGhlIHN5c2xvZyBzZXJ2ZXIuIElmCiAgICAgICAgIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCBpdCBpcyBOT1Qgc2VudCB0byB0aGUgc2VydmVyLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpICsgJ1wwMDAnCiAgICAgICAgICIiIgogICAgICAgICBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCiAgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnID0gc2VsZi5sb2dfZm9ybWF0X3N0cmluZyAlICgKLSAgICAgICAgICAgIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZykKLSAgICAgICAgIyBUcmVhdCB1bmljb2RlIG1lc3NhZ2VzIGFzIHJlcXVpcmVkIGJ5IFJGQyA1NDI0Ci0gICAgICAgIGlmIF91bmljb2RlIGFuZCB0eXBlKG1zZykgaXMgdW5pY29kZToKKyAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSkKKyAgICAgICAgIyBNZXNzYWdlIGlzIGEgc3RyaW5nLiBDb252ZXJ0IHRvIGJ5dGVzIGFzIHJlcXVpcmVkIGJ5IFJGQyA1NDI0CisgICAgICAgIGlmIHR5cGUobXNnKSBpcyB1bmljb2RlOgogICAgICAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQogICAgICAgICAgICAgaWYgY29kZWNzOgogICAgICAgICAgICAgICAgIG1zZyA9IGNvZGVjcy5CT01fVVRGOCArIG1zZworICAgICAgICBtc2cgPSBwcmlvICsgbXNnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYudW5peHNvY2tldDoKICAgICAgICAgICAgICAgICB0cnk6CkBAIC03OTQsOCArODA4LDEwIEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWxpZiBzZWxmLnNvY2t0eXBlID09IHNvY2tldC5TT0NLX0RHUkFNOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCiAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0OgpAQCAtODA1LDcgKzgyMSw4IEBACiAgICAgIiIiCiAgICAgQSBoYW5kbGVyIGNsYXNzIHdoaWNoIHNlbmRzIGFuIFNNVFAgZW1haWwgZm9yIGVhY2ggbG9nZ2luZyBldmVudC4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFpbGhvc3QsIGZyb21hZGRyLCB0b2FkZHJzLCBzdWJqZWN0LCBjcmVkZW50aWFscz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFpbGhvc3QsIGZyb21hZGRyLCB0b2FkZHJzLCBzdWJqZWN0LAorICAgICAgICAgICAgICAgICBjcmVkZW50aWFscz1Ob25lLCBzZWN1cmU9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBoYW5kbGVyLgogCkBAIC04MTMsMjIgKzgzMCwyOCBAQAogICAgICAgICBsaW5lIG9mIHRoZSBlbWFpbC4gVG8gc3BlY2lmeSBhIG5vbi1zdGFuZGFyZCBTTVRQIHBvcnQsIHVzZSB0aGUKICAgICAgICAgKGhvc3QsIHBvcnQpIHR1cGxlIGZvcm1hdCBmb3IgdGhlIG1haWxob3N0IGFyZ3VtZW50LiBUbyBzcGVjaWZ5CiAgICAgICAgIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLCBzdXBwbHkgYSAodXNlcm5hbWUsIHBhc3N3b3JkKSB0dXBsZQotICAgICAgICBmb3IgdGhlIGNyZWRlbnRpYWxzIGFyZ3VtZW50LgorICAgICAgICBmb3IgdGhlIGNyZWRlbnRpYWxzIGFyZ3VtZW50LiBUbyBzcGVjaWZ5IHRoZSB1c2Ugb2YgYSBzZWN1cmUKKyAgICAgICAgcHJvdG9jb2wgKFRMUyksIHBhc3MgaW4gYSB0dXBsZSBmb3IgdGhlIHNlY3VyZSBhcmd1bWVudC4gVGhpcyB3aWxsCisgICAgICAgIG9ubHkgYmUgdXNlZCB3aGVuIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGFyZSBzdXBwbGllZC4gVGhlIHR1cGxlCisgICAgICAgIHdpbGwgYmUgZWl0aGVyIGFuIGVtcHR5IHR1cGxlLCBvciBhIHNpbmdsZS12YWx1ZSB0dXBsZSB3aXRoIHRoZSBuYW1lCisgICAgICAgIG9mIGEga2V5ZmlsZSwgb3IgYSAyLXZhbHVlIHR1cGxlIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBrZXlmaWxlIGFuZAorICAgICAgICBjZXJ0aWZpY2F0ZSBmaWxlLiAoVGhpcyB0dXBsZSBpcyBwYXNzZWQgdG8gdGhlIGBzdGFydHRsc2AgbWV0aG9kKS4KICAgICAgICAgIiIiCiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBpZiB0eXBlKG1haWxob3N0KSA9PSB0eXBlcy5UdXBsZVR5cGU6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobWFpbGhvc3QsIHR1cGxlKToKICAgICAgICAgICAgIHNlbGYubWFpbGhvc3QsIHNlbGYubWFpbHBvcnQgPSBtYWlsaG9zdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5tYWlsaG9zdCwgc2VsZi5tYWlscG9ydCA9IG1haWxob3N0LCBOb25lCi0gICAgICAgIGlmIHR5cGUoY3JlZGVudGlhbHMpID09IHR5cGVzLlR1cGxlVHlwZToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjcmVkZW50aWFscywgdHVwbGUpOgogICAgICAgICAgICAgc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCA9IGNyZWRlbnRpYWxzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVzZXJuYW1lID0gTm9uZQogICAgICAgICBzZWxmLmZyb21hZGRyID0gZnJvbWFkZHIKLSAgICAgICAgaWYgdHlwZSh0b2FkZHJzKSA9PSB0eXBlcy5TdHJpbmdUeXBlOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRvYWRkcnMsIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgdG9hZGRycyA9IFt0b2FkZHJzXQogICAgICAgICBzZWxmLnRvYWRkcnMgPSB0b2FkZHJzCiAgICAgICAgIHNlbGYuc3ViamVjdCA9IHN1YmplY3QKKyAgICAgICAgc2VsZi5zZWN1cmUgPSBzZWN1cmUKIAogICAgIGRlZiBnZXRTdWJqZWN0KHNlbGYsIHJlY29yZCk6CiAgICAgICAgICIiIgpAQCAtODM5LDI0ICs4NjIsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuc3ViamVjdAogCi0gICAgd2Vla2RheW5hbWUgPSBbJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JywgJ1N1biddCi0KLSAgICBtb250aG5hbWUgPSBbTm9uZSwKLSAgICAgICAgICAgICAgICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywKLSAgICAgICAgICAgICAgICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10KLQotICAgIGRlZiBkYXRlX3RpbWUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBmb3JtYXR0ZWQgZm9yIGEgTUlNRSBoZWFkZXIuCi0gICAgICAgIE5lZWRlZCBmb3IgUHl0aG9uIDEuNS4yIChubyBlbWFpbCBwYWNrYWdlIGF2YWlsYWJsZSkKLSAgICAgICAgIiIiCi0gICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhoLCBtbSwgc3MsIHdkLCB5LCB6ID0gdGltZS5nbXRpbWUodGltZS50aW1lKCkpCi0gICAgICAgIHMgPSAiJXMsICUwMmQgJTNzICU0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQiICUgKAotICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheW5hbWVbd2RdLAotICAgICAgICAgICAgICAgIGRheSwgc2VsZi5tb250aG5hbWVbbW9udGhdLCB5ZWFyLAotICAgICAgICAgICAgICAgIGhoLCBtbSwgc3MpCi0gICAgICAgIHJldHVybiBzCi0KICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKICAgICAgICAgRW1pdCBhIHJlY29yZC4KQEAgLTg2NSwxMCArODcwLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBzbXRwbGliCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgZm9ybWF0ZGF0ZQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUgPSBzZWxmLmRhdGVfdGltZQorICAgICAgICAgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgZm9ybWF0ZGF0ZQogICAgICAgICAgICAgcG9ydCA9IHNlbGYubWFpbHBvcnQKICAgICAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgICAgIHBvcnQgPSBzbXRwbGliLlNNVFBfUE9SVApAQCAtODc2LDEwICs4NzgsMTQgQEAKICAgICAgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKICAgICAgICAgICAgIG1zZyA9ICJGcm9tOiAlc1xyXG5UbzogJXNcclxuU3ViamVjdDogJXNcclxuRGF0ZTogJXNcclxuXHJcbiVzIiAlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZyb21hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5qb2luKHNlbGYudG9hZGRycywgIiwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIuam9pbihzZWxmLnRvYWRkcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0U3ViamVjdChyZWNvcmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUoKSwgbXNnKQogICAgICAgICAgICAgaWYgc2VsZi51c2VybmFtZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlY3VyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc210cC5laGxvKCkKKyAgICAgICAgICAgICAgICAgICAgc210cC5zdGFydHRscygqc2VsZi5zZWN1cmUpCisgICAgICAgICAgICAgICAgICAgIHNtdHAuZWhsbygpCiAgICAgICAgICAgICAgICAgc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQogICAgICAgICAgICAgc210cC5zZW5kbWFpbChzZWxmLmZyb21hZGRyLCBzZWxmLnRvYWRkcnMsIG1zZykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCkBAIC05MjAsOCArOTI2LDggQEAKICAgICAgICAgICAgICAgICBsb2dnaW5nLkNSSVRJQ0FMOiB3aW4zMmV2dGxvZy5FVkVOVExPR19FUlJPUl9UWVBFLAogICAgICAgICAgfQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwcmludCAiVGhlIFB5dGhvbiBXaW4zMiBleHRlbnNpb25zIGZvciBOVCAoc2VydmljZSwgZXZlbnQgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb2dnaW5nKSBhcHBlYXIgbm90IHRvIGJlIGF2YWlsYWJsZS4iCisgICAgICAgICAgICBwcmludCgiVGhlIFB5dGhvbiBXaW4zMiBleHRlbnNpb25zIGZvciBOVCAoc2VydmljZSwgZXZlbnQgIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb2dnaW5nKSBhcHBlYXIgbm90IHRvIGJlIGF2YWlsYWJsZS4iKQogICAgICAgICAgICAgc2VsZi5fd2VsdSA9IE5vbmUKIAogICAgIGRlZiBnZXRNZXNzYWdlSUQoc2VsZiwgcmVjb3JkKToKQEAgLTk5OSw5ICsxMDA1LDkgQEAKICAgICAgICAgKCJHRVQiIG9yICJQT1NUIikKICAgICAgICAgIiIiCiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBtZXRob2QgPSBzdHJpbmcudXBwZXIobWV0aG9kKQorICAgICAgICBtZXRob2QgPSBtZXRob2QudXBwZXIoKQogICAgICAgICBpZiBtZXRob2Qgbm90IGluIFsiR0VUIiwgIlBPU1QiXToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJtZXRob2QgbXVzdCBiZSBHRVQgb3IgUE9TVCIKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1ldGhvZCBtdXN0IGJlIEdFVCBvciBQT1NUIikKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnVybCA9IHVybAogICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZApAQCAtMTAxOCw3ICsxMDI0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIEVtaXQgYSByZWNvcmQuCiAKLSAgICAgICAgU2VuZCB0aGUgcmVjb3JkIHRvIHRoZSBXZWIgc2VydmVyIGFzIGFuIFVSTC1lbmNvZGVkIGRpY3Rpb25hcnkKKyAgICAgICAgU2VuZCB0aGUgcmVjb3JkIHRvIHRoZSBXZWIgc2VydmVyIGFzIGEgcGVyY2VudC1lbmNvZGVkIGRpY3Rpb25hcnkKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBodHRwbGliLCB1cmxsaWIKQEAgLTEwMjcsNyArMTAzMyw3IEBACiAgICAgICAgICAgICB1cmwgPSBzZWxmLnVybAogICAgICAgICAgICAgZGF0YSA9IHVybGxpYi51cmxlbmNvZGUoc2VsZi5tYXBMb2dSZWNvcmQocmVjb3JkKSkKICAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJHRVQiOgotICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuZmluZCh1cmwsICc/JykgPj0gMCk6CisgICAgICAgICAgICAgICAgaWYgKHVybC5maW5kKCc/JykgPj0gMCk6CiAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICcmJwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlcCA9ICc/JwpAQCAtMTAzNSw3ICsxMDQxLDcgQEAKICAgICAgICAgICAgIGgucHV0cmVxdWVzdChzZWxmLm1ldGhvZCwgdXJsKQogICAgICAgICAgICAgIyBzdXBwb3J0IG11bHRpcGxlIGhvc3RzIG9uIG9uZSBJUCBhZGRyZXNzLi4uCiAgICAgICAgICAgICAjIG5lZWQgdG8gc3RyaXAgb3B0aW9uYWwgOnBvcnQgZnJvbSBob3N0LCBpZiBwcmVzZW50Ci0gICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQoaG9zdCwgIjoiKQorICAgICAgICAgICAgaSA9IGhvc3QuZmluZCgiOiIpCiAgICAgICAgICAgICBpZiBpID49IDA6CiAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3RbOmldCiAgICAgICAgICAgICBoLnB1dGhlYWRlcigiSG9zdCIsIGhvc3QpCkBAIC0xMDQzLDkgKzEwNDksNyBAQAogICAgICAgICAgICAgICAgIGgucHV0aGVhZGVyKCJDb250ZW50LXR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQogICAgICAgICAgICAgICAgIGgucHV0aGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4oZGF0YSkpKQotICAgICAgICAgICAgaC5lbmRoZWFkZXJzKCkKLSAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJQT1NUIjoKLSAgICAgICAgICAgICAgICBoLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGguZW5kaGVhZGVycyhkYXRhIGlmIHNlbGYubWV0aG9kID09ICJQT1NUIiBlbHNlIE5vbmUpCiAgICAgICAgICAgICBoLmdldHJlcGx5KCkgICAgI2Nhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdAogICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbWFjcGF0aC5weSBiL0xpYi9tYWNwYXRoLnB5CmluZGV4IGIyMjc1OWUuLmNkNGNiODUgMTAwNjQ0Ci0tLSBhL0xpYi9tYWNwYXRoLnB5CisrKyBiL0xpYi9tYWNwYXRoLnB5CkBAIC0yMTIsNCArMjEyLDQgQEAKICAgICAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcGF0aAogCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCitzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IFRydWUKZGlmZiAtLWdpdCBhL0xpYi9tYWlsYm94LnB5IGIvTGliL21haWxib3gucHkKaW5kZXggOGIxODAxMC4uYjc0ZWViNSAxMDA2NDQKLS0tIGEvTGliL21haWxib3gucHkKKysrIGIvTGliL21haWxib3gucHkKQEAgLTI0MywxNCArMjQzLDIxIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIE5vU3VjaE1haWxib3hFcnJvcihzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl90b2MgPSB7fQorICAgICAgICBzZWxmLl9sYXN0X3JlYWQgPSBOb25lICAgICAgICAgICMgUmVjb3JkcyBsYXN0IHRpbWUgd2UgcmVhZCBjdXIvbmV3CisgICAgICAgICMgTk9URTogd2UgbWFudWFsbHkgaW52YWxpZGF0ZSBfbGFzdF9yZWFkIGVhY2ggdGltZSB3ZSBkbyBhbnkKKyAgICAgICAgIyBtb2RpZmljYXRpb25zIG91cnNlbHZlcywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGdldCB0cmlwcGVkIHVwIGJ5CisgICAgICAgICMgYm9ndXMgbXRpbWUgYmVoYXZpb3VyIG9uIHNvbWUgc3lzdGVtcyAoc2VlIGlzc3VlICM2ODk2KS4KIAogICAgIGRlZiBhZGQoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgICIiIkFkZCBtZXNzYWdlIGFuZCByZXR1cm4gYXNzaWduZWQga2V5LiIiIgogICAgICAgICB0bXBfZmlsZSA9IHNlbGYuX2NyZWF0ZV90bXAoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9kdW1wX21lc3NhZ2UobWVzc2FnZSwgdG1wX2ZpbGUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBfc3luY19jbG9zZSh0bXBfZmlsZSkKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICB0bXBfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUodG1wX2ZpbGUubmFtZSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIF9zeW5jX2Nsb3NlKHRtcF9maWxlKQogICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIE1haWxkaXJNZXNzYWdlKToKICAgICAgICAgICAgIHN1YmRpciA9IG1lc3NhZ2UuZ2V0X3N1YmRpcigpCiAgICAgICAgICAgICBzdWZmaXggPSBzZWxmLmNvbG9uICsgbWVzc2FnZS5nZXRfaW5mbygpCkBAIC0yNzYsMTEgKzI4MywxNSBAQAogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgTWFpbGRpck1lc3NhZ2UpOgogICAgICAgICAgICAgb3MudXRpbWUoZGVzdCwgKG9zLnBhdGguZ2V0YXRpbWUoZGVzdCksIG1lc3NhZ2UuZ2V0X2RhdGUoKSkpCisgICAgICAgICMgSW52YWxpZGF0ZSBjYWNoZWQgdG9jCisgICAgICAgIHNlbGYuX2xhc3RfcmVhZCA9IE5vbmUKICAgICAgICAgcmV0dXJuIHVuaXEKIAogICAgIGRlZiByZW1vdmUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmVtb3ZlIHRoZSBrZXllZCBtZXNzYWdlOyByYWlzZSBLZXlFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LiIiIgogICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSkKKyAgICAgICAgIyBJbnZhbGlkYXRlIGNhY2hlZCB0b2MgKG9ubHkgb24gc3VjY2VzcykKKyAgICAgICAgc2VsZi5fbGFzdF9yZWFkID0gTm9uZQogCiAgICAgZGVmIGRpc2NhcmQoc2VsZiwga2V5KToKICAgICAgICAgIiIiSWYgdGhlIGtleWVkIG1lc3NhZ2UgZXhpc3RzLCByZW1vdmUgaXQuIiIiCkBAIC0zMTUsNiArMzI2LDggQEAKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNYWlsZGlyTWVzc2FnZSk6CiAgICAgICAgICAgICBvcy51dGltZShuZXdfcGF0aCwgKG9zLnBhdGguZ2V0YXRpbWUobmV3X3BhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldF9kYXRlKCkpKQorICAgICAgICAjIEludmFsaWRhdGUgY2FjaGVkIHRvYworICAgICAgICBzZWxmLl9sYXN0X3JlYWQgPSBOb25lCiAKICAgICBkZWYgZ2V0X21lc3NhZ2Uoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgpAQCAtMzY5LDcgKzM4Miw5IEBACiAKICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICIiIldyaXRlIGFueSBwZW5kaW5nIGNoYW5nZXMgdG8gZGlzay4iIiIKLSAgICAgICAgcmV0dXJuICAjIE1haWxkaXIgY2hhbmdlcyBhcmUgYWx3YXlzIHdyaXR0ZW4gaW1tZWRpYXRlbHkuCisgICAgICAgICMgTWFpbGRpciBjaGFuZ2VzIGFyZSBhbHdheXMgd3JpdHRlbiBpbW1lZGlhdGVseSwgc28gdGhlcmUncyBub3RoaW5nCisgICAgICAgICMgdG8gZG8gZXhjZXB0IGludmFsaWRhdGUgb3VyIGNhY2hlZCB0b2MuCisgICAgICAgIHNlbGYuX2xhc3RfcmVhZCA9IE5vbmUKIAogICAgIGRlZiBsb2NrKHNlbGYpOgogICAgICAgICAiIiJMb2NrIHRoZSBtYWlsYm94LiIiIgpAQCAtNDY3LDE2ICs0ODIsMzcgQEAKIAogICAgIGRlZiBfcmVmcmVzaChzZWxmKToKICAgICAgICAgIiIiVXBkYXRlIHRhYmxlIG9mIGNvbnRlbnRzIG1hcHBpbmcuIiIiCisgICAgICAgIGlmIHNlbGYuX2xhc3RfcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBzdWJkaXIgaW4gKCduZXcnLCAnY3VyJyk6CisgICAgICAgICAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJkaXIpKQorICAgICAgICAgICAgICAgIGlmIG10aW1lID4gc2VsZi5fbGFzdF9yZWFkOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFdlIHJlY29yZCB0aGUgY3VycmVudCB0aW1lIC0gMXNlYyBzbyB0aGF0LCBpZiBfcmVmcmVzaCgpIGlzIGNhbGxlZAorICAgICAgICAjIGFnYWluIGluIHRoZSBzYW1lIHNlY29uZCwgd2Ugd2lsbCBhbHdheXMgcmUtcmVhZCB0aGUgbWFpbGJveAorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpdCdzIGJlZW4gbW9kaWZpZWQuICAob3MucGF0aC5tdGltZSgpIG9ubHkgaGFzCisgICAgICAgICMgMXNlYyByZXNvbHV0aW9uLikgIFRoaXMgcmVzdWx0cyBpbiBhIGZldyB1bm5lY2Vzc2FyeSByZS1yZWFkcworICAgICAgICAjIHdoZW4gX3JlZnJlc2goKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgc2Vjb25kLAorICAgICAgICAjIGJ1dCBvbmNlIHRoZSBjbG9jayB0aWNrcyBvdmVyLCB3ZSB3aWxsIG9ubHkgcmUtcmVhZCBhcyBuZWVkZWQuCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpIC0gMQorCiAgICAgICAgIHNlbGYuX3RvYyA9IHt9Ci0gICAgICAgIGZvciBzdWJkaXIgaW4gKCduZXcnLCAnY3VyJyk6Ci0gICAgICAgICAgICBzdWJkaXJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJkaXIpCi0gICAgICAgICAgICBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihzdWJkaXJfcGF0aCk6Ci0gICAgICAgICAgICAgICAgcCA9IG9zLnBhdGguam9pbihzdWJkaXJfcGF0aCwgZW50cnkpCisgICAgICAgIGRlZiB1cGRhdGVfZGlyIChzdWJkaXIpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJkaXIpCisgICAgICAgICAgICBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHBhdGgsIGVudHJ5KQogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgdW5pcSA9IGVudHJ5LnNwbGl0KHNlbGYuY29sb24pWzBdCiAgICAgICAgICAgICAgICAgc2VsZi5fdG9jW3VuaXFdID0gb3MucGF0aC5qb2luKHN1YmRpciwgZW50cnkpCiAKKyAgICAgICAgdXBkYXRlX2RpcignbmV3JykKKyAgICAgICAgdXBkYXRlX2RpcignY3VyJykKKworICAgICAgICBzZWxmLl9sYXN0X3JlYWQgPSBub3cKKwogICAgIGRlZiBfbG9va3VwKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlVzZSBUT0MgdG8gcmV0dXJuIHN1YnBhdGggZm9yIGdpdmVuIGtleSwgb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgdHJ5OgpAQCAtNTE4LDcgKzU1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICd3YisnKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vU3VjaE1haWxib3hFcnJvcihzZWxmLl9wYXRoKQotICAgICAgICAgICAgZWxpZiBlLmVycm5vID09IGVycm5vLkVBQ0NFUzoKKyAgICAgICAgICAgIGVsaWYgZS5lcnJubyBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTY2Nyw5ICs3MDMsMTQgQEAKICAgICBkZWYgX2FwcGVuZF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICAiIiJBcHBlbmQgbWVzc2FnZSB0byBtYWlsYm94IGFuZCByZXR1cm4gKHN0YXJ0LCBzdG9wKSBvZmZzZXRzLiIiIgogICAgICAgICBzZWxmLl9maWxlLnNlZWsoMCwgMikKLSAgICAgICAgc2VsZi5fcHJlX21lc3NhZ2VfaG9vayhzZWxmLl9maWxlKQotICAgICAgICBvZmZzZXRzID0gc2VsZi5faW5zdGFsbF9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgIHNlbGYuX3Bvc3RfbWVzc2FnZV9ob29rKHNlbGYuX2ZpbGUpCisgICAgICAgIGJlZm9yZSA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3ByZV9tZXNzYWdlX2hvb2soc2VsZi5fZmlsZSkKKyAgICAgICAgICAgIG9mZnNldHMgPSBzZWxmLl9pbnN0YWxsX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuX3Bvc3RfbWVzc2FnZV9ob29rKHNlbGYuX2ZpbGUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5fZmlsZS50cnVuY2F0ZShiZWZvcmUpCisgICAgICAgICAgICByYWlzZQogICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKICAgICAgICAgc2VsZi5fZmlsZV9sZW5ndGggPSBzZWxmLl9maWxlLnRlbGwoKSAgIyBSZWNvcmQgY3VycmVudCBsZW5ndGggb2YgbWFpbGJveAogICAgICAgICByZXR1cm4gb2Zmc2V0cwpAQCAtODM1LDE4ICs4NzYsMjkgQEAKICAgICAgICAgICAgIG5ld19rZXkgPSBtYXgoa2V5cykgKyAxCiAgICAgICAgIG5ld19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihuZXdfa2V5KSkKICAgICAgICAgZiA9IF9jcmVhdGVfY2FyZWZ1bGx5KG5ld19wYXRoKQorICAgICAgICBjbG9zZWQgPSBGYWxzZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfbWVzc2FnZShtZXNzYWdlLCBmKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9tZXNzYWdlKG1lc3NhZ2UsIGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICMgVW5sb2NrIGFuZCBjbG9zZSBzbyBpdCBjYW4gYmUgZGVsZXRlZCBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQorICAgICAgICAgICAgICAgICAgICBfc3luY19jbG9zZShmKQorICAgICAgICAgICAgICAgICAgICBjbG9zZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShuZXdfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIE1ITWVzc2FnZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfc2VxdWVuY2VzKG1lc3NhZ2UsIG5ld19rZXkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBfc3luY19jbG9zZShmKQorICAgICAgICAgICAgaWYgbm90IGNsb3NlZDoKKyAgICAgICAgICAgICAgICBfc3luY19jbG9zZShmKQogICAgICAgICByZXR1cm4gbmV3X2tleQogCiAgICAgZGVmIHJlbW92ZShzZWxmLCBrZXkpOgpAQCAtODU5LDE3ICs5MTEsOSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCi0gICAgICAgIGZpbmFsbHk6CisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgbWVzc2FnZSk6CiAgICAgICAgICIiIlJlcGxhY2UgdGhlIGtleWVkIG1lc3NhZ2U7IHJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhpc3QuIiIiCkBAIC0xODYxLDcgKzE5MDUsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFHQUlOLCBlcnJuby5FQUNDRVMpOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE4NzEsNyArMTkxNSw3IEBACiAgICAgICAgICAgICAgICAgcHJlX2xvY2sgPSBfY3JlYXRlX3RlbXBvcmFyeShmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgIHByZV9sb2NrLmNsb3NlKCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRVJPRlMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gICMgV2l0aG91dCB3cml0ZSBhY2Nlc3MsIGp1c3Qgc2tpcCBkb3Rsb2NraW5nLgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCBmMGE1ZWNmLi40YzA1NGM5IDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTE4LDEzICsxOCwxOSBAQAogCiBGdW5jdGlvbnM6CiAKLWluaXQoW2ZpbGVzXSkgLS0gcGFyc2UgYSBsaXN0IG9mIGZpbGVzLCBkZWZhdWx0IGtub3duZmlsZXMKK2luaXQoW2ZpbGVzXSkgLS0gcGFyc2UgYSBsaXN0IG9mIGZpbGVzLCBkZWZhdWx0IGtub3duZmlsZXMgKG9uIFdpbmRvd3MsIHRoZQorICBkZWZhdWx0IHZhbHVlcyBhcmUgdGFrZW4gZnJvbSB0aGUgcmVnaXN0cnkpCiByZWFkX21pbWVfdHlwZXMoZmlsZSkgLS0gcGFyc2Ugb25lIGZpbGUsIHJldHVybiBhIGRpY3Rpb25hcnkgb3IgTm9uZQogIiIiCiAKIGltcG9ydCBvcworaW1wb3J0IHN5cwogaW1wb3J0IHBvc2l4cGF0aAogaW1wb3J0IHVybGxpYgordHJ5OgorICAgIGltcG9ydCBfd2lucmVnCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3dpbnJlZyA9IE5vbmUKIAogX19hbGxfXyA9IFsKICAgICAiZ3Vlc3NfdHlwZSIsImd1ZXNzX2V4dGVuc2lvbiIsImd1ZXNzX2FsbF9leHRlbnNpb25zIiwKQEAgLTE5Myw5ICsxOTksOCBAQAogICAgICAgICBsaXN0IG9mIHN0YW5kYXJkIHR5cGVzLCBlbHNlIHRvIHRoZSBsaXN0IG9mIG5vbi1zdGFuZGFyZAogICAgICAgICB0eXBlcy4KICAgICAgICAgIiIiCi0gICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgc2VsZi5yZWFkZnAoZnAsIHN0cmljdCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5yZWFkZnAoZnAsIHN0cmljdCkKIAogICAgIGRlZiByZWFkZnAoc2VsZiwgZnAsIHN0cmljdD1UcnVlKToKICAgICAgICAgIiIiCkBAIC0yMjAsNiArMjI1LDUzIEBACiAgICAgICAgICAgICBmb3Igc3VmZiBpbiBzdWZmaXhlczoKICAgICAgICAgICAgICAgICBzZWxmLmFkZF90eXBlKHR5cGUsICcuJyArIHN1ZmYsIHN0cmljdCkKIAorICAgIGRlZiByZWFkX3dpbmRvd3NfcmVnaXN0cnkoc2VsZiwgc3RyaWN0PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUgTUlNRSB0eXBlcyBkYXRhYmFzZSBmcm9tIFdpbmRvd3MgcmVnaXN0cnkuCisKKyAgICAgICAgSWYgc3RyaWN0IGlzIHRydWUsIGluZm9ybWF0aW9uIHdpbGwgYmUgYWRkZWQgdG8KKyAgICAgICAgbGlzdCBvZiBzdGFuZGFyZCB0eXBlcywgZWxzZSB0byB0aGUgbGlzdCBvZiBub24tc3RhbmRhcmQKKyAgICAgICAgdHlwZXMuCisgICAgICAgICIiIgorCisgICAgICAgICMgV2luZG93cyBvbmx5CisgICAgICAgIGlmIG5vdCBfd2lucmVnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmIGVudW1fdHlwZXMobWltZWRiKToKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBfd2lucmVnLkVudW1LZXkobWltZWRiLCBpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBjdHlwZS5lbmNvZGUoZGVmYXVsdF9lbmNvZGluZykgIyBvbWl0IGluIDMueCEKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY3R5cGUKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICBkZWZhdWx0X2VuY29kaW5nID0gc3lzLmdldGRlZmF1bHRlbmNvZGluZygpCisgICAgICAgIHdpdGggX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DTEFTU0VTX1JPT1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInTUlNRVxEYXRhYmFzZVxDb250ZW50IFR5cGUnKSBhcyBtaW1lZGI6CisgICAgICAgICAgICBmb3IgY3R5cGUgaW4gZW51bV90eXBlcyhtaW1lZGIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBfd2lucmVnLk9wZW5LZXkobWltZWRiLCBjdHlwZSkgYXMga2V5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LCBkYXRhdHlwZSA9IF93aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXh0ZW5zaW9uJykKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkYXRhdHlwZSAhPSBfd2lucmVnLlJFR19TWjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC5lbmNvZGUoZGVmYXVsdF9lbmNvZGluZykgIyBvbWl0IGluIDMueCEKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYWRkX3R5cGUoY3R5cGUsIHN1ZmZpeCwgc3RyaWN0KQorCisKIGRlZiBndWVzc190eXBlKHVybCwgc3RyaWN0PVRydWUpOgogICAgICIiIkd1ZXNzIHRoZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgVVJMLgogCkBAIC0yOTksMTAgKzM1MSwxMiBAQAogICAgIGluaXRlZCA9IFRydWUgICAgIyBzbyB0aGF0IE1pbWVUeXBlcy5fX2luaXRfXygpIGRvZXNuJ3QgY2FsbCB1cyBhZ2FpbgogICAgIGRiID0gTWltZVR5cGVzKCkKICAgICBpZiBmaWxlcyBpcyBOb25lOgorICAgICAgICBpZiBfd2lucmVnOgorICAgICAgICAgICAgZGIucmVhZF93aW5kb3dzX3JlZ2lzdHJ5KCkKICAgICAgICAgZmlsZXMgPSBrbm93bmZpbGVzCiAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgotICAgICAgICAgICAgZGIucmVhZGZwKG9wZW4oZmlsZSkpCisgICAgICAgICAgICBkYi5yZWFkKGZpbGUpCiAgICAgZW5jb2RpbmdzX21hcCA9IGRiLmVuY29kaW5nc19tYXAKICAgICBzdWZmaXhfbWFwID0gZGIuc3VmZml4X21hcAogICAgIHR5cGVzX21hcCA9IGRiLnR5cGVzX21hcFtUcnVlXQpAQCAtNDkyLDcgKzU0Niw2IEBACiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCiAgICAgaW1wb3J0IGdldG9wdAogCiAgICAgVVNBR0UgPSAiIiJcCmRpZmYgLS1naXQgYS9MaWIvbXNpbGliL19faW5pdF9fLnB5IGIvTGliL21zaWxpYi9fX2luaXRfXy5weQppbmRleCA3MWNjZWQyLi4xYWEwNjM3IDEwMDY0NAotLS0gYS9MaWIvbXNpbGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9tc2lsaWIvX19pbml0X18ucHkKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZSkKICAgICAgICAgYWJzb2x1dGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5hYnNvbHV0ZSwgc3JjKQogICAgICAgICBhc3NlcnQgbm90IHJlLnNlYXJjaChyJ1tcP3w+PDovKl0iJywgZmlsZSkgIyByZXN0cmljdGlvbnMgb24gbG9uZyBuYW1lcwotICAgICAgICBpZiBzZWxmLmtleWZpbGVzLmhhc19rZXkoZmlsZSk6CisgICAgICAgIGlmIGZpbGUgaW4gc2VsZi5rZXlmaWxlczoKICAgICAgICAgICAgIGxvZ2ljYWwgPSBzZWxmLmtleWZpbGVzW2ZpbGVdCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2dpY2FsID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKaW5kZXggNGZiMGJkMC4uNGUxYjZhZSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CkBAIC0zOCw2ICszOCw3IEBACiAjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX192ZXJzaW9uX18gPSAnMC43MGExJwpAQCAtMTE2LDcgKzExNyw4IEBACiAgICAgICAgICAgICBudW0gPSAwCiAgICAgZWxpZiAnYnNkJyBpbiBzeXMucGxhdGZvcm0gb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBudW0gPSBpbnQob3MucG9wZW4oJ3N5c2N0bCAtbiBody5uY3B1JykucmVhZCgpKQorICAgICAgICAgICAgd2l0aCBvcy5wb3Blbignc3lzY3RsIC1uIGh3Lm5jcHUnKSBhcyBwOgorICAgICAgICAgICAgICAgIG51bSA9IGludChwLnJlYWQoKSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBudW0gPSAwCiAgICAgZWxzZToKQEAgLTIxOSwxMiArMjIxLDEyIEBACiAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBKb2luYWJsZVF1ZXVlCiAgICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSkKIAotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKK2RlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm5zIGEgcHJvY2VzcyBwb29sIG9iamVjdAogICAgICcnJwogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFBvb2wKLSAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKKyAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCkKIAogZGVmIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKICAgICAnJycKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQppbmRleCA5OWIzMzhlLi4wOTA3OTZlIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKaW5kZXggMzBiMWIyMC4uMTlhM2I2OSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDRmMGE2ODAuLjUwZGM5ZmYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX19hbGxfXyA9IFsgJ0NsaWVudCcsICdMaXN0ZW5lcicsICdQaXBlJyBdCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKaW5kZXggY2VjMTg0Yy4uZDVmM2IyNiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQpAQCAtMyw3ICszLDMzIEBACiAjCiAjIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBpbXBvcnQgb3MKQEAgLTEwMyw3ICsxMjksMTIgQEAKIAogICAgICAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgogICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3CisgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CmluZGV4IDY5N2E1ZjUuLjUyZWU0OWQgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKQEAgLTMsNyArMywzMyBAQAogIwogIyBtdWx0aXByb2Nlc3NpbmcvaGVhcC5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogaW1wb3J0IGJpc2VjdApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKaW5kZXggZTMzMTExNi4uNzg1MThmZCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CkBAIC00LDcgKzQsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWyAnQmFzZU1hbmFnZXInLCAnU3luY01hbmFnZXInLCAnQmFzZVByb3h5JywgJ1Rva2VuJyBdCkBAIC0xMzYsNyArMTYyLDcgQEAKICAgICAgICAgc2VsZi5saXN0ZW5lciA9IExpc3RlbmVyKGFkZHJlc3M9YWRkcmVzcywgYmFja2xvZz01KQogICAgICAgICBzZWxmLmFkZHJlc3MgPSBzZWxmLmxpc3RlbmVyLmFkZHJlc3MKIAotICAgICAgICBzZWxmLmlkX3RvX29iaiA9IHswOiAoTm9uZSwgKCkpfQorICAgICAgICBzZWxmLmlkX3RvX29iaiA9IHsnMCc6IChOb25lLCAoKSl9CiAgICAgICAgIHNlbGYuaWRfdG9fcmVmY291bnQgPSB7fQogICAgICAgICBzZWxmLm11dGV4ID0gdGhyZWFkaW5nLlJMb2NrKCkKICAgICAgICAgc2VsZi5zdG9wID0gMApAQCAtMjk4LDcgKzMyNCw3IEBACiAgICAgICAgICAgICBrZXlzID0gc2VsZi5pZF90b19vYmoua2V5cygpCiAgICAgICAgICAgICBrZXlzLnNvcnQoKQogICAgICAgICAgICAgZm9yIGlkZW50IGluIGtleXM6Ci0gICAgICAgICAgICAgICAgaWYgaWRlbnQgIT0gMDoKKyAgICAgICAgICAgICAgICBpZiBpZGVudCAhPSAnMCc6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgJXM6ICAgICAgIHJlZmNvdW50PSVzXG4gICAgJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWRlbnQsIHNlbGYuaWRfdG9fcmVmY291bnRbaWRlbnRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5pZF90b19vYmpbaWRlbnRdWzBdKVs6NzVdKSkKQEAgLTMxMCw3ICszMzYsNyBAQAogICAgICAgICAnJycKICAgICAgICAgTnVtYmVyIG9mIHNoYXJlZCBvYmplY3RzCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gbGVuKHNlbGYuaWRfdG9fb2JqKSAtIDEgICAgICAjIGRvbid0IGNvdW50IGlkZW50PTAKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmlkX3RvX29iaikgLSAxICAgICAgIyBkb24ndCBjb3VudCBpZGVudD0nMCcKIAogICAgIGRlZiBzaHV0ZG93bihzZWxmLCBjKToKICAgICAgICAgJycnCkBAIC00NzUsMTIgKzUwMSwxNSBAQAogICAgICAgICBkaXNwYXRjaChjb25uLCBOb25lLCAnZHVtbXknKQogICAgICAgICBzZWxmLl9zdGF0ZS52YWx1ZSA9IFN0YXRlLlNUQVJURUQKIAotICAgIGRlZiBzdGFydChzZWxmKToKKyAgICBkZWYgc3RhcnQoc2VsZiwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCkpOgogICAgICAgICAnJycKICAgICAgICAgU3Bhd24gYSBzZXJ2ZXIgcHJvY2VzcyBmb3IgdGhpcyBtYW5hZ2VyIG9iamVjdAogICAgICAgICAnJycKICAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlLnZhbHVlID09IFN0YXRlLklOSVRJQUwKIAorICAgICAgICBpZiBpbml0aWFsaXplciBpcyBub3QgTm9uZSBhbmQgbm90IGhhc2F0dHIoaW5pdGlhbGl6ZXIsICdfX2NhbGxfXycpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdpbml0aWFsaXplciBtdXN0IGJlIGEgY2FsbGFibGUnKQorCiAgICAgICAgICMgcGlwZSBvdmVyIHdoaWNoIHdlIHdpbGwgcmV0cmlldmUgYWRkcmVzcyBvZiBzZXJ2ZXIKICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQogCkBAIC00ODgsNyArNTE3LDcgQEAKICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IFByb2Nlc3MoCiAgICAgICAgICAgICB0YXJnZXQ9dHlwZShzZWxmKS5fcnVuX3NlcnZlciwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3JlZ2lzdHJ5LCBzZWxmLl9hZGRyZXNzLCBzZWxmLl9hdXRoa2V5LAotICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXIsIHdyaXRlciwgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKSwKICAgICAgICAgICAgICkKICAgICAgICAgaWRlbnQgPSAnOicuam9pbihzdHIoaSkgZm9yIGkgaW4gc2VsZi5fcHJvY2Vzcy5faWRlbnRpdHkpCiAgICAgICAgIHNlbGYuX3Byb2Nlc3MubmFtZSA9IHR5cGUoc2VsZikuX19uYW1lX18gICsgJy0nICsgaWRlbnQKQEAgLTUwOSwxMCArNTM4LDE0IEBACiAgICAgICAgICAgICApCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3J1bl9zZXJ2ZXIoY2xzLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplciwgd3JpdGVyKToKKyAgICBkZWYgX3J1bl9zZXJ2ZXIoY2xzLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplciwgd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CiAgICAgICAgICcnJwogICAgICAgICBDcmVhdGUgYSBzZXJ2ZXIsIHJlcG9ydCBpdHMgYWRkcmVzcyBhbmQgcnVuIGl0CiAgICAgICAgICcnJworICAgICAgICBpZiBpbml0aWFsaXplciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluaXRpYWxpemVyKCppbml0YXJncykKKwogICAgICAgICAjIGNyZWF0ZSBzZXJ2ZXIKICAgICAgICAgc2VydmVyID0gY2xzLl9TZXJ2ZXIocmVnaXN0cnksIGFkZHJlc3MsIGF1dGhrZXksIHNlcmlhbGl6ZXIpCiAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQppbmRleCA5ZGEyN2Q0Li4xZjM2NmYwIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIF9fYWxsX18gPSBbJ1Bvb2wnXQpAQCAtNDIsNyArNjgsOCBAQAogIyBDb2RlIHJ1biBieSB3b3JrZXIgcHJvY2Vzc2VzCiAjCiAKLWRlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKK2RlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrcz1Ob25lKToKKyAgICBhc3NlcnQgbWF4dGFza3MgaXMgTm9uZSBvciAodHlwZShtYXh0YXNrcykgPT0gaW50IGFuZCBtYXh0YXNrcyA+IDApCiAgICAgcHV0ID0gb3V0cXVldWUucHV0CiAgICAgZ2V0ID0gaW5xdWV1ZS5nZXQKICAgICBpZiBoYXNhdHRyKGlucXVldWUsICdfd3JpdGVyJyk6CkBAIC01Miw3ICs3OSw4IEBACiAgICAgaWYgaW5pdGlhbGl6ZXIgaXMgbm90IE5vbmU6CiAgICAgICAgIGluaXRpYWxpemVyKCppbml0YXJncykKIAotICAgIHdoaWxlIDE6CisgICAgY29tcGxldGVkID0gMAorICAgIHdoaWxlIG1heHRhc2tzIGlzIE5vbmUgb3IgKG1heHRhc2tzIGFuZCBjb21wbGV0ZWQgPCBtYXh0YXNrcyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQogICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBJT0Vycm9yKToKQEAgLTY5LDYgKzk3LDggQEAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAgICAgICAgICAgIHJlc3VsdCA9IChGYWxzZSwgZSkKICAgICAgICAgcHV0KChqb2IsIGksIHJlc3VsdCkpCisgICAgICAgIGNvbXBsZXRlZCArPSAxCisgICAgZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKIAogIwogIyBDbGFzcyByZXByZXNlbnRpbmcgYSBwcm9jZXNzIHBvb2wKQEAgLTgwLDExICsxMTAsMTUgQEAKICAgICAnJycKICAgICBQcm9jZXNzID0gUHJvY2VzcwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gUXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CiAgICAgICAgIHNlbGYuX3N0YXRlID0gUlVOCisgICAgICAgIHNlbGYuX21heHRhc2tzcGVyY2hpbGQgPSBtYXh0YXNrc3BlcmNoaWxkCisgICAgICAgIHNlbGYuX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIKKyAgICAgICAgc2VsZi5faW5pdGFyZ3MgPSBpbml0YXJncwogCiAgICAgICAgIGlmIHByb2Nlc3NlcyBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgpAQCAtOTIsMTYgKzEyNiwyMSBAQAogICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gMQogCisgICAgICAgIGlmIGluaXRpYWxpemVyIGlzIG5vdCBOb25lIGFuZCBub3QgaGFzYXR0cihpbml0aWFsaXplciwgJ19fY2FsbF9fJyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2luaXRpYWxpemVyIG11c3QgYmUgYSBjYWxsYWJsZScpCisKKyAgICAgICAgc2VsZi5fcHJvY2Vzc2VzID0gcHJvY2Vzc2VzCiAgICAgICAgIHNlbGYuX3Bvb2wgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShwcm9jZXNzZXMpOgotICAgICAgICAgICAgdyA9IHNlbGYuUHJvY2VzcygKLSAgICAgICAgICAgICAgICB0YXJnZXQ9d29ya2VyLAotICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2lucXVldWUsIHNlbGYuX291dHF1ZXVlLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgc2VsZi5fcG9vbC5hcHBlbmQodykKLSAgICAgICAgICAgIHcubmFtZSA9IHcubmFtZS5yZXBsYWNlKCdQcm9jZXNzJywgJ1Bvb2xXb3JrZXInKQotICAgICAgICAgICAgdy5kYWVtb24gPSBUcnVlCi0gICAgICAgICAgICB3LnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKKworICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlciA9IHRocmVhZGluZy5UaHJlYWQoCisgICAgICAgICAgICB0YXJnZXQ9UG9vbC5faGFuZGxlX3dvcmtlcnMsCisgICAgICAgICAgICBhcmdzPShzZWxmLCApCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmRhZW1vbiA9IFRydWUKKyAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gUlVOCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLnN0YXJ0KCkKKwogCiAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlciA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICAgICB0YXJnZXQ9UG9vbC5faGFuZGxlX3Rhc2tzLApAQCAtMTIyLDEwICsxNjEsNDggQEAKICAgICAgICAgc2VsZi5fdGVybWluYXRlID0gRmluYWxpemUoCiAgICAgICAgICAgICBzZWxmLCBzZWxmLl90ZXJtaW5hdGVfcG9vbCwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3Rhc2txdWV1ZSwgc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIHNlbGYuX3Bvb2wsCi0gICAgICAgICAgICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIsIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLCBzZWxmLl9jYWNoZSksCisgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlciwgc2VsZi5fdGFza19oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIsIHNlbGYuX2NhY2hlKSwKICAgICAgICAgICAgIGV4aXRwcmlvcml0eT0xNQogICAgICAgICAgICAgKQogCisgICAgZGVmIF9qb2luX2V4aXRlZF93b3JrZXJzKHNlbGYpOgorICAgICAgICAiIiJDbGVhbnVwIGFmdGVyIGFueSB3b3JrZXIgcHJvY2Vzc2VzIHdoaWNoIGhhdmUgZXhpdGVkIGR1ZSB0byByZWFjaGluZworICAgICAgICB0aGVpciBzcGVjaWZpZWQgbGlmZXRpbWUuICBSZXR1cm5zIFRydWUgaWYgYW55IHdvcmtlcnMgd2VyZSBjbGVhbmVkIHVwLgorICAgICAgICAiIiIKKyAgICAgICAgY2xlYW5lZCA9IEZhbHNlCisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKGxlbihzZWxmLl9wb29sKSkpOgorICAgICAgICAgICAgd29ya2VyID0gc2VsZi5fcG9vbFtpXQorICAgICAgICAgICAgaWYgd29ya2VyLmV4aXRjb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgd29ya2VyIGV4aXRlZAorICAgICAgICAgICAgICAgIGRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgaSkKKyAgICAgICAgICAgICAgICB3b3JrZXIuam9pbigpCisgICAgICAgICAgICAgICAgY2xlYW5lZCA9IFRydWUKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fcG9vbFtpXQorICAgICAgICByZXR1cm4gY2xlYW5lZAorCisgICAgZGVmIF9yZXBvcHVsYXRlX3Bvb2woc2VsZik6CisgICAgICAgICIiIkJyaW5nIHRoZSBudW1iZXIgb2YgcG9vbCBwcm9jZXNzZXMgdXAgdG8gdGhlIHNwZWNpZmllZCBudW1iZXIsCisgICAgICAgIGZvciB1c2UgYWZ0ZXIgcmVhcGluZyB3b3JrZXJzIHdoaWNoIGhhdmUgZXhpdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5fcHJvY2Vzc2VzIC0gbGVuKHNlbGYuX3Bvb2wpKToKKyAgICAgICAgICAgIHcgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXdvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRpYWxpemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbml0YXJncywgc2VsZi5fbWF4dGFza3NwZXJjaGlsZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLl9wb29sLmFwcGVuZCh3KQorICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCisgICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICAgICAgZGVidWcoJ2FkZGVkIHdvcmtlcicpCisKKyAgICBkZWYgX21haW50YWluX3Bvb2woc2VsZik6CisgICAgICAgICIiIkNsZWFuIHVwIGFueSBleGl0ZWQgd29ya2VycyBhbmQgc3RhcnQgcmVwbGFjZW1lbnRzIGZvciB0aGVtLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fam9pbl9leGl0ZWRfd29ya2VycygpOgorICAgICAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKKwogICAgIGRlZiBfc2V0dXBfcXVldWVzKHNlbGYpOgogICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCiAgICAgICAgIHNlbGYuX2lucXVldWUgPSBTaW1wbGVRdWV1ZSgpCkBAIC0yMDQsNiArMjgxLDggQEAKICAgICAgICAgICAgIGNodW5rc2l6ZSwgZXh0cmEgPSBkaXZtb2QobGVuKGl0ZXJhYmxlKSwgbGVuKHNlbGYuX3Bvb2wpICogNCkKICAgICAgICAgICAgIGlmIGV4dHJhOgogICAgICAgICAgICAgICAgIGNodW5rc2l6ZSArPSAxCisgICAgICAgIGlmIGxlbihpdGVyYWJsZSkgPT0gMDoKKyAgICAgICAgICAgIGNodW5rc2l6ZSA9IDAKIAogICAgICAgICB0YXNrX2JhdGNoZXMgPSBQb29sLl9nZXRfdGFza3MoZnVuYywgaXRlcmFibGUsIGNodW5rc2l6ZSkKICAgICAgICAgcmVzdWx0ID0gTWFwUmVzdWx0KHNlbGYuX2NhY2hlLCBjaHVua3NpemUsIGxlbihpdGVyYWJsZSksIGNhbGxiYWNrKQpAQCAtMjEyLDYgKzI5MSwxMyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9oYW5kbGVfd29ya2Vycyhwb29sKToKKyAgICAgICAgd2hpbGUgcG9vbC5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID09IFJVTiBhbmQgcG9vbC5fc3RhdGUgPT0gUlVOOgorICAgICAgICAgICAgcG9vbC5fbWFpbnRhaW5fcG9vbCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgZGVidWcoJ3dvcmtlciBoYW5kbGVyIGV4aXRpbmcnKQorCisgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGFuZGxlX3Rhc2tzKHRhc2txdWV1ZSwgcHV0LCBvdXRxdWV1ZSwgcG9vbCk6CiAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCiAKQEAgLTMyNiwxNiArNDEyLDE5IEBACiAgICAgICAgIGRlYnVnKCdjbG9zaW5nIHBvb2wnKQogICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBSVU46CiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IENMT1NFCisgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBDTE9TRQogICAgICAgICAgICAgc2VsZi5fdGFza3F1ZXVlLnB1dChOb25lKQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHBvb2wnKQogICAgICAgICBzZWxmLl9zdGF0ZSA9IFRFUk1JTkFURQorICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgc2VsZi5fdGVybWluYXRlKCkKIAogICAgIGRlZiBqb2luKHNlbGYpOgogICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sJykKICAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlIGluIChDTE9TRSwgVEVSTUlOQVRFKQorICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5qb2luKCkKICAgICAgICAgc2VsZi5fdGFza19oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlci5qb2luKCkKICAgICAgICAgZm9yIHAgaW4gc2VsZi5fcG9vbDoKQEAgLTM1MiwxMCArNDQxLDExIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX3Rlcm1pbmF0ZV9wb29sKGNscywgdGFza3F1ZXVlLCBpbnF1ZXVlLCBvdXRxdWV1ZSwgcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLCB0YXNrX2hhbmRsZXIsIHJlc3VsdF9oYW5kbGVyLCBjYWNoZSk6CiAgICAgICAgICMgdGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgYmUgY2FsbGVkIG9uY2UKICAgICAgICAgZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCiAKKyAgICAgICAgd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHRhc2tfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza3F1ZXVlLnB1dChOb25lKSAgICAgICAgICAgICAgICAgIyBzZW50aW5lbAogCkBAIC0zNjcsMTAgKzQ1NywxMiBAQAogICAgICAgICByZXN1bHRfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgb3V0cXVldWUucHV0KE5vbmUpICAgICAgICAgICAgICAgICAgIyBzZW50aW5lbAogCisgICAgICAgICMgVGVybWluYXRlIHdvcmtlcnMgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGZpbmlzaGVkLgogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKICAgICAgICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKICAgICAgICAgICAgIGZvciBwIGluIHBvb2w6Ci0gICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICAgICAgICAgIGlmIHAuZXhpdGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQogCiAgICAgICAgIGRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCiAgICAgICAgIHRhc2tfaGFuZGxlci5qb2luKDFlMTAwKQpAQCAtMzgxLDcgKzQ3MywxMCBAQAogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKICAgICAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgotICAgICAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICAgICAgaWYgcC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICAjIHdvcmtlciBoYXMgbm90IHlldCBleGl0ZWQKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBwLnBpZCkKKyAgICAgICAgICAgICAgICAgICAgcC5qb2luKCkKIAogIwogIyBDbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHJldHVybmVkIGJ5IGBQb29sLmFwcGx5X2FzeW5jKClgCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKaW5kZXggNTY3MTlkOS4uMDY5N2U3NCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQpAQCAtMyw3ICszLDMzIEBACiAjCiAjIG11bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWydQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQpAQCAtMTc5LDcgKzIwNSw3IEBACiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlkZW50KHNlbGYpOgogICAgICAgICAnJycKLSAgICAgICAgUmV0dXJuIGluZGVudGlmaWVyIChQSUQpIG9mIHByb2Nlc3Mgb3IgYE5vbmVgIGlmIGl0IGhhcyB5ZXQgdG8gc3RhcnQKKyAgICAgICAgUmV0dXJuIGlkZW50aWZpZXIgKFBJRCkgb2YgcHJvY2VzcyBvciBgTm9uZWAgaWYgaXQgaGFzIHlldCB0byBzdGFydAogICAgICAgICAnJycKICAgICAgICAgaWYgc2VsZiBpcyBfY3VycmVudF9wcm9jZXNzOgogICAgICAgICAgICAgcmV0dXJuIG9zLmdldHBpZCgpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IGVhMjc5OTEuLjg1ODQ0MDggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX19hbGxfXyA9IFsnUXVldWUnLCAnU2ltcGxlUXVldWUnLCAnSm9pbmFibGVRdWV1ZSddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CmluZGV4IDYwZTcxNTEuLjZlNWU1YmMgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CkBAIC00LDcgKzQsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogX19hbGxfXyA9IFtdCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CmluZGV4IDc2YjVlOTQuLmI1NjlmYjIgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgUiBPdWRrZXJrIC0tLSBzZWUgQ09QWUlORy50eHQKKyMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyaworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCisjICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KICMKIAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKaW5kZXggZGFjZjQ1YS4uNGIwNzdlNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CiAjCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsgLS0tIHNlZSBDT1BZSU5HLnR4dAorIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgogIwogCiBfX2FsbF9fID0gWwpAQCAtNTgsOCArODQsMTIgQEAKICAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fc2VtbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX3NlbWxvY2sucmVsZWFzZQotICAgICAgICBzZWxmLl9fZW50ZXJfXyA9IHNlbGYuX3NlbWxvY2suX19lbnRlcl9fCi0gICAgICAgIHNlbGYuX19leGl0X18gPSBzZWxmLl9zZW1sb2NrLl9fZXhpdF9fCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2VtbG9jay5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgogICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKQEAgLTE4MSwxMSArMjExLDE1IEBACiAgICAgICAgICBzZWxmLl93b2tlbl9jb3VudCwgc2VsZi5fd2FpdF9zZW1hcGhvcmUpID0gc3RhdGUKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZW50ZXJfXygpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2V4aXRfXygqYXJncykKKwogICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9sb2NrLmFjcXVpcmUKICAgICAgICAgc2VsZi5yZWxlYXNlID0gc2VsZi5fbG9jay5yZWxlYXNlCi0gICAgICAgIHNlbGYuX19lbnRlcl9fID0gc2VsZi5fbG9jay5fX2VudGVyX18KLSAgICAgICAgc2VsZi5fX2V4aXRfXyA9IHNlbGYuX2xvY2suX19leGl0X18KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtMzAxLDUgKzMzNSwxMCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2ZsYWcucmVsZWFzZSgpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX2NvbmQud2FpdCh0aW1lb3V0KQorCisgICAgICAgICAgICBpZiBzZWxmLl9mbGFnLmFjcXVpcmUoRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZsYWcucmVsZWFzZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCA2MzJhZGIxLi5jNjVkZDk5IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC0zLDcgKzMsMzMgQEAKICMKICMgbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKICMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyayAtLS0gc2VlIENPUFlJTkcudHh0CisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQorIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCiAjCiAKIGltcG9ydCBpdGVydG9vbHMKZGlmZiAtLWdpdCBhL0xpYi9tdXRleC5weSBiL0xpYi9tdXRleC5weQppbmRleCA5ZTZiOGQ0Li5mOGFjYmE0IDEwMDY0NAotLS0gYS9MaWIvbXV0ZXgucHkKKysrIGIvTGliL211dGV4LnB5CkBAIC0yMCw3ICsyMCw3IEBACiBjbGFzcyBtdXRleDoKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBtdXRleCAtLSBpbml0aWFsbHkgdW5sb2NrZWQuIiIiCi0gICAgICAgIHNlbGYubG9ja2VkID0gMAorICAgICAgICBzZWxmLmxvY2tlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYucXVldWUgPSBkZXF1ZSgpCiAKICAgICBkZWYgdGVzdChzZWxmKToKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgIiIiQXRvbWljIHRlc3QtYW5kLXNldCAtLSBncmFiIHRoZSBsb2NrIGlmIGl0IGlzIG5vdCBzZXQsCiAgICAgICAgIHJldHVybiBUcnVlIGlmIGl0IHN1Y2NlZWRlZC4iIiIKICAgICAgICAgaWYgbm90IHNlbGYubG9ja2VkOgotICAgICAgICAgICAgc2VsZi5sb2NrZWQgPSAxCisgICAgICAgICAgICBzZWxmLmxvY2tlZCA9IFRydWUKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTUyLDQgKzUyLDQgQEAKICAgICAgICAgICAgIGZ1bmN0aW9uLCBhcmd1bWVudCA9IHNlbGYucXVldWUucG9wbGVmdCgpCiAgICAgICAgICAgICBmdW5jdGlvbihhcmd1bWVudCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYubG9ja2VkID0gMAorICAgICAgICAgICAgc2VsZi5sb2NrZWQgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL25ldHJjLnB5IGIvTGliL25ldHJjLnB5CmluZGV4IDU0OTNkNzcuLjRjYWViOTYgMTAwNjQ0Ci0tLSBhL0xpYi9uZXRyYy5weQorKysgYi9MaWIvbmV0cmMucHkKQEAgLTI2LDE2ICsyNiwyMyBAQAogICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLCAiLm5ldHJjIikKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQotICAgICAgICBmcCA9IG9wZW4oZmlsZSkKICAgICAgICAgc2VsZi5ob3N0cyA9IHt9CiAgICAgICAgIHNlbGYubWFjcm9zID0ge30KKyAgICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5fcGFyc2UoZmlsZSwgZnApCisKKyAgICBkZWYgX3BhcnNlKHNlbGYsIGZpbGUsIGZwKToKICAgICAgICAgbGV4ZXIgPSBzaGxleC5zaGxleChmcCkKICAgICAgICAgbGV4ZXIud29yZGNoYXJzICs9IHIiIiIhIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xdXl9ge3x9fiIiIgorICAgICAgICBsZXhlci5jb21tZW50ZXJzID0gbGV4ZXIuY29tbWVudGVycy5yZXBsYWNlKCcjJywgJycpCiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAjIExvb2sgZm9yIGEgbWFjaGluZSwgZGVmYXVsdCwgb3IgbWFjZGVmIHRvcC1sZXZlbCBrZXl3b3JkCiAgICAgICAgICAgICB0b3BsZXZlbCA9IHR0ID0gbGV4ZXIuZ2V0X3Rva2VuKCkKICAgICAgICAgICAgIGlmIG5vdCB0dDoKICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiB0dFswXSA9PSAnIyc6CisgICAgICAgICAgICAgICAgZnAucmVhZGxpbmUoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVsaWYgdHQgPT0gJ21hY2hpbmUnOgogICAgICAgICAgICAgICAgIGVudHJ5bmFtZSA9IGxleGVyLmdldF90b2tlbigpCiAgICAgICAgICAgICBlbGlmIHR0ID09ICdkZWZhdWx0JzoKZGlmZiAtLWdpdCBhL0xpYi9uZXcucHkgYi9MaWIvbmV3LnB5CmluZGV4IGU1Zjk2NGYuLjJhNmU2MzEgMTAwNjQ0Ci0tLSBhL0xpYi9uZXcucHkKKysrIGIvTGliL25ldy5weQpAQCAtMTQsOCArMTQsNCBAQAogZnJvbSB0eXBlcyBpbXBvcnQgTWV0aG9kVHlwZSBhcyBpbnN0YW5jZW1ldGhvZAogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZSBhcyBtb2R1bGUKIAotIyBDb2RlVHlwZSBpcyBub3QgYWNjZXNzaWJsZSBpbiByZXN0cmljdGVkIGV4ZWN1dGlvbiBtb2RlCi10cnk6Ci0gICAgZnJvbSB0eXBlcyBpbXBvcnQgQ29kZVR5cGUgYXMgY29kZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKK2Zyb20gdHlwZXMgaW1wb3J0IENvZGVUeXBlIGFzIGNvZGUKZGlmZiAtLWdpdCBhL0xpYi9udHBhdGgucHkgYi9MaWIvbnRwYXRoLnB5CmluZGV4IDExYTBhM2UuLjE0OTExZDAgMTAwNjQ0Ci0tLSBhL0xpYi9udHBhdGgucHkKKysrIGIvTGliL250cGF0aC5weQpAQCAtNDgzLDI3ICs0ODMsMzggQEAKIHN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gKGhhc2F0dHIoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzNdID49IDIpCiAKK2RlZiBfYWJzcGF0aF9zcGxpdChwYXRoKToKKyAgICBhYnMgPSBhYnNwYXRoKG5vcm1wYXRoKHBhdGgpKQorICAgIHByZWZpeCwgcmVzdCA9IHNwbGl0dW5jKGFicykKKyAgICBpc191bmMgPSBib29sKHByZWZpeCkKKyAgICBpZiBub3QgaXNfdW5jOgorICAgICAgICBwcmVmaXgsIHJlc3QgPSBzcGxpdGRyaXZlKGFicykKKyAgICByZXR1cm4gaXNfdW5jLCBwcmVmaXgsIFt4IGZvciB4IGluIHJlc3Quc3BsaXQoc2VwKSBpZiB4XQorCiBkZWYgcmVscGF0aChwYXRoLCBzdGFydD1jdXJkaXIpOgogICAgICIiIlJldHVybiBhIHJlbGF0aXZlIHZlcnNpb24gb2YgYSBwYXRoIiIiCiAKICAgICBpZiBub3QgcGF0aDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gcGF0aCBzcGVjaWZpZWQiKQotICAgIHN0YXJ0X2xpc3QgPSBhYnNwYXRoKHN0YXJ0KS5zcGxpdChzZXApCi0gICAgcGF0aF9saXN0ID0gYWJzcGF0aChwYXRoKS5zcGxpdChzZXApCi0gICAgaWYgc3RhcnRfbGlzdFswXS5sb3dlcigpICE9IHBhdGhfbGlzdFswXS5sb3dlcigpOgotICAgICAgICB1bmNfcGF0aCwgcmVzdCA9IHNwbGl0dW5jKHBhdGgpCi0gICAgICAgIHVuY19zdGFydCwgcmVzdCA9IHNwbGl0dW5jKHN0YXJ0KQotICAgICAgICBpZiBib29sKHVuY19wYXRoKSBeIGJvb2wodW5jX3N0YXJ0KToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBtaXggVU5DIGFuZCBub24tVU5DIHBhdGhzICglcyBhbmQgJXMpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGgsIHN0YXJ0KSkKKworICAgIHN0YXJ0X2lzX3VuYywgc3RhcnRfcHJlZml4LCBzdGFydF9saXN0ID0gX2Fic3BhdGhfc3BsaXQoc3RhcnQpCisgICAgcGF0aF9pc191bmMsIHBhdGhfcHJlZml4LCBwYXRoX2xpc3QgPSBfYWJzcGF0aF9zcGxpdChwYXRoKQorCisgICAgaWYgcGF0aF9pc191bmMgXiBzdGFydF9pc191bmM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBtaXggVU5DIGFuZCBub24tVU5DIHBhdGhzICglcyBhbmQgJXMpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGF0aCwgc3RhcnQpKQorICAgIGlmIHBhdGhfcHJlZml4Lmxvd2VyKCkgIT0gc3RhcnRfcHJlZml4Lmxvd2VyKCk6CisgICAgICAgIGlmIHBhdGhfaXNfdW5jOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGF0aCBpcyBvbiBVTkMgcm9vdCAlcywgc3RhcnQgb24gVU5DIHJvb3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXRoX3ByZWZpeCwgc3RhcnRfcHJlZml4KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBhdGggaXMgb24gZHJpdmUgJXMsIHN0YXJ0IG9uIGRyaXZlICVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGF0aF9saXN0WzBdLCBzdGFydF9saXN0WzBdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGhfcHJlZml4LCBzdGFydF9wcmVmaXgpKQogICAgICMgV29yayBvdXQgaG93IG11Y2ggb2YgdGhlIGZpbGVwYXRoIGlzIHNoYXJlZCBieSBzdGFydCBhbmQgcGF0aC4KLSAgICBmb3IgaSBpbiByYW5nZShtaW4obGVuKHN0YXJ0X2xpc3QpLCBsZW4ocGF0aF9saXN0KSkpOgotICAgICAgICBpZiBzdGFydF9saXN0W2ldLmxvd2VyKCkgIT0gcGF0aF9saXN0W2ldLmxvd2VyKCk6CisgICAgaSA9IDAKKyAgICBmb3IgZTEsIGUyIGluIHppcChzdGFydF9saXN0LCBwYXRoX2xpc3QpOgorICAgICAgICBpZiBlMS5sb3dlcigpICE9IGUyLmxvd2VyKCk6CiAgICAgICAgICAgICBicmVhawotICAgIGVsc2U6CiAgICAgICAgIGkgKz0gMQogCiAgICAgcmVsX2xpc3QgPSBbcGFyZGlyXSAqIChsZW4oc3RhcnRfbGlzdCktaSkgKyBwYXRoX2xpc3RbaTpdCmRpZmYgLS1naXQgYS9MaWIvbnVtYmVycy5weSBiL0xpYi9udW1iZXJzLnB5CmluZGV4IDU0MGU3ZDUuLjI1OTI2NDMgMTAwNjQ0Ci0tLSBhL0xpYi9udW1iZXJzLnB5CisrKyBiL0xpYi9udW1iZXJzLnB5CkBAIC02Myw3ICs2Myw3IEBACiAKICAgICBAYWJzdHJhY3Rwcm9wZXJ0eQogICAgIGRlZiBpbWFnKHNlbGYpOgotICAgICAgICAiIiJSZXRyaWV2ZSB0aGUgcmVhbCBjb21wb25lbnQgb2YgdGhpcyBudW1iZXIuCisgICAgICAgICIiIlJldHJpZXZlIHRoZSBpbWFnaW5hcnkgY29tcG9uZW50IG9mIHRoaXMgbnVtYmVyLgogCiAgICAgICAgIFRoaXMgc2hvdWxkIHN1YmNsYXNzIFJlYWwuCiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL29wY29kZS5weSBiL0xpYi9vcGNvZGUucHkKaW5kZXggY2VlNTA1Ny4uZTQwMzM2NSAxMDA2NDQKLS0tIGEvTGliL29wY29kZS5weQorKysgYi9MaWIvb3Bjb2RlLnB5CkBAIC01OCw3ICs1OCw2IEBACiAKIGRlZl9vcCgnVU5BUllfSU5WRVJUJywgMTUpCiAKLWRlZl9vcCgnTElTVF9BUFBFTkQnLCAxOCkKIGRlZl9vcCgnQklOQVJZX1BPV0VSJywgMTkpCiBkZWZfb3AoJ0JJTkFSWV9NVUxUSVBMWScsIDIwKQogZGVmX29wKCdCSU5BUllfRElWSURFJywgMjEpCkBAIC0xMjgsNyArMTI3LDcgQEAKIG5hbWVfb3AoJ0RFTEVURV9OQU1FJywgOTEpICAgICAgIyAiIgogZGVmX29wKCdVTlBBQ0tfU0VRVUVOQ0UnLCA5MikgICAjIE51bWJlciBvZiB0dXBsZSBpdGVtcwoganJlbF9vcCgnRk9SX0lURVInLCA5MykKLQorZGVmX29wKCdMSVNUX0FQUEVORCcsIDk0KQogbmFtZV9vcCgnU1RPUkVfQVRUUicsIDk1KSAgICAgICAjIEluZGV4IGluIG5hbWUgbGlzdAogbmFtZV9vcCgnREVMRVRFX0FUVFInLCA5NikgICAgICAjICIiCiBuYW1lX29wKCdTVE9SRV9HTE9CQUwnLCA5NykgICAgICMgIiIKQEAgLTEzOSwxNyArMTM4LDE5IEBACiBuYW1lX29wKCdMT0FEX05BTUUnLCAxMDEpICAgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CiBkZWZfb3AoJ0JVSUxEX1RVUExFJywgMTAyKSAgICAgICMgTnVtYmVyIG9mIHR1cGxlIGl0ZW1zCiBkZWZfb3AoJ0JVSUxEX0xJU1QnLCAxMDMpICAgICAgICMgTnVtYmVyIG9mIGxpc3QgaXRlbXMKLWRlZl9vcCgnQlVJTERfTUFQJywgMTA0KSAgICAgICAgIyBOdW1iZXIgb2YgZGljdCBlbnRyaWVzICh1cHRvIDI1NSkKLW5hbWVfb3AoJ0xPQURfQVRUUicsIDEwNSkgICAgICAgIyBJbmRleCBpbiBuYW1lIGxpc3QKLWRlZl9vcCgnQ09NUEFSRV9PUCcsIDEwNikgICAgICAgIyBDb21wYXJpc29uIG9wZXJhdG9yCi1oYXNjb21wYXJlLmFwcGVuZCgxMDYpCi1uYW1lX29wKCdJTVBPUlRfTkFNRScsIDEwNykgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0Ci1uYW1lX29wKCdJTVBPUlRfRlJPTScsIDEwOCkgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0Ci0KK2RlZl9vcCgnQlVJTERfU0VUJywgMTA0KSAgICAgICAgIyBOdW1iZXIgb2Ygc2V0IGl0ZW1zCitkZWZfb3AoJ0JVSUxEX01BUCcsIDEwNSkgICAgICAgICMgTnVtYmVyIG9mIGRpY3QgZW50cmllcyAodXB0byAyNTUpCituYW1lX29wKCdMT0FEX0FUVFInLCAxMDYpICAgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CitkZWZfb3AoJ0NPTVBBUkVfT1AnLCAxMDcpICAgICAgICMgQ29tcGFyaXNvbiBvcGVyYXRvcgoraGFzY29tcGFyZS5hcHBlbmQoMTA3KQorbmFtZV9vcCgnSU1QT1JUX05BTUUnLCAxMDgpICAgICAjIEluZGV4IGluIG5hbWUgbGlzdAorbmFtZV9vcCgnSU1QT1JUX0ZST00nLCAxMDkpICAgICAjIEluZGV4IGluIG5hbWUgbGlzdAoganJlbF9vcCgnSlVNUF9GT1JXQVJEJywgMTEwKSAgICAjIE51bWJlciBvZiBieXRlcyB0byBza2lwCi1qcmVsX29wKCdKVU1QX0lGX0ZBTFNFJywgMTExKSAgICMgIiIKLWpyZWxfb3AoJ0pVTVBfSUZfVFJVRScsIDExMikgICAgIyAiIgotamFic19vcCgnSlVNUF9BQlNPTFVURScsIDExMykgICAjIFRhcmdldCBieXRlIG9mZnNldCBmcm9tIGJlZ2lubmluZyBvZiBjb2RlCitqYWJzX29wKCdKVU1QX0lGX0ZBTFNFX09SX1BPUCcsIDExMSkgIyBUYXJnZXQgYnl0ZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgY29kZQoramFic19vcCgnSlVNUF9JRl9UUlVFX09SX1BPUCcsIDExMikgICMgIiIKK2phYnNfb3AoJ0pVTVBfQUJTT0xVVEUnLCAxMTMpICAgICAgICAjICIiCitqYWJzX29wKCdQT1BfSlVNUF9JRl9GQUxTRScsIDExNCkgICAgIyAiIgoramFic19vcCgnUE9QX0pVTVBfSUZfVFJVRScsIDExNSkgICAgICMgIiIKIAogbmFtZV9vcCgnTE9BRF9HTE9CQUwnLCAxMTYpICAgICAjIEluZGV4IGluIG5hbWUgbGlzdAogCkBAIC0xODAsNyArMTgxLDEyIEBACiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fVkFSJywgMTQwKSAgICAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fS1cnLCAxNDEpICAgICAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fVkFSX0tXJywgMTQyKSAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCi1kZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0MykKLUVYVEVOREVEX0FSRyA9IDE0MworCitqcmVsX29wKCdTRVRVUF9XSVRIJywgMTQzKQorCitkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NSkKK0VYVEVOREVEX0FSRyA9IDE0NQorZGVmX29wKCdTRVRfQUREJywgMTQ2KQorZGVmX29wKCdNQVBfQUREJywgMTQ3KQogCiBkZWwgZGVmX29wLCBuYW1lX29wLCBqcmVsX29wLCBqYWJzX29wCmRpZmYgLS1naXQgYS9MaWIvb3B0cGFyc2UucHkgYi9MaWIvb3B0cGFyc2UucHkKaW5kZXggZDBkNTk2MS4uODdkNzczNyAxMDA2NDQKLS0tIGEvTGliL29wdHBhcnNlLnB5CisrKyBiL0xpYi9vcHRwYXJzZS5weQpAQCAtODEzLDcgKzgxMyw3IEBACiAgICAgICAgICAgICBwYXJzZXIucHJpbnRfdmVyc2lvbigpCiAgICAgICAgICAgICBwYXJzZXIuZXhpdCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJ1bmtub3duIGFjdGlvbiAlciIgJSBzZWxmLmFjdGlvbgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBhY3Rpb24gJXIiICUgc2VsZi5hY3Rpb24pCiAKICAgICAgICAgcmV0dXJuIDEKIApkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDg4YWRjMTUuLmM2MTJlMTcgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgICAgICAgICAgZGlycy5yZW1vdmUoJ0NWUycpICAjIGRvbid0IHZpc2l0IENWUyBkaXJlY3RvcmllcwogICAgICIiIgogCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBpc2RpciwgaXNsaW5rCisgICAgaXNsaW5rLCBqb2luLCBpc2RpciA9IHBhdGguaXNsaW5rLCBwYXRoLmpvaW4sIHBhdGguaXNkaXIKIAogICAgICMgV2UgbWF5IG5vdCBoYXZlIHJlYWQgcGVybWlzc2lvbiBmb3IgdG9wLCBpbiB3aGljaCBjYXNlIHdlIGNhbid0CiAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3MucGF0aC53YWxrCkBAIC0yODksOSArMjg5LDkgQEAKICAgICBpZiB0b3Bkb3duOgogICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKICAgICBmb3IgbmFtZSBpbiBkaXJzOgotICAgICAgICBwYXRoID0gam9pbih0b3AsIG5hbWUpCi0gICAgICAgIGlmIGZvbGxvd2xpbmtzIG9yIG5vdCBpc2xpbmsocGF0aCk6Ci0gICAgICAgICAgICBmb3IgeCBpbiB3YWxrKHBhdGgsIHRvcGRvd24sIG9uZXJyb3IsIGZvbGxvd2xpbmtzKToKKyAgICAgICAgbmV3X3BhdGggPSBqb2luKHRvcCwgbmFtZSkKKyAgICAgICAgaWYgZm9sbG93bGlua3Mgb3Igbm90IGlzbGluayhuZXdfcGF0aCk6CisgICAgICAgICAgICBmb3IgeCBpbiB3YWxrKG5ld19wYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcyk6CiAgICAgICAgICAgICAgICAgeWllbGQgeAogICAgIGlmIG5vdCB0b3Bkb3duOgogICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKQEAgLTUxNCwxMSArNTE0LDcgQEAKIF9fYWxsX18uYXBwZW5kKCJnZXRlbnYiKQogCiBkZWYgX2V4aXN0cyhuYW1lKToKLSAgICB0cnk6Ci0gICAgICAgIGV2YWwobmFtZSkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gbmFtZSBpbiBnbG9iYWxzKCkKIAogIyBTdXBwbHkgc3Bhd24qKCkgKHByb2JhYmx5IG9ubHkgZm9yIFVuaXgpCiBpZiBfZXhpc3RzKCJmb3JrIikgYW5kIG5vdCBfZXhpc3RzKCJzcGF3bnYiKSBhbmQgX2V4aXN0cygiZXhlY3YiKToKQEAgLTc1Niw3ICs3NTIsNyBAQAogICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiL2Rldi91cmFuZG9tIChvciBlcXVpdmFsZW50KSBub3QgZm91bmQiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBicyA9IGIiIgotICAgICAgICAgICAgd2hpbGUgbiAtIGxlbihicykgPj0gMToKKyAgICAgICAgICAgIHdoaWxlIG4gPiBsZW4oYnMpOgogICAgICAgICAgICAgICAgIGJzICs9IHJlYWQoX3VyYW5kb21mZCwgbiAtIGxlbihicykpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjbG9zZShfdXJhbmRvbWZkKQpkaWZmIC0tZ2l0IGEvTGliL3BkYi5kb2MgYi9MaWIvcGRiLmRvYwppbmRleCAwZDMyODAwLi4zNzViZTJmIDEwMDY0NAotLS0gYS9MaWIvcGRiLmRvYworKysgYi9MaWIvcGRiLmRvYwpAQCAtMTM4LDggKzEzOCw4IEBACiBydW4gW2FyZ3MuLi5dCiAgICAgICAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIHB5dGhvbiBwcm9ncmFtLiBJZiBhIHN0cmluZyBpcyBzdXBwbGllZCBpdCBpcwogICAgICAgICBzcGxpdHRlZCB3aXRoICJzaGxleCIsIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ldyBzeXMuYXJndi4KLQlIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmUgcHJlc2VydmVkLgotCSJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuCisgICAgICAgIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zIGFyZSBwcmVzZXJ2ZWQuCisgICAgICAgICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuCiAKIGMob250KGludWUpKQogICAgICAgICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC4KZGlmZiAtLWdpdCBhL0xpYi9wZGIucHkgYi9MaWIvcGRiLnB5CmluZGV4IDY4M2FiYjkuLmE2MTA5ZDQgMTAwNzU1Ci0tLSBhL0xpYi9wZGIucHkKKysrIGIvTGliL3BkYi5weQpAQCAtNTgsOCArNTgsOCBAQAogCiBjbGFzcyBQZGIoYmRiLkJkYiwgY21kLkNtZCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tcGxldGVrZXk9J3RhYicsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lKToKLSAgICAgICAgYmRiLkJkYi5fX2luaXRfXyhzZWxmKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21wbGV0ZWtleT0ndGFiJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSk6CisgICAgICAgIGJkYi5CZGIuX19pbml0X18oc2VsZiwgc2tpcD1za2lwKQogICAgICAgICBjbWQuQ21kLl9faW5pdF9fKHNlbGYsIGNvbXBsZXRla2V5LCBzdGRpbiwgc3Rkb3V0KQogICAgICAgICBpZiBzdGRvdXQ6CiAgICAgICAgICAgICBzZWxmLnVzZV9yYXdpbnB1dCA9IDAKQEAgLTk1LDEwICs5NSwxNCBAQAogICAgICAgICAgICAgcmNGaWxlLmNsb3NlKCkKIAogICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30gIyBhc3NvY2lhdGVzIGEgY29tbWFuZCBsaXN0IHRvIGJyZWFrcG9pbnQgbnVtYmVycwotICAgICAgICBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0ID0ge30gIyBmb3IgZWFjaCBicCBudW0sIHRlbGxzIGlmIHRoZSBwcm9tcHQgbXVzdCBiZSBkaXNwLiBhZnRlciBleGVjaW5nIHRoZSBjbWQgbGlzdAotICAgICAgICBzZWxmLmNvbW1hbmRzX3NpbGVudCA9IHt9ICMgZm9yIGVhY2ggYnAgbnVtLCB0ZWxscyBpZiB0aGUgc3RhY2sgdHJhY2UgbXVzdCBiZSBkaXNwLiBhZnRlciBleGVjaW5nIHRoZSBjbWQgbGlzdAotICAgICAgICBzZWxmLmNvbW1hbmRzX2RlZmluaW5nID0gRmFsc2UgIyBUcnVlIHdoaWxlIGluIHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGEgY29tbWFuZCBsaXN0Ci0gICAgICAgIHNlbGYuY29tbWFuZHNfYm51bSA9IE5vbmUgIyBUaGUgYnJlYWtwb2ludCBudW1iZXIgZm9yIHdoaWNoIHdlIGFyZSBkZWZpbmluZyBhIGxpc3QKKyAgICAgICAgc2VsZi5jb21tYW5kc19kb3Byb21wdCA9IHt9ICMgZm9yIGVhY2ggYnAgbnVtLCB0ZWxscyBpZiB0aGUgcHJvbXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG11c3QgYmUgZGlzcC4gYWZ0ZXIgZXhlY2luZyB0aGUgY21kIGxpc3QKKyAgICAgICAgc2VsZi5jb21tYW5kc19zaWxlbnQgPSB7fSAjIGZvciBlYWNoIGJwIG51bSwgdGVsbHMgaWYgdGhlIHN0YWNrIHRyYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtdXN0IGJlIGRpc3AuIGFmdGVyIGV4ZWNpbmcgdGhlIGNtZCBsaXN0CisgICAgICAgIHNlbGYuY29tbWFuZHNfZGVmaW5pbmcgPSBGYWxzZSAjIFRydWUgd2hpbGUgaW4gdGhlIHByb2Nlc3Mgb2YgZGVmaW5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBjb21tYW5kIGxpc3QKKyAgICAgICAgc2VsZi5jb21tYW5kc19ibnVtID0gTm9uZSAjIFRoZSBicmVha3BvaW50IG51bWJlciBmb3Igd2hpY2ggd2UgYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWZpbmluZyBhIGxpc3QKIAogICAgIGRlZiByZXNldChzZWxmKToKICAgICAgICAgYmRiLkJkYi5yZXNldChzZWxmKQpAQCAtMTE0LDYgKzExOCwxMCBAQAogICAgICAgICBzZWxmLmZvcmdldCgpCiAgICAgICAgIHNlbGYuc3RhY2ssIHNlbGYuY3VyaW5kZXggPSBzZWxmLmdldF9zdGFjayhmLCB0KQogICAgICAgICBzZWxmLmN1cmZyYW1lID0gc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XVswXQorICAgICAgICAjIFRoZSBmX2xvY2FscyBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQgZnJvbSB0aGUgYWN0dWFsIGZyYW1lCisgICAgICAgICMgbG9jYWxzIHdoZW5ldmVyIHRoZSAuZl9sb2NhbHMgYWNjZXNzb3IgaXMgY2FsbGVkLCBzbyB3ZQorICAgICAgICAjIGNhY2hlIGl0IGhlcmUgdG8gZW5zdXJlIHRoYXQgbW9kaWZpY2F0aW9ucyBhcmUgbm90IG92ZXJ3cml0dGVuLgorICAgICAgICBzZWxmLmN1cmZyYW1lX2xvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKICAgICAgICAgc2VsZi5leGVjUmNMaW5lcygpCiAKICAgICAjIENhbiBiZSBleGVjdXRlZCBlYXJsaWVyIHRoYW4gJ3NldHVwJyBpZiBkZXNpcmVkCkBAIC0xNTAsMTAgKzE1OCwxNCBAQAogICAgICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgTm9uZSkKIAogICAgIGRlZiBicF9jb21tYW5kcyhzZWxmLGZyYW1lKToKLSAgICAgICAgIiIiIENhbGwgZXZlcnkgY29tbWFuZCB0aGF0IHdhcyBzZXQgZm9yIHRoZSBjdXJyZW50IGFjdGl2ZSBicmVha3BvaW50IChpZiB0aGVyZSBpcyBvbmUpCi0gICAgICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgbm9ybWFsIGludGVyYWN0aW9uIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkLCBGYWxzZSBvdGhlcndpc2UgIiIiCi0gICAgICAgICNzZWxmLmN1cnJlbnRicCBpcyBzZXQgaW4gYmRiLnB5IGluIGJkYi5icmVha19oZXJlIGlmIGEgYnJlYWtwb2ludCB3YXMgaGl0Ci0gICAgICAgIGlmIGdldGF0dHIoc2VsZiwiY3VycmVudGJwIixGYWxzZSkgYW5kIHNlbGYuY3VycmVudGJwIGluIHNlbGYuY29tbWFuZHM6CisgICAgICAgICIiIkNhbGwgZXZlcnkgY29tbWFuZCB0aGF0IHdhcyBzZXQgZm9yIHRoZSBjdXJyZW50IGFjdGl2ZSBicmVha3BvaW50CisgICAgICAgIChpZiB0aGVyZSBpcyBvbmUpLgorCisgICAgICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgbm9ybWFsIGludGVyYWN0aW9uIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkLAorICAgICAgICBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgICAgICMgc2VsZi5jdXJyZW50YnAgaXMgc2V0IGluIGJkYiBpbiBCZGIuYnJlYWtfaGVyZSBpZiBhIGJyZWFrcG9pbnQgd2FzIGhpdAorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICJjdXJyZW50YnAiLCBGYWxzZSkgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuY3VycmVudGJwIGluIHNlbGYuY29tbWFuZHM6CiAgICAgICAgICAgICBjdXJyZW50YnAgPSBzZWxmLmN1cnJlbnRicAogICAgICAgICAgICAgc2VsZi5jdXJyZW50YnAgPSAwCiAgICAgICAgICAgICBsYXN0Y21kX2JhY2sgPSBzZWxmLmxhc3RjbWQKQEAgLTIwOCw3ICsyMjAsNyBAQAogCiAgICAgZGVmIGRlZmF1bHQoc2VsZiwgbGluZSk6CiAgICAgICAgIGlmIGxpbmVbOjFdID09ICchJzogbGluZSA9IGxpbmVbMTpdCi0gICAgICAgIGxvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKKyAgICAgICAgbG9jYWxzID0gc2VsZi5jdXJmcmFtZV9sb2NhbHMKICAgICAgICAgZ2xvYmFscyA9IHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUgKyAnXG4nLCAnPHN0ZGluPicsICdzaW5nbGUnKQpAQCAtMjg5LDcgKzMwMSw4IEBACiAgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLCAnZG9fJyArIGNtZCkKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgZnVuYyA9IHNlbGYuZGVmYXVsdAotICAgICAgICBpZiBmdW5jLmZ1bmNfbmFtZSBpbiBzZWxmLmNvbW1hbmRzX3Jlc3VtaW5nIDogIyBvbmUgb2YgdGhlIHJlc3VtaW5nIGNvbW1hbmRzLgorICAgICAgICAjIG9uZSBvZiB0aGUgcmVzdW1pbmcgY29tbWFuZHMKKyAgICAgICAgaWYgZnVuYy5mdW5jX25hbWUgaW4gc2VsZi5jb21tYW5kc19yZXN1bWluZzoKICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfZG9wcm9tcHRbc2VsZi5jb21tYW5kc19ibnVtXSA9IEZhbHNlCiAgICAgICAgICAgICBzZWxmLmNtZHF1ZXVlID0gW10KICAgICAgICAgICAgIHJldHVybiAxCkBAIC0zMDIsMTUgKzMxNSwxOCBAQAogICAgIGRvX2ggPSBjbWQuQ21kLmRvX2hlbHAKIAogICAgIGRlZiBkb19jb21tYW5kcyhzZWxmLCBhcmcpOgotICAgICAgICAiIiJEZWZpbmVzIGEgbGlzdCBvZiBjb21tYW5kcyBhc3NvY2lhdGVkIHRvIGEgYnJlYWtwb2ludAotICAgICAgICBUaG9zZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkIHdoZW5ldmVyIHRoZSBicmVha3BvaW50IGNhdXNlcyB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbi4iIiIKKyAgICAgICAgIiIiRGVmaW5lcyBhIGxpc3Qgb2YgY29tbWFuZHMgYXNzb2NpYXRlZCB0byBhIGJyZWFrcG9pbnQuCisKKyAgICAgICAgVGhvc2UgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZCB3aGVuZXZlciB0aGUgYnJlYWtwb2ludCBjYXVzZXMKKyAgICAgICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24uIiIiCiAgICAgICAgIGlmIG5vdCBhcmc6CiAgICAgICAgICAgICBibnVtID0gbGVuKGJkYi5CcmVha3BvaW50LmJwYnludW1iZXIpLTEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBibnVtID0gaW50KGFyZykKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiVXNhZ2UgOiBjb21tYW5kcyBbYm51bV1cbiAgICAgICAgLi4uXG4gICAgICAgIGVuZCIKKyAgICAgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiVXNhZ2UgOiBjb21tYW5kcyBbYm51bV1cbiAgICAgICAgLi4uIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgICAgICBlbmQiCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY29tbWFuZHNfYm51bSA9IGJudW0KICAgICAgICAgc2VsZi5jb21tYW5kc1tibnVtXSA9IFtdCkBAIC0zNzAsNyArMzg2LDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMgPSBldmFsKGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWVfbG9jYWxzKQogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGFyZwogICAgICAgICAgICAgICAgIHRyeToKQEAgLTYyMSw2ICs2MzcsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jdXJpbmRleCA9IHNlbGYuY3VyaW5kZXggLSAxCiAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lID0gc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XVswXQorICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMgPSBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzCiAgICAgICAgICAgICBzZWxmLnByaW50X3N0YWNrX2VudHJ5KHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0pCiAgICAgICAgICAgICBzZWxmLmxpbmVubyA9IE5vbmUKICAgICBkb191ID0gZG9fdXAKQEAgLTYzMSw2ICs2NDgsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jdXJpbmRleCA9IHNlbGYuY3VyaW5kZXggKyAxCiAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lID0gc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XVswXQorICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMgPSBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzCiAgICAgICAgICAgICBzZWxmLnByaW50X3N0YWNrX2VudHJ5KHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0pCiAgICAgICAgICAgICBzZWxmLmxpbmVubyA9IE5vbmUKICAgICBkb19kID0gZG9fZG93bgpAQCAtNjUxLDggKzY2OSw4IEBACiAgICAgZG9fbiA9IGRvX25leHQKIAogICAgIGRlZiBkb19ydW4oc2VsZiwgYXJnKToKLSAgICAgICAgIiIiUmVzdGFydCBwcm9ncmFtIGJ5IHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRvIGJlIGNhdWdodCBpbiB0aGUgbWFpbiBkZWJ1Z2dlcgotICAgICAgICBsb29wLiBJZiBhcmd1bWVudHMgd2VyZSBnaXZlbiwgc2V0IHRoZW0gaW4gc3lzLmFyZ3YuIiIiCisgICAgICAgICIiIlJlc3RhcnQgcHJvZ3JhbSBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbiB0byBiZSBjYXVnaHQgaW4gdGhlIG1haW4KKyAgICAgICAgZGVidWdnZXIgbG9vcC4gIElmIGFyZ3VtZW50cyB3ZXJlIGdpdmVuLCBzZXQgdGhlbSBpbiBzeXMuYXJndi4iIiIKICAgICAgICAgaWYgYXJnOgogICAgICAgICAgICAgaW1wb3J0IHNobGV4CiAgICAgICAgICAgICBhcmd2MCA9IHN5cy5hcmd2WzA6MV0KQEAgLTY5NCw3ICs3MTIsNyBAQAogICAgIGRlZiBkb19kZWJ1ZyhzZWxmLCBhcmcpOgogICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKICAgICAgICAgZ2xvYmFscyA9IHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzCi0gICAgICAgIGxvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKKyAgICAgICAgbG9jYWxzID0gc2VsZi5jdXJmcmFtZV9sb2NhbHMKICAgICAgICAgcCA9IFBkYihzZWxmLmNvbXBsZXRla2V5LCBzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCkKICAgICAgICAgcC5wcm9tcHQgPSAiKCVzKSAiICUgc2VsZi5wcm9tcHQuc3RyaXAoKQogICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiRU5URVJJTkcgUkVDVVJTSVZFIERFQlVHR0VSIgpAQCAtNzE4LDkgKzczNiw4IEBACiAgICAgICAgIHJldHVybiAxCiAKICAgICBkZWYgZG9fYXJncyhzZWxmLCBhcmcpOgotICAgICAgICBmID0gc2VsZi5jdXJmcmFtZQotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGRpY3QgPSBmLmZfbG9jYWxzCisgICAgICAgIGNvID0gc2VsZi5jdXJmcmFtZS5mX2NvZGUKKyAgICAgICAgZGljdCA9IHNlbGYuY3VyZnJhbWVfbG9jYWxzCiAgICAgICAgIG4gPSBjby5jb19hcmdjb3VudAogICAgICAgICBpZiBjby5jb19mbGFncyAmIDQ6IG4gPSBuKzEKICAgICAgICAgaWYgY28uY29fZmxhZ3MgJiA4OiBuID0gbisxCkBAIC03MzIsOCArNzQ5LDggQEAKICAgICBkb19hID0gZG9fYXJncwogCiAgICAgZGVmIGRvX3JldHZhbChzZWxmLCBhcmcpOgotICAgICAgICBpZiAnX19yZXR1cm5fXycgaW4gc2VsZi5jdXJmcmFtZS5mX2xvY2FsczoKLSAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsIHNlbGYuY3VyZnJhbWUuZl9sb2NhbHNbJ19fcmV0dXJuX18nXQorICAgICAgICBpZiAnX19yZXR1cm5fXycgaW4gc2VsZi5jdXJmcmFtZV9sb2NhbHM6CisgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCBzZWxmLmN1cmZyYW1lX2xvY2Fsc1snX19yZXR1cm5fXyddCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAnKioqIE5vdCB5ZXQgcmV0dXJuZWQhJwogICAgIGRvX3J2ID0gZG9fcmV0dmFsCkBAIC03NDEsNyArNzU4LDcgQEAKICAgICBkZWYgX2dldHZhbChzZWxmLCBhcmcpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gZXZhbChhcmcsIHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZS5mX2xvY2FscykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWVfbG9jYWxzKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICB0LCB2ID0gc3lzLmV4Y19pbmZvKClbOjJdCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHQsIHN0cik6CkBAIC03OTAsNyArODA3LDggQEAKICAgICAgICAgYnJlYWtsaXN0ID0gc2VsZi5nZXRfZmlsZV9icmVha3MoZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBsaW5lbm8gaW4gcmFuZ2UoZmlyc3QsIGxhc3QrMSk6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzKQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscykKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgJ1tFT0ZdJwogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtODEwLDcgKzgyOCw3IEBACiAgICAgZGVmIGRvX3doYXRpcyhzZWxmLCBhcmcpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGV2YWwoYXJnLCBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWVfbG9jYWxzKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICB0LCB2ID0gc3lzLmV4Y19pbmZvKClbOjJdCiAgICAgICAgICAgICBpZiB0eXBlKHQpID09IHR5cGUoJycpOgpAQCAtOTU0LDggKzk3Miw4IEBACiBicmVha3BvaW50IG51bWJlcnMuIiIiCiAKICAgICBkZWYgaGVscF90YnJlYWsoc2VsZik6Ci0gICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICIiInRicmVhayAgc2FtZSBhcmd1bWVudHMgYXMgYnJlYWssIGJ1dCBicmVha3BvaW50IGlzCi1yZW1vdmVkIHdoZW4gZmlyc3QgaGl0LiIiIgorICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAiIiJ0YnJlYWsgIHNhbWUgYXJndW1lbnRzIGFzIGJyZWFrLCBidXQgYnJlYWtwb2ludAoraXMgcmVtb3ZlZCB3aGVuIGZpcnN0IGhpdC4iIiIKIAogICAgIGRlZiBoZWxwX2VuYWJsZShzZWxmKToKICAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgIiIiZW5hYmxlIGJwbnVtYmVyIFticG51bWJlciAuLi5dCkBAIC0xMTAxLDcgKzExMTksNyBAQAogSGFuZGxlcyB0aGUgcmVjZWlwdCBvZiBFT0YgYXMgYSBjb21tYW5kLiIiIgogCiAgICAgZGVmIGhlbHBfYWxpYXMoc2VsZik6Ci0gICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsICIiImFsaWFzIFtuYW1lIFtjb21tYW5kIFtwYXJhbWV0ZXIgcGFyYW1ldGVyIC4uLl0gXV0KKyAgICAgICAgcHJpbnQgPj5zZWxmLnN0ZG91dCwgIiIiYWxpYXMgW25hbWUgW2NvbW1hbmQgW3BhcmFtZXRlciBwYXJhbWV0ZXIgLi4uXV1dCiBDcmVhdGVzIGFuIGFsaWFzIGNhbGxlZCAnbmFtZScgdGhlIGV4ZWN1dGVzICdjb21tYW5kJy4gIFRoZSBjb21tYW5kCiBtdXN0ICpub3QqIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4gIFJlcGxhY2VhYmxlIHBhcmFtZXRlcnMgYXJlCiBpbmRpY2F0ZWQgYnkgJTEsICUyLCBhbmQgc28gb24sIHdoaWxlICUqIGlzIHJlcGxhY2VkIGJ5IGFsbCB0aGUKQEAgLTEyODgsOCArMTMwNiw4IEBACiAKICAgICAjIE5vdGUgb24gc2F2aW5nL3Jlc3RvcmluZyBzeXMuYXJndjogaXQncyBhIGdvb2QgaWRlYSB3aGVuIHN5cy5hcmd2IHdhcwogICAgICMgbW9kaWZpZWQgYnkgdGhlIHNjcmlwdCBiZWluZyBkZWJ1Z2dlZC4gSXQncyBhIGJhZCBpZGVhIHdoZW4gaXQgd2FzCi0gICAgIyBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgaXMgYSAicmVzdGFydCIgY29tbWFuZCB3aGljaAotICAgICMgYWxsb3dzIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIGNoYW5nZWQgYnkgdGhlIHVzZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiBUaGVyZSBpcyBhICJyZXN0YXJ0IiBjb21tYW5kCisgICAgIyB3aGljaCBhbGxvd3MgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgogICAgIHBkYiA9IFBkYigpCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgdHJ5OgpAQCAtMTMxMCw3ICsxMzI4LDggQEAKICAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICdjb250JyBvciAnc3RlcCcgd2lsbCByZXN0YXJ0IHRoZSBwcm9ncmFtIgogICAgICAgICAgICAgdCA9IHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgICAgICBwZGIuaW50ZXJhY3Rpb24oTm9uZSwgdCkKLSAgICAgICAgICAgIHByaW50ICJQb3N0IG1vcnRlbSBkZWJ1Z2dlciBmaW5pc2hlZC4gVGhlICIrbWFpbnB5ZmlsZSsiIHdpbGwgYmUgcmVzdGFydGVkIgorICAgICAgICAgICAgcHJpbnQgIlBvc3QgbW9ydGVtIGRlYnVnZ2VyIGZpbmlzaGVkLiBUaGUgIiArIG1haW5weWZpbGUgKyBcCisgICAgICAgICAgICAgICAgICAiIHdpbGwgYmUgcmVzdGFydGVkIgogCiAKICMgV2hlbiBpbnZva2VkIGFzIG1haW4gcHJvZ3JhbSwgaW52b2tlIHRoZSBkZWJ1Z2dlciBvbiBhIHNjcmlwdApkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZS5weSBiL0xpYi9waWNrbGUucHkKaW5kZXggOTY2Nzc4MS4uOGM1ZDUxZiAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZS5weQorKysgYi9MaWIvcGlja2xlLnB5CkBAIC01MDEsNyArNTAxLDcgQEAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtVbmljb2RlVHlwZV0gPSBzYXZlX3VuaWNvZGUKIAotICAgIGlmIFN0cmluZ1R5cGUgPT0gVW5pY29kZVR5cGU6CisgICAgaWYgU3RyaW5nVHlwZSBpcyBVbmljb2RlVHlwZToKICAgICAgICAgIyBUaGlzIGlzIHRydWUgZm9yIEp5dGhvbgogICAgICAgICBkZWYgc2F2ZV9zdHJpbmcoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKICAgICAgICAgICAgIHVuaWNvZGUgPSBvYmouaXN1bmljb2RlKCkKQEAgLTEyMjEsNyArMTIyMSwxNSBAQAogICAgICAgICAgICAgc3RhdGUsIHNsb3RzdGF0ZSA9IHN0YXRlCiAgICAgICAgIGlmIHN0YXRlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGluc3QuX19kaWN0X18udXBkYXRlKHN0YXRlKQorICAgICAgICAgICAgICAgIGQgPSBpbnN0Ll9fZGljdF9fCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGF0ZS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRbaW50ZXJuKGspXSA9IHYKKyAgICAgICAgICAgICAgICAjIGtleXMgaW4gc3RhdGUgZG9uJ3QgaGF2ZSB0byBiZSBzdHJpbmdzCisgICAgICAgICAgICAgICAgIyBkb24ndCBibG93IHVwLCBidXQgZG9uJ3QgZ28gb3V0IG9mIG91ciB3YXkKKyAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBkLnVwZGF0ZShzdGF0ZSkKKwogICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgICAgICAjIFhYWCBJbiByZXN0cmljdGVkIGV4ZWN1dGlvbiwgdGhlIGluc3RhbmNlJ3MgX19kaWN0X18KICAgICAgICAgICAgICAgICAjIGlzIG5vdCBhY2Nlc3NpYmxlLiAgVXNlIHRoZSBvbGQgd2F5IG9mIHVucGlja2xpbmcKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCAwNjU0OThjLi5jZmVlZWNiIDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC0xMjE0LDEwICsxMjE0LDExIEBACiAgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdF0sCiAgICAgICBzdGFja19hZnRlcj1bcHl0dXBsZV0sCiAgICAgICBwcm90bz0yLAotICAgICAgZG9jPSIiIk9uZS10dXBsZS4KKyAgICAgIGRvYz0iIiJCdWlsZCBhIG9uZS10dXBsZSBvdXQgb2YgdGhlIHRvcG1vc3QgaXRlbSBvbiB0aGUgc3RhY2suCiAKICAgICAgIFRoaXMgY29kZSBwb3BzIG9uZSB2YWx1ZSBvZmYgdGhlIHN0YWNrIGFuZCBwdXNoZXMgYSB0dXBsZSBvZgotICAgICAgbGVuZ3RoIDEgd2hvc2Ugb25lIGl0ZW0gaXMgdGhhdCB2YWx1ZSBiYWNrIG9udG8gaXQuICBJT1c6CisgICAgICBsZW5ndGggMSB3aG9zZSBvbmUgaXRlbSBpcyB0aGF0IHZhbHVlIGJhY2sgb250byBpdC4gIEluIG90aGVyCisgICAgICB3b3JkczoKIAogICAgICAgICAgIHN0YWNrWy0xXSA9IHR1cGxlKHN0YWNrWy0xOl0pCiAgICAgICAiIiIpLApAQCAtMTIyOCwxMCArMTIyOSwxMSBAQAogICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3QsIGFueW9iamVjdF0sCiAgICAgICBzdGFja19hZnRlcj1bcHl0dXBsZV0sCiAgICAgICBwcm90bz0yLAotICAgICAgZG9jPSIiIk9uZS10dXBsZS4KKyAgICAgIGRvYz0iIiJCdWlsZCBhIHR3by10dXBsZSBvdXQgb2YgdGhlIHRvcCB0d28gaXRlbXMgb24gdGhlIHN0YWNrLgogCi0gICAgICBUaGlzIGNvZGUgcG9wcyB0d28gdmFsdWVzIG9mZiB0aGUgc3RhY2sgYW5kIHB1c2hlcyBhIHR1cGxlCi0gICAgICBvZiBsZW5ndGggMiB3aG9zZSBpdGVtcyBhcmUgdGhvc2UgdmFsdWVzIGJhY2sgb250byBpdC4gIElPVzoKKyAgICAgIFRoaXMgY29kZSBwb3BzIHR3byB2YWx1ZXMgb2ZmIHRoZSBzdGFjayBhbmQgcHVzaGVzIGEgdHVwbGUgb2YKKyAgICAgIGxlbmd0aCAyIHdob3NlIGl0ZW1zIGFyZSB0aG9zZSB2YWx1ZXMgYmFjayBvbnRvIGl0LiAgSW4gb3RoZXIKKyAgICAgIHdvcmRzOgogCiAgICAgICAgICAgc3RhY2tbLTI6XSA9IFt0dXBsZShzdGFja1stMjpdKV0KICAgICAgICIiIiksCkBAIC0xMjQyLDEwICsxMjQ0LDExIEBACiAgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdCwgYW55b2JqZWN0LCBhbnlvYmplY3RdLAogICAgICAgc3RhY2tfYWZ0ZXI9W3B5dHVwbGVdLAogICAgICAgcHJvdG89MiwKLSAgICAgIGRvYz0iIiJPbmUtdHVwbGUuCisgICAgICBkb2M9IiIiQnVpbGQgYSB0aHJlZS10dXBsZSBvdXQgb2YgdGhlIHRvcCB0aHJlZSBpdGVtcyBvbiB0aGUgc3RhY2suCiAKLSAgICAgIFRoaXMgY29kZSBwb3BzIHRocmVlIHZhbHVlcyBvZmYgdGhlIHN0YWNrIGFuZCBwdXNoZXMgYSB0dXBsZQotICAgICAgb2YgbGVuZ3RoIDMgd2hvc2UgaXRlbXMgYXJlIHRob3NlIHZhbHVlcyBiYWNrIG9udG8gaXQuICBJT1c6CisgICAgICBUaGlzIGNvZGUgcG9wcyB0aHJlZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjayBhbmQgcHVzaGVzIGEgdHVwbGUgb2YKKyAgICAgIGxlbmd0aCAzIHdob3NlIGl0ZW1zIGFyZSB0aG9zZSB2YWx1ZXMgYmFjayBvbnRvIGl0LiAgSW4gb3RoZXIKKyAgICAgIHdvcmRzOgogCiAgICAgICAgICAgc3RhY2tbLTM6XSA9IFt0dXBsZShzdGFja1stMzpdKV0KICAgICAgICIiIiksCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1hdGhlb3MvcmVnZW4gYi9MaWIvcGxhdC1hdGhlb3MvcmVnZW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtZnJlZWJzZDQvcmVnZW4gYi9MaWIvcGxhdC1mcmVlYnNkNC9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkNS9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q1L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWZyZWVic2Q2L3JlZ2VuIGIvTGliL3BsYXQtZnJlZWJzZDYvcmVnZW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtZnJlZWJzZDcvcmVnZW4gYi9MaWIvcGxhdC1mcmVlYnNkNy9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkOC9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q4L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0FMLnB5IGIvTGliL3BsYXQtaXJpeDUvQUwucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvQ0QucHkgYi9MaWIvcGxhdC1pcml4NS9DRC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9DTC5weSBiL0xpYi9wbGF0LWlyaXg1L0NMLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0NMX29sZC5weSBiL0xpYi9wbGF0LWlyaXg1L0NMX29sZC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9ERVZJQ0UucHkgYi9MaWIvcGxhdC1pcml4NS9ERVZJQ0UucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvRVJSTk8ucHkgYi9MaWIvcGxhdC1pcml4NS9FUlJOTy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9GSUxFLnB5IGIvTGliL3BsYXQtaXJpeDUvRklMRS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9GTC5weSBiL0xpYi9wbGF0LWlyaXg1L0ZMLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0dFVC5weSBiL0xpYi9wbGF0LWlyaXg1L0dFVC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9HTC5weSBiL0xpYi9wbGF0LWlyaXg1L0dMLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0dMV1MucHkgYi9MaWIvcGxhdC1pcml4NS9HTFdTLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L0lOLnB5IGIvTGliL3BsYXQtaXJpeDUvSU4ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvSU9DVEwucHkgYi9MaWIvcGxhdC1pcml4NS9JT0NUTC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9TVi5weSBiL0xpYi9wbGF0LWlyaXg1L1NWLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L1dBSVQucHkgYi9MaWIvcGxhdC1pcml4NS9XQUlULnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L2NkZGIucHkgYi9MaWIvcGxhdC1pcml4NS9jZGRiLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L2NkcGxheWVyLnB5IGIvTGliL3BsYXQtaXJpeDUvY2RwbGF5ZXIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvZmxwLmRvYyBiL0xpYi9wbGF0LWlyaXg1L2ZscC5kb2MKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvZmxwLnB5IGIvTGliL3BsYXQtaXJpeDUvZmxwLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L2pwZWcucHkgYi9MaWIvcGxhdC1pcml4NS9qcGVnLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWlyaXg1L3BhbmVsLnB5IGIvTGliL3BsYXQtaXJpeDUvcGFuZWwucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvcGFuZWxwYXJzZXIucHkgYi9MaWIvcGxhdC1pcml4NS9wYW5lbHBhcnNlci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9yZWFkY2QuZG9jIGIvTGliL3BsYXQtaXJpeDUvcmVhZGNkLmRvYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1pcml4NS9yZWFkY2QucHkgYi9MaWIvcGxhdC1pcml4NS9yZWFkY2QucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtaXJpeDUvdG9yZ2IucHkgYi9MaWIvcGxhdC1pcml4NS90b3JnYi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NHLnB5IGIvTGliL3BsYXQtbWFjL0NhcmJvbi9DRy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NhcmJvbkV2ZW50cy5weSBiL0xpYi9wbGF0LW1hYy9DYXJib24vQ2FyYm9uRXZlbnRzLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9DYXJib24vQ2FyYm9uRXZ0LnB5IGIvTGliL3BsYXQtbWFjL0NhcmJvbi9DYXJib25FdnQucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL0NhcmJvbi9Db3JlR3JhcGhpY3MucHkgYi9MaWIvcGxhdC1tYWMvQ2FyYm9uL0NvcmVHcmFwaGljcy5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvQ2FyYm9uL19faW5pdF9fLnB5IGIvTGliL3BsYXQtbWFjL0NhcmJvbi9fX2luaXRfXy5weQppbmRleCA2NzM5YmJkLi4zN2E5YWUzIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvQ2FyYm9uL19faW5pdF9fLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9DYXJib24vX19pbml0X18ucHkKQEAgLTQsNCArNCw0IEBACiB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsIEZ1dHVyZVdhcm5pbmcsICIuKk1hY1RleHRFZGl0b3IiKQogCiBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotd2FybnB5M2soIkluIDMueCwgQ2FyYm9uIGlzIHJlbW92ZWQuIiwgc3RhY2tsZXZlbD0yKQord2FybnB5M2soIkluIDMueCwgdGhlIENhcmJvbiBwYWNrYWdlIGlzIHJlbW92ZWQuIiwgc3RhY2tsZXZlbD0yKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL0Vhc3lEaWFsb2dzLnB5IGIvTGliL3BsYXQtbWFjL0Vhc3lEaWFsb2dzLnB5CmluZGV4IGJkMDk3YmQuLjEyOWNmMmMgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9FYXN5RGlhbG9ncy5weQorKysgYi9MaWIvcGxhdC1tYWMvRWFzeURpYWxvZ3MucHkKQEAgLTU4MCw5ICs1ODAsOSBAQAogICAgICAgICBpZiBhcmdzW2tdIGlzIE5vbmU6CiAgICAgICAgICAgICBkZWwgYXJnc1trXQogICAgICMgU2V0IHNvbWUgZGVmYXVsdHMsIGFuZCBtb2RpZnkgc29tZSBhcmd1bWVudHMKLSAgICBpZiBub3QgYXJncy5oYXNfa2V5KCdkaWFsb2dPcHRpb25GbGFncycpOgorICAgIGlmICdkaWFsb2dPcHRpb25GbGFncycgbm90IGluIGFyZ3M6CiAgICAgICAgIGFyZ3NbJ2RpYWxvZ09wdGlvbkZsYWdzJ10gPSBkZnRmbGFncwotICAgIGlmIGFyZ3MuaGFzX2tleSgnZGVmYXVsdExvY2F0aW9uJykgYW5kIFwKKyAgICBpZiAnZGVmYXVsdExvY2F0aW9uJyBpbiBhcmdzIGFuZCBcCiAgICAgICAgICAgICBub3QgaXNpbnN0YW5jZShhcmdzWydkZWZhdWx0TG9jYXRpb24nXSwgQ2FyYm9uLkFFLkFFRGVzYyk6CiAgICAgICAgIGRlZmF1bHRMb2NhdGlvbiA9IGFyZ3NbJ2RlZmF1bHRMb2NhdGlvbiddCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGVmYXVsdExvY2F0aW9uLCBDYXJib24uRmlsZS5GU1NwZWMpOgpAQCAtNTkzLDcgKzU5Myw3IEBACiAgICAgICAgICAgICAgICAgZGVmYXVsdExvY2F0aW9uID0gQ2FyYm9uLkZpbGUuRlNSZWYoZGVmYXVsdExvY2F0aW9uKQogICAgICAgICAgICAgYXJnc1snZGVmYXVsdExvY2F0aW9uJ10gPSBDYXJib24uQUUuQUVDcmVhdGVEZXNjKAogICAgICAgICAgICAgICAgICAgICBDYXJib24uQXBwbGVFdmVudHMudHlwZUZTUmVmLCBkZWZhdWx0TG9jYXRpb24uZGF0YSkKLSAgICBpZiBhcmdzLmhhc19rZXkoJ3R5cGVMaXN0JykgYW5kIG5vdCBpc2luc3RhbmNlKGFyZ3NbJ3R5cGVMaXN0J10sIENhcmJvbi5SZXMuUmVzb3VyY2VUeXBlKToKKyAgICBpZiAndHlwZUxpc3QnIGluIGFyZ3MgYW5kIG5vdCBpc2luc3RhbmNlKGFyZ3NbJ3R5cGVMaXN0J10sIENhcmJvbi5SZXMuUmVzb3VyY2VUeXBlKToKICAgICAgICAgdHlwZUxpc3QgPSBhcmdzWyd0eXBlTGlzdCddWzpdCiAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgT1NYIHR5cGVsZXNzIGZpbGVzOgogICAgICAgICBpZiAnVEVYVCcgaW4gdHlwZUxpc3QgYW5kIG5vdCAnXDBcMFwwXDAnIGluIHR5cGVMaXN0OgpAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICAgICAgICBkYXRhID0gZGF0YSt0eXBlCiAgICAgICAgIGFyZ3NbJ3R5cGVMaXN0J10gPSBDYXJib24uUmVzLkhhbmRsZShkYXRhKQogICAgIHRwd2FudGVkID0gc3RyCi0gICAgaWYgYXJncy5oYXNfa2V5KCd3YW50ZWQnKToKKyAgICBpZiAnd2FudGVkJyBpbiBhcmdzOgogICAgICAgICB0cHdhbnRlZCA9IGFyZ3NbJ3dhbnRlZCddCiAgICAgICAgIGRlbCBhcmdzWyd3YW50ZWQnXQogICAgIHJldHVybiBhcmdzLCB0cHdhbnRlZApAQCAtNzIxLDE2ICs3MjEsMTMgQEAKICAgICBpZiBpc3N1YmNsYXNzKHRwd2FudGVkLCBDYXJib24uRmlsZS5GU1NwZWMpOgogICAgICAgICByZXR1cm4gdHB3YW50ZWQocnIuc2VsZWN0aW9uWzBdKQogICAgIGlmIGlzc3ViY2xhc3ModHB3YW50ZWQsIChzdHIsIHVuaWNvZGUpKToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgICAgICAgICAgZnVsbHBhdGggPSByci5zZWxlY3Rpb25bMF0uYXNfcGF0aG5hbWUoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBUaGlzIGlzIGdyb3NzLCBhbmQgcHJvYmFibHkgaW5jb3JyZWN0IHRvbwotICAgICAgICAgICAgdnJlZm51bSwgZGlyaWQsIG5hbWUgPSByci5zZWxlY3Rpb25bMF0uYXNfdHVwbGUoKQotICAgICAgICAgICAgcGFyZGlyX2ZzcyA9IENhcmJvbi5GaWxlLkZTU3BlYygodnJlZm51bSwgZGlyaWQsICcnKSkKLSAgICAgICAgICAgIHBhcmRpcl9mc3IgPSBDYXJib24uRmlsZS5GU1JlZihwYXJkaXJfZnNzKQotICAgICAgICAgICAgcGFyZGlyX3BhdGggPSBwYXJkaXJfZnNyLkZTUmVmTWFrZVBhdGgoKSAgIyBUaGlzIGlzIHV0Zi04Ci0gICAgICAgICAgICBuYW1lX3V0ZjggPSB1bmljb2RlKG5hbWUsICdtYWNyb21hbicpLmVuY29kZSgndXRmOCcpCi0gICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguam9pbihwYXJkaXJfcGF0aCwgbmFtZV91dGY4KQorICAgICAgICAjIFRoaXMgaXMgZ3Jvc3MsIGFuZCBwcm9iYWJseSBpbmNvcnJlY3QgdG9vCisgICAgICAgIHZyZWZudW0sIGRpcmlkLCBuYW1lID0gcnIuc2VsZWN0aW9uWzBdLmFzX3R1cGxlKCkKKyAgICAgICAgcGFyZGlyX2ZzcyA9IENhcmJvbi5GaWxlLkZTU3BlYygodnJlZm51bSwgZGlyaWQsICcnKSkKKyAgICAgICAgcGFyZGlyX2ZzciA9IENhcmJvbi5GaWxlLkZTUmVmKHBhcmRpcl9mc3MpCisgICAgICAgIHBhcmRpcl9wYXRoID0gcGFyZGlyX2Zzci5GU1JlZk1ha2VQYXRoKCkgICMgVGhpcyBpcyB1dGYtOAorICAgICAgICBuYW1lX3V0ZjggPSB1bmljb2RlKG5hbWUsICdtYWNyb21hbicpLmVuY29kZSgndXRmOCcpCisgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHBhcmRpcl9wYXRoLCBuYW1lX3V0ZjgpCiAgICAgICAgIGlmIGlzc3ViY2xhc3ModHB3YW50ZWQsIHVuaWNvZGUpOgogICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGUoZnVsbHBhdGgsICd1dGY4JykKICAgICAgICAgcmV0dXJuIHRwd2FudGVkKGZ1bGxwYXRoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL0ZyYW1lV29yay5weSBiL0xpYi9wbGF0LW1hYy9GcmFtZVdvcmsucHkKaW5kZXggNjk0MDFkZC4uY2E4YWFhNiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL0ZyYW1lV29yay5weQorKysgYi9MaWIvcGxhdC1tYWMvRnJhbWVXb3JrLnB5CkBAIC0yMTksNyArMjE5LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZG9fZGlhbG9nZXZlbnQoZXZlbnQpOgogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAod2hhdCwgbWVzc2FnZSwgd2hlbiwgd2hlcmUsIG1vZGlmaWVycykgPSBldmVudAotICAgICAgICBpZiBldmVudG5hbWUuaGFzX2tleSh3aGF0KToKKyAgICAgICAgaWYgd2hhdCBpbiBldmVudG5hbWU6CiAgICAgICAgICAgICBuYW1lID0gImRvXyIgKyBldmVudG5hbWVbd2hhdF0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG5hbWUgPSAiZG9fJWQiICUgd2hhdApAQCAtMjUwLDcgKzI1MCw3IEBACiAgICAgICAgIGdvdG9uZSwgZGxnLCBpdGVtID0gRGlhbG9nU2VsZWN0KGV2ZW50KQogICAgICAgICBpZiBnb3RvbmU6CiAgICAgICAgICAgICB3aW5kb3cgPSBkbGcuR2V0RGlhbG9nV2luZG93KCkKLSAgICAgICAgICAgIGlmIHNlbGYuX3dpbmRvd3MuaGFzX2tleSh3aW5kb3cpOgorICAgICAgICAgICAgaWYgd2luZG93IGluIHNlbGYuX3dpbmRvd3M6CiAgICAgICAgICAgICAgICAgc2VsZi5fd2luZG93c1t3aW5kb3ddLmRvX2l0ZW1oaXQoaXRlbSwgZXZlbnQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50ICdEaWFsb2cgZXZlbnQgZm9yIHVua25vd24gZGlhbG9nJwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICMKICAgICAgICAgIyBGaW5kIHRoZSBjb3JyZWN0IG5hbWUuCiAgICAgICAgICMKLSAgICAgICAgaWYgcGFydG5hbWUuaGFzX2tleShwYXJ0Y29kZSk6CisgICAgICAgIGlmIHBhcnRjb2RlIGluIHBhcnRuYW1lOgogICAgICAgICAgICAgbmFtZSA9ICJkb18iICsgcGFydG5hbWVbcGFydGNvZGVdCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBuYW1lID0gImRvXyVkIiAlIHBhcnRjb2RlCkBAIC0yNzksNyArMjc5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKE1hY09TLCAnSGFuZGxlRXZlbnQnKToKICAgICAgICAgICAgICAgICAgICAgTWFjT1MuSGFuZGxlRXZlbnQoZXZlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgc2VsZi5fd2luZG93cy5oYXNfa2V5KHdpZCk6CisgICAgICAgIGVsaWYgd2lkIGluIHNlbGYuX3dpbmRvd3M6CiAgICAgICAgICAgICAjIEl0IGlzIGEgd2luZG93LiBIYW5kIG9mZiB0byBjb3JyZWN0IHdpbmRvdy4KICAgICAgICAgICAgIHdpbmRvdyA9IHNlbGYuX3dpbmRvd3Nbd2lkXQogICAgICAgICAgICAgdHJ5OgpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFNlZSB3aGV0aGVyIHRoZSBmcm9udCB3aW5kb3cgd2FudHMgaXQKICAgICAgICAgICAgIHcgPSBNeUZyb250V2luZG93KCkKLSAgICAgICAgICAgIGlmIHcgYW5kIHNlbGYuX3dpbmRvd3MuaGFzX2tleSh3KToKKyAgICAgICAgICAgIGlmIHcgYW5kIHcgaW4gc2VsZi5fd2luZG93czoKICAgICAgICAgICAgICAgICB3aW5kb3cgPSBzZWxmLl93aW5kb3dzW3ddCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkb19jaGFyID0gd2luZG93LmRvX2NoYXIKQEAgLTM4MSw3ICszODEsNyBAQAogICAgIGRlZiBkb191cGRhdGVFdnQoc2VsZiwgZXZlbnQpOgogICAgICAgICAod2hhdCwgbWVzc2FnZSwgd2hlbiwgd2hlcmUsIG1vZGlmaWVycykgPSBldmVudAogICAgICAgICB3aWQgPSBXaGljaFdpbmRvdyhtZXNzYWdlKQotICAgICAgICBpZiB3aWQgYW5kIHNlbGYuX3dpbmRvd3MuaGFzX2tleSh3aWQpOgorICAgICAgICBpZiB3aWQgYW5kIHdpZCBpbiBzZWxmLl93aW5kb3dzOgogICAgICAgICAgICAgd2luZG93ID0gc2VsZi5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICB3aW5kb3cuZG9fcmF3dXBkYXRlKHdpZCwgZXZlbnQpCiAgICAgICAgIGVsc2U6CkBAIC0zOTEsNyArMzkxLDcgQEAKICAgICBkZWYgZG9fYWN0aXZhdGVFdnQoc2VsZiwgZXZlbnQpOgogICAgICAgICAod2hhdCwgbWVzc2FnZSwgd2hlbiwgd2hlcmUsIG1vZGlmaWVycykgPSBldmVudAogICAgICAgICB3aWQgPSBXaGljaFdpbmRvdyhtZXNzYWdlKQotICAgICAgICBpZiB3aWQgYW5kIHNlbGYuX3dpbmRvd3MuaGFzX2tleSh3aWQpOgorICAgICAgICBpZiB3aWQgYW5kIHdpZCBpbiBzZWxmLl93aW5kb3dzOgogICAgICAgICAgICAgd2luZG93ID0gc2VsZi5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICB3aW5kb3cuZG9fYWN0aXZhdGUobW9kaWZpZXJzICYgMSwgZXZlbnQpCiAgICAgICAgIGVsc2U6CkBAIC00MTEsNyArNDExLDcgQEAKICAgICBkZWYgZG9fc3VzcGVuZHJlc3VtZShzZWxmLCBldmVudCk6CiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50CiAgICAgICAgIHdpZCA9IE15RnJvbnRXaW5kb3coKQotICAgICAgICBpZiB3aWQgYW5kIHNlbGYuX3dpbmRvd3MuaGFzX2tleSh3aWQpOgorICAgICAgICBpZiB3aWQgYW5kIHdpZCBpbiBzZWxmLl93aW5kb3dzOgogICAgICAgICAgICAgd2luZG93ID0gc2VsZi5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICB3aW5kb3cuZG9fYWN0aXZhdGUobWVzc2FnZSAmIDEsIGV2ZW50KQogCkBAIC00MzUsNyArNDM1LDcgQEAKICAgICBkZWYgcHJpbnRldmVudChzZWxmLCBldmVudCk6CiAgICAgICAgICh3aGF0LCBtZXNzYWdlLCB3aGVuLCB3aGVyZSwgbW9kaWZpZXJzKSA9IGV2ZW50CiAgICAgICAgIG5pY2V3aGF0ID0gcmVwcih3aGF0KQotICAgICAgICBpZiBldmVudG5hbWUuaGFzX2tleSh3aGF0KToKKyAgICAgICAgaWYgd2hhdCBpbiBldmVudG5hbWU6CiAgICAgICAgICAgICBuaWNld2hhdCA9IGV2ZW50bmFtZVt3aGF0XQogICAgICAgICBwcmludCBuaWNld2hhdCwKICAgICAgICAgaWYgd2hhdCA9PSBrSGlnaExldmVsRXZlbnQ6CkBAIC01MTUsNyArNTE1LDcgQEAKICAgICAgICAgICAgICAgICBsYWJlbCwgc2hvcnRjdXQsIGNhbGxiYWNrLCBraW5kID0gbWVudS5pdGVtc1tpXQogICAgICAgICAgICAgICAgIGlmIHR5cGUoY2FsbGJhY2spID09IHR5cGVzLlN0cmluZ1R5cGU6CiAgICAgICAgICAgICAgICAgICAgIHdpZCA9IE15RnJvbnRXaW5kb3coKQotICAgICAgICAgICAgICAgICAgICBpZiB3aWQgYW5kIHNlbGYucGFyZW50Ll93aW5kb3dzLmhhc19rZXkod2lkKToKKyAgICAgICAgICAgICAgICAgICAgaWYgd2lkIGFuZCB3aWQgaW4gc2VsZi5wYXJlbnQuX3dpbmRvd3M6CiAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cgPSBzZWxmLnBhcmVudC5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHdpbmRvdywgImRvbWVudV8iICsgY2FsbGJhY2spOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUubWVudS5FbmFibGVNZW51SXRlbShpICsgMSkKQEAgLTUzMSw3ICs1MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgZGlzcGF0Y2goc2VsZiwgaWQsIGl0ZW0sIHdpbmRvdywgZXZlbnQpOgotICAgICAgICBpZiBzZWxmLm1lbnVzLmhhc19rZXkoaWQpOgorICAgICAgICBpZiBpZCBpbiBzZWxmLm1lbnVzOgogICAgICAgICAgICAgc2VsZi5tZW51c1tpZF0uZGlzcGF0Y2goaWQsIGl0ZW0sIHdpbmRvdywgZXZlbnQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBERUJVRzogcHJpbnQgIk1lbnVCYXIuZGlzcGF0Y2goJWQsICVkLCAlcywgJXMpIiAlIFwKQEAgLTYwNSwxMiArNjA1LDEyIEBACiAgICAgZGVmIGRpc3BhdGNoKHNlbGYsIGlkLCBpdGVtLCB3aW5kb3csIGV2ZW50KToKICAgICAgICAgdGl0bGUsIHNob3J0Y3V0LCBjYWxsYmFjaywgbXR5cGUgPSBzZWxmLml0ZW1zW2l0ZW0tMV0KICAgICAgICAgaWYgY2FsbGJhY2s6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5iYXIucGFyZW50IG9yIHR5cGUoY2FsbGJhY2spIDw+IHR5cGVzLlN0cmluZ1R5cGU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5iYXIucGFyZW50IG9yIHR5cGUoY2FsbGJhY2spICE9IHR5cGVzLlN0cmluZ1R5cGU6CiAgICAgICAgICAgICAgICAgbWVudWhhbmRsZXIgPSBjYWxsYmFjawogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIGlzIHN0cmluZwogICAgICAgICAgICAgICAgIHdpZCA9IE15RnJvbnRXaW5kb3coKQotICAgICAgICAgICAgICAgIGlmIHdpZCBhbmQgc2VsZi5iYXIucGFyZW50Ll93aW5kb3dzLmhhc19rZXkod2lkKToKKyAgICAgICAgICAgICAgICBpZiB3aWQgYW5kIHdpZCBpbiBzZWxmLmJhci5wYXJlbnQuX3dpbmRvd3M6CiAgICAgICAgICAgICAgICAgICAgIHdpbmRvdyA9IHNlbGYuYmFyLnBhcmVudC5fd2luZG93c1t3aWRdCiAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIod2luZG93LCAiZG9tZW51XyIgKyBjYWxsYmFjayk6CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW51aGFuZGxlciA9IGdldGF0dHIod2luZG93LCAiZG9tZW51XyIgKyBjYWxsYmFjaykKQEAgLTc1MSw3ICs3NTEsNyBAQAogICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogCiAgICAgZGVmIG9wZW4oc2VsZiwgYm91bmRzPSg0MCwgNDAsIDQwMCwgNDAwKSwgcmVzaWQ9Tm9uZSk6Ci0gICAgICAgIGlmIHJlc2lkIDw+IE5vbmU6CisgICAgICAgIGlmIHJlc2lkICE9IE5vbmU6CiAgICAgICAgICAgICBzZWxmLndpZCA9IEdldE5ld1dpbmRvdyhyZXNpZCwgLTEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndpZCA9IE5ld1dpbmRvdyhib3VuZHMsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAxLApAQCAtODI5LDcgKzgyOSw3IEBACiAgICAgICAgICMgSWYgd2UncmUgbm90IGZyb250bW9zdCwgc2VsZWN0IG91cnNlbHZlcyBhbmQgd2FpdCBmb3IKICAgICAgICAgIyB0aGUgYWN0aXZhdGUgZXZlbnQuCiAgICAgICAgICMKLSAgICAgICAgaWYgTXlGcm9udFdpbmRvdygpIDw+IHdpbmRvdzoKKyAgICAgICAgaWYgTXlGcm9udFdpbmRvdygpICE9IHdpbmRvdzoKICAgICAgICAgICAgIHdpbmRvdy5TZWxlY3RXaW5kb3coKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgV2UgYXJlLiBIYW5kbGUgdGhlIGV2ZW50LgpAQCAtODc4LDcgKzg3OCw3IEBACiAgICAgICAgIGlmIERFQlVHOiBwcmludCAiY29udHJvbCBoaXQgaW4iLCB3aW5kb3csICJvbiIsIGNvbnRyb2wsICI7IHBjb2RlID0iLCBwY29kZQogCiAgICAgZGVmIGRvX2luQ29udGVudChzZWxmLCBwYXJ0Y29kZSwgd2luZG93LCBldmVudCk6Ci0gICAgICAgIGlmIE15RnJvbnRXaW5kb3coKSA8PiB3aW5kb3c6CisgICAgICAgIGlmIE15RnJvbnRXaW5kb3coKSAhPSB3aW5kb3c6CiAgICAgICAgICAgICB3aW5kb3cuU2VsZWN0V2luZG93KCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAod2hhdCwgbWVzc2FnZSwgd2hlbiwgd2hlcmUsIG1vZGlmaWVycykgPSBldmVudApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL01pbmlBRUZyYW1lLnB5IGIvTGliL3BsYXQtbWFjL01pbmlBRUZyYW1lLnB5CmluZGV4IDhkNzU4YzMuLmQ2MTI2YmIgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9NaW5pQUVGcmFtZS5weQorKysgYi9MaWIvcGxhdC1tYWMvTWluaUFFRnJhbWUucHkKQEAgLTEzNiwxMSArMTM2LDExIEBACiAgICAgICAgIF9jbGFzcyA9IF9hdHRyaWJ1dGVzWydldmNsJ10udHlwZQogICAgICAgICBfdHlwZSA9IF9hdHRyaWJ1dGVzWydldmlkJ10udHlwZQogCi0gICAgICAgIGlmIHNlbGYuYWVfaGFuZGxlcnMuaGFzX2tleSgoX2NsYXNzLCBfdHlwZSkpOgorICAgICAgICBpZiAoX2NsYXNzLCBfdHlwZSkgaW4gc2VsZi5hZV9oYW5kbGVyczoKICAgICAgICAgICAgIF9mdW5jdGlvbiA9IHNlbGYuYWVfaGFuZGxlcnNbKF9jbGFzcywgX3R5cGUpXQotICAgICAgICBlbGlmIHNlbGYuYWVfaGFuZGxlcnMuaGFzX2tleSgoX2NsYXNzLCAnKioqKicpKToKKyAgICAgICAgZWxpZiAoX2NsYXNzLCAnKioqKicpIGluIHNlbGYuYWVfaGFuZGxlcnM6CiAgICAgICAgICAgICBfZnVuY3Rpb24gPSBzZWxmLmFlX2hhbmRsZXJzWyhfY2xhc3MsICcqKioqJyldCi0gICAgICAgIGVsaWYgc2VsZi5hZV9oYW5kbGVycy5oYXNfa2V5KCgnKioqKicsICcqKioqJykpOgorICAgICAgICBlbGlmICgnKioqKicsICcqKioqJykgaW4gc2VsZi5hZV9oYW5kbGVyczoKICAgICAgICAgICAgIF9mdW5jdGlvbiA9IHNlbGYuYWVfaGFuZGxlcnNbKCcqKioqJywgJyoqKionKV0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlICdDYW5ub3QgaGFwcGVuOiBBRSBjYWxsYmFjayB3aXRob3V0IGhhbmRsZXInLCAoX2NsYXNzLCBfdHlwZSkKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBfcGFyYW1ldGVyc1snX2F0dHJpYnV0ZXMnXSA9IF9hdHRyaWJ1dGVzCiAgICAgICAgIF9wYXJhbWV0ZXJzWydfY2xhc3MnXSA9IF9jbGFzcwogICAgICAgICBfcGFyYW1ldGVyc1snX3R5cGUnXSA9IF90eXBlCi0gICAgICAgIGlmIF9wYXJhbWV0ZXJzLmhhc19rZXkoJy0tLS0nKToKKyAgICAgICAgaWYgJy0tLS0nIGluIF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgX29iamVjdCA9IF9wYXJhbWV0ZXJzWyctLS0tJ10KICAgICAgICAgICAgIGRlbCBfcGFyYW1ldGVyc1snLS0tLSddCiAgICAgICAgICAgICAjIFRoZSB0cnkvZXhjZXB0IHRoYXQgdXNlZCB0byBiZSBoZXJlIGNhbiBtYXNrIHByb2dyYW1tZXIgZXJyb3JzLgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2FlcGFjay5weSBiL0xpYi9wbGF0LW1hYy9hZXBhY2sucHkKaW5kZXggNjAyMTI4My4uYmIyYTM3ZiAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL2FlcGFjay5weQorKysgYi9MaWIvcGxhdC1tYWMvYWVwYWNrLnB5CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAiIiJVbnBhY2sgYW4gQUUgZGVzY3JpcHRvciB0byBhIHB5dGhvbiBvYmplY3QiIiIKICAgICB0ID0gZGVzYy50eXBlCiAKLSAgICBpZiB1bnBhY2tlcl9jb2VyY2lvbnMuaGFzX2tleSh0KToKKyAgICBpZiB0IGluIHVucGFja2VyX2NvZXJjaW9uczoKICAgICAgICAgZGVzYyA9IGRlc2MuQUVDb2VyY2VEZXNjKHVucGFja2VyX2NvZXJjaW9uc1t0XSkKICAgICAgICAgdCA9IGRlc2MudHlwZSAjIFRoaXMgaXMgYSBndWVzcyBieSBKYWNrLi4uLgogCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYWV0b29scy5weSBiL0xpYi9wbGF0LW1hYy9hZXRvb2xzLnB5CmluZGV4IGJmMjc2NjMuLjQxZDdhMjEgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9hZXRvb2xzLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9hZXRvb2xzLnB5CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAiIiJSZXBsYWNlIGxvbmcgbmFtZSBrZXlzIGJ5IHRoZWlyIDQtY2hhciBjb3VudGVycGFydHMsIGFuZCBjaGVjayIiIgogICAgIG9rID0ga2V5ZGljdC52YWx1ZXMoKQogICAgIGZvciBrIGluIGFyZ3VtZW50cy5rZXlzKCk6Ci0gICAgICAgIGlmIGtleWRpY3QuaGFzX2tleShrKToKKyAgICAgICAgaWYgayBpbiBrZXlkaWN0OgogICAgICAgICAgICAgdiA9IGFyZ3VtZW50c1trXQogICAgICAgICAgICAgZGVsIGFyZ3VtZW50c1trXQogICAgICAgICAgICAgYXJndW1lbnRzW2tleWRpY3Rba11dID0gdgpAQCAtMTE5LDExICsxMTksMTEgQEAKIAogZGVmIGVudW1zdWJzdChhcmd1bWVudHMsIGtleSwgZWRpY3QpOgogICAgICIiIlN1YnN0aXR1dGUgYSBzaW5nbGUgZW51bSBrZXl3b3JkIGFyZ3VtZW50LCBpZiBpdCBvY2N1cnMiIiIKLSAgICBpZiBub3QgYXJndW1lbnRzLmhhc19rZXkoa2V5KSBvciBlZGljdCBpcyBOb25lOgorICAgIGlmIGtleSBub3QgaW4gYXJndW1lbnRzIG9yIGVkaWN0IGlzIE5vbmU6CiAgICAgICAgIHJldHVybgogICAgIHYgPSBhcmd1bWVudHNba2V5XQogICAgIG9rID0gZWRpY3QudmFsdWVzKCkKLSAgICBpZiBlZGljdC5oYXNfa2V5KHYpOgorICAgIGlmIHYgaW4gZWRpY3Q6CiAgICAgICAgIGFyZ3VtZW50c1trZXldID0gRW51bShlZGljdFt2XSkKICAgICBlbGlmIG5vdCB2IGluIG9rOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IsICdVbmtub3duIGVudW1lcmF0b3I6ICVzJyV2CkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogICAgICIiIkNyZWF0ZSB0aGUgJ2Jlc3QnIGFyZ3VtZW50IGZvciBhIHJhaXNlIE1hY09TLkVycm9yIiIiCiAgICAgZXJybiA9IGFyZ3VtZW50c1snZXJybiddCiAgICAgZXJyX2ExID0gZXJybgotICAgIGlmIGFyZ3VtZW50cy5oYXNfa2V5KCdlcnJzJyk6CisgICAgaWYgJ2VycnMnIGluIGFyZ3VtZW50czoKICAgICAgICAgZXJyX2EyID0gYXJndW1lbnRzWydlcnJzJ10KICAgICBlbHNlOgogICAgICAgICBlcnJfYTIgPSBNYWNPUy5HZXRFcnJvclN0cmluZyhlcnJuKQotICAgIGlmIGFyZ3VtZW50cy5oYXNfa2V5KCdlcm9iJyk6CisgICAgaWYgJ2Vyb2InIGluIGFyZ3VtZW50czoKICAgICAgICAgZXJyX2EzID0gYXJndW1lbnRzWydlcm9iJ10KICAgICBlbHNlOgogICAgICAgICBlcnJfYTMgPSBOb25lCkBAIC0yNTEsMTAgKzI1MSwxMCBAQAogCiAgICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKyAgICAgICAgaWYgJ2Vycm4nIGluIF9hcmd1bWVudHM6CiAgICAgICAgICAgICByYWlzZSBFcnJvciwgZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKIAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKyAgICAgICAgaWYgJy0tLS0nIGluIF9hcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAgICAgICAgICAgICBpZiBhc2ZpbGU6CiAgICAgICAgICAgICAgICAgaXRlbS5fX2NsYXNzX18gPSBhc2ZpbGUKQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGRlY29kZWVycm9yKF9hcmd1bWVudHMpCiAgICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisgICAgICAgIGlmICctLS0tJyBpbiBfYXJndW1lbnRzOgogICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQogCiAgICAgc2V0ID0gX3NldApAQCAtMjkzLDEwICsyOTMsMTAgQEAKICAgICAjIGxpa2UgdGhlICJhcHBsaWNhdGlvbiIgY2xhc3MgaW4gT1NBLgogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBzZWxmLl9lbGVtZGljdC5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuX2VsZW1kaWN0OgogICAgICAgICAgICAgY2xzID0gc2VsZi5fZWxlbWRpY3RbbmFtZV0KICAgICAgICAgICAgIHJldHVybiBEZWxheWVkQ29tcG9uZW50SXRlbShjbHMsIE5vbmUpCi0gICAgICAgIGlmIHNlbGYuX3Byb3BkaWN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5fcHJvcGRpY3Q6CiAgICAgICAgICAgICBjbHMgPSBzZWxmLl9wcm9wZGljdFtuYW1lXQogICAgICAgICAgICAgcmV0dXJuIGNscygpCiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBuYW1lCkBAIC0zMTgsMTAgKzMxOCwxMCBAQAogCiAgICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAogICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKyAgICAgICAgaWYgJ2Vycm4nIGluIF9hcmd1bWVudHM6CiAgICAgICAgICAgICByYWlzZSBFcnJvciwgZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKICAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKyAgICAgICAgaWYgJy0tLS0nIGluIF9hcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCiAjcGFzcwogCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYWV0eXBlcy5weSBiL0xpYi9wbGF0LW1hYy9hZXR5cGVzLnB5CmluZGV4IDVlMzU1NWUuLmYzMzMxNTYgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9hZXR5cGVzLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9hZXR5cGVzLnB5CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgc2VsZi5rZXl3b3JkID0gIiUtNC40cyIgJSBzdHIoa2V5d29yZCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJLZXl3b3JkKCVyKSIgJSBgc2VsZi5rZXl3b3JkYAorICAgICAgICByZXR1cm4gIktleXdvcmQoJXIpIiAlIHJlcHIoc2VsZi5rZXl3b3JkKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzdHJpbmcuc3RyaXAoc2VsZi5rZXl3b3JkKQpAQCAtNTMzLDEwICs1MzMsMTAgQEAKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgc2VsZi5fZWxlbWRpY3QuaGFzX2tleShuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLl9lbGVtZGljdDoKICAgICAgICAgICAgIGNscyA9IHNlbGYuX2VsZW1kaWN0W25hbWVdCiAgICAgICAgICAgICByZXR1cm4gRGVsYXllZENvbXBvbmVudEl0ZW0oY2xzLCBzZWxmKQotICAgICAgICBpZiBzZWxmLl9wcm9wZGljdC5oYXNfa2V5KG5hbWUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuX3Byb3BkaWN0OgogICAgICAgICAgICAgY2xzID0gc2VsZi5fcHJvcGRpY3RbbmFtZV0KICAgICAgICAgICAgIHJldHVybiBjbHMoc2VsZikKICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9hcHBsZXRydW5uZXIucHkgYi9MaWIvcGxhdC1tYWMvYXBwbGV0cnVubmVyLnB5CmluZGV4IGEyMzczYWEuLmNkZmQ0MTcgMTAwNzU1Ci0tLSBhL0xpYi9wbGF0LW1hYy9hcHBsZXRydW5uZXIucHkKKysrIGIvTGliL3BsYXQtbWFjL2FwcGxldHJ1bm5lci5weQpAQCAtNCw3ICs0LDcgQEAKICMgd2UgYXJlIG5vdCBydW5uaW5nIGluIGEgZnJhbWV3b3JrIGJ1aWxkLgogCiBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotd2FybnB5M2soIkluIDMueCwgYXBwbGV0cnVubmVyIGlzIHJlbW92ZWQuIiwgc3RhY2tsZXZlbD0yKQord2FybnB5M2soIkluIDMueCwgdGhlIGFwcGxldHJ1bm5lciBtb2R1bGUgaXMgcmVtb3ZlZC4iLCBzdGFja2xldmVsPTIpCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2J1aWxkdG9vbHMucHkgYi9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQppbmRleCBmMTM3NDExLi5iYmIzN2FiIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQorKysgYi9MaWIvcGxhdC1tYWMvYnVpbGR0b29scy5weQpAQCAtMjA3LDcgKzIwNyw3IEBACiAgICAgICAgICAgICAnaWNsOCcsICdpY3M0JywgJ2ljczgnLCAnSUNOIycsICdpY3MjJ10KICAgICBpZiBub3QgY29weV9jb2RlZnJhZ21lbnQ6CiAgICAgICAgIHNraXB0eXBlcy5hcHBlbmQoJ2NmcmcnKQotIyMgIHNraXBvd25lciA9IChvd25lcnR5cGUgPD4gTm9uZSkKKyMjICBza2lwb3duZXIgPSAob3duZXJ0eXBlICE9IE5vbmUpCiAKICAgICAjIENvcHkgdGhlIHJlc291cmNlcyBmcm9tIHRoZSB0ZW1wbGF0ZQogCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvYnVuZGxlYnVpbGRlci5weSBiL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDQyYmExZWUuLjQzMzk5MTMgMTAwNzU1Ci0tLSBhL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNDUsMTQgKzI0NSwxNCBAQAogICAgIGRlbCBzeXMucGF0aFsxOl0gICMgc3lzLnBhdGhbMF0gaXMgQ29udGVudHMvUmVzb3VyY2VzLwogIiIiCiAKLWlmIFVTRV9aSVBJTVBPUlQ6Ci0gICAgWklQX0FSQ0hJVkUgPSAiTW9kdWxlcy56aXAiCi0gICAgU0lURV9QWSArPSAic3lzLnBhdGguYXBwZW5kKHN5cy5wYXRoWzBdICsgJy8lcycpXG4iICUgWklQX0FSQ0hJVkUKLSAgICBkZWYgZ2V0UHljRGF0YShmdWxsbmFtZSwgY29kZSwgaXNwa2cpOgotICAgICAgICBpZiBpc3BrZzoKLSAgICAgICAgICAgIGZ1bGxuYW1lICs9ICIuX19pbml0X18iCi0gICAgICAgIHBhdGggPSBmdWxsbmFtZS5yZXBsYWNlKCIuIiwgb3Muc2VwKSArIFBZQ19FWFQKLSAgICAgICAgcmV0dXJuIHBhdGgsIE1BR0lDICsgJ1wwXDBcMFwwJyArIG1hcnNoYWwuZHVtcHMoY29kZSkKK1pJUF9BUkNISVZFID0gIk1vZHVsZXMuemlwIgorU0lURV9QWV9aSVAgPSBTSVRFX1BZICsgKCJzeXMucGF0aC5hcHBlbmQoc3lzLnBhdGhbMF0gKyAnLyVzJylcbiIgJSBaSVBfQVJDSElWRSkKKworZGVmIGdldFB5Y0RhdGEoZnVsbG5hbWUsIGNvZGUsIGlzcGtnKToKKyAgICBpZiBpc3BrZzoKKyAgICAgICAgZnVsbG5hbWUgKz0gIi5fX2luaXRfXyIKKyAgICBwYXRoID0gZnVsbG5hbWUucmVwbGFjZSgiLiIsIG9zLnNlcCkgKyBQWUNfRVhUCisgICAgcmV0dXJuIHBhdGgsIE1BR0lDICsgJ1wwXDBcMFwwJyArIG1hcnNoYWwuZHVtcHMoY29kZSkKIAogIwogIyBFeHRlbnNpb24gbW9kdWxlcyBjYW4ndCBiZSBpbiB0aGUgbW9kdWxlcyB6aXAgYXJjaGl2ZSwgc28gYSBwbGFjZWhvbGRlcgpAQCAtMjczLDcgKzI3Myw3IEBACiBkZWwgX19sb2FkCiAiIiIKIAotTUFZTUlTU19NT0RVTEVTID0gWydtYWMnLCAnb3MyJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCitNQVlNSVNTX01PRFVMRVMgPSBbJ29zMicsICdudCcsICdudHBhdGgnLCAnZG9zJywgJ2Rvc3BhdGgnLAogICAgICd3aW4zMmFwaScsICdjZScsICdfd2lucmVnJywgJ250dXJsMnBhdGgnLCAnc2l0ZWN1c3RvbWl6ZScsCiAgICAgJ29yZy5weXRob24uY29yZScsICdyaXNjb3MnLCAncmlzY29zZW52aXJvbicsICdyaXNjb3NwYXRoJwogXQpAQCAtMzAxLDYgKzMwMSw5IEBACiBsaWJkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGV4ZWNkaXIpLCAiRnJhbWV3b3JrcyIpCiBtYWlucHJvZ3JhbSA9IG9zLnBhdGguam9pbihyZXNkaXIsICIlKG1haW5wcm9ncmFtKXMiKQogCitpZiAlKG9wdGltaXplKXM6CisgICAgc3lzLmFyZ3YuaW5zZXJ0KDEsICctTycpCisKIHN5cy5hcmd2Lmluc2VydCgxLCBtYWlucHJvZ3JhbSkKIGlmICUoc3RhbmRhbG9uZSlzIG9yICUoc2VtaV9zdGFuZGFsb25lKXM6CiAgICAgb3MuZW52aXJvblsiUFlUSE9OUEFUSCJdID0gcmVzZGlyCkBAIC0zMTEsNiArMzE0LDcgQEAKICAgICBpZiBweXBhdGg6CiAgICAgICAgIHB5cGF0aCA9ICI6IiArIHB5cGF0aAogICAgIG9zLmVudmlyb25bIlBZVEhPTlBBVEgiXSA9IHJlc2RpciArIHB5cGF0aAorCiBvcy5lbnZpcm9uWyJQWVRIT05FWEVDVVRBQkxFIl0gPSBleGVjdXRhYmxlCiBvcy5lbnZpcm9uWyJEWUxEX0xJQlJBUllfUEFUSCJdID0gbGliZGlyCiBvcy5lbnZpcm9uWyJEWUxEX0ZSQU1FV09SS19QQVRIIl0gPSBsaWJkaXIKQEAgLTM0OSw2ICszNTMsOCBAQAogCiBjbGFzcyBBcHBCdWlsZGVyKEJ1bmRsZUJ1aWxkZXIpOgogCisgICAgdXNlX3ppcGltcG9ydCA9IFVTRV9aSVBJTVBPUlQKKwogICAgICMgT3ZlcnJpZGUgdHlwZSBvZiB0aGUgYnVuZGxlLgogICAgIHR5cGUgPSAiQVBQTCIKIApAQCAtNDgzLDcgKzQ4OSw3IEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGFuZGFsb25lIG9yIHNlbGYuc2VtaV9zdGFuZGFsb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmluY2x1ZGVNb2R1bGVzLmFwcGVuZCgiYXJndmVtdWxhdG9yIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlTW9kdWxlcy5hcHBlbmQoIm9zIikKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wbGlzdC5oYXNfa2V5KCJDRkJ1bmRsZURvY3VtZW50VHlwZXMiKToKKyAgICAgICAgICAgICAgICBpZiAiQ0ZCdW5kbGVEb2N1bWVudFR5cGVzIiBub3QgaW4gc2VsZi5wbGlzdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbGlzdFsiQ0ZCdW5kbGVEb2N1bWVudFR5cGVzIl0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICB7ICJDRkJ1bmRsZVR5cGVPU1R5cGVzIiA6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKioqKiIsCkBAIC01MDUsNiArNTExLDcgQEAKICAgICAgICAgICAgICAgICBoYXNoYmFuZyA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCiAgICAgICAgICAgICBzdGFuZGFsb25lID0gc2VsZi5zdGFuZGFsb25lCiAgICAgICAgICAgICBzZW1pX3N0YW5kYWxvbmUgPSBzZWxmLnNlbWlfc3RhbmRhbG9uZQorICAgICAgICAgICAgb3B0aW1pemUgPSBzeXMuZmxhZ3Mub3B0aW1pemUKICAgICAgICAgICAgIG9wZW4oYm9vdHN0cmFwcGF0aCwgInciKS53cml0ZShCT09UU1RSQVBfU0NSSVBUICUgbG9jYWxzKCkpCiAgICAgICAgICAgICBvcy5jaG1vZChib290c3RyYXBwYXRoLCAwNzc1KQogCkBAIC01NTEsMTMgKzU1OCwxNCBAQAogICAgICAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKHNyYywgZHN0KSkKIAogICAgIGRlZiBfZ2V0U2l0ZUNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBjb21waWxlKFNJVEVfUFkgJSB7InNlbWlfc3RhbmRhbG9uZSI6IHNlbGYuc2VtaV9zdGFuZGFsb25lfSwKKyAgICAgICAgaWYgc2VsZi51c2VfemlwaW1wb3J0OgorICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGUoU0lURV9QWSAlIHsic2VtaV9zdGFuZGFsb25lIjogc2VsZi5zZW1pX3N0YW5kYWxvbmV9LAogICAgICAgICAgICAgICAgICAgICAgIjwtYnVuZGxlYnVpbGRlci5weS0+IiwgImV4ZWMiKQogCiAgICAgZGVmIGFkZFB5dGhvbk1vZHVsZXMoc2VsZik6CiAgICAgICAgIHNlbGYubWVzc2FnZSgiQWRkaW5nIFB5dGhvbiBtb2R1bGVzIiwgMSkKIAotICAgICAgICBpZiBVU0VfWklQSU1QT1JUOgorICAgICAgICBpZiBzZWxmLnVzZV96aXBpbXBvcnQ6CiAgICAgICAgICAgICAjIENyZWF0ZSBhIHppcCBmaWxlIGNvbnRhaW5pbmcgYWxsIG1vZHVsZXMgYXMgcHljLgogICAgICAgICAgICAgaW1wb3J0IHppcGZpbGUKICAgICAgICAgICAgIHJlbHBhdGggPSBwYXRoam9pbigiQ29udGVudHMiLCAiUmVzb3VyY2VzIiwgWklQX0FSQ0hJVkUpCkBAIC02MjMsNyArNjMxLDcgQEAKICAgICAgICAgc2VsZi5tZXNzYWdlKCJGaW5kaW5nIG1vZHVsZSBkZXBlbmRlbmNpZXMiLCAxKQogICAgICAgICBpbXBvcnQgbW9kdWxlZmluZGVyCiAgICAgICAgIG1mID0gbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlcihleGNsdWRlcz1zZWxmLmV4Y2x1ZGVNb2R1bGVzKQotICAgICAgICBpZiBVU0VfWklQSU1QT1JUOgorICAgICAgICBpZiBzZWxmLnVzZV96aXBpbXBvcnQ6CiAgICAgICAgICAgICAjIHppcGltcG9ydCBpbXBvcnRzIHpsaWIsIG11c3QgYWRkIGl0IG1hbnVhbGx5CiAgICAgICAgICAgICBtZi5pbXBvcnRfaG9vaygiemxpYiIpCiAgICAgICAgICMgbWFudWFsbHkgYWRkIG91ciBvd24gc2l0ZS5weQpAQCAtNjU3LDcgKzY2NSw3IEBACiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCiAgICAgICAgICAgICAgICAgcGF0aGl0ZW1zID0gbmFtZS5zcGxpdCgiLiIpWzotMV0gKyBbZmlsZW5hbWVdCiAgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHBhdGhqb2luKCpwYXRoaXRlbXMpCi0gICAgICAgICAgICAgICAgaWYgVVNFX1pJUElNUE9SVDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnVzZV96aXBpbXBvcnQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgIT0gInpsaWIiOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBuZWF0bHkgcGFjayBhbGwgZXh0ZW5zaW9uIG1vZHVsZXMgaW4gYSBzdWJkaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4Y2VwdCB6bGliLCBzaW5jZSBpdCdzIG5lY2Vzc2FyeSBmb3IgYm9vdHN0cmFwcGluZy4KQEAgLTY3MSw5ICs2NzksOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmlsZXMuYXBwZW5kKChwYXRoLCBwYXRoam9pbigiQ29udGVudHMiLCAiUmVzb3VyY2VzIiwgZHN0cGF0aCkpKQogICAgICAgICAgICAgaWYgbW9kLl9fY29kZV9fIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGlzcGtnID0gbW9kLl9fcGF0aF9fIGlzIG5vdCBOb25lCi0gICAgICAgICAgICAgICAgaWYgbm90IFVTRV9aSVBJTVBPUlQgb3IgbmFtZSAhPSAic2l0ZSI6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYudXNlX3ppcGltcG9ydCBvciBuYW1lICE9ICJzaXRlIjoKICAgICAgICAgICAgICAgICAgICAgIyBPdXIgc2l0ZS5weSBpcyBkb2luZyB0aGUgYm9vdHN0cmFwcGluZywgc28gd2UgbXVzdAotICAgICAgICAgICAgICAgICAgICAjIGluY2x1ZGUgYSByZWFsIC5weWMgZmlsZSBpZiBVU0VfWklQSU1QT1JUIGlzIFRydWUuCisgICAgICAgICAgICAgICAgICAgICMgaW5jbHVkZSBhIHJlYWwgLnB5YyBmaWxlIGlmIHNlbGYudXNlX3ppcGltcG9ydCBpcyBUcnVlLgogICAgICAgICAgICAgICAgICAgICBzZWxmLnB5bW9kdWxlcy5hcHBlbmQoKG5hbWUsIG1vZC5fX2NvZGVfXywgaXNwa2cpKQogCiAgICAgICAgIGlmIGhhc2F0dHIobWYsICJhbnlfbWlzc2luZ19tYXliZSIpOgpAQCAtODE5LDYgKzgyNyw3IEBACiAgICAgICAtLXNlbWktc3RhbmRhbG9uZSAgYnVpbGQgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uLCB3aGljaCBkZXBlbmRzIG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFsbGVkIFB5dGhvbiwgeWV0IGluY2x1ZGVzIGFsbCB0aGlyZC1wYXJ0eQogICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMuCisgICAgICAtLW5vLXppcGltcG9ydCAgICAgRG8gbm90IGNvcHkgY29kZSBpbnRvIGEgemlwIGZpbGUKICAgICAgIC0tcHl0aG9uPUZJTEUgICAgICBQeXRob24gdG8gdXNlIGluICMhIGxpbmUgaW4gc3RlYWQgb2YgY3VycmVudCBQeXRob24KICAgICAgIC0tbGliPUZJTEUgICAgICAgICBzaGFyZWQgbGlicmFyeSBvciBmcmFtZXdvcmsgdG8gYmUgY29waWVkIGludG8KICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYnVuZGxlCkBAIC04NDYsNyArODU1LDkgQEAKICAgICAgICAgIm1haW5wcm9ncmFtPSIsICJjcmVhdG9yPSIsICJuaWI9IiwgInBsaXN0PSIsICJsaW5rIiwKICAgICAgICAgImxpbmstZXhlYyIsICJoZWxwIiwgInZlcmJvc2UiLCAicXVpZXQiLCAiYXJndiIsICJzdGFuZGFsb25lIiwKICAgICAgICAgImV4Y2x1ZGU9IiwgImluY2x1ZGU9IiwgInBhY2thZ2U9IiwgInN0cmlwIiwgImljb25maWxlPSIsCi0gICAgICAgICJsaWI9IiwgInB5dGhvbj0iLCAic2VtaS1zdGFuZGFsb25lIiwgImJ1bmRsZS1pZD0iLCAiZGVzdHJvb3Q9IikKKyAgICAgICAgImxpYj0iLCAicHl0aG9uPSIsICJzZW1pLXN0YW5kYWxvbmUiLCAiYnVuZGxlLWlkPSIsICJkZXN0cm9vdD0iCisgICAgICAgICJuby16aXBpbXBvcnQiCisgICAgICAgICkKIAogICAgIHRyeToKICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCBzaG9ydG9wdHMsIGxvbmdvcHRzKQpAQCAtOTEwLDYgKzkyMSw4IEBACiAgICAgICAgICAgICBidWlsZGVyLnN0cmlwID0gMQogICAgICAgICBlbGlmIG9wdCA9PSAnLS1kZXN0cm9vdCc6CiAgICAgICAgICAgICBidWlsZGVyLmRlc3Ryb290ID0gYXJnCisgICAgICAgIGVsaWYgb3B0ID09ICctLW5vLXppcGltcG9ydCc6CisgICAgICAgICAgICBidWlsZGVyLnVzZV96aXBpbXBvcnQgPSBGYWxzZQogCiAgICAgaWYgbGVuKGFyZ3MpICE9IDE6CiAgICAgICAgIHVzYWdlKCJNdXN0IHNwZWNpZnkgb25lIGNvbW1hbmQgKCdidWlsZCcsICdyZXBvcnQnIG9yICdoZWxwJykiKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2NmbWZpbGUucHkgYi9MaWIvcGxhdC1tYWMvY2ZtZmlsZS5weQppbmRleCBkZGJkNDY4Li4yNjIzOGU5IDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvY2ZtZmlsZS5weQorKysgYi9MaWIvcGxhdC1tYWMvY2ZtZmlsZS5weQpAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgICAgIFJlcy5DbG9zZVJlc0ZpbGUocmVzcmVmKQogICAgICAgICAgICAgICAgIFJlcy5Vc2VSZXNGaWxlKGN1cnJlbnRyZXNyZWYpCiAgICAgICAgICAgICBzZWxmLnBhcnNlKGRhdGEpCi0gICAgICAgICAgICBpZiBzZWxmLnZlcnNpb24gPD4gMToKKyAgICAgICAgICAgIGlmIHNlbGYudmVyc2lvbiAhPSAxOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yLCAidW5rbm93biAnY2ZyZycgcmVzb3VyY2UgZm9ybWF0IgogCiAgICAgZGVmIHBhcnNlKHNlbGYsIGRhdGEpOgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHJldHVybiBkYXRhCiAKICAgICBkZWYgZ2V0ZnJhZ21lbnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYud2hlcmUgPD4gMToKKyAgICAgICAgaWYgc2VsZi53aGVyZSAhPSAxOgogICAgICAgICAgICAgcmFpc2UgZXJyb3IsICJjYW4ndCByZWFkIGZyYWdtZW50LCB1bnN1cHBvcnRlZCBsb2NhdGlvbiIKICAgICAgICAgZiA9IG9wZW4oc2VsZi5wYXRoLCAicmIiKQogICAgICAgICBmLnNlZWsoc2VsZi5vZmZzZXQpCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgcmV0dXJuIGZyYWcKIAogICAgIGRlZiBjb3B5ZGF0YShzZWxmLCBvdXRmaWxlKToKLSAgICAgICAgaWYgc2VsZi53aGVyZSA8PiAxOgorICAgICAgICBpZiBzZWxmLndoZXJlICE9IDE6CiAgICAgICAgICAgICByYWlzZSBlcnJvciwgImNhbid0IHJlYWQgZnJhZ21lbnQsIHVuc3VwcG9ydGVkIGxvY2F0aW9uIgogICAgICAgICBpbmZpbGUgPSBvcGVuKHNlbGYucGF0aCwgInJiIikKICAgICAgICAgaWYgc2VsZi5sZW5ndGggPT0gMDoKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9maW5kZXJ0b29scy5weSBiL0xpYi9wbGF0LW1hYy9maW5kZXJ0b29scy5weQppbmRleCA1NmU3OTgwLi4xMzYzNTYyIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvZmluZGVydG9vbHMucHkKKysrIGIvTGliL3BsYXQtbWFjL2ZpbmRlcnRvb2xzLnB5CkBAIC0xNDMsOSArMTQzLDkgQEAKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIGFyZ3NbImRhdGEiXSA9IGNvbW1lbnQKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAic2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIGRlZiBfZ2V0Y29tbWVudChvYmplY3RfYWxpYXMpOgpAQCAtMTU2LDkgKzE1Niw5IEBACiAgICAgYWVvYmpfMDEgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ2NvbXQnKSwgZnI9YWVvYmpfMDApCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMDEKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAiZ2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIApAQCAtMTc4LDEwICsxNzgsMTAgQEAKICAgICAjIyBnZXQgdGhlIHByb2Nlc3NuYW1lcyBvciBlbHNlIHRoZSBwcm9jZXNzbnVtYmVycwogICAgIGFyZ3NbJy0tLS0nXSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcmNzJyksIGZvcm09ImluZHgiLCBzZWxkPWFldHlwZXMuVW5rbm93bignYWJzbycsICJhbGwgIiksIGZyPU5vbmUpCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCdjb3JlJywgJ2dldGQnLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKICAgICBwID0gW10KLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcCA9ICBhcmdzWyctLS0tJ10KICAgICAgICAgZm9yIHByb2MgaW4gcDoKICAgICAgICAgICAgIGlmIGhhc2F0dHIocHJvYywgJ3NlbGQnKToKQEAgLTE5Nyw5ICsxOTcsOSBAQAogICAgIGFlb2JqXzAgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJjcycpLCBmb3JtPSJpbmR4Iiwgc2VsZD1hZXR5cGVzLlVua25vd24oJ2Fic28nLCAiYWxsICIpLCBmcj1Ob25lKQogICAgIGFyZ3NbJy0tLS0nXSA9ICBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ2ZjcnQnKSwgZnI9YWVvYmpfMCkKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoJ2NvcmUnLCAnZ2V0ZCcsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJnKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICBwID0gIGFyZ3NbJy0tLS0nXQogICAgICAgICBjcmVhdG9ycyA9IHBbOl0KICAgICAjIyBjb25jYXRlbmF0ZSBpbiBvbmUgZGljdApAQCAtMjUyLDkgKzI1Miw5IEBACiAgICAgYWVvYmpfMDEgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUocHJvcGVydHkpLCBmcj1hZW9ial8wMCkKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJnZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogCkBAIC0yNzMsNyArMjczLDcgQEAKICAgICBhZW9ial8wID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ2Nmb2wnKSwgZm9ybT0iYWxpcyIsIHNlbGQ9b2JqZWN0X2FsaWFzLCBmcj1Ob25lKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoX2NvZGUsIF9zdWJjb2RlLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKIAogZGVmIGNsb3Nld2luZG93KG9iamVjdCk6CkBAIC0yODgsNyArMjg4LDcgQEAKICAgICBhZW9ial8wID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ2Nmb2wnKSwgZm9ybT0iYWxpcyIsIHNlbGQ9b2JqZWN0X2FsaWFzLCBmcj1Ob25lKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoX2NvZGUsIF9zdWJjb2RlLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKIAogZGVmIGxvY2F0aW9uKG9iamVjdCwgcG9zPU5vbmUpOgpAQCAtMzEwLDcgKzMxMCw3IEBACiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMDEKICAgICBhcmdzWyJkYXRhIl0gPSBbeCwgeV0KICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImNvcmUiLCAic2V0ZCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQogICAgIHJldHVybiAoeCx5KQogCkBAIC0zMjMsOSArMzIzLDkgQEAKICAgICBhZW9ial8wMSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgncG9zbicpLCBmcj1hZW9ial8wMCkKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJnZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHBvcyA9IGFyZ3NbJy0tLS0nXQogICAgICAgICByZXR1cm4gcG9zLmgsIHBvcy52CiAKQEAgLTM0OCw5ICszNDgsOSBAQAogICAgIGFlb2JqXzAxID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3Byb3AnKSwgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdsYWJpJyksIGZyPWFlb2JqXzAwKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgX3NldGxhYmVsKG9iamVjdF9hbGlhcywgaW5kZXgpOgpAQCAtMzY3LDcgKzM2Nyw3IEBACiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMQogICAgIGFyZ3NbImRhdGEiXSA9IGluZGV4CiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKF9jb2RlLCBfc3ViY29kZSwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCiAgICAgcmV0dXJuIGluZGV4CiAKQEAgLTQwNyw5ICs0MDcsOSBAQAogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzIKICAgICBhcmdzWydkYXRhJ10gPSBhZW9ial8zCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKF9jb2RlLCBfc3ViY29kZSwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIF9nZXR3aW5kb3d2aWV3KGZvbGRlcl9hbGlhcyk6CkBAIC00MjQsMTAgKzQyNCwxMCBAQAogICAgIGFlb2JqXzAyID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3Byb3AnKSwgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdwdmV3JyksIGZyPWFlb2JqXzAxKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAyCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKICAgICB2aWV3cyA9IHsnaWltZyc6MCwgJ3BuYW0nOjEsICdsZ2J1JzoyfQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gdmlld3NbYXJnc1snLS0tLSddLmVudW1dCiAKIGRlZiB3aW5kb3dzaXplKGZvbGRlciwgc2l6ZT1Ob25lKToKQEAgLTQ1OSw3ICs0NTksNyBAQAogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzIKICAgICBhcmdzWyJkYXRhIl0gPSBhZXZhcjAwCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKF9jb2RlLCBfc3ViY29kZSwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCiAgICAgcmV0dXJuICh3LCBoKQogCkBAIC00NzYsOSArNDc2LDkgQEAKICAgICAgICAgICAgIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgncG9zbicpLCBmcj1hZW9ial8xKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzIKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoJ2NvcmUnLCAnZ2V0ZCcsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIGRlZiB3aW5kb3dwb3NpdGlvbihmb2xkZXIsIHBvcz1Ob25lKToKQEAgLTUwNyw5ICs1MDcsOSBAQAogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzIKICAgICBhcmdzWyJkYXRhIl0gPSBbeCwgeV0KICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoJ2NvcmUnLCAnc2V0ZCcsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBFcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihhcmdzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnLS0tLScpOgorICAgIGlmICctLS0tJyBpbiBhcmdzOgogICAgICAgICByZXR1cm4gYXJnc1snLS0tLSddCiAKIGRlZiBfZ2V0d2luZG93cG9zaXRpb24oZm9sZGVyX2FsaWFzKToKQEAgLTUyNSw5ICs1MjUsOSBAQAogICAgICAgICAgICAgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdwdHN6JyksIGZyPWFlb2JqXzEpCiAgICAgYXJnc1snLS0tLSddID0gYWVvYmpfMgogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgnY29yZScsICdnZXRkJywgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIGljb24ob2JqZWN0LCBpY29uZGF0YT1Ob25lKToKQEAgLTU1Miw5ICs1NTIsOSBAQAogICAgICAgICAgICAgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdpaW1nJyksIGZyPWFlb2JqXzAwKQogICAgIGFyZ3NbJy0tLS0nXSA9IGFlb2JqXzAxCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiBkZWYgX3NldGljb24ob2JqZWN0X2FsaWFzLCBpY29uZGF0YSk6CkBAIC01NjksOSArNTY5LDkgQEAKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMQogICAgIGFyZ3NbImRhdGEiXSA9IGljb25kYXRhCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgInNldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXS5kYXRhCiAKIApAQCAtNTk0LDkgKzU5NCw5IEBACiAgICAgICAgIGFyZ3NbIlNSVlIiXSA9IHNlcnZlcgogICAgIGFyZ3NbJy0tLS0nXSA9IHZvbHVtZQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiYWV2dCIsICJtdm9sIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIHVubW91bnR2b2x1bWUodm9sdW1lKToKQEAgLTYxMCw5ICs2MTAsOSBAQAogICAgIGF0dHJzID0ge30KICAgICBhcmdzWyctLS0tJ10gPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgnY2RpcycpLCBmb3JtPSJuYW1lIiwgc2VsZD1vYmplY3QsIGZyPU5vbmUpCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IHRhbGtlci5zZW5kKCJmbmRyIiwgInB0d3kiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgcmV0dXJuIGFyZ3NbJy0tLS0nXQogCiAKQEAgLTYzMSw5ICs2MzEsOSBAQAogICAgICAgICBsZXZlbCA9IDcKICAgICBhcmdzWyctLS0tJ10gPSBsZXZlbAogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiYWV2dCIsICJzdHZsIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIE9TdmVyc2lvbigpOgpAQCAtNjQ0LDkgKzY0NCw5IEBACiAgICAgYWVvYmpfMDAgPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ3ZlcjInKSwgZnI9Tm9uZSkKICAgICBhcmdzWyctLS0tJ10gPSBhZW9ial8wMAogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJnZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIHJldHVybiBhcmdzWyctLS0tJ10KIAogZGVmIGZpbGVzaGFyaW5nKCk6CkBAIC02NjEsOSArNjYxLDkgQEAKICAgICBhdHRycyA9IHt9CiAgICAgYXJnc1snLS0tLSddID0gYWV0eXBlcy5PYmplY3RTcGVjaWZpZXIod2FudD1hZXR5cGVzLlR5cGUoJ3Byb3AnKSwgZm9ybT0icHJvcCIsIHNlbGQ9YWV0eXBlcy5UeXBlKCdmc2hyJyksIGZyPU5vbmUpCiAgICAgX3JlcGx5LCBhcmdzLCBhdHRycyA9IGZpbmRlci5zZW5kKCJjb3JlIiwgImdldGQiLCBhcmdzLCBhdHRycykKLSAgICBpZiBhcmdzLmhhc19rZXkoJ2Vycm4nKToKKyAgICBpZiAnZXJybicgaW4gYXJnczoKICAgICAgICAgcmFpc2UgRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoYXJncykKLSAgICBpZiBhcmdzLmhhc19rZXkoJy0tLS0nKToKKyAgICBpZiAnLS0tLScgaW4gYXJnczoKICAgICAgICAgaWYgYXJnc1snLS0tLSddID09IDA6CiAgICAgICAgICAgICBzdGF0dXMgPSAtMQogICAgICAgICBlbHNlOgpAQCAtNjczLDkgKzY3Myw5IEBACiAgICAgYXR0cnMgPSB7fQogICAgIGFyZ3NbJy0tLS0nXSA9IGFldHlwZXMuT2JqZWN0U3BlY2lmaWVyKHdhbnQ9YWV0eXBlcy5UeXBlKCdwcm9wJyksIGZvcm09InByb3AiLCBzZWxkPWFldHlwZXMuVHlwZSgnZnN1cCcpLCBmcj1Ob25lKQogICAgIF9yZXBseSwgYXJncywgYXR0cnMgPSBmaW5kZXIuc2VuZCgiY29yZSIsICJnZXRkIiwgYXJncywgYXR0cnMpCi0gICAgaWYgYXJncy5oYXNfa2V5KCdlcnJuJyk6CisgICAgaWYgJ2Vycm4nIGluIGFyZ3M6CiAgICAgICAgIHJhaXNlIEVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCi0gICAgaWYgYXJncy5oYXNfa2V5KCctLS0tJyk6CisgICAgaWYgJy0tLS0nIGluIGFyZ3M6CiAgICAgICAgIGlmIGFyZ3NbJy0tLS0nXSA9PSAxOgogICAgICAgICAgICAgc3RhdHVzID0gMAogICAgIHJldHVybiBzdGF0dXMKQEAgLTY5Myw3ICs2OTMsNyBAQAogICAgIGF0dHJzID0ge30KICAgICBhcmdzWyctLS0tJ10gPSBhZXR5cGVzLk9iamVjdFNwZWNpZmllcih3YW50PWFldHlwZXMuVHlwZSgncHJvcCcpLCBmb3JtPSJwcm9wIiwgc2VsZD1hZXR5cGVzLlR5cGUoJ3Ryc2gnKSwgZnI9Tm9uZSkKICAgICBfcmVwbHksIGFyZ3MsIGF0dHJzID0gZmluZGVyLnNlbmQoImZuZHIiLCAiZW1wdCIsIGFyZ3MsIGF0dHJzKQotICAgIGlmIGFyZ3MuaGFzX2tleSgnZXJybicpOgorICAgIGlmICdlcnJuJyBpbiBhcmdzOgogICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKGFyZ3MpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5IGIvTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5CmluZGV4IDI4ZWJlYTYuLjJiYWUwOGEgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9nZW5zdWl0ZW1vZHVsZS5weQorKysgYi9MaWIvcGxhdC1tYWMvZ2Vuc3VpdGVtb2R1bGUucHkKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgICAgICAgICAgYWV0ZSA9IGRlY29kZShkYXRhLCB2ZXJib3NlKQogICAgICAgICAgICAgYWV0ZWxpc3QuYXBwZW5kKChhZXRlLCByZXMuR2V0UmVzSW5mbygpKSkKICAgICBmaW5hbGx5OgotICAgICAgICBpZiByZiA8PiBjdXI6CisgICAgICAgIGlmIHJmICE9IGN1cjoKICAgICAgICAgICAgIENsb3NlUmVzRmlsZShyZikKICAgICAgICAgICAgIFVzZVJlc0ZpbGUoY3VyKQogICAgICMgc3dpdGNoIGJhY2sgKG5lZWRlZCBmb3IgZGlhbG9ncyBpbiBQeXRob24pCkBAIC0zMzUsNyArMzM1LDcgQEAKIGRlZiBnZXRhbGlnbihmKToKICAgICBpZiBmLnRlbGwoKSAmIDE6CiAgICAgICAgIGMgPSBmLnJlYWQoMSkKLSAgICAgICAgIyNpZiBjIDw+ICdcMCc6CisgICAgICAgICMjaWYgYyAhPSAnXDAnOgogICAgICAgICAjIyAgcHJpbnQgYWxpZ246JywgcmVwcihjKQogCiBkZWYgZ2V0bGlzdChmLCBkZXNjcmlwdGlvbiwgZ2V0aXRlbSk6CkBAIC01OTIsNyArNTkyLDcgQEAKIAogICAgICAgICBzZWxmLm1vZG5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguc3BsaXQoc2VsZi5wYXRobmFtZSlbMV0pWzBdCiAKLSAgICAgICAgaWYgc2VsZi5iYXNlcGFja2FnZSBhbmQgc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19tb2R1bGUuaGFzX2tleShjb2RlKToKKyAgICAgICAgaWYgc2VsZi5iYXNlcGFja2FnZSBhbmQgY29kZSBpbiBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZToKICAgICAgICAgICAgICMgV2UgYXJlIGFuIGV4dGVuc2lvbiBvZiBhIGJhc2VjbGFzcyAodXN1YWxseSBhbiBhcHBsaWNhdGlvbiBleHRlbmRpbmcKICAgICAgICAgICAgICMgU3RhbmRhcmRfU3VpdGUgb3Igc28pLiBJbXBvcnQgZXZlcnl0aGluZyBmcm9tIG91ciBiYXNlIG1vZHVsZQogICAgICAgICAgICAgYmFzZW1vZHVsZSA9IHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlW2NvZGVdCkBAIC02NTksMTIgKzY1OSwxMiBAQAogICAgICAgICBmcC53cml0ZSgnaW1wb3J0IGFldG9vbHNcbicpCiAgICAgICAgIGZwLndyaXRlKCdpbXBvcnQgTWFjT1NcblxuJykKICAgICAgICAgZnAud3JpdGUoIl9jb2RlID0gJXJcblxuIiUgKGNvZGUsKSkKLSAgICAgICAgaWYgc2VsZi5iYXNlcGFja2FnZSBhbmQgc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19tb2R1bGUuaGFzX2tleShjb2RlKToKKyAgICAgICAgaWYgc2VsZi5iYXNlcGFja2FnZSBhbmQgY29kZSBpbiBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZToKICAgICAgICAgICAgICMgV2UgYXJlIGFuIGV4dGVuc2lvbiBvZiBhIGJhc2VjbGFzcyAodXN1YWxseSBhbiBhcHBsaWNhdGlvbiBleHRlbmRpbmcKICAgICAgICAgICAgICMgU3RhbmRhcmRfU3VpdGUgb3Igc28pLiBJbXBvcnQgZXZlcnl0aGluZyBmcm9tIG91ciBiYXNlIG1vZHVsZQogICAgICAgICAgICAgZnAud3JpdGUoJ2Zyb20gJXMgaW1wb3J0ICpcbiclc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19mdWxsbmFtZVtjb2RlXVswXSkKICAgICAgICAgICAgIGJhc2Vtb2R1bGUgPSBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZVtjb2RlXQotICAgICAgICBlbGlmIHNlbGYuYmFzZXBhY2thZ2UgYW5kIHNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fbW9kdWxlLmhhc19rZXkoY29kZS5sb3dlcigpKToKKyAgICAgICAgZWxpZiBzZWxmLmJhc2VwYWNrYWdlIGFuZCBjb2RlLmxvd2VyKCkgaW4gc2VsZi5iYXNlcGFja2FnZS5fY29kZV90b19tb2R1bGU6CiAgICAgICAgICAgICAjIFRoaXMgaXMgbmVlZGVkIGJ5IENvZGVXYXJyaW9yIGFuZCBzb21lIG90aGVycy4KICAgICAgICAgICAgIGZwLndyaXRlKCdmcm9tICVzIGltcG9ydCAqXG4nJXNlbGYuYmFzZXBhY2thZ2UuX2NvZGVfdG9fZnVsbG5hbWVbY29kZS5sb3dlcigpXVswXSkKICAgICAgICAgICAgIGJhc2Vtb2R1bGUgPSBzZWxmLmJhc2VwYWNrYWdlLl9jb2RlX3RvX21vZHVsZVtjb2RlLmxvd2VyKCldCkBAIC03ODIsNyArNzgyLDcgQEAKICAgICAgICAgICAgIGlmIGlzX2VudW0oYVsyXSk6CiAgICAgICAgICAgICAgICAga25hbWUgPSBhWzFdCiAgICAgICAgICAgICAgICAgZW5hbWUgPSBhWzJdWzBdCi0gICAgICAgICAgICAgICAgaWYgZW5hbWUgPD4gJyoqKionOgorICAgICAgICAgICAgICAgIGlmIGVuYW1lICE9ICcqKioqJzoKICAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoIiAgICAgICAgYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJXIsIF9FbnVtXyVzKVxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAoa25hbWUsIGlkZW50aWZ5KGVuYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW51bXNuZWVkZWRbZW5hbWVdID0gMQpAQCAtODAxLDcgKzgwMSw3IEBACiAgICAgICAgICMKICAgICAgICAgIyBEZWNvZGUgcmVzdWx0CiAgICAgICAgICMKLSAgICAgICAgZnAud3JpdGUoIiAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6XG4iKQorICAgICAgICBmcC53cml0ZSgiICAgICAgICBpZiAnLS0tLScgaW4gX2FyZ3VtZW50czpcbiIpCiAgICAgICAgIGlmIGlzX2VudW0ocmV0dXJucyk6CiAgICAgICAgICAgICBmcC53cml0ZSgiICAgICAgICAgICAgIyBYWFhYIFNob3VsZCBkbyBlbnVtIHJlbWFwcGluZyBoZXJlLi4uXG4iKQogICAgICAgICBmcC53cml0ZSgiICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXVxuIikKQEAgLTgxMyw3ICs4MTMsNyBAQAogICAgICAgICBmb3IgYSBpbiBhcmd1bWVudHM6CiAgICAgICAgICAgICBpZiBpc19lbnVtKGFbMl0pOgogICAgICAgICAgICAgICAgIGVuYW1lID0gYVsyXVswXQotICAgICAgICAgICAgICAgIGlmIGVuYW1lIDw+ICcqKioqJzoKKyAgICAgICAgICAgICAgICBpZiBlbmFtZSAhPSAnKioqKic6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW51bXNuZWVkZWRbZW5hbWVdID0gMQogCiAjCkBAIC04NDUsMTcgKzg0NSwxNyBAQAogCiAgICAgZGVmIGFkZG5hbWVjb2RlKHNlbGYsIHR5cGUsIG5hbWUsIGNvZGUpOgogICAgICAgICBzZWxmLm5hbWUyY29kZVt0eXBlXVtuYW1lXSA9IGNvZGUKLSAgICAgICAgaWYgbm90IHNlbGYuY29kZTJuYW1lW3R5cGVdLmhhc19rZXkoY29kZSk6CisgICAgICAgIGlmIGNvZGUgbm90IGluIHNlbGYuY29kZTJuYW1lW3R5cGVdOgogICAgICAgICAgICAgc2VsZi5jb2RlMm5hbWVbdHlwZV1bY29kZV0gPSBuYW1lCiAKICAgICBkZWYgaGFzbmFtZShzZWxmLCBuYW1lKToKICAgICAgICAgZm9yIGRpY3QgaW4gc2VsZi5uYW1lMmNvZGUudmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiBkaWN0Lmhhc19rZXkobmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lIGluIGRpY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgaGFzY29kZShzZWxmLCB0eXBlLCBjb2RlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuY29kZTJuYW1lW3R5cGVdLmhhc19rZXkoY29kZSkKKyAgICAgICAgcmV0dXJuIGNvZGUgaW4gc2VsZi5jb2RlMm5hbWVbdHlwZV0KIAogICAgIGRlZiBmaW5kY29kZW5hbWUoc2VsZiwgdHlwZSwgY29kZSk6CiAgICAgICAgIGlmIG5vdCBzZWxmLmhhc2NvZGUodHlwZSwgY29kZSk6CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1tYWMvaWMucHkgYi9MaWIvcGxhdC1tYWMvaWMucHkKaW5kZXggODMzN2YyZC4uMzIxZWJhOCAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL2ljLnB5CisrKyBiL0xpYi9wbGF0LW1hYy9pYy5weQpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgIGtleTIgPSBrZXlbOnN0cmluZy5pbmRleChrZXksICdcMjQ1JykrMV0KICAgICBlbHNlOgogICAgICAgICBrZXkyID0ga2V5Ci0gICAgaWYgX2RlY29kZXJfdGFibGUuaGFzX2tleShrZXkyKToKKyAgICBpZiBrZXkyIGluIF9kZWNvZGVyX3RhYmxlOgogICAgICAgICBkZWNvZGVyID0gX2RlY29kZXJfdGFibGVba2V5Ml1bMF0KICAgICBlbHNlOgogICAgICAgICBkZWNvZGVyID0gX2RlY29kZV9kZWZhdWx0CkBAIC0xNTQsNyArMTU0LDcgQEAKICAgICAgICAga2V5MiA9IGtleVs6c3RyaW5nLmluZGV4KGtleSwgJ1wyNDUnKSsxXQogICAgIGVsc2U6CiAgICAgICAgIGtleTIgPSBrZXkKLSAgICBpZiBfZGVjb2Rlcl90YWJsZS5oYXNfa2V5KGtleTIpOgorICAgIGlmIGtleTIgaW4gX2RlY29kZXJfdGFibGU6CiAgICAgICAgIGNvZGVyID0gX2RlY29kZXJfdGFibGVba2V5Ml1bMV0KICAgICBlbHNlOgogICAgICAgICBjb2RlciA9IF9jb2RlX2RlZmF1bHQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9tYWNlcnJvcnMucHkgYi9MaWIvcGxhdC1tYWMvbWFjZXJyb3JzLnB5CmluZGV4IGRlMWMxZTIuLjU4ZDc5ZDYgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy9tYWNlcnJvcnMucHkKKysrIGIvTGliL3BsYXQtbWFjL21hY2Vycm9ycy5weQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIHNtRkhCbG9ja1JkRXJyICA9ICAgLTMxMCAgICAjRXJyb3Igb2NjdXJyZWQgZHVyaW5nIF9zR2V0RkhlYWRlci4KIHNtQkxGaWVsZEJhZCAgICA9ICAgLTMwOSAgICAjQnl0ZUxhbmVzIGZpZWxkIHdhcyBiYWQuCiBzbVVuRXhCdXNFcnIgICAgPSAgIC0zMDggICAgI1VuZXhwZWN0ZWQgQnVzRXJyb3IKLXNtUmVzcnZFcnIgID0gICAtMzA3ICAgICNGYXRhbCByZXNlcnZlZCBlcnJvci4gUmVzcmV2ZWQgZmllbGQgPD4gMC4KK3NtUmVzcnZFcnIgID0gICAtMzA3ICAgICNGYXRhbCByZXNlcnZlZCBlcnJvci4gUmVzZXJ2ZWQgZmllbGQgIT0gMC4KIHNtTm9zSW5mb0FycmF5ICA9ICAgLTMwNiAgICAjTm8gc0luZm9BcnJheS4gTWVtb3J5IE1nciBlcnJvci4KIHNtRGlzYWJsZWRTbG90ICA9ICAgLTMwNSAgICAjVGhpcyBzbG90IGlzIGRpc2FibGVkICgtMzA1IHVzZSB0byBiZSBzbUxXVHN0QmFkKQogc21Ob0RpciA9ICAgLTMwNCAgICAjRGlyZWN0b3J5IG9mZnNldCBpcyBOaWwKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9tYWNyZXNvdXJjZS5weSBiL0xpYi9wbGF0LW1hYy9tYWNyZXNvdXJjZS5weQppbmRleCBiYjllMmQ5Li4zYjQ4ZDRiIDEwMDY0NAotLS0gYS9MaWIvcGxhdC1tYWMvbWFjcmVzb3VyY2UucHkKKysrIGIvTGliL3BsYXQtbWFjL21hY3Jlc291cmNlLnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgaWYgbW9kbmFtZSA9PSAnX19tYWluX18nOgogICAgICAgICAjIElmIHdlJ3JlIG1haW4gd2UgbG9vayBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgICAgICAgc2VhcmNoZGlycyA9IFtvcy5jdXJkaXJdCi0gICAgaWYgc3lzLm1vZHVsZXMuaGFzX2tleShtb2RuYW1lKToKKyAgICBpZiBtb2RuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQogICAgICAgICBpZiBoYXNhdHRyKG1vZCwgJ19fZmlsZV9fJyk6CiAgICAgICAgICAgICBzZWFyY2hkaXJzID0gW29zLnBhdGguZGlybmFtZShtb2QuX19maWxlX18pXQpAQCAtNzcsNTIgKzc3LDM4IEBACiBkZWYgb3Blbl9wYXRobmFtZShwYXRobmFtZSwgdmVyYm9zZT0wKToKICAgICAiIiJPcGVuIGEgcmVzb3VyY2UgZmlsZSBnaXZlbiBieSBwYXRobmFtZSwgcG9zc2libHkgZGVjb2RpbmcgYW4KICAgICBBcHBsZVNpbmdsZSBmaWxlIiIiCisgICAgIyBObyByZXNvdXJjZSBmb3JrLiBXZSBtYXkgYmUgb24gT1NYLCBhbmQgdGhpcyBtYXkgYmUgZWl0aGVyCisgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQorICAgICMgZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkuCiAgICAgdHJ5OgotICAgICAgICByZWZubyA9IFJlcy5GU3BPcGVuUmVzRmlsZShwYXRobmFtZSwgMSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBSZXMuRXJyb3IpLCBhcmc6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBBdHRyaWJ1dGVFcnJvcikgb3IgYXJnWzBdIGluICgtMzcsIC0zOSk6Ci0gICAgICAgICAgICAjIE5vIHJlc291cmNlIGZvcmsuIFdlIG1heSBiZSBvbiBPU1gsIGFuZCB0aGlzIG1heSBiZSBlaXRoZXIKLSAgICAgICAgICAgICMgYSBkYXRhLWZvcmsgYmFzZWQgcmVzb3VyY2UgZmlsZSBvciBhIEFwcGxlU2luZ2xlIGZpbGUKLSAgICAgICAgICAgICMgZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVmbm8gPSBSZXMuRlNPcGVuUmVzb3VyY2VGaWxlKHBhdGhuYW1lLCB1JycsIDEpCi0gICAgICAgICAgICBleGNlcHQgUmVzLkVycm9yLCBhcmc6Ci0gICAgICAgICAgICAgICAgaWYgYXJnWzBdICE9IC0xOTk6Ci0gICAgICAgICAgICAgICAgICAgICMgLTE5OSBpcyAiYmFkIHJlc291cmNlIG1hcCIKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZm5vCi0gICAgICAgICAgICAjIEZpbmFsbHkgdHJ5IGRlY29kaW5nIGFuIEFwcGxlU2luZ2xlIGZpbGUKLSAgICAgICAgICAgIHBhdGhuYW1lID0gX2RlY29kZShwYXRobmFtZSwgdmVyYm9zZT12ZXJib3NlKQotICAgICAgICAgICAgcmVmbm8gPSBSZXMuRlNPcGVuUmVzb3VyY2VGaWxlKHBhdGhuYW1lLCB1JycsIDEpCi0gICAgICAgIGVsc2U6CisgICAgICAgIHJlZm5vID0gUmVzLkZTT3BlblJlc291cmNlRmlsZShwYXRobmFtZSwgdScnLCAxKQorICAgIGV4Y2VwdCBSZXMuRXJyb3IsIGFyZzoKKyAgICAgICAgaWYgYXJnWzBdICE9IC0xOTk6CisgICAgICAgICAgICAjIC0xOTkgaXMgImJhZCByZXNvdXJjZSBtYXAiCiAgICAgICAgICAgICByYWlzZQotICAgIHJldHVybiByZWZubworICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZWZubworICAgICMgRmluYWxseSB0cnkgZGVjb2RpbmcgYW4gQXBwbGVTaW5nbGUgZmlsZQorICAgIHBhdGhuYW1lID0gX2RlY29kZShwYXRobmFtZSwgdmVyYm9zZT12ZXJib3NlKQorICAgIHJlZm5vID0gUmVzLkZTT3BlblJlc291cmNlRmlsZShwYXRobmFtZSwgdScnLCAxKQogCiBkZWYgcmVzb3VyY2VfcGF0aG5hbWUocGF0aG5hbWUsIHZlcmJvc2U9MCk6CiAgICAgIiIiUmV0dXJuIHRoZSBwYXRobmFtZSBmb3IgYSByZXNvdXJjZSBmaWxlIChlaXRoZXIgREYgb3IgUkYgYmFzZWQpLgogICAgIElmIHRoZSBwYXRobmFtZSBnaXZlbiBhbHJlYWR5IHJlZmVycyB0byBzdWNoIGEgZmlsZSBzaW1wbHkgcmV0dXJuIGl0LAogICAgIG90aGVyd2lzZSBmaXJzdCBkZWNvZGUgaXQuIiIiCisgICAgIyBObyByZXNvdXJjZSBmb3JrLiBXZSBtYXkgYmUgb24gT1NYLCBhbmQgdGhpcyBtYXkgYmUgZWl0aGVyCisgICAgIyBhIGRhdGEtZm9yayBiYXNlZCByZXNvdXJjZSBmaWxlIG9yIGEgQXBwbGVTaW5nbGUgZmlsZQorICAgICMgZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkuCiAgICAgdHJ5OgotICAgICAgICByZWZubyA9IFJlcy5GU3BPcGVuUmVzRmlsZShwYXRobmFtZSwgMSkKLSAgICAgICAgUmVzLkNsb3NlUmVzRmlsZShyZWZubykKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBSZXMuRXJyb3IpLCBhcmc6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBBdHRyaWJ1dGVFcnJvcikgb3IgYXJnWzBdIGluICgtMzcsIC0zOSk6Ci0gICAgICAgICAgICAjIE5vIHJlc291cmNlIGZvcmsuIFdlIG1heSBiZSBvbiBPU1gsIGFuZCB0aGlzIG1heSBiZSBlaXRoZXIKLSAgICAgICAgICAgICMgYSBkYXRhLWZvcmsgYmFzZWQgcmVzb3VyY2UgZmlsZSBvciBhIEFwcGxlU2luZ2xlIGZpbGUKLSAgICAgICAgICAgICMgZnJvbSB0aGUgQ1ZTIHJlcG9zaXRvcnkuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVmbm8gPSBSZXMuRlNPcGVuUmVzb3VyY2VGaWxlKHBhdGhuYW1lLCB1JycsIDEpCi0gICAgICAgICAgICBleGNlcHQgUmVzLkVycm9yLCBhcmc6Ci0gICAgICAgICAgICAgICAgaWYgYXJnWzBdICE9IC0xOTk6Ci0gICAgICAgICAgICAgICAgICAgICMgLTE5OSBpcyAiYmFkIHJlc291cmNlIG1hcCIKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlZm5vCi0gICAgICAgICAgICAjIEZpbmFsbHkgdHJ5IGRlY29kaW5nIGFuIEFwcGxlU2luZ2xlIGZpbGUKLSAgICAgICAgICAgIHBhdGhuYW1lID0gX2RlY29kZShwYXRobmFtZSwgdmVyYm9zZT12ZXJib3NlKQotICAgICAgICBlbHNlOgorICAgICAgICByZWZubyA9IFJlcy5GU09wZW5SZXNvdXJjZUZpbGUocGF0aG5hbWUsIHUnJywgMSkKKyAgICBleGNlcHQgUmVzLkVycm9yLCBhcmc6CisgICAgICAgIGlmIGFyZ1swXSAhPSAtMTk5OgorICAgICAgICAgICAgIyAtMTk5IGlzICJiYWQgcmVzb3VyY2UgbWFwIgogICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVmbm8KKyAgICAjIEZpbmFsbHkgdHJ5IGRlY29kaW5nIGFuIEFwcGxlU2luZ2xlIGZpbGUKKyAgICBwYXRobmFtZSA9IF9kZWNvZGUocGF0aG5hbWUsIHZlcmJvc2U9dmVyYm9zZSkKICAgICByZXR1cm4gcGF0aG5hbWUKIAogZGVmIG9wZW5fZXJyb3JfcmVzb3VyY2UoKToKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW1hYy9waW1wLnB5IGIvTGliL3BsYXQtbWFjL3BpbXAucHkKaW5kZXggNWZjMTZmMC4uOWEzZTgyZSAxMDA2NDQKLS0tIGEvTGliL3BsYXQtbWFjL3BpbXAucHkKKysrIGIvTGliL3BsYXQtbWFjL3BpbXAucHkKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICBzZWxmLnVwZGF0ZSgiRG93bmxvYWRpbmcgJXM6IG9wZW5pbmcgY29ubmVjdGlvbiIgJSB1cmwpCiAgICAgICAgIGtlZXBnb2luZyA9IFRydWUKICAgICAgICAgZG93bmxvYWQgPSB1cmxsaWIyLnVybG9wZW4odXJsKQotICAgICAgICBpZiBkb3dubG9hZC5oZWFkZXJzLmhhc19rZXkoImNvbnRlbnQtbGVuZ3RoIik6CisgICAgICAgIGlmICdjb250ZW50LWxlbmd0aCcgaW4gZG93bmxvYWQuaGVhZGVyczoKICAgICAgICAgICAgIGxlbmd0aCA9IGxvbmcoZG93bmxvYWQuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxlbmd0aCA9IC0xCkBAIC00MjAsNyArNDIwLDcgQEAKIAogICAgICAgICBmb3IgcCBpbiBwYWNrYWdlczoKICAgICAgICAgICAgIHAgPSBkaWN0KHApCi0gICAgICAgICAgICBpZiBwLmhhc19rZXkoJ0Rvd25sb2FkLVVSTCcpOgorICAgICAgICAgICAgaWYgJ0Rvd25sb2FkLVVSTCcgaW4gcDoKICAgICAgICAgICAgICAgICBwWydEb3dubG9hZC1VUkwnXSA9IHVybGxpYi5iYXNlam9pbih1cmwsIHBbJ0Rvd25sb2FkLVVSTCddKQogICAgICAgICAgICAgZmxhdm9yID0gcC5nZXQoJ0ZsYXZvcicpCiAgICAgICAgICAgICBpZiBmbGF2b3IgPT0gJ3NvdXJjZSc6CkBAIC01NTIsOSArNTUyLDkgQEAKICAgICAgICAgaW5zdGFsbGVkIHRocm91Z2ggcGltcCwgcmV0dXJuIHRoZSBuYW1lIGluIChwYXJlbnRoZXNlcykuIiIiCiAKICAgICAgICAgcnYgPSBzZWxmLl9kaWN0WydOYW1lJ10KLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdWZXJzaW9uJyk6CisgICAgICAgIGlmICdWZXJzaW9uJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgcnYgPSBydiArICctJXMnICUgc2VsZi5fZGljdFsnVmVyc2lvbiddCi0gICAgICAgIGlmIHNlbGYuX2RpY3QuaGFzX2tleSgnRmxhdm9yJyk6CisgICAgICAgIGlmICdGbGF2b3InIGluIHNlbGYuX2RpY3Q6CiAgICAgICAgICAgICBydiA9IHJ2ICsgJy0lcycgJSBzZWxmLl9kaWN0WydGbGF2b3InXQogICAgICAgICBpZiBzZWxmLl9kaWN0LmdldCgnRmxhdm9yJykgPT0gJ2hpZGRlbic6CiAgICAgICAgICAgICAjIFBzZXVkby1wYWNrYWdlLCBzaG93IGluIHBhcmVudGhlc2VzCkBAIC02NDcsOSArNjQ3LDkgQEAKICAgICAgICAgICAgICAgICBkZXNjciA9IHN0cihpdGVtKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBuYW1lID0gaXRlbVsnTmFtZSddCi0gICAgICAgICAgICAgICAgaWYgaXRlbS5oYXNfa2V5KCdWZXJzaW9uJyk6CisgICAgICAgICAgICAgICAgaWYgJ1ZlcnNpb24nIGluIGl0ZW06CiAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgJy0nICsgaXRlbVsnVmVyc2lvbiddCi0gICAgICAgICAgICAgICAgaWYgaXRlbS5oYXNfa2V5KCdGbGF2b3InKToKKyAgICAgICAgICAgICAgICBpZiAnRmxhdm9yJyBpbiBpdGVtOgogICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArICctJyArIGl0ZW1bJ0ZsYXZvciddCiAgICAgICAgICAgICAgICAgcGtnID0gc2VsZi5fZGIuZmluZChuYW1lKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwa2c6CkBAIC04MDAsMTAgKzgwMCwxMCBAQAogICAgICAgICBJZiBvdXRwdXQgaXMgZ2l2ZW4gaXQgc2hvdWxkIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgaXQKICAgICAgICAgd2lsbCByZWNlaXZlIGEgbG9nIG9mIHdoYXQgaGFwcGVuZWQuIiIiCiAKLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdJbnN0YWxsLWNvbW1hbmQnKToKKyAgICAgICAgaWYgJ0luc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIHJldHVybiAiJXM6IEJpbmFyeSBwYWNrYWdlIGNhbm5vdCBoYXZlIEluc3RhbGwtY29tbWFuZCIgJSBzZWxmLmZ1bGxuYW1lKCkKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1ByZS1pbnN0YWxsLWNvbW1hbmQnKToKKyAgICAgICAgaWYgJ1ByZS1pbnN0YWxsLWNvbW1hbmQnIGluIHNlbGYuX2RpY3Q6CiAgICAgICAgICAgICBpZiBfY21kKG91dHB1dCwgJy90bXAnLCBzZWxmLl9kaWN0WydQcmUtaW5zdGFsbC1jb21tYW5kJ10pOgogICAgICAgICAgICAgICAgIHJldHVybiAicHJlLWluc3RhbGwgJXM6IHJ1bm5pbmcgXCIlc1wiIGZhaWxlZCIgJSBcCiAgICAgICAgICAgICAgICAgICAgIChzZWxmLmZ1bGxuYW1lKCksIHNlbGYuX2RpY3RbJ1ByZS1pbnN0YWxsLWNvbW1hbmQnXSkKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiAgICAgICAgIHNlbGYuYWZ0ZXJJbnN0YWxsKCkKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJyk6CisgICAgICAgIGlmICdQb3N0LWluc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIGlmIF9jbWQob3V0cHV0LCAnL3RtcCcsIHNlbGYuX2RpY3RbJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJ10pOgogICAgICAgICAgICAgICAgIHJldHVybiAiJXM6IHBvc3QtaW5zdGFsbDogcnVubmluZyBcIiVzXCIgZmFpbGVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZnVsbG5hbWUoKSwgc2VsZi5fZGljdFsnUG9zdC1pbnN0YWxsLWNvbW1hbmQnXSkKQEAgLTg2MSw3ICs4NjEsNyBAQAogICAgICAgICBJZiBvdXRwdXQgaXMgZ2l2ZW4gaXQgc2hvdWxkIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgaXQKICAgICAgICAgd2lsbCByZWNlaXZlIGEgbG9nIG9mIHdoYXQgaGFwcGVuZWQuIiIiCiAKLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdQcmUtaW5zdGFsbC1jb21tYW5kJyk6CisgICAgICAgIGlmICdQcmUtaW5zdGFsbC1jb21tYW5kJyBpbiBzZWxmLl9kaWN0OgogICAgICAgICAgICAgaWYgX2NtZChvdXRwdXQsIHNlbGYuX2J1aWxkRGlybmFtZSwgc2VsZi5fZGljdFsnUHJlLWluc3RhbGwtY29tbWFuZCddKToKICAgICAgICAgICAgICAgICByZXR1cm4gInByZS1pbnN0YWxsICVzOiBydW5uaW5nIFwiJXNcIiBmYWlsZWQiICUgXAogICAgICAgICAgICAgICAgICAgICAoc2VsZi5mdWxsbmFtZSgpLCBzZWxmLl9kaWN0WydQcmUtaW5zdGFsbC1jb21tYW5kJ10pCkBAIC04OTgsNyArODk4LDcgQEAKIAogICAgICAgICBzZWxmLmFmdGVySW5zdGFsbCgpCiAKLSAgICAgICAgaWYgc2VsZi5fZGljdC5oYXNfa2V5KCdQb3N0LWluc3RhbGwtY29tbWFuZCcpOgorICAgICAgICBpZiAnUG9zdC1pbnN0YWxsLWNvbW1hbmQnIGluIHNlbGYuX2RpY3Q6CiAgICAgICAgICAgICBpZiBfY21kKG91dHB1dCwgc2VsZi5fYnVpbGREaXJuYW1lLCBzZWxmLl9kaWN0WydQb3N0LWluc3RhbGwtY29tbWFuZCddKToKICAgICAgICAgICAgICAgICByZXR1cm4gInBvc3QtaW5zdGFsbCAlczogcnVubmluZyBcIiVzXCIgZmFpbGVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZnVsbG5hbWUoKSwgc2VsZi5fZGljdFsnUG9zdC1pbnN0YWxsLWNvbW1hbmQnXSkKQEAgLTkxNiwxMCArOTE2LDEwIEBACiAgICAgICAgIElmIG91dHB1dCBpcyBnaXZlbiBpdCBzaG91bGQgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IGFuZCBpdAogICAgICAgICB3aWxsIHJlY2VpdmUgYSBsb2cgb2Ygd2hhdCBoYXBwZW5lZC4iIiIKIAotICAgICAgICBpZiBzZWxmLl9kaWN0Lmhhc19rZXkoJ1Bvc3QtaW5zdGFsbC1jb21tYW5kJyk6CisgICAgICAgIGlmICdQb3N0LWluc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIHJldHVybiAiJXM6IEluc3RhbGxlciBwYWNrYWdlIGNhbm5vdCBoYXZlIFBvc3QtaW5zdGFsbC1jb21tYW5kIiAlIHNlbGYuZnVsbG5hbWUoKQogCi0gICAgICAgIGlmIHNlbGYuX2RpY3QuaGFzX2tleSgnUHJlLWluc3RhbGwtY29tbWFuZCcpOgorICAgICAgICBpZiAnUHJlLWluc3RhbGwtY29tbWFuZCcgaW4gc2VsZi5fZGljdDoKICAgICAgICAgICAgIGlmIF9jbWQob3V0cHV0LCAnL3RtcCcsIHNlbGYuX2RpY3RbJ1ByZS1pbnN0YWxsLWNvbW1hbmQnXSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJwcmUtaW5zdGFsbCAlczogcnVubmluZyBcIiVzXCIgZmFpbGVkIiAlIFwKICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZnVsbG5hbWUoKSwgc2VsZi5fZGljdFsnUHJlLWluc3RhbGwtY29tbWFuZCddKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtbWFjL3ZpZGVvcmVhZGVyLnB5IGIvTGliL3BsYXQtbWFjL3ZpZGVvcmVhZGVyLnB5CmluZGV4IDRmZTk5M2UuLjlkZDdkNjcgMTAwNjQ0Ci0tLSBhL0xpYi9wbGF0LW1hYy92aWRlb3JlYWRlci5weQorKysgYi9MaWIvcGxhdC1tYWMvdmlkZW9yZWFkZXIucHkKQEAgLTIzOCwxMiArMjM4LDEyIEBACiAgICAgICAgIHdpZHRoID0gc2VsZi52aWRlb2Rlc2NyWyd3aWR0aCddCiAgICAgICAgIGhlaWdodCA9IHNlbGYudmlkZW9kZXNjclsnaGVpZ2h0J10KICAgICAgICAgc3RhcnQgPSAwCi0gICAgICAgIHJ2ID0gJycKKyAgICAgICAgcnYgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZShoZWlnaHQpOgogICAgICAgICAgICAgbmV4dGxpbmUgPSBRZG9mZnMuR2V0UGl4TWFwQnl0ZXMoc2VsZi5waXhtYXAsIHN0YXJ0LCB3aWR0aCo0KQogICAgICAgICAgICAgc3RhcnQgPSBzdGFydCArIHJvd2J5dGVzCi0gICAgICAgICAgICBydiA9IHJ2ICsgbmV4dGxpbmUKLSAgICAgICAgcmV0dXJuIHJ2CisgICAgICAgICAgICBydi5hcHBlbmQobmV4dGxpbmUpCisgICAgICAgIHJldHVybiAnJy5qb2luKHJ2KQogCiBkZWYgcmVhZGVyKHVybCk6CiAgICAgdHJ5OgpAQCAtMjU1LDkgKzI1NSw5IEBACiBkZWYgX3Rlc3QoKToKICAgICBpbXBvcnQgRWFzeURpYWxvZ3MKICAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBpbWcKKyAgICAgICAgZnJvbSBQSUwgaW1wb3J0IEltYWdlCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBpbWcgPSBOb25lCisgICAgICAgIEltYWdlID0gTm9uZQogICAgIGltcG9ydCBNYWNPUwogICAgIFF0LkVudGVyTW92aWVzKCkKICAgICBwYXRoID0gRWFzeURpYWxvZ3MuQXNrRmlsZUZvck9wZW4obWVzc2FnZT0nVmlkZW8gdG8gY29udmVydCcpCkBAIC0yNzcsMTMgKzI3NywxMSBAQAogICAgICAgICBmbmFtZSA9ICdmcmFtZSUwNC40ZC5qcGcnJW51bQogICAgICAgICBudW0gPSBudW0rMQogICAgICAgICBwbmFtZSA9IG9zLnBhdGguam9pbihkc3RkaXIsIGZuYW1lKQotICAgICAgICBpZiBub3QgaW1nOiBwcmludCAnTm90JywKKyAgICAgICAgaWYgbm90IEltYWdlOiBwcmludCAnTm90JywKICAgICAgICAgcHJpbnQgJ1dyaXRpbmcgJXMsIHNpemUgJWR4JWQsICVkIGJ5dGVzJyUoZm5hbWUsIGltZ3csIGltZ2gsIGxlbihkYXRhKSkKLSAgICAgICAgaWYgaW1nOgotICAgICAgICAgICAgd3J0ID0gaW1nLndyaXRlcihpbWdmbXQsIHBuYW1lKQotICAgICAgICAgICAgd3J0LndpZHRoID0gaW1ndwotICAgICAgICAgICAgd3J0LmhlaWdodCA9IGltZ2gKLSAgICAgICAgICAgIHdydC53cml0ZShkYXRhKQorICAgICAgICBpZiBJbWFnZToKKyAgICAgICAgICAgIGltZyA9IEltYWdlLmZyb21zdHJpbmcoIlJHQkEiLCAoaW1ndywgaW1naCksIGRhdGEpCisgICAgICAgICAgICBpbWcuc2F2ZShwbmFtZSwgJ0pQRUcnKQogICAgICAgICAgICAgdGltZXN0YW1wLCBkYXRhID0gcmRyLlJlYWRWaWRlbygpCiAgICAgICAgICAgICBNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZShwbmFtZSwgJ29nbGUnLCAnSlBFRycpCiAgICAgICAgICAgICBpZiBudW0gPiAyMDoKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbiBiL0xpYi9wbGF0LW9zMmVteC9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1zdW5vczUvSU4ucHkgYi9MaWIvcGxhdC1zdW5vczUvSU4ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtc3Vub3M1L1NVTkFVRElPREVWLnB5IGIvTGliL3BsYXQtc3Vub3M1L1NVTkFVRElPREVWLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL0xpYi9wbGF0Zm9ybS5weSBiL0xpYi9wbGF0Zm9ybS5weQppbmRleCBjNTAxNDU2Li4wZjI0NTUzIDEwMDc1NQotLS0gYS9MaWIvcGxhdGZvcm0ucHkKKysrIGIvTGliL3BsYXRmb3JtLnB5CkBAIC0zNCw2ICszNCw3IEBACiAjCiAjICAgIDxzZWUgQ1ZTIGFuZCBTVk4gY2hlY2tpbiBtZXNzYWdlcyBmb3IgaGlzdG9yeT4KICMKKyMgICAgMS4wLjcgLSBhZGRlZCBERVZfTlVMTAogIyAgICAxLjAuNiAtIGFkZGVkIGxpbnV4X2Rpc3RyaWJ1dGlvbigpCiAjICAgIDEuMC41IC0gZml4ZWQgSmF2YSBzdXBwb3J0IHRvIGFsbG93IHJ1bm5pbmcgdGhlIG1vZHVsZSBvbiBKeXRob24KICMgICAgMS4wLjQgLSBhZGRlZCBJcm9uUHl0aG9uIHN1cHBvcnQKQEAgLTExMCwxMCArMTExLDI1IEBACiAKICIiIgogCi1fX3ZlcnNpb25fXyA9ICcxLjAuNicKK19fdmVyc2lvbl9fID0gJzEuMC43JwogCiBpbXBvcnQgc3lzLHN0cmluZyxvcyxyZQogCisjIyMgR2xvYmFscyAmIENvbnN0YW50cworCisjIERldGVybWluZSB0aGUgcGxhdGZvcm0ncyAvZGV2L251bGwgZGV2aWNlCit0cnk6CisgICAgREVWX05VTEwgPSBvcy5kZXZudWxsCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCisgICAgIyBQeXRob24gdmVyc2lvbnMKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgICAgICMgVXNlIHRoZSBvbGQgQ1AvTSBOVUwgYXMgZGV2aWNlIG5hbWUKKyAgICAgICAgREVWX05VTEwgPSAnTlVMJworICAgIGVsc2U6CisgICAgICAgICMgU3RhbmRhcmQgVW5peCB1c2VzIC9kZXYvbnVsbAorICAgICAgICBERVZfTlVMTCA9ICcvZGV2L251bGwnCisKICMjIyBQbGF0Zm9ybSBzcGVjaWZpYyBBUElzCiAKIF9saWJjX3NlYXJjaCA9IHJlLmNvbXBpbGUocicoX19saWJjX2luaXQpJwpAQCAtMjcyLDI0ICsyODgsNiBAQAogICAgICAgICAgICAgaWQgPSBsWzFdCiAgICAgcmV0dXJuICcnLCB2ZXJzaW9uLCBpZAogCi1kZWYgX3Rlc3RfcGFyc2VfcmVsZWFzZV9maWxlKCk6Ci0KLSAgICBmb3IgaW5wdXQsIG91dHB1dCBpbiAoCi0gICAgICAgICMgRXhhbXBsZXMgb2YgcmVsZWFzZSBmaWxlIGNvbnRlbnRzOgotICAgICAgICAoJ1N1U0UgTGludXggOS4zICh4ODYtNjQpJywgKCdTdVNFIExpbnV4ICcsICc5LjMnLCAneDg2LTY0JykpCi0gICAgICAgICgnU1VTRSBMSU5VWCAxMC4xIChYODYtNjQpJywgKCdTVVNFIExJTlVYICcsICcxMC4xJywgJ1g4Ni02NCcpKQotICAgICAgICAoJ1NVU0UgTElOVVggMTAuMSAoaTU4NiknLCAoJ1NVU0UgTElOVVggJywgJzEwLjEnLCAnaTU4NicpKQotICAgICAgICAoJ0ZlZG9yYSBDb3JlIHJlbGVhc2UgNSAoQm9yZGVhdXgpJywgKCdGZWRvcmEgQ29yZScsICc1JywgJ0JvcmRlYXV4JykpCi0gICAgICAgICgnUmVkIEhhdCBMaW51eCByZWxlYXNlIDguMCAoUHN5Y2hlKScsICgnUmVkIEhhdCBMaW51eCcsICc4LjAnLCAnUHN5Y2hlJykpCi0gICAgICAgICgnUmVkIEhhdCBMaW51eCByZWxlYXNlIDkgKFNocmlrZSknLCAoJ1JlZCBIYXQgTGludXgnLCAnOScsICdTaHJpa2UnKSkKLSAgICAgICAgKCdSZWQgSGF0IEVudGVycHJpc2UgTGludXggcmVsZWFzZSA0IChOYWhhbnQpJywgKCdSZWQgSGF0IEVudGVycHJpc2UgTGludXgnLCAnNCcsICdOYWhhbnQnKSkKLSAgICAgICAgKCdDZW50T1MgcmVsZWFzZSA0JywgKCdDZW50T1MnLCAnNCcsIE5vbmUpKQotICAgICAgICAoJ1JvY2tzIHJlbGVhc2UgNC4yLjEgKEN5ZG9uaWEpJywgKCdSb2NrcycsICc0LjIuMScsICdDeWRvbmlhJykpCi0gICAgICAgICk6Ci0gICAgICAgIHBhcnNlZCA9IF9wYXJzZV9yZWxlYXNlX2ZpbGUoaW5wdXQpCi0gICAgICAgIGlmIHBhcnNlZCAhPSBvdXRwdXQ6Ci0gICAgICAgICAgICBwcmludCAoaW5wdXQsIHBhcnNlZCkKLQogZGVmIGxpbnV4X2Rpc3RyaWJ1dGlvbihkaXN0bmFtZT0nJywgdmVyc2lvbj0nJywgaWQ9JycsCiAKICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkX2Rpc3RzPV9zdXBwb3J0ZWRfZGlzdHMsCkBAIC00NzAsNyArNDY4LDE2IEBACiAKIF92ZXJfb3V0cHV0ID0gcmUuY29tcGlsZShyJyg/OihbXHcgXSspIChbXHcuXSspICcKICAgICAgICAgICAgICAgICAgICAgICAgICAnLionCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb24gKFtcZC5dKykpJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXFsuKiAoW1xkLl0rKVxdKScpCisKKyMgRXhhbXBsZXMgb2YgVkVSIGNvbW1hbmQgb3V0cHV0OgorIworIyAgIFdpbmRvd3MgMjAwMDogIE1pY3Jvc29mdCBXaW5kb3dzIDIwMDAgW1ZlcnNpb24gNS4wMC4yMTk1XQorIyAgIFdpbmRvd3MgWFA6ICAgIE1pY3Jvc29mdCBXaW5kb3dzIFhQIFtWZXJzaW9uIDUuMS4yNjAwXQorIyAgIFdpbmRvd3MgVmlzdGE6IE1pY3Jvc29mdCBXaW5kb3dzIFtWZXJzaW9uIDYuMC42MDAyXQorIworIyBOb3RlIHRoYXQgdGhlICJWZXJzaW9uIiBzdHJpbmcgZ2V0cyBsb2NhbGl6ZWQgb24gZGlmZmVyZW50CisjIFdpbmRvd3MgdmVyc2lvbnMuCiAKIGRlZiBfc3lzY21kX3ZlcihzeXN0ZW09JycsIHJlbGVhc2U9JycsIHZlcnNpb249JycsCiAKQEAgLTYwOSw2ICs2MTYsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGlmIGNzZFs6MTNdID09ICdTZXJ2aWNlIFBhY2sgJzoKICAgICAgICAgICAgIGNzZCA9ICdTUCcgKyBjc2RbMTM6XQorCiAgICAgaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUzoKICAgICAgICAgcmVna2V5ID0gJ1NPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uJwogICAgICAgICAjIFRyeSB0byBndWVzcyB0aGUgcmVsZWFzZSBuYW1lCkBAIC02MjMsNiArNjMxLDcgQEAKICAgICAgICAgICAgICAgICByZWxlYXNlID0gJ3Bvc3RNZScKICAgICAgICAgZWxpZiBtYWogPT0gNToKICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwMCcKKwogICAgIGVsaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ6CiAgICAgICAgIHJlZ2tleSA9ICdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvbicKICAgICAgICAgaWYgbWFqIDw9IDQ6CkBAIC02NjYsNiArNjc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDA4U2VydmVyUjInCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAncG9zdDIwMDhTZXJ2ZXInCisKICAgICBlbHNlOgogICAgICAgICBpZiBub3QgcmVsZWFzZToKICAgICAgICAgICAgICMgRS5nLiBXaW4zLjEgd2l0aCB3aW4zMnMKQEAgLTk4OSw3ICs5OTksNyBAQAogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6Ci0gICAgICAgIGYgPSBvcy5wb3BlbigndW5hbWUgJXMgMj4gL2Rldi9udWxsJyAlIG9wdGlvbikKKyAgICAgICAgZiA9IG9zLnBvcGVuKCd1bmFtZSAlcyAyPiAlcycgJSAob3B0aW9uLCBERVZfTlVMTCkpCiAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gc3RyaW5nLnN0cmlwKGYucmVhZCgpKQpAQCAtMTAxNCw3ICsxMDI0LDcgQEAKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0YXJnZXQgPSBfZm9sbG93X3N5bWxpbmtzKHRhcmdldCkucmVwbGFjZSgnIicsICdcXCInKQogICAgIHRyeToKLSAgICAgICAgZiA9IG9zLnBvcGVuKCdmaWxlICIlcyIgMj4gL2Rldi9udWxsJyAlIHRhcmdldCkKKyAgICAgICAgZiA9IG9zLnBvcGVuKCdmaWxlICIlcyIgMj4gJXMnICUgKHRhcmdldCwgREVWX05VTEwpKQogICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IHN0cmluZy5zdHJpcChmLnJlYWQoKSkKQEAgLTExNjEsNyArMTE3MSw3IEBACiAgICAgICAgICAgICBub2RlID0gX25vZGUoKQogICAgICAgICAgICAgbWFjaGluZSA9ICcnCiAKLSAgICAgICAgdXNlX3N5c2NtZF92ZXIgPSAwMQorICAgICAgICB1c2Vfc3lzY21kX3ZlciA9IDEKIAogICAgICAgICAjIFRyeSB3aW4zMl92ZXIoKSBvbiB3aW4zMiBwbGF0Zm9ybXMKICAgICAgICAgaWYgc3lzdGVtID09ICd3aW4zMic6CkBAIC0xMTczLDcgKzExODMsMTEgQEAKICAgICAgICAgICAgICMgaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi84ODg3MzEgYW5kCiAgICAgICAgICAgICAjIGh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS9yaWNrX2xpdmVseS9NQU5VQUxTL0VOVi9NU1dJTi9QUk9DRVNTSS5IVE0KICAgICAgICAgICAgIGlmIG5vdCBtYWNoaW5lOgotICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRScsICcnKQorICAgICAgICAgICAgICAgICMgV09XNjQgcHJvY2Vzc2VzIG1hc2sgdGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBpZiAiUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCJQUk9DRVNTT1JfQVJDSElURVc2NDMyIiwgJycpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfQVJDSElURUNUVVJFJywgJycpCiAgICAgICAgICAgICBpZiBub3QgcHJvY2Vzc29yOgogICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9IG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfSURFTlRJRklFUicsIG1hY2hpbmUpCiAKQEAgLTEyMTMsMTAgKzEyMjcsNiBAQAogICAgICAgICAgICAgaWYgbm90IHZlcnNpb246CiAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlbmRvcgogCi0gICAgICAgIGVsaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIHJlbGVhc2UsKHZlcnNpb24sc3RhZ2Usbm9ucmVsKSxtYWNoaW5lID0gbWFjX3ZlcigpCi0gICAgICAgICAgICBzeXN0ZW0gPSAnTWFjT1MnCi0KICAgICAjIFN5c3RlbSBzcGVjaWZpYyBleHRlbnNpb25zCiAgICAgaWYgc3lzdGVtID09ICdPcGVuVk1TJzoKICAgICAgICAgIyBPcGVuVk1TIHNlZW1zIHRvIGhhdmUgcmVsZWFzZSBhbmQgdmVyc2lvbiBtaXhlZCB1cApAQCAtMTMyNywxNSArMTMzNywxNyBAQAogICAgICdcKCM/KFteLF0rKSxccyooW1x3IF0rKSxccyooW1x3IDpdKylcKVxzKicKICAgICAnXFsoW15cXV0rKVxdPycpCiAKLV9qeXRob25fc3lzX3ZlcnNpb25fcGFyc2VyID0gcmUuY29tcGlsZSgKLSAgICByJyhbXGRcLl0rKScpCi0KIF9pcm9ucHl0aG9uX3N5c192ZXJzaW9uX3BhcnNlciA9IHJlLmNvbXBpbGUoCiAgICAgcidJcm9uUHl0aG9uXHMqJwogICAgICcoW1xkXC5dKyknCiAgICAgJyg/OiBcKChbXGRcLl0rKVwpKT8nCiAgICAgJyBvbiAoLk5FVCBbXGRcLl0rKScpCiAKK19weXB5X3N5c192ZXJzaW9uX3BhcnNlciA9IHJlLmNvbXBpbGUoCisgICAgcicoW1x3LitdKylccyonCisgICAgJ1woIz8oW14sXSspLFxzKihbXHcgXSspLFxzKihbXHcgOl0rKVwpXHMqJworICAgICdcW1B5UHkgW15cXV0rXF0/JykKKwogX3N5c192ZXJzaW9uX2NhY2hlID0ge30KIAogZGVmIF9zeXNfdmVyc2lvbihzeXNfdmVyc2lvbj1Ob25lKToKQEAgLTEzNzcsMjUgKzEzODksMjkgQEAKICAgICAgICAgICAgICAgICAnZmFpbGVkIHRvIHBhcnNlIElyb25QeXRob24gc3lzLnZlcnNpb246ICVzJyAlCiAgICAgICAgICAgICAgICAgcmVwcihzeXNfdmVyc2lvbikpCiAgICAgICAgIHZlcnNpb24sIGFsdF92ZXJzaW9uLCBjb21waWxlciA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgIGJyYW5jaCA9ICcnCi0gICAgICAgIHJldmlzaW9uID0gJycKICAgICAgICAgYnVpbGRubyA9ICcnCiAgICAgICAgIGJ1aWxkZGF0ZSA9ICcnCiAKICAgICBlbGlmIHN5cy5wbGF0Zm9ybVs6NF0gPT0gJ2phdmEnOgogICAgICAgICAjIEp5dGhvbgogICAgICAgICBuYW1lID0gJ0p5dGhvbicKLSAgICAgICAgbWF0Y2ggPSBfanl0aG9uX3N5c192ZXJzaW9uX3BhcnNlci5tYXRjaChzeXNfdmVyc2lvbikKKyAgICAgICAgbWF0Y2ggPSBfc3lzX3ZlcnNpb25fcGFyc2VyLm1hdGNoKHN5c192ZXJzaW9uKQogICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAnZmFpbGVkIHRvIHBhcnNlIEp5dGhvbiBzeXMudmVyc2lvbjogJXMnICUKICAgICAgICAgICAgICAgICByZXByKHN5c192ZXJzaW9uKSkKLSAgICAgICAgdmVyc2lvbiwgPSBtYXRjaC5ncm91cHMoKQotICAgICAgICBicmFuY2ggPSAnJwotICAgICAgICByZXZpc2lvbiA9ICcnCisgICAgICAgIHZlcnNpb24sIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgYnVpbGR0aW1lLCBfID0gbWF0Y2guZ3JvdXBzKCkKICAgICAgICAgY29tcGlsZXIgPSBzeXMucGxhdGZvcm0KLSAgICAgICAgYnVpbGRubyA9ICcnCi0gICAgICAgIGJ1aWxkZGF0ZSA9ICcnCisKKyAgICBlbGlmICJQeVB5IiBpbiBzeXNfdmVyc2lvbjoKKyAgICAgICAgIyBQeVB5CisgICAgICAgIG5hbWUgPSAiUHlQeSIKKyAgICAgICAgbWF0Y2ggPSBfcHlweV9zeXNfdmVyc2lvbl9wYXJzZXIubWF0Y2goc3lzX3ZlcnNpb24pCisgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmYWlsZWQgdG8gcGFyc2UgUHlQeSBzeXMudmVyc2lvbjogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihzeXNfdmVyc2lvbikpCisgICAgICAgIHZlcnNpb24sIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgYnVpbGR0aW1lID0gbWF0Y2guZ3JvdXBzKCkKKyAgICAgICAgY29tcGlsZXIgPSAiIgogCiAgICAgZWxzZToKICAgICAgICAgIyBDUHl0aG9uCkBAIC0xNDA2LDE1ICsxNDIyLDE2IEBACiAgICAgICAgICAgICAgICAgcmVwcihzeXNfdmVyc2lvbikpCiAgICAgICAgIHZlcnNpb24sIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgYnVpbGR0aW1lLCBjb21waWxlciA9IFwKICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzKCkKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICdzdWJ2ZXJzaW9uJyk6Ci0gICAgICAgICAgICAjIHN5cy5zdWJ2ZXJzaW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMi41Ci0gICAgICAgICAgICBuYW1lLCBicmFuY2gsIHJldmlzaW9uID0gc3lzLnN1YnZlcnNpb24KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5hbWUgPSAnQ1B5dGhvbicKLSAgICAgICAgICAgIGJyYW5jaCA9ICcnCi0gICAgICAgICAgICByZXZpc2lvbiA9ICcnCisgICAgICAgIG5hbWUgPSAnQ1B5dGhvbicKICAgICAgICAgYnVpbGRkYXRlID0gYnVpbGRkYXRlICsgJyAnICsgYnVpbGR0aW1lCiAKKyAgICBpZiBoYXNhdHRyKHN5cywgJ3N1YnZlcnNpb24nKToKKyAgICAgICAgIyBzeXMuc3VidmVyc2lvbiB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuNQorICAgICAgICBfLCBicmFuY2gsIHJldmlzaW9uID0gc3lzLnN1YnZlcnNpb24KKyAgICBlbHNlOgorICAgICAgICBicmFuY2ggPSAnJworICAgICAgICByZXZpc2lvbiA9ICcnCisKICAgICAjIEFkZCB0aGUgcGF0Y2hsZXZlbCB2ZXJzaW9uIGlmIG1pc3NpbmcKICAgICBsID0gc3RyaW5nLnNwbGl0KHZlcnNpb24sICcuJykKICAgICBpZiBsZW4obCkgPT0gMjoKQEAgLTE0MjYsMjEgKzE0NDMsNiBAQAogICAgIF9zeXNfdmVyc2lvbl9jYWNoZVtzeXNfdmVyc2lvbl0gPSByZXN1bHQKICAgICByZXR1cm4gcmVzdWx0CiAKLWRlZiBfdGVzdF9zeXNfdmVyc2lvbigpOgotCi0gICAgX3N5c192ZXJzaW9uX2NhY2hlLmNsZWFyKCkKLSAgICBmb3IgaW5wdXQsIG91dHB1dCBpbiAoCi0gICAgICAgICgnMi40LjMgKCMxLCBKdW4gMjEgMjAwNiwgMTM6NTQ6MjEpIFxuW0dDQyAzLjMuNCAocHJlIDMuMy41IDIwMDQwODA5KV0nLAotICAgICAgICAgKCdDUHl0aG9uJywgJzIuNC4zJywgJycsICcnLCAnMScsICdKdW4gMjEgMjAwNiAxMzo1NDoyMScsICdHQ0MgMy4zLjQgKHByZSAzLjMuNSAyMDA0MDgwOSknKSksCi0gICAgICAgICgnSXJvblB5dGhvbiAxLjAuNjA4MTYgb24gLk5FVCAyLjAuNTA3MjcuNDInLAotICAgICAgICAgKCdJcm9uUHl0aG9uJywgJzEuMC42MDgxNicsICcnLCAnJywgJycsICcnLCAnLk5FVCAyLjAuNTA3MjcuNDInKSksCi0gICAgICAgICgnSXJvblB5dGhvbiAxLjAgKDEuMC42MTAwNS4xOTc3KSBvbiAuTkVUIDIuMC41MDcyNy40MicsCi0gICAgICAgICAoJ0lyb25QeXRob24nLCAnMS4wLjAnLCAnJywgJycsICcnLCAnJywgJy5ORVQgMi4wLjUwNzI3LjQyJykpLAotICAgICAgICApOgotICAgICAgICBwYXJzZWQgPSBfc3lzX3ZlcnNpb24oaW5wdXQpCi0gICAgICAgIGlmIHBhcnNlZCAhPSBvdXRwdXQ6Ci0gICAgICAgICAgICBwcmludCAoaW5wdXQsIHBhcnNlZCkKLQogZGVmIHB5dGhvbl9pbXBsZW1lbnRhdGlvbigpOgogCiAgICAgIiIiIFJldHVybnMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL0xpYi9wbGlzdGxpYi5weSBiL0xpYi9wbGlzdGxpYi5weQppbmRleCAwYjE3NDhjLi41MTk0NGVlIDEwMDY0NAotLS0gYS9MaWIvcGxpc3RsaWIucHkKKysrIGIvTGliL3BsaXN0bGliLnB5CkBAIC0yMjQsNyArMjI0LDcgQEAKIAogUExJU1RIRUFERVIgPSAiIiJcCiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KICIiIgogCiBjbGFzcyBQbGlzdFdyaXRlcihEdW1iWE1MV3JpdGVyKToKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IDZlMmVlMTc1Li5hYWUzOGQ1IDEwMDY0NAotLS0gYS9MaWIvcG9zaXhwYXRoLnB5CisrKyBiL0xpYi9wb3NpeHBhdGgucHkKQEAgLTExLDYgKzExLDcgQEAKICIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKIGltcG9ydCBzdGF0CiBpbXBvcnQgZ2VuZXJpY3BhdGgKIGltcG9ydCB3YXJuaW5ncwpAQCAtMTM5LDcgKzE0MCw3IEBACiBkZWYgbGV4aXN0cyhwYXRoKToKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgotICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgICAgIG9zLmxzdGF0KHBhdGgpCiAgICAgZXhjZXB0IG9zLmVycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQpAQCAtMzc5LDEyICszODAsMTIgQEAKICAgICB1bnRpbCB3ZSBlaXRoZXIgYXJyaXZlIGF0IHNvbWV0aGluZyB0aGF0IGlzbid0IGEgc3ltbGluaywgb3IKICAgICBlbmNvdW50ZXIgYSBwYXRoIHdlJ3ZlIHNlZW4gYmVmb3JlIChtZWFuaW5nIHRoYXQgdGhlcmUncyBhIGxvb3ApLgogICAgICIiIgotICAgIHBhdGhzX3NlZW4gPSBbXQorICAgIHBhdGhzX3NlZW4gPSBzZXQoKQogICAgIHdoaWxlIGlzbGluayhwYXRoKToKICAgICAgICAgaWYgcGF0aCBpbiBwYXRoc19zZWVuOgogICAgICAgICAgICAgIyBBbHJlYWR5IHNlZW4gdGhpcyBwYXRoLCBzbyB3ZSBtdXN0IGhhdmUgYSBzeW1saW5rIGxvb3AKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHBhdGhzX3NlZW4uYXBwZW5kKHBhdGgpCisgICAgICAgIHBhdGhzX3NlZW4uYWRkKHBhdGgpCiAgICAgICAgICMgUmVzb2x2ZSB3aGVyZSB0aGUgbGluayBwb2ludHMgdG8KICAgICAgICAgcmVzb2x2ZWQgPSBvcy5yZWFkbGluayhwYXRoKQogICAgICAgICBpZiBub3QgaXNhYnMocmVzb2x2ZWQpOgpAQCAtMzk0LDcgKzM5NSw3IEBACiAgICAgICAgICAgICBwYXRoID0gbm9ybXBhdGgocmVzb2x2ZWQpCiAgICAgcmV0dXJuIHBhdGgKIAotc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSBGYWxzZQorc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSAoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nKQogCiBkZWYgcmVscGF0aChwYXRoLCBzdGFydD1jdXJkaXIpOgogICAgICIiIlJldHVybiBhIHJlbGF0aXZlIHZlcnNpb24gb2YgYSBwYXRoIiIiCkBAIC00MDIsOCArNDAzLDggQEAKICAgICBpZiBub3QgcGF0aDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gcGF0aCBzcGVjaWZpZWQiKQogCi0gICAgc3RhcnRfbGlzdCA9IGFic3BhdGgoc3RhcnQpLnNwbGl0KHNlcCkKLSAgICBwYXRoX2xpc3QgPSBhYnNwYXRoKHBhdGgpLnNwbGl0KHNlcCkKKyAgICBzdGFydF9saXN0ID0gW3ggZm9yIHggaW4gYWJzcGF0aChzdGFydCkuc3BsaXQoc2VwKSBpZiB4XQorICAgIHBhdGhfbGlzdCA9IFt4IGZvciB4IGluIGFic3BhdGgocGF0aCkuc3BsaXQoc2VwKSBpZiB4XQogCiAgICAgIyBXb3JrIG91dCBob3cgbXVjaCBvZiB0aGUgZmlsZXBhdGggaXMgc2hhcmVkIGJ5IHN0YXJ0IGFuZCBwYXRoLgogICAgIGkgPSBsZW4oY29tbW9ucHJlZml4KFtzdGFydF9saXN0LCBwYXRoX2xpc3RdKSkKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggM2FmODQyNy4uMmQxZjQ4NiAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gcHJvZi5wcmludF9zdGF0cyhzb3J0KQogCi1kZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lKToKK2RlZiBydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lPU5vbmUsIHNvcnQ9LTEpOgogICAgICIiIlJ1biBzdGF0ZW1lbnQgdW5kZXIgcHJvZmlsZXIsIHN1cHBseWluZyB5b3VyIG93biBnbG9iYWxzIGFuZCBsb2NhbHMsCiAgICAgb3B0aW9uYWxseSBzYXZpbmcgcmVzdWx0cyBpbiBmaWxlbmFtZS4KIApAQCAtOTAsMTggKzkwLDEzIEBACiAgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CiAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gcHJvZi5wcmludF9zdGF0cygpCisgICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiBkZWYgaGVscCgpOgogICAgIHByaW50ICJEb2N1bWVudGF0aW9uIGZvciB0aGUgcHJvZmlsZSBtb2R1bGUgY2FuIGJlIGZvdW5kICIKICAgICBwcmludCAiaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSwgc2VjdGlvbiAnVGhlIFB5dGhvbiBQcm9maWxlcicuIgogCi1pZiBvcy5uYW1lID09ICJtYWMiOgotICAgIGltcG9ydCBNYWNPUwotICAgIGRlZiBfZ2V0X3RpbWVfbWFjKHRpbWVyPU1hY09TLkdldFRpY2tzKToKLSAgICAgICAgcmV0dXJuIHRpbWVyKCkgLyA2MC4wCi0KIGlmIGhhc2F0dHIob3MsICJ0aW1lcyIpOgogICAgIGRlZiBfZ2V0X3RpbWVfdGltZXModGltZXI9b3MudGltZXMpOgogICAgICAgICB0ID0gdGltZXIoKQpAQCAtMTc4LDEwICsxNzMsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYudGltZXIgPSByZXNnZXRydXNhZ2UKICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIgPSBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgICAgICAgICAgc2VsZi5nZXRfdGltZSA9IF9nZXRfdGltZV9yZXNvdXJjZQotICAgICAgICAgICAgZWxpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICAgICAgICAgIHNlbGYudGltZXIgPSBNYWNPUy5HZXRUaWNrcwotICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2hlciA9IHNlbGYudHJhY2VfZGlzcGF0Y2hfbWFjCi0gICAgICAgICAgICAgICAgc2VsZi5nZXRfdGltZSA9IF9nZXRfdGltZV9tYWMKICAgICAgICAgICAgIGVsaWYgaGFzYXR0cih0aW1lLCAnY2xvY2snKToKICAgICAgICAgICAgICAgICBzZWxmLnRpbWVyID0gc2VsZi5nZXRfdGltZSA9IHRpbWUuY2xvY2sKICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIgPSBzZWxmLnRyYWNlX2Rpc3BhdGNoX2kKQEAgLTU5OCwxOCArNTg5LDI3IEBACiAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0ZmlsZScsIGRlc3Q9Im91dGZpbGUiLAogICAgICAgICBoZWxwPSJTYXZlIHN0YXRzIHRvIDxvdXRmaWxlPiIsIGRlZmF1bHQ9Tm9uZSkKICAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zb3J0JywgZGVzdD0ic29ydCIsCi0gICAgICAgIGhlbHA9IlNvcnQgb3JkZXIgd2hlbiBwcmludGluZyB0byBzdGRvdXQsIGJhc2VkIG9uIHBzdGF0cy5TdGF0cyBjbGFzcyIsIGRlZmF1bHQ9LTEpCisgICAgICAgIGhlbHA9IlNvcnQgb3JkZXIgd2hlbiBwcmludGluZyB0byBzdGRvdXQsIGJhc2VkIG9uIHBzdGF0cy5TdGF0cyBjbGFzcyIsCisgICAgICAgIGRlZmF1bHQ9LTEpCiAKICAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdOgogICAgICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgICAgICBzeXMuZXhpdCgyKQogCiAgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHN5cy5hcmd2WzpdID0gYXJncwogCi0gICAgaWYgKGxlbihhcmdzKSA+IDApOgotICAgICAgICBzeXMuYXJndls6XSA9IGFyZ3MKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpCi0gICAgICAgIHJ1bignZXhlY2ZpbGUoJXIpJyAlIChzeXMuYXJndlswXSwpLCBvcHRpb25zLm91dGZpbGUsIG9wdGlvbnMuc29ydCkKKyAgICBpZiBsZW4oYXJncykgPiAwOgorICAgICAgICBwcm9nbmFtZSA9IGFyZ3NbMF0KKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShwcm9nbmFtZSkpCisgICAgICAgIHdpdGggb3Blbihwcm9nbmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShmcC5yZWFkKCksIHByb2duYW1lLCAnZXhlYycpCisgICAgICAgIGdsb2JzID0geworICAgICAgICAgICAgJ19fZmlsZV9fJzogcHJvZ25hbWUsCisgICAgICAgICAgICAnX19uYW1lX18nOiAnX19tYWluX18nLAorICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogTm9uZSwKKyAgICAgICAgfQorICAgICAgICBydW5jdHgoY29kZSwgZ2xvYnMsIE5vbmUsIG9wdGlvbnMub3V0ZmlsZSwgb3B0aW9ucy5zb3J0KQogICAgIGVsc2U6CiAgICAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCiAgICAgcmV0dXJuIHBhcnNlcgpkaWZmIC0tZ2l0IGEvTGliL3BzdGF0cy5weSBiL0xpYi9wc3RhdHMucHkKaW5kZXggNjE5ZjFjZi4uOWNjZDc1YiAxMDA2NDQKLS0tIGEvTGliL3BzdGF0cy5weQorKysgYi9MaWIvcHN0YXRzLnB5CkBAIC01LDcgKzUsNyBAQAogIyBCYXNlZCBvbiBwcmlvciBwcm9maWxlIG1vZHVsZSBieSBTam9lcmQgTXVsbGVuZGVyLi4uCiAjICAgd2hpY2ggd2FzIGhhY2tlZCBzb21ld2hhdCBieTogR3VpZG8gdmFuIFJvc3N1bQogIwotIyBzZWUgcHJvZmlsZS5kb2MgYW5kIHByb2ZpbGUucHkgZm9yIG1vcmUgaW5mby4KKyMgc2VlIHByb2ZpbGUucHkgZm9yIG1vcmUgaW5mby4KIAogIyBDb3B5cmlnaHQgMTk5NCwgYnkgSW5mb1NlZWsgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIFdyaXR0ZW4gYnkgSmFtZXMgUm9za2luZApAQCAtMzcsNiArMzcsNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgcmUKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBjbXBfdG9fa2V5CiAKIF9fYWxsX18gPSBbIlN0YXRzIl0KIApAQCAtNjUsNyArNjYsNyBAQAogICAgIG1pbm9yIGtleSBvZiAndGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uJy4gIExvb2sgYXQgdGhlIHR3byB0YWJsZXMgaW4KICAgICBzb3J0X3N0YXRzKCkgYW5kIGdldF9zb3J0X2FyZ19kZWZzKHNlbGYpIGZvciBtb3JlIGV4YW1wbGVzLgogCi0gICAgQWxsIG1ldGhvZHMgcmV0dXJuIHNlbGYsICBzbyB5b3UgY2FuIHN0cmluZyB0b2dldGhlciBjb21tYW5kcyBsaWtlOgorICAgIEFsbCBtZXRob2RzIHJldHVybiBzZWxmLCBzbyB5b3UgY2FuIHN0cmluZyB0b2dldGhlciBjb21tYW5kcyBsaWtlOgogICAgICAgICBTdGF0cygnZm9vJywgJ2dvbycpLnN0cmlwX2RpcnMoKS5zb3J0X3N0YXRzKCdjYWxscycpLlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cyg1KS5wcmludF9jYWxsZXJzKDUpCiAgICAgIiIiCkBAIC0yMTcsMTIgKzIxOCwxMiBAQAogICAgICAgICBpZiBub3QgZmllbGQ6CiAgICAgICAgICAgICBzZWxmLmZjbl9saXN0ID0gMAogICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgaWYgbGVuKGZpZWxkKSA9PSAxIGFuZCB0eXBlKGZpZWxkWzBdKSA9PSB0eXBlKDEpOgorICAgICAgICBpZiBsZW4oZmllbGQpID09IDEgYW5kIGlzaW5zdGFuY2UoZmllbGRbMF0sIChpbnQsIGxvbmcpKToKICAgICAgICAgICAgICMgQmUgY29tcGF0aWJsZSB3aXRoIG9sZCBwcm9maWxlcgogICAgICAgICAgICAgZmllbGQgPSBbIHstMTogInN0ZG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgIDA6ImNhbGxzIiwKLSAgICAgICAgICAgICAgICAgICAgICAxOiJ0aW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAyOiAiY3VtdWxhdGl2ZSIgfSAgWyBmaWVsZFswXSBdIF0KKyAgICAgICAgICAgICAgICAgICAgICAgMDogICJjYWxscyIsCisgICAgICAgICAgICAgICAgICAgICAgIDE6ICAidGltZSIsCisgICAgICAgICAgICAgICAgICAgICAgIDI6ICAiY3VtdWxhdGl2ZSJ9W2ZpZWxkWzBdXSBdCiAKICAgICAgICAgc29ydF9hcmdfZGVmcyA9IHNlbGYuZ2V0X3NvcnRfYXJnX2RlZnMoKQogICAgICAgICBzb3J0X3R1cGxlID0gKCkKQEAgLTIzOCw3ICsyMzksNyBAQAogICAgICAgICAgICAgc3RhdHNfbGlzdC5hcHBlbmQoKGNjLCBuYywgdHQsIGN0KSArIGZ1bmMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNfc3RkX3N0cmluZyhmdW5jKSwgZnVuYykpCiAKLSAgICAgICAgc3RhdHNfbGlzdC5zb3J0KGtleT1DbXBUb0tleShUdXBsZUNvbXAoc29ydF90dXBsZSkuY29tcGFyZSkpCisgICAgICAgIHN0YXRzX2xpc3Quc29ydChrZXk9Y21wX3RvX2tleShUdXBsZUNvbXAoc29ydF90dXBsZSkuY29tcGFyZSkpCiAKICAgICAgICAgc2VsZi5mY25fbGlzdCA9IGZjbl9saXN0ID0gW10KICAgICAgICAgZm9yIHR1cGxlIGluIHN0YXRzX2xpc3Q6CkBAIC0yOTksNDggKzMwMCw1MyBAQAogCiAgICAgZGVmIGV2YWxfcHJpbnRfYW1vdW50KHNlbGYsIHNlbCwgbGlzdCwgbXNnKToKICAgICAgICAgbmV3X2xpc3QgPSBsaXN0Ci0gICAgICAgIGlmIHR5cGUoc2VsKSA9PSB0eXBlKCIiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWwsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJleCA9IHJlLmNvbXBpbGUoc2VsKQorICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yOgorICAgICAgICAgICAgICAgIG1zZyArPSAiICAgPEludmFsaWQgcmVndWxhciBleHByZXNzaW9uICVyPlxuIiAlIHNlbAorICAgICAgICAgICAgICAgIHJldHVybiBuZXdfbGlzdCwgbXNnCiAgICAgICAgICAgICBuZXdfbGlzdCA9IFtdCiAgICAgICAgICAgICBmb3IgZnVuYyBpbiBsaXN0OgotICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaChzZWwsIGZ1bmNfc3RkX3N0cmluZyhmdW5jKSk6CisgICAgICAgICAgICAgICAgaWYgcmV4LnNlYXJjaChmdW5jX3N0ZF9zdHJpbmcoZnVuYykpOgogICAgICAgICAgICAgICAgICAgICBuZXdfbGlzdC5hcHBlbmQoZnVuYykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvdW50ID0gbGVuKGxpc3QpCi0gICAgICAgICAgICBpZiB0eXBlKHNlbCkgPT0gdHlwZSgxLjApIGFuZCAwLjAgPD0gc2VsIDwgMS4wOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWwsIGZsb2F0KSBhbmQgMC4wIDw9IHNlbCA8IDEuMDoKICAgICAgICAgICAgICAgICBjb3VudCA9IGludChjb3VudCAqIHNlbCArIC41KQogICAgICAgICAgICAgICAgIG5ld19saXN0ID0gbGlzdFs6Y291bnRdCi0gICAgICAgICAgICBlbGlmIHR5cGUoc2VsKSA9PSB0eXBlKDEpIGFuZCAwIDw9IHNlbCA8IGNvdW50OgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbCwgKGludCwgbG9uZykpIGFuZCAwIDw9IHNlbCA8IGNvdW50OgogICAgICAgICAgICAgICAgIGNvdW50ID0gc2VsCiAgICAgICAgICAgICAgICAgbmV3X2xpc3QgPSBsaXN0Wzpjb3VudF0KICAgICAgICAgaWYgbGVuKGxpc3QpICE9IGxlbihuZXdfbGlzdCk6Ci0gICAgICAgICAgICBtc2cgPSBtc2cgKyAiICAgTGlzdCByZWR1Y2VkIGZyb20gJXIgdG8gJXIgZHVlIHRvIHJlc3RyaWN0aW9uIDwlcj5cbiIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGxpc3QpLCBsZW4obmV3X2xpc3QpLCBzZWwpCisgICAgICAgICAgICBtc2cgKz0gIiAgIExpc3QgcmVkdWNlZCBmcm9tICVyIHRvICVyIGR1ZSB0byByZXN0cmljdGlvbiA8JXI+XG4iICUgKAorICAgICAgICAgICAgICAgIGxlbihsaXN0KSwgbGVuKG5ld19saXN0KSwgc2VsKQogCiAgICAgICAgIHJldHVybiBuZXdfbGlzdCwgbXNnCiAKICAgICBkZWYgZ2V0X3ByaW50X2xpc3Qoc2VsZiwgc2VsX2xpc3QpOgogICAgICAgICB3aWR0aCA9IHNlbGYubWF4X25hbWVfbGVuCiAgICAgICAgIGlmIHNlbGYuZmNuX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0ID0gc2VsZi5mY25fbGlzdFs6XQorICAgICAgICAgICAgc3RhdF9saXN0ID0gc2VsZi5mY25fbGlzdFs6XQogICAgICAgICAgICAgbXNnID0gIiAgIE9yZGVyZWQgYnk6ICIgKyBzZWxmLnNvcnRfdHlwZSArICdcbicKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpc3QgPSBzZWxmLnN0YXRzLmtleXMoKQorICAgICAgICAgICAgc3RhdF9saXN0ID0gc2VsZi5zdGF0cy5rZXlzKCkKICAgICAgICAgICAgIG1zZyA9ICIgICBSYW5kb20gbGlzdGluZyBvcmRlciB3YXMgdXNlZFxuIgogCiAgICAgICAgIGZvciBzZWxlY3Rpb24gaW4gc2VsX2xpc3Q6Ci0gICAgICAgICAgICBsaXN0LCBtc2cgPSBzZWxmLmV2YWxfcHJpbnRfYW1vdW50KHNlbGVjdGlvbiwgbGlzdCwgbXNnKQorICAgICAgICAgICAgc3RhdF9saXN0LCBtc2cgPSBzZWxmLmV2YWxfcHJpbnRfYW1vdW50KHNlbGVjdGlvbiwgc3RhdF9saXN0LCBtc2cpCiAKLSAgICAgICAgY291bnQgPSBsZW4obGlzdCkKKyAgICAgICAgY291bnQgPSBsZW4oc3RhdF9saXN0KQogCi0gICAgICAgIGlmIG5vdCBsaXN0OgotICAgICAgICAgICAgcmV0dXJuIDAsIGxpc3QKKyAgICAgICAgaWYgbm90IHN0YXRfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiAwLCBzdGF0X2xpc3QKICAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sIG1zZwogICAgICAgICBpZiBjb3VudCA8IGxlbihzZWxmLnN0YXRzKToKICAgICAgICAgICAgIHdpZHRoID0gMAotICAgICAgICAgICAgZm9yIGZ1bmMgaW4gbGlzdDoKKyAgICAgICAgICAgIGZvciBmdW5jIGluIHN0YXRfbGlzdDoKICAgICAgICAgICAgICAgICBpZiAgbGVuKGZ1bmNfc3RkX3N0cmluZyhmdW5jKSkgPiB3aWR0aDoKICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBsZW4oZnVuY19zdGRfc3RyaW5nKGZ1bmMpKQotICAgICAgICByZXR1cm4gd2lkdGgrMiwgbGlzdAorICAgICAgICByZXR1cm4gd2lkdGgrMiwgc3RhdF9saXN0CiAKICAgICBkZWYgcHJpbnRfc3RhdHMoc2VsZiwgKmFtb3VudCk6CiAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmZpbGVzOgpAQCAtMzUzLDcgKzM1OSw3IEBACiAgICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCBpbmRlbnQsIHNlbGYudG90YWxfY2FsbHMsICJmdW5jdGlvbiBjYWxscyIsCiAgICAgICAgIGlmIHNlbGYudG90YWxfY2FsbHMgIT0gc2VsZi5wcmltX2NhbGxzOgogICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0sICIoJWQgcHJpbWl0aXZlIGNhbGxzKSIgJSBzZWxmLnByaW1fY2FsbHMsCi0gICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCAiaW4gJS4zZiBDUFUgc2Vjb25kcyIgJSBzZWxmLnRvdGFsX3R0CisgICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCAiaW4gJS4zZiBzZWNvbmRzIiAlIHNlbGYudG90YWxfdHQKICAgICAgICAgcHJpbnQgPj4gc2VsZi5zdHJlYW0KICAgICAgICAgd2lkdGgsIGxpc3QgPSBzZWxmLmdldF9wcmludF9saXN0KGFtb3VudCkKICAgICAgICAgaWYgbGlzdDoKQEAgLTQ3MSwxNiArNDc3LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZGlyZWN0aW9uCiAgICAgICAgIHJldHVybiAwCiAKLWRlZiBDbXBUb0tleShteWNtcCk6Ci0gICAgIiIiQ29udmVydCBhIGNtcD0gZnVuY3Rpb24gaW50byBhIGtleT0gZnVuY3Rpb24iIiIKLSAgICBjbGFzcyBLKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgotICAgICAgICAgICAgc2VsZi5vYmogPSBvYmoKLSAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPT0gLTEKLSAgICByZXR1cm4gSwotCi0KICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBmdW5jX25hbWUgaXMgYSB0cmlwbGUgKGZpbGU6c3RyaW5nLCBsaW5lOmludCwgbmFtZTpzdHJpbmcpCiAKQEAgLTU2MiwxMiArNTU4LDEwIEBACiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9maWxlPU5vbmUpOgogICAgICAgICAgICAgY21kLkNtZC5fX2luaXRfXyhzZWxmKQogICAgICAgICAgICAgc2VsZi5wcm9tcHQgPSAiJSAiCisgICAgICAgICAgICBzZWxmLnN0YXRzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICBpZiBwcm9maWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhwcm9maWxlKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gc2VsZi5zdGF0cy5zdHJlYW0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3JlYWQocHJvZmlsZSkKIAogICAgICAgICBkZWYgZ2VuZXJpYyhzZWxmLCBmbiwgbGluZSk6CiAgICAgICAgICAgICBhcmdzID0gbGluZS5zcGxpdCgpCkBAIC02NjgsNyArNjYyLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCA+PiBzZWxmLnN0cmVhbSwgIk5vIHN0YXRpc3RpY3Mgb2JqZWN0IGlzIGxvYWRlZC4iCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBhYmJyZXZzID0gc2VsZi5zdGF0cy5nZXRfc29ydF9hcmdfZGVmcygpCi0gICAgICAgICAgICBpZiBsaW5lIGFuZCBub3QgZmlsdGVyKGxhbWJkYSB4LGE9YWJicmV2czogeCBub3QgaW4gYSxsaW5lLnNwbGl0KCkpOgorICAgICAgICAgICAgaWYgbGluZSBhbmQgYWxsKCh4IGluIGFiYnJldnMpIGZvciB4IGluIGxpbmUuc3BsaXQoKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy5zb3J0X3N0YXRzKCpsaW5lLnNwbGl0KCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50ID4+IHNlbGYuc3RyZWFtLCAiVmFsaWQgc29ydCBrZXlzICh1bmlxdWUgcHJlZml4ZXMgYXJlIGFjY2VwdGVkKToiCmRpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CmluZGV4IDg5ZTgwZjguLmRjMWNhZTkgMTAwNjQ0Ci0tLSBhL0xpYi9weV9jb21waWxlLnB5CisrKyBiL0xpYi9weV9jb21waWxlLnB5CkBAIC02MSwxNSArNjEsNiBAQAogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAogCi0jIERlZmluZSBhbiBpbnRlcm5hbCBoZWxwZXIgYWNjb3JkaW5nIHRvIHRoZSBwbGF0Zm9ybQotaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICBpbXBvcnQgTWFjT1MKLSAgICBkZWYgc2V0X2NyZWF0b3JfdHlwZShmaWxlKToKLSAgICAgICAgTWFjT1MuU2V0Q3JlYXRvckFuZFR5cGUoZmlsZSwgJ1B5dGgnLCAnUFlDICcpCi1lbHNlOgotICAgIGRlZiBzZXRfY3JlYXRvcl90eXBlKGZpbGUpOgotICAgICAgICBwYXNzCi0KIGRlZiB3cl9sb25nKGYsIHgpOgogICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCiAgICAgZi53cml0ZShjaHIoIHggICAgICAgICYgMHhmZikpCkBAIC0xMTIsMTUgKzEwMywxMiBAQAogICAgIGRpcmVjdG9yaWVzKS4KIAogICAgICIiIgotICAgIGYgPSBvcGVuKGZpbGUsICdVJykKLSAgICB0cnk6Ci0gICAgICAgIHRpbWVzdGFtcCA9IGxvbmcob3MuZnN0YXQoZi5maWxlbm8oKSkuc3RfbXRpbWUpCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICB0aW1lc3RhbXAgPSBsb25nKG9zLnN0YXQoZmlsZSkuc3RfbXRpbWUpCi0gICAgY29kZXN0cmluZyA9IGYucmVhZCgpCi0gICAgZi5jbG9zZSgpCi0gICAgaWYgY29kZXN0cmluZyBhbmQgY29kZXN0cmluZ1stMV0gIT0gJ1xuJzoKLSAgICAgICAgY29kZXN0cmluZyA9IGNvZGVzdHJpbmcgKyAnXG4nCisgICAgd2l0aCBvcGVuKGZpbGUsICdVJykgYXMgZjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZXN0YW1wID0gbG9uZyhvcy5mc3RhdChmLmZpbGVubygpKS5zdF9tdGltZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdGltZXN0YW1wID0gbG9uZyhvcy5zdGF0KGZpbGUpLnN0X210aW1lKQorICAgICAgICBjb2Rlc3RyaW5nID0gZi5yZWFkKCkKICAgICB0cnk6CiAgICAgICAgIGNvZGVvYmplY3QgPSBfX2J1aWx0aW5fXy5jb21waWxlKGNvZGVzdHJpbmcsIGRmaWxlIG9yIGZpbGUsJ2V4ZWMnKQogICAgIGV4Y2VwdCBFeGNlcHRpb24sZXJyOgpAQCAtMTMyLDE1ICsxMjAsMTMgQEAKICAgICAgICAgICAgIHJldHVybgogICAgIGlmIGNmaWxlIGlzIE5vbmU6CiAgICAgICAgIGNmaWxlID0gZmlsZSArIChfX2RlYnVnX18gYW5kICdjJyBvciAnbycpCi0gICAgZmMgPSBvcGVuKGNmaWxlLCAnd2InKQotICAgIGZjLndyaXRlKCdcMFwwXDBcMCcpCi0gICAgd3JfbG9uZyhmYywgdGltZXN0YW1wKQotICAgIG1hcnNoYWwuZHVtcChjb2Rlb2JqZWN0LCBmYykKLSAgICBmYy5mbHVzaCgpCi0gICAgZmMuc2VlaygwLCAwKQotICAgIGZjLndyaXRlKE1BR0lDKQotICAgIGZjLmNsb3NlKCkKLSAgICBzZXRfY3JlYXRvcl90eXBlKGNmaWxlKQorICAgIHdpdGggb3BlbihjZmlsZSwgJ3diJykgYXMgZmM6CisgICAgICAgIGZjLndyaXRlKCdcMFwwXDBcMCcpCisgICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKKyAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQorICAgICAgICBmYy5mbHVzaCgpCisgICAgICAgIGZjLnNlZWsoMCwgMCkKKyAgICAgICAgZmMud3JpdGUoTUFHSUMpCiAKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KQEAgLTE0OSwxOSArMTM1LDM1IEBACiAgICAgbm90IHNwZWNpZmllZCkgYXJlIGNvbXBpbGVkIGFuZCB0aGUgcmVzdWx0aW5nIGJ5dGVjb2RlIGlzIGNhY2hlZAogICAgIGluIHRoZSBub3JtYWwgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzZWFyY2ggYSBkaXJlY3RvcnkKICAgICBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHNvdXJjZSBmaWxlczsgaXQgb25seSBjb21waWxlcyBmaWxlcyBuYW1lZAotICAgIGV4cGxpY2l0bHkuCisgICAgZXhwbGljaXRseS4gIElmICctJyBpcyB0aGUgb25seSBwYXJhbWV0ZXIgaW4gYXJncywgdGhlIGxpc3Qgb2YKKyAgICBmaWxlcyBpcyB0YWtlbiBmcm9tIHN0YW5kYXJkIGlucHV0LgogCiAgICAgIiIiCiAgICAgaWYgYXJncyBpcyBOb25lOgogICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCiAgICAgcnYgPSAwCi0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbXBpbGUoZmlsZW5hbWUsIGRvcmFpc2U9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICAjIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZSBhdCBsZWFzdCBvbmUgZmFpbHVyZQotICAgICAgICAgICAgcnYgPSAxCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGVyci5tc2cpCisgICAgaWYgYXJncyA9PSBbJy0nXToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb21waWxlKGZpbGVuYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICAgICAgcnYgPSAxCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBlcnJvci5tc2cpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgICAgICBydiA9IDEKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQorICAgIGVsc2U6CisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbXBpbGUoZmlsZW5hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBQeUNvbXBpbGVFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgICAgICAjIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZSBhdCBsZWFzdCBvbmUgZmFpbHVyZQorICAgICAgICAgICAgICAgIHJ2ID0gMQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZXJyb3IubXNnKQogICAgIHJldHVybiBydgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jLnB5IGIvTGliL3B5ZG9jLnB5CmluZGV4IDg2YTZhYTAuLmZmOWE1ZjQgMTAwNzU1Ci0tLSBhL0xpYi9weWRvYy5weQorKysgYi9MaWIvcHlkb2MucHkKQEAgLTExMTMsNyArMTExMyw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKyBzZWxmLnNlY3Rpb24oJ0NSRURJVFMnLCBzdHIob2JqZWN0Ll9fY3JlZGl0c19fKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGRvY2NsYXNzKHNlbGYsIG9iamVjdCwgbmFtZT1Ob25lLCBtb2Q9Tm9uZSk6CisgICAgZGVmIGRvY2NsYXNzKHNlbGYsIG9iamVjdCwgbmFtZT1Ob25lLCBtb2Q9Tm9uZSwgKmlnbm9yZWQpOgogICAgICAgICAiIiJQcm9kdWNlIHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgYSBnaXZlbiBjbGFzcyBvYmplY3QuIiIiCiAgICAgICAgIHJlYWxuYW1lID0gb2JqZWN0Ll9fbmFtZV9fCiAgICAgICAgIG5hbWUgPSBuYW1lIG9yIHJlYWxuYW1lCkBAIC0xNTMzLDExICsxNTMzLDExIEBACiAgICAgIyBUaGVzZSBkaWN0aW9uYXJpZXMgbWFwIGEgdG9waWMgbmFtZSB0byBlaXRoZXIgYW4gYWxpYXMsIG9yIGEgdHVwbGUKICAgICAjIChsYWJlbCwgc2VlYWxzby1pdGVtcykuICBUaGUgImxhYmVsIiBpcyB0aGUgbGFiZWwgb2YgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAjIHNlY3Rpb24gaW4gdGhlIC5yc3QgZmlsZSB1bmRlciBEb2MvIGFuZCBhbiBpbmRleCBpbnRvIHRoZSBkaWN0aW9uYXJ5Ci0gICAgIyBpbiBweWRvY190b3BpY3MucHkuCisgICAgIyBpbiBweWRvY19kYXRhL3RvcGljcy5weS4KICAgICAjCiAgICAgIyBDQVVUSU9OOiBpZiB5b3UgY2hhbmdlIG9uZSBvZiB0aGVzZSBkaWN0aW9uYXJpZXMsIGJlIHN1cmUgdG8gYWRhcHQgdGhlCiAgICAgIyAgICAgICAgICBsaXN0IG9mIG5lZWRlZCBsYWJlbHMgaW4gRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGFuZAotICAgICMgICAgICAgICAgcmVnZW5lcmF0ZSB0aGUgcHlkb2NfdG9waWNzLnB5IGZpbGUgYnkgcnVubmluZworICAgICMgICAgICAgICAgcmVnZW5lcmF0ZSB0aGUgcHlkb2NfZGF0YS90b3BpY3MucHkgZmlsZSBieSBydW5uaW5nCiAgICAgIyAgICAgICAgICAgICAgbWFrZSBweWRvYy10b3BpY3MKICAgICAjICAgICAgICAgIGluIERvYy8gYW5kIGNvcHlpbmcgdGhlIG91dHB1dCBmaWxlIGludG8gdGhlIExpYi8gZGlyZWN0b3J5LgogCkBAIC0xNzE4LDggKzE3MTgsOSBAQAogICAgICAgICAgICAgcmV0dXJuICcnCiAgICAgICAgIHJldHVybiAnPHB5ZG9jLkhlbHBlciBpbnN0YW5jZT4nCiAKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgcmVxdWVzdD1Ob25lKToKLSAgICAgICAgaWYgcmVxdWVzdCBpcyBub3QgTm9uZToKKyAgICBfR29JbnRlcmFjdGl2ZSA9IG9iamVjdCgpCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlcXVlc3Q9X0dvSW50ZXJhY3RpdmUpOgorICAgICAgICBpZiByZXF1ZXN0IGlzIG5vdCBzZWxmLl9Hb0ludGVyYWN0aXZlOgogICAgICAgICAgICAgc2VsZi5oZWxwKHJlcXVlc3QpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmludHJvKCkKQEAgLTE4MjUsMTEgKzE4MjYsMTEgQEAKIAogICAgIGRlZiBzaG93dG9waWMoc2VsZiwgdG9waWMsIG1vcmVfeHJlZnM9JycpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQgcHlkb2NfdG9waWNzCisgICAgICAgICAgICBpbXBvcnQgcHlkb2NfZGF0YS50b3BpY3MKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCiBTb3JyeSwgdG9waWMgYW5kIGtleXdvcmQgZG9jdW1lbnRhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGJlY2F1c2UgdGhlCi1tb2R1bGUgInB5ZG9jX3RvcGljcyIgY291bGQgbm90IGJlIGZvdW5kLgorbW9kdWxlICJweWRvY19kYXRhLnRvcGljcyIgY291bGQgbm90IGJlIGZvdW5kLgogJycnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRhcmdldCA9IHNlbGYudG9waWNzLmdldCh0b3BpYywgc2VsZi5rZXl3b3Jkcy5nZXQodG9waWMpKQpAQCAtMTg0MSw3ICsxODQyLDcgQEAKIAogICAgICAgICBsYWJlbCwgeHJlZnMgPSB0YXJnZXQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZG9jID0gcHlkb2NfdG9waWNzLnRvcGljc1tsYWJlbF0KKyAgICAgICAgICAgIGRvYyA9IHB5ZG9jX2RhdGEudG9waWNzLnRvcGljc1tsYWJlbF0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ25vIGRvY3VtZW50YXRpb24gZm91bmQgZm9yICVzXG4nICUgcmVwcih0b3BpYykpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTIwMzEsOCArMjAzMiw4IEBACiAKICAgICBjbGFzcyBEb2NTZXJ2ZXIoQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBjYWxsYmFjayk6Ci0gICAgICAgICAgICBob3N0ID0gKHN5cy5wbGF0Zm9ybSA9PSAnbWFjJykgYW5kICcxMjcuMC4wLjEnIG9yICdsb2NhbGhvc3QnCi0gICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoJycsIHBvcnQpCisgICAgICAgICAgICBob3N0ID0gJ2xvY2FsaG9zdCcKKyAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IChob3N0LCBwb3J0KQogICAgICAgICAgICAgc2VsZi51cmwgPSAnaHR0cDovLyVzOiVkLycgJSAoaG9zdCwgcG9ydCkKICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjawogICAgICAgICAgICAgc2VsZi5iYXNlLl9faW5pdF9fKHNlbGYsIHNlbGYuYWRkcmVzcywgc2VsZi5oYW5kbGVyKQpAQCAtMjE0OCwxMCArMjE0OSw2IEBACiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6ICMgcHJlLXdlYmJyb3dzZXIucHkgY29tcGF0aWJpbGl0eQogICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oJ3N0YXJ0ICIlcyInICUgdXJsKQotICAgICAgICAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgICAgICAgICAgICAgICAgICB0cnk6IGltcG9ydCBpYwotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6IHBhc3MKLSAgICAgICAgICAgICAgICAgICAgZWxzZTogaWMubGF1bmNodXJsKHVybCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYyA9IG9zLnN5c3RlbSgnbmV0c2NhcGUgLXJlbW90ZSAib3BlblVSTCglcykiICYnICUgdXJsKQogICAgICAgICAgICAgICAgICAgICBpZiByYzogb3Muc3lzdGVtKCduZXRzY2FwZSAiJXMiICYnICUgdXJsKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9jb3B5cmlnaHQgYi9MaWIvcHlkb2NfZGF0YS9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIFRvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvY29weXJpZ2h0CmNvcHkgdG8gTGliL3B5ZG9jX2RhdGEvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL0xpYi9weWRvY190b3BpY3MucHkgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKc2ltaWxhcml0eSBpbmRleCA2NiUKcmVuYW1lIGZyb20gTGliL3B5ZG9jX3RvcGljcy5weQpyZW5hbWUgdG8gTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CmluZGV4IDU3Mjg3OWYuLjg0OWNkMjUgMTAwNjQ0Ci0tLSBhL0xpYi9weWRvY190b3BpY3MucHkKKysrIGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBNb24gQXVnIDIzIDE5OjMzOjQ2IDIwMTAKKyMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gU2F0IEp1bCAgMyAwODo1MjowNCAyMDEwCiB0b3BpY3MgPSB7J2Fzc2VydCc6IHUnXG5UaGUgYGBhc3NlcnRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbmBgLCBpcyBlcXVpdmFsZW50IHRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvclxuXG5UaGUgZXh0ZW5kZWQgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yYGAsIGlzIGVxdWl2YWxlbnRcbnRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uMTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXhwcmVzc2lvbjIpXG5cblRoZXNlIGVxdWl2YWxlbmNlcyBhc3N1bWUgdGhhdCBgYF9fZGVidWdfX2BgIGFuZCBgYEFzc2VydGlvbkVycm9yYGBcbnJlZmVyIHRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlIGBgX19kZWJ1Z19fYGAgaXMgYGBUcnVlYGAgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCBgYEZhbHNlYGAgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkXG4oY29tbWFuZCBsaW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlXG5mb3IgYW4gYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZVxudGltZS4gIE5vdGUgdGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlXG5leHByZXNzaW9uIHRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhc1xucGFydCBvZiB0aGUgc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvIGBgX19kZWJ1Z19fYGAgYXJlIGlsbGVnYWwuICBUaGUgdmFsdWUgZm9yIHRoZSBidWlsdC1pblxudmFyaWFibGUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBpbnRlcnByZXRlciBzdGFydHMuXG4nLAogICdhc3NpZ25tZW50JzogdSdcbkFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2lnbm1lbnQgc3RhdGVtZW50cyBhcmUgdXNlZCB0byAocmUpYmluZCBuYW1lcyB0byB2YWx1ZXMgYW5kIHRvXG5tb2RpZnkgYXR0cmlidXRlcyBvciBpdGVtcyBvZiBtdXRhYmxlIG9iamVjdHM6XG5cbiAgIGFzc2lnbm1lbnRfc3RtdCA6Oj0gKHRhcmdldF9saXN0ICI9IikrIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgdGFyZ2V0X2xpc3QgICAgIDo6PSB0YXJnZXQgKCIsIiB0YXJnZXQpKiBbIiwiXVxuICAgdGFyZ2V0ICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHwgIigiIHRhcmdldF9saXN0ICIpIlxuICAgICAgICAgICAgICB8ICJbIiB0YXJnZXRfbGlzdCAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdFxudGhpcyBjYW4gYmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyXG55aWVsZGluZyBhIHR1cGxlKSBhbmQgYXNzaWducyB0aGUgc2luZ2xlIHJlc3VsdGluZyBvYmplY3QgdG8gZWFjaCBvZlxudGhlIHRhcmdldCBsaXN0cywgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5Bc3NpZ25tZW50IGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBmb3JtIG9mIHRoZSB0YXJnZXRcbihsaXN0KS4gV2hlbiBhIHRhcmdldCBpcyBwYXJ0IG9mIGEgbXV0YWJsZSBvYmplY3QgKGFuIGF0dHJpYnV0ZVxucmVmZXJlbmNlLCBzdWJzY3JpcHRpb24gb3Igc2xpY2luZyksIHRoZSBtdXRhYmxlIG9iamVjdCBtdXN0XG51bHRpbWF0ZWx5IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQgYW5kIGRlY2lkZSBhYm91dCBpdHMgdmFsaWRpdHksIGFuZFxubWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgYXNzaWdubWVudCBpcyB1bmFjY2VwdGFibGUuICBUaGUgcnVsZXNcbm9ic2VydmVkIGJ5IHZhcmlvdXMgdHlwZXMgYW5kIHRoZSBleGNlcHRpb25zIHJhaXNlZCBhcmUgZ2l2ZW4gd2l0aCB0aGVcbmRlZmluaXRpb24gb2YgdGhlIG9iamVjdCB0eXBlcyAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlXG5oaWVyYXJjaHkqKS5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlIG9iamVjdFxuICBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZVxuICB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy4gKFRoaXMgcnVsZSBpcyByZWxheGVkIGFzIG9mXG4gIFB5dGhvbiAxLjU7IGluIGVhcmxpZXIgdmVyc2lvbnMsIHRoZSBvYmplY3QgaGFkIHRvIGJlIGEgdHVwbGUuXG4gIFNpbmNlIHN0cmluZ3MgYXJlIHNlcXVlbmNlcywgYW4gYXNzaWdubWVudCBsaWtlIGBgYSwgYiA9ICJ4eSJgYCBpc1xuICBub3cgbGVnYWwgYXMgbG9uZyBhcyB0aGUgc3RyaW5nIGhhcyB0aGUgcmlnaHQgbGVuZ3RoLilcblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSBzaW5nbGUgdGFyZ2V0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyIChuYW1lKTpcblxuICAqIElmIHRoZSBuYW1lIGRvZXMgbm90IG9jY3VyIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaW4gdGhlXG4gICAgY3VycmVudCBjb2RlIGJsb2NrOiB0aGUgbmFtZSBpcyBib3VuZCB0byB0aGUgb2JqZWN0IGluIHRoZSBjdXJyZW50XG4gICAgbG9jYWwgbmFtZXNwYWNlLlxuXG4gICogT3RoZXJ3aXNlOiB0aGUgbmFtZSBpcyBib3VuZCB0byB0aGUgb2JqZWN0IGluIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIG5hbWVzcGFjZS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW4gc3F1YXJlXG4gIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2ZcbiAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBgYFR5cGVFcnJvcmBgIGlzXG4gIHJhaXNlZC4gIFRoYXQgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG9cbiAgdGhlIGdpdmVuIGF0dHJpYnV0ZTsgaWYgaXQgY2Fubm90IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQsIGl0IHJhaXNlc1xuICBhbiBleGNlcHRpb24gKHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSBgYEF0dHJpYnV0ZUVycm9yYGApLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgYGBhLnhgYCBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgYGBhLnhgYCBpc1xuICBhbHdheXMgc2V0IGFzIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICBUaHVzLCB0aGUgdHdvIG9jY3VycmVuY2VzIG9mIGBgYS54YGAgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZVxuICBzYW1lIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSxcbiAgdGhlIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCBgYHByb3BlcnR5KClgYC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc3Vic2NyaXB0aW9uOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZVxuICByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGVpdGhlciBhIG11dGFibGUgc2VxdWVuY2VcbiAgb2JqZWN0IChzdWNoIGFzIGEgbGlzdCkgb3IgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLlxuICBOZXh0LCB0aGUgc3Vic2NyaXB0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IHlpZWxkIGEgcGxhaW4gaW50ZWdlci4gIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYVxuICBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlXG4gIHNlcXVlbmNlIGlzIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGhcbiAgdGhhdCBpbmRleC4gIElmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIGBgSW5kZXhFcnJvcmBgIGlzIHJhaXNlZFxuICAoYXNzaWdubWVudCB0byBhIHN1YnNjcmlwdGVkIHNlcXVlbmNlIGNhbm5vdCBhZGQgbmV3IGl0ZW1zIHRvIGFcbiAgbGlzdCkuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgaGF2ZSBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBtYXBwaW5nXCdzIGtleSB0eXBlLFxuICBhbmQgdGhlIG1hcHBpbmcgaXMgdGhlbiBhc2tlZCB0byBjcmVhdGUgYSBrZXkvZGF0dW0gcGFpciB3aGljaCBtYXBzXG4gIHRoZSBzdWJzY3JpcHQgdG8gdGhlIGFzc2lnbmVkIG9iamVjdC4gIFRoaXMgY2FuIGVpdGhlciByZXBsYWNlIGFuXG4gIGV4aXN0aW5nIGtleS92YWx1ZSBwYWlyIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLCBvciBpbnNlcnQgYSBuZXdcbiAga2V5L3ZhbHVlIHBhaXIgKGlmIG5vIGtleSB3aXRoIHRoZSBzYW1lIHZhbHVlIGV4aXN0ZWQpLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzbGljaW5nOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZSByZWZlcmVuY2VcbiAgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYVxuICBsaXN0KS4gIFRoZSBhc3NpZ25lZCBvYmplY3Qgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2JqZWN0IG9mIHRoZSBzYW1lXG4gIHR5cGUuICBOZXh0LCB0aGUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQsXG4gIGluc29mYXIgdGhleSBhcmUgcHJlc2VudDsgZGVmYXVsdHMgYXJlIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGguICBUaGUgYm91bmRzIHNob3VsZCBldmFsdWF0ZSB0byAoc21hbGwpIGludGVnZXJzLiAgSWYgZWl0aGVyXG4gIGJvdW5kIGlzIG5lZ2F0aXZlLCB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiBUaGVcbiAgcmVzdWx0aW5nIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLCBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2VcbiAgdGhlIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2ZcbiAgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3RcbiAgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbldBUk5JTkc6IEFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzXG5iZXR3ZWVuIHRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzYWZlXCcgKGZvclxuZXhhbXBsZSBgYGEsIGIgPSBiLCBhYGAgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGVcbmZvbGxvd2luZyBwcm9ncmFtIHByaW50cyBgYFswLCAyXWBgOlxuXG4gICB4ID0gWzAsIDFdXG4gICBpID0gMFxuICAgaSwgeFtpXSA9IDEsIDJcbiAgIHByaW50IHhcblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgYGB4ICs9IDFgYCBjYW4gYmUgcmV3cml0dGVuIGFzXG5gYHggPSB4ICsgMWBgIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJblxudGhlIGF1Z21lbnRlZCB2ZXJzaW9uLCBgYHhgYCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuXG5wb3NzaWJsZSwgdGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdFxucmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LFxudGhlIG9sZCBvYmplY3QgaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCiAgJ2F0b20taWRlbnRpZmllcnMnOiB1J1xuSWRlbnRpZmllcnMgKE5hbWVzKVxuKioqKioqKioqKioqKioqKioqKlxuXG5BbiBpZGVudGlmaWVyIG9jY3VycmluZyBhcyBhbiBhdG9tIGlzIGEgbmFtZS4gIFNlZSBzZWN0aW9uXG4qSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKiBmb3IgbGV4aWNhbCBkZWZpbml0aW9uIGFuZCBzZWN0aW9uICpOYW1pbmdcbmFuZCBiaW5kaW5nKiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBuYW1pbmcgYW5kIGJpbmRpbmcuXG5cbldoZW4gdGhlIG5hbWUgaXMgYm91bmQgdG8gYW4gb2JqZWN0LCBldmFsdWF0aW9uIG9mIHRoZSBhdG9tIHlpZWxkc1xudGhhdCBvYmplY3QuIFdoZW4gYSBuYW1lIGlzIG5vdCBib3VuZCwgYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdFxucmFpc2VzIGEgYGBOYW1lRXJyb3JgYCBleGNlcHRpb24uXG5cbioqUHJpdmF0ZSBuYW1lIG1hbmdsaW5nOioqIFdoZW4gYW4gaWRlbnRpZmllciB0aGF0IHRleHR1YWxseSBvY2N1cnMgaW5cbmEgY2xhc3MgZGVmaW5pdGlvbiBiZWdpbnMgd2l0aCB0d28gb3IgbW9yZSB1bmRlcnNjb3JlIGNoYXJhY3RlcnMgYW5kXG5kb2VzIG5vdCBlbmQgaW4gdHdvIG9yIG1vcmUgdW5kZXJzY29yZXMsIGl0IGlzIGNvbnNpZGVyZWQgYSAqcHJpdmF0ZVxubmFtZSogb2YgdGhhdCBjbGFzcy4gUHJpdmF0ZSBuYW1lcyBhcmUgdHJhbnNmb3JtZWQgdG8gYSBsb25nZXIgZm9ybVxuYmVmb3JlIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGVtLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGluc2VydHMgdGhlXG5jbGFzcyBuYW1lIGluIGZyb250IG9mIHRoZSBuYW1lLCB3aXRoIGxlYWRpbmcgdW5kZXJzY29yZXMgcmVtb3ZlZCwgYW5kXG5hIHNpbmdsZSB1bmRlcnNjb3JlIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBjbGFzcyBuYW1lLiAgRm9yIGV4YW1wbGUsXG50aGUgaWRlbnRpZmllciBgYF9fc3BhbWBgIG9jY3VycmluZyBpbiBhIGNsYXNzIG5hbWVkIGBgSGFtYGAgd2lsbCBiZVxudHJhbnNmb3JtZWQgdG8gYGBfSGFtX19zcGFtYGAuICBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIGluZGVwZW5kZW50IG9mXG50aGUgc3ludGFjdGljYWwgY29udGV4dCBpbiB3aGljaCB0aGUgaWRlbnRpZmllciBpcyB1c2VkLiAgSWYgdGhlXG50cmFuc2Zvcm1lZCBuYW1lIGlzIGV4dHJlbWVseSBsb25nIChsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycyksXG5pbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHRydW5jYXRpb24gbWF5IGhhcHBlbi4gIElmIHRoZSBjbGFzcyBuYW1lXG5jb25zaXN0cyBvbmx5IG9mIHVuZGVyc2NvcmVzLCBubyB0cmFuc2Zvcm1hdGlvbiBpcyBkb25lLlxuJywKQEAgLTEwLDcgKzEwLDcgQEAKICAnYml0d2lzZSc6IHUnXG5CaW5hcnkgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkVhY2ggb2YgdGhlIHRocmVlIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXMgYSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWw6XG5cbiAgIGFuZF9leHByIDo6PSBzaGlmdF9leHByIHwgYW5kX2V4cHIgIiYiIHNoaWZ0X2V4cHJcbiAgIHhvcl9leHByIDo6PSBhbmRfZXhwciB8IHhvcl9leHByICJeIiBhbmRfZXhwclxuICAgb3JfZXhwciAgOjo9IHhvcl9leHByIHwgb3JfZXhwciAifCIgeG9yX2V4cHJcblxuVGhlIGBgJmBgIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBBTkQgb2YgaXRzIGFyZ3VtZW50cywgd2hpY2ggbXVzdFxuYmUgcGxhaW4gb3IgbG9uZyBpbnRlZ2Vycy4gIFRoZSBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vblxudHlwZS5cblxuVGhlIGBgXmBgIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBYT1IgKGV4Y2x1c2l2ZSBPUikgb2YgaXRzXG5hcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgcGxhaW4gb3IgbG9uZyBpbnRlZ2Vycy4gIFRoZSBhcmd1bWVudHMgYXJlXG5jb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS5cblxuVGhlIGBgfGBgIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSAoaW5jbHVzaXZlKSBPUiBvZiBpdHMgYXJndW1lbnRzLFxud2hpY2ggbXVzdCBiZSBwbGFpbiBvciBsb25nIGludGVnZXJzLiAgVGhlIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvXG5hIGNvbW1vbiB0eXBlLlxuJywKICAnYmx0aW4tY29kZS1vYmplY3RzJzogdSdcbkNvZGUgT2JqZWN0c1xuKioqKioqKioqKioqXG5cbkNvZGUgb2JqZWN0cyBhcmUgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG8gcmVwcmVzZW50ICJwc2V1ZG8tXG5jb21waWxlZCIgZXhlY3V0YWJsZSBQeXRob24gY29kZSBzdWNoIGFzIGEgZnVuY3Rpb24gYm9keS4gVGhleSBkaWZmZXJcbmZyb20gZnVuY3Rpb24gb2JqZWN0cyBiZWNhdXNlIHRoZXkgZG9uXCd0IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlaXJcbmdsb2JhbCBleGVjdXRpb24gZW52aXJvbm1lbnQuICBDb2RlIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IHRoZSBidWlsdC1cbmluIGBgY29tcGlsZSgpYGAgZnVuY3Rpb24gYW5kIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBmdW5jdGlvbiBvYmplY3RzXG50aHJvdWdoIHRoZWlyIGBgZnVuY19jb2RlYGAgYXR0cmlidXRlLiBTZWUgYWxzbyB0aGUgYGBjb2RlYGAgbW9kdWxlLlxuXG5BIGNvZGUgb2JqZWN0IGNhbiBiZSBleGVjdXRlZCBvciBldmFsdWF0ZWQgYnkgcGFzc2luZyBpdCAoaW5zdGVhZCBvZiBhXG5zb3VyY2Ugc3RyaW5nKSB0byB0aGUgYGBleGVjYGAgc3RhdGVtZW50IG9yIHRoZSBidWlsdC1pbiBgYGV2YWwoKWBgXG5mdW5jdGlvbi5cblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAnYmx0aW4tZWxsaXBzaXMtb2JqZWN0JzogdSdcblRoZSBFbGxpcHNpcyBPYmplY3RcbioqKioqKioqKioqKioqKioqKipcblxuVGhpcyBvYmplY3QgaXMgdXNlZCBieSBleHRlbmRlZCBzbGljZSBub3RhdGlvbiAoc2VlICpTbGljaW5ncyopLiAgSXRcbnN1cHBvcnRzIG5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIGVsbGlwc2lzIG9iamVjdCxcbm5hbWVkIGBgRWxsaXBzaXNgYCAoYSBidWlsdC1pbiBuYW1lKS5cblxuSXQgaXMgd3JpdHRlbiBhcyBgYEVsbGlwc2lzYGAuXG4nLAotICdibHRpbi1maWxlLW9iamVjdHMnOiB1J1xuRmlsZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuRmlsZSBvYmplY3RzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBDXCdzIGBgc3RkaW9gYCBwYWNrYWdlIGFuZCBjYW4gYmVcbmNyZWF0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gYGBvcGVuKClgYCBmdW5jdGlvbi4gIEZpbGUgb2JqZWN0cyBhcmUgYWxzb1xucmV0dXJuZWQgYnkgc29tZSBvdGhlciBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMsIHN1Y2ggYXNcbmBgb3MucG9wZW4oKWBgIGFuZCBgYG9zLmZkb3BlbigpYGAgYW5kIHRoZSBgYG1ha2VmaWxlKClgYCBtZXRob2Qgb2ZcbnNvY2tldCBvYmplY3RzLiBUZW1wb3JhcnkgZmlsZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIGBgdGVtcGZpbGVgYFxubW9kdWxlLCBhbmQgaGlnaC1sZXZlbCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyBjb3B5aW5nLCBtb3ZpbmcsIGFuZFxuZGVsZXRpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGNhbiBiZSBhY2hpZXZlZCB3aXRoIHRoZSBgYHNodXRpbGBgXG5tb2R1bGUuXG5cbldoZW4gYSBmaWxlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW4gSS9PLXJlbGF0ZWQgcmVhc29uLCB0aGUgZXhjZXB0aW9uXG5gYElPRXJyb3JgYCBpcyByYWlzZWQuICBUaGlzIGluY2x1ZGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIG9wZXJhdGlvblxuaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgcmVhc29uLCBsaWtlIGBgc2VlaygpYGAgb24gYSB0dHkgZGV2aWNlIG9yXG53cml0aW5nIGEgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcuXG5cbkZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuXG5maWxlLmNsb3NlKClcblxuICAgQ2xvc2UgdGhlIGZpbGUuICBBIGNsb3NlZCBmaWxlIGNhbm5vdCBiZSByZWFkIG9yIHdyaXR0ZW4gYW55IG1vcmUuXG4gICBBbnkgb3BlcmF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIGZpbGUgYmUgb3BlbiB3aWxsIHJhaXNlIGFcbiAgIGBgVmFsdWVFcnJvcmBgIGFmdGVyIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZC4gIENhbGxpbmcgYGBjbG9zZSgpYGBcbiAgIG1vcmUgdGhhbiBvbmNlIGlzIGFsbG93ZWQuXG5cbiAgIEFzIG9mIFB5dGhvbiAyLjUsIHlvdSBjYW4gYXZvaWQgaGF2aW5nIHRvIGNhbGwgdGhpcyBtZXRob2RcbiAgIGV4cGxpY2l0bHkgaWYgeW91IHVzZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LiAgRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9sbG93aW5nIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNsb3NlICpmKiB3aGVuIHRoZSBgYHdpdGhgYCBibG9ja1xuICAgaXMgZXhpdGVkOlxuXG4gICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50ICMgVGhpcyBpc25cJ3QgcmVxdWlyZWQgaW4gUHl0aG9uIDIuNlxuXG4gICAgICB3aXRoIG9wZW4oImhlbGxvLnR4dCIpIGFzIGY6XG4gICAgICAgICAgZm9yIGxpbmUgaW4gZjpcbiAgICAgICAgICAgICAgcHJpbnQgbGluZVxuXG4gICBJbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHlvdSB3b3VsZCBoYXZlIG5lZWRlZCB0byBkbyB0aGlzIHRvXG4gICBnZXQgdGhlIHNhbWUgZWZmZWN0OlxuXG4gICAgICBmID0gb3BlbigiaGVsbG8udHh0IilcbiAgICAgIHRyeTpcbiAgICAgICAgICBmb3IgbGluZSBpbiBmOlxuICAgICAgICAgICAgICBwcmludCBsaW5lXG4gICAgICBmaW5hbGx5OlxuICAgICAgICAgIGYuY2xvc2UoKVxuXG4gICBOb3RlOiBOb3QgYWxsICJmaWxlLWxpa2UiIHR5cGVzIGluIFB5dGhvbiBzdXBwb3J0IHVzZSBhcyBhIGNvbnRleHRcbiAgICAgbWFuYWdlciBmb3IgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC4gIElmIHlvdXIgY29kZSBpcyBpbnRlbmRlZCB0b1xuICAgICB3b3JrIHdpdGggYW55IGZpbGUtbGlrZSBvYmplY3QsIHlvdSBjYW4gdXNlIHRoZSBmdW5jdGlvblxuICAgICBgYGNvbnRleHRsaWIuY2xvc2luZygpYGAgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2JqZWN0IGRpcmVjdGx5LlxuXG5maWxlLmZsdXNoKClcblxuICAgRmx1c2ggdGhlIGludGVybmFsIGJ1ZmZlciwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmZmx1c2goKWBgLiAgVGhpcyBtYXlcbiAgIGJlIGEgbm8tb3Agb24gc29tZSBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuICAgTm90ZTogYGBmbHVzaCgpYGAgZG9lcyBub3QgbmVjZXNzYXJpbHkgd3JpdGUgdGhlIGZpbGVcJ3MgZGF0YSB0byBkaXNrLlxuICAgICBVc2UgYGBmbHVzaCgpYGAgZm9sbG93ZWQgYnkgYGBvcy5mc3luYygpYGAgdG8gZW5zdXJlIHRoaXNcbiAgICAgYmVoYXZpb3IuXG5cbmZpbGUuZmlsZW5vKClcblxuICAgUmV0dXJuIHRoZSBpbnRlZ2VyICJmaWxlIGRlc2NyaXB0b3IiIHRoYXQgaXMgdXNlZCBieSB0aGUgdW5kZXJseWluZ1xuICAgaW1wbGVtZW50YXRpb24gdG8gcmVxdWVzdCBJL08gb3BlcmF0aW9ucyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBvdGhlciwgbG93ZXIgbGV2ZWwgaW50ZXJmYWNlcyB0aGF0IHVzZSBmaWxlXG4gICBkZXNjcmlwdG9ycywgc3VjaCBhcyB0aGUgYGBmY250bGBgIG1vZHVsZSBvciBgYG9zLnJlYWQoKWBgIGFuZFxuICAgZnJpZW5kcy5cblxuICAgTm90ZTogRmlsZS1saWtlIG9iamVjdHMgd2hpY2ggZG8gbm90IGhhdmUgYSByZWFsIGZpbGUgZGVzY3JpcHRvciBzaG91bGRcbiAgICAgKm5vdCogcHJvdmlkZSB0aGlzIG1ldGhvZCFcblxuZmlsZS5pc2F0dHkoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGZpbGUgaXMgY29ubmVjdGVkIHRvIGEgdHR5KC1saWtlKSBkZXZpY2UsXG4gICBlbHNlIGBgRmFsc2VgYC5cblxuICAgTm90ZTogSWYgYSBmaWxlLWxpa2Ugb2JqZWN0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSByZWFsIGZpbGUsIHRoaXNcbiAgICAgbWV0aG9kIHNob3VsZCAqbm90KiBiZSBpbXBsZW1lbnRlZC5cblxuZmlsZS5uZXh0KClcblxuICAgQSBmaWxlIG9iamVjdCBpcyBpdHMgb3duIGl0ZXJhdG9yLCBmb3IgZXhhbXBsZSBgYGl0ZXIoZilgYCByZXR1cm5zXG4gICAqZiogKHVubGVzcyAqZiogaXMgY2xvc2VkKS4gIFdoZW4gYSBmaWxlIGlzIHVzZWQgYXMgYW4gaXRlcmF0b3IsXG4gICB0eXBpY2FsbHkgaW4gYSBgYGZvcmBgIGxvb3AgKGZvciBleGFtcGxlLCBgYGZvciBsaW5lIGluIGY6IHByaW50XG4gICBsaW5lYGApLCB0aGUgYGBuZXh0KClgYCBtZXRob2QgaXMgY2FsbGVkIHJlcGVhdGVkbHkuICBUaGlzIG1ldGhvZFxuICAgcmV0dXJucyB0aGUgbmV4dCBpbnB1dCBsaW5lLCBvciByYWlzZXMgYGBTdG9wSXRlcmF0aW9uYGAgd2hlbiBFT0ZcbiAgIGlzIGhpdCB3aGVuIHRoZSBmaWxlIGlzIG9wZW4gZm9yIHJlYWRpbmcgKGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICAgd2hlbiB0aGUgZmlsZSBpcyBvcGVuIGZvciB3cml0aW5nKS4gIEluIG9yZGVyIHRvIG1ha2UgYSBgYGZvcmBgXG4gICBsb29wIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgb2YgbG9vcGluZyBvdmVyIHRoZSBsaW5lcyBvZiBhIGZpbGUgKGFcbiAgIHZlcnkgY29tbW9uIG9wZXJhdGlvbiksIHRoZSBgYG5leHQoKWBgIG1ldGhvZCB1c2VzIGEgaGlkZGVuIHJlYWQtXG4gICBhaGVhZCBidWZmZXIuICBBcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgcmVhZC1haGVhZCBidWZmZXIsXG4gICBjb21iaW5pbmcgYGBuZXh0KClgYCB3aXRoIG90aGVyIGZpbGUgbWV0aG9kcyAobGlrZSBgYHJlYWRsaW5lKClgYClcbiAgIGRvZXMgbm90IHdvcmsgcmlnaHQuICBIb3dldmVyLCB1c2luZyBgYHNlZWsoKWBgIHRvIHJlcG9zaXRpb24gdGhlXG4gICBmaWxlIHRvIGFuIGFic29sdXRlIHBvc2l0aW9uIHdpbGwgZmx1c2ggdGhlIHJlYWQtYWhlYWQgYnVmZmVyLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbmZpbGUucmVhZChbc2l6ZV0pXG5cbiAgIFJlYWQgYXQgbW9zdCAqc2l6ZSogYnl0ZXMgZnJvbSB0aGUgZmlsZSAobGVzcyBpZiB0aGUgcmVhZCBoaXRzIEVPRlxuICAgYmVmb3JlIG9idGFpbmluZyAqc2l6ZSogYnl0ZXMpLiAgSWYgdGhlICpzaXplKiBhcmd1bWVudCBpcyBuZWdhdGl2ZVxuICAgb3Igb21pdHRlZCwgcmVhZCBhbGwgZGF0YSB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIFRoZSBieXRlcyBhcmVcbiAgIHJldHVybmVkIGFzIGEgc3RyaW5nIG9iamVjdC4gIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCB3aGVuIEVPRlxuICAgaXMgZW5jb3VudGVyZWQgaW1tZWRpYXRlbHkuICAoRm9yIGNlcnRhaW4gZmlsZXMsIGxpa2UgdHR5cywgaXRcbiAgIG1ha2VzIHNlbnNlIHRvIGNvbnRpbnVlIHJlYWRpbmcgYWZ0ZXIgYW4gRU9GIGlzIGhpdC4pICBOb3RlIHRoYXRcbiAgIHRoaXMgbWV0aG9kIG1heSBjYWxsIHRoZSB1bmRlcmx5aW5nIEMgZnVuY3Rpb24gYGBmcmVhZCgpYGAgbW9yZVxuICAgdGhhbiBvbmNlIGluIGFuIGVmZm9ydCB0byBhY3F1aXJlIGFzIGNsb3NlIHRvICpzaXplKiBieXRlcyBhc1xuICAgcG9zc2libGUuIEFsc28gbm90ZSB0aGF0IHdoZW4gaW4gbm9uLWJsb2NraW5nIG1vZGUsIGxlc3MgZGF0YSB0aGFuXG4gICB3YXMgcmVxdWVzdGVkIG1heSBiZSByZXR1cm5lZCwgZXZlbiBpZiBubyAqc2l6ZSogcGFyYW1ldGVyIHdhc1xuICAgZ2l2ZW4uXG5cbiAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgc2ltcGx5IGEgd3JhcHBlciBmb3IgdGhlIHVuZGVybHlpbmcgYGBmcmVhZCgpYGBcbiAgICAgQyBmdW5jdGlvbiwgYW5kIHdpbGwgYmVoYXZlIHRoZSBzYW1lIGluIGNvcm5lciBjYXNlcywgc3VjaCBhc1xuICAgICB3aGV0aGVyIHRoZSBFT0YgdmFsdWUgaXMgY2FjaGVkLlxuXG5maWxlLnJlYWRsaW5lKFtzaXplXSlcblxuICAgUmVhZCBvbmUgZW50aXJlIGxpbmUgZnJvbSB0aGUgZmlsZS4gIEEgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJcbiAgIGlzIGtlcHQgaW4gdGhlIHN0cmluZyAoYnV0IG1heSBiZSBhYnNlbnQgd2hlbiBhIGZpbGUgZW5kcyB3aXRoIGFuXG4gICBpbmNvbXBsZXRlIGxpbmUpLiBbNl0gIElmIHRoZSAqc2l6ZSogYXJndW1lbnQgaXMgcHJlc2VudCBhbmQgbm9uLVxuICAgbmVnYXRpdmUsIGl0IGlzIGEgbWF4aW11bSBieXRlIGNvdW50IChpbmNsdWRpbmcgdGhlIHRyYWlsaW5nXG4gICBuZXdsaW5lKSBhbmQgYW4gaW5jb21wbGV0ZSBsaW5lIG1heSBiZSByZXR1cm5lZC4gQW4gZW1wdHkgc3RyaW5nIGlzXG4gICByZXR1cm5lZCAqb25seSogd2hlbiBFT0YgaXMgZW5jb3VudGVyZWQgaW1tZWRpYXRlbHkuXG5cbiAgIE5vdGU6IFVubGlrZSBgYHN0ZGlvYGBcJ3MgYGBmZ2V0cygpYGAsIHRoZSByZXR1cm5lZCBzdHJpbmcgY29udGFpbnMgbnVsbFxuICAgICBjaGFyYWN0ZXJzIChgYFwnXFwwXCdgYCkgaWYgdGhleSBvY2N1cnJlZCBpbiB0aGUgaW5wdXQuXG5cbmZpbGUucmVhZGxpbmVzKFtzaXplaGludF0pXG5cbiAgIFJlYWQgdW50aWwgRU9GIHVzaW5nIGBgcmVhZGxpbmUoKWBgIGFuZCByZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmdcbiAgIHRoZSBsaW5lcyB0aHVzIHJlYWQuICBJZiB0aGUgb3B0aW9uYWwgKnNpemVoaW50KiBhcmd1bWVudCBpc1xuICAgcHJlc2VudCwgaW5zdGVhZCBvZiByZWFkaW5nIHVwIHRvIEVPRiwgd2hvbGUgbGluZXMgdG90YWxsaW5nXG4gICBhcHByb3hpbWF0ZWx5ICpzaXplaGludCogYnl0ZXMgKHBvc3NpYmx5IGFmdGVyIHJvdW5kaW5nIHVwIHRvIGFuXG4gICBpbnRlcm5hbCBidWZmZXIgc2l6ZSkgYXJlIHJlYWQuICBPYmplY3RzIGltcGxlbWVudGluZyBhIGZpbGUtbGlrZVxuICAgaW50ZXJmYWNlIG1heSBjaG9vc2UgdG8gaWdub3JlICpzaXplaGludCogaWYgaXQgY2Fubm90IGJlXG4gICBpbXBsZW1lbnRlZCwgb3IgY2Fubm90IGJlIGltcGxlbWVudGVkIGVmZmljaWVudGx5LlxuXG5maWxlLnhyZWFkbGluZXMoKVxuXG4gICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzYW1lIHRoaW5nIGFzIGBgaXRlcihmKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjEuXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjM6IFVzZSBgYGZvciBsaW5lIGluIGZpbGVgYCBpbnN0ZWFkLlxuXG5maWxlLnNlZWsob2Zmc2V0Wywgd2hlbmNlXSlcblxuICAgU2V0IHRoZSBmaWxlXCdzIGN1cnJlbnQgcG9zaXRpb24sIGxpa2UgYGBzdGRpb2BgXCdzIGBgZnNlZWsoKWBgLiBUaGVcbiAgICp3aGVuY2UqIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAgYGBvcy5TRUVLX1NFVGBgIG9yXG4gICBgYDBgYCAoYWJzb2x1dGUgZmlsZSBwb3NpdGlvbmluZyk7IG90aGVyIHZhbHVlcyBhcmUgYGBvcy5TRUVLX0NVUmBgXG4gICBvciBgYDFgYCAoc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbikgYW5kXG4gICBgYG9zLlNFRUtfRU5EYGAgb3IgYGAyYGAgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBmaWxlXCdzIGVuZCkuICBUaGVyZVxuICAgaXMgbm8gcmV0dXJuIHZhbHVlLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBmLnNlZWsoMiwgb3MuU0VFS19DVVIpYGAgYWR2YW5jZXMgdGhlIHBvc2l0aW9uIGJ5XG4gICB0d28gYW5kIGBgZi5zZWVrKC0zLCBvcy5TRUVLX0VORClgYCBzZXRzIHRoZSBwb3NpdGlvbiB0byB0aGUgdGhpcmRcbiAgIHRvIGxhc3QuXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIGFwcGVuZGluZyAobW9kZSBgYFwnYVwnYGAgb3JcbiAgIGBgXCdhK1wnYGApLCBhbnkgYGBzZWVrKClgYCBvcGVyYXRpb25zIHdpbGwgYmUgdW5kb25lIGF0IHRoZSBuZXh0XG4gICB3cml0ZS4gIElmIHRoZSBmaWxlIGlzIG9ubHkgb3BlbmVkIGZvciB3cml0aW5nIGluIGFwcGVuZCBtb2RlIChtb2RlXG4gICBgYFwnYVwnYGApLCB0aGlzIG1ldGhvZCBpcyBlc3NlbnRpYWxseSBhIG5vLW9wLCBidXQgaXQgcmVtYWlucyB1c2VmdWxcbiAgIGZvciBmaWxlcyBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgd2l0aCByZWFkaW5nIGVuYWJsZWQgKG1vZGVcbiAgIGBgXCdhK1wnYGApLiAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGluIHRleHQgbW9kZSAod2l0aG91dCBgYFwnYlwnYGApLFxuICAgb25seSBvZmZzZXRzIHJldHVybmVkIGJ5IGBgdGVsbCgpYGAgYXJlIGxlZ2FsLiAgVXNlIG9mIG90aGVyXG4gICBvZmZzZXRzIGNhdXNlcyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbiAgIE5vdGUgdGhhdCBub3QgYWxsIGZpbGUgb2JqZWN0cyBhcmUgc2Vla2FibGUuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IFBhc3NpbmcgZmxvYXQgdmFsdWVzIGFzIG9mZnNldCBoYXMgYmVlblxuICAgZGVwcmVjYXRlZC5cblxuZmlsZS50ZWxsKClcblxuICAgUmV0dXJuIHRoZSBmaWxlXCdzIGN1cnJlbnQgcG9zaXRpb24sIGxpa2UgYGBzdGRpb2BgXCdzIGBgZnRlbGwoKWBgLlxuXG4gICBOb3RlOiBPbiBXaW5kb3dzLCBgYHRlbGwoKWBgIGNhbiByZXR1cm4gaWxsZWdhbCB2YWx1ZXMgKGFmdGVyIGFuXG4gICAgIGBgZmdldHMoKWBgKSB3aGVuIHJlYWRpbmcgZmlsZXMgd2l0aCBVbml4LXN0eWxlIGxpbmUtZW5kaW5ncy4gVXNlXG4gICAgIGJpbmFyeSBtb2RlIChgYFwncmJcJ2BgKSB0byBjaXJjdW12ZW50IHRoaXMgcHJvYmxlbS5cblxuZmlsZS50cnVuY2F0ZShbc2l6ZV0pXG5cbiAgIFRydW5jYXRlIHRoZSBmaWxlXCdzIHNpemUuICBJZiB0aGUgb3B0aW9uYWwgKnNpemUqIGFyZ3VtZW50IGlzXG4gICBwcmVzZW50LCB0aGUgZmlsZSBpcyB0cnVuY2F0ZWQgdG8gKGF0IG1vc3QpIHRoYXQgc2l6ZS4gIFRoZSBzaXplXG4gICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4gVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyBub3RcbiAgIGNoYW5nZWQuICBOb3RlIHRoYXQgaWYgYSBzcGVjaWZpZWQgc2l6ZSBleGNlZWRzIHRoZSBmaWxlXCdzIGN1cnJlbnRcbiAgIHNpemUsIHRoZSByZXN1bHQgaXMgcGxhdGZvcm0tZGVwZW5kZW50OiAgcG9zc2liaWxpdGllcyBpbmNsdWRlIHRoYXRcbiAgIHRoZSBmaWxlIG1heSByZW1haW4gdW5jaGFuZ2VkLCBpbmNyZWFzZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgYXMgaWZcbiAgIHplcm8tZmlsbGVkLCBvciBpbmNyZWFzZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgd2l0aCB1bmRlZmluZWQgbmV3XG4gICBjb250ZW50LiBBdmFpbGFiaWxpdHk6ICBXaW5kb3dzLCBtYW55IFVuaXggdmFyaWFudHMuXG5cbmZpbGUud3JpdGUoc3RyKVxuXG4gICBXcml0ZSBhIHN0cmluZyB0byB0aGUgZmlsZS4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4gIER1ZSB0b1xuICAgYnVmZmVyaW5nLCB0aGUgc3RyaW5nIG1heSBub3QgYWN0dWFsbHkgc2hvdyB1cCBpbiB0aGUgZmlsZSB1bnRpbFxuICAgdGhlIGBgZmx1c2goKWBgIG9yIGBgY2xvc2UoKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbmZpbGUud3JpdGVsaW5lcyhzZXF1ZW5jZSlcblxuICAgV3JpdGUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHRvIHRoZSBmaWxlLiAgVGhlIHNlcXVlbmNlIGNhbiBiZSBhbnlcbiAgIGl0ZXJhYmxlIG9iamVjdCBwcm9kdWNpbmcgc3RyaW5ncywgdHlwaWNhbGx5IGEgbGlzdCBvZiBzdHJpbmdzLlxuICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLiAoVGhlIG5hbWUgaXMgaW50ZW5kZWQgdG8gbWF0Y2hcbiAgIGBgcmVhZGxpbmVzKClgYDsgYGB3cml0ZWxpbmVzKClgYCBkb2VzIG5vdCBhZGQgbGluZSBzZXBhcmF0b3JzLilcblxuRmlsZXMgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuICBFYWNoIGl0ZXJhdGlvbiByZXR1cm5zIHRoZSBzYW1lXG5yZXN1bHQgYXMgYGBmaWxlLnJlYWRsaW5lKClgYCwgYW5kIGl0ZXJhdGlvbiBlbmRzIHdoZW4gdGhlXG5gYHJlYWRsaW5lKClgYCBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG5cbkZpbGUgb2JqZWN0cyBhbHNvIG9mZmVyIGEgbnVtYmVyIG9mIG90aGVyIGludGVyZXN0aW5nIGF0dHJpYnV0ZXMuXG5UaGVzZSBhcmUgbm90IHJlcXVpcmVkIGZvciBmaWxlLWxpa2Ugb2JqZWN0cywgYnV0IHNob3VsZCBiZVxuaW1wbGVtZW50ZWQgaWYgdGhleSBtYWtlIHNlbnNlIGZvciB0aGUgcGFydGljdWxhciBvYmplY3QuXG5cbmZpbGUuY2xvc2VkXG5cbiAgIGJvb2wgaW5kaWNhdGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZSBvYmplY3QuICBUaGlzIGlzIGFcbiAgIHJlYWQtb25seSBhdHRyaWJ1dGU7IHRoZSBgYGNsb3NlKClgYCBtZXRob2QgY2hhbmdlcyB0aGUgdmFsdWUuIEl0XG4gICBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUuZW5jb2RpbmdcblxuICAgVGhlIGVuY29kaW5nIHRoYXQgdGhpcyBmaWxlIHVzZXMuIFdoZW4gVW5pY29kZSBzdHJpbmdzIGFyZSB3cml0dGVuXG4gICB0byBhIGZpbGUsIHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYnl0ZSBzdHJpbmdzIHVzaW5nIHRoaXNcbiAgIGVuY29kaW5nLiBJbiBhZGRpdGlvbiwgd2hlbiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCxcbiAgIHRoZSBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGVuY29kaW5nIHRoYXQgdGhlIHRlcm1pbmFsIGlzIGxpa2VseSB0byB1c2VcbiAgICh0aGF0ICBpbmZvcm1hdGlvbiBtaWdodCBiZSBpbmNvcnJlY3QgaWYgdGhlIHVzZXIgaGFzIG1pc2NvbmZpZ3VyZWRcbiAgIHRoZSAgdGVybWluYWwpLiBUaGUgYXR0cmlidXRlIGlzIHJlYWQtb25seSBhbmQgbWF5IG5vdCBiZSBwcmVzZW50XG4gICBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuIEl0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlXG4gICB0aGUgZmlsZSB1c2VzIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyBmb3IgY29udmVydGluZyBVbmljb2RlXG4gICBzdHJpbmdzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbmZpbGUuZXJyb3JzXG5cbiAgIFRoZSBVbmljb2RlIGVycm9yIGhhbmRsZXIgdXNlZCBhbG9uZyB3aXRoIHRoZSBlbmNvZGluZy5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5maWxlLm1vZGVcblxuICAgVGhlIEkvTyBtb2RlIGZvciB0aGUgZmlsZS4gIElmIHRoZSBmaWxlIHdhcyBjcmVhdGVkIHVzaW5nIHRoZVxuICAgYGBvcGVuKClgYCBidWlsdC1pbiBmdW5jdGlvbiwgdGhpcyB3aWxsIGJlIHRoZSB2YWx1ZSBvZiB0aGUgKm1vZGUqXG4gICBwYXJhbWV0ZXIuICBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZSBhbmQgbWF5IG5vdCBiZSBwcmVzZW50IG9uXG4gICBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUubmFtZVxuXG4gICBJZiB0aGUgZmlsZSBvYmplY3Qgd2FzIGNyZWF0ZWQgdXNpbmcgYGBvcGVuKClgYCwgdGhlIG5hbWUgb2YgdGhlXG4gICBmaWxlLiBPdGhlcndpc2UsIHNvbWUgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBzb3VyY2Ugb2YgdGhlIGZpbGVcbiAgIG9iamVjdCwgb2YgdGhlIGZvcm0gYGA8Li4uPmBgLiAgVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUgYW5kXG4gICBtYXkgbm90IGJlIHByZXNlbnQgb24gYWxsIGZpbGUtbGlrZSBvYmplY3RzLlxuXG5maWxlLm5ld2xpbmVzXG5cbiAgIElmIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCB0aGUgKi0td2l0aC11bml2ZXJzYWwtbmV3bGluZXMqIG9wdGlvbiB0b1xuICAgKipjb25maWd1cmUqKiAodGhlIGRlZmF1bHQpIHRoaXMgcmVhZC1vbmx5IGF0dHJpYnV0ZSBleGlzdHMsIGFuZFxuICAgZm9yIGZpbGVzIG9wZW5lZCBpbiB1bml2ZXJzYWwgbmV3bGluZSByZWFkIG1vZGUgaXQga2VlcHMgdHJhY2sgb2ZcbiAgIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLiBUaGVcbiAgIHZhbHVlcyBpdCBjYW4gdGFrZSBhcmUgYGBcJ1xcclwnYGAsIGBgXCdcXG5cJ2BgLCBgYFwnXFxyXFxuXCdgYCwgYGBOb25lYGBcbiAgICh1bmtub3duLCBubyBuZXdsaW5lcyByZWFkIHlldCkgb3IgYSB0dXBsZSBjb250YWluaW5nIGFsbCB0aGVcbiAgIG5ld2xpbmUgdHlwZXMgc2VlbiwgdG8gaW5kaWNhdGUgdGhhdCBtdWx0aXBsZSBuZXdsaW5lIGNvbnZlbnRpb25zXG4gICB3ZXJlIGVuY291bnRlcmVkLiBGb3IgZmlsZXMgbm90IG9wZW5lZCBpbiB1bml2ZXJzYWwgbmV3bGluZSByZWFkXG4gICBtb2RlIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSB3aWxsIGJlIGBgTm9uZWBgLlxuXG5maWxlLnNvZnRzcGFjZVxuXG4gICBCb29sZWFuIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBzcGFjZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmVcbiAgIHByaW50ZWQgYmVmb3JlIGFub3RoZXIgdmFsdWUgd2hlbiB1c2luZyB0aGUgYGBwcmludGBgIHN0YXRlbWVudC5cbiAgIENsYXNzZXMgdGhhdCBhcmUgdHJ5aW5nIHRvIHNpbXVsYXRlIGEgZmlsZSBvYmplY3Qgc2hvdWxkIGFsc28gaGF2ZVxuICAgYSB3cml0YWJsZSBgYHNvZnRzcGFjZWBgIGF0dHJpYnV0ZSwgd2hpY2ggc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvXG4gICB6ZXJvLiAgVGhpcyB3aWxsIGJlIGF1dG9tYXRpYyBmb3IgbW9zdCBjbGFzc2VzIGltcGxlbWVudGVkIGluXG4gICBQeXRob24gKGNhcmUgbWF5IGJlIG5lZWRlZCBmb3Igb2JqZWN0cyB0aGF0IG92ZXJyaWRlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKTsgdHlwZXMgaW1wbGVtZW50ZWQgaW4gQyB3aWxsIGhhdmUgdG8gcHJvdmlkZSBhIHdyaXRhYmxlXG4gICBgYHNvZnRzcGFjZWBgIGF0dHJpYnV0ZS5cblxuICAgTm90ZTogVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHVzZWQgdG8gY29udHJvbCB0aGUgYGBwcmludGBgIHN0YXRlbWVudCxcbiAgICAgYnV0IHRvIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYHByaW50YGAgdG8ga2VlcCB0cmFjayBvZiBpdHNcbiAgICAgaW50ZXJuYWwgc3RhdGUuXG4nLAorICdibHRpbi1maWxlLW9iamVjdHMnOiB1J1xuRmlsZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuRmlsZSBvYmplY3RzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBDXCdzIGBgc3RkaW9gYCBwYWNrYWdlIGFuZCBjYW4gYmVcbmNyZWF0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gYGBvcGVuKClgYCBmdW5jdGlvbi4gIEZpbGUgb2JqZWN0cyBhcmUgYWxzb1xucmV0dXJuZWQgYnkgc29tZSBvdGhlciBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMsIHN1Y2ggYXNcbmBgb3MucG9wZW4oKWBgIGFuZCBgYG9zLmZkb3BlbigpYGAgYW5kIHRoZSBgYG1ha2VmaWxlKClgYCBtZXRob2Qgb2ZcbnNvY2tldCBvYmplY3RzLiBUZW1wb3JhcnkgZmlsZXMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIGBgdGVtcGZpbGVgYFxubW9kdWxlLCBhbmQgaGlnaC1sZXZlbCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyBjb3B5aW5nLCBtb3ZpbmcsIGFuZFxuZGVsZXRpbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGNhbiBiZSBhY2hpZXZlZCB3aXRoIHRoZSBgYHNodXRpbGBgXG5tb2R1bGUuXG5cbldoZW4gYSBmaWxlIG9wZXJhdGlvbiBmYWlscyBmb3IgYW4gSS9PLXJlbGF0ZWQgcmVhc29uLCB0aGUgZXhjZXB0aW9uXG5gYElPRXJyb3JgYCBpcyByYWlzZWQuICBUaGlzIGluY2x1ZGVzIHNpdHVhdGlvbnMgd2hlcmUgdGhlIG9wZXJhdGlvblxuaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgcmVhc29uLCBsaWtlIGBgc2VlaygpYGAgb24gYSB0dHkgZGV2aWNlIG9yXG53cml0aW5nIGEgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcuXG5cbkZpbGVzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxuXG5maWxlLmNsb3NlKClcblxuICAgQ2xvc2UgdGhlIGZpbGUuICBBIGNsb3NlZCBmaWxlIGNhbm5vdCBiZSByZWFkIG9yIHdyaXR0ZW4gYW55IG1vcmUuXG4gICBBbnkgb3BlcmF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoYXQgdGhlIGZpbGUgYmUgb3BlbiB3aWxsIHJhaXNlIGFcbiAgIGBgVmFsdWVFcnJvcmBgIGFmdGVyIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZC4gIENhbGxpbmcgYGBjbG9zZSgpYGBcbiAgIG1vcmUgdGhhbiBvbmNlIGlzIGFsbG93ZWQuXG5cbiAgIEFzIG9mIFB5dGhvbiAyLjUsIHlvdSBjYW4gYXZvaWQgaGF2aW5nIHRvIGNhbGwgdGhpcyBtZXRob2RcbiAgIGV4cGxpY2l0bHkgaWYgeW91IHVzZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LiAgRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9sbG93aW5nIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGNsb3NlICpmKiB3aGVuIHRoZSBgYHdpdGhgYCBibG9ja1xuICAgaXMgZXhpdGVkOlxuXG4gICAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50ICMgVGhpcyBpc25cJ3QgcmVxdWlyZWQgaW4gUHl0aG9uIDIuNlxuXG4gICAgICB3aXRoIG9wZW4oImhlbGxvLnR4dCIpIGFzIGY6XG4gICAgICAgICAgZm9yIGxpbmUgaW4gZjpcbiAgICAgICAgICAgICAgcHJpbnQgbGluZVxuXG4gICBJbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHlvdSB3b3VsZCBoYXZlIG5lZWRlZCB0byBkbyB0aGlzIHRvXG4gICBnZXQgdGhlIHNhbWUgZWZmZWN0OlxuXG4gICAgICBmID0gb3BlbigiaGVsbG8udHh0IilcbiAgICAgIHRyeTpcbiAgICAgICAgICBmb3IgbGluZSBpbiBmOlxuICAgICAgICAgICAgICBwcmludCBsaW5lXG4gICAgICBmaW5hbGx5OlxuICAgICAgICAgIGYuY2xvc2UoKVxuXG4gICBOb3RlOiBOb3QgYWxsICJmaWxlLWxpa2UiIHR5cGVzIGluIFB5dGhvbiBzdXBwb3J0IHVzZSBhcyBhIGNvbnRleHRcbiAgICAgbWFuYWdlciBmb3IgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC4gIElmIHlvdXIgY29kZSBpcyBpbnRlbmRlZCB0b1xuICAgICB3b3JrIHdpdGggYW55IGZpbGUtbGlrZSBvYmplY3QsIHlvdSBjYW4gdXNlIHRoZSBmdW5jdGlvblxuICAgICBgYGNvbnRleHRsaWIuY2xvc2luZygpYGAgaW5zdGVhZCBvZiB1c2luZyB0aGUgb2JqZWN0IGRpcmVjdGx5LlxuXG5maWxlLmZsdXNoKClcblxuICAgRmx1c2ggdGhlIGludGVybmFsIGJ1ZmZlciwgbGlrZSBgYHN0ZGlvYGBcJ3MgYGBmZmx1c2goKWBgLiAgVGhpcyBtYXlcbiAgIGJlIGEgbm8tb3Agb24gc29tZSBmaWxlLWxpa2Ugb2JqZWN0cy5cblxuICAgTm90ZTogYGBmbHVzaCgpYGAgZG9lcyBub3QgbmVjZXNzYXJpbHkgd3JpdGUgdGhlIGZpbGVcJ3MgZGF0YSB0byBkaXNrLlxuICAgICBVc2UgYGBmbHVzaCgpYGAgZm9sbG93ZWQgYnkgYGBvcy5mc3luYygpYGAgdG8gZW5zdXJlIHRoaXNcbiAgICAgYmVoYXZpb3IuXG5cbmZpbGUuZmlsZW5vKClcblxuICAgUmV0dXJuIHRoZSBpbnRlZ2VyICJmaWxlIGRlc2NyaXB0b3IiIHRoYXQgaXMgdXNlZCBieSB0aGUgdW5kZXJseWluZ1xuICAgaW1wbGVtZW50YXRpb24gdG8gcmVxdWVzdCBJL08gb3BlcmF0aW9ucyBmcm9tIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBvdGhlciwgbG93ZXIgbGV2ZWwgaW50ZXJmYWNlcyB0aGF0IHVzZSBmaWxlXG4gICBkZXNjcmlwdG9ycywgc3VjaCBhcyB0aGUgYGBmY250bGBgIG1vZHVsZSBvciBgYG9zLnJlYWQoKWBgIGFuZFxuICAgZnJpZW5kcy5cblxuICAgTm90ZTogRmlsZS1saWtlIG9iamVjdHMgd2hpY2ggZG8gbm90IGhhdmUgYSByZWFsIGZpbGUgZGVzY3JpcHRvciBzaG91bGRcbiAgICAgKm5vdCogcHJvdmlkZSB0aGlzIG1ldGhvZCFcblxuZmlsZS5pc2F0dHkoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGZpbGUgaXMgY29ubmVjdGVkIHRvIGEgdHR5KC1saWtlKSBkZXZpY2UsXG4gICBlbHNlIGBgRmFsc2VgYC5cblxuICAgTm90ZTogSWYgYSBmaWxlLWxpa2Ugb2JqZWN0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSByZWFsIGZpbGUsIHRoaXNcbiAgICAgbWV0aG9kIHNob3VsZCAqbm90KiBiZSBpbXBsZW1lbnRlZC5cblxuZmlsZS5uZXh0KClcblxuICAgQSBmaWxlIG9iamVjdCBpcyBpdHMgb3duIGl0ZXJhdG9yLCBmb3IgZXhhbXBsZSBgYGl0ZXIoZilgYCByZXR1cm5zXG4gICAqZiogKHVubGVzcyAqZiogaXMgY2xvc2VkKS4gIFdoZW4gYSBmaWxlIGlzIHVzZWQgYXMgYW4gaXRlcmF0b3IsXG4gICB0eXBpY2FsbHkgaW4gYSBgYGZvcmBgIGxvb3AgKGZvciBleGFtcGxlLCBgYGZvciBsaW5lIGluIGY6IHByaW50XG4gICBsaW5lYGApLCB0aGUgYGBuZXh0KClgYCBtZXRob2QgaXMgY2FsbGVkIHJlcGVhdGVkbHkuICBUaGlzIG1ldGhvZFxuICAgcmV0dXJucyB0aGUgbmV4dCBpbnB1dCBsaW5lLCBvciByYWlzZXMgYGBTdG9wSXRlcmF0aW9uYGAgd2hlbiBFT0ZcbiAgIGlzIGhpdCB3aGVuIHRoZSBmaWxlIGlzIG9wZW4gZm9yIHJlYWRpbmcgKGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICAgd2hlbiB0aGUgZmlsZSBpcyBvcGVuIGZvciB3cml0aW5nKS4gIEluIG9yZGVyIHRvIG1ha2UgYSBgYGZvcmBgXG4gICBsb29wIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgb2YgbG9vcGluZyBvdmVyIHRoZSBsaW5lcyBvZiBhIGZpbGUgKGFcbiAgIHZlcnkgY29tbW9uIG9wZXJhdGlvbiksIHRoZSBgYG5leHQoKWBgIG1ldGhvZCB1c2VzIGEgaGlkZGVuIHJlYWQtXG4gICBhaGVhZCBidWZmZXIuICBBcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgcmVhZC1haGVhZCBidWZmZXIsXG4gICBjb21iaW5pbmcgYGBuZXh0KClgYCB3aXRoIG90aGVyIGZpbGUgbWV0aG9kcyAobGlrZSBgYHJlYWRsaW5lKClgYClcbiAgIGRvZXMgbm90IHdvcmsgcmlnaHQuICBIb3dldmVyLCB1c2luZyBgYHNlZWsoKWBgIHRvIHJlcG9zaXRpb24gdGhlXG4gICBmaWxlIHRvIGFuIGFic29sdXRlIHBvc2l0aW9uIHdpbGwgZmx1c2ggdGhlIHJlYWQtYWhlYWQgYnVmZmVyLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbmZpbGUucmVhZChbc2l6ZV0pXG5cbiAgIFJlYWQgYXQgbW9zdCAqc2l6ZSogYnl0ZXMgZnJvbSB0aGUgZmlsZSAobGVzcyBpZiB0aGUgcmVhZCBoaXRzIEVPRlxuICAgYmVmb3JlIG9idGFpbmluZyAqc2l6ZSogYnl0ZXMpLiAgSWYgdGhlICpzaXplKiBhcmd1bWVudCBpcyBuZWdhdGl2ZVxuICAgb3Igb21pdHRlZCwgcmVhZCBhbGwgZGF0YSB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIFRoZSBieXRlcyBhcmVcbiAgIHJldHVybmVkIGFzIGEgc3RyaW5nIG9iamVjdC4gIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCB3aGVuIEVPRlxuICAgaXMgZW5jb3VudGVyZWQgaW1tZWRpYXRlbHkuICAoRm9yIGNlcnRhaW4gZmlsZXMsIGxpa2UgdHR5cywgaXRcbiAgIG1ha2VzIHNlbnNlIHRvIGNvbnRpbnVlIHJlYWRpbmcgYWZ0ZXIgYW4gRU9GIGlzIGhpdC4pICBOb3RlIHRoYXRcbiAgIHRoaXMgbWV0aG9kIG1heSBjYWxsIHRoZSB1bmRlcmx5aW5nIEMgZnVuY3Rpb24gYGBmcmVhZCgpYGAgbW9yZVxuICAgdGhhbiBvbmNlIGluIGFuIGVmZm9ydCB0byBhY3F1aXJlIGFzIGNsb3NlIHRvICpzaXplKiBieXRlcyBhc1xuICAgcG9zc2libGUuIEFsc28gbm90ZSB0aGF0IHdoZW4gaW4gbm9uLWJsb2NraW5nIG1vZGUsIGxlc3MgZGF0YSB0aGFuXG4gICB3YXMgcmVxdWVzdGVkIG1heSBiZSByZXR1cm5lZCwgZXZlbiBpZiBubyAqc2l6ZSogcGFyYW1ldGVyIHdhc1xuICAgZ2l2ZW4uXG5cbiAgIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgc2ltcGx5IGEgd3JhcHBlciBmb3IgdGhlIHVuZGVybHlpbmcgYGBmcmVhZCgpYGBcbiAgICAgQyBmdW5jdGlvbiwgYW5kIHdpbGwgYmVoYXZlIHRoZSBzYW1lIGluIGNvcm5lciBjYXNlcywgc3VjaCBhc1xuICAgICB3aGV0aGVyIHRoZSBFT0YgdmFsdWUgaXMgY2FjaGVkLlxuXG5maWxlLnJlYWRsaW5lKFtzaXplXSlcblxuICAgUmVhZCBvbmUgZW50aXJlIGxpbmUgZnJvbSB0aGUgZmlsZS4gIEEgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXJcbiAgIGlzIGtlcHQgaW4gdGhlIHN0cmluZyAoYnV0IG1heSBiZSBhYnNlbnQgd2hlbiBhIGZpbGUgZW5kcyB3aXRoIGFuXG4gICBpbmNvbXBsZXRlIGxpbmUpLiBbNV0gIElmIHRoZSAqc2l6ZSogYXJndW1lbnQgaXMgcHJlc2VudCBhbmQgbm9uLVxuICAgbmVnYXRpdmUsIGl0IGlzIGEgbWF4aW11bSBieXRlIGNvdW50IChpbmNsdWRpbmcgdGhlIHRyYWlsaW5nXG4gICBuZXdsaW5lKSBhbmQgYW4gaW5jb21wbGV0ZSBsaW5lIG1heSBiZSByZXR1cm5lZC4gQW4gZW1wdHkgc3RyaW5nIGlzXG4gICByZXR1cm5lZCAqb25seSogd2hlbiBFT0YgaXMgZW5jb3VudGVyZWQgaW1tZWRpYXRlbHkuXG5cbiAgIE5vdGU6IFVubGlrZSBgYHN0ZGlvYGBcJ3MgYGBmZ2V0cygpYGAsIHRoZSByZXR1cm5lZCBzdHJpbmcgY29udGFpbnMgbnVsbFxuICAgICBjaGFyYWN0ZXJzIChgYFwnXFwwXCdgYCkgaWYgdGhleSBvY2N1cnJlZCBpbiB0aGUgaW5wdXQuXG5cbmZpbGUucmVhZGxpbmVzKFtzaXplaGludF0pXG5cbiAgIFJlYWQgdW50aWwgRU9GIHVzaW5nIGBgcmVhZGxpbmUoKWBgIGFuZCByZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmdcbiAgIHRoZSBsaW5lcyB0aHVzIHJlYWQuICBJZiB0aGUgb3B0aW9uYWwgKnNpemVoaW50KiBhcmd1bWVudCBpc1xuICAgcHJlc2VudCwgaW5zdGVhZCBvZiByZWFkaW5nIHVwIHRvIEVPRiwgd2hvbGUgbGluZXMgdG90YWxsaW5nXG4gICBhcHByb3hpbWF0ZWx5ICpzaXplaGludCogYnl0ZXMgKHBvc3NpYmx5IGFmdGVyIHJvdW5kaW5nIHVwIHRvIGFuXG4gICBpbnRlcm5hbCBidWZmZXIgc2l6ZSkgYXJlIHJlYWQuICBPYmplY3RzIGltcGxlbWVudGluZyBhIGZpbGUtbGlrZVxuICAgaW50ZXJmYWNlIG1heSBjaG9vc2UgdG8gaWdub3JlICpzaXplaGludCogaWYgaXQgY2Fubm90IGJlXG4gICBpbXBsZW1lbnRlZCwgb3IgY2Fubm90IGJlIGltcGxlbWVudGVkIGVmZmljaWVudGx5LlxuXG5maWxlLnhyZWFkbGluZXMoKVxuXG4gICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBzYW1lIHRoaW5nIGFzIGBgaXRlcihmKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjEuXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjM6IFVzZSBgYGZvciBsaW5lIGluIGZpbGVgYCBpbnN0ZWFkLlxuXG5maWxlLnNlZWsob2Zmc2V0Wywgd2hlbmNlXSlcblxuICAgU2V0IHRoZSBmaWxlXCdzIGN1cnJlbnQgcG9zaXRpb24sIGxpa2UgYGBzdGRpb2BgXCdzIGBgZnNlZWsoKWBgLiBUaGVcbiAgICp3aGVuY2UqIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAgYGBvcy5TRUVLX1NFVGBgIG9yXG4gICBgYDBgYCAoYWJzb2x1dGUgZmlsZSBwb3NpdGlvbmluZyk7IG90aGVyIHZhbHVlcyBhcmUgYGBvcy5TRUVLX0NVUmBgXG4gICBvciBgYDFgYCAoc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbikgYW5kXG4gICBgYG9zLlNFRUtfRU5EYGAgb3IgYGAyYGAgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBmaWxlXCdzIGVuZCkuICBUaGVyZVxuICAgaXMgbm8gcmV0dXJuIHZhbHVlLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBmLnNlZWsoMiwgb3MuU0VFS19DVVIpYGAgYWR2YW5jZXMgdGhlIHBvc2l0aW9uIGJ5XG4gICB0d28gYW5kIGBgZi5zZWVrKC0zLCBvcy5TRUVLX0VORClgYCBzZXRzIHRoZSBwb3NpdGlvbiB0byB0aGUgdGhpcmRcbiAgIHRvIGxhc3QuXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIGFwcGVuZGluZyAobW9kZSBgYFwnYVwnYGAgb3JcbiAgIGBgXCdhK1wnYGApLCBhbnkgYGBzZWVrKClgYCBvcGVyYXRpb25zIHdpbGwgYmUgdW5kb25lIGF0IHRoZSBuZXh0XG4gICB3cml0ZS4gIElmIHRoZSBmaWxlIGlzIG9ubHkgb3BlbmVkIGZvciB3cml0aW5nIGluIGFwcGVuZCBtb2RlIChtb2RlXG4gICBgYFwnYVwnYGApLCB0aGlzIG1ldGhvZCBpcyBlc3NlbnRpYWxseSBhIG5vLW9wLCBidXQgaXQgcmVtYWlucyB1c2VmdWxcbiAgIGZvciBmaWxlcyBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgd2l0aCByZWFkaW5nIGVuYWJsZWQgKG1vZGVcbiAgIGBgXCdhK1wnYGApLiAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGluIHRleHQgbW9kZSAod2l0aG91dCBgYFwnYlwnYGApLFxuICAgb25seSBvZmZzZXRzIHJldHVybmVkIGJ5IGBgdGVsbCgpYGAgYXJlIGxlZ2FsLiAgVXNlIG9mIG90aGVyXG4gICBvZmZzZXRzIGNhdXNlcyB1bmRlZmluZWQgYmVoYXZpb3IuXG5cbiAgIE5vdGUgdGhhdCBub3QgYWxsIGZpbGUgb2JqZWN0cyBhcmUgc2Vla2FibGUuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IFBhc3NpbmcgZmxvYXQgdmFsdWVzIGFzIG9mZnNldCBoYXMgYmVlblxuICAgZGVwcmVjYXRlZC5cblxuZmlsZS50ZWxsKClcblxuICAgUmV0dXJuIHRoZSBmaWxlXCdzIGN1cnJlbnQgcG9zaXRpb24sIGxpa2UgYGBzdGRpb2BgXCdzIGBgZnRlbGwoKWBgLlxuXG4gICBOb3RlOiBPbiBXaW5kb3dzLCBgYHRlbGwoKWBgIGNhbiByZXR1cm4gaWxsZWdhbCB2YWx1ZXMgKGFmdGVyIGFuXG4gICAgIGBgZmdldHMoKWBgKSB3aGVuIHJlYWRpbmcgZmlsZXMgd2l0aCBVbml4LXN0eWxlIGxpbmUtZW5kaW5ncy4gVXNlXG4gICAgIGJpbmFyeSBtb2RlIChgYFwncmJcJ2BgKSB0byBjaXJjdW12ZW50IHRoaXMgcHJvYmxlbS5cblxuZmlsZS50cnVuY2F0ZShbc2l6ZV0pXG5cbiAgIFRydW5jYXRlIHRoZSBmaWxlXCdzIHNpemUuICBJZiB0aGUgb3B0aW9uYWwgKnNpemUqIGFyZ3VtZW50IGlzXG4gICBwcmVzZW50LCB0aGUgZmlsZSBpcyB0cnVuY2F0ZWQgdG8gKGF0IG1vc3QpIHRoYXQgc2l6ZS4gIFRoZSBzaXplXG4gICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4gVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyBub3RcbiAgIGNoYW5nZWQuICBOb3RlIHRoYXQgaWYgYSBzcGVjaWZpZWQgc2l6ZSBleGNlZWRzIHRoZSBmaWxlXCdzIGN1cnJlbnRcbiAgIHNpemUsIHRoZSByZXN1bHQgaXMgcGxhdGZvcm0tZGVwZW5kZW50OiAgcG9zc2liaWxpdGllcyBpbmNsdWRlIHRoYXRcbiAgIHRoZSBmaWxlIG1heSByZW1haW4gdW5jaGFuZ2VkLCBpbmNyZWFzZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgYXMgaWZcbiAgIHplcm8tZmlsbGVkLCBvciBpbmNyZWFzZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgd2l0aCB1bmRlZmluZWQgbmV3XG4gICBjb250ZW50LiBBdmFpbGFiaWxpdHk6ICBXaW5kb3dzLCBtYW55IFVuaXggdmFyaWFudHMuXG5cbmZpbGUud3JpdGUoc3RyKVxuXG4gICBXcml0ZSBhIHN0cmluZyB0byB0aGUgZmlsZS4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4gIER1ZSB0b1xuICAgYnVmZmVyaW5nLCB0aGUgc3RyaW5nIG1heSBub3QgYWN0dWFsbHkgc2hvdyB1cCBpbiB0aGUgZmlsZSB1bnRpbFxuICAgdGhlIGBgZmx1c2goKWBgIG9yIGBgY2xvc2UoKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbmZpbGUud3JpdGVsaW5lcyhzZXF1ZW5jZSlcblxuICAgV3JpdGUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHRvIHRoZSBmaWxlLiAgVGhlIHNlcXVlbmNlIGNhbiBiZSBhbnlcbiAgIGl0ZXJhYmxlIG9iamVjdCBwcm9kdWNpbmcgc3RyaW5ncywgdHlwaWNhbGx5IGEgbGlzdCBvZiBzdHJpbmdzLlxuICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLiAoVGhlIG5hbWUgaXMgaW50ZW5kZWQgdG8gbWF0Y2hcbiAgIGBgcmVhZGxpbmVzKClgYDsgYGB3cml0ZWxpbmVzKClgYCBkb2VzIG5vdCBhZGQgbGluZSBzZXBhcmF0b3JzLilcblxuRmlsZXMgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuICBFYWNoIGl0ZXJhdGlvbiByZXR1cm5zIHRoZSBzYW1lXG5yZXN1bHQgYXMgYGBmaWxlLnJlYWRsaW5lKClgYCwgYW5kIGl0ZXJhdGlvbiBlbmRzIHdoZW4gdGhlXG5gYHJlYWRsaW5lKClgYCBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG5cbkZpbGUgb2JqZWN0cyBhbHNvIG9mZmVyIGEgbnVtYmVyIG9mIG90aGVyIGludGVyZXN0aW5nIGF0dHJpYnV0ZXMuXG5UaGVzZSBhcmUgbm90IHJlcXVpcmVkIGZvciBmaWxlLWxpa2Ugb2JqZWN0cywgYnV0IHNob3VsZCBiZVxuaW1wbGVtZW50ZWQgaWYgdGhleSBtYWtlIHNlbnNlIGZvciB0aGUgcGFydGljdWxhciBvYmplY3QuXG5cbmZpbGUuY2xvc2VkXG5cbiAgIGJvb2wgaW5kaWNhdGluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZmlsZSBvYmplY3QuICBUaGlzIGlzIGFcbiAgIHJlYWQtb25seSBhdHRyaWJ1dGU7IHRoZSBgYGNsb3NlKClgYCBtZXRob2QgY2hhbmdlcyB0aGUgdmFsdWUuIEl0XG4gICBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUuZW5jb2RpbmdcblxuICAgVGhlIGVuY29kaW5nIHRoYXQgdGhpcyBmaWxlIHVzZXMuIFdoZW4gVW5pY29kZSBzdHJpbmdzIGFyZSB3cml0dGVuXG4gICB0byBhIGZpbGUsIHRoZXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYnl0ZSBzdHJpbmdzIHVzaW5nIHRoaXNcbiAgIGVuY29kaW5nLiBJbiBhZGRpdGlvbiwgd2hlbiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCxcbiAgIHRoZSBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGVuY29kaW5nIHRoYXQgdGhlIHRlcm1pbmFsIGlzIGxpa2VseSB0byB1c2VcbiAgICh0aGF0ICBpbmZvcm1hdGlvbiBtaWdodCBiZSBpbmNvcnJlY3QgaWYgdGhlIHVzZXIgaGFzIG1pc2NvbmZpZ3VyZWRcbiAgIHRoZSAgdGVybWluYWwpLiBUaGUgYXR0cmlidXRlIGlzIHJlYWQtb25seSBhbmQgbWF5IG5vdCBiZSBwcmVzZW50XG4gICBvbiBhbGwgZmlsZS1saWtlIG9iamVjdHMuIEl0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlXG4gICB0aGUgZmlsZSB1c2VzIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyBmb3IgY29udmVydGluZyBVbmljb2RlXG4gICBzdHJpbmdzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbmZpbGUuZXJyb3JzXG5cbiAgIFRoZSBVbmljb2RlIGVycm9yIGhhbmRsZXIgdXNlZCBhbG9uZyB3aXRoIHRoZSBlbmNvZGluZy5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5maWxlLm1vZGVcblxuICAgVGhlIEkvTyBtb2RlIGZvciB0aGUgZmlsZS4gIElmIHRoZSBmaWxlIHdhcyBjcmVhdGVkIHVzaW5nIHRoZVxuICAgYGBvcGVuKClgYCBidWlsdC1pbiBmdW5jdGlvbiwgdGhpcyB3aWxsIGJlIHRoZSB2YWx1ZSBvZiB0aGUgKm1vZGUqXG4gICBwYXJhbWV0ZXIuICBUaGlzIGlzIGEgcmVhZC1vbmx5IGF0dHJpYnV0ZSBhbmQgbWF5IG5vdCBiZSBwcmVzZW50IG9uXG4gICBhbGwgZmlsZS1saWtlIG9iamVjdHMuXG5cbmZpbGUubmFtZVxuXG4gICBJZiB0aGUgZmlsZSBvYmplY3Qgd2FzIGNyZWF0ZWQgdXNpbmcgYGBvcGVuKClgYCwgdGhlIG5hbWUgb2YgdGhlXG4gICBmaWxlLiBPdGhlcndpc2UsIHNvbWUgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBzb3VyY2Ugb2YgdGhlIGZpbGVcbiAgIG9iamVjdCwgb2YgdGhlIGZvcm0gYGA8Li4uPmBgLiAgVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUgYW5kXG4gICBtYXkgbm90IGJlIHByZXNlbnQgb24gYWxsIGZpbGUtbGlrZSBvYmplY3RzLlxuXG5maWxlLm5ld2xpbmVzXG5cbiAgIElmIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCB0aGUgKi0td2l0aC11bml2ZXJzYWwtbmV3bGluZXMqIG9wdGlvbiB0b1xuICAgKipjb25maWd1cmUqKiAodGhlIGRlZmF1bHQpIHRoaXMgcmVhZC1vbmx5IGF0dHJpYnV0ZSBleGlzdHMsIGFuZFxuICAgZm9yIGZpbGVzIG9wZW5lZCBpbiB1bml2ZXJzYWwgbmV3bGluZSByZWFkIG1vZGUgaXQga2VlcHMgdHJhY2sgb2ZcbiAgIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlLiBUaGVcbiAgIHZhbHVlcyBpdCBjYW4gdGFrZSBhcmUgYGBcJ1xcclwnYGAsIGBgXCdcXG5cJ2BgLCBgYFwnXFxyXFxuXCdgYCwgYGBOb25lYGBcbiAgICh1bmtub3duLCBubyBuZXdsaW5lcyByZWFkIHlldCkgb3IgYSB0dXBsZSBjb250YWluaW5nIGFsbCB0aGVcbiAgIG5ld2xpbmUgdHlwZXMgc2VlbiwgdG8gaW5kaWNhdGUgdGhhdCBtdWx0aXBsZSBuZXdsaW5lIGNvbnZlbnRpb25zXG4gICB3ZXJlIGVuY291bnRlcmVkLiBGb3IgZmlsZXMgbm90IG9wZW5lZCBpbiB1bml2ZXJzYWwgbmV3bGluZSByZWFkXG4gICBtb2RlIHRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJpYnV0ZSB3aWxsIGJlIGBgTm9uZWBgLlxuXG5maWxlLnNvZnRzcGFjZVxuXG4gICBCb29sZWFuIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYSBzcGFjZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmVcbiAgIHByaW50ZWQgYmVmb3JlIGFub3RoZXIgdmFsdWUgd2hlbiB1c2luZyB0aGUgYGBwcmludGBgIHN0YXRlbWVudC5cbiAgIENsYXNzZXMgdGhhdCBhcmUgdHJ5aW5nIHRvIHNpbXVsYXRlIGEgZmlsZSBvYmplY3Qgc2hvdWxkIGFsc28gaGF2ZVxuICAgYSB3cml0YWJsZSBgYHNvZnRzcGFjZWBgIGF0dHJpYnV0ZSwgd2hpY2ggc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvXG4gICB6ZXJvLiAgVGhpcyB3aWxsIGJlIGF1dG9tYXRpYyBmb3IgbW9zdCBjbGFzc2VzIGltcGxlbWVudGVkIGluXG4gICBQeXRob24gKGNhcmUgbWF5IGJlIG5lZWRlZCBmb3Igb2JqZWN0cyB0aGF0IG92ZXJyaWRlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKTsgdHlwZXMgaW1wbGVtZW50ZWQgaW4gQyB3aWxsIGhhdmUgdG8gcHJvdmlkZSBhIHdyaXRhYmxlXG4gICBgYHNvZnRzcGFjZWBgIGF0dHJpYnV0ZS5cblxuICAgTm90ZTogVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHVzZWQgdG8gY29udHJvbCB0aGUgYGBwcmludGBgIHN0YXRlbWVudCxcbiAgICAgYnV0IHRvIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYHByaW50YGAgdG8ga2VlcCB0cmFjayBvZiBpdHNcbiAgICAgaW50ZXJuYWwgc3RhdGUuXG4nLAogICdibHRpbi1udWxsLW9iamVjdCc6IHUiXG5UaGUgTnVsbCBPYmplY3RcbioqKioqKioqKioqKioqKlxuXG5UaGlzIG9iamVjdCBpcyByZXR1cm5lZCBieSBmdW5jdGlvbnMgdGhhdCBkb24ndCBleHBsaWNpdGx5IHJldHVybiBhXG52YWx1ZS4gIEl0IHN1cHBvcnRzIG5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIG51bGxcbm9iamVjdCwgbmFtZWQgYGBOb25lYGAgKGEgYnVpbHQtaW4gbmFtZSkuXG5cbkl0IGlzIHdyaXR0ZW4gYXMgYGBOb25lYGAuXG4iLAogICdibHRpbi10eXBlLW9iamVjdHMnOiB1IlxuVHlwZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuVHlwZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBvYmplY3QgdHlwZXMuICBBbiBvYmplY3QncyB0eXBlIGlzXG5hY2Nlc3NlZCBieSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGB0eXBlKClgYC4gIFRoZXJlIGFyZSBubyBzcGVjaWFsXG5vcGVyYXRpb25zIG9uIHR5cGVzLiAgVGhlIHN0YW5kYXJkIG1vZHVsZSBgYHR5cGVzYGAgZGVmaW5lcyBuYW1lcyBmb3JcbmFsbCBzdGFuZGFyZCBidWlsdC1pbiB0eXBlcy5cblxuVHlwZXMgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBgYDx0eXBlICdpbnQnPmBgLlxuIiwKICAnYm9vbGVhbnMnOiB1J1xuQm9vbGVhbiBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKipcblxuICAgb3JfdGVzdCAgOjo9IGFuZF90ZXN0IHwgb3JfdGVzdCAib3IiIGFuZF90ZXN0XG4gICBhbmRfdGVzdCA6Oj0gbm90X3Rlc3QgfCBhbmRfdGVzdCAiYW5kIiBub3RfdGVzdFxuICAgbm90X3Rlc3QgOjo9IGNvbXBhcmlzb24gfCAibm90IiBub3RfdGVzdFxuXG5JbiB0aGUgY29udGV4dCBvZiBCb29sZWFuIG9wZXJhdGlvbnMsIGFuZCBhbHNvIHdoZW4gZXhwcmVzc2lvbnMgYXJlXG51c2VkIGJ5IGNvbnRyb2wgZmxvdyBzdGF0ZW1lbnRzLCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIGZhbHNlOiBgYEZhbHNlYGAsIGBgTm9uZWBgLCBudW1lcmljIHplcm8gb2YgYWxsIHR5cGVzLCBhbmQgZW1wdHlcbnN0cmluZ3MgYW5kIGNvbnRhaW5lcnMgKGluY2x1ZGluZyBzdHJpbmdzLCB0dXBsZXMsIGxpc3RzLFxuZGljdGlvbmFyaWVzLCBzZXRzIGFuZCBmcm96ZW5zZXRzKS4gIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGludGVycHJldGVkXG5hcyB0cnVlLiAgKFNlZSB0aGUgYGBfX25vbnplcm9fXygpYGAgc3BlY2lhbCBtZXRob2QgZm9yIGEgd2F5IHRvXG5jaGFuZ2UgdGhpcy4pXG5cblRoZSBvcGVyYXRvciBgYG5vdGBgIHlpZWxkcyBgYFRydWVgYCBpZiBpdHMgYXJndW1lbnQgaXMgZmFsc2UsXG5gYEZhbHNlYGAgb3RoZXJ3aXNlLlxuXG5UaGUgZXhwcmVzc2lvbiBgYHggYW5kIHlgYCBmaXJzdCBldmFsdWF0ZXMgKngqOyBpZiAqeCogaXMgZmFsc2UsIGl0c1xudmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZVxuaXMgcmV0dXJuZWQuXG5cblRoZSBleHByZXNzaW9uIGBgeCBvciB5YGAgZmlyc3QgZXZhbHVhdGVzICp4KjsgaWYgKngqIGlzIHRydWUsIGl0c1xudmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZVxuaXMgcmV0dXJuZWQuXG5cbihOb3RlIHRoYXQgbmVpdGhlciBgYGFuZGBgIG5vciBgYG9yYGAgcmVzdHJpY3QgdGhlIHZhbHVlIGFuZCB0eXBlIHRoZXlcbnJldHVybiB0byBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgLCBidXQgcmF0aGVyIHJldHVybiB0aGUgbGFzdCBldmFsdWF0ZWRcbmFyZ3VtZW50LiBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwsIGUuZy4sIGlmIGBgc2BgIGlzIGEgc3RyaW5nIHRoYXRcbnNob3VsZCBiZSByZXBsYWNlZCBieSBhIGRlZmF1bHQgdmFsdWUgaWYgaXQgaXMgZW1wdHksIHRoZSBleHByZXNzaW9uXG5gYHMgb3IgXCdmb29cJ2BgIHlpZWxkcyB0aGUgZGVzaXJlZCB2YWx1ZS4gIEJlY2F1c2UgYGBub3RgYCBoYXMgdG9cbmludmVudCBhIHZhbHVlIGFueXdheSwgaXQgZG9lcyBub3QgYm90aGVyIHRvIHJldHVybiBhIHZhbHVlIG9mIHRoZVxuc2FtZSB0eXBlIGFzIGl0cyBhcmd1bWVudCwgc28gZS5nLiwgYGBub3QgXCdmb29cJ2BgIHlpZWxkcyBgYEZhbHNlYGAsXG5ub3QgYGBcJ1wnYGAuKVxuJywKQEAgLTE4LDE2ICsxOCwxNiBAQAogICdjYWxsYWJsZS10eXBlcyc6IHUnXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCBgYHgoYXJnMSwgYXJnMiwgLi4uKWBgIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgYGB4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLilgYC5cbicsCiAgJ2NhbGxzJzogdSdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgZnVuY3Rpb24pIHdpdGggYSBwb3NzaWJseVxuZW1wdHkgc2VyaWVzIG9mIGFyZ3VtZW50czpcblxuICAgY2FsbCAgICAgICAgICAgICAgICAgOjo9IHByaW1hcnkgIigiIFthcmd1bWVudF9saXN0IFsiLCJdXG4gICAgICAgICAgICB8IGV4cHJlc3Npb24gZ2VuZXhwcl9mb3JdICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiAiKiIgZXhwcmVzc2lvbl0gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZFxuYXJndW1lbnRzIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy5cblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIG9iamVjdCAodXNlci1kZWZpbmVkXG5mdW5jdGlvbnMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgbWV0aG9kcyBvZiBidWlsdC1pbiBvYmplY3RzLCBjbGFzc1xub2JqZWN0cywgbWV0aG9kcyBvZiBjbGFzcyBpbnN0YW5jZXMsIGFuZCBjZXJ0YWluIGNsYXNzIGluc3RhbmNlc1xudGhlbXNlbHZlcyBhcmUgY2FsbGFibGU7IGV4dGVuc2lvbnMgbWF5IGRlZmluZSBhZGRpdGlvbmFsIGNhbGxhYmxlXG5vYmplY3QgdHlwZXMpLiAgQWxsIGFyZ3VtZW50IGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsXG5pcyBhdHRlbXB0ZWQuICBQbGVhc2UgcmVmZXIgdG8gc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGVcbnN5bnRheCBvZiBmb3JtYWwgcGFyYW1ldGVyIGxpc3RzLlxuXG5JZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcHJlc2VudCwgdGhleSBhcmUgZmlyc3QgY29udmVydGVkIHRvXG5wb3NpdGlvbmFsIGFyZ3VtZW50cywgYXMgZm9sbG93cy4gIEZpcnN0LCBhIGxpc3Qgb2YgdW5maWxsZWQgc2xvdHMgaXNcbmNyZWF0ZWQgZm9yIHRoZSBmb3JtYWwgcGFyYW1ldGVycy4gIElmIHRoZXJlIGFyZSBOIHBvc2l0aW9uYWxcbmFyZ3VtZW50cywgdGhleSBhcmUgcGxhY2VkIGluIHRoZSBmaXJzdCBOIHNsb3RzLiAgTmV4dCwgZm9yIGVhY2hcbmtleXdvcmQgYXJndW1lbnQsIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZVxuY29ycmVzcG9uZGluZyBzbG90IChpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgZm9ybWFsXG5wYXJhbWV0ZXIgbmFtZSwgdGhlIGZpcnN0IHNsb3QgaXMgdXNlZCwgYW5kIHNvIG9uKS4gIElmIHRoZSBzbG90IGlzXG5hbHJlYWR5IGZpbGxlZCwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuIE90aGVyd2lzZSwgdGhlXG52YWx1ZSBvZiB0aGUgYXJndW1lbnQgaXMgcGxhY2VkIGluIHRoZSBzbG90LCBmaWxsaW5nIGl0IChldmVuIGlmIHRoZVxuZXhwcmVzc2lvbiBpcyBgYE5vbmVgYCwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhXG5gYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBPdGhlcndpc2UsIHRoZSBsaXN0IG9mIGZpbGxlZFxuc2xvdHMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGNhbGwuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQW4gaW1wbGVtZW50YXRpb24gbWF5IHByb3ZpZGVcbmJ1aWx0LWluIGZ1bmN0aW9ucyB3aG9zZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZG8gbm90IGhhdmUgbmFtZXMsIGV2ZW5cbmlmIHRoZXkgYXJlIFwnbmFtZWRcJyBmb3IgdGhlIHB1cnBvc2Ugb2YgZG9jdW1lbnRhdGlvbiwgYW5kIHdoaWNoXG50aGVyZWZvcmUgY2Fubm90IGJlIHN1cHBsaWVkIGJ5IGtleXdvcmQuICBJbiBDUHl0aG9uLCB0aGlzIGlzIHRoZSBjYXNlXG5mb3IgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMgdGhhdCB1c2UgYGBQeUFyZ19QYXJzZVR1cGxlKClgYCB0b1xucGFyc2UgdGhlaXIgYXJndW1lbnRzLlxuXG5JZiB0aGVyZSBhcmUgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRoZXJlIGFyZSBmb3JtYWwgcGFyYW1ldGVyXG5zbG90cywgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggYGAqaWRlbnRpZmllcmBgIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdCBmb3JtYWxcbnBhcmFtZXRlciByZWNlaXZlcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuKG9yIGFuIGVtcHR5IHR1cGxlIGlmIHRoZXJlIHdlcmUgbm8gZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzKS5cblxuSWYgYW55IGtleXdvcmQgYXJndW1lbnQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZvcm1hbCBwYXJhbWV0ZXJcbm5hbWUsIGEgYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLCB1bmxlc3MgYSBmb3JtYWwgcGFyYW1ldGVyXG51c2luZyB0aGUgc3ludGF4IGBgKippZGVudGlmaWVyYGAgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0XG5mb3JtYWwgcGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4IGBgKmV4cHJlc3Npb25gYCBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLFxuYGBleHByZXNzaW9uYGAgbXVzdCBldmFsdWF0ZSB0byBhIHNlcXVlbmNlLiAgRWxlbWVudHMgZnJvbSB0aGlzXG5zZXF1ZW5jZSBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cztcbmlmIHRoZXJlIGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLC4uLiwgKnhOKiwgYW5kIGBgZXhwcmVzc2lvbmBgXG5ldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGNhbGxcbndpdGggTStOIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgKnkxKiwgLi4uLCAqeU0qLlxuXG5BIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCBhbHRob3VnaCB0aGUgYGAqZXhwcmVzc2lvbmBgIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlIGBgKipleHByZXNzaW9uYGAgYXJndW1lbnQsIGlmIGFueSAtLSBzZWVcbmJlbG93KS4gIFNvOlxuXG4gICA+Pj4gZGVmIGYoYSwgYik6XG4gICAuLi4gIHByaW50IGEsIGJcbiAgIC4uLlxuICAgPj4+IGYoYj0xLCAqKDIsKSlcbiAgIDIgMVxuICAgPj4+IGYoYT0xLCAqKDIsKSlcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgVHlwZUVycm9yOiBmKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCBcJ2FcJ1xuICAgPj4+IGYoMSwgKigyLCkpXG4gICAxIDJcblxuSXQgaXMgdW51c3VhbCBmb3IgYm90aCBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgdGhlIGBgKmV4cHJlc3Npb25gYFxuc3ludGF4IHRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lc1xubm90IGFyaXNlLlxuXG5JZiB0aGUgc3ludGF4IGBgKipleHByZXNzaW9uYGAgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbmBgZXhwcmVzc2lvbmBgIG11c3QgZXZhbHVhdGUgdG8gYSBtYXBwaW5nLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlXG50cmVhdGVkIGFzIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBJbiB0aGUgY2FzZSBvZiBhIGtleXdvcmRcbmFwcGVhcmluZyBpbiBib3RoIGBgZXhwcmVzc2lvbmBgIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LFxuYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5cbkZvcm1hbCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzeW50YXggYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGBcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuICBGb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4IGBgKHN1Ymxpc3QpYGAgY2Fubm90IGJlXG51c2VkIGFzIGtleXdvcmQgYXJndW1lbnQgbmFtZXM7IHRoZSBvdXRlcm1vc3Qgc3VibGlzdCBjb3JyZXNwb25kcyB0byBhXG5zaW5nbGUgdW5uYW1lZCBhcmd1bWVudCBzbG90LCBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlIGlzIGFzc2lnbmVkIHRvXG50aGUgc3VibGlzdCB1c2luZyB0aGUgdXN1YWwgdHVwbGUgYXNzaWdubWVudCBydWxlcyBhZnRlciBhbGwgb3RoZXJcbnBhcmFtZXRlciBwcm9jZXNzaW5nIGlzIGRvbmUuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSBgYE5vbmVgYCwgdW5sZXNzIGl0IHJhaXNlc1xuYW4gZXhjZXB0aW9uLiAgSG93IHRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGVcbmNhbGxhYmxlIG9iamVjdC5cblxuSWYgaXQgaXMtLS1cblxuYSB1c2VyLWRlZmluZWQgZnVuY3Rpb246XG4gICBUaGUgY29kZSBibG9jayBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCBwYXNzaW5nIGl0IHRoZVxuICAgYXJndW1lbnQgbGlzdC4gIFRoZSBmaXJzdCB0aGluZyB0aGUgY29kZSBibG9jayB3aWxsIGRvIGlzIGJpbmQgdGhlXG4gICBmb3JtYWwgcGFyYW1ldGVycyB0byB0aGUgYXJndW1lbnRzOyB0aGlzIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4gICAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqLiAgV2hlbiB0aGUgY29kZSBibG9jayBleGVjdXRlcyBhIGBgcmV0dXJuYGBcbiAgIHN0YXRlbWVudCwgdGhpcyBzcGVjaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY2FsbC5cblxuYSBidWlsdC1pbiBmdW5jdGlvbiBvciBtZXRob2Q6XG4gICBUaGUgcmVzdWx0IGlzIHVwIHRvIHRoZSBpbnRlcnByZXRlcjsgc2VlICpCdWlsdC1pbiBGdW5jdGlvbnMqIGZvclxuICAgdGhlIGRlc2NyaXB0aW9ucyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMuXG5cbmEgY2xhc3Mgb2JqZWN0OlxuICAgQSBuZXcgaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyBpcyByZXR1cm5lZC5cblxuYSBjbGFzcyBpbnN0YW5jZSBtZXRob2Q6XG4gICBUaGUgY29ycmVzcG9uZGluZyB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aXRoIGFuIGFyZ3VtZW50XG4gICBsaXN0IHRoYXQgaXMgb25lIGxvbmdlciB0aGFuIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjYWxsOiB0aGVcbiAgIGluc3RhbmNlIGJlY29tZXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXG5hIGNsYXNzIGluc3RhbmNlOlxuICAgVGhlIGNsYXNzIG11c3QgZGVmaW5lIGEgYGBfX2NhbGxfXygpYGAgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW5cbiAgIHRoZSBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAogICdjbGFzcyc6IHUnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbZXhwcmVzc2lvbl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0IGZpcnN0IGV2YWx1YXRlcyB0aGVcbmluaGVyaXRhbmNlIGxpc3QsIGlmIHByZXNlbnQuICBFYWNoIGl0ZW0gaW4gdGhlIGluaGVyaXRhbmNlIGxpc3RcbnNob3VsZCBldmFsdWF0ZSB0byBhIGNsYXNzIG9iamVjdCBvciBjbGFzcyB0eXBlIHdoaWNoIGFsbG93c1xuc3ViY2xhc3NpbmcuICBUaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb25cbmZyYW1lIChzZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbFxubmFtZXNwYWNlIGFuZCB0aGUgb3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZVxuY29udGFpbnMgb25seSBmdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlc1xuZXhlY3V0aW9uLCBpdHMgZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpc1xuc2F2ZWQuIFs0XSBBIGNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3RcbmZvciB0aGUgYmFzZSBjbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlXG5kaWN0aW9uYXJ5LiAgVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlXG5vcmlnaW5hbCBsb2NhbCBuYW1lc3BhY2UuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgdmFyaWFibGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgYWxsIGluc3RhbmNlcy4gIFRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzLCB0aGV5IGNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuXG5Cb3RoIGNsYXNzIGFuZCBpbnN0YW5jZSB2YXJpYWJsZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIHZhcmlhYmxlIGhpZGVzIGEgY2xhc3MgdmFyaWFibGUgd2l0aFxudGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiBDbGFzcyB2YXJpYWJsZXMgY2FuIGJlIHVzZWRcbmFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW5cbmxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgRm9yICpuZXctc3R5bGUgY2xhc3MqZXMsIGRlc2NyaXB0b3JzIGNhblxuYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uXG5kZXRhaWxzLlxuXG5DbGFzcyBkZWZpbml0aW9ucywgbGlrZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yXG5tb3JlICpkZWNvcmF0b3IqIGV4cHJlc3Npb25zLiAgVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3JcbmV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IgZnVuY3Rpb25zLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Ncbm9iamVjdCwgd2hpY2ggaXMgdGhlbiBib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgb25seSBpZiB0aGVyZVxuICAgIGlzIG5vIGBgZmluYWxseWBgIGNsYXVzZSB0aGF0IG5lZ2F0ZXMgdGhlIGV4Y2VwdGlvbi5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgYGByZXR1cm5gYCwgYGBjb250aW51ZWBgLCBvclxuICAgIGBgYnJlYWtgYCBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgYGBfX2RvY19fYGAgYXR0cmlidXRlIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgZnVuY3Rpb25cJ3MgKmRvY3N0cmluZyouXG5cbls0XSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjbGFzc1xuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgbmFtZXNwYWNlXCdzIGBgX19kb2NfX2BgIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCi0gJ2NvZXJjaW9uLXJ1bGVzJzogdSJcbkNvZXJjaW9uIHJ1bGVzXG4qKioqKioqKioqKioqKlxuXG5UaGlzIHNlY3Rpb24gdXNlZCB0byBkb2N1bWVudCB0aGUgcnVsZXMgZm9yIGNvZXJjaW9uLiAgQXMgdGhlIGxhbmd1YWdlXG5oYXMgZXZvbHZlZCwgdGhlIGNvZXJjaW9uIHJ1bGVzIGhhdmUgYmVjb21lIGhhcmQgdG8gZG9jdW1lbnRcbnByZWNpc2VseTsgZG9jdW1lbnRpbmcgd2hhdCBvbmUgdmVyc2lvbiBvZiBvbmUgcGFydGljdWxhclxuaW1wbGVtZW50YXRpb24gZG9lcyBpcyB1bmRlc2lyYWJsZS4gIEluc3RlYWQsIGhlcmUgYXJlIHNvbWUgaW5mb3JtYWxcbmd1aWRlbGluZXMgcmVnYXJkaW5nIGNvZXJjaW9uLiAgSW4gUHl0aG9uIDMuMCwgY29lcmNpb24gd2lsbCBub3QgYmVcbnN1cHBvcnRlZC5cblxuKiBJZiB0aGUgbGVmdCBvcGVyYW5kIG9mIGEgJSBvcGVyYXRvciBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCxcbiAgbm8gY29lcmNpb24gdGFrZXMgcGxhY2UgYW5kIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gaXNcbiAgaW52b2tlZCBpbnN0ZWFkLlxuXG4qIEl0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCB0byBkZWZpbmUgYSBjb2VyY2lvbiBvcGVyYXRpb24uIE1peGVkLVxuICBtb2RlIG9wZXJhdGlvbnMgb24gdHlwZXMgdGhhdCBkb24ndCBkZWZpbmUgY29lcmNpb24gcGFzcyB0aGVcbiAgb3JpZ2luYWwgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRpb24uXG5cbiogTmV3LXN0eWxlIGNsYXNzZXMgKHRob3NlIGRlcml2ZWQgZnJvbSBgYG9iamVjdGBgKSBuZXZlciBpbnZva2UgdGhlXG4gIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kIGluIHJlc3BvbnNlIHRvIGEgYmluYXJ5IG9wZXJhdG9yOyB0aGUgb25seVxuICB0aW1lIGBgX19jb2VyY2VfXygpYGAgaXMgaW52b2tlZCBpcyB3aGVuIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICBgYGNvZXJjZSgpYGAgaXMgY2FsbGVkLlxuXG4qIEZvciBtb3N0IGludGVudHMgYW5kIHB1cnBvc2VzLCBhbiBvcGVyYXRvciB0aGF0IHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMgb25lIHRoYXQgaXMgbm90XG4gIGltcGxlbWVudGVkIGF0IGFsbC5cblxuKiBCZWxvdywgYGBfX29wX18oKWBgIGFuZCBgYF9fcm9wX18oKWBgIGFyZSB1c2VkIHRvIHNpZ25pZnkgdGhlXG4gIGdlbmVyaWMgbWV0aG9kIG5hbWVzIGNvcnJlc3BvbmRpbmcgdG8gYW4gb3BlcmF0b3I7IGBgX19pb3BfXygpYGAgaXNcbiAgdXNlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgaW4tcGxhY2Ugb3BlcmF0b3IuICBGb3IgZXhhbXBsZSwgZm9yIHRoZVxuICBvcGVyYXRvciAnYGArYGAnLCBgYF9fYWRkX18oKWBgIGFuZCBgYF9fcmFkZF9fKClgYCBhcmUgdXNlZCBmb3IgdGhlXG4gIGxlZnQgYW5kIHJpZ2h0IHZhcmlhbnQgb2YgdGhlIGJpbmFyeSBvcGVyYXRvciwgYW5kIGBgX19pYWRkX18oKWBgXG4gIGZvciB0aGUgaW4tcGxhY2UgdmFyaWFudC5cblxuKiBGb3Igb2JqZWN0cyAqeCogYW5kICp5KiwgZmlyc3QgYGB4Ll9fb3BfXyh5KWBgIGlzIHRyaWVkLiAgSWYgdGhpcyBpc1xuICBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJucyBgYE5vdEltcGxlbWVudGVkYGAsIGBgeS5fX3JvcF9fKHgpYGAgaXNcbiAgdHJpZWQuICBJZiB0aGlzIGlzIGFsc28gbm90IGltcGxlbWVudGVkIG9yIHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIEJ1dCBzZWVcbiAgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiogRXhjZXB0aW9uIHRvIHRoZSBwcmV2aW91cyBpdGVtOiBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGluc3RhbmNlXG4gIG9mIGEgYnVpbHQtaW4gdHlwZSBvciBhIG5ldy1zdHlsZSBjbGFzcywgYW5kIHRoZSByaWdodCBvcGVyYW5kIGlzIGFuXG4gIGluc3RhbmNlIG9mIGEgcHJvcGVyIHN1YmNsYXNzIG9mIHRoYXQgdHlwZSBvciBjbGFzcyBhbmQgb3ZlcnJpZGVzXG4gIHRoZSBiYXNlJ3MgYGBfX3JvcF9fKClgYCBtZXRob2QsIHRoZSByaWdodCBvcGVyYW5kJ3MgYGBfX3JvcF9fKClgYFxuICBtZXRob2QgaXMgdHJpZWQgKmJlZm9yZSogdGhlIGxlZnQgb3BlcmFuZCdzIGBgX19vcF9fKClgYCBtZXRob2QuXG5cbiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgYSBzdWJjbGFzcyBjYW4gY29tcGxldGVseSBvdmVycmlkZSBiaW5hcnlcbiAgb3BlcmF0b3JzLiBPdGhlcndpc2UsIHRoZSBsZWZ0IG9wZXJhbmQncyBgYF9fb3BfXygpYGAgbWV0aG9kIHdvdWxkXG4gIGFsd2F5cyBhY2NlcHQgdGhlIHJpZ2h0IG9wZXJhbmQ6IHdoZW4gYW4gaW5zdGFuY2Ugb2YgYSBnaXZlbiBjbGFzc1xuICBpcyBleHBlY3RlZCwgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZiB0aGF0IGNsYXNzIGlzIGFsd2F5c1xuICBhY2NlcHRhYmxlLlxuXG4qIFdoZW4gZWl0aGVyIG9wZXJhbmQgdHlwZSBkZWZpbmVzIGEgY29lcmNpb24sIHRoaXMgY29lcmNpb24gaXMgY2FsbGVkXG4gIGJlZm9yZSB0aGF0IHR5cGUncyBgYF9fb3BfXygpYGAgb3IgYGBfX3JvcF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLFxuICBidXQgbm8gc29vbmVyLiAgSWYgdGhlIGNvZXJjaW9uIHJldHVybnMgYW4gb2JqZWN0IG9mIGEgZGlmZmVyZW50XG4gIHR5cGUgZm9yIHRoZSBvcGVyYW5kIHdob3NlIGNvZXJjaW9uIGlzIGludm9rZWQsIHBhcnQgb2YgdGhlIHByb2Nlc3NcbiAgaXMgcmVkb25lIHVzaW5nIHRoZSBuZXcgb2JqZWN0LlxuXG4qIFdoZW4gYW4gaW4tcGxhY2Ugb3BlcmF0b3IgKGxpa2UgJ2BgKz1gYCcpIGlzIHVzZWQsIGlmIHRoZSBsZWZ0XG4gIG9wZXJhbmQgaW1wbGVtZW50cyBgYF9faW9wX18oKWBgLCBpdCBpcyBpbnZva2VkIHdpdGhvdXQgYW55XG4gIGNvZXJjaW9uLiAgV2hlbiB0aGUgb3BlcmF0aW9uIGZhbGxzIGJhY2sgdG8gYGBfX29wX18oKWBgIGFuZC9vclxuICBgYF9fcm9wX18oKWBgLCB0aGUgbm9ybWFsIGNvZXJjaW9uIHJ1bGVzIGFwcGx5LlxuXG4qIEluIGBgeCArIHlgYCwgaWYgKngqIGlzIGEgc2VxdWVuY2UgdGhhdCBpbXBsZW1lbnRzIHNlcXVlbmNlXG4gIGNvbmNhdGVuYXRpb24sIHNlcXVlbmNlIGNvbmNhdGVuYXRpb24gaXMgaW52b2tlZC5cblxuKiBJbiBgYHggKiB5YGAsIGlmIG9uZSBvcGVyYXRvciBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICByZXBldGl0aW9uLCBhbmQgdGhlIG90aGVyIGlzIGFuIGludGVnZXIgKGBgaW50YGAgb3IgYGBsb25nYGApLFxuICBzZXF1ZW5jZSByZXBldGl0aW9uIGlzIGludm9rZWQuXG5cbiogUmljaCBjb21wYXJpc29ucyAoaW1wbGVtZW50ZWQgYnkgbWV0aG9kcyBgYF9fZXFfXygpYGAgYW5kIHNvIG9uKVxuICBuZXZlciB1c2UgY29lcmNpb24uICBUaHJlZS13YXkgY29tcGFyaXNvbiAoaW1wbGVtZW50ZWQgYnlcbiAgYGBfX2NtcF9fKClgYCkgZG9lcyB1c2UgY29lcmNpb24gdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBhcyBvdGhlclxuICBiaW5hcnkgb3BlcmF0aW9ucyB1c2UgaXQuXG5cbiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiBudW1lcmljIHR5cGVzIGBgaW50YGAsXG4gIGBgbG9uZ2BgIGFuZCBgYGZsb2F0YGAgZG8gbm90IHVzZSBjb2VyY2lvbjsgdGhlIHR5cGUgYGBjb21wbGV4YGBcbiAgaG93ZXZlciBkb2VzIHVzZSBjb2VyY2lvbiBmb3IgYmluYXJ5IG9wZXJhdG9ycyBhbmQgcmljaCBjb21wYXJpc29ucyxcbiAgZGVzcGl0ZSB0aGUgYWJvdmUgcnVsZXMuICBUaGUgZGlmZmVyZW5jZSBjYW4gYmVjb21lIGFwcGFyZW50IHdoZW5cbiAgc3ViY2xhc3NpbmcgdGhlc2UgdHlwZXMuICBPdmVyIHRpbWUsIHRoZSB0eXBlIGBgY29tcGxleGBgIG1heSBiZVxuICBmaXhlZCB0byBhdm9pZCBjb2VyY2lvbi4gQWxsIHRoZXNlIHR5cGVzIGltcGxlbWVudCBhXG4gIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kLCBmb3IgdXNlIGJ5IHRoZSBidWlsdC1pbiBgYGNvZXJjZSgpYGBcbiAgZnVuY3Rpb24uXG4iLAorICdjb2VyY2lvbi1ydWxlcyc6IHUiXG5Db2VyY2lvbiBydWxlc1xuKioqKioqKioqKioqKipcblxuVGhpcyBzZWN0aW9uIHVzZWQgdG8gZG9jdW1lbnQgdGhlIHJ1bGVzIGZvciBjb2VyY2lvbi4gIEFzIHRoZSBsYW5ndWFnZVxuaGFzIGV2b2x2ZWQsIHRoZSBjb2VyY2lvbiBydWxlcyBoYXZlIGJlY29tZSBoYXJkIHRvIGRvY3VtZW50XG5wcmVjaXNlbHk7IGRvY3VtZW50aW5nIHdoYXQgb25lIHZlcnNpb24gb2Ygb25lIHBhcnRpY3VsYXJcbmltcGxlbWVudGF0aW9uIGRvZXMgaXMgdW5kZXNpcmFibGUuICBJbnN0ZWFkLCBoZXJlIGFyZSBzb21lIGluZm9ybWFsXG5ndWlkZWxpbmVzIHJlZ2FyZGluZyBjb2VyY2lvbi4gIEluIFB5dGhvbiAzLjAsIGNvZXJjaW9uIHdpbGwgbm90IGJlXG5zdXBwb3J0ZWQuXG5cbiogSWYgdGhlIGxlZnQgb3BlcmFuZCBvZiBhICUgb3BlcmF0b3IgaXMgYSBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QsXG4gIG5vIGNvZXJjaW9uIHRha2VzIHBsYWNlIGFuZCB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uIGlzXG4gIGludm9rZWQgaW5zdGVhZC5cblxuKiBJdCBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQgdG8gZGVmaW5lIGEgY29lcmNpb24gb3BlcmF0aW9uLiBNaXhlZC1cbiAgbW9kZSBvcGVyYXRpb25zIG9uIHR5cGVzIHRoYXQgZG9uJ3QgZGVmaW5lIGNvZXJjaW9uIHBhc3MgdGhlXG4gIG9yaWdpbmFsIGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLlxuXG4qIE5ldy1zdHlsZSBjbGFzc2VzICh0aG9zZSBkZXJpdmVkIGZyb20gYGBvYmplY3RgYCkgbmV2ZXIgaW52b2tlIHRoZVxuICBgYF9fY29lcmNlX18oKWBgIG1ldGhvZCBpbiByZXNwb25zZSB0byBhIGJpbmFyeSBvcGVyYXRvcjsgdGhlIG9ubHlcbiAgdGltZSBgYF9fY29lcmNlX18oKWBgIGlzIGludm9rZWQgaXMgd2hlbiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgYGBjb2VyY2UoKWBgIGlzIGNhbGxlZC5cblxuKiBGb3IgbW9zdCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgYW4gb3BlcmF0b3IgdGhhdCByZXR1cm5zXG4gIGBgTm90SW1wbGVtZW50ZWRgYCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIG9uZSB0aGF0IGlzIG5vdFxuICBpbXBsZW1lbnRlZCBhdCBhbGwuXG5cbiogQmVsb3csIGBgX19vcF9fKClgYCBhbmQgYGBfX3JvcF9fKClgYCBhcmUgdXNlZCB0byBzaWduaWZ5IHRoZVxuICBnZW5lcmljIG1ldGhvZCBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGFuIG9wZXJhdG9yOyBgYF9faW9wX18oKWBgIGlzXG4gIHVzZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGluLXBsYWNlIG9wZXJhdG9yLiAgRm9yIGV4YW1wbGUsIGZvciB0aGVcbiAgb3BlcmF0b3IgJ2BgK2BgJywgYGBfX2FkZF9fKClgYCBhbmQgYGBfX3JhZGRfXygpYGAgYXJlIHVzZWQgZm9yIHRoZVxuICBsZWZ0IGFuZCByaWdodCB2YXJpYW50IG9mIHRoZSBiaW5hcnkgb3BlcmF0b3IsIGFuZCBgYF9faWFkZF9fKClgYFxuICBmb3IgdGhlIGluLXBsYWNlIHZhcmlhbnQuXG5cbiogRm9yIG9iamVjdHMgKngqIGFuZCAqeSosIGZpcnN0IGBgeC5fX29wX18oeSlgYCBpcyB0cmllZC4gIElmIHRoaXMgaXNcbiAgbm90IGltcGxlbWVudGVkIG9yIHJldHVybnMgYGBOb3RJbXBsZW1lbnRlZGBgLCBgYHkuX19yb3BfXyh4KWBgIGlzXG4gIHRyaWVkLiAgSWYgdGhpcyBpcyBhbHNvIG5vdCBpbXBsZW1lbnRlZCBvciByZXR1cm5zXG4gIGBgTm90SW1wbGVtZW50ZWRgYCwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBCdXQgc2VlXG4gIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOlxuXG4qIEV4Y2VwdGlvbiB0byB0aGUgcHJldmlvdXMgaXRlbTogaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBhbiBpbnN0YW5jZVxuICBvZiBhIGJ1aWx0LWluIHR5cGUgb3IgYSBuZXctc3R5bGUgY2xhc3MsIGFuZCB0aGUgcmlnaHQgb3BlcmFuZCBpcyBhblxuICBpbnN0YW5jZSBvZiBhIHByb3BlciBzdWJjbGFzcyBvZiB0aGF0IHR5cGUgb3IgY2xhc3MgYW5kIG92ZXJyaWRlc1xuICB0aGUgYmFzZSdzIGBgX19yb3BfXygpYGAgbWV0aG9kLCB0aGUgcmlnaHQgb3BlcmFuZCdzIGBgX19yb3BfXygpYGBcbiAgbWV0aG9kIGlzIHRyaWVkICpiZWZvcmUqIHRoZSBsZWZ0IG9wZXJhbmQncyBgYF9fb3BfXygpYGAgbWV0aG9kLlxuXG4gIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGEgc3ViY2xhc3MgY2FuIGNvbXBsZXRlbHkgb3ZlcnJpZGUgYmluYXJ5XG4gIG9wZXJhdG9ycy4gT3RoZXJ3aXNlLCB0aGUgbGVmdCBvcGVyYW5kJ3MgYGBfX29wX18oKWBgIG1ldGhvZCB3b3VsZFxuICBhbHdheXMgYWNjZXB0IHRoZSByaWdodCBvcGVyYW5kOiB3aGVuIGFuIGluc3RhbmNlIG9mIGEgZ2l2ZW4gY2xhc3NcbiAgaXMgZXhwZWN0ZWQsIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgdGhhdCBjbGFzcyBpcyBhbHdheXNcbiAgYWNjZXB0YWJsZS5cblxuKiBXaGVuIGVpdGhlciBvcGVyYW5kIHR5cGUgZGVmaW5lcyBhIGNvZXJjaW9uLCB0aGlzIGNvZXJjaW9uIGlzIGNhbGxlZFxuICBiZWZvcmUgdGhhdCB0eXBlJ3MgYGBfX29wX18oKWBgIG9yIGBgX19yb3BfXygpYGAgbWV0aG9kIGlzIGNhbGxlZCxcbiAgYnV0IG5vIHNvb25lci4gIElmIHRoZSBjb2VyY2lvbiByZXR1cm5zIGFuIG9iamVjdCBvZiBhIGRpZmZlcmVudFxuICB0eXBlIGZvciB0aGUgb3BlcmFuZCB3aG9zZSBjb2VyY2lvbiBpcyBpbnZva2VkLCBwYXJ0IG9mIHRoZSBwcm9jZXNzXG4gIGlzIHJlZG9uZSB1c2luZyB0aGUgbmV3IG9iamVjdC5cblxuKiBXaGVuIGFuIGluLXBsYWNlIG9wZXJhdG9yIChsaWtlICdgYCs9YGAnKSBpcyB1c2VkLCBpZiB0aGUgbGVmdFxuICBvcGVyYW5kIGltcGxlbWVudHMgYGBfX2lvcF9fKClgYCwgaXQgaXMgaW52b2tlZCB3aXRob3V0IGFueVxuICBjb2VyY2lvbi4gIFdoZW4gdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIGBgX19vcF9fKClgYCBhbmQvb3JcbiAgYGBfX3JvcF9fKClgYCwgdGhlIG5vcm1hbCBjb2VyY2lvbiBydWxlcyBhcHBseS5cblxuKiBJbiBgYHggKyB5YGAsIGlmICp4KiBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICBjb25jYXRlbmF0aW9uLCBzZXF1ZW5jZSBjb25jYXRlbmF0aW9uIGlzIGludm9rZWQuXG5cbiogSW4gYGB4ICogeWBgLCBpZiBvbmUgb3BlcmF0b3IgaXMgYSBzZXF1ZW5jZSB0aGF0IGltcGxlbWVudHMgc2VxdWVuY2VcbiAgcmVwZXRpdGlvbiwgYW5kIHRoZSBvdGhlciBpcyBhbiBpbnRlZ2VyIChgYGludGBgIG9yIGBgbG9uZ2BgKSxcbiAgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBpbnZva2VkLlxuXG4qIFJpY2ggY29tcGFyaXNvbnMgKGltcGxlbWVudGVkIGJ5IG1ldGhvZHMgYGBfX2VxX18oKWBgIGFuZCBzbyBvbilcbiAgbmV2ZXIgdXNlIGNvZXJjaW9uLiAgVGhyZWUtd2F5IGNvbXBhcmlzb24gKGltcGxlbWVudGVkIGJ5XG4gIGBgX19jbXBfXygpYGApIGRvZXMgdXNlIGNvZXJjaW9uIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgb3RoZXJcbiAgYmluYXJ5IG9wZXJhdGlvbnMgdXNlIGl0LlxuXG4qIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyBgYGludGBgLFxuICBgYGxvbmdgYCwgYGBmbG9hdGBgLCBhbmQgYGBjb21wbGV4YGAgZG8gbm90IHVzZSBjb2VyY2lvbi4gQWxsIHRoZXNlXG4gIHR5cGVzIGltcGxlbWVudCBhIGBgX19jb2VyY2VfXygpYGAgbWV0aG9kLCBmb3IgdXNlIGJ5IHRoZSBidWlsdC1pblxuICBgYGNvZXJjZSgpYGAgZnVuY3Rpb24uXG5cbiAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNy5cbiIsCiAgJ2NvbXBhcmlzb25zJzogdSdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSBgYGEgPCBiIDwgY2BgIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIjw+IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiBgYFRydWVgYCBvciBgYEZhbHNlYGAuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCBgYHggPCB5IDw9IHpgYCBpc1xuZXF1aXZhbGVudCB0byBgYHggPCB5IGFuZCB5IDw9IHpgYCwgZXhjZXB0IHRoYXQgYGB5YGAgaXMgZXZhbHVhdGVkXG5vbmx5IG9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzIGBgemBgIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gYGB4IDxcbnlgYCBpcyBmb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gYGBhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4gemBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4gemBgLFxuZXhjZXB0IHRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCBgYGEgb3AxIGIgb3AyIGNgYCBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uXG5iZXR3ZWVuICphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbFxuKHRob3VnaCBwZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgZm9ybXMgYGA8PmBgIGFuZCBgYCE9YGAgYXJlIGVxdWl2YWxlbnQ7IGZvciBjb25zaXN0ZW5jeSB3aXRoIEMsXG5gYCE9YGAgaXMgcHJlZmVycmVkOyB3aGVyZSBgYCE9YGAgaXMgbWVudGlvbmVkIGJlbG93IGBgPD5gYCBpcyBhbHNvXG5hY2NlcHRlZC4gIFRoZSBgYDw+YGAgc3BlbGxpbmcgaXMgY29uc2lkZXJlZCBvYnNvbGVzY2VudC5cblxuVGhlIG9wZXJhdG9ycyBgYDxgYCwgYGA+YGAsIGBgPT1gYCwgYGA+PWBgLCBgYDw9YGAsIGFuZCBgYCE9YGAgY29tcGFyZVxudGhlIHZhbHVlcyBvZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS5cbklmIGJvdGggYXJlIG51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLFxub2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgKmFsd2F5cyogY29tcGFyZSB1bmVxdWFsLCBhbmQgYXJlIG9yZGVyZWRcbmNvbnNpc3RlbnRseSBidXQgYXJiaXRyYXJpbHkuIFlvdSBjYW4gY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mXG5vYmplY3RzIG9mIG5vbi1idWlsdC1pbiB0eXBlcyBieSBkZWZpbmluZyBhIGBgX19jbXBfX2BgIG1ldGhvZCBvciByaWNoXG5jb21wYXJpc29uIG1ldGhvZHMgbGlrZSBgYF9fZ3RfX2BgLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqU3BlY2lhbFxubWV0aG9kIG5hbWVzKi5cblxuKFRoaXMgdW51c3VhbCBkZWZpbml0aW9uIG9mIGNvbXBhcmlzb24gd2FzIHVzZWQgdG8gc2ltcGxpZnkgdGhlXG5kZWZpbml0aW9uIG9mIG9wZXJhdGlvbnMgbGlrZSBzb3J0aW5nIGFuZCB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgXG5vcGVyYXRvcnMuIEluIHRoZSBmdXR1cmUsIHRoZSBjb21wYXJpc29uIHJ1bGVzIGZvciBvYmplY3RzIG9mXG5kaWZmZXJlbnQgdHlwZXMgYXJlIGxpa2VseSB0byBjaGFuZ2UuKVxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYG9yZCgpYGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFVuaWNvZGUgYW5kIDgtYml0IHN0cmluZ3MgYXJlIGZ1bGx5IGludGVyb3BlcmFibGUgaW4gdGhpcyBiZWhhdmlvci5cbiAgWzRdXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYGNtcChbMSwyLHhdLCBbMSwyLHldKWBgIHJldHVybnNcbiAgdGhlIHNhbWUgYXMgYGBjbXAoeCx5KWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdFxuICBleGlzdCwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPFxuICBbMSwyLDNdYGApLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhlaXIgc29ydGVkXG4gIChrZXksIHZhbHVlKSBsaXN0cyBjb21wYXJlIGVxdWFsLiBbNV0gT3V0Y29tZXMgb3RoZXIgdGhhbiBlcXVhbGl0eVxuICBhcmUgcmVzb2x2ZWQgY29uc2lzdGVudGx5LCBidXQgYXJlIG5vdCBvdGhlcndpc2UgZGVmaW5lZC4gWzZdXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleSBhcmVcbiAgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkIHNtYWxsZXJcbiAgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXQgY29uc2lzdGVudGx5XG4gIHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuVGhlIG9wZXJhdG9ycyBgYGluYGAgYW5kIGBgbm90IGluYGAgdGVzdCBmb3IgY29sbGVjdGlvbiBtZW1iZXJzaGlwLlxuYGB4IGluIHNgYCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgdGhlIGNvbGxlY3Rpb24gKnMqLFxuYW5kIGZhbHNlIG90aGVyd2lzZS4gIGBgeCBub3QgaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpblxuc2BgLiBUaGUgY29sbGVjdGlvbiBtZW1iZXJzaGlwIHRlc3QgaGFzIHRyYWRpdGlvbmFsbHkgYmVlbiBib3VuZCB0b1xuc2VxdWVuY2VzOyBhbiBvYmplY3QgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW9uIGlmIHRoZSBjb2xsZWN0aW9uIGlzXG5hIHNlcXVlbmNlIGFuZCBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIHRoYXQgb2JqZWN0LiAgSG93ZXZlciwgaXRcbm1ha2Ugc2Vuc2UgZm9yIG1hbnkgb3RoZXIgb2JqZWN0IHR5cGVzIHRvIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0c1xud2l0aG91dCBiZWluZyBhIHNlcXVlbmNlLiAgSW4gcGFydGljdWxhciwgZGljdGlvbmFyaWVzIChmb3Iga2V5cykgYW5kXG5zZXRzIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0aW5nLlxuXG5Gb3IgdGhlIGxpc3QgYW5kIHR1cGxlIHR5cGVzLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmVcbmV4aXN0cyBhbiBpbmRleCAqaSogc3VjaCB0aGF0IGBgeCA9PSB5W2ldYGAgaXMgdHJ1ZS5cblxuRm9yIHRoZSBVbmljb2RlIGFuZCBzdHJpbmcgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZlxuKngqIGlzIGEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyBgYHkuZmluZCh4KSAhPSAtMWBgLlxuTm90ZSwgKngqIGFuZCAqeSogbmVlZCBub3QgYmUgdGhlIHNhbWUgdHlwZTsgY29uc2VxdWVudGx5LCBgYHVcJ2FiXCcgaW5cblwnYWJjXCdgYCB3aWxsIHJldHVybiBgYFRydWVgYC4gRW1wdHkgc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG9cbmJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsIHNvIGBgIiIgaW4gImFiYyJgYCB3aWxsIHJldHVyblxuYGBUcnVlYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksICp4KiB3YXMgcmVxdWlyZWQgdG8gYmUgYSBzdHJpbmcgb2Zcbmxlbmd0aCBgYDFgYC5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCxcbmBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBgYHkuX19jb250YWluc19fKHgpYGAgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgIGJ1dCBkb1xuZGVmaW5lIGBgX19pdGVyX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgc29tZSB2YWx1ZSBgYHpgYCB3aXRoIGBgeFxuPT0gemBgIGlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGBgeWBgLiAgSWYgYW4gZXhjZXB0aW9uIGlzXG5yYWlzZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbi4gKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgYGBpbmBgIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciBgYG5vdCBpbmBgIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG5gYGluYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpc2BgIGFuZCBgYGlzIG5vdGBgIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogYGB4IGlzXG55YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgYGB4IGlzXG5ub3QgeWBgIHlpZWxkcyB0aGUgaW52ZXJzZSB0cnV0aCB2YWx1ZS4gWzddXG4nLAotICdjb21wb3VuZCc6IHUnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMuICBGdW5jdGlvbiBhbmQgY2xhc3NcbmRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQgeFxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnRgYCBzdGF0ZW1lbnRzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCB4OyBwcmludCB5OyBwcmludCB6XG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgZGVjb3JhdGVkXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cywgYW5kIHRoZW4gdGhlIHN1aXRlIGlzIGV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlXG5leGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGVtcHR5KSwgdGhlIHN1aXRlXG5pbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5UaGUgdGFyZ2V0IGxpc3QgaXMgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCwgYnV0IGlmIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGwgYnkgdGhlXG5sb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYSBzZXF1ZW5jZSBvZlxuaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvciBpIDo9IGEgdG8gYlxuZG9gYDsgZS5nLiwgYGByYW5nZSgzKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSwgMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiBBbiBpbnRlcm5hbFxuICBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCwgYW5kIHRoaXNcbiAgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXMgcmVhY2hlZCB0aGVcbiAgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZVxuICBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlIHNlcXVlbmNlLFxuICB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2YgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsoImFzIiB8ICIsIikgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi41OiBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24sXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIGRpZCBub3Qgd29yay4gYGB0cnlgYC4uLmBgZXhjZXB0YGBcbmhhZCB0byBiZSBuZXN0ZWQgaW4gYGB0cnlgYC4uLmBgZmluYWxseWBgLlxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0LCBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24sIG9yLCBpbiB0aGUgKGRlcHJlY2F0ZWQpIGNhc2Ugb2Ygc3RyaW5nIGV4Y2VwdGlvbnMsIGlzIHRoZVxucmFpc2VkIHN0cmluZyBpdHNlbGYgKG5vdGUgdGhhdCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgbXVzdCBtYXRjaCwgaS5lLlxuaXQgbXVzdCBiZSB0aGUgc2FtZSBzdHJpbmcgb2JqZWN0LCBub3QganVzdCBhIHN0cmluZyB3aXRoIHRoZSBzYW1lXG52YWx1ZSkuXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHRcbmNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHQgY2xhdXNlcyBtdXN0IGhhdmUgYW5cbmV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpcyByZWFjaGVkLCBleGVjdXRpb25cbmNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuICAoVGhpcyBtZWFucyB0aGF0XG5pZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sIGFuZCB0aGUgZXhjZXB0aW9uXG5vY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZSBvdXRlciBoYW5kbGVyIHdpbGxcbm5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBhc3NpZ25lZCB0byB0aHJlZSB2YXJpYWJsZXMgaW4gdGhlIGBgc3lzYGAgbW9kdWxlOlxuYGBzeXMuZXhjX3R5cGVgYCByZWNlaXZlcyB0aGUgb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBleGNlcHRpb247XG5gYHN5cy5leGNfdmFsdWVgYCByZWNlaXZlcyB0aGUgZXhjZXB0aW9uXCdzIHBhcmFtZXRlcjtcbmBgc3lzLmV4Y190cmFjZWJhY2tgYCByZWNlaXZlcyBhIHRyYWNlYmFjayBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGVcbnN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlXG50aGUgZXhjZXB0aW9uIG9jY3VycmVkLiBUaGVzZSBkZXRhaWxzIGFyZSBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZVxuYGBzeXMuZXhjX2luZm8oKWBgIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIGEgdHVwbGUgYGAoZXhjX3R5cGUsXG5leGNfdmFsdWUsIGV4Y190cmFjZWJhY2spYGAuICBVc2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGVzIGlzXG5kZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoaXMgZnVuY3Rpb24sIHNpbmNlIHRoZWlyIHVzZSBpcyB1bnNhZmUgaW4gYVxudGhyZWFkZWQgcHJvZ3JhbS4gIEFzIG9mIFB5dGhvbiAxLjUsIHRoZSB2YXJpYWJsZXMgYXJlIHJlc3RvcmVkIHRvXG50aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmcgZnJvbSBhIGZ1bmN0aW9uXG50aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24sIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kXG5vZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24gb3IgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yIGBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIGxvc3QuICBUaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlXG5wcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cbk5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vblxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCB1c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWRcbmZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiBleHByZXNzaW9uIFsiYXMiIHRhcmdldF0gIjoiIHN1aXRlXG5cblRoZSBleGVjdXRpb24gb2YgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCBwcm9jZWVkcyBhcyBmb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG4zLiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDUgYmVsb3cuXG5cbjQuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNS4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5Ob3RlOiBJbiBQeXRob24gMi41LCB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZVxuICBgYHdpdGhfc3RhdGVtZW50YGAgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkLiAgSXQgaXMgYWx3YXlzIGVuYWJsZWRcbiAgaW4gUHl0aG9uIDIuNi5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZGVjb3JhdGVkICAgICAgOjo9IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZilcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZnVuY2RlZiAgICAgICAgOjo9ICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiAiOiIgc3VpdGVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggICIqIiBpZGVudGlmaWVyIFssICIqKiIgaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgc3VibGlzdCAgICAgICAgOjo9IHBhcmFtZXRlciAoIiwiIHBhcmFtZXRlcikqIFsiLCJdXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciB8ICIoIiBzdWJsaXN0ICIpIlxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6XG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0bzpcblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgdG9wLWxldmVsIHBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzIGlzIGEgc3ludGFjdGljXG5yZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoYXQgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzICBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYSBmb3JtcyxcbmRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhIGZvcm0gaXMgbWVyZWx5IGFcbnNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247IGEgZnVuY3Rpb24gZGVmaW5lZCBpblxuYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZVxuanVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYSBmb3JtLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzXG5hY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0IGFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlXG5zdGF0ZW1lbnRzLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuZm9ybSBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbCBmdW5jdGlvblxudGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWQgaW4gdGhlXG5uZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblxuQ2xhc3MgZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09XG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW2V4cHJlc3Npb25fbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdCBmaXJzdCBldmFsdWF0ZXMgdGhlXG5pbmhlcml0YW5jZSBsaXN0LCBpZiBwcmVzZW50LiAgRWFjaCBpdGVtIGluIHRoZSBpbmhlcml0YW5jZSBsaXN0XG5zaG91bGQgZXZhbHVhdGUgdG8gYSBjbGFzcyBvYmplY3Qgb3IgY2xhc3MgdHlwZSB3aGljaCBhbGxvd3NcbnN1YmNsYXNzaW5nLiAgVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uXG5mcmFtZSAoc2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWxcbm5hbWVzcGFjZSBhbmQgdGhlIG9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGVcbmNvbnRhaW5zIG9ubHkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXNcbmV4ZWN1dGlvbiwgaXRzIGV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXNcbnNhdmVkLiBbNF0gQSBjbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0XG5mb3IgdGhlIGJhc2UgY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZVxuZGljdGlvbmFyeS4gIFRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZVxub3JpZ2luYWwgbG9jYWwgbmFtZXNwYWNlLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIHZhcmlhYmxlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMuICBUbyBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcywgdGhleSBjYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLlxuQm90aCBjbGFzcyBhbmQgaW5zdGFuY2UgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSB2YXJpYWJsZSBoaWRlcyBhIGNsYXNzIHZhcmlhYmxlIHdpdGhcbnRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gQ2xhc3MgdmFyaWFibGVzIGNhbiBiZSB1c2VkXG5hcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXMgdGhlcmUgY2FuXG5sZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gIEZvciAqbmV3LXN0eWxlIGNsYXNzKmVzLCBkZXNjcmlwdG9ycyBjYW5cbmJlIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvblxuZGV0YWlscy5cblxuQ2xhc3MgZGVmaW5pdGlvbnMsIGxpa2UgZnVuY3Rpb24gZGVmaW5pdGlvbnMsIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvclxubW9yZSAqZGVjb3JhdG9yKiBleHByZXNzaW9ucy4gIFRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yXG5leHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIGZ1bmN0aW9ucy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzXG5vYmplY3QsIHdoaWNoIGlzIHRoZW4gYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIG9ubHkgaWYgdGhlcmVcbiAgICBpcyBubyBgYGZpbmFsbHlgYCBjbGF1c2UgdGhhdCBuZWdhdGVzIHRoZSBleGNlcHRpb24uXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAorICdjb21wb3VuZCc6IHUnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMuICBGdW5jdGlvbiBhbmQgY2xhc3NcbmRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQgeFxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnRgYCBzdGF0ZW1lbnRzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCB4OyBwcmludCB5OyBwcmludCB6XG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgZGVjb3JhdGVkXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cywgYW5kIHRoZW4gdGhlIHN1aXRlIGlzIGV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlXG5leGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGVtcHR5KSwgdGhlIHN1aXRlXG5pbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5UaGUgdGFyZ2V0IGxpc3QgaXMgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCwgYnV0IGlmIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGwgYnkgdGhlXG5sb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYSBzZXF1ZW5jZSBvZlxuaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvciBpIDo9IGEgdG8gYlxuZG9gYDsgZS5nLiwgYGByYW5nZSgzKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSwgMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiBBbiBpbnRlcm5hbFxuICBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCwgYW5kIHRoaXNcbiAgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXMgcmVhY2hlZCB0aGVcbiAgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZVxuICBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlIHNlcXVlbmNlLFxuICB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2YgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsoImFzIiB8ICIsIikgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi41OiBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24sXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIGRpZCBub3Qgd29yay4gYGB0cnlgYC4uLmBgZXhjZXB0YGBcbmhhZCB0byBiZSBuZXN0ZWQgaW4gYGB0cnlgYC4uLmBgZmluYWxseWBgLlxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0LCBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24sIG9yLCBpbiB0aGUgKGRlcHJlY2F0ZWQpIGNhc2Ugb2Ygc3RyaW5nIGV4Y2VwdGlvbnMsIGlzIHRoZVxucmFpc2VkIHN0cmluZyBpdHNlbGYgKG5vdGUgdGhhdCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgbXVzdCBtYXRjaCwgaS5lLlxuaXQgbXVzdCBiZSB0aGUgc2FtZSBzdHJpbmcgb2JqZWN0LCBub3QganVzdCBhIHN0cmluZyB3aXRoIHRoZSBzYW1lXG52YWx1ZSkuXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHRcbmNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHQgY2xhdXNlcyBtdXN0IGhhdmUgYW5cbmV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpcyByZWFjaGVkLCBleGVjdXRpb25cbmNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuICAoVGhpcyBtZWFucyB0aGF0XG5pZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sIGFuZCB0aGUgZXhjZXB0aW9uXG5vY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZSBvdXRlciBoYW5kbGVyIHdpbGxcbm5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBhc3NpZ25lZCB0byB0aHJlZSB2YXJpYWJsZXMgaW4gdGhlIGBgc3lzYGAgbW9kdWxlOlxuYGBzeXMuZXhjX3R5cGVgYCByZWNlaXZlcyB0aGUgb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBleGNlcHRpb247XG5gYHN5cy5leGNfdmFsdWVgYCByZWNlaXZlcyB0aGUgZXhjZXB0aW9uXCdzIHBhcmFtZXRlcjtcbmBgc3lzLmV4Y190cmFjZWJhY2tgYCByZWNlaXZlcyBhIHRyYWNlYmFjayBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGVcbnN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlXG50aGUgZXhjZXB0aW9uIG9jY3VycmVkLiBUaGVzZSBkZXRhaWxzIGFyZSBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZVxuYGBzeXMuZXhjX2luZm8oKWBgIGZ1bmN0aW9uLCB3aGljaCByZXR1cm5zIGEgdHVwbGUgYGAoZXhjX3R5cGUsXG5leGNfdmFsdWUsIGV4Y190cmFjZWJhY2spYGAuICBVc2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaWFibGVzIGlzXG5kZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoaXMgZnVuY3Rpb24sIHNpbmNlIHRoZWlyIHVzZSBpcyB1bnNhZmUgaW4gYVxudGhyZWFkZWQgcHJvZ3JhbS4gIEFzIG9mIFB5dGhvbiAxLjUsIHRoZSB2YXJpYWJsZXMgYXJlIHJlc3RvcmVkIHRvXG50aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmcgZnJvbSBhIGZ1bmN0aW9uXG50aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24sIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kXG5vZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24gb3IgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yIGBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIGxvc3QuICBUaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlXG5wcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cbk5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vblxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCB1c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWRcbmZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiB3aXRoX2l0ZW0gKCIsIiB3aXRoX2l0ZW0pKiAiOiIgc3VpdGVcbiAgIHdpdGhfaXRlbSA6Oj0gZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXG5cblRoZSBleGVjdXRpb24gb2YgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS5cblxuMy4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZW50ZXJfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tIGBgX19lbnRlcl9fKClgYCBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIGBgX19lbnRlcl9fKClgYFxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIGBgX19leGl0X18oKWBgIHdpbGwgYWx3YXlzXG4gICAgIGJlIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy5cblxuNS4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG42LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuTm90ZTogSW4gUHl0aG9uIDIuNSwgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyBvbmx5IGFsbG93ZWQgd2hlbiB0aGVcbiAgYGB3aXRoX3N0YXRlbWVudGBgIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZC4gIEl0IGlzIGFsd2F5cyBlbmFibGVkXG4gIGluIFB5dGhvbiAyLjYuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjc6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGRlY29yYXRlZCAgICAgIDo6PSBkZWNvcmF0b3JzIChjbGFzc2RlZiB8IGZ1bmNkZWYpXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFthcmd1bWVudF9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGZ1bmNkZWYgICAgICAgIDo6PSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgIjoiIHN1aXRlXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICAiKiIgaWRlbnRpZmllciBbLCAiKioiIGlkZW50aWZpZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIHN1Ymxpc3QgICAgICAgIDo6PSBwYXJhbWV0ZXIgKCIsIiBwYXJhbWV0ZXIpKiBbIiwiXVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgfCAiKCIgc3VibGlzdCAiKSJcbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlOlxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG86XG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlIHRvcC1sZXZlbCBwYXJhbWV0ZXJzIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogYGA9YGBcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpcyBpcyBhIHN5bnRhY3RpY1xucmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqICBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGF0IHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyAgaXMgdG8gdXNlIGBgTm9uZWBgIGFzIHRoZVxuZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGEgZm9ybXMsXG5kZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYSBmb3JtIGlzIG1lcmVseSBhXG5zaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uOyBhIGZ1bmN0aW9uIGRlZmluZWQgaW5cbmEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIG5hbWVcbmp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGEgZm9ybS4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpc1xuYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdCBhbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZVxuc3RhdGVtZW50cy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbmZvcm0gZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb25cbnRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkIGluIHRoZVxubmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9ICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtleHByZXNzaW9uX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXQgZmlyc3QgZXZhbHVhdGVzIHRoZVxuaW5oZXJpdGFuY2UgbGlzdCwgaWYgcHJlc2VudC4gIEVhY2ggaXRlbSBpbiB0aGUgaW5oZXJpdGFuY2UgbGlzdFxuc2hvdWxkIGV2YWx1YXRlIHRvIGEgY2xhc3Mgb2JqZWN0IG9yIGNsYXNzIHR5cGUgd2hpY2ggYWxsb3dzXG5zdWJjbGFzc2luZy4gIFRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvblxuZnJhbWUgKHNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsXG5uYW1lc3BhY2UgYW5kIHRoZSBvcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlXG5jb250YWlucyBvbmx5IGZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzXG5leGVjdXRpb24sIGl0cyBleGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzXG5zYXZlZC4gWzRdIEEgY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdFxuZm9yIHRoZSBiYXNlIGNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGVcbmRpY3Rpb25hcnkuICBUaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGVcbm9yaWdpbmFsIGxvY2FsIG5hbWVzcGFjZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyB2YXJpYWJsZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzLiAgVG8gY3JlYXRlIGluc3RhbmNlXG52YXJpYWJsZXMsIHRoZXkgY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC5cbkJvdGggY2xhc3MgYW5kIGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgdmFyaWFibGUgaGlkZXMgYSBjbGFzcyB2YXJpYWJsZSB3aXRoXG50aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuIENsYXNzIHZhcmlhYmxlcyBjYW4gYmUgdXNlZFxuYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhblxubGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICBGb3IgKm5ldy1zdHlsZSBjbGFzcyplcywgZGVzY3JpcHRvcnMgY2FuXG5iZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25cbmRldGFpbHMuXG5cbkNsYXNzIGRlZmluaXRpb25zLCBsaWtlIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3Jcbm1vcmUgKmRlY29yYXRvciogZXhwcmVzc2lvbnMuICBUaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvclxuZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBmdW5jdGlvbnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzc1xub2JqZWN0LCB3aGljaCBpcyB0aGVuIGJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayBvbmx5IGlmIHRoZXJlXG4gICAgaXMgbm8gYGBmaW5hbGx5YGAgY2xhdXNlIHRoYXQgbmVnYXRlcyB0aGUgZXhjZXB0aW9uLlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29udGV4dC1tYW5hZ2Vycyc6IHUnXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbk5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgYGB3aXRoYGAgc3RhdGVtZW50LiBUaGUgY29udGV4dFxubWFuYWdlciBoYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZVxuY29udGV4dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlXG5ub3JtYWxseSBpbnZva2VkIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qVGhlIHdpdGggc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyXG5tZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBgYHdpdGhgYFxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSBgYGFzYGAgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgYGBOb25lYGAuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0IGBgX19leGl0X18oKWBgIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCiAgJ2NvbnRpbnVlJzogdSdcblRoZSBgYGNvbnRpbnVlYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBjb250aW51ZV9zdG10IDo6PSAiY29udGludWUiXG5cbmBgY29udGludWVgYCBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGBgZm9yYGAgb3JcbmBgd2hpbGVgYCBsb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gb3JcbmBgZmluYWxseWBgIGNsYXVzZSB3aXRoaW4gdGhhdCBsb29wLiAgSXQgY29udGludWVzIHdpdGggdGhlIG5leHQgY3ljbGVcbm9mIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsb29wLlxuXG5XaGVuIGBgY29udGludWVgYCBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIGFcbmBgZmluYWxseWBgIGNsYXVzZSwgdGhhdCBgYGZpbmFsbHlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxuc3RhcnRpbmcgdGhlIG5leHQgbG9vcCBjeWNsZS5cbicsCiAgJ2NvbnZlcnNpb25zJzogdSdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoZSBhcmd1bWVudHNcbmFyZSBjb2VyY2VkIHVzaW5nIHRoZSBjb2VyY2lvbiBydWxlcyBsaXN0ZWQgYXQgICpDb2VyY2lvbiBydWxlcyouICBJZlxuYm90aCBhcmd1bWVudHMgYXJlIHN0YW5kYXJkIG51bWVyaWMgdHlwZXMsIHRoZSBmb2xsb3dpbmcgY29lcmNpb25zIGFyZVxuYXBwbGllZDpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGUgb3RoZXJcbiAgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgbG9uZyBpbnRlZ2VyLCB0aGUgb3RoZXIgaXNcbiAgY29udmVydGVkIHRvIGxvbmcgaW50ZWdlcjtcblxuKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBwbGFpbiBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpc1xuICBuZWNlc3NhcnkuXG5cblNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGxlZnRcbmFyZ3VtZW50IHRvIHRoZSBcJyVcJyBvcGVyYXRvcikuIEV4dGVuc2lvbnMgY2FuIGRlZmluZSB0aGVpciBvd25cbmNvZXJjaW9ucy5cbicsCi0gJ2N1c3RvbWl6YXRpb24nOiB1J1xuQmFzaWMgY3VzdG9taXphdGlvblxuKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBvciBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiAgQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlXG4gICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZFxuICAgICB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLWxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC5cbiAgICAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlXG4gICAgIGluZm9ybWF0aW9uIGFib3V0IGhvdyBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gICAgIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYFxuICAgICB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiBhbmQgYnkgc3RyaW5nXG4gICBjb252ZXJzaW9ucyAocmV2ZXJzZSBxdW90ZXMpIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCIgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXMgc2hvdWxkIGxvb2tcbiAgIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gcmVjcmVhdGUgYW5cbiAgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCkuICBJZlxuICAgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGBgPC4uLnNvbWUgdXNlZnVsXG4gICBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgIGJ1dCBub3RcbiAgIGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBzdHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSB0aGUgYGBwcmludGBgXG4gICBzdGF0ZW1lbnQgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gIFRoaXMgZGlmZmVycyBmcm9tIGBgX19yZXByX18oKWBgIGluIHRoYXQgaXQgZG9lcyBub3QgaGF2ZVxuICAgdG8gYmUgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYSBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZVxuICAgcmVwcmVzZW50YXRpb24gbWF5IGJlIHVzZWQgaW5zdGVhZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgTmV3IGluIHZlcnNpb24gMi4xLlxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLCBhbmQgYXJlIGNhbGxlZFxuICAgZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGluIHByZWZlcmVuY2UgdG8gYGBfX2NtcF9fKClgYCBiZWxvdy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgYW5kXG4gICBgYHg8PnlgYCBjYWxsIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZFxuICAgYGB4Pj15YGAgY2FsbHMgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIHRoZSBUb3RhbCBPcmRlcmluZyByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2suXG5cbm9iamVjdC5fX2NtcF9fKHNlbGYsIG90aGVyKVxuXG4gICBDYWxsZWQgYnkgY29tcGFyaXNvbiBvcGVyYXRpb25zIGlmIHJpY2ggY29tcGFyaXNvbiAoc2VlIGFib3ZlKSBpc1xuICAgbm90IGRlZmluZWQuICBTaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPCBvdGhlcmBgLFxuICAgemVybyBpZiBgYHNlbGYgPT0gb3RoZXJgYCwgYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGBgc2VsZiA+IG90aGVyYGAuXG4gICBJZiBubyBgYF9fY21wX18oKWBgLCBgYF9fZXFfXygpYGAgb3IgYGBfX25lX18oKWBgIG9wZXJhdGlvbiBpc1xuICAgZGVmaW5lZCwgY2xhc3MgaW5zdGFuY2VzIGFyZSBjb21wYXJlZCBieSBvYmplY3QgaWRlbnRpdHlcbiAgICgiYWRkcmVzcyIpLiAgU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZvciBzb21lXG4gICBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tXG4gICBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLiAoTm90ZTogdGhlXG4gICByZXN0cmljdGlvbiB0aGF0IGV4Y2VwdGlvbnMgYXJlIG5vdCBwcm9wYWdhdGVkIGJ5IGBgX19jbXBfXygpYGAgaGFzXG4gICBiZWVuIHJlbW92ZWQgc2luY2UgUHl0aG9uIDEuNS4pXG5cbm9iamVjdC5fX3JjbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMTogTm8gbG9uZ2VyIHN1cHBvcnRlZC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGEgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgbWV0aG9kXG4gICBpdCBzaG91bGQgbm90IGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0XG4gICBkZWZpbmVzIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0c1xuICAgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBpbiBoYXNoZWQgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzXG4gICBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhIGBgX19jbXBfXygpYGAgb3JcbiAgIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZVxuICAgaGFzaGFibGUgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSB0aGF0IGEgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmVcbiAgIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2NtcF9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGBgaWQoeClgYC5cblxuICAgQ2xhc3NlcyB3aGljaCBpbmhlcml0IGEgYGBfX2hhc2hfXygpYGAgbWV0aG9kIGZyb20gYSBwYXJlbnQgY2xhc3NcbiAgIGJ1dCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgc3VjaCB0aGF0XG4gICB0aGUgaGFzaCB2YWx1ZSByZXR1cm5lZCBpcyBubyBsb25nZXIgYXBwcm9wcmlhdGUgKGUuZy4gYnkgc3dpdGNoaW5nXG4gICB0byBhIHZhbHVlLWJhc2VkIGNvbmNlcHQgb2YgZXF1YWxpdHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdFxuICAgaWRlbnRpdHkgYmFzZWQgZXF1YWxpdHkpIGNhbiBleHBsaWNpdGx5IGZsYWcgdGhlbXNlbHZlcyBhcyBiZWluZ1xuICAgdW5oYXNoYWJsZSBieSBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uXG4gICBEb2luZyBzbyBtZWFucyB0aGF0IG5vdCBvbmx5IHdpbGwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyByYWlzZSBhblxuICAgYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpclxuICAgaGFzaCB2YWx1ZSwgYnV0IHRoZXkgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGBcbiAgICh1bmxpa2UgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlaXIgb3duIGBgX19oYXNoX18oKWBgIHRvIGV4cGxpY2l0bHlcbiAgIHJhaXNlIGBgVHlwZUVycm9yYGApLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi41OiBgYF9faGFzaF9fKClgYCBtYXkgbm93IGFsc28gcmV0dXJuIGEgbG9uZ1xuICAgaW50ZWdlciBvYmplY3Q7IHRoZSAzMi1iaXQgaW50ZWdlciBpcyB0aGVuIGRlcml2ZWQgZnJvbSB0aGUgaGFzaCBvZlxuICAgdGhhdCBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IGBgX19oYXNoX19gYCBtYXkgbm93IGJlIHNldCB0byBgYE5vbmVgYCB0b1xuICAgZXhwbGljaXRseSBmbGFnIGluc3RhbmNlcyBvZiBhIGNsYXNzIGFzIHVuaGFzaGFibGUuXG5cbm9iamVjdC5fX25vbnplcm9fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLCBvciB0aGVpciBpbnRlZ2VyXG4gICBlcXVpdmFsZW50cyBgYDBgYCBvciBgYDFgYC4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsXG4gICBgYF9fbGVuX18oKWBgIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fbm9uemVyb19fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cbm9iamVjdC5fX3VuaWNvZGVfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgdW5pY29kZSgpYGAgYnVpbHQtaW47IHNob3VsZCByZXR1cm4gYSBVbmljb2RlXG4gICBvYmplY3QuIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHN0cmluZyBjb252ZXJzaW9uIGlzXG4gICBhdHRlbXB0ZWQsIGFuZCB0aGUgcmVzdWx0IG9mIHN0cmluZyBjb252ZXJzaW9uIGlzIGNvbnZlcnRlZCB0b1xuICAgVW5pY29kZSB1c2luZyB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcuXG4nLAotICdkZWJ1Z2dlcic6IHUnXG5gYHBkYmBgIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgYGBwZGJgYCBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24gLW0gcGRiIG15c2NyaXB0LnB5XG5cbldoZW4gaW52b2tlZCBhcyBhIHNjcmlwdCwgcGRiIHdpbGwgYXV0b21hdGljYWxseSBlbnRlciBwb3N0LW1vcnRlbVxuZGVidWdnaW5nIGlmIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRzIGFibm9ybWFsbHkuIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAyLjQ6IFJlc3RhcnRpbmcgcG9zdC1tb3J0ZW0gYmVoYXZpb3IgYWRkZWQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY2BgIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludCBzcGFtXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQgc3BhbVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZykgdW5kZXIgZGVidWdnZXIgY29udHJvbC5cbiAgIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXMgZXhlY3V0ZWQ7IHlvdSBjYW5cbiAgIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW4gc3RlcCB0aHJvdWdoIHRoZVxuICAgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2UgY29tbWFuZHMgYXJlXG4gICBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscyogYXJndW1lbnRzXG4gICBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnkgZGVmYXVsdFxuICAgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWUgdGhlXG4gICBleHBsYW5hdGlvbiBvZiB0aGUgYGBleGVjYGAgc3RhdGVtZW50IG9yIHRoZSBgYGV2YWwoKWBgIGJ1aWx0LWluXG4gICBmdW5jdGlvbi4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlclxuICAgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGVcbiAgIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGBgcnVuKClgYC5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb25bLCBhcmd1bWVudCwgLi4uXSlcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuIGBgcnVuY2FsbCgpYGAgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0oW3RyYWNlYmFja10pXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuJywKKyAnY3VzdG9taXphdGlvbic6IHUnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMuZXhjX3RyYWNlYmFja2BgIG9yIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuICBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGVcbiAgICAgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkXG4gICAgIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLlxuICAgICBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmVcbiAgICAgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGVcbiAgICAgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgXG4gICAgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSBzdHJpbmdcbiAgIGNvbnZlcnNpb25zIChyZXZlcnNlIHF1b3RlcykgdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIiBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpcyBzaG91bGQgbG9va1xuICAgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0byByZWNyZWF0ZSBhblxuICAgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlIGVudmlyb25tZW50KS4gIElmXG4gICB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm0gYGA8Li4uc29tZSB1c2VmdWxcbiAgIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGAgYnV0IG5vdFxuICAgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHN0cigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHRoZSBgYHByaW50YGBcbiAgIHN0YXRlbWVudCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiAgVGhpcyBkaWZmZXJzIGZyb20gYGBfX3JlcHJfXygpYGAgaW4gdGhhdCBpdCBkb2VzIG5vdCBoYXZlXG4gICB0byBiZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlXG4gICByZXByZXNlbnRhdGlvbiBtYXkgYmUgdXNlZCBpbnN0ZWFkLiBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjEuXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMsIGFuZCBhcmUgY2FsbGVkXG4gICBmb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgaW4gcHJlZmVyZW5jZSB0byBgYF9fY21wX18oKWBgIGJlbG93LiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBhbmRcbiAgIGBgeDw+eWBgIGNhbGwgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kXG4gICBgYHg+PXlgYCBjYWxscyBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19jbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2FsbGVkIGJ5IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpZiByaWNoIGNvbXBhcmlzb24gKHNlZSBhYm92ZSkgaXNcbiAgIG5vdCBkZWZpbmVkLiAgU2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlIGludGVnZXIgaWYgYGBzZWxmIDwgb3RoZXJgYCxcbiAgIHplcm8gaWYgYGBzZWxmID09IG90aGVyYGAsIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPiBvdGhlcmBgLlxuICAgSWYgbm8gYGBfX2NtcF9fKClgYCwgYGBfX2VxX18oKWBgIG9yIGBgX19uZV9fKClgYCBvcGVyYXRpb24gaXNcbiAgIGRlZmluZWQsIGNsYXNzIGluc3RhbmNlcyBhcmUgY29tcGFyZWQgYnkgb2JqZWN0IGlkZW50aXR5XG4gICAoImFkZHJlc3MiKS4gIFNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmb3Igc29tZVxuICAgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbVxuICAgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy4gKE5vdGU6IHRoZVxuICAgcmVzdHJpY3Rpb24gdGhhdCBleGNlcHRpb25zIGFyZSBub3QgcHJvcGFnYXRlZCBieSBgYF9fY21wX18oKWBgIGhhc1xuICAgYmVlbiByZW1vdmVkIHNpbmNlIFB5dGhvbiAxLjUuKVxuXG5vYmplY3QuX19yY21wX18oc2VsZiwgb3RoZXIpXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjE6IE5vIGxvbmdlciBzdXBwb3J0ZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIG1ldGhvZFxuICAgaXQgc2hvdWxkIG5vdCBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdFxuICAgZGVmaW5lcyBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHNcbiAgIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgaW4gaGFzaGVkIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYSBgYF9fY21wX18oKWBgIG9yXG4gICBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2VcbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb25zIHJlcXVpcmUgdGhhdCBhIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlXG4gICBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19jbXBfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBgYGlkKHgpYGAuXG5cbiAgIENsYXNzZXMgd2hpY2ggaW5oZXJpdCBhIGBgX19oYXNoX18oKWBgIG1ldGhvZCBmcm9tIGEgcGFyZW50IGNsYXNzXG4gICBidXQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIHN1Y2ggdGhhdFxuICAgdGhlIGhhc2ggdmFsdWUgcmV0dXJuZWQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIChlLmcuIGJ5IHN3aXRjaGluZ1xuICAgdG8gYSB2YWx1ZS1iYXNlZCBjb25jZXB0IG9mIGVxdWFsaXR5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHRcbiAgIGlkZW50aXR5IGJhc2VkIGVxdWFsaXR5KSBjYW4gZXhwbGljaXRseSBmbGFnIHRoZW1zZWx2ZXMgYXMgYmVpbmdcbiAgIHVuaGFzaGFibGUgYnkgc2V0dGluZyBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLlxuICAgRG9pbmcgc28gbWVhbnMgdGhhdCBub3Qgb25seSB3aWxsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgcmFpc2UgYW5cbiAgIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXJcbiAgIGhhc2ggdmFsdWUsIGJ1dCB0aGV5IHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgXG4gICAodW5saWtlIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZWlyIG93biBgYF9faGFzaF9fKClgYCB0byBleHBsaWNpdGx5XG4gICByYWlzZSBgYFR5cGVFcnJvcmBgKS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogYGBfX2hhc2hfXygpYGAgbWF5IG5vdyBhbHNvIHJldHVybiBhIGxvbmdcbiAgIGludGVnZXIgb2JqZWN0OyB0aGUgMzItYml0IGludGVnZXIgaXMgdGhlbiBkZXJpdmVkIGZyb20gdGhlIGhhc2ggb2ZcbiAgIHRoYXQgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi42OiBgYF9faGFzaF9fYGAgbWF5IG5vdyBiZSBzZXQgdG8gYGBOb25lYGAgdG9cbiAgIGV4cGxpY2l0bHkgZmxhZyBpbnN0YW5jZXMgb2YgYSBjbGFzcyBhcyB1bmhhc2hhYmxlLlxuXG5vYmplY3QuX19ub256ZXJvX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYCwgb3IgdGhlaXIgaW50ZWdlclxuICAgZXF1aXZhbGVudHMgYGAwYGAgb3IgYGAxYGAuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLFxuICAgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX25vbnplcm9fXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5vYmplY3QuX191bmljb2RlX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYHVuaWNvZGUoKWBgIGJ1aWx0LWluOyBzaG91bGQgcmV0dXJuIGEgVW5pY29kZVxuICAgb2JqZWN0LiBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCBzdHJpbmcgY29udmVyc2lvbiBpc1xuICAgYXR0ZW1wdGVkLCBhbmQgdGhlIHJlc3VsdCBvZiBzdHJpbmcgY29udmVyc2lvbiBpcyBjb252ZXJ0ZWQgdG9cbiAgIFVuaWNvZGUgdXNpbmcgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nLlxuJywKKyAnZGVidWdnZXInOiB1J1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbmBgUGRiYGAuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnlcbnJlYWRpbmcgdGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgYGBiZGJgYFxuYW5kIGBgY21kYGAuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgYGAoUGRiKWBgLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW1cbnVuZGVyIGNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuYGBwZGIucHlgYCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuXG5Gb3IgZXhhbXBsZTpcblxuICAgcHl0aG9uIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiBBZnRlciBwb3N0LVxubW9ydGVtIGRlYnVnZ2luZyAob3IgYWZ0ZXIgbm9ybWFsIGV4aXQgb2YgdGhlIHByb2dyYW0pLCBwZGIgd2lsbFxucmVzdGFydCB0aGUgcHJvZ3JhbS4gQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMi40OiBSZXN0YXJ0aW5nIHBvc3QtbW9ydGVtIGJlaGF2aW9yIGFkZGVkLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBmcm9tIGEgcnVubmluZyBwcm9ncmFtIGlzXG50byBpbnNlcnRcblxuICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpXG5cbmF0IHRoZSBsb2NhdGlvbiB5b3Ugd2FudCB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBjYW4gdGhlblxuc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGZvbGxvd2luZyB0aGlzIHN0YXRlbWVudCwgYW5kIGNvbnRpbnVlIHJ1bm5pbmdcbndpdGhvdXQgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSBgYGNgYCBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQgc3BhbVxuICAgTmFtZUVycm9yOiBzcGFtXG4gICA+Pj4gcGRiLnBtKClcbiAgID4gLi9teW1vZHVsZS5weSgzKXRlc3QyKClcbiAgIC0+IHByaW50IHNwYW1cbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50WywgZ2xvYmFsc1ssIGxvY2Fsc11dKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcpIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wuXG4gICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzIGV4ZWN1dGVkOyB5b3UgY2FuXG4gICBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgYGBjb250aW51ZWBgLCBvciB5b3UgY2FuIHN0ZXAgdGhyb3VnaCB0aGVcbiAgIHN0YXRlbWVudCB1c2luZyBgYHN0ZXBgYCBvciBgYG5leHRgYCAoYWxsIHRoZXNlIGNvbW1hbmRzIGFyZVxuICAgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqIGFyZ3VtZW50c1xuICAgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5IGRlZmF1bHRcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgYGBfX21haW5fX2BgIGlzIHVzZWQuICAoU2VlIHRoZVxuICAgZXhwbGFuYXRpb24gb2YgdGhlIGBgZXhlY2BgIHN0YXRlbWVudCBvciB0aGUgYGBldmFsKClgYCBidWlsdC1pblxuICAgZnVuY3Rpb24uKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uWywgZ2xvYmFsc1ssIGxvY2Fsc11dKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZykgdW5kZXIgZGVidWdnZXJcbiAgIGNvbnRyb2wuICBXaGVuIGBgcnVuZXZhbCgpYGAgcmV0dXJucywgaXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlXG4gICBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBgYHJ1bigpYGAuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiBgYHJ1bmNhbGwoKWBgIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKFt0cmFjZWJhY2tdKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuVGhlIGBgcnVuXypgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lKVxuXG4gICBgYFBkYmBgIGlzIHRoZSBkZWJ1Z2dlciBjbGFzcy5cblxuICAgVGhlICpjb21wbGV0ZWtleSosICpzdGRpbiogYW5kICpzdGRvdXQqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZVxuICAgdW5kZXJseWluZyBgYGNtZC5DbWRgYCBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjc6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIHJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pXG4gICBydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pXG4gICBydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuJywKICAnZGVsJzogdSdcblRoZSBgYGRlbGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGF0IHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSAgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhIGBgZ2xvYmFsYGBcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuXG5cbkl0IGlzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZSBmcm9tIHRoZSBsb2NhbCBuYW1lc3BhY2UgaWYgaXQgb2NjdXJzXG5hcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWQgYmxvY2suXG5cbkRlbGV0aW9uIG9mIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCBzdWJzY3JpcHRpb25zIGFuZCBzbGljaW5ncyBpcyBwYXNzZWRcbnRvIHRoZSBwcmltYXJ5IG9iamVjdCBpbnZvbHZlZDsgZGVsZXRpb24gb2YgYSBzbGljaW5nIGlzIGluIGdlbmVyYWxcbmVxdWl2YWxlbnQgdG8gYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW5cbnRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2xpY2VkIG9iamVjdCkuXG4nLAotICdkaWN0JzogdSdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0XSAifSJcbiAgIGtleV9kYXR1bV9saXN0IDo6PSBrZXlfZGF0dW0gKCIsIiBrZXlfZGF0dW0pKiBbIiwiXVxuICAga2V5X2RhdHVtICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LlxuXG5UaGUga2V5L2RhdHVtIHBhaXJzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGVcbmVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6IGVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlXG5kaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZSBjb3JyZXNwb25kaW5nIGRhdHVtLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAorICdkaWN0JzogdSdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgICAgICA6Oj0gInsiIFtrZXlfZGF0dW1fbGlzdCB8IGRpY3RfY29tcHJlaGVuc2lvbl0gIn0iXG4gICBrZXlfZGF0dW1fbGlzdCAgICAgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cbiAgIGRpY3RfY29tcHJlaGVuc2lvbiA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiBjb21wX2ZvclxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cbklmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OlxuZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGVcbmNvcnJlc3BvbmRpbmcgZGF0dW0uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleVxubXVsdGlwbGUgdGltZXMgaW4gdGhlIGtleS9kYXR1bSBsaXN0LCBhbmQgdGhlIGZpbmFsIGRpY3Rpb25hcnlcJ3MgdmFsdWVcbmZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi5cblxuQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyxcbm5lZWRzIHR3byBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbFxuImZvciIgYW5kICJpZiIgY2xhdXNlcy4gV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmdcbmtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXJcbnRoZXkgYXJlIHByb2R1Y2VkLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAogICdkeW5hbWljLWZlYXR1cmVzJzogdSdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuSWYgYGBleGVjYGAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYVxubmVzdGVkIGJsb2NrIHdpdGggZnJlZSB2YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGFcbmBgU3ludGF4RXJyb3JgYCB1bmxlc3MgdGhlIGV4ZWMgZXhwbGljaXRseSBzcGVjaWZpZXMgdGhlIGxvY2FsXG5uYW1lc3BhY2UgZm9yIHRoZSBgYGV4ZWNgYC4gIChJbiBvdGhlciB3b3JkcywgYGBleGVjIG9iamBgIHdvdWxkIGJlXG5pbGxlZ2FsLCBidXQgYGBleGVjIG9iaiBpbiBuc2BgIHdvdWxkIGJlIGxlZ2FsLilcblxuVGhlIGBgZXZhbCgpYGAsIGBgZXhlY2ZpbGUoKWBgLCBhbmQgYGBpbnB1dCgpYGAgZnVuY3Rpb25zIGFuZCB0aGVcbmBgZXhlY2BgIHN0YXRlbWVudCBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgZW52aXJvbm1lbnQgZm9yXG5yZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsIGFuZCBnbG9iYWxcbm5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWQgaW4gdGhlXG5uZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gWzFdIFRoZVxuYGBleGVjYGAgc3RhdGVtZW50IGFuZCB0aGUgYGBldmFsKClgYCBhbmQgYGBleGVjZmlsZSgpYGAgZnVuY3Rpb25zXG5oYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBvdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuXG5JZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKICAnZWxzZSc6IHUnXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKICAnZXhjZXB0aW9ucyc6IHUnXG5FeGNlcHRpb25zXG4qKioqKioqKioqXG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSBgYHRyeWBgIC4uLiBgYGV4Y2VwdGBgIHN0YXRlbWVudC4gIFRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbmBgU3lzdGVtRXhpdGBgLlxuXG5FeGNlcHRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGNsYXNzIGluc3RhbmNlcy4gIFRoZSBgYGV4Y2VwdGBgIGNsYXVzZVxuaXMgc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlXG50aGUgY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhblxuYmUgcmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0XG50aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5FeGNlcHRpb25zIGNhbiBhbHNvIGJlIGlkZW50aWZpZWQgYnkgc3RyaW5ncywgaW4gd2hpY2ggY2FzZSB0aGVcbmBgZXhjZXB0YGAgY2xhdXNlIGlzIHNlbGVjdGVkIGJ5IG9iamVjdCBpZGVudGl0eS4gIEFuIGFyYml0cmFyeSB2YWx1ZVxuY2FuIGJlIHJhaXNlZCBhbG9uZyB3aXRoIHRoZSBpZGVudGlmeWluZyBzdHJpbmcgd2hpY2ggY2FuIGJlIHBhc3NlZCB0b1xudGhlIGhhbmRsZXIuXG5cbk5vdGU6IE1lc3NhZ2VzIHRvIGV4Y2VwdGlvbnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXJcbiAgY29udGVudHMgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0XG4gIHdhcm5pbmcgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXJcbiAgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgdHJ5YGAgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kIGBgcmFpc2VgYCBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhpcyBsaW1pdGF0aW9uIG9jY3VycyBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnkgdGhlc2VcbiAgICBvcGVyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpcyBjb21waWxlZC5cbicsCkBAIC0zNiwxNCArMzYsMTQgQEAKICAnZXhwcmxpc3RzJzogdSdcbkV4cHJlc3Npb24gbGlzdHNcbioqKioqKioqKioqKioqKipcblxuICAgZXhwcmVzc2lvbl9saXN0IDo6PSBleHByZXNzaW9uICggIiwiIGV4cHJlc3Npb24gKSogWyIsIl1cblxuQW4gZXhwcmVzc2lvbiBsaXN0IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGNvbW1hIHlpZWxkcyBhIHR1cGxlLiAgVGhlXG5sZW5ndGggb2YgdGhlIHR1cGxlIGlzIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMgaW4gdGhlIGxpc3QuICBUaGVcbmV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5UaGUgdHJhaWxpbmcgY29tbWEgaXMgcmVxdWlyZWQgb25seSB0byBjcmVhdGUgYSBzaW5nbGUgdHVwbGUgKGEuay5hLiBhXG4qc2luZ2xldG9uKik7IGl0IGlzIG9wdGlvbmFsIGluIGFsbCBvdGhlciBjYXNlcy4gIEEgc2luZ2xlIGV4cHJlc3Npb25cbndpdGhvdXQgYSB0cmFpbGluZyBjb21tYSBkb2VzblwndCBjcmVhdGUgYSB0dXBsZSwgYnV0IHJhdGhlciB5aWVsZHMgdGhlXG52YWx1ZSBvZiB0aGF0IGV4cHJlc3Npb24uIChUbyBjcmVhdGUgYW4gZW1wdHkgdHVwbGUsIHVzZSBhbiBlbXB0eSBwYWlyXG5vZiBwYXJlbnRoZXNlczogYGAoKWBgLilcbicsCiAgJ2Zsb2F0aW5nJzogdSdcbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5GbG9hdGluZyBwb2ludCBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbFxuZGVmaW5pdGlvbnM6XG5cbiAgIGZsb2F0bnVtYmVyICAgOjo9IHBvaW50ZmxvYXQgfCBleHBvbmVudGZsb2F0XG4gICBwb2ludGZsb2F0ICAgIDo6PSBbaW50cGFydF0gZnJhY3Rpb24gfCBpbnRwYXJ0ICIuIlxuICAgZXhwb25lbnRmbG9hdCA6Oj0gKGludHBhcnQgfCBwb2ludGZsb2F0KSBleHBvbmVudFxuICAgaW50cGFydCAgICAgICA6Oj0gZGlnaXQrXG4gICBmcmFjdGlvbiAgICAgIDo6PSAiLiIgZGlnaXQrXG4gICBleHBvbmVudCAgICAgIDo6PSAoImUiIHwgIkUiKSBbIisiIHwgIi0iXSBkaWdpdCtcblxuTm90ZSB0aGF0IHRoZSBpbnRlZ2VyIGFuZCBleHBvbmVudCBwYXJ0cyBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzIGNhblxubG9vayBsaWtlIG9jdGFsIGludGVnZXJzLCBidXQgYXJlIGludGVycHJldGVkIHVzaW5nIHJhZGl4IDEwLiAgRm9yXG5leGFtcGxlLCBgYDA3N2UwMTBgYCBpcyBsZWdhbCwgYW5kIGRlbm90ZXMgdGhlIHNhbWUgbnVtYmVyIGFzXG5gYDc3ZTEwYGAuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSBgYC0xYGBcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yIGBgLWBgIGFuZCB0aGVcbmxpdGVyYWwgYGAxYGAuXG4nLAogICdmb3InOiB1J1xuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cywgYW5kIHRoZW4gdGhlIHN1aXRlIGlzIGV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlXG5leGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGVtcHR5KSwgdGhlIHN1aXRlXG5pbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5UaGUgdGFyZ2V0IGxpc3QgaXMgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCwgYnV0IGlmIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGwgYnkgdGhlXG5sb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYSBzZXF1ZW5jZSBvZlxuaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvciBpIDo9IGEgdG8gYlxuZG9gYDsgZS5nLiwgYGByYW5nZSgzKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSwgMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiBBbiBpbnRlcm5hbFxuICBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCwgYW5kIHRoaXNcbiAgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXMgcmVhY2hlZCB0aGVcbiAgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZVxuICBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlIHNlcXVlbmNlLFxuICB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2YgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcbicsCi0gJ2Zvcm1hdHN0cmluZ3MnOiB1J1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBmaWVsZF9uYW1lIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gKGlkZW50aWZpZXIgfCBpbnRlZ2VyKSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGF0dHJpYnV0ZV9uYW1lICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICBlbGVtZW50X2luZGV4ICAgICA6Oj0gaW50ZWdlciB8IGluZGV4X3N0cmluZ1xuICAgICAgaW5kZXhfc3RyaW5nICAgICAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIl0iPiArXG4gICAgICBjb252ZXJzaW9uICAgICAgICA6Oj0gInIiIHwgInMiXG4gICAgICBmb3JtYXRfc3BlYyAgICAgICA6Oj0gPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPlxuXG5JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIHN0YXJ0cyB3aXRoIGFcbipmaWVsZF9uYW1lKiwgd2hpY2ggY2FuIGVpdGhlciBiZSBhIG51bWJlciAoZm9yIGEgcG9zaXRpb25hbFxuYXJndW1lbnQpLCBvciBhbiBpZGVudGlmaWVyIChmb3Iga2V5d29yZCBhcmd1bWVudHMpLiAgRm9sbG93aW5nIHRoaXNcbmlzIGFuIG9wdGlvbmFsICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXMgcHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb25cbnBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2ggaXMgcHJlY2VkZWQgYnkgYSBjb2xvblxuYGBcJzpcJ2BgLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGVpdGhlciBhIG51bWJlciBvciBhIGtleXdvcmQuICBJZlxuaXRcJ3MgYSBudW1iZXIsIGl0IHJlZmVycyB0byBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhXG5rZXl3b3JkIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmQgYXJndW1lbnQuICBUaGlzIGNhbiBiZSBmb2xsb3dlZFxuYnkgYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlXG5mb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nIGBgZ2V0YXR0cigpYGAsXG53aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCdbaW5kZXhdXCdgYCBkb2VzIGFuIGluZGV4IGxvb2t1cFxudXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cblNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6XG5cbiAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICMgUmVmZXJlbmNlcyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAjIFJlZmVyZW5jZXMga2V5d29yZCBhcmd1bWVudCBcJ25hbWVcJ1xuICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgXCdwbGF5ZXJzXCcuXG5cblRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy5cbk5vcm1hbGx5LCB0aGUgam9iIG9mIGZvcm1hdHRpbmcgYSB2YWx1ZSBpcyBkb25lIGJ5IHRoZVxuYGBfX2Zvcm1hdF9fKClgYCBtZXRob2Qgb2YgdGhlIHZhbHVlIGl0c2VsZi4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXNcbml0IGlzIGRlc2lyYWJsZSB0byBmb3JjZSBhIHR5cGUgdG8gYmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLFxub3ZlcnJpZGluZyBpdHMgb3duIGRlZmluaXRpb24gb2YgZm9ybWF0dGluZy4gIEJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlXG50byBhIHN0cmluZyBiZWZvcmUgY2FsbGluZyBgYF9fZm9ybWF0X18oKWBgLCB0aGUgbm9ybWFsIGZvcm1hdHRpbmdcbmxvZ2ljIGlzIGJ5cGFzc2VkLlxuXG5Ud28gY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYW5kIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhIGNoYXJhY3RlciBvdGhlciB0aGFuIFwnfVwnPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cblRoZSAqZmlsbCogY2hhcmFjdGVyIGNhbiBiZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gXCd9XCcgKHdoaWNoXG5zaWduaWZpZXMgdGhlIGVuZCBvZiB0aGUgZmllbGQpLiAgVGhlIHByZXNlbmNlIG9mIGEgZmlsbCBjaGFyYWN0ZXIgaXNcbnNpZ25hbGVkIGJ5IHRoZSAqbmV4dCogY2hhcmFjdGVyLCB3aGljaCBtdXN0IGJlIG9uZSBvZiB0aGUgYWxpZ25tZW50XG5vcHRpb25zLiBJZiB0aGUgc2Vjb25kIGNoYXJhY3RlciBvZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBhIHZhbGlkXG5hbGlnbm1lbnQgb3B0aW9uLCB0aGVuIGl0IGlzIGFzc3VtZWQgdGhhdCBib3RoIHRoZSBmaWxsIGNoYXJhY3RlciBhbmRcbnRoZSBhbGlnbm1lbnQgb3B0aW9uIGFyZSBhYnNlbnQuXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJzxcJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc9XCdgYCAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICB8ICAgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzICAgfFxuICAgfCAgICAgICAgICAgfCBpbiB0aGUgZm9ybSBcJyswMDAwMDAxMjBcJy4gVGhpcyBhbGlnbm1lbnQgb3B0aW9uIGlzIG9ubHkgICAgfFxuICAgfCAgICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdeXCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnK1wnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgfCAgICAgICAgICAgfCB3ZWxsIGFzIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCctXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMsIGFuZCBhIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGBgXCcjXCdgYCBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlcnMsIGFuZCBvbmx5IGZvciBiaW5hcnksXG5vY3RhbCwgb3IgaGV4YWRlY2ltYWwgb3V0cHV0LiAgSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlXG5vdXRwdXQgd2lsbCBiZSBwcmVmaXhlZCBieSBgYFwnMGJcJ2BgLCBgYFwnMG9cJ2BgLCBvciBgYFwnMHhcJ2BgLFxucmVzcGVjdGl2ZWx5LlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuSWYgdGhlICp3aWR0aCogZmllbGQgaXMgcHJlY2VkZWQgYnkgYSB6ZXJvIChgYFwnMFwnYGApIGNoYXJhY3RlciwgdGhpc1xuZW5hYmxlcyB6ZXJvLXBhZGRpbmcuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYW4gKmFsaWdubWVudCogdHlwZSBvZlxuYGBcJz1cJ2BgIGFuZCBhICpmaWxsKiBjaGFyYWN0ZXIgb2YgYGBcJzBcJ2BgLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggYGBcJ2ZcJ2BgIGFuZCBgYFwnRlwnYGAsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWxcbnBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoIGBgXCdnXCdgYCBvciBgYFwnR1wnYGAuXG5Gb3Igbm9uLW51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpblxub3RoZXIgd29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuXG5UaGUgKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ3NcJ2BgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgIHwgICAgICAgICAgIHwgbWF5IGJlIG9taXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnc1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2JcJ2BgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdjXCdgYCAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHVuaWNvZGUgY2hhcmFjdGVyIGJlZm9yZSBwcmludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2RcJ2BgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdvXCdgYCAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwneFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdYXCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZFwnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0XG5gYFwnblwnYGAgYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCBgYGZsb2F0KClgYCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlXG5pbnRlZ2VyIHRvIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdFXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgYGBcJ2VcJ2BgIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdmXCdgYCAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZ1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uIGBgcCA+PSAxYGAsIHRoaXMgICAgfFxuICAgfCAgICAgICAgICAgfCByb3VuZHMgdGhlIG51bWJlciB0byBgYHBgYCBzaWduaWZpY2FudCBkaWdpdHMgYW5kIHRoZW4gICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0cyB0aGUgcmVzdWx0IGluIGVpdGhlciBmaXhlZC1wb2ludCBmb3JtYXQgb3IgaW4gICAgICB8XG4gICB8ICAgICAgICAgICB8IHNjaWVudGlmaWMgbm90YXRpb24sIGRlcGVuZGluZyBvbiBpdHMgbWFnbml0dWRlLiAgVGhlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNlIHJ1bGVzIGFyZSBhcyBmb2xsb3dzOiBzdXBwb3NlIHRoYXQgdGhlIHJlc3VsdCAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYCB3b3VsZCBoYXZlIGV4cG9uZW50IGBgZXhwYGAuICBUaGVuIGlmIGBgLTQgPD0gZXhwICB8XG4gICB8ICAgICAgICAgICB8IDwgcGBgLCB0aGUgbnVtYmVyIGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYFwnZlwnYGAgYW5kIHByZWNpc2lvbiBgYHAtMS1leHBgYC4gT3RoZXJ3aXNlLCB0aGUgbnVtYmVyICAgfFxuICAgfCAgICAgICAgICAgfCBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgLiBJbiBib3RoIGNhc2VzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MgYXJlICAgIHxcbiAgIHwgICAgICAgICAgIHwgcmVtb3ZlZCBmcm9tIHRoZSBzaWduaWZpY2FuZCwgYW5kIHRoZSBkZWNpbWFsIHBvaW50IGlzICAgICB8XG4gICB8ICAgICAgICAgICB8IGFsc28gcmVtb3ZlZCBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGRpZ2l0cyBmb2xsb3dpbmcgICAgfFxuICAgfCAgICAgICAgICAgfCBpdC4gIFBvc3RpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgemVybywgYW5kIG5hbnMsIGFyZSBmb3JtYXR0ZWQgYXMgYGBpbmZgYCwgYGAtaW5mYGAsIGBgMGBgLCB8XG4gICB8ICAgICAgICAgICB8IGBgLTBgYCBhbmQgYGBuYW5gYCByZXNwZWN0aXZlbHksIHJlZ2FyZGxlc3Mgb2YgdGhlICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNpb24uICBBIHByZWNpc2lvbiBvZiBgYDBgYCBpcyB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgIHxcbiAgIHwgICAgICAgICAgIHwgdG8gYSBwcmVjaXNpb24gb2YgYGAxYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnR1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzIGBgXCdnXCdgYCBleGNlcHQgc3dpdGNoZXMgdG8gYGBcJ0VcJ2BgIHxcbiAgIHwgICAgICAgICAgIHwgaWYgdGhlIG51bWJlciBnZXRzIHRvbyBsYXJnZS4gVGhlIHJlcHJlc2VudGF0aW9ucyBvZiAgICAgICB8XG4gICB8ICAgICAgICAgICB8IGluZmluaXR5IGFuZCBOYU4gYXJlIHVwcGVyY2FzZWQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2dcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnJVwnYGAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgfCAgICAgICAgICAgfCBmaXhlZCAoYGBcJ2ZcJ2BgKSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgcGVyY2VudCBzaWduLiAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2dcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkIGBgJWBgLWZvcm1hdHRpbmcuXG5cbkluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkXG5gYCVgYC1mb3JtYXR0aW5nLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYGB7fWBgIGFuZCB3aXRoIGBgOmBgIHVzZWRcbmluc3RlYWQgb2YgYGAlYGAuIEZvciBleGFtcGxlLCBgYFwnJTAzLjJmXCdgYCBjYW4gYmUgdHJhbnNsYXRlZCB0b1xuYGBcJ3swOjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludChvYmplY3QpOlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7MCFyfTsgc3RyKCkgZG9lc25cJ3Q6IHsxIXN9Ii5mb3JtYXQoXCd0ZXN0MVwnLCBcJ3Rlc3QyXCcpXG4gICAicmVwcigpIHNob3dzIHF1b3RlczogXCd0ZXN0MVwnOyBzdHIoKSBkb2VzblwndDogdGVzdDIiXG5cbkFsaWduaW5nIHRoZSB0ZXh0IGFuZCBzcGVjaWZ5aW5nIGEgd2lkdGg6XG5cbiAgID4+PiBcJ3swOjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3swOj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7MDpeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJylcbiAgIFwnICAgICAgICAgICBjZW50ZXJlZCAgICAgICAgICAgXCdcbiAgID4+PiBcJ3swOipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3swOitmfTsgezA6K2Z9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5c1xuICAgXCcrMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7MDogZn07IHswOiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3swOi1mfTsgezA6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7MDpmfTsgezA6Zn1cJ1xuICAgXCczLjE0MDAwMDsgLTMuMTQwMDAwXCdcblxuUmVwbGFjaW5nIGBgJXhgYCBhbmQgYGAlb2BgIGFuZCBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBkaWZmZXJlbnRcbmJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5LjVcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHswOi4yJX0uXCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4OC42NCVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3swOiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7YWxpZ259e2ZpbGx9MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7MDowMlh9ezE6MDJYfXsyOjAyWH17MzowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOlxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50IFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSxcbiAgIC4uLiAgICAgcHJpbnRcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCisgJ2Zvcm1hdHN0cmluZ3MnOiB1J1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXJcbmVpdGhlciBhIG51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGFcbnBvc2l0aW9uYWwgYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkXG5rZXl3b3JkIGFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZVxuMCwgMSwgMiwgLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kXG50aGUgbnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5UaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGVcbmV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWRcbmF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLCB3aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtXG5gYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXAgdXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjc6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVHdvIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGFuZCBgYFwnIXJcJ2BgIHdoaWNoIGNhbGxzIGBgcmVwcigpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBcJ31cJz5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5UaGUgKmZpbGwqIGNoYXJhY3RlciBjYW4gYmUgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIFwnfVwnICh3aGljaFxuc2lnbmlmaWVzIHRoZSBlbmQgb2YgdGhlIGZpZWxkKS4gIFRoZSBwcmVzZW5jZSBvZiBhIGZpbGwgY2hhcmFjdGVyIGlzXG5zaWduYWxlZCBieSB0aGUgKm5leHQqIGNoYXJhY3Rlciwgd2hpY2ggbXVzdCBiZSBvbmUgb2YgdGhlIGFsaWdubWVudFxub3B0aW9ucy4gSWYgdGhlIHNlY29uZCBjaGFyYWN0ZXIgb2YgKmZvcm1hdF9zcGVjKiBpcyBub3QgYSB2YWxpZFxuYWxpZ25tZW50IG9wdGlvbiwgdGhlbiBpdCBpcyBhc3N1bWVkIHRoYXQgYm90aCB0aGUgZmlsbCBjaGFyYWN0ZXIgYW5kXG50aGUgYWxpZ25tZW50IG9wdGlvbiBhcmUgYWJzZW50LlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXJzLCBhbmQgb25seSBmb3IgYmluYXJ5LFxub2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dC4gIElmIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZVxub3V0cHV0IHdpbGwgYmUgcHJlZml4ZWQgYnkgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3IgYGBcJzB4XCdgYCxcbnJlc3BlY3RpdmVseS5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjc6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuSWYgdGhlICp3aWR0aCogZmllbGQgaXMgcHJlY2VkZWQgYnkgYSB6ZXJvIChgYFwnMFwnYGApIGNoYXJhY3RlciwgdGhpc1xuZW5hYmxlcyB6ZXJvLXBhZGRpbmcuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYW4gKmFsaWdubWVudCogdHlwZSBvZlxuYGBcJz1cJ2BgIGFuZCBhICpmaWxsKiBjaGFyYWN0ZXIgb2YgYGBcJzBcJ2BgLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggYGBcJ2ZcJ2BgIGFuZCBgYFwnRlwnYGAsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWxcbnBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoIGBgXCdnXCdgYCBvciBgYFwnR1wnYGAuXG5Gb3Igbm9uLW51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpblxub3RoZXIgd29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuXG5UaGUgKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ3NcJ2BgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgIHwgICAgICAgICAgIHwgbWF5IGJlIG9taXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnc1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2JcJ2BgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdjXCdgYCAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHVuaWNvZGUgY2hhcmFjdGVyIGJlZm9yZSBwcmludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2RcJ2BgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdvXCdgYCAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwneFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdYXCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZFwnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0XG5gYFwnblwnYGAgYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCBgYGZsb2F0KClgYCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlXG5pbnRlZ2VyIHRvIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdFXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgYGBcJ2VcJ2BgIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdmXCdgYCAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZ1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uIGBgcCA+PSAxYGAsIHRoaXMgICAgfFxuICAgfCAgICAgICAgICAgfCByb3VuZHMgdGhlIG51bWJlciB0byBgYHBgYCBzaWduaWZpY2FudCBkaWdpdHMgYW5kIHRoZW4gICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0cyB0aGUgcmVzdWx0IGluIGVpdGhlciBmaXhlZC1wb2ludCBmb3JtYXQgb3IgaW4gICAgICB8XG4gICB8ICAgICAgICAgICB8IHNjaWVudGlmaWMgbm90YXRpb24sIGRlcGVuZGluZyBvbiBpdHMgbWFnbml0dWRlLiAgVGhlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNlIHJ1bGVzIGFyZSBhcyBmb2xsb3dzOiBzdXBwb3NlIHRoYXQgdGhlIHJlc3VsdCAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYCB3b3VsZCBoYXZlIGV4cG9uZW50IGBgZXhwYGAuICBUaGVuIGlmIGBgLTQgPD0gZXhwICB8XG4gICB8ICAgICAgICAgICB8IDwgcGBgLCB0aGUgbnVtYmVyIGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYFwnZlwnYGAgYW5kIHByZWNpc2lvbiBgYHAtMS1leHBgYC4gT3RoZXJ3aXNlLCB0aGUgbnVtYmVyICAgfFxuICAgfCAgICAgICAgICAgfCBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgLiBJbiBib3RoIGNhc2VzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MgYXJlICAgIHxcbiAgIHwgICAgICAgICAgIHwgcmVtb3ZlZCBmcm9tIHRoZSBzaWduaWZpY2FuZCwgYW5kIHRoZSBkZWNpbWFsIHBvaW50IGlzICAgICB8XG4gICB8ICAgICAgICAgICB8IGFsc28gcmVtb3ZlZCBpZiB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGRpZ2l0cyBmb2xsb3dpbmcgICAgfFxuICAgfCAgICAgICAgICAgfCBpdC4gIFBvc3RpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgemVybywgYW5kIG5hbnMsIGFyZSBmb3JtYXR0ZWQgYXMgYGBpbmZgYCwgYGAtaW5mYGAsIGBgMGBgLCB8XG4gICB8ICAgICAgICAgICB8IGBgLTBgYCBhbmQgYGBuYW5gYCByZXNwZWN0aXZlbHksIHJlZ2FyZGxlc3Mgb2YgdGhlICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNpb24uICBBIHByZWNpc2lvbiBvZiBgYDBgYCBpcyB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgIHxcbiAgIHwgICAgICAgICAgIHwgdG8gYSBwcmVjaXNpb24gb2YgYGAxYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnR1wnYGAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzIGBgXCdnXCdgYCBleGNlcHQgc3dpdGNoZXMgdG8gYGBcJ0VcJ2BgIHxcbiAgIHwgICAgICAgICAgIHwgaWYgdGhlIG51bWJlciBnZXRzIHRvbyBsYXJnZS4gVGhlIHJlcHJlc2VudGF0aW9ucyBvZiAgICAgICB8XG4gICB8ICAgICAgICAgICB8IGluZmluaXR5IGFuZCBOYU4gYXJlIHVwcGVyY2FzZWQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2dcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnJVwnYGAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgfCAgICAgICAgICAgfCBmaXhlZCAoYGBcJ2ZcJ2BgKSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgcGVyY2VudCBzaWduLiAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2dcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkIGBgJWBgLWZvcm1hdHRpbmcuXG5cbkluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkXG5gYCVgYC1mb3JtYXR0aW5nLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYGB7fWBgIGFuZCB3aXRoIGBgOmBgIHVzZWRcbmluc3RlYWQgb2YgYGAlYGAuIEZvciBleGFtcGxlLCBgYFwnJTAzLjJmXCdgYCBjYW4gYmUgdHJhbnNsYXRlZCB0b1xuYGBcJ3s6MDMuMmZ9XCdgYC5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDIuNysgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQob2JqZWN0KTpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgYGAlc2BgIGFuZCBgYCVyYGA6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgYGAlK2ZgYCwgYGAlLWZgYCwgYW5kIGBgJSBmYGAgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudFxuYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTkuNVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9LlwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODguNjQlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7YWxpZ259e2ZpbGx9MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6XG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQgXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLFxuICAgLi4uICAgICBwcmludFxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKICAnZnVuY3Rpb24nOiB1J1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZGVjb3JhdGVkICAgICAgOjo9IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZilcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZnVuY2RlZiAgICAgICAgOjo9ICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiAiOiIgc3VpdGVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggICIqIiBpZGVudGlmaWVyIFssICIqKiIgaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgc3VibGlzdCAgICAgICAgOjo9IHBhcmFtZXRlciAoIiwiIHBhcmFtZXRlcikqIFsiLCJdXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciB8ICIoIiBzdWJsaXN0ICIpIlxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6XG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0bzpcblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgdG9wLWxldmVsIHBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzIGlzIGEgc3ludGFjdGljXG5yZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoYXQgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzICBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYSBmb3JtcyxcbmRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhIGZvcm0gaXMgbWVyZWx5IGFcbnNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247IGEgZnVuY3Rpb24gZGVmaW5lZCBpblxuYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZVxuanVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYSBmb3JtLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzXG5hY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0IGFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlXG5zdGF0ZW1lbnRzLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuZm9ybSBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbCBmdW5jdGlvblxudGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWQgaW4gdGhlXG5uZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG4nLAogICdnbG9iYWwnOiB1J1xuVGhlIGBgZ2xvYmFsYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgZ2xvYmFsX3N0bXQgOjo9ICJnbG9iYWwiIGlkZW50aWZpZXIgKCIsIiBpZGVudGlmaWVyKSpcblxuVGhlIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGlzIGEgZGVjbGFyYXRpb24gd2hpY2ggaG9sZHMgZm9yIHRoZSBlbnRpcmVcbmN1cnJlbnQgY29kZSBibG9jay4gIEl0IG1lYW5zIHRoYXQgdGhlIGxpc3RlZCBpZGVudGlmaWVycyBhcmUgdG8gYmVcbmludGVycHJldGVkIGFzIGdsb2JhbHMuICBJdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc2lnbiB0byBhIGdsb2JhbFxudmFyaWFibGUgd2l0aG91dCBgYGdsb2JhbGBgLCBhbHRob3VnaCBmcmVlIHZhcmlhYmxlcyBtYXkgcmVmZXIgdG9cbmdsb2JhbHMgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBnbG9iYWwuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIHVzZWQgaW4gdGhlIHNhbWVcbmNvZGUgYmxvY2sgdGV4dHVhbGx5IHByZWNlZGluZyB0aGF0IGBgZ2xvYmFsYGAgc3RhdGVtZW50LlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSBgYGdsb2JhbGBgIHN0YXRlbWVudCBtdXN0IG5vdCBiZSBkZWZpbmVkIGFzIGZvcm1hbFxucGFyYW1ldGVycyBvciBpbiBhIGBgZm9yYGAgbG9vcCBjb250cm9sIHRhcmdldCwgYGBjbGFzc2BgIGRlZmluaXRpb24sXG5mdW5jdGlvbiBkZWZpbml0aW9uLCBvciBgYGltcG9ydGBgIHN0YXRlbWVudC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdFxuZW5mb3JjZSB0aGUgbGF0dGVyIHR3byByZXN0cmljdGlvbnMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgbm90IGFidXNlXG50aGlzIGZyZWVkb20sIGFzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGVuZm9yY2UgdGhlbSBvciBzaWxlbnRseVxuY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiB0aGUgYGBnbG9iYWxgYCBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgcGFyc2VyLlxuSXQgYXBwbGllcyBvbmx5IHRvIGNvZGUgcGFyc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGBgZ2xvYmFsYGBcbnN0YXRlbWVudC4gSW4gcGFydGljdWxhciwgYSBgYGdsb2JhbGBgIHN0YXRlbWVudCBjb250YWluZWQgaW4gYW5cbmBgZXhlY2BgIHN0YXRlbWVudCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvZGUgYmxvY2sgKmNvbnRhaW5pbmcqIHRoZVxuYGBleGVjYGAgc3RhdGVtZW50LCBhbmQgY29kZSBjb250YWluZWQgaW4gYW4gYGBleGVjYGAgc3RhdGVtZW50IGlzXG51bmFmZmVjdGVkIGJ5IGBgZ2xvYmFsYGAgc3RhdGVtZW50cyBpbiB0aGUgY29kZSBjb250YWluaW5nIHRoZVxuYGBleGVjYGAgc3RhdGVtZW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgYGBldmFsKClgYCxcbmBgZXhlY2ZpbGUoKWBgIGFuZCBgYGNvbXBpbGUoKWBgIGZ1bmN0aW9ucy5cbicsCi0gJ2lkLWNsYXNzZXMnOiB1J1xuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgX19idWlsdGluX19gYCBtb2R1bGUuXG4gICBXaGVuIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpc1xuICAgbm90IGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAotICdpZGVudGlmaWVycyc6IHUnXG5JZGVudGlmaWVycyBhbmQga2V5d29yZHNcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5JZGVudGlmaWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyAqbmFtZXMqKSBhcmUgZGVzY3JpYmVkIGJ5IHRoZVxuZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIGlkZW50aWZpZXIgOjo9IChsZXR0ZXJ8Il8iKSAobGV0dGVyIHwgZGlnaXQgfCAiXyIpKlxuICAgbGV0dGVyICAgICA6Oj0gbG93ZXJjYXNlIHwgdXBwZXJjYXNlXG4gICBsb3dlcmNhc2UgIDo6PSAiYSIuLi4ieiJcbiAgIHVwcGVyY2FzZSAgOjo9ICJBIi4uLiJaIlxuICAgZGlnaXQgICAgICA6Oj0gIjAiLi4uIjkiXG5cbklkZW50aWZpZXJzIGFyZSB1bmxpbWl0ZWQgaW4gbGVuZ3RoLiAgQ2FzZSBpcyBzaWduaWZpY2FudC5cblxuXG5LZXl3b3Jkc1xuPT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBhcmUgdXNlZCBhcyByZXNlcnZlZCB3b3Jkcywgb3IgKmtleXdvcmRzKiBvZlxudGhlIGxhbmd1YWdlLCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgb3JkaW5hcnkgaWRlbnRpZmllcnMuICBUaGV5IG11c3RcbmJlIHNwZWxsZWQgZXhhY3RseSBhcyB3cml0dGVuIGhlcmU6XG5cbiAgIGFuZCAgICAgICBkZWwgICAgICAgZnJvbSAgICAgIG5vdCAgICAgICB3aGlsZVxuICAgYXMgICAgICAgIGVsaWYgICAgICBnbG9iYWwgICAgb3IgICAgICAgIHdpdGhcbiAgIGFzc2VydCAgICBlbHNlICAgICAgaWYgICAgICAgIHBhc3MgICAgICB5aWVsZFxuICAgYnJlYWsgICAgIGV4Y2VwdCAgICBpbXBvcnQgICAgcHJpbnRcbiAgIGNsYXNzICAgICBleGVjICAgICAgaW4gICAgICAgIHJhaXNlXG4gICBjb250aW51ZSAgZmluYWxseSAgIGlzICAgICAgICByZXR1cm5cbiAgIGRlZiAgICAgICBmb3IgICAgICAgbGFtYmRhICAgIHRyeVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi40OiBgYE5vbmVgYCBiZWNhbWUgYSBjb25zdGFudCBhbmQgaXMgbm93XG5yZWNvZ25pemVkIGJ5IHRoZSBjb21waWxlciBhcyBhIG5hbWUgZm9yIHRoZSBidWlsdC1pbiBvYmplY3QgYGBOb25lYGAuXG5BbHRob3VnaCBpdCBpcyBub3QgYSBrZXl3b3JkLCB5b3UgY2Fubm90IGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgdG9cbml0LlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi41OiBCb3RoIGBgYXNgYCBhbmQgYGB3aXRoYGAgYXJlIG9ubHkgcmVjb2duaXplZFxud2hlbiB0aGUgYGB3aXRoX3N0YXRlbWVudGBgIGZ1dHVyZSBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuIEl0IHdpbGxcbmFsd2F5cyBiZSBlbmFibGVkIGluIFB5dGhvbiAyLjYuICBTZWUgc2VjdGlvbiAqVGhlIHdpdGggc3RhdGVtZW50KiBmb3JcbmRldGFpbHMuICBOb3RlIHRoYXQgdXNpbmcgYGBhc2BgIGFuZCBgYHdpdGhgYCBhcyBpZGVudGlmaWVycyB3aWxsXG5hbHdheXMgaXNzdWUgYSB3YXJuaW5nLCBldmVuIHdoZW4gdGhlIGBgd2l0aF9zdGF0ZW1lbnRgYCBmdXR1cmVcbmRpcmVjdGl2ZSBpcyBub3QgaW4gZWZmZWN0LlxuXG5cblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuYGBfKmBgXG4gICBOb3QgaW1wb3J0ZWQgYnkgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllclxuICAgYGBfYGAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZlxuICAgdGhlIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSBgYF9fYnVpbHRpbl9fYGAgbW9kdWxlLlxuICAgV2hlbiBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXNcbiAgIG5vdCBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiBgYF9fKl9fYGAgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXNcbiAgIG5vdCBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZVxuICAgd2l0aG91dCB3YXJuaW5nLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKKyAnaWQtY2xhc3Nlcyc6IHUnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBfX2J1aWx0aW5fX2BgIG1vZHVsZS5cbiAgIFdoZW4gbm90IGluIGludGVyYWN0aXZlIG1vZGUsIGBgX2BgIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzXG4gICBub3QgZGVmaW5lZC4gU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgYGBfYGAgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2V0dGV4dGBgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbmBgX18qX19gYFxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuICBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSk7XG4gICBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBleHBlY3QgdG8gZGVmaW5lIGFkZGl0aW9uYWwgbmFtZXMgdXNpbmdcbiAgIHRoaXMgY29udmVudGlvbi4gIFRoZSBzZXQgb2YgbmFtZXMgb2YgdGhpcyBjbGFzcyBkZWZpbmVkIGJ5IFB5dGhvblxuICAgbWF5IGJlIGV4dGVuZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gU2VlIHNlY3Rpb24gKlNwZWNpYWwgbWV0aG9kXG4gICBuYW1lcyouXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAorICdpZGVudGlmaWVycyc6IHUnXG5JZGVudGlmaWVycyBhbmQga2V5d29yZHNcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5JZGVudGlmaWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyAqbmFtZXMqKSBhcmUgZGVzY3JpYmVkIGJ5IHRoZVxuZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIGlkZW50aWZpZXIgOjo9IChsZXR0ZXJ8Il8iKSAobGV0dGVyIHwgZGlnaXQgfCAiXyIpKlxuICAgbGV0dGVyICAgICA6Oj0gbG93ZXJjYXNlIHwgdXBwZXJjYXNlXG4gICBsb3dlcmNhc2UgIDo6PSAiYSIuLi4ieiJcbiAgIHVwcGVyY2FzZSAgOjo9ICJBIi4uLiJaIlxuICAgZGlnaXQgICAgICA6Oj0gIjAiLi4uIjkiXG5cbklkZW50aWZpZXJzIGFyZSB1bmxpbWl0ZWQgaW4gbGVuZ3RoLiAgQ2FzZSBpcyBzaWduaWZpY2FudC5cblxuXG5LZXl3b3Jkc1xuPT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBhcmUgdXNlZCBhcyByZXNlcnZlZCB3b3Jkcywgb3IgKmtleXdvcmRzKiBvZlxudGhlIGxhbmd1YWdlLCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgb3JkaW5hcnkgaWRlbnRpZmllcnMuICBUaGV5IG11c3RcbmJlIHNwZWxsZWQgZXhhY3RseSBhcyB3cml0dGVuIGhlcmU6XG5cbiAgIGFuZCAgICAgICBkZWwgICAgICAgZnJvbSAgICAgIG5vdCAgICAgICB3aGlsZVxuICAgYXMgICAgICAgIGVsaWYgICAgICBnbG9iYWwgICAgb3IgICAgICAgIHdpdGhcbiAgIGFzc2VydCAgICBlbHNlICAgICAgaWYgICAgICAgIHBhc3MgICAgICB5aWVsZFxuICAgYnJlYWsgICAgIGV4Y2VwdCAgICBpbXBvcnQgICAgcHJpbnRcbiAgIGNsYXNzICAgICBleGVjICAgICAgaW4gICAgICAgIHJhaXNlXG4gICBjb250aW51ZSAgZmluYWxseSAgIGlzICAgICAgICByZXR1cm5cbiAgIGRlZiAgICAgICBmb3IgICAgICAgbGFtYmRhICAgIHRyeVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi40OiBgYE5vbmVgYCBiZWNhbWUgYSBjb25zdGFudCBhbmQgaXMgbm93XG5yZWNvZ25pemVkIGJ5IHRoZSBjb21waWxlciBhcyBhIG5hbWUgZm9yIHRoZSBidWlsdC1pbiBvYmplY3QgYGBOb25lYGAuXG5BbHRob3VnaCBpdCBpcyBub3QgYSBrZXl3b3JkLCB5b3UgY2Fubm90IGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgdG9cbml0LlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi41OiBCb3RoIGBgYXNgYCBhbmQgYGB3aXRoYGAgYXJlIG9ubHkgcmVjb2duaXplZFxud2hlbiB0aGUgYGB3aXRoX3N0YXRlbWVudGBgIGZ1dHVyZSBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuIEl0IHdpbGxcbmFsd2F5cyBiZSBlbmFibGVkIGluIFB5dGhvbiAyLjYuICBTZWUgc2VjdGlvbiAqVGhlIHdpdGggc3RhdGVtZW50KiBmb3JcbmRldGFpbHMuICBOb3RlIHRoYXQgdXNpbmcgYGBhc2BgIGFuZCBgYHdpdGhgYCBhcyBpZGVudGlmaWVycyB3aWxsXG5hbHdheXMgaXNzdWUgYSB3YXJuaW5nLCBldmVuIHdoZW4gdGhlIGBgd2l0aF9zdGF0ZW1lbnRgYCBmdXR1cmVcbmRpcmVjdGl2ZSBpcyBub3QgaW4gZWZmZWN0LlxuXG5cblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuYGBfKmBgXG4gICBOb3QgaW1wb3J0ZWQgYnkgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllclxuICAgYGBfYGAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZlxuICAgdGhlIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSBgYF9fYnVpbHRpbl9fYGAgbW9kdWxlLlxuICAgV2hlbiBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXNcbiAgIG5vdCBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KTtcbiAgIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IGV4cGVjdCB0byBkZWZpbmUgYWRkaXRpb25hbCBuYW1lcyB1c2luZ1xuICAgdGhpcyBjb252ZW50aW9uLiAgVGhlIHNldCBvZiBuYW1lcyBvZiB0aGlzIGNsYXNzIGRlZmluZWQgYnkgUHl0aG9uXG4gICBtYXkgYmUgZXh0ZW5kZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBTZWUgc2VjdGlvbiAqU3BlY2lhbCBtZXRob2RcbiAgIG5hbWVzKi5cblxuYGBfXypgYFxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCiAgJ2lmJzogdSdcblRoZSBgYGlmYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAogICdpbWFnaW5hcnknOiB1J1xuSW1hZ2luYXJ5IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKipcblxuSW1hZ2luYXJ5IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbWFnbnVtYmVyIDo6PSAoZmxvYXRudW1iZXIgfCBpbnRwYXJ0KSAoImoiIHwgIkoiKVxuXG5BbiBpbWFnaW5hcnkgbGl0ZXJhbCB5aWVsZHMgYSBjb21wbGV4IG51bWJlciB3aXRoIGEgcmVhbCBwYXJ0IG9mIDAuMC5cbkNvbXBsZXggbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnNcbmFuZCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiB0aGVpciByYW5nZS4gIFRvIGNyZWF0ZSBhIGNvbXBsZXhcbm51bWJlciB3aXRoIGEgbm9uemVybyByZWFsIHBhcnQsIGFkZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBpdCxcbmUuZy4sIGBgKDMrNGopYGAuICBTb21lIGV4YW1wbGVzIG9mIGltYWdpbmFyeSBsaXRlcmFsczpcblxuICAgMy4xNGogICAxMC5qICAgIDEwaiAgICAgLjAwMWogICAxZTEwMGogIDMuMTRlLTEwalxuJywKLSAnaW1wb3J0JzogdSdcblRoZSBgYGltcG9ydGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGltcG9ydF9zdG10ICAgICA6Oj0gImltcG9ydCIgbW9kdWxlIFsiYXMiIG5hbWVdICggIiwiIG1vZHVsZSBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiAiKCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSogWyIsIl0gIikiXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgbW9kdWxlICJpbXBvcnQiICIqIlxuICAgbW9kdWxlICAgICAgICAgIDo6PSAoaWRlbnRpZmllciAiLiIpKiBpZGVudGlmaWVyXG4gICByZWxhdGl2ZV9tb2R1bGUgOjo9ICIuIiogbW9kdWxlIHwgIi4iK1xuICAgbmFtZSAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkltcG9ydCBzdGF0ZW1lbnRzIGFyZSBleGVjdXRlZCBpbiB0d28gc3RlcHM6ICgxKSBmaW5kIGEgbW9kdWxlLCBhbmRcbmluaXRpYWxpemUgaXQgaWYgbmVjZXNzYXJ5OyAoMikgZGVmaW5lIGEgbmFtZSBvciBuYW1lcyBpbiB0aGUgbG9jYWxcbm5hbWVzcGFjZSAob2YgdGhlIHNjb3BlIHdoZXJlIHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudCBvY2N1cnMpLiBUaGVcbnN0YXRlbWVudCBjb21lcyBpbiB0d28gZm9ybXMgZGlmZmVyaW5nIG9uIHdoZXRoZXIgaXQgdXNlcyB0aGUgYGBmcm9tYGBcbmtleXdvcmQuIFRoZSBmaXJzdCBmb3JtICh3aXRob3V0IGBgZnJvbWBgKSByZXBlYXRzIHRoZXNlIHN0ZXBzIGZvclxuZWFjaCBpZGVudGlmaWVyIGluIHRoZSBsaXN0LiBUaGUgZm9ybSB3aXRoIGBgZnJvbWBgIHBlcmZvcm1zIHN0ZXAgKDEpXG5vbmNlLCBhbmQgdGhlbiBwZXJmb3JtcyBzdGVwICgyKSByZXBlYXRlZGx5LlxuXG5UbyB1bmRlcnN0YW5kIGhvdyBzdGVwICgxKSBvY2N1cnMsIG9uZSBtdXN0IGZpcnN0IHVuZGVyc3RhbmQgaG93XG5QeXRob24gaGFuZGxlcyBoaWVyYXJjaGljYWwgbmFtaW5nIG9mIG1vZHVsZXMuIFRvIGhlbHAgb3JnYW5pemVcbm1vZHVsZXMgYW5kIHByb3ZpZGUgYSBoaWVyYXJjaHkgaW4gbmFtaW5nLCBQeXRob24gaGFzIGEgY29uY2VwdCBvZlxucGFja2FnZXMuIEEgcGFja2FnZSBjYW4gY29udGFpbiBvdGhlciBwYWNrYWdlcyBhbmQgbW9kdWxlcyB3aGlsZVxubW9kdWxlcyBjYW5ub3QgY29udGFpbiBvdGhlciBtb2R1bGVzIG9yIHBhY2thZ2VzLiBGcm9tIGEgZmlsZSBzeXN0ZW1cbnBlcnNwZWN0aXZlLCBwYWNrYWdlcyBhcmUgZGlyZWN0b3JpZXMgYW5kIG1vZHVsZXMgYXJlIGZpbGVzLiBUaGVcbm9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIHBhY2thZ2VzIGlzIHN0aWxsIGF2YWlsYWJsZSB0byByZWFkLFxuYWx0aG91Z2ggbWlub3IgZGV0YWlscyBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIHdyaXRpbmcgb2YgdGhhdFxuZG9jdW1lbnQuXG5cbk9uY2UgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBpcyBrbm93biAodW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIHRoZVxudGVybSAibW9kdWxlIiB3aWxsIHJlZmVyIHRvIGJvdGggcGFja2FnZXMgYW5kIG1vZHVsZXMpLCBzZWFyY2hpbmcgZm9yXG50aGUgbW9kdWxlIG9yIHBhY2thZ2UgY2FuIGJlZ2luLiBUaGUgZmlyc3QgcGxhY2UgY2hlY2tlZCBpc1xuYGBzeXMubW9kdWxlc2BgLCB0aGUgY2FjaGUgb2YgYWxsIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWRcbnByZXZpb3VzbHkuIElmIHRoZSBtb2R1bGUgaXMgZm91bmQgdGhlcmUgdGhlbiBpdCBpcyB1c2VkIGluIHN0ZXAgKDIpXG5vZiBpbXBvcnQuXG5cbklmIHRoZSBtb2R1bGUgaXMgbm90IGZvdW5kIGluIHRoZSBjYWNoZSwgdGhlbiBgYHN5cy5tZXRhX3BhdGhgYCBpc1xuc2VhcmNoZWQgKHRoZSBzcGVjaWZpY2F0aW9uIGZvciBgYHN5cy5tZXRhX3BhdGhgYCBjYW4gYmUgZm91bmQgaW5cbioqUEVQIDMwMioqKS4gVGhlIG9iamVjdCBpcyBhIGxpc3Qgb2YgKmZpbmRlciogb2JqZWN0cyB3aGljaCBhcmVcbnF1ZXJpZWQgaW4gb3JkZXIgYXMgdG8gd2hldGhlciB0aGV5IGtub3cgaG93IHRvIGxvYWQgdGhlIG1vZHVsZSBieVxuY2FsbGluZyB0aGVpciBgYGZpbmRfbW9kdWxlKClgYCBtZXRob2Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBJZlxudGhlIG1vZHVsZSBoYXBwZW5zIHRvIGJlIGNvbnRhaW5lZCB3aXRoaW4gYSBwYWNrYWdlIChhcyBkZW5vdGVkIGJ5IHRoZVxuZXhpc3RlbmNlIG9mIGEgZG90IGluIHRoZSBuYW1lKSwgdGhlbiBhIHNlY29uZCBhcmd1bWVudCB0b1xuYGBmaW5kX21vZHVsZSgpYGAgaXMgZ2l2ZW4gYXMgdGhlIHZhbHVlIG9mIHRoZSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlXG5mcm9tIHRoZSBwYXJlbnQgcGFja2FnZSAoZXZlcnl0aGluZyB1cCB0byB0aGUgbGFzdCBkb3QgaW4gdGhlIG5hbWUgb2ZcbnRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQpLiBJZiBhIGZpbmRlciBjYW4gZmluZCB0aGUgbW9kdWxlIGl0IHJldHVybnNcbmEgKmxvYWRlciogKGRpc2N1c3NlZCBsYXRlcikgb3IgcmV0dXJucyBgYE5vbmVgYC5cblxuSWYgbm9uZSBvZiB0aGUgZmluZGVycyBvbiBgYHN5cy5tZXRhX3BhdGhgYCBhcmUgYWJsZSB0byBmaW5kIHRoZVxubW9kdWxlIHRoZW4gc29tZSBpbXBsaWNpdGx5IGRlZmluZWQgZmluZGVycyBhcmUgcXVlcmllZC5cbkltcGxlbWVudGF0aW9ucyBvZiBQeXRob24gdmFyeSBpbiB3aGF0IGltcGxpY2l0IG1ldGEgcGF0aCBmaW5kZXJzIGFyZVxuZGVmaW5lZC4gVGhlIG9uZSB0aGV5IGFsbCBkbyBkZWZpbmUsIHRob3VnaCwgaXMgb25lIHRoYXQgaGFuZGxlc1xuYGBzeXMucGF0aF9ob29rc2BgLCBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAsIGFuZCBgYHN5cy5wYXRoYGAuXG5cblRoZSBpbXBsaWNpdCBmaW5kZXIgc2VhcmNoZXMgZm9yIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGluIHRoZSAicGF0aHMiXG5zcGVjaWZpZWQgaW4gb25lIG9mIHR3byBwbGFjZXMgKCJwYXRocyIgZG8gbm90IGhhdmUgdG8gYmUgZmlsZSBzeXN0ZW1cbnBhdGhzKS4gSWYgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyBzdXBwb3NlZCB0byBiZSBjb250YWluZWRcbndpdGhpbiBhIHBhY2thZ2UgdGhlbiB0aGUgc2Vjb25kIGFyZ3VtZW50IHBhc3NlZCB0byBgYGZpbmRfbW9kdWxlKClgYCxcbmBgX19wYXRoX19gYCBvbiB0aGUgcGFyZW50IHBhY2thZ2UsIGlzIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiBwYXRocy4gSWZcbnRoZSBtb2R1bGUgaXMgbm90IGNvbnRhaW5lZCBpbiBhIHBhY2thZ2UgdGhlbiBgYHN5cy5wYXRoYGAgaXMgdXNlZCBhc1xudGhlIHNvdXJjZSBvZiBwYXRocy5cblxuT25jZSB0aGUgc291cmNlIG9mIHBhdGhzIGlzIGNob3NlbiBpdCBpcyBpdGVyYXRlZCBvdmVyIHRvIGZpbmQgYVxuZmluZGVyIHRoYXQgY2FuIGhhbmRsZSB0aGF0IHBhdGguIFRoZSBkaWN0IGF0XG5gYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgY2FjaGVzIGZpbmRlcnMgZm9yIHBhdGhzIGFuZCBpcyBjaGVja2VkXG5mb3IgYSBmaW5kZXIuIElmIHRoZSBwYXRoIGRvZXMgbm90IGhhdmUgYSBmaW5kZXIgY2FjaGVkIHRoZW5cbmBgc3lzLnBhdGhfaG9va3NgYCBpcyBzZWFyY2hlZCBieSBjYWxsaW5nIGVhY2ggb2JqZWN0IGluIHRoZSBsaXN0IHdpdGhcbmEgc2luZ2xlIGFyZ3VtZW50IG9mIHRoZSBwYXRoLCByZXR1cm5pbmcgYSBmaW5kZXIgb3IgcmFpc2VzXG5gYEltcG9ydEVycm9yYGAuIElmIGEgZmluZGVyIGlzIHJldHVybmVkIHRoZW4gaXQgaXMgY2FjaGVkIGluXG5gYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgYW5kIHRoZW4gdXNlZCBmb3IgdGhhdCBwYXRoIGVudHJ5LiBJZiBub1xuZmluZGVyIGNhbiBiZSBmb3VuZCBidXQgdGhlIHBhdGggZXhpc3RzIHRoZW4gYSB2YWx1ZSBvZiBgYE5vbmVgYCBpc1xuc3RvcmVkIGluIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCB0byBzaWduaWZ5IHRoYXQgYW4gaW1wbGljaXQsXG5maWxlLWJhc2VkIGZpbmRlciB0aGF0IGhhbmRsZXMgbW9kdWxlcyBzdG9yZWQgYXMgaW5kaXZpZHVhbCBmaWxlc1xuc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQgcGF0aC4gSWYgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QgdGhlbiBhIGZpbmRlclxud2hpY2ggYWx3YXlzIHJldHVybnMgYGBOb25lYGAgaXMgcGxhY2VkIGluIHRoZSBjYWNoZSBmb3IgdGhlIHBhdGguXG5cbklmIG5vIGZpbmRlciBjYW4gZmluZCB0aGUgbW9kdWxlIHRoZW4gYGBJbXBvcnRFcnJvcmBgIGlzIHJhaXNlZC5cbk90aGVyd2lzZSBzb21lIGZpbmRlciByZXR1cm5lZCBhIGxvYWRlciB3aG9zZSBgYGxvYWRfbW9kdWxlKClgYCBtZXRob2RcbmlzIGNhbGxlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbG9hZCAoc2VlICoqUEVQIDMwMioqIGZvciB0aGVcbm9yaWdpbmFsIGRlZmluaXRpb24gb2YgbG9hZGVycykuIEEgbG9hZGVyIGhhcyBzZXZlcmFsIHJlc3BvbnNpYmlsaXRpZXNcbnRvIHBlcmZvcm0gb24gYSBtb2R1bGUgaXQgbG9hZHMuIEZpcnN0LCBpZiB0aGUgbW9kdWxlIGFscmVhZHkgZXhpc3RzXG5pbiBgYHN5cy5tb2R1bGVzYGAgKGEgcG9zc2liaWxpdHkgaWYgdGhlIGxvYWRlciBpcyBjYWxsZWQgb3V0c2lkZSBvZlxudGhlIGltcG9ydCBtYWNoaW5lcnkpIHRoZW4gaXQgaXMgdG8gdXNlIHRoYXQgbW9kdWxlIGZvciBpbml0aWFsaXphdGlvblxuYW5kIG5vdCBhIG5ldyBtb2R1bGUuIEJ1dCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGV4aXN0IGluXG5gYHN5cy5tb2R1bGVzYGAgdGhlbiBpdCBpcyB0byBiZSBhZGRlZCB0byB0aGF0IGRpY3QgYmVmb3JlXG5pbml0aWFsaXphdGlvbiBiZWdpbnMuIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgbG9hZGluZyBvZiB0aGUgbW9kdWxlXG5hbmQgaXQgd2FzIGFkZGVkIHRvIGBgc3lzLm1vZHVsZXNgYCBpdCBpcyB0byBiZSByZW1vdmVkIGZyb20gdGhlIGRpY3QuXG5JZiBhbiBlcnJvciBvY2N1cnMgYnV0IHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW4gYGBzeXMubW9kdWxlc2BgIGl0IGlzXG5sZWZ0IGluIHRoZSBkaWN0LlxuXG5UaGUgbG9hZGVyIG11c3Qgc2V0IHNldmVyYWwgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlLiBgYF9fbmFtZV9fYGAgaXNcbnRvIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBgYF9fZmlsZV9fYGAgaXMgdG8gYmUgdGhlICJwYXRoIlxudG8gdGhlIGZpbGUgdW5sZXNzIHRoZSBtb2R1bGUgaXMgYnVpbHQtaW4gKGFuZCB0aHVzIGxpc3RlZCBpblxuYGBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXNgYCkgaW4gd2hpY2ggY2FzZSB0aGUgYXR0cmlidXRlIGlzIG5vdCBzZXQuXG5JZiB3aGF0IGlzIGJlaW5nIGltcG9ydGVkIGlzIGEgcGFja2FnZSB0aGVuIGBgX19wYXRoX19gYCBpcyB0byBiZSBzZXRcbnRvIGEgbGlzdCBvZiBwYXRocyB0byBiZSBzZWFyY2hlZCB3aGVuIGxvb2tpbmcgZm9yIG1vZHVsZXMgYW5kXG5wYWNrYWdlcyBjb250YWluZWQgd2l0aGluIHRoZSBwYWNrYWdlIGJlaW5nIGltcG9ydGVkLiBgYF9fcGFja2FnZV9fYGBcbmlzIG9wdGlvbmFsIGJ1dCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGVcbm1vZHVsZSBvciBwYWNrYWdlICh0aGUgZW1wdHkgc3RyaW5nIGlzIHVzZWQgZm9yIG1vZHVsZSBub3QgY29udGFpbmVkXG5pbiBhIHBhY2thZ2UpLiBgYF9fbG9hZGVyX19gYCBpcyBhbHNvIG9wdGlvbmFsIGJ1dCBzaG91bGQgYmUgc2V0IHRvXG50aGUgbG9hZGVyIG9iamVjdCB0aGF0IGlzIGxvYWRpbmcgdGhlIG1vZHVsZS5cblxuSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBsb2FkaW5nIHRoZW4gdGhlIGxvYWRlciByYWlzZXNcbmBgSW1wb3J0RXJyb3JgYCBpZiBzb21lIG90aGVyIGV4Y2VwdGlvbiBpcyBub3QgYWxyZWFkeSBiZWluZ1xucHJvcGFnYXRlZC4gT3RoZXJ3aXNlIHRoZSBsb2FkZXIgcmV0dXJucyB0aGUgbW9kdWxlIHRoYXQgd2FzIGxvYWRlZFxuYW5kIGluaXRpYWxpemVkLlxuXG5XaGVuIHN0ZXAgKDEpIGZpbmlzaGVzIHdpdGhvdXQgcmFpc2luZyBhbiBleGNlcHRpb24sIHN0ZXAgKDIpIGNhblxuYmVnaW4uXG5cblRoZSBmaXJzdCBmb3JtIG9mIGBgaW1wb3J0YGAgc3RhdGVtZW50IGJpbmRzIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGVcbmxvY2FsIG5hbWVzcGFjZSB0byB0aGUgbW9kdWxlIG9iamVjdCwgYW5kIHRoZW4gZ29lcyBvbiB0byBpbXBvcnQgdGhlXG5uZXh0IGlkZW50aWZpZXIsIGlmIGFueS4gIElmIHRoZSBtb2R1bGUgbmFtZSBpcyBmb2xsb3dlZCBieSBgYGFzYGAsXG50aGUgbmFtZSBmb2xsb3dpbmcgYGBhc2BgIGlzIHVzZWQgYXMgdGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBtb2R1bGUuXG5cblRoZSBgYGZyb21gYCBmb3JtIGRvZXMgbm90IGJpbmQgdGhlIG1vZHVsZSBuYW1lOiBpdCBnb2VzIHRocm91Z2ggdGhlXG5saXN0IG9mIGlkZW50aWZpZXJzLCBsb29rcyBlYWNoIG9uZSBvZiB0aGVtIHVwIGluIHRoZSBtb2R1bGUgZm91bmQgaW5cbnN0ZXAgKDEpLCBhbmQgYmluZHMgdGhlIG5hbWUgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSB0byB0aGUgb2JqZWN0IHRodXNcbmZvdW5kLiAgQXMgd2l0aCB0aGUgZmlyc3QgZm9ybSBvZiBgYGltcG9ydGBgLCBhbiBhbHRlcm5hdGUgbG9jYWwgbmFtZVxuY2FuIGJlIHN1cHBsaWVkIGJ5IHNwZWNpZnlpbmcgImBgYXNgYCBsb2NhbG5hbWUiLiAgSWYgYSBuYW1lIGlzIG5vdFxuZm91bmQsIGBgSW1wb3J0RXJyb3JgYCBpcyByYWlzZWQuICBJZiB0aGUgbGlzdCBvZiBpZGVudGlmaWVycyBpc1xucmVwbGFjZWQgYnkgYSBzdGFyIChgYFwnKlwnYGApLCBhbGwgcHVibGljIG5hbWVzIGRlZmluZWQgaW4gdGhlIG1vZHVsZVxuYXJlIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2Ugb2YgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50Li5cblxuVGhlICpwdWJsaWMgbmFtZXMqIGRlZmluZWQgYnkgYSBtb2R1bGUgYXJlIGRldGVybWluZWQgYnkgY2hlY2tpbmcgdGhlXG5tb2R1bGVcJ3MgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlIG5hbWVkIGBgX19hbGxfX2BgOyBpZiBkZWZpbmVkLCBpdFxubXVzdCBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2hpY2ggYXJlIG5hbWVzIGRlZmluZWQgb3IgaW1wb3J0ZWQgYnlcbnRoYXQgbW9kdWxlLiAgVGhlIG5hbWVzIGdpdmVuIGluIGBgX19hbGxfX2BgIGFyZSBhbGwgY29uc2lkZXJlZCBwdWJsaWNcbmFuZCBhcmUgcmVxdWlyZWQgdG8gZXhpc3QuICBJZiBgYF9fYWxsX19gYCBpcyBub3QgZGVmaW5lZCwgdGhlIHNldCBvZlxucHVibGljIG5hbWVzIGluY2x1ZGVzIGFsbCBuYW1lcyBmb3VuZCBpbiB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSB3aGljaFxuZG8gbm90IGJlZ2luIHdpdGggYW4gdW5kZXJzY29yZSBjaGFyYWN0ZXIgKGBgXCdfXCdgYCkuIGBgX19hbGxfX2BgXG5zaG91bGQgY29udGFpbiB0aGUgZW50aXJlIHB1YmxpYyBBUEkuIEl0IGlzIGludGVuZGVkIHRvIGF2b2lkXG5hY2NpZGVudGFsbHkgZXhwb3J0aW5nIGl0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXNcbmxpYnJhcnkgbW9kdWxlcyB3aGljaCB3ZXJlIGltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS5cblxuVGhlIGBgZnJvbWBgIGZvcm0gd2l0aCBgYCpgYCBtYXkgb25seSBvY2N1ciBpbiBhIG1vZHVsZSBzY29wZS4gIElmIHRoZVxud2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIHVzZWQgaW4gYSBmdW5jdGlvblxuYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWUgdmFyaWFibGVzLFxudGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSBgYFN5bnRheEVycm9yYGAuXG5cbldoZW4gc3BlY2lmeWluZyB3aGF0IG1vZHVsZSB0byBpbXBvcnQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlXG5hYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgb3IgcGFja2FnZSBpcyBjb250YWluZWRcbndpdGhpbiBhbm90aGVyIHBhY2thZ2UgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBhIHJlbGF0aXZlIGltcG9ydCB3aXRoaW5cbnRoZSBzYW1lIHRvcCBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIG1lbnRpb24gdGhlIHBhY2thZ2UgbmFtZS4gQnlcbnVzaW5nIGxlYWRpbmcgZG90cyBpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBvciBwYWNrYWdlIGFmdGVyIGBgZnJvbWBgXG55b3UgY2FuIHNwZWNpZnkgaG93IGhpZ2ggdG8gdHJhdmVyc2UgdXAgdGhlIGN1cnJlbnQgcGFja2FnZSBoaWVyYXJjaHlcbndpdGhvdXQgc3BlY2lmeWluZyBleGFjdCBuYW1lcy4gT25lIGxlYWRpbmcgZG90IG1lYW5zIHRoZSBjdXJyZW50XG5wYWNrYWdlIHdoZXJlIHRoZSBtb2R1bGUgbWFraW5nIHRoZSBpbXBvcnQgZXhpc3RzLiBUd28gZG90cyBtZWFucyB1cFxub25lIHBhY2thZ2UgbGV2ZWwuIFRocmVlIGRvdHMgaXMgdXAgdHdvIGxldmVscywgZXRjLiBTbyBpZiB5b3UgZXhlY3V0ZVxuYGBmcm9tIC4gaW1wb3J0IG1vZGBgIGZyb20gYSBtb2R1bGUgaW4gdGhlIGBgcGtnYGAgcGFja2FnZSB0aGVuIHlvdVxud2lsbCBlbmQgdXAgaW1wb3J0aW5nIGBgcGtnLm1vZGBgLiBJZiB5b3UgZXhlY3V0ZSBgYGZyb20gLi5zdWJwa2cyXG5pbXBydCBtb2RgYCBmcm9tIHdpdGhpbiBgYHBrZy5zdWJwa2cxYGAgeW91IHdpbGwgaW1wb3J0XG5gYHBrZy5zdWJwa2cyLm1vZGBgLiBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpc1xuY29udGFpbmVkIHdpdGhpbiAqKlBFUCAzMjgqKi5cblxuVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgX19pbXBvcnRfXygpYGAgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydFxuYXBwbGljYXRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBsb2FkZWRcbmR5bmFtaWNhbGx5OyByZWZlciB0byAqQnVpbHQtaW4gRnVuY3Rpb25zKiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZVxuc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob25cbnRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2ZcbnRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVcbmZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAyLjYgYXJlIGBgdW5pY29kZV9saXRlcmFsc2BgLFxuYGBwcmludF9mdW5jdGlvbmBgLCBgYGFic29sdXRlX2ltcG9ydGBgLCBgYGRpdmlzaW9uYGAsIGBgZ2VuZXJhdG9yc2BgLFxuYGBuZXN0ZWRfc2NvcGVzYGAgYW5kIGBgd2l0aF9zdGF0ZW1lbnRgYC4gIGBgZ2VuZXJhdG9yc2BgLFxuYGB3aXRoX3N0YXRlbWVudGBgLCBgYG5lc3RlZF9zY29wZXNgYCBhcmUgcmVkdW5kYW50IGluIFB5dGhvbiB2ZXJzaW9uXG4yLjYgYW5kIGFib3ZlIGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGVuYWJsZWQuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHNwZWNpYWxseSBhdCBjb21waWxlXG50aW1lOiBDaGFuZ2VzIHRvIHRoZSBzZW1hbnRpY3Mgb2YgY29yZSBjb25zdHJ1Y3RzIGFyZSBvZnRlblxuaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGluZyBkaWZmZXJlbnQgY29kZS4gIEl0IG1heSBldmVuIGJlIHRoZSBjYXNlXG50aGF0IGEgbmV3IGZlYXR1cmUgaW50cm9kdWNlcyBuZXcgaW5jb21wYXRpYmxlIHN5bnRheCAoc3VjaCBhcyBhIG5ld1xucmVzZXJ2ZWQgd29yZCksIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIG1heSBuZWVkIHRvIHBhcnNlIHRoZVxubW9kdWxlIGRpZmZlcmVudGx5LiAgU3VjaCBkZWNpc2lvbnMgY2Fubm90IGJlIHB1c2hlZCBvZmYgdW50aWxcbnJ1bnRpbWUuXG5cbkZvciBhbnkgZ2l2ZW4gcmVsZWFzZSwgdGhlIGNvbXBpbGVyIGtub3dzIHdoaWNoIGZlYXR1cmUgbmFtZXMgaGF2ZVxuYmVlbiBkZWZpbmVkLCBhbmQgcmFpc2VzIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEgZnV0dXJlIHN0YXRlbWVudFxuY29udGFpbnMgYSBmZWF0dXJlIG5vdCBrbm93biB0byBpdC5cblxuVGhlIGRpcmVjdCBydW50aW1lIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGFueSBpbXBvcnQgc3RhdGVtZW50OlxudGhlcmUgaXMgYSBzdGFuZGFyZCBtb2R1bGUgYGBfX2Z1dHVyZV9fYGAsIGRlc2NyaWJlZCBsYXRlciwgYW5kIGl0XG53aWxsIGJlIGltcG9ydGVkIGluIHRoZSB1c3VhbCB3YXkgYXQgdGhlIHRpbWUgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXNcbmV4ZWN1dGVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcnVudGltZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlXG5lbmFibGVkIGJ5IHRoZSBmdXR1cmUgc3RhdGVtZW50LlxuXG5Ob3RlIHRoYXQgdGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBzdGF0ZW1lbnQ6XG5cbiAgIGltcG9ydCBfX2Z1dHVyZV9fIFthcyBuYW1lXVxuXG5UaGF0IGlzIG5vdCBhIGZ1dHVyZSBzdGF0ZW1lbnQ7IGl0XCdzIGFuIG9yZGluYXJ5IGltcG9ydCBzdGF0ZW1lbnQgd2l0aFxubm8gc3BlY2lhbCBzZW1hbnRpY3Mgb3Igc3ludGF4IHJlc3RyaWN0aW9ucy5cblxuQ29kZSBjb21waWxlZCBieSBhbiBgYGV4ZWNgYCBzdGF0ZW1lbnQgb3IgY2FsbHMgdG8gdGhlIGJ1aWx0LWluXG5mdW5jdGlvbnMgYGBjb21waWxlKClgYCBhbmQgYGBleGVjZmlsZSgpYGAgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZVxuYGBNYGAgY29udGFpbmluZyBhIGZ1dHVyZSBzdGF0ZW1lbnQgd2lsbCwgYnkgZGVmYXVsdCwgdXNlIHRoZSBuZXdcbnN5bnRheCBvciBzZW1hbnRpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdXR1cmUgc3RhdGVtZW50LiAgVGhpcyBjYW4sXG5zdGFydGluZyB3aXRoIFB5dGhvbiAyLjIgYmUgY29udHJvbGxlZCBieSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbmBgY29tcGlsZSgpYGAgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuICAgICAgVGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciB0aGUgX19mdXR1cmVfXyBtZWNoYW5pc20uXG4nLAorICdpbXBvcnQnOiB1J1xuVGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuSW1wb3J0IHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluIHR3byBzdGVwczogKDEpIGZpbmQgYSBtb2R1bGUsIGFuZFxuaW5pdGlhbGl6ZSBpdCBpZiBuZWNlc3Nhcnk7ICgyKSBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbFxubmFtZXNwYWNlIChvZiB0aGUgc2NvcGUgd2hlcmUgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IG9jY3VycykuIFRoZVxuc3RhdGVtZW50IGNvbWVzIGluIHR3byBmb3JtcyBkaWZmZXJpbmcgb24gd2hldGhlciBpdCB1c2VzIHRoZSBgYGZyb21gYFxua2V5d29yZC4gVGhlIGZpcnN0IGZvcm0gKHdpdGhvdXQgYGBmcm9tYGApIHJlcGVhdHMgdGhlc2Ugc3RlcHMgZm9yXG5lYWNoIGlkZW50aWZpZXIgaW4gdGhlIGxpc3QuIFRoZSBmb3JtIHdpdGggYGBmcm9tYGAgcGVyZm9ybXMgc3RlcCAoMSlcbm9uY2UsIGFuZCB0aGVuIHBlcmZvcm1zIHN0ZXAgKDIpIHJlcGVhdGVkbHkuXG5cblRvIHVuZGVyc3RhbmQgaG93IHN0ZXAgKDEpIG9jY3Vycywgb25lIG11c3QgZmlyc3QgdW5kZXJzdGFuZCBob3dcblB5dGhvbiBoYW5kbGVzIGhpZXJhcmNoaWNhbCBuYW1pbmcgb2YgbW9kdWxlcy4gVG8gaGVscCBvcmdhbml6ZVxubW9kdWxlcyBhbmQgcHJvdmlkZSBhIGhpZXJhcmNoeSBpbiBuYW1pbmcsIFB5dGhvbiBoYXMgYSBjb25jZXB0IG9mXG5wYWNrYWdlcy4gQSBwYWNrYWdlIGNhbiBjb250YWluIG90aGVyIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHdoaWxlXG5tb2R1bGVzIGNhbm5vdCBjb250YWluIG90aGVyIG1vZHVsZXMgb3IgcGFja2FnZXMuIEZyb20gYSBmaWxlIHN5c3RlbVxucGVyc3BlY3RpdmUsIHBhY2thZ2VzIGFyZSBkaXJlY3RvcmllcyBhbmQgbW9kdWxlcyBhcmUgZmlsZXMuIFRoZVxub3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgcGFja2FnZXMgaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHJlYWQsXG5hbHRob3VnaCBtaW5vciBkZXRhaWxzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGF0XG5kb2N1bWVudC5cblxuT25jZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGlzIGtub3duICh1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlXG50ZXJtICJtb2R1bGUiIHdpbGwgcmVmZXIgdG8gYm90aCBwYWNrYWdlcyBhbmQgbW9kdWxlcyksIHNlYXJjaGluZyBmb3JcbnRoZSBtb2R1bGUgb3IgcGFja2FnZSBjYW4gYmVnaW4uIFRoZSBmaXJzdCBwbGFjZSBjaGVja2VkIGlzXG5gYHN5cy5tb2R1bGVzYGAsIHRoZSBjYWNoZSBvZiBhbGwgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZFxucHJldmlvdXNseS4gSWYgdGhlIG1vZHVsZSBpcyBmb3VuZCB0aGVyZSB0aGVuIGl0IGlzIHVzZWQgaW4gc3RlcCAoMilcbm9mIGltcG9ydC5cblxuSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gdGhlIGNhY2hlLCB0aGVuIGBgc3lzLm1ldGFfcGF0aGBgIGlzXG5zZWFyY2hlZCAodGhlIHNwZWNpZmljYXRpb24gZm9yIGBgc3lzLm1ldGFfcGF0aGBgIGNhbiBiZSBmb3VuZCBpblxuKipQRVAgMzAyKiopLiBUaGUgb2JqZWN0IGlzIGEgbGlzdCBvZiAqZmluZGVyKiBvYmplY3RzIHdoaWNoIGFyZVxucXVlcmllZCBpbiBvcmRlciBhcyB0byB3aGV0aGVyIHRoZXkga25vdyBob3cgdG8gbG9hZCB0aGUgbW9kdWxlIGJ5XG5jYWxsaW5nIHRoZWlyIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIElmXG50aGUgbW9kdWxlIGhhcHBlbnMgdG8gYmUgY29udGFpbmVkIHdpdGhpbiBhIHBhY2thZ2UgKGFzIGRlbm90ZWQgYnkgdGhlXG5leGlzdGVuY2Ugb2YgYSBkb3QgaW4gdGhlIG5hbWUpLCB0aGVuIGEgc2Vjb25kIGFyZ3VtZW50IHRvXG5gYGZpbmRfbW9kdWxlKClgYCBpcyBnaXZlbiBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgX19wYXRoX19gYCBhdHRyaWJ1dGVcbmZyb20gdGhlIHBhcmVudCBwYWNrYWdlIChldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0IGRvdCBpbiB0aGUgbmFtZSBvZlxudGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCkuIElmIGEgZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgaXQgcmV0dXJuc1xuYSAqbG9hZGVyKiAoZGlzY3Vzc2VkIGxhdGVyKSBvciByZXR1cm5zIGBgTm9uZWBgLlxuXG5JZiBub25lIG9mIHRoZSBmaW5kZXJzIG9uIGBgc3lzLm1ldGFfcGF0aGBgIGFyZSBhYmxlIHRvIGZpbmQgdGhlXG5tb2R1bGUgdGhlbiBzb21lIGltcGxpY2l0bHkgZGVmaW5lZCBmaW5kZXJzIGFyZSBxdWVyaWVkLlxuSW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB2YXJ5IGluIHdoYXQgaW1wbGljaXQgbWV0YSBwYXRoIGZpbmRlcnMgYXJlXG5kZWZpbmVkLiBUaGUgb25lIHRoZXkgYWxsIGRvIGRlZmluZSwgdGhvdWdoLCBpcyBvbmUgdGhhdCBoYW5kbGVzXG5gYHN5cy5wYXRoX2hvb2tzYGAsIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCwgYW5kIGBgc3lzLnBhdGhgYC5cblxuVGhlIGltcGxpY2l0IGZpbmRlciBzZWFyY2hlcyBmb3IgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaW4gdGhlICJwYXRocyJcbnNwZWNpZmllZCBpbiBvbmUgb2YgdHdvIHBsYWNlcyAoInBhdGhzIiBkbyBub3QgaGF2ZSB0byBiZSBmaWxlIHN5c3RlbVxucGF0aHMpLiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIHN1cHBvc2VkIHRvIGJlIGNvbnRhaW5lZFxud2l0aGluIGEgcGFja2FnZSB0aGVuIHRoZSBzZWNvbmQgYXJndW1lbnQgcGFzc2VkIHRvIGBgZmluZF9tb2R1bGUoKWBgLFxuYGBfX3BhdGhfX2BgIG9uIHRoZSBwYXJlbnQgcGFja2FnZSwgaXMgdXNlZCBhcyB0aGUgc291cmNlIG9mIHBhdGhzLiBJZlxudGhlIG1vZHVsZSBpcyBub3QgY29udGFpbmVkIGluIGEgcGFja2FnZSB0aGVuIGBgc3lzLnBhdGhgYCBpcyB1c2VkIGFzXG50aGUgc291cmNlIG9mIHBhdGhzLlxuXG5PbmNlIHRoZSBzb3VyY2Ugb2YgcGF0aHMgaXMgY2hvc2VuIGl0IGlzIGl0ZXJhdGVkIG92ZXIgdG8gZmluZCBhXG5maW5kZXIgdGhhdCBjYW4gaGFuZGxlIHRoYXQgcGF0aC4gVGhlIGRpY3QgYXRcbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBjYWNoZXMgZmluZGVycyBmb3IgcGF0aHMgYW5kIGlzIGNoZWNrZWRcbmZvciBhIGZpbmRlci4gSWYgdGhlIHBhdGggZG9lcyBub3QgaGF2ZSBhIGZpbmRlciBjYWNoZWQgdGhlblxuYGBzeXMucGF0aF9ob29rc2BgIGlzIHNlYXJjaGVkIGJ5IGNhbGxpbmcgZWFjaCBvYmplY3QgaW4gdGhlIGxpc3Qgd2l0aFxuYSBzaW5nbGUgYXJndW1lbnQgb2YgdGhlIHBhdGgsIHJldHVybmluZyBhIGZpbmRlciBvciByYWlzZXNcbmBgSW1wb3J0RXJyb3JgYC4gSWYgYSBmaW5kZXIgaXMgcmV0dXJuZWQgdGhlbiBpdCBpcyBjYWNoZWQgaW5cbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBhbmQgdGhlbiB1c2VkIGZvciB0aGF0IHBhdGggZW50cnkuIElmIG5vXG5maW5kZXIgY2FuIGJlIGZvdW5kIGJ1dCB0aGUgcGF0aCBleGlzdHMgdGhlbiBhIHZhbHVlIG9mIGBgTm9uZWBgIGlzXG5zdG9yZWQgaW4gYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIHRvIHNpZ25pZnkgdGhhdCBhbiBpbXBsaWNpdCxcbmZpbGUtYmFzZWQgZmluZGVyIHRoYXQgaGFuZGxlcyBtb2R1bGVzIHN0b3JlZCBhcyBpbmRpdmlkdWFsIGZpbGVzXG5zaG91bGQgYmUgdXNlZCBmb3IgdGhhdCBwYXRoLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCB0aGVuIGEgZmluZGVyXG53aGljaCBhbHdheXMgcmV0dXJucyBgYE5vbmVgYCBpcyBwbGFjZWQgaW4gdGhlIGNhY2hlIGZvciB0aGUgcGF0aC5cblxuSWYgbm8gZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgdGhlbiBgYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLlxuT3RoZXJ3aXNlIHNvbWUgZmluZGVyIHJldHVybmVkIGEgbG9hZGVyIHdob3NlIGBgbG9hZF9tb2R1bGUoKWBgIG1ldGhvZFxuaXMgY2FsbGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkIChzZWUgKipQRVAgMzAyKiogZm9yIHRoZVxub3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBsb2FkZXJzKS4gQSBsb2FkZXIgaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllc1xudG8gcGVyZm9ybSBvbiBhIG1vZHVsZSBpdCBsb2Fkcy4gRmlyc3QsIGlmIHRoZSBtb2R1bGUgYWxyZWFkeSBleGlzdHNcbmluIGBgc3lzLm1vZHVsZXNgYCAoYSBwb3NzaWJpbGl0eSBpZiB0aGUgbG9hZGVyIGlzIGNhbGxlZCBvdXRzaWRlIG9mXG50aGUgaW1wb3J0IG1hY2hpbmVyeSkgdGhlbiBpdCBpcyB0byB1c2UgdGhhdCBtb2R1bGUgZm9yIGluaXRpYWxpemF0aW9uXG5hbmQgbm90IGEgbmV3IG1vZHVsZS4gQnV0IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3QgaW5cbmBgc3lzLm1vZHVsZXNgYCB0aGVuIGl0IGlzIHRvIGJlIGFkZGVkIHRvIHRoYXQgZGljdCBiZWZvcmVcbmluaXRpYWxpemF0aW9uIGJlZ2lucy4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBsb2FkaW5nIG9mIHRoZSBtb2R1bGVcbmFuZCBpdCB3YXMgYWRkZWQgdG8gYGBzeXMubW9kdWxlc2BgIGl0IGlzIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGljdC5cbklmIGFuIGVycm9yIG9jY3VycyBidXQgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbiBgYHN5cy5tb2R1bGVzYGAgaXQgaXNcbmxlZnQgaW4gdGhlIGRpY3QuXG5cblRoZSBsb2FkZXIgbXVzdCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuIGBgX19uYW1lX19gYCBpc1xudG8gYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIGBgX19maWxlX19gYCBpcyB0byBiZSB0aGUgInBhdGgiXG50byB0aGUgZmlsZSB1bmxlc3MgdGhlIG1vZHVsZSBpcyBidWlsdC1pbiAoYW5kIHRodXMgbGlzdGVkIGluXG5gYHN5cy5idWlsdGluX21vZHVsZV9uYW1lc2BgKSBpbiB3aGljaCBjYXNlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNldC5cbklmIHdoYXQgaXMgYmVpbmcgaW1wb3J0ZWQgaXMgYSBwYWNrYWdlIHRoZW4gYGBfX3BhdGhfX2BgIGlzIHRvIGJlIHNldFxudG8gYSBsaXN0IG9mIHBhdGhzIHRvIGJlIHNlYXJjaGVkIHdoZW4gbG9va2luZyBmb3IgbW9kdWxlcyBhbmRcbnBhY2thZ2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhY2thZ2UgYmVpbmcgaW1wb3J0ZWQuIGBgX19wYWNrYWdlX19gYFxuaXMgb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZVxubW9kdWxlIG9yIHBhY2thZ2UgKHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCBmb3IgbW9kdWxlIG5vdCBjb250YWluZWRcbmluIGEgcGFja2FnZSkuIGBgX19sb2FkZXJfX2BgIGlzIGFsc28gb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG9cbnRoZSBsb2FkZXIgb2JqZWN0IHRoYXQgaXMgbG9hZGluZyB0aGUgbW9kdWxlLlxuXG5JZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGxvYWRpbmcgdGhlbiB0aGUgbG9hZGVyIHJhaXNlc1xuYGBJbXBvcnRFcnJvcmBgIGlmIHNvbWUgb3RoZXIgZXhjZXB0aW9uIGlzIG5vdCBhbHJlYWR5IGJlaW5nXG5wcm9wYWdhdGVkLiBPdGhlcndpc2UgdGhlIGxvYWRlciByZXR1cm5zIHRoZSBtb2R1bGUgdGhhdCB3YXMgbG9hZGVkXG5hbmQgaW5pdGlhbGl6ZWQuXG5cbldoZW4gc3RlcCAoMSkgZmluaXNoZXMgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbiwgc3RlcCAoMikgY2FuXG5iZWdpbi5cblxuVGhlIGZpcnN0IGZvcm0gb2YgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgYmluZHMgdGhlIG1vZHVsZSBuYW1lIGluIHRoZVxubG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBtb2R1bGUgb2JqZWN0LCBhbmQgdGhlbiBnb2VzIG9uIHRvIGltcG9ydCB0aGVcbm5leHQgaWRlbnRpZmllciwgaWYgYW55LiAgSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGBgYXNgYCxcbnRoZSBuYW1lIGZvbGxvd2luZyBgYGFzYGAgaXMgdXNlZCBhcyB0aGUgbG9jYWwgbmFtZSBmb3IgdGhlIG1vZHVsZS5cblxuVGhlIGBgZnJvbWBgIGZvcm0gZG9lcyBub3QgYmluZCB0aGUgbW9kdWxlIG5hbWU6IGl0IGdvZXMgdGhyb3VnaCB0aGVcbmxpc3Qgb2YgaWRlbnRpZmllcnMsIGxvb2tzIGVhY2ggb25lIG9mIHRoZW0gdXAgaW4gdGhlIG1vZHVsZSBmb3VuZCBpblxuc3RlcCAoMSksIGFuZCBiaW5kcyB0aGUgbmFtZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBvYmplY3QgdGh1c1xuZm91bmQuICBBcyB3aXRoIHRoZSBmaXJzdCBmb3JtIG9mIGBgaW1wb3J0YGAsIGFuIGFsdGVybmF0ZSBsb2NhbCBuYW1lXG5jYW4gYmUgc3VwcGxpZWQgYnkgc3BlY2lmeWluZyAiYGBhc2BgIGxvY2FsbmFtZSIuICBJZiBhIG5hbWUgaXMgbm90XG5mb3VuZCwgYGBJbXBvcnRFcnJvcmBgIGlzIHJhaXNlZC4gIElmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzXG5yZXBsYWNlZCBieSBhIHN0YXIgKGBgXCcqXCdgYCksIGFsbCBwdWJsaWMgbmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlXG5hcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBvZiB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQuLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgYGBfX2FsbF9fYGA7IGlmIGRlZmluZWQsIGl0XG5tdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aGljaCBhcmUgbmFtZXMgZGVmaW5lZCBvciBpbXBvcnRlZCBieVxudGhhdCBtb2R1bGUuICBUaGUgbmFtZXMgZ2l2ZW4gaW4gYGBfX2FsbF9fYGAgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpY1xuYW5kIGFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmIGBgX19hbGxfX2BgIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mXG5wdWJsaWMgbmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoXG5kbyBub3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoYGBcJ19cJ2BgKS4gYGBfX2FsbF9fYGBcbnNob3VsZCBjb250YWluIHRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWRcbmFjY2lkZW50YWxseSBleHBvcnRpbmcgaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhc1xubGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmUgaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgYGBmcm9tYGAgZm9ybSB3aXRoIGBgKmBgIG1heSBvbmx5IG9jY3VyIGluIGEgbW9kdWxlIHNjb3BlLiAgSWYgdGhlXG53aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhIGZ1bmN0aW9uXG5hbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZSB2YXJpYWJsZXMsXG50aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuV2hlbiBzcGVjaWZ5aW5nIHdoYXQgbW9kdWxlIHRvIGltcG9ydCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGVcbmFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSBvciBwYWNrYWdlIGlzIGNvbnRhaW5lZFxud2l0aGluIGFub3RoZXIgcGFja2FnZSBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVsYXRpdmUgaW1wb3J0IHdpdGhpblxudGhlIHNhbWUgdG9wIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gbWVudGlvbiB0aGUgcGFja2FnZSBuYW1lLiBCeVxudXNpbmcgbGVhZGluZyBkb3RzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIG9yIHBhY2thZ2UgYWZ0ZXIgYGBmcm9tYGBcbnlvdSBjYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG5gYGZyb20gLiBpbXBvcnQgbW9kYGAgZnJvbSBhIG1vZHVsZSBpbiB0aGUgYGBwa2dgYCBwYWNrYWdlIHRoZW4geW91XG53aWxsIGVuZCB1cCBpbXBvcnRpbmcgYGBwa2cubW9kYGAuIElmIHlvdSBleGVjdXRlIGBgZnJvbSAuLnN1YnBrZzJcbmltcHJ0IG1vZGBgIGZyb20gd2l0aGluIGBgcGtnLnN1YnBrZzFgYCB5b3Ugd2lsbCBpbXBvcnRcbmBgcGtnLnN1YnBrZzIubW9kYGAuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzXG5jb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG5gYGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKClgYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0XG5kZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZVxuc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob25cbnRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2ZcbnRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVcbmZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAyLjYgYXJlIGBgdW5pY29kZV9saXRlcmFsc2BgLFxuYGBwcmludF9mdW5jdGlvbmBgLCBgYGFic29sdXRlX2ltcG9ydGBgLCBgYGRpdmlzaW9uYGAsIGBgZ2VuZXJhdG9yc2BgLFxuYGBuZXN0ZWRfc2NvcGVzYGAgYW5kIGBgd2l0aF9zdGF0ZW1lbnRgYC4gIGBgZ2VuZXJhdG9yc2BgLFxuYGB3aXRoX3N0YXRlbWVudGBgLCBgYG5lc3RlZF9zY29wZXNgYCBhcmUgcmVkdW5kYW50IGluIFB5dGhvbiB2ZXJzaW9uXG4yLjYgYW5kIGFib3ZlIGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGVuYWJsZWQuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHNwZWNpYWxseSBhdCBjb21waWxlXG50aW1lOiBDaGFuZ2VzIHRvIHRoZSBzZW1hbnRpY3Mgb2YgY29yZSBjb25zdHJ1Y3RzIGFyZSBvZnRlblxuaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGluZyBkaWZmZXJlbnQgY29kZS4gIEl0IG1heSBldmVuIGJlIHRoZSBjYXNlXG50aGF0IGEgbmV3IGZlYXR1cmUgaW50cm9kdWNlcyBuZXcgaW5jb21wYXRpYmxlIHN5bnRheCAoc3VjaCBhcyBhIG5ld1xucmVzZXJ2ZWQgd29yZCksIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIG1heSBuZWVkIHRvIHBhcnNlIHRoZVxubW9kdWxlIGRpZmZlcmVudGx5LiAgU3VjaCBkZWNpc2lvbnMgY2Fubm90IGJlIHB1c2hlZCBvZmYgdW50aWxcbnJ1bnRpbWUuXG5cbkZvciBhbnkgZ2l2ZW4gcmVsZWFzZSwgdGhlIGNvbXBpbGVyIGtub3dzIHdoaWNoIGZlYXR1cmUgbmFtZXMgaGF2ZVxuYmVlbiBkZWZpbmVkLCBhbmQgcmFpc2VzIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEgZnV0dXJlIHN0YXRlbWVudFxuY29udGFpbnMgYSBmZWF0dXJlIG5vdCBrbm93biB0byBpdC5cblxuVGhlIGRpcmVjdCBydW50aW1lIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGFueSBpbXBvcnQgc3RhdGVtZW50OlxudGhlcmUgaXMgYSBzdGFuZGFyZCBtb2R1bGUgYGBfX2Z1dHVyZV9fYGAsIGRlc2NyaWJlZCBsYXRlciwgYW5kIGl0XG53aWxsIGJlIGltcG9ydGVkIGluIHRoZSB1c3VhbCB3YXkgYXQgdGhlIHRpbWUgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXNcbmV4ZWN1dGVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcnVudGltZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlXG5lbmFibGVkIGJ5IHRoZSBmdXR1cmUgc3RhdGVtZW50LlxuXG5Ob3RlIHRoYXQgdGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBzdGF0ZW1lbnQ6XG5cbiAgIGltcG9ydCBfX2Z1dHVyZV9fIFthcyBuYW1lXVxuXG5UaGF0IGlzIG5vdCBhIGZ1dHVyZSBzdGF0ZW1lbnQ7IGl0XCdzIGFuIG9yZGluYXJ5IGltcG9ydCBzdGF0ZW1lbnQgd2l0aFxubm8gc3BlY2lhbCBzZW1hbnRpY3Mgb3Igc3ludGF4IHJlc3RyaWN0aW9ucy5cblxuQ29kZSBjb21waWxlZCBieSBhbiBgYGV4ZWNgYCBzdGF0ZW1lbnQgb3IgY2FsbHMgdG8gdGhlIGJ1aWx0LWluXG5mdW5jdGlvbnMgYGBjb21waWxlKClgYCBhbmQgYGBleGVjZmlsZSgpYGAgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZVxuYGBNYGAgY29udGFpbmluZyBhIGZ1dHVyZSBzdGF0ZW1lbnQgd2lsbCwgYnkgZGVmYXVsdCwgdXNlIHRoZSBuZXdcbnN5bnRheCBvciBzZW1hbnRpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdXR1cmUgc3RhdGVtZW50LiAgVGhpcyBjYW4sXG5zdGFydGluZyB3aXRoIFB5dGhvbiAyLjIgYmUgY29udHJvbGxlZCBieSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbmBgY29tcGlsZSgpYGAgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuICAgICAgVGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciB0aGUgX19mdXR1cmVfXyBtZWNoYW5pc20uXG4nLAogICdpbic6IHUnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgYGBhIDwgYiA8IGNgYCBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICI8PiIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogYGBUcnVlYGAgb3IgYGBGYWxzZWBgLlxuXG5Db21wYXJpc29ucyBjYW4gYmUgY2hhaW5lZCBhcmJpdHJhcmlseSwgZS5nLiwgYGB4IDwgeSA8PSB6YGAgaXNcbmVxdWl2YWxlbnQgdG8gYGB4IDwgeSBhbmQgeSA8PSB6YGAsIGV4Y2VwdCB0aGF0IGBgeWBgIGlzIGV2YWx1YXRlZFxub25seSBvbmNlIChidXQgaW4gYm90aCBjYXNlcyBgYHpgYCBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuIGBgeCA8XG55YGAgaXMgZm91bmQgdG8gYmUgZmFsc2UpLlxuXG5Gb3JtYWxseSwgaWYgKmEqLCAqYiosICpjKiwgLi4uLCAqeSosICp6KiBhcmUgZXhwcmVzc2lvbnMgYW5kICpvcDEqLFxuKm9wMiosIC4uLiwgKm9wTiogYXJlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB0aGVuIGBgYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHpgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSBvcDEgYiBhbmQgYiBvcDIgYyBhbmQgLi4uIHkgb3BOIHpgYCxcbmV4Y2VwdCB0aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgYGBhIG9wMSBiIG9wMiBjYGAgZG9lc25cJ3QgaW1wbHkgYW55IGtpbmQgb2YgY29tcGFyaXNvblxuYmV0d2VlbiAqYSogYW5kICpjKiwgc28gdGhhdCwgZS5nLiwgYGB4IDwgeSA+IHpgYCBpcyBwZXJmZWN0bHkgbGVnYWxcbih0aG91Z2ggcGVyaGFwcyBub3QgcHJldHR5KS5cblxuVGhlIGZvcm1zIGBgPD5gYCBhbmQgYGAhPWBgIGFyZSBlcXVpdmFsZW50OyBmb3IgY29uc2lzdGVuY3kgd2l0aCBDLFxuYGAhPWBgIGlzIHByZWZlcnJlZDsgd2hlcmUgYGAhPWBgIGlzIG1lbnRpb25lZCBiZWxvdyBgYDw+YGAgaXMgYWxzb1xuYWNjZXB0ZWQuICBUaGUgYGA8PmBgIHNwZWxsaW5nIGlzIGNvbnNpZGVyZWQgb2Jzb2xlc2NlbnQuXG5cblRoZSBvcGVyYXRvcnMgYGA8YGAsIGBgPmBgLCBgYD09YGAsIGBgPj1gYCwgYGA8PWBgLCBhbmQgYGAhPWBgIGNvbXBhcmVcbnRoZSB2YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuXG5JZiBib3RoIGFyZSBudW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSxcbm9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzICphbHdheXMqIGNvbXBhcmUgdW5lcXVhbCwgYW5kIGFyZSBvcmRlcmVkXG5jb25zaXN0ZW50bHkgYnV0IGFyYml0cmFyaWx5LiBZb3UgY2FuIGNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZlxub2JqZWN0cyBvZiBub24tYnVpbHQtaW4gdHlwZXMgYnkgZGVmaW5pbmcgYSBgYF9fY21wX19gYCBtZXRob2Qgb3IgcmljaFxuY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgYGBfX2d0X19gYCwgZGVzY3JpYmVkIGluIHNlY3Rpb24gKlNwZWNpYWxcbm1ldGhvZCBuYW1lcyouXG5cbihUaGlzIHVudXN1YWwgZGVmaW5pdGlvbiBvZiBjb21wYXJpc29uIHdhcyB1c2VkIHRvIHNpbXBsaWZ5IHRoZVxuZGVmaW5pdGlvbiBvZiBvcGVyYXRpb25zIGxpa2Ugc29ydGluZyBhbmQgdGhlIGBgaW5gYCBhbmQgYGBub3QgaW5gYFxub3BlcmF0b3JzLiBJbiB0aGUgZnV0dXJlLCB0aGUgY29tcGFyaXNvbiBydWxlcyBmb3Igb2JqZWN0cyBvZlxuZGlmZmVyZW50IHR5cGVzIGFyZSBsaWtlbHkgdG8gY2hhbmdlLilcblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZGVwZW5kcyBvbiB0aGUgdHlwZTpcblxuKiBOdW1iZXJzIGFyZSBjb21wYXJlZCBhcml0aG1ldGljYWxseS5cblxuKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpYyBlcXVpdmFsZW50c1xuICAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBvcmQoKWBgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLlxuICBVbmljb2RlIGFuZCA4LWJpdCBzdHJpbmdzIGFyZSBmdWxseSBpbnRlcm9wZXJhYmxlIGluIHRoaXMgYmVoYXZpb3IuXG4gIFs0XVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgYGBjbXAoWzEsMix4XSwgWzEsMix5XSlgYCByZXR1cm5zXG4gIHRoZSBzYW1lIGFzIGBgY21wKHgseSlgYC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3RcbiAgZXhpc3QsIHRoZSBzaG9ydGVyIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCBgYFsxLDJdIDxcbiAgWzEsMiwzXWBgKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZWlyIHNvcnRlZFxuICAoa2V5LCB2YWx1ZSkgbGlzdHMgY29tcGFyZSBlcXVhbC4gWzVdIE91dGNvbWVzIG90aGVyIHRoYW4gZXF1YWxpdHlcbiAgYXJlIHJlc29sdmVkIGNvbnNpc3RlbnRseSwgYnV0IGFyZSBub3Qgb3RoZXJ3aXNlIGRlZmluZWQuIFs2XVxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlXG4gIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyXG4gIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseVxuICB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cblRoZSBvcGVyYXRvcnMgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIHRlc3QgZm9yIGNvbGxlY3Rpb24gbWVtYmVyc2hpcC5cbmBgeCBpbiBzYGAgZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mIHRoZSBjb2xsZWN0aW9uICpzKixcbmFuZCBmYWxzZSBvdGhlcndpc2UuICBgYHggbm90IGluIHNgYCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiBgYHggaW5cbnNgYC4gVGhlIGNvbGxlY3Rpb24gbWVtYmVyc2hpcCB0ZXN0IGhhcyB0cmFkaXRpb25hbGx5IGJlZW4gYm91bmQgdG9cbnNlcXVlbmNlczsgYW4gb2JqZWN0IGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGlvbiBpZiB0aGUgY29sbGVjdGlvbiBpc1xuYSBzZXF1ZW5jZSBhbmQgY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byB0aGF0IG9iamVjdC4gIEhvd2V2ZXIsIGl0XG5tYWtlIHNlbnNlIGZvciBtYW55IG90aGVyIG9iamVjdCB0eXBlcyB0byBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHNcbndpdGhvdXQgYmVpbmcgYSBzZXF1ZW5jZS4gIEluIHBhcnRpY3VsYXIsIGRpY3Rpb25hcmllcyAoZm9yIGtleXMpIGFuZFxuc2V0cyBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdGluZy5cblxuRm9yIHRoZSBsaXN0IGFuZCB0dXBsZSB0eXBlcywgYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlXG5leGlzdHMgYW4gaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgIGlzIHRydWUuXG5cbkZvciB0aGUgVW5pY29kZSBhbmQgc3RyaW5nIHR5cGVzLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWZcbip4KiBpcyBhIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgYGB5LmZpbmQoeCkgIT0gLTFgYC5cbk5vdGUsICp4KiBhbmQgKnkqIG5lZWQgbm90IGJlIHRoZSBzYW1lIHR5cGU7IGNvbnNlcXVlbnRseSwgYGB1XCdhYlwnIGluXG5cJ2FiY1wnYGAgd2lsbCByZXR1cm4gYGBUcnVlYGAuIEVtcHR5IHN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvXG5iZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXIgc3RyaW5nLCBzbyBgYCIiIGluICJhYmMiYGAgd2lsbCByZXR1cm5cbmBgVHJ1ZWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCAqeCogd2FzIHJlcXVpcmVkIHRvIGJlIGEgc3RyaW5nIG9mXG5sZW5ndGggYGAxYGAuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlIGBgX19jb250YWluc19fKClgYCBtZXRob2QsXG5gYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgYGB5Ll9fY29udGFpbnNfXyh4KWBgIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCBidXQgZG9cbmRlZmluZSBgYF9faXRlcl9fKClgYCwgYGB4IGluIHlgYCBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgYGB6YGAgd2l0aCBgYHhcbj09IHpgYCBpcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBgYHlgYC4gIElmIGFuIGV4Y2VwdGlvbiBpc1xucmFpc2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbmBgX19nZXRpdGVtX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgYGB4ID09IHlbaV1gYCwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSBgYEluZGV4RXJyb3JgYCBleGNlcHRpb24uIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgYGBub3QgaW5gYCBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuYGBpbmBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaXNgYCBhbmQgYGBpcyBub3RgYCB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6IGBgeCBpc1xueWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gIGBgeCBpc1xubm90IHlgYCB5aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs3XVxuJywKICAnaW50ZWdlcnMnOiB1J1xuSW50ZWdlciBhbmQgbG9uZyBpbnRlZ2VyIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuSW50ZWdlciBhbmQgbG9uZyBpbnRlZ2VyIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZ1xubGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgbG9uZ2ludGVnZXIgICAgOjo9IGludGVnZXIgKCJsIiB8ICJMIilcbiAgIGludGVnZXIgICAgICAgIDo6PSBkZWNpbWFsaW50ZWdlciB8IG9jdGludGVnZXIgfCBoZXhpbnRlZ2VyIHwgYmluaW50ZWdlclxuICAgZGVjaW1hbGludGVnZXIgOjo9IG5vbnplcm9kaWdpdCBkaWdpdCogfCAiMCJcbiAgIG9jdGludGVnZXIgICAgIDo6PSAiMCIgKCJvIiB8ICJPIikgb2N0ZGlnaXQrIHwgIjAiIG9jdGRpZ2l0K1xuICAgaGV4aW50ZWdlciAgICAgOjo9ICIwIiAoIngiIHwgIlgiKSBoZXhkaWdpdCtcbiAgIGJpbmludGVnZXIgICAgIDo6PSAiMCIgKCJiIiB8ICJCIikgYmluZGlnaXQrXG4gICBub256ZXJvZGlnaXQgICA6Oj0gIjEiLi4uIjkiXG4gICBvY3RkaWdpdCAgICAgICA6Oj0gIjAiLi4uIjciXG4gICBiaW5kaWdpdCAgICAgICA6Oj0gIjAiIHwgIjEiXG4gICBoZXhkaWdpdCAgICAgICA6Oj0gZGlnaXQgfCAiYSIuLi4iZiIgfCAiQSIuLi4iRiJcblxuQWx0aG91Z2ggYm90aCBsb3dlciBjYXNlIGBgXCdsXCdgYCBhbmQgdXBwZXIgY2FzZSBgYFwnTFwnYGAgYXJlIGFsbG93ZWQgYXNcbnN1ZmZpeCBmb3IgbG9uZyBpbnRlZ2VycywgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gYWx3YXlzIHVzZVxuYGBcJ0xcJ2BgLCBzaW5jZSB0aGUgbGV0dGVyIGBgXCdsXCdgYCBsb29rcyB0b28gbXVjaCBsaWtlIHRoZSBkaWdpdFxuYGBcJzFcJ2BgLlxuXG5QbGFpbiBpbnRlZ2VyIGxpdGVyYWxzIHRoYXQgYXJlIGFib3ZlIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgcGxhaW5cbmludGVnZXIgKGUuZy4sIDIxNDc0ODM2NDcgd2hlbiB1c2luZyAzMi1iaXQgYXJpdGhtZXRpYykgYXJlIGFjY2VwdGVkXG5hcyBpZiB0aGV5IHdlcmUgbG9uZyBpbnRlZ2VycyBpbnN0ZWFkLiBbMV0gIFRoZXJlIGlzIG5vIGxpbWl0IGZvciBsb25nXG5pbnRlZ2VyIGxpdGVyYWxzIGFwYXJ0IGZyb20gd2hhdCBjYW4gYmUgc3RvcmVkIGluIGF2YWlsYWJsZSBtZW1vcnkuXG5cblNvbWUgZXhhbXBsZXMgb2YgcGxhaW4gaW50ZWdlciBsaXRlcmFscyAoZmlyc3Qgcm93KSBhbmQgbG9uZyBpbnRlZ2VyXG5saXRlcmFscyAoc2Vjb25kIGFuZCB0aGlyZCByb3dzKTpcblxuICAgNyAgICAgMjE0NzQ4MzY0NyAgICAgICAgICAgICAgICAgICAgICAgIDAxNzdcbiAgIDNMICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2TCAgICAwMzc3TCAgIDB4MTAwMDAwMDAwTFxuICAgICAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgICAgICAgICAgMHhkZWFkYmVlZlxuJywKICAnbGFtYmRhJzogdSdcbkxhbWJkYXNcbioqKioqKipcblxuICAgbGFtYmRhX2Zvcm0gICAgIDo6PSAibGFtYmRhIiBbcGFyYW1ldGVyX2xpc3RdOiBleHByZXNzaW9uXG4gICBvbGRfbGFtYmRhX2Zvcm0gOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IG9sZF9leHByZXNzaW9uXG5cbkxhbWJkYSBmb3JtcyAobGFtYmRhIGV4cHJlc3Npb25zKSBoYXZlIHRoZSBzYW1lIHN5bnRhY3RpYyBwb3NpdGlvbiBhc1xuZXhwcmVzc2lvbnMuICBUaGV5IGFyZSBhIHNob3J0aGFuZCB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9uczsgdGhlXG5leHByZXNzaW9uIGBgbGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbmBgIHlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC5cblRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvbiBvYmplY3QgZGVmaW5lZCB3aXRoXG5cbiAgIGRlZiBuYW1lKGFyZ3VtZW50cyk6XG4gICAgICAgcmV0dXJuIGV4cHJlc3Npb25cblxuU2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgdGhlIHN5bnRheCBvZiBwYXJhbWV0ZXIgbGlzdHMuXG5Ob3RlIHRoYXQgZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBsYW1iZGEgZm9ybXMgY2Fubm90IGNvbnRhaW5cbnN0YXRlbWVudHMuXG4nLApAQCAtNjAsMjQgKzYwLDI0IEBACiAgJ3JldHVybic6IHUnXG5UaGUgYGByZXR1cm5gYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICByZXR1cm5fc3RtdCA6Oj0gInJldHVybiIgW2V4cHJlc3Npb25fbGlzdF1cblxuYGByZXR1cm5gYCBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGZ1bmN0aW9uXG5kZWZpbml0aW9uLCBub3Qgd2l0aGluIGEgbmVzdGVkIGNsYXNzIGRlZmluaXRpb24uXG5cbklmIGFuIGV4cHJlc3Npb24gbGlzdCBpcyBwcmVzZW50LCBpdCBpcyBldmFsdWF0ZWQsIGVsc2UgYGBOb25lYGAgaXNcbnN1YnN0aXR1dGVkLlxuXG5gYHJldHVybmBgIGxlYXZlcyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsIHdpdGggdGhlIGV4cHJlc3Npb24gbGlzdFxuKG9yIGBgTm9uZWBgKSBhcyByZXR1cm4gdmFsdWUuXG5cbldoZW4gYGByZXR1cm5gYCBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIGFcbmBgZmluYWxseWBgIGNsYXVzZSwgdGhhdCBgYGZpbmFsbHlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxubGVhdmluZyB0aGUgZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgYGByZXR1cm5gYCBzdGF0ZW1lbnQgaXMgbm90IGFsbG93ZWQgdG9cbmluY2x1ZGUgYW4gKipleHByZXNzaW9uX2xpc3QqKi4gIEluIHRoYXQgY29udGV4dCwgYSBiYXJlIGBgcmV0dXJuYGBcbmluZGljYXRlcyB0aGF0IHRoZSBnZW5lcmF0b3IgaXMgZG9uZSBhbmQgd2lsbCBjYXVzZSBgYFN0b3BJdGVyYXRpb25gYFxudG8gYmUgcmFpc2VkLlxuJywKICAnc2VxdWVuY2UtbWV0aG9kcyc6IHUnXG5BZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGVtdWxhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBvcHRpb25hbCBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGZ1cnRoZXIgZW11bGF0ZVxuc2VxdWVuY2Ugb2JqZWN0cy4gIEltbXV0YWJsZSBzZXF1ZW5jZXMgbWV0aG9kcyBzaG91bGQgYXQgbW9zdCBvbmx5XG5kZWZpbmUgYGBfX2dldHNsaWNlX18oKWBgOyBtdXRhYmxlIHNlcXVlbmNlcyBtaWdodCBkZWZpbmUgYWxsIHRocmVlXG5tZXRob2RzLlxuXG5vYmplY3QuX19nZXRzbGljZV9fKHNlbGYsIGksIGopXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjA6IFN1cHBvcnQgc2xpY2Ugb2JqZWN0cyBhcyBwYXJhbWV0ZXJzXG4gICB0byB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiAoSG93ZXZlciwgYnVpbHQtaW4gdHlwZXMgaW5cbiAgIENQeXRob24gY3VycmVudGx5IHN0aWxsIGltcGxlbWVudCBgYF9fZ2V0c2xpY2VfXygpYGAuICBUaGVyZWZvcmUsXG4gICB5b3UgaGF2ZSB0byBvdmVycmlkZSBpdCBpbiBkZXJpdmVkIGNsYXNzZXMgd2hlbiBpbXBsZW1lbnRpbmdcbiAgIHNsaWNpbmcuKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2k6al1gYC4gVGhlIHJldHVybmVkXG4gICBvYmplY3Qgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnNlbGYqLiAgTm90ZSB0aGF0IG1pc3NpbmcgKmkqXG4gICBvciAqaiogaW4gdGhlIHNsaWNlIGV4cHJlc3Npb24gYXJlIHJlcGxhY2VkIGJ5IHplcm8gb3JcbiAgIGBgc3lzLm1heGludGBgLCByZXNwZWN0aXZlbHkuICBJZiBuZWdhdGl2ZSBpbmRleGVzIGFyZSB1c2VkIGluIHRoZVxuICAgc2xpY2UsIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIGlzIGFkZGVkIHRvIHRoYXQgaW5kZXguIElmIHRoZVxuICAgaW5zdGFuY2UgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgYF9fbGVuX18oKWBgIG1ldGhvZCwgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBpcyByYWlzZWQuIE5vIGd1YXJhbnRlZSBpcyBtYWRlIHRoYXQgaW5kZXhlc1xuICAgYWRqdXN0ZWQgdGhpcyB3YXkgYXJlIG5vdCBzdGlsbCBuZWdhdGl2ZS4gIEluZGV4ZXMgd2hpY2ggYXJlXG4gICBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgYXJlIG5vdCBtb2RpZmllZC4gSWYgbm9cbiAgIGBgX19nZXRzbGljZV9fKClgYCBpcyBmb3VuZCwgYSBzbGljZSBvYmplY3QgaXMgY3JlYXRlZCBpbnN0ZWFkLCBhbmRcbiAgIHBhc3NlZCB0byBgYF9fZ2V0aXRlbV9fKClgYCBpbnN0ZWFkLlxuXG5vYmplY3QuX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHNlcXVlbmNlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2k6al1gYC4gU2FtZSBub3RlcyBmb3IgKmkqXG4gICBhbmQgKmoqIGFzIGZvciBgYF9fZ2V0c2xpY2VfXygpYGAuXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIElmIG5vIGBgX19zZXRzbGljZV9fKClgYCBpcyBmb3VuZCwgb3JcbiAgIGZvciBleHRlbmRlZCBzbGljaW5nIG9mIHRoZSBmb3JtIGBgc2VsZltpOmo6a11gYCwgYSBzbGljZSBvYmplY3QgaXNcbiAgIGNyZWF0ZWQsIGFuZCBwYXNzZWQgdG8gYGBfX3NldGl0ZW1fXygpYGAsIGluc3RlYWQgb2ZcbiAgIGBgX19zZXRzbGljZV9fKClgYCBiZWluZyBjYWxsZWQuXG5cbm9iamVjdC5fX2RlbHNsaWNlX18oc2VsZiwgaSwgailcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZbaTpqXWBgLiBTYW1lIG5vdGVzIGZvciAqaSpcbiAgIGFuZCAqaiogYXMgZm9yIGBgX19nZXRzbGljZV9fKClgYC4gVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSWYgbm9cbiAgIGBgX19kZWxzbGljZV9fKClgYCBpcyBmb3VuZCwgb3IgZm9yIGV4dGVuZGVkIHNsaWNpbmcgb2YgdGhlIGZvcm1cbiAgIGBgc2VsZltpOmo6a11gYCwgYSBzbGljZSBvYmplY3QgaXMgY3JlYXRlZCwgYW5kIHBhc3NlZCB0b1xuICAgYGBfX2RlbGl0ZW1fXygpYGAsIGluc3RlYWQgb2YgYGBfX2RlbHNsaWNlX18oKWBgIGJlaW5nIGNhbGxlZC5cblxuTm90aWNlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgb25seSBpbnZva2VkIHdoZW4gYSBzaW5nbGUgc2xpY2Ugd2l0aCBhXG5zaW5nbGUgY29sb24gaXMgdXNlZCwgYW5kIHRoZSBzbGljZSBtZXRob2QgaXMgYXZhaWxhYmxlLiAgRm9yIHNsaWNlXG5vcGVyYXRpb25zIGludm9sdmluZyBleHRlbmRlZCBzbGljZSBub3RhdGlvbiwgb3IgaW4gYWJzZW5jZSBvZiB0aGVcbnNsaWNlIG1ldGhvZHMsIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCBvclxuYGBfX2RlbGl0ZW1fXygpYGAgaXMgY2FsbGVkIHdpdGggYSBzbGljZSBvYmplY3QgYXMgYXJndW1lbnQuXG5cblRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZSBob3cgdG8gbWFrZSB5b3VyIHByb2dyYW0gb3IgbW9kdWxlXG5jb21wYXRpYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24gKGFzc3VtaW5nIHRoYXQgbWV0aG9kc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgIGFuZCBgYF9fZGVsaXRlbV9fKClgYCBzdXBwb3J0XG5zbGljZSBvYmplY3RzIGFzIGFyZ3VtZW50cyk6XG5cbiAgIGNsYXNzIE15Q2xhc3M6XG4gICAgICAgLi4uXG4gICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KTpcbiAgICAgICAgICAgLi4uXG4gICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6XG4gICAgICAgICAgIC4uLlxuICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6XG4gICAgICAgICAgIC4uLlxuXG4gICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCAwKTpcbiAgICAgICAgICAgIyBUaGV5IHdvblwndCBiZSBkZWZpbmVkIGlmIHZlcnNpb24gaXMgYXQgbGVhc3QgMi4wIGZpbmFsXG5cbiAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKTpcbiAgICAgICAgICAgICAgIHJldHVybiBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XVxuICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHNlcSk6XG4gICAgICAgICAgICAgICBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XSA9IHNlcVxuICAgICAgICAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOlxuICAgICAgICAgICAgICAgZGVsIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdXG4gICAgICAgLi4uXG5cbk5vdGUgdGhlIGNhbGxzIHRvIGBgbWF4KClgYDsgdGhlc2UgYXJlIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIHRoZVxuaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5kaWNlcyBiZWZvcmUgdGhlIGBgX18qc2xpY2VfXygpYGAgbWV0aG9kcyBhcmVcbmNhbGxlZC4gIFdoZW4gbmVnYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCwgdGhlIGBgX18qaXRlbV9fKClgYCBtZXRob2RzXG5yZWNlaXZlIHRoZW0gYXMgcHJvdmlkZWQsIGJ1dCB0aGUgYGBfXypzbGljZV9fKClgYCBtZXRob2RzIGdldCBhXG4iY29va2VkIiBmb3JtIG9mIHRoZSBpbmRleCB2YWx1ZXMuICBGb3IgZWFjaCBuZWdhdGl2ZSBpbmRleCB2YWx1ZSwgdGhlXG5sZW5ndGggb2YgdGhlIHNlcXVlbmNlIGlzIGFkZGVkIHRvIHRoZSBpbmRleCBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kXG4od2hpY2ggbWF5IHN0aWxsIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGluZGV4KTsgdGhpcyBpcyB0aGUgY3VzdG9tYXJ5XG5oYW5kbGluZyBvZiBuZWdhdGl2ZSBpbmRleGVzIGJ5IHRoZSBidWlsdC1pbiBzZXF1ZW5jZSB0eXBlcywgYW5kIHRoZVxuYGBfXyppdGVtX18oKWBgIG1ldGhvZHMgYXJlIGV4cGVjdGVkIHRvIGRvIHRoaXMgYXMgd2VsbC4gIEhvd2V2ZXIsXG5zaW5jZSB0aGV5IHNob3VsZCBhbHJlYWR5IGJlIGRvaW5nIHRoYXQsIG5lZ2F0aXZlIGluZGV4ZXMgY2Fubm90IGJlXG5wYXNzZWQgaW47IHRoZXkgbXVzdCBiZSBjb25zdHJhaW5lZCB0byB0aGUgYm91bmRzIG9mIHRoZSBzZXF1ZW5jZVxuYmVmb3JlIGJlaW5nIHBhc3NlZCB0byB0aGUgYGBfXyppdGVtX18oKWBgIG1ldGhvZHMuIENhbGxpbmcgYGBtYXgoMCxcbmkpYGAgY29udmVuaWVudGx5IHJldHVybnMgdGhlIHByb3BlciB2YWx1ZS5cbicsCiAgJ3NlcXVlbmNlLXR5cGVzJzogdSJcbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAoRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbWV0aG9kXG5gYF9fZ2V0c2xpY2VfXygpYGAgKHNlZSBiZWxvdykgY2FuIGFsc28gYmUgZGVmaW5lZCB0byBoYW5kbGUgc2ltcGxlLFxuYnV0IG5vdCBleHRlbmRlZCBzbGljZXMuKSBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBoYXNfa2V5KClgYCxcbmBgZ2V0KClgYCwgYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgaXRlcmtleXMoKWBgLFxuYGBpdGVydmFsdWVzKClgYCwgYGBpdGVyaXRlbXMoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsXG5gYGNvcHkoKWBgLCBhbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvbidzXG5zdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBVc2VyRGljdGBgIG1vZHVsZSBwcm92aWRlcyBhXG5gYERpY3RNaXhpbmBgIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsIGBgX19kZWxpdGVtX18oKWBgLCBhbmRcbmBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlIG1ldGhvZHMgYGBhcHBlbmQoKWBgLFxuYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsIGBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLFxuYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLCBsaWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0XG5vYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZ1xuY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nIHJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZVxubWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCwgYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsXG5gYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGAgZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3RcbmRlZmluZSBgYF9fY29lcmNlX18oKWBgIG9yIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgYmUgZXF1aXZhbGVudCBvZiBgYGhhc19rZXkoKWBgO1xuZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBpdGVya2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuJ3QgZGVmaW5lIGEgYGBfX25vbnplcm9fXygpYGAgbWV0aG9kIGFuZCB3aG9zZVxuICAgYGBfX2xlbl9fKClgYCBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBpdGVya2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKLSAnc2hpZnRpbmcnOiB1J1xuU2hpZnRpbmcgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgc2hpZnRpbmcgb3BlcmF0aW9ucyBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGFyaXRobWV0aWNcbm9wZXJhdGlvbnM6XG5cbiAgIHNoaWZ0X2V4cHIgOjo9IGFfZXhwciB8IHNoaWZ0X2V4cHIgKCAiPDwiIHwgIj4+IiApIGFfZXhwclxuXG5UaGVzZSBvcGVyYXRvcnMgYWNjZXB0IHBsYWluIG9yIGxvbmcgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhlXG5hcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGRpdmlzaW9uIGJ5IGBgcG93KDIsIG4pYGAuICBBXG5sZWZ0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCBgYHBvdygyLFxubilgYC4gIE5lZ2F0aXZlIHNoaWZ0IGNvdW50cyByYWlzZSBhIGBgVmFsdWVFcnJvcmBgIGV4Y2VwdGlvbi5cbicsCisgJ3NoaWZ0aW5nJzogdSdcblNoaWZ0aW5nIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIHNoaWZ0aW5nIG9wZXJhdGlvbnMgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBhcml0aG1ldGljXG5vcGVyYXRpb25zOlxuXG4gICBzaGlmdF9leHByIDo6PSBhX2V4cHIgfCBzaGlmdF9leHByICggIjw8IiB8ICI+PiIgKSBhX2V4cHJcblxuVGhlc2Ugb3BlcmF0b3JzIGFjY2VwdCBwbGFpbiBvciBsb25nIGludGVnZXJzIGFzIGFyZ3VtZW50cy4gIFRoZVxuYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIFRoZXkgc2hpZnQgdGhlIGZpcnN0XG5hcmd1bWVudCB0byB0aGUgbGVmdCBvciByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gYnkgdGhlXG5zZWNvbmQgYXJndW1lbnQuXG5cbkEgcmlnaHQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBkaXZpc2lvbiBieSBgYHBvdygyLCBuKWBgLiAgQVxubGVmdCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggYGBwb3coMixcbm4pYGAuICBOZWdhdGl2ZSBzaGlmdCBjb3VudHMgcmFpc2UgYSBgYFZhbHVlRXJyb3JgYCBleGNlcHRpb24uXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgYGBzeXMubWF4c2l6ZWBgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXJcbiAgdGhhbiBgYHN5cy5tYXhzaXplYGAgYW4gYGBPdmVyZmxvd0Vycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogdSdcblNsaWNpbmdzXG4qKioqKioqKlxuXG5BIHNsaWNpbmcgc2VsZWN0cyBhIHJhbmdlIG9mIGl0ZW1zIGluIGEgc2VxdWVuY2Ugb2JqZWN0IChlLmcuLCBhXG5zdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgU2xpY2luZ3MgbWF5IGJlIHVzZWQgYXMgZXhwcmVzc2lvbnMgb3IgYXNcbnRhcmdldHMgaW4gYXNzaWdubWVudCBvciBgYGRlbGBgIHN0YXRlbWVudHMuICBUaGUgc3ludGF4IGZvciBhXG5zbGljaW5nOlxuXG4gICBzbGljaW5nICAgICAgICAgIDo6PSBzaW1wbGVfc2xpY2luZyB8IGV4dGVuZGVkX3NsaWNpbmdcbiAgIHNpbXBsZV9zbGljaW5nICAgOjo9IHByaW1hcnkgIlsiIHNob3J0X3NsaWNlICJdIlxuICAgZXh0ZW5kZWRfc2xpY2luZyA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICAgICAgOjo9IHNsaWNlX2l0ZW0gKCIsIiBzbGljZV9pdGVtKSogWyIsIl1cbiAgIHNsaWNlX2l0ZW0gICAgICAgOjo9IGV4cHJlc3Npb24gfCBwcm9wZXJfc2xpY2UgfCBlbGxpcHNpc1xuICAgcHJvcGVyX3NsaWNlICAgICA6Oj0gc2hvcnRfc2xpY2UgfCBsb25nX3NsaWNlXG4gICBzaG9ydF9zbGljZSAgICAgIDo6PSBbbG93ZXJfYm91bmRdICI6IiBbdXBwZXJfYm91bmRdXG4gICBsb25nX3NsaWNlICAgICAgIDo6PSBzaG9ydF9zbGljZSAiOiIgW3N0cmlkZV1cbiAgIGxvd2VyX2JvdW5kICAgICAgOjo9IGV4cHJlc3Npb25cbiAgIHVwcGVyX2JvdW5kICAgICAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICAgICAgOjo9IGV4cHJlc3Npb25cbiAgIGVsbGlwc2lzICAgICAgICAgOjo9ICIuLi4iXG5cblRoZXJlIGlzIGFtYmlndWl0eSBpbiB0aGUgZm9ybWFsIHN5bnRheCBoZXJlOiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2VcbmFuIGV4cHJlc3Npb24gbGlzdCBhbHNvIGxvb2tzIGxpa2UgYSBzbGljZSBsaXN0LCBzbyBhbnkgc3Vic2NyaXB0aW9uXG5jYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzbGljaW5nLiAgUmF0aGVyIHRoYW4gZnVydGhlciBjb21wbGljYXRpbmcgdGhlXG5zeW50YXgsIHRoaXMgaXMgZGlzYW1iaWd1YXRlZCBieSBkZWZpbmluZyB0aGF0IGluIHRoaXMgY2FzZSB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc3Vic2NyaXB0aW9uIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHNsaWNpbmcgKHRoaXMgaXMgdGhlIGNhc2UgaWYgdGhlIHNsaWNlIGxpc3RcbmNvbnRhaW5zIG5vIHByb3BlciBzbGljZSBub3IgZWxsaXBzZXMpLiAgU2ltaWxhcmx5LCB3aGVuIHRoZSBzbGljZVxubGlzdCBoYXMgZXhhY3RseSBvbmUgc2hvcnQgc2xpY2UgYW5kIG5vIHRyYWlsaW5nIGNvbW1hLCB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc2ltcGxlIHNsaWNpbmcgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGF0IGFzIGFuXG5leHRlbmRlZCBzbGljaW5nLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNpbXBsZSBzbGljaW5nIGFyZSBhcyBmb2xsb3dzLiAgVGhlIHByaW1hcnkgbXVzdFxuZXZhbHVhdGUgdG8gYSBzZXF1ZW5jZSBvYmplY3QuICBUaGUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGV4cHJlc3Npb25zLFxuaWYgcHJlc2VudCwgbXVzdCBldmFsdWF0ZSB0byBwbGFpbiBpbnRlZ2VyczsgZGVmYXVsdHMgYXJlIHplcm8gYW5kIHRoZVxuYGBzeXMubWF4aW50YGAsIHJlc3BlY3RpdmVseS4gIElmIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlXG5zZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgc2xpY2luZyBub3cgc2VsZWN0cyBhbGwgaXRlbXNcbndpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCBgYGkgPD0gayA8IGpgYCB3aGVyZSAqaSogYW5kICpqKiBhcmUgdGhlXG5zcGVjaWZpZWQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy4gIFRoaXMgbWF5IGJlIGFuIGVtcHR5IHNlcXVlbmNlLiAgSXRcbmlzIG5vdCBhbiBlcnJvciBpZiAqaSogb3IgKmoqIGxpZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB2YWxpZCBpbmRleGVzXG4oc3VjaCBpdGVtcyBkb25cJ3QgZXhpc3Qgc28gdGhleSBhcmVuXCd0IHNlbGVjdGVkKS5cblxuVGhlIHNlbWFudGljcyBmb3IgYW4gZXh0ZW5kZWQgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5XG5tdXN0IGV2YWx1YXRlIHRvIGEgbWFwcGluZyBvYmplY3QsIGFuZCBpdCBpcyBpbmRleGVkIHdpdGggYSBrZXkgdGhhdFxuaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgc2xpY2UgbGlzdCwgYXMgZm9sbG93cy4gIElmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBhdCBsZWFzdCBvbmUgY29tbWEsIHRoZSBrZXkgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuY29udmVyc2lvbiBvZiB0aGUgc2xpY2UgaXRlbXM7IG90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGxvbmVcbnNsaWNlIGl0ZW0gaXMgdGhlIGtleS4gIFRoZSBjb252ZXJzaW9uIG9mIGEgc2xpY2UgaXRlbSB0aGF0IGlzIGFuXG5leHByZXNzaW9uIGlzIHRoYXQgZXhwcmVzc2lvbi4gIFRoZSBjb252ZXJzaW9uIG9mIGFuIGVsbGlwc2lzIHNsaWNlXG5pdGVtIGlzIHRoZSBidWlsdC1pbiBgYEVsbGlwc2lzYGAgb2JqZWN0LiAgVGhlIGNvbnZlcnNpb24gb2YgYSBwcm9wZXJcbnNsaWNlIGlzIGEgc2xpY2Ugb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kilcbndob3NlIGBgc3RhcnRgYCwgYGBzdG9wYGAgYW5kIGBgc3RlcGBgIGF0dHJpYnV0ZXMgYXJlIHRoZSB2YWx1ZXMgb2ZcbnRoZSBleHByZXNzaW9ucyBnaXZlbiBhcyBsb3dlciBib3VuZCwgdXBwZXIgYm91bmQgYW5kIHN0cmlkZSxcbnJlc3BlY3RpdmVseSwgc3Vic3RpdHV0aW5nIGBgTm9uZWBgIGZvciBtaXNzaW5nIGV4cHJlc3Npb25zLlxuJywKLSAnc3BlY2lhbGF0dHJzJzogdSJcblNwZWNpYWwgQXR0cmlidXRlc1xuKioqKioqKioqKioqKioqKioqXG5cblRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbFxub2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZFxuYnkgdGhlIGBgZGlyKClgYCBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdCdzXG4gICAod3JpdGFibGUpIGF0dHJpYnV0ZXMuXG5cbm9iamVjdC5fX21ldGhvZHNfX1xuXG4gICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4yOiBVc2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgZGlyKClgYFxuICAgdG8gZ2V0IGEgbGlzdCBvZiBhbiBvYmplY3QncyBhdHRyaWJ1dGVzLiBUaGlzIGF0dHJpYnV0ZSBpcyBub1xuICAgbG9uZ2VyIGF2YWlsYWJsZS5cblxub2JqZWN0Ll9fbWVtYmVyc19fXG5cbiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjI6IFVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBkaXIoKWBgXG4gICB0byBnZXQgYSBsaXN0IG9mIGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMuIFRoaXMgYXR0cmlidXRlIGlzIG5vXG4gICBsb25nZXIgYXZhaWxhYmxlLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5UaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5ICpuZXctc3R5bGUgY2xhc3MqZXMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIG5ldy1zdHlsZSBjbGFzcyBrZWVwcyBhIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICAgaW1tZWRpYXRlIHN1YmNsYXNzZXMuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhvc2VcbiAgIHJlZmVyZW5jZXMgc3RpbGwgYWxpdmUuIEV4YW1wbGU6XG5cbiAgICAgID4+PiBpbnQuX19zdWJjbGFzc2VzX18oKVxuICAgICAgWzx0eXBlICdib29sJz5dXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzcGVjaWFsIG1ldGhvZHMgbWF5IGJlIGZvdW5kIGluXG4gICAgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsICgqQmFzaWMgY3VzdG9taXphdGlvbiopLlxuXG5bMl0gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIGxpc3QgYGBbMSwgMl1gYCBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgYGBbMS4wLCAyLjBdYGAsIGFuZCBzaW1pbGFybHkgZm9yIHR1cGxlcy5cblxuWzNdIFRoZXkgbXVzdCBoYXZlIHNpbmNlIHRoZSBwYXJzZXIgY2FuJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhIHNpbmdsZXRvblxuICAgIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuXG5bNV0gVGhlc2UgbnVtYmVycyBhcmUgZmFpcmx5IGFyYml0cmFyeS4gIFRoZXkgYXJlIGludGVuZGVkIHRvIGF2b2lkXG4gICAgcHJpbnRpbmcgZW5kbGVzcyBzdHJpbmdzIG9mIG1lYW5pbmdsZXNzIGRpZ2l0cyB3aXRob3V0IGhhbXBlcmluZ1xuICAgIGNvcnJlY3QgdXNlIGFuZCB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZSBleGFjdCBwcmVjaXNpb24gb2ZcbiAgICBmbG9hdGluZyBwb2ludCB2YWx1ZXMgb24gYSBwYXJ0aWN1bGFyIG1hY2hpbmUuXG5cbls2XSBUaGUgYWR2YW50YWdlIG9mIGxlYXZpbmcgdGhlIG5ld2xpbmUgb24gaXMgdGhhdCByZXR1cm5pbmcgYW4gZW1wdHlcbiAgICBzdHJpbmcgaXMgdGhlbiBhbiB1bmFtYmlndW91cyBFT0YgaW5kaWNhdGlvbi4gIEl0IGlzIGFsc28gcG9zc2libGVcbiAgICAoaW4gY2FzZXMgd2hlcmUgaXQgbWlnaHQgbWF0dGVyLCBmb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gbWFrZVxuICAgIGFuIGV4YWN0IGNvcHkgb2YgYSBmaWxlIHdoaWxlIHNjYW5uaW5nIGl0cyBsaW5lcykgdG8gdGVsbCB3aGV0aGVyXG4gICAgdGhlIGxhc3QgbGluZSBvZiBhIGZpbGUgZW5kZWQgaW4gYSBuZXdsaW5lIG9yIG5vdCAoeWVzIHRoaXNcbiAgICBoYXBwZW5zISkuXG4iLAotICdzcGVjaWFsbmFtZXMnOiB1J1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkIGBgX19nZXRpdGVtX18oKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpc1xuY2xhc3MsIHRoZW4gYGB4W2ldYGAgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGBgeC5fX2dldGl0ZW1fXyhpKWBgIGZvclxub2xkLXN0eWxlIGNsYXNzZXMgYW5kIGBgdHlwZSh4KS5fX2dldGl0ZW1fXyh4LCBpKWBgIGZvciBuZXctc3R5bGVcbmNsYXNzZXMuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvblxucmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuYGBBdHRyaWJ1dGVFcnJvcmBgIG9yIGBgVHlwZUVycm9yYGApLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbmBgTm9kZUxpc3RgYCBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5leGNfdHJhY2ViYWNrYGAgb3IgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gIENpcmN1bGFyXG4gICAgIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZVxuICAgICBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWRcbiAgICAgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1sZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuXG4gICAgIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZVxuICAgICBpbmZvcm1hdGlvbiBhYm91dCBob3cgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAgICBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGBcbiAgICAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHN0cmluZ1xuICAgY29udmVyc2lvbnMgKHJldmVyc2UgcXVvdGVzKSB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzIHNob3VsZCBsb29rXG4gICBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvIHJlY3JlYXRlIGFuXG4gICBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQpLiAgSWZcbiAgIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybSBgYDwuLi5zb21lIHVzZWZ1bFxuICAgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYCBidXQgbm90XG4gICBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgc3RyKClgYCBidWlsdC1pbiBmdW5jdGlvbiBhbmQgYnkgdGhlIGBgcHJpbnRgYFxuICAgc3RhdGVtZW50IHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuICBUaGlzIGRpZmZlcnMgZnJvbSBgYF9fcmVwcl9fKClgYCBpbiB0aGF0IGl0IGRvZXMgbm90IGhhdmVcbiAgIHRvIGJlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGEgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2VcbiAgIHJlcHJlc2VudGF0aW9uIG1heSBiZSB1c2VkIGluc3RlYWQuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMS5cblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcywgYW5kIGFyZSBjYWxsZWRcbiAgIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycyBpbiBwcmVmZXJlbmNlIHRvIGBgX19jbXBfXygpYGAgYmVsb3cuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGFuZFxuICAgYGB4PD55YGAgY2FsbCBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmRcbiAgIGBgeD49eWBgIGNhbGxzIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSB0aGUgVG90YWwgT3JkZXJpbmcgcmVjaXBlIGluIHRoZSBBU1BOIGNvb2tib29rLlxuXG5vYmplY3QuX19jbXBfXyhzZWxmLCBvdGhlcilcblxuICAgQ2FsbGVkIGJ5IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpZiByaWNoIGNvbXBhcmlzb24gKHNlZSBhYm92ZSkgaXNcbiAgIG5vdCBkZWZpbmVkLiAgU2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlIGludGVnZXIgaWYgYGBzZWxmIDwgb3RoZXJgYCxcbiAgIHplcm8gaWYgYGBzZWxmID09IG90aGVyYGAsIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBgYHNlbGYgPiBvdGhlcmBgLlxuICAgSWYgbm8gYGBfX2NtcF9fKClgYCwgYGBfX2VxX18oKWBgIG9yIGBgX19uZV9fKClgYCBvcGVyYXRpb24gaXNcbiAgIGRlZmluZWQsIGNsYXNzIGluc3RhbmNlcyBhcmUgY29tcGFyZWQgYnkgb2JqZWN0IGlkZW50aXR5XG4gICAoImFkZHJlc3MiKS4gIFNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmb3Igc29tZVxuICAgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbVxuICAgY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy4gKE5vdGU6IHRoZVxuICAgcmVzdHJpY3Rpb24gdGhhdCBleGNlcHRpb25zIGFyZSBub3QgcHJvcGFnYXRlZCBieSBgYF9fY21wX18oKWBgIGhhc1xuICAgYmVlbiByZW1vdmVkIHNpbmNlIFB5dGhvbiAxLjUuKVxuXG5vYmplY3QuX19yY21wX18oc2VsZiwgb3RoZXIpXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjE6IE5vIGxvbmdlciBzdXBwb3J0ZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gYGBoYXNoKClgYCBhbmQgZm9yIG9wZXJhdGlvbnMgb25cbiAgIG1lbWJlcnMgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyBgYHNldGBgLCBgYGZyb3plbnNldGBgLCBhbmRcbiAgIGBgZGljdGBgLiAgYGBfX2hhc2hfXygpYGAgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHlcbiAgIHJlcXVpcmVkIHByb3BlcnR5IGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWVcbiAgIGhhc2ggdmFsdWU7IGl0IGlzIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmdcbiAgIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2ggdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXRcbiAgIGFsc28gcGxheSBhIHBhcnQgaW4gY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIG1ldGhvZFxuICAgaXQgc2hvdWxkIG5vdCBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdFxuICAgZGVmaW5lcyBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHNcbiAgIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgaW4gaGFzaGVkIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYSBgYF9fY21wX18oKWBgIG9yXG4gICBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2VcbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb25zIHJlcXVpcmUgdGhhdCBhIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlXG4gICBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19jbXBfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBgYGlkKHgpYGAuXG5cbiAgIENsYXNzZXMgd2hpY2ggaW5oZXJpdCBhIGBgX19oYXNoX18oKWBgIG1ldGhvZCBmcm9tIGEgcGFyZW50IGNsYXNzXG4gICBidXQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGBgX19jbXBfXygpYGAgb3IgYGBfX2VxX18oKWBgIHN1Y2ggdGhhdFxuICAgdGhlIGhhc2ggdmFsdWUgcmV0dXJuZWQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIChlLmcuIGJ5IHN3aXRjaGluZ1xuICAgdG8gYSB2YWx1ZS1iYXNlZCBjb25jZXB0IG9mIGVxdWFsaXR5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHRcbiAgIGlkZW50aXR5IGJhc2VkIGVxdWFsaXR5KSBjYW4gZXhwbGljaXRseSBmbGFnIHRoZW1zZWx2ZXMgYXMgYmVpbmdcbiAgIHVuaGFzaGFibGUgYnkgc2V0dGluZyBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLlxuICAgRG9pbmcgc28gbWVhbnMgdGhhdCBub3Qgb25seSB3aWxsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgcmFpc2UgYW5cbiAgIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXJcbiAgIGhhc2ggdmFsdWUsIGJ1dCB0aGV5IHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgXG4gICAodW5saWtlIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZWlyIG93biBgYF9faGFzaF9fKClgYCB0byBleHBsaWNpdGx5XG4gICByYWlzZSBgYFR5cGVFcnJvcmBgKS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNTogYGBfX2hhc2hfXygpYGAgbWF5IG5vdyBhbHNvIHJldHVybiBhIGxvbmdcbiAgIGludGVnZXIgb2JqZWN0OyB0aGUgMzItYml0IGludGVnZXIgaXMgdGhlbiBkZXJpdmVkIGZyb20gdGhlIGhhc2ggb2ZcbiAgIHRoYXQgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi42OiBgYF9faGFzaF9fYGAgbWF5IG5vdyBiZSBzZXQgdG8gYGBOb25lYGAgdG9cbiAgIGV4cGxpY2l0bHkgZmxhZyBpbnN0YW5jZXMgb2YgYSBjbGFzcyBhcyB1bmhhc2hhYmxlLlxuXG5vYmplY3QuX19ub256ZXJvX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICBgYGJvb2woKWBgOyBzaG91bGQgcmV0dXJuIGBgRmFsc2VgYCBvciBgYFRydWVgYCwgb3IgdGhlaXIgaW50ZWdlclxuICAgZXF1aXZhbGVudHMgYGAwYGAgb3IgYGAxYGAuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLFxuICAgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgYGBfX2xlbl9fKClgYCBub3IgYGBfX25vbnplcm9fXygpYGAsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5vYmplY3QuX191bmljb2RlX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYHVuaWNvZGUoKWBgIGJ1aWx0LWluOyBzaG91bGQgcmV0dXJuIGEgVW5pY29kZVxuICAgb2JqZWN0LiBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCBzdHJpbmcgY29udmVyc2lvbiBpc1xuICAgYXR0ZW1wdGVkLCBhbmQgdGhlIHJlc3VsdCBvZiBzdHJpbmcgY29udmVyc2lvbiBpcyBjb252ZXJ0ZWQgdG9cbiAgIFVuaWNvZGUgdXNpbmcgdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiBgYHgubmFtZWBgKVxuZm9yIGNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgYGBzZWxmYGApLiAgYGBuYW1lYGAgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2VcbiAgIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICBgYF9fZ2V0YXR0cl9fKClgYCBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuIGBgX19nZXRhdHRyX18oKWBgIGFuZCBgYF9fc2V0YXR0cl9fKClgYC4pIFRoaXMgaXMgZG9uZSBib3RoXG4gICBmb3IgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSBgYF9fZ2V0YXR0cl9fKClgYFxuICAgd291bGQgaGF2ZSBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZVxuICAgdGhhdCBhdCBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieVxuICAgbm90IGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgaW4gbmV3LXN0eWxlIGNsYXNzZXMuXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgbm90IHNpbXBseSBleGVjdXRlIGBgc2VsZi5uYW1lID0gdmFsdWVgYCAtLS0gdGhpcyB3b3VsZFxuICAgY2F1c2UgYSByZWN1cnNpdmUgY2FsbCB0byBpdHNlbGYuICBJbnN0ZWFkLCBpdCBzaG91bGQgaW5zZXJ0IHRoZVxuICAgdmFsdWUgaW4gdGhlIGRpY3Rpb25hcnkgb2YgaW5zdGFuY2UgYXR0cmlidXRlcywgZS5nLixcbiAgIGBgc2VsZi5fX2RpY3RfX1tuYW1lXSA9IHZhbHVlYGAuICBGb3IgbmV3LXN0eWxlIGNsYXNzZXMsIHJhdGhlclxuICAgdGhhbiBhY2Nlc3NpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnksIGl0IHNob3VsZCBjYWxsIHRoZSBiYXNlXG4gICBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5cbk1vcmUgYXR0cmlidXRlIGFjY2VzcyBmb3IgbmV3LXN0eWxlIGNsYXNzZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgdG8gbmV3LXN0eWxlIGNsYXNzZXMuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXNcbiAgIGBgX19nZXRhdHRyX18oKWBgLCB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3NcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgZWl0aGVyIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAuIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZClcbiAgIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLiBJbiBvcmRlclxuICAgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb25cbiAgIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvXG4gICBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKWBgLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kc1xuICAgICBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheCBvclxuICAgICBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBuZXctc3R5bGVcbiAgICAgY2xhc3NlcyouXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIHRoZVxuY2xhc3MgZGljdGlvbmFyeSBvZiBhbm90aGVyIG5ldy1zdHlsZSBjbGFzcywga25vd24gYXMgdGhlICpvd25lcipcbmNsYXNzLiBJbiB0aGUgZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZVxud2hvc2UgbmFtZSBpcyB0aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJ1xuYGBfX2RpY3RfX2BgLiAgRGVzY3JpcHRvcnMgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgYXMgbmV3LXN0eWxlXG5jbGFzc2VzIHRoZW1zZWx2ZXMuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciBgYE5vbmVgYCB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAsIGFuZFxuYGBfX2RlbGV0ZV9fKClgYC4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCxcbml0IGlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgYGBhLnhgYCBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggYGBhLl9fZGljdF9fW1wneFwnXWBgLCB0aGVuXG5gYHR5cGUoYSkuX19kaWN0X19bXCd4XCddYGAsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuYGB0eXBlKGEpYGAgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC4gIE5vdGUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgb25seSBpbnZva2VkIGZvciBuZXdcbnN0eWxlIG9iamVjdHMgb3IgY2xhc3NlcyAob25lcyB0aGF0IHN1YmNsYXNzIGBgb2JqZWN0KClgYCBvclxuYGB0eXBlKClgYCkuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIG5ldy1zdHlsZSBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWRcbiAgIGludG8gdGhlIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgbmV3LXN0eWxlIGNsYXNzLCBgYEEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiBgYEEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSlgYC5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgYGBhYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzdXBlcmBgLCB0aGVuIHRoZSBiaW5kaW5nIGBgc3VwZXIoQixcbiAgIG9iaikubSgpYGAgc2VhcmNoZXMgYGBvYmouX19jbGFzc19fLl9fbXJvX19gYCBmb3IgdGhlIGJhc2UgY2xhc3NcbiAgIGBgQWBgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBgYEJgYCBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yXG4gICB3aXRoIHRoZSBjYWxsOiBgYEEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBBKWBgLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgIGFuZCBgYF9fZGVsZXRlX18oKWBgLlxuSWYgaXQgZG9lcyBub3QgZGVmaW5lIGBgX19nZXRfXygpYGAsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbFxucmV0dXJuIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlXG5vYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgYGBfX3NldF9fKClgYFxuYW5kL29yIGBgX19kZWxldGVfXygpYGAsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzXG5uZWl0aGVyLCBpdCBpcyBhIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9yc1xuZGVmaW5lIGJvdGggYGBfX2dldF9fKClgYCBhbmQgYGBfX3NldF9fKClgYCwgd2hpbGUgbm9uLWRhdGFcbmRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGUgYGBfX2dldF9fKClgYCBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGhcbmBgX19zZXRfXygpYGAgYW5kIGBgX19nZXRfXygpYGAgZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb25cbmluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJbiBjb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlXG5vdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyBgYHN0YXRpY21ldGhvZCgpYGAgYW5kIGBgY2xhc3NtZXRob2QoKWBgKVxuYXJlIGltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgYGBwcm9wZXJ0eSgpYGAgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgYm90aCBvbGQgYW5kIG5ldy1zdHlsZSBjbGFzc2VzIGhhdmUgYVxuZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlIHN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0c1xuaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlIHZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lXG5hY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlIG51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIG5ldy1zdHlsZVxuY2xhc3MgZGVmaW5pdGlvbi4gIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mXG5pbnN0YW5jZSB2YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG9cbmhvbGQgYSB2YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpc1xubm90IGNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbl9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIG5ldy1zdHlsZSBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZFxuICAgdmFyaWFibGVzIGFuZCBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kXG4gICAqX193ZWFrcmVmX18qIGZvciBlYWNoIGluc3RhbmNlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyBgYEF0dHJpYnV0ZUVycm9yYGAuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFkZGluZyBgYFwnX19kaWN0X19cJ2BgIHRvIHRoZVxuICAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB3b3VsZCBub3QgZW5hYmxlIHRoZSBhc3NpZ25tZW50IG9mIG5ld1xuICBhdHRyaWJ1dGVzIG5vdCBzcGVjaWZpY2FsbHkgbGlzdGVkIGluIHRoZSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxuICB2YXJpYWJsZSBuYW1lcy5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3NlcyBkZWZpbmluZ1xuICAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGluc3RhbmNlcy4gSWYgd2Vha1xuICByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkIGBgXCdfX3dlYWtyZWZfX1wnYGAgdG8gdGhlXG4gIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGFkZGluZyBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB3b3VsZCBub3QgZW5hYmxlIHN1cHBvcnQgZm9yIHdlYWtcbiAgcmVmZXJlbmNlcy5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBsb25nYGAsIGBgc3RyYGAgYW5kXG4gIGBgdHVwbGVgYC5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuICBDaGFuZ2VkIGluIHZlcnNpb24gMi42OiBQcmV2aW91c2x5LCAqX19jbGFzc19fKiBhc3NpZ25tZW50IHJhaXNlZCBhblxuICBlcnJvciBpZiBlaXRoZXIgbmV3IG9yIG9sZCBjbGFzcyBoYWQgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIG5ldy1zdHlsZSBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBBXG5jbGFzcyBkZWZpbml0aW9uIGlzIHJlYWQgaW50byBhIHNlcGFyYXRlIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIG9mXG5jbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoZSByZXN1bHQgb2YgYGB0eXBlKG5hbWUsIGJhc2VzLCBkaWN0KWBgLlxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIHJlYWQsIGlmICpfX21ldGFjbGFzc19fKiBpcyBkZWZpbmVkIHRoZW5cbnRoZSBjYWxsYWJsZSBhc3NpZ25lZCB0byBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGBgdHlwZSgpYGAuIFRoaXNcbmFsbG93cyBjbGFzc2VzIG9yIGZ1bmN0aW9ucyB0byBiZSB3cml0dGVuIHdoaWNoIG1vbml0b3Igb3IgYWx0ZXIgdGhlXG5jbGFzcyBjcmVhdGlvbiBwcm9jZXNzOlxuXG4qIE1vZGlmeWluZyB0aGUgY2xhc3MgZGljdGlvbmFyeSBwcmlvciB0byB0aGUgY2xhc3MgYmVpbmcgY3JlYXRlZC5cblxuKiBSZXR1cm5pbmcgYW4gaW5zdGFuY2Ugb2YgYW5vdGhlciBjbGFzcyAtLSBlc3NlbnRpYWxseSBwZXJmb3JtaW5nIHRoZVxuICByb2xlIG9mIGEgZmFjdG9yeSBmdW5jdGlvbi5cblxuVGhlc2Ugc3RlcHMgd2lsbCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGBcbm1ldGhvZCAtLSBgYHR5cGUuX19uZXdfXygpYGAgY2FuIHRoZW4gYmUgY2FsbGVkIGZyb20gdGhpcyBtZXRob2QgdG9cbmNyZWF0ZSBhIGNsYXNzIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuICBUaGlzIGV4YW1wbGUgYWRkcyBhIG5ld1xuZWxlbWVudCB0byB0aGUgY2xhc3MgZGljdGlvbmFyeSBiZWZvcmUgY3JlYXRpbmcgdGhlIGNsYXNzOlxuXG4gICBjbGFzcyBtZXRhY2xzKHR5cGUpOlxuICAgICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRpY3QpOlxuICAgICAgICAgICBkaWN0W1wnZm9vXCddID0gXCdtZXRhY2xzIHdhcyBoZXJlXCdcbiAgICAgICAgICAgcmV0dXJuIHR5cGUuX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkaWN0KVxuXG5Zb3UgY2FuIG9mIGNvdXJzZSBhbHNvIG92ZXJyaWRlIG90aGVyIGNsYXNzIG1ldGhvZHMgKG9yIGFkZCBuZXdcbm1ldGhvZHMpOyBmb3IgZXhhbXBsZSBkZWZpbmluZyBhIGN1c3RvbSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlXG5tZXRhY2xhc3MgYWxsb3dzIGN1c3RvbSBiZWhhdmlvciB3aGVuIHRoZSBjbGFzcyBpcyBjYWxsZWQsIGUuZy4gbm90XG5hbHdheXMgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cbl9fbWV0YWNsYXNzX19cblxuICAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgYW55IGNhbGxhYmxlIGFjY2VwdGluZyBhcmd1bWVudHMgZm9yIGBgbmFtZWBgLFxuICAgYGBiYXNlc2BgLCBhbmQgYGBkaWN0YGAuICBVcG9uIGNsYXNzIGNyZWF0aW9uLCB0aGUgY2FsbGFibGUgaXMgdXNlZFxuICAgaW5zdGVhZCBvZiB0aGUgYnVpbHQtaW4gYGB0eXBlKClgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBwcmVjZWRlbmNlXG5ydWxlczpcblxuKiBJZiBgYGRpY3RbXCdfX21ldGFjbGFzc19fXCddYGAgZXhpc3RzLCBpdCBpcyB1c2VkLlxuXG4qIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJhc2UgY2xhc3MsIGl0cyBtZXRhY2xhc3MgaXNcbiAgdXNlZCAodGhpcyBsb29rcyBmb3IgYSAqX19jbGFzc19fKiBhdHRyaWJ1dGUgZmlyc3QgYW5kIGlmIG5vdCBmb3VuZCxcbiAgdXNlcyBpdHMgdHlwZSkuXG5cbiogT3RoZXJ3aXNlLCBpZiBhIGdsb2JhbCB2YXJpYWJsZSBuYW1lZCBfX21ldGFjbGFzc19fIGV4aXN0cywgaXQgaXNcbiAgdXNlZC5cblxuKiBPdGhlcndpc2UsIHRoZSBvbGQtc3R5bGUsIGNsYXNzaWMgbWV0YWNsYXNzICh0eXBlcy5DbGFzc1R5cGUpIGlzXG4gIHVzZWQuXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkaW5nIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMi42LlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGFuZCBpbmNsdWRpbmcgdG8gb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IHRoYXQgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuIChGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBtZXRob2RcbmBgX19nZXRzbGljZV9fKClgYCAoc2VlIGJlbG93KSBjYW4gYWxzbyBiZSBkZWZpbmVkIHRvIGhhbmRsZSBzaW1wbGUsXG5idXQgbm90IGV4dGVuZGVkIHNsaWNlcy4pIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGhhc19rZXkoKWBgLFxuYGBnZXQoKWBgLCBgYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBpdGVya2V5cygpYGAsXG5gYGl0ZXJ2YWx1ZXMoKWBgLCBgYGl0ZXJpdGVtcygpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCxcbmBgY29weSgpYGAsIGFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzXG5zdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBVc2VyRGljdGBgIG1vZHVsZSBwcm92aWRlcyBhXG5gYERpY3RNaXhpbmBgIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsIGBgX19kZWxpdGVtX18oKWBgLCBhbmRcbmBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlIG1ldGhvZHMgYGBhcHBlbmQoKWBgLFxuYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsIGBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLFxuYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLCBsaWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0XG5vYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZ1xuY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nIHJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZVxubWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCwgYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsXG5gYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGAgZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3RcbmRlZmluZSBgYF9fY29lcmNlX18oKWBgIG9yIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgYmUgZXF1aXZhbGVudCBvZiBgYGhhc19rZXkoKWBgO1xuZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBpdGVya2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ub256ZXJvX18oKWBgIG1ldGhvZCBhbmQgd2hvc2VcbiAgIGBgX19sZW5fXygpYGAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBgaXRlcmtleXMoKWBgLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgYGBfX3JldmVyc2VkX18oKWBgIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZVxuICAgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlXG4gICBwcm90b2NvbCAoYGBfX2xlbl9fKClgYCBhbmQgYGBfX2dldGl0ZW1fXygpYGApLiAgT2JqZWN0cyB0aGF0XG4gICBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbCBzaG91bGQgb25seSBwcm92aWRlXG4gICBgYF9fcmV2ZXJzZWRfXygpYGAgaWYgdGhleSBjYW4gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzXG4gICBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnkgYGByZXZlcnNlZCgpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuQWRkaXRpb25hbCBtZXRob2RzIGZvciBlbXVsYXRpb24gb2Ygc2VxdWVuY2UgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgb3B0aW9uYWwgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBmdXJ0aGVyIGVtdWxhdGVcbnNlcXVlbmNlIG9iamVjdHMuICBJbW11dGFibGUgc2VxdWVuY2VzIG1ldGhvZHMgc2hvdWxkIGF0IG1vc3Qgb25seVxuZGVmaW5lIGBgX19nZXRzbGljZV9fKClgYDsgbXV0YWJsZSBzZXF1ZW5jZXMgbWlnaHQgZGVmaW5lIGFsbCB0aHJlZVxubWV0aG9kcy5cblxub2JqZWN0Ll9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKVxuXG4gICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4wOiBTdXBwb3J0IHNsaWNlIG9iamVjdHMgYXMgcGFyYW1ldGVyc1xuICAgdG8gdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gKEhvd2V2ZXIsIGJ1aWx0LWluIHR5cGVzIGluXG4gICBDUHl0aG9uIGN1cnJlbnRseSBzdGlsbCBpbXBsZW1lbnQgYGBfX2dldHNsaWNlX18oKWBgLiAgVGhlcmVmb3JlLFxuICAgeW91IGhhdmUgdG8gb3ZlcnJpZGUgaXQgaW4gZGVyaXZlZCBjbGFzc2VzIHdoZW4gaW1wbGVtZW50aW5nXG4gICBzbGljaW5nLilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltpOmpdYGAuIFRoZSByZXR1cm5lZFxuICAgb2JqZWN0IHNob3VsZCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzZWxmKi4gIE5vdGUgdGhhdCBtaXNzaW5nICppKlxuICAgb3IgKmoqIGluIHRoZSBzbGljZSBleHByZXNzaW9uIGFyZSByZXBsYWNlZCBieSB6ZXJvIG9yXG4gICBgYHN5cy5tYXhpbnRgYCwgcmVzcGVjdGl2ZWx5LiAgSWYgbmVnYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCBpbiB0aGVcbiAgIHNsaWNlLCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBpcyBhZGRlZCB0byB0aGF0IGluZGV4LiBJZiB0aGVcbiAgIGluc3RhbmNlIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBfX2xlbl9fKClgYCBtZXRob2QsIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgaXMgcmFpc2VkLiBObyBndWFyYW50ZWUgaXMgbWFkZSB0aGF0IGluZGV4ZXNcbiAgIGFkanVzdGVkIHRoaXMgd2F5IGFyZSBub3Qgc3RpbGwgbmVnYXRpdmUuICBJbmRleGVzIHdoaWNoIGFyZVxuICAgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIGFyZSBub3QgbW9kaWZpZWQuIElmIG5vXG4gICBgYF9fZ2V0c2xpY2VfXygpYGAgaXMgZm91bmQsIGEgc2xpY2Ugb2JqZWN0IGlzIGNyZWF0ZWQgaW5zdGVhZCwgYW5kXG4gICBwYXNzZWQgdG8gYGBfX2dldGl0ZW1fXygpYGAgaW5zdGVhZC5cblxub2JqZWN0Ll9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCBzZXF1ZW5jZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltpOmpdYGAuIFNhbWUgbm90ZXMgZm9yICppKlxuICAgYW5kICpqKiBhcyBmb3IgYGBfX2dldHNsaWNlX18oKWBgLlxuXG4gICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJZiBubyBgYF9fc2V0c2xpY2VfXygpYGAgaXMgZm91bmQsIG9yXG4gICBmb3IgZXh0ZW5kZWQgc2xpY2luZyBvZiB0aGUgZm9ybSBgYHNlbGZbaTpqOmtdYGAsIGEgc2xpY2Ugb2JqZWN0IGlzXG4gICBjcmVhdGVkLCBhbmQgcGFzc2VkIHRvIGBgX19zZXRpdGVtX18oKWBgLCBpbnN0ZWFkIG9mXG4gICBgYF9fc2V0c2xpY2VfXygpYGAgYmVpbmcgY2FsbGVkLlxuXG5vYmplY3QuX19kZWxzbGljZV9fKHNlbGYsIGksIGopXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2k6al1gYC4gU2FtZSBub3RlcyBmb3IgKmkqXG4gICBhbmQgKmoqIGFzIGZvciBgYF9fZ2V0c2xpY2VfXygpYGAuIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIElmIG5vXG4gICBgYF9fZGVsc2xpY2VfXygpYGAgaXMgZm91bmQsIG9yIGZvciBleHRlbmRlZCBzbGljaW5nIG9mIHRoZSBmb3JtXG4gICBgYHNlbGZbaTpqOmtdYGAsIGEgc2xpY2Ugb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCBwYXNzZWQgdG9cbiAgIGBgX19kZWxpdGVtX18oKWBgLCBpbnN0ZWFkIG9mIGBgX19kZWxzbGljZV9fKClgYCBiZWluZyBjYWxsZWQuXG5cbk5vdGljZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIG9ubHkgaW52b2tlZCB3aGVuIGEgc2luZ2xlIHNsaWNlIHdpdGggYVxuc2luZ2xlIGNvbG9uIGlzIHVzZWQsIGFuZCB0aGUgc2xpY2UgbWV0aG9kIGlzIGF2YWlsYWJsZS4gIEZvciBzbGljZVxub3BlcmF0aW9ucyBpbnZvbHZpbmcgZXh0ZW5kZWQgc2xpY2Ugbm90YXRpb24sIG9yIGluIGFic2VuY2Ugb2YgdGhlXG5zbGljZSBtZXRob2RzLCBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAgb3JcbmBgX19kZWxpdGVtX18oKWBgIGlzIGNhbGxlZCB3aXRoIGEgc2xpY2Ugb2JqZWN0IGFzIGFyZ3VtZW50LlxuXG5UaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGUgaG93IHRvIG1ha2UgeW91ciBwcm9ncmFtIG9yIG1vZHVsZVxuY29tcGF0aWJsZSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uIChhc3N1bWluZyB0aGF0IG1ldGhvZHNcbmBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCBhbmQgYGBfX2RlbGl0ZW1fXygpYGAgc3VwcG9ydFxuc2xpY2Ugb2JqZWN0cyBhcyBhcmd1bWVudHMpOlxuXG4gICBjbGFzcyBNeUNsYXNzOlxuICAgICAgIC4uLlxuICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6XG4gICAgICAgICAgIC4uLlxuICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOlxuICAgICAgICAgICAuLi5cbiAgICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOlxuICAgICAgICAgICAuLi5cblxuICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgMCk6XG4gICAgICAgICAgICMgVGhleSB3b25cJ3QgYmUgZGVmaW5lZCBpZiB2ZXJzaW9uIGlzIGF0IGxlYXN0IDIuMCBmaW5hbFxuXG4gICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6XG4gICAgICAgICAgICAgICByZXR1cm4gc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl1cbiAgICAgICAgICAgZGVmIF9fc2V0c2xpY2VfXyhzZWxmLCBpLCBqLCBzZXEpOlxuICAgICAgICAgICAgICAgc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl0gPSBzZXFcbiAgICAgICAgICAgZGVmIF9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKTpcbiAgICAgICAgICAgICAgIGRlbCBzZWxmW21heCgwLCBpKTptYXgoMCwgaik6XVxuICAgICAgIC4uLlxuXG5Ob3RlIHRoZSBjYWxscyB0byBgYG1heCgpYGA7IHRoZXNlIGFyZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiB0aGVcbmhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluZGljZXMgYmVmb3JlIHRoZSBgYF9fKnNsaWNlX18oKWBgIG1ldGhvZHMgYXJlXG5jYWxsZWQuICBXaGVuIG5lZ2F0aXZlIGluZGV4ZXMgYXJlIHVzZWQsIHRoZSBgYF9fKml0ZW1fXygpYGAgbWV0aG9kc1xucmVjZWl2ZSB0aGVtIGFzIHByb3ZpZGVkLCBidXQgdGhlIGBgX18qc2xpY2VfXygpYGAgbWV0aG9kcyBnZXQgYVxuImNvb2tlZCIgZm9ybSBvZiB0aGUgaW5kZXggdmFsdWVzLiAgRm9yIGVhY2ggbmVnYXRpdmUgaW5kZXggdmFsdWUsIHRoZVxubGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBpcyBhZGRlZCB0byB0aGUgaW5kZXggYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZFxuKHdoaWNoIG1heSBzdGlsbCByZXN1bHQgaW4gYSBuZWdhdGl2ZSBpbmRleCk7IHRoaXMgaXMgdGhlIGN1c3RvbWFyeVxuaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5kZXhlcyBieSB0aGUgYnVpbHQtaW4gc2VxdWVuY2UgdHlwZXMsIGFuZCB0aGVcbmBgX18qaXRlbV9fKClgYCBtZXRob2RzIGFyZSBleHBlY3RlZCB0byBkbyB0aGlzIGFzIHdlbGwuICBIb3dldmVyLFxuc2luY2UgdGhleSBzaG91bGQgYWxyZWFkeSBiZSBkb2luZyB0aGF0LCBuZWdhdGl2ZSBpbmRleGVzIGNhbm5vdCBiZVxucGFzc2VkIGluOyB0aGV5IG11c3QgYmUgY29uc3RyYWluZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgc2VxdWVuY2VcbmJlZm9yZSBiZWluZyBwYXNzZWQgdG8gdGhlIGBgX18qaXRlbV9fKClgYCBtZXRob2RzLiBDYWxsaW5nIGBgbWF4KDAsXG5pKWBgIGNvbnZlbmllbnRseSByZXR1cm5zIHRoZSBwcm9wZXIgdmFsdWUuXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgLy9gYCwgYGAlYGAsIGBgZGl2bW9kKClgYCxcbiAgIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLCBgYHxgYCkuICBGb3JcbiAgIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlICp4KiBpcyBhblxuICAgaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgIChkZXNjcmliZWQgYmVsb3cpLiAgTm90ZVxuICAgdGhhdCBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZSBkaXZpc2lvbiBvcGVyYXRvciAoYGAvYGApIGlzIGltcGxlbWVudGVkIGJ5IHRoZXNlIG1ldGhvZHMuICBUaGVcbiAgIGBgX190cnVlZGl2X18oKWBgIG1ldGhvZCBpcyB1c2VkIHdoZW4gYGBfX2Z1dHVyZV9fLmRpdmlzaW9uYGAgaXMgaW5cbiAgIGVmZmVjdCwgb3RoZXJ3aXNlIGBgX19kaXZfXygpYGAgaXMgdXNlZC4gIElmIG9ubHkgb25lIG9mIHRoZXNlIHR3b1xuICAgbWV0aG9kcyBpcyBkZWZpbmVkLCB0aGUgb2JqZWN0IHdpbGwgbm90IHN1cHBvcnQgZGl2aXNpb24gaW4gdGhlXG4gICBhbHRlcm5hdGUgY29udGV4dDsgYGBUeXBlRXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBpbnN0ZWFkLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYCVgYCwgYGBkaXZtb2QoKWBgLFxuICAgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsIGBgfGBgKSB3aXRoXG4gICByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZlxuICAgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmRcbiAgIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZVxuICAgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0XG4gICBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLCBgYHkuX19yc3ViX18oeClgYCBpcyBjYWxsZWQgaWZcbiAgIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJucyAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSBgYHBvdygpYGAgd2lsbCBub3QgdHJ5IGNhbGxpbmcgYGBfX3Jwb3dfXygpYGBcbiAgICh0aGUgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2QgZm9yIHRoZVxuICAgICBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdCBvcGVyYW5kXCdzXG4gICAgIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3NlcyB0b1xuICAgICBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoYGArPWBgLCBgYC09YGAsIGBgKj1gYCwgYGAvPWBgLCBgYC8vPWBgLCBgYCU9YGAsXG4gICBgYCoqPWBgLCBgYDw8PWBgLCBgYD4+PWBgLCBgYCY9YGAsIGBgXj1gYCwgYGB8PWBgKS4gIFRoZXNlIG1ldGhvZHNcbiAgIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZSBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZFxuICAgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSxcbiAgICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWwgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG9cbiAgIGV4ZWN1dGUgdGhlIHN0YXRlbWVudCBgYHggKz0geWBgLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYVxuICAgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19pYWRkX18oeSlgYCBpc1xuICAgY2FsbGVkLiAgSWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBkZWZpbmUgYVxuICAgYGBfX2lhZGRfXygpYGAgbWV0aG9kLCBgYHguX19hZGRfXyh5KWBgIGFuZCBgYHkuX19yYWRkX18oeClgYCBhcmVcbiAgIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgYGB4ICsgeWBgLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGBgLWBgLCBgYCtgYCxcbiAgIGBgYWJzKClgYCBhbmQgYGB+YGApLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19sb25nX18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgY29tcGxleCgpYGAsXG4gICBgYGludCgpYGAsIGBgbG9uZygpYGAsIGFuZCBgYGZsb2F0KClgYC4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZlxuICAgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cbm9iamVjdC5fX29jdF9fKHNlbGYpXG5vYmplY3QuX19oZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBvY3QoKWBgIGFuZCBgYGhleCgpYGAuXG4gICBTaG91bGQgcmV0dXJuIGEgc3RyaW5nIHZhbHVlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcpLiAgTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIgKGludCBvciBsb25nKS5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5vYmplY3QuX19jb2VyY2VfXyhzZWxmLCBvdGhlcilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAibWl4ZWQtbW9kZSIgbnVtZXJpYyBhcml0aG1ldGljLiAgU2hvdWxkIGVpdGhlclxuICAgcmV0dXJuIGEgMi10dXBsZSBjb250YWluaW5nICpzZWxmKiBhbmQgKm90aGVyKiBjb252ZXJ0ZWQgdG8gYVxuICAgY29tbW9uIG51bWVyaWMgdHlwZSwgb3IgYGBOb25lYGAgaWYgY29udmVyc2lvbiBpcyBpbXBvc3NpYmxlLiAgV2hlblxuICAgdGhlIGNvbW1vbiB0eXBlIHdvdWxkIGJlIHRoZSB0eXBlIG9mIGBgb3RoZXJgYCwgaXQgaXMgc3VmZmljaWVudCB0b1xuICAgcmV0dXJuIGBgTm9uZWBgLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgd2lsbCBhbHNvIGFzayB0aGUgb3RoZXJcbiAgIG9iamVjdCB0byBhdHRlbXB0IGEgY29lcmNpb24gKGJ1dCBzb21ldGltZXMsIGlmIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgb2YgdGhlIG90aGVyIHR5cGUgY2Fubm90IGJlIGNoYW5nZWQsIGl0IGlzIHVzZWZ1bCB0byBkbyB0aGVcbiAgIGNvbnZlcnNpb24gdG8gdGhlIG90aGVyIHR5cGUgaGVyZSkuICBBIHJldHVybiB2YWx1ZSBvZlxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlzIGVxdWl2YWxlbnQgdG8gcmV0dXJuaW5nIGBgTm9uZWBgLlxuXG5cbkNvZXJjaW9uIHJ1bGVzXG49PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gdXNlZCB0byBkb2N1bWVudCB0aGUgcnVsZXMgZm9yIGNvZXJjaW9uLiAgQXMgdGhlIGxhbmd1YWdlXG5oYXMgZXZvbHZlZCwgdGhlIGNvZXJjaW9uIHJ1bGVzIGhhdmUgYmVjb21lIGhhcmQgdG8gZG9jdW1lbnRcbnByZWNpc2VseTsgZG9jdW1lbnRpbmcgd2hhdCBvbmUgdmVyc2lvbiBvZiBvbmUgcGFydGljdWxhclxuaW1wbGVtZW50YXRpb24gZG9lcyBpcyB1bmRlc2lyYWJsZS4gIEluc3RlYWQsIGhlcmUgYXJlIHNvbWUgaW5mb3JtYWxcbmd1aWRlbGluZXMgcmVnYXJkaW5nIGNvZXJjaW9uLiAgSW4gUHl0aG9uIDMuMCwgY29lcmNpb24gd2lsbCBub3QgYmVcbnN1cHBvcnRlZC5cblxuKiBJZiB0aGUgbGVmdCBvcGVyYW5kIG9mIGEgJSBvcGVyYXRvciBpcyBhIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCxcbiAgbm8gY29lcmNpb24gdGFrZXMgcGxhY2UgYW5kIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gaXNcbiAgaW52b2tlZCBpbnN0ZWFkLlxuXG4qIEl0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZCB0byBkZWZpbmUgYSBjb2VyY2lvbiBvcGVyYXRpb24uIE1peGVkLVxuICBtb2RlIG9wZXJhdGlvbnMgb24gdHlwZXMgdGhhdCBkb25cJ3QgZGVmaW5lIGNvZXJjaW9uIHBhc3MgdGhlXG4gIG9yaWdpbmFsIGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLlxuXG4qIE5ldy1zdHlsZSBjbGFzc2VzICh0aG9zZSBkZXJpdmVkIGZyb20gYGBvYmplY3RgYCkgbmV2ZXIgaW52b2tlIHRoZVxuICBgYF9fY29lcmNlX18oKWBgIG1ldGhvZCBpbiByZXNwb25zZSB0byBhIGJpbmFyeSBvcGVyYXRvcjsgdGhlIG9ubHlcbiAgdGltZSBgYF9fY29lcmNlX18oKWBgIGlzIGludm9rZWQgaXMgd2hlbiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgYGBjb2VyY2UoKWBgIGlzIGNhbGxlZC5cblxuKiBGb3IgbW9zdCBpbnRlbnRzIGFuZCBwdXJwb3NlcywgYW4gb3BlcmF0b3IgdGhhdCByZXR1cm5zXG4gIGBgTm90SW1wbGVtZW50ZWRgYCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIG9uZSB0aGF0IGlzIG5vdFxuICBpbXBsZW1lbnRlZCBhdCBhbGwuXG5cbiogQmVsb3csIGBgX19vcF9fKClgYCBhbmQgYGBfX3JvcF9fKClgYCBhcmUgdXNlZCB0byBzaWduaWZ5IHRoZVxuICBnZW5lcmljIG1ldGhvZCBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGFuIG9wZXJhdG9yOyBgYF9faW9wX18oKWBgIGlzXG4gIHVzZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGluLXBsYWNlIG9wZXJhdG9yLiAgRm9yIGV4YW1wbGUsIGZvciB0aGVcbiAgb3BlcmF0b3IgXCdgYCtgYFwnLCBgYF9fYWRkX18oKWBgIGFuZCBgYF9fcmFkZF9fKClgYCBhcmUgdXNlZCBmb3IgdGhlXG4gIGxlZnQgYW5kIHJpZ2h0IHZhcmlhbnQgb2YgdGhlIGJpbmFyeSBvcGVyYXRvciwgYW5kIGBgX19pYWRkX18oKWBgXG4gIGZvciB0aGUgaW4tcGxhY2UgdmFyaWFudC5cblxuKiBGb3Igb2JqZWN0cyAqeCogYW5kICp5KiwgZmlyc3QgYGB4Ll9fb3BfXyh5KWBgIGlzIHRyaWVkLiAgSWYgdGhpcyBpc1xuICBub3QgaW1wbGVtZW50ZWQgb3IgcmV0dXJucyBgYE5vdEltcGxlbWVudGVkYGAsIGBgeS5fX3JvcF9fKHgpYGAgaXNcbiAgdHJpZWQuICBJZiB0aGlzIGlzIGFsc28gbm90IGltcGxlbWVudGVkIG9yIHJldHVybnNcbiAgYGBOb3RJbXBsZW1lbnRlZGBgLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIEJ1dCBzZWVcbiAgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiogRXhjZXB0aW9uIHRvIHRoZSBwcmV2aW91cyBpdGVtOiBpZiB0aGUgbGVmdCBvcGVyYW5kIGlzIGFuIGluc3RhbmNlXG4gIG9mIGEgYnVpbHQtaW4gdHlwZSBvciBhIG5ldy1zdHlsZSBjbGFzcywgYW5kIHRoZSByaWdodCBvcGVyYW5kIGlzIGFuXG4gIGluc3RhbmNlIG9mIGEgcHJvcGVyIHN1YmNsYXNzIG9mIHRoYXQgdHlwZSBvciBjbGFzcyBhbmQgb3ZlcnJpZGVzXG4gIHRoZSBiYXNlXCdzIGBgX19yb3BfXygpYGAgbWV0aG9kLCB0aGUgcmlnaHQgb3BlcmFuZFwncyBgYF9fcm9wX18oKWBgXG4gIG1ldGhvZCBpcyB0cmllZCAqYmVmb3JlKiB0aGUgbGVmdCBvcGVyYW5kXCdzIGBgX19vcF9fKClgYCBtZXRob2QuXG5cbiAgVGhpcyBpcyBkb25lIHNvIHRoYXQgYSBzdWJjbGFzcyBjYW4gY29tcGxldGVseSBvdmVycmlkZSBiaW5hcnlcbiAgb3BlcmF0b3JzLiBPdGhlcndpc2UsIHRoZSBsZWZ0IG9wZXJhbmRcJ3MgYGBfX29wX18oKWBgIG1ldGhvZCB3b3VsZFxuICBhbHdheXMgYWNjZXB0IHRoZSByaWdodCBvcGVyYW5kOiB3aGVuIGFuIGluc3RhbmNlIG9mIGEgZ2l2ZW4gY2xhc3NcbiAgaXMgZXhwZWN0ZWQsIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgdGhhdCBjbGFzcyBpcyBhbHdheXNcbiAgYWNjZXB0YWJsZS5cblxuKiBXaGVuIGVpdGhlciBvcGVyYW5kIHR5cGUgZGVmaW5lcyBhIGNvZXJjaW9uLCB0aGlzIGNvZXJjaW9uIGlzIGNhbGxlZFxuICBiZWZvcmUgdGhhdCB0eXBlXCdzIGBgX19vcF9fKClgYCBvciBgYF9fcm9wX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQsXG4gIGJ1dCBubyBzb29uZXIuICBJZiB0aGUgY29lcmNpb24gcmV0dXJucyBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnRcbiAgdHlwZSBmb3IgdGhlIG9wZXJhbmQgd2hvc2UgY29lcmNpb24gaXMgaW52b2tlZCwgcGFydCBvZiB0aGUgcHJvY2Vzc1xuICBpcyByZWRvbmUgdXNpbmcgdGhlIG5ldyBvYmplY3QuXG5cbiogV2hlbiBhbiBpbi1wbGFjZSBvcGVyYXRvciAobGlrZSBcJ2BgKz1gYFwnKSBpcyB1c2VkLCBpZiB0aGUgbGVmdFxuICBvcGVyYW5kIGltcGxlbWVudHMgYGBfX2lvcF9fKClgYCwgaXQgaXMgaW52b2tlZCB3aXRob3V0IGFueVxuICBjb2VyY2lvbi4gIFdoZW4gdGhlIG9wZXJhdGlvbiBmYWxscyBiYWNrIHRvIGBgX19vcF9fKClgYCBhbmQvb3JcbiAgYGBfX3JvcF9fKClgYCwgdGhlIG5vcm1hbCBjb2VyY2lvbiBydWxlcyBhcHBseS5cblxuKiBJbiBgYHggKyB5YGAsIGlmICp4KiBpcyBhIHNlcXVlbmNlIHRoYXQgaW1wbGVtZW50cyBzZXF1ZW5jZVxuICBjb25jYXRlbmF0aW9uLCBzZXF1ZW5jZSBjb25jYXRlbmF0aW9uIGlzIGludm9rZWQuXG5cbiogSW4gYGB4ICogeWBgLCBpZiBvbmUgb3BlcmF0b3IgaXMgYSBzZXF1ZW5jZSB0aGF0IGltcGxlbWVudHMgc2VxdWVuY2VcbiAgcmVwZXRpdGlvbiwgYW5kIHRoZSBvdGhlciBpcyBhbiBpbnRlZ2VyIChgYGludGBgIG9yIGBgbG9uZ2BgKSxcbiAgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBpbnZva2VkLlxuXG4qIFJpY2ggY29tcGFyaXNvbnMgKGltcGxlbWVudGVkIGJ5IG1ldGhvZHMgYGBfX2VxX18oKWBgIGFuZCBzbyBvbilcbiAgbmV2ZXIgdXNlIGNvZXJjaW9uLiAgVGhyZWUtd2F5IGNvbXBhcmlzb24gKGltcGxlbWVudGVkIGJ5XG4gIGBgX19jbXBfXygpYGApIGRvZXMgdXNlIGNvZXJjaW9uIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgb3RoZXJcbiAgYmluYXJ5IG9wZXJhdGlvbnMgdXNlIGl0LlxuXG4qIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyBgYGludGBgLFxuICBgYGxvbmdgYCBhbmQgYGBmbG9hdGBgIGRvIG5vdCB1c2UgY29lcmNpb247IHRoZSB0eXBlIGBgY29tcGxleGBgXG4gIGhvd2V2ZXIgZG9lcyB1c2UgY29lcmNpb24gZm9yIGJpbmFyeSBvcGVyYXRvcnMgYW5kIHJpY2ggY29tcGFyaXNvbnMsXG4gIGRlc3BpdGUgdGhlIGFib3ZlIHJ1bGVzLiAgVGhlIGRpZmZlcmVuY2UgY2FuIGJlY29tZSBhcHBhcmVudCB3aGVuXG4gIHN1YmNsYXNzaW5nIHRoZXNlIHR5cGVzLiAgT3ZlciB0aW1lLCB0aGUgdHlwZSBgYGNvbXBsZXhgYCBtYXkgYmVcbiAgZml4ZWQgdG8gYXZvaWQgY29lcmNpb24uIEFsbCB0aGVzZSB0eXBlcyBpbXBsZW1lbnQgYVxuICBgYF9fY29lcmNlX18oKWBgIG1ldGhvZCwgZm9yIHVzZSBieSB0aGUgYnVpbHQtaW4gYGBjb2VyY2UoKWBgXG4gIGZ1bmN0aW9uLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cCBmb3Igb2xkLXN0eWxlIGNsYXNzZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIG9sZC1zdHlsZSBjbGFzc2VzLCBzcGVjaWFsIG1ldGhvZHMgYXJlIGFsd2F5cyBsb29rZWQgdXAgaW4gZXhhY3RseVxudGhlIHNhbWUgd2F5IGFzIGFueSBvdGhlciBtZXRob2Qgb3IgYXR0cmlidXRlLiBUaGlzIGlzIHRoZSBjYXNlXG5yZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1ldGhvZCBpcyBiZWluZyBsb29rZWQgdXAgZXhwbGljaXRseSBhcyBpblxuYGB4Ll9fZ2V0aXRlbV9fKGkpYGAgb3IgaW1wbGljaXRseSBhcyBpbiBgYHhbaV1gYC5cblxuVGhpcyBiZWhhdmlvdXIgbWVhbnMgdGhhdCBzcGVjaWFsIG1ldGhvZHMgbWF5IGV4aGliaXQgZGlmZmVyZW50XG5iZWhhdmlvdXIgZm9yIGRpZmZlcmVudCBpbnN0YW5jZXMgb2YgYSBzaW5nbGUgb2xkLXN0eWxlIGNsYXNzIGlmIHRoZVxuYXBwcm9wcmlhdGUgc3BlY2lhbCBhdHRyaWJ1dGVzIGFyZSBzZXQgZGlmZmVyZW50bHk6XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjMSA9IEMoKVxuICAgPj4+IGMyID0gQygpXG4gICA+Pj4gYzEuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGMyLl9fbGVuX18gPSBsYW1iZGE6IDlcbiAgID4+PiBsZW4oYzEpXG4gICA1XG4gICA+Pj4gbGVuKGMyKVxuICAgOVxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cCBmb3IgbmV3LXN0eWxlIGNsYXNzZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIG5ldy1zdHlsZSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlXG5vbmx5IGd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90XG5pbiB0aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb24gKHVubGlrZSB0aGUgZXF1aXZhbGVudCBleGFtcGxlXG53aXRoIG9sZC1zdHlsZSBjbGFzc2VzKTpcblxuICAgPj4+IGNsYXNzIEMob2JqZWN0KTpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyBgYF9faGFzaF9fKClgYCBhbmQgYGBfX3JlcHJfXygpYGAgdGhhdCBhcmUgaW1wbGVtZW50ZWRcbmJ5IGFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mXG50aGVzZSBtZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsXG53aGVuIGludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCAiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIlxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCk6XG4gICAuLi4gICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhXG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50ICJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCJcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uXG5wcm92aWRlcyBzaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlXG5pbnRlcnByZXRlciwgYXQgdGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2ZcbnNwZWNpYWwgbWV0aG9kcyAodGhlIHNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdFxuaXRzZWxmIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSwgdW5kZXJcbiAgICBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2QgaWRlYVxuICAgIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmIGl0IGlzXG4gICAgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzIGBgX19hZGRfXygpYGApIGZhaWxzIHRoZSBvcGVyYXRpb24gaXNcbiAgICBub3Qgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCisgJ3NwZWNpYWxhdHRycyc6IHUiXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSBgYGRpcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3Qnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5vYmplY3QuX19tZXRob2RzX19cblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMjogVXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGRpcigpYGBcbiAgIHRvIGdldCBhIGxpc3Qgb2YgYW4gb2JqZWN0J3MgYXR0cmlidXRlcy4gVGhpcyBhdHRyaWJ1dGUgaXMgbm9cbiAgIGxvbmdlciBhdmFpbGFibGUuXG5cbm9iamVjdC5fX21lbWJlcnNfX1xuXG4gICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi4yOiBVc2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgZGlyKClgYFxuICAgdG8gZ2V0IGEgbGlzdCBvZiBhbiBvYmplY3QncyBhdHRyaWJ1dGVzLiBUaGlzIGF0dHJpYnV0ZSBpcyBub1xuICAgbG9uZ2VyIGF2YWlsYWJsZS5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBvbmx5IHN1cHBvcnRlZCBieSAqbmV3LXN0eWxlIGNsYXNzKmVzLlxuXG5jbGFzcy5fX21yb19fXG5cbiAgIFRoaXMgYXR0cmlidXRlIGlzIGEgdHVwbGUgb2YgY2xhc3NlcyB0aGF0IGFyZSBjb25zaWRlcmVkIHdoZW5cbiAgIGxvb2tpbmcgZm9yIGJhc2UgY2xhc3NlcyBkdXJpbmcgbWV0aG9kIHJlc29sdXRpb24uXG5cbmNsYXNzLm1ybygpXG5cbiAgIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgbWV0YWNsYXNzIHRvIGN1c3RvbWl6ZSB0aGVcbiAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIGZvciBpdHMgaW5zdGFuY2VzLiAgSXQgaXMgY2FsbGVkIGF0IGNsYXNzXG4gICBpbnN0YW50aWF0aW9uLCBhbmQgaXRzIHJlc3VsdCBpcyBzdG9yZWQgaW4gYGBfX21yb19fYGAuXG5cbmNsYXNzLl9fc3ViY2xhc3Nlc19fKClcblxuICAgRWFjaCBuZXctc3R5bGUgY2xhc3Mga2VlcHMgYSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBpdHNcbiAgIGltbWVkaWF0ZSBzdWJjbGFzc2VzLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRob3NlXG4gICByZWZlcmVuY2VzIHN0aWxsIGFsaXZlLiBFeGFtcGxlOlxuXG4gICAgICA+Pj4gaW50Ll9fc3ViY2xhc3Nlc19fKClcbiAgICAgIFs8dHlwZSAnYm9vbCc+XVxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlc2Ugc3BlY2lhbCBtZXRob2RzIG1heSBiZSBmb3VuZCBpblxuICAgIHRoZSBQeXRob24gUmVmZXJlbmNlIE1hbnVhbCAoKkJhc2ljIGN1c3RvbWl6YXRpb24qKS5cblxuWzJdIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBsaXN0IGBgWzEsIDJdYGAgaXMgY29uc2lkZXJlZCBlcXVhbCB0b1xuICAgIGBgWzEuMCwgMi4wXWBgLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhbid0IHRlbGwgdGhlIHR5cGUgb2YgdGhlXG4gICAgb3BlcmFuZHMuXG5cbls0XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYSBzaW5nbGV0b25cbiAgICB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cblxuWzVdIFRoZSBhZHZhbnRhZ2Ugb2YgbGVhdmluZyB0aGUgbmV3bGluZSBvbiBpcyB0aGF0IHJldHVybmluZyBhbiBlbXB0eVxuICAgIHN0cmluZyBpcyB0aGVuIGFuIHVuYW1iaWd1b3VzIEVPRiBpbmRpY2F0aW9uLiAgSXQgaXMgYWxzbyBwb3NzaWJsZVxuICAgIChpbiBjYXNlcyB3aGVyZSBpdCBtaWdodCBtYXR0ZXIsIGZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBtYWtlXG4gICAgYW4gZXhhY3QgY29weSBvZiBhIGZpbGUgd2hpbGUgc2Nhbm5pbmcgaXRzIGxpbmVzKSB0byB0ZWxsIHdoZXRoZXJcbiAgICB0aGUgbGFzdCBsaW5lIG9mIGEgZmlsZSBlbmRlZCBpbiBhIG5ld2xpbmUgb3Igbm90ICh5ZXMgdGhpc1xuICAgIGhhcHBlbnMhKS5cbiIsCisgJ3NwZWNpYWxuYW1lcyc6IHUnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgYGBfX2dldGl0ZW1fXygpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzXG5jbGFzcywgdGhlbiBgYHhbaV1gYCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYGB4Ll9fZ2V0aXRlbV9fKGkpYGAgZm9yXG5vbGQtc3R5bGUgY2xhc3NlcyBhbmQgYGB0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpYGAgZm9yIG5ldy1zdHlsZVxuY2xhc3Nlcy4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uXG5yYWlzZSBhbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmV4Y190cmFjZWJhY2tgYCBvciBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiAgQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlXG4gICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZFxuICAgICB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLWxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC5cbiAgICAgUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlXG4gICAgIGluZm9ybWF0aW9uIGFib3V0IGhvdyBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlXG4gICAgIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYFxuICAgICB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiBhbmQgYnkgc3RyaW5nXG4gICBjb252ZXJzaW9ucyAocmV2ZXJzZSBxdW90ZXMpIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCIgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXMgc2hvdWxkIGxvb2tcbiAgIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gcmVjcmVhdGUgYW5cbiAgIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCkuICBJZlxuICAgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGBgPC4uLnNvbWUgdXNlZnVsXG4gICBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgIGJ1dCBub3RcbiAgIGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBzdHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSB0aGUgYGBwcmludGBgXG4gICBzdGF0ZW1lbnQgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gIFRoaXMgZGlmZmVycyBmcm9tIGBgX19yZXByX18oKWBgIGluIHRoYXQgaXQgZG9lcyBub3QgaGF2ZVxuICAgdG8gYmUgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYSBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZVxuICAgcmVwcmVzZW50YXRpb24gbWF5IGJlIHVzZWQgaW5zdGVhZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgTmV3IGluIHZlcnNpb24gMi4xLlxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLCBhbmQgYXJlIGNhbGxlZFxuICAgZm9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGluIHByZWZlcmVuY2UgdG8gYGBfX2NtcF9fKClgYCBiZWxvdy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgYW5kXG4gICBgYHg8PnlgYCBjYWxsIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZFxuICAgYGB4Pj15YGAgY2FsbHMgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9fY21wX18oc2VsZiwgb3RoZXIpXG5cbiAgIENhbGxlZCBieSBjb21wYXJpc29uIG9wZXJhdGlvbnMgaWYgcmljaCBjb21wYXJpc29uIChzZWUgYWJvdmUpIGlzXG4gICBub3QgZGVmaW5lZC4gIFNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIGBgc2VsZiA8IG90aGVyYGAsXG4gICB6ZXJvIGlmIGBgc2VsZiA9PSBvdGhlcmBgLCBhIHBvc2l0aXZlIGludGVnZXIgaWYgYGBzZWxmID4gb3RoZXJgYC5cbiAgIElmIG5vIGBgX19jbXBfXygpYGAsIGBgX19lcV9fKClgYCBvciBgYF9fbmVfXygpYGAgb3BlcmF0aW9uIGlzXG4gICBkZWZpbmVkLCBjbGFzcyBpbnN0YW5jZXMgYXJlIGNvbXBhcmVkIGJ5IG9iamVjdCBpZGVudGl0eVxuICAgKCJhZGRyZXNzIikuICBTZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgYGBfX2hhc2hfXygpYGAgZm9yIHNvbWVcbiAgIGltcG9ydGFudCBub3RlcyBvbiBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b21cbiAgIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuIChOb3RlOiB0aGVcbiAgIHJlc3RyaWN0aW9uIHRoYXQgZXhjZXB0aW9ucyBhcmUgbm90IHByb3BhZ2F0ZWQgYnkgYGBfX2NtcF9fKClgYCBoYXNcbiAgIGJlZW4gcmVtb3ZlZCBzaW5jZSBQeXRob24gMS41Lilcblxub2JqZWN0Ll9fcmNtcF9fKHNlbGYsIG90aGVyKVxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4xOiBObyBsb25nZXIgc3VwcG9ydGVkLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYSBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBtZXRob2RcbiAgIGl0IHNob3VsZCBub3QgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXRcbiAgIGRlZmluZXMgYGBfX2NtcF9fKClgYCBvciBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzXG4gICBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGluIGhhc2hlZCBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGEgYGBfX2NtcF9fKClgYCBvclxuICAgYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9ucyByZXF1aXJlIHRoYXQgYSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZVxuICAgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fY21wX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYGBpZCh4KWBgLlxuXG4gICBDbGFzc2VzIHdoaWNoIGluaGVyaXQgYSBgYF9faGFzaF9fKClgYCBtZXRob2QgZnJvbSBhIHBhcmVudCBjbGFzc1xuICAgYnV0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiBgYF9fY21wX18oKWBgIG9yIGBgX19lcV9fKClgYCBzdWNoIHRoYXRcbiAgIHRoZSBoYXNoIHZhbHVlIHJldHVybmVkIGlzIG5vIGxvbmdlciBhcHByb3ByaWF0ZSAoZS5nLiBieSBzd2l0Y2hpbmdcbiAgIHRvIGEgdmFsdWUtYmFzZWQgY29uY2VwdCBvZiBlcXVhbGl0eSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0XG4gICBpZGVudGl0eSBiYXNlZCBlcXVhbGl0eSkgY2FuIGV4cGxpY2l0bHkgZmxhZyB0aGVtc2VsdmVzIGFzIGJlaW5nXG4gICB1bmhhc2hhYmxlIGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi5cbiAgIERvaW5nIHNvIG1lYW5zIHRoYXQgbm90IG9ubHkgd2lsbCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHJhaXNlIGFuXG4gICBhcHByb3ByaWF0ZSBgYFR5cGVFcnJvcmBgIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyXG4gICBoYXNoIHZhbHVlLCBidXQgdGhleSB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYFxuICAgKHVubGlrZSBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGVpciBvd24gYGBfX2hhc2hfXygpYGAgdG8gZXhwbGljaXRseVxuICAgcmFpc2UgYGBUeXBlRXJyb3JgYCkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IGBgX19oYXNoX18oKWBgIG1heSBub3cgYWxzbyByZXR1cm4gYSBsb25nXG4gICBpbnRlZ2VyIG9iamVjdDsgdGhlIDMyLWJpdCBpbnRlZ2VyIGlzIHRoZW4gZGVyaXZlZCBmcm9tIHRoZSBoYXNoIG9mXG4gICB0aGF0IG9iamVjdC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogYGBfX2hhc2hfX2BgIG1heSBub3cgYmUgc2V0IHRvIGBgTm9uZWBgIHRvXG4gICBleHBsaWNpdGx5IGZsYWcgaW5zdGFuY2VzIG9mIGEgY2xhc3MgYXMgdW5oYXNoYWJsZS5cblxub2JqZWN0Ll9fbm9uemVyb19fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAsIG9yIHRoZWlyIGludGVnZXJcbiAgIGVxdWl2YWxlbnRzIGBgMGBgIG9yIGBgMWBgLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3QgZGVmaW5lZCxcbiAgIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ub256ZXJvX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cblxub2JqZWN0Ll9fdW5pY29kZV9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGB1bmljb2RlKClgYCBidWlsdC1pbjsgc2hvdWxkIHJldHVybiBhIFVuaWNvZGVcbiAgIG9iamVjdC4gV2hlbiB0aGlzIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgc3RyaW5nIGNvbnZlcnNpb24gaXNcbiAgIGF0dGVtcHRlZCwgYW5kIHRoZSByZXN1bHQgb2Ygc3RyaW5nIGNvbnZlcnNpb24gaXMgY29udmVydGVkIHRvXG4gICBVbmljb2RlIHVzaW5nIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZy5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIGluIG5ldy1zdHlsZSBjbGFzc2VzLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAgKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiBgYF9fc2V0YXR0cl9fKClgYCB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIG5vdCBzaW1wbHkgZXhlY3V0ZSBgYHNlbGYubmFtZSA9IHZhbHVlYGAgLS0tIHRoaXMgd291bGRcbiAgIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwgdG8gaXRzZWxmLiAgSW5zdGVhZCwgaXQgc2hvdWxkIGluc2VydCB0aGVcbiAgIHZhbHVlIGluIHRoZSBkaWN0aW9uYXJ5IG9mIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGUuZy4sXG4gICBgYHNlbGYuX19kaWN0X19bbmFtZV0gPSB2YWx1ZWBgLiAgRm9yIG5ldy1zdHlsZSBjbGFzc2VzLCByYXRoZXJcbiAgIHRoYW4gYWNjZXNzaW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5LCBpdCBzaG91bGQgY2FsbCB0aGUgYmFzZVxuICAgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlgYC5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgYGBfX3NldGF0dHJfXygpYGAgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgYGBkZWwgb2JqLm5hbWVgYCBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxuXG5Nb3JlIGF0dHJpYnV0ZSBhY2Nlc3MgZm9yIG5ldy1zdHlsZSBjbGFzc2VzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHRvIG5ldy1zdHlsZSBjbGFzc2VzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzXG4gICBgYF9fZ2V0YXR0cl9fKClgYCwgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIGVpdGhlciBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgLiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpXG4gICBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi4gSW4gb3JkZXJcbiAgIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpbiB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uXG4gICBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0b1xuICAgYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlgYC5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHNcbiAgICAgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXggb3JcbiAgICAgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCBmb3IgbmV3LXN0eWxlXG4gICAgIGNsYXNzZXMqLlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiB0aGVcbmNsYXNzIGRpY3Rpb25hcnkgb2YgYW5vdGhlciBuZXctc3R5bGUgY2xhc3MsIGtub3duIGFzIHRoZSAqb3duZXIqXG5jbGFzcy4gSW4gdGhlIGV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGVcbndob3NlIG5hbWUgaXMgdGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCdcbmBgX19kaWN0X19gYC4gIERlc2NyaXB0b3JzIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGFzIG5ldy1zdHlsZVxuY2xhc3NlcyB0aGVtc2VsdmVzLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuICBOb3RlIHRoYXQgZGVzY3JpcHRvcnMgYXJlIG9ubHkgaW52b2tlZCBmb3IgbmV3XG5zdHlsZSBvYmplY3RzIG9yIGNsYXNzZXMgKG9uZXMgdGhhdCBzdWJjbGFzcyBgYG9iamVjdCgpYGAgb3JcbmBgdHlwZSgpYGApLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsIGBgYS54YGAuXG5Ib3cgdGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gYGBhYGA6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgIGBgeC5fX2dldF9fKGEpYGAuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBuZXctc3R5bGUgb2JqZWN0IGluc3RhbmNlLCBgYGEueGBgIGlzIHRyYW5zZm9ybWVkXG4gICBpbnRvIHRoZSBjYWxsOiBgYHR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSlgYC5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIG5ldy1zdHlsZSBjbGFzcywgYGBBLnhgYCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogYGBBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpYGAuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmIGBgYWBgIGlzIGFuIGluc3RhbmNlIG9mIGBgc3VwZXJgYCwgdGhlbiB0aGUgYmluZGluZyBgYHN1cGVyKEIsXG4gICBvYmopLm0oKWBgIHNlYXJjaGVzIGBgb2JqLl9fY2xhc3NfXy5fX21yb19fYGAgZm9yIHRoZSBiYXNlIGNsYXNzXG4gICBgYEFgYCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYGBCYGAgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvclxuICAgd2l0aCB0aGUgY2FsbDogYGBBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgQSlgYC5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCBhbmQgYGBfX2RlbGV0ZV9fKClgYC5cbklmIGl0IGRvZXMgbm90IGRlZmluZSBgYF9fZ2V0X18oKWBgLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGxcbnJldHVybiB0aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZVxub2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzIGBgX19zZXRfXygpYGBcbmFuZC9vciBgYF9fZGVsZXRlX18oKWBgLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lc1xubmVpdGhlciwgaXQgaXMgYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnNcbmRlZmluZSBib3RoIGBgX19nZXRfXygpYGAgYW5kIGBgX19zZXRfXygpYGAsIHdoaWxlIG5vbi1kYXRhXG5kZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlIGBgX19nZXRfXygpYGAgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoXG5gYF9fc2V0X18oKWBgIGFuZCBgYF9fZ2V0X18oKWBgIGRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uXG5pbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW4gY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZVxub3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgYGBzdGF0aWNtZXRob2QoKWBgIGFuZCBgYGNsYXNzbWV0aG9kKClgYClcbmFyZSBpbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlIGBgcHJvcGVydHkoKWBgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGJvdGggb2xkIGFuZCBuZXctc3R5bGUgY2xhc3NlcyBoYXZlIGFcbmRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZSBzdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHNcbmhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZSB2YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZVxuYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZSBudW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBuZXctc3R5bGVcbmNsYXNzIGRlZmluaXRpb24uICBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZlxuaW5zdGFuY2UgdmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvXG5ob2xkIGEgdmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXNcbm5vdCBjcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhXG4gICBuZXctc3R5bGUgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWRcbiAgIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZFxuICAgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaCBpbnN0YW5jZS5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgYGBBdHRyaWJ1dGVFcnJvcmBgLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICBgYFwnX19kaWN0X19cJ2BgIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhZGRpbmcgYGBcJ19fZGljdF9fXCdgYCB0byB0aGVcbiAgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gd291bGQgbm90IGVuYWJsZSB0aGUgYXNzaWdubWVudCBvZiBuZXdcbiAgYXR0cmlidXRlcyBub3Qgc3BlY2lmaWNhbGx5IGxpc3RlZCBpbiB0aGUgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbiAgdmFyaWFibGUgbmFtZXMuXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhZGRpbmcgYGBcJ19fd2Vha3JlZl9fXCdgYCB0byB0aGVcbiAgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gd291bGQgbm90IGVuYWJsZSBzdXBwb3J0IGZvciB3ZWFrXG4gIHJlZmVyZW5jZXMuXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZSBpbnN0YW5jZVxuICB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlIChleGNlcHQgYnlcbiAgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS4gVGhpc1xuICByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzIGBgbG9uZ2BgLCBgYHN0cmBgIGFuZFxuICBgYHR1cGxlYGAuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5ncyBtYXlcbiAgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cbiAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNjogUHJldmlvdXNseSwgKl9fY2xhc3NfXyogYXNzaWdubWVudCByYWlzZWQgYW5cbiAgZXJyb3IgaWYgZWl0aGVyIG5ldyBvciBvbGQgY2xhc3MgaGFkICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBuZXctc3R5bGUgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgYGB0eXBlKClgYC4gQVxuY2xhc3MgZGVmaW5pdGlvbiBpcyByZWFkIGludG8gYSBzZXBhcmF0ZSBuYW1lc3BhY2UgYW5kIHRoZSB2YWx1ZSBvZlxuY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgZGljdClgYC5cblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyByZWFkLCBpZiAqX19tZXRhY2xhc3NfXyogaXMgZGVmaW5lZCB0aGVuXG50aGUgY2FsbGFibGUgYXNzaWduZWQgdG8gaXQgd2lsbCBiZSBjYWxsZWQgaW5zdGVhZCBvZiBgYHR5cGUoKWBgLiBUaGlzXG5hbGxvd3MgY2xhc3NlcyBvciBmdW5jdGlvbnMgdG8gYmUgd3JpdHRlbiB3aGljaCBtb25pdG9yIG9yIGFsdGVyIHRoZVxuY2xhc3MgY3JlYXRpb24gcHJvY2VzczpcblxuKiBNb2RpZnlpbmcgdGhlIGNsYXNzIGRpY3Rpb25hcnkgcHJpb3IgdG8gdGhlIGNsYXNzIGJlaW5nIGNyZWF0ZWQuXG5cbiogUmV0dXJuaW5nIGFuIGluc3RhbmNlIG9mIGFub3RoZXIgY2xhc3MgLS0gZXNzZW50aWFsbHkgcGVyZm9ybWluZyB0aGVcbiAgcm9sZSBvZiBhIGZhY3RvcnkgZnVuY3Rpb24uXG5cblRoZXNlIHN0ZXBzIHdpbGwgaGF2ZSB0byBiZSBwZXJmb3JtZWQgaW4gdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgXG5tZXRob2QgLS0gYGB0eXBlLl9fbmV3X18oKWBgIGNhbiB0aGVuIGJlIGNhbGxlZCBmcm9tIHRoaXMgbWV0aG9kIHRvXG5jcmVhdGUgYSBjbGFzcyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiAgVGhpcyBleGFtcGxlIGFkZHMgYSBuZXdcbmVsZW1lbnQgdG8gdGhlIGNsYXNzIGRpY3Rpb25hcnkgYmVmb3JlIGNyZWF0aW5nIHRoZSBjbGFzczpcblxuICAgY2xhc3MgbWV0YWNscyh0eXBlKTpcbiAgICAgICBkZWYgX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkaWN0KTpcbiAgICAgICAgICAgZGljdFtcJ2Zvb1wnXSA9IFwnbWV0YWNscyB3YXMgaGVyZVwnXG4gICAgICAgICAgIHJldHVybiB0eXBlLl9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGljdClcblxuWW91IGNhbiBvZiBjb3Vyc2UgYWxzbyBvdmVycmlkZSBvdGhlciBjbGFzcyBtZXRob2RzIChvciBhZGQgbmV3XG5tZXRob2RzKTsgZm9yIGV4YW1wbGUgZGVmaW5pbmcgYSBjdXN0b20gYGBfX2NhbGxfXygpYGAgbWV0aG9kIGluIHRoZVxubWV0YWNsYXNzIGFsbG93cyBjdXN0b20gYmVoYXZpb3Igd2hlbiB0aGUgY2xhc3MgaXMgY2FsbGVkLCBlLmcuIG5vdFxuYWx3YXlzIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXG5fX21ldGFjbGFzc19fXG5cbiAgIFRoaXMgdmFyaWFibGUgY2FuIGJlIGFueSBjYWxsYWJsZSBhY2NlcHRpbmcgYXJndW1lbnRzIGZvciBgYG5hbWVgYCxcbiAgIGBgYmFzZXNgYCwgYW5kIGBgZGljdGBgLiAgVXBvbiBjbGFzcyBjcmVhdGlvbiwgdGhlIGNhbGxhYmxlIGlzIHVzZWRcbiAgIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIGBgdHlwZSgpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgcHJlY2VkZW5jZVxucnVsZXM6XG5cbiogSWYgYGBkaWN0W1wnX19tZXRhY2xhc3NfX1wnXWBgIGV4aXN0cywgaXQgaXMgdXNlZC5cblxuKiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBiYXNlIGNsYXNzLCBpdHMgbWV0YWNsYXNzIGlzXG4gIHVzZWQgKHRoaXMgbG9va3MgZm9yIGEgKl9fY2xhc3NfXyogYXR0cmlidXRlIGZpcnN0IGFuZCBpZiBub3QgZm91bmQsXG4gIHVzZXMgaXRzIHR5cGUpLlxuXG4qIE90aGVyd2lzZSwgaWYgYSBnbG9iYWwgdmFyaWFibGUgbmFtZWQgX19tZXRhY2xhc3NfXyBleGlzdHMsIGl0IGlzXG4gIHVzZWQuXG5cbiogT3RoZXJ3aXNlLCB0aGUgb2xkLXN0eWxlLCBjbGFzc2ljIG1ldGFjbGFzcyAodHlwZXMuQ2xhc3NUeXBlKSBpc1xuICB1c2VkLlxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGluZyBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuXG5DdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbk5ldyBpbiB2ZXJzaW9uIDIuNi5cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuYGBpc2luc3RhbmNlKClgYCBhbmQgYGBpc3N1YmNsYXNzKClgYCBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgYGBhYmMuQUJDTWV0YWBgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kc1xuaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcbiAgICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyBgYGlzaW5zdGFuY2UoKWBgIGFuZFxuICAgICAgYGBpc3N1YmNsYXNzKClgYCBiZWhhdmlvciB0aHJvdWdoIGBgX19pbnN0YW5jZWNoZWNrX18oKWBgIGFuZFxuICAgICAgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5XG4gICAgICBpbiB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlIGBgYWJjYGBcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAoRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbWV0aG9kXG5gYF9fZ2V0c2xpY2VfXygpYGAgKHNlZSBiZWxvdykgY2FuIGFsc28gYmUgZGVmaW5lZCB0byBoYW5kbGUgc2ltcGxlLFxuYnV0IG5vdCBleHRlbmRlZCBzbGljZXMuKSBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBoYXNfa2V5KClgYCxcbmBgZ2V0KClgYCwgYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgaXRlcmtleXMoKWBgLFxuYGBpdGVydmFsdWVzKClgYCwgYGBpdGVyaXRlbXMoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsXG5gYGNvcHkoKWBgLCBhbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwnc1xuc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgVXNlckRpY3RgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBEaWN0TWl4aW5gYCBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZlxuYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLCBgYF9fZGVsaXRlbV9fKClgYCwgYW5kXG5gYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZSBtZXRob2RzIGBgYXBwZW5kKClgYCxcbmBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLCBgYGluc2VydCgpYGAsIGBgcG9wKClgYCxcbmBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCwgbGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdFxub2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmdcbmNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZyByZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGVcbm1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsIGBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLFxuYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgIGRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90XG5kZWZpbmUgYGBfX2NvZXJjZV9fKClgYCBvciBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIGJlIGVxdWl2YWxlbnQgb2YgYGBoYXNfa2V5KClgYDtcbmZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBgaXRlcmtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2VzblwndCBkZWZpbmUgYSBgYF9fbm9uemVyb19fKClgYCBtZXRob2QgYW5kIHdob3NlXG4gICBgYF9fbGVuX18oKWBgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZba2V5XWBgLiBGb3Igc2VxdWVuY2VcbiAgIHR5cGVzLCB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuXG4gICBOb3RlIHRoYXQgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlXG4gICBjbGFzcyB3aXNoZXMgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZVxuICAgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLiBJZiAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsXG4gICBgYFR5cGVFcnJvcmBgIG1heSBiZSByYWlzZWQ7IGlmIG9mIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mXG4gICBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mXG4gICBuZWdhdGl2ZSB2YWx1ZXMpLCBgYEluZGV4RXJyb3JgYCBzaG91bGQgYmUgcmFpc2VkLiBGb3IgbWFwcGluZ1xuICAgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGUgY29udGFpbmVyKSwgYGBLZXlFcnJvcmBgXG4gICBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiBgYGZvcmBgIGxvb3BzIGV4cGVjdCB0aGF0IGFuIGBgSW5kZXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvclxuICAgYGBfX2dldGl0ZW1fXygpYGAuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgYGBfX2dldGl0ZW1fXygpYGBcbiAgIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIsIGFuZCBzaG91bGQgYWxzbyBiZSBtYWRlXG4gICBhdmFpbGFibGUgYXMgdGhlIG1ldGhvZCBgYGl0ZXJrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjYuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzIChgYGluYGAgYW5kIGBgbm90IGluYGApIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuXG5cbkFkZGl0aW9uYWwgbWV0aG9kcyBmb3IgZW11bGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG9wdGlvbmFsIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZnVydGhlciBlbXVsYXRlXG5zZXF1ZW5jZSBvYmplY3RzLiAgSW1tdXRhYmxlIHNlcXVlbmNlcyBtZXRob2RzIHNob3VsZCBhdCBtb3N0IG9ubHlcbmRlZmluZSBgYF9fZ2V0c2xpY2VfXygpYGA7IG11dGFibGUgc2VxdWVuY2VzIG1pZ2h0IGRlZmluZSBhbGwgdGhyZWVcbm1ldGhvZHMuXG5cbm9iamVjdC5fX2dldHNsaWNlX18oc2VsZiwgaSwgailcblxuICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuMDogU3VwcG9ydCBzbGljZSBvYmplY3RzIGFzIHBhcmFtZXRlcnNcbiAgIHRvIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIChIb3dldmVyLCBidWlsdC1pbiB0eXBlcyBpblxuICAgQ1B5dGhvbiBjdXJyZW50bHkgc3RpbGwgaW1wbGVtZW50IGBgX19nZXRzbGljZV9fKClgYC4gIFRoZXJlZm9yZSxcbiAgIHlvdSBoYXZlIHRvIG92ZXJyaWRlIGl0IGluIGRlcml2ZWQgY2xhc3NlcyB3aGVuIGltcGxlbWVudGluZ1xuICAgc2xpY2luZy4pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiBgYHNlbGZbaTpqXWBgLiBUaGUgcmV0dXJuZWRcbiAgIG9iamVjdCBzaG91bGQgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyAqc2VsZiouICBOb3RlIHRoYXQgbWlzc2luZyAqaSpcbiAgIG9yICpqKiBpbiB0aGUgc2xpY2UgZXhwcmVzc2lvbiBhcmUgcmVwbGFjZWQgYnkgemVybyBvclxuICAgYGBzeXMubWF4aW50YGAsIHJlc3BlY3RpdmVseS4gIElmIG5lZ2F0aXZlIGluZGV4ZXMgYXJlIHVzZWQgaW4gdGhlXG4gICBzbGljZSwgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaXMgYWRkZWQgdG8gdGhhdCBpbmRleC4gSWYgdGhlXG4gICBpbnN0YW5jZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgX19sZW5fXygpYGAgbWV0aG9kLCBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGlzIHJhaXNlZC4gTm8gZ3VhcmFudGVlIGlzIG1hZGUgdGhhdCBpbmRleGVzXG4gICBhZGp1c3RlZCB0aGlzIHdheSBhcmUgbm90IHN0aWxsIG5lZ2F0aXZlLiAgSW5kZXhlcyB3aGljaCBhcmVcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBhcmUgbm90IG1vZGlmaWVkLiBJZiBub1xuICAgYGBfX2dldHNsaWNlX18oKWBgIGlzIGZvdW5kLCBhIHNsaWNlIG9iamVjdCBpcyBjcmVhdGVkIGluc3RlYWQsIGFuZFxuICAgcGFzc2VkIHRvIGBgX19nZXRpdGVtX18oKWBgIGluc3RlYWQuXG5cbm9iamVjdC5fX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgc2VxdWVuY2UpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZbaTpqXWBgLiBTYW1lIG5vdGVzIGZvciAqaSpcbiAgIGFuZCAqaiogYXMgZm9yIGBgX19nZXRzbGljZV9fKClgYC5cblxuICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gSWYgbm8gYGBfX3NldHNsaWNlX18oKWBgIGlzIGZvdW5kLCBvclxuICAgZm9yIGV4dGVuZGVkIHNsaWNpbmcgb2YgdGhlIGZvcm0gYGBzZWxmW2k6ajprXWBgLCBhIHNsaWNlIG9iamVjdCBpc1xuICAgY3JlYXRlZCwgYW5kIHBhc3NlZCB0byBgYF9fc2V0aXRlbV9fKClgYCwgaW5zdGVhZCBvZlxuICAgYGBfX3NldHNsaWNlX18oKWBgIGJlaW5nIGNhbGxlZC5cblxub2JqZWN0Ll9fZGVsc2xpY2VfXyhzZWxmLCBpLCBqKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltpOmpdYGAuIFNhbWUgbm90ZXMgZm9yICppKlxuICAgYW5kICpqKiBhcyBmb3IgYGBfX2dldHNsaWNlX18oKWBgLiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBJZiBub1xuICAgYGBfX2RlbHNsaWNlX18oKWBgIGlzIGZvdW5kLCBvciBmb3IgZXh0ZW5kZWQgc2xpY2luZyBvZiB0aGUgZm9ybVxuICAgYGBzZWxmW2k6ajprXWBgLCBhIHNsaWNlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgcGFzc2VkIHRvXG4gICBgYF9fZGVsaXRlbV9fKClgYCwgaW5zdGVhZCBvZiBgYF9fZGVsc2xpY2VfXygpYGAgYmVpbmcgY2FsbGVkLlxuXG5Ob3RpY2UgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBvbmx5IGludm9rZWQgd2hlbiBhIHNpbmdsZSBzbGljZSB3aXRoIGFcbnNpbmdsZSBjb2xvbiBpcyB1c2VkLCBhbmQgdGhlIHNsaWNlIG1ldGhvZCBpcyBhdmFpbGFibGUuICBGb3Igc2xpY2Vcbm9wZXJhdGlvbnMgaW52b2x2aW5nIGV4dGVuZGVkIHNsaWNlIG5vdGF0aW9uLCBvciBpbiBhYnNlbmNlIG9mIHRoZVxuc2xpY2UgbWV0aG9kcywgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgIG9yXG5gYF9fZGVsaXRlbV9fKClgYCBpcyBjYWxsZWQgd2l0aCBhIHNsaWNlIG9iamVjdCBhcyBhcmd1bWVudC5cblxuVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlIGhvdyB0byBtYWtlIHlvdXIgcHJvZ3JhbSBvciBtb2R1bGVcbmNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiAoYXNzdW1pbmcgdGhhdCBtZXRob2RzXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAgYW5kIGBgX19kZWxpdGVtX18oKWBgIHN1cHBvcnRcbnNsaWNlIG9iamVjdHMgYXMgYXJndW1lbnRzKTpcblxuICAgY2xhc3MgTXlDbGFzczpcbiAgICAgICAuLi5cbiAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOlxuICAgICAgICAgICAuLi5cbiAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKTpcbiAgICAgICAgICAgLi4uXG4gICAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KTpcbiAgICAgICAgICAgLi4uXG5cbiAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDApOlxuICAgICAgICAgICAjIFRoZXkgd29uXCd0IGJlIGRlZmluZWQgaWYgdmVyc2lvbiBpcyBhdCBsZWFzdCAyLjAgZmluYWxcblxuICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOlxuICAgICAgICAgICAgICAgcmV0dXJuIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdXG4gICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgc2VxKTpcbiAgICAgICAgICAgICAgIHNlbGZbbWF4KDAsIGkpOm1heCgwLCBqKTpdID0gc2VxXG4gICAgICAgICAgIGRlZiBfX2RlbHNsaWNlX18oc2VsZiwgaSwgaik6XG4gICAgICAgICAgICAgICBkZWwgc2VsZlttYXgoMCwgaSk6bWF4KDAsIGopOl1cbiAgICAgICAuLi5cblxuTm90ZSB0aGUgY2FsbHMgdG8gYGBtYXgoKWBgOyB0aGVzZSBhcmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlXG5oYW5kbGluZyBvZiBuZWdhdGl2ZSBpbmRpY2VzIGJlZm9yZSB0aGUgYGBfXypzbGljZV9fKClgYCBtZXRob2RzIGFyZVxuY2FsbGVkLiAgV2hlbiBuZWdhdGl2ZSBpbmRleGVzIGFyZSB1c2VkLCB0aGUgYGBfXyppdGVtX18oKWBgIG1ldGhvZHNcbnJlY2VpdmUgdGhlbSBhcyBwcm92aWRlZCwgYnV0IHRoZSBgYF9fKnNsaWNlX18oKWBgIG1ldGhvZHMgZ2V0IGFcbiJjb29rZWQiIGZvcm0gb2YgdGhlIGluZGV4IHZhbHVlcy4gIEZvciBlYWNoIG5lZ2F0aXZlIGluZGV4IHZhbHVlLCB0aGVcbmxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgaXMgYWRkZWQgdG8gdGhlIGluZGV4IGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2Rcbih3aGljaCBtYXkgc3RpbGwgcmVzdWx0IGluIGEgbmVnYXRpdmUgaW5kZXgpOyB0aGlzIGlzIHRoZSBjdXN0b21hcnlcbmhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluZGV4ZXMgYnkgdGhlIGJ1aWx0LWluIHNlcXVlbmNlIHR5cGVzLCBhbmQgdGhlXG5gYF9fKml0ZW1fXygpYGAgbWV0aG9kcyBhcmUgZXhwZWN0ZWQgdG8gZG8gdGhpcyBhcyB3ZWxsLiAgSG93ZXZlcixcbnNpbmNlIHRoZXkgc2hvdWxkIGFscmVhZHkgYmUgZG9pbmcgdGhhdCwgbmVnYXRpdmUgaW5kZXhlcyBjYW5ub3QgYmVcbnBhc3NlZCBpbjsgdGhleSBtdXN0IGJlIGNvbnN0cmFpbmVkIHRvIHRoZSBib3VuZHMgb2YgdGhlIHNlcXVlbmNlXG5iZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBgYF9fKml0ZW1fXygpYGAgbWV0aG9kcy4gQ2FsbGluZyBgYG1heCgwLFxuaSlgYCBjb252ZW5pZW50bHkgcmV0dXJucyB0aGUgcHJvcGVyIHZhbHVlLlxuXG5cbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC8vYGAsIGBgJWBgLCBgYGRpdm1vZCgpYGAsXG4gICBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCwgYGB8YGApLiAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4ICsgeWBgLCB3aGVyZSAqeCogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2FkZF9fKClgYCBtZXRob2QsXG4gICBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSBgYF9fZGl2bW9kX18oKWBgIG1ldGhvZCBzaG91bGQgYmVcbiAgIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nIGBgX19mbG9vcmRpdl9fKClgYCBhbmQgYGBfX21vZF9fKClgYDsgaXRcbiAgIHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byBgYF9fdHJ1ZWRpdl9fKClgYCAoZGVzY3JpYmVkIGJlbG93KS4gIE5vdGVcbiAgIHRoYXQgYGBfX3Bvd19fKClgYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIGBgcG93KClgYCBmdW5jdGlvblxuICAgaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiBgYE5vdEltcGxlbWVudGVkYGAuXG5cbm9iamVjdC5fX2Rpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGUgZGl2aXNpb24gb3BlcmF0b3IgKGBgL2BgKSBpcyBpbXBsZW1lbnRlZCBieSB0aGVzZSBtZXRob2RzLiAgVGhlXG4gICBgYF9fdHJ1ZWRpdl9fKClgYCBtZXRob2QgaXMgdXNlZCB3aGVuIGBgX19mdXR1cmVfXy5kaXZpc2lvbmBgIGlzIGluXG4gICBlZmZlY3QsIG90aGVyd2lzZSBgYF9fZGl2X18oKWBgIGlzIHVzZWQuICBJZiBvbmx5IG9uZSBvZiB0aGVzZSB0d29cbiAgIG1ldGhvZHMgaXMgZGVmaW5lZCwgdGhlIG9iamVjdCB3aWxsIG5vdCBzdXBwb3J0IGRpdmlzaW9uIGluIHRoZVxuICAgYWx0ZXJuYXRlIGNvbnRleHQ7IGBgVHlwZUVycm9yYGAgd2lsbCBiZSByYWlzZWQgaW5zdGVhZC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAlYGAsIGBgZGl2bW9kKClgYCxcbiAgIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLCBgYHxgYCkgd2l0aFxuICAgcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWZcbiAgIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kXG4gICB0aGUgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcy4gWzJdIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGVcbiAgIHRoZSBleHByZXNzaW9uIGBgeCAtIHlgYCwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdFxuICAgaGFzIGFuIGBgX19yc3ViX18oKWBgIG1ldGhvZCwgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmXG4gICBgYHguX19zdWJfXyh5KWBgIHJldHVybnMgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fbG9uZ19fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGxvbmcoKWBgLCBhbmQgYGBmbG9hdCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19vY3RfXyhzZWxmKVxub2JqZWN0Ll9faGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgb2N0KClgYCBhbmQgYGBoZXgoKWBgLlxuICAgU2hvdWxkIHJldHVybiBhIHN0cmluZyB2YWx1ZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nKS4gIE11c3QgcmV0dXJuXG4gICBhbiBpbnRlZ2VyIChpbnQgb3IgbG9uZykuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxub2JqZWN0Ll9fY29lcmNlX18oc2VsZiwgb3RoZXIpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm1peGVkLW1vZGUiIG51bWVyaWMgYXJpdGhtZXRpYy4gIFNob3VsZCBlaXRoZXJcbiAgIHJldHVybiBhIDItdHVwbGUgY29udGFpbmluZyAqc2VsZiogYW5kICpvdGhlciogY29udmVydGVkIHRvIGFcbiAgIGNvbW1vbiBudW1lcmljIHR5cGUsIG9yIGBgTm9uZWBgIGlmIGNvbnZlcnNpb24gaXMgaW1wb3NzaWJsZS4gIFdoZW5cbiAgIHRoZSBjb21tb24gdHlwZSB3b3VsZCBiZSB0aGUgdHlwZSBvZiBgYG90aGVyYGAsIGl0IGlzIHN1ZmZpY2llbnQgdG9cbiAgIHJldHVybiBgYE5vbmVgYCwgc2luY2UgdGhlIGludGVycHJldGVyIHdpbGwgYWxzbyBhc2sgdGhlIG90aGVyXG4gICBvYmplY3QgdG8gYXR0ZW1wdCBhIGNvZXJjaW9uIChidXQgc29tZXRpbWVzLCBpZiB0aGUgaW1wbGVtZW50YXRpb25cbiAgIG9mIHRoZSBvdGhlciB0eXBlIGNhbm5vdCBiZSBjaGFuZ2VkLCBpdCBpcyB1c2VmdWwgdG8gZG8gdGhlXG4gICBjb252ZXJzaW9uIHRvIHRoZSBvdGhlciB0eXBlIGhlcmUpLiAgQSByZXR1cm4gdmFsdWUgb2ZcbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpcyBlcXVpdmFsZW50IHRvIHJldHVybmluZyBgYE5vbmVgYC5cblxuXG5Db2VyY2lvbiBydWxlc1xuPT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIHVzZWQgdG8gZG9jdW1lbnQgdGhlIHJ1bGVzIGZvciBjb2VyY2lvbi4gIEFzIHRoZSBsYW5ndWFnZVxuaGFzIGV2b2x2ZWQsIHRoZSBjb2VyY2lvbiBydWxlcyBoYXZlIGJlY29tZSBoYXJkIHRvIGRvY3VtZW50XG5wcmVjaXNlbHk7IGRvY3VtZW50aW5nIHdoYXQgb25lIHZlcnNpb24gb2Ygb25lIHBhcnRpY3VsYXJcbmltcGxlbWVudGF0aW9uIGRvZXMgaXMgdW5kZXNpcmFibGUuICBJbnN0ZWFkLCBoZXJlIGFyZSBzb21lIGluZm9ybWFsXG5ndWlkZWxpbmVzIHJlZ2FyZGluZyBjb2VyY2lvbi4gIEluIFB5dGhvbiAzLjAsIGNvZXJjaW9uIHdpbGwgbm90IGJlXG5zdXBwb3J0ZWQuXG5cbiogSWYgdGhlIGxlZnQgb3BlcmFuZCBvZiBhICUgb3BlcmF0b3IgaXMgYSBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QsXG4gIG5vIGNvZXJjaW9uIHRha2VzIHBsYWNlIGFuZCB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uIGlzXG4gIGludm9rZWQgaW5zdGVhZC5cblxuKiBJdCBpcyBubyBsb25nZXIgcmVjb21tZW5kZWQgdG8gZGVmaW5lIGEgY29lcmNpb24gb3BlcmF0aW9uLiBNaXhlZC1cbiAgbW9kZSBvcGVyYXRpb25zIG9uIHR5cGVzIHRoYXQgZG9uXCd0IGRlZmluZSBjb2VyY2lvbiBwYXNzIHRoZVxuICBvcmlnaW5hbCBhcmd1bWVudHMgdG8gdGhlIG9wZXJhdGlvbi5cblxuKiBOZXctc3R5bGUgY2xhc3NlcyAodGhvc2UgZGVyaXZlZCBmcm9tIGBgb2JqZWN0YGApIG5ldmVyIGludm9rZSB0aGVcbiAgYGBfX2NvZXJjZV9fKClgYCBtZXRob2QgaW4gcmVzcG9uc2UgdG8gYSBiaW5hcnkgb3BlcmF0b3I7IHRoZSBvbmx5XG4gIHRpbWUgYGBfX2NvZXJjZV9fKClgYCBpcyBpbnZva2VkIGlzIHdoZW4gdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gIGBgY29lcmNlKClgYCBpcyBjYWxsZWQuXG5cbiogRm9yIG1vc3QgaW50ZW50cyBhbmQgcHVycG9zZXMsIGFuIG9wZXJhdG9yIHRoYXQgcmV0dXJuc1xuICBgYE5vdEltcGxlbWVudGVkYGAgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBvbmUgdGhhdCBpcyBub3RcbiAgaW1wbGVtZW50ZWQgYXQgYWxsLlxuXG4qIEJlbG93LCBgYF9fb3BfXygpYGAgYW5kIGBgX19yb3BfXygpYGAgYXJlIHVzZWQgdG8gc2lnbmlmeSB0aGVcbiAgZ2VuZXJpYyBtZXRob2QgbmFtZXMgY29ycmVzcG9uZGluZyB0byBhbiBvcGVyYXRvcjsgYGBfX2lvcF9fKClgYCBpc1xuICB1c2VkIGZvciB0aGUgY29ycmVzcG9uZGluZyBpbi1wbGFjZSBvcGVyYXRvci4gIEZvciBleGFtcGxlLCBmb3IgdGhlXG4gIG9wZXJhdG9yIFwnYGArYGBcJywgYGBfX2FkZF9fKClgYCBhbmQgYGBfX3JhZGRfXygpYGAgYXJlIHVzZWQgZm9yIHRoZVxuICBsZWZ0IGFuZCByaWdodCB2YXJpYW50IG9mIHRoZSBiaW5hcnkgb3BlcmF0b3IsIGFuZCBgYF9faWFkZF9fKClgYFxuICBmb3IgdGhlIGluLXBsYWNlIHZhcmlhbnQuXG5cbiogRm9yIG9iamVjdHMgKngqIGFuZCAqeSosIGZpcnN0IGBgeC5fX29wX18oeSlgYCBpcyB0cmllZC4gIElmIHRoaXMgaXNcbiAgbm90IGltcGxlbWVudGVkIG9yIHJldHVybnMgYGBOb3RJbXBsZW1lbnRlZGBgLCBgYHkuX19yb3BfXyh4KWBgIGlzXG4gIHRyaWVkLiAgSWYgdGhpcyBpcyBhbHNvIG5vdCBpbXBsZW1lbnRlZCBvciByZXR1cm5zXG4gIGBgTm90SW1wbGVtZW50ZWRgYCwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBCdXQgc2VlXG4gIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOlxuXG4qIEV4Y2VwdGlvbiB0byB0aGUgcHJldmlvdXMgaXRlbTogaWYgdGhlIGxlZnQgb3BlcmFuZCBpcyBhbiBpbnN0YW5jZVxuICBvZiBhIGJ1aWx0LWluIHR5cGUgb3IgYSBuZXctc3R5bGUgY2xhc3MsIGFuZCB0aGUgcmlnaHQgb3BlcmFuZCBpcyBhblxuICBpbnN0YW5jZSBvZiBhIHByb3BlciBzdWJjbGFzcyBvZiB0aGF0IHR5cGUgb3IgY2xhc3MgYW5kIG92ZXJyaWRlc1xuICB0aGUgYmFzZVwncyBgYF9fcm9wX18oKWBgIG1ldGhvZCwgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgYGBfX3JvcF9fKClgYFxuICBtZXRob2QgaXMgdHJpZWQgKmJlZm9yZSogdGhlIGxlZnQgb3BlcmFuZFwncyBgYF9fb3BfXygpYGAgbWV0aG9kLlxuXG4gIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGEgc3ViY2xhc3MgY2FuIGNvbXBsZXRlbHkgb3ZlcnJpZGUgYmluYXJ5XG4gIG9wZXJhdG9ycy4gT3RoZXJ3aXNlLCB0aGUgbGVmdCBvcGVyYW5kXCdzIGBgX19vcF9fKClgYCBtZXRob2Qgd291bGRcbiAgYWx3YXlzIGFjY2VwdCB0aGUgcmlnaHQgb3BlcmFuZDogd2hlbiBhbiBpbnN0YW5jZSBvZiBhIGdpdmVuIGNsYXNzXG4gIGlzIGV4cGVjdGVkLCBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIHRoYXQgY2xhc3MgaXMgYWx3YXlzXG4gIGFjY2VwdGFibGUuXG5cbiogV2hlbiBlaXRoZXIgb3BlcmFuZCB0eXBlIGRlZmluZXMgYSBjb2VyY2lvbiwgdGhpcyBjb2VyY2lvbiBpcyBjYWxsZWRcbiAgYmVmb3JlIHRoYXQgdHlwZVwncyBgYF9fb3BfXygpYGAgb3IgYGBfX3JvcF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLFxuICBidXQgbm8gc29vbmVyLiAgSWYgdGhlIGNvZXJjaW9uIHJldHVybnMgYW4gb2JqZWN0IG9mIGEgZGlmZmVyZW50XG4gIHR5cGUgZm9yIHRoZSBvcGVyYW5kIHdob3NlIGNvZXJjaW9uIGlzIGludm9rZWQsIHBhcnQgb2YgdGhlIHByb2Nlc3NcbiAgaXMgcmVkb25lIHVzaW5nIHRoZSBuZXcgb2JqZWN0LlxuXG4qIFdoZW4gYW4gaW4tcGxhY2Ugb3BlcmF0b3IgKGxpa2UgXCdgYCs9YGBcJykgaXMgdXNlZCwgaWYgdGhlIGxlZnRcbiAgb3BlcmFuZCBpbXBsZW1lbnRzIGBgX19pb3BfXygpYGAsIGl0IGlzIGludm9rZWQgd2l0aG91dCBhbnlcbiAgY29lcmNpb24uICBXaGVuIHRoZSBvcGVyYXRpb24gZmFsbHMgYmFjayB0byBgYF9fb3BfXygpYGAgYW5kL29yXG4gIGBgX19yb3BfXygpYGAsIHRoZSBub3JtYWwgY29lcmNpb24gcnVsZXMgYXBwbHkuXG5cbiogSW4gYGB4ICsgeWBgLCBpZiAqeCogaXMgYSBzZXF1ZW5jZSB0aGF0IGltcGxlbWVudHMgc2VxdWVuY2VcbiAgY29uY2F0ZW5hdGlvbiwgc2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBpcyBpbnZva2VkLlxuXG4qIEluIGBgeCAqIHlgYCwgaWYgb25lIG9wZXJhdG9yIGlzIGEgc2VxdWVuY2UgdGhhdCBpbXBsZW1lbnRzIHNlcXVlbmNlXG4gIHJlcGV0aXRpb24sIGFuZCB0aGUgb3RoZXIgaXMgYW4gaW50ZWdlciAoYGBpbnRgYCBvciBgYGxvbmdgYCksXG4gIHNlcXVlbmNlIHJlcGV0aXRpb24gaXMgaW52b2tlZC5cblxuKiBSaWNoIGNvbXBhcmlzb25zIChpbXBsZW1lbnRlZCBieSBtZXRob2RzIGBgX19lcV9fKClgYCBhbmQgc28gb24pXG4gIG5ldmVyIHVzZSBjb2VyY2lvbi4gIFRocmVlLXdheSBjb21wYXJpc29uIChpbXBsZW1lbnRlZCBieVxuICBgYF9fY21wX18oKWBgKSBkb2VzIHVzZSBjb2VyY2lvbiB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIG90aGVyXG4gIGJpbmFyeSBvcGVyYXRpb25zIHVzZSBpdC5cblxuKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIG51bWVyaWMgdHlwZXMgYGBpbnRgYCxcbiAgYGBsb25nYGAsIGBgZmxvYXRgYCwgYW5kIGBgY29tcGxleGBgIGRvIG5vdCB1c2UgY29lcmNpb24uIEFsbCB0aGVzZVxuICB0eXBlcyBpbXBsZW1lbnQgYSBgYF9fY29lcmNlX18oKWBgIG1ldGhvZCwgZm9yIHVzZSBieSB0aGUgYnVpbHQtaW5cbiAgYGBjb2VyY2UoKWBgIGZ1bmN0aW9uLlxuXG4gIENoYW5nZWQgaW4gdmVyc2lvbiAyLjcuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5OZXcgaW4gdmVyc2lvbiAyLjUuXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBvbGQtc3R5bGUgY2xhc3Nlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3Igb2xkLXN0eWxlIGNsYXNzZXMsIHNwZWNpYWwgbWV0aG9kcyBhcmUgYWx3YXlzIGxvb2tlZCB1cCBpbiBleGFjdGx5XG50aGUgc2FtZSB3YXkgYXMgYW55IG90aGVyIG1ldGhvZCBvciBhdHRyaWJ1dGUuIFRoaXMgaXMgdGhlIGNhc2VcbnJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWV0aG9kIGlzIGJlaW5nIGxvb2tlZCB1cCBleHBsaWNpdGx5IGFzIGluXG5gYHguX19nZXRpdGVtX18oaSlgYCBvciBpbXBsaWNpdGx5IGFzIGluIGBgeFtpXWBgLlxuXG5UaGlzIGJlaGF2aW91ciBtZWFucyB0aGF0IHNwZWNpYWwgbWV0aG9kcyBtYXkgZXhoaWJpdCBkaWZmZXJlbnRcbmJlaGF2aW91ciBmb3IgZGlmZmVyZW50IGluc3RhbmNlcyBvZiBhIHNpbmdsZSBvbGQtc3R5bGUgY2xhc3MgaWYgdGhlXG5hcHByb3ByaWF0ZSBzcGVjaWFsIGF0dHJpYnV0ZXMgYXJlIHNldCBkaWZmZXJlbnRseTpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMxID0gQygpXG4gICA+Pj4gYzIgPSBDKClcbiAgID4+PiBjMS5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gYzIuX19sZW5fXyA9IGxhbWJkYTogOVxuICAgPj4+IGxlbihjMSlcbiAgIDVcbiAgID4+PiBsZW4oYzIpXG4gICA5XG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwIGZvciBuZXctc3R5bGUgY2xhc3Nlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgbmV3LXN0eWxlIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmVcbm9ubHkgZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3RcbmluIHRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbiAodW5saWtlIHRoZSBlcXVpdmFsZW50IGV4YW1wbGVcbndpdGggb2xkLXN0eWxlIGNsYXNzZXMpOlxuXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QpOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50ICJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0KTpcbiAgIC4uLiAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGFcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQgIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIlxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKICAnc3RyaW5nLWNvbnZlcnNpb25zJzogdSdcblN0cmluZyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqXG5cbkEgc3RyaW5nIGNvbnZlcnNpb24gaXMgYW4gZXhwcmVzc2lvbiBsaXN0IGVuY2xvc2VkIGluIHJldmVyc2UgKGEuay5hLlxuYmFja3dhcmQpIHF1b3RlczpcblxuICAgc3RyaW5nX2NvbnZlcnNpb24gOjo9ICJcJyIgZXhwcmVzc2lvbl9saXN0ICJcJyJcblxuQSBzdHJpbmcgY29udmVyc2lvbiBldmFsdWF0ZXMgdGhlIGNvbnRhaW5lZCBleHByZXNzaW9uIGxpc3QgYW5kXG5jb252ZXJ0cyB0aGUgcmVzdWx0aW5nIG9iamVjdCBpbnRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBydWxlc1xuc3BlY2lmaWMgdG8gaXRzIHR5cGUuXG5cbklmIHRoZSBvYmplY3QgaXMgYSBzdHJpbmcsIGEgbnVtYmVyLCBgYE5vbmVgYCwgb3IgYSB0dXBsZSwgbGlzdCBvclxuZGljdGlvbmFyeSBjb250YWluaW5nIG9ubHkgb2JqZWN0cyB3aG9zZSB0eXBlIGlzIG9uZSBvZiB0aGVzZSwgdGhlXG5yZXN1bHRpbmcgc3RyaW5nIGlzIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gd2hpY2ggY2FuIGJlIHBhc3NlZCB0b1xudGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgZXZhbCgpYGAgdG8geWllbGQgYW4gZXhwcmVzc2lvbiB3aXRoIHRoZSBzYW1lXG52YWx1ZSAob3IgYW4gYXBwcm94aW1hdGlvbiwgaWYgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBhcmUgaW52b2x2ZWQpLlxuXG4oSW4gcGFydGljdWxhciwgY29udmVydGluZyBhIHN0cmluZyBhZGRzIHF1b3RlcyBhcm91bmQgaXQgYW5kIGNvbnZlcnRzXG4iZnVubnkiIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHNlcXVlbmNlcyB0aGF0IGFyZSBzYWZlIHRvIHByaW50LilcblxuUmVjdXJzaXZlIG9iamVjdHMgKGZvciBleGFtcGxlLCBsaXN0cyBvciBkaWN0aW9uYXJpZXMgdGhhdCBjb250YWluIGFcbnJlZmVyZW5jZSB0byB0aGVtc2VsdmVzLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB1c2UgYGAuLi5gYCB0b1xuaW5kaWNhdGUgYSByZWN1cnNpdmUgcmVmZXJlbmNlLCBhbmQgdGhlIHJlc3VsdCBjYW5ub3QgYmUgcGFzc2VkIHRvXG5gYGV2YWwoKWBgIHRvIGdldCBhbiBlcXVhbCB2YWx1ZSAoYGBTeW50YXhFcnJvcmBgIHdpbGwgYmUgcmFpc2VkXG5pbnN0ZWFkKS5cblxuVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmVwcigpYGAgcGVyZm9ybXMgZXhhY3RseSB0aGUgc2FtZSBjb252ZXJzaW9uXG5pbiBpdHMgYXJndW1lbnQgYXMgZW5jbG9zaW5nIGl0IGluIHBhcmVudGhlc2VzIGFuZCByZXZlcnNlIHF1b3Rlc1xuZG9lcy4gIFRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHN0cigpYGAgcGVyZm9ybXMgYSBzaW1pbGFyIGJ1dCBtb3JlXG51c2VyLWZyaWVuZGx5IGNvbnZlcnNpb24uXG4nLAotICdzdHJpbmctbWV0aG9kcyc6IHUnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuQmVsb3cgYXJlIGxpc3RlZCB0aGUgc3RyaW5nIG1ldGhvZHMgd2hpY2ggYm90aCA4LWJpdCBzdHJpbmdzIGFuZFxuVW5pY29kZSBvYmplY3RzIHN1cHBvcnQuIE5vdGUgdGhhdCBub25lIG9mIHRoZXNlIG1ldGhvZHMgdGFrZSBrZXl3b3JkXG5hcmd1bWVudHMuXG5cbkluIGFkZGl0aW9uLCBQeXRob25cJ3Mgc3RyaW5ncyBzdXBwb3J0IHRoZSBzZXF1ZW5jZSB0eXBlIG1ldGhvZHNcbmRlc2NyaWJlZCBpbiB0aGUgKlNlcXVlbmNlIFR5cGVzIC0tLSBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlLFxuYnVmZmVyLCB4cmFuZ2UqIHNlY3Rpb24uIFRvIG91dHB1dCBmb3JtYXR0ZWQgc3RyaW5ncyB1c2UgdGVtcGxhdGVcbnN0cmluZ3Mgb3IgdGhlIGBgJWBgIG9wZXJhdG9yIGRlc2NyaWJlZCBpbiB0aGUgKlN0cmluZyBGb3JtYXR0aW5nXG5PcGVyYXRpb25zKiBzZWN0aW9uLiBBbHNvLCBzZWUgdGhlIGBgcmVgYCBtb2R1bGUgZm9yIHN0cmluZyBmdW5jdGlvbnNcbmJhc2VkIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5kZWNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIERlY29kZXMgdGhlIHN0cmluZyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi5cbiAgICplbmNvZGluZyogZGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5XG4gICBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGBgVW5pY29kZUVycm9yYGAuXG4gICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlclxuICAgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlY1xuICAgQmFzZSBDbGFzc2VzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzXG4gICBhZGRlZC5cblxuc3RyLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLiAgRGVmYXVsdCBlbmNvZGluZyBpcyB0aGVcbiAgIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGFcbiAgIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgLCBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kXG4gICBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZVxuICAgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZVxuICAgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4wLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgIGFuZFxuICAgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2ZcbiAgIHN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdFxuICAgdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi41OiBBY2NlcHQgdHVwbGVzIGFzICpzdWZmaXgqLlxuXG5zdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUaGUgY29sdW1uIG51bWJlciBpcyByZXNldCB0byB6ZXJvIGFmdGVyIGVhY2hcbiAgIG5ld2xpbmUgb2NjdXJyaW5nIGluIHRoZSBzdHJpbmcuIElmICp0YWJzaXplKiBpcyBub3QgZ2l2ZW4sIGEgdGFiXG4gICBzaXplIG9mIGBgOGBgIGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4gIFRoaXMgZG9lc25cJ3QgdW5kZXJzdGFuZCBvdGhlclxuICAgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgb3IgZXNjYXBlIHNlcXVlbmNlcy5cblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyBgYHt9YGAuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuICAgVGhpcyBtZXRob2Qgb2Ygc3RyaW5nIGZvcm1hdHRpbmcgaXMgdGhlIG5ldyBzdGFuZGFyZCBpbiBQeXRob24gMy4wLFxuICAgYW5kIHNob3VsZCBiZSBwcmVmZXJyZWQgdG8gdGhlIGBgJWBgIGZvcm1hdHRpbmcgZGVzY3JpYmVkIGluXG4gICAqU3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9ucyogaW4gbmV3IGNvZGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGVcbiAgIHN0cmluZyBwcm92aWRpbmcgdGhpcyBtZXRob2QuXG5cbnN0ci5sanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW5cbiAgIGBgbGVuKHMpYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYHJmaW5kKClgYCBidXQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKlxuICAgaXMgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuICAgTmV3IGluIHZlcnNpb24gMi41LlxuXG5zdHIucnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNC5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5yc3RyaXAoKVxuICAgXCcgICBzcGFjaW91c1wnXG4gICA+Pj4gXCdtaXNzaXNzaXBwaVwnLnJzdHJpcChcJ2lwelwnKVxuICAgXCdtaXNzaXNzXCdcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMi4yOiBTdXBwb3J0IGZvciB0aGUgKmNoYXJzKiBhcmd1bWVudC5cblxuc3RyLnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgYGBtYXhzcGxpdCsxYGBcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGVyZSBpcyBubyBsaW1pdFxuICAgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMSwsMlwnLnNwbGl0KFwnLFwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnXCcsIFwnMlwnXWBgKS4gIFRoZSAqc2VwKlxuICAgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGApLiBTcGxpdHRpbmdcbiAgIGFuIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgW1wnXCddYGAuXG5cbiAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhIGBgTm9uZWBgIHNlcGFyYXRvciByZXR1cm5zXG4gICBgYFtdYGAuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnIDEgIDIgICAzICBcJy5zcGxpdCgpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgLFxuICAgYW5kIGBgXCcgIDEgIDIgICAzICBcJy5zcGxpdChOb25lLCAxKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMiAgIDMgIFwnXWBgLlxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiAgTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlXG4gICByZXR1cm4gYGBGYWxzZWBgLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2tcbiAgIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi41OiBBY2NlcHQgdHVwbGVzIGFzICpwcmVmaXgqLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGVcbiAgICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHNcbiAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMi4yOiBTdXBwb3J0IGZvciB0aGUgKmNoYXJzKiBhcmd1bWVudC5cblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAgICAgICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMpXG5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIudHJhbnNsYXRlKHRhYmxlWywgZGVsZXRlY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIGNoYXJhY3RlcnMgb2NjdXJyaW5nIGluIHRoZVxuICAgb3B0aW9uYWwgYXJndW1lbnQgKmRlbGV0ZWNoYXJzKiBhcmUgcmVtb3ZlZCwgYW5kIHRoZSByZW1haW5pbmdcbiAgIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZSxcbiAgIHdoaWNoIG11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDI1Ni5cblxuICAgWW91IGNhbiB1c2UgdGhlIGBgbWFrZXRyYW5zKClgYCBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIGBgc3RyaW5nYGBcbiAgIG1vZHVsZSB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiB0YWJsZS4gRm9yIHN0cmluZyBvYmplY3RzLCBzZXQgdGhlXG4gICAqdGFibGUqIGFyZ3VtZW50IHRvIGBgTm9uZWBgIGZvciB0cmFuc2xhdGlvbnMgdGhhdCBvbmx5IGRlbGV0ZVxuICAgY2hhcmFjdGVyczpcblxuICAgPj4+IFwncmVhZCB0aGlzIHNob3J0IHRleHRcJy50cmFuc2xhdGUoTm9uZSwgXCdhZWlvdVwnKVxuICAgXCdyZCB0aHMgc2hydCB0eHRcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjY6IFN1cHBvcnQgZm9yIGEgYGBOb25lYGAgKnRhYmxlKiBhcmd1bWVudC5cblxuICAgRm9yIFVuaWNvZGUgb2JqZWN0cywgdGhlIGBgdHJhbnNsYXRlKClgYCBtZXRob2QgZG9lcyBub3QgYWNjZXB0IHRoZVxuICAgb3B0aW9uYWwgKmRlbGV0ZWNoYXJzKiBhcmd1bWVudC4gIEluc3RlYWQsIGl0IHJldHVybnMgYSBjb3B5IG9mIHRoZVxuICAgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW5cbiAgIHRyYW5zbGF0aW9uIHRhYmxlIHdoaWNoIG11c3QgYmUgYSBtYXBwaW5nIG9mIFVuaWNvZGUgb3JkaW5hbHMgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIFVuaWNvZGUgc3RyaW5ncyBvciBgYE5vbmVgYC4gVW5tYXBwZWQgY2hhcmFjdGVyc1xuICAgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmUgZGVsZXRlZC5cbiAgIE5vdGUsIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSBgYGNvZGVjc2BgIG1vZHVsZSAoc2VlIGBgZW5jb2RpbmdzLmNwMTI1MWBgXG4gICBmb3IgYW4gZXhhbXBsZSkuXG5cbnN0ci51cHBlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIGBgbGVuKHMpYGAuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMi4yLlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHByZXNlbnQgb25seSBvbiB1bmljb2RlIG9iamVjdHM6XG5cbnVuaWNvZGUuaXNudW1lcmljKClcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBvbmx5IG51bWVyaWMgY2hhcmFjdGVycyBpbiBTLFxuICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gTnVtZXJpYyBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycyxcbiAgIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmUgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSxcbiAgIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT04gT05FIEZJRlRILlxuXG51bmljb2RlLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgb25seSBkZWNpbWFsIGNoYXJhY3RlcnMgaW4gUyxcbiAgIGBgRmFsc2VgYCBvdGhlcndpc2UuIERlY2ltYWwgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsXG4gICBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcm0gZGVjaW1hbC1yYWRpeFxuICAgbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiB1J1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cbkJlbG93IGFyZSBsaXN0ZWQgdGhlIHN0cmluZyBtZXRob2RzIHdoaWNoIGJvdGggOC1iaXQgc3RyaW5ncyBhbmRcblVuaWNvZGUgb2JqZWN0cyBzdXBwb3J0LlxuXG5JbiBhZGRpdGlvbiwgUHl0aG9uXCdzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTZXF1ZW5jZSBUeXBlcyAtLS0gc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZSxcbmJ1ZmZlciwgeHJhbmdlKiBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MgdXNlIHRlbXBsYXRlXG5zdHJpbmdzIG9yIHRoZSBgYCVgYCBvcGVyYXRvciBkZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgRm9ybWF0dGluZ1xuT3BlcmF0aW9ucyogc2VjdGlvbi4gQWxzbywgc2VlIHRoZSBgYHJlYGAgbW9kdWxlIGZvciBzdHJpbmcgZnVuY3Rpb25zXG5iYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIG9ubHkgaXRzIGZpcnN0IGNoYXJhY3RlclxuICAgY2FwaXRhbGl6ZWQuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5kZWNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIERlY29kZXMgdGhlIHN0cmluZyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi5cbiAgICplbmNvZGluZyogZGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5XG4gICBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGBgVW5pY29kZUVycm9yYGAuXG4gICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlclxuICAgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlY1xuICAgQmFzZSBDbGFzc2VzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzXG4gICBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZy4gIERlZmF1bHQgZW5jb2RpbmcgaXMgdGhlXG4gICBjdXJyZW50IGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhXG4gICBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzXG4gICBgYFwnc3RyaWN0XCdgYCwgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhXG4gICBgYFVuaWNvZGVFcnJvcmBgLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCxcbiAgIGBgXCdyZXBsYWNlXCdgYCwgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZFxuICAgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWVcbiAgIHNlY3Rpb24gKkNvZGVjIEJhc2UgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWVcbiAgIHNlY3Rpb24gKlN0YW5kYXJkIEVuY29kaW5ncyouXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCBhbmRcbiAgIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgb3RoZXIgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnN1ZmZpeCouXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG4gICBUaGlzIG1ldGhvZCBvZiBzdHJpbmcgZm9ybWF0dGluZyBpcyB0aGUgbmV3IHN0YW5kYXJkIGluIFB5dGhvbiAzLjAsXG4gICBhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgYGAlYGAgZm9ybWF0dGluZyBkZXNjcmliZWQgaW5cbiAgICpTdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zKiBpbiBuZXcgY29kZS5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYGZpbmQoKWBgLCBidXQgcmFpc2UgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZVxuICAgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW5cbiAgIGBgbGVuKHMpYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbnN0ci5yc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuICAgTmV3IGluIHZlcnNpb24gMi40LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0XG4gICBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnByZWZpeCouXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcylcblxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50cmFuc2xhdGUodGFibGVbLCBkZWxldGVjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG4gICBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlY2hhcnMqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZ1xuICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLFxuICAgd2hpY2ggbXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggMjU2LlxuXG4gICBZb3UgY2FuIHVzZSB0aGUgYGBtYWtldHJhbnMoKWBgIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgYGBzdHJpbmdgYFxuICAgbW9kdWxlIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLiBGb3Igc3RyaW5nIG9iamVjdHMsIHNldCB0aGVcbiAgICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHkgZGVsZXRlXG4gICBjaGFyYWN0ZXJzOlxuXG4gICA+Pj4gXCdyZWFkIHRoaXMgc2hvcnQgdGV4dFwnLnRyYW5zbGF0ZShOb25lLCBcJ2FlaW91XCcpXG4gICBcJ3JkIHRocyBzaHJ0IHR4dFwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNjogU3VwcG9ydCBmb3IgYSBgYE5vbmVgYCAqdGFibGUqIGFyZ3VtZW50LlxuXG4gICBGb3IgVW5pY29kZSBvYmplY3RzLCB0aGUgYGB0cmFuc2xhdGUoKWBgIG1ldGhvZCBkb2VzIG5vdCBhY2NlcHQgdGhlXG4gICBvcHRpb25hbCAqZGVsZXRlY2hhcnMqIGFyZ3VtZW50LiAgSW5zdGVhZCwgaXQgcmV0dXJucyBhIGNvcHkgb2YgdGhlXG4gICAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlblxuICAgdHJhbnNsYXRpb24gdGFibGUgd2hpY2ggbXVzdCBiZSBhIG1hcHBpbmcgb2YgVW5pY29kZSBvcmRpbmFscyB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgVW5pY29kZSBzdHJpbmdzIG9yIGBgTm9uZWBgLiBVbm1hcHBlZCBjaGFyYWN0ZXJzXG4gICBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZSBkZWxldGVkLlxuICAgTm90ZSwgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWUgYGBlbmNvZGluZ3MuY3AxMjUxYGBcbiAgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gYGBsZW4ocylgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLjIuXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHJlc2VudCBvbmx5IG9uIHVuaWNvZGUgb2JqZWN0czpcblxudW5pY29kZS5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgbnVtZXJpYyBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBOdW1lcmljIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LFxuICAgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTiBPTkUgRklGVEguXG5cbnVuaWNvZGUuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBvbmx5IGRlY2ltYWwgY2hhcmFjdGVycyBpbiBTLFxuICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gRGVjaW1hbCBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycyxcbiAgIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybSBkZWNpbWFsLXJhZGl4XG4gICBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG4nLAogICdzdHJpbmdzJzogdSdcblN0cmluZyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJ1ciIgfCAiUiIgfCAiVSIgfCAiVVIiIHwgIlVyIiB8ICJ1UiJcbiAgIHNob3J0c3RyaW5nICAgICA6Oj0gIlwnIiBzaG9ydHN0cmluZ2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydHN0cmluZ2l0ZW0qIFwnIlwnXG4gICBsb25nc3RyaW5nICAgICAgOjo9ICJcJ1wnXCciIGxvbmdzdHJpbmdpdGVtKiAiXCdcJ1wnIlxuICAgICAgICAgICAgICAgICAgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IGVzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IGVzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGVzY2FwZXNlcSAgICAgICA6Oj0gIlxcIiA8YW55IEFTQ0lJIGNoYXJhY3Rlcj5cblxuT25lIHN5bnRhY3RpYyByZXN0cmljdGlvbiBub3QgaW5kaWNhdGVkIGJ5IHRoZXNlIHByb2R1Y3Rpb25zIGlzIHRoYXRcbndoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWQgYmV0d2VlbiB0aGUgKipzdHJpbmdwcmVmaXgqKiBhbmQgdGhlIHJlc3Qgb2ZcbnRoZSBzdHJpbmcgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IGlzIGRlZmluZWQgYnkgdGhlXG5lbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgQVNDSUkgaWYgbm8gZW5jb2RpbmcgZGVjbGFyYXRpb24gaXMgZ2l2ZW5cbmluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nIGRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IFN0cmluZyBsaXRlcmFscyBjYW4gYmUgZW5jbG9zZWQgaW4gbWF0Y2hpbmcgc2luZ2xlXG5xdW90ZXMgKGBgXCdgYCkgb3IgZG91YmxlIHF1b3RlcyAoYGAiYGApLiAgVGhleSBjYW4gYWxzbyBiZSBlbmNsb3NlZCBpblxubWF0Y2hpbmcgZ3JvdXBzIG9mIHRocmVlIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzICh0aGVzZSBhcmUgZ2VuZXJhbGx5XG5yZWZlcnJlZCB0byBhcyAqdHJpcGxlLXF1b3RlZCBzdHJpbmdzKikuICBUaGUgYmFja3NsYXNoIChgYFxcYGApXG5jaGFyYWN0ZXIgaXMgdXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IG90aGVyd2lzZSBoYXZlIGEgc3BlY2lhbFxubWVhbmluZywgc3VjaCBhcyBuZXdsaW5lLCBiYWNrc2xhc2ggaXRzZWxmLCBvciB0aGUgcXVvdGUgY2hhcmFjdGVyLlxuU3RyaW5nIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYSBsZXR0ZXIgYGBcJ3JcJ2BgIG9yXG5gYFwnUlwnYGA7IHN1Y2ggc3RyaW5ncyBhcmUgY2FsbGVkICpyYXcgc3RyaW5ncyogYW5kIHVzZSBkaWZmZXJlbnQgcnVsZXNcbmZvciBpbnRlcnByZXRpbmcgYmFja3NsYXNoIGVzY2FwZSBzZXF1ZW5jZXMuICBBIHByZWZpeCBvZiBgYFwndVwnYGAgb3JcbmBgXCdVXCdgYCBtYWtlcyB0aGUgc3RyaW5nIGEgVW5pY29kZSBzdHJpbmcuICBVbmljb2RlIHN0cmluZ3MgdXNlIHRoZVxuVW5pY29kZSBjaGFyYWN0ZXIgc2V0IGFzIGRlZmluZWQgYnkgdGhlIFVuaWNvZGUgQ29uc29ydGl1bSBhbmQgSVNPXG4xMDY0Ni4gIFNvbWUgYWRkaXRpb25hbCBlc2NhcGUgc2VxdWVuY2VzLCBkZXNjcmliZWQgYmVsb3csIGFyZVxuYXZhaWxhYmxlIGluIFVuaWNvZGUgc3RyaW5ncy4gVGhlIHR3byBwcmVmaXggY2hhcmFjdGVycyBtYXkgYmVcbmNvbWJpbmVkOyBpbiB0aGlzIGNhc2UsIGBgXCd1XCdgYCBtdXN0IGFwcGVhciBiZWZvcmUgYGBcJ3JcJ2BgLlxuXG5JbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbnN0cmluZywgaS5lLiBlaXRoZXIgYGBcJ2BgIG9yIGBgImBgLilcblxuVW5sZXNzIGFuIGBgXCdyXCdgYCBvciBgYFwnUlwnYGAgcHJlZml4IGlzIHByZXNlbnQsIGVzY2FwZSBzZXF1ZW5jZXMgaW5cbnN0cmluZ3MgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBydWxlcyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnlcblN0YW5kYXJkIEMuICBUaGUgcmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcbmV3bGluZWBgICAgICAgfCBJZ25vcmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFxcYGAgICAgICAgICAgICB8IEJhY2tzbGFzaCAoYGBcXGBgKSAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFwnYGAgICAgICAgICAgICB8IFNpbmdsZSBxdW90ZSAoYGBcJ2BgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXCJgYCAgICAgICAgICAgIHwgRG91YmxlIHF1b3RlIChgYCJgYCkgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxhYGAgICAgICAgICAgICB8IEFTQ0lJIEJlbGwgKEJFTCkgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcYmBgICAgICAgICAgICAgfCBBU0NJSSBCYWNrc3BhY2UgKEJTKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGZgYCAgICAgICAgICAgIHwgQVNDSUkgRm9ybWZlZWQgKEZGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxuYGAgICAgICAgICAgICB8IEFTQ0lJIExpbmVmZWVkIChMRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcTntuYW1lfWBgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlIChVbmljb2RlIG9ubHkpICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHJgYCAgICAgICAgICAgIHwgQVNDSUkgQ2FycmlhZ2UgUmV0dXJuIChDUikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx0YGAgICAgICAgICAgICB8IEFTQ0lJIEhvcml6b250YWwgVGFiIChUQUIpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdXh4eHhgYCAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAxNi1iaXQgaGV4IHZhbHVlICAgfCAoMSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eCogKFVuaWNvZGUgb25seSkgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFV4eHh4eHh4eGBgICAgIHwgQ2hhcmFjdGVyIHdpdGggMzItYml0IGhleCB2YWx1ZSAgIHwgKDIpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHh4eHh4KiAoVW5pY29kZSBvbmx5KSAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx2YGAgICAgICAgICAgICB8IEFTQ0lJIFZlcnRpY2FsIFRhYiAoVlQpICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcb29vYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBvY3RhbCB2YWx1ZSAqb29vKiAgfCAoMyw1KSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHhoaGBgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggaGV4IHZhbHVlICpoaCogICAgIHwgKDQsNSkgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGNhbiBiZVxuICAgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS5cblxuMi4gQW55IFVuaWNvZGUgY2hhcmFjdGVyIGNhbiBiZSBlbmNvZGVkIHRoaXMgd2F5LCBidXQgY2hhcmFjdGVyc1xuICAgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApIHdpbGwgYmUgZW5jb2RlZCB1c2luZyBhXG4gICBzdXJyb2dhdGUgcGFpciBpZiBQeXRob24gaXMgY29tcGlsZWQgdG8gdXNlIDE2LWJpdCBjb2RlIHVuaXRzICh0aGVcbiAgIGRlZmF1bHQpLiAgSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGVcbiAgIHBhaXIgY2FuIGJlIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuXG5cbjMuIEFzIGluIFN0YW5kYXJkIEMsIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUgYWNjZXB0ZWQuXG5cbjQuIFVubGlrZSBpbiBTdGFuZGFyZCBDLCBleGFjdGx5IHR3byBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuNS4gSW4gYSBzdHJpbmcgbGl0ZXJhbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgZGVub3RlIHRoZSBieXRlXG4gICB3aXRoIHRoZSBnaXZlbiB2YWx1ZTsgaXQgaXMgbm90IG5lY2Vzc2FyeSB0aGF0IHRoZSBieXRlIGVuY29kZXMgYVxuICAgY2hhcmFjdGVyIGluIHRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldC4gSW4gYSBVbmljb2RlIGxpdGVyYWwsIHRoZXNlXG4gICBlc2NhcGVzIGRlbm90ZSBhIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgc3RyaW5nKi4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgbWFya2VkIGFzICIoVW5pY29kZSBvbmx5KSJcbmluIHRoZSB0YWJsZSBhYm92ZSBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIHVucmVjb2duaXplZCBlc2NhcGVzIGZvclxubm9uLVVuaWNvZGUgc3RyaW5nIGxpdGVyYWxzLlxuXG5XaGVuIGFuIGBgXCdyXCdgYCBvciBgYFwnUlwnYGAgcHJlZml4IGlzIHByZXNlbnQsIGEgY2hhcmFjdGVyIGZvbGxvd2luZyBhXG5iYWNrc2xhc2ggaXMgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyB3aXRob3V0IGNoYW5nZSwgYW5kICphbGxcbmJhY2tzbGFzaGVzIGFyZSBsZWZ0IGluIHRoZSBzdHJpbmcqLiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmcgbGl0ZXJhbFxuYGByIlxcbiJgYCBjb25zaXN0cyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGEgbG93ZXJjYXNlXG5gYFwnblwnYGAuICBTdHJpbmcgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsIGJ1dCB0aGVcbmJhY2tzbGFzaCByZW1haW5zIGluIHRoZSBzdHJpbmc7IGZvciBleGFtcGxlLCBgYHIiXFwiImBgIGlzIGEgdmFsaWRcbnN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhIGRvdWJsZVxucXVvdGU7IGBgciJcXCJgYCBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhdyBzdHJpbmdcbmNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhd1xuc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaCB3b3VsZFxuZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlXG5iYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzXG5hcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG5cbldoZW4gYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFcbmBgXCd1XCdgYCBvciBgYFwnVVwnYGAgcHJlZml4LCB0aGVuIHRoZSBgYFxcdVhYWFhgYCBhbmQgYGBcXFVYWFhYWFhYWGBgXG5lc2NhcGUgc2VxdWVuY2VzIGFyZSBwcm9jZXNzZWQgd2hpbGUgICphbGwgb3RoZXIgYmFja3NsYXNoZXMgYXJlIGxlZnRcbmluIHRoZSBzdHJpbmcqLiBGb3IgZXhhbXBsZSwgdGhlIHN0cmluZyBsaXRlcmFsIGBgdXIiXFx1MDA2MlxcbiJgYFxuY29uc2lzdHMgb2YgdGhyZWUgVW5pY29kZSBjaGFyYWN0ZXJzOiBcJ0xBVElOIFNNQUxMIExFVFRFUiBCXCcsIFwnUkVWRVJTRVxuU09MSURVU1wnLCBhbmQgXCdMQVRJTiBTTUFMTCBMRVRURVIgTlwnLiBCYWNrc2xhc2hlcyBjYW4gYmUgZXNjYXBlZCB3aXRoXG5hIHByZWNlZGluZyBiYWNrc2xhc2g7IGhvd2V2ZXIsIGJvdGggcmVtYWluIGluIHRoZSBzdHJpbmcuICBBcyBhXG5yZXN1bHQsIGBgXFx1WFhYWGBgIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG9ubHkgcmVjb2duaXplZCB3aGVuIHRoZXJlIGFyZVxuYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcy5cbicsCiAgJ3N1YnNjcmlwdGlvbnMnOiB1J1xuU3Vic2NyaXB0aW9uc1xuKioqKioqKioqKioqKlxuXG5BIHN1YnNjcmlwdGlvbiBzZWxlY3RzIGFuIGl0ZW0gb2YgYSBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KVxub3IgbWFwcGluZyAoZGljdGlvbmFyeSkgb2JqZWN0OlxuXG4gICBzdWJzY3JpcHRpb24gOjo9IHByaW1hcnkgIlsiIGV4cHJlc3Npb25fbGlzdCAiXSJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3Qgb2YgYSBzZXF1ZW5jZSBvciBtYXBwaW5nIHR5cGUuXG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0byBhXG5wbGFpbiBpbnRlZ2VyLiAgSWYgdGhpcyB2YWx1ZSBpcyBuZWdhdGl2ZSwgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2VcbmlzIGFkZGVkIHRvIGl0IChzbyB0aGF0LCBlLmcuLCBgYHhbLTFdYGAgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mXG5gYHhgYC4pICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhblxudGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlXG5pdGVtIHdob3NlIGluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKICAndHJ1dGgnOiB1IlxuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuIGBgaWZgYCBvclxuYGB3aGlsZWBgIGNvbmRpdGlvbiBvciBhcyBvcGVyYW5kIG9mIHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgYmVsb3cuIFRoZVxuZm9sbG93aW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBmYWxzZTpcblxuKiBgYE5vbmVgYFxuXG4qIGBgRmFsc2VgYFxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsIGBgMGBgLCBgYDBMYGAsIGBgMC4wYGAsXG4gIGBgMGpgYC5cblxuKiBhbnkgZW1wdHkgc2VxdWVuY2UsIGZvciBleGFtcGxlLCBgYCcnYGAsIGBgKClgYCwgYGBbXWBgLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgYGB7fWBgLlxuXG4qIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcywgaWYgdGhlIGNsYXNzIGRlZmluZXMgYVxuICBgYF9fbm9uemVyb19fKClgYCBvciBgYF9fbGVuX18oKWBgIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zXG4gIHRoZSBpbnRlZ2VyIHplcm8gb3IgYGBib29sYGAgdmFsdWUgYGBGYWxzZWBgLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuIGBgMGBgIG9yIGBgRmFsc2VgYCBmb3IgZmFsc2UgYW5kIGBgMWBgIG9yIGBgVHJ1ZWBgIGZvciB0cnVlLFxudW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zXG5gYG9yYGAgYW5kIGBgYW5kYGAgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuIiwKICAndHJ5JzogdSdcblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWygiYXMiIHwgIiwiKSB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbixcbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgZGlkIG5vdCB3b3JrLiBgYHRyeWBgLi4uYGBleGNlcHRgYFxuaGFkIHRvIGJlIG5lc3RlZCBpbiBgYHRyeWBgLi4uYGBmaW5hbGx5YGAuXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3QsIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbiwgb3IsIGluIHRoZSAoZGVwcmVjYXRlZCkgY2FzZSBvZiBzdHJpbmcgZXhjZXB0aW9ucywgaXMgdGhlXG5yYWlzZWQgc3RyaW5nIGl0c2VsZiAobm90ZSB0aGF0IHRoZSBvYmplY3QgaWRlbnRpdGllcyBtdXN0IG1hdGNoLCBpLmUuXG5pdCBtdXN0IGJlIHRoZSBzYW1lIHN0cmluZyBvYmplY3QsIG5vdCBqdXN0IGEgc3RyaW5nIHdpdGggdGhlIHNhbWVcbnZhbHVlKS5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdFxuY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdCBjbGF1c2VzIG11c3QgaGF2ZSBhblxuZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzIHJlYWNoZWQsIGV4ZWN1dGlvblxuY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC4gIChUaGlzIG1lYW5zIHRoYXRcbmlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbiwgYW5kIHRoZSBleGNlcHRpb25cbm9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlIG91dGVyIGhhbmRsZXIgd2lsbFxubm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIGFzc2lnbmVkIHRvIHRocmVlIHZhcmlhYmxlcyBpbiB0aGUgYGBzeXNgYCBtb2R1bGU6XG5gYHN5cy5leGNfdHlwZWBgIHJlY2VpdmVzIHRoZSBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIGV4Y2VwdGlvbjtcbmBgc3lzLmV4Y192YWx1ZWBgIHJlY2VpdmVzIHRoZSBleGNlcHRpb25cJ3MgcGFyYW1ldGVyO1xuYGBzeXMuZXhjX3RyYWNlYmFja2BgIHJlY2VpdmVzIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZVxuc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2hlcmVcbnRoZSBleGNlcHRpb24gb2NjdXJyZWQuIFRoZXNlIGRldGFpbHMgYXJlIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlXG5gYHN5cy5leGNfaW5mbygpYGAgZnVuY3Rpb24sIHdoaWNoIHJldHVybnMgYSB0dXBsZSBgYChleGNfdHlwZSxcbmV4Y192YWx1ZSwgZXhjX3RyYWNlYmFjaylgYC4gIFVzZSBvZiB0aGUgY29ycmVzcG9uZGluZyB2YXJpYWJsZXMgaXNcbmRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhpcyBmdW5jdGlvbiwgc2luY2UgdGhlaXIgdXNlIGlzIHVuc2FmZSBpbiBhXG50aHJlYWRlZCBwcm9ncmFtLiAgQXMgb2YgUHl0aG9uIDEuNSwgdGhlIHZhcmlhYmxlcyBhcmUgcmVzdG9yZWQgdG9cbnRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb25cbnRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiwgaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmRcbm9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiBvciBleGVjdXRlcyBhIGBgcmV0dXJuYGAgb3IgYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgbG9zdC4gIFRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGVcbnByb2dyYW0gZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5XaGVuIGEgYGByZXR1cm5gYCwgYGBicmVha2BgIG9yIGBgY29udGludWVgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW5cbnRoZSBgYHRyeWBgIHN1aXRlIG9mIGEgYGB0cnlgYC4uLmBgZmluYWxseWBgIHN0YXRlbWVudCwgdGhlXG5gYGZpbmFsbHlgYCBjbGF1c2UgaXMgYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgaXMgaWxsZWdhbCBpbiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhXG5wcm9ibGVtIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlXG5saWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuJywKICAndHlwZXMnOiB1J1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLlxuXG5Tb21lIG9mIHRoZSB0eXBlIGRlc2NyaXB0aW9ucyBiZWxvdyBjb250YWluIGEgcGFyYWdyYXBoIGxpc3Rpbmdcblwnc3BlY2lhbCBhdHRyaWJ1dGVzLlwnICBUaGVzZSBhcmUgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZVxuaW1wbGVtZW50YXRpb24gYW5kIGFyZSBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgVGhlaXIgZGVmaW5pdGlvblxubWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5Ob25lXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgYGBOb25lYGAuXG4gICBJdCBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsXG4gICBlLmcuLCBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgYGBOb3RJbXBsZW1lbnRlZGBgLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgYGBFbGxpcHNpc2BgLiBJdCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiB0aGUgYGAuLi5gYFxuICAgc3ludGF4IGluIGEgc2xpY2UuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuYGBudW1iZXJzLk51bWJlcmBgXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgYGBudW1iZXJzLkludGVncmFsYGBcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBlbGVtZW50cyBmcm9tIHRoZSBtYXRoZW1hdGljYWwgc2V0IG9mIGludGVnZXJzXG4gICAgICAocG9zaXRpdmUgYW5kIG5lZ2F0aXZlKS5cblxuICAgICAgVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBQbGFpbiBpbnRlZ2Vyc1xuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gdGhlIHJhbmdlIC0yMTQ3NDgzNjQ4IHRocm91Z2hcbiAgICAgICAgIDIxNDc0ODM2NDcuIChUaGUgcmFuZ2UgbWF5IGJlIGxhcmdlciBvbiBtYWNoaW5lcyB3aXRoIGFcbiAgICAgICAgIGxhcmdlciBuYXR1cmFsIHdvcmQgc2l6ZSwgYnV0IG5vdCBzbWFsbGVyLikgIFdoZW4gdGhlIHJlc3VsdFxuICAgICAgICAgb2YgYW4gb3BlcmF0aW9uIHdvdWxkIGZhbGwgb3V0c2lkZSB0aGlzIHJhbmdlLCB0aGUgcmVzdWx0IGlzXG4gICAgICAgICBub3JtYWxseSByZXR1cm5lZCBhcyBhIGxvbmcgaW50ZWdlciAoaW4gc29tZSBjYXNlcywgdGhlXG4gICAgICAgICBleGNlcHRpb24gYGBPdmVyZmxvd0Vycm9yYGAgaXMgcmFpc2VkIGluc3RlYWQpLiAgRm9yIHRoZVxuICAgICAgICAgcHVycG9zZSBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zLCBpbnRlZ2VycyBhcmUgYXNzdW1lZCB0b1xuICAgICAgICAgaGF2ZSBhIGJpbmFyeSwgMlwncyBjb21wbGVtZW50IG5vdGF0aW9uIHVzaW5nIDMyIG9yIG1vcmUgYml0cyxcbiAgICAgICAgIGFuZCBoaWRpbmcgbm8gYml0cyBmcm9tIHRoZSB1c2VyIChpLmUuLCBhbGwgNDI5NDk2NzI5NlxuICAgICAgICAgZGlmZmVyZW50IGJpdCBwYXR0ZXJucyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCB2YWx1ZXMpLlxuXG4gICAgICBMb25nIGludGVnZXJzXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgbnVtYmVycyBpbiBhbiB1bmxpbWl0ZWQgcmFuZ2UsIHN1YmplY3QgdG9cbiAgICAgICAgIGF2YWlsYWJsZSAodmlydHVhbCkgbWVtb3J5IG9ubHkuICBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2hpZnRcbiAgICAgICAgIGFuZCBtYXNrIG9wZXJhdGlvbnMsIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQsIGFuZFxuICAgICAgICAgbmVnYXRpdmUgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB2YXJpYW50IG9mIDJcJ3NcbiAgICAgICAgIGNvbXBsZW1lbnQgd2hpY2ggZ2l2ZXMgdGhlIGlsbHVzaW9uIG9mIGFuIGluZmluaXRlIHN0cmluZyBvZlxuICAgICAgICAgc2lnbiBiaXRzIGV4dGVuZGluZyB0byB0aGUgbGVmdC5cblxuICAgICAgQm9vbGVhbnNcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZSBhcmUgdGhlIG9ubHlcbiAgICAgICAgIEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgcGxhaW5cbiAgICAgICAgIGludGVnZXJzLCBhbmQgQm9vbGVhbiB2YWx1ZXMgYmVoYXZlIGxpa2UgdGhlIHZhbHVlcyAwIGFuZCAxLFxuICAgICAgICAgcmVzcGVjdGl2ZWx5LCBpbiBhbG1vc3QgYWxsIGNvbnRleHRzLCB0aGUgZXhjZXB0aW9uIGJlaW5nXG4gICAgICAgICB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5ncyBgYCJGYWxzZSJgYCBvclxuICAgICAgICAgYGAiVHJ1ZSJgYCBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2VycyBhbmQgdGhlIGxlYXN0IHN1cnByaXNlcyB3aGVuXG4gICAgICBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgcGxhaW4gYW5kIGxvbmcgaW50ZWdlciBkb21haW5zLiAgQW55XG4gICAgICBvcGVyYXRpb24sIGlmIGl0IHlpZWxkcyBhIHJlc3VsdCBpbiB0aGUgcGxhaW4gaW50ZWdlciBkb21haW4sXG4gICAgICB3aWxsIHlpZWxkIHRoZSBzYW1lIHJlc3VsdCBpbiB0aGUgbG9uZyBpbnRlZ2VyIGRvbWFpbiBvciB3aGVuXG4gICAgICB1c2luZyBtaXhlZCBvcGVyYW5kcy4gIFRoZSBzd2l0Y2ggYmV0d2VlbiBkb21haW5zIGlzIHRyYW5zcGFyZW50XG4gICAgICB0byB0aGUgcHJvZ3JhbW1lci5cblxuICAgYGBudW1iZXJzLlJlYWxgYCAoYGBmbG9hdGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgIGBgbnVtYmVycy5Db21wbGV4YGBcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyIGBgemBgIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgcmVhZC1vbmx5XG4gICAgICBhdHRyaWJ1dGVzIGBgei5yZWFsYGAgYW5kIGBgei5pbWFnYGAuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4gICBpdGVtcyBvZiBhIHNlcXVlbmNlLiBXaGVuIHRoZSBsZW5ndGggb2YgYSBzZXF1ZW5jZSBpcyAqbiosIHRoZVxuICAgaW5kZXggc2V0IGNvbnRhaW5zIHRoZSBudW1iZXJzIDAsIDEsIC4uLiwgKm4qLTEuICBJdGVtICppKiBvZlxuICAgc2VxdWVuY2UgKmEqIGlzIHNlbGVjdGVkIGJ5IGBgYVtpXWBgLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6IGBgYVtpOmpdYGAgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogYGA8PWBgICprKiBgYDxgYCAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogYGBhW2k6ajprXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KlxuICAgd2hlcmUgYGB4ID0gaSArIG4qa2BgLCAqbiogYGA+PWBgIGBgMGBgIGFuZCAqaSogYGA8PWBgICp4KiBgYDxgYFxuICAgKmoqLlxuXG4gICBTZXF1ZW5jZXMgYXJlIGRpc3Rpbmd1aXNoZWQgYWNjb3JkaW5nIHRvIHRoZWlyIG11dGFiaWxpdHk6XG5cbiAgIEltbXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIEFuIG9iamVjdCBvZiBhbiBpbW11dGFibGUgc2VxdWVuY2UgdHlwZSBjYW5ub3QgY2hhbmdlIG9uY2UgaXQgaXNcbiAgICAgIGNyZWF0ZWQuICAoSWYgdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMsXG4gICAgICB0aGVzZSBvdGhlciBvYmplY3RzIG1heSBiZSBtdXRhYmxlIGFuZCBtYXkgYmUgY2hhbmdlZDsgaG93ZXZlcixcbiAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbiBpbW11dGFibGVcbiAgICAgIG9iamVjdCBjYW5ub3QgY2hhbmdlLilcblxuICAgICAgVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlczpcblxuICAgICAgU3RyaW5nc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgc3RyaW5nIGFyZSBjaGFyYWN0ZXJzLiAgVGhlcmUgaXMgbm8gc2VwYXJhdGVcbiAgICAgICAgIGNoYXJhY3RlciB0eXBlOyBhIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCBieSBhIHN0cmluZyBvZiBvbmVcbiAgICAgICAgIGl0ZW0uIENoYXJhY3RlcnMgcmVwcmVzZW50IChhdCBsZWFzdCkgOC1iaXQgYnl0ZXMuICBUaGVcbiAgICAgICAgIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNocigpYGAgYW5kIGBgb3JkKClgYCBjb252ZXJ0IGJldHdlZW5cbiAgICAgICAgIGNoYXJhY3RlcnMgYW5kIG5vbm5lZ2F0aXZlIGludGVnZXJzIHJlcHJlc2VudGluZyB0aGUgYnl0ZVxuICAgICAgICAgdmFsdWVzLiAgQnl0ZXMgd2l0aCB0aGUgdmFsdWVzIDAtMTI3IHVzdWFsbHkgcmVwcmVzZW50IHRoZVxuICAgICAgICAgY29ycmVzcG9uZGluZyBBU0NJSSB2YWx1ZXMsIGJ1dCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdmFsdWVzXG4gICAgICAgICBpcyB1cCB0byB0aGUgcHJvZ3JhbS4gIFRoZSBzdHJpbmcgZGF0YSB0eXBlIGlzIGFsc28gdXNlZCB0b1xuICAgICAgICAgcmVwcmVzZW50IGFycmF5cyBvZiBieXRlcywgZS5nLiwgdG8gaG9sZCBkYXRhIHJlYWQgZnJvbSBhXG4gICAgICAgICBmaWxlLlxuXG4gICAgICAgICAoT24gc3lzdGVtcyB3aG9zZSBuYXRpdmUgY2hhcmFjdGVyIHNldCBpcyBub3QgQVNDSUksIHN0cmluZ3NcbiAgICAgICAgIG1heSB1c2UgRUJDRElDIGluIHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBwcm92aWRlZCB0aGVcbiAgICAgICAgIGZ1bmN0aW9ucyBgYGNocigpYGAgYW5kIGBgb3JkKClgYCBpbXBsZW1lbnQgYSBtYXBwaW5nIGJldHdlZW5cbiAgICAgICAgIEFTQ0lJIGFuZCBFQkNESUMsIGFuZCBzdHJpbmcgY29tcGFyaXNvbiBwcmVzZXJ2ZXMgdGhlIEFTQ0lJXG4gICAgICAgICBvcmRlci4gT3IgcGVyaGFwcyBzb21lb25lIGNhbiBwcm9wb3NlIGEgYmV0dGVyIHJ1bGU/KVxuXG4gICAgICBVbmljb2RlXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBVbmljb2RlIG9iamVjdCBhcmUgVW5pY29kZSBjb2RlIHVuaXRzLiAgQVxuICAgICAgICAgVW5pY29kZSBjb2RlIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSBVbmljb2RlIG9iamVjdCBvZiBvbmVcbiAgICAgICAgIGl0ZW0gYW5kIGNhbiBob2xkIGVpdGhlciBhIDE2LWJpdCBvciAzMi1iaXQgdmFsdWVcbiAgICAgICAgIHJlcHJlc2VudGluZyBhIFVuaWNvZGUgb3JkaW5hbCAodGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZVxuICAgICAgICAgb3JkaW5hbCBpcyBnaXZlbiBpbiBgYHN5cy5tYXh1bmljb2RlYGAsIGFuZCBkZXBlbmRzIG9uIGhvd1xuICAgICAgICAgUHl0aG9uIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lKS4gIFN1cnJvZ2F0ZSBwYWlycyBtYXlcbiAgICAgICAgIGJlIHByZXNlbnQgaW4gdGhlIFVuaWNvZGUgb2JqZWN0LCBhbmQgd2lsbCBiZSByZXBvcnRlZCBhcyB0d29cbiAgICAgICAgIHNlcGFyYXRlIGl0ZW1zLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYHVuaWNocigpYGAgYW5kXG4gICAgICAgICBgYG9yZCgpYGAgY29udmVydCBiZXR3ZWVuIGNvZGUgdW5pdHMgYW5kIG5vbm5lZ2F0aXZlIGludGVnZXJzXG4gICAgICAgICByZXByZXNlbnRpbmcgdGhlIFVuaWNvZGUgb3JkaW5hbHMgYXMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgICAgICAgU3RhbmRhcmQgMy4wLiBDb252ZXJzaW9uIGZyb20gYW5kIHRvIG90aGVyIGVuY29kaW5ncyBhcmVcbiAgICAgICAgIHBvc3NpYmxlIHRocm91Z2ggdGhlIFVuaWNvZGUgbWV0aG9kIGBgZW5jb2RlKClgYCBhbmQgdGhlXG4gICAgICAgICBidWlsdC1pbiBmdW5jdGlvbiBgYHVuaWNvZGUoKWBgLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCBgYGRlbGBgIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluIGBgYnl0ZWFycmF5KClgYCBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlIGBgYXJyYXlgYCBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2ZcbiAgICAgIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYFxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICBgYDEuMGBgKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc2V0KClgYCBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyBgYGFkZCgpYGAuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiBgYGZyb3plbnNldCgpYGAgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpc1xuICAgICAgaW1tdXRhYmxlIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mXG4gICAgICBhbm90aGVyIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uIGBgYVtrXWBgIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieVxuICAgYGBrYGAgZnJvbSB0aGUgbWFwcGluZyBgYGFgYDsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmRcbiAgIGFzIHRoZSB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgYGBkZWxgYCBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW5cbiAgIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgICAgIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgYGB7Li4ufWBgXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzIGBgZGJtYGAsIGBgZ2RibWBgLCBhbmQgYGBic2RkYmBgIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcy5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBBdHRyaWJ1dGUgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgYGBmdW5jX2RvY2BgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RvY19fYGAgICAgICAgICAgICAgfCBBbm90aGVyIHdheSBvZiBzcGVsbGluZyAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgZnVuY19kb2NgYCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBmdW5jX25hbWVgYCAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbmFtZV9fYGAgICAgICAgICAgICB8IEFub3RoZXIgd2F5IG9mIHNwZWxsaW5nICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBmdW5jX25hbWVgYCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbW9kdWxlX19gYCAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgZnVuY19kZWZhdWx0c2BgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCB2YWx1ZXMgZm9yIHRob3NlICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50cyB0aGF0IGhhdmUgZGVmYXVsdHMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBOb25lYGAgaWYgbm8gYXJndW1lbnRzICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgZnVuY19jb2RlYGAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keS4gICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgZnVuY19nbG9iYWxzYGAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvblwncyAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBnbG9iYWwgdmFyaWFibGVzIC0tLSB0aGUgZ2xvYmFsIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLiB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYGZ1bmNfZGljdGBgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYGZ1bmNfY2xvc3VyZWBgICAgICAgICB8IGBgTm9uZWBgIG9yIGEgdHVwbGUgb2YgY2VsbHMgICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvblwncyBmcmVlIHZhcmlhYmxlcy4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogYGBmdW5jX25hbWVgYCBpcyBub3cgd3JpdGFibGUuXG5cbiAgICAgIEZ1bmN0aW9uIG9iamVjdHMgYWxzbyBzdXBwb3J0IGdldHRpbmcgYW5kIHNldHRpbmcgYXJiaXRyYXJ5XG4gICAgICBhdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGF0dGFjaCBtZXRhZGF0YVxuICAgICAgdG8gZnVuY3Rpb25zLiAgUmVndWxhciBhdHRyaWJ1dGUgZG90LW5vdGF0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZFxuICAgICAgc2V0IHN1Y2ggYXR0cmlidXRlcy4gKk5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5XG4gICAgICBzdXBwb3J0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuIEZ1bmN0aW9uXG4gICAgICBhdHRyaWJ1dGVzIG9uIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZVxuICAgICAgZnV0dXJlLipcblxuICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uXCdzIGRlZmluaXRpb24gY2FuIGJlXG4gICAgICByZXRyaWV2ZWQgZnJvbSBpdHMgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWxcbiAgICAgIHR5cGVzIGJlbG93LlxuXG4gICBVc2VyLWRlZmluZWQgbWV0aG9kc1xuICAgICAgQSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlXG4gICAgICAob3IgYGBOb25lYGApIGFuZCBhbnkgY2FsbGFibGUgb2JqZWN0IChub3JtYWxseSBhIHVzZXItZGVmaW5lZFxuICAgICAgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGltX3NlbGZgYCBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgYGBpbV9mdW5jYGAgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdDsgYGBpbV9jbGFzc2BgIGlzIHRoZVxuICAgICAgY2xhc3Mgb2YgYGBpbV9zZWxmYGAgZm9yIGJvdW5kIG1ldGhvZHMgb3IgdGhlIGNsYXNzIHRoYXQgYXNrZWRcbiAgICAgIGZvciB0aGUgbWV0aG9kIGZvciB1bmJvdW5kIG1ldGhvZHM7IGBgX19kb2NfX2BgIGlzIHRoZSBtZXRob2RcJ3NcbiAgICAgIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBpbV9mdW5jLl9fZG9jX19gYCk7IGBgX19uYW1lX19gYCBpcyB0aGVcbiAgICAgIG1ldGhvZCBuYW1lIChzYW1lIGFzIGBgaW1fZnVuYy5fX25hbWVfX2BgKTsgYGBfX21vZHVsZV9fYGAgaXNcbiAgICAgIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZCBpbiwgb3IgYGBOb25lYGAgaWZcbiAgICAgIHVuYXZhaWxhYmxlLlxuXG4gICAgICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yOiBgYGltX3NlbGZgYCB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjbGFzc1xuICAgICAgdGhhdCBkZWZpbmVkIHRoZSBtZXRob2QuXG5cbiAgICAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjY6IEZvciAzLjAgZm9yd2FyZC1jb21wYXRpYmlsaXR5LFxuICAgICAgYGBpbV9mdW5jYGAgaXMgYWxzbyBhdmFpbGFibGUgYXMgYGBfX2Z1bmNfX2BgLCBhbmQgYGBpbV9zZWxmYGBcbiAgICAgIGFzIGBgX19zZWxmX19gYC5cblxuICAgICAgTWV0aG9kcyBhbHNvIHN1cHBvcnQgYWNjZXNzaW5nIChidXQgbm90IHNldHRpbmcpIHRoZSBhcmJpdHJhcnlcbiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBVc2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdHMgbWF5IGJlIGNyZWF0ZWQgd2hlbiBnZXR0aW5nIGFuXG4gICAgICBhdHRyaWJ1dGUgb2YgYSBjbGFzcyAocGVyaGFwcyB2aWEgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyksIGlmXG4gICAgICB0aGF0IGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QsIGFuIHVuYm91bmRcbiAgICAgIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LCBvciBhIGNsYXNzIG1ldGhvZCBvYmplY3QuIFdoZW4gdGhlXG4gICAgICBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCwgYSBuZXcgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgb25seSBjcmVhdGVkIGlmIHRoZSBjbGFzcyBmcm9tIHdoaWNoIGl0IGlzIGJlaW5nIHJldHJpZXZlZCBpc1xuICAgICAgdGhlIHNhbWUgYXMsIG9yIGEgZGVyaXZlZCBjbGFzcyBvZiwgdGhlIGNsYXNzIHN0b3JlZCBpbiB0aGVcbiAgICAgIG9yaWdpbmFsIG1ldGhvZCBvYmplY3Q7IG90aGVyd2lzZSwgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3QgaXNcbiAgICAgIHVzZWQgYXMgaXQgaXMuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYVxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MsIGl0cyBgYGltX3NlbGZgYFxuICAgICAgYXR0cmlidXRlIGlzIGBgTm9uZWBgIGFuZCB0aGUgbWV0aG9kIG9iamVjdCBpcyBzYWlkIHRvIGJlXG4gICAgICB1bmJvdW5kLiBXaGVuIG9uZSBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLWRlZmluZWRcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MgdmlhIG9uZSBvZiBpdHMgaW5zdGFuY2VzLCBpdHNcbiAgICAgIGBgaW1fc2VsZmBgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdCBpc1xuICAgICAgc2FpZCB0byBiZSBib3VuZC4gSW4gZWl0aGVyIGNhc2UsIHRoZSBuZXcgbWV0aG9kXCdzIGBgaW1fY2xhc3NgYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBjbGFzcyBmcm9tIHdoaWNoIHRoZSByZXRyaWV2YWwgdGFrZXMgcGxhY2UsIGFuZFxuICAgICAgaXRzIGBgaW1fZnVuY2BgIGF0dHJpYnV0ZSBpcyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSBgYGltX2Z1bmNgYFxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzIGBgaW1fZnVuY2BgIGF0dHJpYnV0ZS5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgaXRzIGBgaW1fc2VsZmBgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIGNsYXNzIGl0c2VsZiAodGhlIHNhbWUgYXMgdGhlIGBgaW1fY2xhc3NgYFxuICAgICAgYXR0cmlidXRlKSwgYW5kIGl0cyBgYGltX2Z1bmNgYCBhdHRyaWJ1dGUgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdFxuICAgICAgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIHVuYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGVcbiAgICAgIHVuZGVybHlpbmcgZnVuY3Rpb24gKGBgaW1fZnVuY2BgKSBpcyBjYWxsZWQsIHdpdGggdGhlXG4gICAgICByZXN0cmljdGlvbiB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIHRoZVxuICAgICAgcHJvcGVyIGNsYXNzIChgYGltX2NsYXNzYGApIG9yIG9mIGEgZGVyaXZlZCBjbGFzcyB0aGVyZW9mLlxuXG4gICAgICBXaGVuIGEgYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGVcbiAgICAgIHVuZGVybHlpbmcgZnVuY3Rpb24gKGBgaW1fZnVuY2BgKSBpcyBjYWxsZWQsIGluc2VydGluZyB0aGUgY2xhc3NcbiAgICAgIGluc3RhbmNlIChgYGltX3NlbGZgYCkgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3JcbiAgICAgIGluc3RhbmNlLCB3aGVuIGBgQ2BgIGlzIGEgY2xhc3Mgd2hpY2ggY29udGFpbnMgYSBkZWZpbml0aW9uIGZvclxuICAgICAgYSBmdW5jdGlvbiBgYGYoKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBDYGAsIGNhbGxpbmdcbiAgICAgIGBgeC5mKDEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgQy5mKHgsIDEpYGAuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluIGBgaW1fc2VsZmBgIHdpbGwgYWN0dWFsbHlcbiAgICAgIGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgYGB4LmYoMSlgYCBvclxuICAgICAgYGBDLmYoMSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBmKEMsMSlgYCB3aGVyZSBgYGZgYCBpc1xuICAgICAgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gKHVuYm91bmQgb3JcbiAgICAgIGJvdW5kKSBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXNcbiAgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBjbGFzcyBvciBpbnN0YW5jZS4gSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bFxuICAgICAgb3B0aW1pemF0aW9uIGlzIHRvIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kXG4gICAgICBjYWxsIHRoYXQgbG9jYWwgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvblxuICAgICAgb25seSBoYXBwZW5zIGZvciB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzXG4gICAgICAoYW5kIGFsbCBub24tY2FsbGFibGUgb2JqZWN0cykgYXJlIHJldHJpZXZlZCB3aXRob3V0XG4gICAgICB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB1c2VyLWRlZmluZWRcbiAgICAgIGZ1bmN0aW9ucyB3aGljaCBhcmUgYXR0cmlidXRlcyBvZiBhIGNsYXNzIGluc3RhbmNlIGFyZSBub3RcbiAgICAgIGNvbnZlcnRlZCB0byBib3VuZCBtZXRob2RzOyB0aGlzICpvbmx5KiBoYXBwZW5zIHdoZW4gdGhlXG4gICAgICBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIGNsYXNzLlxuXG4gICBHZW5lcmF0b3IgZnVuY3Rpb25zXG4gICAgICBBIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCB1c2VzIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgYGBuZXh0KClgYCBtZXRob2Qgd2lsbCBjYXVzZSB0aGUgZnVuY3Rpb24gdG9cbiAgICAgIGV4ZWN1dGUgdW50aWwgaXQgcHJvdmlkZXMgYSB2YWx1ZSB1c2luZyB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudC5cbiAgICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBzdGF0ZW1lbnQgb3IgZmFsbHMgb2ZmXG4gICAgICB0aGUgZW5kLCBhIGBgU3RvcEl0ZXJhdGlvbmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZVxuICAgICAgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mIHZhbHVlcyB0byBiZVxuICAgICAgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIGBgbGVuKClgYCBhbmQgYGBtYXRoLnNpbigpYGBcbiAgICAgIChgYG1hdGhgYCBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogYGBfX2RvY19fYGAgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGU7IGBgX19uYW1lX19gYCBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uXCdzIG5hbWU7IGBgX19zZWxmX19gYCBpcyBzZXQgdG8gYGBOb25lYGAgKGJ1dCBzZWUgdGhlXG4gICAgICBuZXh0IGl0ZW0pOyBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZVxuICAgICAgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgIGBgYWxpc3QuYXBwZW5kKClgYCwgYXNzdW1pbmcgKmFsaXN0KiBpcyBhIGxpc3Qgb2JqZWN0LiBJbiB0aGlzXG4gICAgICBjYXNlLCB0aGUgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlIGBgX19zZWxmX19gYCBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqbGlzdCouXG5cbiAgIENsYXNzIFR5cGVzXG4gICAgICBDbGFzcyB0eXBlcywgb3IgIm5ldy1zdHlsZSBjbGFzc2VzLCIgYXJlIGNhbGxhYmxlLiAgVGhlc2VcbiAgICAgIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3RvcmllcyBmb3IgbmV3IGluc3RhbmNlcyBvZlxuICAgICAgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvciBjbGFzcyB0eXBlcyB0aGF0XG4gICAgICBvdmVycmlkZSBgYF9fbmV3X18oKWBgLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGUgY2FsbCBhcmUgcGFzc2VkIHRvXG4gICAgICBgYF9fbmV3X18oKWBgIGFuZCwgaW4gdGhlIHR5cGljYWwgY2FzZSwgdG8gYGBfX2luaXRfXygpYGAgdG9cbiAgICAgIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3NpYyBDbGFzc2VzXG4gICAgICBDbGFzcyBvYmplY3RzIGFyZSBkZXNjcmliZWQgYmVsb3cuICBXaGVuIGEgY2xhc3Mgb2JqZWN0IGlzXG4gICAgICBjYWxsZWQsIGEgbmV3IGNsYXNzIGluc3RhbmNlIChhbHNvIGRlc2NyaWJlZCBiZWxvdykgaXMgY3JlYXRlZFxuICAgICAgYW5kIHJldHVybmVkLiAgVGhpcyBpbXBsaWVzIGEgY2FsbCB0byB0aGUgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGBcbiAgICAgIG1ldGhvZCBpZiBpdCBoYXMgb25lLiAgQW55IGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRvIHRoZVxuICAgICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLiAgSWYgdGhlcmUgaXMgbm8gYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgICAgdGhlIGNsYXNzIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLlxuXG4gICBDbGFzcyBpbnN0YW5jZXNcbiAgICAgIENsYXNzIGluc3RhbmNlcyBhcmUgZGVzY3JpYmVkIGJlbG93LiAgQ2xhc3MgaW5zdGFuY2VzIGFyZVxuICAgICAgY2FsbGFibGUgb25seSB3aGVuIHRoZSBjbGFzcyBoYXMgYSBgYF9fY2FsbF9fKClgYCBtZXRob2Q7XG4gICAgICBgYHgoYXJndW1lbnRzKWBgIGlzIGEgc2hvcnRoYW5kIGZvciBgYHguX19jYWxsX18oYXJndW1lbnRzKWBgLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBpbXBvcnRlZCBieSB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgKHNlZSBzZWN0aW9uICpUaGVcbiAgIGltcG9ydCBzdGF0ZW1lbnQqKS4gQSBtb2R1bGUgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieVxuICAgYSBkaWN0aW9uYXJ5IG9iamVjdCAodGhpcyBpcyB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZVxuICAgZnVuY19nbG9iYWxzIGF0dHJpYnV0ZSBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS5cbiAgIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgYGBtLnhgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdYGAuIEEgbW9kdWxlIG9iamVjdFxuICAgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZSBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGVcbiAgIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCBgYG0ueCA9IDFgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdID0gMWBgLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6IGBgX19kaWN0X19gYCBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgUHJlZGVmaW5lZCAod3JpdGFibGUpIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgbW9kdWxlXCdzXG4gICBuYW1lOyBgYF9fZG9jX19gYCBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBgYE5vbmVgYFxuICAgaWYgdW5hdmFpbGFibGU7IGBgX19maWxlX19gYCBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaFxuICAgdGhlIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGVcbiAgIGBgX19maWxlX19gYCBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQgZm9yIEMgbW9kdWxlcyB0aGF0IGFyZVxuICAgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgaW50ZXJwcmV0ZXI7IGZvciBleHRlbnNpb24gbW9kdWxlc1xuICAgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBzaGFyZWQgbGlicmFyeSwgaXQgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZVxuICAgc2hhcmVkIGxpYnJhcnkgZmlsZS5cblxuQ2xhc3Nlc1xuICAgQm90aCBjbGFzcyB0eXBlcyAobmV3LXN0eWxlIGNsYXNzZXMpIGFuZCBjbGFzcyBvYmplY3RzIChvbGQtXG4gICBzdHlsZS9jbGFzc2ljIGNsYXNzZXMpIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9uc1xuICAgKHNlZSBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2VcbiAgIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBDLnhgYCBpc1xuICAgdHJhbnNsYXRlZCB0byBgYEMuX19kaWN0X19bIngiXWBgIChhbHRob3VnaCBmb3IgbmV3LXN0eWxlIGNsYXNzZXNcbiAgIGluIHBhcnRpY3VsYXIgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoIGFsbG93IGZvciBvdGhlclxuICAgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIG5vdCBmb3VuZFxuICAgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZSBjbGFzc2VzLiAgRm9yXG4gICBvbGQtc3R5bGUgY2xhc3NlcywgdGhlIHNlYXJjaCBpcyBkZXB0aC1maXJzdCwgbGVmdC10by1yaWdodCBpbiB0aGVcbiAgIG9yZGVyIG9mIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdC4gTmV3LXN0eWxlIGNsYXNzZXMgdXNlXG4gICB0aGUgbW9yZSBjb21wbGV4IEMzIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5XG4gICBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlXG4gICB0aGVyZSBhcmUgbXVsdGlwbGUgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uXG4gICBhbmNlc3Rvci4gQWRkaXRpb25hbCBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBuZXctc3R5bGVcbiAgIGNsYXNzZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zXG4gICByZWxlYXNlIGF0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyBgYENgYCwgc2F5KSB3b3VsZCB5aWVsZFxuICAgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGFuIHVuYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlIGFzc29jaWF0ZWQgY2xhc3MgaXMgZWl0aGVyIGBgQ2BgIG9yIG9uZSBvZiBpdHMgYmFzZVxuICAgY2xhc3NlcywgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiB1bmJvdW5kIHVzZXItZGVmaW5lZCBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSBgYGltX2NsYXNzYGAgYXR0cmlidXRlIGlzIGBgQ2BgLiBXaGVuIGl0IHdvdWxkIHlpZWxkIGFcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYSBib3VuZCB1c2VyLWRlZmluZWRcbiAgIG1ldGhvZCBvYmplY3Qgd2hvc2UgYGBpbV9jbGFzc2BgIGFuZCBgYGltX3NlbGZgYCBhdHRyaWJ1dGVzIGFyZVxuICAgYm90aCBgYENgYC4gIFdoZW4gaXQgd291bGQgeWllbGQgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXNcbiAgIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkIGJ5IHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC5cbiAgIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheSBpbiB3aGljaFxuICAgYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseVxuICAgY29udGFpbmVkIGluIGl0cyBgYF9fZGljdF9fYGAgKG5vdGUgdGhhdCBvbmx5IG5ldy1zdHlsZSBjbGFzc2VzXG4gICBzdXBwb3J0IGRlc2NyaXB0b3JzKS5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIGNsYXNzIG5hbWU7IGBgX19tb2R1bGVfX2BgXG4gICBpcyB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyBgYF9fZGljdF9fYGAgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgYGBfX2Jhc2VzX19gYCBpcyBhXG4gICB0dXBsZSAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcyxcbiAgIGluIHRoZSBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7XG4gICBgYF9fZG9jX19gYCBpcyB0aGUgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWZcbiAgIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0IG9yIGFuIHVuYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3Qgd2hvc2VcbiAgIGFzc29jaWF0ZWQgY2xhc3MgaXMgdGhlIGNsYXNzIChjYWxsIGl0IGBgQ2BgKSBvZiB0aGUgaW5zdGFuY2UgZm9yXG4gICB3aGljaCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZSB3YXMgaW5pdGlhdGVkIG9yIG9uZSBvZiBpdHMgYmFzZXMsIGl0XG4gICBpcyB0cmFuc2Zvcm1lZCBpbnRvIGEgYm91bmQgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3Qgd2hvc2VcbiAgIGBgaW1fY2xhc3NgYCBhdHRyaWJ1dGUgaXMgYGBDYGAgYW5kIHdob3NlIGBgaW1fc2VsZmBgIGF0dHJpYnV0ZSBpc1xuICAgdGhlIGluc3RhbmNlLiBTdGF0aWMgbWV0aG9kIGFuZCBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzb1xuICAgdHJhbnNmb3JtZWQsIGFzIGlmIHRoZXkgaGFkIGJlZW4gcmV0cmlldmVkIGZyb20gY2xhc3MgYGBDYGA7IHNlZVxuICAgYWJvdmUgdW5kZXIgIkNsYXNzZXMiLiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3JcbiAgIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0c1xuICAgaW5zdGFuY2VzIG1heSBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlXG4gICBjbGFzc1wncyBgYF9fZGljdF9fYGAuIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZVxuICAgb2JqZWN0XCdzIGNsYXNzIGhhcyBhIGBgX19nZXRhdHRyX18oKWBgIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG9cbiAgIHNhdGlzZnkgdGhlIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICBgYF9fc2V0YXR0cl9fKClgYCBvciBgYF9fZGVsYXR0cl9fKClgYCBtZXRob2QsIHRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fZGljdF9fYGAgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgYGBfX2NsYXNzX19gYCBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkZpbGVzXG4gICBBIGZpbGUgb2JqZWN0IHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgRmlsZSBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5XG4gICB0aGUgYGBvcGVuKClgYCBidWlsdC1pbiBmdW5jdGlvbiwgYW5kIGFsc28gYnkgYGBvcy5wb3BlbigpYGAsXG4gICBgYG9zLmZkb3BlbigpYGAsIGFuZCB0aGUgYGBtYWtlZmlsZSgpYGAgbWV0aG9kIG9mIHNvY2tldCBvYmplY3RzXG4gICAoYW5kIHBlcmhhcHMgYnkgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHMgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uXG4gICBtb2R1bGVzKS4gIFRoZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgIGFuZFxuICAgYGBzeXMuc3RkZXJyYGAgYXJlIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZVxuICAgaW50ZXJwcmV0ZXJcJ3Mgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtcy4gIFNlZSAqRmlsZVxuICAgT2JqZWN0cyogZm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gb2YgZmlsZSBvYmplY3RzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBjb19uYW1lYGAgZ2l2ZXMgdGhlIGZ1bmN0aW9uXG4gICAgICBuYW1lOyBgYGNvX2FyZ2NvdW50YGAgaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuICAgICAgKGluY2x1ZGluZyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyk7IGBgY29fbmxvY2Fsc2BgIGlzIHRoZVxuICAgICAgbnVtYmVyIG9mIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nXG4gICAgICBhcmd1bWVudHMpOyBgYGNvX3Zhcm5hbWVzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZlxuICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpO1xuICAgICAgYGBjb19jZWxsdmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IG5lc3RlZCBmdW5jdGlvbnM7XG4gICAgICBgYGNvX2ZyZWV2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlXG4gICAgICB2YXJpYWJsZXM7IGBgY29fY29kZWBgIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2ZcbiAgICAgIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgYGBjb19jb25zdHNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG4gICAgICBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19uYW1lc2BgIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX2ZpbGVuYW1lYGAgaXNcbiAgICAgIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgIGBgY29fZmlyc3RsaW5lbm9gYCBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgYGBjb19sbm90YWJgYCBpcyBhIHN0cmluZyBlbmNvZGluZyB0aGUgbWFwcGluZyBmcm9tIGJ5dGVjb2RlXG4gICAgICBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycyAoZm9yIGRldGFpbHMgc2VlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVcbiAgICAgIGludGVycHJldGVyKTsgYGBjb19zdGFja3NpemVgYCBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyBgYGNvX2ZsYWdzYGAgaXMgYW4gaW50ZWdlciBlbmNvZGluZ1xuICAgICAgYSBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yIGBgY29fZmxhZ3NgYDogYml0XG4gICAgICBgYDB4MDRgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKmFyZ3VtZW50c2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdFxuICAgICAgYGAweDA4YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCoqa2V5d29yZHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHM7IGJpdCBgYDB4MjBgYCBpcyBzZXQgaWZcbiAgICAgIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zIChgYGZyb20gX19mdXR1cmVfXyBpbXBvcnRcbiAgICAgIGRpdmlzaW9uYGApIGFsc28gdXNlIGJpdHMgaW4gYGBjb19mbGFnc2BgIHRvIGluZGljYXRlIHdoZXRoZXIgYVxuICAgICAgY29kZSBvYmplY3Qgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0XG4gICAgICBgYDB4MjAwMGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlXG4gICAgICBkaXZpc2lvbiBlbmFibGVkOyBiaXRzIGBgMHgxMGBgIGFuZCBgYDB4MTAwMGBgIHdlcmUgdXNlZCBpblxuICAgICAgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gYGBjb19mbGFnc2BgIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgIGBgY29fY29uc3RzYGAgaXMgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiwgb3JcbiAgICAgIGBgTm9uZWBgIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBmX2JhY2tgYCBpcyB0byB0aGUgcHJldmlvdXNcbiAgICAgIHN0YWNrIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciBgYE5vbmVgYCBpZiB0aGlzIGlzIHRoZVxuICAgICAgYm90dG9tIHN0YWNrIGZyYW1lOyBgYGZfY29kZWBgIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZFxuICAgICAgaW4gdGhpcyBmcmFtZTsgYGBmX2xvY2Fsc2BgIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cFxuICAgICAgbG9jYWwgdmFyaWFibGVzOyBgYGZfZ2xvYmFsc2BgIGlzIHVzZWQgZm9yIGdsb2JhbCB2YXJpYWJsZXM7XG4gICAgICBgYGZfYnVpbHRpbnNgYCBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lcztcbiAgICAgIGBgZl9yZXN0cmljdGVkYGAgaXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZnVuY3Rpb24gaXNcbiAgICAgIGV4ZWN1dGluZyBpbiByZXN0cmljdGVkIGV4ZWN1dGlvbiBtb2RlOyBgYGZfbGFzdGlgYCBnaXZlcyB0aGVcbiAgICAgIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50byB0aGUgYnl0ZWNvZGUgc3RyaW5nXG4gICAgICBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6IGBgZl90cmFjZWBgLCBpZiBub3QgYGBOb25lYGAsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7IGBgZl9leGNfdHlwZWBgLCBgYGZfZXhjX3ZhbHVlYGAsXG4gICAgICBgYGZfZXhjX3RyYWNlYmFja2BgIHJlcHJlc2VudCB0aGUgbGFzdCBleGNlcHRpb24gcmFpc2VkIGluIHRoZVxuICAgICAgcGFyZW50IGZyYW1lIHByb3ZpZGVkIGFub3RoZXIgZXhjZXB0aW9uIHdhcyBldmVyIHJhaXNlZCBpbiB0aGVcbiAgICAgIGN1cnJlbnQgZnJhbWUgKGluIGFsbCBvdGhlciBjYXNlcyB0aGV5IGFyZSBOb25lKTsgYGBmX2xpbmVub2BgXG4gICAgICBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlciBvZiB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tXG4gICAgICB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbiBqdW1wcyB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlXG4gICAgICBib3R0b20tbW9zdCBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmRcbiAgICAgIChha2EgU2V0IE5leHQgU3RhdGVtZW50KSBieSB3cml0aW5nIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyBgYHN5cy5leGNfdHJhY2ViYWNrYGAsXG4gICAgICBhbmQgYWxzbyBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnlcbiAgICAgIGBgc3lzLmV4Y19pbmZvKClgYC4gIFRoZSBsYXR0ZXIgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UsXG4gICAgICBzaW5jZSBpdCB3b3JrcyBjb3JyZWN0bHkgd2hlbiB0aGUgcHJvZ3JhbSBpcyB1c2luZyBtdWx0aXBsZVxuICAgICAgdGhyZWFkcy4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWlucyBubyBzdWl0YWJsZSBoYW5kbGVyLCB0aGVcbiAgICAgIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseSBmb3JtYXR0ZWQpIHRvIHRoZSBzdGFuZGFyZCBlcnJvclxuICAgICAgc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXMgaW50ZXJhY3RpdmUsIGl0IGlzIGFsc28gbWFkZVxuICAgICAgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgdGJfbmV4dGBgIGlzIHRoZSBuZXh0IGxldmVsIGluXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkKSwgb3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgYGB0Yl9mcmFtZWBgXG4gICAgICBwb2ludHMgdG8gdGhlIGV4ZWN1dGlvbiBmcmFtZSBvZiB0aGUgY3VycmVudCBsZXZlbDtcbiAgICAgIGBgdGJfbGluZW5vYGAgZ2l2ZXMgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkOyBgYHRiX2xhc3RpYGAgaW5kaWNhdGVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlXG4gICAgICBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXJcbiAgICAgIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZSBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQgaW4gYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIG5vIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2VcbiAgICAgIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIHdoZW4gKmV4dGVuZGVkIHNsaWNlXG4gICAgICBzeW50YXgqIGlzIHVzZWQuIFRoaXMgaXMgYSBzbGljZSB1c2luZyB0d28gY29sb25zLCBvciBtdWx0aXBsZVxuICAgICAgc2xpY2VzIG9yIGVsbGlwc2VzIHNlcGFyYXRlZCBieSBjb21tYXMsIGUuZy4sIGBgYVtpOmo6c3RlcF1gYCxcbiAgICAgIGBgYVtpOmosIGs6bF1gYCwgb3IgYGBhWy4uLiwgaTpqXWBgLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5XG4gICAgICB0aGUgYnVpbHQtaW4gYGBzbGljZSgpYGAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgc3RhcnRgYCBpcyB0aGUgbG93ZXIgYm91bmQ7XG4gICAgICBgYHN0b3BgYCBpcyB0aGUgdXBwZXIgYm91bmQ7IGBgc3RlcGBgIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzXG4gICAgICBgYE5vbmVgYCBpZiBvbWl0dGVkLiBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXh0ZW5kZWQgc2xpY2UgdGhhdCB0aGUgc2xpY2VcbiAgICAgICAgIG9iamVjdCB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCpcbiAgICAgICAgIGl0ZW1zLiAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHlcbiAgICAgICAgIHRoZXNlIGFyZSB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3JcbiAgICAgICAgIHN0cmlkZSBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlc1xuICAgICAgICAgYXJlIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICAgICAgICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzdGF0aWNtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluIGBgY2xhc3NtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuJywKICAndHlwZXNmdW5jdGlvbnMnOiB1J1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogYGBmdW5jKGFyZ3VtZW50LWxpc3QpYGAuXG5cblRoZXJlIGFyZSByZWFsbHkgdHdvIGZsYXZvcnMgb2YgZnVuY3Rpb24gb2JqZWN0czogYnVpbHQtaW4gZnVuY3Rpb25zXG5hbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gIEJvdGggc3VwcG9ydCB0aGUgc2FtZSBvcGVyYXRpb24gKHRvIGNhbGxcbnRoZSBmdW5jdGlvbiksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGlmZmVyZW50LCBoZW5jZSB0aGVcbmRpZmZlcmVudCBvYmplY3QgdHlwZXMuXG5cblNlZSAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKLSAndHlwZXNtYXBwaW5nJzogdSdcbk1hcHBpbmcgVHlwZXMgLS0tIGBgZGljdGBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0XG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoW2FyZ10pXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgb3IgZnJvbSBhIHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy4gSWYgbm8gYXJndW1lbnRzIGFyZVxuICAgZ2l2ZW4sIHJldHVybiBhIG5ldyBlbXB0eSBkaWN0aW9uYXJ5LiBJZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgKmFyZyogaXMgYSBtYXBwaW5nIG9iamVjdCwgcmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHRoZSBzYW1lXG4gICBrZXlzIHRvIHRoZSBzYW1lIHZhbHVlcyBhcyBkb2VzIHRoZSBtYXBwaW5nIG9iamVjdC4gT3RoZXJ3aXNlIHRoZVxuICAgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGEgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHNcbiAgIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3Igb2JqZWN0LiAgVGhlIGVsZW1lbnRzIG9mIHRoZSBhcmd1bWVudFxuICAgbXVzdCBlYWNoIGFsc28gYmUgb2Ygb25lIG9mIHRob3NlIGtpbmRzLCBhbmQgZWFjaCBtdXN0IGluIHR1cm5cbiAgIGNvbnRhaW4gZXhhY3RseSB0d28gb2JqZWN0cy4gVGhlIGZpcnN0IGlzIHVzZWQgYXMgYSBrZXkgaW4gdGhlIG5ld1xuICAgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgYXMgdGhlIGtleVwncyB2YWx1ZS4gIElmIGEgZ2l2ZW4ga2V5IGlzXG4gICBzZWVuIG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQgaXMgcmV0YWluZWRcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZHMgdGhlbXNlbHZlcyB3aXRoIHRoZWlyXG4gICBhc3NvY2lhdGVkIHZhbHVlcyBhcmUgYWRkZWQgYXMgaXRlbXMgdG8gdGhlIGRpY3Rpb25hcnkuIElmIGEga2V5IGlzXG4gICBzcGVjaWZpZWQgYm90aCBpbiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBhbmQgYXMgYSBrZXl3b3JkXG4gICBhcmd1bWVudCwgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5d29yZCBpcyByZXRhaW5lZCBpbiB0aGVcbiAgIGRpY3Rpb25hcnkuIEZvciBleGFtcGxlLCB0aGVzZSBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbCB0b1xuICAgYGB7Im9uZSI6IDIsICJ0d28iOiAzfWBgOlxuXG4gICAqIGBgZGljdChvbmU9MiwgdHdvPTMpYGBcblxuICAgKiBgYGRpY3Qoe1wnb25lXCc6IDIsIFwndHdvXCc6IDN9KWBgXG5cbiAgICogYGBkaWN0KHppcCgoXCdvbmVcJywgXCd0d29cJyksICgyLCAzKSkpYGBcblxuICAgKiBgYGRpY3QoW1tcJ3R3b1wnLCAzXSwgW1wnb25lXCcsIDJdXSlgYFxuXG4gICBUaGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvciBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvblxuICAgaWRlbnRpZmllcnM7IHRoZSBvdGhlcnMgd29yayB3aXRoIGFueSB2YWxpZCBrZXlzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGJ1aWxkaW5nIGEgZGljdGlvbmFyeSBmcm9tXG4gICBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuICAgVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIHRoYXQgZGljdGlvbmFyaWVzIHN1cHBvcnQgKGFuZCB0aGVyZWZvcmUsXG4gICBjdXN0b20gbWFwcGluZyB0eXBlcyBzaG91bGQgc3VwcG9ydCB0b28pOlxuXG4gICBsZW4oZClcblxuICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRpY3Rpb25hcnkgKmQqLlxuXG4gICBkW2tleV1cblxuICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuNTogSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2RcbiAgICAgIGBgX19taXNzaW5nX18oKWBgLCBpZiB0aGUga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCB0aGVcbiAgICAgIGBgZFtrZXldYGAgb3BlcmF0aW9uIGNhbGxzIHRoYXQgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhc1xuICAgICAgYXJndW1lbnQuICBUaGUgYGBkW2tleV1gYCBvcGVyYXRpb24gdGhlbiByZXR1cm5zIG9yIHJhaXNlc1xuICAgICAgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZSBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsXG4gICAgICBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlciBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlXG4gICAgICBgYF9fbWlzc2luZ19fKClgYC4gSWYgYGBfX21pc3NpbmdfXygpYGAgaXMgbm90IGRlZmluZWQsXG4gICAgICBgYEtleUVycm9yYGAgaXMgcmFpc2VkLiAgYGBfX21pc3NpbmdfXygpYGAgbXVzdCBiZSBhIG1ldGhvZDsgaXRcbiAgICAgIGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZS4gRm9yIGFuIGV4YW1wbGUsIHNlZVxuICAgICAgYGBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdGBgLlxuXG4gICBkW2tleV0gPSB2YWx1ZVxuXG4gICAgICBTZXQgYGBkW2tleV1gYCB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSBgYGRba2V5XWBgIGZyb20gKmQqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIG1hcC5cblxuICAga2V5IGluIGRcblxuICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgYGBGYWxzZWBgLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGtleSBub3QgaW4gZFxuXG4gICAgICBFcXVpdmFsZW50IHRvIGBgbm90IGtleSBpbiBkYGAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yIGBgaXRlcmtleXMoKWBgLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgYGBmcm9ta2V5cygpYGAgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAsXG4gICAgICBzbyB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgaGFzX2tleShrZXkpXG5cbiAgICAgIFRlc3QgZm9yIHRoZSBwcmVzZW5jZSBvZiAqa2V5KiBpbiB0aGUgZGljdGlvbmFyeS4gIGBgaGFzX2tleSgpYGBcbiAgICAgIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGBrZXkgaW4gZGBgLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgbGlzdCBvZiBgYChrZXksIHZhbHVlKWBgXG4gICAgICBwYWlycy5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBLZXlzIGFuZCB2YWx1ZXMgYXJlIGxpc3RlZCBpblxuICAgICAgYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uXG4gICAgICBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2ZcbiAgICAgIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy5cblxuICAgICAgSWYgYGBpdGVtcygpYGAsIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVyaXRlbXMoKWBgLFxuICAgICAgYGBpdGVya2V5cygpYGAsIGFuZCBgYGl0ZXJ2YWx1ZXMoKWBgIGFyZSBjYWxsZWQgd2l0aCBub1xuICAgICAgaW50ZXJ2ZW5pbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIGxpc3RzIHdpbGxcbiAgICAgIGRpcmVjdGx5IGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsXG4gICAgICBrZXkpYGAgcGFpcnMgdXNpbmcgYGB6aXAoKWBgOiBgYHBhaXJzID0gemlwKGQudmFsdWVzKCksXG4gICAgICBkLmtleXMoKSlgYC4gIFRoZSBzYW1lIHJlbGF0aW9uc2hpcCBob2xkcyBmb3IgdGhlIGBgaXRlcmtleXMoKWBgXG4gICAgICBhbmQgYGBpdGVydmFsdWVzKClgYCBtZXRob2RzOiBgYHBhaXJzID0gemlwKGQuaXRlcnZhbHVlcygpLFxuICAgICAgZC5pdGVya2V5cygpKWBgIHByb3ZpZGVzIHRoZSBzYW1lIHZhbHVlIGZvciBgYHBhaXJzYGAuIEFub3RoZXJcbiAgICAgIHdheSB0byBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluXG4gICAgICBkLml0ZXJpdGVtcygpXWBgLlxuXG4gICBpdGVyaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZGljdGlvbmFyeVwncyBgYChrZXksIHZhbHVlKWBgIHBhaXJzLlxuICAgICAgU2VlIHRoZSBub3RlIGZvciBgYGRpY3QuaXRlbXMoKWBgLlxuXG4gICAgICBVc2luZyBgYGl0ZXJpdGVtcygpYGAgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlXG4gICAgICBkaWN0aW9uYXJ5IG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXJcbiAgICAgIGFsbCBlbnRyaWVzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGl0ZXJrZXlzKClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSB0aGUgbm90ZSBmb3JcbiAgICAgIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgICAgIFVzaW5nIGBgaXRlcmtleXMoKWBgIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZVxuICAgICAgZGljdGlvbmFyeSBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyXG4gICAgICBhbGwgZW50cmllcy5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBpdGVydmFsdWVzKClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgICAgVXNpbmcgYGBpdGVydmFsdWVzKClgYCB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGVcbiAgICAgIGRpY3Rpb25hcnkgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlclxuICAgICAgYWxsIGVudHJpZXMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgbGlzdCBvZiBrZXlzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjMuXG5cbiAgIHBvcGl0ZW0oKVxuXG4gICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgYGAoa2V5LCB2YWx1ZSlgYCBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICBgYHBvcGl0ZW0oKWBgIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nIGBgcG9waXRlbSgpYGAgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiBgYE5vbmVgYC5cblxuICAgICAgYGB1cGRhdGUoKWBgIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgYSB0dXBsZSBvciBvdGhlciBpdGVyYWJsZSBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiBgYGQudXBkYXRlKHJlZD0xLFxuICAgICAgYmx1ZT0yKWBgLlxuXG4gICAgICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBBbGxvd2VkIHRoZSBhcmd1bWVudCB0byBiZSBhbiBpdGVyYWJsZVxuICAgICAgb2Yga2V5L3ZhbHVlIHBhaXJzIGFuZCBhbGxvd2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGxpc3Qgb2YgdmFsdWVzLiAgU2VlIHRoZSBub3RlXG4gICAgICBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cbicsCisgJ3R5cGVzbWFwcGluZyc6IHUnXG5NYXBwaW5nIFR5cGVzIC0tLSBgYGRpY3RgYFxuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqbWFwcGluZyogb2JqZWN0IG1hcHMgKmhhc2hhYmxlKiB2YWx1ZXMgdG8gYXJiaXRyYXJ5IG9iamVjdHMuXG5NYXBwaW5ncyBhcmUgbXV0YWJsZSBvYmplY3RzLiAgVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgb25lIHN0YW5kYXJkXG5tYXBwaW5nIHR5cGUsIHRoZSAqZGljdGlvbmFyeSouICAoRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdFxuaW4gYGBsaXN0YGAsIGBgc2V0YGAsIGFuZCBgYHR1cGxlYGAgY2xhc3NlcywgYW5kIHRoZSBgYGNvbGxlY3Rpb25zYGBcbm1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyBgYDFgYCBhbmQgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0b1xuaW5kZXggdGhlIHNhbWUgZGljdGlvbmFyeSBlbnRyeS4gIChOb3RlIGhvd2V2ZXIsIHRoYXQgc2luY2UgY29tcHV0ZXJzXG5zdG9yZSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIGFwcHJveGltYXRpb25zIGl0IGlzIHVzdWFsbHkgdW53aXNlIHRvXG51c2UgdGhlbSBhcyBkaWN0aW9uYXJ5IGtleXMuKVxuXG5EaWN0aW9uYXJpZXMgY2FuIGJlIGNyZWF0ZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mXG5gYGtleTogdmFsdWVgYCBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogYGB7XCdqYWNrXCc6IDQwOTgsXG5cJ3Nqb2VyZFwnOiA0MTI3fWBgIG9yIGBgezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfWBgLCBvciBieSB0aGVcbmBgZGljdGBgIGNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KFthcmddKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IG9yIGZyb20gYSBzZXQgb2Yga2V5d29yZCBhcmd1bWVudHMuIElmIG5vIGFyZ3VtZW50cyBhcmVcbiAgIGdpdmVuLCByZXR1cm4gYSBuZXcgZW1wdHkgZGljdGlvbmFyeS4gSWYgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICphcmcqIGlzIGEgbWFwcGluZyBvYmplY3QsIHJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyB0aGUgc2FtZVxuICAga2V5cyB0byB0aGUgc2FtZSB2YWx1ZXMgYXMgZG9lcyB0aGUgbWFwcGluZyBvYmplY3QuIE90aGVyd2lzZSB0aGVcbiAgIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzXG4gICBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yIG9iamVjdC4gIFRoZSBlbGVtZW50cyBvZiB0aGUgYXJndW1lbnRcbiAgIG11c3QgZWFjaCBhbHNvIGJlIG9mIG9uZSBvZiB0aG9zZSBraW5kcywgYW5kIGVhY2ggbXVzdCBpbiB0dXJuXG4gICBjb250YWluIGV4YWN0bHkgdHdvIG9iamVjdHMuIFRoZSBmaXJzdCBpcyB1c2VkIGFzIGEga2V5IGluIHRoZSBuZXdcbiAgIGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBrZXlcJ3MgdmFsdWUuICBJZiBhIGdpdmVuIGtleSBpc1xuICAgc2VlbiBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0IGlzIHJldGFpbmVkXG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgd2l0aCB0aGVpclxuICAgYXNzb2NpYXRlZCB2YWx1ZXMgYXJlIGFkZGVkIGFzIGl0ZW1zIHRvIHRoZSBkaWN0aW9uYXJ5LiBJZiBhIGtleSBpc1xuICAgc3BlY2lmaWVkIGJvdGggaW4gdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgYW5kIGFzIGEga2V5d29yZFxuICAgYXJndW1lbnQsIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleXdvcmQgaXMgcmV0YWluZWQgaW4gdGhlXG4gICBkaWN0aW9uYXJ5LiBGb3IgZXhhbXBsZSwgdGhlc2UgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWwgdG9cbiAgIGBgeyJvbmUiOiAyLCAidHdvIjogM31gYDpcblxuICAgKiBgYGRpY3Qob25lPTIsIHR3bz0zKWBgXG5cbiAgICogYGBkaWN0KHtcJ29uZVwnOiAyLCBcJ3R3b1wnOiAzfSlgYFxuXG4gICAqIGBgZGljdCh6aXAoKFwnb25lXCcsIFwndHdvXCcpLCAoMiwgMykpKWBgXG5cbiAgICogYGBkaWN0KFtbXCd0d29cJywgM10sIFtcJ29uZVwnLCAyXV0pYGBcblxuICAgVGhlIGZpcnN0IGV4YW1wbGUgb25seSB3b3JrcyBmb3Iga2V5cyB0aGF0IGFyZSB2YWxpZCBQeXRob25cbiAgIGlkZW50aWZpZXJzOyB0aGUgb3RoZXJzIHdvcmsgd2l0aCBhbnkgdmFsaWQga2V5cy5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBidWlsZGluZyBhIGRpY3Rpb25hcnkgZnJvbVxuICAga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbiAgIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpY3Rpb25hcmllcyBzdXBwb3J0IChhbmQgdGhlcmVmb3JlLFxuICAgY3VzdG9tIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdG9vKTpcblxuICAgbGVuKGQpXG5cbiAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBkaWN0aW9uYXJ5ICpkKi5cblxuICAgZFtrZXldXG5cbiAgICAgIFJldHVybiB0aGUgaXRlbSBvZiAqZCogd2l0aCBrZXkgKmtleSouICBSYWlzZXMgYSBgYEtleUVycm9yYGAgaWZcbiAgICAgICprZXkqIGlzIG5vdCBpbiB0aGUgbWFwLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjU6IElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kXG4gICAgICBgYF9fbWlzc2luZ19fKClgYCwgaWYgdGhlIGtleSAqa2V5KiBpcyBub3QgcHJlc2VudCwgdGhlXG4gICAgICBgYGRba2V5XWBgIG9wZXJhdGlvbiBjYWxscyB0aGF0IG1ldGhvZCB3aXRoIHRoZSBrZXkgKmtleSogYXNcbiAgICAgIGFyZ3VtZW50LiAgVGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uIHRoZW4gcmV0dXJucyBvciByYWlzZXNcbiAgICAgIHdoYXRldmVyIGlzIHJldHVybmVkIG9yIHJhaXNlZCBieSB0aGUgYGBfX21pc3NpbmdfXyhrZXkpYGAgY2FsbFxuICAgICAgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC4gTm8gb3RoZXIgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZVxuICAgICAgYGBfX21pc3NpbmdfXygpYGAuIElmIGBgX19taXNzaW5nX18oKWBgIGlzIG5vdCBkZWZpbmVkLFxuICAgICAgYGBLZXlFcnJvcmBgIGlzIHJhaXNlZC4gIGBgX19taXNzaW5nX18oKWBgIG11c3QgYmUgYSBtZXRob2Q7IGl0XG4gICAgICBjYW5ub3QgYmUgYW4gaW5zdGFuY2UgdmFyaWFibGUuIEZvciBhbiBleGFtcGxlLCBzZWVcbiAgICAgIGBgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3RgYC5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0IGBgZFtrZXldYGAgdG8gKnZhbHVlKi5cblxuICAgZGVsIGRba2V5XVxuXG4gICAgICBSZW1vdmUgYGBkW2tleV1gYCBmcm9tICpkKi4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZiAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiBgYFRydWVgYCBpZiAqZCogaGFzIGEga2V5ICprZXkqLCBlbHNlIGBgRmFsc2VgYC5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byBgYG5vdCBrZXkgaW4gZGBgLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciBgYGl0ZXJrZXlzKClgYC5cblxuICAgY2xlYXIoKVxuXG4gICAgICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNvcHkoKVxuXG4gICAgICBSZXR1cm4gYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGZyb21rZXlzKHNlcVssIHZhbHVlXSlcblxuICAgICAgQ3JlYXRlIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gKnNlcSogYW5kIHZhbHVlcyBzZXQgdG9cbiAgICAgICp2YWx1ZSouXG5cbiAgICAgIGBgZnJvbWtleXMoKWBgIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4zLlxuXG4gICBnZXQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIFJldHVybiB0aGUgdmFsdWUgZm9yICprZXkqIGlmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCBlbHNlXG4gICAgICAqZGVmYXVsdCouIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLFxuICAgICAgc28gdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIGhhc19rZXkoa2V5KVxuXG4gICAgICBUZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2YgKmtleSogaW4gdGhlIGRpY3Rpb25hcnkuICBgYGhhc19rZXkoKWBgXG4gICAgICBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGBga2V5IGluIGRgYC5cblxuICAgaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGxpc3Qgb2YgYGAoa2V5LCB2YWx1ZSlgYFxuICAgICAgcGFpcnMuXG5cbiAgICAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogS2V5cyBhbmQgdmFsdWVzIGFyZSBsaXN0ZWQgaW5cbiAgICAgIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpcyBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvblxuICAgICAgaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvbiB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mXG4gICAgICBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuXG5cbiAgICAgIElmIGBgaXRlbXMoKWBgLCBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlcml0ZW1zKClgYCxcbiAgICAgIGBgaXRlcmtleXMoKWBgLCBhbmQgYGBpdGVydmFsdWVzKClgYCBhcmUgY2FsbGVkIHdpdGggbm9cbiAgICAgIGludGVydmVuaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBsaXN0cyB3aWxsXG4gICAgICBkaXJlY3RseSBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGBgKHZhbHVlLFxuICAgICAga2V5KWBgIHBhaXJzIHVzaW5nIGBgemlwKClgYDogYGBwYWlycyA9IHppcChkLnZhbHVlcygpLFxuICAgICAgZC5rZXlzKCkpYGAuICBUaGUgc2FtZSByZWxhdGlvbnNoaXAgaG9sZHMgZm9yIHRoZSBgYGl0ZXJrZXlzKClgYFxuICAgICAgYW5kIGBgaXRlcnZhbHVlcygpYGAgbWV0aG9kczogYGBwYWlycyA9IHppcChkLml0ZXJ2YWx1ZXMoKSxcbiAgICAgIGQuaXRlcmtleXMoKSlgYCBwcm92aWRlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgYGBwYWlyc2BgLiBBbm90aGVyXG4gICAgICB3YXkgdG8gY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgYGBwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpblxuICAgICAgZC5pdGVyaXRlbXMoKV1gYC5cblxuICAgaXRlcml0ZW1zKClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGRpY3Rpb25hcnlcJ3MgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycy5cbiAgICAgIFNlZSB0aGUgbm90ZSBmb3IgYGBkaWN0Lml0ZW1zKClgYC5cblxuICAgICAgVXNpbmcgYGBpdGVyaXRlbXMoKWBgIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZVxuICAgICAgZGljdGlvbmFyeSBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyXG4gICAgICBhbGwgZW50cmllcy5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBpdGVya2V5cygpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgdGhlIG5vdGUgZm9yXG4gICAgICBgYGRpY3QuaXRlbXMoKWBgLlxuXG4gICAgICBVc2luZyBgYGl0ZXJrZXlzKClgYCB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGVcbiAgICAgIGRpY3Rpb25hcnkgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlclxuICAgICAgYWxsIGVudHJpZXMuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDIuMi5cblxuICAgaXRlcnZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBkaWN0aW9uYXJ5XCdzIHZhbHVlcy4gIFNlZSB0aGUgbm90ZVxuICAgICAgZm9yIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgICAgIFVzaW5nIGBgaXRlcnZhbHVlcygpYGAgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlXG4gICAgICBkaWN0aW9uYXJ5IG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXJcbiAgICAgIGFsbCBlbnRyaWVzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGxpc3Qgb2Yga2V5cy4gIFNlZSB0aGUgbm90ZVxuICAgICAgZm9yIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgIHBvcChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZSxcbiAgICAgIGVsc2UgcmV0dXJuICpkZWZhdWx0Ki4gIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4gYW5kICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIGRpY3Rpb25hcnksIGEgYGBLZXlFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi4zLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5IGBgKGtleSwgdmFsdWUpYGAgcGFpciBmcm9tIHRoZVxuICAgICAgZGljdGlvbmFyeS5cblxuICAgICAgYGBwb3BpdGVtKClgYCBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyBgYHBvcGl0ZW0oKWBgIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgc2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJldHVybiBpdHMgdmFsdWUuICBJZiBub3QsIGluc2VydFxuICAgICAgKmtleSogd2l0aCBhIHZhbHVlIG9mICpkZWZhdWx0KiBhbmQgcmV0dXJuICpkZWZhdWx0Ki4gICpkZWZhdWx0KlxuICAgICAgZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gYGBOb25lYGAuXG5cbiAgICAgIGBgdXBkYXRlKClgYCBhY2NlcHRzIGVpdGhlciBhbm90aGVyIGRpY3Rpb25hcnkgb2JqZWN0IG9yIGFuXG4gICAgICBpdGVyYWJsZSBvZiBrZXkvdmFsdWUgcGFpcnMgKGFzIGEgdHVwbGUgb3Igb3RoZXIgaXRlcmFibGUgb2ZcbiAgICAgIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIHRoZW4gdXBkYXRlZCB3aXRoIHRob3NlIGtleS92YWx1ZSBwYWlyczogYGBkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MilgYC5cblxuICAgICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogQWxsb3dlZCB0aGUgYXJndW1lbnQgdG8gYmUgYW4gaXRlcmFibGVcbiAgICAgIG9mIGtleS92YWx1ZSBwYWlycyBhbmQgYWxsb3dlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgY29weSBvZiB0aGUgZGljdGlvbmFyeVwncyBsaXN0IG9mIHZhbHVlcy4gIFNlZSB0aGUgbm90ZVxuICAgICAgZm9yIGBgZGljdC5pdGVtcygpYGAuXG5cbiAgIHZpZXdpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zIChgYChrZXksIHZhbHVlKWBgXG4gICAgICBwYWlycykuICBTZWUgYmVsb3cgZm9yIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjcuXG5cbiAgIHZpZXdrZXlzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSBiZWxvdyBmb3JcbiAgICAgIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLlxuXG4gICAgICBOZXcgaW4gdmVyc2lvbiAyLjcuXG5cbiAgIHZpZXd2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgYmVsb3cgZm9yXG4gICAgICBkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cy5cblxuICAgICAgTmV3IGluIHZlcnNpb24gMi43LlxuXG5cbkRpY3Rpb25hcnkgdmlldyBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb2JqZWN0cyByZXR1cm5lZCBieSBgYGRpY3Qudmlld2tleXMoKWBgLCBgYGRpY3Qudmlld3ZhbHVlcygpYGAgYW5kXG5gYGRpY3Qudmlld2l0ZW1zKClgYCBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXdcbm9uIHRoZSBkaWN0aW9uYXJ5XCdzIGVudHJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiB0aGUgZGljdGlvbmFyeVxuY2hhbmdlcywgdGhlIHZpZXcgcmVmbGVjdHMgdGhlc2UgY2hhbmdlcy5cblxuRGljdGlvbmFyeSB2aWV3cyBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB0byB5aWVsZCB0aGVpciByZXNwZWN0aXZlIGRhdGEsXG5hbmQgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzOlxuXG5sZW4oZGljdHZpZXcpXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbml0ZXIoZGljdHZpZXcpXG5cbiAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzXG4gICB0dXBsZXMgb2YgYGAoa2V5LCB2YWx1ZSlgYCkgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIEtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXNcbiAgIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb25cbiAgIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2YgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zLiBJZiBrZXlzLFxuICAgdmFsdWVzIGFuZCBpdGVtcyB2aWV3cyBhcmUgaXRlcmF0ZWQgb3ZlciB3aXRoIG5vIGludGVydmVuaW5nXG4gICBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgb3JkZXIgb2YgaXRlbXMgd2lsbCBkaXJlY3RseVxuICAgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBgYCh2YWx1ZSwga2V5KWBgIHBhaXJzXG4gICB1c2luZyBgYHppcCgpYGA6IGBgcGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpYGAuICBBbm90aGVyXG4gICB3YXkgdG8gY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgYGBwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpblxuICAgZC5pdGVtcygpXWBgLlxuXG4gICBJdGVyYXRpbmcgdmlld3Mgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnlcbiAgIG1heSByYWlzZSBhIGBgUnVudGltZUVycm9yYGAgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMuXG5cbnggaW4gZGljdHZpZXdcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5XCdzIGtleXMsXG4gICB2YWx1ZXMgb3IgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhIGBgKGtleSxcbiAgIHZhbHVlKWBgIHR1cGxlKS5cblxuS2V5cyB2aWV3cyBhcmUgc2V0LWxpa2Ugc2luY2UgdGhlaXIgZW50cmllcyBhcmUgdW5pcXVlIGFuZCBoYXNoYWJsZS5cbklmIGFsbCB2YWx1ZXMgYXJlIGhhc2hhYmxlLCBzbyB0aGF0IChrZXksIHZhbHVlKSBwYWlycyBhcmUgdW5pcXVlIGFuZFxuaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlIG5vdFxudHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKSAgVGhlblxudGhlc2Ugc2V0IG9wZXJhdGlvbnMgYXJlIGF2YWlsYWJsZSAoIm90aGVyIiByZWZlcnMgZWl0aGVyIHRvIGFub3RoZXJcbnZpZXcgb3IgYSBzZXQpOlxuXG5kaWN0dmlldyAmIG90aGVyXG5cbiAgIFJldHVybiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBkaWN0dmlldyBhbmQgdGhlIG90aGVyIG9iamVjdCBhcyBhXG4gICBuZXcgc2V0LlxuXG5kaWN0dmlldyB8IG90aGVyXG5cbiAgIFJldHVybiB0aGUgdW5pb24gb2YgdGhlIGRpY3R2aWV3IGFuZCB0aGUgb3RoZXIgb2JqZWN0IGFzIGEgbmV3IHNldC5cblxuZGljdHZpZXcgLSBvdGhlclxuXG4gICBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZGljdHZpZXcgYW5kIHRoZSBvdGhlciBvYmplY3RcbiAgIChhbGwgZWxlbWVudHMgaW4gKmRpY3R2aWV3KiB0aGF0IGFyZW5cJ3QgaW4gKm90aGVyKikgYXMgYSBuZXcgc2V0LlxuXG5kaWN0dmlldyBeIG90aGVyXG5cbiAgIFJldHVybiB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2UgKGFsbCBlbGVtZW50cyBlaXRoZXIgaW4gKmRpY3R2aWV3KlxuICAgb3IgKm90aGVyKiwgYnV0IG5vdCBpbiBib3RoKSBvZiB0aGUgZGljdHZpZXcgYW5kIHRoZSBvdGhlciBvYmplY3RcbiAgIGFzIGEgbmV3IHNldC5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy52aWV3a2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZpZXd2YWx1ZXMoKVxuXG4gICA+Pj4gIyBpdGVyYXRpb25cbiAgID4+PiBuID0gMFxuICAgPj4+IGZvciB2YWwgaW4gdmFsdWVzOlxuICAgLi4uICAgICBuICs9IHZhbFxuICAgPj4+IHByaW50KG4pXG4gICA1MDRcblxuICAgPj4+ICMga2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIHRoZSBzYW1lIG9yZGVyXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2F1c2FnZVwnLCBcJ3NwYW1cJ11cbiAgID4+PiBsaXN0KHZhbHVlcylcbiAgIFsyLCAxLCAxLCA1MDBdXG5cbiAgID4+PiAjIHZpZXcgb2JqZWN0cyBhcmUgZHluYW1pYyBhbmQgcmVmbGVjdCBkaWN0IGNoYW5nZXNcbiAgID4+PiBkZWwgZGlzaGVzW1wnZWdnc1wnXVxuICAgPj4+IGRlbCBkaXNoZXNbXCdzYXVzYWdlXCddXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnc3BhbVwnLCBcJ2JhY29uXCddXG5cbiAgID4+PiAjIHNldCBvcGVyYXRpb25zXG4gICA+Pj4ga2V5cyAmIHtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhbGFkXCd9XG4gICB7XCdiYWNvblwnfVxuJywKICAndHlwZXNtZXRob2RzJzogdSJcbk1ldGhvZHNcbioqKioqKipcblxuTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLlxuVGhlcmUgYXJlIHR3byBmbGF2b3JzOiBidWlsdC1pbiBtZXRob2RzIChzdWNoIGFzIGBgYXBwZW5kKClgYCBvblxubGlzdHMpIGFuZCBjbGFzcyBpbnN0YW5jZSBtZXRob2RzLiAgQnVpbHQtaW4gbWV0aG9kcyBhcmUgZGVzY3JpYmVkXG53aXRoIHRoZSB0eXBlcyB0aGF0IHN1cHBvcnQgdGhlbS5cblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgdHdvIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gY2xhc3Ncbmluc3RhbmNlIG1ldGhvZHM6IGBgbS5pbV9zZWxmYGAgaXMgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kXG5vcGVyYXRlcywgYW5kIGBgbS5pbV9mdW5jYGAgaXMgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgbWV0aG9kLlxuQ2FsbGluZyBgYG0oYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKWBgIGlzIGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0b1xuY2FsbGluZyBgYG0uaW1fZnVuYyhtLmltX3NlbGYsIGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbilgYC5cblxuQ2xhc3MgaW5zdGFuY2UgbWV0aG9kcyBhcmUgZWl0aGVyICpib3VuZCogb3IgKnVuYm91bmQqLCByZWZlcnJpbmcgdG9cbndoZXRoZXIgdGhlIG1ldGhvZCB3YXMgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBvciBhIGNsYXNzLFxucmVzcGVjdGl2ZWx5LiAgV2hlbiBhIG1ldGhvZCBpcyB1bmJvdW5kLCBpdHMgYGBpbV9zZWxmYGAgYXR0cmlidXRlXG53aWxsIGJlIGBgTm9uZWBgIGFuZCBpZiBjYWxsZWQsIGFuIGV4cGxpY2l0IGBgc2VsZmBgIG9iamVjdCBtdXN0IGJlXG5wYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAgSW4gdGhpcyBjYXNlLCBgYHNlbGZgYCBtdXN0IGJlIGFuXG5pbnN0YW5jZSBvZiB0aGUgdW5ib3VuZCBtZXRob2QncyBjbGFzcyAob3IgYSBzdWJjbGFzcyBvZiB0aGF0IGNsYXNzKSxcbm90aGVyd2lzZSBhIGBgVHlwZUVycm9yYGAgaXMgcmFpc2VkLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIG1ldGhvZHMgb2JqZWN0cyBzdXBwb3J0IGdldHRpbmcgYXJiaXRyYXJ5XG5hdHRyaWJ1dGVzLiBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKGBgbWV0aC5pbV9mdW5jYGApLCBzZXR0aW5nIG1ldGhvZFxuYXR0cmlidXRlcyBvbiBlaXRoZXIgYm91bmQgb3IgdW5ib3VuZCBtZXRob2RzIGlzIGRpc2FsbG93ZWQuXG5BdHRlbXB0aW5nIHRvIHNldCBhIG1ldGhvZCBhdHRyaWJ1dGUgcmVzdWx0cyBpbiBhIGBgVHlwZUVycm9yYGAgYmVpbmdcbnJhaXNlZC4gIEluIG9yZGVyIHRvIHNldCBhIG1ldGhvZCBhdHRyaWJ1dGUsIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHlcbnNldCBpdCBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Q6XG5cbiAgIGNsYXNzIEM6XG4gICAgICAgZGVmIG1ldGhvZChzZWxmKTpcbiAgICAgICAgICAgcGFzc1xuXG4gICBjID0gQygpXG4gICBjLm1ldGhvZC5pbV9mdW5jLndob2FtaSA9ICdteSBuYW1lIGlzIGMnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsCiAgJ3R5cGVzbW9kdWxlcyc6IHUiXG5Nb2R1bGVzXG4qKioqKioqXG5cblRoZSBvbmx5IHNwZWNpYWwgb3BlcmF0aW9uIG9uIGEgbW9kdWxlIGlzIGF0dHJpYnV0ZSBhY2Nlc3M6XG5gYG0ubmFtZWBgLCB3aGVyZSAqbSogaXMgYSBtb2R1bGUgYW5kICpuYW1lKiBhY2Nlc3NlcyBhIG5hbWUgZGVmaW5lZFxuaW4gKm0qJ3Mgc3ltYm9sIHRhYmxlLiBNb2R1bGUgYXR0cmlidXRlcyBjYW4gYmUgYXNzaWduZWQgdG8uICAoTm90ZVxudGhhdCB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgaXMgbm90LCBzdHJpY3RseSBzcGVha2luZywgYW4gb3BlcmF0aW9uXG5vbiBhIG1vZHVsZSBvYmplY3Q7IGBgaW1wb3J0IGZvb2BgIGRvZXMgbm90IHJlcXVpcmUgYSBtb2R1bGUgb2JqZWN0XG5uYW1lZCAqZm9vKiB0byBleGlzdCwgcmF0aGVyIGl0IHJlcXVpcmVzIGFuIChleHRlcm5hbCkgKmRlZmluaXRpb24qXG5mb3IgYSBtb2R1bGUgbmFtZWQgKmZvbyogc29tZXdoZXJlLilcblxuQSBzcGVjaWFsIG1lbWJlciBvZiBldmVyeSBtb2R1bGUgaXMgYGBfX2RpY3RfX2BgLiBUaGlzIGlzIHRoZVxuZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzXG5kaWN0aW9uYXJ5IHdpbGwgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3RcbmFzc2lnbm1lbnQgdG8gdGhlIGBgX19kaWN0X19gYCBhdHRyaWJ1dGUgaXMgbm90IHBvc3NpYmxlICh5b3UgY2FuXG53cml0ZSBgYG0uX19kaWN0X19bJ2EnXSA9IDFgYCwgd2hpY2ggZGVmaW5lcyBgYG0uYWBgIHRvIGJlIGBgMWBgLCBidXRcbnlvdSBjYW4ndCB3cml0ZSBgYG0uX19kaWN0X18gPSB7fWBgKS4gIE1vZGlmeWluZyBgYF9fZGljdF9fYGAgZGlyZWN0bHlcbmlzIG5vdCByZWNvbW1lbmRlZC5cblxuTW9kdWxlcyBidWlsdCBpbnRvIHRoZSBpbnRlcnByZXRlciBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6IGBgPG1vZHVsZVxuJ3N5cycgKGJ1aWx0LWluKT5gYC4gIElmIGxvYWRlZCBmcm9tIGEgZmlsZSwgdGhleSBhcmUgd3JpdHRlbiBhc1xuYGA8bW9kdWxlICdvcycgZnJvbSAnL3Vzci9sb2NhbC9saWIvcHl0aG9uWC5ZL29zLnB5Yyc+YGAuXG4iLAotICd0eXBlc3NlcSc6IHUnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gYGBzdHJgYCwgYGB1bmljb2RlYGAsIGBgbGlzdGBgLCBgYHR1cGxlYGAsIGBgYnVmZmVyYGAsIGBgeHJhbmdlYGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgc2l4IHNlcXVlbmNlIHR5cGVzOiBzdHJpbmdzLCBVbmljb2RlIHN0cmluZ3MsIGxpc3RzLCB0dXBsZXMsXG5idWZmZXJzLCBhbmQgeHJhbmdlIG9iamVjdHMuXG5cbkZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQgaW4gYGBkaWN0YGAgYW5kIGBgc2V0YGAgY2xhc3NlcyxcbmFuZCB0aGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuU3RyaW5nIGxpdGVyYWxzIGFyZSB3cml0dGVuIGluIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzOiBgYFwneHl6enlcJ2BgLFxuYGAiZnJvYm96eiJgYC4gIFNlZSAqU3RyaW5nIGxpdGVyYWxzKiBmb3IgbW9yZSBhYm91dCBzdHJpbmcgbGl0ZXJhbHMuXG5Vbmljb2RlIHN0cmluZ3MgYXJlIG11Y2ggbGlrZSBzdHJpbmdzLCBidXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgc3ludGF4XG51c2luZyBhIHByZWNlZGluZyBgYFwndVwnYGAgY2hhcmFjdGVyOiBgYHVcJ2FiY1wnYGAsIGBgdSJkZWYiYGAuIEluXG5hZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgaGVyZSwgdGhlcmUgYXJlIGFsc28gc3RyaW5nLVxuc3BlY2lmaWMgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgTWV0aG9kcyogc2VjdGlvbi4gTGlzdHMgYXJlXG5jb25zdHJ1Y3RlZCB3aXRoIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogYGBbYSxcbmIsIGNdYGAuIFR1cGxlcyBhcmUgY29uc3RydWN0ZWQgYnkgdGhlIGNvbW1hIG9wZXJhdG9yIChub3Qgd2l0aGluXG5zcXVhcmUgYnJhY2tldHMpLCB3aXRoIG9yIHdpdGhvdXQgZW5jbG9zaW5nIHBhcmVudGhlc2VzLCBidXQgYW4gZW1wdHlcbnR1cGxlIG11c3QgaGF2ZSB0aGUgZW5jbG9zaW5nIHBhcmVudGhlc2VzLCBzdWNoIGFzIGBgYSwgYiwgY2BgIG9yXG5gYCgpYGAuICBBIHNpbmdsZSBpdGVtIHR1cGxlIG11c3QgaGF2ZSBhIHRyYWlsaW5nIGNvbW1hLCBzdWNoIGFzXG5gYChkLClgYC5cblxuQnVmZmVyIG9iamVjdHMgYXJlIG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgUHl0aG9uIHN5bnRheCwgYnV0IGNhbiBiZVxuY3JlYXRlZCBieSBjYWxsaW5nIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGJ1ZmZlcigpYGAuICBUaGV5IGRvblwndFxuc3VwcG9ydCBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24uXG5cbk9iamVjdHMgb2YgdHlwZSB4cmFuZ2UgYXJlIHNpbWlsYXIgdG8gYnVmZmVycyBpbiB0aGF0IHRoZXJlIGlzIG5vXG5zcGVjaWZpYyBzeW50YXggdG8gY3JlYXRlIHRoZW0sIGJ1dCB0aGV5IGFyZSBjcmVhdGVkIHVzaW5nIHRoZVxuYGB4cmFuZ2UoKWBgIGZ1bmN0aW9uLiAgVGhleSBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nLCBjb25jYXRlbmF0aW9uIG9yXG5yZXBldGl0aW9uLCBhbmQgdXNpbmcgYGBpbmBgLCBgYG5vdCBpbmBgLCBgYG1pbigpYGAgb3IgYGBtYXgoKWBgIG9uXG50aGVtIGlzIGluZWZmaWNpZW50LlxuXG5Nb3N0IHNlcXVlbmNlIHR5cGVzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLiAgVGhlIGBgaW5gYCBhbmRcbmBgbm90IGluYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXRpZXMgYXMgdGhlIGNvbXBhcmlzb25cbm9wZXJhdGlvbnMuICBUaGUgYGArYGAgYW5kIGBgKmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhc1xudGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpYyBvcGVyYXRpb25zLiBbM10gQWRkaXRpb25hbCBtZXRob2RzIGFyZVxucHJvdmlkZWQgZm9yICpNdXRhYmxlIFNlcXVlbmNlIFR5cGVzKi5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGU7ICpuKiwgKmkqIGFuZCAqaiogYXJlXG5pbnRlZ2VyczpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09K1xufCBgYHggaW4gc2BgICAgICAgICAgfCBgYFRydWVgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBGYWxzZWBgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHggbm90IGluIHNgYCAgICAgfCBgYEZhbHNlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBUcnVlYGAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKyB0YGAgICAgICAgICAgfCB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcyogYW5kICp0KiB8ICg2KSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKiBuLCBuICogc2BgICAgfCAqbiogc2hhbGxvdyBjb3BpZXMgb2YgKnMqICAgICAgICB8ICgyKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCBjb25jYXRlbmF0ZWQgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaV1gYCAgICAgICAgICAgfCAqaSpcJ3RoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al1gYCAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXWBgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgd2l0aCBzdGVwICprKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBsZW4ocylgYCAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtaW4ocylgYCAgICAgICAgIHwgc21hbGxlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtYXgocylgYCAgICAgICAgIHwgbGFyZ2VzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2UgdHlwZXMgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiBJbiBwYXJ0aWN1bGFyLCB0dXBsZXMgYW5kXG5saXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nIGNvcnJlc3BvbmRpbmdcbmVsZW1lbnRzLiBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnkgZWxlbWVudCBtdXN0IGNvbXBhcmVcbmVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWVcbmxlbmd0aC4gKEZvciBmdWxsIGRldGFpbHMgc2VlICpDb21wYXJpc29ucyogaW4gdGhlIGxhbmd1YWdlXG5yZWZlcmVuY2UuKVxuXG5Ob3RlczpcblxuMS4gV2hlbiAqcyogaXMgYSBzdHJpbmcgb3IgVW5pY29kZSBzdHJpbmcgb2JqZWN0IHRoZSBgYGluYGAgYW5kIGBgbm90XG4gICBpbmBgIG9wZXJhdGlvbnMgYWN0IGxpa2UgYSBzdWJzdHJpbmcgdGVzdC4gIEluIFB5dGhvbiB2ZXJzaW9uc1xuICAgYmVmb3JlIDIuMywgKngqIGhhZCB0byBiZSBhIHN0cmluZyBvZiBsZW5ndGggMS4gSW4gUHl0aG9uIDIuMyBhbmRcbiAgIGJleW9uZCwgKngqIG1heSBiZSBhIHN0cmluZyBvZiBhbnkgbGVuZ3RoLlxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiBgYDBgYCBhcmUgdHJlYXRlZCBhcyBgYDBgYCAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICA+Pj4gbGlzdHNcbiAgIFtbXSwgW10sIFtdXVxuICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgPj4+IGxpc3RzXG4gICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCBgYFtbXV1gYCBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mIGBgW1tdXSAqIDNgYCBhcmUgKHBvaW50ZXJzXG4gICB0bykgdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgID4+PiBsaXN0c1xuICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZVxuICAgc3RyaW5nOiBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0IGBgLTBgYCBpcyBzdGlsbCBgYDBgYC5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCBgYGkgPD0gayA8IGpgYC4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLCB1c2UgYGBsZW4ocylgYC4gIElmICppKiBpcyBvbWl0dGVkIG9yXG4gICBgYE5vbmVgYCwgdXNlIGBgMGBgLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsIHVzZVxuICAgYGBsZW4ocylgYC4gIElmICppKiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXNcbiAgIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICBgYHggPSBpICsgbiprYGAgc3VjaCB0aGF0IGBgMCA8PSBuIDxcbiAgIChqLWkpL2tgYC4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgYGBpYGAsIGBgaStrYGAsXG4gICBgYGkrMiprYGAsIGBgaSszKmtgYCBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dFxuICAgbmV2ZXIgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLFxuICAgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGV5IGJlY29tZVxuICAgImVuZCIgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqXG4gICBjYW5ub3QgYmUgemVyby4gSWYgKmsqIGlzIGBgTm9uZWBgLCBpdCBpcyB0cmVhdGVkIGxpa2UgYGAxYGAuXG5cbjYuICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSWYgKnMqIGFuZCAqdCogYXJlIGJvdGggc3RyaW5ncyxcbiAgIHNvbWUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIENQeXRob24gY2FuIHVzdWFsbHkgcGVyZm9ybSBhblxuICAgaW4tcGxhY2Ugb3B0aW1pemF0aW9uIGZvciBhc3NpZ25tZW50cyBvZiB0aGUgZm9ybSBgYHMgPSBzICsgdGBgIG9yXG4gICBgYHMgKz0gdGBgLiAgV2hlbiBhcHBsaWNhYmxlLCB0aGlzIG9wdGltaXphdGlvbiBtYWtlcyBxdWFkcmF0aWNcbiAgIHJ1bi10aW1lIG11Y2ggbGVzcyBsaWtlbHkuICBUaGlzIG9wdGltaXphdGlvbiBpcyBib3RoIHZlcnNpb24gYW5kXG4gICBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBGb3IgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNvZGUsIGl0IGlzXG4gICBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYGBzdHIuam9pbigpYGAgbWV0aG9kIHdoaWNoIGFzc3VyZXNcbiAgIGNvbnNpc3RlbnQgbGluZWFyIGNvbmNhdGVuYXRpb24gcGVyZm9ybWFuY2UgYWNyb3NzIHZlcnNpb25zIGFuZFxuICAgaW1wbGVtZW50YXRpb25zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBGb3JtZXJseSwgc3RyaW5nIGNvbmNhdGVuYXRpb24gbmV2ZXJcbiAgIG9jY3VycmVkIGluLXBsYWNlLlxuXG5cblN0cmluZyBNZXRob2RzXG49PT09PT09PT09PT09PVxuXG5CZWxvdyBhcmUgbGlzdGVkIHRoZSBzdHJpbmcgbWV0aG9kcyB3aGljaCBib3RoIDgtYml0IHN0cmluZ3MgYW5kXG5Vbmljb2RlIG9iamVjdHMgc3VwcG9ydC4gTm90ZSB0aGF0IG5vbmUgb2YgdGhlc2UgbWV0aG9kcyB0YWtlIGtleXdvcmRcbmFyZ3VtZW50cy5cblxuSW4gYWRkaXRpb24sIFB5dGhvblwncyBzdHJpbmdzIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHR5cGUgbWV0aG9kc1xuZGVzY3JpYmVkIGluIHRoZSAqU2VxdWVuY2UgVHlwZXMgLS0tIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGUsXG5idWZmZXIsIHhyYW5nZSogc2VjdGlvbi4gVG8gb3V0cHV0IGZvcm1hdHRlZCBzdHJpbmdzIHVzZSB0ZW1wbGF0ZVxuc3RyaW5ncyBvciB0aGUgYGAlYGAgb3BlcmF0b3IgZGVzY3JpYmVkIGluIHRoZSAqU3RyaW5nIEZvcm1hdHRpbmdcbk9wZXJhdGlvbnMqIHNlY3Rpb24uIEFsc28sIHNlZSB0aGUgYGByZWBgIG1vZHVsZSBmb3Igc3RyaW5nIGZ1bmN0aW9uc1xuYmFzZWQgb24gcmVndWxhciBleHByZXNzaW9ucy5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgRGVjb2RlcyB0aGUgc3RyaW5nIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLlxuICAgKmVuY29kaW5nKiBkZWZhdWx0cyB0byB0aGUgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXlcbiAgIGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYGBVbmljb2RlRXJyb3JgYC5cbiAgIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyXG4gICBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjXG4gICBCYXNlIENsYXNzZXMqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXNcbiAgIGFkZGVkLlxuXG5zdHIuZW5jb2RlKFtlbmNvZGluZ1ssIGVycm9yc11dKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuICBEZWZhdWx0IGVuY29kaW5nIGlzIHRoZVxuICAgY3VycmVudCBkZWZhdWx0IHN0cmluZyBlbmNvZGluZy4gICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYVxuICAgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpc1xuICAgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYVxuICAgYGBVbmljb2RlRXJyb3JgYC4gIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsXG4gICBgYFwncmVwbGFjZVwnYGAsIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAsIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmRcbiAgIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlXG4gICBzZWN0aW9uICpDb2RlYyBCYXNlIENsYXNzZXMqLiBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlXG4gICBzZWN0aW9uICpTdGFuZGFyZCBFbmNvZGluZ3MqLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAgYW5kXG4gICBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kIG90aGVyIGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnN1ZmZpeCouXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG4gICBUaGlzIG1ldGhvZCBvZiBzdHJpbmcgZm9ybWF0dGluZyBpcyB0aGUgbmV3IHN0YW5kYXJkIGluIFB5dGhvbiAzLjAsXG4gICBhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgYGAlYGAgZm9ybWF0dGluZyBkZXNjcmliZWQgaW5cbiAgICpTdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zKiBpbiBuZXcgY29kZS5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYGZpbmQoKWBgLCBidXQgcmFpc2UgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZVxuICAgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW5cbiAgIGBgbGVuKHMpYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbnN0ci5yc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuICAgTmV3IGluIHZlcnNpb24gMi40LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0XG4gICBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnByZWZpeCouXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcylcblxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50cmFuc2xhdGUodGFibGVbLCBkZWxldGVjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG4gICBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlY2hhcnMqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZ1xuICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLFxuICAgd2hpY2ggbXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggMjU2LlxuXG4gICBZb3UgY2FuIHVzZSB0aGUgYGBtYWtldHJhbnMoKWBgIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgYGBzdHJpbmdgYFxuICAgbW9kdWxlIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLiBGb3Igc3RyaW5nIG9iamVjdHMsIHNldCB0aGVcbiAgICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHkgZGVsZXRlXG4gICBjaGFyYWN0ZXJzOlxuXG4gICA+Pj4gXCdyZWFkIHRoaXMgc2hvcnQgdGV4dFwnLnRyYW5zbGF0ZShOb25lLCBcJ2FlaW91XCcpXG4gICBcJ3JkIHRocyBzaHJ0IHR4dFwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNjogU3VwcG9ydCBmb3IgYSBgYE5vbmVgYCAqdGFibGUqIGFyZ3VtZW50LlxuXG4gICBGb3IgVW5pY29kZSBvYmplY3RzLCB0aGUgYGB0cmFuc2xhdGUoKWBgIG1ldGhvZCBkb2VzIG5vdCBhY2NlcHQgdGhlXG4gICBvcHRpb25hbCAqZGVsZXRlY2hhcnMqIGFyZ3VtZW50LiAgSW5zdGVhZCwgaXQgcmV0dXJucyBhIGNvcHkgb2YgdGhlXG4gICAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlblxuICAgdHJhbnNsYXRpb24gdGFibGUgd2hpY2ggbXVzdCBiZSBhIG1hcHBpbmcgb2YgVW5pY29kZSBvcmRpbmFscyB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgVW5pY29kZSBzdHJpbmdzIG9yIGBgTm9uZWBgLiBVbm1hcHBlZCBjaGFyYWN0ZXJzXG4gICBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZSBkZWxldGVkLlxuICAgTm90ZSwgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWUgYGBlbmNvZGluZ3MuY3AxMjUxYGBcbiAgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gYGBsZW4ocylgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLjIuXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHJlc2VudCBvbmx5IG9uIHVuaWNvZGUgb2JqZWN0czpcblxudW5pY29kZS5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgbnVtZXJpYyBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBOdW1lcmljIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LFxuICAgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTiBPTkUgRklGVEguXG5cbnVuaWNvZGUuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBvbmx5IGRlY2ltYWwgY2hhcmFjdGVycyBpbiBTLFxuICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gRGVjaW1hbCBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycyxcbiAgIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybSBkZWNpbWFsLXJhZGl4XG4gICBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cblxuU3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5TdHJpbmcgYW5kIFVuaWNvZGUgb2JqZWN0cyBoYXZlIG9uZSB1bmlxdWUgYnVpbHQtaW4gb3BlcmF0aW9uOiB0aGVcbmBgJWBgIG9wZXJhdG9yIChtb2R1bG8pLiAgVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSBzdHJpbmdcbipmb3JtYXR0aW5nKiBvciAqaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuICBHaXZlbiBgYGZvcm1hdCAlIHZhbHVlc2BgXG4od2hlcmUgKmZvcm1hdCogaXMgYSBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QpLCBgYCVgYCBjb252ZXJzaW9uXG5zcGVjaWZpY2F0aW9ucyBpbiAqZm9ybWF0KiBhcmUgcmVwbGFjZWQgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMgb2Zcbip2YWx1ZXMqLiAgVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIHRoZSB1c2luZyBgYHNwcmludGYoKWBgIGluIHRoZSBDXG5sYW5ndWFnZS4gIElmICpmb3JtYXQqIGlzIGEgVW5pY29kZSBvYmplY3QsIG9yIGlmIGFueSBvZiB0aGUgb2JqZWN0c1xuYmVpbmcgY29udmVydGVkIHVzaW5nIHRoZSBgYCVzYGAgY29udmVyc2lvbiBhcmUgVW5pY29kZSBvYmplY3RzLCB0aGVcbnJlc3VsdCB3aWxsIGFsc28gYmUgYSBVbmljb2RlIG9iamVjdC5cblxuSWYgKmZvcm1hdCogcmVxdWlyZXMgYSBzaW5nbGUgYXJndW1lbnQsICp2YWx1ZXMqIG1heSBiZSBhIHNpbmdsZSBub24tXG50dXBsZSBvYmplY3QuIFs0XSAgT3RoZXJ3aXNlLCAqdmFsdWVzKiBtdXN0IGJlIGEgdHVwbGUgd2l0aCBleGFjdGx5XG50aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZywgb3IgYSBzaW5nbGVcbm1hcHBpbmcgb2JqZWN0IChmb3IgZXhhbXBsZSwgYSBkaWN0aW9uYXJ5KS5cblxuQSBjb252ZXJzaW9uIHNwZWNpZmllciBjb250YWlucyB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzIGFuZCBoYXMgdGhlXG5mb2xsb3dpbmcgY29tcG9uZW50cywgd2hpY2ggbXVzdCBvY2N1ciBpbiB0aGlzIG9yZGVyOlxuXG4xLiBUaGUgYGBcJyVcJ2BgIGNoYXJhY3Rlciwgd2hpY2ggbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZXIuXG5cbjIuIE1hcHBpbmcga2V5IChvcHRpb25hbCksIGNvbnNpc3Rpbmcgb2YgYSBwYXJlbnRoZXNpc2VkIHNlcXVlbmNlIG9mXG4gICBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgYGAoc29tZW5hbWUpYGApLlxuXG4zLiBDb252ZXJzaW9uIGZsYWdzIChvcHRpb25hbCksIHdoaWNoIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHNvbWVcbiAgIGNvbnZlcnNpb24gdHlwZXMuXG5cbjQuIE1pbmltdW0gZmllbGQgd2lkdGggKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBhcyBhbiBgYFwnKlwnYGBcbiAgIChhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGggaXMgcmVhZCBmcm9tIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlXG4gICB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZSBvYmplY3QgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGVcbiAgIG1pbmltdW0gZmllbGQgd2lkdGggYW5kIG9wdGlvbmFsIHByZWNpc2lvbi5cblxuNS4gUHJlY2lzaW9uIChvcHRpb25hbCksIGdpdmVuIGFzIGEgYGBcJy5cJ2BgIChkb3QpIGZvbGxvd2VkIGJ5IHRoZVxuICAgcHJlY2lzaW9uLiAgSWYgc3BlY2lmaWVkIGFzIGBgXCcqXCdgYCAoYW4gYXN0ZXJpc2spLCB0aGUgYWN0dWFsIHdpZHRoXG4gICBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgdHVwbGUgaW4gKnZhbHVlcyosIGFuZCB0aGVcbiAgIHZhbHVlIHRvIGNvbnZlcnQgY29tZXMgYWZ0ZXIgdGhlIHByZWNpc2lvbi5cblxuNi4gTGVuZ3RoIG1vZGlmaWVyIChvcHRpb25hbCkuXG5cbjcuIENvbnZlcnNpb24gdHlwZS5cblxuV2hlbiB0aGUgcmlnaHQgYXJndW1lbnQgaXMgYSBkaWN0aW9uYXJ5IChvciBvdGhlciBtYXBwaW5nIHR5cGUpLCB0aGVuXG50aGUgZm9ybWF0cyBpbiB0aGUgc3RyaW5nICptdXN0KiBpbmNsdWRlIGEgcGFyZW50aGVzaXNlZCBtYXBwaW5nIGtleVxuaW50byB0aGF0IGRpY3Rpb25hcnkgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBgXCclXCdgYCBjaGFyYWN0ZXIuXG5UaGUgbWFwcGluZyBrZXkgc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuXG5Gb3IgZXhhbXBsZTpcblxuPj4+IHByaW50IFwnJShsYW5ndWFnZSlzIGhhcyAlKCMpMDNkIHF1b3RlIHR5cGVzLlwnICUgXFxcbi4uLiAgICAgICB7XCdsYW5ndWFnZVwnOiAiUHl0aG9uIiwgIiMiOiAyfVxuUHl0aG9uIGhhcyAwMDIgcXVvdGUgdHlwZXMuXG5cbkluIHRoaXMgY2FzZSBubyBgYCpgYCBzcGVjaWZpZXJzIG1heSBvY2N1ciBpbiBhIGZvcm1hdCAoc2luY2UgdGhleVxucmVxdWlyZSBhIHNlcXVlbnRpYWwgcGFyYW1ldGVyIGxpc3QpLlxuXG5UaGUgY29udmVyc2lvbiBmbGFnIGNoYXJhY3RlcnMgYXJlOlxuXG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IEZsYWcgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgXCcjXCdgYCAgIHwgVGhlIHZhbHVlIGNvbnZlcnNpb24gd2lsbCB1c2UgdGhlICJhbHRlcm5hdGUgZm9ybSIgKHdoZXJlIGRlZmluZWQgICAgIHxcbnwgICAgICAgICAgIHwgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBcJzBcJ2BgICAgfCBUaGUgY29udmVyc2lvbiB3aWxsIGJlIHplcm8gcGFkZGVkIGZvciBudW1lcmljIHZhbHVlcy4gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnLVwnYGAgICB8IFRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgbGVmdCBhZGp1c3RlZCAob3ZlcnJpZGVzIHRoZSBgYFwnMFwnYGAgICAgICAgICAgIHxcbnwgICAgICAgICAgIHwgY29udmVyc2lvbiBpZiBib3RoIGFyZSBnaXZlbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBcJyBcJ2BgICAgfCAoYSBzcGFjZSkgQSBibGFuayBzaG91bGQgYmUgbGVmdCBiZWZvcmUgYSBwb3NpdGl2ZSBudW1iZXIgKG9yIGVtcHR5ICAgfFxufCAgICAgICAgICAgfCBzdHJpbmcpIHByb2R1Y2VkIGJ5IGEgc2lnbmVkIGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnK1wnYGAgICB8IEEgc2lnbiBjaGFyYWN0ZXIgKGBgXCcrXCdgYCBvciBgYFwnLVwnYGApIHdpbGwgcHJlY2VkZSB0aGUgY29udmVyc2lvbiAgICAgfFxufCAgICAgICAgICAgfCAob3ZlcnJpZGVzIGEgInNwYWNlIiBmbGFnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5BIGxlbmd0aCBtb2RpZmllciAoYGBoYGAsIGBgbGBgLCBvciBgYExgYCkgbWF5IGJlIHByZXNlbnQsIGJ1dCBpc1xuaWdub3JlZCBhcyBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBQeXRob24gLS0gc28gZS5nLiBgYCVsZGBgIGlzXG5pZGVudGljYWwgdG8gYGAlZGBgLlxuXG5UaGUgY29udmVyc2lvbiB0eXBlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgQ29udmVyc2lvbiAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgYGBcJ2RcJ2BgICAgICAgfCBTaWduZWQgaW50ZWdlciBkZWNpbWFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnaVwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdvXCdgYCAgICAgIHwgU2lnbmVkIG9jdGFsIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMSkgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3VcJ2BgICAgICAgfCBPYnNvbGV0ZSB0eXBlIC0tIGl0IGlzIGlkZW50aWNhbCB0byBgYFwnZFwnYGAuICAgICAgICAgIHwgKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCd4XCdgYCAgICAgIHwgU2lnbmVkIGhleGFkZWNpbWFsIChsb3dlcmNhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgfCAoMikgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ1hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKHVwcGVyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZVwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGV4cG9uZW50aWFsIGZvcm1hdCAobG93ZXJjYXNlKS4gICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdFXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0ICh1cHBlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2ZcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnRlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdnXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZm9ybWF0LiBVc2VzIGxvd2VyY2FzZSBleHBvbmVudGlhbCAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgIHwgZm9ybWF0IGlmIGV4cG9uZW50IGlzIGxlc3MgdGhhbiAtNCBvciBub3QgbGVzcyB0aGFuICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgcHJlY2lzaW9uLCBkZWNpbWFsIGZvcm1hdCBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgdXBwZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnY1wnYGAgICAgICB8IFNpbmdsZSBjaGFyYWN0ZXIgKGFjY2VwdHMgaW50ZWdlciBvciBzaW5nbGUgY2hhcmFjdGVyIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHN0cmluZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdyXCdgYCAgICAgIHwgU3RyaW5nIChjb252ZXJ0cyBhbnkgUHl0aG9uIG9iamVjdCB1c2luZyBgYHJlcHIoKWBgKS4gfCAoNSkgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3NcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgc3RyKClgYCkuICB8ICg2KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnJVwnYGAgICAgICB8IE5vIGFyZ3VtZW50IGlzIGNvbnZlcnRlZCwgcmVzdWx0cyBpbiBhIGBgXCclXCdgYCAgICAgICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgY2hhcmFjdGVyIGluIHRoZSByZXN1bHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgYSBsZWFkaW5nIHplcm8gKGBgXCcwXCdgYCkgdG8gYmUgaW5zZXJ0ZWRcbiAgIGJldHdlZW4gbGVmdC1oYW5kIHBhZGRpbmcgYW5kIHRoZSBmb3JtYXR0aW5nIG9mIHRoZSBudW1iZXIgaWYgdGhlXG4gICBsZWFkaW5nIGNoYXJhY3RlciBvZiB0aGUgcmVzdWx0IGlzIG5vdCBhbHJlYWR5IGEgemVyby5cblxuMi4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgYGBcJzB4XCdgYCBvciBgYFwnMFhcJ2BgIChkZXBlbmRpbmdcbiAgIG9uIHdoZXRoZXIgdGhlIGBgXCd4XCdgYCBvciBgYFwnWFwnYGAgZm9ybWF0IHdhcyB1c2VkKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4zLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgdG8gYWx3YXlzIGNvbnRhaW4gYSBkZWNpbWFsXG4gICBwb2ludCwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcbiAgIHBvaW50IGFuZCBkZWZhdWx0cyB0byA2LlxuXG40LiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgdG8gYWx3YXlzIGNvbnRhaW4gYSBkZWNpbWFsXG4gICBwb2ludCwgYW5kIHRyYWlsaW5nIHplcm9lcyBhcmUgbm90IHJlbW92ZWQgYXMgdGhleSB3b3VsZCBvdGhlcndpc2VcbiAgIGJlLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgYmVmb3JlXG4gICBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjUuIFRoZSBgYCVyYGAgY29udmVyc2lvbiB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuMC5cblxuICAgVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVzZWQuXG5cbjYuIElmIHRoZSBvYmplY3Qgb3IgZm9ybWF0IHByb3ZpZGVkIGlzIGEgYGB1bmljb2RlYGAgc3RyaW5nLCB0aGVcbiAgIHJlc3VsdGluZyBzdHJpbmcgd2lsbCBhbHNvIGJlIGBgdW5pY29kZWBgLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZC5cblxuNy4gU2VlICoqUEVQIDIzNyoqLlxuXG5TaW5jZSBQeXRob24gc3RyaW5ncyBoYXZlIGFuIGV4cGxpY2l0IGxlbmd0aCwgYGAlc2BgIGNvbnZlcnNpb25zIGRvXG5ub3QgYXNzdW1lIHRoYXQgYGBcJ1xcMFwnYGAgaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuXG5Gb3Igc2FmZXR5IHJlYXNvbnMsIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbnMgYXJlIGNsaXBwZWQgdG8gNTA7XG5gYCVmYGAgY29udmVyc2lvbnMgZm9yIG51bWJlcnMgd2hvc2UgYWJzb2x1dGUgdmFsdWUgaXMgb3ZlciAxZTUwIGFyZVxucmVwbGFjZWQgYnkgYGAlZ2BgIGNvbnZlcnNpb25zLiBbNV0gIEFsbCBvdGhlciBlcnJvcnMgcmFpc2VcbmV4Y2VwdGlvbnMuXG5cbkFkZGl0aW9uYWwgc3RyaW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RhbmRhcmQgbW9kdWxlc1xuYGBzdHJpbmdgYCBhbmQgYGByZWBgLlxuXG5cblhSYW5nZSBUeXBlXG49PT09PT09PT09PVxuXG5UaGUgYGB4cmFuZ2VgYCB0eXBlIGlzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB3aGljaCBpcyBjb21tb25seSB1c2VkXG5mb3IgbG9vcGluZy4gIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlIGBgeHJhbmdlYGAgdHlwZSBpcyB0aGF0IGFuXG5gYHhyYW5nZWBgIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIGFtb3VudCBvZiBtZW1vcnksIG5vXG5tYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMuICBUaGVyZSBhcmUgbm8gY29uc2lzdGVudFxucGVyZm9ybWFuY2UgYWR2YW50YWdlcy5cblxuWFJhbmdlIG9iamVjdHMgaGF2ZSB2ZXJ5IGxpdHRsZSBiZWhhdmlvcjogdGhleSBvbmx5IHN1cHBvcnQgaW5kZXhpbmcsXG5pdGVyYXRpb24sIGFuZCB0aGUgYGBsZW4oKWBgIGZ1bmN0aW9uLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuTGlzdCBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3cgaW4tcGxhY2Vcbm1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVuIGFkZGVkXG50byB0aGUgbGFuZ3VhZ2UpIHNob3VsZCBhbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy4gU3RyaW5ncyBhbmRcbnR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzOiBzdWNoIG9iamVjdHMgY2Fubm90IGJlIG1vZGlmaWVkXG5vbmNlIGNyZWF0ZWQuIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcyAod2hlcmUgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QpOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgc1tpXSA9IHhgYCAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdID0gdGBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmpdYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTpqXSA9IFtdYGAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a10gPSB0YGAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiBgYHNbaTpqOmtdYGAgYXJlIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqOmtdYGAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2k6ajprXWBgIGZyb20gdGhlIGxpc3QgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5hcHBlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0gICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0geGBgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICAgICAgfCByZXR1cm4gbnVtYmVyIG9mICppKlwncyBmb3Igd2hpY2ggfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgICAgIHwgcmV0dXJuIHNtYWxsZXN0ICprKiBzdWNoIHRoYXQgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNba10gPT0geGBgIGFuZCBgYGkgPD0gayA8IGpgYCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTppXSA9IFt4XWBgICAgICAgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5wb3AoW2ldKWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGB4ID0gc1tpXTsgZGVsIHNbaV07ICAgIHwgKDYpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIHhgYCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZW1vdmUoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBkZWwgc1tzLmluZGV4KHgpXWBgICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg3KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuc29ydChbY21wWywga2V5WywgICAgICAgICAgfCBzb3J0IHRoZSBpdGVtcyBvZiAqcyogaW4gcGxhY2UgICB8ICg3KSg4KSg5KSgxMCkgICAgICAgICB8XG58IHJldmVyc2VdXV0pYGAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzICByZXBsYWNpbmcuXG5cbjIuIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBoYXMgaGlzdG9yaWNhbGx5IGFjY2VwdGVkIG11bHRpcGxlXG4gICBwYXJhbWV0ZXJzIGFuZCBpbXBsaWNpdGx5IGpvaW5lZCB0aGVtIGludG8gYSB0dXBsZTsgdGhpcyBubyBsb25nZXJcbiAgIHdvcmtzIGluIFB5dGhvbiAyLjAuICBVc2Ugb2YgdGhpcyBtaXNmZWF0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWRcbiAgIHNpbmNlIFB5dGhvbiAxLjQuXG5cbjMuICp4KiBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdC5cblxuNC4gUmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW4gYSBuZWdhdGl2ZVxuICAgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHRvIHRoZSBgYGluZGV4KClgYFxuICAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZSBpbmRpY2VzLiAgSWYgaXQgaXNcbiAgIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGBgaW5kZXgoKWBgIGRpZG5cJ3QgaGF2ZVxuICAgYXJndW1lbnRzIGZvciBzcGVjaWZ5aW5nIHN0YXJ0IGFuZCBzdG9wIHBvc2l0aW9ucy5cblxuNS4gV2hlbiBhIG5lZ2F0aXZlIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZVxuICAgYGBpbnNlcnQoKWBgIG1ldGhvZCwgdGhlIGxpc3QgbGVuZ3RoIGlzIGFkZGVkLCBhcyBmb3Igc2xpY2VcbiAgIGluZGljZXMuICBJZiBpdCBpcyBzdGlsbCBuZWdhdGl2ZSwgaXQgaXMgdHJ1bmNhdGVkIHRvIHplcm8sIGFzIGZvclxuICAgc2xpY2UgaW5kaWNlcy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYWxsIG5lZ2F0aXZlIGluZGljZXMgd2VyZVxuICAgdHJ1bmNhdGVkIHRvIHplcm8uXG5cbjYuIFRoZSBgYHBvcCgpYGAgbWV0aG9kIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBsaXN0IGFuZCBhcnJheSB0eXBlcy5cbiAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjcuIFRoZSBgYHNvcnQoKWBgIGFuZCBgYHJldmVyc2UoKWBgIG1ldGhvZHMgbW9kaWZ5IHRoZSBsaXN0IGluIHBsYWNlXG4gICBmb3IgZWNvbm9teSBvZiBzcGFjZSB3aGVuIHNvcnRpbmcgb3IgcmV2ZXJzaW5nIGEgbGFyZ2UgbGlzdC4gIFRvXG4gICByZW1pbmQgeW91IHRoYXQgdGhleSBvcGVyYXRlIGJ5IHNpZGUgZWZmZWN0LCB0aGV5IGRvblwndCByZXR1cm4gdGhlXG4gICBzb3J0ZWQgb3IgcmV2ZXJzZWQgbGlzdC5cblxuOC4gVGhlIGBgc29ydCgpYGAgbWV0aG9kIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29udHJvbGxpbmcgdGhlXG4gICBjb21wYXJpc29ucy5cblxuICAgKmNtcCogc3BlY2lmaWVzIGEgY3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cyAobGlzdFxuICAgaXRlbXMpIHdoaWNoIHNob3VsZCByZXR1cm4gYSBuZWdhdGl2ZSwgemVybyBvciBwb3NpdGl2ZSBudW1iZXJcbiAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHNtYWxsZXIgdGhhbixcbiAgIGVxdWFsIHRvLCBvciBsYXJnZXIgdGhhbiB0aGUgc2Vjb25kIGFyZ3VtZW50OiBgYGNtcD1sYW1iZGEgeCx5OlxuICAgY21wKHgubG93ZXIoKSwgeS5sb3dlcigpKWBgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdFxuICAgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50OiBgYGtleT1zdHIubG93ZXJgYC4gIFRoZVxuICAgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgSW4gZ2VuZXJhbCwgdGhlICprZXkqIGFuZCAqcmV2ZXJzZSogY29udmVyc2lvbiBwcm9jZXNzZXMgYXJlIG11Y2hcbiAgIGZhc3RlciB0aGFuIHNwZWNpZnlpbmcgYW4gZXF1aXZhbGVudCAqY21wKiBmdW5jdGlvbi4gIFRoaXMgaXNcbiAgIGJlY2F1c2UgKmNtcCogaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIGxpc3QgZWxlbWVudCB3aGlsZVxuICAgKmtleSogYW5kICpyZXZlcnNlKiB0b3VjaCBlYWNoIGVsZW1lbnQgb25seSBvbmNlLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYE5vbmVgYCBhcyBhbiBlcXVpdmFsZW50IHRvXG4gICBvbWl0dGluZyAqY21wKiB3YXMgYWRkZWQuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yICprZXkqIGFuZCAqcmV2ZXJzZSogd2FzIGFkZGVkLlxuXG45LiBTdGFydGluZyB3aXRoIFB5dGhvbiAyLjMsIHRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlXG4gICBzdGFibGUuICBBIHNvcnQgaXMgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGVcbiAgIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsXG4gICBmb3Igc29ydGluZyBpbiBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsXG4gICB0aGVuIGJ5IHNhbGFyeSBncmFkZSkuXG5cbjEwLiAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiAyLjMgYW5kIG5ld2VyIG1ha2VzIHRoZVxuICAgIGxpc3QgYXBwZWFyIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgaWZcbiAgICBpdCBjYW4gZGV0ZWN0IHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuJywKLSAndHlwZXNzZXEtbXV0YWJsZSc6IHUiXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cbkxpc3Qgb2JqZWN0cyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IGFsbG93IGluLXBsYWNlXG5tb2RpZmljYXRpb24gb2YgdGhlIG9iamVjdC4gT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlbiBhZGRlZFxudG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuIFN0cmluZ3MgYW5kXG50dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdCBiZSBtb2RpZmllZFxub25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9ICAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9IHhgYCB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIG51bWJlciBvZiAqaSoncyBmb3Igd2hpY2ggfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgICAgIHwgcmV0dXJuIHNtYWxsZXN0ICprKiBzdWNoIHRoYXQgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNba10gPT0geGBgIGFuZCBgYGkgPD0gayA8IGpgYCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTppXSA9IFt4XWBgICAgICAgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5wb3AoW2ldKWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGB4ID0gc1tpXTsgZGVsIHNbaV07ICAgIHwgKDYpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIHhgYCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZW1vdmUoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBkZWwgc1tzLmluZGV4KHgpXWBgICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg3KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuc29ydChbY21wWywga2V5WywgICAgICAgICAgfCBzb3J0IHRoZSBpdGVtcyBvZiAqcyogaW4gcGxhY2UgICB8ICg3KSg4KSg5KSgxMCkgICAgICAgICB8XG58IHJldmVyc2VdXV0pYGAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzICByZXBsYWNpbmcuXG5cbjIuIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBoYXMgaGlzdG9yaWNhbGx5IGFjY2VwdGVkIG11bHRpcGxlXG4gICBwYXJhbWV0ZXJzIGFuZCBpbXBsaWNpdGx5IGpvaW5lZCB0aGVtIGludG8gYSB0dXBsZTsgdGhpcyBubyBsb25nZXJcbiAgIHdvcmtzIGluIFB5dGhvbiAyLjAuICBVc2Ugb2YgdGhpcyBtaXNmZWF0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWRcbiAgIHNpbmNlIFB5dGhvbiAxLjQuXG5cbjMuICp4KiBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdC5cblxuNC4gUmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW4gYSBuZWdhdGl2ZVxuICAgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHRvIHRoZSBgYGluZGV4KClgYFxuICAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZSBpbmRpY2VzLiAgSWYgaXQgaXNcbiAgIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGBgaW5kZXgoKWBgIGRpZG4ndCBoYXZlXG4gICBhcmd1bWVudHMgZm9yIHNwZWNpZnlpbmcgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zLlxuXG41LiBXaGVuIGEgbmVnYXRpdmUgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlXG4gICBgYGluc2VydCgpYGAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZVxuICAgaW5kaWNlcy4gIElmIGl0IGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yXG4gICBzbGljZSBpbmRpY2VzLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhbGwgbmVnYXRpdmUgaW5kaWNlcyB3ZXJlXG4gICB0cnVuY2F0ZWQgdG8gemVyby5cblxuNi4gVGhlIGBgcG9wKClgYCBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGxpc3QgYW5kIGFycmF5IHR5cGVzLlxuICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuNy4gVGhlIGBgc29ydCgpYGAgYW5kIGBgcmV2ZXJzZSgpYGAgbWV0aG9kcyBtb2RpZnkgdGhlIGxpc3QgaW4gcGxhY2VcbiAgIGZvciBlY29ub215IG9mIHNwYWNlIHdoZW4gc29ydGluZyBvciByZXZlcnNpbmcgYSBsYXJnZSBsaXN0LiAgVG9cbiAgIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXkgZG9uJ3QgcmV0dXJuIHRoZVxuICAgc29ydGVkIG9yIHJldmVyc2VkIGxpc3QuXG5cbjguIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCB0YWtlcyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIGNvbnRyb2xsaW5nIHRoZVxuICAgY29tcGFyaXNvbnMuXG5cbiAgICpjbXAqIHNwZWNpZmllcyBhIGN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVudHMgKGxpc3RcbiAgIGl0ZW1zKSB3aGljaCBzaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgbnVtYmVyXG4gICBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlyc3QgYXJndW1lbnQgaXMgY29uc2lkZXJlZCBzbWFsbGVyIHRoYW4sXG4gICBlcXVhbCB0bywgb3IgbGFyZ2VyIHRoYW4gdGhlIHNlY29uZCBhcmd1bWVudDogYGBjbXA9bGFtYmRhIHgseTpcbiAgIGNtcCh4Lmxvd2VyKCksIHkubG93ZXIoKSlgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLlxuXG4gICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3RcbiAgIGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDogYGBrZXk9c3RyLmxvd2VyYGAuICBUaGVcbiAgIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgIEluIGdlbmVyYWwsIHRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGNvbnZlcnNpb24gcHJvY2Vzc2VzIGFyZSBtdWNoXG4gICBmYXN0ZXIgdGhhbiBzcGVjaWZ5aW5nIGFuIGVxdWl2YWxlbnQgKmNtcCogZnVuY3Rpb24uICBUaGlzIGlzXG4gICBiZWNhdXNlICpjbXAqIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCBsaXN0IGVsZW1lbnQgd2hpbGVcbiAgICprZXkqIGFuZCAqcmV2ZXJzZSogdG91Y2ggZWFjaCBlbGVtZW50IG9ubHkgb25jZS5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYGBOb25lYGAgYXMgYW4gZXF1aXZhbGVudCB0b1xuICAgb21pdHRpbmcgKmNtcCogd2FzIGFkZGVkLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciAqa2V5KiBhbmQgKnJldmVyc2UqIHdhcyBhZGRlZC5cblxuOS4gU3RhcnRpbmcgd2l0aCBQeXRob24gMi4zLCB0aGUgYGBzb3J0KClgYCBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZVxuICAgc3RhYmxlLiAgQSBzb3J0IGlzIHN0YWJsZSBpZiBpdCBndWFyYW50ZWVzIG5vdCB0byBjaGFuZ2UgdGhlXG4gICByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgLS0tIHRoaXMgaXMgaGVscGZ1bFxuICAgZm9yIHNvcnRpbmcgaW4gbXVsdGlwbGUgcGFzc2VzIChmb3IgZXhhbXBsZSwgc29ydCBieSBkZXBhcnRtZW50LFxuICAgdGhlbiBieSBzYWxhcnkgZ3JhZGUpLlxuXG4xMC4gKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gMi4zIGFuZCBuZXdlciBtYWtlcyB0aGVcbiAgICBsaXN0IGFwcGVhciBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIGlmXG4gICAgaXQgY2FuIGRldGVjdCB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cbiIsCisgJ3R5cGVzc2VxJzogdSdcblNlcXVlbmNlIFR5cGVzIC0tLSBgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGBidWZmZXJgYCwgYGB4cmFuZ2VgYFxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzaXggc2VxdWVuY2UgdHlwZXM6IHN0cmluZ3MsIFVuaWNvZGUgc3RyaW5ncywgbGlzdHMsIHR1cGxlcyxcbmJ1ZmZlcnMsIGFuZCB4cmFuZ2Ugb2JqZWN0cy5cblxuRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdCBpbiBgYGRpY3RgYCBhbmQgYGBzZXRgYCBjbGFzc2VzLFxuYW5kIHRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIHdyaXR0ZW4gaW4gc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXM6IGBgXCd4eXp6eVwnYGAsXG5gYCJmcm9ib3p6ImBgLiAgU2VlICpTdHJpbmcgbGl0ZXJhbHMqIGZvciBtb3JlIGFib3V0IHN0cmluZyBsaXRlcmFscy5cblVuaWNvZGUgc3RyaW5ncyBhcmUgbXVjaCBsaWtlIHN0cmluZ3MsIGJ1dCBhcmUgc3BlY2lmaWVkIGluIHRoZSBzeW50YXhcbnVzaW5nIGEgcHJlY2VkaW5nIGBgXCd1XCdgYCBjaGFyYWN0ZXI6IGBgdVwnYWJjXCdgYCwgYGB1ImRlZiJgYC4gSW5cbmFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbmFsaXR5IGRlc2NyaWJlZCBoZXJlLCB0aGVyZSBhcmUgYWxzbyBzdHJpbmctXG5zcGVjaWZpYyBtZXRob2RzIGRlc2NyaWJlZCBpbiB0aGUgKlN0cmluZyBNZXRob2RzKiBzZWN0aW9uLiBMaXN0cyBhcmVcbmNvbnN0cnVjdGVkIHdpdGggc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthLFxuYiwgY11gYC4gVHVwbGVzIGFyZSBjb25zdHJ1Y3RlZCBieSB0aGUgY29tbWEgb3BlcmF0b3IgKG5vdCB3aXRoaW5cbnNxdWFyZSBicmFja2V0cyksIHdpdGggb3Igd2l0aG91dCBlbmNsb3NpbmcgcGFyZW50aGVzZXMsIGJ1dCBhbiBlbXB0eVxudHVwbGUgbXVzdCBoYXZlIHRoZSBlbmNsb3NpbmcgcGFyZW50aGVzZXMsIHN1Y2ggYXMgYGBhLCBiLCBjYGAgb3JcbmBgKClgYC4gIEEgc2luZ2xlIGl0ZW0gdHVwbGUgbXVzdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEsIHN1Y2ggYXNcbmBgKGQsKWBgLlxuXG5CdWZmZXIgb2JqZWN0cyBhcmUgbm90IGRpcmVjdGx5IHN1cHBvcnRlZCBieSBQeXRob24gc3ludGF4LCBidXQgY2FuIGJlXG5jcmVhdGVkIGJ5IGNhbGxpbmcgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgYnVmZmVyKClgYC4gIFRoZXkgZG9uXCd0XG5zdXBwb3J0IGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuT2JqZWN0cyBvZiB0eXBlIHhyYW5nZSBhcmUgc2ltaWxhciB0byBidWZmZXJzIGluIHRoYXQgdGhlcmUgaXMgbm9cbnNwZWNpZmljIHN5bnRheCB0byBjcmVhdGUgdGhlbSwgYnV0IHRoZXkgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlXG5gYHhyYW5nZSgpYGAgZnVuY3Rpb24uICBUaGV5IGRvblwndCBzdXBwb3J0IHNsaWNpbmcsIGNvbmNhdGVuYXRpb24gb3JcbnJlcGV0aXRpb24sIGFuZCB1c2luZyBgYGluYGAsIGBgbm90IGluYGAsIGBgbWluKClgYCBvciBgYG1heCgpYGAgb25cbnRoZW0gaXMgaW5lZmZpY2llbnQuXG5cbk1vc3Qgc2VxdWVuY2UgdHlwZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuICBUaGUgYGBpbmBgIGFuZFxuYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUgY29tcGFyaXNvblxub3BlcmF0aW9ucy4gIFRoZSBgYCtgYCBhbmQgYGAqYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzXG50aGUgY29ycmVzcG9uZGluZyBudW1lcmljIG9wZXJhdGlvbnMuIFszXSBBZGRpdGlvbmFsIG1ldGhvZHMgYXJlXG5wcm92aWRlZCBmb3IgKk11dGFibGUgU2VxdWVuY2UgVHlwZXMqLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZTsgKm4qLCAqaSogYW5kICpqKiBhcmVcbmludGVnZXJzOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICB8IGBgVHJ1ZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYEZhbHNlYGAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICB8IGBgRmFsc2VgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYFRydWVgYCAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyAqIG4sIG4gKiBzYGAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGNvbmNhdGVuYXRlZCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpXWBgICAgICAgICAgICB8ICppKlwndGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICB8ICgzKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXWBgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdYGAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYGxlbihzKWBgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgfCBzbWFsbGVzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1heChzKWBgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZSB0eXBlcyBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuIEluIHBhcnRpY3VsYXIsIHR1cGxlcyBhbmRcbmxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmcgY29ycmVzcG9uZGluZ1xuZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBldmVyeSBlbGVtZW50IG11c3QgY29tcGFyZVxuZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZVxubGVuZ3RoLiAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpbiB0aGUgbGFuZ3VhZ2VcbnJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGVuICpzKiBpcyBhIHN0cmluZyBvciBVbmljb2RlIHN0cmluZyBvYmplY3QgdGhlIGBgaW5gYCBhbmQgYGBub3RcbiAgIGluYGAgb3BlcmF0aW9ucyBhY3QgbGlrZSBhIHN1YnN0cmluZyB0ZXN0LiAgSW4gUHl0aG9uIHZlcnNpb25zXG4gICBiZWZvcmUgMi4zLCAqeCogaGFkIHRvIGJlIGEgc3RyaW5nIG9mIGxlbmd0aCAxLiBJbiBQeXRob24gMi4zIGFuZFxuICAgYmV5b25kLCAqeCogbWF5IGJlIGEgc3RyaW5nIG9mIGFueSBsZW5ndGguXG5cbjIuIFZhbHVlcyBvZiAqbiogbGVzcyB0aGFuIGBgMGBgIGFyZSB0cmVhdGVkIGFzIGBgMGBgICh3aGljaCB5aWVsZHMgYW5cbiAgIGVtcHR5IHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3BpZXNcbiAgIGFyZSBzaGFsbG93OyBuZXN0ZWQgc3RydWN0dXJlcyBhcmUgbm90IGNvcGllZC4gIFRoaXMgb2Z0ZW4gaGF1bnRzXG4gICBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjpcblxuICAgPj4+IGxpc3RzID0gW1tdXSAqIDNcbiAgID4+PiBsaXN0c1xuICAgW1tdLCBbXSwgW11dXG4gICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICA+Pj4gbGlzdHNcbiAgIFtbM10sIFszXSwgWzNdXVxuXG4gICBXaGF0IGhhcyBoYXBwZW5lZCBpcyB0aGF0IGBgW1tdXWBgIGlzIGEgb25lLWVsZW1lbnQgbGlzdCBjb250YWluaW5nXG4gICBhbiBlbXB0eSBsaXN0LCBzbyBhbGwgdGhyZWUgZWxlbWVudHMgb2YgYGBbW11dICogM2BgIGFyZSAocG9pbnRlcnNcbiAgIHRvKSB0aGlzIHNpbmdsZSBlbXB0eSBsaXN0LiAgTW9kaWZ5aW5nIGFueSBvZiB0aGUgZWxlbWVudHMgb2ZcbiAgIGBgbGlzdHNgYCBtb2RpZmllcyB0aGlzIHNpbmdsZSBsaXN0LiBZb3UgY2FuIGNyZWF0ZSBhIGxpc3Qgb2ZcbiAgIGRpZmZlcmVudCBsaXN0cyB0aGlzIHdheTpcblxuICAgPj4+IGxpc3RzID0gW1tdIGZvciBpIGluIHJhbmdlKDMpXVxuICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgPj4+IGxpc3RzWzFdLmFwcGVuZCg1KVxuICAgPj4+IGxpc3RzWzJdLmFwcGVuZCg3KVxuICAgPj4+IGxpc3RzXG4gICBbWzNdLCBbNV0sIFs3XV1cblxuMy4gSWYgKmkqIG9yICpqKiBpcyBuZWdhdGl2ZSwgdGhlIGluZGV4IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlXG4gICBzdHJpbmc6IGBgbGVuKHMpICsgaWBgIG9yIGBgbGVuKHMpICsgamBgIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGVcbiAgIHRoYXQgYGAtMGBgIGlzIHN0aWxsIGBgMGBgLlxuXG40LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyBkZWZpbmVkIGFzIHRoZSBzZXF1ZW5jZSBvZlxuICAgaXRlbXMgd2l0aCBpbmRleCAqayogc3VjaCB0aGF0IGBgaSA8PSBrIDwgamBgLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuIGBgbGVuKHMpYGAsIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIGlzIG9taXR0ZWQgb3JcbiAgIGBgTm9uZWBgLCB1c2UgYGAwYGAuICBJZiAqaiogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgdXNlXG4gICBgYGxlbihzKWBgLiAgSWYgKmkqIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpc1xuICAgZW1wdHkuXG5cbjUuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIHdpdGggc3RlcCAqayogaXMgZGVmaW5lZCBhcyB0aGVcbiAgIHNlcXVlbmNlIG9mIGl0ZW1zIHdpdGggaW5kZXggIGBgeCA9IGkgKyBuKmtgYCBzdWNoIHRoYXQgYGAwIDw9IG4gPFxuICAgKGotaSkva2BgLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbmRpY2VzIGFyZSBgYGlgYCwgYGBpK2tgYCxcbiAgIGBgaSsyKmtgYCwgYGBpKzMqa2BgIGFuZCBzbyBvbiwgc3RvcHBpbmcgd2hlbiAqaiogaXMgcmVhY2hlZCAoYnV0XG4gICBuZXZlciBpbmNsdWRpbmcgKmoqKS4gIElmICppKiBvciAqaiogaXMgZ3JlYXRlciB0aGFuIGBgbGVuKHMpYGAsXG4gICB1c2UgYGBsZW4ocylgYC4gIElmICppKiBvciAqaiogYXJlIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZXkgYmVjb21lXG4gICAiZW5kIiB2YWx1ZXMgKHdoaWNoIGVuZCBkZXBlbmRzIG9uIHRoZSBzaWduIG9mICprKikuICBOb3RlLCAqaypcbiAgIGNhbm5vdCBiZSB6ZXJvLiBJZiAqayogaXMgYGBOb25lYGAsIGl0IGlzIHRyZWF0ZWQgbGlrZSBgYDFgYC5cblxuNi4gKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBJZiAqcyogYW5kICp0KiBhcmUgYm90aCBzdHJpbmdzLFxuICAgc29tZSBQeXRob24gaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgQ1B5dGhvbiBjYW4gdXN1YWxseSBwZXJmb3JtIGFuXG4gICBpbi1wbGFjZSBvcHRpbWl6YXRpb24gZm9yIGFzc2lnbm1lbnRzIG9mIHRoZSBmb3JtIGBgcyA9IHMgKyB0YGAgb3JcbiAgIGBgcyArPSB0YGAuICBXaGVuIGFwcGxpY2FibGUsIHRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIHF1YWRyYXRpY1xuICAgcnVuLXRpbWUgbXVjaCBsZXNzIGxpa2VseS4gIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJvdGggdmVyc2lvbiBhbmRcbiAgIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEZvciBwZXJmb3JtYW5jZSBzZW5zaXRpdmUgY29kZSwgaXQgaXNcbiAgIHByZWZlcmFibGUgdG8gdXNlIHRoZSBgYHN0ci5qb2luKClgYCBtZXRob2Qgd2hpY2ggYXNzdXJlc1xuICAgY29uc2lzdGVudCBsaW5lYXIgY29uY2F0ZW5hdGlvbiBwZXJmb3JtYW5jZSBhY3Jvc3MgdmVyc2lvbnMgYW5kXG4gICBpbXBsZW1lbnRhdGlvbnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IEZvcm1lcmx5LCBzdHJpbmcgY29uY2F0ZW5hdGlvbiBuZXZlclxuICAgb2NjdXJyZWQgaW4tcGxhY2UuXG5cblxuU3RyaW5nIE1ldGhvZHNcbj09PT09PT09PT09PT09XG5cbkJlbG93IGFyZSBsaXN0ZWQgdGhlIHN0cmluZyBtZXRob2RzIHdoaWNoIGJvdGggOC1iaXQgc3RyaW5ncyBhbmRcblVuaWNvZGUgb2JqZWN0cyBzdXBwb3J0LlxuXG5JbiBhZGRpdGlvbiwgUHl0aG9uXCdzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTZXF1ZW5jZSBUeXBlcyAtLS0gc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZSxcbmJ1ZmZlciwgeHJhbmdlKiBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MgdXNlIHRlbXBsYXRlXG5zdHJpbmdzIG9yIHRoZSBgYCVgYCBvcGVyYXRvciBkZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgRm9ybWF0dGluZ1xuT3BlcmF0aW9ucyogc2VjdGlvbi4gQWxzbywgc2VlIHRoZSBgYHJlYGAgbW9kdWxlIGZvciBzdHJpbmcgZnVuY3Rpb25zXG5iYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIG9ubHkgaXRzIGZpcnN0IGNoYXJhY3RlclxuICAgY2FwaXRhbGl6ZWQuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi40OiBTdXBwb3J0IGZvciB0aGUgKmZpbGxjaGFyKiBhcmd1bWVudC5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5kZWNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIERlY29kZXMgdGhlIHN0cmluZyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi5cbiAgICplbmNvZGluZyogZGVmYXVsdHMgdG8gdGhlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5XG4gICBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGBgVW5pY29kZUVycm9yYGAuXG4gICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlclxuICAgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlY1xuICAgQmFzZSBDbGFzc2VzKi5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBvdGhlciBlcnJvciBoYW5kbGluZyBzY2hlbWVzXG4gICBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZy4gIERlZmF1bHQgZW5jb2RpbmcgaXMgdGhlXG4gICBjdXJyZW50IGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nLiAgKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhXG4gICBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzXG4gICBgYFwnc3RyaWN0XCdgYCwgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhXG4gICBgYFVuaWNvZGVFcnJvcmBgLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCxcbiAgIGBgXCdyZXBsYWNlXCdgYCwgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZFxuICAgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWVcbiAgIHNlY3Rpb24gKkNvZGVjIEJhc2UgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWVcbiAgIHNlY3Rpb24gKlN0YW5kYXJkIEVuY29kaW5ncyouXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuMC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogU3VwcG9ydCBmb3IgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCBhbmRcbiAgIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgb3RoZXIgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnN1ZmZpeCouXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG4gICBUaGlzIG1ldGhvZCBvZiBzdHJpbmcgZm9ybWF0dGluZyBpcyB0aGUgbmV3IHN0YW5kYXJkIGluIFB5dGhvbiAzLjAsXG4gICBhbmQgc2hvdWxkIGJlIHByZWZlcnJlZCB0byB0aGUgYGAlYGAgZm9ybWF0dGluZyBkZXNjcmliZWQgaW5cbiAgICpTdHJpbmcgRm9ybWF0dGluZyBPcGVyYXRpb25zKiBpbiBuZXcgY29kZS5cblxuICAgTmV3IGluIHZlcnNpb24gMi42LlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYGZpbmQoKWBgLCBidXQgcmFpc2UgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZVxuICAgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgdGhlICpmaWxsY2hhciogYXJndW1lbnQuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBGb3IgOC1iaXQgc3RyaW5ncywgdGhpcyBtZXRob2QgaXMgbG9jYWxlLWRlcGVuZGVudC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjIuMjogU3VwcG9ydCBmb3IgdGhlICpjaGFycyogYXJndW1lbnQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW5cbiAgIGBgbGVuKHMpYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yIHRoZSAqZmlsbGNoYXIqIGFyZ3VtZW50LlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAyLjUuXG5cbnN0ci5yc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuICAgTmV3IGluIHZlcnNpb24gMi40LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0XG4gICBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjU6IEFjY2VwdCB0dXBsZXMgYXMgKnByZWZpeCouXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4yLjI6IFN1cHBvcnQgZm9yIHRoZSAqY2hhcnMqIGFyZ3VtZW50LlxuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS5cblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgICAgICAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcylcblxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuICAgRm9yIDgtYml0IHN0cmluZ3MsIHRoaXMgbWV0aG9kIGlzIGxvY2FsZS1kZXBlbmRlbnQuXG5cbnN0ci50cmFuc2xhdGUodGFibGVbLCBkZWxldGVjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG4gICBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlY2hhcnMqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZ1xuICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLFxuICAgd2hpY2ggbXVzdCBiZSBhIHN0cmluZyBvZiBsZW5ndGggMjU2LlxuXG4gICBZb3UgY2FuIHVzZSB0aGUgYGBtYWtldHJhbnMoKWBgIGhlbHBlciBmdW5jdGlvbiBpbiB0aGUgYGBzdHJpbmdgYFxuICAgbW9kdWxlIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLiBGb3Igc3RyaW5nIG9iamVjdHMsIHNldCB0aGVcbiAgICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHkgZGVsZXRlXG4gICBjaGFyYWN0ZXJzOlxuXG4gICA+Pj4gXCdyZWFkIHRoaXMgc2hvcnQgdGV4dFwnLnRyYW5zbGF0ZShOb25lLCBcJ2FlaW91XCcpXG4gICBcJ3JkIHRocyBzaHJ0IHR4dFwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDIuNjogU3VwcG9ydCBmb3IgYSBgYE5vbmVgYCAqdGFibGUqIGFyZ3VtZW50LlxuXG4gICBGb3IgVW5pY29kZSBvYmplY3RzLCB0aGUgYGB0cmFuc2xhdGUoKWBgIG1ldGhvZCBkb2VzIG5vdCBhY2NlcHQgdGhlXG4gICBvcHRpb25hbCAqZGVsZXRlY2hhcnMqIGFyZ3VtZW50LiAgSW5zdGVhZCwgaXQgcmV0dXJucyBhIGNvcHkgb2YgdGhlXG4gICAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlblxuICAgdHJhbnNsYXRpb24gdGFibGUgd2hpY2ggbXVzdCBiZSBhIG1hcHBpbmcgb2YgVW5pY29kZSBvcmRpbmFscyB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgVW5pY29kZSBzdHJpbmdzIG9yIGBgTm9uZWBgLiBVbm1hcHBlZCBjaGFyYWN0ZXJzXG4gICBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZSBkZWxldGVkLlxuICAgTm90ZSwgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXJcbiAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWUgYGBlbmNvZGluZ3MuY3AxMjUxYGBcbiAgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXG5cbiAgIEZvciA4LWJpdCBzdHJpbmdzLCB0aGlzIG1ldGhvZCBpcyBsb2NhbGUtZGVwZW5kZW50LlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiB0aGUgbnVtZXJpYyBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCB6ZXJvcyBpbiBhIHN0cmluZyBvZlxuICAgbGVuZ3RoICp3aWR0aCouICBBIHNpZ24gcHJlZml4IGlzIGhhbmRsZWQgY29ycmVjdGx5LiAgVGhlIG9yaWdpbmFsXG4gICBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gYGBsZW4ocylgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMi4yLjIuXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHJlc2VudCBvbmx5IG9uIHVuaWNvZGUgb2JqZWN0czpcblxudW5pY29kZS5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG9ubHkgbnVtZXJpYyBjaGFyYWN0ZXJzIGluIFMsXG4gICBgYEZhbHNlYGAgb3RoZXJ3aXNlLiBOdW1lcmljIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLFxuICAgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LFxuICAgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTiBPTkUgRklGVEguXG5cbnVuaWNvZGUuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZXJlIGFyZSBvbmx5IGRlY2ltYWwgY2hhcmFjdGVycyBpbiBTLFxuICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gRGVjaW1hbCBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycyxcbiAgIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9ybSBkZWNpbWFsLXJhZGl4XG4gICBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cblxuU3RyaW5nIEZvcm1hdHRpbmcgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5TdHJpbmcgYW5kIFVuaWNvZGUgb2JqZWN0cyBoYXZlIG9uZSB1bmlxdWUgYnVpbHQtaW4gb3BlcmF0aW9uOiB0aGVcbmBgJWBgIG9wZXJhdG9yIChtb2R1bG8pLiAgVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSBzdHJpbmdcbipmb3JtYXR0aW5nKiBvciAqaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuICBHaXZlbiBgYGZvcm1hdCAlIHZhbHVlc2BgXG4od2hlcmUgKmZvcm1hdCogaXMgYSBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QpLCBgYCVgYCBjb252ZXJzaW9uXG5zcGVjaWZpY2F0aW9ucyBpbiAqZm9ybWF0KiBhcmUgcmVwbGFjZWQgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMgb2Zcbip2YWx1ZXMqLiAgVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIHRoZSB1c2luZyBgYHNwcmludGYoKWBgIGluIHRoZSBDXG5sYW5ndWFnZS4gIElmICpmb3JtYXQqIGlzIGEgVW5pY29kZSBvYmplY3QsIG9yIGlmIGFueSBvZiB0aGUgb2JqZWN0c1xuYmVpbmcgY29udmVydGVkIHVzaW5nIHRoZSBgYCVzYGAgY29udmVyc2lvbiBhcmUgVW5pY29kZSBvYmplY3RzLCB0aGVcbnJlc3VsdCB3aWxsIGFsc28gYmUgYSBVbmljb2RlIG9iamVjdC5cblxuSWYgKmZvcm1hdCogcmVxdWlyZXMgYSBzaW5nbGUgYXJndW1lbnQsICp2YWx1ZXMqIG1heSBiZSBhIHNpbmdsZSBub24tXG50dXBsZSBvYmplY3QuIFs0XSAgT3RoZXJ3aXNlLCAqdmFsdWVzKiBtdXN0IGJlIGEgdHVwbGUgd2l0aCBleGFjdGx5XG50aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZywgb3IgYSBzaW5nbGVcbm1hcHBpbmcgb2JqZWN0IChmb3IgZXhhbXBsZSwgYSBkaWN0aW9uYXJ5KS5cblxuQSBjb252ZXJzaW9uIHNwZWNpZmllciBjb250YWlucyB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzIGFuZCBoYXMgdGhlXG5mb2xsb3dpbmcgY29tcG9uZW50cywgd2hpY2ggbXVzdCBvY2N1ciBpbiB0aGlzIG9yZGVyOlxuXG4xLiBUaGUgYGBcJyVcJ2BgIGNoYXJhY3Rlciwgd2hpY2ggbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZXIuXG5cbjIuIE1hcHBpbmcga2V5IChvcHRpb25hbCksIGNvbnNpc3Rpbmcgb2YgYSBwYXJlbnRoZXNpc2VkIHNlcXVlbmNlIG9mXG4gICBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgYGAoc29tZW5hbWUpYGApLlxuXG4zLiBDb252ZXJzaW9uIGZsYWdzIChvcHRpb25hbCksIHdoaWNoIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHNvbWVcbiAgIGNvbnZlcnNpb24gdHlwZXMuXG5cbjQuIE1pbmltdW0gZmllbGQgd2lkdGggKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBhcyBhbiBgYFwnKlwnYGBcbiAgIChhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGggaXMgcmVhZCBmcm9tIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlXG4gICB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZSBvYmplY3QgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGVcbiAgIG1pbmltdW0gZmllbGQgd2lkdGggYW5kIG9wdGlvbmFsIHByZWNpc2lvbi5cblxuNS4gUHJlY2lzaW9uIChvcHRpb25hbCksIGdpdmVuIGFzIGEgYGBcJy5cJ2BgIChkb3QpIGZvbGxvd2VkIGJ5IHRoZVxuICAgcHJlY2lzaW9uLiAgSWYgc3BlY2lmaWVkIGFzIGBgXCcqXCdgYCAoYW4gYXN0ZXJpc2spLCB0aGUgYWN0dWFsIHdpZHRoXG4gICBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgdHVwbGUgaW4gKnZhbHVlcyosIGFuZCB0aGVcbiAgIHZhbHVlIHRvIGNvbnZlcnQgY29tZXMgYWZ0ZXIgdGhlIHByZWNpc2lvbi5cblxuNi4gTGVuZ3RoIG1vZGlmaWVyIChvcHRpb25hbCkuXG5cbjcuIENvbnZlcnNpb24gdHlwZS5cblxuV2hlbiB0aGUgcmlnaHQgYXJndW1lbnQgaXMgYSBkaWN0aW9uYXJ5IChvciBvdGhlciBtYXBwaW5nIHR5cGUpLCB0aGVuXG50aGUgZm9ybWF0cyBpbiB0aGUgc3RyaW5nICptdXN0KiBpbmNsdWRlIGEgcGFyZW50aGVzaXNlZCBtYXBwaW5nIGtleVxuaW50byB0aGF0IGRpY3Rpb25hcnkgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBgXCclXCdgYCBjaGFyYWN0ZXIuXG5UaGUgbWFwcGluZyBrZXkgc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuXG5Gb3IgZXhhbXBsZTpcblxuPj4+IHByaW50IFwnJShsYW5ndWFnZSlzIGhhcyAlKCMpMDNkIHF1b3RlIHR5cGVzLlwnICUgXFxcbi4uLiAgICAgICB7XCdsYW5ndWFnZVwnOiAiUHl0aG9uIiwgIiMiOiAyfVxuUHl0aG9uIGhhcyAwMDIgcXVvdGUgdHlwZXMuXG5cbkluIHRoaXMgY2FzZSBubyBgYCpgYCBzcGVjaWZpZXJzIG1heSBvY2N1ciBpbiBhIGZvcm1hdCAoc2luY2UgdGhleVxucmVxdWlyZSBhIHNlcXVlbnRpYWwgcGFyYW1ldGVyIGxpc3QpLlxuXG5UaGUgY29udmVyc2lvbiBmbGFnIGNoYXJhY3RlcnMgYXJlOlxuXG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IEZsYWcgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgXCcjXCdgYCAgIHwgVGhlIHZhbHVlIGNvbnZlcnNpb24gd2lsbCB1c2UgdGhlICJhbHRlcm5hdGUgZm9ybSIgKHdoZXJlIGRlZmluZWQgICAgIHxcbnwgICAgICAgICAgIHwgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBcJzBcJ2BgICAgfCBUaGUgY29udmVyc2lvbiB3aWxsIGJlIHplcm8gcGFkZGVkIGZvciBudW1lcmljIHZhbHVlcy4gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnLVwnYGAgICB8IFRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgbGVmdCBhZGp1c3RlZCAob3ZlcnJpZGVzIHRoZSBgYFwnMFwnYGAgICAgICAgICAgIHxcbnwgICAgICAgICAgIHwgY29udmVyc2lvbiBpZiBib3RoIGFyZSBnaXZlbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBcJyBcJ2BgICAgfCAoYSBzcGFjZSkgQSBibGFuayBzaG91bGQgYmUgbGVmdCBiZWZvcmUgYSBwb3NpdGl2ZSBudW1iZXIgKG9yIGVtcHR5ICAgfFxufCAgICAgICAgICAgfCBzdHJpbmcpIHByb2R1Y2VkIGJ5IGEgc2lnbmVkIGNvbnZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnK1wnYGAgICB8IEEgc2lnbiBjaGFyYWN0ZXIgKGBgXCcrXCdgYCBvciBgYFwnLVwnYGApIHdpbGwgcHJlY2VkZSB0aGUgY29udmVyc2lvbiAgICAgfFxufCAgICAgICAgICAgfCAob3ZlcnJpZGVzIGEgInNwYWNlIiBmbGFnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5BIGxlbmd0aCBtb2RpZmllciAoYGBoYGAsIGBgbGBgLCBvciBgYExgYCkgbWF5IGJlIHByZXNlbnQsIGJ1dCBpc1xuaWdub3JlZCBhcyBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBQeXRob24gLS0gc28gZS5nLiBgYCVsZGBgIGlzXG5pZGVudGljYWwgdG8gYGAlZGBgLlxuXG5UaGUgY29udmVyc2lvbiB0eXBlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgQ29udmVyc2lvbiAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgYGBcJ2RcJ2BgICAgICAgfCBTaWduZWQgaW50ZWdlciBkZWNpbWFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnaVwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdvXCdgYCAgICAgIHwgU2lnbmVkIG9jdGFsIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoMSkgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3VcJ2BgICAgICAgfCBPYnNvbGV0ZSB0eXBlIC0tIGl0IGlzIGlkZW50aWNhbCB0byBgYFwnZFwnYGAuICAgICAgICAgIHwgKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCd4XCdgYCAgICAgIHwgU2lnbmVkIGhleGFkZWNpbWFsIChsb3dlcmNhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgfCAoMikgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ1hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKHVwcGVyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZVwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGV4cG9uZW50aWFsIGZvcm1hdCAobG93ZXJjYXNlKS4gICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdFXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0ICh1cHBlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2ZcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnRlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdnXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZm9ybWF0LiBVc2VzIGxvd2VyY2FzZSBleHBvbmVudGlhbCAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgIHwgZm9ybWF0IGlmIGV4cG9uZW50IGlzIGxlc3MgdGhhbiAtNCBvciBub3QgbGVzcyB0aGFuICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgcHJlY2lzaW9uLCBkZWNpbWFsIGZvcm1hdCBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgdXBwZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnY1wnYGAgICAgICB8IFNpbmdsZSBjaGFyYWN0ZXIgKGFjY2VwdHMgaW50ZWdlciBvciBzaW5nbGUgY2hhcmFjdGVyIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHN0cmluZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdyXCdgYCAgICAgIHwgU3RyaW5nIChjb252ZXJ0cyBhbnkgUHl0aG9uIG9iamVjdCB1c2luZyBgYHJlcHIoKWBgKS4gfCAoNSkgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3NcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgc3RyKClgYCkuICB8ICg2KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnJVwnYGAgICAgICB8IE5vIGFyZ3VtZW50IGlzIGNvbnZlcnRlZCwgcmVzdWx0cyBpbiBhIGBgXCclXCdgYCAgICAgICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgY2hhcmFjdGVyIGluIHRoZSByZXN1bHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgYSBsZWFkaW5nIHplcm8gKGBgXCcwXCdgYCkgdG8gYmUgaW5zZXJ0ZWRcbiAgIGJldHdlZW4gbGVmdC1oYW5kIHBhZGRpbmcgYW5kIHRoZSBmb3JtYXR0aW5nIG9mIHRoZSBudW1iZXIgaWYgdGhlXG4gICBsZWFkaW5nIGNoYXJhY3RlciBvZiB0aGUgcmVzdWx0IGlzIG5vdCBhbHJlYWR5IGEgemVyby5cblxuMi4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgYGBcJzB4XCdgYCBvciBgYFwnMFhcJ2BgIChkZXBlbmRpbmdcbiAgIG9uIHdoZXRoZXIgdGhlIGBgXCd4XCdgYCBvciBgYFwnWFwnYGAgZm9ybWF0IHdhcyB1c2VkKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4zLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgdG8gYWx3YXlzIGNvbnRhaW4gYSBkZWNpbWFsXG4gICBwb2ludCwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcbiAgIHBvaW50IGFuZCBkZWZhdWx0cyB0byA2LlxuXG40LiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgdG8gYWx3YXlzIGNvbnRhaW4gYSBkZWNpbWFsXG4gICBwb2ludCwgYW5kIHRyYWlsaW5nIHplcm9lcyBhcmUgbm90IHJlbW92ZWQgYXMgdGhleSB3b3VsZCBvdGhlcndpc2VcbiAgIGJlLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgYmVmb3JlXG4gICBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjUuIFRoZSBgYCVyYGAgY29udmVyc2lvbiB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuMC5cblxuICAgVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVzZWQuXG5cbjYuIElmIHRoZSBvYmplY3Qgb3IgZm9ybWF0IHByb3ZpZGVkIGlzIGEgYGB1bmljb2RlYGAgc3RyaW5nLCB0aGVcbiAgIHJlc3VsdGluZyBzdHJpbmcgd2lsbCBhbHNvIGJlIGBgdW5pY29kZWBgLlxuXG4gICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZC5cblxuNy4gU2VlICoqUEVQIDIzNyoqLlxuXG5TaW5jZSBQeXRob24gc3RyaW5ncyBoYXZlIGFuIGV4cGxpY2l0IGxlbmd0aCwgYGAlc2BgIGNvbnZlcnNpb25zIGRvXG5ub3QgYXNzdW1lIHRoYXQgYGBcJ1xcMFwnYGAgaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMi43OiBgYCVmYGAgY29udmVyc2lvbnMgZm9yIG51bWJlcnMgd2hvc2UgYWJzb2x1dGVcbnZhbHVlIGlzIG92ZXIgMWU1MCBhcmUgbm8gbG9uZ2VyIHJlcGxhY2VkIGJ5IGBgJWdgYCBjb252ZXJzaW9ucy5cblxuQWRkaXRpb25hbCBzdHJpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiBzdGFuZGFyZCBtb2R1bGVzXG5gYHN0cmluZ2BgIGFuZCBgYHJlYGAuXG5cblxuWFJhbmdlIFR5cGVcbj09PT09PT09PT09XG5cblRoZSBgYHhyYW5nZWBgIHR5cGUgaXMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHdoaWNoIGlzIGNvbW1vbmx5IHVzZWRcbmZvciBsb29waW5nLiAgVGhlIGFkdmFudGFnZSBvZiB0aGUgYGB4cmFuZ2VgYCB0eXBlIGlzIHRoYXQgYW5cbmBgeHJhbmdlYGAgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgYW1vdW50IG9mIG1lbW9yeSwgbm9cbm1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cy4gIFRoZXJlIGFyZSBubyBjb25zaXN0ZW50XG5wZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLlxuXG5YUmFuZ2Ugb2JqZWN0cyBoYXZlIHZlcnkgbGl0dGxlIGJlaGF2aW9yOiB0aGV5IG9ubHkgc3VwcG9ydCBpbmRleGluZyxcbml0ZXJhdGlvbiwgYW5kIHRoZSBgYGxlbigpYGAgZnVuY3Rpb24uXG5cblxuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PVxuXG5MaXN0IG9iamVjdHMgc3VwcG9ydCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdGhhdCBhbGxvdyBpbi1wbGFjZVxubW9kaWZpY2F0aW9uIG9mIHRoZSBvYmplY3QuIE90aGVyIG11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZW4gYWRkZWRcbnRvIHRoZSBsYW5ndWFnZSkgc2hvdWxkIGFsc28gc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zLiBTdHJpbmdzIGFuZFxudHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXM6IHN1Y2ggb2JqZWN0cyBjYW5ub3QgYmUgbW9kaWZpZWRcbm9uY2UgY3JlYXRlZC4gVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzICh3aGVyZSAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCk6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSAgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbeF1gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmV4dGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSB4YGAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3VudCh4KWBgICAgICAgICAgICAgICAgICB8IHJldHVybiBudW1iZXIgb2YgKmkqXCdzIGZvciB3aGljaCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoeFssIGlbLCBqXV0pYGAgICAgICAgfCByZXR1cm4gc21hbGxlc3QgKmsqIHN1Y2ggdGhhdCAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1trXSA9PSB4YGAgYW5kIGBgaSA8PSBrIDwgamBgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5zZXJ0KGksIHgpYGAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmldID0gW3hdYGAgICAgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHggPSBzW2ldOyBkZWwgc1tpXTsgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXR1cm4geGBgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYGRlbCBzW3MuaW5kZXgoeCldYGAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZXZlcnNlKClgYCAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDcpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5zb3J0KFtjbXBbLCBrZXlbLCAgICAgICAgICB8IHNvcnQgdGhlIGl0ZW1zIG9mICpzKiBpbiBwbGFjZSAgIHwgKDcpKDgpKDkpKDEwKSAgICAgICAgIHxcbnwgcmV2ZXJzZV1dXSlgYCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgIHJlcGxhY2luZy5cblxuMi4gVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIGhhcyBoaXN0b3JpY2FsbHkgYWNjZXB0ZWQgbXVsdGlwbGVcbiAgIHBhcmFtZXRlcnMgYW5kIGltcGxpY2l0bHkgam9pbmVkIHRoZW0gaW50byBhIHR1cGxlOyB0aGlzIG5vIGxvbmdlclxuICAgd29ya3MgaW4gUHl0aG9uIDIuMC4gIFVzZSBvZiB0aGlzIG1pc2ZlYXR1cmUgaGFzIGJlZW4gZGVwcmVjYXRlZFxuICAgc2luY2UgUHl0aG9uIDEuNC5cblxuMy4gKngqIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LlxuXG40LiBSYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlbiBhIG5lZ2F0aXZlXG4gICBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgdG8gdGhlIGBgaW5kZXgoKWBgXG4gICBtZXRob2QsIHRoZSBsaXN0IGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdCBpc1xuICAgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuMzogUHJldmlvdXNseSwgYGBpbmRleCgpYGAgZGlkblwndCBoYXZlXG4gICBhcmd1bWVudHMgZm9yIHNwZWNpZnlpbmcgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zLlxuXG41LiBXaGVuIGEgbmVnYXRpdmUgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlXG4gICBgYGluc2VydCgpYGAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZVxuICAgaW5kaWNlcy4gIElmIGl0IGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yXG4gICBzbGljZSBpbmRpY2VzLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhbGwgbmVnYXRpdmUgaW5kaWNlcyB3ZXJlXG4gICB0cnVuY2F0ZWQgdG8gemVyby5cblxuNi4gVGhlIGBgcG9wKClgYCBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGxpc3QgYW5kIGFycmF5IHR5cGVzLlxuICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuNy4gVGhlIGBgc29ydCgpYGAgYW5kIGBgcmV2ZXJzZSgpYGAgbWV0aG9kcyBtb2RpZnkgdGhlIGxpc3QgaW4gcGxhY2VcbiAgIGZvciBlY29ub215IG9mIHNwYWNlIHdoZW4gc29ydGluZyBvciByZXZlcnNpbmcgYSBsYXJnZSBsaXN0LiAgVG9cbiAgIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXkgZG9uXCd0IHJldHVybiB0aGVcbiAgIHNvcnRlZCBvciByZXZlcnNlZCBsaXN0LlxuXG44LiBUaGUgYGBzb3J0KClgYCBtZXRob2QgdGFrZXMgb3B0aW9uYWwgYXJndW1lbnRzIGZvciBjb250cm9sbGluZyB0aGVcbiAgIGNvbXBhcmlzb25zLlxuXG4gICAqY21wKiBzcGVjaWZpZXMgYSBjdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBvZiB0d28gYXJndW1lbnRzIChsaXN0XG4gICBpdGVtcykgd2hpY2ggc2hvdWxkIHJldHVybiBhIG5lZ2F0aXZlLCB6ZXJvIG9yIHBvc2l0aXZlIG51bWJlclxuICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNvbnNpZGVyZWQgc21hbGxlciB0aGFuLFxuICAgZXF1YWwgdG8sIG9yIGxhcmdlciB0aGFuIHRoZSBzZWNvbmQgYXJndW1lbnQ6IGBgY21wPWxhbWJkYSB4LHk6XG4gICBjbXAoeC5sb3dlcigpLCB5Lmxvd2VyKCkpYGAuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0byBleHRyYWN0XG4gICBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQ6IGBga2V5PXN0ci5sb3dlcmBgLiAgVGhlXG4gICBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLlxuXG4gICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0XG4gICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICBJbiBnZW5lcmFsLCB0aGUgKmtleSogYW5kICpyZXZlcnNlKiBjb252ZXJzaW9uIHByb2Nlc3NlcyBhcmUgbXVjaFxuICAgZmFzdGVyIHRoYW4gc3BlY2lmeWluZyBhbiBlcXVpdmFsZW50ICpjbXAqIGZ1bmN0aW9uLiAgVGhpcyBpc1xuICAgYmVjYXVzZSAqY21wKiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggbGlzdCBlbGVtZW50IHdoaWxlXG4gICAqa2V5KiBhbmQgKnJldmVyc2UqIHRvdWNoIGVhY2ggZWxlbWVudCBvbmx5IG9uY2UuICBVc2VcbiAgIGBgZnVuY3Rvb2xzLmNtcF90b19rZXkoKWBgIHRvIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uXG4gICB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBTdXBwb3J0IGZvciBgYE5vbmVgYCBhcyBhbiBlcXVpdmFsZW50IHRvXG4gICBvbWl0dGluZyAqY21wKiB3YXMgYWRkZWQuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjQ6IFN1cHBvcnQgZm9yICprZXkqIGFuZCAqcmV2ZXJzZSogd2FzIGFkZGVkLlxuXG45LiBTdGFydGluZyB3aXRoIFB5dGhvbiAyLjMsIHRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlXG4gICBzdGFibGUuICBBIHNvcnQgaXMgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGVcbiAgIHJlbGF0aXZlIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsXG4gICBmb3Igc29ydGluZyBpbiBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsXG4gICB0aGVuIGJ5IHNhbGFyeSBncmFkZSkuXG5cbjEwLiAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiAyLjMgYW5kIG5ld2VyIG1ha2VzIHRoZVxuICAgIGxpc3QgYXBwZWFyIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgaWZcbiAgICBpdCBjYW4gZGV0ZWN0IHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuJywKKyAndHlwZXNzZXEtbXV0YWJsZSc6IHUiXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cbkxpc3Qgb2JqZWN0cyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IGFsbG93IGluLXBsYWNlXG5tb2RpZmljYXRpb24gb2YgdGhlIG9iamVjdC4gT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlbiBhZGRlZFxudG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuIFN0cmluZ3MgYW5kXG50dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdCBiZSBtb2RpZmllZFxub25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9ICAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9IHhgYCB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIG51bWJlciBvZiAqaSoncyBmb3Igd2hpY2ggfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgICAgIHwgcmV0dXJuIHNtYWxsZXN0ICprKiBzdWNoIHRoYXQgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNba10gPT0geGBgIGFuZCBgYGkgPD0gayA8IGpgYCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTppXSA9IFt4XWBgICAgICAgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5wb3AoW2ldKWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGB4ID0gc1tpXTsgZGVsIHNbaV07ICAgIHwgKDYpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIHhgYCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZW1vdmUoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBkZWwgc1tzLmluZGV4KHgpXWBgICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg3KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuc29ydChbY21wWywga2V5WywgICAgICAgICAgfCBzb3J0IHRoZSBpdGVtcyBvZiAqcyogaW4gcGxhY2UgICB8ICg3KSg4KSg5KSgxMCkgICAgICAgICB8XG58IHJldmVyc2VdXV0pYGAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzICByZXBsYWNpbmcuXG5cbjIuIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBoYXMgaGlzdG9yaWNhbGx5IGFjY2VwdGVkIG11bHRpcGxlXG4gICBwYXJhbWV0ZXJzIGFuZCBpbXBsaWNpdGx5IGpvaW5lZCB0aGVtIGludG8gYSB0dXBsZTsgdGhpcyBubyBsb25nZXJcbiAgIHdvcmtzIGluIFB5dGhvbiAyLjAuICBVc2Ugb2YgdGhpcyBtaXNmZWF0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWRcbiAgIHNpbmNlIFB5dGhvbiAxLjQuXG5cbjMuICp4KiBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdC5cblxuNC4gUmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW4gYSBuZWdhdGl2ZVxuICAgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHRvIHRoZSBgYGluZGV4KClgYFxuICAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZSBpbmRpY2VzLiAgSWYgaXQgaXNcbiAgIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yIHNsaWNlIGluZGljZXMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFByZXZpb3VzbHksIGBgaW5kZXgoKWBgIGRpZG4ndCBoYXZlXG4gICBhcmd1bWVudHMgZm9yIHNwZWNpZnlpbmcgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zLlxuXG41LiBXaGVuIGEgbmVnYXRpdmUgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlXG4gICBgYGluc2VydCgpYGAgbWV0aG9kLCB0aGUgbGlzdCBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZVxuICAgaW5kaWNlcy4gIElmIGl0IGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yXG4gICBzbGljZSBpbmRpY2VzLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMi4zOiBQcmV2aW91c2x5LCBhbGwgbmVnYXRpdmUgaW5kaWNlcyB3ZXJlXG4gICB0cnVuY2F0ZWQgdG8gemVyby5cblxuNi4gVGhlIGBgcG9wKClgYCBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGxpc3QgYW5kIGFycmF5IHR5cGVzLlxuICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuNy4gVGhlIGBgc29ydCgpYGAgYW5kIGBgcmV2ZXJzZSgpYGAgbWV0aG9kcyBtb2RpZnkgdGhlIGxpc3QgaW4gcGxhY2VcbiAgIGZvciBlY29ub215IG9mIHNwYWNlIHdoZW4gc29ydGluZyBvciByZXZlcnNpbmcgYSBsYXJnZSBsaXN0LiAgVG9cbiAgIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXkgZG9uJ3QgcmV0dXJuIHRoZVxuICAgc29ydGVkIG9yIHJldmVyc2VkIGxpc3QuXG5cbjguIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCB0YWtlcyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIGNvbnRyb2xsaW5nIHRoZVxuICAgY29tcGFyaXNvbnMuXG5cbiAgICpjbXAqIHNwZWNpZmllcyBhIGN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVudHMgKGxpc3RcbiAgIGl0ZW1zKSB3aGljaCBzaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUsIHplcm8gb3IgcG9zaXRpdmUgbnVtYmVyXG4gICBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlyc3QgYXJndW1lbnQgaXMgY29uc2lkZXJlZCBzbWFsbGVyIHRoYW4sXG4gICBlcXVhbCB0bywgb3IgbGFyZ2VyIHRoYW4gdGhlIHNlY29uZCBhcmd1bWVudDogYGBjbXA9bGFtYmRhIHgseTpcbiAgIGNtcCh4Lmxvd2VyKCksIHkubG93ZXIoKSlgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLlxuXG4gICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3RcbiAgIGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDogYGBrZXk9c3RyLmxvd2VyYGAuICBUaGVcbiAgIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgIEluIGdlbmVyYWwsIHRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGNvbnZlcnNpb24gcHJvY2Vzc2VzIGFyZSBtdWNoXG4gICBmYXN0ZXIgdGhhbiBzcGVjaWZ5aW5nIGFuIGVxdWl2YWxlbnQgKmNtcCogZnVuY3Rpb24uICBUaGlzIGlzXG4gICBiZWNhdXNlICpjbXAqIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgZWFjaCBsaXN0IGVsZW1lbnQgd2hpbGVcbiAgICprZXkqIGFuZCAqcmV2ZXJzZSogdG91Y2ggZWFjaCBlbGVtZW50IG9ubHkgb25jZS4gIFVzZVxuICAgYGBmdW5jdG9vbHMuY21wX3RvX2tleSgpYGAgdG8gY29udmVydCBhbiBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb25cbiAgIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAyLjM6IFN1cHBvcnQgZm9yIGBgTm9uZWBgIGFzIGFuIGVxdWl2YWxlbnQgdG9cbiAgIG9taXR0aW5nICpjbXAqIHdhcyBhZGRlZC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNDogU3VwcG9ydCBmb3IgKmtleSogYW5kICpyZXZlcnNlKiB3YXMgYWRkZWQuXG5cbjkuIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgdGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmVcbiAgIHN0YWJsZS4gIEEgc29ydCBpcyBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZVxuICAgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWxcbiAgIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCxcbiAgIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS5cblxuMTAuICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIDIuMyBhbmQgbmV3ZXIgbWFrZXMgdGhlXG4gICAgbGlzdCBhcHBlYXIgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZlxuICAgIGl0IGNhbiBkZXRlY3QgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG4iLAogICd1bmFyeSc6IHUnXG5VbmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BbGwgdW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHk6XG5cbiAgIHVfZXhwciA6Oj0gcG93ZXIgfCAiLSIgdV9leHByIHwgIisiIHVfZXhwciB8ICJ+IiB1X2V4cHJcblxuVGhlIHVuYXJ5IGBgLWBgIChtaW51cykgb3BlcmF0b3IgeWllbGRzIHRoZSBuZWdhdGlvbiBvZiBpdHMgbnVtZXJpY1xuYXJndW1lbnQuXG5cblRoZSB1bmFyeSBgYCtgYCAocGx1cykgb3BlcmF0b3IgeWllbGRzIGl0cyBudW1lcmljIGFyZ3VtZW50IHVuY2hhbmdlZC5cblxuVGhlIHVuYXJ5IGBgfmBgIChpbnZlcnQpIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBpbnZlcnNpb24gb2YgaXRzXG5wbGFpbiBvciBsb25nIGludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgYGB4YGAgaXNcbmRlZmluZWQgYXMgYGAtKHgrMSlgYC4gIEl0IG9ubHkgYXBwbGllcyB0byBpbnRlZ3JhbCBudW1iZXJzLlxuXG5JbiBhbGwgdGhyZWUgY2FzZXMsIGlmIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXIgdHlwZSwgYVxuYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnd2hpbGUnOiB1J1xuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpc1xuZXhlY3V0ZWQgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmdvZXMgYmFjayB0byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuJywKLSAnd2l0aCc6IHUnXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbk5ldyBpbiB2ZXJzaW9uIDIuNS5cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vblxuYGB0cnlgYC4uLmBgZXhjZXB0YGAuLi5gYGZpbmFsbHlgYCB1c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWRcbmZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiBleHByZXNzaW9uIFsiYXMiIHRhcmdldF0gIjoiIHN1aXRlXG5cblRoZSBleGVjdXRpb24gb2YgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCBwcm9jZWVkcyBhcyBmb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG4zLiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDUgYmVsb3cuXG5cbjQuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNS4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5Ob3RlOiBJbiBQeXRob24gMi41LCB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZVxuICBgYHdpdGhfc3RhdGVtZW50YGAgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkLiAgSXQgaXMgYWx3YXlzIGVuYWJsZWRcbiAgaW4gUHl0aG9uIDIuNi5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG4nLAorICd3aXRoJzogdSdcblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuTmV3IGluIHZlcnNpb24gMi41LlxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19lbnRlcl9fKClgYCBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gYGBfX2VudGVyX18oKWBgIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgYGB3aXRoYGAgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgYGBfX2VudGVyX18oKWBgXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gYGBfX2V4aXRfXygpYGAgd2lsbCBhbHdheXNcbiAgICAgYmUgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5Ob3RlOiBJbiBQeXRob24gMi41LCB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZVxuICBgYHdpdGhfc3RhdGVtZW50YGAgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkLiAgSXQgaXMgYWx3YXlzIGVuYWJsZWRcbiAgaW4gUHl0aG9uIDIuNi5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDIuNzogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG4nLAogICd5aWVsZCc6IHUnXG5UaGUgYGB5aWVsZGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgeWllbGRfc3RtdCA6Oj0geWllbGRfZXhwcmVzc2lvblxuXG5UaGUgYGB5aWVsZGBgIHN0YXRlbWVudCBpcyBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhIGdlbmVyYXRvclxuZnVuY3Rpb24sIGFuZCBpcyBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi5cblVzaW5nIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgc3VmZmljaWVudCB0b1xuY2F1c2UgdGhhdCBkZWZpbml0aW9uIHRvIGNyZWF0ZSBhIGdlbmVyYXRvciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFcbm5vcm1hbCBmdW5jdGlvbi5cblxuV2hlbiBhIGdlbmVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW4gaXRlcmF0b3Iga25vd24gYXMgYVxuZ2VuZXJhdG9yIGl0ZXJhdG9yLCBvciBtb3JlIGNvbW1vbmx5LCBhIGdlbmVyYXRvci4gIFRoZSBib2R5IG9mIHRoZVxuZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGJ5IGNhbGxpbmcgdGhlIGdlbmVyYXRvclwncyBgYG5leHQoKWBgXG5tZXRob2QgcmVwZWF0ZWRseSB1bnRpbCBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLlxuXG5XaGVuIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCwgdGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgaXNcbmZyb3plbiBhbmQgdGhlIHZhbHVlIG9mICoqZXhwcmVzc2lvbl9saXN0KiogaXMgcmV0dXJuZWQgdG9cbmBgbmV4dCgpYGBcJ3MgY2FsbGVyLiAgQnkgImZyb3plbiIgd2UgbWVhbiB0aGF0IGFsbCBsb2NhbCBzdGF0ZSBpc1xucmV0YWluZWQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiBsb2NhbCB2YXJpYWJsZXMsIHRoZVxuaW5zdHJ1Y3Rpb24gcG9pbnRlciwgYW5kIHRoZSBpbnRlcm5hbCBldmFsdWF0aW9uIHN0YWNrOiBlbm91Z2hcbmluZm9ybWF0aW9uIGlzIHNhdmVkIHNvIHRoYXQgdGhlIG5leHQgdGltZSBgYG5leHQoKWBgIGlzIGludm9rZWQsIHRoZVxuZnVuY3Rpb24gY2FuIHByb2NlZWQgZXhhY3RseSBhcyBpZiB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCB3ZXJlIGp1c3RcbmFub3RoZXIgZXh0ZXJuYWwgY2FsbC5cblxuQXMgb2YgUHl0aG9uIHZlcnNpb24gMi41LCB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCBpcyBub3cgYWxsb3dlZCBpblxudGhlIGBgdHJ5YGAgY2xhdXNlIG9mIGEgYGB0cnlgYCAuLi4gIGBgZmluYWxseWBgIGNvbnN0cnVjdC4gIElmIHRoZVxuZ2VuZXJhdG9yIGlzIG5vdCByZXN1bWVkIGJlZm9yZSBpdCBpcyBmaW5hbGl6ZWQgKGJ5IHJlYWNoaW5nIGEgemVyb1xucmVmZXJlbmNlIGNvdW50IG9yIGJ5IGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkKSwgdGhlIGdlbmVyYXRvci1cbml0ZXJhdG9yXCdzIGBgY2xvc2UoKWBgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCwgYWxsb3dpbmcgYW55IHBlbmRpbmdcbmBgZmluYWxseWBgIGNsYXVzZXMgdG8gZXhlY3V0ZS5cblxuTm90ZTogSW4gUHl0aG9uIDIuMiwgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgd2FzIG9ubHkgYWxsb3dlZCB3aGVuIHRoZVxuICBgYGdlbmVyYXRvcnNgYCBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQuICBUaGlzIGBgX19mdXR1cmVfX2BgIGltcG9ydFxuICBzdGF0ZW1lbnQgd2FzIHVzZWQgdG8gZW5hYmxlIHRoZSBmZWF0dXJlOlxuXG4gICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2VuZXJhdG9yc1xuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDI1NSoqIC0gU2ltcGxlIEdlbmVyYXRvcnNcbiAgICAgIFRoZSBwcm9wb3NhbCBmb3IgYWRkaW5nIGdlbmVyYXRvcnMgYW5kIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50XG4gICAgICB0byBQeXRob24uXG5cbiAgICoqUEVQIDAzNDIqKiAtIENvcm91dGluZXMgdmlhIEVuaGFuY2VkIEdlbmVyYXRvcnNcbiAgICAgIFRoZSBwcm9wb3NhbCB0aGF0LCBhbW9uZyBvdGhlciBnZW5lcmF0b3IgZW5oYW5jZW1lbnRzLCBwcm9wb3NlZFxuICAgICAgYWxsb3dpbmcgYGB5aWVsZGBgIHRvIGFwcGVhciBpbnNpZGUgYSBgYHRyeWBgIC4uLiBgYGZpbmFsbHlgYFxuICAgICAgYmxvY2suXG4nfQpkaWZmIC0tZ2l0IGEvTGliL3JhbmRvbS5weSBiL0xpYi9yYW5kb20ucHkKaW5kZXggNTY4ZGU4OC4uMDFlMTQyMCAxMDA2NDQKLS0tIGEvTGliL3JhbmRvbS5weQorKysgYi9MaWIvcmFuZG9tLnB5CkBAIC00Niw2ICs0Niw3IEBACiBmcm9tIG1hdGggaW1wb3J0IHNxcnQgYXMgX3NxcnQsIGFjb3MgYXMgX2Fjb3MsIGNvcyBhcyBfY29zLCBzaW4gYXMgX3NpbgogZnJvbSBvcyBpbXBvcnQgdXJhbmRvbSBhcyBfdXJhbmRvbQogZnJvbSBiaW5hc2NpaSBpbXBvcnQgaGV4bGlmeSBhcyBfaGV4bGlmeQoraW1wb3J0IGhhc2hsaWIgYXMgX2hhc2hsaWIKIAogX19hbGxfXyA9IFsiUmFuZG9tIiwic2VlZCIsInJhbmRvbSIsInVuaWZvcm0iLCJyYW5kaW50IiwiY2hvaWNlIiwic2FtcGxlIiwKICAgICAgICAgICAgInJhbmRyYW5nZSIsInNodWZmbGUiLCJub3JtYWx2YXJpYXRlIiwibG9nbm9ybXZhcmlhdGUiLApAQCAtMTQxLDYgKzE0MiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFuZG9tLnNldHN0YXRlKCkgb2YgdmVyc2lvbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbiwgc2VsZi5WRVJTSU9OKSkKIAorICAgIGRlZiBqdW1wYWhlYWQoc2VsZiwgbik6CisgICAgICAgICIiIkNoYW5nZSB0aGUgaW50ZXJuYWwgc3RhdGUgdG8gb25lIHRoYXQgaXMgbGlrZWx5IGZhciBhd2F5CisgICAgICAgIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuICBUaGlzIG1ldGhvZCB3aWxsIG5vdCBiZSBpbiBQeTMueCwKKyAgICAgICAgc28gaXQgaXMgYmV0dGVyIHRvIHNpbXBseSByZXNlZWQuCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSBzdXBlci5qdW1wYWhlYWQoKSBtZXRob2QgdXNlcyBzaHVmZmxpbmcgdG8gY2hhbmdlIHN0YXRlLAorICAgICAgICAjIHNvIGl0IG5lZWRzIGEgbGFyZ2UgYW5kICJpbnRlcmVzdGluZyIgbiB0byB3b3JrIHdpdGguICBIZXJlLAorICAgICAgICAjIHdlIHVzZSBoYXNoaW5nIHRvIGNyZWF0ZSBhIGxhcmdlIG4gZm9yIHRoZSBzaHVmZmxlLgorICAgICAgICBzID0gcmVwcihuKSArIHJlcHIoc2VsZi5nZXRzdGF0ZSgpKQorICAgICAgICBuID0gaW50KF9oYXNobGliLm5ldygnc2hhNTEyJywgcykuaGV4ZGlnZXN0KCksIDE2KQorICAgICAgICBzdXBlcihSYW5kb20sIHNlbGYpLmp1bXBhaGVhZChuKQorCiAjIyAtLS0tIE1ldGhvZHMgYmVsb3cgdGhpcyBwb2ludCBkbyBub3QgbmVlZCB0byBiZSBvdmVycmlkZGVuIHdoZW4KICMjIC0tLS0gc3ViY2xhc3NpbmcgZm9yIHRoZSBwdXJwb3NlIG9mIHVzaW5nIGEgZGlmZmVyZW50IGNvcmUgZ2VuZXJhdG9yLgogCkBAIC0yOTIsMTUgKzMwNSw2IEBACiAgICAgICAgIGxhcmdlIHBvcHVsYXRpb246ICAgc2FtcGxlKHhyYW5nZSgxMDAwMDAwMCksIDYwKQogICAgICAgICAiIiIKIAotICAgICAgICAjIFhYWCBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGBwb3B1bGF0aW9uYCBpcyAiYSBzZXF1ZW5jZSIsCi0gICAgICAgICMgWFhYIGF0dGVtcHRzIGFyZSBtYWRlIHRvIGNhdGVyIHRvIGFueSBpdGVyYWJsZSB3aXRoIGEgX19sZW5fXwotICAgICAgICAjIFhYWCBtZXRob2QuICBUaGlzIGhhcyBoYWQgbWl4ZWQgc3VjY2Vzcy4gIEV4YW1wbGVzIGZyb20gYm90aAotICAgICAgICAjIFhYWCBzaWRlczogIHNldHMgd29yayBmaW5lLCBhbmQgc2hvdWxkIGJlY29tZSBvZmZpY2lhbGx5IHN1cHBvcnRlZDsKLSAgICAgICAgIyBYWFggZGljdHMgYXJlIG11Y2ggaGFyZGVyLCBhbmQgaGF2ZSBmYWlsZWQgaW4gdmFyaW91cyBzdWJ0bGUKLSAgICAgICAgIyBYWFggd2F5cyBhY3Jvc3MgYXR0ZW1wdHMuICBTdXBwb3J0IGZvciBtYXBwaW5nIHR5cGVzIHNob3VsZCBwcm9iYWJseQotICAgICAgICAjIFhYWCBiZSBkcm9wcGVkIChhbmQgdXNlcnMgc2hvdWxkIHBhc3MgbWFwcGluZy5rZXlzKCkgb3IgLnZhbHVlcygpCi0gICAgICAgICMgWFhYIGV4cGxpY2l0bHkpLgotCiAgICAgICAgICMgU2FtcGxpbmcgd2l0aG91dCByZXBsYWNlbWVudCBlbnRhaWxzIHRyYWNraW5nIGVpdGhlciBwb3RlbnRpYWwKICAgICAgICAgIyBzZWxlY3Rpb25zICh0aGUgcG9vbCkgaW4gYSBsaXN0IG9yIHByZXZpb3VzIHNlbGVjdGlvbnMgaW4gYSBzZXQuCiAKZGlmZiAtLWdpdCBhL0xpYi9yZS5weSBiL0xpYi9yZS5weQppbmRleCAyY2Y3MTMyLi45NTViNmI1IDEwMDY0NAotLS0gYS9MaWIvcmUucHkKKysrIGIvTGliL3JlLnB5CkBAIC0xNDEsMTYgKzE0MSwxNiBAQAogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLnNlYXJjaChzdHJpbmcpCiAKLWRlZiBzdWIocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKK2RlZiBzdWIocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wLCBmbGFncz0wKToKICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlIGxlZnRtb3N0CiAgICAgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHRoZSBwYXR0ZXJuIGluIHN0cmluZyBieSB0aGUKICAgICByZXBsYWNlbWVudCByZXBsLiAgcmVwbCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgY2FsbGFibGU7CiAgICAgaWYgYSBzdHJpbmcsIGJhY2tzbGFzaCBlc2NhcGVzIGluIGl0IGFyZSBwcm9jZXNzZWQuICBJZiBpdCBpcwogICAgIGEgY2FsbGFibGUsIGl0J3MgcGFzc2VkIHRoZSBtYXRjaCBvYmplY3QgYW5kIG11c3QgcmV0dXJuCiAgICAgYSByZXBsYWNlbWVudCBzdHJpbmcgdG8gYmUgdXNlZC4iIiIKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgMCkuc3ViKHJlcGwsIHN0cmluZywgY291bnQpCisgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5zdWIocmVwbCwgc3RyaW5nLCBjb3VudCkKIAotZGVmIHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKK2RlZiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZywgY291bnQ9MCwgZmxhZ3M9MCk6CiAgICAgIiIiUmV0dXJuIGEgMi10dXBsZSBjb250YWluaW5nIChuZXdfc3RyaW5nLCBudW1iZXIpLgogICAgIG5ld19zdHJpbmcgaXMgdGhlIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlIGxlZnRtb3N0CiAgICAgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHRoZSBwYXR0ZXJuIGluIHRoZSBzb3VyY2UKQEAgLTE1OSwxMiArMTU5LDEyIEBACiAgICAgY2FsbGFibGU7IGlmIGEgc3RyaW5nLCBiYWNrc2xhc2ggZXNjYXBlcyBpbiBpdCBhcmUgcHJvY2Vzc2VkLgogICAgIElmIGl0IGlzIGEgY2FsbGFibGUsIGl0J3MgcGFzc2VkIHRoZSBtYXRjaCBvYmplY3QgYW5kIG11c3QKICAgICByZXR1cm4gYSByZXBsYWNlbWVudCBzdHJpbmcgdG8gYmUgdXNlZC4iIiIKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgMCkuc3VibihyZXBsLCBzdHJpbmcsIGNvdW50KQorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuc3VibihyZXBsLCBzdHJpbmcsIGNvdW50KQogCi1kZWYgc3BsaXQocGF0dGVybiwgc3RyaW5nLCBtYXhzcGxpdD0wKToKK2RlZiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApOgogICAgICIiIlNwbGl0IHRoZSBzb3VyY2Ugc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgcGF0dGVybiwKICAgICByZXR1cm5pbmcgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHJlc3VsdGluZyBzdWJzdHJpbmdzLiIiIgotICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCAwKS5zcGxpdChzdHJpbmcsIG1heHNwbGl0KQorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuc3BsaXQoc3RyaW5nLCBtYXhzcGxpdCkKIAogZGVmIGZpbmRhbGwocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKToKICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBpbiB0aGUgc3RyaW5nLgpkaWZmIC0tZ2l0IGEvTGliL3JleGVjLnB5IGIvTGliL3JleGVjLnB5CmluZGV4IDIyYjFiYjIuLjc0NDYxNTEgMTAwNjQ0Ci0tLSBhL0xpYi9yZXhlYy5weQorKysgYi9MaWIvcmV4ZWMucHkKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgICAgICBtLm9wZW4gPSBtLmZpbGUgPSBzZWxmLnJfb3BlbgogCiAgICAgZGVmIG1ha2VfbWFpbihzZWxmKToKLSAgICAgICAgbSA9IHNlbGYuYWRkX21vZHVsZSgnX19tYWluX18nKQorICAgICAgICBzZWxmLmFkZF9tb2R1bGUoJ19fbWFpbl9fJykKIAogICAgIGRlZiBtYWtlX29zbmFtZShzZWxmKToKICAgICAgICAgb3NuYW1lID0gb3MubmFtZQpkaWZmIC0tZ2l0IGEvTGliL3JvYm90cGFyc2VyLnB5IGIvTGliL3JvYm90cGFyc2VyLnB5CmluZGV4IDcyNjg1NGIuLjE3MjI4NjMgMTAwNjQ0Ci0tLSBhL0xpYi9yb2JvdHBhcnNlci5weQorKysgYi9MaWIvcm9ib3RwYXJzZXIucHkKQEAgLTEzMyw3ICsxMzMsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICMgc2VhcmNoIGZvciBnaXZlbiB1c2VyIGFnZW50IG1hdGNoZXMKICAgICAgICAgIyB0aGUgZmlyc3QgbWF0Y2ggY291bnRzCi0gICAgICAgIHVybCA9IHVybGxpYi5xdW90ZSh1cmxwYXJzZS51cmxwYXJzZSh1cmxsaWIudW5xdW90ZSh1cmwpKVsyXSkgb3IgIi8iCisgICAgICAgIHBhcnNlZF91cmwgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmxsaWIudW5xdW90ZSh1cmwpKQorICAgICAgICB1cmwgPSB1cmxwYXJzZS51cmx1bnBhcnNlKCgnJywgJycsIHBhcnNlZF91cmwucGF0aCwKKyAgICAgICAgICAgIHBhcnNlZF91cmwucGFyYW1zLCBwYXJzZWRfdXJsLnF1ZXJ5LCBwYXJzZWRfdXJsLmZyYWdtZW50KSkKKyAgICAgICAgdXJsID0gdXJsbGliLnF1b3RlKHVybCkKKyAgICAgICAgaWYgbm90IHVybDoKKyAgICAgICAgICAgIHVybCA9ICIvIgogICAgICAgICBmb3IgZW50cnkgaW4gc2VsZi5lbnRyaWVzOgogICAgICAgICAgICAgaWYgZW50cnkuYXBwbGllc190byh1c2VyYWdlbnQpOgogICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5hbGxvd2FuY2UodXJsKQpkaWZmIC0tZ2l0IGEvTGliL3J1bnB5LnB5IGIvTGliL3J1bnB5LnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggZmVhNjEwNC4uZjYzNWM0YgotLS0gYS9MaWIvcnVucHkucHkKKysrIGIvTGliL3J1bnB5LnB5CkBAIC0xMSwyMCArMTEsNTggQEAKIAogaW1wb3J0IHN5cwogaW1wb3J0IGltcAorZnJvbSBwa2d1dGlsIGltcG9ydCByZWFkX2NvZGUKIHRyeToKICAgICBmcm9tIGltcCBpbXBvcnQgZ2V0X2xvYWRlcgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZyb20gcGtndXRpbCBpbXBvcnQgZ2V0X2xvYWRlcgogCiBfX2FsbF9fID0gWwotICAgICJydW5fbW9kdWxlIiwKKyAgICAicnVuX21vZHVsZSIsICJydW5fcGF0aCIsCiBdCiAKK2NsYXNzIF9UZW1wTW9kdWxlKG9iamVjdCk6CisgICAgIiIiVGVtcG9yYXJpbHkgcmVwbGFjZSBhIG1vZHVsZSBpbiBzeXMubW9kdWxlcyB3aXRoIGFuIGVtcHR5IG5hbWVzcGFjZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RfbmFtZSk6CisgICAgICAgIHNlbGYubW9kX25hbWUgPSBtb2RfbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG1vZF9uYW1lKQorICAgICAgICBzZWxmLl9zYXZlZF9tb2R1bGUgPSBbXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgbW9kX25hbWUgPSBzZWxmLm1vZF9uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NhdmVkX21vZHVsZS5hcHBlbmQoc3lzLm1vZHVsZXNbbW9kX25hbWVdKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHN5cy5tb2R1bGVzW21vZF9uYW1lXSA9IHNlbGYubW9kdWxlCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBpZiBzZWxmLl9zYXZlZF9tb2R1bGU6CisgICAgICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm1vZF9uYW1lXSA9IHNlbGYuX3NhdmVkX21vZHVsZVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYubW9kX25hbWVdCisgICAgICAgIHNlbGYuX3NhdmVkX21vZHVsZSA9IFtdCisKK2NsYXNzIF9Nb2RpZmllZEFyZ3YwKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3NhdmVkX3ZhbHVlID0gc2VsZi5fc2VudGluZWwgPSBvYmplY3QoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc2F2ZWRfdmFsdWUgaXMgbm90IHNlbGYuX3NlbnRpbmVsOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbHJlYWR5IHByZXNlcnZpbmcgc2F2ZWQgdmFsdWUiKQorICAgICAgICBzZWxmLl9zYXZlZF92YWx1ZSA9IHN5cy5hcmd2WzBdCisgICAgICAgIHN5cy5hcmd2WzBdID0gc2VsZi52YWx1ZQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHNlbGYuX3NlbnRpbmVsCisgICAgICAgIHN5cy5hcmd2WzBdID0gc2VsZi5fc2F2ZWRfdmFsdWUKIAogZGVmIF9ydW5fY29kZShjb2RlLCBydW5fZ2xvYmFscywgaW5pdF9nbG9iYWxzPU5vbmUsCiAgICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9mbmFtZT1Ob25lLAogICAgICAgICAgICAgICBtb2RfbG9hZGVyPU5vbmUsIHBrZ19uYW1lPU5vbmUpOgotICAgICIiIkhlbHBlciBmb3IgX3J1bl9tb2R1bGVfY29kZSIiIgorICAgICIiIkhlbHBlciB0byBydW4gY29kZSBpbiBub21pbmF0ZWQgbmFtZXNwYWNlIiIiCiAgICAgaWYgaW5pdF9nbG9iYWxzIGlzIG5vdCBOb25lOgogICAgICAgICBydW5fZ2xvYmFscy51cGRhdGUoaW5pdF9nbG9iYWxzKQogICAgIHJ1bl9nbG9iYWxzLnVwZGF0ZShfX25hbWVfXyA9IG1vZF9uYW1lLApAQCAtMzcsMjcgKzc1LDExIEBACiBkZWYgX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX2ZuYW1lPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXI9Tm9uZSwgcGtnX25hbWU9Tm9uZSk6Ci0gICAgIiIiSGVscGVyIGZvciBydW5fbW9kdWxlIiIiCi0gICAgIyBTZXQgdXAgdGhlIHRvcCBsZXZlbCBuYW1lc3BhY2UgZGljdGlvbmFyeQotICAgIHRlbXBfbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCi0gICAgbW9kX2dsb2JhbHMgPSB0ZW1wX21vZHVsZS5fX2RpY3RfXwotICAgICMgTW9kaWZ5IHN5cy5hcmd2WzBdIGFuZCBzeXMubW9kdWxlW21vZF9uYW1lXQotICAgIHNhdmVkX2FyZ3YwID0gc3lzLmFyZ3ZbMF0KLSAgICByZXN0b3JlX21vZHVsZSA9IG1vZF9uYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgaWYgcmVzdG9yZV9tb2R1bGU6Ci0gICAgICAgIHNhdmVkX21vZHVsZSA9IHN5cy5tb2R1bGVzW21vZF9uYW1lXQotICAgIHN5cy5hcmd2WzBdID0gbW9kX2ZuYW1lCi0gICAgc3lzLm1vZHVsZXNbbW9kX25hbWVdID0gdGVtcF9tb2R1bGUKLSAgICB0cnk6CisgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5ldyBuYW1lc3BhY2Ugd2l0aCBzeXMgbW9kaWZpZWQiIiIKKyAgICB3aXRoIF9UZW1wTW9kdWxlKG1vZF9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgX01vZGlmaWVkQXJndjAobW9kX2ZuYW1lKToKKyAgICAgICAgbW9kX2dsb2JhbHMgPSB0ZW1wX21vZHVsZS5tb2R1bGUuX19kaWN0X18KICAgICAgICAgX3J1bl9jb2RlKGNvZGUsIG1vZF9nbG9iYWxzLCBpbml0X2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lLCBtb2RfZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN5cy5hcmd2WzBdID0gc2F2ZWRfYXJndjAKLSAgICAgICAgaWYgcmVzdG9yZV9tb2R1bGU6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1ttb2RfbmFtZV0gPSBzYXZlZF9tb2R1bGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2RfbmFtZV0KKyAgICAgICAgICAgICAgICAgIG1vZF9uYW1lLCBtb2RfZm5hbWUsIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQogICAgICMgQ29weSB0aGUgZ2xvYmFscyBvZiB0aGUgdGVtcG9yYXJ5IG1vZHVsZSwgYXMgdGhleQogICAgICMgbWF5IGJlIGNsZWFyZWQgd2hlbiB0aGUgdGVtcG9yYXJ5IG1vZHVsZSBnb2VzIGF3YXkKICAgICByZXR1cm4gbW9kX2dsb2JhbHMuY29weSgpCkBAIC04MCw0MyArMTAyLDYxIEBACiAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJObyBtb2R1bGUgbmFtZWQgJXMiICUgbW9kX25hbWUpCiAgICAgaWYgbG9hZGVyLmlzX3BhY2thZ2UobW9kX25hbWUpOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigoIiVzIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKSAlIG1vZF9uYW1lKQorICAgICAgICBpZiBtb2RfbmFtZSA9PSAiX19tYWluX18iIG9yIG1vZF9uYW1lLmVuZHN3aXRoKCIuX19tYWluX18iKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnX21haW5fbmFtZSA9IG1vZF9uYW1lICsgIi5fX21haW5fXyIKKyAgICAgICAgICAgIHJldHVybiBfZ2V0X21vZHVsZV9kZXRhaWxzKHBrZ19tYWluX25hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCgiJXM7ICVyIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpICUoZSwgbW9kX25hbWUpKQogICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUobW9kX25hbWUpCiAgICAgaWYgY29kZSBpcyBOb25lOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gY29kZSBvYmplY3QgYXZhaWxhYmxlIGZvciAlcyIgJSBtb2RfbmFtZSkKICAgICBmaWxlbmFtZSA9IF9nZXRfZmlsZW5hbWUobG9hZGVyLCBtb2RfbmFtZSkKLSAgICByZXR1cm4gbG9hZGVyLCBjb2RlLCBmaWxlbmFtZQorICAgIHJldHVybiBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmaWxlbmFtZQogCiAKLSMgWFhYIG5jb2dobGFuOiBTaG91bGQgdGhpcyBiZSBkb2N1bWVudGVkIGFuZCBtYWRlIHB1YmxpYz8KLSMgKEN1cnJlbnQgdGhvdWdodHM6IGRvbid0IHJlcGVhdCB0aGUgbWlzdGFrZSB0aGF0IGxlYWQgdG8gaXRzCi0jIGNyZWF0aW9uIHdoZW4gcnVuX21vZHVsZSgpIG5vIGxvbmdlciBtZXQgdGhlIG5lZWRzIG9mCi0jIG1haW5tb2R1bGUuYywgYnV0IGNvdWxkbid0IGJlIGNoYW5nZWQgYmVjYXVzZSBpdCB3YXMgcHVibGljKQotZGVmIF9ydW5fbW9kdWxlX2FzX21haW4obW9kX25hbWUsIHNldF9hcmd2MD1UcnVlKToKK2RlZiBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKToKKyAgICAjIEhlbHBlciB0aGF0IGdpdmVzIGEgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIGF0dGVtcHRpbmcgdG8KKyAgICAjIGV4ZWN1dGUgYSB6aXBmaWxlIG9yIGRpcmVjdG9yeSBieSBpbnZva2luZyBfX21haW5fXy5weQorICAgIG1haW5fbmFtZSA9ICJfX21haW5fXyIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfZ2V0X21vZHVsZV9kZXRhaWxzKG1haW5fbmFtZSkKKyAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICBpZiBtYWluX25hbWUgaW4gc3RyKGV4Yyk6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiY2FuJ3QgZmluZCAlciBtb2R1bGUgaW4gJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWluX25hbWUsIHN5cy5wYXRoWzBdKSkKKyAgICAgICAgcmFpc2UKKworIyBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIC1tIHN3aXRjaCBhbmQgZGlyZWN0CisjIGV4ZWN1dGlvbiBvZiB6aXBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYW5kIGlzIGRlbGliZXJhdGVseSBrZXB0IHByaXZhdGUuCisjIFRoaXMgYXZvaWRzIGEgcmVwZWF0IG9mIHRoZSBzaXR1YXRpb24gd2hlcmUgcnVuX21vZHVsZSgpIG5vIGxvbmdlciBtZXQgdGhlCisjIG5lZWRzIG9mIG1haW5tb2R1bGUuYywgYnV0IGNvdWxkbid0IGJlIGNoYW5nZWQgYmVjYXVzZSBpdCB3YXMgcHVibGljCitkZWYgX3J1bl9tb2R1bGVfYXNfbWFpbihtb2RfbmFtZSwgYWx0ZXJfYXJndj1UcnVlKToKICAgICAiIiJSdW5zIHRoZSBkZXNpZ25hdGVkIG1vZHVsZSBpbiB0aGUgX19tYWluX18gbmFtZXNwYWNlCiAKLSAgICAgICBUaGVzZSBfXypfXyBtYWdpYyB2YXJpYWJsZXMgd2lsbCBiZSBvdmVyd3JpdHRlbjoKKyAgICAgICBOb3RlIHRoYXQgdGhlIGV4ZWN1dGVkIG1vZHVsZSB3aWxsIGhhdmUgZnVsbCBhY2Nlc3MgdG8gdGhlCisgICAgICAgX19tYWluX18gbmFtZXNwYWNlLiBJZiB0aGlzIGlzIG5vdCBkZXNpcmFibGUsIHRoZSBydW5fbW9kdWxlKCkKKyAgICAgICBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBydW4gdGhlIG1vZHVsZSBjb2RlIGluIGEgZnJlc2ggbmFtZXNwYWNlLgorCisgICAgICAgQXQgdGhlIHZlcnkgbGVhc3QsIHRoZXNlIHZhcmlhYmxlcyBpbiBfX21haW5fXyB3aWxsIGJlIG92ZXJ3cml0dGVuOgorICAgICAgICAgICBfX25hbWVfXwogICAgICAgICAgICBfX2ZpbGVfXwogICAgICAgICAgICBfX2xvYWRlcl9fCisgICAgICAgICAgIF9fcGFja2FnZV9fCiAgICAgIiIiCiAgICAgdHJ5OgotICAgICAgICBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICAgICAgaWYgYWx0ZXJfYXJndiBvciBtb2RfbmFtZSAhPSAiX19tYWluX18iOiAjIGkuZS4gLW0gc3dpdGNoCisgICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgICAgIGVsc2U6ICAgICAgICAgICMgaS5lLiBkaXJlY3Rvcnkgb3IgemlwZmlsZSBleGVjdXRpb24KKyAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCkKICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgotICAgICAgICAjIFRyeSB0byBwcm92aWRlIGEgZ29vZCBlcnJvciBtZXNzYWdlCi0gICAgICAgICMgZm9yIGRpcmVjdG9yaWVzLCB6aXAgZmlsZXMgYW5kIHRoZSAtbSBzd2l0Y2gKLSAgICAgICAgaWYgc2V0X2FyZ3YwOgotICAgICAgICAgICAgIyBGb3IgLW0gc3dpdGNoLCBqdXN0IGRpc3BseSB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICBpbmZvID0gc3RyKGV4YykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRm9yIGRpcmVjdG9yaWVzL3ppcGZpbGVzLCBsZXQgdGhlIHVzZXIKLSAgICAgICAgICAgICMga25vdyB3aGF0IHRoZSBjb2RlIHdhcyBsb29raW5nIGZvcgotICAgICAgICAgICAgaW5mbyA9ICJjYW4ndCBmaW5kICdfX21haW5fXy5weScgaW4gJXIiICUgc3lzLmFyZ3ZbMF0KLSAgICAgICAgbXNnID0gIiVzOiAlcyIgJSAoc3lzLmV4ZWN1dGFibGUsIGluZm8pCisgICAgICAgIG1zZyA9ICIlczogJXMiICUgKHN5cy5leGVjdXRhYmxlLCBzdHIoZXhjKSkKICAgICAgICAgc3lzLmV4aXQobXNnKQogICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgbWFpbl9nbG9iYWxzID0gc3lzLm1vZHVsZXNbIl9fbWFpbl9fIl0uX19kaWN0X18KLSAgICBpZiBzZXRfYXJndjA6CisgICAgaWYgYWx0ZXJfYXJndjoKICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBmbmFtZQogICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbWFpbl9nbG9iYWxzLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgIl9fbWFpbl9fIiwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCkBAIC0xMjcsNyArMTY3LDcgQEAKIAogICAgICAgIFJldHVybnMgdGhlIHJlc3VsdGluZyB0b3AgbGV2ZWwgbmFtZXNwYWNlIGRpY3Rpb25hcnkKICAgICAiIiIKLSAgICBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCiAgICAgaWYgcnVuX25hbWUgaXMgTm9uZToKICAgICAgICAgcnVuX25hbWUgPSBtb2RfbmFtZQogICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCkBAIC0xNDAsNiArMTgwLDk1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCiAKIAorIyBYWFggKG5jb2dobGFuKTogUGVyaGFwcyBleHBvc2UgdGhlIEMgQVBJIGZ1bmN0aW9uCisjIGFzIGltcC5nZXRfaW1wb3J0ZXIgaW5zdGVhZCBvZiByZWltcGxlbWVudGluZyBpdCBpbiBQeXRob24/CitkZWYgX2dldF9pbXBvcnRlcihwYXRoX25hbWUpOgorICAgICIiIlB5dGhvbiB2ZXJzaW9uIG9mIFB5SW1wb3J0X0dldEltcG9ydGVyIEMgQVBJIGZ1bmN0aW9uIiIiCisgICAgY2FjaGUgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0ZXIgPSBjYWNoZVtwYXRoX25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAjIE5vdCB5ZXQgY2FjaGVkLiBGbGFnIGFzIHVzaW5nIHRoZQorICAgICAgICAjIHN0YW5kYXJkIG1hY2hpbmVyeSB1bnRpbCB3ZSBmaW5pc2gKKyAgICAgICAgIyBjaGVja2luZyB0aGUgaG9va3MKKyAgICAgICAgY2FjaGVbcGF0aF9uYW1lXSA9IE5vbmUKKyAgICAgICAgZm9yIGhvb2sgaW4gc3lzLnBhdGhfaG9va3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0ZXIgPSBob29rKHBhdGhfbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBjaGVjayBsb29rcyBhIGJpdCBvZGQuIFRoZSB0cmljayBpcyB0aGF0CisgICAgICAgICAgICAjIE51bGxJbXBvcnRlciB0aHJvd3MgSW1wb3J0RXJyb3IgaWYgdGhlIHN1cHBsaWVkIHBhdGggaXMgYQorICAgICAgICAgICAgIyAqdmFsaWQqIGRpcmVjdG9yeSBlbnRyeSAoYW5kIGhlbmNlIGFibGUgdG8gYmUgaGFuZGxlZAorICAgICAgICAgICAgIyBieSB0aGUgc3RhbmRhcmQgaW1wb3J0IG1hY2hpbmVyeSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnRlciA9IGltcC5OdWxsSW1wb3J0ZXIocGF0aF9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGNhY2hlW3BhdGhfbmFtZV0gPSBpbXBvcnRlcgorICAgIHJldHVybiBpbXBvcnRlcgorCitkZWYgX2dldF9jb2RlX2Zyb21fZmlsZShmbmFtZSk6CisgICAgIyBDaGVjayBmb3IgYSBjb21waWxlZCBmaWxlIGZpcnN0CisgICAgd2l0aCBvcGVuKGZuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBjb2RlID0gcmVhZF9jb2RlKGYpCisgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAjIFRoYXQgZGlkbid0IHdvcmssIHNvIHRyeSBpdCBhcyBub3JtYWwgc291cmNlIGNvZGUKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiclUiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZi5yZWFkKCksIGZuYW1lLCAnZXhlYycpCisgICAgcmV0dXJuIGNvZGUKKworZGVmIHJ1bl9wYXRoKHBhdGhfbmFtZSwgaW5pdF9nbG9iYWxzPU5vbmUsIHJ1bl9uYW1lPU5vbmUpOgorICAgICIiIkV4ZWN1dGUgY29kZSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgZmlsZXN5c3RlbSBsb2NhdGlvbgorCisgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0aW5nIHRvcCBsZXZlbCBuYW1lc3BhY2UgZGljdGlvbmFyeQorCisgICAgICAgVGhlIGZpbGUgcGF0aCBtYXkgcmVmZXIgZGlyZWN0bHkgdG8gYSBQeXRob24gc2NyaXB0IChpLmUuCisgICAgICAgb25lIHRoYXQgY291bGQgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgd2l0aCBleGVjZmlsZSkgb3IgZWxzZQorICAgICAgIGl0IG1heSByZWZlciB0byBhIHppcGZpbGUgb3IgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSB0b3AKKyAgICAgICBsZXZlbCBfX21haW5fXy5weSBzY3JpcHQuCisgICAgIiIiCisgICAgaWYgcnVuX25hbWUgaXMgTm9uZToKKyAgICAgICAgcnVuX25hbWUgPSAiPHJ1bl9wYXRoPiIKKyAgICBpbXBvcnRlciA9IF9nZXRfaW1wb3J0ZXIocGF0aF9uYW1lKQorICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsIGltcC5OdWxsSW1wb3J0ZXIpOgorICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKKyAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCisgICAgICAgIGNvZGUgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHBhdGhfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwgcGF0aF9uYW1lKQorICAgIGVsc2U6CisgICAgICAgICMgSW1wb3J0ZXIgaXMgZGVmaW5lZCBmb3IgcGF0aCwgc28gYWRkIGl0IHRvCisgICAgICAgICMgdGhlIHN0YXJ0IG9mIHN5cy5wYXRoCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwYXRoX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSGVyZSdzIHdoZXJlIHRoaW5ncyBhcmUgYSBsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIHJ1bl9tb2R1bGUKKyAgICAgICAgICAgICMgY2FzZS4gVGhlcmUsIHdlIG9ubHkgaGFkIHRvIHJlcGxhY2UgdGhlIG1vZHVsZSBpbiBzeXMgd2hpbGUgdGhlCisgICAgICAgICAgICAjIGNvZGUgd2FzIHJ1bm5pbmcgYW5kIGRvaW5nIHNvIHdhcyBzb21ld2hhdCBvcHRpb25hbC4gSGVyZSwgd2UKKyAgICAgICAgICAgICMgaGF2ZSBubyBjaG9pY2UgYW5kIHdlIGhhdmUgdG8gcmVtb3ZlIGl0IGV2ZW4gd2hpbGUgd2UgcmVhZCB0aGUKKyAgICAgICAgICAgICMgY29kZS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgYSBfX2xvYWRlcl9fIGF0dHJpYnV0ZSBpbiB0aGUKKyAgICAgICAgICAgICMgZXhpc3RpbmcgX19tYWluX18gbW9kdWxlIG1heSBwcmV2ZW50IGxvY2F0aW9uIG9mIHRoZSBuZXcgbW9kdWxlLgorICAgICAgICAgICAgbWFpbl9uYW1lID0gIl9fbWFpbl9fIgorICAgICAgICAgICAgc2F2ZWRfbWFpbiA9IHN5cy5tb2R1bGVzW21haW5fbmFtZV0KKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttYWluX25hbWVdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttYWluX25hbWVdID0gc2F2ZWRfbWFpbgorICAgICAgICAgICAgcGtnX25hbWUgPSAiIgorICAgICAgICAgICAgd2l0aCBfVGVtcE1vZHVsZShydW5fbmFtZSkgYXMgdGVtcF9tb2R1bGUsIFwKKyAgICAgICAgICAgICAgICAgX01vZGlmaWVkQXJndjAocGF0aF9uYW1lKToKKyAgICAgICAgICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXworICAgICAgICAgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkuY29weSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHBhdGhfbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICMgUnVuIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGFzIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBhcmd1bWVudAogICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgpkaWZmIC0tZ2l0IGEvTGliL3NodXRpbC5weSBiL0xpYi9zaHV0aWwucHkKaW5kZXggNGMxODJhZS4uZjJkMmE5MCAxMDA2NDQKLS0tIGEvTGliL3NodXRpbC5weQorKysgYi9MaWIvc2h1dGlsLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIiVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNvcHlpbmcgZmlsZXMgYW5kIGRpcmVjdG9yeSB0cmVlcy4KKyIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBjb3B5aW5nIGFuZCBhcmNoaXZpbmcgZmlsZXMgYW5kIGRpcmVjdG9yeSB0cmVlcy4KIAogWFhYIFRoZSBmdW5jdGlvbnMgaGVyZSBkb24ndCBjb3B5IHRoZSByZXNvdXJjZSBmb3JrIG9yIG90aGVyIG1ldGFkYXRhIG9uIE1hYy4KIApAQCAtOSwxNCArOSwzNCBAQAogaW1wb3J0IHN0YXQKIGZyb20gb3MucGF0aCBpbXBvcnQgYWJzcGF0aAogaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGVycm5vCiAKLV9fYWxsX18gPSBbImNvcHlmaWxlb2JqIiwiY29weWZpbGUiLCJjb3B5bW9kZSIsImNvcHlzdGF0IiwiY29weSIsImNvcHkyIiwKLSAgICAgICAgICAgImNvcHl0cmVlIiwibW92ZSIsInJtdHJlZSIsIkVycm9yIl0KK3RyeToKKyAgICBmcm9tIHB3ZCBpbXBvcnQgZ2V0cHduYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRwd25hbSA9IE5vbmUKKwordHJ5OgorICAgIGZyb20gZ3JwIGltcG9ydCBnZXRncm5hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGdybmFtID0gTm9uZQorCitfX2FsbF9fID0gWyJjb3B5ZmlsZW9iaiIsICJjb3B5ZmlsZSIsICJjb3B5bW9kZSIsICJjb3B5c3RhdCIsICJjb3B5IiwgImNvcHkyIiwKKyAgICAgICAgICAgImNvcHl0cmVlIiwgIm1vdmUiLCAicm10cmVlIiwgIkVycm9yIiwgIlNwZWNpYWxGaWxlRXJyb3IiLAorICAgICAgICAgICAiRXhlY0Vycm9yIiwgIm1ha2VfYXJjaGl2ZSIsICJnZXRfYXJjaGl2ZV9mb3JtYXRzIiwKKyAgICAgICAgICAgInJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0IiwgInVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQiXQogCiBjbGFzcyBFcnJvcihFbnZpcm9ubWVudEVycm9yKToKICAgICBwYXNzCiAKK2NsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CisgICAgIiIiUmFpc2VkIHdoZW4gdHJ5aW5nIHRvIGRvIGEga2luZCBvZiBvcGVyYXRpb24gKGUuZy4gY29weWluZykgd2hpY2ggaXMKKyAgICBub3Qgc3VwcG9ydGVkIG9uIGEgc3BlY2lhbCBmaWxlIChlLmcuIGEgbmFtZWQgcGlwZSkiIiIKKworY2xhc3MgRXhlY0Vycm9yKEVudmlyb25tZW50RXJyb3IpOgorICAgICIiIlJhaXNlZCB3aGVuIGEgY29tbWFuZCBjb3VsZCBub3QgYmUgZXhlY3V0ZWQiIiIKKwogdHJ5OgogICAgIFdpbmRvd3NFcnJvcgogZXhjZXB0IE5hbWVFcnJvcjoKQEAgLTMyLDcgKzUyLDcgQEAKIAogZGVmIF9zYW1lZmlsZShzcmMsIGRzdCk6CiAgICAgIyBNYWNpbnRvc2gsIFVuaXguCi0gICAgaWYgaGFzYXR0cihvcy5wYXRoLCdzYW1lZmlsZScpOgorICAgIGlmIGhhc2F0dHIob3MucGF0aCwgJ3NhbWVmaWxlJyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNhbWVmaWxlKHNyYywgZHN0KQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKQEAgLTQ3LDYgKzY3LDE3IEBACiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKICAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKIAorICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdCA9IG9zLnN0YXQoZm4pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBGaWxlIG1vc3QgbGlrZWx5IGRvZXMgbm90IGV4aXN0CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFhYWCBXaGF0IGFib3V0IG90aGVyIHNwZWNpYWwgZmlsZXM/IChzb2NrZXRzLCBkZXZpY2VzLi4uKQorICAgICAgICAgICAgaWYgc3RhdC5TX0lTRklGTyhzdC5zdF9tb2RlKToKKyAgICAgICAgICAgICAgICByYWlzZSBTcGVjaWFsRmlsZUVycm9yKCJgJXNgIGlzIGEgbmFtZWQgcGlwZSIgJSBmbikKKwogICAgIHdpdGggb3BlbihzcmMsICdyYicpIGFzIGZzcmM6CiAgICAgICAgIHdpdGggb3Blbihkc3QsICd3YicpIGFzIGZkc3Q6CiAgICAgICAgICAgICBjb3B5ZmlsZW9iaihmc3JjLCBmZHN0KQpAQCAtNzAsNyArMTAxLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MuY2hmbGFncyhkc3QsIHN0LnN0X2ZsYWdzKQogICAgICAgICBleGNlcHQgT1NFcnJvciwgd2h5OgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZXJybm8sICdFT1BOT1RTVVBQJykgb3Igd2h5LmVycm5vICE9IGVycm5vLkVPUE5PVFNVUFA6CisgICAgICAgICAgICBpZiAobm90IGhhc2F0dHIoZXJybm8sICdFT1BOT1RTVVBQJykgb3IKKyAgICAgICAgICAgICAgICB3aHkuZXJybm8gIT0gZXJybm8uRU9QTk9UU1VQUCk6CiAgICAgICAgICAgICAgICAgcmFpc2UKIAogZGVmIGNvcHkoc3JjLCBkc3QpOgpAQCAtMTUzLDE0ICsxODUsMTQgQEAKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihzcmNuYW1lKToKICAgICAgICAgICAgICAgICBjb3B5dHJlZShzcmNuYW1lLCBkc3RuYW1lLCBzeW1saW5rcywgaWdub3JlKQogICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFdpbGwgcmFpc2UgYSBTcGVjaWFsRmlsZUVycm9yIGZvciB1bnN1cHBvcnRlZCBmaWxlIHR5cGVzCiAgICAgICAgICAgICAgICAgY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKLSAgICAgICAgICAgICMgWFhYIFdoYXQgYWJvdXQgZGV2aWNlcywgc29ja2V0cyBldGMuPwotICAgICAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSwgd2h5OgotICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgICAgICAjIGNhdGNoIHRoZSBFcnJvciBmcm9tIHRoZSByZWN1cnNpdmUgY29weXRyZWUgc28gdGhhdCB3ZSBjYW4KICAgICAgICAgIyBjb250aW51ZSB3aXRoIG90aGVyIGZpbGVzCiAgICAgICAgIGV4Y2VwdCBFcnJvciwgZXJyOgogICAgICAgICAgICAgZXJyb3JzLmV4dGVuZChlcnIuYXJnc1swXSkKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IsIHdoeToKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICB0cnk6CiAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQogICAgIGV4Y2VwdCBPU0Vycm9yLCB3aHk6CkBAIC0yNTIsNyArMjg0LDcgQEAKICAgICAgICAgb3MucmVuYW1lKHNyYywgcmVhbF9kc3QpCiAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3JjKToKLSAgICAgICAgICAgIGlmIGRlc3RpbnNyYyhzcmMsIGRzdCk6CisgICAgICAgICAgICBpZiBfZGVzdGluc3JjKHNyYywgZHN0KToKICAgICAgICAgICAgICAgICByYWlzZSBFcnJvciwgIkNhbm5vdCBtb3ZlIGEgZGlyZWN0b3J5ICclcycgaW50byBpdHNlbGYgJyVzJy4iICUgKHNyYywgZHN0KQogICAgICAgICAgICAgY29weXRyZWUoc3JjLCByZWFsX2RzdCwgc3ltbGlua3M9VHJ1ZSkKICAgICAgICAgICAgIHJtdHJlZShzcmMpCkBAIC0yNjAsNyArMjkyLDcgQEAKICAgICAgICAgICAgIGNvcHkyKHNyYywgcmVhbF9kc3QpCiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQogCi1kZWYgZGVzdGluc3JjKHNyYywgZHN0KToKK2RlZiBfZGVzdGluc3JjKHNyYywgZHN0KToKICAgICBzcmMgPSBhYnNwYXRoKHNyYykKICAgICBkc3QgPSBhYnNwYXRoKGRzdCkKICAgICBpZiBub3Qgc3JjLmVuZHN3aXRoKG9zLnBhdGguc2VwKToKQEAgLTI2OCwzICszMDAsMjQ3IEBACiAgICAgaWYgbm90IGRzdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CiAgICAgICAgIGRzdCArPSBvcy5wYXRoLnNlcAogICAgIHJldHVybiBkc3Quc3RhcnRzd2l0aChzcmMpCisKK2RlZiBfZ2V0X2dpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGEgZ2lkLCBnaXZlbiBhIGdyb3VwIG5hbWUuIiIiCisgICAgaWYgZ2V0Z3JuYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRncm5hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBfZ2V0X3VpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGFuIHVpZCwgZ2l2ZW4gYSB1c2VyIG5hbWUuIiIiCisgICAgaWYgZ2V0cHduYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRwd25hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lLCBsb2dnZXI9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgKHBvc3NpYmx5IGNvbXByZXNzZWQpIHRhciBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlcgorICAgICdiYXNlX2RpcicuCisKKyAgICAnY29tcHJlc3MnIG11c3QgYmUgImd6aXAiICh0aGUgZGVmYXVsdCksICJiemlwMiIsIG9yIE5vbmUuCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCisgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAorICAgIHdpbGwgYmUgdXNlZC4KKworICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9uYW1lJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKKyAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6Iiwgb3IgIi5iejIiKS4KKworICAgIFJldHVybnMgdGhlIG91dHB1dCBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICB0YXJfY29tcHJlc3Npb24gPSB7J2d6aXAnOiAnZ3onLCAnYnppcDInOiAnYnoyJywgTm9uZTogJyd9CisgICAgY29tcHJlc3NfZXh0ID0geydnemlwJzogJy5neicsICdiemlwMic6ICcuYnoyJ30KKworICAgICMgZmxhZ3MgZm9yIGNvbXByZXNzaW9uIHByb2dyYW0sIGVhY2ggZWxlbWVudCBvZiBsaXN0IHdpbGwgYmUgYW4gYXJndW1lbnQKKyAgICBpZiBjb21wcmVzcyBpcyBub3QgTm9uZSBhbmQgY29tcHJlc3Mgbm90IGluIGNvbXByZXNzX2V4dC5rZXlzKCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgKCJiYWQgdmFsdWUgZm9yICdjb21wcmVzcyc6IG11c3QgYmUgTm9uZSwgJ2d6aXAnIG9yICdiemlwMiciKQorCisgICAgYXJjaGl2ZV9uYW1lID0gYmFzZV9uYW1lICsgJy50YXInICsgY29tcHJlc3NfZXh0LmdldChjb21wcmVzcywgJycpCisgICAgYXJjaGl2ZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoYXJjaGl2ZV9uYW1lKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfZGlyKToKKyAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nICVzIiAlIGFyY2hpdmVfZGlyKQorICAgICAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGFyY2hpdmVfZGlyKQorCisKKyAgICAjIGNyZWF0aW5nIHRoZSB0YXJiYWxsCisgICAgaW1wb3J0IHRhcmZpbGUgICMgbGF0ZSBpbXBvcnQgc28gUHl0aG9uIGJ1aWxkIGl0c2VsZiBkb2Vzbid0IGJyZWFrCisKKyAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCisgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIsIGZpbHRlcj1fc2V0X3VpZF9naWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgcmV0dXJuIGFyY2hpdmVfbmFtZQorCitkZWYgX2NhbGxfZXh0ZXJuYWxfemlwKGJhc2VfZGlyLCB6aXBfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UsIGRyeV9ydW49RmFsc2UpOgorICAgICMgWFhYIHNlZSBpZiB3ZSB3YW50IHRvIGtlZXAgYW4gZXh0ZXJuYWwgY2FsbCBoZXJlCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgemlwb3B0aW9ucyA9ICItciIKKyAgICBlbHNlOgorICAgICAgICB6aXBvcHRpb25zID0gIi1ycSIKKyAgICBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorICAgIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgorICAgIHRyeToKKyAgICAgICAgc3Bhd24oWyJ6aXAiLCB6aXBvcHRpb25zLCB6aXBfZmlsZW5hbWUsIGJhc2VfZGlyXSwgZHJ5X3J1bj1kcnlfcnVuKQorICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3I6CisgICAgICAgICMgWFhYIHJlYWxseSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiAiY291bGRuJ3QgZmluZAorICAgICAgICAjIGV4dGVybmFsICd6aXAnIGNvbW1hbmQiIGFuZCAiemlwIGZhaWxlZCIuCisgICAgICAgIHJhaXNlIEV4ZWNFcnJvciwgXAorICAgICAgICAgICAgKCJ1bmFibGUgdG8gY3JlYXRlIHppcCBmaWxlICclcyc6ICIKKyAgICAgICAgICAgICJjb3VsZCBuZWl0aGVyIGltcG9ydCB0aGUgJ3ppcGZpbGUnIG1vZHVsZSBub3IgIgorICAgICAgICAgICAgImZpbmQgYSBzdGFuZGFsb25lIHppcCB1dGlsaXR5IikgJSB6aXBfZmlsZW5hbWUKKworZGVmIF9tYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCBiYXNlX2RpciwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsIGxvZ2dlcj1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSB6aXAgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIgJ2Jhc2VfZGlyJy4KKworICAgIFRoZSBvdXRwdXQgemlwIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9uYW1lJyArICIuemlwIi4gIFVzZXMgZWl0aGVyIHRoZQorICAgICJ6aXBmaWxlIiBQeXRob24gbW9kdWxlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBJbmZvWklQICJ6aXAiIHV0aWxpdHkKKyAgICAoaWYgaW5zdGFsbGVkIGFuZCBmb3VuZCBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggcGF0aCkuICBJZiBuZWl0aGVyIHRvb2wgaXMKKyAgICBhdmFpbGFibGUsIHJhaXNlcyBFeGVjRXJyb3IuICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgemlwCisgICAgZmlsZS4KKyAgICAiIiIKKyAgICB6aXBfZmlsZW5hbWUgPSBiYXNlX25hbWUgKyAiLnppcCIKKyAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShiYXNlX25hbWUpCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiLCBhcmNoaXZlX2RpcikKKyAgICAgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgICAgICBvcy5tYWtlZGlycyhhcmNoaXZlX2RpcikKKworICAgICMgSWYgemlwZmlsZSBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwgdHJ5IHNwYXduaW5nIGFuIGV4dGVybmFsICd6aXAnCisgICAgIyBjb21tYW5kLgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHppcGZpbGUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHppcGZpbGUgPSBOb25lCisKKyAgICBpZiB6aXBmaWxlIGlzIE5vbmU6CisgICAgICAgIF9jYWxsX2V4dGVybmFsX3ppcChiYXNlX2RpciwgemlwX2ZpbGVuYW1lLCB2ZXJib3NlLCBkcnlfcnVuKQorICAgIGVsc2U6CisgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjcmVhdGluZyAnJXMnIGFuZCBhZGRpbmcgJyVzJyB0byBpdCIsCisgICAgICAgICAgICAgICAgICAgICAgICB6aXBfZmlsZW5hbWUsIGJhc2VfZGlyKQorCisgICAgICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICAgICAgemlwID0gemlwZmlsZS5aaXBGaWxlKHppcF9maWxlbmFtZSwgInciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgICAgICAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGJhc2VfZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICB6aXAud3JpdGUocGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYWRkaW5nICclcyciLCBwYXRoKQorICAgICAgICAgICAgemlwLmNsb3NlKCkKKworICAgIHJldHVybiB6aXBfZmlsZW5hbWUKKworX0FSQ0hJVkVfRk9STUFUUyA9IHsKKyAgICAnZ3p0YXInOiAoX21ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnZ3ppcCcpXSwgImd6aXAnZWQgdGFyLWZpbGUiKSwKKyAgICAnYnp0YXInOiAoX21ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnYnppcDInKV0sICJiemlwMidlZCB0YXItZmlsZSIpLAorICAgICd0YXInOiAgIChfbWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsIE5vbmUpXSwgInVuY29tcHJlc3NlZCB0YXIgZmlsZSIpLAorICAgICd6aXAnOiAgIChfbWFrZV96aXBmaWxlLCBbXSwiWklQIGZpbGUiKQorICAgIH0KKworZGVmIGdldF9hcmNoaXZlX2Zvcm1hdHMoKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgYXJjaGl2aW5nIGFuZCB1bmFyY2hpdmluZy4KKworICAgIEVhY2ggZWxlbWVudCBvZiB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgaXMgYSB0dXBsZSAobmFtZSwgZGVzY3JpcHRpb24pCisgICAgIiIiCisgICAgZm9ybWF0cyA9IFsobmFtZSwgcmVnaXN0cnlbMl0pIGZvciBuYW1lLCByZWdpc3RyeSBpbgorICAgICAgICAgICAgICAgX0FSQ0hJVkVfRk9STUFUUy5pdGVtcygpXQorICAgIGZvcm1hdHMuc29ydCgpCisgICAgcmV0dXJuIGZvcm1hdHMKKworZGVmIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KG5hbWUsIGZ1bmN0aW9uLCBleHRyYV9hcmdzPU5vbmUsIGRlc2NyaXB0aW9uPScnKToKKyAgICAiIiJSZWdpc3RlcnMgYW4gYXJjaGl2ZSBmb3JtYXQuCisKKyAgICBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuIGZ1bmN0aW9uIGlzIHRoZSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUKKyAgICB1c2VkIHRvIGNyZWF0ZSBhcmNoaXZlcy4gSWYgcHJvdmlkZWQsIGV4dHJhX2FyZ3MgaXMgYSBzZXF1ZW5jZSBvZgorICAgIChuYW1lLCB2YWx1ZSkgdHVwbGVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBjYWxsYWJsZS4KKyAgICBkZXNjcmlwdGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gZGVzY3JpYmUgdGhlIGZvcm1hdCwgYW5kIHdpbGwgYmUgcmV0dXJuZWQKKyAgICBieSB0aGUgZ2V0X2FyY2hpdmVfZm9ybWF0cygpIGZ1bmN0aW9uLgorICAgICIiIgorICAgIGlmIGV4dHJhX2FyZ3MgaXMgTm9uZToKKyAgICAgICAgZXh0cmFfYXJncyA9IFtdCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZnVuY3Rpb24sIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdUaGUgJXMgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZScgJSBmdW5jdGlvbikKKyAgICBpZiBub3QgaXNpbnN0YW5jZShleHRyYV9hcmdzLCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHRyYV9hcmdzIG5lZWRzIHRvIGJlIGEgc2VxdWVuY2UnKQorICAgIGZvciBlbGVtZW50IGluIGV4dHJhX2FyZ3M6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW1lbnQsICh0dXBsZSwgbGlzdCkpIG9yIGxlbihlbGVtZW50KSAhPTIgOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHRyYV9hcmdzIGVsZW1lbnRzIGFyZSA6IChhcmdfbmFtZSwgdmFsdWUpJykKKworICAgIF9BUkNISVZFX0ZPUk1BVFNbbmFtZV0gPSAoZnVuY3Rpb24sIGV4dHJhX2FyZ3MsIGRlc2NyaXB0aW9uKQorCitkZWYgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lKToKKyAgICBkZWwgX0FSQ0hJVkVfRk9STUFUU1tuYW1lXQorCitkZWYgbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLCB2ZXJib3NlPTAsCisgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSwgbG9nZ2VyPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4KKworICAgICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYworICAgIGV4dGVuc2lvbjsgJ2Zvcm1hdCcgaXMgdGhlIGFyY2hpdmUgZm9ybWF0OiBvbmUgb2YgInppcCIsICJ0YXIiLCAiYnp0YXIiCisgICAgb3IgImd6dGFyIi4KKworICAgICdyb290X2RpcicgaXMgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKKyAgICBhcmNoaXZlOyBpZS4gd2UgdHlwaWNhbGx5IGNoZGlyIGludG8gJ3Jvb3RfZGlyJyBiZWZvcmUgY3JlYXRpbmcgdGhlCisgICAgYXJjaGl2ZS4gICdiYXNlX2RpcicgaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB3ZSBzdGFydCBhcmNoaXZpbmcgZnJvbTsKKyAgICBpZS4gJ2Jhc2VfZGlyJyB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKKyAgICBkaXJlY3RvcmllcyBpbiB0aGUgYXJjaGl2ZS4gICdyb290X2RpcicgYW5kICdiYXNlX2RpcicgYm90aCBkZWZhdWx0CisgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGFyY2hpdmUuIEJ5IGRlZmF1bHQsCisgICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCisgICAgIiIiCisgICAgc2F2ZV9jd2QgPSBvcy5nZXRjd2QoKQorICAgIGlmIHJvb3RfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoImNoYW5naW5nIGludG8gJyVzJyIsIHJvb3RfZGlyKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoYmFzZV9uYW1lKQorICAgICAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgICAgIG9zLmNoZGlyKHJvb3RfZGlyKQorCisgICAgaWYgYmFzZV9kaXIgaXMgTm9uZToKKyAgICAgICAgYmFzZV9kaXIgPSBvcy5jdXJkaXIKKworICAgIGt3YXJncyA9IHsnZHJ5X3J1bic6IGRyeV9ydW4sICdsb2dnZXInOiBsb2dnZXJ9CisKKyAgICB0cnk6CisgICAgICAgIGZvcm1hdF9pbmZvID0gX0FSQ0hJVkVfRk9STUFUU1tmb3JtYXRdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAidW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIiAlIGZvcm1hdAorCisgICAgZnVuYyA9IGZvcm1hdF9pbmZvWzBdCisgICAgZm9yIGFyZywgdmFsIGluIGZvcm1hdF9pbmZvWzFdOgorICAgICAgICBrd2FyZ3NbYXJnXSA9IHZhbAorCisgICAgaWYgZm9ybWF0ICE9ICd6aXAnOgorICAgICAgICBrd2FyZ3NbJ293bmVyJ10gPSBvd25lcgorICAgICAgICBrd2FyZ3NbJ2dyb3VwJ10gPSBncm91cAorCisgICAgdHJ5OgorICAgICAgICBmaWxlbmFtZSA9IGZ1bmMoYmFzZV9uYW1lLCBiYXNlX2RpciwgKiprd2FyZ3MpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgcm9vdF9kaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJjaGFuZ2luZyBiYWNrIHRvICclcyciLCBzYXZlX2N3ZCkKKyAgICAgICAgICAgIG9zLmNoZGlyKHNhdmVfY3dkKQorCisgICAgcmV0dXJuIGZpbGVuYW1lCmRpZmYgLS1naXQgYS9MaWIvc2l0ZS5weSBiL0xpYi9zaXRlLnB5CmluZGV4IDY2YzU2YzIuLjkwY2YzMzEgMTAwNjQ0Ci0tLSBhL0xpYi9zaXRlLnB5CisrKyBiL0xpYi9zaXRlLnB5CkBAIC02MSwxOSArNjEsMjcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IF9fYnVpbHRpbl9fCitpbXBvcnQgdHJhY2ViYWNrCiAKICMgUHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXM7IGFkZCBhZGRpdGlvbmFsIHByZWZpeGVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCiBQUkVGSVhFUyA9IFtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXhdCiAjIEVuYWJsZSBwZXIgdXNlciBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeQogIyBzZXQgaXQgdG8gRmFsc2UgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZSBvciBUcnVlIHRvIGZvcmNlIHRoZSBmZWF0dXJlCiBFTkFCTEVfVVNFUl9TSVRFID0gTm9uZQorCiAjIGZvciBkaXN0dXRpbHMuY29tbWFuZHMuaW5zdGFsbAorIyBUaGVzZSB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBnZXR1c2VyYmFzZSgpIGFuZCBnZXR1c2Vyc2l0ZXBhY2thZ2VzKCkKKyMgZnVuY3Rpb25zLCB0aHJvdWdoIHRoZSBtYWluKCkgZnVuY3Rpb24gd2hlbiBQeXRob24gc3RhcnRzLgogVVNFUl9TSVRFID0gTm9uZQogVVNFUl9CQVNFID0gTm9uZQogCiAKIGRlZiBtYWtlcGF0aCgqcGF0aHMpOgotICAgIGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oKnBhdGhzKSkKKyAgICBkaXIgPSBvcy5wYXRoLmpvaW4oKnBhdGhzKQorICAgIHRyeToKKyAgICAgICAgZGlyID0gb3MucGF0aC5hYnNwYXRoKGRpcikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcwogICAgIHJldHVybiBkaXIsIG9zLnBhdGgubm9ybWNhc2UoZGlyKQogCiAKQEAgLTg0LDggKzkyLDggQEAKICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBkb24ndCBtZXNzIHdpdGggYSBQRVAgMzAyLXN1cHBsaWVkIF9fZmlsZV9fCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG0uX19maWxlX18gPSBvcy5wYXRoLmFic3BhdGgobS5fX2ZpbGVfXykKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCiAKIAogZGVmIHJlbW92ZWR1cHBhdGhzKCk6CkBAIC0xMTEsMTEgKzExOSwxMSBAQAogZGVmIGFkZGJ1aWxkZGlyKCk6CiAgICAgIiIiQXBwZW5kIC4vYnVpbGQvbGliLjxwbGF0Zm9ybT4gaW4gY2FzZSB3ZSdyZSBydW5uaW5nIGluIHRoZSBidWlsZCBkaXIKICAgICAoZXNwZWNpYWxseSBmb3IgR3VpZG8gOi0pIiIiCi0gICAgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCisgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybQogICAgIHMgPSAiYnVpbGQvbGliLiVzLSUuM3MiICUgKGdldF9wbGF0Zm9ybSgpLCBzeXMudmVyc2lvbikKICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKToKICAgICAgICAgcyArPSAnLXB5ZGVidWcnCi0gICAgcyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLnBhdGhbLTFdKSwgcykKKyAgICBzID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMucGF0aC5wb3AoKSksIHMpCiAgICAgc3lzLnBhdGguYXBwZW5kKHMpCiAKIApAQCAtMTQ4LDE3ICsxNTYsMjYgQEAKICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgd2l0aCBmOgotICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBmb3IgbiwgbGluZSBpbiBlbnVtZXJhdGUoZik6CiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCgiaW1wb3J0ICIsICJpbXBvcnRcdCIpKToKLSAgICAgICAgICAgICAgICBleGVjIGxpbmUKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKLSAgICAgICAgICAgIGRpciwgZGlyY2FzZSA9IG1ha2VwYXRoKHNpdGVkaXIsIGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgZGlyY2FzZSBpbiBrbm93bl9wYXRocyBhbmQgb3MucGF0aC5leGlzdHMoZGlyKToKLSAgICAgICAgICAgICAgICBzeXMucGF0aC5hcHBlbmQoZGlyKQotICAgICAgICAgICAgICAgIGtub3duX3BhdGhzLmFkZChkaXJjYXNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoImltcG9ydCAiLCAiaW1wb3J0XHQiKSk6CisgICAgICAgICAgICAgICAgICAgIGV4ZWMgbGluZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgZGlyLCBkaXJjYXNlID0gbWFrZXBhdGgoc2l0ZWRpciwgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGlyY2FzZSBpbiBrbm93bl9wYXRocyBhbmQgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGguYXBwZW5kKGRpcikKKyAgICAgICAgICAgICAgICAgICAga25vd25fcGF0aHMuYWRkKGRpcmNhc2UpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJFcnJvciBwcm9jZXNzaW5nIGxpbmUgezpkfSBvZiB7fTpcbiIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBuKzEsIGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGZvciByZWNvcmQgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVjb3JkLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgJyAgJytsaW5lCisgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiXG5SZW1haW5kZXIgb2YgZmlsZSBpZ25vcmVkIgorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgaWYgcmVzZXQ6CiAgICAgICAgIGtub3duX3BhdGhzID0gTm9uZQogICAgIHJldHVybiBrbm93bl9wYXRocwpAQCAtMjEyLDg0ICsyMjksMTAzIEBACiAKICAgICByZXR1cm4gVHJ1ZQogCitkZWYgZ2V0dXNlcmJhc2UoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBgdXNlciBiYXNlYCBkaXJlY3RvcnkgcGF0aC4KKworICAgIFRoZSBgdXNlciBiYXNlYCBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gc3RvcmUgZGF0YS4gSWYgdGhlIGdsb2JhbAorICAgIHZhcmlhYmxlIGBgVVNFUl9CQVNFYGAgaXMgbm90IGluaXRpYWxpemVkIHlldCwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gc2V0CisgICAgaXQuCisgICAgIiIiCisgICAgZ2xvYmFsIFVTRVJfQkFTRQorICAgIGlmIFVTRVJfQkFTRSBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIFVTRVJfQkFTRQorICAgIGZyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfY29uZmlnX3ZhcgorICAgIFVTRVJfQkFTRSA9IGdldF9jb25maWdfdmFyKCd1c2VyYmFzZScpCisgICAgcmV0dXJuIFVTRVJfQkFTRQorCitkZWYgZ2V0dXNlcnNpdGVwYWNrYWdlcygpOgorICAgICIiIlJldHVybnMgdGhlIHVzZXItc3BlY2lmaWMgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkgcGF0aC4KKworICAgIElmIHRoZSBnbG9iYWwgdmFyaWFibGUgYGBVU0VSX1NJVEVgYCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGlzCisgICAgZnVuY3Rpb24gd2lsbCBhbHNvIHNldCBpdC4KKyAgICAiIiIKKyAgICBnbG9iYWwgVVNFUl9TSVRFCisgICAgdXNlcl9iYXNlID0gZ2V0dXNlcmJhc2UoKSAjIHRoaXMgd2lsbCBhbHNvIHNldCBVU0VSX0JBU0UKKworICAgIGlmIFVTRVJfU0lURSBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIFVTRVJfU0lURQorCisgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wYXRoCisgICAgaW1wb3J0IG9zCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIGZyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfY29uZmlnX3ZhcgorICAgICAgICBpZiBnZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICBVU0VSX1NJVEUgPSBnZXRfcGF0aCgncHVyZWxpYicsICdvc3hfZnJhbWV3b3JrX3VzZXInKQorICAgICAgICAgICAgcmV0dXJuIFVTRVJfU0lURQorCisgICAgVVNFUl9TSVRFID0gZ2V0X3BhdGgoJ3B1cmVsaWInLCAnJXNfdXNlcicgJSBvcy5uYW1lKQorICAgIHJldHVybiBVU0VSX1NJVEUKIAogZGVmIGFkZHVzZXJzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpOgogICAgICIiIkFkZCBhIHBlciB1c2VyIHNpdGUtcGFja2FnZSB0byBzeXMucGF0aAogCiAgICAgRWFjaCB1c2VyIGhhcyBpdHMgb3duIHB5dGhvbiBkaXJlY3Rvcnkgd2l0aCBzaXRlLXBhY2thZ2VzIGluIHRoZQogICAgIGhvbWUgZGlyZWN0b3J5LgotCi0gICAgVVNFUl9CQVNFIGlzIHRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIFB5dGhvbiB2ZXJzaW9ucwotCi0gICAgVVNFUl9TSVRFIGlzIHRoZSB1c2VyIHNwZWNpZmljIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5Ci0KLSAgICBVU0VSX1NJVEUvLi4gY2FuIGJlIHVzZWQgZm9yIGRhdGEuCiAgICAgIiIiCi0gICAgZ2xvYmFsIFVTRVJfQkFTRSwgVVNFUl9TSVRFLCBFTkFCTEVfVVNFUl9TSVRFCi0gICAgZW52X2Jhc2UgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OVVNFUkJBU0UiLCBOb25lKQorICAgICMgZ2V0IHRoZSBwZXIgdXNlciBzaXRlLXBhY2thZ2UgcGF0aAorICAgICMgdGhpcyBjYWxsIHdpbGwgYWxzbyBtYWtlIHN1cmUgVVNFUl9CQVNFIGFuZCBVU0VSX1NJVEUgYXJlIHNldAorICAgIHVzZXJfc2l0ZSA9IGdldHVzZXJzaXRlcGFja2FnZXMoKQogCi0gICAgZGVmIGpvaW51c2VyKCphcmdzKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oKmFyZ3MpKQotCi0gICAgI2lmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAjICAgICMgRG9uJ3Qga25vdyB3aGF0IHRvIHB1dCBoZXJlCi0gICAgIyAgICBVU0VSX0JBU0UgPSAnJwotICAgICMgICAgVVNFUl9TSVRFID0gJycKLSAgICBpZiBvcy5uYW1lID09ICJudCI6Ci0gICAgICAgIGJhc2UgPSBvcy5lbnZpcm9uLmdldCgiQVBQREFUQSIpIG9yICJ+IgotICAgICAgICBVU0VSX0JBU0UgPSBlbnZfYmFzZSBpZiBlbnZfYmFzZSBlbHNlIGpvaW51c2VyKGJhc2UsICJQeXRob24iKQotICAgICAgICBVU0VSX1NJVEUgPSBvcy5wYXRoLmpvaW4oVVNFUl9CQVNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiIgKyBzeXMudmVyc2lvblswXSArIHN5cy52ZXJzaW9uWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKQotICAgIGVsc2U6Ci0gICAgICAgIFVTRVJfQkFTRSA9IGVudl9iYXNlIGlmIGVudl9iYXNlIGVsc2Ugam9pbnVzZXIoIn4iLCAiLmxvY2FsIikKLSAgICAgICAgVVNFUl9TSVRFID0gb3MucGF0aC5qb2luKFVTRVJfQkFTRSwgImxpYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikKLQotICAgIGlmIEVOQUJMRV9VU0VSX1NJVEUgYW5kIG9zLnBhdGguaXNkaXIoVVNFUl9TSVRFKToKLSAgICAgICAgYWRkc2l0ZWRpcihVU0VSX1NJVEUsIGtub3duX3BhdGhzKQorICAgIGlmIEVOQUJMRV9VU0VSX1NJVEUgYW5kIG9zLnBhdGguaXNkaXIodXNlcl9zaXRlKToKKyAgICAgICAgYWRkc2l0ZWRpcih1c2VyX3NpdGUsIGtub3duX3BhdGhzKQogICAgIHJldHVybiBrbm93bl9wYXRocwogCitkZWYgZ2V0c2l0ZXBhY2thZ2VzKCk6CisgICAgIiIiUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBhbGwgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMKKyAgICAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKS4KIAotZGVmIGFkZHNpdGVwYWNrYWdlcyhrbm93bl9wYXRocyk6Ci0gICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikgdG8gc3lzLnBhdGgiIiIKLSAgICBzaXRlZGlycyA9IFtdCi0gICAgc2VlbiA9IFtdCisgICAgRm9yIGVhY2ggZGlyZWN0b3J5IHByZXNlbnQgaW4gdGhlIGdsb2JhbCBgYFBSRUZJWEVTYGAsIHRoaXMgZnVuY3Rpb24KKyAgICB3aWxsIGZpbmQgaXRzIGBzaXRlLXBhY2thZ2VzYCBzdWJkaXJlY3RvcnkgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0KKyAgICBlbnZpcm9ubWVudCwgYW5kIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBmdWxsIHBhdGhzLgorICAgICIiIgorICAgIHNpdGVwYWNrYWdlcyA9IFtdCisgICAgc2VlbiA9IHNldCgpCiAKICAgICBmb3IgcHJlZml4IGluIFBSRUZJWEVTOgogICAgICAgICBpZiBub3QgcHJlZml4IG9yIHByZWZpeCBpbiBzZWVuOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgc2Vlbi5hcHBlbmQocHJlZml4KQorICAgICAgICBzZWVuLmFkZChwcmVmaXgpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAorICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKHByZWZpeCkKLSAgICAgICAgICAgIHNpdGVkaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKLQorICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CiAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCi0gICAgICAgICAgICAjIGxvY2F0aW9ucy4gQ3VycmVudGx5IG9ubHkgcGVyLXVzZXIsIGJ1dCAvTGlicmFyeSBhbmQKLSAgICAgICAgICAgICMgL05ldHdvcmsvTGlicmFyeSBjb3VsZCBiZSBhZGRlZCB0b28KLSAgICAgICAgICAgIGlmICdQeXRob24uZnJhbWV3b3JrJyBpbiBwcmVmaXg6Ci0gICAgICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIn4iLCAiTGlicmFyeSIsICJQeXRob24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uWzozXSwgInNpdGUtcGFja2FnZXMiKSkpCisgICAgICAgICAgICAjIGxvY2F0aW9ucy4KKyAgICAgICAgICAgIGZyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfY29uZmlnX3ZhcgorICAgICAgICAgICAgZnJhbWV3b3JrID0gZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpCisgICAgICAgICAgICBpZiBmcmFtZXdvcmsgYW5kICIvJXMuZnJhbWV3b3JrLyIlKGZyYW1ld29yaywpIGluIHByZWZpeDoKKyAgICAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKCIvTGlicmFyeSIsIGZyYW1ld29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMudmVyc2lvbls6M10sICJzaXRlLXBhY2thZ2VzIikpCisgICAgcmV0dXJuIHNpdGVwYWNrYWdlcwogCi0gICAgZm9yIHNpdGVkaXIgaW4gc2l0ZWRpcnM6CitkZWYgYWRkc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKToKKyAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgorICAgIGZvciBzaXRlZGlyIGluIGdldHNpdGVwYWNrYWdlcygpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgogICAgICAgICAgICAgYWRkc2l0ZWRpcihzaXRlZGlyLCBrbm93bl9wYXRocykKIAogICAgIHJldHVybiBrbm93bl9wYXRocwogCi0KIGRlZiBzZXRCRUdJTkxJQlBBVEgoKToKICAgICAiIiJUaGUgT1MvMiBFTVggcG9ydCBoYXMgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBkbyBkb3VibGUgZHV0eQogICAgIGFzIERMTHMgKGFuZCBtdXN0IHVzZSB0aGUgLkRMTCBmaWxlIGV4dGVuc2lvbikgZm9yIG90aGVyIGV4dGVuc2lvbnMuCkBAIC0zMDgsOCArMzQ0LDEwIEBACiAKIAogZGVmIHNldHF1aXQoKToKLSAgICAiIiJEZWZpbmUgbmV3IGJ1aWx0LWlucyAncXVpdCcgYW5kICdleGl0Jy4KLSAgICBUaGVzZSBhcmUgc2ltcGx5IHN0cmluZ3MgdGhhdCBkaXNwbGF5IGEgaGludCBvbiBob3cgdG8gZXhpdC4KKyAgICAiIiJEZWZpbmUgbmV3IGJ1aWx0aW5zICdxdWl0JyBhbmQgJ2V4aXQnLgorCisgICAgVGhlc2UgYXJlIG9iamVjdHMgd2hpY2ggbWFrZSB0aGUgaW50ZXJwcmV0ZXIgZXhpdCB3aGVuIGNhbGxlZC4KKyAgICBUaGUgcmVwciBvZiBlYWNoIG9iamVjdCBjb250YWlucyBhIGhpbnQgYXQgaG93IGl0IHdvcmtzLgogCiAgICAgIiIiCiAgICAgaWYgb3Muc2VwID09ICc6JzoKQEAgLTQxNiw3ICs0NTQsNyBAQAogCiAKIGNsYXNzIF9IZWxwZXIob2JqZWN0KToKLSAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0LWluICdoZWxwJy4KKyAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgogICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwICh3aXRoIGEgdHdpc3QpLgogCiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvc210cGQucHkgYi9MaWIvc210cGQucHkKaW5kZXggOTRiZDhlNi4uZTA1NDRlNCAxMDA3NTUKLS0tIGEvTGliL3NtdHBkLnB5CisrKyBiL0xpYi9zbXRwZC5weQpAQCAtMzUsNyArMzUsNiBAQAogYW5kIGlmIHJlbW90ZXBvcnQgaXMgbm90IGdpdmVuLCB0aGVuIDI1IGlzIHVzZWQuCiAiIiIKIAotDAogIyBPdmVydmlldzoKICMKICMgVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIG1pbmltYWwgU01UUCBwcm90b2NvbCBhcyBkZWZpbmVkIGluIFJGQyA4MjEuICBJdApAQCAtOTYsNyArOTUsNiBAQAogQ09NTUFTUEFDRSA9ICcsICcKIAogCi0MCiBkZWYgdXNhZ2UoY29kZSwgbXNnPScnKToKICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCBfX2RvY19fICUgZ2xvYmFscygpCiAgICAgaWYgbXNnOgpAQCAtMTA0LDcgKzEwMiw2IEBACiAgICAgc3lzLmV4aXQoY29kZSkKIAogCi0MCiBjbGFzcyBTTVRQQ2hhbm5lbChhc3luY2hhdC5hc3luY19jaGF0KToKICAgICBDT01NQU5EID0gMAogICAgIERBVEEgPSAxCkBAIC0xMjMsMTEgKzEyMCwxMSBAQAogICAgICAgICBzZWxmLl9fZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fX3BlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwogICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gIT0gZXJybm8uRU5PVENPTk46CisgICAgICAgICAgICBpZiBlcnJbMF0gIT0gZXJybm8uRU5PVENPTk46CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBwcmludCA+PiBERUJVR1NUUkVBTSwgJ1BlZXI6JywgcmVwcihzZWxmLl9fcGVlcikKQEAgLTI3Niw3ICsyNzMsNiBAQAogICAgICAgICBzZWxmLnB1c2goJzM1NCBFbmQgZGF0YSB3aXRoIDxDUj48TEY+LjxDUj48TEY+JykKIAogCi0MCiBjbGFzcyBTTVRQU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKQEAgLTI5OSwyMiArMjk1LDExIEBACiAgICAgICAgICAgICAgICAgbG9jYWxhZGRyLCByZW1vdGVhZGRyKQogCiAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAjIHNvbWV0aW1lcyBhY2NlcHQoKSBtaWdodCByZXR1cm4gTm9uZQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgIyBFQ09OTkFCT1JURUQgbWlnaHQgYmUgdGhyb3duCi0gICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FQ09OTkFCT1JURUQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBzb21ldGltZXMgYWRkciA9PSBOb25lIGluc3RlYWQgb2YgKGlwLCBwb3J0KQotICAgICAgICAgICAgaWYgYWRkciA9PSBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBwcmludCA+PiBERUJVR1NUUkVBTSwgJ0luY29taW5nIGNvbm5lY3Rpb24gZnJvbSAlcycgJSByZXByKGFkZHIpCi0gICAgICAgIGNoYW5uZWwgPSBTTVRQQ2hhbm5lbChzZWxmLCBjb25uLCBhZGRyKQorICAgICAgICBwYWlyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICBpZiBwYWlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHBhaXIKKyAgICAgICAgICAgIHByaW50ID4+IERFQlVHU1RSRUFNLCAnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkcikKKyAgICAgICAgICAgIGNoYW5uZWwgPSBTTVRQQ2hhbm5lbChzZWxmLCBjb25uLCBhZGRyKQogCiAgICAgIyBBUEkgZm9yICJkb2luZyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIG1lc3NhZ2UiCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CkBAIC0zNDIsNyArMzI3LDYgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKLQwKIGNsYXNzIERlYnVnZ2luZ1NlcnZlcihTTVRQU2VydmVyKToKICAgICAjIERvIHNvbWV0aGluZyB3aXRoIHRoZSBnYXRoZXJlZCBtZXNzYWdlCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CkBAIC0zNTgsNyArMzQyLDYgQEAKICAgICAgICAgcHJpbnQgJy0tLS0tLS0tLS0tLSBFTkQgTUVTU0FHRSAtLS0tLS0tLS0tLS0nCiAKIAotDAogY2xhc3MgUHVyZVByb3h5KFNNVFBTZXJ2ZXIpOgogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICBsaW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKQEAgLTM5OSw3ICszODIsNiBAQAogICAgICAgICByZXR1cm4gcmVmdXNlZAogCiAKLQwKIGNsYXNzIE1haWxtYW5Qcm94eShQdXJlUHJveHkpOgogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KQEAgLTQ3OCwxMyArNDYwLDExIEBACiAgICAgICAgICAgICAgICAgbXNnLkVucXVldWUobWxpc3QsIHRvcmVxdWVzdD0xKQogCiAKLQwKIGNsYXNzIE9wdGlvbnM6CiAgICAgc2V0dWlkID0gMQogICAgIGNsYXNzbmFtZSA9ICdQdXJlUHJveHknCiAKIAotDAogZGVmIHBhcnNlYXJncygpOgogICAgIGdsb2JhbCBERUJVR1NUUkVBTQogICAgIHRyeToKQEAgLTU0MSw3ICs1MjEsNiBAQAogICAgIHJldHVybiBvcHRpb25zCiAKIAotDAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBvcHRpb25zID0gcGFyc2VhcmdzKCkKICAgICAjIEJlY29tZSBub2JvZHkKZGlmZiAtLWdpdCBhL0xpYi9zbXRwbGliLnB5IGIvTGliL3NtdHBsaWIucHkKaW5kZXggNDFhM2M5Ny4uZTdkMzc4NiAxMDA3NTUKLS0tIGEvTGliL3NtdHBsaWIucHkKKysrIGIvTGliL3NtdHBsaWIucHkKQEAgLTQ5LDE3ICs0OSwxOCBAQAogZnJvbSBlbWFpbC5iYXNlNjRtaW1lIGltcG9ydCBlbmNvZGUgYXMgZW5jb2RlX2Jhc2U2NAogZnJvbSBzeXMgaW1wb3J0IHN0ZGVycgogCi1fX2FsbF9fID0gWyJTTVRQRXhjZXB0aW9uIiwiU01UUFNlcnZlckRpc2Nvbm5lY3RlZCIsIlNNVFBSZXNwb25zZUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICJTTVRQU2VuZGVyUmVmdXNlZCIsIlNNVFBSZWNpcGllbnRzUmVmdXNlZCIsIlNNVFBEYXRhRXJyb3IiLAotICAgICAgICAgICAiU01UUENvbm5lY3RFcnJvciIsIlNNVFBIZWxvRXJyb3IiLCJTTVRQQXV0aGVudGljYXRpb25FcnJvciIsCi0gICAgICAgICAgICJxdW90ZWFkZHIiLCJxdW90ZWRhdGEiLCJTTVRQIl0KK19fYWxsX18gPSBbIlNNVFBFeGNlcHRpb24iLCAiU01UUFNlcnZlckRpc2Nvbm5lY3RlZCIsICJTTVRQUmVzcG9uc2VFeGNlcHRpb24iLAorICAgICAgICAgICAiU01UUFNlbmRlclJlZnVzZWQiLCAiU01UUFJlY2lwaWVudHNSZWZ1c2VkIiwgIlNNVFBEYXRhRXJyb3IiLAorICAgICAgICAgICAiU01UUENvbm5lY3RFcnJvciIsICJTTVRQSGVsb0Vycm9yIiwgIlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIiwKKyAgICAgICAgICAgInF1b3RlYWRkciIsICJxdW90ZWRhdGEiLCAiU01UUCJdCiAKIFNNVFBfUE9SVCA9IDI1CiBTTVRQX1NTTF9QT1JUID0gNDY1Ci1DUkxGPSJcclxuIgorQ1JMRiA9ICJcclxuIgogCiBPTERTVFlMRV9BVVRIID0gcmUuY29tcGlsZShyImF1dGg9KC4qKSIsIHJlLkkpCiAKKwogIyBFeGNlcHRpb24gY2xhc3NlcyB1c2VkIGJ5IHRoaXMgbW9kdWxlLgogY2xhc3MgU01UUEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKQEAgLTEwOSw3ICsxMTAsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY2lwaWVudHMpOgogICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSByZWNpcGllbnRzCi0gICAgICAgIHNlbGYuYXJncyA9ICggcmVjaXBpZW50cywpCisgICAgICAgIHNlbGYuYXJncyA9IChyZWNpcGllbnRzLCkKIAogCiBjbGFzcyBTTVRQRGF0YUVycm9yKFNNVFBSZXNwb25zZUV4Y2VwdGlvbik6CkBAIC0xMjgsNiArMTI5LDcgQEAKICAgICBjb21iaW5hdGlvbiBwcm92aWRlZC4KICAgICAiIiIKIAorCiBkZWYgcXVvdGVhZGRyKGFkZHIpOgogICAgICIiIlF1b3RlIGEgc3Vic2V0IG9mIHRoZSBlbWFpbCBhZGRyZXNzZXMgZGVmaW5lZCBieSBSRkMgODIxLgogCkBAIC0xMzgsNyArMTQwLDcgQEAKICAgICAgICAgbSA9IGVtYWlsLnV0aWxzLnBhcnNlYWRkcihhZGRyKVsxXQogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgcGFzcwotICAgIGlmIG0gPT0gKE5vbmUsIE5vbmUpOiAjIEluZGljYXRlcyBwYXJzZSBmYWlsdXJlIG9yIEF0dHJpYnV0ZUVycm9yCisgICAgaWYgbSA9PSAoTm9uZSwgTm9uZSk6ICAjIEluZGljYXRlcyBwYXJzZSBmYWlsdXJlIG9yIEF0dHJpYnV0ZUVycm9yCiAgICAgICAgICMgc29tZXRoaW5nIHdlaXJkIGhlcmUuLiBwdW50IC1kZG0KICAgICAgICAgcmV0dXJuICI8JXM+IiAlIGFkZHIKICAgICBlbGlmIG0gaXMgTm9uZToKQEAgLTE3NSw3ICsxNzcsOCBAQAogICAgICAgICAgICAgY2hyID0gTm9uZQogICAgICAgICAgICAgd2hpbGUgY2hyICE9ICJcbiI6CiAgICAgICAgICAgICAgICAgY2hyID0gc2VsZi5zc2xvYmoucmVhZCgxKQotICAgICAgICAgICAgICAgIGlmIG5vdCBjaHI6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGNocjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzdHIgKz0gY2hyCiAgICAgICAgICAgICByZXR1cm4gc3RyCiAKQEAgLTI2OSwxMCArMjcyLDExIEBACiAgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsIHBvcnQsIGhvc3QsIHRpbWVvdXQpOgogICAgICAgICAjIFRoaXMgbWFrZXMgaXQgc2ltcGxlciBmb3IgU01UUF9TU0wgdG8gdXNlIHRoZSBTTVRQIGNvbm5lY3QgY29kZQogICAgICAgICAjIGFuZCBqdXN0IGFsdGVyIHRoZSBzb2NrZXQgY29ubmVjdGlvbiBiaXQuCi0gICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpCiAgICAgICAgIHJldHVybiBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHBvcnQsIGhvc3QpLCB0aW1lb3V0KQogCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgaG9zdD0nbG9jYWxob3N0JywgcG9ydCA9IDApOgorICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9MCk6CiAgICAgICAgICIiIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gcG9ydC4KIAogICAgICAgICBJZiB0aGUgaG9zdG5hbWUgZW5kcyB3aXRoIGEgY29sb24gKGA6JykgZm9sbG93ZWQgYnkgYSBudW1iZXIsIGFuZApAQCAtMjg2LDIwICsyOTAsMjUgQEAKICAgICAgICAgaWYgbm90IHBvcnQgYW5kIChob3N0LmZpbmQoJzonKSA9PSBob3N0LnJmaW5kKCc6JykpOgogICAgICAgICAgICAgaSA9IGhvc3QucmZpbmQoJzonKQogICAgICAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBob3N0WzppXSwgaG9zdFtpKzE6XQotICAgICAgICAgICAgICAgIHRyeTogcG9ydCA9IGludChwb3J0KQorICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBob3N0WzppXSwgaG9zdFtpICsgMTpdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvciwgIm5vbm51bWVyaWMgcG9ydCIKLSAgICAgICAgaWYgbm90IHBvcnQ6IHBvcnQgPSBzZWxmLmRlZmF1bHRfcG9ydAotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAnY29ubmVjdDonLCAoaG9zdCwgcG9ydCkKKyAgICAgICAgaWYgbm90IHBvcnQ6CisgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQogICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9nZXRfc29ja2V0KGhvc3QsIHBvcnQsIHNlbGYudGltZW91dCkKICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgImNvbm5lY3Q6IiwgbXNnCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAiY29ubmVjdDoiLCBtc2cKICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgc2VuZChzZWxmLCBzdHIpOgogICAgICAgICAiIiJTZW5kIGBzdHInIHRvIHRoZSBzZXJ2ZXIuIiIiCi0gICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdzZW5kOicsIHJlcHIoc3RyKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgJ3NlbmQ6JywgcmVwcihzdHIpCiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NvY2snKSBhbmQgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHN0cikKQEAgLTMzMCwxNyArMzM5LDIxIEBACiAKICAgICAgICAgUmFpc2VzIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQgaWYgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJlc3A9W10KKyAgICAgICAgcmVzcCA9IFtdCiAgICAgICAgIGlmIHNlbGYuZmlsZSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgbGluZSA9ICcnCiAgICAgICAgICAgICBpZiBsaW5lID09ICcnOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZCIpCi0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludD4+c3RkZXJyLCAncmVwbHk6JywgcmVwcihsaW5lKQorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAncmVwbHk6JywgcmVwcihsaW5lKQogICAgICAgICAgICAgcmVzcC5hcHBlbmQobGluZVs0Ol0uc3RyaXAoKSkKLSAgICAgICAgICAgIGNvZGU9bGluZVs6M10KKyAgICAgICAgICAgIGNvZGUgPSBsaW5lWzozXQogICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBlcnJvciBjb2RlIGlzIHN5bnRhY3RpY2FsbHkgY29ycmVjdC4KICAgICAgICAgICAgICMgRG9uJ3QgYXR0ZW1wdCB0byByZWFkIGEgY29udGludWF0aW9uIGxpbmUgaWYgaXQgaXMgYnJva2VuLgogICAgICAgICAgICAgdHJ5OgpAQCAtMzQ5LDE3ICszNjIsMTcgQEAKICAgICAgICAgICAgICAgICBlcnJjb2RlID0gLTEKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgIyBDaGVjayBpZiBtdWx0aWxpbmUgcmVzcG9uc2UuCi0gICAgICAgICAgICBpZiBsaW5lWzM6NF0hPSItIjoKKyAgICAgICAgICAgIGlmIGxpbmVbMzo0XSAhPSAiLSI6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBlcnJtc2cgPSAiXG4iLmpvaW4ocmVzcCkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdyZXBseTogcmV0Y29kZSAoJXMpOyBNc2c6ICVzJyAlIChlcnJjb2RlLGVycm1zZykKKyAgICAgICAgICAgIHByaW50Pj5zdGRlcnIsICdyZXBseTogcmV0Y29kZSAoJXMpOyBNc2c6ICVzJyAlIChlcnJjb2RlLCBlcnJtc2cpCiAgICAgICAgIHJldHVybiBlcnJjb2RlLCBlcnJtc2cKIAogICAgIGRlZiBkb2NtZChzZWxmLCBjbWQsIGFyZ3M9IiIpOgogICAgICAgICAiIiJTZW5kIGEgY29tbWFuZCwgYW5kIHJldHVybiBpdHMgcmVzcG9uc2UgY29kZS4iIiIKLSAgICAgICAgc2VsZi5wdXRjbWQoY21kLGFyZ3MpCisgICAgICAgIHNlbGYucHV0Y21kKGNtZCwgYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQogCiAgICAgIyBzdGQgc210cCBjb21tYW5kcwpAQCAtMzY5LDkgKzM4Miw5IEBACiAgICAgICAgIGhvc3QuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnB1dGNtZCgiaGVsbyIsIG5hbWUgb3Igc2VsZi5sb2NhbF9ob3N0bmFtZSkKLSAgICAgICAgKGNvZGUsbXNnKT1zZWxmLmdldHJlcGx5KCkKLSAgICAgICAgc2VsZi5oZWxvX3Jlc3A9bXNnCi0gICAgICAgIHJldHVybiAoY29kZSxtc2cpCisgICAgICAgIChjb2RlLCBtc2cpID0gc2VsZi5nZXRyZXBseSgpCisgICAgICAgIHNlbGYuaGVsb19yZXNwID0gbXNnCisgICAgICAgIHJldHVybiAoY29kZSwgbXNnKQogCiAgICAgZGVmIGVobG8oc2VsZiwgbmFtZT0nJyk6CiAgICAgICAgICIiIiBTTVRQICdlaGxvJyBjb21tYW5kLgpAQCAtMzgwLDE5ICszOTMsMTkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQogICAgICAgICBzZWxmLnB1dGNtZChzZWxmLmVobG9fbXNnLCBuYW1lIG9yIHNlbGYubG9jYWxfaG9zdG5hbWUpCi0gICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpCisgICAgICAgIChjb2RlLCBtc2cpID0gc2VsZi5nZXRyZXBseSgpCiAgICAgICAgICMgQWNjb3JkaW5nIHRvIFJGQzE4Njkgc29tZSAoYmFkbHkgd3JpdHRlbikKICAgICAgICAgIyBNVEEncyB3aWxsIGRpc2Nvbm5lY3Qgb24gYW4gZWhsby4gVG9zcyBhbiBleGNlcHRpb24gaWYKICAgICAgICAgIyB0aGF0IGhhcHBlbnMgLWRkbQogICAgICAgICBpZiBjb2RlID09IC0xIGFuZCBsZW4obXNnKSA9PSAwOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCJTZXJ2ZXIgbm90IGNvbm5lY3RlZCIpCi0gICAgICAgIHNlbGYuZWhsb19yZXNwPW1zZworICAgICAgICBzZWxmLmVobG9fcmVzcCA9IG1zZwogICAgICAgICBpZiBjb2RlICE9IDI1MDoKLSAgICAgICAgICAgIHJldHVybiAoY29kZSxtc2cpCi0gICAgICAgIHNlbGYuZG9lc19lc210cD0xCisgICAgICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKKyAgICAgICAgc2VsZi5kb2VzX2VzbXRwID0gMQogICAgICAgICAjcGFyc2UgdGhlIGVobG8gcmVzcG9uc2UgLWRkbQotICAgICAgICByZXNwPXNlbGYuZWhsb19yZXNwLnNwbGl0KCdcbicpCisgICAgICAgIHJlc3AgPSBzZWxmLmVobG9fcmVzcC5zcGxpdCgnXG4nKQogICAgICAgICBkZWwgcmVzcFswXQogICAgICAgICBmb3IgZWFjaCBpbiByZXNwOgogICAgICAgICAgICAgIyBUbyBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggYXMgbWFueSBTTVRQIHNlcnZlcnMgYXMgcG9zc2libGUsCkBAIC00MTIsMTYgKzQyNSwxNiBAQAogICAgICAgICAgICAgIyBJdCdzIGFjdHVhbGx5IHN0cmljdGVyLCBpbiB0aGF0IG9ubHkgc3BhY2VzIGFyZSBhbGxvd2VkIGJldHdlZW4KICAgICAgICAgICAgICMgcGFyYW1ldGVycywgYnV0IHdlcmUgbm90IGdvaW5nIHRvIGNoZWNrIGZvciB0aGF0IGhlcmUuICBOb3RlCiAgICAgICAgICAgICAjIHRoYXQgdGhlIHNwYWNlIGlzbid0IHByZXNlbnQgaWYgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICBtPXJlLm1hdGNoKHInKD9QPGZlYXR1cmU+W0EtWmEtejAtOV1bQS1aYS16MC05XC1dKikgPycsZWFjaCkKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJyg/UDxmZWF0dXJlPltBLVphLXowLTldW0EtWmEtejAtOVwtXSopID8nLCBlYWNoKQogICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICBmZWF0dXJlPW0uZ3JvdXAoImZlYXR1cmUiKS5sb3dlcigpCi0gICAgICAgICAgICAgICAgcGFyYW1zPW0uc3RyaW5nW20uZW5kKCJmZWF0dXJlIik6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZmVhdHVyZSA9IG0uZ3JvdXAoImZlYXR1cmUiKS5sb3dlcigpCisgICAgICAgICAgICAgICAgcGFyYW1zID0gbS5zdHJpbmdbbS5lbmQoImZlYXR1cmUiKTpdLnN0cmlwKCkKICAgICAgICAgICAgICAgICBpZiBmZWF0dXJlID09ICJhdXRoIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlc1tmZWF0dXJlXSA9IHNlbGYuZXNtdHBfZmVhdHVyZXMuZ2V0KGZlYXR1cmUsICIiKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiICIgKyBwYXJhbXMKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzW2ZlYXR1cmVdPXBhcmFtcwotICAgICAgICByZXR1cm4gKGNvZGUsbXNnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzW2ZlYXR1cmVdID0gcGFyYW1zCisgICAgICAgIHJldHVybiAoY29kZSwgbXNnKQogCiAgICAgZGVmIGhhc19leHRuKHNlbGYsIG9wdCk6CiAgICAgICAgICIiIkRvZXMgdGhlIHNlcnZlciBzdXBwb3J0IGEgZ2l2ZW4gU01UUCBzZXJ2aWNlIGV4dGVuc2lvbj8iIiIKQEAgLTQ0MSwyMyArNDU0LDIzIEBACiAgICAgICAgICIiIlNNVFAgJ25vb3AnIGNvbW1hbmQgLS0gZG9lc24ndCBkbyBhbnl0aGluZyA6PiIiIgogICAgICAgICByZXR1cm4gc2VsZi5kb2NtZCgibm9vcCIpCiAKLSAgICBkZWYgbWFpbChzZWxmLHNlbmRlcixvcHRpb25zPVtdKToKKyAgICBkZWYgbWFpbChzZWxmLCBzZW5kZXIsIG9wdGlvbnM9W10pOgogICAgICAgICAiIiJTTVRQICdtYWlsJyBjb21tYW5kIC0tIGJlZ2lucyBtYWlsIHhmZXIgc2Vzc2lvbi4iIiIKICAgICAgICAgb3B0aW9ubGlzdCA9ICcnCiAgICAgICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9lc19lc210cDoKICAgICAgICAgICAgIG9wdGlvbmxpc3QgPSAnICcgKyAnICcuam9pbihvcHRpb25zKQotICAgICAgICBzZWxmLnB1dGNtZCgibWFpbCIsICJGUk9NOiVzJXMiICUgKHF1b3RlYWRkcihzZW5kZXIpICxvcHRpb25saXN0KSkKKyAgICAgICAgc2VsZi5wdXRjbWQoIm1haWwiLCAiRlJPTTolcyVzIiAlIChxdW90ZWFkZHIoc2VuZGVyKSwgb3B0aW9ubGlzdCkpCiAgICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkKIAotICAgIGRlZiByY3B0KHNlbGYscmVjaXAsb3B0aW9ucz1bXSk6CisgICAgZGVmIHJjcHQoc2VsZiwgcmVjaXAsIG9wdGlvbnM9W10pOgogICAgICAgICAiIiJTTVRQICdyY3B0JyBjb21tYW5kIC0tIGluZGljYXRlcyAxIHJlY2lwaWVudCBmb3IgdGhpcyBtYWlsLiIiIgogICAgICAgICBvcHRpb25saXN0ID0gJycKICAgICAgICAgaWYgb3B0aW9ucyBhbmQgc2VsZi5kb2VzX2VzbXRwOgogICAgICAgICAgICAgb3B0aW9ubGlzdCA9ICcgJyArICcgJy5qb2luKG9wdGlvbnMpCi0gICAgICAgIHNlbGYucHV0Y21kKCJyY3B0IiwiVE86JXMlcyIgJSAocXVvdGVhZGRyKHJlY2lwKSxvcHRpb25saXN0KSkKKyAgICAgICAgc2VsZi5wdXRjbWQoInJjcHQiLCAiVE86JXMlcyIgJSAocXVvdGVhZGRyKHJlY2lwKSwgb3B0aW9ubGlzdCkpCiAgICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkKIAotICAgIGRlZiBkYXRhKHNlbGYsbXNnKToKKyAgICBkZWYgZGF0YShzZWxmLCBtc2cpOgogICAgICAgICAiIiJTTVRQICdEQVRBJyBjb21tYW5kIC0tIHNlbmRzIG1lc3NhZ2UgZGF0YSB0byBzZXJ2ZXIuCiAKICAgICAgICAgQXV0b21hdGljYWxseSBxdW90ZXMgbGluZXMgYmVnaW5uaW5nIHdpdGggYSBwZXJpb2QgcGVyIHJmYzgyMS4KQEAgLTQ2NiwyNiArNDc5LDI4IEBACiAgICAgICAgIHJlc3BvbnNlIGNvZGUgcmVjZWl2ZWQgd2hlbiB0aGUgYWxsIGRhdGEgaXMgc2VudC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucHV0Y21kKCJkYXRhIikKLSAgICAgICAgKGNvZGUscmVwbCk9c2VsZi5nZXRyZXBseSgpCi0gICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+MCA6IHByaW50Pj5zdGRlcnIsICJkYXRhOiIsIChjb2RlLHJlcGwpCisgICAgICAgIChjb2RlLCByZXBsKSA9IHNlbGYuZ2V0cmVwbHkoKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgImRhdGE6IiwgKGNvZGUsIHJlcGwpCiAgICAgICAgIGlmIGNvZGUgIT0gMzU0OgotICAgICAgICAgICAgcmFpc2UgU01UUERhdGFFcnJvcihjb2RlLHJlcGwpCisgICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUsIHJlcGwpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBxID0gcXVvdGVkYXRhKG1zZykKICAgICAgICAgICAgIGlmIHFbLTI6XSAhPSBDUkxGOgogICAgICAgICAgICAgICAgIHEgPSBxICsgQ1JMRgogICAgICAgICAgICAgcSA9IHEgKyAiLiIgKyBDUkxGCiAgICAgICAgICAgICBzZWxmLnNlbmQocSkKLSAgICAgICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpCi0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPjAgOiBwcmludD4+c3RkZXJyLCAiZGF0YToiLCAoY29kZSxtc2cpCi0gICAgICAgICAgICByZXR1cm4gKGNvZGUsbXNnKQorICAgICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICAgICAgcHJpbnQ+PnN0ZGVyciwgImRhdGE6IiwgKGNvZGUsIG1zZykKKyAgICAgICAgICAgIHJldHVybiAoY29kZSwgbXNnKQogCiAgICAgZGVmIHZlcmlmeShzZWxmLCBhZGRyZXNzKToKICAgICAgICAgIiIiU01UUCAndmVyaWZ5JyBjb21tYW5kIC0tIGNoZWNrcyBmb3IgYWRkcmVzcyB2YWxpZGl0eS4iIiIKICAgICAgICAgc2VsZi5wdXRjbWQoInZyZnkiLCBxdW90ZWFkZHIoYWRkcmVzcykpCiAgICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkKICAgICAjIGEuay5hLgotICAgIHZyZnk9dmVyaWZ5CisgICAgdnJmeSA9IHZlcmlmeQogCiAgICAgZGVmIGV4cG4oc2VsZiwgYWRkcmVzcyk6CiAgICAgICAgICIiIlNNVFAgJ2V4cG4nIGNvbW1hbmQgLS0gZXhwYW5kcyBhIG1haWxpbmcgbGlzdC4iIiIKQEAgLTU4OSw3ICs2MDQsNyBAQAogICAgICAgICAgICAgcmFpc2UgU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IoY29kZSwgcmVzcCkKICAgICAgICAgcmV0dXJuIChjb2RlLCByZXNwKQogCi0gICAgZGVmIHN0YXJ0dGxzKHNlbGYsIGtleWZpbGUgPSBOb25lLCBjZXJ0ZmlsZSA9IE5vbmUpOgorICAgIGRlZiBzdGFydHRscyhzZWxmLCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUpOgogICAgICAgICAiIiJQdXRzIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBTTVRQIHNlcnZlciBpbnRvIFRMUyBtb2RlLgogCiAgICAgICAgIElmIHRoZXJlIGhhcyBiZWVuIG5vIHByZXZpb3VzIEVITE8gb3IgSEVMTyBjb21tYW5kIHRoaXMgc2Vzc2lvbiwgdGhpcwpAQCAtNjkyLDIyICs3MDcsMjIgQEAKICAgICAgICAgICAgIGZvciBvcHRpb24gaW4gbWFpbF9vcHRpb25zOgogICAgICAgICAgICAgICAgIGVzbXRwX29wdHMuYXBwZW5kKG9wdGlvbikKIAotICAgICAgICAoY29kZSxyZXNwKSA9IHNlbGYubWFpbChmcm9tX2FkZHIsIGVzbXRwX29wdHMpCisgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYubWFpbChmcm9tX2FkZHIsIGVzbXRwX29wdHMpCiAgICAgICAgIGlmIGNvZGUgIT0gMjUwOgogICAgICAgICAgICAgc2VsZi5yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBTZW5kZXJSZWZ1c2VkKGNvZGUsIHJlc3AsIGZyb21fYWRkcikKLSAgICAgICAgc2VuZGVycnM9e30KKyAgICAgICAgc2VuZGVycnMgPSB7fQogICAgICAgICBpZiBpc2luc3RhbmNlKHRvX2FkZHJzLCBiYXNlc3RyaW5nKToKICAgICAgICAgICAgIHRvX2FkZHJzID0gW3RvX2FkZHJzXQogICAgICAgICBmb3IgZWFjaCBpbiB0b19hZGRyczoKLSAgICAgICAgICAgIChjb2RlLHJlc3ApPXNlbGYucmNwdChlYWNoLCByY3B0X29wdGlvbnMpCisgICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLnJjcHQoZWFjaCwgcmNwdF9vcHRpb25zKQogICAgICAgICAgICAgaWYgKGNvZGUgIT0gMjUwKSBhbmQgKGNvZGUgIT0gMjUxKToKLSAgICAgICAgICAgICAgICBzZW5kZXJyc1tlYWNoXT0oY29kZSxyZXNwKQotICAgICAgICBpZiBsZW4oc2VuZGVycnMpPT1sZW4odG9fYWRkcnMpOgorICAgICAgICAgICAgICAgIHNlbmRlcnJzW2VhY2hdID0gKGNvZGUsIHJlc3ApCisgICAgICAgIGlmIGxlbihzZW5kZXJycykgPT0gbGVuKHRvX2FkZHJzKToKICAgICAgICAgICAgICMgdGhlIHNlcnZlciByZWZ1c2VkIGFsbCBvdXIgcmVjaXBpZW50cwogICAgICAgICAgICAgc2VsZi5yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVmdXNlZChzZW5kZXJycykKLSAgICAgICAgKGNvZGUscmVzcCkgPSBzZWxmLmRhdGEobXNnKQorICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRhdGEobXNnKQogICAgICAgICBpZiBjb2RlICE9IDI1MDoKICAgICAgICAgICAgIHNlbGYucnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUsIHJlc3ApCkBAIC03NTAsNyArNzY1LDggQEAKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9wb3J0ID0gU01UUF9TU0xfUE9SVAogCiAgICAgICAgIGRlZiBfZ2V0X3NvY2tldChzZWxmLCBob3N0LCBwb3J0LCB0aW1lb3V0KToKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0OicsIChob3N0LCBwb3J0KQorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAnY29ubmVjdDonLCAoaG9zdCwgcG9ydCkKICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0KQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNzbC53cmFwX3NvY2tldChuZXdfc29ja2V0LCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBTU0xGYWtlRmlsZShuZXdfc29ja2V0KQpAQCAtNzc4LDExICs3OTQsMTEgQEAKIAogICAgIGVobG9fbXNnID0gImxobG8iCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCA9ICcnLCBwb3J0ID0gTE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZSA9IE5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PScnLCBwb3J0PUxNVFBfUE9SVCwgbG9jYWxfaG9zdG5hbWU9Tm9uZSk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYSBuZXcgaW5zdGFuY2UuIiIiCiAgICAgICAgIFNNVFAuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgbG9jYWxfaG9zdG5hbWUpCiAKLSAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0ID0gJ2xvY2FsaG9zdCcsIHBvcnQgPSAwKToKKyAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0PTApOgogICAgICAgICAiIiJDb25uZWN0IHRvIHRoZSBMTVRQIGRhZW1vbiwgb24gZWl0aGVyIGEgVW5peCBvciBhIFRDUCBzb2NrZXQuIiIiCiAgICAgICAgIGlmIGhvc3RbMF0gIT0gJy8nOgogICAgICAgICAgICAgcmV0dXJuIFNNVFAuY29ubmVjdChzZWxmLCBob3N0LCBwb3J0KQpAQCAtNzkyLDEzICs4MDgsMTUgQEAKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KGhvc3QpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKLSAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50Pj5zdGRlcnIsICdjb25uZWN0IGZhaWw6JywgaG9zdAorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAnY29ubmVjdCBmYWlsOicsIGhvc3QKICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yLCBtc2cKICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQ+PnN0ZGVyciwgImNvbm5lY3Q6IiwgbXNnCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludD4+c3RkZXJyLCAiY29ubmVjdDoiLCBtc2cKICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKIApAQCAtODEyLDcgKzgzMCw3IEBACiAgICAgICAgIHJldHVybiBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpCiAKICAgICBmcm9tYWRkciA9IHByb21wdCgiRnJvbSIpCi0gICAgdG9hZGRycyAgPSBwcm9tcHQoIlRvIikuc3BsaXQoJywnKQorICAgIHRvYWRkcnMgPSBwcm9tcHQoIlRvIikuc3BsaXQoJywnKQogICAgIHByaW50ICJFbnRlciBtZXNzYWdlLCBlbmQgd2l0aCBeRDoiCiAgICAgbXNnID0gJycKICAgICB3aGlsZSAxOgpkaWZmIC0tZ2l0IGEvTGliL3NvY2tldC5weSBiL0xpYi9zb2NrZXQucHkKaW5kZXggZTRmMGE4MS4uYmQzNjRlNyAxMDA2NDQKLS0tIGEvTGliL3NvY2tldC5weQorKysgYi9MaWIvc29ja2V0LnB5CkBAIC0yNCw3ICsyNCw4IEBACiBzc2woKSAtLSBzZWN1cmUgc29ja2V0IGxheWVyIHN1cHBvcnQgKG9ubHkgYXZhaWxhYmxlIGlmIGNvbmZpZ3VyZWQpCiBzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSAtLSBnZXQgdGhlIGRlZmF1bHQgdGltZW91dCB2YWx1ZQogc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KCkgLS0gc2V0IHRoZSBkZWZhdWx0IHRpbWVvdXQgdmFsdWUKLWNyZWF0ZV9jb25uZWN0aW9uKCkgLS0gY29ubmVjdHMgdG8gYW4gYWRkcmVzcywgd2l0aCBhbiBvcHRpb25hbCB0aW1lb3V0CitjcmVhdGVfY29ubmVjdGlvbigpIC0tIGNvbm5lY3RzIHRvIGFuIGFkZHJlc3MsIHdpdGggYW4gb3B0aW9uYWwgdGltZW91dCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgc291cmNlIGFkZHJlc3MuCiAKICBbKl0gbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zIQogCkBAIC00NSw2ICs0Niw4IEBACiAKIGltcG9ydCBfc29ja2V0CiBmcm9tIF9zb2NrZXQgaW1wb3J0ICoKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCitmcm9tIHR5cGVzIGltcG9ydCBNZXRob2RUeXBlCiAKIHRyeToKICAgICBpbXBvcnQgX3NzbApAQCAtMTg2LDcgKzE4OSw5IEBACiAgICAgICAgIGZvciBtZXRob2QgaW4gX2RlbGVnYXRlX21ldGhvZHM6CiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG1ldGhvZCwgZ2V0YXR0cihfc29jaywgbWV0aG9kKSkKIAotICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICBkZWYgY2xvc2Uoc2VsZiwgX2Nsb3NlZHNvY2tldD1fY2xvc2Vkc29ja2V0LAorICAgICAgICAgICAgICBfZGVsZWdhdGVfbWV0aG9kcz1fZGVsZWdhdGVfbWV0aG9kcywgc2V0YXR0cj1zZXRhdHRyKToKKyAgICAgICAgIyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueSBnbG9iYWxzLiBTZWUgaXNzdWUgIzgwODE2NC4KICAgICAgICAgc2VsZi5fc29jayA9IF9jbG9zZWRzb2NrZXQoKQogICAgICAgICBkdW1teSA9IHNlbGYuX3NvY2suX2R1bW15CiAgICAgICAgIGZvciBtZXRob2QgaW4gX2RlbGVnYXRlX21ldGhvZHM6CkBAIC0yMTUsMTEgKzIyMCwxNSBAQAogICAgIHR5cGUgPSBwcm9wZXJ0eShsYW1iZGEgc2VsZjogc2VsZi5fc29jay50eXBlLCBkb2M9InRoZSBzb2NrZXQgdHlwZSIpCiAgICAgcHJvdG8gPSBwcm9wZXJ0eShsYW1iZGEgc2VsZjogc2VsZi5fc29jay5wcm90bywgZG9jPSJ0aGUgc29ja2V0IHByb3RvY29sIikKIAotICAgIF9zID0gKCJkZWYgJXMoc2VsZiwgKmFyZ3MpOiByZXR1cm4gc2VsZi5fc29jay4lcygqYXJncylcblxuIgotICAgICAgICAgICIlcy5fX2RvY19fID0gX3JlYWxzb2NrZXQuJXMuX19kb2NfX1xuIikKLSAgICBmb3IgX20gaW4gX3NvY2tldG1ldGhvZHM6Ci0gICAgICAgIGV4ZWMgX3MgJSAoX20sIF9tLCBfbSwgX20pCi0gICAgZGVsIF9tLCBfcworZGVmIG1ldGgobmFtZSxzZWxmLCphcmdzKToKKyAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9zb2NrLG5hbWUpKCphcmdzKQorCitmb3IgX20gaW4gX3NvY2tldG1ldGhvZHM6CisgICAgcCA9IHBhcnRpYWwobWV0aCxfbSkKKyAgICBwLl9fbmFtZV9fID0gX20KKyAgICBwLl9fZG9jX18gPSBnZXRhdHRyKF9yZWFsc29ja2V0LF9tKS5fX2RvY19fCisgICAgbSA9IE1ldGhvZFR5cGUocCxOb25lLF9zb2NrZXRvYmplY3QpCisgICAgc2V0YXR0cihfc29ja2V0b2JqZWN0LF9tLG0pCiAKIHNvY2tldCA9IFNvY2tldFR5cGUgPSBfc29ja2V0b2JqZWN0CiAKQEAgLTI4OCwxOCArMjk3LDE1IEBACiAgICAgICAgICAgICBidWZmZXJfc2l6ZSA9IG1heChzZWxmLl9yYnVmc2l6ZSwgc2VsZi5kZWZhdWx0X2J1ZnNpemUpCiAgICAgICAgICAgICBkYXRhX3NpemUgPSBsZW4oZGF0YSkKICAgICAgICAgICAgIHdyaXRlX29mZnNldCA9IDAKKyAgICAgICAgICAgIHZpZXcgPSBtZW1vcnl2aWV3KGRhdGEpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2hpbGUgd3JpdGVfb2Zmc2V0IDwgZGF0YV9zaXplOgotICAgICAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzeXMucHkza3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kYWxsKGJ1ZmZlcihkYXRhLCB3cml0ZV9vZmZzZXQsIGJ1ZmZlcl9zaXplKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kYWxsKHZpZXdbd3JpdGVfb2Zmc2V0OndyaXRlX29mZnNldCtidWZmZXJfc2l6ZV0pCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlX29mZnNldCArPSBidWZmZXJfc2l6ZQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiB3cml0ZV9vZmZzZXQgPCBkYXRhX3NpemU6CiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IGRhdGFbd3JpdGVfb2Zmc2V0Ol0KLSAgICAgICAgICAgICAgICAgICAgZGVsIGRhdGEgICMgZXhwbGljaXQgZnJlZQorICAgICAgICAgICAgICAgICAgICBkZWwgdmlldywgZGF0YSAgIyBleHBsaWNpdCBmcmVlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3didWYuYXBwZW5kKHJlbWFpbmRlcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2J1Zl9sZW4gPSBsZW4ocmVtYWluZGVyKQogCkBAIC0zMjcsOSArMzMzLDYgQEAKICAgICAgICAgICAgIHNlbGYuX3didWZfbGVuID49IHNlbGYuX3didWZzaXplKToKICAgICAgICAgICAgIHNlbGYuZmx1c2goKQogCi0gICAgZGVmIF9nZXRfd2J1Zl9sZW4oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl93YnVmX2xlbgotCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICMgVXNlIG1heCwgZGlzYWxsb3cgdGlueSByZWFkcyBpbiBhIGxvb3AgYXMgdGhleSBhcmUgdmVyeSBpbmVmZmljaWVudC4KICAgICAgICAgIyBXZSBuZXZlciBsZWF2ZSByZWFkKCkgd2l0aCBhbnkgbGVmdG92ZXIgZGF0YSBmcm9tIGEgbmV3IHJlY3YoKSBjYWxsCkBAIC01MzEsNyArNTM0LDggQEAKIAogX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQgPSBvYmplY3QoKQogCi1kZWYgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dD1fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CitkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dD1fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKICAgICAiIiJDb25uZWN0IHRvICphZGRyZXNzKiBhbmQgcmV0dXJuIHRoZSBzb2NrZXQgb2JqZWN0LgogCiAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24uICBDb25uZWN0IHRvICphZGRyZXNzKiAoYSAyLXR1cGxlIGBgKGhvc3QsCkBAIC01MzksMTEgKzU0MywxMyBAQAogICAgICp0aW1lb3V0KiBwYXJhbWV0ZXIgd2lsbCBzZXQgdGhlIHRpbWVvdXQgb24gdGhlIHNvY2tldCBpbnN0YW5jZQogICAgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QuICBJZiBubyAqdGltZW91dCogaXMgc3VwcGxpZWQsIHRoZQogICAgIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZyByZXR1cm5lZCBieSA6ZnVuYzpgZ2V0ZGVmYXVsdHRpbWVvdXRgCi0gICAgaXMgdXNlZC4KKyAgICBpcyB1c2VkLiAgSWYgKnNvdXJjZV9hZGRyZXNzKiBpcyBzZXQgaXQgbXVzdCBiZSBhIHR1cGxlIG9mIChob3N0LCBwb3J0KQorICAgIGZvciB0aGUgc29ja2V0IHRvIGJpbmQgYXMgYSBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgbWFraW5nIHRoZSBjb25uZWN0aW9uLgorICAgIEFuIGhvc3Qgb2YgJycgb3IgcG9ydCAwIHRlbGxzIHRoZSBPUyB0byB1c2UgdGhlIGRlZmF1bHQuCiAgICAgIiIiCiAKLSAgICBtc2cgPSAiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IgogICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzCisgICAgZXJyID0gTm9uZQogICAgIGZvciByZXMgaW4gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgMCwgU09DS19TVFJFQU0pOgogICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCiAgICAgICAgIHNvY2sgPSBOb25lCkBAIC01NTEsMTEgKzU1NywxNyBAQAogICAgICAgICAgICAgc29jayA9IHNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQ6CiAgICAgICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICBpZiBzb3VyY2VfYWRkcmVzczoKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzb2NrLmNvbm5lY3Qoc2EpCiAgICAgICAgICAgICByZXR1cm4gc29jawogCi0gICAgICAgIGV4Y2VwdCBlcnJvciwgbXNnOgorICAgICAgICBleGNlcHQgZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGVyciA9IF8KICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAKLSAgICByYWlzZSBlcnJvciwgbXNnCisgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICByYWlzZSBlcnIKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBlcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IDI5YTA0ZDcuLjY3MDFjMjIgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMSw3ICsxLDcgQEAKICMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQogIyBweXNxbGl0ZTIvdGVzdC9kYmFwaS5weTogdGVzdHMgZm9yIERCLUFQSSBjb21wbGlhbmNlCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICMKQEAgLTIzLDggKzIzLDExIEBACiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBDaGVja0FQSUxldmVsKHNlbGYpOgpAQCAtNDEsNDMgKzQ0LDQzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLnBhcmFtc3R5bGUpCiAKICAgICBkZWYgQ2hlY2tXYXJuaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhzcWxpdGUuV2FybmluZywgU3RhbmRhcmRFcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAiV2FybmluZyBpcyBub3QgYSBzdWJjbGFzcyBvZiBTdGFuZGFyZEVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLldhcm5pbmcsIFN0YW5kYXJkRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIldhcm5pbmcgaXMgbm90IGEgc3ViY2xhc3Mgb2YgU3RhbmRhcmRFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tFcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc3FsaXRlLkVycm9yLCBTdGFuZGFyZEVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkVycm9yLCBTdGFuZGFyZEVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBTdGFuZGFyZEVycm9yIikKIAogICAgIGRlZiBDaGVja0ludGVyZmFjZUVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuSW50ZXJmYWNlRXJyb3IsIHNxbGl0ZS5FcnJvciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlcmZhY2VFcnJvciwgc3FsaXRlLkVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcmZhY2VFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tEYXRhYmFzZUVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuRGF0YWJhc2VFcnJvciwgc3FsaXRlLkVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkRhdGFiYXNlRXJyb3IsIHNxbGl0ZS5FcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YWJhc2VFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tEYXRhRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5EYXRhRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkRhdGFFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGFFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIAogICAgIGRlZiBDaGVja09wZXJhdGlvbmFsRXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlcmF0aW9uYWxFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIAogICAgIGRlZiBDaGVja0ludGVncml0eUVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuSW50ZWdyaXR5RXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkludGVncml0eUVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWdyaXR5RXJyb3IgaXMgbm90IGEgc3ViY2xhc3Mgb2YgRGF0YWJhc2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tJbnRlcm5hbEVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuSW50ZXJuYWxFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuSW50ZXJuYWxFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkludGVybmFsRXJyb3IgaXMgbm90IGEgc3ViY2xhc3Mgb2YgRGF0YWJhc2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tQcm9ncmFtbWluZ0Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyYW1taW5nRXJyb3IgaXMgbm90IGEgc3ViY2xhc3Mgb2YgRGF0YWJhc2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tOb3RTdXBwb3J0ZWRFcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc3FsaXRlLk5vdFN1cHBvcnRlZEVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJOb3RTdXBwb3J0ZWRFcnJvciBpcyBub3QgYSBzdWJjbGFzcyBvZiBEYXRhYmFzZUVycm9yIikKIApAQCAtMTI3LDE2ICsxMzAsMTYgQEAKIAogICAgIGRlZiBDaGVja0V4Y2VwdGlvbnMoc2VsZik6CiAgICAgICAgICMgT3B0aW9uYWwgREItQVBJIGV4dGVuc2lvbi4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5XYXJuaW5nLCBzcWxpdGUuV2FybmluZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jeC5FcnJvciwgc3FsaXRlLkVycm9yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN4LkludGVyZmFjZUVycm9yLCBzcWxpdGUuSW50ZXJmYWNlRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guRGF0YWJhc2VFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guRGF0YUVycm9yLCBzcWxpdGUuRGF0YUVycm9yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN4Lk9wZXJhdGlvbmFsRXJyb3IsIHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN4LkludGVncml0eUVycm9yLCBzcWxpdGUuSW50ZWdyaXR5RXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guSW50ZXJuYWxFcnJvciwgc3FsaXRlLkludGVybmFsRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guUHJvZ3JhbW1pbmdFcnJvciwgc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3guTm90U3VwcG9ydGVkRXJyb3IsIHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4Lldhcm5pbmcsIHNxbGl0ZS5XYXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guRXJyb3IsIHNxbGl0ZS5FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkludGVyZmFjZUVycm9yLCBzcWxpdGUuSW50ZXJmYWNlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5EYXRhYmFzZUVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkRhdGFFcnJvciwgc3FsaXRlLkRhdGFFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4Lk9wZXJhdGlvbmFsRXJyb3IsIHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guSW50ZWdyaXR5RXJyb3IsIHNxbGl0ZS5JbnRlZ3JpdHlFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkludGVybmFsRXJyb3IsIHNxbGl0ZS5JbnRlcm5hbEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guUHJvZ3JhbW1pbmdFcnJvciwgc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5Ob3RTdXBwb3J0ZWRFcnJvciwgc3FsaXRlLk5vdFN1cHBvcnRlZEVycm9yKQogCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjI4LDcgKzIzMSw3IEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9PyIsIFsiZm9vIl0pCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlUGFyYW1TZXF1ZW5jZShzZWxmKToKICAgICAgICAgY2xhc3MgTChvYmplY3QpOgpAQCAtMjQxLDEzICsyNDQsMTMgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT0/IiwgTCgpKQogICAgICAgICByb3cgPSBzZWxmLmN1LmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJmb28iKQogCiAgICAgZGVmIENoZWNrRXhlY3V0ZURpY3RNYXBwaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCB3aGVyZSBuYW1lPTpuYW1lIiwgeyJuYW1lIjogImZvbyJ9KQogICAgICAgICByb3cgPSBzZWxmLmN1LmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJmb28iKQogCiAgICAgZGVmIENoZWNrRXhlY3V0ZURpY3RNYXBwaW5nX01hcHBpbmcoc2VsZik6CiAgICAgICAgICMgVGVzdCBvbmx5IHdvcmtzIHdpdGggUHl0aG9uIDIuNSBvciBsYXRlcgpAQCAtMjYxLDcgKzI2NCw3IEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUiLCBEKCkpCiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmdUb29MaXR0bGVBcmdzKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQpAQCAtMjk1LDcgKzI5OCw3IEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgidXBkYXRlIHRlc3Qgc2V0IG5hbWU9J2JhciciKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1LnJvd2NvdW50LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3Uucm93Y291bnQsIDIpCiAKICAgICBkZWYgQ2hlY2tSb3djb3VudFNlbGVjdChzZWxmKToKICAgICAgICAgIiIiCkBAIC0zMDQsMTIgKzMwNywxMiBAQAogICAgICAgICBoYXMgdGh1cyB0byBiZSAtMS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IDUgdW5pb24gc2VsZWN0IDYiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1LnJvd2NvdW50LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1LnJvd2NvdW50LCAtMSkKIAogICAgIGRlZiBDaGVja1Jvd2NvdW50RXhlY3V0ZW1hbnkoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICg/KSIsIFsoMSwpLCAoMiwpLCAoMywpXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jdS5yb3djb3VudCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1LnJvd2NvdW50LCAzKQogCiAgICAgZGVmIENoZWNrVG90YWxDaGFuZ2VzKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQpAQCAtMzgyLDI0ICszODUsMjQgQEAKICAgICAgICAgbHN0ID0gW10KICAgICAgICAgZm9yIHJvdyBpbiBzZWxmLmN1OgogICAgICAgICAgICAgbHN0LmFwcGVuZChyb3dbMF0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxzdFswXSwgNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobHN0WzFdLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdFswXSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3RbMV0sIDYpCiAKICAgICBkZWYgQ2hlY2tGZXRjaG9uZShzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1LmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJmb28iKQogICAgICAgICByb3cgPSBzZWxmLmN1LmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgTm9uZSkKIAogICAgIGRlZiBDaGVja0ZldGNob25lTm9TdGF0ZW1lbnQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY3guY3Vyc29yKCkKICAgICAgICAgcm93ID0gY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgTm9uZSkKIAogICAgIGRlZiBDaGVja0FycmF5U2l6ZShzZWxmKToKICAgICAgICAgIyBtdXN0IGRlZmF1bHQgb3QgMQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLmN1LmFycmF5c2l6ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1LmFycmF5c2l6ZSwgMSkKIAogICAgICAgICAjIG5vdyBzZXQgdG8gMgogICAgICAgICBzZWxmLmN1LmFycmF5c2l6ZSA9IDIKQEAgLTQxMiwyNyArNDE1LDI3IEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaG1hbnkoKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihyZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyKQogCiAgICAgZGVmIENoZWNrRmV0Y2htYW55KHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2htYW55KDEwMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2htYW55KDEwMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQogCiAgICAgZGVmIENoZWNrRmV0Y2htYW55S3dBcmcoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiBmZXRjaG1hbnkgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cyIiIgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2htYW55KHNpemU9MTAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAogICAgIGRlZiBDaGVja0ZldGNoYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKICAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaGFsbCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKIAogICAgIGRlZiBDaGVja1NldGlucHV0c2l6ZXMoc2VsZik6CiAgICAgICAgIHNlbGYuY3Uuc2V0aW5wdXRzaXplcyhbMywgNCwgNV0pCkBAIC00NDUsNyArNDQ4LDcgQEAKIAogICAgIGRlZiBDaGVja0N1cnNvckNvbm5lY3Rpb24oc2VsZik6CiAgICAgICAgICMgT3B0aW9uYWwgREItQVBJIGV4dGVuc2lvbi4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jdS5jb25uZWN0aW9uLCBzZWxmLmN4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3UuY29ubmVjdGlvbiwgc2VsZi5jeCkKIAogICAgIGRlZiBDaGVja1dyb25nQ3Vyc29yQ2FsbGFibGUoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTQ2NSw2ICs0NjgsNyBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaGlzIHRlc3QgcmVxdWlyZXMgdGhyZWFkaW5nLicpCiBjbGFzcyBUaHJlYWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCkBAIC02NTYsNyArNjYwLDcgQEAKICAgICAgICAgICAgICIiIikKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gYSIpCiAgICAgICAgIHJlcyA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDUpCiAKICAgICBkZWYgQ2hlY2tTY3JpcHRTdHJpbmdVbmljb2RlKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtNjcwLDE3ICs2NzQsMTcgQEAKICAgICAgICAgICAgICIiIikKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gYSIpCiAgICAgICAgIHJlcyA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcywgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDYpCiAKLSAgICBkZWYgQ2hlY2tTY3JpcHRFcnJvckluY29tcGxldGUoc2VsZik6CisgICAgZGVmIENoZWNrU2NyaXB0U3ludGF4RXJyb3Ioc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQogICAgICAgICByYWlzZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3Qoc2FkZnNhZGZkc2EiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3QoeCk7IGFzZGY7IGNyZWF0ZSB0YWJsZSB0ZXN0Mih4KSIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKICAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgQ2hlY2tTY3JpcHRFcnJvck5vcm1hbChzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKQEAgLTY5MCwyOCArNjk0LDI4IEBACiAgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3Qoc2FkZnNhZGZkc2EpOyBzZWxlY3QgZm9vIGZyb20gaHVyejsiKQogICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6CiAgICAgICAgICAgICByYWlzZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJhaXNlZCwgVHJ1ZSwgInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhaXNlZCwgVHJ1ZSwgInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24iKQogCiAgICAgZGVmIENoZWNrQ29ubmVjdGlvbkV4ZWN1dGUoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCJzZWxlY3QgNSIpLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LCA1LCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgNSwgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlIikKIAogICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25FeGVjdXRlbWFueShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGZvbykiKQogICAgICAgICBjb24uZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoZm9vKSB2YWx1ZXMgKD8pIiwgWygzLCksICg0LCldKQogICAgICAgICByZXN1bHQgPSBjb24uZXhlY3V0ZSgic2VsZWN0IGZvbyBmcm9tIHRlc3Qgb3JkZXIgYnkgZm9vIikuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHRbMF1bMF0sIDMsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZW1hbnkiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHRbMV1bMF0sIDQsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZW1hbnkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXVswXSwgMywgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlbWFueSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzFdWzBdLCA0LCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGVtYW55IikKIAogICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25FeGVjdXRlc2NyaXB0KHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3QoZm9vKTsgaW5zZXJ0IGludG8gdGVzdChmb28pIHZhbHVlcyAoNSk7IikKICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoInNlbGVjdCBmb28gZnJvbSB0ZXN0IikuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA1LCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGVzY3JpcHQiKQogCi1jbGFzcyBDbG9zZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDbG9zZWRDb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBwYXNzCiAKQEAgLTc2Myw3ICs3NjcsNiBAQAogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCi0KICAgICBkZWYgQ2hlY2tDbG9zZWRDcmVhdGVGdW5jdGlvbihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmNsb3NlKCkKQEAgLTgzMCw2ICs4MzMsMzYgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAorY2xhc3MgQ2xvc2VkQ3VyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tDbG9zZWQoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuY2xvc2UoKQorCisgICAgICAgIGZvciBtZXRob2RfbmFtZSBpbiAoImV4ZWN1dGUiLCAiZXhlY3V0ZW1hbnkiLCAiZXhlY3V0ZXNjcmlwdCIsICJmZXRjaGFsbCIsICJmZXRjaG1hbnkiLCAiZmV0Y2hvbmUiKToKKyAgICAgICAgICAgIGlmIG1ldGhvZF9uYW1lIGluICgiZXhlY3V0ZSIsICJleGVjdXRlc2NyaXB0Iik6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gKCJzZWxlY3QgNCB1bmlvbiBzZWxlY3QgNSIsKQorICAgICAgICAgICAgZWxpZiBtZXRob2RfbmFtZSA9PSAiZXhlY3V0ZW1hbnkiOgorICAgICAgICAgICAgICAgIHBhcmFtcyA9ICgiaW5zZXJ0IGludG8gZm9vKGJhcikgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gW10KKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoY3VyLCBtZXRob2RfbmFtZSkKKworICAgICAgICAgICAgICAgIG1ldGhvZCgqcGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvcjogbWV0aG9kICIgKyBtZXRob2RfbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yOiAiICsgbWV0aG9kX25hbWUpCisKIGRlZiBzdWl0ZSgpOgogICAgIG1vZHVsZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShNb2R1bGVUZXN0cywgIkNoZWNrIikKICAgICBjb25uZWN0aW9uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbm5lY3Rpb25UZXN0cywgIkNoZWNrIikKQEAgLTgzNyw4ICs4NzAsOSBAQAogICAgIHRocmVhZF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShUaHJlYWRUZXN0cywgIkNoZWNrIikKICAgICBjb25zdHJ1Y3Rvcl9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb25zdHJ1Y3RvclRlc3RzLCAiQ2hlY2siKQogICAgIGV4dF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShFeHRlbnNpb25UZXN0cywgIkNoZWNrIikKLSAgICBjbG9zZWRfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ2xvc2VkVGVzdHMsICJDaGVjayIpCi0gICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSgobW9kdWxlX3N1aXRlLCBjb25uZWN0aW9uX3N1aXRlLCBjdXJzb3Jfc3VpdGUsIHRocmVhZF9zdWl0ZSwgY29uc3RydWN0b3Jfc3VpdGUsIGV4dF9zdWl0ZSwgY2xvc2VkX3N1aXRlKSkKKyAgICBjbG9zZWRfY29uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENsb3NlZENvblRlc3RzLCAiQ2hlY2siKQorICAgIGNsb3NlZF9jdXJfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ2xvc2VkQ3VyVGVzdHMsICJDaGVjayIpCisgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSgobW9kdWxlX3N1aXRlLCBjb25uZWN0aW9uX3N1aXRlLCBjdXJzb3Jfc3VpdGUsIHRocmVhZF9zdWl0ZSwgY29uc3RydWN0b3Jfc3VpdGUsIGV4dF9zdWl0ZSwgY2xvc2VkX2Nvbl9zdWl0ZSwgY2xvc2VkX2N1cl9zdWl0ZSkpCiAKIGRlZiB0ZXN0KCk6CiAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CmluZGV4IGZmNDFhOWQuLmYwOTA5NTUgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgc2VsZi5jb24uY2xvc2UoKQogCiAgICAgZGVmIENoZWNrSXNJbnN0YW5jZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2VsZi5jb24sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYuY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUNvbm5lY3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gaXMgbm90IGluc3RhbmNlIG9mIE15Q29ubmVjdGlvbiIpCiAKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIGRlZiBDaGVja0lzSW5zdGFuY2Uoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcihmYWN0b3J5PU15Q3Vyc29yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShjdXIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGN1ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlDdXJzb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgImN1cnNvciBpcyBub3QgaW5zdGFuY2Ugb2YgTXlDdXJzb3IiKQogCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcihmYWN0b3J5PU15Q3Vyc29yKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQrNSBhcyBmb28iKQogICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShyb3csCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAicm93IGlzIG5vdCBpbnN0YW5jZSBvZiBkaWN0IikKICAgICAgICAgY3VyLmNsb3NlKCkKQEAgLTg3LDI4ICs4NywyOCBAQAogICAgIGRlZiBDaGVja0N1c3RvbUZhY3Rvcnkoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gbGFtYmRhIGN1ciwgcm93OiBsaXN0KHJvdykKICAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEsIDIiKS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHJvdywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgaXMgbm90IGluc3RhbmNlIG9mIGxpc3QiKQogCiAgICAgZGVmIENoZWNrU3FsaXRlUm93SW5kZXgoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlLlJvdwogICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHJvdywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGUuUm93KSwKICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgaXMgbm90IGluc3RhbmNlIG9mIHNxbGl0ZS5Sb3ciKQogCiAgICAgICAgIGNvbDEsIGNvbDIgPSByb3dbImEiXSwgcm93WyJiIl0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbDEgPT0gMSwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdhJyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjb2wyID09IDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnYSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMSA9PSAxLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ2EnIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDIgPT0gMiwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdhJyIpCiAKICAgICAgICAgY29sMSwgY29sMiA9IHJvd1siQSJdLCByb3dbIkIiXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY29sMSA9PSAxLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ0EnIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbDIgPT0gMiwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdCJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2wxID09IDEsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQSciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMiA9PSAyLCAiYnkgbmFtZTogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gJ0InIikKIAogICAgICAgICBjb2wxLCBjb2wyID0gcm93WzBdLCByb3dbMV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbDEgPT0gMSwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbDIgPT0gMiwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDEgPT0gMSwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDIgPT0gMiwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAxIikKIAogICAgIGRlZiBDaGVja1NxbGl0ZVJvd0l0ZXIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgcm93IG9iamVjdCBpcyBpdGVyYWJsZSIiIgpAQCAtMTI4LDggKzEyOCw4IEBACiAgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlLlJvdwogICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCiAgICAgICAgIGQgPSBkaWN0KHJvdykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZFsiYSJdLCByb3dbImEiXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZFsiYiJdLCByb3dbImIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyJhIl0sIHJvd1siYSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbImIiXSwgcm93WyJiIl0pCiAKICAgICBkZWYgQ2hlY2tTcWxpdGVSb3dIYXNoQ21wKHNlbGYpOgogICAgICAgICAiIiJDaGVja3MgaWYgdGhlIHJvdyBvYmplY3QgY29tcGFyZXMgYW5kIGhhc2hlcyBjb3JyZWN0bHkiIiIKQEAgLTEzOCwxOCArMTM4LDE4IEBACiAgICAgICAgIHJvd18yID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMiBhcyBiIikuZmV0Y2hvbmUoKQogICAgICAgICByb3dfMyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxIGFzIGEsIDMgYXMgYiIpLmZldGNob25lKCkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocm93XzEgPT0gcm93XzEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyb3dfMSA9PSByb3dfMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJvd18yICE9IHJvd18zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocm93XzEgPT0gcm93XzEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dfMSA9PSByb3dfMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd18yICE9IHJvd18zKQogCi0gICAgICAgIHNlbGYuZmFpbElmKHJvd18xICE9IHJvd18xKQotICAgICAgICBzZWxmLmZhaWxJZihyb3dfMSAhPSByb3dfMikKLSAgICAgICAgc2VsZi5mYWlsSWYocm93XzIgPT0gcm93XzMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocm93XzEgIT0gcm93XzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocm93XzEgIT0gcm93XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocm93XzIgPT0gcm93XzMpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93XzEsIHJvd18yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChoYXNoKHJvd18xKSwgaGFzaChyb3dfMikpCi0gICAgICAgIHNlbGYuZmFpbElmRXF1YWwocm93XzEsIHJvd18zKQotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKGhhc2gocm93XzEpLCBoYXNoKHJvd18zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dfMSwgcm93XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChyb3dfMSksIGhhc2gocm93XzIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJvd18xLCByb3dfMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoKHJvd18xKSwgaGFzaChyb3dfMykpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKQEAgLTE2MSwyMSArMTYxLDIxIEBACiAgICAgZGVmIENoZWNrVW5pY29kZShzZWxmKToKICAgICAgICAgYXVzdHJpYSA9IHVuaWNvZGUoItZzdGVycmVpY2giLCAibGF0aW4xIikKICAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ID8iLCAoYXVzdHJpYSwpKS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKHJvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgdW5pY29kZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgdW5pY29kZSIpCiAKICAgICBkZWYgQ2hlY2tTdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnRleHRfZmFjdG9yeSA9IHN0cgogICAgICAgICBhdXN0cmlhID0gdW5pY29kZSgi1nN0ZXJyZWljaCIsICJsYXRpbjEiKQogICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUocm93WzBdKSA9PSBzdHIsICJ0eXBlIG9mIHJvd1swXSBtdXN0IGJlIHN0ciIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyb3dbMF0gPT0gYXVzdHJpYS5lbmNvZGUoInV0Zi04IiksICJjb2x1bW4gbXVzdCBlcXVhbCBvcmlnaW5hbCBkYXRhIGluIFVURi04IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocm93WzBdKSA9PSBzdHIsICJ0eXBlIG9mIHJvd1swXSBtdXN0IGJlIHN0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dbMF0gPT0gYXVzdHJpYS5lbmNvZGUoInV0Zi04IiksICJjb2x1bW4gbXVzdCBlcXVhbCBvcmlnaW5hbCBkYXRhIGluIFVURi04IikKIAogICAgIGRlZiBDaGVja0N1c3RvbShzZWxmKToKICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gbGFtYmRhIHg6IHVuaWNvZGUoeCwgInV0Zi04IiwgImlnbm9yZSIpCiAgICAgICAgIGF1c3RyaWEgPSB1bmljb2RlKCLWc3RlcnJlaWNoIiwgImxhdGluMSIpCiAgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGF1c3RyaWEuZW5jb2RlKCJsYXRpbjEiKSwpKS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKHJvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgdW5pY29kZSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyb3dbMF0uZW5kc3dpdGgodSJyZWljaCIpLCAiY29sdW1uIG11c3QgY29udGFpbiBvcmlnaW5hbCBkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocm93WzBdKSA9PSB1bmljb2RlLCAidHlwZSBvZiByb3dbMF0gbXVzdCBiZSB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd1swXS5lbmRzd2l0aCh1InJlaWNoIiksICJjb2x1bW4gbXVzdCBjb250YWluIG9yaWdpbmFsIGRhdGEiKQogCiAgICAgZGVmIENoZWNrT3B0aW1pemVkVW5pY29kZShzZWxmKToKICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gc3FsaXRlLk9wdGltaXplZFVuaWNvZGUKQEAgLTE4Myw4ICsxODMsOCBAQAogICAgICAgICBnZXJtYW55ID0gdW5pY29kZSgiRGV1dGNobGFuZCIpCiAgICAgICAgIGFfcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ID8iLCAoYXVzdHJpYSwpKS5mZXRjaG9uZSgpCiAgICAgICAgIGRfcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ID8iLCAoZ2VybWFueSwpKS5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGFfcm93WzBdKSA9PSB1bmljb2RlLCAidHlwZSBvZiBub24tQVNDSUkgcm93IG11c3QgYmUgdW5pY29kZSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGRfcm93WzBdKSA9PSBzdHIsICJ0eXBlIG9mIEFTQ0lJLW9ubHkgcm93IG11c3QgYmUgc3RyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYV9yb3dbMF0pID09IHVuaWNvZGUsICJ0eXBlIG9mIG5vbi1BU0NJSSByb3cgbXVzdCBiZSB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZF9yb3dbMF0pID09IHN0ciwgInR5cGUgb2YgQVNDSUktb25seSByb3cgbXVzdCBiZSBzdHIiKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9ob29rcy5weQppbmRleCA1NDdkYzY1Li4yNzQ1YzhiIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICAgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJYIiwgNDIpCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFR5cGVFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJwYXJhbWV0ZXIgbXVzdCBiZSBjYWxsYWJsZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInBhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlIikKIAogICAgIGRlZiBDaGVja0NyZWF0ZUNvbGxhdGlvbk5vdEFzY2lpKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoc3FsKS5mZXRjaGFsbCgpCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKICAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLmxvd2VyKCksICJubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLmxvd2VyKCksICJubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsIikKIAogICAgIGRlZiBDaGVja0NvbGxhdGlvblJlZ2lzdGVyVHdpY2Uoc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgICAgIGNvbi5leGVjdXRlKCIiIgogICAgICAgICAgICAgY3JlYXRlIHRhYmxlIGZvbyhhLCBiKQogICAgICAgICAgICAgIiIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocHJvZ3Jlc3NfY2FsbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9ncmVzc19jYWxscykKIAogCiAgICAgZGVmIENoZWNrT3Bjb2RlQ291bnQoc2VsZik6CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSBiYXIgKGEsIGIpCiAgICAgICAgICAgICAiIiIpCiAgICAgICAgIHNlY29uZF9jb3VudCA9IGxlbihwcm9ncmVzc19jYWxscykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZpcnN0X2NvdW50ID4gc2Vjb25kX2NvdW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlyc3RfY291bnQgPiBzZWNvbmRfY291bnQpCiAKICAgICBkZWYgQ2hlY2tDYW5jZWxPcGVyYXRpb24oc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIGNvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlcihwcm9ncmVzcywgMSkKICAgICAgICAgY29uLnNldF9wcm9ncmVzc19oYW5kbGVyKE5vbmUsIDEpCiAgICAgICAgIGNvbi5leGVjdXRlKCJzZWxlY3QgMSB1bmlvbiBzZWxlY3QgMiB1bmlvbiBzZWxlY3QgMyIpLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWN0aW9uLCAwLCAicHJvZ3Jlc3MgaGFuZGxlciB3YXMgbm90IGNsZWFyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbiwgMCwgInByb2dyZXNzIGhhbmRsZXIgd2FzIG5vdCBjbGVhcmVkIikKIAogZGVmIHN1aXRlKCk6CiAgICAgY29sbGF0aW9uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbGxhdGlvblRlc3RzLCAiQ2hlY2siKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9weTI1dGVzdHMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3B5MjV0ZXN0cy5weQppbmRleCBiY2UyNmI5Li43ZmQzYzBlIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3B5MjV0ZXN0cy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3B5MjV0ZXN0cy5weQpAQCAtNTQsMTkgKzU0LDE5IEBACiAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGMpIHZhbHVlcyAoJ2ZvbycpIikKICAgICAgICAgc2VsZi5jb24ucm9sbGJhY2soKQogICAgICAgICBjb3VudCA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGNvdW50LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCAxKQogCiAgICAgZGVmIENoZWNrQ29udGV4dE1hbmFnZXJSb2xsYmFjayhzZWxmKToKICAgICAgICAgIiIiSXMgYSByb2xsYmFjayBjYWxsZWQgaW4gdGhlIGNvbnRleHQgbWFuYWdlcj8iIiIKICAgICAgICAgZ2xvYmFsIGRpZF9yb2xsYmFjawotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChkaWRfcm9sbGJhY2ssIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZF9yb2xsYmFjaywgRmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jb246CiAgICAgICAgICAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChjKSB2YWx1ZXMgKDQpIikKICAgICAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGMpIHZhbHVlcyAoNCkiKQogICAgICAgICBleGNlcHQgc3FsaXRlLkludGVncml0eUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChkaWRfcm9sbGJhY2ssIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlkX3JvbGxiYWNrLCBUcnVlKQogCiBkZWYgc3VpdGUoKToKICAgICBjdHhfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29udGV4dFRlc3RzLCAiQ2hlY2siKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CmluZGV4IDJhNTE5ZGMuLjEwMzAwNjEgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKQEAgLTY1LDIwICs2NSwxMCBAQAogICAgIGRlZiBDaGVja0NvbHVtbk5hbWVXaXRoU3BhY2VzKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IDEgYXMgImZvbyBiYXIgW2RhdGV0aW1lXSInKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChjdXIuZGVzY3JpcHRpb25bMF1bMF0sICJmb28gYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZGVzY3JpcHRpb25bMF1bMF0sICJmb28gYmFyIikKIAogICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IDEgYXMgImZvbyBiYXoiJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAiZm9vIGJheiIpCi0KLSAgICBkZWYgQ2hlY2tTdGF0ZW1lbnRBdmFpbGFibGUoc2VsZik6Ci0gICAgICAgICMgcHlzcWxpdGUgdXAgdG8gMi4zLjIgY3Jhc2hlZCBvbiB0aGlzLCBiZWNhdXNlIHRoZSBhY3RpdmUgc3RhdGVtZW50IGhhbmRsZSB3YXMgbm90IGNoZWNrZWQKLSAgICAgICAgIyBiZWZvcmUgdHJ5aW5nIHRvIGZldGNoIGRhdGEgZnJvbSBpdC4gY2xvc2UoKSBkZXN0cm95cyB0aGUgYWN0aXZlIHN0YXRlbWVudCAuLi4KLSAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IiwgZGV0ZWN0X3R5cGVzPXNxbGl0ZS5QQVJTRV9ERUNMVFlQRVMpCi0gICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQotICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQgdW5pb24gc2VsZWN0IDUiKQotICAgICAgICBjdXIuY2xvc2UoKQotICAgICAgICBjdXIuZmV0Y2hvbmUoKQotICAgICAgICBjdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ci5kZXNjcmlwdGlvblswXVswXSwgImZvbyBiYXoiKQogCiAgICAgZGVmIENoZWNrU3RhdGVtZW50RmluYWxpemF0aW9uT25DbG9zZURiKHNlbGYpOgogICAgICAgICAjIHB5c3FsaXRlIHZlcnNpb25zIDw9IDIuMy4zIG9ubHkgZmluYWxpemVkIHN0YXRlbWVudHMgaW4gdGhlIHN0YXRlbWVudApAQCAtMTY3LDYgKzE1NywxMDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzZXRhdHRyLCBjb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJpc29sYXRpb25fbGV2ZWwiLCB1Ilx4ZTkiKQogCisgICAgZGVmIENoZWNrQ3Vyc29yQ29uc3RydWN0b3JDYWxsQ2hlY2soc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IGN1cnNvciBtZXRob2RzIGNoZWNrIHdldGhlciBiYXNlIGNsYXNzIF9faW5pdF9fIHdhcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBDdXJzb3Ioc3FsaXRlLkN1cnNvcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29uKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gQ3Vyc29yKGNvbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCA0KzUiKS5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25Db25zdHJ1Y3RvckNhbGxDaGVjayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY29ubmVjdGlvbiBtZXRob2RzIGNoZWNrIHdldGhlciBiYXNlIGNsYXNzIF9faW5pdF9fIHdhcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBDb25uZWN0aW9uKHNxbGl0ZS5Db25uZWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY29uID0gQ29ubmVjdGlvbigiOm1lbW9yeToiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ3Vyc29yUmVnaXN0cmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVmVyaWZpZXMgdGhhdCBzdWJjbGFzc2VkIGN1cnNvciBjbGFzc2VzIGFyZSBjb3JyZWN0bHkgcmVnaXN0ZXJlZCB3aXRoCisgICAgICAgIHRoZSBjb25uZWN0aW9uIG9iamVjdCwgdG9vLiAgKGZldGNoLWFjcm9zcy1yb2xsYmFjayBwcm9ibGVtKQorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgQ29ubmVjdGlvbihzcWxpdGUuQ29ubmVjdGlvbik6CisgICAgICAgICAgICBkZWYgY3Vyc29yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBDdXJzb3Ioc2VsZikKKworICAgICAgICBjbGFzcyBDdXJzb3Ioc3FsaXRlLkN1cnNvcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29uKToKKyAgICAgICAgICAgICAgICBzcWxpdGUuQ3Vyc29yLl9faW5pdF9fKHNlbGYsIGNvbikKKworICAgICAgICBjb24gPSBDb25uZWN0aW9uKCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyh4KSIpCisgICAgICAgIGN1ci5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gZm9vKHgpIHZhbHVlcyAoPykiLCBbKDMsKSwgKDQsKSwgKDUsKV0pCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgeCBmcm9tIGZvbyIpCisgICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBJbnRlcmZhY2VFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIEludGVyZmFjZUVycm9yIikKKworICAgIGRlZiBDaGVja0F1dG9Db21taXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IGNyZWF0aW5nIGEgY29ubmVjdGlvbiBpbiBhdXRvY29tbWl0IG1vZGUgd29ya3MuCisgICAgICAgIDIuNS4zIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIHNvIHRoYXQgdGhlc2UgY291bGQgbm8gbG9uZ2VyCisgICAgICAgIGJlIGNyZWF0ZWQuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBpc29sYXRpb25fbGV2ZWw9Tm9uZSkKKworICAgIGRlZiBDaGVja1ByYWdtYUF1dG9jb21taXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IHJ1bm5pbmcgYSBQUkFHTUEgc3RhdGVtZW50IHRoYXQgZG9lcyBhbiBhdXRvY29tbWl0IGRvZXMKKyAgICAgICAgd29yay4gVGhpcyBkaWQgbm90IHdvcmsgaW4gMi41LjMvMi41LjQuCisgICAgICAgICIiIgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyhiYXIpIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyhiYXIpIHZhbHVlcyAoNSkiKQorCisgICAgICAgIGN1ci5leGVjdXRlKCJwcmFnbWEgcGFnZV9zaXplIikKKyAgICAgICAgcm93ID0gY3VyLmZldGNob25lKCkKKworICAgIGRlZiBDaGVja1NldERpY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzgKKworICAgICAgICBJdCB3YXMgcG9zc2libGUgdG8gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IGNvdWxkIG5vdCBiZQorICAgICAgICBoYXNoZWQuIFJldHVybiBjb2RlcyBvZiBQeURpY3RfU2V0SXRlbSB3ZXJlIG5vdCBjaGVja2VkIHByb3Blcmx5LgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTm90SGFzaGFibGU6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICB2YXIgPSBOb3RIYXNoYWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSwgdmFyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuY29uLnNldF9hdXRob3JpemVyLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIsIHZhcikKKwogICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25DYWxsKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgQ2FsbCBhIGNvbm5lY3Rpb24gd2l0aCBhIG5vbi1zdHJpbmcgU1FMIHJlcXVlc3Q6IGNoZWNrIGVycm9yIGhhbmRsaW5nCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3RyYW5zYWN0aW9ucy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CmluZGV4IDljYzZlMTAuLmE3MzIyNTEgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CkBAIC01OSwxNCArNTksMTQgQEAKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0MihqKSIpCiAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAogICAgIGRlZiBDaGVja0luc2VydFN0YXJ0c1RyYW5zYWN0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3VyMi5mZXRjaGFsbCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAwKQogCiAgICAgZGVmIENoZWNrVXBkYXRlU3RhcnRzVHJhbnNhY3Rpb24oc2VsZik6CiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCkBAIC03NSw3ICs3NSw3IEBACiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJ1cGRhdGUgdGVzdCBzZXQgaT02IikKICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJlcyA9IHNlbGYuY3VyMi5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlcywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDUpCiAKICAgICBkZWYgQ2hlY2tEZWxldGVTdGFydHNUcmFuc2FjdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAKICAgICBkZWYgQ2hlY2tSZXBsYWNlU3RhcnRzVHJhbnNhY3Rpb24oc2VsZik6CiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCkBAIC05MywyNCArOTMsMjQgQEAKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoInJlcGxhY2UgaW50byB0ZXN0KGkpIHZhbHVlcyAoNikiKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJlc1swXVswXSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF1bMF0sIDUpCiAKICAgICBkZWYgQ2hlY2tUb2dnbGVBdXRvQ29tbWl0KHNlbGYpOgogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKICAgICAgICAgc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCA9IE5vbmUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsLCBOb25lKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAKICAgICAgICAgc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCA9ICJERUZFUlJFRCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCAsICJERUZFUlJFRCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCAsICJERUZFUlJFRCIpCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQogICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAKICAgICBkZWYgQ2hlY2tSYWlzZVRpbWVvdXQoc2VsZik6CiAgICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpOgpAQCAtMTQ4LDYgKzE0OCwyNiBAQAogICAgICAgICAjIE5PIHNlbGYuY29uMi5yb2xsYmFjaygpIEhFUkUhISEKICAgICAgICAgc2VsZi5jb24xLmNvbW1pdCgpCiAKKyAgICBkZWYgQ2hlY2tSb2xsYmFja0N1cnNvckNvbnNpc3RlbmN5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2tzIGlmIGN1cnNvcnMgb24gdGhlIGNvbm5lY3Rpb24gYXJlIHNldCBpbnRvIGEgInJlc2V0IiBzdGF0ZQorICAgICAgICB3aGVuIGEgcm9sbGJhY2sgaXMgZG9uZSBvbiB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoeCkiKQorICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKDUpIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCAxIHVuaW9uIHNlbGVjdCAyIHVuaW9uIHNlbGVjdCAzIikKKworICAgICAgICBjb24ucm9sbGJhY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnRlcmZhY2VFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3IsIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSW50ZXJmYWNlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorCiBjbGFzcyBTcGVjaWFsQ29tbWFuZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CmluZGV4IDRhNDY5ZTcuLmM1YWIzOWIgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQpAQCAtMjEsOSArMjEsMTQgQEAKICMgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgogIyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogCi1pbXBvcnQgemxpYiwgZGF0ZXRpbWUKK2ltcG9ydCBkYXRldGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKIAogY2xhc3MgU3FsaXRlVHlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0zOSwzOSArNDQsNjYgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChzKSB2YWx1ZXMgKD8pIiwgKHUi1nN0ZXJyZWljaCIsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHMgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHUi1nN0ZXJyZWljaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB1ItZzdGVycmVpY2giKQogCiAgICAgZGVmIENoZWNrU21hbGxJbnQoc2VsZik6CiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg/KSIsICg0MiwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCA0MikKIAogICAgIGRlZiBDaGVja0xhcmdlSW50KHNlbGYpOgogICAgICAgICBudW0gPSAyKio0MAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoPykiLCAobnVtLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCBudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCBudW0pCiAKICAgICBkZWYgQ2hlY2tGbG9hdChzZWxmKToKICAgICAgICAgdmFsID0gMy4xNAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGYpIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBmIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tCbG9iKHNlbGYpOgogICAgICAgICB2YWwgPSBidWZmZXIoIkd1Z2xodXBmIikKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChiKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgYiBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdmFsKQogCiAgICAgZGVmIENoZWNrVW5pY29kZUV4ZWN1dGUoc2VsZik6CiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUodSJzZWxlY3QgJ9ZzdGVycmVpY2gnIikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHUi1nN0ZXJyZWljaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB1ItZzdGVycmVpY2giKQorCisgICAgZGVmIENoZWNrTm9uVXRmOF9EZWZhdWx0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgPyIsIChjaHIoMTUwKSwpKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrTm9uVXRmOF9UZXh0RmFjdG9yeVN0cmluZyhzZWxmKToKKyAgICAgICAgb3JpZ190ZXh0X2ZhY3RvcnkgPSBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gc3RyCisgICAgICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgPyIsIChjaHIoMTUwKSwpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gb3JpZ190ZXh0X2ZhY3RvcnkKKworICAgIGRlZiBDaGVja05vblV0ZjhfVGV4dEZhY3RvcnlPcHRpbWl6ZWRVbmljb2RlKHNlbGYpOgorICAgICAgICBvcmlnX3RleHRfZmFjdG9yeSA9IHNlbGYuY29uLnRleHRfZmFjdG9yeQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gc3FsaXRlLk9wdGltaXplZFVuaWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgPyIsIChjaHIoMTUwKSwpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gb3JpZ190ZXh0X2ZhY3RvcnkKIAogY2xhc3MgRGVjbFR5cGVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNsYXNzIEZvbzoKQEAgLTEyMiwxNCArMTU0LDE0IEBACiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QocykgdmFsdWVzICg/KSIsICgiZm9vIiwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCdzZWxlY3QgcyBhcyAicyBbV1JPTkddIiBmcm9tIHRlc3QnKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKIAogICAgIGRlZiBDaGVja1NtYWxsSW50KHNlbGYpOgogICAgICAgICAjIGRlZmF1bHQKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKD8pIiwgKDQyLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIDQyKQogCiAgICAgZGVmIENoZWNrTGFyZ2VJbnQoc2VsZik6CiAgICAgICAgICMgZGVmYXVsdApAQCAtMTM3LDcgKzE2OSw3IEBACiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg/KSIsIChudW0sKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIG51bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIG51bSkKIAogICAgIGRlZiBDaGVja0Zsb2F0KHNlbGYpOgogICAgICAgICAjIGN1c3RvbQpAQCAtMTQ1LDIwICsxNzcsMjAgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgZiBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgNDcuMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIDQ3LjIpCiAKICAgICBkZWYgQ2hlY2tCb29sKHNlbGYpOgogICAgICAgICAjIGN1c3RvbQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGIpIHZhbHVlcyAoPykiLCAoRmFsc2UsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGIgZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYikgdmFsdWVzICg/KSIsIChUcnVlLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBiIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgVHJ1ZSkKIAogICAgIGRlZiBDaGVja1VuaWNvZGUoc2VsZik6CiAgICAgICAgICMgZGVmYXVsdApAQCAtMTY2LDE0ICsxOTgsMTQgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh1KSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdSBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdmFsKQogCiAgICAgZGVmIENoZWNrRm9vKHNlbGYpOgogICAgICAgICB2YWwgPSBEZWNsVHlwZXNUZXN0cy5Gb28oImJsYSIpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoZm9vKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgZm9vIGZyb20gdGVzdCIpCiAgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tVbnN1cHBvcnRlZFNlcShzZWxmKToKICAgICAgICAgY2xhc3MgQmFyOiBwYXNzCkBAIC0yMDMsMjAgKzIzNSwyMCBAQAogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGJpbikgdmFsdWVzICg/KSIsICh2YWwsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGJpbiBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdmFsKQogCiAgICAgZGVmIENoZWNrTnVtYmVyMShzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuMSkgdmFsdWVzICg1KSIpCiAgICAgICAgIHZhbHVlID0gc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IG4xIGZyb20gdGVzdCIpLmZldGNob25lKClbMF0KICAgICAgICAgIyBpZiB0aGUgY29udmVydGVyIGlzIG5vdCB1c2VkLCBpdCdzIGFuIGludCBpbnN0ZWFkIG9mIGEgZmxvYXQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWx1ZSksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBmbG9hdCkKIAogICAgIGRlZiBDaGVja051bWJlcjIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyB3ZXRoZXIgY29udmVydGVyIG5hbWVzIGFyZSBjdXQgb2ZmIGF0ICcoJyBjaGFyYWN0ZXJzIiIiCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobjIpIHZhbHVlcyAoNSkiKQogICAgICAgICB2YWx1ZSA9IHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBuMiBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpWzBdCiAgICAgICAgICMgaWYgdGhlIGNvbnZlcnRlciBpcyBub3QgdXNlZCwgaXQncyBhbiBpbnQgaW5zdGVhZCBvZiBhIGZsb2F0Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsdWUpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgZmxvYXQpCiAKIGNsYXNzIENvbE5hbWVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTI0NSwyOCArMjc3LDI4IEBACiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoeCkgdmFsdWVzICg/KSIsICgieHh4IiwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgeCBmcm9tIHRlc3QiKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgInh4eCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAieHh4IikKIAogICAgIGRlZiBDaGVja05vbmUoc2VsZik6CiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoeCkgdmFsdWVzICg/KSIsIChOb25lLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gdGVzdCIpCiAgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgTm9uZSkKIAogICAgIGRlZiBDaGVja0NvbE5hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoeCkgdmFsdWVzICg/KSIsICgieHh4IiwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCdzZWxlY3QgeCBhcyAieCBbYmFyXSIgZnJvbSB0ZXN0JykKICAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsICI8eHh4PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAiPHh4eD4iKQogCiAgICAgICAgICMgQ2hlY2sgaWYgdGhlIHN0cmlwcGluZyBvZiBjb2xuYW1lcyB3b3Jrcy4gRXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QKICAgICAgICAgIyB3aGl0ZXNwYWNlIHNob3VsZCBiZSBzdHJpcHBlZC4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc2VsZi5jdXIuZGVzY3JpcHRpb25bMF1bMF0sICJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1ci5kZXNjcmlwdGlvblswXVswXSwgIngiKQogCiAgICAgZGVmIENoZWNrQ2FzZUluQ29udmVydGVyTmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiIiJzZWxlY3QgJ290aGVyJyBhcyAieCBbYjFiMV1cIiIiIikKICAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsICJNQVJLRVIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgIk1BUktFUiIpCiAKICAgICBkZWYgQ2hlY2tDdXJzb3JEZXNjcmlwdGlvbk5vUm93KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTI3NCw3ICszMDYsNyBAQAogICAgICAgICBubyByb3cgcmV0dXJuZWQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgKiBmcm9tIHRlc3Qgd2hlcmUgMCA9IDEiKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5jdXIuZGVzY3JpcHRpb25bMF1bMF0gPT0gIngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAieCIpCiAKIGNsYXNzIE9iamVjdEFkYXB0YXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGNhc3Qob2JqKToKQEAgLTI5OCw4ICszMzAsOSBAQAogICAgIGRlZiBDaGVja0Nhc3RlcklzVXNlZChzZWxmKToKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0ID8iLCAoNCwpKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsKSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWwpLCBmbG9hdCkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQogY2xhc3MgQmluYXJ5Q29udmVydGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBjb252ZXJ0KHMpOgogICAgICAgICByZXR1cm4gemxpYi5kZWNvbXByZXNzKHMpCkBAIC0zMTUsNyArMzQ4LDcgQEAKICAgICBkZWYgQ2hlY2tCaW5hcnlJbnB1dEZvckNvbnZlcnRlcihzZWxmKToKICAgICAgICAgdGVzdGRhdGEgPSAiYWJjZGVmZyIgKiAxMAogICAgICAgICByZXN1bHQgPSBzZWxmLmNvbi5leGVjdXRlKCdzZWxlY3QgPyBhcyAieCBbYmluXSInLCAoYnVmZmVyKHpsaWIuY29tcHJlc3ModGVzdGRhdGEpKSwpKS5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRlc3RkYXRhLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHJlc3VsdCkKIAogY2xhc3MgRGF0ZVRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMzMyLDE0ICszNjUsMTQgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChkKSB2YWx1ZXMgKD8pIiwgKGQsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGQgZnJvbSB0ZXN0IikKICAgICAgICAgZDIgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQyKQogCiAgICAgZGVmIENoZWNrU3FsaXRlVGltZXN0YW1wKHNlbGYpOgogICAgICAgICB0cyA9IHNxbGl0ZS5UaW1lc3RhbXAoMjAwNCwgMiwgMTQsIDcsIDE1LCAwKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHRzKSB2YWx1ZXMgKD8pIiwgKHRzLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB0cyBmcm9tIHRlc3QiKQogICAgICAgICB0czIgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRzLCB0czIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMsIHRzMikKIAogICAgIGRlZiBDaGVja1NxbFRpbWVzdGFtcChzZWxmKToKICAgICAgICAgIyBUaGUgZGF0ZSBmdW5jdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIFNRTGl0ZSB2ZXJzaW9uIDMuMSBvciBsYXRlcgpAQCAtMzUxLDIyICszODQsMjIgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh0cykgdmFsdWVzIChjdXJyZW50X3RpbWVzdGFtcCkiKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdHMgZnJvbSB0ZXN0IikKICAgICAgICAgdHMgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodHMpLCBkYXRldGltZS5kYXRldGltZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHMueWVhciwgbm93LnllYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh0cyksIGRhdGV0aW1lLmRhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLnllYXIsIG5vdy55ZWFyKQogCiAgICAgZGVmIENoZWNrRGF0ZVRpbWVTdWJTZWNvbmRzKHNlbGYpOgogICAgICAgICB0cyA9IHNxbGl0ZS5UaW1lc3RhbXAoMjAwNCwgMiwgMTQsIDcsIDE1LCAwLCA1MDAwMDApCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodHMpIHZhbHVlcyAoPykiLCAodHMsKSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHRzIGZyb20gdGVzdCIpCiAgICAgICAgIHRzMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHMsIHRzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cywgdHMyKQogCiAgICAgZGVmIENoZWNrRGF0ZVRpbWVTdWJTZWNvbmRzRmxvYXRpbmdQb2ludChzZWxmKToKICAgICAgICAgdHMgPSBzcWxpdGUuVGltZXN0YW1wKDIwMDQsIDIsIDE0LCA3LCAxNSwgMCwgNTEwMjQxKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHRzKSB2YWx1ZXMgKD8pIiwgKHRzLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB0cyBmcm9tIHRlc3QiKQogICAgICAgICB0czIgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRzLCB0czIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMsIHRzMikKIAogZGVmIHN1aXRlKCk6CiAgICAgc3FsaXRlX3R5cGVfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoU3FsaXRlVHlwZVRlc3RzLCAiQ2hlY2siKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CmluZGV4IDQyNTU5ZTMuLjgwYjZmMGMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKQEAgLTE2MCwyOCArMTYwLDI4IEBACiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJudGV4dCgpIikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCB1bmljb2RlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJmb28iKQogCiAgICAgZGVmIENoZWNrRnVuY1JldHVyblVuaWNvZGUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJudW5pY29kZSgpIikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCB1bmljb2RlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIHUiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCB1ImJhciIpCiAKICAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuSW50KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybmludCgpIikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCBpbnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWwpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCA0MikKIAogICAgIGRlZiBDaGVja0Z1bmNSZXR1cm5GbG9hdChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm5mbG9hdCgpIikKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHlwZSh2YWwpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGZsb2F0KQogICAgICAgICBpZiB2YWwgPCAzLjEzOSBvciB2YWwgPiAzLjE0MToKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgdmFsdWUiKQogCkBAIC0xODksMTUgKzE4OSwxNSBAQAogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybm51bGwoKSIpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHR5cGUodmFsKSwgdHlwZShOb25lKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgdHlwZShOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIE5vbmUpCiAKICAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuQmxvYihzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm5ibG9iKCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIGJ1ZmZlcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCBidWZmZXIoImJsb2IiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGJ1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGJ1ZmZlcigiYmxvYiIpKQogCiAgICAgZGVmIENoZWNrRnVuY0V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKQEAgLTIwNiwzNyArMjA2LDM3IEBACiAgICAgICAgICAgICBjdXIuZmV0Y2hvbmUoKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgT3BlcmF0aW9uYWxFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgJ3VzZXItZGVmaW5lZCBmdW5jdGlvbiByYWlzZWQgZXhjZXB0aW9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAndXNlci1kZWZpbmVkIGZ1bmN0aW9uIHJhaXNlZCBleGNlcHRpb24nKQogCiAgICAgZGVmIENoZWNrUGFyYW1TdHJpbmcoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNzdHJpbmcoPykiLCAoImZvbyIsKSkKICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAogICAgIGRlZiBDaGVja1BhcmFtSW50KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGlzaW50KD8pIiwgKDQyLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tQYXJhbUZsb2F0KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGlzZmxvYXQoPykiLCAoMy4xNCwpKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQogCiAgICAgZGVmIENoZWNrUGFyYW1Ob25lKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGlzbm9uZSg/KSIsIChOb25lLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tQYXJhbUJsb2Ioc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNibG9iKD8pIiwgKGJ1ZmZlcigiYmxvYiIpLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKIGNsYXNzIEFnZ3JlZ2F0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0yODAsNyArMjgwLDcgQEAKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3Qgbm9zdGVwKHQpIGZyb20gdGVzdCIpCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBBdHRyaWJ1dGVFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgIkFnZ3JOb1N0ZXAgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnc3RlcCciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJBZ2dyTm9TdGVwIGluc3RhbmNlIGhhcyBubyBhdHRyaWJ1dGUgJ3N0ZXAnIikKIAogICAgIGRlZiBDaGVja0FnZ3JOb0ZpbmFsaXplKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMjg5LDcgKzI4OSw3IEBACiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCiAgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKIAogICAgIGRlZiBDaGVja0FnZ3JFeGNlcHRpb25JbkluaXQoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCiAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKICAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdfX2luaXRfXycgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnX19pbml0X18nIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluU3RlcChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ3N0ZXAnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ3N0ZXAnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluRmluYWxpemUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCkBAIC0zMTYsMzcgKzMxNiwzNyBAQAogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbVN0cihzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ3N0cicsID8pIiwgKCJmb28iLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbUludChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ2ludCcsID8pIiwgKDQyLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbUZsb2F0KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnZmxvYXQnLCA/KSIsICgzLjE0LCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbU5vbmUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgY2hlY2tUeXBlKCdOb25lJywgPykiLCAoTm9uZSwpKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQogCiAgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1CbG9iKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnYmxvYicsID8pIiwgKGJ1ZmZlcigiYmxvYiIpLCkpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tBZ2dyU3VtKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMzU0LDcgKzM1NCw3IEBACiAgICAgICAgIGN1ci5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKD8pIiwgWygxMCwpLCAoMjAsKSwgKDMwLCldKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IG15c3VtKGkpIGZyb20gdGVzdCIpCiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgNjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCA2MCkKIAogZGVmIGF1dGhvcml6ZXJfY2IoYWN0aW9uLCBhcmcxLCBhcmcyLCBkYm5hbWUsIHNvdXJjZSk6CiAgICAgaWYgYWN0aW9uICE9IHNxbGl0ZS5TUUxJVEVfU0VMRUNUOgpkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb21waWxlLnB5IGIvTGliL3NyZV9jb21waWxlLnB5CmluZGV4IDY1ZDJjY2YuLjJhMGM3NDUgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfY29tcGlsZS5weQorKysgYi9MaWIvc3JlX2NvbXBpbGUucHkKQEAgLTI0LDEyICsyNCw2IEBACiBkZWYgX2lkZW50aXR5ZnVuY3Rpb24oeCk6CiAgICAgcmV0dXJuIHgKIAotZGVmIHNldChzZXEpOgotICAgIHMgPSB7fQotICAgIGZvciBlbGVtIGluIHNlcToKLSAgICAgICAgc1tlbGVtXSA9IDEKLSAgICByZXR1cm4gcwotCiBfTElURVJBTF9DT0RFUyA9IHNldChbTElURVJBTCwgTk9UX0xJVEVSQUxdKQogX1JFUEVBVElOR19DT0RFUyA9IHNldChbUkVQRUFULCBNSU5fUkVQRUFULCBNQVhfUkVQRUFUXSkKIF9TVUNDRVNTX0NPREVTID0gc2V0KFtTVUNDRVNTLCBGQUlMVVJFXSkKZGlmZiAtLWdpdCBhL0xpYi9zcmVfcGFyc2UucHkgYi9MaWIvc3JlX3BhcnNlLnB5CmluZGV4IDQ3ODEwMTkuLjE4MmQxZWIgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfcGFyc2UucHkKKysrIGIvTGliL3NyZV9wYXJzZS5weQpAQCAtMTYsMTIgKzE2LDYgQEAKIAogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCiAKLWRlZiBzZXQoc2VxKToKLSAgICBzID0ge30KLSAgICBmb3IgZWxlbSBpbiBzZXE6Ci0gICAgICAgIHNbZWxlbV0gPSAxCi0gICAgcmV0dXJuIHMKLQogU1BFQ0lBTF9DSEFSUyA9ICIuXFxbeygpKis/XiR8IgogUkVQRUFUX0NIQVJTID0gIiorP3siCiAKZGlmZiAtLWdpdCBhL0xpYi9zc2wucHkgYi9MaWIvc3NsLnB5CmluZGV4IDNjMDc4M2YuLjcyZmJhZTUgMTAwNjQ0Ci0tLSBhL0xpYi9zc2wucHkKKysrIGIvTGliL3NzbC5weQpAQCAtNTksNiArNTksNyBAQAogCiBpbXBvcnQgX3NzbCAgICAgICAgICAgICAjIGlmIHdlIGNhbid0IGltcG9ydCBpdCwgbGV0IHRoZSBlcnJvciBwcm9wYWdhdGUKIAorZnJvbSBfc3NsIGltcG9ydCBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSLCBPUEVOU1NMX1ZFUlNJT05fSU5GTywgT1BFTlNTTF9WRVJTSU9OCiBmcm9tIF9zc2wgaW1wb3J0IFNTTEVycm9yCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAogZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9TU0x2MiwgUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywgUFJPVE9DT0xfVExTdjEKQEAgLTc0LDggKzc1LDcgQEAKICAgICAgU1NMX0VSUk9SX0VPRiwgXAogICAgICBTU0xfRVJST1JfSU5WQUxJRF9FUlJPUl9DT0RFCiAKLWZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIF9maWxlb2JqZWN0LCBfZGVsZWdhdGVfbWV0aG9kcwotZnJvbSBzb2NrZXQgaW1wb3J0IGVycm9yIGFzIHNvY2tldF9lcnJvcgorZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgX2ZpbGVvYmplY3QsIF9kZWxlZ2F0ZV9tZXRob2RzLCBlcnJvciBhcyBzb2NrZXRfZXJyb3IKIGZyb20gc29ja2V0IGltcG9ydCBnZXRuYW1laW5mbyBhcyBfZ2V0bmFtZWluZm8KIGltcG9ydCBiYXNlNjQgICAgICAgICMgZm9yIERFUi10by1QRU0gdHJhbnNsYXRpb24KIGltcG9ydCBlcnJubwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgY2VydF9yZXFzPUNFUlRfTk9ORSwKICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjIzLCBjYV9jZXJ0cz1Ob25lLAogICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1UcnVlLAotICAgICAgICAgICAgICAgICBzdXBwcmVzc19yYWdnZWRfZW9mcz1UcnVlKToKKyAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSwgY2lwaGVycz1Ob25lKToKICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIF9zb2NrPXNvY2suX3NvY2spCiAgICAgICAgICMgVGhlIGluaXRpYWxpemVyIGZvciBzb2NrZXQgb3ZlcnJpZGVzIHRoZSBtZXRob2RzIHNlbmQoKSwgcmVjdigpLCBldGMuCiAgICAgICAgICMgaW4gdGhlIGluc3RhbmNjZSwgd2hpY2ggd2UgZG9uJ3QgbmVlZCAtLSBidXQgd2Ugd2FudCB0byBwcm92aWRlIHRoZQpAQCAtMTEwLDEyICsxMTAsMTUgQEAKICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICMgbm8sIG5vIGNvbm5lY3Rpb24geWV0CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyB5ZXMsIGNyZWF0ZSB0aGUgU1NMIG9iamVjdAorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gX3NzbC5zc2x3cmFwKHNlbGYuX3NvY2ssIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGUsIGNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcywgc3NsX3ZlcnNpb24sIGNhX2NlcnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcywgc3NsX3ZlcnNpb24sIGNhX2NlcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMpCiAgICAgICAgICAgICBpZiBkb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCiAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKQEAgLTEyMyw2ICsxMjYsNyBAQAogICAgICAgICBzZWxmLmNlcnRfcmVxcyA9IGNlcnRfcmVxcwogICAgICAgICBzZWxmLnNzbF92ZXJzaW9uID0gc3NsX3ZlcnNpb24KICAgICAgICAgc2VsZi5jYV9jZXJ0cyA9IGNhX2NlcnRzCisgICAgICAgIHNlbGYuY2lwaGVycyA9IGNpcGhlcnMKICAgICAgICAgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCA9IGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0CiAgICAgICAgIHNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnMgPSBzdXBwcmVzc19yYWdnZWRfZW9mcwogICAgICAgICBzZWxmLl9tYWtlZmlsZV9yZWZzID0gMApAQCAtMTgyLDE0ICsxODYsMTYgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKHNlbGYsIGRhdGEsIGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2suc2VuZChkYXRhLCBmbGFncykKIAotICAgIGRlZiBzZW5kdG8oc2VsZiwgZGF0YSwgYWRkciwgZmxhZ3M9MCk6CisgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBmbGFnc19vcl9hZGRyLCBhZGRyPU5vbmUpOgogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZW5kdG8gbm90IGFsbG93ZWQgb24gaW5zdGFuY2VzIG9mICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQorICAgICAgICBlbGlmIGFkZHIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBmbGFnc19vcl9hZGRyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kdG8oc2VsZiwgZGF0YSwgYWRkciwgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgZmxhZ3Nfb3JfYWRkciwgYWRkcikKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEsIGZsYWdzPTApOgogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CkBAIC0yMTQsNyArMjIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18pCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkKGJ1ZmxlbikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzb2NrZXQucmVjdihzZWxmLCBidWZsZW4sIGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdihidWZsZW4sIGZsYWdzKQogCiAgICAgZGVmIHJlY3ZfaW50byhzZWxmLCBidWZmZXIsIG5ieXRlcz1Ob25lLCBmbGFncz0wKToKICAgICAgICAgaWYgYnVmZmVyIGFuZCAobmJ5dGVzIGlzIE5vbmUpOgpAQCAtMjMxLDIxICsyMzcsMjEgQEAKICAgICAgICAgICAgIGJ1ZmZlcls6dl0gPSB0bXBfYnVmZmVyCiAgICAgICAgICAgICByZXR1cm4gdgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5yZWN2X2ludG8oc2VsZiwgYnVmZmVyLCBuYnl0ZXMsIGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdl9pbnRvKGJ1ZmZlciwgbmJ5dGVzLCBmbGFncykKIAotICAgIGRlZiByZWN2ZnJvbShzZWxmLCBhZGRyLCBidWZsZW49MTAyNCwgZmxhZ3M9MCk6CisgICAgZGVmIHJlY3Zmcm9tKHNlbGYsIGJ1Zmxlbj0xMDI0LCBmbGFncz0wKToKICAgICAgICAgaWYgc2VsZi5fc3Nsb2JqOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVjdmZyb20gbm90IGFsbG93ZWQgb24gaW5zdGFuY2VzIG9mICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5yZWN2ZnJvbShzZWxmLCBhZGRyLCBidWZsZW4sIGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdmZyb20oYnVmbGVuLCBmbGFncykKIAogICAgIGRlZiByZWN2ZnJvbV9pbnRvKHNlbGYsIGJ1ZmZlciwgbmJ5dGVzPU5vbmUsIGZsYWdzPTApOgogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWN2ZnJvbV9pbnRvIG5vdCBhbGxvd2VkIG9uIGluc3RhbmNlcyBvZiAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzb2NrZXQucmVjdmZyb21faW50byhzZWxmLCBidWZmZXIsIG5ieXRlcywgZmxhZ3MpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2ZnJvbV9pbnRvKGJ1ZmZlciwgbmJ5dGVzLCBmbGFncykKIAogICAgIGRlZiBwZW5kaW5nKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CkBAIC0yNzgsMjEgKzI4NCwzNiBAQAogCiAgICAgICAgIHNlbGYuX3NzbG9iai5kb19oYW5kc2hha2UoKQogCi0gICAgZGVmIGNvbm5lY3Qoc2VsZiwgYWRkcik6Ci0KLSAgICAgICAgIiIiQ29ubmVjdHMgdG8gcmVtb3RlIEFERFIsIGFuZCB0aGVuIHdyYXBzIHRoZSBjb25uZWN0aW9uIGluCi0gICAgICAgIGFuIFNTTCBjaGFubmVsLiIiIgotCisgICAgZGVmIF9yZWFsX2Nvbm5lY3Qoc2VsZiwgYWRkciwgcmV0dXJuX2Vycm5vKToKICAgICAgICAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBzb2NrZXQgaXMgY2xpZW50LXNpZGUsIGFuZCBub3QKICAgICAgICAgIyBjb25uZWN0ZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwuICBXZSBjb25uZWN0IGl0LCB0aGVuIHdyYXAgaXQuCi0gICAgICAgIGlmIHNlbGYuX3NzbG9iajoKKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGVkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXR0ZW1wdCB0byBjb25uZWN0IGFscmVhZHktY29ubmVjdGVkIFNTTFNvY2tldCEiKQotICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQogICAgICAgICBzZWxmLl9zc2xvYmogPSBfc3NsLnNzbHdyYXAoc2VsZi5fc29jaywgRmFsc2UsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzLCBzZWxmLnNzbF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYV9jZXJ0cykKLSAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKLSAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FfY2VydHMsIHNlbGYuY2lwaGVycykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29ja2V0LmNvbm5lY3Qoc2VsZiwgYWRkcikKKyAgICAgICAgICAgIGlmIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQorICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiByZXR1cm5fZXJybm86CisgICAgICAgICAgICAgICAgcmV0dXJuIGUuZXJybm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQorICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgYWRkcik6CisgICAgICAgICIiIkNvbm5lY3RzIHRvIHJlbW90ZSBBRERSLCBhbmQgdGhlbiB3cmFwcyB0aGUgY29ubmVjdGlvbiBpbgorICAgICAgICBhbiBTU0wgY2hhbm5lbC4iIiIKKyAgICAgICAgc2VsZi5fcmVhbF9jb25uZWN0KGFkZHIsIEZhbHNlKQorCisgICAgZGVmIGNvbm5lY3RfZXgoc2VsZiwgYWRkcik6CisgICAgICAgICIiIkNvbm5lY3RzIHRvIHJlbW90ZSBBRERSLCBhbmQgdGhlbiB3cmFwcyB0aGUgY29ubmVjdGlvbiBpbgorICAgICAgICBhbiBTU0wgY2hhbm5lbC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfY29ubmVjdChhZGRyLCBUcnVlKQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKIApAQCAtMzA4LDYgKzMyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zZWxmLmNlcnRfcmVxcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2VsZi5jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1zZWxmLmNpcGhlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PXNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPXNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnMpLAogICAgICAgICAgICAgICAgIGFkZHIpCkBAIC0zMjksMTMgKzM1MSwxNCBAQAogICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBjZXJ0X3JlcXM9Q0VSVF9OT05FLAogICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPVBST1RPQ09MX1NTTHYyMywgY2FfY2VydHM9Tm9uZSwKICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1UcnVlLAotICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPVRydWUpOgorICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPVRydWUsIGNpcGhlcnM9Tm9uZSk6CiAKICAgICByZXR1cm4gU1NMU29ja2V0KHNvY2ssIGtleWZpbGU9a2V5ZmlsZSwgY2VydGZpbGU9Y2VydGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1zZXJ2ZXJfc2lkZSwgY2VydF9yZXFzPWNlcnRfcmVxcywKICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbF92ZXJzaW9uLCBjYV9jZXJ0cz1jYV9jZXJ0cywKICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PWRvX2hhbmRzaGFrZV9vbl9jb25uZWN0LAotICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9c3VwcHJlc3NfcmFnZ2VkX2VvZnMpCisgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc19yYWdnZWRfZW9mcz1zdXBwcmVzc19yYWdnZWRfZW9mcywKKyAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9Y2lwaGVycykKIAogCiAjIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMKQEAgLTQyOSw3ICs0NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1NTTHYyMywgTm9uZSkKICAgICB0cnk6CiAgICAgICAgIHNvY2suZ2V0cGVlcm5hbWUoKQotICAgIGV4Y2VwdDoKKyAgICBleGNlcHQgc29ja2V0X2Vycm9yOgogICAgICAgICAjIG5vLCBubyBjb25uZWN0aW9uIHlldAogICAgICAgICBwYXNzCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9zdHJpbmcucHkgYi9MaWIvc3RyaW5nLnB5CmluZGV4IDZmYWExZjAuLjljMGViZTEgMTAwNjQ0Ci0tLSBhL0xpYi9zdHJpbmcucHkKKysrIGIvTGliL3N0cmluZy5weQpAQCAtNTA4LDE1ICs1MDgsMTUgQEAKICAgICByZXR1cm4gcy5jYXBpdGFsaXplKCkKIAogIyBTdWJzdHJpbmcgcmVwbGFjZW1lbnQgKGdsb2JhbCkKLWRlZiByZXBsYWNlKHMsIG9sZCwgbmV3LCBtYXhzcGxpdD0tMSk6Ci0gICAgIiIicmVwbGFjZSAoc3RyLCBvbGQsIG5ld1ssIG1heHNwbGl0XSkgLT4gc3RyaW5nCitkZWYgcmVwbGFjZShzLCBvbGQsIG5ldywgbWF4cmVwbGFjZT0tMSk6CisgICAgIiIicmVwbGFjZSAoc3RyLCBvbGQsIG5ld1ssIG1heHJlcGxhY2VdKSAtPiBzdHJpbmcKIAogICAgIFJldHVybiBhIGNvcHkgb2Ygc3RyaW5nIHN0ciB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcKLSAgICBvbGQgcmVwbGFjZWQgYnkgbmV3LiBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgbWF4c3BsaXQgaXMKLSAgICBnaXZlbiwgb25seSB0aGUgZmlyc3QgbWF4c3BsaXQgb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLgorICAgIG9sZCByZXBsYWNlZCBieSBuZXcuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBtYXhyZXBsYWNlIGlzCisgICAgZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IG1heHJlcGxhY2Ugb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLgogCiAgICAgIiIiCi0gICAgcmV0dXJuIHMucmVwbGFjZShvbGQsIG5ldywgbWF4c3BsaXQpCisgICAgcmV0dXJuIHMucmVwbGFjZShvbGQsIG5ldywgbWF4cmVwbGFjZSkKIAogCiAjIFRyeSBpbXBvcnRpbmcgb3B0aW9uYWwgYnVpbHQtaW4gbW9kdWxlICJzdHJvcCIgLS0gaWYgaXQgZXhpc3RzLApAQCAtNjA3LDcgKzYwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gc3RyKHZhbHVlKQogICAgICAgICBlbGlmIGNvbnZlcnNpb24gaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiB2YWx1ZQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGNvbnZlcmlvbiBzcGVjaWZpZXIgezAhc30iLmZvcm1hdChjb252ZXJzaW9uKSkKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb252ZXJzaW9uIHNwZWNpZmllciB7MCFzfSIuZm9ybWF0KGNvbnZlcnNpb24pKQogCiAKICAgICAjIHJldHVybnMgYW4gaXRlcmFibGUgdGhhdCBjb250YWlucyB0dXBsZXMgb2YgdGhlIGZvcm06CmRpZmYgLS1naXQgYS9MaWIvc3VicHJvY2Vzcy5weSBiL0xpYi9zdWJwcm9jZXNzLnB5CmluZGV4IDU3Y2RiZTguLjJlY2RlMGIgMTAwNjQ0Ci0tLSBhL0xpYi9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi9zdWJwcm9jZXNzLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKIChXaW5kb3dzIG9ubHkpCiAKIAotVGhpcyBtb2R1bGUgYWxzbyBkZWZpbmVzIHR3byBzaG9ydGN1dCBmdW5jdGlvbnM6CitUaGlzIG1vZHVsZSBhbHNvIGRlZmluZXMgc29tZSBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKIGNhbGwoKnBvcGVuYXJncywgKiprd2FyZ3MpOgogICAgIFJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzLiAgV2FpdCBmb3IgY29tbWFuZCB0byBjb21wbGV0ZSwgdGhlbgpAQCAtMTI3LDYgKzEyNywxOCBAQAogCiAgICAgY2hlY2tfY2FsbChbImxzIiwgIi1sIl0pCiAKK2NoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0IGFzIGEgYnl0ZSBzdHJpbmcuCisKKyAgICBJZiB0aGUgZXhpdCBjb2RlIHdhcyBub24temVybyBpdCByYWlzZXMgYSBDYWxsZWRQcm9jZXNzRXJyb3IuICBUaGUKKyAgICBDYWxsZWRQcm9jZXNzRXJyb3Igb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlIHJldHVybmNvZGUKKyAgICBhdHRyaWJ1dGUgYW5kIG91dHB1dCBpbiB0aGUgb3V0cHV0IGF0dHJpYnV0ZS4KKworICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgUG9wZW4gY29uc3RydWN0b3IuICBFeGFtcGxlOgorCisgICAgb3V0cHV0ID0gY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCisKKwogRXhjZXB0aW9ucwogLS0tLS0tLS0tLQogRXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGJlZm9yZSB0aGUgbmV3IHByb2dyYW0gaGFzCkBAIC0xNDEsOCArMTUzLDggQEAKIAogQSBWYWx1ZUVycm9yIHdpbGwgYmUgcmFpc2VkIGlmIFBvcGVuIGlzIGNhbGxlZCB3aXRoIGludmFsaWQgYXJndW1lbnRzLgogCi1jaGVja19jYWxsKCkgd2lsbCByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IsIGlmIHRoZSBjYWxsZWQgcHJvY2VzcwotcmV0dXJucyBhIG5vbi16ZXJvIHJldHVybiBjb2RlLgorY2hlY2tfY2FsbCgpIGFuZCBjaGVja19vdXRwdXQoKSB3aWxsIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvciwgaWYgdGhlCitjYWxsZWQgcHJvY2VzcyByZXR1cm5zIGEgbm9uLXplcm8gcmV0dXJuIGNvZGUuCiAKIAogU2VjdXJpdHkKQEAgLTMzNyw3ICszNDksNyBAQAogcGlwZSA9IG9zLnBvcGVuKCJjbWQiLCAndycpCiAuLi4KIHJjID0gcGlwZS5jbG9zZSgpCi1pZiByYyAhPSBOb25lIGFuZCByYyAlIDI1NjoKK2lmIHJjIGlzIG5vdCBOb25lIGFuZCByYyAlIDI1NjoKICAgICBwcmludCAiVGhlcmUgd2VyZSBzb21lIGVycm9ycyIKID09PgogcHJvY2VzcyA9IFBvcGVuKCJjbWQiLCAndycsIHNoZWxsPVRydWUsIHN0ZGluPVBJUEUpCkBAIC0zODcsMTggKzM5OSwyMCBAQAogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCiBjbGFzcyBDYWxsZWRQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKLSAgICAiIiJUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIHByb2Nlc3MgcnVuIGJ5IGNoZWNrX2NhbGwoKSByZXR1cm5zCi0gICAgYSBub24temVybyBleGl0IHN0YXR1cy4gIFRoZSBleGl0IHN0YXR1cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUKLSAgICByZXR1cm5jb2RlIGF0dHJpYnV0ZS4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0dXJuY29kZSwgY21kKToKKyAgICAiIiJUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIHByb2Nlc3MgcnVuIGJ5IGNoZWNrX2NhbGwoKSBvcgorICAgIGNoZWNrX291dHB1dCgpIHJldHVybnMgYSBub24temVybyBleGl0IHN0YXR1cy4KKyAgICBUaGUgZXhpdCBzdGF0dXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHJldHVybmNvZGUgYXR0cmlidXRlOworICAgIGNoZWNrX291dHB1dCgpIHdpbGwgYWxzbyBzdG9yZSB0aGUgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXR1cm5jb2RlLCBjbWQsIG91dHB1dD1Ob25lKToKICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gcmV0dXJuY29kZQogICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCIgJSAoc2VsZi5jbWQsIHNlbGYucmV0dXJuY29kZSkKIAogCiBpZiBtc3dpbmRvd3M6Ci0gICAgZnJvbSBfc3VicHJvY2VzcyBpbXBvcnQgQ1JFQVRFX05FV19DT05TT0xFCiAgICAgaW1wb3J0IHRocmVhZGluZwogICAgIGltcG9ydCBtc3ZjcnQKICAgICBpbXBvcnQgX3N1YnByb2Nlc3MKQEAgLTQxMiwyNiArNDI2LDI4IEBACiAgICAgICAgIGVycm9yID0gSU9FcnJvcgogZWxzZToKICAgICBpbXBvcnQgc2VsZWN0CisgICAgX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICBpbXBvcnQgZXJybm8KICAgICBpbXBvcnQgZmNudGwKICAgICBpbXBvcnQgcGlja2xlCiAKLV9fYWxsX18gPSBbIlBvcGVuIiwgIlBJUEUiLCAiU1RET1VUIiwgImNhbGwiLCAiY2hlY2tfY2FsbCIsICJDYWxsZWRQcm9jZXNzRXJyb3IiXQorICAgICMgV2hlbiBzZWxlY3Qgb3IgcG9sbCBoYXMgaW5kaWNhdGVkIHRoYXQgdGhlIGZpbGUgaXMgd3JpdGFibGUsCisgICAgIyB3ZSBjYW4gd3JpdGUgdXAgdG8gX1BJUEVfQlVGIGJ5dGVzIHdpdGhvdXQgcmlzayBvZiBibG9ja2luZy4KKyAgICAjIFBPU0lYIGRlZmluZXMgUElQRV9CVUYgYXMgPj0gNTEyLgorICAgIF9QSVBFX0JVRiA9IGdldGF0dHIoc2VsZWN0LCAnUElQRV9CVUYnLCA1MTIpCisKKworX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwKKyAgICAgICAgICAgImNoZWNrX291dHB1dCIsICJDYWxsZWRQcm9jZXNzRXJyb3IiXQogCiBpZiBtc3dpbmRvd3M6Ci0gICAgX19hbGxfXy5hcHBlbmQoIkNSRUFURV9ORVdfQ09OU09MRSIpCisgICAgZnJvbSBfc3VicHJvY2VzcyBpbXBvcnQgQ1JFQVRFX05FV19DT05TT0xFLCBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVAKKyAgICBfX2FsbF9fLmV4dGVuZChbIkNSRUFURV9ORVdfQ09OU09MRSIsICJDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVAiXSkKIHRyeToKICAgICBNQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKIGV4Y2VwdDoKICAgICBNQVhGRCA9IDI1NgogCi0jIFRydWUvRmFsc2UgZG9lcyBub3QgZXhpc3Qgb24gMi4yLjAKLSN0cnk6Ci0jICAgIEZhbHNlCi0jZXhjZXB0IE5hbWVFcnJvcjoKLSMgICAgRmFsc2UgPSAwCi0jICAgIFRydWUgPSAxCi0KIF9hY3RpdmUgPSBbXQogCiBkZWYgX2NsZWFudXAoKToKQEAgLTQ4MSwxMiArNDk3LDQ1IEBACiAgICAgY2hlY2tfY2FsbChbImxzIiwgIi1sIl0pCiAgICAgIiIiCiAgICAgcmV0Y29kZSA9IGNhbGwoKnBvcGVuYXJncywgKiprd2FyZ3MpCi0gICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCi0gICAgaWYgY21kIGlzIE5vbmU6Ci0gICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQogICAgIGlmIHJldGNvZGU6CisgICAgICAgIGNtZCA9IGt3YXJncy5nZXQoImFyZ3MiKQorICAgICAgICBpZiBjbWQgaXMgTm9uZToKKyAgICAgICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQogICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kKQotICAgIHJldHVybiByZXRjb2RlCisgICAgcmV0dXJuIDAKKworCitkZWYgY2hlY2tfb3V0cHV0KCpwb3BlbmFyZ3MsICoqa3dhcmdzKToKKyAgICByIiIiUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0IGFzIGEgYnl0ZSBzdHJpbmcuCisKKyAgICBJZiB0aGUgZXhpdCBjb2RlIHdhcyBub24temVybyBpdCByYWlzZXMgYSBDYWxsZWRQcm9jZXNzRXJyb3IuICBUaGUKKyAgICBDYWxsZWRQcm9jZXNzRXJyb3Igb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlIHJldHVybmNvZGUKKyAgICBhdHRyaWJ1dGUgYW5kIG91dHB1dCBpbiB0aGUgb3V0cHV0IGF0dHJpYnV0ZS4KKworICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgUG9wZW4gY29uc3RydWN0b3IuICBFeGFtcGxlOgorCisgICAgPj4+IGNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQorICAgICdjcnctcnctcnctIDEgcm9vdCByb290IDEsIDMgT2N0IDE4ICAyMDA3IC9kZXYvbnVsbFxuJworCisgICAgVGhlIHN0ZG91dCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCBhcyBpdCBpcyB1c2VkIGludGVybmFsbHkuCisgICAgVG8gY2FwdHVyZSBzdGFuZGFyZCBlcnJvciBpbiB0aGUgcmVzdWx0LCB1c2Ugc3RkZXJyPVNURE9VVC4KKworICAgID4+PiBjaGVja19vdXRwdXQoWyIvYmluL3NoIiwgIi1jIiwKKyAgICAuLi4gICAgICAgICAgICAgICAibHMgLWwgbm9uX2V4aXN0ZW50X2ZpbGUgOyBleGl0IDAiXSwKKyAgICAuLi4gICAgICAgICAgICAgIHN0ZGVycj1TVERPVVQpCisgICAgJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJworICAgICIiIgorICAgIGlmICdzdGRvdXQnIGluIGt3YXJnczoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3Rkb3V0IGFyZ3VtZW50IG5vdCBhbGxvd2VkLCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uJykKKyAgICBwcm9jZXNzID0gUG9wZW4oc3Rkb3V0PVBJUEUsICpwb3BlbmFyZ3MsICoqa3dhcmdzKQorICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwcm9jZXNzLnBvbGwoKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIGNtZCA9IGt3YXJncy5nZXQoImFyZ3MiKQorICAgICAgICBpZiBjbWQgaXMgTm9uZToKKyAgICAgICAgICAgIGNtZCA9IHBvcGVuYXJnc1swXQorICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgY21kLCBvdXRwdXQ9b3V0cHV0KQorICAgIHJldHVybiBvdXRwdXQKIAogCiBkZWYgbGlzdDJjbWRsaW5lKHNlcSk6CkBAIC03MDAsNyArNzQ5LDcgQEAKICAgICAgICAgIyBXaW5kb3dzIG1ldGhvZHMKICAgICAgICAgIwogICAgICAgICBkZWYgX2dldF9oYW5kbGVzKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgICAgICAgICAiIiJDb25zdHJ1Y3QgYW5kIHJldHVybiB0dXBlbCB3aXRoIElPIG9iamVjdHM6CisgICAgICAgICAgICAiIiJDb25zdHJ1Y3QgYW5kIHJldHVybiB0dXBsZSB3aXRoIElPIG9iamVjdHM6CiAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSwgYzJwcmVhZCwgYzJwd3JpdGUsIGVycnJlYWQsIGVycndyaXRlCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGlmIHN0ZGluIGlzIE5vbmUgYW5kIHN0ZG91dCBpcyBOb25lIGFuZCBzdGRlcnIgaXMgTm9uZToKQEAgLTgwNCw4ICs4NTMsOCBAQAogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLmR3RmxhZ3MgfD0gX3N1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dXSU5ET1cKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IF9zdWJwcm9jZXNzLlNXX0hJREUKICAgICAgICAgICAgICAgICBjb21zcGVjID0gb3MuZW52aXJvbi5nZXQoIkNPTVNQRUMiLCAiY21kLmV4ZSIpCi0gICAgICAgICAgICAgICAgYXJncyA9IGNvbXNwZWMgKyAiIC9jICIgKyBhcmdzCi0gICAgICAgICAgICAgICAgaWYgKF9zdWJwcm9jZXNzLkdldFZlcnNpb24oKSA+PSAweDgwMDAwMDAwTCBvcgorICAgICAgICAgICAgICAgIGFyZ3MgPSAne30gL2MgInt9IicuZm9ybWF0IChjb21zcGVjLCBhcmdzKQorICAgICAgICAgICAgICAgIGlmIChfc3VicHJvY2Vzcy5HZXRWZXJzaW9uKCkgPj0gMHg4MDAwMDAwMCBvcgogICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShjb21zcGVjKS5sb3dlcigpID09ICJjb21tYW5kLmNvbSIpOgogICAgICAgICAgICAgICAgICAgICAjIFdpbjl4LCBvciB1c2luZyBjb21tYW5kLmNvbSBvbiBOVC4gV2UgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgdzl4cG9wZW4gaW50ZXJtZWRpYXRlIHByb2dyYW0uIEZvciBtb3JlCkBAIC04MzcsNiArODg2LDE5IEBACiAgICAgICAgICAgICAgICAgIyB0cmFuc2xhdGUgZXJybm8gdXNpbmcgX3N5c19lcnJsaXN0IChvciBzaW1saWFyKSwgYnV0CiAgICAgICAgICAgICAgICAgIyBob3cgY2FuIHRoaXMgYmUgZG9uZSBmcm9tIFB5dGhvbj8KICAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IoKmUuYXJncykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyBDaGlsZCBpcyBsYXVuY2hlZC4gQ2xvc2UgdGhlIHBhcmVudCdzIGNvcHkgb2YgdGhvc2UgcGlwZQorICAgICAgICAgICAgICAgICMgaGFuZGxlcyB0aGF0IG9ubHkgdGhlIGNoaWxkIHNob3VsZCBoYXZlIG9wZW4uICBZb3UgbmVlZAorICAgICAgICAgICAgICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlcyB0byB0aGUgd3JpdGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgICMgb3V0cHV0IHBpcGUgYXJlIG1haW50YWluZWQgaW4gdGhpcyBwcm9jZXNzIG9yIGVsc2UgdGhlCisgICAgICAgICAgICAgICAgIyBwaXBlIHdpbGwgbm90IGNsb3NlIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgZXhpdHMgYW5kIHRoZQorICAgICAgICAgICAgICAgICMgUmVhZEZpbGUgd2lsbCBoYW5nLgorICAgICAgICAgICAgICAgIGlmIHAyY3JlYWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHAyY3JlYWQuQ2xvc2UoKQorICAgICAgICAgICAgICAgIGlmIGMycHdyaXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjMnB3cml0ZS5DbG9zZSgpCisgICAgICAgICAgICAgICAgaWYgZXJyd3JpdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGVycndyaXRlLkNsb3NlKCkKIAogICAgICAgICAgICAgIyBSZXRhaW4gdGhlIHByb2Nlc3MgaGFuZGxlLCBidXQgY2xvc2UgdGhlIHRocmVhZCBoYW5kbGUKICAgICAgICAgICAgIHNlbGYuX2NoaWxkX2NyZWF0ZWQgPSBUcnVlCkBAIC04NDQsMjAgKzkwNiw2IEBACiAgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAogICAgICAgICAgICAgaHQuQ2xvc2UoKQogCi0gICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCi0gICAgICAgICAgICAjIGhhbmRsZXMgdGhhdCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgaGF2ZSBvcGVuLiAgWW91IG5lZWQKLSAgICAgICAgICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgbm8gaGFuZGxlcyB0byB0aGUgd3JpdGUgZW5kIG9mIHRoZQotICAgICAgICAgICAgIyBvdXRwdXQgcGlwZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGlzIHByb2Nlc3Mgb3IgZWxzZSB0aGUKLSAgICAgICAgICAgICMgcGlwZSB3aWxsIG5vdCBjbG9zZSB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGV4aXRzIGFuZCB0aGUKLSAgICAgICAgICAgICMgUmVhZEZpbGUgd2lsbCBoYW5nLgotICAgICAgICAgICAgaWYgcDJjcmVhZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBwMmNyZWFkLkNsb3NlKCkKLSAgICAgICAgICAgIGlmIGMycHdyaXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGMycHdyaXRlLkNsb3NlKCkKLSAgICAgICAgICAgIGlmIGVycndyaXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVycndyaXRlLkNsb3NlKCkKLQotCiAgICAgICAgIGRlZiBfaW50ZXJuYWxfcG9sbChzZWxmLCBfZGVhZHN0YXRlPU5vbmUsCiAgICAgICAgICAgICAgICAgX1dhaXRGb3JTaW5nbGVPYmplY3Q9X3N1YnByb2Nlc3MuV2FpdEZvclNpbmdsZU9iamVjdCwKICAgICAgICAgICAgICAgICBfV0FJVF9PQkpFQ1RfMD1fc3VicHJvY2Vzcy5XQUlUX09CSkVDVF8wLApAQCAtOTQwLDggKzk4OCwxMiBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBpZiBzaWcgPT0gc2lnbmFsLlNJR1RFUk06CiAgICAgICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQorICAgICAgICAgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQ19FVkVOVDoKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWduYWwuQ1RSTF9DX0VWRU5UKQorICAgICAgICAgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlQ6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgU0lHVEVSTSBpcyBzdXBwb3J0ZWQgb24gV2luZG93cyIpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgc2lnbmFsOiB7fSIuZm9ybWF0KHNpZykpCiAKICAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgICAgICIiIlRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MKQEAgLTk1NSw3ICsxMDA3LDcgQEAKICAgICAgICAgIyBQT1NJWCBtZXRob2RzCiAgICAgICAgICMKICAgICAgICAgZGVmIF9nZXRfaGFuZGxlcyhzZWxmLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICAgICAgIiIiQ29uc3RydWN0IGFuZCByZXR1cm4gdHVwZWwgd2l0aCBJTyBvYmplY3RzOgorICAgICAgICAgICAgIiIiQ29uc3RydWN0IGFuZCByZXR1cm4gdHVwbGUgd2l0aCBJTyBvYmplY3RzOgogICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUsIGMycHJlYWQsIGMycHdyaXRlLCBlcnJyZWFkLCBlcnJ3cml0ZQogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IE5vbmUsIE5vbmUKQEAgLTk5OSwxOSArMTA1MSwzMSBAQAogICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSkKIAogCi0gICAgICAgIGRlZiBfc2V0X2Nsb2V4ZWNfZmxhZyhzZWxmLCBmZCk6CisgICAgICAgIGRlZiBfc2V0X2Nsb2V4ZWNfZmxhZyhzZWxmLCBmZCwgY2xvZXhlYz1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjbG9leGVjX2ZsYWcgPSBmY250bC5GRF9DTE9FWEVDCiAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAgICAgY2xvZXhlY19mbGFnID0gMQogCiAgICAgICAgICAgICBvbGQgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBvbGQgfCBjbG9leGVjX2ZsYWcpCisgICAgICAgICAgICBpZiBjbG9leGVjOgorICAgICAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBvbGQgfCBjbG9leGVjX2ZsYWcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBvbGQgJiB+Y2xvZXhlY19mbGFnKQogCiAKICAgICAgICAgZGVmIF9jbG9zZV9mZHMoc2VsZiwgYnV0KToKLSAgICAgICAgICAgIG9zLmNsb3NlcmFuZ2UoMywgYnV0KQotICAgICAgICAgICAgb3MuY2xvc2VyYW5nZShidXQgKyAxLCBNQVhGRCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdjbG9zZXJhbmdlJyk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCBidXQpCisgICAgICAgICAgICAgICAgb3MuY2xvc2VyYW5nZShidXQgKyAxLCBNQVhGRCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDMsIE1BWEZEKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSBidXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKIAogICAgICAgICBkZWYgX2V4ZWN1dGVfY2hpbGQoc2VsZiwgYXJncywgZXhlY3V0YWJsZSwgcHJlZXhlY19mbiwgY2xvc2VfZmRzLApAQCAtMTA2NywyMSArMTEzMSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHVwIGZkcyBmb3IgY2hpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwMmNyZWFkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHAyY3JlYWQsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYzJwd3JpdGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoYzJwd3JpdGUsIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyd3JpdGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoZXJyd3JpdGUsIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9kdXAyKGEsIGIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGR1cDIoKSByZW1vdmVzIHRoZSBDTE9FWEVDIGZsYWcgYnV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgbXVzdCBkbyBpdCBvdXJzZWx2ZXMgaWYgZHVwMigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd291bGQgYmUgYSBuby1vcCAoaXNzdWUgIzEwODA2KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYSA9PSBiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2V0X2Nsb2V4ZWNfZmxhZyhhLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdXAyKHAyY3JlYWQsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R1cDIoYzJwd3JpdGUsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R1cDIoZXJyd3JpdGUsIDIpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmZCBtb3JlIHRoYW4gb25jZSwgb3Igc3RhbmRhcmQgZmRzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAyY3JlYWQgaXMgbm90IE5vbmUgYW5kIHAyY3JlYWQgbm90IGluICgwLCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHAyY3JlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYzJwd3JpdGUgaXMgbm90IE5vbmUgYW5kIGMycHdyaXRlIG5vdCBpbiAocDJjcmVhZCwgMSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGMycHdyaXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycndyaXRlIGlzIG5vdCBOb25lIGFuZCBlcnJ3cml0ZSBub3QgaW4gKHAyY3JlYWQsIGMycHdyaXRlLCAyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZXJyd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNhbWUgZmQgbW9yZSB0aGFuIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWQgPSB7IE5vbmUgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmZCBpbiBbcDJjcmVhZCwgYzJwd3JpdGUsIGVycndyaXRlXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmQgbm90IGluIGNsb3NlZCBhbmQgZmQgPiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWQuYWRkKGZkKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSBhbGwgb3RoZXIgZmRzLCBpZiBhc2tlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZV9mZHM6CkBAIC0xMTMzLDcgKzEyMDEsMTEgQEAKICAgICAgICAgICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3JlYWQpCiAKICAgICAgICAgICAgIGlmIGRhdGEgIT0gIiI6Ci0gICAgICAgICAgICAgICAgX2VpbnRyX3JldHJ5X2NhbGwob3Mud2FpdHBpZCwgc2VsZi5waWQsIDApCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfZWludHJfcmV0cnlfY2FsbChvcy53YWl0cGlkLCBzZWxmLnBpZCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDSElMRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgY2hpbGRfZXhjZXB0aW9uID0gcGlja2xlLmxvYWRzKGRhdGEpCiAgICAgICAgICAgICAgICAgZm9yIGZkIGluIChwMmN3cml0ZSwgYzJwcmVhZCwgZXJycmVhZCk6CiAgICAgICAgICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgpAQCAtMTE3OSwyNSArMTI1MSwxMTQgQEAKICAgICAgICAgICAgICIiIldhaXQgZm9yIGNoaWxkIHByb2Nlc3MgdG8gdGVybWluYXRlLiAgUmV0dXJucyByZXR1cm5jb2RlCiAgICAgICAgICAgICBhdHRyaWJ1dGUuIiIiCiAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF9laW50cl9yZXRyeV9jYWxsKG9zLndhaXRwaWQsIHNlbGYucGlkLCAwKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBfZWludHJfcmV0cnlfY2FsbChvcy53YWl0cGlkLCBzZWxmLnBpZCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDSElMRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIGlmIFNJR0NMRCBpcyBzZXQgdG8gYmUgaWdub3JlZCBvciB3YWl0aW5nCisgICAgICAgICAgICAgICAgICAgICMgZm9yIGNoaWxkIHByb2Nlc3NlcyBoYXMgb3RoZXJ3aXNlIGJlZW4gZGlzYWJsZWQgZm9yIG91cgorICAgICAgICAgICAgICAgICAgICAjIHByb2Nlc3MuICBUaGlzIGNoaWxkIGlzIGRlYWQsIHdlIGNhbid0IGdldCB0aGUgc3RhdHVzLgorICAgICAgICAgICAgICAgICAgICBzdHMgPSAwCiAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQogCiAKICAgICAgICAgZGVmIF9jb21tdW5pY2F0ZShzZWxmLCBpbnB1dCk6CisgICAgICAgICAgICBpZiBzZWxmLnN0ZGluOgorICAgICAgICAgICAgICAgICMgRmx1c2ggc3RkaW8gYnVmZmVyLiAgVGhpcyBtaWdodCBibG9jaywgaWYgdGhlIHVzZXIgaGFzCisgICAgICAgICAgICAgICAgIyBiZWVuIHdyaXRpbmcgdG8gLnN0ZGluIGluIGFuIHVuY29udHJvbGxlZCBmYXNoaW9uLgorICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpbnB1dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCisKKyAgICAgICAgICAgIGlmIF9oYXNfcG9sbDoKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX2NvbW11bmljYXRlX3dpdGhfcG9sbChpbnB1dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChpbnB1dCkKKworICAgICAgICAgICAgIyBBbGwgZGF0YSBleGNoYW5nZWQuICBUcmFuc2xhdGUgbGlzdHMgaW50byBzdHJpbmdzLgorICAgICAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0ZG91dCA9ICcnLmpvaW4oc3Rkb3V0KQorICAgICAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0ZGVyciA9ICcnLmpvaW4oc3RkZXJyKQorCisgICAgICAgICAgICAjIFRyYW5zbGF0ZSBuZXdsaW5lcywgaWYgcmVxdWVzdGVkLiAgV2UgY2Fubm90IGxldCB0aGUgZmlsZQorICAgICAgICAgICAgIyBvYmplY3QgZG8gdGhlIHRyYW5zbGF0aW9uOiBJdCBpcyBiYXNlZCBvbiBzdGRpbywgd2hpY2ggaXMKKyAgICAgICAgICAgICMgaW1wb3NzaWJsZSB0byBjb21iaW5lIHdpdGggc2VsZWN0ICh1bmxlc3MgZm9yY2luZyBubworICAgICAgICAgICAgIyBidWZmZXJpbmcpLgorICAgICAgICAgICAgaWYgc2VsZi51bml2ZXJzYWxfbmV3bGluZXMgYW5kIGhhc2F0dHIoZmlsZSwgJ25ld2xpbmVzJyk6CisgICAgICAgICAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl90cmFuc2xhdGVfbmV3bGluZXMoc3Rkb3V0KQorICAgICAgICAgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fdHJhbnNsYXRlX25ld2xpbmVzKHN0ZGVycikKKworICAgICAgICAgICAgc2VsZi53YWl0KCkKKyAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfcG9sbChzZWxmLCBpbnB1dCk6CisgICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCisgICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCisgICAgICAgICAgICBmZDJmaWxlID0ge30KKyAgICAgICAgICAgIGZkMm91dHB1dCA9IHt9CisKKyAgICAgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgICAgIGRlZiByZWdpc3Rlcl9hbmRfYXBwZW5kKGZpbGVfb2JqLCBldmVudG1hc2spOgorICAgICAgICAgICAgICAgIHBvbGxlci5yZWdpc3RlcihmaWxlX29iai5maWxlbm8oKSwgZXZlbnRtYXNrKQorICAgICAgICAgICAgICAgIGZkMmZpbGVbZmlsZV9vYmouZmlsZW5vKCldID0gZmlsZV9vYmoKKworICAgICAgICAgICAgZGVmIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCk6CisgICAgICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoZmQpCisgICAgICAgICAgICAgICAgZmQyZmlsZVtmZF0uY2xvc2UoKQorICAgICAgICAgICAgICAgIGZkMmZpbGUucG9wKGZkKQorCisgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKKyAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkaW4sIHNlbGVjdC5QT0xMT1VUKQorCisgICAgICAgICAgICBzZWxlY3RfUE9MTElOX1BPTExQUkkgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRvdXQsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKKyAgICAgICAgICAgICAgICBmZDJvdXRwdXRbc2VsZi5zdGRvdXQuZmlsZW5vKCldID0gc3Rkb3V0ID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRlcnIsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKKyAgICAgICAgICAgICAgICBmZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldID0gc3RkZXJyID0gW10KKworICAgICAgICAgICAgaW5wdXRfb2Zmc2V0ID0gMAorICAgICAgICAgICAgd2hpbGUgZmQyZmlsZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBzZWxlY3QuUE9MTE9VVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRbaW5wdXRfb2Zmc2V0IDogaW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQorICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGZkLCBjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlucHV0X29mZnNldCA+PSBsZW4oaW5wdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBtb2RlICYgc2VsZWN0X1BPTExJTl9QT0xMUFJJOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoZmQsIDQwOTYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCisgICAgICAgICAgICAgICAgICAgICAgICBmZDJvdXRwdXRbZmRdLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgaGFuZyB1cCBvciBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCisKKyAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfc2VsZWN0KHNlbGYsIGlucHV0KToKICAgICAgICAgICAgIHJlYWRfc2V0ID0gW10KICAgICAgICAgICAgIHdyaXRlX3NldCA9IFtdCiAgICAgICAgICAgICBzdGRvdXQgPSBOb25lICMgUmV0dXJuCiAgICAgICAgICAgICBzdGRlcnIgPSBOb25lICMgUmV0dXJuCiAKLSAgICAgICAgICAgIGlmIHNlbGYuc3RkaW46Ci0gICAgICAgICAgICAgICAgIyBGbHVzaCBzdGRpbyBidWZmZXIuICBUaGlzIG1pZ2h0IGJsb2NrLCBpZiB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAjIGJlZW4gd3JpdGluZyB0byAuc3RkaW4gaW4gYW4gdW5jb250cm9sbGVkIGZhc2hpb24uCi0gICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgaWYgaW5wdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlX3NldC5hcHBlbmQoc2VsZi5zdGRpbikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgorICAgICAgICAgICAgICAgIHdyaXRlX3NldC5hcHBlbmQoc2VsZi5zdGRpbikKICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgogICAgICAgICAgICAgICAgIHJlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZG91dCkKICAgICAgICAgICAgICAgICBzdGRvdXQgPSBbXQpAQCAtMTIxNSwxMCArMTM3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGluIHdsaXN0OgotICAgICAgICAgICAgICAgICAgICAjIFdoZW4gc2VsZWN0IGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgIyB3ZSBjYW4gd3JpdGUgdXAgdG8gUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrCi0gICAgICAgICAgICAgICAgICAgICMgYmxvY2tpbmcuICBQT1NJWCBkZWZpbmVzIFBJUEVfQlVGID49IDUxMgotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGlucHV0W2lucHV0X29mZnNldCA6IGlucHV0X29mZnNldCArIDUxMl0KKyAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBpbnB1dFtpbnB1dF9vZmZzZXQgOiBpbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCiAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSBvcy53cml0ZShzZWxmLnN0ZGluLmZpbGVubygpLCBjaHVuaykKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfb2Zmc2V0ICs9IGJ5dGVzX3dyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgaWYgaW5wdXRfb2Zmc2V0ID49IGxlbihpbnB1dCk6CkBAIC0xMjM5LDI1ICsxMzk3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfc2V0LnJlbW92ZShzZWxmLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmFwcGVuZChkYXRhKQogCi0gICAgICAgICAgICAjIEFsbCBkYXRhIGV4Y2hhbmdlZC4gIFRyYW5zbGF0ZSBsaXN0cyBpbnRvIHN0cmluZ3MuCi0gICAgICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gJycuam9pbihzdGRvdXQpCi0gICAgICAgICAgICBpZiBzdGRlcnIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3RkZXJyID0gJycuam9pbihzdGRlcnIpCi0KLSAgICAgICAgICAgICMgVHJhbnNsYXRlIG5ld2xpbmVzLCBpZiByZXF1ZXN0ZWQuICBXZSBjYW5ub3QgbGV0IHRoZSBmaWxlCi0gICAgICAgICAgICAjIG9iamVjdCBkbyB0aGUgdHJhbnNsYXRpb246IEl0IGlzIGJhc2VkIG9uIHN0ZGlvLCB3aGljaCBpcwotICAgICAgICAgICAgIyBpbXBvc3NpYmxlIHRvIGNvbWJpbmUgd2l0aCBzZWxlY3QgKHVubGVzcyBmb3JjaW5nIG5vCi0gICAgICAgICAgICAjIGJ1ZmZlcmluZykuCi0gICAgICAgICAgICBpZiBzZWxmLnVuaXZlcnNhbF9uZXdsaW5lcyBhbmQgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKLSAgICAgICAgICAgICAgICBpZiBzdGRvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3RyYW5zbGF0ZV9uZXdsaW5lcyhzdGRvdXQpCi0gICAgICAgICAgICAgICAgaWYgc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl90cmFuc2xhdGVfbmV3bGluZXMoc3RkZXJyKQotCi0gICAgICAgICAgICBzZWxmLndhaXQoKQogICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKIAorCiAgICAgICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWcpOgogICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcwogICAgICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvc3ltYm9sLnB5IGIvTGliL3N5bWJvbC5weQppbmRleCBmMjU5MDdiLi5jZjE3OWU1IDEwMDc1NQotLS0gYS9MaWIvc3ltYm9sLnB5CisrKyBiL0xpYi9zeW1ib2wucHkKQEAgLTUyLDcgKzUyLDcgQEAKIGZvcl9zdG10ID0gMjk1CiB0cnlfc3RtdCA9IDI5Ngogd2l0aF9zdG10ID0gMjk3Ci13aXRoX3ZhciA9IDI5OAord2l0aF9pdGVtID0gMjk4CiBleGNlcHRfY2xhdXNlID0gMjk5CiBzdWl0ZSA9IDMwMAogdGVzdGxpc3Rfc2FmZSA9IDMwMQpAQCAtNzQsNyArNzQsNyBAQAogcG93ZXIgPSAzMTcKIGF0b20gPSAzMTgKIGxpc3RtYWtlciA9IDMxOQotdGVzdGxpc3RfZ2V4cCA9IDMyMAordGVzdGxpc3RfY29tcCA9IDMyMAogbGFtYmRlZiA9IDMyMQogdHJhaWxlciA9IDMyMgogc3Vic2NyaXB0bGlzdCA9IDMyMwpAQCAtODIsMTYgKzgyLDE2IEBACiBzbGljZW9wID0gMzI1CiBleHBybGlzdCA9IDMyNgogdGVzdGxpc3QgPSAzMjcKLWRpY3RtYWtlciA9IDMyOAorZGljdG9yc2V0bWFrZXIgPSAzMjgKIGNsYXNzZGVmID0gMzI5CiBhcmdsaXN0ID0gMzMwCiBhcmd1bWVudCA9IDMzMQogbGlzdF9pdGVyID0gMzMyCiBsaXN0X2ZvciA9IDMzMwogbGlzdF9pZiA9IDMzNAotZ2VuX2l0ZXIgPSAzMzUKLWdlbl9mb3IgPSAzMzYKLWdlbl9pZiA9IDMzNworY29tcF9pdGVyID0gMzM1Citjb21wX2ZvciA9IDMzNgorY29tcF9pZiA9IDMzNwogdGVzdGxpc3QxID0gMzM4CiBlbmNvZGluZ19kZWNsID0gMzM5CiB5aWVsZF9leHByID0gMzQwCmRpZmYgLS1naXQgYS9MaWIvc3ltdGFibGUucHkgYi9MaWIvc3ltdGFibGUucHkKaW5kZXggMGEyNTA3My4uY2E3M2Y1OCAxMDA2NDQKLS0tIGEvTGliL3N5bXRhYmxlLnB5CisrKyBiL0xpYi9zeW10YWJsZS5weQpAQCAtMyw5ICszLDggQEAKIGltcG9ydCBfc3ltdGFibGUKIGZyb20gX3N5bXRhYmxlIGltcG9ydCAoVVNFLCBERUZfR0xPQkFMLCBERUZfTE9DQUwsIERFRl9QQVJBTSwKICAgICAgREVGX0lNUE9SVCwgREVGX0JPVU5ELCBPUFRfSU1QT1JUX1NUQVIsIE9QVF9FWEVDLCBPUFRfQkFSRV9FWEVDLAotICAgICBTQ09QRV9PRkYsIFNDT1BFX01BU0ssIEZSRUUsIEdMT0JBTF9JTVBMSUNJVCwgR0xPQkFMX0VYUExJQ0lUKQorICAgICBTQ09QRV9PRkYsIFNDT1BFX01BU0ssIEZSRUUsIEdMT0JBTF9JTVBMSUNJVCwgR0xPQkFMX0VYUExJQ0lULCBDRUxMLCBMT0NBTCkKIAotaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgogCiBfX2FsbF9fID0gWyJzeW10YWJsZSIsICJTeW1ib2xUYWJsZSIsICJDbGFzcyIsICJGdW5jdGlvbiIsICJTeW1ib2wiXQpAQCAtMTM4LDcgKzEzNyw5IEBACiAKICAgICBkZWYgZ2V0X2xvY2FscyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fX2xvY2FscyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fX2xvY2FscyA9IHNlbGYuX19pZGVudHNfbWF0Y2hpbmcobGFtYmRhIHg6eCAmIERFRl9CT1VORCkKKyAgICAgICAgICAgIGxvY3MgPSAoTE9DQUwsIENFTEwpCisgICAgICAgICAgICB0ZXN0ID0gbGFtYmRhIHg6ICgoeCA+PiBTQ09QRV9PRkYpICYgU0NPUEVfTUFTSykgaW4gbG9jcworICAgICAgICAgICAgc2VsZi5fX2xvY2FscyA9IHNlbGYuX19pZGVudHNfbWF0Y2hpbmcodGVzdCkKICAgICAgICAgcmV0dXJuIHNlbGYuX19sb2NhbHMKIAogICAgIGRlZiBnZXRfZ2xvYmFscyhzZWxmKToKQEAgLTE5MSwxNiArMTkyLDYgQEAKICAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgogICAgICAgICByZXR1cm4gYm9vbChzZWxmLl9fc2NvcGUgaW4gKEdMT0JBTF9JTVBMSUNJVCwgR0xPQkFMX0VYUExJQ0lUKSkKIAotICAgIGRlZiBpc192YXJhcmcoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLndhcm4oImlzX3ZhcmFyZygpIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgaXNfa2V5d29yZGFyZyhzZWxmKToKLSAgICAgICAgd2FybmluZ3Mud2FybigiaXNfa2V5d29yZGFyZygpIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQiLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KICAgICBkZWYgaXNfZGVjbGFyZWRfZ2xvYmFsKHNlbGYpOgogICAgICAgICByZXR1cm4gYm9vbChzZWxmLl9fc2NvcGUgPT0gR0xPQkFMX0VYUExJQ0lUKQogCkBAIC0yMTYsMTAgKzIwNyw2IEBACiAgICAgZGVmIGlzX2Fzc2lnbmVkKHNlbGYpOgogICAgICAgICByZXR1cm4gYm9vbChzZWxmLl9fZmxhZ3MgJiBERUZfTE9DQUwpCiAKLSAgICBkZWYgaXNfaW5fdHVwbGUoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLndhcm4oImlzX2luX3R1cGxlKCkgaXMgb2Jzb2xldGUgYW5kIHdpbGwgYmUgcmVtb3ZlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotCiAgICAgZGVmIGlzX25hbWVzcGFjZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlmIG5hbWUgYmluZGluZyBpbnRyb2R1Y2VzIG5ldyBuYW1lc3BhY2UuCiAKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDAyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc3lzY29uZmlnLnB5CkBAIC0wLDAgKzEsNzA1IEBACisiIiJQcm92aWRlIGFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorCisiIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBvcy5wYXRoIGltcG9ydCBwYXJkaXIsIHJlYWxwYXRoCisKK19JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgJ3Bvc2l4X3ByZWZpeCc6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7cGxhdGJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCisgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ3Bvc2l4X2hvbWUnOiB7CisgICAgICAgICdzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAncGxhdGluY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCisgICAgICAgICdkYXRhJyAgIDogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ250JzogeworICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9MaWInLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vTGliJywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAncGxhdGluY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCisgICAgICAgICdkYXRhJyAgIDogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ29zMic6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vTGliJywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCisgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9JbmNsdWRlJywKKyAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tiYXNlfS9JbmNsdWRlJywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAorICAgICAgICAnZGF0YScgICA6ICd7YmFzZX0nLAorICAgICAgICB9LAorICAgICdvczJfaG9tZSc6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgIH0sCisgICAgJ250X3VzZXInOiB7CisgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0vSW5jbHVkZScsCisgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vU2NyaXB0cycsCisgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICB9LAorICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgfSwKKyAgICAnb3N4X2ZyYW1ld29ya191c2VyJzogeworICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9uL3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUnLAorICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICB9LAorICAgIH0KKworX1NDSEVNRV9LRVlTID0gKCdzdGRsaWInLCAncGxhdHN0ZGxpYicsICdwdXJlbGliJywgJ3BsYXRsaWInLCAnaW5jbHVkZScsCisgICAgICAgICAgICAgICAgJ3NjcmlwdHMnLCAnZGF0YScpCitfUFlfVkVSU0lPTiA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0KK19QWV9WRVJTSU9OX1NIT1JUID0gc3lzLnZlcnNpb25bOjNdCitfUFlfVkVSU0lPTl9TSE9SVF9OT19ET1QgPSBfUFlfVkVSU0lPTlswXSArIF9QWV9WRVJTSU9OWzJdCitfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCitfQ09ORklHX1ZBUlMgPSBOb25lCitfVVNFUl9CQVNFID0gTm9uZQorCitkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVhbHBhdGgocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIHBhdGgKKworaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgX1BST0pFQ1RfQkFTRSA9IG9zLnBhdGguZGlybmFtZShfc2FmZV9yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCitlbHNlOgorICAgICMgc3lzLmV4ZWN1dGFibGUgY2FuIGJlIGVtcHR5IGlmIGFyZ3ZbMF0gaGFzIGJlZW4gY2hhbmdlZCBhbmQgUHl0aG9uIGlzCisgICAgIyB1bmFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgcHJvZ3JhbSBuYW1lCisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLmdldGN3ZCgpKQorCitpZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBfUFJPSkVDVF9CQVNFWy04Ol0ubG93ZXIoKToKKyAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsIHBhcmRpcikpCisjIFBDL1ZTNy4xCitpZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjXFx2IiBpbiBfUFJPSkVDVF9CQVNFWy0xMDpdLmxvd2VyKCk6CisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCisjIFBDL0FNRDY0CitpZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjYnVpbGRcXGFtZDY0IiBpbiBfUFJPSkVDVF9CQVNFWy0xNDpdLmxvd2VyKCk6CisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCisKK2RlZiBpc19weXRob25fYnVpbGQoKToKKyAgICBmb3IgZm4gaW4gKCJTZXR1cC5kaXN0IiwgIlNldHVwLmxvY2FsIik6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiTW9kdWxlcyIsIGZuKSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitfUFlUSE9OX0JVSUxEID0gaXNfcHl0aG9uX2J1aWxkKCkKKworaWYgX1BZVEhPTl9CVUlMRDoKKyAgICBmb3Igc2NoZW1lIGluICgncG9zaXhfcHJlZml4JywgJ3Bvc2l4X2hvbWUnKToKKyAgICAgICAgX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdWydpbmNsdWRlJ10gPSAne3Byb2plY3RiYXNlfS9JbmNsdWRlJworICAgICAgICBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV1bJ3BsYXRpbmNsdWRlJ10gPSAne3NyY2Rpcn0nCisKK2RlZiBfc3Vic3RfdmFycyhzLCBsb2NhbF92YXJzKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBzLmZvcm1hdCgqKmxvY2FsX3ZhcnMpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gcy5mb3JtYXQoKipvcy5lbnZpcm9uKQorICAgICAgICBleGNlcHQgS2V5RXJyb3IsIHZhcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCd7JXN9JyAlIHZhcikKKworZGVmIF9leHRlbmRfZGljdCh0YXJnZXRfZGljdCwgb3RoZXJfZGljdCk6CisgICAgdGFyZ2V0X2tleXMgPSB0YXJnZXRfZGljdC5rZXlzKCkKKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcl9kaWN0Lml0ZW1zKCk6CisgICAgICAgIGlmIGtleSBpbiB0YXJnZXRfa2V5czoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHRhcmdldF9kaWN0W2tleV0gPSB2YWx1ZQorCitkZWYgX2V4cGFuZF92YXJzKHNjaGVtZSwgdmFycyk6CisgICAgcmVzID0ge30KKyAgICBpZiB2YXJzIGlzIE5vbmU6CisgICAgICAgIHZhcnMgPSB7fQorICAgIF9leHRlbmRfZGljdCh2YXJzLCBnZXRfY29uZmlnX3ZhcnMoKSkKKworICAgIGZvciBrZXksIHZhbHVlIGluIF9JTlNUQUxMX1NDSEVNRVNbc2NoZW1lXS5pdGVtcygpOgorICAgICAgICBpZiBvcy5uYW1lIGluICgncG9zaXgnLCAnbnQnKToKKyAgICAgICAgICAgIHZhbHVlID0gb3MucGF0aC5leHBhbmR1c2VyKHZhbHVlKQorICAgICAgICByZXNba2V5XSA9IG9zLnBhdGgubm9ybXBhdGgoX3N1YnN0X3ZhcnModmFsdWUsIHZhcnMpKQorICAgIHJldHVybiByZXMKKworZGVmIF9nZXRfZGVmYXVsdF9zY2hlbWUoKToKKyAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICMgdGhlIGRlZmF1bHQgc2NoZW1lIGZvciBwb3NpeCBpcyBwb3NpeF9wcmVmaXgKKyAgICAgICAgcmV0dXJuICdwb3NpeF9wcmVmaXgnCisgICAgcmV0dXJuIG9zLm5hbWUKKworZGVmIF9nZXR1c2VyYmFzZSgpOgorICAgIGVudl9iYXNlID0gb3MuZW52aXJvbi5nZXQoIlBZVEhPTlVTRVJCQVNFIiwgTm9uZSkKKyAgICBkZWYgam9pbnVzZXIoKmFyZ3MpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigqYXJncykpCisKKyAgICAjIHdoYXQgYWJvdXQgJ29zMmVteCcsICdyaXNjb3MnID8KKyAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgIGJhc2UgPSBvcy5lbnZpcm9uLmdldCgiQVBQREFUQSIpIG9yICJ+IgorICAgICAgICByZXR1cm4gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcihiYXNlLCAiUHl0aG9uIikKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgZnJhbWV3b3JrID0gZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpCisgICAgICAgIGlmIGZyYW1ld29yazoKKyAgICAgICAgICAgIHJldHVybiBqb2ludXNlcigifiIsICJMaWJyYXJ5IiwgZnJhbWV3b3JrLCAiJWQuJWQiJSgKKyAgICAgICAgICAgICAgICBzeXMudmVyc2lvbl9pbmZvWzoyXSkpCisKKyAgICByZXR1cm4gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcigifiIsICIubG9jYWwiKQorCisKK2RlZiBfcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIHZhcnM9Tm9uZSk6CisgICAgIiIiUGFyc2UgYSBNYWtlZmlsZS1zdHlsZSBmaWxlLgorCisgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbmFtZS92YWx1ZSBwYWlycyBpcyByZXR1cm5lZC4gIElmIGFuCisgICAgb3B0aW9uYWwgZGljdGlvbmFyeSBpcyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgaXQgaXMKKyAgICB1c2VkIGluc3RlYWQgb2YgYSBuZXcgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICAjIFJlZ2V4ZXMgbmVlZGVkIGZvciBwYXJzaW5nIE1ha2VmaWxlIChhbmQgc2ltaWxhciBzeW50YXhlcywKKyAgICAjIGxpa2Ugb2xkLXN0eWxlIFNldHVwIGZpbGVzKS4KKyAgICBfdmFyaWFibGVfcnggPSByZS5jb21waWxlKCIoW2EtekEtWl1bYS16QS1aMC05X10rKVxzKj1ccyooLiopIikKKyAgICBfZmluZHZhcjFfcnggPSByZS5jb21waWxlKHIiXCRcKChbQS1aYS16XVtBLVphLXowLTlfXSopXCkiKQorICAgIF9maW5kdmFyMl9yeCA9IHJlLmNvbXBpbGUociJcJHsoW0EtWmEtel1bQS1aYS16MC05X10qKX0iKQorCisgICAgaWYgdmFycyBpcyBOb25lOgorICAgICAgICB2YXJzID0ge30KKyAgICBkb25lID0ge30KKyAgICBub3Rkb25lID0ge30KKworICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJykgb3IgbGluZS5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbSA9IF92YXJpYWJsZV9yeC5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbiwgdiA9IG0uZ3JvdXAoMSwgMikKKyAgICAgICAgICAgIHYgPSB2LnN0cmlwKCkKKyAgICAgICAgICAgICMgYCQkJyBpcyBhIGxpdGVyYWwgYCQnIGluIG1ha2UKKyAgICAgICAgICAgIHRtcHYgPSB2LnJlcGxhY2UoJyQkJywgJycpCisKKyAgICAgICAgICAgIGlmICIkIiBpbiB0bXB2OgorICAgICAgICAgICAgICAgIG5vdGRvbmVbbl0gPSB2CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdiA9IGludCh2KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIGluc2VydCBsaXRlcmFsIGAkJworICAgICAgICAgICAgICAgICAgICBkb25lW25dID0gdi5yZXBsYWNlKCckJCcsICckJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkb25lW25dID0gdgorCisgICAgIyBkbyB2YXJpYWJsZSBpbnRlcnBvbGF0aW9uIGhlcmUKKyAgICB3aGlsZSBub3Rkb25lOgorICAgICAgICBmb3IgbmFtZSBpbiBub3Rkb25lLmtleXMoKToKKyAgICAgICAgICAgIHZhbHVlID0gbm90ZG9uZVtuYW1lXQorICAgICAgICAgICAgbSA9IF9maW5kdmFyMV9yeC5zZWFyY2godmFsdWUpIG9yIF9maW5kdmFyMl9yeC5zZWFyY2godmFsdWUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIG4gPSBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbiBpbiBkb25lOgorICAgICAgICAgICAgICAgICAgICBpdGVtID0gc3RyKGRvbmVbbl0pCisgICAgICAgICAgICAgICAgZWxpZiBuIGluIG5vdGRvbmU6CisgICAgICAgICAgICAgICAgICAgICMgZ2V0IGl0IG9uIGEgc3Vic2VxdWVudCByb3VuZAorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxpZiBuIGluIG9zLmVudmlyb246CisgICAgICAgICAgICAgICAgICAgICMgZG8gaXQgbGlrZSBtYWtlOiBmYWxsIGJhY2sgdG8gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG9zLmVudmlyb25bbl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkb25lW25dID0gaXRlbSA9ICIiCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIGFmdGVyID0gdmFsdWVbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbOm0uc3RhcnQoKV0gKyBpdGVtICsgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgIiQiIGluIGFmdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgbm90ZG9uZVtuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6IHZhbHVlID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZVtuYW1lXSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZVtuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgbm90ZG9uZVtuYW1lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGJvZ3VzIHZhcmlhYmxlIHJlZmVyZW5jZTsganVzdCBkcm9wIGl0IHNpbmNlIHdlIGNhbid0IGRlYWwKKyAgICAgICAgICAgICAgICBkZWwgbm90ZG9uZVtuYW1lXQorICAgICMgc3RyaXAgc3B1cmlvdXMgc3BhY2VzCisgICAgZm9yIGssIHYgaW4gZG9uZS5pdGVtcygpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHN0cik6CisgICAgICAgICAgICBkb25lW2tdID0gdi5zdHJpcCgpCisKKyAgICAjIHNhdmUgdGhlIHJlc3VsdHMgaW4gdGhlIGdsb2JhbCBkaWN0aW9uYXJ5CisgICAgdmFycy51cGRhdGUoZG9uZSkKKyAgICByZXR1cm4gdmFycworCisKK2RlZiBfZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CisgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiTWFrZWZpbGUiKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKSwgImNvbmZpZyIsICJNYWtlZmlsZSIpCisKKworZGVmIF9pbml0X3Bvc2l4KHZhcnMpOgorICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgUE9TSVggc3lzdGVtcy4iIiIKKyAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBNYWtlZmlsZToKKyAgICBtYWtlZmlsZSA9IF9nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQorICAgIHRyeToKKyAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQorICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBtYWtlZmlsZQorICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgorICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisKKyAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgorICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKKyAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCisgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGNvbmZpZ19oCisgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKworICAgICMgT24gTWFjT1NYIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHNldHRpbmcgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgIyBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6IGNvbmZpZ3VyZSBiYXNlcyBzb21lIGNob2ljZXMgb24gaXQgc28KKyAgICAjIGl0IG5lZWRzIHRvIGJlIGNvbXBhdGlibGUuCisgICAgIyBJZiBpdCBpc24ndCBzZXQgd2Ugc2V0IGl0IHRvIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcgaW4gdmFyczoKKyAgICAgICAgY2ZnX3RhcmdldCA9IHZhcnNbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCisgICAgICAgIGN1cl90YXJnZXQgPSBvcy5nZXRlbnYoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcsICcnKQorICAgICAgICBpZiBjdXJfdGFyZ2V0ID09ICcnOgorICAgICAgICAgICAgY3VyX3RhcmdldCA9IGNmZ190YXJnZXQKKyAgICAgICAgICAgIG9zLnB1dGVudignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgY2ZnX3RhcmdldCkKKyAgICAgICAgZWxpZiBtYXAoaW50LCBjZmdfdGFyZ2V0LnNwbGl0KCcuJykpID4gbWFwKGludCwgY3VyX3RhcmdldC5zcGxpdCgnLicpKToKKyAgICAgICAgICAgIG1zZyA9ICgnJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBtaXNtYXRjaDogbm93ICIlcyIgYnV0ICIlcyIgJworICAgICAgICAgICAgICAgICAgICdkdXJpbmcgY29uZmlndXJlJyAlIChjdXJfdGFyZ2V0LCBjZmdfdGFyZ2V0KSkKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorCisgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCisgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAorICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgorICAgIGlmIF9QWVRIT05fQlVJTEQ6CisgICAgICAgIHZhcnNbJ0xEU0hBUkVEJ10gPSB2YXJzWydCTERTSEFSRUQnXQorCitkZWYgX2luaXRfbm9uX3Bvc2l4KHZhcnMpOgorICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgTlQiIiIKKyAgICAjIHNldCBiYXNpYyBpbnN0YWxsIGRpcmVjdG9yaWVzCisgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCisgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQorICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQorICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKKyAgICB2YXJzWydFWEUnXSA9ICcuZXhlJworICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVAorICAgIHZhcnNbJ0JJTkRJUiddID0gb3MucGF0aC5kaXJuYW1lKF9zYWZlX3JlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKworIworIyBwdWJsaWMgQVBJcworIworCisKK2RlZiBwYXJzZV9jb25maWdfaChmcCwgdmFycz1Ob25lKToKKyAgICAiIiJQYXJzZSBhIGNvbmZpZy5oLXN0eWxlIGZpbGUuCisKKyAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBuYW1lL3ZhbHVlIHBhaXJzIGlzIHJldHVybmVkLiAgSWYgYW4KKyAgICBvcHRpb25hbCBkaWN0aW9uYXJ5IGlzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpdCBpcworICAgIHVzZWQgaW5zdGVhZCBvZiBhIG5ldyBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGlmIHZhcnMgaXMgTm9uZToKKyAgICAgICAgdmFycyA9IHt9CisgICAgZGVmaW5lX3J4ID0gcmUuY29tcGlsZSgiI2RlZmluZSAoW0EtWl1bQS1aYS16MC05X10rKSAoLiopXG4iKQorICAgIHVuZGVmX3J4ID0gcmUuY29tcGlsZSgiL1sqXSAjdW5kZWYgKFtBLVpdW0EtWmEtejAtOV9dKykgWypdL1xuIikKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbSA9IGRlZmluZV9yeC5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbiwgdiA9IG0uZ3JvdXAoMSwgMikKKyAgICAgICAgICAgIHRyeTogdiA9IGludCh2KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIHZhcnNbbl0gPSB2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gdW5kZWZfcngubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgdmFyc1ttLmdyb3VwKDEpXSA9IDAKKyAgICByZXR1cm4gdmFycworCitkZWYgZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCk6CisgICAgIiIiUmV0dXJucyB0aGUgcGF0aCBvZiBweWNvbmZpZy5oLiIiIgorICAgIGlmIF9QWVRIT05fQlVJTEQ6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgICAgIGluY19kaXIgPSBvcy5wYXRoLmpvaW4oX1BST0pFQ1RfQkFTRSwgIlBDIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluY19kaXIgPSBfUFJPSkVDVF9CQVNFCisgICAgZWxzZToKKyAgICAgICAgaW5jX2RpciA9IGdldF9wYXRoKCdwbGF0aW5jbHVkZScpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcpCisKK2RlZiBnZXRfc2NoZW1lX25hbWVzKCk6CisgICAgIiIiUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHNjaGVtZXMgbmFtZXMuIiIiCisgICAgc2NoZW1lcyA9IF9JTlNUQUxMX1NDSEVNRVMua2V5cygpCisgICAgc2NoZW1lcy5zb3J0KCkKKyAgICByZXR1cm4gdHVwbGUoc2NoZW1lcykKKworZGVmIGdldF9wYXRoX25hbWVzKCk6CisgICAgIiIiUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhdGhzIG5hbWVzLiIiIgorICAgIHJldHVybiBfU0NIRU1FX0tFWVMKKworZGVmIGdldF9wYXRocyhzY2hlbWU9X2dldF9kZWZhdWx0X3NjaGVtZSgpLCB2YXJzPU5vbmUsIGV4cGFuZD1UcnVlKToKKyAgICAiIiJSZXR1cm5zIGEgbWFwcGluZyBjb250YWluaW5nIGFuIGluc3RhbGwgc2NoZW1lLgorCisgICAgYGBzY2hlbWVgYCBpcyB0aGUgaW5zdGFsbCBzY2hlbWUgbmFtZS4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsCisgICAgcmV0dXJuIHRoZSBkZWZhdWx0IHNjaGVtZSBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisgICAgIiIiCisgICAgaWYgZXhwYW5kOgorICAgICAgICByZXR1cm4gX2V4cGFuZF92YXJzKHNjaGVtZSwgdmFycykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdCisKK2RlZiBnZXRfcGF0aChuYW1lLCBzY2hlbWU9X2dldF9kZWZhdWx0X3NjaGVtZSgpLCB2YXJzPU5vbmUsIGV4cGFuZD1UcnVlKToKKyAgICAiIiJSZXR1cm5zIGEgcGF0aCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzY2hlbWUuCisKKyAgICBgYHNjaGVtZWBgIGlzIHRoZSBpbnN0YWxsIHNjaGVtZSBuYW1lLgorICAgICIiIgorICAgIHJldHVybiBnZXRfcGF0aHMoc2NoZW1lLCB2YXJzLCBleHBhbmQpW25hbWVdCisKK2RlZiBnZXRfY29uZmlnX3ZhcnMoKmFyZ3MpOgorICAgICIiIldpdGggbm8gYXJndW1lbnRzLCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGFsbCBjb25maWd1cmF0aW9uCisgICAgdmFyaWFibGVzIHJlbGV2YW50IGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKworICAgIE9uIFVuaXgsIHRoaXMgbWVhbnMgZXZlcnkgdmFyaWFibGUgZGVmaW5lZCBpbiBQeXRob24ncyBpbnN0YWxsZWQgTWFrZWZpbGU7CisgICAgT24gV2luZG93cyBhbmQgTWFjIE9TIGl0J3MgYSBtdWNoIHNtYWxsZXIgc2V0LgorCisgICAgV2l0aCBhcmd1bWVudHMsIHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIHRoYXQgcmVzdWx0IGZyb20gbG9va2luZyB1cAorICAgIGVhY2ggYXJndW1lbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBnbG9iYWwgX0NPTkZJR19WQVJTCisgICAgaWYgX0NPTkZJR19WQVJTIGlzIE5vbmU6CisgICAgICAgIF9DT05GSUdfVkFSUyA9IHt9CisgICAgICAgICMgTm9ybWFsaXplZCB2ZXJzaW9ucyBvZiBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGFyZSBoYW5keSB0byBoYXZlOworICAgICAgICAjIGluIGZhY3QsIHRoZXNlIGFyZSB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgdXNlZCBtb3N0IHBsYWNlcyBpbiB0aGUKKyAgICAgICAgIyBEaXN0dXRpbHMuCisgICAgICAgIF9DT05GSUdfVkFSU1sncHJlZml4J10gPSBfUFJFRklYCisgICAgICAgIF9DT05GSUdfVkFSU1snZXhlY19wcmVmaXgnXSA9IF9FWEVDX1BSRUZJWAorICAgICAgICBfQ09ORklHX1ZBUlNbJ3B5X3ZlcnNpb24nXSA9IF9QWV9WRVJTSU9OCisgICAgICAgIF9DT05GSUdfVkFSU1sncHlfdmVyc2lvbl9zaG9ydCddID0gX1BZX1ZFUlNJT05fU0hPUlQKKyAgICAgICAgX0NPTkZJR19WQVJTWydweV92ZXJzaW9uX25vZG90J10gPSBfUFlfVkVSU0lPTlswXSArIF9QWV9WRVJTSU9OWzJdCisgICAgICAgIF9DT05GSUdfVkFSU1snYmFzZSddID0gX1BSRUZJWAorICAgICAgICBfQ09ORklHX1ZBUlNbJ3BsYXRiYXNlJ10gPSBfRVhFQ19QUkVGSVgKKyAgICAgICAgX0NPTkZJR19WQVJTWydwcm9qZWN0YmFzZSddID0gX1BST0pFQ1RfQkFTRQorCisgICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKToKKyAgICAgICAgICAgIF9pbml0X25vbl9wb3NpeChfQ09ORklHX1ZBUlMpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIF9pbml0X3Bvc2l4KF9DT05GSUdfVkFSUykKKworICAgICAgICAjIFNldHRpbmcgJ3VzZXJiYXNlJyBpcyBkb25lIGJlbG93IHRoZSBjYWxsIHRvIHRoZQorICAgICAgICAjIGluaXQgZnVuY3Rpb24gdG8gZW5hYmxlIHVzaW5nICdnZXRfY29uZmlnX3ZhcicgaW4KKyAgICAgICAgIyB0aGUgaW5pdC1mdW5jdGlvbi4KKyAgICAgICAgX0NPTkZJR19WQVJTWyd1c2VyYmFzZSddID0gX2dldHVzZXJiYXNlKCkKKworICAgICAgICBpZiAnc3JjZGlyJyBub3QgaW4gX0NPTkZJR19WQVJTOgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydzcmNkaXInXSA9IF9QUk9KRUNUX0JBU0UKKworICAgICAgICAjIENvbnZlcnQgc3JjZGlyIGludG8gYW4gYWJzb2x1dGUgcGF0aCBpZiBpdCBhcHBlYXJzIG5lY2Vzc2FyeS4KKyAgICAgICAgIyBOb3JtYWxseSBpdCBpcyByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgSG93ZXZlciwgZHVyaW5nCisgICAgICAgICMgdGVzdGluZywgZm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgYSBub24taW5zdGFsbGVkIHB5dGhvbgorICAgICAgICAjIGZyb20gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICBpZiBfUFlUSE9OX0JVSUxEIGFuZCBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICAgICBiYXNlID0gX1BST0pFQ1RfQkFTRQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjd2QgPSBOb25lCisgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguaXNhYnMoX0NPTkZJR19WQVJTWydzcmNkaXInXSkgYW5kCisgICAgICAgICAgICAgICAgYmFzZSAhPSBjd2QpOgorICAgICAgICAgICAgICAgICMgc3JjZGlyIGlzIHJlbGF0aXZlIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICMgYXMgdGhlIGV4ZWN1dGFibGUuIEFzc3VtZSBleGVjdXRhYmxlIGlzIGluIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5IGFuZCBtYWtlIHNyY2RpciBhYnNvbHV0ZS4KKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZSwgX0NPTkZJR19WQVJTWydzcmNkaXInXSkKKyAgICAgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ3NyY2RpciddID0gb3MucGF0aC5ub3JtcGF0aChzcmNkaXIpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAga2VybmVsX3ZlcnNpb24gPSBvcy51bmFtZSgpWzJdICMgS2VybmVsIHZlcnNpb24gKDguNC4zKQorICAgICAgICAgICAgbWFqb3JfdmVyc2lvbiA9IGludChrZXJuZWxfdmVyc2lvbi5zcGxpdCgnLicpWzBdKQorCisgICAgICAgICAgICBpZiBtYWpvcl92ZXJzaW9uIDwgODoKKyAgICAgICAgICAgICAgICAjIE9uIE1hYyBPUyBYIGJlZm9yZSAxMC40LCBjaGVjayBpZiAtYXJjaCBhbmQgLWlzeXNyb290CisgICAgICAgICAgICAgICAgIyBhcmUgaW4gQ0ZMQUdTIG9yIExERkxBR1MgYW5kIHJlbW92ZSB0aGVtIGlmIHRoZXkgYXJlLgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgd2hlbiBidWlsZGluZyBleHRlbnNpb25zIG9uIGEgMTAuMyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAjIHVzaW5nIGEgdW5pdmVyc2FsIGJ1aWxkIG9mIHB5dGhvbi4KKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluICgnTERGTEFHUycsICdCQVNFQ0ZMQUdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgb2YgZGVyaXZlZCB2YXJpYWJsZXMuIFRoZXNlIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0Y2hlZCB1cCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgJ0NGTEFHUycsICdQWV9DRkxBR1MnLCAnQkxEU0hBUkVEJyk6CisgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gX0NPTkZJR19WQVJTW2tleV0KKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1hcmNoXHMrXHcrXHMnLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICBmbGFncyA9IHJlLnN1YignLWlzeXNyb290IFteIFx0XSonLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICBfQ09ORklHX1ZBUlNba2V5XSA9IGZsYWdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGFyY2hpdGVjdHVyZSBmbGFncyB1c2luZworICAgICAgICAgICAgICAgICMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgIyBOT1RFOiBUaGlzIG5hbWUgd2FzIGludHJvZHVjZWQgYnkgQXBwbGUgaW4gT1NYIDEwLjUgYW5kCisgICAgICAgICAgICAgICAgIyBpcyB1c2VkIGJ5IHNldmVyYWwgc2NyaXB0aW5nIGxhbmd1YWdlcyBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgICAgICAgICAgIyB0aGF0IE9TIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgaWYgJ0FSQ0hGTEFHUycgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgYXJjaCA9IG9zLmVudmlyb25bJ0FSQ0hGTEFHUyddCisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gKCdMREZMQUdTJywgJ0JBU0VDRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG51bWJlciBvZiBkZXJpdmVkIHZhcmlhYmxlcy4gVGhlc2UgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRjaGVkIHVwIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAnQ0ZMQUdTJywgJ1BZX0NGTEFHUycsICdCTERTSEFSRUQnKToKKworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBfQ09ORklHX1ZBUlNba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1hcmNoXHMrXHcrXHMnLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyArICcgJyArIGFyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1trZXldID0gZmxhZ3MKKworICAgICAgICAgICAgICAgICMgSWYgd2UncmUgb24gT1NYIDEwLjUgb3IgbGF0ZXIgYW5kIHRoZSB1c2VyIHRyaWVzIHRvCisgICAgICAgICAgICAgICAgIyBjb21waWxlcyBhbiBleHRlbnNpb24gdXNpbmcgYW4gU0RLIHRoYXQgaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICAjIG9uIHRoZSBjdXJyZW50IG1hY2hpbmUgaXQgaXMgYmV0dGVyIHRvIG5vdCB1c2UgYW4gU0RLCisgICAgICAgICAgICAgICAgIyB0aGFuIHRvIGZhaWwuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIG1ham9yIHVzZWNhc2UgZm9yIHRoaXMgaXMgdXNlcnMgdXNpbmcgYSBQeXRob24ub3JnCisgICAgICAgICAgICAgICAgIyBiaW5hcnkgaW5zdGFsbGVyICBvbiBPU1ggMTAuNjogdGhhdCBpbnN0YWxsZXIgdXNlcworICAgICAgICAgICAgICAgICMgdGhlIDEwLjR1IFNESywgYnV0IHRoYXQgU0RLIGlzIG5vdCBpbnN0YWxsZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICMgd2hlbiB5b3UgaW5zdGFsbCBYY29kZS4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgQ0ZMQUdTID0gX0NPTkZJR19WQVJTLmdldCgnQ0ZMQUdTJywgJycpCisgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgnLWlzeXNyb290XHMrKFxTKyknLCBDRkxBR1MpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2RrID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2RrKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gKCdMREZMQUdTJywgJ0JBU0VDRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIG9mIGRlcml2ZWQgdmFyaWFibGVzLiBUaGVzZSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0Y2hlZCB1cCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDRkxBR1MnLCAnUFlfQ0ZMQUdTJywgJ0JMRFNIQVJFRCcpOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBfQ09ORklHX1ZBUlNba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gcmUuc3ViKCctaXN5c3Jvb3RccytcUysoXHN8JCknLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1trZXldID0gZmxhZ3MKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHZhbHMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgorICAgICAgICAgICAgdmFscy5hcHBlbmQoX0NPTkZJR19WQVJTLmdldChuYW1lKSkKKyAgICAgICAgcmV0dXJuIHZhbHMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX0NPTkZJR19WQVJTCisKK2RlZiBnZXRfY29uZmlnX3ZhcihuYW1lKToKKyAgICAiIiJSZXR1cm4gdGhlIHZhbHVlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIHVzaW5nIHRoZSBkaWN0aW9uYXJ5IHJldHVybmVkIGJ5CisgICAgJ2dldF9jb25maWdfdmFycygpJy4KKworICAgIEVxdWl2YWxlbnQgdG8gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCisgICAgIiIiCisgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQorCitkZWYgZ2V0X3BsYXRmb3JtKCk6CisgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKworICAgIFRoaXMgaXMgdXNlZCBtYWlubHkgdG8gZGlzdGluZ3Vpc2ggcGxhdGZvcm0tc3BlY2lmaWMgYnVpbGQgZGlyZWN0b3JpZXMgYW5kCisgICAgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbHQgZGlzdHJpYnV0aW9ucy4gIFR5cGljYWxseSBpbmNsdWRlcyB0aGUgT1MgbmFtZQorICAgIGFuZCB2ZXJzaW9uIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIChhcyBzdXBwbGllZCBieSAnb3MudW5hbWUoKScpLAorICAgIGFsdGhvdWdoIHRoZSBleGFjdCBpbmZvcm1hdGlvbiBpbmNsdWRlZCBkZXBlbmRzIG9uIHRoZSBPUzsgZWcuIGZvciBJUklYCisgICAgdGhlIGFyY2hpdGVjdHVyZSBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IChJUklYIG9ubHkgcnVucyBvbiBTR0kKKyAgICBoYXJkd2FyZSksIGJ1dCBmb3IgTGludXggdGhlIGtlcm5lbCB2ZXJzaW9uIGlzbid0IHBhcnRpY3VsYXJseQorICAgIGltcG9ydGFudC4KKworICAgIEV4YW1wbGVzIG9mIHJldHVybmVkIHZhbHVlczoKKyAgICAgICBsaW51eC1pNTg2CisgICAgICAgbGludXgtYWxwaGEgKD8pCisgICAgICAgc29sYXJpcy0yLjYtc3VuNHUKKyAgICAgICBpcml4LTUuMworICAgICAgIGlyaXg2NC02LjIKKworICAgIFdpbmRvd3Mgd2lsbCByZXR1cm4gb25lIG9mOgorICAgICAgIHdpbi1hbWQ2NCAoNjRiaXQgV2luZG93cyBvbiBBTUQ2NCAoYWthIHg4Nl82NCwgSW50ZWw2NCwgRU02NFQsIGV0YykKKyAgICAgICB3aW4taWE2NCAoNjRiaXQgV2luZG93cyBvbiBJdGFuaXVtKQorICAgICAgIHdpbjMyIChhbGwgb3RoZXJzIC0gc3BlY2lmaWNhbGx5LCBzeXMucGxhdGZvcm0gaXMgcmV0dXJuZWQpCisKKyAgICBGb3Igb3RoZXIgbm9uLVBPU0lYIHBsYXRmb3JtcywgY3VycmVudGx5IGp1c3QgcmV0dXJucyAnc3lzLnBsYXRmb3JtJy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICMgc25pZmYgc3lzLnZlcnNpb24gZm9yIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgcHJlZml4ID0gIiBiaXQgKCIKKyAgICAgICAgaSA9IHN5cy52ZXJzaW9uLmZpbmQocHJlZml4KQorICAgICAgICBpZiBpID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorICAgICAgICBqID0gc3lzLnZlcnNpb24uZmluZCgiKSIsIGkpCisgICAgICAgIGxvb2sgPSBzeXMudmVyc2lvbltpK2xlbihwcmVmaXgpOmpdLmxvd2VyKCkKKyAgICAgICAgaWYgbG9vayA9PSAnYW1kNjQnOgorICAgICAgICAgICAgcmV0dXJuICd3aW4tYW1kNjQnCisgICAgICAgIGlmIGxvb2sgPT0gJ2l0YW5pdW0nOgorICAgICAgICAgICAgcmV0dXJuICd3aW4taWE2NCcKKyAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorCisgICAgaWYgb3MubmFtZSAhPSAicG9zaXgiIG9yIG5vdCBoYXNhdHRyKG9zLCAndW5hbWUnKToKKyAgICAgICAgIyBYWFggd2hhdCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlPyBOVCBpcyBJbnRlbCBvciBBbHBoYSwKKyAgICAgICAgIyBNYWMgT1MgaXMgTTY4ayBvciBQUEMsIGV0Yy4KKyAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorCisgICAgIyBUcnkgdG8gZGlzdGluZ3Vpc2ggdmFyaW91cyBmbGF2b3VycyBvZiBVbml4CisgICAgb3NuYW1lLCBob3N0LCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lID0gb3MudW5hbWUoKQorCisgICAgIyBDb252ZXJ0IHRoZSBPUyBuYW1lIHRvIGxvd2VyY2FzZSwgcmVtb3ZlICcvJyBjaGFyYWN0ZXJzCisgICAgIyAodG8gYWNjb21tb2RhdGUgQlNEL09TKSwgYW5kIHRyYW5zbGF0ZSBzcGFjZXMgKGZvciAiUG93ZXIgTWFjaW50b3NoIikKKyAgICBvc25hbWUgPSBvc25hbWUubG93ZXIoKS5yZXBsYWNlKCcvJywgJycpCisgICAgbWFjaGluZSA9IG1hY2hpbmUucmVwbGFjZSgnICcsICdfJykKKyAgICBtYWNoaW5lID0gbWFjaGluZS5yZXBsYWNlKCcvJywgJy0nKQorCisgICAgaWYgb3NuYW1lWzo1XSA9PSAibGludXgiOgorICAgICAgICAjIEF0IGxlYXN0IG9uIExpbnV4L0ludGVsLCAnbWFjaGluZScgaXMgdGhlIHByb2Nlc3NvciAtLQorICAgICAgICAjIGkzODYsIGV0Yy4KKyAgICAgICAgIyBYWFggd2hhdCBhYm91dCBBbHBoYSwgU1BBUkMsIGV0Yz8KKyAgICAgICAgcmV0dXJuICAiJXMtJXMiICUgKG9zbmFtZSwgbWFjaGluZSkKKyAgICBlbGlmIG9zbmFtZVs6NV0gPT0gInN1bm9zIjoKKyAgICAgICAgaWYgcmVsZWFzZVswXSA+PSAiNSI6ICAgICAgICAgICAjIFN1bk9TIDUgPT0gU29sYXJpcyAyCisgICAgICAgICAgICBvc25hbWUgPSAic29sYXJpcyIKKyAgICAgICAgICAgIHJlbGVhc2UgPSAiJWQuJXMiICUgKGludChyZWxlYXNlWzBdKSAtIDMsIHJlbGVhc2VbMjpdKQorICAgICAgICAjIGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBvc25hbWUtcmVsZWFzZS1tYWNoaW5lIHJlcHJlc2VudGF0aW9uCisgICAgZWxpZiBvc25hbWVbOjRdID09ICJpcml4IjogICAgICAgICAgICAgICMgY291bGQgYmUgImlyaXg2NCIhCisgICAgICAgIHJldHVybiAiJXMtJXMiICUgKG9zbmFtZSwgcmVsZWFzZSkKKyAgICBlbGlmIG9zbmFtZVs6M10gPT0gImFpeCI6CisgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKG9zbmFtZSwgdmVyc2lvbiwgcmVsZWFzZSkKKyAgICBlbGlmIG9zbmFtZVs6Nl0gPT0gImN5Z3dpbiI6CisgICAgICAgIG9zbmFtZSA9ICJjeWd3aW4iCisgICAgICAgIHJlbF9yZSA9IHJlLmNvbXBpbGUgKHInW1xkLl0rJykKKyAgICAgICAgbSA9IHJlbF9yZS5tYXRjaChyZWxlYXNlKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmVsZWFzZSA9IG0uZ3JvdXAoKQorICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgIworICAgICAgICAjIEZvciBvdXIgcHVycG9zZXMsIHdlJ2xsIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gdmVyc2lvbiBmcm9tCisgICAgICAgICMgZGlzdHV0aWxzJyBwZXJzcGVjdGl2ZSBpcyB3aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQKKyAgICAgICAgIyB0by4gVGhpcyBtYWtlcyB0aGUgY29tcGF0aWJpbGl0eSBzdG9yeSBhIGJpdCBtb3JlIHNhbmUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBtYWNoaW5lIGlzIGdvaW5nIHRvIGNvbXBpbGUgYW5kIGxpbmsgYXMgaWYgaXQgd2VyZQorICAgICAgICAjIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC4KKyAgICAgICAgY2ZndmFycyA9IGdldF9jb25maWdfdmFycygpCisgICAgICAgIG1hY3ZlciA9IG9zLmVudmlyb24uZ2V0KCdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnKQorICAgICAgICBpZiBub3QgbWFjdmVyOgorICAgICAgICAgICAgbWFjdmVyID0gY2ZndmFycy5nZXQoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCisKKyAgICAgICAgaWYgMToKKyAgICAgICAgICAgICMgQWx3YXlzIGNhbGN1bGF0ZSB0aGUgcmVsZWFzZSBvZiB0aGUgcnVubmluZyBtYWNoaW5lLAorICAgICAgICAgICAgIyBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBidWlsZCBmYXQgYmluYXJpZXMgb3Igbm90LgorCisgICAgICAgICAgICBtYWNyZWxlYXNlID0gbWFjdmVyCisgICAgICAgICAgICAjIEdldCB0aGUgc3lzdGVtIHZlcnNpb24uIFJlYWRpbmcgdGhpcyBwbGlzdCBpcyBhIGRvY3VtZW50ZWQKKyAgICAgICAgICAgICMgd2F5IHRvIGdldCB0aGUgc3lzdGVtIHZlcnNpb24gKHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgICMgdGhlIEdlc3RhbHQgTWFuYWdlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbignL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgV2UncmUgb24gYSBwbGFpbiBkYXJ3aW4gYm94LCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAjIGJlaGF2aW91ci4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJzxrZXk+UHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lvbjwva2V5PlxzKicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPHN0cmluZz4oLio/KTwvc3RyaW5nPicsIGYucmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY3JlbGVhc2UgPSAnLicuam9pbihtLmdyb3VwKDEpLnNwbGl0KCcuJylbOjJdKQorICAgICAgICAgICAgICAgICAgICAjIGVsc2U6IGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgbWFjdmVyOgorICAgICAgICAgICAgbWFjdmVyID0gbWFjcmVsZWFzZQorCisgICAgICAgIGlmIG1hY3ZlcjoKKyAgICAgICAgICAgIHJlbGVhc2UgPSBtYWN2ZXIKKyAgICAgICAgICAgIG9zbmFtZSA9ICJtYWNvc3giCisKKyAgICAgICAgICAgIGlmIChtYWNyZWxlYXNlICsgJy4nKSA+PSAnMTAuNC4nIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICctYXJjaCcgaW4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KCdDRkxBR1MnLCAnJykuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAjIFRoZSB1bml2ZXJzYWwgYnVpbGQgd2lsbCBidWlsZCBmYXQgYmluYXJpZXMsIGJ1dCBub3Qgb24KKyAgICAgICAgICAgICAgICAjIHN5c3RlbXMgYmVmb3JlIDEwLjQKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUcnkgdG8gZGV0ZWN0IDQtd2F5IHVuaXZlcnNhbCBidWlsZHMsIHRob3NlIGhhdmUgbWFjaGluZS10eXBlCisgICAgICAgICAgICAgICAgIyAndW5pdmVyc2FsJyBpbnN0ZWFkIG9mICdmYXQnLgorCisgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdmYXQnCisgICAgICAgICAgICAgICAgY2ZsYWdzID0gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KCdDRkxBR1MnKQorCisgICAgICAgICAgICAgICAgYXJjaHMgPSByZS5maW5kYWxsKCctYXJjaFxzKyhcUyspJywgY2ZsYWdzKQorICAgICAgICAgICAgICAgIGFyY2hzID0gdHVwbGUoc29ydGVkKHNldChhcmNocykpKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyY2hzKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gYXJjaHNbMF0KKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgnaTM4NicsICdwcGMnKToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdmYXQnCisgICAgICAgICAgICAgICAgZWxpZiBhcmNocyA9PSAoJ2kzODYnLCAneDg2XzY0Jyk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAnaW50ZWwnCisgICAgICAgICAgICAgICAgZWxpZiBhcmNocyA9PSAoJ2kzODYnLCAncHBjJywgJ3g4Nl82NCcpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdDMnCisgICAgICAgICAgICAgICAgZWxpZiBhcmNocyA9PSAoJ3BwYzY0JywgJ3g4Nl82NCcpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdDY0JworICAgICAgICAgICAgICAgIGVsaWYgYXJjaHMgPT0gKCdpMzg2JywgJ3BwYycsICdwcGM2NCcsICd4ODZfNjQnKToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICd1bml2ZXJzYWwnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IGtub3cgbWFjaGluZSB2YWx1ZSBmb3IgYXJjaHM9JXIiJShhcmNocywpKQorCisgICAgICAgICAgICBlbGlmIG1hY2hpbmUgPT0gJ2kzODYnOgorICAgICAgICAgICAgICAgICMgT24gT1NYIHRoZSBtYWNoaW5lIHR5cGUgcmV0dXJuZWQgYnkgdW5hbWUgaXMgYWx3YXlzIHRoZQorICAgICAgICAgICAgICAgICMgMzItYml0IHZhcmlhbnQsIGV2ZW4gaWYgdGhlIGV4ZWN1dGFibGUgYXJjaGl0ZWN0dXJlIGlzCisgICAgICAgICAgICAgICAgIyB0aGUgNjQtYml0IHZhcmlhbnQKKyAgICAgICAgICAgICAgICBpZiBzeXMubWF4aW50ID49IDIqKjMyOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3g4Nl82NCcKKworICAgICAgICAgICAgZWxpZiBtYWNoaW5lIGluICgnUG93ZXJQQycsICdQb3dlcl9NYWNpbnRvc2gnKToKKyAgICAgICAgICAgICAgICAjIFBpY2sgYSBzYW5lIG5hbWUgZm9yIHRoZSBQUEMgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICMgU2VlICdpMzg2JyBjYXNlCisgICAgICAgICAgICAgICAgaWYgc3lzLm1heGludCA+PSAyKiozMjoKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdwcGM2NCcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3BwYycKKworICAgIHJldHVybiAiJXMtJXMtJXMiICUgKG9zbmFtZSwgcmVsZWFzZSwgbWFjaGluZSkKKworCitkZWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCk6CisgICAgcmV0dXJuIF9QWV9WRVJTSU9OX1NIT1JUCmRpZmYgLS1naXQgYS9MaWIvdGFyZmlsZS5weSBiL0xpYi90YXJmaWxlLnB5CmluZGV4IDk4YWUxMmYuLjQ3YmUxZDQgMTAwNjQ0Ci0tLSBhL0xpYi90YXJmaWxlLnB5CisrKyBiL0xpYi90YXJmaWxlLnB5CkBAIC01MywxMyArNTMsNiBAQAogaW1wb3J0IHJlCiBpbXBvcnQgb3BlcmF0b3IKIAotaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgICMgVGhpcyBtb2R1bGUgbmVlZHMgd29yayBmb3IgTWFjT1M5LCBlc3BlY2lhbGx5IGluIHRoZSBhcmVhIG9mIHBhdGhuYW1lCi0gICAgIyBoYW5kbGluZy4gSW4gbWFueSBwbGFjZXMgaXQgaXMgYXNzdW1lZCBhIHNpbXBsZSBzdWJzdGl0dXRpb24gb2YgLyBieSB0aGUKLSAgICAjIGxvY2FsIG9zLnBhdGguc2VwIGlzIGdvb2QgZW5vdWdoIHRvIGNvbnZlcnQgcGF0aG5hbWVzLCBidXQgdGhpcyBkb2VzIG5vdAotICAgICMgd29yayB3aXRoIHRoZSBtYWMgcm9vdGVkOnBhdGg6bmFtZSB2ZXJzdXMgOm5vbnJvb3RlZDpwYXRoOm5hbWUgc3ludGF4Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IsICJ0YXJmaWxlIGRvZXMgbm90IHdvcmsgZm9yIHBsYXRmb3JtPT1tYWMiCi0KIHRyeToKICAgICBpbXBvcnQgZ3JwLCBwd2QKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTE5NSw3ICsxODgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuID0gaW50KG50cyhzKSBvciAiMCIsIDgpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoImludmFsaWQgaGVhZGVyIikKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRIZWFkZXJFcnJvcigiaW52YWxpZCBoZWFkZXIiKQogICAgIGVsc2U6CiAgICAgICAgIG4gPSAwTAogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHMpIC0gMSk6CkBAIC0zMzAsMTEgKzMyMyw2IEBACiAgICAgICAgICAgICBwZXJtLmFwcGVuZCgiLSIpCiAgICAgcmV0dXJuICIiLmpvaW4ocGVybSkKIAotaWYgb3Muc2VwICE9ICIvIjoKLSAgICBub3JtcGF0aCA9IGxhbWJkYSBwYXRoOiBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpLnJlcGxhY2Uob3Muc2VwLCAiLyIpCi1lbHNlOgotICAgIG5vcm1wYXRoID0gb3MucGF0aC5ub3JtcGF0aAotCiBjbGFzcyBUYXJFcnJvcihFeGNlcHRpb24pOgogICAgICIiIkJhc2UgZXhjZXB0aW9uLiIiIgogICAgIHBhc3MKQEAgLTM1MSw4ICszMzksMjMgQEAKICAgICAiIiJFeGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMgb24gc3RyZWFtLWxpa2UgVGFyRmlsZXMuIiIiCiAgICAgcGFzcwogY2xhc3MgSGVhZGVyRXJyb3IoVGFyRXJyb3IpOgorICAgICIiIkJhc2UgZXhjZXB0aW9uIGZvciBoZWFkZXIgZXJyb3JzLiIiIgorICAgIHBhc3MKK2NsYXNzIEVtcHR5SGVhZGVyRXJyb3IoSGVhZGVyRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiBmb3IgZW1wdHkgaGVhZGVycy4iIiIKKyAgICBwYXNzCitjbGFzcyBUcnVuY2F0ZWRIZWFkZXJFcnJvcihIZWFkZXJFcnJvcik6CisgICAgIiIiRXhjZXB0aW9uIGZvciB0cnVuY2F0ZWQgaGVhZGVycy4iIiIKKyAgICBwYXNzCitjbGFzcyBFT0ZIZWFkZXJFcnJvcihIZWFkZXJFcnJvcik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBlbmQgb2YgZmlsZSBoZWFkZXJzLiIiIgorICAgIHBhc3MKK2NsYXNzIEludmFsaWRIZWFkZXJFcnJvcihIZWFkZXJFcnJvcik6CiAgICAgIiIiRXhjZXB0aW9uIGZvciBpbnZhbGlkIGhlYWRlcnMuIiIiCiAgICAgcGFzcworY2xhc3MgU3Vic2VxdWVudEhlYWRlckVycm9yKEhlYWRlckVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIG1pc3NpbmcgYW5kIGludmFsaWQgZXh0ZW5kZWQgaGVhZGVycy4iIiIKKyAgICBwYXNzCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgaW50ZXJuYWwgc3RyZWFtIGludGVyZmFjZQpAQCAtNjY1LDEwICs2NjgsNyBAQAogICAgICAgICAgICAgcmF3ID0gc2VsZi5maWxlb2JqLnJlYWQoc2VsZi5ibG9ja3NpemUpCiAgICAgICAgICAgICBpZiBub3QgcmF3OgogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuYnoyb2JqLmRlY29tcHJlc3MocmF3KQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkYXRhID0gc2VsZi5iejJvYmouZGVjb21wcmVzcyhyYXcpCiAgICAgICAgICAgICBiLmFwcGVuZChkYXRhKQogICAgICAgICAgICAgeCArPSBsZW4oZGF0YSkKICAgICAgICAgc2VsZi5idWYgPSAiIi5qb2luKGIpCkBAIC05MjgsOCArOTI4LDggQEAKICAgICAgICAgc2VsZi5jaGtzdW0gPSAwICAgICAgICAgIyBoZWFkZXIgY2hlY2tzdW0KICAgICAgICAgc2VsZi50eXBlID0gUkVHVFlQRSAgICAgIyBtZW1iZXIgdHlwZQogICAgICAgICBzZWxmLmxpbmtuYW1lID0gIiIgICAgICAjIGxpbmsgbmFtZQotICAgICAgICBzZWxmLnVuYW1lID0gInJvb3QiICAgICAjIHVzZXIgbmFtZQotICAgICAgICBzZWxmLmduYW1lID0gInJvb3QiICAgICAjIGdyb3VwIG5hbWUKKyAgICAgICAgc2VsZi51bmFtZSA9ICIiICAgICAgICAgIyB1c2VyIG5hbWUKKyAgICAgICAgc2VsZi5nbmFtZSA9ICIiICAgICAgICAgIyBncm91cCBuYW1lCiAgICAgICAgIHNlbGYuZGV2bWFqb3IgPSAwICAgICAgICMgZGV2aWNlIG1ham9yIG51bWJlcgogICAgICAgICBzZWxmLmRldm1pbm9yID0gMCAgICAgICAjIGRldmljZSBtaW5vciBudW1iZXIKIApAQCAtOTU5LDcgKzk1OSw3IEBACiAgICAgICAgICIiIlJldHVybiB0aGUgVGFySW5mbydzIGF0dHJpYnV0ZXMgYXMgYSBkaWN0aW9uYXJ5LgogICAgICAgICAiIiIKICAgICAgICAgaW5mbyA9IHsKLSAgICAgICAgICAgICJuYW1lIjogICAgIG5vcm1wYXRoKHNlbGYubmFtZSksCisgICAgICAgICAgICAibmFtZSI6ICAgICBzZWxmLm5hbWUsCiAgICAgICAgICAgICAibW9kZSI6ICAgICBzZWxmLm1vZGUgJiAwNzc3NywKICAgICAgICAgICAgICJ1aWQiOiAgICAgIHNlbGYudWlkLAogICAgICAgICAgICAgImdpZCI6ICAgICAgc2VsZi5naWQsCkBAIC05NjcsNyArOTY3LDcgQEAKICAgICAgICAgICAgICJtdGltZSI6ICAgIHNlbGYubXRpbWUsCiAgICAgICAgICAgICAiY2hrc3VtIjogICBzZWxmLmNoa3N1bSwKICAgICAgICAgICAgICJ0eXBlIjogICAgIHNlbGYudHlwZSwKLSAgICAgICAgICAgICJsaW5rbmFtZSI6IG5vcm1wYXRoKHNlbGYubGlua25hbWUpIGlmIHNlbGYubGlua25hbWUgZWxzZSAiIiwKKyAgICAgICAgICAgICJsaW5rbmFtZSI6IHNlbGYubGlua25hbWUsCiAgICAgICAgICAgICAidW5hbWUiOiAgICBzZWxmLnVuYW1lLAogICAgICAgICAgICAgImduYW1lIjogICAgc2VsZi5nbmFtZSwKICAgICAgICAgICAgICJkZXZtYWpvciI6IHNlbGYuZGV2bWFqb3IsCkBAIC0xMTEyLDggKzExMTIsOCBAQAogICAgICAgICAgICAgaW5mby5nZXQoInR5cGUiLCBSRUdUWVBFKSwKICAgICAgICAgICAgIHN0bihpbmZvLmdldCgibGlua25hbWUiLCAiIiksIDEwMCksCiAgICAgICAgICAgICBzdG4oaW5mby5nZXQoIm1hZ2ljIiwgUE9TSVhfTUFHSUMpLCA4KSwKLSAgICAgICAgICAgIHN0bihpbmZvLmdldCgidW5hbWUiLCAicm9vdCIpLCAzMiksCi0gICAgICAgICAgICBzdG4oaW5mby5nZXQoImduYW1lIiwgInJvb3QiKSwgMzIpLAorICAgICAgICAgICAgc3RuKGluZm8uZ2V0KCJ1bmFtZSIsICIiKSwgMzIpLAorICAgICAgICAgICAgc3RuKGluZm8uZ2V0KCJnbmFtZSIsICIiKSwgMzIpLAogICAgICAgICAgICAgaXRuKGluZm8uZ2V0KCJkZXZtYWpvciIsIDApLCA4LCBmb3JtYXQpLAogICAgICAgICAgICAgaXRuKGluZm8uZ2V0KCJkZXZtaW5vciIsIDApLCA4LCBmb3JtYXQpLAogICAgICAgICAgICAgc3RuKGluZm8uZ2V0KCJwcmVmaXgiLCAiIiksIDE1NSkKQEAgLTExODcsMTQgKzExODcsMTYgQEAKICAgICBkZWYgZnJvbWJ1ZihjbHMsIGJ1Zik6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIFRhckluZm8gb2JqZWN0IGZyb20gYSA1MTIgYnl0ZSBzdHJpbmcgYnVmZmVyLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGJ1ZikgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEVtcHR5SGVhZGVyRXJyb3IoImVtcHR5IGhlYWRlciIpCiAgICAgICAgIGlmIGxlbihidWYpICE9IEJMT0NLU0laRToKLSAgICAgICAgICAgIHJhaXNlIEhlYWRlckVycm9yKCJ0cnVuY2F0ZWQgaGVhZGVyIikKKyAgICAgICAgICAgIHJhaXNlIFRydW5jYXRlZEhlYWRlckVycm9yKCJ0cnVuY2F0ZWQgaGVhZGVyIikKICAgICAgICAgaWYgYnVmLmNvdW50KE5VTCkgPT0gQkxPQ0tTSVpFOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoImVtcHR5IGhlYWRlciIpCisgICAgICAgICAgICByYWlzZSBFT0ZIZWFkZXJFcnJvcigiZW5kIG9mIGZpbGUgaGVhZGVyIikKIAogICAgICAgICBjaGtzdW0gPSBudGkoYnVmWzE0ODoxNTZdKQogICAgICAgICBpZiBjaGtzdW0gbm90IGluIGNhbGNfY2hrc3VtcyhidWYpOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoImJhZCBjaGVja3N1bSIpCisgICAgICAgICAgICByYWlzZSBJbnZhbGlkSGVhZGVyRXJyb3IoImJhZCBjaGVja3N1bSIpCiAKICAgICAgICAgb2JqID0gY2xzKCkKICAgICAgICAgb2JqLmJ1ZiA9IGJ1ZgpAQCAtMTIzMyw4ICsxMjM1LDYgQEAKICAgICAgICAgICAgdGFyZmlsZS4KICAgICAgICAgIiIiCiAgICAgICAgIGJ1ZiA9IHRhcmZpbGUuZmlsZW9iai5yZWFkKEJMT0NLU0laRSkKLSAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBvYmogPSBjbHMuZnJvbWJ1ZihidWYpCiAgICAgICAgIG9iai5vZmZzZXQgPSB0YXJmaWxlLmZpbGVvYmoudGVsbCgpIC0gQkxPQ0tTSVpFCiAgICAgICAgIHJldHVybiBvYmouX3Byb2NfbWVtYmVyKHRhcmZpbGUpCkBAIC0xMjg3LDkgKzEyODcsMTAgQEAKICAgICAgICAgYnVmID0gdGFyZmlsZS5maWxlb2JqLnJlYWQoc2VsZi5fYmxvY2soc2VsZi5zaXplKSkKIAogICAgICAgICAjIEZldGNoIHRoZSBuZXh0IGhlYWRlciBhbmQgcHJvY2VzcyBpdC4KLSAgICAgICAgbmV4dCA9IHNlbGYuZnJvbXRhcmZpbGUodGFyZmlsZSkKLSAgICAgICAgaWYgbmV4dCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoIm1pc3Npbmcgc3Vic2VxdWVudCBoZWFkZXIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQorICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3I6CisgICAgICAgICAgICByYWlzZSBTdWJzZXF1ZW50SGVhZGVyRXJyb3IoIm1pc3Npbmcgb3IgYmFkIHN1YnNlcXVlbnQgaGVhZGVyIikKIAogICAgICAgICAjIFBhdGNoIHRoZSBUYXJJbmZvIG9iamVjdCBmcm9tIHRoZSBuZXh0IGhlYWRlciB3aXRoCiAgICAgICAgICMgdGhlIGxvbmduYW1lIGluZm9ybWF0aW9uLgpAQCAtMTM5NCwxMiArMTM5NSwxMiBAQAogICAgICAgICAgICAgcG9zICs9IGxlbmd0aAogCiAgICAgICAgICMgRmV0Y2ggdGhlIG5leHQgaGVhZGVyLgotICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQorICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3I6CisgICAgICAgICAgICByYWlzZSBTdWJzZXF1ZW50SGVhZGVyRXJyb3IoIm1pc3Npbmcgb3IgYmFkIHN1YnNlcXVlbnQgaGVhZGVyIikKIAogICAgICAgICBpZiBzZWxmLnR5cGUgaW4gKFhIRFRZUEUsIFNPTEFSSVNfWEhEVFlQRSk6Ci0gICAgICAgICAgICBpZiBuZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoIm1pc3Npbmcgc3Vic2VxdWVudCBoZWFkZXIiKQotCiAgICAgICAgICAgICAjIFBhdGNoIHRoZSBUYXJJbmZvIG9iamVjdCB3aXRoIHRoZSBleHRlbmRlZCBoZWFkZXIgaW5mby4KICAgICAgICAgICAgIG5leHQuX2FwcGx5X3BheF9pbmZvKHBheF9oZWFkZXJzLCB0YXJmaWxlLmVuY29kaW5nLCB0YXJmaWxlLmVycm9ycykKICAgICAgICAgICAgIG5leHQub2Zmc2V0ID0gc2VsZi5vZmZzZXQKQEAgLTE0ODEsNyArMTQ4Miw3IEBACiAgICAgaWdub3JlX3plcm9zID0gRmFsc2UgICAgICAgICMgSWYgdHJ1ZSwgc2tpcHMgZW1wdHkgb3IgaW52YWxpZCBibG9ja3MgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVzIHByb2Nlc3NpbmcuCiAKLSAgICBlcnJvcmxldmVsID0gMCAgICAgICAgICAgICAgIyBJZiAwLCBmYXRhbCBlcnJvcnMgb25seSBhcHBlYXIgaW4gZGVidWcKKyAgICBlcnJvcmxldmVsID0gMSAgICAgICAgICAgICAgIyBJZiAwLCBmYXRhbCBlcnJvcnMgb25seSBhcHBlYXIgaW4gZGVidWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtZXNzYWdlcyAoaWYgZGVidWcgPj0gMCkuIElmID4gMCwgZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVyIGFzIGV4Y2VwdGlvbnMuCiAKQEAgLTE1NzMsMTIgKzE1NzQsMTYgQEAKICAgICAgICAgICAgIGlmIHNlbGYubW9kZSA9PSAiYSI6CiAgICAgICAgICAgICAgICAgIyBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGFyY2hpdmUsCiAgICAgICAgICAgICAgICAgIyBiZWZvcmUgdGhlIGZpcnN0IGVtcHR5IGJsb2NrLgotICAgICAgICAgICAgICAgIHNlbGYuZmlyc3RtZW1iZXIgPSBOb25lCiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5uZXh0KCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygtIEJMT0NLU0laRSwgMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhcmluZm8uZnJvbXRhcmZpbGUoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVtYmVycy5hcHBlbmQodGFyaW5mbykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkhlYWRlckVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQogCiAgICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gImF3IjoKICAgICAgICAgICAgICAgICBzZWxmLl9sb2FkZWQgPSBUcnVlCkBAIC0xNzQzLDcgKzE3NDgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKCJub3QgYSBiemlwMiBmaWxlIikKICAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCiAgICAgICAgIHJldHVybiB0CkBAIC0xODI0LDEwICsxODI5LDkgQEAKICAgICAgICAgIyBBYnNvbHV0ZSBwYXRocyBhcmUgdHVybmVkIHRvIHJlbGF0aXZlIHBhdGhzLgogICAgICAgICBpZiBhcmNuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBhcmNuYW1lID0gbmFtZQotICAgICAgICBhcmNuYW1lID0gbm9ybXBhdGgoYXJjbmFtZSkKICAgICAgICAgZHJ2LCBhcmNuYW1lID0gb3MucGF0aC5zcGxpdGRyaXZlKGFyY25hbWUpCi0gICAgICAgIHdoaWxlIGFyY25hbWVbMDoxXSA9PSAiLyI6Ci0gICAgICAgICAgICBhcmNuYW1lID0gYXJjbmFtZVsxOl0KKyAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUucmVwbGFjZShvcy5zZXAsICIvIikKKyAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUubHN0cmlwKCIvIikKIAogICAgICAgICAjIE5vdywgZmlsbCB0aGUgVGFySW5mbyBvYmplY3Qgd2l0aAogICAgICAgICAjIGluZm9ybWF0aW9uIHNwZWNpZmljIGZvciB0aGUgZmlsZS4KQEAgLTE5MzMsMTMgKzE5MzcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImxpbmsgdG8iLCB0YXJpbmZvLmxpbmtuYW1lLAogICAgICAgICAgICAgcHJpbnQKIAotICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgYXJjbmFtZT1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgZXhjbHVkZT1Ob25lKToKKyAgICBkZWYgYWRkKHNlbGYsIG5hbWUsIGFyY25hbWU9Tm9uZSwgcmVjdXJzaXZlPVRydWUsIGV4Y2x1ZGU9Tm9uZSwgZmlsdGVyPU5vbmUpOgogICAgICAgICAiIiJBZGQgdGhlIGZpbGUgYG5hbWUnIHRvIHRoZSBhcmNoaXZlLiBgbmFtZScgbWF5IGJlIGFueSB0eXBlIG9mIGZpbGUKICAgICAgICAgICAgKGRpcmVjdG9yeSwgZmlmbywgc3ltYm9saWMgbGluaywgZXRjLikuIElmIGdpdmVuLCBgYXJjbmFtZScKICAgICAgICAgICAgc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIG5hbWUgZm9yIHRoZSBmaWxlIGluIHRoZSBhcmNoaXZlLgogICAgICAgICAgICBEaXJlY3RvcmllcyBhcmUgYWRkZWQgcmVjdXJzaXZlbHkgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUgYXZvaWRlZCBieQogICAgICAgICAgICBzZXR0aW5nIGByZWN1cnNpdmUnIHRvIEZhbHNlLiBgZXhjbHVkZScgaXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZAotICAgICAgICAgICByZXR1cm4gVHJ1ZSBmb3IgZWFjaCBmaWxlbmFtZSB0byBiZSBleGNsdWRlZC4KKyAgICAgICAgICAgcmV0dXJuIFRydWUgZm9yIGVhY2ggZmlsZW5hbWUgdG8gYmUgZXhjbHVkZWQuIGBmaWx0ZXInIGlzIGEgZnVuY3Rpb24KKyAgICAgICAgICAgdGhhdCBleHBlY3RzIGEgVGFySW5mbyBvYmplY3QgYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIGNoYW5nZWQKKyAgICAgICAgICAgVGFySW5mbyBvYmplY3QsIGlmIGl0IHJldHVybnMgTm9uZSB0aGUgVGFySW5mbyBvYmplY3Qgd2lsbCBiZQorICAgICAgICAgICBleGNsdWRlZCBmcm9tIHRoZSBhcmNoaXZlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2soImF3IikKIApAQCAtMTk0NywyNSArMTk1NCwxOSBAQAogICAgICAgICAgICAgYXJjbmFtZSA9IG5hbWUKIAogICAgICAgICAjIEV4Y2x1ZGUgcGF0aG5hbWVzLgotICAgICAgICBpZiBleGNsdWRlIGlzIG5vdCBOb25lIGFuZCBleGNsdWRlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5fZGJnKDIsICJ0YXJmaWxlOiBFeGNsdWRlZCAlciIgJSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGV4Y2x1ZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInVzZSB0aGUgZmlsdGVyIGFyZ3VtZW50IGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBpZiBleGNsdWRlKG5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2RiZygyLCAidGFyZmlsZTogRXhjbHVkZWQgJXIiICUgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIFNraXAgaWYgc29tZWJvZHkgdHJpZXMgdG8gYXJjaGl2ZSB0aGUgYXJjaGl2ZS4uLgogICAgICAgICBpZiBzZWxmLm5hbWUgaXMgbm90IE5vbmUgYW5kIG9zLnBhdGguYWJzcGF0aChuYW1lKSA9PSBzZWxmLm5hbWU6CiAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IFNraXBwZWQgJXIiICUgbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICMgU3BlY2lhbCBjYXNlOiBUaGUgdXNlciB3YW50cyB0byBhZGQgdGhlIGN1cnJlbnQKLSAgICAgICAgIyB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgaWYgbmFtZSA9PSAiLiI6Ci0gICAgICAgICAgICBpZiByZWN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgaWYgYXJjbmFtZSA9PSAiLiI6Ci0gICAgICAgICAgICAgICAgICAgIGFyY25hbWUgPSAiIgotICAgICAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIobmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKGYsIG9zLnBhdGguam9pbihhcmNuYW1lLCBmKSwgcmVjdXJzaXZlLCBleGNsdWRlKQotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgc2VsZi5fZGJnKDEsIG5hbWUpCiAKICAgICAgICAgIyBDcmVhdGUgYSBUYXJJbmZvIG9iamVjdCBmcm9tIHRoZSBmaWxlLgpAQCAtMTk3NSw2ICsxOTc2LDEzIEBACiAgICAgICAgICAgICBzZWxmLl9kYmcoMSwgInRhcmZpbGU6IFVuc3VwcG9ydGVkIHR5cGUgJXIiICUgbmFtZSkKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgICMgQ2hhbmdlIG9yIGV4Y2x1ZGUgdGhlIFRhckluZm8gb2JqZWN0LgorICAgICAgICBpZiBmaWx0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvID0gZmlsdGVyKHRhcmluZm8pCisgICAgICAgICAgICBpZiB0YXJpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDIsICJ0YXJmaWxlOiBFeGNsdWRlZCAlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybgorCiAgICAgICAgICMgQXBwZW5kIHRoZSB0YXIgaGVhZGVyIGFuZCBkYXRhIHRvIHRoZSBhcmNoaXZlLgogICAgICAgICBpZiB0YXJpbmZvLmlzcmVnKCk6CiAgICAgICAgICAgICBmID0gYmx0bl9vcGVuKG5hbWUsICJyYiIpCkBAIC0xOTg1LDcgKzE5OTMsOCBAQAogICAgICAgICAgICAgc2VsZi5hZGRmaWxlKHRhcmluZm8pCiAgICAgICAgICAgICBpZiByZWN1cnNpdmU6CiAgICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQob3MucGF0aC5qb2luKG5hbWUsIGYpLCBvcy5wYXRoLmpvaW4oYXJjbmFtZSwgZiksIHJlY3Vyc2l2ZSwgZXhjbHVkZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQob3MucGF0aC5qb2luKG5hbWUsIGYpLCBvcy5wYXRoLmpvaW4oYXJjbmFtZSwgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlLCBleGNsdWRlLCBmaWx0ZXIpCiAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYWRkZmlsZSh0YXJpbmZvKQpAQCAtMjExOCw4ICsyMTI3LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBTdHJlYW1FcnJvcigiY2Fubm90IGV4dHJhY3QgKHN5bSlsaW5rIGFzIGZpbGUgb2JqZWN0IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBIChzeW0pbGluaydzIGZpbGUgb2JqZWN0IGlzIGl0cyB0YXJnZXQncyBmaWxlIG9iamVjdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRyYWN0ZmlsZShzZWxmLl9nZXRtZW1iZXIodGFyaW5mby5saW5rbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyaW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0cmFjdGZpbGUoc2VsZi5fZmluZF9saW5rX3RhcmdldCh0YXJpbmZvKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgSWYgdGhlcmUncyBubyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtYmVyIChkaXJlY3RvcnksIGNocmRldiwKICAgICAgICAgICAgICMgYmxrZGV2LCBldGMuKSwgcmV0dXJuIE5vbmUgaW5zdGVhZCBvZiBhIGZpbGUgb2JqZWN0LgpAQCAtMjEzMiw5ICsyMTQwLDggQEAKICAgICAgICAgIyBGZXRjaCB0aGUgVGFySW5mbyBvYmplY3QgZm9yIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgICMgYW5kIGJ1aWxkIHRoZSBkZXN0aW5hdGlvbiBwYXRobmFtZSwgcmVwbGFjaW5nCiAgICAgICAgICMgZm9yd2FyZCBzbGFzaGVzIHRvIHBsYXRmb3JtIHNwZWNpZmljIHNlcGFyYXRvcnMuCi0gICAgICAgIGlmIHRhcmdldHBhdGhbLTE6XSA9PSAiLyI6Ci0gICAgICAgICAgICB0YXJnZXRwYXRoID0gdGFyZ2V0cGF0aFs6LTFdCi0gICAgICAgIHRhcmdldHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHRhcmdldHBhdGgpCisgICAgICAgIHRhcmdldHBhdGggPSB0YXJnZXRwYXRoLnJzdHJpcCgiLyIpCisgICAgICAgIHRhcmdldHBhdGggPSB0YXJnZXRwYXRoLnJlcGxhY2UoIi8iLCBvcy5zZXApCiAKICAgICAgICAgIyBDcmVhdGUgYWxsIHVwcGVyIGRpcmVjdG9yaWVzLgogICAgICAgICB1cHBlcmRpcnMgPSBvcy5wYXRoLmRpcm5hbWUodGFyZ2V0cGF0aCkKQEAgLTIyMjksMjcgKzIyMzYsMjEgQEAKICAgICAgICAgICAocGxhdGZvcm0gbGltaXRhdGlvbiksIHdlIHRyeSB0byBtYWtlIGEgY29weSBvZiB0aGUgcmVmZXJlbmNlZCBmaWxlCiAgICAgICAgICAgaW5zdGVhZCBvZiBhIGxpbmsuCiAgICAgICAgICIiIgotICAgICAgICBsaW5rcGF0aCA9IHRhcmluZm8ubGlua25hbWUKLSAgICAgICAgdHJ5OgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpIGFuZCBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgIyBGb3Igc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltYm9saWMgYW5kIGhhcmQgbGlua3MuCiAgICAgICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCk6Ci0gICAgICAgICAgICAgICAgb3Muc3ltbGluayhsaW5rcGF0aCwgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmluZm8ubGlua25hbWUsIHRhcmdldHBhdGgpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgU2VlIGV4dHJhY3QoKS4KLSAgICAgICAgICAgICAgICBvcy5saW5rKHRhcmluZm8uX2xpbmtfdGFyZ2V0LCB0YXJnZXRwYXRoKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCk6Ci0gICAgICAgICAgICAgICAgbGlua3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHRhcmluZm8ubmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua3BhdGgpCi0gICAgICAgICAgICAgICAgbGlua3BhdGggPSBub3JtcGF0aChsaW5rcGF0aCkKLQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRhcmluZm8uX2xpbmtfdGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgb3MubGluayh0YXJpbmZvLl9saW5rX3RhcmdldCwgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcihzZWxmLl9maW5kX2xpbmtfdGFyZ2V0KHRhcmluZm8pLCB0YXJnZXRwYXRoKQorICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHNlbGYuZ2V0bWVtYmVyKGxpbmtwYXRoKSwgdGFyZ2V0cGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCAoRW52aXJvbm1lbnRFcnJvciwgS2V5RXJyb3IpLCBlOgotICAgICAgICAgICAgICAgIGxpbmtwYXRoID0gb3MucGF0aC5ub3JtcGF0aChsaW5rcGF0aCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihsaW5rcGF0aCwgdGFyZ2V0cGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigibGluayBjb3VsZCBub3QgYmUgY3JlYXRlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIoc2VsZi5fZmluZF9saW5rX3RhcmdldCh0YXJpbmZvKSwgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoInVuYWJsZSB0byByZXNvbHZlIGxpbmsgaW5zaWRlIGFyY2hpdmUiKQogCiAgICAgZGVmIGNob3duKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgogICAgICAgICAiIiJTZXQgb3duZXIgb2YgdGFyZ2V0cGF0aCBhY2NvcmRpbmcgdG8gdGFyaW5mby4KQEAgLTIzMTIsNDQgKzIzMTMsNjQgQEAKIAogICAgICAgICAjIFJlYWQgdGhlIG5leHQgYmxvY2suCiAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYub2Zmc2V0KQorICAgICAgICB0YXJpbmZvID0gTm9uZQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhcmluZm8uZnJvbXRhcmZpbGUoc2VsZikKLSAgICAgICAgICAgICAgICBpZiB0YXJpbmZvIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIHNlbGYubWVtYmVycy5hcHBlbmQodGFyaW5mbykKLQotICAgICAgICAgICAgZXhjZXB0IEhlYWRlckVycm9yLCBlOgorICAgICAgICAgICAgZXhjZXB0IEVPRkhlYWRlckVycm9yLCBlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuaWdub3JlX3plcm9zOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgIjB4JVg6ICVzIiAlIChzZWxmLm9mZnNldCwgZSkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZXhjZXB0IEludmFsaWRIZWFkZXJFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlnbm9yZV96ZXJvczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDIsICIweCVYOiAlcyIgJSAoc2VsZi5vZmZzZXQsIGUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBCTE9DS1NJWkUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYub2Zmc2V0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCisgICAgICAgICAgICBleGNlcHQgRW1wdHlIZWFkZXJFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm9mZnNldCA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoImVtcHR5IGZpbGUiKQorICAgICAgICAgICAgZXhjZXB0IFRydW5jYXRlZEhlYWRlckVycm9yLCBlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCisgICAgICAgICAgICBleGNlcHQgU3Vic2VxdWVudEhlYWRlckVycm9yLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCiAgICAgICAgICAgICBicmVhawogCisgICAgICAgIGlmIHRhcmluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLm1lbWJlcnMuYXBwZW5kKHRhcmluZm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb2FkZWQgPSBUcnVlCisKICAgICAgICAgcmV0dXJuIHRhcmluZm8KIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgTGl0dGxlIGhlbHBlciBtZXRob2RzOgogCi0gICAgZGVmIF9nZXRtZW1iZXIoc2VsZiwgbmFtZSwgdGFyaW5mbz1Ob25lKToKKyAgICBkZWYgX2dldG1lbWJlcihzZWxmLCBuYW1lLCB0YXJpbmZvPU5vbmUsIG5vcm1hbGl6ZT1GYWxzZSk6CiAgICAgICAgICIiIkZpbmQgYW4gYXJjaGl2ZSBtZW1iZXIgYnkgbmFtZSBmcm9tIGJvdHRvbSB0byB0b3AuCiAgICAgICAgICAgIElmIHRhcmluZm8gaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAiIiIKICAgICAgICAgIyBFbnN1cmUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIGJlZW4gbG9hZGVkLgogICAgICAgICBtZW1iZXJzID0gc2VsZi5nZXRtZW1iZXJzKCkKIAotICAgICAgICBpZiB0YXJpbmZvIGlzIE5vbmU6Ci0gICAgICAgICAgICBlbmQgPSBsZW4obWVtYmVycykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVuZCA9IG1lbWJlcnMuaW5kZXgodGFyaW5mbykKKyAgICAgICAgIyBMaW1pdCB0aGUgbWVtYmVyIHNlYXJjaCBsaXN0IHVwIHRvIHRhcmluZm8uCisgICAgICAgIGlmIHRhcmluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBtZW1iZXJzID0gbWVtYmVyc1s6bWVtYmVycy5pbmRleCh0YXJpbmZvKV0KIAotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoZW5kIC0gMSwgLTEsIC0xKToKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gbWVtYmVyc1tpXS5uYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBtZW1iZXJzW2ldCisgICAgICAgIGlmIG5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKG5hbWUpCisKKyAgICAgICAgZm9yIG1lbWJlciBpbiByZXZlcnNlZChtZW1iZXJzKToKKyAgICAgICAgICAgIGlmIG5vcm1hbGl6ZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgobWVtYmVyLm5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lID0gbWVtYmVyLm5hbWUKKworICAgICAgICAgICAgaWYgbmFtZSA9PSBtZW1iZXJfbmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCiAKICAgICBkZWYgX2xvYWQoc2VsZik6CiAgICAgICAgICIiIlJlYWQgdGhyb3VnaCB0aGUgZW50aXJlIGFyY2hpdmUgZmlsZSBhbmQgbG9vayBmb3IgcmVhZGFibGUKQEAgLTIzNzAsNiArMjM5MSwyNSBAQAogICAgICAgICBpZiBtb2RlIGlzIG5vdCBOb25lIGFuZCBzZWxmLm1vZGUgbm90IGluIG1vZGU6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKIAorICAgIGRlZiBfZmluZF9saW5rX3RhcmdldChzZWxmLCB0YXJpbmZvKToKKyAgICAgICAgIiIiRmluZCB0aGUgdGFyZ2V0IG1lbWJlciBvZiBhIHN5bWxpbmsgb3IgaGFyZGxpbmsgbWVtYmVyIGluIHRoZQorICAgICAgICAgICBhcmNoaXZlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpOgorICAgICAgICAgICAgIyBBbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUgYXJjaGl2ZS4KKyAgICAgICAgICAgIGxpbmtuYW1lID0gb3MucGF0aC5kaXJuYW1lKHRhcmluZm8ubmFtZSkgKyAiLyIgKyB0YXJpbmZvLmxpbmtuYW1lCisgICAgICAgICAgICBsaW1pdCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU2VhcmNoIHRoZSBhcmNoaXZlIGJlZm9yZSB0aGUgbGluaywgYmVjYXVzZSBhIGhhcmQgbGluayBpcworICAgICAgICAgICAgIyBqdXN0IGEgcmVmZXJlbmNlIHRvIGFuIGFscmVhZHkgYXJjaGl2ZWQgZmlsZS4KKyAgICAgICAgICAgIGxpbmtuYW1lID0gdGFyaW5mby5saW5rbmFtZQorICAgICAgICAgICAgbGltaXQgPSB0YXJpbmZvCisKKyAgICAgICAgbWVtYmVyID0gc2VsZi5fZ2V0bWVtYmVyKGxpbmtuYW1lLCB0YXJpbmZvPWxpbWl0LCBub3JtYWxpemU9VHJ1ZSkKKyAgICAgICAgaWYgbWVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigibGlua25hbWUgJXIgbm90IGZvdW5kIiAlIGxpbmtuYW1lKQorICAgICAgICByZXR1cm4gbWVtYmVyCisKICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgICIiIlByb3ZpZGUgYW4gaXRlcmF0b3Igb2JqZWN0LgogICAgICAgICAiIiIKQEAgLTIzODMsNiArMjQyMywyMCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgbGV2ZWwgPD0gc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIG1zZworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2soKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBpZiB0eXBlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQW4gZXhjZXB0aW9uIG9jY3VycmVkLiBXZSBtdXN0IG5vdCBjYWxsIGNsb3NlKCkgYmVjYXVzZQorICAgICAgICAgICAgIyBpdCB3b3VsZCB0cnkgdG8gd3JpdGUgZW5kLW9mLWFyY2hpdmUgYmxvY2tzIGFuZCBwYWRkaW5nLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2V4dGZpbGVvYmo6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQogIyBjbGFzcyBUYXJGaWxlCiAKIGNsYXNzIFRhckl0ZXI6CmRpZmYgLS1naXQgYS9MaWIvdGVsbmV0bGliLnB5IGIvTGliL3RlbG5ldGxpYi5weQppbmRleCAyYmZkOWNkLi5iYWU0YWU3IDEwMDY0NAotLS0gYS9MaWIvdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZWxuZXRsaWIucHkKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQgJ1RlbG5ldCglcywlZCk6JyAlIChzZWxmLmhvc3QsIHNlbGYucG9ydCksCisgICAgICAgICAgICBwcmludCAnVGVsbmV0KCVzLCVzKTonICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKICAgICAgICAgICAgIGlmIGFyZ3M6CiAgICAgICAgICAgICAgICAgcHJpbnQgbXNnICUgYXJncwogICAgICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZW1wZmlsZS5weSBiL0xpYi90ZW1wZmlsZS5weQppbmRleCBiMGZkODdkLi4xYzcxODE0IDEwMDY0NAotLS0gYS9MaWIvdGVtcGZpbGUucHkKKysrIGIvTGliL3RlbXBmaWxlLnB5CkBAIC00MTEsNiArNDExLDkgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmlsZS5fX2V4aXRfXyhleGMsIHZhbHVlLCB0YikKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGVsc2U6CisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGMsIHZhbHVlLCB0Yik6CisgICAgICAgICAgICBzZWxmLmZpbGUuX19leGl0X18oZXhjLCB2YWx1ZSwgdGIpCiAKIAogZGVmIE5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3K2InLCBidWZzaXplPS0xLCBzdWZmaXg9IiIsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9SRUFETUUgYi9MaWIvdGVzdC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MDlkZjQuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNDEzICswLDAgQEAKLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLVdyaXRpbmcgUHl0aG9uIFJlZ3Jlc3Npb24gVGVzdHMKLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLQotOkF1dGhvcjogU2tpcCBNb250YW5hcm8KLTpDb250YWN0OiBza2lwQHBvYm94LmNvbQotCi1JbnRyb2R1Y3Rpb24KLT09PT09PT09PT09PQotCi1JZiB5b3UgYWRkIGEgbmV3IG1vZHVsZSB0byBQeXRob24gb3IgbW9kaWZ5IHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIGV4aXN0aW5nCi1tb2R1bGUsIHlvdSBzaG91bGQgd3JpdGUgb25lIG9yIG1vcmUgdGVzdCBjYXNlcyB0byBleGVyY2lzZSB0aGF0IG5ldwotZnVuY3Rpb25hbGl0eS4gIFRoZXJlIGFyZSBkaWZmZXJlbnQgd2F5cyB0byBkbyB0aGlzIHdpdGhpbiB0aGUgcmVncmVzc2lvbgotdGVzdGluZyBmYWNpbGl0eSBwcm92aWRlZCB3aXRoIFB5dGhvbjsgYW55IHBhcnRpY3VsYXIgdGVzdCBzaG91bGQgdXNlIG9ubHkKLW9uZSBvZiB0aGVzZSBvcHRpb25zLiAgRWFjaCBvcHRpb24gcmVxdWlyZXMgd3JpdGluZyBhIHRlc3QgbW9kdWxlIHVzaW5nIHRoZQotY29udmVudGlvbnMgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbjoKLQotICAgIC0gdW5pdHRlc3RfIGJhc2VkIHRlc3RzCi0gICAgLSBkb2N0ZXN0XyBiYXNlZCB0ZXN0cwotICAgIC0gInRyYWRpdGlvbmFsIiBQeXRob24gdGVzdCBtb2R1bGVzCi0KLVJlZ2FyZGxlc3Mgb2YgdGhlIG1lY2hhbmljcyBvZiB0aGUgdGVzdGluZyBhcHByb2FjaCB5b3UgY2hvb3NlLAoteW91IHdpbGwgYmUgd3JpdGluZyB1bml0IHRlc3RzIChpc29sYXRlZCB0ZXN0cyBvZiBmdW5jdGlvbnMgYW5kIG9iamVjdHMKLWRlZmluZWQgYnkgdGhlIG1vZHVsZSkgdXNpbmcgd2hpdGUgYm94IHRlY2huaXF1ZXMuICBVbmxpa2UgYmxhY2sgYm94Ci10ZXN0aW5nLCB3aGVyZSB5b3Ugb25seSBoYXZlIHRoZSBleHRlcm5hbCBpbnRlcmZhY2VzIHRvIGd1aWRlIHlvdXIgdGVzdCBjYXNlCi13cml0aW5nLCBpbiB3aGl0ZSBib3ggdGVzdGluZyB5b3UgY2FuIHNlZSB0aGUgY29kZSBiZWluZyB0ZXN0ZWQgYW5kIHRhaWxvcgoteW91ciB0ZXN0IGNhc2VzIHRvIGV4ZXJjaXNlIGl0IG1vcmUgY29tcGxldGVseS4gIEluIHBhcnRpY3VsYXIsIHlvdSB3aWxsIGJlCi1hYmxlIHRvIHJlZmVyIHRvIHRoZSBDIGFuZCBQeXRob24gY29kZSBpbiB0aGUgQ1ZTIHJlcG9zaXRvcnkgd2hlbiB3cml0aW5nCi15b3VyIHJlZ3Jlc3Npb24gdGVzdCBjYXNlcy4KLQotLi4gX3VuaXR0ZXN0OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2N1cnJlbnQvbGliL21vZHVsZS11bml0dGVzdC5odG1sCi0uLiBfZG9jdGVzdDogaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9jdXJyZW50L2xpYi9tb2R1bGUtZG9jdGVzdC5odG1sCi0KLXVuaXR0ZXN0LWJhc2VkIHRlc3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSB1bml0dGVzdF8gZnJhbWV3b3JrIGlzIGJhc2VkIG9uIHRoZSBpZGVhcyBvZiB1bml0IHRlc3RpbmcgYXMgZXNwb3VzZWQKLWJ5IEtlbnQgQmVjayBhbmQgdGhlIGBFeHRyZW1lIFByb2dyYW1taW5nYF8gKFhQKSBtb3ZlbWVudC4gIFRoZSBzcGVjaWZpYwotaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBmcmFtZXdvcmsgaXMgdGlnaHRseSBiYXNlZCBvbiB0aGUgSlVuaXRfCi1KYXZhIGltcGxlbWVudGF0aW9uIG9mIEJlY2sncyBvcmlnaW5hbCBTbWFsbFRhbGsgdGVzdCBmcmFtZXdvcmsuICBQbGVhc2UKLXNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgdW5pdHRlc3RfIG1vZHVsZSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24KLXRoZSBpbnRlcmZhY2UgYW5kIGdlbmVyYWwgZ3VpZGVsaW5lcyBvbiB3cml0aW5nIHVuaXR0ZXN0LWJhc2VkIHRlc3RzLgotCi1UaGUgdGVzdF9zdXBwb3J0IGhlbHBlciBtb2R1bGUgcHJvdmlkZXMgYSBmdW5jdGlvbiBmb3IgdXNlIGJ5Ci11bml0dGVzdC1iYXNlZCB0ZXN0cyBpbiB0aGUgUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdGluZyBmcmFtZXdvcmssCi1gYHJ1bl91bml0dGVzdCgpYGAuIFRoaXMgaXMgdGhlIHByaW1hcnkgd2F5IG9mIHJ1bm5pbmcgdGVzdHMgaW4gdGhlCi1zdGFuZGFyZCBsaWJyYXJ5LiBZb3UgY2FuIHBhc3MgaXQgYW55IG51bWJlciBvZiB0aGUgZm9sbG93aW5nOgotCi0tIGNsYXNzZXMgZGVyaXZlZCBmcm9tIG9yIGluc3RhbmNlcyBvZiBgYHVuaXR0ZXN0LlRlc3RDYXNlYGAgb3IKLSAgYGB1bml0dGVzdC5UZXN0U3VpdGVgYC4gVGhlc2Ugd2lsbCBiZSBoYW5kZWQgb2ZmIHRvIHVuaXR0ZXN0IGZvcgotICBjb252ZXJ0aW5nIGludG8gYSBwcm9wZXIgVGVzdFN1aXRlIGluc3RhbmNlLgotCi0tIGEgc3RyaW5nOyB0aGlzIG11c3QgYmUgYSBrZXkgaW4gc3lzLm1vZHVsZXMuIFRoZSBtb2R1bGUgYXNzb2NpYXRlZCB3aXRoCi0gIHRoYXQgc3RyaW5nIHdpbGwgYmUgc2Nhbm5lZCBieSBgYHVuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZWBgLgotICBUaGlzIGlzIHVzdWFsbHkgc2VlbiBhcyBgYHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pYGAgaW4gYSB0ZXN0Ci0gIG1vZHVsZSdzIGBgdGVzdF9tYWluKClgYCBmdW5jdGlvbi4gVGhpcyBoYXMgdGhlIGFkdmFudGFnZSBvZiBwaWNraW5nIHVwCi0gIG5ldyB0ZXN0cyBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IHlvdSBoYXZpbmcgdG8gYWRkIGVhY2ggbmV3IHRlc3QgY2FzZQotICBtYW51YWxseS4KLSAgIAotQWxsIHRlc3QgbWV0aG9kcyBpbiB0aGUgUHl0aG9uIHJlZ3Jlc3Npb24gZnJhbWV3b3JrIGhhdmUgbmFtZXMgdGhhdAotc3RhcnQgd2l0aCAiYGB0ZXN0X2BgIiBhbmQgdXNlIGxvd2VyLWNhc2UgbmFtZXMgd2l0aCB3b3JkcyBzZXBhcmF0ZWQgd2l0aAotdW5kZXJzY29yZXMuCi0KLVRlc3QgbWV0aG9kcyBzaG91bGQgKm5vdCogaGF2ZSBkb2NzdHJpbmdzISAgVGhlIHVuaXR0ZXN0IG1vZHVsZSBwcmludHMKLXRoZSBkb2NzdHJpbmcgaWYgdGhlcmUgaXMgb25lLCBidXQgb3RoZXJ3aXNlIHByaW50cyB0aGUgZnVuY3Rpb24gbmFtZQotYW5kIHRoZSBmdWxsIGNsYXNzIG5hbWUuICBXaGVuIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggYSB0ZXN0LCB0aGUKLWxhdHRlciBpbmZvcm1hdGlvbiBtYWtlcyBpdCBlYXNpZXIgdG8gZmluZCB0aGUgc291cmNlIGZvciB0aGUgdGVzdAotdGhhbiB0aGUgZG9jc3RyaW5nLgotCi1BbGwgdW5pdHRlc3QtYmFzZWQgdGVzdHMgaW4gdGhlIFB5dGhvbiB0ZXN0IHN1aXRlIHVzZSBib2lsZXJwbGF0ZSB0aGF0Ci1sb29rcyBsaWtlIHRoaXMgKHdpdGggbWlub3IgdmFyaWF0aW9ucyk6OgotCi0gICAgaW1wb3J0IHVuaXR0ZXN0Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLQotICAgIGNsYXNzIE15VGVzdENhc2UxKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICAgICAjIERlZmluZSBzZXRVcCBhbmQgdGVhckRvd24gb25seSBpZiBuZWVkZWQKLQotICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcChzZWxmKQotICAgICAgICAgICAgLi4uIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24uLi4KLQotICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAuLi4gYWRkaXRpb25hbCBmaW5hbGl6YXRpb24uLi4KLSAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCi0KLSAgICAgICAgZGVmIHRlc3RfZmVhdHVyZV9vbmUoc2VsZik6Ci0gICAgICAgICAgICAjIFRlc3RpbmcgZmVhdHVyZSBvbmUKLSAgICAgICAgICAgIC4uLnVuaXQgdGVzdCBmb3IgZmVhdHVyZSBvbmUuLi4KLQotICAgICAgICBkZWYgdGVzdF9mZWF0dXJlX3R3byhzZWxmKToKLSAgICAgICAgICAgICMgVGVzdGluZyBmZWF0dXJlIHR3bwotICAgICAgICAgICAgLi4udW5pdCB0ZXN0IGZvciBmZWF0dXJlIHR3by4uLgotCi0gICAgICAgIC4uLmV0Yy4uLgotCi0gICAgY2xhc3MgTXlUZXN0Q2FzZTIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAuLi5zYW1lIHN0cnVjdHVyZSBhcyBNeVRlc3RDYXNlMS4uLgotCi0gICAgLi4uZXRjLi4uCi0KLSAgICBkZWYgdGVzdF9tYWluKCk6Ci0gICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KLSAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICAgICB0ZXN0X21haW4oKQotCi1UaGlzIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgaXQgYWxsb3dzIHRoZSB1bml0dGVzdCBtb2R1bGUgdG8gYmUgdXNlZAotYXMgYSBzY3JpcHQgdG8gcnVuIGluZGl2aWR1YWwgdGVzdHMgYXMgd2VsbCBhcyB3b3JraW5nIHdlbGwgd2l0aCB0aGUKLXJlZ3J0ZXN0IGZyYW1ld29yay4KLQotLi4gX0V4dHJlbWUgUHJvZ3JhbW1pbmc6IGh0dHA6Ly93d3cuZXh0cmVtZXByb2dyYW1taW5nLm9yZy8KLS4uIF9KVW5pdDogaHR0cDovL3d3dy5qdW5pdC5vcmcvCi0KLWRvY3Rlc3QgYmFzZWQgdGVzdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRlc3RzIHdyaXR0ZW4gdG8gdXNlIGRvY3Rlc3RfIGFyZSBhY3R1YWxseSBwYXJ0IG9mIHRoZSBkb2NzdHJpbmdzIGZvcgotdGhlIG1vZHVsZSBiZWluZyB0ZXN0ZWQuICBFYWNoIHRlc3QgaXMgd3JpdHRlbiBhcyBhIGRpc3BsYXkgb2YgYW4KLWludGVyYWN0aXZlIHNlc3Npb24sIGluY2x1ZGluZyB0aGUgUHl0aG9uIHByb21wdHMsIHN0YXRlbWVudHMgdGhhdCB3b3VsZAotYmUgdHlwZWQgYnkgdGhlIHVzZXIsIGFuZCB0aGUgb3V0cHV0IG9mIHRob3NlIHN0YXRlbWVudHMgKGluY2x1ZGluZwotdHJhY2ViYWNrcywgYWx0aG91Z2ggb25seSB0aGUgZXhjZXB0aW9uIG1zZyBuZWVkcyB0byBiZSByZXRhaW5lZCB0aGVuKS4KLVRoZSBtb2R1bGUgaW4gdGhlIHRlc3QgcGFja2FnZSBpcyBzaW1wbHkgYSB3cmFwcGVyIHRoYXQgY2F1c2VzIGRvY3Rlc3QKLXRvIHJ1biBvdmVyIHRoZSB0ZXN0cyBpbiB0aGUgbW9kdWxlLiAgVGhlIHRlc3QgZm9yIHRoZSBkaWZmbGliIG1vZHVsZQotcHJvdmlkZXMgYSBjb252ZW5pZW50IGV4YW1wbGU6OgotCi0gICAgaW1wb3J0IGRpZmZsaWIKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChkaWZmbGliKQotCi1JZiB0aGUgdGVzdCBpcyBzdWNjZXNzZnVsLCBub3RoaW5nIGlzIHdyaXR0ZW4gdG8gc3Rkb3V0IChzbyB5b3Ugc2hvdWxkIG5vdAotY3JlYXRlIGEgY29ycmVzcG9uZGluZyBvdXRwdXQvdGVzdF9kaWZmbGliIGZpbGUpLCBidXQgcnVubmluZyByZWdydGVzdAotd2l0aCAtdiB3aWxsIGdpdmUgYSBkZXRhaWxlZCByZXBvcnQsIHRoZSBzYW1lIGFzIGlmIHBhc3NpbmcgLXYgdG8gZG9jdGVzdC4KLQotQSBzZWNvbmQgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB0byBydW5fZG9jdGVzdCB0byB0ZWxsIGRvY3Rlc3QgdG8gc2VhcmNoCi1gYHN5cy5hcmd2YGAgZm9yIC12IGluc3RlYWQgb2YgdXNpbmcgdGVzdF9zdXBwb3J0J3MgaWRlYSBvZiB2ZXJib3NpdHkuICBUaGlzCi1pcyB1c2VmdWwgZm9yIHdyaXRpbmcgZG9jdGVzdC1iYXNlZCB0ZXN0cyB0aGF0IGFyZW4ndCBzaW1wbHkgcnVubmluZyBhCi1kb2N0ZXN0J2VkIExpYiBtb2R1bGUsIGJ1dCBjb250YWluIHRoZSBkb2N0ZXN0cyB0aGVtc2VsdmVzLiAgVGhlbiBhdAotdGltZXMgeW91IG1heSB3YW50IHRvIHJ1biBzdWNoIGEgdGVzdCBkaXJlY3RseSBhcyBhIGRvY3Rlc3QsIGluZGVwZW5kZW50Ci1vZiB0aGUgcmVncnRlc3QgZnJhbWV3b3JrLiAgVGhlIHRhaWwgZW5kIG9mIHRlc3RfZGVzY3J0dXQucHkgaXMgYSBnb29kCi1leGFtcGxlOjoKLQotICAgIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZGVzY3J0dXQKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZGVzY3J0dXQsIHZlcmJvc2UpCi0KLSAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICAgICB0ZXN0X21haW4oMSkKLQotSWYgcnVuIHZpYSByZWdydGVzdCwgYGB0ZXN0X21haW4oKWBgIGlzIGNhbGxlZCAoYnkgcmVncnRlc3QpIHdpdGhvdXQKLXNwZWNpZnlpbmcgdmVyYm9zZSwgYW5kIHRoZW4gdGVzdF9zdXBwb3J0J3MgaWRlYSBvZiB2ZXJib3NpdHkgaXMgdXNlZC4gIEJ1dAotd2hlbiBydW4gZGlyZWN0bHksIGBgdGVzdF9tYWluKDEpYGAgaXMgY2FsbGVkLCBhbmQgdGhlbiBkb2N0ZXN0J3MgaWRlYSBvZgotdmVyYm9zaXR5IGlzIHVzZWQuCi0KLVNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGRvY3Rlc3QgbW9kdWxlIGZvciBpbmZvcm1hdGlvbiBvbgotd3JpdGluZyB0ZXN0cyB1c2luZyB0aGUgZG9jdGVzdCBmcmFtZXdvcmsuCi0KLSJ0cmFkaXRpb25hbCIgUHl0aG9uIHRlc3QgbW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUgInRyYWRpdGlvbmFsIiB0ZXN0IHN5c3RlbSBvcGVyYXRlcyBhcmUgZmFpcmx5Ci1zdHJhaWdodGZvcndhcmQuICBXaGVuIGEgdGVzdCBjYXNlIGlzIHJ1biwgdGhlIG91dHB1dCBpcyBjb21wYXJlZCB3aXRoIHRoZQotZXhwZWN0ZWQgb3V0cHV0IHRoYXQgaXMgc3RvcmVkIGluIC4uLi9MaWIvdGVzdC9vdXRwdXQuICBJZiB0aGUgdGVzdCBydW5zIHRvCi1jb21wbGV0aW9uIGFuZCB0aGUgYWN0dWFsIGFuZCBleHBlY3RlZCBvdXRwdXRzIG1hdGNoLCB0aGUgdGVzdCBzdWNjZWVkcywgaWYKLW5vdCwgaXQgZmFpbHMuICBJZiBhbiBgYEltcG9ydEVycm9yYGAgb3IgYGB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWRgYCBlcnJvcgotaXMgcmFpc2VkLCB0aGUgdGVzdCBpcyBub3QgcnVuLgotCi1FeGVjdXRpbmcgVGVzdCBDYXNlcwotPT09PT09PT09PT09PT09PT09PT0KLUlmIHlvdSBhcmUgd3JpdGluZyB0ZXN0IGNhc2VzIGZvciBtb2R1bGUgc3BhbSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgZmlsZQotaW4gLi4uL0xpYi90ZXN0IG5hbWVkIHRlc3Rfc3BhbS5weS4gIEluIGFkZGl0aW9uLCBpZiB0aGUgdGVzdHMgYXJlIGV4cGVjdGVkCi10byB3cml0ZSB0byBzdGRvdXQgZHVyaW5nIGEgc3VjY2Vzc2Z1bCBydW4sIHlvdSBhbHNvIG5lZWQgdG8gY3JlYXRlIGFuCi1leHBlY3RlZCBvdXRwdXQgZmlsZSBpbiAuLi4vTGliL3Rlc3Qvb3V0cHV0IG5hbWVkIHRlc3Rfc3BhbSAoIi4uLiIKLXJlcHJlc2VudHMgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgaW4gdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSwgdGhlIGRpcmVjdG9yeQotY29udGFpbmluZyB0aGUgY29uZmlndXJlIHNjcmlwdCkuICBJZiBuZWVkZWQsIGdlbmVyYXRlIHRoZSBpbml0aWFsIHZlcnNpb24KLW9mIHRoZSB0ZXN0IG91dHB1dCBmaWxlIGJ5IGV4ZWN1dGluZzo6Ci0KLSAgICAuL3B5dGhvbiBMaWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X3NwYW0ucHkKLQotZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KLQotQW55IHRpbWUgeW91IG1vZGlmeSB0ZXN0X3NwYW0ucHkgeW91IG5lZWQgdG8gZ2VuZXJhdGUgYSBuZXcgZXhwZWN0ZWQKLW91dHB1dCBmaWxlLiAgRG9uJ3QgZm9yZ2V0IHRvIGRlc2sgY2hlY2sgdGhlIGdlbmVyYXRlZCBvdXRwdXQgdG8gbWFrZSBzdXJlCi1pdCdzIHJlYWxseSB3aGF0IHlvdSBleHBlY3RlZCB0byBmaW5kISAgQWxsIGluIGFsbCBpdCdzIHVzdWFsbHkgYmV0dGVyCi1ub3QgdG8gaGF2ZSBhbiBleHBlY3RlZC1vdXQgZmlsZSAobm90ZSB0aGF0IGRvY3Rlc3QtIGFuZCB1bml0dGVzdC1iYXNlZAotdGVzdHMgZG8gbm90KS4KLQotVG8gcnVuIGEgc2luZ2xlIHRlc3QgYWZ0ZXIgbW9kaWZ5aW5nIGEgbW9kdWxlLCBzaW1wbHkgcnVuIHJlZ3J0ZXN0LnB5Ci13aXRob3V0IHRoZSAtZyBmbGFnOjoKLQotICAgIC4vcHl0aG9uIExpYi90ZXN0L3JlZ3J0ZXN0LnB5IHRlc3Rfc3BhbS5weQotCi1XaGlsZSBkZWJ1Z2dpbmcgYSByZWdyZXNzaW9uIHRlc3QsIHlvdSBjYW4gb2YgY291cnNlIGV4ZWN1dGUgaXQKLWluZGVwZW5kZW50bHkgb2YgdGhlIHJlZ3Jlc3Npb24gdGVzdGluZyBmcmFtZXdvcmsgYW5kIHNlZSB3aGF0IGl0IHByaW50czo6Ci0KLSAgICAuL3B5dGhvbiBMaWIvdGVzdC90ZXN0X3NwYW0ucHkKLQotVG8gcnVuIHRoZSBlbnRpcmUgdGVzdCBzdWl0ZToKLQotLSBbVU5JWCwgKyBvdGhlciBwbGF0Zm9ybXMgd2hlcmUgIm1ha2UiIHdvcmtzXSBNYWtlIHRoZSAidGVzdCIgdGFyZ2V0IGF0IHRoZQotICB0b3AgbGV2ZWw6OgotCi0gICAgbWFrZSB0ZXN0Ci0KLS0gW1dJTkRPV1NdIFJ1biBydC5iYXQgZnJvbSB5b3VyIFBDQnVpbGQgZGlyZWN0b3J5LiAgUmVhZCB0aGUgY29tbWVudHMgYXQKLSAgdGhlIHRvcCBvZiBydC5iYXQgZm9yIHRoZSB1c2Ugb2Ygc3BlY2lhbCAtZCwgLU8gYW5kIC1xIG9wdGlvbnMgcHJvY2Vzc2VkCi0gIGJ5IHJ0LmJhdC4KLQotLSBbT1RIRVJdIFlvdSBjYW4gc2ltcGx5IGV4ZWN1dGUgdGhlIHR3byBydW5zIG9mIHJlZ3J0ZXN0IChvcHRpbWl6ZWQgYW5kCi0gIG5vbi1vcHRpbWl6ZWQpIGRpcmVjdGx5OjoKLQotICAgIC4vcHl0aG9uIExpYi90ZXN0L3JlZ3J0ZXN0LnB5Ci0gICAgLi9weXRob24gLU8gTGliL3Rlc3QvcmVncnRlc3QucHkKLQotQnV0IG5vdGUgdGhhdCB0aGlzIHdheSBwaWNrcyB1cCB3aGF0ZXZlciAucHljIGFuZCAucHlvIGZpbGVzIGhhcHBlbiB0byBiZQotYXJvdW5kLiAgVGhlIG1ha2VmaWxlIGFuZCBydC5iYXQgd2F5cyBydW4gdGhlIHRlc3RzIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtb3ZpbmcgYWxsIC5weWMgYW5kIC5weW8gZmlsZXMgZnJvbSB0aGUgc3VidHJlZSByb290ZWQgYXQgTGliLy4KLQotVGVzdCBjYXNlcyBnZW5lcmF0ZSBvdXRwdXQgYmFzZWQgdXBvbiB2YWx1ZXMgY29tcHV0ZWQgYnkgdGhlIHRlc3QgY29kZS4KLVdoZW4gZXhlY3V0ZWQsIHJlZ3J0ZXN0LnB5IGNvbXBhcmVzIHRoZSBhY3R1YWwgb3V0cHV0IGdlbmVyYXRlZCBieSBleGVjdXRpbmcKLXRoZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZXhwZWN0ZWQgb3V0cHV0IGFuZCByZXBvcnRzIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gIEl0Ci1zdGFuZHMgdG8gcmVhc29uIHRoYXQgaWYgdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgb3V0cHV0cyBhcmUgdG8gbWF0Y2gsIHRoZXkKLW11c3Qgbm90IGNvbnRhaW4gYW55IG1hY2hpbmUgZGVwZW5kZW5jaWVzLiAgVGhpcyBtZWFucyB5b3VyIHRlc3QgY2FzZXMKLXNob3VsZCBub3QgcHJpbnQgb3V0IGFic29sdXRlIG1hY2hpbmUgYWRkcmVzc2VzIChlLmcuIHRoZSByZXR1cm4gdmFsdWUgb2YKLXRoZSBpZCgpIGJ1aWx0aW4gZnVuY3Rpb24pIG9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCBsYXJnZSBudW1iZXJzIG9mCi1zaWduaWZpY2FudCBkaWdpdHMgKHVubGVzcyB5b3UgdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgZG9pbmchKS4KLQotCi1UZXN0IENhc2UgV3JpdGluZyBUaXBzCi09PT09PT09PT09PT09PT09PT09PT09Ci1Xcml0aW5nIGdvb2QgdGVzdCBjYXNlcyBpcyBhIHNraWxsZWQgdGFzayBhbmQgaXMgdG9vIGNvbXBsZXggdG8gZGlzY3VzcyBpbgotZGV0YWlsIGluIHRoaXMgc2hvcnQgZG9jdW1lbnQuICBNYW55IGJvb2tzIGhhdmUgYmVlbiB3cml0dGVuIG9uIHRoZSBzdWJqZWN0LgotSSdsbCBzaG93IG15IGFnZSBieSBzdWdnZXN0aW5nIHRoYXQgR2xlbmZvcmQgTXllcnMnIGAiVGhlIEFydCBvZiBTb2Z0d2FyZQotVGVzdGluZyJgXywgcHVibGlzaGVkIGluIDE5NzksIGlzIHN0aWxsIHRoZSBiZXN0IGludHJvZHVjdGlvbiB0byB0aGUgc3ViamVjdAotYXZhaWxhYmxlLiAgSXQgaXMgc2hvcnQgKDE3NyBwYWdlcyksIGVhc3kgdG8gcmVhZCwgYW5kIGRpc2N1c3NlcyB0aGUgbWFqb3IKLWVsZW1lbnRzIG9mIHNvZnR3YXJlIHRlc3RpbmcsIHRob3VnaCBpdHMgcHVibGljYXRpb24gcHJlZGF0ZXMgdGhlCi1vYmplY3Qtb3JpZW50ZWQgc29mdHdhcmUgcmV2b2x1dGlvbiwgc28gZG9lc24ndCBjb3ZlciB0aGF0IHN1YmplY3QgYXQgYWxsLgotVW5mb3J0dW5hdGVseSwgaXQgaXMgdmVyeSBleHBlbnNpdmUgKGFib3V0ICQxMDAgbmV3KS4gIElmIHlvdSBjYW4gYm9ycm93IGl0Ci1vciBmaW5kIGl0IHVzZWQgKGFyb3VuZCAkMjApLCBJIHN0cm9uZ2x5IHVyZ2UgeW91IHRvIHBpY2sgdXAgYSBjb3B5LgotCi1UaGUgbW9zdCBpbXBvcnRhbnQgZ29hbCB3aGVuIHdyaXRpbmcgdGVzdCBjYXNlcyBpcyB0byBicmVhayB0aGluZ3MuICBBIHRlc3QKLWNhc2UgdGhhdCBkb2Vzbid0IHVuY292ZXIgYSBidWcgaXMgbXVjaCBsZXNzIHZhbHVhYmxlIHRoYW4gb25lIHRoYXQgZG9lcy4KLUluIGRlc2lnbmluZyB0ZXN0IGNhc2VzIHlvdSBzaG91bGQgcGF5IGF0dGVudGlvbiB0byB0aGUgZm9sbG93aW5nOgotCi0gICAgKiBZb3VyIHRlc3QgY2FzZXMgc2hvdWxkIGV4ZXJjaXNlIGFsbCB0aGUgZnVuY3Rpb25zIGFuZCBvYmplY3RzIGRlZmluZWQKLSAgICAgIGluIHRoZSBtb2R1bGUsIG5vdCBqdXN0IHRoZSBvbmVzIG1lYW50IHRvIGJlIGNhbGxlZCBieSB1c2VycyBvZiB5b3VyCi0gICAgICBtb2R1bGUuICBUaGlzIG1heSByZXF1aXJlIHlvdSB0byB3cml0ZSB0ZXN0IGNvZGUgdGhhdCB1c2VzIHRoZSBtb2R1bGUKLSAgICAgIGluIHdheXMgeW91IGRvbid0IGV4cGVjdCAoZXhwbGljaXRseSBjYWxsaW5nIGludGVybmFsIGZ1bmN0aW9ucywgZm9yCi0gICAgICBleGFtcGxlIC0gc2VlIHRlc3RfYXRleGl0LnB5KS4KLQotICAgICogWW91IHNob3VsZCBjb25zaWRlciBhbnkgYm91bmRhcnkgdmFsdWVzIHRoYXQgbWF5IHRpY2tsZSBleGNlcHRpb25hbAotICAgICAgY29uZGl0aW9ucyAoZS5nLiBpZiB5b3Ugd2VyZSB3cml0aW5nIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGRpdmlzaW9uLAotICAgICAgeW91IG1pZ2h0IHdlbGwgd2FudCB0byBnZW5lcmF0ZSB0ZXN0cyB3aXRoIG51bWVyYXRvcnMgYW5kIGRlbm9taW5hdG9ycwotICAgICAgYXQgdGhlIGxpbWl0cyBvZiBmbG9hdGluZyBwb2ludCBhbmQgaW50ZWdlciBudW1iZXJzIG9uIHRoZSBtYWNoaW5lCi0gICAgICBwZXJmb3JtaW5nIHRoZSB0ZXN0cyBhcyB3ZWxsIGFzIGEgZGVub21pbmF0b3Igb2YgemVybykuCi0KLSAgICAqIFlvdSBzaG91bGQgZXhlcmNpc2UgYXMgbWFueSBwYXRocyB0aHJvdWdoIHRoZSBjb2RlIGFzIHBvc3NpYmxlLiAgVGhpcwotICAgICAgbWF5IG5vdCBhbHdheXMgYmUgcG9zc2libGUsIGJ1dCBpcyBhIGdvYWwgdG8gc3RyaXZlIGZvci4gIEluCi0gICAgICBwYXJ0aWN1bGFyLCB3aGVuIGNvbnNpZGVyaW5nIGlmIHN0YXRlbWVudHMgKG9yIHRoZWlyIGVxdWl2YWxlbnQpLCB5b3UKLSAgICAgIHdhbnQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgdGhhdCBleGVyY2lzZSBib3RoIHRoZSB0cnVlIGFuZCBmYWxzZQotICAgICAgYnJhbmNoZXMuICBGb3IgbG9vcHMsIHlvdSBzaG91bGQgY3JlYXRlIHRlc3QgY2FzZXMgdGhhdCBleGVyY2lzZSB0aGUKLSAgICAgIGxvb3AgemVybywgb25lIGFuZCBtdWx0aXBsZSB0aW1lcy4KLQotICAgICogWW91IHNob3VsZCB0ZXN0IHdpdGggb2J2aW91c2x5IGludmFsaWQgaW5wdXQuICBJZiB5b3Uga25vdyB0aGF0IGEKLSAgICAgIGZ1bmN0aW9uIHJlcXVpcmVzIGFuIGludGVnZXIgaW5wdXQsIHRyeSBjYWxsaW5nIGl0IHdpdGggb3RoZXIgdHlwZXMgb2YKLSAgICAgIG9iamVjdHMgdG8gc2VlIGhvdyBpdCByZXNwb25kcy4KLQotICAgICogWW91IHNob3VsZCB0ZXN0IHdpdGggb2J2aW91c2x5IG91dC1vZi1yYW5nZSBpbnB1dC4gIElmIHRoZSBkb21haW4gb2YgYQotICAgICAgZnVuY3Rpb24gaXMgb25seSBkZWZpbmVkIGZvciBwb3NpdGl2ZSBpbnRlZ2VycywgdHJ5IGNhbGxpbmcgaXQgd2l0aCBhCi0gICAgICBuZWdhdGl2ZSBpbnRlZ2VyLgotCi0gICAgKiBJZiB5b3UgYXJlIGdvaW5nIHRvIGZpeCBhIGJ1ZyB0aGF0IHdhc24ndCB1bmNvdmVyZWQgYnkgYW4gZXhpc3RpbmcKLSAgICAgIHRlc3QsIHRyeSB0byB3cml0ZSBhIHRlc3QgY2FzZSB0aGF0IGV4cG9zZXMgdGhlIGJ1ZyAocHJlZmVyYWJseSBiZWZvcmUKLSAgICAgIGZpeGluZyBpdCkuCi0KLSAgICAqIElmIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlLCB5b3UgY2FuIHVzZSB0aGUgZmlsZW5hbWUgaW4KLSAgICAgIGBgdGVzdF9zdXBwb3J0LlRFU1RGTmBgIHRvIGRvIHNvLiAgSXQgaXMgaW1wb3J0YW50IHRvIHJlbW92ZSB0aGUgZmlsZQotICAgICAgd2hlbiBkb25lOyBvdGhlciB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhlIG5hbWUgd2l0aG91dCBjbGVhbmluZwotICAgICAgdXAgYWZ0ZXIgeW91ciB0ZXN0LgotCi0uLiBfIlRoZSBBcnQgb2YgU29mdHdhcmUgVGVzdGluZyI6IAotICAgICAgICBodHRwOi8vd3d3LmFtYXpvbi5jb20vZXhlYy9vYmlkb3MvSVNCTj0wNDcxMDQzMjgxCi0KLVJlZ3Jlc3Npb24gVGVzdCBXcml0aW5nIFJ1bGVzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotRWFjaCB0ZXN0IGNhc2UgaXMgZGlmZmVyZW50LiAgVGhlcmUgaXMgbm8gInN0YW5kYXJkIiBmb3JtIGZvciBhIFB5dGhvbgotcmVncmVzc2lvbiB0ZXN0IGNhc2UsIHRob3VnaCB0aGVyZSBhcmUgc29tZSBnZW5lcmFsIHJ1bGVzIChub3RlIHRoYXQKLXRoZXNlIG1vc3RseSBhcHBseSBvbmx5IHRvIHRoZSAiY2xhc3NpYyIgdGVzdHM7IHVuaXR0ZXN0Xy0gYW5kIGRvY3Rlc3RfLQotYmFzZWQgdGVzdHMgc2hvdWxkIGZvbGxvdyB0aGUgY29udmVudGlvbnMgbmF0dXJhbCB0byB0aG9zZSBmcmFtZXdvcmtzKTo6Ci0KLSAgICAqIElmIHlvdXIgdGVzdCBjYXNlIGRldGVjdHMgYSBmYWlsdXJlLCByYWlzZSBgYFRlc3RGYWlsZWRgYCAoZm91bmQgaW4KLSAgICAgIGBgdGVzdC50ZXN0X3N1cHBvcnRgYCkuCi0KLSAgICAqIEltcG9ydCBldmVyeXRoaW5nIHlvdSdsbCBuZWVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlLgotCi0gICAgKiBJZiB5b3UnbGwgYmUgaW1wb3J0aW5nIG9iamVjdHMgZnJvbSBhIG1vZHVsZSB0aGF0IGlzIGF0IGxlYXN0Ci0gICAgICBwYXJ0aWFsbHkgcGxhdGZvcm0tZGVwZW5kZW50LCBvbmx5IGltcG9ydCB0aG9zZSBvYmplY3RzIHlvdSBuZWVkIGZvcgotICAgICAgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIHRvIGF2b2lkIHNwdXJpb3VzIGBgSW1wb3J0RXJyb3JgYCBleGNlcHRpb25zCi0gICAgICB0aGF0IHByZXZlbnQgdGhlIHRlc3QgZnJvbSBydW5uaW5nIHRvIGNvbXBsZXRpb24uCi0KLSAgICAqIFByaW50IGFsbCB5b3VyIHRlc3QgY2FzZSByZXN1bHRzIHVzaW5nIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LiAgRm9yCi0gICAgICBub24tZmF0YWwgZXJyb3JzLCBwcmludCBhbiBlcnJvciBtZXNzYWdlIChvciBvbWl0IGEgc3VjY2Vzc2Z1bAotICAgICAgY29tcGxldGlvbiBwcmludCkgdG8gaW5kaWNhdGUgdGhlIGZhaWx1cmUsIGJ1dCBwcm9jZWVkIGluc3RlYWQgb2YKLSAgICAgIHJhaXNpbmcgYGBUZXN0RmFpbGVkYGAuCi0KLSAgICAqIFVzZSBgYGFzc2VydGBgIHNwYXJpbmdseSwgaWYgYXQgYWxsLiAgSXQncyB1c3VhbGx5IGJldHRlciB0byBqdXN0IHByaW50Ci0gICAgICB3aGF0IHlvdSBnb3QsIGFuZCByZWx5IG9uIHJlZ3J0ZXN0J3MgZ290LXZzLWV4cGVjdGVkIGNvbXBhcmlzb24gdG8KLSAgICAgIGNhdGNoIGRldmlhdGlvbnMgZnJvbSB3aGF0IHlvdSBleHBlY3QuICBgYGFzc2VydGBgIHN0YXRlbWVudHMgYXJlbid0Ci0gICAgICBleGVjdXRlZCBhdCBhbGwgd2hlbiByZWdydGVzdCBpcyBydW4gaW4gLU8gbW9kZTsgYW5kLCBiZWNhdXNlIHRoZXkKLSAgICAgIGNhdXNlIHRoZSB0ZXN0IHRvIHN0b3AgaW1tZWRpYXRlbHksIGNhbiBsZWFkIHRvIGEgbG9uZyAmIHRlZGlvdXMKLSAgICAgIHRlc3QtZml4LCB0ZXN0LWZpeCwgdGVzdC1maXgsIC4uLiBjeWNsZSB3aGVuIHRoaW5ncyBhcmUgYmFkbHkgYnJva2VuCi0gICAgICAoYW5kIG5vdGUgdGhhdCAiYmFkbHkgYnJva2VuIiBvZnRlbiBpbmNsdWRlcyBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlCi0gICAgICBmb3IgdGhlIGZpcnN0IHRpbWUgb24gbmV3IHBsYXRmb3JtcyBvciB1bmRlciBuZXcgaW1wbGVtZW50YXRpb25zIG9mCi0gICAgICB0aGUgbGFuZ3VhZ2UpLgotCi1NaXNjZWxsYW5lb3VzCi09PT09PT09PT09PT09Ci1UaGVyZSBpcyBhIHRlc3Rfc3VwcG9ydCBtb2R1bGUgaW4gdGhlIHRlc3QgcGFja2FnZSB5b3UgY2FuIGltcG9ydCBmb3IKLXlvdXIgdGVzdCBjYXNlLiAgSW1wb3J0IHRoaXMgbW9kdWxlIHVzaW5nIGVpdGhlcjo6Ci0KLSAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKLQotb3I6OgotCi0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLQotdGVzdF9zdXBwb3J0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgdXNlZnVsIG9iamVjdHM6Ci0KLSAgICAqIGBgVGVzdEZhaWxlZGBgIC0gcmFpc2UgdGhpcyBleGNlcHRpb24gd2hlbiB5b3VyIHJlZ3Jlc3Npb24gdGVzdCBkZXRlY3RzCi0gICAgICBhIGZhaWx1cmUuCi0KLSAgICAqIGBgVGVzdFNraXBwZWRgYCAtIHJhaXNlIHRoaXMgaWYgdGhlIHRlc3QgY291bGQgbm90IGJlIHJ1biBiZWNhdXNlIHRoZQotICAgICAgcGxhdGZvcm0gZG9lc24ndCBvZmZlciBhbGwgdGhlIHJlcXVpcmVkIGZhY2lsaXRpZXMgKGxpa2UgbGFyZ2UKLSAgICAgIGZpbGUgc3VwcG9ydCksIGV2ZW4gaWYgYWxsIHRoZSByZXF1aXJlZCBtb2R1bGVzIGFyZSBhdmFpbGFibGUuCi0KLSAgICAqIGBgUmVzb3VyY2VEZW5pZWRgYCAtIHRoaXMgaXMgcmFpc2VkIHdoZW4gYSB0ZXN0IHJlcXVpcmVzIGEgcmVzb3VyY2UgdGhhdAotICAgICAgaXMgbm90IGF2YWlsYWJsZS4gIFByaW1hcmlseSB1c2VkIGJ5ICdyZXF1aXJlcycuCi0KLSAgICAqIGBgdmVyYm9zZWBgIC0geW91IGNhbiB1c2UgdGhpcyB2YXJpYWJsZSB0byBjb250cm9sIHByaW50IG91dHB1dC4gIE1hbnkKLSAgICAgIG1vZHVsZXMgdXNlIGl0LiAgU2VhcmNoIGZvciAidmVyYm9zZSIgaW4gdGhlIHRlc3RfKi5weSBmaWxlcyB0byBzZWUKLSAgICAgIGxvdHMgb2YgZXhhbXBsZXMuCi0KLSAgICAqIGBgZm9yZ2V0KG1vZHVsZV9uYW1lKWBgIC0gYXR0ZW1wdHMgdG8gY2F1c2UgUHl0aG9uIHRvICJmb3JnZXQiIHRoYXQgaXQKLSAgICAgIGxvYWRlZCBhIG1vZHVsZSBhbmQgZXJhc2UgYW55IFBZQyBmaWxlcy4KLQotICAgICogYGBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKWBgIC0gUmV0dXJucyBhIGJvb2xlYW4gYmFzZWQgb24gd2hldGhlcgotICAgICAgdGhlIHJlc291cmNlIGlzIGVuYWJsZWQgb3Igbm90LgotCi0gICAgKiBgYHJlcXVpcmVzKHJlc291cmNlIFssIG1zZ10pYGAgLSBpZiB0aGUgcmVxdWlyZWQgcmVzb3VyY2UgaXMgbm90Ci0gICAgICBhdmFpbGFibGUgdGhlIFJlc291cmNlRGVuaWVkIGV4Y2VwdGlvbiBpcyByYWlzZWQuCi0gICAgCi0gICAgKiBgYHZlcmlmeShjb25kaXRpb24sIHJlYXNvbj0ndGVzdCBmYWlsZWQnKWBgLiAgVXNlIHRoaXMgaW5zdGVhZCBvZjo6Ci0KLSAgICAgICAgICBhc3NlcnQgY29uZGl0aW9uWywgcmVhc29uXQotCi0gICAgICBgYHZlcmlmeSgpYGAgaGFzIHR3byBhZHZhbnRhZ2VzIG92ZXIgYGBhc3NlcnRgYDogIGl0IHdvcmtzIGV2ZW4gaW4gLU8KLSAgICAgIG1vZGUsIGFuZCBpdCByYWlzZXMgYGBUZXN0RmFpbGVkYGAgb24gZmFpbHVyZSBpbnN0ZWFkIG9mCi0gICAgICBgYEFzc2VydGlvbkVycm9yYGAuCi0KLSAgICAqIGBgaGF2ZV91bmljb2RlYGAgLSB0cnVlIGlmIFVuaWNvZGUgaXMgYXZhaWxhYmxlLCBmYWxzZSBvdGhlcndpc2UuCi0KLSAgICAqIGBgaXNfanl0aG9uYGAgLSB0cnVlIGlmIHRoZSBpbnRlcnByZXRlciBpcyBKeXRob24sIGZhbHNlIG90aGVyd2lzZS4KLQotICAgICogYGBURVNURk5gYCAtIGEgc3RyaW5nIHRoYXQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGFzIHRoZSBmaWxlbmFtZSB3aGVuCi0gICAgICB5b3UgbmVlZCB0byBjcmVhdGUgYSB0ZW1wIGZpbGUuICBBbHNvIHVzZSBgYHRyeWBgL2BgZmluYWxseWBgIHRvCi0gICAgICBlbnN1cmUgdGhhdCB5b3VyIHRlbXAgZmlsZXMgYXJlIGRlbGV0ZWQgYmVmb3JlIHlvdXIgdGVzdCBjb21wbGV0ZXMuCi0gICAgICBOb3RlIHRoYXQgeW91IGNhbm5vdCB1bmxpbmsgYW4gb3BlbiBmaWxlIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgc28KLSAgICAgIGFsc28gYmUgc3VyZSB0byBjbG9zZSB0ZW1wIGZpbGVzIGJlZm9yZSB0cnlpbmcgdG8gdW5saW5rIHRoZW0uCi0KLSAgICAqIGBgc29ydGRpY3QoZGljdClgYCAtIGFjdHMgbGlrZSBgYHJlcHIoZGljdC5pdGVtcygpKWBgLCBidXQgc29ydHMgdGhlCi0gICAgICBpdGVtcyBmaXJzdC4gIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gcHJpbnRpbmcgYSBkaWN0IHZhbHVlLCBiZWNhdXNlCi0gICAgICB0aGUgb3JkZXIgb2YgaXRlbXMgcHJvZHVjZWQgYnkgYGBkaWN0Lml0ZW1zKClgYCBpcyBub3QgZGVmaW5lZCBieSB0aGUKLSAgICAgIGxhbmd1YWdlLgotCi0gICAgKiBgYGZpbmRmaWxlKGZpbGUpYGAgLSB5b3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBsb2NhdGUgYSBmaWxlCi0gICAgICBzb21ld2hlcmUgYWxvbmcgc3lzLnBhdGggb3IgaW4gdGhlIExpYi90ZXN0IHRyZWUgLSBzZWUKLSAgICAgIHRlc3RfbGludXhhdWRpb2Rldi5weSBmb3IgYW4gZXhhbXBsZSBvZiBpdHMgdXNlLgotCi0gICAgKiBgYGZjbXAoeCx5KWBgIC0geW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gY29tcGFyZSB0d28gZmxvYXRpbmcKLSAgICAgIHBvaW50IG51bWJlcnMgd2hlbiB5b3UgZXhwZWN0IHRoZW0gdG8gb25seSBiZSBhcHByb3hpbWF0ZWx5IGVxdWFsCi0gICAgICB3aXRoaW5nIGEgZnV6eiBmYWN0b3IgKGBgdGVzdF9zdXBwb3J0LkZVWlpgYCwgd2hpY2ggZGVmYXVsdHMgdG8gMWUtNikuCi0KLSAgICAqIGBgY2hlY2tfc3ludGF4X2Vycm9yKHRlc3RjYXNlLCBzdGF0ZW1lbnQpYGAgLSBtYWtlIHN1cmUgdGhhdCB0aGUKLSAgICAgIHN0YXRlbWVudCBpcyAqbm90KiBjb3JyZWN0IFB5dGhvbiBzeW50YXguCi0KLQotU29tZSBOb24tT2J2aW91cyByZWdydGVzdCBGZWF0dXJlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICogQXV0b21hZ2ljIHRlc3QgZGV0ZWN0aW9uOiAgV2hlbiB5b3UgY3JlYXRlIGEgbmV3IHRlc3QgZmlsZQotICAgICAgdGVzdF9zcGFtLnB5LCB5b3UgZG8gbm90IG5lZWQgdG8gbW9kaWZ5IHJlZ3J0ZXN0IChvciBhbnl0aGluZyBlbHNlKQotICAgICAgdG8gYWR2ZXJ0aXNlIGl0cyBleGlzdGVuY2UuICByZWdydGVzdCBzZWFyY2hlcyBmb3IgYW5kIHJ1bnMgYWxsCi0gICAgICBtb2R1bGVzIGluIHRoZSB0ZXN0IGRpcmVjdG9yeSB3aXRoIG5hbWVzIG9mIHRoZSBmb3JtIHRlc3RfeHh4LnB5LgotCi0gICAgKiBNaXJhbmRhIG91dHB1dDogIElmLCB3aGVuIHJ1bm5pbmcgdGVzdF9zcGFtLnB5LCByZWdydGVzdCBkb2VzIG5vdAotICAgICAgZmluZCBhbiBleHBlY3RlZC1vdXRwdXQgZmlsZSB0ZXN0L291dHB1dC90ZXN0X3NwYW0sIHJlZ3J0ZXN0Ci0gICAgICBwcmV0ZW5kcyB0aGF0IGl0IGRpZCBmaW5kIG9uZSwgY29udGFpbmluZyB0aGUgc2luZ2xlIGxpbmUKLQotICAgICAgdGVzdF9zcGFtCi0KLSAgICAgIFRoaXMgYWxsb3dzIG5ldyB0ZXN0cyB0aGF0IGRvbid0IGV4cGVjdCB0byBwcmludCBhbnl0aGluZyB0byBzdGRvdXQKLSAgICAgIHRvIG5vdCBib3RoZXIgY3JlYXRpbmcgZXhwZWN0ZWQtb3V0cHV0IGZpbGVzLgotCi0gICAgKiBUd28tc3RhZ2UgdGVzdGluZzogIFRvIHJ1biB0ZXN0X3NwYW0ucHksIHJlZ3J0ZXN0IGltcG9ydHMgdGVzdF9zcGFtCi0gICAgICBhcyBhIG1vZHVsZS4gIE1vc3QgdGVzdHMgcnVuIHRvIGNvbXBsZXRpb24gYXMgYSBzaWRlLWVmZmVjdCBvZgotICAgICAgZ2V0dGluZyBpbXBvcnRlZC4gIEFmdGVyIGltcG9ydGluZyB0ZXN0X3NwYW0sIHJlZ3J0ZXN0IGFsc28gZXhlY3V0ZXMKLSAgICAgIGBgdGVzdF9zcGFtLnRlc3RfbWFpbigpYGAsIGlmIHRlc3Rfc3BhbSBoYXMgYSBgYHRlc3RfbWFpbmBgIGF0dHJpYnV0ZS4KLSAgICAgIFRoaXMgaXMgcmFyZWx5IHJlcXVpcmVkIHdpdGggdGhlICJ0cmFkaXRpb25hbCIgUHl0aG9uIHRlc3RzLCBhbmQKLSAgICAgIHlvdSBzaG91bGRuJ3QgY3JlYXRlIGEgbW9kdWxlIGdsb2JhbCB3aXRoIG5hbWUgdGVzdF9tYWluIHVubGVzcwotICAgICAgeW91J3JlIHNwZWNpZmljYWxseSBleHBsb2l0aW5nIHRoaXMgZ2ltbWljay4gIFRoaXMgdXNhZ2UgZG9lcwotICAgICAgcHJvdmUgdXNlZnVsIHdpdGggdW5pdHRlc3QtYmFzZWQgdGVzdHMgYXMgd2VsbCwgaG93ZXZlcjsgZGVmaW5pbmcKLSAgICAgIGEgYGB0ZXN0X21haW4oKWBgIHdoaWNoIGlzIHJ1biBieSByZWdydGVzdCBhbmQgYSBzY3JpcHQtc3R1YiBpbiB0aGUKLSAgICAgIHRlc3QgbW9kdWxlICgiYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiB0ZXN0X21haW4oKWBgIikgYWxsb3dzCi0gICAgICB0aGUgdGVzdCB0byBiZSB1c2VkIGxpa2UgYW55IG90aGVyIFB5dGhvbiB0ZXN0IGFuZCBhbHNvIHdvcmsKLSAgICAgIHdpdGggdGhlIHVuaXR0ZXN0LnB5LWFzLWEtc2NyaXB0IGFwcHJvYWNoLCBhbGxvd2luZyBhIGRldmVsb3BlcgotICAgICAgdG8gcnVuIHNwZWNpZmljIHRlc3RzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weSBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQppbmRleCBkYjI3NzU5Li5kMGQ4YTU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CkBAIC0xNSwzMiArMTUsMzIgQEAKIAogICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInYScpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2xvd2VyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInQScpLmlzbG93ZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzbG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhQmMnKS5pc2xvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNsb3dlcigpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIsIDQyKQogCiAgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc3VwcGVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzdXBwZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0EnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXN1cHBlcigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXN1cHBlcigpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQUJDJykuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQUJDJykuaXN1cHBlcigpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ0FiQycpLmlzdXBwZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0FCQ1xuJykuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQUJDXG4nKS5pc3VwcGVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN1cHBlciwgNDIpCiAKICAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzdGl0bGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQScpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc3RpdGxlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3RpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidBIFRpdGxlY2FzZWQgTGluZScpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0FcblRpdGxlY2FzZWQgTGluZScpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCwgTGluZScpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQVxuVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkLCBMaW5lJykuaXN0aXRsZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycpLmlzdGl0bGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3QtLWEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKQEAgLTUwLDMxICs1MCwzMSBAQAogICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNzcGFjZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2EnKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYicgJykuaXNzcGFjZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInXHQnKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidccicpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ1xuJykuaXNzcGFjZSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInIFx0XHJcbicpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJyAnKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidcdCcpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ1xyJykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicgXHRcclxuJykuaXNzcGFjZSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJyBcdFxyXG5hJykuaXNzcGFjZSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzc3BhY2UsIDQyKQogCiAgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2FscGhhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1hcnNoYWwoYidhJykuaXNhbHBoYSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInQScpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXNhbHBoYSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNhbHBoYSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInYWJjJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNhbHBoYSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYzEyMycpLmlzYWxwaGEoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzYWxwaGEoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhLCA0MikKIAogICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInYScpLmlzYWxudW0oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ0EnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQScpLmlzYWxudW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzYWxudW0oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJzEyM2FiYzQ1NicpLmlzYWxudW0oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJ2ExYjNjJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInMTIzYWJjNDU2JykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYTFiM2MnKS5pc2FsbnVtKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYUJjMDAwICcpLmlzYWxudW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzYWxudW0oKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FsbnVtLCA0MikKQEAgLTgyLDggKzgyLDggQEAKICAgICBkZWYgdGVzdF9pc2RpZ2l0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzZGlnaXQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXNkaWdpdCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYXJzaGFsKGInMCcpLmlzZGlnaXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWFyc2hhbChiJzAxMjM0NTY3ODknKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicwJykuaXNkaWdpdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInMDEyMzQ1Njc4OScpLmlzZGlnaXQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicwMTIzNDU2Nzg5YScpLmlzZGlnaXQoKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzZGlnaXQsIDQyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY3Jhc2hlcnMvUkVBRE1FIGIvTGliL3Rlc3QvY3Jhc2hlcnMvUkVBRE1FCmluZGV4IDA3MGMzZjEuLjJhNzNlMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2NyYXNoZXJzL1JFQURNRQorKysgYi9MaWIvdGVzdC9jcmFzaGVycy9SRUFETUUKQEAgLTEsMjAgKzEsMTYgQEAKLVRoaXMgZGlyZWN0b3J5IG9ubHkgY29udGFpbnMgdGVzdHMgZm9yIG91dHN0YW5kaW5nIGJ1Z3MgdGhhdCBjYXVzZQotdGhlIGludGVycHJldGVyIHRvIHNlZ2ZhdWx0LiAgSWRlYWxseSB0aGlzIGRpcmVjdG9yeSBzaG91bGQgYWx3YXlzCi1iZSBlbXB0eS4gIFNvbWV0aW1lcyBpdCBtYXkgbm90IGJlIGVhc3kgdG8gZml4IHRoZSB1bmRlcmx5aW5nIGNhdXNlLgorVGhpcyBkaXJlY3Rvcnkgb25seSBjb250YWlucyB0ZXN0cyBmb3Igb3V0c3RhbmRpbmcgYnVncyB0aGF0IGNhdXNlIHRoZQoraW50ZXJwcmV0ZXIgdG8gc2VnZmF1bHQuICBJZGVhbGx5IHRoaXMgZGlyZWN0b3J5IHNob3VsZCBhbHdheXMgYmUgZW1wdHksIGJ1dAorc29tZXRpbWVzIGl0IG1heSBub3QgYmUgZWFzeSB0byBmaXggdGhlIHVuZGVybHlpbmcgY2F1c2UgYW5kIHRoZSBidWcgaXMgZGVlbWVkCit0b28gb2JzY3VyZSB0byBpbnZlc3QgdGhlIGVmZm9ydC4KIAogRWFjaCB0ZXN0IHNob3VsZCBmYWlsIHdoZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZToKIAogCS4vcHl0aG9uIExpYi90ZXN0L2NyYXNoZXJzL3dlYWtyZWZfaW5fZGVsLnB5CiAKLUVhY2ggdGVzdCBzaG91bGQgaGF2ZSBhIGxpbmsgdG8gdGhlIGJ1ZyByZXBvcnQ6CitQdXQgYXMgbXVjaCBpbmZvIGludG8gYSBkb2NzdHJpbmcgb3IgY29tbWVudHMgdG8gaGVscCBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZQorZmFpbHVyZSwgYXMgd2VsbCBhcyBhIGJ1Z3MucHl0aG9uLm9yZyBpc3N1ZSBudW1iZXIgaWYgaXQgZXhpc3RzLiAgUGFydGljdWxhcmx5Citub3RlIGlmIHRoZSBjYXVzZSBpcyBzeXN0ZW0gb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGFuZCB3aGF0IHRoZSB2YXJpYWJsZXMgYXJlLgogCi0JIyBodHRwOi8vcHl0aG9uLm9yZy9zZi9CVUcjCi0KLVB1dCBhcyBtdWNoIGluZm8gaW50byBhIGRvY3N0cmluZyBvciBjb21tZW50cyB0byBoZWxwIGRldGVybWluZQotdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiAgUGFydGljdWxhcmx5IG5vdGUgaWYgdGhlIGNhdXNlIGlzCi1zeXN0ZW0gb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGFuZCB3aGF0IHRoZSB2YXJpYWJsZXMgYXJlLgotCi1PbmNlIHRoZSBjcmFzaCBpcyBmaXhlZCwgdGhlIHRlc3QgY2FzZSBzaG91bGQgYmUgbW92ZWQgaW50byBhbiBhcHByb3ByaWF0ZQotdGVzdCAoZXZlbiBpZiBpdCB3YXMgb3JpZ2luYWxseSBmcm9tIHRoZSB0ZXN0IHN1aXRlKS4gIFRoaXMgZW5zdXJlcyB0aGUKLXJlZ3Jlc3Npb24gZG9lc24ndCBoYXBwZW4gYWdhaW4uICBBbmQgaWYgaXQgZG9lcywgaXQgc2hvdWxkIGJlIGVhc2llcgotdG8gdHJhY2sgZG93bi4KK09uY2UgdGhlIGNyYXNoIGlzIGZpeGVkLCB0aGUgdGVzdCBjYXNlIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGFwcHJvcHJpYXRlIHRlc3QKKyhldmVuIGlmIGl0IHdhcyBvcmlnaW5hbGx5IGZyb20gdGhlIHRlc3Qgc3VpdGUpLiAgVGhpcyBlbnN1cmVzIHRoZSByZWdyZXNzaW9uCitkb2Vzbid0IGhhcHBlbiBhZ2Fpbi4gIEFuZCBpZiBpdCBkb2VzLCBpdCBzaG91bGQgYmUgZWFzaWVyIHRvIHRyYWNrIGRvd24uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19zcmVfYnl0ZWNvZGUucHkgYi9MaWIvdGVzdC9jcmFzaGVycy9ib2d1c19zcmVfYnl0ZWNvZGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZmM3MzAuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvY3Jhc2hlcnMvYm9ndXNfc3JlX2J5dGVjb2RlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIiIiCi1UaGUgcmVndWxhciBleHByZXNzaW9uIGVuZ2luZSBpbiAnX3NyZScgY2FuIHNlZ2ZhdWx0IHdoZW4gaW50ZXJwcmV0aW5nCi1ib2d1cyBieXRlY29kZS4KLQotSXQgaXMgdW5jbGVhciB3aGV0aGVyIHRoaXMgaXMgYSByZWFsIGJ1ZyBvciBhICJ3b24ndCBmaXgiIGNhc2UgbGlrZQotYm9ndXNfY29kZV9vYmoucHksIGJlY2F1c2UgaXQgcmVxdWlyZXMgYnl0ZWNvZGUgdGhhdCBpcyBidWlsdCBieSBoYW5kLAotYXMgb3Bwb3NlZCB0byBjb21waWxlZCBieSAncmUnIGZyb20gYSBzdHJpbmctc291cmNlIHJlZ2V4cC4gIFRoZQotZGlmZmVyZW5jZSB3aXRoIGJvZ3VzX2NvZGVfb2JqLCB0aG91Z2gsIGlzIHRoYXQgdGhlIG9ubHkgZXhpc3RpbmcgcmVnZXhwCi1jb21waWxlciBpcyB3cml0dGVuIGluIFB5dGhvbiwgc28gdGhhdCB0aGUgQyBjb2RlIGhhcyBubyBjaG9pY2UgYnV0Ci1hY2NlcHQgYXJiaXRyYXJ5IGJ5dGVjb2RlIGZyb20gUHl0aG9uLWxldmVsLgotCi1UaGUgdGVzdCBiZWxvdyBidWlsZHMgYW5kIHJ1bnMgcmFuZG9tIGJ5dGVjb2RlcyB1bnRpbCAnbWF0Y2gnIGNyYXNoZXMKLVB5dGhvbi4gIEkgaGF2ZSBub3QgaW52ZXN0aWdhdGVkIHdoeSBleGFjdGx5IHNlZ2ZhdWx0cyBvY2N1ciBub3IgaG93Ci1oYXJkIHRoZXkgd291bGQgYmUgdG8gZml4LiAgSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgJ2NvZGUnIHRoYXQKLXNlZ2ZhdWx0IGZvciBtZToKLQotICAgIFsyMSwgNTA4MTQsIDgsIDI5LCAxNl0KLSAgICBbMjEsIDM5NjcsIDI2LCAxMCwgMjMsIDU0MTEzXQotICAgIFsyOSwgMjMsIDAsIDIsIDVdCi0gICAgWzMxLCA2NDM1MSwgMCwgMjgsIDMsIDIyMjgxLCAyMCwgNDQ2MywgOSwgMjUsIDU5MTU0LCAxNTI0NSwgMiwKLSAgICAgICAgICAgICAgICAgIDE2MzQzLCAzLCAxMTYwMCwgMjQzODAsIDEwLCAzNzU1NiwgMTAsIDMxLCAxNSwgMzFdCi0KLUhlcmUgaXMgYWxzbyBhICdjb2RlJyB0aGF0IHRyaWdnZXJzIGFuIGluZmluaXRlIHVuaW50ZXJydXB0aWJsZSBsb29wOgotCi0gICAgWzI5LCAxLCA4LCAyMSwgMSwgNDMwODMsIDZdCi0KLSIiIgotCi1pbXBvcnQgX3NyZSwgcmFuZG9tCi0KLWRlZiBwaWNrKCk6Ci0gICAgbiA9IHJhbmRvbS5yYW5kcmFuZ2UoLTY1NTM2LCA2NTUzNikKLSAgICBpZiBuIDwgMDoKLSAgICAgICAgbiAmPSAzMQotICAgIHJldHVybiBuCi0KLXNzID0gWyIiLCAid29ybGQiLCAieCIgKiA1MDBdCi0KLXdoaWxlIDE6Ci0gICAgY29kZSA9IFtwaWNrKCkgZm9yIGkgaW4gcmFuZ2UocmFuZG9tLnJhbmRyYW5nZSg1LCAyNSkpXQotICAgIHByaW50IGNvZGUKLSAgICBwYXQgPSBfc3JlLmNvbXBpbGUoTm9uZSwgMCwgY29kZSkKLSAgICBmb3IgcyBpbiBzczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGF0Lm1hdGNoKHMpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy9jb21waWxlcl9yZWN1cnNpb24ucHkgYi9MaWIvdGVzdC9jcmFzaGVycy9jb21waWxlcl9yZWN1cnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1NGJkZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2NyYXNoZXJzL2NvbXBpbGVyX3JlY3Vyc2lvbi5weQpAQCAtMCwwICsxLDUgQEAKKyIiIgorVGhlIGNvbXBpbGVyICg+PSAyLjUpIHJlY3Vyc2VzIGhhcHBpbHkuCisiIiIKKworY29tcGlsZSgnKCknKjkqKjUsICc/JywgJ2V4ZWMnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY3Jhc2hlcnMvZ2NfaGFzX2ZpbmFsaXplci5weSBiL0xpYi90ZXN0L2NyYXNoZXJzL2djX2hhc19maW5hbGl6ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3OTU5YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2NyYXNoZXJzL2djX2hhc19maW5hbGl6ZXIucHkKQEAgLTAsMCArMSwzNiBAQAorIiIiCitUaGUgZ2MgbW9kdWxlIGNhbiBzdGlsbCBpbnZva2UgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGFuZCBjcmFzaC4KK1RoaXMgaXMgYW4gYXR0YWNrIGFnYWluc3QgX1B5SW5zdGFuY2VfTG9va3VwKCksIHdoaWNoIGlzIGRvY3VtZW50ZWQKK2FzIGZvbGxvd3M6CisKKyAgICBUaGUgcG9pbnQgb2YgdGhpcyByb3V0aW5lIGlzIHRoYXQgaXQgbmV2ZXIgY2FsbHMgYXJiaXRyYXJ5IFB5dGhvbgorICAgIGNvZGUsIHNvIGlzIGFsd2F5cyAic2FmZSI6ICBhbGwgaXQgZG9lcyBpcyBkaWN0IGxvb2t1cHMuCisKK0J1dCBvZiBjb3Vyc2UgZGljdCBsb29rdXBzIGNhbiBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZS4KK1RoZSBmb2xsb3dpbmcgY29kZSBjYXVzZXMgbXV0YXRpb24gb2YgdGhlIG9iamVjdCBncmFwaCBkdXJpbmcKK3RoZSBjYWxsIHRvIGhhc19maW5hbGl6ZXIoKSBpbiBnY21vZHVsZS5jLCBhbmQgdGhhdCBtaWdodAorc2VnZmF1bHQuCisiIiIKKworaW1wb3J0IGdjCisKKworY2xhc3MgQToKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKCJfX2RlbF9fIikKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZGVsIHNlbGYub3RoZXIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2EgPSBBKCkKK2IgPSBBKCkKKworYS5fX2RpY3RfX1tiXSA9ICdBJworCithLm90aGVyID0gYgorYi5vdGhlciA9IGEKKworZ2MuY29sbGVjdCgpCitkZWwgYSwgYgorCitnYy5jb2xsZWN0KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2NyYXNoZXJzL2l0ZXIucHkgYi9MaWIvdGVzdC9jcmFzaGVycy9pdGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODFkY2JjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L2NyYXNoZXJzL2l0ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jIENhbGxzIHRvIFB5SXRlcl9OZXh0LCBvciBkaXJlY3QgY2FsbHMgdG8gdHBfaXRlcm5leHQsIG9uIGFuIG9iamVjdAotIyB3aGljaCBtaWdodCBubyBsb25nZXIgYmUgYW4gaXRlcmFibGUgYmVjYXVzZSBpdHMgJ25leHQnIG1ldGhvZCB3YXMKLSMgcmVtb3ZlZC4gIFRoZXNlIGFyZSBhbGwgdmFyaWFudHMgb2YgSXNzdWUzNzIwLgotCi0iIiIKLVJ1biB0aGlzIHNjcmlwdCB3aXRoIGFuIGFyZ3VtZW50IGJldHdlZW4gMSBhbmQgPE4+IHRvIHRlc3QgZm9yCi1kaWZmZXJlbnQgY3Jhc2hlcy4KLSIiIgotTiA9IDgKLQotaW1wb3J0IHN5cwotCi1jbGFzcyBGb28ob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIGRlbCBGb28ubmV4dAotICAgICAgICByZXR1cm4gKDEsIDIpCi0KLWRlZiBjYXNlMSgpOgotICAgIGxpc3QoZW51bWVyYXRlKEZvbygpKSkKLQotZGVmIGNhc2UyKCk6Ci0gICAgeCwgeSA9IEZvbygpCi0KLWRlZiBjYXNlMygpOgotICAgIGZpbHRlcihOb25lLCBGb28oKSkKLQotZGVmIGNhc2U0KCk6Ci0gICAgbWFwKE5vbmUsIEZvbygpLCBGb28oKSkKLQotZGVmIGNhc2U1KCk6Ci0gICAgbWF4KEZvbygpKQotCi1kZWYgY2FzZTYoKToKLSAgICBzdW0oRm9vKCksICgpKQotCi1kZWYgY2FzZTcoKToKLSAgICBkaWN0KEZvbygpKQotCi1kZWYgY2FzZTgoKToKLSAgICBzeXMuc3Rkb3V0LndyaXRlbGluZXMoRm9vKCkpCi0KLSMgZXRjLi4uCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKLSAgICAgICAgcHJpbnQgX19kb2NfXy5yZXBsYWNlKCc8Tj4nLCBzdHIoTikpCi0gICAgZWxzZToKLSAgICAgICAgbiA9IGludChzeXMuYXJndlsxXSkKLSAgICAgICAgZnVuYyA9IGdsb2JhbHMoKVsnY2FzZSVkJyAlIG5dCi0gICAgICAgIGZ1bmMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0YS9SRUFETUUgYi9MaWIvdGVzdC9kYXRhL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmY4YzliCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZGF0YS9SRUFETUUKQEAgLTAsMCArMSwyIEBACitUaGlzIGVtcHR5IGRpcmVjdG9yeSBzZXJ2ZXMgYXMgZGVzdGluYXRpb24gZm9yIHRlbXBvcmFyeSBmaWxlcworY3JlYXRlZCBieSBzb21lIHRlc3RzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0CmluZGV4IGU5MTIzOTQuLmEwY2M3ODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hbmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QKQEAgLTEsMzM4ICsxLDMzOCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gYW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotYW5keDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi1hbmR4MDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMA0KLWFuZHgwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwDQotYW5keDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDENCi1hbmR4MDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMA0KLWFuZHgwMDYgYW5kICAgICAgICAgIDExMTEgICAxMCAtPiAgIDEwDQotYW5keDAwNyBhbmQgICAgICAgICAgMTExMSAxMDEwIC0+IDEwMTANCi0NCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWFuZHgwMTAgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1hbmR4MDExIGFuZCAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotYW5keDAxMiBhbmQgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWFuZHgwMTMgYW5kIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCi1hbmR4MDE0IGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotYW5keDAxNSBhbmQgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWFuZHgwMTYgYW5kIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1hbmR4MDE3IGFuZCAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotLS0gICAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkNCi1hbmR4MDIxIGFuZCAxMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWFuZHgwMjIgYW5kIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotYW5keDAyMyBhbmQgMTExMTExMTExMTExICAgMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1hbmR4MDI0IGFuZCAxMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gICAxMTExMTExMQ0KLWFuZHgwMjUgYW5kIDExMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExDQotYW5keDAyNiBhbmQgMTExMTExMTExMTExICAgICAxMTExMTEgIC0+ICAgICAxMTExMTENCi1hbmR4MDI3IGFuZCAxMTExMTExMTExMTEgICAgICAxMTExMSAgLT4gICAgICAxMTExMQ0KLWFuZHgwMjggYW5kIDExMTExMTExMTExMSAgICAgICAxMTExICAtPiAgICAgICAxMTExDQotYW5keDAyOSBhbmQgMTExMTExMTExMTExICAgICAgICAxMTEgIC0+ICAgICAgICAxMTENCi1hbmR4MDMxIGFuZCAxMTExMTExMTExMTEgICAgICAgICAxMSAgLT4gICAgICAgICAxMQ0KLWFuZHgwMzIgYW5kIDExMTExMTExMTExMSAgICAgICAgICAxICAtPiAgICAgICAgICAxDQotYW5keDAzMyBhbmQgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1hbmR4MDM0IGFuZCAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWFuZHgwMzUgYW5kIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotYW5keDAzNiBhbmQgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi0NCi1hbmR4MDQwIGFuZCAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWFuZHgwNDEgYW5kICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgIDExMTExMTExDQotYW5keDA0MiBhbmQgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1hbmR4MDQzIGFuZCAgIDExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgMTExMTExMQ0KLWFuZHgwNDQgYW5kICAgIDExMTExMSAgICAgMTExMTExMTExICAtPiAgICAgMTExMTExDQotYW5keDA0NSBhbmQgICAgIDExMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgMTExMTENCi1hbmR4MDQ2IGFuZCAgICAgIDExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgMTExMQ0KLWFuZHgwNDcgYW5kICAgICAgIDExMSAgICAgMTExMTExMTExICAtPiAgICAgICAgMTExDQotYW5keDA0OCBhbmQgICAgICAgIDExICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTENCi1hbmR4MDQ5IGFuZCAgICAgICAgIDEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAgMQ0KLQ0KLWFuZHgwNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxDQotYW5keDA1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDENCi1hbmR4MDUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQ0KLWFuZHgwNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxDQotYW5keDA1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDENCi1hbmR4MDU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQ0KLWFuZHgwNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxDQotYW5keDA1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDENCi1hbmR4MDU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQ0KLWFuZHgwNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxDQotDQotYW5keDA2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDANCi1hbmR4MDYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMA0KLWFuZHgwNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwDQotYW5keDA2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDANCi1hbmR4MDY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMA0KLWFuZHgwNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwDQotYW5keDA2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDANCi1hbmR4MDY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMA0KLWFuZHgwNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwDQotYW5keDA2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDANCi0NCi1hbmR4MDcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQ0KLWFuZHgwNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxDQotYW5keDA3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDENCi1hbmR4MDczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQ0KLWFuZHgwNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxDQotYW5keDA3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDENCi1hbmR4MDc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQ0KLWFuZHgwNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxDQotYW5keDA3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDENCi1hbmR4MDc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQ0KLQ0KLWFuZHgwODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwDQotYW5keDA4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDANCi1hbmR4MDgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMA0KLWFuZHgwODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwDQotYW5keDA4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDANCi1hbmR4MDg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMA0KLWFuZHgwODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwDQotYW5keDA4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDANCi1hbmR4MDg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMA0KLWFuZHgwODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwDQotDQotYW5keDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1hbmR4MDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQ0KLWFuZHgwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExDQotYW5keDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTENCi1hbmR4MDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQ0KLWFuZHgwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExDQotYW5keDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTENCi1hbmR4MDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQ0KLWFuZHgwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQotDQotYW5keDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTENCi1hbmR4MTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQ0KLWFuZHgxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExDQotYW5keDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTENCi1hbmR4MTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLWFuZHgxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExDQotYW5keDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTENCi1hbmR4MTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQ0KLWFuZHgxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotYW5keDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotYW5keDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotYW5keDI1MCBhbmQgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTEgYW5kICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjUyIGFuZCAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1MyBhbmQgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTQgYW5kICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjU1IGFuZCAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1NiBhbmQgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNTcgYW5kICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjU4IGFuZCAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI1OSBhbmQgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNjAgYW5kICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjYxIGFuZCAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI2MiBhbmQgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNjMgYW5kICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjY0IGFuZCAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI2NSBhbmQgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1hbmR4MjcwIGFuZCAgMDIwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI3MSBhbmQgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNzIgYW5kICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjczIGFuZCAgMDkwMDAxMDAwIDEwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI3NCBhbmQgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyNzUgYW5kICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjc2IGFuZCAgMTAwMDAwMDEwIDA4MDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI3NyBhbmQgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotYW5keDI4MCBhbmQgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODEgYW5kICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjgyIGFuZCAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI4MyBhbmQgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODQgYW5kICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjg1IGFuZCAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI4NiBhbmQgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyODcgYW5kICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWFuZHgyODggYW5kICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjg5IGFuZCAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5MCBhbmQgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTEgYW5kICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MjkyIGFuZCAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5MyBhbmQgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTQgYW5kICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjk1IGFuZCAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1hbmR4Mjk2IGFuZCAtMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgyOTcgYW5kIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDI5OCBhbmQgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mjk5IGFuZCAgMTAwMDAxMDAwICAwMDAwMTEwMDAgLT4gIDEwMDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWFuZHgzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzMzQgYW5kICA1ICAgMUUtMTAwNyAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzM1IGFuZCAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzMzcgYW5kICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNDIgYW5kICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0NCBhbmQgIDFFLTEwMDcgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNDUgYW5kICAtMUUtMTAwNyAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNDggYW5kICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1hbmR4MzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4MzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Mzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHgzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotYW5keDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODEgYW5kIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4NzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODQgYW5kIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Nzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3ODcgYW5kIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Nzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3OTAgYW5kIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4NzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg3OTMgYW5kICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4Nzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotYW5keDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWFuZHg4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotYW5keDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0MiBhbmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0NSBhbmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0OCBhbmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1MSBhbmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1NCBhbmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1NyBhbmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWFuZHg4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWFuZHg4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1hbmR4ODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotYW5keDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorYW5keDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2FuZHgwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwCithbmR4MDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMAorYW5keDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2FuZHgwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwCithbmR4MDA2IGFuZCAgICAgICAgICAxMTExICAgMTAgLT4gICAxMAorYW5keDAwNyBhbmQgICAgICAgICAgMTExMSAxMDEwIC0+IDEwMTAKKworLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2FuZHgwMTAgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTEgYW5kIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTIgYW5kIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTMgYW5kIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK2FuZHgwMTQgYW5kIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTUgYW5kIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTYgYW5kIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2FuZHgwMTcgYW5kIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQorYW5keDAyMSBhbmQgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMjIgYW5kIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDIzIGFuZCAxMTExMTExMTExMTEgICAxMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDAyNCBhbmQgMTExMTExMTExICAgICAgMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwMjUgYW5kIDExMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExCithbmR4MDI2IGFuZCAxMTExMTExMTExMTEgICAgIDExMTExMSAgLT4gICAgIDExMTExMQorYW5keDAyNyBhbmQgMTExMTExMTExMTExICAgICAgMTExMTEgIC0+ICAgICAgMTExMTEKK2FuZHgwMjggYW5kIDExMTExMTExMTExMSAgICAgICAxMTExICAtPiAgICAgICAxMTExCithbmR4MDI5IGFuZCAxMTExMTExMTExMTEgICAgICAgIDExMSAgLT4gICAgICAgIDExMQorYW5keDAzMSBhbmQgMTExMTExMTExMTExICAgICAgICAgMTEgIC0+ICAgICAgICAgMTEKK2FuZHgwMzIgYW5kIDExMTExMTExMTExMSAgICAgICAgICAxICAtPiAgICAgICAgICAxCithbmR4MDMzIGFuZCAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAzNCBhbmQgMTExMTExMTExMTEgMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMzUgYW5kIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDM2IGFuZCAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorCithbmR4MDQwIGFuZCAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDA0MSBhbmQgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwNDIgYW5kICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDQzIGFuZCAgIDExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgMTExMTExMQorYW5keDA0NCBhbmQgICAgMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgICAxMTExMTEKK2FuZHgwNDUgYW5kICAgICAxMTExMSAgICAgMTExMTExMTExICAtPiAgICAgIDExMTExCithbmR4MDQ2IGFuZCAgICAgIDExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgMTExMQorYW5keDA0NyBhbmQgICAgICAgMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgICAxMTEKK2FuZHgwNDggYW5kICAgICAgICAxMSAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExCithbmR4MDQ5IGFuZCAgICAgICAgIDEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAgMQorCithbmR4MDUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQorYW5keDA1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxCithbmR4MDUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQorYW5keDA1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxCithbmR4MDU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQorYW5keDA1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2FuZHgwNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxCithbmR4MDU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQorCithbmR4MDYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorYW5keDA2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwCithbmR4MDYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorYW5keDA2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwCithbmR4MDY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorYW5keDA2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDAKK2FuZHgwNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwCithbmR4MDY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCithbmR4MDcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQorYW5keDA3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDEKK2FuZHgwNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCithbmR4MDczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQorYW5keDA3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDEKK2FuZHgwNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCithbmR4MDc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQorYW5keDA3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDEKK2FuZHgwNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCithbmR4MDc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQorCithbmR4MDgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMAorYW5keDA4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2FuZHgwODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwCithbmR4MDgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMAorYW5keDA4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2FuZHgwODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwCithbmR4MDg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMAorYW5keDA4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2FuZHgwODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwCithbmR4MDg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMAorCithbmR4MDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTEKK2FuZHgwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExCithbmR4MDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorYW5keDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTEKK2FuZHgwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExCithbmR4MDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorYW5keDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDEKK2FuZHgwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwCisKK2FuZHgxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQorYW5keDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTEKK2FuZHgxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCithbmR4MTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorYW5keDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTEKK2FuZHgxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCithbmR4MTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQorYW5keDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCithbmR4MjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworYW5keDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorYW5keDI1MCBhbmQgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MSBhbmQgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MiBhbmQgIDgwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1MyBhbmQgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NCBhbmQgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NSBhbmQgIDcwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NiBhbmQgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1NyBhbmQgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1OCBhbmQgIDEwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI1OSBhbmQgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MCBhbmQgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MSBhbmQgIDEwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MiBhbmQgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2MyBhbmQgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2NCBhbmQgIDAwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI2NSBhbmQgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorYW5keDI3MCBhbmQgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MSBhbmQgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MiBhbmQgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3MyBhbmQgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NCBhbmQgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NSBhbmQgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NiBhbmQgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI3NyBhbmQgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2FuZHgyODAgYW5kICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODEgYW5kICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODIgYW5kICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODMgYW5kICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODQgYW5kICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODUgYW5kICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODYgYW5kICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyODcgYW5kICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCithbmR4Mjg4IGFuZCAgMDAxMDIwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg5IGFuZCAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkwIGFuZCAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkxIGFuZCAgMDAwMDkwMDAwIDEwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkyIGFuZCAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjkzIGFuZCAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk0IGFuZCAgMTAwMDEwMTAwIDAwMDA4MDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk1IGFuZCAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworYW5keDI5NiBhbmQgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTcgYW5kIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk4IGFuZCAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5OSBhbmQgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CithbmR4MzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM0IGFuZCAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM1IGFuZCAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM3IGFuZCAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQyIGFuZCAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ0IGFuZCAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ1IGFuZCAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworYW5keDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCithbmR4NzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4NzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Nzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2FuZHg4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworYW5keDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCithbmR4ODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworYW5keDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NsYXNzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdAppbmRleCA2MmQyZmE0Li5mYTViYzNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdApAQCAtMSwxMzEgKzEsMTMxIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBjbGFzcy5kZWNUZXN0IC0tIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gW05ldyAyMDA2LjExLjI3XQ0KLQ0KLXByZWNpc2lvbjogICA5DQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1jbGFzeDAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotY2xhc3gwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWNsYXN4MDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1jbGFzeDAwNCAgY2xhc3MgICAgMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCi1jbGFzeDAwNSAgY2xhc3MgIDAuMUUtOTk5ICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCi1jbGFzeDAwNiAgY2xhc3MgIDAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCi1jbGFzeDAwNyAgY2xhc3MgIDEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAwOCAgY2xhc3MgICAxRS05OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxNyAgY2xhc3MgICAxRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5RSs5OTkgICAgICAgICAgIC0+ICtOb3JtYWwNCi1jbGFzeDAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQ0KLQ0KLWNsYXN4MDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1jbGFzeDAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotY2xhc3gwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWNsYXN4MDI0ICBjbGFzcyAgIC0xRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KLWNsYXN4MDI1ICBjbGFzcyAgLTAuMUUtOTk5ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KLWNsYXN4MDI2ICBjbGFzcyAgLTAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KLWNsYXN4MDI3ICBjbGFzcyAgLTEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDI4ICBjbGFzcyAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM3ICBjbGFzcyAgLTFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM4ICBjbGFzcyAgLTkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gLU5vcm1hbA0KLWNsYXN4MDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotDQotY2xhc3gwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1jbGFzeDA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWNsYXN4MDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFODQotY2xhc3gwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQotY2xhc3gwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQotY2xhc3gwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFODQotDQotDQotLS0gZGVjaW1hbDY0IGJvdW5kcw0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWNsYXN4MjAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1jbGFzeDIwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotY2xhc3gyMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWNsYXN4MjA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MjA1ICBjbGFzcyAgMC4xRS0zODMgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MjA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbA0KLWNsYXN4MjA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjA4ICBjbGFzcyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gK05vcm1hbA0KLWNsYXN4MjE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQotDQotY2xhc3gyMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWNsYXN4MjIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1jbGFzeDIyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotY2xhc3gyMjQgIGNsYXNzICAgLTFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gyMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gyMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsDQotY2xhc3gyMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAtPiAtTm9ybWFsDQotY2xhc3gyMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzcgIGNsYXNzICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsDQotY2xhc3gyMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1jbGFzeDI0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWNsYXN4MjQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotY2xhc3gyNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1jbGFzeDI0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1jbGFzeDI0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1jbGFzeDI0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNsYXNzLmRlY1Rlc3QgLS0gQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW05ldyAyMDA2LjExLjI3XQorCitwcmVjaXNpb246ICAgOQorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitjbGFzeDAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwNCAgY2xhc3MgICAgMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MDA1ICBjbGFzcyAgMC4xRS05OTkgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gwMDYgIGNsYXNzICAwLjk5OTk5OTk5RS05OTkgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDAwNyAgY2xhc3MgIDEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDA4ICBjbGFzcyAgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNyAgY2xhc3MgICAxRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE4ICBjbGFzcyAgIDkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkKKworY2xhc3gwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjQgIGNsYXNzICAgLTFFLTEwMDcgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDAyNSAgY2xhc3MgIC0wLjFFLTk5OSAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MDI2ICBjbGFzcyAgLTAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gwMjcgIGNsYXNzICAtMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAyOCAgY2xhc3MgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzcgIGNsYXNzICAtMUUrOTk5ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzOCAgY2xhc3MgIC05Ljk5OTk5OTk5RSs5OTkgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2NsYXN4MDQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MDQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorY2xhc3gwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4KKworCistLSBkZWNpbWFsNjQgYm91bmRzCisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2NsYXN4MjAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gyMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDIwNiAgY2xhc3MgIDAuOTk5OTk5OTk5OTk5OTk5RS0zODMgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MjA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbAorY2xhc3gyMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsCitjbGFzeDIxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitjbGFzeDIyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MjI1ICBjbGFzcyAgLTAuMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gyMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDIyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjI4ICBjbGFzcyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM4ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gLU5vcm1hbAorY2xhc3gyMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworY2xhc3gyNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MjQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDI0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gyNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDI0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MjQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0CmluZGV4IGFkODdiNGMuLjI1MmM0OWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90YWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QKQEAgLTEsNzk4ICsxLDc5OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29tcGFyZXRvdGFsLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KLS0tIHRoYW4gY29tcGFyZS4NCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWNvdHgwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDANCi1jb3R4MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQ0KLWNvdHgwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xDQotY290eDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTENCi1jb3R4MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQ0KLWNvdHgwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDENCi1jb3R4MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwDQotY290eDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTENCi1jb3R4MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQ0KLWNvdHgwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xDQotY290eDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQ0KLWNvdHgwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDENCi1jb3R4MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwDQotY290eDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTENCi1jb3R4MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQ0KLWNvdHgwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDENCi1jb3R4MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxDQotY290eDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQ0KLWNvdHgwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDANCi1jb3R4MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQ0KLWNvdHgwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDENCi1jb3R4MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxDQotY290eDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQ0KLWNvdHgwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDENCi1jb3R4MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwDQotDQotY290eDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwDQotY290eDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQ0KLWNvdHgwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTENCi1jb3R4MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xDQotY290eDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQ0KLWNvdHgwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQ0KLWNvdHgwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMA0KLWNvdHgwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTENCi1jb3R4MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xDQotY290eDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQ0KLWNvdHgwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQ0KLWNvdHgwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQ0KLWNvdHgwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMA0KLWNvdHgwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTENCi1jb3R4MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xDQotY290eDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxDQotY290eDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxDQotY290eDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxDQotY290eDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwDQotY290eDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQ0KLWNvdHgwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQ0KLWNvdHgwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQ0KLWNvdHgwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQ0KLWNvdHgwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQ0KLWNvdHgwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMA0KLQ0KLWNvdHgwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwDQotY290eDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xDQotY290eDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xDQotY290eDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xDQotY290eDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xDQotY290eDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDENCi1jb3R4MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMA0KLWNvdHgwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQ0KLWNvdHgwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQ0KLWNvdHgwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQ0KLWNvdHgwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxDQotY290eDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDENCi1jb3R4MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMA0KLWNvdHgwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQ0KLWNvdHgwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQ0KLWNvdHgwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxDQotY290eDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDENCi1jb3R4MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQ0KLWNvdHgwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwDQotY290eDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xDQotY290eDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDENCi1jb3R4MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQ0KLWNvdHgwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxDQotY290eDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDENCi1jb3R4MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLW1heGV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLWNvdHgwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAwDQotY290eDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IC0xDQotY290eDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDENCi1jb3R4MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMA0KLQ0KLS0tIEV4YW1wbGVzDQotY290eDA5NCBjb21wYXJldG90YWwgIDEyLjczICAxMjcuOSAgLT4gLTENCi1jb3R4MDk1IGNvbXBhcmV0b3RhbCAgLTEyNyAgIDEyICAgICAtPiAtMQ0KLWNvdHgwOTYgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMyAgIC0+IC0xDQotY290eDA5NyBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zMCAgLT4gIDANCi1jb3R4MDk4IGNvbXBhcmV0b3RhbCAgMTIuMyAgIDEyLjMwMCAtPiAgMQ0KLWNvdHgwOTkgY29tcGFyZXRvdGFsICAxMi4zICAgTmFOICAgIC0+IC0xDQotDQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KLWNvdHgxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwDQotY290eDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xDQotY290eDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDENCi1jb3R4MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQ0KLWNvdHgxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwDQotY290eDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDANCi1jb3R4MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTENCi1jb3R4MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTENCi1jb3R4MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWNvdHgxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwDQotY290eDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDENCi0NCi1jb3R4MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWNvdHgxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxDQotY290eDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDENCi1jb3R4MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWNvdHgxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxDQotY290eDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDENCi1jb3R4MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWNvdHgxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxDQotY290eDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDENCi1jb3R4MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDENCi1jb3R4MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWNvdHgxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQ0KLWNvdHgxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWNvdHgxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KLWNvdHgxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWNvdHgxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWNvdHgxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQ0KLWNvdHgxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQ0KLWNvdHgxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWNvdHgxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KLWNvdHgxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWNvdHgxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1jb3R4MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTENCi1jb3R4MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTENCi1jb3R4MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTENCi1jb3R4MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTENCi1jb3R4MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTENCi1jb3R4MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1jb3R4MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTENCi1jb3R4MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTENCi1jb3R4MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1jb3R4MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTENCi1jb3R4MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTENCi0NCi1jb3R4MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTENCi1jb3R4MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTENCi1jb3R4MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTENCi1jb3R4MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTENCi1jb3R4MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTENCi1jb3R4MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTENCi1jb3R4MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1jb3R4MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTENCi1jb3R4MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTENCi1jb3R4MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTENCi1jb3R4MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTENCi0NCi1jb3R4MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTENCi1jb3R4MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTENCi1jb3R4MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTENCi1jb3R4MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTENCi1jb3R4MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1jb3R4MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTENCi1jb3R4MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTENCi1jb3R4MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTENCi1jb3R4MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTENCi1jb3R4MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTENCi1jb3R4MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotY290eDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxDQotY290eDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxDQotY290eDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxDQotY290eDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxDQotY290eDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxDQotY290eDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxDQotY290eDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxDQotY290eDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxDQotY290eDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxDQotY290eDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxDQotY290eDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxDQotDQotY290eDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxDQotY290eDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxDQotY290eDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxDQotY290eDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxDQotY290eDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxDQotY290eDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxDQotY290eDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxDQotY290eDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxDQotY290eDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxDQotY290eDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxDQotY290eDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxDQotDQotY290eDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxDQotY290eDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxDQotY290eDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxDQotY290eDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxDQotY290eDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotY290eDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxDQotY290eDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxDQotY290eDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxDQotY290eDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxDQotY290eDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxDQotY290eDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWNvdHg0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDANCi1jb3R4NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxDQotY290eDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTENCi1jb3R4NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQ0KLWNvdHg0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1jb3R4NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQotY290eDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQ0KLWNvdHg0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDENCi1jb3R4NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwDQotY290eDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KLWNvdHg0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xDQotDQotY290eDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1jb3R4NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KLWNvdHg0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xDQotY290eDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1jb3R4NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KLWNvdHg0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xDQotY290eDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1jb3R4NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KLWNvdHg0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xDQotY290eDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1jb3R4NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KLQ0KLWNvdHg0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDENCi1jb3R4NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxDQotY290eDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KLWNvdHg0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDENCi1jb3R4NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotY290eDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KLWNvdHg0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDENCi1jb3R4NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotY290eDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KLWNvdHg0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDENCi1jb3R4NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotcHJlY2lzaW9uOiA0MA0KLWNvdHg0NzAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KLWNvdHg0NzEgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ3MiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KLWNvdHg0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWNvdHg0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWNvdHg0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KLWNvdHg0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQotY290eDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KLWNvdHg0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWNvdHg0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQotY290eDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWNvdHg0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KLWNvdHg0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1jb3R4NDg0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgLT4gMQ0KLWNvdHg0ODUgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5IC0+IDENCi1jb3R4NDg2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5IC0+IDENCi1jb3R4NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgLT4gMQ0KLWNvdHg0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDENCi1jb3R4NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5IC0+IDENCi1jb3R4NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQ0KLWNvdHg0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5IC0+IDENCi1jb3R4NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDENCi1jb3R4NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgLT4gMQ0KLWNvdHg0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDENCi1jb3R4NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5IC0+IDENCi1jb3R4NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQ0KLWNvdHg0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotcHJlY2lzaW9uOiA5DQotY290eDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWNvdHg1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCi1jb3R4NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxDQotY290eDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWNvdHg1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDENCi1jb3R4NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxDQotY290eDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWNvdHg1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDENCi1jb3R4NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxDQotY290eDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWNvdHg1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDENCi1jb3R4NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxDQotY290eDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWNvdHg1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDENCi1jb3R4NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxDQotY290eDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWNvdHg1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQotY290eDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCi1jb3R4NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWNvdHg1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQotY290eDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCi1jb3R4NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWNvdHg1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQotY290eDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCi1jb3R4NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWNvdHg1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQotY290eDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCi1jb3R4NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWNvdHg1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQotY290eDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCi1jb3R4NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1jb3R4NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQotY290eDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1jb3R4NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xDQotY290eDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1jb3R4NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xDQotY290eDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1jb3R4NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQotY290eDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1jb3R4NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KLWNvdHg1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQotY290eDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1jb3R4NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KLWNvdHg1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQotY290eDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1jb3R4NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQotY290eDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1jb3R4NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQotY290eDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1jb3R4NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQotY290eDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1jb3R4NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KLWNvdHg1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQotY290eDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1jb3R4NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1jb3R4NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1jb3R4NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCi1jb3R4NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCi1jb3R4NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1jb3R4NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCi1jb3R4NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCi1jb3R4NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1jb3R4NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCi1jb3R4NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCi1jb3R4NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotY290eDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KLWNvdHg1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCi1jb3R4NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotY290eDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KLWNvdHg1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCi1jb3R4NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotY290eDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KLWNvdHg1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCi1jb3R4NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotY290eDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotcHJlY2lzaW9uOiAyMA0KLWNvdHg2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotY290eDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCi1jb3R4NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWNvdHg2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotY290eDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCi1jb3R4NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWNvdHg2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotY290eDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCi1jb3R4NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWNvdHg2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotY290eDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCi1jb3R4NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWNvdHg2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotY290eDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCi1jb3R4NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotY290eDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCi1jb3R4NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWNvdHg2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotY290eDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCi1jb3R4NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWNvdHg2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotY290eDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCi1jb3R4NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWNvdHg2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotY290eDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCi1jb3R4NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWNvdHg2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotcHJlY2lzaW9uOiA5DQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1jb3R4NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwDQotY290eDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQ0KLWNvdHg2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDENCi1jb3R4NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxDQotY290eDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTENCi1jb3R4NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwDQotY290eDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTENCi1jb3R4NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQ0KLWNvdHg2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xDQotY290eDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQ0KLWNvdHg2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDENCi1jb3R4NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwDQotY290eDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTENCi1jb3R4NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxDQotY290eDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMA0KLWNvdHg2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xDQotDQotY290eDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTENCi1jb3R4NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQ0KLWNvdHg2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDENCi1jb3R4NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxDQotY290eDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTENCi1jb3R4NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQ0KLWNvdHg2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDENCi1jb3R4NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxDQotY290eDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMA0KLWNvdHg2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xDQotY290eDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQ0KLWNvdHg2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDENCi1jb3R4NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxDQotY290eDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMA0KLWNvdHg2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDENCi1jb3R4NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxDQotY290eDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTENCi1jb3R4NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQ0KLWNvdHg2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDANCi1jb3R4Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxDQotY290eDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTENCi1jb3R4Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQ0KLWNvdHg2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xDQotY290eDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1wcmVjaXNpb246IDIwDQotY290eDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KLWNvdHg2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDENCi1jb3R4NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxDQotY290eDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQ0KLWNvdHg2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDENCi1jb3R4Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxDQotY290eDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQ0KLWNvdHg2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDENCi1jb3R4Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxDQotY290eDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQ0KLWNvdHg2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1jb3R4NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQ0KLWNvdHg2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xDQotY290eDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTENCi1jb3R4Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQ0KLWNvdHg2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xDQotY290eDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTENCi1jb3R4Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQ0KLWNvdHg2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xDQotY290eDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTENCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotbWF4ZXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiA5DQotY290eDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDENCi1jb3R4NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQ0KLWNvdHg3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxDQotY290eDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTENCi1jb3R4NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQ0KLWNvdHg3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xDQotY290eDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDENCi1jb3R4NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQ0KLWNvdHg3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxDQotY290eDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTENCi1jb3R4NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQ0KLWNvdHg3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xDQotY290eDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTENCi1jb3R4NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQ0KLWNvdHg3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xDQotY290eDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDENCi1jb3R4NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQ0KLWNvdHg3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxDQotDQotcHJlY2lzaW9uOiAxNQ0KLS0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uDQotY290eDcyMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgMSAtPiAxDQotY290eDcyMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAtPiAtMQ0KLWNvdHg3MjMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KLWNvdHg3MjQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgLT4gLTENCi1jb3R4NzI1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAxIC0+IDENCi1jb3R4NzI2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgIC0+IC0xDQotY290eDcyNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgMSAtPiAxDQotY290eDcyOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAtPiAtMQ0KLWNvdHg3MjkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWNvdHg3MzAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgLT4gLTENCi1jb3R4NzMxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAxIC0+IDENCi1jb3R4NzMyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgIC0+IC0xDQotDQotLS0gcmVzaWR1ZSBjYXNlcw0KLXByZWNpc2lvbjogNQ0KLWNvdHg3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDENCi1jb3R4NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxDQotY290eDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQ0KLWNvdHg3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDENCi1jb3R4NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWNvdHg3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xDQotY290eDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1jb3R4NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWNvdHg3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xDQotY290eDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1jb3R4NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQ0KLWNvdHg3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDENCi1jb3R4NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxDQotY290eDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KLQ0KLS0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMNCi1jb3R4NzYwIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAtPiAtMQ0KLWNvdHg3NjEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDANCi1jb3R4NzYyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAtMQ0KLWNvdHg3NjMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi0tLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdA0KLXByZWNpc2lvbjogICAxMQ0KLWNvdHg3NjQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgMTANCi1jb3R4NzY1IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICA5DQotY290eDc2NiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgOA0KLWNvdHg3NjcgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDcNCi1jb3R4NzY4IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICA2DQotY290eDc2OSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgNQ0KLWNvdHg3NzAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDQNCi1jb3R4NzcxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotcHJlY2lzaW9uOiAgICAzDQotY290eDc3MiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KLXByZWNpc2lvbjogICAgMg0KLWNvdHg3NzMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCi1wcmVjaXNpb246ICAgIDENCi1jb3R4Nzc0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQotDQotLS0gU3BlY2lhbHMNCi1wcmVjaXNpb246ICAgOQ0KLWNvdHg3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KLWNvdHg3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQ0KLWNvdHg3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQ0KLWNvdHg3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQ0KLWNvdHg3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQ0KLWNvdHg3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQ0KLWNvdHg3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQ0KLWNvdHg3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KLWNvdHg3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQ0KLWNvdHg3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWNvdHg3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQ0KLWNvdHg3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQ0KLWNvdHg3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQ0KLWNvdHg3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQ0KLWNvdHg3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQ0KLWNvdHg3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWNvdHg4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KLWNvdHg4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWNvdHg4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQ0KLWNvdHg4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQ0KLWNvdHg4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQ0KLWNvdHg4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQ0KLWNvdHg4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQ0KLWNvdHg4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWNvdHg4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KLWNvdHg4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQ0KLWNvdHg4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KLQ0KLWNvdHg4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQ0KLWNvdHg4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQ0KLWNvdHg4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQ0KLWNvdHg4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQ0KLWNvdHg4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQ0KLWNvdHg4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQ0KLWNvdHg4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQ0KLWNvdHg4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQ0KLWNvdHg4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMA0KLWNvdHg4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTENCi1jb3R4ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xDQotY290eDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQ0KLWNvdHg4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTENCi1jb3R4ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xDQotY290eDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQ0KLWNvdHg4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTENCi1jb3R4ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xDQotY290eDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwDQotY290eDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxDQotY290eDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQ0KLQ0KLWNvdHg4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQ0KLWNvdHg4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQ0KLWNvdHg4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQ0KLWNvdHg4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQ0KLWNvdHg4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQ0KLWNvdHg4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQ0KLWNvdHg4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQ0KLWNvdHg4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQ0KLWNvdHg4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQ0KLWNvdHg4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTENCi1jb3R4ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1jb3R4ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xDQotY290eDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTENCi1jb3R4ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xDQotY290eDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTENCi1jb3R4ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xDQotY290eDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQ0KLWNvdHg4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTENCi1jb3R4ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xDQotY290eDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxDQotY290eDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotY290eDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMA0KLWNvdHg4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDENCi1jb3R4ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQ0KLWNvdHg4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xDQotY290eDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTENCi1jb3R4ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQ0KLWNvdHg4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xDQotY290eDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTENCi1jb3R4ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQ0KLWNvdHg4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xDQotY290eDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTENCi0NCi1jb3R4ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwDQotY290eDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTENCi1jb3R4ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxDQotY290eDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDENCi1jb3R4ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxDQotY290eDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDENCi1jb3R4ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxDQotY290eDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQ0KLWNvdHg4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDENCi1jb3R4ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxDQotDQotLS0gTmFOcyB3aXRoIHBheWxvYWQNCi1jb3R4OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDENCi1jb3R4OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDENCi1jb3R4OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDENCi1jb3R4OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xDQotY290eDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxDQotY290eDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxDQotY290eDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQ0KLQ0KLWNvdHg5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQ0KLWNvdHg5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQ0KLWNvdHg5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTENCi1jb3R4OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xDQotY290eDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQ0KLWNvdHg5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDENCi1jb3R4OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xDQotY290eDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQ0KLQ0KLWNvdHg5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDENCi1jb3R4OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxDQotY290eDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTENCi1jb3R4OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWNvdHg5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xDQotY290eDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDENCi1jb3R4OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQ0KLWNvdHg5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotY290eDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xDQotY290eDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxDQotY290eDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotY290eDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xDQotY290eDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQotY290eDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotY290eDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xDQotY290eDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xDQotY290eDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZA0KLW1heEV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLWNvdHgxMDgwIGNvbXBhcmV0b3RhbCArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTENCi1jb3R4MTA4MSBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotY290eDEwODIgY29tcGFyZXRvdGFsICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMQ0KLWNvdHgxMDgzIGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTENCi1jb3R4MTA4NSBjb21wYXJldG90YWwgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xDQotY290eDEwODYgY29tcGFyZXRvdGFsIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWNvdHgxMDg3IGNvbXBhcmV0b3RhbCAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTENCi1jb3R4MTA4OCBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQotDQotY290eDEwODkgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAtMQ0KLWNvdHgxMDkwIGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gLTENCi1jb3R4MTA5MSBjb21wYXJldG90YWwgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+IC0xDQotY290eDEwOTIgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAtMQ0KLWNvdHgxMDkzIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gLTENCi1jb3R4MTA5NCBjb21wYXJldG90YWwgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAxDQotY290eDEwOTUgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMQ0KLWNvdHgxMDk2IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDENCi1jb3R4MTA5NyBjb21wYXJldG90YWwgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxDQotY290eDEwOTggY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgMQ0KLWNvdHgxMDk5IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDENCi1jb3R4MTEwMCBjb21wYXJldG90YWwgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+IC0xDQotLS0gc2lnbnMNCi1jb3R4MTEwMSBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxDQotY290eDExMDIgY29tcGFyZXRvdGFsICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMQ0KLWNvdHgxMTAzIGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gLTENCi1jb3R4MTEwNCBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xDQotY290eDExMDUgY29tcGFyZXRvdGFsICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAtMQ0KLWNvdHgxMTA2IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDENCi1jb3R4MTEwNyBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xDQotY290eDExMDggY29tcGFyZXRvdGFsIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMQ0KLQ0KLS0tIHNwcmVhZCB6ZXJvcw0KLWNvdHgxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMCAgICAgICAtPiAtMQ0KLWNvdHgxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMCAgICAgICAtPiAgMQ0KLWNvdHgxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMCAgICAgICAtPiAtMQ0KLWNvdHgxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMCAgICAgICAtPiAgMQ0KLWNvdHgxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KLWNvdHgxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KLWNvdHgxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KLWNvdHgxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KLWNvdHgxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrMzg0ICAtPiAtMQ0KLWNvdHgxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrMzg0ICAtPiAgMQ0KLWNvdHgxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrMzg0ICAtPiAtMQ0KLWNvdHgxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrMzg0ICAtPiAgMQ0KLQ0KLWNvdHgxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQ0KLWNvdHgxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQ0KLWNvdHgxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQ0KLWNvdHgxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQ0KLWNvdHgxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQ0KLWNvdHgxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQ0KLWNvdHgxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQ0KLWNvdHgxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQ0KLWNvdHgxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQ0KLWNvdHgxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQ0KLWNvdHgxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQ0KLWNvdHgxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1jb3R4OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotY290eDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29tcGFyZXRvdGFsLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMKKy0tIHRoYW4gY29tcGFyZS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MKK2NvdHgwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDAKK2NvdHgwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCitjb3R4MDAzIGNvbXBhcmV0b3RhbCAgLTIgICAwICAtPiAtMQorY290eDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTEKK2NvdHgwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCitjb3R4MDA2IGNvbXBhcmV0b3RhbCAgLTEgIC0yICAtPiAxCitjb3R4MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwCitjb3R4MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQorY290eDAwOSBjb21wYXJldG90YWwgIC0xICAgMSAgLT4gLTEKK2NvdHgwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xCitjb3R4MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCitjb3R4MDEyIGNvbXBhcmV0b3RhbCAgIDAgIC0xICAtPiAxCitjb3R4MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwCitjb3R4MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQorY290eDAxNSBjb21wYXJldG90YWwgICAwICAgMiAgLT4gLTEKK2NvdHgwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDEKK2NvdHgwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKK2NvdHgwMTggY29tcGFyZXRvdGFsICAgMSAgIDAgIC0+IDEKK2NvdHgwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDAKK2NvdHgwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCitjb3R4MDIxIGNvbXBhcmV0b3RhbCAgIDIgIC0yICAtPiAxCitjb3R4MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxCitjb3R4MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCitjb3R4MDI1IGNvbXBhcmV0b3RhbCAgIDIgICAxICAtPiAxCitjb3R4MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwCisKK2NvdHgwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAorY290eDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQorY290eDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQorY290eDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQorY290eDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQorY290eDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxCitjb3R4MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKK2NvdHgwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTEKK2NvdHgwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTEKK2NvdHgwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKK2NvdHgwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQorY290eDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxCitjb3R4MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKK2NvdHgwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTEKK2NvdHgwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTEKK2NvdHgwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQorY290eDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxCitjb3R4MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDEKK2NvdHgwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAorY290eDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQorY290eDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxCitjb3R4MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKK2NvdHgwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQorY290eDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxCitjb3R4MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKKworY290eDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDAKK2NvdHgwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQorY290eDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCitjb3R4MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTEKK2NvdHgwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQorY290eDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKK2NvdHgwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwCitjb3R4MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTEKK2NvdHgwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQorY290eDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xCitjb3R4MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQorY290eDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKK2NvdHgwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwCitjb3R4MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTEKK2NvdHgwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQorY290eDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDEKK2NvdHgwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxCitjb3R4MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQorY290eDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDAKK2NvdHgwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQorY290eDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKK2NvdHgwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxCitjb3R4MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQorY290eDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKK2NvdHgwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2NvdHgwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAwCitjb3R4MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gLTEKK2NvdHgwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAxCitjb3R4MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMAorCistLSBFeGFtcGxlcworY290eDA5NCBjb21wYXJldG90YWwgIDEyLjczICAxMjcuOSAgLT4gLTEKK2NvdHgwOTUgY29tcGFyZXRvdGFsICAtMTI3ICAgMTIgICAgIC0+IC0xCitjb3R4MDk2IGNvbXBhcmV0b3RhbCAgMTIuMzAgIDEyLjMgICAtPiAtMQorY290eDA5NyBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zMCAgLT4gIDAKK2NvdHgwOTggY29tcGFyZXRvdGFsICAxMi4zICAgMTIuMzAwIC0+ICAxCitjb3R4MDk5IGNvbXBhcmV0b3RhbCAgMTIuMyAgIE5hTiAgICAtPiAtMQorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2NvdHgxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwCitjb3R4MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTEKK2NvdHgxMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIDcuMCAgICAtPiAxCitjb3R4MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQorY290eDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDAKK2NvdHgxMDUgY29tcGFyZXRvdGFsICAgMC43RSsxIDcgICAgICAtPiAwCitjb3R4MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTEKK2NvdHgxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQorY290eDEwOCBjb21wYXJldG90YWwgICA3LjAgICAgNzBFLTEgIC0+IDAKK2NvdHgxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwCitjb3R4MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQorCitjb3R4MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQorY290eDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDEKK2NvdHgxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxCitjb3R4MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQorY290eDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDEKK2NvdHgxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxCitjb3R4MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQorY290eDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDEKK2NvdHgxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxCitjb3R4MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDEKK2NvdHgxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2NvdHgxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQorY290eDE0MSBjb21wYXJldG90YWwgICA4LjAgICAgOSAgICAgIC0+IC0xCitjb3R4MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTEKK2NvdHgxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQorY290eDE0NCBjb21wYXJldG90YWwgICA4MEUtMSAgOS4wICAgIC0+IC0xCitjb3R4MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2NvdHgxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQorY290eDE0NyBjb21wYXJldG90YWwgICA4LjAgICAgOUUrMCAgIC0+IC0xCitjb3R4MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2NvdHgxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQorY290eDE1MCBjb21wYXJldG90YWwgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2NvdHgyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQorY290eDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xCitjb3R4MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTEKK2NvdHgyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQorY290eDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xCitjb3R4MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2NvdHgyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQorY290eDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xCitjb3R4MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2NvdHgyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQorY290eDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2NvdHgyMjAgY29tcGFyZXRvdGFsICAtOC4wICAgIDcuMCAgICAtPiAtMQorY290eDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xCitjb3R4MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTEKK2NvdHgyMjMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDcuMCAgICAtPiAtMQorY290eDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xCitjb3R4MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2NvdHgyMjYgY29tcGFyZXRvdGFsICAtODBFLTEgIDcgICAgICAtPiAtMQorY290eDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xCitjb3R4MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2NvdHgyMjkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuN0UrMSAtPiAtMQorY290eDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2NvdHgyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQorY290eDI0MSBjb21wYXJldG90YWwgIC04LjAgICAgOSAgICAgIC0+IC0xCitjb3R4MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTEKK2NvdHgyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQorY290eDI0NCBjb21wYXJldG90YWwgIC04MEUtMSAgOS4wICAgIC0+IC0xCitjb3R4MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2NvdHgyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQorY290eDI0NyBjb21wYXJldG90YWwgIC04LjAgICAgOUUrMCAgIC0+IC0xCitjb3R4MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2NvdHgyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQorY290eDI1MCBjb21wYXJldG90YWwgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2NvdHgzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQorY290eDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxCitjb3R4MzAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNy4wICAgIC0+IDEKK2NvdHgzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQorY290eDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxCitjb3R4MzA1IGNvbXBhcmV0b3RhbCAgIC43RSsxICAtNyAgICAgIC0+IDEKK2NvdHgzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQorY290eDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxCitjb3R4MzA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2NvdHgzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQorY290eDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2NvdHgzMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIC03LjAgICAgLT4gMQorY290eDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxCitjb3R4MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDEKK2NvdHgzMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC03LjAgICAgLT4gMQorY290eDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxCitjb3R4MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDEKK2NvdHgzMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIC03ICAgICAgLT4gMQorY290eDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxCitjb3R4MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2NvdHgzMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uN0UrMSAgLT4gMQorY290eDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2NvdHgzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQorY290eDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxCitjb3R4MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDEKK2NvdHgzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQorY290eDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxCitjb3R4MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDEKK2NvdHgzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQorY290eDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxCitjb3R4MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2NvdHgzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQorY290eDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2NvdHg0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2NvdHg0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDEKK2NvdHg0MDIgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNy4wICAgIC0+IC0xCitjb3R4NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQorY290eDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMAorY290eDQwNSBjb21wYXJldG90YWwgICAtLjdFKzEgIC03ICAgICAgLT4gMAorY290eDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQorY290eDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQorY290eDQwOCBjb21wYXJldG90YWwgICAtNy4wICAgIC03MEUtMSAgLT4gMAorY290eDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorY290eDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTEKKworY290eDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2NvdHg0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitjb3R4NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorY290eDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2NvdHg0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitjb3R4NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorY290eDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2NvdHg0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitjb3R4NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorY290eDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2NvdHg0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2NvdHg0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2NvdHg0NDEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2NvdHg0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDEKK2NvdHg0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2NvdHg0NDQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2NvdHg0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2NvdHg0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2NvdHg0NDcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2NvdHg0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2NvdHg0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2NvdHg0NTAgY29tcGFyZXRvdGFsICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK3ByZWNpc2lvbjogNDAKK2NvdHg0NzAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0NzIgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0NzUgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0NzggY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKK2NvdHg0ODEgY29tcGFyZXRvdGFsIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2NvdHg0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAorY290eDQ4NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFLTg5IC0+IDEKK2NvdHg0ODUgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5IC0+IDEKK2NvdHg0ODYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMEUtODkgLT4gMQorY290eDQ4NyBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDBFNzg5IC0+IDEKK2NvdHg0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDEKK2NvdHg0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMEU3ODkgLT4gMQorY290eDQ5MCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDEKK2NvdHg0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5IC0+IDEKK2NvdHg0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQorY290eDQ5MyBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDBFNzg5IC0+IDEKK2NvdHg0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDEKK2NvdHg0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMEU3ODkgLT4gMQorY290eDQ5NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDEKK2NvdHg0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorcHJlY2lzaW9uOiA5Citjb3R4NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxCitjb3R4NTAxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNCAgICAtPiAxCitjb3R4NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxCitjb3R4NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxCitjb3R4NTA0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMSAgICAtPiAxCitjb3R4NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxCitjb3R4NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxCitjb3R4NTA3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS04ICAgICAtPiAxCitjb3R4NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxCitjb3R4NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxCitjb3R4NTEwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS01ICAgICAtPiAxCitjb3R4NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxCitjb3R4NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxCitjb3R4NTEzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0yICAgICAtPiAxCitjb3R4NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxCitjb3R4NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwCitjb3R4NTE2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxICAgICAtPiAtMQorY290eDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2NvdHg1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitjb3R4NTE5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs0ICAgICAtPiAtMQorY290eDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2NvdHg1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitjb3R4NTIzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs3ICAgICAtPiAtMQorY290eDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2NvdHg1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitjb3R4NTI2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMCAgICAtPiAtMQorY290eDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2NvdHg1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitjb3R4NTI5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMyAgICAtPiAtMQorY290eDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2NvdHg1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitjb3R4NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorY290eDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2NvdHg1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitjb3R4NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorY290eDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2NvdHg1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitjb3R4NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQorY290eDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitjb3R4NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQorY290eDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitjb3R4NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQorY290eDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitjb3R4NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMAorY290eDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2NvdHg1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitjb3R4NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQorY290eDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitjb3R4NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorY290eDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxCitjb3R4NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorY290eDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxCitjb3R4NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorY290eDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2NvdHg1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitjb3R4NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGFuIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorY290eDU4MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitjb3R4NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2NvdHg1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorY290eDU4MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitjb3R4NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2NvdHg1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorY290eDU4NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitjb3R4NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2NvdHg1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorY290eDU4OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorY290eDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorY290eDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorY290eDU5MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorY290eDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorY290eDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorY290eDU5NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorY290eDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorY290eDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorY290eDU5OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorY290eDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworcHJlY2lzaW9uOiAyMAorY290eDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorY290eDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitjb3R4NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorY290eDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2NvdHg2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitjb3R4NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorY290eDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2NvdHg2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitjb3R4NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorY290eDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2NvdHg2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitjb3R4NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorY290eDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2NvdHg2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitjb3R4NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorY290eDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2NvdHg2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitjb3R4NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorY290eDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2NvdHg2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitjb3R4NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorY290eDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKK3ByZWNpc2lvbjogOQorCistLSBleHRlbmRlZCB6ZXJvcworY290eDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMAorY290eDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQorY290eDY0MiBjb21wYXJldG90YWwgICAwICAgIC0wLjAgLT4gMQorY290eDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQorY290eDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTEKK2NvdHg2NDUgY29tcGFyZXRvdGFsICAtMCAgICAtMCAgIC0+IDAKK2NvdHg2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xCitjb3R4NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQorY290eDY0OCBjb21wYXJldG90YWwgICAwLjAgICAwICAgLT4gLTEKK2NvdHg2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDEKK2NvdHg2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDEKK2NvdHg2NTEgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wIC0+IDAKK2NvdHg2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xCitjb3R4NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxCitjb3R4NjU0IGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAuMCAtPiAwCitjb3R4NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQorCitjb3R4NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQorY290eDY1NyBjb21wYXJldG90YWwgIC0wRTIgICAwLjAgLT4gLTEKK2NvdHg2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDEKK2NvdHg2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDEKK2NvdHg2NjAgY29tcGFyZXRvdGFsICAtMEUxICAgMCAgIC0+IC0xCitjb3R4NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQorY290eDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQorY290eDY2MyBjb21wYXJldG90YWwgICAwRTIgICAwICAgLT4gMQorY290eDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMAorY290eDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTEKK2NvdHg2NjYgY29tcGFyZXRvdGFsICAgMEUxICAtMEUxIC0+IDEKK2NvdHg2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDEKK2NvdHg2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDEKK2NvdHg2NjkgY29tcGFyZXRvdGFsICAtMEUyICAtMEUyIC0+IDAKK2NvdHg2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDEKK2NvdHg2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDEKK2NvdHg2NzIgY29tcGFyZXRvdGFsICAtMEUxICAgMEUxIC0+IC0xCitjb3R4NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQorY290eDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMAorY290eDY3NSBjb21wYXJldG90YWwgICAwRTIgICAwRTEgLT4gMQorY290eDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTEKK2NvdHg2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xCitjb3R4Njc4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMiAtPiAtMQorY290eDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitwcmVjaXNpb246IDIwCitjb3R4NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitjb3R4NjgxIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAgICAgICAgICAtPiAxCitjb3R4NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxCitjb3R4NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxCitjb3R4Njg0IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAxCitjb3R4Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxCitjb3R4Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxCitjb3R4Njg3IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAxCitjb3R4Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxCitjb3R4Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxCitjb3R4NjkwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitjb3R4NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQorY290eDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAgIDEyIC0+IC0xCitjb3R4Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQorY290eDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IC0xCitjb3R4Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQorY290eDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTEKK2NvdHg2OTkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IC0xCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2NvdHg3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxCitjb3R4NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQorY290eDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDEKK2NvdHg3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xCitjb3R4NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQorY290eDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTEKK2NvdHg3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxCitjb3R4NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQorY290eDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDEKK2NvdHg3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCitjb3R4NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQorY290eDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTEKK2NvdHg3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xCitjb3R4NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQorY290eDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTEKK2NvdHg3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCitjb3R4NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQorY290eDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDEKKworcHJlY2lzaW9uOiAxNQorLS0gc2FtZSB3aXRoIHBsZW50eSBvZiBwcmVjaXNpb24KK2NvdHg3MjEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwIDEgLT4gMQorY290eDcyMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAtPiAtMQorY290eDcyMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgMSAtPiAxCitjb3R4NzI0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgIC0+IC0xCitjb3R4NzI1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAxIC0+IDEKK2NvdHg3MjYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgLT4gLTEKK2NvdHg3MjcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgIDEgLT4gMQorY290eDcyOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAtPiAtMQorY290eDcyOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgMSAtPiAxCitjb3R4NzMwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxIC0+IC0xCitjb3R4NzMxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAxIC0+IDEKK2NvdHg3MzIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgLT4gLTEKKworLS0gcmVzaWR1ZSBjYXNlcworcHJlY2lzaW9uOiA1Citjb3R4NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxCitjb3R4NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxCitjb3R4NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxCitjb3R4NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxCitjb3R4NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQorY290eDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2NvdHg3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xCitjb3R4NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQorY290eDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2NvdHg3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xCitjb3R4NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQorY290eDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQorY290eDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQorY290eDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBhIHNlbGVjdGlvbiBvZiBsb25naWVzCitjb3R4NzYwIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAtPiAtMQorY290eDc2MSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMAorY290eDc2MiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gLTEKK2NvdHg3NjMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKKy0tIHByZWNpc2lvbnMgYWJvdmUgb3IgYmVsb3cgdGhlIGRpZmZlcmVuY2Ugc2hvdWxkIGhhdmUgbm8gZWZmZWN0CitwcmVjaXNpb246ICAgMTEKK2NvdHg3NjQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAxMAorY290eDc2NSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA5Citjb3R4NzY2IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDgKK2NvdHg3NjcgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgNworY290eDc2OCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA2Citjb3R4NzY5IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDUKK2NvdHg3NzAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgNAorY290eDc3MSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAzCitjb3R4NzcyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDIKK2NvdHg3NzMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgMQorY290eDc3NCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorCistLSBTcGVjaWFscworcHJlY2lzaW9uOiAgIDkKK2NvdHg3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorY290eDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxCitjb3R4NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDEKK2NvdHg3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQorY290eDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxCitjb3R4Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDEKK2NvdHg3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQorY290eDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCitjb3R4Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTEKK2NvdHg3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorY290eDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xCitjb3R4NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQorY290eDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xCitjb3R4Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTEKK2NvdHg3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAorCitjb3R4ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2NvdHg4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQorY290eDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xCitjb3R4ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTEKK2NvdHg4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQorY290eDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xCitjb3R4ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTEKK2NvdHg4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorY290eDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCitjb3R4ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDEKK2NvdHg4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQorY290eDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxCitjb3R4ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDEKK2NvdHg4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQorY290eDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxCitjb3R4ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKKworY290eDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxCitjb3R4ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDEKK2NvdHg4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQorY290eDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxCitjb3R4ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDEKK2NvdHg4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQorY290eDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxCitjb3R4ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDEKK2NvdHg4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMAorY290eDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQorY290eDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQorY290eDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQorY290eDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQorY290eDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQorY290eDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQorY290eDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQorY290eDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQorY290eDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwCitjb3R4ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDEKK2NvdHg4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTEKKworY290eDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxCitjb3R4ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDEKK2NvdHg4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQorY290eDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxCitjb3R4ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDEKK2NvdHg4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQorY290eDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxCitjb3R4ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDEKK2NvdHg4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQorY290eDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQorY290eDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2NvdHg4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTEKK2NvdHg4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTEKK2NvdHg4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTEKK2NvdHg4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTEKK2NvdHg4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTEKK2NvdHg4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTEKK2NvdHg4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTEKK2NvdHg4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTEKK2NvdHg4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTEKK2NvdHg4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTEKK2NvdHg4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQorY290eDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2NvdHg4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDAKK2NvdHg4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDEKK2NvdHg4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xCitjb3R4ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQorY290eDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTEKK2NvdHg4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xCitjb3R4ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQorY290eDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTEKK2NvdHg4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xCitjb3R4ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQorY290eDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTEKKworY290eDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMAorY290eDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTEKK2NvdHg4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDEKK2NvdHg4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDEKK2NvdHg4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDEKK2NvdHg4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDEKK2NvdHg4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDEKK2NvdHg4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDEKK2NvdHg4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDEKK2NvdHg4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDEKK2NvdHg4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDEKK2NvdHg4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDEKKworLS0gTmFOcyB3aXRoIHBheWxvYWQKK2NvdHg5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQorY290eDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxCitjb3R4OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDEKK2NvdHg5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTEKK2NvdHg5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQorY290eDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxCitjb3R4OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2NvdHg5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQorY290eDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxCitjb3R4OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xCitjb3R4OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xCitjb3R4OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xCitjb3R4OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxCitjb3R4OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xCitjb3R4OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxCisKK2NvdHg5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDEKK2NvdHg5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDEKK2NvdHg5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitjb3R4OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQorY290eDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTEKK2NvdHg5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitjb3R4OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQorY290eDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworY290eDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xCitjb3R4OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2NvdHg5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQorY290eDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitjb3R4OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2NvdHg5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQorY290eDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xCitjb3R4OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2NvdHg5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIG5vdyBhbGxvd2VkCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY290eDEwODAgY29tcGFyZXRvdGFsICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAtMQorY290eDEwODEgY29tcGFyZXRvdGFsIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorY290eDEwODIgY29tcGFyZXRvdGFsICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMQorY290eDEwODMgY29tcGFyZXRvdGFsIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorY290eDEwODUgY29tcGFyZXRvdGFsIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAtMQorY290eDEwODYgY29tcGFyZXRvdGFsIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorY290eDEwODcgY29tcGFyZXRvdGFsIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtMQorY290eDEwODggY29tcGFyZXRvdGFsIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCitjb3R4MTA4OSBjb21wYXJldG90YWwgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMSAgIC0+IC0xCitjb3R4MTA5MCBjb21wYXJldG90YWwgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+IC0xCitjb3R4MTA5MSBjb21wYXJldG90YWwgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+IC0xCitjb3R4MTA5MiBjb21wYXJldG90YWwgOWUtOTk5OTk5OTk4IDAuMDEgICAgICAgICAgIC0+IC0xCitjb3R4MTA5MyBjb21wYXJldG90YWwgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgIC0+IC0xCitjb3R4MTA5NCBjb21wYXJldG90YWwgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAxCitjb3R4MTA5NSBjb21wYXJldG90YWwgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxCitjb3R4MTA5NiBjb21wYXJldG90YWwgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgIC0+ICAxCitjb3R4MTA5NyBjb21wYXJldG90YWwgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxCitjb3R4MTA5OCBjb21wYXJldG90YWwgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICAxCitjb3R4MTA5OSBjb21wYXJldG90YWwgOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgIC0+ICAxCitjb3R4MTEwMCBjb21wYXJldG90YWwgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+IC0xCistLSBzaWducworY290eDExMDEgY29tcGFyZXRvdGFsICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAgMQorY290eDExMDIgY29tcGFyZXRvdGFsICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMQorY290eDExMDMgY29tcGFyZXRvdGFsIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMQorY290eDExMDQgY29tcGFyZXRvdGFsIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMQorY290eDExMDUgY29tcGFyZXRvdGFsICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAtMQorY290eDExMDYgY29tcGFyZXRvdGFsICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMQorY290eDExMDcgY29tcGFyZXRvdGFsIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAtMQorY290eDExMDggY29tcGFyZXRvdGFsIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2NvdHgxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMCAgICAgICAtPiAtMQorY290eDExMTEgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wICAgICAgIC0+ICAxCitjb3R4MTExMiBjb21wYXJldG90YWwgIC0wRS0zODMgIDAgICAgICAgLT4gLTEKK2NvdHgxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMCAgICAgICAtPiAgMQorY290eDExMTQgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwRSszODQgIC0+IC0xCitjb3R4MTExNSBjb21wYXJldG90YWwgICAwRS0zODMgLTBFKzM4NCAgLT4gIDEKK2NvdHgxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMEUrMzg0ICAtPiAtMQorY290eDExMTcgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wRSszODQgIC0+ICAxCitjb3R4MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrMzg0ICAtPiAgMQorY290eDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSszODQgIC0+IC0xCitjb3R4MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzM4NCAgLT4gIDEKKworY290eDExMzAgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwICAgICAgIC0+ICAxCitjb3R4MTEzMSBjb21wYXJldG90YWwgICAwRSszODQgLTAgICAgICAgLT4gIDEKK2NvdHgxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQorY290eDExMzMgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wICAgICAgIC0+IC0xCitjb3R4MTEzNCBjb21wYXJldG90YWwgICAwRSszODQgIDBFLTM4MyAgLT4gIDEKK2NvdHgxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQorY290eDExMzYgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwRS0zODMgIC0+IC0xCitjb3R4MTEzNyBjb21wYXJldG90YWwgIC0wRSszODQgLTBFLTM4MyAgLT4gLTEKK2NvdHgxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQorY290eDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS0zODMgIC0+ICAxCitjb3R4MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTM4MyAgLT4gLTEKK2NvdHgxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQorCistLSBOdWxsIHRlc3RzCitjb3R4OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitjb3R4OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RtYWcuZGVjVGVzdAppbmRleCBlODdjOWYyLi5jZWRmZGY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QKQEAgLTEsNzkwICsxLDc5MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29tcGFyZXRvdG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiwgYWJzLiB0b3RhbCBvcmRlcmluZyAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCBpdCBjYW5ub3QgYmUgYXNzdW1lZCB0aGF0IGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocw0KLS0tIGZvciB0aGlzIG9wZXJhdGlvbiBhZGVxdWF0ZWx5LCBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlDQotLS0gcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdCBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvDQotLS0gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsDQotLS0gd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocyB0aGFuIGNvbXBhcmUuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1jdG14MDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMA0KLWN0bXgwMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxDQotY3RteDAwMyBjb21wYXJldG90bWFnICAtMiAgIDAgICAtPiAgIDENCi1jdG14MDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQ0KLWN0bXgwMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwDQotY3RteDAwNiBjb21wYXJldG90bWFnICAtMSAgLTIgICAtPiAgLTENCi1jdG14MDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMA0KLWN0bXgwMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxDQotY3RteDAwOSBjb21wYXJldG90bWFnICAtMSAgIDEgICAtPiAgIDANCi1jdG14MDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQ0KLWN0bXgwMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xDQotY3RteDAxMiBjb21wYXJldG90bWFnICAgMCAgLTEgICAtPiAgLTENCi1jdG14MDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMA0KLWN0bXgwMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xDQotY3RteDAxNSBjb21wYXJldG90bWFnICAgMCAgIDIgICAtPiAgLTENCi1jdG14MDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQ0KLWN0bXgwMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwDQotY3RteDAxOCBjb21wYXJldG90bWFnICAgMSAgIDAgICAtPiAgIDENCi1jdG14MDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMA0KLWN0bXgwMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xDQotY3RteDAyMSBjb21wYXJldG90bWFnICAgMiAgLTIgICAtPiAgIDANCi1jdG14MDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQ0KLWN0bXgwMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxDQotY3RteDAyNSBjb21wYXJldG90bWFnICAgMiAgIDEgICAtPiAgIDENCi1jdG14MDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMA0KLQ0KLWN0bXgwMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDANCi1jdG14MDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxDQotY3RteDAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQ0KLWN0bXgwMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDENCi1jdG14MDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwDQotY3RteDAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQ0KLWN0bXgwMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDANCi1jdG14MDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxDQotY3RteDAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMA0KLWN0bXgwNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTENCi1jdG14MDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xDQotY3RteDA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQ0KLWN0bXgwNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDANCi1jdG14MDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xDQotY3RteDA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQ0KLWN0bXgwNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTENCi1jdG14MDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwDQotY3RteDA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQ0KLWN0bXgwNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDANCi1jdG14MDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xDQotY3RteDA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMA0KLWN0bXgwNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDENCi1jdG14MDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxDQotY3RteDA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQ0KLWN0bXgwNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDANCi0NCi1jdG14MDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDANCi1jdG14MDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDENCi1jdG14MDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDENCi1jdG14MDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDENCi1jdG14MDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDANCi1jdG14MDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTENCi1jdG14MDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDANCi1jdG14MDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDENCi1jdG14MDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDANCi1jdG14MDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTENCi1jdG14MDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTENCi1jdG14MDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTENCi1jdG14MDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDANCi1jdG14MDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTENCi1jdG14MDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTENCi1jdG14MDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTENCi1jdG14MDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDANCi1jdG14MDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDENCi1jdG14MDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDANCi1jdG14MDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTENCi1jdG14MDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDANCi1jdG14MDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDENCi1jdG14MDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDENCi1jdG14MDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDENCi1jdG14MDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDANCi0NCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQNCi1tYXhleHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1jdG14MDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDANCi1jdG14MDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDANCi1jdG14MDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAgIDANCi1jdG14MDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAgIDANCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsDQotY3RteDEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwDQotY3RteDEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xDQotY3RteDEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxDQotY3RteDEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxDQotY3RteDEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwDQotY3RteDEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwDQotY3RteDEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xDQotY3RteDEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xDQotY3RteDEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwDQotY3RteDEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwDQotY3RteDExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxDQotDQotY3RteDEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxDQotY3RteDEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxDQotY3RteDEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxDQotY3RteDEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxDQotY3RteDEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxDQotY3RteDEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxDQotY3RteDEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxDQotY3RteDEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxDQotY3RteDEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxDQotY3RteDEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQ0KLWN0bXgxMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXgxNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgxNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQ0KLWN0bXgxNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgxNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgxNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQ0KLWN0bXgxNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KLWN0bXgxNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQ0KLWN0bXgxNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQ0KLWN0bXgxNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQ0KLWN0bXgxNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQ0KLWN0bXgxNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1jdG14MjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDANCi1jdG14MjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTENCi1jdG14MjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDENCi1jdG14MjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDANCi1jdG14MjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDANCi1jdG14MjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTENCi1jdG14MjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTENCi1jdG14MjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDANCi1jdG14MjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDANCi1jdG14MjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1jdG14MjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDENCi1jdG14MjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDENCi1jdG14MjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDENCi1jdG14MjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDENCi1jdG14MjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDENCi1jdG14MjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDENCi1jdG14MjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDENCi1jdG14MjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDENCi1jdG14MjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDENCi1jdG14MjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1jdG14MjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTENCi1jdG14MjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTENCi1jdG14MjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTENCi1jdG14MjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTENCi1jdG14MjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTENCi1jdG14MjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTENCi1jdG14MjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTENCi1jdG14MjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTENCi1jdG14MjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTENCi1jdG14MjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTENCi1jdG14MjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotY3RteDMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMA0KLWN0bXgzMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTENCi1jdG14MzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxDQotY3RteDMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXgzMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDANCi1jdG14MzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwDQotY3RteDMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KLWN0bXgzMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTENCi1jdG14MzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwDQotY3RteDMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KLWN0bXgzMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1jdG14MzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxDQotY3RteDMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KLWN0bXgzMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDENCi1jdG14MzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxDQotY3RteDMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXgzMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDENCi1jdG14MzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxDQotY3RteDMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQ0KLWN0bXgzMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDENCi1jdG14MzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxDQotY3RteDMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWN0bXgzNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTENCi1jdG14MzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xDQotY3RteDM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXgzNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTENCi1jdG14MzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xDQotY3RteDM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KLWN0bXgzNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTENCi1jdG14MzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xDQotY3RteDM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KLWN0bXgzNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTENCi1jdG14MzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWN0bXg0MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwDQotY3RteDQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTENCi1jdG14NDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXg0MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxDQotY3RteDQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDANCi1jdG14NDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMA0KLWN0bXg0MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xDQotY3RteDQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTENCi1jdG14NDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMA0KLWN0bXg0MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwDQotY3RteDQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1jdG14NDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXg0MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxDQotY3RteDQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDENCi1jdG14NDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWN0bXg0MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxDQotY3RteDQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDENCi1jdG14NDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQ0KLWN0bXg0MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxDQotY3RteDQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDENCi1jdG14NDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQ0KLWN0bXg0MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotY3RteDQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTENCi1jdG14NDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQ0KLWN0bXg0NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xDQotY3RteDQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTENCi1jdG14NDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQ0KLWN0bXg0NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xDQotY3RteDQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTENCi1jdG14NDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQ0KLWN0bXg0NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xDQotY3RteDQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTENCi1jdG14NDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLXByZWNpc2lvbjogNDANCi1jdG14NDcwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTENCi1jdG14NDcxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0NzIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTENCi1jdG14NDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1jdG14NDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1jdG14NDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTENCi1jdG14NDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWN0bXg0NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTENCi1jdG14NDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1jdG14NDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KLWN0bXg0ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1jdG14NDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTENCi1jdG14NDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMA0KLWN0bXg0ODQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgIC0+ICAgMQ0KLWN0bXg0ODUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAgLT4gICAxDQotY3RteDQ4NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMEUtODkgIC0+ICAgMQ0KLWN0bXg0ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgIC0+ICAgMQ0KLWN0bXg0ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxDQotY3RteDQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMEU3ODkgIC0+ICAgMQ0KLWN0bXg0OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQ0KLWN0bXg0OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAgLT4gICAxDQotY3RteDQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQ0KLWN0bXg0OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgIC0+ICAgMQ0KLWN0bXg0OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxDQotY3RteDQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMEU3ODkgIC0+ICAgMQ0KLWN0bXg0OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQ0KLWN0bXg0OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAgLT4gICAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLXByZWNpc2lvbjogOQ0KLWN0bXg1MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxDQotY3RteDUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDENCi1jdG14NTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQ0KLWN0bXg1MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxDQotY3RteDUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDENCi1jdG14NTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQ0KLWN0bXg1MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxDQotY3RteDUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDENCi1jdG14NTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQ0KLWN0bXg1MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxDQotY3RteDUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDENCi1jdG14NTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQ0KLWN0bXg1MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxDQotY3RteDUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDENCi1jdG14NTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQ0KLWN0bXg1MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwDQotY3RteDUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTENCi1jdG14NTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQ0KLWN0bXg1MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xDQotY3RteDUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTENCi1jdG14NTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQ0KLWN0bXg1MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xDQotY3RteDUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTENCi1jdG14NTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQ0KLWN0bXg1MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xDQotY3RteDUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTENCi1jdG14NTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQ0KLWN0bXg1MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xDQotY3RteDUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTENCi1jdG14NTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQ0KLWN0bXg1MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xDQotLS0gTFIgc3dhcA0KLWN0bXg1NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTENCi1jdG14NTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTENCi1jdG14NTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTENCi1jdG14NTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTENCi1jdG14NTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xDQotY3RteDU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTENCi1jdG14NTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQ0KLWN0bXg1NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwDQotY3RteDU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDENCi1jdG14NTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxDQotY3RteDU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDENCi1jdG14NTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxDQotY3RteDU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDENCi1jdG14NTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxDQotY3RteDU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDENCi1jdG14NTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxDQotY3RteDU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDENCi1jdG14NTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQ0KLWN0bXg1NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxDQotLS0gc2ltaWxhciB3aXRoIGFuIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWN0bXg1ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDENCi1jdG14NTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxDQotY3RteDU4MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgIC0+ICAgMQ0KLWN0bXg1ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDENCi1jdG14NTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxDQotY3RteDU4NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgIC0+ICAgMQ0KLWN0bXg1ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDENCi1jdG14NTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxDQotY3RteDU4OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgIC0+ICAgMQ0KLWN0bXg1ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTENCi1jdG14NTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xDQotY3RteDU5MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgIC0+ICAtMQ0KLWN0bXg1OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTENCi1jdG14NTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xDQotY3RteDU5NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgIC0+ICAtMQ0KLWN0bXg1OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTENCi1jdG14NTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xDQotY3RteDU5NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgIC0+ICAtMQ0KLWN0bXg1OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTENCi1jdG14NTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1wcmVjaXNpb246IDIwDQotY3RteDYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xDQotY3RteDYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTENCi1jdG14NjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxDQotY3RteDYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDENCi1jdG14NjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxDQotY3RteDYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDENCi1jdG14NjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQ0KLWN0bXg2MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxDQotY3RteDYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDENCi1jdG14NjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQ0KLWN0bXg2MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTENCi1jdG14NjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQ0KLWN0bXg2MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xDQotY3RteDYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDENCi1jdG14NjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQ0KLWN0bXg2MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxDQotY3RteDYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDENCi1jdG14NjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQ0KLWN0bXg2MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxDQotY3RteDYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDENCi1jdG14NjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQ0KLWN0bXg2MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxDQotY3RteDYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDENCi1wcmVjaXNpb246IDkNCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWN0bXg2NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwDQotY3RteDY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDANCi1jdG14NjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQ0KLWN0bXg2NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxDQotY3RteDY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDANCi1jdG14NjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMA0KLWN0bXg2NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxDQotY3RteDY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDENCi1jdG14NjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQ0KLWN0bXg2NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xDQotY3RteDY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDANCi1jdG14NjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMA0KLWN0bXg2NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xDQotY3RteDY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTENCi1jdG14NjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMA0KLWN0bXg2NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwDQotDQotY3RteDY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDENCi1jdG14NjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQ0KLWN0bXg2NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxDQotY3RteDY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDENCi1jdG14NjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQ0KLWN0bXg2NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxDQotY3RteDY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDENCi1jdG14NjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQ0KLWN0bXg2NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwDQotY3RteDY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDENCi1jdG14NjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMA0KLWN0bXg2NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxDQotY3RteDY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTENCi1jdG14NjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMA0KLWN0bXg2NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xDQotY3RteDY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDANCi1jdG14NjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMA0KLWN0bXg2NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxDQotY3RteDY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDANCi1jdG14Njc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQ0KLWN0bXg2NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xDQotY3RteDY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDANCi1jdG14Njc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQ0KLWN0bXg2NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLXByZWNpc2lvbjogMjANCi1jdG14NjgwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMiAgICAgICAgICAgIC0+ICAgMA0KLWN0bXg2ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxDQotY3RteDY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDENCi1jdG14NjgzIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAgICAgICAgIC0+ICAgMQ0KLWN0bXg2ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxDQotY3RteDY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDENCi1jdG14Njg2IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAgICAgIC0+ICAgMQ0KLWN0bXg2ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxDQotY3RteDY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDENCi1jdG14Njg5IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMDAgIC0+ICAgMQ0KLWN0bXg2OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwDQotY3RteDY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTENCi1jdG14NjkyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xDQotY3RteDY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTENCi1jdG14Njk1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xDQotY3RteDY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTENCi1jdG14Njk4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgICAgMTIgIC0+ICAtMQ0KLWN0bXg2OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xDQotDQotLS0gbG9uZyBvcGVyYW5kIGNoZWNrcw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogOQ0KLWN0bXg3MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxDQotY3RteDcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTENCi1jdG14NzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQ0KLWN0bXg3MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xDQotY3RteDcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDENCi1jdG14NzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQ0KLWN0bXg3MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxDQotY3RteDcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTENCi1jdG14NzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQ0KLWN0bXg3MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xDQotY3RteDcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDENCi1jdG14NzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQ0KLWN0bXg3MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxDQotY3RteDcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTENCi1jdG14NzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KLWN0bXg3MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xDQotY3RteDcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDENCi1jdG14NzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KLQ0KLXByZWNpc2lvbjogMTUNCi0tLSBzYW1lIHdpdGggcGxlbnR5IG9mIHByZWNpc2lvbg0KLWN0bXg3MjEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAxICAtPiAgIDENCi1jdG14NzIyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgLT4gIC0xDQotY3RteDcyMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgIDEgIC0+ICAgMQ0KLWN0bXg3MjQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAgLTENCi1jdG14NzI1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gICAxDQotY3RteDcyNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgIC0+ICAtMQ0KLWN0bXg3MjcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAxICAtPiAgIDENCi1jdG14NzI4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgLT4gIC0xDQotY3RteDcyOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KLWN0bXg3MzAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAgLTENCi1jdG14NzMxIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gICAxDQotY3RteDczMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KLQ0KLS0tIHJlc2lkdWUgY2FzZXMNCi1wcmVjaXNpb246IDUNCi1jdG14NzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQ0KLWN0bXg3NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxDQotY3RteDc0MiBjb21wYXJldG90bWFnICAxICAwLjk5OTk5ICAgICAtPiAgIDENCi1jdG14NzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQ0KLWN0bXg3NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xDQotY3RteDc0NSBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMSAgICAtPiAgLTENCi1jdG14NzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQ0KLWN0bXg3NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xDQotY3RteDc1MSBjb21wYXJldG90bWFnICAwLjk5OTk5OSAgIDEgICAtPiAgLTENCi1jdG14NzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQ0KLWN0bXg3NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xDQotY3RteDc1NCBjb21wYXJldG90bWFnICAxLjAwMDAxICAgIDEgICAtPiAgIDENCi1jdG14NzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQ0KLWN0bXg3NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxDQotDQotLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcw0KLWN0bXg3NjAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAgLT4gICAxDQotY3RteDc2MSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgIDANCi1jdG14NzYyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMQ0KLWN0bXg3NjMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotLS0gcHJlY2lzaW9ucyBhYm92ZSBvciBiZWxvdyB0aGUgZGlmZmVyZW5jZSBzaG91bGQgaGF2ZSBubyBlZmZlY3QNCi1wcmVjaXNpb246ICAgMTENCi1jdG14NzY0IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAxMA0KLWN0bXg3NjUgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICA5DQotY3RteDc2NiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDgNCi1jdG14NzY3IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgNw0KLWN0bXg3NjggY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICA2DQotY3RteDc2OSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDUNCi1jdG14NzcwIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgNA0KLWN0bXg3NzEgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotcHJlY2lzaW9uOiAgICAzDQotY3RteDc3MiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCi1wcmVjaXNpb246ICAgIDINCi1jdG14NzczIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KLXByZWNpc2lvbjogICAgMQ0KLWN0bXg3NzQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQotDQotLS0gU3BlY2lhbHMNCi1wcmVjaXNpb246ICAgOQ0KLWN0bXg3ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDANCi1jdG14NzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxDQotY3RteDc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQ0KLWN0bXg3ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDENCi1jdG14Nzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxDQotY3RteDc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQ0KLWN0bXg3ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDENCi1jdG14Nzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQotY3RteDc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQ0KLWN0bXg3ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCi1jdG14NzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xDQotY3RteDc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQ0KLWN0bXg3OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTENCi1jdG14NzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xDQotY3RteDc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQ0KLWN0bXg3OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1jdG14ODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQotY3RteDgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQ0KLWN0bXg4MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDENCi1jdG14ODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxDQotY3RteDgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQ0KLWN0bXg4MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDENCi1jdG14ODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxDQotY3RteDgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KLWN0bXg4MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDANCi1jdG14ODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xDQotY3RteDgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KLWN0bXg4MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTENCi1jdG14ODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xDQotY3RteDgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQ0KLWN0bXg4MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTENCi1jdG14ODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQotDQotY3RteDgyMSBjb21wYXJldG90bWFnICBOYU4gLUluZiAgICAtPiAgMQ0KLWN0bXg4MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDENCi1jdG14ODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxDQotY3RteDgyNCBjb21wYXJldG90bWFnICBOYU4gLTAgICAgICAtPiAgMQ0KLWN0bXg4MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDENCi1jdG14ODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotY3RteDgyNyBjb21wYXJldG90bWFnICBOYU4gIDEwMDAgICAtPiAgMQ0KLWN0bXg4MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDENCi1jdG14ODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwDQotY3RteDgzMCBjb21wYXJldG90bWFnIC1JbmYgIE5hTiAgICAtPiAgLTENCi1jdG14ODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xDQotY3RteDgzMyBjb21wYXJldG90bWFnIC0wICAgIE5hTiAgICAtPiAgLTENCi1jdG14ODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xDQotY3RteDgzNiBjb21wYXJldG90bWFnICAxMDAwIE5hTiAgICAtPiAgLTENCi1jdG14ODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQ0KLWN0bXg4MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDANCi1jdG14ODM5IGNvbXBhcmV0b3RtYWcgK05hTiAtTmFOICAgIC0+ICAwDQotY3RteDg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMA0KLQ0KLWN0bXg4NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDANCi1jdG14ODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQ0KLWN0bXg4NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDENCi1jdG14ODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxDQotY3RteDg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQ0KLWN0bXg4NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDENCi1jdG14ODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxDQotY3RteDg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQ0KLWN0bXg4NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDENCi1jdG14ODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWN0bXg4NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1jdG14ODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwDQotY3RteDg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQ0KLWN0bXg4NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xDQotY3RteDg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTENCi1jdG14ODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQ0KLWN0bXg4NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xDQotY3RteDg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTENCi1jdG14ODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQ0KLWN0bXg4NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xDQotY3RteDg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTENCi1jdG14ODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxDQotY3RteDg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWN0bXg4NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwDQotY3RteDg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xDQotY3RteDg3MyBjb21wYXJldG90bWFnICAtc05hTiAtSW5mICAgLT4gIDENCi1jdG14ODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQ0KLWN0bXg4NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxDQotY3RteDg3NiBjb21wYXJldG90bWFnICAtc05hTiAtMCAgICAgLT4gIDENCi1jdG14ODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQ0KLWN0bXg4NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxDQotY3RteDg3OSBjb21wYXJldG90bWFnICAtc05hTiAgMTAwMCAgLT4gIDENCi1jdG14ODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTENCi1jdG14ODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWN0bXg4ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwDQotY3RteDg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDENCi1jdG14ODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTENCi1jdG14ODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTENCi1jdG14ODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTENCi1jdG14ODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTENCi1jdG14ODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTENCi1jdG14ODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTENCi1jdG14ODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTENCi1jdG14ODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTENCi1jdG14ODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQ0KLWN0bXg4OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwDQotDQotLS0gTmFOcyB3aXRoIHBheWxvYWQNCi1jdG14OTYwIGNvbXBhcmV0b3RtYWcgIE5hTjkgLUluZiAgIC0+ICAxDQotY3RteDk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQ0KLWN0bXg5NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDENCi1jdG14OTYzIGNvbXBhcmV0b3RtYWcgLU5hTjY3IE5hTjUgIC0+ICAxDQotY3RteDk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTENCi1jdG14OTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQ0KLWN0bXg5NjYgY29tcGFyZXRvdG1hZyAgSW5mICAgTmFOMiAgLT4gIC0xDQotDQotY3RteDk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTENCi1jdG14OTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQ0KLWN0bXg5NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xDQotY3RteDk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTENCi1jdG14OTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQ0KLWN0bXg5NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxDQotY3RteDk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDENCi1jdG14OTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQ0KLQ0KLWN0bXg5ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQ0KLWN0bXg5ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQ0KLWN0bXg5ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWN0bXg5ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWN0bXg5ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWN0bXg5ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWN0bXg5ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLWN0bXg5ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLQ0KLWN0bXg5OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDENCi1jdG14OTkyIGNvbXBhcmV0b3RtYWcgIHNOYU45OCAtMTEgICAgIC0+ICAxDQotY3RteDk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQ0KLWN0bXg5OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1jdG14OTk1IGNvbXBhcmV0b3RtYWcgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQotY3RteDk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQ0KLWN0bXg5OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1jdG14OTk4IGNvbXBhcmV0b3RtYWcgIEluZiAgICBzTmFOOTAgIC0+IC0xDQotY3RteDk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQ0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgbm93IGFsbG93ZWQNCi1tYXhFeHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1jdG14MTA4MCBjb21wYXJldG90bWFnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgLT4gIC0xDQotY3RteDEwODEgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQ0KLWN0bXgxMDgyIGNvbXBhcmV0b3RtYWcgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDENCi1jdG14MTA4MyBjb21wYXJldG90bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAgLT4gIC0xDQotY3RteDEwODUgY29tcGFyZXRvdG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgIC0+ICAtMQ0KLWN0bXgxMDg2IGNvbXBhcmV0b3RtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgIDENCi1jdG14MTA4NyBjb21wYXJldG90bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAgLT4gICAxDQotY3RteDEwODggY29tcGFyZXRvdG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgIC0+ICAtMQ0KLQ0KLWN0bXgxMDg5IGNvbXBhcmV0b3RtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMSAgICAtPiAgLTENCi1jdG14MTA5MCBjb21wYXJldG90bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAgLT4gIC0xDQotY3RteDEwOTEgY29tcGFyZXRvdG1hZyAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgIC0+ICAtMQ0KLWN0bXgxMDkyIGNvbXBhcmV0b3RtYWcgOWUtOTk5OTk5OTk4IDAuMDEgICAgICAgICAgICAtPiAgLTENCi1jdG14MTA5MyBjb21wYXJldG90bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAgLT4gIC0xDQotY3RteDEwOTQgY29tcGFyZXRvdG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICAgMQ0KLWN0bXgxMDk1IGNvbXBhcmV0b3RtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgICAtPiAgIDENCi1jdG14MTA5NiBjb21wYXJldG90bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAgLT4gICAxDQotY3RteDEwOTcgY29tcGFyZXRvdG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgIC0+ICAgMQ0KLWN0bXgxMDk4IGNvbXBhcmV0b3RtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgICAtPiAgIDENCi1jdG14MTA5OSBjb21wYXJldG90bWFnIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAgLT4gICAxDQotY3RteDExMDAgY29tcGFyZXRvdG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgIC0+ICAtMQ0KLS0tIHNpZ25zDQotY3RteDExMDEgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgIC0+ICAgMQ0KLWN0bXgxMTAyIGNvbXBhcmV0b3RtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExICAtPiAgIDENCi1jdG14MTEwMyBjb21wYXJldG90bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAgLT4gICAxDQotY3RteDExMDQgY29tcGFyZXRvdG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQ0KLWN0bXgxMTA1IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExICAtPiAgLTENCi1jdG14MTEwNiBjb21wYXJldG90bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAgLT4gIC0xDQotY3RteDExMDcgY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQ0KLWN0bXgxMTA4IGNvbXBhcmV0b3RtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTENCi0NCi0tLSBzcHJlYWQgemVyb3MNCi1jdG14MTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTENCi1jdG14MTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTENCi1jdG14MTExMiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwICAgICAgICAtPiAgLTENCi1jdG14MTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTENCi1jdG14MTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTENCi1jdG14MTExNSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wRSszODQgICAtPiAgLTENCi1jdG14MTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTENCi1jdG14MTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTENCi1jdG14MTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSszODQgICAtPiAgLTENCi1jdG14MTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTENCi1jdG14MTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTENCi1jdG14MTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSszODQgICAtPiAgLTENCi0NCi1jdG14MTEzMCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwICAgICAgICAtPiAgIDENCi1jdG14MTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDENCi1jdG14MTEzMiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwICAgICAgICAtPiAgIDENCi1jdG14MTEzMyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wICAgICAgICAtPiAgIDENCi1jdG14MTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDENCi1jdG14MTEzNSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wRS0zODMgICAtPiAgIDENCi1jdG14MTEzNiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwRS0zODMgICAtPiAgIDENCi1jdG14MTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDENCi1jdG14MTEzOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRS0zODMgICAtPiAgIDENCi1jdG14MTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS0zODMgICAtPiAgIDENCi1jdG14MTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDENCi1jdG14MTE0MSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRS0zODMgICAtPiAgIDENCi0NCi0tLSBOdWxsIHRlc3RzDQotY3RteDk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1jdG14OTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29tcGFyZXRvdG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiwgYWJzLiB0b3RhbCBvcmRlcmluZyAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgaXQgY2Fubm90IGJlIGFzc3VtZWQgdGhhdCBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMKKy0tIGZvciB0aGlzIG9wZXJhdGlvbiBhZGVxdWF0ZWx5LCBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlCistLSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28KKy0tIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLiBTaW1pbGFybHksIGNvbXBhcmV0b3RhbAorLS0gd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocyB0aGFuIGNvbXBhcmUuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzCitjdG14MDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMAorY3RteDAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKK2N0bXgwMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitjdG14MDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQorY3RteDAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKK2N0bXgwMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitjdG14MDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMAorY3RteDAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKK2N0bXgwMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitjdG14MDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQorY3RteDAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKK2N0bXgwMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitjdG14MDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMAorY3RteDAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKK2N0bXgwMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitjdG14MDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQorY3RteDAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKK2N0bXgwMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitjdG14MDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMAorY3RteDAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKK2N0bXgwMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitjdG14MDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQorY3RteDAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKK2N0bXgwMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitjdG14MDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMAorCitjdG14MDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCitjdG14MDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitjdG14MDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxCitjdG14MDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCitjdG14MDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitjdG14MDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xCitjdG14MDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCitjdG14MDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitjdG14MDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwCitjdG14MDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCitjdG14MDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitjdG14MDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xCitjdG14MDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCitjdG14MDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitjdG14MDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xCitjdG14MDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCitjdG14MDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitjdG14MDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxCitjdG14MDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCitjdG14MDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitjdG14MDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwCitjdG14MDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCitjdG14MDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitjdG14MDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxCitjdG14MDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCisKK2N0bXgwNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorY3RteDA2MiBjb21wYXJldG90bWFnICAtMi4wICAtMS4wICAgLT4gICAxCitjdG14MDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorY3RteDA2NSBjb21wYXJldG90bWFnICAtMi4wICAgMi4wICAgLT4gICAwCitjdG14MDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKK2N0bXgwNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorY3RteDA2OCBjb21wYXJldG90bWFnICAtMS4wICAgMC4wICAgLT4gICAxCitjdG14MDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKK2N0bXgwNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorY3RteDA3MSBjb21wYXJldG90bWFnICAgMC4wICAtMi4wICAgLT4gIC0xCitjdG14MDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKK2N0bXgwNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorY3RteDA3NCBjb21wYXJldG90bWFnICAgMC4wICAgMS4wICAgLT4gIC0xCitjdG14MDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKK2N0bXgwNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorY3RteDA3NyBjb21wYXJldG90bWFnICAgMS4wICAtMS4wICAgLT4gICAwCitjdG14MDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKK2N0bXgwNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorY3RteDA4MCBjb21wYXJldG90bWFnICAgMS4wICAgMi4wICAgLT4gIC0xCitjdG14MDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKK2N0bXgwODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorY3RteDA4MyBjb21wYXJldG90bWFnICAgMi4wICAgMC4wICAgLT4gICAxCitjdG14MDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKK2N0bXgwODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitjdG14MDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDAKK2N0bXgwOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMAorY3RteDA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gICAwCitjdG14MDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitjdG14MTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDAKK2N0bXgxMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQorY3RteDEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMAorY3RteDEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitjdG14MTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTEKK2N0bXgxMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQorY3RteDEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitjdG14MTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDAKK2N0bXgxMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQorCitjdG14MTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQorY3RteDEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxCitjdG14MTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQorY3RteDEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxCitjdG14MTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2N0bXgxMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQorY3RteDEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxCitjdG14MTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitjdG14MTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xCitjdG14MTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2N0bXgxNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQorY3RteDE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xCitjdG14MTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2N0bXgxNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQorY3RteDE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xCitjdG14MTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2N0bXgxNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQorY3RteDE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xCitjdG14MTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorY3RteDIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwCitjdG14MjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTEKK2N0bXgyMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorY3RteDIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDAKK2N0bXgyMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorY3RteDIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xCitjdG14MjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTEKK2N0bXgyMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorY3RteDIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwCitjdG14MjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitjdG14MjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDEKK2N0bXgyMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQorY3RteDIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDEKK2N0bXgyMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQorY3RteDIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitjdG14MjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDEKK2N0bXgyMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQorY3RteDIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitjdG14MjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xCitjdG14MjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2N0bXgyNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQorY3RteDI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xCitjdG14MjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2N0bXgyNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQorY3RteDI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xCitjdG14MjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2N0bXgyNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQorY3RteDI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xCitjdG14MjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorY3RteDMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMAorY3RteDMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQorY3RteDMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQorY3RteDMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMAorY3RteDMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorY3RteDMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQorY3RteDMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQorY3RteDMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorY3RteDMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorY3RteDMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14MzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitjdG14MzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxCitjdG14MzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxCitjdG14MzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14MzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxCitjdG14MzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxCitjdG14MzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitjdG14MzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxCitjdG14MzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxCitjdG14MzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitjdG14MzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXgzNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2N0bXgzNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTEKK2N0bXgzNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2N0bXgzNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTEKK2N0bXgzNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTEKK2N0bXgzNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorY3RteDQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDAKK2N0bXg0MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xCitjdG14NDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwCitjdG14NDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorY3RteDQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTEKK2N0bXg0MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xCitjdG14NDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorY3RteDQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDAKK2N0bXg0MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2N0bXg0MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitjdG14NDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQorY3RteDQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14NDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQorY3RteDQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDEKK2N0bXg0MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitjdG14NDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQorY3RteDQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDEKK2N0bXg0MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitjdG14NDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14NDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2N0bXg0NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xCitjdG14NDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2N0bXg0NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xCitjdG14NDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQorY3RteDQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2N0bXg0NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xCitjdG14NDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorY3RteDQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK3ByZWNpc2lvbjogNDAKK2N0bXg0NzAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3MSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ3NCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ3NyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorY3RteDQ4MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQorY3RteDQ4MyBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5ICAtPiAgIDAKK2N0bXg0ODQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ4NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0ODYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgIC0+ICAgMQorY3RteDQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0ODkgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorY3RteDQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0OTIgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgIC0+ICAgMQorY3RteDQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDEKK2N0bXg0OTUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5ICAtPiAgIDEKK2N0bXg0OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorY3RteDQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5ICAtPiAgIDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorcHJlY2lzaW9uOiA5CitjdG14NTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQorY3RteDUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2N0bXg1MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitjdG14NTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQorY3RteDUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDEKK2N0bXg1MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitjdG14NTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQorY3RteDUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDEKK2N0bXg1MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitjdG14NTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQorY3RteDUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDEKK2N0bXg1MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitjdG14NTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQorY3RteDUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDEKK2N0bXg1MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitjdG14NTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMAorY3RteDUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTEKK2N0bXg1MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitjdG14NTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQorY3RteDUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTEKK2N0bXg1MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitjdG14NTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQorY3RteDUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTEKK2N0bXg1MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitjdG14NTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQorY3RteDUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTEKK2N0bXg1MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitjdG14NTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQorY3RteDUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTEKK2N0bXg1MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitjdG14NTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQorLS0gTFIgc3dhcAorY3RteDU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDEgY29tcGFyZXRvdG1hZyAgICAxRS0xNCAgMSAgICAgICAgLT4gIC0xCitjdG14NTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorY3RteDU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDQgY29tcGFyZXRvdG1hZyAgICAxRS0xMSAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDcgY29tcGFyZXRvdG1hZyAgICAxRS04ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTAgY29tcGFyZXRvdG1hZyAgICAxRS01ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTMgY29tcGFyZXRvdG1hZyAgICAxRS0yICAgMSAgICAgICAgLT4gIC0xCitjdG14NTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDAKK2N0bXg1NTYgY29tcGFyZXRvdG1hZyAgICAxRSsxICAgMSAgICAgICAgLT4gICAxCitjdG14NTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorY3RteDU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NTkgY29tcGFyZXRvdG1hZyAgICAxRSs0ICAgMSAgICAgICAgLT4gICAxCitjdG14NTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjMgY29tcGFyZXRvdG1hZyAgICAxRSs3ICAgMSAgICAgICAgLT4gICAxCitjdG14NTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjYgY29tcGFyZXRvdG1hZyAgICAxRSsxMCAgMSAgICAgICAgLT4gICAxCitjdG14NTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorY3RteDU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjkgY29tcGFyZXRvdG1hZyAgICAxRSsxMyAgMSAgICAgICAgLT4gICAxCitjdG14NTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorY3RteDU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDEKKy0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2N0bXg1ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2N0bXg1ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2N0bXg1ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2N0bXg1ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDEKK2N0bXg1ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDEKK2N0bXg1ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2N0bXg1ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDEKK2N0bXg1ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDEKK2N0bXg1ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2N0bXg1ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTEKK2N0bXg1OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTEKK2N0bXg1OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2N0bXg1OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTEKK2N0bXg1OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTEKK2N0bXg1OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2N0bXg1OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTEKK2N0bXg1OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTEKK2N0bXg1OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2N0bXg1OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTEKK2N0bXg1OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK3ByZWNpc2lvbjogMjAKK2N0bXg2MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjAxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjEwIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgIC0+ICAgMQorY3RteDYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDEKK2N0bXg2MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitjdG14NjEzIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgIC0+ICAgMQorY3RteDYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDEKK2N0bXg2MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitjdG14NjE2IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgIC0+ICAgMQorY3RteDYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDEKK2N0bXg2MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitjdG14NjE5IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgIC0+ICAgMQorY3RteDYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjIyIGNvbXBhcmV0b3RtYWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI1IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI4IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitjdG14NjMxIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgIC0+ICAgMQorY3RteDYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDEKK2N0bXg2MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitjdG14NjM0IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgIC0+ICAgMQorY3RteDYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDEKK2N0bXg2MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitjdG14NjM3IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgIC0+ICAgMQorY3RteDYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDEKK2N0bXg2MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCitwcmVjaXNpb246IDkKKworLS0gZXh0ZW5kZWQgemVyb3MKK2N0bXg2NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwCitjdG14NjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorY3RteDY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDEKK2N0bXg2NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxCitjdG14NjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorY3RteDY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDAKK2N0bXg2NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxCitjdG14NjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorY3RteDY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTEKK2N0bXg2NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xCitjdG14NjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorY3RteDY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDAKK2N0bXg2NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xCitjdG14NjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorY3RteDY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDAKK2N0bXg2NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwCisKK2N0bXg2NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitjdG14NjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQorY3RteDY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDEKK2N0bXg2NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitjdG14NjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQorY3RteDY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDEKK2N0bXg2NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitjdG14NjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQorY3RteDY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDAKK2N0bXg2NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitjdG14NjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMAorY3RteDY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDEKK2N0bXg2NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitjdG14NjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMAorY3RteDY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTEKK2N0bXg2NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitjdG14NjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMAorY3RteDY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDEKK2N0bXg2NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitjdG14Njc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQorY3RteDY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTEKK2N0bXg2NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitjdG14Njc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQorY3RteDY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorcHJlY2lzaW9uOiAyMAorY3RteDY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2N0bXg2ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxCitjdG14NjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQorY3RteDY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2N0bXg2ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxCitjdG14Njg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQorY3RteDY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2N0bXg2ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxCitjdG14Njg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQorY3RteDY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2N0bXg2OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwCitjdG14NjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xCitjdG14Njk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xCitjdG14Njk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQorY3RteDY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2N0bXg3MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitjdG14NzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQorY3RteDcwMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgICAxICAtPiAgIDEKK2N0bXg3MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitjdG14NzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQorY3RteDcwNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgICAtPiAgLTEKK2N0bXg3MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitjdG14NzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQorY3RteDcwOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxICAxICAtPiAgIDEKK2N0bXg3MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitjdG14NzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQorY3RteDcxMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAgLTEKK2N0bXg3MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitjdG14NzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQorY3RteDcxNSBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkwMSAxICAtPiAgIDEKK2N0bXg3MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitjdG14NzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQorY3RteDcxOCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAgLTEKKworcHJlY2lzaW9uOiAxNQorLS0gc2FtZSB3aXRoIHBsZW50eSBvZiBwcmVjaXNpb24KK2N0bXg3MjEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAxICAtPiAgIDEKK2N0bXg3MjIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAgLTEKK2N0bXg3MjMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAxICAtPiAgIDEKK2N0bXg3MjQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAgLTEKK2N0bXg3MjUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAxICAtPiAgIDEKK2N0bXg3MjYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAgLTEKK2N0bXg3MjcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAxICAtPiAgIDEKK2N0bXg3MjggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAgLTEKK2N0bXg3MjkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAxICAtPiAgIDEKK2N0bXg3MzAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAgLTEKK2N0bXg3MzEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAxICAtPiAgIDEKK2N0bXg3MzIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAgLTEKKworLS0gcmVzaWR1ZSBjYXNlcworcHJlY2lzaW9uOiA1CitjdG14NzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQorY3RteDc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2N0bXg3NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxCitjdG14NzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQorY3RteDc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2N0bXg3NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xCitjdG14NzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQorY3RteDc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2N0bXg3NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xCitjdG14NzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQorY3RteDc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2N0bXg3NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxCitjdG14NzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQorY3RteDc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcworY3RteDc2MCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwICAtPiAgIDEKK2N0bXg3NjEgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gICAwCitjdG14NzYyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMQorY3RteDc2MyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTEKKy0tIHByZWNpc2lvbnMgYWJvdmUgb3IgYmVsb3cgdGhlIGRpZmZlcmVuY2Ugc2hvdWxkIGhhdmUgbm8gZWZmZWN0CitwcmVjaXNpb246ICAgMTEKK2N0bXg3NjQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgMTAKK2N0bXg3NjUgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDkKK2N0bXg3NjYgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDgKK2N0bXg3NjcgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDcKK2N0bXg3NjggY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDYKK2N0bXg3NjkgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDUKK2N0bXg3NzAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDQKK2N0bXg3NzEgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDMKK2N0bXg3NzIgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDIKK2N0bXg3NzMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCitwcmVjaXNpb246ICAgIDEKK2N0bXg3NzQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246ICAgOQorY3RteDc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAorY3RteDc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorY3RteDc4MiBjb21wYXJldG90bWFnICBJbmYgIC0xICAgICAtPiAgMQorY3RteDc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQorY3RteDc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorY3RteDc4NSBjb21wYXJldG90bWFnICBJbmYgICAxICAgICAtPiAgMQorY3RteDc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQorY3RteDc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorY3RteDc4OCBjb21wYXJldG90bWFnIC0xMDAwICBJbmYgICAtPiAtMQorY3RteDc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorY3RteDc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorY3RteDc5MSBjb21wYXJldG90bWFnIC0wICAgICBJbmYgICAtPiAtMQorY3RteDc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQorY3RteDc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorY3RteDc5NCBjb21wYXJldG90bWFnICAxMDAwICBJbmYgICAtPiAtMQorY3RteDc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorCitjdG14ODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitjdG14ODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxCitjdG14ODAyIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEgICAgIC0+ICAxCitjdG14ODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitjdG14ODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxCitjdG14ODA1IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEgICAgIC0+ICAxCitjdG14ODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitjdG14ODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitjdG14ODA4IGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitjdG14ODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitjdG14ODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xCitjdG14ODExIGNvbXBhcmV0b3RtYWcgLTAgICAgLUluZiAgIC0+IC0xCitjdG14ODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitjdG14ODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xCitjdG14ODE0IGNvbXBhcmV0b3RtYWcgIDEwMDAgLUluZiAgIC0+IC0xCitjdG14ODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2N0bXg4MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDEKK2N0bXg4MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDEKK2N0bXg4MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2N0bXg4MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDEKK2N0bXg4MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDEKK2N0bXg4MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2N0bXg4MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDEKK2N0bXg4MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDEKK2N0bXg4MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2N0bXg4MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xCitjdG14ODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQorY3RteDgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xCitjdG14ODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQorY3RteDgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xCitjdG14ODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQorY3RteDgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorY3RteDgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMAorY3RteDg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMAorCitjdG14ODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitjdG14ODQyIGNvbXBhcmV0b3RtYWcgIHNOYU4gLU5hTiAgIC0+ICAtMQorY3RteDg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQorY3RteDg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorY3RteDg0NSBjb21wYXJldG90bWFnICBzTmFOIC0xICAgICAtPiAgMQorY3RteDg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQorY3RteDg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorY3RteDg0OCBjb21wYXJldG90bWFnICBzTmFOICAxICAgICAtPiAgMQorY3RteDg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQorY3RteDg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2N0bXg4NTEgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworY3RteDg1MiBjb21wYXJldG90bWFnIC1zTmFOIHNOYU4gICAtPiAgMAorY3RteDg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorY3RteDg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTUgY29tcGFyZXRvdG1hZyAtMTAwMCBzTmFOICAgLT4gIC0xCitjdG14ODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorY3RteDg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTggY29tcGFyZXRvdG1hZyAgMCAgICBzTmFOICAgLT4gIC0xCitjdG14ODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorY3RteDg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTEKK2N0bXg4NjEgY29tcGFyZXRvdG1hZyAgSW5mICBzTmFOICAgLT4gIC0xCitjdG14ODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitjdG14ODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2N0bXg4NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwCitjdG14ODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2N0bXg4NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxCitjdG14ODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQorY3RteDg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2N0bXg4NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxCitjdG14ODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQorY3RteDg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2N0bXg4NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxCitjdG14ODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTEKK2N0bXg4ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2N0bXg4ODIgY29tcGFyZXRvdG1hZyAtc05hTiAtc05hTiAgIC0+ICAwCitjdG14ODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQorY3RteDg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitjdG14ODg1IGNvbXBhcmV0b3RtYWcgLTEwMDAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQorY3RteDg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitjdG14ODg4IGNvbXBhcmV0b3RtYWcgIDAgICAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQorY3RteDg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitjdG14ODkxIGNvbXBhcmV0b3RtYWcgIEluZiAgLXNOYU4gICAtPiAgLTEKK2N0bXg4OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxCitjdG14ODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorY3RteDk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQorY3RteDk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQorY3RteDk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorY3RteDk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQorY3RteDk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTEKK2N0bXg5NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitjdG14OTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQorCitjdG14OTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQorY3RteDk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2N0bXg5NzIgY29tcGFyZXRvdG1hZyAtTmFONDEgK05hTjQyIC0+IC0xCitjdG14OTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQorY3RteDk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2N0bXg5NzUgY29tcGFyZXRvdG1hZyArTmFONDIgLU5hTjAxIC0+ICAxCitjdG14OTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQorY3RteDk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworY3RteDk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xCitjdG14OTgxIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgLXNOYU43NzIgLT4gLTEKK2N0bXg5ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorY3RteDk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitjdG14OTg0IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgLXNOYU43NzEgLT4gIDEKK2N0bXg5ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorY3RteDk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxCitjdG14OTg3IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworY3RteDk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorY3RteDk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQorY3RteDk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQorY3RteDk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorY3RteDk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQorY3RteDk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQorY3RteDk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorY3RteDk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQorY3RteDk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIG5vdyBhbGxvd2VkCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY3RteDEwODAgY29tcGFyZXRvdG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgIC0+ICAtMQorY3RteDEwODEgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQorY3RteDEwODIgY29tcGFyZXRvdG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDEwODMgY29tcGFyZXRvdG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgIC0+ICAtMQorY3RteDEwODUgY29tcGFyZXRvdG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgIC0+ICAtMQorY3RteDEwODYgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQorY3RteDEwODcgY29tcGFyZXRvdG1hZyAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDEwODggY29tcGFyZXRvdG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgIC0+ICAtMQorCitjdG14MTA4OSBjb21wYXJldG90bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAgLT4gIC0xCitjdG14MTA5MCBjb21wYXJldG90bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAgLT4gIC0xCitjdG14MTA5MSBjb21wYXJldG90bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAgLT4gIC0xCitjdG14MTA5MiBjb21wYXJldG90bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAgLT4gIC0xCitjdG14MTA5MyBjb21wYXJldG90bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAgLT4gIC0xCitjdG14MTA5NCBjb21wYXJldG90bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAgLT4gICAxCitjdG14MTA5NSBjb21wYXJldG90bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAgLT4gICAxCitjdG14MTA5NiBjb21wYXJldG90bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAgLT4gICAxCitjdG14MTA5NyBjb21wYXJldG90bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAgLT4gICAxCitjdG14MTA5OCBjb21wYXJldG90bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAgLT4gICAxCitjdG14MTA5OSBjb21wYXJldG90bWFnIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAgLT4gICAxCitjdG14MTEwMCBjb21wYXJldG90bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAgLT4gIC0xCistLSBzaWducworY3RteDExMDEgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDIgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDMgY29tcGFyZXRvdG1hZyAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDQgY29tcGFyZXRvdG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQorY3RteDExMDUgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDYgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDcgY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQorY3RteDExMDggY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQorCistLSBzcHJlYWQgemVyb3MKK2N0bXgxMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQorY3RteDExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMCAgICAgICAgLT4gIC0xCitjdG14MTExMiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwICAgICAgICAtPiAgLTEKK2N0bXgxMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQorY3RteDExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTExNSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wRSszODQgICAtPiAgLTEKK2N0bXgxMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorY3RteDExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCitjdG14MTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSszODQgICAtPiAgLTEKK2N0bXgxMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQorY3RteDExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSszODQgICAtPiAgLTEKKworY3RteDExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMCAgICAgICAgLT4gICAxCitjdG14MTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDEKK2N0bXgxMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQorY3RteDExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMCAgICAgICAgLT4gICAxCitjdG14MTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQorY3RteDExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitjdG14MTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKK2N0bXgxMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQorY3RteDExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtMzgzICAgLT4gICAxCitjdG14MTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQorCistLSBOdWxsIHRlc3RzCitjdG14OTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorY3RteDk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0CmluZGV4IGI0N2U0OTkuLmQ5ZjI5OWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdApAQCAtMSw4NiArMSw4NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29weS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWNweXgwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1jcHl4MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQotY3B5eDAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1jcHl4MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTg0KLWNweXgwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTg0KLWNweXgwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTg0KLWNweXgwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotY3B5eDAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMA0KLWNweXgwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwDQotY3B5eDAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTANCi1jcHl4MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTANCi1jcHl4MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcNCi1jcHl4MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43DQotY3B5eDAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQotY3B5eDAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1jcHl4MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcNCi1jcHl4MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03DQotY3B5eDEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQ0KLWNweXgxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1DQotY3B5eDEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwDQotY3B5eDEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MA0KLWNweXgxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDANCi1jcHl4MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotY3B5eDExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwDQotY3B5eDExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMA0KLWNweXgxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNA0KLWNweXgxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQNCi1jcHl4MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWNweXgxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMA0KLWNweXgxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotY3B5eDExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1jcHl4MTIxIGNvcHkgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KLWNweXgxMjIgY29weSAgLTI2ODI2ODI2OCAgICAgICAgLT4gLTI2ODI2ODI2OA0KLWNweXgxMjMgY29weSAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0DQotY3B5eDEyNCBjb3B5ICAtMTM0MTM0MTM0ICAgICAgICAtPiAtMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1jcHl4MTMxIGNvcHkgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLWNweXgxMzIgY29weSAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5DQotY3B5eDEzMyBjb3B5ICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkNCi1jcHl4MTM0IGNvcHkgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCi0NCi1jcHl4MTM1IGNvcHkgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3DQotY3B5eDEzNiBjb3B5ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMEUtOTk5DQotY3B5eDEzNyBjb3B5ICAtMUUtOTk5ICAgICAgICAgICAtPiAtMUUtOTk5DQotY3B5eDEzOCBjb3B5ICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtOS45OTk5OTk5OUUrOTk5DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5LmRlY1Rlc3QgLS0gcXVpZXQgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworY3B5eDAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2NweXgwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2NweXgwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorY3B5eDAyMSBjb3B5ICAgICAgICAgTmFOICAtPiBOYU4KK2NweXgwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTgorY3B5eDAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFOCitjcHl4MDI0IGNvcHkgICAgICAgLXNOYU4gIC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2NweXgwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2NweXgwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwCitjcHl4MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMAorY3B5eDAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwCitjcHl4MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcKK2NweXgwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcKK2NweXgwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorY3B5eDAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQorCistLSBmaW5pdGVzCitjcHl4MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcKK2NweXgxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcKK2NweXgxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUKK2NweXgxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1CitjcHl4MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTAKK2NweXgxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTAKK2NweXgxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDAKK2NweXgxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitjcHl4MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDAKK2NweXgxMTIgY29weSAgICAgICAgIC0wICAgLT4gLTAKK2NweXgxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNAorY3B5eDExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNAorY3B5eDExNSBjb3B5ICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2NweXgxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMAorY3B5eDExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2NweXgxMTggY29weSAgICAgLTBFLTE0MSAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3B5eDEyMSBjb3B5ICAgMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NweXgxMjIgY29weSAgLTI2ODI2ODI2OCAgICAgICAgLT4gLTI2ODI2ODI2OAorY3B5eDEyMyBjb3B5ICAgMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQKK2NweXgxMjQgY29weSAgLTEzNDEzNDEzNCAgICAgICAgLT4gLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3B5eDEzMSBjb3B5ICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkKK2NweXgxMzIgY29weSAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5CitjcHl4MTMzIGNvcHkgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDBFLTk5OQorY3B5eDEzNCBjb3B5ICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CisKK2NweXgxMzUgY29weSAgLTFFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcKK2NweXgxMzYgY29weSAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTEuMDAwMDAwMDBFLTk5OQorY3B5eDEzNyBjb3B5ICAtMUUtOTk5ICAgICAgICAgICAtPiAtMUUtOTk5CitjcHl4MTM4IGNvcHkgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC05Ljk5OTk5OTk5RSs5OTkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weWFicy5kZWNUZXN0CmluZGV4IGY3ZDBmODYuLjUyMDAyZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdApAQCAtMSw4NiArMSw4NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgYW5kIHNldCBzaWduIHRvIHplcm8gICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWNwYXgwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1jcGF4MDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQotY3BheDAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWNwYXgwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFODQotY3BheDAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4NCi1jcGF4MDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4NCi1jcGF4MDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotY3BheDAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMA0KLWNwYXgwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUNCi1jcGF4MDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQ0KLWNwYXgwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwDQotY3BheDAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43DQotY3BheDAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43DQotY3BheDAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQotY3BheDAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWNwYXgxMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNw0KLWNwYXgxMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNw0KLWNwYXgxMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUNCi1jcGF4MTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1DQotY3BheDEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwDQotY3BheDEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwDQotY3BheDEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWNwYXgxMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWNwYXgxMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMA0KLWNwYXgxMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMA0KLWNwYXgxMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KLWNwYXgxMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KLWNwYXgxMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotY3BheDExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1jcGF4MTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWNwYXgxMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1jcGF4MTIxIGNvcHlhYnMgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KLWNwYXgxMjIgY29weWFicyAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4DQotY3BheDEyMyBjb3B5YWJzICAgMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQNCi1jcGF4MTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotY3BheDEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1jcGF4MTMyIGNvcHlhYnMgIDFFLTk5OSAgICAgICAgICAgIC0+IDFFLTk5OQ0KLWNwYXgxMzMgY29weWFicyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMEUtOTk5DQotY3BheDEzNCBjb3B5YWJzICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3DQotDQotY3BheDEzNSBjb3B5YWJzICAtMUUtMTAwNyAgICAgICAgICAtPiAxRS0xMDA3DQotY3BheDEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkNCi1jcGF4MTM3IGNvcHlhYnMgIC0xRS05OTkgICAgICAgICAgIC0+IDFFLTk5OQ0KLWNwYXgxOTkgY29weWFicyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gOS45OTk5OTk5OUUrOTk5DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworY3BheDAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2NwYXgwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2NwYXgwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcGF4MDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTgorY3BheDAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KK2NwYXgwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTgorY3BheDAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2NwYXgwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2NwYXgwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUKK2NwYXgwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1CitjcGF4MDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAorY3BheDAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43CitjcGF4MDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcKK2NwYXgwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorY3BheDAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2NwYXgxMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNworY3BheDEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3CitjcGF4MTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1CitjcGF4MTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1CitjcGF4MTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKK2NwYXgxMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMAorY3BheDEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMAorY3BheDEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworY3BheDExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwCitjcGF4MTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDAKK2NwYXgxMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorY3BheDExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitjcGF4MTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorY3BheDExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2NwYXgxMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitjcGF4MTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BheDEyMSBjb3B5YWJzICAgMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NwYXgxMjIgY29weWFicyAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4CitjcGF4MTIzIGNvcHlhYnMgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorY3BheDEyNCBjb3B5YWJzICAtMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2NwYXgxMzEgY29weWFicyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5CitjcGF4MTMyIGNvcHlhYnMgIDFFLTk5OSAgICAgICAgICAgIC0+IDFFLTk5OQorY3BheDEzMyBjb3B5YWJzICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkKK2NwYXgxMzQgY29weWFicyAgMUUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNworCitjcGF4MTM1IGNvcHlhYnMgIC0xRS0xMDA3ICAgICAgICAgIC0+IDFFLTEwMDcKK2NwYXgxMzYgY29weWFicyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcGF4MTM3IGNvcHlhYnMgIC0xRS05OTkgICAgICAgICAgIC0+IDFFLTk5OQorY3BheDE5OSBjb3B5YWJzICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weW5lZ2F0ZS5kZWNUZXN0CmluZGV4IDM4MjM1YjYuLjdmOGRlOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdApAQCAtMSw4NiArMSw4NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWNwbngwMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotY3BueDAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkNCi1jcG54MDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotY3BueDAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFODQotY3BueDAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4NCi1jcG54MDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFODQotY3BueDAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWNwbngwMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzDQotY3BueDAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMw0KLWNwbngwMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMw0KLWNwbngwMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzDQotY3BueDAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzANCi1jcG54MDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwDQotY3BueDAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQ0KLWNwbngwMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1jcG54MTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03DQotY3BueDEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3DQotY3BueDEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUNCi1jcG54MTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1DQotY3BueDEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MA0KLWNwbngxMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MA0KLWNwbngxMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQotY3BueDEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotY3BueDExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMA0KLWNwbngxMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMA0KLWNwbngxMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQNCi1jcG54MTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQNCi1jcG54MTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDANCi1jcG54MTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWNwbngxMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQ0KLWNwbngxMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1jcG54MTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2OCAgICAgICAgIC0+IC0yNjgyNjgyNjgNCi1jcG54MTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KLWNwbngxMjMgY29weW5lZ2F0ZSAgMTM0MTM0MTM0ICAgICAgICAgLT4gLTEzNDEzNDEzNA0KLWNwbngxMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0DQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1jcG54MTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1jcG54MTMyIGNvcHluZWdhdGUgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS05OTkNCi1jcG54MTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC0xLjAwMDAwMDAwRS05OTkNCi1jcG54MTM0IGNvcHluZWdhdGUgIDFFLTEwMDcgICAgICAgICAgICAgICAgICAgIC0+IC0xRS0xMDA3DQotDQotY3BueDEzNSBjb3B5bmVnYXRlICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgICAtPiAxRS0xMDA3DQotY3BueDEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkNCi1jcG54MTM3IGNvcHluZWdhdGUgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IDFFLTk5OQ0KLWNwbngxMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gOS45OTk5OTk5OUUrOTk5DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworY3BueDAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MAorCistLSBJbmZpbml0aWVzCitjcG54MDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorY3BueDAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2NwbngwMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTgorY3BueDAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KK2NwbngwMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4KK2NwbngwMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitjcG54MDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMworY3BueDAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMworY3BueDAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzCitjcG54MDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMworY3BueDAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzAKK2NwbngwMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzAKK2NwbngwMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKK2NwbngwMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitjcG54MTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03CitjcG54MTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKK2NwbngxMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1CitjcG54MTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1CitjcG54MTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCitjcG54MTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTAKK2NwbngxMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitjcG54MTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitjcG54MTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wCitjcG54MTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDAKK2NwbngxMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKK2NwbngxMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNAorY3BueDExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwCitjcG54MTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorY3BueDExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxCitjcG54MTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BueDEyMSBjb3B5bmVnYXRlICAyNjgyNjgyNjggICAgICAgICAtPiAtMjY4MjY4MjY4CitjcG54MTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3BueDEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQgICAgICAgICAtPiAtMTM0MTM0MTM0CitjcG54MTI0IGNvcHluZWdhdGUgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BueDEzMSBjb3B5bmVnYXRlICA5Ljk5OTk5OTk5RSs5OTkgICAtPiAtOS45OTk5OTk5OUUrOTk5CitjcG54MTMyIGNvcHluZWdhdGUgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS05OTkKK2NwbngxMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTEuMDAwMDAwMDBFLTk5OQorY3BueDEzNCBjb3B5bmVnYXRlICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgICAtPiAtMUUtMTAwNworCitjcG54MTM1IGNvcHluZWdhdGUgIC0xRS0xMDA3ICAgICAgICAgICAgICAgICAgIC0+IDFFLTEwMDcKK2NwbngxMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcG54MTM3IGNvcHluZWdhdGUgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IDFFLTk5OQorY3BueDEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5c2lnbi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QKaW5kZXggODA2MWE0Mi4uYWZkZDY3MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QKQEAgLTEsMTc3ICsxLDE3NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gY29weXNpZ24uZGVjVGVzdCAtLSBxdWlldCBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjaywgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1jcHN4MDAxIGNvcHlzaWduICAgKzcuNTAgICAgICAgMTEgIC0+IDcuNTANCi1jcHN4MDAyIGNvcHlzaWduICAgJzEuNTAnICAgJzcuMzMnIC0+IDEuNTANCi1jcHN4MDAzIGNvcHlzaWduICAnLTEuNTAnICAgJzcuMzMnIC0+IDEuNTANCi1jcHN4MDA0IGNvcHlzaWduICAgJzEuNTAnICAnLTcuMzMnIC0+IC0xLjUwDQotY3BzeDAwNSBjb3B5c2lnbiAgJy0xLjUwJyAgJy03LjMzJyAtPiAtMS41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1jcHN4MDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQ0KLWNwc3gwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotY3BzeDAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFODQotY3BzeDAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFODQotY3BzeDAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTg0KLWNwc3gwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotY3BzeDAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTANCi1jcHN4MDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWNwc3gwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KLWNwc3gwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KLWNwc3gwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcNCi1jcHN4MDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43DQotY3BzeDAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KLWNwc3gwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotY3BzeDEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNw0KLWNwc3gxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcNCi1jcHN4MTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQ0KLWNwc3gxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1DQotY3BzeDEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MA0KLWNwc3gxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTANCi1jcHN4MTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMA0KLWNwc3gxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1jcHN4MTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwDQotY3BzeDExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMA0KLWNwc3gxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQNCi1jcHN4MTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0DQotY3BzeDExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQotY3BzeDExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQotY3BzeDExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQotY3BzeDExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1jcHN4MTIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgNCi1jcHN4MTIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgNCi1jcHN4MTIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQNCi1jcHN4MTI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWNwc3gxMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLWNwc3gxMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgIDExIC0+IDFFLTk5OQ0KLWNwc3gxMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgIDExIC0+IDEuMDAwMDAwMDBFLTk5OQ0KLWNwc3gxMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcNCi0NCi1jcHN4MTM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgICAxMSAtPiAxRS0xMDA3DQotY3BzeDEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5DQotY3BzeDEzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5DQotY3BzeDEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5DQotDQotLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTDQotDQotLS0gSW5maW5pdGllcw0KLWNwc3gyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkNCi1jcHN4MjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotY3BzeDIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4NCi1jcHN4MjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTg0KLWNwc3gyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTg0KLWNwc3gyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1jcHN4MjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQotY3BzeDIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KLWNwc3gyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwDQotY3BzeDIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1jcHN4MjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcNCi1jcHN4MjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcNCi1jcHN4MjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi1jcHN4MjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotY3BzeDMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03DQotY3BzeDMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03DQotY3BzeDMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQ0KLWNwc3gzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUNCi1jcHN4MzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1jcHN4MzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1jcHN4MzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQotY3BzeDMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotY3BzeDMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wDQotY3BzeDMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wDQotY3BzeDMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotY3BzeDMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotY3BzeDMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDANCi1jcHN4MzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWNwc3gzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQotY3BzeDMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWNwc3gzMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgNCi1jcHN4MzIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4DQotY3BzeDMyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNCAgICAgICAgICAtMTggLT4gLTEzNDEzNDEzNA0KLWNwc3gzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWNwc3gzMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1jcHN4MzMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5DQotY3BzeDMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLWNwc3gzMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3DQotDQotY3BzeDMzNSBjb3B5c2lnbiAgLTFFLTEwMDcgICAgICAgICAgICAtMTggLT4gLTFFLTEwMDcNCi1jcHN4MzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5DQotY3BzeDMzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAtMTggLT4gLTFFLTk5OQ0KLWNwc3gzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkNCi0NCi0tLSBPdGhlciBraW5kcyBvZiBSSFMNCi1jcHN4NDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQ0KLWNwc3g0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwDQotY3BzeDQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDENCi1jcHN4NDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMA0KLWNwc3g0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxDQotY3BzeDQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjANCi1jcHN4NDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQ0KLWNwc3g0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwDQotDQotY3BzeDQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQ0KLWNwc3g0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjANCi1jcHN4NDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxDQotY3BzeDQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMA0KLQ0KLWNwc3g0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDENCi1jcHN4NDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwDQotY3BzeDQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQ0KLWNwc3g0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjANCi1jcHN4NDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwDQotDQotY3BzeDQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDENCi1jcHN4NDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMA0KLWNwc3g0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxDQotY3BzeDQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjANCi1jcHN4NDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29weXNpZ24uZGVjVGVzdCAtLSBxdWlldCBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2ssIGFuZCBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitjcHN4MDAxIGNvcHlzaWduICAgKzcuNTAgICAgICAgMTEgIC0+IDcuNTAKK2Nwc3gwMDIgY29weXNpZ24gICAnMS41MCcgICAnNy4zMycgLT4gMS41MAorY3BzeDAwMyBjb3B5c2lnbiAgJy0xLjUwJyAgICc3LjMzJyAtPiAxLjUwCitjcHN4MDA0IGNvcHlzaWduICAgJzEuNTAnICAnLTcuMzMnIC0+IC0xLjUwCitjcHN4MDA1IGNvcHlzaWduICAnLTEuNTAnICAnLTcuMzMnIC0+IC0xLjUwCisKKy0tIEluZmluaXRpZXMKK2Nwc3gwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5CitjcHN4MDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2Nwc3gwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTgorY3BzeDAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFOCitjcHN4MDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCitjcHN4MDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2Nwc3gwMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIDExIC0+IE5hTjEwCitjcHN4MDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAorY3BzeDAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwCitjcHN4MDM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2Nwc3gwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKK2Nwc3gwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcKK2Nwc3gwMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKK2Nwc3gwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworY3BzeDEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNworY3BzeDEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNworY3BzeDEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKK2Nwc3gxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1CitjcHN4MTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwCitjcHN4MTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCitjcHN4MTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMAorY3BzeDEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDAKKworLS0gemVyb3MKK2Nwc3gxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKK2Nwc3gxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDAKK2Nwc3gxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQKK2Nwc3gxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKK2Nwc3gxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAorY3BzeDExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitjcHN4MTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKK2Nwc3gxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BzeDEyMSBjb3B5c2lnbiAgIDI2ODI2ODI2OCAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4CitjcHN4MTIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgKK2Nwc3gxMjMgY29weXNpZ24gICAxMzQxMzQxMzQgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNAorY3BzeDEyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNCAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcHN4MTMxIGNvcHlzaWduICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxMSAtPiA5Ljk5OTk5OTk5RSs5OTkKK2Nwc3gxMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgIDExIC0+IDFFLTk5OQorY3BzeDEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5CitjcHN4MTM0IGNvcHlzaWduICAxRS0xMDA3ICAgICAgICAgICAgICAxMSAtPiAxRS0xMDA3CisKK2Nwc3gxMzUgY29weXNpZ24gIC0xRS0xMDA3ICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcKK2Nwc3gxMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwRS05OTkgICAgIDExIC0+IDEuMDAwMDAwMDBFLTk5OQorY3BzeDEzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5CitjcHN4MTM4IGNvcHlzaWduICAtOS45OTk5OTk5OUUrOTk5ICAgICAxMSAtPiA5Ljk5OTk5OTk5RSs5OTkKKworLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTCisKKy0tIEluZmluaXRpZXMKK2Nwc3gyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkKK2Nwc3gyMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIC0zNCAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcHN4MjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTgorY3BzeDIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4KK2Nwc3gyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTgorY3BzeDIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2Nwc3gyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2Nwc3gyMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2Nwc3gyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitjcHN4MjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorY3BzeDIzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgLTM0IC0+IC1OYU43CitjcHN4MjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2Nwc3gyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQorY3BzeDIzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2Nwc3gzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNworY3BzeDMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03CitjcHN4MzAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAtMzQgLT4gLTc1CitjcHN4MzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1CitjcHN4MzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTAKK2Nwc3gzMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIC0zNCAtPiAtNy41MAorY3BzeDMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMAorY3BzeDMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMAorCistLSB6ZXJvcworY3BzeDMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wCitjcHN4MzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTAKK2Nwc3gzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNAorY3BzeDMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0CitjcHN4MzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorY3BzeDMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2Nwc3gzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCitjcHN4MzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BzeDMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2OCAgICAgICAgICAtMTggLT4gLTI2ODI2ODI2OAorY3BzeDMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2OCAgICAgICAgICAtMTggLT4gLTI2ODI2ODI2OAorY3BzeDMyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNCAgICAgICAgICAtMTggLT4gLTEzNDEzNDEzNAorY3BzeDMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNCAgICAgICAgICAtMTggLT4gLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorY3BzeDMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gLTkuOTk5OTk5OTlFKzk5OQorY3BzeDMzMiBjb3B5c2lnbiAgMUUtOTk5ICAgICAgICAgICAgICAtMTggLT4gLTFFLTk5OQorY3BzeDMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gLTEuMDAwMDAwMDBFLTk5OQorY3BzeDMzNCBjb3B5c2lnbiAgMUUtMTAwNyAgICAgICAgICAgICAtMTggLT4gLTFFLTEwMDcKKworY3BzeDMzNSBjb3B5c2lnbiAgLTFFLTEwMDcgICAgICAgICAgICAtMTggLT4gLTFFLTEwMDcKK2Nwc3gzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwRS05OTkgICAgLTE4IC0+IC0xLjAwMDAwMDAwRS05OTkKK2Nwc3gzMzcgY29weXNpZ24gIC0xRS05OTkgICAgICAgICAgICAgLTE4IC0+IC0xRS05OTkKK2Nwc3gzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkKKworLS0gT3RoZXIga2luZHMgb2YgUkhTCitjcHN4NDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQorY3BzeDQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjAKK2Nwc3g0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCitjcHN4NDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMAorY3BzeDQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDEKK2Nwc3g0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCitjcHN4NDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQorY3BzeDQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjAKKworY3BzeDQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQorY3BzeDQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMAorY3BzeDQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQorY3BzeDQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAorCitjcHN4NDIwIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtTmFOICAtPiAtNzAxCitjcHN4NDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwCitjcHN4NDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCitjcHN4NDIzIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOICAtPiAgNzIwCitjcHN4NDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwCisKK2Nwc3g0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCitjcHN4NDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMAorY3BzeDQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDEKK2Nwc3g0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCitjcHN4NDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMAorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBYnMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0CmluZGV4IGM2ZjVhN2MuLmI5OGQ2NGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0CkBAIC0xLDEyNiArMSwxMjYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQWJzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkYWJzMDAxIGFicyAnMScgICAgICAtPiAnMScNCi1kZGFiczAwMiBhYnMgJy0xJyAgICAgLT4gJzEnDQotZGRhYnMwMDMgYWJzICcxLjAwJyAgIC0+ICcxLjAwJw0KLWRkYWJzMDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcNCi1kZGFiczAwNSBhYnMgJzAnICAgICAgLT4gJzAnDQotZGRhYnMwMDYgYWJzICcwLjAwJyAgIC0+ICcwLjAwJw0KLWRkYWJzMDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJw0KLWRkYWJzMDA4IGFicyAnMDAuMDAnICAtPiAnMC4wMCcNCi1kZGFiczAwOSBhYnMgJzAwJyAgICAgLT4gJzAnDQotDQotZGRhYnMwMTAgYWJzICctMicgICAgIC0+ICcyJw0KLWRkYWJzMDExIGFicyAnMicgICAgICAtPiAnMicNCi1kZGFiczAxMiBhYnMgJy0yLjAwJyAgLT4gJzIuMDAnDQotZGRhYnMwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJw0KLWRkYWJzMDE0IGFicyAnLTAnICAgICAtPiAnMCcNCi1kZGFiczAxNSBhYnMgJy0wLjAwJyAgLT4gJzAuMDAnDQotZGRhYnMwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnDQotZGRhYnMwMTcgYWJzICctMDAuMDAnIC0+ICcwLjAwJw0KLWRkYWJzMDE4IGFicyAnLTAwJyAgICAtPiAnMCcNCi0NCi1kZGFiczAyMCBhYnMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcNCi1kZGFiczAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcNCi0NCi1kZGFiczAzMCBhYnMgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScNCi1kZGFiczAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScNCi1kZGFiczAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQotZGRhYnMwMzMgYWJzICctMC4wMScgICAgICAgICAgIC0+ICcwLjAxJw0KLWRkYWJzMDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnDQotZGRhYnMwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCi1kZGFiczAzNiBhYnMgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJw0KLWRkYWJzMDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQotZGRhYnMwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicNCi1kZGFiczAzOSBhYnMgJy0wLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1kZGFiczA0MCBhYnMgJzIuMScgICAgIC0+ICAnMi4xJw0KLWRkYWJzMDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnDQotZGRhYnMwNDIgYWJzICcxMDEuNScgICAtPiAgJzEwMS41Jw0KLWRkYWJzMDQzIGFicyAnLTEwMS41JyAgLT4gICcxMDEuNScNCi0NCi0tLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMA0KLWRkYWJzMDYwIGFicyAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnDQotZGRhYnMwNjEgYWJzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnDQotZGRhYnMwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycNCi1kZGFiczA2MyBhYnMgJy01NjI2N0UtMScgICAtPiAnNTYyNi43Jw0KLWRkYWJzMDY1IGFicyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cNCi0NCi0tLSBsb25nIG9wZXJhbmQgdGVzdHMNCi1kZGFiczMyMSBhYnMgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYWJzMzIyIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCi1kZGFiczMyMyBhYnMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDANCi1kZGFiczMyNCBhYnMgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1kZGFiczMyNSBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCi1kZGFiczMyNiBhYnMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotZGRhYnMzMjcgYWJzIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2DQotDQotLS0gemVyb3MNCi1kZGFiczExMSBhYnMgICAgICAgICAgMCAgIC0+IDANCi1kZGFiczExMiBhYnMgICAgICAgICAtMCAgIC0+IDANCi1kZGFiczExMyBhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYNCi1kZGFiczExNCBhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYNCi1kZGFiczExNSBhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkYWJzMTE2IGFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZGRhYnMxMTcgYWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kZGFiczExOCBhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRhYnMxMjEgYWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkYWJzMTIyIGFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZGFiczEyMyBhYnMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQotZGRhYnMxMjQgYWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRhYnMxMzEgYWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkYWJzMTMyIGFicyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KLWRkYWJzMTMzIGFicyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGFiczEzNCBhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsDQotDQotZGRhYnMxMzUgYWJzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KLWRkYWJzMTM2IGFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGFiczEzNyBhYnMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZGFiczEzOCBhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotDQotLS0gc3BlY2lhbHMNCi1kZGFiczUyMCBhYnMgJ0luZicgICAgLT4gJ0luZmluaXR5Jw0KLWRkYWJzNTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknDQotZGRhYnM1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4NCi1kZGFiczUyMyBhYnMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhYnM1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMg0KLWRkYWJzNTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFiczUyNiBhYnMgIC1OYU4yMiAgLT4gLU5hTjIyDQotZGRhYnM1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGFiczkwMCBhYnMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEFicy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZGFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnCitkZGFiczAwMiBhYnMgJy0xJyAgICAgLT4gJzEnCitkZGFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnCitkZGFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnCitkZGFiczAwNSBhYnMgJzAnICAgICAgLT4gJzAnCitkZGFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnCitkZGFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcKK2RkYWJzMDA4IGFicyAnMDAuMDAnICAtPiAnMC4wMCcKK2RkYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcKKworZGRhYnMwMTAgYWJzICctMicgICAgIC0+ICcyJworZGRhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJworZGRhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJworZGRhYnMwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJworZGRhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJworZGRhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJworZGRhYnMwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnCitkZGFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnCitkZGFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnCisKK2RkYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJworZGRhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCisKK2RkYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZGRhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkZGFiczAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkZGFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkZGFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZGRhYnMwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RkYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkZGFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZGRhYnMwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RkYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RkYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnCitkZGFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJworZGRhYnMwNDIgYWJzICcxMDEuNScgICAtPiAgJzEwMS41JworZGRhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41JworCistLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMAorZGRhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK2RkYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZGRhYnMwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK2RkYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkZGFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworCistLSBsb25nIG9wZXJhbmQgdGVzdHMKK2RkYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkZGFiczMyMyBhYnMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RkYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZGRhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkZGFiczMyNiBhYnMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkZGFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKKworLS0gemVyb3MKK2RkYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMAorZGRhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwCitkZGFiczExMyBhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKK2RkYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZGRhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RkYWJzMTE2IGFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZGFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkYWJzMTIxIGFicyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkYWJzMTIyIGFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkYWJzMTIzIGFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkYWJzMTMyIGFicyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRhYnMxMzQgYWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAorCitkZGFiczEzNSBhYnMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCitkZGFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGFiczEzNyBhYnMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gc3BlY2lhbHMKK2RkYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknCitkZGFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5JworZGRhYnM1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4KK2RkYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjIKK2RkYWJzNTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KK2RkYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjIKK2RkYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZGRhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBZGQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0CmluZGV4IGMwYTI1YjMuLjBmMTJjZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0CkBAIC0xLDEzMjggKzEsMTMyOCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRBZGQuZGVjVGVzdCAtLSBkZWNEb3VibGUgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQ0KLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KLWRkYWRkMDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDINCi1kZGFkZDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1DQotZGRhZGQwMDMgYWRkICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KLWRkYWRkMDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDINCi1kZGFkZDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOA0KLWRkYWRkMDA2IGFkZCAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCi1kZGFkZDAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCi1kZGFkZDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwDQotZGRhZGQwMDkgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KLWRkYWRkMDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCi0NCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYWRkMDExIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkYWRkMDEzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCi1kZGFkZDAxNCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDE1IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMTYgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAxNyBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDE4IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMTkgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDAyMCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkMDIxIGFkZCAwIDEgLT4gMQ0KLWRkYWRkMDIyIGFkZCAxIDEgLT4gMg0KLWRkYWRkMDIzIGFkZCAyIDEgLT4gMw0KLWRkYWRkMDI0IGFkZCAzIDEgLT4gNA0KLWRkYWRkMDI1IGFkZCA0IDEgLT4gNQ0KLWRkYWRkMDI2IGFkZCA1IDEgLT4gNg0KLWRkYWRkMDI3IGFkZCA2IDEgLT4gNw0KLWRkYWRkMDI4IGFkZCA3IDEgLT4gOA0KLWRkYWRkMDI5IGFkZCA4IDEgLT4gOQ0KLWRkYWRkMDMwIGFkZCA5IDEgLT4gMTANCi0NCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCi1kZGFkZDAzMSBhZGQgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZGRhZGQwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5Jw0KLWRkYWRkMDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCi1kZGFkZDAzNCBhZGQgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotZGRhZGQwMzUgYWRkICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDM2IGFkZCAnNzAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMzcgYWRkICc3MDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDM5IGFkZCAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KLQ0KLS0tIHN5bW1ldHJ5Og0KLWRkYWRkMDQwIGFkZCAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDA0MSBhZGQgJzEwMDAwZSsxNicgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDQyIGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMDQ0IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDA0NSBhZGQgJzEwMDAwZSsxNicgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQNCi0NCi0tLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nDQotZGRhZGQwNDYgYWRkICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQotZGRhZGQwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KLWRkYWRkMDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnDQotZGRhZGQwNDkgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQotZGRhZGQwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KLWRkYWRkMDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnDQotZGRhZGQwNTIgYWRkICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRkYWRkMDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQotZGRhZGQwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnDQotZGRhZGQwNTUgYWRkICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQotZGRhZGQwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KLWRkYWRkMDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0Jw0KLQ0KLS0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24NCi1kZGFkZDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KLWRkYWRkMDYyIGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScNCi1kZGFkZDA2MyBhZGQgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScNCi1kZGFkZDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KLWRkYWRkMDY1IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScNCi0NCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dDQotZGRhZGQwNzAgYWRkIDEgIDAgICAgLT4gMQ0KLWRkYWRkMDcxIGFkZCAxIDAuICAgIC0+IDENCi1kZGFkZDA3MiBhZGQgMSAgLjAgICAtPiAxLjANCi1kZGFkZDA3MyBhZGQgMSAwLjAgICAtPiAxLjANCi1kZGFkZDA3NCBhZGQgMSAwLjAwICAtPiAxLjAwDQotZGRhZGQwNzUgYWRkICAwICAxICAgLT4gMQ0KLWRkYWRkMDc2IGFkZCAwLiAgMSAgIC0+IDENCi1kZGFkZDA3NyBhZGQgIC4wIDEgICAtPiAxLjANCi1kZGFkZDA3OCBhZGQgMC4wIDEgICAtPiAxLjANCi1kZGFkZDA3OSBhZGQgMC4wMCAxICAtPiAxLjAwDQotDQotLS0gc29tZSBjYXJyaWVzDQotZGRhZGQwODAgYWRkIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCi1kZGFkZDA4MSBhZGQgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDANCi1kZGFkZDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMA0KLWRkYWRkMDgzIGFkZCAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDANCi1kZGFkZDA4NCBhZGQgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDANCi1kZGFkZDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMA0KLWRkYWRkMDg2IGFkZCAgICAgIDk5OTkgMSAgLT4gMTAwMDANCi1kZGFkZDA4NyBhZGQgICAgICAgOTk5IDEgIC0+IDEwMDANCi1kZGFkZDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMA0KLWRkYWRkMDg5IGFkZCAgICAgICAgIDkgMSAgLT4gMTANCi0NCi0NCi0tLSBtb3JlIExIUyBzd2Fwcw0KLWRkYWRkMDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kZGFkZDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCi1kZGFkZDA5MiBhZGQgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KLWRkYWRkMDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycNCi1kZGFkZDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQotZGRhZGQwOTUgYWRkICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KLWRkYWRkMDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycNCi1kZGFkZDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCi1kZGFkZDA5OCBhZGQgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCi1kZGFkZDA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jw0KLWRkYWRkMTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KLWRkYWRkMTAxIGFkZCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQotZGRhZGQxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jw0KLWRkYWRkMTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCi1kZGFkZDEwNCBhZGQgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KLWRkYWRkMTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJw0KLWRkYWRkMTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCi1kZGFkZDEwNyBhZGQgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KLWRkYWRkMTA4IGFkZCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQNCi1kZGFkZDEwOSBhZGQgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkDQotZGRhZGQxMTAgYWRkICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZA0KLWRkYWRkMTExIGFkZCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCi0NCi0tLSBtb3JlIFJIUyBzd2Fwcw0KLWRkYWRkMTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRkYWRkMTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQotZGRhZGQxMTYgYWRkIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3Jw0KLWRkYWRkMTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3Jw0KLWRkYWRkMTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KLWRkYWRkMTIwIGFkZCAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3Jw0KLWRkYWRkMTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43Jw0KLWRkYWRkMTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQotZGRhZGQxMjMgYWRkIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcNCi1kZGFkZDEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnDQotZGRhZGQxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCi1kZGFkZDEyNiBhZGQgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnDQotZGRhZGQxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnDQotZGRhZGQxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQotZGRhZGQxMjkgYWRkIDAgICctNUUwJyAgICAgICAtPiAgJy01Jw0KLWRkYWRkMTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnDQotZGRhZGQxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQotZGRhZGQxMzIgYWRkIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KLWRkYWRkMTMzIGFkZCAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCi1kZGFkZDEzNCBhZGQgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQotZGRhZGQxMzUgYWRkIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZA0KLWRkYWRkMTM2IGFkZCAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCi0NCi0tLSByZWxhdGVkDQotZGRhZGQxMzcgYWRkICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kZGFkZDEzOCBhZGQgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkYWRkMTM5IGFkZCAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQotZGRhZGQxNDAgYWRkICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kZGFkZDE0MSBhZGQgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJw0KLWRkYWRkMTQyIGFkZCAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkDQotZGRhZGQxNDMgYWRkIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcNCi1kZGFkZDE0NCBhZGQgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZA0KLQ0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQotZGRhZGQxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcNCi1kZGFkZDE0NyBhZGQgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCi1kZGFkZDE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kZGFkZDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJw0KLWRkYWRkMTUwIGFkZCAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRkYWRkMTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KLWRkYWRkMTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnDQotZGRhZGQxNTMgYWRkICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kZGFkZDE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRkYWRkMTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJw0KLWRkYWRkMTU2IGFkZCAnMycgICAgICczJyAgICAgLT4gICc2Jw0KLWRkYWRkMTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2Jw0KLWRkYWRkMTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJw0KLWRkYWRkMTU5IGFkZCAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQotZGRhZGQxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1kZGFkZDE2MSBhZGQgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknDQotZGRhZGQxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1kZGFkZDE2MyBhZGQgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWRkYWRkMTY0IGFkZCAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScNCi1kZGFkZDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLWRkYWRkMTY2IGFkZCAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZGRhZGQxNjcgYWRkICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1kZGFkZDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2DQotZGRhZGQxNzAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjYnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzQgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzUgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzYgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQxNzcgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgUm91bmRlZA0KLWRkYWRkMTc4IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMTc5IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMTgwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMTgxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMTgyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMTgzIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIFJvdW5kZWQNCi0NCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZGFkZDIwMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQotZGRhZGQyMDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIwMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjAzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMDQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIwNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjA2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMDcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIwOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjA5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjEyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjE1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KLWRkYWRkMjE3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIxOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGFkZDIyMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQotZGRhZGQyMjEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIyMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjIzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMjQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIyNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjI2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMjcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIyOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjI5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjMyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjM1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KLWRkYWRkMjM3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyMzggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDIzOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZGRhZGQyNDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI0MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjQyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kZGFkZDI1MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQotZGRhZGQyNTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI1MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjUzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI1NSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjU2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI1OCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjU5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjYyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2NCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkMjY1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KLWRkYWRkMjY3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQyNjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDI2OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRhZGQzMDEgYWRkICAtMSAgIDEgICAgICAtPiAgIDANCi1kZGFkZDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQ0KLWRkYWRkMzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyDQotZGRhZGQzMDQgYWRkICAxMiAgIDEgICAgICAtPiAgMTMNCi1kZGFkZDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQ0KLWRkYWRkMzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwDQotZGRhZGQzMDcgYWRkIDEwMCAgIDEgICAgICAtPiAxMDENCi1kZGFkZDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMg0KLWRkYWRkMzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yDQotZGRhZGQzMTAgYWRkICAgMCAgLTEgICAgICAtPiAgLTENCi1kZGFkZDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMA0KLWRkYWRkMzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExDQotZGRhZGQzMTMgYWRkICA5OCAgLTEgICAgICAtPiAgOTcNCi1kZGFkZDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OA0KLWRkYWRkMzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5DQotZGRhZGQzMTYgYWRkIDEwMSAgLTEgICAgICAtPiAxMDANCi0NCi1kZGFkZDMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDANCi1kZGFkZDMyMiBhZGQgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDENCi1kZGFkZDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCi1kZGFkZDMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMNCi1kZGFkZDMyNSBhZGQgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkNCi1kZGFkZDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCi1kZGFkZDMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDENCi1kZGFkZDMyOCBhZGQgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDINCi1kZGFkZDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCi1kZGFkZDMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDENCi1kZGFkZDMzMSBhZGQgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDANCi1kZGFkZDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCi1kZGFkZDMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcNCi1kZGFkZDMzNCBhZGQgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgNCi1kZGFkZDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCi1kZGFkZDMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDANCi0NCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQNCi1kZGFkZDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMA0KLWRkYWRkMzQxIGFkZCAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkYWRkMzQyIGFkZCAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQNCi1kZGFkZDM0MyBhZGQgMUUrMjAgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkDQotLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLg0KLWRkYWRkMzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQotZGRhZGQzNDUgYWRkIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxDQotZGRhZGQzNDYgYWRkIDFFKzE2ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQzNDcgYWRkIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcNCi1kZGFkZDM0OSBhZGQgMUUrMTUgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDcNCi1kZGFkZDM1MCBhZGQgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDM1MSBhZGQgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZGRhZGQzNjAgIGFkZCAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1DQotZGRhZGQzNjEgIGFkZCAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KLWRkYWRkMzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQNCi1kZGFkZDM2MyAgYWRkIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQzNjQgIGFkZCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQ0KLQ0KLS0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotZGRhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCi1kZGFkZDM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZGRhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCi1kZGFkZDM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kZGFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNA0KLWRkYWRkMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gb3BlcmFuZHMgZm9sZGVkDQotZGRhZGQzODAgYWRkICAgMUUrMzg0ICAxRSszODQgIC0+ICAyLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQotZGRhZGQzODEgYWRkICAgMUUrMzgwICAxRSszODAgIC0+ICAyLjAwMDAwMDAwMDAwRSszODAgICAgICBDbGFtcGVkDQotZGRhZGQzODIgYWRkICAgMUUrMzc2ICAxRSszNzYgIC0+ICAyLjAwMDAwMDBFKzM3NiAgICAgICAgICBDbGFtcGVkDQotZGRhZGQzODMgYWRkICAgMUUrMzcyICAxRSszNzIgIC0+ICAyLjAwMEUrMzcyICAgICAgICAgICAgICBDbGFtcGVkDQotZGRhZGQzODQgYWRkICAgMUUrMzcwICAxRSszNzAgIC0+ICAyLjBFKzM3MCAgICAgICAgICAgICAgICBDbGFtcGVkDQotZGRhZGQzODUgYWRkICAgMUUrMzY5ICAxRSszNjkgIC0+ICAyRSszNjkNCi1kZGFkZDM4NiBhZGQgICAxRSszNjggIDFFKzM2OCAgLT4gIDJFKzM2OA0KLQ0KLS0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KLWRkYWRkNDAwIGFkZCAgIDEgICA3N2UtMTQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDAxIGFkZCAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcNCi1kZGFkZDQwMiBhZGQgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDAzIGFkZCAgIDEgICA3N2UtMTcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MDQgYWRkICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQwNSBhZGQgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDA2IGFkZCAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ0MTAgYWRkICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDExIGFkZCAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MTIgYWRkICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQxMyBhZGQgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDE0IGFkZCAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MTUgYWRkICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQxNiBhZGQgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNDIwIGFkZCAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDIxIGFkZCAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcNCi1kZGFkZDQyMiBhZGQgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDIzIGFkZCAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MjQgYWRkICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQyNSBhZGQgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDI2IGFkZCAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ0MzAgYWRkICA3N2UtMTQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3Nw0KLWRkYWRkNDMxIGFkZCAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MzIgYWRkICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQzMyBhZGQgIDc3ZS0xNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNDM0IGFkZCAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ0MzUgYWRkICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDQzNiBhZGQgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGZhc3RwYXRoIGJvdW5kYXJ5IChtb3JlIGluIGRxYWRkKQ0KLS0tICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYWRkNTM5IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczMzMzMzMzMzMzMzMzMzMzJyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycNCi1kZGFkZDU0MCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnDQotZGRhZGQ1NDEgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTUnIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KLWRkYWRkNTQyIGFkZCAnMzMzMzMzMzMzMzMzMzMzMycgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycNCi1kZGFkZDU0MyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnDQotZGRhZGQ1NDQgYWRkICc1NTU1NTU1NTU1NTU1NTU1JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KLWRkYWRkNTQ1IGFkZCAnMzAwMDAwNDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDAwMDQwJyAtPiAnNjAwMDAwNDAwMDAwMDA0MCcNCi1kZGFkZDU0NiBhZGQgJzMwMDAwMDA0MDAwMDAwMDAnICAnNDAwMDAwMDAwMDAwMDQwMCcgLT4gJzcwMDAwMDA0MDAwMDA0MDAnDQotZGRhZGQ1NDcgYWRkICczMDAwMDAwMDQwMDAwMDAwJyAgJzUwMDAwMDAwMDAwMDQwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwJw0KLWRkYWRkNTQ4IGFkZCAnNDAwMDAwMDAwNDAwMDAwMCcgICczMDAwMDAwMDAwMDQwMDAwJyAtPiAnNzAwMDAwMDAwNDA0MDAwMCcNCi1kZGFkZDU0OSBhZGQgJzQwMDAwMDAwMDA0MDAwMDAnICAnNDAwMDAwMDAwMDQwMDAwMCcgLT4gJzgwMDAwMDAwMDA4MDAwMDAnDQotZGRhZGQ1NTAgYWRkICc0MDAwMDAwMDAwMDQwMDAwJyAgJzUwMDAwMDAwMDQwMDAwMDAnIC0+ICc5MDAwMDAwMDA0MDQwMDAwJw0KLWRkYWRkNTUxIGFkZCAnNTAwMDAwMDAwMDAwNDAwMCcgICczMDAwMDAwMDQwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcNCi1kZGFkZDU1MiBhZGQgJzUwMDAwMDAwMDAwMDA0MDAnICAnNDAwMDAwMDQwMDAwMDAwMCcgLT4gJzkwMDAwMDA0MDAwMDA0MDAnDQotZGRhZGQ1NTMgYWRkICc1MDAwMDAwMDAwMDAwMDQwJyAgJzUwMDAwMDQwMDAwMDAwMDAnIC0+IDEuMDAwMDAwNDAwMDAwMDA0RSsxNiBSb3VuZGVkDQotLS0gY2hlY2sgcHJvcGFnYXRpb24NCi1kZGFkZDU1NCBhZGQgJzg5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMScgLT4gOTAwMDAwMDAwMDAwMDAwMA0KLWRkYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5JyAtPiA5MDAwMDAwMDAwMDAwMDAwDQotZGRhZGQ1NTYgYWRkICcwOTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDEnIC0+IDEwMDAwMDAwMDAwMDAwMDANCi1kZGFkZDU1NyBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnMDk5OTk5OTk5OTk5OTk5OScgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkYWRkNTU4IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU2JyAtPiA5MDAwMDAwMDAwMDAwMDAwDQotZGRhZGQ1NTkgYWRkICc0NTU1NTU1NTU1NTU1NTU2JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+IDkwMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZGRhZGQ2NDQwIGFkZCAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NDEgYWRkICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NDIgYWRkICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDQzIGFkZCAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NDQgYWRkICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ0NSBhZGQgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ2NDUwIGFkZCAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDUxIGFkZCAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ1MiBhZGQgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDUzIGFkZCAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NTQgYWRkICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDU1IGFkZCAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ1NiBhZGQgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDY0NjAgYWRkICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ2MSBhZGQgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ2MiBhZGQgIC03N2UtMTYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NjMgYWRkICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ2NCBhZGQgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDY1IGFkZCAgLTc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ2NiBhZGQgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDY0NzAgYWRkICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0NzEgYWRkICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDcyIGFkZCAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NzMgYWRkICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ3NCBhZGQgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0NzUgYWRkICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kZGFkZDY0ODAgYWRkICAtMSAgICA3N2UtMTQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0ODEgYWRkICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDgyIGFkZCAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY0ODMgYWRkICAtMSAgICA3N2UtMTcgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0ODQgYWRkICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0ODUgYWRkICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ4NiBhZGQgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ2NDkwIGFkZCAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjQ5MSBhZGQgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NDkyIGFkZCAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDkzIGFkZCAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NDk0IGFkZCAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY0OTUgYWRkIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjQ5NiBhZGQgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ2NTAwIGFkZCAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NTAxIGFkZCAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjUwMiBhZGQgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzDQotZGRhZGQ2NTAzIGFkZCAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTA0IGFkZCAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTA1IGFkZCAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1MDYgYWRkICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNjUxMCBhZGQgICA3N2UtMTQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMNCi1kZGFkZDY1MTEgYWRkICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMw0KLWRkYWRkNjUxMiBhZGQgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjUxMyBhZGQgICA3N2UtMTcgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjUxNCBhZGQgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTE1IGFkZCAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1MTYgYWRkICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZGFkZDY1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRkYWRkNjU0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU0OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNjU1NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZGRhZGQ2NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTU4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkYWRkNjU2MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQotZGRhZGQ2NTYxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTY5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTcwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTcxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTcyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTczIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTc0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTc1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ2NTc2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCi1kZGFkZDY1NzcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDY1NzkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRkYWRkNzU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU0MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRhZGQ3NTUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1kZGFkZDc1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KLWRkYWRkNzU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHZlcmlmeSBhIHF1ZXJ5DQotcm91bmRpbmc6ICAgICBkb3duDQotZGRhZGQ3NjYxIGFkZCAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzY2MiBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkDQotZGRhZGQ3NjYzIGFkZCAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzY2NCBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kZGFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQotZGRhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDANCi1kZGFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWRkYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQotDQotZGRhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMA0KLWRkYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWRkYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDANCi1kZGFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxDQotZGRhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWRkYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMNCi1kZGFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszDQotZGRhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWRkYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjANCi1kZGFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMA0KLWRkYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZGRhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KLWRkYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMA0KLWRkYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDANCi1kZGFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxDQotZGRhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMg0KLWRkYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1kZGFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszDQotZGRhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMw0KLWRkYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1kZGFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjANCi1kZGFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwDQotDQotZGRhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDANCi1kZGFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMA0KLWRkYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwDQotZGRhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWRkYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwDQotZGRhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTINCi1kZGFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMg0KLWRkYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwDQotDQotZGRhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTENCi1kZGFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQ0KLWRkYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxDQotZGRhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDENCi1kZGFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQ0KLWRkYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xDQotZGRhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDENCi1kZGFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWRkYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjANCi1kZGFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wDQotZGRhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWRkYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjANCi1kZGFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wDQotZGRhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWRkYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjANCi1kZGFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wDQotDQotZGRhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWRkYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjANCi1kZGFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wDQotZGRhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWRkYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjANCi1kZGFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wDQotZGRhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWRkYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjANCi0NCi1kZGFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wDQotZGRhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWRkYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjANCi1kZGFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wDQotZGRhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWRkYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjANCi1kZGFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wDQotZGRhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRkYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZGFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRkYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZGFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRkYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZGFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZGFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWRkYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZGRhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kZGFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWRkYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZGRhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kZGFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWRkYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZGRhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZGRhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kZGFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZGRhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZGRhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQotZGRhZGQ3NTc1IGFkZCAgMUUtMzgzIC0xRS0zOTggLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotZGRhZGQ3NTc2IGFkZCAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotDQotLS0gYW5kIGFub3RoZXIgY3VyaW91cyBjYXNlDQotZGRhZGQ3NTc3IGFkZCA3LjAwMDAwMDAwMDAwMEUtMzg1IC0xLjAwMDAwRS0zOTEgLT4gNi45OTk5OTkwMDAwMDBFLTM4NSBTdWJub3JtYWwNCi0NCi0tLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UNCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGFkZDc5NzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk3NSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk3OCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4MSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5ODIgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGFkZDc5ODYgYWRkICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk4OSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5MiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTZFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3OTk1IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtM0UrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQotcm91bmRpbmc6ICAgICBkb3duDQotZGRhZGQ3MTEwMCBhZGQgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMDEgYWRkIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwMyBhZGQgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwNCBhZGQgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMDUgYWRkIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwNiBhZGQgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwNyBhZGQgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMDggYWRkIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRhZGQ3MTEwOSBhZGQgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgIGNlaWxpbmcNCi1kZGFkZDcxMTEwIGFkZCAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTEgYWRkIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTMgYWRkICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTE0IGFkZCAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTUgYWRkIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTYgYWRkIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGFkZDcxMTE3IGFkZCAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTggYWRkIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkYWRkNzExMTkgYWRkIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCi0NCi1kZGFkZDcxMzAwIGFkZCAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTAgYWRkIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxMSBhZGQgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzEyIGFkZCAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTMgYWRkIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxNCBhZGQgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzE1IGFkZCAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTYgYWRkIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMxNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzE4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMTkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzIxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzI0IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjUgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzI3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMjggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMyOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzMwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzMzIGFkZCAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzQgYWRkIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzNSBhZGQgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzM2IGFkZCAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzEzMzcgYWRkIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTMzOCBhZGQgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzM5IGFkZCAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkNzEzNDAgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTM0MSBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDcxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzUwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzUxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzUzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzU5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzYwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzYyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzYzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzY1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzY3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzY5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzcwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzcyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzc5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzgxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzgyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzkwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzkxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzkzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzk0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDcxMzk2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZA0KLS0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDANCi1kZGFkZDcxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQyMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQyNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1kZGFkZDcxNDI4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCi1kZGFkZDcxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1kZGFkZDcxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZGRhZGQ3MTQzMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWRkYWRkNzE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kZGFkZDcxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZGRhZGQ3MTQzNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWRkYWRkNzE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kZGFkZDcxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZGRhZGQ3MTQzNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWRkYWRkNzE0MzggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kZGFkZDcxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgcmV2ZXJzZWQgMA0KLWRkYWRkNzE0NDAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NDMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NDYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ0NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1kZGFkZDcxNDQ4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRkYWRkNzE0NDkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05DQotZGRhZGQ3MTQ1MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZGRhZGQ3MTQ1MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZGRhZGQ3MTQ1MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyDQotZGRhZGQ3MTQ1MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZGRhZGQ3MTQ1NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZGRhZGQ3MTQ1NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1DQotZGRhZGQ3MTQ1NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZGRhZGQ3MTQ1NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZGRhZGQ3MTQ1OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4DQotZGRhZGQ3MTQ1OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgRXMgb24gdGhlIDANCi1kZGFkZDcxNDYwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDYzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDY2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ2NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NjggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDY5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ3MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDcyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRhZGQ3MTQ3MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWRkYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGFkZDcxNDc1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KLWRkYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRkYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRkYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRkYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLQ0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRhZGQ3MTUwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTUwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkYWRkNzE1MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRhZGQ3MTUxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkYWRkNzE1MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTUyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGFkZDcxNTMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkYWRkNzE1MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGFkZDcxNTQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRhZGQ3MTU1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGFkZDcxNTUyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGFkZDcxNTYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRhZGQ3MTU3MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGFkZDcxNTcyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBkb3duDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkYWRkNzE1ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTU4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNTgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE1ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGFkZDcxNTkxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkYWRkNzE1OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRhZGQ3MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRhZGQ3MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRhZGQ3MTYxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi0tLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoNCi1yb3VuZGluZzogICAgZmxvb3INCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRhZGQ3MTYyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGFkZDcxNjIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRkYWRkNzE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZGRhZGQ3MTYyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkYWRkNzE2MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotZGRhZGQ3MTYzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1kZGFkZDcxNzAxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTANCi1kZGFkZDcxNzAyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1kZGFkZDcxNzAzIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzANCi1kZGFkZDcxNzA0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQNCi1kZGFkZDcxNzA1IGFkZCAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTANCi1kZGFkZDcxNzA2IGFkZCAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTANCi1kZGFkZDcxNzA3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzANCi1kZGFkZDcxNzA4IGFkZCAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBxdWVyeSBmcm9tIFZpbmNlbnQgS3VsYW5kYWlzYW15DQotcm91bmRpbmc6IGNlaWxpbmcNCi1kZGFkZDcxODAxICBhZGQgIDcuODgyMjc3MzgwNTg2MkUrMjc3ICAgIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTgwMiAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3ICAxMi4zNDEgICAgICAgICAgICAgICAtPiA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3IEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzE4MDMgIGFkZCAgNy44ODIyNzczODA1ODYyMDFFKzI3NyAgMi43MjcwNTQ1MDQ2NjEzRS0zMSAgLT4gNy44ODIyNzczODA1ODYyMDJFKzI3NyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDcxODExICBhZGQgICAgICAgICAgICAgICAgICAgMTIuMzQxIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDEyLjM0MTAwMDAwMDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ3MTgxMiAgYWRkICAgICAgICAxMi4zNDEwMDAwMDAwMDAwMCAyLjcyNzA1NDUwNDY2MTNFLTMxICAtPiAxMi4zNDEwMDAwMDAwMDAwMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkNzE4MTMgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDEgNy44ODIyNzczODA1ODYyRSsyNzcgLT4gNy44ODIyNzczODA1ODYyMDFFKzI3NyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRkYWRkNzUwMDEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcNCi1kZGFkZDc1MDAyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDAzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDA5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDEwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDExIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDEyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDEzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDE5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDIwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDIxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQotZGRhZGQ3NTAzMCBhZGQgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkNCi1kZGFkZDc1MDMxIGFkZCAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xDQotZGRhZGQ3NTAzMiBhZGQgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTINCi1kZGFkZDc1MDMzIGFkZCAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMNCi1kZGFkZDc1MDM0IGFkZCAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0DQotZGRhZGQ3NTAzNSBhZGQgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUNCi1kZGFkZDc1MDM2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYNCi1kZGFkZDc1MDM3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3DQotZGRhZGQ3NTAzOCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgNCi1kZGFkZDc1MDM5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQwIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQxIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQyIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQzIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ0IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ1IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ4IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDQ5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ng0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGFkZDc1MDUwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDUxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDUyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDUzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDU0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDU1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDU2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDU3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDYwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDYxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDYyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDYzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDY0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDY1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDY2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDY3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQotcm91bmRpbmc6IHVwDQotZGRhZGQ3NTA3MCBhZGQgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDENCi1kZGFkZDc1MDcxIGFkZCAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDcyIGFkZCAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDczIGFkZCAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc0IGFkZCAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc1IGFkZCAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc2IGFkZCAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc3IGFkZCAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc4IGFkZCAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDc5IGFkZCAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDgwIGFkZCAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDgxIGFkZCAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDgyIGFkZCAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDgzIGFkZCAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg0IGFkZCAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg1IGFkZCAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg2IGFkZCAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg3IGFkZCAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg4IGFkZCAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDc1MDg5IGFkZCAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQdW5pdCdzDQotZGRhZGQ3NTEwMCBhZGQgMS4wMDAgLTIwMC4wMDAgICAgICAgICAgICAgICAgICAgLT4gLTE5OS4wMDANCi0NCi0tLSBSb3VuZGluZyBzd2F0aGUNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRhZGQ4MTEwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KLWRkYWRkODExMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODExMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMTIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWRkYWRkODEyMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCi1kZGFkZDgxMjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxMjIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9kb3duDQotZGRhZGQ4MTMwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KLWRkYWRkODEzMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODEzMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiB1cA0KLWRkYWRkODE0MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCi1kZGFkZDgxNDAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNDIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkYWRkODE1MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCi1kZGFkZDgxNTAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE1MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGNlaWxpbmcNCi1kZGFkZDgxNjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQotZGRhZGQ4MTYwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTYyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZmxvb3INCi1kZGFkZDgxNzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQotZGRhZGQ4MTcwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MTcyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxNzIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogMDV1cA0KLWRkYWRkODE4MDAgYWRkICAuMjAwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjAgIFJvdW5kZWQNCi1kZGFkZDgxODAxIGFkZCAgLjIwMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODAyIGFkZCAgLjIwMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODAzIGFkZCAgLjIwNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODA0IGFkZCAgLjIwNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODA3IGFkZCAgLjIwNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODA4IGFkZCAgLjIwNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODA5IGFkZCAgLjIwOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODExIGFkZCAtLjIwOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgxODIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE4MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ4MTkwMCBhZGQgIC4yMTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgUm91bmRlZA0KLWRkYWRkODE5MDEgYWRkICAuMjEwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDIgYWRkICAuMjExMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDMgYWRkICAuMjE1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDQgYWRkICAuMjE1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDcgYWRkICAuMjE2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDggYWRkICAuMjE3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MDkgYWRkICAuMjE5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODE5MTEgYWRkIC0uMjE5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkODIwMDAgYWRkICAuMjQwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIFJvdW5kZWQNCi1kZGFkZDgyMDAxIGFkZCAgLjI0MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDAyIGFkZCAgLjI0MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDAzIGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDA0IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDA3IGFkZCAgLjI0NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDA4IGFkZCAgLjI0NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDA5IGFkZCAgLjI0OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMDExIGFkZCAtLjI0OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGFkZDgyMTAwIGFkZCAgLjI1MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBSb3VuZGVkDQotZGRhZGQ4MjEwMSBhZGQgIC4yNTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwMiBhZGQgIC4yNTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwMyBhZGQgIC4yNTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwNCBhZGQgIC4yNTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwNyBhZGQgIC4yNTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwOCBhZGQgIC4yNTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjEwOSBhZGQgIC4yNTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotZGRhZGQ4MjExMSBhZGQgLS4yNTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRhZGQ4MjIwMCBhZGQgIC4yNjAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgUm91bmRlZA0KLWRkYWRkODIyMDEgYWRkICAuMjYwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDIgYWRkICAuMjYxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDMgYWRkICAuMjY1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDQgYWRkICAuMjY1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDcgYWRkICAuMjY2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDggYWRkICAuMjY3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMDkgYWRkICAuMjY5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkYWRkODIyMTEgYWRkIC0uMjY5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkYWRkODIzMDAgYWRkICAuMjkwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIFJvdW5kZWQNCi1kZGFkZDgyMzAxIGFkZCAgLjI5MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzAyIGFkZCAgLjI5MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzAzIGFkZCAgLjI5NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzA0IGFkZCAgLjI5NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzA3IGFkZCAgLjI5NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzA4IGFkZCAgLjI5NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzA5IGFkZCAgLjI5OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGFkZDgyMzExIGFkZCAtLjI5OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFkZDk5OTEgYWRkICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRBZGQuZGVjVGVzdCAtLSBkZWNEb3VibGUgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RkYWRkMDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDIKK2RkYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUKK2RkYWRkMDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RkYWRkMDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDIKK2RkYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04CitkZGFkZDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkZGFkZDAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2RkYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2RkYWRkMDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RkYWRkMDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWRkMDExIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGFkZDAxMyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZGFkZDAxNCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE2IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxNyBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE5IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAyMCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDAyMSBhZGQgMCAxIC0+IDEKK2RkYWRkMDIyIGFkZCAxIDEgLT4gMgorZGRhZGQwMjMgYWRkIDIgMSAtPiAzCitkZGFkZDAyNCBhZGQgMyAxIC0+IDQKK2RkYWRkMDI1IGFkZCA0IDEgLT4gNQorZGRhZGQwMjYgYWRkIDUgMSAtPiA2CitkZGFkZDAyNyBhZGQgNiAxIC0+IDcKK2RkYWRkMDI4IGFkZCA3IDEgLT4gOAorZGRhZGQwMjkgYWRkIDggMSAtPiA5CitkZGFkZDAzMCBhZGQgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZGRhZGQwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZGRhZGQwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZGRhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZGRhZGQwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitkZGFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMzcgYWRkICc3MDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkZGFkZDA0MCBhZGQgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDA0MSBhZGQgJzEwMDAwZSsxNicgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwNDIgYWRkICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDA0NCBhZGQgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDA0NSBhZGQgJzEwMDAwZSsxNicgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZworZGRhZGQwNDYgYWRkICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkZGFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitkZGFkZDA0OCBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZGRhZGQwNDkgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkZGFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitkZGFkZDA1MSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZGRhZGQwNTIgYWRkICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkYWRkMDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitkZGFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2RkYWRkMDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZGRhZGQwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZGRhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24KK2RkYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkZGFkZDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitkZGFkZDA2MyBhZGQgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2RkYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkZGFkZDA2NSBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2RkYWRkMDcwIGFkZCAxICAwICAgIC0+IDEKK2RkYWRkMDcxIGFkZCAxIDAuICAgIC0+IDEKK2RkYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMAorZGRhZGQwNzMgYWRkIDEgMC4wICAgLT4gMS4wCitkZGFkZDA3NCBhZGQgMSAwLjAwICAtPiAxLjAwCitkZGFkZDA3NSBhZGQgIDAgIDEgICAtPiAxCitkZGFkZDA3NiBhZGQgMC4gIDEgICAtPiAxCitkZGFkZDA3NyBhZGQgIC4wIDEgICAtPiAxLjAKK2RkYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMAorZGRhZGQwNzkgYWRkIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2RkYWRkMDgwIGFkZCA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkZGFkZDA4MSBhZGQgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2RkYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitkZGFkZDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkZGFkZDA4NCBhZGQgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2RkYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitkZGFkZDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkZGFkZDA4NyBhZGQgICAgICAgOTk5IDEgIC0+IDEwMDAKK2RkYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwCitkZGFkZDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RkYWRkMDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZGRhZGQwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RkYWRkMDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2RkYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2RkYWRkMDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RkYWRkMDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2RkYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZGRhZGQwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkZGFkZDA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZGRhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitkZGFkZDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZGRhZGQxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZGRhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZGRhZGQxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RkYWRkMTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZGRhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZGRhZGQxMDcgYWRkICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkYWRkMTA4IGFkZCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQKK2RkYWRkMTA5IGFkZCAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQKK2RkYWRkMTEwIGFkZCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2RkYWRkMTExIGFkZCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2RkYWRkMTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZGRhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RkYWRkMTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2RkYWRkMTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZGRhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkZGFkZDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2RkYWRkMTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZGRhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RkYWRkMTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitkZGFkZDEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitkZGFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZGRhZGQxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZGRhZGQxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitkZGFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RkYWRkMTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2RkYWRkMTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitkZGFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RkYWRkMTMyIGFkZCAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkYWRkMTMzIGFkZCAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2RkYWRkMTM0IGFkZCAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2RkYWRkMTM1IGFkZCAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2RkYWRkMTM2IGFkZCAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZGRhZGQxMzcgYWRkICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RkYWRkMTM4IGFkZCAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGFkZDEzOSBhZGQgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZGRhZGQxNDAgYWRkICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkYWRkMTQxIGFkZCAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCitkZGFkZDE0MiBhZGQgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorZGRhZGQxNDMgYWRkIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKK2RkYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitkZGFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZGRhZGQxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkZGFkZDE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitkZGFkZDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkYWRkMTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZGRhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2RkYWRkMTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkZGFkZDE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZGRhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitkZGFkZDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RkYWRkMTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2JworZGRhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitkZGFkZDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZGRhZGQxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkZGFkZDE2MSBhZGQgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitkZGFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkYWRkMTY0IGFkZCAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2RkYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkZGFkZDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjcgYWRkICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RkYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCistLSAgICAgICAgICAgMS4yMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2RkYWRkMTcwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjYnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTczIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzQgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc2IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzcgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgUm91bmRlZAorZGRhZGQxNzggYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3OSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTgwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE4MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTgzIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RkYWRkMjAwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkYWRkMjAxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjEwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjEzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkYWRkMjE3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQyMjAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRhZGQyMjEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjIyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjMxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRhZGQyMzcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkYWRkMjQwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI0MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNDIgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkYWRkMjUwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkYWRkMjUxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1NSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1OCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjYwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjYzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2NCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkYWRkMjY3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2OCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl91cAorZGRhZGQzMDEgYWRkICAtMSAgIDEgICAgICAtPiAgIDAKK2RkYWRkMzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxCitkZGFkZDMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMgorZGRhZGQzMDQgYWRkICAxMiAgIDEgICAgICAtPiAgMTMKK2RkYWRkMzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5CitkZGFkZDMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMAorZGRhZGQzMDcgYWRkIDEwMCAgIDEgICAgICAtPiAxMDEKK2RkYWRkMzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyCitkZGFkZDMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMgorZGRhZGQzMTAgYWRkICAgMCAgLTEgICAgICAtPiAgLTEKK2RkYWRkMzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwCitkZGFkZDMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQorZGRhZGQzMTMgYWRkICA5OCAgLTEgICAgICAtPiAgOTcKK2RkYWRkMzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4CitkZGFkZDMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQorZGRhZGQzMTYgYWRkIDEwMSAgLTEgICAgICAtPiAxMDAKKworZGRhZGQzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkZGFkZDMyMiBhZGQgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2RkYWRkMzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZGRhZGQzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkZGFkZDMyNSBhZGQgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2RkYWRkMzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZGRhZGQzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkZGFkZDMyOCBhZGQgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2RkYWRkMzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZGRhZGQzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkZGFkZDMzMSBhZGQgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2RkYWRkMzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZGRhZGQzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkZGFkZDMzNCBhZGQgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2RkYWRkMzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZGRhZGQzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZGRhZGQzNDAgYWRkIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKK2RkYWRkMzQxIGFkZCAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAorZGRhZGQzNDIgYWRkIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorZGRhZGQzNDMgYWRkIDFFKzIwICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZAorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgorZGRhZGQzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RkYWRkMzQ1IGFkZCAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQorZGRhZGQzNDYgYWRkIDFFKzE2ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDM0NyBhZGQgMUUrMjAgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkZGFkZDM0OSBhZGQgMUUrMTUgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDcKK2RkYWRkMzUwIGFkZCAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQzNTEgYWRkIDFFKzIwICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZGRhZGQzNjAgIGFkZCAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1CitkZGFkZDM2MSAgYWRkIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGFkZDM2MiAgYWRkIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGFkZDM2MyAgYWRkIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDM2NCAgYWRkIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMEUrMzY5CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RkYWRkMzcwIGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGFkZDM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkYWRkMzcyIGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGFkZDM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRhZGQzNzQgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkYWRkMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0CisKKy0tIG9wZXJhbmRzIGZvbGRlZAorZGRhZGQzODAgYWRkICAgMUUrMzg0ICAxRSszODQgIC0+ICAyLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGFkZDM4MSBhZGQgICAxRSszODAgIDFFKzM4MCAgLT4gIDIuMDAwMDAwMDAwMDBFKzM4MCAgICAgIENsYW1wZWQKK2RkYWRkMzgyIGFkZCAgIDFFKzM3NiAgMUUrMzc2ICAtPiAgMi4wMDAwMDAwRSszNzYgICAgICAgICAgQ2xhbXBlZAorZGRhZGQzODMgYWRkICAgMUUrMzcyICAxRSszNzIgIC0+ICAyLjAwMEUrMzcyICAgICAgICAgICAgICBDbGFtcGVkCitkZGFkZDM4NCBhZGQgICAxRSszNzAgIDFFKzM3MCAgLT4gIDIuMEUrMzcwICAgICAgICAgICAgICAgIENsYW1wZWQKK2RkYWRkMzg1IGFkZCAgIDFFKzM2OSAgMUUrMzY5ICAtPiAgMkUrMzY5CitkZGFkZDM4NiBhZGQgICAxRSszNjggIDFFKzM2OCAgLT4gIDJFKzM2OAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RkYWRkNDAwIGFkZCAgIDEgICA3N2UtMTQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworZGRhZGQ0MDEgYWRkICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZGRhZGQ0MDIgYWRkICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDAzIGFkZCAgIDEgICA3N2UtMTcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQwNCBhZGQgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDUgYWRkICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDA2IGFkZCAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNDEwIGFkZCAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDExIGFkZCAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxMiBhZGQgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTMgYWRkICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDE0IGFkZCAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxNSBhZGQgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTYgYWRkICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ0MjAgYWRkICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQyMSBhZGQgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitkZGFkZDQyMiBhZGQgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MjMgYWRkICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDI0IGFkZCAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyNSBhZGQgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ0MzAgYWRkICA3N2UtMTQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZGRhZGQ0MzEgYWRkICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDMyIGFkZCAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzMyBhZGQgIDc3ZS0xNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzQgYWRkICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDM1IGFkZCAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzNiBhZGQgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBmYXN0cGF0aCBib3VuZGFyeSAobW9yZSBpbiBkcWFkZCkKKy0tICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQ1MzkgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzMzMzMzMzMzMzMzMzMzMzMnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3JworZGRhZGQ1NDAgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc4ODg4ODg4ODg4ODg4ODg4JworZGRhZGQ1NDEgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTUnIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZGRhZGQ1NDIgYWRkICczMzMzMzMzMzMzMzMzMzMzJyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3JworZGRhZGQ1NDMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc4ODg4ODg4ODg4ODg4ODg4JworZGRhZGQ1NDQgYWRkICc1NTU1NTU1NTU1NTU1NTU1JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZGRhZGQ1NDUgYWRkICczMDAwMDA0MDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwMDAwNDAnIC0+ICc2MDAwMDA0MDAwMDAwMDQwJworZGRhZGQ1NDYgYWRkICczMDAwMDAwNDAwMDAwMDAwJyAgJzQwMDAwMDAwMDAwMDA0MDAnIC0+ICc3MDAwMDAwNDAwMDAwNDAwJworZGRhZGQ1NDcgYWRkICczMDAwMDAwMDQwMDAwMDAwJyAgJzUwMDAwMDAwMDAwMDQwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwJworZGRhZGQ1NDggYWRkICc0MDAwMDAwMDA0MDAwMDAwJyAgJzMwMDAwMDAwMDAwNDAwMDAnIC0+ICc3MDAwMDAwMDA0MDQwMDAwJworZGRhZGQ1NDkgYWRkICc0MDAwMDAwMDAwNDAwMDAwJyAgJzQwMDAwMDAwMDA0MDAwMDAnIC0+ICc4MDAwMDAwMDAwODAwMDAwJworZGRhZGQ1NTAgYWRkICc0MDAwMDAwMDAwMDQwMDAwJyAgJzUwMDAwMDAwMDQwMDAwMDAnIC0+ICc5MDAwMDAwMDA0MDQwMDAwJworZGRhZGQ1NTEgYWRkICc1MDAwMDAwMDAwMDA0MDAwJyAgJzMwMDAwMDAwNDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwJworZGRhZGQ1NTIgYWRkICc1MDAwMDAwMDAwMDAwNDAwJyAgJzQwMDAwMDA0MDAwMDAwMDAnIC0+ICc5MDAwMDAwNDAwMDAwNDAwJworZGRhZGQ1NTMgYWRkICc1MDAwMDAwMDAwMDAwMDQwJyAgJzUwMDAwMDQwMDAwMDAwMDAnIC0+IDEuMDAwMDAwNDAwMDAwMDA0RSsxNiBSb3VuZGVkCistLSBjaGVjayBwcm9wYWdhdGlvbgorZGRhZGQ1NTQgYWRkICc4OTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDEnIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5JyAtPiA5MDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1NiBhZGQgJzA5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMScgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTcgYWRkICcwMDAwMDAwMDAwMDAwMDAxJyAgJzA5OTk5OTk5OTk5OTk5OTknIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU4IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU2JyAtPiA5MDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1OSBhZGQgJzQ1NTU1NTU1NTU1NTU1NTYnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gOTAwMDAwMDAwMDAwMDAwMAorCistLSBuZWdhdGl2ZSB1bHBzCitkZGFkZDY0NDAgYWRkICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDQxIGFkZCAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NDIgYWRkICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NDMgYWRkICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDQ0IGFkZCAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ0NSBhZGQgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NDUwIGFkZCAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NTEgYWRkICAxMCAgIC03N2UtMTUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NTIgYWRkICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDUzIGFkZCAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ1NSBhZGQgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ1NiBhZGQgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NDYwIGFkZCAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ2MSBhZGQgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDYyIGFkZCAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDYzIGFkZCAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ2NCBhZGQgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NjUgYWRkICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NjYgYWRkICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjQ3MCBhZGQgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDcxIGFkZCAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDcyIGFkZCAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3MyBhZGQgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NzQgYWRkICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NzUgYWRkICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDgxIGFkZCAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDgyIGFkZCAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDg0IGFkZCAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0ODUgYWRkICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NDkwIGFkZCAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ5MiBhZGQgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDkzIGFkZCAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDk1IGFkZCAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ5NiBhZGQgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNjUwMCBhZGQgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRhZGQ2NTAxIGFkZCAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NTAyIGFkZCAgIDc3ZS0xNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjUwMyBhZGQgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTA0IGFkZCAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MDUgYWRkICAgNzdlLTE5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NTEwIGFkZCAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZGRhZGQ2NTExIGFkZCAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjUxMiBhZGQgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTEzIGFkZCAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTQgYWRkICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTE1IGFkZCAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRhZGQ2NTQwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkYWRkNjU0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGFkZDY1NTcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkYWRkNjU2MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitkZGFkZDY1NjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTcyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZGRhZGQ2NTc3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRhZGQ3NTQwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU0MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRhZGQ3NTUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkYWRkNzU1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTUyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGFkZDc1NjcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHZlcmlmeSBhIHF1ZXJ5Cityb3VuZGluZzogICAgIGRvd24KK2RkYWRkNzY2MSBhZGQgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzY2MiBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCitkZGFkZDc2NjMgYWRkIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc2NjQgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkYWRkNzcwMSBhZGQgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2RkYWRkNzcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkZGFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZGRhZGQ3NzA0IGFkZCAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZGRhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMAorZGRhZGQ3NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wCitkZGFkZDc3MTIgYWRkIDBFKzMgIDAwLiAgICAtPiAwCitkZGFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkZGFkZDc3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitkZGFkZDc3MTUgYWRkIDBFKzMgIDAwLkUrMyAtPiAwRSszCitkZGFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkZGFkZDc3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszCitkZGFkZDc3MTggYWRkIDBFKzMgIC0wMC4wICAgLT4gMC4wCitkZGFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMAorZGRhZGQ3NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZGRhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZGRhZGQ3NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wCitkZGFkZDc3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwCitkZGFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxCitkZGFkZDc3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyCitkZGFkZDc3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszCitkZGFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszCitkZGFkZDc3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszCitkZGFkZDc3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwCitkZGFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjAKK2RkYWRkNzczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDAKKworZGRhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDAKK2RkYWRkNzczMyBhZGQgIDAgICAgLTAgICAgIC0+ICAwCitkZGFkZDc3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMAorZGRhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitkZGFkZDc3MzYgYWRkICAxICAgIC0xICAgICAtPiAgMAorZGRhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTIKK2RkYWRkNzczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyCitkZGFkZDc3MzkgYWRkIC0xICAgICAxICAgICAtPiAgMAorCitkZGFkZDc3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQorZGRhZGQ3NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTEKK2RkYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxCitkZGFkZDc3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQorZGRhZGQ3NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTEKK2RkYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xCitkZGFkZDc3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQorZGRhZGQ3NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDEKKworZGRhZGQ3NzUxIGFkZCAgMC4wICAtMSAgICAgLT4gLTEuMAorZGRhZGQ3NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMAorZGRhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMAorZGRhZGQ3NzU0IGFkZCAtMC4wICAgMSAgICAgLT4gIDEuMAorZGRhZGQ3NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMAorZGRhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMAorZGRhZGQ3NzU3IGFkZCAgMS4wICAgMCAgICAgLT4gIDEuMAorZGRhZGQ3NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkZGFkZDc3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wCitkZGFkZDc3NjIgYWRkIC0wICAgIC0xLjAgICAtPiAtMS4wCitkZGFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wCitkZGFkZDc3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wCitkZGFkZDc3NjUgYWRkIC0xICAgICAwLjAgICAtPiAtMS4wCitkZGFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wCitkZGFkZDc3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wCitkZGFkZDc3NjggYWRkICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2RkYWRkNzc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2RkYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2RkYWRkNzc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RkYWRkNzc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2RkYWRkNzc4MCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZGFkZDc3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4MyBhZGQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4NiBhZGQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4OSBhZGQgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5MiBhZGQgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZGFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGFkZDc4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkYWRkNzgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkYWRkNzgyMyBhZGQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkYWRkNzgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkYWRkNzgyNiBhZGQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkYWRkNzgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkYWRkNzgyOSBhZGQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzMiBhZGQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzNSBhZGQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRhZGQ3ODQxIGFkZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ0IGFkZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ3IGFkZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODUwIGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODUzIGFkZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU2IGFkZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU5IGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRhZGQ3ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RkYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZGFkZDc4NjMgYWRkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZGRhZGQ3ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RkYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZGFkZDc4NjYgYWRkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZGRhZGQ3ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RkYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZGFkZDc4NjkgYWRkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RkYWRkNzg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3MyBhZGQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3NiBhZGQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg3OSBhZGQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg4MiBhZGQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZGRhZGQ3ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZGFkZDc4ODUgYWRkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitkZGFkZDc1NzUgYWRkICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2RkYWRkNzU3NiBhZGQgLTFFLTM4MyArMUUtMzk4IC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorCistLSBhbmQgYW5vdGhlciBjdXJpb3VzIGNhc2UKK2RkYWRkNzU3NyBhZGQgNy4wMDAwMDAwMDAwMDBFLTM4NSAtMS4wMDAwMEUtMzkxIC0+IDYuOTk5OTk5MDAwMDAwRS0zODUgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFkZDc5NzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRhZGQ3OTczIGFkZCAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzYgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc3IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3OCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzkgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgwIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4MSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4MyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGFkZDc5ODYgYWRkICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODggYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4OSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTEgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5MiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTZFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTQgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTk1IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtM0UrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorZGRhZGQ3MTEwMCBhZGQgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwMSBhZGQgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDMgYWRkICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwNCBhZGQgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwNSBhZGQgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDYgYWRkIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwNyBhZGQgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwOCBhZGQgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMDkgYWRkIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZGRhZGQ3MTExMCBhZGQgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTEgYWRkIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExMyBhZGQgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExNCBhZGQgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTUgYWRkIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExNiBhZGQgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExNyBhZGQgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkYWRkNzExMTggYWRkIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExOSBhZGQgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCitkZGFkZDcxMzAwIGFkZCAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxMCBhZGQgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTEgYWRkIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzEyIGFkZCAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxMyBhZGQgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTQgYWRkIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE1IGFkZCAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzIxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI0IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyNSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjYgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzMwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzMzIGFkZCAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzNCBhZGQgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzUgYWRkIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM2IGFkZCAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzNyBhZGQgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzggYWRkIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM5IGFkZCAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCitkZGFkZDcxMzQwIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM0MSBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ3MTM0OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzUwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzUzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzYyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzcyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzkwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzkzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzk2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RkYWRkNzE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitkZGFkZDcxNDI4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkYWRkNzE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRhZGQ3MTQzMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZGRhZGQ3MTQzMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRhZGQ3MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRhZGQ3MTQzMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZGRhZGQ3MTQzNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRhZGQ3MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRhZGQ3MTQzNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZGRhZGQ3MTQzNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRhZGQ3MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRhZGQ3MTQzOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCByZXZlcnNlZCAwCitkZGFkZDcxNDQwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQ0NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkYWRkNzE0NDggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitkZGFkZDcxNDQ5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRhZGQ3MTQ1MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGFkZDcxNDUxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RkYWRkNzE0NTIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRhZGQ3MTQ1MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGFkZDcxNDU0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RkYWRkNzE0NTUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRhZGQ3MTQ1NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGFkZDcxNDU3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RkYWRkNzE0NTggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRhZGQ3MTQ1OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitkZGFkZDcxNDYwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDYxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDYyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDYzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDY5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDcwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDcxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDcyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDczIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDc0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDc1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitkZGFkZDcxNDc2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRhZGQ3MTQ3OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGFkZDcxNDc5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNTAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE1MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNTEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNTIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE1MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNTMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNTQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE1NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNTUyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTU3MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1NzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNTgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE1OTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNTkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNjAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNjExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTYxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNjIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZGRhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RkYWRkNzE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKK2RkYWRkNzE2MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZGRhZGQ3MTcwMSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkZGFkZDcxNzAyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2RkYWRkNzE3MDMgYWRkIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZGRhZGQ3MTcwNCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkZGFkZDcxNzA1IGFkZCAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTAKK2RkYWRkNzE3MDYgYWRkIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAorZGRhZGQ3MTcwNyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkZGFkZDcxNzA4IGFkZCAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMKKworLS0gcXVlcnkgZnJvbSBWaW5jZW50IEt1bGFuZGFpc2FteQorcm91bmRpbmc6IGNlaWxpbmcKK2RkYWRkNzE4MDEgIGFkZCAgNy44ODIyNzczODA1ODYyRSsyNzcgICAgLTUuMTc1NzUwMzgyMDY2M0UtMjEgLT4gNy44ODIyNzczODA1ODYyMDBFKzI3NyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzE4MDIgIGFkZCAgNy44ODIyNzczODA1ODYyMDBFKzI3NyAgMTIuMzQxICAgICAgICAgICAgICAgLT4gNy44ODIyNzczODA1ODYyMDFFKzI3NyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzE4MDMgIGFkZCAgNy44ODIyNzczODA1ODYyMDFFKzI3NyAgMi43MjcwNTQ1MDQ2NjEzRS0zMSAgLT4gNy44ODIyNzczODA1ODYyMDJFKzI3NyBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ3MTgxMSAgYWRkICAgICAgICAgICAgICAgICAgIDEyLjM0MSAtNS4xNzU3NTAzODIwNjYzRS0yMSAtPiAxMi4zNDEwMDAwMDAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgxMiAgYWRkICAgICAgICAxMi4zNDEwMDAwMDAwMDAwMCAyLjcyNzA1NDUwNDY2MTNFLTMxICAtPiAxMi4zNDEwMDAwMDAwMDAwMSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgxMyAgYWRkICAgICAgICAxMi4zNDEwMDAwMDAwMDAwMSA3Ljg4MjI3NzM4MDU4NjJFKzI3NyAtPiA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3IEluZXhhY3QgUm91bmRlZAorCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkYWRkNzUwMDEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcKK2RkYWRkNzUwMDIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDEwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDEzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMjAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAyMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RkYWRkNzUwMzAgYWRkIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5CitkZGFkZDc1MDMxIGFkZCAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCitkZGFkZDc1MDMyIGFkZCAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMgorZGRhZGQ3NTAzMyBhZGQgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzCitkZGFkZDc1MDM0IGFkZCAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CitkZGFkZDc1MDM1IGFkZCAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQorZGRhZGQ3NTAzNiBhZGQgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2CitkZGFkZDc1MDM3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CitkZGFkZDc1MDM4IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OAorZGRhZGQ3NTAzOSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQwIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDEgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0MiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQzIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDQgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0OCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitkZGFkZDc1MDUwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDUzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDU2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDY0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDY3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZGRhZGQ3NTA3MCBhZGQgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEKK2RkYWRkNzUwNzEgYWRkIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3MiBhZGQgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDczIGFkZCAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzQgYWRkIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NSBhZGQgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc2IGFkZCAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzcgYWRkIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3OCBhZGQgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc5IGFkZCAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODAgYWRkIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MSBhZGQgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDgyIGFkZCAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODMgYWRkIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4NCBhZGQgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg1IGFkZCAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODYgYWRkIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4NyBhZGQgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg4IGFkZCAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODkgYWRkIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBQdW5pdCdzCitkZGFkZDc1MTAwIGFkZCAxLjAwMCAtMjAwLjAwMCAgICAgICAgICAgICAgICAgICAtPiAtMTk5LjAwMAorCistLSBSb3VuZGluZyBzd2F0aGUKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkYWRkODExMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODExMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZGRhZGQ4MTIwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTIwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZGRhZGQ4MTMwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTMwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitkZGFkZDgxNDAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNDAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGFkZDgxNTAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNTAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworZGRhZGQ4MTYwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTYwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorZGRhZGQ4MTcwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTcwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAwNXVwCitkZGFkZDgxODAwIGFkZCAgLjIwMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIwICBSb3VuZGVkCitkZGFkZDgxODAxIGFkZCAgLjIwMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDIgYWRkICAuMjAxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwMyBhZGQgIC4yMDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODA0IGFkZCAgLjIwNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDcgYWRkICAuMjA2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwOCBhZGQgIC4yMDcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODA5IGFkZCAgLjIwOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MTEgYWRkIC0uMjA5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkODE5MDAgYWRkICAuMjEwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIFJvdW5kZWQKK2RkYWRkODE5MDEgYWRkICAuMjEwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwMiBhZGQgIC4yMTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTAzIGFkZCAgLjIxNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDQgYWRkICAuMjE1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwNyBhZGQgIC4yMTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTA4IGFkZCAgLjIxNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDkgYWRkICAuMjE5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkxMSBhZGQgLS4yMTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkODIwMDAgYWRkICAuMjQwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIFJvdW5kZWQKK2RkYWRkODIwMDEgYWRkICAuMjQwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwMiBhZGQgIC4yNDEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDAzIGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDQgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwNyBhZGQgIC4yNDYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDA4IGFkZCAgLjI0NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDkgYWRkICAuMjQ5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAxMSBhZGQgLS4yNDk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkODIxMDAgYWRkICAuMjUwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIFJvdW5kZWQKK2RkYWRkODIxMDEgYWRkICAuMjUwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwMiBhZGQgIC4yNTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTAzIGFkZCAgLjI1NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDQgYWRkICAuMjU1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwNyBhZGQgIC4yNTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTA4IGFkZCAgLjI1NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDkgYWRkICAuMjU5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjExMSBhZGQgLS4yNTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkODIyMDAgYWRkICAuMjYwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIFJvdW5kZWQKK2RkYWRkODIyMDEgYWRkICAuMjYwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwMiBhZGQgIC4yNjEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjAzIGFkZCAgLjI2NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDQgYWRkICAuMjY1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwNyBhZGQgIC4yNjYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjA4IGFkZCAgLjI2NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDkgYWRkICAuMjY5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIxMSBhZGQgLS4yNjk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkODIzMDAgYWRkICAuMjkwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIFJvdW5kZWQKK2RkYWRkODIzMDEgYWRkICAuMjkwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwMiBhZGQgIC4yOTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzAzIGFkZCAgLjI5NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDQgYWRkICAuMjk1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwNyBhZGQgIC4yOTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzA4IGFkZCAgLjI5NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDkgYWRkICAuMjk5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMxMSBhZGQgLS4yOTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RkYWRkOTk5MCBhZGQgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDk5OTEgYWRkICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQW5kLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdAppbmRleCA2NzY1MTc1Li42NGE5ZjkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdApAQCAtMSwzNDcgKzEsMzQ3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KLWRkYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KLWRkYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMA0KLWRkYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMA0KLWRkYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KLWRkYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMA0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRkYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZGRhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kZGFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZGRhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kZGFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRkYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KLWRkYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExDQotZGRhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTENCi1kZGFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KLWRkYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExDQotZGRhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTENCi1kZGFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KLWRkYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExDQotZGRhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTENCi1kZGFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KLWRkYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExDQotZGRhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTENCi1kZGFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KLWRkYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExDQotZGRhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTENCi1kZGFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KLWRkYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZGRhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQ0KLWRkYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTENCi1kZGFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExDQotZGRhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQ0KLWRkYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTENCi1kZGFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExDQotZGRhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQ0KLWRkYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTENCi1kZGFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExDQotZGRhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQ0KLWRkYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTENCi1kZGFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExDQotZGRhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQ0KLWRkYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTENCi1kZGFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExDQotZGRhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQ0KLWRkYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDENCi1kZGFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZGRhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxDQotZGRhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxDQotZGRhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxDQotZGRhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxDQotDQotZGRhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwDQotZGRhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwDQotZGRhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwDQotZGRhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwDQotDQotZGRhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxDQotZGRhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxDQotZGRhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxDQotZGRhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxDQotZGRhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxDQotZGRhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxDQotZGRhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxDQotZGRhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxDQotZGRhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxDQotZGRhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxDQotDQotZGRhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwDQotZGRhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwDQotZGRhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwDQotZGRhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwDQotZGRhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwDQotZGRhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwDQotZGRhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwDQotZGRhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwDQotZGRhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwDQotZGRhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwDQotDQotZGRhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExDQotZGRhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExDQotZGRhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExDQotZGRhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExDQotZGRhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExDQotZGRhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExDQotZGRhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExDQotZGRhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxDQotZGRhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQotDQotZGRhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExDQotZGRhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExDQotZGRhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExDQotZGRhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExDQotZGRhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQotZGRhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExDQotZGRhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExDQotZGRhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxDQotZGRhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZGRhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRkYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZGRhbmQyNTAgYW5kICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjUxIGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1MiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTMgYW5kICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjU0IGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1NSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTYgYW5kICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjU3IGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI1OCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNTkgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjYwIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI2MSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNjIgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjYzIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI2NCBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNjUgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kZGFuZDI3MCBhbmQgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNzEgYW5kICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjcyIGFuZCAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI3MyBhbmQgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNzQgYW5kICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjc1IGFuZCAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI3NiBhbmQgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyNzcgYW5kICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZGRhbmQyODAgYW5kICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjgxIGFuZCAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI4MiBhbmQgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyODMgYW5kICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjg0IGFuZCAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI4NSBhbmQgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyODYgYW5kICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjg3IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWRkYW5kMjg4IGFuZCAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI4OSBhbmQgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTAgYW5kICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjkxIGFuZCAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5MiBhbmQgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTMgYW5kICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjk0IGFuZCAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5NSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kZGFuZDI5NiBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMjk3IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQyOTggYW5kICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDI5OSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlDQotZGRhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDMzMiBhbmQgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzMzQgYW5kICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDMzNSBhbmQgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzMzcgYW5kICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDIgYW5kICAxRS0xOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM0MyBhbmQgIDEuMDAwMDAwMDBFLTE5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzQ0IGFuZCAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDUgYW5kICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM0NiBhbmQgIC0xLjAwMDAwMDAwRS0xOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzQ3IGFuZCAgLTFFLTE5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrMTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1kZGFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kMzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotZGRhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kNzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRhbmQ4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQW5kLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgQU5EIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZGFuZDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RkYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAorZGRhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwCitkZGFuZDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2RkYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDA4IGFuZCAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDExIGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhbmQwMjEgYW5kIDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2RkYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkZGFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZGRhbmQwMjYgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2RkYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkZGFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZGRhbmQwMjkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2RkYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkZGFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZGRhbmQwMzIgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2RkYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkZGFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZGRhbmQwMzUgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2RkYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkZGFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZGRhbmQwMzggYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2RkYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2RkYW5kMDQwIGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gIDExMTExMTExMTExMTExMTEKK2RkYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RkYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RkYW5kMDQzIGFuZCAgIDExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgMTExMTExMTExMTExMTEKK2RkYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTEKK2RkYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTEKK2RkYW5kMDQ2IGFuZCAgICAgIDExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgMTExMTExMTExMTEKK2RkYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTEKK2RkYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTEKK2RkYW5kMDQ5IGFuZCAgICAgICAgIDExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgMTExMTExMTEKK2RkYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTEKK2RkYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTEKK2RkYW5kMDUyIGFuZCAgICAgICAgICAgIDExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgMTExMTEKK2RkYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTEKK2RkYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTEKK2RkYW5kMDU1IGFuZCAgICAgICAgICAgICAgIDExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgMTEKK2RkYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDEKK2RkYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDAKKworZGRhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQorZGRhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQorZGRhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxCitkZGFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2RkYW5kMTU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQorZGRhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxCisKK2RkYW5kMTYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorZGRhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorZGRhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDAKK2RkYW5kMTY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorZGRhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCitkZGFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDAKK2RkYW5kMTY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCitkZGFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKK2RkYW5kMTcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQorZGRhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCitkZGFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKK2RkYW5kMTc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQorZGRhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCitkZGFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKK2RkYW5kMTc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQorZGRhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCitkZGFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKKworZGRhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwCitkZGFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2RkYW5kMTgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAorZGRhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwCitkZGFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2RkYW5kMTg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAorZGRhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwCitkZGFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2RkYW5kMTg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAorZGRhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwCisKK2RkYW5kMDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorZGRhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCitkZGFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTEKK2RkYW5kMDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorZGRhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCitkZGFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTEKK2RkYW5kMDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorZGRhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCitkZGFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKKworZGRhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCitkZGFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKK2RkYW5kMTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQorZGRhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCitkZGFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2RkYW5kMTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQorZGRhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCitkZGFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKK2RkYW5kMTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RkYW5kMjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZGRhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZGFuZDI1MCBhbmQgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1MyBhbmQgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NCBhbmQgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1NyBhbmQgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1OCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI1OSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MiBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2MyBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2NCBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI2NSBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZGFuZDI3MCBhbmQgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MSBhbmQgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MiBhbmQgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3MyBhbmQgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NCBhbmQgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NSBhbmQgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NiBhbmQgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI3NyBhbmQgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGRhbmQyODAgYW5kICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODEgYW5kICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODIgYW5kICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODMgYW5kICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODQgYW5kICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODUgYW5kICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODYgYW5kICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyODcgYW5kICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RkYW5kMjg4IGFuZCAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg5IGFuZCAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkwIGFuZCAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkxIGFuZCAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkyIGFuZCAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjkzIGFuZCAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk0IGFuZCAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk1IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkZGFuZDI5NiBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTcgYW5kIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk4IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5OSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGRhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzMyIGFuZCAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS0xOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzQgYW5kICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM1IGFuZCAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzcgYW5kICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0MSBhbmQgIDkuOTk5OTk5OTlFKzE5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDIgYW5kICAxRS0xOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NCBhbmQgIDFFLTEwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDUgYW5kICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTE5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NyBhbmQgIC0xRS0xOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrMTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZGFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RkYW5kNzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRhbmQ4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYW5kODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRhbmQ4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0CmluZGV4IGZiZDZjY2QuLjQwZmViZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEJhc2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QKQEAgLTEsMTEwNCArMSwxMTA0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY0RvdWJsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcg0KLS0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pDQotDQotLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcNCi0tLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsDQotLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlDQotLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlDQotLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNEb3VibGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlDQotLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bw0KLS0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLg0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwDQotZGRiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxDQotZGRiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjANCi1kZGJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDANCi1kZGJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwDQotZGRiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwDQotZGRiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wDQotZGRiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xDQotZGRiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40DQotZGRiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41DQotZGRiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42DQotZGRiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45DQotZGRiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wDQotZGRiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0DQotZGRiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzDQotZGRiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyDQotZGRiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wDQotZGRiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjANCi1kZGJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDANCi0NCi1kZGJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTENCi1kZGJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMA0KLWRkYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xDQotZGRiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjENCi1kZGJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExDQotZGRiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5DQotZGRiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5DQotDQotZGRiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2Jw0KLWRkYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcNCi1kZGJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicNCi1kZGJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScNCi1kZGJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknDQotZGRiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03Jw0KLWRkYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcNCi0NCi1kZGJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0Jw0KLWRkYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnDQotDQotLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkNCi1kZGJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkYnNuMDAyIHRvU2NpIC0xRS0zODMgLT4gLTFFLTM4Mw0KLWRkYnNuMDAzIHRvU2NpIC0xRS0zOTggLT4gLTFFLTM5OCBTdWJub3JtYWwNCi1kZGJzbjAwNCB0b1NjaSAtMCAtPiAtMA0KLWRkYnNuMDA1IHRvU2NpICswIC0+ICAwDQotZGRic24wMDYgdG9TY2kgKzFFLTM5OCAtPiAgMUUtMzk4IFN1Ym5vcm1hbA0KLWRkYnNuMDA3IHRvU2NpICsxRS0zODMgLT4gIDFFLTM4Mw0KLWRkYnNuMDA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotDQotLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0NCi0tLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQNCi1kZGJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInDQotZGRiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicNCi1kZGJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnDQotZGRiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2Jw0KLWRkYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicNCi1kZGJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnDQotZGRiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3Jw0KLWRkYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnDQotZGRiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0Jw0KLWRkYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcNCi1kZGJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnDQotZGRiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScNCi1kZGJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScNCi1kZGJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnDQotZGRiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycNCi1kZGJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04Jw0KLWRkYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnDQotZGRiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnDQotZGRiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJw0KLWRkYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJw0KLWRkYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRkYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCi1kZGJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRkYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRkYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLWRkYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicNCi1kZGJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLS0tIGV4YW1wbGVzDQotZGRiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnDQotZGRiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJw0KLWRkYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnDQotDQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0NCi0NCi0tLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMNCi1kZGJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIuMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2MTIzICAtPiAxMjMuNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYxMjMgIC0+IDEyMzQuNTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDUuNjc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2MTIzICAtPiAxMjM0NTYuNzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYxMjMgIC0+IDEyMzQ1NjcuODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NjEyMyAgLT4gMTIzNDU2NzguOTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2MTIzICAtPiAxMjM0NTY3ODkuMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAuMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTAxMi4zNDU2MTIzICAtPiAxMjM0NTY3ODkwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MDEyMy40NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjMuNDU2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NS42MTIzICAtPiAxMjM0NTY3ODkwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1Ni4xMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MS4yMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDg5IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIuMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE3IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIzLiAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE4IEluZXhhY3QgUm91bmRlZA0KLQ0KLQ0KLS0tIE51bWJlcnMgd2l0aCBFDQotZGRiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcNCi1kZGJhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcNCi1kZGJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnDQotZGRiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnDQotZGRiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcNCi1kZGJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcNCi1kZGJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnDQotZGRiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnDQotZGRiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknDQotZGRiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5Jw0KLWRkYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KLWRkYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5Jw0KLWRkYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcNCi1kZGJhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScNCi1kZGJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScNCi1kZGJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScNCi1kZGJhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScNCi1kZGJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnDQotZGRiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknDQotZGRiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknDQotZGRiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknDQotZGRiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknDQotZGRiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJw0KLWRkYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5Jw0KLWRkYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5Jw0KLWRkYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcNCi1kZGJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KLWRkYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5Jw0KLWRkYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJw0KLWRkYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnDQotZGRiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknDQotZGRiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknDQotZGRiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnDQotZGRiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnDQotZGRiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnDQotZGRiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnDQotZGRiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJw0KLWRkYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScNCi1kZGJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInDQotZGRiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJw0KLQ0KLWRkYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScNCi1kZGJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJw0KLWRkYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcNCi1kZGJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1Jw0KLWRkYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScNCi1kZGJhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScNCi1kZGJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1Jw0KLWRkYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScNCi1kZGJhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnDQotZGRiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41Jw0KLWRkYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1Jw0KLWRkYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcNCi1kZGJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnDQotZGRiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcNCi0NCi1kZGJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnDQotZGRiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScNCi1kZGJhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnDQotZGRiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1Jw0KLWRkYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1Jw0KLWRkYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnDQotZGRiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1Jw0KLWRkYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScNCi1kZGJhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnDQotZGRiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnDQotZGRiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0Jw0KLWRkYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScNCi1kZGJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknDQotZGRiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScNCi0NCi1kZGJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnDQotZGRiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcNCi1kZGJhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnDQotZGRiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnDQotZGRiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScNCi1kZGJhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnDQotZGRiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1Jw0KLWRkYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScNCi1kZGJhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScNCi1kZGJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnDQotZGRiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1Jw0KLWRkYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicNCi1kZGJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJw0KLWRkYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInDQotDQotZGRiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScNCi1kZGJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnDQotZGRiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScNCi1kZGJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnDQotZGRiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnDQotZGRiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnDQotZGRiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnDQotZGRiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScNCi1kZGJhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcNCi1kZGJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScNCi1kZGJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicNCi1kZGJhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycNCi1kZGJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnDQotZGRiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJw0KLWRkYmFzMjQ0IHRvU2NpICIxMjY1RS05IiAgLT4gJzAuMDAwMDAxMjY1Jw0KLWRkYmFzMjQ1IHRvU2NpICIxMjY1RS0xMCIgLT4gJzEuMjY1RS03Jw0KLWRkYmFzMjQ2IHRvU2NpICIxMjY1RS0xMSIgLT4gJzEuMjY1RS04Jw0KLWRkYmFzMjQ3IHRvU2NpICIxMjY1RS0xMiIgLT4gJzEuMjY1RS05Jw0KLQ0KLWRkYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1Jw0KLWRkYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJw0KLWRkYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknDQotZGRiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1Jw0KLWRkYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1Jw0KLWRkYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnDQotZGRiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1Jw0KLWRkYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1Jw0KLWRkYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnDQotZGRiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScNCi1kZGJhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41Jw0KLWRkYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScNCi1kZGJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3Jw0KLWRkYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5Jw0KLQ0KLS0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10NCi1kZGJhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnDQotZGRiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcNCi1kZGJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcNCi1kZGJhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03Jw0KLWRkYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcNCi1kZGJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJw0KLWRkYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJw0KLWRkYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcNCi1kZGJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJw0KLWRkYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJw0KLQ0KLS0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzDQotZGRiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzDQotZGRiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTINCi1kZGJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTINCi1kZGJhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTINCi1kZGJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTENCi1kZGJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQ0KLWRkYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMA0KLWRkYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkNCi1kZGJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQ0KLWRkYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5DQotZGRiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgNCi1kZGJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNg0KLWRkYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3DQotZGRiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNg0KLWRkYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2DQotZGRiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYNCi1kZGJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQ0KLWRkYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszDQotZGRiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQNCi1kZGJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszDQotZGRiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMNCi1kZGJhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMw0KLWRkYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyDQotZGRiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDANCi1kZGJhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwDQotZGRiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMA0KLWRkYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wDQotZGRiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjANCi1kZGJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTANCi1kZGJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTANCi1kZGJhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwDQotZGRiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMA0KLWRkYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwDQotZGRiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTANCi1kZGJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTANCi1kZGJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTANCi1kZGJhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwDQotZGRiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMA0KLWRkYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwDQotZGRiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTANCi1kZGJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNw0KLWRkYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05DQotZGRiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgNCi1kZGJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05DQotZGRiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkNCi1kZGJhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQ0KLWRkYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMA0KLWRkYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMg0KLWRkYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQ0KLWRkYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyDQotZGRiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyDQotZGRiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyDQotDQotZGRiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyDQotZGRiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyDQotZGRiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExDQotZGRiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQ0KLWRkYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMA0KLWRkYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQ0KLWRkYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5DQotZGRiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkNCi1kZGJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOA0KLWRkYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYNCi1kZGJhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNw0KLWRkYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNg0KLWRkYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2DQotZGRiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYNCi1kZGJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQ0KLWRkYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMNCi1kZGJhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNA0KLWRkYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMw0KLWRkYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszDQotZGRiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMNCi1kZGJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMg0KLWRkYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDANCi1kZGJhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQ0KLWRkYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MA0KLWRkYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3DQotZGRiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcNCi1kZGJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43DQotZGRiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNw0KLWRkYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3DQotZGRiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcNCi1kZGJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcNCi1kZGJhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcNCi1kZGJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3DQotZGRiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNw0KLWRkYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3DQotZGRiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcNCi1kZGJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcNCi1kZGJhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcNCi1kZGJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNw0KLWRkYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkNCi1kZGJhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOA0KLWRkYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQ0KLWRkYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05DQotZGRiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkNCi1kZGJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTANCi1kZGJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMg0KLWRkYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQ0KLWRkYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTINCi1kZGJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTINCi1kZGJhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTINCi1kZGJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMNCi1kZGJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQ0KLQ0KLS0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uDQotcm91bmRpbmc6ICBoYWxmX3VwDQotZGRiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDANCi1kZGJhczQyMSAgdG9FbmcgICAgMTAwIC0+IDEwMA0KLWRkYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMA0KLWRkYmFzNDIzICB0b0VuZyAgIDEwMDAgLT4gMTAwMA0KLWRkYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45DQotZGRiYXM0MjUgIHRvRW5nICA5OTkuOSAtPiAgOTk5LjkNCi1kZGJhczQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMA0KLWRkYmFzNDI3ICB0b0VuZyAxMDAwLjAgLT4gMTAwMC4wDQotZGRiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjENCi1kZGJhczQyOSAgdG9FbmcgMTAwMC4xIC0+IDEwMDAuMQ0KLWRkYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMA0KLWRkYmFzNDMxICB0b0VuZyAxMDAwMCAtPiAxMDAwMA0KLWRkYmFzNDMyICB0b1NjaSAxMDAwMDAgLT4gMTAwMDAwDQotZGRiYXM0MzMgIHRvRW5nIDEwMDAwMCAtPiAxMDAwMDANCi1kZGJhczQzNCAgdG9TY2kgMTAwMDAwMCAtPiAxMDAwMDAwDQotZGRiYXM0MzUgIHRvRW5nIDEwMDAwMDAgLT4gMTAwMDAwMA0KLWRkYmFzNDM2ICB0b1NjaSAxMDAwMDAwMCAtPiAxMDAwMDAwMA0KLWRkYmFzNDM3ICB0b0VuZyAxMDAwMDAwMCAtPiAxMDAwMDAwMA0KLWRkYmFzNDM4ICB0b1NjaSAxMDAwMDAwMDAgLT4gMTAwMDAwMDAwDQotZGRiYXM0MzkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkDQotZGRiYXM0NDEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQNCi1kZGJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NDMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDQ0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ0NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDQ3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE3ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NDkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDUwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQNCi1kZGJhczQ1MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZA0KLWRkYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDU3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NTkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkDQotZGRiYXM0NjEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQNCi1kZGJhczQ2MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NjMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ2NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDY3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZA0KLWRkYmFzNDY5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkDQotZGRiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDcxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0DQotZGRiYXM0NzMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRkYmFzNDc0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTkgICBSb3VuZGVkIEluZXhhY3QNCi1kZGJhczQ3NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZGRic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I0MDIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRkYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MDcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kZGJzcjQxMCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MTMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRkYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDE2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDE5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kZGJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjQyMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQyNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRkYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDI3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRkYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I0MzMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotLS0gbmVnYXRpdmVzDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZGRic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZGRic3I1MDIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRkYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MDcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kZGJzcjUxMCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MTMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRkYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTE2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTE5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kZGJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kZGJzcjUyMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUyNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRkYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTI3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRkYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRkYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZGRic3I1MzMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kZGJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRkYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzDQotZGRiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotLS0gTmVhci1zcGVjaWFscw0KLWRkYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscw0KLWRkYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kZGJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZGRiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIFplcm9zDQotZGRiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQ0KLWRkYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgNCi1kZGJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03DQotZGRiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kZGJhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwDQotZGRiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZGRiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCi1kZGJhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwDQotZGRiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZGRiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZGRiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMA0KLWRkYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kZGJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMA0KLWRkYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjANCi1kZGJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRkYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KLWRkYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDANCi1kZGJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRkYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KLWRkYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03DQotZGRiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgNCi1kZGJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRkYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCi1kZGJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjANCi1kZGJhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZGRiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQ0KLWRkYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzINCi1kZGJhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszDQotZGRiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNA0KLWRkYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUNCi1kZGJhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQotZGRiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNw0KLQ0KLWRkYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRkYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDANCi1kZGJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxDQotZGRiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMg0KLWRkYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kZGJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0DQotZGRiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQ0KLWRkYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYNCi1kZGJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3DQotZGRiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOA0KLQ0KLWRkYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDANCi1kZGJhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxDQotZGRiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMg0KLWRkYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kZGJhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0DQotZGRiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQ0KLWRkYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYNCi1kZGJhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3DQotZGRiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOA0KLWRkYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCi0NCi1kZGJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjANCi1kZGJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZGRiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCi1kZGJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDANCi1kZGJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZGRiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kZGJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03DQotZGRiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOA0KLWRkYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kZGJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMA0KLQ0KLWRkYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kZGJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KLWRkYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMA0KLWRkYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRkYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcNCi1kZGJhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04DQotZGRiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRkYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwDQotZGRiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTENCi0NCi1kZGJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRkYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwDQotZGRiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDANCi1kZGJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMA0KLWRkYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwDQotZGRiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDANCi1kZGJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRkYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wDQotZGRiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDANCi1kZGJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFODQotZGRiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRkYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4NCi1kZGJhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFODQotZGRiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRkYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTg0KLWRkYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjENCi1kZGJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMg0KLWRkYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMw0KLWRkYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQNCi1kZGJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xDQotZGRiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTINCi1kZGJhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMNCi1kZGJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0DQotZGRiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQ0KLWRkYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyDQotZGRiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzDQotZGRiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNA0KLWRkYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kZGJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kZGJhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4NCi1kZGJhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4NCi1kZGJhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFODQotZGRiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFODQotZGRiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4NCi1kZGJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTg0KLWRkYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFODQotZGRiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTg0KLWRkYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43DQotZGRiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQNCi1kZGJhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRkYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRkYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1kZGJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCi1kZGJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5DQotZGRiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZGRiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZGRiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5DQotZGRiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5DQotDQotLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZw0KLWRkYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkNCi1kZGJhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFODQotZGRiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFODQotZGRiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRkYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZGRiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRkYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTg0KLQ0KLS0tIFplcm8gdG9FbmcsIGV0Yy4NCi1kZGJhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQ0KLQ0KLWRkYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQotZGRiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYNCi1kZGJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02DQotZGRiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwDQotZGRiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZGRiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwDQotZGRiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCi1kZGJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZGRiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRkYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwDQotZGRiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kZGJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTANCi1kZGJhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KLWRkYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRkYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDANCi1kZGJhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KLWRkYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRkYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDANCi1kZGJhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNg0KLWRkYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNg0KLWRkYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRkYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwDQotZGRiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KLWRkYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZGRiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMNCi1kZGJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszDQotZGRiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCi1kZGJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNg0KLWRkYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYNCi1kZGJhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNg0KLWRkYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5DQotDQotZGRiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRkYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwDQotZGRiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kZGJhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszDQotZGRiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kZGJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRkYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYNCi1kZGJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KLWRkYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5DQotZGRiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQ0KLQ0KLWRkYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwDQotZGRiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kZGJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszDQotZGRiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kZGJhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRkYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYNCi1kZGJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KLWRkYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5DQotZGRiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQ0KLWRkYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5DQotDQotZGRiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KLWRkYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZGRiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwDQotZGRiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KLWRkYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZGRiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwDQotZGRiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNg0KLWRkYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02DQotZGRiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kZGJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05DQotDQotZGRiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kZGJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDANCi1kZGJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQotZGRiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kZGJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDANCi1kZGJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02DQotZGRiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYNCi1kZGJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRkYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkNCi1kZGJhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQ0KLQ0KLS0tIGxvbmcgaW5wdXQgc3RyaW5ncw0KLWRkYmFzODAxIHRvc2NpICcwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA0IHRvc2NpICcwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA3IHRvc2NpICcwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLWRkYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODEyIHRvc2NpICcwLjAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODE1IHRvc2NpICcwLjAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDU2DQotZGRiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03DQotZGRiYXM4MTggdG9zY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS04DQotZGRiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQ0KLWRkYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMA0KLQ0KLWRkYmFzODIxIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzE5IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODIyIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczgyMyB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIxIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI0IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIyIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI1IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczgyNiB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI0IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI3IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI1IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzODI4IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI3IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cw0KLWRkYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5lZ2F0aXZlcyB0aGUgc2FtZQ0KLWRkYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZGRiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICB1cA0KLWRkYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGRvd24NCi1kZGJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kZGJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZGRiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogIGhhbGZfdXANCi1kZGJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kZGJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBoYWxmX2Rvd24NCi1kZGJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRkYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi0NCi0tLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMA0KLWRkYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMNCi1kZGJlbTQwMSB0b1NjaSAgMC4xRS0zOTQgICAgICAgIC0+IDFFLTM5NSAgICAgICBTdWJub3JtYWwNCi1kZGJlbTQwMiB0b1NjaSAgMC4xMDAwRS0zOTQgICAgIC0+IDEuMDAwRS0zOTUgICBTdWJub3JtYWwNCi1kZGJlbTQwMyB0b1NjaSAgMC4wMTAwRS0zOTQgICAgIC0+IDEuMDBFLTM5NiAgICBTdWJub3JtYWwNCi1kZGJlbTQwNCB0b1NjaSAgMC4wMDEwRS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgICBTdWJub3JtYWwNCi1kZGJlbTQwNSB0b1NjaSAgMC4wMDAxRS0zOTQgICAgIC0+IDFFLTM5OCAgICAgICBTdWJub3JtYWwNCi1kZGJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtMzk0ICAgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGJlbTQwNyB0b1NjaSAgMC4wMDAxM0UtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxMCB0b1NjaSAgMC4wMDAyM0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtMzk0ICAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTM5NCAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTM5NCAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQxOSB0b1NjaSAgMC4wMDAwOUUtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtMzk0ICAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmVtNDIxIHRvU2NpICAwLjAwMDAzRS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZGRiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTM5NSAgIC0+IDEuMTA3RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDUyIHRvU2NpICAxLjEwNzcwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDU1IHRvU2NpICAxLjEwODcwRS0zOTUgICAtPiAxLjEwOUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbWFrZSBzdXJlIHNpZ24gT0sNCi1kZGJlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTM5NCAgIC0+IC0xLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTM5NCAgIC0+IC0xLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAnOTk5cycgY2FzZXMNCi1kZGJlbTQ2NCB0b1NjaSAgOTk5OTk5RS0zOTUgICAgICAgICAtPiA5Ljk5OTk5RS0zOTAgU3Vibm9ybWFsDQotZGRiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTM5NCAgICAgICAgLT4gOS45OTk5MEUtMzkwIFN1Ym5vcm1hbA0KLWRkYmVtNDY2IHRvU2NpICA5OTk5OS5FLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkwICBTdWJub3JtYWwNCi1kZGJlbTQ2NyB0b1NjaSAgOTk5OS45RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MSAgU3Vibm9ybWFsDQotZGRiZW00NjggdG9TY2kgIDk5OS45OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTIgIFN1Ym5vcm1hbA0KLWRkYmVtNDY5IHRvU2NpICA5OS45OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkzICBTdWJub3JtYWwNCi1kZGJlbTQ3MCB0b1NjaSAgOS45OTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5NCAgU3Vibm9ybWFsDQotZGRiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTM5NCAgICAgICAgLT4gMS4wMDAwRS0zOTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTM5NCAgICAgICAtPiAxLjAwMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtMzk0ICAgICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTM5NCAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS0zOTQgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zDQotZGRiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCi1kZGJhczEwNDEgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NEUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NUUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NkUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBjbGFtcGVkIGxhcmdlIG5vcm1hbHMNCi1kZGJhczEwNzAgdG9TY2kgICAxRSszNjkgIC0+ICAxRSszNjkNCi1kZGJhczEwNzEgdG9TY2kgICAxRSszNzAgIC0+ICAxLjBFKzM3MCAgQ2xhbXBlZA0KLWRkYmFzMTA3MiB0b1NjaSAgIDFFKzM3OCAgLT4gIDEuMDAwMDAwMDAwRSszNzggIENsYW1wZWQNCi1kZGJhczEwNzMgdG9TY2kgICAxRSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQotZGRiYXMxMDc0IHRvU2NpICAgMUUrMzg1ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0NCi1kZGJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzM2OSAgQ2xhbXBlZA0KLWRkYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkDQotZGRiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSszNjkgIENsYW1wZWQNCi1kZGJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTM5OCAgQ2xhbXBlZA0KLQ0KLS0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcg0KLWRkYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRiYXMxMTAyIHRvU2NpIC0xRS02MTQzIC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRkYmFzMTEwMyB0b1NjaSAtMUUtNjE3NiAtPiAtMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1kZGJhczExMDQgdG9TY2kgLTAgLT4gLTANCi1kZGJhczExMDUgdG9TY2kgKzAgLT4gIDANCi1kZGJhczExMDYgdG9TY2kgKzFFLTYxNzYgLT4gIDBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZGRiYXMxMTA3IHRvU2NpICsxRS02MTczIC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRkYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY0RvdWJsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pCisKKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsCistLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUKKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNEb3VibGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvCistLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4KKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMAorZGRiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxCitkZGJhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMAorZGRiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitkZGJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitkZGJhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDAKK2RkYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorZGRiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitkZGJhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQKK2RkYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorZGRiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42CitkZGJhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkKK2RkYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorZGRiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0CitkZGJhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMKK2RkYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorZGRiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitkZGJhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMAorZGRiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2RkYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQorZGRiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjAKK2RkYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitkZGJhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorZGRiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQorZGRiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5CitkZGJhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworZGRiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2JworZGRiYXMwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJworZGRiYXMwMzIgdG9TY2kgICAnMTIzNDU2Nzg5MTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkxMjM0NTYnCitkZGJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScKK2RkYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScKK2RkYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1Njc4OScgICAtPiAnMS4yMzQ1Njc4OUUtNycKK2RkYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcKKworZGRiYXMwMzcgdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ0JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NCcKK2RkYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnCisKKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpCitkZGJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRic24wMDIgdG9TY2kgLTFFLTM4MyAtPiAtMUUtMzgzCitkZGJzbjAwMyB0b1NjaSAtMUUtMzk4IC0+IC0xRS0zOTggU3Vibm9ybWFsCitkZGJzbjAwNCB0b1NjaSAtMCAtPiAtMAorZGRic24wMDUgdG9TY2kgKzAgLT4gIDAKK2RkYnNuMDA2IHRvU2NpICsxRS0zOTggLT4gIDFFLTM5OCBTdWJub3JtYWwKK2RkYnNuMDA3IHRvU2NpICsxRS0zODMgLT4gIDFFLTM4MworZGRic24wMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorZGRiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworZGRiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKK2RkYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2RkYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2RkYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKK2RkYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2RkYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2RkYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCitkZGJhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitkZGJhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitkZGJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCitkZGJhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworZGRiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitkZGJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCitkZGJhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworZGRiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2RkYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnCitkZGJhczA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU4IHRvU2NpICIzNDU2NzguNTQzMjEwIiAtPiAnMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJworZGRiYXMwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MSB0b1NjaSAiKzM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZGRiYXMwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2NCB0b1NjaSAiLTM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RkYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RkYmFzMDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCistLSBleGFtcGxlcworZGRiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnCitkZGJhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnCitkZGJhczA2OSB0b1NjaSAiNUUtNyIgICAgICAgIC0+ICc1RS03JworCistLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQorCistLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMKK2RkYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzIgdG9TY2kgIDEuMjM0NTY3ODkwMTIzNDU2MTIzICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIuMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyMy40NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzUgdG9TY2kgIDEyMzQuNTY3ODkwMTIzNDU2MTIzICAtPiAxMjM0LjU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDUuNjc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1Ni43ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzggdG9TY2kgIDEyMzQ1NjcuODkwMTIzNDU2MTIzICAtPiAxMjM0NTY3Ljg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NjEyMyAgLT4gMTIzNDU2NzguOTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OS4wMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODEgdG9TY2kgIDEyMzQ1Njc4OTAuMTIzNDU2MTIzICAtPiAxMjM0NTY3ODkwLjEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMi4zNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2MTIzICAtPiAxMjM0NTY3ODkwMTIzLjQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NS42IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuMTIzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MS4yMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODkgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMi4zICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTcgSW5leGFjdCBSb3VuZGVkCitkZGJhczA5MCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEyMy4gIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxOCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBOdW1iZXJzIHdpdGggRQorZGRiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RkYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJworZGRiYXMxMzIgdG9TY2kgIjAuMDAwRS0zIiAgLT4gJzAuMDAwMDAwJworZGRiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnCitkZGJhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJworZGRiYXMxMzUgdG9TY2kgIjAuMDBFLTMiICAgLT4gJzAuMDAwMDAnCitkZGJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnCitkZGJhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycKK2RkYmFzMTM4IHRvU2NpICIrMEUrOSIgICAgIC0+ICcwRSs5JworZGRiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5JworZGRiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkZGJhczE0MSB0b1NjaSAiMWUrMDkiICAgICAtPiAnMUUrOScKK2RkYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcKK2RkYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5JworZGRiYXMxNDQgdG9TY2kgIjBFKzkiICAgICAgLT4gJzBFKzknCitkZGJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNDcgdG9TY2kgIjFlKzkwIiAgICAgLT4gJzFFKzkwJworZGRiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknCitkZGJhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScKK2RkYmFzMTUwIHRvU2NpICIxRTkiICAgICAgIC0+ICcxRSs5JworZGRiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknCitkZGJhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnCitkZGJhczE1MyB0b1NjaSAiMUUwMDkiICAgICAtPiAnMUUrOScKK2RkYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5JworZGRiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJworZGRiYXMxNTYgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RkYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5JworZGRiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnCitkZGJhczE1OSB0b1NjaSAiMC43M2UtNyIgICAtPiAnNy4zRS04JworZGRiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknCitkZGJhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScKK2RkYmFzMTYyIHRvU2NpICIxMEUrOSIgICAgIC0+ICcxLjBFKzEwJworZGRiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnCitkZGJhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScKK2RkYmFzMTY1IHRvU2NpICIxMEUrMDA5IiAgIC0+ICcxLjBFKzEwJworZGRiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJworZGRiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJworZGRiYXMxNjggdG9TY2kgIjEwMEUrOTAiICAgLT4gJzEuMDBFKzkyJworZGRiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJworCitkZGJhczE3MCB0b1NjaSAiMS4yNjUiICAgICAtPiAnMS4yNjUnCitkZGJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJworZGRiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04JworZGRiYXMxNzMgdG9TY2kgIjEuMjY1RS00IiAgLT4gJzAuMDAwMTI2NScKK2RkYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScKK2RkYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1JworZGRiYXMxNzYgdG9TY2kgIjEuMjY1RS0xIiAgLT4gJzAuMTI2NScKK2RkYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScKK2RkYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScKK2RkYmFzMTc5IHRvU2NpICIxLjI2NUUrMiIgIC0+ICcxMjYuNScKK2RkYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1JworZGRiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0JworZGRiYXMxODIgdG9TY2kgIjEuMjY1RSs4IiAgLT4gJzEuMjY1RSs4JworZGRiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcKKworZGRiYXMxOTAgdG9TY2kgIjEyLjY1IiAgICAgLT4gJzEyLjY1JworZGRiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScKK2RkYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycKK2RkYmFzMTkzIHRvU2NpICIxMi42NUUtNCIgIC0+ICcwLjAwMTI2NScKK2RkYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1JworZGRiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScKK2RkYmFzMTk2IHRvU2NpICIxMi42NUUtMSIgIC0+ICcxLjI2NScKK2RkYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScKK2RkYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScKK2RkYmFzMTk5IHRvU2NpICIxMi42NUUrMiIgIC0+ICcxMjY1JworZGRiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1JworZGRiYXMyMDIgdG9TY2kgIjEyLjY1RSs4IiAgLT4gJzEuMjY1RSs5JworZGRiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScKKworZGRiYXMyMTAgdG9TY2kgIjEyNi41IiAgICAgLT4gJzEyNi41JworZGRiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcKK2RkYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScKK2RkYmFzMjEzIHRvU2NpICIxMjYuNUUtNCIgIC0+ICcwLjAxMjY1JworZGRiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScKK2RkYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScKK2RkYmFzMjE2IHRvU2NpICIxMjYuNUUtMSIgIC0+ICcxMi42NScKK2RkYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScKK2RkYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1JworZGRiYXMyMTkgdG9TY2kgIjEyNi41RSsyIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1JworZGRiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2JworZGRiYXMyMjIgdG9TY2kgIjEyNi41RSs4IiAgLT4gJzEuMjY1RSsxMCcKK2RkYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInCisKK2RkYmFzMjMwIHRvU2NpICIxMjY1IiAgICAgLT4gJzEyNjUnCitkZGJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnCitkZGJhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1JworZGRiYXMyMzMgdG9TY2kgIjEyNjVFLTQiICAtPiAnMC4xMjY1JworZGRiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnCitkZGJhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScKK2RkYmFzMjM2IHRvU2NpICIxMjY1RS0xIiAgLT4gJzEyNi41JworZGRiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScKK2RkYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMzkgdG9TY2kgIjEyNjVFKzIiICAtPiAnMS4yNjVFKzUnCitkZGJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicKK2RkYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3JworZGRiYXMyNDIgdG9TY2kgIjEyNjVFKzgiICAtPiAnMS4yNjVFKzExJworZGRiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJworZGRiYXMyNDQgdG9TY2kgIjEyNjVFLTkiICAtPiAnMC4wMDAwMDEyNjUnCitkZGJhczI0NSB0b1NjaSAiMTI2NUUtMTAiIC0+ICcxLjI2NUUtNycKK2RkYmFzMjQ2IHRvU2NpICIxMjY1RS0xMSIgLT4gJzEuMjY1RS04JworZGRiYXMyNDcgdG9TY2kgIjEyNjVFLTEyIiAtPiAnMS4yNjVFLTknCisKK2RkYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZGRiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkZGJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZGRiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZGRiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkZGJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZGRiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZGRiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkZGJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZGRiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RkYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkZGJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkZGJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZGRiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RkYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RkYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkZGJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RkYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkZGJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkZGJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZGRiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkZGJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkZGJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZGRiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkZGJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RkYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkZGJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RkYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZGRiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkZGJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZGRiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkZGJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5CitkZGJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZGRiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RkYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4CitkZGJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZGRiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RkYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RkYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2CitkZGJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZGRiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RkYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkZGJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZGRiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZGRiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RkYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkZGJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZGRiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RkYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RkYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RkYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkZGJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZGRiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkZGJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RkYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RkYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RkYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkZGJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZGRiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkZGJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RkYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RkYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RkYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkZGJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZGRiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RkYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05CitkZGJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZGRiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZGRiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RkYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05CitkZGJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RkYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZGRiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkZGJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZGRiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkZGJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZGRiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkZGJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RkYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZGRiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZGRiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkZGJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RkYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5CitkZGJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZGRiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RkYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RkYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3CitkZGJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RkYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2CitkZGJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZGRiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RkYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RkYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0CitkZGJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RkYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkZGJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZGRiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RkYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RkYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkZGJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RkYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3CitkZGJhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZGRiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZGRiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZGRiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RkYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3CitkZGJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RkYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZGRiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZGRiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZGRiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RkYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3CitkZGJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RkYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZGRiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RkYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RkYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04CitkZGJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RkYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05CitkZGJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZGRiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkZGJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZGRiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkZGJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkZGJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RkYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZGRiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkZGJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorZGRiYXM0MjEgIHRvRW5nICAgIDEwMCAtPiAxMDAKK2RkYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZGRiYXM0MjMgIHRvRW5nICAgMTAwMCAtPiAxMDAwCitkZGJhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorZGRiYXM0MjUgIHRvRW5nICA5OTkuOSAtPiAgOTk5LjkKK2RkYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkZGJhczQyNyAgdG9FbmcgMTAwMC4wIC0+IDEwMDAuMAorZGRiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjEKK2RkYmFzNDI5ICB0b0VuZyAxMDAwLjEgLT4gMTAwMC4xCitkZGJhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2RkYmFzNDMxICB0b0VuZyAxMDAwMCAtPiAxMDAwMAorZGRiYXM0MzIgIHRvU2NpIDEwMDAwMCAtPiAxMDAwMDAKK2RkYmFzNDMzICB0b0VuZyAxMDAwMDAgLT4gMTAwMDAwCitkZGJhczQzNCAgdG9TY2kgMTAwMDAwMCAtPiAxMDAwMDAwCitkZGJhczQzNSAgdG9FbmcgMTAwMDAwMCAtPiAxMDAwMDAwCitkZGJhczQzNiAgdG9TY2kgMTAwMDAwMDAgLT4gMTAwMDAwMDAKK2RkYmFzNDM3ICB0b0VuZyAxMDAwMDAwMCAtPiAxMDAwMDAwMAorZGRiYXM0MzggIHRvU2NpIDEwMDAwMDAwMCAtPiAxMDAwMDAwMDAKK2RkYmFzNDM5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkCitkZGJhczQ0MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZAorZGRiYXM0NDIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNyAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQKK2RkYmFzNDUzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkCitkZGJhczQ1NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NjEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQKK2RkYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDYzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTkgICBSb3VuZGVkCitkZGJhczQ2OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorCistLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQKK3JvdW5kaW5nOiAgY2VpbGluZworZGRic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQwMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkZGJzcjQwNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RkYnNyNDEwICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MTEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MTYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDE3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTkgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDIyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RkYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MjcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJzcjQzMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQzMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MzQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CistLSBuZWdhdGl2ZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZGRic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUwMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkZGJzcjUwNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RkYnNyNTEwICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MTEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MTYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTE3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTkgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTIyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RkYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MjcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJzcjUzMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUzMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MzQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMKK2RkYmFzNTAwIHRvU2NpICcxLi4yJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTAzIHRvU2NpICcrKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA2IHRvU2NpICcrLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA5IHRvU2NpICcxMmY0JyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTEyIHRvU2NpICcxMiAnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE1IHRvU2NpICd4JyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE4IHRvU2NpICczKycgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIxIHRvU2NpICc3ZTk5OTk5YScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI0IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI3IHRvU2NpICdcdTBiNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMwIHRvU2NpICcuMTIzLjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMzIHRvU2NpICcwMDAwLi4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM2IHRvU2NpICcxMTFlKjEyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM5IHRvU2NpICcxMTFlMS0zLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQyIHRvU2NpICcxZTEuMCcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ1IHRvU2NpICdPTkUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ4IHRvU2NpICcxZWUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUxIHRvU2NpICcxLjIuMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU0IHRvU2NpICcxRSsrMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU3IHRvU2NpICcxRS0rMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYwIHRvU2NpICIxRSIiIiIiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorLS0gTmVhci1zcGVjaWFscworZGRiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2MiB0b1NjaSAiTmFOcSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NSB0b1NjaSAiSW5maW4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2OCB0b1NjaSAiLUluZmluaXQiICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MSB0b1NjaSAiLTBJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3NCB0b1NjaSAieE5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBzb21lIGJhZGRpZXMgd2l0aCBkb3RzIGFuZCBFcyBhbmQgZG90cyBhbmQgc3BlY2lhbHMKK2RkYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc4IHRvU2NpICAnKy5lKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgxIHRvU2NpICAnRSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTg0IHRvU2NpICAnLS5FKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZGRiYXM1ODYgdG9TY2kgICcuTmFOJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODkgdG9TY2kgICcrLkluZicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBaZXJvcworZGRiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZGRiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOAorZGRiYXM2MDMgdG9TY2kgMC4wMDAwMDAwICAgICAgICAgLT4gMEUtNworZGRiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzNjA2IHRvU2NpIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjA5IHRvU2NpIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwCitkZGJhczYxMiB0b1NjaSAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMAorZGRiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZGRiYXM2MTUgdG9TY2kgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RkYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZGRiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZGRiYXM2MTggdG9TY2kgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RkYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZGRiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcKK2RkYmFzNjIxIHRvU2NpIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wRS04CitkZGJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkZGJhczYzMCB0b1NjaSAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkZGJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RkYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RkYmFzNjMzIHRvU2NpICAwLjAwRSszICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjM2IHRvU2NpICAwLjAwRSs2ICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjM5IHRvU2NpICAwLjAwRSs5ICAgICAgICAgIC0+IDBFKzcKKworZGRiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkZGJhczY0MSB0b1NjaSAgMC4wRSsxICAgICAgICAgICAtPiAwCitkZGJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxCitkZGJhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyCitkZGJhczY0NCB0b1NjaSAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkZGJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0CitkZGJhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1CitkZGJhczY0NyB0b1NjaSAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitkZGJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3CitkZGJhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4CisKK2RkYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDAKK2RkYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjUyIHRvU2NpICAwRSsyICAgICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjU1IHRvU2NpICAwRSs1ICAgICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcKK2RkYmFzNjU4IHRvU2NpICAwRSs4ICAgICAgICAgICAgIC0+IDBFKzgKK2RkYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZGRiYXM2NjAgdG9TY2kgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkZGJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkZGJhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2NjMgdG9TY2kgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2NjYgdG9TY2kgIDAuMEUtNiAgICAgICAgICAgLT4gMEUtNworZGRiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOAorZGRiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZGRiYXM2NjkgdG9TY2kgIDAuMEUtOSAgICAgICAgICAgLT4gMEUtMTAKKworZGRiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZGRiYXM2NzEgdG9TY2kgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXM2NzQgdG9TY2kgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcKK2RkYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgKK2RkYmFzNjc3IHRvU2NpICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RkYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwCitkZGJhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQorCitkZGJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjgyIHRvU2NpICAgIDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjg1IHRvU2NpICAgICAgIDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTAKK2RkYmFzNjg4IHRvU2NpICArMC4gICAgICAgICAgICAgIC0+ICAwCitkZGJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMAorCistLSBTcGVjaWFscworZGRiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzAyIHRvU2NpICJuQW4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA1IHRvU2NpICIrbmFuIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA4IHRvU2NpICItTmFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzExIHRvU2NpICItTkFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MTQgdG9TY2kgJ05hTjEyJyAgICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MTcgdG9TY2kgJ05hTjAxJyAgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MjAgdG9TY2kgJ05hTjAxMjM0JyAgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzIzIHRvU2NpICdOYU4wMDEyMycgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjYgdG9TY2kgJ05hTjEyM2UrMScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjkgdG9TY2kgJ05hTisxMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RkYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMxIHRvU2NpICJzbmFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM0IHRvU2NpICIrc05hTiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM3IHRvU2NpICIrU05BTiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTgorZGRiYXM3NDAgdG9TY2kgIi1TbkFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFOCitkZGJhczc0MyB0b1NjaSAnc05hTjcnICAgICAgICAgICAtPiBzTmFONworZGRiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQKK2RkYmFzNzQ1IHRvU2NpICdzTmFONzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczc0NiB0b1NjaSAnc05hTjcyLjQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkZGJhczc0OCB0b1NjaSAiSW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1MSB0b1NjaSAiSU5GIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1NCB0b1NjaSAiK2lOZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NTcgdG9TY2kgIi1pbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkZGJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzYyIHRvU2NpICJpTmZJbkl0WSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY1IHRvU2NpICIraW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY4IHRvU2NpICItSW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzcxIHRvU2NpICItSU5GSU5JVFkiICAgICAgIC0+IC1JbmZpbml0eQorCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nCitkZGJhc3Q3NzIgdG9FbmcgIk5hTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzdDc3NSB0b0VuZyAiLU5hTiIgICAgICAgICAgICAgLT4gLU5hTgorZGRiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3NzkgdG9FbmcgIitOYU4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODIgdG9FbmcgIk5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODUgdG9FbmcgIm5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODggdG9FbmcgIm5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3OTEgdG9FbmcgIk5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFOCisKKy0tIFplcm8gdG9FbmcsIGV0Yy4KK2RkYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlCisKK2RkYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkZGJhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNgorZGRiYXN0ODAzIHRvRW5nIDAuMDAwMDAwMCAgICAgICAgIC0+IDAuMEUtNgorZGRiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXN0ODA2IHRvRW5nIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkZGJhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODA5IHRvRW5nIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RkYmFzdDgxMiB0b0VuZyAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RkYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhc3Q4MTUgdG9FbmcgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RkYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RkYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkZGJhc3Q4MTggdG9FbmcgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RkYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RkYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02CitkZGJhc3Q4MjEgdG9FbmcgLTAuMDAwMDAwMDAgICAgICAgLT4gLTAuMDBFLTYKK2RkYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkZGJhc3Q4MzAgdG9FbmcgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RkYmFzdDgzMyB0b0VuZyAgMC4wMEUrMyAgICAgICAgICAtPiAwLjAwRSszCitkZGJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszCitkZGJhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZGRiYXN0ODM2IHRvRW5nICAwLjAwRSs2ICAgICAgICAgIC0+IDAuMDBFKzYKK2RkYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYKK2RkYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2CitkZGJhc3Q4MzkgdG9FbmcgIDAuMDBFKzkgICAgICAgICAgLT4gMC4wMEUrOQorCitkZGJhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4NDEgdG9FbmcgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZGRiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMKK2RkYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMKK2RkYmFzdDg0NCB0b0VuZyAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkZGJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNgorZGRiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNgorZGRiYXN0ODQ3IHRvRW5nICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5CitkZGJhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5CisKK2RkYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwCitkZGJhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMworZGRiYXN0ODUyIHRvRW5nICAwRSsyICAgICAgICAgICAgIC0+IDAuMEUrMworZGRiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2CitkZGJhc3Q4NTUgdG9FbmcgIDBFKzUgICAgICAgICAgICAgLT4gMC4wRSs2CitkZGJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZGRiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkKK2RkYmFzdDg1OCB0b0VuZyAgMEUrOCAgICAgICAgICAgICAtPiAwLjBFKzkKK2RkYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RkYmFzdDg2MCB0b0VuZyAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RkYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDg2MyB0b0VuZyAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDg2NiB0b0VuZyAgMC4wRS02ICAgICAgICAgICAtPiAwLjBFLTYKK2RkYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZGRiYXN0ODY5IHRvRW5nICAwLjBFLTkgICAgICAgICAgIC0+IDAuMEUtOQorCitkZGJhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODcxIHRvRW5nICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkZGJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkZGJhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXN0ODc0IHRvRW5nICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02CitkZGJhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNgorZGRiYXN0ODc3IHRvRW5nICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RkYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkKK2RkYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05CisKKy0tIGxvbmcgaW5wdXQgc3RyaW5ncworZGRiYXM4MDEgdG9zY2kgJzAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwMiB0b3NjaSAnMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MDQgdG9zY2kgJzAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNSB0b3NjaSAnMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MDcgdG9zY2kgJzAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwOCB0b3NjaSAnMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2RkYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTIgdG9zY2kgJzAuMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODEzIHRvc2NpICcwLjAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTUgdG9zY2kgJzAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE2IHRvc2NpICcwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03CitkZGJhczgxOCB0b3NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTgKK2RkYmFzODE5IHRvc2NpICcwLjAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTkKK2RkYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMAorCitkZGJhczgyMSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsxOSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODIyIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMCBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODIzIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjEgSW5leGFjdCBSb3VuZGVkCitkZGJhczgyNCB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI1IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI2IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjQgSW5leGFjdCBSb3VuZGVkCitkZGJhczgyNyB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI4IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI5IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworZGRiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitkZGJhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogIGNlaWxpbmcKK2RkYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkZGJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZGRiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorZGRiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkZGJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkZGJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RkYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMKK2RkYmVtNDAxIHRvU2NpICAwLjFFLTM5NCAgICAgICAgLT4gMUUtMzk1ICAgICAgIFN1Ym5vcm1hbAorZGRiZW00MDIgdG9TY2kgIDAuMTAwMEUtMzk0ICAgICAtPiAxLjAwMEUtMzk1ICAgU3Vibm9ybWFsCitkZGJlbTQwMyB0b1NjaSAgMC4wMTAwRS0zOTQgICAgIC0+IDEuMDBFLTM5NiAgICBTdWJub3JtYWwKK2RkYmVtNDA0IHRvU2NpICAwLjAwMTBFLTM5NCAgICAgLT4gMS4wRS0zOTcgICAgIFN1Ym5vcm1hbAorZGRiZW00MDUgdG9TY2kgIDAuMDAwMUUtMzk0ICAgICAtPiAxRS0zOTggICAgICAgU3Vibm9ybWFsCitkZGJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtMzk0ICAgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkYmVtNDA3IHRvU2NpICAwLjAwMDEzRS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MDggdG9TY2kgIDAuMDAwMTVFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEwIHRvU2NpICAwLjAwMDIzRS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtMzk0ICAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtMzk0ICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTM5NCAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE5IHRvU2NpICAwLjAwMDA5RS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTM5NCAgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDIxIHRvU2NpICAwLjAwMDAzRS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RkYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtMzk0ICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTM5NCAgIC0+IDEuMUUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtMzk0ICAgLT4gMS4xRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtMzk0ICAgLT4gMS4wMUUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTM5NCAgIC0+IDEuMDJFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtMzk0ICAgLT4gMS4wMkUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtMzk0ICAgIC0+IDEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQxIHRvU2NpICAwLjEwMTA1RS0zOTQgICAgLT4gMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQ0IHRvU2NpICAwLjEwMTE1RS0zOTQgICAgLT4gMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkYmVtNDUwIHRvU2NpICAxLjEwNzMwRS0zOTUgICAtPiAxLjEwN0UtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDUzIHRvU2NpICAxLjEwODMwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTM5NSAgIC0+IDEuMTA5RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RkYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtMzk0ICAgLT4gLTEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU3IHRvU2NpICAtMC4xMDEwNUUtMzk0ICAgLT4gLTEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDYwIHRvU2NpICAtMC4xMDExNUUtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkZGJlbTQ2NCB0b1NjaSAgOTk5OTk5RS0zOTUgICAgICAgICAtPiA5Ljk5OTk5RS0zOTAgU3Vibm9ybWFsCitkZGJlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtMzk0ICAgICAgICAtPiA5Ljk5OTkwRS0zOTAgU3Vibm9ybWFsCitkZGJlbTQ2NiB0b1NjaSAgOTk5OTkuRS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MCAgU3Vibm9ybWFsCitkZGJlbTQ2NyB0b1NjaSAgOTk5OS45RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MSAgU3Vibm9ybWFsCitkZGJlbTQ2OCB0b1NjaSAgOTk5Ljk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MiAgU3Vibm9ybWFsCitkZGJlbTQ2OSB0b1NjaSAgOTkuOTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MyAgU3Vibm9ybWFsCitkZGJlbTQ3MCB0b1NjaSAgOS45OTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5NCAgU3Vibm9ybWFsCitkZGJlbTQ3MSB0b1NjaSAgMC45OTk5OUUtMzk0ICAgICAgICAtPiAxLjAwMDBFLTM5NCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzIgdG9TY2kgIDAuMDk5OTk5RS0zOTQgICAgICAgLT4gMS4wMDBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtMzk0ICAgICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTM5NCAgICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzUgdG9TY2kgIDAuMDAwMDk5OTk5RS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtMzk0ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDc4IHRvU2NpICAwLjAwMDAwMDA5OTk5OUUtMzk0IC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RkYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ0RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRiYXMxMDQyIHRvU2NpICAgICAxLjExMTExMTExMTExNTI0NDVFLTM4NCAtPiAgMS4xMTExMTExMTExMTUyNEUtMzg0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NkUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCBsYXJnZSBub3JtYWxzCitkZGJhczEwNzAgdG9TY2kgICAxRSszNjkgIC0+ICAxRSszNjkKK2RkYmFzMTA3MSB0b1NjaSAgIDFFKzM3MCAgLT4gIDEuMEUrMzcwICBDbGFtcGVkCitkZGJhczEwNzIgdG9TY2kgICAxRSszNzggIC0+ICAxLjAwMDAwMDAwMEUrMzc4ICBDbGFtcGVkCitkZGJhczEwNzMgdG9TY2kgICAxRSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGJhczEwNzQgdG9TY2kgICAxRSszODUgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQorZGRiYXMxMDc1IHRvU2NpICAgMGUrMTAwMDAgIC0+ICAwRSszNjkgIENsYW1wZWQKK2RkYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkCitkZGJhczEwNzcgdG9TY2kgIC0wZSsxMDAwMCAgLT4gLTBFKzM2OSAgQ2xhbXBlZAorZGRiYXMxMDc4IHRvU2NpICAtMGUtMTAwMDAgIC0+IC0wRS0zOTggIENsYW1wZWQKKworLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyCitkZGJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMTAyIHRvU2NpIC0xRS02MTQzIC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTAzIHRvU2NpIC0xRS02MTc2IC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA0IHRvU2NpIC0wIC0+IC0wCitkZGJhczExMDUgdG9TY2kgKzAgLT4gIDAKK2RkYmFzMTEwNiB0b1NjaSArMUUtNjE3NiAtPiAgMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RkYmFzMTEwNyB0b1NjaSArMUUtNjE3MyAtPiAgMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RkYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENhbm9uaWNhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QKaW5kZXggODI0ZGU4My4uYjRmOWUzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QKQEAgLTEsMzU3ICsxLDM1NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY0RvdWJsZSBjYW5vbmljYWwgcmVzdWx0cyAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IGNvcHkgb3BlcmF0aW9ucyBsZWF2ZSB1bmNhbm9uaWNhbCBvcGVyYW5kcw0KLS0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2ENCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToNCi0tLSAgIGE9MSwyLDMNCi0tLSAgIGI9Niw3LGUsZg0KLS0tICAgYz1lLGYNCi0NCi0tLSBhc3NlcnQgc29tZSBzdGFuZGFyZCAoY2Fub25pY2FsKSB2YWx1ZXM7IHRoaXMgdGVzdHMgdGhhdCBGcm9tU3RyaW5nDQotLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pDQotZGRjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDAyIGFwcGx5IDAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDANCi1kZGNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQ0KLWRkY2FuMDA1IGFwcGx5IEluZmluaXR5ICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGRjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMDA4IGFwcGx5IC1zTmFOICAgICAgICAgICAgICAgICAgLT4gI2ZlMDAwMDAwMDAwMDAwMDANCi1kZGNhbjAwOSBhcHBseSBOYU45OTk5OTk5OTk5OTk5OTkgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OSAgICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRlY2FuMDExIGFwcGx5ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwM2QwDQotZGRjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBmZg0KLQ0KLS0tIEJhc2UgdGVzdHMgZm9yIGNhbm9uaWNhbCBlbmNvZGluZ3MgKGluZGl2aWR1YWwgb3BlcmF0b3INCi0tLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpDQotDQotLS0gRmluaXRlczogZGVjbGV0cyBpbiBjb2VmZmljaWVudA0KLWRkY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMjIgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAyMyBjYW5vbmljYWwgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMjUgY2Fub25pY2FsICAjNzdmY2ZmZmZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAyNiBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMjggY2Fub25pY2FsICAjNzdmY2ZmM2ZmZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAzMCBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZmZmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDMxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmZmZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMzIgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmZmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjAzMyBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMDM1IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotZGRjYW4wMzYgY2Fub25pY2FsICAjNzdmY2ZmM2ZlZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRkY2FuMTAwIGNhbm9uaWNhbCAgTmFOOTk5OTk5OTk5OTk5OTk5IC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMDEgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEwMiBjYW5vbmljYWwgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTAzIGNhbm9uaWNhbCAgIzdjMDBmZmZmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMDQgY2Fub25pY2FsICAjN2MwMGZmM2ZmZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEwNSBjYW5vbmljYWwgICM3YzAwZmYzZmNmZmZmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTA2IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMDcgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kZGNhbjExMCBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTEyIGNhbm9uaWNhbCAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMTMgY2Fub25pY2FsICAjN2M4MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjExNCBjYW5vbmljYWwgICM3YzQwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTE1IGNhbm9uaWNhbCAgIzdjMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMTYgY2Fub25pY2FsICAjN2MxMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjExNyBjYW5vbmljYWwgICM3YzA4ZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTE4IGNhbm9uaWNhbCAgIzdjMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW4xMjAgY2Fub25pY2FsIHNOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEyMSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTIyIGNhbm9uaWNhbCAgIzdlMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMjMgY2Fub25pY2FsICAjN2UwMGZmZmZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEyNCBjYW5vbmljYWwgICM3ZTAwZmYzZmZmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTI1IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMjYgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmZmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEyNyBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmZmZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLS0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kZGNhbjEzMCBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTMyIGNhbm9uaWNhbCAgIzdmMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMzMgY2Fub25pY2FsICAjN2U4MGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEzNCBjYW5vbmljYWwgICM3ZTQwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTM1IGNhbm9uaWNhbCAgIzdlMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotZGRjYW4xMzYgY2Fub25pY2FsICAjN2UxMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjEzNyBjYW5vbmljYWwgICM3ZTA4ZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMTM4IGNhbm9uaWNhbCAgIzdlMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRkY2FuMTQwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNDEgY2Fub25pY2FsICAjNzkwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0MiBjYW5vbmljYWwgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTQzIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNDQgY2Fub25pY2FsICAjNzg0MDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0NSBjYW5vbmljYWwgICM3ODIwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNDcgY2Fub25pY2FsICAjNzgwODAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE0OCBjYW5vbmljYWwgICM3ODA0MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMgKGZpcnN0LCBsYXN0LCBhbmQgYSBmZXcgb3RoZXJzKQ0KLWRkY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAxICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1NSBjYW5vbmljYWwgICM3ODAwMDgwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE1OCBjYW5vbmljYWwgICM3ODAwMDAwMDQwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE2MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDIwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjE2NCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDQwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDggIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotDQotDQotLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bw0KLS0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzDQotDQotLS0tLS0gQWRkOg0KLS0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KLWRkY2FuMjAyIGFkZCAgMEUrMzg0ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMjAzIGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLS0tIHRpbnkgemVybw0KLWRkY2FuMjA0IGFkZCAgMEUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQotZGRjYW4yMDUgYWRkICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCi0tLSB0aW55IG5vbiB6ZXJvDQotZGRjYW4yMDYgYWRkIC0xRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCi1kZGNhbjIwNyBhZGQgICAgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAtMUUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW4yMTEgYWRkICAwICAjN2MwM2ZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4yMTIgYWRkICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZGRjYW4yMTMgYWRkICAwICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4yMTQgYWRkICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW4yMTUgYWRkICAwICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW4yMTYgYWRkICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuMjE3IGFkZCAgMCAgIzdlODBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuMjE4IGFkZCAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCi1kZGNhbjIyMCBhZGQgIDAgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjIyMSBhZGQgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZGRjYW4yMjIgYWRkICAwICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjIyMyBhZGQgICAgICM3ODAyMDAwMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4yMjUgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjIyNiBhZGQgIDAgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjI3IGFkZCAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotDQotLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0NCi0NCi0tLS0tLSBDb21wYXJlOg0KLWRkY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIzODAwMDAwMDAwMDAwMQ0KLWRkY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMA0KLWRkY2FuMjMzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMQ0KLWRkY2FuMjM0IGNvbXBhcmUgICM3YzAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjIzNSBjb21wYXJlICAjN2UwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tLS0tIENvbXBhcmVTaWc6DQotZGRjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4yNDIgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAwDQotZGRjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxDQotZGRjYW4yNDQgY29tcGFyZXNpZyAgIzdjMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjI0NSBjb21wYXJlc2lnICAjN2UwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZGRjYW4yNTAgY29weSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZmZmYzZmNmZjNmY2ZmDQotZGRjYW4yNTEgY29weSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmDQotLS0gTmFOcw0KLWRkY2FuMjUyIGNvcHkgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwM2ZmM2ZjZmYzZmNmZg0KLWRkY2FuMjUzIGNvcHkgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZg0KLWRkY2FuMjU0IGNvcHkgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2QwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuMjU1IGNvcHkgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwNGZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kZGNhbjI1NiBjb3B5ICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmZmZjZmYNCi1kZGNhbjI1NyBjb3B5ICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlNDBmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kZGNhbjI1OCBjb3B5ICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gIzdhMDAwMDAwMDAwMDAwMDANCi1kZGNhbjI1OSBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAyMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBDb3B5QWJzOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQotLS0gZmluaXRlcw0KLWRkY2FuMjYwIGNvcHlhYnMgICNmN2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZg0KLWRkY2FuMjYxIGNvcHlhYnMgICNmN2ZjZmYzZmRmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZkZmYzZmNmZg0KLS0tIE5hTnMNCi1kZGNhbjI2MiBjb3B5YWJzICAjZmMwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI2MyBjb3B5YWJzICAjZmMwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYNCi1kZGNhbjI2NCBjb3B5YWJzICAjZmQwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI2NSBjb3B5YWJzICAjZmMwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZGRjYW4yNjYgY29weWFicyAgI2ZlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmDQotZGRjYW4yNjcgY29weWFicyAgI2ZlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmDQotLS0gSW5mDQotZGRjYW4yNjggY29weWFicyAgI2ZhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwDQotZGRjYW4yNjkgY29weWFicyAgI2Y4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwDQotDQotLS0tLS0gQ29weU5lZ2F0ZTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KLS0tIGZpbml0ZXMNCi1kZGNhbjI3MCBjb3B5bmVnYXRlICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI3MSBjb3B5bmVnYXRlICAjNzdmY2ZmM2ZkZmYzZmNmZiAgLT4gI2Y3ZmNmZjNmZGZmM2ZjZmYNCi0tLSBOYU5zDQotZGRjYW4yNzIgY29weW5lZ2F0ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIC0+ICNmYzAzZmYzZmNmZjNmY2ZmDQotZGRjYW4yNzMgY29weW5lZ2F0ZSAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICNmYzAwZmYzZmNmZjNmZmZmDQotZGRjYW4yNzQgY29weW5lZ2F0ZSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZDAwZmYzZmNmZjNmY2ZmDQotZGRjYW4yNzUgY29weW5lZ2F0ZSAgIzdjMDRmZjNmY2ZmM2ZjZmYgIC0+ICNmYzA0ZmYzZmNmZjNmY2ZmDQotLS0gc05hTg0KLWRkY2FuMjc2IGNvcHluZWdhdGUgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjZmUwMGZmM2ZjZmZmZmNmZg0KLWRkY2FuMjc3IGNvcHluZWdhdGUgICM3ZTQwZmYzZmNmZjNmY2ZmICAtPiAjZmU0MGZmM2ZjZmYzZmNmZg0KLS0tIEluZg0KLWRkY2FuMjc4IGNvcHluZWdhdGUgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjZmEwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMjc5IGNvcHluZWdhdGUgICM3ODAwMjAwMDAwMDAwMDAwICAtPiAjZjgwMDIwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQotLS0gZmluaXRlcw0KLWRkY2FuMjgwIGNvcHlzaWduICAjNzdmZmZmM2ZjZmYzZmNmZiAtMSAtPiAjZjdmZmZmM2ZjZmYzZmNmZg0KLWRkY2FuMjgxIGNvcHlzaWduICAjNzdmY2ZmM2ZkZmYzZmNmZiAgMSAtPiAjNzdmY2ZmM2ZkZmYzZmNmZg0KLS0tIE5hTnMNCi1kZGNhbjI4MiBjb3B5c2lnbiAgIzdjMDNmZjNmY2ZmM2ZjZmYgLTEgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI4MyBjb3B5c2lnbiAgIzdjMDBmZjNmY2ZmM2ZmZmYgIDEgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYNCi1kZGNhbjI4NCBjb3B5c2lnbiAgIzdkMDBmZjNmY2ZmM2ZjZmYgLTEgLT4gI2ZkMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjI4NSBjb3B5c2lnbiAgIzdjMDRmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZGRjYW4yODYgY29weXNpZ24gICM3ZTAwZmYzZmNmZmZmY2ZmIC0xIC0+ICNmZTAwZmYzZmNmZmZmY2ZmDQotZGRjYW4yODcgY29weXNpZ24gICM3ZTQwZmYzZmNmZjNmY2ZmICAxIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmDQotLS0gSW5mDQotZGRjYW4yODggY29weXNpZ24gICM3YTAwMDAwMDAwMDAwMDAwIC0xIC0+ICNmYTAwMDAwMDAwMDAwMDAwDQotZGRjYW4yODkgY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwICAxIC0+ICM3ODAwMjAwMDAwMDAwMDAwDQotDQotLS0tLS0gTXVsdGlwbHk6DQotLS0gRmluaXRlczogbmV1dHJhbCAwDQotZGRjYW4zMDIgbXVsdGlwbHkgIDEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjMwMyBtdWx0aXBseSAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmICAxICAgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLS0tIG5lZ2F0aXZlDQotZGRjYW4zMDYgbXVsdGlwbHkgLTEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYNCi1kZGNhbjMwNyBtdWx0aXBseSAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIC0xICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjMxMiBtdWx0aXBseSAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW4zMTQgbXVsdGlwbHkgICAgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kZGNhbjMxNSBtdWx0aXBseSAgMSAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuMzE2IG11bHRpcGx5ICAgICAjN2UwMGZmZmZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRkY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW4zMTggbXVsdGlwbHkgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZGRjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjMyMSBtdWx0aXBseSAgICAgIzc4ODAwMDAwMDAwMDAwMDAgIDEgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMNCi1kZGNhbjMyMiBtdWx0aXBseSAgMSAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4zMjMgbXVsdGlwbHkgICAgICM3ODAyMDAwMDAwMDAwMDAwICAxICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMzI0IG11bHRpcGx5ICAxICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjMyNSBtdWx0aXBseSAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotZGRjYW4zMjYgbXVsdGlwbHkgIDEgICM3ODAwMDAyMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuMzI3IG11bHRpcGx5ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0NCi0tLS0tLSBRdWFudGl6ZToNCi1kZGNhbjQwMSBxdWFudGl6ZSAgIzZlMzhmZjNmZmZmM2ZjZmYgMSAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZg0KLWRkY2FuNDAyIHF1YW50aXplICAjNmUzOGZmM2ZjZmYzZmRmZiAwICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQotZGRjYW40MDMgcXVhbnRpemUgICM3ODgwMDAwMDAwMDAwMDAwIEluZiAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjQwNCBxdWFudGl6ZSAgIzc4MDIwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNDEwIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW40MTEgcXVhbnRpemUgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjQxMiBxdWFudGl6ZSAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNDEzIHF1YW50aXplICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW40MTQgcXVhbnRpemUgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjQxNSBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNDE2IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotZGRjYW40MTcgcXVhbnRpemUgICM3ZTgwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLS0tLSBTdWJ0cmFjdDoNCi0tLSBGaW5pdGVzOiBuZXV0cmFsIDANCi1kZGNhbjUwMiBzdWJ0cmFjdCAgMEUrMzg0ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZg0KLWRkY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQotLS0gdGlueSB6ZXJvDQotZGRjYW41MDQgc3VidHJhY3QgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLWRkY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCi0tLSB0aW55IG5vbiB6ZXJvDQotZGRjYW41MDYgc3VidHJhY3QgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLWRkY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRkY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwM2ZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotZGRjYW41MTIgc3VidHJhY3QgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kZGNhbjUxMyBzdWJ0cmFjdCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLWRkY2FuNTE0IHN1YnRyYWN0ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZGRjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kZGNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlODBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY2FuNTE4IHN1YnRyYWN0ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRkY2FuNTIwIHN1YnRyYWN0ICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGRjYW41MjEgc3VidHJhY3QgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQotZGRjYW41MjIgc3VidHJhY3QgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjUyNCBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGRjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRkY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjUyNyBzdWJ0cmFjdCAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQotDQotLS0tLS0gVG9JbnRlZ3JhbDoNCi1kZGNhbjYwMSB0b2ludGVncmFseCAgIzZlMzhmZjNmZmZmM2ZjZmYgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYwMiB0b2ludGVncmFseCAgIzZlMzhmZjNmY2ZmM2ZkZmYgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjYwNCB0b2ludGVncmFseCAgIzc4MDIwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCi1kZGNhbjYxMCB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYxMSB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYxMiB0b2ludGVncmFseCAgIzdjNDBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYxMyB0b2ludGVncmFseCAgIzdjNDBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCi1kZGNhbjYxNCB0b2ludGVncmFseCAgIzdlMDBmZmZmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjYxNSB0b2ludGVncmFseCAgIzdlMDBmZmZmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjYxNiB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNhbjYxNyB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0tLSB1bmNhbm9uaWNhbCAzOTk5LCAzOS45OSwgMy45OSwgMC4zOTksIGFuZCBuZWdhdGl2ZXMNCi1kZGNhbjYxOCB0b2ludGVncmFseCAgIzIyMzgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDBjZmYNCi1kZGNhbjYxOSB0b2ludGVncmFseCAgIzIyMzAwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwNDAgSW5leGFjdCBSb3VuZGVkDQotZGRjYW42MjAgdG9pbnRlZ3JhbHggICMyMjJjMDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwMDA0IEluZXhhY3QgUm91bmRlZA0KLWRkY2FuNjIxIHRvaW50ZWdyYWx4ICAjMjIyODAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGNhbjYyMiB0b2ludGVncmFseCAgI2EyMzgwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDBjZmYNCi1kZGNhbjYyMyB0b2ludGVncmFseCAgI2EyMzAwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDAwNDAgSW5leGFjdCBSb3VuZGVkDQotZGRjYW42MjQgdG9pbnRlZ3JhbHggICNhMjJjMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDA0IEluZXhhY3QgUm91bmRlZA0KLWRkY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIyODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ2Fub25pY2FsLmRlY1Rlc3QgLS0gdGVzdCBkZWNEb3VibGUgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzCistLSB1bmNoYW5nZWQsIGFuZCB2aWNlIHZlcnNhCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6CistLSAgIGE9MSwyLDMKKy0tICAgYj02LDcsZSxmCistLSAgIGM9ZSxmCisKKy0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcKKy0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQorZGRjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMQorZGRjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQorZGRjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDkgYXBwbHkgTmFOOTk5OTk5OTk5OTk5OTk5ICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OSAgICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDNkMAorZGRjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBmZgorCistLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yCistLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpCisKKy0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQKK2RkY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjMgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyNSBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjYgY2Fub25pY2FsICAjNzdmY2ZmZmZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyOCBjYW5vbmljYWwgICM3N2ZjZmYzZmZmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzAgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDMxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmZmZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzMgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmZmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDM1IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzNiBjYW5vbmljYWwgICM3N2ZjZmYzZmVmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4xMDAgY2Fub25pY2FsICBOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTAxIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwMiBjYW5vbmljYWwgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDMgY2Fub25pY2FsICAjN2MwMGZmZmZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA0IGNhbm9uaWNhbCAgIzdjMDBmZjNmZmZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwNSBjYW5vbmljYWwgICM3YzAwZmYzZmNmZmZmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDYgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA3IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMTEwIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExMiBjYW5vbmljYWwgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTMgY2Fub25pY2FsICAjN2M4MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE0IGNhbm9uaWNhbCAgIzdjNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExNSBjYW5vbmljYWwgICM3YzIwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTYgY2Fub25pY2FsICAjN2MxMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE3IGNhbm9uaWNhbCAgIzdjMDhmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExOCBjYW5vbmljYWwgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMTIwIGNhbm9uaWNhbCBzTmFOOTk5OTk5OTk5OTk5OTk5IC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyMSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjIgY2Fub25pY2FsICAjN2UwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTIzIGNhbm9uaWNhbCAgIzdlMDBmZmZmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNCBjYW5vbmljYWwgICM3ZTAwZmYzZmZmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjUgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNyBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmZmZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4xMzAgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTMyIGNhbm9uaWNhbCAgIzdmMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzMyBjYW5vbmljYWwgICM3ZTgwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzQgY2Fub25pY2FsICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM1IGNhbm9uaWNhbCAgIzdlMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNiBjYW5vbmljYWwgICM3ZTEwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzcgY2Fub25pY2FsICAjN2UwOGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM4IGNhbm9uaWNhbCAgIzdlMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCisKKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMTQwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0MSBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDIgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQzIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NCBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDUgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NyBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDggY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpCitkZGNhbjE1MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1MyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NiBjYW5vbmljYWwgICM3ODAwMDAyMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1OSBjYW5vbmljYWwgICM3ODAwMDAwMDA4MDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDA4MDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDA4ICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCisKKy0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8KKy0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzCisKKy0tLS0tIEFkZDoKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW4yMDIgYWRkICAwRSszODQgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjIwMyBhZGQgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZGRjYW4yMDQgYWRkICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKK2RkY2FuMjA1IGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCistLSB0aW55IG5vbiB6ZXJvCitkZGNhbjIwNiBhZGQgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZGRjYW4yMDcgYWRkICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjIxMSBhZGQgIDAgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjEyIGFkZCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjIxMyBhZGQgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjE0IGFkZCAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjIxNSBhZGQgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjE2IGFkZCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4yMTcgYWRkICAwICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjIxOCBhZGQgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMjIwIGFkZCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjEgYWRkICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjIyMiBhZGQgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjMgYWRkICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyNSBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjYgYWRkICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI3IGFkZCAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdCisKKy0tLS0tIENvbXBhcmU6CitkZGNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjIzNCBjb21wYXJlICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjIzNSBjb21wYXJlICAjN2UwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBDb21wYXJlU2lnOgorZGRjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjM4MDAwMDAwMDAwMDAxCitkZGNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDAKK2RkY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMQorZGRjYW4yNDQgY29tcGFyZXNpZyAgIzdjMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjUwIGNvcHkgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNTEgY29weSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI1MiBjb3B5ICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjUzIGNvcHkgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNTQgY29weSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI1NSBjb3B5ICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjU2IGNvcHkgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNTcgY29weSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjU4IGNvcHkgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAorZGRjYW4yNTkgY29weSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjYwIGNvcHlhYnMgICNmN2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNjEgY29weWFicyAgI2Y3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI2MiBjb3B5YWJzICAjZmMwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjYzIGNvcHlhYnMgICNmYzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNjQgY29weWFicyAgI2ZkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI2NSBjb3B5YWJzICAjZmMwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjY2IGNvcHlhYnMgICNmZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNjcgY29weWFicyAgI2ZlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjY4IGNvcHlhYnMgICNmYTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAorZGRjYW4yNjkgY29weWFicyAgI2Y4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjcwIGNvcHluZWdhdGUgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjZjdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNzEgY29weW5lZ2F0ZSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICNmN2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI3MiBjb3B5bmVnYXRlICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjczIGNvcHluZWdhdGUgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjZmMwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNzQgY29weW5lZ2F0ZSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI3NSBjb3B5bmVnYXRlICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjc2IGNvcHluZWdhdGUgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjZmUwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNzcgY29weW5lZ2F0ZSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjc4IGNvcHluZWdhdGUgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjZmEwMDAwMDAwMDAwMDAwMAorZGRjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICNmODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkZGNhbjI4MCBjb3B5c2lnbiAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTEgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYKK2RkY2FuMjgxIGNvcHlzaWduICAjNzdmY2ZmM2ZkZmYzZmNmZiAgMSAtPiAjNzdmY2ZmM2ZkZmYzZmNmZgorLS0gTmFOcworZGRjYW4yODIgY29weXNpZ24gICM3YzAzZmYzZmNmZjNmY2ZmIC0xIC0+ICNmYzAzZmYzZmNmZjNmY2ZmCitkZGNhbjI4MyBjb3B5c2lnbiAgIzdjMDBmZjNmY2ZmM2ZmZmYgIDEgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYKK2RkY2FuMjg0IGNvcHlzaWduICAjN2QwMGZmM2ZjZmYzZmNmZiAtMSAtPiAjZmQwMGZmM2ZjZmYzZmNmZgorZGRjYW4yODUgY29weXNpZ24gICM3YzA0ZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkZGNhbjI4NiBjb3B5c2lnbiAgIzdlMDBmZjNmY2ZmZmZjZmYgLTEgLT4gI2ZlMDBmZjNmY2ZmZmZjZmYKK2RkY2FuMjg3IGNvcHlzaWduICAjN2U0MGZmM2ZjZmYzZmNmZiAgMSAtPiAjN2U0MGZmM2ZjZmYzZmNmZgorLS0gSW5mCitkZGNhbjI4OCBjb3B5c2lnbiAgIzdhMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2ZhMDAwMDAwMDAwMDAwMDAKK2RkY2FuMjg5IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMCAgMSAtPiAjNzgwMDIwMDAwMDAwMDAwMAorCistLS0tLSBNdWx0aXBseToKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW4zMDIgbXVsdGlwbHkgIDEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMzAzIG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIDEgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCistLSBuZWdhdGl2ZQorZGRjYW4zMDYgbXVsdGlwbHkgLTEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMzA3IG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgLTEgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjMxNSBtdWx0aXBseSAgMSAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMSAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjMyMiBtdWx0aXBseSAgMSAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNSBtdWx0aXBseSAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIFF1YW50aXplOgorZGRjYW40MDEgcXVhbnRpemUgICM2ZTM4ZmYzZmZmZjNmY2ZmIDEgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNDAyIHF1YW50aXplICAjNmUzOGZmM2ZjZmYzZmRmZiAwICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNDEwIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxMSBxdWFudGl6ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW40MTIgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDEzIHF1YW50aXplICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxNCBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW40MTUgcXVhbnRpemUgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNDE2IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjQxNyBxdWFudGl6ZSAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBTdWJ0cmFjdDoKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW41MDIgc3VidHJhY3QgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RkY2FuNTA0IHN1YnRyYWN0ICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKK2RkY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RkY2FuNTA2IHN1YnRyYWN0IC0xRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW41MTIgc3VidHJhY3QgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNTE0IHN1YnRyYWN0ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW41MTcgc3VidHJhY3QgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNTE4IHN1YnRyYWN0ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjEgc3VidHJhY3QgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI0IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI3IHN1YnRyYWN0ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gVG9JbnRlZ3JhbDoKK2RkY2FuNjAxIHRvaW50ZWdyYWx4ICAjNmUzOGZmM2ZmZmYzZmNmZiAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW42MDIgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmNmZjNmZGZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNjA0IHRvaW50ZWdyYWx4ICAjNzgwMjAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW42MTAgdG9pbnRlZ3JhbHggICM3YzAzZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxMSB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjEyIHRvaW50ZWdyYWx4ICAjN2M0MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW42MTMgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxNCB0b2ludGVncmFseCAgIzdlMDBmZmZmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNjE1IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTgwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjYxNyB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgYW5kIG5lZ2F0aXZlcworZGRjYW42MTggdG9pbnRlZ3JhbHggICMyMjM4MDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwY2ZmCitkZGNhbjYxOSB0b2ludGVncmFseCAgIzIyMzAwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwNDAgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMCB0b2ludGVncmFseCAgIzIyMmMwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDQgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMSB0b2ludGVncmFseCAgIzIyMjgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMiB0b2ludGVncmFseCAgI2EyMzgwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDBjZmYKK2RkY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIzMDAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjI0IHRvaW50ZWdyYWx4ICAjYTIyYzAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIyODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDbGFzcy5kZWNUZXN0CmluZGV4IGExZDIzM2IuLmJiMzRjNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdApAQCAtMSw3NiArMSw3NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDbGFzcy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFtOZXcgMjAwNi4xMS4yN10NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1kZGNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotZGRjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWRkY2xhMDA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWRkY2xhMDA1ICBjbGFzcyAgMC4xRS0zODMgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWRkY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbA0KLWRkY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDA4ICBjbGFzcyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gK05vcm1hbA0KLWRkY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQotDQotZGRjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWRkY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1kZGNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotZGRjbGEwMjQgIGNsYXNzICAgLTFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotZGRjbGEwMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotZGRjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsDQotZGRjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAtPiAtTm9ybWFsDQotZGRjbGEwMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzcgIGNsYXNzICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsDQotZGRjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1kZGNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWRkY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQotZGRjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1kZGNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1kZGNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi1kZGNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ2xhc3MuZGVjVGVzdCAtLSBkZWNEb3VibGUgQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW05ldyAyMDA2LjExLjI3XQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RkY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RkY2xhMDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2RkY2xhMDA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorZGRjbGEwMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitkZGNsYTAwNiAgY2xhc3MgIDAuOTk5OTk5OTk5OTk5OTk5RS0zODMgICAgIC0+ICtTdWJub3JtYWwKK2RkY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbAorZGRjbGEwMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsCitkZGNsYTAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitkZGNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkZGNsYTAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkZGNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitkZGNsYTAyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2RkY2xhMDI1ICBjbGFzcyAgLTAuMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorZGRjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsCitkZGNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDI4ICBjbGFzcyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM4ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gLU5vcm1hbAorZGRjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworZGRjbGEwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RkY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitkZGNsYTA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorZGRjbGEwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitkZGNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RkY2xhMDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0CmluZGV4IGEyMGFlMjEuLjZkZWJmYzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QKQEAgLTEsNzQ0ICsxLDc0NCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb21wYXJlLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb24gdGhhdCBhbGxvd3MgcXVpZXQgTmFOcyAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkY29tMDAxIGNvbXBhcmUgIC0yICAtMiAgLT4gMA0KLWRkY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTENCi1kZGNvbTAwMyBjb21wYXJlICAtMiAgIDAgIC0+IC0xDQotZGRjb20wMDQgY29tcGFyZSAgLTIgICAxICAtPiAtMQ0KLWRkY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTENCi1kZGNvbTAwNiBjb21wYXJlICAtMSAgLTIgIC0+IDENCi1kZGNvbTAwNyBjb21wYXJlICAtMSAgLTEgIC0+IDANCi1kZGNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xDQotZGRjb20wMDkgY29tcGFyZSAgLTEgICAxICAtPiAtMQ0KLWRkY29tMDEwIGNvbXBhcmUgIC0xICAgMiAgLT4gLTENCi1kZGNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDENCi1kZGNvbTAxMiBjb21wYXJlICAgMCAgLTEgIC0+IDENCi1kZGNvbTAxMyBjb21wYXJlICAgMCAgIDAgIC0+IDANCi1kZGNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xDQotZGRjb20wMTUgY29tcGFyZSAgIDAgICAyICAtPiAtMQ0KLWRkY29tMDE2IGNvbXBhcmUgICAxICAtMiAgLT4gMQ0KLWRkY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQ0KLWRkY29tMDE4IGNvbXBhcmUgICAxICAgMCAgLT4gMQ0KLWRkY29tMDE5IGNvbXBhcmUgICAxICAgMSAgLT4gMA0KLWRkY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTENCi1kZGNvbTAyMSBjb21wYXJlICAgMiAgLTIgIC0+IDENCi1kZGNvbTAyMiBjb21wYXJlICAgMiAgLTEgIC0+IDENCi1kZGNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDENCi1kZGNvbTAyNSBjb21wYXJlICAgMiAgIDEgIC0+IDENCi1kZGNvbTAyNiBjb21wYXJlICAgMiAgIDIgIC0+IDANCi0NCi1kZGNvbTAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMA0KLWRkY29tMDMyIGNvbXBhcmUgIC0yMCAgLTEwICAtPiAtMQ0KLWRkY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQ0KLWRkY29tMDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQ0KLWRkY29tMDM1IGNvbXBhcmUgIC0yMCAgIDIwICAtPiAtMQ0KLWRkY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxDQotZGRjb20wMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDANCi1kZGNvbTAzOCBjb21wYXJlICAtMTAgICAwMCAgLT4gLTENCi1kZGNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTENCi1kZGNvbTA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTENCi1kZGNvbTA0MSBjb21wYXJlICAgMDAgIC0yMCAgLT4gMQ0KLWRkY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxDQotZGRjb20wNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDANCi1kZGNvbTA0NCBjb21wYXJlICAgMDAgICAxMCAgLT4gLTENCi1kZGNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTENCi1kZGNvbTA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQ0KLWRkY29tMDQ3IGNvbXBhcmUgICAxMCAgLTEwICAtPiAxDQotZGRjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDENCi1kZGNvbTA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMA0KLWRkY29tMDUwIGNvbXBhcmUgICAxMCAgIDIwICAtPiAtMQ0KLWRkY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxDQotZGRjb20wNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDENCi1kZGNvbTA1MyBjb21wYXJlICAgMjAgICAwMCAgLT4gMQ0KLWRkY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxDQotZGRjb20wNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDANCi0NCi1kZGNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwDQotZGRjb20wNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTENCi1kZGNvbTA2MyBjb21wYXJlICAtMi4wICAgMC4wICAtPiAtMQ0KLWRkY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xDQotZGRjb20wNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTENCi1kZGNvbTA2NiBjb21wYXJlICAtMS4wICAtMi4wICAtPiAxDQotZGRjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMA0KLWRkY29tMDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xDQotZGRjb20wNjkgY29tcGFyZSAgLTEuMCAgIDEuMCAgLT4gLTENCi1kZGNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQ0KLWRkY29tMDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDENCi1kZGNvbTA3MiBjb21wYXJlICAgMC4wICAtMS4wICAtPiAxDQotZGRjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMA0KLWRkY29tMDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xDQotZGRjb20wNzUgY29tcGFyZSAgIDAuMCAgIDIuMCAgLT4gLTENCi1kZGNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxDQotZGRjb20wNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQ0KLWRkY29tMDc4IGNvbXBhcmUgICAxLjAgICAwLjAgIC0+IDENCi1kZGNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwDQotZGRjb20wODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTENCi1kZGNvbTA4MSBjb21wYXJlICAgMi4wICAtMi4wICAtPiAxDQotZGRjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQ0KLWRkY29tMDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDENCi1kZGNvbTA4NSBjb21wYXJlICAgMi4wICAgMS4wICAtPiAxDQotZGRjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMA0KLWRkY29tMDg3IGNvbXBhcmUgICAxLjAgICAwLjEgIC0+IDENCi1kZGNvbTA4OCBjb21wYXJlICAgMC4xICAgMS4wICAtPiAtMQ0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRkY29tMDk1IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMA0KLWRkY29tMDk2IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTENCi1kZGNvbTA5NyBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCi1kZGNvbTA5OCBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi1kZGNvbTEwMCBjb21wYXJlICAgNy4wICAgIDcuMCAgICAtPiAwDQotZGRjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMA0KLWRkY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDANCi1kZGNvbTEwMyBjb21wYXJlICAgN0UrMCAgIDcuMCAgICAtPiAwDQotZGRjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMA0KLWRkY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDANCi1kZGNvbTEwNiBjb21wYXJlICAgNzBFLTEgIDcgICAgICAtPiAwDQotZGRjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMA0KLWRkY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDANCi1kZGNvbTEwOSBjb21wYXJlICAgNyAgICAgIDAuN0UrMSAtPiAwDQotZGRjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMA0KLQ0KLWRkY29tMTIwIGNvbXBhcmUgICA4LjAgICAgNy4wICAgIC0+IDENCi1kZGNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxDQotZGRjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQ0KLWRkY29tMTIzIGNvbXBhcmUgICA4RSswICAgNy4wICAgIC0+IDENCi1kZGNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxDQotZGRjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWRkY29tMTI2IGNvbXBhcmUgICA4MEUtMSAgNyAgICAgIC0+IDENCi1kZGNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxDQotZGRjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWRkY29tMTI5IGNvbXBhcmUgICA4ICAgICAgMC43RSsxICAtPiAxDQotZGRjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWRkY29tMTQwIGNvbXBhcmUgICA4LjAgICAgOS4wICAgIC0+IC0xDQotZGRjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTENCi1kZGNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRkY29tMTQzIGNvbXBhcmUgICA4RSswICAgOS4wICAgIC0+IC0xDQotZGRjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQ0KLWRkY29tMTQ2IGNvbXBhcmUgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotZGRjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTENCi1kZGNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRkY29tMTQ5IGNvbXBhcmUgICA4ICAgICAgMC45RSsxIC0+IC0xDQotZGRjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZGRjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTENCi1kZGNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWRkY29tMjAyIGNvbXBhcmUgIC03ICAgICAgNy4wICAgIC0+IC0xDQotZGRjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTENCi1kZGNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY29tMjA1IGNvbXBhcmUgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQotZGRjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTENCi1kZGNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY29tMjA4IGNvbXBhcmUgIC03LjAgICAgNzBFLTEgIC0+IC0xDQotZGRjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTENCi1kZGNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xDQotZGRjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTENCi1kZGNvbTIyMiBjb21wYXJlICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWRkY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xDQotZGRjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTENCi1kZGNvbTIyNSBjb21wYXJlICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWRkY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xDQotZGRjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTENCi1kZGNvbTIyOCBjb21wYXJlICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWRkY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xDQotZGRjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTENCi0NCi1kZGNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRkY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xDQotZGRjb20yNDIgY29tcGFyZSAgLTggICAgICA5LjAgICAgLT4gLTENCi1kZGNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRkY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xDQotZGRjb20yNDUgY29tcGFyZSAgLTAuOEUrMSA5ICAgICAgLT4gLTENCi1kZGNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWRkY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xDQotZGRjb20yNDggY29tcGFyZSAgLTguMCAgICA5MEUtMSAgLT4gLTENCi1kZGNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRkY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRkY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxDQotZGRjb20zMDEgY29tcGFyZSAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1kZGNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQ0KLWRkY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxDQotZGRjb20zMDQgY29tcGFyZSAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1kZGNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KLWRkY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxDQotZGRjb20zMDcgY29tcGFyZSAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1kZGNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KLWRkY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxDQotZGRjb20zMTAgY29tcGFyZSAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQ0KLWRkY29tMzIxIGNvbXBhcmUgICA4LjAgICAgLTcgICAgICAtPiAxDQotZGRjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDENCi1kZGNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KLWRkY29tMzI0IGNvbXBhcmUgICA4MEUtMSAgLTcuMCAgICAtPiAxDQotZGRjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDENCi1kZGNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQ0KLWRkY29tMzI3IGNvbXBhcmUgICA4LjAgICAgLTdFKzAgICAtPiAxDQotZGRjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1kZGNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KLWRkY29tMzMwIGNvbXBhcmUgICA4ICAgICAgLTcwRS0xICAtPiAxDQotDQotZGRjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDENCi1kZGNvbTM0MSBjb21wYXJlICAgOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxDQotZGRjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1kZGNvbTM0NCBjb21wYXJlICAgODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxDQotZGRjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1kZGNvbTM0NyBjb21wYXJlICAgOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxDQotZGRjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDENCi1kZGNvbTM1MCBjb21wYXJlICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kZGNvbTQwMCBjb21wYXJlICAgLTcuMCAgICAtNy4wICAgIC0+IDANCi1kZGNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDANCi1kZGNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDANCi1kZGNvbTQwMyBjb21wYXJlICAgLTdFKzAgICAtNy4wICAgIC0+IDANCi1kZGNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1kZGNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDANCi1kZGNvbTQwNiBjb21wYXJlICAgLTcwRS0xICAtNyAgICAgIC0+IDANCi1kZGNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCi1kZGNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCi1kZGNvbTQwOSBjb21wYXJlICAgLTcgICAgICAtLjdFKzEgIC0+IDANCi1kZGNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDANCi0NCi1kZGNvbTQyMCBjb21wYXJlICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQotZGRjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KLWRkY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1kZGNvbTQyMyBjb21wYXJlICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQotZGRjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KLWRkY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1kZGNvbTQyNiBjb21wYXJlICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQotZGRjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KLWRkY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1kZGNvbTQyOSBjb21wYXJlICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQotZGRjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KLQ0KLWRkY29tNDQwIGNvbXBhcmUgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWRkY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KLWRkY29tNDQzIGNvbXBhcmUgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRkY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRkY29tNDQ2IGNvbXBhcmUgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWRkY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRkY29tNDQ5IGNvbXBhcmUgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRkY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KLWRkY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxDQotZGRjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xDQotZGRjb200NTMgY29tcGFyZSAgICAgMTAuMCAgICAgICAwLjEgIC0+IDENCi1kZGNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTENCi1kZGNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQ0KLWRkY29tNDU2IGNvbXBhcmUgICAgICAxLjAgICAgICAgMTAwICAtPiAtMQ0KLWRkY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxDQotZGRjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xDQotZGRjb200NTkgY29tcGFyZSAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDENCi1kZGNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTENCi1kZGNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQ0KLWRkY29tNDYyIGNvbXBhcmUgICAxMDAwLjAgICAgMTAwMDAwICAtPiAtMQ0KLWRkY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxDQotZGRjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZGRjb200NzMgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY29tNDc0IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY29tNDc1IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200NzYgY29tcGFyZSAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY29tNDc3IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY29tNDc4IGNvbXBhcmUgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotZGRjb200NzkgY29tcGFyZSAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY29tNDgwIGNvbXBhcmUgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY29tNDgxIGNvbXBhcmUgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQotZGRjb200ODIgY29tcGFyZSAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY29tNDgzIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY29tNDg3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDANCi1kZGNvbTQ4OCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDANCi1kZGNvbTQ4OSBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMA0KLWRkY29tNDkwIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDANCi1kZGNvbTQ5MSBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDANCi1kZGNvbTQ5MiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMA0KLWRkY29tNDkzIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDANCi1kZGNvbTQ5NCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDANCi1kZGNvbTQ5NSBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMA0KLWRkY29tNDk2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDANCi1kZGNvbTQ5NyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZGRjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxDQotZGRjb201MDEgY29tcGFyZSAgICAxICAgICAxRS0xNCAgICAtPiAxDQotZGRjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxDQotZGRjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxDQotZGRjb201MDQgY29tcGFyZSAgICAxICAgICAxRS0xMSAgICAtPiAxDQotZGRjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxDQotZGRjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxDQotZGRjb201MDcgY29tcGFyZSAgICAxICAgICAxRS04ICAgICAtPiAxDQotZGRjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxDQotZGRjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxDQotZGRjb201MTAgY29tcGFyZSAgICAxICAgICAxRS01ICAgICAtPiAxDQotZGRjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxDQotZGRjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxDQotZGRjb201MTMgY29tcGFyZSAgICAxICAgICAxRS0yICAgICAtPiAxDQotZGRjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxDQotZGRjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwDQotZGRjb201MTYgY29tcGFyZSAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KLWRkY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCi1kZGNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQotZGRjb201MTkgY29tcGFyZSAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KLWRkY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCi1kZGNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQotZGRjb201MjMgY29tcGFyZSAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KLWRkY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCi1kZGNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQotZGRjb201MjYgY29tcGFyZSAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KLWRkY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCi1kZGNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQotZGRjb201MjkgY29tcGFyZSAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KLWRkY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCi1kZGNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQotLS0gTFIgc3dhcA0KLWRkY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQotZGRjb201NDIgY29tcGFyZSAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xDQotZGRjb201NDUgY29tcGFyZSAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xDQotZGRjb201NDggY29tcGFyZSAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQotZGRjb201NTEgY29tcGFyZSAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCi1kZGNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQotZGRjb201NTQgY29tcGFyZSAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KLWRkY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCi1kZGNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQotZGRjb201NTcgY29tcGFyZSAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQotZGRjb201NjEgY29tcGFyZSAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQotZGRjb201NjQgY29tcGFyZSAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQotZGRjb201NjcgY29tcGFyZSAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCi1kZGNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQotZGRjb201NzAgY29tcGFyZSAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KLWRkY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kZGNvbTU4MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRkY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQotZGRjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCi1kZGNvbTU4MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRkY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQotZGRjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCi1kZGNvbTU4NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRkY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQotZGRjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCi1kZGNvbTU4OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCi1kZGNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCi1kZGNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCi1kZGNvbTU5MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCi1kZGNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCi1kZGNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCi1kZGNvbTU5NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCi1kZGNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCi1kZGNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCi1kZGNvbTU5OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCi1kZGNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRkY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQotZGRjb202MDggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWRkY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCi1kZGNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQotZGRjb202MTEgY29tcGFyZSAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWRkY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCi1kZGNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQotZGRjb202MTQgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWRkY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCi1kZGNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQotZGRjb202MTcgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWRkY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCi1kZGNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQotZGRjb202MjAgY29tcGFyZSAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjMgY29tcGFyZSAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjYgY29tcGFyZSAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCi1kZGNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjb202MjkgY29tcGFyZSAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWRkY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCi1kZGNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQotZGRjb202MzIgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWRkY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCi1kZGNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQotZGRjb202MzUgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWRkY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCi1kZGNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQotZGRjb202MzggY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWRkY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMA0KLWRkY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMA0KLWRkY29tNjQyIGNvbXBhcmUgICAwICAgIC0wLjAgLT4gMA0KLWRkY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMA0KLWRkY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMA0KLWRkY29tNjQ1IGNvbXBhcmUgIC0wICAgIC0wICAgLT4gMA0KLWRkY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMA0KLWRkY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMA0KLWRkY29tNjQ4IGNvbXBhcmUgICAwLjAgICAwICAgLT4gMA0KLWRkY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMA0KLWRkY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMA0KLWRkY29tNjUxIGNvbXBhcmUgICAwLjAgICAwLjAgLT4gMA0KLWRkY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMA0KLWRkY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMA0KLWRkY29tNjU0IGNvbXBhcmUgIC0wLjAgIC0wLjAgLT4gMA0KLWRkY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMA0KLQ0KLWRkY29tNjU2IGNvbXBhcmUgIC0wRTEgICAwLjAgLT4gMA0KLWRkY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMA0KLWRkY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMA0KLWRkY29tNjU5IGNvbXBhcmUgICAwRTIgICAwLjAgLT4gMA0KLWRkY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMA0KLWRkY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMA0KLWRkY29tNjYyIGNvbXBhcmUgICAwRTEgICAwICAgLT4gMA0KLWRkY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMA0KLWRkY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMA0KLWRkY29tNjY1IGNvbXBhcmUgIC0wRTIgIC0wRTEgLT4gMA0KLWRkY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMA0KLWRkY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMA0KLWRkY29tNjY4IGNvbXBhcmUgIC0wRTEgIC0wRTIgLT4gMA0KLWRkY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMA0KLWRkY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMA0KLWRkY29tNjcxIGNvbXBhcmUgICAwRTIgIC0wRTIgLT4gMA0KLWRkY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMA0KLWRkY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMA0KLWRkY29tNjc0IGNvbXBhcmUgICAwRTEgICAwRTEgLT4gMA0KLWRkY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMA0KLWRkY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMA0KLWRkY29tNjc3IGNvbXBhcmUgIC0wRTIgICAwRTIgLT4gMA0KLWRkY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMA0KLWRkY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1kZGNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCi1kZGNvbTY4MSBjb21wYXJlICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDANCi1kZGNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDANCi1kZGNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDANCi1kZGNvbTY4NCBjb21wYXJlICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDANCi1kZGNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDANCi1kZGNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDANCi1kZGNvbTY4NyBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDANCi1kZGNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDANCi1kZGNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDANCi1kZGNvbTY5MCBjb21wYXJlICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5MyBjb21wYXJlICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDANCi1kZGNvbTY5NiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDANCi1kZGNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDANCi1kZGNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDANCi1kZGNvbTY5OSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDANCi0NCi0tLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQNCi1kZGNvbTcwMCBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU1IC0+IDENCi1kZGNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDANCi1kZGNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xDQotZGRjb203MDMgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMDIzNDU2Nzg5MDEyMzQ1NiAtPiAxDQotZGRjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwDQotZGRjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQ0KLWRkY29tNzA2IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDEwMzQ1Njc4OTAxMjM0NTYgLT4gMQ0KLWRkY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMA0KLWRkY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTENCi0NCi0tLSBtaXNjZWxsYW5lb3VzDQotZGRjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDENCi1kZGNvbTcyMiBjb21wYXJlIDEgMTIzNDU2NzgwMDAgLT4gLTENCi1kZGNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KLWRkY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQ0KLWRkY29tNzI1IGNvbXBhcmUgMTIzNDU2Nzg5MCAgMSAtPiAxDQotZGRjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xDQotZGRjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDENCi1kZGNvbTcyOCBjb21wYXJlIDEgMTIzNDU2Nzg5MSAgLT4gLTENCi1kZGNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWRkY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQ0KLWRkY29tNzMxIGNvbXBhcmUgMTIzNDU2Nzg5NiAgMSAtPiAxDQotZGRjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xDQotDQotLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24NCi1kZGNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDENCi1kZGNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDENCi1kZGNvbTc0MiBjb21wYXJlICAxICAwLjk5OTk5ICAgIC0+IDENCi1kZGNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDANCi1kZGNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xDQotZGRjb203NDUgY29tcGFyZSAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KLWRkY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1kZGNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xDQotZGRjb203NTEgY29tcGFyZSAgMC45OTk5OTkgICAxICAtPiAtMQ0KLWRkY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1kZGNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDANCi1kZGNvbTc1NCBjb21wYXJlICAxLjAwMDAxICAgIDEgIC0+IDENCi1kZGNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDENCi1kZGNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLWRkY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxDQotZGRjb203ODEgY29tcGFyZSAgSW5mICAtMTAwMCAgLT4gIDENCi1kZGNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQ0KLWRkY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxDQotZGRjb203ODQgY29tcGFyZSAgSW5mICAgMCAgICAgLT4gIDENCi1kZGNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQ0KLWRkY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxDQotZGRjb203ODcgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDANCi1kZGNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRkY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xDQotZGRjb203OTAgY29tcGFyZSAtMSAgICAgSW5mICAgLT4gLTENCi1kZGNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQ0KLWRkY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xDQotZGRjb203OTMgY29tcGFyZSAgMSAgICAgSW5mICAgLT4gLTENCi1kZGNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQ0KLWRkY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwDQotDQotZGRjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDANCi1kZGNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWRkY29tODAyIGNvbXBhcmUgLUluZiAgLTEgICAgIC0+IC0xDQotZGRjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTENCi1kZGNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQ0KLWRkY29tODA1IGNvbXBhcmUgLUluZiAgIDEgICAgIC0+IC0xDQotZGRjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTENCi1kZGNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRkY29tODA4IGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwDQotZGRjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDENCi1kZGNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQ0KLWRkY29tODExIGNvbXBhcmUgLTAgICAgLUluZiAgIC0+ICAxDQotZGRjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDENCi1kZGNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQ0KLWRkY29tODE0IGNvbXBhcmUgIDEwMDAgLUluZiAgIC0+ICAxDQotZGRjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDENCi0NCi1kZGNvbTgyMSBjb21wYXJlICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZGNvbTgyNCBjb21wYXJlICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZGNvbTgyNyBjb21wYXJlICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzMCBjb21wYXJlIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzMyBjb21wYXJlIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGNvbTgzNiBjb21wYXJlICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4NCi1kZGNvbTgzOSBjb21wYXJlICtOYU4gLU5hTiAgICAtPiAgTmFODQotZGRjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTg0KLQ0KLWRkY29tODQxIGNvbXBhcmUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODQ0IGNvbXBhcmUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODQ3IGNvbXBhcmUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODUwIGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODUzIGNvbXBhcmUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODU2IGNvbXBhcmUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODU5IGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkY29tODYwIGNvbXBhcmUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZGRjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgNCi1kZGNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcNCi1kZGNvbTg2MyBjb21wYXJlIC1OYU42NyBOYU41ICAtPiAtTmFONjcNCi1kZGNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONA0KLWRkY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMw0KLWRkY29tODY2IGNvbXBhcmUgIEluZiAgIE5hTjIgIC0+ICBOYU4yDQotZGRjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQ0KLWRkY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDENCi1kZGNvbTg2OSBjb21wYXJlIC1OYU40MSArTmFONDIgLT4gLU5hTjQxDQotZGRjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQ0KLQ0KLWRkY29tODcxIGNvbXBhcmUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc0IGNvbXBhcmUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc3IGNvbXBhcmUgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHdpZGUgcmFuZ2UNCi1kZGNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQ0KLWRkY29tODgxIGNvbXBhcmUgOUUrMzg0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZGRjb204ODIgY29tcGFyZSArMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gIDENCi1kZGNvbTg4MyBjb21wYXJlIDlFLTM4MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQ0KLWRkY29tODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xDQotZGRjb204ODYgY29tcGFyZSA5RSszODQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1kZGNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAtMQ0KLWRkY29tODg4IGNvbXBhcmUgOUUtMzgzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotZGRjb205MDAgY29tcGFyZSAgIDBFLTM4MyAgMCAgICAgICAtPiAgMA0KLWRkY29tOTAxIGNvbXBhcmUgICAwRS0zODMgLTAgICAgICAgLT4gIDANCi1kZGNvbTkwMiBjb21wYXJlICAtMEUtMzgzICAwICAgICAgIC0+ICAwDQotZGRjb205MDMgY29tcGFyZSAgLTBFLTM4MyAtMCAgICAgICAtPiAgMA0KLWRkY29tOTA0IGNvbXBhcmUgICAwRS0zODMgIDBFKzM4NCAgLT4gIDANCi1kZGNvbTkwNSBjb21wYXJlICAgMEUtMzgzIC0wRSszODQgIC0+ICAwDQotZGRjb205MDYgY29tcGFyZSAgLTBFLTM4MyAgMEUrMzg0ICAtPiAgMA0KLWRkY29tOTA3IGNvbXBhcmUgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDANCi1kZGNvbTkwOCBjb21wYXJlICAgMCAgICAgICAwRSszODQgIC0+ICAwDQotZGRjb205MDkgY29tcGFyZSAgIDAgICAgICAtMEUrMzg0ICAtPiAgMA0KLWRkY29tOTEwIGNvbXBhcmUgIC0wICAgICAgIDBFKzM4NCAgLT4gIDANCi1kZGNvbTkxMSBjb21wYXJlICAtMCAgICAgIC0wRSszODQgIC0+ICAwDQotZGRjb205MzAgY29tcGFyZSAgIDBFKzM4NCAgMCAgICAgICAtPiAgMA0KLWRkY29tOTMxIGNvbXBhcmUgICAwRSszODQgLTAgICAgICAgLT4gIDANCi1kZGNvbTkzMiBjb21wYXJlICAtMEUrMzg0ICAwICAgICAgIC0+ICAwDQotZGRjb205MzMgY29tcGFyZSAgLTBFKzM4NCAtMCAgICAgICAtPiAgMA0KLWRkY29tOTM0IGNvbXBhcmUgICAwRSszODQgIDBFLTM4MyAgLT4gIDANCi1kZGNvbTkzNSBjb21wYXJlICAgMEUrMzg0IC0wRS0zODMgIC0+ICAwDQotZGRjb205MzYgY29tcGFyZSAgLTBFKzM4NCAgMEUtMzgzICAtPiAgMA0KLWRkY29tOTM3IGNvbXBhcmUgIC0wRSszODQgLTBFLTM4MyAgLT4gIDANCi1kZGNvbTkzOCBjb21wYXJlICAgMCAgICAgICAwRS0zODMgIC0+ICAwDQotZGRjb205MzkgY29tcGFyZSAgIDAgICAgICAtMEUtMzgzICAtPiAgMA0KLWRkY29tOTQwIGNvbXBhcmUgIC0wICAgICAgIDBFLTM4MyAgLT4gIDANCi1kZGNvbTk0MSBjb21wYXJlICAtMCAgICAgIC0wRS0zODMgIC0+ICAwDQotDQotLS0gc2lnbnMNCi1kZGNvbTk2MSBjb21wYXJlICAxZSs3NyAgMWUrMTEgLT4gIDENCi1kZGNvbTk2MiBjb21wYXJlICAxZSs3NyAtMWUrMTEgLT4gIDENCi1kZGNvbTk2MyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTENCi1kZGNvbTk2NCBjb21wYXJlIC0xZSs3NyAtMWUrMTEgLT4gLTENCi1kZGNvbTk2NSBjb21wYXJlICAxZS03NyAgMWUtMTEgLT4gLTENCi1kZGNvbTk2NiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDENCi1kZGNvbTk2NyBjb21wYXJlIC0xZS03NyAgMWUtMTEgLT4gLTENCi1kZGNvbTk2OCBjb21wYXJlIC0xZS03NyAtMWUtMTEgLT4gIDENCi0NCi0tLSBmdWxsIGFsaWdubWVudCByYW5nZSwgYm90aCB3YXlzDQotZGRjb21wMTAwMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IDANCi1kZGNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMA0KLWRkY29tcDEwMDMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMCAgICAtPiAwDQotZGRjb21wMTAwNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAgICAgIC0+IDANCi1kZGNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMA0KLWRkY29tcDEwMDYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZGRjb21wMTAwNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAgICAgICAgIC0+IDANCi1kZGNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMA0KLWRkY29tcDEwMDkgY29tcGFyZSAxIDEuMDAwMDAwMCAgICAgICAgICAtPiAwDQotZGRjb21wMTAxMCBjb21wYXJlIDEgMS4wMDAwMDAgICAgICAgICAgIC0+IDANCi1kZGNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMA0KLWRkY29tcDEwMTIgY29tcGFyZSAxIDEuMDAwMCAgICAgICAgICAgICAtPiAwDQotZGRjb21wMTAxMyBjb21wYXJlIDEgMS4wMDAgICAgICAgICAgICAgIC0+IDANCi1kZGNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMA0KLWRkY29tcDEwMTUgY29tcGFyZSAxIDEuMCAgICAgICAgICAgICAgICAtPiAwDQotZGRjb21wMTAyMSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwICAxIC0+IDANCi1kZGNvbXAxMDIyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMA0KLWRkY29tcDEwMjMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwDQotZGRjb21wMTAyNCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwICAgICAxIC0+IDANCi1kZGNvbXAxMDI1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMA0KLWRkY29tcDEwMjYgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwDQotZGRjb21wMTAyNyBjb21wYXJlIDEuMDAwMDAwMDAwICAgICAgICAxIC0+IDANCi1kZGNvbXAxMDI4IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMjkgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwDQotZGRjb21wMTAzMCBjb21wYXJlIDEuMDAwMDAwICAgICAgICAgICAxIC0+IDANCi1kZGNvbXAxMDMxIGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMzIgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwDQotZGRjb21wMTAzMyBjb21wYXJlIDEuMDAwICAgICAgICAgICAgICAxIC0+IDANCi1kZGNvbXAxMDM0IGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMA0KLWRkY29tcDEwMzUgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwDQotDQotLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybw0KLWRkY29tcDEwNDAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwICAtPiAwDQotZGRjb21wMTA0MSBjb21wYXJlIDAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0NCBjb21wYXJlIDAgNC4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0NyBjb21wYXJlIDAgNy4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA0OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xDQotZGRjb21wMTA1MCBjb21wYXJlIDAuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDANCi1kZGNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRkY29tcDEwNTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1MyBjb21wYXJlIDMuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kZGNvbXAxMDU0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRkY29tcDEwNTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1NiBjb21wYXJlIDYuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kZGNvbXAxMDU3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRkY29tcDEwNTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZGRjb21wMTA1OSBjb21wYXJlIDkuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRjb205OTkwIGNvbXBhcmUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRjb205OTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmUuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwCitkZGNvbTAwMiBjb21wYXJlICAtMiAgLTEgIC0+IC0xCitkZGNvbTAwMyBjb21wYXJlICAtMiAgIDAgIC0+IC0xCitkZGNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xCitkZGNvbTAwNSBjb21wYXJlICAtMiAgIDIgIC0+IC0xCitkZGNvbTAwNiBjb21wYXJlICAtMSAgLTIgIC0+IDEKK2RkY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMAorZGRjb20wMDggY29tcGFyZSAgLTEgICAwICAtPiAtMQorZGRjb20wMDkgY29tcGFyZSAgLTEgICAxICAtPiAtMQorZGRjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQorZGRjb20wMTEgY29tcGFyZSAgIDAgIC0yICAtPiAxCitkZGNvbTAxMiBjb21wYXJlICAgMCAgLTEgIC0+IDEKK2RkY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMAorZGRjb20wMTQgY29tcGFyZSAgIDAgICAxICAtPiAtMQorZGRjb20wMTUgY29tcGFyZSAgIDAgICAyICAtPiAtMQorZGRjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxCitkZGNvbTAxNyBjb21wYXJlICAgMSAgLTEgIC0+IDEKK2RkY29tMDE4IGNvbXBhcmUgICAxICAgMCAgLT4gMQorZGRjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwCitkZGNvbTAyMCBjb21wYXJlICAgMSAgIDIgIC0+IC0xCitkZGNvbTAyMSBjb21wYXJlICAgMiAgLTIgIC0+IDEKK2RkY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQorZGRjb20wMjMgY29tcGFyZSAgIDIgICAwICAtPiAxCitkZGNvbTAyNSBjb21wYXJlICAgMiAgIDEgIC0+IDEKK2RkY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMAorCitkZGNvbTAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMAorZGRjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xCitkZGNvbTAzMyBjb21wYXJlICAtMjAgICAwMCAgLT4gLTEKK2RkY29tMDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQorZGRjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xCitkZGNvbTAzNiBjb21wYXJlICAtMTAgIC0yMCAgLT4gMQorZGRjb20wMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDAKK2RkY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQorZGRjb20wMzkgY29tcGFyZSAgLTEwICAgMTAgIC0+IC0xCitkZGNvbTA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTEKK2RkY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxCitkZGNvbTA0MiBjb21wYXJlICAgMDAgIC0xMCAgLT4gMQorZGRjb20wNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDAKK2RkY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQorZGRjb20wNDUgY29tcGFyZSAgIDAwICAgMjAgIC0+IC0xCitkZGNvbTA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQorZGRjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDEKK2RkY29tMDQ4IGNvbXBhcmUgICAxMCAgIDAwICAtPiAxCitkZGNvbTA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMAorZGRjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xCitkZGNvbTA1MSBjb21wYXJlICAgMjAgIC0yMCAgLT4gMQorZGRjb20wNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDEKK2RkY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxCitkZGNvbTA1NSBjb21wYXJlICAgMjAgICAxMCAgLT4gMQorZGRjb20wNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDAKKworZGRjb20wNjEgY29tcGFyZSAgLTIuMCAgLTIuMCAgLT4gMAorZGRjb20wNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTEKK2RkY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNvbTA2NCBjb21wYXJlICAtMi4wICAgMS4wICAtPiAtMQorZGRjb20wNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY29tMDY3IGNvbXBhcmUgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY29tMDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xCitkZGNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQorZGRjb20wNzAgY29tcGFyZSAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDEKK2RkY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDEKK2RkY29tMDczIGNvbXBhcmUgICAwLjAgICAwLjAgIC0+IDAKK2RkY29tMDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xCitkZGNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQorZGRjb20wNzYgY29tcGFyZSAgIDEuMCAgLTIuMCAgLT4gMQorZGRjb20wNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQorZGRjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQorZGRjb20wNzkgY29tcGFyZSAgIDEuMCAgIDEuMCAgLT4gMAorZGRjb20wODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDEKK2RkY29tMDgyIGNvbXBhcmUgICAyLjAgIC0xLjAgIC0+IDEKK2RkY29tMDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDEKK2RkY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDEKK2RkY29tMDg2IGNvbXBhcmUgICAyLjAgICAyLjAgIC0+IDAKK2RkY29tMDg3IGNvbXBhcmUgICAxLjAgICAwLjEgIC0+IDEKK2RkY29tMDg4IGNvbXBhcmUgICAwLjEgICAxLjAgIC0+IC0xCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZGRjb20wOTUgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwCitkZGNvbTA5NiBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC0xCitkZGNvbTA5NyBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKK2RkY29tMDk4IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RkY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKK2RkY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKK2RkY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDAKK2RkY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKK2RkY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RkY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RkY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RkY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RkY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RkY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKK2RkY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZGRjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQorZGRjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQorZGRjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQorZGRjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQorZGRjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQorZGRjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQorZGRjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQorZGRjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQorZGRjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQorZGRjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RkY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RkY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xCitkZGNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RkY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkZGNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQorZGRjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RkY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkZGNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RkY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RkY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQorZGRjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RkY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCitkZGNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZGRjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RkY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RkY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCitkZGNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQorZGRjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RkY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZGRjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RkY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkZGNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQorZGRjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKK2RkY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZGRjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZGRjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RkY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xCitkZGNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RkY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkZGNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQorZGRjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RkY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkZGNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RkY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RkY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQorZGRjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RkY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCitkZGNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQorZGRjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RkY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCitkZGNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQorZGRjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RkY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCitkZGNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQorZGRjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RkY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQorZGRjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RkY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCitkZGNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQorZGRjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RkY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCitkZGNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZGRjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZGRjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RkY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxCitkZGNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQorZGRjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RkY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkZGNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RkY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxCitkZGNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RkY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RkY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAorZGRjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCitkZGNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RkY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZGRjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkZGNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RkY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZGRjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkZGNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RkY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZGRjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RkY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RkY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RkY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RkY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RkY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RkY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RkY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RkY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RkY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RkY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RkY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RkY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQorZGRjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RkY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkZGNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RkY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCitkZGNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkZGNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQorZGRjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCitkZGNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQorZGRjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCitkZGNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQorZGRjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xCitkZGNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQorZGRjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCitkZGNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQorZGRjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCitkZGNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQorZGRjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xCitkZGNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQorZGRjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjb200NzMgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200NzQgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3NSBjb21wYXJlIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200NzYgY29tcGFyZSAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200NzcgY29tcGFyZSAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3OCBjb21wYXJlIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200NzkgY29tcGFyZSAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200ODAgY29tcGFyZSAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ4MSBjb21wYXJlIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200ODIgY29tcGFyZSAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200ODMgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4NyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkZGNvbTQ4OCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RkY29tNDg5IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkZGNvbTQ5MCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwCitkZGNvbTQ5MSBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDkyIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwCitkZGNvbTQ5MyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwCitkZGNvbTQ5NCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDAKK2RkY29tNDk1IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwCitkZGNvbTQ5NiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwCitkZGNvbTQ5NyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZGRjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZGRjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkZGNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkZGNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkZGNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkZGNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkZGNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkZGNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkZGNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkZGNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkZGNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkZGNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkZGNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkZGNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkZGNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkZGNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkZGNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkZGNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZGRjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZGRjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZGRjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZGRjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkZGNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkZGNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkZGNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkZGNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkZGNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkZGNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkZGNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKK2RkY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMAorZGRjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCitkZGNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKK2RkY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMAorZGRjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCitkZGNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKK2RkY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMAorZGRjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCitkZGNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKK2RkY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMAorZGRjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCitkZGNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKK2RkY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMAorZGRjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCitkZGNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKKworZGRjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwCitkZGNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKK2RkY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAorZGRjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwCitkZGNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKK2RkY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAorZGRjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwCitkZGNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKK2RkY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAorZGRjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwCitkZGNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKK2RkY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAorZGRjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwCitkZGNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKK2RkY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAorZGRjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwCitkZGNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKK2RkY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAorZGRjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwCitkZGNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKK2RkY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAorZGRjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwCitkZGNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKK2RkY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RkY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZGRjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkZGNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RkY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZGRjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkZGNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RkY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZGRjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkZGNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RkY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RkY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RkY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZGRjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkZGNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RkY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RkY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQorZGRjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xCitkZGNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorZGRjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxCitkZGNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZGRjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDEKK2RkY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQorZGRjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKK2RkY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQorZGRjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKK2RkY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQorZGRjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDEKK2RkY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQorZGRjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKK2RkY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQorZGRjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKK2RkY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZGRjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDEKK2RkY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCitkZGNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xCitkZGNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkZGNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDAKK2RkY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQorZGRjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCitkZGNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQorZGRjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKK2RkY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxCitkZGNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQorZGRjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKK2RkY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxCitkZGNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorZGRjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQorZGRjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKK2RkY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQorZGRjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTEKK2RkY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCitkZGNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQorZGRjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTEKK2RkY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RkY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQorZGRjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDEKK2RkY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQorZGRjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDEKK2RkY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KK2RkY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KK2RkY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4KKworZGRjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkZGNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKK2RkY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NworZGRjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RkY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZGRjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKK2RkY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEKK2RkY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKK2RkY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKK2RkY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDEKKworZGRjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkZGNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjb204ODEgY29tcGFyZSA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY29tODgyIGNvbXBhcmUgKzAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+ICAxCitkZGNvbTg4MyBjb21wYXJlIDlFLTM4MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZGRjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKK2RkY29tODg2IGNvbXBhcmUgOUUrMzg0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkZGNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAtMQorZGRjb204ODggY29tcGFyZSA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkZGNvbTkwMCBjb21wYXJlICAgMEUtMzgzICAwICAgICAgIC0+ICAwCitkZGNvbTkwMSBjb21wYXJlICAgMEUtMzgzIC0wICAgICAgIC0+ICAwCitkZGNvbTkwMiBjb21wYXJlICAtMEUtMzgzICAwICAgICAgIC0+ICAwCitkZGNvbTkwMyBjb21wYXJlICAtMEUtMzgzIC0wICAgICAgIC0+ICAwCitkZGNvbTkwNCBjb21wYXJlICAgMEUtMzgzICAwRSszODQgIC0+ICAwCitkZGNvbTkwNSBjb21wYXJlICAgMEUtMzgzIC0wRSszODQgIC0+ICAwCitkZGNvbTkwNiBjb21wYXJlICAtMEUtMzgzICAwRSszODQgIC0+ICAwCitkZGNvbTkwNyBjb21wYXJlICAtMEUtMzgzIC0wRSszODQgIC0+ICAwCitkZGNvbTkwOCBjb21wYXJlICAgMCAgICAgICAwRSszODQgIC0+ICAwCitkZGNvbTkwOSBjb21wYXJlICAgMCAgICAgIC0wRSszODQgIC0+ICAwCitkZGNvbTkxMCBjb21wYXJlICAtMCAgICAgICAwRSszODQgIC0+ICAwCitkZGNvbTkxMSBjb21wYXJlICAtMCAgICAgIC0wRSszODQgIC0+ICAwCitkZGNvbTkzMCBjb21wYXJlICAgMEUrMzg0ICAwICAgICAgIC0+ICAwCitkZGNvbTkzMSBjb21wYXJlICAgMEUrMzg0IC0wICAgICAgIC0+ICAwCitkZGNvbTkzMiBjb21wYXJlICAtMEUrMzg0ICAwICAgICAgIC0+ICAwCitkZGNvbTkzMyBjb21wYXJlICAtMEUrMzg0IC0wICAgICAgIC0+ICAwCitkZGNvbTkzNCBjb21wYXJlICAgMEUrMzg0ICAwRS0zODMgIC0+ICAwCitkZGNvbTkzNSBjb21wYXJlICAgMEUrMzg0IC0wRS0zODMgIC0+ICAwCitkZGNvbTkzNiBjb21wYXJlICAtMEUrMzg0ICAwRS0zODMgIC0+ICAwCitkZGNvbTkzNyBjb21wYXJlICAtMEUrMzg0IC0wRS0zODMgIC0+ICAwCitkZGNvbTkzOCBjb21wYXJlICAgMCAgICAgICAwRS0zODMgIC0+ICAwCitkZGNvbTkzOSBjb21wYXJlICAgMCAgICAgIC0wRS0zODMgIC0+ICAwCitkZGNvbTk0MCBjb21wYXJlICAtMCAgICAgICAwRS0zODMgIC0+ICAwCitkZGNvbTk0MSBjb21wYXJlICAtMCAgICAgIC0wRS0zODMgIC0+ICAwCisKKy0tIHNpZ25zCitkZGNvbTk2MSBjb21wYXJlICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RkY29tOTYyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQorZGRjb205NjMgY29tcGFyZSAtMWUrNzcgIDFlKzExIC0+IC0xCitkZGNvbTk2NCBjb21wYXJlIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RkY29tOTY1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQorZGRjb205NjYgY29tcGFyZSAgMWUtNzcgLTFlLTExIC0+ICAxCitkZGNvbTk2NyBjb21wYXJlIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RkY29tOTY4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBmdWxsIGFsaWdubWVudCByYW5nZSwgYm90aCB3YXlzCitkZGNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMAorZGRjb21wMTAwMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMCAgIC0+IDAKK2RkY29tcDEwMDMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMCAgICAtPiAwCitkZGNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMAorZGRjb21wMTAwNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMCAgICAgIC0+IDAKK2RkY29tcDEwMDYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZGNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMAorZGRjb21wMTAwOCBjb21wYXJlIDEgMS4wMDAwMDAwMCAgICAgICAgIC0+IDAKK2RkY29tcDEwMDkgY29tcGFyZSAxIDEuMDAwMDAwMCAgICAgICAgICAtPiAwCitkZGNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMAorZGRjb21wMTAxMSBjb21wYXJlIDEgMS4wMDAwMCAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTIgY29tcGFyZSAxIDEuMDAwMCAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxNCBjb21wYXJlIDEgMS4wMCAgICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTUgY29tcGFyZSAxIDEuMCAgICAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDIxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZGRjb21wMTAyMiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RkY29tcDEwMjMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkZGNvbXAxMDI0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZGRjb21wMTAyNSBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RkY29tcDEwMjYgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkZGNvbXAxMDI3IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZGRjb21wMTAyOCBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMjkgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMwIGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzMSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzIgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMzIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzNCBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzUgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwCisKKy0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8KK2RkY29tcDEwNDAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkZGNvbXAxMDQxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDUwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMAorZGRjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDUzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorCistLSBOdWxsIHRlc3RzCitkZGNvbTk5OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY29tOTk5MSBjb21wYXJlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVNpZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVNpZy5kZWNUZXN0CmluZGV4IDhkM2ZjZTAuLmM4MmVjNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QKQEAgLTEsNjQ3ICsxLDY0NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb21wYXJlU2lnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkY21zMDAxIGNvbXBhcmVzaWcgIC0yICAtMiAgLT4gMA0KLWRkY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTENCi1kZGNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xDQotZGRjbXMwMDQgY29tcGFyZXNpZyAgLTIgICAxICAtPiAtMQ0KLWRkY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTENCi1kZGNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDENCi1kZGNtczAwNyBjb21wYXJlc2lnICAtMSAgLTEgIC0+IDANCi1kZGNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xDQotZGRjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQ0KLWRkY21zMDEwIGNvbXBhcmVzaWcgIC0xICAgMiAgLT4gLTENCi1kZGNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDENCi1kZGNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDENCi1kZGNtczAxMyBjb21wYXJlc2lnICAgMCAgIDAgIC0+IDANCi1kZGNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xDQotZGRjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQ0KLWRkY21zMDE2IGNvbXBhcmVzaWcgICAxICAtMiAgLT4gMQ0KLWRkY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQ0KLWRkY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQ0KLWRkY21zMDE5IGNvbXBhcmVzaWcgICAxICAgMSAgLT4gMA0KLWRkY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTENCi1kZGNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDENCi1kZGNtczAyMiBjb21wYXJlc2lnICAgMiAgLTEgIC0+IDENCi1kZGNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDENCi1kZGNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDENCi1kZGNtczAyNiBjb21wYXJlc2lnICAgMiAgIDIgIC0+IDANCi0NCi1kZGNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMA0KLWRkY21zMDMyIGNvbXBhcmVzaWcgIC0yMCAgLTEwICAtPiAtMQ0KLWRkY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQ0KLWRkY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQ0KLWRkY21zMDM1IGNvbXBhcmVzaWcgIC0yMCAgIDIwICAtPiAtMQ0KLWRkY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxDQotZGRjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDANCi1kZGNtczAzOCBjb21wYXJlc2lnICAtMTAgICAwMCAgLT4gLTENCi1kZGNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTENCi1kZGNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTENCi1kZGNtczA0MSBjb21wYXJlc2lnICAgMDAgIC0yMCAgLT4gMQ0KLWRkY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxDQotZGRjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDANCi1kZGNtczA0NCBjb21wYXJlc2lnICAgMDAgICAxMCAgLT4gLTENCi1kZGNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTENCi1kZGNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQ0KLWRkY21zMDQ3IGNvbXBhcmVzaWcgICAxMCAgLTEwICAtPiAxDQotZGRjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDENCi1kZGNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMA0KLWRkY21zMDUwIGNvbXBhcmVzaWcgICAxMCAgIDIwICAtPiAtMQ0KLWRkY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxDQotZGRjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDENCi1kZGNtczA1MyBjb21wYXJlc2lnICAgMjAgICAwMCAgLT4gMQ0KLWRkY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxDQotZGRjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDANCi0NCi1kZGNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwDQotZGRjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTENCi1kZGNtczA2MyBjb21wYXJlc2lnICAtMi4wICAgMC4wICAtPiAtMQ0KLWRkY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xDQotZGRjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTENCi1kZGNtczA2NiBjb21wYXJlc2lnICAtMS4wICAtMi4wICAtPiAxDQotZGRjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMA0KLWRkY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xDQotZGRjbXMwNjkgY29tcGFyZXNpZyAgLTEuMCAgIDEuMCAgLT4gLTENCi1kZGNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQ0KLWRkY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDENCi1kZGNtczA3MiBjb21wYXJlc2lnICAgMC4wICAtMS4wICAtPiAxDQotZGRjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMA0KLWRkY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xDQotZGRjbXMwNzUgY29tcGFyZXNpZyAgIDAuMCAgIDIuMCAgLT4gLTENCi1kZGNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxDQotZGRjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQ0KLWRkY21zMDc4IGNvbXBhcmVzaWcgICAxLjAgICAwLjAgIC0+IDENCi1kZGNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwDQotZGRjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTENCi1kZGNtczA4MSBjb21wYXJlc2lnICAgMi4wICAtMi4wICAtPiAxDQotZGRjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQ0KLWRkY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDENCi1kZGNtczA4NSBjb21wYXJlc2lnICAgMi4wICAgMS4wICAtPiAxDQotZGRjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRkY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMA0KLWRkY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTENCi1kZGNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCi1kZGNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi1kZGNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwDQotZGRjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMA0KLWRkY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDANCi1kZGNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwDQotZGRjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMA0KLWRkY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDANCi1kZGNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwDQotZGRjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMA0KLWRkY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDANCi1kZGNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwDQotZGRjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMA0KLQ0KLWRkY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDENCi1kZGNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxDQotZGRjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQ0KLWRkY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDENCi1kZGNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxDQotZGRjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWRkY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDENCi1kZGNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxDQotZGRjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWRkY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxDQotZGRjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWRkY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xDQotZGRjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTENCi1kZGNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRkY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xDQotZGRjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQ0KLWRkY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotZGRjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTENCi1kZGNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRkY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xDQotZGRjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZGRjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTENCi1kZGNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWRkY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xDQotZGRjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTENCi1kZGNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQotZGRjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTENCi1kZGNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xDQotZGRjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTENCi1kZGNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xDQotZGRjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTENCi1kZGNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWRkY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xDQotZGRjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTENCi1kZGNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWRkY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xDQotZGRjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTENCi1kZGNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWRkY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xDQotZGRjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTENCi0NCi1kZGNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRkY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xDQotZGRjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTENCi1kZGNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRkY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xDQotZGRjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTENCi1kZGNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWRkY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xDQotZGRjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTENCi1kZGNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRkY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRkY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxDQotZGRjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1kZGNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQ0KLWRkY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxDQotZGRjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1kZGNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KLWRkY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxDQotZGRjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1kZGNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KLWRkY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxDQotZGRjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQ0KLWRkY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxDQotZGRjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDENCi1kZGNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KLWRkY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxDQotZGRjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDENCi1kZGNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQ0KLWRkY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxDQotZGRjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1kZGNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KLWRkY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxDQotDQotZGRjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDENCi1kZGNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxDQotZGRjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1kZGNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxDQotZGRjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1kZGNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxDQotZGRjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDENCi1kZGNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kZGNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDANCi1kZGNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDANCi1kZGNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDANCi1kZGNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDANCi1kZGNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1kZGNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDANCi1kZGNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDANCi1kZGNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCi1kZGNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCi1kZGNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDANCi1kZGNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDANCi0NCi1kZGNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQotZGRjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KLWRkY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1kZGNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQotZGRjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KLWRkY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1kZGNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQotZGRjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KLWRkY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1kZGNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQotZGRjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KLQ0KLWRkY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWRkY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KLWRkY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRkY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRkY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWRkY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRkY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRkY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRkY21zNDczIGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNtczQ3NCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCi1kZGNtczQ3NSBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDc2IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCi1kZGNtczQ3NyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNtczQ3OCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KLWRkY21zNDc5IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNtczQ4MCBjb21wYXJlc2lnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCi1kZGNtczQ4MSBjb21wYXJlc2lnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY21zNDgyIGNvbXBhcmVzaWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IDANCi1kZGNtczQ4MyBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDANCi1kZGNtczQ4NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwDQotZGRjbXM0ODggY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAwDQotZGRjbXM0ODkgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDANCi1kZGNtczQ5MCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwDQotZGRjbXM0OTEgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAwDQotZGRjbXM0OTIgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDANCi1kZGNtczQ5MyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwDQotZGRjbXM0OTQgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAwDQotZGRjbXM0OTUgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDANCi1kZGNtczQ5NiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwDQotZGRjbXM0OTcgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRkY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRkY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRkY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRkY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRkY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRkY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRkY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRkY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRkY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRkY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWRkY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KLWRkY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KLWRkY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWRkY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KLWRkY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KLWRkY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWRkY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCi1kZGNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQotZGRjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWRkY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCi1kZGNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQotZGRjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWRkY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCi1kZGNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQotZGRjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWRkY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCi1kZGNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQotZGRjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWRkY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCi1kZGNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQotZGRjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1kZGNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1kZGNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1kZGNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQotZGRjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1kZGNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQotZGRjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1kZGNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQotZGRjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KLWRkY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1kZGNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQotZGRjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1kZGNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1kZGNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1kZGNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1kZGNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQotZGRjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KLWRkY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1kZGNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQotLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQotZGRjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1kZGNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRkY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQotZGRjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1kZGNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRkY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQotZGRjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1kZGNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRkY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQotZGRjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotZGRjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQotZGRjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQotZGRjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotZGRjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQotZGRjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQotZGRjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotZGRjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQotZGRjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQotZGRjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotZGRjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1kZGNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCi1kZGNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotZGRjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWRkY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCi1kZGNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotZGRjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWRkY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCi1kZGNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotZGRjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWRkY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCi1kZGNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotZGRjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWRkY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotZGRjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWRkY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCi1kZGNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotZGRjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWRkY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCi1kZGNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotZGRjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWRkY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCi1kZGNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotZGRjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWRkY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCi1kZGNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZGNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDANCi1kZGNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDANCi1kZGNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDANCi1kZGNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDANCi1kZGNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDANCi1kZGNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDANCi1kZGNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDANCi1kZGNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDANCi1kZGNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDANCi1kZGNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDANCi1kZGNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDANCi1kZGNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDANCi1kZGNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDANCi1kZGNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDANCi1kZGNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDANCi1kZGNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDANCi0NCi1kZGNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDANCi1kZGNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDANCi1kZGNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDANCi1kZGNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDANCi1kZGNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDANCi1kZGNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDANCi1kZGNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDANCi1kZGNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDANCi1kZGNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDANCi1kZGNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDANCi1kZGNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDANCi1kZGNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDANCi1kZGNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDANCi1kZGNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDANCi1kZGNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDANCi1kZGNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDANCi1kZGNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDANCi1kZGNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDANCi1kZGNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDANCi1kZGNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDANCi1kZGNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDANCi1kZGNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDANCi1kZGNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDANCi1kZGNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZGRjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotZGRjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwDQotZGRjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwDQotZGRjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwDQotZGRjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwDQotZGRjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwDQotZGRjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwDQotZGRjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwDQotZGRjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwDQotZGRjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwDQotZGRjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwDQotZGRjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwDQotZGRjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwDQotZGRjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwDQotZGRjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwDQotDQotLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0DQotZGRjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxDQotZGRjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwDQotZGRjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NyAtPiAtMQ0KLWRkY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQ0KLWRkY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMA0KLWRkY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDIyMzQ1Njc4OTAxMjM0NTYgLT4gLTENCi1kZGNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDENCi1kZGNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDANCi1kZGNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IC0xDQotDQotLS0gbWlzY2VsbGFuZW91cw0KLWRkY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxDQotZGRjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xDQotZGRjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDENCi1kZGNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTENCi1kZGNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KLWRkY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQ0KLWRkY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxDQotZGRjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xDQotZGRjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDENCi1kZGNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTENCi1kZGNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KLWRkY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQ0KLQ0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uDQotZGRjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxDQotZGRjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxDQotZGRjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxDQotZGRjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwDQotZGRjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWRkY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1kZGNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xDQotZGRjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWRkY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1kZGNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xDQotZGRjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwDQotZGRjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxDQotZGRjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxDQotZGRjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxDQotDQotLS0gU3BlY2lhbHMNCi1kZGNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQ0KLWRkY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxDQotZGRjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDENCi1kZGNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQ0KLWRkY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxDQotZGRjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDENCi1kZGNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQ0KLWRkY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQotZGRjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTENCi1kZGNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRkY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xDQotZGRjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTENCi1kZGNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQ0KLWRkY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xDQotZGRjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTENCi1kZGNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRkY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQotZGRjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTENCi1kZGNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRkY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xDQotZGRjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTENCi1kZGNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQ0KLWRkY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xDQotZGRjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTENCi1kZGNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRkY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxDQotZGRjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDENCi1kZGNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQ0KLWRkY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxDQotZGRjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDENCi1kZGNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQ0KLWRkY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQotDQotZGRjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRjbXM4NzEgY29tcGFyZXNpZyAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzIgY29tcGFyZXNpZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzQgY29tcGFyZXNpZyAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzUgY29tcGFyZXNpZyAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzcgY29tcGFyZXNpZyAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzggY29tcGFyZXNpZyAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gd2lkZSByYW5nZQ0KLWRkY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xDQotZGRjbXM4ODEgY29tcGFyZXNpZyA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCi1kZGNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQ0KLWRkY21zODgzIGNvbXBhcmVzaWcgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQotZGRjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTENCi1kZGNtczg4NiBjb21wYXJlc2lnIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWRkY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xDQotZGRjbXM4ODggY29tcGFyZXNpZyA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCi0NCi0tLSBzaWducw0KLWRkY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KLWRkY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KLWRkY21zOTAzIGNvbXBhcmVzaWcgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KLWRkY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KLWRkY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRkY21zOTA2IGNvbXBhcmVzaWcgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KLWRkY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KLWRkY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY21zOTkxIGNvbXBhcmVzaWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwCitkZGNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xCitkZGNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xCitkZGNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xCitkZGNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xCitkZGNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDEKK2RkY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMAorZGRjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQorZGRjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQorZGRjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQorZGRjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxCitkZGNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDEKK2RkY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMAorZGRjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQorZGRjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQorZGRjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxCitkZGNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDEKK2RkY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQorZGRjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwCitkZGNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xCitkZGNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDEKK2RkY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQorZGRjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxCitkZGNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDEKK2RkY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMAorCitkZGNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMAorZGRjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xCitkZGNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTEKK2RkY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQorZGRjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xCitkZGNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQorZGRjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDAKK2RkY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQorZGRjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xCitkZGNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTEKK2RkY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxCitkZGNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQorZGRjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDAKK2RkY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQorZGRjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xCitkZGNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQorZGRjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDEKK2RkY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxCitkZGNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMAorZGRjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xCitkZGNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQorZGRjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDEKK2RkY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxCitkZGNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQorZGRjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDAKKworZGRjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMAorZGRjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTEKK2RkY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQorZGRjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xCitkZGNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQorZGRjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDEKK2RkY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDEKK2RkY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDAKK2RkY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xCitkZGNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQorZGRjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQorZGRjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQorZGRjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQorZGRjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMAorZGRjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDEKK2RkY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDEKK2RkY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDEKK2RkY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDEKK2RkY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDAKK2RkY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZGRjbXMxMDAgY29tcGFyZXNpZyAgIDcuMCAgICA3LjAgICAgLT4gMAorZGRjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMAorZGRjbXMxMDIgY29tcGFyZXNpZyAgIDcgICAgICA3LjAgICAgLT4gMAorZGRjbXMxMDMgY29tcGFyZXNpZyAgIDdFKzAgICA3LjAgICAgLT4gMAorZGRjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMAorZGRjbXMxMDUgY29tcGFyZXNpZyAgIDAuN0UrMSA3ICAgICAgLT4gMAorZGRjbXMxMDYgY29tcGFyZXNpZyAgIDcwRS0xICA3ICAgICAgLT4gMAorZGRjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMAorZGRjbXMxMDggY29tcGFyZXNpZyAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjbXMxMDkgY29tcGFyZXNpZyAgIDcgICAgICAwLjdFKzEgLT4gMAorZGRjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkZGNtczEyMCBjb21wYXJlc2lnICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxCitkZGNtczEyMiBjb21wYXJlc2lnICAgOCAgICAgIDcuMCAgICAtPiAxCitkZGNtczEyMyBjb21wYXJlc2lnICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxCitkZGNtczEyNSBjb21wYXJlc2lnICAgMC44RSsxIDcgICAgICAtPiAxCitkZGNtczEyNiBjb21wYXJlc2lnICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxCitkZGNtczEyOCBjb21wYXJlc2lnICAgOC4wICAgIDcwRS0xICAtPiAxCitkZGNtczEyOSBjb21wYXJlc2lnICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQorCitkZGNtczE0MCBjb21wYXJlc2lnICAgOC4wICAgIDkuMCAgICAtPiAtMQorZGRjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY21zMTQyIGNvbXBhcmVzaWcgICA4ICAgICAgOS4wICAgIC0+IC0xCitkZGNtczE0MyBjb21wYXJlc2lnICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY21zMTQ1IGNvbXBhcmVzaWcgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkZGNtczE0NiBjb21wYXJlc2lnICAgODBFLTEgIDkgICAgICAtPiAtMQorZGRjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY21zMTQ4IGNvbXBhcmVzaWcgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkZGNtczE0OSBjb21wYXJlc2lnICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RkY21zMjAxIGNvbXBhcmVzaWcgIC03LjAgICAgNyAgICAgIC0+IC0xCitkZGNtczIwMiBjb21wYXJlc2lnICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RkY21zMjA0IGNvbXBhcmVzaWcgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkZGNtczIwNSBjb21wYXJlc2lnICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RkY21zMjA3IGNvbXBhcmVzaWcgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkZGNtczIwOCBjb21wYXJlc2lnICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RkY21zMjEwIGNvbXBhcmVzaWcgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNtczIyMSBjb21wYXJlc2lnICAtOC4wICAgIDcgICAgICAtPiAtMQorZGRjbXMyMjIgY29tcGFyZXNpZyAgLTggICAgICA3LjAgICAgLT4gLTEKK2RkY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNtczIyNCBjb21wYXJlc2lnICAtODBFLTEgIDcuMCAgICAtPiAtMQorZGRjbXMyMjUgY29tcGFyZXNpZyAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RkY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNtczIyNyBjb21wYXJlc2lnICAtOC4wICAgIDdFKzAgICAtPiAtMQorZGRjbXMyMjggY29tcGFyZXNpZyAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RkY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNtczIzMCBjb21wYXJlc2lnICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkZGNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQorZGRjbXMyNDEgY29tcGFyZXNpZyAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY21zMjQyIGNvbXBhcmVzaWcgIC04ICAgICAgOS4wICAgIC0+IC0xCitkZGNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZGRjbXMyNDQgY29tcGFyZXNpZyAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY21zMjQ1IGNvbXBhcmVzaWcgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkZGNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQorZGRjbXMyNDcgY29tcGFyZXNpZyAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY21zMjQ4IGNvbXBhcmVzaWcgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkZGNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZGRjbXMyNTAgY29tcGFyZXNpZyAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjbXMzMDAgY29tcGFyZXNpZyAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RkY21zMzAxIGNvbXBhcmVzaWcgICA3LjAgICAgLTcgICAgICAtPiAxCitkZGNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjbXMzMDMgY29tcGFyZXNpZyAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RkY21zMzA0IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkZGNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjbXMzMDYgY29tcGFyZXNpZyAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RkY21zMzA3IGNvbXBhcmVzaWcgICA3LjAgICAgLTdFKzAgICAtPiAxCitkZGNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjbXMzMDkgY29tcGFyZXNpZyAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RkY21zMzEwIGNvbXBhcmVzaWcgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY21zMzIwIGNvbXBhcmVzaWcgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNtczMyMSBjb21wYXJlc2lnICAgOC4wICAgIC03ICAgICAgLT4gMQorZGRjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDEKK2RkY21zMzIzIGNvbXBhcmVzaWcgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNtczMyNCBjb21wYXJlc2lnICAgODBFLTEgIC03LjAgICAgLT4gMQorZGRjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RkY21zMzI2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNtczMyNyBjb21wYXJlc2lnICAgOC4wICAgIC03RSswICAgLT4gMQorZGRjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RkY21zMzI5IGNvbXBhcmVzaWcgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNtczMzMCBjb21wYXJlc2lnICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkZGNtczM0MCBjb21wYXJlc2lnICAgOC4wICAgIC05LjAgICAgLT4gMQorZGRjbXMzNDEgY29tcGFyZXNpZyAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxCitkZGNtczM0MyBjb21wYXJlc2lnICAgOEUrMCAgIC05LjAgICAgLT4gMQorZGRjbXMzNDQgY29tcGFyZXNpZyAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxCitkZGNtczM0NiBjb21wYXJlc2lnICAgODBFLTEgIC05ICAgICAgLT4gMQorZGRjbXMzNDcgY29tcGFyZXNpZyAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxCitkZGNtczM0OSBjb21wYXJlc2lnICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZGRjbXMzNTAgY29tcGFyZXNpZyAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjbXM0MDAgY29tcGFyZXNpZyAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkZGNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RkY21zNDAyIGNvbXBhcmVzaWcgICAtNyAgICAgIC03LjAgICAgLT4gMAorZGRjbXM0MDMgY29tcGFyZXNpZyAgIC03RSswICAgLTcuMCAgICAtPiAwCitkZGNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY21zNDA1IGNvbXBhcmVzaWcgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZGRjbXM0MDYgY29tcGFyZXNpZyAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkZGNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RkY21zNDA4IGNvbXBhcmVzaWcgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZGRjbXM0MDkgY29tcGFyZXNpZyAgIC03ICAgICAgLS43RSsxICAtPiAwCitkZGNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZGRjbXM0MjAgY29tcGFyZXNpZyAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZGRjbXM0MjIgY29tcGFyZXNpZyAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjMgY29tcGFyZXNpZyAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZGRjbXM0MjUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZGRjbXM0MjYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZGRjbXM0MjggY29tcGFyZXNpZyAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZGRjbXM0MjkgY29tcGFyZXNpZyAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkZGNtczQ0MCBjb21wYXJlc2lnICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RkY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjbXM0NDIgY29tcGFyZXNpZyAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkZGNtczQ0MyBjb21wYXJlc2lnICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RkY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjbXM0NDUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkZGNtczQ0NiBjb21wYXJlc2lnICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RkY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjbXM0NDggY29tcGFyZXNpZyAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkZGNtczQ0OSBjb21wYXJlc2lnICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RkY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjbXM0NzMgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0NzQgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ3NSBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0NzYgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0NzcgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ3OCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0NzkgY29tcGFyZXNpZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0ODAgY29tcGFyZXNpZyAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNtczQ4MSBjb21wYXJlc2lnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0ODIgY29tcGFyZXNpZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0ODMgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNtczQ4NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkZGNtczQ4OCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RkY21zNDg5IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkZGNtczQ5MCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwCitkZGNtczQ5MSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDAKK2RkY21zNDkyIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwCitkZGNtczQ5MyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwCitkZGNtczQ5NCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDAKK2RkY21zNDk1IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwCitkZGNtczQ5NiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwCitkZGNtczQ5NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjbXM1MDAgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNtczUwMSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZGRjbXM1MDMgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNtczUwNCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZGRjbXM1MDYgY29tcGFyZXNpZyAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNtczUwNyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZGRjbXM1MDkgY29tcGFyZXNpZyAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNtczUxMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZGRjbXM1MTIgY29tcGFyZXNpZyAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNtczUxMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZGRjbXM1MTUgY29tcGFyZXNpZyAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNtczUxNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkZGNtczUxOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNtczUxOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkZGNtczUyMiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNtczUyMyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkZGNtczUyNSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNtczUyNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkZGNtczUyOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNtczUyOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkZGNtczUzMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkZGNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkZGNtczU0MSBjb21wYXJlc2lnICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNtczU0MiBjb21wYXJlc2lnICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkZGNtczU0NCBjb21wYXJlc2lnICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNtczU0NSBjb21wYXJlc2lnICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkZGNtczU0NyBjb21wYXJlc2lnICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNtczU0OCBjb21wYXJlc2lnICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkZGNtczU1MCBjb21wYXJlc2lnICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNtczU1MSBjb21wYXJlc2lnICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkZGNtczU1MyBjb21wYXJlc2lnICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNtczU1NCBjb21wYXJlc2lnICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkZGNtczU1NiBjb21wYXJlc2lnICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNtczU1NyBjb21wYXJlc2lnICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkZGNtczU1OSBjb21wYXJlc2lnICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNtczU2MSBjb21wYXJlc2lnICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkZGNtczU2MyBjb21wYXJlc2lnICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNtczU2NCBjb21wYXJlc2lnICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkZGNtczU2NiBjb21wYXJlc2lnICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNtczU2NyBjb21wYXJlc2lnICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkZGNtczU2OSBjb21wYXJlc2lnICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNtczU3MCBjb21wYXJlc2lnICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY21zNTgwIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkZGNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjbXM1ODIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY21zNTgzIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkZGNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjbXM1ODUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY21zNTg2IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkZGNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjbXM1ODggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY21zNTg5IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZGRjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNtczU5MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY21zNTkyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZGRjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNtczU5NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY21zNTk1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZGRjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNtczU5NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY21zNTk4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZGRjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwNyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwOCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNtczYxMCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkZGNtczYxMSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNtczYxMyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkZGNtczYxNCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNtczYxNiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkZGNtczYxNyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNtczYxOSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkZGNtczYyMCBjb21wYXJlc2lnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMiBjb21wYXJlc2lnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyMyBjb21wYXJlc2lnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNSBjb21wYXJlc2lnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNiBjb21wYXJlc2lnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyOCBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYyOSBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNtczYzMSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkZGNtczYzMiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNtczYzNCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkZGNtczYzNSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNtczYzNyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkZGNtczYzOCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDAKK2RkY21zNjQxIGNvbXBhcmVzaWcgICAwICAgIC0wICAgLT4gMAorZGRjbXM2NDIgY29tcGFyZXNpZyAgIDAgICAgLTAuMCAtPiAwCitkZGNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDAKK2RkY21zNjQ0IGNvbXBhcmVzaWcgIC0wICAgICAwICAgLT4gMAorZGRjbXM2NDUgY29tcGFyZXNpZyAgLTAgICAgLTAgICAtPiAwCitkZGNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDAKK2RkY21zNjQ3IGNvbXBhcmVzaWcgIC0wICAgICAwLjAgLT4gMAorZGRjbXM2NDggY29tcGFyZXNpZyAgIDAuMCAgIDAgICAtPiAwCitkZGNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDAKK2RkY21zNjUwIGNvbXBhcmVzaWcgICAwLjAgIC0wLjAgLT4gMAorZGRjbXM2NTEgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAtPiAwCitkZGNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDAKK2RkY21zNjUzIGNvbXBhcmVzaWcgIC0wLjAgIC0wICAgLT4gMAorZGRjbXM2NTQgY29tcGFyZXNpZyAgLTAuMCAgLTAuMCAtPiAwCitkZGNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDAKKworZGRjbXM2NTYgY29tcGFyZXNpZyAgLTBFMSAgIDAuMCAtPiAwCitkZGNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDAKK2RkY21zNjU4IGNvbXBhcmVzaWcgICAwRTEgICAwLjAgLT4gMAorZGRjbXM2NTkgY29tcGFyZXNpZyAgIDBFMiAgIDAuMCAtPiAwCitkZGNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDAKK2RkY21zNjYxIGNvbXBhcmVzaWcgIC0wRTIgICAwICAgLT4gMAorZGRjbXM2NjIgY29tcGFyZXNpZyAgIDBFMSAgIDAgICAtPiAwCitkZGNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDAKK2RkY21zNjY0IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTEgLT4gMAorZGRjbXM2NjUgY29tcGFyZXNpZyAgLTBFMiAgLTBFMSAtPiAwCitkZGNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDAKK2RkY21zNjY3IGNvbXBhcmVzaWcgICAwRTIgIC0wRTEgLT4gMAorZGRjbXM2NjggY29tcGFyZXNpZyAgLTBFMSAgLTBFMiAtPiAwCitkZGNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDAKK2RkY21zNjcwIGNvbXBhcmVzaWcgICAwRTEgIC0wRTIgLT4gMAorZGRjbXM2NzEgY29tcGFyZXNpZyAgIDBFMiAgLTBFMiAtPiAwCitkZGNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDAKK2RkY21zNjczIGNvbXBhcmVzaWcgIC0wRTIgICAwRTEgLT4gMAorZGRjbXM2NzQgY29tcGFyZXNpZyAgIDBFMSAgIDBFMSAtPiAwCitkZGNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDAKK2RkY21zNjc2IGNvbXBhcmVzaWcgIC0wRTEgICAwRTIgLT4gMAorZGRjbXM2NzcgY29tcGFyZXNpZyAgLTBFMiAgIDBFMiAtPiAwCitkZGNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDAKK2RkY21zNjc5IGNvbXBhcmVzaWcgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNtczY4MCBjb21wYXJlc2lnICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RkY21zNjgxIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZGRjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkZGNtczY4MyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RkY21zNjg0IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZGRjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkZGNtczY4NiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RkY21zNjg3IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZGRjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkZGNtczY4OSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RkY21zNjkwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkZGNtczY5MiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RkY21zNjkzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkZGNtczY5NSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RkY21zNjk2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZGRjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkZGNtczY5OCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RkY21zNjk5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RkY21zNzAwIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQorZGRjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNtczcwMiBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xCitkZGNtczcwMyBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjbXM3MDUgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorZGRjbXM3MDYgY29tcGFyZXNpZyAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxCitkZGNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY21zNzA4IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZGRjbXM3MjEgY29tcGFyZXNpZyAxMjM0NTY3ODAwMCAxIC0+IDEKK2RkY21zNzIyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwMCAtPiAtMQorZGRjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDEKK2RkY21zNzI0IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwICAtPiAtMQorZGRjbXM3MjUgY29tcGFyZXNpZyAxMjM0NTY3ODkwICAxIC0+IDEKK2RkY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQorZGRjbXM3MjcgY29tcGFyZXNpZyAxMjM0NTY3ODkxICAxIC0+IDEKK2RkY21zNzI4IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkxICAtPiAtMQorZGRjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDEKK2RkY21zNzMwIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwMSAtPiAtMQorZGRjbXM3MzEgY29tcGFyZXNpZyAxMjM0NTY3ODk2ICAxIC0+IDEKK2RkY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZGRjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNtczc0MSBjb21wYXJlc2lnICAxICAwLjk5OTk5OSAgIC0+IDEKK2RkY21zNzQyIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwCitkZGNtczc0NCBjb21wYXJlc2lnICAxICAxLjAwMDAxICAgIC0+IC0xCitkZGNtczc0NSBjb21wYXJlc2lnICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNtczc1MCBjb21wYXJlc2lnICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkZGNtczc1MSBjb21wYXJlc2lnICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNtczc1MyBjb21wYXJlc2lnICAxLjAwMDAgICAgIDEgIC0+IDAKK2RkY21zNzU0IGNvbXBhcmVzaWcgIDEuMDAwMDEgICAgMSAgLT4gMQorZGRjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNtczc1NiBjb21wYXJlc2lnICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY21zNzgwIGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCitkZGNtczc4MSBjb21wYXJlc2lnICBJbmYgIC0xMDAwICAtPiAgMQorZGRjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDEKK2RkY21zNzgzIGNvbXBhcmVzaWcgIEluZiAgLTAgICAgIC0+ICAxCitkZGNtczc4NCBjb21wYXJlc2lnICBJbmYgICAwICAgICAtPiAgMQorZGRjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDEKK2RkY21zNzg2IGNvbXBhcmVzaWcgIEluZiAgIDEwMDAgIC0+ICAxCitkZGNtczc4NyBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMAorZGRjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY21zNzg5IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkZGNtczc5MCBjb21wYXJlc2lnIC0xICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTEKK2RkY21zNzkyIGNvbXBhcmVzaWcgIDAgICAgIEluZiAgIC0+IC0xCitkZGNtczc5MyBjb21wYXJlc2lnICAxICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY21zNzk1IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGNtczgwMSBjb21wYXJlc2lnIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjbXM4MDIgY29tcGFyZXNpZyAtSW5mICAtMSAgICAgLT4gLTEKK2RkY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xCitkZGNtczgwNCBjb21wYXJlc2lnIC1JbmYgICAwICAgICAtPiAtMQorZGRjbXM4MDUgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gLTEKK2RkY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNtczgwNyBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQorZGRjbXM4MDggY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNtczgxMCBjb21wYXJlc2lnIC0xICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTEgY29tcGFyZXNpZyAtMCAgICAtSW5mICAgLT4gIDEKK2RkY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxCitkZGNtczgxMyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTQgY29tcGFyZXNpZyAgMTAwMCAtSW5mICAgLT4gIDEKK2RkY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY21zODIxIGNvbXBhcmVzaWcgIE5hTiAtSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjMgY29tcGFyZXNpZyAgTmFOIC0xICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI0IGNvbXBhcmVzaWcgIE5hTiAtMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjYgY29tcGFyZXNpZyAgTmFOICAxICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI3IGNvbXBhcmVzaWcgIE5hTiAgMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjkgY29tcGFyZXNpZyAgTmFOICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMwIGNvbXBhcmVzaWcgLUluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzIgY29tcGFyZXNpZyAtMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMzIGNvbXBhcmVzaWcgLTAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzUgY29tcGFyZXNpZyAgMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM2IGNvbXBhcmVzaWcgIDEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzggY29tcGFyZXNpZyAtTmFOIC1OYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM5IGNvbXBhcmVzaWcgK05hTiAtTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZGNtczg0MSBjb21wYXJlc2lnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQzIGNvbXBhcmVzaWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NCBjb21wYXJlc2lnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ2IGNvbXBhcmVzaWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NyBjb21wYXJlc2lnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ5IGNvbXBhcmVzaWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MCBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODUyIGNvbXBhcmVzaWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MyBjb21wYXJlc2lnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU1IGNvbXBhcmVzaWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1NiBjb21wYXJlc2lnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU4IGNvbXBhcmVzaWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1OSBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGNtczg2MCBjb21wYXJlc2lnICBOYU45IC1JbmYgICAtPiAgTmFOOSAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2MyBjb21wYXJlc2lnIC1OYU42NyBOYU41ICAtPiAtTmFONjcgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NiBjb21wYXJlc2lnICBJbmYgICBOYU4yICAtPiAgTmFOMiAgIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg2OSBjb21wYXJlc2lnIC1OYU40MSArTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uCisKK2RkY21zODcxIGNvbXBhcmVzaWcgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzIgY29tcGFyZXNpZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc0IGNvbXBhcmVzaWcgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzUgY29tcGFyZXNpZyAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc3IGNvbXBhcmVzaWcgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzggY29tcGFyZXNpZyAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gd2lkZSByYW5nZQorZGRjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKK2RkY21zODgxIGNvbXBhcmVzaWcgOUUrMzg0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkZGNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQorZGRjbXM4ODMgY29tcGFyZXNpZyA5RS0zODMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2RkY21zODg1IGNvbXBhcmVzaWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCitkZGNtczg4NiBjb21wYXJlc2lnIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZGRjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gLTEKK2RkY21zODg4IGNvbXBhcmVzaWcgOUUtMzgzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKKy0tIHNpZ25zCitkZGNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RkY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQorZGRjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xCitkZGNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RkY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQorZGRjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxCitkZGNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RkY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBOdWxsIHRlc3RzCitkZGNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QKaW5kZXggNzZiZWVkNS4uMTBjOTg0YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb21wYXJlVG90YWwuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbiB1c2luZyB0b3RhbCBvcmRlcmluZy0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KLS0tIHRoYW4gY29tcGFyZS4NCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDANCi1kZGNvdDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTENCi1kZGNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTENCi1kZGNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTENCi1kZGNvdDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTENCi1kZGNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQ0KLWRkY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwDQotZGRjb3QwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xDQotZGRjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xDQotZGRjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xDQotZGRjb3QwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDENCi1kZGNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQ0KLWRkY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwDQotZGRjb3QwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xDQotZGRjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xDQotZGRjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDENCi1kZGNvdDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQ0KLWRkY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxDQotZGRjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDANCi1kZGNvdDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTENCi1kZGNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQ0KLWRkY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxDQotZGRjb3QwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDENCi1kZGNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQ0KLWRkY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwDQotDQotZGRjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMA0KLWRkY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xDQotZGRjb3QwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTENCi1kZGNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQ0KLWRkY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xDQotZGRjb3QwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQ0KLWRkY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDANCi1kZGNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQ0KLWRkY290MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xDQotZGRjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTENCi1kZGNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxDQotZGRjb3QwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQ0KLWRkY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDANCi1kZGNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQ0KLWRkY290MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xDQotZGRjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQ0KLWRkY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDENCi1kZGNvdDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxDQotZGRjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMA0KLWRkY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xDQotZGRjb3QwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQ0KLWRkY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDENCi1kZGNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxDQotZGRjb3QwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQ0KLWRkY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDANCi0NCi1kZGNvdDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDANCi1kZGNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xDQotZGRjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQ0KLWRkY290MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTENCi1kZGNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xDQotZGRjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxDQotZGRjb3QwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwDQotZGRjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQ0KLWRkY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTENCi1kZGNvdDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xDQotZGRjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxDQotZGRjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxDQotZGRjb3QwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwDQotZGRjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQ0KLWRkY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTENCi1kZGNvdDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDENCi1kZGNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDENCi1kZGNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDENCi1kZGNvdDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDANCi1kZGNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xDQotZGRjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxDQotZGRjb3QwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxDQotZGRjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxDQotZGRjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxDQotZGRjb3QwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwDQotDQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQotZGRjb3QwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAtPiAwDQotZGRjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAtPiAtMQ0KLWRkY290MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgLT4gMQ0KLWRkY290MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLS0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCi1kZGNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDANCi1kZGNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xDQotZGRjb3QxMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIDcuMCAgICAtPiAxDQotZGRjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxDQotZGRjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZGRjb3QxMDUgY29tcGFyZXRvdGFsICAgMC43RSsxIDcgICAgICAtPiAwDQotZGRjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRkY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTENCi1kZGNvdDEwOCBjb21wYXJldG90YWwgICA3LjAgICAgNzBFLTEgIC0+IDANCi1kZGNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDANCi1kZGNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDENCi0NCi1kZGNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDENCi1kZGNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDENCi1kZGNvdDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDENCi1kZGNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDENCi1kZGNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kZGNvdDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDENCi1kZGNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDENCi1kZGNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kZGNvdDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDENCi1kZGNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxDQotZGRjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZGRjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRkY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTENCi1kZGNvdDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZGRjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRkY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTENCi1kZGNvdDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZGRjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQ0KLWRkY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTENCi1kZGNvdDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZGRjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRkY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZGRjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRkY290MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTENCi1kZGNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xDQotZGRjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRkY290MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTENCi1kZGNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQotZGRjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRkY290MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTENCi1kZGNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xDQotZGRjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRkY290MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTENCi0NCi1kZGNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xDQotZGRjb3QyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRkY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTENCi1kZGNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xDQotZGRjb3QyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRkY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTENCi1kZGNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xDQotZGRjb3QyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRkY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTENCi1kZGNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xDQotZGRjb3QyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRkY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTENCi1kZGNvdDI0MSBjb21wYXJldG90YWwgIC04LjAgICAgOSAgICAgIC0+IC0xDQotZGRjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRkY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTENCi1kZGNvdDI0NCBjb21wYXJldG90YWwgIC04MEUtMSAgOS4wICAgIC0+IC0xDQotZGRjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRkY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTENCi1kZGNvdDI0NyBjb21wYXJldG90YWwgIC04LjAgICAgOUUrMCAgIC0+IC0xDQotZGRjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRkY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTENCi1kZGNvdDI1MCBjb21wYXJldG90YWwgIC04ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRkY290MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kZGNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxDQotZGRjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQ0KLWRkY290MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kZGNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxDQotZGRjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KLWRkY290MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kZGNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxDQotZGRjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KLWRkY290MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kZGNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxDQotDQotZGRjb3QzMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIC03LjAgICAgLT4gMQ0KLWRkY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kZGNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxDQotZGRjb3QzMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KLWRkY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kZGNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxDQotZGRjb3QzMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIC03ICAgICAgLT4gMQ0KLWRkY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kZGNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxDQotZGRjb3QzMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KLWRkY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kZGNvdDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxDQotZGRjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDENCi1kZGNvdDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxDQotZGRjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kZGNvdDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxDQotZGRjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kZGNvdDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxDQotZGRjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kZGNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRkY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxDQotZGRjb3Q0MDIgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1kZGNvdDQwNSBjb21wYXJldG90YWwgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRkY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxDQotZGRjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDENCi1kZGNvdDQwOCBjb21wYXJldG90YWwgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRkY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwDQotZGRjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xDQotDQotZGRjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZGRjb3Q0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZGRjb3Q0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xDQotZGRjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQotZGRjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZGRjb3Q0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xDQotZGRjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQotZGRjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZGRjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDENCi1kZGNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KLWRkY290NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZGRjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDENCi1kZGNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KLWRkY290NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZGRjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDENCi1kZGNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQ0KLWRkY290NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZGRjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDENCi1kZGNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRkY290NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kZGNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kZGNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRkY290NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kZGNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kZGNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRkY290NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kZGNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kZGNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRkY290NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kZGNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRkY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQ0KLWRkY290NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxDQotZGRjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQ0KLWRkY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQ0KLWRkY290NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAxDQotZGRjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQ0KLWRkY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQ0KLWRkY290NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxDQotZGRjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQ0KLWRkY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQ0KLWRkY290NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRkY290NDk4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNyAgICAtPiAxDQotZGRjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDENCi1kZGNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRkY290NTAxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNCAgICAtPiAxDQotZGRjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDENCi1kZGNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRkY290NTA0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMSAgICAtPiAxDQotZGRjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDENCi1kZGNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRkY290NTA3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS04ICAgICAtPiAxDQotZGRjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDENCi1kZGNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWRkY290NTEwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS01ICAgICAtPiAxDQotZGRjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDENCi1kZGNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWRkY290NTEzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0yICAgICAtPiAxDQotZGRjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDENCi1kZGNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWRkY290NTE2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KLWRkY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KLWRkY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWRkY290NTE5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KLWRkY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KLWRkY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWRkY290NTIzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KLWRkY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KLWRkY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWRkY290NTI2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KLWRkY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KLWRkY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWRkY290NTI5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KLWRkY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KLWRkY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLWRkY290NTMyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNiAgICAtPiAtMQ0KLWRkY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1kZGNvdDUzOCBjb21wYXJldG90YWwgICAgMUUtMTcgIDEgICAgICAgLT4gLTENCi1kZGNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1kZGNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCi1kZGNvdDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCi1kZGNvdDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCi1kZGNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1kZGNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCi1kZGNvdDU3MiBjb21wYXJldG90YWwgICAgMUUrMTYgIDEgICAgICAgLT4gIDENCi1kZGNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kZGNvdDU3OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAtPiAxDQotZGRjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQ0KLWRkY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1kZGNvdDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQotZGRjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRkY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1kZGNvdDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQotZGRjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRkY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1kZGNvdDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQotZGRjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRkY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotZGRjb3Q1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCi1kZGNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KLWRkY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotZGRjb3Q1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCi1kZGNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KLWRkY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotZGRjb3Q1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCi1kZGNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KLWRkY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotZGRjb3Q1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRkY290NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQ0KLWRkY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWRkY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWRkY290NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQ0KLWRkY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWRkY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWRkY290NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQ0KLWRkY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWRkY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWRkY290NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQ0KLWRkY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWRkY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWRkY290NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQ0KLWRkY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWRkY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWRkY290NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQ0KLWRkY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWRkY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWRkY290NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQ0KLWRkY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWRkY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWRkY290NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZGRjb3Q2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDANCi1kZGNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQ0KLWRkY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxDQotZGRjb3Q2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDENCi1kZGNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTENCi1kZGNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMA0KLWRkY290NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQ0KLWRkY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQ0KLWRkY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQ0KLWRkY290NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxDQotZGRjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDENCi1kZGNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMA0KLWRkY290NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQ0KLWRkY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxDQotZGRjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDANCi1kZGNvdDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTENCi0NCi1kZGNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTENCi1kZGNvdDY1NyBjb21wYXJldG90YWwgIC0wRTIgICAwLjAgLT4gLTENCi1kZGNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQ0KLWRkY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxDQotZGRjb3Q2NjAgY29tcGFyZXRvdGFsICAtMEUxICAgMCAgIC0+IC0xDQotZGRjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xDQotZGRjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDENCi1kZGNvdDY2MyBjb21wYXJldG90YWwgICAwRTIgICAwICAgLT4gMQ0KLWRkY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwDQotZGRjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xDQotZGRjb3Q2NjYgY29tcGFyZXRvdGFsICAgMEUxICAtMEUxIC0+IDENCi1kZGNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQ0KLWRkY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxDQotZGRjb3Q2NjkgY29tcGFyZXRvdGFsICAtMEUyICAtMEUyIC0+IDANCi1kZGNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQ0KLWRkY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxDQotZGRjb3Q2NzIgY29tcGFyZXRvdGFsICAtMEUxICAgMEUxIC0+IC0xDQotZGRjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xDQotZGRjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDANCi1kZGNvdDY3NSBjb21wYXJldG90YWwgICAwRTIgICAwRTEgLT4gMQ0KLWRkY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQ0KLWRkY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQ0KLWRkY290Njc4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMiAtPiAtMQ0KLWRkY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLWRkY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotZGRjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDENCi1kZGNvdDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQ0KLWRkY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxDQotZGRjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDENCi1kZGNvdDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQ0KLWRkY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxDQotZGRjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDENCi1kZGNvdDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQ0KLWRkY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxDQotZGRjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1kZGNvdDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTENCi1kZGNvdDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTENCi1kZGNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTENCi1kZGNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTENCi0NCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRkY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQ0KLWRkY290NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQ0KLWRkY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQ0KLWRkY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQ0KLWRkY290NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQ0KLWRkY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQ0KLWRkY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQ0KLWRkY290NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQ0KLWRkY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQ0KLWRkY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQ0KLWRkY290NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQ0KLWRkY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQ0KLWRkY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQ0KLWRkY290NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQ0KLWRkY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQ0KLWRkY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQ0KLWRkY290NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQ0KLWRkY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQ0KLQ0KLS0tIG9sZCByZXNpZHVlIGNhc2VzDQotZGRjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDENCi1kZGNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQ0KLWRkY290NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxDQotZGRjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDENCi1kZGNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTENCi1kZGNvdDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1kZGNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1kZGNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTENCi1kZGNvdDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1kZGNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1kZGNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTENCi1kZGNvdDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQ0KLWRkY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxDQotZGRjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLWRkY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDENCi1kZGNvdDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxDQotZGRjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQ0KLWRkY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDENCi1kZGNvdDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxDQotZGRjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQ0KLWRkY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDENCi1kZGNvdDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwDQotZGRjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRkY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTENCi1kZGNvdDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xDQotZGRjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQ0KLWRkY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTENCi1kZGNvdDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xDQotZGRjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQ0KLWRkY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1kZGNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwDQotZGRjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWRkY290ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTENCi1kZGNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xDQotZGRjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQ0KLWRkY290ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTENCi1kZGNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xDQotZGRjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRkY290ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDANCi1kZGNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxDQotZGRjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQ0KLWRkY290ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDENCi1kZGNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxDQotZGRjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQ0KLWRkY290ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDENCi1kZGNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxDQotDQotZGRjb3Q4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQ0KLWRkY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDENCi1kZGNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxDQotZGRjb3Q4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQ0KLWRkY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDENCi1kZGNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxDQotZGRjb3Q4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQ0KLWRkY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDENCi1kZGNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwDQotZGRjb3Q4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTENCi1kZGNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xDQotZGRjb3Q4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTENCi1kZGNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xDQotZGRjb3Q4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTENCi1kZGNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQ0KLWRkY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDANCi1kZGNvdDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxDQotZGRjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTENCi0NCi1kZGNvdDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxDQotZGRjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQ0KLWRkY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDENCi1kZGNvdDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxDQotZGRjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQ0KLWRkY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDENCi1kZGNvdDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxDQotZGRjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQ0KLWRkY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDENCi1kZGNvdDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRkY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kZGNvdDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQ0KLWRkY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTENCi1kZGNvdDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTENCi1kZGNvdDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xDQotZGRjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTENCi1kZGNvdDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQ0KLWRkY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDENCi1kZGNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotZGRjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDANCi1kZGNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQ0KLWRkY290ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQ0KLWRkY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQ0KLWRkY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQ0KLWRkY290ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQ0KLWRkY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQ0KLWRkY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQ0KLWRkY290ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQ0KLWRkY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRkY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQ0KLQ0KLWRkY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwDQotZGRjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xDQotZGRjb3Q4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDENCi1kZGNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxDQotZGRjb3Q4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDENCi1kZGNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxDQotZGRjb3Q4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDENCi1kZGNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQ0KLWRkY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxDQotZGRjb3Q4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDENCi0NCi0tLSBOYU5zIHdpdGggcGF5bG9hZA0KLWRkY290OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDENCi1kZGNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxDQotZGRjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQ0KLWRkY290OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xDQotZGRjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQ0KLWRkY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDENCi1kZGNvdDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQ0KLQ0KLWRkY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDENCi1kZGNvdDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxDQotZGRjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTENCi1kZGNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQ0KLWRkY290OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xDQotZGRjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDENCi1kZGNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQ0KLWRkY290OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxDQotDQotZGRjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDENCi1kZGNvdDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQ0KLWRkY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRkY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRkY290OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQ0KLWRkY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWRkY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQ0KLWRkY290OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLQ0KLWRkY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTENCi1kZGNvdDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxDQotZGRjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQ0KLWRkY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1kZGNvdDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQotZGRjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQ0KLWRkY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1kZGNvdDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xDQotZGRjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQ0KLQ0KLS0tIHNwcmVhZCB6ZXJvcw0KLWRkY290MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTENCi1kZGNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wICAgICAgIC0+ICAxDQotZGRjb3QxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMCAgICAgICAtPiAtMQ0KLWRkY290MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDENCi1kZGNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwRSszODQgIC0+IC0xDQotZGRjb3QxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KLWRkY290MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTENCi1kZGNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wRSszODQgIC0+ICAxDQotZGRjb3QxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrMzg0ICAtPiAtMQ0KLWRkY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDENCi1kZGNvdDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSszODQgIC0+IC0xDQotZGRjb3QxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrMzg0ICAtPiAgMQ0KLQ0KLWRkY290MTEzMCBjb21wYXJldG90YWwgICAwRSszODQgIDAgICAgICAgLT4gIDENCi1kZGNvdDExMzEgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wICAgICAgIC0+ICAxDQotZGRjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQ0KLWRkY290MTEzMyBjb21wYXJldG90YWwgIC0wRSszODQgLTAgICAgICAgLT4gLTENCi1kZGNvdDExMzQgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwRS0zODMgIC0+ICAxDQotZGRjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQ0KLWRkY290MTEzNiBjb21wYXJldG90YWwgIC0wRSszODQgIDBFLTM4MyAgLT4gLTENCi1kZGNvdDExMzcgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wRS0zODMgIC0+IC0xDQotZGRjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQ0KLWRkY290MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTM4MyAgLT4gIDENCi1kZGNvdDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS0zODMgIC0+IC0xDQotZGRjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkY290OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmVUb3RhbC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDAKK2RkY290MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQorZGRjb3QwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xCitkZGNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTEKK2RkY290MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQorZGRjb3QwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDEKK2RkY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwCitkZGNvdDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTEKK2RkY290MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQorZGRjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xCitkZGNvdDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQorZGRjb3QwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDEKK2RkY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwCitkZGNvdDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTEKK2RkY290MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQorZGRjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDEKK2RkY290MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxCitkZGNvdDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQorZGRjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDAKK2RkY290MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQorZGRjb3QwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDEKK2RkY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxCitkZGNvdDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQorZGRjb3QwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDEKK2RkY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwCisKK2RkY290MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDAKK2RkY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xCitkZGNvdDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQorZGRjb3QwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTEKK2RkY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xCitkZGNvdDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxCitkZGNvdDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwCitkZGNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQorZGRjb3QwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTEKK2RkY290MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xCitkZGNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxCitkZGNvdDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxCitkZGNvdDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwCitkZGNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQorZGRjb3QwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTEKK2RkY290MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDEKK2RkY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDEKK2RkY290MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDEKK2RkY290MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDAKK2RkY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xCitkZGNvdDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxCitkZGNvdDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxCitkZGNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxCitkZGNvdDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxCitkZGNvdDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwCisKK2RkY290MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMAorZGRjb3QwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQorZGRjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQorZGRjb3QwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQorZGRjb3QwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQorZGRjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxCitkZGNvdDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY290MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTEKK2RkY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTEKK2RkY290MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY290MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQorZGRjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxCitkZGNvdDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDAKK2RkY290MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTEKK2RkY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTEKK2RkY290MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQorZGRjb3QwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxCitkZGNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDEKK2RkY290MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMAorZGRjb3QwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQorZGRjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxCitkZGNvdDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDEKK2RkY290MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQorZGRjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxCitkZGNvdDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNvdDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgIC0+IDAKK2RkY290MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY290MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgLT4gMQorZGRjb3QwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorZGRjb3QxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwCitkZGNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2RkY290MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQorZGRjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCitkZGNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RkY290MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTEKK2RkY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKK2RkY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjb3QxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwCitkZGNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb3QxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDEKK2RkY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQorZGRjb3QxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RkY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQorZGRjb3QxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RkY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQorZGRjb3QxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RkY290MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RkY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTEKK2RkY290MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RkY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY290MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RkY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RkY290MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RkY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQorZGRjb3QyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZGRjb3QyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQorZGRjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb3QyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZGRjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvdDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkZGNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvdDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RkY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY290MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTEKK2RkY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RkY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY290MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RkY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY290MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RkY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RkY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQorZGRjb3QzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQorZGRjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQorZGRjb3QzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQorZGRjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQorZGRjb3QzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQorZGRjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZGRjb3QzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNvdDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCitkZGNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxCitkZGNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCitkZGNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNvdDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RkY290MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDEKK2RkY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RkY290MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RkY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RkY290MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RkY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RkY290MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjb3Q0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RkY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2RkY290NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkZGNvdDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQorZGRjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKK2RkY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkZGNvdDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZGRjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCisKK2RkY290NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkZGNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RkY290NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkZGNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RkY290NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkZGNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RkY290NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RkY290NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkZGNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RkY290NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCitkZGNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RkY290NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkZGNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RkY290NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCitkZGNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQorZGRjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDEKK2RkY290NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDEKK2RkY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorZGRjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDEKK2RkY290NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKK2RkY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQorZGRjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDEKK2RkY290NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDEKK2RkY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorZGRjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDEKK2RkY290NDk5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNiAgICAtPiAxCitkZGNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZGRjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY290NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxCitkZGNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZGRjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY290NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxCitkZGNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZGRjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY290NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxCitkZGNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZGRjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY290NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxCitkZGNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZGRjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY290NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxCitkZGNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZGRjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvdDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQorZGRjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNvdDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RkY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZGRjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNvdDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RkY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZGRjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNvdDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RkY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZGRjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNvdDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RkY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQorZGRjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xCitkZGNvdDUzMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTcgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RkY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQorZGRjb3Q1MzkgY29tcGFyZXRvdGFsICAgIDFFLTE2ICAxICAgICAgIC0+IC0xCitkZGNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RkY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RkY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RkY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RkY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RkY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RkY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RkY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RkY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RkY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKK2RkY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzMgY29tcGFyZXRvdGFsICAgIDFFKzE3ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDEKK2RkY290NTc5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgIC0+IDEKK2RkY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY290NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RkY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RkY290NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RkY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RkY290NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkZGNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZGRjb3Q1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkZGNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZGRjb3Q1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkZGNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZGRjb3Q1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZGRjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RkY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZGRjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNvdDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RkY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZGRjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNvdDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RkY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZGRjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNvdDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RkY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNvdDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RkY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZGRjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNvdDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RkY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZGRjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNvdDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RkY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZGRjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMAorZGRjb3Q2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKK2RkY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitkZGNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQorZGRjb3Q2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCitkZGNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorZGRjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xCitkZGNvdDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKK2RkY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorZGRjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDEKK2RkY290NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCitkZGNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorZGRjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xCitkZGNvdDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQorZGRjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2RkY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQorCitkZGNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKK2RkY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorZGRjb3Q2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDEKK2RkY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCitkZGNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2RkY290NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQorZGRjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKK2RkY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitkZGNvdDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMAorZGRjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCitkZGNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorZGRjb3Q2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDEKK2RkY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCitkZGNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorZGRjb3Q2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDEKK2RkY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCitkZGNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2RkY290NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQorZGRjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKK2RkY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitkZGNvdDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTEKK2RkY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQorZGRjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitkZGNvdDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNvdDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZGRjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2RkY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxCitkZGNvdDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQorZGRjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2RkY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxCitkZGNvdDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQorZGRjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2RkY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxCitkZGNvdDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQorZGRjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RkY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2RkY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2RkY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCitkZGNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQorZGRjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitkZGNvdDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDEKK2RkY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQorZGRjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitkZGNvdDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTEKK2RkY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQorZGRjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitkZGNvdDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDEKK2RkY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQorZGRjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitkZGNvdDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTEKK2RkY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQorZGRjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitkZGNvdDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTEKK2RkY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQorZGRjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitkZGNvdDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDEKKworLS0gb2xkIHJlc2lkdWUgY2FzZXMKK2RkY290NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQorZGRjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2RkY290NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxCitkZGNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RkY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorZGRjb3Q3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RkY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorZGRjb3Q3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKK2RkY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitkZGNvdDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQorZGRjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKK2RkY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2RkY290NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDEKK2RkY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKK2RkY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2RkY290Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDEKK2RkY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2RkY290Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RkY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2RkY290NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTEKK2RkY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKK2RkY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2RkY290Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjb3Q4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQorZGRjb3Q4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorZGRjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQorZGRjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQorZGRjb3Q4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorZGRjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb3Q4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorZGRjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQorZGRjb3Q4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitkZGNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxCitkZGNvdDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCitkZGNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitkZGNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxCitkZGNvdDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCitkZGNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitkZGNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxCitkZGNvdDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCitkZGNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitkZGNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RkY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKK2RkY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2RkY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDEKK2RkY290ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCisKK2RkY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2RkY290ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDEKK2RkY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKK2RkY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2RkY290ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDEKK2RkY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKK2RkY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2RkY290ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDEKK2RkY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKK2RkY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitkZGNvdDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCitkZGNvdDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RkY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCitkZGNvdDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTEKK2RkY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTEKK2RkY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCitkZGNvdDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitkZGNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY290ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCitkZGNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorZGRjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xCitkZGNvdDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKK2RkY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorZGRjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xCitkZGNvdDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKK2RkY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorZGRjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xCitkZGNvdDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKK2RkY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitkZGNvdDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMAorZGRjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCitkZGNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDEKK2RkY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorZGRjb3Q4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDEKK2RkY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCitkZGNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZGRjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQorZGRjb3Q5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQorZGRjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorZGRjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTEKK2RkY290OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKK2RkY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2RkY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2RkY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKK2RkY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2RkY290OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xCitkZGNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQorZGRjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2RkY290OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxCitkZGNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQorZGRjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworZGRjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDEKK2RkY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCitkZGNvdDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RkY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCitkZGNvdDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RkY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQorZGRjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RkY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2RkY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RkY290OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RkY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2RkY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RkY290OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RkY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2RkY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RkY290OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkZGNvdDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xCitkZGNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wICAgICAgIC0+ICAxCitkZGNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xCitkZGNvdDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxCitkZGNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwRSszODQgIC0+IC0xCitkZGNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxCitkZGNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xCitkZGNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wRSszODQgIC0+ICAxCitkZGNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xCitkZGNvdDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxCitkZGNvdDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSszODQgIC0+IC0xCitkZGNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxCisKK2RkY290MTEzMCBjb21wYXJldG90YWwgICAwRSszODQgIDAgICAgICAgLT4gIDEKK2RkY290MTEzMSBjb21wYXJldG90YWwgICAwRSszODQgLTAgICAgICAgLT4gIDEKK2RkY290MTEzMiBjb21wYXJldG90YWwgIC0wRSszODQgIDAgICAgICAgLT4gLTEKK2RkY290MTEzMyBjb21wYXJldG90YWwgIC0wRSszODQgLTAgICAgICAgLT4gLTEKK2RkY290MTEzNCBjb21wYXJldG90YWwgICAwRSszODQgIDBFLTM4MyAgLT4gIDEKK2RkY290MTEzNSBjb21wYXJldG90YWwgICAwRSszODQgLTBFLTM4MyAgLT4gIDEKK2RkY290MTEzNiBjb21wYXJldG90YWwgIC0wRSszODQgIDBFLTM4MyAgLT4gLTEKK2RkY290MTEzNyBjb21wYXJldG90YWwgIC0wRSszODQgLTBFLTM4MyAgLT4gLTEKK2RkY290MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTM4MyAgLT4gIDEKK2RkY290MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTM4MyAgLT4gIDEKK2RkY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTM4MyAgLT4gLTEKK2RkY290MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTM4MyAgLT4gLTEKKworLS0gTnVsbCB0ZXN0cworZGRjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY290OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CmluZGV4IGYxNjUzN2EuLjA4N2EwOTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CkBAIC0xLDcwNiArMSw3MDYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFicy4gdG90YWwgb3JkZXItLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCi0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KLS0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMNCi0tLSB0aGFuIGNvbXBhcmUuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkY3RtMDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMA0KLWRkY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQ0KLWRkY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQ0KLWRkY3RtMDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQ0KLWRkY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMA0KLWRkY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQ0KLWRkY3RtMDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMA0KLWRkY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQ0KLWRkY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMA0KLWRkY3RtMDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQ0KLWRkY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQ0KLWRkY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQ0KLWRkY3RtMDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMA0KLWRkY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQ0KLWRkY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQ0KLWRkY3RtMDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQ0KLWRkY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMA0KLWRkY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQ0KLWRkY3RtMDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMA0KLWRkY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQ0KLWRkY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMA0KLWRkY3RtMDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQ0KLWRkY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQ0KLWRkY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQ0KLWRkY3RtMDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMA0KLQ0KLWRkY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwDQotZGRjdG0wMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDENCi1kZGN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQ0KLWRkY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxDQotZGRjdG0wMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDANCi1kZGN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQ0KLWRkY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwDQotZGRjdG0wMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDENCi1kZGN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMA0KLWRkY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xDQotZGRjdG0wNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTENCi1kZGN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQ0KLWRkY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwDQotZGRjdG0wNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTENCi1kZGN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQ0KLWRkY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xDQotZGRjdG0wNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDANCi1kZGN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQ0KLWRkY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwDQotZGRjdG0wNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTENCi1kZGN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMA0KLWRkY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxDQotZGRjdG0wNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDENCi1kZGN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQ0KLWRkY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwDQotDQotZGRjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMA0KLWRkY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDENCi1kZGN0bTA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxDQotZGRjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQ0KLWRkY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDANCi1kZGN0bTA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xDQotZGRjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMA0KLWRkY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDENCi1kZGN0bTA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwDQotZGRjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQ0KLWRkY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTENCi1kZGN0bTA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xDQotZGRjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMA0KLWRkY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTENCi1kZGN0bTA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xDQotZGRjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQ0KLWRkY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDANCi1kZGN0bTA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxDQotZGRjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMA0KLWRkY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTENCi1kZGN0bTA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwDQotZGRjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQ0KLWRkY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDENCi1kZGN0bTA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxDQotZGRjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRkY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDANCi1kZGN0bTA5MSBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAgLT4gICAwDQotZGRjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAgMA0KLWRkY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgIDANCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsDQotZGRjdG0xMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3LjAgICAgIC0+ICAgMA0KLWRkY3RtMTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTENCi1kZGN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0xMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDANCi1kZGN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwDQotZGRjdG0xMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3ICAgICAgIC0+ICAtMQ0KLWRkY3RtMTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTENCi1kZGN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwDQotZGRjdG0xMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAwLjdFKzEgIC0+ICAgMA0KLWRkY3RtMTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1kZGN0bTEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0xMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3ICAgICAgIC0+ICAgMQ0KLWRkY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0xMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDENCi1kZGN0bTEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxDQotZGRjdG0xMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA3RSswICAgIC0+ICAgMQ0KLWRkY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDENCi1kZGN0bTEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQ0KLWRkY3RtMTMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1kZGN0bTE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0xNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5ICAgICAgIC0+ICAtMQ0KLWRkY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTENCi1kZGN0bTE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0xNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5LjAgICAgIC0+ICAtMQ0KLWRkY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTENCi1kZGN0bTE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xDQotZGRjdG0xNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5RSswICAgIC0+ICAtMQ0KLWRkY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTENCi1kZGN0bTE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xDQotZGRjdG0xNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICA5MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kZGN0bTIwMCBjb21wYXJldG90bWFnICAtNy4wICAgIDcuMCAgICAgLT4gICAwDQotZGRjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQ0KLWRkY3RtMjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTIwMyBjb21wYXJldG90bWFnICAtN0UrMCAgIDcuMCAgICAgLT4gICAxDQotZGRjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMA0KLWRkY3RtMjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDANCi1kZGN0bTIwNiBjb21wYXJldG90bWFnICAtNzBFLTEgIDcgICAgICAgLT4gIC0xDQotZGRjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQ0KLWRkY3RtMjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDANCi1kZGN0bTIwOSBjb21wYXJldG90bWFnICAtNyAgICAgIDAuN0UrMSAgLT4gICAwDQotZGRjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtMjIwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxDQotZGRjdG0yMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQ0KLWRkY3RtMjIzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgNy4wICAgICAtPiAgIDENCi1kZGN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxDQotZGRjdG0yMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KLWRkY3RtMjI2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNyAgICAgICAtPiAgIDENCi1kZGN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxDQotZGRjdG0yMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQ0KLWRkY3RtMjI5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC43RSsxICAtPiAgIDENCi1kZGN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxDQotDQotZGRjdG0yNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQ0KLWRkY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTENCi1kZGN0bTI0MiBjb21wYXJldG90bWFnICAtOCAgICAgIDkuMCAgICAgLT4gIC0xDQotZGRjdG0yNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQ0KLWRkY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTENCi1kZGN0bTI0NSBjb21wYXJldG90bWFnICAtMC44RSsxIDkgICAgICAgLT4gIC0xDQotZGRjdG0yNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQ0KLWRkY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTENCi1kZGN0bTI0OCBjb21wYXJldG90bWFnICAtOC4wICAgIDkwRS0xICAgLT4gIC0xDQotZGRjdG0yNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQ0KLWRkY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZGRjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDANCi1kZGN0bTMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KLWRkY3RtMzAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDENCi1kZGN0bTMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KLWRkY3RtMzA1IGNvbXBhcmV0b3RtYWcgICAuN0UrMSAgLTcgICAgICAgLT4gICAwDQotZGRjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTENCi1kZGN0bTMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQ0KLWRkY3RtMzA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcwRS0xICAgLT4gICAwDQotZGRjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDANCi1kZGN0bTMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG0zMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNyAgICAgICAtPiAgIDENCi1kZGN0bTMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxDQotZGRjdG0zMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNy4wICAgICAtPiAgIDENCi1kZGN0bTMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KLWRkY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxDQotZGRjdG0zMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtN0UrMCAgICAtPiAgIDENCi1kZGN0bTMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KLWRkY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxDQotZGRjdG0zMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNzBFLTEgICAtPiAgIDENCi0NCi1kZGN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtMzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xDQotZGRjdG0zNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOS4wICAgICAtPiAgLTENCi1kZGN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtMzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xDQotZGRjdG0zNDUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtOSAgICAgICAtPiAgLTENCi1kZGN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KLWRkY3RtMzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xDQotZGRjdG0zNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOTBFLTEgICAtPiAgLTENCi1kZGN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KLWRkY3RtMzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRkY3RtNDAwIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03LjAgICAgIC0+ICAgMA0KLWRkY3RtNDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KLWRkY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDAzIGNvbXBhcmV0b3RtYWcgICAtN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KLWRkY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMA0KLWRkY3RtNDA2IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KLWRkY3RtNDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQ0KLWRkY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMA0KLWRkY3RtNDA5IGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KLWRkY3RtNDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtNDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDIxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KLWRkY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDI0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KLWRkY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KLWRkY3RtNDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQ0KLWRkY3RtNDI3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03RSswICAgIC0+ICAgMQ0KLWRkY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KLWRkY3RtNDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQ0KLWRkY3RtNDMwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWRkY3RtNDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtNDQxIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05ICAgICAgIC0+ICAtMQ0KLWRkY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtNDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtNDQ0IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05LjAgICAgIC0+ICAtMQ0KLWRkY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KLWRkY3RtNDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KLWRkY3RtNDQ3IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05RSswICAgIC0+ICAtMQ0KLWRkY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KLWRkY3RtNDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KLWRkY3RtNDUwIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05MEUtMSAgIC0+ICAtMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRkY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1kZGN0bTQ3NCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTENCi1kZGN0bTQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRkY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTENCi1kZGN0bTQ3NyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1kZGN0bTQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRkY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTENCi1kZGN0bTQ4MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTENCi1kZGN0bTQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRkY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTENCi1kZGN0bTQ4MyBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5ICAtPiAgIDANCi1kZGN0bTQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAgLT4gICAxDQotZGRjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxDQotZGRjdG00ODkgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5ICAtPiAgIDENCi1kZGN0bTQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxDQotZGRjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxDQotZGRjdG00OTIgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5ICAtPiAgIDENCi1kZGN0bTQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAgLT4gICAxDQotZGRjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxDQotZGRjdG00OTUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5ICAtPiAgIDENCi1kZGN0bTQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxDQotZGRjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRkY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQ0KLWRkY3RtNDk5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTYgICAgIC0+ICAgMQ0KLWRkY3RtNTAwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KLWRkY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQ0KLWRkY3RtNTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQ0KLWRkY3RtNTAzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KLWRkY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQ0KLWRkY3RtNTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQ0KLWRkY3RtNTA2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KLWRkY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQ0KLWRkY3RtNTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQ0KLWRkY3RtNTA5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNiAgICAgIC0+ICAgMQ0KLWRkY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQ0KLWRkY3RtNTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQ0KLWRkY3RtNTEyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMyAgICAgIC0+ICAgMQ0KLWRkY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQ0KLWRkY3RtNTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQ0KLWRkY3RtNTE1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMCAgICAgIC0+ICAgMA0KLWRkY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQ0KLWRkY3RtNTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQ0KLWRkY3RtNTE4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KLWRkY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQ0KLWRkY3RtNTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQ0KLWRkY3RtNTIyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNiAgICAgIC0+ICAtMQ0KLWRkY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQ0KLWRkY3RtNTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQ0KLWRkY3RtNTI1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOSAgICAgIC0+ICAtMQ0KLWRkY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQ0KLWRkY3RtNTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQ0KLWRkY3RtNTI4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTIgICAgIC0+ICAtMQ0KLWRkY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQ0KLWRkY3RtNTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQ0KLWRkY3RtNTMxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTUgICAgIC0+ICAtMQ0KLWRkY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQ0KLWRkY3RtNTMzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTcgICAgIC0+ICAtMQ0KLS0tIExSIHN3YXANCi1kZGN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTENCi1kZGN0bTUzOSBjb21wYXJldG90bWFnICAgIDFFLTE2ICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0MiBjb21wYXJldG90bWFnICAgIDFFLTEzICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0NSBjb21wYXJldG90bWFnICAgIDFFLTEwICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0OCBjb21wYXJldG90bWFnICAgIDFFLTcgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1MSBjb21wYXJldG90bWFnICAgIDFFLTQgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1NCBjb21wYXJldG90bWFnICAgIDFFLTEgICAxICAgICAgICAtPiAgLTENCi1kZGN0bTU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDANCi1kZGN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU1NyBjb21wYXJldG90bWFnICAgIDFFKzIgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2MSBjb21wYXJldG90bWFnICAgIDFFKzUgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2NCBjb21wYXJldG90bWFnICAgIDFFKzggICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2NyBjb21wYXJldG90bWFnICAgIDFFKzExICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU3MCBjb21wYXJldG90bWFnICAgIDFFKzE0ICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDENCi1kZGN0bTU3MyBjb21wYXJldG90bWFnICAgIDFFKzE3ICAxICAgICAgICAtPiAgIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kZGN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQ0KLWRkY3RtNTc5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAgLT4gICAxDQotZGRjdG01ODAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgICAtPiAgIDENCi1kZGN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQ0KLWRkY3RtNTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxDQotZGRjdG01ODMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgICAtPiAgIDENCi1kZGN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQ0KLWRkY3RtNTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxDQotZGRjdG01ODYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgICAtPiAgIDENCi1kZGN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQ0KLWRkY3RtNTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxDQotZGRjdG01ODkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgICAtPiAgLTENCi1kZGN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQ0KLWRkY3RtNTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xDQotZGRjdG01OTIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgICAtPiAgLTENCi1kZGN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQ0KLWRkY3RtNTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xDQotZGRjdG01OTUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgICAtPiAgLTENCi1kZGN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQ0KLWRkY3RtNTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xDQotZGRjdG01OTggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgICAtPiAgLTENCi1kZGN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotZGRjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxDQotZGRjdG02MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxDQotZGRjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxDQotZGRjdG02MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxDQotZGRjdG02MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxDQotZGRjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxDQotZGRjdG02MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxDQotZGRjdG02MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxDQotZGRjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxDQotZGRjdG02MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxDQotZGRjdG02MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xDQotZGRjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxDQotZGRjdG02MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxDQotZGRjdG02MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxDQotZGRjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxDQotZGRjdG02MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxDQotZGRjdG02MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxDQotZGRjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxDQotZGRjdG02MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxDQotZGRjdG02MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxDQotZGRjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZGN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDANCi1kZGN0bTY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDANCi1kZGN0bTY0MiBjb21wYXJldG90bWFnICAgMCAgICAtMC4wICAtPiAgIDENCi1kZGN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDENCi1kZGN0bTY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDANCi1kZGN0bTY0NSBjb21wYXJldG90bWFnICAtMCAgICAtMCAgICAtPiAgIDANCi1kZGN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDENCi1kZGN0bTY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDENCi1kZGN0bTY0OCBjb21wYXJldG90bWFnICAgMC4wICAgMCAgICAtPiAgLTENCi1kZGN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTENCi1kZGN0bTY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDANCi1kZGN0bTY1MSBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAtPiAgIDANCi1kZGN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTENCi1kZGN0bTY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTENCi1kZGN0bTY1NCBjb21wYXJldG90bWFnICAtMC4wICAtMC4wICAtPiAgIDANCi1kZGN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDANCi0NCi1kZGN0bTY1NiBjb21wYXJldG90bWFnICAtMEUxICAgMC4wICAtPiAgIDENCi1kZGN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDENCi1kZGN0bTY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDENCi1kZGN0bTY1OSBjb21wYXJldG90bWFnICAgMEUyICAgMC4wICAtPiAgIDENCi1kZGN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDENCi1kZGN0bTY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDENCi1kZGN0bTY2MiBjb21wYXJldG90bWFnICAgMEUxICAgMCAgICAtPiAgIDENCi1kZGN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDENCi1kZGN0bTY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDANCi1kZGN0bTY2NSBjb21wYXJldG90bWFnICAtMEUyICAtMEUxICAtPiAgIDENCi1kZGN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDANCi1kZGN0bTY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDENCi1kZGN0bTY2OCBjb21wYXJldG90bWFnICAtMEUxICAtMEUyICAtPiAgLTENCi1kZGN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDANCi1kZGN0bTY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTENCi1kZGN0bTY3MSBjb21wYXJldG90bWFnICAgMEUyICAtMEUyICAtPiAgIDANCi1kZGN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDANCi1kZGN0bTY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDENCi1kZGN0bTY3NCBjb21wYXJldG90bWFnICAgMEUxICAgMEUxICAtPiAgIDANCi1kZGN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDENCi1kZGN0bTY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTENCi1kZGN0bTY3NyBjb21wYXJldG90bWFnICAtMEUyICAgMEUyICAtPiAgIDANCi1kZGN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTENCi1kZGN0bTY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZGRjdG02ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwDQotZGRjdG02ODEgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAgICAgICAgICAgLT4gICAxDQotZGRjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxDQotZGRjdG02ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxDQotZGRjdG02ODQgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAgICAgICAgLT4gICAxDQotZGRjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxDQotZGRjdG02ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxDQotZGRjdG02ODcgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAgICAgLT4gICAxDQotZGRjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxDQotZGRjdG02ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxDQotZGRjdG02OTAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgICAxMiAgLT4gICAwDQotZGRjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xDQotZGRjdG02OTkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAgLT4gIC0xDQotDQotLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kZGN0bTcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDENCi1kZGN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTENCi1kZGN0bTcwMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgICAxICAtPiAgIDENCi1kZGN0bTcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTENCi1kZGN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDENCi1kZGN0bTcwNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgICAtPiAgLTENCi1kZGN0bTcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDENCi1kZGN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTENCi1kZGN0bTcwOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxICAxICAtPiAgIDENCi1kZGN0bTcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTENCi1kZGN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDENCi1kZGN0bTcxMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAgLTENCi1kZGN0bTcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDENCi1kZGN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTENCi1kZGN0bTcxNSBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkwMSAxICAtPiAgIDENCi1kZGN0bTcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTENCi1kZGN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDENCi1kZGN0bTcxOCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAgLTENCi0NCi0tLSBvbGQgcmVzaWR1ZSBjYXNlcw0KLWRkY3RtNzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQ0KLWRkY3RtNzQxIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5ICAgIC0+ICAgMQ0KLWRkY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQ0KLWRkY3RtNzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQ0KLWRkY3RtNzQ0IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDEgICAgIC0+ICAtMQ0KLWRkY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQ0KLWRkY3RtNzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQ0KLWRkY3RtNzUwIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5OSAgMSAgIC0+ICAtMQ0KLWRkY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQ0KLWRkY3RtNzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQ0KLWRkY3RtNzUzIGNvbXBhcmV0b3RtYWcgIDEuMDAwMCAgICAgMSAgIC0+ICAtMQ0KLWRkY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQ0KLWRkY3RtNzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQ0KLWRkY3RtNzU2IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAwMSAgMSAgIC0+ICAgMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRjdG03ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDANCi1kZGN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQ0KLWRkY3RtNzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxDQotZGRjdG03ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDENCi1kZGN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQ0KLWRkY3RtNzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxDQotZGRjdG03ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDENCi1kZGN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KLWRkY3RtNzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xDQotZGRjdG03ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCi1kZGN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQ0KLWRkY3RtNzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xDQotZGRjdG03OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTENCi1kZGN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQ0KLWRkY3RtNzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xDQotZGRjdG03OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1kZGN0bTgwMCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRkY3RtODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxDQotZGRjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDENCi1kZGN0bTgwMyBjb21wYXJldG90bWFnIC1JbmYgIC0wICAgICAtPiAgMQ0KLWRkY3RtODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxDQotZGRjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDENCi1kZGN0bTgwNiBjb21wYXJldG90bWFnIC1JbmYgICAxMDAwICAtPiAgMQ0KLWRkY3RtODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwDQotZGRjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDANCi1kZGN0bTgwOSBjb21wYXJldG90bWFnIC0xMDAwIC1JbmYgICAtPiAtMQ0KLWRkY3RtODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xDQotZGRjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTENCi1kZGN0bTgxMiBjb21wYXJldG90bWFnICAwICAgIC1JbmYgICAtPiAtMQ0KLWRkY3RtODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xDQotZGRjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTENCi1kZGN0bTgxNSBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KLQ0KLWRkY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxDQotZGRjdG04MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDENCi1kZGN0bTgyMyBjb21wYXJldG90bWFnICBOYU4gLTEgICAgICAtPiAgMQ0KLWRkY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxDQotZGRjdG04MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDENCi1kZGN0bTgyNiBjb21wYXJldG90bWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLWRkY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxDQotZGRjdG04MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDENCi1kZGN0bTgyOSBjb21wYXJldG90bWFnICBOYU4gIE5hTiAgICAtPiAgMA0KLWRkY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODMyIGNvbXBhcmV0b3RtYWcgLTEgICAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODM1IGNvbXBhcmV0b3RtYWcgIDEgICAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQ0KLWRkY3RtODM4IGNvbXBhcmV0b3RtYWcgLU5hTiAtTmFOICAgIC0+ICAwDQotZGRjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDANCi1kZGN0bTg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMA0KLQ0KLWRkY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwDQotZGRjdG04NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xDQotZGRjdG04NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDENCi1kZGN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQ0KLWRkY3RtODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxDQotZGRjdG04NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDENCi1kZGN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQ0KLWRkY3RtODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxDQotZGRjdG04NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDENCi1kZGN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTENCi1kZGN0bTg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRkY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwDQotZGRjdG04NTMgY29tcGFyZXRvdG1hZyAtTmFOICBzTmFOICAgLT4gIDENCi1kZGN0bTg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTENCi1kZGN0bTg1NiBjb21wYXJldG90bWFnIC0xICAgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg1OSBjb21wYXJldG90bWFnICAxICAgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTENCi1kZGN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTENCi1kZGN0bTg2MiBjb21wYXJldG90bWFnICBOYU4gIHNOYU4gICAtPiAgMQ0KLWRkY3RtODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotZGRjdG04NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwDQotZGRjdG04NzIgY29tcGFyZXRvdG1hZyAgLXNOYU4gLU5hTiAgIC0+ICAtMQ0KLWRkY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQ0KLWRkY3RtODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQ0KLWRkY3RtODc1IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xICAgICAtPiAgMQ0KLWRkY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQ0KLWRkY3RtODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQ0KLWRkY3RtODc4IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxICAgICAtPiAgMQ0KLWRkY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQ0KLWRkY3RtODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTENCi1kZGN0bTg4MSBjb21wYXJldG90bWFnICAtc05hTiBzTmFOICAgLT4gIDANCi0NCi1kZGN0bTg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDANCi1kZGN0bTg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDENCi1kZGN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xDQotZGRjdG04ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQ0KLWRkY3RtODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTENCi1kZGN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xDQotZGRjdG04ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQ0KLWRkY3RtODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTENCi1kZGN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xDQotZGRjdG04OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQ0KLWRkY3RtODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQ0KLWRkY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMA0KLQ0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkDQotZGRjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDENCi1kZGN0bTk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQ0KLWRkY3RtOTYyIGNvbXBhcmV0b3RtYWcgIE5hTjc3IEluZiAgIC0+ICAxDQotZGRjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDENCi1kZGN0bTk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTENCi1kZGN0bTk2NSBjb21wYXJldG90bWFnIC05OTkgIC1OYU4zMyAtPiAgLTENCi1kZGN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTENCi0NCi1kZGN0bTk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTENCi1kZGN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTENCi1kZGN0bTk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTENCi1kZGN0bTk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTENCi1kZGN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDENCi1kZGN0bTk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDENCi1kZGN0bTk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDENCi1kZGN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDENCi0NCi1kZGN0bTk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xDQotZGRjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQ0KLWRkY3RtOTgyIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgK3NOYU43NzIgLT4gLTENCi1kZGN0bTk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQotZGRjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWRkY3RtOTg1IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgLXNOYU43NzEgLT4gIDENCi1kZGN0bTk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxDQotZGRjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLQ0KLWRkY3RtOTkxIGNvbXBhcmV0b3RtYWcgLXNOYU45OSAtSW5mICAgIC0+ICAxDQotZGRjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDENCi1kZGN0bTk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQ0KLWRkY3RtOTk0IGNvbXBhcmV0b3RtYWcgIHNOYU4xNiBzTmFOOTQgIC0+IC0xDQotZGRjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDENCi1kZGN0bTk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQ0KLWRkY3RtOTk3IGNvbXBhcmV0b3RtYWcgIDA4OCAgICBzTmFOODEgIC0+IC0xDQotZGRjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTENCi1kZGN0bTk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQ0KLQ0KLS0tIHNwcmVhZCB6ZXJvcw0KLWRkY3RtMTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTENCi1kZGN0bTExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMCAgICAgICAgLT4gIC0xDQotZGRjdG0xMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KLWRkY3RtMTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTENCi1kZGN0bTExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAgMEUrMzg0ICAgLT4gIC0xDQotZGRjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQ0KLWRkY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTENCi1kZGN0bTExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xDQotZGRjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQ0KLWRkY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTENCi1kZGN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrMzg0ICAgLT4gIC0xDQotZGRjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KLQ0KLWRkY3RtMTEzMCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwICAgICAgICAtPiAgIDENCi1kZGN0bTExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMCAgICAgICAgLT4gICAxDQotZGRjdG0xMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQ0KLWRkY3RtMTEzMyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wICAgICAgICAtPiAgIDENCi1kZGN0bTExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMEUtMzgzICAgLT4gICAxDQotZGRjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQ0KLWRkY3RtMTEzNiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwRS0zODMgICAtPiAgIDENCi1kZGN0bTExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMEUtMzgzICAgLT4gICAxDQotZGRjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQ0KLWRkY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS0zODMgICAtPiAgIDENCi1kZGN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtMzgzICAgLT4gICAxDQotZGRjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZGN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFicy4gdG90YWwgb3JkZXItLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZGN0bTAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKK2RkY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQorZGRjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxCitkZGN0bTAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKK2RkY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMAorZGRjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xCitkZGN0bTAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKK2RkY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQorZGRjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwCitkZGN0bTAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKK2RkY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQorZGRjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xCitkZGN0bTAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKK2RkY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQorZGRjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xCitkZGN0bTAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKK2RkY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMAorZGRjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxCitkZGN0bTAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKK2RkY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQorZGRjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwCitkZGN0bTAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKK2RkY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQorZGRjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxCitkZGN0bTAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKKworZGRjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDAKK2RkY3RtMDMyIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTEwICAgLT4gICAxCitkZGN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQorZGRjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDEKK2RkY3RtMDM1IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDIwICAgLT4gICAwCitkZGN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQorZGRjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDAKK2RkY3RtMDM4IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDAwICAgLT4gICAxCitkZGN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAorZGRjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTEKK2RkY3RtMDQxIGNvbXBhcmV0b3RtYWcgICAwMCAgLTIwICAgLT4gIC0xCitkZGN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQorZGRjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDAKK2RkY3RtMDQ0IGNvbXBhcmV0b3RtYWcgICAwMCAgIDEwICAgLT4gIC0xCitkZGN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQorZGRjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTEKK2RkY3RtMDQ3IGNvbXBhcmV0b3RtYWcgICAxMCAgLTEwICAgLT4gICAwCitkZGN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQorZGRjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDAKK2RkY3RtMDUwIGNvbXBhcmV0b3RtYWcgICAxMCAgIDIwICAgLT4gIC0xCitkZGN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAorZGRjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDEKK2RkY3RtMDUzIGNvbXBhcmV0b3RtYWcgICAyMCAgIDAwICAgLT4gICAxCitkZGN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQorZGRjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDAKKworZGRjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMAorZGRjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQorZGRjdG0wNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQorZGRjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAorZGRjdG0wNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMAorZGRjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMAorZGRjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQorZGRjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMAorZGRjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQorZGRjdG0wNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQorZGRjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAorZGRjdG0wNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMAorZGRjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQorZGRjdG0wODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMAorZGRjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQorZGRjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQorZGRjdG0wODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQorZGRjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RkY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDAKK2RkY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDAKK2RkY3RtMDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgIDAKK2RkY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkZGN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCitkZGN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCitkZGN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCitkZGN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitkZGN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCitkZGN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCitkZGN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitkZGN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCitkZGN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKK2RkY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKK2RkY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKK2RkY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2RkY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKK2RkY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKK2RkY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitkZGN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2RkY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKK2RkY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2RkY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKK2RkY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKK2RkY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAorZGRjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQorZGRjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAorZGRjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorZGRjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQorZGRjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQorZGRjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorZGRjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAorZGRjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQorCitkZGN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCitkZGN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCitkZGN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCitkZGN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitkZGN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCitkZGN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCitkZGN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitkZGN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RkY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2RkY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKK2RkY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2RkY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKK2RkY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKK2RkY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RkY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCitkZGN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCitkZGN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZGRjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RkY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCitkZGN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZGRjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RkY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RkY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQorZGRjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKK2RkY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQorZGRjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKK2RkY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitkZGN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkZGN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2RkY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RkY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQorZGRjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RkY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCitkZGN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorZGRjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCitkZGN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RkY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RkY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZGRjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCitkZGN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RkY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZGRjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCitkZGN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKK2RkY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZGRjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKK2RkY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZGRjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitkZGN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2RkY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RkY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQorZGRjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCitkZGN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RkY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQorZGRjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCitkZGN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RkY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZGRjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZGRjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAorZGRjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQorZGRjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCitkZGN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQorZGRjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorZGRjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxCitkZGN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQorZGRjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQorZGRjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCitkZGN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQorZGRjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorZGRjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RkY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZGRjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxCitkZGN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RkY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZGRjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitkZGN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RkY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZGRjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitkZGN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RkY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZGRjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitkZGN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKK2RkY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQorZGRjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitkZGN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKK2RkY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQorZGRjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitkZGN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKK2RkY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZGRjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitkZGN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RkY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQorZGRjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitkZGN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKK2RkY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQorZGRjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitkZGN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKK2RkY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQorZGRjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitkZGN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKK2RkY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQorZGRjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitkZGN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKK2RkY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQorZGRjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xCistLSBMUiBzd2FwCitkZGN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCitkZGN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCitkZGN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkZGN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZGRjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RkY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCitkZGN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZGRjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RkY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCitkZGN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZGRjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RkY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCitkZGN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZGRjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RkY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCitkZGN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQorZGRjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2RkY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCitkZGN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQorZGRjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2RkY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCitkZGN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZGRjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RkY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCitkZGN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZGRjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKK2RkY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQorZGRjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitkZGN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKK2RkY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQorZGRjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitkZGN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKK2RkY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQorZGRjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitkZGN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKK2RkY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitkZGN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKK2RkY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQorZGRjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitkZGN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKK2RkY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQorZGRjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitkZGN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKK2RkY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQorZGRjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKK2RkY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorZGRjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCitkZGN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKK2RkY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorZGRjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCitkZGN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKK2RkY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorZGRjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCitkZGN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKK2RkY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorZGRjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCitkZGN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKK2RkY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorZGRjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCitkZGN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKKworZGRjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitkZGN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKK2RkY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQorZGRjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitkZGN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKK2RkY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQorZGRjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitkZGN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKK2RkY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAorZGRjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitkZGN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKK2RkY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQorZGRjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitkZGN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKK2RkY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQorZGRjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitkZGN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKK2RkY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQorZGRjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitkZGN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKK2RkY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQorZGRjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitkZGN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKK2RkY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2RkY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQorZGRjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCitkZGN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2RkY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQorZGRjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCitkZGN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2RkY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQorZGRjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCitkZGN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2RkY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAorZGRjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZGRjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitkZGN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKK2RkY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQorZGRjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitkZGN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKK2RkY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQorZGRjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitkZGN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKK2RkY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQorZGRjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitkZGN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKK2RkY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQorZGRjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitkZGN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKK2RkY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorZGRjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitkZGN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKK2RkY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZGRjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCitkZGN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2RkY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQorZGRjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCitkZGN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2RkY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQorZGRjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCitkZGN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2RkY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQorZGRjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCitkZGN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2RkY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQorZGRjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCitkZGN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gU3BlY2lhbHMKK2RkY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCitkZGN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorZGRjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKK2RkY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCitkZGN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorZGRjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RkY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCitkZGN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorZGRjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkZGN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorZGRjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKK2RkY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCitkZGN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorZGRjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQorZGRjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKK2RkY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitkZGN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQorZGRjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RkY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitkZGN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorZGRjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RkY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitkZGN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKK2RkY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitkZGN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKK2RkY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2RkY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCitkZGN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQorZGRjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2RkY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCitkZGN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQorZGRjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RkY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCitkZGN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQorZGRjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2RkY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQorZGRjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCitkZGN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQorZGRjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCitkZGN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQorZGRjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCitkZGN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorZGRjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKK2RkY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCisKK2RkY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitkZGN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKK2RkY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCitkZGN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorZGRjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKK2RkY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCitkZGN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorZGRjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKK2RkY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCitkZGN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2RkY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCitkZGN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorZGRjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCitkZGN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RkY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCitkZGN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKK2RkY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCitkZGN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKK2RkY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitkZGN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitkZGN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKK2RkY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2RkY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQorZGRjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCitkZGN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2RkY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQorZGRjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCitkZGN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2RkY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQorZGRjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZGRjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2RkY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAorZGRjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCitkZGN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCitkZGN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKK2RkY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZGRjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKK2RkY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCitkZGN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorZGRjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKK2RkY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQorZGRjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitkZGN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKKworZGRjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCitkZGN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2RkY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQorZGRjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCitkZGN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2RkY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQorZGRjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCitkZGN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworZGRjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZGRjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZGRjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZGRjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQorZGRjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkZGN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorZGRjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RkY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkZGN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZGRjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RkY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkZGN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorZGRjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RkY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZGRjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQorZGRjdG0xMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQorZGRjdG0xMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQorZGRjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQorZGRjdG0xMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQorZGRjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQorCitkZGN0bTExMzAgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMCAgICAgICAgLT4gICAxCitkZGN0bTExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMCAgICAgICAgLT4gICAxCitkZGN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMCAgICAgICAgLT4gICAxCitkZGN0bTExMzMgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMCAgICAgICAgLT4gICAxCitkZGN0bTExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtMzgzICAgLT4gICAxCitkZGN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtMzgzICAgLT4gICAxCitkZGN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtMzgzICAgLT4gICAxCisKKy0tIE51bGwgdGVzdHMKK2RkY3RtOTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRjdG05OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QKaW5kZXggZjk5ZDg2YS4uOWExNzVjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb3B5LmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRkY3B5MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZGRjcHkwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1kZGNweTAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZGNweTAyMSBjb3B5ICAgICAgICAgTmFOICAtPiBOYU4NCi1kZGNweTAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFODQotZGRjcHkwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTg0KLWRkY3B5MDI0IGNvcHkgICAgICAgLXNOYU4gIC0+IC1zTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRkY3B5MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwDQotZGRjcHkwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwDQotZGRjcHkwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwDQotZGRjcHkwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMA0KLWRkY3B5MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcNCi1kZGNweTAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONw0KLWRkY3B5MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDENCi1kZGNweTAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kZGNweTEwMSBjb3B5ICAgICAgICAgIDcgICAtPiA3DQotZGRjcHkxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcNCi1kZGNweTEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQ0KLWRkY3B5MTA0IGNvcHkgICAgICAgIC03NSAgIC0+IC03NQ0KLWRkY3B5MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTANCi1kZGNweTEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MA0KLWRkY3B5MTA3IGNvcHkgICAgICAgNy41MDAgIC0+IDcuNTAwDQotZGRjcHkxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwDQotDQotLS0gemVyb3MNCi1kZGNweTExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwDQotZGRjcHkxMTIgY29weSAgICAgICAgIC0wICAgLT4gLTANCi1kZGNweTExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0DQotZGRjcHkxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQNCi1kZGNweTExNSBjb3B5ICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kZGNweTExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwDQotZGRjcHkxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotZGRjcHkxMTggY29weSAgICAgLTBFLTE0MSAgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRjcHkxMjEgY29weSAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZGNweTEyMiBjb3B5ICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODINCi1kZGNweTEyMyBjb3B5ICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLWRkY3B5MTI0IGNvcHkgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRjcHkxMzEgY29weSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGNweTEzMiBjb3B5ICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRjcHkxMzMgY29weSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNweTEzNCBjb3B5ICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQotDQotZGRjcHkxMzUgY29weSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgNCi1kZGNweTEzNiBjb3B5ICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNweTEzNyBjb3B5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4Mw0KLWRkY3B5MTM4IGNvcHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb3B5LmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZGNweTAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RkY3B5MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitkZGNweTAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNweTAyMSBjb3B5ICAgICAgICAgTmFOICAtPiBOYU4KK2RkY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RkY3B5MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KK2RkY3B5MDI0IGNvcHkgICAgICAgLXNOYU4gIC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3B5MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwCitkZGNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKK2RkY3B5MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMAorZGRjcHkwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMAorZGRjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONworZGRjcHkwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcKK2RkY3B5MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKK2RkY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcKK2RkY3B5MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03CitkZGNweTEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQorZGRjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1CitkZGNweTEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwCitkZGNweTEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAorZGRjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RkY3B5MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZGRjcHkxMTEgY29weSAgICAgICAgICAwICAgLT4gMAorZGRjcHkxMTIgY29weSAgICAgICAgIC0wICAgLT4gLTAKK2RkY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RkY3B5MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0CitkZGNweTExNSBjb3B5ICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RkY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDAKK2RkY3B5MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRjcHkxMTggY29weSAgICAgLTBFLTE0MSAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRjcHkxMjEgY29weSAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRjcHkxMjMgY29weSAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkY3B5MTI0IGNvcHkgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcHkxMzEgY29weSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3B5MTMyIGNvcHkgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3B5MTMzIGNvcHkgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNweTEzNCBjb3B5ICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CisKK2RkY3B5MTM1IGNvcHkgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CitkZGNweTEzNiBjb3B5ICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3B5MTM3IGNvcHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZGNweTEzOCBjb3B5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdAppbmRleCBkNDM2YTE5Li40ODIzY2YyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5QWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZENvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRjcGEwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZGNwYTAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KLWRkY3BhMDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRjcGEwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFODQotZGRjcGEwMjIgY29weWFicyAgICAgICAgLU5hTiAgLT4gTmFODQotZGRjcGEwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTg0KLWRkY3BhMDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRjcGEwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTANCi1kZGNwYTAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQ0KLWRkY3BhMDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQ0KLWRkY3BhMDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMA0KLWRkY3BhMDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcNCi1kZGNwYTAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43DQotZGRjcGEwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQ0KLWRkY3BhMDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZGRjcGExMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNw0KLWRkY3BhMTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcNCi1kZGNwYTEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQ0KLWRkY3BhMTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1DQotZGRjcGExMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMA0KLWRkY3BhMTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTANCi1kZGNwYTEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWRkY3BhMTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kZGNwYTExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwDQotZGRjcGExMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMA0KLWRkY3BhMTEzIGNvcHlhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYNCi1kZGNwYTExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2DQotZGRjcGExMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZGRjcGExMTYgY29weWFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZGRjcGExMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQotZGRjcGExMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZGNwYTEyMSBjb3B5YWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BhMTIyIGNvcHlhYnMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRjcGExMjMgY29weWFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDENCi1kZGNwYTEyNCBjb3B5YWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRjcGExMzEgY29weWFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZGNwYTEzMiBjb3B5YWJzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRjcGExMzMgY29weWFicyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwYTEzNCBjb3B5YWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQotDQotZGRjcGExMzUgY29weWFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OA0KLWRkY3BhMTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRjcGExMzcgY29weWFicyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KLWRkY3BhMTM4IGNvcHlhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkY3BhMDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcGEwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCitkZGNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KK2RkY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4KK2RkY3BhMDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcGEwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RkY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1CitkZGNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKK2RkY3BhMDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAorZGRjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONworZGRjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONworZGRjcGEwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZGRjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3CitkZGNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3CitkZGNwYTEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQorZGRjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKK2RkY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKK2RkY3BhMTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTAKK2RkY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCitkZGNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZGRjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMAorZGRjcGExMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAorZGRjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZGRjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZGRjcGExMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZGNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRjcGExMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGNwYTEyMSBjb3B5YWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BhMTIzIGNvcHlhYnMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCitkZGNwYTEyNCBjb3B5YWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcGExMzEgY29weWFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3BhMTMyIGNvcHlhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwYTEzNCBjb3B5YWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CisKK2RkY3BhMTM1IGNvcHlhYnMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKK2RkY3BhMTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwYTEzNyBjb3B5YWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weU5lZ2F0ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weU5lZ2F0ZS5kZWNUZXN0CmluZGV4IGE0YzQyNzQuLjEyMTk0NWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkQ29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kZGNwbjAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZGNwbjAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkNCi1kZGNwbjAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkY3BuMDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4NCi1kZGNwbjAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4NCi1kZGNwbjAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTg0KLWRkY3BuMDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRjcG4wMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzDQotZGRjcG4wMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMNCi1kZGNwbjAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzDQotZGRjcG4wMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzDQotZGRjcG4wMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwDQotZGRjcG4wMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzANCi1kZGNwbjAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQ0KLWRkY3BuMDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZGRjcG4xMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcNCi1kZGNwbjEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3DQotZGRjcG4xMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1DQotZGRjcG4xMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUNCi1kZGNwbjEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MA0KLWRkY3BuMTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTANCi1kZGNwbjEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDANCi1kZGNwbjEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotZGRjcG4xMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTANCi1kZGNwbjExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwDQotZGRjcG4xMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQNCi1kZGNwbjExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0DQotZGRjcG4xMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMA0KLWRkY3BuMTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkY3BuMTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDENCi1kZGNwbjExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRkY3BuMTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRjcG4xMjMgY29weW5lZ2F0ZSAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxDQotZGRjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRkY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkY3BuMTMyIGNvcHluZWdhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQotZGRjcG4xMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRjcG4xMzQgY29weW5lZ2F0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgNCi0NCi1kZGNwbjEzNSBjb3B5bmVnYXRlICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQotZGRjcG4xMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwbjEzNyBjb3B5bmVnYXRlICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRjcG4xMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRjcG4wMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworZGRjcG4wMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5CitkZGNwbjAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BuMDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4KK2RkY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTgorZGRjcG4wMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4KK2RkY3BuMDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcG4wMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzCitkZGNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMworZGRjcG4wMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMworZGRjcG4wMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzCitkZGNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzAKK2RkY3BuMDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwCitkZGNwbjAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQorZGRjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNworZGRjcG4xMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNworZGRjcG4xMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1CitkZGNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQorZGRjcG4xMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTAKK2RkY3BuMTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTAKK2RkY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMAorZGRjcG4xMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RkY3BuMTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wCitkZGNwbjExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwCitkZGNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNAorZGRjcG4xMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRjcG4xMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMAorZGRjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZGNwbjExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxCitkZGNwbjExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BuMTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BuMTIzIGNvcHluZWdhdGUgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQorZGRjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcG4xMzIgY29weW5lZ2F0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkY3BuMTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcG4xMzQgY29weW5lZ2F0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKKworZGRjcG4xMzUgY29weW5lZ2F0ZSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorZGRjcG4xMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BuMTM3IGNvcHluZWdhdGUgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BuMTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5U2lnbi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdAppbmRleCA2YTc4MDgzLi5jOTk1NDRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5U2lnbi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QKQEAgLTEsMTc1ICsxLDE3NSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRkY3BzMDAxIGNvcHlzaWduICAgICAgICs3LjUwICAgICAxMSAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRkY3BzMDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQ0KLWRkY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4NCi1kZGNwczAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFODQotZGRjcHMwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4NCi1kZGNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZGNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTANCi1kZGNwczAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTANCi1kZGNwczAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQotZGRjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KLWRkY3BzMDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43DQotZGRjcHMwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcNCi1kZGNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KLWRkY3BzMDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRkY3BzMTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3DQotZGRjcHMxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcNCi1kZGNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUNCi1kZGNwczEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUNCi1kZGNwczEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MA0KLWRkY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwDQotZGRjcHMxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwDQotZGRjcHMxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kZGNwczExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMA0KLWRkY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwDQotZGRjcHMxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQNCi1kZGNwczExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNA0KLWRkY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCi1kZGNwczExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQotZGRjcHMxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQ0KLWRkY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRkY3BzMTIxIGNvcHlzaWduICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BzMTIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BzMTIzIGNvcHlzaWduICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLWRkY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxMSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRjcHMxMzIgY29weXNpZ24gIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zODMNCi1kZGNwczEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZGNwczEzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM5OA0KLQ0KLWRkY3BzMTM1IGNvcHlzaWduICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4DQotZGRjcHMxMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAxMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRjcHMxMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zODMNCi1kZGNwczEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi0tLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMNCi0NCi0tLSBJbmZpbml0aWVzDQotZGRjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkNCi1kZGNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRkY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTg0KLWRkY3BzMjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTg0KLWRkY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4NCi1kZGNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRkY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQotZGRjcHMyMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCi1kZGNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1kZGNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1kZGNwczIzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgLTM0IC0+IC1OYU43DQotZGRjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONw0KLWRkY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi1kZGNwczIzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRkY3BzMzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcNCi1kZGNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03DQotZGRjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUNCi1kZGNwczMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQ0KLWRkY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1kZGNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwDQotZGRjcHMzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDANCi1kZGNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZGRjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMA0KLWRkY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTANCi1kZGNwczMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotZGRjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNA0KLWRkY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWRkY3BzMzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWRkY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQ0KLWRkY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRjcHMzMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAtMzQgLT4gLTI2ODI2ODI2ODI2ODI2ODINCi1kZGNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KLWRkY3BzMzIzIGNvcHlzaWduICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAgLTM0IC0+IC0xMzQxMzQxMzQxMzQxMzQxDQotZGRjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRkY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRjcHMzMzIgY29weXNpZ24gIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4Mw0KLWRkY3BzMzMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgLTM0IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRjcHMzMzQgY29weXNpZ24gIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OA0KLQ0KLWRkY3BzMzM1IGNvcHlzaWduICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zOTgNCi1kZGNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0zNCAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkY3BzMzM3IGNvcHlzaWduICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zODMNCi1kZGNwczMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0zNCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLQ0KLS0tIE90aGVyIGtpbmRzIG9mIFJIUw0KLWRkY3BzNDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQ0KLWRkY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMA0KLWRkY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQ0KLWRkY3BzNDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMA0KLWRkY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQ0KLWRkY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMA0KLWRkY3BzNDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQ0KLWRkY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMA0KLQ0KLWRkY3BzNDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxDQotZGRjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjANCi1kZGNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQ0KLWRkY3BzNDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwDQotDQotZGRjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDENCi1kZGNwczQyMSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLU5hTiAgLT4gLTcyMA0KLWRkY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxDQotZGRjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjANCi1kZGNwczQyNSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTjggLT4gIDcyMA0KLQ0KLWRkY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQ0KLWRkY3BzNDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMA0KLWRkY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQ0KLWRkY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMA0KLWRkY3BzNDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZGNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZGNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2RkY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KK2RkY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2RkY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCitkZGNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RkY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAorZGRjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZGRjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZGRjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKK2RkY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43CitkZGNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorZGRjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKK2RkY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitkZGNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKK2RkY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQorZGRjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2RkY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCitkZGNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKK2RkY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworZGRjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKK2RkY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCitkZGNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorZGRjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKK2RkY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RkY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RkY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKK2RkY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BzMTIxIGNvcHlzaWduICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwczEyMyBjb3B5c2lnbiAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxMSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNwczEzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4MworZGRjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwczEzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM5OAorCitkZGNwczEzNSBjb3B5c2lnbiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM5OAorZGRjcHMxMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAxMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwczEzNyBjb3B5c2lnbiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4MworZGRjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAxMSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUworCistLSBJbmZpbml0aWVzCitkZGNwczIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQorZGRjcHMyMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIC0zNCAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNwczIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4KK2RkY3BzMjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTgorZGRjcHMyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTgorZGRjcHMyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwczIzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZGRjcHMyMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2RkY3BzMjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorZGRjcHMyMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkZGNwczIzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgLTM0IC0+IC1OYU43CitkZGNwczIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43CitkZGNwczIzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCitkZGNwczIzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3BzMzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcKK2RkY3BzMzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcKK2RkY3BzMzAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAtMzQgLT4gLTc1CitkZGNwczMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQorZGRjcHMzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MAorZGRjcHMzMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIC0zNCAtPiAtNy41MAorZGRjcHMzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDAKK2RkY3BzMzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkZGNwczMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wCitkZGNwczMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wCitkZGNwczMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0CitkZGNwczMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0CitkZGNwczMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2RkY3BzMzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZGRjcHMzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCitkZGNwczMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BzMzIxIGNvcHlzaWduICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRjcHMzMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDEKK2RkY3BzMzI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgLTM0IC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwczMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIC0zNCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcHMzMzIgY29weXNpZ24gIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4MworZGRjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMzM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zOTgKKworZGRjcHMzMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OAorZGRjcHMzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMzM3IGNvcHlzaWduICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zODMKK2RkY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tIE90aGVyIGtpbmRzIG9mIFJIUworZGRjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitkZGNwczQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjAKK2RkY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQorZGRjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitkZGNwczQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDEKK2RkY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAorZGRjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitkZGNwczQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjAKKworZGRjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKK2RkY3BzNDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitkZGNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQorZGRjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKKworZGRjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2RkY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwCitkZGNwczQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQorZGRjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2RkY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwCisKK2RkY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQorZGRjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitkZGNwczQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDEKK2RkY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAorZGRjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QKaW5kZXggNTUzMWQwZS4uMDE5ZGIyMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QKQEAgLTEsODYzICsxLDg2MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGREaXZpZGUuZGVjVGVzdCAtLSBkZWNEb3VibGUgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkZGl2MDAxIGRpdmlkZSAgMSAgICAgMSAgICAtPiAgMQ0KLWRkZGl2MDAyIGRpdmlkZSAgMiAgICAgMSAgICAtPiAgMg0KLWRkZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41DQotZGRkaXYwMDQgZGl2aWRlICAyICAgICAyICAgIC0+ICAxDQotZGRkaXYwMDUgZGl2aWRlICAwICAgICAxICAgIC0+ICAwDQotZGRkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwDQotZGRkaXYwMDcgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYwMDggZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxDQotDQotZGRkaXYwMTAgZGl2aWRlICAyLjQgICAxICAgIC0+ICAyLjQNCi1kZGRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQNCi1kZGRpdjAxMiBkaXZpZGUgIC0yLjQgIDEgICAgLT4gIC0yLjQNCi1kZGRpdjAxMyBkaXZpZGUgIC0yLjQgIC0xICAgLT4gIDIuNA0KLWRkZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MA0KLWRkZGl2MDE1IGRpdmlkZSAgMi40MDAgMSAgICAtPiAgMi40MDANCi1kZGRpdjAxNiBkaXZpZGUgIDIuNCAgIDIgICAgLT4gIDEuMg0KLWRkZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDANCi1kZGRpdjAxOCBkaXZpZGUgIDIuICAgIDIgICAgLT4gIDENCi1kZGRpdjAxOSBkaXZpZGUgIDIwICAgIDIwICAgLT4gIDENCi0NCi1kZGRpdjAyMCBkaXZpZGUgIDE4NyAgIDE4NyAgICAtPiAgMQ0KLWRkZGl2MDIxIGRpdmlkZSAgNSAgICAgMiAgICAgIC0+ICAyLjUNCi1kZGRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41DQotZGRkaXYwMjMgZGl2aWRlICA1MDAgICAyMDAgICAgLT4gIDIuNQ0KLWRkZGl2MDI0IGRpdmlkZSAgNTAuMCAgMjAuMCAgIC0+ICAyLjUNCi1kZGRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41DQotZGRkaXYwMjYgZGl2aWRlICA1ICAgICAyLjAgICAgLT4gIDIuNQ0KLWRkZGl2MDI3IGRpdmlkZSAgNSAgICAgMi4wMDAgIC0+ICAyLjUNCi1kZGRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUNCi1kZGRpdjAyOSBkaXZpZGUgIDUgICAgIDAuMjAwICAtPiAgMjUNCi1kZGRpdjAzMCBkaXZpZGUgIDEwICAgIDEgICAgICAtPiAgMTANCi1kZGRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwDQotZGRkaXYwMzIgZGl2aWRlICAxMDAwICAxICAgICAgLT4gIDEwMDANCi1kZGRpdjAzMyBkaXZpZGUgIDEwMDAgIDEwMCAgICAtPiAgMTANCi0NCi1kZGRpdjAzNSBkaXZpZGUgIDEgICAgIDIgICAgICAtPiAgMC41DQotZGRkaXYwMzYgZGl2aWRlICAxICAgICA0ICAgICAgLT4gIDAuMjUNCi1kZGRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUNCi1kZGRpdjAzOCBkaXZpZGUgIDEgICAgIDE2ICAgICAtPiAgMC4wNjI1DQotZGRkaXYwMzkgZGl2aWRlICAxICAgICAzMiAgICAgLT4gIDAuMDMxMjUNCi1kZGRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUNCi1kZGRpdjA0MSBkaXZpZGUgIDEgICAgLTIgICAgICAtPiAgLTAuNQ0KLWRkZGl2MDQyIGRpdmlkZSAgMSAgICAtNCAgICAgIC0+ICAtMC4yNQ0KLWRkZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUNCi1kZGRpdjA0NCBkaXZpZGUgIDEgICAgLTE2ICAgICAtPiAgLTAuMDYyNQ0KLWRkZGl2MDQ1IGRpdmlkZSAgMSAgICAtMzIgICAgIC0+ICAtMC4wMzEyNQ0KLWRkZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUNCi1kZGRpdjA0NyBkaXZpZGUgLTEgICAgIDIgICAgICAtPiAgLTAuNQ0KLWRkZGl2MDQ4IGRpdmlkZSAtMSAgICAgNCAgICAgIC0+ICAtMC4yNQ0KLWRkZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUNCi1kZGRpdjA1MCBkaXZpZGUgLTEgICAgIDE2ICAgICAtPiAgLTAuMDYyNQ0KLWRkZGl2MDUxIGRpdmlkZSAtMSAgICAgMzIgICAgIC0+ICAtMC4wMzEyNQ0KLWRkZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUNCi1kZGRpdjA1MyBkaXZpZGUgLTEgICAgLTIgICAgICAtPiAgMC41DQotZGRkaXYwNTQgZGl2aWRlIC0xICAgIC00ICAgICAgLT4gIDAuMjUNCi1kZGRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUNCi1kZGRpdjA1NiBkaXZpZGUgLTEgICAgLTE2ICAgICAtPiAgMC4wNjI1DQotZGRkaXYwNTcgZGl2aWRlIC0xICAgIC0zMiAgICAgLT4gIDAuMDMxMjUNCi1kZGRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUNCi0NCi0tLSBiY2RUaW1lDQotZGRkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MDYxIGRpdmlkZSAxLjIzNDU2NzggIDEuOTg3NjU0MyAgIC0+IDAuNjIxMTE3OTY4MDQ5MDcxNyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZGRpdjA3MSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkNCi1kZGRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgMSAgLT4gIDk5OTk5OTk5OTk5OTk5OQ0KLWRkZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAxICAtPiAgOTk5OTk5OTk5OTk5OTkNCi1kZGRpdjA3NCBkaXZpZGUgIDk5OTk5OTk5OTk5OTkgICAgMSAgLT4gIDk5OTk5OTk5OTk5OTkNCi1kZGRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OTk5OQ0KLWRkZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAxICAtPiAgOTk5OTk5OTk5OTkNCi1kZGRpdjA3NyBkaXZpZGUgIDk5OTk5OTk5OTkgICAgICAgMSAgLT4gIDk5OTk5OTk5OTkNCi1kZGRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRkZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAxICAtPiAgOTk5OTk5OTkNCi1kZGRpdjA4MCBkaXZpZGUgIDk5OTk5OTkgICAgICAgICAgMSAgLT4gIDk5OTk5OTkNCi1kZGRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgMSAgLT4gIDk5OTk5OQ0KLWRkZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAxICAtPiAgOTk5OTkNCi1kZGRpdjA4MyBkaXZpZGUgIDk5OTkgICAgICAgICAgICAgMSAgLT4gIDk5OTkNCi1kZGRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgMSAgLT4gIDk5OQ0KLWRkZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAxICAtPiAgOTkNCi1kZGRpdjA4NiBkaXZpZGUgIDkgICAgICAgICAgICAgICAgMSAgLT4gIDkNCi0NCi1kZGRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMA0KLWRkZGl2MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjANCi1kZGRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMA0KLWRkZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3DQotZGRkaXYwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0DQotDQotZGRkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgNCi1kZGRpdjA5NiBkaXZpZGUgIDEgICAgICAgICAgICAxRS05ICAtPiAgMUUrOQ0KLWRkZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMA0KLWRkZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQ0KLWRkZGl2MDk5IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEyIC0+ICAxRSsxMg0KLQ0KLWRkZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDENCi1kZGRpdjEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUNCi1kZGRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQ0KLWRkZGl2MTA0IGRpdmlkZSAgMSAgNSAgIC0+IDAuMg0KLWRkZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUNCi1kZGRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xDQotZGRkaXYxMTAgZGl2aWRlICAxICAxICAgLT4gMQ0KLWRkZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDINCi1kZGRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzDQotZGRkaXYxMTMgZGl2aWRlICA0ICAxICAgLT4gNA0KLWRkZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUNCi1kZGRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2DQotZGRkaXYxMTYgZGl2aWRlICA3ICAxICAgLT4gNw0KLWRkZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgNCi1kZGRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5DQotZGRkaXYxMTkgZGl2aWRlICAxMCAxICAgLT4gMTANCi0NCi1kZGRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQNCi1kZGRpdjEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwDQotDQotZGRkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5LjQ5Mzg5ODc3OTc1NiAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMuOTQ3ODk1NzkxNTgzICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOS4zODc3NTUxMDIwNDEgICAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5DQotZGRkaXYxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwLjU4ODIzNTI5NDExOCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQuMDcxODU2Mjg3NDI1ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTM2IGRpdmlkZSAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OC41MDYyOTg3NDAyNTIgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdGVzdCBwb3NzaWJseSBpbXByZWNpc2UgcmVzdWx0cw0KLWRkZGl2MjIwIGRpdmlkZSAzOTEgICA1OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMjEgZGl2aWRlIDM5MSAgLTU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjIzIGRpdmlkZSAtMzkxIC01OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93LCBzb21lIHdpdGggY29lZmZpY2llbnQgcGFkZGluZw0KLWRkZGl2MjcwIGRpdmlkZSAxIDFlMzg0ICAgICAgICAgICAgICAgICAgLT4gMUUtMzg0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZGRpdjI3MSBkaXZpZGUgMSAwLjllMzg0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTFFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGRpdjI3MiBkaXZpZGUgMSAwLjk5ZTM4NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDFFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGRpdjI3NCBkaXZpZGUgOWUzODQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZA0KLWRkZGl2Mjc1IGRpdmlkZSA5LjllMzg0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkDQotZGRkaXYyNzYgZGl2aWRlIDkuOTllMzg0IDEgICAgICAgICAgICAgICAtPiA5Ljk5MDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQNCi1kZGRpdjI3NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxICAgIC0+IDkuOTk5OTk5OTk5OTk5OTAwRSszODQgQ2xhbXBlZA0KLWRkZGl2Mjc4IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5ZTM4NCAxICAgLT4gOS45OTk5OTk5OTk5OTk5OTBFKzM4NCBDbGFtcGVkDQotZGRkaXYyNzkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotDQotZGRkaXYyODUgZGl2aWRlIDkuOWUzODQgIDEuMSAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkDQotZGRkaXYyODYgZGl2aWRlIDkuOTllMzg0IDEuMSAgICAgICAgICAgICAgLT4gOS4wODE4MTgxODE4MTgxODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjI4NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxLjEgICAtPiA5LjA5MDkwOTA5MDkwOTAwMEUrMzg0IENsYW1wZWQNCi1kZGRpdjI4OCBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OWUzODQgMS4xICAtPiA5LjA5MDkwOTA5MDkwOTA4MkUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2Mjg5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMS4xIC0+IDkuMDkwOTA5MDkwOTA5MDkwRSszODQgQ2xhbXBlZA0KLQ0KLQ0KLS0tIERpdmlkZSBpbnRvIDAgdGVzdHMNCi1kZGRpdjMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwDQotZGRkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQ0KLWRkZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzENCi1kZGRpdjMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjANCi1kZGRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwDQotZGRkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDANCi1kZGRpdjMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03DQotZGRkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQ0KLWRkZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzENCi1kZGRpdjMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwDQotZGRkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wDQotZGRkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMA0KLWRkZGl2MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwDQotZGRkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNw0KLWRkZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUNCi1kZGRpdjMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxDQotZGRkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMA0KLWRkZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMA0KLWRkZGl2MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDANCi1kZGRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMA0KLWRkZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcNCi1kZGRpdjMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03Nw0KLQ0KLWRkZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzINCi1kZGRpdjMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwDQotZGRkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwDQotZGRkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOA0KLWRkZGl2MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQNCi1kZGRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwDQotZGRkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMA0KLWRkZGl2MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwDQotZGRkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNg0KLWRkZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzINCi1kZGRpdjM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwDQotZGRkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwDQotZGRkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOA0KLWRkZGl2MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQNCi1kZGRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyDQotZGRkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMA0KLQ0KLS0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJw0KLWRkZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwDQotZGRkaXY0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTExIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDANCi1kZGRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MA0KLWRkZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxDQotZGRkaXY0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMDFFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxDQotZGRkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDFFLTExIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYNCi1kZGRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMEUtMTAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gaGlnaC1sb3dzDQotZGRkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQ0KLWRkZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzENCi1kZGRpdjQ1NSBkaXZpZGUgMWUrMSAgIDEuMDAgLT4gICAxRSsxDQotZGRkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQ0KLWRkZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzENCi1kZGRpdjQ1OCBkaXZpZGUgMWUrMiAgIDIuMDAgLT4gICA1RSsxDQotDQotLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMNCi1kZGRpdjQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUNCi1kZGRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUNCi1kZGRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwDQotZGRkaXY0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDANCi1kZGRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUNCi1kZGRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUNCi1kZGRpdjQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUNCi1kZGRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwDQotZGRkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41DQotZGRkaXY0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41DQotZGRkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41DQotZGRkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41DQotZGRkaXY0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41DQotZGRkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41DQotZGRkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41DQotZGRkaXY0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41DQotDQotLS0gc29tZSByZWNpcHJvY2Fscw0KLWRkZGl2NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzDQotZGRkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQNCi1kZGRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMw0KLWRkZGl2NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyDQotDQotLS0gUk1TIGRpc2N1c3Npb24gdGFibGUNCi1kZGRpdjQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyDQotZGRkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMg0KLWRkZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMNCi1kZGRpdjQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszDQotZGRkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNA0KLWRkZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQNCi0NCi1kZGRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyDQotZGRkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQ0KLWRkZGl2NDkzIGRpdmlkZSAxZTUgICAgMTBlMiAtPiAgIDFFKzINCi1kZGRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxDQotZGRkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMg0KLWRkZGl2NDk2IGRpdmlkZSAxZTUgICAyMDBlMSAtPiAgIDVFKzENCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZGRkaXY0OTcgIGRpdmlkZSAgMEUrMzgwIDEwMDBFLTEzICAtPiAwRSszNjkgQ2xhbXBlZA0KLWRkZGl2NDk4ICBkaXZpZGUgIDBFLTM5MCAxMDAwRSsxMyAgLT4gMEUtMzk4IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl91cA0KLQ0KLS0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3Vlcw0KLWRkZGl2NTAwIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAxMDEwMTAxMDEwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUNCi1kZGRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41DQotZGRkaXY1MTMgZGl2aWRlIDEuMDAgICAgICAyICAgIC0+IDAuNTANCi1kZGRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDANCi1kZGRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwDQotZGRkaXY1MTYgZGl2aWRlIDEuMDAwMDAgICAyICAgIC0+IDAuNTAwMDANCi1kZGRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDANCi1kZGRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwDQotZGRkaXY1MTkgZGl2aWRlIDEuMDAgICAgICAyLjAwIC0+IDAuNQ0KLQ0KLWRkZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyDQotZGRkaXY1MjIgZGl2aWRlIDIgICAgMS4wICAgICAgIC0+IDINCi1kZGRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMg0KLWRkZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyDQotZGRkaXY1MjUgZGl2aWRlIDIgICAgMS4wMDAwICAgIC0+IDINCi1kZGRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMg0KLWRkZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyDQotZGRkaXY1MjggZGl2aWRlIDIgICAgMS4wMDAwMDAwIC0+IDINCi1kZGRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMg0KLQ0KLWRkZGl2NTMwIGRpdmlkZSAgMi40MCAgIDIgICAgICAtPiAgMS4yMA0KLWRkZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MA0KLWRkZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNA0KLWRkZGl2NTMzIGRpdmlkZSAgMi40MCAgIDIuMCAgICAtPiAgMS4yDQotZGRkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYNCi1kZGRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQNCi1kZGRpdjUzNiBkaXZpZGUgIDIuNDAgICAyLjAwICAgLT4gIDEuMg0KLWRkZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42DQotZGRkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0DQotZGRkaXY1MzkgZGl2aWRlICAwLjkgICAgMC4xICAgIC0+ICA5DQotZGRkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxDQotZGRkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyDQotZGRkaXY1NDIgZGl2aWRlICA1ICAgICAgMiAgICAgIC0+ICAyLjUNCi1kZGRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQ0KLWRkZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41DQotZGRkaXY1NDUgZGl2aWRlICA1ICAgICAgMjAgICAgIC0+ICAwLjI1DQotZGRkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1DQotZGRkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMA0KLWRkZGl2NTQ4IGRpdmlkZSAgMi40MDAgIDIuMCAgICAtPiAgMS4yMA0KLWRkZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQ0KLQ0KLWRkZGl2NTUwIGRpdmlkZSAgMjQwICAgIDEgICAgICAtPiAgMjQwDQotZGRkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNA0KLWRkZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40DQotZGRkaXY1NTMgZGl2aWRlICAyNDAgICAgMTAwMCAgIC0+ICAwLjI0DQotZGRkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwDQotZGRkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDANCi1kZGRpdjU1NiBkaXZpZGUgIDI0MDAgICAxMDAgICAgLT4gIDI0DQotZGRkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQNCi0NCi0tLSArdmUgZXhwb25lbnQNCi1kZGRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQ0KLWRkZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQ0KLWRkZGl2NjAyIGRpdmlkZSAgMi40MDBFKzkgICAyICAtPiAgMS4yMDBFKzkNCi1kZGRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQ0KLWRkZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5DQotZGRkaXY2MDUgZGl2aWRlICAyNDBFKzcgICAgIDIgIC0+ICAxLjIwRSs5DQotZGRkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQ0KLWRkZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5DQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLWRkZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMw0KLWRkZGl2NzMyIGRpdmlkZSAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZGl2NzM1IGRpdmlkZSAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLQ0KLWRkZGl2NzQxIGRpdmlkZSAgMCAgICAtMSAgICAgLT4gLTANCi1kZGRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwDQotZGRkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMA0KLWRkZGl2NzQ0IGRpdmlkZSAtMCAgICAgMSAgICAgLT4gLTANCi1kZGRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzQ3IGRpdmlkZSAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY3NTEgZGl2aWRlICAwLjAgIC0xICAgICAtPiAtMC4wDQotZGRkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wDQotZGRkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wDQotZGRkaXY3NTQgZGl2aWRlIC0wLjAgICAxICAgICAtPiAtMC4wDQotZGRkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc1NyBkaXZpZGUgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRkZGl2NzYxIGRpdmlkZSAgMCAgICAtMS4wICAgLT4gLTBFKzENCi1kZGRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxDQotZGRkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQ0KLWRkZGl2NzY0IGRpdmlkZSAtMCAgICAgMS4wICAgLT4gLTBFKzENCi1kZGRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2NzY3IGRpdmlkZSAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY3NzEgZGl2aWRlICAwLjAgIC0xLjAgICAtPiAtMA0KLWRkZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDANCi1kZGRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwDQotZGRkaXY3NzQgZGl2aWRlIC0wLjAgICAxLjAgICAtPiAtMA0KLWRkZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY3NzcgZGl2aWRlICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBTcGVjaWFscw0KLWRkZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZGRkaXY3ODIgZGl2aWRlICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kZGRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRkZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZGRkaXY3ODUgZGl2aWRlICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kZGRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2Nzg4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQotZGRkaXY3ODkgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY3OTAgZGl2aWRlIC0xICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCi1kZGRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLWRkZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZGRkaXY3OTMgZGl2aWRlICAxICAgICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQNCi1kZGRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWRkZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZGl2ODAwIGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kZGRpdjgwMyBkaXZpZGUgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRkZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZGRkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZGRpdjgwNiBkaXZpZGUgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQotZGRkaXY4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4MTAgZGl2aWRlIC0xICAgIC1JbmYgICAtPiAgMEUtMzk4IENsYW1wZWQNCi1kZGRpdjgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWRkZGl2ODEyIGRpdmlkZSAgMCAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQotZGRkaXY4MTMgZGl2aWRlICAxICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCi1kZGRpdjgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLWRkZGl2ODE1IGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRkZGl2ODIyIGRpdmlkZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRkZGl2ODI1IGRpdmlkZSAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRkZGl2ODI4IGRpdmlkZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODMxIGRpdmlkZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODM0IGRpdmlkZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkZGl2ODM3IGRpdmlkZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0MiBkaXZpZGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0NSBkaXZpZGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg0OCBkaXZpZGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1MSBkaXZpZGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1NCBkaXZpZGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg1NyBkaXZpZGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRkZGl2ODYyIGRpdmlkZSAgTmFOOCAgMTAwMCAgLT4gIE5hTjgNCi1kZGRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43DQotZGRkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRkZGl2ODY1IGRpdmlkZSAtSW5mICAgTmFONCAgLT4gIE5hTjQNCi1kZGRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zDQotZGRkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMg0KLQ0KLWRkZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3MyBkaXZpZGUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3NiBkaXZpZGUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg3OSBkaXZpZGUgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkNCi1kZGRpdjg4MiBkaXZpZGUgIC1OYU44ICAgMTAwMCAgLT4gIC1OYU44DQotZGRkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONw0KLWRkZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYNCi1kZGRpdjg4NSBkaXZpZGUgIC1JbmYgICAtTmFONCAgLT4gIC1OYU40DQotZGRkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMw0KLWRkZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjINCi0NCi1kZGRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTMgZGl2aWRlIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTYgZGl2aWRlIC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRkaXY4OTkgZGl2aWRlIC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwDQotZGRkaXY5MDEgZGl2aWRlICAgIDAgICAgICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkaXY5MDQgZGl2aWRlICAgIDAuMDAwMSAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MDcgZGl2aWRlICAgIDEgICAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MTAgZGl2aWRlICAgMUUrMTAwICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY5MjEgZGl2aWRlICAgLTAuMDAwMSAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjQgZGl2aWRlICAgLTEgICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjcgZGl2aWRlICAtMUUrMTAwICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY5MzEgZGl2aWRlICAgIDAuMDAwMSAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzQgZGl2aWRlICAgIDEgICAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzcgZGl2aWRlICAgMUUrMTAwICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkaXY5NDEgZGl2aWRlICAgLTAuMDAwMSAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDQgZGl2aWRlICAgLTEgICAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDcgZGl2aWRlICAtMUUrMTAwICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZGRkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxDQotZGRkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUNCi1kZGRpdjEwMjMgIGRpdmlkZSAxRTAgICAgICAgICAgM0UwIC0+IDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDENCi1kZGRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMg0KLWRkZGl2MTAyNiAgZGl2aWRlIDI0MDBFLTMgICAgICAyRTAgLT4gMS4yMDANCi1kZGRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQ0KLWRkZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41DQotZGRkaXYxMDI5ICBkaXZpZGUgNUUwICAgICAgMjAwMEUtMyAtPiAyLjUNCi1kZGRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1DQotZGRkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQ0KLWRkZGl2MTAzMiAgZGl2aWRlIDQ4MEUtMiAgICAgICAzRTAgLT4gMS42MA0KLWRkZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQ0KLQ0KLS0tIEVDTUFTY3JpcHQgYmFkIGV4YW1wbGVzDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLWRkZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kZGRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCi0tLSBzaWducw0KLWRkZGl2MTA1MSBkaXZpZGUgIDFlKzI3NyAgMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNTIgZGl2aWRlICAxZSsyNzcgLTFlLTMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDUzIGRpdmlkZSAtMWUrMjc3ICAxZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTA1NCBkaXZpZGUgLTFlKzI3NyAtMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjEwNTUgZGl2aWRlICAxZS0yNzcgIDFlKzMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjEwNTYgZGl2aWRlICAxZS0yNzcgLTFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjEwNTcgZGl2aWRlIC0xZS0yNzcgIDFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjEwNTggZGl2aWRlIC0xZS0yNzcgLTFlKzMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kZGRpdjEwNjAgZGl2aWRlIDFlLTI5MSAxZSsxMDEgLT4gMUUtMzkyIFN1Ym5vcm1hbA0KLWRkZGl2MTA2MSBkaXZpZGUgMWUtMjkxIDFlKzEwMiAtPiAxRS0zOTMgU3Vibm9ybWFsDQotZGRkaXYxMDYyIGRpdmlkZSAxZS0yOTEgMWUrMTAzIC0+IDFFLTM5NCBTdWJub3JtYWwNCi1kZGRpdjEwNjMgZGl2aWRlIDFlLTI5MSAxZSsxMDQgLT4gMUUtMzk1IFN1Ym5vcm1hbA0KLWRkZGl2MTA2NCBkaXZpZGUgMWUtMjkxIDFlKzEwNSAtPiAxRS0zOTYgU3Vibm9ybWFsDQotZGRkaXYxMDY1IGRpdmlkZSAxZS0yOTEgMWUrMTA2IC0+IDFFLTM5NyBTdWJub3JtYWwNCi1kZGRpdjEwNjYgZGl2aWRlIDFlLTI5MSAxZSsxMDcgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KLWRkZGl2MTA2NyBkaXZpZGUgMWUtMjkxIDFlKzEwOCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTA2OCBkaXZpZGUgMWUtMjkxIDFlKzEwOSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTA2OSBkaXZpZGUgMWUtMjkxIDFlKzExMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1kZGRpdjEwNzAgZGl2aWRlIDFlKzYwIDFlLTMyMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkDQotZGRkaXYxMDcxIGRpdmlkZSAxZSs2MCAxZS0zMjIgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQNCi1kZGRpdjEwNzIgZGl2aWRlIDFlKzYwIDFlLTMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQNCi1kZGRpdjEwNzMgZGl2aWRlIDFlKzYwIDFlLTMyNCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQotZGRkaXYxMDc0IGRpdmlkZSAxZSs2MCAxZS0zMjUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDc1IGRpdmlkZSAxZSs2MCAxZS0zMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDc2IGRpdmlkZSAxZSs2MCAxZS0zMjcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDc3IGRpdmlkZSAxZSs2MCAxZS0zMjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDc4IGRpdmlkZSAxZSs2MCAxZS0zMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMDc5IGRpdmlkZSAxZSs2MCAxZS0zMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotZGRkaXYxMTAxIGRpdmlkZSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbA0KLWRkZGl2MTEwMiBkaXZpZGUgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZGRpdjExMDMgZGl2aWRlICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMS4wMEUtMzk2ICAgU3Vibm9ybWFsDQotZGRkaXYxMTA0IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KLWRkZGl2MTEwNSBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRkaXYxMTA2IGRpdmlkZSAgMS4zRS0zOTQgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMDcgZGl2aWRlICAxLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTEwOCBkaXZpZGUgIDEuN0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTA5IGRpdmlkZSAgMi4zRS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMTAgZGl2aWRlICAyLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExMSBkaXZpZGUgIDIuN0UtMzk0ICAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTEyIGRpdmlkZSAgMS40OUUtMzk0ICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMTMgZGl2aWRlICAxLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExNCBkaXZpZGUgIDEuNTFFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTE1IGRpdmlkZSAgMi40OUUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMTYgZGl2aWRlICAyLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTExNyBkaXZpZGUgIDIuNTFFLTM5NCAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRkaXYxMTE4IGRpdmlkZSAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsDQotZGRkaXYxMTE5IGRpdmlkZSAgM0UtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTEyMCBkaXZpZGUgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGRpdjExMjEgZGl2aWRlICA3RS0zOTQgICAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTEyMiBkaXZpZGUgIDlFLTM5NCAgICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTIzIGRpdmlkZSAgOS45RS0zOTQgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGRpdjExMjQgZGl2aWRlICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTFFLTM5OCAgICBTdWJub3JtYWwNCi1kZGRpdjExMjUgZGl2aWRlICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMTI2IGRpdmlkZSAtNUUtMzk0ICAgICAgIDFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZGl2MTEyNyBkaXZpZGUgIDdFLTM5NCAgICAgIC0xZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYxMTI4IGRpdmlkZSAtOUUtMzk0ICAgICAgIDFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjExMjkgZGl2aWRlICA5LjlFLTM5NCAgICAtMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MTEzMCBkaXZpZGUgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kZGRpdjExMzEgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRkaXYxMTMyIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGRpdjExMzMgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwNCi1kZGRpdjExMzQgZGl2aWRlICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwNCi1kZGRpdjExMzUgZGl2aWRlICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwNCi1kZGRpdjExMzYgZGl2aWRlIDEwLjBFLTE5OSAgICAxMGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwNCi1kZGRpdjExMzcgZGl2aWRlIDMwLjBFLTE5OSAgICAzMGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwNCi0NCi0tLSByYW5kb21zDQotZGRkaXYyMDEwICBkaXZpZGUgIC0zLjMwMzIyNjcxNDkwMDcxMUUtMzUgICA4Ljc5NjU3ODg0MjcxMzE4M0UrNzMgICAtPiAgLTMuNzU1MTI2NTk0MDU4NzgzRS0xMDkgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDExICBkaXZpZGUgICA5MzMxNTMzMjc4MjEwNzMuNiAgICAgICA2ODc4MjE4MTA5MDI0Ni4yNSAgICAgICAtPiAgIDEzLjU2Njc4ODg1NDc1NzYzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAxMiAgZGl2aWRlICAgNS4wNDc1MjQzNjA1NzkwNkUtNzIgICAtOC4xNzk0ODE3NzEyMzg2NDJFKzY0ICAgLT4gIC02LjE3MDk1ODYyNzYzMjgzNUUtMTM3IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAxMyAgZGl2aWRlICAtMzcwNzYxMzMwOTU4MjMxOCAgICAgICAgMzM5NDkxMTE5NjUwMy4wNDggICAgICAgLT4gIC0xMDkyLjEwOTA3MDAxMDgzNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMTQgIGRpdmlkZSAgIDk5Njg5LjA1NTUxOTA0NjEgICAgICAgLTQuNzM1MjA4NTUzODkxNDY0ICAgICAgIC0+ICAtMjEwNTIuNzI3NTM3NjU0MTEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDE1ICBkaXZpZGUgIC0xNDQ3OTE1Nzc1NjEzMzI5ICAgICAgICAyNjk3NTA3OTcuODE4NDg3NSAgICAgICAtPiAgLTUzNjc2MDUuMTY0OTI1NjUzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAxNiAgZGl2aWRlICAtOS4zOTQ4ODEzMDQyMjUyNThFLTE5ICAtODMwNTg1LjAyNTI2NzE2MzYgICAgICAgLT4gICAxLjEzMTExNjE0MzI1MTM1OEUtMjQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDE3ICBkaXZpZGUgIC0xLjA1NjI4MzQzMjczODkzNCAgICAgICA4OC41ODc1NDU1NTEyNDAxMyAgICAgICAtPiAgLTAuMDExOTIzNjExMDAxNTkzNTIgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDE4ICBkaXZpZGUgICA1NzYzMjIwOTMzMzQzLjA4MSAgICAgICA2ODkwODk1NjcwMjUwNTIuMSAgICAgICAtPiAgIDAuMDA4MzYzNTI5NTE2NTI0NDU2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAxOSAgZGl2aWRlICAgODczODE5LjEyMjEwMzIxNiAgICAgICAgOS43NDA2MTI0OTQ1MjMzMDBFLTQ5ICAgLT4gICA4Ljk3MDg4NDc2MzA5Mzk0OEUrNTMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDIwICBkaXZpZGUgICA4MDIyOTE0LjgzODUzMzU3NiAgICAgICA2MTc4LjU2NjgwMTc0MjcxMyAgICAgICAtPiAgIDEyOTguNTA3NDIwMjQzNTgzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyMSAgZGl2aWRlICAgMjAzOTgyLjc2MDU2NTAzNjMgICAgICAtMjE1OC4yODM2MzkwNTM0MzUgICAgICAgLT4gIC05NC41MTE1NjMyMDQyMjE2OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjIgIGRpdmlkZSAgIDgwMy42MzEwNTQ3MDEzMDMwICAgICAgIDcxMDExNDM3OTUzOTkuMjM4ICAgICAgIC0+ICAgMS4xMzE2OTI0MTE2MTExNjZFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyMyAgZGl2aWRlICAgOS4yNTE2OTc4NDIxMjMzOTlFLTgyICAtMS4zNDIzNTAyMjA2MDYxMTlFLTcgICAgLT4gIC02Ljg5MjE2Mzk4MjMyMTkzNkUtNzUgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDI0ICBkaXZpZGUgIC0xLjk4MDYwMDY0NTYzNzk5MkUtNTMgIC01LjQ3NDI2Mjc1MzIxNDQ1N0UrNzcgICAtPiAgIDMuNjE4MDIyNjE3NzAzMTY4RS0xMzEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDI1ICBkaXZpZGUgIC0yMTAuMDMyMjk5NjM1MTY5MCAgICAgIC04LjU4MDk1MTgzNTg3Mjg0M0UrODAgICAtPiAgIDIuNDQ3NjU3MzY1NDM0OTcxRS03OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjYgIGRpdmlkZSAgLTEuODIxOTgwMzE0MDIwMzcwRSs4NSAgLTMuMDE4OTE1MjY3MTM4MTY1ICAgICAgIC0+ICAgNi4wMzUyMTUxNDQ1MDMwNDJFKzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAyNyAgZGl2aWRlICAtNzcyMjY0NTAzNjAxLjEwNDcgICAgICAgNS4xNTgyNTgyNzE0MDg5ODhFLTg2ICAgLT4gIC0xLjQ5NzE0MTk4NjYzMDYxNEUrOTcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDI4ICBkaXZpZGUgIC03NjcuMDUzMjQxNTg0NzEwNiAgICAgICAyLjcwMDAyNzIyODAyODkzOUUtNTkgICAtPiAgLTIuODQwOTA5MjgyNzcyOTQxRSs2MSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMjkgIGRpdmlkZSAgIDQ5NjcyNC44NTQ4MjUwMDkzICAgICAgIDcuMzI3MDA1ODgxNjMxMDBFKzY2ICAgIC0+ICAgNi43NzkzNzAyMjA5MjkwMTNFLTYyIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzMCAgZGl2aWRlICAtMzA0MjMyNjUxNDQ3NzAzLjkgICAgICAtMTA4Ljk3MzA4MDg2NTc0NDAgICAgICAgLT4gICAyNzkxODE0NzIxODYyLjU2NSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMzEgIGRpdmlkZSAgLTcuMjMzODE3MTkyNjk5NDA1RSs0MiAgLTU3MTEzMDIwMDQuMTQ5NDExICAgICAgIC0+ICAgMS4yNjY1NzkzNTIyMTE0MzBFKzMzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzMiAgZGl2aWRlICAtOS45OTkyMjE0NDQ5MTI3NDVFKzk2ICAgNDAxMDU2OTQwNjQ0NjE5NyAgICAgICAgLT4gIC0yLjQ5MzIxNzQwNDIwMjI1MEUrODEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDMzICBkaXZpZGUgIC0xODM3MjcyLjA2MTkzNzYyMiAgICAgICA4LjM1NjMyMjgzODA2Njc2MiAgICAgICAtPiAgLTIxOTg2Ni4wOTM5MTk2ODgyIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzNCAgZGl2aWRlICAgMjE2OC41MTc1NTU2MDY1MjkgICAgICAgMjA5LjE5MTAyNTg2MTUwNjEgICAgICAgLT4gICAxMC4zNjYyMDczNzc1Njc4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMzUgIGRpdmlkZSAgLTEuODg0Mzg5NzkwNTc2MzcxRSs4OCAgIDIuOTUxODE5NTM4NzA1ODNFKzIwICAgIC0+ICAtNi4zODM4MjQ1MDUwNzk4MjhFKzY3IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzNiAgZGl2aWRlICAgNzMyMjYzLjYwMzc0MzgxOTYgICAgICAgOTYxMjIyLjM2MzQ0NDY4ODkgICAgICAgLT4gICAwLjc2MTgwNDU4NTA2OTgyNjkgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDM3ICBkaXZpZGUgIC04MTM0NjE0MTkuMDM0ODMzNiAgICAgICA1LjM3NjI5Mzc1MzgwOTE0M0UrODQgICAtPiAgLTEuNTEzMDUyNDA0Mjg1OTI3RS03NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwMzggIGRpdmlkZSAgLTQ1NTYyMTMzNTA4MTA4LjUwICAgICAgLTkuNzc2ODQzNDk0NjkwMTA3RSs1MSAgIC0+ICAgNC42NjAyMDg5NDUwMjk1MTlFLTM5IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjAzOSAgZGl2aWRlICAtNi40ODkzOTMxNzI0NDEwMTZFKzgwICAtOTEwMTk2NS4wOTc4NTIxMTMgICAgICAgLT4gICA3LjEyOTY2MTY3NDg5NzQyMUUrNzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQwICBkaXZpZGUgICAzLjY5NDU3NjIzNzExNzM0OUUrOTMgICA2NjgzNTEyLjAxMjYyMjAwMyAgICAgICAtPiAgIDUuNTI3ODk2NDU2NDQzOTEyRSs4NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDEgIGRpdmlkZSAgLTIuMjUyODc3NzI2NDAzMjcyRSsxOSAgLTc0NTE5MTMyNTYuMTgxMzY3ICAgICAgIC0+ICAgMzAyMzIyMDU0Ni4xMjU1MzEgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQyICBkaXZpZGUgICA1MTgzMDMuMTk4OTExMTg0MiAgICAgICA1MC4wMTU4NzAyMDQ3NDEzMyAgICAgICAtPiAgIDEwMzYyLjc3NDc5MTA3MTIzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0MyAgZGl2aWRlICAgMi45MDIwODc4ODE4ODAxMDNFKzI0ICAgMzMuMzI0MDA5OTIzMDU3MDIgICAgICAgLT4gICA4LjcwODY5OTQ4ODk4OTU3OEUrMjIgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQ0ICBkaXZpZGUgICA1NDk2MTkuNDU1OTUxMDU1NyAgICAgICAxNjYwODI0ODQ1MTk2MzM4ICAgICAgICAtPiAgIDMuMzA5MzE2MTk2MzUxMTA0RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDUgIGRpdmlkZSAgLTY3NzU2NzA3NzQ2ODQwNDMgICAgICAgIDgyOTIxNTIwMjMuMDc3MjYyICAgICAgIC0+ICAtODE3MTE4LjQ5NDE4OTEwNjIgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDQ2ICBkaXZpZGUgIC03Ny41MDkyMzkyMTUyNDA3OSAgICAgIC01LjYzNjg4MjY1NTQyNTgxNUUrNzQgICAtPiAgIDEuMzc1MDM3MzAyNTg4NDA1RS03MyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDcgIGRpdmlkZSAgLTIuOTg0ODg5NDU5NjA1MTQ5RS0xMCAgLTg4MTA2MTU2Nzg0MTIyLjk5ICAgICAgIC0+ICAgMy4zODc4MzMwMDU3MjEzODRFLTI0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA0OCAgZGl2aWRlICAgMC45NDk1MTcyOTM5OTcwODUgICAgICAgNDQ3NjcxMTUuOTY0NTA5OTggICAgICAgLT4gICAyLjEyMTAxNTExMDE3NTU4OUUtOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNDkgIGRpdmlkZSAgLTI3NjA5MzcyMTEuMDg0NTIxICAgICAgLTEwODcwMTU4NzY5NzU0MDggICAgICAgIC0+ICAgMC4wMDAwMDI1Mzk5MjM1MzcwNTcwMjQgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDUwICBkaXZpZGUgICAyODQzODM1MS44NTAzMDUzNiAgICAgIC00LjIwOTM5NzkwNDA4ODYyNEUtNDcgICAtPiAgLTYuNzU1OTE5MTM1NzcwNjg4RSs1MyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTEgIGRpdmlkZSAgLTg1NTYyNzMxLjY4MjA5NTYgICAgICAgLTcuMTY2MDQ1NDQyNTMwMTg1RSs0NSAgIC0+ICAgMS4xOTQwMDIwODA2MjE1NDJFLTM4IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1MiAgZGl2aWRlICAgMjUzMzgwMjg1MjE2NS4yNSAgICAgICAgNzE1NC4xMTk2MDYyMzU5NTUgICAgICAgLT4gICAzNTQxNzM5NTcuMzMxNzUwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTMgIGRpdmlkZSAgLTg4NTg4MzEzNDY4NTEuNDc0ICAgICAgIDk3LjU5NzM0MjA4ODAxNzE2ICAgICAgIC0+ICAtOTA3NjkxODY1MDkuODM1NzcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDU0ICBkaXZpZGUgICAxNzY3ODM2Mjk4MDEzODcuNSAgICAgICA4NDAwNzMyNjMuMzEwOTgxNyAgICAgICAtPiAgIDIxMDQzOC4zNDgwODQ4MjA2IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1NSAgZGl2aWRlICAtNDkzNTA2NDcxNzk2MTc1LjYgICAgICAgNzk3MzM4OTQ3OTA4MjIuMDMgICAgICAgLT4gIC02LjE4OTQxODg1NDk0MDc0NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTYgIGRpdmlkZSAgIDc5MC4xNjgyNTQyMTAzNDQ1ICAgICAgIDgyOS45NDQ5MzcwMzY3NDM1ICAgICAgIC0+ICAgMC45NTIwNzMxMDYyMzcxMjE0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MjA1NyAgZGl2aWRlICAtODkyMDQ1OTgzOC41ODMxNjQgICAgICAtNDc2Ny44ODkxODc4OTkyMTQgICAgICAgLT4gICAxODcwOTQ1LjI5NDAzNTU4MSBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjIwNTggIGRpdmlkZSAgIDUzNTM2Njg3MTY0NDIyLjEgICAgICAgIDUzMTM3LjUwMDcwMzI2ODkgICAgICAgIC0+ICAgMTAwNzUxMjMzMC4zODU2OTggSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDU5ICBkaXZpZGUgICA0LjA1MTUzMjMxMTE0NjU2MUUtNzQgIC0yLjM0MzA4OTc2ODk3MjI2MUUrOTQgICAtPiAgLTEuNzI5MTQwODgyNjA2MzMyRS0xNjggSW5leGFjdCBSb3VuZGVkDQotZGRkaXYyMDYwICBkaXZpZGUgIC0xNDg0Nzc1ODc3ODYzNi44OCAgICAgICAzLjA2MjU0MzUxNjM4MzgwN0UtNDMgICAtPiAgLTQuODQ4MTc4ODc0NTg3NDk3RSs1NSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBEaXZpc2lvbiBwcm9iYWJseSBoYXMgcHJlLXJvdW5kaW5nLCBzbyBuZWVkIHRvIHRlc3Qgcm91bmRpbmcNCi0tLSBleHBsaWNpdGx5IHJhdGhlciB0aGFuIGFzc3VtZSBpbmNsdWRlZCB0aHJvdWdoIG90aGVyIHRlc3RzOw0KLS0tIHRlc3RzIGluY2x1ZGUgc2ltcGxlIHJvdW5kaW5nIGFuZCBhbHNvIHRoZSB0cmlja3kgY2FzZXMgb2Ygc3RpY2t5DQotLS0gYml0cyBmb2xsb3dpbmcgdHdvIHplcm9zDQotLS0NCi0tLSAgIDEvOTk5OTkgZ2l2ZXMgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxDQotLS0gICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi0tLQ0KLS0tICAgMS85OTk5OTkgZ2l2ZXMgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDENCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotDQotcm91bmRpbmc6IGNlaWxpbmcNCi1kZGRpdjMwMDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAwMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDAzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAwNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZmxvb3INCi1kZGRpdjMwMTEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAxMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDEzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAxNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogdXANCi1kZGRpdjMwMjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAyMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDIzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzAyNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkZGl2MzAzMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDMyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwMzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDM0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZGRkaXYzMDQxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNDIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA0MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNDQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWRkZGl2MzA1MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDUyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNTMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDU0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGRpdjMwNjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA2MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDYzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2MzA2NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogMDV1cA0KLWRkZGl2MzA3MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDcyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjMwNzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXYzMDc0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHJhbmRvbSBkaXZpZGUgdGVzdHMgd2l0aCByZXN1bHQgbmVhciAxDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkZGl2NDAwMSBkaXZpZGUgIDMxOTUzODUxOTI5MTY5MTcgICAzMTk1Mzg1MTkyOTQ2Njk1ICAtPiAgMC45OTk5OTk5OTk5OTA2ODA5ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMDIgZGl2aWRlICAxMzkzNzIzMDY3NTI2OTkzICAgMTM5MzcyMzA2NzUxOTQ3NSAgLT4gIDEuMDAwMDAwMDAwMDA1Mzk0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMDMgZGl2aWRlICAgNzU5OTg1NTQzNzAyMzAyICAgIDc1OTk4NTU0MzY3NDAxNSAgLT4gIDEuMDAwMDAwMDAwMDM3MjIwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMDQgZGl2aWRlICA5NTc5MTU4NDU2MDI3MzAyICAgOTU3OTE1ODQ1NjAzNjg2NCAgLT4gIDAuOTk5OTk5OTk5OTk5MDAxOCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDA1IGRpdmlkZSAgNzA3OTM5ODI5OTE0MzU2OSAgIDcwNzkzOTgyOTkxNTY5MDQgIC0+ICAwLjk5OTk5OTk5OTk5ODExNjQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwNiBkaXZpZGUgIDY2MzYxNjkyNTUzNjY1OTggICA2NjM2MTY5MjU1MzM2Mzg2ICAtPiAgMS4wMDAwMDAwMDAwMDQ1NTMgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwNyBkaXZpZGUgIDY5NjQ4MTM5NzEzNDAwOTAgICA2OTY0ODEzOTcxMzIxNTU0ICAtPiAgMS4wMDAwMDAwMDAwMDI2NjEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwOCBkaXZpZGUgIDQxODIyNzUyMjU0ODA3ODQgICA0MTgyMjc1MjI1NDU0MDA5ICAtPiAgMS4wMDAwMDAwMDAwMDY0MDIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAwOSBkaXZpZGUgIDkyMjgzMjUxMjQ5MzgwMjkgICA5MjI4MzI1MTI0OTE4NzMwICAtPiAgMS4wMDAwMDAwMDAwMDIwOTEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxMCBkaXZpZGUgIDM0MjgzNDYzMzg2MzAxOTIgICAzNDI4MzQ2MzM4NjA5ODQzICAtPiAgMS4wMDAwMDAwMDAwMDU5MzYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxMSBkaXZpZGUgIDIxNDM1MTE1NTA3MjI4OTMgICAyMTQzNTExNTUwNzUxNzU0ICAtPiAgMC45OTk5OTk5OTk5ODY1MzU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMTIgZGl2aWRlICAxNjcyNzMyOTI0Mzk2Nzg1ICAgMTY3MjczMjkyNDQwMTgxMSAgLT4gIDAuOTk5OTk5OTk5OTk2OTk1MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDEzIGRpdmlkZSAgNDE5MDcxNDYxMTk0ODIxNiAgIDQxOTA3MTQ2MTE5NDg2NjQgIC0+ICAwLjk5OTk5OTk5OTk5OTg5MzEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxNCBkaXZpZGUgIDM5NDIyNTQ4MDA4NDg4NzcgICAzOTQyMjU0ODAwODE0NTU2ICAtPiAgMS4wMDAwMDAwMDAwMDg3MDYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxNSBkaXZpZGUgIDI4NTQ0NTk4MjY5NTIzMzQgICAyODU0NDU5ODI2OTYwNzYyICAtPiAgMC45OTk5OTk5OTk5OTcwNDc0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMTYgZGl2aWRlICAyODUzMjU4OTUzNjY0NzMxICAgMjg1MzI1ODk1MzY4NDQ3MSAgLT4gIDAuOTk5OTk5OTk5OTkzMDgxNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDE3IGRpdmlkZSAgOTQ1MzUxMjYzODEyNTk3OCAgIDk0NTM1MTI2MzgxNDY0MjUgIC0+ICAwLjk5OTk5OTk5OTk5NzgzNzEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxOCBkaXZpZGUgICAzMzk0NzY2MzM5NDAzNjkgICAgMzM5NDc2NjMzOTEyODg3ICAtPiAgMS4wMDAwMDAwMDAwODA5NTQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAxOSBkaXZpZGUgIDQ1NDIxODE0OTI2ODg0NjcgICA0NTQyMTgxNDkyNjk3NzM1ICAtPiAgMC45OTk5OTk5OTk5OTc5NTk2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjAgZGl2aWRlICA3MzEyNjAwMTkyMzk5MTk3ICAgNzMxMjYwMDE5MjM5NTQyNCAgLT4gIDEuMDAwMDAwMDAwMDAwNTE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjEgZGl2aWRlICAxODExNjc0OTg1NTcwMTExICAgMTgxMTY3NDk4NTYwMzkzNSAgLT4gIDAuOTk5OTk5OTk5OTgxMzMwMCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDIyIGRpdmlkZSAgMTcwNjQ2MjYzOTAwMzQ4MSAgIDE3MDY0NjI2MzkwMTc3NDAgIC0+ICAwLjk5OTk5OTk5OTk5MTY0NDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyMyBkaXZpZGUgIDY2OTcwNTI2NTQ5NDAzNjggICA2Njk3MDUyNjU0OTM0MTEwICAtPiAgMS4wMDAwMDAwMDAwMDA5MzQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyNCBkaXZpZGUgIDUwMTUyODM2NjQyNzc1MzkgICA1MDE1MjgzNjY0MzEwNzE5ICAtPiAgMC45OTk5OTk5OTk5OTMzODQyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjUgZGl2aWRlICAyMzU5NTAxNTYxNTM3NDY0ICAgMjM1OTUwMTU2MTUwMjQ2NCAgLT4gIDEuMDAwMDAwMDAwMDE0ODM0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjYgZGl2aWRlICAyNjY5ODUwMjI3OTA5MTU3ICAgMjY2OTg1MDIyNzkwMTU0OCAgLT4gIDEuMDAwMDAwMDAwMDAyODUwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMjcgZGl2aWRlICA5MzI5NzI1NTQ2OTc0NjQ4ICAgOTMyOTcyNTU0NzAwMjQ0NSAgLT4gIDAuOTk5OTk5OTk5OTk3MDIwNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDI4IGRpdmlkZSAgMzIyODU2Mjg2NzA3MTI0OCAgIDMyMjg1NjI4NjcxMDYyMDYgIC0+ICAwLjk5OTk5OTk5OTk4OTE3MjMgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAyOSBkaXZpZGUgIDQ4NjIyMjY2NDQ5MjExNzUgICA0ODYyMjI2NjQ0OTA5MzgwICAtPiAgMS4wMDAwMDAwMDAwMDI0MjYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzMCBkaXZpZGUgIDEwMjIyNjc5OTcwNTQ1MjkgICAxMDIyMjY3OTk3MDcxMzI5ICAtPiAgMC45OTk5OTk5OTk5ODM1NjYwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzEgZGl2aWRlICAxMDQ4Nzc3NDgyMDIzNzE5ICAgMTA0ODc3NzQ4MjAwMDk0OCAgLT4gIDEuMDAwMDAwMDAwMDIxNzEyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzIgZGl2aWRlICA5OTgwMTEzNzc3MzM3MDk4ICAgOTk4MDExMzc3NzMzMDUzOSAgLT4gIDEuMDAwMDAwMDAwMDAwNjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzMgZGl2aWRlICA3NTA2ODM5MTY3OTYzOTA4ICAgNzUwNjgzOTE2Nzk0MjkwMSAgLT4gIDEuMDAwMDAwMDAwMDAyNzk4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzQgZGl2aWRlICAgMjMxMTE5NzUxOTc3ODYwICAgIDIzMTExOTc1MTk2MjQ1MyAgLT4gIDEuMDAwMDAwMDAwMDY2NjYyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzUgZGl2aWRlICA0MDM0OTAzNjY0NzYyOTYyICAgNDAzNDkwMzY2NDc5NTUyNiAgLT4gIDAuOTk5OTk5OTk5OTkxOTI5NCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDM2IGRpdmlkZSAgNTcwMDEyMjE1MjI3NDY5NiAgIDU3MDAxMjIxNTIyNTEzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDA4OSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDM3IGRpdmlkZSAgNjg2OTU5OTU5MDI5MzExMCAgIDY4Njk1OTk1OTAyOTM0OTUgIC0+ICAwLjk5OTk5OTk5OTk5OTk0NDAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDAzOCBkaXZpZGUgIDU1NzYyODE5NjAwOTI3OTcgICA1NTc2MjgxOTYwMTA1NTc5ICAtPiAgMC45OTk5OTk5OTk5OTc3MDc4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwMzkgZGl2aWRlICAyMzA0ODQ0ODg4MzgxMzE4ICAgMjMwNDg0NDg4ODM1MzA3MyAgLT4gIDEuMDAwMDAwMDAwMDEyMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDAgZGl2aWRlICAzMjY1OTMzNjUxNjU2NDUyICAgMzI2NTkzMzY1MTY4Mjc3OSAgLT4gIDAuOTk5OTk5OTk5OTkxOTM4OSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQxIGRpdmlkZSAgNTIzNTcxNDk4NTA3OTkxNCAgIDUyMzU3MTQ5ODUwNjYxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMjYzMiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQyIGRpdmlkZSAgNTU3ODQ4MTU3MjgyNzU1MSAgIDU1Nzg0ODE1NzI4MjI5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDgyNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQzIGRpdmlkZSAgNDkwOTYxNjA4MTM5NjEzNCAgIDQ5MDk2MTYwODEzNzMwNzYgIC0+ICAxLjAwMDAwMDAwMDAwNDY5NiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQ0IGRpdmlkZSAgIDYzNjQ0NzIyNDM0OTUzNyAgICA2MzY0NDcyMjQzMzg3NTcgIC0+ICAxLjAwMDAwMDAwMDAxNjkzOCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQ1IGRpdmlkZSAgMTUzOTM3MzQyODM5NjY0MCAgIDE1MzkzNzM0MjgzNjQ3MjcgIC0+ICAxLjAwMDAwMDAwMDAyMDczMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQ2IGRpdmlkZSAgMjAyODc4NjcwNzM3Nzg5MyAgIDIwMjg3ODY3MDczNzg4NjYgIC0+ICAwLjk5OTk5OTk5OTk5OTUyMDQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA0NyBkaXZpZGUgICAxMzc2NDMyNjA0ODYyMjIgICAgMTM3NjQzMjYwNDg3NDE5ICAtPiAgMC45OTk5OTk5OTk5OTEzMDM2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNDggZGl2aWRlICAgMjQ3NDUxNTE5NzQ2NzY1ICAgIDI0NzQ1MTUxOTc1MjI2NyAgLT4gIDAuOTk5OTk5OTk5OTc3NzY1MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDQ5IGRpdmlkZSAgNzg3Nzg1ODQ3NTAyMjA1NCAgIDc4Nzc4NTg0NzQ5OTk3OTQgIC0+ICAxLjAwMDAwMDAwMDAwMjgyNiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDUwIGRpdmlkZSAgNzMzMzI0MjY5NDc2NjI1OCAgIDczMzMyNDI2OTQ3NDQ2MjggIC0+ICAxLjAwMDAwMDAwMDAwMjk1MCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDUxIGRpdmlkZSAgIDEyNDA1MTUwMzY5ODU5MiAgICAxMjQwNTE1MDM2OTkzOTcgIC0+ICAwLjk5OTk5OTk5OTk5MzUxMDggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1MiBkaXZpZGUgIDg5NDQ3Mzc0MzIzODUxODggICA4OTQ0NzM3NDMyNDA2ODYwICAtPiAgMC45OTk5OTk5OTk5OTc1NzcxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTMgZGl2aWRlICA5ODgzOTQ4OTIzNDA2ODc0ICAgOTg4Mzk0ODkyMzQyNDg0MyAgLT4gIDAuOTk5OTk5OTk5OTk4MTgyMCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDU0IGRpdmlkZSAgNjgyOTE3ODc0MTY1NDI4NCAgIDY4MjkxNzg3NDE2NzE5NzMgIC0+ICAwLjk5OTk5OTk5OTk5NzQwOTggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA1NSBkaXZpZGUgIDczNDI3NTI0Nzk3NjgxMjIgICA3MzQyNzUyNDc5NzkzMzg1ICAtPiAgMC45OTk5OTk5OTk5OTY1NTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTYgZGl2aWRlICA4MDY2NDI2NTc5MDA4NzgzICAgODA2NjQyNjU3ODk3NzU2MyAgLT4gIDEuMDAwMDAwMDAwMDAzODcwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTcgZGl2aWRlICA4OTkyNzc1MDcxMzgzMjk1ICAgODk5Mjc3NTA3MTM1MjcxMiAgLT4gIDEuMDAwMDAwMDAwMDAzNDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTggZGl2aWRlICA1NDg1MDExNzU1NTQ1NjQxICAgNTQ4NTAxMTc1NTU0MzYxMSAgLT4gIDEuMDAwMDAwMDAwMDAwMzcwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNTkgZGl2aWRlICA1Nzc5OTgzMDU0MzUzOTE4ICAgNTc3OTk4MzA1NDM2NTMwMCAgLT4gIDAuOTk5OTk5OTk5OTk4MDMwOCAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDYwIGRpdmlkZSAgOTUwMjI2NTEwMjcxMzc3NCAgIDk1MDIyNjUxMDI3MzUyMDggIC0+ICAwLjk5OTk5OTk5OTk5Nzc0NDMgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2MSBkaXZpZGUgIDIxMDk1NTgzOTkxMzA5ODEgICAyMTA5NTU4Mzk5MTE2MjgxICAtPiAgMS4wMDAwMDAwMDAwMDY5NjggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2MiBkaXZpZGUgIDUyOTYxODI2MzYzNTA0NzEgICA1Mjk2MTgyNjM2MzUxNTIxICAtPiAgMC45OTk5OTk5OTk5OTk4MDE3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjMgZGl2aWRlICAxNDQwMDE5MjI1NTkxODgzICAgMTQ0MDAxOTIyNTYwMTg0NCAgLT4gIDAuOTk5OTk5OTk5OTkzMDgyNyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDY0IGRpdmlkZSAgODE4MjExMDc5MTg4MTM0MSAgIDgxODIxMTA3OTE4NDcxNzQgIC0+ICAxLjAwMDAwMDAwMDAwNDE3NiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDY1IGRpdmlkZSAgIDQ4OTA5ODIzNTUxMjA2MCAgICA0ODkwOTgyMzU1MzQ1MTYgIC0+ICAwLjk5OTk5OTk5OTk1NDA4NjkgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2NiBkaXZpZGUgIDY0NzU2ODcwODQ3ODIwMzggICA2NDc1Njg3MDg0NzU2MDg5ICAtPiAgMS4wMDAwMDAwMDAwMDQwMDcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA2NyBkaXZpZGUgIDgwOTQzNDg1NTU3MzY5NDggICA4MDk0MzQ4NTU1NzU5MjM2ICAtPiAgMC45OTk5OTk5OTk5OTcyNDY1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNjggZGl2aWRlICAxOTgyNzY2ODE2MjkxNTQzICAgMTk4Mjc2NjgxNjMwOTQ2MyAgLT4gIDAuOTk5OTk5OTk5OTkwOTYyMSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDY5IGRpdmlkZSAgOTI3NzMxNDMwMDExMzI1MSAgIDkyNzczMTQzMDAwODQ0NjcgIC0+ICAxLjAwMDAwMDAwMDAwMzEwMyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDcwIGRpdmlkZSAgNDMzNTUzMjk1OTMxODkzNCAgIDQzMzU1MzI5NTkyOTMxNjcgIC0+ICAxLjAwMDAwMDAwMDAwNTk0MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDcxIGRpdmlkZSAgNzc2NzExMzAzMjk4MTM0OCAgIDc3NjcxMTMwMzI5NjgxMzIgIC0+ICAxLjAwMDAwMDAwMDAwMTcwMiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDcyIGRpdmlkZSAgMTU3ODU0ODA1MzM0Mjg2OCAgIDE1Nzg1NDgwNTMzNzA0NDggIC0+ICAwLjk5OTk5OTk5OTk4MjUyODIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA3MyBkaXZpZGUgIDM3OTA0MjA2ODY2NjY4OTggICAzNzkwNDIwNjg2NjM2MzE1ICAtPiAgMS4wMDAwMDAwMDAwMDgwNjggIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA3NCBkaXZpZGUgICA4NzE2ODI0MjE5NTUxNDcgICAgODcxNjgyNDIxOTc2NDQxICAtPiAgMC45OTk5OTk5OTk5NzU1NzE0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwNzUgZGl2aWRlICAgNzQ0MTQxMDU0NDc5OTQwICAgIDc0NDE0MTA1NDUxMjMyOSAgLT4gIDAuOTk5OTk5OTk5OTU2NDc0NiAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDc2IGRpdmlkZSAgODk1NjgyNDE4MzY3MDczNSAgIDg5NTY4MjQxODM2NDE3NDEgIC0+ICAxLjAwMDAwMDAwMDAwMzIzNyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDc3IGRpdmlkZSAgODMzNzI5MTY5NDQ4NTY4MiAgIDgzMzcyOTE2OTQ0NTExOTMgIC0+ICAxLjAwMDAwMDAwMDAwNDEzNyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDc4IGRpdmlkZSAgNDEwNzc3NTk0NDY4MzY2OSAgIDQxMDc3NzU5NDQ2NTcwOTcgIC0+ICAxLjAwMDAwMDAwMDAwNjQ2OSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDc5IGRpdmlkZSAgODY5MTkwMDA1Nzk2NDY0OCAgIDg2OTE5MDAwNTc5OTc1NTUgIC0+ICAwLjk5OTk5OTk5OTk5NjIxNDEgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4MCBkaXZpZGUgIDIyMjk1Mjg1MjA1MzY0NjIgICAyMjI5NTI4NTIwNTAyMzM3ICAtPiAgMS4wMDAwMDAwMDAwMTUzMDYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4MSBkaXZpZGUgICAzOTg0NDIwODM3NzQzMjIgICAgMzk4NDQyMDgzNzQ2MjczICAtPiAgMS4wMDAwMDAwMDAwNzAzOTcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4MiBkaXZpZGUgIDUzMTk4MTk3NzY4MDg3NTkgICA1MzE5ODE5Nzc2ODM4MzEzICAtPiAgMC45OTk5OTk5OTk5OTQ0NDQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODMgZGl2aWRlICA3NzEwNDkxMjk5MDY2ODU1ICAgNzcxMDQ5MTI5OTA0MTg1OCAgLT4gIDEuMDAwMDAwMDAwMDAzMjQyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODQgZGl2aWRlICA5MDgzMjMxMjk2MDg3MjY2ICAgOTA4MzIzMTI5NjA1ODE2MCAgLT4gIDEuMDAwMDAwMDAwMDAzMjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODUgZGl2aWRlICAzNTY2ODczNTc0OTA0NTU5ICAgMzU2Njg3MzU3NDg5MDMyOCAgLT4gIDEuMDAwMDAwMDAwMDAzOTkwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwODYgZGl2aWRlICAgNTk2MzQzMjkwNTUwNTI1ICAgIDU5NjM0MzI5MDU1NTYxNCAgLT4gIDAuOTk5OTk5OTk5OTkxNDY2MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDg3IGRpdmlkZSAgIDI3ODIyNzkyNTA5MzE5MiAgICAyNzgyMjc5MjUwNjgxMDQgIC0+ICAxLjAwMDAwMDAwMDA5MDE3MSAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDg4IGRpdmlkZSAgMzI5MjkwMjk1ODQ5MDY0OSAgIDMyOTI5MDI5NTg1MTk4ODEgIC0+ICAwLjk5OTk5OTk5OTk5MTEyMjcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA4OSBkaXZpZGUgIDU1MjE4NzEzNjQyNDU4ODEgICA1NTIxODcxMzY0MjI5NTM2ICAtPiAgMS4wMDAwMDAwMDAwMDI5NjAgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5MCBkaXZpZGUgIDI0MDY1MDU2MDI4ODM2MTcgICAyNDA2NTA1NjAyODU3OTk3ICAtPiAgMS4wMDAwMDAwMDAwMTA2NDYgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5MSBkaXZpZGUgIDc3NDExNDY5ODQ4NjkyMDggICA3NzQxMTQ2OTg0ODY3MjU1ICAtPiAgMS4wMDAwMDAwMDAwMDAyNTIgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5MiBkaXZpZGUgIDQ1NzYwNDE4MzI0MTQ5MDkgICA0NTc2MDQxODMyNDA1MTAyICAtPiAgMS4wMDAwMDAwMDAwMDIxNDMgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5MyBkaXZpZGUgIDkxODM3NTY5ODI4NzgwNTcgICA5MTgzNzU2OTgyOTAxOTM0ICAtPiAgMC45OTk5OTk5OTk5OTc0MDAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGRpdjQwOTQgZGl2aWRlICA2MjE1NzM2NTEzODU1MTU5ICAgNjIxNTczNjUxMzg3MDM0MiAgLT4gIDAuOTk5OTk5OTk5OTk3NTU3MyAgSW5leGFjdCBSb3VuZGVkDQotZGRkaXY0MDk1IGRpdmlkZSAgIDI0ODU1NDk2ODUzNDUzMyAgICAyNDg1NTQ5Njg1NTE0MTcgIC0+ICAwLjk5OTk5OTk5OTkzMjA3MTQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5NiBkaXZpZGUgICAzNzYzMTQxNjU2Njg2NDUgICAgMzc2MzE0MTY1NjU5NzU1ICAtPiAgMS4wMDAwMDAwMDAwMjM2MjQgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5NyBkaXZpZGUgIDU1MTM1NjkyNDk4MDk3MTggICA1NTEzNTY5MjQ5ODA4OTA2ICAtPiAgMS4wMDAwMDAwMDAwMDAxNDcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5OCBkaXZpZGUgIDMzNjc5OTIyNDIxNjc5MDQgICAzMzY3OTkyMjQyMTU2MjI4ICAtPiAgMS4wMDAwMDAwMDAwMDM0NjcgIEluZXhhY3QgUm91bmRlZA0KLWRkZGl2NDA5OSBkaXZpZGUgIDYxMzQ4Njk1Mzg5NjY5NjcgICA2MTM0ODY5NTM4OTg1OTg2ICAtPiAgMC45OTk5OTk5OTk5OTY4OTk5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRkaXY5OTk4IGRpdmlkZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGRpdjk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGREaXZpZGUuZGVjVGVzdCAtLSBkZWNEb3VibGUgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxCitkZGRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKK2RkZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41CitkZGRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDEKK2RkZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAorZGRkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCitkZGRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCisKK2RkZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40CitkZGRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQKK2RkZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAorZGRkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKK2RkZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MAorZGRkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAorZGRkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKK2RkZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDAKK2RkZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQorZGRkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCisKK2RkZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxCitkZGRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41CitkZGRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41CitkZGRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41CitkZGRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41CitkZGRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41CitkZGRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41CitkZGRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41CitkZGRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKK2RkZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQorZGRkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCitkZGRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCitkZGRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMAorZGRkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCisKK2RkZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKK2RkZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1CitkZGRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKK2RkZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKK2RkZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1CitkZGRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKK2RkZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41CitkZGRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUKK2RkZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKK2RkZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1CitkZGRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUKK2RkZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RkZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41CitkZGRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUKK2RkZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKK2RkZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1CitkZGRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUKK2RkZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RkZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKK2RkZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1CitkZGRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKK2RkZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKK2RkZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1CitkZGRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKKworLS0gYmNkVGltZQorZGRkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAorZGRkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3IEluZXhhY3QgUm91bmRlZAorCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OQorZGRkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgIDEgIC0+ICA5OTk5OTk5OTk5OTk5OTkKK2RkZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAxICAtPiAgOTk5OTk5OTk5OTk5OTkKK2RkZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAxICAtPiAgOTk5OTk5OTk5OTk5OQorZGRkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTk5OTkKK2RkZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAxICAtPiAgOTk5OTk5OTk5OTkKK2RkZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAxICAtPiAgOTk5OTk5OTk5OQorZGRkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAxICAtPiAgOTk5OTk5OTkKK2RkZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAxICAtPiAgOTk5OTk5OQorZGRkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgIDEgIC0+ICA5OTk5OTkKK2RkZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAxICAtPiAgOTk5OTkKK2RkZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAxICAtPiAgOTk5OQorZGRkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgIDEgIC0+ICA5OTkKK2RkZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAxICAtPiAgOTkKK2RkZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAxICAtPiAgOQorCitkZGRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZGRkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMAorZGRkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKK2RkZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3CitkZGRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQKKworZGRkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKK2RkZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5CitkZGRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTAKK2RkZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQorZGRkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCisKK2RkZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RkZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQorZGRkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQorZGRkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCitkZGRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQorZGRkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCitkZGRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkZGRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyCitkZGRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzCitkZGRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0CitkZGRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1CitkZGRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2CitkZGRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3CitkZGRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4CitkZGRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5CitkZGRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAorCitkZGRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQKK2RkZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKKworZGRkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5LjQ5Mzg5ODc3OTc1NiAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3My45NDc4OTU3OTE1ODMgICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkuMzg3NzU1MTAyMDQxICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkZGRpdjEzNCBkaXZpZGUgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAuNTg4MjM1Mjk0MTE4ICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzUgZGl2aWRlICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0LjA3MTg1NjI4NzQyNSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTM2IGRpdmlkZSAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OC41MDYyOTg3NDAyNTIgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3QgcG9zc2libHkgaW1wcmVjaXNlIHJlc3VsdHMKK2RkZGl2MjIwIGRpdmlkZSAzOTEgICA1OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMjIgZGl2aWRlIC0zOTEgIDU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjIzIGRpdmlkZSAtMzkxIC01OTcgLT4gIDAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdywgc29tZSB3aXRoIGNvZWZmaWNpZW50IHBhZGRpbmcKK2RkZGl2MjcwIGRpdmlkZSAxIDFlMzg0ICAgICAgICAgICAgICAgICAgLT4gMUUtMzg0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RkZGl2MjcxIGRpdmlkZSAxIDAuOWUzODQgICAgICAgICAgICAgICAgLT4gMS4xMTExMTExMTExMTExMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRkaXYyNzIgZGl2aWRlIDEgMC45OWUzODQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGRpdjI3MyBkaXZpZGUgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZGl2Mjc0IGRpdmlkZSA5ZTM4NCAgICAxICAgICAgICAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3NSBkaXZpZGUgOS45ZTM4NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyNzYgZGl2aWRlIDkuOTllMzg0IDEgICAgICAgICAgICAgICAtPiA5Ljk5MDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEgICAgLT4gOS45OTk5OTk5OTk5OTk5MDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3OCBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OWUzODQgMSAgIC0+IDkuOTk5OTk5OTk5OTk5OTkwRSszODQgQ2xhbXBlZAorZGRkaXYyNzkgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKK2RkZGl2Mjg1IGRpdmlkZSA5LjllMzg0ICAxLjEgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyODYgZGl2aWRlIDkuOTllMzg0IDEuMSAgICAgICAgICAgICAgLT4gOS4wODE4MTgxODE4MTgxODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2Mjg3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTllMzg0IDEuMSAgIC0+IDkuMDkwOTA5MDkwOTA5MDAwRSszODQgQ2xhbXBlZAorZGRkaXYyODggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEuMSAgLT4gOS4wOTA5MDkwOTA5MDkwODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2Mjg5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMS4xIC0+IDkuMDkwOTA5MDkwOTA5MDkwRSszODQgQ2xhbXBlZAorCisKKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMKK2RkZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKK2RkZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKK2RkZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzEKK2RkZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAorZGRkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAorZGRkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKK2RkZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKK2RkZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzEKK2RkZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKK2RkZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAorZGRkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMAorZGRkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKK2RkZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUKK2RkZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKK2RkZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKK2RkZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMAorZGRkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAorZGRkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKK2RkZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcKK2RkZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3CisKK2RkZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKK2RkZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDAKK2RkZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAorZGRkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAorZGRkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNAorZGRkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAorZGRkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAorZGRkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDAKK2RkZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKK2RkZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKK2RkZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDAKK2RkZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAorZGRkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAorZGRkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNAorZGRkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgorZGRkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAorCistLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycKK2RkZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkZGRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkZGRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NEUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkZGRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkZGRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZGRkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDFFLTExIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZGRkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDBFLTEwIEluZXhhY3QgUm91bmRlZAorCistLSBoaWdoLWxvd3MKK2RkZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzEKK2RkZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKK2RkZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKK2RkZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzEKK2RkZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKK2RkZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKKworLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKK2RkZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQorZGRkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41CitkZGRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCitkZGRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMAorZGRkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41CitkZGRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKK2RkZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQorZGRkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAorZGRkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUKK2RkZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQorZGRkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUKK2RkZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQorZGRkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41CitkZGRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUKKworLS0gc29tZSByZWNpcHJvY2FscworZGRkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKK2RkZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0CitkZGRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMworZGRkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKKworLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKK2RkZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzIKK2RkZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKK2RkZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKK2RkZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMKK2RkZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKK2RkZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKKworZGRkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMgorZGRkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQorZGRkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgorZGRkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQorZGRkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgorZGRkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkZGl2NDk3ICBkaXZpZGUgIDBFKzM4MCAxMDAwRS0xMyAgLT4gMEUrMzY5IENsYW1wZWQKK2RkZGl2NDk4ICBkaXZpZGUgIDBFLTM5MCAxMDAwRSsxMyAgLT4gMEUtMzk4IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworLS0gZm9jdXMgb24gdHJhaWxpbmcgemVyb3MgaXNzdWVzCitkZGRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjUwMSBkaXZpZGUgIDEgICAgICA5LjA5ICAgLT4gIDAuMTEwMDExMDAxMTAwMTEwMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjUwMiBkaXZpZGUgIDEgICAgICA5LjAwOSAgLT4gIDAuMTExMDAwMTExMDAwMTExMCAgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2NTExIGRpdmlkZSAxICAgICAgICAgMiAgICAtPiAwLjUKK2RkZGl2NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUKK2RkZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwCitkZGRpdjUxNCBkaXZpZGUgMS4wMDAgICAgIDIgICAgLT4gMC41MDAKK2RkZGl2NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDAKK2RkZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwCitkZGRpdjUxNyBkaXZpZGUgMS4wMDAwMDAgIDIgICAgLT4gMC41MDAwMDAKK2RkZGl2NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDAKK2RkZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUKKworZGRkaXY1MjEgZGl2aWRlIDIgICAgMSAgICAgICAgIC0+IDIKK2RkZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyCitkZGRpdjUyMyBkaXZpZGUgMiAgICAxLjAwICAgICAgLT4gMgorZGRkaXY1MjQgZGl2aWRlIDIgICAgMS4wMDAgICAgIC0+IDIKK2RkZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyCitkZGRpdjUyNiBkaXZpZGUgMiAgICAxLjAwMDAwICAgLT4gMgorZGRkaXY1MjcgZGl2aWRlIDIgICAgMS4wMDAwMDAgIC0+IDIKK2RkZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyCitkZGRpdjUyOSBkaXZpZGUgMi4wMCAxLjAwICAgICAgLT4gMgorCitkZGRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjAKK2RkZGl2NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MAorZGRkaXY1MzIgZGl2aWRlICAyLjQwICAxMCAgICAgIC0+ICAwLjI0CitkZGRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMgorZGRkaXY1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYKK2RkZGl2NTM1IGRpdmlkZSAgMi40MCAgMTAuMCAgICAtPiAgMC4yNAorZGRkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjIKK2RkZGl2NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42CitkZGRpdjUzOCBkaXZpZGUgIDIuNDAgIDEwLjAwICAgLT4gIDAuMjQKK2RkZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQorZGRkaXY1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxCitkZGRpdjU0MSBkaXZpZGUgIDAuOSAgICAwLjAwMSAgLT4gIDlFKzIKK2RkZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41CitkZGRpdjU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQorZGRkaXY1NDQgZGl2aWRlICA1ICAgICAgMi4wMCAgIC0+ICAyLjUKK2RkZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQorZGRkaXY1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1CitkZGRpdjU0NyBkaXZpZGUgIDIuNDAwICAyICAgICAgLT4gIDEuMjAwCitkZGRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjAKK2RkZGl2NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQorCitkZGRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MAorZGRkaXY1NTEgZGl2aWRlICAyNDAgICAgMTAgICAgIC0+ICAyNAorZGRkaXY1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQKK2RkZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNAorZGRkaXY1NTQgZGl2aWRlICAyNDAwICAgMSAgICAgIC0+ICAyNDAwCitkZGRpdjU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MAorZGRkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNAorZGRkaXY1NTcgZGl2aWRlICAyNDAwICAgMTAwMCAgIC0+ICAyLjQKKworLS0gK3ZlIGV4cG9uZW50CitkZGRpdjYwMCBkaXZpZGUgIDIuNEUrOSAgICAgMiAgLT4gIDEuMkUrOQorZGRkaXY2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5CitkZGRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5CitkZGRpdjYwMyBkaXZpZGUgIDIuNDAwMEUrOSAgMiAgLT4gIDEuMjAwMEUrOQorZGRkaXY2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkKK2RkZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQorZGRkaXY2MDYgZGl2aWRlICAyNDAwRSs2ICAgIDIgIC0+ICAxLjIwMEUrOQorZGRkaXY2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZGRkaXY3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszCitkZGRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzMzIGRpdmlkZSAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzM2IGRpdmlkZSAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkZGRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wCitkZGRpdjc0MiBkaXZpZGUgLTAgICAgLTEgICAgIC0+ICAwCitkZGRpdjc0MyBkaXZpZGUgIDAgICAgIDEgICAgIC0+ICAwCitkZGRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wCitkZGRpdjc0NSBkaXZpZGUgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0NiBkaXZpZGUgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc0OCBkaXZpZGUgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMAorZGRkaXY3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wCitkZGRpdjc1MyBkaXZpZGUgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RkZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMAorZGRkaXY3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTYgZGl2aWRlIC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxCitkZGRpdjc2MiBkaXZpZGUgLTAgICAgLTEuMCAgIC0+ICAwRSsxCitkZGRpdjc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxCitkZGRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxCitkZGRpdjc2NSBkaXZpZGUgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc2OCBkaXZpZGUgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTAKK2RkZGl2NzcyIGRpdmlkZSAtMC4wICAtMS4wICAgLT4gIDAKK2RkZGl2NzczIGRpdmlkZSAgMC4wICAgMS4wICAgLT4gIDAKK2RkZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTAKK2RkZGl2Nzc1IGRpdmlkZSAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc2IGRpdmlkZSAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2Nzc4IGRpdmlkZSAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RkZGl2NzgwIGRpdmlkZSAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZGRpdjc4MyBkaXZpZGUgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRkaXY3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZGRpdjc4NiBkaXZpZGUgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRkaXY3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY3ODkgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2NzkyIGRpdmlkZSAgMCAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2Nzk1IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODAxIGRpdmlkZSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGRpdjgwMiBkaXZpZGUgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkZGl2ODA0IGRpdmlkZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGRpdjgwNSBkaXZpZGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkZGl2ODA3IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4MDggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODA5IGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4MTAgZGl2aWRlIC0xICAgIC1JbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY4MTMgZGl2aWRlICAxICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRkaXY4MjEgZGl2aWRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkZGl2ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRkaXY4MjQgZGl2aWRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkZGl2ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRkaXY4MjcgZGl2aWRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkZGl2ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzAgZGl2aWRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzMgZGl2aWRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzYgZGl2aWRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRkaXY4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDMgZGl2aWRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDYgZGl2aWRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NDkgZGl2aWRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTIgZGl2aWRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTUgZGl2aWRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTggZGl2aWRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGRpdjg2MSBkaXZpZGUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkZGRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkZGRpdjg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkZGRpdjg2NCBkaXZpZGUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkZGRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkZGRpdjg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkZGRpdjg2NyBkaXZpZGUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RkZGl2ODcxIGRpdmlkZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc0IGRpdmlkZSAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc3IGRpdmlkZSAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRkaXY4ODEgZGl2aWRlICAtTmFOOSAgLUluZiAgIC0+ICAtTmFOOQorZGRkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOAorZGRkaXY4ODMgZGl2aWRlICAtTmFONyAgIEluZiAgIC0+ICAtTmFONworZGRkaXY4ODQgZGl2aWRlICAtTmFONiAgLU5hTjUgIC0+ICAtTmFONgorZGRkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONAorZGRkaXY4ODYgZGl2aWRlICAtMTAwMCAgLU5hTjMgIC0+ICAtTmFOMworZGRkaXY4ODcgZGl2aWRlICAgSW5mICAgLU5hTjIgIC0+ICAtTmFOMgorCitkZGRpdjg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTIgZGl2aWRlIC1zTmFOOTggLTEgICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTUgZGl2aWRlIC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTggZGl2aWRlICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlIGJ5IDAKK2RkZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY5MDIgZGl2aWRlICAgIDAuMEU1ICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjkwMyBkaXZpZGUgICAgMC4wMDAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDUgZGl2aWRlICAgIDAuMDEgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwNiBkaXZpZGUgICAgMC4xICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDggZGl2aWRlICAgIDEgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwOSBkaXZpZGUgICAxMCAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MTEgZGl2aWRlICAgMUUrMTAwICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyMyBkaXZpZGUgICAtMC4xICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyNiBkaXZpZGUgIC0xMCAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjggZGl2aWRlICAtMUUrMTAwICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzIgZGl2aWRlICAgIDAuMDEgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzUgZGl2aWRlICAgIDEgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzggZGl2aWRlICAgMUUrMTAwICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDIgZGl2aWRlICAgLTAuMDEgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0MyBkaXZpZGUgICAtMC4xICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDUgZGl2aWRlICAgLTEgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0NiBkaXZpZGUgIC0xMCAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDggZGl2aWRlICAtMUUrMTAwICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZGRkaXYxMDIxICBkaXZpZGUgMUUwICAgICAgICAgIDFFMCAtPiAxCitkZGRpdjEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQorZGRkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwMjQgIGRpdmlkZSAxMDBFLTIgICAxMDAwRS0zIC0+IDEKK2RkZGl2MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yCitkZGRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwCitkZGRpdjEwMjcgIGRpdmlkZSA1RTAgICAgICAgICAgMkUwIC0+IDIuNQorZGRkaXYxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUKK2RkZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41CitkZGRpdjEwMzAgIGRpdmlkZSA1RTAgICAgICAgICAyRS0xIC0+IDI1CitkZGRpdjEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1CitkZGRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjAKK2RkZGl2MTAzMyAgZGl2aWRlIDQ3RS0xICAgICAgICAyRTAgLT4gMi4zNQorCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZGRkaXYxMDQwICBkaXZpZGUgNSA5ICAtPiAwLjU1NTU1NTU1NTU1NTU1NTYgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGRpdjEwNDEgIGRpdmlkZSA2IDExIC0+IDAuNTQ1NDU0NTQ1NDU0NTQ1NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZGRkaXYxMDUxIGRpdmlkZSAgMWUrMjc3ICAxZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDUyIGRpdmlkZSAgMWUrMjc3IC0xZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDUzIGRpdmlkZSAtMWUrMjc3ICAxZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDU0IGRpdmlkZSAtMWUrMjc3IC0xZS0zMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDU1IGRpdmlkZSAgMWUtMjc3ICAxZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNTYgZGl2aWRlICAxZS0yNzcgLTFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA1NyBkaXZpZGUgLTFlLTI3NyAgMWUrMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDU4IGRpdmlkZSAtMWUtMjc3IC0xZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRkaXYxMDYwIGRpdmlkZSAxZS0yOTEgMWUrMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwKK2RkZGl2MTA2MSBkaXZpZGUgMWUtMjkxIDFlKzEwMiAtPiAxRS0zOTMgU3Vibm9ybWFsCitkZGRpdjEwNjIgZGl2aWRlIDFlLTI5MSAxZSsxMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbAorZGRkaXYxMDYzIGRpdmlkZSAxZS0yOTEgMWUrMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwKK2RkZGl2MTA2NCBkaXZpZGUgMWUtMjkxIDFlKzEwNSAtPiAxRS0zOTYgU3Vibm9ybWFsCitkZGRpdjEwNjUgZGl2aWRlIDFlLTI5MSAxZSsxMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbAorZGRkaXYxMDY2IGRpdmlkZSAxZS0yOTEgMWUrMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkZGl2MTA2NyBkaXZpZGUgMWUtMjkxIDFlKzEwOCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDY4IGRpdmlkZSAxZS0yOTEgMWUrMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNjkgZGl2aWRlIDFlLTI5MSAxZSsxMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2RkZGl2MTA3MCBkaXZpZGUgMWUrNjAgMWUtMzIxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKK2RkZGl2MTA3MSBkaXZpZGUgMWUrNjAgMWUtMzIyIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZGRpdjEwNzIgZGl2aWRlIDFlKzYwIDFlLTMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKK2RkZGl2MTA3MyBkaXZpZGUgMWUrNjAgMWUtMzI0IC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkZGl2MTA3NCBkaXZpZGUgMWUrNjAgMWUtMzI1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc1IGRpdmlkZSAxZSs2MCAxZS0zMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzYgZGl2aWRlIDFlKzYwIDFlLTMyNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3NyBkaXZpZGUgMWUrNjAgMWUtMzI4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc4IGRpdmlkZSAxZSs2MCAxZS0zMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzkgZGl2aWRlIDFlKzYwIDFlLTMzMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXYxMTAxIGRpdmlkZSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRkaXYxMTAyIGRpdmlkZSAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRkaXYxMTAzIGRpdmlkZSAgMS4wMEUtMzk0ICAgIDFlKzIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAorZGRkaXYxMTA0IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRkaXYxMTA1IGRpdmlkZSAgMS4wRS0zOTQgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZGl2MTEwNiBkaXZpZGUgIDEuM0UtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMDcgZGl2aWRlICAxLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTA4IGRpdmlkZSAgMS43RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEwOSBkaXZpZGUgIDIuM0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTAgZGl2aWRlICAyLjVFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTExIGRpdmlkZSAgMi43RS0zOTQgICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExMiBkaXZpZGUgIDEuNDlFLTM5NCAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTMgZGl2aWRlICAxLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE0IGRpdmlkZSAgMS41MUUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExNSBkaXZpZGUgIDIuNDlFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTYgZGl2aWRlICAyLjUwRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE3IGRpdmlkZSAgMi41MUUtMzk0ICAgIDFlKzQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRkaXYxMTE4IGRpdmlkZSAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsCitkZGRpdjExMTkgZGl2aWRlICAzRS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjAgZGl2aWRlICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMjEgZGl2aWRlICA3RS0zOTQgICAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTIyIGRpdmlkZSAgOUUtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyMyBkaXZpZGUgIDkuOUUtMzk0ICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2MTEyNCBkaXZpZGUgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMUUtMzk4ICAgIFN1Ym5vcm1hbAorZGRkaXYxMTI1IGRpdmlkZSAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTI2IGRpdmlkZSAtNUUtMzk0ICAgICAgIDFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTI3IGRpdmlkZSAgN0UtMzk0ICAgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyOCBkaXZpZGUgLTlFLTM5NCAgICAgICAxZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMjkgZGl2aWRlICA5LjlFLTM5NCAgICAtMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTMwIGRpdmlkZSAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZGRpdjExMzEgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjExMzIgZGl2aWRlICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAorZGRkaXYxMTMzIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzQgZGl2aWRlICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKK2RkZGl2MTEzNSBkaXZpZGUgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorZGRkaXYxMTM2IGRpdmlkZSAxMC4wRS0xOTkgICAgMTBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzcgZGl2aWRlIDMwLjBFLTE5OSAgICAzMGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKKworLS0gcmFuZG9tcworZGRkaXYyMDEwICBkaXZpZGUgIC0zLjMwMzIyNjcxNDkwMDcxMUUtMzUgICA4Ljc5NjU3ODg0MjcxMzE4M0UrNzMgICAtPiAgLTMuNzU1MTI2NTk0MDU4NzgzRS0xMDkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTEgIGRpdmlkZSAgIDkzMzE1MzMyNzgyMTA3My42ICAgICAgIDY4NzgyMTgxMDkwMjQ2LjI1ICAgICAgIC0+ICAgMTMuNTY2Nzg4ODU0NzU3NjMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTIgIGRpdmlkZSAgIDUuMDQ3NTI0MzYwNTc5MDZFLTcyICAgLTguMTc5NDgxNzcxMjM4NjQyRSs2NCAgIC0+ICAtNi4xNzA5NTg2Mjc2MzI4MzVFLTEzNyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxMyAgZGl2aWRlICAtMzcwNzYxMzMwOTU4MjMxOCAgICAgICAgMzM5NDkxMTE5NjUwMy4wNDggICAgICAgLT4gIC0xMDkyLjEwOTA3MDAxMDgzNiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNCAgZGl2aWRlICAgOTk2ODkuMDU1NTE5MDQ2MSAgICAgICAtNC43MzUyMDg1NTM4OTE0NjQgICAgICAgLT4gIC0yMTA1Mi43Mjc1Mzc2NTQxMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNSAgZGl2aWRlICAtMTQ0NzkxNTc3NTYxMzMyOSAgICAgICAgMjY5NzUwNzk3LjgxODQ4NzUgICAgICAgLT4gIC01MzY3NjA1LjE2NDkyNTY1MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxNiAgZGl2aWRlICAtOS4zOTQ4ODEzMDQyMjUyNThFLTE5ICAtODMwNTg1LjAyNTI2NzE2MzYgICAgICAgLT4gICAxLjEzMTExNjE0MzI1MTM1OEUtMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTcgIGRpdmlkZSAgLTEuMDU2MjgzNDMyNzM4OTM0ICAgICAgIDg4LjU4NzU0NTU1MTI0MDEzICAgICAgIC0+ICAtMC4wMTE5MjM2MTEwMDE1OTM1MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxOCAgZGl2aWRlICAgNTc2MzIyMDkzMzM0My4wODEgICAgICAgNjg5MDg5NTY3MDI1MDUyLjEgICAgICAgLT4gICAwLjAwODM2MzUyOTUxNjUyNDQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAxOSAgZGl2aWRlICAgODczODE5LjEyMjEwMzIxNiAgICAgICAgOS43NDA2MTI0OTQ1MjMzMDBFLTQ5ICAgLT4gICA4Ljk3MDg4NDc2MzA5Mzk0OEUrNTMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjAgIGRpdmlkZSAgIDgwMjI5MTQuODM4NTMzNTc2ICAgICAgIDYxNzguNTY2ODAxNzQyNzEzICAgICAgIC0+ICAgMTI5OC41MDc0MjAyNDM1ODMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjEgIGRpdmlkZSAgIDIwMzk4Mi43NjA1NjUwMzYzICAgICAgLTIxNTguMjgzNjM5MDUzNDM1ICAgICAgIC0+ICAtOTQuNTExNTYzMjA0MjIxNjggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjIgIGRpdmlkZSAgIDgwMy42MzEwNTQ3MDEzMDMwICAgICAgIDcxMDExNDM3OTUzOTkuMjM4ICAgICAgIC0+ICAgMS4xMzE2OTI0MTE2MTExNjZFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDIzICBkaXZpZGUgICA5LjI1MTY5Nzg0MjEyMzM5OUUtODIgIC0xLjM0MjM1MDIyMDYwNjExOUUtNyAgICAtPiAgLTYuODkyMTYzOTgyMzIxOTM2RS03NSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNCAgZGl2aWRlICAtMS45ODA2MDA2NDU2Mzc5OTJFLTUzICAtNS40NzQyNjI3NTMyMTQ0NTdFKzc3ICAgLT4gICAzLjYxODAyMjYxNzcwMzE2OEUtMTMxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI1ICBkaXZpZGUgIC0yMTAuMDMyMjk5NjM1MTY5MCAgICAgIC04LjU4MDk1MTgzNTg3Mjg0M0UrODAgICAtPiAgIDIuNDQ3NjU3MzY1NDM0OTcxRS03OSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNiAgZGl2aWRlICAtMS44MjE5ODAzMTQwMjAzNzBFKzg1ICAtMy4wMTg5MTUyNjcxMzgxNjUgICAgICAgLT4gICA2LjAzNTIxNTE0NDUwMzA0MkUrODQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjcgIGRpdmlkZSAgLTc3MjI2NDUwMzYwMS4xMDQ3ICAgICAgIDUuMTU4MjU4MjcxNDA4OTg4RS04NiAgIC0+ICAtMS40OTcxNDE5ODY2MzA2MTRFKzk3IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI4ICBkaXZpZGUgIC03NjcuMDUzMjQxNTg0NzEwNiAgICAgICAyLjcwMDAyNzIyODAyODkzOUUtNTkgICAtPiAgLTIuODQwOTA5MjgyNzcyOTQxRSs2MSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyOSAgZGl2aWRlICAgNDk2NzI0Ljg1NDgyNTAwOTMgICAgICAgNy4zMjcwMDU4ODE2MzEwMEUrNjYgICAgLT4gICA2Ljc3OTM3MDIyMDkyOTAxM0UtNjIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzAgIGRpdmlkZSAgLTMwNDIzMjY1MTQ0NzcwMy45ICAgICAgLTEwOC45NzMwODA4NjU3NDQwICAgICAgIC0+ICAgMjc5MTgxNDcyMTg2Mi41NjUgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzEgIGRpdmlkZSAgLTcuMjMzODE3MTkyNjk5NDA1RSs0MiAgLTU3MTEzMDIwMDQuMTQ5NDExICAgICAgIC0+ICAgMS4yNjY1NzkzNTIyMTE0MzBFKzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDMyICBkaXZpZGUgIC05Ljk5OTIyMTQ0NDkxMjc0NUUrOTYgICA0MDEwNTY5NDA2NDQ2MTk3ICAgICAgICAtPiAgLTIuNDkzMjE3NDA0MjAyMjUwRSs4MSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzMyAgZGl2aWRlICAtMTgzNzI3Mi4wNjE5Mzc2MjIgICAgICAgOC4zNTYzMjI4MzgwNjY3NjIgICAgICAgLT4gIC0yMTk4NjYuMDkzOTE5Njg4MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNCAgZGl2aWRlICAgMjE2OC41MTc1NTU2MDY1MjkgICAgICAgMjA5LjE5MTAyNTg2MTUwNjEgICAgICAgLT4gICAxMC4zNjYyMDczNzc1Njc4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNSAgZGl2aWRlICAtMS44ODQzODk3OTA1NzYzNzFFKzg4ICAgMi45NTE4MTk1Mzg3MDU4M0UrMjAgICAgLT4gIC02LjM4MzgyNDUwNTA3OTgyOEUrNjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzYgIGRpdmlkZSAgIDczMjI2My42MDM3NDM4MTk2ICAgICAgIDk2MTIyMi4zNjM0NDQ2ODg5ICAgICAgIC0+ICAgMC43NjE4MDQ1ODUwNjk4MjY5IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM3ICBkaXZpZGUgIC04MTM0NjE0MTkuMDM0ODMzNiAgICAgICA1LjM3NjI5Mzc1MzgwOTE0M0UrODQgICAtPiAgLTEuNTEzMDUyNDA0Mjg1OTI3RS03NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzOCAgZGl2aWRlICAtNDU1NjIxMzM1MDgxMDguNTAgICAgICAtOS43NzY4NDM0OTQ2OTAxMDdFKzUxICAgLT4gICA0LjY2MDIwODk0NTAyOTUxOUUtMzkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzkgIGRpdmlkZSAgLTYuNDg5MzkzMTcyNDQxMDE2RSs4MCAgLTkxMDE5NjUuMDk3ODUyMTEzICAgICAgIC0+ICAgNy4xMjk2NjE2NzQ4OTc0MjFFKzczIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQwICBkaXZpZGUgICAzLjY5NDU3NjIzNzExNzM0OUUrOTMgICA2NjgzNTEyLjAxMjYyMjAwMyAgICAgICAtPiAgIDUuNTI3ODk2NDU2NDQzOTEyRSs4NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MSAgZGl2aWRlICAtMi4yNTI4Nzc3MjY0MDMyNzJFKzE5ICAtNzQ1MTkxMzI1Ni4xODEzNjcgICAgICAgLT4gICAzMDIzMjIwNTQ2LjEyNTUzMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MiAgZGl2aWRlICAgNTE4MzAzLjE5ODkxMTE4NDIgICAgICAgNTAuMDE1ODcwMjA0NzQxMzMgICAgICAgLT4gICAxMDM2Mi43NzQ3OTEwNzEyMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MyAgZGl2aWRlICAgMi45MDIwODc4ODE4ODAxMDNFKzI0ICAgMzMuMzI0MDA5OTIzMDU3MDIgICAgICAgLT4gICA4LjcwODY5OTQ4ODk4OTU3OEUrMjIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDQgIGRpdmlkZSAgIDU0OTYxOS40NTU5NTEwNTU3ICAgICAgIDE2NjA4MjQ4NDUxOTYzMzggICAgICAgIC0+ICAgMy4zMDkzMTYxOTYzNTExMDRFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ1ICBkaXZpZGUgIC02Nzc1NjcwNzc0Njg0MDQzICAgICAgICA4MjkyMTUyMDIzLjA3NzI2MiAgICAgICAtPiAgLTgxNzExOC40OTQxODkxMDYyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ2ICBkaXZpZGUgIC03Ny41MDkyMzkyMTUyNDA3OSAgICAgIC01LjYzNjg4MjY1NTQyNTgxNUUrNzQgICAtPiAgIDEuMzc1MDM3MzAyNTg4NDA1RS03MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0NyAgZGl2aWRlICAtMi45ODQ4ODk0NTk2MDUxNDlFLTEwICAtODgxMDYxNTY3ODQxMjIuOTkgICAgICAgLT4gICAzLjM4NzgzMzAwNTcyMTM4NEUtMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDggIGRpdmlkZSAgIDAuOTQ5NTE3MjkzOTk3MDg1ICAgICAgIDQ0NzY3MTE1Ljk2NDUwOTk4ICAgICAgIC0+ICAgMi4xMjEwMTUxMTAxNzU1ODlFLTggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDkgIGRpdmlkZSAgLTI3NjA5MzcyMTEuMDg0NTIxICAgICAgLTEwODcwMTU4NzY5NzU0MDggICAgICAgIC0+ICAgMC4wMDAwMDI1Mzk5MjM1MzcwNTcwMjQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTAgIGRpdmlkZSAgIDI4NDM4MzUxLjg1MDMwNTM2ICAgICAgLTQuMjA5Mzk3OTA0MDg4NjI0RS00NyAgIC0+ICAtNi43NTU5MTkxMzU3NzA2ODhFKzUzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDUxICBkaXZpZGUgIC04NTU2MjczMS42ODIwOTU2ICAgICAgIC03LjE2NjA0NTQ0MjUzMDE4NUUrNDUgICAtPiAgIDEuMTk0MDAyMDgwNjIxNTQyRS0zOCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MiAgZGl2aWRlICAgMjUzMzgwMjg1MjE2NS4yNSAgICAgICAgNzE1NC4xMTk2MDYyMzU5NTUgICAgICAgLT4gICAzNTQxNzM5NTcuMzMxNzUwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MyAgZGl2aWRlICAtODg1ODgzMTM0Njg1MS40NzQgICAgICAgOTcuNTk3MzQyMDg4MDE3MTYgICAgICAgLT4gIC05MDc2OTE4NjUwOS44MzU3NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NCAgZGl2aWRlICAgMTc2NzgzNjI5ODAxMzg3LjUgICAgICAgODQwMDczMjYzLjMxMDk4MTcgICAgICAgLT4gICAyMTA0MzguMzQ4MDg0ODIwNiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NSAgZGl2aWRlICAtNDkzNTA2NDcxNzk2MTc1LjYgICAgICAgNzk3MzM4OTQ3OTA4MjIuMDMgICAgICAgLT4gIC02LjE4OTQxODg1NDk0MDc0NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1NiAgZGl2aWRlICAgNzkwLjE2ODI1NDIxMDM0NDUgICAgICAgODI5Ljk0NDkzNzAzNjc0MzUgICAgICAgLT4gICAwLjk1MjA3MzEwNjIzNzEyMTQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTcgIGRpdmlkZSAgLTg5MjA0NTk4MzguNTgzMTY0ICAgICAgLTQ3NjcuODg5MTg3ODk5MjE0ICAgICAgIC0+ICAgMTg3MDk0NS4yOTQwMzU1ODEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTggIGRpdmlkZSAgIDUzNTM2Njg3MTY0NDIyLjEgICAgICAgIDUzMTM3LjUwMDcwMzI2ODkgICAgICAgIC0+ICAgMTAwNzUxMjMzMC4zODU2OTggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTkgIGRpdmlkZSAgIDQuMDUxNTMyMzExMTQ2NTYxRS03NCAgLTIuMzQzMDg5NzY4OTcyMjYxRSs5NCAgIC0+ICAtMS43MjkxNDA4ODI2MDYzMzJFLTE2OCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA2MCAgZGl2aWRlICAtMTQ4NDc3NTg3Nzg2MzYuODggICAgICAgMy4wNjI1NDM1MTYzODM4MDdFLTQzICAgLT4gIC00Ljg0ODE3ODg3NDU4NzQ5N0UrNTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIERpdmlzaW9uIHByb2JhYmx5IGhhcyBwcmUtcm91bmRpbmcsIHNvIG5lZWQgdG8gdGVzdCByb3VuZGluZworLS0gZXhwbGljaXRseSByYXRoZXIgdGhhbiBhc3N1bWUgaW5jbHVkZWQgdGhyb3VnaCBvdGhlciB0ZXN0czsKKy0tIHRlc3RzIGluY2x1ZGUgc2ltcGxlIHJvdW5kaW5nIGFuZCBhbHNvIHRoZSB0cmlja3kgY2FzZXMgb2Ygc3RpY2t5CistLSBiaXRzIGZvbGxvd2luZyB0d28gemVyb3MKKy0tCistLSAgIDEvOTk5OTkgZ2l2ZXMgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxCistLSAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorLS0KKy0tICAgMS85OTk5OTkgZ2l2ZXMgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEKKy0tICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKKworcm91bmRpbmc6IGNlaWxpbmcKK2RkZGl2MzAwMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMDIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDAzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDA0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RkZGl2MzAxMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDEzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDE0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RkZGl2MzAyMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDIzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDI0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRkaXYzMDMxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAzMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGRpdjMwNDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDQyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA0MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA0NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZGRkaXYzMDUxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA1MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNTMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNTQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkZGl2MzA2MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDYzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDY0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZGRkaXYzMDcxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA3MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNzMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNzQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJhbmRvbSBkaXZpZGUgdGVzdHMgd2l0aCByZXN1bHQgbmVhciAxCityb3VuZGluZzogaGFsZl9ldmVuCitkZGRpdjQwMDEgZGl2aWRlICAzMTk1Mzg1MTkyOTE2OTE3ICAgMzE5NTM4NTE5Mjk0NjY5NSAgLT4gIDAuOTk5OTk5OTk5OTkwNjgwOSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDIgZGl2aWRlICAxMzkzNzIzMDY3NTI2OTkzICAgMTM5MzcyMzA2NzUxOTQ3NSAgLT4gIDEuMDAwMDAwMDAwMDA1Mzk0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwMyBkaXZpZGUgICA3NTk5ODU1NDM3MDIzMDIgICAgNzU5OTg1NTQzNjc0MDE1ICAtPiAgMS4wMDAwMDAwMDAwMzcyMjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA0IGRpdmlkZSAgOTU3OTE1ODQ1NjAyNzMwMiAgIDk1NzkxNTg0NTYwMzY4NjQgIC0+ICAwLjk5OTk5OTk5OTk5OTAwMTggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA1IGRpdmlkZSAgNzA3OTM5ODI5OTE0MzU2OSAgIDcwNzkzOTgyOTkxNTY5MDQgIC0+ICAwLjk5OTk5OTk5OTk5ODExNjQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA2IGRpdmlkZSAgNjYzNjE2OTI1NTM2NjU5OCAgIDY2MzYxNjkyNTUzMzYzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDU1MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDcgZGl2aWRlICA2OTY0ODEzOTcxMzQwMDkwICAgNjk2NDgxMzk3MTMyMTU1NCAgLT4gIDEuMDAwMDAwMDAwMDAyNjYxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwOCBkaXZpZGUgIDQxODIyNzUyMjU0ODA3ODQgICA0MTgyMjc1MjI1NDU0MDA5ICAtPiAgMS4wMDAwMDAwMDAwMDY0MDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA5IGRpdmlkZSAgOTIyODMyNTEyNDkzODAyOSAgIDkyMjgzMjUxMjQ5MTg3MzAgIC0+ICAxLjAwMDAwMDAwMDAwMjA5MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTAgZGl2aWRlICAzNDI4MzQ2MzM4NjMwMTkyICAgMzQyODM0NjMzODYwOTg0MyAgLT4gIDEuMDAwMDAwMDAwMDA1OTM2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMSBkaXZpZGUgIDIxNDM1MTE1NTA3MjI4OTMgICAyMTQzNTExNTUwNzUxNzU0ICAtPiAgMC45OTk5OTk5OTk5ODY1MzU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMiBkaXZpZGUgIDE2NzI3MzI5MjQzOTY3ODUgICAxNjcyNzMyOTI0NDAxODExICAtPiAgMC45OTk5OTk5OTk5OTY5OTUzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxMyBkaXZpZGUgIDQxOTA3MTQ2MTE5NDgyMTYgICA0MTkwNzE0NjExOTQ4NjY0ICAtPiAgMC45OTk5OTk5OTk5OTk4OTMxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxNCBkaXZpZGUgIDM5NDIyNTQ4MDA4NDg4NzcgICAzOTQyMjU0ODAwODE0NTU2ICAtPiAgMS4wMDAwMDAwMDAwMDg3MDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE1IGRpdmlkZSAgMjg1NDQ1OTgyNjk1MjMzNCAgIDI4NTQ0NTk4MjY5NjA3NjIgIC0+ICAwLjk5OTk5OTk5OTk5NzA0NzQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE2IGRpdmlkZSAgMjg1MzI1ODk1MzY2NDczMSAgIDI4NTMyNTg5NTM2ODQ0NzEgIC0+ICAwLjk5OTk5OTk5OTk5MzA4MTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE3IGRpdmlkZSAgOTQ1MzUxMjYzODEyNTk3OCAgIDk0NTM1MTI2MzgxNDY0MjUgIC0+ICAwLjk5OTk5OTk5OTk5NzgzNzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE4IGRpdmlkZSAgIDMzOTQ3NjYzMzk0MDM2OSAgICAzMzk0NzY2MzM5MTI4ODcgIC0+ICAxLjAwMDAwMDAwMDA4MDk1NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTkgZGl2aWRlICA0NTQyMTgxNDkyNjg4NDY3ICAgNDU0MjE4MTQ5MjY5NzczNSAgLT4gIDAuOTk5OTk5OTk5OTk3OTU5NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjAgZGl2aWRlICA3MzEyNjAwMTkyMzk5MTk3ICAgNzMxMjYwMDE5MjM5NTQyNCAgLT4gIDEuMDAwMDAwMDAwMDAwNTE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMSBkaXZpZGUgIDE4MTE2NzQ5ODU1NzAxMTEgICAxODExNjc0OTg1NjAzOTM1ICAtPiAgMC45OTk5OTk5OTk5ODEzMzAwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMiBkaXZpZGUgIDE3MDY0NjI2MzkwMDM0ODEgICAxNzA2NDYyNjM5MDE3NzQwICAtPiAgMC45OTk5OTk5OTk5OTE2NDQxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyMyBkaXZpZGUgIDY2OTcwNTI2NTQ5NDAzNjggICA2Njk3MDUyNjU0OTM0MTEwICAtPiAgMS4wMDAwMDAwMDAwMDA5MzQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI0IGRpdmlkZSAgNTAxNTI4MzY2NDI3NzUzOSAgIDUwMTUyODM2NjQzMTA3MTkgIC0+ICAwLjk5OTk5OTk5OTk5MzM4NDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI1IGRpdmlkZSAgMjM1OTUwMTU2MTUzNzQ2NCAgIDIzNTk1MDE1NjE1MDI0NjQgIC0+ICAxLjAwMDAwMDAwMDAxNDgzNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjYgZGl2aWRlICAyNjY5ODUwMjI3OTA5MTU3ICAgMjY2OTg1MDIyNzkwMTU0OCAgLT4gIDEuMDAwMDAwMDAwMDAyODUwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyNyBkaXZpZGUgIDkzMjk3MjU1NDY5NzQ2NDggICA5MzI5NzI1NTQ3MDAyNDQ1ICAtPiAgMC45OTk5OTk5OTk5OTcwMjA2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyOCBkaXZpZGUgIDMyMjg1NjI4NjcwNzEyNDggICAzMjI4NTYyODY3MTA2MjA2ICAtPiAgMC45OTk5OTk5OTk5ODkxNzIzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyOSBkaXZpZGUgIDQ4NjIyMjY2NDQ5MjExNzUgICA0ODYyMjI2NjQ0OTA5MzgwICAtPiAgMS4wMDAwMDAwMDAwMDI0MjYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMwIGRpdmlkZSAgMTAyMjI2Nzk5NzA1NDUyOSAgIDEwMjIyNjc5OTcwNzEzMjkgIC0+ICAwLjk5OTk5OTk5OTk4MzU2NjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMxIGRpdmlkZSAgMTA0ODc3NzQ4MjAyMzcxOSAgIDEwNDg3Nzc0ODIwMDA5NDggIC0+ICAxLjAwMDAwMDAwMDAyMTcxMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzIgZGl2aWRlICA5OTgwMTEzNzc3MzM3MDk4ICAgOTk4MDExMzc3NzMzMDUzOSAgLT4gIDEuMDAwMDAwMDAwMDAwNjU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzMyBkaXZpZGUgIDc1MDY4MzkxNjc5NjM5MDggICA3NTA2ODM5MTY3OTQyOTAxICAtPiAgMS4wMDAwMDAwMDAwMDI3OTggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM0IGRpdmlkZSAgIDIzMTExOTc1MTk3Nzg2MCAgICAyMzExMTk3NTE5NjI0NTMgIC0+ICAxLjAwMDAwMDAwMDA2NjY2MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzUgZGl2aWRlICA0MDM0OTAzNjY0NzYyOTYyICAgNDAzNDkwMzY2NDc5NTUyNiAgLT4gIDAuOTk5OTk5OTk5OTkxOTI5NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzYgZGl2aWRlICA1NzAwMTIyMTUyMjc0Njk2ICAgNTcwMDEyMjE1MjI1MTM4NiAgLT4gIDEuMDAwMDAwMDAwMDA0MDg5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzNyBkaXZpZGUgIDY4Njk1OTk1OTAyOTMxMTAgICA2ODY5NTk5NTkwMjkzNDk1ICAtPiAgMC45OTk5OTk5OTk5OTk5NDQwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzOCBkaXZpZGUgIDU1NzYyODE5NjAwOTI3OTcgICA1NTc2MjgxOTYwMTA1NTc5ICAtPiAgMC45OTk5OTk5OTk5OTc3MDc4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzOSBkaXZpZGUgIDIzMDQ4NDQ4ODgzODEzMTggICAyMzA0ODQ0ODg4MzUzMDczICAtPiAgMS4wMDAwMDAwMDAwMTIyNTUgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQwIGRpdmlkZSAgMzI2NTkzMzY1MTY1NjQ1MiAgIDMyNjU5MzM2NTE2ODI3NzkgIC0+ICAwLjk5OTk5OTk5OTk5MTkzODkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQxIGRpdmlkZSAgNTIzNTcxNDk4NTA3OTkxNCAgIDUyMzU3MTQ5ODUwNjYxMzEgIC0+ICAxLjAwMDAwMDAwMDAwMjYzMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDIgZGl2aWRlICA1NTc4NDgxNTcyODI3NTUxICAgNTU3ODQ4MTU3MjgyMjk0NSAgLT4gIDEuMDAwMDAwMDAwMDAwODI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0MyBkaXZpZGUgIDQ5MDk2MTYwODEzOTYxMzQgICA0OTA5NjE2MDgxMzczMDc2ICAtPiAgMS4wMDAwMDAwMDAwMDQ2OTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ0IGRpdmlkZSAgIDYzNjQ0NzIyNDM0OTUzNyAgICA2MzY0NDcyMjQzMzg3NTcgIC0+ICAxLjAwMDAwMDAwMDAxNjkzOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDUgZGl2aWRlICAxNTM5MzczNDI4Mzk2NjQwICAgMTUzOTM3MzQyODM2NDcyNyAgLT4gIDEuMDAwMDAwMDAwMDIwNzMxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NiBkaXZpZGUgIDIwMjg3ODY3MDczNzc4OTMgICAyMDI4Nzg2NzA3Mzc4ODY2ICAtPiAgMC45OTk5OTk5OTk5OTk1MjA0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NyBkaXZpZGUgICAxMzc2NDMyNjA0ODYyMjIgICAgMTM3NjQzMjYwNDg3NDE5ICAtPiAgMC45OTk5OTk5OTk5OTEzMDM2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0OCBkaXZpZGUgICAyNDc0NTE1MTk3NDY3NjUgICAgMjQ3NDUxNTE5NzUyMjY3ICAtPiAgMC45OTk5OTk5OTk5Nzc3NjUzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0OSBkaXZpZGUgIDc4Nzc4NTg0NzUwMjIwNTQgICA3ODc3ODU4NDc0OTk5Nzk0ICAtPiAgMS4wMDAwMDAwMDAwMDI4MjYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDUwIGRpdmlkZSAgNzMzMzI0MjY5NDc2NjI1OCAgIDczMzMyNDI2OTQ3NDQ2MjggIC0+ICAxLjAwMDAwMDAwMDAwMjk1MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTEgZGl2aWRlICAgMTI0MDUxNTAzNjk4NTkyICAgIDEyNDA1MTUwMzY5OTM5NyAgLT4gIDAuOTk5OTk5OTk5OTkzNTEwOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTIgZGl2aWRlICA4OTQ0NzM3NDMyMzg1MTg4ICAgODk0NDczNzQzMjQwNjg2MCAgLT4gIDAuOTk5OTk5OTk5OTk3NTc3MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTMgZGl2aWRlICA5ODgzOTQ4OTIzNDA2ODc0ICAgOTg4Mzk0ODkyMzQyNDg0MyAgLT4gIDAuOTk5OTk5OTk5OTk4MTgyMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTQgZGl2aWRlICA2ODI5MTc4NzQxNjU0Mjg0ICAgNjgyOTE3ODc0MTY3MTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk3NDA5OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTUgZGl2aWRlICA3MzQyNzUyNDc5NzY4MTIyICAgNzM0Mjc1MjQ3OTc5MzM4NSAgLT4gIDAuOTk5OTk5OTk5OTk2NTU5NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTYgZGl2aWRlICA4MDY2NDI2NTc5MDA4NzgzICAgODA2NjQyNjU3ODk3NzU2MyAgLT4gIDEuMDAwMDAwMDAwMDAzODcwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1NyBkaXZpZGUgIDg5OTI3NzUwNzEzODMyOTUgICA4OTkyNzc1MDcxMzUyNzEyICAtPiAgMS4wMDAwMDAwMDAwMDM0MDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU4IGRpdmlkZSAgNTQ4NTAxMTc1NTU0NTY0MSAgIDU0ODUwMTE3NTU1NDM2MTEgIC0+ICAxLjAwMDAwMDAwMDAwMDM3MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTkgZGl2aWRlICA1Nzc5OTgzMDU0MzUzOTE4ICAgNTc3OTk4MzA1NDM2NTMwMCAgLT4gIDAuOTk5OTk5OTk5OTk4MDMwOCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjAgZGl2aWRlICA5NTAyMjY1MTAyNzEzNzc0ICAgOTUwMjI2NTEwMjczNTIwOCAgLT4gIDAuOTk5OTk5OTk5OTk3NzQ0MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjEgZGl2aWRlICAyMTA5NTU4Mzk5MTMwOTgxICAgMjEwOTU1ODM5OTExNjI4MSAgLT4gIDEuMDAwMDAwMDAwMDA2OTY4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MiBkaXZpZGUgIDUyOTYxODI2MzYzNTA0NzEgICA1Mjk2MTgyNjM2MzUxNTIxICAtPiAgMC45OTk5OTk5OTk5OTk4MDE3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2MyBkaXZpZGUgIDE0NDAwMTkyMjU1OTE4ODMgICAxNDQwMDE5MjI1NjAxODQ0ICAtPiAgMC45OTk5OTk5OTk5OTMwODI3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2NCBkaXZpZGUgIDgxODIxMTA3OTE4ODEzNDEgICA4MTgyMTEwNzkxODQ3MTc0ICAtPiAgMS4wMDAwMDAwMDAwMDQxNzYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY1IGRpdmlkZSAgIDQ4OTA5ODIzNTUxMjA2MCAgICA0ODkwOTgyMzU1MzQ1MTYgIC0+ICAwLjk5OTk5OTk5OTk1NDA4NjkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY2IGRpdmlkZSAgNjQ3NTY4NzA4NDc4MjAzOCAgIDY0NzU2ODcwODQ3NTYwODkgIC0+ICAxLjAwMDAwMDAwMDAwNDAwNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjcgZGl2aWRlICA4MDk0MzQ4NTU1NzM2OTQ4ICAgODA5NDM0ODU1NTc1OTIzNiAgLT4gIDAuOTk5OTk5OTk5OTk3MjQ2NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjggZGl2aWRlICAxOTgyNzY2ODE2MjkxNTQzICAgMTk4Mjc2NjgxNjMwOTQ2MyAgLT4gIDAuOTk5OTk5OTk5OTkwOTYyMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjkgZGl2aWRlICA5Mjc3MzE0MzAwMTEzMjUxICAgOTI3NzMxNDMwMDA4NDQ2NyAgLT4gIDEuMDAwMDAwMDAwMDAzMTAzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3MCBkaXZpZGUgIDQzMzU1MzI5NTkzMTg5MzQgICA0MzM1NTMyOTU5MjkzMTY3ICAtPiAgMS4wMDAwMDAwMDAwMDU5NDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDcxIGRpdmlkZSAgNzc2NzExMzAzMjk4MTM0OCAgIDc3NjcxMTMwMzI5NjgxMzIgIC0+ICAxLjAwMDAwMDAwMDAwMTcwMiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzIgZGl2aWRlICAxNTc4NTQ4MDUzMzQyODY4ICAgMTU3ODU0ODA1MzM3MDQ0OCAgLT4gIDAuOTk5OTk5OTk5OTgyNTI4MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzMgZGl2aWRlICAzNzkwNDIwNjg2NjY2ODk4ICAgMzc5MDQyMDY4NjYzNjMxNSAgLT4gIDEuMDAwMDAwMDAwMDA4MDY4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NCBkaXZpZGUgICA4NzE2ODI0MjE5NTUxNDcgICAgODcxNjgyNDIxOTc2NDQxICAtPiAgMC45OTk5OTk5OTk5NzU1NzE0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NSBkaXZpZGUgICA3NDQxNDEwNTQ0Nzk5NDAgICAgNzQ0MTQxMDU0NTEyMzI5ICAtPiAgMC45OTk5OTk5OTk5NTY0NzQ2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NiBkaXZpZGUgIDg5NTY4MjQxODM2NzA3MzUgICA4OTU2ODI0MTgzNjQxNzQxICAtPiAgMS4wMDAwMDAwMDAwMDMyMzcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc3IGRpdmlkZSAgODMzNzI5MTY5NDQ4NTY4MiAgIDgzMzcyOTE2OTQ0NTExOTMgIC0+ICAxLjAwMDAwMDAwMDAwNDEzNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzggZGl2aWRlICA0MTA3Nzc1OTQ0NjgzNjY5ICAgNDEwNzc3NTk0NDY1NzA5NyAgLT4gIDEuMDAwMDAwMDAwMDA2NDY5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3OSBkaXZpZGUgIDg2OTE5MDAwNTc5NjQ2NDggICA4NjkxOTAwMDU3OTk3NTU1ICAtPiAgMC45OTk5OTk5OTk5OTYyMTQxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4MCBkaXZpZGUgIDIyMjk1Mjg1MjA1MzY0NjIgICAyMjI5NTI4NTIwNTAyMzM3ICAtPiAgMS4wMDAwMDAwMDAwMTUzMDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDgxIGRpdmlkZSAgIDM5ODQ0MjA4Mzc3NDMyMiAgICAzOTg0NDIwODM3NDYyNzMgIC0+ICAxLjAwMDAwMDAwMDA3MDM5NyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODIgZGl2aWRlICA1MzE5ODE5Nzc2ODA4NzU5ICAgNTMxOTgxOTc3NjgzODMxMyAgLT4gIDAuOTk5OTk5OTk5OTk0NDQ0NSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODMgZGl2aWRlICA3NzEwNDkxMjk5MDY2ODU1ICAgNzcxMDQ5MTI5OTA0MTg1OCAgLT4gIDEuMDAwMDAwMDAwMDAzMjQyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4NCBkaXZpZGUgIDkwODMyMzEyOTYwODcyNjYgICA5MDgzMjMxMjk2MDU4MTYwICAtPiAgMS4wMDAwMDAwMDAwMDMyMDQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg1IGRpdmlkZSAgMzU2Njg3MzU3NDkwNDU1OSAgIDM1NjY4NzM1NzQ4OTAzMjggIC0+ICAxLjAwMDAwMDAwMDAwMzk5MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODYgZGl2aWRlICAgNTk2MzQzMjkwNTUwNTI1ICAgIDU5NjM0MzI5MDU1NTYxNCAgLT4gIDAuOTk5OTk5OTk5OTkxNDY2MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODcgZGl2aWRlICAgMjc4MjI3OTI1MDkzMTkyICAgIDI3ODIyNzkyNTA2ODEwNCAgLT4gIDEuMDAwMDAwMDAwMDkwMTcxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4OCBkaXZpZGUgIDMyOTI5MDI5NTg0OTA2NDkgICAzMjkyOTAyOTU4NTE5ODgxICAtPiAgMC45OTk5OTk5OTk5OTExMjI3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4OSBkaXZpZGUgIDU1MjE4NzEzNjQyNDU4ODEgICA1NTIxODcxMzY0MjI5NTM2ICAtPiAgMS4wMDAwMDAwMDAwMDI5NjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkwIGRpdmlkZSAgMjQwNjUwNTYwMjg4MzYxNyAgIDI0MDY1MDU2MDI4NTc5OTcgIC0+ICAxLjAwMDAwMDAwMDAxMDY0NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTEgZGl2aWRlICA3NzQxMTQ2OTg0ODY5MjA4ICAgNzc0MTE0Njk4NDg2NzI1NSAgLT4gIDEuMDAwMDAwMDAwMDAwMjUyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5MiBkaXZpZGUgIDQ1NzYwNDE4MzI0MTQ5MDkgICA0NTc2MDQxODMyNDA1MTAyICAtPiAgMS4wMDAwMDAwMDAwMDIxNDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkzIGRpdmlkZSAgOTE4Mzc1Njk4Mjg3ODA1NyAgIDkxODM3NTY5ODI5MDE5MzQgIC0+ICAwLjk5OTk5OTk5OTk5NzQwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk0IGRpdmlkZSAgNjIxNTczNjUxMzg1NTE1OSAgIDYyMTU3MzY1MTM4NzAzNDIgIC0+ICAwLjk5OTk5OTk5OTk5NzU1NzMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk1IGRpdmlkZSAgIDI0ODU1NDk2ODUzNDUzMyAgICAyNDg1NTQ5Njg1NTE0MTcgIC0+ICAwLjk5OTk5OTk5OTkzMjA3MTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk2IGRpdmlkZSAgIDM3NjMxNDE2NTY2ODY0NSAgICAzNzYzMTQxNjU2NTk3NTUgIC0+ICAxLjAwMDAwMDAwMDAyMzYyNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTcgZGl2aWRlICA1NTEzNTY5MjQ5ODA5NzE4ICAgNTUxMzU2OTI0OTgwODkwNiAgLT4gIDEuMDAwMDAwMDAwMDAwMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5OCBkaXZpZGUgIDMzNjc5OTIyNDIxNjc5MDQgICAzMzY3OTkyMjQyMTU2MjI4ICAtPiAgMS4wMDAwMDAwMDAwMDM0NjcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk5IGRpdmlkZSAgNjEzNDg2OTUzODk2Njk2NyAgIDYxMzQ4Njk1Mzg5ODU5ODYgIC0+ICAwLjk5OTk5OTk5OTk5Njg5OTkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkZGRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlSW50LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdAppbmRleCAxNTU1YjQyLi5iZWM1Njc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdApAQCAtMSw0NDkgKzEsNDQ5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZERpdmlkZUludC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBpbnRlZ2VyIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZGR2aTAwMSBkaXZpZGVpbnQgIDEgICAgIDEgICAgLT4gIDENCi1kZGR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDINCi1kZGR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDANCi1kZGR2aTAwNCBkaXZpZGVpbnQgIDIgICAgIDIgICAgLT4gIDENCi1kZGR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDANCi1kZGR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDANCi1kZGR2aTAwNyBkaXZpZGVpbnQgIDEgICAgIDMgICAgLT4gIDANCi1kZGR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDANCi1kZGR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDENCi0NCi1kZGR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDINCi1kZGR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yDQotZGRkdmkwMTIgZGl2aWRlaW50ICAtMi40ICAxICAgIC0+ICAtMg0KLWRkZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMg0KLWRkZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMg0KLWRkZHZpMDE1IGRpdmlkZWludCAgMi40MDAgMSAgICAtPiAgMg0KLWRkZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQ0KLWRkZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQ0KLWRkZHZpMDE4IGRpdmlkZWludCAgMi4gICAgMiAgICAtPiAgMQ0KLWRkZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQ0KLQ0KLWRkZHZpMDIwIGRpdmlkZWludCAgMTg3ICAgMTg3ICAtPiAgMQ0KLWRkZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMg0KLWRkZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyDQotZGRkdmkwMjMgZGl2aWRlaW50ICA1ICAgICAyLjAwMCAgLT4gIDINCi1kZGR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUNCi1kZGR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUNCi0NCi1kZGR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMA0KLWRkZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwDQotZGRkdmkwMzIgZGl2aWRlaW50ICAxICAgICA4ICAgICAgLT4gIDANCi1kZGR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMA0KLWRkZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwDQotZGRkdmkwMzUgZGl2aWRlaW50ICAxICAgICA2NCAgICAgLT4gIDANCi1kZGR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMA0KLWRkZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wDQotZGRkdmkwNDIgZGl2aWRlaW50ICAxICAgIC04ICAgICAgLT4gLTANCi1kZGR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMA0KLWRkZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wDQotZGRkdmkwNDUgZGl2aWRlaW50ICAxICAgIC02NCAgICAgLT4gLTANCi1kZGR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMA0KLWRkZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wDQotZGRkdmkwNTIgZGl2aWRlaW50IC0xICAgICA4ICAgICAgLT4gLTANCi1kZGR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMA0KLWRkZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wDQotZGRkdmkwNTUgZGl2aWRlaW50IC0xICAgICA2NCAgICAgLT4gLTANCi1kZGR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMA0KLWRkZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwDQotZGRkdmkwNjIgZGl2aWRlaW50IC0xICAgIC04ICAgICAgLT4gIDANCi1kZGR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMA0KLWRkZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwDQotZGRkdmkwNjUgZGl2aWRlaW50IC0xICAgIC02NCAgICAgLT4gIDANCi0NCi0tLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbg0KLWRkZHZpMTYwIGRpdmlkZWludCAgMSAgICAgMSAgICAgICAgIC0+ICAxDQotZGRkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDANCi1kZGR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMA0KLWRkZHZpMTYzIGRpdmlkZWludCAgMSAgICAgMTAwMCAgICAgIC0+ICAwDQotZGRkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDANCi1kZGR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMA0KLWRkZHZpMTY2IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMCAgIC0+ICAwDQotZGRkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDANCi1kZGR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMA0KLWRkZHZpMTcwIGRpdmlkZWludCAgMSAgICAtMSAgICAgICAgIC0+IC0xDQotZGRkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTANCi1kZGR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMA0KLWRkZHZpMTczIGRpdmlkZWludCAgMSAgICAtMTAwMCAgICAgIC0+IC0wDQotZGRkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTANCi1kZGR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMA0KLWRkZHZpMTc2IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMCAgIC0+IC0wDQotZGRkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTANCi1kZGR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMA0KLWRkZHZpMTgwIGRpdmlkZWludCAtMSAgICAgMSAgICAgICAgIC0+IC0xDQotZGRkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTANCi1kZGR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMA0KLWRkZHZpMTgzIGRpdmlkZWludCAtMSAgICAgMTAwMCAgICAgIC0+IC0wDQotZGRkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTANCi1kZGR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMA0KLWRkZHZpMTg2IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMCAgIC0+IC0wDQotZGRkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTANCi1kZGR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMA0KLWRkZHZpMTkwIGRpdmlkZWludCAtMSAgICAtMSAgICAgICAgIC0+ICAxDQotZGRkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDANCi1kZGR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMA0KLWRkZHZpMTkzIGRpdmlkZWludCAtMSAgICAtMTAwMCAgICAgIC0+ICAwDQotZGRkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDANCi1kZGR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMA0KLWRkZHZpMTk2IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMCAgIC0+ICAwDQotZGRkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDANCi1kZGR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMA0KLQ0KLS0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzDQotZGRkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkNCi1kZGR2aTA3MSBkaXZpZGVpbnQgIDk5OTk5OTk5OS40ICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRkZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5DQotZGRkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkNCi1kZGR2aTA3NCBkaXZpZGVpbnQgIDk5OTk5OTk5OS45OTkgMSAgLT4gIDk5OTk5OTk5OQ0KLQ0KLWRkZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwDQotZGRkdmkwOTEgZGl2aWRlaW50ICAuMCAgICAgICAgICAgIDEgICAgLT4gIDANCi1kZGR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMA0KLWRkZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwDQotZGRkdmkwOTQgZGl2aWRlaW50ICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDANCi0NCi1kZGR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxDQotZGRkdmkxMDEgZGl2aWRlaW50ICAxICAyICAgLT4gMA0KLWRkZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDANCi1kZGR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwDQotZGRkdmkxMDQgZGl2aWRlaW50ICAxICA1ICAgLT4gMA0KLWRkZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDANCi1kZGR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwDQotZGRkdmkxMDcgZGl2aWRlaW50ICAxICA4ICAgLT4gMA0KLWRkZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDANCi1kZGR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwDQotZGRkdmkxMTAgZGl2aWRlaW50ICAxICAxICAgLT4gMQ0KLWRkZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDINCi1kZGR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzDQotZGRkdmkxMTMgZGl2aWRlaW50ICA0ICAxICAgLT4gNA0KLWRkZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUNCi1kZGR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2DQotZGRkdmkxMTYgZGl2aWRlaW50ICA3ICAxICAgLT4gNw0KLWRkZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgNCi1kZGR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5DQotZGRkdmkxMTkgZGl2aWRlaW50ICAxMCAxICAgLT4gMTANCi0NCi0tLSBmcm9tIERpYWdCaWdEZWNpbWFsDQotZGRkdmkxMzEgZGl2aWRlaW50ICAxMDEuMyAgIDEgICAgIC0+ICAxMDENCi1kZGR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQ0KLWRkZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMNCi1kZGR2aTEzNCBkaXZpZGVpbnQgIDEwMS4wICAgMyAgICAgLT4gIDMzDQotZGRkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyDQotZGRkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyDQotZGRkdmkxMzcgZGl2aWRlaW50ICAxOCAgICAgIDE4ICAgIC0+ICAxDQotZGRkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxDQotZGRkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxDQotZGRkdmkxNDAgZGl2aWRlaW50ICAyLjQwMCAgIDIgICAgIC0+ICAxDQotZGRkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwDQotZGRkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxDQotZGRkdmkxNDMgZGl2aWRlaW50ICA1ICAgICAgIDIgICAgIC0+ICAyDQotZGRkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwDQotZGRkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwDQotDQotLS0gT3RoZXJzDQotZGRkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5DQotZGRkdmkxNTEgZGl2aWRlaW50ICAxMjM0NSAgNC45OSAgIC0+ICAyNDczDQotZGRkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5DQotZGRkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5DQotZGRkdmkxNTQgZGl2aWRlaW50ICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwDQotZGRkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0DQotZGRkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4DQotZGRkdmkxNTcgZGl2aWRlaW50ICAgIDEwMSAgNy42ICAgIC0+ICAxMw0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDANCi1kZGR2aTIwMSBkaXZpZGVpbnQgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZGR2aTIwNCBkaXZpZGVpbnQgIDAuMDAwMSAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIwNyBkaXZpZGVpbnQgIDEgICAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIxMCBkaXZpZGVpbnQgMUUrMTAwICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjE1IGRpdmlkZWludCAgLTAuMDEgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjE4IGRpdmlkZWludCAgLTEgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpMjIxIGRpdmlkZWludCAtMUUrMzgwICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cNCi1kZGR2aTI3MCBkaXZpZGVpbnQgMSAxZTM4NCAgICAgICAgICAtPiAwDQotZGRkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMA0KLWRkZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDANCi1kZGR2aTI3MyBkaXZpZGVpbnQgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0ICAgICAgIC0+IDANCi1kZGR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkyNzYgZGl2aWRlaW50IDkuOTllMzg0IDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi1kZGR2aTI4MCBkaXZpZGVpbnQgMC4xIDllLTM4MyAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZGR2aTI4MyBkaXZpZGVpbnQgMC4xIDllLTM4MiAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotDQotLS0gR0QgZWRnZSBjYXNlczogbGhzIHNtYWxsZXIgdGhhbiByaHMgYnV0IG1vcmUgZGlnaXRzDQotZGRkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwDQotZGRkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwDQotZGRkdmkzMDMgIGRpdmlkZWludCAgMC45ICAgICAgMi4xICAgIC0+ICAwDQotZGRkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwDQotZGRkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwDQotZGRkdmkzMDYgIGRpdmlkZWludCAgMC4xMiAgICAgMSAgICAgIC0+ICAwDQotZGRkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwDQotZGRkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwDQotZGRkdmkzMDkgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwDQotZGRkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwDQotZGRkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwDQotZGRkdmkzMTIgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wICAgIC0+ICAwDQotZGRkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwDQotZGRkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwDQotZGRkdmkzMTUgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMSAgIC0+ICAwDQotDQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQotZGRkdmkzMzAgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0NQ0KLWRkZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2DQotZGRkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkzMzMgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQotZGRkdmkxMDUxIGRpdmlkZWludCAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkxMDU0IGRpdmlkZWludCAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDANCi1kZGR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMA0KLWRkZHZpMTA1NyBkaXZpZGVpbnQgLTFlLTI3NyAgMWUrMzExIC0+IC0wDQotZGRkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDANCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kZGR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMA0KLWRkZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwDQotZGRkdmkxMDYyIGRpdmlkZWludCAxZS0yOTEgMWUrMTAzIC0+IDANCi1kZGR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMA0KLWRkZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwDQotZGRkdmkxMDY1IGRpdmlkZWludCAxZS0yOTEgMWUrMTA2IC0+IDANCi1kZGR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMA0KLWRkZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwDQotZGRkdmkxMDY4IGRpdmlkZWludCAxZS0yOTEgMWUrMTA5IC0+IDANCi1kZGR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMA0KLQ0KLWRkZHZpMTEwMSBkaXZpZGVpbnQgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAwDQotZGRkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDANCi1kZGR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMA0KLQ0KLWRkZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwDQotZGRkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wDQotZGRkdmkxMTIwIGRpdmlkZWludCAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDANCi0NCi1kZGR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTANCi1kZGR2aTExMzAgZGl2aWRlaW50ICAzLjBFLTM5NCAgICAtMWUrNSAgLT4gLTANCi0NCi1kZGR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDANCi1kZGR2aTExMzIgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDANCi1kZGR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDANCi1kZGR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDANCi1kZGR2aTExMzUgZGl2aWRlaW50ICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDANCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotZGRkdmk0MDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEwMCAtPiAxMjM0NTY3ODANCi1kZGR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDANCi1kZGR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MA0KLWRkZHZpNDA0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgICAgLT4gMA0KLWRkZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwDQotZGRkdmk0MDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEwICAtPiAxMjM0NTY3ODkNCi1kZGR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDANCi1kZGR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDEwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxICAgLT4gMA0KLWRkZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwDQotZGRkdmk0MTMgZGl2aWRlaW50IDEyMzQ1Njc4OTQ4IDEwMCAtPiAxMjM0NTY3ODkNCi1kZGR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5DQotZGRkdmk0MTYgZGl2aWRlaW50IDEyMzQ1Njc4OTUxIDEwMCAtPiAxMjM0NTY3ODkNCi1kZGR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRkZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwDQotZGRkdmk0NDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgLT4gMA0KLWRkZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDANCi1kZGR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwDQotZGRkdmk0NDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MA0KLWRkZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDANCi1kZGR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxDQotZGRkdmk0NDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgLT4gMA0KLWRkZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxDQotZGRkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMA0KLWRkZHZpNDUxIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYNCi1kZGR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLWRkZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMA0KLWRkZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpNTMzIGRpdmlkZWludCAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkZHZpNTM2IGRpdmlkZWludCAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLQ0KLWRkZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTANCi1kZGR2aTU0MiBkaXZpZGVpbnQgLTAgICAgLTEgICAgIC0+ICAwDQotZGRkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMA0KLWRkZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTANCi1kZGR2aTU0NSBkaXZpZGVpbnQgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU0OCBkaXZpZGVpbnQgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZGRkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMA0KLWRkZHZpNTUyIGRpdmlkZWludCAtMC4wICAtMSAgICAgLT4gIDANCi1kZGR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwDQotZGRkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMA0KLWRkZHZpNTU1IGRpdmlkZWludCAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTU4IGRpdmlkZWludCAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kZGR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wDQotZGRkdmk1NjIgZGl2aWRlaW50IC0wICAgIC0xLjAgICAtPiAgMA0KLWRkZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDANCi1kZGR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wDQotZGRkdmk1NjUgZGl2aWRlaW50IC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NjggZGl2aWRlaW50ICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRkZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTANCi1kZGR2aTU3MiBkaXZpZGVpbnQgLTAuMCAgLTEuMCAgIC0+ICAwDQotZGRkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMA0KLWRkZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTANCi1kZGR2aTU3NSBkaXZpZGVpbnQgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZGRkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kZGR2aTU3OCBkaXZpZGVpbnQgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gU3BlY2lhbHMNCi1kZGR2aTU4MCBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRkdmk1ODMgZGl2aWRlaW50ICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZGR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRkZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZGRkdmk1ODYgZGl2aWRlaW50ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kZGR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wDQotZGRkdmk1ODkgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMA0KLWRkZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTANCi1kZGR2aTU5MiBkaXZpZGVpbnQgIDAgICAgIEluZiAgIC0+ICAwDQotZGRkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMA0KLWRkZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDANCi1kZGR2aTU5NSBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTYwMSBkaXZpZGVpbnQgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kZGR2aTYwNCBkaXZpZGVpbnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZGR2aTYwNyBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wDQotZGRkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2MTAgZGl2aWRlaW50IC0xICAgIC1JbmYgICAtPiAgMA0KLWRkZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDANCi1kZGR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wDQotZGRkdmk2MTMgZGl2aWRlaW50ICAxICAgIC1JbmYgICAtPiAtMA0KLWRkZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTANCi1kZGR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kZGR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZGR2aTYyMyBkaXZpZGVpbnQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZGR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kZGR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZGR2aTYyNiBkaXZpZGVpbnQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZGR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kZGR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZGR2aTYyOSBkaXZpZGVpbnQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzMiBkaXZpZGVpbnQgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzNSBkaXZpZGVpbnQgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZGR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZGR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjQzIGRpdmlkZWludCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjQ2IGRpdmlkZWludCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjQ5IGRpdmlkZWludCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjUyIGRpdmlkZWludCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjU1IGRpdmlkZWludCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjU4IGRpdmlkZWludCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kZGR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44DQotZGRkdmk2NjMgZGl2aWRlaW50ICBOYU43ICBJbmYgICAtPiAgTmFONw0KLWRkZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYNCi1kZGR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40DQotZGRkdmk2NjYgZGl2aWRlaW50IC0xMDAwICBOYU4zICAtPiAgTmFOMw0KLWRkZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjINCi0NCi1kZGR2aTY3MSBkaXZpZGVpbnQgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY3NCBkaXZpZGVpbnQgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTY3NyBkaXZpZGVpbnQgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRkdmk5MDAgZGl2aWRlaW50ICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGREaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNEb3VibGUgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCitkZGR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDIKK2RkZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAorZGRkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCitkZGR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAorZGRkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCitkZGR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDAKK2RkZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQorCitkZGR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKK2RkZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTIKK2RkZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKK2RkZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgorZGRkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyCitkZGR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKK2RkZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQorZGRkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxCitkZGR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKK2RkZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQorCitkZGR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDEKK2RkZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgorZGRkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKK2RkZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyCitkZGR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RkZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorCitkZGR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMAorZGRkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKK2RkZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCitkZGR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMAorZGRkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKK2RkZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCitkZGR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMAorZGRkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKK2RkZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCitkZGR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMAorZGRkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKK2RkZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCitkZGR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMAorZGRkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKK2RkZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCitkZGR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMAorZGRkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKK2RkZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCitkZGR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMAorZGRkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKK2RkZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCitkZGR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMAorZGRkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKK2RkZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCisKKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCitkZGR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQorZGRkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKK2RkZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCitkZGR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMAorZGRkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKK2RkZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCitkZGR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMAorZGRkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKK2RkZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCitkZGR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQorZGRkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKK2RkZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCitkZGR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMAorZGRkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKK2RkZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCitkZGR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMAorZGRkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKK2RkZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCitkZGR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQorZGRkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKK2RkZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCitkZGR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMAorZGRkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKK2RkZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCitkZGR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMAorZGRkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKK2RkZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCitkZGR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQorZGRkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKK2RkZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCitkZGR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMAorZGRkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKK2RkZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCitkZGR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMAorZGRkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKK2RkZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzCitkZGR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5CitkZGR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKKworZGRkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwCitkZGR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAorZGRkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwCisKK2RkZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RkZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKK2RkZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDAKK2RkZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKK2RkZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKK2RkZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDAKK2RkZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKK2RkZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKK2RkZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDAKK2RkZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKK2RkZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2RkZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDIKK2RkZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKK2RkZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKK2RkZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUKK2RkZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKK2RkZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKK2RkZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgKK2RkZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKK2RkZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCisKKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RkZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxCitkZGR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQorZGRkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMworZGRkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMworZGRkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCitkZGR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKK2RkZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQorZGRkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCitkZGR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKK2RkZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQorZGRkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCitkZGR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKK2RkZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMgorZGRkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCitkZGR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKKworLS0gT3RoZXJzCitkZGR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkKK2RkZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MworZGRkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5CitkZGR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKK2RkZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAorZGRkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0CitkZGR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgKK2RkZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAorZGRkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworZGRkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMAorZGRkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMAorZGRkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMAorZGRkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwCitkZGR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZGRkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cworZGRkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCitkZGR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDAKK2RkZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAorZGRkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCitkZGR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDAKK2RkZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAorZGRkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkZGR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKK2RkZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZGRkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkZGR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDAKK2RkZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAorZGRkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCitkZGR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDAKK2RkZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RkZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3ODkwMTIzNDUKK2RkZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2CitkZGR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RkZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDAKK2RkZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wCitkZGR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMAorZGRkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDAKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkZGR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMAorZGRkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDAKK2RkZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwCitkZGR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMAorZGRkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDAKK2RkZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwCitkZGR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMAorZGRkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDAKK2RkZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwCitkZGR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMAorCitkZGR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMAorZGRkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDAKK2RkZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwCisKK2RkZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwCitkZGR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTAKK2RkZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwCisKK2RkZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMAorZGRkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wCisKK2RkZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMAorZGRkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwCitkZGR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDAKK2RkZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMAorZGRkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwCitkZGR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKK2RkZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCitkZGR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDAKK2RkZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKK2RkZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKK2RkZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDAKK2RkZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKK2RkZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2RkZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKK2RkZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2RkZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDAKK2RkZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2RkZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKK2RkZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2RkZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKK2RkZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkZGR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwCitkZGR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkZGR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RkZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAorZGRkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZGRkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAorZGRkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAorZGRkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMAorZGRkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAorZGRkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wCitkZGR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCitkZGR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCitkZGR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wCitkZGR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKK2RkZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDAKK2RkZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKK2RkZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKK2RkZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAorZGRkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAorZGRkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMAorZGRkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAorZGRkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZGRkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2RkZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAorZGRkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAorZGRkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMAorZGRkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAorZGRkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAorZGRkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZGR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZGR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkZGR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKK2RkZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDAKK2RkZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKK2RkZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKK2RkZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTAKK2RkZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZGR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZGR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKK2RkZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKK2RkZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKK2RkZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKK2RkZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZGRkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZGR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk5MDEgZGl2aWRlaW50ICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEVuY29kZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QKaW5kZXggZTkxZWM2MS4uZGU5ZDMxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QKQEAgLTEsNDk1ICsxLDQ5NSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIGVpZ2h0LWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWw2NC5kZWNUZXN0XQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIGVpZ2h0LWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uDQotLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6DQotLS0NCi0tLSAgMSBiaXQgIHNpZ24NCi0tLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkDQotLS0gIDggYml0cyBleHBvbmVudCBjb250aW51YXRpb24NCi0tLSA1MCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbg0KLS0tDQotLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDEwIGJpdHMNCi0tLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggNTQgYml0cyAoMTYgZGlnaXRzKQ0KLS0tDQotLS0gRWxpbWl0ID0gIDc2NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQ0KLS0tIEVtYXggICA9ICAzODQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpDQotLS0gRW1pbiAgID0gLTM4MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpDQotLS0gYmlhcyAgID0gIDM5OCAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55DQotDQotLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUNCi0tLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJw0KLS0tIHRlc3RjYXNlIGdyb3Vwcy4NCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi0NCi0tLSBHZW5lcmFsIHRlc3RjYXNlcw0KLS0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykNCi1kZWNlMDAxIGFwcGx5ICAgI0EyMzAwMDAwMDAwMDAzRDAgLT4gLTcuNTANCi1kZWNlMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMzAwMDAwMDAwMDAzRDANCi0tLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzDQotZGVjZTAwMyBhcHBseSAgICNBMjNjMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszDQotZGVjZTAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjNjMDAwMDAwMDAwM0QwDQotZGVjZTAwNSBhcHBseSAgICNBMjM4MDAwMDAwMDAwM0QwIC0+IC03NTANCi1kZWNlMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyMzgwMDAwMDAwMDAzRDANCi1kZWNlMDA3IGFwcGx5ICAgI0EyMzQwMDAwMDAwMDAzRDAgLT4gLTc1LjANCi1kZWNlMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyMzQwMDAwMDAwMDAzRDANCi1kZWNlMDA5IGFwcGx5ICAgI0EyMmMwMDAwMDAwMDAzRDAgLT4gLTAuNzUwDQotZGVjZTAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjJjMDAwMDAwMDAwM0QwDQotZGVjZTAxMSBhcHBseSAgICNBMjI4MDAwMDAwMDAwM0QwIC0+IC0wLjA3NTANCi1kZWNlMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMjgwMDAwMDAwMDAzRDANCi1kZWNlMDEzIGFwcGx5ICAgI0EyMjAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwDQotZGVjZTAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMjIwMDAwMDAwMDAwM0QwDQotZGVjZTAxNSBhcHBseSAgICNBMjE4MDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwDQotZGVjZTAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMjE4MDAwMDAwMDAwM0QwDQotZGVjZTAxNyBhcHBseSAgICNBMjE0MDAwMDAwMDAwM0QwIC0+IC03LjUwRS03DQotZGVjZTAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMjE0MDAwMDAwMDAwM0QwDQotDQotLS0gTm9ybWFsaXR5DQotZGVjZTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjMjYzOTM0YjljMWUyOGU1Ng0KLWRlY2UwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2ICAgLT4gI2E2MzkzNGI5YzFlMjhlNTYNCi1kZWNlMDIyIGFwcGx5ICAgMTIzNC41Njc4OTAxMjM0NTYgIC0+ICMyNjA5MzRiOWMxZTI4ZTU2DQotZGVjZTAyMyBhcHBseSAgIzI2MDkzNGI5YzFlMjhlNTYgICAtPiAxMjM0LjU2Nzg5MDEyMzQ1Ng0KLWRlY2UwMjQgYXBwbHkgICAxMTExMTExMTExMTExMTExICAgLT4gIzI2Mzg5MTI0NDkxMjQ0OTENCi1kZWNlMDI1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OSAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQotDQotLS0gTm1heCBhbmQgc2ltaWxhcg0KLWRlY2UwMzEgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRlY2UwMzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KLWRlY2UwMzMgYXBwbHkgICAjNzdmY2ZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGVjZTAzNCBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICM0N2ZkMzRiOWMxZTI4ZTU2DQotZGVjZTAzNSBhcHBseSAgICM0N2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSszODQNCi0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KLWRlY2UwMzYgYXBwbHkgICAxLjIzRSszODQgICAgICAgICAgICAgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZTAzNyBhcHBseSAgICM0N2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwRSszODQNCi1kZWNkMDM4IGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQ3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2QwMzkgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotDQotZGVjZDA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDA0OWM1DQotZGVjZDA1MiBhcHBseSAgICMyMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1DQotZGVjZDA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwNTM0DQotZGVjZDA1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQNCi1kZWNkMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwYTMNCi1kZWNkMDU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzDQotZGVjZDA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDEyDQotZGVjZDA1OCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IDEyDQotZGVjZDA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxDQotZGVjZDA2MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IDENCi1kZWNkMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwYTMNCi1kZWNkMDYyIGFwcGx5ICAgIzIyMzAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMw0KLWRlY2QwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwNDljNQ0KLWRlY2QwNjQgYXBwbHkgICAjMjIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUNCi0NCi0tLSBObWluIGFuZCBiZWxvdw0KLWRlY2QwNzEgYXBwbHkgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAjMDAzYzAwMDAwMDAwMDAwMQ0KLWRlY2QwNzIgYXBwbHkgICAjMDAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zODMNCi1kZWNkMDczIGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDANCi1kZWNkMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRlY2QwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMQ0KLWRlY2QwNzYgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotDQotZGVjZDA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwODAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsDQotZGVjZDA3OCBhcHBseSAgICMwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsDQotZGVjZDA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsDQotZGVjZDA4MCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjZDA4MSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+ICMwMDA0MDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQotZGVjZDA4MiBhcHBseSAgICMwMDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjZDA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQotZGVjZDA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMNCi1kZWNkMDg1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gIzY0MDBmZjNmY2ZmM2ZjZmYNCi1kZWNkMDg2IGFwcGx5ICAgIzY0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KLS0tIGFuZCBhIHByb2JsZW1hdGljIGRpdmlkZSByZXN1bHQNCi1kZWNkMDg4IGFwcGx5ICAgMS4xMTExMTExMTExMTExMTFFLTM4MyAgLT4gIzA0MDA5MTI0NDkxMjQ0OTENCi1kZWNkMDg5IGFwcGx5ICAgIzA0MDA5MTI0NDkxMjQ0OTEgICAgICAgLT4gMS4xMTExMTExMTExMTExMTFFLTM4Mw0KLQ0KLS0tIGZvcnRpZXMNCi1kZWNkMDkwIGFwcGx5ICAgICAgICA0MCAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDA0MA0KLWRlY2QwOTEgYXBwbHkgICAgICAgIDM5Ljk5ICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwY2ZmDQotDQotLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGFzIGFsbCBMSFMgZXhhY3QNCi0NCi0tLSBTYW1lIGFnYWluLCBuZWdhdGl2ZXMNCi0tLSBObWF4IGFuZCBzaW1pbGFyDQotZGVjZDEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmDQotZGVjZDEyMyBhcHBseSAgICNmN2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGVjZDEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICNjN2ZkMzRiOWMxZTI4ZTU2DQotZGVjZDEyNSBhcHBseSAgICNjN2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0DQotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCi1kZWNkMTMwIGFwcGx5ICAtMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2QxMzEgYXBwbHkgICAjYzdmZDMwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDBFKzM4NA0KLWRlY2QxMzIgYXBwbHkgIC0xRSszODQgICAgICAgICAgICAgICAgICAtPiAjYzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDEzMyBhcHBseSAgICNjN2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotDQotLS0gb3ZlcmZsb3dzDQotZGVjZDE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDA0OWM1DQotZGVjZDE1MiBhcHBseSAgICNhMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQ0KLWRlY2QxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDUzNA0KLWRlY2QxNTQgYXBwbHkgICAjYTIzODAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNA0KLWRlY2QxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDBhMw0KLWRlY2QxNTYgYXBwbHkgICAjYTIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzDQotZGVjZDE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDEyDQotZGVjZDE1OCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMg0KLWRlY2QxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQ0KLWRlY2QxNjAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQ0KLWRlY2QxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDBhMw0KLWRlY2QxNjIgYXBwbHkgICAjYTIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMw0KLWRlY2QxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwNDljNQ0KLWRlY2QxNjQgYXBwbHkgICAjYTIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1DQotDQotLS0gTm1pbiBhbmQgYmVsb3cNCi1kZWNkMTcxIGFwcGx5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzgwM2MwMDAwMDAwMDAwMDENCi1kZWNkMTcyIGFwcGx5ICAgIzgwM2MwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM4Mw0KLWRlY2QxNzMgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMA0KLWRlY2QxNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRlY2QxNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMQ0KLWRlY2QxNzYgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KLQ0KLWRlY2QxNzcgYXBwbHkgIC0wLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODAwMDgwMDAwMDAwMDAwMCAgICAgICBTdWJub3JtYWwNCi1kZWNkMTc4IGFwcGx5ICAgIzgwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsDQotZGVjZDE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAtMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kZWNkMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzgwMDQwMDAwMDAwMDAwMDEgICAgICAgU3Vibm9ybWFsDQotZGVjZDE4MiBhcHBseSAgICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLWRlY2QxODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwNCi1kZWNkMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMNCi1kZWNkMTg1IGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTlFLTM5OCAgIC0+ICNlNDAwZmYzZmNmZjNmY2ZmDQotZGVjZDE4NiBhcHBseSAgICNlNDAwZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtMzgzDQotLS0gYW5kIGEgdHJpY2t5IHN1Ym5vcm1hbA0KLWRlY2QxODcgYXBwbHkgICAxLjExMTExMTExMTExNTI0RS0zODQgICAgLT4gIzAwMDA5MTI0NDkxMjQ2YTQgICAgICBTdWJub3JtYWwNCi1kZWNkMTg4IGFwcGx5ICAgIzAwMDA5MTI0NDkxMjQ2YTQgICAgICAgIC0+IDEuMTExMTExMTExMTE1MjRFLTM4NCAgU3Vibm9ybWFsDQotDQotLS0gbmVhci11bmRlcmZsb3dzDQotZGVjZDE4OSBhcHBseSAgIC0xZS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwNCi1kZWNkMTkwIGFwcGx5ICAgLTEuMGUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gemVyb3MNCi1kZWNkNDAxIGFwcGx5ICAgMEUtNTAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDAyIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDAzIGFwcGx5ICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDANCi1kZWNkNDA0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4DQotZGVjZDQwNSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwDQotZGVjZDQwNiBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTM5OA0KLWRlY2Q0MDcgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDAwMA0KLWRlY2Q0MDggYXBwbHkgICAjMjIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwLjAwDQotZGVjZDQwOSBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwDQotZGVjZDQxMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDANCi1kZWNkNDExIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyNDQwMDAwMDAwMDAwMDANCi1kZWNkNDEyIGFwcGx5ICAgIzIyNDQwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMw0KLWRlY2Q0MTMgYXBwbHkgICAwRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMA0KLWRlY2Q0MTQgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkNCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjZDQxNSBhcHBseSAgIDBFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQxNiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KLWRlY2Q0MTcgYXBwbHkgICAwRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0MTggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkNCi1kZWNkNDE5IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDIwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5DQotZGVjZDQyMSBhcHBseSAgIDBFKzUwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KLQ0KLS0tIG5lZ2F0aXZlIHplcm9zDQotZGVjZDQzMSBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQzMiBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQzMyBhcHBseSAgIC0wRS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwDQotZGVjZDQzNCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgNCi1kZWNkNDM1IGFwcGx5ICAgLTAuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gIzgwMDAwMDAwMDAwMDAwMDANCi1kZWNkNDM2IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OA0KLWRlY2Q0MzcgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDAwMA0KLWRlY2Q0MzggYXBwbHkgICAjYTIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMC4wMA0KLWRlY2Q0MzkgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMA0KLWRlY2Q0NDAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAtMA0KLWRlY2Q0NDEgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAjYTI0NDAwMDAwMDAwMDAwMA0KLWRlY2Q0NDIgYXBwbHkgICAjYTI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMw0KLWRlY2Q0NDMgYXBwbHkgICAtMEUrMzY5ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMA0KLWRlY2Q0NDQgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQotLS0gY2xhbXBlZCB6ZXJvcy4uLg0KLWRlY2Q0NDUgYXBwbHkgICAtMEUrMzcwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0NDYgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQotZGVjZDQ0NyBhcHBseSAgIC0wRSszODQgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjZDQ0OCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkNCi1kZWNkNDQ5IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNkNDUwIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQ0KLWRlY2Q0NTEgYXBwbHkgICAtMEUrNTAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY2Q0NTIgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQotDQotLS0gZXhwb25lbnRzDQotZGVjZDQ2MCBhcHBseSAgICMyMjVjMDAwMDAwMDAwMDA3IC0+IDdFKzkNCi1kZWNkNDYxIGFwcGx5ICAgN0UrOSAgLT4gIzIyNWMwMDAwMDAwMDAwMDcNCi1kZWNkNDYyIGFwcGx5ICAgIzIzYzQwMDAwMDAwMDAwMDcgLT4gN0UrOTkNCi1kZWNkNDYzIGFwcGx5ICAgN0UrOTkgLT4gIzIzYzQwMDAwMDAwMDAwMDcNCi0NCi0tLSBTcGVjaWFscw0KLWRlY2Q1MDAgYXBwbHkgICBJbmZpbml0eSAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY2Q1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OSAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MDQgYXBwbHkgICAjNzkwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY2Q1MDUgYXBwbHkgICAjN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLWRlY2Q1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KLQ0KLWRlY2Q1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YyAtPiAjN2MwMDdjN2M3YzdjN2M3Yw0KLWRlY2Q1MTEgYXBwbHkgICAjN2MwMDAwMDAwMDAwMDAwMCAtPiBOYU4NCi1kZWNkNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDE3ZDdkN2Q3ZDdkN2QNCi1kZWNkNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAgLT4gTmFODQotZGVjZDUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwN2U3ZTdlN2U3YzdlDQotZGVjZDUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwIC0+IHNOYU4NCi1kZWNkNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gIzdlMDA3ZjdmN2Y3ZjdjN2YNCi1kZWNkNTE3IGFwcGx5ICAgIzdmMDAwMDAwMDAwMDAwMDAgLT4gc05hTg0KLWRlY2Q1MTggYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5DQotZGVjZDUxOSBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQotDQotZGVjZDUyMCBhcHBseSAgIC1JbmZpbml0eSAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGVjZDUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGVjZDUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY2Q1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OSAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MjQgYXBwbHkgICAjZjkwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNkNTI1IGFwcGx5ICAgI2ZhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCi1kZWNkNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjZDUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwDQotZGVjZDUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KLQ0KLWRlY2Q1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YyAtPiAjZmMwMDdjN2M3YzdjN2M3Yw0KLWRlY2Q1MzEgYXBwbHkgICAjZmMwMDAwMDAwMDAwMDAwMCAtPiAtTmFODQotZGVjZDUzMiBhcHBseSAgICNmZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAxN2Q3ZDdkN2Q3ZDdkDQotZGVjZDUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4NCi1kZWNkNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDA3ZTdlN2U3ZTdjN2UNCi1kZWNkNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCi1kZWNkNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2YgLT4gI2ZlMDA3ZjdmN2Y3ZjdjN2YNCi1kZWNkNTM3IGFwcGx5ICAgI2ZmMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCi1kZWNkNTM4IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTkNCi1kZWNkNTM5IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDBmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBkaWFnbm9zdGljIE5hTnMNCi1kZWNkNTQwIGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMA0KLWRlY2Q1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwDQotZGVjZDU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDENCi1kZWNkNTQzIGFwcGx5ICAgTmFOMTIgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAxMg0KLWRlY2Q1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDc5DQotZGVjZDU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDQ5YzUNCi1kZWNkNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAyOGU1Ng0KLWRlY2Q1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMGY3ZmRmDQotZGVjZDU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDNkZmY3ZmRmZjdmZGYNCi1kZWNkNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KLS0tIHRvbyBtYW55IGRpZ2l0cw0KLQ0KLS0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlDQotZGVjZDYwMSBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjAyIGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NA0KLWRlY2Q2MDMgYXBwbHkgICAxRSszODMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzgwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDYwNCBhcHBseSAgICM0M2ZjODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4Mw0KLWRlY2Q2MDUgYXBwbHkgICAxRSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzEwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDYwNiBhcHBseSAgICM0M2ZjMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyDQotZGVjZDYwNyBhcHBseSAgIDFFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDEwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjA4IGFwcGx5ICAgIzQzZmMwMTAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MQ0KLWRlY2Q2MDkgYXBwbHkgICAxRSszODAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMjAwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDYxMCBhcHBseSAgICM0M2ZjMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzM4MA0KLWRlY2Q2MTEgYXBwbHkgICAxRSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDQwMDAwMDAwMCBDbGFtcGVkDQotZGVjZDYxMiBhcHBseSAgICM0M2ZjMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrMzc5DQotZGVjZDYxMyBhcHBseSAgIDFFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDQwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjE0IGFwcGx5ICAgIzQzZmMwMDAwNDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzM3OA0KLWRlY2Q2MTUgYXBwbHkgICAxRSszNzcgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwODAwMDAwMCBDbGFtcGVkDQotZGVjZDYxNiBhcHBseSAgICM0M2ZjMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzM3Nw0KLWRlY2Q2MTcgYXBwbHkgICAxRSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMTAwMDAwMCBDbGFtcGVkDQotZGVjZDYxOCBhcHBseSAgICM0M2ZjMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrMzc2DQotZGVjZDYxOSBhcHBseSAgIDFFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMTAwMDAwIENsYW1wZWQNCi1kZWNkNjIwIGFwcGx5ICAgIzQzZmMwMDAwMDAxMDAwMDAgICAgICAgLT4gMS4wMDAwMDBFKzM3NQ0KLWRlY2Q2MjEgYXBwbHkgICAxRSszNzQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAyMDAwMCBDbGFtcGVkDQotZGVjZDYyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzM3NA0KLWRlY2Q2MjMgYXBwbHkgICAxRSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNDAwMCBDbGFtcGVkDQotZGVjZDYyNCBhcHBseSAgICM0M2ZjMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrMzczDQotZGVjZDYyNSBhcHBseSAgIDFFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwNDAwIENsYW1wZWQNCi1kZWNkNjI2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDA0MDAgICAgICAgLT4gMS4wMDBFKzM3Mg0KLWRlY2Q2MjcgYXBwbHkgICAxRSszNzEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDA4MCBDbGFtcGVkDQotZGVjZDYyOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzM3MQ0KLWRlY2Q2MjkgYXBwbHkgICAxRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxMCBDbGFtcGVkDQotZGVjZDYzMCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrMzcwDQotZGVjZDYzMSBhcHBseSAgIDFFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAxDQotZGVjZDYzMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OQ0KLWRlY2Q2MzMgYXBwbHkgICAxRSszNjggICAgICAgICAgICAgICAgICAtPiAjNDNmODAwMDAwMDAwMDAwMQ0KLWRlY2Q2MzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSszNjgNCi0tLSBzYW1lIHdpdGggOXMNCi1kZWNkNjQxIGFwcGx5ICAgOUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzc3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NDIgYXBwbHkgICAjNzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotZGVjZDY0MyBhcHBseSAgIDlFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjOGMwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjQ0IGFwcGx5ICAgIzQzZmM4YzAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMEUrMzgzDQotZGVjZDY0NSBhcHBseSAgIDlFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMWEwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjQ2IGFwcGx5ICAgIzQzZmMxYTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwRSszODINCi1kZWNkNjQ3IGFwcGx5ICAgOUUrMzgxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwOTAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NDggYXBwbHkgICAjNDNmYzA5MDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMEUrMzgxDQotZGVjZDY0OSBhcHBseSAgIDlFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMzAwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjUwIGFwcGx5ICAgIzQzZmMwMDIzMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMEUrMzgwDQotZGVjZDY1MSBhcHBseSAgIDlFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNjgwMDAwMDAwIENsYW1wZWQNCi1kZWNkNjUyIGFwcGx5ICAgIzQzZmMwMDA2ODAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwRSszNzkNCi1kZWNkNjUzIGFwcGx5ICAgOUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAyNDAwMDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NTQgYXBwbHkgICAjNDNmYzAwMDI0MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMEUrMzc4DQotZGVjZDY1NSBhcHBseSAgIDlFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4YzAwMDAwIENsYW1wZWQNCi1kZWNkNjU2IGFwcGx5ICAgIzQzZmMwMDAwMDhjMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMEUrMzc3DQotZGVjZDY1NyBhcHBseSAgIDlFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxYTAwMDAwIENsYW1wZWQNCi1kZWNkNjU4IGFwcGx5ICAgIzQzZmMwMDAwMDFhMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwRSszNzYNCi1kZWNkNjU5IGFwcGx5ICAgOUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDA5MDAwMDAgQ2xhbXBlZA0KLWRlY2Q2NjAgYXBwbHkgICAjNDNmYzAwMDAwMDkwMDAwMCAgICAgICAtPiA5LjAwMDAwMEUrMzc1DQotZGVjZDY2MSBhcHBseSAgIDlFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIzMDAwIENsYW1wZWQNCi1kZWNkNjYyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMjMwMDAgICAgICAgLT4gOS4wMDAwMEUrMzc0DQotZGVjZDY2MyBhcHBseSAgIDlFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA2ODAwIENsYW1wZWQNCi1kZWNkNjY0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDY4MDAgICAgICAgLT4gOS4wMDAwRSszNzMNCi1kZWNkNjY1IGFwcGx5ICAgOUUrMzcyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDI0MDAgQ2xhbXBlZA0KLWRlY2Q2NjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMjQwMCAgICAgICAtPiA5LjAwMEUrMzcyDQotZGVjZDY2NyBhcHBseSAgIDlFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDhjIENsYW1wZWQNCi1kZWNkNjY4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwOGMgICAgICAgLT4gOS4wMEUrMzcxDQotZGVjZDY2OSBhcHBseSAgIDlFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDFhIENsYW1wZWQNCi1kZWNkNjcwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMWEgICAgICAgLT4gOS4wRSszNzANCi1kZWNkNjcxIGFwcGx5ICAgOUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDkNCi1kZWNkNjcyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY5DQotZGVjZDY3MyBhcHBseSAgIDlFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDA5DQotZGVjZDY3NCBhcHBseSAgICM0M2Y4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDlFKzM2OA0KLQ0KLQ0KLS0tIFNlbGVjdGVkIERQRCBjb2Rlcw0KLWRlY2Q3MDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZGVjZDcwMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDkNCi1kZWNkNzAyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTAgICAgICAgLT4gMTANCi1kZWNkNzAzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkNCi1kZWNkNzA0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjAgICAgICAgLT4gMjANCi1kZWNkNzA1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkNCi1kZWNkNzA2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzAgICAgICAgLT4gMzANCi1kZWNkNzA3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkNCi1kZWNkNzA4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDAgICAgICAgLT4gNDANCi1kZWNkNzA5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkNCi1kZWNkNzEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTAgICAgICAgLT4gNTANCi1kZWNkNzExIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkNCi1kZWNkNzEyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjAgICAgICAgLT4gNjANCi1kZWNkNzEzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkNCi1kZWNkNzE0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzAgICAgICAgLT4gNzANCi1kZWNkNzE1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzEgICAgICAgLT4gNzENCi1kZWNkNzE2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzIgICAgICAgLT4gNzINCi1kZWNkNzE3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMNCi1kZWNkNzE4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQNCi1kZWNkNzE5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUNCi1kZWNkNzIwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYNCi1kZWNkNzIxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcNCi1kZWNkNzIyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzggICAgICAgLT4gNzgNCi1kZWNkNzIzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkNCi0NCi1kZWNkNzI1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWUgICAgICAgLT4gOTk0DQotZGVjZDcyNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjlmICAgICAgIC0+IDk5NQ0KLWRlY2Q3MjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMCAgICAgICAtPiA1MjANCi1kZWNkNzI4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTEgICAgICAgLT4gNTIxDQotLS0gZnJvbSB0ZWxjbyB0ZXN0IGRhdGENCi1kZWNkNzMwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxODggICAgICAgLT4gMzA4DQotZGVjZDczMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWEzICAgICAgIC0+IDMyMw0KLWRlY2Q3MzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyYSAgICAgICAtPiAgODINCi1kZWNkNzMzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTkgICAgICAgLT4gMzI5DQotZGVjZDczNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDgxICAgICAgIC0+IDEwMQ0KLWRlY2Q3MzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMiAgICAgICAtPiA1MjINCi0NCi0tLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3Vwcw0KLWRlY2Q3NDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcNCi1kZWNkNzQxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4DQotZGVjZDc0MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ViICAgICAgIC0+IDc4Nw0KLWRlY2Q3NDMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcNCi1kZWNkNzQ0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3DQotZGVjZDc0NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQ0KLWRlY2Q3NDYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkNCi1kZWNkNzQ3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQotDQotLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykNCi1kZWNkNzUwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQotZGVjZDc1MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OA0KLWRlY2Q3NTIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgNCi1kZWNkNzUzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4DQotZGVjZDc1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQ0KLWRlY2Q3NTUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkNCi1kZWNkNzU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5DQotZGVjZDc1NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQ0KLQ0KLWRlY2Q3NjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgNCi1kZWNkNzYxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4DQotZGVjZDc2MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OA0KLWRlY2Q3NjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgNCi1kZWNkNzY0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5DQotZGVjZDc2NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQ0KLWRlY2Q3NjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkNCi1kZWNkNzY3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5DQotDQotZGVjZDc3MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVlICAgICAgIC0+IDk4OA0KLWRlY2Q3NzEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZSAgICAgICAtPiA5ODgNCi1kZWNkNzcyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZWUgICAgICAgLT4gOTg4DQotZGVjZDc3MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VlICAgICAgIC0+IDk4OA0KLWRlY2Q3NzQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZiAgICAgICAtPiA5ODkNCi1kZWNkNzc1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZWYgICAgICAgLT4gOTg5DQotZGVjZDc3NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVmICAgICAgIC0+IDk4OQ0KLWRlY2Q3NzcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZiAgICAgICAtPiA5ODkNCi0NCi1kZWNkNzgwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4DQotZGVjZDc4MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OA0KLWRlY2Q3ODIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgNCi1kZWNkNzgzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4DQotZGVjZDc4NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQ0KLWRlY2Q3ODUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkNCi1kZWNkNzg2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5DQotZGVjZDc4NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQ0KLQ0KLS0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikNCi1kZWNkODAwIGFwcGx5IC0yMTQ3NDgzNjQ2ICAtPiAjYTIzODAwMDA4Yzc4YWY0Ng0KLWRlY2Q4MDEgYXBwbHkgLTIxNDc0ODM2NDcgIC0+ICNhMjM4MDAwMDhjNzhhZjQ3DQotZGVjZDgwMiBhcHBseSAtMjE0NzQ4MzY0OCAgLT4gI2EyMzgwMDAwOGM3OGFmNDgNCi1kZWNkODAzIGFwcGx5IC0yMTQ3NDgzNjQ5ICAtPiAjYTIzODAwMDA4Yzc4YWY0OQ0KLWRlY2Q4MDQgYXBwbHkgIDIxNDc0ODM2NDYgIC0+ICMyMjM4MDAwMDhjNzhhZjQ2DQotZGVjZDgwNSBhcHBseSAgMjE0NzQ4MzY0NyAgLT4gIzIyMzgwMDAwOGM3OGFmNDcNCi1kZWNkODA2IGFwcGx5ICAyMTQ3NDgzNjQ4ICAtPiAjMjIzODAwMDA4Yzc4YWY0OA0KLWRlY2Q4MDcgYXBwbHkgIDIxNDc0ODM2NDkgIC0+ICMyMjM4MDAwMDhjNzhhZjQ5DQotZGVjZDgwOCBhcHBseSAgNDI5NDk2NzI5NCAgLT4gIzIyMzgwMDAxMTVhZmI1NWENCi1kZWNkODA5IGFwcGx5ICA0Mjk0OTY3Mjk1ICAtPiAjMjIzODAwMDExNWFmYjU1Yg0KLWRlY2Q4MTAgYXBwbHkgIDQyOTQ5NjcyOTYgIC0+ICMyMjM4MDAwMTE1YWZiNTdhDQotZGVjZDgxMSBhcHBseSAgNDI5NDk2NzI5NyAgLT4gIzIyMzgwMDAxMTVhZmI1N2INCi0NCi1kZWNkODIwIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0NiAtPiAtMjE0NzQ4MzY0Ng0KLWRlY2Q4MjEgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ3IC0+IC0yMTQ3NDgzNjQ3DQotZGVjZDgyMiBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDggLT4gLTIxNDc0ODM2NDgNCi1kZWNkODIzIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OSAtPiAtMjE0NzQ4MzY0OQ0KLWRlY2Q4MjQgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ2IC0+ICAyMTQ3NDgzNjQ2DQotZGVjZDgyNSBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDcgLT4gIDIxNDc0ODM2NDcNCi1kZWNkODI2IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0OCAtPiAgMjE0NzQ4MzY0OA0KLWRlY2Q4MjcgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ5IC0+ICAyMTQ3NDgzNjQ5DQotZGVjZDgyOCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWEgLT4gIDQyOTQ5NjcyOTQNCi1kZWNkODI5IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YiAtPiAgNDI5NDk2NzI5NQ0KLWRlY2Q4MzAgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTdhIC0+ICA0Mjk0OTY3Mjk2DQotZGVjZDgzMSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2IgLT4gIDQyOTQ5NjcyOTcNCi0NCi0tLSBmb3IgbmFycm93aW5nDQotZGVjZDg0MCBhcHBseSAgIzI4NzAwMDAwMDAwMDAwMDAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRS05OQ0KLQ0KLS0tIHNvbWUgbWlzY2VsbGFuZW91cw0KLWRlY2Q4NTAgYXBwbHkgICMwMDA0MDcwMDAwMDAwMDAwIC0+IDcuMDAwMDAwMDAwMDAwRS0zODUgIFN1Ym5vcm1hbA0KLWRlY2Q4NTEgYXBwbHkgICMwMDA4MDAwMDAwMDIwMDAwIC0+IDEuMDAwMDBFLTM5MSAgICAgICAgIFN1Ym5vcm1hbA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIGVpZ2h0LWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWw2NC5kZWNUZXN0XQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIGVpZ2h0LWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uCistLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToKKy0tCistLSAgMSBiaXQgIHNpZ24KKy0tICA1IGJpdHMgY29tYmluYXRpb24gZmllbGQKKy0tICA4IGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uCistLSA1MCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbgorLS0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCAxMCBiaXRzCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggNTQgYml0cyAoMTYgZGlnaXRzKQorLS0KKy0tIEVsaW1pdCA9ICA3NjcgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKKy0tIEVtYXggICA9ICAzODQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpCistLSBFbWluICAgPSAtMzgzIChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkKKy0tIGJpYXMgICA9ICAzOTggKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQorCistLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQorLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKKy0tIHRlc3RjYXNlIGdyb3Vwcy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCistLSBHZW5lcmFsIHRlc3RjYXNlcworLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQorZGVjZTAwMSBhcHBseSAgICNBMjMwMDAwMDAwMDAwM0QwIC0+IC03LjUwCitkZWNlMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMzAwMDAwMDAwMDAzRDAKKy0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MKK2RlY2UwMDMgYXBwbHkgICAjQTIzYzAwMDAwMDAwMDNEMCAtPiAtNy41MEUrMworZGVjZTAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjNjMDAwMDAwMDAwM0QwCitkZWNlMDA1IGFwcGx5ICAgI0EyMzgwMDAwMDAwMDAzRDAgLT4gLTc1MAorZGVjZTAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjM4MDAwMDAwMDAwM0QwCitkZWNlMDA3IGFwcGx5ICAgI0EyMzQwMDAwMDAwMDAzRDAgLT4gLTc1LjAKK2RlY2UwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIzNDAwMDAwMDAwMDNEMAorZGVjZTAwOSBhcHBseSAgICNBMjJjMDAwMDAwMDAwM0QwIC0+IC0wLjc1MAorZGVjZTAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjJjMDAwMDAwMDAwM0QwCitkZWNlMDExIGFwcGx5ICAgI0EyMjgwMDAwMDAwMDAzRDAgLT4gLTAuMDc1MAorZGVjZTAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjI4MDAwMDAwMDAwM0QwCitkZWNlMDEzIGFwcGx5ICAgI0EyMjAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwCitkZWNlMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMjAwMDAwMDAwMDAzRDAKK2RlY2UwMTUgYXBwbHkgICAjQTIxODAwMDAwMDAwMDNEMCAtPiAtMC4wMDAwMDc1MAorZGVjZTAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMjE4MDAwMDAwMDAwM0QwCitkZWNlMDE3IGFwcGx5ICAgI0EyMTQwMDAwMDAwMDAzRDAgLT4gLTcuNTBFLTcKK2RlY2UwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTIxNDAwMDAwMDAwMDNEMAorCistLSBOb3JtYWxpdHkKK2RlY2UwMjAgYXBwbHkgICAxMjM0NTY3ODkwMTIzNDU2ICAgLT4gIzI2MzkzNGI5YzFlMjhlNTYKK2RlY2UwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2ICAgLT4gI2E2MzkzNGI5YzFlMjhlNTYKK2RlY2UwMjIgYXBwbHkgICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gIzI2MDkzNGI5YzFlMjhlNTYKK2RlY2UwMjMgYXBwbHkgICMyNjA5MzRiOWMxZTI4ZTU2ICAgLT4gMTIzNC41Njc4OTAxMjM0NTYKK2RlY2UwMjQgYXBwbHkgICAxMTExMTExMTExMTExMTExICAgLT4gIzI2Mzg5MTI0NDkxMjQ0OTEKK2RlY2UwMjUgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5ICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKKworLS0gTm1heCBhbmQgc2ltaWxhcgorZGVjZTAzMSBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZWNlMDMyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RlY2UwMzMgYXBwbHkgICAjNzdmY2ZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZWNlMDM0IGFwcGx5ICAgMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gIzQ3ZmQzNGI5YzFlMjhlNTYKK2RlY2UwMzUgYXBwbHkgICAjNDdmZDM0YjljMWUyOGU1NiAgICAgICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjZTAzNiBhcHBseSAgIDEuMjNFKzM4NCAgICAgICAgICAgICAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2UwMzcgYXBwbHkgICAjNDdmZDMwMDAwMDAwMDAwMCAgICAgICAtPiAxLjIzMDAwMDAwMDAwMDAwMEUrMzg0CitkZWNkMDM4IGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQ3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDAzOSBhcHBseSAgICM0N2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQKKworZGVjZDA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDA0OWM1CitkZWNkMDUyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzNDUKK2RlY2QwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDUzNAorZGVjZDA1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQKK2RlY2QwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDBhMworZGVjZDA1NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGEzICAgICAgIC0+IDEyMworZGVjZDA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDEyCitkZWNkMDU4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTIgICAgICAgLT4gMTIKK2RlY2QwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMQorZGVjZDA2MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IDEKK2RlY2QwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBhMworZGVjZDA2MiBhcHBseSAgICMyMjMwMDAwMDAwMDAwMGEzICAgICAgIC0+IDEuMjMKK2RlY2QwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwNDljNQorZGVjZDA2NCBhcHBseSAgICMyMjMwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjZDA3MSBhcHBseSAgIDFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICMwMDNjMDAwMDAwMDAwMDAxCitkZWNkMDcyIGFwcGx5ICAgIzAwM2MwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzgzCitkZWNkMDczIGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAKK2RlY2QwNzQgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZWNkMDc1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDEKK2RlY2QwNzYgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCisKK2RlY2QwNzcgYXBwbHkgICAwLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjMDAwMDgwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAorZGVjZDA3OCBhcHBseSAgICMwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsCitkZWNkMDc5IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKK2RlY2QwODAgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFLTM5NyAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+ICMwMDA0MDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNkMDgyIGFwcGx5ICAgIzAwMDQwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzk3ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QwODMgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjZDA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHNtYWxsZXN0IGFsbC1uaW5lcworZGVjZDA4NSBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTlFLTM5OCAgIC0+ICM2NDAwZmYzZmNmZjNmY2ZmCitkZWNkMDg2IGFwcGx5ICAgIzY0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4MworLS0gYW5kIGEgcHJvYmxlbWF0aWMgZGl2aWRlIHJlc3VsdAorZGVjZDA4OCBhcHBseSAgIDEuMTExMTExMTExMTExMTExRS0zODMgIC0+ICMwNDAwOTEyNDQ5MTI0NDkxCitkZWNkMDg5IGFwcGx5ICAgIzA0MDA5MTI0NDkxMjQ0OTEgICAgICAgLT4gMS4xMTExMTExMTExMTExMTFFLTM4MworCistLSBmb3J0aWVzCitkZWNkMDkwIGFwcGx5ICAgICAgICA0MCAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDA0MAorZGVjZDA5MSBhcHBseSAgICAgICAgMzkuOTkgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDBjZmYKKworLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGFzIGFsbCBMSFMgZXhhY3QKKworLS0gU2FtZSBhZ2FpbiwgbmVnYXRpdmVzCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNkMTIyIGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKK2RlY2QxMjMgYXBwbHkgICAjZjdmY2ZmM2ZjZmYzZmNmZiAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGVjZDEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICNjN2ZkMzRiOWMxZTI4ZTU2CitkZWNkMTI1IGFwcGx5ICAgI2M3ZmQzNGI5YzFlMjhlNTYgICAgICAgLT4gLTEuMjM0NTY3ODkwMTIzNDU2RSszODQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNkMTMwIGFwcGx5ICAtMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDEzMSBhcHBseSAgICNjN2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjIzMDAwMDAwMDAwMDAwMEUrMzg0CitkZWNkMTMyIGFwcGx5ICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gI2M3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDEzMyBhcHBseSAgICNjN2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUrMzg0CisKKy0tIG92ZXJmbG93cworZGVjZDE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDA0OWM1CitkZWNkMTUyIGFwcGx5ICAgI2EyMzgwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMzQ1CitkZWNkMTUzIGFwcGx5ICAtMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDA1MzQKK2RlY2QxNTQgYXBwbHkgICAjYTIzODAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNAorZGVjZDE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMGEzCitkZWNkMTU2IGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwYTMgICAgICAgLT4gLTEyMworZGVjZDE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDEyCitkZWNkMTU4IGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwMTIgICAgICAgLT4gLTEyCitkZWNkMTU5IGFwcGx5ICAtMSAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMDEKK2RlY2QxNjAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQorZGVjZDE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDAwMGEzCitkZWNkMTYyIGFwcGx5ICAgI2EyMzAwMDAwMDAwMDAwYTMgICAgICAgLT4gLTEuMjMKK2RlY2QxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwNDljNQorZGVjZDE2NCBhcHBseSAgICNhMjMwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY2QxNzEgYXBwbHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAjODAzYzAwMDAwMDAwMDAwMQorZGVjZDE3MiBhcHBseSAgICM4MDNjMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zODMKK2RlY2QxNzMgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMAorZGVjZDE3NCBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZWNkMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDEKK2RlY2QxNzYgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworCitkZWNkMTc3IGFwcGx5ICAtMC4xMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzgwMDA4MDAwMDAwMDAwMDAgICAgICAgU3Vibm9ybWFsCitkZWNkMTc4IGFwcGx5ICAgIzgwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsCitkZWNkMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMTBFLTM4MyAgLT4gIzgwMDAwMDAwMDAwMDAwMTAgICAgICAgU3Vibm9ybWFsCitkZWNkMTgwIGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gLTEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNkMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzgwMDQwMDAwMDAwMDAwMDEgICAgICAgU3Vibm9ybWFsCitkZWNkMTgyIGFwcGx5ICAgIzgwMDQwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNkMTgzIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgICAgICAgU3Vibm9ybWFsCitkZWNkMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHNtYWxsZXN0IGFsbC1uaW5lcworZGVjZDE4NSBhcHBseSAgIC05OTk5OTk5OTk5OTk5OTk5RS0zOTggICAtPiAjZTQwMGZmM2ZjZmYzZmNmZgorZGVjZDE4NiBhcHBseSAgICNlNDAwZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCistLSBhbmQgYSB0cmlja3kgc3Vibm9ybWFsCitkZWNkMTg3IGFwcGx5ICAgMS4xMTExMTExMTExMTUyNEUtMzg0ICAgIC0+ICMwMDAwOTEyNDQ5MTI0NmE0ICAgICAgU3Vibm9ybWFsCitkZWNkMTg4IGFwcGx5ICAgIzAwMDA5MTI0NDkxMjQ2YTQgICAgICAgIC0+IDEuMTExMTExMTExMTE1MjRFLTM4NCAgU3Vibm9ybWFsCisKKy0tIG5lYXItdW5kZXJmbG93cworZGVjZDE4OSBhcHBseSAgIC0xZS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwKK2RlY2QxOTAgYXBwbHkgICAtMS4wZS0zOTggICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gemVyb3MKK2RlY2Q0MDEgYXBwbHkgICAwRS01MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQwMiBhcHBseSAgIDBFLTQwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDAzIGFwcGx5ICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAKK2RlY2Q0MDQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS0zOTgKK2RlY2Q0MDUgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjMDAwMDAwMDAwMDAwMDAwMAorZGVjZDQwNiBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTM5OAorZGVjZDQwNyBhcHBseSAgIDBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMDAwCitkZWNkNDA4IGFwcGx5ICAgIzIyMzAwMDAwMDAwMDAwMDAgICAgICAgLT4gMC4wMAorZGVjZDQwOSBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwCitkZWNkNDEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZGVjZDQxMSBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjQ0MDAwMDAwMDAwMDAwCitkZWNkNDEyIGFwcGx5ICAgIzIyNDQwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMworZGVjZDQxMyBhcHBseSAgIDBFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwCitkZWNkNDE0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNkNDE1IGFwcGx5ICAgMEUrMzcwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MTYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKK2RlY2Q0MTcgYXBwbHkgICAwRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQxOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorZGVjZDQxOSBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDIwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CitkZWNkNDIxIGFwcGx5ICAgMEUrNTAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MjIgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKKworLS0gbmVnYXRpdmUgemVyb3MKK2RlY2Q0MzEgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQzMiBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDMzIGFwcGx5ICAgLTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAKK2RlY2Q0MzQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtMzk4CitkZWNkNDM1IGFwcGx5ICAgLTAuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gIzgwMDAwMDAwMDAwMDAwMDAKK2RlY2Q0MzYgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtMzk4CitkZWNkNDM3IGFwcGx5ICAgLTBFLTIgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwMDAwMDAwMDAKK2RlY2Q0MzggYXBwbHkgICAjYTIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMC4wMAorZGVjZDQzOSBhcHBseSAgIC0wICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAwCitkZWNkNDQwIGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAKK2RlY2Q0NDEgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAjYTI0NDAwMDAwMDAwMDAwMAorZGVjZDQ0MiBhcHBseSAgICNhMjQ0MDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszCitkZWNkNDQzIGFwcGx5ICAgLTBFKzM2OSAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAKK2RlY2Q0NDQgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5CistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNkNDQ1IGFwcGx5ICAgLTBFKzM3MCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0NDYgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5CitkZWNkNDQ3IGFwcGx5ICAgLTBFKzM4NCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0NDggYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5CitkZWNkNDQ5IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0NTAgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5CitkZWNkNDUxIGFwcGx5ICAgLTBFKzUwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0NTIgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5CisKKy0tIGV4cG9uZW50cworZGVjZDQ2MCBhcHBseSAgICMyMjVjMDAwMDAwMDAwMDA3IC0+IDdFKzkKK2RlY2Q0NjEgYXBwbHkgICA3RSs5ICAtPiAjMjI1YzAwMDAwMDAwMDAwNworZGVjZDQ2MiBhcHBseSAgICMyM2M0MDAwMDAwMDAwMDA3IC0+IDdFKzk5CitkZWNkNDYzIGFwcGx5ICAgN0UrOTkgLT4gIzIzYzQwMDAwMDAwMDAwMDcKKworLS0gU3BlY2lhbHMKK2RlY2Q1MDAgYXBwbHkgICBJbmZpbml0eSAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwMSBhcHBseSAgICM3ODc4Nzg3ODc4Nzg3ODc4IC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTAyIGFwcGx5ICAgIzc4MDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY2Q1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OSAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNkNTA1IGFwcGx5ICAgIzdhN2E3YTdhN2E3YTdhN2EgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjZDUwNyBhcHBseSAgICM3YjdiN2I3YjdiN2I3YjdiIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTA4IGFwcGx5ICAgIzdiMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKKworZGVjZDUwOSBhcHBseSAgIE5hTiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwCitkZWNkNTEwIGFwcGx5ICAgIzdjN2M3YzdjN2M3YzdjN2MgLT4gIzdjMDA3YzdjN2M3YzdjN2MKK2RlY2Q1MTEgYXBwbHkgICAjN2MwMDAwMDAwMDAwMDAwMCAtPiBOYU4KK2RlY2Q1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjN2MwMTdkN2Q3ZDdkN2Q3ZAorZGVjZDUxMyBhcHBseSAgICM3ZDAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjZDUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwN2U3ZTdlN2U3YzdlCitkZWNkNTE1IGFwcGx5ICAgIzdlMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjZDUxNiBhcHBseSAgICM3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICM3ZTAwN2Y3ZjdmN2Y3YzdmCitkZWNkNTE3IGFwcGx5ICAgIzdmMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjZDUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+IHNOYU45OTk5OTk5OTk5OTk5OTkKK2RlY2Q1MTkgYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZiAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorCitkZWNkNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjEgYXBwbHkgICAjZjg3ODc4Nzg3ODc4Nzg3OCAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjZDUyMyBhcHBseSAgICNmOTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTI0IGFwcGx5ICAgI2Y5MDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNkNTI1IGFwcGx5ICAgI2ZhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjYgYXBwbHkgICAjZmEwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY2Q1MjcgYXBwbHkgICAjZmI3YjdiN2I3YjdiN2I3YiAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorCitkZWNkNTI5IGFwcGx5ICAgLU5hTiAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAKK2RlY2Q1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YyAtPiAjZmMwMDdjN2M3YzdjN2M3YworZGVjZDUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY2Q1MzIgYXBwbHkgICAjZmQ3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjZmMwMTdkN2Q3ZDdkN2Q3ZAorZGVjZDUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4KK2RlY2Q1MzQgYXBwbHkgICAjZmU3ZTdlN2U3ZTdlN2U3ZSAtPiAjZmUwMDdlN2U3ZTdlN2M3ZQorZGVjZDUzNSBhcHBseSAgICNmZTAwMDAwMDAwMDAwMDAwIC0+IC1zTmFOCitkZWNkNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2YgLT4gI2ZlMDA3ZjdmN2Y3ZjdjN2YKK2RlY2Q1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjZDUzOCBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmIC0+IC1zTmFOOTk5OTk5OTk5OTk5OTk5CitkZWNkNTM5IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDBmZjNmY2ZmM2ZjZmYKKworLS0gZGlhZ25vc3RpYyBOYU5zCitkZWNkNTQwIGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMAorZGVjZDU0MSBhcHBseSAgIE5hTjAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAKK2RlY2Q1NDIgYXBwbHkgICBOYU4xICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAxCitkZWNkNTQzIGFwcGx5ICAgTmFOMTIgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAxMgorZGVjZDU0NCBhcHBseSAgIE5hTjc5ICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwNzkKK2RlY2Q1NDUgYXBwbHkgICBOYU4xMjM0NSAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDA0OWM1CitkZWNkNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAyOGU1NgorZGVjZDU0NyBhcHBseSAgIE5hTjc5OTc5OSAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwZjdmZGYKK2RlY2Q1NDggYXBwbHkgICBOYU43OTk3OTk3OTk3OTk3OTkgIC0+ICM3YzAzZGZmN2ZkZmY3ZmRmCitkZWNkNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gdG9vIG1hbnkgZGlnaXRzCisKKy0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlCitkZWNkNjAxIGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQ3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYwMiBhcHBseSAgICM0N2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQKK2RlY2Q2MDMgYXBwbHkgICAxRSszODMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzgwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjA0IGFwcGx5ICAgIzQzZmM4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzCitkZWNkNjA1IGFwcGx5ICAgMUUrMzgyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMxMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYwNiBhcHBseSAgICM0M2ZjMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyCitkZWNkNjA3IGFwcGx5ICAgMUUrMzgxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMTAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYwOCBhcHBseSAgICM0M2ZjMDEwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwRSszODEKK2RlY2Q2MDkgYXBwbHkgICAxRSszODAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMjAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjEwIGFwcGx5ICAgIzQzZmMwMDIwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrMzgwCitkZWNkNjExIGFwcGx5ICAgMUUrMzc5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDA0MDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYxMiBhcHBseSAgICM0M2ZjMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrMzc5CitkZWNkNjEzIGFwcGx5ICAgMUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwNDAwMDAwMDAgQ2xhbXBlZAorZGVjZDYxNCBhcHBseSAgICM0M2ZjMDAwMDQwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwRSszNzgKK2RlY2Q2MTUgYXBwbHkgICAxRSszNzcgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwODAwMDAwMCBDbGFtcGVkCitkZWNkNjE2IGFwcGx5ICAgIzQzZmMwMDAwMDgwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMEUrMzc3CitkZWNkNjE3IGFwcGx5ICAgMUUrMzc2ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDEwMDAwMDAgQ2xhbXBlZAorZGVjZDYxOCBhcHBseSAgICM0M2ZjMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrMzc2CitkZWNkNjE5IGFwcGx5ICAgMUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAxMDAwMDAgQ2xhbXBlZAorZGVjZDYyMCBhcHBseSAgICM0M2ZjMDAwMDAwMTAwMDAwICAgICAgIC0+IDEuMDAwMDAwRSszNzUKK2RlY2Q2MjEgYXBwbHkgICAxRSszNzQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAyMDAwMCBDbGFtcGVkCitkZWNkNjIyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMjAwMDAgICAgICAgLT4gMS4wMDAwMEUrMzc0CitkZWNkNjIzIGFwcGx5ICAgMUUrMzczICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDQwMDAgQ2xhbXBlZAorZGVjZDYyNCBhcHBseSAgICM0M2ZjMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrMzczCitkZWNkNjI1IGFwcGx5ICAgMUUrMzcyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDA0MDAgQ2xhbXBlZAorZGVjZDYyNiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwNDAwICAgICAgIC0+IDEuMDAwRSszNzIKK2RlY2Q2MjcgYXBwbHkgICAxRSszNzEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDA4MCBDbGFtcGVkCitkZWNkNjI4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwODAgICAgICAgLT4gMS4wMEUrMzcxCitkZWNkNjI5IGFwcGx5ICAgMUUrMzcwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMTAgQ2xhbXBlZAorZGVjZDYzMCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrMzcwCitkZWNkNjMxIGFwcGx5ICAgMUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDEKK2RlY2Q2MzIgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSszNjkKK2RlY2Q2MzMgYXBwbHkgICAxRSszNjggICAgICAgICAgICAgICAgICAtPiAjNDNmODAwMDAwMDAwMDAwMQorZGVjZDYzNCBhcHBseSAgICM0M2Y4MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OAorLS0gc2FtZSB3aXRoIDlzCitkZWNkNjQxIGFwcGx5ICAgOUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzc3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY0MiBhcHBseSAgICM3N2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQKK2RlY2Q2NDMgYXBwbHkgICA5RSszODMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzhjMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQ0IGFwcGx5ICAgIzQzZmM4YzAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMEUrMzgzCitkZWNkNjQ1IGFwcGx5ICAgOUUrMzgyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMxYTAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY0NiBhcHBseSAgICM0M2ZjMWEwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMEUrMzgyCitkZWNkNjQ3IGFwcGx5ICAgOUUrMzgxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwOTAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY0OCBhcHBseSAgICM0M2ZjMDkwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwRSszODEKK2RlY2Q2NDkgYXBwbHkgICA5RSszODAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMjMwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjUwIGFwcGx5ICAgIzQzZmMwMDIzMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMEUrMzgwCitkZWNkNjUxIGFwcGx5ICAgOUUrMzc5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDA2ODAwMDAwMDAgQ2xhbXBlZAorZGVjZDY1MiBhcHBseSAgICM0M2ZjMDAwNjgwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMEUrMzc5CitkZWNkNjUzIGFwcGx5ICAgOUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAyNDAwMDAwMDAgQ2xhbXBlZAorZGVjZDY1NCBhcHBseSAgICM0M2ZjMDAwMjQwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwRSszNzgKK2RlY2Q2NTUgYXBwbHkgICA5RSszNzcgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwOGMwMDAwMCBDbGFtcGVkCitkZWNkNjU2IGFwcGx5ICAgIzQzZmMwMDAwMDhjMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMEUrMzc3CitkZWNkNjU3IGFwcGx5ICAgOUUrMzc2ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDFhMDAwMDAgQ2xhbXBlZAorZGVjZDY1OCBhcHBseSAgICM0M2ZjMDAwMDAxYTAwMDAwICAgICAgIC0+IDkuMDAwMDAwMEUrMzc2CitkZWNkNjU5IGFwcGx5ICAgOUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDA5MDAwMDAgQ2xhbXBlZAorZGVjZDY2MCBhcHBseSAgICM0M2ZjMDAwMDAwOTAwMDAwICAgICAgIC0+IDkuMDAwMDAwRSszNzUKK2RlY2Q2NjEgYXBwbHkgICA5RSszNzQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAyMzAwMCBDbGFtcGVkCitkZWNkNjYyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMjMwMDAgICAgICAgLT4gOS4wMDAwMEUrMzc0CitkZWNkNjYzIGFwcGx5ICAgOUUrMzczICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDY4MDAgQ2xhbXBlZAorZGVjZDY2NCBhcHBseSAgICM0M2ZjMDAwMDAwMDA2ODAwICAgICAgIC0+IDkuMDAwMEUrMzczCitkZWNkNjY1IGFwcGx5ICAgOUUrMzcyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDI0MDAgQ2xhbXBlZAorZGVjZDY2NiBhcHBseSAgICM0M2ZjMDAwMDAwMDAyNDAwICAgICAgIC0+IDkuMDAwRSszNzIKK2RlY2Q2NjcgYXBwbHkgICA5RSszNzEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDA4YyBDbGFtcGVkCitkZWNkNjY4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwOGMgICAgICAgLT4gOS4wMEUrMzcxCitkZWNkNjY5IGFwcGx5ICAgOUUrMzcwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMWEgQ2xhbXBlZAorZGVjZDY3MCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDFhICAgICAgIC0+IDkuMEUrMzcwCitkZWNkNjcxIGFwcGx5ICAgOUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDkKK2RlY2Q2NzIgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwOSAgICAgICAtPiA5RSszNjkKK2RlY2Q2NzMgYXBwbHkgICA5RSszNjggICAgICAgICAgICAgICAgICAtPiAjNDNmODAwMDAwMDAwMDAwOQorZGVjZDY3NCBhcHBseSAgICM0M2Y4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDlFKzM2OAorCisKKy0tIFNlbGVjdGVkIERQRCBjb2RlcworZGVjZDcwMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDAKK2RlY2Q3MDEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwOSAgICAgICAtPiA5CitkZWNkNzAyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTAgICAgICAgLT4gMTAKK2RlY2Q3MDMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxOSAgICAgICAtPiAxOQorZGVjZDcwNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDIwICAgICAgIC0+IDIwCitkZWNkNzA1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkKK2RlY2Q3MDYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAzMCAgICAgICAtPiAzMAorZGVjZDcwNyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDM5ICAgICAgIC0+IDM5CitkZWNkNzA4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDAgICAgICAgLT4gNDAKK2RlY2Q3MDkgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA0OSAgICAgICAtPiA0OQorZGVjZDcxMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDUwICAgICAgIC0+IDUwCitkZWNkNzExIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkKK2RlY2Q3MTIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2MCAgICAgICAtPiA2MAorZGVjZDcxMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDY5ICAgICAgIC0+IDY5CitkZWNkNzE0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzAgICAgICAgLT4gNzAKK2RlY2Q3MTUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MSAgICAgICAtPiA3MQorZGVjZDcxNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDcyICAgICAgIC0+IDcyCitkZWNkNzE3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMKK2RlY2Q3MTggYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NCAgICAgICAtPiA3NAorZGVjZDcxOSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc1ICAgICAgIC0+IDc1CitkZWNkNzIwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYKK2RlY2Q3MjEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NyAgICAgICAtPiA3NworZGVjZDcyMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc4ICAgICAgIC0+IDc4CitkZWNkNzIzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkKKworZGVjZDcyNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjllICAgICAgIC0+IDk5NAorZGVjZDcyNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjlmICAgICAgIC0+IDk5NQorZGVjZDcyNyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMAorZGVjZDcyOCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmExICAgICAgIC0+IDUyMQorLS0gZnJvbSB0ZWxjbyB0ZXN0IGRhdGEKK2RlY2Q3MzAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE4OCAgICAgICAtPiAzMDgKK2RlY2Q3MzEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFhMyAgICAgICAtPiAzMjMKK2RlY2Q3MzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyYSAgICAgICAtPiAgODIKK2RlY2Q3MzMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFhOSAgICAgICAtPiAzMjkKK2RlY2Q3MzQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA4MSAgICAgICAtPiAxMDEKK2RlY2Q3MzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMiAgICAgICAtPiA1MjIKKworLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKK2RlY2Q3NDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcKK2RlY2Q3NDEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmOCAgICAgICAtPiA3NzgKK2RlY2Q3NDIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlYiAgICAgICAtPiA3ODcKK2RlY2Q3NDMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcKK2RlY2Q3NDQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM5ZiAgICAgICAtPiA5OTcKK2RlY2Q3NDUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNiZiAgICAgICAtPiA5NzkKK2RlY2Q3NDYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkKK2RlY2Q3NDcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgKKworLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykKK2RlY2Q3NTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgKK2RlY2Q3NTEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE2ZSAgICAgICAtPiA4ODgKK2RlY2Q3NTIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgKK2RlY2Q3NTMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM2ZSAgICAgICAtPiA4ODgKK2RlY2Q3NTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2ZiAgICAgICAtPiA4ODkKK2RlY2Q3NTUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkKK2RlY2Q3NTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI2ZiAgICAgICAtPiA4ODkKK2RlY2Q3NTcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM2ZiAgICAgICAtPiA4ODkKKworZGVjZDc2MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDdlICAgICAgIC0+IDg5OAorZGVjZDc2MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTdlICAgICAgIC0+IDg5OAorZGVjZDc2MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OAorZGVjZDc2MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdlICAgICAgIC0+IDg5OAorZGVjZDc2NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDdmICAgICAgIC0+IDg5OQorZGVjZDc2NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQorZGVjZDc2NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjdmICAgICAgIC0+IDg5OQorZGVjZDc2NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdmICAgICAgIC0+IDg5OQorCitkZWNkNzcwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4CitkZWNkNzcxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZWUgICAgICAgLT4gOTg4CitkZWNkNzcyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZWUgICAgICAgLT4gOTg4CitkZWNkNzczIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4CitkZWNkNzc0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZWYgICAgICAgLT4gOTg5CitkZWNkNzc1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZWYgICAgICAgLT4gOTg5CitkZWNkNzc2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5CitkZWNkNzc3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWYgICAgICAgLT4gOTg5CisKK2RlY2Q3ODAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBmZSAgICAgICAtPiA5OTgKK2RlY2Q3ODEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFmZSAgICAgICAtPiA5OTgKK2RlY2Q3ODIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgKK2RlY2Q3ODMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmZSAgICAgICAtPiA5OTgKK2RlY2Q3ODQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBmZiAgICAgICAtPiA5OTkKK2RlY2Q3ODUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkKK2RlY2Q3ODYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJmZiAgICAgICAtPiA5OTkKK2RlY2Q3ODcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmZiAgICAgICAtPiA5OTkKKworLS0gdmFsdWVzIGFyb3VuZCBbdV1pbnQzMiBlZGdlcyAoemVyb3MgZG9uZSBlYXJsaWVyKQorZGVjZDgwMCBhcHBseSAtMjE0NzQ4MzY0NiAgLT4gI2EyMzgwMDAwOGM3OGFmNDYKK2RlY2Q4MDEgYXBwbHkgLTIxNDc0ODM2NDcgIC0+ICNhMjM4MDAwMDhjNzhhZjQ3CitkZWNkODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIzODAwMDA4Yzc4YWY0OAorZGVjZDgwMyBhcHBseSAtMjE0NzQ4MzY0OSAgLT4gI2EyMzgwMDAwOGM3OGFmNDkKK2RlY2Q4MDQgYXBwbHkgIDIxNDc0ODM2NDYgIC0+ICMyMjM4MDAwMDhjNzhhZjQ2CitkZWNkODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIzODAwMDA4Yzc4YWY0NworZGVjZDgwNiBhcHBseSAgMjE0NzQ4MzY0OCAgLT4gIzIyMzgwMDAwOGM3OGFmNDgKK2RlY2Q4MDcgYXBwbHkgIDIxNDc0ODM2NDkgIC0+ICMyMjM4MDAwMDhjNzhhZjQ5CitkZWNkODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIzODAwMDExNWFmYjU1YQorZGVjZDgwOSBhcHBseSAgNDI5NDk2NzI5NSAgLT4gIzIyMzgwMDAxMTVhZmI1NWIKK2RlY2Q4MTAgYXBwbHkgIDQyOTQ5NjcyOTYgIC0+ICMyMjM4MDAwMTE1YWZiNTdhCitkZWNkODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIzODAwMDExNWFmYjU3YgorCitkZWNkODIwIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0NiAtPiAtMjE0NzQ4MzY0NgorZGVjZDgyMSBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcKK2RlY2Q4MjIgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ4IC0+IC0yMTQ3NDgzNjQ4CitkZWNkODIzIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OSAtPiAtMjE0NzQ4MzY0OQorZGVjZDgyNCBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYKK2RlY2Q4MjUgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ3IC0+ICAyMTQ3NDgzNjQ3CitkZWNkODI2IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0OCAtPiAgMjE0NzQ4MzY0OAorZGVjZDgyNyBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkKK2RlY2Q4MjggYXBwbHkgICMyMjM4MDAwMTE1YWZiNTVhIC0+ICA0Mjk0OTY3Mjk0CitkZWNkODI5IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YiAtPiAgNDI5NDk2NzI5NQorZGVjZDgzMCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYKK2RlY2Q4MzEgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTdiIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIGZvciBuYXJyb3dpbmcKK2RlY2Q4NDAgYXBwbHkgICMyODcwMDAwMDAwMDAwMDAwIC0+ICAyLjAwMDAwMDAwMDAwMDAwMEUtOTkKKworLS0gc29tZSBtaXNjZWxsYW5lb3VzCitkZWNkODUwIGFwcGx5ICAjMDAwNDA3MDAwMDAwMDAwMCAtPiA3LjAwMDAwMDAwMDAwMEUtMzg1ICBTdWJub3JtYWwKK2RlY2Q4NTEgYXBwbHkgICMwMDA4MDAwMDAwMDIwMDAwIC0+IDEuMDAwMDBFLTM5MSAgICAgICAgIFN1Ym5vcm1hbAorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRGTUEuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0CmluZGV4IGYwYWNmYzcuLjhhZTkyYTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0CkBAIC0xLDE2OTggKzEsMTY5OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRGTUEuZGVjVGVzdCAtLSBkZWNEb3VibGUgRnVzZWQgTXVsdGlwbHkgQWRkICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6DQotLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlDQotLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkNCi0tLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pDQotLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQ0KLS0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQ0KLS0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5DQotLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuDQotDQotLS0gU2FuaXR5IGNoZWNrcw0KLWRkZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDINCi1kZGZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzDQotZGRmbWEwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNw0KLWRkZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTANCi1kZGZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwDQotZGRmbWEwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQ0KLWRkZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTENCi1kZGZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyDQotZGRmbWEwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMA0KLWRkZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDENCi1kZGZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xDQotZGRmbWEwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03Mg0KLWRkZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDANCi1kZGZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xDQotZGRmbWEwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQ0KLWRkZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzINCi0NCi0tLSBub24taW50ZWdlciBleGFjdHMNCi1kZGZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyDQotZGRmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MA0KLWRkZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYNCi1kZGZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjINCi1kZGZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4DQotZGRmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMw0KLWRkZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1DQotZGRmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOA0KLWRkZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1Mw0KLWRkZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkNCi1kZGZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yDQotZGRmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzDQotZGRmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMA0KLWRkZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OA0KLWRkZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQNCi1kZGZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNg0KLWRkZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOA0KLWRkZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDINCi1kZGZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4DQotZGRmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NA0KLWRkZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExDQotDQotLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoDQotLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQNCi0tLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDcuMTIzMzU2NDI5MjU3OTY5RSsxNg0KLWRkZm1hMDIwMSAgZm1hICAgICAgIDI3NTgzNDg5LjY2NDUgICAgICAyNTgyNDcxMDc4LjA0ICAgICAgMjU5MzE4My40MjM3MSAgLT4gIDcuMTIzMzU2NDI5MjU3OTcwRSsxNiAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIyODEzMjc1MzI4LjgwNTA2DQotZGRmbWEwMjA4ICBmbWEgICAgICAgIDI0MjgwLjM1NTU2NiAgICAgIDkzOTU3Ny4zOTc2NTMgICAgICAgIDIwMzIuMDEzMjUyICAtPiAgMjI4MTMyNzUzMjguODA1MDcgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuMDMwMzk3NzM0Mjc4MDYyRSsxNg0KLWRkZm1hMDIwOSAgZm1hICAgICAgICAgIDc4NDg5NzY0MzIgICAgICAtMjU4NjgzMS4yMjgxICAgICAgMTM3OTAzLjUxNzkwOSAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MUUrMTYgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc3DQotZGRmbWEwMjE3ICBmbWEgICAgICAgIDU2ODkwLjM4ODczMSAgICAgIDM1ODcyMDMwLjQyNTUgICAgICAzMzkzMzcuMTIzNDEwICAtPiAgMjA0MDc3NDA5NDgxNC4wNzggICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi43MTQ0Njk1NzUyMDUwNDlFKzE4DQotZGRmbWEwMjIwICBmbWEgICAgICAgNzUzMzU0My41NzQ0NSAgICAgICAzNjAzMTc3NjM5MjggICAgICA1MDczMzkyLjMxNjM4ICAtPiAgMi43MTQ0Njk1NzUyMDUwNTBFKzE4ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4wMTE2NzYyOTc3MTY3MTZFKzE5DQotZGRmbWEwMjIzICBmbWEgICAgICAgNzM5OTQ1MjU1LjU2MyAgICAgIDEzNjcyMzEyNzg0LjEgICAgICAtOTk0MzgxLjUzNTcyICAtPiAgMS4wMTE2NzYyOTc3MTY3MTVFKzE5ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE1RSsyMw0KLWRkZm1hMDIyNCAgZm1hICAgICAgIC00MTM1MTA5NTcyMTggICAgICAgNzA0NzI5OTg4NTUwICAgICAgIDkyMzQxNjI2MTQuMCAgLT4gIC0yLjkxNDEzNTcyMTQ1NTMxNEUrMjMgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg2RSsxNw0KLWRkZm1hMDIyNiAgZm1hICAgICAgICA0Mzc0ODQuMDA2MDEgICAgICAgNTk4OTA2NDMyNzkwICAgICAgODk0NDUwNjM4LjQ0MiAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg3RSsxNyAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMjcyNjQ3OTk1ODA4MTc4RSsxOQ0KLWRkZm1hMDI1MyAgZm1hICAgICAgICAgNzMyODc1NTY5MjkgICAgICAxNzM2NTEzMDUuNzg0ICAgICAtMzU4MzEyNTY4LjM4OSAgLT4gIDEuMjcyNjQ3OTk1ODA4MTc3RSsxOSAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MUUrMTgNCi1kZGZtYTAyNTcgIGZtYSAgICAgICAgMjAzMjU4MzA0NDg2ICAgICAgLTg2MjgyNzguODA2NiAgICAgIDE1MzEyNy40NDY3MjcgIC0+ICAtMS43NTM3NjkzMjA4NjE4NTBFKzE4IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDZFKzE3DQotZGRmbWEwMjYwICBmbWEgICAgICAgNDI1NjA1MzMuMTc3NCAgICAgLTM2NDM2MDUyODIuODYgICAgICAgMTc4Mjc3Ljk2Mzc3ICAtPiAgLTEuNTUwNzM3ODM1MjYzMzQ3RSsxNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi44OTc2MjQ2MjA1NzYwMDVFKzIyDQotZGRmbWEwMjY5ICBmbWEgICAgICAgIDE0MjY1NjU4NzM3NSAgICAgICAyMDMxMTg4Nzk2NzAgICAgICAgNjA0NTc2MTAzOTkxICAtPiAgMi44OTc2MjQ2MjA1NzYwMDRFKzIyICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBDYXNlcyB3aGVyZSBtdWx0aXBseSB3b3VsZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaWYgc2VwYXJhdGUNCi1mbWEwMzAwICBmbWEgICA5ZSszODQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYTAzMDEgIGZtYSAgIDFlKzM4NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1hMDMwMiAgZm1hICAgMWUrMzg0ICAgIDEwICAgLTFlKzM4NCAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQNCi1mbWEwMzAzICBmbWEgICAxZSszODQgICAgMTAgICAtOWUrMzg0ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KLS0tIHN1Ym5vcm1hbCBldGMuDQotZm1hMDMwNSAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMCAgICAgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1hMDMwNiAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMSAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYTAzMDcgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDFlLTM5OCAgICAtPiAxRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMNCi1kZGZtYTA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZGRmbWEwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1kZGZtYTA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1kZGZtYTA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZGRmbWEwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uDQotZGRmbWEwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yDQotZGRmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zDQotZGRmbWEwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41DQotLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nDQotLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpDQotZGRmbWEwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwOTA0IGZtYSAgMCAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwOTA3IGZtYSAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkZm1hMjAwMCBmbWEgIDIgICAgICAyICAgMGUrMzg0ICAtPiAgNA0KLWRkZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrMzg0ICAtPiAgNg0KLWRkZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrMzg0ICAtPiAgNQ0KLWRkZm1hMjAwMyBmbWEgIDUgICAgICAyICAgMGUrMzg0ICAtPiAgMTANCi1kZGZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzM4NCAgLT4gIDIuNDANCi1kZGZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzM4NCAgLT4gIDAuMDANCi1kZGZtYTIwMDYgZm1hICAxLjIwICAtMiAgIDBlKzM4NCAgLT4gIC0yLjQwDQotZGRmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSszODQgIC0+ICAtMi40MA0KLWRkZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrMzg0ICAtPiAgMC4wMA0KLWRkZm1hMjAwOSBmbWEgIC0xLjIwIC0yICAgMGUrMzg0ICAtPiAgMi40MA0KLWRkZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrMzg0ICAtPiAgMzYuMTM5DQotZGRmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSszODQgIC0+ICAxMC4wDQotZGRmbWEyMDEyIGZtYSAgMi41MCAgIDQgICAwZSszODQgIC0+ICAxMC4wMA0KLWRkZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgIDBlKzM4NCAgLT4gIDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQNCi1kZGZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwDQotZGRmbWEyMDE2IGZtYSAgIDkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjAxOCBmbWEgIC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyMDE5IGZtYSAgLTkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB6ZXJvcywgZXRjLg0KLWRkZm1hMjAyMSBmbWEgICAwICAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjAyNCBmbWEgIC0wICAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjAyNyBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMA0KLWRkZm1hMjAzMSBmbWEgICAwMC4wMCAgMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMA0KLWRkZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZGZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRmbWEyMDM0IGZtYSAgLTUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gIC0wLjAwNTAwDQotZGRmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwDQotZGRmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRkZm1hMjAzNyBmbWEgIC0wRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kZGZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDANCi1kZGZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDANCi1kZGZtYTIwNDAgZm1hICAgMDAuMDAgLTBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZGRmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRkZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMA0KLWRkZm1hMjA0MyBmbWEgIC0wMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMA0KLWRkZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZGZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZGRmbWEyMDQ2IGZtYSAgLTBFLTMgICAwMC4wMCAgLTBlKzM4NCAgLT4gIC0wLjAwMDAwDQotZGRmbWEyMDQ3IGZtYSAgIDBFLTMgIC0wMC4wMCAgLTBlKzM4NCAgLT4gIC0wLjAwMDAwDQotZGRmbWEyMDQ4IGZtYSAgIDBFLTMgICAwMC4wMCAgLTBlKzM4NCAgLT4gICAwLjAwMDAwDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KLWRkZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSszODQgIC0+ICAzLjYwDQotZGRmbWEyMDUxIGZtYSAgNyAgICAzICAgICAgICAgIDBlKzM4NCAgLT4gIDIxDQotZGRmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzM4NCAgLT4gIDAuNzINCi1kZGZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrMzg0ICAtPiAgMC4wDQotZGRmbWEyMDU0IGZtYSAgNjU0MzIxIDY1NDMyMSAgIDBlKzM4NCAgLT4gIDQyODEzNTk3MTA0MQ0KLQ0KLWRkZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrOQ0KLWRkZm1hMjA2MSBmbWEgIDEyMy40NSAxZTggICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTANCi1kZGZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzExDQotZGRmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMg0KLWRkZm1hMjA2NCBmbWEgIDEyMy40NSAxZTExICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTMNCi1kZGZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE0DQotZGRmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxNQ0KLQ0KLQ0KLS0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3Rocw0KLS0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kZGZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQ0KLWRkZm1hMjA5MCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45DQotZGRmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkNCi0NCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQotZGRmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQ0KLWRkZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzM4NCAgLT4gIDgxMA0KLWRkZm1hMjEwMyBmbWEgIDkgOTAwICAgICAwZSszODQgIC0+ICA4MTAwDQotZGRmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMA0KLWRkZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMA0KLWRkZm1hMjEwNiBmbWEgIDkgOTAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwDQotZGRmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMA0KLWRkZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMA0KLWRkZm1hMjEwOSBmbWEgIDkgOTAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwDQotZGRmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMA0KLWRkZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMA0KLWRkZm1hMjExMiBmbWEgIDkgOTAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwDQotZGRmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMA0KLWRkZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMA0KLWRkZm1hMjExNSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjExOCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRkZm1hMjEyMSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZGZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2Fycmllcw0KLWRkZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrMzg0ICAtPiAgOQ0KLWRkZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzM4NCAgLT4gIDkwDQotZGRmbWEyMTMzIGZtYSAgMyAzMDAgICAgIDBlKzM4NCAgLT4gIDkwMA0KLWRkZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMA0KLWRkZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwDQotZGRmbWEyMTM2IGZtYSAgMyAzMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMA0KLWRkZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMA0KLWRkZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwDQotZGRmbWEyMTM5IGZtYSAgMyAzMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMA0KLWRkZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMA0KLWRkZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwDQotZGRmbWEyMTQyIGZtYSAgMyAzMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMA0KLWRkZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMA0KLWRkZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAwDQotZGRmbWEyMTQ1IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcNCi1kZGZtYTIzMDEgZm1hICA5IDkgICAgIDBlKzM4NCAgLT4gIDgxDQotZGRmbWEyMzAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwDQotZGRmbWEyMzAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDANCi1kZGZtYTIzMDQgZm1hICA5IDkwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwDQotZGRmbWEyMzA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwDQotZGRmbWEyMzA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDANCi1kZGZtYTIzMDcgZm1hICA5IDkwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwDQotZGRmbWEyMzA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwDQotZGRmbWEyMzA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDANCi1kZGZtYTIzMTAgZm1hICA5IDkwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwDQotZGRmbWEyMzExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwDQotZGRmbWEyMzEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDANCi1kZGZtYTIzMTMgZm1hICA5IDkwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwDQotZGRmbWEyMzE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwDQotZGRmbWEyMzE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDANCi1kZGZtYTIzMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZA0KLWRkZm1hMjMxNyBmbWEgIDkwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZA0KLWRkZm1hMjMxOCBmbWEgIDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTggIFJvdW5kZWQNCi1kZGZtYTIzMTkgZm1hICA5MDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOSAgUm91bmRlZA0KLWRkZm1hMjMyMCBmbWEgIDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KLWRkZm1hMjMyMSBmbWEgIDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjEgIFJvdW5kZWQNCi1kZGZtYTIzMjIgZm1hICA5MDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMiAgUm91bmRlZA0KLWRkZm1hMjMyMyBmbWEgIDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotZGRmbWEyNTA0ICBmbWEgICAwRS0yNjAgMTAwMEUtMjYwICAgIDBlKzM4NCAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZGRmbWEyNTA1ICBmbWEgICAxMDBFKzI2MCAwRSsyNjAgICAgIDBlKzM4NCAgLT4gIDBFKzM2OSBDbGFtcGVkDQotDQotLS0gbWl4ZWQgd2l0aCB6ZXJvcw0KLWRkZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyNTQyIGZtYSAgLTAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDANCi1kZGZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyNTQ1IGZtYSAgLTEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDANCi1kZGZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMA0KLWRkZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwDQotZGRmbWEyNTQ4IGZtYSAgIDEgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDANCi0NCi1kZGZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTUyIGZtYSAgLTAuMCAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTU1IGZtYSAgLTEuMCAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTU4IGZtYSAgIDEuMCAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLQ0KLWRkZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NjIgZm1hICAtMCAgICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NjUgZm1hICAtMSAgICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wDQotZGRmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KLWRkZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCi1kZGZtYTI1NjggZm1hICAgMSAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wDQotDQotZGRmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCi1kZGZtYTI1NzIgZm1hICAtMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCi1kZGZtYTI1NzUgZm1hICAtMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLWRkZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQotZGRmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCi1kZGZtYTI1NzggZm1hICAgMS4wICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRmbWEyNTgwIGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTgyIGZtYSAgIEluZiAgLTEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNTgzIGZtYSAgIEluZiAgLTAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjU4NSBmbWEgICBJbmYgICAxICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjU4NiBmbWEgICBJbmYgICAxMDAwICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KLWRkZm1hMjU4OCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLWRkZm1hMjU4OSBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLWRkZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLWRkZm1hMjU5MSBmbWEgIC0wICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNTkyIGZtYSAgIDAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI1OTQgZm1hICAgMTAwMCAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI1OTUgZm1hICAgSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi0NCi1kZGZtYTI2MDAgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI2MDEgZm1hICAtSW5mICAtMTAwMCAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCi1kZGZtYTI2MDMgZm1hICAtSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjYwNCBmbWEgIC1JbmYgICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjA2IGZtYSAgLUluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjA3IGZtYSAgLUluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQotZGRmbWEyNjA5IGZtYSAgLUluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQotZGRmbWEyNjEwIGZtYSAgLTEgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQotZGRmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2MTIgZm1hICAgMCAgICAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjYxMyBmbWEgICAxICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLWRkZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLWRkZm1hMjYxNSBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQ0KLQ0KLWRkZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjIgZm1hICAgTmFOIC0xMDAwICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjIzIGZtYSAgIE5hTiAtMSAgICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjUgZm1hICAgTmFOICAwICAgICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjI2IGZtYSAgIE5hTiAgMSAgICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MjggZm1hICAgTmFOICBJbmYgICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjI5IGZtYSAgIE5hTiAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MzEgZm1hICAtMTAwMCBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjMyIGZtYSAgLTEgICAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MzQgZm1hICAgMCAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotZGRmbWEyNjM1IGZtYSAgIDEgICAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KLWRkZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCi1kZGZtYTI2MzcgZm1hICAgSW5mICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQotDQotZGRmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NDIgZm1hICAgc05hTiAtMTAwMCAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0MyBmbWEgICBzTmFOIC0xICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NDUgZm1hICAgc05hTiAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0NiBmbWEgICBzTmFOICAxICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NDggZm1hICAgc05hTiAgTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY0OSBmbWEgICBzTmFOIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTEgZm1hICAtSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1MiBmbWEgIC0xMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTQgZm1hICAtMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1NSBmbWEgICAwICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2NTcgZm1hICAgMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY1OCBmbWEgICBJbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjkNCi1kZGZtYTI2NjIgZm1hICAgTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAgTmFOOA0KLWRkZm1hMjY2MyBmbWEgICBOYU43MSBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU43MQ0KLWRkZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzM4NCAgLT4gICBOYU42DQotZGRmbWEyNjY1IGZtYSAgLUluZiAgIE5hTjQgICAgMGUrMzg0ICAtPiAgIE5hTjQNCi1kZGZtYTI2NjYgZm1hICAtOTk5ICAgTmFOMzMgICAwZSszODQgIC0+ICAgTmFOMzMNCi1kZGZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSszODQgIC0+ICAgTmFOMg0KLQ0KLWRkZm1hMjY3MSBmbWEgICBzTmFOOTkgLUluZiAgICAgIDBlKzM4NCAgLT4gICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3MyBmbWEgICBzTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3NCBmbWEgICBzTmFOMTYgc05hTjk0ICAgIDBlKzM4NCAgLT4gICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzM4NCAgLT4gICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3NiBmbWEgIC1JbmYgICAgc05hTjkyICAgIDBlKzM4NCAgLT4gICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3NyBmbWEgICAwODggICAgc05hTjkxICAgIDBlKzM4NCAgLT4gICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzM4NCAgLT4gICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjY3OSBmbWEgICBOYU4gICAgc05hTjg5ICAgIDBlKzM4NCAgLT4gICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU45DQotZGRmbWEyNjgyIGZtYSAgLU5hTjggIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTjgNCi1kZGZtYTI2ODMgZm1hICAtTmFONzEgSW5mICAgICAwZSszODQgIC0+ICAtTmFONzENCi1kZGZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSszODQgIC0+ICAtTmFONg0KLWRkZm1hMjY4NSBmbWEgIC1JbmYgIC1OYU40ICAgIDBlKzM4NCAgLT4gIC1OYU40DQotZGRmbWEyNjg2IGZtYSAgLTk5OSAgLU5hTjMzICAgMGUrMzg0ICAtPiAgLU5hTjMzDQotZGRmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrMzg0ICAtPiAgLU5hTjINCi0NCi1kZGZtYTI2OTEgZm1hICAtc05hTjk5IC1JbmYgICAgICAwZSszODQgIC0+ICAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTMgZm1hICAtc05hTjk3ICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTQgZm1hICAtc05hTjE2IC1zTmFOOTQgICAwZSszODQgIC0+ICAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSszODQgIC0+ICAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTYgZm1hICAtSW5mICAgIC1zTmFOOTIgICAwZSszODQgIC0+ICAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTcgZm1hICAgMDg4ICAgIC1zTmFOOTEgICAwZSszODQgIC0+ICAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSszODQgIC0+ICAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI2OTkgZm1hICAtTmFOICAgIC1zTmFOODkgICAwZSszODQgIC0+ICAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZGZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSszODQgIC0+ICAtTmFODQotZGRmbWEyNzAyIGZtYSAgLU5hTiAgIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTg0KLWRkZm1hMjcwMyBmbWEgIC1OYU4gICBJbmYgICAgIDBlKzM4NCAgLT4gIC1OYU4NCi1kZGZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFODQotZGRmbWEyNzA1IGZtYSAgLUluZiAgLU5hTjAgICAgMGUrMzg0ICAtPiAgLU5hTg0KLWRkZm1hMjcwNiBmbWEgIC05OTkgIC1OYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4NCi1kZGZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFODQotDQotZGRmbWEyNzExIGZtYSAgLXNOYU4gICAtSW5mICAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI3MTMgZm1hICAtc05hTjAwICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNzE0IGZtYSAgLXNOYU4gICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI3MTYgZm1hICAtSW5mICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyNzE3IGZtYSAgIDA4OCAgICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTI3MTkgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQotLS0gc2lnbnMNCi1kZGZtYTI3NTEgZm1hICAgMWUrMjc3ICAxZSszMTEgICAwZSszODQgIC0+ICAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzUyIGZtYSAgIDFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc1MyBmbWEgIC0xZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI3NTQgZm1hICAtMWUrMjc3IC0xZSszMTEgICAwZSszODQgIC0+ICAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyNzU1IGZtYSAgIDFlLTI3NyAgMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyNzU2IGZtYSAgIDFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyNzU3IGZtYSAgLTFlLTI3NyAgMWUtMzExICAgMGUrMzg0ICAtPiAgLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyNzU4IGZtYSAgLTFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpDQotZGRmbWEyNzYwIGZtYSAgMWUtMjkxIDFlLTEwMSAgIDBlKzM4NCAgLT4gIDFFLTM5MiBTdWJub3JtYWwNCi1kZGZtYTI3NjEgZm1hICAxZS0yOTEgMWUtMTAyICAgMGUrMzg0ICAtPiAgMUUtMzkzIFN1Ym5vcm1hbA0KLWRkZm1hMjc2MiBmbWEgIDFlLTI5MSAxZS0xMDMgICAwZSszODQgIC0+ICAxRS0zOTQgU3Vibm9ybWFsDQotZGRmbWEyNzYzIGZtYSAgMWUtMjkxIDFlLTEwNCAgIDBlKzM4NCAgLT4gIDFFLTM5NSBTdWJub3JtYWwNCi1kZGZtYTI3NjQgZm1hICAxZS0yOTEgMWUtMTA1ICAgMGUrMzg0ICAtPiAgMUUtMzk2IFN1Ym5vcm1hbA0KLWRkZm1hMjc2NSBmbWEgIDFlLTI5MSAxZS0xMDYgICAwZSszODQgIC0+ICAxRS0zOTcgU3Vibm9ybWFsDQotZGRmbWEyNzY2IGZtYSAgMWUtMjkxIDFlLTEwNyAgIDBlKzM4NCAgLT4gIDFFLTM5OCBTdWJub3JtYWwNCi1kZGZtYTI3NjcgZm1hICAxZS0yOTEgMWUtMTA4ICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI3NjggZm1hICAxZS0yOTEgMWUtMTA5ICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI3NjkgZm1hICAxZS0yOTEgMWUtMTEwICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0tLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddDQotZGRmbWEyNzcwIGZtYSAgMWUrNjAgMWUrMzIxICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZA0KLWRkZm1hMjc3MSBmbWEgIDFlKzYwIDFlKzMyMiAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkDQotZGRmbWEyNzcyIGZtYSAgMWUrNjAgMWUrMzIzICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkDQotZGRmbWEyNzczIGZtYSAgMWUrNjAgMWUrMzI0ICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KLWRkZm1hMjc3NCBmbWEgIDFlKzYwIDFlKzMyNSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc3NSBmbWEgIDFlKzYwIDFlKzMyNiAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc3NiBmbWEgIDFlKzYwIDFlKzMyNyAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc3NyBmbWEgIDFlKzYwIDFlKzMyOCAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc3OCBmbWEgIDFlKzYwIDFlKzMyOSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjc3OSBmbWEgIDFlKzYwIDFlKzMzMCAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMjgwMSBmbWEgICAxLjAwMDBFLTM5NCAgMSAgICAgICAwZSszODQgIC0+ICAxLjAwMDBFLTM5NCBTdWJub3JtYWwNCi1kZGZtYTI4MDIgZm1hICAgMS4wMDBFLTM5NCAgIDFlLTEgICAgMGUrMzg0ICAtPiAgMS4wMDBFLTM5NSAgU3Vibm9ybWFsDQotZGRmbWEyODAzIGZtYSAgIDEuMDBFLTM5NCAgICAxZS0yICAgIDBlKzM4NCAgLT4gIDEuMDBFLTM5NiAgIFN1Ym5vcm1hbA0KLWRkZm1hMjgwNCBmbWEgICAxLjBFLTM5NCAgICAgMWUtMyAgICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwNCi1kZGZtYTI4MDUgZm1hICAgMS4wRS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkZm1hMjgwNiBmbWEgICAxLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODA3IGZtYSAgIDEuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MDggZm1hICAgMS43RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgwOSBmbWEgICAyLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODEwIGZtYSAgIDIuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTEgZm1hICAgMi43RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgxMiBmbWEgICAxLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODEzIGZtYSAgIDEuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTQgZm1hICAgMS41MUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgxNSBmbWEgICAyLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODE2IGZtYSAgIDIuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MTcgZm1hICAgMi41MUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMjgxOCBmbWEgICAxRS0zOTQgICAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbA0KLWRkZm1hMjgxOSBmbWEgICAzRS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI4MjAgZm1hICAgNUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRmbWEyODIxIGZtYSAgIDdFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MjIgZm1hICAgOUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgyMyBmbWEgICA5LjlFLTM5NCAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEyODI0IGZtYSAgIDFFLTM5NCAgICAgIC0xZS00ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgU3Vibm9ybWFsDQotZGRmbWEyODI1IGZtYSAgIDNFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjgyNiBmbWEgIC01RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZGZtYTI4MjcgZm1hICAgN0UtMzk0ICAgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMjgyOCBmbWEgIC05RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEyODI5IGZtYSAgIDkuOUUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTI4MzAgZm1hICAgMy4wRS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotDQotZGRmbWEyODMxIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0yMDAgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkZm1hMjgzMiBmbWEgICAxLjBFLTE5OSAgICAgMWUtMTk5ICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRmbWEyODMzIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTggICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwNCi1kZGZtYTI4MzQgZm1hICAgMi4wRS0xOTkgICAgIDJlLTE5OCAgIDBlKzM4NCAgLT4gIDQuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KLWRkZm1hMjgzNSBmbWEgICA0LjBFLTE5OSAgICAgNGUtMTk4ICAgMGUrMzg0ICAtPiAgMS42MEUtMzk2ICAgU3Vibm9ybWFsDQotZGRmbWEyODM2IGZtYSAgMTAuMEUtMTk5ICAgIDEwZS0xOTggICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCi1kZGZtYTI4MzcgZm1hICAzMC4wRS0xOTkgICAgMzBlLTE5OCAgIDBlKzM4NCAgLT4gIDkuMDAwRS0zOTUgIFN1Ym5vcm1hbA0KLWRkZm1hMjgzOCBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg4ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODQgU3Vibm9ybWFsDQotZGRmbWEyODM5IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODcgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4Mw0KLWRkZm1hMjg0MCBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg2ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODINCi0NCi0tLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgNCi1kZGZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSszODMgICAgICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kZGZtYTI4NzEgZm1hICAxMDAgLTkuOTk5RSszODMgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRkZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzM4MyAxMDAgICAwZSszODQgIC0+ICAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZGRmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrMzgzIDEwMCAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRkZm1hMjg4MSBmbWEgICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAgIDBlKzM4NCAgLT4gICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRmbWEyODgyIGZtYSAgIDEuMjM0RS0zNTUgMS4yMzRFLTQwICAgICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZGZtYTI4ODMgZm1hICAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgICAwZSszODQgIC0+ICAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg4NCBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAgIDBlKzM4NCAgLT4gICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbA0KLWRkZm1hMjg4NSBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDEgICAgICAgIDBlKzM4NCAgLT4gICAxLjQ0RS0zOTYgIFN1Ym5vcm1hbA0KLWRkZm1hMjg4NiBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRmbWEyODg3IGZtYSAgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZGZtYTI4ODggZm1hICAgMS4zRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS43RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRkZm1hMjg4OSBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAgIDBlKzM4NCAgLT4gICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRmbWEyODkwIGZtYSAgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgICAgMGUrMzg0ICAtPiAgICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLWRkZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg5MyBmbWEgICAxLjIzNDVFLTQwICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkZm1hMjg5NiBmbWEgICAxLjIzNDU2RS00MSAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cNCi1kZGZtYTI5MDAgZm1hICAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgICAwZSszODQgIC0+ICA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI5MDEgZm1hICAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgICAwZSszODQgIC0+ICA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI5MDIgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI5MDMgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI5MDQgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZGZtYTI5MDUgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi0tLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QNCi1kZGZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzDQotZGRmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMC4wOTk5OTk5OTk5OTk5OTk5OQ0KLS0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQotZGRmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLQ0KLS0tIGh1Z2VzdA0KLWRkZm1hMjkwOSBmbWEgICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrMzg0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEyOTkxIGZtYSAgICMgMTAgICAwZSszODQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCi0tLSBBRERJVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1kZGZtYTMwMDEgZm1hICAxICAxICAgICAgIDEgICAgICAgLT4gIDINCi1kZGZtYTMwMDIgZm1hICAxICAyICAgICAgIDMgICAgICAgLT4gIDUNCi1kZGZtYTMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCi1kZGZtYTMwMDQgZm1hICAxICAnNScgICAgICctMycgICAgLT4gIDINCi1kZGZtYTMwMDUgZm1hICAxICAnLTUnICAgICctMycgICAgLT4gIC04DQotZGRmbWEzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQotZGRmbWEzMDA3IGZtYSAgMSAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCi1kZGZtYTMwMDggZm1hICAxICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCi1kZGZtYTMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCi1kZGZtYTMwMTAgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCi0NCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkZm1hMzAxMSBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAxMiBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kZGZtYTMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCi1kZGZtYTMwMTQgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDE1IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMTcgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDE4IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwMjAgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzMDIxIGZtYSAgMSAgMCAxIC0+IDENCi1kZGZtYTMwMjIgZm1hICAxICAxIDEgLT4gMg0KLWRkZm1hMzAyMyBmbWEgIDEgIDIgMSAtPiAzDQotZGRmbWEzMDI0IGZtYSAgMSAgMyAxIC0+IDQNCi1kZGZtYTMwMjUgZm1hICAxICA0IDEgLT4gNQ0KLWRkZm1hMzAyNiBmbWEgIDEgIDUgMSAtPiA2DQotZGRmbWEzMDI3IGZtYSAgMSAgNiAxIC0+IDcNCi1kZGZtYTMwMjggZm1hICAxICA3IDEgLT4gOA0KLWRkZm1hMzAyOSBmbWEgIDEgIDggMSAtPiA5DQotZGRmbWEzMDMwIGZtYSAgMSAgOSAxIC0+IDEwDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZGRmbWEzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZGRmbWEzMDMyIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZGRmbWEzMDMzIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQotZGRmbWEzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotZGRmbWEzMDM1IGZtYSAgMSAgJzcwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzAzNyBmbWEgIDEgICc3MDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDM4IGZtYSAgMSAgJzcwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeToNCi1kZGZtYTMwNDAgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwNDEgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMDQyIGZtYSAgMSAgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwNDQgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMwNDUgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KLQ0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcNCi1kZGZtYTMwNDYgZm1hICAxICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KLWRkZm1hMzA0NyBmbWEgIDEgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KLWRkZm1hMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCi1kZGZtYTMwNDkgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KLWRkZm1hMzA1MCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KLWRkZm1hMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCi1kZGZtYTMwNTIgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kZGZtYTMwNTMgZm1hICAxICAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQotZGRmbWEzMDU0IGZtYSAgMSAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCi1kZGZtYTMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KLWRkZm1hMzA1NiBmbWEgIDEgICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KLWRkZm1hMzA1NyBmbWEgIDEgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQotDQotLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbg0KLWRkZm1hMzA2MSBmbWEgIDEgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCi1kZGZtYTMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScNCi1kZGZtYTMwNjMgZm1hICAxICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJw0KLWRkZm1hMzA2NCBmbWEgIDEgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCi1kZGZtYTMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScNCi0NCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dDQotZGRmbWEzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxDQotZGRmbWEzMDcxIGZtYSAgMSAgMSAwLiAgICAtPiAxDQotZGRmbWEzMDcyIGZtYSAgMSAgMSAgLjAgICAtPiAxLjANCi1kZGZtYTMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMA0KLWRkZm1hMzA3NCBmbWEgIDEgIDEgMC4wMCAgLT4gMS4wMA0KLWRkZm1hMzA3NSBmbWEgIDEgICAwICAxICAgLT4gMQ0KLWRkZm1hMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQ0KLWRkZm1hMzA3NyBmbWEgIDEgICAuMCAxICAgLT4gMS4wDQotZGRmbWEzMDc4IGZtYSAgMSAgMC4wIDEgICAtPiAxLjANCi1kZGZtYTMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDANCi0NCi0tLSBzb21lIGNhcnJpZXMNCi1kZGZtYTMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5DQotZGRmbWEzMDgxIGZtYSAgMSAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDANCi1kZGZtYTMwODIgZm1hICAxICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQotZGRmbWEzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQotZGRmbWEzMDg0IGZtYSAgMSAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDANCi1kZGZtYTMwODUgZm1hICAxICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZGRmbWEzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwDQotZGRmbWEzMDg3IGZtYSAgMSAgICAgICAgOTk5IDEgIC0+IDEwMDANCi1kZGZtYTMwODggZm1hICAxICAgICAgICAgOTkgMSAgLT4gMTAwDQotZGRmbWEzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwDQotDQotDQotLS0gbW9yZSBMSFMgc3dhcHMNCi1kZGZtYTMwOTAgZm1hICAxICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kZGZtYTMwOTEgZm1hICAxICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWRkZm1hMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1kZGZtYTMwOTMgZm1hICAxICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycNCi1kZGZtYTMwOTQgZm1hICAxICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1kZGZtYTMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1kZGZtYTMwOTYgZm1hICAxICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycNCi1kZGZtYTMwOTcgZm1hICAxICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWRkZm1hMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZGRmbWEzMDk5IGZtYSAgMSAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jw0KLWRkZm1hMzEwMCBmbWEgIDEgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZGRmbWEzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWRkZm1hMzEwMiBmbWEgIDEgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jw0KLWRkZm1hMzEwMyBmbWEgIDEgICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWRkZm1hMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1kZGZtYTMxMDUgZm1hICAxICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJw0KLWRkZm1hMzEwNiBmbWEgIDEgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWRkZm1hMzEwNyBmbWEgIDEgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcNCi1kZGZtYTMxMDggZm1hICAxICAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQNCi1kZGZtYTMxMDkgZm1hICAxICAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQNCi1kZGZtYTMxMTAgZm1hICAxICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQNCi1kZGZtYTMxMTEgZm1hICAxICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCi0NCi0tLSBtb3JlIFJIUyBzd2Fwcw0KLWRkZm1hMzExMyBmbWEgIDEgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZGRmbWEzMTE0IGZtYSAgMSAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3Jw0KLWRkZm1hMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3Jw0KLWRkZm1hMzExNyBmbWEgIDEgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQotZGRmbWEzMTE5IGZtYSAgMSAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycNCi1kZGZtYTMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3Jw0KLWRkZm1hMzEyMSBmbWEgIDEgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQotZGRmbWEzMTIyIGZtYSAgMSAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3Jw0KLWRkZm1hMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcNCi1kZGZtYTMxMjQgZm1hICAxICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCi1kZGZtYTMxMjUgZm1hICAxICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnDQotZGRmbWEzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnDQotZGRmbWEzMTI3IGZtYSAgMSAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCi1kZGZtYTMxMjggZm1hICAxICAwICAnLTVFLTEnICAgICAgLT4gICctMC41Jw0KLWRkZm1hMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01Jw0KLWRkZm1hMzEzMCBmbWEgIDEgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCi1kZGZtYTMxMzEgZm1hICAxICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJw0KLWRkZm1hMzEzMiBmbWEgIDEgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KLWRkZm1hMzEzMyBmbWEgIDEgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZA0KLWRkZm1hMzEzNCBmbWEgIDEgIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZA0KLWRkZm1hMzEzNSBmbWEgIDEgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZA0KLWRkZm1hMzEzNiBmbWEgIDEgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1kZGZtYTMxMzcgZm1hICAxICAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQotZGRmbWEzMTM4IGZtYSAgMSAgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkZm1hMzEzOSBmbWEgIDEgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kZGZtYTMxNDAgZm1hICAxICAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZGRmbWEzMTQxIGZtYSAgMSAgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJw0KLWRkZm1hMzE0MiBmbWEgIDEgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCi1kZGZtYTMxNDMgZm1hICAxICAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnDQotZGRmbWEzMTQ0IGZtYSAgMSAgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZA0KLQ0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQotZGRmbWEzMTQ2IGZtYSAgMSAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWRkZm1hMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnDQotZGRmbWEzMTQ4IGZtYSAgMSAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kZGZtYTMxNDkgZm1hICAxICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZGRmbWEzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kZGZtYTMxNTEgZm1hICAxICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KLWRkZm1hMzE1MiBmbWEgIDEgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kZGZtYTMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnDQotZGRmbWEzMTU0IGZtYSAgMSAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRkZm1hMzE1NSBmbWEgIDEgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZGRmbWEzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicNCi1kZGZtYTMxNTcgZm1hICAxICAnMycgICAgICcrMycgICAgLT4gICc2Jw0KLWRkZm1hMzE1OCBmbWEgIDEgICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZGRmbWEzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJw0KLWRkZm1hMzE2MCBmbWEgIDEgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1kZGZtYTMxNjEgZm1hICAxICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScNCi1kZGZtYTMxNjIgZm1hICAxICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZGRmbWEzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWRkZm1hMzE2NCBmbWEgIDEgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRkZm1hMzE2NSBmbWEgIDEgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScNCi1kZGZtYTMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZGRmbWEzMTY3IGZtYSAgMSAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWRkZm1hMzE2OCBmbWEgIDEgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLS0tICAgICAgICAgICAxLjIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Ng0KLWRkZm1hMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzUgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkDQotZGRmbWEzMTc4IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMTgxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkZm1hMzIwMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KLWRkZm1hMzIwMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjAzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIwNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjA2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIwNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMDggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjA5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjEyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjE1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIxNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KLWRkZm1hMzIxNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMTggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjE5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZGZtYTMyMjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCi1kZGZtYTMyMjEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjIyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIyMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMjQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjI1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIyNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjI4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIyOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjMxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjM0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyMzYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCi1kZGZtYTMyMzcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjM4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzIzOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRkZm1hMzI0MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNDEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjQyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRmbWEzMjUwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQotZGRmbWEzMjUxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNTMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjU0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNTYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjU3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI1OCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNTkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjYwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjYzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2NCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMjY2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQotZGRmbWEzMjY3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzI2OCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMyNjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZGZtYTMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwDQotZGRmbWEzMzAyIGZtYSAgMSAgICAwICAgMSAgICAgIC0+ICAgMQ0KLWRkZm1hMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDINCi1kZGZtYTMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzDQotZGRmbWEzMzA1IGZtYSAgMSAgIDk4ICAgMSAgICAgIC0+ICA5OQ0KLWRkZm1hMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDANCi1kZGZtYTMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxDQotZGRmbWEzMzA4IGZtYSAgMSAgMTAxICAgMSAgICAgIC0+IDEwMg0KLWRkZm1hMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTINCi1kZGZtYTMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xDQotZGRmbWEzMzExIGZtYSAgMSAgICAxICAtMSAgICAgIC0+ICAgMA0KLWRkZm1hMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTENCi1kZGZtYTMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3DQotZGRmbWEzMzE0IGZtYSAgMSAgIDk5ICAtMSAgICAgIC0+ICA5OA0KLWRkZm1hMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkNCi1kZGZtYTMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwDQotDQotZGRmbWEzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDANCi1kZGZtYTMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KLWRkZm1hMzMyMyBmbWEgIDEgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyDQotZGRmbWEzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMNCi1kZGZtYTMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KLWRkZm1hMzMyNiBmbWEgIDEgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwDQotZGRmbWEzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDENCi1kZGZtYTMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KLWRkZm1hMzMyOSBmbWEgIDEgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyDQotZGRmbWEzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDENCi1kZGZtYTMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KLWRkZm1hMzMzMiBmbWEgIDEgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExDQotZGRmbWEzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcNCi1kZGZtYTMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KLWRkZm1hMzMzNSBmbWEgIDEgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5DQotZGRmbWEzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDANCi0NCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQNCi1kZGZtYTMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQotZGRmbWEzMzQxIGZtYSAgMSAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZGZtYTMzNDIgZm1hICAxICAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQNCi1kZGZtYTMzNDMgZm1hICAxICAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQNCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQotZGRmbWEzMzQ0IGZtYSAgMSAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KLWRkZm1hMzM0NSBmbWEgIDEgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxDQotZGRmbWEzMzQ2IGZtYSAgMSAgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTMzNDcgZm1hICAxICAxRSsyMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcNCi1kZGZtYTMzNDkgZm1hICAxICAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNw0KLWRkZm1hMzM1MCBmbWEgIDEgIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzMzUxIGZtYSAgMSAgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZGRmbWEzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1kZGZtYTMzNjEgIGZtYSAgMSAgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQNCi1kZGZtYTMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQNCi1kZGZtYTMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTMzNjQgIGZtYSAgMSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwRSszNjkNCi0NCi0tLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLWRkZm1hMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCi1kZGZtYTMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGZtYTMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0DQotZGRmbWEzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kZGZtYTMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0DQotZGRmbWEzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KLWRkZm1hMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZGRmbWEzNDAxIGZtYSAgMSAgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQotZGRmbWEzNDAyIGZtYSAgMSAgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MDQgZm1hICAxICAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDA1IGZtYSAgMSAgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM0MTAgZm1hICAxICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCi1kZGZtYTM0MTEgZm1hICAxICAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDEyIGZtYSAgMSAgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MTQgZm1hICAxICAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDE1IGZtYSAgMSAgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM0MjAgZm1hICAxICAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3Nw0KLWRkZm1hMzQyMSBmbWEgIDEgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KLWRkZm1hMzQyMiBmbWEgIDEgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MjMgZm1hICAxICAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDI0IGZtYSAgMSAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQyNSBmbWEgIDEgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MjYgZm1hICAxICAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNDMwIGZtYSAgMSAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQotZGRmbWEzNDMxIGZtYSAgMSAgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQzMiBmbWEgIDEgICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MzMgZm1hICAxICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNDM0IGZtYSAgMSAgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzQzNSBmbWEgIDEgICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRkZm1hMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDQxIGZtYSAgMSAgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDQ0IGZtYSAgMSAgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDUyIGZtYSAgMSAgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NTUgZm1hICAxICAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzY0NjAgZm1hICAxICAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDYxIGZtYSAgMSAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NjIgZm1hICAxICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0NjMgZm1hICAxICAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDY0IGZtYSAgMSAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ2NSBmbWEgIDEgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ2NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNjQ3MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDcxIGZtYSAgMSAgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDcyIGZtYSAgMSAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ3MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NzQgZm1hICAxICAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NzUgZm1hICAxICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kZGZtYTM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0ODEgZm1hICAxICAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0ODQgZm1hICAxICAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjQ5MiBmbWEgIDEgIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NDk1IGZtYSAgMSAgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzY1MDAgZm1hICAxICAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjUwMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZGRmbWEzNjUwMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY1MDMgZm1hICAxICAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUwNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTA1IGZtYSAgMSAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUwNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzY1MTAgZm1hICAxICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWRkZm1hMzY1MTEgZm1hICAxICAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCi1kZGZtYTM2NTEyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MTMgZm1hICAxICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjUxNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MTUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIGEgY291cGxlIG1vcmUgd2l0aCBsb25nZXIgUkhTDQotZGRmbWEzNjUyMCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIyMjMNCi1kZGZtYTM2NTIxIGZtYSAgMSAgICAxICAgLTc3NzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIyMiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTIyIGZtYSAgMSAgICAxICAgLTc3NzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTIzIGZtYSAgMSAgICAxICAgLTc3NzdlLTE5ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTI0IGZtYSAgMSAgICAxICAgLTc3NzdlLTIwICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTI1IGZtYSAgMSAgICAxICAgLTc3NzdlLTIxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1MjYgZm1hICAxICAgIDEgICAtNzc3N2UtMjIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkZm1hMzY1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1kZGZtYTM2NTQxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NDIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTQ0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NDUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTQ3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NDggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU0OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTUwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZGRmbWEzNjU1NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NTkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkZm1hMzY1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1kZGZtYTM2NTYxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NjIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTY0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NjUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTY3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTcwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU3MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTczIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNjU3NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTc2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZGRmbWEzNjU3NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM2NTc4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzY1NzkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kZGZtYTM3NTQwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkZm1hMzc1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCi1kZGZtYTM3NTUxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTU0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTU3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTYwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU2MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzU2NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQotZGRmbWEzNzU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTY4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1NjkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gdmVyaWZ5IGEgcXVlcnkNCi1yb3VuZGluZzogICAgIGRvd24NCi1kZGZtYTM3NjYxIGZtYSAgMSAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NjYyIGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkDQotZGRmbWEzNzY2MyBmbWEgIDEgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzY2NCBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotDQotZGRmbWEzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQotZGRmbWEzNzcwMiBmbWEgIDEgIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWRkZm1hMzc3MDMgZm1hICAxICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCi1kZGZtYTM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQotDQotZGRmbWEzNzcxMCBmbWEgIDEgIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZGRmbWEzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjANCi1kZGZtYTM3NzEyIGZtYSAgMSAgMEUrMyAgMDAuICAgIC0+IDANCi1kZGZtYTM3NzEzIGZtYSAgMSAgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1kZGZtYTM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCi1kZGZtYTM3NzE1IGZtYSAgMSAgMEUrMyAgMDAuRSszIC0+IDBFKzMNCi1kZGZtYTM3NzE2IGZtYSAgMSAgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1kZGZtYTM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCi1kZGZtYTM3NzE4IGZtYSAgMSAgMEUrMyAgLTAwLjAgICAtPiAwLjANCi1kZGZtYTM3NzE5IGZtYSAgMSAgMEUrMyAgLTAwLiAgICAtPiAwDQotZGRmbWEzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KLQ0KLWRkZm1hMzc3MjAgZm1hICAxICAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KLWRkZm1hMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wDQotZGRmbWEzNzcyMiBmbWEgIDEgIDAwLiAgICAwRSszICAtPiAwDQotZGRmbWEzNzcyMyBmbWEgIDEgIDAwLkUrMSAwRSszICAtPiAwRSsxDQotZGRmbWEzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZGRmbWEzNzcyNSBmbWEgIDEgIDAwLkUrMyAwRSszICAtPiAwRSszDQotZGRmbWEzNzcyNiBmbWEgIDEgIDAwLkUrNCAwRSszICAtPiAwRSszDQotZGRmbWEzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszDQotZGRmbWEzNzcyOCBmbWEgIDEgIC0wMC4wMCAwRSszICAtPiAwLjAwDQotZGRmbWEzNzcyOSBmbWEgIDEgIC0wMC4wICAwRSszICAtPiAwLjANCi1kZGZtYTM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1kZGZtYTM3NzMyIGZtYSAgMSAgIDAgICAgIDAgICAgIC0+ICAwDQotZGRmbWEzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMA0KLWRkZm1hMzc3MzQgZm1hICAxICAtMCAgICAgMCAgICAgLT4gIDANCi1kZGZtYTM3NzM1IGZtYSAgMSAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCi0NCi1kZGZtYTM3NzM2IGZtYSAgMSAgIDEgICAgLTEgICAgIC0+ICAwDQotZGRmbWEzNzczNyBmbWEgIDEgIC0xICAgIC0xICAgICAtPiAtMg0KLWRkZm1hMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDINCi1kZGZtYTM3NzM5IGZtYSAgMSAgLTEgICAgIDEgICAgIC0+ICAwDQotDQotZGRmbWEzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQ0KLWRkZm1hMzc3NDIgZm1hICAxICAtMCAgICAtMSAgICAgLT4gLTENCi1kZGZtYTM3NzQzIGZtYSAgMSAgIDAgICAgIDEgICAgIC0+ICAxDQotZGRmbWEzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQ0KLWRkZm1hMzc3NDUgZm1hICAxICAtMSAgICAgMCAgICAgLT4gLTENCi1kZGZtYTM3NzQ2IGZtYSAgMSAgLTEgICAgLTAgICAgIC0+IC0xDQotZGRmbWEzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQ0KLWRkZm1hMzc3NDggZm1hICAxICAgMSAgICAtMCAgICAgLT4gIDENCi0NCi1kZGZtYTM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjANCi1kZGZtYTM3NzUyIGZtYSAgMSAgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1kZGZtYTM3NzUzIGZtYSAgMSAgIDAuMCAgIDEgICAgIC0+ICAxLjANCi1kZGZtYTM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjANCi1kZGZtYTM3NzU1IGZtYSAgMSAgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1kZGZtYTM3NzU2IGZtYSAgMSAgLTEuMCAgLTAgICAgIC0+IC0xLjANCi1kZGZtYTM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjANCi1kZGZtYTM3NzU4IGZtYSAgMSAgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1kZGZtYTM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzYyIGZtYSAgMSAgLTAgICAgLTEuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzYzIGZtYSAgMSAgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1kZGZtYTM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjANCi1kZGZtYTM3NzY1IGZtYSAgMSAgLTEgICAgIDAuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzY2IGZtYSAgMSAgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjANCi1kZGZtYTM3NzY4IGZtYSAgMSAgIDEgICAgLTAuMCAgIC0+ICAxLjANCi0NCi1kZGZtYTM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzcyIGZtYSAgMSAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCi1kZGZtYTM3NzczIGZtYSAgMSAgIDAuMCAgIDEuMCAgIC0+ICAxLjANCi1kZGZtYTM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1kZGZtYTM3Nzc1IGZtYSAgMSAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCi1kZGZtYTM3Nzc2IGZtYSAgMSAgLTEuMCAgLTAuMCAgIC0+IC0xLjANCi1kZGZtYTM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1kZGZtYTM3Nzc4IGZtYSAgMSAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCi0NCi0tLSBTcGVjaWFscw0KLWRkZm1hMzc3ODAgZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4MSBmbWEgIDEgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODMgZm1hICAxICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4NCBmbWEgIDEgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODYgZm1hICAxICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc4NyBmbWEgIDEgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3ODkgZm1hICAxICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc5MCBmbWEgIDEgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkZm1hMzc3OTIgZm1hICAxICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRmbWEzNzc5MyBmbWEgIDEgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZGZtYTM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRmbWEzNzgwMCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgwMiBmbWEgIDEgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODAzIGZtYSAgMSAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgwNSBmbWEgIDEgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODA2IGZtYSAgMSAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgwOCBmbWEgIDEgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODA5IGZtYSAgMSAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODExIGZtYSAgMSAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MTIgZm1hICAxICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRmbWEzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZGZtYTM3ODE0IGZtYSAgMSAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkZm1hMzc4MTUgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRmbWEzNzgyMSBmbWEgIDEgICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRmbWEzNzgyMiBmbWEgIDEgICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRmbWEzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRmbWEzNzgyNCBmbWEgIDEgICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRmbWEzNzgyNSBmbWEgIDEgICBOYU4gIDAgICAgICAtPiAgTmFODQotZGRmbWEzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRmbWEzNzgyNyBmbWEgIDEgICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRmbWEzNzgyOCBmbWEgIDEgICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRmbWEzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzMCBmbWEgIDEgIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzMSBmbWEgIDEgIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzMyBmbWEgIDEgIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzNCBmbWEgIDEgICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzNiBmbWEgIDEgICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRmbWEzNzgzNyBmbWEgIDEgICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRmbWEzNzg0MSBmbWEgIDEgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDIgZm1hICAxICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg0NCBmbWEgIDEgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDUgZm1hICAxICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg0NyBmbWEgIDEgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NDggZm1hICAxICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1MCBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTEgZm1hICAxICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1MyBmbWEgIDEgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTQgZm1hICAxICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1NiBmbWEgIDEgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkZm1hMzc4NTcgZm1hICAxICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg1OSBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZGZtYTM3ODYxIGZtYSAgMSAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZGRmbWEzNzg2MiBmbWEgIDEgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRkZm1hMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kZGZtYTM3ODY0IGZtYSAgMSAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZGRmbWEzNzg2NSBmbWEgIDEgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRkZm1hMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kZGZtYTM3ODY3IGZtYSAgMSAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZGRmbWEzNzg2OCBmbWEgIDEgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRkZm1hMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZGRmbWEzNzg3MSBmbWEgIDEgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3MiBmbWEgIDEgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3NCBmbWEgIDEgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3NSBmbWEgIDEgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3NyBmbWEgIDEgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3OCBmbWEgIDEgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg4MCBmbWEgIDEgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg4MSBmbWEgIDEgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRmbWEzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kZGZtYTM3ODgzIGZtYSAgMSAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM3ODg0IGZtYSAgMSAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRkZm1hMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQotZGRmbWEzNzU3NSBmbWEgIDEgICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwNCi1kZGZtYTM3NTc2IGZtYSAgMSAgLTFFLTM4MyArMUUtMzk4IC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KLQ0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkZm1hMzc5NzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkZm1hMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk3NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTc1IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5NzcgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTc4IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5ODAgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTgxIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTgyIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTgzIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTg0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZGZtYTM3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRmbWEzNzk4NiBmbWEgIDEgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk4OCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTg5IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5MSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTkyIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTZFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5NCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc5OTUgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtM0UrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzk5NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWRkZm1hMzcxMTAwIGZtYSAgMSAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTEwMyBmbWEgIDEgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA0IGZtYSAgMSAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTEwNiBmbWEgIDEgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA3IGZtYSAgMSAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kZGZtYTM3MTEwOSBmbWEgIDEgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgICBjZWlsaW5nDQotZGRmbWEzNzExMTAgZm1hICAxICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTExIGZtYSAgMSAgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTMgZm1hICAxICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTQgZm1hICAxICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTE1IGZtYSAgMSAgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTYgZm1hICAxICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTcgZm1hICAxICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRkZm1hMzcxMTE4IGZtYSAgMSAgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZGRmbWEzNzExMTkgZm1hICAxICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KLXJvdW5kaW5nOiAgICAgaGFsZl9ldmVuDQotDQotZGRmbWEzNzEzMDAgZm1hICAxICAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzEwIGZtYSAgMSAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxMSBmbWEgIDEgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTIgZm1hICAxICAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzEzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTUgZm1hICAxICAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzE2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMxNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMTggZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzE5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjEgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzIyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjQgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzI1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMjcgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzI4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMyOSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzAgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzMxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzMgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzM0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzYgZm1hICAxICAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzM3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTMzOCBmbWEgIDEgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzMzkgZm1hICAxICAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkZm1hMzcxMzQwIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM0MSBmbWEgIDEgIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRmbWEzNzEzNDkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNTggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM1OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNjggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM2OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzNzcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM3OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM4NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzODkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM5MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzOTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM5MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzEzOTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3MTM5NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KLWRkZm1hMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0MjcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1kZGZtYTM3MTQyOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRkZm1hMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05DQotZGRmbWEzNzE0MzAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZGRmbWEzNzE0MzEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZGRmbWEzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyDQotZGRmbWEzNzE0MzMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZGRmbWEzNzE0MzQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZGRmbWEzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1DQotZGRmbWEzNzE0MzYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZGRmbWEzNzE0MzcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZGRmbWEzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4DQotZGRmbWEzNzE0MzkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgcmV2ZXJzZWQgMA0KLWRkZm1hMzcxNDQwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ0MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ0NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQ1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWRkZm1hMzcxNDQ2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1kZGZtYTM3MTQ0NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQotZGRmbWEzNzE0NDggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRkZm1hMzcxNDQ5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1kZGZtYTM3MTQ1MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWRkZm1hMzcxNDUxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZGRmbWEzNzE0NTIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kZGZtYTM3MTQ1MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWRkZm1hMzcxNDU0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZGRmbWEzNzE0NTUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kZGZtYTM3MTQ1NiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWRkZm1hMzcxNDU3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZGRmbWEzNzE0NTggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kZGZtYTM3MTQ1OSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLQ0KLS0tIHNhbWUsIEVzIG9uIHRoZSAwDQotZGRmbWEzNzE0NjAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NjkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZGRmbWEzNzE0NzUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KLWRkZm1hMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZGRmbWEzNzE0NzcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kZGZtYTM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRkZm1hMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotDQotLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCi1yb3VuZGluZzogICAgaGFsZl91cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGZtYTM3MTUwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTUwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGZtYTM3MTUxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRmbWEzNzE1MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRmbWEzNzE1MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTUyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRmbWEzNzE1MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkZm1hMzcxNTMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkZm1hMzcxNTQwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTQzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkZm1hMzcxNTUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGZtYTM3MTU1MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIHVwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRkZm1hMzcxNTYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1NjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRkZm1hMzcxNTcxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kZGZtYTM3MTU3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZGRmbWEzNzE1ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNTgxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTU4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE1ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZGRmbWEzNzE1OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRkZm1hMzcxNTkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGZtYTM3MTYwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRkZm1hMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kZGZtYTM3MTYwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGZtYTM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZGRmbWEzNzE2MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kZGZtYTM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZGRmbWEzNzE2MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRkZm1hMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1kZGZtYTM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kZGZtYTM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotZGRmbWEzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWRkZm1hMzcxNzAxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQotZGRmbWEzNzE3MDIgZm1hICAxICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1kZGZtYTM3MTcwMyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KLWRkZm1hMzcxNzA0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQotZGRmbWEzNzE3MDUgZm1hICAxICAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTANCi1kZGZtYTM3MTcwNiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMA0KLWRkZm1hMzcxNzA3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQotZGRmbWEzNzE3MDggZm1hICAxICAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMNCi0NCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLQ0KLWRkZm1hMzc1MDAxIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Nw0KLWRkZm1hMzc1MDAyIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMDMgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAwNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDA1IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMDYgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAwNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDA4IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMDkgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDExIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxMyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDE0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxNiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDE3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMTggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTAxOSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDIwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwMjEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQotZGRmbWEzNzUwMzAgZm1hICAxICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQ0KLWRkZm1hMzc1MDMxIGZtYSAgMSAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQ0KLWRkZm1hMzc1MDMyIGZtYSAgMSAgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTINCi1kZGZtYTM3NTAzMyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMw0KLWRkZm1hMzc1MDM0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNA0KLWRkZm1hMzc1MDM1IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUNCi1kZGZtYTM3NTAzNiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Ng0KLWRkZm1hMzc1MDM3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2Nw0KLWRkZm1hMzc1MDM4IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgNCi1kZGZtYTM3NTAzOSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQwIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDEgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQzIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQ2IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNDcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA0OCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDQ5IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZGRmbWEzNzUwNTAgZm1hICAxICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA1MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDUyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNTMgZm1hICAxICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA1NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDU1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNTYgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA1NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDYwIGZtYSAgMSAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA2MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDYzIGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA2NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDY2IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNjcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQotcm91bmRpbmc6IHVwDQotZGRmbWEzNzUwNzAgZm1hICAxICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQ0KLWRkZm1hMzc1MDcxIGZtYSAgMSAgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNzIgZm1hICAxICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDc0IGZtYSAgMSAgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNzUgZm1hICAxICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDc3IGZtYSAgMSAgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwNzggZm1hICAxICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA3OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDgwIGZtYSAgMSAgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODEgZm1hICAxICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4MiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDgzIGZtYSAgMSAgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODQgZm1hICAxICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4NSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDg2IGZtYSAgMSAgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZGRmbWEzNzUwODcgZm1hICAxICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kZGZtYTM3NTA4OCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRkZm1hMzc1MDg5IGZtYSAgMSAgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZGVzY3RydWN0aXZlIHN1YnRyYWN0aW9uIChmcm9tIHJlbWFpbmRlciB0ZXN0cykNCi0NCi0tLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXINCi0NCi1kZGZtYTQwMDAgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTQgICAxLjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NjU0MzIxMDk4NzY1NDYNCi1kZGZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDMgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42NTQzMjEwOTg3NjU1Nw0KLWRkZm1hNDAwMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzMzMiAgICAgMS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjU0MzIxMDk4NzY2NjgNCi1kZGZtYTQwMDMgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjMgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU1ICAtPiAgMi42OTEzNTgwMjc0NjkxMzcNCi1kZGZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjMgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy42OTEzNTgwMjc0NjkxMzcNCi1kZGZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTYgICAgIDQuOTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42OTEzNTc4MDI0Njk2DQotZGRmbWE0MDA2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgIDQuOTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNDY5MTM1NzgwMjQ2OTENCi1kZGZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA0Ljk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTENCi1kZGZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkNCi1kZGZtYTQwMDkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTAgICAgNS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy41MzA4NjQyMTk3NTMxMA0KLWRkZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQNCi1kZGZtYTQwMTEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTUgICAxLjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1DQotZGRmbWE0MDEyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDQ0ICAgIDEuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjM0NTY3ODkwMTIzNDQ0DQotZGRmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMzICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjQ1Njc4OTAxMjMzMzMNCi1kZGZtYTQwMTQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU1ICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0DQotZGRmbWE0MDE1ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0ICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjMwODY0MTk3MjUzMDg2NA0KLWRkZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYNCi1kZGZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTIgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNTMwODY0MjE5NzUzMDgNCi1kZGZtYTQwMTggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA0Ljk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTENCi1kZGZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkNCi1kZGZtYTQwMjAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNDY5MTM1NzgwMjQ2OTENCi1kZGZtYTQwMjEgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2ODYgICAgIDUuMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4zMDg2NDIxOTc1MzE0DQotDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRkZm1hMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGZtYTM5OTkxIGZtYSAgMSAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEZNQS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitkZGZtYTAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCitkZGZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzCitkZGZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitkZGZtYTAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCitkZGZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwCitkZGZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitkZGZtYTAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCitkZGZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyCitkZGZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitkZGZtYTAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCitkZGZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xCitkZGZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitkZGZtYTAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCitkZGZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xCitkZGZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitkZGZtYTAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZGRmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43MgorZGRmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAorZGRmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZGRmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyCitkZGZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4CitkZGZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitkZGZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQorZGRmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAorZGRmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitkZGZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5CitkZGZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCitkZGZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2RkZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjAKK2RkZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAorZGRmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZGRmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYKK2RkZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAorZGRmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZGRmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OAorZGRmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAorZGRmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDcuMTIzMzU2NDI5MjU3OTY5RSsxNgorZGRmbWEwMjAxICBmbWEgICAgICAgMjc1ODM0ODkuNjY0NSAgICAgIDI1ODI0NzEwNzguMDQgICAgICAyNTkzMTgzLjQyMzcxICAtPiAgNy4xMjMzNTY0MjkyNTc5NzBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyMjgxMzI3NTMyOC44MDUwNgorZGRmbWEwMjA4ICBmbWEgICAgICAgIDI0MjgwLjM1NTU2NiAgICAgIDkzOTU3Ny4zOTc2NTMgICAgICAgIDIwMzIuMDEzMjUyICAtPiAgMjI4MTMyNzUzMjguODA1MDcgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjJFKzE2CitkZGZtYTAyMDkgIGZtYSAgICAgICAgICA3ODQ4OTc2NDMyICAgICAgLTI1ODY4MzEuMjI4MSAgICAgIDEzNzkwMy41MTc5MDkgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjFFKzE2IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc3CitkZGZtYTAyMTcgIGZtYSAgICAgICAgNTY4OTAuMzg4NzMxICAgICAgMzU4NzIwMzAuNDI1NSAgICAgIDMzOTMzNy4xMjM0MTAgIC0+ICAyMDQwNzc0MDk0ODE0LjA3OCAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNzE0NDY5NTc1MjA1MDQ5RSsxOAorZGRmbWEwMjIwICBmbWEgICAgICAgNzUzMzU0My41NzQ0NSAgICAgICAzNjAzMTc3NjM5MjggICAgICA1MDczMzkyLjMxNjM4ICAtPiAgMi43MTQ0Njk1NzUyMDUwNTBFKzE4ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNkUrMTkKK2RkZm1hMDIyMyAgZm1hICAgICAgIDczOTk0NTI1NS41NjMgICAgICAxMzY3MjMxMjc4NC4xICAgICAgLTk5NDM4MS41MzU3MiAgLT4gIDEuMDExNjc2Mjk3NzE2NzE1RSsxOSAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE1RSsyMworZGRmbWEwMjI0ICBmbWEgICAgICAgLTQxMzUxMDk1NzIxOCAgICAgICA3MDQ3Mjk5ODg1NTAgICAgICAgOTIzNDE2MjYxNC4wICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE0RSsyMyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjYyMDExOTg2MzM2NTc4NkUrMTcKK2RkZm1hMDIyNiAgZm1hICAgICAgICA0Mzc0ODQuMDA2MDEgICAgICAgNTk4OTA2NDMyNzkwICAgICAgODk0NDUwNjM4LjQ0MiAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg3RSsxNyAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yNzI2NDc5OTU4MDgxNzhFKzE5CitkZGZtYTAyNTMgIGZtYSAgICAgICAgIDczMjg3NTU2OTI5ICAgICAgMTczNjUxMzA1Ljc4NCAgICAgLTM1ODMxMjU2OC4zODkgIC0+ICAxLjI3MjY0Nzk5NTgwODE3N0UrMTkgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MUUrMTgKK2RkZm1hMDI1NyAgZm1hICAgICAgICAyMDMyNTgzMDQ0ODYgICAgICAtODYyODI3OC44MDY2ICAgICAgMTUzMTI3LjQ0NjcyNyAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MEUrMTggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNTUwNzM3ODM1MjYzMzQ2RSsxNworZGRmbWEwMjYwICBmbWEgICAgICAgNDI1NjA1MzMuMTc3NCAgICAgLTM2NDM2MDUyODIuODYgICAgICAgMTc4Mjc3Ljk2Mzc3ICAtPiAgLTEuNTUwNzM3ODM1MjYzMzQ3RSsxNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNUUrMjIKK2RkZm1hMDI2OSAgZm1hICAgICAgICAxNDI2NTY1ODczNzUgICAgICAgMjAzMTE4ODc5NjcwICAgICAgIDYwNDU3NjEwMzk5MSAgLT4gIDIuODk3NjI0NjIwNTc2MDA0RSsyMiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQorZm1hMDMwMCAgZm1hICAgOWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDEgIGZtYSAgIDFlKzM4NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWEwMzAyICBmbWEgICAxZSszODQgICAgMTAgICAtMWUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZm1hMDMwMyAgZm1hICAgMWUrMzg0ICAgIDEwICAgLTllKzM4NCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKKy0tIHN1Ym5vcm1hbCBldGMuCitmbWEwMzA1ICBmbWEgICAxZS0zOTggICAgMC4xICAwICAgICAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYTAzMDYgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDcgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDFlLTM5OCAgICAtPiAxRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW5maW5pdGUgY29tYmluYXRpb25zCitkZGZtYTA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitkZGZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RkZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitkZGZtYTA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitkZGZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uCitkZGZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKK2RkZm1hMDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMworZGRmbWEwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41CistLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcKKy0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQorZGRmbWEwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc2FuaXR5IGNoZWNrcworZGRmbWEyMDAwIGZtYSAgMiAgICAgIDIgICAwZSszODQgIC0+ICA0CitkZGZtYTIwMDEgZm1hICAyICAgICAgMyAgIDBlKzM4NCAgLT4gIDYKK2RkZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrMzg0ICAtPiAgNQorZGRmbWEyMDAzIGZtYSAgNSAgICAgIDIgICAwZSszODQgIC0+ICAxMAorZGRmbWEyMDA0IGZtYSAgMS4yMCAgIDIgICAwZSszODQgIC0+ICAyLjQwCitkZGZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzM4NCAgLT4gIDAuMDAKK2RkZm1hMjAwNiBmbWEgIDEuMjAgIC0yICAgMGUrMzg0ICAtPiAgLTIuNDAKK2RkZm1hMjAwNyBmbWEgIC0xLjIwICAyICAgMGUrMzg0ICAtPiAgLTIuNDAKK2RkZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrMzg0ICAtPiAgMC4wMAorZGRmbWEyMDA5IGZtYSAgLTEuMjAgLTIgICAwZSszODQgIC0+ICAyLjQwCitkZGZtYTIwMTAgZm1hICA1LjA5IDcuMSAgIDBlKzM4NCAgLT4gIDM2LjEzOQorZGRmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSszODQgIC0+ICAxMC4wCitkZGZtYTIwMTIgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwCitkZGZtYTIwMTMgZm1hICAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgICAwZSszODQgIC0+ICAxLjIzNDU2Nzg5MDAwMDAwMCBSb3VuZGVkCitkZGZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwCitkZGZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEyMDE3IGZtYSAgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjAxOCBmbWEgIC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSB6ZXJvcywgZXRjLgorZGRmbWEyMDIxIGZtYSAgIDAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjIgZm1hICAgMCAgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyMDI0IGZtYSAgLTAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjUgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDI3IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTIwMjggZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMAorZGRmbWEyMDMxIGZtYSAgIDAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwMzIgZm1hICAgMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwMzQgZm1hICAtNS4wMCAgIDFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDAKK2RkZm1hMjAzNSBmbWEgIC0wMC4wMCAgMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMAorZGRmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRmbWEyMDM3IGZtYSAgLTBFLTMgICAwMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRmbWEyMDM4IGZtYSAgIDUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gIC0wLjAwNTAwCitkZGZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjA0MCBmbWEgICAwMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjA0MSBmbWEgICAwRS0zICAtMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMAorZGRmbWEyMDQzIGZtYSAgLTAwLjAwIC0wLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwNDQgZm1hICAtMDAuMDAgLTBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwNDYgZm1hICAtMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDAKK2RkZm1hMjA0NyBmbWEgICAwRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAtMC4wMDAwMAorZGRmbWEyMDQ4IGZtYSAgIDBFLTMgICAwMC4wMCAgLTBlKzM4NCAgLT4gICAwLjAwMDAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSszODQgIC0+ICAzLjYwCitkZGZtYTIwNTEgZm1hICA3ICAgIDMgICAgICAgICAgMGUrMzg0ICAtPiAgMjEKK2RkZm1hMjA1MiBmbWEgIDAuOSAgMC44ICAgICAgICAwZSszODQgIC0+ICAwLjcyCitkZGZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrMzg0ICAtPiAgMC4wCitkZGZtYTIwNTQgZm1hICA2NTQzMjEgNjU0MzIxICAgMGUrMzg0ICAtPiAgNDI4MTM1OTcxMDQxCisKK2RkZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrOQorZGRmbWEyMDYxIGZtYSAgMTIzLjQ1IDFlOCAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMAorZGRmbWEyMDYyIGZtYSAgMTIzLjQ1IDFlKzkgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMQorZGRmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMgorZGRmbWEyMDY0IGZtYSAgMTIzLjQ1IDFlMTEgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMworZGRmbWEyMDY1IGZtYSAgMTIzLjQ1IDFlMTIgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxNAorZGRmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMjA4MCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CitkZGZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQorZGRmbWEyMDkwIGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkZm1hMjA5NCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK2RkZm1hMjEwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODEKK2RkZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzM4NCAgLT4gIDgxMAorZGRmbWEyMTAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDAKK2RkZm1hMjEwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAKK2RkZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMAorZGRmbWEyMTA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAKK2RkZm1hMjEwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAKK2RkZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMAorZGRmbWEyMTA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAKK2RkZm1hMjExMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAKK2RkZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMAorZGRmbWEyMTEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAKK2RkZm1hMjExMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAKK2RkZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMAorZGRmbWEyMTE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE4IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE5IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTIxIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTIyIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitkZGZtYTIxMzEgZm1hICAzIDMgICAgIDBlKzM4NCAgLT4gIDkKK2RkZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzM4NCAgLT4gIDkwCitkZGZtYTIxMzMgZm1hICAzIDMwMCAgICAgMGUrMzg0ICAtPiAgOTAwCitkZGZtYTIxMzQgZm1hICAzIDMwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAKK2RkZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwCitkZGZtYTIxMzYgZm1hICAzIDMwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwCitkZGZtYTIxMzcgZm1hICAzIDMwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAKK2RkZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwCitkZGZtYTIxMzkgZm1hICAzIDMwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwCitkZGZtYTIxNDAgZm1hICAzIDMwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAKK2RkZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwCitkZGZtYTIxNDIgZm1hICAzIDMwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwCitkZGZtYTIxNDMgZm1hICAzIDMwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAKK2RkZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAwCitkZGZtYTIxNDUgZm1hICAzIDMwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAwCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RkZm1hMjMwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODEKK2RkZm1hMjMwMiBmbWEgIDkgOTAgICAgIDBlKzM4NCAgLT4gIDgxMAorZGRmbWEyMzAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDAKK2RkZm1hMjMwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAKK2RkZm1hMjMwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMAorZGRmbWEyMzA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAKK2RkZm1hMjMwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAKK2RkZm1hMjMwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMAorZGRmbWEyMzA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAKK2RkZm1hMjMxMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAKK2RkZm1hMjMxMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMAorZGRmbWEyMzEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAKK2RkZm1hMjMxMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAKK2RkZm1hMjMxNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMAorZGRmbWEyMzE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAKK2RkZm1hMjMxNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGZtYTIzMTcgZm1hICA5MCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKK2RkZm1hMjMxOCBmbWEgIDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTggIFJvdW5kZWQKK2RkZm1hMjMxOSBmbWEgIDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkCitkZGZtYTIzMjAgZm1hICA5MDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKK2RkZm1hMjMyMSBmbWEgIDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjEgIFJvdW5kZWQKK2RkZm1hMjMyMiBmbWEgIDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkCitkZGZtYTIzMjMgZm1hICA5MDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjMgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RkZm1hMjUwNCAgZm1hICAgMEUtMjYwIDEwMDBFLTI2MCAgICAwZSszODQgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRmbWEyNTA1ICBmbWEgICAxMDBFKzI2MCAwRSsyNjAgICAgIDBlKzM4NCAgLT4gIDBFKzM2OSBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RkZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQzIGZtYSAgIDAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ2IGZtYSAgLTEgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorCitkZGZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTMgZm1hICAgMC4wICAgMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTYgZm1hICAtMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wCisKK2RkZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2MyBmbWEgICAwICAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NiBmbWEgIC0xICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKKworZGRmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzMgZm1hICAgMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzYgZm1hICAtMS4wICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCisKKy0tIFNwZWNpYWxzCitkZGZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTgyIGZtYSAgIEluZiAgLTEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjU4NSBmbWEgICBJbmYgICAxICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU4OCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU5MSBmbWEgIC0wICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1OTQgZm1hICAgMTAwMCAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorCitkZGZtYTI2MDAgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MDMgZm1hICAtSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA2IGZtYSAgLUluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA5IGZtYSAgLUluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MTIgZm1hICAgMCAgICAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYxNSBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorCitkZGZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjIgZm1hICAgTmFOIC0xMDAwICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjUgZm1hICAgTmFOICAwICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjggZm1hICAgTmFOICBJbmYgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzEgZm1hICAtMTAwMCBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzQgZm1hICAgMCAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzcgZm1hICAgSW5mICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCisKK2RkZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDIgZm1hICAgc05hTiAtMTAwMCAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDUgZm1hICAgc05hTiAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDggZm1hICAgc05hTiAgTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTEgZm1hICAtSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTQgZm1hICAtMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTcgZm1hICAgMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU45CitkZGZtYTI2NjIgZm1hICAgTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAgTmFOOAorZGRmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjcxCitkZGZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSszODQgIC0+ICAgTmFONgorZGRmbWEyNjY1IGZtYSAgLUluZiAgIE5hTjQgICAgMGUrMzg0ICAtPiAgIE5hTjQKK2RkZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzM4NCAgLT4gICBOYU4zMworZGRmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrMzg0ICAtPiAgIE5hTjIKKworZGRmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3MyBmbWEgICBzTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrMzg0ICAtPiAgIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSszODQgIC0+ICAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3NiBmbWEgIC1JbmYgICAgc05hTjkyICAgIDBlKzM4NCAgLT4gICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrMzg0ICAtPiAgIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSszODQgIC0+ICAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3OSBmbWEgICBOYU4gICAgc05hTjg5ICAgIDBlKzM4NCAgLT4gICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSszODQgIC0+ICAtTmFOOQorZGRmbWEyNjgyIGZtYSAgLU5hTjggIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTjgKK2RkZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzM4NCAgLT4gIC1OYU43MQorZGRmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrMzg0ICAtPiAgLU5hTjYKK2RkZm1hMjY4NSBmbWEgIC1JbmYgIC1OYU40ICAgIDBlKzM4NCAgLT4gIC1OYU40CitkZGZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSszODQgIC0+ICAtTmFOMzMKK2RkZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzM4NCAgLT4gIC1OYU4yCisKK2RkZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrMzg0ICAtPiAgLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTMgZm1hICAtc05hTjk3ICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzM4NCAgLT4gIC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrMzg0ICAtPiAgLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTYgZm1hICAtSW5mICAgIC1zTmFOOTIgICAwZSszODQgIC0+ICAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzM4NCAgLT4gIC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrMzg0ICAtPiAgLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTkgZm1hICAtTmFOICAgIC1zTmFOODkgICAwZSszODQgIC0+ICAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzAyIGZtYSAgLU5hTiAgIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA1IGZtYSAgLUluZiAgLU5hTjAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorCitkZGZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTMgZm1hICAtc05hTjAwICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTYgZm1hICAtSW5mICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTkgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RkZm1hMjc1MSBmbWEgICAxZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1MiBmbWEgICAxZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1MyBmbWEgIC0xZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1NCBmbWEgIC0xZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1NSBmbWEgICAxZS0yNzcgIDFlLTMxMSAgIDBlKzM4NCAgLT4gICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzU2IGZtYSAgIDFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NTcgZm1hICAtMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc1OCBmbWEgIC0xZS0yNzcgLTFlLTMxMSAgIDBlKzM4NCAgLT4gICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RkZm1hMjc2MCBmbWEgIDFlLTI5MSAxZS0xMDEgICAwZSszODQgIC0+ICAxRS0zOTIgU3Vibm9ybWFsCitkZGZtYTI3NjEgZm1hICAxZS0yOTEgMWUtMTAyICAgMGUrMzg0ICAtPiAgMUUtMzkzIFN1Ym5vcm1hbAorZGRmbWEyNzYyIGZtYSAgMWUtMjkxIDFlLTEwMyAgIDBlKzM4NCAgLT4gIDFFLTM5NCBTdWJub3JtYWwKK2RkZm1hMjc2MyBmbWEgIDFlLTI5MSAxZS0xMDQgICAwZSszODQgIC0+ICAxRS0zOTUgU3Vibm9ybWFsCitkZGZtYTI3NjQgZm1hICAxZS0yOTEgMWUtMTA1ICAgMGUrMzg0ICAtPiAgMUUtMzk2IFN1Ym5vcm1hbAorZGRmbWEyNzY1IGZtYSAgMWUtMjkxIDFlLTEwNiAgIDBlKzM4NCAgLT4gIDFFLTM5NyBTdWJub3JtYWwKK2RkZm1hMjc2NiBmbWEgIDFlLTI5MSAxZS0xMDcgICAwZSszODQgIC0+ICAxRS0zOTggU3Vibm9ybWFsCitkZGZtYTI3NjcgZm1hICAxZS0yOTEgMWUtMTA4ICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc2OCBmbWEgIDFlLTI5MSAxZS0xMDkgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzY5IGZtYSAgMWUtMjkxIDFlLTExMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkZGZtYTI3NzAgZm1hICAxZSs2MCAxZSszMjEgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCitkZGZtYTI3NzEgZm1hICAxZSs2MCAxZSszMjIgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZAorZGRmbWEyNzcyIGZtYSAgMWUrNjAgMWUrMzIzICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCitkZGZtYTI3NzMgZm1hICAxZSs2MCAxZSszMjQgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGZtYTI3NzQgZm1hICAxZSs2MCAxZSszMjUgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3NSBmbWEgIDFlKzYwIDFlKzMyNiAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc2IGZtYSAgMWUrNjAgMWUrMzI3ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzcgZm1hICAxZSs2MCAxZSszMjggICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3OCBmbWEgIDFlKzYwIDFlKzMyOSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc5IGZtYSAgMWUrNjAgMWUrMzMwICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgwMSBmbWEgICAxLjAwMDBFLTM5NCAgMSAgICAgICAwZSszODQgIC0+ICAxLjAwMDBFLTM5NCBTdWJub3JtYWwKK2RkZm1hMjgwMiBmbWEgICAxLjAwMEUtMzk0ICAgMWUtMSAgICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkZm1hMjgwMyBmbWEgICAxLjAwRS0zOTQgICAgMWUtMiAgICAwZSszODQgIC0+ICAxLjAwRS0zOTYgICBTdWJub3JtYWwKK2RkZm1hMjgwNCBmbWEgICAxLjBFLTM5NCAgICAgMWUtMyAgICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkZm1hMjgwNSBmbWEgICAxLjBFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI4MDYgZm1hICAgMS4zRS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODA3IGZtYSAgIDEuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgwOCBmbWEgICAxLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MDkgZm1hICAgMi4zRS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODEwIGZtYSAgIDIuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxMSBmbWEgICAyLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTIgZm1hICAgMS40OUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODEzIGZtYSAgIDEuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNCBmbWEgICAxLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTUgZm1hICAgMi40OUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE2IGZtYSAgIDIuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNyBmbWEgICAyLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgxOCBmbWEgICAxRS0zOTQgICAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbAorZGRmbWEyODE5IGZtYSAgIDNFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODIwIGZtYSAgIDVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODIxIGZtYSAgIDdFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyMiBmbWEgICA5RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjMgZm1hICAgOS45RS0zOTQgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTI4MjQgZm1hICAgMUUtMzk0ICAgICAgLTFlLTQgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBTdWJub3JtYWwKK2RkZm1hMjgyNSBmbWEgICAzRS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjgyNiBmbWEgIC01RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjgyNyBmbWEgICA3RS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjggZm1hICAtOUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODI5IGZtYSAgIDkuOUUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgzMCBmbWEgICAzLjBFLTM5NCAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRmbWEyODMxIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0yMDAgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODMyIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTkgICAwZSszODQgIC0+ICAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjgzMyBmbWEgICAxLjBFLTE5OSAgICAgMWUtMTk4ICAgMGUrMzg0ICAtPiAgMS4wRS0zOTcgICAgU3Vibm9ybWFsCitkZGZtYTI4MzQgZm1hICAgMi4wRS0xOTkgICAgIDJlLTE5OCAgIDBlKzM4NCAgLT4gIDQuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRmbWEyODM1IGZtYSAgIDQuMEUtMTk5ICAgICA0ZS0xOTggICAwZSszODQgIC0+ICAxLjYwRS0zOTYgICBTdWJub3JtYWwKK2RkZm1hMjgzNiBmbWEgIDEwLjBFLTE5OSAgICAxMGUtMTk4ICAgMGUrMzg0ICAtPiAgMS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4MzcgZm1hICAzMC4wRS0xOTkgICAgMzBlLTE5OCAgIDBlKzM4NCAgLT4gIDkuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODM4IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODggICAwZSszODQgIC0+ICAxLjYwMDBFLTM4NCBTdWJub3JtYWwKK2RkZm1hMjgzOSBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg3ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODMKK2RkZm1hMjg0MCBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg2ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODIKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitkZGZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSszODMgICAgICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkZm1hMjg3MSBmbWEgIDEwMCAtOS45OTlFKzM4MyAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZGZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrMzgzIDEwMCAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkZm1hMjg4MSBmbWEgICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAgIDBlKzM4NCAgLT4gICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4ODIgZm1hICAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODgzIGZtYSAgIDEuMjNFLTM1NSAgMS4yM0UtNDAgICAgICAgMGUrMzg0ICAtPiAgIDEuNTEzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg4NCBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAgIDBlKzM4NCAgLT4gICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODg1IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NiAgU3Vibm9ybWFsCitkZGZtYTI4ODYgZm1hICAgMS4yRS0zNTUgICAxLjJFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS40RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODg3IGZtYSAgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkZm1hMjg4OCBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4ODkgZm1hICAgMS4zRS0zNTUgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAyRS0zOTggICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODkwIGZtYSAgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgICAgMGUrMzg0ICAtPiAgICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkZGZtYTI4OTEgZm1hICAgMS4yMzQ1RS0zOSAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKK2RkZm1hMjkwMCBmbWEgICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTAxIGZtYSAgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxICAgMGUrMzg0ICAtPiAgOS4wMDAwMDAwMDYwMDAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDIgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwMyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTA0IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5MEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDUgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZGRmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MworZGRmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMC4wOTk5OTk5OTk5OTk5OTk5OQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KK2RkZm1hMjkwOCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gaHVnZXN0CitkZGZtYTI5MDkgZm1hICAgOTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkZGZtYTI5OTAgZm1hICAxMCAgIyAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyOTkxIGZtYSAgICMgMTAgICAwZSszODQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCistLSBBRERJVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkZGZtYTMwMDEgZm1hICAxICAxICAgICAgIDEgICAgICAgLT4gIDIKK2RkZm1hMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQorZGRmbWEzMDAzIGZtYSAgMSAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitkZGZtYTMwMDQgZm1hICAxICAnNScgICAgICctMycgICAgLT4gIDIKK2RkZm1hMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgKK2RkZm1hMzAwNiBmbWEgIDEgICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZGRmbWEzMDA3IGZtYSAgMSAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2RkZm1hMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZGRmbWEzMDA5IGZtYSAgMSAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitkZGZtYTMwMTAgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMzAxMSBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRmbWEzMDEzIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZGZtYTMwMTQgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTYgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTcgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTkgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMjAgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzAyMSBmbWEgIDEgIDAgMSAtPiAxCitkZGZtYTMwMjIgZm1hICAxICAxIDEgLT4gMgorZGRmbWEzMDIzIGZtYSAgMSAgMiAxIC0+IDMKK2RkZm1hMzAyNCBmbWEgIDEgIDMgMSAtPiA0CitkZGZtYTMwMjUgZm1hICAxICA0IDEgLT4gNQorZGRmbWEzMDI2IGZtYSAgMSAgNSAxIC0+IDYKK2RkZm1hMzAyNyBmbWEgIDEgIDYgMSAtPiA3CitkZGZtYTMwMjggZm1hICAxICA3IDEgLT4gOAorZGRmbWEzMDI5IGZtYSAgMSAgOCAxIC0+IDkKK2RkZm1hMzAzMCBmbWEgIDEgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2RkZm1hMzAzMSBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZGRmbWEzMDMyIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitkZGZtYTMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2RkZm1hMzAzNCBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitkZGZtYTMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzNiBmbWEgIDEgICc3MDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzNyBmbWEgIDEgICc3MDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzOSBmbWEgIDEgICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZGRmbWEzMDQwIGZtYSAgMSAgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDEgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDIgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDQ0IGZtYSAgMSAgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDUgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCitkZGZtYTMwNDYgZm1hICAxICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZGRmbWEzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitkZGZtYTMwNDggZm1hICAxICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitkZGZtYTMwNDkgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZGRmbWEzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitkZGZtYTMwNTEgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitkZGZtYTMwNTIgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkZGZtYTMwNTMgZm1hICAxICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitkZGZtYTMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZGRmbWEzMDU1IGZtYSAgMSAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2RkZm1hMzA1NiBmbWEgIDEgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZGRmbWEzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgorZGRmbWEzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZGRmbWEzMDYyIGZtYSAgMSAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitkZGZtYTMwNjMgZm1hICAxICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZGRmbWEzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZGRmbWEzMDY1IGZtYSAgMSAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2RkZm1hMzA3MCBmbWEgIDEgIDEgIDAgICAgLT4gMQorZGRmbWEzMDcxIGZtYSAgMSAgMSAwLiAgICAtPiAxCitkZGZtYTMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMAorZGRmbWEzMDczIGZtYSAgMSAgMSAwLjAgICAtPiAxLjAKK2RkZm1hMzA3NCBmbWEgIDEgIDEgMC4wMCAgLT4gMS4wMAorZGRmbWEzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxCitkZGZtYTMwNzYgZm1hICAxICAwLiAgMSAgIC0+IDEKK2RkZm1hMzA3NyBmbWEgIDEgICAuMCAxICAgLT4gMS4wCitkZGZtYTMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMAorZGRmbWEzMDc5IGZtYSAgMSAgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZGRmbWEzMDgwIGZtYSAgMSAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZGRmbWEzMDgxIGZtYSAgMSAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2RkZm1hMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2RkZm1hMzA4MyBmbWEgIDEgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZGRmbWEzMDg0IGZtYSAgMSAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2RkZm1hMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2RkZm1hMzA4NiBmbWEgIDEgICAgICAgOTk5OSAxICAtPiAxMDAwMAorZGRmbWEzMDg3IGZtYSAgMSAgICAgICAgOTk5IDEgIC0+IDEwMDAKK2RkZm1hMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDAKK2RkZm1hMzA4OSBmbWEgIDEgICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitkZGZtYTMwOTAgZm1hICAxICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkZm1hMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZGZtYTMwOTIgZm1hICAxICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkZGZtYTMwOTMgZm1hICAxICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2RkZm1hMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRmbWEzMDk1IGZtYSAgMSAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkZGZtYTMwOTYgZm1hICAxICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2RkZm1hMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZGZtYTMwOTggZm1hICAxICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZGRmbWEzMDk5IGZtYSAgMSAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZGRmbWEzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2RkZm1hMzEwMSBmbWEgIDEgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2RkZm1hMzEwMiBmbWEgIDEgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZGRmbWEzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZGZtYTMxMDQgZm1hICAxICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkZGZtYTMxMDUgZm1hICAxICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZGRmbWEzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZGZtYTMxMDcgZm1hICAxICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZGZtYTMxMDggZm1hICAxICAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQKK2RkZm1hMzEwOSBmbWEgIDEgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRmbWEzMTEwIGZtYSAgMSAgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitkZGZtYTMxMTEgZm1hICAxICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2RkZm1hMzExMyBmbWEgIDEgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZGZtYTMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitkZGZtYTMxMTYgZm1hICAxICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2RkZm1hMzExNyBmbWEgIDEgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitkZGZtYTMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZGRmbWEzMTIwIGZtYSAgMSAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2RkZm1hMzEyMSBmbWEgIDEgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitkZGZtYTMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitkZGZtYTMxMjMgZm1hICAxICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitkZGZtYTMxMjQgZm1hICAxICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2RkZm1hMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2RkZm1hMzEyNiBmbWEgIDEgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZGRmbWEzMTI3IGZtYSAgMSAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2RkZm1hMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitkZGZtYTMxMjkgZm1hICAxICAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2RkZm1hMzEzMCBmbWEgIDEgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2RkZm1hMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitkZGZtYTMxMzIgZm1hICAxICAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkZm1hMzEzMyBmbWEgIDEgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRmbWEzMTM0IGZtYSAgMSAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCitkZGZtYTMxMzUgZm1hICAxICAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2RkZm1hMzEzNiBmbWEgIDEgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitkZGZtYTMxMzcgZm1hICAxICAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGZtYTMxMzggZm1hICAxICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMxMzkgZm1hICAxICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGZtYTMxNDAgZm1hICAxICAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMxNDEgZm1hICAxICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCitkZGZtYTMxNDIgZm1hICAxICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitkZGZtYTMxNDMgZm1hICAxICAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCitkZGZtYTMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitkZGZtYTMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitkZGZtYTMxNDcgZm1hICAxICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZGRmbWEzMTQ4IGZtYSAgMSAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkZm1hMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2RkZm1hMzE1MCBmbWEgIDEgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitkZGZtYTMxNTEgZm1hICAxICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZGRmbWEzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTUzIGZtYSAgMSAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTU0IGZtYSAgMSAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2RkZm1hMzE1NiBmbWEgIDEgICczJyAgICAgJzMnICAgICAtPiAgJzYnCitkZGZtYTMxNTcgZm1hICAxICAnMycgICAgICcrMycgICAgLT4gICc2JworZGRmbWEzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2RkZm1hMzE1OSBmbWEgIDEgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2RkZm1hMzE2MCBmbWEgIDEgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkZGZtYTMxNjEgZm1hICAxICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2RkZm1hMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkZm1hMzE2MyBmbWEgIDEgICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkZm1hMzE2NCBmbWEgIDEgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZGRmbWEzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZGRmbWEzMTY2IGZtYSAgMSAgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY3IGZtYSAgMSAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCityb3VuZGluZzogaGFsZl91cAorLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2CitkZGZtYTMxNzAgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzMgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzYgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkZGZtYTMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc5IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRmbWEzMjAwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGZtYTMyMDEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkZm1hMzIxNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzMjIwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGZtYTMyMjEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkZm1hMzIzNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZGZtYTMyNDAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNDEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGZtYTMyNTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzI1MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1OCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjY3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwCitkZGZtYTMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxCitkZGZtYTMzMDMgZm1hICAxICAgIDEgICAxICAgICAgLT4gICAyCitkZGZtYTMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzCitkZGZtYTMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5CitkZGZtYTMzMDYgZm1hICAxICAgOTkgICAxICAgICAgLT4gMTAwCitkZGZtYTMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxCitkZGZtYTMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyCitkZGZtYTMzMDkgZm1hICAxICAgLTEgIC0xICAgICAgLT4gIC0yCitkZGZtYTMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xCitkZGZtYTMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwCitkZGZtYTMzMTIgZm1hICAxICAgMTIgIC0xICAgICAgLT4gIDExCitkZGZtYTMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3CitkZGZtYTMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4CitkZGZtYTMzMTUgZm1hICAxICAxMDAgIC0xICAgICAgLT4gIDk5CitkZGZtYTMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RkZm1hMzMyMSBmbWEgIDEgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkZGZtYTMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZGRmbWEzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RkZm1hMzMyNCBmbWEgIDEgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkZGZtYTMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZGRmbWEzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RkZm1hMzMyNyBmbWEgIDEgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkZGZtYTMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZGRmbWEzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RkZm1hMzMzMCBmbWEgIDEgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkZGZtYTMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZGRmbWEzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RkZm1hMzMzMyBmbWEgIDEgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkZGZtYTMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZGRmbWEzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RkZm1hMzMzNiBmbWEgIDEgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZGRmbWEzMzQwIGZtYSAgMSAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZGRmbWEzMzQxIGZtYSAgMSAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkZm1hMzM0MiBmbWEgIDEgIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorZGRmbWEzMzQzIGZtYSAgMSAgMUUrMjAgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkZGZtYTMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkZGZtYTMzNDUgZm1hICAxICAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQorZGRmbWEzMzQ2IGZtYSAgMSAgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM0NyBmbWEgIDEgIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMzNDggZm1hICAxICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkZGZtYTMzNDkgZm1hICAxICAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworZGRmbWEzMzUwIGZtYSAgMSAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM1MSBmbWEgIDEgIDFFKzIwICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZGRmbWEzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RkZm1hMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAorZGRmbWEzMzYyICBmbWEgIDEgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGZtYTMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkZGZtYTMzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZGRmbWEzMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRmbWEzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRmbWEzMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRmbWEzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RkZm1hMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MDEgZm1hICAxICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQwMiBmbWEgIDEgICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNSBmbWEgIDEgICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDEwIGZtYSAgMSAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MTEgZm1hICAxICAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTIgZm1hICAxICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTMgZm1hICAxICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTQgZm1hICAxICAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTUgZm1hICAxICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTYgZm1hICAxICAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzQyMCBmbWEgIDEgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MjEgZm1hICAxICAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQyMiBmbWEgIDEgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyMyBmbWEgIDEgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNCBmbWEgIDEgICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNSBmbWEgIDEgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDMwIGZtYSAgMSAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MzEgZm1hICAxICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzIgZm1hICAxICAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzMgZm1hICAxICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzQgZm1hICAxICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzUgZm1hICAxICAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkZm1hMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDQyIGZtYSAgMSAgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NDUgZm1hICAxICAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzY0NTAgZm1hICAxICAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTMgZm1hICAxICAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDU2IGZtYSAgMSAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ2MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MSBmbWEgIDEgICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NjIgZm1hICAxICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ2NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ2NSBmbWEgIDEgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ3MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NzEgZm1hICAxICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ3MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDc1IGZtYSAgMSAgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkZGZtYTM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgyIGZtYSAgMSAgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0ODUgZm1hICAxICAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ5MCBmbWEgIDEgIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5MyBmbWEgIDEgIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTYgZm1hICAxICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjUwMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY1MDEgZm1hICAxICAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDQgZm1hICAxICAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTA1IGZtYSAgMSAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzY1MTAgZm1hICAxICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZGRmbWEzNjUxMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUxMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTMgZm1hICAxICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE1IGZtYSAgMSAgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBhIGNvdXBsZSBtb3JlIHdpdGggbG9uZ2VyIFJIUworZGRmbWEzNjUyMCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIyMjMKK2RkZm1hMzY1MjEgZm1hICAxICAgIDEgICAtNzc3N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjIyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyMiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTIzIGZtYSAgMSAgICAxICAgLTc3NzdlLTE5ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjQgZm1hICAxICAgIDEgICAtNzc3N2UtMjAgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNSBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjYgZm1hICAxICAgIDEgICAtNzc3N2UtMjIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTM2NTQwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitkZGZtYTM2NTQxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGZtYTM2NTU3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkZm1hMzY1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzY1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTcxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzY1NzcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkZm1hMzc1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTQxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkZm1hMzc1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzc1NTEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTUyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTYxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzc1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworCistLSB2ZXJpZnkgYSBxdWVyeQorcm91bmRpbmc6ICAgICBkb3duCitkZGZtYTM3NjYxIGZtYSAgMSAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc2NjIgZm1hICAxICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKK2RkZm1hMzc2NjMgZm1hICAxICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzY2NCBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkZm1hMzc3MDEgZm1hICAxICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZGRmbWEzNzcwMiBmbWEgIDEgIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZGRmbWEzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZGRmbWEzNzcwNCBmbWEgIDEgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitkZGZtYTM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2RkZm1hMzc3MTEgZm1hICAxICAwRSszICAwMC4wICAgLT4gMC4wCitkZGZtYTM3NzEyIGZtYSAgMSAgMEUrMyAgMDAuICAgIC0+IDAKK2RkZm1hMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQorZGRmbWEzNzcxNCBmbWEgIDEgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitkZGZtYTM3NzE1IGZtYSAgMSAgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2RkZm1hMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMworZGRmbWEzNzcxNyBmbWEgIDEgIDBFKzMgIDAwLkUrNSAtPiAwRSszCitkZGZtYTM3NzE4IGZtYSAgMSAgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2RkZm1hMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDAKK2RkZm1hMzc3MzEgZm1hICAxICAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZGRmbWEzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwCitkZGZtYTM3NzIxIGZtYSAgMSAgMDAuMCAgIDBFKzMgIC0+IDAuMAorZGRmbWEzNzcyMiBmbWEgIDEgIDAwLiAgICAwRSszICAtPiAwCitkZGZtYTM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2RkZm1hMzc3MjQgZm1hICAxICAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZGRmbWEzNzcyNSBmbWEgIDEgIDAwLkUrMyAwRSszICAtPiAwRSszCitkZGZtYTM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2RkZm1hMzc3MjcgZm1hICAxICAwMC5FKzUgMEUrMyAgLT4gMEUrMworZGRmbWEzNzcyOCBmbWEgIDEgIC0wMC4wMCAwRSszICAtPiAwLjAwCitkZGZtYTM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMAorZGRmbWEzNzczMCBmbWEgIDEgIC0wMC4gICAwRSszICAtPiAwCisKK2RkZm1hMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDAKK2RkZm1hMzc3MzMgZm1hICAxICAgMCAgICAtMCAgICAgLT4gIDAKK2RkZm1hMzc3MzQgZm1hICAxICAtMCAgICAgMCAgICAgLT4gIDAKK2RkZm1hMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitkZGZtYTM3NzM2IGZtYSAgMSAgIDEgICAgLTEgICAgIC0+ICAwCitkZGZtYTM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yCitkZGZtYTM3NzM4IGZtYSAgMSAgIDEgICAgIDEgICAgIC0+ICAyCitkZGZtYTM3NzM5IGZtYSAgMSAgLTEgICAgIDEgICAgIC0+ICAwCisKK2RkZm1hMzc3NDEgZm1hICAxICAgMCAgICAtMSAgICAgLT4gLTEKK2RkZm1hMzc3NDIgZm1hICAxICAtMCAgICAtMSAgICAgLT4gLTEKK2RkZm1hMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDEKK2RkZm1hMzc3NDQgZm1hICAxICAtMCAgICAgMSAgICAgLT4gIDEKK2RkZm1hMzc3NDUgZm1hICAxICAtMSAgICAgMCAgICAgLT4gLTEKK2RkZm1hMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTEKK2RkZm1hMzc3NDcgZm1hICAxICAgMSAgICAgMCAgICAgLT4gIDEKK2RkZm1hMzc3NDggZm1hICAxICAgMSAgICAtMCAgICAgLT4gIDEKKworZGRmbWEzNzc1MSBmbWEgIDEgICAwLjAgIC0xICAgICAtPiAtMS4wCitkZGZtYTM3NzUyIGZtYSAgMSAgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMAorZGRmbWEzNzc1NCBmbWEgIDEgIC0wLjAgICAxICAgICAtPiAgMS4wCitkZGZtYTM3NzU1IGZtYSAgMSAgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMAorZGRmbWEzNzc1NyBmbWEgIDEgICAxLjAgICAwICAgICAtPiAgMS4wCitkZGZtYTM3NzU4IGZtYSAgMSAgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZGRmbWEzNzc2MSBmbWEgIDEgICAwICAgIC0xLjAgICAtPiAtMS4wCitkZGZtYTM3NzYyIGZtYSAgMSAgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMAorZGRmbWEzNzc2NCBmbWEgIDEgIC0wICAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3NzY1IGZtYSAgMSAgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMAorZGRmbWEzNzc2NyBmbWEgIDEgICAxICAgICAwLjAgICAtPiAgMS4wCitkZGZtYTM3NzY4IGZtYSAgMSAgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZGRmbWEzNzc3MSBmbWEgIDEgICAwLjAgIC0xLjAgICAtPiAtMS4wCitkZGZtYTM3NzcyIGZtYSAgMSAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMAorZGRmbWEzNzc3NCBmbWEgIDEgIC0wLjAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc1IGZtYSAgMSAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMAorZGRmbWEzNzc3NyBmbWEgIDEgICAxLjAgICAwLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc4IGZtYSAgMSAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2RkZm1hMzc3ODAgZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4MiBmbWEgIDEgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODMgZm1hICAxICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4NSBmbWEgIDEgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODYgZm1hICAxICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4OCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODkgZm1hICAxICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5MSBmbWEgIDEgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTIgZm1hICAxICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5NCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODAxIGZtYSAgMSAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwMiBmbWEgIDEgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA0IGZtYSAgMSAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwNSBmbWEgIDEgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA3IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwOCBmbWEgIDEgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4MTAgZm1hICAxICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODExIGZtYSAgMSAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTMgZm1hICAxICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODE0IGZtYSAgMSAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRmbWEzNzgyMSBmbWEgIDEgICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGZtYTM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkZm1hMzc4MjMgZm1hICAxICAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNCBmbWEgIDEgICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGZtYTM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkZm1hMzc4MjYgZm1hICAxICAgTmFOICAxICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNyBmbWEgIDEgICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGZtYTM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkZm1hMzc4MjkgZm1hICAxICAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMCBmbWEgIDEgIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzIgZm1hICAxICAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMyBmbWEgIDEgIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzUgZm1hICAxICAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzNiBmbWEgIDEgICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRmbWEzNzg0MSBmbWEgIDEgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0MyBmbWEgIDEgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NCBmbWEgIDEgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NiBmbWEgIDEgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NyBmbWEgIDEgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0OSBmbWEgIDEgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MCBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MiBmbWEgIDEgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MyBmbWEgIDEgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NSBmbWEgIDEgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NiBmbWEgIDEgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1OCBmbWEgIDEgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1OSBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGZtYTM3ODYxIGZtYSAgMSAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZGZtYTM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZGZtYTM3ODYzIGZtYSAgMSAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZGZtYTM3ODY0IGZtYSAgMSAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZGZtYTM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZGZtYTM3ODY2IGZtYSAgMSAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZGZtYTM3ODY3IGZtYSAgMSAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZGZtYTM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZGZtYTM3ODY5IGZtYSAgMSAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRmbWEzNzg3MSBmbWEgIDEgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzMgZm1hICAxICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NCBmbWEgIDEgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzYgZm1hICAxICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NyBmbWEgIDEgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzkgZm1hICAxICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4MCBmbWEgIDEgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODIgZm1hICAxICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZGZtYTM3ODgzIGZtYSAgMSAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZGZtYTM3ODg1IGZtYSAgMSAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2RkZm1hMzc1NzUgZm1hICAxICAgMUUtMzgzIC0xRS0zOTggLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitkZGZtYTM3NTc2IGZtYSAgMSAgLTFFLTM4MyArMUUtMzk4IC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEzNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGZtYTM3OTczIGZtYSAgMSAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzYgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzcgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzkgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODAgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTgzIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGZtYTM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4OCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkwIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5MSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkzIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorZGRmbWEzNzExMDAgZm1hICAxICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwMSBmbWEgIDEgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwMyBmbWEgIDEgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMDQgZm1hICAxICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNSBmbWEgIDEgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNiBmbWEgIDEgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMDcgZm1hICAxICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwOCBmbWEgIDEgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwOSBmbWEgIDEgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZGRmbWEzNzExMTAgZm1hICAxICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTEgZm1hICAxICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTQgZm1hICAxICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTUgZm1hICAxICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTcgZm1hICAxICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTggZm1hICAxICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCitkZGZtYTM3MTMwMCBmbWEgIDEgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMCBmbWEgIDEgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMSBmbWEgIDEgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxOSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyOSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzOCBmbWEgIDEgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzOSBmbWEgIDEgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzcxMzQwIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzQxIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNzEzNDkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitkZGZtYTM3MTQyMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkZm1hMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitkZGZtYTM3MTQyOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRmbWEzNzE0MzAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGZtYTM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RkZm1hMzcxNDMyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRmbWEzNzE0MzMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGZtYTM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RkZm1hMzcxNDM1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRmbWEzNzE0MzYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGZtYTM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RkZm1hMzcxNDM4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRmbWEzNzE0MzkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RkZm1hMzcxNDQwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ0MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ0NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkZm1hMzcxNDQ4IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkZm1hMzcxNDQ5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2RkZm1hMzcxNDUwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGZtYTM3MTQ1MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRmbWEzNzE0NTIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RkZm1hMzcxNDUzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGZtYTM3MTQ1NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRmbWEzNzE0NTUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RkZm1hMzcxNDU2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGZtYTM3MTQ1NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRmbWEzNzE0NTggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RkZm1hMzcxNDU5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitkZGZtYTM3MTQ2MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2NiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2OSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2RkZm1hMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGZtYTM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRmbWEzNzE0NzggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkZm1hMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU2MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1NzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1NzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTkxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGZtYTM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTYyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE2MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorZGRmbWEzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RkZm1hMzcxNzAxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkZGZtYTM3MTcwMiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZGRmbWEzNzE3MDMgZm1hICAxICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RkZm1hMzcxNzA0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkZGZtYTM3MTcwNSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZGRmbWEzNzE3MDYgZm1hICAxICAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RkZm1hMzcxNzA3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkZGZtYTM3MTcwOCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkZm1hMzc1MDAxIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NworZGRmbWEzNzUwMDIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDAzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEyIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTQgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE1IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTcgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE4IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxOSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMjAgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDIxIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RkZm1hMzc1MDMwIGZtYSAgMSAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKK2RkZm1hMzc1MDMxIGZtYSAgMSAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQorZGRmbWEzNzUwMzIgZm1hICAxICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMgorZGRmbWEzNzUwMzMgZm1hICAxICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKK2RkZm1hMzc1MDM0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAorZGRmbWEzNzUwMzUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQorZGRmbWEzNzUwMzYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKK2RkZm1hMzc1MDM3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NworZGRmbWEzNzUwMzggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OAorZGRmbWEzNzUwMzkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQwIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDIgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQzIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ2IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ5IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzNzUwNTAgZm1hICAxICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDUxIGZtYSAgMSAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTMgZm1hICAxICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU0IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTYgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU3IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDY1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZGRmbWEzNzUwNzAgZm1hICAxICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQorZGRmbWEzNzUwNzEgZm1hICAxICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDcyIGZtYSAgMSAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzQgZm1hICAxICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc1IGZtYSAgMSAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzcgZm1hICAxICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc4IGZtYSAgMSAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODAgZm1hICAxICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDgxIGZtYSAgMSAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODMgZm1hICAxICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg0IGZtYSAgMSAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4NSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODYgZm1hICAxICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg3IGZtYSAgMSAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4OCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODkgZm1hICAxICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gZGVzY3RydWN0aXZlIHN1YnRyYWN0aW9uIChmcm9tIHJlbWFpbmRlciB0ZXN0cykKKworLS0gKysrIHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvZmYtYnktb25lIHJlbWFpbmRlciB2cyByZW1haW5kZXJOZWFyCisKK2RkZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NCAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc2NTQzMjEwOTg3NjU0NgorZGRmbWE0MDAxICBmbWEgIC0xMjM0NTY3ODkwMTIzNDQzICAgIDEuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNjU0MzIxMDk4NzY1NTcKK2RkZm1hNDAwMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzMzMiAgICAgMS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjU0MzIxMDk4NzY2NjgKK2RkZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNworZGRmbWE0MDA0ICBmbWEgICAtMzA4NjQxOTcyNTMwODYzICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNjkxMzU4MDI3NDY5MTM3CitkZGZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTYgICAgIDQuOTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42OTEzNTc4MDI0Njk2CitkZGZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy40NjkxMzU3ODAyNDY5MQorZGRmbWE0MDA3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNC45OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkKK2RkZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MCAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjUzMDg2NDIxOTc1MzEwCitkZGZtYTQwMTAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2ODYgICAgIDUuMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4zMDg2NDIxOTc1MzE0CitkZGZtYTQwMTEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTUgICAxLjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1CitkZGZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDQgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NDQKK2RkZm1hNDAxMyAgZm1hICAtMTIzNDU2Nzg5MDEyMzMzMyAgICAgMS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC40NTY3ODkwMTIzMzMzCitkZGZtYTQwMTQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU1ICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0CitkZGZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0CitkZGZtYTQwMTYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTYgICAgIDQuOTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42OTEzNTc4MDI0Njk2CitkZGZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTIgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNTMwODY0MjE5NzUzMDgKK2RkZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQorZGRmbWE0MDE5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNS4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNzUzMDg2NDIxOTc1MzA5CitkZGZtYTQwMjAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNDY5MTM1NzgwMjQ2OTEKK2RkZm1hNDAyMSAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQKKworCistLSBOdWxsIHRlc3RzCitkZGZtYTM5OTkwIGZtYSAgMSAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM5OTkxIGZtYSAgMSAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkSW52ZXJ0LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdAppbmRleCAzMjFlNGU5Li41ZDE5ZmJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdApAQCAtMSwyMDIgKzEsMjAyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZEludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCBmb3IgZGVjRG91YmxlcyAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KLWRkaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTENCi1kZGludjAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTExMTExMTEwDQotZGRpbnYwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTExMTExMTEwMQ0KLWRkaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTEwMDAwMDAwMDANCi1kZGludjAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTExMTExMTExDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi1kZGludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTENCi1kZGludjAwOCBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMTExMTExMTExMTExMTENCi1kZGludjAwOSBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTENCi1kZGludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTENCi1kZGludjAxMSBpbnZlcnQgMDExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi1kZGludjAxMiBpbnZlcnQgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgIDANCi1kZGludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDANCi1kZGludjAxNCBpbnZlcnQgMDExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZGRpbnYwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDExMTExMTEwMDAwMDAwMDANCi1kZGludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMA0KLWRkaW52MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMTExMTExMTAwMDAwMDAwDQotZGRpbnYwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMTExMTExMTAwMDAwMDANCi1kZGludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMTExMTExMTAwMDAwMA0KLWRkaW52MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMTExMTExMTAwMDAwDQotZGRpbnYwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMTExMTExMTAwMDANCi1kZGludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMTExMTExMTAwMA0KLWRkaW52MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMTExMTExMTAwDQotZGRpbnYwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMTExMTExMTANCi1kZGludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMA0KLWRkaW52MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+ICAxMTExMTAwMDAwMDAwMDAwDQotZGRpbnYwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gIDExMTExMTAwMDAwMDAwMDANCi1kZGludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMA0KLQ0KLWRkaW52MDQwIGludmVydCAwMTExMTExMTEgICAtPiAgMTExMTExMTEwMDAwMDAwMA0KLWRkaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAgMTExMTExMTAxMDAwMDAwMA0KLWRkaW52MDQyIGludmVydCAxMTAxMTExMTEgICAtPiAgMTExMTExMTAwMTAwMDAwMA0KLWRkaW52MDQzIGludmVydCAxMTEwMTExMTEgICAtPiAgMTExMTExMTAwMDEwMDAwMA0KLWRkaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAgMTExMTExMTAwMDAxMDAwMA0KLWRkaW52MDQ1IGludmVydCAxMTExMTAxMTEgICAtPiAgMTExMTExMTAwMDAwMTAwMA0KLWRkaW52MDQ2IGludmVydCAxMTExMTEwMTEgICAtPiAgMTExMTExMTAwMDAwMDEwMA0KLWRkaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAgMTExMTExMTAwMDAwMDAxMA0KLWRkaW52MDQ4IGludmVydCAxMTExMTExMTAgICAtPiAgMTExMTExMTAwMDAwMDAwMQ0KLWRkaW52MDQ5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMA0KLWRkaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMA0KLWRkaW52MDUxIGludmVydCAxMTAxMTExMTAgICAtPiAgMTExMTExMTAwMTAwMDAwMQ0KLWRkaW52MDUyIGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMA0KLWRkaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMA0KLWRkaW52MDU0IGludmVydCAxMTExMTAxMTEgICAtPiAgMTExMTExMTAwMDAwMTAwMA0KLWRkaW52MDU1IGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMA0KLWRkaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMA0KLWRkaW52MDU3IGludmVydCAxMTAxMTExMTAgICAtPiAgMTExMTExMTAwMTAwMDAwMQ0KLWRkaW52MDU4IGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMA0KLWRkaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMA0KLQ0KLWRkaW52MDgwIGludmVydCAxMDAwMDAwMDExMTExMTExICAgLT4gICAxMTExMTExMDAwMDAwMDANCi1kZGludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+ICAxMDExMTExMDEwMDAwMDAwDQotZGRpbnYwODIgaW52ZXJ0IDAwMTAwMDAxMTAxMTExMTEgICAtPiAgMTEwMTExMTAwMTAwMDAwMA0KLWRkaW52MDgzIGludmVydCAwMDAxMDAwMTExMDExMTExICAgLT4gIDExMTAxMTEwMDAxMDAwMDANCi1kZGludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+ICAxMTExMDExMDAwMDEwMDAwDQotZGRpbnYwODUgaW52ZXJ0IDAwMDAwMTAxMTExMTAxMTEgICAtPiAgMTExMTEwMTAwMDAwMTAwMA0KLWRkaW52MDg2IGludmVydCAwMDAwMDAxMTExMTExMDExICAgLT4gIDExMTExMTAwMDAwMDAxMDANCi1kZGludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+ICAxMTExMTAxMDAwMDAwMDEwDQotZGRpbnYwODggaW52ZXJ0IDAwMDAxMDAxMTExMTExMTAgICAtPiAgMTExMTAxMTAwMDAwMDAwMQ0KLWRkaW52MDg5IGludmVydCAwMDAxMDAwMDExMTExMDExICAgLT4gIDExMTAxMTExMDAwMDAxMDANCi1kZGludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+ICAxMTAxMTExMDEwMDAwMDEwDQotZGRpbnYwOTEgaW52ZXJ0IDAxMDAwMDAxMTAxMTExMTAgICAtPiAgMTAxMTExMTAwMTAwMDAwMQ0KLWRkaW52MDkyIGludmVydCAxMDAwMDAwMTExMDExMTAxICAgLT4gICAxMTExMTEwMDAxMDAwMTANCi1kZGludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+ICAxMDExMTExMDAwMDEwMTAwDQotZGRpbnYwOTQgaW52ZXJ0IDAwMTAwMDAxMTExMTAxMTEgICAtPiAgMTEwMTExMTAwMDAwMTAwMA0KLWRkaW52MDk1IGludmVydCAwMDAxMDAwMTExMTAxMDExICAgLT4gIDExMTAxMTEwMDAwMTAxMDANCi1kZGludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+ICAxMTExMDExMDAwMTAwMDEwDQotZGRpbnYwOTcgaW52ZXJ0IDAwMDAwMTAxMTAxMTExMTAgICAtPiAgMTExMTEwMTAwMTAwMDAwMQ0KLWRkaW52MDk4IGludmVydCAwMDAwMDAxMTAxMTExMTAxICAgLT4gIDExMTExMTAwMTAwMDAwMTANCi1kZGludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+ICAxMTExMTAxMTAwMDAwMTAwDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZGRpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZGRpbnYyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZGRpbnYyNTAgaW52ZXJ0ICAyMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTIgaW52ZXJ0ICA0MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTMgaW52ZXJ0ICA1MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTUgaW52ZXJ0ICA3MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTYgaW52ZXJ0ICA4MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWRkaW52MjcwIGludmVydCAgMDIwMDAwMTAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjcxIGludmVydCAgMDMwMDAwMDEwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjcyIGludmVydCAgMDQwMDAwMDAxMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MjczIGludmVydCAgMDUwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjc0IGludmVydCAgMTYwMDAwMDAwMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjc1IGludmVydCAgMTcwMDAwMDAwMDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjc2IGludmVydCAgMTgwMDAwMDAwMDAwMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52Mjc3IGludmVydCAgMTkwMDAwMDAwMDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZGRpbnYyODAgaW52ZXJ0ICAwMDEwMDAwMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODIgaW52ZXJ0ICAwMDAwMTAwMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODMgaW52ZXJ0ICAwMDAwMDEwMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODQgaW52ZXJ0ICAxMDAwMDAxMDAwMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODUgaW52ZXJ0ICAxMDAwMDAwMTAwMDAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODYgaW52ZXJ0ICAxMDAwMDAwMDEwMDAwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kZGludjI4OCBpbnZlcnQgIDAwMTAwMDAwMjAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI4OSBpbnZlcnQgIDAwMDEwMDAwMzAwMDAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5MCBpbnZlcnQgIDAwMDAxMDAwNDAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5MSBpbnZlcnQgIDAwMDAwMTAwNTAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5MiBpbnZlcnQgIDEwMDAwMDEwNjAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5MyBpbnZlcnQgIDEwMDAwMDAxNzAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5NCBpbnZlcnQgIDEwMDAwMDAwODAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjI5NSBpbnZlcnQgIDEwMDAwMDAwOTEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWduDQotZGRpbnYyOTYgaW52ZXJ0IC0xMDAwMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMTEwMTExMTExDQotDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRkaW52MzQxIGludmVydCAgOS45OTk5OTk5OUUrMjk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNDIgaW52ZXJ0ICAxRS0yOTkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzQ0IGludmVydCAgMUUtMjA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNDUgaW52ZXJ0ICAtMUUtMjA3ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzQ3IGludmVydCAgLTFFLTI5OSAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrMjk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1kZGludjM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnYzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotZGRpbnY3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZGludjg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkaW52ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkSW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUIGZvciBkZWNEb3VibGVzICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZGludjAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTExMTExMTExCitkZGludjAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTExMTExMTEwCitkZGludjAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMTExMTExMTAxCitkZGludjAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAxMTExMTExMDAwMDAwMDAwCitkZGludjAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTExMTExMTExCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZGRpbnYwMDcgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExCitkZGludjAwOCBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMTExMTExMTExMTExMTEKK2RkaW52MDA5IGludmVydCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMQorZGRpbnYwMTAgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAgLT4gICAxMDExMTExMTExMTExMTExCitkZGludjAxMSBpbnZlcnQgMDExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkaW52MDEyIGludmVydCAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAgMAorZGRpbnYwMTMgaW52ZXJ0IDAwMTExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwCitkZGludjAxNCBpbnZlcnQgMDExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgICAxMjM0NTY3ODkgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGludjAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMAorZGRpbnYwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMDAwMDAKK2RkaW52MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMTExMTExMTAwMDAwMDAwCitkZGludjAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAgMTExMTExMTExMDAwMDAwMAorZGRpbnYwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gIDExMTExMTExMTEwMDAwMDAKK2RkaW52MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMTExMTExMTAwMDAwCitkZGludjAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAgMTExMTExMTExMTExMDAwMAorZGRpbnYwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gIDExMTExMTExMTExMTEwMDAKK2RkaW52MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMTExMTExMTAwCitkZGludjAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAgMTExMTExMTExMTExMTExMAorZGRpbnYwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMDAwMDAKK2RkaW52MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+ICAxMTExMTAwMDAwMDAwMDAwCitkZGludjAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMTExMTExMDAwMDAwMDAwMAorZGRpbnYwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDExMTExMTEwMDAwMDAwMDAKKworZGRpbnYwNDAgaW52ZXJ0IDAxMTExMTExMSAgIC0+ICAxMTExMTExMTAwMDAwMDAwCitkZGludjA0MSBpbnZlcnQgMTAxMTExMTExICAgLT4gIDExMTExMTEwMTAwMDAwMDAKK2RkaW52MDQyIGludmVydCAxMTAxMTExMTEgICAtPiAgMTExMTExMTAwMTAwMDAwMAorZGRpbnYwNDMgaW52ZXJ0IDExMTAxMTExMSAgIC0+ICAxMTExMTExMDAwMTAwMDAwCitkZGludjA0NCBpbnZlcnQgMTExMTAxMTExICAgLT4gIDExMTExMTEwMDAwMTAwMDAKK2RkaW52MDQ1IGludmVydCAxMTExMTAxMTEgICAtPiAgMTExMTExMTAwMDAwMTAwMAorZGRpbnYwNDYgaW52ZXJ0IDExMTExMTAxMSAgIC0+ICAxMTExMTExMDAwMDAwMTAwCitkZGludjA0NyBpbnZlcnQgMTExMTExMTAxICAgLT4gIDExMTExMTEwMDAwMDAwMTAKK2RkaW52MDQ4IGludmVydCAxMTExMTExMTAgICAtPiAgMTExMTExMTAwMDAwMDAwMQorZGRpbnYwNDkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMTExMTExMTAwMDAwMTAwCitkZGludjA1MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTAKK2RkaW52MDUxIGludmVydCAxMTAxMTExMTAgICAtPiAgMTExMTExMTAwMTAwMDAwMQorZGRpbnYwNTIgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAxMTExMTExMDAwMTAwMDEwCitkZGludjA1MyBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDAKK2RkaW52MDU0IGludmVydCAxMTExMTAxMTEgICAtPiAgMTExMTExMTAwMDAwMTAwMAorZGRpbnYwNTUgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAxMTExMTExMDAwMDEwMTAwCitkZGludjA1NiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTAKK2RkaW52MDU3IGludmVydCAxMTAxMTExMTAgICAtPiAgMTExMTExMTAwMTAwMDAwMQorZGRpbnYwNTggaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAxMTExMTExMDEwMDAwMDEwCitkZGludjA1OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDAKKworZGRpbnYwODAgaW52ZXJ0IDEwMDAwMDAwMTExMTExMTEgICAtPiAgIDExMTExMTEwMDAwMDAwMAorZGRpbnYwODEgaW52ZXJ0IDAxMDAwMDAxMDExMTExMTEgICAtPiAgMTAxMTExMTAxMDAwMDAwMAorZGRpbnYwODIgaW52ZXJ0IDAwMTAwMDAxMTAxMTExMTEgICAtPiAgMTEwMTExMTAwMTAwMDAwMAorZGRpbnYwODMgaW52ZXJ0IDAwMDEwMDAxMTEwMTExMTEgICAtPiAgMTExMDExMTAwMDEwMDAwMAorZGRpbnYwODQgaW52ZXJ0IDAwMDAxMDAxMTExMDExMTEgICAtPiAgMTExMTAxMTAwMDAxMDAwMAorZGRpbnYwODUgaW52ZXJ0IDAwMDAwMTAxMTExMTAxMTEgICAtPiAgMTExMTEwMTAwMDAwMTAwMAorZGRpbnYwODYgaW52ZXJ0IDAwMDAwMDExMTExMTEwMTEgICAtPiAgMTExMTExMDAwMDAwMDEwMAorZGRpbnYwODcgaW52ZXJ0IDAwMDAwMTAxMTExMTExMDEgICAtPiAgMTExMTEwMTAwMDAwMDAxMAorZGRpbnYwODggaW52ZXJ0IDAwMDAxMDAxMTExMTExMTAgICAtPiAgMTExMTAxMTAwMDAwMDAwMQorZGRpbnYwODkgaW52ZXJ0IDAwMDEwMDAwMTExMTEwMTEgICAtPiAgMTExMDExMTEwMDAwMDEwMAorZGRpbnYwOTAgaW52ZXJ0IDAwMTAwMDAxMDExMTExMDEgICAtPiAgMTEwMTExMTAxMDAwMDAxMAorZGRpbnYwOTEgaW52ZXJ0IDAxMDAwMDAxMTAxMTExMTAgICAtPiAgMTAxMTExMTAwMTAwMDAwMQorZGRpbnYwOTIgaW52ZXJ0IDEwMDAwMDAxMTEwMTExMDEgICAtPiAgIDExMTExMTAwMDEwMDAxMAorZGRpbnYwOTMgaW52ZXJ0IDAxMDAwMDAxMTExMDEwMTEgICAtPiAgMTAxMTExMTAwMDAxMDEwMAorZGRpbnYwOTQgaW52ZXJ0IDAwMTAwMDAxMTExMTAxMTEgICAtPiAgMTEwMTExMTAwMDAwMTAwMAorZGRpbnYwOTUgaW52ZXJ0IDAwMDEwMDAxMTExMDEwMTEgICAtPiAgMTExMDExMTAwMDAxMDEwMAorZGRpbnYwOTYgaW52ZXJ0IDAwMDAxMDAxMTEwMTExMDEgICAtPiAgMTExMTAxMTAwMDEwMDAxMAorZGRpbnYwOTcgaW52ZXJ0IDAwMDAwMTAxMTAxMTExMTAgICAtPiAgMTExMTEwMTAwMTAwMDAwMQorZGRpbnYwOTggaW52ZXJ0IDAwMDAwMDExMDExMTExMDEgICAtPiAgMTExMTExMDAxMDAwMDAxMAorZGRpbnYwOTkgaW52ZXJ0IDAwMDAwMTAwMTExMTEwMTEgICAtPiAgMTExMTEwMTEwMDAwMDEwMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RkaW52MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkZGludjI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZGludjI1MCBpbnZlcnQgIDIwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjUxIGludmVydCAgMzAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTIgaW52ZXJ0ICA0MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1MyBpbnZlcnQgIDUwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjU0IGludmVydCAgNjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTUgaW52ZXJ0ICA3MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1NiBpbnZlcnQgIDgwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjU3IGludmVydCAgOTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGRpbnYyNzAgaW52ZXJ0ICAwMjAwMDAxMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3MSBpbnZlcnQgIDAzMDAwMDAxMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjcyIGludmVydCAgMDQwMDAwMDAxMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzMgaW52ZXJ0ICAwNTAwMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3NCBpbnZlcnQgIDE2MDAwMDAwMDAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc1IGludmVydCAgMTcwMDAwMDAwMDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzYgaW52ZXJ0ICAxODAwMDAwMDAwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3NyBpbnZlcnQgIDE5MDAwMDAwMDAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkZGludjI4MCBpbnZlcnQgIDAwMTAwMDAwMDAwMDAwMDIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjgxIGludmVydCAgMDAwMTAwMDAwMDAwMDAwMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODIgaW52ZXJ0ICAwMDAwMTAwMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4MyBpbnZlcnQgIDAwMDAwMTAwMDAwMDAwMDUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg0IGludmVydCAgMTAwMDAwMTAwMDAwMDAwNiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODUgaW52ZXJ0ICAxMDAwMDAwMTAwMDAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4NiBpbnZlcnQgIDEwMDAwMDAwMTAwMDAwMDggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg3IGludmVydCAgMTAwMDAwMDAwMTAwMDAwOSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RkaW52Mjg4IGludmVydCAgMDAxMDAwMDAyMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODkgaW52ZXJ0ICAwMDAxMDAwMDMwMDAwMDAxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5MCBpbnZlcnQgIDAwMDAxMDAwNDAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkxIGludmVydCAgMDAwMDAxMDA1MDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTIgaW52ZXJ0ICAxMDAwMDAxMDYwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5MyBpbnZlcnQgIDEwMDAwMDAxNzAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjk0IGludmVydCAgMTAwMDAwMDA4MDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTUgaW52ZXJ0ICAxMDAwMDAwMDkxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWduCitkZGludjI5NiBpbnZlcnQgLTEwMDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjk5IGludmVydCAgMTAwMDAwMDAwMTAwMDAwMCAgLT4gIDExMTExMTExMDExMTExMQorCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RkaW52MzQxIGludmVydCAgOS45OTk5OTk5OUUrMjk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0MiBpbnZlcnQgIDFFLTI5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS0yOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ0IGludmVydCAgMUUtMjA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0NSBpbnZlcnQgIC0xRS0yMDcgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtMjk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ3IGludmVydCAgLTFFLTI5OSAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSsyOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RkaW52MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZGRpbnY3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludjgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkaW52ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdAppbmRleCAwMDU4OWI2Li5kZTcyOGU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRMb2dCLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0CkBAIC0xLDE1OSArMSwxNTkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTG9nQi5kZWNUZXN0IC0tIGludGVncmFsIDc1NHIgYWRqdXN0ZWQgZXhwb25lbnQsIGZvciBkZWNEb3VibGVzICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIGJhc2ljcw0KLWRkbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IwMDEgbG9nYiAgMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OA0KLWRkbG9nYjAwMiBsb2diICAxRS0zODMgICAgICAgICAgICAtPiAtMzgzDQotZGRsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zDQotZGRsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yDQotZGRsb2diMDA1IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDA4IGxvZ2IgIDIuNTAwICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDA5IGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxDQotZGRsb2diMDEwIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxDQotZGRsb2diMDExIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyDQotZGRsb2diMDEyIGxvZ2IgIDMzMyAgICAgICAgICAgICAgIC0+ICAyDQotZGRsb2diMDEzIGxvZ2IgIDlFKzM4NCAgICAgICAgICAgIC0+ICAzODQNCi1kZGxvZ2IwMTQgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcw0KLWRkbG9nYjAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IwMjIgbG9nYiAtMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OA0KLWRkbG9nYjAyMyBsb2diIC05RS0zODMgICAgICAgICAgICAtPiAtMzgzDQotZGRsb2diMDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zDQotZGRsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwDQotZGRsb2diMDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxDQotZGRsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxDQotZGRsb2diMDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyDQotZGRsb2diMDMwIGxvZ2IgLTlFKzM4NCAgICAgICAgICAgIC0+ICAzODQNCi1kZGxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotLS0gemVyb3MNCi1kZGxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kZGxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZGRsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgNCi1kZGxvZ2IxMjIgbG9nYiAgLTI2ODI2ODI2OCAgICAgICAgLT4gOA0KLWRkbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4DQotZGRsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRkbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gIDM4NA0KLWRkbG9nYjEzMiBsb2diICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTM4Mw0KLWRkbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTM4Mw0KLWRkbG9nYjEzNCBsb2diICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTM5OA0KLQ0KLWRkbG9nYjEzNSBsb2diICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTM5OA0KLWRkbG9nYjEzNiBsb2diICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTM4Mw0KLWRkbG9nYjEzNyBsb2diICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTM4Mw0KLWRkbG9nYjEzOCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIDM4NA0KLQ0KLS0tIG9uZXMNCi1kZGxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWRkbG9nYjAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwDQotZGRsb2diMDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi0NCi0tLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMA0KLWRkbG9nYjExMDAgbG9nYiAxICAgICAgICAgICAgIC0+IDANCi1kZGxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxDQotZGRsb2diMTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMg0KLWRkbG9nYjExMDMgbG9nYiAxMDAwICAgICAgICAgIC0+IDMNCi1kZGxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0DQotZGRsb2diMTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQ0KLWRkbG9nYjExMDYgbG9nYiAxMDAwMDAwICAgICAgIC0+IDYNCi1kZGxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3DQotZGRsb2diMTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOA0KLWRkbG9nYjExMDkgbG9nYiAxMDAwMDAwMDAwICAgIC0+IDkNCi1kZGxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMA0KLWRkbG9nYjExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExDQotZGRsb2diMTExMiBsb2diIDEwMDAwMDAwMDAwMDAgLT4gMTINCi1kZGxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTENCi1kZGxvZ2IxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMA0KLWRkbG9nYjExMTUgbG9nYiAwLjAwMDAwMDAwMSAtPiAtOQ0KLWRkbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04DQotZGRsb2diMTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNw0KLWRkbG9nYjExMTggbG9nYiAwLjAwMDAwMSAtPiAtNg0KLWRkbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01DQotZGRsb2diMTEyMCBsb2diIDAuMDAwMSAtPiAtNA0KLWRkbG9nYjExMjEgbG9nYiAwLjAwMSAtPiAtMw0KLWRkbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yDQotZGRsb2diMTEyMyBsb2diIDAuMSAtPiAtMQ0KLWRkbG9nYjExMjQgbG9nYiAxRS05OSAgLT4gLTk5DQotZGRsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwDQotZGRsb2diMTEyNyBsb2diIDFFLTI5OSAtPiAtMjk5DQotZGRsb2diMTEyNiBsb2diIDFFLTM4MyAtPiAtMzgzDQotDQotLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQ0KLWRkbG9nYjE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMg0KLWRkbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQ0KLWRkbG9nYjE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMA0KLWRkbG9nYjE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQ0KLWRkbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMg0KLWRkbG9nYjE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMA0KLWRkbG9nYjE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQ0KLWRkbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMg0KLWRkbG9nYjE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMw0KLWRkbG9nYjE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQ0KLWRkbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMg0KLWRkbG9nYjE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMw0KLWRkbG9nYjE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNA0KLWRkbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMg0KLWRkbG9nYjE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMw0KLWRkbG9nYjE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNA0KLWRkbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQ0KLWRkbG9nYjE0MTcgbG9nYiAxMEUyICAgICAtPiAgMw0KLWRkbG9nYjE0MTggbG9nYiAxMDBFMiAgICAtPiAgNA0KLWRkbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQ0KLWRkbG9nYjE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNg0KLQ0KLS0tIHNwZWNpYWwgdmFsdWVzDQotZGRsb2diODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KLWRkbG9nYjgyMSAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRkbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFODQotZGRsb2diODIzICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbG9nYjgyNSAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbG9nYjgyNiAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2DQotZGRsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQNCi1kZGxvZ2I4MjggIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjENCi0NCi0tLSBOdWxsIHRlc3QNCi1kZGxvZ2I5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY0RvdWJsZXMgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzaWNzCitkZGxvZ2IwMDAgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IwMDEgbG9nYiAgMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMDAyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMworZGRsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitkZGxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMDggbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwOSBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDEwIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMTEgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RkbG9nYjAxMiBsb2diICAzMzMgICAgICAgICAgICAgICAtPiAgMgorZGRsb2diMDEzIGxvZ2IgIDlFKzM4NCAgICAgICAgICAgIC0+ICAzODQKK2RkbG9nYjAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcworZGRsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMDIyIGxvZ2IgLTFFLTM5OCAgICAgICAgICAgIC0+IC0zOTgKK2RkbG9nYjAyMyBsb2diIC05RS0zODMgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2RkbG9nYjAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDEKK2RkbG9nYjAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyCitkZGxvZ2IwMzAgbG9nYiAtOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NAorZGRsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSB6ZXJvcworZGRsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKK2RkbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4CitkZGxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAorZGRsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gIDM4NAorZGRsb2diMTMyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IxMzMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0zODMKK2RkbG9nYjEzNCBsb2diICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTM5OAorCitkZGxvZ2IxMzUgbG9nYiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0zOTgKK2RkbG9nYjEzNiBsb2diICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTM4MworZGRsb2diMTM3IGxvZ2IgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IxMzggbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICAzODQKKworLS0gb25lcworZGRsb2diMDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2RkbG9nYjAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwCitkZGxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorZGRsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMAorZGRsb2diMTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQorZGRsb2diMTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMgorZGRsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMworZGRsb2diMTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNAorZGRsb2diMTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQorZGRsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNgorZGRsb2diMTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNworZGRsb2diMTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOAorZGRsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQorZGRsb2diMTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTAKK2RkbG9nYjExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExCitkZGxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMgorZGRsb2diMTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExCitkZGxvZ2IxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMAorZGRsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05CitkZGxvZ2IxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOAorZGRsb2diMTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNworZGRsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02CitkZGxvZ2IxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQorZGRsb2diMTEyMCBsb2diIDAuMDAwMSAtPiAtNAorZGRsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zCitkZGxvZ2IxMTIyIGxvZ2IgMC4wMSAtPiAtMgorZGRsb2diMTEyMyBsb2diIDAuMSAtPiAtMQorZGRsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkKK2RkbG9nYjExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMAorZGRsb2diMTEyNyBsb2diIDFFLTI5OSAtPiAtMjk5CitkZGxvZ2IxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorZGRsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yCitkZGxvZ2IxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTEKK2RkbG9nYjE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMAorZGRsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxCitkZGxvZ2IxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDIKK2RkbG9nYjE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMAorZGRsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxCitkZGxvZ2IxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDIKK2RkbG9nYjE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMworZGRsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxCitkZGxvZ2IxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDIKK2RkbG9nYjE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMworZGRsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0CitkZGxvZ2IxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDIKK2RkbG9nYjE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMworZGRsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0CitkZGxvZ2IxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUKK2RkbG9nYjE0MTcgbG9nYiAxMEUyICAgICAtPiAgMworZGRsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0CitkZGxvZ2IxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUKK2RkbG9nYjE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNgorCistLSBzcGVjaWFsIHZhbHVlcworZGRsb2diODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQorZGRsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2I4MjIgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTgorZGRsb2diODIzICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGxvZ2I4MjQgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbG9nYjgyNSAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2RkbG9nYjgyNyAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0CitkZGxvZ2I4MjggIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjEKKworLS0gTnVsbCB0ZXN0CitkZGxvZ2I5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QKaW5kZXggNDVlYTliNC4uMWFjNjM5NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QKQEAgLTEsMzIyICsxLDMyMiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRNYXguZGVjVGVzdCAtLSBkZWNEb3VibGUgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRkbWF4MDAxIG1heCAgLTIgIC0yICAtPiAtMg0KLWRkbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQ0KLWRkbWF4MDAzIG1heCAgLTIgICAwICAtPiAgMA0KLWRkbWF4MDA0IG1heCAgLTIgICAxICAtPiAgMQ0KLWRkbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMg0KLWRkbWF4MDA2IG1heCAgLTEgIC0yICAtPiAtMQ0KLWRkbWF4MDA3IG1heCAgLTEgIC0xICAtPiAtMQ0KLWRkbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMA0KLWRkbWF4MDA5IG1heCAgLTEgICAxICAtPiAgMQ0KLWRkbWF4MDEwIG1heCAgLTEgICAyICAtPiAgMg0KLWRkbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMA0KLWRkbWF4MDEyIG1heCAgIDAgIC0xICAtPiAgMA0KLWRkbWF4MDEzIG1heCAgIDAgICAwICAtPiAgMA0KLWRkbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQ0KLWRkbWF4MDE1IG1heCAgIDAgICAyICAtPiAgMg0KLWRkbWF4MDE2IG1heCAgIDEgIC0yICAtPiAgMQ0KLWRkbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQ0KLWRkbWF4MDE4IG1heCAgIDEgICAwICAtPiAgMQ0KLWRkbWF4MDE5IG1heCAgIDEgICAxICAtPiAgMQ0KLWRkbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMg0KLWRkbWF4MDIxIG1heCAgIDIgIC0yICAtPiAgMg0KLWRkbWF4MDIyIG1heCAgIDIgIC0xICAtPiAgMg0KLWRkbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMg0KLWRkbWF4MDI1IG1heCAgIDIgICAxICAtPiAgMg0KLWRkbWF4MDI2IG1heCAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZGRtYXgwMzAgbWF4ICAgMCAgICAgMCAgIC0+ICAwDQotZGRtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwDQotZGRtYXgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwDQotZGRtYXgwMzMgbWF4ICAgMCAgICAgMC4wIC0+ICAwDQotZGRtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQotZGRtYXgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wDQotZGRtYXgwMzYgbWF4ICAtMCAgICAtMC4wIC0+IC0wLjANCi1kZG1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMA0KLWRkbWF4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMA0KLWRkbWF4MDM5IG1heCAgIDAuMCAgLTAgICAtPiAgMC4wDQotZGRtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjANCi1kZG1heDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMA0KLWRkbWF4MDQyIG1heCAgLTAuMCAgIDAgICAtPiAgMA0KLWRkbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wDQotZGRtYXgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjANCi1kZG1heDA0NSBtYXggIC0wLjAgICAwLjAgLT4gIDAuMA0KLQ0KLWRkbWF4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRkbWF4MDUxIG1heCAgLTBFMiAgIDBFMiAtPiAgMEUrMg0KLWRkbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRkbWF4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KLWRkbWF4MDU0IG1heCAgIDBFMSAgLTBFMSAtPiAgMEUrMQ0KLWRkbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMg0KLWRkbWF4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KLWRkbWF4MDU3IG1heCAgIDBFMSAgLTBFMiAtPiAgMEUrMQ0KLQ0KLWRkbWF4MDU4IG1heCAgIDBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRkbWF4MDU5IG1heCAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KLWRkbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMg0KLWRkbWF4MDYxIG1heCAgIDBFMSAgIDBFMiAtPiAgMEUrMg0KLWRkbWF4MDYyIG1heCAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRkbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMg0KLWRkbWF4MDY0IG1heCAgLTBFMiAgLTBFMSAtPiAtMEUrMQ0KLWRkbWF4MDY1IG1heCAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRtYXgwOTAgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZGRtYXgwOTMgbWF4ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kZG1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZGRtYXgwOTYgbWF4ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kZG1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgwOTkgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgxMDIgbWF4ICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgxMDUgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZG1heDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWF4MTIxIG1heCAtSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kZG1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xDQotZGRtYXgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMA0KLWRkbWF4MTI0IG1heCAtSW5mICAgMCAgICAgLT4gIDANCi1kZG1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxDQotZGRtYXgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMA0KLWRkbWF4MTI3IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZGRtYXgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDANCi1kZG1heDEzMCBtYXggLTEgICAgLUluZiAgIC0+ICAtMQ0KLWRkbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wDQotZGRtYXgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMA0KLWRkbWF4MTMzIG1heCAgMSAgICAtSW5mICAgLT4gIDENCi1kZG1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZGRtYXgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kZG1heDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRkbWF4MTQyIG1heCAgTmFOIC0xMDAwICAgLT4gLTEwMDANCi1kZG1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xDQotZGRtYXgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMA0KLWRkbWF4MTQ1IG1heCAgTmFOICAwICAgICAgLT4gIDANCi1kZG1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxDQotZGRtYXgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRkbWF4MTQ4IG1heCAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZGRtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRtYXgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kZG1heDE1MSBtYXggLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZGRtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQ0KLWRkbWF4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTANCi1kZG1heDE1NCBtYXggIDAgICAgTmFOICAgIC0+ICAwDQotZGRtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQ0KLWRkbWF4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kZG1heDE1NyBtYXggIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWF4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2MiBtYXggIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2NSBtYXggIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE2OCBtYXggIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3MSBtYXggLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3NCBtYXggLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE3NyBtYXggIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRtYXgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtYXgxODIgbWF4ICBOYU44ICAgICA5ICAgLT4gIDkNCi1kZG1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kZG1heDE4NCBtYXggLU5hTjEgICBOYU4xMSAtPiAtTmFOMQ0KLWRkbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yDQotZGRtYXgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQotZGRtYXgxODcgbWF4ICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0DQotDQotZGRtYXgxODggbWF4IC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5DQotZGRtYXgxODkgbWF4IC05ICAgICAtTmFOMyAgLT4gLTkNCi1kZG1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kZG1heDE5MSBtYXggIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE5NCBtYXggIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1heDE5NyBtYXggIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRtYXgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZGRtYXgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwDQotZGRtYXgyMjIgbWF4IDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQotZGRtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCi1kZG1heDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRkbWF4MjI1IG1heCAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwDQotZGRtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1kZG1heDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQ0KLWRkbWF4MjI4IG1heCAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQotZGRtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQotZGRtYXgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotZGRtYXgyMzEgbWF4IDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYNCi1kZG1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLWRkbWF4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxDQotZGRtYXgyMzQgbWF4IDEgLTEyMzQ1Njc4OTEgIC0+IDENCi1kZG1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQ0KLWRkbWF4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxDQotZGRtYXgyMzcgbWF4IC0xMjM0NTY3ODk2ICAxIC0+IDENCi1kZG1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kZG1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnDQotZGRtYXgyODEgbWF4ICctMTAnICczJyAgLT4gICczJw0KLWRkbWF4MjgyIG1heCAnMS4wJyAnMScgIC0+ICAnMScNCi1kZG1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnDQotZGRtYXgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kZG1heDQwMSBtYXggIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQ0KLWRkbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KLWRkbWF4NDAzIG1heCAgMSAgICAgIDEuMCAgICAgLT4gIDENCi1kZG1heDQwNCBtYXggIDEuMCAgICAwLjEgICAgIC0+ICAxLjANCi1kZG1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCi1kZG1heDQwNiBtYXggIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQotZGRtYXg0MDcgbWF4ICAwLjEwICAgMCAgICAgICAtPiAgMC4xMA0KLWRkbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDANCi1kZG1heDQwOSBtYXggIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCi1kZG1heDQxMCBtYXggIDAuMCAgIC0wLjAgICAgIC0+ICAwLjANCi1kZG1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQotZGRtYXg0MTIgbWF4ICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQotZGRtYXg0MTMgbWF4ICAwICAgICAtMC4wICAgICAtPiAgMA0KLWRkbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDANCi1kZG1heDQxNSBtYXggLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCi1kZG1heDQxNiBtYXggLTAgICAgIC0wLjEwMCAgIC0+IC0wDQotZGRtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDANCi1kZG1heDQxOCBtYXggLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwDQotZGRtYXg0MTkgbWF4IC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQotZGRtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wDQotZGRtYXg0MjEgbWF4IC0xICAgICAtMS4xICAgICAtPiAtMQ0KLWRkbWF4NDIzIG1heCAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRkbWF4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5DQotZGRtYXg0MzIgbWF4ICAxICAgICAgMS4xICAgICAtPiAgMS4xDQotZGRtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQ0KLWRkbWF4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMA0KLWRkbWF4NDM1IG1heCAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQ0KLWRkbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCi1kZG1heDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwDQotZGRtYXg0MzggbWF4ICAwLjAgICAgMCAgICAgICAtPiAgMA0KLWRkbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbWF4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbWF4NDQxIG1heCAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDANCi1kZG1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCi1kZG1heDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwDQotZGRtYXg0NDQgbWF4IC0wICAgICAgMCAgICAgICAtPiAgMA0KLWRkbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRkbWF4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTANCi1kZG1heDQ0NyBtYXggLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRkbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTANCi1kZG1heDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjENCi1kZG1heDQ1MCBtYXggLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCi1kZG1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xDQotZGRtYXg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xDQotLS0gbGFyZ2llcw0KLWRkbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kZG1heDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszDQotZGRtYXg0NjIgbWF4ICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMA0KLWRkbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMNCi1kZG1heDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszDQotZGRtYXg0NjUgbWF4IC0xRSszICAgMTAwMCAgICAtPiAgMTAwMA0KLWRkbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDANCi1kZG1heDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwDQotDQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQotZGRtYXg0NzEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wDQotZGRtYXg0NzIgbWF4ICAgICAgMC4xICAgICAgIDEuMCAgLT4gMS4wDQotZGRtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMA0KLWRkbWF4NDc0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjANCi1kZG1heDQ3NSBtYXggICAgICAxMDAgICAgICAgMS4wICAtPiAxMDANCi1kZG1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDANCi1kZG1heDQ3NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwDQotZGRtYXg0NzggbWF4ICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAwMA0KLWRkbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwDQotZGRtYXg0ODAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDANCi1kZG1heDQ4MSBtYXggICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwMDANCi1kZG1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDANCi1kZG1heDQ4MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwDQotZGRtYXg0ODQgbWF4ICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAwMA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kZG1heDUxMCBtYXggIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDEuMDBFLTM4Mw0KLWRkbWF4NTExIG1heCAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbA0KLWRkbWF4NTEyIG1heCAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wRS0zODQgIFN1Ym5vcm1hbA0KLWRkbWF4NTEzIG1heCAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMS4wMEUtMzg0IFN1Ym5vcm1hbA0KLWRkbWF4NTE0IG1heCAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbA0KLWRkbWF4NTE1IG1heCAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgOS45OUUtMzg0IFN1Ym5vcm1hbA0KLWRkbWF4NTE2IG1heCAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgOS45RS0zODUgIFN1Ym5vcm1hbA0KLWRkbWF4NTE3IG1heCAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbWF4NTE4IG1heCAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbWF4NTE5IG1heCAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgOUUtMzg3ICAgIFN1Ym5vcm1hbA0KLWRkbWF4NTIwIG1heCAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbA0KLQ0KLWRkbWF4NTMwIG1heCAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTMxIG1heCAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTMyIG1heCAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTMzIG1heCAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM0IG1heCAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM1IG1heCAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM2IG1heCAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM3IG1heCAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM4IG1heCAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTM5IG1heCAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMA0KLWRkbWF4NTQwIG1heCAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWF4OTAxIG1heCAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE1heC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtYXhudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRtYXgwMDEgbWF4ICAtMiAgLTIgIC0+IC0yCitkZG1heDAwMiBtYXggIC0yICAtMSAgLT4gLTEKK2RkbWF4MDAzIG1heCAgLTIgICAwICAtPiAgMAorZGRtYXgwMDQgbWF4ICAtMiAgIDEgIC0+ICAxCitkZG1heDAwNSBtYXggIC0yICAgMiAgLT4gIDIKK2RkbWF4MDA2IG1heCAgLTEgIC0yICAtPiAtMQorZGRtYXgwMDcgbWF4ICAtMSAgLTEgIC0+IC0xCitkZG1heDAwOCBtYXggIC0xICAgMCAgLT4gIDAKK2RkbWF4MDA5IG1heCAgLTEgICAxICAtPiAgMQorZGRtYXgwMTAgbWF4ICAtMSAgIDIgIC0+ICAyCitkZG1heDAxMSBtYXggICAwICAtMiAgLT4gIDAKK2RkbWF4MDEyIG1heCAgIDAgIC0xICAtPiAgMAorZGRtYXgwMTMgbWF4ICAgMCAgIDAgIC0+ICAwCitkZG1heDAxNCBtYXggICAwICAgMSAgLT4gIDEKK2RkbWF4MDE1IG1heCAgIDAgICAyICAtPiAgMgorZGRtYXgwMTYgbWF4ICAgMSAgLTIgIC0+ICAxCitkZG1heDAxNyBtYXggICAxICAtMSAgLT4gIDEKK2RkbWF4MDE4IG1heCAgIDEgICAwICAtPiAgMQorZGRtYXgwMTkgbWF4ICAgMSAgIDEgIC0+ICAxCitkZG1heDAyMCBtYXggICAxICAgMiAgLT4gIDIKK2RkbWF4MDIxIG1heCAgIDIgIC0yICAtPiAgMgorZGRtYXgwMjIgbWF4ICAgMiAgLTEgIC0+ICAyCitkZG1heDAyMyBtYXggICAyICAgMCAgLT4gIDIKK2RkbWF4MDI1IG1heCAgIDIgICAxICAtPiAgMgorZGRtYXgwMjYgbWF4ICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZG1heDAzMCBtYXggICAwICAgICAwICAgLT4gIDAKK2RkbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMAorZGRtYXgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwCitkZG1heDAzMyBtYXggICAwICAgICAwLjAgLT4gIDAKK2RkbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorZGRtYXgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wCitkZG1heDAzNiBtYXggIC0wICAgIC0wLjAgLT4gLTAuMAorZGRtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjAKK2RkbWF4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMAorZGRtYXgwMzkgbWF4ICAgMC4wICAtMCAgIC0+ICAwLjAKK2RkbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wCitkZG1heDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMAorZGRtYXgwNDIgbWF4ICAtMC4wICAgMCAgIC0+ICAwCitkZG1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMAorZGRtYXgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjAKK2RkbWF4MDQ1IG1heCAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK2RkbWF4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQorZGRtYXgwNTEgbWF4ICAtMEUyICAgMEUyIC0+ICAwRSsyCitkZG1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzEKK2RkbWF4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMgorZGRtYXgwNTQgbWF4ICAgMEUxICAtMEUxIC0+ICAwRSsxCitkZG1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzIKK2RkbWF4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMgorZGRtYXgwNTcgbWF4ICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK2RkbWF4MDU4IG1heCAgIDBFMSAgIDBFMSAtPiAgMEUrMQorZGRtYXgwNTkgbWF4ICAgMEUyICAgMEUyIC0+ICAwRSsyCitkZG1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzIKK2RkbWF4MDYxIG1heCAgIDBFMSAgIDBFMiAtPiAgMEUrMgorZGRtYXgwNjIgbWF4ICAtMEUxICAtMEUxIC0+IC0wRSsxCitkZG1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzIKK2RkbWF4MDY0IG1heCAgLTBFMiAgLTBFMSAtPiAtMEUrMQorZGRtYXgwNjUgbWF4ICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitkZG1heDA5MCBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkbWF4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZG1heDA5MyBtYXggIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZG1heDA5NiBtYXggIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDA5OSBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMiBtYXggIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwNSBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1heDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtYXgxMjEgbWF4IC1JbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQorZGRtYXgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMAorZGRtYXgxMjQgbWF4IC1JbmYgICAwICAgICAtPiAgMAorZGRtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQorZGRtYXgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMAorZGRtYXgxMjcgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorZGRtYXgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDAKK2RkbWF4MTMwIG1heCAtMSAgICAtSW5mICAgLT4gIC0xCitkZG1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMAorZGRtYXgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMAorZGRtYXgxMzMgbWF4ICAxICAgIC1JbmYgICAtPiAgMQorZGRtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZGRtYXgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkZG1heDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorZGRtYXgxNDIgbWF4ICBOYU4gLTEwMDAgICAtPiAtMTAwMAorZGRtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQorZGRtYXgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMAorZGRtYXgxNDUgbWF4ICBOYU4gIDAgICAgICAtPiAgMAorZGRtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQorZGRtYXgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRtYXgxNDggbWF4ICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtYXgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbWF4MTUxIG1heCAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTEKK2RkbWF4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTAKK2RkbWF4MTU0IG1heCAgMCAgICBOYU4gICAgLT4gIDAKK2RkbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDEKK2RkbWF4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbWF4MTU3IG1heCAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbWF4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTYyIG1heCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY1IG1heCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY4IG1heCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTcxIG1heCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc0IG1heCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc3IG1heCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtYXgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1heDE4MiBtYXggIE5hTjggICAgIDkgICAtPiAgOQorZGRtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWF4MTg0IG1heCAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitkZG1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorZGRtYXgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCitkZG1heDE4NyBtYXggIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworZGRtYXgxODggbWF4IC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitkZG1heDE4OSBtYXggLTkgICAgIC1OYU4zICAtPiAtOQorZGRtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RkbWF4MTkxIG1heCAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk0IG1heCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk3IG1heCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZGRtYXgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCitkZG1heDIyMiBtYXggMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RkbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitkZG1heDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZGRtYXgyMjUgbWF4IDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK2RkbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkZG1heDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorZGRtYXgyMjggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RkbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorZGRtYXgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkZG1heDIzMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorZGRtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK2RkbWF4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxCitkZG1heDIzNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQorZGRtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDEKK2RkbWF4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxCitkZG1heDIzNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQorZGRtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZGRtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJworZGRtYXgyODEgbWF4ICctMTAnICczJyAgLT4gICczJworZGRtYXgyODIgbWF4ICcxLjAnICcxJyAgLT4gICcxJworZGRtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJworZGRtYXgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RkbWF4NDAxIG1heCAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CitkZG1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjEKK2RkbWF4NDAzIG1heCAgMSAgICAgIDEuMCAgICAgLT4gIDEKK2RkbWF4NDA0IG1heCAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorZGRtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCitkZG1heDQwNiBtYXggIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCitkZG1heDQwNyBtYXggIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCitkZG1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwCitkZG1heDQwOSBtYXggIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKK2RkbWF4NDEwIG1heCAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorZGRtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAorZGRtYXg0MTIgbWF4ICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCitkZG1heDQxMyBtYXggIDAgICAgIC0wLjAgICAgIC0+ICAwCitkZG1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwCitkZG1heDQxNSBtYXggLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKK2RkbWF4NDE2IG1heCAtMCAgICAgLTAuMTAwICAgLT4gLTAKK2RkbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkZG1heDQxOCBtYXggLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkZG1heDQxOSBtYXggLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK2RkbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZGRtYXg0MjEgbWF4IC0xICAgICAtMS4xICAgICAtPiAtMQorZGRtYXg0MjMgbWF4IC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RkbWF4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitkZG1heDQzMiBtYXggIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK2RkbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDEKK2RkbWF4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorZGRtYXg0MzUgbWF4ICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitkZG1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCitkZG1heDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitkZG1heDQzOCBtYXggIDAuMCAgICAwICAgICAgIC0+ICAwCitkZG1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RkbWF4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorZGRtYXg0NDEgbWF4IC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorZGRtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wCitkZG1heDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwCitkZG1heDQ0NCBtYXggLTAgICAgICAwICAgICAgIC0+ICAwCitkZG1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbWF4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTAKK2RkbWF4NDQ3IG1heCAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCitkZG1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCitkZG1heDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK2RkbWF4NDUwIG1heCAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAorZGRtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQorZGRtYXg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCitkZG1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG1heDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkZG1heDQ2MiBtYXggIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkZG1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkZG1heDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG1heDQ2NSBtYXggLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkZG1heDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZGRtYXg0NzEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wCitkZG1heDQ3MiBtYXggICAgICAwLjEgICAgICAgMS4wICAtPiAxLjAKK2RkbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjAKK2RkbWF4NDc0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjAKK2RkbWF4NDc1IG1heCAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEwMAorZGRtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwCitkZG1heDQ3NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwCitkZG1heDQ3OCBtYXggICAgIDEwLjAgICAgICAxMDAwICAtPiAxMDAwCitkZG1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMAorZGRtYXg0ODAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDAKK2RkbWF4NDgxIG1heCAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAwMAorZGRtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwCitkZG1heDQ4MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwCitkZG1heDQ4NCBtYXggIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RkbWF4NTEwIG1heCAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wMEUtMzgzCitkZG1heDUxMSBtYXggIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDFFLTM4NCAgICBTdWJub3JtYWwKK2RkbWF4NTEyIG1heCAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRtYXg1MTMgbWF4ICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAxLjAwRS0zODQgU3Vibm9ybWFsCitkZG1heDUxNCBtYXggIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDFFLTM4NSAgICBTdWJub3JtYWwKK2RkbWF4NTE1IG1heCAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgOS45OUUtMzg0IFN1Ym5vcm1hbAorZGRtYXg1MTYgbWF4ICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICA5LjlFLTM4NSAgU3Vibm9ybWFsCitkZG1heDUxNyBtYXggIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDlFLTM4NiAgICBTdWJub3JtYWwKK2RkbWF4NTE4IG1heCAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTkgbWF4ICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICA5RS0zODcgICAgU3Vibm9ybWFsCitkZG1heDUyMCBtYXggIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDFFLTM4NyAgICBTdWJub3JtYWwKKworZGRtYXg1MzAgbWF4IC0xLjAwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1heDUzMSBtYXggLTAuMUUtMzgzICAgICAgICAwICAtPiAgIDAKK2RkbWF4NTMyIG1heCAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzMgbWF4IC0wLjEwMEUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzNCBtYXggLTAuMDFFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWF4NTM1IG1heCAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzYgbWF4IC0wLjA5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzNyBtYXggLTAuMDA5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM4IG1heCAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzkgbWF4IC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwCitkZG1heDU0MCBtYXggLTAuMDAwMUUtMzgzICAgICAwICAtPiAgIDAKKworLS0gTnVsbCB0ZXN0cworZGRtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4OTAxIG1heCAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXhNYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0CmluZGV4IGVjMmI4MzAuLjE5YzNlOTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0CkBAIC0xLDMwNCArMSwzMDQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTWF4TWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kZG14ZzAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTINCi1kZG14ZzAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTINCi1kZG14ZzAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTINCi1kZG14ZzAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTINCi1kZG14ZzAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDINCi1kZG14ZzAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTINCi1kZG14ZzAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTENCi1kZG14ZzAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTENCi1kZG14ZzAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDENCi1kZG14ZzAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDINCi1kZG14ZzAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTINCi1kZG14ZzAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTENCi1kZG14ZzAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDANCi1kZG14ZzAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDENCi1kZG14ZzAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDINCi1kZG14ZzAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTINCi1kZG14ZzAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDENCi1kZG14ZzAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDENCi1kZG14ZzAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDENCi1kZG14ZzAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDINCi1kZG14ZzAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDINCi1kZG14ZzAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDINCi1kZG14ZzAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDINCi1kZG14ZzAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDINCi1kZG14ZzAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRkbXhnMDMwIG1heG1hZyAgIDAgICAgIDAgICAtPiAgMA0KLWRkbXhnMDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMA0KLWRkbXhnMDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMA0KLWRkbXhnMDMzIG1heG1hZyAgIDAgICAgIDAuMCAtPiAgMA0KLWRkbXhnMDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3Nlbg0KLWRkbXhnMDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMA0KLWRkbXhnMDM2IG1heG1hZyAgLTAgICAgLTAuMCAtPiAtMC4wDQotZGRteGcwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjANCi1kZG14ZzAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDANCi1kZG14ZzAzOSBtYXhtYWcgICAwLjAgIC0wICAgLT4gIDAuMA0KLWRkbXhnMDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wDQotZGRteGcwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjANCi1kZG14ZzA0MiBtYXhtYWcgIC0wLjAgICAwICAgLT4gIDANCi1kZG14ZzA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMA0KLWRkbXhnMDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQotZGRteGcwNDUgbWF4bWFnICAtMC4wICAgMC4wIC0+ICAwLjANCi0NCi1kZG14ZzA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzENCi1kZG14ZzA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzINCi1kZG14ZzA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzENCi1kZG14ZzA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzINCi1kZG14ZzA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzENCi1kZG14ZzA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzINCi1kZG14ZzA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzINCi1kZG14ZzA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzENCi0NCi1kZG14ZzA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzENCi1kZG14ZzA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzINCi1kZG14ZzA2MCBtYXhtYWcgICAwRTIgICAwRTEgLT4gIDBFKzINCi1kZG14ZzA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzINCi1kZG14ZzA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzENCi1kZG14ZzA2MyBtYXhtYWcgIC0wRTIgIC0wRTIgLT4gLTBFKzINCi1kZG14ZzA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzENCi1kZG14ZzA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzENCi0NCi0tLSBTcGVjaWFscw0KLWRkbXhnMDkwIG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDkzIG1heG1hZyAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZGRteGcwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDk2IG1heG1hZyAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRteGcwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMDk5IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTAyIG1heG1hZyAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRteGcxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG14ZzEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTA1IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRteGcxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRteGcxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRteGcxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kZG14ZzEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRkbXhnMTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRteGcxMzAgbWF4bWFnIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRteGcxMzMgbWF4bWFnICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG14ZzEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotZGRteGcxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkNCi1kZG14ZzE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQotZGRteGcxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQ0KLWRkbXhnMTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTANCi1kZG14ZzE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwDQotZGRteGcxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLWRkbXhnMTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1kZG14ZzE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnMTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkbXhnMTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotZGRteGcxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLWRkbXhnMTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTENCi1kZG14ZzE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wDQotZGRteGcxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMA0KLWRkbXhnMTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDENCi1kZG14ZzE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotZGRteGcxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1kZG14ZzE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjIgbWF4bWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjUgbWF4bWFnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNjggbWF4bWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzEgbWF4bWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzQgbWF4bWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxNzcgbWF4bWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkbXhnMTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5DQotZGRteGcxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZGRteGcxODQgbWF4bWFnIC1OYU4xICAgTmFOMTEgLT4gLU5hTjENCi1kZG14ZzE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KLWRkbXhnMTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMw0KLWRkbXhnMTg3IG1heG1hZyAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNA0KLQ0KLWRkbXhnMTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KLWRkbXhnMTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05DQotZGRteGcxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5DQotDQotZGRteGcxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZGRteGcxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXhnMTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KLWRkbXhnMjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMA0KLWRkbXhnMjIyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KLWRkbXhnMjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwDQotZGRteGcyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDANCi1kZG14ZzIyNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KLWRkbXhnMjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQotZGRteGcyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTENCi1kZG14ZzIyOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KLWRkbXhnMjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQ0KLWRkbXhnMjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KLWRkbXhnMjMxIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQotZGRteGcyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCi1kZG14ZzIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTENCi1kZG14ZzIzNCBtYXhtYWcgMSAtMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTENCi1kZG14ZzIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxDQotZGRteGcyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQ0KLWRkbXhnMjM3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMTIzNDU2Nzg5Ng0KLWRkbXhnMjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5Ng0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kZG14ZzI4MCBtYXhtYWcgJzMnICAgJzInICAtPiAgJzMnDQotZGRteGcyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnDQotZGRteGcyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJw0KLWRkbXhnMjgzIG1heG1hZyAnMScgJzEuMCcgIC0+ICAnMScNCi1kZG14ZzI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLWRkbXhnNDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5DQotZGRteGc0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xDQotZGRteGc0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQ0KLWRkbXhnNDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMA0KLWRkbXhnNDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQ0KLWRkbXhnNDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTANCi1kZG14ZzQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwDQotZGRteGc0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMA0KLWRkbXhnNDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMA0KLWRkbXhnNDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMA0KLWRkbXhnNDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDANCi1kZG14ZzQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjANCi1kZG14ZzQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwDQotZGRteGc0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMA0KLWRkbXhnNDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMA0KLWRkbXhnNDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwDQotZGRteGc0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDANCi1kZG14ZzQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwDQotZGRteGc0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wDQotZGRteGc0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wDQotZGRteGc0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xDQotZGRteGc0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kZG14ZzQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXhnNDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KLWRkbXhnNDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDENCi1kZG14ZzQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjANCi1kZG14ZzQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCi1kZG14ZzQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwDQotZGRteGc0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMA0KLWRkbXhnNDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDANCi1kZG14ZzQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjANCi1kZG14ZzQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjANCi1kZG14ZzQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQotZGRteGc0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wDQotZGRteGc0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMA0KLWRkbXhnNDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDANCi1kZG14ZzQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG14ZzQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMA0KLWRkbXhnNDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwDQotZGRteGc0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMA0KLWRkbXhnNDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMA0KLWRkbXhnNDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMA0KLWRkbXhnNDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQ0KLWRkbXhnNDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5DQotLS0gbGFyZ2llcw0KLWRkbXhnNDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kZG14ZzQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszDQotZGRteGc0NjIgbWF4bWFnICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMA0KLWRkbXhnNDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMNCi1kZG14ZzQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszDQotZGRteGc0NjUgbWF4bWFnIC0xRSszICAgMTAwMCAgICAtPiAgMTAwMA0KLWRkbXhnNDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDANCi1kZG14ZzQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwDQotDQotLS0gc3Vibm9ybWFscw0KLWRkbXhnNTEwIG1heG1hZyAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wMEUtMzgzDQotZGRteGc1MTEgbWF4bWFnICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAxRS0zODQgICAgU3Vibm9ybWFsDQotZGRteGc1MTIgbWF4bWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsDQotZGRteGc1MTMgbWF4bWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAxLjAwRS0zODQgU3Vibm9ybWFsDQotZGRteGc1MTQgbWF4bWFnICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAxRS0zODUgICAgU3Vibm9ybWFsDQotZGRteGc1MTUgbWF4bWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsDQotZGRteGc1MTYgbWF4bWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICA5LjlFLTM4NSAgU3Vibm9ybWFsDQotZGRteGc1MTcgbWF4bWFnICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICA5RS0zODYgICAgU3Vibm9ybWFsDQotZGRteGc1MTggbWF4bWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsDQotZGRteGc1MTkgbWF4bWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICA5RS0zODcgICAgU3Vibm9ybWFsDQotZGRteGc1MjAgbWF4bWFnICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAxRS0zODcgICAgU3Vibm9ybWFsDQotDQotZGRteGc1MzAgbWF4bWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gIC0xLjAwRS0zODMNCi1kZG14ZzUzMSBtYXhtYWcgLTAuMUUtMzgzICAgICAgICAwICAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwNCi1kZG14ZzUzMiBtYXhtYWcgLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwNCi1kZG14ZzUzMyBtYXhtYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgLTEuMDBFLTM4NCBTdWJub3JtYWwNCi1kZG14ZzUzNCBtYXhtYWcgLTAuMDFFLTM4MyAgICAgICAwICAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwNCi1kZG14ZzUzNSBtYXhtYWcgLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwNCi1kZG14ZzUzNiBtYXhtYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgLTkuOUUtMzg1ICBTdWJub3JtYWwNCi1kZG14ZzUzNyBtYXhtYWcgLTAuMDA5RS0zODMgICAgICAwICAtPiAgLTlFLTM4NiAgICBTdWJub3JtYWwNCi1kZG14ZzUzOCBtYXhtYWcgLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwNCi1kZG14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgLTlFLTM4NyAgICBTdWJub3JtYWwNCi1kZG14ZzU0MCBtYXhtYWcgLTAuMDAwMUUtMzgzICAgICAwICAtPiAgLTFFLTM4NyAgICBTdWJub3JtYWwNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNYXhNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWF4bnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorZGRteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitkZG14ZzAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTIKK2RkbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorZGRteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitkZG14ZzAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTIKK2RkbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorZGRteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitkZG14ZzAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDEKK2RkbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorZGRteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitkZG14ZzAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTEKK2RkbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorZGRteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitkZG14ZzAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDIKK2RkbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorZGRteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitkZG14ZzAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDEKK2RkbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorZGRteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitkZG14ZzAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDIKK2RkbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorZGRteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitkZG14ZzAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDIKK2RkbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitkZG14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDAKK2RkbXhnMDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorZGRteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitkZG14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RkbXhnMDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorZGRteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK2RkbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wCitkZG14ZzAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK2RkbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitkZG14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMAorZGRteGcwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorZGRteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjAKK2RkbXhnMDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitkZG14ZzA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RkbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZGRteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitkZG14ZzA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZGRteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitkZG14ZzA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RkbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkZG14ZzA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK2RkbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZGRteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitkZG14ZzA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZGRteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitkZG14ZzA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RkbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZGRteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZG14ZzA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZG14ZzA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRteGcxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZG14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZG14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RkbXhnMTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZGRteGcxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RkbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK2RkbXhnMTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK2RkbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RkbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RkbXhnMTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RkbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkZG14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbXhnMTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkZG14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkZG14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitkZG14ZzE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitkZG14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwCitkZG14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitkZG14ZzE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkZG14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkZG14ZzE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbXhnMTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkKK2RkbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZGRteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RkbXhnMTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZGRteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RkbXhnMTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZGRteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK2RkbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbXhnMjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZGRteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkZG14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZGRteGcyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RkbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkZG14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZGRteGcyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RkbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkZG14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbXhnMjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZGRteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RkbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkZG14ZzIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK2RkbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorZGRteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQorZGRteGcyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorZGRteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitkZG14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYKKworLS0gZnJvbSBleGFtcGxlcworZGRteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworZGRteGcyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitkZG14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnCitkZG14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitkZG14ZzI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RkbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZGRteGc0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQorZGRteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkZG14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RkbXhnNDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RkbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RkbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RkbXhnNDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZGRteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkZG14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkZG14ZzQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RkbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RkbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RkbXhnNDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZGRteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkZG14ZzQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkZG14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZGRteGc0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkZG14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkZG14ZzQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZGRteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkZG14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitkZG14ZzQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RkbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZGRteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZGRteGc0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZGRteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMAorZGRteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkZG14ZzQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RkbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RkbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZGRteGc0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorZGRteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMAorZGRteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkZG14ZzQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZGRteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbXhnNDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZGRteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkZG14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RkbXhnNDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkZG14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG14ZzQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkZG14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkZG14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkZG14ZzQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkZG14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkZG14ZzQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RkbXhnNTEwIG1heG1hZyAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wMEUtMzgzCitkZG14ZzUxMSBtYXhtYWcgIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDFFLTM4NCAgICBTdWJub3JtYWwKK2RkbXhnNTEyIG1heG1hZyAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRteGc1MTMgbWF4bWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAxLjAwRS0zODQgU3Vibm9ybWFsCitkZG14ZzUxNCBtYXhtYWcgIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDFFLTM4NSAgICBTdWJub3JtYWwKK2RkbXhnNTE1IG1heG1hZyAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgOS45OUUtMzg0IFN1Ym5vcm1hbAorZGRteGc1MTYgbWF4bWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICA5LjlFLTM4NSAgU3Vibm9ybWFsCitkZG14ZzUxNyBtYXhtYWcgIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDlFLTM4NiAgICBTdWJub3JtYWwKK2RkbXhnNTE4IG1heG1hZyAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MTkgbWF4bWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICA5RS0zODcgICAgU3Vibm9ybWFsCitkZG14ZzUyMCBtYXhtYWcgIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDFFLTM4NyAgICBTdWJub3JtYWwKKworZGRteGc1MzAgbWF4bWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gIC0xLjAwRS0zODMKK2RkbXhnNTMxIG1heG1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRteGc1MzIgbWF4bWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZG14ZzUzMyBtYXhtYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgLTEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbXhnNTM0IG1heG1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRteGc1MzUgbWF4bWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gIC05Ljk5RS0zODQgU3Vibm9ybWFsCitkZG14ZzUzNiBtYXhtYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgLTkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbXhnNTM3IG1heG1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAtOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MzggbWF4bWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gIC0xRS0zODYgICAgU3Vibm9ybWFsCitkZG14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgLTlFLTM4NyAgICBTdWJub3JtYWwKK2RkbXhnNTQwIG1heG1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAtMUUtMzg3ICAgIFN1Ym5vcm1hbAorCistLSBOdWxsIHRlc3RzCitkZG14ZzkwMCBtYXhtYWcgMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRteGc5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWluLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdAppbmRleCA5Y2U0MjgyLi5lYjk0MmZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdApAQCAtMSwzMDkgKzEsMzA5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZE1pbi5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRtaW4wMDEgbWluICAtMiAgLTIgIC0+IC0yDQotZGRtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yDQotZGRtaW4wMDMgbWluICAtMiAgIDAgIC0+IC0yDQotZGRtaW4wMDQgbWluICAtMiAgIDEgIC0+IC0yDQotZGRtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yDQotZGRtaW4wMDYgbWluICAtMSAgLTIgIC0+IC0yDQotZGRtaW4wMDcgbWluICAtMSAgLTEgIC0+IC0xDQotZGRtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xDQotZGRtaW4wMDkgbWluICAtMSAgIDEgIC0+IC0xDQotZGRtaW4wMTAgbWluICAtMSAgIDIgIC0+IC0xDQotZGRtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yDQotZGRtaW4wMTIgbWluICAgMCAgLTEgIC0+IC0xDQotZGRtaW4wMTMgbWluICAgMCAgIDAgIC0+ICAwDQotZGRtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwDQotZGRtaW4wMTUgbWluICAgMCAgIDIgIC0+ICAwDQotZGRtaW4wMTYgbWluICAgMSAgLTIgIC0+IC0yDQotZGRtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xDQotZGRtaW4wMTggbWluICAgMSAgIDAgIC0+ICAwDQotZGRtaW4wMTkgbWluICAgMSAgIDEgIC0+ICAxDQotZGRtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxDQotZGRtaW4wMjEgbWluICAgMiAgLTIgIC0+IC0yDQotZGRtaW4wMjIgbWluICAgMiAgLTEgIC0+IC0xDQotZGRtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwDQotZGRtaW4wMjUgbWluICAgMiAgIDEgIC0+ICAxDQotZGRtaW4wMjYgbWluICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZG1pbjAzMCBtaW4gICAwICAgICAwICAgLT4gIDANCi1kZG1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTANCi1kZG1pbjAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMA0KLWRkbWluMDMzIG1pbiAgIDAgICAgIDAuMCAtPiAgMC4wDQotZGRtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wDQotZGRtaW4wMzUgbWluICAtMCAgICAtMCAgIC0+IC0wDQotZGRtaW4wMzYgbWluICAtMCAgICAtMC4wIC0+IC0wDQotZGRtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wDQotZGRtaW4wMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjANCi1kZG1pbjAzOSBtaW4gICAwLjAgIC0wICAgLT4gLTANCi1kZG1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMA0KLWRkbWluMDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wDQotZGRtaW4wNDIgbWluICAtMC4wICAgMCAgIC0+IC0wLjANCi1kZG1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTANCi1kZG1pbjA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMA0KLWRkbWluMDQ1IG1pbiAgLTAuMCAgIDAuMCAtPiAtMC4wDQotDQotZGRtaW4wNDYgbWluICAgMEUxICAtMEUxIC0+IC0wRSsxDQotZGRtaW4wNDcgbWluICAtMEUxICAgMEUyIC0+IC0wRSsxDQotZGRtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxDQotZGRtaW4wNDkgbWluICAgMEUxICAgMEUyIC0+ICAwRSsxDQotZGRtaW4wNTAgbWluICAtMEUzICAtMEUyIC0+IC0wRSszDQotZGRtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszDQotDQotLS0gU3BlY2lhbHMNCi1kZG1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kZG1pbjA5MiBtaW4gIEluZiAgLTEgICAgIC0+IC0xDQotZGRtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMA0KLWRkbWluMDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDANCi1kZG1pbjA5NSBtaW4gIEluZiAgIDEgICAgIC0+ICAxDQotZGRtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMA0KLWRkbWluMDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtaW4wOTggbWluIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRkbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQ0KLWRkbWluMTAxIG1pbiAtMCAgICAgSW5mICAgLT4gLTANCi1kZG1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwDQotZGRtaW4xMDMgbWluICAxICAgICBJbmYgICAtPiAgMQ0KLWRkbWluMTA0IG1pbiAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kZG1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWluMTIwIG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTIzIG1pbiAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTI2IG1pbiAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTI5IG1pbiAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTMyIG1pbiAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG1pbjEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTM1IG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotZGRtaW4xNDEgbWluICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5DQotZGRtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDANCi1kZG1pbjE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQ0KLWRkbWluMTQ0IG1pbiAgTmFOIC0wICAgICAgLT4gIC0wDQotZGRtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMA0KLWRkbWluMTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDENCi1kZG1pbjE0NyBtaW4gIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotZGRtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1kZG1pbjE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZG1pbjE1MCBtaW4gLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLWRkbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1kZG1pbjE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xDQotZGRtaW4xNTMgbWluIC0wICAgIE5hTiAgICAtPiAtMA0KLWRkbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDANCi1kZG1pbjE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxDQotZGRtaW4xNTYgbWluICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLWRkbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotZGRtaW4xNjEgbWluICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNjQgbWluICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNjcgbWluICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzAgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzMgbWluIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzYgbWluICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xNzkgbWluICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG1pbjE4MSBtaW4gIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwDQotZGRtaW4xODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQ0KLWRkbWluMTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjINCi1kZG1pbjE4NiBtaW4gLU5hTjMgICAgTmFONiAgLT4gLU5hTjMNCi1kZG1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0DQotDQotZGRtaW4xODggbWluIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQ0KLWRkbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQ0KLWRkbWluMTkwIG1pbiAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kZG1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTMgbWluIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTYgbWluIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbWluMTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW4xOTkgbWluICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZGRtaW4yMjEgbWluIC0xMjM0NTY3ODAwMCAxICAtPiAtMTIzNDU2NzgwMDANCi1kZG1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMA0KLWRkbWluMjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDANCi1kZG1pbjIyNCBtaW4gMSAtMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwDQotZGRtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MA0KLWRkbWluMjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTANCi1kZG1pbjIyNyBtaW4gLTEyMzQ1Njc4OTEgIDEgIC0+IC0xMjM0NTY3ODkxDQotZGRtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQ0KLWRkbWluMjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxDQotZGRtaW4yMzAgbWluIDEgLTEyMzQ1Njc4OTAxICAtPiAtMTIzNDU2Nzg5MDENCi1kZG1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2DQotZGRtaW4yMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5Ng0KLWRkbWluMjMzIG1pbiAxMjM0NTY3ODkxICAxICAgLT4gMQ0KLWRkbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRkbWluMjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQ0KLWRkbWluMjM2IG1pbiAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRkbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KLWRkbWluMjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1kZG1pbjI4MCBtaW4gJzMnICAgJzInICAtPiAgJzInDQotZGRtaW4yODEgbWluICctMTAnICczJyAgLT4gICctMTAnDQotZGRtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnDQotZGRtaW4yODMgbWluICcxJyAnMS4wJyAgLT4gICcxLjAnDQotZGRtaW4yODQgbWluICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kZG1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjENCi1kZG1pbjQwMiBtaW4gIDEuMSAgICAxICAgICAgIC0+ICAxDQotZGRtaW40MDMgbWluICAxICAgICAgMS4wICAgICAtPiAgMS4wDQotZGRtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xDQotZGRtaW40MDUgbWluICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMA0KLWRkbWluNDA2IG1pbiAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwDQotZGRtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMA0KLWRkbWluNDA4IG1pbiAgMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbWluNDA5IG1pbiAgMC4wICAgLTAgICAgICAgLT4gLTANCi1kZG1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1pbjQxMSBtaW4gIDAuMDAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1pbjQxMiBtaW4gIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwDQotZGRtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wDQotZGRtaW40MTQgbWluICAwICAgICAtMCAgICAgICAtPiAtMA0KLWRkbWluNDE1IG1pbiAtMC4wICAgLTAgICAgICAgLT4gLTANCi1kZG1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLWRkbWluNDE3IG1pbiAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTANCi1kZG1pbjQxOCBtaW4gLTAuMTAgIC0wLjEgICAgIC0+IC0wLjENCi1kZG1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCi1kZG1pbjQyMCBtaW4gLTEuMCAgIC0xICAgICAgIC0+IC0xDQotZGRtaW40MjEgbWluIC0xICAgICAtMS4xICAgICAtPiAtMS4xDQotZGRtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kZG1pbjQzMSBtaW4gIDEuMSAgICBJbmYgICAgIC0+ICAxLjENCi1kZG1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxDQotZGRtaW40MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQotZGRtaW40MzQgbWluICAwLjEgICAgMS4wICAgICAtPiAgMC4xDQotZGRtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KLWRkbWluNDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQotZGRtaW40MzcgbWluICAwICAgICAgMC4xMCAgICAtPiAgMA0KLWRkbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KLWRkbWluNDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTANCi1kZG1pbjQ0MCBtaW4gLTAuMCAgICAwLjAgICAgIC0+IC0wLjANCi1kZG1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCi1kZG1pbjQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQotZGRtaW40NDMgbWluIC0wLjAgICAgMCAgICAgICAtPiAtMC4wDQotZGRtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMA0KLWRkbWluNDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTANCi1kZG1pbjQ0NiBtaW4gLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMA0KLWRkbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTANCi1kZG1pbjQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjENCi1kZG1pbjQ0OSBtaW4gLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCi1kZG1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xDQotZGRtaW40NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQotZGRtaW40NTMgbWluIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkNCi0tLSBsYXJnaWVzDQotZGRtaW40NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMA0KLWRkbWluNDYxIG1pbiAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1kZG1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszDQotZGRtaW40NjMgbWluICAxRSszICAtMzg0ICAgIC0+IC0zODQNCi1kZG1pbjQ2NCBtaW4gLTM4NCAgIDFFKzMgICAgLT4gLTM4NA0KLWRkbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCi1kZG1pbjQ2NiBtaW4gLTM4NCAgLTFFKzMgICAgLT4gLTFFKzMNCi1kZG1pbjQ2NyBtaW4gLTFFKzMgIC0zODQgICAgLT4gLTFFKzMNCi0NCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4NCi1kZG1pbjQ3MSBtaW4gICAgICAxLjAgICAgICAgMC4xICAtPiAwLjENCi1kZG1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjENCi1kZG1pbjQ3MyBtaW4gICAgIDEwLjAgICAgICAgMC4xICAtPiAwLjENCi1kZG1pbjQ3NCBtaW4gICAgICAwLjEgICAgICAxMC4wICAtPiAwLjENCi1kZG1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjANCi1kZG1pbjQ3NiBtaW4gICAgICAxLjAgICAgICAgMTAwICAtPiAxLjANCi1kZG1pbjQ3NyBtaW4gICAgIDEwMDAgICAgICAxMC4wICAtPiAxMC4wDQotZGRtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMA0KLWRkbWluNDc5IG1pbiAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMC4wDQotZGRtaW40ODAgbWluICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwLjANCi1kZG1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjANCi1kZG1pbjQ4MiBtaW4gICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwLjANCi1kZG1pbjQ4MyBtaW4gIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMC4wDQotZGRtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMA0KLQ0KLS0tIHN1Ym5vcm1hbHMNCi1kZG1pbjUxMCBtaW4gIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDANCi1kZG1pbjUxMSBtaW4gIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDANCi1kZG1pbjUxMiBtaW4gIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDANCi1kZG1pbjUxMyBtaW4gIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDANCi1kZG1pbjUxNCBtaW4gIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDANCi1kZG1pbjUxNSBtaW4gIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDANCi1kZG1pbjUxNiBtaW4gIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDANCi1kZG1pbjUxNyBtaW4gIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDANCi1kZG1pbjUxOCBtaW4gIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDANCi1kZG1pbjUxOSBtaW4gIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDANCi1kZG1pbjUyMCBtaW4gIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDANCi0NCi1kZG1pbjUzMCBtaW4gLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4Mw0KLWRkbWluNTMxIG1pbiAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbA0KLWRkbWluNTMyIG1pbiAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbA0KLWRkbWluNTMzIG1pbiAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbA0KLWRkbWluNTM0IG1pbiAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbA0KLWRkbWluNTM1IG1pbiAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAtOS45OUUtMzg0IFN1Ym5vcm1hbA0KLWRkbWluNTM2IG1pbiAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbA0KLWRkbWluNTM3IG1pbiAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAtOUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbWluNTM4IG1pbiAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAtMUUtMzg2ICAgIFN1Ym5vcm1hbA0KLWRkbWluNTM5IG1pbiAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbA0KLWRkbWluNTQwIG1pbiAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAtMUUtMzg3ICAgIFN1Ym5vcm1hbA0KLQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG1pbjkwMCBtaW4gMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW4uZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMgorZGRtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yCitkZG1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTIKK2RkbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMgorZGRtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yCitkZG1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTIKK2RkbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQorZGRtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xCitkZG1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTEKK2RkbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQorZGRtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yCitkZG1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTEKK2RkbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMAorZGRtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwCitkZG1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDAKK2RkbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMgorZGRtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xCitkZG1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDAKK2RkbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQorZGRtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxCitkZG1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTIKK2RkbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQorZGRtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwCitkZG1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDEKK2RkbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCitkZG1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKK2RkbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wCitkZG1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAorZGRtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCitkZG1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTAKK2RkbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAorZGRtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCitkZG1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMAorZGRtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCitkZG1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAorZGRtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCitkZG1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKK2RkbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAorCitkZG1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RkbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZGRtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCitkZG1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKK2RkbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMworZGRtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkZG1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQorZGRtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMAorZGRtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMAorZGRtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQorZGRtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMAorZGRtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCitkZG1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCitkZG1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwCitkZG1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCitkZG1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZG1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZGRtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RkbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCitkZG1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAorZGRtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMAorZGRtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQorZGRtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKK2RkbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKK2RkbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDAKK2RkbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKK2RkbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkZG1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZGRtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZGRtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkZG1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RkbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RkbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZGRtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCitkZG1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAorZGRtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAorZGRtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAorZGRtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MAorZGRtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorZGRtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQorZGRtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQorZGRtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKK2RkbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCitkZG1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2CitkZG1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2CitkZG1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RkbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkZG1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQorZGRtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RkbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKK2RkbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJworZGRtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCitkZG1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKK2RkbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RkbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RkbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZGRtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkZG1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkZG1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZGRtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAorZGRtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkZG1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZGRtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZGRtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkZG1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZGRtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZGRtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkZG1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RkbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RkbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorZGRtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkZG1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxCitkZG1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RkbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZGRtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZGRtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RkbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RkbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZGRtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAorZGRtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkZG1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RkbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RkbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZGRtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMAorZGRtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAorZGRtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK2RkbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RkbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZGRtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkZG1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xCitkZG1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RkbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkZG1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkZG1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkZG1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NAorZGRtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQKK2RkbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RkbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMworZGRtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZGRtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xCitkZG1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKK2RkbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQorZGRtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xCitkZG1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKK2RkbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAorZGRtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMAorZGRtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAorZGRtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKK2RkbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wCitkZG1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKK2RkbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAorZGRtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMAorZGRtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAorCistLSBzdWJub3JtYWxzCitkZG1pbjUxMCBtaW4gIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWluNTExIG1pbiAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTIgbWluICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1pbjUxMyBtaW4gIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE0IG1pbiAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTUgbWluICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxNiBtaW4gIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE3IG1pbiAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTggbWluICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxOSBtaW4gIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbWluNTIwIG1pbiAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCitkZG1pbjUzMCBtaW4gLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4MworZGRtaW41MzEgbWluIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCitkZG1pbjUzMiBtaW4gLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkbWluNTMzIG1pbiAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbAorZGRtaW41MzQgbWluIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCitkZG1pbjUzNSBtaW4gLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwKK2RkbWluNTM2IG1pbiAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbAorZGRtaW41MzcgbWluIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsCitkZG1pbjUzOCBtaW4gLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwKK2RkbWluNTM5IG1pbiAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbAorZGRtaW41NDAgbWluIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsCisKKworLS0gTnVsbCB0ZXN0cworZGRtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWluTWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdAppbmRleCA1NTM3Y2M4Li4xMDEyZjFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdApAQCAtMSwyOTMgKzEsMjkzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZE1pbk1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtaW5udW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRtbmcwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yDQotZGRtbmcwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xDQotZGRtbmcwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwDQotZGRtbmcwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxDQotZGRtbmcwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yDQotZGRtbmcwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xDQotZGRtbmcwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xDQotZGRtbmcwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwDQotZGRtbmcwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xDQotZGRtbmcwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xDQotZGRtbmcwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwDQotZGRtbmcwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwDQotZGRtbmcwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwDQotZGRtbmcwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwDQotZGRtbmcwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwDQotZGRtbmcwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxDQotZGRtbmcwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xDQotZGRtbmcwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwDQotZGRtbmcwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxDQotZGRtbmcwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxDQotZGRtbmcwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yDQotZGRtbmcwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xDQotZGRtbmcwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwDQotZGRtbmcwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxDQotZGRtbmcwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kZG1uZzAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDANCi1kZG1uZzAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTANCi1kZG1uZzAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMA0KLWRkbW5nMDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wDQotZGRtbmcwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wDQotZGRtbmcwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wDQotZGRtbmcwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wDQotZGRtbmcwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wDQotZGRtbmcwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjANCi1kZG1uZzAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTANCi1kZG1uZzA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMA0KLWRkbW5nMDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQotZGRtbmcwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjANCi1kZG1uZzA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTANCi1kZG1uZzA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KLWRkbW5nMDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wDQotDQotZGRtbmcwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxDQotZGRtbmcwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxDQotZGRtbmcwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxDQotZGRtbmcwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxDQotZGRtbmcwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszDQotZGRtbmcwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszDQotDQotLS0gU3BlY2lhbHMNCi1kZG1uZzA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbW5nMDkxIG1pbm1hZyAgSW5mICAtMTAwMCAgLT4gLTEwMDANCi1kZG1uZzA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xDQotZGRtbmcwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMA0KLWRkbW5nMDk0IG1pbm1hZyAgSW5mICAgMCAgICAgLT4gIDANCi1kZG1uZzA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxDQotZGRtbmcwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMA0KLWRkbW5nMDk3IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtbmcwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRkbW5nMDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRtbmcxMDAgbWlubWFnIC0xICAgICBJbmYgICAtPiAtMQ0KLWRkbW5nMTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTANCi1kZG1uZzEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwDQotZGRtbmcxMDMgbWlubWFnICAxICAgICBJbmYgICAtPiAgMQ0KLWRkbW5nMTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kZG1uZzEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbW5nMTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtbmcxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMA0KLWRkbW5nMTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTENCi1kZG1uZzEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wDQotZGRtbmcxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMA0KLWRkbW5nMTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDENCi1kZG1uZzEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwDQotZGRtbmcxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG1uZzEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbW5nMTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDANCi1kZG1uZzEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xDQotZGRtbmcxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMA0KLWRkbW5nMTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDANCi1kZG1uZzEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxDQotZGRtbmcxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRkbW5nMTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotZGRtbmcxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5DQotZGRtbmcxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDANCi1kZG1uZzE0MyBtaW5tYWcgIE5hTiAtMSAgICAgIC0+ICAtMQ0KLWRkbW5nMTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wDQotZGRtbmcxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMA0KLWRkbW5nMTQ2IG1pbm1hZyAgTmFOICAxICAgICAgLT4gIDENCi1kZG1uZzE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQotZGRtbmcxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1kZG1uZzE0OSBtaW5tYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kZG1uZzE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KLWRkbW5nMTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1kZG1uZzE1MiBtaW5tYWcgLTEgICAtTmFOICAgIC0+IC0xDQotZGRtbmcxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMA0KLWRkbW5nMTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDANCi1kZG1uZzE1NSBtaW5tYWcgIDEgICAgTmFOICAgIC0+ICAxDQotZGRtbmcxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KLWRkbW5nMTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotZGRtbmcxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG1uZzE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtbmcxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwDQotZGRtbmcxODMgbWlubWFnICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbW5nMTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQ0KLWRkbW5nMTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjINCi1kZG1uZzE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMNCi1kZG1uZzE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0DQotDQotZGRtbmcxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQ0KLWRkbW5nMTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQ0KLWRkbW5nMTkwIG1pbm1hZyAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kZG1uZzE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTkyIG1pbm1hZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTk1IG1pbm1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uZzE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5nMTk4IG1pbm1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmcxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZGRtbmcyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxDQotZGRtbmcyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxDQotZGRtbmcyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxDQotZGRtbmcyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxDQotZGRtbmcyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxDQotZGRtbmcyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxDQotZGRtbmcyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxDQotZGRtbmcyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxDQotZGRtbmcyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxDQotZGRtbmcyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxDQotZGRtbmcyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxDQotZGRtbmcyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxDQotZGRtbmcyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxDQotZGRtbmcyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZGRtbmcyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxDQotZGRtbmcyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotZGRtbmcyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxDQotZGRtbmcyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotLS0gZnJvbSBleGFtcGxlcw0KLWRkbW5nMjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicNCi1kZG1uZzI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnDQotZGRtbmcyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnDQotZGRtbmcyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnDQotZGRtbmcyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1kZG1uZzQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjENCi1kZG1uZzQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxDQotZGRtbmc0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wDQotZGRtbmc0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xDQotZGRtbmc0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMA0KLWRkbW5nNDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwDQotZGRtbmc0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMA0KLWRkbW5nNDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRkbW5nNDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTANCi1kZG1uZzQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1uZzQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjANCi1kZG1uZzQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwDQotZGRtbmc0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wDQotZGRtbmc0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMA0KLWRkbW5nNDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTANCi1kZG1uZzQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wDQotZGRtbmc0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMA0KLWRkbW5nNDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQ0KLWRkbW5nNDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQ0KLWRkbW5nNDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTENCi1kZG1uZzQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xDQotZGRtbmc0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xDQotLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQotZGRtbmc0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQotZGRtbmc0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQ0KLWRkbW5nNDMzIG1pbm1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEuMA0KLWRkbW5nNDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KLWRkbW5nNDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTANCi1kZG1uZzQzNiBtaW5tYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMA0KLWRkbW5nNDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDANCi1kZG1uZzQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjANCi1kZG1uZzQzOSBtaW5tYWcgLTAgICAgICAwLjAgICAgIC0+IC0wDQotZGRtbmc0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQotZGRtbmc0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wDQotZGRtbmc0NDIgbWlubWFnIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMA0KLWRkbW5nNDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KLWRkbW5nNDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTANCi1kZG1uZzQ0NSBtaW5tYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wDQotZGRtbmc0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMA0KLWRkbW5nNDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTANCi1kZG1uZzQ0OCBtaW5tYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjENCi1kZG1uZzQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjENCi1kZG1uZzQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xDQotZGRtbmc0NTEgbWlubWFnIC0xLjEgICAtMSAgICAgICAtPiAtMQ0KLWRkbW5nNDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KLS0tIGxhcmdpZXMNCi1kZG1uZzQ2MCBtaW5tYWcgIDEwMDAgICAxRSszICAgIC0+ICAxMDAwDQotZGRtbmc0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMA0KLWRkbW5nNDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCi1kZG1uZzQ2MyBtaW5tYWcgIDFFKzMgICAtMzg0ICAgIC0+IC0zODQNCi1kZG1uZzQ2NCBtaW5tYWcgLTM4NCAgICAxRSszICAgIC0+IC0zODQNCi1kZG1uZzQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszDQotZGRtbmc0NjYgbWlubWFnIC0zODQgICAtMUUrMyAgICAtPiAtMzg0DQotZGRtbmc0NjcgbWlubWFnIC0xRSszICAgLTM4NCAgICAtPiAtMzg0DQotDQotLS0gc3Vibm9ybWFscw0KLWRkbW5nNTEwIG1pbm1hZyAgMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTExIG1pbm1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTEyIG1pbm1hZyAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTEzIG1pbm1hZyAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE0IG1pbm1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE1IG1pbm1hZyAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE2IG1pbm1hZyAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTE5IG1pbm1hZyAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMA0KLQ0KLWRkbW5nNTMwIG1pbm1hZyAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTMxIG1pbm1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTMyIG1pbm1hZyAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTMzIG1pbm1hZyAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM0IG1pbm1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM1IG1pbm1hZyAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM2IG1pbm1hZyAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM3IG1pbm1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM4IG1pbm1hZyAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTM5IG1pbm1hZyAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgMA0KLWRkbW5nNTQwIG1pbm1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMA0KLQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG1uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNaW5NYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgorZGRtbmcwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCitkZG1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDAKK2RkbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQorZGRtbmcwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCitkZG1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTEKK2RkbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQorZGRtbmcwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCitkZG1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTEKK2RkbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQorZGRtbmcwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCitkZG1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDAKK2RkbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAorZGRtbmcwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCitkZG1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDAKK2RkbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQorZGRtbmcwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCitkZG1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDAKK2RkbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQorZGRtbmcwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCitkZG1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTIKK2RkbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQorZGRtbmcwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCitkZG1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDEKK2RkbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZGRtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCitkZG1uZzAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTAKK2RkbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCitkZG1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAorZGRtbmcwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wCitkZG1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKK2RkbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAorZGRtbmcwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wCitkZG1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAorZGRtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCitkZG1uZzA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMAorZGRtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RkbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCitkZG1uZzA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTAKK2RkbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkZG1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAorCitkZG1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RkbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZGRtbmcwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCitkZG1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzEKK2RkbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMworZGRtbmcwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkZG1uZzA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQorZGRtbmcwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAorZGRtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAorZGRtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQorZGRtbmcwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAorZGRtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkbW5nMDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCitkZG1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wCitkZG1uZzEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCitkZG1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCitkZG1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkZG1uZzEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMAorZGRtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQorZGRtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAorZGRtbmcxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMAorZGRtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQorZGRtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAorZGRtbmcxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCitkZG1uZzEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xCitkZG1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCitkZG1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCitkZG1uZzEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxCitkZG1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZG1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZGRtbmcxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RkbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCitkZG1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMAorZGRtbmcxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAorZGRtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQorZGRtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZGRtbmcxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RkbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RkbW5nMTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RkbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKK2RkbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RkbW5nMTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKK2RkbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RkbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RkbW5nMTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RkbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkZG1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbW5nMTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZGRtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZGRtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkZG1uZzE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RkbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RkbW5nMTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZGRtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkZG1uZzE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RkbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQorZGRtbmcyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCitkZG1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK2RkbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQorZGRtbmcyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCitkZG1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK2RkbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQorZGRtbmcyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCitkZG1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK2RkbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQorZGRtbmcyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCitkZG1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK2RkbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQorZGRtbmcyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZG1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK2RkbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRtbmcyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCitkZG1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZGRtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJworZGRtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJworZGRtbmcyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnCitkZG1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKK2RkbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkZG1uZzQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RkbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RkbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZGRtbmc0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkZG1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkZG1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZGRtbmc0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMAorZGRtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkZG1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZGRtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZGRtbmc0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkZG1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCitkZG1uZzQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wCitkZG1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCitkZG1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK2RkbW5nNDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZGRtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQorZGRtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQorZGRtbmc0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RkbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorZGRtbmc0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQorZGRtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wCitkZG1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK2RkbW5nNDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK2RkbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCitkZG1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCitkZG1uZzQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK2RkbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTAKK2RkbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorZGRtbmc0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCitkZG1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCitkZG1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK2RkbW5nNDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKK2RkbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAKK2RkbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKK2RkbW5nNDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RkbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZGRtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCitkZG1uZzQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCitkZG1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xCitkZG1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RkbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK2RkbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbW5nNDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK2RkbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NAorZGRtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0CitkZG1uZzQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCitkZG1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQKK2RkbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NAorCistLSBzdWJub3JtYWxzCitkZG1uZzUxMCBtaW5tYWcgIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTExIG1pbm1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTIgbWlubWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUxMyBtaW5tYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE0IG1pbm1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTUgbWlubWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxNiBtaW5tYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTggbWlubWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCitkZG1uZzUzMCBtaW5tYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTMxIG1pbm1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzIgbWlubWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUzMyBtaW5tYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM0IG1pbm1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzUgbWlubWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzNiBtaW5tYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM3IG1pbm1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzggbWlubWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzOSBtaW5tYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbW5nNTQwIG1pbm1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCisKKy0tIE51bGwgdGVzdHMKK2RkbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbnVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0CmluZGV4IDI3MDVlNzkuLmI3ZmZmZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRkbW5zMDAxIG1pbnVzICAgICAgICs3LjUwICAtPiAtNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kZG1uczAxMSBtaW51cyAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQotZGRtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTg0KLWRkbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFODQotZGRtbnMwMjMgbWludXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kZG1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCi1kZG1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQotZGRtbnMwMzMgbWludXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KLWRkbW5zMDM2IG1pbnVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCi1kZG1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZmluaXRlcw0KLWRkbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNw0KLWRkbW5zMTAyIG1pbnVzICAgICAgICAgLTcgICAtPiA3DQotZGRtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQ0KLWRkbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQ0KLWRkbW5zMTA1IG1pbnVzICAgICAgIDcuNTAgICAtPiAtNy41MA0KLWRkbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwDQotZGRtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMA0KLWRkbW5zMTA4IG1pbnVzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotZGRtbnMxMTEgbWludXMgICAgICAgICAgMCAgIC0+IDANCi1kZG1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMA0KLWRkbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0DQotZGRtbnMxMTQgbWludXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCi1kZG1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZGRtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkbW5zMTE3IG1pbnVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kZG1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kZG1uczEyMSBtaW51cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyDQotZGRtbnMxMjIgbWludXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQotZGRtbnMxMjMgbWludXMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KLWRkbW5zMTI0IG1pbnVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRtbnMxMzEgbWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbW5zMTMyIG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4Mw0KLWRkbW5zMTMzIG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZG1uczEzNCBtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsDQotDQotZGRtbnMxMzUgbWludXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsDQotZGRtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRtbnMxMzcgbWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZG1uczEzOCBtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWludXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RkbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RkbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KK2RkbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCitkZG1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkZG1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZG1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAorZGRtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RkbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNworZGRtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKK2RkbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKK2RkbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQorZGRtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCitkZG1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAorZGRtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAorZGRtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZG1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAorZGRtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKK2RkbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkZG1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRtbnMxMjEgbWludXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRtbnMxMjIgbWludXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZG1uczEyMyBtaW51cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCitkZG1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbW5zMTMyIG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRtbnMxMzQgbWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbAorCitkZG1uczEzNSBtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRtbnMxMzcgbWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE11bHRpcGx5LmRlY1Rlc3QKaW5kZXggNDVhMzgxZC4uNTg3M2Y4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0CkBAIC0xLDU1MyArMSw1NTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTXVsdGlwbHkuZGVjVGVzdCAtLSBkZWNEb3VibGUgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNA0KLWRkbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYNCi1kZG11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1DQotZGRtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTANCi1kZG11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwDQotZGRtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMA0KLWRkbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwDQotZGRtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDANCi1kZG11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMA0KLWRkbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDANCi1kZG11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkNCi1kZG11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wDQotZGRtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCi1kZG11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAgUm91bmRlZA0KLWRkbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwDQotZGRtdWwwMTYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRtdWwwMTggbXVsdGlwbHkgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZGRtdWwwMTkgbXVsdGlwbHkgLTkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gemVyb3MsIGV0Yy4NCi1kZG11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwDQotZGRtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMA0KLWRkbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTANCi1kZG11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwDQotZGRtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRkbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCi1kZG11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQotZGRtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRkbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDANCi1kZG11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwDQotZGRtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZG11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRkbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDANCi1kZG11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwDQotZGRtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZG11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRkbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDANCi1kZG11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwDQotZGRtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZG11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRkbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDANCi1kZG11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwDQotZGRtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kZG11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kZG11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjANCi1kZG11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxDQotZGRtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyDQotZGRtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wDQotZGRtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDENCi0NCi1kZG11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5DQotZGRtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTANCi1kZG11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQ0KLWRkbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyDQotZGRtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMNCi1kZG11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNA0KLWRkbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1DQotDQotDQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZG11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kZG11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kZG11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kZG11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi0NCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQotZGRtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODENCi1kZG11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwDQotZGRtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwDQotZGRtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDANCi1kZG11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwDQotZGRtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwDQotZGRtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDANCi1kZG11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwDQotZGRtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwDQotZGRtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDANCi1kZG11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwDQotZGRtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwDQotZGRtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDANCi1kZG11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwDQotZGRtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KLS0tZGRtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kZG11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZGRtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzDQotZGRtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQ0KLWRkbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MA0KLWRkbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwDQotZGRtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMA0KLWRkbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMA0KLWRkbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwDQotZGRtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMA0KLWRkbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMA0KLWRkbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwDQotZGRtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMA0KLWRkbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMA0KLWRkbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwDQotZGRtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMA0KLWRkbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMA0KLWRkbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwDQotDQotLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZw0KLWRkbXVsMzAxIG11bHRpcGx5IDkgOSAgIC0+IDgxDQotZGRtdWwzMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMA0KLWRkbXVsMzAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMA0KLWRkbXVsMzA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwDQotZGRtdWwzMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMA0KLWRkbXVsMzA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMA0KLWRkbXVsMzA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwDQotZGRtdWwzMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMA0KLWRkbXVsMzA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMA0KLWRkbXVsMzEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwDQotZGRtdWwzMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMA0KLWRkbXVsMzEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMA0KLWRkbXVsMzEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwDQotZGRtdWwzMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMA0KLWRkbXVsMzE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMzE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZA0KLWRkbXVsMzE3IG11bHRpcGx5IDkwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQNCi1kZG11bDMxOCBtdWx0aXBseSA5MDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZA0KLWRkbXVsMzE5IG11bHRpcGx5IDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxOSAgUm91bmRlZA0KLWRkbXVsMzIwIG11bHRpcGx5IDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQNCi1kZG11bDMyMSBtdWx0aXBseSA5MDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZA0KLWRkbXVsMzIyIG11bHRpcGx5IDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMiAgUm91bmRlZA0KLWRkbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjMgIFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLWRkbXVsNTA0ICBtdWx0aXBseSAgMEUtMjYwIDEwMDBFLTI2MCAgLT4gMEUtMzk4IENsYW1wZWQNCi1kZG11bDUwNSAgbXVsdGlwbHkgIDEwMEUrMjYwIDBFKzI2MCAgIC0+IDBFKzM2OSBDbGFtcGVkDQotLS0gNjVLLTEgY2FzZQ0KLWRkbXVsNTA2IG11bHRpcGx5IDc3LjEgODUwIC0+IDY1NTM1LjANCi0NCi0tLSBtaXhlZCB3aXRoIHplcm9zDQotZGRtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wDQotZGRtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwDQotZGRtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwDQotZGRtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wDQotZGRtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wDQotZGRtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwDQotZGRtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwDQotZGRtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wDQotDQotZGRtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjANCi1kZG11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMA0KLWRkbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wDQotZGRtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjANCi1kZG11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMA0KLWRkbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wDQotZGRtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjANCi1kZG11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMA0KLQ0KLWRkbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wDQotZGRtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjANCi1kZG11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMA0KLWRkbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wDQotZGRtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjANCi1kZG11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMA0KLWRkbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wDQotZGRtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjANCi0NCi1kZG11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDANCi1kZG11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDANCi1kZG11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDANCi1kZG11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDANCi1kZG11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDANCi1kZG11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDANCi1kZG11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDANCi1kZG11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDANCi0NCi0NCi0tLSBTcGVjaWFscw0KLWRkbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZGRtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kZG11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZGRtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZG11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZGRtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZG11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZGRtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kZG11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZGRtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRkbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZG11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZG11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZG11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZG11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZG11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZG11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZGRtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44DQotZGRtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KLWRkbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRkbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRkbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMNCi1kZG11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi0NCi1kZG11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZG11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCi1kZG11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgNCi1kZG11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQotZGRtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQotZGRtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZGRtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMw0KLWRkbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRkbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFODQotZGRtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4NCi1kZG11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTg0KLWRkbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFODQotZGRtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4NCi1kZG11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTg0KLWRkbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFODQotDQotZGRtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQotLS0gc2lnbnMNCi1kZG11bDc1MSBtdWx0aXBseSAgMWUrMjc3ICAxZSszMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzUyIG11bHRpcGx5ICAxZSsyNzcgLTFlKzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NTMgbXVsdGlwbHkgLTFlKzI3NyAgMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDc1NCBtdWx0aXBseSAtMWUrMjc3IC0xZSszMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzU1IG11bHRpcGx5ICAxZS0yNzcgIDFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDc1NiBtdWx0aXBseSAgMWUtMjc3IC0xZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw3NTcgbXVsdGlwbHkgLTFlLTI3NyAgMWUtMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbXVsNzU4IG11bHRpcGx5IC0xZS0yNzcgLTFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kZG11bDc2MCBtdWx0aXBseSAxZS0yOTEgMWUtMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwNCi1kZG11bDc2MSBtdWx0aXBseSAxZS0yOTEgMWUtMTAyIC0+IDFFLTM5MyBTdWJub3JtYWwNCi1kZG11bDc2MiBtdWx0aXBseSAxZS0yOTEgMWUtMTAzIC0+IDFFLTM5NCBTdWJub3JtYWwNCi1kZG11bDc2MyBtdWx0aXBseSAxZS0yOTEgMWUtMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwNCi1kZG11bDc2NCBtdWx0aXBseSAxZS0yOTEgMWUtMTA1IC0+IDFFLTM5NiBTdWJub3JtYWwNCi1kZG11bDc2NSBtdWx0aXBseSAxZS0yOTEgMWUtMTA2IC0+IDFFLTM5NyBTdWJub3JtYWwNCi1kZG11bDc2NiBtdWx0aXBseSAxZS0yOTEgMWUtMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwNCi1kZG11bDc2NyBtdWx0aXBseSAxZS0yOTEgMWUtMTA4IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw3NjggbXVsdGlwbHkgMWUtMjkxIDFlLTEwOSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbXVsNzY5IG11bHRpcGx5IDFlLTI5MSAxZS0xMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0tLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddDQotZGRtdWw3NzAgbXVsdGlwbHkgMWUrNjAgMWUrMzIxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQNCi1kZG11bDc3MSBtdWx0aXBseSAxZSs2MCAxZSszMjIgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQNCi1kZG11bDc3MiBtdWx0aXBseSAxZSs2MCAxZSszMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkDQotZGRtdWw3NzMgbXVsdGlwbHkgMWUrNjAgMWUrMzI0IC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQNCi1kZG11bDc3NCBtdWx0aXBseSAxZSs2MCAxZSszMjUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NzUgbXVsdGlwbHkgMWUrNjAgMWUrMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzc2IG11bHRpcGx5IDFlKzYwIDFlKzMyNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDc3NyBtdWx0aXBseSAxZSs2MCAxZSszMjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw3NzggbXVsdGlwbHkgMWUrNjAgMWUrMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkbXVsNzc5IG11bHRpcGx5IDFlKzYwIDFlKzMzMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZG11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbA0KLWRkbXVsODAyIG11bHRpcGx5ICAxLjAwMEUtMzk0ICAgMWUtMSAgLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsDQotZGRtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTM5NCAgICAxZS0yICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwNCi1kZG11bDgwNCBtdWx0aXBseSAgMS4wRS0zOTQgICAgIDFlLTMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KLWRkbXVsODA1IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkbXVsODA2IG11bHRpcGx5ICAxLjNFLTM5NCAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODA3IG11bHRpcGx5ICAxLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODA4IG11bHRpcGx5ICAxLjdFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODA5IG11bHRpcGx5ICAyLjNFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODEwIG11bHRpcGx5ICAyLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODExIG11bHRpcGx5ICAyLjdFLTM5NCAgICAgMWUtNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODEyIG11bHRpcGx5ICAxLjQ5RS0zOTQgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODEzIG11bHRpcGx5ICAxLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODE0IG11bHRpcGx5ICAxLjUxRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODE1IG11bHRpcGx5ICAyLjQ5RS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODE2IG11bHRpcGx5ICAyLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbXVsODE3IG11bHRpcGx5ICAyLjUxRS0zOTQgICAgMWUtNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkbXVsODE4IG11bHRpcGx5ICAxRS0zOTQgICAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwNCi1kZG11bDgxOSBtdWx0aXBseSAgM0UtMzk0ICAgICAgIDFlLTUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbXVsODIwIG11bHRpcGx5ICA1RS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw4MjEgbXVsdGlwbHkgIDdFLTM5NCAgICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MjIgbXVsdGlwbHkgIDlFLTM5NCAgICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRtdWw4MjMgbXVsdGlwbHkgIDkuOUUtMzk0ICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRtdWw4MjQgbXVsdGlwbHkgIDFFLTM5NCAgICAgIC0xZS00ICAtPiAtMUUtMzk4ICAgIFN1Ym5vcm1hbA0KLWRkbXVsODI1IG11bHRpcGx5ICAzRS0zOTQgICAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw4MjYgbXVsdGlwbHkgLTVFLTM5NCAgICAgICAxZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZG11bDgyNyBtdWx0aXBseSAgN0UtMzk0ICAgICAgLTFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDgyOCBtdWx0aXBseSAtOUUtMzk0ICAgICAgIDFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDgyOSBtdWx0aXBseSAgOS45RS0zOTQgICAgLTFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG11bDgzMCBtdWx0aXBseSAgMy4wRS0zOTQgICAgLTFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRkbXVsODMxIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMjAwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRtdWw4MzIgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0xOTkgLT4gMUUtMzk4ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRtdWw4MzMgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0xOTggLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsDQotZGRtdWw4MzQgbXVsdGlwbHkgIDIuMEUtMTk5ICAgICAyZS0xOTggLT4gNC4wRS0zOTcgICAgU3Vibm9ybWFsDQotZGRtdWw4MzUgbXVsdGlwbHkgIDQuMEUtMTk5ICAgICA0ZS0xOTggLT4gMS42MEUtMzk2ICAgU3Vibm9ybWFsDQotZGRtdWw4MzYgbXVsdGlwbHkgMTAuMEUtMTk5ICAgIDEwZS0xOTggLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsDQotZGRtdWw4MzcgbXVsdGlwbHkgMzAuMEUtMTk5ICAgIDMwZS0xOTggLT4gOS4wMDBFLTM5NSAgU3Vibm9ybWFsDQotZGRtdWw4MzggbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODggLT4gMS42MDAwRS0zODQgU3Vibm9ybWFsDQotZGRtdWw4MzkgbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODcgLT4gMS42MDAwRS0zODMNCi1kZG11bDg0MCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NiAtPiAxLjYwMDBFLTM4Mg0KLQ0KLS0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KLWRkbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzM4MyAgICAgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kZG11bDg3MSBtdWx0aXBseSAxMDAgLTkuOTk5RSszODMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kZG11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSszODMgMTAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kZG11bDg3MyBtdWx0aXBseSAgICAgLTkuOTk5RSszODMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRkbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODgyIG11bHRpcGx5ICAxLjIzNEUtMzU1IDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODgzIG11bHRpcGx5ICAxLjIzRS0zNTUgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODg0IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtMzk1ICBTdWJub3JtYWwNCi1kZG11bDg4NSBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTM5NiAgU3Vibm9ybWFsDQotZGRtdWw4ODYgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRtdWw4ODcgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRtdWw4ODggbXVsdGlwbHkgIDEuM0UtMzU1ICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRtdWw4ODkgbXVsdGlwbHkgIDEuM0UtMzU1ICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZGRtdWw4OTAgbXVsdGlwbHkgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTM5OCAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0NCi1kZG11bDg5MSBtdWx0aXBseSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1IC0+ICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODkzIG11bHRpcGx5ICAxLjIzNDVFLTQwICAgMS4yMzRFLTM1NSAtPiAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kZG11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZGRtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRkbXVsODk2IG11bHRpcGx5ICAxLjIzNDU2RS00MSAgMS4yMzRFLTM1NSAtPiAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93DQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2DQotZGRtdWw5MDAgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZA0KLWRkbXVsOTAxIG11bHRpcGx5ICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZG11bDkwMiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWRkbXVsOTAzIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRtdWw5MDQgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZG11bDkwNSBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLS0tIFRoZSBuZXh0IHJvdW5kcyB0byBObWluIChiKiplbWluKTsgdGhpcyBpcyB0aGUgZGlzdGluZ3Vpc2hpbmcgY2FzZQ0KLS0tIGZvciBkZXRlY3RpbmcgdGluaW5lc3MgKGJlZm9yZSBvciBhZnRlciByb3VuZGluZykgLS0gaWYgYWZ0ZXINCi0tLSByb3VuZGluZyB0aGVuIHRoZSByZXN1bHQgd291bGQgYmUgdGhlIHNhbWUsIGJ1dCB0aGUgVW5kZXJmbG93IGZsYWcNCi0tLSB3b3VsZCBub3QgYmUgc2V0DQotZGRtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi0tLSBwcm92ZSB0aG9zZSBvcGVyYW5kcyB3ZXJlIGV4YWN0DQotZGRtdWw5MDcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMNCi1kZG11bDkwOCBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQ0KLQ0KLS0tIHJlZHVjaW5nIHRpbmllc3QNCi1kZG11bDkxMCBtdWx0aXBseSAxZS0zOTggMC45OSAtPiAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDkxMSBtdWx0aXBseSAxZS0zOTggMC43NSAtPiAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kZG11bDkxMiBtdWx0aXBseSAxZS0zOTggMC41ICAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRkbXVsOTEzIG11bHRpcGx5IDFlLTM5OCAwLjI1IC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZGRtdWw5MTQgbXVsdGlwbHkgMWUtMzk4IDAuMDEgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi0tLSBodWdlc3QNCi1kZG11bDkyMCBtdWx0aXBseSAgOTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBwb3dlci1vZi10ZW4gZWRnZSBjYXNlcw0KLWRkbXVsMTAwMSBtdWx0aXBseSAgMSAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTANCi1kZG11bDEwMDIgbXVsdGlwbHkgIDEgICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMA0KLWRkbXVsMTAwMyBtdWx0aXBseSAgMSAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMA0KLWRkbXVsMTAwNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDANCi1kZG11bDEwMDUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRkbXVsMTAwNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRkbXVsMTAwNyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDANCi1kZG11bDEwMDggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRkbXVsMTAwOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRkbXVsMTAxMCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDANCi1kZG11bDEwMTEgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRkbXVsMTAxMiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRkbXVsMTAxMyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kZG11bDEwMTQgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTAxNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTAyMSBtdWx0aXBseSAgMTAgICAgIDEgICAgICAgICAgICAgICAgLT4gMTANCi1kZG11bDEwMjIgbXVsdGlwbHkgIDEwICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMA0KLWRkbXVsMTAyMyBtdWx0aXBseSAgMTAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMA0KLWRkbXVsMTAyNCBtdWx0aXBseSAgMTAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDANCi1kZG11bDEwMjUgbXVsdGlwbHkgIDEwICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRkbXVsMTAyNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRkbXVsMTAyNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDANCi1kZG11bDEwMjggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRkbXVsMTAyOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRkbXVsMTAzMCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDANCi1kZG11bDEwMzEgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRkbXVsMTAzMiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRkbXVsMTAzMyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kZG11bDEwMzQgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTAzNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTA0MSBtdWx0aXBseSAgMTAwICAgIDAuMSAgICAgICAgICAgICAgLT4gMTAuMA0KLWRkbXVsMTA0MiBtdWx0aXBseSAgMTAwICAgIDEgICAgICAgICAgICAgICAgLT4gMTAwDQotZGRtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwDQotZGRtdWwxMDQ0IG11bHRpcGx5ICAxMDAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMA0KLWRkbXVsMTA0NSBtdWx0aXBseSAgMTAwICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwDQotZGRtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwDQotZGRtdWwxMDQ3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRkbXVsMTA0OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwDQotZGRtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwDQotZGRtdWwxMDUwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRkbXVsMTA1MSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZGRtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZGRtdWwxMDUzIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRkbXVsMTA1NCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDYxIG11bHRpcGx5ICAxMDAwICAgMC4wMSAgICAgICAgICAgICAtPiAxMC4wMA0KLWRkbXVsMTA2MiBtdWx0aXBseSAgMTAwMCAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwLjANCi1kZG11bDEwNjMgbXVsdGlwbHkgIDEwMDAgICAxICAgICAgICAgICAgICAgIC0+IDEwMDANCi1kZG11bDEwNjQgbXVsdGlwbHkgIDEwMDAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwDQotZGRtdWwxMDY1IG11bHRpcGx5ICAxMDAwICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDANCi1kZG11bDEwNjYgbXVsdGlwbHkgIDEwMDAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDANCi1kZG11bDEwNjcgbXVsdGlwbHkgIDEwMDAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwDQotZGRtdWwxMDY4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDANCi1kZG11bDEwNjkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDANCi1kZG11bDEwNzAgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQotZGRtdWwxMDcxIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDANCi1kZG11bDEwNzIgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kZG11bDEwNzMgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDc0IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kZG11bDEwNzUgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi1kZG11bDEwODEgbXVsdGlwbHkgIDEwMDAwICAwLjAwMSAgICAgICAgICAgIC0+IDEwLjAwMA0KLWRkbXVsMTA4MiBtdWx0aXBseSAgMTAwMDAgIDAuMDEgICAgICAgICAgICAgLT4gMTAwLjAwDQotZGRtdWwxMDgzIG11bHRpcGx5ICAxMDAwMCAgMC4xICAgICAgICAgICAgICAtPiAxMDAwLjANCi1kZG11bDEwODQgbXVsdGlwbHkgIDEwMDAwICAxICAgICAgICAgICAgICAgIC0+IDEwMDAwDQotZGRtdWwxMDg1IG11bHRpcGx5ICAxMDAwMCAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMDANCi1kZG11bDEwODYgbXVsdGlwbHkgIDEwMDAwICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMDANCi1kZG11bDEwODcgbXVsdGlwbHkgIDEwMDAwICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAwDQotZGRtdWwxMDg4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMDANCi1kZG11bDEwODkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMDANCi1kZG11bDEwOTAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQotZGRtdWwxMDkxIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMDANCi1kZG11bDEwOTIgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDANCi1kZG11bDEwOTMgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQotZGRtdWwxMDk0IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDANCi1kZG11bDEwOTUgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi0NCi1kZG11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDANCi1kZG11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDANCi0NCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRtdWw5OTkwIG11bHRpcGx5IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTXVsdGlwbHkuZGVjVGVzdCAtLSBkZWNEb3VibGUgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNEb3VibGVzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNAorZGRtdWwwMDEgbXVsdGlwbHkgMiAgICAgIDMgLT4gNgorZGRtdWwwMDIgbXVsdGlwbHkgNSAgICAgIDEgLT4gNQorZGRtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTAKK2RkbXVsMDA0IG11bHRpcGx5IDEuMjAgICAyIC0+IDIuNDAKK2RkbXVsMDA1IG11bHRpcGx5IDEuMjAgICAwIC0+IDAuMDAKK2RkbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwCitkZG11bDAwNyBtdWx0aXBseSAtMS4yMCAgMiAtPiAtMi40MAorZGRtdWwwMDggbXVsdGlwbHkgLTEuMjAgIDAgLT4gLTAuMDAKK2RkbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDAKK2RkbXVsMDEwIG11bHRpcGx5IDUuMDkgNy4xIC0+IDM2LjEzOQorZGRtdWwwMTEgbXVsdGlwbHkgMi41ICAgIDQgLT4gMTAuMAorZGRtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK2RkbXVsMDEzIG11bHRpcGx5IDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMCBSb3VuZGVkCitkZG11bDAxNSBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorZGRtdWwwMTYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZG11bDAxNyBtdWx0aXBseSAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsMDE4IG11bHRpcGx5IC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRtdWwwMTkgbXVsdGlwbHkgLTkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkZG11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwCitkZG11bDAyMiBtdWx0aXBseSAgMCAgICAgLTAgICAgIC0+IC0wCitkZG11bDAyMyBtdWx0aXBseSAtMCAgICAgIDAgICAgIC0+IC0wCitkZG11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwCitkZG11bDAyNSBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkZG11bDAyNiBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkZG11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkZG11bDAyOCBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkZG11bDAzMCBtdWx0aXBseSAgNS4wMCAgIDFFLTMgIC0+ICAwLjAwNTAwCitkZG11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwCitkZG11bDAzMiBtdWx0aXBseSAgMDAuMDAgIDBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRtdWwwMzMgbXVsdGlwbHkgIDBFLTMgICAwMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDAKK2RkbXVsMDM1IG11bHRpcGx5IC0wMC4wMCAgMC4wMDAgLT4gLTAuMDAwMDAKK2RkbXVsMDM2IG11bHRpcGx5IC0wMC4wMCAgMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRtdWwwMzggbXVsdGlwbHkgIDUuMDAgIC0xRS0zICAtPiAtMC4wMDUwMAorZGRtdWwwMzkgbXVsdGlwbHkgIDAwLjAwIC0wLjAwMCAtPiAtMC4wMDAwMAorZGRtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkbXVsMDQxIG11bHRpcGx5ICAwRS0zICAtMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZG11bDA0MiBtdWx0aXBseSAtNS4wMCAgLTFFLTMgIC0+ICAwLjAwNTAwCitkZG11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwCitkZG11bDA0NCBtdWx0aXBseSAtMDAuMDAgLTBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRtdWwwNDUgbXVsdGlwbHkgLTBFLTMgIC0wMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZGRtdWwwNTAgbXVsdGlwbHkgMS4yMCAzICAgICAgICAtPiAzLjYwCitkZG11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxCitkZG11bDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzIKK2RkbXVsMDUzIG11bHRpcGx5IDAuOSAgLTAgICAgICAgLT4gLTAuMAorZGRtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDEKKworZGRtdWwwNjAgbXVsdGlwbHkgMTIzLjQ1IDFlNyAgLT4gIDEuMjM0NUUrOQorZGRtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTAKK2RkbXVsMDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExCitkZG11bDA2MyBtdWx0aXBseSAxMjMuNDUgMWUxMCAtPiAgMS4yMzQ1RSsxMgorZGRtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMKK2RkbXVsMDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0CitkZG11bDA2NiBtdWx0aXBseSAxMjMuNDUgMWUxMyAtPiAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkbXVsMDgwIG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZGRtdWwwODQgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkZG11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkbXVsMDk0IG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCitkZG11bDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorZGRtdWwxMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMAorZGRtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCitkZG11bDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorZGRtdWwxMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMAorZGRtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCitkZG11bDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorZGRtdWwxMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMAorZGRtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCitkZG11bDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAorZGRtdWwxMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMAorZGRtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCitkZG11bDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAorZGRtdWwxMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMAorZGRtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTE3IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTIwIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRkbXVsMTIzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitkZG11bDEzMSBtdWx0aXBseSAzIDMgICAtPiA5CitkZG11bDEzMiBtdWx0aXBseSAzIDMwICAgLT4gOTAKK2RkbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwCitkZG11bDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwCitkZG11bDEzNSBtdWx0aXBseSAzIDMwMDAwICAgLT4gOTAwMDAKK2RkbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwCitkZG11bDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwCitkZG11bDEzOCBtdWx0aXBseSAzIDMwMDAwMDAwICAgLT4gOTAwMDAwMDAKK2RkbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwCitkZG11bDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwCitkZG11bDE0MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAKK2RkbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwCitkZG11bDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwCitkZG11bDE0NCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAKK2RkbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RkbXVsMzAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCitkZG11bDMwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCitkZG11bDMwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDAKK2RkbXVsMzA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCitkZG11bDMwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCitkZG11bDMwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDAKK2RkbXVsMzA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCitkZG11bDMwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCitkZG11bDMwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAKK2RkbXVsMzEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCitkZG11bDMxMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCitkZG11bDMxMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAKK2RkbXVsMzEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCitkZG11bDMxNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCitkZG11bDMxNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMzE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorZGRtdWwzMTcgbXVsdGlwbHkgOTAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAorZGRtdWwzMTggbXVsdGlwbHkgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTggIFJvdW5kZWQKK2RkbXVsMzE5IG11bHRpcGx5IDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxOSAgUm91bmRlZAorZGRtdWwzMjAgbXVsdGlwbHkgOTAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZAorZGRtdWwzMjEgbXVsdGlwbHkgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjEgIFJvdW5kZWQKK2RkbXVsMzIyIG11bHRpcGx5IDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMiAgUm91bmRlZAorZGRtdWwzMjMgbXVsdGlwbHkgOTAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZGRtdWw1MDQgIG11bHRpcGx5ICAwRS0yNjAgMTAwMEUtMjYwICAtPiAwRS0zOTggQ2xhbXBlZAorZGRtdWw1MDUgIG11bHRpcGx5ICAxMDBFKzI2MCAwRSsyNjAgICAtPiAwRSszNjkgQ2xhbXBlZAorLS0gNjVLLTEgY2FzZQorZGRtdWw1MDYgbXVsdGlwbHkgNzcuMSA4NTAgLT4gNjU1MzUuMAorCistLSBtaXhlZCB3aXRoIHplcm9zCitkZG11bDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTAKK2RkbXVsNTQyIG11bHRpcGx5IC0wICAgIC0xICAgICAtPiAgMAorZGRtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwCitkZG11bDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTAKK2RkbXVsNTQ1IG11bHRpcGx5IC0xICAgICAwICAgICAtPiAtMAorZGRtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwCitkZG11bDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDAKK2RkbXVsNTQ4IG11bHRpcGx5ICAxICAgIC0wICAgICAtPiAtMAorCitkZG11bDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMAorZGRtdWw1NTIgbXVsdGlwbHkgLTAuMCAgLTEgICAgIC0+ICAwLjAKK2RkbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wCitkZG11bDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMAorZGRtdWw1NTUgbXVsdGlwbHkgLTEuMCAgIDAgICAgIC0+IC0wLjAKK2RkbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wCitkZG11bDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMAorZGRtdWw1NTggbXVsdGlwbHkgIDEuMCAgLTAgICAgIC0+IC0wLjAKKworZGRtdWw1NjEgbXVsdGlwbHkgIDAgICAgLTEuMCAgIC0+IC0wLjAKK2RkbXVsNTYyIG11bHRpcGx5IC0wICAgIC0xLjAgICAtPiAgMC4wCitkZG11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMAorZGRtdWw1NjQgbXVsdGlwbHkgLTAgICAgIDEuMCAgIC0+IC0wLjAKK2RkbXVsNTY1IG11bHRpcGx5IC0xICAgICAwLjAgICAtPiAtMC4wCitkZG11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMAorZGRtdWw1NjcgbXVsdGlwbHkgIDEgICAgIDAuMCAgIC0+ICAwLjAKK2RkbXVsNTY4IG11bHRpcGx5ICAxICAgIC0wLjAgICAtPiAtMC4wCisKK2RkbXVsNTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMAorZGRtdWw1NzIgbXVsdGlwbHkgLTAuMCAgLTEuMCAgIC0+ICAwLjAwCitkZG11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDAKK2RkbXVsNTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMAorZGRtdWw1NzUgbXVsdGlwbHkgLTEuMCAgIDAuMCAgIC0+IC0wLjAwCitkZG11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsNTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMAorZGRtdWw1NzggbXVsdGlwbHkgIDEuMCAgLTAuMCAgIC0+IC0wLjAwCisKKworLS0gU3BlY2lhbHMKK2RkbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkbXVsNTgyIG11bHRpcGx5ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU4NSBtdWx0aXBseSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZG11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZG11bDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG11bDU4OCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDU5MSBtdWx0aXBseSAtMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw1OTQgbXVsdGlwbHkgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG11bDYwMCBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZG11bDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZG11bDYwMyBtdWx0aXBseSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRtdWw2MDYgbXVsdGlwbHkgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MDkgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRtdWw2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDYxMiBtdWx0aXBseSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNjE1IG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworZGRtdWw2MjEgbXVsdGlwbHkgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkbXVsNjIyIG11bHRpcGx5ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZG11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRtdWw2MjQgbXVsdGlwbHkgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkbXVsNjI1IG11bHRpcGx5ICBOYU4gIDAgICAgICAtPiAgTmFOCitkZG11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRtdWw2MjcgbXVsdGlwbHkgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkbXVsNjI4IG11bHRpcGx5ICBOYU4gIEluZiAgICAtPiAgTmFOCitkZG11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzAgbXVsdGlwbHkgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjMxIG11bHRpcGx5IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzMgbXVsdGlwbHkgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjM0IG11bHRpcGx5ICAwICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzYgbXVsdGlwbHkgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjM3IG11bHRpcGx5ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RkbXVsNjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDIgbXVsdGlwbHkgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDUgbXVsdGlwbHkgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDggbXVsdGlwbHkgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTEgbXVsdGlwbHkgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTQgbXVsdGlwbHkgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTcgbXVsdGlwbHkgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG11bDY2MSBtdWx0aXBseSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkbXVsNjYyIG11bHRpcGx5ICBOYU44ICA5OTkgICAtPiAgTmFOOAorZGRtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorZGRtdWw2NjQgbXVsdGlwbHkgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkZG11bDY2NSBtdWx0aXBseSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMKK2RkbXVsNjY3IG11bHRpcGx5ICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkZG11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3MyBtdWx0aXBseSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3NiBtdWx0aXBseSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY3OSBtdWx0aXBseSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RkbXVsNjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQorZGRtdWw2ODIgbXVsdGlwbHkgLU5hTjggIDk5OSAgIC0+IC1OYU44CitkZG11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitkZG11bDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK2RkbXVsNjg1IG11bHRpcGx5IC1JbmYgIC1OYU40ICAtPiAtTmFONAorZGRtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZGRtdWw2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RkbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjkyIG11bHRpcGx5IC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjkzIG11bHRpcGx5IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk1IG11bHRpcGx5IC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk2IG11bHRpcGx5IC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk4IG11bHRpcGx5ICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjk5IG11bHRpcGx5IC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRtdWw3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4KK2RkbXVsNzAyIG11bHRpcGx5IC1OYU4gICA5OTkgICAtPiAtTmFOCitkZG11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTgorZGRtdWw3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4KK2RkbXVsNzA1IG11bHRpcGx5IC1JbmYgIC1OYU4wICAtPiAtTmFOCitkZG11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTgorZGRtdWw3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4KKworZGRtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxMyBtdWx0aXBseSAtc05hTjAwICBOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNiBtdWx0aXBseSAtSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxOSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKKy0tIHNpZ25zCitkZG11bDc1MSBtdWx0aXBseSAgMWUrMjc3ICAxZSszMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NTIgbXVsdGlwbHkgIDFlKzI3NyAtMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzUzIG11bHRpcGx5IC0xZSsyNzcgIDFlKzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1NCBtdWx0aXBseSAtMWUrMjc3IC0xZSszMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NTUgbXVsdGlwbHkgIDFlLTI3NyAgMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw3NTYgbXVsdGlwbHkgIDFlLTI3NyAtMWUtMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw3NTcgbXVsdGlwbHkgLTFlLTI3NyAgMWUtMzExIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw3NTggbXVsdGlwbHkgLTFlLTI3NyAtMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RkbXVsNzYwIG11bHRpcGx5IDFlLTI5MSAxZS0xMDEgLT4gMUUtMzkyIFN1Ym5vcm1hbAorZGRtdWw3NjEgbXVsdGlwbHkgMWUtMjkxIDFlLTEwMiAtPiAxRS0zOTMgU3Vibm9ybWFsCitkZG11bDc2MiBtdWx0aXBseSAxZS0yOTEgMWUtMTAzIC0+IDFFLTM5NCBTdWJub3JtYWwKK2RkbXVsNzYzIG11bHRpcGx5IDFlLTI5MSAxZS0xMDQgLT4gMUUtMzk1IFN1Ym5vcm1hbAorZGRtdWw3NjQgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNSAtPiAxRS0zOTYgU3Vibm9ybWFsCitkZG11bDc2NSBtdWx0aXBseSAxZS0yOTEgMWUtMTA2IC0+IDFFLTM5NyBTdWJub3JtYWwKK2RkbXVsNzY2IG11bHRpcGx5IDFlLTI5MSAxZS0xMDcgLT4gMUUtMzk4IFN1Ym5vcm1hbAorZGRtdWw3NjcgbXVsdGlwbHkgMWUtMjkxIDFlLTEwOCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw3NjggbXVsdGlwbHkgMWUtMjkxIDFlLTEwOSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw3NjkgbXVsdGlwbHkgMWUtMjkxIDFlLTExMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZGRtdWw3NzAgbXVsdGlwbHkgMWUrNjAgMWUrMzIxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKK2RkbXVsNzcxIG11bHRpcGx5IDFlKzYwIDFlKzMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZAorZGRtdWw3NzIgbXVsdGlwbHkgMWUrNjAgMWUrMzIzIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgQ2xhbXBlZAorZGRtdWw3NzMgbXVsdGlwbHkgMWUrNjAgMWUrMzI0IC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkbXVsNzc0IG11bHRpcGx5IDFlKzYwIDFlKzMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzc1IG11bHRpcGx5IDFlKzYwIDFlKzMyNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzc2IG11bHRpcGx5IDFlKzYwIDFlKzMyNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzc3IG11bHRpcGx5IDFlKzYwIDFlKzMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzc4IG11bHRpcGx5IDFlKzYwIDFlKzMyOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzc5IG11bHRpcGx5IDFlKzYwIDFlKzMzMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZGRtdWw4MDEgbXVsdGlwbHkgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAxLjAwMDBFLTM5NCBTdWJub3JtYWwKK2RkbXVsODAyIG11bHRpcGx5ICAxLjAwMEUtMzk0ICAgMWUtMSAgLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZG11bDgwMyBtdWx0aXBseSAgMS4wMEUtMzk0ICAgIDFlLTIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAorZGRtdWw4MDQgbXVsdGlwbHkgIDEuMEUtMzk0ICAgICAxZS0zICAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkbXVsODA1IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw4MDYgbXVsdGlwbHkgIDEuM0UtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgwNyBtdWx0aXBseSAgMS41RS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODA4IG11bHRpcGx5ICAxLjdFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MDkgbXVsdGlwbHkgIDIuM0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxMCBtdWx0aXBseSAgMi41RS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODExIG11bHRpcGx5ICAyLjdFLTM5NCAgICAgMWUtNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTIgbXVsdGlwbHkgIDEuNDlFLTM5NCAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxMyBtdWx0aXBseSAgMS41MEUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODE0IG11bHRpcGx5ICAxLjUxRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTUgbXVsdGlwbHkgIDIuNDlFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxNiBtdWx0aXBseSAgMi41MEUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODE3IG11bHRpcGx5ICAyLjUxRS0zOTQgICAgMWUtNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZG11bDgxOCBtdWx0aXBseSAgMUUtMzk0ICAgICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsCitkZG11bDgxOSBtdWx0aXBseSAgM0UtMzk0ICAgICAgIDFlLTUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjAgbXVsdGlwbHkgIDVFLTM5NCAgICAgICAxZS01ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODIxIG11bHRpcGx5ICA3RS0zOTQgICAgICAgMWUtNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MjIgbXVsdGlwbHkgIDlFLTM5NCAgICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyMyBtdWx0aXBseSAgOS45RS0zOTQgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRtdWw4MjQgbXVsdGlwbHkgIDFFLTM5NCAgICAgIC0xZS00ICAtPiAtMUUtMzk4ICAgIFN1Ym5vcm1hbAorZGRtdWw4MjUgbXVsdGlwbHkgIDNFLTM5NCAgICAgIC0xZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODI2IG11bHRpcGx5IC01RS0zOTQgICAgICAgMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgyNyBtdWx0aXBseSAgN0UtMzk0ICAgICAgLTFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODI4IG11bHRpcGx5IC05RS0zOTQgICAgICAgMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MjkgbXVsdGlwbHkgIDkuOUUtMzk0ICAgIC0xZS01ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgzMCBtdWx0aXBseSAgMy4wRS0zOTQgICAgLTFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZG11bDgzMSBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTIwMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MzIgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0xOTkgLT4gMUUtMzk4ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDgzMyBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OCAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkbXVsODM0IG11bHRpcGx5ICAyLjBFLTE5OSAgICAgMmUtMTk4IC0+IDQuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRtdWw4MzUgbXVsdGlwbHkgIDQuMEUtMTk5ICAgICA0ZS0xOTggLT4gMS42MEUtMzk2ICAgU3Vibm9ybWFsCitkZG11bDgzNiBtdWx0aXBseSAxMC4wRS0xOTkgICAgMTBlLTE5OCAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODM3IG11bHRpcGx5IDMwLjBFLTE5OSAgICAzMGUtMTk4IC0+IDkuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRtdWw4MzggbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODggLT4gMS42MDAwRS0zODQgU3Vibm9ybWFsCitkZG11bDgzOSBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NyAtPiAxLjYwMDBFLTM4MworZGRtdWw4NDAgbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODYgLT4gMS42MDAwRS0zODIKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitkZG11bDg3MCBtdWx0aXBseSAxMDAgIDkuOTk5RSszODMgICAgICAgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZG11bDg3MSBtdWx0aXBseSAxMDAgLTkuOTk5RSszODMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkbXVsODcyIG11bHRpcGx5ICAgICAgOS45OTlFKzM4MyAxMDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRtdWw4NzMgbXVsdGlwbHkgICAgIC05Ljk5OUUrMzgzIDEwMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkZG11bDg4MSBtdWx0aXBseSAgMS4yMzQ3RS0zNTUgMS4yMzQ3RS00MCAgLT4gIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODgyIG11bHRpcGx5ICAxLjIzNEUtMzU1IDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4ODMgbXVsdGlwbHkgIDEuMjNFLTM1NSAgMS4yM0UtNDAgICAgIC0+ICAxLjUxM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg4NCBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQwICAgICAgLT4gIDEuNDRFLTM5NSAgU3Vibm9ybWFsCitkZG11bDg4NSBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTM5NiAgU3Vibm9ybWFsCitkZG11bDg4NiBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQyICAgICAgLT4gIDEuNEUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsODg3IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuM0UtNDIgICAgICAtPiAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4ODggbXVsdGlwbHkgIDEuM0UtMzU1ICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDg4OSBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQzICAgICAgLT4gICAgMkUtMzk4ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsODkwIG11bHRpcGx5ICAxLjNFLTM1NiAgIDEuM0UtNDMgICAgICAtPiAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK2RkbXVsODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAtPiAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODkyIG11bHRpcGx5ICAxLjIzNDU2RS0zOSAgMS4yMzRFLTM1NSAtPiAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODkzIG11bHRpcGx5ICAxLjIzNDVFLTQwICAgMS4yMzRFLTM1NSAtPiAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODk0IG11bHRpcGx5ICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAtPiAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODk1IG11bHRpcGx5ICAxLjIzNDVFLTQxICAgMS4yMzRFLTM1NSAtPiAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODk2IG11bHRpcGx5ICAxLjIzNDU2RS00MSAgMS4yMzRFLTM1NSAtPiAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2CitkZG11bDkwMCBtdWx0aXBseSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwMSBtdWx0aXBseSAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgLT4gOS4wMDAwMDAwMDYwMDAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwMiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDMgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTA0IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5MEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwNSBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gVGhlIG5leHQgcm91bmRzIHRvIE5taW4gKGIqKmVtaW4pOyB0aGlzIGlzIHRoZSBkaXN0aW5ndWlzaGluZyBjYXNlCistLSBmb3IgZGV0ZWN0aW5nIHRpbmluZXNzIChiZWZvcmUgb3IgYWZ0ZXIgcm91bmRpbmcpIC0tIGlmIGFmdGVyCistLSByb3VuZGluZyB0aGVuIHRoZSByZXN1bHQgd291bGQgYmUgdGhlIHNhbWUsIGJ1dCB0aGUgVW5kZXJmbG93IGZsYWcKKy0tIHdvdWxkIG5vdCBiZSBzZXQKK2RkbXVsOTA2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCistLSBwcm92ZSB0aG9zZSBvcGVyYW5kcyB3ZXJlIGV4YWN0CitkZG11bDkwNyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4MworZGRtdWw5MDggbXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkKKworLS0gcmVkdWNpbmcgdGluaWVzdAorZGRtdWw5MTAgbXVsdGlwbHkgMWUtMzk4IDAuOTkgLT4gMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDkxMSBtdWx0aXBseSAxZS0zOTggMC43NSAtPiAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsOTEyIG11bHRpcGx5IDFlLTM5OCAwLjUgIC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitkZG11bDkxMyBtdWx0aXBseSAxZS0zOTggMC4yNSAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRtdWw5MTQgbXVsdGlwbHkgMWUtMzk4IDAuMDEgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gaHVnZXN0CitkZG11bDkyMCBtdWx0aXBseSAgOTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gcG93ZXItb2YtdGVuIGVkZ2UgY2FzZXMKK2RkbXVsMTAwMSBtdWx0aXBseSAgMSAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAKK2RkbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwCitkZG11bDEwMDMgbXVsdGlwbHkgIDEgICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAKK2RkbXVsMTAwNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwMDYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTAwNyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwMDkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTAxMCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwMTIgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTAxMyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwMTUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTAyMSBtdWx0aXBseSAgMTAgICAgIDEgICAgICAgICAgICAgICAgLT4gMTAKK2RkbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwCitkZG11bDEwMjMgbXVsdGlwbHkgIDEwICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAKK2RkbXVsMTAyNCBtdWx0aXBseSAgMTAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwMjYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTAyNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwMjkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTAzMCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwMzIgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTAzMyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwMzUgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA0MSBtdWx0aXBseSAgMTAwICAgIDAuMSAgICAgICAgICAgICAgLT4gMTAuMAorZGRtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDAKK2RkbXVsMTA0MyBtdWx0aXBseSAgMTAwICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDQ0IG11bHRpcGx5ICAxMDAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTA0NiBtdWx0aXBseSAgMTAwICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDQ3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTA0OSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDUwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTA1MiBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDUzIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA1NSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDYxIG11bHRpcGx5ICAxMDAwICAgMC4wMSAgICAgICAgICAgICAtPiAxMC4wMAorZGRtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMAorZGRtdWwxMDYzIG11bHRpcGx5ICAxMDAwICAgMSAgICAgICAgICAgICAgICAtPiAxMDAwCitkZG11bDEwNjQgbXVsdGlwbHkgIDEwMDAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDY2IG11bHRpcGx5ICAxMDAwICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwNjcgbXVsdGlwbHkgIDEwMDAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDY5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwNzAgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDcyIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwNzMgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDc1IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZG11bDEwODEgbXVsdGlwbHkgIDEwMDAwICAwLjAwMSAgICAgICAgICAgIC0+IDEwLjAwMAorZGRtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDAKK2RkbXVsMTA4MyBtdWx0aXBseSAgMTAwMDAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwMC4wCitkZG11bDEwODQgbXVsdGlwbHkgIDEwMDAwICAxICAgICAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDg2IG11bHRpcGx5ICAxMDAwMCAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwODcgbXVsdGlwbHkgIDEwMDAwICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDg5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwOTAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDkyIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwOTMgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDk1IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RkbXVsMTA5NyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAorZGRtdWwxMDk4IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCisKKworLS0gTnVsbCB0ZXN0cworZGRtdWw5OTkwIG11bHRpcGx5IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0TWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0CmluZGV4IGY4YTNjMGUuLjM5ZjU4YzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0CkBAIC0xLDEyNiArMSwxMjYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZG5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk0DQotZGRuZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NQ0KLWRkbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3DQotZGRuZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDQNCi1kZG5leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDcNCi1kZG5leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTANCi1kZG5leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTENCi0NCi1kZG5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2DQotZGRuZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgNCi1kZG5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwDQotZGRuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMg0KLWRkbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMw0KLWRkbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQ0KLWRkbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNg0KLWRkbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOA0KLWRkbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQ0KLWRkbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQ0KLWRkbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMg0KLQ0KLS0tIHVsdHJhLXRpbnkgaW5wdXRzDQotZGRuZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgIC0+ICAgMEUtMzk4DQotZGRuZXh0bTA2NSBuZXh0bWludXMgLTFFLTM5OCAgICAgICAgIC0+ICAtMkUtMzk4DQotDQotLS0gWmVyb3MNCi1kZG5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTM5OA0KLWRkbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzk4DQotDQotLS0gc3BlY2lhbHMNCi1kZG5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRkbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4NCi1kZG5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1kZG5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFODQotZGRuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3DQotZGRuZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kZG5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQNCi1kZG5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk3RSszODQNCi1kZG5leHRtMTcyIG5leHRtaW51cyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NA0KLWRkbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0DQotZGRuZXh0bTE3NCBuZXh0bWludXMgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtPiA4RS0zOTgNCi1kZG5leHRtMTc1IG5leHRtaW51cyAgOS45RS0zOTcgICAgICAgICAgICAgICAgIC0+IDkuOEUtMzk3DQotZGRuZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTlFLTM4NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk4RS0zODcNCi1kZG5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NA0KLWRkbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5N0UtMzg0DQotZGRuZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk2RS0zODQNCi1kZG5leHRtMTgwIG5leHRtaW51cyAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgNCi1kZG5leHRtMTgxIG5leHRtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDBFLTM5OA0KLWRkbmV4dG0xODIgbmV4dG1pbnVzICAyRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQotDQotZGRuZXh0bTE4MyBuZXh0bWludXMgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4DQotZGRuZXh0bTE4NCBuZXh0bWludXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMkUtMzk4DQotZGRuZXh0bTE4NSBuZXh0bWludXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtM0UtMzk4DQotZGRuZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAtMS4xRS0zOTcNCi1kZG5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS0zOTYNCi1kZG5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+IC0xLjAwMDAxRS0zOTMNCi1kZG5leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KLWRkbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE5leHRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZG5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk0CitkZG5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk1CitkZG5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4CitkZG5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQorCitkZG5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4CitkZG5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKK2RkbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMgorCistLSB1bHRyYS10aW55IGlucHV0cworZGRuZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgIC0+ICAgMEUtMzk4CitkZG5leHRtMDY1IG5leHRtaW51cyAtMUUtMzk4ICAgICAgICAgLT4gIC0yRS0zOTgKKworLS0gWmVyb3MKK2RkbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzk4CitkZG5leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTM5OAorCistLSBzcGVjaWFscworZGRuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQorZGRuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKK2RkbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTgorZGRuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RkbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZGRuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0CitkZG5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk3RSszODQKK2RkbmV4dG0xNzIgbmV4dG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NAorZGRuZXh0bTE3NCBuZXh0bWludXMgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtPiA4RS0zOTgKK2RkbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLT4gOS44RS0zOTcKK2RkbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5RS0zODcgICAgICAgLT4gOS45OTk5OTk5OTk5OEUtMzg3CitkZG5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NAorZGRuZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQKK2RkbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0CitkZG5leHRtMTgwIG5leHRtaW51cyAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xODEgbmV4dG1pbnVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4CitkZG5leHRtMTgyIG5leHRtaW51cyAgMkUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAorCitkZG5leHRtMTgzIG5leHRtaW51cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTJFLTM5OAorZGRuZXh0bTE4NSBuZXh0bWludXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtM0UtMzk4CitkZG5leHRtMTg2IG5leHRtaW51cyAgLTEwRS0zOTggICAgICAgICAgICAgICAgIC0+IC0xLjFFLTM5NworZGRuZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAtMS4wMUUtMzk2CitkZG5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+IC0xLjAwMDAxRS0zOTMKK2RkbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLUluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK2RkbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFBsdXMuZGVjVGVzdAppbmRleCA0YTc0OWExLi5kNDFkZmJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QKQEAgLTEsMTI0ICsxLDEyNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGROZXh0UGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRkbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwDQotZGRuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyDQotZGRuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1DQotZGRuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4DQotZGRuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExDQotZGRuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTINCi0NCi1kZG5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTQNCi1kZG5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUNCi1kZG5leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcNCi1kZG5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgNCi1kZG5leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyDQotZGRuZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCi1kZG5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1DQotZGRuZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCi1kZG5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4DQotZGRuZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCi1kZG5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDExDQotDQotLS0gWmVyb3MNCi1kZG5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTM5OA0KLWRkbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS0zOTgNCi1kZG5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtMzk4DQotDQotLS0gc3BlY2lhbHMNCi1kZG5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRkbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4NCi1kZG5leHRwMTUzIG5leHRwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3DQotZGRuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHRwMTU2IG5leHRwbHVzICAtTmFOICAgIC0+IC1OYU4NCi1kZG5leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3DQotZGRuZXh0cDE1OSBuZXh0cGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KLWRkbmV4dHAxNzAgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OThFKzM4NA0KLWRkbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NA0KLWRkbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0DQotZGRuZXh0cDE3MyBuZXh0cGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQNCi1kZG5leHRwMTc0IG5leHRwbHVzICAtOUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLThFLTM5OA0KLWRkbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTM5NyAgICAgICAgICAgICAgICAtPiAtOS44RS0zOTcNCi1kZG5leHRwMTc2IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgLT4gLTkuOTk5OTk5OTk5OThFLTM4Nw0KLWRkbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0DQotZGRuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk3RS0zODQNCi1kZG5leHRwMTc5IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NA0KLWRkbmV4dHAxODAgbmV4dHBsdXMgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0wRS0zOTgNCi1kZG5leHRwMTgyIG5leHRwbHVzICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KLQ0KLWRkbmV4dHAxODMgbmV4dHBsdXMgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMUUtMzk4DQotZGRuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAyRS0zOTgNCi1kZG5leHRwMTg1IG5leHRwbHVzICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDNFLTM5OA0KLWRkbmV4dHAxODYgbmV4dHBsdXMgICAxMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAgMS4xRS0zOTcNCi1kZG5leHRwMTg3IG5leHRwbHVzICAgMTAwRS0zOTggICAgICAgICAgICAgICAgLT4gIDEuMDFFLTM5Ng0KLWRkbmV4dHAxODggbmV4dHBsdXMgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICAtPiAgMS4wMDAwMUUtMzkzDQotZGRuZXh0cDE4OSBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0cDE5MSBuZXh0cGx1cyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0cDE5MiBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZG5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGROZXh0UGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCitkZG5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMgorCitkZG5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQorZGRuZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OAorZGRuZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKK2RkbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKK2RkbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKK2RkbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKKworLS0gWmVyb3MKK2RkbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTgKKworLS0gc3BlY2lhbHMKK2RkbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5CitkZG5leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NworZGRuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorZGRuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3CitkZG5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZGRuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0CitkZG5leHRwMTcxIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQKK2RkbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NAorZGRuZXh0cDE3NCBuZXh0cGx1cyAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC04RS0zOTgKK2RkbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTM5NyAgICAgICAgICAgICAgICAtPiAtOS44RS0zOTcKK2RkbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3CitkZG5leHRwMTc3IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NAorZGRuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk3RS0zODQKK2RkbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0CitkZG5leHRwMTgwIG5leHRwbHVzICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0wRS0zOTgKK2RkbmV4dHAxODIgbmV4dHBsdXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CisKK2RkbmV4dHAxODMgbmV4dHBsdXMgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTg0IG5leHRwbHVzICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDJFLTM5OAorZGRuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAzRS0zOTgKK2RkbmV4dHAxODYgbmV4dHBsdXMgICAxMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAgMS4xRS0zOTcKK2RkbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAgMS4wMUUtMzk2CitkZG5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgLT4gIDEuMDAwMDFFLTM5MworZGRuZXh0cDE4OSBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDBFLTM4MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHAxOTEgbmV4dHBsdXMgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0cDE5MiBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIEluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK2RkbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdAppbmRleCA3NTM4NmFkLi5mOWU0NzRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0VG93YXJkLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0CkBAIC0xLDM3NCArMSwzNzQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MNCi1kZG5leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMA0KLWRkbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwDQotZGRuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTM5OCAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5OCAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwDQotZGRuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDAxMyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5IC0xMCAgLT4gLTEwLjAwMDAwMDAwMDAwMDAwDQotZGRuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDAxNiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5DQotDQotLS0tLS0tLSBsaHM9cmhzDQotLS0gZmluaXRlcw0KLWRkbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcNCi1kZG5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03DQotZGRuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUNCi1kZG5leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQ0KLWRkbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTANCi1kZG5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwDQotZGRuZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDANCi1kZG5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZGRuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMA0KLWRkbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTANCi1kZG5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0DQotZGRuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNA0KLWRkbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQ0KLWRkbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwMDAwMDAwMCAgLTAuMDAgICAgICAgICAgIC0+IC0wRS0xMQ0KLWRkbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQ0KLWRkbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OA0KLWRkbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgNCi1kZG5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0DQotZGRuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDEzMiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgIC0+ICAgMUUtMzgzDQotZGRuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRuZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgIC0+ICAgMUUtMzk4DQotDQotZGRuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtMzk4ICAgICAgICAgIC0xRS0zOTggICAgICAgICAgIC0+ICAtMUUtMzk4DQotZGRuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRuZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgIC0xRS0zODMgICAgICAgICAgIC0+ICAtMUUtMzgzDQotZGRuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotDQotLS0tLS0tLSBsaHM8cmhzDQotZGRuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Nw0KLWRkbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwDQotZGRuZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzDQotZGRuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2DQotZGRuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5DQotZGRuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMTENCi1kZG5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEyDQotDQotZGRuZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTQNCi1kZG5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQ0KLWRkbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2DQotZGRuZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcNCi1kZG5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQotZGRuZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwDQotZGRuZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCi1kZG5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzDQotZGRuZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCi1kZG5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2DQotZGRuZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCi1kZG5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5DQotZGRuZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCi0NCi0tLSBaZXJvcw0KLWRkbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwMiBuZXh0dG93YXJkICAwRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwNSBuZXh0dG93YXJkIC0wICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDMwOCBuZXh0dG93YXJkIC0wRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzcGVjaWFscw0KLWRkbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkNCi1kZG5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0MzUyIG5leHR0b3dhcmQgICBOYU4gICAgSW5maW5pdHkgLT4gIE5hTg0KLWRkbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3DQotZGRuZXh0dDM1NSBuZXh0dG93YXJkICBzTmFOODggIEluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFODQotZGRuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQzNTggbmV4dHRvd2FyZCAgLU5hTjc3ICBJbmZpbml0eSAtPiAtTmFONzcNCi1kZG5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kZG5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk4RSszODQNCi1kZG5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQNCi1kZG5leHR0MzcyIG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc1IG5leHR0b3dhcmQgIC05LjlFLTM5NyAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOEUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OThFLTM4NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk4RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0MzgxIG5leHR0b3dhcmQgIC0xRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZGRuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZGRuZXh0dDM4MyBuZXh0dG93YXJkICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4NCBuZXh0dG93YXJkICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4NiBuZXh0dG93YXJkICAgMTBFLTM5OCAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjFFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4NyBuZXh0dG93YXJkICAgMTAwRS0zOTggICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS0zOTYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDM4OSBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0dDM5MCBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0dDM5MiBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTdFKzM4NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0DQotZGRuZXh0dDM5MyBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tLS0tLS0gbGhzPnJocw0KLWRkbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQNCi1kZG5leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk1DQotZGRuZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Ng0KLWRkbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcNCi1kZG5leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4DQotZGRuZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMA0KLWRkbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMg0KLWRkbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMw0KLWRkbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNA0KLWRkbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQ0KLWRkbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNg0KLWRkbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNw0KLWRkbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOA0KLWRkbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQ0KLWRkbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMA0KLWRkbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQ0KLQ0KLWRkbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYNCi1kZG5leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3DQotZGRuZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OA0KLWRkbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDANCi1kZG5leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCi1kZG5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KLWRkbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyDQotZGRuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzDQotZGRuZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQotZGRuZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1DQotZGRuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2DQotZGRuZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQotZGRuZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4DQotZGRuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5DQotZGRuZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQotZGRuZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExDQotZGRuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyDQotDQotLS0gWmVyb3MNCi1kZG5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNwZWNpYWxzDQotZGRuZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkNCi1kZG5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFODQotZGRuZXh0dDU1MyBuZXh0dG93YXJkICBzTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3DQotZGRuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDU1NiBuZXh0dG93YXJkICAtTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTg0KLWRkbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43Nw0KLWRkbmV4dHQ1NTkgbmV4dHRvd2FyZCAtc05hTjg4ICAgLUluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQotZGRuZXh0dDY3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0DQotZGRuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0DQotZGRuZXh0dDY3MiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NjczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOEUtMzk4ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTM5NyAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njc2IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTlFLTM4NyAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OThFLTM4NyAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njc5IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTZFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4MSBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkbmV4dHQ2ODIgbmV4dHRvd2FyZCAgMkUtMzk4ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMUUtMzk4ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njg0IG5leHR0b3dhcmQgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0yRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2ODUgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0Njg3IG5leHR0b3dhcmQgIC0xMDBFLTM5OCAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAxRS0zOTYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ2ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KLWRkbmV4dHQ2OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCi1kZG5leHR0NjkxIG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQotZGRuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ2OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC1JbmZpbml0eSAgLT4gLUluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLSBTcGVjaWFscw0KLWRkbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZGRuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDENCi1kZG5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRkbmV4dHQ3ODkgbmV4dHRvd2FyZCAtMSAgICAtSW5mICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kZG5leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi0NCi1kZG5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kZG5leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5OTk5OTk5OQ0KLWRkbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZG5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkNCi1kZG5leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZGRuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRkbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxDQotZGRuZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMDAwMDAwMDENCi1kZG5leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRuZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWRkbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kZG5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQotZGRuZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWRkbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kZG5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQotZGRuZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWRkbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kZG5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KLWRkbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQotZGRuZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kZG5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRuZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE5leHRUb3dhcmQuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK2RkbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCitkZG5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAorZGRuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTggICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMTEgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OSAgMTAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMAorZGRuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQwMTQgbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTcgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OCAtMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CisKKy0tLS0tLS0gbGhzPXJocworLS0gZmluaXRlcworZGRuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNworZGRuZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNworZGRuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKK2RkbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1CitkZG5leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwCitkZG5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCitkZG5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAorZGRuZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKK2RkbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKK2RkbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQKK2RkbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKK2RkbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQorZGRuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExCitkZG5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKK2RkbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OAorZGRuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAorZGRuZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAorZGRuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMKK2RkbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRuZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgIC0+ICAgMUUtMzk4CisKK2RkbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAtMUUtMzk4ICAgICAgICAgICAtPiAgLTFFLTM5OAorZGRuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMKK2RkbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLS0tLS0tIGxoczxyaHMKK2RkbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMgorCitkZG5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkZG5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkZG5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5CitkZG5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCitkZG5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3CitkZG5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgorZGRuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NworZGRuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZGRuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0CitkZG5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQKK2RkbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk4RS0zODcgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk2RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZG5leHR0MzgzIG5leHR0b3dhcmQgICAwRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMkUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtMzk4ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtMzk4ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMUUtMzk2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIGxocz5yaHMKK2RkbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCisKK2RkbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyCisKKy0tIFplcm9zCitkZG5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkZG5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5CitkZG5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCitkZG5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NworZGRuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCitkZG5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NworZGRuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0dDY3MiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTM5NyAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OEUtMzg3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4MSBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRuZXh0dDY4MiBuZXh0dG93YXJkICAyRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKKworZGRuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0zRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTM5OCAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLSBTcGVjaWFscworZGRuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAxCitkZG5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworZGRuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5CitkZG5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMQorZGRuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCitkZG5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCitkZG5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZG5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZG5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZG5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZG5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZG5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZG5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZG5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZG5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZG5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZG5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZG5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZGRuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE9yLmRlY1Rlc3QKaW5kZXggZDM2NTgwYi4uZjNhNzAyYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0CkBAIC0xLDI5MiArMSwyOTIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkT3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBPUiBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZGRvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KLWRkb3IwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi1kZG9yMDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQotZGRvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KLWRkb3IwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWRkb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotZGRvcjAwNyBvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGRvcjAwOCBvciAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGRvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGRvcjAxMCBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kZG9yMDExIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCi1kZG9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCi1kZG9yMDEzIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkb3IwMjAgb3IgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTENCi1kZG9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExDQotZGRvcjAyMiBvciAgIDExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQ0KLWRkb3IwMjMgb3IgICAgMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTENCi1kZG9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExDQotZGRvcjAyNSBvciAgICAgIDExMTExMTExMTExICAgICAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQ0KLWRkb3IwMjYgb3IgICAgICAgMTExMTExMTExMSAgICAgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTENCi1kZG9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExDQotZGRvcjAyOCBvciAgICAgICAgIDExMTExMTExICAgICAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQ0KLWRkb3IwMjkgb3IgICAgICAgICAgMTExMTExMSAgICAgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTENCi1kZG9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExDQotZGRvcjAzMSBvciAgICAgICAgICAgIDExMTExICAgICAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQ0KLWRkb3IwMzIgb3IgICAgICAgICAgICAgMTExMSAgICAgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTENCi1kZG9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExDQotZGRvcjAzNCBvciAgICAgICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQ0KLWRkb3IwMzUgb3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDENCi1kZG9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZGRvcjA0MiBvciAgMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMTExMTExMTExMDAwMDAwMA0KLWRkb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDANCi1kZG9yMDQ0IG9yICAgIDExMTExMTAwMDAwMDAgICAgIDEwMDAwMDEwMDAwMDAwMDAgIC0+ICAxMDAxMTExMTEwMDAwMDAwDQotZGRvcjA0NSBvciAgICAgMTExMTEwMDAwMDAwICAgICAxMDAwMDEwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMA0KLWRkb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDANCi1kZG9yMDQ3IG9yICAgICAgIDExMTAwMDAwMDAgICAgIDEwMDEwMDAwMDAwMDAwMDAgIC0+ICAxMDAxMDAxMTEwMDAwMDAwDQotZGRvcjA0OCBvciAgICAgICAgMTEwMDAwMDAwICAgICAxMDEwMDAwMDAwMDAwMDAwICAtPiAgMTAxMDAwMDExMDAwMDAwMA0KLWRkb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDANCi0NCi1kZG9yMDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZGRvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZGRvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLWRkb3IwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZGRvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi0NCi1kZG9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExDQotZGRvcjEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWRkb3IxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExDQotZGRvcjEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KLWRkb3IxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTENCi1kZG9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExDQotZGRvcjEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQ0KLWRkb3IxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTENCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kZG9yMjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRkb3IyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kZG9yMjUwIG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTEgb3IgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1MiBvciAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjUzIG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTQgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1NSBvciAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjU2IG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNTcgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI1OCBvciAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjU5IG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNjAgb3IgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI2MSBvciAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjYyIG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNjMgb3IgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI2NCBvciAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjY1IG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kZG9yMjcwIG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNzEgb3IgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI3MiBvciAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjczIG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNzQgb3IgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI3NSBvciAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjc2IG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyNzcgb3IgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kZG9yMjgwIG9yICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODEgb3IgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4MiBvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjgzIG9yICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODQgb3IgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI4NSBvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjg2IG9yICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODcgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kZG9yMjg4IG9yICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyODkgb3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI5MCBvciAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjkxIG9yICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTIgb3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjI5MyBvciAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjk0IG9yICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IyOTUgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kZG9yMjk2IG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjk3IG9yIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjk4IG9yICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yMjk5IG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDExMDAwMTAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRkb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzIgb3IgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS0xOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzQgb3IgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzUgb3IgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzcgb3IgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDEgb3IgIDkuOTk5OTk5OTlFKzI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDIgb3IgIDFFLTI5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDMgb3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDQgb3IgIDFFLTEwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDUgb3IgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDYgb3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDcgb3IgIC0xRS0yOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRkb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3IzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kZG9yNzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yNzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZG9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZG9yODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZG9yODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRvcjg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZG9yODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZG9yODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkT3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBPUiBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZG9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkZG9yMDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitkZG9yMDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkZG9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCitkZG9yMDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZGRvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rkb3IwMDcgb3IgMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRvcjAwOCBvciAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZG9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMTAgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkZG9yMDExIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorZGRvcjAxMyBvciAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYKK2Rkb3IwMjAgb3IgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2Rkb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKK2Rkb3IwMjIgb3IgICAxMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKK2Rkb3IwMjMgb3IgICAgMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2Rkb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKK2Rkb3IwMjUgb3IgICAgICAxMTExMTExMTExMSAgICAgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKK2Rkb3IwMjYgb3IgICAgICAgMTExMTExMTExMSAgICAgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2Rkb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKK2Rkb3IwMjggb3IgICAgICAgICAxMTExMTExMSAgICAgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKK2Rkb3IwMjkgb3IgICAgICAgICAgMTExMTExMSAgICAgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2Rkb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKK2Rkb3IwMzEgb3IgICAgICAgICAgICAxMTExMSAgICAgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKK2Rkb3IwMzIgb3IgICAgICAgICAgICAgMTExMSAgICAgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2Rkb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKK2Rkb3IwMzQgb3IgICAgICAgICAgICAgICAxMSAgICAgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKK2Rkb3IwMzUgb3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2Rkb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKKworZGRvcjA0MiBvciAgMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMTExMTExMTExMDAwMDAwMAorZGRvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMAorZGRvcjA0NCBvciAgICAxMTExMTEwMDAwMDAwICAgICAxMDAwMDAxMDAwMDAwMDAwICAtPiAgMTAwMTExMTExMDAwMDAwMAorZGRvcjA0NSBvciAgICAgMTExMTEwMDAwMDAwICAgICAxMDAwMDEwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZGRvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZGRvcjA0NyBvciAgICAgICAxMTEwMDAwMDAwICAgICAxMDAxMDAwMDAwMDAwMDAwICAtPiAgMTAwMTAwMTExMDAwMDAwMAorZGRvcjA0OCBvciAgICAgICAgMTEwMDAwMDAwICAgICAxMDEwMDAwMDAwMDAwMDAwICAtPiAgMTAxMDAwMDExMDAwMDAwMAorZGRvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMAorCitkZG9yMDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDkyIG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkZG9yMDk1IG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkZG9yMDk4IG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgMTExMTExMTExCisKK2Rkb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rkb3IxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTEKK2Rkb3IxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkZG9yMjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjIyIG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI1IG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI4IG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjMxIG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkZG9yMjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZGRvcjI1MCBvciAgMjAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTEgb3IgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjUyIG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1MyBvciAgOTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTQgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU1IG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NiBvciAgODAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTcgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU4IG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1OSBvciAgMTAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjAgb3IgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjYxIG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MiBvciAgMDAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjMgb3IgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjY0IG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2NSBvciAgMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2Rkb3IyNzAgb3IgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjcxIG9yICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3MiBvciAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzMgb3IgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjc0IG9yICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3NSBvciAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzYgb3IgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjc3IG9yICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2Rkb3IyODAgb3IgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjgxIG9yICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4MiBvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODMgb3IgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg0IG9yICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4NSBvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODYgb3IgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg3IG9yICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2Rkb3IyODggb3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg5IG9yICAwMDAxMDAwMDcwMDAwMDAxIDEwMDAwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5MCBvciAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTEgb3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkyIG9yICAxMDAwMDAxMDAwMDAxMDAwIDAwMDAwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5MyBvciAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTQgb3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk1IG9yICAxMDAwMDAwMDAxMDAwMDAwIDAwMDAwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2Rkb3IyOTYgb3IgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5NyBvciAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk4IG9yICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTkgb3IgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAwMTEwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGRvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzMyIG9yICAzICAgMUUtMTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS0xOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzNCBvciAgNSAgIDFFLTEwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM1IG9yICA2ICAgLTFFLTEwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzNyBvciAgOCAgIC0xRS0xOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDEgb3IgIDkuOTk5OTk5OTlFKzI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0MiBvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQzIG9yICAxLjAwMDAwMDAwRS0yOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDQgb3IgIDFFLTEwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NSBvciAgLTFFLTEwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ2IG9yICAtMS4wMDAwMDAwMEUtMjk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDcgb3IgIC0xRS0yOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGRvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzYyIG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzY1IG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzcyIG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzc1IG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZG9yNzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwMSBvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwNCBvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwNyBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxMCBvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxMyBvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZG9yODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZG9yODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG9yODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QKaW5kZXggNTE5MTIzOS4uMTdhYTA4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRQbHVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIDAreCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRkcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZGRwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1kZHBsczAxMiBwbHVzICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZHBsczAyMSBwbHVzICAgICAgICAgTmFOICAtPiBOYU4NCi1kZHBsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFODQotZGRwbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcGxzMDI0IHBsdXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRwbHMwMzEgcGx1cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCi1kZHBsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMNCi1kZHBsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRwbHMwMzQgcGx1cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcGxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwDQotZGRwbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwDQotZGRwbHMwMzcgcGx1cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcGxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZGRwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNw0KLWRkcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03DQotZGRwbHMxMDMgcGx1cyAgICAgICAgIDc1ICAgLT4gNzUNCi1kZHBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUNCi1kZHBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwDQotZGRwbHMxMDYgcGx1cyAgICAgIC03LjUwICAgLT4gLTcuNTANCi1kZHBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWRkcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZGRwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMA0KLWRkcGxzMTEyIHBsdXMgICAgICAgICAtMCAgIC0+IDANCi1kZHBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0DQotZGRwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWRkcGxzMTE1IHBsdXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRkcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRkcGxzMTE4IHBsdXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZGRwbHMxMjEgcGx1cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCi1kZHBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODINCi1kZHBsczEyMyBwbHVzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KLWRkcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRwbHMxMzEgcGx1cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHBsczEzMiBwbHVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQotZGRwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZHBsczEzNCBwbHVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KLQ0KLWRkcGxzMTM1IHBsdXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcGxzMTM2IHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkcGxzMTM3IHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQotZGRwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFBsdXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkcGxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRwbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRwbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRwbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZHBsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMworZGRwbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZHBsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRwbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZHBsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uCitkZHBsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RkcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcKK2RkcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03CitkZHBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQorZGRwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1CitkZHBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwCitkZHBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MAorZGRwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RkcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZGRwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMAorZGRwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMAorZGRwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNAorZGRwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZHBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZHBsczEyMSBwbHVzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZHBsczEyMyBwbHVzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRwbHMxMjQgcGx1cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRwbHMxMzIgcGx1cyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkcGxzMTM0IHBsdXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCisKK2RkcGxzMTM1IHBsdXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbAorZGRwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHBsczEzNyBwbHVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRRdWFudGl6ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdAppbmRleCA5MTc3NjIwLi4wZDE5YzlkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRRdWFudGl6ZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QKQEAgLTEsODMzICsxLDgzMyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRRdWFudGl6ZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQ0KLS0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4NCi0tLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZA0KLS0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZGRxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwDQotZGRxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxDQotZGRxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjENCi1kZHF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTANCi1kZHF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwDQotZGRxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkNCi1kZHF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTANCi1kZHF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwDQotLS0gbmVnYXRpdmVzDQotZGRxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMA0KLWRkcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTENCi1kZHF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjENCi1kZHF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwDQotZGRxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDANCi1kZHF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCi1kZHF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQotZGRxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCi1kZHF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUNCi1kZHF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwDQotZGRxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDANCi1kZHF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCi1kZHF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQotZGRxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCi0NCi0tLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24NCi1kZHF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwDQotZGRxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3DQotZGRxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1DQotZGRxdWEwNjkgcXVhbnRpemUgKzEyMzQ1Njc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEwNzAgcXVhbnRpemUgLTk4NzY1NDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMA0KLWRkcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3DQotZGRxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGdlbmVyYWwgdGVzdHMgLi4NCi1kZHF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwDQotZGRxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTENCi1kZHF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wDQotZGRxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDANCi1kZHF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwDQotZGRxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wDQotZGRxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMA0KLWRkcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDANCi1kZHF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxDQotZGRxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMg0KLWRkcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDENCi1kZHF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjANCi1kZHF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwDQotDQotZGRxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MA0KLWRkcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNA0KLWRkcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwDQotZGRxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1DQotZGRxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjANCi1kZHF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYNCi1kZHF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMA0KLWRkcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwDQotZGRxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwDQotZGRxdWExNDMgcXVhbnRpemUgICAxRSsxNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhMTQ0IHF1YW50aXplICAgMUUtMTcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxDQotZGRxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTANCi1kZHF1YTE0OCBxdWFudGl6ZSAgIDBFLTE3ICAxZS0yICAtPiAgMC4wMA0KLQ0KLWRkcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDANCi1kZHF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDANCi1kZHF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkDQotZGRxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkDQotZGRxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZHF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cw0KLWRkcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMA0KLWRkcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQ0KLWRkcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xDQotZGRxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwDQotZGRxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMA0KLWRkcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45DQotZGRxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwDQotZGRxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDANCi0tLSBuZWdhdGl2ZXMNCi1kZHF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjANCi1kZHF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xDQotZGRxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xDQotZGRxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDANCi1kZHF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMA0KLWRkcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQ0KLWRkcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTANCi0NCi0tLSArdmUgZXhwb25lbnRzIC4uDQotZGRxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xDQotZGRxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMA0KLWRkcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxDQotZGRxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzINCi1kZHF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQ0KLWRkcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQNCi1kZHF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZA0KLWRkcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLWRkcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KLS0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zDQotZGRxdWEyNTIgcXVhbnRpemUgICAxRSsxNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEyNTMgcXVhbnRpemUgICAxRS0xNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjU1IHF1YW50aXplICAgMEUtMTcgMWUrMSAgLT4gIDBFKzENCi1kZHF1YTI1NiBxdWFudGl6ZSAgLTBFLTE3IDFlKzEgIC0+IC0wRSsxDQotZGRxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQ0KLWRkcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzENCi1kZHF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxDQotDQotZGRxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMg0KLWRkcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMw0KLWRkcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQNCi1kZHF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQ0KLWRkcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNg0KLWRkcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcNCi1kZHF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOA0KLWRkcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQ0KLWRkcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwDQotZGRxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzINCi0NCi1kZHF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMNCi1kZHF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQNCi1kZHF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1DQotZGRxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYNCi1kZHF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcNCi1kZHF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4DQotZGRxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkNCi1kZHF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwDQotZGRxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMNCi0NCi0tLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQ0KLWRkcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODANCi1kZHF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgNCi1kZHF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwDQotZGRxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4DQotZGRxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwDQotZGRxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODANCi1kZHF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4DQotZGRxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMA0KLWRkcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwDQotZGRxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OA0KLWRkcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMA0KLWRkcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDANCi1kZHF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODANCi1kZHF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OA0KLWRkcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDANCi1kZHF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwDQotZGRxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwDQotZGRxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgNCi1kZHF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDANCi1kZHF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDANCi1kZHF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMA0KLWRkcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODANCi1kZHF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgNCi1kZHF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDANCi1kZHF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDANCi1kZHF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMA0KLWRkcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODANCi1kZHF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgNCi1kZHF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgaW5kaXZpZHVhbHMNCi1kZHF1YTM4MCBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM4MSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NDUuMDYNCi1kZHF1YTM4MiBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWEzODMgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhMzg0IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM4NSBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQ1LjA2DQotZGRxdWEzODYgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhMzg3IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1yb3VuZGluZzogZG93bg0KLWRkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSA/IHNob3VsZCB0aGF0IG9uZSBpbnN0ZWFkIGhhdmUgYmVlbjoNCi0tLSBkZHF1YTM4OSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm91bmRpbmc6IGhhbGZfdXANCi0NCi0tLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucw0KLWRkcXVhMzkxIHF1YW50aXplICAxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTM5MiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEzOTMgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQuNTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyMzQuNTY3DQotZGRxdWEzOTQgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1LjY3ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhMzk1IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTYuNyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTM5NiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzDQotZGRxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDANCi1kZHF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwDQotZGRxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5DQotZGRxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMA0KLWRkcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTANCi1kZHF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkNCi1kZHF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTANCi1kZHF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5DQotZGRxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQ0KLWRkcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDANCi1kZHF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDENCi1kZHF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxDQotZGRxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQ0KLQ0KLWRkcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkDQotZGRxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCi1kZHF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLWRkcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQNCi1kZHF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZA0KLWRkcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotZGRxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCi1kZHF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gWmVyb3MNCi1kZHF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQ0KLWRkcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwDQotZGRxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMA0KLWRkcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjANCi1kZHF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMA0KLWRkcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxDQotZGRxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMA0KLWRkcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwDQotZGRxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzENCi1kZHF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQ0KLWRkcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wDQotZGRxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMA0KLWRkcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjANCi1kZHF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMA0KLWRkcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxDQotZGRxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMA0KLWRkcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wDQotZGRxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzENCi0NCi0tLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMNCi1kZHF1YTUyMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTUyMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTUyMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTUyMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbA0KLWRkcXVhNTI2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1MjcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTUyOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTI5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRxdWE1MzIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTUzMyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNTM0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE1MzcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQ0KLS0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MNCi1kZHF1YTUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1MzkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIFttb3JlIGJlbG93XQ0KLQ0KLS0tIFNwZWNpYWxzDQotZGRxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRkcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRkcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZGRxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkNCi1kZHF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRkcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRkcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4NCi1kZHF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFODQotZGRxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTg0KLWRkcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4NCi1kZHF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFODQotZGRxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTg0KLWRkcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4NCi1kZHF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTg0KLWRkcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4NCi1kZHF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTg0KLWRkcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFODQotZGRxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTg0KLWRkcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4NCi1kZHF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFODQotDQotZGRxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZGRxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44DQotZGRxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KLWRkcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRkcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRkcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzENCi1kZHF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi0NCi1kZHF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCi1kZHF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgNCi1kZHF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQotZGRxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQotZGRxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZGRxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQ0KLWRkcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRkcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLWRkcXVhNzEwIHF1YW50aXplICAxLjAwRS0zODMgICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBSb3VuZGVkDQotZGRxdWE3MTEgcXVhbnRpemUgIDAuMUUtMzgzICAgIDJlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwNCi1kZHF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtMzgzICAgM2UtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS0zODMgIDRlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZA0KLWRkcXVhNzE0IHF1YW50aXplICAwLjAxRS0zODMgICA1ZS0zODUgIC0+ICAgMUUtMzg1ICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCi1kZHF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTM4MyAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS0zODMgMTBlLTM4NCAgLT4gICAxRS0zODQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotDQotZGRxdWE3MTcgcXVhbnRpemUgIDAuMDA5RS0zODMgIDFlLTM4NSAgLT4gICAxRS0zODUgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotZGRxdWE3MTggcXVhbnRpemUgIDAuMDAxRS0zODMgIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTcxOSBxdWFudGl6ZSAgMC4wMDA5RS0zODMgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzIwIHF1YW50aXplICAwLjAwMDFFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE3MzAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4MyAgLT4gIC0xRS0zODMgICAgIFJvdW5kZWQNCi1kZHF1YTczMSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0DQotZGRxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdA0KLWRkcXVhNzMzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QNCi1kZHF1YTczNCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCi1kZHF1YTczNSBxdWFudGl6ZSAtMC45OTlFLTM4MyA5MGUtMzgzICAtPiAgLTFFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3MzYgcXVhbnRpemUgLTAuMDk5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTczOCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAtMGUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3MzkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNzQwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIFJvdW5kZWQNCi1kZHF1YTc0MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbA0KLWRkcXVhNzQyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kZHF1YTc0MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRxdWE3NDQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRkcXVhNzQ1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzQ2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRkcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWE3NDggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTc0OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhNzUwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODUgLT4gIC0xLjAwRS0zODMNCi1kZHF1YTc1MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbA0KLWRkcXVhNzUyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsDQotZGRxdWE3NTMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwgUm91bmRlZA0KLWRkcXVhNzU0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODUgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsDQotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCi1kZHF1YTc1NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wMEUtMzgzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTc1NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi1kZHF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi1kZHF1YTc1OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg1IC0+ICAtMEUtMzg1ICAgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhNzU5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWE3NjAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMDAwRS0zODMNCi1kZHF1YTc2MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCi1kZHF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCi1kZHF1YTc2MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCi1kZHF1YTc2NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg2IC0+ICAtMS4wRS0zODUgICBTdWJub3JtYWwNCi1kZHF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45OUUtMzg0ICBTdWJub3JtYWwNCi1kZHF1YTc2NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45RS0zODUgICBTdWJub3JtYWwNCi1kZHF1YTc2NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg2IC0+ICAtOUUtMzg2ICAgICBTdWJub3JtYWwNCi1kZHF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg2IC0+ICAtMUUtMzg2ICAgICBTdWJub3JtYWwNCi1kZHF1YTc2OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg2IC0+ICAtMEUtMzg2ICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBNb3JlIGZyb20gRnVuZyBMZWUNCi1kZHF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gIDguNjY2NjY2NjY2NjY2MDAwRSszODQNCi1kZHF1YTEwMjIgcXVhbnRpemUgLTguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gLTguNjY2NjY2NjY2NjY2MDAwRSszODQNCi1kZHF1YTEwMjcgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRxdWExMDI5IHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS1kZHF1YTEwMzAgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQgSW5leGFjdA0KLS0tZGRxdWExMDMxIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkDQotLS1kZHF1YTEwMzIgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODMgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCi0tLWRkcXVhMTAzMyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MiAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZA0KLS0tZGRxdWExMDM0IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgxICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkDQotLS1kZHF1YTEwMzUgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODAgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCi0NCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KLWRkcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0Ng0KLWRkcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0Nw0KLWRkcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OA0KLWRkcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQ0KLWRkcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0Ng0KLWRkcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0Nw0KLWRkcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OA0KLWRkcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQ0KLWRkcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NA0KLWRkcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQ0KLWRkcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5Ng0KLWRkcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5Nw0KLQ0KLS0tIFJvdW5kaW5nIHN3YXRoZQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZHF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1kZHF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWRkcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kZHF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogdXANCi1kZHF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kZHF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGNlaWxpbmcNCi1kZHF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZGRxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGZsb29yDQotZGRxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KLWRkcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAwNXVwDQotZGRxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZA0KLWRkcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQNCi1kZHF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkDQotZGRxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotZGRxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZA0KLWRkcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRkcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRkcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQNCi1kZHF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZHF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kZHF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkDQotZGRxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZGRxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVsbCB0ZXN0cw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kZHF1YTk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFF1YW50aXplLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQorLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLgorLS0gMjAwNC4wMy4xNSBVbmRlcmZsb3cgZm9yIHF1YW50aXplIGlzIHN1cHByZXNzZWQKKy0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwCitkZHF1YTAwMiBxdWFudGl6ZSAxICAgICAgIDFlMCAgIC0+IDEKK2RkcXVhMDAzIHF1YW50aXplIDAuMSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA2IHF1YW50aXplIDAuMSAgICAgMWUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDA3IHF1YW50aXplIDAuMSAgICAxZS0xICAgLT4gMC4xCitkZHF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTAKK2RkcXVhMDA5IHF1YW50aXplIDAuMSAgICAxZS0zICAgLT4gMC4xMDAKK2RkcXVhMDEwIHF1YW50aXplIDAuOSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDEyIHF1YW50aXplIDAuOSAgICAxZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDEzIHF1YW50aXplIDAuOSAgICAxZS0xICAgLT4gMC45CitkZHF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTAKK2RkcXVhMDE1IHF1YW50aXplIDAuOSAgICAxZS0zICAgLT4gMC45MDAKKy0tIG5lZ2F0aXZlcworZGRxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMAorZGRxdWEwMjIgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAtMQorZGRxdWEwMjMgcXVhbnRpemUgLTAuMSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAyNiBxdWFudGl6ZSAtMC4xICAgIDFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMjcgcXVhbnRpemUgLTAuMSAgIDFlLTEgICAtPiAtMC4xCitkZHF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwCitkZHF1YTAyOSBxdWFudGl6ZSAtMC4xICAgMWUtMyAgIC0+IC0wLjEwMAorZGRxdWEwMzAgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzMiBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzMgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkZHF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkZHF1YTAzNSBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorZGRxdWEwMzYgcXVhbnRpemUgLTAuNSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzOCBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzkgcXVhbnRpemUgLTAuNSAgIDFlLTEgICAtPiAtMC41CitkZHF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwCitkZHF1YTA0MSBxdWFudGl6ZSAtMC41ICAgMWUtMyAgIC0+IC0wLjUwMAorZGRxdWEwNDIgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA0NCBxdWFudGl6ZSAtMC45ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNDUgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45CitkZHF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitkZHF1YTA0NyBxdWFudGl6ZSAtMC45ICAgMWUtMyAgIC0+IC0wLjkwMAorCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24KK2RkcXVhMDYwIHF1YW50aXplIDIuMTcgICAwLjAwMSAgLT4gMi4xNzAKK2RkcXVhMDYxIHF1YW50aXplIDIuMTcgICAwLjAxICAgLT4gMi4xNworZGRxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2MyBxdWFudGl6ZSAyLjE3ICAgMWUrMCAgIC0+IDIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2NCBxdWFudGl6ZSAyLjE3ICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRxdWEwNjYgcXVhbnRpemUgMiAgICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMDY3IHF1YW50aXplIC0wLjEgICAgMSAgICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1CitkZHF1YTA2OSBxdWFudGl6ZSArMTIzNDU2Nzg5MDEyMzQ1LjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMDcwIHF1YW50aXplIC05ODc2NTQzMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMAorZGRxdWEwNzIgcXVhbnRpemUgMjE3ICAgIDFlKzAgICAtPiAyMTcKK2RkcXVhMDczIHF1YW50aXplIDIxNyAgICAxZSsxICAgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorCistLSBnZW5lcmFsIHRlc3RzIC4uCitkZHF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MCBxdWFudGl6ZSAxMiAgICAgMWUrMyAgIC0+IDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MSBxdWFudGl6ZSAxMiAgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5MyBxdWFudGl6ZSAxLjIzNDUgMWUtMiAgIC0+IDEuMjMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5NCBxdWFudGl6ZSAxLjIzNTUgMWUtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwCitkZHF1YTA5NiBxdWFudGl6ZSA5Ljk5OTkgMWUtMiAgIC0+IDEwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTcgcXVhbnRpemUgMC4wMDAxIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTkgcXVhbnRpemUgMC4wMDkgIDFlLTIgICAtPiAwLjAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDAgcXVhbnRpemUgOTIgICAgIDFlKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTEwMSBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+ICAtMQorZGRxdWExMDIgcXVhbnRpemUgLTEgICAgIDFlLTEgICAtPiAgLTEuMAorZGRxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDAKK2RkcXVhMTA0IHF1YW50aXplICAwICAgICAgMWUwICAgLT4gIDAKK2RkcXVhMTA1IHF1YW50aXplICAwICAgICAxZS0xICAgLT4gIDAuMAorZGRxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMAorZGRxdWExMDcgcXVhbnRpemUgIDAuMDAgICAxZTAgICAtPiAgMAorZGRxdWExMDggcXVhbnRpemUgIDAgICAgIDFlKzEgICAtPiAgMEUrMQorZGRxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMgorZGRxdWExMTAgcXVhbnRpemUgKzEgICAgICAxZTAgICAtPiAgMQorZGRxdWExMTEgcXVhbnRpemUgKzEgICAgIDFlLTEgICAtPiAgMS4wCitkZHF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwCisKK2RkcXVhMTIwIHF1YW50aXplICAgMS4wNCAgMWUtMyAtPiAgMS4wNDAKK2RkcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNAorZGRxdWExMjIgcXVhbnRpemUgICAxLjA0ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMyBxdWFudGl6ZSAgIDEuMDQgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwCitkZHF1YTEyNSBxdWFudGl6ZSAgIDEuMDUgIDFlLTIgLT4gIDEuMDUKK2RkcXVhMTI2IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzIgcXVhbnRpemUgICAxLjA2ICAxZS0zIC0+ICAxLjA2MAorZGRxdWExMzMgcXVhbnRpemUgICAxLjA2ICAxZS0yIC0+ICAxLjA2CitkZHF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTM1IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMAorZGRxdWExNDEgcXVhbnRpemUgICArMSAgICAgMWUtMiAgLT4gIDEuMDAKK2RkcXVhMTQyIHF1YW50aXplICAgKzEwICAgIDFlLTIgIC0+ICAxMC4wMAorZGRxdWExNDMgcXVhbnRpemUgICAxRSsxNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWExNDQgcXVhbnRpemUgICAxRS0xNyAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0NSBxdWFudGl6ZSAgIDFFLTMgICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxCitkZHF1YTE0NyBxdWFudGl6ZSAgIDFFLTEgICAxZS0yICAtPiAgMC4xMAorZGRxdWExNDggcXVhbnRpemUgICAwRS0xNyAgMWUtMiAgLT4gIDAuMDAKKworZGRxdWExNTAgcXVhbnRpemUgICAxLjA2MDAgMWUtNSAtPiAgMS4wNjAwMAorZGRxdWExNTEgcXVhbnRpemUgICAxLjA2MDAgMWUtNCAtPiAgMS4wNjAwCitkZHF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkCitkZHF1YTE1MyBxdWFudGl6ZSAgIDEuMDYwMCAxZS0yIC0+ICAxLjA2IFJvdW5kZWQKK2RkcXVhMTU0IHF1YW50aXplICAgMS4wNjAwIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIGEgY291cGxlIHdoZXJlIHJvdW5kaW5nIHdhcyBkaWZmZXJlbnQgaW4gYmFzZSB0ZXN0cworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RkcXVhMTU3IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1OCBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cworZGRxdWExNjEgcXVhbnRpemUgMCAgICAgIC05ZTAgICAtPiAwCitkZHF1YTE2MiBxdWFudGl6ZSAxICAgICAgLTdlMCAgIC0+IDEKK2RkcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY1IHF1YW50aXplIDAuMSAgICAwZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY2IHF1YW50aXplIDAuMSAgICAgMmUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xCitkZHF1YTE2OCBxdWFudGl6ZSAwLjEgICA0NGUtMiAgIC0+IDAuMTAKK2RkcXVhMTY5IHF1YW50aXplIDAuMSAgNTU1ZS0zICAgLT4gMC4xMDAKK2RkcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcxIHF1YW50aXplIDAuOSAtNzc3ZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcyIHF1YW50aXplIDAuOSAgLTg4ZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45CitkZHF1YTE3NCBxdWFudGl6ZSAwLjkgICAgMGUtMiAgIC0+IDAuOTAKK2RkcXVhMTc1IHF1YW50aXplIDAuOSAgMS4xZS0zICAgLT4gMC45MDAwCistLSBuZWdhdGl2ZXMKK2RkcXVhMTgxIHF1YW50aXplIC0wICAgIDEuMWUwICAgLT4gLTAuMAorZGRxdWExODIgcXVhbnRpemUgLTEgICAgIC0xZTAgICAtPiAtMQorZGRxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTg1IHF1YW50aXplIC0wLjEgMTExZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4NiBxdWFudGl6ZSAtMC4xICAgNzFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xCitkZHF1YTE4OCBxdWFudGl6ZSAtMC4xIC0uMWUtMiAgIC0+IC0wLjEwMAorZGRxdWExODkgcXVhbnRpemUgLTAuMSAgLTFlLTMgICAtPiAtMC4xMDAKK2RkcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MSBxdWFudGl6ZSAtMC45ICAtMGUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTIgcXVhbnRpemUgLTAuOSAtMTBlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQorZGRxdWExOTQgcXVhbnRpemUgLTAuOSA5OTllLTIgICAtPiAtMC45MAorCistLSArdmUgZXhwb25lbnRzIC4uCitkZHF1YTIwMSBxdWFudGl6ZSAgIC0xICAgMWUrMCAtPiAgLTEKK2RkcXVhMjAyIHF1YW50aXplICAgLTEgICAxZSsxIC0+ICAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjA0IHF1YW50aXplICAgIDAgICAxZSswIC0+ICAwCitkZHF1YTIwNSBxdWFudGl6ZSAgICAwICAgMWUrMSAtPiAgMEUrMQorZGRxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzIKK2RkcXVhMjA3IHF1YW50aXplICAgKzEgICAxZSswIC0+ICAxCitkZHF1YTIwOCBxdWFudGl6ZSAgICsxICAgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIyMCBxdWFudGl6ZSAgIDEuMDQgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjIgcXVhbnRpemUgICAxLjA0IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMyBxdWFudGl6ZSAgIDEuMDQgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjUgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyNiBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjggcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyOSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzEgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMiBxdWFudGl6ZSAgIDEuMDYgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzQgcXVhbnRpemUgICAxLjA2IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzNSBxdWFudGl6ZSAgIDEuMDYgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyNDAgcXVhbnRpemUgICAtMTAgICAxZSsxICAtPiAgLTFFKzEgUm91bmRlZAorZGRxdWEyNDEgcXVhbnRpemUgICArMSAgICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZAorZGRxdWEyNDMgcXVhbnRpemUgICAxRSsxICAxZSsxICAtPiAgMUUrMSAgICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDYgcXVhbnRpemUgICAxRSs0ICAxZSsxICAtPiAgMS4wMDBFKzQgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDkgcXVhbnRpemUgICAxRSs3ICAxZSsxICAtPiAgMS4wMDAwMDBFKzcgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI1MCBxdWFudGl6ZSAgIDFFKzggIDFlKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorLS0gbmV4dCBvbmUgdHJpZXMgdG8gYWRkIDkgemVyb3MKK2RkcXVhMjUyIHF1YW50aXplICAgMUUrMTcgMWUrMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEyNTMgcXVhbnRpemUgICAxRS0xNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjU0IHF1YW50aXplICAgMUUtMiAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI1NSBxdWFudGl6ZSAgIDBFLTE3IDFlKzEgIC0+ICAwRSsxCitkZHF1YTI1NiBxdWFudGl6ZSAgLTBFLTE3IDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1NyBxdWFudGl6ZSAgLTBFLTEgIDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1OCBxdWFudGl6ZSAgLTAgICAgIDFlKzEgIC0+IC0wRSsxCitkZHF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxCisKK2RkcXVhMjYwIHF1YW50aXplICAgLTEwICAgMWUrMiAgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjYyIHF1YW50aXplICAgKzEwICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI2MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMgorZGRxdWEyNjUgcXVhbnRpemUgICAxRSszICAxZSsyICAtPiAgMS4wRSszCitkZHF1YTI2NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzIgIC0+ICAxLjAwRSs0CitkZHF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQorZGRxdWEyNjggcXVhbnRpemUgICAxRSs2ICAxZSsyICAtPiAgMS4wMDAwRSs2CitkZHF1YTI2OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzIgIC0+ICAxLjAwMDAwRSs3CitkZHF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOAorZGRxdWEyNzEgcXVhbnRpemUgICAxRSs5ICAxZSsyICAtPiAgMS4wMDAwMDAwRSs5CitkZHF1YTI3MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzIgIC0+ICAxLjAwMDAwMDAwRSsxMAorZGRxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjc0IHF1YW50aXplICAgMUUtMiAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI3NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzIgIC0+ICAwRSsyCisKK2RkcXVhMjgwIHF1YW50aXplICAgLTEwICAgMWUrMyAgLT4gIC0wRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODEgcXVhbnRpemUgICArMSAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODQgcXVhbnRpemUgICAxRSsyICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMKK2RkcXVhMjg2IHF1YW50aXplICAgMUUrNCAgMWUrMyAgLT4gIDEuMEUrNAorZGRxdWEyODcgcXVhbnRpemUgICAxRSs1ICAxZSszICAtPiAgMS4wMEUrNQorZGRxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYKK2RkcXVhMjg5IHF1YW50aXplICAgMUUrNyAgMWUrMyAgLT4gIDEuMDAwMEUrNworZGRxdWEyOTAgcXVhbnRpemUgICAxRSs4ICAxZSszICAtPiAgMS4wMDAwMEUrOAorZGRxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkKK2RkcXVhMjkyIHF1YW50aXplICAgMUUrMTAgMWUrMyAgLT4gIDEuMDAwMDAwMEUrMTAKK2RkcXVhMjkzIHF1YW50aXplICAgMUUtMTAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyOTUgcXVhbnRpemUgICAwRS0xMCAxZSszICAtPiAgMEUrMworCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQorZGRxdWEzMDAgcXVhbnRpemUgICAwLjAwNzggMWUtNSAtPiAgMC4wMDc4MAorZGRxdWEzMDEgcXVhbnRpemUgICAwLjAwNzggMWUtNCAtPiAgMC4wMDc4CitkZHF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzAzIHF1YW50aXplICAgMC4wMDc4IDFlLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNCBxdWFudGl6ZSAgIDAuMDA3OCAxZS0xIC0+ICAwLjAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDYgcXVhbnRpemUgICAwLjAwNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzA3IHF1YW50aXplICAgMC4wMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzEwIHF1YW50aXplICAtMC4wMDc4IDFlLTUgLT4gLTAuMDA3ODAKK2RkcXVhMzExIHF1YW50aXplICAtMC4wMDc4IDFlLTQgLT4gLTAuMDA3OAorZGRxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxMyBxdWFudGl6ZSAgLTAuMDA3OCAxZS0yIC0+IC0wLjAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTQgcXVhbnRpemUgIC0wLjAwNzggMWUtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzE2IHF1YW50aXplICAtMC4wMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxNyBxdWFudGl6ZSAgLTAuMDA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTMyMCBxdWFudGl6ZSAgIDAuMDc4IDFlLTUgLT4gIDAuMDc4MDAKK2RkcXVhMzIxIHF1YW50aXplICAgMC4wNzggMWUtNCAtPiAgMC4wNzgwCitkZHF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4CitkZHF1YTMyMyBxdWFudGl6ZSAgIDAuMDc4IDFlLTIgLT4gIDAuMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMyNCBxdWFudGl6ZSAgIDAuMDc4IDFlLTEgLT4gIDAuMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI2IHF1YW50aXplICAgMC4wNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzI3IHF1YW50aXplICAgMC4wNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzMzAgcXVhbnRpemUgIC0wLjA3OCAxZS01IC0+IC0wLjA3ODAwCitkZHF1YTMzMSBxdWFudGl6ZSAgLTAuMDc4IDFlLTQgLT4gLTAuMDc4MAorZGRxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OAorZGRxdWEzMzMgcXVhbnRpemUgIC0wLjA3OCAxZS0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzMzQgcXVhbnRpemUgIC0wLjA3OCAxZS0xIC0+IC0wLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNiBxdWFudGl6ZSAgLTAuMDc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMzNyBxdWFudGl6ZSAgLTAuMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzQwIHF1YW50aXplICAgMC43OCAxZS01IC0+ICAwLjc4MDAwCitkZHF1YTM0MSBxdWFudGl6ZSAgIDAuNzggMWUtNCAtPiAgMC43ODAwCitkZHF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODAKK2RkcXVhMzQzIHF1YW50aXplICAgMC43OCAxZS0yIC0+ICAwLjc4CitkZHF1YTM0NCBxdWFudGl6ZSAgIDAuNzggMWUtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM0NiBxdWFudGl6ZSAgIDAuNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzQ3IHF1YW50aXplICAgMC43OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM1MCBxdWFudGl6ZSAgLTAuNzggMWUtNSAtPiAtMC43ODAwMAorZGRxdWEzNTEgcXVhbnRpemUgIC0wLjc4IDFlLTQgLT4gLTAuNzgwMAorZGRxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwCitkZHF1YTM1MyBxdWFudGl6ZSAgLTAuNzggMWUtMiAtPiAtMC43OAorZGRxdWEzNTQgcXVhbnRpemUgIC0wLjc4IDFlLTEgLT4gLTAuOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNTYgcXVhbnRpemUgIC0wLjc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM1NyBxdWFudGl6ZSAgLTAuNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzNjAgcXVhbnRpemUgICA3LjggMWUtNSAtPiAgNy44MDAwMAorZGRxdWEzNjEgcXVhbnRpemUgICA3LjggMWUtNCAtPiAgNy44MDAwCitkZHF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMAorZGRxdWEzNjMgcXVhbnRpemUgICA3LjggMWUtMiAtPiAgNy44MAorZGRxdWEzNjQgcXVhbnRpemUgICA3LjggMWUtMSAtPiAgNy44CitkZHF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNjYgcXVhbnRpemUgICA3LjggMWUrMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzY3IHF1YW50aXplICAgNy44IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM3MCBxdWFudGl6ZSAgLTcuOCAxZS01IC0+IC03LjgwMDAwCitkZHF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDAKK2RkcXVhMzcyIHF1YW50aXplICAtNy44IDFlLTMgLT4gLTcuODAwCitkZHF1YTM3MyBxdWFudGl6ZSAgLTcuOCAxZS0yIC0+IC03LjgwCitkZHF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgKK2RkcXVhMzc1IHF1YW50aXplICAtNy44ICAxZTAgLT4gLTggSW5leGFjdCBSb3VuZGVkCitkZHF1YTM3NiBxdWFudGl6ZSAgLTcuOCAxZSsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzc4IHF1YW50aXplICAtNy44IDFlKzMgLT4gLTBFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgaW5kaXZpZHVhbHMKK2RkcXVhMzgwIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzODEgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IDEyMzQ1NjczNTIzNjQ1LjA2CitkZHF1YTM4MiBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4MyBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4NCBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM4NSBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQ1LjA2CitkZHF1YTM4NiBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM4NyBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3JvdW5kaW5nOiBkb3duCitkZHF1YTM4OSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSA/IHNob3VsZCB0aGF0IG9uZSBpbnN0ZWFkIGhhdmUgYmVlbjoKKy0tIGRkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdW5kaW5nOiBoYWxmX3VwCisKKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zCitkZHF1YTM5MSBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIuMzQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIuMzQ2ICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM5MiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM5MyBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNC41NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzNC41NjcKK2RkcXVhMzk0IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NS42NyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzk1IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTYuNyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMzk2IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCitkZHF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAorZGRxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAorZGRxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5CitkZHF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwCitkZHF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCitkZHF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKK2RkcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKK2RkcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKK2RkcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKK2RkcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKK2RkcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQorZGRxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKK2RkcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5CisKK2RkcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkZHF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZGRxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RkcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK2RkcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZGRxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkZHF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZGRxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RkcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworZGRxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKK2RkcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCitkZHF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wCitkZHF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCitkZHF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAorZGRxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzEKK2RkcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKK2RkcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCitkZHF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQorZGRxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKK2RkcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCitkZHF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wCitkZHF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCitkZHF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAorZGRxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzEKK2RkcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKK2RkcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCitkZHF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQorCistLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMKK2RkcXVhNTIwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZGRxdWE1MjEgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUyMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTIzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBmb3VyIGFyZSAid29uJ3QgZml0IiBvdmVyZmwKK2RkcXVhNTI2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTUyNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1MjggcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTI5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNTMyIHF1YW50aXplICAgMS4yMzRFKzI5OSAgICAxZTI5OSAtPiAxRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUzMyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE1MzQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTM3IHF1YW50aXplICAgMCAgICAgICAgICAgIDFlLTI5OSAtPiAwRS0yOTkKKy0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MKK2RkcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTM5IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTMwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIFttb3JlIGJlbG93XQorCistLSBTcGVjaWFscworZGRxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODIgcXVhbnRpemUgIEluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODUgcXVhbnRpemUgIEluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg4IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTEgcXVhbnRpemUgIDEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkcXVhNTk0IHF1YW50aXplICBJbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZHF1YTYwMCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjAzIHF1YW50aXplIC1JbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjA2IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK2RkcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTYwOSBxdWFudGl6ZSAtMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxMiBxdWFudGl6ZSAgMTAwMCAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTUgcXVhbnRpemUgLTAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZGRxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTgorZGRxdWE2MjIgcXVhbnRpemUgIE5hTiAxZS0yOTkgICAgLT4gIE5hTgorZGRxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTgorZGRxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTgorZGRxdWE2MjUgcXVhbnRpemUgIE5hTiAgMWUxICAgICAgLT4gIE5hTgorZGRxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTgorZGRxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTgorZGRxdWE2MjggcXVhbnRpemUgIE5hTiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzEgcXVhbnRpemUgLTEgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzQgcXVhbnRpemUgIDEwMDAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTgorZGRxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTgorZGRxdWE2MzcgcXVhbnRpemUgLTAgICAgICBOYU4gICAgLT4gIE5hTgorCitkZHF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDIgcXVhbnRpemUgIHNOYU4gMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDUgcXVhbnRpemUgIHNOYU4gIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDggcXVhbnRpemUgIHNOYU4gICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTEgcXVhbnRpemUgLTEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTQgcXVhbnRpemUgIDEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTcgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkcXVhNjYyIHF1YW50aXplICBOYU44ICA5MTkgICAtPiAgTmFOOAorZGRxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorZGRxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitkZHF1YTY2NSBxdWFudGl6ZSAtSW5mICAgTmFONCAgLT4gIE5hTjQKK2RkcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzEKK2RkcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkZHF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3MyBxdWFudGl6ZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NiBxdWFudGl6ZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY3OSBxdWFudGl6ZSAgTmFOICAgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQorZGRxdWE2ODIgcXVhbnRpemUgLU5hTjggIDkxOSAgIC0+IC1OYU44CitkZHF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitkZHF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYKK2RkcXVhNjg1IHF1YW50aXplIC1JbmYgIC1OYU40ICAtPiAtTmFONAorZGRxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQorZGRxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RkcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjkzIHF1YW50aXplIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk2IHF1YW50aXplIC1JbmYgICAtc05hTjkyICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjk5IHF1YW50aXplICBOYU4gICAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitkZHF1YTcxMCBxdWFudGl6ZSAgMS4wMEUtMzgzICAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgUm91bmRlZAorZGRxdWE3MTEgcXVhbnRpemUgIDAuMUUtMzgzICAgIDJlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwKK2RkcXVhNzEyIHF1YW50aXplICAwLjEwRS0zODMgICAzZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzEzIHF1YW50aXplICAwLjEwMEUtMzgzICA0ZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzE0IHF1YW50aXplICAwLjAxRS0zODMgICA1ZS0zODUgIC0+ICAgMUUtMzg1ICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3MTUgcXVhbnRpemUgIDAuOTk5RS0zODMgICAxZS0zODMgIC0+ICAgMUUtMzgzICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS0zODMgMTBlLTM4NCAgLT4gICAxRS0zODQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCisKK2RkcXVhNzE3IHF1YW50aXplICAwLjAwOUUtMzgzICAxZS0zODUgIC0+ICAgMUUtMzg1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZGRxdWE3MTggcXVhbnRpemUgIDAuMDAxRS0zODMgIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS0zODMgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTczMCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzgzICAtPiAgLTFFLTM4MyAgICAgUm91bmRlZAorZGRxdWE3MzEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdAorZGRxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtMzgzIDkwZS0zODMgIC0+ICAtMUUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtMzgzIC0wZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAwZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgUm91bmRlZAorZGRxdWE3NDEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwKK2RkcXVhNzQyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkcXVhNzQ0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZGRxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NCAtPiAgLTEuMEUtMzgzICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMDBFLTM4MworZGRxdWE3NTEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzUyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODUgLT4gIC0xLjAwRS0zODMgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkZHF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg1IC0+ICAtMEUtMzg1ICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMDBFLTM4MworZGRxdWE3NjEgcXVhbnRpemUgLTAuMUUtMzgzICAgIDFlLTM4NiAtPiAgLTEuMDBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMEUtMzg1ICAgU3Vibm9ybWFsCitkZHF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45OUUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODYgLT4gIC05LjlFLTM4NSAgIFN1Ym5vcm1hbAorZGRxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NiAtPiAgLTlFLTM4NiAgICAgU3Vibm9ybWFsCitkZHF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg2IC0+ICAtMUUtMzg2ICAgICBTdWJub3JtYWwKK2RkcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODYgLT4gIC0wRS0zODYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIGZyb20gRnVuZyBMZWUKK2RkcXVhMTAyMSBxdWFudGl6ZSAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiAgOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorZGRxdWExMDIyIHF1YW50aXplIC04LjY2NjY2NjY2NjY2NjAwMEUrMzg0ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IC04LjY2NjY2NjY2NjY2NjAwMEUrMzg0CitkZHF1YTEwMjcgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTEwMjkgcXVhbnRpemUgOC42NjY2NjY2NkUrMyAgICAgICAgICAgMUUrMyAgICAgLT4gOUUrMyBJbmV4YWN0IFJvdW5kZWQKKworCistLWRkcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4NCAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZCBJbmV4YWN0CistLWRkcXVhMTAzMSBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4NCAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzIgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODMgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKy0tZGRxdWExMDMzIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgyICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCistLWRkcXVhMTAzNCBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MSAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzUgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODAgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RkcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0NgorZGRxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3CitkZHF1YTEwNDIgcXVhbnRpemUgLTIxNDc0ODM2NDggICAgIDAgLT4gLTIxNDc0ODM2NDgKK2RkcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQorZGRxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2CitkZHF1YTEwNDUgcXVhbnRpemUgIDIxNDc0ODM2NDcgICAgIDAgLT4gIDIxNDc0ODM2NDcKK2RkcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OAorZGRxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5CitkZHF1YTEwNDggcXVhbnRpemUgIDQyOTQ5NjcyOTQgICAgIDAgLT4gIDQyOTQ5NjcyOTQKK2RkcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQorZGRxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2CitkZHF1YTEwNTEgcXVhbnRpemUgIDQyOTQ5NjcyOTcgICAgIDAgLT4gIDQyOTQ5NjcyOTcKKworLS0gUm91bmRpbmcgc3dhdGhlCityb3VuZGluZzogaGFsZl9ldmVuCitkZHF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2RkcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitkZHF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTUwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworZGRxdWExNjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorZGRxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAwNXVwCitkZHF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkCitkZHF1YTE4MDEgcXVhbnRpemUgIDEuMjAwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDQgcXVhbnRpemUgIDEuMjA1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDkgcXVhbnRpemUgIDEuMjA5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTE5MDAgcXVhbnRpemUgIDEuMjEwMCAgICAxLjAwICAgIC0+ICAxLjIxICBSb3VuZGVkCitkZHF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTAzIHF1YW50aXplICAxLjIxNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTA4IHF1YW50aXplICAxLjIxNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkCitkZHF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwMiBxdWFudGl6ZSAgMS4yNDEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwNyBxdWFudGl6ZSAgMS4yNDYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAxMSBxdWFudGl6ZSAtMS4yNDk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkCitkZHF1YTIxMDEgcXVhbnRpemUgIDEuMjUwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDQgcXVhbnRpemUgIDEuMjU1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDkgcXVhbnRpemUgIDEuMjU5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIyMDAgcXVhbnRpemUgIDEuMjYwMCAgICAxLjAwICAgIC0+ICAxLjI2ICBSb3VuZGVkCitkZHF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjAzIHF1YW50aXplICAxLjI2NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjA4IHF1YW50aXplICAxLjI2NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkCitkZHF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwMiBxdWFudGl6ZSAgMS4yOTEwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwNyBxdWFudGl6ZSAgMS4yOTYwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMxMSBxdWFudGl6ZSAtMS4yOTk5ICAgIDEuMDAgICAgLT4gLTEuMjkgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZHF1YTk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlZHVjZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QKaW5kZXggYmRmZDA2MC4uOTUyOWU1MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QKQEAgLTEsMTgyICsxLDE4MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRSZWR1Y2UuZGVjVGVzdCAtLSByZW1vdmUgdHJhaWxpbmcgemVyb3MgZnJvbSBhIGRlY0RvdWJsZSAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJw0KLWRkcmVkMDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnDQotZGRyZWQwMDMgcmVkdWNlICcxLjAwJyAgIC0+ICcxJw0KLWRkcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnDQotZGRyZWQwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJw0KLWRkcmVkMDA2IHJlZHVjZSAnMC4wMCcgICAtPiAnMCcNCi1kZHJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnDQotZGRyZWQwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJw0KLWRkcmVkMDA5IHJlZHVjZSAnMDAnICAgICAtPiAnMCcNCi1kZHJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnDQotZGRyZWQwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJw0KLQ0KLWRkcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInDQotZGRyZWQwMTMgcmVkdWNlICcyJyAgICAgIC0+ICcyJw0KLWRkcmVkMDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInDQotZGRyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJw0KLWRkcmVkMDE2IHJlZHVjZSAnLTAnICAgICAtPiAnLTAnDQotZGRyZWQwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcNCi1kZHJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJw0KLWRkcmVkMDE5IHJlZHVjZSAnLTAwLjAwJyAtPiAnLTAnDQotZGRyZWQwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcNCi1kZHJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcNCi1kZHJlZDAyMiByZWR1Y2UgJy0wRSsxJyAgLT4gJy0wJw0KLQ0KLWRkcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRkcmVkMDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScNCi1kZHJlZDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQotZGRyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScNCi1kZHJlZDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KLWRkcmVkMDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJw0KLWRkcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQotZGRyZWQwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnDQotZGRyZWQwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicNCi1kZHJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicNCi0NCi1kZHJlZDA0MSByZWR1Y2UgMS4xICAgICAgICAtPiAxLjENCi1kZHJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjENCi1kZHJlZDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjENCi1kZHJlZDA0NCByZWR1Y2UgMS4xMTAgICAgICAtPiAxLjExDQotZGRyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQ0KLWRkcmVkMDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjENCi1kZHJlZDA0NyByZWR1Y2UgLTEuMTAwICAgICAtPiAtMS4xDQotZGRyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTENCi1kZHJlZDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkNCi1kZHJlZDA1MCByZWR1Y2UgOS45MCAgICAgICAtPiA5LjkNCi1kZHJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkNCi1kZHJlZDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5DQotZGRyZWQwNTMgcmVkdWNlIC05LjkgICAgICAgLT4gLTkuOQ0KLWRkcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkNCi1kZHJlZDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45DQotZGRyZWQwNTYgcmVkdWNlIC05Ljk5MCAgICAgLT4gLTkuOTkNCi0NCi0tLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cw0KLWRkcmVkMDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQ0KLWRkcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQ0KLWRkcmVkMDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMg0KLWRkcmVkMDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMg0KLWRkcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszDQotZGRyZWQwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMNCi1kZHJlZDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxDQotZGRyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQ0KLWRkcmVkMDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzINCi1kZHJlZDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyDQotZGRyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszDQotZGRyZWQwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszDQotDQotLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQNCi1kZHJlZDA4MCByZWR1Y2UgIDEwRSsxICAgICAgIC0+IDFFKzINCi1kZHJlZDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMNCi1kZHJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzINCi1kZHJlZDA4MyByZWR1Y2UgIDEuMEUrMyAgICAgIC0+IDFFKzMNCi1kZHJlZDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMw0KLWRkcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMw0KLWRkcmVkMDg2IHJlZHVjZSAgMS4xMEUrMyAgICAgLT4gMS4xRSszDQotZGRyZWQwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMg0KLWRkcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMNCi1kZHJlZDA4OSByZWR1Y2UgLTEuMEUrMiAgICAgIC0+IC0xRSsyDQotZGRyZWQwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMw0KLWRkcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMw0KLWRkcmVkMDkyIHJlZHVjZSAtMS4wMEUrMyAgICAgLT4gLTFFKzMNCi1kZHJlZDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMNCi0NCi0tLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nDQotZGRyZWQxMDAgcmVkdWNlICAxMSAgICAgICAgICAtPiAxMQ0KLWRkcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQ0KLWRkcmVkMTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQ0KLWRkcmVkMTAzIHJlZHVjZSAgMS4xRSsxICAgICAgLT4gMTENCi1kZHJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzENCi1kZHJlZDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMg0KLWRkcmVkMTA2IHJlZHVjZSAgMS4wMEUrMiAgICAgLT4gMUUrMg0KLWRkcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszDQotZGRyZWQxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszDQotZGRyZWQxMDkgcmVkdWNlICAxLjAwMDAwMEUrNiAtPiAxRSs2DQotZGRyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTENCi1kZHJlZDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxDQotZGRyZWQxMTIgcmVkdWNlIC0xMC4gICAgICAgICAtPiAtMUUrMQ0KLWRkcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExDQotZGRyZWQxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQ0KLWRkcmVkMTE1IHJlZHVjZSAtMS4xMEUrMiAgICAgLT4gLTEuMUUrMg0KLWRkcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzINCi1kZHJlZDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMNCi1kZHJlZDExOCByZWR1Y2UgLTEuMDAwRSszICAgIC0+IC0xRSszDQotZGRyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQ0KLWRkcmVkMTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYNCi1kZHJlZDEyMSByZWR1Y2UgLTEwLjAwMDAwRSs2IC0+IC0xRSs3DQotZGRyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOA0KLWRkcmVkMTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkNCi1kZHJlZDEyNCByZWR1Y2UgLTEwMDAwLjAwRSs2IC0+IC0xRSsxMA0KLWRkcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExDQotZGRyZWQxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTINCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoDQotZGRyZWQxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScNCi1kZHJlZDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInDQotZGRyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicNCi1kZHJlZDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicNCi1kZHJlZDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJw0KLWRkcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJw0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlDQotZGRyZWQxNTEgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcmVkMTUyIHJlZHVjZSAgOS45OTk5OTkwMDAwMDAwMDBFKzM4MCAgIC0+IDkuOTk5OTk5MDAwMDBFKzM4MA0KLWRkcmVkMTUzIHJlZHVjZSAgOS45OTk5OTk5OTk5OTAwMDBFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTkwMDAwRSszODQNCi1kZHJlZDE1NCByZWR1Y2UgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCi1kZHJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxRS0zODMNCi1kZHJlZDE1NiByZWR1Y2UgIDIuMDAwRS0zOTUgICAgICAgICAgICAgICAtPiAyRS0zOTUgICBTdWJub3JtYWwNCi1kZHJlZDE1NyByZWR1Y2UgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggICBTdWJub3JtYWwNCi0NCi1kZHJlZDE2MSByZWR1Y2UgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4ICBTdWJub3JtYWwNCi1kZHJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtMzk1ICAgICAgICAgICAgICAtPiAtMkUtMzk1ICBTdWJub3JtYWwNCi1kZHJlZDE2MyByZWR1Y2UgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMUUtMzgzDQotZGRyZWQxNjQgcmVkdWNlICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4Mw0KLWRkcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5MDAwMDAwMDAwRSszODAgIC0+IC05Ljk5OTk5OTAwMDAwRSszODANCi1kZHJlZDE2NiByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTAwMDBFKzM4NA0KLWRkcmVkMTY3IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTkwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0DQotZGRyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJlZDE2OSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NA0KLQ0KLQ0KLS0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpDQotZGRyZWQ4MjAgcmVkdWNlICdJbmYnICAgIC0+ICdJbmZpbml0eScNCi1kZHJlZDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScNCi1kZHJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTg0KLWRkcmVkODIzIHJlZHVjZSAgc05hTiAgICAtPiAgTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZWQ4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDENCi1kZHJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVkODI3IHJlZHVjZSAgLU5hTiAgICAtPiAtTmFODQotZGRyZWQ4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQ0KLWRkcmVkODMwIHJlZHVjZSAtc05hTjAxMCAtPiAtTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0DQotZGRyZWQ5MDAgcmVkdWNlICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRSZWR1Y2UuZGVjVGVzdCAtLSByZW1vdmUgdHJhaWxpbmcgemVyb3MgZnJvbSBhIGRlY0RvdWJsZSAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMywgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJworZGRyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScKK2RkcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScKK2RkcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnCitkZHJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnCitkZHJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnCitkZHJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnCitkZHJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnCitkZHJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnCitkZHJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnCitkZHJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnCisKK2RkcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInCitkZHJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInCitkZHJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJworZGRyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJworZGRyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcKK2RkcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnCitkZHJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJworZGRyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcKK2RkcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnCitkZHJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcKK2RkcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnCisKK2RkcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZGRyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJworZGRyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZGRyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScKK2RkcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkZHJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScKK2RkcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkZHJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScKK2RkcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCitkZHJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicKKworZGRyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xCitkZHJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjEKK2RkcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQorZGRyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQorZGRyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQorZGRyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQorZGRyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQorZGRyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTEKK2RkcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQorZGRyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45CitkZHJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkKK2RkcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkKK2RkcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkKK2RkcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkKK2RkcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkKK2RkcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5CisKKy0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzCitkZHJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzEKK2RkcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQorZGRyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyCitkZHJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzIKK2RkcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszCitkZHJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMworZGRyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQorZGRyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQorZGRyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMgorZGRyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMgorZGRyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszCitkZHJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMKKworLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQKK2RkcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMgorZGRyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszCitkZHJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzIKK2RkcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMworZGRyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMKK2RkcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMworZGRyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMKK2RkcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzIKK2RkcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMKK2RkcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzIKK2RkcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMKK2RkcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMworZGRyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMworZGRyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszCisKKy0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcKK2RkcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTEKK2RkcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQorZGRyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxCitkZHJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExCitkZHJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzEKK2RkcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyCitkZHJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzIKK2RkcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszCitkZHJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMKK2RkcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNgorZGRyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTEKK2RkcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzEKK2RkcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzEKK2RkcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExCitkZHJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxCitkZHJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzIKK2RkcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzIKK2RkcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMworZGRyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMworZGRyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQorZGRyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNgorZGRyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNworZGRyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOAorZGRyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQorZGRyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTAKK2RkcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExCitkZHJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMgorCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitkZHJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJworZGRyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJworZGRyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicKK2RkcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJworZGRyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicKK2RkcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJworCistLSBObWF4LCBObWluLCBOdGlueQorLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlCitkZHJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJlZDE1MiByZWR1Y2UgIDkuOTk5OTk5MDAwMDAwMDAwRSszODAgICAtPiA5Ljk5OTk5OTAwMDAwRSszODAKK2RkcmVkMTUzIHJlZHVjZSAgOS45OTk5OTk5OTk5OTAwMDBFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTkwMDAwRSszODQKK2RkcmVkMTU0IHJlZHVjZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRyZWQxNTUgcmVkdWNlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMUUtMzgzCitkZHJlZDE1NiByZWR1Y2UgIDIuMDAwRS0zOTUgICAgICAgICAgICAgICAtPiAyRS0zOTUgICBTdWJub3JtYWwKK2RkcmVkMTU3IHJlZHVjZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCAgIFN1Ym5vcm1hbAorCitkZHJlZDE2MSByZWR1Y2UgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4ICBTdWJub3JtYWwKK2RkcmVkMTYyIHJlZHVjZSAgLTIuMDAwRS0zOTUgICAgICAgICAgICAgIC0+IC0yRS0zOTUgIFN1Ym5vcm1hbAorZGRyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTFFLTM4MworZGRyZWQxNjQgcmVkdWNlICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRyZWQxNjUgcmVkdWNlICAtOS45OTk5OTkwMDAwMDAwMDBFKzM4MCAgLT4gLTkuOTk5OTk5MDAwMDBFKzM4MAorZGRyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTAwMDBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTkwMDAwRSszODQKK2RkcmVkMTY3IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTkwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0CitkZHJlZDE2OCByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQKKworCistLSBzcGVjaWFscyAocmVkdWNlIGRvZXMgbm90IGFmZmVjdCBwYXlsb2FkKQorZGRyZWQ4MjAgcmVkdWNlICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2RkcmVkODIxIHJlZHVjZSAnLUluZicgICAtPiAnLUluZmluaXR5JworZGRyZWQ4MjIgcmVkdWNlICAgTmFOICAgIC0+ICBOYU4KK2RkcmVkODIzIHJlZHVjZSAgc05hTiAgICAtPiAgTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJlZDgyNCByZWR1Y2UgICBOYU4xMDEgLT4gIE5hTjEwMQorZGRyZWQ4MjUgcmVkdWNlICBzTmFOMDEwIC0+ICBOYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVkODI3IHJlZHVjZSAgLU5hTiAgICAtPiAtTmFOCitkZHJlZDgyOCByZWR1Y2UgLXNOYU4gICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZWQ4MjkgcmVkdWNlICAtTmFOMTAxIC0+IC1OYU4xMDEKK2RkcmVkODMwIHJlZHVjZSAtc05hTjAxMCAtPiAtTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdAorZGRyZWQ5MDAgcmVkdWNlICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdAppbmRleCA1YmQxZTMyLi44NWQ4NmY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdApAQCAtMSw2MDAgKzEsNjAwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkNCi1kZHJlbTAwMSByZW1haW5kZXIgIDEgICAgIDEgICAgLT4gIDANCi1kZHJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDANCi1kZHJlbTAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDENCi1kZHJlbTAwNCByZW1haW5kZXIgIDIgICAgIDIgICAgLT4gIDANCi1kZHJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDANCi1kZHJlbTAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDANCi1kZHJlbTAwNyByZW1haW5kZXIgIDEgICAgIDMgICAgLT4gIDENCi1kZHJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDINCi1kZHJlbTAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDANCi0NCi1kZHJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNA0KLWRkcmVtMDExIHJlbWFpbmRlciAgMi40ICAgLTEgICAtPiAgMC40DQotZGRyZW0wMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40DQotZGRyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40DQotZGRyZW0wMTQgcmVtYWluZGVyICAyLjQwICAxICAgIC0+ICAwLjQwDQotZGRyZW0wMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMA0KLWRkcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40DQotZGRyZW0wMTcgcmVtYWluZGVyICAyLjQwMCAyICAgIC0+ICAwLjQwMA0KLWRkcmVtMDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMA0KLWRkcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMA0KLQ0KLWRkcmVtMDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwDQotZGRyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDENCi1kZHJlbTAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wDQotZGRyZW0wMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwDQotZGRyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotZGRyZW0wMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotDQotZGRyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDENCi1kZHJlbTAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQ0KLWRkcmVtMDMyIHJlbWFpbmRlciAgMSAgICAgOCAgICAgIC0+ICAxDQotDQotZGRyZW0wMzMgcmVtYWluZGVyICAxICAgICAxNiAgICAgLT4gIDENCi1kZHJlbTAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQ0KLWRkcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxDQotZGRyZW0wNDAgcmVtYWluZGVyICAxICAgIC0yICAgICAgLT4gIDENCi1kZHJlbTA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQ0KLWRkcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxDQotZGRyZW0wNDMgcmVtYWluZGVyICAxICAgIC0xNiAgICAgLT4gIDENCi1kZHJlbTA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQ0KLWRkcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxDQotZGRyZW0wNTAgcmVtYWluZGVyIC0xICAgICAyICAgICAgLT4gIC0xDQotZGRyZW0wNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xDQotZGRyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xDQotZGRyZW0wNTMgcmVtYWluZGVyIC0xICAgICAxNiAgICAgLT4gIC0xDQotZGRyZW0wNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xDQotZGRyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xDQotZGRyZW0wNjAgcmVtYWluZGVyIC0xICAgIC0yICAgICAgLT4gIC0xDQotZGRyZW0wNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xDQotZGRyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xDQotZGRyZW0wNjMgcmVtYWluZGVyIC0xICAgIC0xNiAgICAgLT4gIC0xDQotZGRyZW0wNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xDQotZGRyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xDQotDQotZGRyZW0wNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDANCi1kZHJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40DQotZGRyZW0wNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQ0KLWRkcmVtMDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkNCi1kZHJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkNCi1kZHJlbTA3MSByZW1haW5kZXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gMC45OTk5OTkNCi1kZHJlbTA3MiByZW1haW5kZXIgIDkgICAgICAgICAgICAgMSAgLT4gMA0KLWRkcmVtMDczIHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwDQotZGRyZW0wNzQgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IDENCi1kZHJlbTA3NSByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMA0KLWRkcmVtMDc2IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAzDQotDQotZGRyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDANCi1kZHJlbTA4MSByZW1haW5kZXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wDQotZGRyZW0wODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDANCi1kZHJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMA0KLWRkcmVtMDg0IHJlbWFpbmRlciAgMC4wMEUrMyAgICAgICAxICAtPiAwDQotZGRyZW0wODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDANCi1kZHJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wDQotZGRyZW0wODcgcmVtYWluZGVyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDANCi1kZHJlbTA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMA0KLWRkcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMA0KLWRkcmVtMDkwIHJlbWFpbmRlciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDANCi1kZHJlbTA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMA0KLWRkcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMA0KLWRkcmVtMDkzIHJlbWFpbmRlciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03DQotZGRyZW0wOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgNCi1kZHJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQNCi0NCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwDQotZGRyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0xMDIgcmVtYWluZGVyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0xMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0xMDUgcmVtYWluZGVyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0xMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0DQotLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3INCi0tLSByZW1haW5kZXItbmVhciwgYW55d2F5XQ0KLWRkcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMDggcmVtYWluZGVyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTEgcmVtYWluZGVyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTQgcmVtYWluZGVyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMTkgcmVtYWluZGVyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0xMjIgcmVtYWluZGVyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHplcm9zIG9uIGxlZnQNCi1kZHJlbTEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDANCi1kZHJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDANCi1kZHJlbTEzMiByZW1haW5kZXIgIDAuMCAgICAxICAgLT4gIDAuMA0KLWRkcmVtMTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wDQotZGRyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wDQotZGRyZW0xMzUgcmVtYWluZGVyIC0wICAgICAtMSAgIC0+IC0wDQotZGRyZW0xMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjANCi1kZHJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMA0KLQ0KLS0tIDAuNWVycw0KLWRkcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRkcmVtMTQ0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KLWRkcmVtMTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kZHJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRkcmVtMTQ3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCi1kZHJlbTE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZGRyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi0tLSBzdGVhZGllcw0KLWRkcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDANCi1kZHJlbTE1MSByZW1haW5kZXIgIDEgIDIgICAtPiAxDQotZGRyZW0xNTIgcmVtYWluZGVyICAxICAzICAgLT4gMQ0KLWRkcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDENCi1kZHJlbTE1NCByZW1haW5kZXIgIDEgIDUgICAtPiAxDQotZGRyZW0xNTUgcmVtYWluZGVyICAxICA2ICAgLT4gMQ0KLWRkcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDENCi1kZHJlbTE1NyByZW1haW5kZXIgIDEgIDggICAtPiAxDQotZGRyZW0xNTggcmVtYWluZGVyICAxICA5ICAgLT4gMQ0KLWRkcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDENCi1kZHJlbTE2MCByZW1haW5kZXIgIDEgIDEgICAtPiAwDQotZGRyZW0xNjEgcmVtYWluZGVyICAyICAxICAgLT4gMA0KLWRkcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDANCi1kZHJlbTE2MyByZW1haW5kZXIgIDQgIDEgICAtPiAwDQotZGRyZW0xNjQgcmVtYWluZGVyICA1ICAxICAgLT4gMA0KLWRkcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDANCi1kZHJlbTE2NiByZW1haW5kZXIgIDcgIDEgICAtPiAwDQotZGRyZW0xNjcgcmVtYWluZGVyICA4ICAxICAgLT4gMA0KLWRkcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDANCi1kZHJlbTE2OSByZW1haW5kZXIgIDEwIDEgICAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXINCi1kZHJlbTE3MSByZW1haW5kZXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMA0KLWRkcmVtMTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwDQotZGRyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTANCi1kZHJlbTE3NCByZW1haW5kZXIgICAwLjUyIDEuMDIwIC0+ICAwLjUyMA0KLWRkcmVtMTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwDQotDQotLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMA0KLWRkcmVtMjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJlbTIwMyByZW1haW5kZXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcmVtMjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0yMDYgcmVtYWluZGVyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW0yMDkgcmVtYWluZGVyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtMjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXINCi1kZHJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMA0KLWRkcmVtMjMyIHJlbWFpbmRlciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwDQotZGRyZW0yMzMgcmVtYWluZGVyICAtMC41MSAxLjAyMCAtPiAtMC41MTANCi1kZHJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMA0KLWRkcmVtMjM1IHJlbWFpbmRlciAgLTAuNiAgMS4wMjAgLT4gLTAuNjAwDQotDQotLS0gaGlnaCBYcw0KLWRkcmVtMjQwIHJlbWFpbmRlciAgMUUrMiAgMS4wMCAgLT4gIDAuMDANCi0NCi0tLSBkZHJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbA0KLWRkcmVtMzAxIHJlbWFpbmRlciAgIDEgICAgMyAgICAgLT4gIDENCi1kZHJlbTMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwDQotZGRyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMw0KLWRkcmVtMzA0IHJlbWFpbmRlciAgIDEzICAgNTAgICAgLT4gIDEzDQotZGRyZW0zMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMNCi1kZHJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMw0KLWRkcmVtMzA3IHJlbWFpbmRlciAgIC4xMyAgICAxICAgLT4gIDAuMTMNCi1kZHJlbTMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMw0KLWRkcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMw0KLWRkcmVtMzEwIHJlbWFpbmRlciAgIDEuMDMzICAxICAgLT4gIDAuMDMzDQotZGRyZW0zMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMw0KLWRkcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMNCi1kZHJlbTMxMyByZW1haW5kZXIgICAxMDMuMyAgMSAgIC0+ICAwLjMNCi1kZHJlbTMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzDQotZGRyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMw0KLWRkcmVtMzE2IHJlbWFpbmRlciAgIDEwMzMgIDUwICAgLT4gIDMzDQotZGRyZW0zMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wDQotZGRyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wDQotZGRyZW0zMTkgcmVtYWluZGVyICAgMTAzLjAgIDMgICAtPiAgMS4wDQotZGRyZW0zMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MA0KLWRkcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwDQotZGRyZW0zMjIgcmVtYWluZGVyICAgMi40ICAgIDEgICAtPiAgMC40DQotZGRyZW0zMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40DQotZGRyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDANCi1kZHJlbTMyNSByZW1haW5kZXIgICAxICAgMC4zICAgIC0+ICAwLjENCi1kZHJlbTMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwDQotZGRyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDANCi1kZHJlbTMyOCByZW1haW5kZXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDANCi1kZHJlbTMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjENCi1kZHJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwDQotZGRyZW0zMzEgcmVtYWluZGVyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDANCi1kZHJlbTMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDANCi1kZHJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCi1kZHJlbTMzNCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCi1kZHJlbTMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQotZGRyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCi1kZHJlbTMzNyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQotZGRyZW0zMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MA0KLWRkcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQotDQotZGRyZW0zNDAgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAwLjUwMDAwMDANCi1kZHJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwDQotZGRyZW0zNDIgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwDQotZGRyZW0zNDMgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDANCi1kZHJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwDQotZGRyZW0zNDUgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03DQotZGRyZW0zNDYgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOA0KLWRkcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05DQotZGRyZW0zNDggcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMA0KLWRkcmVtMzQ5IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExDQotZGRyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyDQotDQotZGRyZW0zNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMNCi1kZHJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQ0KLWRkcmVtMzUzIHJlbWFpbmRlciAgIDQuMSAgIDIgICAgLT4gIDAuMQ0KLWRkcmVtMzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxDQotZGRyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQ0KLWRkcmVtMzU2IHJlbWFpbmRlciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQ0KLWRkcmVtMzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxDQotZGRyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQ0KLWRkcmVtMzU5IHJlbWFpbmRlciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcNCi0NCi1kZHJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQ0KLWRkcmVtMzYxIHJlbWFpbmRlciAgIDAuOCAgIDEyICAgICAtPiAgMC44DQotZGRyZW0zNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjANCi1kZHJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMg0KLWRkcmVtMzY0IHJlbWFpbmRlciAgIDAuODAwICAgMTIgICAtPiAgMC44MDANCi1kZHJlbTM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwDQotZGRyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMA0KLQ0KLWRkcmVtMzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDANCi0NCi1kZHJlbTM4MSByZW1haW5kZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMA0KLWRkcmVtMzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcNCi1kZHJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgNCi1kZHJlbTM4NCByZW1haW5kZXIgMTIzNDUgIDEuMDEgICAgICAtPiAgMC43OA0KLWRkcmVtMzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgNCi1kZHJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMw0KLWRkcmVtMzg3IHJlbWFpbmRlciAxMjM0NSAgNCAgICAgICAgIC0+ICAxDQotZGRyZW0zODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMg0KLWRkcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQNCi1kZHJlbTM5MCByZW1haW5kZXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45DQotZGRyZW0zOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMNCi1kZHJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkNCi1kZHJlbTM5MyByZW1haW5kZXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5DQotZGRyZW0zOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDANCi1kZHJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyDQotZGRyZW0zOTYgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDIuNTMyDQotZGRyZW0zOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYNCi1kZHJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wDQotDQotLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMNCi1kZHJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQ0KLWRkcmVtNDAyIHJlbWFpbmRlciAgIDAuNTUgICAgICAgIDEgICAtPiAgMC41NQ0KLWRkcmVtNDAzIHJlbWFpbmRlciAgIDAuNTU1ICAgICAgIDEgICAtPiAgMC41NTUNCi1kZHJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQ0KLWRkcmVtNDA1IHJlbWFpbmRlciAgIDAuNTU1NTUgICAgIDEgICAtPiAgMC41NTU1NQ0KLWRkcmVtNDA2IHJlbWFpbmRlciAgIDAuNTU1NTU1ICAgIDEgICAtPiAgMC41NTU1NTUNCi1kZHJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQ0KLWRkcmVtNDA4IHJlbWFpbmRlciAgIDAuNTU1NTU1NTUgIDEgICAtPiAgMC41NTU1NTU1NQ0KLWRkcmVtNDA5IHJlbWFpbmRlciAgIDAuNTU1NTU1NTU1IDEgICAtPiAgMC41NTU1NTU1NTUNCi0NCi0tLSBmb2xkZG93bnMNCi1kZHJlbTQyMSByZW1haW5kZXIgICAxRSszODQgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcmVtNDIyIHJlbWFpbmRlciAgIDFFKzM4NCAgMUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkDQotZGRyZW00MjMgcmVtYWluZGVyICAgMUUrMzg0ICAyRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJlbTQyNCByZW1haW5kZXIgICAxRSszODQgIDNFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcmVtNDI1IHJlbWFpbmRlciAgIDFFKzM4NCAgNEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQotZGRyZW00MjYgcmVtYWluZGVyICAgMUUrMzg0ICA1RSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJlbTQyNyByZW1haW5kZXIgICAxRSszODQgIDZFKzM4MyAgLT4gICA0LjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLWRkcmVtNDI4IHJlbWFpbmRlciAgIDFFKzM4NCAgN0UrMzgzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQotZGRyZW00MjkgcmVtYWluZGVyICAgMUUrMzg0ICA4RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJlbTQzMCByZW1haW5kZXIgICAxRSszODQgIDlFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KLS0tIHRpbmllcw0KLWRkcmVtNDMxIHJlbWFpbmRlciAgIDFFLTM5NyAgMUUtMzk4ICAtPiAgIDBFLTM5OA0KLWRkcmVtNDMyIHJlbWFpbmRlciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OA0KLWRkcmVtNDMzIHJlbWFpbmRlciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwNCi1kZHJlbTQzNCByZW1haW5kZXIgICAxRS0zOTcgIDRFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsDQotZGRyZW00MzUgcmVtYWluZGVyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4DQotZGRyZW00MzYgcmVtYWluZGVyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAgNEUtMzk4IFN1Ym5vcm1hbA0KLWRkcmVtNDM3IHJlbWFpbmRlciAgIDFFLTM5NyAgN0UtMzk4ICAtPiAgIDNFLTM5OCBTdWJub3JtYWwNCi1kZHJlbTQzOCByZW1haW5kZXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsDQotZGRyZW00MzkgcmVtYWluZGVyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcmVtNDQwIHJlbWFpbmRlciAgIDFFLTM5NyAxMEUtMzk4ICAtPiAgIDBFLTM5OA0KLWRkcmVtNDQxIHJlbWFpbmRlciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwNCi1kZHJlbTQ0MiByZW1haW5kZXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsDQotZGRyZW00NDMgcmVtYWluZGVyIDEwMEUtMzk3IDIwRS0zOTggIC0+ICAgMEUtMzk4DQotZGRyZW00NDQgcmVtYWluZGVyIDEwMEUtMzk3IDIxRS0zOTggIC0+IDEuM0UtMzk3IFN1Ym5vcm1hbA0KLWRkcmVtNDQ1IHJlbWFpbmRlciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwNCi0NCi0tLSB6ZXJvIHNpZ25zDQotZGRyZW02NTAgcmVtYWluZGVyICAxICAxIC0+ICAwDQotZGRyZW02NTEgcmVtYWluZGVyIC0xICAxIC0+IC0wDQotZGRyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwDQotZGRyZW02NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wDQotZGRyZW02NTQgcmVtYWluZGVyICAwICAxIC0+ICAwDQotZGRyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wDQotZGRyZW02NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwDQotZGRyZW02NTcgcmVtYWluZGVyIC0wIC0xIC0+IC0wDQotZGRyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMA0KLWRkcmVtNjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDANCi0NCi0tLSBTcGVjaWFscw0KLWRkcmVtNjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjgxIHJlbWFpbmRlciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjg0IHJlbWFpbmRlciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjg3IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kZHJlbTY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTY5MSByZW1haW5kZXIgLTEgICAgIEluZiAgIC0+IC0xDQotZGRyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMA0KLWRkcmVtNjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTANCi1kZHJlbTY5NCByZW1haW5kZXIgIDEgICAgIEluZiAgIC0+ICAxDQotZGRyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLWRkcmVtNjk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzAyIHJlbWFpbmRlciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA1IHJlbWFpbmRlciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA4IHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kZHJlbTcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xDQotZGRyZW03MTEgcmVtYWluZGVyIC0wICAgIC1JbmYgICAtPiAtMA0KLWRkcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDANCi1kZHJlbTcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxDQotZGRyZW03MTQgcmVtYWluZGVyICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRkcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcmVtNzIxIHJlbWFpbmRlciAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRkcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkcmVtNzIzIHJlbWFpbmRlciAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkcmVtNzI0IHJlbWFpbmRlciAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRkcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTg0KLWRkcmVtNzI2IHJlbWFpbmRlciAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkcmVtNzI3IHJlbWFpbmRlciAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRkcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkcmVtNzI5IHJlbWFpbmRlciAgTmFOIC1OYU4gICAgLT4gIE5hTg0KLWRkcmVtNzMwIHJlbWFpbmRlciAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRkcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkcmVtNzMyIHJlbWFpbmRlciAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkcmVtNzMzIHJlbWFpbmRlciAtMCAgIC1OYU4gICAgLT4gLU5hTg0KLWRkcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkcmVtNzM1IHJlbWFpbmRlciAgMSAgIC1OYU4gICAgLT4gLU5hTg0KLWRkcmVtNzM2IHJlbWFpbmRlciAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkcmVtNzQxIHJlbWFpbmRlciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzQ0IHJlbWFpbmRlciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzQ3IHJlbWFpbmRlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzUxIHJlbWFpbmRlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzU0IHJlbWFpbmRlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcmVtNzU3IHJlbWFpbmRlciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2luZyBOYU5zDQotZGRyZW03NjAgcmVtYWluZGVyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xDQotZGRyZW03NjEgcmVtYWluZGVyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NjMgcmVtYWluZGVyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uDQotZGRyZW03NjQgcmVtYWluZGVyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQ0KLWRkcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONg0KLWRkcmVtNzY2IHJlbWFpbmRlciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMNCi1kZHJlbTc2NyByZW1haW5kZXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0DQotZGRyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQ0KLWRkcmVtNzY5IHJlbWFpbmRlciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYNCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kZHJlbTc3MCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgNg0KLWRkcmVtNzcxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAwDQotZGRyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW03NzMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotDQotLS0gbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRkcmVtODAxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRkcmVtODAyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRkcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRkcmVtODA0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRkcmVtODA1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRkcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRkcmVtODA3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRkcmVtODA4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRkcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRkcmVtODEwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRkcmVtODExIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNg0KLWRkcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLWRkcmVtODIxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRkcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KLWRkcmVtODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRkcmVtODI0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRkcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KLWRkcmVtODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRkcmVtODI3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRkcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLWRkcmVtODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRkcmVtODMwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRkcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNg0KLWRkcmVtODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZGl2aWRlaW50DQotZGRyZW04NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjANCi1kZHJlbTg0MSByZW1haW5kZXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNA0KLWRkcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41DQotZGRyZW04NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICAwLjkNCi1kZHJlbTg0NCByZW1haW5kZXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gIDAuOTk5DQotZGRyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzDQotZGRyZW04NTEgcmVtYWluZGVyICAxMDAwMDAwMyAgICAgIDUgIC0+ICAzDQotZGRyZW04NTIgcmVtYWluZGVyICAxMDAwMDAzICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTUgcmVtYWluZGVyICAxMDAzICAgICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzDQotZGRyZW04NTggcmVtYWluZGVyICAxICAgICAgICAgICAgIDUgIC0+ICAxDQotDQotLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZHJlbTg2MCByZW1haW5kZXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcmVtODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJlbTg2MyByZW1haW5kZXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcmVtODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3MSByZW1haW5kZXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg3NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg4MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwDQotZGRyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMA0KLWRkcmVtODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzANCi1kZHJlbTg4MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwDQotZGRyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMA0KLWRkcmVtODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDANCi1kZHJlbTg4NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwDQotDQotZGRyZW04OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODkxIHJlbWFpbmRlciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODk0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW04OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtODk3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTAxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzANCi1kZHJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwDQotZGRyZW05MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMA0KLWRkcmVtOTA0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzANCi1kZHJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwDQotZGRyZW05MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMA0KLQ0KLWRkcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MTIgcmVtYWluZGVyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzANCi1kZHJlbTkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwDQotZGRyZW05MjIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMA0KLWRkcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzANCi1kZHJlbTkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwDQotZGRyZW05MjUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gICAzMA0KLWRkcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDANCi0NCi1kZHJlbTkzMCByZW1haW5kZXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkzMyByZW1haW5kZXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTkzNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMA0KLWRkcmVtOTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzANCi1kZHJlbTk0MCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwDQotZGRyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMA0KLWRkcmVtOTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzANCi1kZHJlbTk0MyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwDQotZGRyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMA0KLWRkcmVtOTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjANCi1kZHJlbTk0NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgICA2DQotDQotZGRyZW05NTAgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRyZW05NjEgcmVtYWluZGVyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjMgcmVtYWluZGVyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjQgcmVtYWluZGVyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjYgcmVtYWluZGVyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjcgcmVtYWluZGVyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRyZW05NjkgcmVtYWluZGVyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwDQotDQotZGRyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5DQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQotZGRyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW0xMDUyIHJlbWFpbmRlciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW0xMDUzIHJlbWFpbmRlciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRyZW0xMDU1IHJlbWFpbmRlciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3Nw0KLWRkcmVtMTA1NiByZW1haW5kZXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcNCi1kZHJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3DQotZGRyZW0xMDU4IHJlbWFpbmRlciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3Nw0KLQ0KLS0tIGRlc3RydWN0aXZlIHN1YnRyYWN0DQotZGRyZW0xMTAxIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0Ng0KLWRkcmVtMTEwMiByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxLjAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NTcNCi1kZHJlbTExMDMgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NjY4DQotZGRyZW0xMTA0IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NSAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNw0KLWRkcmVtMTEwNSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgMy42OTEzNTgwMjc0NjkxMzcNCi1kZHJlbTExMDYgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgMC42OTEzNTc4MDI0Njk2DQotZGRyZW0xMTA3IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDQuOTk5OTk5OTk5OTk5OTkgIC0+ICAgMy40NjkxMzU3ODAyNDY5MQ0KLWRkcmVtMTEwOCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuOTk5OTk5OTk5OTk5OTk5ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTENCi1kZHJlbTExMDkgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzUzMDg2NDIxOTc1MzA5DQotZGRyZW0xMTEwIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDUuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMy41MzA4NjQyMTk3NTMxMA0KLWRkcmVtMTExMSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNS4wMDAwMDAwMDAwMDAxICAtPiAgICAxLjMwODY0MjE5NzUzMTQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRyZW0xMDAwIHJlbWFpbmRlciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRSZW1haW5kZXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCitkZHJlbTAwMSByZW1haW5kZXIgIDEgICAgIDEgICAgLT4gIDAKK2RkcmVtMDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMAorZGRyZW0wMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxCitkZHJlbTAwNCByZW1haW5kZXIgIDIgICAgIDIgICAgLT4gIDAKK2RkcmVtMDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMAorZGRyZW0wMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwCitkZHJlbTAwNyByZW1haW5kZXIgIDEgICAgIDMgICAgLT4gIDEKK2RkcmVtMDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMgorZGRyZW0wMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwCisKK2RkcmVtMDEwIHJlbWFpbmRlciAgMi40ICAgMSAgICAtPiAgMC40CitkZHJlbTAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNAorZGRyZW0wMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40CitkZHJlbTAxMyByZW1haW5kZXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2RkcmVtMDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MAorZGRyZW0wMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMAorZGRyZW0wMTYgcmVtYWluZGVyICAyLjQgICAyICAgIC0+ICAwLjQKK2RkcmVtMDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDAKK2RkcmVtMDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMAorZGRyZW0wMTkgcmVtYWluZGVyICAyMCAgICAyMCAgIC0+ICAwCisKK2RkcmVtMDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwCitkZHJlbTAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQorZGRyZW0wMjIgcmVtYWluZGVyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZGRyZW0wMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCitkZHJlbTAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKK2RkcmVtMDI1IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkZHJlbTAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQorZGRyZW0wMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDEKK2RkcmVtMDMyIHJlbWFpbmRlciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2RkcmVtMDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxCitkZHJlbTAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQorZGRyZW0wMzUgcmVtYWluZGVyICAxICAgICA2NCAgICAgLT4gIDEKK2RkcmVtMDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxCitkZHJlbTA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQorZGRyZW0wNDIgcmVtYWluZGVyICAxICAgIC04ICAgICAgLT4gIDEKK2RkcmVtMDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxCitkZHJlbTA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQorZGRyZW0wNDUgcmVtYWluZGVyICAxICAgIC02NCAgICAgLT4gIDEKK2RkcmVtMDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQorZGRyZW0wNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xCitkZHJlbTA1MiByZW1haW5kZXIgLTEgICAgIDggICAgICAtPiAgLTEKK2RkcmVtMDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQorZGRyZW0wNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xCitkZHJlbTA1NSByZW1haW5kZXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2RkcmVtMDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQorZGRyZW0wNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xCitkZHJlbTA2MiByZW1haW5kZXIgLTEgICAgLTggICAgICAtPiAgLTEKK2RkcmVtMDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQorZGRyZW0wNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xCitkZHJlbTA2NSByZW1haW5kZXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZGRyZW0wNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDAKK2RkcmVtMDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2RkcmVtMDY4IHJlbWFpbmRlciAgOTk5OTk5OTk5LjUgICAxICAtPiAwLjUKK2RkcmVtMDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkKK2RkcmVtMDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQorZGRyZW0wNzEgcmVtYWluZGVyICA5OTk5OTkuOTk5OTk5IDEgIC0+IDAuOTk5OTk5CitkZHJlbTA3MiByZW1haW5kZXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorZGRyZW0wNzMgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKK2RkcmVtMDc0IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAyICAtPiAxCitkZHJlbTA3NSByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAorZGRyZW0wNzYgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IDMKKworZGRyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2RkcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKK2RkcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkZHJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZGRyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKK2RkcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkZHJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkZHJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAorZGRyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2RkcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZGRyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAorZGRyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2RkcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZGRyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKK2RkcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkZHJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorZGRyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0CistLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgorLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KK2RkcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZGRyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCitkZHJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDAKK2RkcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCitkZHJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZGRyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wCitkZHJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKK2RkcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCitkZHJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMAorCistLSAwLjVlcnMKK2RkcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZGRyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkZHJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZGRyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZGRyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2RkcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RkcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDEKK2RkcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKK2RkcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKK2RkcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDEKK2RkcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKK2RkcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKK2RkcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDEKK2RkcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKK2RkcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKK2RkcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RkcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKK2RkcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKK2RkcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDAKK2RkcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKK2RkcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKK2RkcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDAKK2RkcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKK2RkcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKK2RkcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDAKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RkcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCitkZHJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZGRyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2RkcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCitkZHJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkZHJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCitkZHJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAorZGRyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2RkcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkZHJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAorZGRyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDAKKworLS0gaGlnaCBYcworZGRyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkZHJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZGRyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQorZGRyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAorZGRyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMworZGRyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKK2RkcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCitkZHJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMworZGRyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMworZGRyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2RkcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZGRyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK2RkcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2RkcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2RkcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMworZGRyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMworZGRyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMworZGRyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKK2RkcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAorZGRyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkZHJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK2RkcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2RkcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkZHJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK2RkcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAorZGRyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2RkcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQorZGRyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZGRyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2RkcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorZGRyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkZHJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkZHJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorZGRyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkZHJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2RkcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZGRyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2RkcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2RkcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2RkcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2RkcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCitkZHJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCitkZHJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAKK2RkcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwCitkZHJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwCitkZHJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2RkcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2RkcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05CitkZHJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkZHJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZGRyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCisKK2RkcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkZHJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQorZGRyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCitkZHJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZGRyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZGRyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCitkZHJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZGRyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZGRyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCitkZHJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQorZGRyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2RkcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCitkZHJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMgorZGRyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZGRyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorZGRyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCitkZHJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCisKK2RkcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkZHJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3CitkZHJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgKK2RkcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4CitkZHJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44CitkZHJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMworZGRyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2RkcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKK2RkcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2RkcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2RkcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCitkZHJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2RkcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2RkcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCitkZHJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyCitkZHJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKK2RkcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CitkZHJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkZHJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZGRyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1CitkZHJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1CitkZHJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQorZGRyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1CitkZHJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1CitkZHJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQorZGRyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1CitkZHJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1CisKKy0tIGZvbGRkb3ducworZGRyZW00MjEgcmVtYWluZGVyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtNDIyIHJlbWFpbmRlciAgIDFFKzM4NCAgMUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJlbTQyMyByZW1haW5kZXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRyZW00MjQgcmVtYWluZGVyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI1IHJlbWFpbmRlciAgIDFFKzM4NCAgNEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQyNiByZW1haW5kZXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRyZW00MjcgcmVtYWluZGVyICAgMUUrMzg0ICA2RSszODMgIC0+ICAgNC4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI4IHJlbWFpbmRlciAgIDFFKzM4NCAgN0UrMzgzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQyOSByZW1haW5kZXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MzAgcmVtYWluZGVyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKKy0tIHRpbmllcworZGRyZW00MzEgcmVtYWluZGVyICAgMUUtMzk3ICAxRS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQzMiByZW1haW5kZXIgICAxRS0zOTcgIDJFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDMzIHJlbWFpbmRlciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDM0IHJlbWFpbmRlciAgIDFFLTM5NyAgNEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwKK2RkcmVtNDM1IHJlbWFpbmRlciAgIDFFLTM5NyAgNUUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00MzYgcmVtYWluZGVyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAgNEUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzcgcmVtYWluZGVyICAgMUUtMzk3ICA3RS0zOTggIC0+ICAgM0UtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzggcmVtYWluZGVyICAgMUUtMzk3ICA4RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzkgcmVtYWluZGVyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAorZGRyZW00NDAgcmVtYWluZGVyICAgMUUtMzk3IDEwRS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQ0MSByZW1haW5kZXIgICAxRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCitkZHJlbTQ0MiByZW1haW5kZXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCitkZHJlbTQ0MyByZW1haW5kZXIgMTAwRS0zOTcgMjBFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDQ0IHJlbWFpbmRlciAxMDBFLTM5NyAyMUUtMzk4ICAtPiAxLjNFLTM5NyBTdWJub3JtYWwKK2RkcmVtNDQ1IHJlbWFpbmRlciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZGRyZW02NTAgcmVtYWluZGVyICAxICAxIC0+ICAwCitkZHJlbTY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTAKK2RkcmVtNjUyIHJlbWFpbmRlciAgMSAtMSAtPiAgMAorZGRyZW02NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wCitkZHJlbTY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDAKK2RkcmVtNjU1IHJlbWFpbmRlciAtMCAgMSAtPiAtMAorZGRyZW02NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwCitkZHJlbTY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTAKK2RkcmVtNjU4IHJlbWFpbmRlciAgMC4wMCAgMSAgLT4gIDAuMDAKK2RkcmVtNjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDAKKworLS0gU3BlY2lhbHMKK2RkcmVtNjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODEgcmVtYWluZGVyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODQgcmVtYWluZGVyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODcgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZHJlbTY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjkxIHJlbWFpbmRlciAtMSAgICAgSW5mICAgLT4gLTEKK2RkcmVtNjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDAKK2RkcmVtNjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTAKK2RkcmVtNjk0IHJlbWFpbmRlciAgMSAgICAgSW5mICAgLT4gIDEKK2RkcmVtNjk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RkcmVtNjk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJlbTcwMCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwMyByZW1haW5kZXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwNiByZW1haW5kZXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwOSByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZHJlbTcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xCitkZHJlbTcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wCitkZHJlbTcxMiByZW1haW5kZXIgIDAgICAgLUluZiAgIC0+ICAwCitkZHJlbTcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxCitkZHJlbTcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZHJlbTcxNSByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyZW03MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFOCitkZHJlbTcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkcmVtNzIzIHJlbWFpbmRlciAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRyZW03MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFOCitkZHJlbTcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK2RkcmVtNzI2IHJlbWFpbmRlciAgTmFOICAxICAgICAgLT4gIE5hTgorZGRyZW03MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZHJlbTcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkcmVtNzI5IHJlbWFpbmRlciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZGRyZW03MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZHJlbTczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzMyIHJlbWFpbmRlciAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRyZW03MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFOCitkZHJlbTczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzM1IHJlbWFpbmRlciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZGRyZW03MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZHJlbTczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRyZW03NDEgcmVtYWluZGVyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDQgcmVtYWluZGVyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDcgcmVtYWluZGVyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTEgcmVtYWluZGVyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTQgcmVtYWluZGVyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTcgcmVtYWluZGVyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworZGRyZW03NjAgcmVtYWluZGVyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkZHJlbTc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NjMgcmVtYWluZGVyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExCitkZHJlbTc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK2RkcmVtNzY2IHJlbWFpbmRlciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2RkcmVtNzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQKK2RkcmVtNzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK2RkcmVtNzY5IHJlbWFpbmRlciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkZHJlbTc3MCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgNgorZGRyZW03NzEgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKK2RkcmVtNzcyICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW03NzMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkcmVtODAxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRyZW04MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkZHJlbTgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2RkcmVtODA0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRyZW04MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkZHJlbTgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2RkcmVtODA3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRyZW04MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkZHJlbTgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2RkcmVtODEwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRyZW04MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CitkZHJlbTgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworZGRyZW04MjEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJlbTgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RkcmVtODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRyZW04MjQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJlbTgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RkcmVtODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRyZW04MjcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJlbTgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RkcmVtODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRyZW04MzAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJlbTgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RkcmVtODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZGRyZW04NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjAKK2RkcmVtODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40CitkZHJlbTg0MiByZW1haW5kZXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZGRyZW04NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICAwLjkKK2RkcmVtODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgMC45OTkKK2RkcmVtODUwIHJlbWFpbmRlciAgMTAwMDAwMDAzICAgICA1ICAtPiAgMworZGRyZW04NTEgcmVtYWluZGVyICAxMDAwMDAwMyAgICAgIDUgIC0+ICAzCitkZHJlbTg1MiByZW1haW5kZXIgIDEwMDAwMDMgICAgICAgNSAgLT4gIDMKK2RkcmVtODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMworZGRyZW04NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NSByZW1haW5kZXIgIDEwMDMgICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMworZGRyZW04NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1OCByZW1haW5kZXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKKworLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkcmVtODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RkcmVtODYxIHJlbWFpbmRlciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RkcmVtODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RkcmVtODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RkcmVtODY0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RkcmVtODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODcyIHJlbWFpbmRlciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc4IHJlbWFpbmRlciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK2RkcmVtODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2RkcmVtODgxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzAKK2RkcmVtODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK2RkcmVtODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2RkcmVtODg0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzAKK2RkcmVtODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK2RkcmVtODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZGRyZW04OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTIgcmVtYWluZGVyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04OTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZGRyZW05MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMAorZGRyZW05MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorZGRyZW05MDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZGRyZW05MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMAorZGRyZW05MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorZGRyZW05MDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gICAxMAorZGRyZW05MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMAorCitkZHJlbTkxMCByZW1haW5kZXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxMyByZW1haW5kZXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwCitkZHJlbTkyMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCitkZHJlbTkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkZHJlbTkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwCitkZHJlbTkyMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCitkZHJlbTkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkZHJlbTkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwCitkZHJlbTkyNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCisKK2RkcmVtOTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTMxIHJlbWFpbmRlciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTM0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTM3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2RkcmVtOTQxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzAKK2RkcmVtOTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK2RkcmVtOTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2RkcmVtOTQ0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzAKK2RkcmVtOTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjAKK2RkcmVtOTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYKKworZGRyZW05NTAgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTk2MSByZW1haW5kZXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTYyIHJlbWFpbmRlciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjMgcmVtYWluZGVyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2NCByZW1haW5kZXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY1IHJlbWFpbmRlciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjYgcmVtYWluZGVyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2NyByZW1haW5kZXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY4IHJlbWFpbmRlciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjkgcmVtYWluZGVyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwCisKK2RkcmVtOTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RkcmVtMTA1MSByZW1haW5kZXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW0xMDUyIHJlbWFpbmRlciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTMgcmVtYWluZGVyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtMTA1NCByZW1haW5kZXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW0xMDU1IHJlbWFpbmRlciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NworZGRyZW0xMDU2IHJlbWFpbmRlciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3NworZGRyZW0xMDU3IHJlbWFpbmRlciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZGRyZW0xMDU4IHJlbWFpbmRlciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NworCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAorZGRyZW0xMTAxIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0NgorZGRyZW0xMTAyIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC42NTQzMjEwOTg3NjU1NworZGRyZW0xMTAzIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIDAuNTQzMjEwOTg3NjY2OAorZGRyZW0xMTA0IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NSAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNworZGRyZW0xMTA1IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAzLjY5MTM1ODAyNzQ2OTEzNworZGRyZW0xMTA2IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgIDAuNjkxMzU3ODAyNDY5NgorZGRyZW0xMTA3IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDQuOTk5OTk5OTk5OTk5OTkgIC0+ICAgMy40NjkxMzU3ODAyNDY5MQorZGRyZW0xMTA4IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQorZGRyZW0xMTA5IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQorZGRyZW0xMTEwIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDUuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMy41MzA4NjQyMTk3NTMxMAorZGRyZW0xMTExIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuMzA4NjQyMTk3NTMxNAorCistLSBOdWxsIHRlc3RzCitkZHJlbTEwMDAgcmVtYWluZGVyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0CmluZGV4IDZiYTY0ZWIuLjhkYTlhZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlck5lYXIuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QKQEAgLTEsNjI5ICsxLDYyOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHJlbWFpbmRlci1uZWFyICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQotZGRybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMA0KLWRkcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDANCi1kZHJtbjAwMyByZW1haW5kZXJuZWFyICAxICAgICAyICAgIC0+ICAxDQotZGRybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMA0KLWRkcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDANCi1kZHJtbjAwNiByZW1haW5kZXJuZWFyICAwICAgICAyICAgIC0+ICAwDQotZGRybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQ0KLWRkcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTENCi1kZHJtbjAwOSByZW1haW5kZXJuZWFyICAzICAgICAzICAgIC0+ICAwDQotDQotZGRybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40DQotZGRybW4wMTEgcmVtYWluZGVybmVhciAgMi40ICAgLTEgICAtPiAgMC40DQotZGRybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNA0KLWRkcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQNCi1kZHJtbjAxNCByZW1haW5kZXJuZWFyICAyLjQwICAxICAgIC0+ICAwLjQwDQotZGRybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDANCi1kZHJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQNCi1kZHJtbjAxNyByZW1haW5kZXJuZWFyICAyLjQwMCAyICAgIC0+ICAwLjQwMA0KLWRkcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDANCi1kZHJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwDQotDQotZGRybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwDQotZGRybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxDQotZGRybW4wMjIgcmVtYWluZGVybmVhciAgNSAgICAgMi4wICAgIC0+ICAxLjANCi1kZHJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwDQotZGRybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KLWRkcm1uMDI1IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCi0NCi1kZHJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDENCi1kZHJtbjAzMSByZW1haW5kZXJuZWFyICAxICAgICA0ICAgICAgLT4gIDENCi1kZHJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDENCi0NCi1kZHJtbjAzMyByZW1haW5kZXJuZWFyICAxICAgICAxNiAgICAgLT4gIDENCi1kZHJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDENCi1kZHJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDENCi1kZHJtbjA0MCByZW1haW5kZXJuZWFyICAxICAgIC0yICAgICAgLT4gIDENCi1kZHJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDENCi1kZHJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDENCi1kZHJtbjA0MyByZW1haW5kZXJuZWFyICAxICAgIC0xNiAgICAgLT4gIDENCi1kZHJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDENCi1kZHJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDENCi1kZHJtbjA1MCByZW1haW5kZXJuZWFyIC0xICAgICAyICAgICAgLT4gIC0xDQotZGRybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQ0KLWRkcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTENCi1kZHJtbjA1MyByZW1haW5kZXJuZWFyIC0xICAgICAxNiAgICAgLT4gIC0xDQotZGRybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQ0KLWRkcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTENCi1kZHJtbjA2MCByZW1haW5kZXJuZWFyIC0xICAgIC0yICAgICAgLT4gIC0xDQotZGRybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQ0KLWRkcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTENCi1kZHJtbjA2MyByZW1haW5kZXJuZWFyIC0xICAgIC0xNiAgICAgLT4gIC0xDQotZGRybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQ0KLWRkcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTENCi0NCi1kZHJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjENCi1kZHJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMNCi1kZHJtbjA2OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkgICAgIDEgIC0+IDANCi1kZHJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNA0KLWRkcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQ0KLWRkcm1uMDcxIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gLTAuMQ0KLWRkcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxDQotZGRybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDENCi1kZHJtbjA3NCByZW1haW5kZXJuZWFyICA5ICAgICAgICAgICAgIDEgIC0+IDANCi1kZHJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDANCi1kZHJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xDQotZGRybW4wNzcgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwDQotZGRybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQ0KLQ0KLWRkcm1uMDgwIHJlbWFpbmRlcm5lYXIgIDAuICAgICAgICAgICAgMSAgLT4gMA0KLWRkcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wDQotZGRybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwDQotZGRybW4wODMgcmVtYWluZGVybmVhciAgMC4wMEUrOSAgICAgICAxICAtPiAwDQotZGRybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwDQotZGRybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwDQotZGRybW4wODYgcmVtYWluZGVybmVhciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjANCi1kZHJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDANCi1kZHJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDANCi1kZHJtbjA4OSByZW1haW5kZXJuZWFyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwDQotZGRybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDANCi1kZHJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDANCi1kZHJtbjA5MiByZW1haW5kZXJuZWFyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwDQotZGRybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03DQotZGRybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04DQotZGRybW4wOTUgcmVtYWluZGVybmVhciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NA0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQotZGRybW4xMDEgcmVtYWluZGVybmVhciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4xMDQgcmVtYWluZGVybmVhciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRkcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kZHJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0DQotLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3INCi0tLSByZW1haW5kZXItbmVhciwgYW55d2F5XQ0KLWRkcm1uMTA3IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTEwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTEzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTE2IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTIxIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMTI0IHJlbWFpbmRlcm5lYXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB6ZXJvcyBvbiBsZWZ0DQotZGRybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMA0KLWRkcm1uMTMxIHJlbWFpbmRlcm5lYXIgIDAgICAgIC0xICAgLT4gIDANCi1kZHJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjANCi1kZHJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjANCi1kZHJtbjEzNCByZW1haW5kZXJuZWFyIC0wICAgICAgMSAgIC0+IC0wDQotZGRybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMA0KLWRkcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMA0KLWRkcm1uMTM3IHJlbWFpbmRlcm5lYXIgLTAuMCAgIC0xICAgLT4gLTAuMA0KLQ0KLS0tIDAuNWVycw0KLWRkcm1uMTQzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCi1kZHJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41DQotZGRybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kZHJtbjE0NiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCi1kZHJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRkcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZGRybW4xNDkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQotDQotLS0gc3RlYWRpZXMNCi1kZHJtbjE1MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMA0KLWRkcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxDQotZGRybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDENCi1kZHJtbjE1MyByZW1haW5kZXJuZWFyICAxICA0ICAgLT4gMQ0KLWRkcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxDQotZGRybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDENCi1kZHJtbjE1NiByZW1haW5kZXJuZWFyICAxICA3ICAgLT4gMQ0KLWRkcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxDQotZGRybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDENCi1kZHJtbjE1OSByZW1haW5kZXJuZWFyICAxICAxMCAgLT4gMQ0KLWRkcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwDQotZGRybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDANCi1kZHJtbjE2MiByZW1haW5kZXJuZWFyICAzICAxICAgLT4gMA0KLWRkcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwDQotZGRybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDANCi1kZHJtbjE2NSByZW1haW5kZXJuZWFyICA2ICAxICAgLT4gMA0KLWRkcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwDQotZGRybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDANCi1kZHJtbjE2OCByZW1haW5kZXJuZWFyICA5ICAxICAgLT4gMA0KLWRkcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KLWRkcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMA0KLWRkcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMA0KLWRkcm1uMTczIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMA0KLWRkcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMA0KLWRkcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMA0KLQ0KLS0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQotZGRybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4yMDIgcmVtYWluZGVybmVhciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZGRybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjIwNSByZW1haW5kZXJuZWFyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjIwOCByZW1haW5kZXJuZWFyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjIxMSByZW1haW5kZXJuZWFyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24NCi1kZHJtbjIyMSByZW1haW5kZXJuZWFyIDIuMSAgICAgMyAgIC0+IC0wLjkNCi1kZHJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yDQotZGRybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQ0KLWRkcm1uMjI0IHJlbWFpbmRlcm5lYXIgLTEwICAgICAzICAgLT4gLTENCi1kZHJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMg0KLWRkcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xDQotZGRybW4yMjcgcmVtYWluZGVybmVhciAgIDMuNiAgIDEuMyAtPiAtMC4zDQotDQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KLWRkcm1uMjMxIHJlbWFpbmRlcm5lYXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMA0KLWRkcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMA0KLWRkcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMA0KLWRkcm1uMjM0IHJlbWFpbmRlcm5lYXIgIC0wLjUyIDEuMDIwIC0+ICAwLjUwMA0KLWRkcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMA0KLQ0KLS0tIGhpZ2ggWHMNCi1kZHJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMA0KLQ0KLS0tIGRkcm1uM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsDQotZGRybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDENCi1kZHJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMA0KLWRkcm1uMzAzIHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwICAgIC0+ICAzDQotZGRybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzDQotZGRybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzDQotZGRybW4zMDYgcmVtYWluZGVybmVhciAgIDEzICAgMTAwMCAgLT4gIDEzDQotZGRybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMNCi1kZHJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMNCi1kZHJtbjMwOSByZW1haW5kZXJuZWFyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzDQotZGRybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzDQotZGRybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMNCi1kZHJtbjMxMiByZW1haW5kZXJuZWFyICAgMTAuMzMgMTAgICAtPiAgMC4zMw0KLWRkcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMNCi1kZHJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMw0KLWRkcm1uMzE1IHJlbWFpbmRlcm5lYXIgICAxMDMzICAxMCAgIC0+ICAzDQotZGRybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3DQotZGRybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMA0KLWRkcm1uMzE4IHJlbWFpbmRlcm5lYXIgICAxMDIuMCAgMyAgIC0+ICAwLjANCi1kZHJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wDQotZGRybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDANCi1kZHJtbjMyMSByZW1haW5kZXJuZWFyICAgMi40MDAgIDEgICAtPiAgMC40MDANCi1kZHJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40DQotZGRybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNA0KLWRkcm1uMzI0IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMA0KLWRkcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjENCi1kZHJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMA0KLWRkcm1uMzI3IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMA0KLWRkcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDANCi1kZHJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xDQotZGRybW4zMzAgcmVtYWluZGVybmVhciAgIDEuMDAgICAwLjMgLT4gIDAuMTANCi1kZHJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDANCi1kZHJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwDQotZGRybW4zMzMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRkcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCi1kZHJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRkcm1uMzM2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRkcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQotZGRybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kZHJtbjMzOSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi1kZHJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNw0KLWRkcm1uMzQxIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAtMUUtOA0KLWRkcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkNCi1kZHJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTANCi1kZHJtbjM0NCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgLTFFLTExDQotZGRybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNw0KLWRkcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04DQotZGRybW4zNDcgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05DQotZGRybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTANCi1kZHJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTENCi1kZHJtbjM1MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyDQotDQotZGRybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzDQotZGRybW4zNTIgcmVtYWluZGVybmVhciAgIDUgICAyICAgIC0+ICAxDQotZGRybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQ0KLWRkcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQ0KLWRkcm1uMzU1IHJlbWFpbmRlcm5lYXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxDQotZGRybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQ0KLWRkcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQ0KLWRkcm1uMzU4IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxDQotZGRybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcNCi0NCi1kZHJtbjM2MCByZW1haW5kZXJuZWFyICAgMS4yICAgMC43MzQ1IC0+IC0wLjI2OTANCi1kZHJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgNCi1kZHJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjANCi1kZHJtbjM2MyByZW1haW5kZXJuZWFyICAgMC44ICAgMC4zICAgIC0+IC0wLjENCi1kZHJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMA0KLWRkcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwDQotZGRybW4zNjYgcmVtYWluZGVybmVhciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDANCi0NCi0tLSByb3VuZCB0byBldmVuDQotZGRybW4zNzEgcmVtYWluZGVybmVhciAgIDEyMSAgICAgMiAgICAtPiAgMQ0KLWRkcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDANCi1kZHJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xDQotZGRybW4zNzQgcmVtYWluZGVybmVhciAgIDEyNCAgICAgMiAgICAtPiAgMA0KLWRkcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDENCi1kZHJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwDQotZGRybW4zNzcgcmVtYWluZGVybmVhciAgIDEyNyAgICAgMiAgICAtPiAtMQ0KLQ0KLWRkcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMA0KLWRkcm1uMzgyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAwMSAgICAtPiAtMC4yMzQ0DQotZGRybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMw0KLWRkcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMw0KLWRkcm1uMzg1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMSAgICAgICAtPiAtMC4zDQotZGRybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xDQotZGRybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxDQotZGRybW4zODggcmVtYWluZGVybmVhciAxMjM1NSAgNC4wMDAxICAgIC0+IC0xLjMwODkNCi1kZHJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNA0KLWRkcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45DQotZGRybW4zOTEgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OSAgICAgIC0+IC0wLjI2DQotZGRybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQ0KLWRkcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5DQotZGRybW4zOTQgcmVtYWluZGVybmVhciAxMjM0NSAgNSAgICAgICAgIC0+ICAwDQotZGRybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkNCi1kZHJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5DQotZGRybW4zOTcgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2DQotZGRybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjENCi0NCi0tLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcw0KLWRkcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNA0KLWRkcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUNCi1kZHJtbjQwMyByZW1haW5kZXJuZWFyICAgMC40NTUgICAgICAgMSAgIC0+ICAwLjQ1NQ0KLWRkcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQ0KLWRkcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUNCi1kZHJtbjQwNiByZW1haW5kZXJuZWFyICAgMC40NTU1NTUgICAgMSAgIC0+ICAwLjQ1NTU1NQ0KLWRkcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQ0KLWRkcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUNCi1kZHJtbjQwOSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQ0KLS0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0NCi1kZHJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUNCi1kZHJtbjQxMiByZW1haW5kZXJuZWFyICAgMC41NSAgICAgICAgMSAgIC0+IC0wLjQ1DQotZGRybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUNCi1kZHJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUNCi1kZHJtbjQxNSByZW1haW5kZXJuZWFyICAgMC41NTU1NSAgICAgMSAgIC0+IC0wLjQ0NDQ1DQotZGRybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUNCi1kZHJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUNCi1kZHJtbjQxOCByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NSAgMSAgIC0+IC0wLjQ0NDQ0NDQ1DQotZGRybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUNCi0NCi0tLSBmb2xkZG93bnMNCi1kZHJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJtbjQyMyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAyRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJtbjQyNiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA1RSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCi1kZHJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA2RSszODMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJtbjQyOSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA4RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi1kZHJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCi0tLSB0aW5pZXMNCi1kZHJtbjQzMSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICAxRS0zOTggIC0+ICAgMEUtMzk4DQotZGRybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OA0KLWRkcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsDQotZGRybW40MzQgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4DQotZGRybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgLTJFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQzNyByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA3RS0zOTggIC0+ICAgM0UtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsDQotZGRybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQ0MCByZW1haW5kZXJuZWFyICAgMUUtMzk3IDEwRS0zOTggIC0+ICAgMEUtMzk4DQotZGRybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAgLTFFLTM5OCBTdWJub3JtYWwNCi1kZHJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDExRS0zOTggIC0+ICAtMUUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDQzIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMjBFLTM5OCAgLT4gICAwRS0zOTgNCi1kZHJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIxRS0zOTggIC0+ICAtOEUtMzk4IFN1Ym5vcm1hbA0KLWRkcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsDQotDQotLS0gemVybyBzaWducw0KLWRkcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDANCi1kZHJtbjY1MSByZW1haW5kZXJuZWFyIC0xICAxIC0+IC0wDQotZGRybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMA0KLWRkcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTANCi1kZHJtbjY1NCByZW1haW5kZXJuZWFyICAwICAxIC0+ICAwDQotZGRybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMA0KLWRkcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDANCi1kZHJtbjY1NyByZW1haW5kZXJuZWFyIC0wIC0xIC0+IC0wDQotZGRybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDANCi1kZHJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMA0KLQ0KLS0tIFNwZWNpYWxzDQotZGRybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjgxIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjg0IHJlbWFpbmRlcm5lYXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNjg3IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRkcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjY5MSByZW1haW5kZXJuZWFyIC0xICAgICBJbmYgICAtPiAtMQ0KLWRkcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwDQotZGRybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTANCi1kZHJtbjY5NCByZW1haW5kZXJuZWFyICAxICAgICBJbmYgICAtPiAgMQ0KLWRkcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotZGRybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDIgcmVtYWluZGVybmVhciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDUgcmVtYWluZGVybmVhciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43MDggcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZGRybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTENCi1kZHJtbjcxMSByZW1haW5kZXJuZWFyIC0wICAgIC1JbmYgICAtPiAtMA0KLWRkcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwDQotZGRybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDENCi1kZHJtbjcxNCByZW1haW5kZXJuZWFyICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRkcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kZHJtbjcyMSByZW1haW5kZXJuZWFyICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRkcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kZHJtbjcyNCByZW1haW5kZXJuZWFyICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTg0KLWRkcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kZHJtbjcyNyByZW1haW5kZXJuZWFyICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRkcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4NCi1kZHJtbjczMCByZW1haW5kZXJuZWFyIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRkcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kZHJtbjczMyByZW1haW5kZXJuZWFyIC0wICAgLU5hTiAgICAtPiAtTmFODQotZGRybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRkcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4NCi1kZHJtbjczNiByZW1haW5kZXJuZWFyICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRkcm1uNzQxIHJlbWFpbmRlcm5lYXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzQ0IHJlbWFpbmRlcm5lYXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzQ3IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzUxIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzU0IHJlbWFpbmRlcm5lYXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzU3IHJlbWFpbmRlcm5lYXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2luZyBOYU5zDQotZGRybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQ0KLWRkcm1uNzYxIHJlbWFpbmRlcm5lYXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uDQotZGRybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm1uNzY0IHJlbWFpbmRlcm5lYXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExDQotZGRybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONg0KLWRkcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzDQotZGRybW43NjcgcmVtYWluZGVybmVhciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQNCi1kZHJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQ0KLWRkcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2DQotDQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQotZGRybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+IC00DQotZGRybW43NzEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAwDQotZGRybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotZGRybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRkcm1uODAyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kZHJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZGRybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRkcm1uODA1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kZHJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZGRybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRkcm1uODA4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kZHJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZGRybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRkcm1uODExIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00DQotZGRybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLWRkcm1uODIxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCi1kZHJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQotZGRybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRkcm1uODI0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCi1kZHJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQotZGRybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRkcm1uODI3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCi1kZHJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZGRybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRkcm1uODMwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kZHJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNA0KLWRkcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGRpdmlkZWludA0KLWRkcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMA0KLWRkcm1uODQxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNA0KLWRkcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQ0KLWRkcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQ0KLWRkcm1uODQ0IHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gLTAuMDAxDQotZGRybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMg0KLWRkcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTINCi1kZHJtbjg1MiByZW1haW5kZXJuZWFyICAxMDAwMDAzICAgICAgIDUgIC0+IC0yDQotZGRybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMg0KLWRkcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTINCi1kZHJtbjg1NSByZW1haW5kZXJuZWFyICAxMDAzICAgICAgICAgIDUgIC0+IC0yDQotZGRybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMg0KLWRkcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTINCi1kZHJtbjg1OCByZW1haW5kZXJuZWFyICAxICAgICAgICAgICAgIDUgIC0+ICAxDQotDQotLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZHJtbjg2MCByZW1haW5kZXJuZWFyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kZHJtbjg2MyByZW1haW5kZXJuZWFyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRkcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZGRybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg3NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg4MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwDQotZGRybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzANCi1kZHJtbjg4MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMA0KLWRkcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwDQotZGRybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDANCi1kZHJtbjg4NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMA0KLQ0KLWRkcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44OTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44OTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW44OTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwDQotZGRybW45MDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzANCi1kZHJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMA0KLWRkcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwDQotZGRybW45MDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzANCi1kZHJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMA0KLWRkcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwDQotDQotZGRybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTEyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTE1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTE5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwDQotZGRybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzANCi1kZHJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMA0KLWRkcm1uOTIyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwDQotZGRybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzANCi1kZHJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMA0KLWRkcm1uOTI1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgLTIwDQotZGRybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDANCi0NCi1kZHJtbjkzMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkzMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjkzNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwDQotZGRybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjk0MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMA0KLWRkcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwDQotZGRybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzANCi1kZHJtbjk0MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMA0KLWRkcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwDQotZGRybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzANCi1kZHJtbjk0NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAtMw0KLQ0KLWRkcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kZHJtbjk2MSByZW1haW5kZXJuZWFyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRkcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJtbjk2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRkcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kZHJtbjk2NyByZW1haW5kZXJuZWFyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZGRybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRkcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzANCi0NCi1kZHJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5DQotDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQotZGRybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcm1uMTA1MiByZW1haW5kZXJuZWFyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kZHJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZGRybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRkcm1uMTA1NSByZW1haW5kZXJuZWFyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3DQotZGRybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcNCi1kZHJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3Nw0KLWRkcm1uMTA1OCByZW1haW5kZXJuZWFyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3DQotDQotLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QNCi1kZHJtbjExMDAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUNCi1kZHJtbjExMDEgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NDQNCi1kZHJtbjExMDIgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjMzMzMNCi1kZHJtbjExMDMgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NSAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQNCi1kZHJtbjExMDQgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQNCi1kZHJtbjExMTUgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgICAwLjY5MTM1NzgwMjQ2OTYNCi1kZHJtbjExMTYgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDQuOTk5OTk5OTk5OTk5OTkgIC0+ICAgLTEuNTMwODY0MjE5NzUzMDgNCi1kZHJtbjExMTcgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS4yNDY5MTM1NzgwMjQ2OTENCi1kZHJtbjExMTggcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC43NTMwODY0MjE5NzUzMDkNCi1kZHJtbjExMTkgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDUuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTEuNDY5MTM1NzgwMjQ2OTENCi1kZHJtbjExMTAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgICAxLjMwODY0MjE5NzUzMTQNCi0NCi0tLSBOdWxsIHRlc3RzDQotZGRybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyLW5lYXIgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2Rkcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDEKK2Rkcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKK2Rkcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDAKK2Rkcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKK2Rkcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKK2Rkcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDAKKworZGRybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40CitkZHJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKK2Rkcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2Rkcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2Rkcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2Rkcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkZHJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKK2Rkcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkZHJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwCitkZHJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCisKK2Rkcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZGRybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxCitkZHJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZGRybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZGRybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZGRybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkZHJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKK2Rkcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQorZGRybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2Rkcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQorZGRybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCitkZHJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDEKK2Rkcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQorZGRybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCitkZHJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDEKK2Rkcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQorZGRybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCitkZHJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDEKK2Rkcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2Rkcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2Rkcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTEKK2Rkcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2Rkcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2Rkcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2Rkcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2Rkcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2Rkcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTEKK2Rkcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2Rkcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2Rkcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZGRybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xCitkZHJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMKK2Rkcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZGRybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2Rkcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQorZGRybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xCitkZHJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQorZGRybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDEKK2Rkcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorZGRybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCitkZHJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xCitkZHJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKK2Rkcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTEKKworZGRybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCitkZHJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZGRybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkZHJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2Rkcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZGRybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkZHJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZGRybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkZHJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2Rkcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkZHJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2Rkcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2Rkcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZGRybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkZHJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkZHJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZGRybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZGRybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAorZGRybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMAorZGRybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCitkZHJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKK2Rkcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTAKK2Rkcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKK2Rkcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAorZGRybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZGRybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZGRybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZGRybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZGRybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2Rkcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkZHJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2Rkcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkZHJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQorZGRybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDEKK2Rkcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCitkZHJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQorZGRybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDEKK2Rkcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCitkZHJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQorZGRybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDEKK2Rkcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCitkZHJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorZGRybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDAKK2Rkcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCitkZHJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAorZGRybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDAKK2Rkcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCitkZHJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAorZGRybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDAKK2Rkcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCitkZHJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkZHJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2Rkcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZGRybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkZHJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK2Rkcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorZGRybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KK2Rkcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQorZGRybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMgorZGRybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQorZGRybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQorZGRybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjIKK2Rkcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCitkZHJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorZGRybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkZHJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2Rkcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZGRybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwCitkZHJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjAKKworLS0gaGlnaCBYcworZGRybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZGRybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2Rkcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCitkZHJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAorZGRybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMKK2Rkcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMworZGRybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCitkZHJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMKK2Rkcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkZHJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2Rkcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2Rkcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZGRybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2Rkcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkZHJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkZHJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMworZGRybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMKK2Rkcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNworZGRybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAorZGRybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMAorZGRybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAorZGRybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2Rkcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZGRybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAorZGRybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAorZGRybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkZHJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkZHJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZGRybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkZHJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkZHJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkZHJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZGRybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkZHJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkZHJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkZHJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNworZGRybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04CitkZHJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05CitkZHJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKK2Rkcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKK2Rkcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2Rkcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkZHJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2Rkcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkZHJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2Rkcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZGRybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkZHJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDEKK2Rkcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2Rkcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZGRybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2Rkcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2Rkcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZGRybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2Rkcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2Rkcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAorZGRybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkZHJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2Rkcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQorZGRybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2Rkcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkZHJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCistLSByb3VuZCB0byBldmVuCitkZHJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxCitkZHJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwCitkZHJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xCitkZHJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwCitkZHJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxCitkZHJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwCitkZHJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xCisKK2Rkcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZGRybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKK2Rkcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKK2Rkcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMworZGRybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKK2Rkcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQorZGRybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkZHJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQorZGRybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2Rkcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkZHJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKK2Rkcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2Rkcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkZHJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2Rkcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5CitkZHJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5CitkZHJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2Rkcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkZHJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKK2Rkcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKK2Rkcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitkZHJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKK2Rkcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKK2Rkcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitkZHJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKK2Rkcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKK2Rkcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CistLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdCitkZHJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2Rkcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUKK2Rkcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1CitkZHJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKK2Rkcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUKK2Rkcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1CitkZHJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKK2Rkcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUKK2Rkcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1CisKKy0tIGZvbGRkb3ducworZGRybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2Rkcm1uNDIzIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjQgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgM0UrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI2IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjcgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgNkUrMzgzICAtPiAgLTIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI5IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MzAgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgOUUrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCistLSB0aW5pZXMKK2Rkcm1uNDMxIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDMyIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDJFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzNCByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzUgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNUUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgLTJFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM3IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzOCByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA4RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQwIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDQxIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsCitkZHJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDExRS0zOTggIC0+ICAtMUUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDMgcmVtYWluZGVybmVhciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40NDQgcmVtYWluZGVybmVhciAxMDBFLTM5NyAyMUUtMzk4ICAtPiAgLThFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCisKKy0tIHplcm8gc2lnbnMKK2Rkcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDAKK2Rkcm1uNjUxIHJlbWFpbmRlcm5lYXIgLTEgIDEgLT4gLTAKK2Rkcm1uNjUyIHJlbWFpbmRlcm5lYXIgIDEgLTEgLT4gIDAKK2Rkcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTAKK2Rkcm1uNjU0IHJlbWFpbmRlcm5lYXIgIDAgIDEgLT4gIDAKK2Rkcm1uNjU1IHJlbWFpbmRlcm5lYXIgLTAgIDEgLT4gLTAKK2Rkcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDAKK2Rkcm1uNjU3IHJlbWFpbmRlcm5lYXIgLTAgLTEgLT4gLTAKK2Rkcm1uNjU4IHJlbWFpbmRlcm5lYXIgIDAuMDAgIDEgIC0+ICAwLjAwCitkZHJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZGRybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODIgcmVtYWluZGVybmVhciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODUgcmVtYWluZGVybmVhciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODggcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2Rkcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xCitkZHJtbjY5MiByZW1haW5kZXJuZWFyICAwICAgICBJbmYgICAtPiAgMAorZGRybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTAKK2Rkcm1uNjk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxCitkZHJtbjY5NSByZW1haW5kZXJuZWFyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJtbjcwMCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMiByZW1haW5kZXJuZWFyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMyByZW1haW5kZXJuZWFyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNSByZW1haW5kZXJuZWFyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNiByZW1haW5kZXJuZWFyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwOCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwOSByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTEKK2Rkcm1uNzExIHJlbWFpbmRlcm5lYXIgLTAgICAgLUluZiAgIC0+IC0wCitkZHJtbjcxMiByZW1haW5kZXJuZWFyICAwICAgIC1JbmYgICAtPiAgMAorZGRybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDEKK2Rkcm1uNzE0IHJlbWFpbmRlcm5lYXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZHJtbjcxNSByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm1uNzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rkcm1uNzIyIHJlbWFpbmRlcm5lYXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rkcm1uNzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rkcm1uNzI1IHJlbWFpbmRlcm5lYXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK2Rkcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rkcm1uNzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rkcm1uNzI4IHJlbWFpbmRlcm5lYXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMxIHJlbWFpbmRlcm5lYXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMzIHJlbWFpbmRlcm5lYXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2Rkcm1uNzM0IHJlbWFpbmRlcm5lYXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK2Rkcm1uNzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzM3IHJlbWFpbmRlcm5lYXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRybW43NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQyIHJlbWFpbmRlcm5lYXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ1IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ5IHJlbWFpbmRlcm5lYXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUyIHJlbWFpbmRlcm5lYXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU1IHJlbWFpbmRlcm5lYXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU4IHJlbWFpbmRlcm5lYXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworZGRybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorZGRybW43NjEgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjIgcmVtYWluZGVybmVhciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjQgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2Rkcm1uNzY1IHJlbWFpbmRlcm5lYXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK2Rkcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCitkZHJtbjc2NyByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZGRybW43NjggcmVtYWluZGVybmVhciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK2Rkcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZGRybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+IC00CitkZHJtbjc3MSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKK2Rkcm1uNzcyICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rkcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZGRybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRybW44MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRybW44MDMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRybW44MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRybW44MDYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRybW44MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRybW44MDkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRybW44MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rkcm1uODEyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworZGRybW44MjEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRybW44MjIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRybW44MjQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRybW44MjUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRybW44MjcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRybW44MjggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRybW44MzAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRybW44MzEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rkcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBkaXZpZGVpbnQKK2Rkcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZGRybW44NDEgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40CitkZHJtbjg0MiByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUKK2Rkcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQorZGRybW44NDQgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjk5OSAxICAtPiAtMC4wMDEKK2Rkcm1uODUwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gLTIKK2Rkcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTIKK2Rkcm1uODUyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDMgICAgICAgNSAgLT4gLTIKK2Rkcm1uODUzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMyAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU1IHJlbWFpbmRlcm5lYXIgIDEwMDMgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU2IHJlbWFpbmRlcm5lYXIgIDEwMyAgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKKworLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm1uODYwIHJlbWFpbmRlcm5lYXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2MSByZW1haW5kZXJuZWFyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODYzIHJlbWFpbmRlcm5lYXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODcxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3OCByZW1haW5kZXJuZWFyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwCitkZHJtbjg4MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZGRybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK2Rkcm1uODgzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwCitkZHJtbjg4NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZGRybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK2Rkcm1uODg2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwCisKK2Rkcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkZHJtbjkwMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorZGRybW45MDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK2Rkcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwCitkZHJtbjkwNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorZGRybW45MDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAtMTAKK2Rkcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2Rkcm1uOTEwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTEzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTIwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCitkZHJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorZGRybW45MjIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2Rkcm1uOTIzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCitkZHJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorZGRybW45MjUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAtMjAKK2Rkcm1uOTI2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCisKK2Rkcm1uOTMwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTMzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTQwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwCitkZHJtbjk0MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZGRybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK2Rkcm1uOTQzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwCitkZHJtbjk0NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZGRybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzAKK2Rkcm1uOTQ2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgIC0zCisKK2Rkcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTYxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTYyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY4IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZGRybW45ODAgcmVtYWluZGVybmVhciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZGRybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2Rkcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkZHJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZGRybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2Rkcm1uMTEwMCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1NQorZGRybW4xMTAxIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxLjAwMDAwMDAwMDAwMDAxICAtPiAgIC0wLjM0NTY3ODkwMTIzNDQ0CitkZHJtbjExMDIgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjMzMzMKK2Rkcm1uMTEwMyByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NAorZGRybW4xMTA0IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0CitkZHJtbjExMTUgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgICAwLjY5MTM1NzgwMjQ2OTYKK2Rkcm1uMTExNiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAtMS41MzA4NjQyMTk3NTMwOAorZGRybW4xMTE3IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuOTk5OTk5OTk5OTk5OTk5ICAtPiAgIDEuMjQ2OTEzNTc4MDI0NjkxCitkZHJtbjExMTggcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC43NTMwODY0MjE5NzUzMDkKK2Rkcm1uMTExOSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAtMS40NjkxMzU3ODAyNDY5MQorZGRybW4xMTEwIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNS4wMDAwMDAwMDAwMDAxICAtPiAgICAgMS4zMDg2NDIxOTc1MzE0CisKKy0tIE51bGwgdGVzdHMKK2Rkcm1uMTAwMCByZW1haW5kZXJuZWFyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJvdGF0ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QKaW5kZXggODdlZWIxYy4uOGIwZmUyNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QKQEAgLTEsMjYyICsxLDI2MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgYSBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRyb3QwMDEgcm90YXRlICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwDQotZGRyb3QwMDIgcm90YXRlICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwDQotZGRyb3QwMDMgcm90YXRlICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCi1kZHJvdDAwNCByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAxNSAgLT4gIDEwMDAwMDAwMDAwMDAwMDANCi1kZHJvdDAwNSByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDENCi1kZHJvdDAwNiByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDANCi1kZHJvdDAwNyByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDANCi1kZHJvdDAwOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDYxMjM0NTY3ODkwMTIzNDUNCi1kZHJvdDAwOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDIzNDU2Nzg5MDEyMzQ1NjENCi1kZHJvdDAxMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDEyMzQ1Njc4OTAxMjM0NTYNCi1kZHJvdDAxMSByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDkzNDU2Nzg5MDEyMzQ1NjkNCi1kZHJvdDAxMiByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDk5MzQ1Njc4OTAxMjM0NTYNCi0NCi0tLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyDQotZGRyb3QwMTUgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAxNiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDE3IHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMTggcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAxOSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDIwIHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMjEgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAyMiByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCi1kZHJvdDAyNSByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90MDI2IHJvdGF0ZSAgICAgICAgMSAgICAtMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3QwMjcgcm90YXRlICAgICAgICAxICAgICAxNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDAyOCByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZ1bGwgcGF0dGVybg0KLWRkcm90MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcm90MDMxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMjM0NTY3ODkwMTIzNDU2MQ0KLWRkcm90MDMyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNCAgLT4gMzQ1Njc4OTAxMjM0NTYxMg0KLWRkcm90MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gNDU2Nzg5MDEyMzQ1NjEyMw0KLWRkcm90MDM0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gNTY3ODkwMTIzNDU2MTIzNA0KLWRkcm90MDM1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMSAgLT4gNjc4OTAxMjM0NTYxMjM0NQ0KLWRkcm90MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gNzg5MDEyMzQ1NjEyMzQ1Ng0KLWRkcm90MDM3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gODkwMTIzNDU2MTIzNDU2Nw0KLWRkcm90MDM4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC04ICAgLT4gOTAxMjM0NTYxMjM0NTY3OA0KLWRkcm90MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQ0KLWRkcm90MDQwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2MTIzNDU2Nzg5MA0KLWRkcm90MDQxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC01ICAgLT4gMjM0NTYxMjM0NTY3ODkwMQ0KLWRkcm90MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMzQ1NjEyMzQ1Njc4OTAxMg0KLWRkcm90MDQzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gNDU2MTIzNDU2Nzg5MDEyMw0KLWRkcm90MDQ0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0yICAgLT4gNTYxMjM0NTY3ODkwMTIzNA0KLWRkcm90MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gNjEyMzQ1Njc4OTAxMjM0NQ0KLWRkcm90MDQ2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLWRkcm90MDQ3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcm90MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2MQ0KLWRkcm90MDQ5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTYxMg0KLWRkcm90MDUwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjEyMw0KLWRkcm90MDUxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2MTIzNA0KLWRkcm90MDUyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTYxMjM0NQ0KLWRkcm90MDUzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjEyMzQ1Ng0KLWRkcm90MDU0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2MTIzNDU2Nw0KLWRkcm90MDU1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs4ICAgLT4gOTAxMjM0NTYxMjM0NTY3OA0KLWRkcm90MDU2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQ0KLWRkcm90MDU3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMCAgLT4gMTIzNDU2MTIzNDU2Nzg5MA0KLWRkcm90MDU4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMSAgLT4gMjM0NTYxMjM0NTY3ODkwMQ0KLWRkcm90MDU5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjEyMzQ1Njc4OTAxMg0KLWRkcm90MDYwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMyAgLT4gNDU2MTIzNDU2Nzg5MDEyMw0KLWRkcm90MDYxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNCAgLT4gNTYxMjM0NTY3ODkwMTIzNA0KLWRkcm90MDYyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjEyMzQ1Njc4OTAxMjM0NQ0KLWRkcm90MDYzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLS0tIHplcm9zDQotZGRyb3QwNzAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwDQotZGRyb3QwNzEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwDQotZGRyb3QwNzIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwDQotZGRyb3QwNzMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwDQotZGRyb3QwNzQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwDQotZGRyb3QwNzUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwDQotZGRyb3QwNzYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwDQotZGRyb3QwNzcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwDQotZGRyb3QwNzggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwDQotZGRyb3QwNzkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwDQotZGRyb3QwODAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwDQotZGRyb3QwODEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kZHJvdDE0MSByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcm90MTQzIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE0NCByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNDUgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM2OA0KLWRkcm90MTQ2IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDEuMEUtMzgyDQotZGRyb3QxNDcgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zODINCi1kZHJvdDE0OCByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQotZGRyb3QxNTEgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxNTIgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gMUUtMzk4DQotZGRyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMUUtMzk4DQotZGRyb3QxNTQgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxNTUgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4DQotZGRyb3QxNTcgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gOUUtMzk4DQotZGRyb3QxNTggcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxNjAgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkcm90MTYxIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDEuMEUtMzk3DQotZGRyb3QxNjIgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zOTcNCi1kZHJvdDE2MyByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotLS0gIG5lZ2F0aXZlcw0KLWRkcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNzIgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHJvdDE3MyByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KLWRkcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQotZGRyb3QxNzUgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgNCi1kZHJvdDE3NiByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMS4wRS0zODINCi1kZHJvdDE3NyByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODINCi1kZHJvdDE3OCByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OA0KLWRkcm90MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4DQotZGRyb3QxODMgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTFFLTM5OA0KLWRkcm90MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxODYgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTlFLTM5OA0KLWRkcm90MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC05RS0zOTgNCi1kZHJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRyb3QxOTAgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZHJvdDE5MSByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMS4wRS0zOTcNCi1kZHJvdDE5MiByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcNCi1kZHJvdDE5MyByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLQ0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykNCi1kZHJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTANCi1kZHJvdDIwMiByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTANCi1kZHJvdDIwMyByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMA0KLWRkcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIDE1ICAtPiAtMTAwMDAwMDAwMDAwMDAwMA0KLWRkcm90MjA1IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIDE2ICAtPiAtMQ0KLWRkcm90MjA2IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMTAwMDAwMDAwMDAwMDAwMA0KLWRkcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMA0KLWRkcm90MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAtNjEyMzQ1Njc4OTAxMjM0NQ0KLWRkcm90MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtMjM0NTY3ODkwMTIzNDU2MQ0KLWRkcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkcm90MjExIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtOTM0NTY3ODkwMTIzNDU2OQ0KLWRkcm90MjEyIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtOTkzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotZGRyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCi1kZHJvdDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkcm90NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZHJvdDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRkcm90Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotZGRyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KLWRkcm90ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkNCi1kZHJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotZGRyb3Q4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KLWRkcm90ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkNCi1kZHJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotZGRyb3Q4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRyb3Q4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFODQotZGRyb3Q4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFODQotZGRyb3Q4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFODQotZGRyb3Q4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFODQotZGRyb3Q4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFODQotZGRyb3Q4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZGRyb3Q4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHJvdDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZGRyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRkcm90ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kZHJvdDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZGRyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRkcm90ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kZHJvdDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZGRyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRkcm90ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZGRyb3Q4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRyb3Q4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kZHJvdDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRkcm90ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgYSBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZHJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rkcm90MDAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAorZGRyb3QwMDMgcm90YXRlICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK2Rkcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QwMDUgcm90YXRlICAgICAgICAgICAgICAgICAxICAgMTYgIC0+ICAxCitkZHJvdDAwNiByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAKK2Rkcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZGRyb3QwMDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+ICA2MTIzNDU2Nzg5MDEyMzQ1CitkZHJvdDAwOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDIzNDU2Nzg5MDEyMzQ1NjEKK2Rkcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwMTEgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICA5MzQ1Njc4OTAxMjM0NTY5CitkZHJvdDAxMiByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDk5MzQ1Njc4OTAxMjM0NTYKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZGRyb3QwMTUgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAxNyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMTggcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyMCByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjEgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitkZHJvdDAyNSByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0xNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDI3IHJvdGF0ZSAgICAgICAgMSAgICAgMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyOCByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHBhdHRlcm4KK2Rkcm90MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAyMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDAzMiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDM0NTY3ODkwMTIzNDU2MTIKK2Rkcm90MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gNDU2Nzg5MDEyMzQ1NjEyMworZGRyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiA1Njc4OTAxMjM0NTYxMjM0CitkZHJvdDAzNSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDY3ODkwMTIzNDU2MTIzNDUKK2Rkcm90MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gNzg5MDEyMzQ1NjEyMzQ1NgorZGRyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiA4OTAxMjM0NTYxMjM0NTY3CitkZHJvdDAzOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDkwMTIzNDU2MTIzNDU2NzgKK2Rkcm90MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQorZGRyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTYxMjM0NTY3ODkwCitkZHJvdDA0MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDIzNDU2MTIzNDU2Nzg5MDEKK2Rkcm90MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMzQ1NjEyMzQ1Njc4OTAxMgorZGRyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiA0NTYxMjM0NTY3ODkwMTIzCitkZHJvdDA0NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDU2MTIzNDU2Nzg5MDEyMzQKK2Rkcm90MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QwNDYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2Rkcm90MDQ3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDA0OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2MTIKK2Rkcm90MDUwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjEyMworZGRyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTYxMjM0CitkZHJvdDA1MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2MTIzNDUKK2Rkcm90MDUzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjEyMzQ1NgorZGRyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTYxMjM0NTY3CitkZHJvdDA1NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOCAgIC0+IDkwMTIzNDU2MTIzNDU2NzgKK2Rkcm90MDU2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjEyMzQ1Njc4OQorZGRyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEwICAtPiAxMjM0NTYxMjM0NTY3ODkwCitkZHJvdDA1OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTEgIC0+IDIzNDU2MTIzNDU2Nzg5MDEKK2Rkcm90MDU5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjEyMzQ1Njc4OTAxMgorZGRyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEzICAtPiA0NTYxMjM0NTY3ODkwMTIzCitkZHJvdDA2MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTQgIC0+IDU2MTIzNDU2Nzg5MDEyMzQKK2Rkcm90MDYyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CisKKy0tIHplcm9zCitkZHJvdDA3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK2Rkcm90MDcxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorZGRyb3QwNzIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwCitkZHJvdDA3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK2Rkcm90MDc0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorZGRyb3QwNzUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwCitkZHJvdDA3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK2Rkcm90MDc3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorZGRyb3QwNzggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwCitkZHJvdDA3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK2Rkcm90MDgwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorZGRyb3QwODEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHJvdDE0MSByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0MiByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0MyByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0NCByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE0NSByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE0NiByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAxLjBFLTM4MgorZGRyb3QxNDcgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zODIKK2Rkcm90MTQ4IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkcm90MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNTIgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gMUUtMzk4CitkZHJvdDE1MyByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAxRS0zOTgKK2Rkcm90MTU0IHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNTUgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE1NiByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgKK2Rkcm90MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDlFLTM5OAorZGRyb3QxNTggcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE2MCByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHJvdDE2MSByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAxLjBFLTM5NworZGRyb3QxNjIgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zOTcKK2Rkcm90MTYzIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKKy0tICBuZWdhdGl2ZXMKK2Rkcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNzMgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3NSByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRyb3QxNzYgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTEuMEUtMzgyCitkZHJvdDE3NyByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODIKK2Rkcm90MTc4IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE4MSByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4CitkZHJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMUUtMzk4CitkZHJvdDE4NCByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4CitkZHJvdDE4NyByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtOUUtMzk4CitkZHJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHJvdDE5MCByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRyb3QxOTEgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gLTEuMEUtMzk3CitkZHJvdDE5MiByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcKK2Rkcm90MTkzIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rkcm90MjAxIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMAorZGRyb3QyMDIgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkZHJvdDIwMyByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZGRyb3QyMDQgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTUgIC0+IC0xMDAwMDAwMDAwMDAwMDAwCitkZHJvdDIwNSByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAxNiAgLT4gLTEKK2Rkcm90MjA2IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QyMDcgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wCitkZHJvdDIwOCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gLTYxMjM0NTY3ODkwMTIzNDUKK2Rkcm90MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtMjM0NTY3ODkwMTIzNDU2MQorZGRyb3QyMTAgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0xMjM0NTY3ODkwMTIzNDU2CitkZHJvdDIxMSByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkzNDU2Nzg5MDEyMzQ1NjkKK2Rkcm90MjEyIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtOTkzNDU2Nzg5MDEyMzQ1NgorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitkZHJvdDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rkcm90NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rkcm90Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyb3Q4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK2Rkcm90ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRyb3Q4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCitkZHJvdDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkcm90ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRyb3Q4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCitkZHJvdDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rkcm90ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGRyb3Q4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZHJvdDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkcm90ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRyb3Q4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHJvdDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZHJvdDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZHJvdDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZHJvdDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZHJvdDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZHJvdDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZHJvdDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZHJvdDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZHJvdDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRyb3Q4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZHJvdDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZHJvdDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNhbWVRdWFudHVtLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0CmluZGV4IDU0YTc2M2MuLjQ2NWIzNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNhbWVRdWFudHVtLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdApAQCAtMSwzODkgKzEsMzg5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjRG91YmxlIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZGRzYW1xMDAxIHNhbWVxdWFudHVtICAwICAgICAgMCAgICAgIC0+ICAxDQotZGRzYW1xMDAyIHNhbWVxdWFudHVtICAwICAgICAgMSAgICAgIC0+ICAxDQotZGRzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxDQotZGRzYW1xMDA0IHNhbWVxdWFudHVtICAxICAgICAgMSAgICAgIC0+ICAxDQotDQotZGRzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDANCi1kZHNhbXEwMTIgc2FtZXF1YW50dW0gIDEwRSsxICAxMEUrMSAgLT4gMQ0KLWRkc2FtcTAxMyBzYW1lcXVhbnR1bSAgMTAwICAgIDEwRSsxICAtPiAwDQotZGRzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDANCi1kZHNhbXEwMTUgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0yICAgLT4gMA0KLWRkc2FtcTAxNiBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTEgICAtPiAxDQotZGRzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDANCi1kZHNhbXEwMTggc2FtZXF1YW50dW0gIDk5OSAgICA5OTkgICAgLT4gMQ0KLWRkc2FtcTAxOSBzYW1lcXVhbnR1bSAgOTk5RS0xIDk5LjkgICAtPiAxDQotZGRzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDENCi1kZHNhbXEwMjEgc2FtZXF1YW50dW0gIDExMUUtMSAxMjM0LjIgLT4gMQ0KLQ0KLS0tIHplcm9zDQotZGRzYW1xMDMwIHNhbWVxdWFudHVtICAwLjAgICAgMS4xICAgIC0+IDENCi1kZHNhbXEwMzEgc2FtZXF1YW50dW0gIDAuMCAgICAxLjExICAgLT4gMA0KLWRkc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwDQotZGRzYW1xMDMzIHNhbWVxdWFudHVtICAwLjAgICAgMC4wICAgIC0+IDENCi1kZHNhbXEwMzQgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAwICAgLT4gMA0KLWRkc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwDQotZGRzYW1xMDM2IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMSAgIC0+IDENCi1kZHNhbXEwMzcgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsyICAgLT4gMA0KLWRkc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwDQotZGRzYW1xMDM5IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTcgIC0+IDENCi1kZHNhbXEwNDAgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xOCAgLT4gMA0KLWRkc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMA0KLWRkc2FtcTA0MiBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTYgLT4gMQ0KLWRkc2FtcTA0MyBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTcgLT4gMA0KLWRkc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQ0KLWRkc2FtcTA0NSBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTcgLT4gMA0KLWRkc2FtcTA0NiBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTYgLT4gMQ0KLWRkc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMA0KLWRkc2FtcTA0OCBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTYgLT4gMQ0KLWRkc2FtcTA0OSBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTcgLT4gMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRzYW1xMDUxIHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDENCi1kZHNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDENCi1kZHNhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQ0KLWRkc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtMzk4ICAgICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgLT4gMQ0KLWRkc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAxDQotZGRzYW1xMDU2IHNhbWVxdWFudHVtICAxRS0zODMgICAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAtPiAxDQotZGRzYW1xMDU3IHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDENCi1kZHNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTM5OCAgICAgICAgICAgICAxRS0zOTggICAgICAgICAgIC0+IDENCi0NCi1kZHNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDENCi1kZHNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQ0KLWRkc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQ0KLWRkc2FtcTA2NCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxDQotZGRzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxDQotZGRzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IDENCi1kZHNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDENCi1kZHNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQ0KLQ0KLWRkc2FtcTA3MSBzYW1lcXVhbnR1bSAgLTRFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQ0KLWRkc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwNDAwMDAwMDAwMDBFLTM4MyAtPiAxDQotZGRzYW1xMDczIHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxDQotZGRzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk0OTk5OUUrMzg0IC0+IDENCi1kZHNhbXEwNzUgc2FtZXF1YW50dW0gIC00RS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDENCi1kZHNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDA0MDAwMDAwMDAwMDAwRS0zODMgLT4gMQ0KLWRkc2FtcTA3NyBzYW1lcXVhbnR1bSAgLTRFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQ0KLWRkc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45NDk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxDQotDQotZGRzYW1xMDgxIHNhbWVxdWFudHVtICAtNEUtMzk3ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAwDQotZGRzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzM2IC0+IDANCi1kZHNhbXEwODMgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDANCi1kZHNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5NDk5OTk5OTk5OTk5RSszMzYgLT4gMA0KLWRkc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTM5NyAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMA0KLWRkc2FtcTA4NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTMzNiAtPiAwDQotZGRzYW1xMDg3IHNhbWVxdWFudHVtICAtNEUtMzQ2ICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAwDQotZGRzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzM2IC0+IDANCi0NCi0tLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucw0KLWRkc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDENCi1kZHNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxDQotZGRzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDANCi1kZHNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwDQotZGRzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDANCi1kZHNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwDQotZGRzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDANCi1kZHNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwDQotZGRzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDANCi1kZHNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwDQotZGRzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxDQotZGRzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQ0KLWRkc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDANCi1kZHNhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwDQotZGRzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDANCi1kZHNhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDANCi1kZHNhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwDQotZGRzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDANCi1kZHNhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwDQotZGRzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDANCi1kZHNhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTAzMTEgc2FtZXF1YW50dW0gICBOYU4gICAgIEluZiAgIC0+IDANCi1kZHNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxDQotZGRzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTAzMTQgc2FtZXF1YW50dW0gICBOYU4gICAgLTcgICAgIC0+IDANCi1kZHNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwDQotZGRzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTAzMTcgc2FtZXF1YW50dW0gICBOYU4gICAgLTAgICAgIC0+IDANCi1kZHNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwDQotZGRzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTAzMjAgc2FtZXF1YW50dW0gICBOYU4gICAgIDAgICAgIC0+IDANCi1kZHNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwDQotZGRzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTAzMjMgc2FtZXF1YW50dW0gICBOYU4gICAgIDcgICAgIC0+IDANCi1kZHNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwDQotZGRzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQ0KLQ0KLWRkc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDANCi1kZHNhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxDQotZGRzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDANCi1kZHNhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDANCi1kZHNhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQ0KLWRkc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwDQotZGRzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDANCi1kZHNhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQ0KLWRkc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwDQotZGRzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDANCi1kZHNhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQ0KLWRkc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDANCi1kZHNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDENCi1kZHNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwDQotZGRzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDENCi1kZHNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwDQotZGRzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDENCi1kZHNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwDQotZGRzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDENCi1kZHNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwDQotZGRzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMDYxMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIEluZiAgIC0+IDANCi1kZHNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwDQotZGRzYW1xMDYxNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTcgICAgIC0+IDANCi1kZHNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQ0KLWRkc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxDQotZGRzYW1xMDYxNyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTAgICAgIC0+IDANCi1kZHNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxDQotZGRzYW1xMDYyMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDAgICAgIC0+IDANCi1kZHNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxDQotZGRzYW1xMDYyMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDcgICAgIC0+IDANCi1kZHNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDANCi1kZHNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDANCi1kZHNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxDQotZGRzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDENCi1kZHNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwDQotZGRzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDENCi1kZHNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwDQotZGRzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDENCi1kZHNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwDQotZGRzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDANCi1kZHNhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwDQotZGRzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQ0KLWRkc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDANCi1kZHNhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQ0KLWRkc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDANCi1kZHNhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwDQotZGRzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQ0KLWRkc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDANCi1kZHNhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwDQotZGRzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQ0KLWRkc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDANCi1kZHNhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDANCi1kZHNhbXEwOTExIHNhbWVxdWFudHVtICAtMEUrMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwDQotZGRzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDENCi1kZHNhbXEwOTE0IHNhbWVxdWFudHVtICAtMEUrMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwDQotZGRzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDANCi1kZHNhbXEwOTE3IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxDQotZGRzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDANCi1kZHNhbXEwOTIwIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxDQotZGRzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDANCi1kZHNhbXEwOTIzIHNhbWVxdWFudHVtICAtMEUrMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxDQotZGRzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDANCi1kZHNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwDQotZGRzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDENCi1kZHNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxDQotZGRzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDANCi1kZHNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxDQotZGRzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDANCi1kZHNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxDQotZGRzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDANCi1kZHNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDANCi1kZHNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwDQotZGRzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMA0KLWRkc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDENCi1kZHNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwDQotZGRzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDENCi1kZHNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwDQotZGRzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDENCi1kZHNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwDQotZGRzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDENCi1kZHNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwDQotZGRzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDANCi1kZHNhbXExMzExIHNhbWVxdWFudHVtICAwRSszICAgICBJbmYgICAtPiAwDQotZGRzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMA0KLWRkc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDENCi1kZHNhbXExMzE0IHNhbWVxdWFudHVtICAwRSszICAgIC03ICAgICAtPiAwDQotZGRzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDANCi1kZHNhbXExMzE3IHNhbWVxdWFudHVtICAwRSszICAgIC0wICAgICAtPiAwDQotZGRzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQ0KLWRkc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDANCi1kZHNhbXExMzIwIHNhbWVxdWFudHVtICAwRSszICAgICAwICAgICAtPiAwDQotZGRzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQ0KLWRkc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDANCi1kZHNhbXExMzIzIHNhbWVxdWFudHVtICAwRSszICAgICA3ICAgICAtPiAwDQotZGRzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQ0KLWRkc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kZHNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMA0KLWRkc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDANCi1kZHNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwDQotZGRzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMA0KLWRkc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDENCi1kZHNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxDQotZGRzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMA0KLWRkc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDANCi1kZHNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxDQotZGRzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMA0KLWRkc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDANCi1kZHNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxDQotZGRzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMA0KLWRkc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDANCi1kZHNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwDQotZGRzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwDQotZGRzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwDQotZGRzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwDQotZGRzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxDQotZGRzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwDQotZGRzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwDQotZGRzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxDQotZGRzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwDQotZGRzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwDQotZGRzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxDQotZGRzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwDQotZGRzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwDQotZGRzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxDQotZGRzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwDQotZGRzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwDQotDQotZGRzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMA0KLWRkc2FtcTE2MTEgc2FtZXF1YW50dW0gIDdFKzMgICAgIEluZiAgIC0+IDANCi1kZHNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwDQotZGRzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQ0KLWRkc2FtcTE2MTQgc2FtZXF1YW50dW0gIDdFKzMgICAgLTcgICAgIC0+IDANCi1kZHNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwDQotZGRzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMA0KLWRkc2FtcTE2MTcgc2FtZXF1YW50dW0gIDdFKzMgICAgLTAgICAgIC0+IDANCi1kZHNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxDQotZGRzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMA0KLWRkc2FtcTE2MjAgc2FtZXF1YW50dW0gIDdFKzMgICAgIDAgICAgIC0+IDANCi1kZHNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxDQotZGRzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMA0KLWRkc2FtcTE2MjMgc2FtZXF1YW50dW0gIDdFKzMgICAgIDcgICAgIC0+IDANCi1kZHNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxDQotZGRzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRkc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDANCi1kZHNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwDQotZGRzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQ0KLWRkc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDANCi1kZHNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwDQotZGRzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMA0KLWRkc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDANCi1kZHNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwDQotZGRzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMA0KLWRkc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDANCi1kZHNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwDQotZGRzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMA0KLWRkc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDANCi1kZHNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwDQotZGRzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMA0KLWRkc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDENCi0tLSBub2lzeSBOYU5zDQotZGRzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQ0KLWRkc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDENCi1kZHNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxDQotZGRzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQ0KLWRkc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDANCi1kZHNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwDQotZGRzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMA0KLWRkc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDANCi1kZHNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwDQotZGRzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTYW1lUXVhbnR1bS5kZWNUZXN0IC0tIGNoZWNrIGRlY0RvdWJsZSBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRzYW1xMDAxIHNhbWVxdWFudHVtICAwICAgICAgMCAgICAgIC0+ICAxCitkZHNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDEKK2Rkc2FtcTAwMyBzYW1lcXVhbnR1bSAgMSAgICAgIDAgICAgICAtPiAgMQorZGRzYW1xMDA0IHNhbWVxdWFudHVtICAxICAgICAgMSAgICAgIC0+ICAxCisKK2Rkc2FtcTAxMSBzYW1lcXVhbnR1bSAgMTAgICAgIDFFKzEgICAtPiAwCitkZHNhbXEwMTIgc2FtZXF1YW50dW0gIDEwRSsxICAxMEUrMSAgLT4gMQorZGRzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDAKK2Rkc2FtcTAxNCBzYW1lcXVhbnR1bSAgMTAwICAgIDFFKzIgICAtPiAwCitkZHNhbXEwMTUgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0yICAgLT4gMAorZGRzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDEKK2Rkc2FtcTAxNyBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTAgICAtPiAwCitkZHNhbXEwMTggc2FtZXF1YW50dW0gIDk5OSAgICA5OTkgICAgLT4gMQorZGRzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDEKK2Rkc2FtcTAyMCBzYW1lcXVhbnR1bSAgMTExRS0xIDIyLjIgICAtPiAxCitkZHNhbXEwMjEgc2FtZXF1YW50dW0gIDExMUUtMSAxMjM0LjIgLT4gMQorCistLSB6ZXJvcworZGRzYW1xMDMwIHNhbWVxdWFudHVtICAwLjAgICAgMS4xICAgIC0+IDEKK2Rkc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwCitkZHNhbXEwMzIgc2FtZXF1YW50dW0gIDAuMCAgICAwICAgICAgLT4gMAorZGRzYW1xMDMzIHNhbWVxdWFudHVtICAwLjAgICAgMC4wICAgIC0+IDEKK2Rkc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwCitkZHNhbXEwMzUgc2FtZXF1YW50dW0gIDBFKzEgICAwRSswICAgLT4gMAorZGRzYW1xMDM2IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMSAgIC0+IDEKK2Rkc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwCitkZHNhbXEwMzggc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNiAgLT4gMAorZGRzYW1xMDM5IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTcgIC0+IDEKK2Rkc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwCitkZHNhbXEwNDEgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE1IC0+IDAKK2Rkc2FtcTA0MiBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTYgLT4gMQorZGRzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwCitkZHNhbXEwNDQgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE2IC0+IDEKK2Rkc2FtcTA0NSBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTcgLT4gMAorZGRzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxCitkZHNhbXEwNDcgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rkc2FtcTA0OCBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTYgLT4gMQorZGRzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQorZGRzYW1xMDUyIHNhbWVxdWFudHVtICAxRS0zODMgICAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAtPiAxCitkZHNhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQorZGRzYW1xMDU0IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxCitkZHNhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQorZGRzYW1xMDU2IHNhbWVxdWFudHVtICAxRS0zODMgICAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAtPiAxCitkZHNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQorZGRzYW1xMDU4IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxCisKK2Rkc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQorZGRzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IDEKK2Rkc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQorZGRzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKK2Rkc2FtcTA2NSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQorZGRzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IDEKK2Rkc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQorZGRzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKKworZGRzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNzIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDQwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDczIHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTQ5OTk5RSszODQgLT4gMQorZGRzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDA0MDAwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNzggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorCitkZHNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDAKK2Rkc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwNDAwMDAwMDAwMDBFLTMzNiAtPiAwCitkZHNhbXEwODMgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDAKK2Rkc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk0OTk5OTk5OTk5OTlFKzMzNiAtPiAwCitkZHNhbXEwODUgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDAKK2Rkc2FtcTA4NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTMzNiAtPiAwCitkZHNhbXEwODcgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDAKK2Rkc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45NDk5OTk5OTk5OTk5OTlFKzMzNiAtPiAwCisKKy0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zCitkZHNhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCitkZHNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCitkZHNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwCitkZHNhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCitkZHNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCitkZHNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwCitkZHNhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCitkZHNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCitkZHNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwCitkZHNhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCitkZHNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCitkZHNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwCitkZHNhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCitkZHNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCitkZHNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwCitkZHNhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKK2Rkc2FtcTAyMTEgc2FtZXF1YW50dW0gICBJbmYgICAgIEluZiAgIC0+IDEKK2Rkc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTAyMTQgc2FtZXF1YW50dW0gICBJbmYgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTAyMTcgc2FtZXF1YW50dW0gICBJbmYgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTAyMjAgc2FtZXF1YW50dW0gICBJbmYgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTAyMjMgc2FtZXF1YW50dW0gICBJbmYgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMAorZGRzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAorZGRzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQorZGRzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAorZGRzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAorZGRzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAorZGRzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAorZGRzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQorCitkZHNhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwCitkZHNhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwCitkZHNhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxCitkZHNhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxCitkZHNhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxCitkZHNhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCitkZHNhbXEwNTExIHNhbWVxdWFudHVtICAtNyAgICAgICBJbmYgICAtPiAwCitkZHNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCitkZHNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCitkZHNhbXEwNTE0IHNhbWVxdWFudHVtICAtNyAgICAgIC03ICAgICAtPiAxCitkZHNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCitkZHNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCitkZHNhbXEwNTE3IHNhbWVxdWFudHVtICAtNyAgICAgIC0wICAgICAtPiAxCitkZHNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCitkZHNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCitkZHNhbXEwNTIwIHNhbWVxdWFudHVtICAtNyAgICAgICAwICAgICAtPiAxCitkZHNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCitkZHNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCitkZHNhbXEwNTIzIHNhbWVxdWFudHVtICAtNyAgICAgICA3ICAgICAtPiAxCitkZHNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCitkZHNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwCitkZHNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKK2Rkc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxCitkZHNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxCitkZHNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCitkZHNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDEKK2Rkc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCitkZHNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCitkZHNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA4MTEgc2FtZXF1YW50dW0gIC0wICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA4MTQgc2FtZXF1YW50dW0gIC0wICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTA4MTcgc2FtZXF1YW50dW0gIC0wICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTA4MjAgc2FtZXF1YW50dW0gIC0wICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTA4MjMgc2FtZXF1YW50dW0gIC0wICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCitkZHNhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDEKK2Rkc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCitkZHNhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCitkZHNhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQorZGRzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCitkZHNhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQorZGRzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCitkZHNhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQorZGRzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQorZGRzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQorZGRzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQorZGRzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCitkZHNhbXExMjExIHNhbWVxdWFudHVtICAwICAgICAgICBJbmYgICAtPiAwCitkZHNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCitkZHNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCitkZHNhbXExMjE0IHNhbWVxdWFudHVtICAwICAgICAgIC03ICAgICAtPiAxCitkZHNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCitkZHNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCitkZHNhbXExMjE3IHNhbWVxdWFudHVtICAwICAgICAgIC0wICAgICAtPiAxCitkZHNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCitkZHNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCitkZHNhbXExMjIwIHNhbWVxdWFudHVtICAwICAgICAgICAwICAgICAtPiAxCitkZHNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCitkZHNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCitkZHNhbXExMjIzIHNhbWVxdWFudHVtICAwICAgICAgICA3ICAgICAtPiAxCitkZHNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCitkZHNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDEKK2Rkc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKK2Rkc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKK2Rkc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKK2Rkc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQorZGRzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQorZGRzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQorZGRzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTE1MTEgc2FtZXF1YW50dW0gIDcgICAgICAgSW5mICAgLT4gMAorZGRzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCitkZHNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTE1MTQgc2FtZXF1YW50dW0gIDcgICAgICAtNyAgICAgLT4gMQorZGRzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCitkZHNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTE1MTcgc2FtZXF1YW50dW0gIDcgICAgICAtMCAgICAgLT4gMQorZGRzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCitkZHNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTE1MjAgc2FtZXF1YW50dW0gIDcgICAgICAgMCAgICAgLT4gMQorZGRzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCitkZHNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTE1MjMgc2FtZXF1YW50dW0gIDcgICAgICAgNyAgICAgLT4gMQorZGRzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCitkZHNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQorZGRzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQorZGRzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQorZGRzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCitkZHNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCitkZHNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxCitkZHNhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCitkZHNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCitkZHNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwCitkZHNhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCitkZHNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCitkZHNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwCitkZHNhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCitkZHNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCitkZHNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwCitkZHNhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCitkZHNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCitkZHNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwCitkZHNhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCistLSBub2lzeSBOYU5zCitkZHNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCitkZHNhbXExNzMxIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFONCAtPiAxCitkZHNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCitkZHNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCitkZHNhbXExNzM0IHNhbWVxdWFudHVtICBzTmFOMyAgICAgMyAgICAtPiAwCitkZHNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCitkZHNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCitkZHNhbXExNzM3IHNhbWVxdWFudHVtICAgICAgMyAgICAgTmFOMyAtPiAwCitkZHNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCitkZHNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNjYWxlQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QKaW5kZXggNmJhM2UzOS4uZWRlZTExYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QKQEAgLTEsMjQzICsxLDI0MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNEb3VibGUgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gTWF4IHxyaHN8IGlzIDIqKDM4NCsxNikgPSA4MDANCi0NCi0tLSBTYW5pdHkgY2hlY2tzDQotZGRzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMA0KLWRkc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMw0KLWRkc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwDQotZGRzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wDQotZGRzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwDQotZGRzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MA0KLWRkc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwDQotZGRzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMA0KLWRkc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMNCi1kZHNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTANCi1kZHNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wDQotZGRzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MA0KLWRkc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwDQotDQotLS0gSW5maW5pdGllcw0KLWRkc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5DQotZGRzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5DQotZGRzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkNCi1kZHNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkNCi0NCi0tLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyDQotZGRzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZGRzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTg0KLWRkc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFODQotZGRzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTg0KLWRkc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFODQotZGRzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gbm9uLWludGVnZXIgUkhTDQotZGRzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMNCi1kZHNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzDQotZGRzY2IwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3V0LW9mIHJhbmdlIFJIUw0KLWRkc2NiMTIwIHNjYWxlYiAgMS4yMyAgICA3OTkgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRzY2IxMjEgc2NhbGViICAxLjIzICAgIDgwMCAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjEyMiBzY2FsZWIgIDEuMjMgICAgODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMTIzIHNjYWxlYiAgMS4yMyAgICA4MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2IxMjQgc2NhbGViICAxLjIzICAgLTc5OSAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkc2NiMTI1IHNjYWxlYiAgMS4yMyAgIC04MDAgICAgICAgICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZHNjYjEyNiBzY2FsZWIgIDEuMjMgICAtODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC04MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kZHNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjENCi1kZHNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCi1kZHNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCi1kZHNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQNCi1kZHNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCi1kZHNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQotZGRzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQ0KLWRkc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCi1kZHNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KLWRkc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZGRzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNw0KLWRkc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3DQotZGRzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQ0KLWRkc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1DQotZGRzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwDQotZGRzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MA0KLWRkc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDANCi1kZHNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMA0KLWRkc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNw0KLWRkc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcNCi1kZHNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUNCi1kZHNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41DQotZGRzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTANCi1kZHNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTANCi1kZHNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDANCi1kZHNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwDQotZGRzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNw0KLWRkc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03DQotZGRzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUNCi1kZHNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUNCi1kZHNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwDQotZGRzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTANCi1kZHNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMA0KLWRkc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMA0KLWRkc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzENCi1kZHNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQ0KLWRkc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMg0KLWRkc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzINCi1kZHNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wDQotZGRzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjANCi1kZHNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMA0KLWRkc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMA0KLWRkc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzINCi1kZHNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMg0KLWRkc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMw0KLWRkc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMNCi1kZHNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTANCi1kZHNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwDQotZGRzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjANCi1kZHNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjANCi0NCi0tLSB6ZXJvcw0KLWRkc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzENCi1kZHNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMg0KLWRkc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcNCi1kZHNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOA0KLWRkc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzENCi1kZHNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMg0KLWRkc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNA0KLWRkc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRkc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzM4NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjEzMyBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRkc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzgzDQotZGRzY2IxMzcgc2NhbGViICAxRS0zODMgICAgICAgICAgICsxICAtPiAxRS0zODINCi1kZHNjYjEzOCBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTAgIC0+IDFFLTM4Mw0KLWRkc2NiMTM5IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMSAgLT4gMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbA0KLWRkc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODINCi1kZHNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotZGRzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IxNDMgc2NhbGViICAxRS0zOTggICAgICAgICAgKzEgIC0+IDFFLTM5NyAgICAgICAgICBTdWJub3JtYWwNCi1kZHNjYjE0NCBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMCAgLT4gMUUtMzk4ICAgICAgICAgU3Vibm9ybWFsDQotZGRzY2IxNDUgc2NhbGViICAxRS0zOTggICAgICAgICAgLTEgIC0+IDBFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kZHNjYjE1MCBzY2FsZWIgIC0xRS0zOTggICAgICAgICArMSAgLT4gLTFFLTM5NyAgICAgICAgIFN1Ym5vcm1hbA0KLWRkc2NiMTUxIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgIC0wICAtPiAtMUUtMzk4ICAgICAgICBTdWJub3JtYWwNCi1kZHNjYjE1MiBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMSAgLT4gLTBFLTM5OCAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRkc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgyDQotZGRzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCi1kZHNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IxNTYgc2NhbGViICAtMUUtMzgzICAgICAgICAgICsxICAtPiAtMUUtMzgyDQotZGRzY2IxNTcgc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0wICAtPiAtMUUtMzgzDQotZGRzY2IxNTggc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0xICAtPiAtMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbA0KLWRkc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZGRzY2IxNjAgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1kZHNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4Mw0KLWRkc2NiMTYyIHNjYWxlYiAgLTlFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kZHNjYjE2MyBzY2FsZWIgIC0xRSszODQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc29tZSBPcmlnYW1pDQotLS0gKHRoZXNlIGNoZWNrIHRoYXQgb3ZlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpDQotZGRzY2IxNzEgc2NhbGViICAgMTAwMEUrMzY1ICArMSAtPiAxLjAwMEUrMzY5DQotZGRzY2IxNzIgc2NhbGViICAgMTAwMEUrMzY2ICArMSAtPiAxLjAwMEUrMzcwDQotZGRzY2IxNzMgc2NhbGViICAgMTAwMEUrMzY3ICArMSAtPiAxLjAwMEUrMzcxDQotZGRzY2IxNzQgc2NhbGViICAgMTAwMEUrMzY4ICArMSAtPiAxLjAwMEUrMzcyDQotZGRzY2IxNzUgc2NhbGViICAgMTAwMEUrMzY5ICArMSAtPiAxLjAwMDBFKzM3MyAgICAgICAgICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE3NiBzY2FsZWIgICAxMDAwRSszNzAgICsxIC0+IDEuMDAwMDBFKzM3NCAgICAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzM3MSAgKzEgLT4gMS4wMDAwMDBFKzM3NSAgICAgICAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxNzggc2NhbGViICAgMTAwMEUrMzcyICArMSAtPiAxLjAwMDAwMDBFKzM3NiAgICAgICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE3OSBzY2FsZWIgICAxMDAwRSszNzMgICsxIC0+IDEuMDAwMDAwMDBFKzM3NyAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzM3NCAgKzEgLT4gMS4wMDAwMDAwMDBFKzM3OCAgICAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxODEgc2NhbGViICAgMTAwMEUrMzc1ICArMSAtPiAxLjAwMDAwMDAwMDBFKzM3OSAgICAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE4MiBzY2FsZWIgICAxMDAwRSszNzYgICsxIC0+IDEuMDAwMDAwMDAwMDBFKzM4MCAgICAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzM3NyAgKzEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgICAgICAgICBDbGFtcGVkDQotZGRzY2IxODQgc2NhbGViICAgMTAwMEUrMzc4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgICAgICAgIENsYW1wZWQNCi1kZHNjYjE4NSBzY2FsZWIgICAxMDAwRSszNzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgICAgICAgQ2xhbXBlZA0KLWRkc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzM4MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgICAgICBDbGFtcGVkDQotZGRzY2IxODcgc2NhbGViICAgMTAwMEUrMzgxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMNCi0tLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpDQotZGRzY2IyMDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KLWRkc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMEUtMzg1IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDBFLTM4NiBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDBFLTM4NyBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTUgIC0+IDEuMDAwMDAwMDAwMEUtMzg4IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMDcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNiAgLT4gMS4wMDAwMDAwMDBFLTM4OSBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTcgIC0+IDEuMDAwMDAwMDBFLTM5MCBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTggIC0+IDEuMDAwMDAwMEUtMzkxIFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOSAgLT4gMS4wMDAwMDBFLTM5MiBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEwIC0+IDEuMDAwMDBFLTM5MyBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTExIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTIgLT4gMS4wMDBFLTM5NSBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEzIC0+IDEuMDBFLTM5NiBTdWJub3JtYWwgUm91bmRlZA0KLWRkc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE0IC0+IDEuMEUtMzk3IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTUgLT4gMUUtMzk4IFN1Ym5vcm1hbCBSb3VuZGVkDQotZGRzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTYgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kZHNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNEb3VibGUgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTWF4IHxyaHN8IGlzIDIqKDM4NCsxNikgPSA4MDAKKworLS0gU2FuaXR5IGNoZWNrcworZGRzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMAorZGRzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitkZHNjYjAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAorZGRzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wCitkZHNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK2Rkc2NiMDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKK2Rkc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwCitkZHNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitkZHNjYjAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCitkZHNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTAKK2Rkc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK2Rkc2NiMDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKK2Rkc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwCisKKy0tIEluZmluaXRpZXMKK2Rkc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitkZHNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKK2Rkc2NiMDE2IHNjYWxlYiAgSW5maW5pdHkgIC0xIC0+IEluZmluaXR5CitkZHNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorZGRzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nCistLSBOYU5zLCAwIHBheWxvYWQKK2Rkc2NiMDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK2Rkc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCitkZHNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgorZGRzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4KK2Rkc2NiMDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vbi1pbnRlZ2VyIFJIUworZGRzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMKK2Rkc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK2Rkc2NiMDM4IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdXQtb2YgcmFuZ2UgUkhTCitkZHNjYjEyMCBzY2FsZWIgIDEuMjMgICAgNzk5ICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMjEgc2NhbGViICAxLjIzICAgIDgwMCAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTIyIHNjYWxlYiAgMS4yMyAgICA4MDEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjEyMyBzY2FsZWIgIDEuMjMgICAgODAyICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IxMjQgc2NhbGViICAxLjIzICAgLTc5OSAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxMjUgc2NhbGViICAxLjIzICAgLTgwMCAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxMjYgc2NhbGViICAxLjIzICAgLTgwMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC04MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZGRzY2I4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitkZHNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rkc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZGRzY2I4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitkZHNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkZHNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkZHNjYjg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitkZHNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZGRzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2Rkc2NiMDUxIHNjYWxlYiAgICAgICAgICA3ICAgLTIgIC0+IDAuMDcKK2Rkc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitkZHNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1CitkZHNjYjA1NCBzY2FsZWIgICAgICAgIC03NSAgIC0yICAtPiAtMC43NQorZGRzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitkZHNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCitkZHNjYjA1NyBzY2FsZWIgICAgICAgNy41MDAgIC0yICAtPiAwLjA3NTAwCitkZHNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorZGRzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43CitkZHNjYjA2MiBzY2FsZWIgICAgICAgICAtNyAgIC0xICAtPiAtMC43CitkZHNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK2Rkc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKK2Rkc2NiMDY1IHNjYWxlYiAgICAgICA3LjUwICAgLTEgIC0+IDAuNzUwCitkZHNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK2Rkc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAorZGRzY2IwNjggc2NhbGViICAgICAgLTcuNTAwICAtMSAgLT4gLTAuNzUwMAorZGRzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworZGRzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKK2Rkc2NiMDczIHNjYWxlYiAgICAgICAgIDc1ICAgIDAgIC0+IDc1CitkZHNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK2Rkc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKK2Rkc2NiMDc2IHNjYWxlYiAgICAgIC03LjUwICAgIDAgIC0+IC03LjUwCitkZHNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorZGRzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCitkZHNjYjA4MSBzY2FsZWIgICAgICAgICAgNyAgICAxICAtPiA3RSsxCitkZHNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorZGRzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCitkZHNjYjA4NCBzY2FsZWIgICAgICAgIC03NSAgICAxICAtPiAtNy41RSsyCitkZHNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitkZHNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAorZGRzY2IwODcgc2NhbGViICAgICAgIDcuNTAwICAgMSAgLT4gNzUuMDAKK2Rkc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorZGRzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgorZGRzY2IwOTIgc2NhbGViICAgICAgICAgLTcgICAgMiAgLT4gLTdFKzIKK2Rkc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworZGRzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMworZGRzY2IwOTUgc2NhbGViICAgICAgIDcuNTAgICAgMiAgLT4gNzUwCitkZHNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitkZHNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAorZGRzY2IwOTggc2NhbGViICAgICAgLTcuNTAwICAgMiAgLT4gLTc1MC4wCisKKy0tIHplcm9zCitkZHNjYjExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitkZHNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgorZGRzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNworZGRzY2IxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK2Rkc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKK2Rkc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyCitkZHNjYjExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK2Rkc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzM4NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTM0IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzEgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2NiMTM3IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICArMSAgLT4gMUUtMzgyCitkZHNjYjEzOCBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTAgIC0+IDFFLTM4MworZGRzY2IxMzkgc2NhbGViICAxRS0zODMgICAgICAgICAgIC0xICAtPiAxRS0zODQgICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0MCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICsxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgyCitkZHNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjE0MiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMTQzIHNjYWxlYiAgMUUtMzk4ICAgICAgICAgICsxICAtPiAxRS0zOTcgICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0NCBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMCAgLT4gMUUtMzk4ICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0NSBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMSAgLT4gMEUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZHNjYjE1MCBzY2FsZWIgIC0xRS0zOTggICAgICAgICArMSAgLT4gLTFFLTM5NyAgICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTEgc2NhbGViICAtMUUtMzk4ICAgICAgICAgLTAgIC0+IC0xRS0zOTggICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTIgc2NhbGViICAtMUUtMzk4ICAgICAgICAgLTEgIC0+IC0wRS0zOTggICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rkc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgyCitkZHNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICswICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IxNTYgc2NhbGViICAtMUUtMzgzICAgICAgICAgICsxICAtPiAtMUUtMzgyCitkZHNjYjE1NyBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgLTAgIC0+IC0xRS0zODMKK2Rkc2NiMTU4IHNjYWxlYiAgLTFFLTM4MyAgICAgICAgICAtMSAgLT4gLTFFLTM4NCAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZHNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRzY2IxNjEgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2NiMTYyIHNjYWxlYiAgLTlFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTYzIHNjYWxlYiAgLTFFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBPcmlnYW1pCistLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rkc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzM2NSAgKzEgLT4gMS4wMDBFKzM2OQorZGRzY2IxNzIgc2NhbGViICAgMTAwMEUrMzY2ICArMSAtPiAxLjAwMEUrMzcwCitkZHNjYjE3MyBzY2FsZWIgICAxMDAwRSszNjcgICsxIC0+IDEuMDAwRSszNzEKK2Rkc2NiMTc0IHNjYWxlYiAgIDEwMDBFKzM2OCAgKzEgLT4gMS4wMDBFKzM3MgorZGRzY2IxNzUgc2NhbGViICAgMTAwMEUrMzY5ICArMSAtPiAxLjAwMDBFKzM3MyAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc2IHNjYWxlYiAgIDEwMDBFKzM3MCAgKzEgLT4gMS4wMDAwMEUrMzc0ICAgICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE3NyBzY2FsZWIgICAxMDAwRSszNzEgICsxIC0+IDEuMDAwMDAwRSszNzUgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzggc2NhbGViICAgMTAwMEUrMzcyICArMSAtPiAxLjAwMDAwMDBFKzM3NiAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzM3MyAgKzEgLT4gMS4wMDAwMDAwMEUrMzc3ICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MCBzY2FsZWIgICAxMDAwRSszNzQgICsxIC0+IDEuMDAwMDAwMDAwRSszNzggICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODEgc2NhbGViICAgMTAwMEUrMzc1ICArMSAtPiAxLjAwMDAwMDAwMDBFKzM3OSAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzM3NiAgKzEgLT4gMS4wMDAwMDAwMDAwMEUrMzgwICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MyBzY2FsZWIgICAxMDAwRSszNzcgICsxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODQgc2NhbGViICAgMTAwMEUrMzc4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzM3OSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICAgICAgICBDbGFtcGVkCitkZHNjYjE4NiBzY2FsZWIgICAxMDAwRSszODAgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgICAgICAgQ2xhbXBlZAorZGRzY2IxODcgc2NhbGViICAgMTAwMEUrMzgxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zCistLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCitkZHNjYjIwMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjIwMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMEUtMzg1IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMEUtMzg2IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC00ICAtPiAxLjAwMDAwMDAwMDAwRS0zODcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTUgIC0+IDEuMDAwMDAwMDAwMEUtMzg4IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC02ICAtPiAxLjAwMDAwMDAwMEUtMzg5IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC03ICAtPiAxLjAwMDAwMDAwRS0zOTAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTggIC0+IDEuMDAwMDAwMEUtMzkxIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC05ICAtPiAxLjAwMDAwMEUtMzkyIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMCAtPiAxLjAwMDAwRS0zOTMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTExIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMiAtPiAxLjAwMEUtMzk1IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMyAtPiAxLjAwRS0zOTYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE0IC0+IDEuMEUtMzk3IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNSAtPiAxRS0zOTggU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE2IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2hpZnQuZGVjVGVzdAppbmRleCBlYzQ3MjQwLi5mNjJhMjM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QKQEAgLTEsMjYyICsxLDI2MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRTaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZGRzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1kZHNoaTAwMiBzaGlmdCAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMA0KLWRkc2hpMDAzIHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCi1kZHNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkc2hpMDA1IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgMTYgIC0+ICAwDQotZGRzaGkwMDYgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDANCi1kZHNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KLWRkc2hpMDA4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+ICAxMjM0NTY3ODkwMTIzNDUNCi1kZHNoaTAwOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMQ0KLWRkc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwDQotZGRzaGkwMTEgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDkNCi1kZHNoaTAxMiBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMA0KLQ0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCi1kZHNoaTAxNSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDE3IHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAxOCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDIwIHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAyMSBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCi1kZHNoaTAyNSBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpMDI3IHNoaWZ0ICAgICAgICAxICAgICAxNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTAyOCBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuDQotZGRzaGkwMzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTYgIC0+IDANCi1kZHNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMQ0KLWRkc2hpMDMyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAxMg0KLWRkc2hpMDMzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiAxMjMNCi1kZHNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gMTIzNA0KLWRkc2hpMDM1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiAxMjM0NQ0KLWRkc2hpMDM2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiAxMjM0NTYNCi1kZHNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gMTIzNDU2Nw0KLWRkc2hpMDM4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiAxMjM0NTY3OA0KLWRkc2hpMDM5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAxMjM0NTY3ODkNCi1kZHNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MA0KLWRkc2hpMDQxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAxMjM0NTY3ODkwMQ0KLWRkc2hpMDQyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAxMjM0NTY3ODkwMTINCi1kZHNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMw0KLWRkc2hpMDQ0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiAxMjM0NTY3ODkwMTIzNA0KLWRkc2hpMDQ1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiAxMjM0NTY3ODkwMTIzNDUNCi1kZHNoaTA0NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLQ0KLWRkc2hpMDQ3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZGRzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjANCi1kZHNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTYwMA0KLWRkc2hpMDUwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MDAwDQotZGRzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjAwMDANCi1kZHNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTYwMDAwMA0KLWRkc2hpMDUzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MDAwMDAwDQotZGRzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjAwMDAwMDANCi1kZHNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs4ICAgLT4gOTAxMjM0NTYwMDAwMDAwMA0KLWRkc2hpMDU2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MDAwMDAwMDAwDQotZGRzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjAwMDAwMDAwMDANCi1kZHNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMSAgLT4gMjM0NTYwMDAwMDAwMDAwMA0KLWRkc2hpMDU5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MDAwMDAwMDAwMDAwDQotZGRzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjAwMDAwMDAwMDAwMDANCi1kZHNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNCAgLT4gNTYwMDAwMDAwMDAwMDAwMA0KLWRkc2hpMDYyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MDAwMDAwMDAwMDAwMDAwDQotZGRzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDANCi0NCi0tLSB6ZXJvcw0KLWRkc2hpMDcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwDQotZGRzaGkwNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCi1kZHNoaTA3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMA0KLWRkc2hpMDczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwDQotZGRzaGkwNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCi1kZHNoaTA3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMA0KLWRkc2hpMDc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwDQotZGRzaGkwNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCi1kZHNoaTA3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMA0KLWRkc2hpMDc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwDQotZGRzaGkwODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCi1kZHNoaTA4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZGRzaGkxNDEgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5RSszODMNCi1kZHNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDlFKzM2OQ0KLWRkc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTBFKzM4NA0KLWRkc2hpMTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NA0KLWRkc2hpMTQ1IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzgzDQotZGRzaGkxNDYgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zODMNCi1kZHNoaTE0NyBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzgyDQotZGRzaGkxNDggc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQotZGRzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCi1kZHNoaTE1MiBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDFFLTM5OA0KLWRkc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4DQotZGRzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgNCi1kZHNoaTE1NSBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NA0KLWRkc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4DQotZGRzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAwRS0zOTgNCi1kZHNoaTE1OCBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OA0KLWRkc2hpMTYwIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzk4DQotZGRzaGkxNjEgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zOTgNCi1kZHNoaTE2MiBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzk3DQotZGRzaGkxNjMgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotLS0gIG5lZ2F0aXZlcw0KLWRkc2hpMTcxIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFKzM4Mw0KLWRkc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTlFKzM2OQ0KLWRkc2hpMTczIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQNCi1kZHNoaTE3NCBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwMEUrMzg0DQotZGRzaGkxNzUgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzgzDQotZGRzaGkxNzYgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzgzDQotZGRzaGkxNzcgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODINCi1kZHNoaTE3OCBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQotZGRzaGkxODEgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRzaGkxODIgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4DQotZGRzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4DQotZGRzaGkxODQgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4DQotZGRzaGkxODUgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQotZGRzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4DQotZGRzaGkxODcgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4DQotZGRzaGkxODggc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4DQotZGRzaGkxOTAgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzk4DQotZGRzaGkxOTEgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzk4DQotZGRzaGkxOTIgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcNCi1kZHNoaTE5MyBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQotDQotLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KLWRkc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wDQotZGRzaGkyMDIgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTANCi1kZHNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwDQotZGRzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDANCi1kZHNoaTIwNSBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIDE2ICAtPiAtMA0KLWRkc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wDQotZGRzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTANCi1kZHNoaTIwOCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAtMTIzNDU2Nzg5MDEyMzQ1DQotZGRzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTENCi1kZHNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMA0KLWRkc2hpMjExIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05DQotZGRzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTANCi0NCi0NCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KLWRkc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCi1kZHNoaTc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZGRzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRkc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kZHNoaTc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZGRzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KLWRkc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGRzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KLWRkc2hpODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFODQotZGRzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kZHNoaTgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRkc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFODQotZGRzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kZHNoaTgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRkc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFODQotZGRzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kZHNoaTgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRkc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFODQotZGRzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kZHNoaTgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFODQotZGRzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kZHNoaTgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRkc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFODQotZGRzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kZHNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZGRzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZGRzaGk4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQotZGRzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZGRzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZGRzaGk4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQotZGRzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZGRzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZGRzaGk4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KLWRkc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQotZGRzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZGRzaGk4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkU2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rkc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkZHNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkZHNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMAorZGRzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDAKK2Rkc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCitkZHNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZGRzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NQorZGRzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDEKK2Rkc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwCitkZHNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOQorZGRzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZGRzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZGRzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KK2Rkc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAwCitkZHNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMQorZGRzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDEyCitkZHNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gMTIzCitkZHNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gMTIzNAorZGRzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDEyMzQ1CitkZHNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gMTIzNDU2CitkZHNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gMTIzNDU2NworZGRzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4CitkZHNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5CitkZHNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MAorZGRzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxCitkZHNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyCitkZHNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMworZGRzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0CitkZHNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1CitkZHNoaTA0NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorCitkZHNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjAKK2Rkc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjAwCitkZHNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjAwMAorZGRzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjAwMDAKK2Rkc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjAwMDAwCitkZHNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjAwMDAwMAorZGRzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjAwMDAwMDAKK2Rkc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjAwMDAwMDAwCitkZHNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjAwMDAwMDAwMAorZGRzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjAwMDAwMDAwMDAKK2Rkc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjAwMDAwMDAwMDAwCitkZHNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjAwMDAwMDAwMDAwMAorZGRzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjAwMDAwMDAwMDAwMDAKK2Rkc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjAwMDAwMDAwMDAwMDAwCitkZHNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjAwMDAwMDAwMDAwMDAwMAorZGRzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDAKKworLS0gemVyb3MKK2Rkc2hpMDcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCitkZHNoaTA3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorZGRzaGkwNzIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK2Rkc2hpMDczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCitkZHNoaTA3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorZGRzaGkwNzUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK2Rkc2hpMDc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCitkZHNoaTA3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorZGRzaGkwNzggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK2Rkc2hpMDc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCitkZHNoaTA4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorZGRzaGkwODEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OUUrMzgzCitkZHNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDlFKzM2OQorZGRzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0CitkZHNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQKK2Rkc2hpMTQ1IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzgzCitkZHNoaTE0NiBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM4MworZGRzaGkxNDcgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4MgorZGRzaGkxNDggc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgKK2Rkc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4CitkZHNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OAorZGRzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4CitkZHNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDBFLTM5OAorZGRzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgKK2Rkc2hpMTYwIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzk4CitkZHNoaTE2MSBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM5OAorZGRzaGkxNjIgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5NworZGRzaGkxNjMgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCistLSAgbmVnYXRpdmVzCitkZHNoaTE3MSBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTlFKzM2OQorZGRzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorZGRzaGkxNzQgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGRzaGkxNzUgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzgzCitkZHNoaTE3NiBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zODMKK2Rkc2hpMTc3IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzgyCitkZHNoaTE3OCBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTgyIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTFFLTM5OAorZGRzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4CitkZHNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgKK2Rkc2hpMTg1IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4CitkZHNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgKK2Rkc2hpMTg4IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTBFLTM5OAorZGRzaGkxOTAgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzk4CitkZHNoaTE5MSBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zOTgKK2Rkc2hpMTkyIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzk3CitkZHNoaTE5MyBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rkc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCitkZHNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZGRzaGkyMDMgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZGRzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKK2Rkc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0wCitkZHNoaTIwNiBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMAorZGRzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKK2Rkc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDUKK2Rkc2hpMjA5IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0xCitkZHNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMAorZGRzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkKK2Rkc2hpMjEyIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0wCisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK2Rkc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK2Rkc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkZHNoaTgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkZHNoaTgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHNoaTgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZHNoaTgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rkc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZHNoaTgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRzaGk4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc2hpODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZGRzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZHNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2Rkc2hpODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZGRzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZHNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2Rkc2hpODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZGRzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZHNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkZHNoaTg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2Rkc2hpODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZHNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU3VidHJhY3QuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QKaW5kZXggMTVkNDc3Ny4uNWViYzQ4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU3VidHJhY3QuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0CkBAIC0xLDYyOSArMSw2MjkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRkU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNEb3VibGUgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1kZHN1YjAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJw0KLWRkc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnDQotZGRzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnDQotZGRzdWIwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScNCi1kZHN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJw0KLWRkc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnDQotZGRzdWIwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnDQotDQotZGRzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnDQotZGRzdWIwMTIgc3VidHJhY3QgLTEgICAxICAtPiAnLTInDQotZGRzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnDQotZGRzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnDQotZGRzdWIwMTUgc3VidHJhY3QgLTIgICAyICAtPiAnLTQnDQotZGRzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnDQotZGRzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnDQotDQotZGRzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcNCi1kZHN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJw0KLWRkc3ViMDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnDQotZGRzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycNCi1kZHN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0Jw0KLWRkc3ViMDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnDQotZGRzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScNCi0NCi1kZHN1YjAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwDQotZGRzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQ0KLWRkc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgNCi1kZHN1YjAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwDQotZGRzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQ0KLWRkc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTINCi1kZHN1YjAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMA0KLWRkc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExDQotZGRzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTINCi0NCi1kZHN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1Jw0KLWRkc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnDQotZGRzdWIwNDIgc3VidHJhY3QgJy01JyAgICctMycgICAtPiAnLTInDQotZGRzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScNCi1kZHN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnDQotZGRzdWIwNDUgc3VidHJhY3QgJzEuMycgICcwLjMnICAtPiAnMS4wJw0KLWRkc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnDQotDQotZGRzdWIwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScNCi1kZHN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJw0KLQ0KLWRkc3ViMDYwIHN1YnRyYWN0ICc3MCcgICAgJzEwMDAwZSsxNicgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OUUrMTknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMDYzIHN1YnRyYWN0ICc3MDAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQNCi1kZHN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZA0KLSAgLS0gc3ltbWV0cnk6DQotZGRzdWIwNjUgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWIwNjggc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTNFKzE5JyBSb3VuZGVkDQotZGRzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZA0KLQ0KLSAgLS0gc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzDQotZGRzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJw0KLWRkc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnDQotZGRzdWIwOTIgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcNCi1kZHN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJw0KLWRkc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnDQotZGRzdWIwOTUgc3VidHJhY3QgJzMnICAgICcuMycgICAtPiAnMi43Jw0KLWRkc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycNCi1kZHN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnDQotZGRzdWIwOTggc3VidHJhY3QgJzMuMDAnICcuMycgICAtPiAnMi43MCcNCi1kZHN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJw0KLWRkc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnDQotZGRzdWIxMDEgc3VidHJhY3QgJzMnICAgICctMycgICAtPiAnNicNCi1kZHN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnDQotZGRzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43Jw0KLWRkc3ViMTA0IHN1YnRyYWN0ICczLjAnICAnMC4zJyAgLT4gJzIuNycNCi1kZHN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJw0KLWRkc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcNCi1kZHN1YjEwNyBzdWJ0cmFjdCAnMycgICAgJyszLjAnIC0+ICcwLjAnDQotZGRzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJw0KLQ0KLS0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uDQotLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQ0KLS0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNw0KLS0tIHdpdGggaW5wdXQgcm91bmRpbmcuDQotZGRzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04Jw0KLWRkc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcNCi1kZHN1YjEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnDQotZGRzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04Jw0KLWRkc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcNCi1kZHN1YjEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcNCi1kZHN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcNCi1kZHN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcNCi1kZHN1YjEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcNCi1kZHN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcNCi1kZHN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcNCi1kZHN1YjEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnDQotZGRzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04Jw0KLWRkc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcNCi1kZHN1YjEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnDQotZGRzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04Jw0KLWRkc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04Jw0KLWRkc3ViMTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04Jw0KLWRkc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04Jw0KLWRkc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04Jw0KLWRkc3ViMTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04Jw0KLWRkc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04Jw0KLWRkc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05Jw0KLWRkc3ViMTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScNCi1kZHN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcNCi1kZHN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnDQotZGRzdWIxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04Jw0KLQ0KLS0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0NCi1kZHN1YjE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScNCi1kZHN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnDQotZGRzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknDQotZGRzdWIxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicNCi1kZHN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcNCi1kZHN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3Jw0KLWRkc3ViMTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicNCi1kZHN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJw0KLWRkc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicNCi1kZHN1YjE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJw0KLWRkc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicNCi1kZHN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnDQotZGRzdWIxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnDQotZGRzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInDQotZGRzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnDQotLS0gMC4gb24gbGVmdA0KLWRkc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnDQotZGRzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnDQotZGRzdWIxODIgc3VidHJhY3QgJzAuMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCi1kZHN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInDQotZGRzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcNCi1kZHN1YjE4NSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQotZGRzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInDQotZGRzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJw0KLWRkc3ViMTg4IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KLWRkc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicNCi1kZHN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicNCi1kZHN1YjE5MSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCi1kZHN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jw0KLWRkc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInDQotZGRzdWIxOTQgc3VidHJhY3QgJzAuMCcgICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCi0tLSBuZWdhdGl2ZXMgb2Ygc2FtZQ0KLWRkc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJw0KLWRkc3ViMjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycNCi1kZHN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCi1kZHN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJw0KLWRkc3ViMjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jw0KLWRkc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQotZGRzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJw0KLWRkc3ViMjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnDQotZGRzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KLWRkc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInDQotZGRzdWIyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jw0KLWRkc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCi1kZHN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcNCi1kZHN1YjIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicNCi1kZHN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCi0NCi0tLSBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSB0aGUgc2FtZSBhcyB0ZXN0Y2FzZXMgdW5kZXIgYWRkXQ0KLWRkc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcNCi1kZHN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnDQotZGRzdWIyMjIgc3VidHJhY3QgJy01NjI2N0UtMTAnIDAgIC0+ICctMC4wMDAwMDU2MjY3Jw0KLWRkc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3Jw0KLWRkc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnDQotZGRzdWIyMjUgc3VidHJhY3QgJy01NjI2N0UtNycgIDAgIC0+ICctMC4wMDU2MjY3Jw0KLWRkc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3Jw0KLWRkc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnDQotZGRzdWIyMjggc3VidHJhY3QgJy01NjI2N0UtMicgIDAgIC0+ICctNTYyLjY3Jw0KLWRkc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycNCi1kZHN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycNCi0tLSBzeW1tZXRyeSAuLi4NCi1kZHN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcNCi1kZHN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycNCi1kZHN1YjI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCi1kZHN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3Jw0KLWRkc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycNCi1kZHN1YjI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycNCi1kZHN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3Jw0KLWRkc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCi1kZHN1YjI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycNCi1kZHN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCi1kZHN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KLQ0KLS0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkDQotZGRzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknDQotZGRzdWIzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZGRzdWIzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZGRzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnDQotZGRzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnDQotZGRzdWIzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnDQotZGRzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWRkc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScNCi1kZHN1YjMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnDQotZGRzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJw0KLQ0KLS0tIGludGVybmFsIGJvdW5kYXJpZXMNCi1kZHN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycNCi1kZHN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnDQotZGRzdWIzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcNCi1kZHN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcNCi1kZHN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnDQotZGRzdWIzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcNCi1kZHN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycNCi1kZHN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnDQotZGRzdWIzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcNCi1kZHN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcNCi1kZHN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnDQotZGRzdWIzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcNCi0NCi0tLSB6ZXJvIHByZXNlcnZhdGlvbg0KLWRkc3ViMzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1kZHN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScNCi1kZHN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5Jw0KLWRkc3ViMzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCi1kZHN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kZHN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxDQotZGRzdWIzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQ0KLWRkc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMA0KLWRkc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMA0KLWRkc3ViMzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xDQotZGRzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTENCi1kZHN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wDQotZGRzdWIzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMA0KLQ0KLS0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQNCi1kZHN1YjkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43DQotZGRzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTENCi0NCi1kZHN1YjkyMCBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NiAtPiAyOTkuOTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTUNCi1kZHN1YjkyMyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NCAtPiAgOTkuOTk5OTk5OTk5OTk5OTYNCi1kZHN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMiBSb3VuZGVkDQotZGRzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwDQotZGRzdWI5MjYgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjEgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5DQotZGRzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk0DQotZGRzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk0DQotZGRzdWI5Mjkgc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTkuMDAwMDAwMDEyMzQ1NjYgLT4gICAxLjk5OTk5OTk5OTk5OTk0DQotDQotLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQotZGRzdWIzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZGRzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCi1kZHN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZGRzdWIzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQotZGRzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQotZGRzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZGRzdWIzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQotZGRzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCi1kZHN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWRkc3ViMzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCi1kZHN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KLWRkc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1kZHN1YjQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCi1kZHN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCi1kZHN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZGRzdWI0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCi1kZHN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCi1kZHN1YjQwNyBzdWJ0cmFjdCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZGRzdWI0MDggc3VidHJhY3QgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkDQotZGRzdWI0MDkgc3VidHJhY3QgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkDQotZGRzdWI0MTAgc3VidHJhY3QgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkDQotZGRzdWI0MTEgc3VidHJhY3QgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQotDQotLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQotZGRzdWI0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3Jw0KLWRkc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3Jw0KLWRkc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnDQotZGRzdWI0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3Jw0KLWRkc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycNCi1kZHN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnDQotZGRzdWI0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43Jw0KLWRkc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3Jw0KLWRkc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJw0KLWRkc3ViNDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnDQotZGRzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnDQotZGRzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScNCi1kZHN1YjQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnDQotZGRzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41Jw0KLWRkc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnDQotZGRzdWI0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnDQotZGRzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJw0KLWRkc3ViNDM3IHN1YnRyYWN0IDAgICctNUUxNScgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAnDQotZGRzdWI0Mzggc3VidHJhY3QgMCAgJy01RTE2JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCi1kZHN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMTcnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZA0KLWRkc3ViNDQwIHN1YnRyYWN0IDAgICctNUUxOCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQotZGRzdWI0NDEgc3VidHJhY3QgMCAgJy01RTEwMCcgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCi0NCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRkc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCi1kZHN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJw0KLWRkc3ViNDYzIHN1YnRyYWN0ICcxLjExMScgICctMUUrMTInICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnDQotZGRzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KLWRkc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScNCi1kZHN1YjQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJw0KLWRkc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnDQotZGRzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5Jw0KLQ0KLS0tICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQ0KLWRkc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI0NzIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI0NzUgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRkc3ViNDc4IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCi1kZHN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnDQotZGRzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk3Jw0KLWRkc3ViNDgxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicNCi1kZHN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnDQotZGRzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk0Jw0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkc3ViNTAwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5Jw0KLWRkc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MDMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MDYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MDkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4Jw0KLWRkc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUxOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kZHN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScNCi1kZHN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1Mjggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MzEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1MzQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcNCi1kZHN1YjUzNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRkc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZGRzdWI1NTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknDQotZGRzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU1MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU1NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU1OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnDQotZGRzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNTY4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3ltbWV0cnkuLi4NCi1yb3VuZGluZzogaGFsZl91cA0KLWRkc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCi1kZHN1YjYwMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYwNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYwNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQotZGRzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjE5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkc3ViNjIwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCi1kZHN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MjMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MjYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2Mjkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MzIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2MzUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQotZGRzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjYzOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kZHN1YjY0MCBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCi1kZHN1YjY1MSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY1NCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY1NyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2MCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2MyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZGRzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2NiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQotZGRzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi1kZHN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRkc3ViNjY5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gbG90cyBvZiBsZWFkaW5nIHplcm9zIGluIGludGVybWVkaWF0ZSByZXN1bHQsIGFuZCBzaG93aW5nIGVmZmVjdHMgb2YNCi0tLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcNCi1yb3VuZGluZzogaGFsZl91cA0KLWRkc3ViNjcwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCi1kZHN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQotZGRzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCi1kZHN1YjY3MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KLWRkc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRkc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCi1kZHN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQotZGRzdWI2ODIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCi1kZHN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KLWRkc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQotDQotZGRzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQ0KLWRkc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjENCi1kZHN1YjY4NyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguMScgLT4gLTAuMQ0KLWRkc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41DQotZGRzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkNCi0NCi1yb3VuZGluZzogZG93bg0KLWRkc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCi1kZHN1YjY5MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQotZGRzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCi1kZHN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KLWRkc3ViNjk0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQotDQotLS0gU3BlY2lhbHMNCi1kZHN1Yjc4MCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc4MyBzdWJ0cmFjdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZGRzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc4NyBzdWJ0cmFjdCAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQotZGRzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kZHN1Yjc5MCBzdWJ0cmFjdCAgMCAgICAgSW5mICAgLT4gLUluZmluaXR5DQotZGRzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRkc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi0NCi1kZHN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZGRzdWI4MDIgc3VidHJhY3QgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZGRzdWI4MDUgc3VidHJhY3QgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kZHN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRzdWI4MDggc3VidHJhY3QgLTEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgxMSBzdWJ0cmFjdCAtMCAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZGRzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRkc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kZHN1YjgxNCBzdWJ0cmFjdCAgMTAwMCAtSW5mICAgLT4gIEluZmluaXR5DQotZGRzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRkc3ViODIxIHN1YnRyYWN0ICBOYU4gICBJbmYgICAtPiAgTmFODQotZGRzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4NCi1kZHN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTg0KLWRkc3ViODI0IHN1YnRyYWN0ICBOYU4gICAwICAgICAtPiAgTmFODQotZGRzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4NCi1kZHN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTg0KLWRkc3ViODI3IHN1YnRyYWN0ICBOYU4gIC0xMDAwICAtPiAgTmFODQotZGRzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4NCi1kZHN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTg0KLWRkc3ViODMwIHN1YnRyYWN0IC1JbmYgICBOYU4gICAtPiAgTmFODQotZGRzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4NCi1kZHN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTg0KLWRkc3ViODMzIHN1YnRyYWN0IC0wICAgICBOYU4gICAtPiAgTmFODQotZGRzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4NCi1kZHN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTg0KLWRkc3ViODM2IHN1YnRyYWN0ICAxMDAwIC1OYU4gICAtPiAtTmFODQotZGRzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4NCi0NCi1kZHN1Yjg0MSBzdWJ0cmFjdCAgc05hTiAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0NCBzdWJ0cmFjdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0NyBzdWJ0cmFjdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1MCBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1MyBzdWJ0cmFjdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1NiBzdWJ0cmFjdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg1OSBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGRzdWI4NjEgc3VidHJhY3QgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjENCi1kZHN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMg0KLWRkc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zDQotZGRzdWI4NjQgc3VidHJhY3QgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQNCi1kZHN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQ0KLWRkc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQ0KLWRkc3ViODY3IHN1YnRyYWN0IC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQ0KLWRkc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQ0KLWRkc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDENCi1kZHN1Yjg3MSBzdWJ0cmFjdCAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg3NCBzdWJ0cmFjdCAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg3NyBzdWJ0cmFjdCAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRkc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24NCi1kZHN1Yjg4MCBzdWJ0cmFjdCAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGVkZ2UgY2FzZSBzcGlsbHMNCi1kZHN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDANCi1kZHN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMA0KLWRkc3ViOTAzIHN1YnRyYWN0ICAyLjAwRS0zICAxLjAwMjAgIC0+IC0xLjAwMDAwDQotZGRzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDANCi1kZHN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMA0KLWRkc3ViOTA2IHN1YnRyYWN0ICAyLjAwMDAwRS0zICAxLjAwMjAwMDAgIC0+IC0xLjAwMDAwMDAwDQotZGRzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDANCi1kZHN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kZHN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGRzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2Rkc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnCitkZHN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJworZGRzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCitkZHN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJworZGRzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKK2Rkc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCitkZHN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScKKworZGRzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCitkZHN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKK2Rkc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJworZGRzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCitkZHN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKK2Rkc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01JworZGRzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCisKK2Rkc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCitkZHN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJworZGRzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKK2Rkc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCitkZHN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0JworZGRzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKK2Rkc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCisKK2Rkc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTAKK2Rkc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKK2Rkc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKK2Rkc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDAKK2Rkc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKK2Rkc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKK2Rkc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwCitkZHN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQorZGRzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKKworZGRzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScKK2Rkc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCitkZHN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKK2Rkc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnCitkZHN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCitkZHN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCitkZHN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJworCitkZHN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JworZGRzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKKworZGRzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OUUrMTknIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTkzRSsxOScgUm91bmRlZAorZGRzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTkzMEUrMTknIFJvdW5kZWQKKyAgLS0gc3ltbWV0cnk6CitkZHN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQKK2Rkc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTkzMEUrMTknIFJvdW5kZWQKKworICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKK2Rkc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcKK2Rkc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitkZHN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworZGRzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rkc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkZHN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCitkZHN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJworZGRzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcKK2Rkc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCitkZHN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2JworZGRzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43JworZGRzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcKK2Rkc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKK2Rkc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKK2Rkc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcKKworLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4KKy0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNworLS0gd2l0aCBpbnB1dCByb3VuZGluZy4KK2Rkc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKK2Rkc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKK2Rkc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcKK2Rkc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKK2Rkc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKK2Rkc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04JworZGRzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCitkZHN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKK2Rkc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04JworZGRzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCitkZHN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKK2Rkc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcKK2Rkc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKK2Rkc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKK2Rkc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcKK2Rkc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKK2Rkc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04JworZGRzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnCitkZHN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKK2Rkc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04JworZGRzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnCitkZHN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKK2Rkc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05JworZGRzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05JworZGRzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCitkZHN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCitkZHN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnCisKKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KK2Rkc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJworZGRzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJworZGRzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCitkZHN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJworZGRzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCitkZHN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3JworZGRzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJworZGRzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKK2Rkc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKK2Rkc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInCitkZHN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCitkZHN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCitkZHN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcKK2Rkc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJworZGRzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCistLSAwLiBvbiBsZWZ0CitkZHN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZGRzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkZHN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45JworZGRzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZGRzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rkc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK2Rkc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZGRzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZGRzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCitkZHN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkZHN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rkc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworZGRzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rkc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkZHN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworLS0gbmVnYXRpdmVzIG9mIHNhbWUKK2Rkc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZGRzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworZGRzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkZHN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZGRzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitkZHN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZGRzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZGRzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK2Rkc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rkc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkZHN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitkZHN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkZHN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rkc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworZGRzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCisKKy0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCitkZHN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnCitkZHN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCitkZHN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCitkZHN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycKK2Rkc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCitkZHN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCitkZHN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycKK2Rkc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCitkZHN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCitkZHN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnCitkZHN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKKy0tIHN5bW1ldHJ5IC4uLgorZGRzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCitkZHN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycKK2Rkc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZGRzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKK2Rkc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycKK2Rkc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3JworZGRzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKK2Rkc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2Rkc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZGRzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkZHN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZAorZGRzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkZHN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkZHN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rkc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3JworZGRzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCitkZHN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScKK2Rkc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rkc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKK2Rkc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcKK2Rkc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKKworLS0gaW50ZXJuYWwgYm91bmRhcmllcworZGRzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCitkZHN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCitkZHN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJworZGRzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCitkZHN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCitkZHN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJworZGRzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCitkZHN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCitkZHN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJworZGRzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCitkZHN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCitkZHN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorZGRzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5JworZGRzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCitkZHN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5JworZGRzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JworZGRzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkZHN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxCitkZHN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCitkZHN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKK2Rkc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMAorZGRzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKK2Rkc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCitkZHN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wCitkZHN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCisKKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQKK2Rkc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKK2Rkc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCisKK2Rkc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZHN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTUKK2Rkc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5NgorZGRzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDIgUm91bmRlZAorZGRzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwCitkZHN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTkKK2Rkc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5NAorZGRzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk0CitkZHN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTQKKworLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkZHN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2Rkc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZHN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkZHN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2Rkc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkZHN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2Rkc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZHN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZGRzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZGRzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2Rkc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2Rkc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZGRzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZHN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkZHN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZGRzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZHN1YjQwNyBzdWJ0cmFjdCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZHN1YjQwOCBzdWJ0cmFjdCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQKK2Rkc3ViNDA5IHN1YnRyYWN0ICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRzdWI0MTAgc3VidHJhY3QgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitkZHN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkZHN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCitkZHN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKK2Rkc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnCitkZHN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCitkZHN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCitkZHN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnCitkZHN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCitkZHN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKK2Rkc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJworZGRzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKK2Rkc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1JworZGRzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScKK2Rkc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKK2Rkc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKK2Rkc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnCitkZHN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKK2Rkc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKK2Rkc3ViNDM3IHN1YnRyYWN0IDAgICctNUUxNScgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAnCitkZHN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMTYnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTE3JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2Rkc3ViNDQwIHN1YnRyYWN0IDAgICctNUUxOCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCitkZHN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkZHN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKK2Rkc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkZHN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2Rkc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZHN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnCitkZHN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnCitkZHN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnCitkZHN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnCitkZHN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZHN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rkc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rkc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5Li4uCityb3VuZGluZzogaGFsZl91cAorZGRzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZHN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCitkZHN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcKK3JvdW5kaW5nOiBoYWxmX3VwCitkZHN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkZHN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkZHN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZGRzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rkc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2Rkc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rkc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rkc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkZHN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZGRzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworZGRzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQorZGRzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQorZGRzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjEKK2Rkc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41CitkZHN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQorCityb3VuZGluZzogZG93bgorZGRzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZGRzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZGRzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rkc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkZHN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCistLSBTcGVjaWFscworZGRzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorCitkZHN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2Rkc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2Rkc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCitkZHN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTgorZGRzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4KK2Rkc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFOCitkZHN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTgorZGRzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4KK2Rkc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFOCitkZHN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTgorZGRzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4KK2Rkc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFOCitkZHN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTgorZGRzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4KKworZGRzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitkZHN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorZGRzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rkc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitkZHN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorZGRzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkZHN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK2Rkc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorZGRzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZGRzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBlZGdlIGNhc2Ugc3BpbGxzCitkZHN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDAKK2Rkc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwCitkZHN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMAorZGRzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDAKK2Rkc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwCitkZHN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMAorZGRzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDAKK2Rkc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZAorCistLSBOdWxsIHRlc3RzCitkZHN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QKaW5kZXggOTAwYmQ0YS4uYmY2ZDYxZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkVG9JbnRlZ3JhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdApAQCAtMSwyNTcgKzEsMjU3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkZFRvSW50ZWdyYWwuZGVjVGVzdCAtLSByb3VuZCBEb3VibGUgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsDQotLS0gdmFsdWUtZXhhY3QnIG9wZXJhdGlvbnMgKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLg0KLS0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3INCi0tLSBxdWFudGl6ZSwgc28gdGhvc2UgYXJlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHRlc3RlZCBleHRlbnNpdmVseQ0KLS0tIGVsc2V3aGVyZTsgdGhlIHRlc3RzIGhlcmUgYXJlIGZvciBpbnRlZ3JpdHksIHJvdW5kaW5nIG1vZGUsIGV0Yy4NCi0tLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgNCi0tLSBUb0ludGVncmFsRXhhY3QgKHdoaWNoIGRvZXMgc2V0IEluZXhhY3QpIGFuZCB0aGUgZml4ZWQtbmFtZQ0KLS0tIGZ1bmN0aW9ucyAod2hpY2ggZG8gbm90IHNldCBJbmV4YWN0KS4NCi0NCi0tLSBOb3RlIHRoYXQgZGVjTnVtYmVyIGltcGxlbWVudHMgYW4gZWFybGllciBkZWZpbml0aW9uIG9mIHRvSW50ZWdyYWwNCi0tLSB3aGljaCBuZXZlciBzZXRzIEluZXhhY3Q7IHRoZSBkZWNUZXN0IG9wZXJhdG9yIGZvciB0aGF0IGlzIGNhbGxlZA0KLS0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuDQotDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kZGludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMA0KLWRkaW50eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwDQotZGRpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDENCi1kZGludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZA0KLWRkaW50eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5lZ2F0aXZlcw0KLWRkaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wDQotZGRpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTANCi1kZGludHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQ0KLWRkaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkDQotZGRpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApDQotZGRpbnR4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSs2MCAgLT4gMS4wRSs2MQ0KLWRkaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxDQotDQotLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uDQotZGRpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDYyIHRvaW50ZWdyYWx4ICc1NjI2N0UtMicgICAgLT4gJzU2MycgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3Jw0KLWRkaW50eDA2NiB0b2ludGVncmFseCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycNCi1kZGludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1Jw0KLWRkaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJw0KLWRkaW50eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzEwJyAgIC0+ICc1LjYyNjdFKzE0Jw0KLWRkaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1Jw0KLWRkaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2Jw0KLWRkaW50eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzEzJyAgIC0+ICc1LjYyNjdFKzE3Jw0KLWRkaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicNCi1kZGludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLQ0KLWRkaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3Jw0KLWRkaW50eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnDQotZGRpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnDQotZGRpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJw0KLWRkaW50eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSsxMCcgIC0+ICctNS42MjY3RSsxNCcNCi1kZGludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnDQotZGRpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2Jw0KLWRkaW50eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSsxMycgIC0+ICctNS42MjY3RSsxNycNCi1kZGludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2Jw0KLWRkaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzM4NCcgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkDQotDQotLS0gc3Vibm9ybWFsIGlucHV0cw0KLWRkaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDANCi0NCi0tLSBzcGVjaWFscyBhbmQgemVyb3MNCi1kZGludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5DQotZGRpbnR4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQ0KLWRkaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFODQotZGRpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnR4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQotZGRpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wDQotZGRpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwDQotZGRpbnR4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwDQotZGRpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwDQotZGRpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQotZGRpbnR4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwDQotZGRpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwDQotZGRpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwDQotZGRpbnR4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwDQotZGRpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxDQotZGRpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyDQotZGRpbnR4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszDQotZGRpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0DQotZGRpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1DQotZGRpbnR4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wDQotZGRpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wDQotZGRpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wDQotZGRpbnR4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wDQotZGRpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wDQotZGRpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wDQotZGRpbnR4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wDQotZGRpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wDQotZGRpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxDQotZGRpbnR4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyDQotZGRpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszDQotZGRpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0DQotZGRpbnR4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1DQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRkaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4DQotZGRpbnR4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCi1kZGludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOA0KLWRkaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRpbnR4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4NCi1kZGludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGV4YW1wbGVzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kZGludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwDQotZGRpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQNCi1kZGludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjA0IHRvaW50ZWdyYWx4ICAtMTAxLjUgICAgLT4gLTEwMiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNg0KLWRkaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3DQotZGRpbnR4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5DQotDQotDQotLS0gYWxsIHJvdW5kaW5nIG1vZGVzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRkaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotDQotZGRpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLQ0KLWRkaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLQ0KLWRkaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBkb3duDQotDQotZGRpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0NCi1kZGludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgZmxvb3INCi0NCi1kZGludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kZGludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRkaW50eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotZGRpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KLWRkaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYNCi1kZGludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3DQotZGRpbnR4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OA0KLWRkaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkNCi1kZGludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2DQotZGRpbnR4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0Nw0KLWRkaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgNCi1kZGludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5DQotZGRpbnR4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NA0KLWRkaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUNCi1kZGludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2DQotZGRpbnR4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5Nw0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgRG91YmxlIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5CistLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuCistLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgKKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lCistLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuCisKKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbAorLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQKKy0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuCisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZGludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAorZGRpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDAKK2RkaW50eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCitkZGludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZAorZGRpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzCitkZGludHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAorZGRpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKK2RkaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xCitkZGludHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSAgUm91bmRlZAorZGRpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCitkZGludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxCitkZGludHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzYwICAtPiAtMS4wRSs2MQorCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KK2RkaW50eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTE3JyAgIC0+ICcwJyAgICAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JworZGRpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JworZGRpbnR4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKK2RkaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJworZGRpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnCitkZGludHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMScgICAtPiAnNS42MjY3RSsxNScKK2RkaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2JworZGRpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnCitkZGludHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCitkZGludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCAgQ2xhbXBlZAorCitkZGludHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JworZGRpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKK2RkaW50eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JworZGRpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJworZGRpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0JworZGRpbnR4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzExJyAgLT4gJy01LjYyNjdFKzE1JworZGRpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2JworZGRpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3JworZGRpbnR4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKK2RkaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzM4NCcgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkCisKKy0tIHN1Ym5vcm1hbCBpbnB1dHMKK2RkaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDAKKworLS0gc3BlY2lhbHMgYW5kIHplcm9zCitkZGludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5CitkZGludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5CitkZGludHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgorZGRpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RkaW50eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZGRpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwCitkZGludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKK2RkaW50eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAorZGRpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitkZGludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKK2RkaW50eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAorZGRpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwCitkZGludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKK2RkaW50eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQorZGRpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyCitkZGludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKK2RkaW50eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAorZGRpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1CitkZGludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKK2RkaW50eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAorZGRpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wCitkZGludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2RkaW50eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAorZGRpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wCitkZGludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKK2RkaW50eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAorZGRpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxCitkZGludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKK2RkaW50eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMworZGRpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0CitkZGludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4CitkZGludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnR4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKK2RkaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTgorZGRpbnR4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDAKK2RkaW50eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICBSb3VuZGVkCitkZGludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKK2RkaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3CitkZGludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkKKworCistLSBhbGwgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RkaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworZGRpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCisKK2RkaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIHVwCisKK2RkaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGRvd24KKworZGRpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgY2VpbGluZworCitkZGludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBmbG9vcgorCitkZGludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitkZGludHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2CitkZGludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3CitkZGludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4CitkZGludHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5CitkZGludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2CitkZGludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3CitkZGludHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4CitkZGludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5CitkZGludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0CitkZGludHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1CitkZGludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2CitkZGludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3CisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFhvci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QKaW5kZXggM2M1NTU0OC4uMTMxYzdlYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QKQEAgLTEsMzM3ICsxLDMzNyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZGRYb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kZHhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCi1kZHhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi1kZHhvcjAwMyB4b3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCi1kZHhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDANCi1kZHhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWRkeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kZHhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KLWRkeG9yMDA4IHhvciAxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQotZGR4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLWRkeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kZHhvcjAxMSB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KLWRkeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwDQotZGR4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLQ0KLS0tIFZhcmlvdXMgbGVuZ3Rocw0KLS0tICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRkeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDIzIHhvciAgIDExMTExMTEwMDAwMDAwICAgICAgIDExMTExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI2IHhvciAgICAgIDExMTEwMDAwMDAwICAgICAgICAgIDExMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDI5IHhvciAgICAgICAgIDEwMDAwMDAwICAgICAgICAgICAgIDEwMDAwMDAwICAtPiAgMA0KLWRkeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMA0KLWRkeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMA0KLWRkeG9yMDMyIHhvciAgICAgICAgICAgIDEwMDAwICAgICAgICAgICAgICAgIDEwMDAwICAtPiAgMA0KLWRkeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMA0KLWRkeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMA0KLWRkeG9yMDM1IHhvciAgICAgICAgICAgICAgIDEwICAgICAgICAgICAgICAgICAgIDEwICAtPiAgMA0KLWRkeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMA0KLQ0KLWRkeG9yMDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTAwMDAwMDAwMA0KLWRkeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMA0KLWRkeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMA0KLWRkeG9yMDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQ0KLWRkeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQ0KLWRkeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQ0KLWRkeG9yMDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KLWRkeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQ0KLWRkeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQ0KLWRkeG9yMDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KLQ0KLWRkeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMA0KLWRkeG9yMDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQotZGR4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMA0KLWRkeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMA0KLWRkeG9yMDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwDQotZGR4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMA0KLWRkeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMA0KLWRkeG9yMDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwDQotZGR4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMA0KLWRkeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMA0KLQ0KLWRkeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQ0KLWRkeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQotZGR4b3IwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KLWRkeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQ0KLWRkeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExDQotZGR4b3IwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KLWRkeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQ0KLWRkeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExDQotZGR4b3IwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KLWRkeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQ0KLQ0KLWRkeG9yMDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExMA0KLWRkeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQotZGR4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMA0KLWRkeG9yMDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMA0KLWRkeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwDQotZGR4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMA0KLWRkeG9yMDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMA0KLWRkeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwDQotZGR4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMA0KLWRkeG9yMDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMA0KLQ0KLWRkeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQ0KLWRkeG9yMDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotZGR4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KLWRkeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQ0KLWRkeG9yMDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQotZGR4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KLWRkeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQ0KLWRkeG9yMDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExDQotZGR4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQ0KLWRkeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQ0KLQ0KLWRkeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMA0KLWRkeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMA0KLWRkeG9yMDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMA0KLWRkeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMA0KLWRkeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLWRkeG9yMDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMA0KLWRkeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMA0KLWRkeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMA0KLWRkeG9yMDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQ0KLQ0KLWRkeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMA0KLWRkeG9yMTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMA0KLWRkeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMA0KLWRkeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMA0KLWRkeG9yMTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLWRkeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMA0KLWRkeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMA0KLWRkeG9yMTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMA0KLWRkeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQ0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLWRkeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1kZHhvcjI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLWRkeG9yMjUwIHhvciAgMjAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1MSB4b3IgIDcwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTIgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjUzIHhvciAgOTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1NCB4b3IgIDIwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTUgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjU2IHhvciAgODAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI1NyB4b3IgIDkwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNTggeG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjU5IHhvciAgMTAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI2MCB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNjEgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjYyIHhvciAgMDAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI2MyB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNjQgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjY1IHhvciAgMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRC0xDQotZGR4b3IyNzAgeG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjcxIHhvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI3MiB4b3IgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNzMgeG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjc0IHhvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI3NSB4b3IgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyNzYgeG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjc3IHhvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IExTRA0KLWRkeG9yMjgwIHhvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4MSB4b3IgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyODIgeG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjgzIHhvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4NCB4b3IgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyODUgeG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjg2IHhvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI4NyB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1kZHhvcjI4OCB4b3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyODkgeG9yICAwMDAxMDAwMDcwMDAwMDAxIDEwMDAwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjkwIHhvciAgMDAwMDEwMDA4MDAwMDAxMCAxMDAwMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5MSB4b3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTIgeG9yICAxMDAwMDAxMDAwMDAxMDAwIDAwMDAwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjkzIHhvciAgMTAwMDAwMDEwMDAxMDAwMCAwMDAwMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5NCB4b3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTUgeG9yICAxMDAwMDAwMDAxMDAwMDAwIDAwMDAwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNpZ25zDQotZGR4b3IyOTYgeG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjI5NyB4b3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMjk4IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IyOTkgeG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDEwMDAwMTAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRkeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzMzIgeG9yICAzICAgMUUtMjk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzM0IHhvciAgNSAgIDFFLTIwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzMzUgeG9yICA2ICAgLTFFLTIwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzM3IHhvciAgOCAgIC0xRS0yOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQyIHhvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNDMgeG9yICAxLjAwMDAwMDAwRS0yOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM0NCB4b3IgIDFFLTIwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQ1IHhvciAgLTFFLTIwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNDYgeG9yICAtMS4wMDAwMDAwMEUtMjk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM0NyB4b3IgIC0xRS0yOTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotZGR4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLWRkeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZGR4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRkeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZGR4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZGR4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kZHhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRkeG9yODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZGR4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkZHhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2RkeG9yMDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQorZGR4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwCitkZHhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkZHhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkZHhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGR4b3IwMDggeG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RkeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RkeG9yMDExIHhvciAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZHhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorZGR4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NgorZGR4b3IwMjEgeG9yIDExMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyMiB4b3IgIDExMTExMTExMDAwMDAwMCAgICAgIDExMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDIzIHhvciAgIDExMTExMTEwMDAwMDAwICAgICAgIDExMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjQgeG9yICAgIDExMTExMTAwMDAwMDAgICAgICAgIDExMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNSB4b3IgICAgIDExMTExMDAwMDAwMCAgICAgICAgIDExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI2IHhvciAgICAgIDExMTEwMDAwMDAwICAgICAgICAgIDExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjcgeG9yICAgICAgIDExMTAwMDAwMDAgICAgICAgICAgIDExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyOCB4b3IgICAgICAgIDExMDAwMDAwMCAgICAgICAgICAgIDExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI5IHhvciAgICAgICAgIDEwMDAwMDAwICAgICAgICAgICAgIDEwMDAwMDAwICAtPiAgMAorZGR4b3IwMzAgeG9yICAgICAgICAgIDEwMDAwMDAgICAgICAgICAgICAgIDEwMDAwMDAgIC0+ICAwCitkZHhvcjAzMSB4b3IgICAgICAgICAgIDEwMDAwMCAgICAgICAgICAgICAgIDEwMDAwMCAgLT4gIDAKK2RkeG9yMDMyIHhvciAgICAgICAgICAgIDEwMDAwICAgICAgICAgICAgICAgIDEwMDAwICAtPiAgMAorZGR4b3IwMzMgeG9yICAgICAgICAgICAgIDEwMDAgICAgICAgICAgICAgICAgIDEwMDAgIC0+ICAwCitkZHhvcjAzNCB4b3IgICAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAgIDEwMCAgLT4gIDAKK2RkeG9yMDM1IHhvciAgICAgICAgICAgICAgIDEwICAgICAgICAgICAgICAgICAgIDEwICAtPiAgMAorZGR4b3IwMzYgeG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAwCisKK2RkeG9yMDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTAwMDAwMDAwMAorZGR4b3IwNDEgeG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwCitkZHhvcjA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDAKK2RkeG9yMDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQorZGR4b3IwNDQgeG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMDExCitkZHhvcjA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTEKK2RkeG9yMDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQorZGR4b3IwNDcgeG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExCitkZHhvcjA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTEKK2RkeG9yMDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQorCitkZHhvcjA1MCB4b3IgMTExMTExMTExMSAgMSAgLT4gIDExMTExMTExMTAKK2RkeG9yMDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwCitkZHhvcjA1MiB4b3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTEwCitkZHhvcjA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTAKK2RkeG9yMDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwCitkZHhvcjA1NSB4b3IgICAgICAxMTExMSAgMSAgLT4gIDExMTEwCitkZHhvcjA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTAKK2RkeG9yMDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwCitkZHhvcjA1OCB4b3IgICAgICAgICAxMSAgMSAgLT4gIDEwCitkZHhvcjA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDAKKworZGR4b3IwNjAgeG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTExCitkZHhvcjA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQorZGR4b3IwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQorZGR4b3IwNjMgeG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExCitkZHhvcjA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQorZGR4b3IwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQorZGR4b3IwNjYgeG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExCitkZHhvcjA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQorZGR4b3IwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQorZGR4b3IwNjkgeG9yICAgICAgICAgIDEgIDAgIC0+ICAxCisKK2RkeG9yMDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExMAorZGR4b3IwNzEgeG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKK2RkeG9yMDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTAKK2RkeG9yMDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMAorZGR4b3IwNzQgeG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTAKK2RkeG9yMDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTAKK2RkeG9yMDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMAorZGR4b3IwNzcgeG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTAKK2RkeG9yMDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTAKK2RkeG9yMDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMAorCitkZHhvcjA4MCB4b3IgMCAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTEKK2RkeG9yMDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitkZHhvcjA4MiB4b3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExCitkZHhvcjA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK2RkeG9yMDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExCitkZHhvcjA4NSB4b3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExCitkZHhvcjA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKK2RkeG9yMDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExCitkZHhvcjA4OCB4b3IgMCAgICAgICAgICAxMSAgLT4gIDExCitkZHhvcjA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDEKKworZGR4b3IwOTAgeG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTAwMDEwMDAwCitkZHhvcjA5MSB4b3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAgMTAwMTAwMDAKK2RkeG9yMDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMAorZGR4b3IwOTMgeG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgICAgMTEwMDAwCitkZHhvcjA5NCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK2RkeG9yMDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMAorZGR4b3IwOTYgeG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgICAgIDEwMTAwCitkZHhvcjA5NyB4b3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAgICAgMTAwMTAKK2RkeG9yMDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQorCitkZHhvcjEwMCB4b3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMDAwMTAwMDAKK2RkeG9yMTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMAorZGR4b3IxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwCitkZHhvcjEwMyB4b3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAgICAxMTAwMDAKK2RkeG9yMTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAorZGR4b3IxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwCitkZHhvcjEwNiB4b3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAgICAgMTAxMDAKK2RkeG9yMTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMAorZGR4b3IxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZGR4b3IyMjAgeG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyMSB4b3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjMgeG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyNCB4b3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjYgeG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyNyB4b3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjkgeG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIzMCB4b3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMzIgeG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkZHhvcjI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDIgeG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RkeG9yMjUwIHhvciAgMjAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjUxIHhvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjUyIHhvciAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjUzIHhvciAgOTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU0IHhvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU1IHhvciAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU2IHhvciAgODAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU3IHhvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU4IHhvciAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjU5IHhvciAgMTAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjYwIHhvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjYxIHhvciAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjYyIHhvciAgMDAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjYzIHhvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjY0IHhvciAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjY1IHhvciAgMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RkeG9yMjcwIHhvciAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjcxIHhvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjcyIHhvciAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjczIHhvciAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjc0IHhvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjc1IHhvciAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjc2IHhvciAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjc3IHhvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkZHhvcjI4MCB4b3IgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4MSB4b3IgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4MiB4b3IgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4MyB4b3IgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4NCB4b3IgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4NSB4b3IgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4NiB4b3IgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4NyB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGR4b3IyODggeG9yICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyODkgeG9yICAwMDAxMDAwMDcwMDAwMDAxIDEwMDAwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTAgeG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTEgeG9yICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTIgeG9yICAxMDAwMDAxMDAwMDAxMDAwIDAwMDAwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTMgeG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTQgeG9yICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTUgeG9yICAxMDAwMDAwMDAxMDAwMDAwIDAwMDAwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2RkeG9yMjk2IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5NyB4b3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTggeG9yICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk5IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMDAxMDAwMDEwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkZHhvcjMzMSB4b3IgIDIgICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzIgeG9yICAzICAgMUUtMjk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzNCB4b3IgIDUgICAxRS0yMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzUgeG9yICA2ICAgLTFFLTIwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS0yOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzNyB4b3IgIDggICAtMUUtMjk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQxIHhvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0MiB4b3IgIDFFLTI5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDMgeG9yICAxLjAwMDAwMDAwRS0yOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ0IHhvciAgMUUtMjA4ICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0NSB4b3IgIC0xRS0yMDcgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDYgeG9yICAtMS4wMDAwMDAwMEUtMjk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ3IHhvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0OCB4b3IgIC05Ljk5OTk5OTk5RSsyOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RkeG9yMzYxIHhvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjMgeG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzY0IHhvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjYgeG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzcxIHhvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzMgeG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzc0IHhvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzYgeG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZGR4b3I3ODAgeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODMgeG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODYgeG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODkgeG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTIgeG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHhvcjgwMCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODAyIHhvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwMyB4b3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA1IHhvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNiB4b3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA4IHhvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwOSB4b3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODExIHhvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMiB4b3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODE0IHhvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxNSB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHhvcjgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjIgeG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjUgeG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjggeG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzEgeG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzQgeG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzcgeG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGR4b3I4NDEgeG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDQgeG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDcgeG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTAgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTMgeG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTYgeG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NTkgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHhvcjg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjIgeG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjUgeG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjggeG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzIgeG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzUgeG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzggeG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODEgeG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODQgeG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBYnMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0CmluZGV4IGY5MTE5YTkuLmJhYWEwNjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0CkBAIC0xLDEyNiArMSwxMjYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQWJzLmRlY1Rlc3QgLS0gZGVjUXVhZCBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHFhYnMwMDEgYWJzICcxJyAgICAgIC0+ICcxJw0KLWRxYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScNCi1kcWFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnDQotZHFhYnMwMDQgYWJzICctMS4wMCcgIC0+ICcxLjAwJw0KLWRxYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcNCi1kcWFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnDQotZHFhYnMwMDcgYWJzICcwMC4wJyAgIC0+ICcwLjAnDQotZHFhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJw0KLWRxYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcNCi0NCi1kcWFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInDQotZHFhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJw0KLWRxYWJzMDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcNCi1kcWFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnDQotZHFhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJw0KLWRxYWJzMDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcNCi1kcWFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcNCi1kcWFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnDQotZHFhYnMwMTggYWJzICctMDAnICAgIC0+ICcwJw0KLQ0KLWRxYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJw0KLWRxYWJzMDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJw0KLQ0KLWRxYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRxYWJzMDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRxYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCi1kcWFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQotZHFhYnMwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCi1kcWFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KLWRxYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQotZHFhYnMwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCi1kcWFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KLWRxYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQotDQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KLWRxYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnDQotZHFhYnMwNDEgYWJzICctMTAwJyAgICAtPiAgJzEwMCcNCi1kcWFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnDQotZHFhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41Jw0KLQ0KLS0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwDQotZHFhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCi1kcWFiczA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCi1kcWFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3Jw0KLWRxYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnDQotZHFhYnMwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLQ0KLS0tIGxvbmcgb3BlcmFuZCB0ZXN0cw0KLWRxYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZHFhYnMzMjIgYWJzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KLWRxYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRxYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KLWRxYWJzMzI1IGFicyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KLWRxYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCi1kcWFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCi0NCi0tLSB6ZXJvcw0KLWRxYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMA0KLWRxYWJzMTEyIGFicyAgICAgICAgIC0wICAgLT4gMA0KLWRxYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KLWRxYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KLWRxYWJzMTE1IGFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZHFhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1kcWFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRxYWJzMTE4IGFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWFiczEyMSBhYnMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxYWJzMTIzIGFicyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcWFiczEyNCBhYnMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWFiczEzMSBhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFhYnMxMzIgYWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQotZHFhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxYWJzMTM0IGFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCi0NCi1kcWFiczEzNSBhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQotZHFhYnMxMzYgYWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxYWJzMTM3IGFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KLWRxYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi0tLSBzcGVjaWFscw0KLWRxYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknDQotZHFhYnM1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScNCi1kcWFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTg0KLWRxYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFiczUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyDQotZHFhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjINCi1kcWFiczUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxYWJzOTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQWJzLmRlY1Rlc3QgLS0gZGVjUXVhZCBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFhYnMwMDEgYWJzICcxJyAgICAgIC0+ICcxJworZHFhYnMwMDIgYWJzICctMScgICAgIC0+ICcxJworZHFhYnMwMDMgYWJzICcxLjAwJyAgIC0+ICcxLjAwJworZHFhYnMwMDQgYWJzICctMS4wMCcgIC0+ICcxLjAwJworZHFhYnMwMDUgYWJzICcwJyAgICAgIC0+ICcwJworZHFhYnMwMDYgYWJzICcwLjAwJyAgIC0+ICcwLjAwJworZHFhYnMwMDcgYWJzICcwMC4wJyAgIC0+ICcwLjAnCitkcWFiczAwOCBhYnMgJzAwLjAwJyAgLT4gJzAuMDAnCitkcWFiczAwOSBhYnMgJzAwJyAgICAgLT4gJzAnCisKK2RxYWJzMDEwIGFicyAnLTInICAgICAtPiAnMicKK2RxYWJzMDExIGFicyAnMicgICAgICAtPiAnMicKK2RxYWJzMDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcKK2RxYWJzMDEzIGFicyAnMi4wMCcgICAtPiAnMi4wMCcKK2RxYWJzMDE0IGFicyAnLTAnICAgICAtPiAnMCcKK2RxYWJzMDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcKK2RxYWJzMDE2IGFicyAnLTAwLjAnICAtPiAnMC4wJworZHFhYnMwMTcgYWJzICctMDAuMDAnIC0+ICcwLjAwJworZHFhYnMwMTggYWJzICctMDAnICAgIC0+ICcwJworCitkcWFiczAyMCBhYnMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcKK2RxYWJzMDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJworCitkcWFiczAzMCBhYnMgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RxYWJzMDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJworZHFhYnMwMzIgYWJzICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZHFhYnMwMzMgYWJzICctMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZHFhYnMwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RxYWJzMDM1IGFicyAnLTAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkcWFiczAzNiBhYnMgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZHFhYnMwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RxYWJzMDM4IGFicyAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCitkcWFiczAzOSBhYnMgJy0wLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitkcWFiczA0MCBhYnMgJzIuMScgICAgIC0+ICAnMi4xJworZHFhYnMwNDEgYWJzICctMTAwJyAgICAtPiAgJzEwMCcKK2RxYWJzMDQyIGFicyAnMTAxLjUnICAgLT4gICcxMDEuNScKK2RxYWJzMDQzIGFicyAnLTEwMS41JyAgLT4gICcxMDEuNScKKworLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IHN1YnRyYWN0IDAKK2RxYWJzMDYwIGFicyAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCitkcWFiczA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2RxYWJzMDYyIGFicyAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCitkcWFiczA2MyBhYnMgJy01NjI2N0UtMScgICAtPiAnNTYyNi43JworZHFhYnMwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKKworLS0gbG9uZyBvcGVyYW5kIHRlc3RzCitkcWFiczMyMSBhYnMgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFhYnMzMjIgYWJzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZHFhYnMzMjMgYWJzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkcWFiczMyNCBhYnMgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RxYWJzMzI1IGFicyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZHFhYnMzMjYgYWJzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZHFhYnMzMjcgYWJzIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CisKKy0tIHplcm9zCitkcWFiczExMSBhYnMgICAgICAgICAgMCAgIC0+IDAKK2RxYWJzMTEyIGFicyAgICAgICAgIC0wICAgLT4gMAorZHFhYnMxMTMgYWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitkcWFiczExNCBhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2RxYWJzMTE1IGFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcWFiczExNiBhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFhYnMxMTcgYWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RxYWJzMTE4IGFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWFiczEyMSBhYnMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWFiczEyMiBhYnMgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWFiczEyMyBhYnMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWFiczEyNCBhYnMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWFiczEzMSBhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFiczEzMiBhYnMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxYWJzMTMzIGFicyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxYWJzMTM0IGFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKKworZHFhYnMxMzUgYWJzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorZHFhYnMxMzYgYWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFhYnMxMzcgYWJzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWFiczEzOCBhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIHNwZWNpYWxzCitkcWFiczUyMCBhYnMgJ0luZicgICAgLT4gJ0luZmluaXR5JworZHFhYnM1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScKK2RxYWJzNTIyIGFicyAgIE5hTiAgICAtPiAgTmFOCitkcWFiczUyMyBhYnMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcWFiczUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyCitkcWFiczUyNSBhYnMgIHNOYU4zMyAgLT4gIE5hTjMzIEludmFsaWRfb3BlcmF0aW9uCitkcWFiczUyNiBhYnMgIC1OYU4yMiAgLT4gLU5hTjIyCitkcWFiczUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2RxYWJzOTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWRkLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdAppbmRleCBiM2FkODkyLi5iMWRmNzdhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdApAQCAtMSwxMjE1ICsxLDEyMTUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQWRkLmRlY1Rlc3QgLS0gZGVjUXVhZCBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlDQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddDQotZHFhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMg0KLWRxYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUNCi1kcWFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1DQotZHFhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMg0KLWRxYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04DQotZHFhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQ0KLWRxYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KLWRxYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCi1kcWFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknDQotZHFhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KLQ0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQwMjEgYWRkIDAgMSAtPiAxDQotZHFhZGQwMjIgYWRkIDEgMSAtPiAyDQotZHFhZGQwMjMgYWRkIDIgMSAtPiAzDQotZHFhZGQwMjQgYWRkIDMgMSAtPiA0DQotZHFhZGQwMjUgYWRkIDQgMSAtPiA1DQotZHFhZGQwMjYgYWRkIDUgMSAtPiA2DQotZHFhZGQwMjcgYWRkIDYgMSAtPiA3DQotZHFhZGQwMjggYWRkIDcgMSAtPiA4DQotZHFhZGQwMjkgYWRkIDggMSAtPiA5DQotZHFhZGQwMzAgYWRkIDkgMSAtPiAxMA0KLQ0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KLWRxYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kcWFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZHFhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJw0KLWRxYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCi0NCi1kcWFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkDQotDQotLS0gc3ltbWV0cnk6DQotZHFhZGQwNDAgYWRkICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDQxIGFkZCAnMTAwMDBlKzM0JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwNDIgYWRkICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQwNDQgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMDQ1IGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZA0KLQ0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcNCi1kcWFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycNCi1kcWFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQotZHFhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCi1kcWFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcNCi1kcWFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQotZHFhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCi1kcWFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcNCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQotZHFhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCi1kcWFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCi1kcWFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcNCi1kcWFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQotZHFhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQotDQotLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbg0KLWRxYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnDQotZHFhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KLWRxYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJw0KLWRxYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnDQotZHFhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1kcWFkZDA3MCBhZGQgMSAgMCAgICAtPiAxDQotZHFhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQ0KLWRxYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMA0KLWRxYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMA0KLWRxYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDANCi1kcWFkZDA3NSBhZGQgIDAgIDEgICAtPiAxDQotZHFhZGQwNzYgYWRkIDAuICAxICAgLT4gMQ0KLWRxYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMA0KLWRxYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMA0KLWRxYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDANCi0NCi0tLSBzb21lIGNhcnJpZXMNCi1kcWFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQ0KLWRxYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KLWRxYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQotZHFhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KLWRxYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KLWRxYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZHFhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMA0KLWRxYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMA0KLWRxYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwDQotZHFhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMA0KLQ0KLQ0KLS0tIG1vcmUgTEhTIHN3YXBzDQotZHFhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRxYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWRxYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZHFhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWRxYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1kcWFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZHFhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWRxYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWRxYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWRxYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZHFhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZHFhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1kcWFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZHFhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWRxYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZHFhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZHFhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWRxYWRkMTA3IGFkZCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQxMDggYWRkICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZA0KLWRxYWRkMTA5IGFkZCAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQNCi1kcWFkZDExMCBhZGQgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkDQotZHFhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZHFhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZHFhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycNCi1kcWFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZHFhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQotZHFhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnDQotZHFhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZHFhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQotZHFhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycNCi1kcWFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWRxYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCi1kcWFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1Jw0KLWRxYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1kcWFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCi1kcWFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScNCi1kcWFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZHFhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCi1kcWFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcNCi1kcWFkZDEzMiBhZGQgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQxMzMgYWRkIDAgICctNUUzNCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZA0KLWRxYWRkMTM0IGFkZCAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQNCi1kcWFkZDEzNSBhZGQgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQotZHFhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1kcWFkZDEzNyBhZGQgIDEgICcwRS0zOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KLWRxYWRkMTM4IGFkZCAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFhZGQxMzkgYWRkICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kcWFkZDE0MCBhZGQgJzBFLTM5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRxYWRkMTQxIGFkZCAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnDQotZHFhZGQxNDIgYWRkIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCi1kcWFkZDE0MyBhZGQgMC4wMDAgICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJw0KLWRxYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQotDQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCi1kcWFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWRxYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KLWRxYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KLWRxYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZHFhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQotZHFhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQotZHFhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kcWFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRxYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQotZHFhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZHFhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnDQotZHFhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnDQotZHFhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZHFhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCi1kcWFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCi0NCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KLWRxYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScNCi1kcWFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWRxYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRxYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknDQotZHFhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1kcWFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWRxYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcWFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3NSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkDQotZHFhZGQxNzggYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQxODEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMjAwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCi1kcWFkZDIwMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjAyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIwNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjA1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIwNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjA4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMDkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjExIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjE0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQotZHFhZGQyMTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIxOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjE5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxYWRkMjIwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCi1kcWFkZDIyMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjIyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIyNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjI1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIyNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjI4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjMxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMzIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjM0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyMzUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQotZHFhZGQyMzcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDIzOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjM5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCi1kcWFkZDI0MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjQxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogZG93bg0KLWRxYWRkMjUwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCi1kcWFkZDI1MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjUyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI1NCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjU1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI1NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjU4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNTkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjYxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjY0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQyNjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQotZHFhZGQyNjcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDI2OCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMjY5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcWFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMA0KLWRxYWRkMzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxDQotZHFhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDINCi1kcWFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMw0KLWRxYWRkMzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5DQotZHFhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDANCi1kcWFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQ0KLWRxYWRkMzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyDQotZHFhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTINCi1kcWFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQ0KLWRxYWRkMzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwDQotZHFhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTENCi1kcWFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5Nw0KLWRxYWRkMzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4DQotZHFhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkNCi1kcWFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMA0KLQ0KLWRxYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWRxYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KLWRxYWRkMzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KLWRxYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWRxYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KLWRxYWRkMzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KLWRxYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWRxYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KLWRxYWRkMzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KLWRxYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWRxYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KLWRxYWRkMzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KLWRxYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWRxYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KLWRxYWRkMzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KLWRxYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KLWRxYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQotZHFhZGQzNDEgYWRkIDFFKzMzICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFhZGQzNDIgYWRkIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KLWRxYWRkMzQzIGFkZCAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQNCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQotZHFhZGQzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDENCi1kcWFkZDM0NSBhZGQgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWFkZDM0NiBhZGQgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0NyBhZGQgMUUrMzUgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KLWRxYWRkMzQ5IGFkZCAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxYWRkMzUwIGFkZCAxRSszNCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzUxIGFkZCAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1kcWFkZDM2MSAgYWRkIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkDQotZHFhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KLWRxYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM2NCAgYWRkIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwRSs2MTExDQotLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLQ0KLS0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCi1yb3VuZGluZzogICAgaGFsZl9kb3duDQotZHFhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCi1kcWFkZDM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZHFhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCi1kcWFkZDM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1kcWFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KLWRxYWRkMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQotZHFhZGQ0MDAgYWRkICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MDEgYWRkICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkNDAyIGFkZCAgIDEgICA3N2UtMzQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MDMgYWRkICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQwNCBhZGQgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDA1IGFkZCAgIDEgICA3N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDQxMCBhZGQgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MTEgYWRkICAxMCAgIDc3ZS0zMyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQxMiBhZGQgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDEzIGFkZCAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MTQgYWRkICAxMCAgIDc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQxNSBhZGQgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ0MjAgYWRkICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MjEgYWRkICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkNDIyIGFkZCAgNzdlLTM0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MjMgYWRkICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQyNCBhZGQgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDI1IGFkZCAgNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDQzMCBhZGQgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQ0MzEgYWRkICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQzMiBhZGQgIDc3ZS0zNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDMzIGFkZCAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ0MzQgYWRkICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDQzNSBhZGQgIDc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZmFzdHBhdGggYm91bmRhcmllcw0KLS0tICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxYWRkNTAxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUwMiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MDMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzM1NTU1NTU1NTU1NTU1NTU1NTUwNTU1NTU1NTU1NTU1NTUnIC0+ICc3OTk5OTk5OTk5OTk5OTk5OTk5NDk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTA0IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczOTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUwNSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzkzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MDYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+IDEuMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDUxMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTEzIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUxNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTE2IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUxNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MTggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTE5IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MjEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTIyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnDQotZHFhZGQ1MjQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTI1IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MjcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTI4IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUyOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTknDQotZHFhZGQ1MzAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5Jw0KLWRxYWRkNTMxIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OScNCi1kcWFkZDUzMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTknDQotZHFhZGQ1MzMgYWRkICczNDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5Jw0KLWRxYWRkNTM0IGFkZCAnMzQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OScNCi1kcWFkZDUzNSBhZGQgJzM0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTknDQotZHFhZGQ1MzYgYWRkICczNDQ0NDQ0NDQnICAnNTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5Jw0KLWRxYWRkNTM3IGFkZCAnMzQ0NDQ0NDQnICAnNTU1NTU1NTUnIC0+ICc4OTk5OTk5OScNCi1kcWFkZDUzOCBhZGQgJzM0NDQ0NDQnICAnNTU1NTU1NScgLT4gJzg5OTk5OTknDQotZHFhZGQ1MzkgYWRkICczNDQ0NDQnICAnNTU1NTU1JyAtPiAnODk5OTk5Jw0KLWRxYWRkNTQwIGFkZCAnMzQ0NDQnICAnNTU1NTUnIC0+ICc4OTk5OScNCi1kcWFkZDU0MSBhZGQgJzM0NDQnICAnNTU1NScgLT4gJzg5OTknDQotZHFhZGQ1NDIgYWRkICczNDQnICAnNTU1JyAtPiAnODk5Jw0KLWRxYWRkNTQzIGFkZCAnMzQnICAnNTUnIC0+ICc4OScNCi1kcWFkZDU0NCBhZGQgJzMnICAnNScgLT4gJzgnDQotDQotZHFhZGQ1NDUgYWRkICczMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc2MDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQ1NDggYWRkICc0MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc3MDAwMDAwMDA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQotZHFhZGQ1NTEgYWRkICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IFJvdW5kZWQNCi0tLSBjaGVjayBwcm9wYWdhdGlvbg0KLWRxYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYWRkNTU2IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxYWRkNTU3IGFkZCAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kcWFkZDY0NDAgYWRkICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NDMgYWRkICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDY0NTAgYWRkICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NTEgYWRkICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NTMgYWRkICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NTUgYWRkICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNjQ2MCBhZGQgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDYxIGFkZCAgLTc3ZS0zMyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDYyIGFkZCAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ2MyBhZGQgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDY0IGFkZCAgLTc3ZS0zNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NjUgYWRkICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNjQ3MCBhZGQgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ3MSBhZGQgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0NzIgYWRkICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ3MyBhZGQgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDc0IGFkZCAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ3NSBhZGQgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWRxYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0ODIgYWRkICAtMSAgICA3N2UtMzQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0zNyAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDY1MDAgYWRkICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY1MDEgYWRkICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NTAyIGFkZCAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDY1MDMgYWRkICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1MDQgYWRkICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1MDUgYWRkICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ2NTEwIGFkZCAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkNjUxMSBhZGQgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQ2NTEyIGFkZCAgIDc3ZS0zNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTEzIGFkZCAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTE0IGFkZCAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1MTUgYWRkICAgNzdlLTM3ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkNjU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQotZHFhZGQ2NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTQ5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTUwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ2NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcNCi1kcWFkZDY1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NTkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFhZGQ2NTYwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCi1kcWFkZDY1NjEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NjkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDY1NzYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KLWRxYWRkNjU3NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNjU3OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZHFhZGQ3NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcWFkZDc1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5Jw0KLWRxYWRkNzU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQotZHFhZGQ3NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTY4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbW9yZSB6ZXJvcywgZXRjLg0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kcWFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQotZHFhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDANCi1kcWFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KLWRxYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQotDQotZHFhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMA0KLWRxYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMA0KLWRxYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDANCi1kcWFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxDQotZHFhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMg0KLWRxYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMNCi1kcWFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszDQotZHFhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMw0KLWRxYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjANCi1kcWFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMA0KLWRxYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQotDQotZHFhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KLWRxYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMA0KLWRxYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDANCi1kcWFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxDQotZHFhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMg0KLWRxYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMNCi1kcWFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszDQotZHFhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMw0KLWRxYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDANCi1kcWFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjANCi1kcWFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwDQotDQotZHFhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDANCi1kcWFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMA0KLWRxYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwDQotZHFhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgNzU0IHNwZWNpYWwgY2FzZQ0KLQ0KLWRxYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwDQotZHFhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTINCi1kcWFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMg0KLWRxYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwDQotDQotZHFhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTENCi1kcWFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQ0KLWRxYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxDQotZHFhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDENCi1kcWFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQ0KLWRxYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xDQotZHFhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDENCi1kcWFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQ0KLQ0KLWRxYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjANCi1kcWFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wDQotZHFhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMA0KLWRxYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjANCi1kcWFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wDQotZHFhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMA0KLWRxYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjANCi1kcWFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wDQotDQotZHFhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wDQotZHFhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMA0KLWRxYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjANCi1kcWFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wDQotZHFhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMA0KLWRxYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjANCi0NCi1kcWFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wDQotZHFhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMA0KLWRxYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wDQotZHFhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMA0KLWRxYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjANCi1kcWFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wDQotZHFhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMA0KLQ0KLS0tIFNwZWNpYWxzDQotZHFhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcWFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcWFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcWFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcWFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWRxYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotZHFhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kcWFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWRxYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotZHFhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kcWFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWRxYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotZHFhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZHFhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kcWFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotZHFhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQotZHFhZGQ3NTc1IGFkZCAgMUUtNjE0MyAtMUUtNjE3NiAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwNCi1kcWFkZDc1NzYgYWRkIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KLQ0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA5RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA2RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAzRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMNCi1yb3VuZGluZzogICAgIGRvd24NCi1kcWFkZDcxMTAwIGFkZCAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDEgYWRkIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDMgYWRkICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDcxMTA0IGFkZCAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDUgYWRkIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDYgYWRkIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDcxMTA3IGFkZCAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDggYWRkIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMDkgYWRkIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLXJvdW5kaW5nOiAgICAgY2VpbGluZw0KLWRxYWRkNzExMTAgYWRkIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTEgYWRkIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDcxMTEzIGFkZCAgICAtMSArMWUtNjE0MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTQgYWRkIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTUgYWRkIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDcxMTE2IGFkZCAtMWUtMyArMWUtNjE0MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTcgYWRkIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkNzExMTggYWRkIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDcxMTE5IGFkZCAtMWUtNiArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UNCi1yb3VuZGluZzogICAgIGhhbGZfZXZlbg0KLQ0KLWRxYWRkNzEzMDAgYWRkIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxMCBhZGQgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzExIGFkZCAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTIgYWRkIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxMyBhZGQgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzE0IGFkZCAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTUgYWRkIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxNiBhZGQgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzE3IGFkZCAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMTggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMxOSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzIwIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyMiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzIzIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjQgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyNSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzI2IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMjcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMyOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzI5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzMyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzNCBhZGQgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzM1IGFkZCAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzYgYWRkIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3MTMzNyBhZGQgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzM4IGFkZCAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzMzkgYWRkIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQ3MTM0MCBhZGQgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDcxMzQxIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KLWRxYWRkNzE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNw0KLWRxYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRxYWRkNzE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWRxYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTANCi1kcWFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExDQotZHFhZGQ3MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWRxYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1kcWFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0DQotZHFhZGQ3MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWRxYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1kcWFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3DQotZHFhZGQ3MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWRxYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkNCi1kcWFkZDcxNDQwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwDQotZHFhZGQ3MTQ0MSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KLWRxYWRkNzE0NDIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjINCi1kcWFkZDcxNDQzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzDQotZHFhZGQ3MTQ0NCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KLWRxYWRkNzE0NDUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUNCi1kcWFkZDcxNDQ2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2DQotZHFhZGQ3MTQ0NyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KLWRxYWRkNzE0NDggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgNCi1kcWFkZDcxNDQ5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5DQotZHFhZGQ3MTQ1MCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KLWRxYWRkNzE0NTEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzENCi1kcWFkZDcxNDUyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyDQotZHFhZGQ3MTQ1MyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KLWRxYWRkNzE0NTQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQNCi1kcWFkZDcxNDU1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1DQotZHFhZGQ3MTQ1NiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KLQ0KLS0tIHNhbWUsIHJldmVyc2VkIDANCi1kcWFkZDcxNDYwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNDYzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNDY2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03DQotZHFhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgNCi1kcWFkZDcxNDY5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWRxYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWRxYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWRxYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWRxYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWRxYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWRxYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWRxYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWRxYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWRxYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWRxYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLWRxYWRkNzE0ODAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMA0KLWRxYWRkNzE0ODEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KLWRxYWRkNzE0ODIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMg0KLWRxYWRkNzE0ODMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMw0KLWRxYWRkNzE0ODQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KLWRxYWRkNzE0ODUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQ0KLWRxYWRkNzE0ODYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNg0KLWRxYWRkNzE0ODcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KLWRxYWRkNzE0ODggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOA0KLWRxYWRkNzE0ODkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQ0KLWRxYWRkNzE0OTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KLWRxYWRkNzE0OTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQ0KLWRxYWRkNzE0OTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMg0KLWRxYWRkNzE0OTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KLWRxYWRkNzE0OTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNA0KLWRxYWRkNzE0OTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQ0KLWRxYWRkNzE0OTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KLQ0KLS0tIHNhbWUsIEVzIG9uIHRoZSAwDQotZHFhZGQ3MTUwMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTAyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTA1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MDcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTA4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUwOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTExIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTE0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTE3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUxOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MTkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTIwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTIzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTI2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUyNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MjggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTI5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUzMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkNzE1MzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDcxNTMyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQ3MTUzMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCi1kcWFkZDcxNTM0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kcWFkZDcxNTM1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kcWFkZDcxNTM2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kcWFkZDcxNTM3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi0NCi0tLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDcxNjExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQ3MTY0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkNzE2NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQ3MTY1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQ3MTY2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkNzE2NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQ3MTY3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCi0NCi1yb3VuZGluZzogICAgZG93bg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDcxNjgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE2ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTY4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNjgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQ3MTY5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDcxNjkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KLQ0KLXJvdW5kaW5nOiAgICBjZWlsaW5nDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkNzE3MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTcwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDcxNzAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkNzE3MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDcxNzExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkNzE3MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQotDQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQotcm91bmRpbmc6ICAgIGZsb29yDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkNzE3MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQ3MTcyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1kcWFkZDcxNzIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWRxYWRkNzE3MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDcxNzMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KLWRxYWRkNzE3MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZHFhZGQ3MTc0MSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQotZHFhZGQ3MTc0MiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQotZHFhZGQ3MTc0MyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQotZHFhZGQ3MTc0NCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQotZHFhZGQ3MTc0NSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwDQotZHFhZGQ3MTc0NiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwDQotZHFhZGQ3MTc0NyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQotZHFhZGQ3MTc0OCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszDQotDQotLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kcWFkZDc1MDAxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3DQotZHFhZGQ3NTAwMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAwOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAxOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAyMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTAyMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KLWRxYWRkNzUwMzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5DQotZHFhZGQ3NTAzMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQ0KLWRxYWRkNzUwMzIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyDQotZHFhZGQ3NTAzMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzDQotZHFhZGQ3NTAzNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNA0KLWRxYWRkNzUwMzUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1DQotZHFhZGQ3NTAzNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2DQotZHFhZGQ3NTAzNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2Nw0KLWRxYWRkNzUwMzggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4DQotZHFhZGQ3NTAzOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA0OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFhZGQ3NTA1MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA1NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA2NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KLXJvdW5kaW5nOiB1cA0KLWRxYWRkNzUwNzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxDQotZHFhZGQ3NTA3MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA3OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQ3NTA4OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxYWRkOTk5MCBhZGQgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQWRkLmRlY1Rlc3QgLS0gZGVjUXVhZCBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNRdWFkcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZHFhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMgorZHFhZGQwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQorZHFhZGQwMDMgYWRkICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZHFhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMgorZHFhZGQwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgKK2RxYWRkMDA2IGFkZCAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2RxYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZHFhZGQwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZHFhZGQwMDkgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZHFhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMDEzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxNSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTYgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxOCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTkgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMDIxIGFkZCAwIDEgLT4gMQorZHFhZGQwMjIgYWRkIDEgMSAtPiAyCitkcWFkZDAyMyBhZGQgMiAxIC0+IDMKK2RxYWRkMDI0IGFkZCAzIDEgLT4gNAorZHFhZGQwMjUgYWRkIDQgMSAtPiA1CitkcWFkZDAyNiBhZGQgNSAxIC0+IDYKK2RxYWRkMDI3IGFkZCA2IDEgLT4gNworZHFhZGQwMjggYWRkIDcgMSAtPiA4CitkcWFkZDAyOSBhZGQgOCAxIC0+IDkKK2RxYWRkMDMwIGFkZCA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkcWFkZDAzMSBhZGQgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkcWFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitkcWFkZDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitkcWFkZDAzNCBhZGQgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RxYWRkMDM1IGFkZCAnNzAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDM2IGFkZCAnNzAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDM4IGFkZCAnNzAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDM5IGFkZCAnNzAwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2RxYWRkMDQwIGFkZCAnMTAwMDBlKzM0JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDQxIGFkZCAnMTAwMDBlKzM0JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDA0MiBhZGQgJzEwMDAwZSszNCcgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDQ0IGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDQ1IGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZAorCistLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCitkcWFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2RxYWRkMDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RxYWRkMDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitkcWFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2RxYWRkMDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RxYWRkMDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitkcWFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RxYWRkMDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZHFhZGQwNTUgYWRkICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitkcWFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkcWFkZDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgorZHFhZGQwNjEgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2RxYWRkMDYyIGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RxYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZHFhZGQwNjQgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2RxYWRkMDY1IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZHFhZGQwNzAgYWRkIDEgIDAgICAgLT4gMQorZHFhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQorZHFhZGQwNzIgYWRkIDEgIC4wICAgLT4gMS4wCitkcWFkZDA3MyBhZGQgMSAwLjAgICAtPiAxLjAKK2RxYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDAKK2RxYWRkMDc1IGFkZCAgMCAgMSAgIC0+IDEKK2RxYWRkMDc2IGFkZCAwLiAgMSAgIC0+IDEKK2RxYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMAorZHFhZGQwNzggYWRkIDAuMCAxICAgLT4gMS4wCitkcWFkZDA3OSBhZGQgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZHFhZGQwODAgYWRkIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2RxYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZHFhZGQwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2RxYWRkMDgzIGFkZCAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2RxYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZHFhZGQwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2RxYWRkMDg2IGFkZCAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2RxYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMAorZHFhZGQwODggYWRkICAgICAgICA5OSAxICAtPiAxMDAKK2RxYWRkMDg5IGFkZCAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZHFhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkcWFkZDA5MiBhZGQgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZHFhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZHFhZGQwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZHFhZGQwOTUgYWRkICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZHFhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZHFhZGQwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkcWFkZDA5OCBhZGQgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2RxYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkcWFkZDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2RxYWRkMTAxIGFkZCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkcWFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkcWFkZDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkcWFkZDEwNCBhZGQgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZHFhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkcWFkZDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkcWFkZDEwNyBhZGQgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQxMDggYWRkICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZAorZHFhZGQxMDkgYWRkICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZAorZHFhZGQxMTAgYWRkICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZAorZHFhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZHFhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitkcWFkZDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZHFhZGQxMTYgYWRkIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZHFhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitkcWFkZDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2RxYWRkMTIwIGFkZCAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZHFhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitkcWFkZDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZHFhZGQxMjMgYWRkIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RxYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2RxYWRkMTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitkcWFkZDEyNiBhZGQgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkcWFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2RxYWRkMTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZHFhZGQxMjkgYWRkIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZHFhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2RxYWRkMTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZHFhZGQxMzIgYWRkIDAgICctNUUzMycgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQxMzMgYWRkIDAgICctNUUzNCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZAorZHFhZGQxMzQgYWRkIDAgICctNUUzNScgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZAorZHFhZGQxMzUgYWRkIDAgICctNUUzNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICAgUm91bmRlZAorZHFhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitkcWFkZDEzNyBhZGQgIDEgICcwRS0zOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZHFhZGQxMzggYWRkIC0xICAnMEUtMzknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMTM5IGFkZCAnMEUtMzknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkcWFkZDE0MCBhZGQgJzBFLTM5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQxNDEgYWRkIDFFKzI5ICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcKK2RxYWRkMTQyIGFkZCAxRSsyOSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitkcWFkZDE0MyBhZGQgMC4wMDAgICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJworZHFhZGQxNDQgYWRkIDAuMDAwMCAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RxYWRkMTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitkcWFkZDE0NyBhZGQgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2RxYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2RxYWRkMTUwIGFkZCAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkcWFkZDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZHFhZGQxNTMgYWRkICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2RxYWRkMTU2IGFkZCAnMycgICAgICczJyAgICAgLT4gICc2JworZHFhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkcWFkZDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2RxYWRkMTU5IGFkZCAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitkcWFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RxYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2RxYWRkMTYyIGFkZCAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2MyBhZGQgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZHFhZGQxNjUgYWRkICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2RxYWRkMTY2IGFkZCAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZHFhZGQxNjggYWRkICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMTcwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjYnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTczIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzQgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc2IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzcgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgUm91bmRlZAorZHFhZGQxNzggYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3OSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTgwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE4MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTgzIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkMjAwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMjAxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjEwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjEzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMjE3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQyMjAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQyMjEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjIyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjMxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQyMzcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkMjQwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI0MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkMjUwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMjUxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1NSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1OCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjYwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjYzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2NCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMjY3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2OCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQzMDEgYWRkICAtMSAgIDEgICAgICAtPiAgIDAKK2RxYWRkMzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxCitkcWFkZDMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMgorZHFhZGQzMDQgYWRkICAxMiAgIDEgICAgICAtPiAgMTMKK2RxYWRkMzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5CitkcWFkZDMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMAorZHFhZGQzMDcgYWRkIDEwMCAgIDEgICAgICAtPiAxMDEKK2RxYWRkMzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyCitkcWFkZDMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMgorZHFhZGQzMTAgYWRkICAgMCAgLTEgICAgICAtPiAgLTEKK2RxYWRkMzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwCitkcWFkZDMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQorZHFhZGQzMTMgYWRkICA5OCAgLTEgICAgICAtPiAgOTcKK2RxYWRkMzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4CitkcWFkZDMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQorZHFhZGQzMTYgYWRkIDEwMSAgLTEgICAgICAtPiAxMDAKKworZHFhZGQzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkcWFkZDMyMiBhZGQgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2RxYWRkMzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZHFhZGQzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkcWFkZDMyNSBhZGQgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2RxYWRkMzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZHFhZGQzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkcWFkZDMyOCBhZGQgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2RxYWRkMzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZHFhZGQzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkcWFkZDMzMSBhZGQgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2RxYWRkMzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZHFhZGQzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkcWFkZDMzNCBhZGQgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2RxYWRkMzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZHFhZGQzNDAgYWRkIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKK2RxYWRkMzQxIGFkZCAxRSszMyAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQzNDIgYWRkIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFhZGQzNDMgYWRkIDFFKzM1ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgorZHFhZGQzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2RxYWRkMzQ1IGFkZCAxRSszMyAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFhZGQzNDYgYWRkIDFFKzM0ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0NyBhZGQgMUUrMzUgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkcWFkZDM0OSBhZGQgMUUrMzMgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxYWRkMzUwIGFkZCAxRSszNCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNTEgYWRkIDFFKzM1ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzNjAgIGFkZCAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1CitkcWFkZDM2MSAgYWRkIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDM2MiAgYWRkIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDM2MyAgYWRkIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM2NCAgYWRkIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwRSs2MTExCistLSAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RxYWRkMzcwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxYWRkMzcyIGFkZCAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFhZGQzNzQgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZHFhZGQ0MDAgYWRkICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQwMSBhZGQgICAxICAgNzdlLTMzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQwMiBhZGQgICAxICAgNzdlLTM0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MDMgYWRkICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDA0IGFkZCAgIDEgICA3N2UtMzYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwNSBhZGQgICAxICAgNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ0MTAgYWRkICAxMCAgIDc3ZS0zMiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MTEgYWRkICAxMCAgIDc3ZS0zMyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDEyIGFkZCAgMTAgICA3N2UtMzQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxMyBhZGQgIDEwICAgNzdlLTM1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTQgYWRkICAxMCAgIDc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDE1IGFkZCAgMTAgICA3N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxNiBhZGQgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDQyMCBhZGQgIDc3ZS0zMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDIxIGFkZCAgNzdlLTMzICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDIyIGFkZCAgNzdlLTM0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQyMyBhZGQgIDc3ZS0zNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MjQgYWRkICA3N2UtMzYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDI1IGFkZCAgNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQyNiBhZGQgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDQzMCBhZGQgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQzMSBhZGQgIDc3ZS0zMyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzIgYWRkICA3N2UtMzQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDMzIGFkZCAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzNCBhZGQgIDc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzUgYWRkICA3N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJvdW5kYXJpZXMKKy0tICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFhZGQ1MDEgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MDIgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MDMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzM1NTU1NTU1NTU1NTU1NTU1NTUwNTU1NTU1NTU1NTU1NTUnIC0+ICc3OTk5OTk5OTk5OTk5OTk5OTk5NDk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MDQgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzM5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4Mzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MDUgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc5Mzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MDYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+IDEuMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNTExIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTEyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTEzIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE0IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE1IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE2IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE3IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE4IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTE5IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTIwIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTIxIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTIyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTIzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczMzMzMzMzMzMzMzMzMzMzMzMzMzMzJyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NycKK2RxYWRkNTI0IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTI1IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTI2IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTI3IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTI4IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTI5IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTMwIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OScKK2RxYWRkNTMxIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OScKK2RxYWRkNTMyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OScKK2RxYWRkNTMzIGFkZCAnMzQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OScKK2RxYWRkNTM0IGFkZCAnMzQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OScKK2RxYWRkNTM1IGFkZCAnMzQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OScKK2RxYWRkNTM2IGFkZCAnMzQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OScKK2RxYWRkNTM3IGFkZCAnMzQ0NDQ0NDQnICAnNTU1NTU1NTUnIC0+ICc4OTk5OTk5OScKK2RxYWRkNTM4IGFkZCAnMzQ0NDQ0NCcgICc1NTU1NTU1JyAtPiAnODk5OTk5OScKK2RxYWRkNTM5IGFkZCAnMzQ0NDQ0JyAgJzU1NTU1NScgLT4gJzg5OTk5OScKK2RxYWRkNTQwIGFkZCAnMzQ0NDQnICAnNTU1NTUnIC0+ICc4OTk5OScKK2RxYWRkNTQxIGFkZCAnMzQ0NCcgICc1NTU1JyAtPiAnODk5OScKK2RxYWRkNTQyIGFkZCAnMzQ0JyAgJzU1NScgLT4gJzg5OScKK2RxYWRkNTQzIGFkZCAnMzQnICAnNTUnIC0+ICc4OScKK2RxYWRkNTQ0IGFkZCAnMycgICc1JyAtPiAnOCcKKworZHFhZGQ1NDUgYWRkICczMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc2MDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NDYgYWRkICczMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc3MDAwMDAwNDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NDcgYWRkICczMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzUwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NDggYWRkICc0MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc3MDAwMDAwMDA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NDkgYWRkICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NTAgYWRkICc0MDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzUwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc5MDAwMDAwMDA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NTEgYWRkICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NTIgYWRkICc1MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzQwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc5MDAwMDAwNDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQ1NTMgYWRkICc1MDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzUwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+IDEuMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwRSszNCBSb3VuZGVkCistLSBjaGVjayBwcm9wYWdhdGlvbgorZHFhZGQ1NTQgYWRkICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDU1NSBhZGQgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnICAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkNTU2IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQ1NTcgYWRkICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkNjQ0MCBhZGQgICAxICAgLTc3ZS0zMiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NDEgYWRkICAgMSAgIC03N2UtMzMgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ0MyBhZGQgICAxICAgLTc3ZS0zNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NDQgYWRkICAgMSAgIC03N2UtMzYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDQ2IGFkZCAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY0NTAgYWRkICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ1MSBhZGQgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ1MiBhZGQgIDEwICAgLTc3ZS0zNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTMgYWRkICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDU0IGFkZCAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDU1IGFkZCAgMTAgICAtNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY0NjAgYWRkICAtNzdlLTMyICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDYxIGFkZCAgLTc3ZS0zMyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NjIgYWRkICAtNzdlLTM0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NjMgYWRkICAtNzdlLTM1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDY0IGFkZCAgLTc3ZS0zNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ2NSBhZGQgIC03N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ2NiBhZGQgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NDcwIGFkZCAgLTc3ZS0zMiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NzEgYWRkICAtNzdlLTMzICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NzIgYWRkICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDczIGFkZCAgLTc3ZS0zNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ3NCBhZGQgIC03N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ3NSBhZGQgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ3NiBhZGQgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZHFhZGQ2NDgwIGFkZCAgLTEgICAgNzdlLTMyICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0ODEgYWRkICAtMSAgICA3N2UtMzMgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0ODIgYWRkICAtMSAgICA3N2UtMzQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDgzIGFkZCAgLTEgICAgNzdlLTM1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0ODQgYWRkICAtMSAgICA3N2UtMzYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0zNyAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0OTEgYWRkIC0xMCAgICA3N2UtMzMgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDkyIGFkZCAtMTAgICAgNzdlLTM0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5NCBhZGQgLTEwICAgIDc3ZS0zNiAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0OTUgYWRkIC0xMCAgICA3N2UtMzcgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ2NTAwIGFkZCAgIDc3ZS0zMiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MDEgYWRkICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MDIgYWRkICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NTAzIGFkZCAgIDc3ZS0zNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MDQgYWRkICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUwNSBhZGQgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MDYgYWRkICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY1MTAgYWRkICAgNzdlLTMyICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MTEgYWRkICAgNzdlLTMzICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NTEyIGFkZCAgIDc3ZS0zNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MTMgYWRkICAgNzdlLTM1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxNCBhZGQgICA3N2UtMzYgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MTUgYWRkICAgNzdlLTM3ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDY1NDAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQ2NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTUwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkNjU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQ2NTYwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKK2RxYWRkNjU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTYyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTcxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDY1NzcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDc1NDAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU0MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDc1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQ3NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTYwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTYzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkNzU2NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkcWFkZDc3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZHFhZGQ3NzAzIGFkZCAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2RxYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RxYWRkNzcxMCBhZGQgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2RxYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMAorZHFhZGQ3NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMAorZHFhZGQ3NzEzIGFkZCAwRSszICAwMC5FKzEgLT4gMEUrMQorZHFhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMgorZHFhZGQ3NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMworZHFhZGQ3NzE2IGFkZCAwRSszICAwMC5FKzQgLT4gMEUrMworZHFhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMworZHFhZGQ3NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMAorZHFhZGQ3NzE5IGFkZCAwRSszICAtMDAuICAgIC0+IDAKK2RxYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2RxYWRkNzcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RxYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMAorZHFhZGQ3NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMAorZHFhZGQ3NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZHFhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZHFhZGQ3NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMworZHFhZGQ3NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMworZHFhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMworZHFhZGQ3NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZHFhZGQ3NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wCitkcWFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwCisKK2RxYWRkNzczMiBhZGQgIDAgICAgIDAgICAgIC0+ICAwCitkcWFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMAorZHFhZGQ3NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDAKK2RxYWRkNzczNSBhZGQgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDc1NCBzcGVjaWFsIGNhc2UKKworZHFhZGQ3NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDAKK2RxYWRkNzczNyBhZGQgLTEgICAgLTEgICAgIC0+IC0yCitkcWFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMgorZHFhZGQ3NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDAKKworZHFhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTEKK2RxYWRkNzc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xCitkcWFkZDc3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQorZHFhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDEKK2RxYWRkNzc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xCitkcWFkZDc3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQorZHFhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDEKK2RxYWRkNzc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxCisKK2RxYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RxYWRkNzc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2RxYWRkNzc1MyBhZGQgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkNzc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2RxYWRkNzc1NiBhZGQgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2RxYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RxYWRkNzc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZHFhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQ3NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQ3NzYzIGFkZCAgMCAgICAgMS4wICAgLT4gIDEuMAorZHFhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMAorZHFhZGQ3NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMAorZHFhZGQ3NzY2IGFkZCAtMSAgICAtMC4wICAgLT4gLTEuMAorZHFhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMAorZHFhZGQ3NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkcWFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wCitkcWFkZDc3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wCitkcWFkZDc3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitkcWFkZDc3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4MSBhZGQgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4NCBhZGQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4NyBhZGQgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5MCBhZGQgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5MyBhZGQgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFhZGQ3ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcWFkZDc4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWFkZDc4MjIgYWRkICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWFkZDc4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWFkZDc4MjUgYWRkICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWFkZDc4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWFkZDc4MjggYWRkICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzEgYWRkIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzQgYWRkICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWFkZDc4MzcgYWRkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxYWRkNzg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDIgYWRkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDUgYWRkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDggYWRkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTEgYWRkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTQgYWRkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTcgYWRkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxYWRkNzg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcWFkZDc4NjIgYWRkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RxYWRkNzg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcWFkZDc4NjUgYWRkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RxYWRkNzg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcWFkZDc4NjggYWRkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcWFkZDc4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzIgYWRkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzUgYWRkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzggYWRkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4ODEgYWRkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RxYWRkNzg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4NCBhZGQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZHFhZGQ3NTc1IGFkZCAgMUUtNjE0MyAtMUUtNjE3NiAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwKK2RxYWRkNzU3NiBhZGQgLTFFLTYxNDMgKzFFLTYxNzYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCisKKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDc5NzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3NSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTExICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA5RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA4RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3OCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA3RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA2RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA1RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4MSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA0RSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAzRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4MyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAyRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWRkNzk4NiBhZGQgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODggYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTg5IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTlFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTEgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtN0UrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkyIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTZFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTQgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNEUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTk1IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTNFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorZHFhZGQ3MTEwMCBhZGQgMWUrMiAtMWUtNjE0MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDEgYWRkIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwMyBhZGQgICArMSAtMWUtNjE0MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwNCBhZGQgMWUtMSAtMWUtNjE0MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDUgYWRkIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwNiBhZGQgMWUtMyAtMWUtNjE0MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwNyBhZGQgMWUtNCAtMWUtNjE0MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMDggYWRkIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwOSBhZGQgMWUtNiAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZHFhZGQ3MTExMCBhZGQgLTFlKzIgKzFlLTYxNDMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTExIGFkZCAtMWUrMSArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTEzIGFkZCAgICAtMSArMWUtNjE0MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExNCBhZGQgLTFlLTEgKzFlLTYxNDMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE1IGFkZCAtMWUtMiArMWUtNjE0MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE2IGFkZCAtMWUtMyArMWUtNjE0MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTExNyBhZGQgLTFlLTQgKzFlLTYxNDMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE4IGFkZCAtMWUtNSArMWUtNjE0MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE5IGFkZCAtMWUtNiArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCitkcWFkZDcxMzAwIGFkZCAxRTM0ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxMCBhZGQgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTEgYWRkIDFFMzQgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzEyIGFkZCAxRTM0ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxMyBhZGQgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTQgYWRkIDFFMzQgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE1IGFkZCAxRTM0ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNiBhZGQgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE4IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxOSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzIxIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI0IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyNSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjYgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI3IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjkgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzMwIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzIgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzMzIGFkZCAxRTM0ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzNCBhZGQgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzUgYWRkIDFFMzQgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM2IGFkZCAxRTM0ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzNyBhZGQgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzggYWRkIDFFMzQgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM5IGFkZCAxRTM0ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDcxMzQwIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM0MSBhZGQgMUUzNCAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQ3MTM0OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzUwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzUzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzYyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzcyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzkwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzkzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzk2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RxYWRkNzE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyMSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyMiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyNCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyNSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyNyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03CitkcWFkZDcxNDI4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkNzE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQorZHFhZGQ3MTQzMCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZHFhZGQ3MTQzMSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQ3MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZHFhZGQ3MTQzMyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMworZHFhZGQ3MTQzNCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQ3MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZHFhZGQ3MTQzNiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZHFhZGQ3MTQzNyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQ3MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZHFhZGQ3MTQzOSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQorZHFhZGQ3MTQ0MCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQ3MTQ0MSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQorZHFhZGQ3MTQ0MiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgorZHFhZGQ3MTQ0MyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQ3MTQ0NCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNAorZHFhZGQ3MTQ0NSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQorZHFhZGQ3MTQ0NiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQ3MTQ0NyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNworZHFhZGQ3MTQ0OCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAorZHFhZGQ3MTQ0OSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQ3MTQ1MCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMAorZHFhZGQ3MTQ1MSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQorZHFhZGQ3MTQ1MiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQ3MTQ1MyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMworZHFhZGQ3MTQ1NCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAorZHFhZGQ3MTQ1NSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQ3MTQ1NiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNgorCistLSBzYW1lLCByZXZlcnNlZCAwCitkcWFkZDcxNDYwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDYyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDYzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQ2NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKK2RxYWRkNzE0NjggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04CitkcWFkZDcxNDY5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQorZHFhZGQ3MTQ3MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCitkcWFkZDcxNDcxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RxYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZHFhZGQ3MTQ3MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCitkcWFkZDcxNDc0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RxYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZHFhZGQ3MTQ3NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2CitkcWFkZDcxNDc3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RxYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZHFhZGQ3MTQ3OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5CitkcWFkZDcxNDgwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAKK2RxYWRkNzE0ODEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQorZHFhZGQ3MTQ4MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCitkcWFkZDcxNDgzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMKK2RxYWRkNzE0ODQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNAorZHFhZGQ3MTQ4NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1CitkcWFkZDcxNDg2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYKK2RxYWRkNzE0ODcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNworZHFhZGQ3MTQ4OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4CitkcWFkZDcxNDg5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkKK2RxYWRkNzE0OTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMAorZHFhZGQ3MTQ5MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCitkcWFkZDcxNDkyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIKK2RxYWRkNzE0OTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMworZHFhZGQ3MTQ5NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0CitkcWFkZDcxNDk1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUKK2RxYWRkNzE0OTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNgorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZHFhZGQ3MTUwMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUwOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUxOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUyOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUzMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUzMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUzMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTUzMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZHFhZGQ3MTUzNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDcxNTM1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkNzE1MzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQ3MTUzNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNjExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTYxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTYyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNjMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTYzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTY0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNjUxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTY1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjcyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTY4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNjkxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTY5MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE3MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTcwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE3MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTcxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE3MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNzIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTcyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkNzE3MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkcWFkZDcxNzIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE3MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkcWFkZDcxNzMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RxYWRkNzE3NDEgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZHFhZGQ3MTc0MiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitkcWFkZDcxNzQzIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RxYWRkNzE3NDQgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZHFhZGQ3MTc0NSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCitkcWFkZDcxNzQ2IGFkZCAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RxYWRkNzE3NDcgYWRkIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMAorZHFhZGQ3MTc0OCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZHFhZGQ3NTAwMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NworZHFhZGQ3NTAwMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDAzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDEyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAyMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDIxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZHFhZGQ3NTAzMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzkKK2RxYWRkNzUwMzEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEKK2RxYWRkNzUwMzIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyCitkcWFkZDc1MDMzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjMKK2RxYWRkNzUwMzQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQKK2RxYWRkNzUwMzUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1CitkcWFkZDc1MDM2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTYKK2RxYWRkNzUwMzcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NjcKK2RxYWRkNzUwMzggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4CitkcWFkZDc1MDM5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkNzUwNTAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDUyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDYwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDYzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDY2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitkcWFkZDc1MDcwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMQorZHFhZGQ3NTA3MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDcyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RxYWRkOTk5MCBhZGQgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDk5OTEgYWRkICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQW5kLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdAppbmRleCA1N2M0MTZiLi5kNjA5YmMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdApAQCAtMSw0MjAgKzEsNDIwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZHFhbmQwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotZHFhbmQwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwDQotZHFhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwDQotZHFhbmQwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQotZHFhbmQwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxYW5kMDA2IGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZHFhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kcWFuZDAwOCBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRxYW5kMDA5IGFuZCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCi1kcWFuZDAxMSBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KLWRxYW5kMDEyIGFuZCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQotZHFhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLQ0KLWRxYW5kNjAxIGFuZCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwMiBhbmQgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MDMgYW5kIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjA0IGFuZCAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwNSBhbmQgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MDYgYW5kIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjA3IGFuZCAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYwOCBhbmQgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MDkgYW5kIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjEwIGFuZCAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxMSBhbmQgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTIgYW5kIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjEzIGFuZCAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxNCBhbmQgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTUgYW5kIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjE2IGFuZCAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTENCi1kcWFuZDYxNyBhbmQgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExDQotZHFhbmQ2MTggYW5kIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjE5IGFuZCAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTENCi1kcWFuZDYyMCBhbmQgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExDQotZHFhbmQ2MjEgYW5kIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQ0KLWRxYW5kNjIyIGFuZCAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTENCi1kcWFuZDYyMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExDQotZHFhbmQ2MjQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQ0KLWRxYW5kNjI1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTENCi1kcWFuZDYyNiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExDQotZHFhbmQ2MjcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQ0KLWRxYW5kNjI4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTENCi1kcWFuZDYyOSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExDQotZHFhbmQ2MzAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQ0KLWRxYW5kNjMxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTENCi1kcWFuZDYzMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExDQotZHFhbmQ2MzMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQ0KLWRxYW5kNjM0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCi0NCi1kcWFuZDY0MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjQzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY0NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjQ2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY0NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NDggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjQ5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjUyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjU1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTENCi1kcWFuZDY1NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExDQotZHFhbmQ2NTcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQ0KLWRxYW5kNjU4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTENCi1kcWFuZDY1OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExDQotZHFhbmQ2NjAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQ0KLWRxYW5kNjYxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTENCi1kcWFuZDY2MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExDQotZHFhbmQ2NjMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQ0KLWRxYW5kNjY0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTENCi1kcWFuZDY2NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExDQotZHFhbmQ2NjYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQ0KLWRxYW5kNjY3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTENCi1kcWFuZDY2OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExDQotZHFhbmQ2NjkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQ0KLWRxYW5kNjcwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTENCi1kcWFuZDY3MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExDQotZHFhbmQ2NzIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQ0KLWRxYW5kNjczIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDENCi1kcWFuZDY3NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotZHFhbmQ2NzUgYW5kIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLWRxYW5kNjc2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCi0NCi1kcWFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KLWRxYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExDQotZHFhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTENCi1kcWFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KLWRxYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExDQotZHFhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTENCi1kcWFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KLWRxYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExDQotZHFhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTENCi1kcWFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KLWRxYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExDQotZHFhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTENCi1kcWFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KLWRxYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExDQotZHFhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTENCi1kcWFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KLWRxYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZHFhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQ0KLWRxYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTENCi1kcWFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExDQotZHFhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQ0KLWRxYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTENCi1kcWFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExDQotZHFhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQ0KLWRxYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTENCi1kcWFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExDQotZHFhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQ0KLWRxYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTENCi1kcWFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExDQotZHFhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQ0KLWRxYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTENCi1kcWFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExDQotZHFhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQ0KLWRxYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDENCi1kcWFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwDQotDQotZHFhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxDQotZHFhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxDQotZHFhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxDQotZHFhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxDQotDQotZHFhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwDQotZHFhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwDQotZHFhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwDQotZHFhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwDQotDQotZHFhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxDQotZHFhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxDQotZHFhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxDQotZHFhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxDQotZHFhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxDQotZHFhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxDQotZHFhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxDQotZHFhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxDQotZHFhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxDQotZHFhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxDQotDQotZHFhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwDQotZHFhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwDQotZHFhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwDQotZHFhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwDQotZHFhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwDQotZHFhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwDQotZHFhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwDQotZHFhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwDQotZHFhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwDQotZHFhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwDQotDQotZHFhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExDQotZHFhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExDQotZHFhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExDQotZHFhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExDQotZHFhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExDQotZHFhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExDQotZHFhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExDQotZHFhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxDQotZHFhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQotDQotZHFhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExDQotZHFhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExDQotZHFhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExDQotZHFhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExDQotZHFhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQotZHFhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExDQotZHFhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExDQotZHFhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxDQotZHFhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZHFhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRxYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZHFhbmQyNTAgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjUxIGFuZCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1MiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTMgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjU0IGFuZCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1NSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTYgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjU3IGFuZCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI1OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjYwIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI2MSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNjIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjYzIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI2NCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNjUgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1kcWFuZDI3MCBhbmQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNzEgYW5kICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjcyIGFuZCAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI3MyBhbmQgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNzQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjc1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI3NiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyNzcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZHFhbmQyODAgYW5kICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjgxIGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI4MiBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDggMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyODMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjg0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI4NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyODYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjg3IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWRxYW5kMjg4IGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI4OSBhbmQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTAgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDgwMDAwMDEwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjkxIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5MiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTMgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjk0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1kcWFuZDI5NiBhbmQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMjk3IGFuZCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQyOTggYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDI5OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDExMDAwMDExMDAwMDExMDAwMDAwMTAwMDAwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCi1kcWFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDMzNCBhbmQgIDUgICAxRS05MDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzM1IGFuZCAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNDEgYW5kICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNDQgYW5kICAxRS05MDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0NSBhbmQgIC0xRS05MDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNDcgYW5kICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRxYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kcWFuZDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxYW5kODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWFuZDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxYW5kODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYW5kODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFBbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZHFhbmQwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkcWFuZDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDAKK2RxYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMAorZHFhbmQwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCitkcWFuZDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFhbmQwMDYgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAwOCBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMDkgYW5kIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAxMSBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMTIgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworZHFhbmQ2MDEgYW5kIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDIgYW5kIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDMgYW5kIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDQgYW5kIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDUgYW5kIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDYgYW5kIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDcgYW5kIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDggYW5kIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MDkgYW5kIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTAgYW5kIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTEgYW5kIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTIgYW5kIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTMgYW5kIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTQgYW5kIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTUgYW5kIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTYgYW5kIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQorZHFhbmQ2MTcgYW5kIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQorZHFhbmQ2MTggYW5kIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQorZHFhbmQ2MTkgYW5kIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQorZHFhbmQ2MjAgYW5kIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQorZHFhbmQ2MjEgYW5kIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQorZHFhbmQ2MjIgYW5kIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQorZHFhbmQ2MjMgYW5kIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQorZHFhbmQ2MjQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQorZHFhbmQ2MjUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQorZHFhbmQ2MjYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQorZHFhbmQ2MjcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQorZHFhbmQ2MjggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQorZHFhbmQ2MjkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQorZHFhbmQ2MzAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQorZHFhbmQ2MzEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQorZHFhbmQ2MzIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQorZHFhbmQ2MzMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQorZHFhbmQ2MzQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCitkcWFuZDY0MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY0OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCitkcWFuZDY1NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCitkcWFuZDY1NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExCitkcWFuZDY1NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCitkcWFuZDY1OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCitkcWFuZDY1OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExCitkcWFuZDY2MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCitkcWFuZDY2MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCitkcWFuZDY2MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExCitkcWFuZDY2MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCitkcWFuZDY2NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCitkcWFuZDY2NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExCitkcWFuZDY2NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCitkcWFuZDY2NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCitkcWFuZDY2OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExCitkcWFuZDY2OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCitkcWFuZDY3MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCitkcWFuZDY3MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExCitkcWFuZDY3MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCitkcWFuZDY3MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcWFuZDY3NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcWFuZDY3NSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcWFuZDY3NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCisKK2RxYW5kMDIxIGFuZCAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCitkcWFuZDAyNCBhbmQgMTExMTExMTExMTExMTExMSAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQorZHFhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKK2RxYW5kMDI2IGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCitkcWFuZDAyNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQorZHFhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKK2RxYW5kMDI5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCitkcWFuZDAzMCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQorZHFhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKK2RxYW5kMDMyIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCitkcWFuZDAzMyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQorZHFhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKK2RxYW5kMDM1IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCitkcWFuZDAzNiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQorZHFhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKK2RxYW5kMDM4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCitkcWFuZDAzOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAorCitkcWFuZDA0MCBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAxMTExMTExMTExMTExMTExCitkcWFuZDA0MSBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCitkcWFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCitkcWFuZDA0MyBhbmQgICAxMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgIDExMTExMTExMTExMTExCitkcWFuZDA0NCBhbmQgICAgMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAxMTExMTExMTExMTExCitkcWFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExCitkcWFuZDA0NiBhbmQgICAgICAxMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgIDExMTExMTExMTExCitkcWFuZDA0NyBhbmQgICAgICAgMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAxMTExMTExMTExCitkcWFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExCitkcWFuZDA0OSBhbmQgICAgICAgICAxMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgIDExMTExMTExCitkcWFuZDA1MCBhbmQgICAgICAgICAgMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAxMTExMTExCitkcWFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExCitkcWFuZDA1MiBhbmQgICAgICAgICAgICAxMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgIDExMTExCitkcWFuZDA1MyBhbmQgICAgICAgICAgICAgMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAxMTExCitkcWFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExCitkcWFuZDA1NSBhbmQgICAgICAgICAgICAgICAxMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgIDExCitkcWFuZDA1NiBhbmQgICAgICAgICAgICAgICAgMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAxCitkcWFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwCisKK2RxYW5kMTUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQorZHFhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQorZHFhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDEKK2RxYW5kMTU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQorZHFhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxCitkcWFuZDE1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDEKK2RxYW5kMTU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQorCitkcWFuZDE2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMAorZHFhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMAorZHFhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDAKK2RxYW5kMTY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMAorZHFhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwCitkcWFuZDE2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDAKKworZHFhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxCitkcWFuZDE3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDEKK2RxYW5kMTcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQorZHFhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxCitkcWFuZDE3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDEKK2RxYW5kMTc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQorZHFhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxCitkcWFuZDE3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDEKK2RxYW5kMTc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQorZHFhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxCisKK2RxYW5kMTgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMAorZHFhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwCitkcWFuZDE4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDAKK2RxYW5kMTgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMAorZHFhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwCitkcWFuZDE4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDAKK2RxYW5kMTg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMAorZHFhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwCitkcWFuZDE4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDAKK2RxYW5kMTg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMAorCitkcWFuZDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2RxYW5kMDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQorZHFhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExCitkcWFuZDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTEKK2RxYW5kMDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQorZHFhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExCitkcWFuZDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTEKK2RxYW5kMDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQorZHFhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwCisKK2RxYW5kMTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQorZHFhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExCitkcWFuZDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTEKK2RxYW5kMTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQorZHFhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkcWFuZDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTEKK2RxYW5kMTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQorZHFhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxCitkcWFuZDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcWFuZDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RxYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHFhbmQyNTAgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTEgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTIgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTMgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTQgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTUgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTYgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTcgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTggYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjAgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjEgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjQgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNjUgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZHFhbmQyNzAgYW5kICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzEgYW5kICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzIgYW5kICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzMgYW5kICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNzcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RxYW5kMjgwIGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjgxIGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjgyIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjgzIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg2IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg3IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkcWFuZDI4OCBhbmQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI4OSBhbmQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5MCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5MSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5MiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5MyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZHFhbmQyOTYgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk3IGFuZCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMTAwMDAxMTAwMDAxMTAwMDAwMDEwMDAwMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHFhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzQgYW5kICA1ICAgMUUtOTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM1IGFuZCAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzcgYW5kICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDIgYW5kICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0NCBhbmQgIDFFLTkwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDUgYW5kICAtMUUtOTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkcWFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RxYW5kNzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFhbmQ4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYW5kODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFhbmQ4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0CmluZGV4IDZiYjQ2MzMuLmQwOWM2YmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUJhc2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QKQEAgLTEsMTA4MSArMSwxMDgxIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1F1YWQgPC0tPiBzdHJpbmcgY29udmVyc2lvbnMgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcg0KLS0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pDQotDQotLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcNCi0tLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsDQotLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlDQotLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlDQotLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNRdWFkLiAgU29tZSB0ZXN0Y2FzZXMgZ28gdG8gdGhlIGxpbWl0IG9mIHRoZQ0KLS0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8NCi0tLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4NCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHFiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwDQotZHFiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxDQotZHFiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjANCi1kcWJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDANCi1kcWJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwDQotZHFiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwDQotZHFiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wDQotZHFiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xDQotZHFiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40DQotZHFiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41DQotZHFiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42DQotZHFiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45DQotZHFiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wDQotZHFiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0DQotZHFiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzDQotZHFiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyDQotZHFiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wDQotZHFiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjANCi1kcWJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDANCi0NCi1kcWJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTENCi1kcWJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMA0KLWRxYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xDQotZHFiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjENCi1kcWJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExDQotZHFiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5DQotZHFiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5DQotDQotZHFiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2Jw0KLWRxYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcNCi1kcWJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicNCi1kcWJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScNCi1kcWJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknDQotZHFiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03Jw0KLWRxYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcNCi0NCi1kcWJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0Jw0KLWRxYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnDQotDQotLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkNCi1kcWJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFic24wMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTFFLTYxNDMNCi1kcWJzbjAwMyB0b1NjaSAtMUUtNjE3NiAtPiAtMUUtNjE3NiBTdWJub3JtYWwNCi1kcWJzbjAwNCB0b1NjaSAtMCAtPiAtMA0KLWRxYnNuMDA1IHRvU2NpICswIC0+ICAwDQotZHFic24wMDYgdG9TY2kgKzFFLTYxNzYgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQotZHFic24wMDcgdG9TY2kgKzFFLTYxNDMgLT4gIDFFLTYxNDMNCi1kcWJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotDQotLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0NCi0tLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQNCi1kcWJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInDQotZHFiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicNCi1kcWJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnDQotZHFiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2Jw0KLWRxYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicNCi1kcWJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnDQotZHFiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3Jw0KLWRxYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnDQotZHFiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0Jw0KLWRxYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcNCi1kcWJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnDQotZHFiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScNCi1kcWJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScNCi1kcWJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnDQotZHFiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycNCi1kcWJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04Jw0KLWRxYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnDQotZHFiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnDQotZHFiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJw0KLWRxYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJw0KLWRxYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRxYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCi1kcWJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRxYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KLWRxYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLWRxYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicNCi1kcWJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KLS0tIGV4YW1wbGVzDQotZHFiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnDQotZHFiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJw0KLWRxYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnDQotDQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0NCi0NCi0tLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMNCi1kcWJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMi4zNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NS42Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA3OSB0b1NjaSAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3OC45MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MS4yMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMi4zNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MTIzNC41Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NS42Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ny44OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3OC45MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5MCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MC4xMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5MSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMS4yMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5MiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5MyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMy40NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5NCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNC41Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Ni43ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5NyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ny44MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczA5OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MC4xMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMS4yMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMy40NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNC41NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwNCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwNSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Ni4xMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwNiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEuMjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMi4zICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM1IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTA4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzLiAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNiBJbmV4YWN0IFJvdW5kZWQNCi0tLSAxMjM0NTY3ODkwMTIzNDU2NzgNCi0NCi0tLSBOdW1iZXJzIHdpdGggRQ0KLWRxYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnDQotZHFiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnDQotZHFiYXMxMzIgdG9TY2kgIjAuMDAwRS0zIiAgLT4gJzAuMDAwMDAwJw0KLWRxYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03Jw0KLWRxYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnDQotZHFiYXMxMzUgdG9TY2kgIjAuMDBFLTMiICAgLT4gJzAuMDAwMDAnDQotZHFiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJw0KLWRxYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03Jw0KLWRxYmFzMTM4IHRvU2NpICIrMEUrOSIgICAgIC0+ICcwRSs5Jw0KLWRxYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScNCi1kcWJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScNCi1kcWJhczE0MSB0b1NjaSAiMWUrMDkiICAgICAtPiAnMUUrOScNCi1kcWJhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnDQotZHFiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknDQotZHFiYXMxNDQgdG9TY2kgIjBFKzkiICAgICAgLT4gJzBFKzknDQotZHFiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknDQotZHFiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknDQotZHFiYXMxNDcgdG9TY2kgIjFlKzkwIiAgICAgLT4gJzFFKzkwJw0KLWRxYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5Jw0KLWRxYmFzMTUwIHRvU2NpICIxRTkiICAgICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5Jw0KLWRxYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcNCi1kcWJhczE1MyB0b1NjaSAiMUUwMDkiICAgICAtPiAnMUUrOScNCi1kcWJhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScNCi1kcWJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnDQotZHFiYXMxNTYgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcNCi1kcWJhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScNCi1kcWJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcNCi1kcWJhczE1OSB0b1NjaSAiMC43M2UtNyIgICAtPiAnNy4zRS04Jw0KLWRxYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5Jw0KLWRxYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05Jw0KLWRxYmFzMTYyIHRvU2NpICIxMEUrOSIgICAgIC0+ICcxLjBFKzEwJw0KLWRxYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJw0KLWRxYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJw0KLWRxYmFzMTY1IHRvU2NpICIxMEUrMDA5IiAgIC0+ICcxLjBFKzEwJw0KLWRxYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScNCi1kcWJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnDQotZHFiYXMxNjggdG9TY2kgIjEwMEUrOTAiICAgLT4gJzEuMDBFKzkyJw0KLWRxYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScNCi0NCi1kcWJhczE3MCB0b1NjaSAiMS4yNjUiICAgICAtPiAnMS4yNjUnDQotZHFiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcNCi1kcWJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnDQotZHFiYXMxNzMgdG9TY2kgIjEuMjY1RS00IiAgLT4gJzAuMDAwMTI2NScNCi1kcWJhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnDQotZHFiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnDQotZHFiYXMxNzYgdG9TY2kgIjEuMjY1RS0xIiAgLT4gJzAuMTI2NScNCi1kcWJhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnDQotZHFiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1Jw0KLWRxYmFzMTc5IHRvU2NpICIxLjI2NUUrMiIgIC0+ICcxMjYuNScNCi1kcWJhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScNCi1kcWJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnDQotZHFiYXMxODIgdG9TY2kgIjEuMjY1RSs4IiAgLT4gJzEuMjY1RSs4Jw0KLWRxYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnDQotDQotZHFiYXMxOTAgdG9TY2kgIjEyLjY1IiAgICAgLT4gJzEyLjY1Jw0KLWRxYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknDQotZHFiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03Jw0KLWRxYmFzMTkzIHRvU2NpICIxMi42NUUtNCIgIC0+ICcwLjAwMTI2NScNCi1kcWJhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScNCi1kcWJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1Jw0KLWRxYmFzMTk2IHRvU2NpICIxMi42NUUtMSIgIC0+ICcxLjI2NScNCi1kcWJhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnDQotZHFiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41Jw0KLWRxYmFzMTk5IHRvU2NpICIxMi42NUUrMiIgIC0+ICcxMjY1Jw0KLWRxYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcNCi1kcWJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnDQotZHFiYXMyMDIgdG9TY2kgIjEyLjY1RSs4IiAgLT4gJzEuMjY1RSs5Jw0KLWRxYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnDQotDQotZHFiYXMyMTAgdG9TY2kgIjEyNi41IiAgICAgLT4gJzEyNi41Jw0KLWRxYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnDQotZHFiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1Jw0KLWRxYmFzMjEzIHRvU2NpICIxMjYuNUUtNCIgIC0+ICcwLjAxMjY1Jw0KLWRxYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnDQotZHFiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1Jw0KLWRxYmFzMjE2IHRvU2NpICIxMjYuNUUtMSIgIC0+ICcxMi42NScNCi1kcWJhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnDQotZHFiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnDQotZHFiYXMyMTkgdG9TY2kgIjEyNi41RSsyIiAgLT4gJzEuMjY1RSs0Jw0KLWRxYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScNCi1kcWJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnDQotZHFiYXMyMjIgdG9TY2kgIjEyNi41RSs4IiAgLT4gJzEuMjY1RSsxMCcNCi1kcWJhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJw0KLQ0KLWRxYmFzMjMwIHRvU2NpICIxMjY1IiAgICAgLT4gJzEyNjUnDQotZHFiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3Jw0KLWRxYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnDQotZHFiYXMyMzMgdG9TY2kgIjEyNjVFLTQiICAtPiAnMC4xMjY1Jw0KLWRxYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1Jw0KLWRxYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1Jw0KLWRxYmFzMjM2IHRvU2NpICIxMjY1RS0xIiAgLT4gJzEyNi41Jw0KLWRxYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnDQotZHFiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnDQotZHFiYXMyMzkgdG9TY2kgIjEyNjVFKzIiICAtPiAnMS4yNjVFKzUnDQotZHFiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnDQotZHFiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnDQotZHFiYXMyNDIgdG9TY2kgIjEyNjVFKzgiICAtPiAnMS4yNjVFKzExJw0KLWRxYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycNCi0NCi1kcWJhczI1MCB0b1NjaSAiMC4xMjY1IiAgICAgLT4gJzAuMTI2NScNCi1kcWJhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScNCi1kcWJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05Jw0KLWRxYmFzMjUzIHRvU2NpICIwLjEyNjVFLTQiICAtPiAnMC4wMDAwMTI2NScNCi1kcWJhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScNCi1kcWJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1Jw0KLWRxYmFzMjU2IHRvU2NpICIwLjEyNjVFLTEiICAtPiAnMC4wMTI2NScNCi1kcWJhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScNCi1kcWJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1Jw0KLWRxYmFzMjU5IHRvU2NpICIwLjEyNjVFKzIiICAtPiAnMTIuNjUnDQotZHFiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScNCi1kcWJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnDQotZHFiYXMyNjIgdG9TY2kgIjAuMTI2NUUrOCIgIC0+ICcxLjI2NUUrNycNCi1kcWJhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScNCi0NCi0tLSBzb21lIG1vcmUgbmVnYXRpdmUgemVyb3MgW3N5c3RlbWF0aWMgdGVzdHMgYmVsb3ddDQotZHFiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJw0KLWRxYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnDQotZHFiYXMyOTIgdG9TY2kgIi0wLjAwMEUtMyIgIC0+ICctMC4wMDAwMDAnDQotZHFiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycNCi1kcWJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnDQotZHFiYXMyOTUgdG9TY2kgIi0wLjAwRS0zIiAgIC0+ICctMC4wMDAwMCcNCi1kcWJhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcNCi1kcWJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnDQotZHFiYXMyOTggdG9TY2kgIi0wRS0yIiAgICAgIC0+ICctMC4wMCcNCi1kcWJhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcNCi0NCi0tLSBFbmdpbmVlcmluZyBub3RhdGlvbiB0ZXN0cw0KLWRxYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMw0KLWRxYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyDQotZHFiYXMzMDMgIHRvU2NpIDEwZTExICAtPiAxLjBFKzEyDQotZHFiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyDQotZHFiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExDQotZHFiYXMzMDYgIHRvRW5nIDEwZTEwICAtPiAxMDBFKzkNCi1kcWJhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTANCi1kcWJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5DQotZHFiYXMzMDkgIHRvU2NpIDEwZTggICAtPiAxLjBFKzkNCi1kcWJhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQ0KLWRxYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4DQotZHFiYXMzMTIgIHRvRW5nIDEwZTcgICAtPiAxMDBFKzYNCi1kcWJhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNw0KLWRxYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYNCi1kcWJhczMxNSAgdG9TY2kgMTBlNSAgIC0+IDEuMEUrNg0KLWRxYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2DQotZHFiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUNCi1kcWJhczMxOCAgdG9FbmcgMTBlNCAgIC0+IDEwMEUrMw0KLWRxYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0DQotZHFiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMw0KLWRxYmFzMzIxICB0b1NjaSAxMGUyICAgLT4gMS4wRSszDQotZHFiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMNCi1kcWJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMg0KLWRxYmFzMzI0ICB0b0VuZyAxMGUxICAgLT4gMTAwDQotZHFiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMA0KLWRxYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTANCi1kcWJhczMyNyAgdG9TY2kgMTBlLTEgIC0+IDEuMA0KLWRxYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wDQotZHFiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwDQotZHFiYXMzMzAgIHRvRW5nIDEwZS0yICAtPiAwLjEwDQotZHFiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMA0KLWRxYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTANCi1kcWJhczMzMyAgdG9TY2kgMTBlLTQgIC0+IDAuMDAxMA0KLWRxYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwDQotZHFiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwDQotZHFiYXMzMzYgIHRvRW5nIDEwZS01ICAtPiAwLjAwMDEwDQotZHFiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMA0KLWRxYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTANCi1kcWJhczMzOSAgdG9TY2kgMTBlLTcgIC0+IDAuMDAwMDAxMA0KLWRxYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwDQotZHFiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcNCi1kcWJhczM0MiAgdG9FbmcgMTBlLTggIC0+IDEwMEUtOQ0KLWRxYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04DQotZHFiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQ0KLWRxYmFzMzQ1ICB0b1NjaSAxMGUtMTAgLT4gMS4wRS05DQotZHFiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkNCi1kcWJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTANCi1kcWJhczM0OCAgdG9FbmcgMTBlLTExIC0+IDEwMEUtMTINCi1kcWJhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTENCi1kcWJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMg0KLWRxYmFzMzUxICB0b1NjaSAxMGUtMTMgLT4gMS4wRS0xMg0KLWRxYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMg0KLQ0KLWRxYmFzMzYxICB0b1NjaSA3RTEyICAtPiA3RSsxMg0KLWRxYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMg0KLWRxYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQ0KLWRxYmFzMzY0ICB0b0VuZyA3RTExICAtPiA3MDBFKzkNCi1kcWJhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTANCi1kcWJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkNCi1kcWJhczM2NyAgdG9TY2kgN0U5ICAgLT4gN0UrOQ0KLWRxYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5DQotZHFiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgNCi1kcWJhczM3MCAgdG9FbmcgN0U4ICAgLT4gNzAwRSs2DQotZHFiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcNCi1kcWJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYNCi1kcWJhczM3MyAgdG9TY2kgN0U2ICAgLT4gN0UrNg0KLWRxYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2DQotZHFiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUNCi1kcWJhczM3NiAgdG9FbmcgN0U1ICAgLT4gNzAwRSszDQotZHFiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQNCi1kcWJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMNCi1kcWJhczM3OSAgdG9TY2kgN0UzICAgLT4gN0UrMw0KLWRxYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszDQotZHFiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzINCi1kcWJhczM4MiAgdG9FbmcgN0UyICAgLT4gNzAwDQotZHFiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzENCi1kcWJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzANCi1kcWJhczM4NSAgdG9TY2kgN0UwICAgLT4gNw0KLWRxYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3DQotZHFiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNw0KLWRxYmFzMzg4ICB0b0VuZyA3RS0xICAtPiAwLjcNCi1kcWJhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNw0KLWRxYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3DQotZHFiYXMzOTEgIHRvU2NpIDdFLTMgIC0+IDAuMDA3DQotZHFiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3DQotZHFiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNw0KLWRxYmFzMzk0ICB0b0VuZyA3RS00ICAtPiAwLjAwMDcNCi1kcWJhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNw0KLWRxYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3DQotZHFiYXMzOTcgIHRvU2NpIDdFLTYgIC0+IDAuMDAwMDA3DQotZHFiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3DQotZHFiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcNCi1kcWJhczQwMCAgdG9FbmcgN0UtNyAgLT4gNzAwRS05DQotZHFiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgNCi1kcWJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkNCi1kcWJhczQwMyAgdG9TY2kgN0UtOSAgLT4gN0UtOQ0KLWRxYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05DQotZHFiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwDQotZHFiYXM0MDYgIHRvRW5nIDdFLTEwIC0+IDcwMEUtMTINCi1kcWJhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTENCi1kcWJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyDQotZHFiYXM0MDkgIHRvU2NpIDdFLTEyIC0+IDdFLTEyDQotZHFiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyDQotZHFiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzDQotZHFiYXM0MTIgIHRvRW5nIDdFLTEzIC0+IDcwMEUtMTUNCi0NCi0tLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLg0KLWRxYmFzNDIwICB0b1NjaSAgICAxMDAgLT4gMTAwDQotZHFiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwDQotZHFiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkNCi1kcWJhczQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMA0KLWRxYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xDQotZHFiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwDQotZHFiYXM0MzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWJhczQzNCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWJhczQzNiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFiYXM0MzggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWJhczQ0MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZA0KLWRxYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkDQotZHFiYXM0NDQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDQ2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NTAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkDQotZHFiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQNCi1kcWJhczQ2MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NjQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQgSW5leGFjdA0KLWRxYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzYgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZA0KLWRxYmFzNDcwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkIEluZXhhY3QNCi1kcWJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0DQotZHFiYXM0NzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNyAgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZA0KLXJvdW5kaW5nOiAgY2VpbGluZw0KLWRxYnNyNDAxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MDMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQwNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgdXANCi1kcWJzcjQwNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQwNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MDggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGZsb29yDQotZHFic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I0MTEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQxMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2Rvd24NCi1kcWJzcjQxNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDE3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MTggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotZHFic3I0MjEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQyMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDI0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGRvd24NCi1kcWJzcjQyNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDI4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MjkgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfdXANCi1kcWJzcjQzMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjQzMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I0MzQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjQzNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLS0tIG5lZ2F0aXZlcw0KLXJvdW5kaW5nOiAgY2VpbGluZw0KLWRxYnNyNTAxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KLWRxYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MDMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUwNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgdXANCi1kcWJzcjUwNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUwNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MDggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGZsb29yDQotZHFic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I1MTEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUxMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2Rvd24NCi1kcWJzcjUxNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTE3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MTggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotZHFic3I1MjEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQotZHFic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUyMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTI0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGRvd24NCi1kcWJzcjUyNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTI4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MjkgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfdXANCi1kcWJzcjUzMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCi1kcWJzcjUzMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRxYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHFic3I1MzQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QNCi1kcWJzcjUzNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcw0KLWRxYmFzNTAwIHRvU2NpICcxLi4yJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTAzIHRvU2NpICcrKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA2IHRvU2NpICcrLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTA5IHRvU2NpICcxMmY0JyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTEyIHRvU2NpICcxMiAnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE1IHRvU2NpICd4JyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE4IHRvU2NpICczKycgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTIxIHRvU2NpICc3ZTk5OTk5YScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI0IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI3IHRvU2NpICdcdTBiNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTMwIHRvU2NpICcuMTIzLjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTMzIHRvU2NpICcwMDAwLi4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM2IHRvU2NpICcxMTFlKjEyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTM5IHRvU2NpICcxMTFlMS0zLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQyIHRvU2NpICcxZTEuMCcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ1IHRvU2NpICdPTkUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ4IHRvU2NpICcxZWUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTUxIHRvU2NpICcxLjIuMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU0IHRvU2NpICcxRSsrMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU3IHRvU2NpICcxRS0rMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTYwIHRvU2NpICIxRSIiIiIiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLS0tIE5lYXItc3BlY2lhbHMNCi1kcWJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2MiB0b1NjaSAiTmFOcSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2NSB0b1NjaSAiSW5maW4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2OCB0b1NjaSAiLUluZmluaXQiICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3MSB0b1NjaSAiLTBJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3NCB0b1NjaSAieE5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi0tLSBzb21lIGJhZGRpZXMgd2l0aCBkb3RzIGFuZCBFcyBhbmQgZG90cyBhbmQgc3BlY2lhbHMNCi1kcWJhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTc4IHRvU2NpICAnKy5lKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTgxIHRvU2NpICAnRSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTg0IHRvU2NpICAnLS5FKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotZHFiYXM1ODYgdG9TY2kgICcuTmFOJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM1ODkgdG9TY2kgICcrLkluZicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRxYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi0tLSBaZXJvcw0KLWRxYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkNCi1kcWJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04DQotZHFiYXM2MDMgdG9TY2kgMC4wMDAwMDAwICAgICAgICAgLT4gMEUtNw0KLWRxYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHFiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMA0KLWRxYmFzNjA2IHRvU2NpIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMA0KLWRxYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwDQotZHFiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMA0KLWRxYmFzNjA5IHRvU2NpIDAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDANCi1kcWJhczYxMiB0b1NjaSAtLjAgICAgICAgICAgICAgICAtPiAtMC4wDQotZHFiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTANCi1kcWJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wDQotZHFiYXM2MTUgdG9TY2kgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDANCi1kcWJhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDANCi1kcWJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwDQotZHFiYXM2MTggdG9TY2kgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDANCi1kcWJhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDANCi1kcWJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNw0KLWRxYmFzNjIxIHRvU2NpIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wRS04DQotZHFiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkNCi0NCi1kcWJhczYzMCB0b1NjaSAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwDQotZHFiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wDQotZHFiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMA0KLWRxYmFzNjMzIHRvU2NpICAwLjAwRSszICAgICAgICAgIC0+IDBFKzENCi1kcWJhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyDQotZHFiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMw0KLWRxYmFzNjM2IHRvU2NpICAwLjAwRSs2ICAgICAgICAgIC0+IDBFKzQNCi1kcWJhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1DQotZHFiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNg0KLWRxYmFzNjM5IHRvU2NpICAwLjAwRSs5ICAgICAgICAgIC0+IDBFKzcNCi0NCi1kcWJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjANCi1kcWJhczY0MSB0b1NjaSAgMC4wRSsxICAgICAgICAgICAtPiAwDQotZHFiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQ0KLWRxYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzINCi1kcWJhczY0NCB0b1NjaSAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszDQotZHFiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNA0KLWRxYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUNCi1kcWJhczY0NyB0b1NjaSAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2DQotZHFiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNw0KLWRxYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgNCi0NCi1kcWJhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwDQotZHFiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQ0KLWRxYmFzNjUyIHRvU2NpICAwRSsyICAgICAgICAgICAgIC0+IDBFKzINCi1kcWJhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszDQotZHFiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNA0KLWRxYmFzNjU1IHRvU2NpICAwRSs1ICAgICAgICAgICAgIC0+IDBFKzUNCi1kcWJhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2DQotZHFiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNw0KLWRxYmFzNjU4IHRvU2NpICAwRSs4ICAgICAgICAgICAgIC0+IDBFKzgNCi1kcWJhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5DQotDQotZHFiYXM2NjAgdG9TY2kgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wDQotZHFiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMA0KLWRxYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwDQotZHFiYXM2NjMgdG9TY2kgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwDQotZHFiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMA0KLWRxYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHFiYXM2NjYgdG9TY2kgIDAuMEUtNiAgICAgICAgICAgLT4gMEUtNw0KLWRxYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgNCi1kcWJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05DQotZHFiYXM2NjkgdG9TY2kgIDAuMEUtOSAgICAgICAgICAgLT4gMEUtMTANCi0NCi1kcWJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwDQotZHFiYXM2NzEgdG9TY2kgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDANCi1kcWJhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDANCi1kcWJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXM2NzQgdG9TY2kgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDANCi1kcWJhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03DQotZHFiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOA0KLWRxYmFzNjc3IHRvU2NpICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkNCi1kcWJhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMA0KLWRxYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExDQotDQotZHFiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDANCi1kcWJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRxYmFzNjgyIHRvU2NpICAgIDAwMDAuICAgICAgICAgIC0+ICAwDQotZHFiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDANCi1kcWJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMA0KLWRxYmFzNjg1IHRvU2NpICAgICAgIDAuICAgICAgICAgIC0+ICAwDQotZHFiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDANCi1kcWJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMA0KLWRxYmFzNjg4IHRvU2NpICArMC4gICAgICAgICAgICAgIC0+ICAwDQotZHFiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTANCi0NCi0tLSBTcGVjaWFscw0KLWRxYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzAyIHRvU2NpICJuQW4iICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzA1IHRvU2NpICIrbmFuIiAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzNzA4IHRvU2NpICItTmFOIiAgICAgICAgICAgIC0+IC1OYU4NCi1kcWJhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFODQotZHFiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTg0KLWRxYmFzNzExIHRvU2NpICItTkFOIiAgICAgICAgICAgIC0+IC1OYU4NCi1kcWJhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4NCi1kcWJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xDQotZHFiYXM3MTQgdG9TY2kgJ05hTjEyJyAgICAgICAgICAgLT4gTmFOMTINCi1kcWJhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMNCi1kcWJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0DQotZHFiYXM3MTcgdG9TY2kgJ05hTjAxJyAgICAgICAgICAgLT4gTmFOMQ0KLWRxYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyDQotZHFiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzDQotZHFiYXM3MjAgdG9TY2kgJ05hTjAxMjM0JyAgICAgICAgLT4gTmFOMTIzNA0KLWRxYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjENCi1kcWJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMg0KLWRxYmFzNzIzIHRvU2NpICdOYU4wMDEyMycgICAgICAgIC0+IE5hTjEyMw0KLWRxYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQNCi1kcWJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM3MjYgdG9TY2kgJ05hTjEyM2UrMScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHFiYXM3MjkgdG9TY2kgJ05hTisxMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotDQotZHFiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzMxIHRvU2NpICJzbmFuIiAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFODQotZHFiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzM0IHRvU2NpICIrc05hTiIgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFODQotZHFiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTg0KLWRxYmFzNzM3IHRvU2NpICIrU05BTiIgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTg0KLWRxYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFODQotZHFiYXM3NDAgdG9TY2kgIi1TbkFuIiAgICAgICAgICAgLT4gLXNOYU4NCi1kcWJhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTg0KLWRxYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4NCi1kcWJhczc0MyB0b1NjaSAnc05hTjcnICAgICAgICAgICAtPiBzTmFONw0KLWRxYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0DQotZHFiYXM3NDUgdG9TY2kgJ3NOYU4xMjM0NTY3ODkwMTIzNDU2Nzg3MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczc0NiB0b1NjaSAnc05hTjcyLjQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kcWJhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kcWJhczc0OCB0b1NjaSAiSW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc1MSB0b1NjaSAiSU5GIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc1NCB0b1NjaSAiK2lOZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NTcgdG9TY2kgIi1pbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5DQotDQotZHFiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzYyIHRvU2NpICJpTmZJbkl0WSIgICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzY1IHRvU2NpICIraW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5DQotZHFiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQ0KLWRxYmFzNzY4IHRvU2NpICItSW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQ0KLWRxYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQ0KLWRxYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQ0KLWRxYmFzNzcxIHRvU2NpICItSU5GSU5JVFkiICAgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcNCi1kcWJhc3Q3NzIgdG9FbmcgIk5hTiIgICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5DQotZHFiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTg0KLWRxYmFzdDc3NSB0b0VuZyAiLU5hTiIgICAgICAgICAgICAgLT4gLU5hTg0KLWRxYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhc3Q3NzkgdG9FbmcgIitOYU4iICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhc3Q3ODIgdG9FbmcgIk5BTiIgICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhc3Q3ODUgdG9FbmcgIm5hbiIgICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhc3Q3ODggdG9FbmcgIm5BTiIgICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4NCi1kcWJhc3Q3OTEgdG9FbmcgIk5hbiIgICAgICAgICAgICAgIC0+IE5hTg0KLWRxYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkNCi1kcWJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4NCi0NCi0tLSBaZXJvIHRvRW5nLCBldGMuDQotZHFiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUNCi0NCi1kcWJhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQ0KLWRxYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02DQotZHFiYXN0ODAzIHRvRW5nIDAuMDAwMDAwMCAgICAgICAgIC0+IDAuMEUtNg0KLWRxYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRxYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXN0ODA2IHRvRW5nIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMA0KLWRxYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMA0KLWRxYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwDQotZHFiYXN0ODA5IHRvRW5nIDAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRxYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjANCi1kcWJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMA0KLWRxYmFzdDgxMiB0b0VuZyAtLjAgICAgICAgICAgICAgICAtPiAtMC4wDQotZHFiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wDQotZHFiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjANCi1kcWJhc3Q4MTUgdG9FbmcgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDANCi1kcWJhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwDQotZHFiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDANCi1kcWJhc3Q4MTggdG9FbmcgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDANCi1kcWJhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwDQotZHFiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYNCi1kcWJhc3Q4MjEgdG9FbmcgLTAuMDAwMDAwMDAgICAgICAgLT4gLTAuMDBFLTYNCi1kcWJhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkNCi0NCi1kcWJhc3Q4MzAgdG9FbmcgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMA0KLWRxYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjANCi1kcWJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMA0KLWRxYmFzdDgzMyB0b0VuZyAgMC4wMEUrMyAgICAgICAgICAtPiAwLjAwRSszDQotZHFiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMw0KLWRxYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszDQotZHFiYXN0ODM2IHRvRW5nICAwLjAwRSs2ICAgICAgICAgIC0+IDAuMDBFKzYNCi1kcWJhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2DQotZHFiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYNCi1kcWJhc3Q4MzkgdG9FbmcgIDAuMDBFKzkgICAgICAgICAgLT4gMC4wMEUrOQ0KLQ0KLWRxYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjANCi1kcWJhc3Q4NDEgdG9FbmcgIDAuMEUrMSAgICAgICAgICAgLT4gMA0KLWRxYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszDQotZHFiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMw0KLWRxYmFzdDg0NCB0b0VuZyAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszDQotZHFiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYNCi1kcWJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2DQotZHFiYXN0ODQ3IHRvRW5nICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYNCi1kcWJhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQ0KLWRxYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkNCi0NCi1kcWJhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMA0KLWRxYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszDQotZHFiYXN0ODUyIHRvRW5nICAwRSsyICAgICAgICAgICAgIC0+IDAuMEUrMw0KLWRxYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszDQotZHFiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYNCi1kcWJhc3Q4NTUgdG9FbmcgIDBFKzUgICAgICAgICAgICAgLT4gMC4wRSs2DQotZHFiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYNCi1kcWJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQ0KLWRxYmFzdDg1OCB0b0VuZyAgMEUrOCAgICAgICAgICAgICAtPiAwLjBFKzkNCi1kcWJhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQ0KLQ0KLWRxYmFzdDg2MCB0b0VuZyAgMC4wRS0wICAgICAgICAgICAtPiAwLjANCi1kcWJhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMA0KLWRxYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMA0KLWRxYmFzdDg2MyB0b0VuZyAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDANCi1kcWJhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMA0KLWRxYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRxYmFzdDg2NiB0b0VuZyAgMC4wRS02ICAgICAgICAgICAtPiAwLjBFLTYNCi1kcWJhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNg0KLWRxYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05DQotZHFiYXN0ODY5IHRvRW5nICAwLjBFLTkgICAgICAgICAgIC0+IDAuMEUtOQ0KLQ0KLWRxYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwDQotZHFiYXN0ODcxIHRvRW5nICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwDQotZHFiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMA0KLWRxYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwDQotZHFiYXN0ODc0IHRvRW5nICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHFiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNg0KLWRxYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02DQotZHFiYXN0ODc3IHRvRW5nICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkNCi1kcWJhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05DQotZHFiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkNCi0NCi0tLSBsb25nIGlucHV0IHN0cmluZ3MNCi1kcWJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwMiB0b3NjaSAnMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZHFiYXM4MDMgdG9zY2kgJzAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwNSB0b3NjaSAnMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZHFiYXM4MDYgdG9zY2kgJzAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgwOCB0b3NjaSAnMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQotZHFiYXM4MDkgdG9zY2kgJzAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCi0NCi1kcWJhczgxMSB0b3NjaSAnMC4xMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODEzIHRvc2NpICcwLjAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgxNCB0b3NjaSAnMC4wMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYmFzODE2IHRvc2NpICcwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWJhczgxNyB0b3NjaSAnMC4wMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtNw0KLWRxYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOA0KLWRxYmFzODE5IHRvc2NpICcwLjAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTkNCi1kcWJhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtMTANCi0NCi1kcWJhczgyMSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszNyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyMiB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzggSW5leGFjdCBSb3VuZGVkDQotZHFiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOSBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyNCB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjMnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyNSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDEgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyNyB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczgyOCB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTY3JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDQgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MNCi1kcWJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZWdhdGl2ZXMgdGhlIHNhbWUNCi1kcWJhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRxYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcw0KLXJvdW5kaW5nOiAgY2VpbGluZw0KLWRxYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIHVwDQotZHFiYXM5MzIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgZG93bg0KLWRxYmFzOTM0IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGZsb29yDQotZHFiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRxYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRxYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRxYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHFiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLQ0KLS0tIE5vdyBjaGVjayA4NTQvNzU0ciBzb21lIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdyB0byAwDQotZHFiZW00MDAgdG9TY2kgIDEuMDAwMEUtMzgzICAgICAtPiAxLjAwMDBFLTM4Mw0KLWRxYmVtNDAxIHRvU2NpICAwLjFFLTYxNzIgICAgICAgIC0+IDFFLTYxNzMgICAgICAgU3Vibm9ybWFsDQotZHFiZW00MDIgdG9TY2kgIDAuMTAwMEUtNjE3MiAgICAgLT4gMS4wMDBFLTYxNzMgICBTdWJub3JtYWwNCi1kcWJlbTQwMyB0b1NjaSAgMC4wMTAwRS02MTcyICAgICAtPiAxLjAwRS02MTc0ICAgIFN1Ym5vcm1hbA0KLWRxYmVtNDA0IHRvU2NpICAwLjAwMTBFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgICAgU3Vibm9ybWFsDQotZHFiZW00MDUgdG9TY2kgIDAuMDAwMUUtNjE3MiAgICAgLT4gMUUtNjE3NiAgICAgICBTdWJub3JtYWwNCi1kcWJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxYmVtNDA3IHRvU2NpICAwLjAwMDEzRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MDggdG9TY2kgIDAuMDAwMTVFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDEwIHRvU2NpICAwLjAwMDIzRS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtNjE3MiAgICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtNjE3MiAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTYxNzIgICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDE5IHRvU2NpICAwLjAwMDA5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTYxNzIgICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmVtNDIxIHRvU2NpICAwLjAwMDAzRS02MTcyICAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kcWJlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDI2IHRvU2NpICAwLjAwMTA1MEUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTYxNzIgICAtPiAxLjFFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDI5IHRvU2NpICAwLjAwMTE1MEUtNjE3MiAgIC0+IDEuMkUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWJlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTYxNzIgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS02MTcyICAgLT4gMS4wMkUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDQxIHRvU2NpICAwLjEwMTA1RS02MTcyICAgIC0+IDEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTYxNzIgICAgLT4gMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDQ0IHRvU2NpICAwLjEwMTE1RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWJlbTQ1MCB0b1NjaSAgMS4xMDczMEUtNjE3MyAgIC0+IDEuMTA3RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTEgdG9TY2kgIDEuMTA3NTBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDUyIHRvU2NpICAxLjEwNzcwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFiZW00NTQgdG9TY2kgIDEuMTA4NTBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDU1IHRvU2NpICAxLjEwODcwRS02MTczICAgLT4gMS4xMDlFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBtYWtlIHN1cmUgc2lnbiBPSw0KLWRxYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDU3IHRvU2NpICAtMC4xMDEwNUUtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDYwIHRvU2NpICAtMC4xMDExNUUtNjE3MiAgIC0+IC0xLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtNjE3MiAgIC0+IC0xLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICc5OTlzJyBjYXNlcw0KLWRxYmVtNDY0IHRvU2NpICA5OTk5OTlFLTYxNzMgICAgICAgICAtPiA5Ljk5OTk5RS02MTY4IFN1Ym5vcm1hbA0KLWRxYmVtNDY1IHRvU2NpICA5OTk5OS4wRS02MTcyICAgICAgICAtPiA5Ljk5OTkwRS02MTY4IFN1Ym5vcm1hbA0KLWRxYmVtNDY2IHRvU2NpICA5OTk5OS5FLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNjggIFN1Ym5vcm1hbA0KLWRxYmVtNDY3IHRvU2NpICA5OTk5LjlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNjkgIFN1Ym5vcm1hbA0KLWRxYmVtNDY4IHRvU2NpICA5OTkuOTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzAgIFN1Ym5vcm1hbA0KLWRxYmVtNDY5IHRvU2NpICA5OS45OTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzEgIFN1Ym5vcm1hbA0KLWRxYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzIgIFN1Ym5vcm1hbA0KLWRxYmVtNDcxIHRvU2NpICAwLjk5OTk5RS02MTcyICAgICAgICAtPiAxLjAwMDBFLTYxNzIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTYxNzIgICAgICAgLT4gMS4wMDBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS02MTcyICAgICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWJlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS02MTcyICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS02MTcyIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MNCi1kcWJhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRxYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ0RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFiYXMxMDQyIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDVFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NkUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdDQotZHFiYXMxMDc1IHRvU2NpICAgMGUrMTAwMDAgIC0+ICAwRSs2MTExIENsYW1wZWQNCi1kcWJhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTYxNzYgIENsYW1wZWQNCi1kcWJhczEwNzcgdG9TY2kgIC0wZSsxMDAwMCAgLT4gLTBFKzYxMTEgQ2xhbXBlZA0KLWRxYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtNjE3NiAgQ2xhbXBlZA0KLQ0KLS0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcg0KLWRxYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWJhczExMDIgdG9TY2kgLTFFLTE1NzI4NjMgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRxYmFzMTEwMyB0b1NjaSAtMUUtMTU3MjkzMiAtPiAtMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZHFiYXMxMTA0IHRvU2NpIC0wIC0+IC0wDQotZHFiYXMxMTA1IHRvU2NpICswIC0+ICAwDQotZHFiYXMxMTA2IHRvU2NpICsxRS0xNTcyOTMyIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1kcWJhczExMDcgdG9TY2kgKzFFLTE1NzI4NjMgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRxYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjUXVhZCA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgorLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCistLSByZXByZXNlbnRlZCBpbiBhIGRlY1F1YWQuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvCistLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCitkcWJhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKK2RxYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitkcWJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKK2RxYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKK2RxYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorZHFiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCitkcWJhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKK2RxYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorZHFiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41CitkcWJhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKK2RxYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorZHFiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCitkcWJhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKK2RxYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworZHFiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCitkcWJhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKK2RxYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitkcWJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKKworZHFiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCitkcWJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorZHFiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKK2RxYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCitkcWJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitkcWJhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKK2RxYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQorCitkcWJhczAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnCitkcWJhczAzMSB0b1NjaSAgJzEyMzQ1Njc4OS4wMDAwMDAnICAgLT4gJzEyMzQ1Njc4OS4wMDAwMDAnCitkcWJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicKK2RxYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5JworZHFiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAwMTIzNDU2Nzg5JworZHFiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03JworZHFiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04JworCitkcWJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0JworZHFiYXMwMzggdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NScKKworLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKK2RxYnNuMDAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYnNuMDAyIHRvU2NpIC0xRS02MTQzIC0+IC0xRS02MTQzCitkcWJzbjAwMyB0b1NjaSAtMUUtNjE3NiAtPiAtMUUtNjE3NiBTdWJub3JtYWwKK2RxYnNuMDA0IHRvU2NpIC0wIC0+IC0wCitkcWJzbjAwNSB0b1NjaSArMCAtPiAgMAorZHFic24wMDYgdG9TY2kgKzFFLTYxNzYgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCitkcWJzbjAwNyB0b1NjaSArMUUtNjE0MyAtPiAgMUUtNjE0MworZHFic24wMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCistLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQorLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0CitkcWJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInCitkcWJhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2JworZHFiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2JworZHFiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2JworZHFiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2JworZHFiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJworZHFiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3JworZHFiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScKK2RxYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcKK2RxYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcKK2RxYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScKK2RxYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnCitkcWJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScKK2RxYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcKK2RxYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnCitkcWJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04JworZHFiYXMwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcKK2RxYmFzMDU3IHRvU2NpICIyMzQ1Njc4LjU0MzIxMCIgLT4gJzIzNDU2NzguNTQzMjEwJworZHFiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJworZHFiYXMwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnCitkcWJhczA2MCB0b1NjaSAiMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RxYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RxYmFzMDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkcWJhczA2MyB0b1NjaSAiKzAwMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RxYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZHFiYXMwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworZHFiYXMwNjYgdG9TY2kgIi0wMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKKy0tIGV4YW1wbGVzCitkcWJhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2RxYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2RxYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnCisKKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdCisKKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcworZHFiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAwLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4xMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MS4yMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkxMi4zNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTEyMy40NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MTIzNC41Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkxMjM0NS42Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Ni43ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ny44OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3OC45MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODkgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OS4wMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5MCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MC4xMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkxIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMS4yMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTIgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMi4zNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5MyB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMy40NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk0IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNC41Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NS42NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Ni43ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ny44MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3OC4wMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MC4xMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMS4yMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMi4zNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMy40NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNC41NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NS42MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwNSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Ni4xMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MS4yMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIuMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNSBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA4IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzLiAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNiBJbmV4YWN0IFJvdW5kZWQKKy0tIDEyMzQ1Njc4OTAxMjM0NTY3OAorCistLSBOdW1iZXJzIHdpdGggRQorZHFiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RxYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJworZHFiYXMxMzIgdG9TY2kgIjAuMDAwRS0zIiAgLT4gJzAuMDAwMDAwJworZHFiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnCitkcWJhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJworZHFiYXMxMzUgdG9TY2kgIjAuMDBFLTMiICAgLT4gJzAuMDAwMDAnCitkcWJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnCitkcWJhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycKK2RxYmFzMTM4IHRvU2NpICIrMEUrOSIgICAgIC0+ICcwRSs5JworZHFiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5JworZHFiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkcWJhczE0MSB0b1NjaSAiMWUrMDkiICAgICAtPiAnMUUrOScKK2RxYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcKK2RxYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5JworZHFiYXMxNDQgdG9TY2kgIjBFKzkiICAgICAgLT4gJzBFKzknCitkcWJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RxYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5JworZHFiYXMxNDcgdG9TY2kgIjFlKzkwIiAgICAgLT4gJzFFKzkwJworZHFiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknCitkcWJhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScKK2RxYmFzMTUwIHRvU2NpICIxRTkiICAgICAgIC0+ICcxRSs5JworZHFiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknCitkcWJhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnCitkcWJhczE1MyB0b1NjaSAiMUUwMDkiICAgICAtPiAnMUUrOScKK2RxYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5JworZHFiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJworZHFiYXMxNTYgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RxYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5JworZHFiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnCitkcWJhczE1OSB0b1NjaSAiMC43M2UtNyIgICAtPiAnNy4zRS04JworZHFiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknCitkcWJhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScKK2RxYmFzMTYyIHRvU2NpICIxMEUrOSIgICAgIC0+ICcxLjBFKzEwJworZHFiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnCitkcWJhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScKK2RxYmFzMTY1IHRvU2NpICIxMEUrMDA5IiAgIC0+ICcxLjBFKzEwJworZHFiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJworZHFiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJworZHFiYXMxNjggdG9TY2kgIjEwMEUrOTAiICAgLT4gJzEuMDBFKzkyJworZHFiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJworCitkcWJhczE3MCB0b1NjaSAiMS4yNjUiICAgICAtPiAnMS4yNjUnCitkcWJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJworZHFiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04JworZHFiYXMxNzMgdG9TY2kgIjEuMjY1RS00IiAgLT4gJzAuMDAwMTI2NScKK2RxYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScKK2RxYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1JworZHFiYXMxNzYgdG9TY2kgIjEuMjY1RS0xIiAgLT4gJzAuMTI2NScKK2RxYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScKK2RxYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScKK2RxYmFzMTc5IHRvU2NpICIxLjI2NUUrMiIgIC0+ICcxMjYuNScKK2RxYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1JworZHFiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0JworZHFiYXMxODIgdG9TY2kgIjEuMjY1RSs4IiAgLT4gJzEuMjY1RSs4JworZHFiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcKKworZHFiYXMxOTAgdG9TY2kgIjEyLjY1IiAgICAgLT4gJzEyLjY1JworZHFiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScKK2RxYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycKK2RxYmFzMTkzIHRvU2NpICIxMi42NUUtNCIgIC0+ICcwLjAwMTI2NScKK2RxYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1JworZHFiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScKK2RxYmFzMTk2IHRvU2NpICIxMi42NUUtMSIgIC0+ICcxLjI2NScKK2RxYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScKK2RxYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScKK2RxYmFzMTk5IHRvU2NpICIxMi42NUUrMiIgIC0+ICcxMjY1JworZHFiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0JworZHFiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1JworZHFiYXMyMDIgdG9TY2kgIjEyLjY1RSs4IiAgLT4gJzEuMjY1RSs5JworZHFiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScKKworZHFiYXMyMTAgdG9TY2kgIjEyNi41IiAgICAgLT4gJzEyNi41JworZHFiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcKK2RxYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScKK2RxYmFzMjEzIHRvU2NpICIxMjYuNUUtNCIgIC0+ICcwLjAxMjY1JworZHFiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScKK2RxYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScKK2RxYmFzMjE2IHRvU2NpICIxMjYuNUUtMSIgIC0+ICcxMi42NScKK2RxYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScKK2RxYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1JworZHFiYXMyMTkgdG9TY2kgIjEyNi41RSsyIiAgLT4gJzEuMjY1RSs0JworZHFiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1JworZHFiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2JworZHFiYXMyMjIgdG9TY2kgIjEyNi41RSs4IiAgLT4gJzEuMjY1RSsxMCcKK2RxYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInCisKK2RxYmFzMjMwIHRvU2NpICIxMjY1IiAgICAgLT4gJzEyNjUnCitkcWJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnCitkcWJhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1JworZHFiYXMyMzMgdG9TY2kgIjEyNjVFLTQiICAtPiAnMC4xMjY1JworZHFiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnCitkcWJhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScKK2RxYmFzMjM2IHRvU2NpICIxMjY1RS0xIiAgLT4gJzEyNi41JworZHFiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScKK2RxYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0JworZHFiYXMyMzkgdG9TY2kgIjEyNjVFKzIiICAtPiAnMS4yNjVFKzUnCitkcWJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicKK2RxYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3JworZHFiYXMyNDIgdG9TY2kgIjEyNjVFKzgiICAtPiAnMS4yNjVFKzExJworZHFiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJworCitkcWJhczI1MCB0b1NjaSAiMC4xMjY1IiAgICAgLT4gJzAuMTI2NScKK2RxYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJworZHFiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScKK2RxYmFzMjUzIHRvU2NpICIwLjEyNjVFLTQiICAtPiAnMC4wMDAwMTI2NScKK2RxYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1JworZHFiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScKK2RxYmFzMjU2IHRvU2NpICIwLjEyNjVFLTEiICAtPiAnMC4wMTI2NScKK2RxYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1JworZHFiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScKK2RxYmFzMjU5IHRvU2NpICIwLjEyNjVFKzIiICAtPiAnMTIuNjUnCitkcWJhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41JworZHFiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1JworZHFiYXMyNjIgdG9TY2kgIjAuMTI2NUUrOCIgIC0+ICcxLjI2NUUrNycKK2RxYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5JworCistLSBzb21lIG1vcmUgbmVnYXRpdmUgemVyb3MgW3N5c3RlbWF0aWMgdGVzdHMgYmVsb3ddCitkcWJhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnCitkcWJhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJworZHFiYXMyOTIgdG9TY2kgIi0wLjAwMEUtMyIgIC0+ICctMC4wMDAwMDAnCitkcWJhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03JworZHFiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJworZHFiYXMyOTUgdG9TY2kgIi0wLjAwRS0zIiAgIC0+ICctMC4wMDAwMCcKK2RxYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJworZHFiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJworZHFiYXMyOTggdG9TY2kgIi0wRS0yIiAgICAgIC0+ICctMC4wMCcKK2RxYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJworCistLSBFbmdpbmVlcmluZyBub3RhdGlvbiB0ZXN0cworZHFiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzCitkcWJhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMgorZHFiYXMzMDMgIHRvU2NpIDEwZTExICAtPiAxLjBFKzEyCitkcWJhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTIKK2RxYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQorZHFiYXMzMDYgIHRvRW5nIDEwZTEwICAtPiAxMDBFKzkKK2RxYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMAorZHFiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQorZHFiYXMzMDkgIHRvU2NpIDEwZTggICAtPiAxLjBFKzkKK2RxYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5CitkcWJhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOAorZHFiYXMzMTIgIHRvRW5nIDEwZTcgICAtPiAxMDBFKzYKK2RxYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3CitkcWJhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2CitkcWJhczMxNSAgdG9TY2kgMTBlNSAgIC0+IDEuMEUrNgorZHFiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYKK2RxYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1CitkcWJhczMxOCAgdG9FbmcgMTBlNCAgIC0+IDEwMEUrMworZHFiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQKK2RxYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMKK2RxYmFzMzIxICB0b1NjaSAxMGUyICAgLT4gMS4wRSszCitkcWJhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMworZHFiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzIKK2RxYmFzMzI0ICB0b0VuZyAxMGUxICAgLT4gMTAwCitkcWJhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwCitkcWJhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwCitkcWJhczMyNyAgdG9TY2kgMTBlLTEgIC0+IDEuMAorZHFiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjAKK2RxYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMAorZHFiYXMzMzAgIHRvRW5nIDEwZS0yICAtPiAwLjEwCitkcWJhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwCitkcWJhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwCitkcWJhczMzMyAgdG9TY2kgMTBlLTQgIC0+IDAuMDAxMAorZHFiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTAKK2RxYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMAorZHFiYXMzMzYgIHRvRW5nIDEwZS01ICAtPiAwLjAwMDEwCitkcWJhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwCitkcWJhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwCitkcWJhczMzOSAgdG9TY2kgMTBlLTcgIC0+IDAuMDAwMDAxMAorZHFiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTAKK2RxYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03CitkcWJhczM0MiAgdG9FbmcgMTBlLTggIC0+IDEwMEUtOQorZHFiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgKK2RxYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkKK2RxYmFzMzQ1ICB0b1NjaSAxMGUtMTAgLT4gMS4wRS05CitkcWJhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQorZHFiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwCitkcWJhczM0OCAgdG9FbmcgMTBlLTExIC0+IDEwMEUtMTIKK2RxYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQorZHFiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTIKK2RxYmFzMzUxICB0b1NjaSAxMGUtMTMgLT4gMS4wRS0xMgorZHFiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyCisKK2RxYmFzMzYxICB0b1NjaSA3RTEyICAtPiA3RSsxMgorZHFiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyCitkcWJhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTEKK2RxYmFzMzY0ICB0b0VuZyA3RTExICAtPiA3MDBFKzkKK2RxYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMAorZHFiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5CitkcWJhczM2NyAgdG9TY2kgN0U5ICAgLT4gN0UrOQorZHFiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkKK2RxYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4CitkcWJhczM3MCAgdG9FbmcgN0U4ICAgLT4gNzAwRSs2CitkcWJhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNworZHFiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2CitkcWJhczM3MyAgdG9TY2kgN0U2ICAgLT4gN0UrNgorZHFiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYKK2RxYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1CitkcWJhczM3NiAgdG9FbmcgN0U1ICAgLT4gNzAwRSszCitkcWJhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNAorZHFiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszCitkcWJhczM3OSAgdG9TY2kgN0UzICAgLT4gN0UrMworZHFiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMKK2RxYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyCitkcWJhczM4MiAgdG9FbmcgN0UyICAgLT4gNzAwCitkcWJhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQorZHFiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwCitkcWJhczM4NSAgdG9TY2kgN0UwICAgLT4gNworZHFiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcKK2RxYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcKK2RxYmFzMzg4ICB0b0VuZyA3RS0xICAtPiAwLjcKK2RxYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3CitkcWJhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNworZHFiYXMzOTEgIHRvU2NpIDdFLTMgIC0+IDAuMDA3CitkcWJhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcKK2RxYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcKK2RxYmFzMzk0ICB0b0VuZyA3RS00ICAtPiAwLjAwMDcKK2RxYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3CitkcWJhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNworZHFiYXMzOTcgIHRvU2NpIDdFLTYgIC0+IDAuMDAwMDA3CitkcWJhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcKK2RxYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03CitkcWJhczQwMCAgdG9FbmcgN0UtNyAgLT4gNzAwRS05CitkcWJhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOAorZHFiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05CitkcWJhczQwMyAgdG9TY2kgN0UtOSAgLT4gN0UtOQorZHFiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkKK2RxYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMAorZHFiYXM0MDYgIHRvRW5nIDdFLTEwIC0+IDcwMEUtMTIKK2RxYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQorZHFiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMgorZHFiYXM0MDkgIHRvU2NpIDdFLTEyIC0+IDdFLTEyCitkcWJhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTIKK2RxYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMworZHFiYXM0MTIgIHRvRW5nIDdFLTEzIC0+IDcwMEUtMTUKKworLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4KK2RxYmFzNDIwICB0b1NjaSAgICAxMDAgLT4gMTAwCitkcWJhczQyMiAgdG9TY2kgICAxMDAwIC0+IDEwMDAKK2RxYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45CitkcWJhczQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMAorZHFiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjEKK2RxYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMAorZHFiYXM0MzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYmFzNDM0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0MzYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0MzggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkCitkcWJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZAorZHFiYXM0NDQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NDggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQKK2RxYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkCitkcWJhczQ2MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ2NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ2NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM2ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZAorZHFiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNyAgIFJvdW5kZWQgSW5leGFjdAorCistLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQKK3JvdW5kaW5nOiAgY2VpbGluZworZHFic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQwMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MDMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkcWJzcjQwNSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MDggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RxYnNyNDEwICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MTEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RxYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MTYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDE3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTkgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDIyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDI1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RxYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MjcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDI4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkcWJzcjQzMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQzMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MzQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CistLSBuZWdhdGl2ZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZHFic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUwMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MDMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkcWJzcjUwNSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MDggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RxYnNyNTEwICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MTEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RxYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MTYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTE3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTkgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTIyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTI1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RxYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MjcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTI4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkcWJzcjUzMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUzMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MzQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMKK2RxYmFzNTAwIHRvU2NpICcxLi4yJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTAzIHRvU2NpICcrKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA2IHRvU2NpICcrLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA5IHRvU2NpICcxMmY0JyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTEyIHRvU2NpICcxMiAnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE1IHRvU2NpICd4JyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE4IHRvU2NpICczKycgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIxIHRvU2NpICc3ZTk5OTk5YScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI0IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI3IHRvU2NpICdcdTBiNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTMwIHRvU2NpICcuMTIzLjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTMzIHRvU2NpICcwMDAwLi4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM2IHRvU2NpICcxMTFlKjEyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM5IHRvU2NpICcxMTFlMS0zLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQyIHRvU2NpICcxZTEuMCcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ1IHRvU2NpICdPTkUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ4IHRvU2NpICcxZWUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUxIHRvU2NpICcxLjIuMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU0IHRvU2NpICcxRSsrMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU3IHRvU2NpICcxRS0rMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTYwIHRvU2NpICIxRSIiIiIiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorLS0gTmVhci1zcGVjaWFscworZHFiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2MiB0b1NjaSAiTmFOcSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NSB0b1NjaSAiSW5maW4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2OCB0b1NjaSAiLUluZmluaXQiICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MSB0b1NjaSAiLTBJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3NCB0b1NjaSAieE5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBzb21lIGJhZGRpZXMgd2l0aCBkb3RzIGFuZCBFcyBhbmQgZG90cyBhbmQgc3BlY2lhbHMKK2RxYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc4IHRvU2NpICAnKy5lKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTgxIHRvU2NpICAnRSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTg0IHRvU2NpICAnLS5FKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHFiYXM1ODYgdG9TY2kgICcuTmFOJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODkgdG9TY2kgICcrLkluZicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBaZXJvcworZHFiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZHFiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOAorZHFiYXM2MDMgdG9TY2kgMC4wMDAwMDAwICAgICAgICAgLT4gMEUtNworZHFiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzNjA2IHRvU2NpIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjA5IHRvU2NpIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHFiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwCitkcWJhczYxMiB0b1NjaSAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkcWJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMAorZHFiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZHFiYXM2MTUgdG9TY2kgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RxYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZHFiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZHFiYXM2MTggdG9TY2kgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RxYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZHFiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcKK2RxYmFzNjIxIHRvU2NpIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wRS04CitkcWJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkcWJhczYzMCB0b1NjaSAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkcWJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RxYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RxYmFzNjMzIHRvU2NpICAwLjAwRSszICAgICAgICAgIC0+IDBFKzEKK2RxYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzIKK2RxYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RxYmFzNjM2IHRvU2NpICAwLjAwRSs2ICAgICAgICAgIC0+IDBFKzQKK2RxYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUKK2RxYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RxYmFzNjM5IHRvU2NpICAwLjAwRSs5ICAgICAgICAgIC0+IDBFKzcKKworZHFiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkcWJhczY0MSB0b1NjaSAgMC4wRSsxICAgICAgICAgICAtPiAwCitkcWJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxCitkcWJhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyCitkcWJhczY0NCB0b1NjaSAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkcWJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0CitkcWJhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1CitkcWJhczY0NyB0b1NjaSAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitkcWJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3CitkcWJhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4CisKK2RxYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDAKK2RxYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzEKK2RxYmFzNjUyIHRvU2NpICAwRSsyICAgICAgICAgICAgIC0+IDBFKzIKK2RxYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQKK2RxYmFzNjU1IHRvU2NpICAwRSs1ICAgICAgICAgICAgIC0+IDBFKzUKK2RxYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RxYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcKK2RxYmFzNjU4IHRvU2NpICAwRSs4ICAgICAgICAgICAgIC0+IDBFKzgKK2RxYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZHFiYXM2NjAgdG9TY2kgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkcWJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkcWJhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZHFiYXM2NjMgdG9TY2kgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXM2NjYgdG9TY2kgIDAuMEUtNiAgICAgICAgICAgLT4gMEUtNworZHFiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOAorZHFiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZHFiYXM2NjkgdG9TY2kgIDAuMEUtOSAgICAgICAgICAgLT4gMEUtMTAKKworZHFiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZHFiYXM2NzEgdG9TY2kgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXM2NzQgdG9TY2kgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcKK2RxYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgKK2RxYmFzNjc3IHRvU2NpICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RxYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwCitkcWJhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQorCitkcWJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjgyIHRvU2NpICAgIDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjg1IHRvU2NpICAgICAgIDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTAKK2RxYmFzNjg4IHRvU2NpICArMC4gICAgICAgICAgICAgIC0+ICAwCitkcWJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMAorCistLSBTcGVjaWFscworZHFiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzAyIHRvU2NpICJuQW4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA1IHRvU2NpICIrbmFuIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA4IHRvU2NpICItTmFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RxYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RxYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RxYmFzNzExIHRvU2NpICItTkFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RxYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQorZHFiYXM3MTQgdG9TY2kgJ05hTjEyJyAgICAgICAgICAgLT4gTmFOMTIKK2RxYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMworZHFiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNAorZHFiYXM3MTcgdG9TY2kgJ05hTjAxJyAgICAgICAgICAgLT4gTmFOMQorZHFiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTIKK2RxYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMworZHFiYXM3MjAgdG9TY2kgJ05hTjAxMjM0JyAgICAgICAgLT4gTmFOMTIzNAorZHFiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQorZHFiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTIKK2RxYmFzNzIzIHRvU2NpICdOYU4wMDEyMycgICAgICAgIC0+IE5hTjEyMworZHFiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNAorZHFiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTY3ODEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3MjYgdG9TY2kgJ05hTjEyM2UrMScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3MjkgdG9TY2kgJ05hTisxMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RxYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzMxIHRvU2NpICJzbmFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzM0IHRvU2NpICIrc05hTiIgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzM3IHRvU2NpICIrU05BTiIgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFOCitkcWJhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTgorZHFiYXM3NDAgdG9TY2kgIi1TbkFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFOCitkcWJhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFOCitkcWJhczc0MyB0b1NjaSAnc05hTjcnICAgICAgICAgICAtPiBzTmFONworZHFiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQKK2RxYmFzNzQ1IHRvU2NpICdzTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4NzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczc0NiB0b1NjaSAnc05hTjcyLjQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkcWJhczc0OCB0b1NjaSAiSW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1MSB0b1NjaSAiSU5GIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1NCB0b1NjaSAiK2lOZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NTcgdG9TY2kgIi1pbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkcWJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzYyIHRvU2NpICJpTmZJbkl0WSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY1IHRvU2NpICIraW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY4IHRvU2NpICItSW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzcxIHRvU2NpICItSU5GSU5JVFkiICAgICAgIC0+IC1JbmZpbml0eQorCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nCitkcWJhc3Q3NzIgdG9FbmcgIk5hTiIgICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzdDc3NSB0b0VuZyAiLU5hTiIgICAgICAgICAgICAgLT4gLU5hTgorZHFiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFOCitkcWJhc3Q3NzkgdG9FbmcgIitOYU4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkcWJhc3Q3ODIgdG9FbmcgIk5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkcWJhc3Q3ODUgdG9FbmcgIm5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkcWJhc3Q3ODggdG9FbmcgIm5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkcWJhc3Q3OTEgdG9FbmcgIk5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZHFiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFOCisKKy0tIFplcm8gdG9FbmcsIGV0Yy4KK2RxYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlCisKK2RxYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkcWJhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNgorZHFiYXN0ODAzIHRvRW5nIDAuMDAwMDAwMCAgICAgICAgIC0+IDAuMEUtNgorZHFiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXN0ODA2IHRvRW5nIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkcWJhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZHFiYXN0ODA5IHRvRW5nIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RxYmFzdDgxMiB0b0VuZyAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkcWJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RxYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkcWJhc3Q4MTUgdG9FbmcgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RxYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RxYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkcWJhc3Q4MTggdG9FbmcgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RxYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RxYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02CitkcWJhc3Q4MjEgdG9FbmcgLTAuMDAwMDAwMDAgICAgICAgLT4gLTAuMDBFLTYKK2RxYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkcWJhc3Q4MzAgdG9FbmcgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZHFiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RxYmFzdDgzMyB0b0VuZyAgMC4wMEUrMyAgICAgICAgICAtPiAwLjAwRSszCitkcWJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszCitkcWJhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZHFiYXN0ODM2IHRvRW5nICAwLjAwRSs2ICAgICAgICAgIC0+IDAuMDBFKzYKK2RxYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYKK2RxYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2CitkcWJhc3Q4MzkgdG9FbmcgIDAuMDBFKzkgICAgICAgICAgLT4gMC4wMEUrOQorCitkcWJhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4NDEgdG9FbmcgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZHFiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMKK2RxYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMKK2RxYmFzdDg0NCB0b0VuZyAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkcWJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNgorZHFiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNgorZHFiYXN0ODQ3IHRvRW5nICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RxYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5CitkcWJhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5CisKK2RxYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwCitkcWJhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMworZHFiYXN0ODUyIHRvRW5nICAwRSsyICAgICAgICAgICAgIC0+IDAuMEUrMworZHFiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2CitkcWJhc3Q4NTUgdG9FbmcgIDBFKzUgICAgICAgICAgICAgLT4gMC4wRSs2CitkcWJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZHFiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkKK2RxYmFzdDg1OCB0b0VuZyAgMEUrOCAgICAgICAgICAgICAtPiAwLjBFKzkKK2RxYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RxYmFzdDg2MCB0b0VuZyAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RxYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzdDg2MyB0b0VuZyAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzdDg2NiB0b0VuZyAgMC4wRS02ICAgICAgICAgICAtPiAwLjBFLTYKK2RxYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02CitkcWJhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZHFiYXN0ODY5IHRvRW5nICAwLjBFLTkgICAgICAgICAgIC0+IDAuMEUtOQorCitkcWJhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZHFiYXN0ODcxIHRvRW5nICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkcWJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkcWJhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXN0ODc0IHRvRW5nICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02CitkcWJhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNgorZHFiYXN0ODc3IHRvRW5nICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RxYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkKK2RxYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05CisKKy0tIGxvbmcgaW5wdXQgc3RyaW5ncworZHFiYXM4MDEgdG9zY2kgJzAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwMiB0b3NjaSAnMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDQgdG9zY2kgJzAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNSB0b3NjaSAnMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MDcgdG9zY2kgJzAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwOCB0b3NjaSAnMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2RxYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTIgdG9zY2kgJzAuMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODEzIHRvc2NpICcwLjAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTUgdG9zY2kgJzAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODE2IHRvc2NpICcwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03CitkcWJhczgxOCB0b3NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTgKK2RxYmFzODE5IHRvc2NpICcwLjAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTkKK2RxYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMAorCitkcWJhczgyMSB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszNyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODIyIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOCBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODIzIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzkgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyNCB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjMnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MCBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI1IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MSBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI2IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDIgSW5leGFjdCBSb3VuZGVkCitkcWJhczgyNyB0b3NjaSAnMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI4IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI5IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1Njc4JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDUgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworZHFiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitkcWJhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogIGNlaWxpbmcKK2RxYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICB1cAorZHFiYXM5MzIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTMzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGRvd24KK2RxYmFzOTM0IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorZHFiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTM3IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl91cAorZHFiYXM5MzggdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGhhbGZfZXZlbgorZHFiYXM5NDAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGhhbGZfZG93bgorZHFiYXM5NDIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCisKKy0tIE5vdyBjaGVjayA4NTQvNzU0ciBzb21lIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdyB0byAwCitkcWJlbTQwMCB0b1NjaSAgMS4wMDAwRS0zODMgICAgIC0+IDEuMDAwMEUtMzgzCitkcWJlbTQwMSB0b1NjaSAgMC4xRS02MTcyICAgICAgICAtPiAxRS02MTczICAgICAgIFN1Ym5vcm1hbAorZHFiZW00MDIgdG9TY2kgIDAuMTAwMEUtNjE3MiAgICAgLT4gMS4wMDBFLTYxNzMgICBTdWJub3JtYWwKK2RxYmVtNDAzIHRvU2NpICAwLjAxMDBFLTYxNzIgICAgIC0+IDEuMDBFLTYxNzQgICAgU3Vibm9ybWFsCitkcWJlbTQwNCB0b1NjaSAgMC4wMDEwRS02MTcyICAgICAtPiAxLjBFLTYxNzUgICAgIFN1Ym5vcm1hbAorZHFiZW00MDUgdG9TY2kgIDAuMDAwMUUtNjE3MiAgICAgLT4gMUUtNjE3NiAgICAgICBTdWJub3JtYWwKK2RxYmVtNDA2IHRvU2NpICAwLjAwMDEwRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWJlbTQwNyB0b1NjaSAgMC4wMDAxM0UtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MDggdG9TY2kgIDAuMDAwMTVFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDA5IHRvU2NpICAwLjAwMDE3RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxMCB0b1NjaSAgMC4wMDAyM0UtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDEyIHRvU2NpICAwLjAwMDI3RS02MTcyICAgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTYxNzIgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtNjE3MiAgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxOSB0b1NjaSAgMC4wMDAwOUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTYxNzIgICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTYxNzIgICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcWJlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS02MTcyICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTYxNzIgICAtPiAxLjFFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtNjE3MiAgIC0+IDEuMkUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTYxNzIgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtNjE3MiAgIC0+IDEuMDFFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS02MTcyICAgLT4gMS4wMkUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQxIHRvU2NpICAwLjEwMTA1RS02MTcyICAgIC0+IDEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTYxNzIgICAgLT4gMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQ0IHRvU2NpICAwLjEwMTE1RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0NSB0b1NjaSAgMC4xMDExN0UtNjE3MiAgICAtPiAxLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWJlbTQ1MCB0b1NjaSAgMS4xMDczMEUtNjE3MyAgIC0+IDEuMTA3RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtNjE3MyAgIC0+IDEuMTA5RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1ha2Ugc3VyZSBzaWduIE9LCitkcWJlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTYxNzIgICAtPiAtMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU3IHRvU2NpICAtMC4xMDEwNUUtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTggdG9TY2kgIC0wLjEwMTA3RS02MTcyICAgLT4gLTEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDYwIHRvU2NpICAtMC4xMDExNUUtNjE3MiAgIC0+IC0xLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tICc5OTlzJyBjYXNlcworZHFiZW00NjQgdG9TY2kgIDk5OTk5OUUtNjE3MyAgICAgICAgIC0+IDkuOTk5OTlFLTYxNjggU3Vibm9ybWFsCitkcWJlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtNjE3MiAgICAgICAgLT4gOS45OTk5MEUtNjE2OCBTdWJub3JtYWwKK2RxYmVtNDY2IHRvU2NpICA5OTk5OS5FLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNjggIFN1Ym5vcm1hbAorZHFiZW00NjcgdG9TY2kgIDk5OTkuOUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OSAgU3Vibm9ybWFsCitkcWJlbTQ2OCB0b1NjaSAgOTk5Ljk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcwICBTdWJub3JtYWwKK2RxYmVtNDY5IHRvU2NpICA5OS45OTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzEgIFN1Ym5vcm1hbAorZHFiZW00NzAgdG9TY2kgIDkuOTk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MiAgU3Vibm9ybWFsCitkcWJlbTQ3MSB0b1NjaSAgMC45OTk5OUUtNjE3MiAgICAgICAgLT4gMS4wMDAwRS02MTcyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTYxNzIgICAgICAgLT4gMS4wMDBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTYxNzIgICAgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtNjE3MiAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS02MTcyIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCitkcWJhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkcWJhczEwNDEgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NEUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFiYXMxMDQyIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDVFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxYmFzMTA0MyB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ2RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdCitkcWJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzYxMTEgQ2xhbXBlZAorZHFiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS02MTc2ICBDbGFtcGVkCitkcWJhczEwNzcgdG9TY2kgIC0wZSsxMDAwMCAgLT4gLTBFKzYxMTEgQ2xhbXBlZAorZHFiYXMxMDc4IHRvU2NpICAtMGUtMTAwMDAgIC0+IC0wRS02MTc2ICBDbGFtcGVkCisKKy0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcgorZHFiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzE1NzI4NjQgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMTAyIHRvU2NpIC0xRS0xNTcyODYzIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwMyB0b1NjaSAtMUUtMTU3MjkzMiAtPiAtMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkcWJhczExMDQgdG9TY2kgLTAgLT4gLTAKK2RxYmFzMTEwNSB0b1NjaSArMCAtPiAgMAorZHFiYXMxMTA2IHRvU2NpICsxRS0xNTcyOTMyIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwNyB0b1NjaSArMUUtMTU3Mjg2MyAtPiAgMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkcWJhczExMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNhbm9uaWNhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QKaW5kZXggM2RkZjZlYS4uMDA2ZGI4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QKQEAgLTEsMzcyICsxLDM3MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY1F1YWQgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IGNvcHkgb3BlcmF0aW9ucyBsZWF2ZSB1bmNhbm9uaWNhbCBvcGVyYW5kcw0KLS0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2ENCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToNCi0tLSAgIGE9MSwyLDMNCi0tLSAgIGI9Niw3LGUsZg0KLS0tICAgYz1lLGYNCi0NCi0tLSBhc3NlcnQgc29tZSBzdGFuZGFyZCAoY2Fub25pY2FsKSB2YWx1ZXM7IHRoaXMgdGVzdHMgdGhhdCBGcm9tU3RyaW5nDQotLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pDQotZHFjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMDAyIGFwcGx5IDAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxY2FuMDA1IGFwcGx5IEluZmluaXR5ICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMDA4IGFwcGx5IC1zTmFOICAgICAgICAgICAgICAgICAgLT4gI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4wMDkgYXBwbHkgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2QwDQotZHFjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmDQotDQotLS0gQmFzZSB0ZXN0cyBmb3IgY2Fub25pY2FsIGVuY29kaW5ncyAoaW5kaXZpZHVhbCBvcGVyYXRvcg0KLS0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikNCi0NCi0tLSBGaW5pdGVzOiBkZWNsZXRzIGluIGNvZWZmaWNpZW50DQotZHFjYW4wMjEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjIgY2Fub25pY2FsICAjNzdmZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjMgY2Fub25pY2FsICAjNzdmZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjQgY2Fub25pY2FsICAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjUgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjYgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjcgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjggY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMjkgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMzAgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMzEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4wMzIgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotDQotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjA2MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2MiBjYW5vbmljYWwgICM3YzAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2MyBjYW5vbmljYWwgICM3YzAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2NCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2NSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2NiBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2NyBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2OCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA2OSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA3MCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA3MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kcWNhbjA4MSBjYW5vbmljYWwgICM3ZDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4MiBjYW5vbmljYWwgICM3YzgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4MyBjYW5vbmljYWwgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4NCBjYW5vbmljYWwgICM3YzIwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4NSBjYW5vbmljYWwgICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4NiBjYW5vbmljYWwgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4NyBjYW5vbmljYWwgICM3YzA0MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4OCBjYW5vbmljYWwgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA4OSBjYW5vbmljYWwgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA5MCBjYW5vbmljYWwgICM3YzAwOGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjA5MSBjYW5vbmljYWwgICM3YzAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjEwMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwMiBjYW5vbmljYWwgICM3ZTAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwMyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwNCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwNSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwNiBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwNyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwOCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwOSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjEwMCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjExMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQotZHFjYW4xMjEgY2Fub25pY2FsICAjN2YwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjIgY2Fub25pY2FsICAjN2U4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjMgY2Fub25pY2FsICAjN2U0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjQgY2Fub25pY2FsICAjN2UyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjUgY2Fub25pY2FsICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjYgY2Fub25pY2FsICAjN2UwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjcgY2Fub25pY2FsICAjN2UwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjggY2Fub25pY2FsICAjN2UwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMjkgY2Fub25pY2FsICAjN2UwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMzAgY2Fub25pY2FsICAjN2UwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4xMzEgY2Fub25pY2FsICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuMTM3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTM4IGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTM5IGNhbm9uaWNhbCAgIzdhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQwIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQxIGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQyIGNhbm9uaWNhbCAgIzc4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQzIGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ0IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ1IGNhbm9uaWNhbCAgIzc4MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ4IGNhbm9uaWNhbCAgIzc4MDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTQ5IGNhbm9uaWNhbCAgIzc4MDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMgKGZpcnN0LCBsYXN0LCBhbmQgYSBmZXcgb3RoZXJzKQ0KLWRxY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTUxIGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU0IGNhbm9uaWNhbCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU3IGNhbm9uaWNhbCAgIzc4MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTYwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTYzIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTY5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTcwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTcxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTcyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTczIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTc5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTgwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMTgxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLQ0KLS0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8NCi0tLSBjYW5vbmljYWxpemUgcHJvcGFnYXRlZCBvcGVyYW5kcw0KLQ0KLS0tLS0tIEFkZDoNCi0tLSBGaW5pdGVzOiBuZXV0cmFsIDANCi1kcWNhbjIwMiBhZGQgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4yMDMgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAwRSs2MTQ0IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHRpbnkgemVybw0KLWRxY2FuMjA0IGFkZCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLWRxY2FuMjA1IGFkZCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLS0tIHRpbnkgbm9uIHplcm8NCi1kcWNhbjIwNiBhZGQgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCi1kcWNhbjIwNyBhZGQgICAgICAgICAgIzc3ZmZjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNmY2ZmIC0xRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRxY2FuMjExIGFkZCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW4yMTIgYWRkICAgICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kcWNhbjIxMyBhZGQgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuMjE0IGFkZCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZHFjYW4yMTUgYWRkICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjYW4yMTYgYWRkICAgICAjN2UwMDNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuMjE3IGFkZCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuMjE4IGFkZCAgICAgIzdlMGUwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCi1kcWNhbjIyMCBhZGQgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjIxIGFkZCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuMjIyIGFkZCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yMjMgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjIyNCBhZGQgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yMjYgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjIyNyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdDQotDQotLS0tLS0gQ29tcGFyZToNCi1kcWNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMjMzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWNhbjIzNCBjb21wYXJlICAjN2MwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjIzNSBjb21wYXJlICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLS0tLSBDb21wYXJlU2lnOg0KLWRxY2FuMjQxIGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcWNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxY2FuMjQ0IGNvbXBhcmVzaWcgICM3YzQwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTA1MGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZHFjYW4yNTAgY29weSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KLWRxY2FuMjUxIGNvcHkgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCi0tLSBOYU5zDQotZHFjYW4yNTIgY29weSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjUzIGNvcHkgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZHFjYW4yNTQgY29weSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjU1IGNvcHkgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kcWNhbjI1OCBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yNTkgY29weSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KLQ0KLS0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZHFjYW4yNjAgY29weWFicyAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KLWRxY2FuMjYxIGNvcHlhYnMgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCi0tLSBOYU5zDQotZHFjYW4yNjIgY29weWFicyAgI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjYzIGNvcHlhYnMgICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZHFjYW4yNjQgY29weWFicyAgI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjY1IGNvcHlhYnMgICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kcWNhbjI2OCBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yNjkgY29weWFicyAgI2Y4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDcwMDcwMDcwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCi0tLSBmaW5pdGVzDQotZHFjYW4yNzAgY29weW5lZ2F0ZSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KLWRxY2FuMjcxIGNvcHluZWdhdGUgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCi0tLSBOYU5zDQotZHFjYW4yNzIgY29weW5lZ2F0ZSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZg0KLWRxY2FuMjczIGNvcHluZWdhdGUgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBzTmFODQotZHFjYW4yNzQgY29weW5lZ2F0ZSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjc1IGNvcHluZWdhdGUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0tLSBJbmYNCi1kcWNhbjI3OCBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICNmODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KLQ0KLS0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQotLS0gZmluaXRlcw0KLWRxY2FuMjgwIGNvcHlzaWduICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLTEgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmDQotZHFjYW4yODEgY29weXNpZ24gICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAgMSAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCi0tLSBOYU5zDQotZHFjYW4yODIgY29weXNpZ24gICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtMSAtPiAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYNCi1kcWNhbjI4MyBjb3B5c2lnbiAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIHNOYU4NCi1kcWNhbjI4NCBjb3B5c2lnbiAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KLWRxY2FuMjg1IGNvcHlzaWduICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gSW5mDQotZHFjYW4yODggY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjI4OSBjb3B5c2lnbiAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwICAxIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KLQ0KLS0tLS0tIE11bHRpcGx5Og0KLS0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KLWRxY2FuMzAyIG11bHRpcGx5ICAxICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMwMyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotLS0gbmVnYXRpdmUNCi1kcWNhbjMwNiBtdWx0aXBseSAtMSAgIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMDcgbXVsdGlwbHkgICAgICM3N2ZjZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAtMSAgICAgICAgICAgIC0+ICNmN2ZjY2ZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZHFjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kcWNhbjMxMyBtdWx0aXBseSAgMSAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMTQgbXVsdGlwbHkgICAgICM3YzQwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KLS0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KLWRxY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAwZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuMzIwIG11bHRpcGx5ICAxICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMyMSBtdWx0aXBseSAgICAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMjQgbXVsdGlwbHkgIDEgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW4zMjcgbXVsdGlwbHkgICAgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIFF1YW50aXplOg0KLWRxY2FuNDAxIHF1YW50aXplICAjZWUwODBmZjNmY2ZmM2ZjZmYzZmZmZmZmZmZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjQwMiBxdWFudGl6ZSAgI2VlMDgwZmYzZmZmZmZmZmZmZmZjZmYzZmNmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW40MDMgcXVhbnRpemUgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNDA0IHF1YW50aXplICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjQxMCBxdWFudGl6ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW40MTEgcXVhbnRpemUgICNmYzAwMGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRxY2FuNDEyIHF1YW50aXplICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNhbjQxMyBxdWFudGl6ZSAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0tLS0gU3VidHJhY3Q6DQotLS0gRmluaXRlczogbmV1dHJhbCAwDQotZHFjYW41MDIgc3VidHJhY3QgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW41MDMgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gdGlueSB6ZXJvDQotZHFjYW41MDQgc3VidHJhY3QgIDBFLTYxNzYgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCi1kcWNhbjUwNSBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KLS0tIHRpbnkgbm9uIHplcm8NCi1kcWNhbjUwNiBzdWJ0cmFjdCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KLWRxY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCi1kcWNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW41MTIgc3VidHJhY3QgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KLWRxY2FuNTEzIHN1YnRyYWN0ICAwICAjN2M0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kcWNhbjUxNCBzdWJ0cmFjdCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQotZHFjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCi1kcWNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuNTE4IHN1YnRyYWN0ICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuNTIwIHN1YnRyYWN0ICAwICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KLWRxY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjUyMyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWNhbjUyNiBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tLS0tIFRvSW50ZWdyYWw6DQotZHFjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTA4MGZmM2ZkZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW42MDIgdG9pbnRlZ3JhbHggICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW42MDMgdG9pbnRlZ3JhbHggICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFjYW42MTQgdG9pbnRlZ3JhbHggICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW42MTUgdG9pbnRlZ3JhbHggICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZHFjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY2FuNjE3IHRvaW50ZWdyYWx4ICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmRmZjNmY2ZmM2ZjZmYgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSB1bmNhbm9uaWNhbCAzOTk5LCAzOS45OSwgMy45OSwgMC4zOTksICAgICAgICAgICAgICAgICAgYW5kIG5lZ2F0aXZlcw0KLWRxY2FuNjE4IHRvaW50ZWdyYWx4ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZg0KLWRxY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkDQotZHFjYW42MjAgdG9pbnRlZ3JhbHggICMyMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWNhbjYyMSB0b2ludGVncmFseCAgIzIyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWRxY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZg0KLWRxY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkDQotZHFjYW42MjQgdG9pbnRlZ3JhbHggICNhMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWNhbjYyNSB0b2ludGVncmFseCAgI2EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY1F1YWQgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgdGhhdCBjb3B5IG9wZXJhdGlvbnMgbGVhdmUgdW5jYW5vbmljYWwgb3BlcmFuZHMKKy0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2EKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFVuY2Fub25pY2FsIGRlY2xldHMgYXJlOiBhYmMsIHdoZXJlOgorLS0gICBhPTEsMiwzCistLSAgIGI9Niw3LGUsZgorLS0gICBjPWUsZgorCistLSBhc3NlcnQgc29tZSBzdGFuZGFyZCAoY2Fub25pY2FsKSB2YWx1ZXM7IHRoaXMgdGVzdHMgdGhhdCBGcm9tU3RyaW5nCistLSBwcm9kdWNlcyBjYW5vbmljYWwgcmVzdWx0cyAobWFueSBtb3JlIGluIGRlY2ltYWxOTikKK2RxY2FuMDAxIGFwcGx5IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDAyIGFwcGx5IDAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMDA1IGFwcGx5IEluZmluaXR5ICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA4IGFwcGx5IC1zTmFOICAgICAgICAgICAgICAgICAgLT4gI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwOSBhcHBseSAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDEwIGFwcGx5IHNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZDAKK2RxY2FuMDEzIGFwcGx5IDkuOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZgorCistLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yCistLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpCisKKy0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQKK2RxY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjIgY2Fub25pY2FsICAjNzdmZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyMyBjYW5vbmljYWwgICM3N2ZmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjUgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyNiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjggY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyOSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDMwIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMzEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAzMiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMDYxIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjIgY2Fub25pY2FsICAjN2MwMDBmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2MyBjYW5vbmljYWwgICM3YzAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY0IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjUgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2NiBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY3IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjggY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2OSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDcwIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNzEgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMDgxIGNhbm9uaWNhbCAgIzdkMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODIgY2Fub25pY2FsICAjN2M4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4MyBjYW5vbmljYWwgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg0IGNhbm9uaWNhbCAgIzdjMjAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODUgY2Fub25pY2FsICAjN2MxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4NiBjYW5vbmljYWwgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg3IGNhbm9uaWNhbCAgIzdjMDQwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODggY2Fub25pY2FsICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4OSBjYW5vbmljYWwgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDkwIGNhbm9uaWNhbCAgIzdjMDA4ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wOTEgY2Fub25pY2FsICAjN2MwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4xMDEgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwMiBjYW5vbmljYWwgICM3ZTAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTAzIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDQgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA2IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDcgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwOCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA5IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDAgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjExMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMTIxIGNhbm9uaWNhbCAgIzdmMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjIgY2Fub25pY2FsICAjN2U4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyMyBjYW5vbmljYWwgICM3ZTQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI0IGNhbm9uaWNhbCAgIzdlMjAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjUgY2Fub25pY2FsICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyNiBjYW5vbmljYWwgICM3ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI3IGNhbm9uaWNhbCAgIzdlMDQwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjggY2Fub25pY2FsICAjN2UwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyOSBjYW5vbmljYWwgICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTMwIGNhbm9uaWNhbCAgIzdlMDA4ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMzEgY2Fub25pY2FsICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMTM3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xMzggY2Fub25pY2FsICAjNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjEzOSBjYW5vbmljYWwgICM3YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQwIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDEgY2Fub25pY2FsICAjNzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0MiBjYW5vbmljYWwgICM3ODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQzIGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDQgY2Fub25pY2FsICAjNzgwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NSBjYW5vbmljYWwgICM3ODA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDcgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0OCBjYW5vbmljYWwgICM3ODAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ5IGNhbm9uaWNhbCAgIzc4MDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzIChmaXJzdCwgbGFzdCwgYW5kIGEgZmV3IG90aGVycykKK2RxY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NSBjYW5vbmljYWwgICM3ODAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1OCBjYW5vbmljYWwgICM3ODAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjYgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjkgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTcxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3NiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3OSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTgwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xODEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKworLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bworLS0gY2Fub25pY2FsaXplIHByb3BhZ2F0ZWQgb3BlcmFuZHMKKworLS0tLS0gQWRkOgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkcWNhbjIwMiBhZGQgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIwMyBhZGQgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RxY2FuMjA0IGFkZCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZHFjYW4yMDUgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAwRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCistLSB0aW55IG5vbiB6ZXJvCitkcWNhbjIwNiBhZGQgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuMjA3IGFkZCAgICAgICAgICAjNzdmZmNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM2ZjZmYgLTFFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMjExIGFkZCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIxMiBhZGQgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjIxMyBhZGQgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4yMTQgYWRkICAgICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4yMTUgYWRkICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjIxNiBhZGQgICAgICM3ZTAwM2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMjE3IGFkZCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4yMTggYWRkICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjIyMCBhZGQgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjEgYWRkICAgICAjNzg2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMjIyIGFkZCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyMyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjQgYWRkICAwICAjNzgwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNiBhZGQgIDAgICM3ODAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjcgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0KKworLS0tLS0gQ29tcGFyZToKK2RxY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjMzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjM0IGNvbXBhcmUgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZiAgICAgLTEwMDAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4yMzUgY29tcGFyZSAgIzdlMDA0ZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAgICAtMTAwMCAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvbXBhcmVTaWc6CitkcWNhbjI0MSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI0MyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjI0NCBjb21wYXJlc2lnICAjN2M0MDBmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtMTAwMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTA1MGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBDb3B5OiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI1MCBjb3B5ICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCitkcWNhbjI1MSBjb3B5ICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgLT4gI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI1MiBjb3B5ICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI1MyBjb3B5ICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkcWNhbjI1NCBjb3B5ICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI1NSBjb3B5ICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjU4IGNvcHkgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjU5IGNvcHkgICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAKKworLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yNjAgY29weWFicyAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yNjEgY29weWFicyAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgorLS0gTmFOcworZHFjYW4yNjIgY29weWFicyAgI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNjMgY29weWFicyAgI2ZjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yNjQgY29weWFicyAgI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNjUgY29weWFicyAgI2ZlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI2OCBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI2OSBjb3B5YWJzICAjZjgwMDAwMDAwMDAwMDA3MDA3MDA3MDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RxY2FuMjcwIGNvcHluZWdhdGUgICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtPiAjZWUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjcxIGNvcHluZWdhdGUgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjcyIGNvcHluZWdhdGUgICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZiAtPiAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZjNmY2ZmM2ZjZmYKK2RxY2FuMjczIGNvcHluZWdhdGUgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjc0IGNvcHluZWdhdGUgICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjc1IGNvcHluZWdhdGUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZHFjYW4yNzggY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICNmODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBDb3B5U2lnbjogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yODAgY29weXNpZ24gICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtMSAtPiAjZWUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjgxIGNvcHlzaWduICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgIDEgLT4gIzZlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI4MiBjb3B5c2lnbiAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yODMgY29weXNpZ24gICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjg0IGNvcHlzaWduICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLTEgLT4gI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI4NSBjb3B5c2lnbiAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI4OCBjb3B5c2lnbiAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0xIC0+ICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yODkgY29weXNpZ24gICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMCAgMSAtPiAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAKKworLS0tLS0gTXVsdGlwbHk6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuMzAyIG11bHRpcGx5ICAxICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzAzIG11bHRpcGx5ICAgICAjNzdmY2ZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzdmY2NmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIG5lZ2F0aXZlCitkcWNhbjMwNiBtdWx0aXBseSAtMSAgIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMwNyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIC0xICAgICAgICAgICAgLT4gI2Y3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjMxMyBtdWx0aXBseSAgMSAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMzE2IG11bHRpcGx5ICAgICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMzIwIG11bHRpcGx5ICAxICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI0IG11bHRpcGx5ICAxICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI3IG11bHRpcGx5ICAgICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0tLS0gUXVhbnRpemU6CitkcWNhbjQwMSBxdWFudGl6ZSAgI2VlMDgwZmYzZmNmZjNmY2ZmM2ZmZmZmZmZmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQwMiBxdWFudGl6ZSAgI2VlMDgwZmYzZmZmZmZmZmZmZmZjZmYzZmNmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZiAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjQwNCBxdWFudGl6ZSAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjQxMCBxdWFudGl6ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQxMSBxdWFudGl6ZSAgI2ZjMDAwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQxMiBxdWFudGl6ZSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjQxMyBxdWFudGl6ZSAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIFN1YnRyYWN0OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkcWNhbjUwMiBzdWJ0cmFjdCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAwRSs2MTQ0IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gdGlueSB6ZXJvCitkcWNhbjUwNCBzdWJ0cmFjdCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZHFjYW41MDUgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIDBFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RxY2FuNTA2IHN1YnRyYWN0IC0xRS02MTc2ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZiAgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCitkcWNhbjUwNyBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM2ZjZmYgLTFFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNTEyIHN1YnRyYWN0ICAgICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MTQgc3VidHJhY3QgICAgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjUxNSBzdWJ0cmFjdCAgMCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW41MTYgc3VidHJhY3QgICAgICM3ZTAwM2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuNTE3IHN1YnRyYWN0ICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjUxOCBzdWJ0cmFjdCAgICAgIzdlMGUwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW41MjAgc3VidHJhY3QgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjEgc3VidHJhY3QgICAgICM3ODY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW41MjIgc3VidHJhY3QgIDAgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjMgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDBmMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjYgc3VidHJhY3QgIDAgICM3ODAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBUb0ludGVncmFsOgorZHFjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTA4MGZmM2ZkZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjYwMiB0b2ludGVncmFseCAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjAzIHRvaW50ZWdyYWx4ICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjYxNCB0b2ludGVncmFseCAgIzdjMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjE1IHRvaW50ZWdyYWx4ICAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW42MTcgdG9pbnRlZ3JhbHggICNmZTAwMGZmM2ZjZmYzZmNmZjNmZGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gdW5jYW5vbmljYWwgMzk5OSwgMzkuOTksIDMuOTksIDAuMzk5LCAgICAgICAgICAgICAgICAgIGFuZCBuZWdhdGl2ZXMKK2RxY2FuNjE4IHRvaW50ZWdyYWx4ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZgorZHFjYW42MTkgdG9pbnRlZ3JhbHggICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjIwIHRvaW50ZWdyYWx4ICAjMjIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyMSB0b2ludGVncmFseCAgIzIyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjIgdG9pbnRlZ3JhbHggICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmCitkcWNhbjYyMyB0b2ludGVncmFseCAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjQgdG9pbnRlZ3JhbHggICNhMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2xhc3MuZGVjVGVzdAppbmRleCBmMzQxOTMzLi5kN2UxOWIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QKQEAgLTEsNzcgKzEsNzcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ2xhc3MuZGVjVGVzdCAtLSBkZWNRdWFkIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBbTmV3IDIwMDYuMTEuMjddDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRxY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCi1kcWNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQotZHFjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KLWRxY2xhMDA0ICBjbGFzcyAgICAxRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWRxY2xhMDA1ICBjbGFzcyAgMC4xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KLWRxY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgICAgLT4gK1N1Ym5vcm1hbA0KLWRxY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDA4ICBjbGFzcyAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE3ICBjbGFzcyAgIDFFKzYxNDQgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gK05vcm1hbA0KLWRxY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQotDQotZHFjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KLWRxY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCi1kcWNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQotZHFjbGEwMjQgIGNsYXNzICAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotZHFjbGEwMjUgIGNsYXNzICAtMC4xRS02MTQzICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQotZHFjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgICAtPiAtU3Vibm9ybWFsDQotZHFjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAtPiAtTm9ybWFsDQotZHFjbGEwMjggIGNsYXNzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwMzcgIGNsYXNzICAtMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQotZHFjbGEwNjE0ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gLU5vcm1hbA0KLWRxY2xhMDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotDQotZHFjbGEwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4NCi1kcWNsYTA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KLWRxY2xhMDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFODQotZHFjbGEwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQotZHFjbGEwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQotZHFjbGEwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFODQotDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNsYXNzLmRlY1Rlc3QgLS0gZGVjUXVhZCBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFtOZXcgMjAwNi4xMS4yN10KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZHFjbGEwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZHFjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZHFjbGEwMDQgIGNsYXNzICAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitkcWNsYTAwNSAgY2xhc3MgIDAuMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RxY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgICAgLT4gK1N1Ym5vcm1hbAorZHFjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtPiArTm9ybWFsCitkcWNsYTAwOCAgY2xhc3MgICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTcgIGNsYXNzICAgMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5CisKK2RxY2xhMDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RxY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RxY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RxY2xhMDI0ICBjbGFzcyAgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorZHFjbGEwMjUgIGNsYXNzICAtMC4xRS02MTQzICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkcWNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgIC0+IC1TdWJub3JtYWwKK2RxY2xhMDI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgLT4gLU5vcm1hbAorZHFjbGEwMjggIGNsYXNzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM3ICBjbGFzcyAgLTFFKzYxNDQgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwNjE0ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gLU5vcm1hbAorZHFjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworZHFjbGEwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RxY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitkcWNsYTA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorZHFjbGEwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitkcWNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RxY2xhMDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0CmluZGV4IGE2MTdhZDEuLmI3YjVlZTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QKQEAgLTEsNzUzICsxLDc1MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb21wYXJlLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KLS0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxY29tMDAxIGNvbXBhcmUgIC0yICAtMiAgLT4gMA0KLWRxY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTENCi1kcWNvbTAwMyBjb21wYXJlICAtMiAgIDAgIC0+IC0xDQotZHFjb20wMDQgY29tcGFyZSAgLTIgICAxICAtPiAtMQ0KLWRxY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTENCi1kcWNvbTAwNiBjb21wYXJlICAtMSAgLTIgIC0+IDENCi1kcWNvbTAwNyBjb21wYXJlICAtMSAgLTEgIC0+IDANCi1kcWNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xDQotZHFjb20wMDkgY29tcGFyZSAgLTEgICAxICAtPiAtMQ0KLWRxY29tMDEwIGNvbXBhcmUgIC0xICAgMiAgLT4gLTENCi1kcWNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDENCi1kcWNvbTAxMiBjb21wYXJlICAgMCAgLTEgIC0+IDENCi1kcWNvbTAxMyBjb21wYXJlICAgMCAgIDAgIC0+IDANCi1kcWNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xDQotZHFjb20wMTUgY29tcGFyZSAgIDAgICAyICAtPiAtMQ0KLWRxY29tMDE2IGNvbXBhcmUgICAxICAtMiAgLT4gMQ0KLWRxY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQ0KLWRxY29tMDE4IGNvbXBhcmUgICAxICAgMCAgLT4gMQ0KLWRxY29tMDE5IGNvbXBhcmUgICAxICAgMSAgLT4gMA0KLWRxY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTENCi1kcWNvbTAyMSBjb21wYXJlICAgMiAgLTIgIC0+IDENCi1kcWNvbTAyMiBjb21wYXJlICAgMiAgLTEgIC0+IDENCi1kcWNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDENCi1kcWNvbTAyNSBjb21wYXJlICAgMiAgIDEgIC0+IDENCi1kcWNvbTAyNiBjb21wYXJlICAgMiAgIDIgIC0+IDANCi0NCi1kcWNvbTAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMA0KLWRxY29tMDMyIGNvbXBhcmUgIC0yMCAgLTEwICAtPiAtMQ0KLWRxY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQ0KLWRxY29tMDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQ0KLWRxY29tMDM1IGNvbXBhcmUgIC0yMCAgIDIwICAtPiAtMQ0KLWRxY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxDQotZHFjb20wMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDANCi1kcWNvbTAzOCBjb21wYXJlICAtMTAgICAwMCAgLT4gLTENCi1kcWNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTENCi1kcWNvbTA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTENCi1kcWNvbTA0MSBjb21wYXJlICAgMDAgIC0yMCAgLT4gMQ0KLWRxY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxDQotZHFjb20wNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDANCi1kcWNvbTA0NCBjb21wYXJlICAgMDAgICAxMCAgLT4gLTENCi1kcWNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTENCi1kcWNvbTA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQ0KLWRxY29tMDQ3IGNvbXBhcmUgICAxMCAgLTEwICAtPiAxDQotZHFjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDENCi1kcWNvbTA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMA0KLWRxY29tMDUwIGNvbXBhcmUgICAxMCAgIDIwICAtPiAtMQ0KLWRxY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxDQotZHFjb20wNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDENCi1kcWNvbTA1MyBjb21wYXJlICAgMjAgICAwMCAgLT4gMQ0KLWRxY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxDQotZHFjb20wNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDANCi0NCi1kcWNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwDQotZHFjb20wNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTENCi1kcWNvbTA2MyBjb21wYXJlICAtMi4wICAgMC4wICAtPiAtMQ0KLWRxY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xDQotZHFjb20wNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTENCi1kcWNvbTA2NiBjb21wYXJlICAtMS4wICAtMi4wICAtPiAxDQotZHFjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMA0KLWRxY29tMDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xDQotZHFjb20wNjkgY29tcGFyZSAgLTEuMCAgIDEuMCAgLT4gLTENCi1kcWNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQ0KLWRxY29tMDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDENCi1kcWNvbTA3MiBjb21wYXJlICAgMC4wICAtMS4wICAtPiAxDQotZHFjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMA0KLWRxY29tMDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xDQotZHFjb20wNzUgY29tcGFyZSAgIDAuMCAgIDIuMCAgLT4gLTENCi1kcWNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxDQotZHFjb20wNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQ0KLWRxY29tMDc4IGNvbXBhcmUgICAxLjAgICAwLjAgIC0+IDENCi1kcWNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwDQotZHFjb20wODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTENCi1kcWNvbTA4MSBjb21wYXJlICAgMi4wICAtMi4wICAtPiAxDQotZHFjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQ0KLWRxY29tMDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDENCi1kcWNvbTA4NSBjb21wYXJlICAgMi4wICAgMS4wICAtPiAxDQotZHFjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRxY29tMDkwIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwDQotZHFjb20wOTEgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xDQotZHFjb20wOTIgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi1kcWNvbTA5MyBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLWRxY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDANCi1kcWNvbTEwMSBjb21wYXJlICAgNy4wICAgIDcgICAgICAtPiAwDQotZHFjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMA0KLWRxY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDANCi1kcWNvbTEwNCBjb21wYXJlICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZHFjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMA0KLWRxY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDANCi1kcWNvbTEwNyBjb21wYXJlICAgNy4wICAgIDdFKzAgICAtPiAwDQotZHFjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMA0KLWRxY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDANCi1kcWNvbTExMCBjb21wYXJlICAgNyAgICAgIDcwRS0xICAtPiAwDQotDQotZHFjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQ0KLWRxY29tMTIxIGNvbXBhcmUgICA4LjAgICAgNyAgICAgIC0+IDENCi1kcWNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxDQotZHFjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQ0KLWRxY29tMTI0IGNvbXBhcmUgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kcWNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxDQotZHFjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQ0KLWRxY29tMTI3IGNvbXBhcmUgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kcWNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxDQotZHFjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDENCi1kcWNvbTEzMCBjb21wYXJlICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZHFjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTENCi1kcWNvbTE0MSBjb21wYXJlICAgOC4wICAgIDkgICAgICAtPiAtMQ0KLWRxY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZHFjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTENCi1kcWNvbTE0NCBjb21wYXJlICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KLWRxY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZHFjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTENCi1kcWNvbTE0NyBjb21wYXJlICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KLWRxY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZHFjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTENCi1kcWNvbTE1MCBjb21wYXJlICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCi1kcWNvbTIwMCBjb21wYXJlICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xDQotZHFjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTENCi1kcWNvbTIwMyBjb21wYXJlICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xDQotZHFjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTENCi1kcWNvbTIwNiBjb21wYXJlICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRxY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xDQotZHFjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTENCi1kcWNvbTIwOSBjb21wYXJlICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRxY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xDQotDQotZHFjb20yMjAgY29tcGFyZSAgLTguMCAgICA3LjAgICAgLT4gLTENCi1kcWNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRxY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xDQotZHFjb20yMjMgY29tcGFyZSAgLThFKzAgICA3LjAgICAgLT4gLTENCi1kcWNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRxY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQotZHFjb20yMjYgY29tcGFyZSAgLTgwRS0xICA3ICAgICAgLT4gLTENCi1kcWNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xDQotZHFjb20yMjkgY29tcGFyZSAgLTggICAgICAwLjdFKzEgLT4gLTENCi1kcWNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRxY29tMjQwIGNvbXBhcmUgIC04LjAgICAgOS4wICAgIC0+IC0xDQotZHFjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTENCi1kcWNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRxY29tMjQzIGNvbXBhcmUgIC04RSswICAgOS4wICAgIC0+IC0xDQotZHFjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTENCi1kcWNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRxY29tMjQ2IGNvbXBhcmUgIC04MEUtMSAgOSAgICAgIC0+IC0xDQotZHFjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTENCi1kcWNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRxY29tMjQ5IGNvbXBhcmUgIC04ICAgICAgMC45RSsxIC0+IC0xDQotZHFjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQotZHFjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kcWNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQ0KLWRxY29tMzAyIGNvbXBhcmUgICA3ICAgICAgLTcuMCAgICAtPiAxDQotZHFjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kcWNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KLWRxY29tMzA1IGNvbXBhcmUgICAuN0UrMSAgLTcgICAgICAtPiAxDQotZHFjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kcWNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQ0KLWRxY29tMzA4IGNvbXBhcmUgICA3LjAgICAgLTcwRS0xICAtPiAxDQotZHFjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kcWNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KLQ0KLWRxY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxDQotZHFjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kcWNvbTMyMiBjb21wYXJlICAgOCAgICAgIC03LjAgICAgLT4gMQ0KLWRxY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxDQotZHFjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kcWNvbTMyNSBjb21wYXJlICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KLWRxY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxDQotZHFjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kcWNvbTMyOCBjb21wYXJlICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KLWRxY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxDQotZHFjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kcWNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQ0KLWRxY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxDQotZHFjb20zNDIgY29tcGFyZSAgIDggICAgICAtOS4wICAgIC0+IDENCi1kcWNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRxY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjb20zNDUgY29tcGFyZSAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kcWNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQ0KLWRxY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxDQotZHFjb20zNDggY29tcGFyZSAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kcWNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRxY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KLWRxY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRxY29tNDAxIGNvbXBhcmUgICAtNy4wICAgIC03ICAgICAgLT4gMA0KLWRxY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMA0KLWRxY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMA0KLWRxY29tNDA0IGNvbXBhcmUgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KLWRxY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRxY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMA0KLWRxY29tNDA3IGNvbXBhcmUgICAtNy4wICAgIC03RSswICAgLT4gMA0KLWRxY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRxY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KLWRxY29tNDEwIGNvbXBhcmUgICAtNyAgICAgIC03MEUtMSAgLT4gMA0KLQ0KLWRxY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTENCi1kcWNvbTQyMSBjb21wYXJlICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZHFjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KLWRxY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCi1kcWNvbTQyNCBjb21wYXJlICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZHFjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KLWRxY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTENCi1kcWNvbTQyNyBjb21wYXJlICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZHFjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KLWRxY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCi1kcWNvbTQzMCBjb21wYXJlICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZHFjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxDQotZHFjb200NDEgY29tcGFyZSAgIC04LjAgICAgLTkgICAgICAtPiAxDQotZHFjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZHFjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxDQotZHFjb200NDQgY29tcGFyZSAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQotZHFjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZHFjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxDQotZHFjb200NDcgY29tcGFyZSAgIC04LjAgICAgLTlFKzAgICAtPiAxDQotZHFjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZHFjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxDQotZHFjb200NTAgY29tcGFyZSAgIC04ICAgICAgLTkwRS0xICAtPiAxDQotDQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQotZHFjb200NTEgY29tcGFyZSAgICAgIDEuMCAgICAgICAwLjEgIC0+IDENCi1kcWNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTENCi1kcWNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQ0KLWRxY29tNDU0IGNvbXBhcmUgICAgICAwLjEgICAgICAxMC4wICAtPiAtMQ0KLWRxY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxDQotZHFjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xDQotZHFjb200NTcgY29tcGFyZSAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDENCi1kcWNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTENCi1kcWNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQ0KLWRxY29tNDYwIGNvbXBhcmUgICAgMTAwLjAgICAgIDEwMDAwICAtPiAtMQ0KLWRxY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxDQotZHFjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xDQotZHFjb200NjMgY29tcGFyZSAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDENCi1kcWNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTENCi0NCi0tLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCi1kcWNvbTQ3MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjb200NzQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotZHFjb200NzUgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ3NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotZHFjb200NzcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjb200NzggY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNvbTQ3OSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjb200ODAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotZHFjb200ODEgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNvbTQ4MiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotZHFjb200ODMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQotZHFjb200ODcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUrODkgLT4gMA0KLWRxY29tNDg4IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUtODkgLT4gMA0KLWRxY29tNDg5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRSs4OSAtPiAwDQotZHFjb200OTAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUtODkgLT4gMA0KLWRxY29tNDkxIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUrODkgLT4gMA0KLWRxY29tNDkyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRS04OSAtPiAwDQotZHFjb200OTMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUrODkgLT4gMA0KLWRxY29tNDk0IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUtODkgLT4gMA0KLWRxY29tNDk1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRSs4OSAtPiAwDQotZHFjb200OTYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUtODkgLT4gMA0KLWRxY29tNDk3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLQ0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCi1kcWNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDENCi1kcWNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCi1kcWNvbTUwMiBjb21wYXJlICAgIDEgICAgIDFFLTEzICAgIC0+IDENCi1kcWNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDENCi1kcWNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDENCi1kcWNvbTUwNSBjb21wYXJlICAgIDEgICAgIDFFLTEwICAgIC0+IDENCi1kcWNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDENCi1kcWNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDENCi1kcWNvbTUwOCBjb21wYXJlICAgIDEgICAgIDFFLTcgICAgIC0+IDENCi1kcWNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDENCi1kcWNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDENCi1kcWNvbTUxMSBjb21wYXJlICAgIDEgICAgIDFFLTQgICAgIC0+IDENCi1kcWNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDENCi1kcWNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDENCi1kcWNvbTUxNCBjb21wYXJlICAgIDEgICAgIDFFLTEgICAgIC0+IDENCi1kcWNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDANCi1kcWNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQotZHFjb201MTcgY29tcGFyZSAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KLWRxY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTENCi1kcWNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQotZHFjb201MjEgY29tcGFyZSAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KLWRxY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTENCi1kcWNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQotZHFjb201MjQgY29tcGFyZSAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KLWRxY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTENCi1kcWNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQotZHFjb201MjcgY29tcGFyZSAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KLWRxY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTENCi1kcWNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQotZHFjb201MzAgY29tcGFyZSAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KLWRxY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTENCi0tLSBMUiBzd2FwDQotZHFjb201NDAgY29tcGFyZSAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xDQotZHFjb201NDMgY29tcGFyZSAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xDQotZHFjb201NDYgY29tcGFyZSAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xDQotZHFjb201NDkgY29tcGFyZSAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xDQotZHFjb201NTIgY29tcGFyZSAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KLWRxY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCi1kcWNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xDQotZHFjb201NTUgY29tcGFyZSAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KLWRxY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxDQotZHFjb201NTggY29tcGFyZSAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxDQotZHFjb201NjIgY29tcGFyZSAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxDQotZHFjb201NjUgY29tcGFyZSAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCi1kcWNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxDQotZHFjb201NjggY29tcGFyZSAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KLWRxY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCi1kcWNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxDQotZHFjb201NzEgY29tcGFyZSAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRxY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxDQotZHFjb201ODEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCi1kcWNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRxY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxDQotZHFjb201ODQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCi1kcWNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRxY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxDQotZHFjb201ODcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCi1kcWNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRxY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQ0KLWRxY29tNTkwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KLWRxY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KLWRxY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQ0KLWRxY29tNTkzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KLWRxY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KLWRxY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQ0KLWRxY29tNTk2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KLWRxY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KLWRxY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQ0KLWRxY29tNTk5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KLQ0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQotZHFjb202MDAgY29tcGFyZSAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCi1kcWNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQotZHFjb202MDkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQ0KLWRxY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCi1kcWNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQotZHFjb202MTIgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQ0KLWRxY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCi1kcWNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQotZHFjb202MTUgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQ0KLWRxY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCi1kcWNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQotZHFjb202MTggY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQ0KLWRxY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCi1kcWNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjEgY29tcGFyZSAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjQgY29tcGFyZSAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MjcgY29tcGFyZSAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCi1kcWNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQotZHFjb202MzAgY29tcGFyZSAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQ0KLWRxY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCi1kcWNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQotZHFjb202MzMgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQ0KLWRxY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCi1kcWNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQotZHFjb202MzYgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQ0KLWRxY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCi1kcWNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQotZHFjb202MzkgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFjb202NDAgY29tcGFyZSAgIDAgICAgIDAgICAtPiAwDQotZHFjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwDQotZHFjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwDQotZHFjb202NDMgY29tcGFyZSAgIDAgICAgIDAuMCAtPiAwDQotZHFjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwDQotZHFjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwDQotZHFjb202NDYgY29tcGFyZSAgLTAgICAgLTAuMCAtPiAwDQotZHFjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwDQotZHFjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwDQotZHFjb202NDkgY29tcGFyZSAgIDAuMCAgLTAgICAtPiAwDQotZHFjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwDQotZHFjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwDQotZHFjb202NTIgY29tcGFyZSAgLTAuMCAgIDAgICAtPiAwDQotZHFjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwDQotZHFjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwDQotZHFjb202NTUgY29tcGFyZSAgLTAuMCAgIDAuMCAtPiAwDQotDQotZHFjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwDQotZHFjb202NTcgY29tcGFyZSAgLTBFMiAgIDAuMCAtPiAwDQotZHFjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwDQotZHFjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwDQotZHFjb202NjAgY29tcGFyZSAgLTBFMSAgIDAgICAtPiAwDQotZHFjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwDQotZHFjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwDQotZHFjb202NjMgY29tcGFyZSAgIDBFMiAgIDAgICAtPiAwDQotZHFjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwDQotZHFjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwDQotZHFjb202NjYgY29tcGFyZSAgIDBFMSAgLTBFMSAtPiAwDQotZHFjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwDQotZHFjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwDQotZHFjb202NjkgY29tcGFyZSAgLTBFMiAgLTBFMiAtPiAwDQotZHFjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwDQotZHFjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwDQotZHFjb202NzIgY29tcGFyZSAgLTBFMSAgIDBFMSAtPiAwDQotZHFjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwDQotZHFjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwDQotZHFjb202NzUgY29tcGFyZSAgIDBFMiAgIDBFMSAtPiAwDQotZHFjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwDQotZHFjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwDQotZHFjb202NzggY29tcGFyZSAgIDBFMSAgIDBFMiAtPiAwDQotZHFjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLWRxY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KLWRxY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMA0KLWRxY29tNjgyIGNvbXBhcmUgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMA0KLWRxY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMA0KLWRxY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMA0KLWRxY29tNjg1IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMA0KLWRxY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMA0KLWRxY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMA0KLWRxY29tNjg4IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMA0KLWRxY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMA0KLWRxY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KLWRxY29tNjkxIGNvbXBhcmUgICAxMi4wICAgICAgICAgICAgMTIgLT4gMA0KLWRxY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMA0KLWRxY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMA0KLWRxY29tNjk0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMA0KLWRxY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMA0KLWRxY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMA0KLWRxY29tNjk3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMA0KLWRxY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMA0KLWRxY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMA0KLQ0KLS0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdA0KLWRxY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTUgLT4gMQ0KLWRxY29tNzAxIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KLWRxY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTcgLT4gLTENCi1kcWNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAwMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDENCi1kcWNvbTcwNCBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCi1kcWNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAyMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xDQotZHFjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTAzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxDQotZHFjb203MDcgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQotZHFjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQ0KLQ0KLS0tIG1pc2NlbGxhbmVvdXMNCi1kcWNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQ0KLWRxY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQ0KLWRxY29tNzIzIGNvbXBhcmUgMTIzNDU2NzgwMCAgMSAtPiAxDQotZHFjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xDQotZHFjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDENCi1kcWNvbTcyNiBjb21wYXJlIDEgMTIzNDU2Nzg5MCAgLT4gLTENCi1kcWNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQ0KLWRxY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQ0KLWRxY29tNzI5IGNvbXBhcmUgMTIzNDU2Nzg5MDEgMSAtPiAxDQotZHFjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xDQotZHFjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDENCi1kcWNvbTczMiBjb21wYXJlIDEgMTIzNDU2Nzg5NiAgLT4gLTENCi0NCi0tLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbg0KLWRxY29tNzQwIGNvbXBhcmUgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KLWRxY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQ0KLWRxY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQ0KLWRxY29tNzQzIGNvbXBhcmUgIDEgIDEuMDAwMCAgICAgLT4gMA0KLWRxY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTENCi1kcWNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xDQotZHFjb203NDYgY29tcGFyZSAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KLWRxY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTENCi1kcWNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xDQotZHFjb203NTIgY29tcGFyZSAgMC45OTk5OSAgICAxICAtPiAtMQ0KLWRxY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMA0KLWRxY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQ0KLWRxY29tNzU1IGNvbXBhcmUgIDEuMDAwMDAxICAgMSAgLT4gMQ0KLWRxY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDENCi1kcWNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQ0KLWRxY29tNzgyIGNvbXBhcmUgIEluZiAgLTEgICAgIC0+ICAxDQotZHFjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDENCi1kcWNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQ0KLWRxY29tNzg1IGNvbXBhcmUgIEluZiAgIDEgICAgIC0+ICAxDQotZHFjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDENCi1kcWNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMA0KLWRxY29tNzg4IGNvbXBhcmUgLTEwMDAgIEluZiAgIC0+IC0xDQotZHFjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTENCi1kcWNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQ0KLWRxY29tNzkxIGNvbXBhcmUgLTAgICAgIEluZiAgIC0+IC0xDQotZHFjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTENCi1kcWNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQ0KLWRxY29tNzk0IGNvbXBhcmUgIDEwMDAgIEluZiAgIC0+IC0xDQotZHFjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1kcWNvbTgwMCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRxY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xDQotZHFjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTENCi1kcWNvbTgwMyBjb21wYXJlIC1JbmYgIC0wICAgICAtPiAtMQ0KLWRxY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xDQotZHFjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTENCi1kcWNvbTgwNiBjb21wYXJlIC1JbmYgICAxMDAwICAtPiAtMQ0KLWRxY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xDQotZHFjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDANCi1kcWNvbTgwOSBjb21wYXJlIC0xMDAwIC1JbmYgICAtPiAgMQ0KLWRxY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxDQotZHFjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDENCi1kcWNvbTgxMiBjb21wYXJlICAwICAgIC1JbmYgICAtPiAgMQ0KLWRxY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxDQotZHFjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDENCi1kcWNvbTgxNSBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQ0KLQ0KLWRxY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcWNvbTgyMiBjb21wYXJlICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcWNvbTgyNSBjb21wYXJlICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcWNvbTgyOCBjb21wYXJlICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzMSBjb21wYXJlIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzNCBjb21wYXJlICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWNvbTgzNyBjb21wYXJlICBJbmYgIE5hTiAgICAtPiAgTmFODQotZHFjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTg0KLWRxY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4NCi1kcWNvbTg0MCBjb21wYXJlIC1OYU4gK05hTiAgICAtPiAtTmFODQotDQotZHFjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg0MiBjb21wYXJlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg0NSBjb21wYXJlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg0OCBjb21wYXJlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1MSBjb21wYXJlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1NCBjb21wYXJlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNvbTg1NyBjb21wYXJlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kcWNvbTg2MSBjb21wYXJlICBOYU44ICA5OTkgICAtPiAgTmFOOA0KLWRxY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43Nw0KLWRxY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42Nw0KLWRxY29tODY0IGNvbXBhcmUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZHFjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzDQotZHFjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi1kcWNvbTg2NyBjb21wYXJlIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxDQotZHFjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQ0KLWRxY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDENCi1kcWNvbTg3MCBjb21wYXJlICtOYU40MSArTmFONDIgLT4gIE5hTjQxDQotDQotZHFjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzIgY29tcGFyZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzUgY29tcGFyZSAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzggY29tcGFyZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gd2lkZSByYW5nZQ0KLWRxY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQ0KLWRxY29tODgxIGNvbXBhcmUgOUUrNjE0NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWRxY29tODgyIGNvbXBhcmUgKzAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAgMQ0KLWRxY29tODgzIGNvbXBhcmUgOUUtNjE0MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQ0KLWRxY29tODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQ0KLWRxY29tODg2IGNvbXBhcmUgOUUrNjE0NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KLWRxY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAtMQ0KLWRxY29tODg4IGNvbXBhcmUgOUUtNjE0MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQ0KLQ0KLS0tIHNpZ25zDQotZHFjb205MDEgY29tcGFyZSAgMWUrNzcgIDFlKzExIC0+ICAxDQotZHFjb205MDIgY29tcGFyZSAgMWUrNzcgLTFlKzExIC0+ICAxDQotZHFjb205MDMgY29tcGFyZSAtMWUrNzcgIDFlKzExIC0+IC0xDQotZHFjb205MDQgY29tcGFyZSAtMWUrNzcgLTFlKzExIC0+IC0xDQotZHFjb205MDUgY29tcGFyZSAgMWUtNzcgIDFlLTExIC0+IC0xDQotZHFjb205MDYgY29tcGFyZSAgMWUtNzcgLTFlLTExIC0+ICAxDQotZHFjb205MDcgY29tcGFyZSAtMWUtNzcgIDFlLTExIC0+IC0xDQotZHFjb205MDggY29tcGFyZSAtMWUtNzcgLTFlLTExIC0+ICAxDQotDQotLS0gZnVsbCBhbGlnbm1lbnQgcmFuZ2UsIGJvdGggd2F5cw0KLWRxY29tcDEwMDEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwDQotZHFjb21wMTAwMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDANCi1kcWNvbXAxMDAzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMA0KLWRxY29tcDEwMDQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAtPiAwDQotZHFjb21wMTAwNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIC0+IDANCi1kcWNvbXAxMDA2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMA0KLWRxY29tcDEwMDcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAtPiAwDQotZHFjb21wMTAwOCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgIC0+IDANCi1kcWNvbXAxMDA5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDEyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDE1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAxNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDE4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMTkgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAwDQotZHFjb21wMTAyMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMCAgIC0+IDANCi1kcWNvbXAxMDIxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAgICAgLT4gMA0KLWRxY29tcDEwMjIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwICAgICAtPiAwDQotZHFjb21wMTAyMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMCAgICAgIC0+IDANCi1kcWNvbXAxMDI0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAgICAgICAgLT4gMA0KLWRxY29tcDEwMjUgY29tcGFyZSAxIDEuMDAwMDAwMDAwICAgICAgICAtPiAwDQotZHFjb21wMTAyNiBjb21wYXJlIDEgMS4wMDAwMDAwMCAgICAgICAgIC0+IDANCi1kcWNvbXAxMDI3IGNvbXBhcmUgMSAxLjAwMDAwMDAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMjggY29tcGFyZSAxIDEuMDAwMDAwICAgICAgICAgICAtPiAwDQotZHFjb21wMTAyOSBjb21wYXJlIDEgMS4wMDAwMCAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDMwIGNvbXBhcmUgMSAxLjAwMDAgICAgICAgICAgICAgLT4gMA0KLWRxY29tcDEwMzEgY29tcGFyZSAxIDEuMDAwICAgICAgICAgICAgICAtPiAwDQotZHFjb21wMTAzMiBjb21wYXJlIDEgMS4wMCAgICAgICAgICAgICAgIC0+IDANCi1kcWNvbXAxMDMzIGNvbXBhcmUgMSAxLjAgICAgICAgICAgICAgICAgLT4gMA0KLQ0KLWRxY29tcDEwNDEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwDQotZHFjb21wMTA0MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAxIC0+IDANCi1kcWNvbXAxMDQzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDEgLT4gMA0KLWRxY29tcDEwNDQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMSAtPiAwDQotZHFjb21wMTA0NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAxIC0+IDANCi1kcWNvbXAxMDQ2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNDcgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgMSAtPiAwDQotZHFjb21wMTA0OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDQ5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTAgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDUyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDU1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA1NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDU4IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNTkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwDQotZHFjb21wMTA2MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDANCi1kcWNvbXAxMDYxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwICAgIDEgLT4gMA0KLWRxY29tcDEwNjIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMCAgICAgMSAtPiAwDQotZHFjb21wMTA2MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDANCi1kcWNvbXAxMDY0IGNvbXBhcmUgMS4wMDAwMDAwMDAwICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNjUgY29tcGFyZSAxLjAwMDAwMDAwMCAgICAgICAgMSAtPiAwDQotZHFjb21wMTA2NiBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDY3IGNvbXBhcmUgMS4wMDAwMDAwICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNjggY29tcGFyZSAxLjAwMDAwMCAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA2OSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDcwIGNvbXBhcmUgMS4wMDAwICAgICAgICAgICAgIDEgLT4gMA0KLWRxY29tcDEwNzEgY29tcGFyZSAxLjAwMCAgICAgICAgICAgICAgMSAtPiAwDQotZHFjb21wMTA3MiBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDANCi1kcWNvbXAxMDczIGNvbXBhcmUgMS4wICAgICAgICAgICAgICAgIDEgLT4gMA0KLQ0KLS0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8NCi1kcWNvbXAxMDgwIGNvbXBhcmUgMCAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KLWRxY29tcDEwODEgY29tcGFyZSAwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODMgY29tcGFyZSAwIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODQgY29tcGFyZSAwIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODYgY29tcGFyZSAwIDYuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODcgY29tcGFyZSAwIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwODkgY29tcGFyZSAwIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQ0KLWRxY29tcDEwOTAgY29tcGFyZSAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAwDQotZHFjb21wMTA5MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kcWNvbXAxMDkyIGNvbXBhcmUgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTMgY29tcGFyZSAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZHFjb21wMTA5NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kcWNvbXAxMDk1IGNvbXBhcmUgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTYgY29tcGFyZSA2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotZHFjb21wMTA5NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCi1kcWNvbXAxMDk4IGNvbXBhcmUgOC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KLWRxY29tcDEwOTkgY29tcGFyZSA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxY29tOTkwIGNvbXBhcmUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb205OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZS5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKK2RxY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKK2RxY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKK2RxY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKK2RxY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKK2RxY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQorZHFjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCitkcWNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCitkcWNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCitkcWNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCitkcWNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKK2RxY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQorZHFjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCitkcWNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCitkcWNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCitkcWNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKK2RxY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQorZHFjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCitkcWNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKK2RxY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKK2RxY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQorZHFjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCitkcWNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKK2RxY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQorZHFjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCisKK2RxY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCitkcWNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKK2RxY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQorZHFjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCitkcWNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKK2RxY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCitkcWNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAorZHFjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCitkcWNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKK2RxY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQorZHFjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKK2RxY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCitkcWNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAorZHFjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCitkcWNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKK2RxY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCitkcWNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQorZHFjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKK2RxY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCitkcWNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKK2RxY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCitkcWNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQorZHFjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKK2RxY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCitkcWNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAorCitkcWNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCitkcWNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQorZHFjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKK2RxY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCitkcWNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQorZHFjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQorZHFjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAorZHFjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKK2RxY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCitkcWNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQorZHFjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQorZHFjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQorZHFjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAorZHFjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKK2RxY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCitkcWNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCitkcWNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCitkcWNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCitkcWNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCitkcWNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQorZHFjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQorZHFjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQorZHFjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQorZHFjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQorZHFjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY29tMDkwIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCitkcWNvbTA5MSBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKK2RxY29tMDkyIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcWNvbTA5MyBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RxY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKK2RxY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKK2RxY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDAKK2RxY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKK2RxY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RxY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RxY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RxY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RxY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RxY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKK2RxY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZHFjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQorZHFjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQorZHFjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQorZHFjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQorZHFjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQorZHFjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQorZHFjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQorZHFjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQorZHFjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQorZHFjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RxY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZHFjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RxY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xCitkcWNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQorZHFjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RxY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQorZHFjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RxY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQorZHFjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RxY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RxY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQorZHFjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RxY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCitkcWNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZHFjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RxY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQorZHFjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RxY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCitkcWNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQorZHFjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RxY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZHFjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RxY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkcWNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQorZHFjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKK2RxY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkcWNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZHFjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZHFjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RxY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xCitkcWNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQorZHFjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RxY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQorZHFjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RxY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQorZHFjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RxY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RxY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQorZHFjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RxY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCitkcWNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQorZHFjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RxY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCitkcWNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQorZHFjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RxY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCitkcWNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQorZHFjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RxY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQorZHFjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RxY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCitkcWNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQorZHFjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RxY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCitkcWNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZHFjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZHFjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RxY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxCitkcWNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQorZHFjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RxY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkcWNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQorZHFjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RxY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxCitkcWNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQorZHFjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RxY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RxY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAorZHFjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCitkcWNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RxY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZHFjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkcWNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RxY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZHFjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkcWNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RxY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZHFjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RxY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RxY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RxY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RxY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RxY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RxY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RxY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RxY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RxY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RxY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RxY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZHFjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkcWNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RxY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQorZHFjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCitkcWNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RxY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZHFjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkcWNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RxY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZHFjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCitkcWNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkcWNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQorZHFjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCitkcWNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQorZHFjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCitkcWNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQorZHFjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xCitkcWNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQorZHFjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCitkcWNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQorZHFjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCitkcWNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQorZHFjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xCitkcWNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQorZHFjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjb200NzMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200NzQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ3NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200NzYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200NzcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ3OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200NzkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200ODAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNvbTQ4MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200ODIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200ODMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNvbTQ4NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkcWNvbTQ4OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RxY29tNDg5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkcWNvbTQ5MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwCitkcWNvbTQ5MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDAKK2RxY29tNDkyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRS04OSAtPiAwCitkcWNvbTQ5MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwCitkcWNvbTQ5NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDAKK2RxY29tNDk1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRSs4OSAtPiAwCitkcWNvbTQ5NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwCitkcWNvbTQ5NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCitkcWNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZHFjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCitkcWNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RxY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZHFjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCitkcWNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RxY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZHFjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCitkcWNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RxY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZHFjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCitkcWNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RxY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZHFjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCitkcWNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkcWNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkcWNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkcWNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkcWNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkcWNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkcWNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkcWNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkcWNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkcWNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkcWNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkcWNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkcWNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkcWNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkcWNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkcWNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkcWNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkcWNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkcWNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkcWNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkcWNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkcWNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkcWNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkcWNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkcWNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkcWNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkcWNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkcWNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkcWNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkcWNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkcWNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkcWNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkcWNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkcWNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkcWNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkcWNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkcWNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkcWNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkcWNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZHFjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RxY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkcWNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZHFjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RxY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkcWNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZHFjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RxY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZHFjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkcWNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RxY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZHFjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkcWNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RxY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZHFjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZHFjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkcWNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkcWNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkcWNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkcWNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkcWNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkcWNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkcWNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkcWNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkcWNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkcWNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkcWNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkcWNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkcWNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkcWNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkcWNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkcWNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkcWNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkcWNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkcWNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkcWNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkcWNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkcWNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKK2RxY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMAorZHFjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCitkcWNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKK2RxY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMAorZHFjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCitkcWNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKK2RxY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMAorZHFjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCitkcWNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKK2RxY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMAorZHFjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCitkcWNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKK2RxY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMAorZHFjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCitkcWNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKKworZHFjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwCitkcWNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKK2RxY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAorZHFjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwCitkcWNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKK2RxY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAorZHFjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwCitkcWNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKK2RxY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAorZHFjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwCitkcWNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKK2RxY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAorZHFjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwCitkcWNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKK2RxY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAorZHFjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwCitkcWNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKK2RxY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAorZHFjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwCitkcWNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKK2RxY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAorZHFjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwCitkcWNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKK2RxY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RxY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZHFjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkcWNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RxY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZHFjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkcWNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RxY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZHFjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkcWNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RxY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RxY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RxY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZHFjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkcWNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RxY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RxY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTUgLT4gMQorZHFjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xCitkcWNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAwMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorZHFjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTAzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCitkcWNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZHFjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDEKK2RxY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQorZHFjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKK2RxY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQorZHFjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKK2RxY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQorZHFjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDEKK2RxY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQorZHFjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKK2RxY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQorZHFjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKK2RxY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZHFjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCitkcWNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDEKK2RxY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQorZHFjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCitkcWNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xCitkcWNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCitkcWNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCitkcWNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkcWNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkcWNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkcWNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDAKK2RxY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQorZHFjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCitkcWNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RxY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCitkcWNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQorZHFjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKK2RxY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxCitkcWNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQorZHFjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKK2RxY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxCitkcWNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorZHFjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkcWNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQorZHFjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKK2RxY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xCitkcWNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQorZHFjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitkcWNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQorZHFjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTEKK2RxY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCitkcWNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQorZHFjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTEKK2RxY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCitkcWNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorZHFjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RxY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCitkcWNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQorZHFjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDEKK2RxY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCitkcWNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQorZHFjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDEKK2RxY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCisKK2RxY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4KK2RxY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KK2RxY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KK2RxY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4KKworZHFjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RxY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkcWNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKK2RxY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NworZHFjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZHFjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKK2RxY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEKK2RxY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKK2RxY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKK2RxY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDEKKworZHFjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkcWNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKK2RxY29tODgxIGNvbXBhcmUgOUUrNjE0NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZHFjb204ODIgY29tcGFyZSArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxCitkcWNvbTg4MyBjb21wYXJlIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2RxY29tODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjb204ODYgY29tcGFyZSA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTEKK2RxY29tODg4IGNvbXBhcmUgOUUtNjE0MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzaWducworZHFjb205MDEgY29tcGFyZSAgMWUrNzcgIDFlKzExIC0+ICAxCitkcWNvbTkwMiBjb21wYXJlICAxZSs3NyAtMWUrMTEgLT4gIDEKK2RxY29tOTAzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQorZHFjb205MDQgY29tcGFyZSAtMWUrNzcgLTFlKzExIC0+IC0xCitkcWNvbTkwNSBjb21wYXJlICAxZS03NyAgMWUtMTEgLT4gLTEKK2RxY29tOTA2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQorZHFjb205MDcgY29tcGFyZSAtMWUtNzcgIDFlLTExIC0+IC0xCitkcWNvbTkwOCBjb21wYXJlIC0xZS03NyAtMWUtMTEgLT4gIDEKKworLS0gZnVsbCBhbGlnbm1lbnQgcmFuZ2UsIGJvdGggd2F5cworZHFjb21wMTAwMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RxY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAwCitkcWNvbXAxMDAzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMAorZHFjb21wMTAwNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDAKK2RxY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAwCitkcWNvbXAxMDA2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZHFjb21wMTAwNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDAKK2RxY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAtPiAwCitkcWNvbXAxMDA5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDEyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKK2RxY29tcDEwMjAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwCitkcWNvbXAxMDIxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAgICAgLT4gMAorZHFjb21wMTAyMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAgICAgIC0+IDAKK2RxY29tcDEwMjMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwCitkcWNvbXAxMDI0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAgICAgICAgLT4gMAorZHFjb21wMTAyNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAgICAgICAgIC0+IDAKK2RxY29tcDEwMjYgY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwCitkcWNvbXAxMDI3IGNvbXBhcmUgMSAxLjAwMDAwMDAgICAgICAgICAgLT4gMAorZHFjb21wMTAyOCBjb21wYXJlIDEgMS4wMDAwMDAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMjkgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMwIGNvbXBhcmUgMSAxLjAwMDAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAzMSBjb21wYXJlIDEgMS4wMDAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMzIgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMzIGNvbXBhcmUgMSAxLjAgICAgICAgICAgICAgICAgLT4gMAorCitkcWNvbXAxMDQxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZHFjb21wMTA0MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RxY29tcDEwNDMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkcWNvbXAxMDQ0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZHFjb21wMTA0NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RxY29tcDEwNDYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkcWNvbXAxMDQ3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZHFjb21wMTA0OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNDkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZHFjb21wMTA2MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RxY29tcDEwNjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkcWNvbXAxMDYyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZHFjb21wMTA2MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RxY29tcDEwNjQgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY1IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2NiBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNjcgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY4IGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2OSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzAgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDcxIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA3MiBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzMgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwCisKKy0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8KK2RxY29tcDEwODAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkcWNvbXAxMDgxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDkwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMAorZHFjb21wMTA5MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDkzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorCistLSBOdWxsIHRlc3RzCitkcWNvbTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb205OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdAppbmRleCBjMDY4ZDQ3Li43OTVmMDkxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlU2lnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0CkBAIC0xLDY0NyArMSw2NDcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29tcGFyZVNpZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCi0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kcWNtczAwMSBjb21wYXJlc2lnICAtMiAgLTIgIC0+IDANCi1kcWNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xDQotZHFjbXMwMDMgY29tcGFyZXNpZyAgLTIgICAwICAtPiAtMQ0KLWRxY21zMDA0IGNvbXBhcmVzaWcgIC0yICAgMSAgLT4gLTENCi1kcWNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xDQotZHFjbXMwMDYgY29tcGFyZXNpZyAgLTEgIC0yICAtPiAxDQotZHFjbXMwMDcgY29tcGFyZXNpZyAgLTEgIC0xICAtPiAwDQotZHFjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQ0KLWRxY21zMDA5IGNvbXBhcmVzaWcgIC0xICAgMSAgLT4gLTENCi1kcWNtczAxMCBjb21wYXJlc2lnICAtMSAgIDIgIC0+IC0xDQotZHFjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxDQotZHFjbXMwMTIgY29tcGFyZXNpZyAgIDAgIC0xICAtPiAxDQotZHFjbXMwMTMgY29tcGFyZXNpZyAgIDAgICAwICAtPiAwDQotZHFjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQ0KLWRxY21zMDE1IGNvbXBhcmVzaWcgICAwICAgMiAgLT4gLTENCi1kcWNtczAxNiBjb21wYXJlc2lnICAgMSAgLTIgIC0+IDENCi1kcWNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDENCi1kcWNtczAxOCBjb21wYXJlc2lnICAgMSAgIDAgIC0+IDENCi1kcWNtczAxOSBjb21wYXJlc2lnICAgMSAgIDEgIC0+IDANCi1kcWNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xDQotZHFjbXMwMjEgY29tcGFyZXNpZyAgIDIgIC0yICAtPiAxDQotZHFjbXMwMjIgY29tcGFyZXNpZyAgIDIgIC0xICAtPiAxDQotZHFjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxDQotZHFjbXMwMjUgY29tcGFyZXNpZyAgIDIgICAxICAtPiAxDQotZHFjbXMwMjYgY29tcGFyZXNpZyAgIDIgICAyICAtPiAwDQotDQotZHFjbXMwMzEgY29tcGFyZXNpZyAgLTIwICAtMjAgIC0+IDANCi1kcWNtczAzMiBjb21wYXJlc2lnICAtMjAgIC0xMCAgLT4gLTENCi1kcWNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTENCi1kcWNtczAzNCBjb21wYXJlc2lnICAtMjAgICAxMCAgLT4gLTENCi1kcWNtczAzNSBjb21wYXJlc2lnICAtMjAgICAyMCAgLT4gLTENCi1kcWNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQ0KLWRxY21zMDM3IGNvbXBhcmVzaWcgIC0xMCAgLTEwICAtPiAwDQotZHFjbXMwMzggY29tcGFyZXNpZyAgLTEwICAgMDAgIC0+IC0xDQotZHFjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xDQotZHFjbXMwNDAgY29tcGFyZXNpZyAgLTEwICAgMjAgIC0+IC0xDQotZHFjbXMwNDEgY29tcGFyZXNpZyAgIDAwICAtMjAgIC0+IDENCi1kcWNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQ0KLWRxY21zMDQzIGNvbXBhcmVzaWcgICAwMCAgIDAwICAtPiAwDQotZHFjbXMwNDQgY29tcGFyZXNpZyAgIDAwICAgMTAgIC0+IC0xDQotZHFjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xDQotZHFjbXMwNDYgY29tcGFyZXNpZyAgIDEwICAtMjAgIC0+IDENCi1kcWNtczA0NyBjb21wYXJlc2lnICAgMTAgIC0xMCAgLT4gMQ0KLWRxY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxDQotZHFjbXMwNDkgY29tcGFyZXNpZyAgIDEwICAgMTAgIC0+IDANCi1kcWNtczA1MCBjb21wYXJlc2lnICAgMTAgICAyMCAgLT4gLTENCi1kcWNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQ0KLWRxY21zMDUyIGNvbXBhcmVzaWcgICAyMCAgLTEwICAtPiAxDQotZHFjbXMwNTMgY29tcGFyZXNpZyAgIDIwICAgMDAgIC0+IDENCi1kcWNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQ0KLWRxY21zMDU2IGNvbXBhcmVzaWcgICAyMCAgIDIwICAtPiAwDQotDQotZHFjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMA0KLWRxY21zMDYyIGNvbXBhcmVzaWcgIC0yLjAgIC0xLjAgIC0+IC0xDQotZHFjbXMwNjMgY29tcGFyZXNpZyAgLTIuMCAgIDAuMCAgLT4gLTENCi1kcWNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQ0KLWRxY21zMDY1IGNvbXBhcmVzaWcgIC0yLjAgICAyLjAgIC0+IC0xDQotZHFjbXMwNjYgY29tcGFyZXNpZyAgLTEuMCAgLTIuMCAgLT4gMQ0KLWRxY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDANCi1kcWNtczA2OCBjb21wYXJlc2lnICAtMS4wICAgMC4wICAtPiAtMQ0KLWRxY21zMDY5IGNvbXBhcmVzaWcgIC0xLjAgICAxLjAgIC0+IC0xDQotZHFjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTENCi1kcWNtczA3MSBjb21wYXJlc2lnICAgMC4wICAtMi4wICAtPiAxDQotZHFjbXMwNzIgY29tcGFyZXNpZyAgIDAuMCAgLTEuMCAgLT4gMQ0KLWRxY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDANCi1kcWNtczA3NCBjb21wYXJlc2lnICAgMC4wICAgMS4wICAtPiAtMQ0KLWRxY21zMDc1IGNvbXBhcmVzaWcgICAwLjAgICAyLjAgIC0+IC0xDQotZHFjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQ0KLWRxY21zMDc3IGNvbXBhcmVzaWcgICAxLjAgIC0xLjAgIC0+IDENCi1kcWNtczA3OCBjb21wYXJlc2lnICAgMS4wICAgMC4wICAtPiAxDQotZHFjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMA0KLWRxY21zMDgwIGNvbXBhcmVzaWcgICAxLjAgICAyLjAgIC0+IC0xDQotZHFjbXMwODEgY29tcGFyZXNpZyAgIDIuMCAgLTIuMCAgLT4gMQ0KLWRxY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDENCi1kcWNtczA4MyBjb21wYXJlc2lnICAgMi4wICAgMC4wICAtPiAxDQotZHFjbXMwODUgY29tcGFyZXNpZyAgIDIuMCAgIDEuMCAgLT4gMQ0KLWRxY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDANCi0NCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQNCi1kcWNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMA0KLWRxY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQ0KLWRxY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQotZHFjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCi1kcWNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwDQotZHFjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMA0KLWRxY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDANCi1kcWNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwDQotZHFjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMA0KLWRxY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDANCi1kcWNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwDQotZHFjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMA0KLWRxY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDANCi1kcWNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwDQotZHFjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMA0KLQ0KLWRxY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDENCi1kcWNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxDQotZHFjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQ0KLWRxY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDENCi1kcWNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxDQotZHFjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KLWRxY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDENCi1kcWNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxDQotZHFjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQ0KLWRxY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxDQotZHFjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQ0KLQ0KLWRxY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xDQotZHFjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTENCi1kcWNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRxY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xDQotZHFjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTENCi1kcWNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQ0KLWRxY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xDQotZHFjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTENCi1kcWNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRxY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xDQotZHFjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZHFjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTENCi1kcWNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQ0KLWRxY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xDQotZHFjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTENCi1kcWNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KLWRxY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQotZHFjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTENCi1kcWNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xDQotZHFjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTENCi1kcWNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRxY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xDQotZHFjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTENCi1kcWNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KLWRxY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xDQotZHFjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTENCi1kcWNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQ0KLWRxY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xDQotZHFjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTENCi1kcWNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KLWRxY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xDQotZHFjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTENCi0NCi1kcWNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRxY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xDQotZHFjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTENCi1kcWNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRxY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xDQotZHFjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTENCi1kcWNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQ0KLWRxY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xDQotZHFjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTENCi1kcWNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRxY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRxY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxDQotZHFjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDENCi1kcWNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQ0KLWRxY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxDQotZHFjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDENCi1kcWNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KLWRxY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxDQotZHFjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDENCi1kcWNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KLWRxY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxDQotZHFjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDENCi0NCi1kcWNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQ0KLWRxY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxDQotZHFjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDENCi1kcWNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KLWRxY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxDQotZHFjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDENCi1kcWNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQ0KLWRxY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxDQotZHFjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDENCi1kcWNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KLWRxY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxDQotDQotZHFjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDENCi1kcWNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQ0KLWRxY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxDQotZHFjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDENCi1kcWNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQ0KLWRxY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxDQotZHFjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDENCi1kcWNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQ0KLWRxY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxDQotZHFjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDENCi1kcWNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kcWNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDANCi1kcWNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDANCi1kcWNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDANCi1kcWNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDANCi1kcWNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1kcWNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDANCi1kcWNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDANCi1kcWNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCi1kcWNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCi1kcWNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDANCi1kcWNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDANCi0NCi1kcWNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQotZHFjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KLWRxY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTENCi1kcWNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQotZHFjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KLWRxY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCi1kcWNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQotZHFjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KLWRxY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCi1kcWNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQotZHFjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KLQ0KLWRxY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KLWRxY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KLWRxY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KLWRxY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KLWRxY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KLWRxY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KLWRxY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KLWRxY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQ0KLWRxY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KLWRxY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KLWRxY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRxY21zNDczIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNtczQ3NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNtczQ3NSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDc2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNtczQ3NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNtczQ3OCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KLWRxY21zNDc5IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNtczQ4MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNtczQ4MSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KLWRxY21zNDgyIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCi1kcWNtczQ4MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCi1kcWNtczQ4NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwDQotZHFjbXM0ODggY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRS04OSAtPiAwDQotZHFjbXM0ODkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDANCi1kcWNtczQ5MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwDQotZHFjbXM0OTEgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRSs4OSAtPiAwDQotZHFjbXM0OTIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDANCi1kcWNtczQ5MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwDQotZHFjbXM0OTQgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRS04OSAtPiAwDQotZHFjbXM0OTUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDANCi1kcWNtczQ5NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwDQotZHFjbXM0OTcgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRxY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRxY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRxY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRxY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRxY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRxY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRxY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRxY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRxY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRxY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWRxY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KLWRxY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KLWRxY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWRxY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KLWRxY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KLWRxY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWRxY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCi1kcWNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWRxY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCi1kcWNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQotZHFjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWRxY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCi1kcWNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQotZHFjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWRxY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCi1kcWNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQotZHFjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWRxY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCi1kcWNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQotZHFjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1kcWNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1kcWNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1kcWNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQotZHFjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1kcWNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQotZHFjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1kcWNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQotZHFjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KLWRxY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1kcWNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQotZHFjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1kcWNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1kcWNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1kcWNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1kcWNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQotZHFjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KLWRxY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1kcWNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQotLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQotZHFjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1kcWNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KLWRxY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQotZHFjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1kcWNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KLWRxY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQotZHFjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1kcWNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KLWRxY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQotZHFjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotZHFjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQotZHFjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQotZHFjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotZHFjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQotZHFjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQotZHFjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotZHFjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQotZHFjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQotZHFjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotZHFjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1kcWNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCi1kcWNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQotZHFjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWRxY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCi1kcWNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQotZHFjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWRxY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCi1kcWNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQotZHFjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWRxY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCi1kcWNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQotZHFjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWRxY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQotZHFjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWRxY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCi1kcWNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQotZHFjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWRxY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCi1kcWNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQotZHFjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWRxY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCi1kcWNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQotZHFjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWRxY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCi1kcWNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1kcWNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDANCi1kcWNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDANCi1kcWNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDANCi1kcWNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDANCi1kcWNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDANCi1kcWNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDANCi1kcWNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDANCi1kcWNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDANCi1kcWNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDANCi1kcWNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDANCi1kcWNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDANCi1kcWNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDANCi1kcWNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDANCi1kcWNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDANCi1kcWNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDANCi1kcWNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDANCi0NCi1kcWNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDANCi1kcWNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDANCi1kcWNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDANCi1kcWNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDANCi1kcWNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDANCi1kcWNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDANCi1kcWNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDANCi1kcWNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDANCi1kcWNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDANCi1kcWNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDANCi1kcWNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDANCi1kcWNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDANCi1kcWNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDANCi1kcWNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDANCi1kcWNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDANCi1kcWNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDANCi1kcWNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDANCi1kcWNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDANCi1kcWNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDANCi1kcWNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDANCi1kcWNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDANCi1kcWNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDANCi1kcWNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDANCi1kcWNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDANCi0NCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQotZHFjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotZHFjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwDQotZHFjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwDQotZHFjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwDQotZHFjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwDQotZHFjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwDQotZHFjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwDQotZHFjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwDQotZHFjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwDQotZHFjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwDQotZHFjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwDQotZHFjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwDQotZHFjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwDQotZHFjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwDQotZHFjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwDQotDQotLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0DQotZHFjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxDQotZHFjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQotZHFjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NyAtPiAtMQ0KLWRxY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQ0KLWRxY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KLWRxY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDIyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTENCi1kcWNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDENCi1kcWNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCi1kcWNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xDQotDQotLS0gbWlzY2VsbGFuZW91cw0KLWRxY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxDQotZHFjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xDQotZHFjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDENCi1kcWNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTENCi1kcWNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KLWRxY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQ0KLWRxY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxDQotZHFjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xDQotZHFjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDENCi1kcWNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTENCi1kcWNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KLWRxY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQ0KLQ0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uDQotZHFjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxDQotZHFjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxDQotZHFjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxDQotZHFjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwDQotZHFjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KLWRxY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1kcWNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xDQotZHFjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQ0KLWRxY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1kcWNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xDQotZHFjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwDQotZHFjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxDQotZHFjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxDQotZHFjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxDQotDQotLS0gU3BlY2lhbHMNCi1kcWNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQ0KLWRxY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxDQotZHFjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDENCi1kcWNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQ0KLWRxY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxDQotZHFjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDENCi1kcWNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQ0KLWRxY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQotZHFjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTENCi1kcWNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRxY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xDQotZHFjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTENCi1kcWNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQ0KLWRxY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xDQotZHFjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTENCi1kcWNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRxY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTENCi1kcWNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRxY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xDQotZHFjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTENCi1kcWNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQ0KLWRxY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xDQotZHFjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTENCi1kcWNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRxY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxDQotZHFjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDENCi1kcWNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQ0KLWRxY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxDQotZHFjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDENCi1kcWNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQ0KLWRxY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQotDQotZHFjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjEgY29tcGFyZXNpZyAgTmFOOCAgOTk5ICAgLT4gIE5hTjggICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjQgY29tcGFyZXNpZyAtSW5mICAtTmFONCAgLT4gLU5hTjQgICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NjcgY29tcGFyZXNpZyAtTmFONDEgLU5hTjQyIC0+IC1OYU40MSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFjbXM4NzAgY29tcGFyZXNpZyArTmFONDEgK05hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSB3aWRlIHJhbmdlDQotZHFjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQotZHFjbXM4ODEgY29tcGFyZXNpZyA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZHFjbXM4ODIgY29tcGFyZXNpZyArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxDQotZHFjbXM4ODMgY29tcGFyZXNpZyA5RS02MTQzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQotZHFjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQotZHFjbXM4ODYgY29tcGFyZXNpZyA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQotZHFjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+IC0xDQotZHFjbXM4ODggY29tcGFyZXNpZyA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQotDQotLS0gc2lnbnMNCi1kcWNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDENCi1kcWNtczkwMiBjb21wYXJlc2lnICAxZSs3NyAtMWUrMTEgLT4gIDENCi1kcWNtczkwMyBjb21wYXJlc2lnIC0xZSs3NyAgMWUrMTEgLT4gLTENCi1kcWNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTENCi1kcWNtczkwNSBjb21wYXJlc2lnICAxZS03NyAgMWUtMTEgLT4gLTENCi1kcWNtczkwNiBjb21wYXJlc2lnICAxZS03NyAtMWUtMTEgLT4gIDENCi1kcWNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTENCi1kcWNtczkwOCBjb21wYXJlc2lnIC0xZS03NyAtMWUtMTEgLT4gIDENCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFjbXM5OTAgY29tcGFyZXNpZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWNtczk5MSBjb21wYXJlc2lnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb21wYXJlU2lnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhbGwgTmFOcyBzaWduYWwgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxY21zMDAxIGNvbXBhcmVzaWcgIC0yICAtMiAgLT4gMAorZHFjbXMwMDIgY29tcGFyZXNpZyAgLTIgIC0xICAtPiAtMQorZHFjbXMwMDMgY29tcGFyZXNpZyAgLTIgICAwICAtPiAtMQorZHFjbXMwMDQgY29tcGFyZXNpZyAgLTIgICAxICAtPiAtMQorZHFjbXMwMDUgY29tcGFyZXNpZyAgLTIgICAyICAtPiAtMQorZHFjbXMwMDYgY29tcGFyZXNpZyAgLTEgIC0yICAtPiAxCitkcWNtczAwNyBjb21wYXJlc2lnICAtMSAgLTEgIC0+IDAKK2RxY21zMDA4IGNvbXBhcmVzaWcgIC0xICAgMCAgLT4gLTEKK2RxY21zMDA5IGNvbXBhcmVzaWcgIC0xICAgMSAgLT4gLTEKK2RxY21zMDEwIGNvbXBhcmVzaWcgIC0xICAgMiAgLT4gLTEKK2RxY21zMDExIGNvbXBhcmVzaWcgICAwICAtMiAgLT4gMQorZHFjbXMwMTIgY29tcGFyZXNpZyAgIDAgIC0xICAtPiAxCitkcWNtczAxMyBjb21wYXJlc2lnICAgMCAgIDAgIC0+IDAKK2RxY21zMDE0IGNvbXBhcmVzaWcgICAwICAgMSAgLT4gLTEKK2RxY21zMDE1IGNvbXBhcmVzaWcgICAwICAgMiAgLT4gLTEKK2RxY21zMDE2IGNvbXBhcmVzaWcgICAxICAtMiAgLT4gMQorZHFjbXMwMTcgY29tcGFyZXNpZyAgIDEgIC0xICAtPiAxCitkcWNtczAxOCBjb21wYXJlc2lnICAgMSAgIDAgIC0+IDEKK2RxY21zMDE5IGNvbXBhcmVzaWcgICAxICAgMSAgLT4gMAorZHFjbXMwMjAgY29tcGFyZXNpZyAgIDEgICAyICAtPiAtMQorZHFjbXMwMjEgY29tcGFyZXNpZyAgIDIgIC0yICAtPiAxCitkcWNtczAyMiBjb21wYXJlc2lnICAgMiAgLTEgIC0+IDEKK2RxY21zMDIzIGNvbXBhcmVzaWcgICAyICAgMCAgLT4gMQorZHFjbXMwMjUgY29tcGFyZXNpZyAgIDIgICAxICAtPiAxCitkcWNtczAyNiBjb21wYXJlc2lnICAgMiAgIDIgIC0+IDAKKworZHFjbXMwMzEgY29tcGFyZXNpZyAgLTIwICAtMjAgIC0+IDAKK2RxY21zMDMyIGNvbXBhcmVzaWcgIC0yMCAgLTEwICAtPiAtMQorZHFjbXMwMzMgY29tcGFyZXNpZyAgLTIwICAgMDAgIC0+IC0xCitkcWNtczAzNCBjb21wYXJlc2lnICAtMjAgICAxMCAgLT4gLTEKK2RxY21zMDM1IGNvbXBhcmVzaWcgIC0yMCAgIDIwICAtPiAtMQorZHFjbXMwMzYgY29tcGFyZXNpZyAgLTEwICAtMjAgIC0+IDEKK2RxY21zMDM3IGNvbXBhcmVzaWcgIC0xMCAgLTEwICAtPiAwCitkcWNtczAzOCBjb21wYXJlc2lnICAtMTAgICAwMCAgLT4gLTEKK2RxY21zMDM5IGNvbXBhcmVzaWcgIC0xMCAgIDEwICAtPiAtMQorZHFjbXMwNDAgY29tcGFyZXNpZyAgLTEwICAgMjAgIC0+IC0xCitkcWNtczA0MSBjb21wYXJlc2lnICAgMDAgIC0yMCAgLT4gMQorZHFjbXMwNDIgY29tcGFyZXNpZyAgIDAwICAtMTAgIC0+IDEKK2RxY21zMDQzIGNvbXBhcmVzaWcgICAwMCAgIDAwICAtPiAwCitkcWNtczA0NCBjb21wYXJlc2lnICAgMDAgICAxMCAgLT4gLTEKK2RxY21zMDQ1IGNvbXBhcmVzaWcgICAwMCAgIDIwICAtPiAtMQorZHFjbXMwNDYgY29tcGFyZXNpZyAgIDEwICAtMjAgIC0+IDEKK2RxY21zMDQ3IGNvbXBhcmVzaWcgICAxMCAgLTEwICAtPiAxCitkcWNtczA0OCBjb21wYXJlc2lnICAgMTAgICAwMCAgLT4gMQorZHFjbXMwNDkgY29tcGFyZXNpZyAgIDEwICAgMTAgIC0+IDAKK2RxY21zMDUwIGNvbXBhcmVzaWcgICAxMCAgIDIwICAtPiAtMQorZHFjbXMwNTEgY29tcGFyZXNpZyAgIDIwICAtMjAgIC0+IDEKK2RxY21zMDUyIGNvbXBhcmVzaWcgICAyMCAgLTEwICAtPiAxCitkcWNtczA1MyBjb21wYXJlc2lnICAgMjAgICAwMCAgLT4gMQorZHFjbXMwNTUgY29tcGFyZXNpZyAgIDIwICAgMTAgIC0+IDEKK2RxY21zMDU2IGNvbXBhcmVzaWcgICAyMCAgIDIwICAtPiAwCisKK2RxY21zMDYxIGNvbXBhcmVzaWcgIC0yLjAgIC0yLjAgIC0+IDAKK2RxY21zMDYyIGNvbXBhcmVzaWcgIC0yLjAgIC0xLjAgIC0+IC0xCitkcWNtczA2MyBjb21wYXJlc2lnICAtMi4wICAgMC4wICAtPiAtMQorZHFjbXMwNjQgY29tcGFyZXNpZyAgLTIuMCAgIDEuMCAgLT4gLTEKK2RxY21zMDY1IGNvbXBhcmVzaWcgIC0yLjAgICAyLjAgIC0+IC0xCitkcWNtczA2NiBjb21wYXJlc2lnICAtMS4wICAtMi4wICAtPiAxCitkcWNtczA2NyBjb21wYXJlc2lnICAtMS4wICAtMS4wICAtPiAwCitkcWNtczA2OCBjb21wYXJlc2lnICAtMS4wICAgMC4wICAtPiAtMQorZHFjbXMwNjkgY29tcGFyZXNpZyAgLTEuMCAgIDEuMCAgLT4gLTEKK2RxY21zMDcwIGNvbXBhcmVzaWcgIC0xLjAgICAyLjAgIC0+IC0xCitkcWNtczA3MSBjb21wYXJlc2lnICAgMC4wICAtMi4wICAtPiAxCitkcWNtczA3MiBjb21wYXJlc2lnICAgMC4wICAtMS4wICAtPiAxCitkcWNtczA3MyBjb21wYXJlc2lnICAgMC4wICAgMC4wICAtPiAwCitkcWNtczA3NCBjb21wYXJlc2lnICAgMC4wICAgMS4wICAtPiAtMQorZHFjbXMwNzUgY29tcGFyZXNpZyAgIDAuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDc2IGNvbXBhcmVzaWcgICAxLjAgIC0yLjAgIC0+IDEKK2RxY21zMDc3IGNvbXBhcmVzaWcgICAxLjAgIC0xLjAgIC0+IDEKK2RxY21zMDc4IGNvbXBhcmVzaWcgICAxLjAgICAwLjAgIC0+IDEKK2RxY21zMDc5IGNvbXBhcmVzaWcgICAxLjAgICAxLjAgIC0+IDAKK2RxY21zMDgwIGNvbXBhcmVzaWcgICAxLjAgICAyLjAgIC0+IC0xCitkcWNtczA4MSBjb21wYXJlc2lnICAgMi4wICAtMi4wICAtPiAxCitkcWNtczA4MiBjb21wYXJlc2lnICAgMi4wICAtMS4wICAtPiAxCitkcWNtczA4MyBjb21wYXJlc2lnICAgMi4wICAgMC4wICAtPiAxCitkcWNtczA4NSBjb21wYXJlc2lnICAgMi4wICAgMS4wICAtPiAxCitkcWNtczA4NiBjb21wYXJlc2lnICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZHFjbXMwOTAgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDAKK2RxY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQorZHFjbXMwOTIgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2RxY21zMDkzIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworZHFjbXMxMDAgY29tcGFyZXNpZyAgIDcuMCAgICA3LjAgICAgLT4gMAorZHFjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMAorZHFjbXMxMDIgY29tcGFyZXNpZyAgIDcgICAgICA3LjAgICAgLT4gMAorZHFjbXMxMDMgY29tcGFyZXNpZyAgIDdFKzAgICA3LjAgICAgLT4gMAorZHFjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMAorZHFjbXMxMDUgY29tcGFyZXNpZyAgIDAuN0UrMSA3ICAgICAgLT4gMAorZHFjbXMxMDYgY29tcGFyZXNpZyAgIDcwRS0xICA3ICAgICAgLT4gMAorZHFjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMAorZHFjbXMxMDggY29tcGFyZXNpZyAgIDcuMCAgICA3MEUtMSAgLT4gMAorZHFjbXMxMDkgY29tcGFyZXNpZyAgIDcgICAgICAwLjdFKzEgLT4gMAorZHFjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMAorCitkcWNtczEyMCBjb21wYXJlc2lnICAgOC4wICAgIDcuMCAgICAtPiAxCitkcWNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxCitkcWNtczEyMiBjb21wYXJlc2lnICAgOCAgICAgIDcuMCAgICAtPiAxCitkcWNtczEyMyBjb21wYXJlc2lnICAgOEUrMCAgIDcuMCAgICAtPiAxCitkcWNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxCitkcWNtczEyNSBjb21wYXJlc2lnICAgMC44RSsxIDcgICAgICAtPiAxCitkcWNtczEyNiBjb21wYXJlc2lnICAgODBFLTEgIDcgICAgICAtPiAxCitkcWNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxCitkcWNtczEyOCBjb21wYXJlc2lnICAgOC4wICAgIDcwRS0xICAtPiAxCitkcWNtczEyOSBjb21wYXJlc2lnICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZHFjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQorCitkcWNtczE0MCBjb21wYXJlc2lnICAgOC4wICAgIDkuMCAgICAtPiAtMQorZHFjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RxY21zMTQyIGNvbXBhcmVzaWcgICA4ICAgICAgOS4wICAgIC0+IC0xCitkcWNtczE0MyBjb21wYXJlc2lnICAgOEUrMCAgIDkuMCAgICAtPiAtMQorZHFjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RxY21zMTQ1IGNvbXBhcmVzaWcgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkcWNtczE0NiBjb21wYXJlc2lnICAgODBFLTEgIDkgICAgICAtPiAtMQorZHFjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTEKK2RxY21zMTQ4IGNvbXBhcmVzaWcgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkcWNtczE0OSBjb21wYXJlc2lnICAgOCAgICAgIDAuOUUrMSAtPiAtMQorZHFjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RxY21zMjAxIGNvbXBhcmVzaWcgIC03LjAgICAgNyAgICAgIC0+IC0xCitkcWNtczIwMiBjb21wYXJlc2lnICAtNyAgICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RxY21zMjA0IGNvbXBhcmVzaWcgIC03MEUtMSAgNy4wICAgIC0+IC0xCitkcWNtczIwNSBjb21wYXJlc2lnICAtMC43RSsxIDcgICAgICAtPiAtMQorZHFjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RxY21zMjA3IGNvbXBhcmVzaWcgIC03LjAgICAgN0UrMCAgIC0+IC0xCitkcWNtczIwOCBjb21wYXJlc2lnICAtNy4wICAgIDcwRS0xICAtPiAtMQorZHFjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RxY21zMjEwIGNvbXBhcmVzaWcgIC03ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xCitkcWNtczIyMSBjb21wYXJlc2lnICAtOC4wICAgIDcgICAgICAtPiAtMQorZHFjbXMyMjIgY29tcGFyZXNpZyAgLTggICAgICA3LjAgICAgLT4gLTEKK2RxY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xCitkcWNtczIyNCBjb21wYXJlc2lnICAtODBFLTEgIDcuMCAgICAtPiAtMQorZHFjbXMyMjUgY29tcGFyZXNpZyAgLTAuOEUrMSA3ICAgICAgLT4gLTEKK2RxY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkcWNtczIyNyBjb21wYXJlc2lnICAtOC4wICAgIDdFKzAgICAtPiAtMQorZHFjbXMyMjggY29tcGFyZXNpZyAgLTguMCAgICA3MEUtMSAgLT4gLTEKK2RxY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xCitkcWNtczIzMCBjb21wYXJlc2lnICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkcWNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQorZHFjbXMyNDEgY29tcGFyZXNpZyAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RxY21zMjQyIGNvbXBhcmVzaWcgIC04ICAgICAgOS4wICAgIC0+IC0xCitkcWNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQorZHFjbXMyNDQgY29tcGFyZXNpZyAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RxY21zMjQ1IGNvbXBhcmVzaWcgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkcWNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQorZHFjbXMyNDcgY29tcGFyZXNpZyAgLTguMCAgICA5RSswICAgLT4gLTEKK2RxY21zMjQ4IGNvbXBhcmVzaWcgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkcWNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQorZHFjbXMyNTAgY29tcGFyZXNpZyAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjbXMzMDAgY29tcGFyZXNpZyAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RxY21zMzAxIGNvbXBhcmVzaWcgICA3LjAgICAgLTcgICAgICAtPiAxCitkcWNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQorZHFjbXMzMDMgY29tcGFyZXNpZyAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RxY21zMzA0IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcuMCAgICAtPiAxCitkcWNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQorZHFjbXMzMDYgY29tcGFyZXNpZyAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RxY21zMzA3IGNvbXBhcmVzaWcgICA3LjAgICAgLTdFKzAgICAtPiAxCitkcWNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQorZHFjbXMzMDkgY29tcGFyZXNpZyAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RxY21zMzEwIGNvbXBhcmVzaWcgICA3ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY21zMzIwIGNvbXBhcmVzaWcgICA4LjAgICAgLTcuMCAgICAtPiAxCitkcWNtczMyMSBjb21wYXJlc2lnICAgOC4wICAgIC03ICAgICAgLT4gMQorZHFjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDEKK2RxY21zMzIzIGNvbXBhcmVzaWcgICA4RSswICAgLTcuMCAgICAtPiAxCitkcWNtczMyNCBjb21wYXJlc2lnICAgODBFLTEgIC03LjAgICAgLT4gMQorZHFjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDEKK2RxY21zMzI2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcgICAgICAtPiAxCitkcWNtczMyNyBjb21wYXJlc2lnICAgOC4wICAgIC03RSswICAgLT4gMQorZHFjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDEKK2RxY21zMzI5IGNvbXBhcmVzaWcgICA4ICAgICAgLS43RSsxICAtPiAxCitkcWNtczMzMCBjb21wYXJlc2lnICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkcWNtczM0MCBjb21wYXJlc2lnICAgOC4wICAgIC05LjAgICAgLT4gMQorZHFjbXMzNDEgY29tcGFyZXNpZyAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RxY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxCitkcWNtczM0MyBjb21wYXJlc2lnICAgOEUrMCAgIC05LjAgICAgLT4gMQorZHFjbXMzNDQgY29tcGFyZXNpZyAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RxY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxCitkcWNtczM0NiBjb21wYXJlc2lnICAgODBFLTEgIC05ICAgICAgLT4gMQorZHFjbXMzNDcgY29tcGFyZXNpZyAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RxY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxCitkcWNtczM0OSBjb21wYXJlc2lnICAgOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjbXMzNTAgY29tcGFyZXNpZyAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjbXM0MDAgY29tcGFyZXNpZyAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkcWNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDAKK2RxY21zNDAyIGNvbXBhcmVzaWcgICAtNyAgICAgIC03LjAgICAgLT4gMAorZHFjbXM0MDMgY29tcGFyZXNpZyAgIC03RSswICAgLTcuMCAgICAtPiAwCitkcWNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RxY21zNDA1IGNvbXBhcmVzaWcgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZHFjbXM0MDYgY29tcGFyZXNpZyAgIC03MEUtMSAgLTcgICAgICAtPiAwCitkcWNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKK2RxY21zNDA4IGNvbXBhcmVzaWcgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZHFjbXM0MDkgY29tcGFyZXNpZyAgIC03ICAgICAgLS43RSsxICAtPiAwCitkcWNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDAKKworZHFjbXM0MjAgY29tcGFyZXNpZyAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZHFjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZHFjbXM0MjIgY29tcGFyZXNpZyAgIC04ICAgICAgLTcuMCAgICAtPiAtMQorZHFjbXM0MjMgY29tcGFyZXNpZyAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZHFjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZHFjbXM0MjUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQorZHFjbXM0MjYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZHFjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZHFjbXM0MjggY29tcGFyZXNpZyAgIC04LjAgICAgLTcwRS0xICAtPiAtMQorZHFjbXM0MjkgY29tcGFyZXNpZyAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZHFjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNtczQ0MCBjb21wYXJlc2lnICAgLTguMCAgICAtOS4wICAgIC0+IDEKK2RxY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQorZHFjbXM0NDIgY29tcGFyZXNpZyAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkcWNtczQ0MyBjb21wYXJlc2lnICAgLThFKzAgICAtOS4wICAgIC0+IDEKK2RxY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQorZHFjbXM0NDUgY29tcGFyZXNpZyAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkcWNtczQ0NiBjb21wYXJlc2lnICAgLTgwRS0xICAtOSAgICAgIC0+IDEKK2RxY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQorZHFjbXM0NDggY29tcGFyZXNpZyAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkcWNtczQ0OSBjb21wYXJlc2lnICAgLTggICAgICAtLjlFKzEgIC0+IDEKK2RxY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZHFjbXM0NzMgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0NzQgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ3NSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0NzYgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjbXM0NzcgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ3OCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjbXM0NzkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0ODAgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ4MSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjbXM0ODIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjbXM0ODMgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ4NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkcWNtczQ4OCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RxY21zNDg5IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkcWNtczQ5MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwCitkcWNtczQ5MSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDAKK2RxY21zNDkyIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRS04OSAtPiAwCitkcWNtczQ5MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwCitkcWNtczQ5NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDAKK2RxY21zNDk1IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRSs4OSAtPiAwCitkcWNtczQ5NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwCitkcWNtczQ5NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZHFjbXM1MDAgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNSAgICAtPiAxCitkcWNtczUwMSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZHFjbXM1MDMgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMiAgICAtPiAxCitkcWNtczUwNCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RxY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZHFjbXM1MDYgY29tcGFyZXNpZyAgICAxICAgICAxRS05ICAgICAtPiAxCitkcWNtczUwNyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RxY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZHFjbXM1MDkgY29tcGFyZXNpZyAgICAxICAgICAxRS02ICAgICAtPiAxCitkcWNtczUxMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RxY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZHFjbXM1MTIgY29tcGFyZXNpZyAgICAxICAgICAxRS0zICAgICAtPiAxCitkcWNtczUxMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RxY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZHFjbXM1MTUgY29tcGFyZXNpZyAgICAxICAgICAxRS0wICAgICAtPiAwCitkcWNtczUxNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNtczUxOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNtczUxOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkcWNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkcWNtczUyMiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkcWNtczUyMyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkcWNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkcWNtczUyNSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkcWNtczUyNiBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkcWNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkcWNtczUyOCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkcWNtczUyOSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkcWNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkcWNtczUzMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkcWNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkcWNtczU0MSBjb21wYXJlc2lnICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkcWNtczU0MiBjb21wYXJlc2lnICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkcWNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkcWNtczU0NCBjb21wYXJlc2lnICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkcWNtczU0NSBjb21wYXJlc2lnICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkcWNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkcWNtczU0NyBjb21wYXJlc2lnICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkcWNtczU0OCBjb21wYXJlc2lnICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkcWNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkcWNtczU1MCBjb21wYXJlc2lnICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkcWNtczU1MSBjb21wYXJlc2lnICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkcWNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkcWNtczU1MyBjb21wYXJlc2lnICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkcWNtczU1NCBjb21wYXJlc2lnICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkcWNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkcWNtczU1NiBjb21wYXJlc2lnICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkcWNtczU1NyBjb21wYXJlc2lnICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkcWNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkcWNtczU1OSBjb21wYXJlc2lnICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkcWNtczU2MSBjb21wYXJlc2lnICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkcWNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkcWNtczU2MyBjb21wYXJlc2lnICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkcWNtczU2NCBjb21wYXJlc2lnICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkcWNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkcWNtczU2NiBjb21wYXJlc2lnICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkcWNtczU2NyBjb21wYXJlc2lnICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkcWNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkcWNtczU2OSBjb21wYXJlc2lnICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkcWNtczU3MCBjb21wYXJlc2lnICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkcWNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RxY21zNTgwIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkcWNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZHFjbXM1ODIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RxY21zNTgzIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkcWNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZHFjbXM1ODUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RxY21zNTg2IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkcWNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZHFjbXM1ODggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RxY21zNTg5IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZHFjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkcWNtczU5MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RxY21zNTkyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZHFjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkcWNtczU5NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RxY21zNTk1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZHFjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkcWNtczU5NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY21zNTk4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZHFjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkcWNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwMSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwMiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwNCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwNSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwNyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwOCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkcWNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkcWNtczYxMCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkcWNtczYxMSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkcWNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkcWNtczYxMyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkcWNtczYxNCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkcWNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkcWNtczYxNiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkcWNtczYxNyBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkcWNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkcWNtczYxOSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkcWNtczYyMCBjb21wYXJlc2lnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyMiBjb21wYXJlc2lnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyMyBjb21wYXJlc2lnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyNSBjb21wYXJlc2lnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyNiBjb21wYXJlc2lnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyOCBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYyOSBjb21wYXJlc2lnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkcWNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkcWNtczYzMSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkcWNtczYzMiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkcWNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkcWNtczYzNCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkcWNtczYzNSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkcWNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkcWNtczYzNyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkcWNtczYzOCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkcWNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDAKK2RxY21zNjQxIGNvbXBhcmVzaWcgICAwICAgIC0wICAgLT4gMAorZHFjbXM2NDIgY29tcGFyZXNpZyAgIDAgICAgLTAuMCAtPiAwCitkcWNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDAKK2RxY21zNjQ0IGNvbXBhcmVzaWcgIC0wICAgICAwICAgLT4gMAorZHFjbXM2NDUgY29tcGFyZXNpZyAgLTAgICAgLTAgICAtPiAwCitkcWNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDAKK2RxY21zNjQ3IGNvbXBhcmVzaWcgIC0wICAgICAwLjAgLT4gMAorZHFjbXM2NDggY29tcGFyZXNpZyAgIDAuMCAgIDAgICAtPiAwCitkcWNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDAKK2RxY21zNjUwIGNvbXBhcmVzaWcgICAwLjAgIC0wLjAgLT4gMAorZHFjbXM2NTEgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAtPiAwCitkcWNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDAKK2RxY21zNjUzIGNvbXBhcmVzaWcgIC0wLjAgIC0wICAgLT4gMAorZHFjbXM2NTQgY29tcGFyZXNpZyAgLTAuMCAgLTAuMCAtPiAwCitkcWNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDAKKworZHFjbXM2NTYgY29tcGFyZXNpZyAgLTBFMSAgIDAuMCAtPiAwCitkcWNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDAKK2RxY21zNjU4IGNvbXBhcmVzaWcgICAwRTEgICAwLjAgLT4gMAorZHFjbXM2NTkgY29tcGFyZXNpZyAgIDBFMiAgIDAuMCAtPiAwCitkcWNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDAKK2RxY21zNjYxIGNvbXBhcmVzaWcgIC0wRTIgICAwICAgLT4gMAorZHFjbXM2NjIgY29tcGFyZXNpZyAgIDBFMSAgIDAgICAtPiAwCitkcWNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDAKK2RxY21zNjY0IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTEgLT4gMAorZHFjbXM2NjUgY29tcGFyZXNpZyAgLTBFMiAgLTBFMSAtPiAwCitkcWNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDAKK2RxY21zNjY3IGNvbXBhcmVzaWcgICAwRTIgIC0wRTEgLT4gMAorZHFjbXM2NjggY29tcGFyZXNpZyAgLTBFMSAgLTBFMiAtPiAwCitkcWNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDAKK2RxY21zNjcwIGNvbXBhcmVzaWcgICAwRTEgIC0wRTIgLT4gMAorZHFjbXM2NzEgY29tcGFyZXNpZyAgIDBFMiAgLTBFMiAtPiAwCitkcWNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDAKK2RxY21zNjczIGNvbXBhcmVzaWcgIC0wRTIgICAwRTEgLT4gMAorZHFjbXM2NzQgY29tcGFyZXNpZyAgIDBFMSAgIDBFMSAtPiAwCitkcWNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDAKK2RxY21zNjc2IGNvbXBhcmVzaWcgIC0wRTEgICAwRTIgLT4gMAorZHFjbXM2NzcgY29tcGFyZXNpZyAgLTBFMiAgIDBFMiAtPiAwCitkcWNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDAKK2RxY21zNjc5IGNvbXBhcmVzaWcgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWNtczY4MCBjb21wYXJlc2lnICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RxY21zNjgxIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZHFjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkcWNtczY4MyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RxY21zNjg0IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZHFjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkcWNtczY4NiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RxY21zNjg3IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZHFjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkcWNtczY4OSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RxY21zNjkwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkcWNtczY5MiBjb21wYXJlc2lnICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RxY21zNjkzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkcWNtczY5NSBjb21wYXJlc2lnICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RxY21zNjk2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZHFjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkcWNtczY5OCBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RxY21zNjk5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RxY21zNzAwIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTUgLT4gMQorZHFjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNtczcwMiBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xCitkcWNtczcwMyBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAwMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjbXM3MDUgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorZHFjbXM3MDYgY29tcGFyZXNpZyAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTAzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCitkcWNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY21zNzA4IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZHFjbXM3MjEgY29tcGFyZXNpZyAxMjM0NTY3ODAwMCAxIC0+IDEKK2RxY21zNzIyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwMCAtPiAtMQorZHFjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDEKK2RxY21zNzI0IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODAwICAtPiAtMQorZHFjbXM3MjUgY29tcGFyZXNpZyAxMjM0NTY3ODkwICAxIC0+IDEKK2RxY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQorZHFjbXM3MjcgY29tcGFyZXNpZyAxMjM0NTY3ODkxICAxIC0+IDEKK2RxY21zNzI4IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkxICAtPiAtMQorZHFjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDEKK2RxY21zNzMwIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwMSAtPiAtMQorZHFjbXM3MzEgY29tcGFyZXNpZyAxMjM0NTY3ODk2ICAxIC0+IDEKK2RxY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZHFjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxCitkcWNtczc0MSBjb21wYXJlc2lnICAxICAwLjk5OTk5OSAgIC0+IDEKK2RxY21zNzQyIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTkgICAgLT4gMQorZHFjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwCitkcWNtczc0NCBjb21wYXJlc2lnICAxICAxLjAwMDAxICAgIC0+IC0xCitkcWNtczc0NSBjb21wYXJlc2lnICAxICAxLjAwMDAwMSAgIC0+IC0xCitkcWNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xCitkcWNtczc1MCBjb21wYXJlc2lnICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkcWNtczc1MSBjb21wYXJlc2lnICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkcWNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkcWNtczc1MyBjb21wYXJlc2lnICAxLjAwMDAgICAgIDEgIC0+IDAKK2RxY21zNzU0IGNvbXBhcmVzaWcgIDEuMDAwMDEgICAgMSAgLT4gMQorZHFjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxCitkcWNtczc1NiBjb21wYXJlc2lnICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RxY21zNzgwIGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCitkcWNtczc4MSBjb21wYXJlc2lnICBJbmYgIC0xMDAwICAtPiAgMQorZHFjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDEKK2RxY21zNzgzIGNvbXBhcmVzaWcgIEluZiAgLTAgICAgIC0+ICAxCitkcWNtczc4NCBjb21wYXJlc2lnICBJbmYgICAwICAgICAtPiAgMQorZHFjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDEKK2RxY21zNzg2IGNvbXBhcmVzaWcgIEluZiAgIDEwMDAgIC0+ICAxCitkcWNtczc4NyBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMAorZHFjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY21zNzg5IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkcWNtczc5MCBjb21wYXJlc2lnIC0xICAgICBJbmYgICAtPiAtMQorZHFjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTEKK2RxY21zNzkyIGNvbXBhcmVzaWcgIDAgICAgIEluZiAgIC0+IC0xCitkcWNtczc5MyBjb21wYXJlc2lnICAxICAgICBJbmYgICAtPiAtMQorZHFjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY21zNzk1IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwCitkcWNtczgwMSBjb21wYXJlc2lnIC1JbmYgIC0xMDAwICAtPiAtMQorZHFjbXM4MDIgY29tcGFyZXNpZyAtSW5mICAtMSAgICAgLT4gLTEKK2RxY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xCitkcWNtczgwNCBjb21wYXJlc2lnIC1JbmYgICAwICAgICAtPiAtMQorZHFjbXM4MDUgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gLTEKK2RxY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xCitkcWNtczgwNyBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQorZHFjbXM4MDggY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxCitkcWNtczgxMCBjb21wYXJlc2lnIC0xICAgIC1JbmYgICAtPiAgMQorZHFjbXM4MTEgY29tcGFyZXNpZyAtMCAgICAtSW5mICAgLT4gIDEKK2RxY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxCitkcWNtczgxMyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgMQorZHFjbXM4MTQgY29tcGFyZXNpZyAgMTAwMCAtSW5mICAgLT4gIDEKK2RxY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxCisKK2RxY21zODIxIGNvbXBhcmVzaWcgIE5hTiAtSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjMgY29tcGFyZXNpZyAgTmFOIC0xICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI0IGNvbXBhcmVzaWcgIE5hTiAtMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjYgY29tcGFyZXNpZyAgTmFOICAxICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI3IGNvbXBhcmVzaWcgIE5hTiAgMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjkgY29tcGFyZXNpZyAgTmFOICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODMwIGNvbXBhcmVzaWcgLUluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzIgY29tcGFyZXNpZyAtMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODMzIGNvbXBhcmVzaWcgLTAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzUgY29tcGFyZXNpZyAgMSAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM2IGNvbXBhcmVzaWcgIDEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzggY29tcGFyZXNpZyAtTmFOIC1OYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM5IGNvbXBhcmVzaWcgK05hTiAtTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkcWNtczg0MSBjb21wYXJlc2lnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQzIGNvbXBhcmVzaWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0NCBjb21wYXJlc2lnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ2IGNvbXBhcmVzaWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0NyBjb21wYXJlc2lnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ5IGNvbXBhcmVzaWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1MCBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUyIGNvbXBhcmVzaWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1MyBjb21wYXJlc2lnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU1IGNvbXBhcmVzaWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NiBjb21wYXJlc2lnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU4IGNvbXBhcmVzaWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1OSBjb21wYXJlc2lnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWNtczg2MCBjb21wYXJlc2lnICBOYU45IC1JbmYgICAtPiAgTmFOOSAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjEgY29tcGFyZXNpZyAgTmFOOCAgOTk5ICAgLT4gIE5hTjggICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODYyIGNvbXBhcmVzaWcgIE5hTjc3IEluZiAgIC0+ICBOYU43NyAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2MyBjb21wYXJlc2lnIC1OYU42NyBOYU41ICAtPiAtTmFONjcgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjQgY29tcGFyZXNpZyAtSW5mICAtTmFONCAgLT4gLU5hTjQgICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY1IGNvbXBhcmVzaWcgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMyAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NiBjb21wYXJlc2lnICBJbmYgICBOYU4yICAtPiAgTmFOMiAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjcgY29tcGFyZXNpZyAtTmFONDEgLU5hTjQyIC0+IC1OYU40MSAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY4IGNvbXBhcmVzaWcgK05hTjQxIC1OYU40MiAtPiAgTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2OSBjb21wYXJlc2lnIC1OYU40MSArTmFONDIgLT4gLU5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzAgY29tcGFyZXNpZyArTmFONDEgK05hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24KKworZHFjbXM4NzEgY29tcGFyZXNpZyAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODczIGNvbXBhcmVzaWcgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzQgY29tcGFyZXNpZyAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc2IGNvbXBhcmVzaWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzcgY29tcGFyZXNpZyAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc5IGNvbXBhcmVzaWcgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkcWNtczg4MCBjb21wYXJlc2lnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKK2RxY21zODgxIGNvbXBhcmVzaWcgOUUrNjE0NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZHFjbXM4ODIgY29tcGFyZXNpZyArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxCitkcWNtczg4MyBjb21wYXJlc2lnIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKK2RxY21zODg1IGNvbXBhcmVzaWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjbXM4ODYgY29tcGFyZXNpZyA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNtczg4NyBjb21wYXJlc2lnIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTEKK2RxY21zODg4IGNvbXBhcmVzaWcgOUUtNjE0MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzaWducworZHFjbXM5MDEgY29tcGFyZXNpZyAgMWUrNzcgIDFlKzExIC0+ICAxCitkcWNtczkwMiBjb21wYXJlc2lnICAxZSs3NyAtMWUrMTEgLT4gIDEKK2RxY21zOTAzIGNvbXBhcmVzaWcgLTFlKzc3ICAxZSsxMSAtPiAtMQorZHFjbXM5MDQgY29tcGFyZXNpZyAtMWUrNzcgLTFlKzExIC0+IC0xCitkcWNtczkwNSBjb21wYXJlc2lnICAxZS03NyAgMWUtMTEgLT4gLTEKK2RxY21zOTA2IGNvbXBhcmVzaWcgIDFlLTc3IC0xZS0xMSAtPiAgMQorZHFjbXM5MDcgY29tcGFyZXNpZyAtMWUtNzcgIDFlLTExIC0+IC0xCitkcWNtczkwOCBjb21wYXJlc2lnIC0xZS03NyAtMWUtMTEgLT4gIDEKKworLS0gTnVsbCB0ZXN0cworZHFjbXM5OTAgY29tcGFyZXNpZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY21zOTkxIGNvbXBhcmVzaWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWwuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0CmluZGV4IGJhZTM3NjEuLjEzNzAxY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0CkBAIC0xLDcwNiArMSw3MDYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCi0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KLS0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMNCi0tLSB0aGFuIGNvbXBhcmUuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxY290MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwDQotZHFjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xDQotZHFjb3QwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xDQotZHFjb3QwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xDQotZHFjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xDQotZHFjb3QwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDENCi1kcWNvdDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMA0KLWRxY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQ0KLWRxY290MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQ0KLWRxY290MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQ0KLWRxY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxDQotZHFjb3QwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDENCi1kcWNvdDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMA0KLWRxY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQ0KLWRxY290MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQ0KLWRxY290MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxDQotZHFjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDENCi1kcWNvdDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQ0KLWRxY290MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwDQotZHFjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xDQotZHFjb3QwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDENCi1kcWNvdDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQ0KLWRxY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxDQotZHFjb3QwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDENCi1kcWNvdDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMA0KLQ0KLWRxY290MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDANCi1kcWNvdDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQ0KLWRxY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xDQotZHFjb3QwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTENCi1kcWNvdDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQ0KLWRxY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDENCi1kcWNvdDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwDQotZHFjb3QwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTENCi1kcWNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQ0KLWRxY290MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xDQotZHFjb3QwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQ0KLWRxY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDENCi1kcWNvdDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwDQotZHFjb3QwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTENCi1kcWNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQ0KLWRxY290MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDENCi1kcWNvdDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxDQotZHFjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQ0KLWRxY290MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDANCi1kcWNvdDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQ0KLWRxY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDENCi1kcWNvdDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxDQotZHFjb3QwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQ0KLWRxY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDENCi1kcWNvdDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwDQotDQotZHFjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwDQotZHFjb3QwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQ0KLWRxY290MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTENCi1kcWNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xDQotZHFjb3QwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQ0KLWRxY290MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQ0KLWRxY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMA0KLWRxY290MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTENCi1kcWNvdDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xDQotZHFjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQ0KLWRxY290MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQ0KLWRxY290MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQ0KLWRxY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMA0KLWRxY290MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTENCi1kcWNvdDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xDQotZHFjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxDQotZHFjb3QwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxDQotZHFjb3QwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxDQotZHFjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwDQotZHFjb3QwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQ0KLWRxY290MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQ0KLWRxY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQ0KLWRxY290MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQ0KLWRxY290MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQ0KLWRxY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRxY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwDQotZHFjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xDQotZHFjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi1kcWNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLS0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCi1kcWNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDANCi1kcWNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xDQotZHFjb3QxMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIDcuMCAgICAtPiAxDQotZHFjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxDQotZHFjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwDQotZHFjb3QxMDUgY29tcGFyZXRvdGFsICAgMC43RSsxIDcgICAgICAtPiAwDQotZHFjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRxY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTENCi1kcWNvdDEwOCBjb21wYXJldG90YWwgICA3LjAgICAgNzBFLTEgIC0+IDANCi1kcWNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDANCi1kcWNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDENCi0NCi1kcWNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDENCi1kcWNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDENCi1kcWNvdDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDENCi1kcWNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDENCi1kcWNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDENCi1kcWNvdDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDENCi1kcWNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDENCi1kcWNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDENCi1kcWNvdDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDENCi1kcWNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxDQotZHFjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxDQotDQotZHFjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQ0KLWRxY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTENCi1kcWNvdDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xDQotZHFjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQ0KLWRxY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTENCi1kcWNvdDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xDQotZHFjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQ0KLWRxY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTENCi1kcWNvdDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xDQotZHFjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQ0KLWRxY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQotZHFjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KLWRxY290MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTENCi1kcWNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xDQotZHFjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KLWRxY290MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTENCi1kcWNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQotZHFjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KLWRxY290MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTENCi1kcWNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xDQotZHFjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KLWRxY290MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTENCi0NCi1kcWNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xDQotZHFjb3QyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQ0KLWRxY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTENCi1kcWNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xDQotZHFjb3QyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KLWRxY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTENCi1kcWNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xDQotZHFjb3QyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KLWRxY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTENCi1kcWNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xDQotZHFjb3QyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KLQ0KLWRxY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTENCi1kcWNvdDI0MSBjb21wYXJldG90YWwgIC04LjAgICAgOSAgICAgIC0+IC0xDQotZHFjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KLWRxY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTENCi1kcWNvdDI0NCBjb21wYXJldG90YWwgIC04MEUtMSAgOS4wICAgIC0+IC0xDQotZHFjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQ0KLWRxY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTENCi1kcWNvdDI0NyBjb21wYXJldG90YWwgIC04LjAgICAgOUUrMCAgIC0+IC0xDQotZHFjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KLWRxY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTENCi1kcWNvdDI1MCBjb21wYXJldG90YWwgIC04ICAgICAgOTBFLTEgIC0+IC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KLWRxY290MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDENCi1kcWNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxDQotZHFjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQ0KLWRxY290MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDENCi1kcWNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxDQotZHFjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KLWRxY290MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDENCi1kcWNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxDQotZHFjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KLWRxY290MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDENCi1kcWNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxDQotDQotZHFjb3QzMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIC03LjAgICAgLT4gMQ0KLWRxY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDENCi1kcWNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxDQotZHFjb3QzMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KLWRxY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDENCi1kcWNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxDQotZHFjb3QzMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIC03ICAgICAgLT4gMQ0KLWRxY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDENCi1kcWNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxDQotZHFjb3QzMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KLWRxY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDENCi0NCi1kcWNvdDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxDQotZHFjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQ0KLWRxY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDENCi1kcWNvdDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxDQotZHFjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQ0KLWRxY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDENCi1kcWNvdDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxDQotZHFjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQ0KLWRxY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDENCi1kcWNvdDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxDQotZHFjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCi1kcWNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMA0KLWRxY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxDQotZHFjb3Q0MDIgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDANCi1kcWNvdDQwNSBjb21wYXJldG90YWwgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KLWRxY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxDQotZHFjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDENCi1kcWNvdDQwOCBjb21wYXJldG90YWwgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KLWRxY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwDQotZHFjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xDQotDQotZHFjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQotZHFjb3Q0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQotZHFjb3Q0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xDQotZHFjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQotZHFjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQotZHFjb3Q0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xDQotZHFjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQotZHFjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQotDQotZHFjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDENCi1kcWNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KLWRxY290NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxDQotZHFjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDENCi1kcWNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KLWRxY290NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQotZHFjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDENCi1kcWNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQ0KLWRxY290NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxDQotZHFjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDENCi1kcWNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KLQ0KLQ0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KLWRxY290NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kcWNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kcWNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRxY290NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kcWNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kcWNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KLWRxY290NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCi1kcWNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kcWNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KLWRxY290NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCi1kcWNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMA0KLWRxY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQ0KLWRxY290NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxDQotZHFjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQ0KLWRxY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQ0KLWRxY290NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAxDQotZHFjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQ0KLWRxY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQ0KLWRxY290NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxDQotZHFjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQ0KLWRxY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQ0KLWRxY290NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwDQotDQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KLWRxY290NDk4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNyAgICAtPiAxDQotZHFjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDENCi1kcWNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KLWRxY290NTAxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNCAgICAtPiAxDQotZHFjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDENCi1kcWNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KLWRxY290NTA0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMSAgICAtPiAxDQotZHFjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDENCi1kcWNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KLWRxY290NTA3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS04ICAgICAtPiAxDQotZHFjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDENCi1kcWNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KLWRxY290NTEwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS01ICAgICAtPiAxDQotZHFjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDENCi1kcWNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KLWRxY290NTEzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0yICAgICAtPiAxDQotZHFjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDENCi1kcWNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KLWRxY290NTE2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KLWRxY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KLWRxY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQ0KLWRxY290NTE5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KLWRxY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KLWRxY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KLWRxY290NTIzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KLWRxY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KLWRxY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KLWRxY290NTI2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KLWRxY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KLWRxY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KLWRxY290NTI5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KLWRxY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KLWRxY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KLWRxY290NTMyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNiAgICAtPiAtMQ0KLWRxY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQ0KLS0tIExSIHN3YXANCi1kcWNvdDUzOCBjb21wYXJldG90YWwgICAgMUUtMTcgIDEgICAgICAgLT4gLTENCi1kcWNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCi1kcWNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCi1kcWNvdDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCi1kcWNvdDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCi1kcWNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCi1kcWNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCi1kcWNvdDU3MiBjb21wYXJldG90YWwgICAgMUUrMTYgIDEgICAgICAgLT4gIDENCi1kcWNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDENCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCi1kcWNvdDU3OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAtPiAxDQotZHFjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQ0KLWRxY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCi1kcWNvdDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQotZHFjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KLWRxY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCi1kcWNvdDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQotZHFjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KLWRxY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCi1kcWNvdDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQotZHFjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KLWRxY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQotZHFjb3Q1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCi1kcWNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KLWRxY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQotZHFjb3Q1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCi1kcWNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KLWRxY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQotZHFjb3Q1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCi1kcWNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KLWRxY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQotZHFjb3Q1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCi0NCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KLWRxY290NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQ0KLWRxY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KLWRxY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KLWRxY290NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQ0KLWRxY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KLWRxY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KLWRxY290NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQ0KLWRxY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KLWRxY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KLWRxY290NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQ0KLWRxY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KLWRxY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KLWRxY290NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQ0KLWRxY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KLWRxY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KLWRxY290NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQ0KLWRxY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KLWRxY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KLWRxY290NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQ0KLWRxY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KLWRxY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KLWRxY290NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQ0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFjb3Q2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDANCi1kcWNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQ0KLWRxY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxDQotZHFjb3Q2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDENCi1kcWNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTENCi1kcWNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMA0KLWRxY290NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQ0KLWRxY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQ0KLWRxY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQ0KLWRxY290NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxDQotZHFjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDENCi1kcWNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMA0KLWRxY290NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQ0KLWRxY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxDQotZHFjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDANCi1kcWNvdDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTENCi0NCi1kcWNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTENCi1kcWNvdDY1NyBjb21wYXJldG90YWwgIC0wRTIgICAwLjAgLT4gLTENCi1kcWNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQ0KLWRxY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxDQotZHFjb3Q2NjAgY29tcGFyZXRvdGFsICAtMEUxICAgMCAgIC0+IC0xDQotZHFjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xDQotZHFjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDENCi1kcWNvdDY2MyBjb21wYXJldG90YWwgICAwRTIgICAwICAgLT4gMQ0KLWRxY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwDQotZHFjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xDQotZHFjb3Q2NjYgY29tcGFyZXRvdGFsICAgMEUxICAtMEUxIC0+IDENCi1kcWNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQ0KLWRxY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxDQotZHFjb3Q2NjkgY29tcGFyZXRvdGFsICAtMEUyICAtMEUyIC0+IDANCi1kcWNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQ0KLWRxY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxDQotZHFjb3Q2NzIgY29tcGFyZXRvdGFsICAtMEUxICAgMEUxIC0+IC0xDQotZHFjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xDQotZHFjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDANCi1kcWNvdDY3NSBjb21wYXJldG90YWwgICAwRTIgICAwRTEgLT4gMQ0KLWRxY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQ0KLWRxY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQ0KLWRxY290Njc4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMiAtPiAtMQ0KLWRxY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwDQotDQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KLWRxY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQotZHFjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDENCi1kcWNvdDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQ0KLWRxY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxDQotZHFjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDENCi1kcWNvdDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQ0KLWRxY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxDQotZHFjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDENCi1kcWNvdDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQ0KLWRxY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxDQotZHFjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCi1kcWNvdDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTENCi1kcWNvdDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTENCi1kcWNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTENCi1kcWNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTENCi0NCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRxY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQ0KLWRxY290NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQ0KLWRxY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQ0KLWRxY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQ0KLWRxY290NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQ0KLWRxY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQ0KLWRxY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQ0KLWRxY290NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQ0KLWRxY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQ0KLWRxY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQ0KLWRxY290NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQ0KLWRxY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQ0KLWRxY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQ0KLWRxY290NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQ0KLWRxY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQ0KLWRxY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQ0KLWRxY290NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQ0KLWRxY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQ0KLQ0KLS0tIG9sZCByZXNpZHVlIGNhc2VzDQotZHFjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDENCi1kcWNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQ0KLWRxY290NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxDQotZHFjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDENCi1kcWNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTENCi1kcWNvdDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTENCi1kcWNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTENCi1kcWNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTENCi1kcWNvdDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTENCi1kcWNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTENCi1kcWNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTENCi1kcWNvdDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQ0KLWRxY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxDQotZHFjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDENCi0NCi0tLSBTcGVjaWFscw0KLWRxY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDENCi1kcWNvdDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxDQotZHFjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQ0KLWRxY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDENCi1kcWNvdDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxDQotZHFjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQ0KLWRxY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDENCi1kcWNvdDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwDQotZHFjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQ0KLWRxY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTENCi1kcWNvdDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xDQotZHFjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQ0KLWRxY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTENCi1kcWNvdDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xDQotZHFjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQ0KLWRxY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDANCi0NCi1kcWNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQ0KLWRxY290ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTENCi1kcWNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xDQotZHFjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQ0KLWRxY290ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTENCi1kcWNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xDQotZHFjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KLWRxY290ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDANCi1kcWNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxDQotZHFjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQ0KLWRxY290ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDENCi1kcWNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxDQotZHFjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQ0KLWRxY290ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDENCi1kcWNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxDQotDQotZHFjb3Q4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQ0KLWRxY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDENCi1kcWNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxDQotZHFjb3Q4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQ0KLWRxY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDENCi1kcWNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxDQotZHFjb3Q4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQ0KLWRxY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDENCi1kcWNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwDQotZHFjb3Q4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTENCi1kcWNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xDQotZHFjb3Q4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTENCi1kcWNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xDQotZHFjb3Q4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTENCi1kcWNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQ0KLWRxY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDANCi1kcWNvdDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxDQotZHFjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTENCi0NCi1kcWNvdDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxDQotZHFjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQ0KLWRxY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDENCi1kcWNvdDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxDQotZHFjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQ0KLWRxY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDENCi1kcWNvdDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxDQotZHFjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQ0KLWRxY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDENCi1kcWNvdDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRxY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kcWNvdDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQ0KLWRxY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTENCi1kcWNvdDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTENCi1kcWNvdDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xDQotZHFjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTENCi1kcWNvdDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQ0KLWRxY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDENCi1kcWNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotZHFjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDANCi1kcWNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQ0KLWRxY290ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQ0KLWRxY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQ0KLWRxY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQ0KLWRxY290ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQ0KLWRxY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQ0KLWRxY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQ0KLWRxY290ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQ0KLWRxY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRxY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQ0KLQ0KLWRxY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwDQotZHFjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xDQotZHFjb3Q4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDENCi1kcWNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxDQotZHFjb3Q4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDENCi1kcWNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxDQotZHFjb3Q4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDENCi1kcWNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQ0KLWRxY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxDQotZHFjb3Q4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDENCi0NCi0tLSBOYU5zIHdpdGggcGF5bG9hZA0KLWRxY290OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDENCi1kcWNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxDQotZHFjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQ0KLWRxY290OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xDQotZHFjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQ0KLWRxY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDENCi1kcWNvdDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQ0KLQ0KLWRxY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDENCi1kcWNvdDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxDQotZHFjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTENCi1kcWNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQ0KLWRxY290OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xDQotZHFjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDENCi1kcWNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQ0KLWRxY290OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxDQotDQotZHFjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDENCi1kcWNvdDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQ0KLWRxY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRxY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRxY290OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQ0KLWRxY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWRxY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQ0KLWRxY290OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQ0KLQ0KLWRxY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTENCi1kcWNvdDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxDQotZHFjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQ0KLWRxY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1kcWNvdDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQotZHFjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQ0KLWRxY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1kcWNvdDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xDQotZHFjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQ0KLQ0KLS0tIHNwcmVhZCB6ZXJvcw0KLWRxY290MTExMCBjb21wYXJldG90YWwgICAwRS02MTQzICAwICAgICAgIC0+IC0xDQotZHFjb3QxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTAgICAgICAgLT4gIDENCi1kcWNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMCAgICAgICAtPiAtMQ0KLWRxY290MTExMyBjb21wYXJldG90YWwgIC0wRS02MTQzIC0wICAgICAgIC0+ICAxDQotZHFjb3QxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDBFKzYxNDQgIC0+IC0xDQotZHFjb3QxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxDQotZHFjb3QxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgIDBFKzYxNDQgIC0+IC0xDQotZHFjb3QxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxDQotZHFjb3QxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrNjE0NCAgLT4gLTENCi1kcWNvdDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQ0KLWRxY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzYxNDQgIC0+IC0xDQotZHFjb3QxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrNjE0NCAgLT4gIDENCi0NCi1kcWNvdDExMzAgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAgMCAgICAgICAtPiAgMQ0KLWRxY290MTEzMSBjb21wYXJldG90YWwgICAwRSs2MTQ0IC0wICAgICAgIC0+ICAxDQotZHFjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgIDAgICAgICAgLT4gLTENCi1kcWNvdDExMzMgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAtMCAgICAgICAtPiAtMQ0KLWRxY290MTEzNCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwRS02MTQzICAtPiAgMQ0KLWRxY290MTEzNSBjb21wYXJldG90YWwgICAwRSs2MTQ0IC0wRS02MTQzICAtPiAgMQ0KLWRxY290MTEzNiBjb21wYXJldG90YWwgIC0wRSs2MTQ0ICAwRS02MTQzICAtPiAtMQ0KLWRxY290MTEzNyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wRS02MTQzICAtPiAtMQ0KLWRxY290MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTYxNDMgIC0+ICAxDQotZHFjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtNjE0MyAgLT4gIDENCi1kcWNvdDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS02MTQzICAtPiAtMQ0KLWRxY290MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTYxNDMgIC0+IC0xDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxY290OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorZHFjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCitkcWNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKK2RxY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorZHFjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCitkcWNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQorZHFjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2RxY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQorZHFjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCitkcWNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2RxY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCitkcWNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQorZHFjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2RxY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQorZHFjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCitkcWNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorZHFjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKK2RxY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCitkcWNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorZHFjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCitkcWNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQorZHFjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2RxY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCitkcWNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQorZHFjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworZHFjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAorZHFjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKK2RxY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitkcWNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQorZHFjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKK2RxY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2RxY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKK2RxY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCitkcWNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorZHFjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKK2RxY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKK2RxY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2RxY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKK2RxY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCitkcWNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorZHFjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQorZHFjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQorZHFjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorZHFjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAorZHFjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKK2RxY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2RxY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKK2RxY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKK2RxY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2RxY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKKworZHFjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCitkcWNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitkcWNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCitkcWNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCitkcWNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitkcWNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKK2RxY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAorZHFjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorZHFjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQorZHFjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQorZHFjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitkcWNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKK2RxY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAorZHFjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorZHFjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQorZHFjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCitkcWNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2RxY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQorZHFjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCitkcWNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitkcWNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKK2RxY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQorZHFjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitkcWNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKK2RxY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCitkcWNvdDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKK2RxY290MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcWNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2RxY290MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMAorZHFjb3QxMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIDcgICAgICAtPiAtMQorZHFjb3QxMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIDcuMCAgICAtPiAxCitkcWNvdDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDEKK2RxY290MTA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3LjAgICAgLT4gMAorZHFjb3QxMDUgY29tcGFyZXRvdGFsICAgMC43RSsxIDcgICAgICAtPiAwCitkcWNvdDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvdDEwNyBjb21wYXJldG90YWwgICA3LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvdDEwOCBjb21wYXJldG90YWwgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RxY290MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMAorZHFjb3QxMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIDcwRS0xICAtPiAxCisKK2RxY290MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQorZHFjb3QxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxCitkcWNvdDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDEKK2RxY290MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQorZHFjb3QxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxCitkcWNvdDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RxY290MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQorZHFjb3QxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxCitkcWNvdDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RxY290MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RxY290MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQorCitkcWNvdDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xCitkcWNvdDE0MSBjb21wYXJldG90YWwgICA4LjAgICAgOSAgICAgIC0+IC0xCitkcWNvdDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xCitkcWNvdDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xCitkcWNvdDE0NCBjb21wYXJldG90YWwgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvdDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvdDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvdDE0NyBjb21wYXJldG90YWwgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvdDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvdDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xCitkcWNvdDE1MCBjb21wYXJldG90YWwgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RxY290MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RxY290MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RxY290MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RxY290MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RxY290MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RxY290MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RxY290MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RxY290MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RxY290MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RxY290MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RxY290MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZHFjb3QyMjAgY29tcGFyZXRvdGFsICAtOC4wICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQorZHFjb3QyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQorZHFjb3QyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQorZHFjb3QyMjYgY29tcGFyZXRvdGFsICAtODBFLTEgIDcgICAgICAtPiAtMQorZHFjb3QyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQorZHFjb3QyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQorZHFjb3QyMjkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZHFjb3QyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvdDI0MCBjb21wYXJldG90YWwgIC04LjAgICAgOS4wICAgIC0+IC0xCitkcWNvdDI0MSBjb21wYXJldG90YWwgIC04LjAgICAgOSAgICAgIC0+IC0xCitkcWNvdDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xCitkcWNvdDI0MyBjb21wYXJldG90YWwgIC04RSswICAgOS4wICAgIC0+IC0xCitkcWNvdDI0NCBjb21wYXJldG90YWwgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvdDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvdDI0NiBjb21wYXJldG90YWwgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvdDI0NyBjb21wYXJldG90YWwgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvdDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvdDI0OSBjb21wYXJldG90YWwgIC04ICAgICAgMC45RSsxIC0+IC0xCitkcWNvdDI1MCBjb21wYXJldG90YWwgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RxY290MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RxY290MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RxY290MzAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RxY290MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RxY290MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RxY290MzA1IGNvbXBhcmV0b3RhbCAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RxY290MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RxY290MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY290MzA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RxY290MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RxY290MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZHFjb3QzMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIC03LjAgICAgLT4gMQorZHFjb3QzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQorZHFjb3QzMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIC03LjAgICAgLT4gMQorZHFjb3QzMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC03LjAgICAgLT4gMQorZHFjb3QzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQorZHFjb3QzMjUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC03ICAgICAgLT4gMQorZHFjb3QzMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIC03ICAgICAgLT4gMQorZHFjb3QzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQorZHFjb3QzMjggY29tcGFyZXRvdGFsICAgOC4wICAgIC03MEUtMSAgLT4gMQorZHFjb3QzMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZHFjb3QzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvdDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxCitkcWNvdDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxCitkcWNvdDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxCitkcWNvdDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxCitkcWNvdDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkcWNvdDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxCitkcWNvdDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxCitkcWNvdDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxCitkcWNvdDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxCitkcWNvdDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxCitkcWNvdDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RxY290NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkcWNvdDQwMSBjb21wYXJldG90YWwgICAtNy4wICAgIC03ICAgICAgLT4gMQorZHFjb3Q0MDIgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNy4wICAgIC0+IC0xCitkcWNvdDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTEKK2RxY290NDA0IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkcWNvdDQwNSBjb21wYXJldG90YWwgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZHFjb3Q0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDEKK2RxY290NDA3IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTdFKzAgICAtPiAxCitkcWNvdDQwOCBjb21wYXJldG90YWwgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZHFjb3Q0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RxY290NDEwIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNvdDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RxY290NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZHFjb3Q0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkcWNvdDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RxY290NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkcWNvdDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RxY290NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZHFjb3Q0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkcWNvdDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RxY290NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNvdDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQorZHFjb3Q0NDEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RxY290NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZHFjb3Q0NDQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RxY290NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkcWNvdDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQorZHFjb3Q0NDcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RxY290NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkcWNvdDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjb3Q0NTAgY29tcGFyZXRvdGFsICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY290NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzUgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzggY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0ODEgY29tcGFyZXRvdGFsIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkcWNvdDQ4NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDEKK2RxY290NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxCitkcWNvdDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAxCitkcWNvdDQ5MCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDEKK2RxY290NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAxCitkcWNvdDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxCitkcWNvdDQ5MyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDEKK2RxY290NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxCitkcWNvdDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAxCitkcWNvdDQ5NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDEKK2RxY290NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY290NDk4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNyAgICAtPiAxCitkcWNvdDQ5OSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTYgICAgLT4gMQorZHFjb3Q1MDAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY290NTAxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNCAgICAtPiAxCitkcWNvdDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZHFjb3Q1MDMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RxY290NTA0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMSAgICAtPiAxCitkcWNvdDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZHFjb3Q1MDYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RxY290NTA3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS04ICAgICAtPiAxCitkcWNvdDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZHFjb3Q1MDkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RxY290NTEwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS01ICAgICAtPiAxCitkcWNvdDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZHFjb3Q1MTIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RxY290NTEzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0yICAgICAtPiAxCitkcWNvdDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZHFjb3Q1MTUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RxY290NTE2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxICAgICAtPiAtMQorZHFjb3Q1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvdDUxOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY290NTE5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs0ICAgICAtPiAtMQorZHFjb3Q1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkcWNvdDUyMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RxY290NTIzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs3ICAgICAtPiAtMQorZHFjb3Q1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkcWNvdDUyNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RxY290NTI2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMCAgICAtPiAtMQorZHFjb3Q1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkcWNvdDUyOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RxY290NTI5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMyAgICAtPiAtMQorZHFjb3Q1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkcWNvdDUzMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKK2RxY290NTMyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNiAgICAtPiAtMQorZHFjb3Q1MzMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE3ICAgIC0+IC0xCistLSBMUiBzd2FwCitkcWNvdDUzOCBjb21wYXJldG90YWwgICAgMUUtMTcgIDEgICAgICAgLT4gLTEKK2RxY290NTM5IGNvbXBhcmV0b3RhbCAgICAxRS0xNiAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkcWNvdDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RxY290NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkcWNvdDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RxY290NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkcWNvdDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RxY290NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RxY290NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RxY290NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkcWNvdDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RxY290NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkcWNvdDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RxY290NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkcWNvdDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RxY290NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkcWNvdDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RxY290NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkcWNvdDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RxY290NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCitkcWNvdDU3MiBjb21wYXJldG90YWwgICAgMUUrMTYgIDEgICAgICAgLT4gIDEKK2RxY290NTczIGNvbXBhcmV0b3RhbCAgICAxRSsxNyAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWNvdDU3OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAtPiAxCitkcWNvdDU3OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAtPiAxCitkcWNvdDU4MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkcWNvdDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkcWNvdDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitkcWNvdDU4MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkcWNvdDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkcWNvdDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitkcWNvdDU4NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkcWNvdDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkcWNvdDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitkcWNvdDU4OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZHFjb3Q1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RxY290NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitkcWNvdDU5MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZHFjb3Q1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RxY290NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitkcWNvdDU5NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZHFjb3Q1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY290NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvdDU5OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZHFjb3Q1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RxY290NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwMiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwOCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkcWNvdDYxMSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RxY290NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorZHFjb3Q2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkcWNvdDYxNCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RxY290NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorZHFjb3Q2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkcWNvdDYxNyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RxY290NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorZHFjb3Q2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkcWNvdDYyMCBjb21wYXJldG90YWwgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyMyBjb21wYXJldG90YWwgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyNiBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyOSBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorZHFjb3Q2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkcWNvdDYzMiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RxY290NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorZHFjb3Q2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkcWNvdDYzNSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RxY290NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorZHFjb3Q2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkcWNvdDYzOCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RxY290NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorCistLSBleHRlbmRlZCB6ZXJvcworZHFjb3Q2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDAKK2RxY290NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxCitkcWNvdDY0MiBjb21wYXJldG90YWwgICAwICAgIC0wLjAgLT4gMQorZHFjb3Q2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDEKK2RxY290NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQorZHFjb3Q2NDUgY29tcGFyZXRvdGFsICAtMCAgICAtMCAgIC0+IDAKK2RxY290NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQorZHFjb3Q2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xCitkcWNvdDY0OCBjb21wYXJldG90YWwgICAwLjAgICAwICAgLT4gLTEKK2RxY290NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxCitkcWNvdDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQorZHFjb3Q2NTEgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wIC0+IDAKK2RxY290NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQorZHFjb3Q2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDEKK2RxY290NjU0IGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAuMCAtPiAwCitkcWNvdDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTEKKworZHFjb3Q2NTYgY29tcGFyZXRvdGFsICAtMEUxICAgMC4wIC0+IC0xCitkcWNvdDY1NyBjb21wYXJldG90YWwgIC0wRTIgICAwLjAgLT4gLTEKK2RxY290NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxCitkcWNvdDY1OSBjb21wYXJldG90YWwgICAwRTIgICAwLjAgLT4gMQorZHFjb3Q2NjAgY29tcGFyZXRvdGFsICAtMEUxICAgMCAgIC0+IC0xCitkcWNvdDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTEKK2RxY290NjYyIGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAgICAtPiAxCitkcWNvdDY2MyBjb21wYXJldG90YWwgICAwRTIgICAwICAgLT4gMQorZHFjb3Q2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDAKK2RxY290NjY1IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMSAtPiAtMQorZHFjb3Q2NjYgY29tcGFyZXRvdGFsICAgMEUxICAtMEUxIC0+IDEKK2RxY290NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxCitkcWNvdDY2OCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTIgLT4gMQorZHFjb3Q2NjkgY29tcGFyZXRvdGFsICAtMEUyICAtMEUyIC0+IDAKK2RxY290NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxCitkcWNvdDY3MSBjb21wYXJldG90YWwgICAwRTIgIC0wRTIgLT4gMQorZHFjb3Q2NzIgY29tcGFyZXRvdGFsICAtMEUxICAgMEUxIC0+IC0xCitkcWNvdDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTEKK2RxY290Njc0IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMSAtPiAwCitkcWNvdDY3NSBjb21wYXJldG90YWwgICAwRTIgICAwRTEgLT4gMQorZHFjb3Q2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xCitkcWNvdDY3NyBjb21wYXJldG90YWwgIC0wRTIgICAwRTIgLT4gLTEKK2RxY290Njc4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMiAtPiAtMQorZHFjb3Q2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZHFjb3Q2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RxY290NjgxIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAgICAgICAgICAtPiAxCitkcWNvdDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQorZHFjb3Q2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDEKK2RxY290Njg0IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAxCitkcWNvdDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQorZHFjb3Q2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDEKK2RxY290Njg3IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAxCitkcWNvdDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQorZHFjb3Q2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDEKK2RxY290NjkwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkcWNvdDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTEKK2RxY290NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTEKK2RxY290Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTEKK2RxY290Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQorZHFjb3Q2OTkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IC0xCisKKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWNvdDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDEKK2RxY290NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQorZHFjb3Q3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxCitkcWNvdDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTEKK2RxY290NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQorZHFjb3Q3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xCitkcWNvdDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDEKK2RxY290NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQorZHFjb3Q3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxCitkcWNvdDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTEKK2RxY290NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQorZHFjb3Q3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xCitkcWNvdDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTEKK2RxY290NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQorZHFjb3Q3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xCitkcWNvdDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDEKK2RxY290NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQorZHFjb3Q3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxCisKKy0tIG9sZCByZXNpZHVlIGNhc2VzCitkcWNvdDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQorZHFjb3Q3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDEKK2RxY290NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxCitkcWNvdDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQorZHFjb3Q3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xCitkcWNvdDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RxY290NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQorZHFjb3Q3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkcWNvdDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RxY290NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQorZHFjb3Q3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xCitkcWNvdDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQorZHFjb3Q3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RxY290NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIFNwZWNpYWxzCitkcWNvdDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCitkcWNvdDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxCitkcWNvdDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxCitkcWNvdDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxCitkcWNvdDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxCitkcWNvdDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxCitkcWNvdDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxCitkcWNvdDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCitkcWNvdDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xCitkcWNvdDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitkcWNvdDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xCitkcWNvdDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY290ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2RxY290ODAxIGNvbXBhcmV0b3RhbCAtSW5mICAtMTAwMCAgLT4gLTEKK2RxY290ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTEKK2RxY290ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTEKK2RxY290ODA0IGNvbXBhcmV0b3RhbCAtSW5mICAgMCAgICAgLT4gLTEKK2RxY290ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTEKK2RxY290ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTEKK2RxY290ODA3IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RxY290ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2RxY290ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDEKK2RxY290ODEwIGNvbXBhcmV0b3RhbCAtMSAgICAtSW5mICAgLT4gIDEKK2RxY290ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDEKK2RxY290ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDEKK2RxY290ODEzIGNvbXBhcmV0b3RhbCAgMSAgICAtSW5mICAgLT4gIDEKK2RxY290ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDEKK2RxY290ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKKworZHFjb3Q4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQorZHFjb3Q4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQorZHFjb3Q4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQorZHFjb3Q4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQorZHFjb3Q4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQorZHFjb3Q4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQorZHFjb3Q4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQorZHFjb3Q4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQorZHFjb3Q4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMAorZHFjb3Q4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTEKK2RxY290ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xCitkcWNvdDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTEKK2RxY290ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTEKK2RxY290ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xCitkcWNvdDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwCitkcWNvdDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxCitkcWNvdDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQorCitkcWNvdDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxCitkcWNvdDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxCitkcWNvdDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxCitkcWNvdDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxCitkcWNvdDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxCitkcWNvdDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxCitkcWNvdDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxCitkcWNvdDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxCitkcWNvdDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxCitkcWNvdDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQorZHFjb3Q4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWNvdDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQorZHFjb3Q4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTEKK2RxY290ODU0IGNvbXBhcmV0b3RhbCAtSW5mICBzTmFOICAgLT4gIC0xCitkcWNvdDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODU3IGNvbXBhcmV0b3RhbCAtMCAgICBzTmFOICAgLT4gIC0xCitkcWNvdDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODYwIGNvbXBhcmV0b3RhbCAgMTAwMCBzTmFOICAgLT4gIC0xCitkcWNvdDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQorZHFjb3Q4NjMgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWNvdDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMAorZHFjb3Q4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDEKK2RxY290ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQorZHFjb3Q4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xCitkcWNvdDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTEKK2RxY290ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQorZHFjb3Q4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xCitkcWNvdDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTEKK2RxY290ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQorZHFjb3Q4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xCitkcWNvdDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTEKKworZHFjb3Q4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDAKK2RxY290ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQorZHFjb3Q4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDEKK2RxY290ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxCitkcWNvdDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDEKK2RxY290ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDEKK2RxY290ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDEKKworLS0gTmFOcyB3aXRoIHBheWxvYWQKK2RxY290OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDEKK2RxY290OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDEKK2RxY290OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDEKK2RxY290OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xCitkcWNvdDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxCitkcWNvdDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxCitkcWNvdDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQorCitkcWNvdDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxCitkcWNvdDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxCitkcWNvdDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQorZHFjb3Q5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTEKK2RxY290OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xCitkcWNvdDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQorZHFjb3Q5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTEKK2RxY290OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxCisKK2RxY290OTgwIGNvbXBhcmV0b3RhbCAtc05hTjc3MSAtc05hTjc3MiAtPiAxCitkcWNvdDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQorZHFjb3Q5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWNvdDk4MyBjb21wYXJldG90YWwgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RxY290OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQorZHFjb3Q5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWNvdDk4NiBjb21wYXJldG90YWwgLXNOYU43NzIgK3NOYU43NzEgLT4gLTEKK2RxY290OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkcWNvdDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xCitkcWNvdDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxCitkcWNvdDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkcWNvdDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitkcWNvdDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxCitkcWNvdDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkcWNvdDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xCitkcWNvdDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xCitkcWNvdDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZHFjb3QxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDAgICAgICAgLT4gLTEKK2RxY290MTExMSBjb21wYXJldG90YWwgICAwRS02MTQzIC0wICAgICAgIC0+ICAxCitkcWNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMCAgICAgICAtPiAtMQorZHFjb3QxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTAgICAgICAgLT4gIDEKK2RxY290MTExNCBjb21wYXJldG90YWwgICAwRS02MTQzICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTEKK2RxY290MTExNyBjb21wYXJldG90YWwgIC0wRS02MTQzIC0wRSs2MTQ0ICAtPiAgMQorZHFjb3QxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrNjE0NCAgLT4gLTEKK2RxY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrNjE0NCAgLT4gIDEKKworZHFjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDAgICAgICAgLT4gIDEKK2RxY290MTEzMSBjb21wYXJldG90YWwgICAwRSs2MTQ0IC0wICAgICAgIC0+ICAxCitkcWNvdDExMzIgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMCAgICAgICAtPiAtMQorZHFjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTAgICAgICAgLT4gLTEKK2RxY290MTEzNCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwRS02MTQzICAtPiAgMQorZHFjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTBFLTYxNDMgIC0+ICAxCitkcWNvdDExMzYgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMEUtNjE0MyAgLT4gLTEKK2RxY290MTEzNyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wRS02MTQzICAtPiAtMQorZHFjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtNjE0MyAgLT4gIDEKK2RxY290MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTYxNDMgIC0+ICAxCitkcWNvdDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS02MTQzICAtPiAtMQorZHFjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtNjE0MyAgLT4gLTEKKworLS0gTnVsbCB0ZXN0cworZHFjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY290OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWxNYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CmluZGV4IDQ4YjNlMDguLjBiODFiZmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0CkBAIC0xLDcwNiArMSw3MDYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCi0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KLS0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMNCi0tLSB0aGFuIGNvbXBhcmUuDQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxY3RtMDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMA0KLWRxY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQ0KLWRxY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQ0KLWRxY3RtMDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQ0KLWRxY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMA0KLWRxY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQ0KLWRxY3RtMDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMA0KLWRxY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQ0KLWRxY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMA0KLWRxY3RtMDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQ0KLWRxY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQ0KLWRxY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQ0KLWRxY3RtMDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMA0KLWRxY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQ0KLWRxY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQ0KLWRxY3RtMDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQ0KLWRxY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMA0KLWRxY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQ0KLWRxY3RtMDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMA0KLWRxY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQ0KLWRxY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMA0KLWRxY3RtMDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQ0KLWRxY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQ0KLWRxY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQ0KLWRxY3RtMDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMA0KLQ0KLWRxY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwDQotZHFjdG0wMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDENCi1kcWN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQ0KLWRxY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxDQotZHFjdG0wMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDANCi1kcWN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQ0KLWRxY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwDQotZHFjdG0wMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDENCi1kcWN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMA0KLWRxY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xDQotZHFjdG0wNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTENCi1kcWN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQ0KLWRxY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwDQotZHFjdG0wNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTENCi1kcWN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQ0KLWRxY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xDQotZHFjdG0wNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDANCi1kcWN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQ0KLWRxY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwDQotZHFjdG0wNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTENCi1kcWN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMA0KLWRxY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxDQotZHFjdG0wNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDENCi1kcWN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQ0KLWRxY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwDQotDQotZHFjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMA0KLWRxY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDENCi1kcWN0bTA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxDQotZHFjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQ0KLWRxY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDANCi1kcWN0bTA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xDQotZHFjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMA0KLWRxY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDENCi1kcWN0bTA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwDQotZHFjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQ0KLWRxY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTENCi1kcWN0bTA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xDQotZHFjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMA0KLWRxY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTENCi1kcWN0bTA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xDQotZHFjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQ0KLWRxY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDANCi1kcWN0bTA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxDQotZHFjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMA0KLWRxY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTENCi1kcWN0bTA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwDQotZHFjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQ0KLWRxY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDENCi1kcWN0bTA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxDQotZHFjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMA0KLQ0KLS0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KLWRxY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMA0KLWRxY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMA0KLWRxY3RtMDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMA0KLWRxY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMA0KLQ0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KLS0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCi1kcWN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwDQotZHFjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQ0KLWRxY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMA0KLWRxY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCi1kcWN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xDQotZHFjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQ0KLWRxY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCi1kcWN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwDQotZHFjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRxY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxDQotZHFjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxDQotZHFjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KLWRxY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCi1kcWN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxDQotZHFjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQ0KLWRxY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQotZHFjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQ0KLQ0KLWRxY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTENCi1kcWN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQotZHFjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQ0KLWRxY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTENCi1kcWN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQotZHFjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KLWRxY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTENCi1kcWN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQotZHFjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQ0KLWRxY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTENCi1kcWN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQotDQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KLWRxY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDANCi1kcWN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xDQotZHFjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDENCi1kcWN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwDQotZHFjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KLWRxY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTENCi1kcWN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xDQotZHFjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KLWRxY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDANCi1kcWN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxDQotDQotZHFjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDENCi1kcWN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxDQotZHFjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KLWRxY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDENCi1kcWN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxDQotZHFjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KLWRxY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDENCi1kcWN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxDQotZHFjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KLWRxY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDENCi0NCi1kcWN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xDQotZHFjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KLWRxY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTENCi1kcWN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xDQotZHFjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KLWRxY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTENCi1kcWN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xDQotZHFjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KLWRxY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTENCi1kcWN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xDQotZHFjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KLQ0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCi1kcWN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMA0KLWRxY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xDQotZHFjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KLWRxY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwDQotZHFjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCi1kcWN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KLWRxY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xDQotZHFjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCi1kcWN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KLWRxY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZHFjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KLWRxY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCi1kcWN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KLWRxY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxDQotZHFjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCi1kcWN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQ0KLWRxY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxDQotZHFjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCi1kcWN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KLQ0KLWRxY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCi1kcWN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KLWRxY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCi1kcWN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KLWRxY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xDQotZHFjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCi1kcWN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KLWRxY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xDQotZHFjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCi0NCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQotZHFjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwDQotZHFjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xDQotZHFjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwDQotZHFjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQotZHFjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xDQotZHFjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xDQotZHFjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQotZHFjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwDQotZHFjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZHFjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxDQotZHFjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxDQotZHFjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxDQotZHFjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQotZHFjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxDQotZHFjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxDQotZHFjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQotZHFjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxDQotDQotZHFjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQotZHFjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQotZHFjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xDQotZHFjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xDQotZHFjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQotZHFjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xDQotZHFjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xDQotZHFjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQotDQotDQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQotZHFjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRxY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRxY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZHFjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRxY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRxY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQotZHFjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KLWRxY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRxY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQotZHFjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KLWRxY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMA0KLWRxY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDENCi1kcWN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCi1kcWN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQ0KLWRxY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDENCi1kcWN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDENCi1kcWN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQ0KLWRxY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDENCi1kcWN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCi1kcWN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQ0KLWRxY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDENCi1kcWN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDANCi0NCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQotZHFjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxDQotZHFjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxDQotZHFjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxDQotZHFjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxDQotZHFjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQotZHFjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxDQotZHFjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxDQotZHFjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQotZHFjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxDQotZHFjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxDQotZHFjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQotZHFjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxDQotZHFjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxDQotZHFjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQotZHFjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxDQotZHFjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxDQotZHFjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQotZHFjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwDQotZHFjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xDQotZHFjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQotZHFjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xDQotZHFjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xDQotZHFjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQotZHFjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xDQotZHFjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xDQotZHFjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQotZHFjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xDQotZHFjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xDQotZHFjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQotZHFjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xDQotZHFjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xDQotZHFjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQotZHFjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xDQotZHFjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xDQotZHFjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xDQotLS0gTFIgc3dhcA0KLWRxY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQ0KLWRxY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMA0KLWRxY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQ0KLWRxY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQ0KLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KLWRxY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxDQotZHFjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDENCi1kcWN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KLWRxY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxDQotZHFjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDENCi1kcWN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KLWRxY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxDQotZHFjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDENCi1kcWN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KLWRxY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxDQotZHFjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDENCi1kcWN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KLWRxY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xDQotZHFjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTENCi1kcWN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KLWRxY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xDQotZHFjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTENCi1kcWN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KLWRxY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xDQotZHFjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTENCi1kcWN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KLWRxY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xDQotDQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCi1kcWN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDENCi1kcWN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCi1kcWN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDENCi1kcWN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDENCi1kcWN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCi1kcWN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDENCi1kcWN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDENCi1kcWN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCi1kcWN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDENCi1kcWN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDENCi1kcWN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCi1kcWN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDENCi1kcWN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDENCi1kcWN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCi1kcWN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDENCi1kcWN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDENCi1kcWN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCi1kcWN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDENCi1kcWN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDENCi1kcWN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCi1kcWN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDENCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRxY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMA0KLWRxY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KLWRxY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQ0KLWRxY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KLWRxY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMA0KLWRxY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQ0KLWRxY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQ0KLWRxY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQ0KLWRxY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KLWRxY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMA0KLWRxY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQ0KLWRxY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KLWRxY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMA0KLWRxY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMA0KLQ0KLWRxY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KLWRxY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQ0KLWRxY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQ0KLWRxY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KLWRxY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQ0KLWRxY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMA0KLWRxY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KLWRxY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMA0KLWRxY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQ0KLWRxY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KLWRxY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMA0KLWRxY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQ0KLWRxY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KLWRxY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMA0KLWRxY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQ0KLWRxY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KLWRxY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQ0KLWRxY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQ0KLWRxY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KLWRxY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQ0KLWRxY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMA0KLQ0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCi1kcWN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDANCi1kcWN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCi1kcWN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDENCi1kcWN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDENCi1kcWN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCi1kcWN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDENCi1kcWN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDENCi1kcWN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCi1kcWN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDENCi1kcWN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDENCi1kcWN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCi1kcWN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTENCi1kcWN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCi0NCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KLWRxY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQ0KLWRxY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KLWRxY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQ0KLWRxY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQ0KLWRxY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KLWRxY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQ0KLWRxY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQ0KLWRxY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KLWRxY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQ0KLWRxY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQ0KLWRxY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KLWRxY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQ0KLWRxY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KLWRxY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KLWRxY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KLWRxY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KLWRxY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KLWRxY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KLQ0KLS0tIG9sZCByZXNpZHVlIGNhc2VzDQotZHFjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQotZHFjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxDQotZHFjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxDQotZHFjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQotZHFjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xDQotZHFjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xDQotZHFjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQotZHFjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xDQotZHFjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xDQotZHFjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQotZHFjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xDQotZHFjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxDQotZHFjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQotZHFjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxDQotDQotLS0gU3BlY2lhbHMNCi1kcWN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KLWRxY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxDQotZHFjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDENCi1kcWN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KLWRxY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxDQotZHFjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDENCi1kcWN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KLWRxY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQotZHFjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTENCi1kcWN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KLWRxY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xDQotZHFjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTENCi1kcWN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KLWRxY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xDQotZHFjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTENCi1kcWN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KLQ0KLWRxY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQotZHFjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDENCi1kcWN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KLWRxY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxDQotZHFjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDENCi1kcWN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KLWRxY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxDQotZHFjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCi1kcWN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KLWRxY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xDQotZHFjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTENCi1kcWN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KLWRxY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xDQotZHFjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTENCi1kcWN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KLWRxY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQotDQotZHFjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDENCi1kcWN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KLWRxY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxDQotZHFjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDENCi1kcWN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KLWRxY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotZHFjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDENCi1kcWN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KLWRxY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwDQotZHFjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQotZHFjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xDQotZHFjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQotZHFjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDANCi1kcWN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMA0KLWRxY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQotDQotZHFjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDANCi1kcWN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTENCi1kcWN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KLWRxY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxDQotZHFjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDENCi1kcWN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KLWRxY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxDQotZHFjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDENCi1kcWN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KLWRxY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRxY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQotDQotZHFjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCi1kcWN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQ0KLWRxY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KLWRxY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxDQotZHFjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCi0NCi1kcWN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCi1kcWN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xDQotZHFjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxDQotZHFjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQotZHFjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxDQotZHFjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxDQotZHFjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQotZHFjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxDQotZHFjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxDQotZHFjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KLWRxY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMA0KLQ0KLWRxY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMA0KLWRxY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KLWRxY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xDQotZHFjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KLWRxY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xDQotZHFjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KLWRxY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTENCi1kcWN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xDQotZHFjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQotZHFjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwDQotDQotLS0gTmFOcyB3aXRoIHBheWxvYWQNCi1kcWN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQ0KLWRxY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQotZHFjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDENCi1kcWN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQ0KLWRxY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KLWRxY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQ0KLWRxY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQ0KLQ0KLWRxY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KLWRxY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQ0KLWRxY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQ0KLWRxY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KLWRxY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQ0KLWRxY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQ0KLWRxY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KLWRxY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQ0KLQ0KLWRxY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTENCi1kcWN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQotZHFjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KLWRxY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTENCi1kcWN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQotZHFjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KLWRxY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDENCi1kcWN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQotDQotZHFjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDENCi1kcWN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQ0KLWRxY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQotZHFjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTENCi1kcWN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQ0KLWRxY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQotZHFjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTENCi1kcWN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQ0KLWRxY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQotDQotLS0gc3ByZWFkIHplcm9zDQotZHFjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwICAgICAgICAtPiAgLTENCi1kcWN0bTExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTAgICAgICAgIC0+ICAtMQ0KLWRxY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMCAgICAgICAgLT4gIC0xDQotZHFjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wICAgICAgICAtPiAgLTENCi1kcWN0bTExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQ0KLWRxY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xDQotZHFjdG0xMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzYxNDQgICAtPiAgLTENCi1kcWN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrNjE0NCAgIC0+ICAtMQ0KLQ0KLWRxY3RtMTEzMCBjb21wYXJldG90bWFnICAgMEUrNjE0NCAgMCAgICAgICAgLT4gICAxDQotZHFjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wICAgICAgICAtPiAgIDENCi1kcWN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQ0KLWRxY3RtMTEzMyBjb21wYXJldG90bWFnICAtMEUrNjE0NCAtMCAgICAgICAgLT4gICAxDQotZHFjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTYxNDMgICAtPiAgIDENCi1kcWN0bTExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtNjE0MyAgIC0+ICAgMQ0KLWRxY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS02MTQzICAgLT4gICAxDQotZHFjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTYxNDMgICAtPiAgIDENCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFjdG05OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlciAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCitkcWN0bTAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKK2RxY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQorZHFjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCitkcWN0bTAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKK2RxY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQorZHFjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCitkcWN0bTAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKK2RxY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAorZHFjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCitkcWN0bTAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKK2RxY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQorZHFjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCitkcWN0bTAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKK2RxY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQorZHFjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCitkcWN0bTAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKK2RxY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQorZHFjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCitkcWN0bTAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKK2RxY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAorZHFjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCitkcWN0bTAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKK2RxY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQorZHFjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCisKK2RxY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCitkcWN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQorZHFjdG0wMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKK2RxY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCitkcWN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAorZHFjdG0wMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKK2RxY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCitkcWN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQorZHFjdG0wMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKK2RxY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCitkcWN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQorZHFjdG0wNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKK2RxY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCitkcWN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQorZHFjdG0wNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKK2RxY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCitkcWN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAorZHFjdG0wNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKK2RxY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCitkcWN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQorZHFjdG0wNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKK2RxY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCitkcWN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQorZHFjdG0wNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKK2RxY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCisKK2RxY3RtMDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKK2RxY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKK2RxY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKK2RxY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKK2RxY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKK2RxY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKK2RxY3RtMDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKK2RxY3RtMDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKK2RxY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKK2RxY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKK2RxY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKK2RxY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKK2RxY3RtMDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKK2RxY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKK2RxY3RtMDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkcWN0bTA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgIDAKK2RxY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMAorZHFjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gICAwCitkcWN0bTA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkcWN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCitkcWN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCitkcWN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCitkcWN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitkcWN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCitkcWN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCitkcWN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitkcWN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCitkcWN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKK2RxY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKK2RxY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2RxY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKK2RxY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKK2RxY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitkcWN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2RxY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKK2RxY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKK2RxY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAorZHFjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQorZHFjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAorZHFjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorZHFjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQorZHFjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQorZHFjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorZHFjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAorZHFjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQorCitkcWN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCitkcWN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCitkcWN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitkcWN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCitkcWN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCitkcWN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitkcWN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2RxY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKK2RxY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKK2RxY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RxY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCitkcWN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCitkcWN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZHFjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RxY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCitkcWN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZHFjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RxY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RxY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQorZHFjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKK2RxY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQorZHFjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKK2RxY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitkcWN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2RxY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RxY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQorZHFjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RxY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCitkcWN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorZHFjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCitkcWN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RxY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RxY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZHFjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCitkcWN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RxY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZHFjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCitkcWN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKK2RxY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZHFjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKK2RxY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZHFjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitkcWN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2RxY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQorZHFjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQorZHFjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RxY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQorZHFjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCitkcWN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAorZHFjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQorZHFjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQorZHFjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorZHFjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQorZHFjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQorZHFjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCitkcWN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQorZHFjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorZHFjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZHFjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxCitkcWN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RxY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZHFjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitkcWN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RxY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZHFjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitkcWN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RxY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZHFjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitkcWN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKK2RxY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQorZHFjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitkcWN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKK2RxY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQorZHFjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitkcWN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKK2RxY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZHFjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitkcWN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RxY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQorZHFjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitkcWN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKK2RxY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQorZHFjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitkcWN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKK2RxY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQorZHFjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitkcWN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKK2RxY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQorZHFjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitkcWN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKK2RxY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQorZHFjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xCistLSBMUiBzd2FwCitkcWN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCitkcWN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCitkcWN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZHFjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RxY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCitkcWN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZHFjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RxY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCitkcWN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZHFjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RxY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCitkcWN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZHFjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RxY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCitkcWN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQorZHFjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2RxY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCitkcWN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQorZHFjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2RxY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCitkcWN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZHFjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RxY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCitkcWN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKK2RxY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQorZHFjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitkcWN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKK2RxY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQorZHFjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitkcWN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKK2RxY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQorZHFjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitkcWN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKK2RxY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitkcWN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKK2RxY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQorZHFjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitkcWN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKK2RxY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQorZHFjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitkcWN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKK2RxY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQorZHFjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKK2RxY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorZHFjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCitkcWN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKK2RxY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorZHFjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCitkcWN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKK2RxY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorZHFjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCitkcWN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKK2RxY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorZHFjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCitkcWN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKK2RxY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorZHFjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCitkcWN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKKworZHFjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitkcWN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKK2RxY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQorZHFjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitkcWN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKK2RxY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQorZHFjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitkcWN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKK2RxY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAorZHFjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitkcWN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKK2RxY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQorZHFjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitkcWN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKK2RxY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQorZHFjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitkcWN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKK2RxY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQorZHFjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitkcWN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKK2RxY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQorZHFjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitkcWN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKK2RxY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2RxY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQorZHFjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCitkcWN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2RxY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQorZHFjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCitkcWN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2RxY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQorZHFjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCitkcWN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2RxY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAorZHFjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZHFjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitkcWN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKK2RxY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQorZHFjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitkcWN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKK2RxY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQorZHFjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitkcWN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKK2RxY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQorZHFjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitkcWN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKK2RxY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQorZHFjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitkcWN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKK2RxY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorZHFjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitkcWN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKK2RxY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZHFjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCitkcWN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2RxY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQorZHFjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCitkcWN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2RxY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQorZHFjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCitkcWN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2RxY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQorZHFjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCitkcWN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2RxY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQorZHFjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCitkcWN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gU3BlY2lhbHMKK2RxY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCitkcWN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorZHFjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKK2RxY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCitkcWN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorZHFjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RxY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCitkcWN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorZHFjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkcWN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorZHFjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKK2RxY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorZHFjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitkcWN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQorZHFjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKK2RxY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitkcWN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQorZHFjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RxY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitkcWN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorZHFjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitkcWN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKK2RxY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKK2RxY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2RxY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCitkcWN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQorZHFjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2RxY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCitkcWN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQorZHFjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RxY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCitkcWN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQorZHFjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2RxY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQorZHFjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCitkcWN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCitkcWN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQorZHFjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCitkcWN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorZHFjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKK2RxY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCisKK2RxY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitkcWN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKK2RxY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCitkcWN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorZHFjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKK2RxY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCitkcWN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorZHFjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKK2RxY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCitkcWN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2RxY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCitkcWN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorZHFjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCitkcWN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RxY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCitkcWN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKK2RxY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitkcWN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKK2RxY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2RxY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQorZHFjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCitkcWN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2RxY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQorZHFjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCitkcWN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2RxY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQorZHFjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZHFjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAorZHFjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCitkcWN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKK2RxY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZHFjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKK2RxY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCitkcWN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorZHFjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKK2RxY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQorZHFjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitkcWN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKKworZHFjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCitkcWN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2RxY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQorZHFjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCitkcWN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2RxY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQorZHFjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCitkcWN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworZHFjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZHFjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZHFjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZHFjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZHFjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQorZHFjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkcWN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorZHFjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RxY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkcWN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZHFjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RxY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkcWN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorZHFjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RxY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZHFjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwICAgICAgICAtPiAgLTEKK2RxY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtNjE0MyAtMCAgICAgICAgLT4gIC0xCitkcWN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQorZHFjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wICAgICAgICAtPiAgLTEKK2RxY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS02MTQzIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtNjE0MyAtMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzYxNDQgICAtPiAgLTEKKworZHFjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwICAgICAgICAtPiAgIDEKK2RxY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrNjE0NCAtMCAgICAgICAgLT4gICAxCitkcWN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQorZHFjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wICAgICAgICAtPiAgIDEKK2RxY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrNjE0NCAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrNjE0NCAtMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTYxNDMgICAtPiAgIDEKKworLS0gTnVsbCB0ZXN0cworZHFjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHkuZGVjVGVzdAppbmRleCA3MjU0ZDY4Li4wYzYyNDMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUNvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kcWNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KLWRxY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRxY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTg0KLWRxY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4NCi1kcWNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFODQotZHFjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZHFjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTANCi1kcWNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTANCi1kcWNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTANCi1kcWNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwDQotZHFjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONw0KLWRxY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43DQotZHFjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQ0KLWRxY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRxY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcNCi1kcWNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNw0KLWRxY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1DQotZHFjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1DQotZHFjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MA0KLWRxY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwDQotZHFjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDANCi1kcWNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRxY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDANCi1kcWNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMA0KLWRxY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQNCi1kcWNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNA0KLWRxY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDANCi1kcWNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kcWNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWNweTEyMSBjb3B5ICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHkxMjMgY29weSAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcWNweTEyNCBjb3B5ICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFjcHkxMzEgY29weSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWNweTEzMiBjb3B5ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQotZHFjcHkxMzMgY29weSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcWNweTEzNCBjb3B5ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQotDQotZHFjcHkxMzUgY29weSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3Ng0KLWRxY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcHkxMzcgY29weSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0Mw0KLWRxY3B5MTM4IGNvcHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxY3B5MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFjcHkwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RxY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorZHFjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTgorZHFjcHkwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTgorZHFjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RxY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMAorZHFjcHkwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitkcWNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwCitkcWNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43CitkcWNweTAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworZHFjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZHFjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworZHFjcHkxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcKK2RxY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1CitkcWNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2RxY3B5MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTAKK2RxY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwCitkcWNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFjcHkxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcWNweTExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwCitkcWNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorZHFjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNAorZHFjcHkxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQKK2RxY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMAorZHFjcHkxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcWNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNweTEyMSBjb3B5ICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3B5MTIzIGNvcHkgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNweTEyNCBjb3B5ICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFjcHkxMzEgY29weSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxY3B5MTMyIGNvcHkgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxY3B5MTMzIGNvcHkgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNweTEzNCBjb3B5ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CisKK2RxY3B5MTM1IGNvcHkgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNweTEzNyBjb3B5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcWNweTEzOCBjb3B5ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0CmluZGV4IGJkZWMwMjAuLjE2YmNiNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlBYnMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kcWNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRxY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQotZHFjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kcWNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4NCi1kcWNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4NCi1kcWNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFODQotZHFjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kcWNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMA0KLWRxY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1DQotZHFjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1DQotZHFjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwDQotZHFjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONw0KLWRxY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcNCi1kcWNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQotZHFjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kcWNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3DQotZHFjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNw0KLWRxY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1DQotZHFjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUNCi1kcWNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwDQotZHFjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMA0KLWRxY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwDQotZHFjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRxY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDANCi1kcWNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwDQotZHFjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KLWRxY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYNCi1kcWNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCi1kcWNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCi1kcWNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kcWNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCi0NCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KLWRxY3BhMTIxIGNvcHlhYnMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwYTEyMyBjb3B5YWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KLWRxY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxY3BhMTMyIGNvcHlhYnMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcWNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BhMTM0IGNvcHlhYnMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi0NCi1kcWNwYTEzNSBjb3B5YWJzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQotZHFjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcWNwYTEzNyBjb3B5YWJzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQotZHFjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFjcGEwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkcWNwYTAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorZHFjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4KK2RxY3BhMDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgorZHFjcGEwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTgorZHFjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAorZHFjcGEwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUKK2RxY3BhMDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQorZHFjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCitkcWNwYTAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43CitkcWNwYTAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43CitkcWNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitkcWNwYTAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3BhMTAxIGNvcHlhYnMgICAgICAgICAgNyAgIC0+IDcKK2RxY3BhMTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKK2RxY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1CitkcWNwYTEwNCBjb3B5YWJzICAgICAgICAtNzUgICAtPiA3NQorZHFjcGExMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAorZHFjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMAorZHFjcGExMDcgY29weWFicyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RxY3BhMTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkcWNwYTExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwCitkcWNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwCitkcWNwYTExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2CitkcWNwYTExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkcWNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxY3BhMTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcGExMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkcWNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxY3BhMTIxIGNvcHlhYnMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwYTEyMiBjb3B5YWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcGExMjMgY29weWFicyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcGExMzIgY29weWFicyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcGExMzMgY29weWFicyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BhMTM0IGNvcHlhYnMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKKworZHFjcGExMzUgY29weWFicyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BhMTM3IGNvcHlhYnMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxY3BhMTM4IGNvcHlhYnMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QKaW5kZXggZWEwMDg1NS4uNjI1M2Y1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weU5lZ2F0ZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRxY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwDQotDQotLS0gSW5maW5pdGllcw0KLWRxY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQ0KLWRxY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTg0KLWRxY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTg0KLWRxY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFODQotZHFjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kcWNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMNCi1kcWNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMw0KLWRxY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMNCi1kcWNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMNCi1kcWNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzANCi1kcWNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MA0KLWRxY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxDQotZHFjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KLQ0KLS0tIGZpbml0ZXMNCi1kcWNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNw0KLWRxY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcNCi1kcWNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUNCi1kcWNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQ0KLWRxY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwDQotZHFjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MA0KLWRxY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMA0KLWRxY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwDQotDQotLS0gemVyb3MNCi1kcWNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMA0KLWRxY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDANCi1kcWNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNA0KLWRxY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQNCi1kcWNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwDQotZHFjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQotZHFjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQ0KLWRxY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFjcG4xMjEgY29weW5lZ2F0ZSAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcWNwbjEyMiBjb3B5bmVnYXRlICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxY3BuMTIzIGNvcHluZWdhdGUgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotZHFjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFjcG4xMzIgY29weW5lZ2F0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0Mw0KLWRxY3BuMTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFjcG4xMzQgY29weW5lZ2F0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3Ng0KLQ0KLWRxY3BuMTM1IGNvcHluZWdhdGUgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCi1kcWNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BuMTM3IGNvcHluZWdhdGUgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcWNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwbjAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MAorCistLSBJbmZpbml0aWVzCitkcWNwbjAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RxY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTgorZHFjcG4wMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFOCitkcWNwbjAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTgorZHFjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMKK2RxY3BuMDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzCitkcWNwbjAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzCitkcWNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMKK2RxY3BuMDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MAorZHFjcG4wMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzAKK2RxY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxCitkcWNwbjAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3BuMTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03CitkcWNwbjEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3CitkcWNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUKK2RxY3BuMTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1CitkcWNwbjEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MAorZHFjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MAorZHFjcG4xMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkcWNwbjEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZHFjcG4xMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTAKK2RxY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDAKK2RxY3BuMTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0CitkcWNwbjExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0CitkcWNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwCitkcWNwbjExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxY3BuMTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDEKK2RxY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcG4xMjEgY29weW5lZ2F0ZSAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwbjEyMyBjb3B5bmVnYXRlICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwbjEzMiBjb3B5bmVnYXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcWNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcG4xMzQgY29weW5lZ2F0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorCitkcWNwbjEzNSBjb3B5bmVnYXRlICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcWNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcG4xMzcgY29weW5lZ2F0ZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcG4xMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5U2lnbi5kZWNUZXN0CmluZGV4IGNlNzk0YjcuLjk3YjVlNmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdApAQCAtMSwxNzUgKzEsMTc1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUNvcHlTaWduLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZHFjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5DQotZHFjcHMwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFjcHMwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTg0KLWRxY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4NCi1kcWNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTg0KLWRxY3BzMDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRxY3BzMDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWRxY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMA0KLWRxY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTANCi1kcWNwczAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQotZHFjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcNCi1kcWNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONw0KLWRxY3BzMDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQotZHFjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCi0NCi0tLSBmaW5pdGVzDQotZHFjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcNCi1kcWNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNw0KLWRxY3BzMTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQ0KLWRxY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQ0KLWRxY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwDQotZHFjcHMxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTANCi1kcWNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDANCi1kcWNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDANCi0NCi0tLSB6ZXJvcw0KLWRxY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwDQotZHFjcHMxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDANCi1kcWNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNA0KLWRxY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0DQotZHFjcHMxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMA0KLWRxY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCi1kcWNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQotZHFjcHMxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFjcHMxMjEgY29weXNpZ24gICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIDggIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIDggIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHMxMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIDggIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotZHFjcHMxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIDggIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWNwczEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWNwczEzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0Mw0KLWRxY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyA4IC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BzMTM0IGNvcHlzaWduICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTc2DQotDQotZHFjcHMxMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTc2DQotZHFjcHMxMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyA4IC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BzMTM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0Mw0KLWRxY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi0tLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMNCi0NCi0tLSBJbmZpbml0aWVzDQotZHFjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkNCi1kcWNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5hTnMsIDAgcGF5bG9hZA0KLWRxY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTg0KLWRxY3BzMjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTg0KLWRxY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4NCi1kcWNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFODQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLWRxY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQotZHFjcHMyMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCi1kcWNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1kcWNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCi1kcWNwczIzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgLTM0IC0+IC1OYU43DQotZHFjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONw0KLWRxY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCi1kcWNwczIzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxDQotDQotLS0gZmluaXRlcw0KLWRxY3BzMzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcNCi1kcWNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03DQotZHFjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUNCi1kcWNwczMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQ0KLWRxY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTANCi1kcWNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwDQotZHFjcHMzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDANCi1kcWNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMA0KLWRxY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTANCi1kcWNwczMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0DQotZHFjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNA0KLWRxY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWRxY3BzMzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KLWRxY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQ0KLWRxY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFjcHMzMjEgY29weXNpZ24gICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIC05IC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHMzMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIC05IC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQotZHFjcHMzMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotZHFjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcWNwczMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxY3BzMzMyIGNvcHlzaWduICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTFFLTYxNDMNCi1kcWNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxY3BzMzM0IGNvcHlzaWduICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTFFLTYxNzYNCi0NCi1kcWNwczMzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zIC0+IC0xRS02MTc2DQotZHFjcHMzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcWNwczMzNyBjb3B5c2lnbiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zIC0+IC0xRS02MTQzDQotZHFjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi0NCi0tLSBPdGhlciBraW5kcyBvZiBSSFMNCi1kcWNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDENCi1kcWNwczQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjANCi1kcWNwczQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDENCi1kcWNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjANCi1kcWNwczQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDENCi1kcWNwczQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjANCi1kcWNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDENCi1kcWNwczQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjANCi0NCi1kcWNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQ0KLWRxY3BzNDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwDQotZHFjcHM0MTUgY29weXNpZ24gICAgICAgICAgNzAxICAgICtJbmYgIC0+ICA3MDENCi1kcWNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMA0KLQ0KLWRxY3BzNDIwIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtTmFOICAtPiAtNzAxDQotZHFjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjANCi1kcWNwczQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQ0KLWRxY3BzNDIzIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOICAtPiAgNzIwDQotZHFjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjANCi0NCi1kcWNwczQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDENCi1kcWNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjANCi1kcWNwczQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDENCi1kcWNwczQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjANCi1kcWNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjANCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29weVNpZ24uZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5CitkcWNwczAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNwczAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFOCitkcWNwczAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFOCitkcWNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTgorZHFjcHMwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHMwMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIDExIC0+IE5hTjEwCitkcWNwczAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RxY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2RxY3BzMDM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2RxY3BzMDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43CitkcWNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONworZHFjcHMwMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKK2RxY3BzMDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3BzMTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3CitkcWNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNworZHFjcHMxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1CitkcWNwczEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUKK2RxY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwCitkcWNwczEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MAorZHFjcHMxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwCitkcWNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDAKKworLS0gemVyb3MKK2RxY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwCitkcWNwczExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMAorZHFjcHMxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQKK2RxY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0CitkcWNwczExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitkcWNwczExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitkcWNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCitkcWNwczExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwczEyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgOCAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMTIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMxMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIDggIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwczEyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BzMTMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcHMxMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMKK2RxY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyA4IC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMxMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYKKworZHFjcHMxMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTc2CitkcWNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwczEzNyBjb3B5c2lnbiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMKK2RxY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTCisKKy0tIEluZmluaXRpZXMKK2RxY3BzMjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5CitkcWNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTgorZHFjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCitkcWNwczIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitkcWNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkcWNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZHFjcHMyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkcWNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RxY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RxY3BzMjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RxY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKK2RxY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNworZHFjcHMzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNworZHFjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2RxY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1CitkcWNwczMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCitkcWNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitkcWNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMAorZHFjcHMzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKKworLS0gemVyb3MKK2RxY3BzMzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2RxY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTAKK2RxY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RxY3BzMzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RxY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZHFjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkcWNwczMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2RxY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcHMzMjEgY29weXNpZ24gICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIC05IC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMzIzIGNvcHlzaWduICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAtOSAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWNwczMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcHMzMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE0MworZHFjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMzM0IGNvcHlzaWduICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTFFLTYxNzYKKworZHFjcHMzMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE3NgorZHFjcHMzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMzM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMgLT4gLTFFLTYxNDMKK2RxY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIE90aGVyIGtpbmRzIG9mIFJIUworZHFjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitkcWNwczQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjAKK2RxY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQorZHFjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitkcWNwczQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDEKK2RxY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAorZHFjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitkcWNwczQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjAKKworZHFjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKK2RxY3BzNDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitkcWNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQorZHFjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKKworZHFjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2RxY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwCitkcWNwczQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQorZHFjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2RxY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwCisKK2RxY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQorZHFjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitkcWNwczQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDEKK2RxY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAorZHFjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QKaW5kZXggM2NmNjBjNi4uMmFiYjkzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QKQEAgLTEsODA4ICsxLDgwOCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFEaXZpZGUuZGVjVGVzdCAtLSBkZWNRdWFkIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBzYW5pdHkgY2hlY2tzDQotZHFkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxDQotZHFkaXYwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyDQotZHFkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUNCi1kcWRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDENCi1kcWRpdjAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDANCi1kcWRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDANCi1kcWRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjAwOCBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDENCi0NCi1kcWRpdjAxMCBkaXZpZGUgIDIuNCAgIDEgICAgLT4gIDIuNA0KLWRxZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNA0KLWRxZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNA0KLWRxZGl2MDEzIGRpdmlkZSAgLTIuNCAgLTEgICAtPiAgMi40DQotZHFkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwDQotZHFkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMA0KLWRxZGl2MDE2IGRpdmlkZSAgMi40ICAgMiAgICAtPiAgMS4yDQotZHFkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMA0KLWRxZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQ0KLWRxZGl2MDE5IGRpdmlkZSAgMjAgICAgMjAgICAtPiAgMQ0KLQ0KLWRxZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxDQotZHFkaXYwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQ0KLWRxZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUNCi1kcWRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41DQotZHFkaXYwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQ0KLWRxZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUNCi1kcWRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41DQotZHFkaXYwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQ0KLWRxZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQ0KLWRxZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLWRxZGl2MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMA0KLWRxZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDANCi1kcWRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMA0KLWRxZGl2MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMA0KLQ0KLWRxZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUNCi1kcWRpdjAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQ0KLWRxZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQ0KLWRxZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUNCi1kcWRpdjAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQ0KLWRxZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQ0KLWRxZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41DQotZHFkaXYwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1DQotZHFkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQ0KLWRxZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1DQotZHFkaXYwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1DQotZHFkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQ0KLWRxZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41DQotZHFkaXYwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1DQotZHFkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQ0KLWRxZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1DQotZHFkaXYwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1DQotZHFkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQ0KLWRxZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUNCi1kcWRpdjA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQ0KLWRxZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQ0KLWRxZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUNCi1kcWRpdjA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQ0KLWRxZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQ0KLQ0KLS0tIGJjZFRpbWUNCi1kcWRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3MTIzMTkzOTA3NTExOTg1MzU5IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxZGl2MDY3IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDY4IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFkaXYwNjkgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDcwIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTkNCi1kcWRpdjA3MSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OTkNCi1kcWRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OQ0KLWRxZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTkNCi1kcWRpdjA3NCBkaXZpZGUgIDk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTkNCi1kcWRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OQ0KLWRxZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTkNCi1kcWRpdjA3NyBkaXZpZGUgIDk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTkNCi1kcWRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OQ0KLWRxZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTkNCi1kcWRpdjA4MCBkaXZpZGUgIDk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTkNCi1kcWRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OQ0KLWRxZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTkNCi1kcWRpdjA4MyBkaXZpZGUgIDk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTkNCi1kcWRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OQ0KLWRxZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTkNCi1kcWRpdjA4NiBkaXZpZGUgIDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDkNCi0NCi1kcWRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMA0KLWRxZGl2MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjANCi1kcWRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMA0KLWRxZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3DQotZHFkaXYwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0DQotDQotZHFkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgNCi1kcWRpdjA5NiBkaXZpZGUgIDEgICAgICAgICAgICAxRS05ICAtPiAgMUUrOQ0KLWRxZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMA0KLWRxZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQ0KLWRxZGl2MDk5IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEyIC0+ICAxRSsxMg0KLQ0KLWRxZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDENCi1kcWRpdjEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUNCi1kcWRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQ0KLWRxZGl2MTA0IGRpdmlkZSAgMSAgNSAgIC0+IDAuMg0KLWRxZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUNCi1kcWRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xDQotZHFkaXYxMTAgZGl2aWRlICAxICAxICAgLT4gMQ0KLWRxZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDINCi1kcWRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzDQotZHFkaXYxMTMgZGl2aWRlICA0ICAxICAgLT4gNA0KLWRxZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUNCi1kcWRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2DQotZHFkaXYxMTYgZGl2aWRlICA3ICAxICAgLT4gNw0KLWRxZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgNCi1kcWRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5DQotZHFkaXYxMTkgZGl2aWRlICAxMCAxICAgLT4gMTANCi0NCi1kcWRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQNCi1kcWRpdjEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwDQotDQotZHFkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+IDI0NjkuNDkzODk4Nzc5NzU1OTUxMTkwMjM4MDQ3NjA5NTIyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gMjQ3My45NDc4OTU3OTE1ODMxNjYzMzI2NjUzMzA2NjEzMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAyNTE5LjM4Nzc1NTEwMjA0MDgxNjMyNjUzMDYxMjI0NDg5OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+IDI0NjkNCi1kcWRpdjEzNCBkaXZpZGUgIDEyMzQ1ICA1LjEgICAgLT4gMjQyMC41ODgyMzUyOTQxMTc2NDcwNTg4MjM1Mjk0MTE3NjUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAyNDY0LjA3MTg1NjI4NzQyNTE0OTcwMDU5ODgwMjM5NTIxMCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+IDI0NjguNTA2Mjk4NzQwMjUxOTQ5NjEwMDc3OTg0NDAzMTE5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzDQotZHFkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cNCi1kcWRpdjI3MCBkaXZpZGUgMSAxZTYxNDQgICAgICAgICAgICAgICAgICAtPiAxRS02MTQ0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCi1kcWRpdjI3MSBkaXZpZGUgMSAwLjllNjE0NCAgICAgICAgICAgICAgICAtPiAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZGl2MjcyIGRpdmlkZSAxIDAuOTllNjE0NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWRpdjI3NCBkaXZpZGUgOWU2MTQ0ICAgIDEgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQotZHFkaXYyNzUgZGl2aWRlIDkuOWU2MTQ0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZA0KLWRxZGl2Mjc2IGRpdmlkZSA5Ljk5ZTYxNDQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCi1kcWRpdjI3NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllNjE0NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQotDQotZHFkaXYyNzggZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWRpdjI3OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllNjE0NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLQ0KLS0tIERpdmlkZSBpbnRvIDAgdGVzdHMNCi1kcWRpdjMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwDQotZHFkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQ0KLWRxZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzENCi1kcWRpdjMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjANCi1kcWRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwDQotZHFkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDANCi1kcWRpdjMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03DQotZHFkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQ0KLWRxZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzENCi1kcWRpdjMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwDQotZHFkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wDQotZHFkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMA0KLWRxZGl2MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwDQotZHFkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNw0KLWRxZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUNCi1kcWRpdjMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxDQotZHFkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMA0KLWRxZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMA0KLWRxZGl2MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDANCi1kcWRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMA0KLWRxZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcNCi1kcWRpdjMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03Nw0KLQ0KLWRxZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzINCi1kcWRpdjMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwDQotZHFkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwDQotZHFkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOA0KLWRxZGl2MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQNCi1kcWRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwDQotZHFkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMA0KLWRxZGl2MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwDQotZHFkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNg0KLWRxZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzINCi1kcWRpdjM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwDQotZHFkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwDQotZHFkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOA0KLWRxZGl2MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQNCi1kcWRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyDQotZHFkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMA0KLQ0KLS0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJw0KLWRxZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwDQotZHFkaXY0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNTQ0NjQ0MDQ0NjYwODExNjYyMTlFLTExIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDANCi1kcWRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MA0KLWRxZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAwNjcwNzYxMDA2MTAzOTI1MTU2RS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxDQotZHFkaXY0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMDA1NTY2NjUyMTQ2MTQ3NTQ2MjlFLTEwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxDQotZHFkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDA2NTg4NzMxMzAwNDIzNzY3NjBFLTExIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYNCi1kcWRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMDE0NTYxODU2MDYxNzQyMjY5N0UtMTAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gaGlnaC1sb3dzDQotZHFkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQ0KLWRxZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzENCi1kcWRpdjQ1NSBkaXZpZGUgMWUrMSAgIDEuMDAgLT4gICAxRSsxDQotZHFkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQ0KLWRxZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzENCi1kcWRpdjQ1OCBkaXZpZGUgMWUrMiAgIDIuMDAgLT4gICA1RSsxDQotDQotLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMNCi1kcWRpdjQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUNCi1kcWRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUNCi1kcWRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwDQotZHFkaXY0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDANCi1kcWRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUNCi1kcWRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUNCi1kcWRpdjQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUNCi1kcWRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwDQotZHFkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41DQotZHFkaXY0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41DQotZHFkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41DQotZHFkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41DQotZHFkaXY0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41DQotZHFkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41DQotZHFkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41DQotZHFkaXY0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41DQotDQotLS0gc29tZSByZWNpcHJvY2Fscw0KLWRxZGl2NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzDQotZHFkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQNCi1kcWRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMw0KLWRxZGl2NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyDQotDQotLS0gUk1TIGRpc2N1c3Npb24gdGFibGUNCi1kcWRpdjQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyDQotZHFkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMg0KLWRxZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMNCi1kcWRpdjQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszDQotZHFkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNA0KLWRxZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQNCi0NCi1kcWRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyDQotZHFkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQ0KLWRxZGl2NDkzIGRpdmlkZSAxZTUgICAgMTBlMiAtPiAgIDFFKzINCi1kcWRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxDQotZHFkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMg0KLWRxZGl2NDk2IGRpdmlkZSAxZTUgICAyMDBlMSAtPiAgIDVFKzENCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZHFkaXY0OTcgIGRpdmlkZSAgMEUrNjEwOCAxMDAwRS0zMyAgLT4gMEUrNjExMSBDbGFtcGVkDQotZHFkaXY0OTggIGRpdmlkZSAgMEUtNjE3MCAxMDAwRSszMyAgLT4gMEUtNjE3NiBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0NCi0tLSBmb2N1cyBvbiB0cmFpbGluZyB6ZXJvcyBpc3N1ZXMNCi1kcWRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NTAyIGRpdmlkZSAgMSAgICAgIDkuMDA5ICAtPiAgMC4xMTEwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMTEwICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41DQotZHFkaXY1MTIgZGl2aWRlIDEuMCAgICAgICAyICAgIC0+IDAuNQ0KLWRxZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwDQotZHFkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwDQotZHFkaXY1MTUgZGl2aWRlIDEuMDAwMCAgICAyICAgIC0+IDAuNTAwMA0KLWRxZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwDQotZHFkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwDQotZHFkaXY1MTggZGl2aWRlIDEuMDAwMDAwMCAyICAgIC0+IDAuNTAwMDAwMA0KLWRxZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUNCi0NCi1kcWRpdjUyMSBkaXZpZGUgMiAgICAxICAgICAgICAgLT4gMg0KLWRxZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyDQotZHFkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDINCi1kcWRpdjUyNCBkaXZpZGUgMiAgICAxLjAwMCAgICAgLT4gMg0KLWRxZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyDQotZHFkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDINCi1kcWRpdjUyNyBkaXZpZGUgMiAgICAxLjAwMDAwMCAgLT4gMg0KLWRxZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyDQotZHFkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDINCi0NCi1kcWRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjANCi1kcWRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjANCi1kcWRpdjUzMiBkaXZpZGUgIDIuNDAgIDEwICAgICAgLT4gIDAuMjQNCi1kcWRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMg0KLWRxZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42DQotZHFkaXY1MzUgZGl2aWRlICAyLjQwICAxMC4wICAgIC0+ICAwLjI0DQotZHFkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjINCi1kcWRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNg0KLWRxZGl2NTM4IGRpdmlkZSAgMi40MCAgMTAuMDAgICAtPiAgMC4yNA0KLWRxZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQ0KLWRxZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQ0KLWRxZGl2NTQxIGRpdmlkZSAgMC45ICAgIDAuMDAxICAtPiAgOUUrMg0KLWRxZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41DQotZHFkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUNCi1kcWRpdjU0NCBkaXZpZGUgIDUgICAgICAyLjAwICAgLT4gIDIuNQ0KLWRxZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQ0KLWRxZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQ0KLWRxZGl2NTQ3IGRpdmlkZSAgMi40MDAgIDIgICAgICAtPiAgMS4yMDANCi1kcWRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjANCi1kcWRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDENCi0NCi1kcWRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MA0KLWRxZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQNCi1kcWRpdjU1MiBkaXZpZGUgIDI0MCAgICAxMDAgICAgLT4gIDIuNA0KLWRxZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNA0KLWRxZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMA0KLWRxZGl2NTU1IGRpdmlkZSAgMjQwMCAgIDEwICAgICAtPiAgMjQwDQotZHFkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNA0KLWRxZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40DQotDQotLS0gK3ZlIGV4cG9uZW50DQotZHFkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkNCi1kcWRpdjYwMSBkaXZpZGUgIDIuNDBFKzkgICAgMiAgLT4gIDEuMjBFKzkNCi1kcWRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5DQotZHFkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkNCi1kcWRpdjYwNCBkaXZpZGUgIDI0RSs4ICAgICAgMiAgLT4gIDEuMkUrOQ0KLWRxZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQ0KLWRxZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkNCi1kcWRpdjYwNyBkaXZpZGUgIDI0MDAwRSs1ICAgMiAgLT4gIDEuMjAwMEUrOQ0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1kcWRpdjczMSBkaXZpZGUgNS4wMCAxRS0zICAgIC0+IDUuMDBFKzMNCi1kcWRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWRpdjczNCBkaXZpZGUgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi0NCi1kcWRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wDQotZHFkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMA0KLWRxZGl2NzQzIGRpdmlkZSAgMCAgICAgMSAgICAgLT4gIDANCi1kcWRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wDQotZHFkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzQ2IGRpdmlkZSAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMA0KLWRxZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMA0KLWRxZGl2NzUzIGRpdmlkZSAgMC4wICAgMSAgICAgLT4gIDAuMA0KLWRxZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMA0KLWRxZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc1NiBkaXZpZGUgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kcWRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxDQotZHFkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQ0KLWRxZGl2NzYzIGRpdmlkZSAgMCAgICAgMS4wICAgLT4gIDBFKzENCi1kcWRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxDQotZHFkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2NzY2IGRpdmlkZSAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTANCi1kcWRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwDQotZHFkaXY3NzMgZGl2aWRlICAwLjAgICAxLjAgICAtPiAgMA0KLWRxZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTANCi1kcWRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkaXY3NzYgZGl2aWRlIC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gU3BlY2lhbHMNCi1kcWRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjc4MSBkaXZpZGUgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZHFkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kcWRpdjc4NCBkaXZpZGUgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRxZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kcWRpdjc4NyBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCi1kcWRpdjc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCi1kcWRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCi1kcWRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxZGl2ODAyIGRpdmlkZSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZHFkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kcWRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRxZGl2ODA1IGRpdmlkZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZHFkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1kcWRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjgwOCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCi1kcWRpdjgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCi1kcWRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCi1kcWRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWRpdjgyMSBkaXZpZGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcWRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcWRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcWRpdjgyNCBkaXZpZGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcWRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1kcWRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcWRpdjgyNyBkaXZpZGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcWRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcWRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzMCBkaXZpZGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzMyBkaXZpZGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzNiBkaXZpZGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcWRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcWRpdjg0MSBkaXZpZGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg0NCBkaXZpZGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg0NyBkaXZpZGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1MCBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1MyBkaXZpZGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1NiBkaXZpZGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg1OSBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxZGl2ODYxIGRpdmlkZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCi1kcWRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44DQotZHFkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONw0KLWRxZGl2ODY0IGRpdmlkZSAgTmFONiAgTmFONSAgLT4gIE5hTjYNCi1kcWRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQotZHFkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMw0KLWRxZGl2ODY3IGRpdmlkZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi0NCi1kcWRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODcyIGRpdmlkZSAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODc1IGRpdmlkZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODc4IGRpdmlkZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcWRpdjg4MSBkaXZpZGUgIC1OYU45ICAtSW5mICAgLT4gIC1OYU45DQotZHFkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOA0KLWRxZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcNCi1kcWRpdjg4NCBkaXZpZGUgIC1OYU42ICAtTmFONSAgLT4gIC1OYU42DQotZHFkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONA0KLWRxZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMNCi1kcWRpdjg4NyBkaXZpZGUgICBJbmYgICAtTmFOMiAgLT4gIC1OYU4yDQotDQotZHFkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg5MiBkaXZpZGUgLXNOYU45OCAtMSAgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg5NSBkaXZpZGUgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcWRpdjg5OCBkaXZpZGUgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGUgYnkgMA0KLWRxZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2OTAzIGRpdmlkZSAgICAwLjAwMCAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTA2IGRpdmlkZSAgICAwLjEgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTA5IGRpdmlkZSAgIDEwICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTIzIGRpdmlkZSAgIC0wLjEgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTI2IGRpdmlkZSAgLTEwICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTMzIGRpdmlkZSAgICAwLjEgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTM2IGRpdmlkZSAgIDEwICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQzIGRpdmlkZSAgIC0wLjEgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQ2IGRpdmlkZSAgLTEwICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWRxZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQ0KLWRxZGl2MTAyMiAgZGl2aWRlIDFFMCAgICAgICAgICAyRTAgLT4gMC41DQotZHFkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxDQotZHFkaXYxMDI1ICBkaXZpZGUgMjRFLTEgICAgICAgIDJFMCAtPiAxLjINCi1kcWRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwDQotZHFkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUNCi1kcWRpdjEwMjggIGRpdmlkZSA1RTAgICAgICAgIDIwRS0xIC0+IDIuNQ0KLWRxZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41DQotZHFkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQ0KLWRxZGl2MTAzMSAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTIgLT4gMjUNCi1kcWRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjANCi1kcWRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUNCi0NCi0tLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcw0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi1kcWRpdjEwNDAgIGRpdmlkZSA1IDkgIC0+IDAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NiBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotZHFkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gR3l1cmlzIGV4YW1wbGUNCi1kcWRpdjEwNTAgIGRpdmlkZSA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTEyNTQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQotLS0gc2lnbnMNCi1kcWRpdjE3NTEgZGl2aWRlICAxZSs0Mjc3ICAxZS0zMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NTIgZGl2aWRlICAxZSs0Mjc3IC0xZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NTMgZGl2aWRlIC0xZSs0Mjc3ICAxZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NTQgZGl2aWRlIC0xZSs0Mjc3IC0xZS0zMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NTUgZGl2aWRlICAxZS00Mjc3ICAxZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE3NTYgZGl2aWRlICAxZS00Mjc3IC0xZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE3NTcgZGl2aWRlIC0xZS00Mjc3ICAxZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE3NTggZGl2aWRlIC0xZS00Mjc3IC0xZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kcWRpdjE3NjAgZGl2aWRlIDFlLTYwNjkgMWUrMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsDQotZHFkaXYxNzYxIGRpdmlkZSAxZS02MDY5IDFlKzEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbA0KLWRxZGl2MTc2MiBkaXZpZGUgMWUtNjA2OSAxZSsxMDMgLT4gMUUtNjE3MiBTdWJub3JtYWwNCi1kcWRpdjE3NjMgZGl2aWRlIDFlLTYwNjkgMWUrMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsDQotZHFkaXYxNzY0IGRpdmlkZSAxZS02MDY5IDFlKzEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbA0KLWRxZGl2MTc2NSBkaXZpZGUgMWUtNjA2OSAxZSsxMDYgLT4gMUUtNjE3NSBTdWJub3JtYWwNCi1kcWRpdjE3NjYgZGl2aWRlIDFlLTYwNjkgMWUrMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsDQotZHFkaXYxNzY3IGRpdmlkZSAxZS02MDY5IDFlKzEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE3NjggZGl2aWRlIDFlLTYwNjkgMWUrMTA5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZGl2MTc2OSBkaXZpZGUgMWUtNjA2OSAxZSsxMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KLWRxZGl2MTc3MCBkaXZpZGUgMWUrNDAgMWUtNjEwMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSBDbGFtcGVkDQotZHFkaXYxNzcxIGRpdmlkZSAxZSs0MCAxZS02MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZA0KLWRxZGl2MTc3MiBkaXZpZGUgMWUrNDAgMWUtNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkDQotZHFkaXYxNzczIGRpdmlkZSAxZSs0MCAxZS02MTA0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQotZHFkaXYxNzc0IGRpdmlkZSAxZSs0MCAxZS02MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc3NSBkaXZpZGUgMWUrNDAgMWUtNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NzYgZGl2aWRlIDFlKzQwIDFlLTYxMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxNzc3IGRpdmlkZSAxZSs0MCAxZS02MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTc3OCBkaXZpZGUgMWUrNDAgMWUtNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE3NzkgZGl2aWRlIDFlKzQwIDFlLTYxMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotZHFkaXYxODAxIGRpdmlkZSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsDQotZHFkaXYxODAyIGRpdmlkZSAgMS4wMDBFLTYxNzIgICAxZSsxICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQotZHFkaXYxODAzIGRpdmlkZSAgMS4wMEUtNjE3MiAgICAxZSsyICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsDQotZHFkaXYxODA0IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSszICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsDQotZHFkaXYxODA1IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxZGl2MTgwNiBkaXZpZGUgIDEuM0UtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MDcgZGl2aWRlICAxLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODA4IGRpdmlkZSAgMS43RS02MTcyICAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgwOSBkaXZpZGUgIDIuM0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTAgZGl2aWRlICAyLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODExIGRpdmlkZSAgMi43RS02MTcyICAgICAxZSs0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgxMiBkaXZpZGUgIDEuNDlFLTYxNzIgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTMgZGl2aWRlICAxLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODE0IGRpdmlkZSAgMS41MUUtNjE3MiAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgxNSBkaXZpZGUgIDIuNDlFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MTYgZGl2aWRlICAyLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODE3IGRpdmlkZSAgMi41MUUtNjE3MiAgICAxZSs0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxZGl2MTgxOCBkaXZpZGUgIDFFLTYxNzIgICAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsDQotZHFkaXYxODE5IGRpdmlkZSAgM0UtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFkaXYxODIwIGRpdmlkZSAgNUUtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFkaXYxODIxIGRpdmlkZSAgN0UtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgyMiBkaXZpZGUgIDlFLTYxNzIgICAgICAgMWUrNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MjMgZGl2aWRlICA5LjlFLTYxNzIgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZHFkaXYxODI0IGRpdmlkZSAgMUUtNjE3MiAgICAgIC0xZSs0ICAtPiAtMUUtNjE3NiAgICBTdWJub3JtYWwNCi1kcWRpdjE4MjUgZGl2aWRlICAzRS02MTcyICAgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE4MjYgZGl2aWRlIC01RS02MTcyICAgICAgIDFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE4MjcgZGl2aWRlICA3RS02MTcyICAgICAgLTFlKzUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYxODI4IGRpdmlkZSAtOUUtNjE3MiAgICAgICAxZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MTgyOSBkaXZpZGUgIDkuOUUtNjE3MiAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjE4MzAgZGl2aWRlICAzLjBFLTYxNzIgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kcWRpdjE4MzEgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWRpdjE4MzIgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OSAtPiAxRS02MTc2ICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcWRpdjE4MzMgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFkaXYxODM0IGRpdmlkZSAgMi4wRS01OTc3ICAgICAyZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KLWRxZGl2MTgzNSBkaXZpZGUgIDQuMEUtNTk3NyAgICAgNGUrMTk4IC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCi1kcWRpdjE4MzYgZGl2aWRlIDEwLjBFLTU5NzcgICAgMTBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFkaXYxODM3IGRpdmlkZSAzMC4wRS01OTc3ICAgIDMwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KLWRxZGl2MTgzOCBkaXZpZGUgNDAuMEUtNTk4MiAgICA0MGUrMTY2IC0+IDEuMEUtNjE0OCBTdWJub3JtYWwNCi1kcWRpdjE4MzkgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NSAtPiAxLjBFLTYxNDcgU3Vibm9ybWFsDQotZHFkaXYxODQwIGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjQgLT4gMS4wRS02MTQ2IFN1Ym5vcm1hbA0KLQ0KLS0tIHJhbmRvbXMNCi1yb3VuZGluZzogIGhhbGZfZXZlbg0KLWRxZGl2MjAxMCAgZGl2aWRlICAtNTIzMTE5NTY1MjkzMTY1MTk2ODAzNDM1NjExNzExODg1MCAgICAgICAgIC03MjQzNzE4NjY0NDIyNTQ4NTczMjAzMjYwOTcwLjM0OTk1ICAgICAgICAgIC0+ICAgNzIyMTY5LjkwOTU4MzEyODQ2MjQ3MzYwNTE0NjA1NTA2ODAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDExICBkaXZpZGUgIC04OTU4NDY2OTc3MzkyNy44MjcxMTIzNzM1MDAyMjUxNTM1MiAgICAgICAgLTQyMDc3OTQzNzI4NTI5NjM1ODg0LjIxMTQyNjI3NTMyOTg1ICAgICAgICAgLT4gICAwLjAwMDAwMjEyOTAxNzI5MTE0NjQ3MTU2NTkyODEyNTg4NzUyNzI2NiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTIgIGRpdmlkZSAgLTIuODI4MjAxNjkzMzYwNzIzMjAzODA2OTc0ODkxOTQ2MTgwRS0yMzIgICAgODEyNTk2NTQxMjIxODIzOTYwMzg2Mzg0NDAzMDg5MjQwLjkgICAgICAgICAtPiAgLTMuNDgwNDUwMDc1NjQwNTIxMzIwMDQwMDU1NzU5MTI1MTIwRS0yNjUgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDEzICBkaXZpZGUgIC02NDQyNzc1MzcyNzYxMDY5MjY3NTAyOTM3NTM5NDA4NzIwICAgICAgICAgIDI0OTA0MDg1MDU2LjY5MTg1NDY1MTQ1MTgyNjA2MDg5MTk2ICAgICAgICAgLT4gIC0yNTg3MDM1NTYzODgyMjY0NjM2ODc3MDEuNDg4NDcxOTU4OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTQgIGRpdmlkZSAgIDUuNTM1NTIwMDExMjcyNjI1NjI5NjEwMDc5ODc5NzE0NzA1ICAgICAgICAtNDQzNDM2NjQ2NTAuNTcyMDMwNTIwMDMwNjgxMTM1MzEyMDggICAgICAgICAtPiAgLTEuMjQ4MzIyNjMwNzI4MDg5MzA4OTc1OTQwNTMzNDkzNTYyRS0xMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTUgIGRpdmlkZSAgIDY1OTE5MjczNzEyNTE3ODY1OTY0MzI1Ljk5NDE5NjI1MDEwICAgICAgICAtMzE0NzMzMzU0MTQxMzgxNzM3Mzc4NjIyNTE1Ljc3ODkwNTQgICAgICAgICAtPiAgLTAuMDAwMjA5NDQ0ODI5NTUyMTQ5MDYxNjM3OTc4NDc1ODkxMTYzMiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTYgIGRpdmlkZSAgLTcuNzc5MTcyNTY4MTkzMTk3MTA3MTE1Mjc1MTQwNDMxMTI5RSs3NTkgICAtMTQwNDUzMDE1NjM5LjM5ODg5ODc2NTI4OTUxNzg3ODIxNDMgICAgICAgICAtPiAgIDUuNTM4NjI5NzkyMTYxNjQxNTM0OTYyNzc0MjQ0MjM4MTE1RSs3NDggSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDE3ICBkaXZpZGUgICA2NDQzMTQ4MzI1OTc1NjkuMDE4MTIyNjA2NzUxODE3ODc5NyAgICAgICAgLTExNTAyNDU4NTI1NzQyNS4xNjM1NzU5NTIxNTY1MjAxMDc1ICAgICAgICAgLT4gIC01LjYwMTU0MDE1MDM1NjQ3OTI1NzM2NzY4NzQ1MDkyMjc5NSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTggIGRpdmlkZSAgIDYuODk4NjQwOTQxNTc5NjExNDUwNjc2NTkyNTUzMjg2ODcwRS00NyAgICAtMTEyNzI0Mjk4ODE0MDc4NTE0ODUxNjM5MTQ5OTkuMjU5NDMgICAgICAgICAtPiAgLTYuMTE5OTIzNTc4Mjg1MzM4Njg5MzcxMTM3NjQ4MzE5MjgwRS03NSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMTkgIGRpdmlkZSAgLTM1OTEzNDQ1NDQ4ODg3MjcxMzMuMzA4MTk3NTAxNjMyNTQgICAgICAgICAgNTMyOTM5NS40MjM3OTI3OTU2NjE0NDY1NjEwOTAzMzEwMzcgICAgICAgICAtPiAgLTY3Mzg3NDY2Mjk0MS4xOTY4NTI1NTg5NDYwNTMzNzI1MjkwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyMCAgZGl2aWRlICAtNy42ODIzNTY3ODEzODQ2MzEzMTMxNTY0NjI3MjQ0MjU4MzhFKzc0NyAgIC02LjYwMzc1ODU1NTEyMjE5MDU3MjgxOTIyMTQxODA5OTQwRSs3MDMgICAgIC0+ICAgMS4xNjMzMzA5NjAyNzk1NTYwMTY2NzgzNzkxMjg4NzUxNDlFKzQ0IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyMSAgZGl2aWRlICAtNDUxMTQ5NTU5NjU5Njk0MTgyMDg2MzIyNC4yNzQ2Nzk2OTkgICAgICAgICAzMzY1Mzk1MDE3LjI2MzMyOTc5NTQ0OTY2MTYxNjA5MDcyNCAgICAgICAgIC0+ICAtMTM0MDU1NDU0ODExNTMwNC45MDQxNjY4ODgwMTgzNDYyOTkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDIyICBkaXZpZGUgICA1LjIxMTE2NDEyNzg0MDkzMTUxNzI2MzYzOTYwODE1MTI5OSAgICAgICAgIDE2NC41NTY2MzgxMzU2Mjc2NTY3MDEyNTMzODQ3MDA2NDUzICAgICAgICAgLT4gICAwLjAzMTY2NzkwNTg3NjU1MjI4ODY0NDc4MjYwMTU3MTU2NTEwIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyMyAgZGl2aWRlICAtNDk4OTEuMjI0Mzg5MzQ1ODgzMDM4NDA3NzY4NDYyMDM4MyAgICAgICAgIC00NzE3OS45MzEyOTYxODYwNzQ3NTU0MDUzMzcxMTcxNTMwICAgICAgICAgIC0+ICAgMS4wNTc0NjcwODQzODY3NjcyOTE2MDIxODk2NTY0MzAyNjggSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDI0ICBkaXZpZGUgICAxNTA2NTQ3Ny40NzIxNDI2ODQ4ODA3NzQxNTQ2MjQxMzM1MyAgICAgICAgIDQzNjYyMTEuMTIwODkyOTUzMjYxMzA5NTI5NzQwNTUyNTk2ICAgICAgICAgLT4gICAzLjQ1MDQ2OTMwOTY2MTIyNzk4NDI0NDU0NTUxMzQ0MTM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjUgIGRpdmlkZSAgIDEuNTc1NjcwMjY5NDQwNzYxODQ2MTA5NjAyNDI5NjEyNjQ0RSszNzAgICAgNjUzMTk5NjQ5MzI0NzQwMzAwLjAwNjE4NTQ4MjY0MzQzOSAgICAgICAgICAtPiAgIDIuNDEyMjMzNzk1NzAwMzU5MTcwOTA0NTg4NTQ4MDQxNDgxRSszNTIgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDI2ICBkaXZpZGUgIC0yMTEyNDIyMzExNzMzNDQ4OTI0NTczNDMyMTkyLjYyMDE0NSAgICAgICAgLTgwMDY3MjA2LjAzNTkwNjkzMTUzODQ4MjE1ODQ4NjEzNDA2ICAgICAgICAgLT4gICAyNjM4MzExNTA4OTQxNzY2MDE3NS4yMDEwMjY0Njc1NjU3NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjcgIGRpdmlkZSAgLTY3MDk2NTM2MDUxMjc5ODA5LjMyMjE4NjExNTQ4NzIxODM5ICAgICAgICAtODY5Njg1NDEyODgxOTQxMDgxNjY0MjUxOTkwMTgxLjEwNDkgICAgICAgICAtPiAgIDcuNzE1MDM1MjM2NTg0ODA1OTIxMjc4NTY2MzY1MjMxMTY4RS0xNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMjggIGRpdmlkZSAgLTU4NjEyOTA4NTQ4OTYyMDQ3LjIxODY2OTEzNDI1NDg4OTcyICAgICAgICAtOTc4NDQ5NTk3NTMxLjM4NzM2NjU1ODM0NzU2MzM4MzE2NDQgICAgICAgICAtPiAgIDU5OTAzLjg2MDg1OTkxNzAzMDkxMjM2NTA3ODU5ODM3MDIzIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAyOSAgZGl2aWRlICAtMTMzMDMyNDEyMDEwOTQyLjE0NzY4NjQxMzgyMTMzMTk3OTYgICAgICAgIC03Ljg4MjA1OTI5MzQ5ODY3MDcwNTQ0NjUyODY0ODIwMTM1OUUtNDI4ICAgIC0+ICAgMS42ODc3ODc1MDY1MDQ0MzMwNjQ1NDk1MTU2ODE2OTM3MTVFKzQ0MSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzAgIGRpdmlkZSAgIDEuODM3NDY2OTgzMzg5NjYwMjk0OTIyOTk3MTYzNjA1MTNFKzk3NyAgICAtOS44OTc5MjY2MDg5Nzk2NDk5NTE2NzI4Mzk4NzkxMjg2MDNFKzE1NCAgICAtPiAgLTEuODU2NDE2MDUxNTQyMjEyNTUyMDQyMzkwMjE4MDYyNDU4RSs4MjIgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDMxICBkaXZpZGUgIC0xMTM3NDI0NzU4NDEzOTkyMzYzMDcxMjg5NjIuMTUwNzA2MyAgICAgICAgIDgyOTg2MDIuMjAzMDQ5ODM0NzMyNjU3NTY3OTY1MjYyOTg5ICAgICAgICAgLT4gIC0xMzcwNjIyMTAwNjY2NTEzNzgyNi4xNjU1NzM5MzkxOTkyOSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzIgIGRpdmlkZSAgIDE5Ni40Nzg3NTc0NjUwNzU0MTUyOTk1OTQxODA4MzMxODYyICAgICAgICAgOTI5LjY1NTMzODg0NzIzMTgwOTQ0Mjc0MjIxMTcxNzIzOTQgICAgICAgICAtPiAgIDAuMjExMzQ1ODA2NjE3NjUyNjY1MTAwNjkxNzkyMjgxNDAxOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzMgIGRpdmlkZSAgIDcxOTMxMjIxNDY1LjQzODY3OTk2MjgyODAzNjI4MTMwMzUwICAgICAgICAgMzgzODY4NTkzNDIwNjQyNjI1NzA5MDcxOC40MDIyNDg4NTMgICAgICAgICAtPiAgIDEuODczODUwMTMyNTI3NDIzNDEzNjA3MTk5NTEzMzI0MDIxRS0xNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzQgIGRpdmlkZSAgIDQ4OC40MjgyNTAyMjg5NjUxNjUzNzgzNTk2MjQ2MzEyODg1ICAgICAgICAtODAuNjg5NDA5NTY4MDY2MzQyODAwNzg3MDY1Nzc5NTMxODggICAgICAgICAtPiAgLTYuMDUzMTg5MDQ3MjgwNjkzMzE4ODQ0ODAxODk5NDczMjcyIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzNSAgZGl2aWRlICAgOS4wMDE3NjQzNDQ5NjM5MjE3NTQ5ODE3NjI5MTMyNDczOTRFLTE2MiAgIC04LjU4NTU0MDk3MzY2NzIwNTc1MzczNDk2NzY0NTM4NjkxOUUtNzI5ICAgIC0+ICAtMS4wNDg0Nzk1NzQyNzE4MjczMjYzOTYwMTI1NzMyMzI5MzRFKzU2NyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwMzYgIGRpdmlkZSAgLTcuNDA0MTMzOTU5NDA5ODk0NzQzNzA2NDAyODU3MTQ1NDcxRS04MjggICAtNTEuMzgxNTk5Mjk0NjAyODk3MTExMzQ2ODQ4NDMwODYyNjUgICAgICAgICAtPiAgIDEuNDQxMDA4ODU1NTE2MDI5NDYxMDMyMDYxNzg1MjE5NzczRS04MjkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDM3ICBkaXZpZGUgICAyLjk2NzUyMDIzNTU3NDQxOTc5NDA0ODk5NDQzNjA0MDcxN0UtNjEzICAgLTYyNTI1MTM4NTUuOTEzOTQ4OTQ5NDk4NzkyNjI3MzE4ODkgICAgICAgICAgLT4gIC00Ljc0NjEyMzQwNTY1NjQwOTEyNzU3Mjk5ODc1MTg4NTMzOEUtNjIzIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzOCAgZGl2aWRlICAtMTg4MjY4NTI2NTQ4MjQwNDA1MDUuODM5MjAzNjY3NjUwNTEgICAgICAgIC02MzM2OTI0ODc3OTQyNDM3OTkyNTkwNTU3NDYwMTQ3MzQwICAgICAgICAgIC0+ICAgMi45NzA5NzYxNDY1NDY0OTQ2Njk4MDc4ODYyNzg1MTkxOTRFLTE1IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjAzOSAgZGl2aWRlICAtOC4xMDE0MDY3ODQ4MDkxOTc2MDQ5NDk1ODQwMDE3MzU5NDlFKzU2MSAgICA0LjgyMzMwMDMwNjk0ODk0MjgyMTA3NjY4MTY1ODc3MTYzNUUrMzYxICAgIC0+ICAtMS42Nzk2Mzk3MjE2MTA4MzkyMDQ3Mzg0NDU3NDcyMzg5ODdFKzIwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDAgIGRpdmlkZSAgLTYuMTE5ODE5Nzc3NzMwOTQwNTIzMzEwNjI1ODUxOTE3MjNFKzI5NSAgICAgMS41MDc2MTAyNTM3NTUzMzkzMjgzMDI3NzkwMDU1ODY1MzRFKzIzOCAgICAtPiAgLTQuMDU5Mjg1MDU4OTExNTc3MjQ0MDQ0NDE4NDE2MDQ0NzYzRSs1NyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDEgIGRpdmlkZSAgIDYuNDcyNjM4ODUwMDQ2ODE1ODgwNTk5MjIwNTM0Mjc0MDU1RS01OTYgICAtNC40NzUyMzM3MTIwODMwNDc1MTY5MzM5MTE3ODYxNTk5NzIgICAgICAgICAtPiAgLTEuNDQ2MzI0MjA3MDYyMjYxNzQ1NTIwNDk2NDc1Nzc4ODc5RS01OTYgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQyICBkaXZpZGUgIC04NDQzODU5MzMzMC43MTI3NzgzOTYzMTE0NDUwOTM5NzExMiAgICAgICAgLTU4NjY4NDU5NjIwNDQwMTY2NDIwODk0Ny40MDU0ODc5NjMzICAgICAgICAgLT4gICAxLjQzOTI1MDIxODU1MDA0MTIyODc1OTk4MzkzNzc3MjUwNEUtMTMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQzICBkaXZpZGUgICA5LjM1NDUzMzIzMzI5NDAyMjYxNjY5NTgxNTY1NjcwNDM2OUUtMjQgICAgIDQwNS41MDAzOTA2MjYxMzUzMDQyNTIxNDQxNjM1OTE3NDYgICAgICAgICAgLT4gICAyLjMwNjkxMTAyODgyNzc3NDU0OTc0MDU3MTIyOTczNjE5OEUtMjYgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQ0ICBkaXZpZGUgICA5ODU2MDY0MjMzNTAyMTAuNzM3NDg3NjY1MDE0OTk1Nzg4MSAgICAgICAgLTM2ODExNTYzNjk3LjQxOTI1NjgxODY2Njk0ODU5ODI4Nzk0ICAgICAgICAgLT4gIC0yNjc3NC4zNjk5MDg2NDExOTQ0NTMzNTgxMzM1NDcxNzcxMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDUgIGRpdmlkZSAgLTguMTg3MjgwNzc0MTc3NzE1NzA2Mjc4MDAyMjQ3NzY2MzExRS0xMjMgICAtMzg3ODQxMjQzOTMuOTEyMTI4NzA4Mjg0MzAwMDEzMDAwNjggICAgICAgICAtPiAgIDIuMTEwOTg3NjUzMzU2MTM5MTQ3MzU3MjQwNzI3Nzk0MzY1RS0xMzMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQ2ICBkaXZpZGUgIC00LjYxMjIwMzEyNjM1MDA3MDkwMzQ1OTI0NTc5ODM3MTY1N0UrOTEyICAgIDcuOTcxNTYyMTgyNzI3OTU2MjkwOTAxOTg0NzM2ODAwNTE5RSs2NCAgICAgLT4gIC01Ljc4NTgyMDkyMjcwODY4MzIzNzA5ODgyNjY2Mjc2OTc0OEUrODQ3IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA0NyAgZGl2aWRlICAgNC42NjEwMTU5MDk0MjE0ODUyOTgyNDc5Mjg5Njc5NzcwODlFKzg4OCAgIC02LjM2MDkxMTI1MzMyMzkyMjMzODczNzMxMTU2Mzg0NTU4MUUrMzg4ICAgIC0+ICAtNy4zMjc1OTE0NzgzMjEzNjU5ODAxNTY2NTQ1Mzk2Mzg4MzZFKzQ5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNDggIGRpdmlkZSAgIDkxNTYwNzgxNzI5MDMuMjU3NTAwMDAzMjYwNzEwODMzMDMwICAgICAgICAgNy4xODk3OTY2NTMyNjIxNDcxMzkwNzE2MzQyMzc5NjQwNzRFLTkwICAgICAtPiAgIDEuMjczNDgyMjE1NzY2MDAwOTk0MzY1MjAxNTQ1MDk2MDI2RSsxMDIgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDQ5ICBkaXZpZGUgIC0xLjcxMDcyMjMwMzMyNzQ3NjU4NjM3MzQ3Nzc4MTI3NjU4NkUtMzExICAgLTMxNjc1NjE2MjgyNjAxNTY4MzczMjkzMjMuNzI5MzgwNjk1ICAgICAgICAgLT4gICA1LjQwMDc1NDU5OTU3ODYxMzk4NDg3NTc1Mjk1ODY0NTY1NUUtMzM2IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1MCAgZGl2aWRlICAtNC42NDc5MzUyMTA4ODE4MDYyMzgzMjE2MTYzNDU0MTMwMjFFLTg3OCAgICAyMDkzODguNTQzMTg2Nzc0NDY0ODE3NzMwODQ2MDYzOTU4MiAgICAgICAgIC0+ICAtMi4yMTk3NjU3NzEzOTQ1OTM3MzMxNDA0OTQyOTczODgxNDBFLTg4MyBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTEgIGRpdmlkZSAgIDU5NTguNjk0NzI4Mzk1NzYwOTkyNzE5MDg0NzgxNTgyNzAwICAgICAgICAgNC41NDE1MTAxNTY1NjQzMTU2MzI1MzYzNTMxNzE4NDYwOTZFLTc0NiAgICAtPiAgIDEuMzEyMDUxMzkzMjUzNjM4NjY0OTQ3ODUyNjkzMDA1NDgwRSs3NDkgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDUyICBkaXZpZGUgIC03LjkzNTczMjU0NDY0OTcwMjE3NTI1NjY5OTg4Njg3MjA5M0UtNDg5ICAgLTcuNDMzMzI5MDczNjY0NzkzMTM4OTk4NzY1NjQ3NDY3OTcxRSszNjAgICAgLT4gICAxLjA2NzU4Nzk0OTYyNjA3NjkxNzY3MjI3MTYxOTY2NDY1NkUtODQ5IEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1MyAgZGl2aWRlICAtMjc0NjY1MDg2NDYwMTE1Ny44NjM1ODk5NTk5Mzk5MDEzNTAgICAgICAgICA3LjAxNjY4NDk0NTUwNzY0NzUyODkwNzE4NDY5NDM1OTU5OEUrNTQ4ICAgIC0+ICAtMy45MTQ0NTY1OTMwMDkzMDk1MjkzNTEyNTQ5NTA0Mjk5MzJFLTUzNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTQgIGRpdmlkZSAgIDM2MDUxNDk0MDg2MzExOTczNjU0NDc5NTMuOTk0NTY5MTc4ICAgICAgICAtNzU2MTQwMjU4MjU2NDkwODIuNzgyNjQ4NjQ0MjgyMzc4MzMgICAgICAgICAtPiAgLTQ3Njc4MzE1Ljg4NDcyNjkzNTA3MDYwMDYzMTg4MDIwNTMyIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2MjA1NSAgZGl2aWRlICAgNzg4MTk0MzIwOTIxNzk4NDA0OTA2Mzc1MjE0LjE5NjM0OSAgICAgICAgIC02LjIyMjcxODE0ODQzMzI0NzM4NDkzMjU3MzQwMTk3NjMzN0UtNDE4ICAgIC0+ICAtMS4yNjY2Mzk5MTg2MzQ2NzE4MDM5ODIyMjIyNDQ5NzcyODdFKzQ0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTYgIGRpdmlkZSAgIDU2MjA3MjI3MzA1MzQ3NTIuNzU4MjA4OTQzNDQ3NjAzMjExICAgICAgICAgNi44NDM1NTI4NDExNjg1MzgzMTkxMjMwMDA5MTc2NTc3NTlFLTEzOSAgICAtPiAgIDguMjEzMTY0ODAwNDg1NDM0NjY2NjI5OTcwNDQzNzM5NTU0RSsxNTMgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDU3ICBkaXZpZGUgICA3MzA0NTM0Njc2NzEzNzAzOTM4MTAyLjQwMzk0OTAxOTQwMiAgICAgICAgLTU3NjE2OS4zNjg1MDEwOTM1MTA4MTUzMDIzODAzNTkwODM1ICAgICAgICAgLT4gIC0xMjY3Nzc1NjAxNDIwMTk5NS4zMTk2OTIzNzE0NDM5NDc3MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjIwNTggIGRpdmlkZSAgIDgwNjc5MTg3NjIuMTM0NjIxNjM5MjU0OTE2Nzg2OTQ1NTQ3ICAgICAgICAtOC43NzQ3NzE0ODAwNTU1MzYwMDkxMDU1OTYxNjM4NjQ3NThFKzk1NCAgICAtPiAgLTkuMTk0NDQ4ODU4ODM2MzMyMTU2NzY2NzY0NjA1MTI1MjQ1RS05NDYgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDU5ICBkaXZpZGUgICA4LjcwMjA5MzQ1NDEyMzA0NjUwNzU3ODI1Njg5OTUzNzU2M0UtMzI0ICAgLTUuODc1Mzk5NzMzMDE2MDE4NDA0NTgwMjAxMTc2NTc2MjkzRS00MDEgICAgLT4gIC0xLjQ4MTEwNjYyMjQ1MjA1MjU4MTQ3MDQ0MzUyNjk1NzMzNUUrNzcgSW5leGFjdCBSb3VuZGVkDQotZHFkaXYyMDYwICBkaXZpZGUgIC00MTQyNi4wMTY2MjUxODQ1MTg2MTM4NjM1MjQxNTA5MjM1NiAgICAgICAgIDkwLjAwMTQ2NjIxNjg0NDc4MzAwNTEwNzY5ODAyMDEzNDY0ICAgICAgICAgLT4gIC00NjAuMjgxNTc1MDI4NzMxODY5MjczMjA2NzcwOTE3NjIwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQ0KLWRxZGl2NDAwMSBkaXZpZGUgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ1MjQ5MDAgICAyMDAzMTAwMzUyNzcwNzUzOTY5ODc4OTI1NjY0NDk3ODI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1MTcgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAwMiBkaXZpZGUgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNzE2NDUgICA0ODE3Nzg1NzkzOTE2NDkwNjUyNTc5NTUyMzE4MzYyMDk3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5ODIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAwMyBkaXZpZGUgIDgyOTkxODc0MTA5MjAwNjczMjU2NDgwNjg0Mzk1NjAyODIgICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTkxMTU5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMDQgZGl2aWRlICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1MzY1ODk5ICAgNTY0MTA4ODQ1NTg5NzQwNzA0NDU0NDQ2MTc4NTM4OTk2NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzMzOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDA1IGRpdmlkZSAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzQ5MDQyNCAgIDU3NTIyNzQ2OTQ3MDY1NDUzNTkzMjYzNjEzMTM1MDI3MjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg2MTkgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAwNiBkaXZpZGUgIDY3NjIwNzk0NzczNzM2NzA1OTQ4MjkzMTkzNDYwOTk2NjUgICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MTMyNTc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUxMzI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMDcgZGl2aWRlICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjAyOTE2ICAgNzI4NjQyNTE1MzY5MTg5MDM0MTYzMzAyMzIyMjYwNjU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDA4IGRpdmlkZSAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTk0NjY1NSAgIDk0ODEyMzM5OTE5MDEzMDU3Mjc2NDgzMDY0MjE5MTkxMjQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkwNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDA5IGRpdmlkZSAgNDI4MjA1Mzk0MTg5Mzk1MTc0MjAyOTQ0NDA2NTYxNDMxMSAgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU1ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzI5NCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDEwIGRpdmlkZSAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMzODY5NSAgICA2MjY4ODgyMjU0NDEyNTA2Mzk3NDE3ODE4NTAzMjcyOTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE3OSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDExIGRpdmlkZSAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ2ODU0NyAgIDM4NjA5NzM2NDkyMjIwMjgwMDk0NTY1OTg2MDQ0NzY4NDkgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg0OTggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAxMiBkaXZpZGUgIDQ3NTMxNTcwODAxMjc0NjgxMjc5MDgwNjA2MDc4MjE4MzkgICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3Nzg4Mzc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwNDAgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAxMyBkaXZpZGUgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODA0MTkgICAgNTUyNDQ4NTQ2MjAzNzU0MDYyODA1NzA2Mjc3ODgxOTAzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMTM4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTQgZGl2aWRlICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTE3Mzk1ICAgODQwNTk1NDUyNzk1MjE1ODQ1NTMyMzcxMzcyODkzMzg2NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MDQwNiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDE1IGRpdmlkZSAgNzU1NDA5NjUwMjIzNTMyMTE0MjU1NTgwMjIzODAxNjExNiAgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMjY1NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODYxOTMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAxNiBkaXZpZGUgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NDY3ODIgICA0MDUzMjU3Njc0MTI3NTE4NjA2ODcxMDU0OTM0NzY3MzU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5MjQzICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMTcgZGl2aWRlICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDExNTgyICAgNzExMjQxOTQyMDc1NTA5MDQ1NDcxNjg4ODg0NDAzODEwNSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2MjcwOSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDE4IGRpdmlkZSAgMzEzMjMwMjEzNzUyMDA3MjcyODE2NDU0OTczMDkxMTg0NiAgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MDg0MTYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDE5IGRpdmlkZSAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE2MTAxMyAgIDQ3ODgzNzQwNDU4NDE0MTYzNTU3MDY3MTUwNDgxOTAwNzcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzkzMDMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyMCBkaXZpZGUgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk1MTA1OTcgICA5NDY2MDIxNjM2MDQ3NjMwMjE4MjM4MDc1MDk5NDg0MDUzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MDQgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyMSBkaXZpZGUgICA5MTI3NDI3NDU2NDY3NjU2MjU1OTczOTk2OTIxMzg2NTAgICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzA1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMjIgZGl2aWRlICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTg4NTA0ICAgOTUwODQwMjc0MjkzMzY0MzIwODgwNjI2NDg5NzE5NTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjE0NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDIzIGRpdmlkZSAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDM2MDg5NSAgIDExODY5NTY3OTU3MjcyMzM3MDQ5NjIzNjE5MTQzMjk1NzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNjM4NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI0IGRpdmlkZSAgNTk3MjIxMDI2ODgzOTAxNDgxMjY5NjkxNjE3MDk2NzkzOCAgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5NTQ5NzQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjE3MSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDI1IGRpdmlkZSAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5MzE0MCAgIDIzMDM4MDE2MjU1MjE2MTk5MzA4OTQ0NjAxMzk3OTk2NDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzE3NzMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyNiBkaXZpZGUgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NjY1OTUgICA2MDIyMjMxNTYwMDAyODk4MjY0Nzc3MzkzNDczOTQ3MTk4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyNyBkaXZpZGUgIDg0MjYxNDgzMzU4MDEzOTYxOTk5NjkzNDYwMzIyMTA4OTMgICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjAzMTc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MTUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyOCBkaXZpZGUgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTg0MTE3NDkgICA4ODEyMjc4OTQ3MDI4Nzg0NjM3MzgyODQ3MDk4Mzg1MzE3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5OTkgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAyOSBkaXZpZGUgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAxMTYxNDYgICA4MTQ1MjgyMDAyMzQ4MzY3MzgzMjY0MTk3MTcwMDgzOTg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NDggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzMCBkaXZpZGUgIDY4MjE1Nzc1NzE4NzY4NDAxNTMxMjM1MTAxMDczODcwMjYgICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3NDE4MDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU0NTgyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMzEgZGl2aWRlICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDIzNzIwICAgOTAxODU1NTMxOTUxODk2Njk3MDQ4MDU2NTQ4MjAxMzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTUwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMzIgZGl2aWRlICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyNzg4ODY0ICAgNDYwMjE1NTcxMjk5ODIyODQ0OTY0MDcxNzI1MjgxODUwMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzNTYwMCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDMzIGRpdmlkZSAgNjY3NTYwNzQ4MTUyMjc4NTYxNDUwNjgyODI5MjI2NDQ3MiAgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNzcxMDAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODEwODMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzNCBkaXZpZGUgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjQ0NzIgICA0MDE1ODgxNTE2ODcxODMzODk3NzY2OTQ1ODM2MjYyNjQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTUgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzNSBkaXZpZGUgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY5MTAzNjUgICAxNDE1NTgwMjA1OTMzNDExODM3NTk1NDU5NzE2ODgwMTM5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEzNTIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzNiBkaXZpZGUgIDk0MzI5NjgyOTcwNjk1NDI4MTY3NTIwMzUyNzYzNjE1NTIgICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzUzMDU0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDAzNyBkaXZpZGUgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNDA2NTggICA0Nzk5MzE5NTkxMzAzODQ4NTAwNTMyNzY2NjgyMTcyNjU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMzMzMwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwMzggZGl2aWRlICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg0OTg3NDcyICAgIDMxNjg1NDI3MDczMjgzOTUyOTc5MDU4NDI4NTAwNDgzMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ1MjExNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDM5IGRpdmlkZSAgMzU5ODk4MTMwMDU5MjQ5MDQyNzgyNjAyNzk3NTY5NzQxNSAgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2ODY3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQwIGRpdmlkZSAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NjUyMCAgIDE2NjQzMTU0MzU2OTQ0NjEzNzExNTU4MDA2ODIxOTU2MTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQxIGRpdmlkZSAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjUxMDU4MSAgIDE2ODA4NzIzMTY1MzExMjg4OTAxMDI4NTUzMTY0OTU1NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQyIGRpdmlkZSAgOTg4MTI3NDg3OTU2NjQwNTQ3NTc1NTQ5OTI4MTY0NDczMCAgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2MTU3NDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQzIGRpdmlkZSAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3OTIxNiAgIDQ3MzcyMjU5NTc3MTc0NjY5NjA0NDcyMDQyMzIyNzc0NTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQ0IGRpdmlkZSAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjQxODI4OCAgIDI0ODIwOTczNzk0MTQ4NjcwNjEyMTMzMTkzNDYzODc5MzYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjIyOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDQ1IGRpdmlkZSAgNzQwNjk3NzU5NTIzMzc2MjcyMzU3NjQzNDEyMjE2MTg2OCAgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxODkwNDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjMzMTMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA0NiBkaXZpZGUgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3NzM1NzcgICAgMjI4NzgyMDU3NzU3NTY2MDQ3MDg2NTkzMjgxNzY5NzI3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY4MjggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA0NyBkaXZpZGUgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjc2NTMgICAyOTU2NTk0MjcwMjQwNTc5NjQ4ODIzMjcwNTQwMzY4NTU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2OTQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDggZGl2aWRlICA2MzI2OTY0MDk4ODk3NjIwNjIwNTM0MTM2NzY3NjM0MzQwICAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYxOTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzcxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNDkgZGl2aWRlICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzI3ODAwICAgIDQxNDU4NjQ0MDQ1NjU5MDIxNTI0NzAwMjY3ODMxNjkyMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2MjM4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTAgZGl2aWRlICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2Nzc5MTI1ICAgNzM2NDU1MjIwODU3MDAzOTM4NjIyMDUwNTYzNjgwMzU0OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2NjgzNyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDUxIGRpdmlkZSAgNTYyNjI2Njc0OTkwMjM2OTcxMDAyMjgyNDk1MDU5MDA1NiAgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTEwMDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgzMDggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1MiBkaXZpZGUgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NjA0ODQgICA0ODYzMjc4MjkzOTE2MTk3NDU0OTg3NDgxMzQzNDQyNTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2OTMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1MyBkaXZpZGUgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MzU0ODMgICAxMTcwNzEzNTgyMDMwNjM3MzU5NzEzMjQ5Nzk2ODIzMzQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAzNjggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA1NCBkaXZpZGUgIDk4MzgwNjI0OTQ3MjU5NjU2Njc3NzYzMjY1NTYwNTI5MzEgICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDYxMDAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNzk2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTUgZGl2aWRlICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4OTIyICAgNDA3MTM4ODczMTI5ODg2MTA5MzAwNTY4NzA5MTQ5ODI3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTU4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNTYgZGl2aWRlICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjcyNTI2ICAgODc1MzE1NTcyMjMyNDcwNjc5NTg1NTAzODU5MDI3NjY1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTI4MiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDU3IGRpdmlkZSAgNDM5OTk0MTkxMTUzMzI3MzQxODg0NDc0MjY1ODI0MDQ4NSAgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyMTk4OTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDY4MSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDU4IGRpdmlkZSAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDA1MDI2OSAgIDQxMjc4ODQxNTk5NDk1MDM2Nzc3NzY0MzA2MjAwMjYwOTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTg1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDU5IGRpdmlkZSAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQzODgwOCAgIDU1MzYxNjA4MjIzNjA4MDAwNjcwNDI1MjgzMTc0NTA2ODcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg1NDMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2MCBkaXZpZGUgIDM5NzMyMzQ5OTg0Njg2NjQ5MzY2NzEwODgyMzc3MTAyNDYgICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzQxODg2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIwMzY3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjEgZGl2aWRlICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI3MzU4ICAgOTgyNDg1NTkzNTYzODI2MzU5MzQxMDQ0NDE0MjMyODU3NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODc2MCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDYyIGRpdmlkZSAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDgxNDg2NyAgIDU5MTcwNzg1MTczNDAyMTgxMzE4NjczMjczMDA3ODg3MDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQyMiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDYzIGRpdmlkZSAgNDM1NDIzNjYwMTgzMDU0NDg4MjI4NjEzOTYxMjUyMTM2MiAgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1NDMyMjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDk3OTQgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2NCBkaXZpZGUgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM4OTEyOTQgICA4MDU4NDc0NzcyMzc1MjU5MDE3MzQyMTEwMDEzOTA2NzkyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNzY4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNjUgZGl2aWRlICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTY2MzI4ICAgNTUxOTYwNDAyMDk4MTc0ODE3MDUxNzA5Mzc0NjE4MTc2MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MjAzNiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDY2IGRpdmlkZSAgMTUwMjEzMDk2Njg3OTgwNTQ1ODgzMTMyMzc4MjQ0MzEzOSAgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0MTIyMTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDU4OCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDY3IGRpdmlkZSAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4Nzk4MDI3MCAgICA1NjI3OTU2MzM3MTk0ODEyMTI5MTUxNTk3ODgwMDcwNjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjM4NzcgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2OCBkaXZpZGUgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNjg4NzggICA2NTg0NzQzMzI0NDk0NjY0MjczOTQxMjgxNTU3MjU4OTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1MDggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA2OSBkaXZpZGUgIDM2MzIwMDAzMjcyODU3NDM5OTc5NzY0MzExMDk0MTY1MDAgICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDA4MTA3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzMTEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3MCBkaXZpZGUgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1NjE0NTAgICAxMTQ1ODI3MjM3MzE1NDMwMDg5Mzg4OTUzODM4NTI3MzMyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NzYgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3MSBkaXZpZGUgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczNTAzODAgICA4ODc0NDMxMDEwMzU3NjkxODY5NzI1MzcyMzE3MzE2NDcyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4MjEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3MiBkaXZpZGUgICA5OTI5NDg3MTg5MDI4MDQ2NDgxMTk3NTMxNDEyMDIxOTYgICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjM1MjIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY3Mzk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNzMgZGl2aWRlICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDM5OTg5ICAgMjUyMjczNTE4MzM3NDIxODUwNTE0MjQxNzI2NTQ1Mzc3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTMzNyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDc0IGRpdmlkZSAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzUwMTA1MiAgIDI2Njg0MTkxNjE5MTI5MzY1MDgwMDY4NzIzMDM0NzEwMzYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTI0OSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDc1IGRpdmlkZSAgMzAzNjE2OTA4NTY2NTE4NjcxMjU5MDk0MTExMTc3NTA5MiAgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE4MDg4NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ODg4MjcgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3NiBkaXZpZGUgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDYxNDcgICA5NDQxNjM0NjA0OTE3MjMxNjM4NTA4ODk4OTM0MDAwMjg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MjEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA3NyBkaXZpZGUgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4MzkxOTAgICAyNjc3MzAxMzUzMTY0Mzc3MDkxMTExNDU4ODExODY3NzIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODkzNDMwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwNzggZGl2aWRlICA2ODQ0OTc5MjAzMTEyMDY2MTY2NTgzNzY1ODU3MTcxNDI2ICAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE4OTY4MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzMyOSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDc5IGRpdmlkZSAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIzMTY2MSAgIDIyMjAzMzc0MzUxNDE3OTY3MjQzMjM3ODM5NjAyMDg3NzggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDMwNiAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDgwIGRpdmlkZSAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU2MTM4MCAgIDY0NDc0MjQ3MDAwMTk3ODM5MzE1Njk5OTY5ODk1NzI0NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODI4MjQgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4MSBkaXZpZGUgIDc1MTI4NTY3NjI2OTY2MDcxMTk4NDcwOTIxOTU1ODcxODAgICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTU3MzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NzEgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4MiBkaXZpZGUgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyMzc0ODIgICA3Mzk1MjYxOTgxMTkzOTYwMzk5MDg3ODE5MDc3MjQyNDg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMjMyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwODMgZGl2aWRlICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0Mzc2NzM1ICAgMjI1MzQ0MjQ2NzY4MjU4NDAzNTc5MjcyNDg4NDQwNzE3OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg2NDkwNCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDg0IGRpdmlkZSAgODE1MzEzODY4MDMwMDIxMzEzNTU3NzMzNjQ2NjE5MDk5NyAgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYyMjA2MDcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjM2ODMgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4NSBkaXZpZGUgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE4MDEzOTAgICA0NjY4NzMxMjUyMjU0MTQ4MDc0MDQxMDIyNjgxNzc4MTAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ODggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4NiBkaXZpZGUgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE4MTUwNTYgICA2MDc4NDA0NTU3OTkzNjY5Njk2MDQwNDI1NTAxNzk3NjEyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4NzAgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA4NyBkaXZpZGUgIDIzMDYzNTIzNTk4NzQyNjE2MjMyMjMzNTY4NzgzMTYyNzggICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzM1NjEyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE2MTcxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwODggZGl2aWRlICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDkxOTA4ICAgMzI2NDg0MjE4NjY2ODQ4MDM2MjkwMDkwOTU2NDA1ODY1OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTg0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwODkgZGl2aWRlICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjEyMjA0ICAgNjk3MTk4NTA0NzI3OTYzNjg3ODk1Nzk1OTYwODYxNTA4OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTg2MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDkwIGRpdmlkZSAgNTI2MjgxMDg4OTk1MjcyMTIzNTQ2NjQ0NTk3MzgxNjI1NyAgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM3ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMwNSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDkxIGRpdmlkZSAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA4MDI4OCAgIDc5NDc5NDQ3MzEwMzUyNjcxNzg1NDgzNTcwNzAwNjEzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM4NCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDkyIGRpdmlkZSAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQ0MzIyOSAgIDUwNzE4MDg5MDgzOTUzNzUxMDgzODMwMzU4MDA0MTI0MjkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA3MyAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDkzIGRpdmlkZSAgMjA0MzE0NjU0MjA4NDUwMzY1NTUxMTUwNzIwOTI2Mjk2OSAgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNDkyNjMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcwOCAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDk0IGRpdmlkZSAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTI2NDgwMiAgIDQwOTc2MzI3MzUzODQ1MzQxODE2NjE5NTk3MzEyMzQ0OTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzM5NSAgSW5leGFjdCBSb3VuZGVkDQotZHFkaXY0MDk1IGRpdmlkZSAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA0NDQzMCAgIDMwNjE0Nzc2NDI4MzEzODc0ODk3Mjk0NjQ1ODcwNTk0NTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTA5MzIgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA5NiBkaXZpZGUgIDM0Mjk4NTQ5NDEwMzk3NzYxNTk0OTg4MDI5MzYyNTI2MzggICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjQ2NDE1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTQgIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA5NyBkaXZpZGUgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyODQ1NDUgICA0ODc0MzI0OTc5NTc4NTk5NzAwMDI0MTMzMjc4MjYyMTMxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1OTggIEluZXhhY3QgUm91bmRlZA0KLWRxZGl2NDA5OCBkaXZpZGUgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MjA4ODIgICA1NzAxNjUyMzY5NjkxODMzNTQxNDU1OTc4NTE1ODM0ODU0ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc1NDk1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWRpdjQwOTkgZGl2aWRlICAyOTI4MjA1NzI4NDAyOTQ1MjY2OTUzMjU1NjMyMzQzMTEzICAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM3Mzc5NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5NTIyMyAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxRGl2aWRlLmRlY1Rlc3QgLS0gZGVjUXVhZCBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxCitkcWRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKK2RxZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41CitkcWRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDEKK2RxZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAorZHFkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCitkcWRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZHFkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCisKK2RxZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40CitkcWRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQKK2RxZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAorZHFkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKK2RxZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MAorZHFkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAorZHFkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKK2RxZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDAKK2RxZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQorZHFkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCisKK2RxZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxCitkcWRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41CitkcWRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41CitkcWRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41CitkcWRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41CitkcWRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41CitkcWRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41CitkcWRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41CitkcWRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKK2RxZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQorZHFkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCitkcWRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCitkcWRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMAorZHFkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCisKK2RxZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKK2RxZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1CitkcWRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKK2RxZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKK2RxZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1CitkcWRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKK2RxZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41CitkcWRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUKK2RxZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKK2RxZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1CitkcWRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUKK2RxZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RxZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41CitkcWRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUKK2RxZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKK2RxZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1CitkcWRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUKK2RxZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RxZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKK2RxZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1CitkcWRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKK2RxZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKK2RxZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1CitkcWRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKKworLS0gYmNkVGltZQorZHFkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAorZHFkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3MTIzMTkzOTA3NTExOTg1MzU5IEluZXhhY3QgUm91bmRlZAorCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxZGl2MDY3IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNjggZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDY5IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDcwIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTkKK2RxZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OQorZHFkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTkKK2RxZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTkKK2RxZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OQorZHFkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTkKK2RxZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTkKK2RxZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OQorZHFkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTkKK2RxZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTkKK2RxZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OQorZHFkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTkKK2RxZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTkKK2RxZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOQorCitkcWRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZHFkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMAorZHFkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKK2RxZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3CitkcWRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQKKworZHFkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKK2RxZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5CitkcWRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTAKK2RxZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQorZHFkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCisKK2RxZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RxZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQorZHFkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQorZHFkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCitkcWRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQorZHFkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCitkcWRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkcWRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyCitkcWRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzCitkcWRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0CitkcWRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1CitkcWRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2CitkcWRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3CitkcWRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4CitkcWRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5CitkcWRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAorCitkcWRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQKK2RxZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKKworZHFkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+IDI0NjkuNDkzODk4Nzc5NzU1OTUxMTkwMjM4MDQ3NjA5NTIyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAyNDczLjk0Nzg5NTc5MTU4MzE2NjMzMjY2NTMzMDY2MTMyMyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gMjUxOS4zODc3NTUxMDIwNDA4MTYzMjY1MzA2MTIyNDQ4OTggIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+IDI0NjkKK2RxZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAyNDIwLjU4ODIzNTI5NDExNzY0NzA1ODgyMzUyOTQxMTc2NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gMjQ2NC4wNzE4NTYyODc0MjUxNDk3MDA1OTg4MDIzOTUyMTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+IDI0NjguNTA2Mjk4NzQwMjUxOTQ5NjEwMDc3OTg0NDAzMTE5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBwb3NzaWJseSBpbXByZWNpc2UgcmVzdWx0cworZHFkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93CitkcWRpdjI3MCBkaXZpZGUgMSAxZTYxNDQgICAgICAgICAgICAgICAgICAtPiAxRS02MTQ0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RxZGl2MjcxIGRpdmlkZSAxIDAuOWU2MTQ0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWRpdjI3MiBkaXZpZGUgMSAwLjk5ZTYxNDQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2Mjc0IGRpdmlkZSA5ZTYxNDQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc1IGRpdmlkZSA5LjllNjE0NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc2IGRpdmlkZSA5Ljk5ZTYxNDQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKKworZHFkaXYyNzggZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMKK2RxZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKK2RxZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKK2RxZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzEKK2RxZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAorZHFkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAorZHFkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKK2RxZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKK2RxZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzEKK2RxZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKK2RxZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAorZHFkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMAorZHFkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKK2RxZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUKK2RxZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKK2RxZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKK2RxZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMAorZHFkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAorZHFkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcKK2RxZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3CisKK2RxZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKK2RxZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDAKK2RxZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAorZHFkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAorZHFkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNAorZHFkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAorZHFkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAorZHFkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDAKK2RxZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKK2RxZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKK2RxZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDAKK2RxZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAorZHFkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAorZHFkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNAorZHFkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgorZHFkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAorCistLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycKK2RxZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkcWRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkcWRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkcWRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMDY3MDc2MTAwNjEwMzkyNTE1NkUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkcWRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMDU1NjY2NTIxNDYxNDc1NDYyOUUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZHFkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDA2NTg4NzMxMzAwNDIzNzY3NjBFLTExIEluZXhhY3QgUm91bmRlZAorZHFkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZHFkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDAxNDU2MTg1NjA2MTc0MjI2OTdFLTEwIEluZXhhY3QgUm91bmRlZAorCistLSBoaWdoLWxvd3MKK2RxZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzEKK2RxZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKK2RxZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKK2RxZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzEKK2RxZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKK2RxZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKKworLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKK2RxZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQorZHFkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41CitkcWRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCitkcWRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMAorZHFkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41CitkcWRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKK2RxZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQorZHFkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAorZHFkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQorZHFkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUKK2RxZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQorZHFkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41CitkcWRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUKKworLS0gc29tZSByZWNpcHJvY2FscworZHFkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKK2RxZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0CitkcWRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMworZHFkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKKworLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKK2RxZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzIKK2RxZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKK2RxZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKK2RxZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMKK2RxZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKK2RxZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKKworZHFkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMgorZHFkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQorZHFkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgorZHFkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQorZHFkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgorZHFkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxZGl2NDk3ICBkaXZpZGUgIDBFKzYxMDggMTAwMEUtMzMgIC0+IDBFKzYxMTEgQ2xhbXBlZAorZHFkaXY0OTggIGRpdmlkZSAgMEUtNjE3MCAxMDAwRSszMyAgLT4gMEUtNjE3NiBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKKy0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcworZHFkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZAorCitkcWRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41CitkcWRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41CitkcWRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAorZHFkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCitkcWRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwCitkcWRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAorZHFkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCitkcWRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwCitkcWRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41CisKK2RxZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCitkcWRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMgorZHFkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKK2RxZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCitkcWRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMgorZHFkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKK2RxZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCitkcWRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMgorZHFkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKKworZHFkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCitkcWRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjAKK2RxZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAorZHFkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKK2RxZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42CitkcWRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKK2RxZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCitkcWRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNgorZHFkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0CitkcWRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKK2RxZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQorZHFkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCitkcWRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQorZHFkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUKK2RxZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41CitkcWRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKK2RxZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQorZHFkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAorZHFkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCitkcWRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDEKKworZHFkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKK2RxZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKK2RxZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40CitkcWRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKK2RxZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAorZHFkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDAKK2RxZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKK2RxZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40CisKKy0tICt2ZSBleHBvbmVudAorZHFkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKK2RxZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQorZHFkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQorZHFkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKK2RxZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5CitkcWRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKK2RxZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKK2RxZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5CisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RxZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMworZHFkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZHFkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMAorZHFkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAorZHFkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAorZHFkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMAorZHFkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RxZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMAorZHFkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCitkcWRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RxZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQorZHFkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQorZHFkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQorZHFkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQorZHFkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wCitkcWRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCitkcWRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCitkcWRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wCitkcWRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkcWRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcWRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkcWRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHFkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAorZHFkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONworZHFkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAorZHFkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMworZHFkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkcWRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKK2RxZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgKK2RxZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKK2RxZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKK2RxZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQKK2RxZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKK2RxZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKKworZHFkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCitkcWRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RxZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQorZHFkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUKK2RxZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCitkcWRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMgorZHFkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAorZHFkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKK2RxZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41CitkcWRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQorZHFkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQorZHFkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQorZHFkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCitkcWRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKKworLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RxZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIEd5dXJpcyBleGFtcGxlCitkcWRpdjEwNTAgIGRpdmlkZSA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTEyNTQgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RxZGl2MTc1MSBkaXZpZGUgIDFlKzQyNzcgIDFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzUyIGRpdmlkZSAgMWUrNDI3NyAtMWUtMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTMgZGl2aWRlIC0xZSs0Mjc3ICAxZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc1NCBkaXZpZGUgLTFlKzQyNzcgLTFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzU1IGRpdmlkZSAgMWUtNDI3NyAgMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NTYgZGl2aWRlICAxZS00Mjc3IC0xZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc1NyBkaXZpZGUgLTFlLTQyNzcgIDFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzU4IGRpdmlkZSAtMWUtNDI3NyAtMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFkaXYxNzYwIGRpdmlkZSAxZS02MDY5IDFlKzEwMSAtPiAxRS02MTcwIFN1Ym5vcm1hbAorZHFkaXYxNzYxIGRpdmlkZSAxZS02MDY5IDFlKzEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFkaXYxNzYyIGRpdmlkZSAxZS02MDY5IDFlKzEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbAorZHFkaXYxNzYzIGRpdmlkZSAxZS02MDY5IDFlKzEwNCAtPiAxRS02MTczIFN1Ym5vcm1hbAorZHFkaXYxNzY0IGRpdmlkZSAxZS02MDY5IDFlKzEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFkaXYxNzY1IGRpdmlkZSAxZS02MDY5IDFlKzEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxNzY2IGRpdmlkZSAxZS02MDY5IDFlKzEwNyAtPiAxRS02MTc2IFN1Ym5vcm1hbAorZHFkaXYxNzY3IGRpdmlkZSAxZS02MDY5IDFlKzEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc2OCBkaXZpZGUgMWUtNjA2OSAxZSsxMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NjkgZGl2aWRlIDFlLTYwNjkgMWUrMTEwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZHFkaXYxNzcwIGRpdmlkZSAxZSs0MCAxZS02MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxZGl2MTc3MSBkaXZpZGUgMWUrNDAgMWUtNjEwMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKK2RxZGl2MTc3MiBkaXZpZGUgMWUrNDAgMWUtNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCitkcWRpdjE3NzMgZGl2aWRlIDFlKzQwIDFlLTYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxZGl2MTc3NCBkaXZpZGUgMWUrNDAgMWUtNjEwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NSBkaXZpZGUgMWUrNDAgMWUtNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NiBkaXZpZGUgMWUrNDAgMWUtNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NyBkaXZpZGUgMWUrNDAgMWUtNjEwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3OCBkaXZpZGUgMWUrNDAgMWUtNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3OSBkaXZpZGUgMWUrNDAgMWUtNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFkaXYxODAxIGRpdmlkZSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCitkcWRpdjE4MDIgZGl2aWRlICAxLjAwMEUtNjE3MiAgIDFlKzEgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZGl2MTgwMyBkaXZpZGUgIDEuMDBFLTYxNzIgICAgMWUrMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFkaXYxODA0IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSszICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcWRpdjE4MDUgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWRpdjE4MDYgZGl2aWRlICAxLjNFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDcgZGl2aWRlICAxLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDggZGl2aWRlICAxLjdFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDkgZGl2aWRlICAyLjNFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTAgZGl2aWRlICAyLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTEgZGl2aWRlICAyLjdFLTYxNzIgICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTIgZGl2aWRlICAxLjQ5RS02MTcyICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTMgZGl2aWRlICAxLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTQgZGl2aWRlICAxLjUxRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTUgZGl2aWRlICAyLjQ5RS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTYgZGl2aWRlICAyLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTcgZGl2aWRlICAyLjUxRS02MTcyICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2MTgxOCBkaXZpZGUgIDFFLTYxNzIgICAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcWRpdjE4MTkgZGl2aWRlICAzRS02MTcyICAgICAgIDFlKzUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyMCBkaXZpZGUgIDVFLTYxNzIgICAgICAgMWUrNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODIxIGRpdmlkZSAgN0UtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODIyIGRpdmlkZSAgOUUtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODIzIGRpdmlkZSAgOS45RS02MTcyICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWRpdjE4MjQgZGl2aWRlICAxRS02MTcyICAgICAgLTFlKzQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFkaXYxODI1IGRpdmlkZSAgM0UtNjE3MiAgICAgIC0xZSs1ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE4MjYgZGl2aWRlIC01RS02MTcyICAgICAgIDFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyNyBkaXZpZGUgIDdFLTYxNzIgICAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgyOCBkaXZpZGUgLTlFLTYxNzIgICAgICAgMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgyOSBkaXZpZGUgIDkuOUUtNjE3MiAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgzMCBkaXZpZGUgIDMuMEUtNjE3MiAgICAtMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcWRpdjE4MzEgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgzMiBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMTk5IC0+IDFFLTYxNzYgICBTdWJub3JtYWwgUm91bmRlZAorZHFkaXYxODMzIGRpdmlkZSAgMS4wRS01OTc3ICAgICAxZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM0IGRpdmlkZSAgMi4wRS01OTc3ICAgICAyZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM1IGRpdmlkZSAgNC4wRS01OTc3ICAgICA0ZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM2IGRpdmlkZSAxMC4wRS01OTc3ICAgIDEwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM3IGRpdmlkZSAzMC4wRS01OTc3ICAgIDMwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM4IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjYgLT4gMS4wRS02MTQ4IFN1Ym5vcm1hbAorZHFkaXYxODM5IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjUgLT4gMS4wRS02MTQ3IFN1Ym5vcm1hbAorZHFkaXYxODQwIGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjQgLT4gMS4wRS02MTQ2IFN1Ym5vcm1hbAorCistLSByYW5kb21zCityb3VuZGluZzogIGhhbGZfZXZlbgorZHFkaXYyMDEwICBkaXZpZGUgIC01MjMxMTk1NjUyOTMxNjUxOTY4MDM0MzU2MTE3MTE4ODUwICAgICAgICAgLTcyNDM3MTg2NjQ0MjI1NDg1NzMyMDMyNjA5NzAuMzQ5OTUgICAgICAgICAgLT4gICA3MjIxNjkuOTA5NTgzMTI4NDYyNDczNjA1MTQ2MDU1MDY4MCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMSAgZGl2aWRlICAtODk1ODQ2Njk3NzM5MjcuODI3MTEyMzczNTAwMjI1MTUzNTIgICAgICAgIC00MjA3Nzk0MzcyODUyOTYzNTg4NC4yMTE0MjYyNzUzMjk4NSAgICAgICAgIC0+ICAgMC4wMDAwMDIxMjkwMTcyOTExNDY0NzE1NjU5MjgxMjU4ODc1MjcyNjYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTIgIGRpdmlkZSAgLTIuODI4MjAxNjkzMzYwNzIzMjAzODA2OTc0ODkxOTQ2MTgwRS0yMzIgICAgODEyNTk2NTQxMjIxODIzOTYwMzg2Mzg0NDAzMDg5MjQwLjkgICAgICAgICAtPiAgLTMuNDgwNDUwMDc1NjQwNTIxMzIwMDQwMDU1NzU5MTI1MTIwRS0yNjUgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTMgIGRpdmlkZSAgLTY0NDI3NzUzNzI3NjEwNjkyNjc1MDI5Mzc1Mzk0MDg3MjAgICAgICAgICAgMjQ5MDQwODUwNTYuNjkxODU0NjUxNDUxODI2MDYwODkxOTYgICAgICAgICAtPiAgLTI1ODcwMzU1NjM4ODIyNjQ2MzY4NzcwMS40ODg0NzE5NTg5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE0ICBkaXZpZGUgICA1LjUzNTUyMDAxMTI3MjYyNTYyOTYxMDA3OTg3OTcxNDcwNSAgICAgICAgLTQ0MzQzNjY0NjUwLjU3MjAzMDUyMDAzMDY4MTEzNTMxMjA4ICAgICAgICAgLT4gIC0xLjI0ODMyMjYzMDcyODA4OTMwODk3NTk0MDUzMzQ5MzU2MkUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTUgIGRpdmlkZSAgIDY1OTE5MjczNzEyNTE3ODY1OTY0MzI1Ljk5NDE5NjI1MDEwICAgICAgICAtMzE0NzMzMzU0MTQxMzgxNzM3Mzc4NjIyNTE1Ljc3ODkwNTQgICAgICAgICAtPiAgLTAuMDAwMjA5NDQ0ODI5NTUyMTQ5MDYxNjM3OTc4NDc1ODkxMTYzMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNiAgZGl2aWRlICAtNy43NzkxNzI1NjgxOTMxOTcxMDcxMTUyNzUxNDA0MzExMjlFKzc1OSAgIC0xNDA0NTMwMTU2MzkuMzk4ODk4NzY1Mjg5NTE3ODc4MjE0MyAgICAgICAgIC0+ICAgNS41Mzg2Mjk3OTIxNjE2NDE1MzQ5NjI3NzQyNDQyMzgxMTVFKzc0OCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNyAgZGl2aWRlICAgNjQ0MzE0ODMyNTk3NTY5LjAxODEyMjYwNjc1MTgxNzg3OTcgICAgICAgIC0xMTUwMjQ1ODUyNTc0MjUuMTYzNTc1OTUyMTU2NTIwMTA3NSAgICAgICAgIC0+ICAtNS42MDE1NDAxNTAzNTY0NzkyNTczNjc2ODc0NTA5MjI3OTUgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTggIGRpdmlkZSAgIDYuODk4NjQwOTQxNTc5NjExNDUwNjc2NTkyNTUzMjg2ODcwRS00NyAgICAtMTEyNzI0Mjk4ODE0MDc4NTE0ODUxNjM5MTQ5OTkuMjU5NDMgICAgICAgICAtPiAgLTYuMTE5OTIzNTc4Mjg1MzM4Njg5MzcxMTM3NjQ4MzE5MjgwRS03NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxOSAgZGl2aWRlICAtMzU5MTM0NDU0NDg4ODcyNzEzMy4zMDgxOTc1MDE2MzI1NCAgICAgICAgICA1MzI5Mzk1LjQyMzc5Mjc5NTY2MTQ0NjU2MTA5MDMzMTAzNyAgICAgICAgIC0+ICAtNjczODc0NjYyOTQxLjE5Njg1MjU1ODk0NjA1MzM3MjUyOTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjAgIGRpdmlkZSAgLTcuNjgyMzU2NzgxMzg0NjMxMzEzMTU2NDYyNzI0NDI1ODM4RSs3NDcgICAtNi42MDM3NTg1NTUxMjIxOTA1NzI4MTkyMjE0MTgwOTk0MEUrNzAzICAgICAtPiAgIDEuMTYzMzMwOTYwMjc5NTU2MDE2Njc4Mzc5MTI4ODc1MTQ5RSs0NCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMSAgZGl2aWRlICAtNDUxMTQ5NTU5NjU5Njk0MTgyMDg2MzIyNC4yNzQ2Nzk2OTkgICAgICAgICAzMzY1Mzk1MDE3LjI2MzMyOTc5NTQ0OTY2MTYxNjA5MDcyNCAgICAgICAgIC0+ICAtMTM0MDU1NDU0ODExNTMwNC45MDQxNjY4ODgwMTgzNDYyOTkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjIgIGRpdmlkZSAgIDUuMjExMTY0MTI3ODQwOTMxNTE3MjYzNjM5NjA4MTUxMjk5ICAgICAgICAgMTY0LjU1NjYzODEzNTYyNzY1NjcwMTI1MzM4NDcwMDY0NTMgICAgICAgICAtPiAgIDAuMDMxNjY3OTA1ODc2NTUyMjg4NjQ0NzgyNjAxNTcxNTY1MTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjMgIGRpdmlkZSAgLTQ5ODkxLjIyNDM4OTM0NTg4MzAzODQwNzc2ODQ2MjAzODMgICAgICAgICAtNDcxNzkuOTMxMjk2MTg2MDc0NzU1NDA1MzM3MTE3MTUzMCAgICAgICAgICAtPiAgIDEuMDU3NDY3MDg0Mzg2NzY3MjkxNjAyMTg5NjU2NDMwMjY4IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI0ICBkaXZpZGUgICAxNTA2NTQ3Ny40NzIxNDI2ODQ4ODA3NzQxNTQ2MjQxMzM1MyAgICAgICAgIDQzNjYyMTEuMTIwODkyOTUzMjYxMzA5NTI5NzQwNTUyNTk2ICAgICAgICAgLT4gICAzLjQ1MDQ2OTMwOTY2MTIyNzk4NDI0NDU0NTUxMzQ0MTM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNSAgZGl2aWRlICAgMS41NzU2NzAyNjk0NDA3NjE4NDYxMDk2MDI0Mjk2MTI2NDRFKzM3MCAgICA2NTMxOTk2NDkzMjQ3NDAzMDAuMDA2MTg1NDgyNjQzNDM5ICAgICAgICAgIC0+ICAgMi40MTIyMzM3OTU3MDAzNTkxNzA5MDQ1ODg1NDgwNDE0ODFFKzM1MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNiAgZGl2aWRlICAtMjExMjQyMjMxMTczMzQ0ODkyNDU3MzQzMjE5Mi42MjAxNDUgICAgICAgIC04MDA2NzIwNi4wMzU5MDY5MzE1Mzg0ODIxNTg0ODYxMzQwNiAgICAgICAgIC0+ICAgMjYzODMxMTUwODk0MTc2NjAxNzUuMjAxMDI2NDY3NTY1NzQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjcgIGRpdmlkZSAgLTY3MDk2NTM2MDUxMjc5ODA5LjMyMjE4NjExNTQ4NzIxODM5ICAgICAgICAtODY5Njg1NDEyODgxOTQxMDgxNjY0MjUxOTkwMTgxLjEwNDkgICAgICAgICAtPiAgIDcuNzE1MDM1MjM2NTg0ODA1OTIxMjc4NTY2MzY1MjMxMTY4RS0xNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyOCAgZGl2aWRlICAtNTg2MTI5MDg1NDg5NjIwNDcuMjE4NjY5MTM0MjU0ODg5NzIgICAgICAgIC05Nzg0NDk1OTc1MzEuMzg3MzY2NTU4MzQ3NTYzMzgzMTY0NCAgICAgICAgIC0+ICAgNTk5MDMuODYwODU5OTE3MDMwOTEyMzY1MDc4NTk4MzcwMjMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjkgIGRpdmlkZSAgLTEzMzAzMjQxMjAxMDk0Mi4xNDc2ODY0MTM4MjEzMzE5Nzk2ICAgICAgICAtNy44ODIwNTkyOTM0OTg2NzA3MDU0NDY1Mjg2NDgyMDEzNTlFLTQyOCAgICAtPiAgIDEuNjg3Nzg3NTA2NTA0NDMzMDY0NTQ5NTE1NjgxNjkzNzE1RSs0NDEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzAgIGRpdmlkZSAgIDEuODM3NDY2OTgzMzg5NjYwMjk0OTIyOTk3MTYzNjA1MTNFKzk3NyAgICAtOS44OTc5MjY2MDg5Nzk2NDk5NTE2NzI4Mzk4NzkxMjg2MDNFKzE1NCAgICAtPiAgLTEuODU2NDE2MDUxNTQyMjEyNTUyMDQyMzkwMjE4MDYyNDU4RSs4MjIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzEgIGRpdmlkZSAgLTExMzc0MjQ3NTg0MTM5OTIzNjMwNzEyODk2Mi4xNTA3MDYzICAgICAgICAgODI5ODYwMi4yMDMwNDk4MzQ3MzI2NTc1Njc5NjUyNjI5ODkgICAgICAgICAtPiAgLTEzNzA2MjIxMDA2NjY1MTM3ODI2LjE2NTU3MzkzOTE5OTI5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDMyICBkaXZpZGUgICAxOTYuNDc4NzU3NDY1MDc1NDE1Mjk5NTk0MTgwODMzMTg2MiAgICAgICAgIDkyOS42NTUzMzg4NDcyMzE4MDk0NDI3NDIyMTE3MTcyMzk0ICAgICAgICAgLT4gICAwLjIxMTM0NTgwNjYxNzY1MjY2NTEwMDY5MTc5MjI4MTQwMTggSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzMgIGRpdmlkZSAgIDcxOTMxMjIxNDY1LjQzODY3OTk2MjgyODAzNjI4MTMwMzUwICAgICAgICAgMzgzODY4NTkzNDIwNjQyNjI1NzA5MDcxOC40MDIyNDg4NTMgICAgICAgICAtPiAgIDEuODczODUwMTMyNTI3NDIzNDEzNjA3MTk5NTEzMzI0MDIxRS0xNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNCAgZGl2aWRlICAgNDg4LjQyODI1MDIyODk2NTE2NTM3ODM1OTYyNDYzMTI4ODUgICAgICAgIC04MC42ODk0MDk1NjgwNjYzNDI4MDA3ODcwNjU3Nzk1MzE4OCAgICAgICAgIC0+ICAtNi4wNTMxODkwNDcyODA2OTMzMTg4NDQ4MDE4OTk0NzMyNzIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzUgIGRpdmlkZSAgIDkuMDAxNzY0MzQ0OTYzOTIxNzU0OTgxNzYyOTEzMjQ3Mzk0RS0xNjIgICAtOC41ODU1NDA5NzM2NjcyMDU3NTM3MzQ5Njc2NDUzODY5MTlFLTcyOSAgICAtPiAgLTEuMDQ4NDc5NTc0MjcxODI3MzI2Mzk2MDEyNTczMjMyOTM0RSs1NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzYgIGRpdmlkZSAgLTcuNDA0MTMzOTU5NDA5ODk0NzQzNzA2NDAyODU3MTQ1NDcxRS04MjggICAtNTEuMzgxNTk5Mjk0NjAyODk3MTExMzQ2ODQ4NDMwODYyNjUgICAgICAgICAtPiAgIDEuNDQxMDA4ODU1NTE2MDI5NDYxMDMyMDYxNzg1MjE5NzczRS04MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzcgIGRpdmlkZSAgIDIuOTY3NTIwMjM1NTc0NDE5Nzk0MDQ4OTk0NDM2MDQwNzE3RS02MTMgICAtNjI1MjUxMzg1NS45MTM5NDg5NDk0OTg3OTI2MjczMTg4OSAgICAgICAgICAtPiAgLTQuNzQ2MTIzNDA1NjU2NDA5MTI3NTcyOTk4NzUxODg1MzM4RS02MjMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzggIGRpdmlkZSAgLTE4ODI2ODUyNjU0ODI0MDQwNTA1LjgzOTIwMzY2NzY1MDUxICAgICAgICAtNjMzNjkyNDg3Nzk0MjQzNzk5MjU5MDU1NzQ2MDE0NzM0MCAgICAgICAgICAtPiAgIDIuOTcwOTc2MTQ2NTQ2NDk0NjY5ODA3ODg2Mjc4NTE5MTk0RS0xNSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzOSAgZGl2aWRlICAtOC4xMDE0MDY3ODQ4MDkxOTc2MDQ5NDk1ODQwMDE3MzU5NDlFKzU2MSAgICA0LjgyMzMwMDMwNjk0ODk0MjgyMTA3NjY4MTY1ODc3MTYzNUUrMzYxICAgIC0+ICAtMS42Nzk2Mzk3MjE2MTA4MzkyMDQ3Mzg0NDU3NDcyMzg5ODdFKzIwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0MCAgZGl2aWRlICAtNi4xMTk4MTk3Nzc3MzA5NDA1MjMzMTA2MjU4NTE5MTcyM0UrMjk1ICAgICAxLjUwNzYxMDI1Mzc1NTMzOTMyODMwMjc3OTAwNTU4NjUzNEUrMjM4ICAgIC0+ICAtNC4wNTkyODUwNTg5MTE1NzcyNDQwNDQ0MTg0MTYwNDQ3NjNFKzU3IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQxICBkaXZpZGUgICA2LjQ3MjYzODg1MDA0NjgxNTg4MDU5OTIyMDUzNDI3NDA1NUUtNTk2ICAgLTQuNDc1MjMzNzEyMDgzMDQ3NTE2OTMzOTExNzg2MTU5OTcyICAgICAgICAgLT4gIC0xLjQ0NjMyNDIwNzA2MjI2MTc0NTUyMDQ5NjQ3NTc3ODg3OUUtNTk2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQyICBkaXZpZGUgIC04NDQzODU5MzMzMC43MTI3NzgzOTYzMTE0NDUwOTM5NzExMiAgICAgICAgLTU4NjY4NDU5NjIwNDQwMTY2NDIwODk0Ny40MDU0ODc5NjMzICAgICAgICAgLT4gICAxLjQzOTI1MDIxODU1MDA0MTIyODc1OTk4MzkzNzc3MjUwNEUtMTMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDMgIGRpdmlkZSAgIDkuMzU0NTMzMjMzMjk0MDIyNjE2Njk1ODE1NjU2NzA0MzY5RS0yNCAgICAgNDA1LjUwMDM5MDYyNjEzNTMwNDI1MjE0NDE2MzU5MTc0NiAgICAgICAgICAtPiAgIDIuMzA2OTExMDI4ODI3Nzc0NTQ5NzQwNTcxMjI5NzM2MTk4RS0yNiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NCAgZGl2aWRlICAgOTg1NjA2NDIzMzUwMjEwLjczNzQ4NzY2NTAxNDk5NTc4ODEgICAgICAgIC0zNjgxMTU2MzY5Ny40MTkyNTY4MTg2NjY5NDg1OTgyODc5NCAgICAgICAgIC0+ICAtMjY3NzQuMzY5OTA4NjQxMTk0NDUzMzU4MTMzNTQ3MTc3MTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDUgIGRpdmlkZSAgLTguMTg3MjgwNzc0MTc3NzE1NzA2Mjc4MDAyMjQ3NzY2MzExRS0xMjMgICAtMzg3ODQxMjQzOTMuOTEyMTI4NzA4Mjg0MzAwMDEzMDAwNjggICAgICAgICAtPiAgIDIuMTEwOTg3NjUzMzU2MTM5MTQ3MzU3MjQwNzI3Nzk0MzY1RS0xMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDYgIGRpdmlkZSAgLTQuNjEyMjAzMTI2MzUwMDcwOTAzNDU5MjQ1Nzk4MzcxNjU3RSs5MTIgICAgNy45NzE1NjIxODI3Mjc5NTYyOTA5MDE5ODQ3MzY4MDA1MTlFKzY0ICAgICAtPiAgLTUuNzg1ODIwOTIyNzA4NjgzMjM3MDk4ODI2NjYyNzY5NzQ4RSs4NDcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDcgIGRpdmlkZSAgIDQuNjYxMDE1OTA5NDIxNDg1Mjk4MjQ3OTI4OTY3OTc3MDg5RSs4ODggICAtNi4zNjA5MTEyNTMzMjM5MjIzMzg3MzczMTE1NjM4NDU1ODFFKzM4OCAgICAtPiAgLTcuMzI3NTkxNDc4MzIxMzY1OTgwMTU2NjU0NTM5NjM4ODM2RSs0OTkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDggIGRpdmlkZSAgIDkxNTYwNzgxNzI5MDMuMjU3NTAwMDAzMjYwNzEwODMzMDMwICAgICAgICAgNy4xODk3OTY2NTMyNjIxNDcxMzkwNzE2MzQyMzc5NjQwNzRFLTkwICAgICAtPiAgIDEuMjczNDgyMjE1NzY2MDAwOTk0MzY1MjAxNTQ1MDk2MDI2RSsxMDIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDkgIGRpdmlkZSAgLTEuNzEwNzIyMzAzMzI3NDc2NTg2MzczNDc3NzgxMjc2NTg2RS0zMTEgICAtMzE2NzU2MTYyODI2MDE1NjgzNzMyOTMyMy43MjkzODA2OTUgICAgICAgICAtPiAgIDUuNDAwNzU0NTk5NTc4NjEzOTg0ODc1NzUyOTU4NjQ1NjU1RS0zMzYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTAgIGRpdmlkZSAgLTQuNjQ3OTM1MjEwODgxODA2MjM4MzIxNjE2MzQ1NDEzMDIxRS04NzggICAgMjA5Mzg4LjU0MzE4Njc3NDQ2NDgxNzczMDg0NjA2Mzk1ODIgICAgICAgICAtPiAgLTIuMjE5NzY1NzcxMzk0NTkzNzMzMTQwNDk0Mjk3Mzg4MTQwRS04ODMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTEgIGRpdmlkZSAgIDU5NTguNjk0NzI4Mzk1NzYwOTkyNzE5MDg0NzgxNTgyNzAwICAgICAgICAgNC41NDE1MTAxNTY1NjQzMTU2MzI1MzYzNTMxNzE4NDYwOTZFLTc0NiAgICAtPiAgIDEuMzEyMDUxMzkzMjUzNjM4NjY0OTQ3ODUyNjkzMDA1NDgwRSs3NDkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTIgIGRpdmlkZSAgLTcuOTM1NzMyNTQ0NjQ5NzAyMTc1MjU2Njk5ODg2ODcyMDkzRS00ODkgICAtNy40MzMzMjkwNzM2NjQ3OTMxMzg5OTg3NjU2NDc0Njc5NzFFKzM2MCAgICAtPiAgIDEuMDY3NTg3OTQ5NjI2MDc2OTE3NjcyMjcxNjE5NjY0NjU2RS04NDkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTMgIGRpdmlkZSAgLTI3NDY2NTA4NjQ2MDExNTcuODYzNTg5OTU5OTM5OTAxMzUwICAgICAgICAgNy4wMTY2ODQ5NDU1MDc2NDc1Mjg5MDcxODQ2OTQzNTk1OThFKzU0OCAgICAtPiAgLTMuOTE0NDU2NTkzMDA5MzA5NTI5MzUxMjU0OTUwNDI5OTMyRS01MzQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTQgIGRpdmlkZSAgIDM2MDUxNDk0MDg2MzExOTczNjU0NDc5NTMuOTk0NTY5MTc4ICAgICAgICAtNzU2MTQwMjU4MjU2NDkwODIuNzgyNjQ4NjQ0MjgyMzc4MzMgICAgICAgICAtPiAgLTQ3Njc4MzE1Ljg4NDcyNjkzNTA3MDYwMDYzMTg4MDIwNTMyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU1ICBkaXZpZGUgICA3ODgxOTQzMjA5MjE3OTg0MDQ5MDYzNzUyMTQuMTk2MzQ5ICAgICAgICAgLTYuMjIyNzE4MTQ4NDMzMjQ3Mzg0OTMyNTczNDAxOTc2MzM3RS00MTggICAgLT4gIC0xLjI2NjYzOTkxODYzNDY3MTgwMzk4MjIyMjI0NDk3NzI4N0UrNDQ0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU2ICBkaXZpZGUgICA1NjIwNzIyNzMwNTM0NzUyLjc1ODIwODk0MzQ0NzYwMzIxMSAgICAgICAgIDYuODQzNTUyODQxMTY4NTM4MzE5MTIzMDAwOTE3NjU3NzU5RS0xMzkgICAgLT4gICA4LjIxMzE2NDgwMDQ4NTQzNDY2NjYyOTk3MDQ0MzczOTU1NEUrMTUzIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU3ICBkaXZpZGUgICA3MzA0NTM0Njc2NzEzNzAzOTM4MTAyLjQwMzk0OTAxOTQwMiAgICAgICAgLTU3NjE2OS4zNjg1MDEwOTM1MTA4MTUzMDIzODAzNTkwODM1ICAgICAgICAgLT4gIC0xMjY3Nzc1NjAxNDIwMTk5NS4zMTk2OTIzNzE0NDM5NDc3MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1OCAgZGl2aWRlICAgODA2NzkxODc2Mi4xMzQ2MjE2MzkyNTQ5MTY3ODY5NDU1NDcgICAgICAgIC04Ljc3NDc3MTQ4MDA1NTUzNjAwOTEwNTU5NjE2Mzg2NDc1OEUrOTU0ICAgIC0+ICAtOS4xOTQ0NDg4NTg4MzYzMzIxNTY3NjY3NjQ2MDUxMjUyNDVFLTk0NiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1OSAgZGl2aWRlICAgOC43MDIwOTM0NTQxMjMwNDY1MDc1NzgyNTY4OTk1Mzc1NjNFLTMyNCAgIC01Ljg3NTM5OTczMzAxNjAxODQwNDU4MDIwMTE3NjU3NjI5M0UtNDAxICAgIC0+ICAtMS40ODExMDY2MjI0NTIwNTI1ODE0NzA0NDM1MjY5NTczMzVFKzc3IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDYwICBkaXZpZGUgIC00MTQyNi4wMTY2MjUxODQ1MTg2MTM4NjM1MjQxNTA5MjM1NiAgICAgICAgIDkwLjAwMTQ2NjIxNjg0NDc4MzAwNTEwNzY5ODAyMDEzNDY0ICAgICAgICAgLT4gIC00NjAuMjgxNTc1MDI4NzMxODY5MjczMjA2NzcwOTE3NjIwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tIGRpdmlkZSB0ZXN0cyB3aXRoIHJlc3VsdCBuZWFyIDEKK2RxZGl2NDAwMSBkaXZpZGUgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ1MjQ5MDAgICAyMDAzMTAwMzUyNzcwNzUzOTY5ODc4OTI1NjY0NDk3ODI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1MTcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDAyIGRpdmlkZSAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM3MTY0NSAgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNjIwOTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTk4MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDMgZGl2aWRlICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTYwMjgyICAgODI5OTE4NzQxMDkyMDA2NzMyNTY0ODA2ODQzOTU5MTE1OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Mjc5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDQgZGl2aWRlICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1MzY1ODk5ICAgNTY0MTA4ODQ1NTg5NzQwNzA0NDU0NDQ2MTc4NTM4OTk2NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzMzOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDUgZGl2aWRlICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNDkwNDI0ICAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzUwMjcyMyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODYxOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDYgZGl2aWRlICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MDk5NjY1ICAgNjc2MjA3OTQ3NzM3MzY3MDU5NDgyOTMxOTM0NjEzMjU3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MTMyNiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDcgZGl2aWRlICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjAyOTE2ICAgNzI4NjQyNTE1MzY5MTg5MDM0MTYzMzAyMzIyMjYwNjU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDggZGl2aWRlICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTQ2NjU1ICAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTkxOTEyNCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwOSBkaXZpZGUgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU2MTQzMTEgICA0MjgyMDUzOTQxODkzOTUxNzQyMDI5NDQ0MDY1NTgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyOTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDEwIGRpdmlkZSAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMzODY5NSAgICA2MjY4ODgyMjU0NDEyNTA2Mzk3NDE3ODE4NTAzMjcyOTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE3OSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTEgZGl2aWRlICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDY4NTQ3ICAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ3Njg0OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODQ5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTIgZGl2aWRlICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3ODIxODM5ICAgNDc1MzE1NzA4MDEyNzQ2ODEyNzkwODA2MDYwNzc4ODM3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDQwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMyBkaXZpZGUgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODA0MTkgICAgNTUyNDQ4NTQ2MjAzNzU0MDYyODA1NzA2Mjc3ODgxOTAzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMTM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNCBkaXZpZGUgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MTczOTUgICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTMzODY2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNDA2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNSBkaXZpZGUgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMTYxMTYgICA3NTU0MDk2NTAyMjM1MzIxMTQyNTU1ODAyMjM4MDI2NTQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg2MTkzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNiBkaXZpZGUgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NDY3ODIgICA0MDUzMjU3Njc0MTI3NTE4NjA2ODcxMDU0OTM0NzY3MzU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5MjQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNyBkaXZpZGUgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMTE1ODIgICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDM4MTA1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxOCBkaXZpZGUgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MTE4NDYgICAzMTMyMzAyMTM3NTIwMDcyNzI4MTY0NTQ5NzMwOTA4NDE2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE5IGRpdmlkZSAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE2MTAxMyAgIDQ3ODgzNzQwNDU4NDE0MTYzNTU3MDY3MTUwNDgxOTAwNzcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzkzMDMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDIwIGRpdmlkZSAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTUxMDU5NyAgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk0ODQwNTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjEgZGl2aWRlICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM4NjUwICAgIDkxMjc0Mjc0NTY0Njc2NTYyNTU5NzM5OTY5MjEzOTA0MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTcwNSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjIgZGl2aWRlICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTg4NTA0ICAgOTUwODQwMjc0MjkzMzY0MzIwODgwNjI2NDg5NzE5NTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjE0NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjMgZGl2aWRlICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzYwODk1ICAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDMyOTU3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Mzg1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyNCBkaXZpZGUgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5Njc5MzggICA1OTcyMjEwMjY4ODM5MDE0ODEyNjk2OTE2MTcwOTU0OTc0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxNzEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI1IGRpdmlkZSAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5MzE0MCAgIDIzMDM4MDE2MjU1MjE2MTk5MzA4OTQ0NjAxMzk3OTk2NDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzE3NzMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI2IGRpdmlkZSAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk2NjU5NSAgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NDcxOTggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjcgZGl2aWRlICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjEwODkzICAgODQyNjE0ODMzNTgwMTM5NjE5OTk2OTM0NjAzMjIwMzE3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTE1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyOCBkaXZpZGUgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTg0MTE3NDkgICA4ODEyMjc4OTQ3MDI4Nzg0NjM3MzgyODQ3MDk4Mzg1MzE3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5OTkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI5IGRpdmlkZSAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDExNjE0NiAgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAwODM5ODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzk0OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzAgZGl2aWRlICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3Mzg3MDI2ICAgNjgyMTU3NzU3MTg3Njg0MDE1MzEyMzUxMDEwNzQxODAwOCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NDU4MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzEgZGl2aWRlICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDIzNzIwICAgOTAxODU1NTMxOTUxODk2Njk3MDQ4MDU2NTQ4MjAxMzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTUwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMiBkaXZpZGUgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI3ODg4NjQgICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyODE4NTAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTM1NjAwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMyBkaXZpZGUgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNjQ0NzIgICA2Njc1NjA3NDgxNTIyNzg1NjE0NTA2ODI4MjkyMjc3MTAwICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgxMDgzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNCBkaXZpZGUgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjQ0NzIgICA0MDE1ODgxNTE2ODcxODMzODk3NzY2OTQ1ODM2MjYyNjQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM1IGRpdmlkZSAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjkxMDM2NSAgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY4ODAxMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTM1MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzYgZGl2aWRlICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzYxNTUyICAgOTQzMjk2ODI5NzA2OTU0MjgxNjc1MjAzNTI3NjM1MzA1NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNyBkaXZpZGUgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNDA2NTggICA0Nzk5MzE5NTkxMzAzODQ4NTAwNTMyNzY2NjgyMTcyNjU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMzMzMwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzOCBkaXZpZGUgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODQ5ODc0NzIgICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg1MDA0ODMyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDUyMTE0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzOSBkaXZpZGUgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2OTc0MTUgICAzNTk4OTgxMzAwNTkyNDkwNDI3ODI2MDI3OTc1Njg2NzEyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NzQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQwIGRpdmlkZSAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NjUyMCAgIDE2NjQzMTU0MzU2OTQ0NjEzNzExNTU4MDA2ODIxOTU2MTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDEgZGl2aWRlICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NTEwNTgxICAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjQ5NTU0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0MiBkaXZpZGUgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2NDQ3MzAgICA5ODgxMjc0ODc5NTY2NDA1NDc1NzU1NDk5MjgxNjE1NzQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MzQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQzIGRpdmlkZSAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3OTIxNiAgIDQ3MzcyMjU5NTc3MTc0NjY5NjA0NDcyMDQyMzIyNzc0NTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDQgZGl2aWRlICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2NDE4Mjg4ICAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjM4NzkzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMjI4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NSBkaXZpZGUgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxNjE4NjggICA3NDA2OTc3NTk1MjMzNzYyNzIzNTc2NDM0MTIyMTg5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzMzEzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NiBkaXZpZGUgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3NzM1NzcgICAgMjI4NzgyMDU3NzU3NTY2MDQ3MDg2NTkzMjgxNzY5NzI3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY4MjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ3IGRpdmlkZSAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2NzY1MyAgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjg1NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY5NDYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ4IGRpdmlkZSAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYzNDM0MCAgIDYzMjY5NjQwOTg4OTc2MjA2MjA1MzQxMzY3Njc2MTkzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDkgZGl2aWRlICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzI3ODAwICAgIDQxNDU4NjQ0MDQ1NjU5MDIxNTI0NzAwMjY3ODMxNjkyMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2MjM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MCBkaXZpZGUgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY3NzkxMjUgICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2ODAzNTQ4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2ODM3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MSBkaXZpZGUgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTAwNTYgICA1NjI2MjY2NzQ5OTAyMzY5NzEwMDIyODI0OTUwNTkxMDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MzA4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MiBkaXZpZGUgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NjA0ODQgICA0ODYzMjc4MjkzOTE2MTk3NDU0OTg3NDgxMzQzNDQyNTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2OTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUzIGRpdmlkZSAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgzNTQ4MyAgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MjMzNDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDM2OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTQgZGl2aWRlICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDUyOTMxICAgOTgzODA2MjQ5NDcyNTk2NTY2Nzc3NjMyNjU1NjA2MTAwMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTc5NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTUgZGl2aWRlICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4OTIyICAgNDA3MTM4ODczMTI5ODg2MTA5MzAwNTY4NzA5MTQ5ODI3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NiBkaXZpZGUgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzI1MjYgICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjc2NjU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NyBkaXZpZGUgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyNDA0ODUgICA0Mzk5OTQxOTExNTMzMjczNDE4ODQ0NzQyNjU4MjE5ODkxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2ODEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU4IGRpdmlkZSAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDA1MDI2OSAgIDQxMjc4ODQxNTk5NDk1MDM2Nzc3NzY0MzA2MjAwMjYwOTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTg1NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTkgZGl2aWRlICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDM4ODA4ICAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQ1MDY4NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODU0MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjAgZGl2aWRlICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzEwMjQ2ICAgMzk3MzIzNDk5ODQ2ODY2NDkzNjY3MTA4ODIzNzc0MTg4NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMDM2NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjEgZGl2aWRlICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI3MzU4ICAgOTgyNDg1NTkzNTYzODI2MzU5MzQxMDQ0NDE0MjMyODU3NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODc2MCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjIgZGl2aWRlICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwODE0ODY3ICAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDc4ODcwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDIyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MyBkaXZpZGUgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1MjEzNjIgICA0MzU0MjM2NjAxODMwNTQ0ODgyMjg2MTM5NjEyNTQzMjIzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5Nzk0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NCBkaXZpZGUgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM4OTEyOTQgICA4MDU4NDc0NzcyMzc1MjU5MDE3MzQyMTEwMDEzOTA2NzkyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNzY4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NSBkaXZpZGUgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxNjYzMjggICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTgxNzYzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcyMDM2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NiBkaXZpZGUgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0NDMxMzkgICAxNTAyMTMwOTY2ODc5ODA1NDU4ODMxMzIzNzgyNDEyMjEzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA1ODggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY3IGRpdmlkZSAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4Nzk4MDI3MCAgICA1NjI3OTU2MzM3MTk0ODEyMTI5MTUxNTk3ODgwMDcwNjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjM4NzcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY4IGRpdmlkZSAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI2ODg3OCAgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNTg5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjkgZGl2aWRlICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDE2NTAwICAgMzYzMjAwMDMyNzI4NTc0Mzk5Nzk3NjQzMTEwOTQwODEwNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzExICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MCBkaXZpZGUgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1NjE0NTAgICAxMTQ1ODI3MjM3MzE1NDMwMDg5Mzg4OTUzODM4NTI3MzMyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NzYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDcxIGRpdmlkZSAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzM1MDM4MCAgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczMTY0NzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzIgZGl2aWRlICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjAyMTk2ICAgIDk5Mjk0ODcxODkwMjgwNDY0ODExOTc1MzE0MTIzNTIyMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2NzM5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzMgZGl2aWRlICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDM5OTg5ICAgMjUyMjczNTE4MzM3NDIxODUwNTE0MjQxNzI2NTQ1Mzc3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTMzNyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzQgZGl2aWRlICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNTAxMDUyICAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzQ3MTAzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NSBkaXZpZGUgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE3NzUwOTIgICAzMDM2MTY5MDg1NjY1MTg2NzEyNTkwOTQxMTExODA4ODQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODg4ODI3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NiBkaXZpZGUgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDYxNDcgICA5NDQxNjM0NjA0OTE3MjMxNjM4NTA4ODk4OTM0MDAwMjg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MjEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc3IGRpdmlkZSAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTgzOTE5MCAgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4Njc3MjIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTM0MzAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc4IGRpdmlkZSAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE3MTQyNiAgIDY4NDQ5NzkyMDMxMTIwNjYxNjY1ODM3NjU4NTcxODk2ODIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzMjkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc5IGRpdmlkZSAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIzMTY2MSAgIDIyMjAzMzc0MzUxNDE3OTY3MjQzMjM3ODM5NjAyMDg3NzggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDMwNiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODAgZGl2aWRlICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTYxMzgwICAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU3MjQ1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MjgyNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODEgZGl2aWRlICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTg3MTgwICAgNzUxMjg1Njc2MjY5NjYwNzExOTg0NzA5MjE5NTU1NzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MiBkaXZpZGUgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyMzc0ODIgICA3Mzk1MjYxOTgxMTkzOTYwMzk5MDg3ODE5MDc3MjQyNDg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMjMyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MyBkaXZpZGUgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQzNzY3MzUgICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0NDA3MTc4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODY0OTA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NCBkaXZpZGUgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYxOTA5OTcgICA4MTUzMTM4NjgwMzAwMjEzMTM1NTc3MzM2NDY2MjIwNjA3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzNjgzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NSBkaXZpZGUgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE4MDEzOTAgICA0NjY4NzMxMjUyMjU0MTQ4MDc0MDQxMDIyNjgxNzc4MTAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ODggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg2IGRpdmlkZSAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTgxNTA1NiAgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE3OTc2MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjg3MCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODcgZGl2aWRlICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzE2Mjc4ICAgMjMwNjM1MjM1OTg3NDI2MTYyMzIyMzM1Njg3ODMzNTYxMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNjE3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODggZGl2aWRlICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDkxOTA4ICAgMzI2NDg0MjE4NjY2ODQ4MDM2MjkwMDkwOTU2NDA1ODY1OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTg0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4OSBkaXZpZGUgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTIyMDQgICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjE1MDg4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ODYzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MCBkaXZpZGUgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM4MTYyNTcgICA1MjYyODEwODg5OTUyNzIxMjM1NDY2NDQ1OTczNzgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzMDUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkxIGRpdmlkZSAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA4MDI4OCAgIDc5NDc5NDQ3MzEwMzUyNjcxNzg1NDgzNTcwNzAwNjEzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM4NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTIgZGl2aWRlICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDQzMjI5ICAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQxMjQyOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDczICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MyBkaXZpZGUgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNjI5NjkgICAyMDQzMTQ2NTQyMDg0NTAzNjU1NTExNTA3MjA5MjQ5MjYzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3MDggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk0IGRpdmlkZSAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTI2NDgwMiAgIDQwOTc2MzI3MzUzODQ1MzQxODE2NjE5NTk3MzEyMzQ0OTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzM5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTUgZGl2aWRlICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDQ0NDMwICAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA1OTQ1MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDkzMiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTYgZGl2aWRlICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjUyNjM4ICAgMzQyOTg1NDk0MTAzOTc3NjE1OTQ5ODgwMjkzNjI0NjQxNSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NyBkaXZpZGUgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyODQ1NDUgICA0ODc0MzI0OTc5NTc4NTk5NzAwMDI0MTMzMjc4MjYyMTMxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1OTggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk4IGRpdmlkZSAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgyMDg4MiAgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MzQ4NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzU0OTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk5IGRpdmlkZSAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM0MzExMyAgIDI5MjgyMDU3Mjg0MDI5NDUyNjY5NTMyNTU2MzIzNzM3OTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTUyMjMgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkcWRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlSW50LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdAppbmRleCAzZmVjNmRiLi5jMjkwMzUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdApAQCAtMSw0NTMgKzEsNDUzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcURpdmlkZUludC5kZWNUZXN0IC0tIGRlY1F1YWQgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLQ0KLWRxZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQ0KLWRxZHZpMDAyIGRpdmlkZWludCAgMiAgICAgMSAgICAtPiAgMg0KLWRxZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMA0KLWRxZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQ0KLWRxZHZpMDA1IGRpdmlkZWludCAgMCAgICAgMSAgICAtPiAgMA0KLWRxZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMA0KLWRxZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMA0KLWRxZHZpMDA4IGRpdmlkZWludCAgMiAgICAgMyAgICAtPiAgMA0KLWRxZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQ0KLQ0KLWRxZHZpMDEwIGRpdmlkZWludCAgMi40ICAgMSAgICAtPiAgMg0KLWRxZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTINCi1kcWR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yDQotZHFkdmkwMTMgZGl2aWRlaW50ICAtMi40ICAtMSAgIC0+ICAyDQotZHFkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyDQotZHFkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyDQotZHFkdmkwMTYgZGl2aWRlaW50ICAyLjQgICAyICAgIC0+ICAxDQotZHFkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxDQotZHFkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxDQotZHFkdmkwMTkgZGl2aWRlaW50ICAyMCAgICAyMCAgIC0+ICAxDQotDQotZHFkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxDQotZHFkdmkwMjEgZGl2aWRlaW50ICA1ICAgICAyICAgIC0+ICAyDQotZHFkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDINCi1kcWR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMg0KLWRxZHZpMDI0IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLWRxZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KLQ0KLWRxZHZpMDMwIGRpdmlkZWludCAgMSAgICAgMiAgICAgIC0+ICAwDQotZHFkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDANCi1kcWR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMA0KLWRxZHZpMDMzIGRpdmlkZWludCAgMSAgICAgMTYgICAgIC0+ICAwDQotZHFkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDANCi1kcWR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMA0KLWRxZHZpMDQwIGRpdmlkZWludCAgMSAgICAtMiAgICAgIC0+IC0wDQotZHFkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTANCi1kcWR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMA0KLWRxZHZpMDQzIGRpdmlkZWludCAgMSAgICAtMTYgICAgIC0+IC0wDQotZHFkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTANCi1kcWR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMA0KLWRxZHZpMDUwIGRpdmlkZWludCAtMSAgICAgMiAgICAgIC0+IC0wDQotZHFkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTANCi1kcWR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMA0KLWRxZHZpMDUzIGRpdmlkZWludCAtMSAgICAgMTYgICAgIC0+IC0wDQotZHFkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTANCi1kcWR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMA0KLWRxZHZpMDYwIGRpdmlkZWludCAtMSAgICAtMiAgICAgIC0+ICAwDQotZHFkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDANCi1kcWR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMA0KLWRxZHZpMDYzIGRpdmlkZWludCAtMSAgICAtMTYgICAgIC0+ICAwDQotZHFkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDANCi1kcWR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMA0KLQ0KLS0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuDQotZHFkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDENCi1kcWR2aTE2MSBkaXZpZGVpbnQgIDEgICAgIDEwICAgICAgICAtPiAgMA0KLWRxZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwDQotZHFkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDANCi1kcWR2aTE2NCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwICAgICAtPiAgMA0KLWRxZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwDQotZHFkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDANCi1kcWR2aTE2NyBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwICAtPiAgMA0KLWRxZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwDQotZHFkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTENCi1kcWR2aTE3MSBkaXZpZGVpbnQgIDEgICAgLTEwICAgICAgICAtPiAtMA0KLWRxZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wDQotZHFkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTANCi1kcWR2aTE3NCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwICAgICAtPiAtMA0KLWRxZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wDQotZHFkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTANCi1kcWR2aTE3NyBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwICAtPiAtMA0KLWRxZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wDQotZHFkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTENCi1kcWR2aTE4MSBkaXZpZGVpbnQgLTEgICAgIDEwICAgICAgICAtPiAtMA0KLWRxZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wDQotZHFkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTANCi1kcWR2aTE4NCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwICAgICAtPiAtMA0KLWRxZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wDQotZHFkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTANCi1kcWR2aTE4NyBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwICAtPiAtMA0KLWRxZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wDQotZHFkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDENCi1kcWR2aTE5MSBkaXZpZGVpbnQgLTEgICAgLTEwICAgICAgICAtPiAgMA0KLWRxZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwDQotZHFkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDANCi1kcWR2aTE5NCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwICAgICAtPiAgMA0KLWRxZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwDQotZHFkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDANCi1kcWR2aTE5NyBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwICAtPiAgMA0KLWRxZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwDQotDQotLS0gc29tZSBsb25nIG9wZXJhbmQgKGF0IHA9OSkgY2FzZXMNCi1kcWR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRxZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5DQotZHFkdmkwNzIgZGl2aWRlaW50ICA5OTk5OTk5OTkuNSAgIDEgIC0+ICA5OTk5OTk5OTkNCi1kcWR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQ0KLWRxZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5DQotDQotZHFkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDANCi1kcWR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMA0KLWRxZHZpMDkyIGRpdmlkZWludCAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwDQotZHFkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDANCi1kcWR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMA0KLQ0KLWRxZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDENCi1kcWR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwDQotZHFkdmkxMDIgZGl2aWRlaW50ICAxICAzICAgLT4gMA0KLWRxZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDANCi1kcWR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwDQotZHFkdmkxMDUgZGl2aWRlaW50ICAxICA2ICAgLT4gMA0KLWRxZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDANCi1kcWR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwDQotZHFkdmkxMDggZGl2aWRlaW50ICAxICA5ICAgLT4gMA0KLWRxZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDANCi1kcWR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxDQotZHFkdmkxMTEgZGl2aWRlaW50ICAyICAxICAgLT4gMg0KLWRxZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMNCi1kcWR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0DQotZHFkdmkxMTQgZGl2aWRlaW50ICA1ICAxICAgLT4gNQ0KLWRxZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYNCi1kcWR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3DQotZHFkdmkxMTcgZGl2aWRlaW50ICA4ICAxICAgLT4gOA0KLWRxZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkNCi1kcWR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMA0KLQ0KLS0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCi1kcWR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQ0KLWRxZHZpMTMyIGRpdmlkZWludCAgMTAxLjAgICAxICAgICAtPiAgMTAxDQotZHFkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMw0KLWRxZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMNCi1kcWR2aTEzNSBkaXZpZGVpbnQgIDIuNCAgICAgMSAgICAgLT4gIDINCi1kcWR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDINCi1kcWR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDENCi1kcWR2aTEzOCBkaXZpZGVpbnQgIDExMjAgICAgMTAwMCAgLT4gIDENCi1kcWR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDENCi1kcWR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDENCi1kcWR2aTE0MSBkaXZpZGVpbnQgIDAuNSAgICAgMi4wMDAgLT4gIDANCi1kcWR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDENCi1kcWR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDINCi1kcWR2aTE0NCBkaXZpZGVpbnQgIDAgICAgICAgMiAgICAgLT4gIDANCi1kcWR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDANCi0NCi0tLSBPdGhlcnMNCi1kcWR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkNCi1kcWR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMNCi1kcWR2aTE1MiBkaXZpZGVpbnQgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkNCi1kcWR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkNCi1kcWR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjANCi1kcWR2aTE1NSBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQNCi1kcWR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgNCi1kcWR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzDQotDQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMA0KLWRxZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmkyMDIgZGl2aWRlaW50ICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcWR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMDUgZGl2aWRlaW50ICAwLjAxICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMDggZGl2aWRlaW50ICAxICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTEgZGl2aWRlaW50IDFFKzM4MCAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjE2IGRpdmlkZWludCAgLTAuMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpMjE5IGRpdmlkZWludCAtMTAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdw0KLWRxZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDANCi1kcWR2aTI3MSBkaXZpZGVpbnQgMSAwLjllMzg0ICAgICAgICAtPiAwDQotZHFkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMA0KLWRxZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMA0KLWRxZHZpMjc0IGRpdmlkZWludCA5ZTM4NCAgICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMjc3IGRpdmlkZWludCA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLWRxZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFkdmkyODEgZGl2aWRlaW50IDAuMSA5OWUtMzgzICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFkdmkyODQgZGl2aWRlaW50IDAuMSA5OWUtMzgyICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMNCi1kcWR2aTMwMSAgZGl2aWRlaW50ICAwLjkgICAgICAyICAgICAgLT4gIDANCi1kcWR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDANCi1kcWR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDANCi1kcWR2aTMwNCAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAwICAgLT4gIDANCi1kcWR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDANCi1kcWR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDANCi1kcWR2aTMwNyAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCi1kcWR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCi1kcWR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCi1kcWR2aTMxMCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCi1kcWR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDANCi1kcWR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDANCi1kcWR2aTMxMyAgZGl2aWRlaW50ICAwLjEyICAgICAyLjEgICAgLT4gIDANCi1kcWR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDANCi1kcWR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDANCi0NCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCi1kcWR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1DQotZHFkdmkzMzEgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDEgICAgLT4gIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYNCi1kcWR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCi1kcWR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTEwNTIgZGl2aWRlaW50ICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcWR2aTEwNTUgZGl2aWRlaW50ICAxZS0yNzcgIDFlKzMxMSAtPiAgMA0KLWRxZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wDQotZHFkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTANCi1kcWR2aTEwNTggZGl2aWRlaW50IC0xZS0yNzcgLTFlKzMxMSAtPiAgMA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRxZHZpMTA2MCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMSAtPiAwDQotZHFkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDANCi1kcWR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMA0KLWRxZHZpMTA2MyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNCAtPiAwDQotZHFkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDANCi1kcWR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMA0KLWRxZHZpMTA2NiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNyAtPiAwDQotZHFkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDANCi1kcWR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMA0KLWRxZHZpMTA2OSBkaXZpZGVpbnQgMWUtMjkxIDFlKzExMCAtPiAwDQotDQotZHFkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDANCi1kcWR2aTExMDIgZGl2aWRlaW50ICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMA0KLWRxZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwDQotDQotZHFkdmkxMTE4IGRpdmlkZWludCAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDANCi1kcWR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTANCi1kcWR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMA0KLQ0KLWRxZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMA0KLWRxZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMA0KLQ0KLWRxZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMA0KLWRxZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMA0KLWRxZHZpMTEzMyBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMA0KLWRxZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMA0KLWRxZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMA0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kcWR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MA0KLWRxZHZpNDAyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwICAgLT4gMA0KLWRxZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwDQotZHFkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwDQotZHFkdmk0MDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEwICAtPiAxMjM0NTY3ODkNCi1kcWR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDANCi1kcWR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDA4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgICAgLT4gMA0KLWRxZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwDQotZHFkdmk0MTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEwICAtPiAxMjM0NTY3ODkNCi1kcWR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDANCi1kcWR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDE0IGRpdmlkZWludCAxMjM0NTY3ODk0OSAxMDAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkNCi1kcWR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQ0KLWRxZHZpNDE3IGRpdmlkZWludCAxMjM0NTY3ODk5OSAxMDAgLT4gMTIzNDU2Nzg5DQotZHFkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDANCi1kcWR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwDQotZHFkdmk0NDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMA0KLWRxZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDANCi1kcWR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwDQotZHFkdmk0NDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgLT4gMA0KLWRxZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTENCi1kcWR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwDQotZHFkdmk0NDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDENCi1kcWR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwDQotZHFkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5Ng0KLWRxZHZpNDUyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgIC0+IDANCi0NCi0tLSBtb3JlIHplcm9zLCBldGMuDQotZHFkdmk1MzEgZGl2aWRlaW50IDUuMDAgMUUtMyAgICAtPiA1MDAwDQotZHFkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmk1MzQgZGl2aWRlaW50ICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotDQotZHFkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMA0KLWRxZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDANCi1kcWR2aTU0MyBkaXZpZGVpbnQgIDAgICAgIDEgICAgIC0+ICAwDQotZHFkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMA0KLWRxZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU0NiBkaXZpZGVpbnQgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi1kcWR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wDQotZHFkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMA0KLWRxZHZpNTUzIGRpdmlkZWludCAgMC4wICAgMSAgICAgLT4gIDANCi1kcWR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wDQotZHFkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTU2IGRpdmlkZWludCAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLQ0KLWRxZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTANCi1kcWR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwDQotZHFkdmk1NjMgZGl2aWRlaW50ICAwICAgICAxLjAgICAtPiAgMA0KLWRxZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTANCi1kcWR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NjYgZGl2aWRlaW50IC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotDQotZHFkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMA0KLWRxZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDANCi1kcWR2aTU3MyBkaXZpZGVpbnQgIDAuMCAgIDEuMCAgIC0+ICAwDQotZHFkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMA0KLWRxZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi1kcWR2aTU3NiBkaXZpZGVpbnQgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotZHFkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCi0NCi0tLSBTcGVjaWFscw0KLWRxZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNTgxIGRpdmlkZWludCAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcWR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxZHZpNTg0IGRpdmlkZWludCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcWR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxZHZpNTg3IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCi1kcWR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTU5MCBkaXZpZGVpbnQgLTEgICAgIEluZiAgIC0+IC0wDQotZHFkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMA0KLWRxZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDANCi1kcWR2aTU5MyBkaXZpZGVpbnQgIDEgICAgIEluZiAgIC0+ICAwDQotZHFkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMA0KLWRxZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFkdmk2MDIgZGl2aWRlaW50IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcWR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFkdmk2MDUgZGl2aWRlaW50IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcWR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjA4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCi1kcWR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwDQotZHFkdmk2MTEgZGl2aWRlaW50IC0wICAgIC1JbmYgICAtPiAgMA0KLWRxZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTANCi1kcWR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wDQotZHFkdmk2MTQgZGl2aWRlaW50ICAxMDAwIC1JbmYgICAtPiAtMA0KLWRxZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZHZpNjIxIGRpdmlkZWludCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxZHZpNjI0IGRpdmlkZWludCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRxZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxZHZpNjI3IGRpdmlkZWludCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjMwIGRpdmlkZWludCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjMzIGRpdmlkZWludCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjM2IGRpdmlkZWludCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxZHZpNjQxIGRpdmlkZWludCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjQ0IGRpdmlkZWludCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjQ3IGRpdmlkZWludCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjUwIGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjUzIGRpdmlkZWludCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjU2IGRpdmlkZWludCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjU5IGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFkdmk2NjEgZGl2aWRlaW50ICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRxZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgNCi1kcWR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43DQotZHFkdmk2NjQgZGl2aWRlaW50IC1OYU42ICBOYU41ICAtPiAtTmFONg0KLWRxZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQNCi1kcWR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zDQotZHFkdmk2NjcgZGl2aWRlaW50ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRxZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NzIgZGl2aWRlaW50ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NzUgZGl2aWRlaW50ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFkdmk2NzggZGl2aWRlaW50ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEd5dXJpcyBleGFtcGxlDQotZHFkdmk3MDAgZGl2aWRlaW50IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDANCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFkdmk5MDAgZGl2aWRlaW50ICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFEaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNRdWFkIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCisKK2RxZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQorZHFkdmkwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyCitkcWR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDAKK2RxZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQorZHFkdmkwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwCitkcWR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDAKK2RxZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMAorZHFkdmkwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwCitkcWR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDEKKworZHFkdmkwMTAgZGl2aWRlaW50ICAyLjQgICAxICAgIC0+ICAyCitkcWR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yCitkcWR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yCitkcWR2aTAxMyBkaXZpZGVpbnQgIC0yLjQgIC0xICAgLT4gIDIKK2RxZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMgorZHFkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyCitkcWR2aTAxNiBkaXZpZGVpbnQgIDIuNCAgIDIgICAgLT4gIDEKK2RxZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQorZHFkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxCitkcWR2aTAxOSBkaXZpZGVpbnQgIDIwICAgIDIwICAgLT4gIDEKKworZHFkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxCitkcWR2aTAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDIKK2RxZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyCitkcWR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMgorZHFkdmkwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1CitkcWR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKKworZHFkdmkwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDAKK2RxZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwCitkcWR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMAorZHFkdmkwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDAKK2RxZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwCitkcWR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMAorZHFkdmkwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTAKK2RxZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wCitkcWR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMAorZHFkdmkwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTAKK2RxZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wCitkcWR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMAorZHFkdmkwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTAKK2RxZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wCitkcWR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMAorZHFkdmkwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTAKK2RxZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wCitkcWR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMAorZHFkdmkwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDAKK2RxZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwCitkcWR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMAorZHFkdmkwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDAKK2RxZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwCitkcWR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMAorCistLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbgorZHFkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDEKK2RxZHZpMTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwCitkcWR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMAorZHFkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDAKK2RxZHZpMTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwCitkcWR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMAorZHFkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDAKK2RxZHZpMTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwCitkcWR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMAorZHFkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTEKK2RxZHZpMTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wCitkcWR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMAorZHFkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTAKK2RxZHZpMTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wCitkcWR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMAorZHFkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTAKK2RxZHZpMTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wCitkcWR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMAorZHFkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTEKK2RxZHZpMTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wCitkcWR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMAorZHFkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTAKK2RxZHZpMTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wCitkcWR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMAorZHFkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTAKK2RxZHZpMTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wCitkcWR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMAorZHFkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDEKK2RxZHZpMTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwCitkcWR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMAorZHFkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDAKK2RxZHZpMTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwCitkcWR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMAorZHFkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDAKK2RxZHZpMTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwCitkcWR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMAorCistLSBzb21lIGxvbmcgb3BlcmFuZCAoYXQgcD05KSBjYXNlcworZHFkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5CitkcWR2aTA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5CisKK2RxZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMAorZHFkdmkwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMAorCitkcWR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkcWR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwCitkcWR2aTEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwCitkcWR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwCitkcWR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwCitkcWR2aTEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwCitkcWR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwCitkcWR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwCitkcWR2aTEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwCitkcWR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwCitkcWR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkcWR2aTExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyCitkcWR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzCitkcWR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0CitkcWR2aTExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1CitkcWR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2CitkcWR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3CitkcWR2aTExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4CitkcWR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5CitkcWR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMAorCistLSBmcm9tIERpYWdCaWdEZWNpbWFsCitkcWR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQorZHFkdmkxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDEKK2RxZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMKK2RxZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMKK2RxZHZpMTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMgorZHFkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyCitkcWR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDEKK2RxZHZpMTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQorZHFkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxCitkcWR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDEKK2RxZHZpMTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMAorZHFkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxCitkcWR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDIKK2RxZHZpMTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMAorZHFkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwCisKKy0tIE90aGVycworZHFkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5CitkcWR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMKK2RxZHZpMTUyIGRpdmlkZWludCAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOQorZHFkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkcWR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAKK2RxZHZpMTU1IGRpdmlkZWludCAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NAorZHFkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4CitkcWR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDAKK2RxZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTIwMiBkaXZpZGVpbnQgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwNSBkaXZpZGVpbnQgIDAuMDEgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwOCBkaXZpZGVpbnQgIDEgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxMSBkaXZpZGVpbnQgMUUrMzgwICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTYgZGl2aWRlaW50ICAtMC4xICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTkgZGl2aWRlaW50IC0xMCAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK2RxZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDAKK2RxZHZpMjcxIGRpdmlkZWludCAxIDAuOWUzODQgICAgICAgIC0+IDAKK2RxZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDAKK2RxZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMAorZHFkdmkyNzQgZGl2aWRlaW50IDllMzg0ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK2RxZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4MSBkaXZpZGVpbnQgMC4xIDk5ZS0zODMgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4NCBkaXZpZGVpbnQgMC4xIDk5ZS0zODIgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMKK2RxZHZpMzAxICBkaXZpZGVpbnQgIDAuOSAgICAgIDIgICAgICAtPiAgMAorZHFkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwCitkcWR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDAKK2RxZHZpMzA0ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDAgICAtPiAgMAorZHFkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwCitkcWR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDAKK2RxZHZpMzA3ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZHFkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkcWR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2RxZHZpMzEwICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAorZHFkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwCitkcWR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDAKK2RxZHZpMzEzICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMSAgICAtPiAgMAorZHFkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwCitkcWR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDAKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkcWR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1CitkcWR2aTMzMSAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMSAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NgorZHFkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkcWR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1MiBkaXZpZGVpbnQgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1NSBkaXZpZGVpbnQgIDFlLTI3NyAgMWUrMzExIC0+ICAwCitkcWR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMAorZHFkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTAKK2RxZHZpMTA1OCBkaXZpZGVpbnQgLTFlLTI3NyAtMWUrMzExIC0+ICAwCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFkdmkxMDYwIGRpdmlkZWludCAxZS0yOTEgMWUrMTAxIC0+IDAKK2RxZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwCitkcWR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMAorZHFkdmkxMDYzIGRpdmlkZWludCAxZS0yOTEgMWUrMTA0IC0+IDAKK2RxZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwCitkcWR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMAorZHFkdmkxMDY2IGRpdmlkZWludCAxZS0yOTEgMWUrMTA3IC0+IDAKK2RxZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwCitkcWR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMAorZHFkdmkxMDY5IGRpdmlkZWludCAxZS0yOTEgMWUrMTEwIC0+IDAKKworZHFkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDAKK2RxZHZpMTEwMiBkaXZpZGVpbnQgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAwCitkcWR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMAorCitkcWR2aTExMTggZGl2aWRlaW50ICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMAorZHFkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wCitkcWR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMAorCitkcWR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTAKK2RxZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMAorCitkcWR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDAKK2RxZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMAorZHFkdmkxMTMzIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAwCitkcWR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDAKK2RxZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMAorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MAorZHFkdmk0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwCitkcWR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MAorZHFkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwCitkcWR2aTQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwCitkcWR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwCitkcWR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwCitkcWR2aTQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwCitkcWR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkcWR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwCitkcWR2aTQ0MyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkcWR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwCitkcWR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkcWR2aTQ0NiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAtPiAwCitkcWR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkcWR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwCitkcWR2aTQ0OSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZHFkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMAorZHFkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZHFkdmk0NTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgLT4gMAorCistLSBtb3JlIHplcm9zLCBldGMuCitkcWR2aTUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDAKK2RxZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCisKK2RxZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTAKK2RxZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDAKK2RxZHZpNTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDAKK2RxZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTAKK2RxZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMAorZHFkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMAorZHFkdmk1NTMgZGl2aWRlaW50ICAwLjAgICAxICAgICAtPiAgMAorZHFkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMAorZHFkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTYgZGl2aWRlaW50IC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wCitkcWR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwCitkcWR2aTU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwCitkcWR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wCitkcWR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTAKK2RxZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDAKK2RxZHZpNTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDAKK2RxZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTAKK2RxZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RxZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFkdmk1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFkdmk1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkcWR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTAKK2RxZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTAKK2RxZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDAKK2RxZHZpNTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDAKK2RxZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDAKK2RxZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWR2aTYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWR2aTYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZHFkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwCitkcWR2aTYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwCitkcWR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wCitkcWR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wCitkcWR2aTYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wCitkcWR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkdmk2MjEgZGl2aWRlaW50ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFkdmk2MjQgZGl2aWRlaW50ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFkdmk2MjcgZGl2aWRlaW50ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzAgZGl2aWRlaW50IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzMgZGl2aWRlaW50IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzYgZGl2aWRlaW50ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFkdmk2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWR2aTY2MSBkaXZpZGVpbnQgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcWR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkcWR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkcWR2aTY2NCBkaXZpZGVpbnQgLU5hTjYgIE5hTjUgIC0+IC1OYU42CitkcWR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcWR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkcWR2aTY2NyBkaXZpZGVpbnQgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RxZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gR3l1cmlzIGV4YW1wbGUKK2RxZHZpNzAwIGRpdmlkZWludCA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwCisKKy0tIE51bGwgdGVzdHMKK2RxZHZpOTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRW5jb2RlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdAppbmRleCA4YzVkN2I5Li40OWVkZjViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdApAQCAtMSw0NzcgKzEsNDc3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcUVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgc2l4dGVlbi1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDEyOC5kZWNUZXN0XQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIHNpeHRlZW4tYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4NCi0tLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToNCi0tLQ0KLS0tICAgMSBiaXQgIHNpZ24NCi0tLSAgIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZA0KLS0tICAxMiBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbg0KLS0tIDExMCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbg0KLS0tDQotLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDE0IGJpdHMNCi0tLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMTE0IGJpdHMgKDM0IGRpZ2l0cykNCi0tLQ0KLS0tIEVsaW1pdCA9IDEyMjg3IChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpDQotLS0gRW1heCAgID0gIDYxNDQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpDQotLS0gRW1pbiAgID0gLTYxNDMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQ0KLS0tIGJpYXMgICA9ICA2MTc2IChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkNCi0NCi0tLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQ0KLS0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnDQotLS0gdGVzdGNhc2UgZ3JvdXBzLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotDQotLS0gR2VuZXJhbCB0ZXN0Y2FzZXMNCi0tLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpDQotZGVjcTAwMSBhcHBseSAgICNBMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNy41MA0KLWRlY3EwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi0tLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzDQotZGVjcTAwMyBhcHBseSAgICNBMjA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNy41MEUrMw0KLWRlY3EwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDA1IGFwcGx5ICAgI0EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03NTANCi1kZWNxMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQotZGVjcTAwNyBhcHBseSAgICNBMjA3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNzUuMA0KLWRlY3EwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDA5IGFwcGx5ICAgI0EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjc1MA0KLWRlY3EwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDExIGFwcGx5ICAgI0EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjA3NTANCi1kZWNxMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQotZGVjcTAxMyBhcHBseSAgICNBMjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTANCi1kZWNxMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQotZGVjcTAxNSBhcHBseSAgICNBMjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDAwMDc1MA0KLWRlY3EwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCi1kZWNxMDE3IGFwcGx5ICAgI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRS03DQotZGVjcTAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMjA1YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KLQ0KLS0tIE5vcm1hbGl0eQ0KLWRlY3EwMjAgYXBwbHkgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLT4gIzI2MDgxMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0DQotZGVjcTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjYTYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQNCi1kZWNxMDIyIGFwcGx5ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgIC0+ICMyNjA4MDkxMjQ0OTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MQ0KLQ0KLS0tIE5tYXggYW5kIHNpbWlsYXINCi1kZWNxMDMxIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KLWRlY3EwMzIgYXBwbHkgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kZWNxMDMzIGFwcGx5ICAgMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gIzQ3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0DQotZGVjcTAzNCBhcHBseSAgICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NA0KLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpDQotZGVjcTAzNSBhcHBseSAgIDEuMjNFKzYxNDQgICAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxMDM2IGFwcGx5ICAgIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQotZGVjcTAzNyBhcHBseSAgIDFFKzYxNDQgICAgICAgLT4gIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxMDM4IGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQotDQotZGVjcTA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQ0KLWRlY3EwNTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzNDUNCi1kZWNxMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0DQotZGVjcTA1NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNCAgICAgICAtPiAxMjM0DQotZGVjcTA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMw0KLWRlY3EwNTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzDQotZGVjcTA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLWRlY3EwNTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gMTINCi1kZWNxMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTA2MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxDQotZGVjcTA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMw0KLWRlY3EwNjIgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMw0KLWRlY3EwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUNCi1kZWNxMDY0IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMy40NQ0KLQ0KLS0tIE5taW4gYW5kIGJlbG93DQotZGVjcTA3MSBhcHBseSAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMDAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxMDcyIGFwcGx5ICAgIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNDMNCi1kZWNxMDczIGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3EwNzQgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kZWNxMDc1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRlY3EwNzYgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi0NCi1kZWNxMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbA0KLWRlY3EwNzggYXBwbHkgICAjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgU3Vibm9ybWFsDQotZGVjcTA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwNCi1kZWNxMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgICAgIC0+IDEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjcTA4MSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgICAtPiAjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNxMDgyIGFwcGx5ICAgIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNzUgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjcTA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNxMDg0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNzYgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLQ0KLS0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBmb3Igc2ltcGxlIGNvcGllcywgY2hlY2sgZWRnZSBjYXNlcw0KLWRlY3EwOTAgYXBwbHkgICAxZS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwNCi1kZWNxMTAwIGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICMwMDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsDQotDQotLS0gc2FtZSBhZ2FpbiwgbmVnYXRpdmVzDQotLS0gTm1heCBhbmQgc2ltaWxhcg0KLWRlY3ExMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotZGVjcTEyMyBhcHBseSAgICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kZWNxMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQgLT4gI2M3ZmZkMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0DQotZGVjcTEyNSBhcHBseSAgICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQNCi0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KLWRlY3ExMzAgYXBwbHkgIC0xLjIzRSs2MTQ0ICAgIC0+ICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotZGVjcTEzMSBhcHBseSAgICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi1kZWNxMTMyIGFwcGx5ICAtMUUrNjE0NCAgICAgICAtPiAjYzdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3ExMzMgYXBwbHkgICAjYzdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQotDQotZGVjcTE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQ0KLWRlY3ExNTIgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMzQ1DQotZGVjcTE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNA0KLWRlY3ExNTQgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQgICAgICAgLT4gLTEyMzQNCi1kZWNxMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzDQotZGVjcTE1NiBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzDQotZGVjcTE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLWRlY3ExNTggYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAgICAgLT4gLTEyDQotZGVjcTE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRlY3ExNjAgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTENCi1kZWNxMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzDQotZGVjcTE2MiBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMw0KLWRlY3ExNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUNCi1kZWNxMTY0IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjMuNDUNCi0NCi0tLSBObWluIGFuZCBiZWxvdw0KLWRlY3ExNzEgYXBwbHkgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzgwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTE3MiBhcHBseSAgICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE0Mw0KLWRlY3ExNzMgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTE3NCBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kZWNxMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRlY3ExNzYgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotDQotZGVjcTE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwNCi1kZWNxMTc4IGFwcGx5ICAgIzgwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBTdWJub3JtYWwNCi1kZWNxMTc5IGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTBFLTYxNDMgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbA0KLWRlY3ExODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gLTEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsDQotZGVjcTE4MSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgICAtPiAjODAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwNCi1kZWNxMTgyIGFwcGx5ICAgIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KLWRlY3ExODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQotZGVjcTE4NCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQotDQotLS0gdW5kZXJmbG93IGVkZ2UgY2FzZXMNCi1kZWNxMTkwIGFwcGx5ICAgLTFlLTYxNzYgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbA0KLWRlY3EyMDAgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZS02MTc2IC0+ICM4MDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgU3Vibm9ybWFsDQotDQotLS0gemVyb3MNCi1kZWNxNDAwIGFwcGx5ICAgMEUtODAwMCAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQwMSBhcHBseSAgIDBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MDIgYXBwbHkgICAwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDAzIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYNCi1kZWNxNDA0IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MDUgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtNjE3Ng0KLWRlY3E0MDYgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDA3IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDANCi1kZWNxNDA4IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQwOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZGVjcTQxMCBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MTEgYXBwbHkgICAjMjIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMw0KLWRlY3E0MTIgYXBwbHkgICAwRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDEzIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTENCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjcTQxNCBhcHBseSAgIDBFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MTUgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQ0KLWRlY3E0MTYgYXBwbHkgICAwRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDE3IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTENCi1kZWNxNDE4IGFwcGx5ICAgMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQxOSBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExDQotDQotLS0gbmVnYXRpdmUgemVyb3MNCi1kZWNxNDIwIGFwcGx5ICAtMEUtODAwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQyMSBhcHBseSAgLTBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MjIgYXBwbHkgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDIzIGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS02MTc2DQotZGVjcTQyNCBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDI1IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS02MTc2DQotZGVjcTQyNiBhcHBseSAgLTBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MjcgYXBwbHkgICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAuMDANCi1kZWNxNDI4IGFwcGx5ICAtMCAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTQyOSBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMA0KLWRlY3E0MzAgYXBwbHkgIC0wRSszICAgICAgICAgICAgICAgICAgICAtPiAjYTIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNDMxIGFwcGx5ICAgI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszDQotZGVjcTQzMiBhcHBseSAgLTBFKzYxMTEgICAgICAgICAgICAgICAgIC0+ICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E0MzMgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTENCi0tLSBjbGFtcGVkIHplcm9zLi4uDQotZGVjcTQzNCBhcHBseSAgLTBFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3E0MzUgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTENCi1kZWNxNDM2IGFwcGx5ICAtMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQotZGVjcTQzNyBhcHBseSAgICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrNjExMQ0KLWRlY3E0MzggYXBwbHkgIC0wRSs4MDAwICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCi1kZWNxNDM5IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExDQotDQotLS0gZXhwb25lbnQgbGVuZ3Rocw0KLWRlY3E0NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gNw0KLWRlY3E0NDEgYXBwbHkgICA3IC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRlY3E0NDIgYXBwbHkgICAjMjIwYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrOQ0KLWRlY3E0NDMgYXBwbHkgICA3RSs5IC0+ICMyMjBhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRlY3E0NDQgYXBwbHkgICAjMjIyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrOTkNCi1kZWNxNDQ1IGFwcGx5ICAgN0UrOTkgLT4gIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZGVjcTQ0NiBhcHBseSAgICMyMzAxYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OTkNCi1kZWNxNDQ3IGFwcGx5ICAgN0UrOTk5IC0+ICMyMzAxYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRlY3E0NDggYXBwbHkgICAjNDNlM2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrNTk5OQ0KLWRlY3E0NDkgYXBwbHkgICA3RSs1OTk5IC0+ICM0M2UzYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLQ0KLS0tIFNwZWNpYWxzDQotZGVjcTUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTAxIGFwcGx5ICAgIzc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNxNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MDQgYXBwbHkgICAjNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNxNTA1IGFwcGx5ICAgIzdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNxNTA3IGFwcGx5ICAgIzdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkNCi0NCi1kZWNxNTA5IGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MgLT4gIzdjMDAzYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjDQotZGVjcTUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBOYU4NCi1kZWNxNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICM3YzAwM2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZA0KLWRlY3E1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gTmFODQotZGVjcTUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDNlN2U3YzdlN2U3ZTdlN2M3ZTdlN2U3ZTdjN2UNCi1kZWNxNTE1IGFwcGx5ICAgIzdlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IHNOYU4NCi1kZWNxNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICM3ZTAwM2Y3ZjdjN2Y3ZjdmN2Y3YzdmN2Y3ZjdmN2M3Zg0KLWRlY3E1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTg0KLWRlY3E1MTggYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRlY3E1MTkgYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotDQotZGVjcTUyMCBhcHBseSAgIC1JbmZpbml0eSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjcTUyMyBhcHBseSAgICNmOTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OSAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTI0IGFwcGx5ICAgI2Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY3E1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZGVjcTUyNiBhcHBseSAgICNmYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNxNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQotDQotZGVjcTUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3Yw0KLWRlY3E1MzEgYXBwbHkgICAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLU5hTg0KLWRlY3E1MzIgYXBwbHkgICAjZmQ3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkDQotZGVjcTUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFODQotZGVjcTUzNCBhcHBseSAgICNmZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjZmUwMDNlN2U3YzdlN2U3ZTdlN2M3ZTdlN2U3ZTdjN2UNCi1kZWNxNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1zTmFODQotZGVjcTUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YNCi1kZWNxNTM3IGFwcGx5ICAgI2ZmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1zTmFODQotZGVjcTUzOCBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRlY3E1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQotDQotZGVjcTU0MCBhcHBseSAgIE5hTiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRlY3E1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kZWNxNTQyIGFwcGx5ICAgTmFOMSAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTU0MyBhcHBseSAgIE5hTjEyICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLWRlY3E1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkNCi1kZWNxNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1DQotZGVjcTU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOGU1Ng0KLWRlY3E1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjdmZGYNCi1kZWNxNTQ4IGFwcGx5ICAgTmFONzk5Nzk5Nzk5Nzk5Nzk5Nzk5Nzk5Nzk5Nzk5Nzk5Nzk5ICAtPiAjN2MwMDNkZmY3ZmRmZjdmZGZmN2ZkZmY3ZmRmZjdmZGYNCi1kZWNxNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi1kZWNxNTUwIGFwcGx5ICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCi0NCi0tLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQ0KLWRlY3E2MDEgYXBwbHkgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MDIgYXBwbHkgICAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQNCi1kZWNxNjAzIGFwcGx5ICAgMUUrNjE0MyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjA0IGFwcGx5ICAgIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMNCi1kZWNxNjA1IGFwcGx5ICAgMUUrNjE0MiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjA2IGFwcGx5ICAgIzQzZmZjMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0Mg0KLWRlY3E2MDcgYXBwbHkgICAxRSs2MTQxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MDggYXBwbHkgICAjNDNmZmMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDENCi1kZWNxNjA5IGFwcGx5ICAgMUUrNjE0MCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjEwIGFwcGx5ICAgIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDANCi1kZWNxNjExIGFwcGx5ICAgMUUrNjEzOSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjEyIGFwcGx5ICAgIzQzZmZjMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOQ0KLWRlY3E2MTMgYXBwbHkgICAxRSs2MTM4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MTQgYXBwbHkgICAjNDNmZmMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzgNCi1kZWNxNjE1IGFwcGx5ICAgMUUrNjEzNyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjE2IGFwcGx5ICAgIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcNCi1kZWNxNjE3IGFwcGx5ICAgMUUrNjEzNiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjE4IGFwcGx5ICAgIzQzZmZjMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNg0KLWRlY3E2MTkgYXBwbHkgICAxRSs2MTM1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MjAgYXBwbHkgICAjNDNmZmMwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzUNCi1kZWNxNjIxIGFwcGx5ICAgMUUrNjEzNCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjIyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzQNCi1kZWNxNjIzIGFwcGx5ICAgMUUrNjEzMyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjI0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMw0KLWRlY3E2MjUgYXBwbHkgICAxRSs2MTMyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MjYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzINCi1kZWNxNjI3IGFwcGx5ICAgMUUrNjEzMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjI4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzENCi1kZWNxNjI5IGFwcGx5ICAgMUUrNjEzMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjMwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMA0KLWRlY3E2MzEgYXBwbHkgICAxRSs2MTI5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MzIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDBFKzYxMjkNCi1kZWNxNjMzIGFwcGx5ICAgMUUrNjEyOCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjM0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFKzYxMjgNCi1kZWNxNjM1IGFwcGx5ICAgMUUrNjEyNyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjM2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUrNjEyNw0KLWRlY3E2MzcgYXBwbHkgICAxRSs2MTI2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2MzggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzYxMjYNCi1kZWNxNjM5IGFwcGx5ICAgMUUrNjEyNSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjQwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzYxMjUNCi1kZWNxNjQxIGFwcGx5ICAgMUUrNjEyNCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjQyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrNjEyNA0KLWRlY3E2NDMgYXBwbHkgICAxRSs2MTIzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NDQgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzYxMjMNCi1kZWNxNjQ1IGFwcGx5ICAgMUUrNjEyMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjQ2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzYxMjINCi1kZWNxNjQ3IGFwcGx5ICAgMUUrNjEyMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwIENsYW1wZWQNCi1kZWNxNjQ4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrNjEyMQ0KLWRlY3E2NDkgYXBwbHkgICAxRSs2MTIwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NTAgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzYxMjANCi1kZWNxNjUxIGFwcGx5ICAgMUUrNjExOSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwIENsYW1wZWQNCi1kZWNxNjUyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzYxMTkNCi1kZWNxNjUzIGFwcGx5ICAgMUUrNjExOCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwIENsYW1wZWQNCi1kZWNxNjU0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrNjExOA0KLWRlY3E2NTUgYXBwbHkgICAxRSs2MTE3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAgQ2xhbXBlZA0KLWRlY3E2NTYgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAgICAgICAgLT4gMS4wMDAwMDBFKzYxMTcNCi1kZWNxNjU3IGFwcGx5ICAgMUUrNjExNiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIENsYW1wZWQNCi1kZWNxNjU4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzYxMTYNCi1kZWNxNjU5IGFwcGx5ICAgMUUrNjExNSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwIENsYW1wZWQNCi1kZWNxNjYwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrNjExNQ0KLWRlY3E2NjEgYXBwbHkgICAxRSs2MTE0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgQ2xhbXBlZA0KLWRlY3E2NjIgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgICAgICAgLT4gMS4wMDBFKzYxMTQNCi1kZWNxNjYzIGFwcGx5ICAgMUUrNjExMyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwIENsYW1wZWQNCi1kZWNxNjY0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzYxMTMNCi1kZWNxNjY1IGFwcGx5ICAgMUUrNjExMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwIENsYW1wZWQNCi1kZWNxNjY2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrNjExMg0KLWRlY3E2NjcgYXBwbHkgICAxRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kZWNxNjY4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzYxMTENCi1kZWNxNjY5IGFwcGx5ICAgMUUrNjExMCAgICAgICAgICAgICAgICAgLT4gIzQzZmY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZGVjcTY3MCBhcHBseSAgICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTEwDQotDQotLS0gU2VsZWN0ZWQgRFBEIGNvZGVzDQotZGVjcTcwMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwDQotZGVjcTcwMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgICAgICAtPiA5DQotZGVjcTcwMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxMA0KLWRlY3E3MDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkNCi1kZWNxNzA0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwICAgICAgIC0+IDIwDQotZGVjcTcwNSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQ0KLWRlY3E3MDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAgICAgICAgLT4gMzANCi1kZWNxNzA3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5ICAgICAgIC0+IDM5DQotZGVjcTcwOCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgICAgICAtPiA0MA0KLWRlY3E3MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkNCi1kZWNxNzEwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwICAgICAgIC0+IDUwDQotZGVjcTcxMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQ0KLWRlY3E3MTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAgICAgICAgLT4gNjANCi1kZWNxNzEzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5ICAgICAgIC0+IDY5DQotZGVjcTcxNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MCAgICAgICAtPiA3MA0KLWRlY3E3MTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEgICAgICAgLT4gNzENCi1kZWNxNzE2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyICAgICAgIC0+IDcyDQotZGVjcTcxNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MyAgICAgICAtPiA3Mw0KLWRlY3E3MTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQNCi1kZWNxNzE5IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1ICAgICAgIC0+IDc1DQotZGVjcTcyMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NiAgICAgICAtPiA3Ng0KLWRlY3E3MjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcNCi1kZWNxNzIyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4ICAgICAgIC0+IDc4DQotZGVjcTcyMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQ0KLQ0KLWRlY3E3MzAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOWUgICAgICAgLT4gOTk0DQotZGVjcTczMSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZiAgICAgICAtPiA5OTUNCi1kZWNxNzMyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMA0KLWRlY3E3MzMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYTEgICAgICAgLT4gNTIxDQotDQotLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMNCi1kZWNxNzQwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2Y3ICAgICAgIC0+IDc3Nw0KLWRlY3E3NDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4DQotZGVjcTc0MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlYiAgICAgICAtPiA3ODcNCi1kZWNxNzQzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdkICAgICAgIC0+IDg3Nw0KLWRlY3E3NDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3DQotZGVjcTc0NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNiZiAgICAgICAtPiA5NzkNCi1kZWNxNzQ2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2RmICAgICAgIC0+IDc5OQ0KLWRlY3E3NDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQotDQotDQotLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykNCi1kZWNxNzUwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OA0KLWRlY3E3NTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmUgICAgICAgLT4gODg4DQotZGVjcTc1MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgNCi1kZWNxNzUzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OA0KLWRlY3E3NTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNmYgICAgICAgLT4gODg5DQotZGVjcTc1NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkNCi1kZWNxNzU2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQ0KLWRlY3E3NTcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNmYgICAgICAgLT4gODg5DQotDQotZGVjcTc2MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgNCi1kZWNxNzYxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTdlICAgICAgIC0+IDg5OA0KLWRlY3E3NjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4DQotZGVjcTc2MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgNCi1kZWNxNzY0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdmICAgICAgIC0+IDg5OQ0KLWRlY3E3NjUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5DQotZGVjcTc2NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkNCi1kZWNxNzY3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdmICAgICAgIC0+IDg5OQ0KLQ0KLWRlY3E3NzAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4DQotZGVjcTc3MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlZSAgICAgICAtPiA5ODgNCi1kZWNxNzcyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmVlICAgICAgIC0+IDk4OA0KLWRlY3E3NzMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4DQotZGVjcTc3NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlZiAgICAgICAtPiA5ODkNCi1kZWNxNzc1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVmICAgICAgIC0+IDk4OQ0KLWRlY3E3NzYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5DQotZGVjcTc3NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlZiAgICAgICAtPiA5ODkNCi0NCi1kZWNxNzgwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OA0KLWRlY3E3ODEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZmUgICAgICAgLT4gOTk4DQotZGVjcTc4MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgNCi1kZWNxNzgzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OA0KLWRlY3E3ODQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmYgICAgICAgLT4gOTk5DQotZGVjcTc4NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkNCi1kZWNxNzg2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQ0KLWRlY3E3ODcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZmYgICAgICAgLT4gOTk5DQotDQotLS0gTWlzY2VsbGFuZW91cyAodGVzdGVycycgcXVlcmllcywgZXRjLikNCi0NCi1kZWNxNzkwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjMDAwICAgICAgIC0+IDMwMDAwDQotZGVjcTc5MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwMCAgICAgICAtPiA4OTAwMDANCi1kZWNxNzkyIGFwcGx5ICAgMzAwMDAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjMDAwDQotZGVjcTc5MyBhcHBseSAgIDg5MDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDANCi0NCi0tLSB2YWx1ZXMgYXJvdW5kIFt1XWludDMyIGVkZ2VzICh6ZXJvcyBkb25lIGVhcmxpZXIpDQotZGVjcTgwMCBhcHBseSAtMjE0NzQ4MzY0NiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2DQotZGVjcTgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3DQotZGVjcTgwMiBhcHBseSAtMjE0NzQ4MzY0OCAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4DQotZGVjcTgwMyBhcHBseSAtMjE0NzQ4MzY0OSAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5DQotZGVjcTgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2DQotZGVjcTgwNSBhcHBseSAgMjE0NzQ4MzY0NyAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3DQotZGVjcTgwNiBhcHBseSAgMjE0NzQ4MzY0OCAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4DQotZGVjcTgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5DQotZGVjcTgwOCBhcHBseSAgNDI5NDk2NzI5NCAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTVhDQotZGVjcTgwOSBhcHBseSAgNDI5NDk2NzI5NSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViDQotZGVjcTgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdhDQotZGVjcTgxMSBhcHBseSAgNDI5NDk2NzI5NyAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdiDQotDQotZGVjcTgyMCBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2DQotZGVjcTgyMSBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3IC0+IC0yMTQ3NDgzNjQ3DQotZGVjcTgyMiBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+IC0yMTQ3NDgzNjQ4DQotZGVjcTgyMyBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5DQotZGVjcTgyNCBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2IC0+ICAyMTQ3NDgzNjQ2DQotZGVjcTgyNSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3IC0+ICAyMTQ3NDgzNjQ3DQotZGVjcTgyNiBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4DQotZGVjcTgyNyBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5IC0+ICAyMTQ3NDgzNjQ5DQotZGVjcTgyOCBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTVhIC0+ICA0Mjk0OTY3Mjk0DQotZGVjcTgyOSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1DQotZGVjcTgzMCBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdhIC0+ICA0Mjk0OTY3Mjk2DQotZGVjcTgzMSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdiIC0+ICA0Mjk0OTY3Mjk3DQotDQotLS0gVkcgdGVzdGNhc2UNCi1kZWNxODQwIGFwcGx5ICAgICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiA4LjgxMTI1MDAwMDAwMDAxMzQ5NDM2RS0xNTQ4DQotZGVjcTg0MSBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAgLT4gOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTANCi1kZWNxODQyIGFwcGx5ICAgICMxRUY5ODQ5MDAwMDAwMDAxMEY2RTRFMDAwMDAwMDAwMCAtPiA3LjA0OTAwMDAwMDAwMDAxMDc5NTQ4ODAwMDAwMDAwMDAwMEUtMzA5Nw0KLWRlY3E4NDMgbXVsdGlwbHkgIzIwODAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwICMyMDgwMDAwMDAwMDAwMDAwRjI5NDAwMDAwMDE3MjYzNiAtPiAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgUm91bmRlZA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIHNpeHRlZW4tYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwxMjguZGVjVGVzdF0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBzaXh0ZWVuLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uCistLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToKKy0tCistLSAgIDEgYml0ICBzaWduCistLSAgIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAorLS0gIDEyIGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uCistLSAxMTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KKy0tCistLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTQgYml0cworLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDExNCBiaXRzICgzNCBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gMTIyODcgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKKy0tIEVtYXggICA9ICA2MTQ0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gRW1pbiAgID0gLTYxNDMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDYxNzYgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQorCistLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQorLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKKy0tIHRlc3RjYXNlIGdyb3Vwcy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNxMDAxIGFwcGx5ICAgI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwCitkZWNxMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCistLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCitkZWNxMDAzIGFwcGx5ICAgI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszCitkZWNxMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDA1IGFwcGx5ICAgI0EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03NTAKK2RlY3EwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDcgYXBwbHkgICAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1LjAKK2RlY3EwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDkgYXBwbHkgICAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuNzUwCitkZWNxMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDExIGFwcGx5ICAgI0EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjA3NTAKK2RlY3EwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTMgYXBwbHkgICAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwCitkZWNxMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDE1IGFwcGx5ICAgI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwCitkZWNxMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDE3IGFwcGx5ICAgI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRS03CitkZWNxMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCisKKy0tIE5vcm1hbGl0eQorZGVjcTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjMjYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQKK2RlY3EwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLT4gI2E2MDgxMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMDIyIGFwcGx5ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgIC0+ICMyNjA4MDkxMjQ0OTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MQorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNxMDMxIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZGVjcTAzMiBhcHBseSAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZGVjcTAzMyBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTAzNCBhcHBseSAgICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3EwMzUgYXBwbHkgICAxLjIzRSs2MTQ0ICAgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMDM2IGFwcGx5ICAgIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkZWNxMDM3IGFwcGx5ICAgMUUrNjE0NCAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTAzOCBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorCitkZWNxMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMDUyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1CitkZWNxMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0CitkZWNxMDU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQKK2RlY3EwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKK2RlY3EwNTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzCitkZWNxMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCitkZWNxMDU4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IDEyCitkZWNxMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEKK2RlY3EwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKK2RlY3EwNjIgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMworZGVjcTA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTA2NCBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3EwNzEgYXBwbHkgICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDcyIGFwcGx5ICAgIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNDMKK2RlY3EwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkZWNxMDc1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworCitkZWNxMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAorZGVjcTA3OCBhcHBseSAgICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBTdWJub3JtYWwKK2RlY3EwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsCitkZWNxMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgICAgIC0+IDEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTA4MiBhcHBseSAgICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjcTA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY3EwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBmb3Igc2ltcGxlIGNvcGllcywgY2hlY2sgZWRnZSBjYXNlcworZGVjcTA5MCBhcHBseSAgIDFlLTYxNzYgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorZGVjcTEwMCBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjMDAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAorCistLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3ExMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxMTIzIGFwcGx5ICAgI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZGVjcTEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTEyNSBhcHBseSAgICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNxMTMwIGFwcGx5ICAtMS4yM0UrNjE0NCAgICAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTEzMSBhcHBseSAgICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2RlY3ExMzIgYXBwbHkgIC0xRSs2MTQ0ICAgICAgIC0+ICNjN2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMTMzIGFwcGx5ICAgI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorCitkZWNxMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMTUyIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQorZGVjcTE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNAorZGVjcTE1NCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNAorZGVjcTE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTE1NiBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzCitkZWNxMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCitkZWNxMTU4IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMgorZGVjcTE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE2MCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQorZGVjcTE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTE2MiBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMworZGVjcTE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTE2NCBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNxMTcxIGFwcGx5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE3MiBhcHBseSAgICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE0MworZGVjcTE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3ExNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkZWNxMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKKworZGVjcTE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwKK2RlY3ExNzggYXBwbHkgICAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbAorZGVjcTE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKK2RlY3ExODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gLTEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MiBhcHBseSAgICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE3NSAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3ExODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93IGVkZ2UgY2FzZXMKK2RlY3ExOTAgYXBwbHkgICAtMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitkZWNxMjAwIGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjODAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAorCistLSB6ZXJvcworZGVjcTQwMCBhcHBseSAgIDBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQwMSBhcHBseSAgIDBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQwMiBhcHBseSAgIDBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwMyBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2CitkZWNxNDA0IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwNSBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2CitkZWNxNDA2IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDA3IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDAKK2RlY3E0MDggYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZGVjcTQxMCBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQxMSBhcHBseSAgICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszCitkZWNxNDEyIGFwcGx5ICAgMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDEzIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3E0MTQgYXBwbHkgICAwRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MTUgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorZGVjcTQxNiBhcHBseSAgIDBFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQxNyBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExCitkZWNxNDE4IGFwcGx5ICAgMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDE5IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKKworLS0gbmVnYXRpdmUgemVyb3MKK2RlY3E0MjAgYXBwbHkgIC0wRS04MDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MjEgYXBwbHkgIC0wRS02MTc3ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MjIgYXBwbHkgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjMgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYKK2RlY3E0MjQgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI1IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS02MTc2CitkZWNxNDI2IGFwcGx5ICAtMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI3IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwCitkZWNxNDI4IGFwcGx5ICAtMCAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI5IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wCitkZWNxNDMwIGFwcGx5ICAtMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDMxIGFwcGx5ICAgI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszCitkZWNxNDMyIGFwcGx5ICAtMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDMzIGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNxNDM0IGFwcGx5ICAtMEUrNjExMiAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM1IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCitkZWNxNDM2IGFwcGx5ICAtMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM3IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCitkZWNxNDM4IGFwcGx5ICAtMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM5IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCisKKy0tIGV4cG9uZW50IGxlbmd0aHMKK2RlY3E0NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gNworZGVjcTQ0MSBhcHBseSAgIDcgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQyIGFwcGx5ICAgIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzkKK2RlY3E0NDMgYXBwbHkgICA3RSs5IC0+ICMyMjBhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZGVjcTQ0NCBhcHBseSAgICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OQorZGVjcTQ0NSBhcHBseSAgIDdFKzk5IC0+ICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZGVjcTQ0NiBhcHBseSAgICMyMzAxYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OTkKK2RlY3E0NDcgYXBwbHkgICA3RSs5OTkgLT4gIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ4IGFwcGx5ICAgIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzU5OTkKK2RlY3E0NDkgYXBwbHkgICA3RSs1OTk5IC0+ICM0M2UzYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworCistLSBTcGVjaWFscworZGVjcTUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTAyIGFwcGx5ICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNxNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjcTUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3E1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTA4IGFwcGx5ICAgIzdiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CisKK2RlY3E1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTEwIGFwcGx5ICAgIzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YworZGVjcTUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBOYU4KK2RlY3E1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkCitkZWNxNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjcTUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDNlN2U3YzdlN2U3ZTdlN2M3ZTdlN2U3ZTdjN2UKK2RlY3E1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjcTUxNiBhcHBseSAgICM3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKK2RlY3E1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjcTUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkZWNxNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCitkZWNxNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNxNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3E1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjcTUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY3E1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YworZGVjcTUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNxNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAwM2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZAorZGVjcTUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNxNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQorZGVjcTUzNSBhcHBseSAgICNmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjcTUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKK2RlY3E1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KK2RlY3E1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RlY3E1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKK2RlY3E1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1NDIgYXBwbHkgICBOYU4xICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3E1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3E1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKK2RlY3E1NDUgYXBwbHkgICBOYU4xMjM0NSAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3E1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjhlNTYKK2RlY3E1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjdmZGYKK2RlY3E1NDggYXBwbHkgICBOYU43OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTkgIC0+ICM3YzAwM2RmZjdmZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZgorZGVjcTU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxNTUwIGFwcGx5ICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2RlY3E2MDEgYXBwbHkgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwMiBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZGVjcTYwMyBhcHBseSAgIDFFKzYxNDMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA0IGFwcGx5ICAgIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMKK2RlY3E2MDUgYXBwbHkgICAxRSs2MTQyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwNiBhcHBseSAgICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIKK2RlY3E2MDcgYXBwbHkgICAxRSs2MTQxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwOCBhcHBseSAgICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MQorZGVjcTYwOSBhcHBseSAgIDFFKzYxNDAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjEwIGFwcGx5ICAgIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAKK2RlY3E2MTEgYXBwbHkgICAxRSs2MTM5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxMiBhcHBseSAgICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkKK2RlY3E2MTMgYXBwbHkgICAxRSs2MTM4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxNCBhcHBseSAgICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOAorZGVjcTYxNSBhcHBseSAgIDFFKzYxMzcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE2IGFwcGx5ICAgIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcKK2RlY3E2MTcgYXBwbHkgICAxRSs2MTM2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxOCBhcHBseSAgICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYKK2RlY3E2MTkgYXBwbHkgICAxRSs2MTM1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyMCBhcHBseSAgICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNQorZGVjcTYyMSBhcHBseSAgIDFFKzYxMzQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjIyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzQKK2RlY3E2MjMgYXBwbHkgICAxRSs2MTMzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyNCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzMKK2RlY3E2MjUgYXBwbHkgICAxRSs2MTMyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMgorZGVjcTYyNyBhcHBseSAgIDFFKzYxMzEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzEKK2RlY3E2MjkgYXBwbHkgICAxRSs2MTMwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzMCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzAKK2RlY3E2MzEgYXBwbHkgICAxRSs2MTI5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzMiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUrNjEyOQorZGVjcTYzMyBhcHBseSAgIDFFKzYxMjggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFKzYxMjgKK2RlY3E2MzUgYXBwbHkgICAxRSs2MTI3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFKzYxMjcKK2RlY3E2MzcgYXBwbHkgICAxRSs2MTI2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzOCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrNjEyNgorZGVjcTYzOSBhcHBseSAgIDFFKzYxMjUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzYxMjUKK2RlY3E2NDEgYXBwbHkgICAxRSs2MTI0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzYxMjQKK2RlY3E2NDMgYXBwbHkgICAxRSs2MTIzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrNjEyMworZGVjcTY0NSBhcHBseSAgIDFFKzYxMjIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzYxMjIKK2RlY3E2NDcgYXBwbHkgICAxRSs2MTIxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzYxMjEKK2RlY3E2NDkgYXBwbHkgICAxRSs2MTIwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY1MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrNjEyMAorZGVjcTY1MSBhcHBseSAgIDFFKzYxMTkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMCBDbGFtcGVkCitkZWNxNjUyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzYxMTkKK2RlY3E2NTMgYXBwbHkgICAxRSs2MTE4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAgQ2xhbXBlZAorZGVjcTY1NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzYxMTgKK2RlY3E2NTUgYXBwbHkgICAxRSs2MTE3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAgQ2xhbXBlZAorZGVjcTY1NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrNjExNworZGVjcTY1NyBhcHBseSAgIDFFKzYxMTYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCBDbGFtcGVkCitkZWNxNjU4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzYxMTYKK2RlY3E2NTkgYXBwbHkgICAxRSs2MTE1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAgQ2xhbXBlZAorZGVjcTY2MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzYxMTUKK2RlY3E2NjEgYXBwbHkgICAxRSs2MTE0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgQ2xhbXBlZAorZGVjcTY2MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrNjExNAorZGVjcTY2MyBhcHBseSAgIDFFKzYxMTMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MCBDbGFtcGVkCitkZWNxNjY0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzYxMTMKK2RlY3E2NjUgYXBwbHkgICAxRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgQ2xhbXBlZAorZGVjcTY2NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzYxMTIKK2RlY3E2NjcgYXBwbHkgICAxRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3E2NjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrNjExMQorZGVjcTY2OSBhcHBseSAgIDFFKzYxMTAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTY3MCBhcHBseSAgICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTEwCisKKy0tIFNlbGVjdGVkIERQRCBjb2RlcworZGVjcTcwMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNxNzAxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgICAgIC0+IDkKK2RlY3E3MDIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMTAKK2RlY3E3MDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkKK2RlY3E3MDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgICAgICAgLT4gMjAKK2RlY3E3MDUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkKK2RlY3E3MDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAgICAgICAgLT4gMzAKK2RlY3E3MDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkKK2RlY3E3MDggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgICAgICAgLT4gNDAKK2RlY3E3MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkKK2RlY3E3MTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAgICAgLT4gNTAKK2RlY3E3MTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkKK2RlY3E3MTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAgICAgICAgLT4gNjAKK2RlY3E3MTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkKK2RlY3E3MTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAgICAgICAgLT4gNzAKK2RlY3E3MTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEgICAgICAgLT4gNzEKK2RlY3E3MTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIgICAgICAgLT4gNzIKK2RlY3E3MTcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMKK2RlY3E3MTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQKK2RlY3E3MTkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUKK2RlY3E3MjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYKK2RlY3E3MjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcKK2RlY3E3MjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzggICAgICAgLT4gNzgKK2RlY3E3MjMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkKKworZGVjcTczMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQKK2RlY3E3MzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1CitkZWNxNzMyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMAorZGVjcTczMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjEKKworLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKK2RlY3E3NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3CitkZWNxNzQxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OAorZGVjcTc0MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlYiAgICAgICAtPiA3ODcKK2RlY3E3NDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3CitkZWNxNzQ0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzlmICAgICAgIC0+IDk5NworZGVjcTc0NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNiZiAgICAgICAtPiA5NzkKK2RlY3E3NDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5CitkZWNxNzQ3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorCisKKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCitkZWNxNzUwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorZGVjcTc1MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZSAgICAgICAtPiA4ODgKK2RlY3E3NTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4CitkZWNxNzUzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OAorZGVjcTc1NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZiAgICAgICAtPiA4ODkKK2RlY3E3NTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5CitkZWNxNzU2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQorZGVjcTc1NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2ZiAgICAgICAtPiA4ODkKKworZGVjcTc2MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4CitkZWNxNzYyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OAorZGVjcTc2MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5CitkZWNxNzY1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQorZGVjcTc2NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkKK2RlY3E3NjcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5CisKK2RlY3E3NzAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4CitkZWNxNzcxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OAorZGVjcTc3MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgKK2RlY3E3NzMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4CitkZWNxNzc0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQorZGVjcTc3NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkKK2RlY3E3NzYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5CitkZWNxNzc3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQorCitkZWNxNzgwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OAorZGVjcTc4MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZSAgICAgICAtPiA5OTgKK2RlY3E3ODIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4CitkZWNxNzgzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OAorZGVjcTc4NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZiAgICAgICAtPiA5OTkKK2RlY3E3ODUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5CitkZWNxNzg2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQorZGVjcTc4NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmZiAgICAgICAtPiA5OTkKKworLS0gTWlzY2VsbGFuZW91cyAodGVzdGVycycgcXVlcmllcywgZXRjLikKKworZGVjcTc5MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMCAgICAgICAtPiAzMDAwMAorZGVjcTc5MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwMCAgICAgICAtPiA4OTAwMDAKK2RlY3E3OTIgYXBwbHkgICAzMDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDAKK2RlY3E3OTMgYXBwbHkgICA4OTAwMDAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwCisKKy0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikKK2RlY3E4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NgorZGVjcTgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3CitkZWNxODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDgKK2RlY3E4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OQorZGVjcTgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2CitkZWNxODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcKK2RlY3E4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OAorZGVjcTgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5CitkZWNxODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWEKK2RlY3E4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YgorZGVjcTgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdhCitkZWNxODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2IKKworZGVjcTgyMCBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2CitkZWNxODIxIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcKK2RlY3E4MjIgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OAorZGVjcTgyMyBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5CitkZWNxODI0IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYKK2RlY3E4MjUgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0NworZGVjcTgyNiBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4CitkZWNxODI3IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkKK2RlY3E4MjggYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NAorZGVjcTgyOSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1CitkZWNxODMwIGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYKK2RlY3E4MzEgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5NworCistLSBWRyB0ZXN0Y2FzZQorZGVjcTg0MCBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OAorZGVjcTg0MSBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAgLT4gOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAKK2RlY3E4NDIgYXBwbHkgICAgIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIC0+IDcuMDQ5MDAwMDAwMDAwMDEwNzk1NDg4MDAwMDAwMDAwMDAwRS0zMDk3CitkZWNxODQzIG11bHRpcGx5ICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRk1BLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdAppbmRleCAyMzUzZjJmLi5kODg0NTUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdApAQCAtMSwxNzg2ICsxLDE3ODYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxRk1BLmRlY1Rlc3QgLS0gZGVjUXVhZCBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6DQotLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlDQotLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkNCi0tLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pDQotLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQ0KLS0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQ0KLS0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5DQotLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuDQotDQotLS0gU2FuaXR5IGNoZWNrcw0KLWRxZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDINCi1kcWZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzDQotZHFmbWEwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNw0KLWRxZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTANCi1kcWZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwDQotZHFmbWEwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQ0KLWRxZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTENCi1kcWZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyDQotZHFmbWEwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMA0KLWRxZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDENCi1kcWZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xDQotZHFmbWEwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03Mg0KLWRxZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDANCi1kcWZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xDQotZHFmbWEwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQ0KLWRxZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzINCi0NCi0tLSBub24taW50ZWdlciBleGFjdHMNCi1kcWZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyDQotZHFmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MA0KLWRxZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYNCi1kcWZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjINCi1kcWZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4DQotZHFmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMw0KLWRxZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1DQotZHFmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOA0KLWRxZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1Mw0KLWRxZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkNCi1kcWZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yDQotZHFmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzDQotZHFmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMA0KLWRxZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OA0KLWRxZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQNCi1kcWZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNg0KLWRxZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOA0KLWRxZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDINCi1kcWZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4DQotZHFmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NA0KLWRxZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExDQotDQotLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoDQotLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQNCi0tLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzhFKzM4DQotZHFmbWEwMjAyICBmbWEgICAgICAgNjg1Mzc5ODU4NjEzNTU4NjQ0NTcuNTY5NCAgICAgIDY1NjU4NzU3NjI5NzIwODY2MDUuODU5NjkgICAgICAgMzU4OTI2MzQ0NDcyMzY3NTMuMTcyODEyICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzlFKzM4IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDUuOTk2MjQ4NDY5NTg0NTk0MzQ2ODU4ODgxNjIwMTg1NTE0RSs0MQ0KLWRxZm1hMDIwOCAgZm1hICAgICAgICAgIDg5MjYxODIyMzQ0NzI3NjI4NTcxLjkgICAgICA2NzE3NTk1ODQ1NjU0MTMxMzgzMzM2Ljg5ICAgICAgNTA2MTAzNjQ5NzI4ODc5NjA3NjI2Ni4xMSAgLT4gIDUuOTk2MjQ4NDY5NTg0NTk0MzQ2ODU4ODgxNjIwMTg1NTEzRSs0MSBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjg5OTI0Mjk2ODY3ODI1NjkyNDAyMTU5NDc3MDg3NDA3MEUrMzQNCi1kcWZtYTAyMTAgIGZtYSAgICAgICAzMjA1MDYyMzcyMzI0NDg2ODUuNDk1OTcxICAgICAgIDU5MjU3NTk3NzY0MDE3OTY3Ljk4NDQ0OCAgICAgIDMyMDU2MTUyMzkwNzc3MTE1ODk5MTIuODUgIC0+ICAxLjg5OTI0Mjk2ODY3ODI1NjkyNDAyMTU5NDc3MDg3NDA3MUUrMzQgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDlFKzM3DQotZHFmbWEwMjE1ICBmbWEgICAgICAgIDIyMDI0Nzg0MzI1OTExMjI2My4xNzk5NSAgICAgICAzMjEzOTIzNDAyODc5ODc5NzkwMDIuODAgICAgICAgIDQ3NTMzMjc5ODE5OTk3MTY3NjU1NDQwICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDhFKzM3IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMjI0OTU1NjY3NTgxNDI3NTU5NzU0MTA2ODYyMzUwNzQzRSszNw0KLWRxZm1hMDIyNiAgZm1hICAgICAgIDIzODgwNzI5NzkwMzY4ODgwNDEyLjE0NDkgICAgICAgNTEyOTQ3MzMzODI3MDY0NzE5LjU1NDA3ICAgICAgMjE3MTE3NDM4NDE5NTkwODI0NTAyLjk2MyAgLT4gIDEuMjI0OTU1NjY3NTgxNDI3NTU5NzU0MTA2ODYyMzUwNzQ0RSszNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDRFKzQyDQotZHFmbWEwMjI5ICBmbWEgICAgICAgIDI1Mzk4OTIzNTcwMTYwOTk3MDYuNDEyNiAgICAgIC05OTYxNDIyMzI2Njc1MDQ4MTc3MTc0MzUgICAgICAgNTM2ODIwODI1OTgzMTU5NDk0MjUuOTM3ICAtPiAgLTIuNTMwMDk0MDQzMjUzMTQ4ODA2MjcyMjc2MzY4NTc5MTQzRSs0MiBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1NEUrMzcNCi1kcWZtYTAyMzMgIGZtYSAgICAgICAgNDU0NjMzOTQ5MTM0MTYyNDQ2NC4wODA0ICAgICAgICAgICAgMzc2ODcxNzg2NDE2OTIwNTU4MSAgICAgICA4MzU3ODk4MDI3ODY5MDM5NTE4NC42MjAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1M0UrMzcgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNC4wNjIyNzU2NjM0MDU4MjM3MTY0MTE1NzkxMTc3NzE1NDdFKzM1DQotZHFmbWEwMjM1ICBmbWEgICAgICAgIDQwOTI0MjExOTQzMzgxNjEzMS40MjI1MyAgICAgIDk5MjYzMzgxNTE2Njc0MTUwMS40NzcyNDkgICAgICAgIDcwMTc5NjM2NTQ0NDE2NzU2MTI5NTQ2ICAtPiAgNC4wNjIyNzU2NjM0MDU4MjM3MTY0MTE1NzkxMTc3NzE1NDhFKzM1IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDYuMDAyNjA0MzI3NzMyNTY4NDkwNTYyMjQ5ODc1MzA2ODIzRSs0Nw0KLWRxZm1hMDI1OCAgZm1hICAgICAgICA4MTc5NDEzMzY1OTM1NDE3NDIxNTk2ODQgICAgICAgNzMzODY3MzM5NzY5MzEwNzI5MjY2NTk4ICAgICAgNzg1NjM4NDQ2NTA5NDI0MTkzMTE4MzAuOCAgLT4gIDYuMDAyNjA0MzI3NzMyNTY4NDkwNTYyMjQ5ODc1MzA2ODIyRSs0NyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzRFKzM5DQotZHFmbWEwMjY0ICBmbWEgICAgICAgMzg3NjE3MzEwMTY5MTYxMjcwLjczNzUzMiAgICAgLTUyMjk0NDI3MDM0MTQ5NTYwNjEyMTYuNjIgICAgICA1NzY2NTY2NjgxNjY1Mjk2NzE1MDQ3My41ICAtPiAgLTIuMDI3MDIyNTE0MzgxNDUyMTk3NTEwMTAzMzk1MjgzODczRSszOSBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtNy44NTY1MjUwMzk4MDM1NTQwMDExNDQwODk4NDI3MzAzNjFFKzM3DQotZHFmbWEwMjY3ICBmbWEgICAgICAtODQ3NjU1ODQ1NzIwNTY1Mjc0NzAxLjIxMCAgICAgICAgOTI2ODUzMTY1NjQxMTc3MzkuODM5ODQgICAgICAyMjc4MDk1MDA0MTM3NjQyNDQyOS41Njg2ICAtPiAgLTcuODU2NTI1MDM5ODAzNTU0MDAxMTQ0MDg5ODQyNzMwMzYwRSszNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjY5NTUxNTU2MjAxMTUyMDc0NjEyNTYwNzUwMjIzNzU1OUUrMzgNCi1kcWZtYTAyNjggIGZtYSAgICAgICAgICAyMTU5MDI5MDM2NTEyNzY4NS4zNjc1ICAgICAgIDc4NTMxMzkyMjc1NzY1NDEzNzk0MjYuOCAgICAgICAtMzI3NTg1OTQzNzIzNjE4MC43NjE1NDQgIC0+ICAxLjY5NTUxNTU2MjAxMTUyMDc0NjEyNTYwNzUwMjIzNzU1OEUrMzggSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzEwRSszOA0KLWRxZm1hMDI2OSAgZm1hICAgICAgLTk3NDMyMDYzNjI3Mjg2MjY5Ny45NzE1ODYgICAgICA4NjcxMDkxMDM2NDE4NjAyNDc0NDAuNzU2ICAgICAgICAtOTc3NTE3MDc3NTkwMjQ1NDc2Mi45OCAgLT4gIC04LjQ0ODQyMjkzNTc4MzI4OTIxOTc0ODExNTAzODAxNDcwOUUrMzggSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlDQotZHFmbWEwMzAwICBmbWEgICA5ZSs2MTQ0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTAzMDEgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMDMwMiAgZm1hICAgMWUrNjE0NCAgICAxMCAgIC0xZSs2MTQ0ICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQotZHFmbWEwMzAzICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTllKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCi0tLSBzdWJub3JtYWwgZXRjLg0KLWRxZm1hMDMwNSAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDAgICAgICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWZtYTAzMDYgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEwMzA3ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMWUtNjE3NiAgIC0+IDFFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMNCi1kcWZtYTA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFmbWEwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1kcWZtYTA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1kcWZtYTA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFmbWEwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uDQotZHFmbWEwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yDQotZHFmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zDQotZHFmbWEwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41DQotLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nDQotLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpDQotZHFmbWEwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwOTA0IGZtYSAgMCAgICAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwOTA3IGZtYSAgTmFONyAgc05hTjIgc05hTjMgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kcWZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzYxNDQgIC0+IDQNCi1kcWZtYTIwMDEgZm1hICAyICAgICAgMyAgIDBlKzYxNDQgIC0+IDYNCi1kcWZtYTIwMDIgZm1hICA1ICAgICAgMSAgIDBlKzYxNDQgIC0+IDUNCi1kcWZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzYxNDQgIC0+IDEwDQotZHFmbWEyMDA0IGZtYSAgMS4yMCAgIDIgICAwZSs2MTQ0ICAtPiAyLjQwDQotZHFmbWEyMDA1IGZtYSAgMS4yMCAgIDAgICAwZSs2MTQ0ICAtPiAwLjAwDQotZHFmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSs2MTQ0ICAtPiAtMi40MA0KLWRxZm1hMjAwNyBmbWEgIC0xLjIwICAyICAgMGUrNjE0NCAgLT4gLTIuNDANCi1kcWZtYTIwMDggZm1hICAtMS4yMCAgMCAgIDBlKzYxNDQgIC0+IDAuMDANCi1kcWZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzYxNDQgIC0+IDIuNDANCi1kcWZtYTIwMTAgZm1hICA1LjA5IDcuMSAgIDBlKzYxNDQgIC0+IDM2LjEzOQ0KLWRxZm1hMjAxMSBmbWEgIDIuNSAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMA0KLWRxZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDANCi1kcWZtYTIwMTMgZm1hICAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIDBlKzYxNDQgIC0+IDEuMjM0NTY3ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQNCi1kcWZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAwDQotZHFmbWEyMDE2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyMDE3IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyMDE5IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gemVyb3MsIGV0Yy4NCi1kcWZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTIwMjIgZm1hICAgMCAgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTIwMjMgZm1hICAtMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTIwMjUgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTIwMjYgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTIwMjggZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTIwMzAgZm1hICAgNS4wMCAgIDFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDANCi1kcWZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDANCi1kcWZtYTIwMzIgZm1hICAgMDAuMDAgIDBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFmbWEyMDMzIGZtYSAgIDBFLTMgICAwMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWRxZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAtMC4wMDUwMA0KLWRxZm1hMjAzNSBmbWEgIC0wMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMA0KLWRxZm1hMjAzNiBmbWEgIC0wMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1kcWZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZHFmbWEyMDM4IGZtYSAgIDUuMDAgIC0xRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwDQotZHFmbWEyMDM5IGZtYSAgIDAwLjAwIC0wLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwDQotZHFmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWRxZm1hMjA0MSBmbWEgICAwRS0zICAtMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kcWZtYTIwNDIgZm1hICAtNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDA1MDANCi1kcWZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDANCi1kcWZtYTIwNDQgZm1hICAtMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFmbWEyMDQ1IGZtYSAgLTBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kcWZtYTIwNTAgZm1hICAxLjIwIDMgICAgICAgICAgMGUrNjE0NCAgLT4gMy42MA0KLWRxZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAyMQ0KLWRxZm1hMjA1MiBmbWEgIDAuOSAgMC44ICAgICAgICAwZSs2MTQ0ICAtPiAwLjcyDQotZHFmbWEyMDUzIGZtYSAgMC45ICAtMCAgICAgICAgIDBlKzYxNDQgIC0+IDAuMA0KLWRxZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSs2MTQ0ICAtPiA0MjgxMzU5NzEwNDENCi0NCi1kcWZtYTIwNjAgZm1hICAxMjMuNDUgMWU3ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzkNCi1kcWZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEwDQotZHFmbWEyMDYyIGZtYSAgMTIzLjQ1IDFlKzkgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMQ0KLWRxZm1hMjA2MyBmbWEgIDEyMy40NSAxZTEwICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTINCi1kcWZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEzDQotZHFmbWEyMDY1IGZtYSAgMTIzLjQ1IDFlMTIgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxNA0KLWRxZm1hMjA2NiBmbWEgIDEyMy40NSAxZTEzICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTUNCi0NCi0NCi0tLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMNCi0tLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxZm1hMjA4MCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotZHFmbWEyMDg0IGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCi1kcWZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KLWRxZm1hMjA5NCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2Fycmllcw0KLWRxZm1hMjEwMSBmbWEgIDkgOSAgICAgMGUrNjE0NCAgLT4gODENCi1kcWZtYTIxMDIgZm1hICA5IDkwICAgICAwZSs2MTQ0ICAtPiA4MTANCi1kcWZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMA0KLWRxZm1hMjEwNCBmbWEgIDkgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDANCi1kcWZtYTIxMDUgZm1hICA5IDkwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDANCi1kcWZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMA0KLWRxZm1hMjEwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDANCi1kcWZtYTIxMDggZm1hICA5IDkwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDANCi1kcWZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMA0KLWRxZm1hMjExMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDANCi1kcWZtYTIxMTEgZm1hICA5IDkwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDANCi1kcWZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMA0KLWRxZm1hMjExMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDANCi1kcWZtYTIxMTQgZm1hICA5IDkwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDANCi1kcWZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTE3IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTE5IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTIwIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS1kcWZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTIyIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFmbWEyMTIzIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMNCi1kcWZtYTIxMzEgZm1hICAzIDMgICAgIDBlKzYxNDQgIC0+IDkNCi1kcWZtYTIxMzIgZm1hICAzIDMwICAgICAwZSs2MTQ0ICAtPiA5MA0KLWRxZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSs2MTQ0ICAtPiA5MDANCi1kcWZtYTIxMzQgZm1hICAzIDMwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDANCi1kcWZtYTIxMzUgZm1hICAzIDMwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMA0KLWRxZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDANCi1kcWZtYTIxMzcgZm1hICAzIDMwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDANCi1kcWZtYTIxMzggZm1hICAzIDMwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMA0KLWRxZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDANCi1kcWZtYTIxNDAgZm1hICAzIDMwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDANCi1kcWZtYTIxNDEgZm1hICAzIDMwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMA0KLWRxZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDANCi1kcWZtYTIxNDMgZm1hICAzIDMwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDANCi1kcWZtYTIxNDQgZm1hICAzIDMwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNDYgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNDcgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE0OCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNDkgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNTAgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxZm1hMjE1MSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNTIgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIxNTMgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxZm1hMjI2MyBmbWEgIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgICAwZSs2MTQ0ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODI5NiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nDQotZHFmbWEyMzAxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzAzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzA0IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzA2IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzA3IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMDggZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzA5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzEwIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzEyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzEzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzE1IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFmbWEyMzE2IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWZtYTIzMTcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KLWRxZm1hMjMxOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZA0KLWRxZm1hMjMxOSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgIFJvdW5kZWQNCi1kcWZtYTIzMjAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZA0KLWRxZm1hMjMyMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCAgUm91bmRlZA0KLWRxZm1hMjMyMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzkgIFJvdW5kZWQNCi1kcWZtYTIzMjMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZA0KLQ0KLS0tIHRyeXplcm9zIGNhc2VzDQotZHFmbWEyNTA0ICBmbWEgICAwRS00MjYwIDEwMDBFLTQyNjAgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBDbGFtcGVkDQotZHFmbWEyNTA1ICBmbWEgICAxMDBFKzQyNjAgMEUrNDI2MCAgICAgMGUrNjE0NCAgLT4gMEUrNjExMSBDbGFtcGVkDQotDQotLS0gbWl4ZWQgd2l0aCB6ZXJvcw0KLWRxZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwDQotZHFmbWEyNTQyIGZtYSAgLTAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwDQotZHFmbWEyNTQ1IGZtYSAgLTEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDANCi1kcWZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KLWRxZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwDQotZHFmbWEyNTQ4IGZtYSAgIDEgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDANCi0NCi1kcWZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTUyIGZtYSAgLTAuMCAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTU1IGZtYSAgLTEuMCAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTU4IGZtYSAgIDEuMCAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLQ0KLWRxZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NjIgZm1hICAtMCAgICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NjUgZm1hICAtMSAgICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotZHFmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KLWRxZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCi1kcWZtYTI1NjggZm1hICAgMSAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQotDQotZHFmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1NzIgZm1hICAtMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1NzUgZm1hICAtMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1NzggZm1hICAgMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjU3OSBmbWEgICAxLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQotZHFmbWEyNTMwIGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1MzEgZm1hICAtMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjUzMiBmbWEgICAxLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwDQotZHFmbWEyNTMzIGZtYSAgIDEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gIDAuMDANCi1kcWZtYTI1MzQgZm1hICAtMS4wICAtMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMA0KLWRxZm1hMjUzNSBmbWEgIC0xLjAgICAwLjAgICAgLTBlKzYxNDQgIC0+IC0wLjAwDQotDQotDQotLS0gU3BlY2lhbHMNCi1kcWZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1ODEgZm1hICAgSW5mICAtMTAwMCAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjU4NCBmbWEgICBJbmYgICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNTg3IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQotZHFmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotZHFmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotZHFmbWEyNTkwIGZtYSAgLTEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotZHFmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjU5MyBmbWEgICAxICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjYwMiBmbWEgIC1JbmYgIC0xICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KLWRxZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2MDUgZm1hICAtSW5mICAgMSAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MDggZm1hICAtMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCi1kcWZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCi1kcWZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCi1kcWZtYTI2MTEgZm1hICAtMCAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotZHFmbWEyNjE0IGZtYSAgIDEwMDAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotZHFmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5DQotDQotZHFmbWEyNjIxIGZtYSAgIE5hTiAtSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjI0IGZtYSAgIE5hTiAtMCAgICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjI3IGZtYSAgIE5hTiAgMTAwMCAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjMwIGZtYSAgLUluZiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjMzIGZtYSAgLTAgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi1kcWZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQotZHFmbWEyNjM2IGZtYSAgIDEwMDAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KLWRxZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCi0NCi1kcWZtYTI2NDEgZm1hICAgc05hTiAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NDQgZm1hICAgc05hTiAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NDcgZm1hICAgc05hTiAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTAgZm1hICAgTmFOICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTMgZm1hICAtMSAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTYgZm1hICAgMSAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI2NTkgZm1hICAgTmFOICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWZtYTI2NjEgZm1hICAgTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOOQ0KLWRxZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+ICBOYU44DQotZHFmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTjcxDQotZHFmbWEyNjY0IGZtYSAgIE5hTjYgIE5hTjUgICAgMGUrNjE0NCAgLT4gIE5hTjYNCi1kcWZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSs2MTQ0ICAtPiAgTmFONA0KLWRxZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzYxNDQgIC0+ICBOYU4zMw0KLWRxZm1hMjY2NyBmbWEgICBJbmYgICBOYU4yICAgIDBlKzYxNDQgIC0+ICBOYU4yDQotDQotZHFmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjcyIGZtYSAgIHNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrNjE0NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc1IGZtYSAgIE5hTjk1ICBzTmFOOTMgICAgMGUrNjE0NCAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrNjE0NCAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrNjE0NCAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc4IGZtYSAgIEluZiAgICBzTmFOOTAgICAgMGUrNjE0NCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrNjE0NCAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFmbWEyNjgxIGZtYSAgLU5hTjkgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjkNCi1kcWZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFOOA0KLWRxZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzYxNDQgIC0+IC1OYU43MQ0KLWRxZm1hMjY4NCBmbWEgIC1OYU42IC1OYU41ICAgIDBlKzYxNDQgIC0+IC1OYU42DQotZHFmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrNjE0NCAgLT4gLU5hTjQNCi1kcWZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSs2MTQ0ICAtPiAtTmFOMzMNCi1kcWZtYTI2ODcgZm1hICAgSW5mICAtTmFOMiAgICAwZSs2MTQ0ICAtPiAtTmFOMg0KLQ0KLWRxZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5MiBmbWEgIC1zTmFOOTggLTExICAgICAgIDBlKzYxNDQgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzYxNDQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5NSBmbWEgIC1OYU45NSAgLXNOYU45MyAgIDBlKzYxNDQgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzYxNDQgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzYxNDQgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5OCBmbWEgICBJbmYgICAgLXNOYU45MCAgIDBlKzYxNDQgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzYxNDQgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxZm1hMjcwMSBmbWEgIC1OYU4gIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1OYU4NCi1kcWZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSs2MTQ0ICAtPiAtTmFODQotZHFmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KLWRxZm1hMjcwNCBmbWEgIC1OYU4gIC1OYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4NCi1kcWZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSs2MTQ0ICAtPiAtTmFODQotZHFmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KLWRxZm1hMjcwNyBmbWEgICBJbmYgIC1OYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4NCi0NCi1kcWZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzEyIGZtYSAgLXNOYU4gICAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzE1IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFmbWEyNzE4IGZtYSAgIEluZiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCi0tLSBzaWducw0KLWRxZm1hMjc1MSBmbWEgICAxZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc1MiBmbWEgICAxZSs0Mjc3IC0xZSszMzExICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc1MyBmbWEgIC0xZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc1NCBmbWEgIC0xZSs0Mjc3IC0xZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc1NSBmbWEgICAxZS00Mjc3ICAxZS0zMzExICAgMGUrNjE0NCAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjc1NiBmbWEgICAxZS00Mjc3IC0xZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjc1NyBmbWEgIC0xZS00Mjc3ICAxZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjc1OCBmbWEgIC0xZS00Mjc3IC0xZS0zMzExICAgMGUrNjE0NCAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KLWRxZm1hMjc2MCBmbWEgIDFlLTYwNjkgMWUtMTAxICAgMGUrNjE0NCAgLT4gMUUtNjE3MCBTdWJub3JtYWwNCi1kcWZtYTI3NjEgZm1hICAxZS02MDY5IDFlLTEwMiAgIDBlKzYxNDQgIC0+IDFFLTYxNzEgU3Vibm9ybWFsDQotZHFmbWEyNzYyIGZtYSAgMWUtNjA2OSAxZS0xMDMgICAwZSs2MTQ0ICAtPiAxRS02MTcyIFN1Ym5vcm1hbA0KLWRxZm1hMjc2MyBmbWEgIDFlLTYwNjkgMWUtMTA0ICAgMGUrNjE0NCAgLT4gMUUtNjE3MyBTdWJub3JtYWwNCi1kcWZtYTI3NjQgZm1hICAxZS02MDY5IDFlLTEwNSAgIDBlKzYxNDQgIC0+IDFFLTYxNzQgU3Vibm9ybWFsDQotZHFmbWEyNzY1IGZtYSAgMWUtNjA2OSAxZS0xMDYgICAwZSs2MTQ0ICAtPiAxRS02MTc1IFN1Ym5vcm1hbA0KLWRxZm1hMjc2NiBmbWEgIDFlLTYwNjkgMWUtMTA3ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiBTdWJub3JtYWwNCi1kcWZtYTI3NjcgZm1hICAxZS02MDY5IDFlLTEwOCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjc2OCBmbWEgIDFlLTYwNjkgMWUtMTA5ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFmbWEyNzY5IGZtYSAgMWUtNjA2OSAxZS0xMTAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0tLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddDQotZHFmbWEyNzcwIGZtYSAgMWUrNDAgMWUrNjEwMSAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQNCi1kcWZtYTI3NzEgZm1hICAxZSs0MCAxZSs2MTAyICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkDQotZHFmbWEyNzcyIGZtYSAgMWUrNDAgMWUrNjEwMyAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQNCi1kcWZtYTI3NzMgZm1hICAxZSs0MCAxZSs2MTA0ICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQNCi1kcWZtYTI3NzQgZm1hICAxZSs0MCAxZSs2MTA1ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzc1IGZtYSAgMWUrNDAgMWUrNjEwNiAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc3NiBmbWEgIDFlKzQwIDFlKzYxMDcgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI3NzcgZm1hICAxZSs0MCAxZSs2MTA4ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyNzc4IGZtYSAgMWUrNDAgMWUrNjEwOSAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjc3OSBmbWEgIDFlKzQwIDFlKzYxMTAgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWZtYTI4MDEgZm1hICAgMS4wMDAwRS02MTcyICAxICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwNCi1kcWZtYTI4MDIgZm1hICAgMS4wMDBFLTYxNzIgICAxZS0xICAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCi1kcWZtYTI4MDMgZm1hICAgMS4wMEUtNjE3MiAgICAxZS0yICAgIDBlKzYxNDQgIC0+IDEuMDBFLTYxNzQgICBTdWJub3JtYWwNCi1kcWZtYTI4MDQgZm1hICAgMS4wRS02MTcyICAgICAxZS0zICAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcWZtYTI4MDUgZm1hICAgMS4wRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFmbWEyODA2IGZtYSAgIDEuM0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgwNyBmbWEgICAxLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MDggZm1hICAgMS43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODA5IGZtYSAgIDIuM0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxMCBmbWEgICAyLjVFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MTEgZm1hICAgMi43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODEyIGZtYSAgIDEuNDlFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxMyBmbWEgICAxLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MTQgZm1hICAgMS41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODE1IGZtYSAgIDIuNDlFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgxNiBmbWEgICAyLjUwRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MTcgZm1hICAgMi41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZHFmbWEyODE4IGZtYSAgIDFFLTYxNzIgICAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwNCi1kcWZtYTI4MTkgZm1hICAgM0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWZtYTI4MjAgZm1hICAgNUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcWZtYTI4MjEgZm1hICAgN0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODIyIGZtYSAgIDlFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgyMyBmbWEgICA5LjlFLTYxNzIgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWZtYTI4MjQgZm1hICAgMUUtNjE3MiAgICAgIC0xZS00ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgyNSBmbWEgICAzRS02MTcyICAgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjgyNiBmbWEgIC01RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjgyNyBmbWEgICA3RS02MTcyICAgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcWZtYTI4MjggZm1hICAtOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFmbWEyODI5IGZtYSAgIDkuOUUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxZm1hMjgzMCBmbWEgICAzLjBFLTYxNzIgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRxZm1hMjgzMSBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTIwMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxZm1hMjgzMiBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OSAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcWZtYTI4MzMgZm1hICAgMS4wRS01OTc3ICAgICAxZS0xOTggICAwZSs2MTQ0ICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsDQotZHFmbWEyODM0IGZtYSAgIDIuMEUtNTk3NyAgICAgMmUtMTk4ICAgMGUrNjE0NCAgLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbA0KLWRxZm1hMjgzNSBmbWEgICA0LjBFLTU5NzcgICAgIDRlLTE5OCAgIDBlKzYxNDQgIC0+IDEuNjBFLTYxNzQgICBTdWJub3JtYWwNCi1kcWZtYTI4MzYgZm1hICAxMC4wRS01OTc3ICAgIDEwZS0xOTggICAwZSs2MTQ0ICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQotZHFmbWEyODM3IGZtYSAgMzAuMEUtNTk3NyAgICAzMGUtMTk4ICAgMGUrNjE0NCAgLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxZm1hMjgzOCBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NiAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NSBTdWJub3JtYWwNCi1kcWZtYTI4MzkgZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjUgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFmbWEyODQwIGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY0ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQzDQotDQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQotZHFmbWEyODcwIGZtYSAgMTAwICA5Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZHFmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZHFmbWEyODcyIGZtYSAgICAgICA5Ljk5OUUrNjE0MyAxMDAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZHFmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrNjE0MyAxMDAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotDQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCi1kcWZtYTI4ODEgZm1hICAgMS4yMzQ3RS02MTMzIDEuMjM0N0UtNDAgICAgMGUrNjE0NCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODgyIGZtYSAgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg4MyBmbWEgICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgICAwZSs2MTQ0ICAtPiAgMS41MTNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWZtYTI4ODQgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MCAgICAgICAgMGUrNjE0NCAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxZm1hMjg4NSBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsDQotZHFmbWEyODg2IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjRFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRxZm1hMjg4NyBmbWEgICAxLjJFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kcWZtYTI4ODggZm1hICAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFmbWEyODg5IGZtYSAgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAgIDBlKzYxNDQgIC0+ICAgIDJFLTYxNzYgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRxZm1hMjg5MCBmbWEgICAxLjNFLTYxMzQgICAxLjNFLTQzICAgICAgICAwZSs2MTQ0ICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLWRxZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg5MyBmbWEgICAxLjIzNDVFLTQwICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFmbWEyODk0IGZtYSAgIDEuMjM0NTZFLTQwICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcWZtYTI4OTUgZm1hICAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxZm1hMjg5NiBmbWEgICAxLjIzNDU2RS00MSAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdw0KLS0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KLWRxZm1hMjkwNiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSs2MTQ0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0Mw0KLWRxZm1hMjkwNyBmbWEgICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi0tLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbg0KLWRxZm1hMjkwOCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLQ0KLS0tIGh1Z2VzdA0KLWRxZm1hMjkwOSBmbWEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1wcmVjaXNpb246ICAgMzQNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotZHFmbWEyMTAwMSAgZm1hICAxMzBFLTIgIDEyMEUtMiAgIDBlKzYxNDQgIC0+IDEuNTYwMA0KLWRxZm1hMjEwMDIgIGZtYSAgMTMwRS0yICAxMkUtMSAgICAwZSs2MTQ0ICAtPiAxLjU2MA0KLWRxZm1hMjEwMDMgIGZtYSAgMTMwRS0yICAxRTAgICAgICAwZSs2MTQ0ICAtPiAxLjMwDQotZHFmbWEyMTAwNCAgZm1hICAxRTIgICAgIDFFNCAgICAgIDBlKzYxNDQgIC0+IDFFKzYNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFmbWEyOTkwIGZtYSAgMTAgICMgICAwZSs2MTQ0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLS0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1kcWFkZDMwMDEgZm1hICAxICAxICAgICAgIDEgICAgICAgLT4gIDINCi1kcWFkZDMwMDIgZm1hICAxICAyICAgICAgIDMgICAgICAgLT4gIDUNCi1kcWFkZDMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCi1kcWFkZDMwMDQgZm1hICAxICAnNScgICAgICctMycgICAgLT4gIDINCi1kcWFkZDMwMDUgZm1hICAxICAnLTUnICAgICctMycgICAgLT4gIC04DQotZHFhZGQzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQotZHFhZGQzMDA3IGZtYSAgMSAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCi1kcWFkZDMwMDggZm1hICAxICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCi1kcWFkZDMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCi1kcWFkZDMwMTAgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCi0NCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxYWRkMzAxMSBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAxMiBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1kcWFkZDMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCi1kcWFkZDMwMTQgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDE1IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMTcgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDE4IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwMjAgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzMDIxIGZtYSAgMSAgMCAxIC0+IDENCi1kcWFkZDMwMjIgZm1hICAxICAxIDEgLT4gMg0KLWRxYWRkMzAyMyBmbWEgIDEgIDIgMSAtPiAzDQotZHFhZGQzMDI0IGZtYSAgMSAgMyAxIC0+IDQNCi1kcWFkZDMwMjUgZm1hICAxICA0IDEgLT4gNQ0KLWRxYWRkMzAyNiBmbWEgIDEgIDUgMSAtPiA2DQotZHFhZGQzMDI3IGZtYSAgMSAgNiAxIC0+IDcNCi1kcWFkZDMwMjggZm1hICAxICA3IDEgLT4gOA0KLWRxYWRkMzAyOSBmbWEgIDEgIDggMSAtPiA5DQotZHFhZGQzMDMwIGZtYSAgMSAgOSAxIC0+IDEwDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZHFhZGQzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQotZHFhZGQzMDMyIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZHFhZGQzMDMzIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQotZHFhZGQzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnDQotDQotZHFhZGQzMDM1IGZtYSAgMSAgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzAzNyBmbWEgIDEgICc3MDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDM4IGZtYSAgMSAgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeToNCi1kcWFkZDMwNDAgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwNDEgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMDQyIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwNDQgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMwNDUgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZA0KLQ0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcNCi1kcWFkZDMwNDYgZm1hICAxICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KLWRxYWRkMzA0NyBmbWEgIDEgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KLWRxYWRkMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCi1kcWFkZDMwNDkgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KLWRxYWRkMzA1MCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KLWRxYWRkMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCi1kcWFkZDMwNTIgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1kcWFkZDMwNTMgZm1hICAxICAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQotZHFhZGQzMDU0IGZtYSAgMSAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCi1kcWFkZDMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KLWRxYWRkMzA1NiBmbWEgIDEgICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KLWRxYWRkMzA1NyBmbWEgIDEgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQotDQotLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbg0KLWRxYWRkMzA2MSBmbWEgIDEgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCi1kcWFkZDMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScNCi1kcWFkZDMwNjMgZm1hICAxICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJw0KLWRxYWRkMzA2NCBmbWEgIDEgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCi1kcWFkZDMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScNCi0NCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dDQotZHFhZGQzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxDQotZHFhZGQzMDcxIGZtYSAgMSAgMSAwLiAgICAtPiAxDQotZHFhZGQzMDcyIGZtYSAgMSAgMSAgLjAgICAtPiAxLjANCi1kcWFkZDMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMA0KLWRxYWRkMzA3NCBmbWEgIDEgIDEgMC4wMCAgLT4gMS4wMA0KLWRxYWRkMzA3NSBmbWEgIDEgICAwICAxICAgLT4gMQ0KLWRxYWRkMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQ0KLWRxYWRkMzA3NyBmbWEgIDEgICAuMCAxICAgLT4gMS4wDQotZHFhZGQzMDc4IGZtYSAgMSAgMC4wIDEgICAtPiAxLjANCi1kcWFkZDMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDANCi0NCi0tLSBzb21lIGNhcnJpZXMNCi1kcWFkZDMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5DQotZHFhZGQzMDgxIGZtYSAgMSAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDANCi1kcWFkZDMwODIgZm1hICAxICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQotZHFhZGQzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQotZHFhZGQzMDg0IGZtYSAgMSAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDANCi1kcWFkZDMwODUgZm1hICAxICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQotZHFhZGQzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwDQotZHFhZGQzMDg3IGZtYSAgMSAgICAgICAgOTk5IDEgIC0+IDEwMDANCi1kcWFkZDMwODggZm1hICAxICAgICAgICAgOTkgMSAgLT4gMTAwDQotZHFhZGQzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwDQotDQotDQotLS0gbW9yZSBMSFMgc3dhcHMNCi1kcWFkZDMwOTAgZm1hICAxICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1kcWFkZDMwOTEgZm1hICAxICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWRxYWRkMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCi1kcWFkZDMwOTMgZm1hICAxICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycNCi1kcWFkZDMwOTQgZm1hICAxICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1kcWFkZDMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCi1kcWFkZDMwOTYgZm1hICAxICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycNCi1kcWFkZDMwOTcgZm1hICAxICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWRxYWRkMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQotZHFhZGQzMDk5IGZtYSAgMSAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03Jw0KLWRxYWRkMzEwMCBmbWEgIDEgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZHFhZGQzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KLWRxYWRkMzEwMiBmbWEgIDEgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1Jw0KLWRxYWRkMzEwMyBmbWEgIDEgICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWRxYWRkMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCi1kcWFkZDMxMDUgZm1hICAxICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJw0KLWRxYWRkMzEwNiBmbWEgIDEgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWRxYWRkMzEwNyBmbWEgIDEgICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCi1kcWFkZDMxMDggZm1hICAxICAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQNCi1kcWFkZDMxMDkgZm1hICAxICAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQNCi1kcWFkZDMxMTAgZm1hICAxICAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQNCi1kcWFkZDMxMTEgZm1hICAxICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCi0NCi0tLSBtb3JlIFJIUyBzd2Fwcw0KLWRxYWRkMzExMyBmbWEgIDEgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZHFhZGQzMTE0IGZtYSAgMSAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3Jw0KLWRxYWRkMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3Jw0KLWRxYWRkMzExNyBmbWEgIDEgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQotZHFhZGQzMTE5IGZtYSAgMSAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycNCi1kcWFkZDMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3Jw0KLWRxYWRkMzEyMSBmbWEgIDEgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQotZHFhZGQzMTIyIGZtYSAgMSAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3Jw0KLWRxYWRkMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcNCi1kcWFkZDMxMjQgZm1hICAxICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCi1kcWFkZDMxMjUgZm1hICAxICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnDQotZHFhZGQzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnDQotZHFhZGQzMTI3IGZtYSAgMSAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCi1kcWFkZDMxMjggZm1hICAxICAwICAnLTVFLTEnICAgICAgLT4gICctMC41Jw0KLWRxYWRkMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01Jw0KLWRxYWRkMzEzMCBmbWEgIDEgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCi1kcWFkZDMxMzEgZm1hICAxICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJw0KLWRxYWRkMzEzMiBmbWEgIDEgIDAgICctNUUzMycgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxYWRkMzEzMyBmbWEgIDEgIDAgICctNUUzNCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZA0KLWRxYWRkMzEzNCBmbWEgIDEgIDAgICctNUUzNScgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZA0KLWRxYWRkMzEzNSBmbWEgIDEgIDAgICctNUUzNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICAgUm91bmRlZA0KLWRxYWRkMzEzNiBmbWEgIDEgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1kcWFkZDMxMzcgZm1hICAxICAgMSAgJzBFLTM5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQotZHFhZGQzMTM4IGZtYSAgMSAgLTEgICcwRS0zOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWRxYWRkMzEzOSBmbWEgIDEgICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1kcWFkZDMxNDAgZm1hICAxICAnMEUtMzknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFhZGQzMTQxIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJw0KLWRxYWRkMzE0MiBmbWEgIDEgIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCi1kcWFkZDMxNDMgZm1hICAxICAwLjAwMCAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnDQotZHFhZGQzMTQ0IGZtYSAgMSAgMC4wMDAwICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZA0KLQ0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQotZHFhZGQzMTQ2IGZtYSAgMSAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KLWRxYWRkMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnDQotZHFhZGQzMTQ4IGZtYSAgMSAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kcWFkZDMxNDkgZm1hICAxICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQotZHFhZGQzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1kcWFkZDMxNTEgZm1hICAxICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KLWRxYWRkMzE1MiBmbWEgIDEgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCi1kcWFkZDMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnDQotZHFhZGQzMTU0IGZtYSAgMSAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KLWRxYWRkMzE1NSBmbWEgIDEgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQotZHFhZGQzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicNCi1kcWFkZDMxNTcgZm1hICAxICAnMycgICAgICcrMycgICAgLT4gICc2Jw0KLWRxYWRkMzE1OCBmbWEgIDEgICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQotZHFhZGQzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJw0KLWRxYWRkMzE2MCBmbWEgIDEgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1kcWFkZDMxNjEgZm1hICAxICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScNCi1kcWFkZDMxNjIgZm1hICAxICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KLWRxYWRkMzE2NCBmbWEgIDEgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5Jw0KLWRxYWRkMzE2NSBmbWEgIDEgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScNCi1kcWFkZDMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZHFhZGQzMTY3IGZtYSAgMSAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KLWRxYWRkMzE2OCBmbWEgIDEgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzUgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkDQotZHFhZGQzMTc4IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMTgxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCi1yb3VuZGluZzogaGFsZl91cA0KLWRxYWRkMzIwMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KLWRxYWRkMzIwMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjAzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIwNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjA2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIwNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMDggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjA5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjEyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjE1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIxNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJw0KLWRxYWRkMzIxNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMTggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjE5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcWFkZDMyMjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCi1kcWFkZDMyMjEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjIyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIyMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMjQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjI1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIyNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjI4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIyOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjMxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjM0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyMzYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCi1kcWFkZDMyMzcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjM4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzIzOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRxYWRkMzI0MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNDEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjQyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZHFhZGQzMjUwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknDQotZHFhZGQzMjUxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNTMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjU0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNTYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjU3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI1OCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNTkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjYwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjYzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2NCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMjY2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQotZHFhZGQzMjY3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzI2OCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMyNjkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcWFkZDMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwDQotZHFhZGQzMzAyIGZtYSAgMSAgICAwICAgMSAgICAgIC0+ICAgMQ0KLWRxYWRkMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDINCi1kcWFkZDMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzDQotZHFhZGQzMzA1IGZtYSAgMSAgIDk4ICAgMSAgICAgIC0+ICA5OQ0KLWRxYWRkMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDANCi1kcWFkZDMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxDQotZHFhZGQzMzA4IGZtYSAgMSAgMTAxICAgMSAgICAgIC0+IDEwMg0KLWRxYWRkMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTINCi1kcWFkZDMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xDQotZHFhZGQzMzExIGZtYSAgMSAgICAxICAtMSAgICAgIC0+ICAgMA0KLWRxYWRkMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTENCi1kcWFkZDMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3DQotZHFhZGQzMzE0IGZtYSAgMSAgIDk5ICAtMSAgICAgIC0+ICA5OA0KLWRxYWRkMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkNCi1kcWFkZDMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwDQotDQotZHFhZGQzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDANCi1kcWFkZDMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KLWRxYWRkMzMyMyBmbWEgIDEgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyDQotZHFhZGQzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMNCi1kcWFkZDMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KLWRxYWRkMzMyNiBmbWEgIDEgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwDQotZHFhZGQzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDENCi1kcWFkZDMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KLWRxYWRkMzMyOSBmbWEgIDEgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyDQotZHFhZGQzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDENCi1kcWFkZDMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KLWRxYWRkMzMzMiBmbWEgIDEgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExDQotZHFhZGQzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcNCi1kcWFkZDMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KLWRxYWRkMzMzNSBmbWEgIDEgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5DQotZHFhZGQzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDANCi0NCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQNCi1kcWFkZDMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQotZHFhZGQzMzQxIGZtYSAgMSAgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcWFkZDMzNDIgZm1hICAxICAxRSszNCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQNCi1kcWFkZDMzNDMgZm1hICAxICAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQNCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQotZHFhZGQzMzQ0IGZtYSAgMSAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KLWRxYWRkMzM0NSBmbWEgIDEgIDFFKzMzICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFhZGQzMzQ2IGZtYSAgMSAgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDMzNDcgZm1hICAxICAxRSszNSAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcNCi1kcWFkZDMzNDkgZm1hICAxICAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxYWRkMzM1MCBmbWEgIDEgIDFFKzM0ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzMzUxIGZtYSAgMSAgMUUrMzUgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZHFhZGQzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1kcWFkZDMzNjEgIGZtYSAgMSAgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQNCi1kcWFkZDMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQNCi1kcWFkZDMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDMzNjQgIGZtYSAgMSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDBFKzYxMTENCi0tLSAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZw0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi1kcWFkZDMzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQotZHFhZGQzMzcxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZHFhZGQzMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KLWRxYWRkMzM3MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotZHFhZGQzMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KLWRxYWRkMzM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMNCi1kcWFkZDM0MDAgZm1hICAxICAgIDEgICA3N2UtMzIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkMzQwMiBmbWEgIDEgICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MDMgZm1hICAxICAgIDEgICA3N2UtMzUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDA0IGZtYSAgMSAgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQwNSBmbWEgIDEgICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MDYgZm1hICAxICAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNDEwIGZtYSAgMSAgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQotZHFhZGQzNDExIGZtYSAgMSAgIDEwICAgNzdlLTMzICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0zNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MTMgZm1hICAxICAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDE0IGZtYSAgMSAgIDEwICAgNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MTYgZm1hICAxICAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNDIwIGZtYSAgMSAgIDc3ZS0zMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDM0MjEgZm1hICAxICAgNzdlLTMzICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCi1kcWFkZDM0MjIgZm1hICAxICAgNzdlLTM0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDIzIGZtYSAgMSAgIDc3ZS0zNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQyNCBmbWEgIDEgICA3N2UtMzYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MjUgZm1hICAxICAgNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzQzMCBmbWEgIDEgICA3N2UtMzIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KLWRxYWRkMzQzMSBmbWEgIDEgICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MzIgZm1hICAxICAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDMzIGZtYSAgMSAgIDc3ZS0zNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzQzNCBmbWEgIDEgICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM0MzUgZm1hICAxICAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNDM2IGZtYSAgMSAgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1kcWFkZDM2NDQwIGZtYSAgMSAgICAxICAgLTc3ZS0zMiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMzMgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDQyIGZtYSAgMSAgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDQzIGZtYSAgMSAgICAxICAgLTc3ZS0zNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMzYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NDUgZm1hICAxICAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NDYgZm1hICAxICAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzY0NTAgZm1hICAxICAgMTAgICAtNzdlLTMyICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ1MSBmbWEgIDEgICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NTMgZm1hICAxICAgMTAgICAtNzdlLTM1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDU0IGZtYSAgMSAgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDU2IGZtYSAgMSAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM2NDYwIGZtYSAgMSAgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ2MSBmbWEgIDEgICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDYyIGZtYSAgMSAgIC03N2UtMzQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDYzIGZtYSAgMSAgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ2NCBmbWEgIDEgICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NjUgZm1hICAxICAgLTc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzY0NzAgZm1hICAxICAgLTc3ZS0zMiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ3MSBmbWEgIDEgICAtNzdlLTMzICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ3MiBmbWEgIDEgICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0NzMgZm1hICAxICAgLTc3ZS0zNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDc0IGZtYSAgMSAgIC03N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDc1IGZtYSAgMSAgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDc2IGZtYSAgMSAgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZHFhZGQzNjQ4MCBmbWEgIDEgICAtMSAgICA3N2UtMzIgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NDgyIGZtYSAgMSAgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ4MyBmbWEgIDEgICAtMSAgICA3N2UtMzUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0ODUgZm1hICAxICAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDg2IGZtYSAgMSAgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNjQ5MCBmbWEgIDEgIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjQ5MSBmbWEgIDEgIC0xMCAgICA3N2UtMzMgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTM0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ5MyBmbWEgIDEgIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NDk0IGZtYSAgMSAgLTEwICAgIDc3ZS0zNiAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMzcgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY0OTYgZm1hICAxICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM2NTAwIGZtYSAgMSAgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY1MDEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KLWRxYWRkMzY1MDIgZm1hICAxICAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NTAzIGZtYSAgMSAgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1MDQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjUwNSBmbWEgIDEgICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcWFkZDM2NTEwIGZtYSAgMSAgICA3N2UtMzIgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCi1kcWFkZDM2NTExIGZtYSAgMSAgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQotZHFhZGQzNjUxMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTEzIGZtYSAgMSAgICA3N2UtMzUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1MTQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTE1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjUxNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcWFkZDM2NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQotZHFhZGQzNjU0MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTQyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU0NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTQ1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU0NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTQ4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NDkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KLWRxYWRkMzY1NTcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU1OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTU5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcWFkZDM2NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQotZHFhZGQzNjU2MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTYyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU2NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTY1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU2NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTcxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NzIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTc0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzY1NzUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KLWRxYWRkMzY1NzcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNjU3OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM2NTc5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZHFhZGQzNzU0MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcWFkZDM3NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQotZHFhZGQzNzU1MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTUyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU1NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTU1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KLWRxYWRkMzc1NjcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzU2OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTY5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotDQotZHFhZGQzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQotZHFhZGQzNzcwMiBmbWEgIDEgIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWRxYWRkMzc3MDMgZm1hICAxICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCi1kcWFkZDM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQotDQotZHFhZGQzNzcxMCBmbWEgIDEgIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZHFhZGQzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjANCi1kcWFkZDM3NzEyIGZtYSAgMSAgMEUrMyAgMDAuICAgIC0+IDANCi1kcWFkZDM3NzEzIGZtYSAgMSAgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1kcWFkZDM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCi1kcWFkZDM3NzE1IGZtYSAgMSAgMEUrMyAgMDAuRSszIC0+IDBFKzMNCi1kcWFkZDM3NzE2IGZtYSAgMSAgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1kcWFkZDM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCi1kcWFkZDM3NzE4IGZtYSAgMSAgMEUrMyAgLTAwLjAgICAtPiAwLjANCi1kcWFkZDM3NzE5IGZtYSAgMSAgMEUrMyAgLTAwLiAgICAtPiAwDQotZHFhZGQzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KLQ0KLWRxYWRkMzc3MjAgZm1hICAxICAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KLWRxYWRkMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wDQotZHFhZGQzNzcyMiBmbWEgIDEgIDAwLiAgICAwRSszICAtPiAwDQotZHFhZGQzNzcyMyBmbWEgIDEgIDAwLkUrMSAwRSszICAtPiAwRSsxDQotZHFhZGQzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZHFhZGQzNzcyNSBmbWEgIDEgIDAwLkUrMyAwRSszICAtPiAwRSszDQotZHFhZGQzNzcyNiBmbWEgIDEgIDAwLkUrNCAwRSszICAtPiAwRSszDQotZHFhZGQzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszDQotZHFhZGQzNzcyOCBmbWEgIDEgIC0wMC4wMCAwRSszICAtPiAwLjAwDQotZHFhZGQzNzcyOSBmbWEgIDEgIC0wMC4wICAwRSszICAtPiAwLjANCi1kcWFkZDM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1kcWFkZDM3NzMyIGZtYSAgMSAgIDAgICAgIDAgICAgIC0+ICAwDQotZHFhZGQzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMA0KLWRxYWRkMzc3MzQgZm1hICAxICAtMCAgICAgMCAgICAgLT4gIDANCi1kcWFkZDM3NzM1IGZtYSAgMSAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCi0NCi1kcWFkZDM3NzM2IGZtYSAgMSAgIDEgICAgLTEgICAgIC0+ICAwDQotZHFhZGQzNzczNyBmbWEgIDEgIC0xICAgIC0xICAgICAtPiAtMg0KLWRxYWRkMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDINCi1kcWFkZDM3NzM5IGZtYSAgMSAgLTEgICAgIDEgICAgIC0+ICAwDQotDQotZHFhZGQzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQ0KLWRxYWRkMzc3NDIgZm1hICAxICAtMCAgICAtMSAgICAgLT4gLTENCi1kcWFkZDM3NzQzIGZtYSAgMSAgIDAgICAgIDEgICAgIC0+ICAxDQotZHFhZGQzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQ0KLWRxYWRkMzc3NDUgZm1hICAxICAtMSAgICAgMCAgICAgLT4gLTENCi1kcWFkZDM3NzQ2IGZtYSAgMSAgLTEgICAgLTAgICAgIC0+IC0xDQotZHFhZGQzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQ0KLWRxYWRkMzc3NDggZm1hICAxICAgMSAgICAtMCAgICAgLT4gIDENCi0NCi1kcWFkZDM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjANCi1kcWFkZDM3NzUyIGZtYSAgMSAgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1kcWFkZDM3NzUzIGZtYSAgMSAgIDAuMCAgIDEgICAgIC0+ICAxLjANCi1kcWFkZDM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjANCi1kcWFkZDM3NzU1IGZtYSAgMSAgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1kcWFkZDM3NzU2IGZtYSAgMSAgLTEuMCAgLTAgICAgIC0+IC0xLjANCi1kcWFkZDM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjANCi1kcWFkZDM3NzU4IGZtYSAgMSAgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1kcWFkZDM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzYyIGZtYSAgMSAgLTAgICAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzYzIGZtYSAgMSAgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDM3NzY1IGZtYSAgMSAgLTEgICAgIDAuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzY2IGZtYSAgMSAgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjANCi1kcWFkZDM3NzY4IGZtYSAgMSAgIDEgICAgLTAuMCAgIC0+ICAxLjANCi0NCi1kcWFkZDM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzcyIGZtYSAgMSAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCi1kcWFkZDM3NzczIGZtYSAgMSAgIDAuMCAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1kcWFkZDM3Nzc1IGZtYSAgMSAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCi1kcWFkZDM3Nzc2IGZtYSAgMSAgLTEuMCAgLTAuMCAgIC0+IC0xLjANCi1kcWFkZDM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1kcWFkZDM3Nzc4IGZtYSAgMSAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCi0NCi0tLSBTcGVjaWFscw0KLWRxYWRkMzc3ODAgZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4MSBmbWEgIDEgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODMgZm1hICAxICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4NCBmbWEgIDEgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODYgZm1hICAxICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc4NyBmbWEgIDEgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3ODkgZm1hICAxICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc5MCBmbWEgIDEgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxYWRkMzc3OTIgZm1hICAxICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFhZGQzNzc5MyBmbWEgIDEgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcWFkZDM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFhZGQzNzgwMCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgwMiBmbWEgIDEgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODAzIGZtYSAgMSAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgwNSBmbWEgIDEgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODA2IGZtYSAgMSAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgwOCBmbWEgIDEgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODA5IGZtYSAgMSAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODExIGZtYSAgMSAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MTIgZm1hICAxICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFhZGQzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcWFkZDM3ODE0IGZtYSAgMSAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxYWRkMzc4MTUgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFhZGQzNzgyMSBmbWEgIDEgICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFhZGQzNzgyMiBmbWEgIDEgICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFhZGQzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFhZGQzNzgyNCBmbWEgIDEgICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFhZGQzNzgyNSBmbWEgIDEgICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFhZGQzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFhZGQzNzgyNyBmbWEgIDEgICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFhZGQzNzgyOCBmbWEgIDEgICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFhZGQzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzMCBmbWEgIDEgIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzMSBmbWEgIDEgIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzMyBmbWEgIDEgIC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzNCBmbWEgIDEgICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzNiBmbWEgIDEgICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFhZGQzNzgzNyBmbWEgIDEgICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFhZGQzNzg0MSBmbWEgIDEgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDIgZm1hICAxICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg0NCBmbWEgIDEgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDUgZm1hICAxICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg0NyBmbWEgIDEgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NDggZm1hICAxICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1MCBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTEgZm1hICAxICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1MyBmbWEgIDEgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTQgZm1hICAxICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1NiBmbWEgIDEgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzc4NTcgZm1hICAxICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg1OSBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcWFkZDM3ODYxIGZtYSAgMSAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZHFhZGQzNzg2MiBmbWEgIDEgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRxYWRkMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kcWFkZDM3ODY0IGZtYSAgMSAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZHFhZGQzNzg2NSBmbWEgIDEgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRxYWRkMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kcWFkZDM3ODY3IGZtYSAgMSAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZHFhZGQzNzg2OCBmbWEgIDEgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRxYWRkMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZHFhZGQzNzg3MSBmbWEgIDEgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3MiBmbWEgIDEgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3NCBmbWEgIDEgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3NSBmbWEgIDEgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3NyBmbWEgIDEgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3OCBmbWEgIDEgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg4MCBmbWEgIDEgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg4MSBmbWEgIDEgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFhZGQzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kcWFkZDM3ODgzIGZtYSAgMSAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWFkZDM3ODg0IGZtYSAgMSAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRxYWRkMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQotZHFhZGQzNzU3NSBmbWEgIDEgICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxYWRkMzc1NzYgZm1hICAxICAtMUUtNjE0MyArMUUtNjE3NiAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwNCi0NCi0tLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UNCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kcWFkZDM3OTcyIGFwcGx5ICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWFkZDM3OTczIGZtYSAgMSAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk3NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5NzYgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5NzcgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDhFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5NzkgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODAgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDVFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODIgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDJFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzc5ODUgYXBwbHkgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcWFkZDM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk4OCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTlFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTkwIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk5MSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtN0UrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTZFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTkzIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk5NCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNEUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc5OTUgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTNFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzk5NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cw0KLXJvdW5kaW5nOiAgICAgZG93bg0KLWRxYWRkMzcxMTAwIGZtYSAgMSAgMWUrMiAtMWUtNjE0MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTEwMSBmbWEgIDEgIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtNjE0MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA0IGZtYSAgMSAgMWUtMSAtMWUtNjE0MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTEwNSBmbWEgIDEgIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtNjE0MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA3IGZtYSAgMSAgMWUtNCAtMWUtNjE0MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTEwOCBmbWEgIDEgIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWRxYWRkMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgICBjZWlsaW5nDQotZHFhZGQzNzExMTAgZm1hICAxICAtMWUrMiArMWUtNjE0MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExMyBmbWEgIDEgICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMTQgZm1hICAxICAtMWUtMSArMWUtNjE0MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExNiBmbWEgIDEgIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZHFhZGQzNzExMTcgZm1hICAxICAtMWUtNCArMWUtNjE0MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1kcWFkZDM3MTExOSBmbWEgIDEgIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KLXJvdW5kaW5nOiAgICAgaGFsZl9ldmVuDQotDQotZHFhZGQzNzEzMDAgZm1hICAxICAxRTM0ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzEwIGZtYSAgMSAgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxMSBmbWEgIDEgIDFFMzQgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTIgZm1hICAxICAxRTM0ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzEzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzE2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMxNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMTggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzE5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyMCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzIyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzI1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMjcgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzI4IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMyOSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzAgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzMxIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzMgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzM0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzYgZm1hICAxICAxRTM0ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzM3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTMzOCBmbWEgIDEgIDFFMzQgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzMzkgZm1hICAxICAxRTM0ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxYWRkMzcxMzQwIGZtYSAgMSAgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM0MSBmbWEgIDEgIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFhZGQzNzEzNDkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNTggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM1OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNjggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM2OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzNzcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM3OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM4NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzODkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM5MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzOTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM5MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzEzOTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTM5NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KLWRxYWRkMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQotZHFhZGQzNzE0MjcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcNCi1kcWFkZDM3MTQyOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRxYWRkMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05DQotZHFhZGQzNzE0MzAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwDQotZHFhZGQzNzE0MzEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExDQotZHFhZGQzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyDQotZHFhZGQzNzE0MzMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzDQotZHFhZGQzNzE0MzQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0DQotZHFhZGQzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1DQotZHFhZGQzNzE0MzYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2DQotZHFhZGQzNzE0MzcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3DQotZHFhZGQzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4DQotZHFhZGQzNzE0MzkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5DQotZHFhZGQzNzE0NDAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwDQotZHFhZGQzNzE0NDEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxDQotZHFhZGQzNzE0NDIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyDQotZHFhZGQzNzE0NDMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzDQotZHFhZGQzNzE0NDQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0DQotZHFhZGQzNzE0NDUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1DQotZHFhZGQzNzE0NDYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2DQotZHFhZGQzNzE0NDcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3DQotZHFhZGQzNzE0NDggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4DQotZHFhZGQzNzE0NDkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5DQotZHFhZGQzNzE0NTAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwDQotZHFhZGQzNzE0NTEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxDQotZHFhZGQzNzE0NTIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyDQotZHFhZGQzNzE0NTMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzDQotZHFhZGQzNzE0NTQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0DQotZHFhZGQzNzE0NTUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1DQotZHFhZGQzNzE0NTYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2DQotDQotLS0gc2FtZSwgcmV2ZXJzZWQgMA0KLWRxYWRkMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQ2MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDYyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQ2NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDY1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCi1kcWFkZDM3MTQ2NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03DQotZHFhZGQzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOA0KLWRxYWRkMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkNCi1kcWFkZDM3MTQ3MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWRxYWRkMzcxNDcxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExDQotZHFhZGQzNzE0NzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTINCi1kcWFkZDM3MTQ3MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWRxYWRkMzcxNDc0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0DQotZHFhZGQzNzE0NzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1kcWFkZDM3MTQ3NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWRxYWRkMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3DQotZHFhZGQzNzE0NzggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1kcWFkZDM3MTQ3OSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLWRxYWRkMzcxNDgwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwDQotZHFhZGQzNzE0ODEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjENCi1kcWFkZDM3MTQ4MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMg0KLWRxYWRkMzcxNDgzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzDQotZHFhZGQzNzE0ODQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQNCi1kcWFkZDM3MTQ4NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQ0KLWRxYWRkMzcxNDg2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2DQotZHFhZGQzNzE0ODcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcNCi1kcWFkZDM3MTQ4OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOA0KLWRxYWRkMzcxNDg5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5DQotZHFhZGQzNzE0OTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzANCi1kcWFkZDM3MTQ5MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQ0KLWRxYWRkMzcxNDkyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyDQotZHFhZGQzNzE0OTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMNCi1kcWFkZDM3MTQ5NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNA0KLWRxYWRkMzcxNDk1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1DQotZHFhZGQzNzE0OTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYNCi0NCi0tLSBzYW1lLCBFcyBvbiB0aGUgMA0KLWRxYWRkMzcxNTAwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTAxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTAyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTAzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTA5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTEwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTExIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTEyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTEzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTE5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTIwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTIxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTIyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTIzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTI5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTMwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTMxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTMyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLWRxYWRkMzcxNTMzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCi1kcWFkZDM3MTUzNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWRxYWRkMzcxNTM1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZHFhZGQzNzE1MzYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1kcWFkZDM3MTUzNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLQ0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE2MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTYwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE2MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNjEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNjEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNjE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE2MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTYyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE2MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNjMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNjMzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNjM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE2NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE2NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNjUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNjUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNjU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1kcWFkZDM3MTY2MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2NjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY2MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1kcWFkZDM3MTY3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQotZHFhZGQzNzE2NzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KLS0tIG92ZXJmbG93DQotZHFhZGQzNzE2NzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzE2NzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE2ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNjgxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTY4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE2ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE2OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KLWRxYWRkMzcxNjkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNjkzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNjk0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBjZWlsaW5nDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkMzcxNzAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTcwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE3MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNzAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkMzcxNzExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDM3MTcxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotLS0gb3ZlcmZsb3cNCi1kcWFkZDM3MTcxMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTcxNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoNCi1yb3VuZGluZzogICAgZmxvb3INCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZHFhZGQzNzE3MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNzIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1kcWFkZDM3MTcyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZHFhZGQzNzE3MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZHFhZGQzNzE3MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KLWRxYWRkMzcxNzMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCi0tLSBvdmVyZmxvdw0KLWRxYWRkMzcxNzMzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzcxNzM0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICAwNXVwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWRxYWRkMzcxNzQwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1kcWFkZDM3MTc0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZHFhZGQzNzE3NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWRxYWRkMzcxNzQzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWRxYWRkMzcxNzUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCi1kcWFkZDM3MTc1MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQotLS0gb3ZlcmZsb3cNCi1kcWFkZDM3MTc1MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3MTc1NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1kcWFkZDM3MTc2MSBmbWEgIDEgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MA0KLWRxYWRkMzcxNzYyIGZtYSAgMSAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQotZHFhZGQzNzE3NjMgZm1hICAxICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzANCi1kcWFkZDM3MTc2NCBmbWEgIDEgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNA0KLWRxYWRkMzcxNzY1IGZtYSAgMSAgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwDQotZHFhZGQzNzE3NjYgZm1hICAxICAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTANCi1kcWFkZDM3MTc2NyBmbWEgIDEgIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMA0KLWRxYWRkMzcxNzY4IGZtYSAgMSAgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszDQotDQotLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1kcWFkZDM3NTAwMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcNCi1kcWFkZDM3NTAwMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDAzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAwNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDA2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAwOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDA5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDEyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDE1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAxNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDE4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwMTkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTAyMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDIxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KLWRxYWRkMzc1MDMwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzkNCi1kcWFkZDM3NTAzMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjENCi1kcWFkZDM3NTAzMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyDQotZHFhZGQzNzUwMzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjMNCi1kcWFkZDM3NTAzNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQNCi1kcWFkZDM3NTAzNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1DQotZHFhZGQzNzUwMzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTYNCi1kcWFkZDM3NTAzNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NjcNCi1kcWFkZDM3NTAzOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4DQotZHFhZGQzNzUwMzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQ0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDQ3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNDggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA0OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2DQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxYWRkMzc1MDUwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNTEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA1MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDUzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNTQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA1NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDU2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNTcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA2MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDYxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNjIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA2MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDY0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNjUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA2NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDY3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KLXJvdW5kaW5nOiB1cA0KLWRxYWRkMzc1MDcwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDENCi1kcWFkZDM3NTA3MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDcyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA3NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDc1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA3NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDc4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwNzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDgxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDg0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWRxYWRkMzc1MDg3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZHFhZGQzNzUwODggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1kcWFkZDM3NTA4OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIERlc3RydWN0aXZlIHN1YnRyYWN0IChmcm9tIHJlbWFpbmRlciB0ZXN0cykNCi0NCi0tLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXINCi0NCi1kcWZtYTQwMDAgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzDQotZHFmbWE0MDAxICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyDQotZHFmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTENCi1kcWZtYTQwMDMgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQgICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0DQotZHFmbWE0MDA0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyDQotZHFmbWE0MDA1ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUyICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgNCi1kcWZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Nw0KLWRxZm1hNDAwNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMNCi1kcWZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQotZHFmbWE0MDA5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQNCi1kcWZtYTQwMTAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIgICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Mg0KLWRxZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OA0KLWRxZm1hNDAxMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMSAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4Nzc5DQotZHFmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTEwICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODg5MA0KLWRxZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxMyAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4Nw0KLWRxZm1hNDAxNSAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMwOCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5Mg0KLWRxZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MSAgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAzLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTENCi1kcWZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Nw0KLWRxZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NiAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICA0LjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Ng0KLWRxZm1hNDAxOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MSAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICA0LjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTkNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFhZGQzOTk5MCBmbWEgIDEgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxYWRkMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxRk1BLmRlY1Rlc3QgLS0gZGVjUXVhZCBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6CistLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UKKy0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpCistLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pCistLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpCistLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUKKy0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5CistLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4KKworLS0gU2FuaXR5IGNoZWNrcworZHFmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMgorZHFmbWEwMDAyIGZtYSAgMSAgIDEgICAyIC0+ICAgMworZHFmbWEwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNworZHFmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MAorZHFmbWEwMDA1IGZtYSAtMSAgIDEgICAxIC0+ICAgMAorZHFmbWEwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQorZHFmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQorZHFmbWEwMDA4IGZtYSAtOSAgIDkgICA5IC0+IC03MgorZHFmbWEwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMAorZHFmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQorZHFmbWEwMDEzIGZtYSAgMiAgLTIgICAzIC0+ICAtMQorZHFmbWEwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03MgorZHFmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMAorZHFmbWEwMDE2IGZtYSAgMSAgIDEgIC0yIC0+ICAtMQorZHFmbWEwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQorZHFmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3MgorCistLSBub24taW50ZWdlciBleGFjdHMKK2RxZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzIKK2RxZm1hMDEwMSAgZm1hICAgMC4zMDEgIDAuMzgwICAgIDMzNCAgLT4gIDMzNC4xMTQzODAKK2RxZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYKK2RxZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2MgorZHFmbWEwMTA0ICBmbWEgICAgIDkwMyAgMC43OTcgIDAuODg3ICAtPiAgNzIwLjU3OAorZHFmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMworZHFmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUKK2RxZm1hMDEwNyAgZm1hICAgICAgIDQgICAgNjA1ICAgIDY4OCAgLT4gIDMxMDgKK2RxZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1MworZHFmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQorZHFmbWEwMTEwICBmbWEgICAtNzIuMiAgICAgMzAgIC01MS4yICAtPiAgLTIyMTcuMgorZHFmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzCitkcWZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wCitkcWZtYTAxMTMgIGZtYSAgICAgIDQ3ICAgNi41OCAgIDEuNjIgIC0+ICAzMTAuODgKK2RxZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQKK2RxZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2CitkcWZtYTAxMTYgIGZtYSAgICAgMzM1ICAgIDg0NyAgICAgODMgIC0+ICAyODM4MjgKK2RxZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDIKK2RxZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgKK2RxZm1hMDExOSAgZm1hICAgMC43NDIgICAgMTkyICAgMzUuNiAgLT4gIDE3OC4wNjQKK2RxZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExCisKKy0tIGNhc2VzIHdoZXJlIHJlc3VsdCBpcyBkaWZmZXJlbnQgZnJvbSBzZXBhcmF0ZSBtdWx0aXBseSArIGFkZDsgZWFjaAorLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQKKy0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDQuNTAwMTE5MDAyMTAwMDAwMjA5NDY5NzI5Mzc1Njk4Nzc4RSszOAorZHFmbWEwMjAyICBmbWEgICAgICAgNjg1Mzc5ODU4NjEzNTU4NjQ0NTcuNTY5NCAgICAgIDY1NjU4NzU3NjI5NzIwODY2MDUuODU5NjkgICAgICAgMzU4OTI2MzQ0NDcyMzY3NTMuMTcyODEyICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzlFKzM4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTRFKzQxCitkcWZtYTAyMDggIGZtYSAgICAgICAgICA4OTI2MTgyMjM0NDcyNzYyODU3MS45ICAgICAgNjcxNzU5NTg0NTY1NDEzMTM4MzMzNi44OSAgICAgIDUwNjEwMzY0OTcyODg3OTYwNzYyNjYuMTEgIC0+ICA1Ljk5NjI0ODQ2OTU4NDU5NDM0Njg1ODg4MTYyMDE4NTUxM0UrNDEgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjg5OTI0Mjk2ODY3ODI1NjkyNDAyMTU5NDc3MDg3NDA3MEUrMzQKK2RxZm1hMDIxMCAgZm1hICAgICAgIDMyMDUwNjIzNzIzMjQ0ODY4NS40OTU5NzEgICAgICAgNTkyNTc1OTc3NjQwMTc5NjcuOTg0NDQ4ICAgICAgMzIwNTYxNTIzOTA3NzcxMTU4OTkxMi44NSAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcxRSszNCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDcuMDc4NTk2OTc4ODQyODA5NTM3OTI5Njk5OTU0ODYwMzA5RSszNworZHFmbWEwMjE1ICBmbWEgICAgICAgIDIyMDI0Nzg0MzI1OTExMjI2My4xNzk5NSAgICAgICAzMjEzOTIzNDAyODc5ODc5NzkwMDIuODAgICAgICAgIDQ3NTMzMjc5ODE5OTk3MTY3NjU1NDQwICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDhFKzM3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDNFKzM3CitkcWZtYTAyMjYgIGZtYSAgICAgICAyMzg4MDcyOTc5MDM2ODg4MDQxMi4xNDQ5ICAgICAgIDUxMjk0NzMzMzgyNzA2NDcxOS41NTQwNyAgICAgIDIxNzExNzQzODQxOTU5MDgyNDUwMi45NjMgIC0+ICAxLjIyNDk1NTY2NzU4MTQyNzU1OTc1NDEwNjg2MjM1MDc0NEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDRFKzQyCitkcWZtYTAyMjkgIGZtYSAgICAgICAgMjUzOTg5MjM1NzAxNjA5OTcwNi40MTI2ICAgICAgLTk5NjE0MjIzMjY2NzUwNDgxNzcxNzQzNSAgICAgICA1MzY4MjA4MjU5ODMxNTk0OTQyNS45MzcgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDNFKzQyIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS43MTMzODcwODU3NTk3MTE5NTQzMTkzOTE0MTI3ODg0NTRFKzM3CitkcWZtYTAyMzMgIGZtYSAgICAgICAgNDU0NjMzOTQ5MTM0MTYyNDQ2NC4wODA0ICAgICAgICAgICAgMzc2ODcxNzg2NDE2OTIwNTU4MSAgICAgICA4MzU3ODk4MDI3ODY5MDM5NTE4NC42MjAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1M0UrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0N0UrMzUKK2RxZm1hMDIzNSAgZm1hICAgICAgICA0MDkyNDIxMTk0MzM4MTYxMzEuNDIyNTMgICAgICA5OTI2MzM4MTUxNjY3NDE1MDEuNDc3MjQ5ICAgICAgICA3MDE3OTYzNjU0NDQxNjc1NjEyOTU0NiAgLT4gIDQuMDYyMjc1NjYzNDA1ODIzNzE2NDExNTc5MTE3NzcxNTQ4RSszNSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDYuMDAyNjA0MzI3NzMyNTY4NDkwNTYyMjQ5ODc1MzA2ODIzRSs0NworZHFmbWEwMjU4ICBmbWEgICAgICAgIDgxNzk0MTMzNjU5MzU0MTc0MjE1OTY4NCAgICAgICA3MzM4NjczMzk3NjkzMTA3MjkyNjY1OTggICAgICA3ODU2Mzg0NDY1MDk0MjQxOTMxMTgzMC44ICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjJFKzQ3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuMDI3MDIyNTE0MzgxNDUyMTk3NTEwMTAzMzk1MjgzODc0RSszOQorZHFmbWEwMjY0ICBmbWEgICAgICAgMzg3NjE3MzEwMTY5MTYxMjcwLjczNzUzMiAgICAgLTUyMjk0NDI3MDM0MTQ5NTYwNjEyMTYuNjIgICAgICA1NzY2NTY2NjgxNjY1Mjk2NzE1MDQ3My41ICAtPiAgLTIuMDI3MDIyNTE0MzgxNDUyMTk3NTEwMTAzMzk1MjgzODczRSszOSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MUUrMzcKK2RxZm1hMDI2NyAgZm1hICAgICAgLTg0NzY1NTg0NTcyMDU2NTI3NDcwMS4yMTAgICAgICAgIDkyNjg1MzE2NTY0MTE3NzM5LjgzOTg0ICAgICAgMjI3ODA5NTAwNDEzNzY0MjQ0MjkuNTY4NiAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjY5NTUxNTU2MjAxMTUyMDc0NjEyNTYwNzUwMjIzNzU1OUUrMzgKK2RxZm1hMDI2OCAgZm1hICAgICAgICAgIDIxNTkwMjkwMzY1MTI3Njg1LjM2NzUgICAgICAgNzg1MzEzOTIyNzU3NjU0MTM3OTQyNi44ICAgICAgIC0zMjc1ODU5NDM3MjM2MTgwLjc2MTU0NCAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU4RSszOCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC04LjQ0ODQyMjkzNTc4MzI4OTIxOTc0ODExNTAzODAxNDcxMEUrMzgKK2RxZm1hMDI2OSAgZm1hICAgICAgLTk3NDMyMDYzNjI3Mjg2MjY5Ny45NzE1ODYgICAgICA4NjcxMDkxMDM2NDE4NjAyNDc0NDAuNzU2ICAgICAgICAtOTc3NTE3MDc3NTkwMjQ1NDc2Mi45OCAgLT4gIC04LjQ0ODQyMjkzNTc4MzI4OTIxOTc0ODExNTAzODAxNDcwOUUrMzggSW5leGFjdCBSb3VuZGVkCisKKy0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQorZHFmbWEwMzAwICBmbWEgICA5ZSs2MTQ0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwMSAgZm1hICAgMWUrNjE0NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTAzMDIgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtMWUrNjE0NCAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFmbWEwMzAzICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTllKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKKy0tIHN1Ym5vcm1hbCBldGMuCitkcWZtYTAzMDUgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAwICAgICAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTAzMDYgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTAzMDcgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxZS02MTc2ICAgLT4gMUUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKK2RxZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxZm1hMDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFmbWEwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RxZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxZm1hMDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KK2RxZm1hMDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorZHFmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitkcWZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZworLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCitkcWZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzYxNDQgIC0+IDQKK2RxZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrNjE0NCAgLT4gNgorZHFmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSs2MTQ0ICAtPiA1CitkcWZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzYxNDQgIC0+IDEwCitkcWZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzYxNDQgIC0+IDIuNDAKK2RxZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrNjE0NCAgLT4gMC4wMAorZHFmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSs2MTQ0ICAtPiAtMi40MAorZHFmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSs2MTQ0ICAtPiAtMi40MAorZHFmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSs2MTQ0ICAtPiAwLjAwCitkcWZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzYxNDQgIC0+IDIuNDAKK2RxZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrNjE0NCAgLT4gMzYuMTM5CitkcWZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAKK2RxZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDAKK2RxZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMGUrNjE0NCAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFmbWEyMDE1IGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMAorZHFmbWEyMDE2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjAxOCBmbWEgIC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFmbWEyMDE5IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkcWZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwNTAwCitkcWZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAtMC4wMDUwMAorZHFmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCitkcWZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcWZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcWZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gLTAuMDA1MDAKK2RxZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwNTAwCitkcWZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzYxNDQgIC0+IDMuNjAKK2RxZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAyMQorZHFmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzYxNDQgIC0+IDAuNzIKK2RxZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSs2MTQ0ICAtPiAwLjAKK2RxZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSs2MTQ0ICAtPiA0MjgxMzU5NzEwNDEKKworZHFmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSs5CitkcWZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEwCitkcWZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzExCitkcWZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEyCitkcWZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEzCitkcWZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE0CitkcWZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcWZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZHFmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSs2MTQ0ICAtPiA4MQorZHFmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrNjE0NCAgLT4gODEwCitkcWZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMAorZHFmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMAorZHFmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwCitkcWZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMAorZHFmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMAorZHFmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwCitkcWZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMAorZHFmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMAorZHFmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwCitkcWZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMAorZHFmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMAorZHFmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwCitkcWZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RxZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrNjE0NCAgLT4gOQorZHFmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrNjE0NCAgLT4gOTAKK2RxZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSs2MTQ0ICAtPiA5MDAKK2RxZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMAorZHFmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAKK2RxZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAKK2RxZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMAorZHFmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAKK2RxZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAKK2RxZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMAorZHFmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAKK2RxZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAKK2RxZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMAorZHFmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0NiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ3IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0OCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0OSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUwIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE1MSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE1MiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUzIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFmbWEyMjYzIGZtYSAgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgIDBlKzYxNDQgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCitkcWZtYTIzMDEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzAyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzAzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA1IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA2IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzExIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzEyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE0IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE1IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE3IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKK2RxZm1hMjMxOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAorZHFmbWEyMzE5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZAorZHFmbWEyMzIwIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgIFJvdW5kZWQKK2RxZm1hMjMyMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCAgUm91bmRlZAorZHFmbWEyMzIyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZAorZHFmbWEyMzIzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNDAgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RxZm1hMjUwNCAgZm1hICAgMEUtNDI2MCAxMDAwRS00MjYwICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgQ2xhbXBlZAorZHFmbWEyNTA1ICBmbWEgICAxMDBFKzQyNjAgMEUrNDI2MCAgICAgMGUrNjE0NCAgLT4gMEUrNjExMSBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RxZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQzIGZtYSAgIDAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ2IGZtYSAgLTEgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorCitkcWZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTMgZm1hICAgMC4wICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTYgZm1hICAtMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCisKK2RxZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2MyBmbWEgICAwICAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NiBmbWEgIC0xICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKKworZHFmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzMgZm1hICAgMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzYgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzkgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTMwIGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzMSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzIgZm1hICAgMS4wICAtMC4wICAgIC0wZSs2MTQ0ICAtPiAtMC4wMAorZHFmbWEyNTMzIGZtYSAgIDEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzNCBmbWEgIC0xLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzUgZm1hICAtMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCitkcWZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTgyIGZtYSAgIEluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjU4NSBmbWEgICBJbmYgICAxICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU4OCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU5MSBmbWEgIC0wICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1OTQgZm1hICAgMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorCitkcWZtYTI2MDAgZm1hICAtSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MDMgZm1hICAtSW5mICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA2IGZtYSAgLUluZiAgIDEwMDAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA5IGZtYSAgLUluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MTIgZm1hICAgMCAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYxNSBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorCitkcWZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjIgZm1hICAgTmFOIC0xMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjUgZm1hICAgTmFOICAwICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjggZm1hICAgTmFOICBJbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzEgZm1hICAtMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzQgZm1hICAgMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzcgZm1hICAgSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCisKK2RxZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDIgZm1hICAgc05hTiAtMTAwMCAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDUgZm1hICAgc05hTiAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDggZm1hICAgc05hTiAgTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTEgZm1hICAtSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTQgZm1hICAtMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTcgZm1hICAgMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU45CitkcWZtYTI2NjIgZm1hICAgTmFOOCAgOTk5ICAgICAwZSs2MTQ0ICAtPiAgTmFOOAorZHFmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTjcxCitkcWZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSs2MTQ0ICAtPiAgTmFONgorZHFmbWEyNjY1IGZtYSAgLUluZiAgIE5hTjQgICAgMGUrNjE0NCAgLT4gIE5hTjQKK2RxZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzYxNDQgIC0+ICBOYU4zMworZHFmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrNjE0NCAgLT4gIE5hTjIKKworZHFmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3MyBmbWEgICBzTmFOOTcgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrNjE0NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSs2MTQ0ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3NiBmbWEgIC1JbmYgICAgc05hTjkyICAgIDBlKzYxNDQgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrNjE0NCAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSs2MTQ0ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3OSBmbWEgICBOYU4gICAgc05hTjg5ICAgIDBlKzYxNDQgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcWZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOOQorZHFmbWEyNjgyIGZtYSAgLU5hTjggIDk5OSAgICAgMGUrNjE0NCAgLT4gLU5hTjgKK2RxZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzYxNDQgIC0+IC1OYU43MQorZHFmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrNjE0NCAgLT4gLU5hTjYKK2RxZm1hMjY4NSBmbWEgIC1JbmYgIC1OYU40ICAgIDBlKzYxNDQgIC0+IC1OYU40CitkcWZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSs2MTQ0ICAtPiAtTmFOMzMKK2RxZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzYxNDQgIC0+IC1OYU4yCisKK2RxZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTMgZm1hICAtc05hTjk3ICBOYU4gICAgICAwZSs2MTQ0ICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzYxNDQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrNjE0NCAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTYgZm1hICAtSW5mICAgIC1zTmFOOTIgICAwZSs2MTQ0ICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzYxNDQgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrNjE0NCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTkgZm1hICAtTmFOICAgIC1zTmFOODkgICAwZSs2MTQ0ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzAyIGZtYSAgLU5hTiAgIDk5OSAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA1IGZtYSAgLUluZiAgLU5hTjAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorCitkcWZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTMgZm1hICAtc05hTjAwICBOYU4gICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTYgZm1hICAtSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTkgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RxZm1hMjc1MSBmbWEgICAxZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzUyIGZtYSAgIDFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTMgZm1hICAtMWUrNDI3NyAgMWUrMzMxMSAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc1NCBmbWEgIC0xZSs0Mjc3IC0xZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzU1IGZtYSAgIDFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NTYgZm1hICAgMWUtNDI3NyAtMWUtMzMxMSAgIDBlKzYxNDQgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc1NyBmbWEgIC0xZS00Mjc3ICAxZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzU4IGZtYSAgLTFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFmbWEyNzYwIGZtYSAgMWUtNjA2OSAxZS0xMDEgICAwZSs2MTQ0ICAtPiAxRS02MTcwIFN1Ym5vcm1hbAorZHFmbWEyNzYxIGZtYSAgMWUtNjA2OSAxZS0xMDIgICAwZSs2MTQ0ICAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFmbWEyNzYyIGZtYSAgMWUtNjA2OSAxZS0xMDMgICAwZSs2MTQ0ICAtPiAxRS02MTcyIFN1Ym5vcm1hbAorZHFmbWEyNzYzIGZtYSAgMWUtNjA2OSAxZS0xMDQgICAwZSs2MTQ0ICAtPiAxRS02MTczIFN1Ym5vcm1hbAorZHFmbWEyNzY0IGZtYSAgMWUtNjA2OSAxZS0xMDUgICAwZSs2MTQ0ICAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFmbWEyNzY1IGZtYSAgMWUtNjA2OSAxZS0xMDYgICAwZSs2MTQ0ICAtPiAxRS02MTc1IFN1Ym5vcm1hbAorZHFmbWEyNzY2IGZtYSAgMWUtNjA2OSAxZS0xMDcgICAwZSs2MTQ0ICAtPiAxRS02MTc2IFN1Ym5vcm1hbAorZHFmbWEyNzY3IGZtYSAgMWUtNjA2OSAxZS0xMDggICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc2OCBmbWEgIDFlLTYwNjkgMWUtMTA5ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NjkgZm1hICAxZS02MDY5IDFlLTExMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZHFmbWEyNzcwIGZtYSAgMWUrNDAgMWUrNjEwMSAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxZm1hMjc3MSBmbWEgIDFlKzQwIDFlKzYxMDIgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKK2RxZm1hMjc3MiBmbWEgIDFlKzQwIDFlKzYxMDMgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCitkcWZtYTI3NzMgZm1hICAxZSs0MCAxZSs2MTA0ICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxZm1hMjc3NCBmbWEgIDFlKzQwIDFlKzYxMDUgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NSBmbWEgIDFlKzQwIDFlKzYxMDYgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NiBmbWEgIDFlKzQwIDFlKzYxMDcgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NyBmbWEgIDFlKzQwIDFlKzYxMDggICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3OCBmbWEgIDFlKzQwIDFlKzYxMDkgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3OSBmbWEgIDFlKzQwIDFlKzYxMTAgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFmbWEyODAxIGZtYSAgIDEuMDAwMEUtNjE3MiAgMSAgICAgICAwZSs2MTQ0ICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCitkcWZtYTI4MDIgZm1hICAgMS4wMDBFLTYxNzIgICAxZS0xICAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgwMyBmbWEgICAxLjAwRS02MTcyICAgIDFlLTIgICAgMGUrNjE0NCAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFmbWEyODA0IGZtYSAgIDEuMEUtNjE3MiAgICAgMWUtMyAgICAwZSs2MTQ0ICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcWZtYTI4MDUgZm1hICAgMS4wRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWZtYTI4MDYgZm1hICAgMS4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDcgZm1hICAgMS41RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDggZm1hICAgMS43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDkgZm1hICAgMi4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTAgZm1hICAgMi41RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTEgZm1hICAgMi43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTIgZm1hICAgMS40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTMgZm1hICAgMS41MEUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTQgZm1hICAgMS41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTUgZm1hICAgMi40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTYgZm1hICAgMi41MEUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTcgZm1hICAgMi41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZm1hMjgxOCBmbWEgICAxRS02MTcyICAgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcWZtYTI4MTkgZm1hICAgM0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyMCBmbWEgICA1RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODIxIGZtYSAgIDdFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODIyIGZtYSAgIDlFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODIzIGZtYSAgIDkuOUUtNjE3MiAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWZtYTI4MjQgZm1hICAgMUUtNjE3MiAgICAgIC0xZS00ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFmbWEyODI1IGZtYSAgIDNFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI4MjYgZm1hICAtNUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyNyBmbWEgICA3RS02MTcyICAgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgyOCBmbWEgIC05RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgyOSBmbWEgICA5LjlFLTYxNzIgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgzMCBmbWEgICAzLjBFLTYxNzIgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcWZtYTI4MzEgZm1hICAgMS4wRS01OTc3ICAgICAxZS0yMDAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgzMiBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OSAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZm1hMjgzMyBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgzNCBmbWEgICAyLjBFLTU5NzcgICAgIDJlLTE5OCAgIDBlKzYxNDQgIC0+IDQuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgzNSBmbWEgICA0LjBFLTU5NzcgICAgIDRlLTE5OCAgIDBlKzYxNDQgIC0+IDEuNjBFLTYxNzQgICBTdWJub3JtYWwKK2RxZm1hMjgzNiBmbWEgIDEwLjBFLTU5NzcgICAgMTBlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgzNyBmbWEgIDMwLjBFLTU5NzcgICAgMzBlLTE5OCAgIDBlKzYxNDQgIC0+IDkuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgzOCBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NiAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NSBTdWJub3JtYWwKK2RxZm1hMjgzOSBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NSAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwKK2RxZm1hMjg0MCBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NCAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0MworCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RxZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzYxNDMgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcWZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxZm1hMjg3MyBmbWEgICAgICAtOS45OTlFKzYxNDMgMTAwICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZHFmbWEyODgxIGZtYSAgIDEuMjM0N0UtNjEzMyAxLjIzNDdFLTQwICAgIDBlKzYxNDQgIC0+ICAxLjUyNEUtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODgyIGZtYSAgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODgzIGZtYSAgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAgIDBlKzYxNDQgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODg0IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDAgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTczICBTdWJub3JtYWwKK2RxZm1hMjg4NSBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsCitkcWZtYTI4ODYgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODcgZm1hICAgMS4yRS02MTMzICAgMS4zRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNkUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODggZm1hICAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODkgZm1hICAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4OTAgZm1hICAgMS4zRS02MTM0ICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMEUtNjE3NiAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZHFmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTIgZm1hICAgMS4yMzQ1NkUtMzkgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5MyBmbWEgICAxLjIzNDVFLTQwICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5NiBmbWEgICAxLjIzNDU2RS00MSAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZHFmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzCitkcWZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSs2MTQ0ICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZHFmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGh1Z2VzdAorZHFmbWEyOTA5IGZtYSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2RxZm1hMjEwMDEgIGZtYSAgMTMwRS0yICAxMjBFLTIgICAwZSs2MTQ0ICAtPiAxLjU2MDAKK2RxZm1hMjEwMDIgIGZtYSAgMTMwRS0yICAxMkUtMSAgICAwZSs2MTQ0ICAtPiAxLjU2MAorZHFmbWEyMTAwMyAgZm1hICAxMzBFLTIgIDFFMCAgICAgIDBlKzYxNDQgIC0+IDEuMzAKK2RxZm1hMjEwMDQgIGZtYSAgMUUyICAgICAxRTQgICAgICAwZSs2MTQ0ICAtPiAxRSs2CisKKy0tIE51bGwgdGVzdHMKK2RxZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RxYWRkMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMgorZHFhZGQzMDAyIGZtYSAgMSAgMiAgICAgICAzICAgICAgIC0+ICA1CitkcWFkZDMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RxYWRkMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZHFhZGQzMDA1IGZtYSAgMSAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZHFhZGQzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkcWFkZDMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZHFhZGQzMDA4IGZtYSAgMSAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkcWFkZDMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RxYWRkMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMTIgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxOCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzMDIxIGZtYSAgMSAgMCAxIC0+IDEKK2RxYWRkMzAyMiBmbWEgIDEgIDEgMSAtPiAyCitkcWFkZDMwMjMgZm1hICAxICAyIDEgLT4gMworZHFhZGQzMDI0IGZtYSAgMSAgMyAxIC0+IDQKK2RxYWRkMzAyNSBmbWEgIDEgIDQgMSAtPiA1CitkcWFkZDMwMjYgZm1hICAxICA1IDEgLT4gNgorZHFhZGQzMDI3IGZtYSAgMSAgNiAxIC0+IDcKK2RxYWRkMzAyOCBmbWEgIDEgIDcgMSAtPiA4CitkcWFkZDMwMjkgZm1hICAxICA4IDEgLT4gOQorZHFhZGQzMDMwIGZtYSAgMSAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZHFhZGQzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkcWFkZDMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RxYWRkMzAzMyBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZHFhZGQzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RxYWRkMzAzNSBmbWEgIDEgICc3MCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAzOCBmbWEgIDEgICc3MDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkcWFkZDMwNDAgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0MSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0MiBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwNDQgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0NSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RxYWRkMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkcWFkZDMwNDcgZm1hICAxICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RxYWRkMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RxYWRkMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkcWFkZDMwNTAgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RxYWRkMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RxYWRkMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RxYWRkMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RxYWRkMzA1NCBmbWEgIDEgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkcWFkZDMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZHFhZGQzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkcWFkZDMwNTcgZm1hICAxICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkcWFkZDMwNjEgZm1hICAxICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkcWFkZDMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RxYWRkMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkcWFkZDMwNjQgZm1hICAxICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkcWFkZDMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZHFhZGQzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxCitkcWFkZDMwNzEgZm1hICAxICAxIDAuICAgIC0+IDEKK2RxYWRkMzA3MiBmbWEgIDEgIDEgIC4wICAgLT4gMS4wCitkcWFkZDMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMAorZHFhZGQzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwCitkcWFkZDMwNzUgZm1hICAxICAgMCAgMSAgIC0+IDEKK2RxYWRkMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQorZHFhZGQzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjAKK2RxYWRkMzA3OCBmbWEgIDEgIDAuMCAxICAgLT4gMS4wCitkcWFkZDMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkcWFkZDMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkcWFkZDMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZHFhZGQzMDgyIGZtYSAgMSAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZHFhZGQzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkcWFkZDMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZHFhZGQzMDg1IGZtYSAgMSAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZHFhZGQzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkcWFkZDMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMAorZHFhZGQzMDg4IGZtYSAgMSAgICAgICAgIDk5IDEgIC0+IDEwMAorZHFhZGQzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RxYWRkMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQzMDkxIGZtYSAgMSAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RxYWRkMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZHFhZGQzMDk0IGZtYSAgMSAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcWFkZDMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RxYWRkMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZHFhZGQzMDk3IGZtYSAgMSAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RxYWRkMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkcWFkZDMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkcWFkZDMxMDAgZm1hICAxICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFhZGQzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZHFhZGQzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkcWFkZDMxMDMgZm1hICAxICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RxYWRkMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RxYWRkMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkcWFkZDMxMDYgZm1hICAxICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RxYWRkMzEwNyBmbWEgIDEgICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkMzEwOCBmbWEgIDEgICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZAorZHFhZGQzMTA5IGZtYSAgMSAgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcWFkZDMxMTAgZm1hICAxICAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKK2RxYWRkMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZHFhZGQzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RxYWRkMzExNCBmbWEgIDEgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZHFhZGQzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RxYWRkMzExOSBmbWEgIDEgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkcWFkZDMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZHFhZGQzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RxYWRkMzEyMiBmbWEgIDEgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RxYWRkMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RxYWRkMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZHFhZGQzMTI1IGZtYSAgMSAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZHFhZGQzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkcWFkZDMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZHFhZGQzMTI4IGZtYSAgMSAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RxYWRkMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZHFhZGQzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZHFhZGQzMTMxIGZtYSAgMSAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RxYWRkMzEzMiBmbWEgIDEgIDAgICctNUUzMycgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQzMTMzIGZtYSAgMSAgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcWFkZDMxMzQgZm1hICAxICAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKK2RxYWRkMzEzNSBmbWEgIDEgIDAgICctNUUzNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICAgUm91bmRlZAorZHFhZGQzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RxYWRkMzEzNyBmbWEgIDEgICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzEzOCBmbWEgIDEgIC0xICAnMEUtMzknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzEzOSBmbWEgIDEgICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzE0MCBmbWEgIDEgICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzE0MSBmbWEgIDEgIDFFKzI5ICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcKK2RxYWRkMzE0MiBmbWEgIDEgIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcKK2RxYWRkMzE0NCBmbWEgIDEgIDAuMDAwMCAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RxYWRkMzE0NiBmbWEgIDEgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RxYWRkMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkcWFkZDMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQzMTQ5IGZtYSAgMSAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZHFhZGQzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RxYWRkMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkcWFkZDMxNTIgZm1hICAxICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTUgZm1hICAxICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZHFhZGQzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RxYWRkMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkcWFkZDMxNTggZm1hICAxICAnMycgICAgICctMycgICAgLT4gICcwJworZHFhZGQzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZHFhZGQzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RxYWRkMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZHFhZGQzMTYyIGZtYSAgMSAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDMxNjUgZm1hICAxICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkcWFkZDMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjggZm1hICAxICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMxNzAgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzMgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzYgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkcWFkZDMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc5IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQzMjAwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDMyMDEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMzIxNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQzMjIwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDMyMjEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMzIzNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDMyNDAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNDEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDMyNTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzI1MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1OCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjY3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwCitkcWFkZDMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxCitkcWFkZDMzMDMgZm1hICAxICAgIDEgICAxICAgICAgLT4gICAyCitkcWFkZDMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzCitkcWFkZDMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5CitkcWFkZDMzMDYgZm1hICAxICAgOTkgICAxICAgICAgLT4gMTAwCitkcWFkZDMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxCitkcWFkZDMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyCitkcWFkZDMzMDkgZm1hICAxICAgLTEgIC0xICAgICAgLT4gIC0yCitkcWFkZDMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xCitkcWFkZDMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwCitkcWFkZDMzMTIgZm1hICAxICAgMTIgIC0xICAgICAgLT4gIDExCitkcWFkZDMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3CitkcWFkZDMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4CitkcWFkZDMzMTUgZm1hICAxICAxMDAgIC0xICAgICAgLT4gIDk5CitkcWFkZDMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RxYWRkMzMyMSBmbWEgIDEgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkcWFkZDMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZHFhZGQzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RxYWRkMzMyNCBmbWEgIDEgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkcWFkZDMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RxYWRkMzMyNyBmbWEgIDEgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkcWFkZDMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZHFhZGQzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RxYWRkMzMzMCBmbWEgIDEgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkcWFkZDMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZHFhZGQzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RxYWRkMzMzMyBmbWEgIDEgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkcWFkZDMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZHFhZGQzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RxYWRkMzMzNiBmbWEgIDEgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZHFhZGQzMzQwIGZtYSAgMSAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZHFhZGQzMzQxIGZtYSAgMSAgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkMzM0MiBmbWEgIDEgIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFhZGQzMzQzIGZtYSAgMSAgMUUrMzUgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkcWFkZDMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkcWFkZDMzNDUgZm1hICAxICAxRSszMyAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFhZGQzMzQ2IGZtYSAgMSAgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM0NyBmbWEgIDEgIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMzNDggZm1hICAxICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkcWFkZDMzNDkgZm1hICAxICAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFhZGQzMzUwIGZtYSAgMSAgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM1MSBmbWEgIDEgIDFFKzM1ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RxYWRkMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFhZGQzMzYyICBmbWEgIDEgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQorLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkcWFkZDMzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFhZGQzMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RxYWRkMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MDEgZm1hICAxICAgIDEgICA3N2UtMzMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQwMiBmbWEgIDEgICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0zNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNSBmbWEgIDEgICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDEwIGZtYSAgMSAgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MTEgZm1hICAxICAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTIgZm1hICAxICAgMTAgICA3N2UtMzQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTMgZm1hICAxICAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTQgZm1hICAxICAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTUgZm1hICAxICAgMTAgICA3N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTYgZm1hICAxICAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzQyMCBmbWEgIDEgICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MjEgZm1hICAxICAgNzdlLTMzICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQyMiBmbWEgIDEgICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyMyBmbWEgIDEgICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNCBmbWEgIDEgICA3N2UtMzYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNSBmbWEgIDEgICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDMwIGZtYSAgMSAgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MzEgZm1hICAxICAgNzdlLTMzICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzIgZm1hICAxICAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzMgZm1hICAxICAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzQgZm1hICAxICAgNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzUgZm1hICAxICAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTMzICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDQyIGZtYSAgMSAgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTM2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NDUgZm1hICAxICAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzY0NTAgZm1hICAxICAgMTAgICAtNzdlLTMyICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTMgZm1hICAxICAgMTAgICAtNzdlLTM1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDU2IGZtYSAgMSAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ2MCBmbWEgIDEgICAtNzdlLTMyICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MSBmbWEgIDEgICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NjIgZm1hICAxICAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ2NCBmbWEgIDEgICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ2NSBmbWEgIDEgICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ3MCBmbWEgIDEgICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NzEgZm1hICAxICAgLTc3ZS0zMyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ3MiBmbWEgIDEgICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3NCBmbWEgIDEgICAtNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDc1IGZtYSAgMSAgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkcWFkZDM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMzMgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgyIGZtYSAgMSAgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMzYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0ODUgZm1hICAxICAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ5MCBmbWEgIDEgIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0zNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5MyBmbWEgIDEgIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTM3ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTYgZm1hICAxICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjUwMCBmbWEgIDEgICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY1MDEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMyBmbWEgIDEgICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTA1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzY1MTAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUxMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUxMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE0IGZtYSAgMSAgICA3N2UtMzYgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQzNjU0MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQzNjU0MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQzNjU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDM2NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM2NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTcwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTczIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM2NTc3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDM3NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU0MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDM3NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM3NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM3NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZHFhZGQzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkcWFkZDM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkcWFkZDM3NzAzIGZtYSAgMSAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkcWFkZDM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RxYWRkMzc3MTAgZm1hICAxICAwRSszICAwMC4wMCAgLT4gMC4wMAorZHFhZGQzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RxYWRkMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMAorZHFhZGQzNzcxMyBmbWEgIDEgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkcWFkZDM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RxYWRkMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMworZHFhZGQzNzcxNiBmbWEgIDEgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkcWFkZDM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RxYWRkMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMAorZHFhZGQzNzcxOSBmbWEgIDEgIDBFKzMgIC0wMC4gICAgLT4gMAorZHFhZGQzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkcWFkZDM3NzIwIGZtYSAgMSAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RxYWRkMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wCitkcWFkZDM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDAKK2RxYWRkMzc3MjMgZm1hICAxICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZHFhZGQzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyCitkcWFkZDM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RxYWRkMzc3MjYgZm1hICAxICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZHFhZGQzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszCitkcWFkZDM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RxYWRkMzc3MjkgZm1hICAxICAtMDAuMCAgMEUrMyAgLT4gMC4wCitkcWFkZDM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDAKKworZHFhZGQzNzczMiBmbWEgIDEgICAwICAgICAwICAgICAtPiAgMAorZHFhZGQzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMAorZHFhZGQzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMAorZHFhZGQzNzczNSBmbWEgIDEgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RxYWRkMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDAKK2RxYWRkMzc3MzcgZm1hICAxICAtMSAgICAtMSAgICAgLT4gLTIKK2RxYWRkMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDIKK2RxYWRkMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDAKKworZHFhZGQzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQorZHFhZGQzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQorZHFhZGQzNzc0MyBmbWEgIDEgICAwICAgICAxICAgICAtPiAgMQorZHFhZGQzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQorZHFhZGQzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQorZHFhZGQzNzc0NiBmbWEgIDEgIC0xICAgIC0wICAgICAtPiAtMQorZHFhZGQzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQorZHFhZGQzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQorCitkcWFkZDM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RxYWRkMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQzNzc1MyBmbWEgIDEgICAwLjAgICAxICAgICAtPiAgMS4wCitkcWFkZDM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMAorZHFhZGQzNzc1NiBmbWEgIDEgIC0xLjAgIC0wICAgICAtPiAtMS4wCitkcWFkZDM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkcWFkZDM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc2MyBmbWEgIDEgICAwICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMAorZHFhZGQzNzc2NiBmbWEgIDEgIC0xICAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkcWFkZDM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc3MyBmbWEgIDEgICAwLjAgICAxLjAgICAtPiAgMS4wCitkcWFkZDM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMAorZHFhZGQzNzc3NiBmbWEgIDEgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZHFhZGQzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODEgZm1hICAxICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWFkZDM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODQgZm1hICAxICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODcgZm1hICAxICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTAgZm1hICAxICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTMgZm1hICAxICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYWRkMzc4MDAgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWFkZDM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwMyBmbWEgIDEgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNiBmbWEgIDEgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwOSBmbWEgIDEgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODEyIGZtYSAgMSAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODE1IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcWFkZDM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxYWRkMzc4MjIgZm1hICAxICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFhZGQzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWFkZDM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjUgZm1hICAxICAgTmFOICAwICAgICAgLT4gIE5hTgorZHFhZGQzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWFkZDM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxYWRkMzc4MjggZm1hICAxICAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFhZGQzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzEgZm1hICAxICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzQgZm1hICAxICAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzcgZm1hICAxICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcWFkZDM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQyIGZtYSAgMSAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ1IGZtYSAgMSAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ4IGZtYSAgMSAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUxIGZtYSAgMSAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU0IGZtYSAgMSAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU3IGZtYSAgMSAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxYWRkMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RxYWRkMzc4NjIgZm1hICAxICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RxYWRkMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RxYWRkMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RxYWRkMzc4NjUgZm1hICAxICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RxYWRkMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RxYWRkMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RxYWRkMzc4NjggZm1hICAxICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RxYWRkMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcWFkZDM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzIgZm1hICAxICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzUgZm1hICAxICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzggZm1hICAxICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4ODEgZm1hICAxICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RxYWRkMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4NCBmbWEgIDEgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RxYWRkMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZHFhZGQzNzU3NSBmbWEgIDEgICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorZHFhZGQzNzU3NiBmbWEgIDEgIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQzNzk3MiBhcHBseSAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDM3OTczIGZtYSAgMSAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc1IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTExICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzYgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc4IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA3RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzkgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgxIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA0RSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODIgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNzk4NSBhcHBseSAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhZGQzNzk4NiBmbWEgIDEgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg5IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC05RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkwIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkyIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC02RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkzIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk1IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0zRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkcWFkZDM3MTEwMCBmbWEgIDEgIDFlKzIgLTFlLTYxNDMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwMSBmbWEgIDEgIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDMgZm1hICAxICAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNCBmbWEgIDEgIDFlLTEgLTFlLTYxNDMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNSBmbWEgIDEgIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDYgZm1hICAxICAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNyBmbWEgIDEgIDFlLTQgLTFlLTYxNDMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwOCBmbWEgIDEgIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDkgZm1hICAxICAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkcWFkZDM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTEgZm1hICAxICAtMWUrMSArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExMyBmbWEgIDEgICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTUgZm1hICAxICAtMWUtMiArMWUtNjE0MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNiBmbWEgIDEgIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTggZm1hICAxICAtMWUtNSArMWUtNjE0MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExOSBmbWEgIDEgIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RxYWRkMzcxMzAwIGZtYSAgMSAgMUUzNCAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEwIGZtYSAgMSAgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzExIGZtYSAgMSAgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE4IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIxIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI4IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMxIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM4IGZtYSAgMSAgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM5IGZtYSAgMSAgMUUzNCAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNzEzNDAgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNDEgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RxYWRkMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQzNzE0MjggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkMzcxNDMxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkMzcxNDM0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkMzcxNDM3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkMzcxNDQwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQzNzE0NDEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDM3MTQ0MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkMzcxNDQzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQzNzE0NDQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDM3MTQ0NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkMzcxNDQ2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQzNzE0NDcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDM3MTQ0OCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkMzcxNDQ5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQzNzE0NTAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDM3MTQ1MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkMzcxNDUyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQzNzE0NTMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDM3MTQ1NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkMzcxNDU1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQzNzE0NTYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RxYWRkMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKK2RxYWRkMzcxNDY4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCitkcWFkZDM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQzNzE0NzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCitkcWFkZDM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQzNzE0NzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2CitkcWFkZDM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQzNzE0NzggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5CitkcWFkZDM3MTQ4MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQzNzE0ODEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkMzcxNDgyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCitkcWFkZDM3MTQ4MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQzNzE0ODQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkMzcxNDg1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1CitkcWFkZDM3MTQ4NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQzNzE0ODcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkMzcxNDg4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4CitkcWFkZDM3MTQ4OSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQzNzE0OTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkMzcxNDkxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCitkcWFkZDM3MTQ5MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQzNzE0OTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkMzcxNDk0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0CitkcWFkZDM3MTQ5NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQzNzE0OTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RxYWRkMzcxNTAwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTAzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwOCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTEyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyOSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUzMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZHFhZGQzNzE1MzQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkMzcxNTM1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDM3MTUzNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQzNzE1MzcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDM3MTYwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQzNzE2MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQzNzE2MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorLS0gb3ZlcmZsb3cKK2RxYWRkMzcxNjEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzE2MTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTYzNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY1MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTY3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTY3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2NzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTY3NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjgwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTY5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTY5MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2OTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTY5NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTcxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTcxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE3MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTcxNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTczMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkcWFkZDM3MTczMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCistLSBvdmVyZmxvdworZHFhZGQzNzE3MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTczNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIDA1dXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzQwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTc1MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTc1MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE3NTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTc1NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkcWFkZDM3MTc2MSBmbWEgIDEgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZHFhZGQzNzE3NjIgZm1hICAxICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2RxYWRkMzcxNzYzIGZtYSAgMSAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitkcWFkZDM3MTc2NCBmbWEgIDEgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZHFhZGQzNzE3NjUgZm1hICAxICAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTAKK2RxYWRkMzcxNzY2IGZtYSAgMSAgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCitkcWFkZDM3MTc2NyBmbWEgIDEgIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMAorZHFhZGQzNzE3NjggZm1hICAxICAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDM3NTAwMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcKK2RxYWRkMzc1MDAyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDExIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDIwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAyMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitkcWFkZDM3NTAzMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5CitkcWFkZDM3NTAzMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEKK2RxYWRkMzc1MDMyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIKK2RxYWRkMzc1MDMzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzCitkcWFkZDM3NTAzNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQKK2RxYWRkMzc1MDM1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUKK2RxYWRkMzc1MDM2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2CitkcWFkZDM3NTAzNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NjcKK2RxYWRkMzc1MDM4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgKK2RxYWRkMzc1MDM5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkMzc1MDUwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDUzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDYxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2RxYWRkMzc1MDcwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEKK2RxYWRkMzc1MDcxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIERlc3RydWN0aXZlIHN1YnRyYWN0IChmcm9tIHJlbWFpbmRlciB0ZXN0cykKKworLS0gKysrIHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvZmYtYnktb25lIHJlbWFpbmRlciB2cyByZW1haW5kZXJOZWFyCisKK2RxZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMKK2RxZm1hNDAwMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMiAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4zNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMgorZHFmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEKK2RxZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQKK2RxZm1hNDAwNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMwOCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5MgorZHFmbWE0MDA1ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUyICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgKK2RxZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzUzCitkcWZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMDkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NAorZHFmbWE0MDEwICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyICAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIKK2RxZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OAorZHFmbWE0MDEyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIxICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkKK2RxZm1hNDAxMyAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMCAgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg4OTAKK2RxZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxMyAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4NworZHFmbWE0MDE1ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcWZtYTQwMTYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTEgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxCitkcWZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2CitkcWZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDEgICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5CisKKy0tIE51bGwgdGVzdHMKK2RxYWRkMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFJbnZlcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0CmluZGV4IDNhMWUyOWUuLjUyMmNmYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0CkBAIC0xLDI0NSArMSwyNDUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxSW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUIGZvciBkZWNRdWFkcyAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCi1kcWludjAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFpbnYwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLWRxaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDENCi1kcWludjAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwDQotZHFpbnYwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotZHFpbnYwMDcgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFpbnYwMDggaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFpbnYwMTAgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFpbnYwMTEgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwDQotZHFpbnYwMTMgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFpbnYwMTQgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotZHFpbnY2MDAgaW52ZXJ0IDAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwDQotZHFpbnY2MDEgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwDQotZHFpbnY2MDIgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwDQotZHFpbnY2MDMgaW52ZXJ0IDAxMTAxMTExMTExMTExMTEwMTExMTEwMTExMTExMTExMTEgLT4gICAxMDAxMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAwDQotZHFpbnY2MDQgaW52ZXJ0IDAxMTEwMTExMTExMTExMTAxMTExMTExMDExMTExMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwDQotZHFpbnY2MDUgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMDAwDQotZHFpbnY2MDYgaW52ZXJ0IDAxMTExMTAxMTExMTEwMTExMTExMTExMTEwMTExMTExMTEgLT4gICAxMDAwMDAxMDAwMDAwMTAwMDAwMDAwMDAwMTAwMDAwMDAwDQotZHFpbnY2MDcgaW52ZXJ0IDAxMTExMTEwMTExMTAxMTExMTExMTExMTExMDExMTExMTEgLT4gICAxMDAwMDAwMTAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDAwDQotZHFpbnY2MDggaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTAxMTExMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwDQotZHFpbnY2MDkgaW52ZXJ0IDAxMTExMTExMTAwMTExMTExMTExMTExMTExMTEwMTExMTEgLT4gICAxMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwDQotZHFpbnY2MTAgaW52ZXJ0IDAxMTExMTExMTAwMTExMTExMTExMTExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwDQotZHFpbnY2MTEgaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTExMTAxMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwDQotZHFpbnY2MTIgaW52ZXJ0IDAxMTExMTEwMTExMTAxMTExMTExMTExMTExMTExMTEwMTEgLT4gICAxMDAwMDAwMTAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwDQotZHFpbnY2MTMgaW52ZXJ0IDAxMTExMTAxMTExMTEwMTExMTExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAxMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFpbnY2MTQgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTExMTExMTExMTAgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFpbnY2MTUgaW52ZXJ0IDAxMTEwMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFpbnY2MTYgaW52ZXJ0IDAxMTAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTAgLT4gICAxMDAxMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxDQotZHFpbnY2MTcgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMDEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDEwDQotZHFpbnY2MTggaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEwMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwDQotZHFpbnY2MTkgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTAxMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAxMDAwDQotZHFpbnY2MjAgaW52ZXJ0IDAxMTAxMTExMTExMTExMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDEwMDAwDQotZHFpbnY2MjEgaW52ZXJ0IDAxMTEwMTExMTExMTExMTExMTExMTAxMTExMTEwMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMTAwMDAwDQotZHFpbnY2MjIgaW52ZXJ0IDAxMTExMDExMTExMTExMTExMTExMTEwMTExMTAxMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMDAwMDAwDQotZHFpbnY2MjMgaW52ZXJ0IDAxMTExMTAxMTExMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwDQotZHFpbnY2MjQgaW52ZXJ0IDAxMTExMTEwMTExMTExMTExMTExMTExMTAwMTExMTExMTEgLT4gICAxMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwDQotZHFpbnY2MjUgaW52ZXJ0IDAxMTExMTExMDExMTExMTExMTExMTExMTAwMTExMTExMTEgLT4gICAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwDQotZHFpbnY2MjYgaW52ZXJ0IDAxMTExMTExMTAxMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwDQotZHFpbnY2MjcgaW52ZXJ0IDAxMTExMTExMTEwMTExMTExMTExMTEwMTExMTAxMTExMTEgLT4gICAxMDAwMDAwMDAwMTAwMDAwMDAwMDAwMTAwMDAxMDAwMDAwDQotZHFpbnY2MjggaW52ZXJ0IDAxMTExMTExMTExMDExMTExMTExMTAxMTExMTEwMTExMTEgLT4gICAxMDAwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMTAwMDAwDQotZHFpbnY2MjkgaW52ZXJ0IDAxMTExMTExMTExMTAxMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDEwMDAwDQotZHFpbnY2MzAgaW52ZXJ0IDAxMTExMTExMTExMTEwMTExMTEwMTExMTExMTExMTAxMTEgLT4gICAxMDAwMDAwMDAwMDAwMTAwMDAwMTAwMDAwMDAwMDAxMDAwDQotZHFpbnY2MzEgaW52ZXJ0IDAxMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEwMTEgLT4gICAxMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwMTAwDQotZHFpbnY2MzIgaW52ZXJ0IDAxMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwMDEwDQotZHFpbnY2MzMgaW52ZXJ0IDAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxDQotDQotZHFpbnYwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMA0KLWRxaW52MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDANCi1kcWludjAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwDQotZHFpbnYwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMA0KLWRxaW52MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDANCi1kcWludjAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwDQotZHFpbnYwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMA0KLWRxaW52MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDANCi1kcWludjAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwDQotZHFpbnYwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLWRxaW52MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDANCi1kcWludjAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwDQotZHFpbnYwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMA0KLWRxaW52MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDANCi0NCi1kcWludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMA0KLWRxaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDAwDQotZHFpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDANCi1kcWludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAwMA0KLWRxaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMDAwDQotZHFpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDANCi1kcWludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDEwMA0KLWRxaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDEwDQotZHFpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDENCi1kcWludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMA0KLWRxaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwDQotZHFpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDENCi1kcWludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMA0KLWRxaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMTAwDQotZHFpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDANCi1kcWludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMA0KLWRxaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDEwDQotZHFpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDENCi1kcWludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMA0KLWRxaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwDQotDQotZHFpbnYwODAgaW52ZXJ0IDEwMDAwMDAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTAwMDAwMDAwDQotZHFpbnYwODEgaW52ZXJ0IDAxMDAwMDAxMDExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDEwMDAwMDAwDQotZHFpbnYwODIgaW52ZXJ0IDAwMTAwMDAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAxMDAwMDAwDQotZHFpbnYwODMgaW52ZXJ0IDAwMDEwMDAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMTAwMDAwDQotZHFpbnYwODQgaW52ZXJ0IDAwMDAxMDAxMTExMDExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDEwMDAwDQotZHFpbnYwODUgaW52ZXJ0IDAwMDAwMTAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMDAwDQotZHFpbnYwODYgaW52ZXJ0IDAwMDAwMDExMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTAwDQotZHFpbnYwODcgaW52ZXJ0IDAwMDAwMTAxMTExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAwMDEwDQotZHFpbnYwODggaW52ZXJ0IDAwMDAxMDAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAwMDAxDQotZHFpbnYwODkgaW52ZXJ0IDAwMDEwMDAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwDQotZHFpbnYwOTAgaW52ZXJ0IDAwMTAwMDAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDEwMDAwMDEwDQotZHFpbnYwOTEgaW52ZXJ0IDAxMDAwMDAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDAxMDAwMDAxDQotZHFpbnYwOTIgaW52ZXJ0IDEwMDAwMDAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMDAwMTAwMDEwDQotZHFpbnYwOTMgaW52ZXJ0IDAxMDAwMDAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDAwMDEwMTAwDQotZHFpbnYwOTQgaW52ZXJ0IDAwMTAwMDAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDAwDQotZHFpbnYwOTUgaW52ZXJ0IDAwMDEwMDAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMDEwMTAwDQotZHFpbnYwOTYgaW52ZXJ0IDAwMDAxMDAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMTAwMDEwDQotZHFpbnYwOTcgaW52ZXJ0IDAwMDAwMTAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAxMDAwMDAxDQotZHFpbnYwOTggaW52ZXJ0IDAwMDAwMDExMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEwDQotZHFpbnYwOTkgaW52ZXJ0IDAwMDAwMTAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAwMTAwDQotDQotLS0gYW5kIG1vcmUgdGhvcm91Z2ggTVNEL0xTRCB0ZXN0cyBbOCBhbmQgOSBtZ2h0IGJlIGVuY29kZWQgZGlmZmVyZW50bHkuLi5dDQotZHFpbnYxNTEgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi1kcWludjE1MiBpbnZlcnQgMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExMQ0KLWRxaW52MTUzIGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAwDQotZHFpbnYxNTQgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAgICAxMTExMTExMTExMTExMTENCi1kcWludjE1NSBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMSAtPiAgMTAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMA0KLWRxaW52MTU2IGludmVydCAxMDExMTExMTExMTExMTExMTEwMTAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAxMDExMTExMTExMTExMTExDQotZHFpbnYxNTcgaW52ZXJ0IDExMDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDANCi1kcWludjE1OCBpbnZlcnQgMTExMDExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMSAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMA0KLQ0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KLWRxaW52MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWRxaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRA0KLWRxaW52MjUwIGludmVydCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI1MiBpbnZlcnQgIDQwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjUzIGludmVydCAgNTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI1NSBpbnZlcnQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjU2IGludmVydCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRC0xDQotZHFpbnYyNzAgaW52ZXJ0ICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI3MSBpbnZlcnQgIDAzMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjcyIGludmVydCAgMDQwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNzMgaW52ZXJ0ICAwNTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI3NCBpbnZlcnQgIDE2MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjc1IGludmVydCAgMTcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyNzYgaW52ZXJ0ICAxODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI3NyBpbnZlcnQgIDE5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZHFpbnYyODAgaW52ZXJ0ICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4MSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjgyIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyODMgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA1IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDYgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52Mjg1IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyODYgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4NyBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotZHFpbnYyODggaW52ZXJ0ICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI4OSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMzAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjkwIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA0MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyOTEgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDUwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI5MiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwNjAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MjkzIGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDE3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjI5NSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNpZ25zDQotZHFpbnYyOTYgaW52ZXJ0IC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMDAwMTExMDAwMTExMDAwMTExMTEwMTExMTExDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KLWRxaW52MzQxIGludmVydCAgOS45OTk5OTk5OUUrMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNDIgaW52ZXJ0ICAxRS0yOTk4ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OTggIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzQ0IGludmVydCAgMUUtMjA3OCAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNDUgaW52ZXJ0ICAtMUUtMjA3OCAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTk4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzQ3IGludmVydCAgLTFFLTI5OTggICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1kcWludjM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnYzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotZHFpbnY3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcWludjg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxaW52ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxSW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUIGZvciBkZWNRdWFkcyAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RxaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2RxaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAKK2RxaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkcWludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwCitkcWludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKK2RxaW52NjAwIGludmVydCAwMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMAorZHFpbnY2MDEgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwCitkcWludjYwMiBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMDExMTExMTExMTExMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDEwMDAwMDAwMDAwMDAKK2RxaW52NjAzIGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTExIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMAorZHFpbnY2MDQgaW52ZXJ0IDAxMTEwMTExMTExMTExMTAxMTExMTExMDExMTExMTExMTEgLT4gICAxMDAwMTAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDAwCitkcWludjYwNSBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMDExMTExMTExMSAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDEwMDAwMDAwMDAKK2RxaW52NjA2IGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMDExMTExMTExIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDAwMAorZHFpbnY2MDcgaW52ZXJ0IDAxMTExMTEwMTExMTAxMTExMTExMTExMTExMDExMTExMTEgLT4gICAxMDAwMDAwMTAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMDAwCitkcWludjYwOCBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAKK2RxaW52NjA5IGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMAorZHFpbnY2MTAgaW52ZXJ0IDAxMTExMTExMTAwMTExMTExMTExMTExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAxMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwCitkcWludjYxMSBpbnZlcnQgMDExMTExMTEwMTEwMTExMTExMTExMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMTAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAKK2RxaW52NjEyIGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMAorZHFpbnY2MTMgaW52ZXJ0IDAxMTExMTAxMTExMTEwMTExMTExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAxMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcWludjYxNCBpbnZlcnQgMDExMTEwMTExMTExMTEwMTExMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMTAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxaW52NjE1IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFpbnY2MTYgaW52ZXJ0IDAxMTAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTAgLT4gICAxMDAxMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxCitkcWludjYxNyBpbnZlcnQgMDEwMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMTAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTAKK2RxaW52NjE4IGludmVydCAwMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMDExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMAorZHFpbnY2MTkgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTAxMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAxMDAwCitkcWludjYyMCBpbnZlcnQgMDExMDExMTExMTExMTExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMTAwMDAKK2RxaW52NjIxIGludmVydCAwMTExMDExMTExMTExMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDEwMDAwMAorZHFpbnY2MjIgaW52ZXJ0IDAxMTExMDExMTExMTExMTExMTExMTEwMTExMTAxMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAxMDAwMDAwCitkcWludjYyMyBpbnZlcnQgMDExMTExMDExMTExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDAKK2RxaW52NjI0IGludmVydCAwMTExMTExMDExMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMAorZHFpbnY2MjUgaW52ZXJ0IDAxMTExMTExMDExMTExMTExMTExMTExMTAwMTExMTExMTEgLT4gICAxMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxMTAwMDAwMDAwCitkcWludjYyNiBpbnZlcnQgMDExMTExMTExMDExMTExMTExMTExMTEwMTEwMTExMTExMSAtPiAgIDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMTAwMDAwMDAKK2RxaW52NjI3IGludmVydCAwMTExMTExMTExMDExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMAorZHFpbnY2MjggaW52ZXJ0IDAxMTExMTExMTExMDExMTExMTExMTAxMTExMTEwMTExMTEgLT4gICAxMDAwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMTAwMDAwCitkcWludjYyOSBpbnZlcnQgMDExMTExMTExMTExMDExMTExMTEwMTExMTExMTEwMTExMSAtPiAgIDEwMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAwMTAwMDAKK2RxaW52NjMwIGludmVydCAwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMTAwMAorZHFpbnY2MzEgaW52ZXJ0IDAxMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEwMTEgLT4gICAxMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwMTAwCitkcWludjYzMiBpbnZlcnQgMDExMTExMTExMTExMTExMDEwMTExMTExMTExMTExMTEwMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMDAwMDAwMDAwMTAKK2RxaW52NjMzIGludmVydCAwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQorCitkcWludjAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCitkcWludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwCitkcWludjAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwCitkcWludjAyNSBpbnZlcnQgICAxMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwCitkcWludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwCitkcWludjAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwCitkcWludjAyOCBpbnZlcnQgICAgICAxMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwCitkcWludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwCitkcWludjAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwCitkcWludjAzMiBpbnZlcnQgICAgICAgICAxICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcWludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwCitkcWludjAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwCitkcWludjAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwCitkcWludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCisKK2RxaW52MDQwIGludmVydCAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwCitkcWludjA0MSBpbnZlcnQgMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAwMAorZHFpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDAKK2RxaW52MDQzIGludmVydCAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDAwCitkcWludjA0NCBpbnZlcnQgMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDAwMAorZHFpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDAKK2RxaW52MDQ2IGludmVydCAxMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMTAwCitkcWludjA0NyBpbnZlcnQgMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMAorZHFpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDEKK2RxaW52MDQ5IGludmVydCAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMTAwCitkcWludjA1MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMAorZHFpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEKK2RxaW52MDUyIGludmVydCAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMTAwMDEwCitkcWludjA1MyBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMAorZHFpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMDAKK2RxaW52MDU1IGludmVydCAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDEwMTAwCitkcWludjA1NiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMAorZHFpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEKK2RxaW52MDU4IGludmVydCAxMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDEwCitkcWludjA1OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMAorCitkcWludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMDAwMDAwMDAKK2RxaW52MDgxIGludmVydCAwMTAwMDAwMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAxMDAwMDAwMAorZHFpbnYwODIgaW52ZXJ0IDAwMTAwMDAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAxMDAwMDAwCitkcWludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAxMDAwMDAKK2RxaW52MDg0IGludmVydCAwMDAwMTAwMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAxMDAwMAorZHFpbnYwODUgaW52ZXJ0IDAwMDAwMTAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMDAwCitkcWludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMDAKK2RxaW52MDg3IGludmVydCAwMDAwMDEwMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDAxMAorZHFpbnYwODggaW52ZXJ0IDAwMDAxMDAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAwMDAxCitkcWludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDAKK2RxaW52MDkwIGludmVydCAwMDEwMDAwMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAxMDAwMDAxMAorZHFpbnYwOTEgaW52ZXJ0IDAxMDAwMDAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMDAxMDAwMDAxCitkcWludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTEwMDAxMDAwMTAKK2RxaW52MDkzIGludmVydCAwMTAwMDAwMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMDAxMDEwMAorZHFpbnYwOTQgaW52ZXJ0IDAwMTAwMDAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMDAwMDAxMDAwCitkcWludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTEwMDAwMTAxMDAKK2RxaW52MDk2IGludmVydCAwMDAwMTAwMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDEwMDAxMAorZHFpbnYwOTcgaW52ZXJ0IDAwMDAwMTAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMDAxMDAwMDAxCitkcWludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMTAwMDAwMTAKK2RxaW52MDk5IGludmVydCAwMDAwMDEwMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMDEwMAorCistLSBhbmQgbW9yZSB0aG9yb3VnaCBNU0QvTFNEIHRlc3RzIFs4IGFuZCA5IG1naHQgYmUgZW5jb2RlZCBkaWZmZXJlbnRseS4uLl0KK2RxaW52MTUxIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCitkcWludjE1MiBpbnZlcnQgMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExMQorZHFpbnYxNTMgaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAKK2RxaW52MTU0IGludmVydCAxMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExCitkcWludjE1NSBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMSAtPiAgMTAxMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMAorZHFpbnYxNTYgaW52ZXJ0IDEwMTExMTExMTExMTExMTExMTAxMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDEwMTExMTExMTExMTExMTEKK2RxaW52MTU3IGludmVydCAxMTAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwCitkcWludjE1OCBpbnZlcnQgMTExMDExMTExMTExMTExMTExMDAxMTExMTExMTExMTExMSAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxaW52MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkcWludjI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcWludjI1MCBpbnZlcnQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjUyIGludmVydCAgNDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1MyBpbnZlcnQgIDUwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjU1IGludmVydCAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1NiBpbnZlcnQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2RxaW52MjcwIGludmVydCAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3MSBpbnZlcnQgIDAzMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjczIGludmVydCAgMDUwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NCBpbnZlcnQgIDE2MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjc2IGludmVydCAgMTgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NyBpbnZlcnQgIDE5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RxaW52MjgwIGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4MSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODIgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjgzIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwNSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDYgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg2IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NyBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxaW52Mjg4IGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4OSBpbnZlcnQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMzAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTAgaW52ZXJ0ICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDQwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjkxIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA1MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5MiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwNjAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTMgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjk0IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5NSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2RxaW52Mjk2IGludmVydCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMDAwMTExMDAwMTExMDAwMTExMTEwMTExMTExCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RxaW52MzQxIGludmVydCAgOS45OTk5OTk5OUUrMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0MiBpbnZlcnQgIDFFLTI5OTggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS0yOTk4ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ0IGludmVydCAgMUUtMjA3OCAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0NSBpbnZlcnQgIC0xRS0yMDc4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ3IGludmVydCAgLTFFLTI5OTggICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSsyOTk4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RxaW52MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZHFpbnY3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWludjgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxaW52ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdAppbmRleCBhMTgzMTNkLi40NDlmM2RjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFMb2dCLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0CkBAIC0xLDE2MCArMSwxNjAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTG9nQi5kZWNUZXN0IC0tIGludGVncmFsIDc1NHIgYWRqdXN0ZWQgZXhwb25lbnQsIGZvciBkZWNRdWFkcyAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gYmFzaWNzDQotZHFsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjAwMSBsb2diICAxRS02MTc2ICAgICAgICAgICAtPiAtNjE3Ng0KLWRxbG9nYjAwMiBsb2diICAxRS02MTQzICAgICAgICAgICAtPiAtNjE0Mw0KLWRxbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMw0KLWRxbG9nYjAwNCBsb2diICAwLjAzICAgICAgICAgICAgICAtPiAtMg0KLWRxbG9nYjAwNSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAwNyBsb2diICAyLjUgICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAwOCBsb2diICAyLjUwICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAwOSBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAxMCBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQ0KLWRxbG9nYjAxMSBsb2diICA3MCAgICAgICAgICAgICAgICAtPiAgMQ0KLWRxbG9nYjAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMg0KLWRxbG9nYjAxMyBsb2diICAyNTAgICAgICAgICAgICAgICAtPiAgMg0KLWRxbG9nYjAxNCBsb2diICA5RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NA0KLWRxbG9nYjAxNSBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzDQotZHFsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjAyMiBsb2diIC0xRS02MTc2ICAgICAgICAgICAtPiAtNjE3Ng0KLWRxbG9nYjAyMyBsb2diIC05RS02MTQzICAgICAgICAgICAtPiAtNjE0Mw0KLWRxbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMw0KLWRxbG9nYjAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAyNiBsb2diIC0yICAgICAgICAgICAgICAgICAtPiAgMA0KLWRxbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQ0KLWRxbG9nYjAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQ0KLWRxbG9nYjAyOSBsb2diIC0xMDAgICAgICAgICAgICAgICAtPiAgMg0KLWRxbG9nYjAzMCBsb2diIC05RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NA0KLWRxbG9nYjAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSB6ZXJvcw0KLWRxbG9nYjExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kcWxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kcWxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotZHFsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1kcWxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcWxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOA0KLWRxbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4DQotZHFsb2diMTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgNCi1kcWxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDYxNDQNCi1kcWxvZ2IxMzIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtNjE0Mw0KLWRxbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC02MTQzDQotZHFsb2diMTM0IGxvZ2IgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gLTYxNzYNCi0NCi1kcWxvZ2IxMzUgbG9nYiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtNjE3Ng0KLWRxbG9nYjEzNiBsb2diICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC02MTQzDQotZHFsb2diMTM3IGxvZ2IgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTYxNDMNCi1kcWxvZ2IxNjE0IGxvZ2IgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDYxNDQNCi0NCi0tLSBvbmVzDQotZHFsb2diMDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDANCi1kcWxvZ2IwMDYyIGxvZ2IgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMA0KLWRxbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotDQotLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTANCi1kcWxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwDQotZHFsb2diMTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQ0KLWRxbG9nYjExMDIgbG9nYiAxMDAgICAgICAgICAgIC0+IDINCi1kcWxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzDQotZHFsb2diMTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNA0KLWRxbG9nYjExMDUgbG9nYiAxMDAwMDAgICAgICAgIC0+IDUNCi1kcWxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2DQotZHFsb2diMTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNw0KLWRxbG9nYjExMDggbG9nYiAxMDAwMDAwMDAgICAgIC0+IDgNCi1kcWxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5DQotZHFsb2diMTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTANCi1kcWxvZ2IxMTExIGxvZ2IgMTAwMDAwMDAwMDAwICAtPiAxMQ0KLWRxbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyDQotZHFsb2diMTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExDQotZHFsb2diMTExNCBsb2diIDAuMDAwMDAwMDAwMSAtPiAtMTANCi1kcWxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkNCi1kcWxvZ2IxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOA0KLWRxbG9nYjExMTcgbG9nYiAwLjAwMDAwMDEgLT4gLTcNCi1kcWxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYNCi1kcWxvZ2IxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQ0KLWRxbG9nYjExMjAgbG9nYiAwLjAwMDEgLT4gLTQNCi1kcWxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMNCi1kcWxvZ2IxMTIyIGxvZ2IgMC4wMSAtPiAtMg0KLWRxbG9nYjExMjMgbG9nYiAwLjEgLT4gLTENCi1kcWxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQ0KLWRxbG9nYjExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMA0KLWRxbG9nYjExMjcgbG9nYiAxRS0yOTkgLT4gLTI5OQ0KLWRxbG9nYjExMjYgbG9nYiAxRS02MTQzIC0+IC02MTQzDQotDQotLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQ0KLWRxbG9nYjE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMg0KLWRxbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQ0KLWRxbG9nYjE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMA0KLWRxbG9nYjE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQ0KLWRxbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMg0KLWRxbG9nYjE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMA0KLWRxbG9nYjE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQ0KLWRxbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMg0KLWRxbG9nYjE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMw0KLWRxbG9nYjE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQ0KLWRxbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMg0KLWRxbG9nYjE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMw0KLWRxbG9nYjE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNA0KLWRxbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMg0KLWRxbG9nYjE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMw0KLWRxbG9nYjE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNA0KLWRxbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQ0KLWRxbG9nYjE0MTcgbG9nYiAxMEUyICAgICAtPiAgMw0KLWRxbG9nYjE0MTggbG9nYiAxMDBFMiAgICAtPiAgNA0KLWRxbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQ0KLWRxbG9nYjE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNg0KLQ0KLS0tIHNwZWNpYWwgdmFsdWVzDQotZHFsb2diODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KLWRxbG9nYjgyMSAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KLWRxbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFODQotZHFsb2diODIzICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbG9nYjgyNSAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbG9nYjgyNiAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2DQotZHFsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQNCi1kcWxvZ2I4MjggIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjENCi0NCi0tLSBOdWxsIHRlc3QNCi1kcWxvZ2I5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY1F1YWRzICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBiYXNpY3MKK2RxbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjAwMSBsb2diICAxRS02MTc2ICAgICAgICAgICAtPiAtNjE3NgorZHFsb2diMDAyIGxvZ2IgIDFFLTYxNDMgICAgICAgICAgIC0+IC02MTQzCitkcWxvZ2IwMDMgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2RxbG9nYjAwNCBsb2diICAwLjAzICAgICAgICAgICAgICAtPiAtMgorZHFsb2diMDA1IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMDYgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwNyBsb2diICAyLjUgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDA4IGxvZ2IgIDIuNTAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMDkgbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAxMCBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQorZHFsb2diMDExIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMTIgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RxbG9nYjAxMyBsb2diICAyNTAgICAgICAgICAgICAgICAtPiAgMgorZHFsb2diMDE0IGxvZ2IgIDlFKzYxNDQgICAgICAgICAgIC0+ICA2MTQ0CitkcWxvZ2IwMTUgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIG5lZ2F0aXZlcyBhcHBlYXIgdG8gYmUgdHJlYXRlZCBhcyBwb3NpdGl2ZXMKK2RxbG9nYjAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjAyMiBsb2diIC0xRS02MTc2ICAgICAgICAgICAtPiAtNjE3NgorZHFsb2diMDIzIGxvZ2IgLTlFLTYxNDMgICAgICAgICAgIC0+IC02MTQzCitkcWxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2RxbG9nYjAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDEKK2RxbG9nYjAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQorZHFsb2diMDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyCitkcWxvZ2IwMzAgbG9nYiAtOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQKK2RxbG9nYjAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gemVyb3MKK2RxbG9nYjExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExMiBsb2diICAgICAgICAgLTAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExNSBsb2diICAgICAwLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjExOCBsb2diICAgICAtMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxbG9nYjEyMSBsb2diICAgMjY4MjY4MjY4ICAgICAgICAtPiA4CitkcWxvZ2IxMjIgbG9nYiAgLTI2ODI2ODI2OCAgICAgICAgLT4gOAorZHFsb2diMTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgKK2RxbG9nYjEyNCBsb2diICAtMTM0MTM0MTM0ICAgICAgICAtPiA4CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWxvZ2IxMzEgbG9nYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgNjE0NAorZHFsb2diMTMyIGxvZ2IgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC02MTQzCitkcWxvZ2IxMzQgbG9nYiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAtNjE3NgorCitkcWxvZ2IxMzUgbG9nYiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtNjE3NgorZHFsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTYxNDMKK2RxbG9nYjEzNyBsb2diICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC02MTQzCitkcWxvZ2IxNjE0IGxvZ2IgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDYxNDQKKworLS0gb25lcworZHFsb2diMDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2RxbG9nYjAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwCitkcWxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorZHFsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMAorZHFsb2diMTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQorZHFsb2diMTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMgorZHFsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMworZHFsb2diMTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNAorZHFsb2diMTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQorZHFsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNgorZHFsb2diMTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNworZHFsb2diMTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOAorZHFsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQorZHFsb2diMTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTAKK2RxbG9nYjExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExCitkcWxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMgorZHFsb2diMTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExCitkcWxvZ2IxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMAorZHFsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05CitkcWxvZ2IxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOAorZHFsb2diMTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNworZHFsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02CitkcWxvZ2IxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQorZHFsb2diMTEyMCBsb2diIDAuMDAwMSAtPiAtNAorZHFsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zCitkcWxvZ2IxMTIyIGxvZ2IgMC4wMSAtPiAtMgorZHFsb2diMTEyMyBsb2diIDAuMSAtPiAtMQorZHFsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkKK2RxbG9nYjExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMAorZHFsb2diMTEyNyBsb2diIDFFLTI5OSAtPiAtMjk5CitkcWxvZ2IxMTI2IGxvZ2IgMUUtNjE0MyAtPiAtNjE0MworCistLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCitkcWxvZ2IxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKK2RxbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQorZHFsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCitkcWxvZ2IxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKK2RxbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMgorZHFsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCitkcWxvZ2IxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKK2RxbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMgorZHFsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCitkcWxvZ2IxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKK2RxbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMgorZHFsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCitkcWxvZ2IxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKK2RxbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMgorZHFsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCitkcWxvZ2IxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKK2RxbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQorZHFsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCitkcWxvZ2IxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKK2RxbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQorZHFsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2CisKKy0tIHNwZWNpYWwgdmFsdWVzCitkcWxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5CitkcWxvZ2I4MjEgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCitkcWxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcWxvZ2I4MjYgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorZHFsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2RxbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBOdWxsIHRlc3QKK2RxbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdAppbmRleCBkYzZhMWFiLi4xNjJkNGJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdApAQCAtMSwzMjIgKzEsMzIyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU1heC5kZWNUZXN0IC0tIGRlY1F1YWQgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kcW1heDAwMSBtYXggIC0yICAtMiAgLT4gLTINCi1kcW1heDAwMiBtYXggIC0yICAtMSAgLT4gLTENCi1kcW1heDAwMyBtYXggIC0yICAgMCAgLT4gIDANCi1kcW1heDAwNCBtYXggIC0yICAgMSAgLT4gIDENCi1kcW1heDAwNSBtYXggIC0yICAgMiAgLT4gIDINCi1kcW1heDAwNiBtYXggIC0xICAtMiAgLT4gLTENCi1kcW1heDAwNyBtYXggIC0xICAtMSAgLT4gLTENCi1kcW1heDAwOCBtYXggIC0xICAgMCAgLT4gIDANCi1kcW1heDAwOSBtYXggIC0xICAgMSAgLT4gIDENCi1kcW1heDAxMCBtYXggIC0xICAgMiAgLT4gIDINCi1kcW1heDAxMSBtYXggICAwICAtMiAgLT4gIDANCi1kcW1heDAxMiBtYXggICAwICAtMSAgLT4gIDANCi1kcW1heDAxMyBtYXggICAwICAgMCAgLT4gIDANCi1kcW1heDAxNCBtYXggICAwICAgMSAgLT4gIDENCi1kcW1heDAxNSBtYXggICAwICAgMiAgLT4gIDINCi1kcW1heDAxNiBtYXggICAxICAtMiAgLT4gIDENCi1kcW1heDAxNyBtYXggICAxICAtMSAgLT4gIDENCi1kcW1heDAxOCBtYXggICAxICAgMCAgLT4gIDENCi1kcW1heDAxOSBtYXggICAxICAgMSAgLT4gIDENCi1kcW1heDAyMCBtYXggICAxICAgMiAgLT4gIDINCi1kcW1heDAyMSBtYXggICAyICAtMiAgLT4gIDINCi1kcW1heDAyMiBtYXggICAyICAtMSAgLT4gIDINCi1kcW1heDAyMyBtYXggICAyICAgMCAgLT4gIDINCi1kcW1heDAyNSBtYXggICAyICAgMSAgLT4gIDINCi1kcW1heDAyNiBtYXggICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRxbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMA0KLWRxbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMA0KLWRxbWF4MDMyIG1heCAgIDAgICAgLTAuMCAtPiAgMA0KLWRxbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMA0KLWRxbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3Nlbg0KLWRxbWF4MDM1IG1heCAgLTAgICAgLTAgICAtPiAtMA0KLWRxbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wDQotZHFtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjANCi1kcW1heDAzOCBtYXggICAwLjAgICAwICAgLT4gIDANCi1kcW1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMA0KLWRxbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wDQotZHFtYXgwNDEgbWF4ICAgMC4wICAgMC4wIC0+ICAwLjANCi1kcW1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDANCi1kcW1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMA0KLWRxbWF4MDQ0IG1heCAgLTAuMCAgLTAuMCAtPiAtMC4wDQotZHFtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjANCi0NCi1kcW1heDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzENCi1kcW1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzINCi1kcW1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzENCi1kcW1heDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzINCi1kcW1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzENCi1kcW1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzINCi1kcW1heDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzINCi1kcW1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzENCi0NCi1kcW1heDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzENCi1kcW1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzINCi1kcW1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzINCi1kcW1heDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzINCi1kcW1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzENCi1kcW1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzINCi1kcW1heDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzENCi1kcW1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzENCi0NCi0tLSBTcGVjaWFscw0KLWRxbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCi1kcW1heDA5MiBtYXggIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZHFtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCi1kcW1heDA5NSBtYXggIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZHFtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDA5OCBtYXggLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDEwMSBtYXggLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1heDEwNCBtYXggIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFtYXgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwDQotZHFtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQ0KLWRxbWF4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTANCi1kcW1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwDQotZHFtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQ0KLWRxbWF4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDANCi1kcW1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRxbWF4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwDQotZHFtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTENCi1kcW1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMA0KLWRxbWF4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDANCi1kcW1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxDQotZHFtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRxbWF4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotZHFtYXgxNDEgbWF4ICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkNCi1kcW1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQotZHFtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQ0KLWRxbWF4MTQ0IG1heCAgTmFOIC0wICAgICAgLT4gLTANCi1kcW1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwDQotZHFtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQ0KLWRxbWF4MTQ3IG1heCAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1kcW1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxbWF4MTUwIG1heCAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotZHFtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLWRxbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTENCi1kcW1heDE1MyBtYXggLTAgICAgTmFOICAgIC0+IC0wDQotZHFtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMA0KLWRxbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDENCi1kcW1heDE1NiBtYXggIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotZHFtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1heDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxbWF4MTgxIG1heCAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5DQotZHFtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjENCi1kcW1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KLWRxbWF4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMw0KLWRxbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNA0KLQ0KLWRxbWF4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KLWRxbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05DQotZHFtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5DQotDQotZHFtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTkzIG1heCAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTk2IG1heCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWF4MTk5IG1heCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KLWRxbWF4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMA0KLWRxbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KLWRxbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwDQotZHFtYXgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDANCi1kcW1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KLWRxbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQotZHFtYXgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTENCi1kcW1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KLWRxbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQ0KLWRxbWF4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KLWRxbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQotZHFtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCi1kcW1heDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQ0KLWRxbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxDQotZHFtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDENCi1kcW1heDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQ0KLWRxbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxDQotZHFtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDENCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotZHFtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJw0KLWRxbWF4MjgxIG1heCAnLTEwJyAnMycgIC0+ICAnMycNCi1kcW1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnDQotZHFtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJw0KLWRxbWF4Mjg0IG1heCAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQotZHFtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCi1kcW1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjENCi1kcW1heDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxDQotZHFtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQotZHFtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQotZHFtYXg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMA0KLWRxbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCi1kcW1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwDQotZHFtYXg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wDQotZHFtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQotZHFtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KLWRxbWF4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMA0KLWRxbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDANCi1kcW1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwDQotZHFtYXg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wDQotZHFtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMA0KLWRxbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQotZHFtYXg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KLWRxbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQ0KLWRxbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KLWRxbWF4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTENCi1kcW1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kcW1heDQzMSBtYXggIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQ0KLWRxbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KLWRxbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDENCi1kcW1heDQzNCBtYXggIDAuMSAgICAxLjAgICAgIC0+ICAxLjANCi1kcW1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCi1kcW1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwDQotZHFtYXg0MzcgbWF4ICAwICAgICAgMC4xMCAgICAtPiAgMC4xMA0KLWRxbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDANCi1kcW1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjANCi1kcW1heDQ0MCBtYXggLTAuMCAgICAwLjAgICAgIC0+ICAwLjANCi1kcW1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQotZHFtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wDQotZHFtYXg0NDMgbWF4IC0wLjAgICAgMCAgICAgICAtPiAgMA0KLWRxbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDANCi1kcW1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1kcW1heDQ0NiBtYXggLTAuMTAwIC0wICAgICAgIC0+IC0wDQotZHFtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDANCi1kcW1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQotZHFtYXg0NDkgbWF4IC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQotZHFtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wDQotZHFtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQ0KLWRxbWF4NDUzIG1heCAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KLS0tIGxhcmdpZXMNCi1kcW1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQotZHFtYXg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KLWRxbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCi1kcW1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQotZHFtYXg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KLWRxbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCi1kcW1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQotZHFtYXg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KLQ0KLS0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KLWRxbWF4NDcxIG1heCAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEuMA0KLWRxbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMA0KLWRxbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjANCi1kcW1heDQ3NCBtYXggICAgICAwLjEgICAgICAxMC4wICAtPiAxMC4wDQotZHFtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwDQotZHFtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwDQotZHFtYXg0NzcgbWF4ICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAwMA0KLWRxbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDANCi1kcW1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMA0KLWRxbWF4NDgwIG1heCAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMDAwDQotZHFtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwDQotZHFtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwDQotZHFtYXg0ODMgbWF4ICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAwMA0KLWRxbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDANCi0NCi0tLSBzdWJub3JtYWxzDQotZHFtYXg1MTAgbWF4ICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0Mw0KLWRxbWF4NTExIG1heCAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsDQotZHFtYXg1MTIgbWF4ICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wRS02MTQ0ICBTdWJub3JtYWwNCi1kcW1heDUxMyBtYXggIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbA0KLWRxbWF4NTE0IG1heCAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsDQotZHFtYXg1MTUgbWF4ICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45OUUtNjE0NCBTdWJub3JtYWwNCi1kcW1heDUxNiBtYXggIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbA0KLWRxbWF4NTE3IG1heCAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsDQotZHFtYXg1MTggbWF4ICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW1heDUxOSBtYXggIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbA0KLWRxbWF4NTIwIG1heCAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsDQotDQotZHFtYXg1MzAgbWF4IC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTMxIG1heCAtMC4xRS02MTQzICAgICAgICAwICAtPiAgIDANCi1kcW1heDUzMiBtYXggLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzMgbWF4IC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTM0IG1heCAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1heDUzNSBtYXggLTAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzYgbWF4IC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTM3IG1heCAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1heDUzOCBtYXggLTAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtYXg1MzkgbWF4IC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMA0KLWRxbWF4NTQwIG1heCAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDANCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW1heDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNYXguZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtYXgwMDEgbWF4ICAtMiAgLTIgIC0+IC0yCitkcW1heDAwMiBtYXggIC0yICAtMSAgLT4gLTEKK2RxbWF4MDAzIG1heCAgLTIgICAwICAtPiAgMAorZHFtYXgwMDQgbWF4ICAtMiAgIDEgIC0+ICAxCitkcW1heDAwNSBtYXggIC0yICAgMiAgLT4gIDIKK2RxbWF4MDA2IG1heCAgLTEgIC0yICAtPiAtMQorZHFtYXgwMDcgbWF4ICAtMSAgLTEgIC0+IC0xCitkcW1heDAwOCBtYXggIC0xICAgMCAgLT4gIDAKK2RxbWF4MDA5IG1heCAgLTEgICAxICAtPiAgMQorZHFtYXgwMTAgbWF4ICAtMSAgIDIgIC0+ICAyCitkcW1heDAxMSBtYXggICAwICAtMiAgLT4gIDAKK2RxbWF4MDEyIG1heCAgIDAgIC0xICAtPiAgMAorZHFtYXgwMTMgbWF4ICAgMCAgIDAgIC0+ICAwCitkcW1heDAxNCBtYXggICAwICAgMSAgLT4gIDEKK2RxbWF4MDE1IG1heCAgIDAgICAyICAtPiAgMgorZHFtYXgwMTYgbWF4ICAgMSAgLTIgIC0+ICAxCitkcW1heDAxNyBtYXggICAxICAtMSAgLT4gIDEKK2RxbWF4MDE4IG1heCAgIDEgICAwICAtPiAgMQorZHFtYXgwMTkgbWF4ICAgMSAgIDEgIC0+ICAxCitkcW1heDAyMCBtYXggICAxICAgMiAgLT4gIDIKK2RxbWF4MDIxIG1heCAgIDIgIC0yICAtPiAgMgorZHFtYXgwMjIgbWF4ICAgMiAgLTEgIC0+ICAyCitkcW1heDAyMyBtYXggICAyICAgMCAgLT4gIDIKK2RxbWF4MDI1IG1heCAgIDIgICAxICAtPiAgMgorZHFtYXgwMjYgbWF4ICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW1heDAzMCBtYXggICAwICAgICAwICAgLT4gIDAKK2RxbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMAorZHFtYXgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwCitkcW1heDAzMyBtYXggICAwICAgICAwLjAgLT4gIDAKK2RxbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorZHFtYXgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wCitkcW1heDAzNiBtYXggIC0wICAgIC0wLjAgLT4gLTAuMAorZHFtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjAKK2RxbWF4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMAorZHFtYXgwMzkgbWF4ICAgMC4wICAtMCAgIC0+ICAwLjAKK2RxbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wCitkcW1heDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMAorZHFtYXgwNDIgbWF4ICAtMC4wICAgMCAgIC0+ICAwCitkcW1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMAorZHFtYXgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbWF4MDQ1IG1heCAgLTAuMCAgIDAuMCAtPiAgMC4wCisKK2RxbWF4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQorZHFtYXgwNTEgbWF4ICAtMEUyICAgMEUyIC0+ICAwRSsyCitkcW1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzEKK2RxbWF4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMgorZHFtYXgwNTQgbWF4ICAgMEUxICAtMEUxIC0+ICAwRSsxCitkcW1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzIKK2RxbWF4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMgorZHFtYXgwNTcgbWF4ICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK2RxbWF4MDU4IG1heCAgIDBFMSAgIDBFMSAtPiAgMEUrMQorZHFtYXgwNTkgbWF4ICAgMEUyICAgMEUyIC0+ICAwRSsyCitkcW1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzIKK2RxbWF4MDYxIG1heCAgIDBFMSAgIDBFMiAtPiAgMEUrMgorZHFtYXgwNjIgbWF4ICAtMEUxICAtMEUxIC0+IC0wRSsxCitkcW1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzIKK2RxbWF4MDY0IG1heCAgLTBFMiAgLTBFMSAtPiAtMEUrMQorZHFtYXgwNjUgbWF4ICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitkcW1heDA5MCBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxbWF4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcW1heDA5MyBtYXggIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcW1heDA5NiBtYXggIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDA5OSBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMiBtYXggIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwNSBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1heDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtYXgxMjEgbWF4IC1JbmYgIC0xMDAwICAtPiAtMTAwMAorZHFtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQorZHFtYXgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMAorZHFtYXgxMjQgbWF4IC1JbmYgICAwICAgICAtPiAgMAorZHFtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQorZHFtYXgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMAorZHFtYXgxMjcgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFtYXgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDAKK2RxbWF4MTMwIG1heCAtMSAgICAtSW5mICAgLT4gIC0xCitkcW1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMAorZHFtYXgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMAorZHFtYXgxMzMgbWF4ICAxICAgIC1JbmYgICAtPiAgMQorZHFtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZHFtYXgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkcW1heDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFtYXgxNDIgbWF4ICBOYU4gLTEwMDAgICAtPiAtMTAwMAorZHFtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQorZHFtYXgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMAorZHFtYXgxNDUgbWF4ICBOYU4gIDAgICAgICAtPiAgMAorZHFtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQorZHFtYXgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFtYXgxNDggbWF4ICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFtYXgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbWF4MTUxIG1heCAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTEKK2RxbWF4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTAKK2RxbWF4MTU0IG1heCAgMCAgICBOYU4gICAgLT4gIDAKK2RxbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDEKK2RxbWF4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbWF4MTU3IG1heCAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbWF4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTYyIG1heCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY1IG1heCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY4IG1heCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTcxIG1heCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc0IG1heCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc3IG1heCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtYXgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1heDE4MiBtYXggIE5hTjggICAgIDkgICAtPiAgOQorZHFtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWF4MTg0IG1heCAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCitkcW1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorZHFtYXgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCitkcW1heDE4NyBtYXggIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworZHFtYXgxODggbWF4IC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitkcW1heDE4OSBtYXggLTkgICAgIC1OYU4zICAtPiAtOQorZHFtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbWF4MTkxIG1heCAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk0IG1heCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk3IG1heCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFtYXgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCitkcW1heDIyMiBtYXggMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RxbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitkcW1heDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZHFtYXgyMjUgbWF4IDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK2RxbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkcW1heDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQorZHFtYXgyMjggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RxbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorZHFtYXgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkcW1heDIzMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorZHFtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK2RxbWF4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxCitkcW1heDIzNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQorZHFtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDEKK2RxbWF4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxCitkcW1heDIzNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQorZHFtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZHFtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJworZHFtYXgyODEgbWF4ICctMTAnICczJyAgLT4gICczJworZHFtYXgyODIgbWF4ICcxLjAnICcxJyAgLT4gICcxJworZHFtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJworZHFtYXgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RxbWF4NDAxIG1heCAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CitkcW1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjEKK2RxbWF4NDAzIG1heCAgMSAgICAgIDEuMCAgICAgLT4gIDEKK2RxbWF4NDA0IG1heCAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorZHFtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCitkcW1heDQwNiBtYXggIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCitkcW1heDQwNyBtYXggIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCitkcW1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwCitkcW1heDQwOSBtYXggIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKK2RxbWF4NDEwIG1heCAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorZHFtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAorZHFtYXg0MTIgbWF4ICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCitkcW1heDQxMyBtYXggIDAgICAgIC0wLjAgICAgIC0+ICAwCitkcW1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwCitkcW1heDQxNSBtYXggLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKK2RxbWF4NDE2IG1heCAtMCAgICAgLTAuMTAwICAgLT4gLTAKK2RxbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkcW1heDQxOCBtYXggLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkcW1heDQxOSBtYXggLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK2RxbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZHFtYXg0MjEgbWF4IC0xICAgICAtMS4xICAgICAtPiAtMQorZHFtYXg0MjMgbWF4IC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RxbWF4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CitkcW1heDQzMiBtYXggIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK2RxbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDEKK2RxbWF4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorZHFtYXg0MzUgbWF4ICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitkcW1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCitkcW1heDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCitkcW1heDQzOCBtYXggIDAuMCAgICAwICAgICAgIC0+ICAwCitkcW1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbWF4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorZHFtYXg0NDEgbWF4IC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorZHFtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wCitkcW1heDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwCitkcW1heDQ0NCBtYXggLTAgICAgICAwICAgICAgIC0+ICAwCitkcW1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbWF4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTAKK2RxbWF4NDQ3IG1heCAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCitkcW1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCitkcW1heDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK2RxbWF4NDUwIG1heCAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAorZHFtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQorZHFtYXg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCitkcW1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW1heDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkcW1heDQ2MiBtYXggIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkcW1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkcW1heDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW1heDQ2NSBtYXggLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkcW1heDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZHFtYXg0NzEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wCitkcW1heDQ3MiBtYXggICAgICAwLjEgICAgICAgMS4wICAtPiAxLjAKK2RxbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjAKK2RxbWF4NDc0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjAKK2RxbWF4NDc1IG1heCAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEwMAorZHFtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwCitkcW1heDQ3NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwCitkcW1heDQ3OCBtYXggICAgIDEwLjAgICAgICAxMDAwICAtPiAxMDAwCitkcW1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMAorZHFtYXg0ODAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDAKK2RxbWF4NDgxIG1heCAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAwMAorZHFtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwCitkcW1heDQ4MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwCitkcW1heDQ4NCBtYXggIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RxbWF4NTEwIG1heCAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMDBFLTYxNDMKK2RxbWF4NTExIG1heCAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW1heDUxMiBtYXggIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFtYXg1MTMgbWF4ICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbWF4NTE0IG1heCAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW1heDUxNSBtYXggIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFtYXg1MTYgbWF4ICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbWF4NTE3IG1heCAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1heDUxOCBtYXggIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFtYXg1MTkgbWF4ICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbWF4NTIwIG1heCAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsCisKK2RxbWF4NTMwIG1heCAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWF4NTMxIG1heCAtMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKK2RxbWF4NTMyIG1heCAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWF4NTMzIG1heCAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWF4NTM0IG1heCAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbWF4NTM1IG1heCAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWF4NTM2IG1heCAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWF4NTM3IG1heCAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWF4NTM4IG1heCAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbWF4NTM5IG1heCAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKK2RxbWF4NTQwIG1heCAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKKworLS0gTnVsbCB0ZXN0cworZHFtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4OTAxIG1heCAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXhNYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0CmluZGV4IDZmNWJlMjQuLjY2MjFlODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0CkBAIC0xLDMwNCArMSwzMDQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTWF4TWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMg0KLWRxbXhnMDAyIG1heG1hZyAgLTIgIC0xICAtPiAtMg0KLWRxbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMg0KLWRxbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMg0KLWRxbXhnMDA1IG1heG1hZyAgLTIgICAyICAtPiAgMg0KLWRxbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMg0KLWRxbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQ0KLWRxbXhnMDA4IG1heG1hZyAgLTEgICAwICAtPiAtMQ0KLWRxbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQ0KLWRxbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMg0KLWRxbXhnMDExIG1heG1hZyAgIDAgIC0yICAtPiAtMg0KLWRxbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQ0KLWRxbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMA0KLWRxbXhnMDE0IG1heG1hZyAgIDAgICAxICAtPiAgMQ0KLWRxbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMg0KLWRxbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMg0KLWRxbXhnMDE3IG1heG1hZyAgIDEgIC0xICAtPiAgMQ0KLWRxbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQ0KLWRxbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQ0KLWRxbXhnMDIwIG1heG1hZyAgIDEgICAyICAtPiAgMg0KLWRxbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMg0KLWRxbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMg0KLWRxbXhnMDIzIG1heG1hZyAgIDIgICAwICAtPiAgMg0KLWRxbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMg0KLWRxbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwDQotZHFteGcwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwDQotZHFteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwDQotZHFteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwDQotZHFteGcwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQotZHFteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wDQotZHFteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjANCi1kcW14ZzAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMA0KLWRxbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMA0KLWRxbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wDQotZHFteGcwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjANCi1kcW14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMA0KLWRxbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMA0KLWRxbXhnMDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wDQotZHFteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjANCi1kcW14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMA0KLQ0KLWRxbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRxbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMg0KLWRxbXhnMDUyIG1heG1hZyAgLTBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRxbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KLWRxbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQ0KLWRxbXhnMDU1IG1heG1hZyAgIDBFMiAgLTBFMiAtPiAgMEUrMg0KLWRxbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KLWRxbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQ0KLQ0KLWRxbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQ0KLWRxbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KLWRxbXhnMDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMg0KLWRxbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMg0KLWRxbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRxbXhnMDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMg0KLWRxbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQ0KLWRxbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZHFteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kcW14ZzA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW14ZzEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFteGcxMjIgbWF4bWFnIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFteGcxMjUgbWF4bWFnIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFteGcxMjggbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5DQotZHFteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kcW14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLWRxbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDANCi1kcW14ZzE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xDQotZHFteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMA0KLWRxbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDANCi1kcW14ZzE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQotZHFteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRxbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFteGcxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kcW14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZHFteGcxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQ0KLWRxbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTANCi1kcW14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwDQotZHFteGcxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQ0KLWRxbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kcW14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkNCi1kcW14ZzE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQ0KLWRxbXhnMTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yDQotZHFteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQotZHFteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0DQotDQotZHFteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5DQotZHFteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkNCi1kcW14ZzE5MCBtYXhtYWcgIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1kcW14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcW14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXhnMTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzDQotZHFteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwDQotZHFteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQotZHFteGcyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCi1kcW14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLWRxbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwDQotZHFteGcyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCi1kcW14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQ0KLWRxbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQotZHFteGcyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQotZHFteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotZHFteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYNCi1kcW14ZzIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KLWRxbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQ0KLWRxbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQ0KLWRxbXhnMjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDENCi1kcW14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxDQotZHFteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2DQotZHFteGcyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2DQotDQotLS0gZnJvbSBleGFtcGxlcw0KLWRxbXhnMjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycNCi1kcW14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcNCi1kcW14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnDQotZHFteGcyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJw0KLWRxbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQotZHFteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCi1kcW14ZzQwMiBtYXhtYWcgIDEuMSAgICAxICAgICAgIC0+ICAxLjENCi1kcW14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxDQotZHFteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQotZHFteGc0MDUgbWF4bWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQotZHFteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMA0KLWRxbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCi1kcW14ZzQwOCBtYXhtYWcgIDAgICAgICAwLjAgICAgIC0+ICAwDQotZHFteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wDQotZHFteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQotZHFteGc0MTEgbWF4bWFnICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KLWRxbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMA0KLWRxbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDANCi1kcW14ZzQxNCBtYXhtYWcgIDAgICAgIC0wICAgICAgIC0+ICAwDQotZHFteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wDQotZHFteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCi1kcW14ZzQxNyBtYXhtYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMA0KLWRxbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTANCi1kcW14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCi1kcW14ZzQyMCBtYXhtYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xLjANCi1kcW14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjENCi1kcW14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KLWRxbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5DQotZHFteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xDQotZHFteGc0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQ0KLWRxbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMA0KLWRxbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQ0KLWRxbXhnNDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCi1kcW14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwDQotZHFteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMA0KLWRxbXhnNDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMA0KLWRxbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDANCi1kcW14ZzQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCi1kcW14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwDQotZHFteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMA0KLWRxbXhnNDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwDQotZHFteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDANCi1kcW14ZzQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQotZHFteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQotZHFteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wDQotZHFteGc0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQotZHFteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkNCi0tLSBsYXJnaWVzDQotZHFteGc0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KLWRxbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMNCi1kcW14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwDQotZHFteGc0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMw0KLWRxbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCi1kcW14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZHFteGc0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMA0KLWRxbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCi0NCi0tLSBzdWJub3JtYWxzDQotZHFteGc1MTAgbWF4bWFnICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0Mw0KLWRxbXhnNTExIG1heG1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsDQotZHFteGc1MTIgbWF4bWFnICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wRS02MTQ0ICBTdWJub3JtYWwNCi1kcW14ZzUxMyBtYXhtYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbA0KLWRxbXhnNTE0IG1heG1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsDQotZHFteGc1MTUgbWF4bWFnICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45OUUtNjE0NCBTdWJub3JtYWwNCi1kcW14ZzUxNiBtYXhtYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbA0KLWRxbXhnNTE3IG1heG1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsDQotZHFteGc1MTggbWF4bWFnICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbA0KLWRxbXhnNTIwIG1heG1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsDQotDQotZHFteGc1MzAgbWF4bWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wMEUtNjE0Mw0KLWRxbXhnNTMxIG1heG1hZyAtMC4xRS02MTQzICAgICAgICAwICAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsDQotZHFteGc1MzIgbWF4bWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwNCi1kcW14ZzUzMyBtYXhtYWcgLTAuMTAwRS02MTQzICAgICAgMCAgLT4gIC0xLjAwRS02MTQ0IFN1Ym5vcm1hbA0KLWRxbXhnNTM0IG1heG1hZyAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsDQotZHFteGc1MzUgbWF4bWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45OUUtNjE0NCBTdWJub3JtYWwNCi1kcW14ZzUzNiBtYXhtYWcgLTAuMDk5RS02MTQzICAgICAgMCAgLT4gIC05LjlFLTYxNDUgIFN1Ym5vcm1hbA0KLWRxbXhnNTM3IG1heG1hZyAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgLTlFLTYxNDYgICAgU3Vibm9ybWFsDQotZHFteGc1MzggbWF4bWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAtMUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW14ZzUzOSBtYXhtYWcgLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gIC05RS02MTQ3ICAgIFN1Ym5vcm1hbA0KLWRxbXhnNTQwIG1heG1hZyAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgLTFFLTYxNDcgICAgU3Vibm9ybWFsDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFteGc5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWF4TWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorZHFteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitkcW14ZzAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTIKK2RxbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorZHFteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitkcW14ZzAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTIKK2RxbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorZHFteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitkcW14ZzAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDEKK2RxbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorZHFteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitkcW14ZzAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTEKK2RxbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorZHFteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitkcW14ZzAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDIKK2RxbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorZHFteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitkcW14ZzAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDEKK2RxbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorZHFteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitkcW14ZzAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDIKK2RxbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorZHFteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitkcW14ZzAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDIKK2RxbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitkcW14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDAKK2RxbXhnMDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorZHFteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitkcW14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RxbXhnMDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorZHFteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK2RxbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wCitkcW14ZzAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK2RxbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitkcW14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMAorZHFteGcwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorZHFteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjAKK2RxbXhnMDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitkcW14ZzA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZHFteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitkcW14ZzA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RxbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZHFteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitkcW14ZzA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RxbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkcW14ZzA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZHFteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitkcW14ZzA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK2RxbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZHFteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitkcW14ZzA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RxbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZHFteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcW14ZzA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFteGcxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcW14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RxbXhnMTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFteGcxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RxbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK2RxbXhnMTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK2RxbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RxbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RxbXhnMTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RxbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkcW14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbXhnMTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkcW14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkcW14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitkcW14ZzE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitkcW14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwCitkcW14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitkcW14ZzE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkcW14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkcW14ZzE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbXhnMTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkKK2RxbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZHFteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RxbXhnMTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZHFteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RxbXhnMTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZHFteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK2RxbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbXhnMjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZHFteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkcW14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZHFteGcyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RxbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkcW14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZHFteGcyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RxbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkcW14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RxbXhnMjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZHFteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RxbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkcW14ZzIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK2RxbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorZHFteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQorZHFteGcyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorZHFteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitkcW14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYKKworLS0gZnJvbSBleGFtcGxlcworZHFteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworZHFteGcyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitkcW14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnCitkcW14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitkcW14ZzI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RxbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZHFteGc0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQorZHFteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkcW14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RxbXhnNDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RxbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RxbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RxbXhnNDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZHFteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkcW14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkcW14ZzQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RxbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RxbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RxbXhnNDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZHFteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkcW14ZzQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkcW14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZHFteGc0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkcW14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkcW14ZzQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZHFteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkcW14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitkcW14ZzQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RxbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZHFteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZHFteGc0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZHFteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMAorZHFteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkcW14ZzQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RxbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RxbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZHFteGc0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorZHFteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMAorZHFteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkcW14ZzQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZHFteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbXhnNDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZHFteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkcW14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RxbXhnNDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkcW14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW14ZzQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkcW14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkcW14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkcW14ZzQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkcW14ZzQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RxbXhnNTEwIG1heG1hZyAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMDBFLTYxNDMKK2RxbXhnNTExIG1heG1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW14ZzUxMiBtYXhtYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFteGc1MTMgbWF4bWFnICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbXhnNTE0IG1heG1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW14ZzUxNSBtYXhtYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MTYgbWF4bWFnICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbXhnNTE3IG1heG1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUxOCBtYXhtYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFteGc1MTkgbWF4bWFnICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbXhnNTIwIG1heG1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsCisKK2RxbXhnNTMwIG1heG1hZyAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMDBFLTYxNDMKK2RxbXhnNTMxIG1heG1hZyAtMC4xRS02MTQzICAgICAgICAwICAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW14ZzUzMiBtYXhtYWcgLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFteGc1MzMgbWF4bWFnIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAtMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbXhnNTM0IG1heG1hZyAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW14ZzUzNSBtYXhtYWcgLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MzYgbWF4bWFnIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbXhnNTM3IG1heG1hZyAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgLTlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUzOCBtYXhtYWcgLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFteGc1MzkgbWF4bWFnIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAtOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbXhnNTQwIG1heG1hZyAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgLTFFLTYxNDcgICAgU3Vibm9ybWFsCisKKy0tIE51bGwgdGVzdHMKK2RxbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW4uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0CmluZGV4IDUzMDIwMzkuLmM4N2Y0YzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0CkBAIC0xLDMwOSArMSwzMDkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTWluLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMg0KLWRxbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMg0KLWRxbWluMDAzIG1pbiAgLTIgICAwICAtPiAtMg0KLWRxbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMg0KLWRxbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMg0KLWRxbWluMDA2IG1pbiAgLTEgIC0yICAtPiAtMg0KLWRxbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQ0KLWRxbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQ0KLWRxbWluMDA5IG1pbiAgLTEgICAxICAtPiAtMQ0KLWRxbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQ0KLWRxbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMg0KLWRxbWluMDEyIG1pbiAgIDAgIC0xICAtPiAtMQ0KLWRxbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMA0KLWRxbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMA0KLWRxbWluMDE1IG1pbiAgIDAgICAyICAtPiAgMA0KLWRxbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMg0KLWRxbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQ0KLWRxbWluMDE4IG1pbiAgIDEgICAwICAtPiAgMA0KLWRxbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQ0KLWRxbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQ0KLWRxbWluMDIxIG1pbiAgIDIgIC0yICAtPiAtMg0KLWRxbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQ0KLWRxbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMA0KLWRxbWluMDI1IG1pbiAgIDIgICAxICAtPiAgMQ0KLWRxbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotZHFtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwDQotZHFtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wDQotZHFtaW4wMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjANCi1kcW1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMA0KLWRxbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMA0KLWRxbWluMDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMA0KLWRxbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMA0KLWRxbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMA0KLWRxbWluMDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wDQotZHFtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wDQotZHFtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjANCi1kcW1pbjA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMA0KLWRxbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wDQotZHFtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wDQotZHFtaW4wNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjANCi1kcW1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMA0KLQ0KLWRxbWluMDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KLWRxbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQ0KLWRxbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KLWRxbWluMDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KLWRxbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMw0KLWRxbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KLQ0KLS0tIFNwZWNpYWxzDQotZHFtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjA5MSBtaW4gIEluZiAgLTEwMDAgIC0+IC0xMDAwDQotZHFtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQ0KLWRxbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTANCi1kcW1pbjA5NCBtaW4gIEluZiAgIDAgICAgIC0+ICAwDQotZHFtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQ0KLWRxbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDANCi1kcW1pbjA5NyBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDANCi1kcW1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTAwIG1pbiAtMSAgICAgSW5mICAgLT4gLTENCi1kcW1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wDQotZHFtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMA0KLWRxbWluMTAzIG1pbiAgMSAgICAgSW5mICAgLT4gIDENCi1kcW1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotZHFtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZHFtaW4xMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFtaW4xMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtaW4xMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KLWRxbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KLWRxbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQotZHFtaW4xNDMgbWluICBOYU4gLTEgICAgICAtPiAgLTENCi1kcW1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMA0KLWRxbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDANCi1kcW1pbjE0NiBtaW4gIE5hTiAgMSAgICAgIC0+ICAxDQotZHFtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLWRxbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotZHFtaW4xNDkgbWluICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1kcW1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotZHFtaW4xNTIgbWluIC0xICAgLU5hTiAgICAtPiAtMQ0KLWRxbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTANCi1kcW1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwDQotZHFtaW4xNTUgbWluICAxICAgIE5hTiAgICAtPiAgMQ0KLWRxbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1kcW1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KLWRxbWluMTgzIG1pbiAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCi1kcW1pbjE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQotZHFtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zDQotZHFtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KLQ0KLWRxbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCi1kcW1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkNCi1kcW1pbjE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQotDQotZHFtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE5MiBtaW4gIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE5NSBtaW4gIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1pbjE5OCBtaW4gIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KLWRxbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwDQotZHFtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDANCi1kcW1pbjIyMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xMjM0NTY3ODAwDQotZHFtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMA0KLWRxbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTANCi1kcW1pbjIyNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwDQotZHFtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQ0KLWRxbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTENCi1kcW1pbjIyOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xMjM0NTY3ODkwMQ0KLWRxbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxDQotZHFtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5Ng0KLWRxbWluMjMyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYNCi1kcW1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDENCi1kcW1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcW1pbjIzNSBtaW4gMTIzNDU2Nzg5MDEgMSAgIC0+IDENCi1kcW1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kcW1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDENCi1kcW1pbjIzOCBtaW4gMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotZHFtaW4yODAgbWluICczJyAgICcyJyAgLT4gICcyJw0KLWRxbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJw0KLWRxbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJw0KLWRxbWluMjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJw0KLWRxbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycNCi0NCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQotZHFtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQotZHFtaW40MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQ0KLWRxbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMA0KLWRxbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KLWRxbWluNDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCi1kcW1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMA0KLWRxbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDANCi1kcW1pbjQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjANCi1kcW1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wDQotZHFtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQotZHFtaW40MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQotZHFtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMA0KLWRxbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbWluNDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTANCi1kcW1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wDQotZHFtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCi1kcW1pbjQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQotZHFtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQotZHFtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wDQotZHFtaW40MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KLWRxbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KLWRxbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQotLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQotZHFtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQotZHFtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQ0KLWRxbWluNDMzIG1pbiAgMS4wICAgIDEgICAgICAgLT4gIDEuMA0KLWRxbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KLWRxbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTANCi1kcW1pbjQzNiBtaW4gIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMA0KLWRxbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDANCi1kcW1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjANCi1kcW1pbjQzOSBtaW4gLTAgICAgICAwLjAgICAgIC0+IC0wDQotZHFtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQotZHFtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wDQotZHFtaW40NDIgbWluIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMA0KLWRxbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KLWRxbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTANCi1kcW1pbjQ0NSBtaW4gLTAgICAgIC0wLjAgICAgIC0+IC0wDQotZHFtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCi1kcW1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwDQotZHFtaW40NDggbWluIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQotZHFtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQotZHFtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQ0KLWRxbWluNDUxIG1pbiAtMS4xICAgLTEgICAgICAgLT4gLTEuMQ0KLWRxbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5DQotLS0gbGFyZ2llcw0KLWRxbWluNDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCi1kcW1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZHFtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KLWRxbWluNDYzIG1pbiAgMUUrMyAgLTM4NCAgICAtPiAtMzg0DQotZHFtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQNCi1kcW1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszDQotZHFtaW40NjYgbWluIC0zODQgIC0xRSszICAgIC0+IC0xRSszDQotZHFtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszDQotDQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQotZHFtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xDQotZHFtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xDQotZHFtaW40NzMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xDQotZHFtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xDQotZHFtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wDQotZHFtaW40NzYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wDQotZHFtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMA0KLWRxbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjANCi1kcW1pbjQ3OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMA0KLWRxbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wDQotZHFtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wDQotZHFtaW40ODIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wDQotZHFtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMA0KLWRxbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjANCi0NCi0tLSBzdWJub3JtYWxzDQotZHFtaW41MTAgbWluICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTExIG1pbiAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDANCi1kcW1pbjUxMiBtaW4gIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtaW41MTMgbWluICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTE0IG1pbiAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1pbjUxNSBtaW4gIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtaW41MTYgbWluICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbWluNTE3IG1pbiAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1pbjUxOCBtaW4gIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtaW41MTkgbWluICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMA0KLWRxbWluNTIwIG1pbiAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDANCi0NCi1kcW1pbjUzMCBtaW4gLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzDQotZHFtaW41MzEgbWluIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCi1kcW1pbjUzMiBtaW4gLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxbWluNTMzIG1pbiAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFtaW41MzQgbWluIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwNCi1kcW1pbjUzNSBtaW4gLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KLWRxbWluNTM2IG1pbiAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsDQotZHFtaW41MzcgbWluIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwNCi1kcW1pbjUzOCBtaW4gLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbA0KLWRxbWluNTM5IG1pbiAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsDQotZHFtaW41NDAgbWluIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwNCi0NCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWluLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMgorZHFtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yCitkcW1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTIKK2RxbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMgorZHFtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yCitkcW1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTIKK2RxbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQorZHFtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xCitkcW1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTEKK2RxbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQorZHFtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yCitkcW1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTEKK2RxbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMAorZHFtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwCitkcW1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDAKK2RxbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMgorZHFtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xCitkcW1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDAKK2RxbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQorZHFtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxCitkcW1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTIKK2RxbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQorZHFtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwCitkcW1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDEKK2RxbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCitkcW1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKK2RxbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wCitkcW1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAorZHFtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCitkcW1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTAKK2RxbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAorZHFtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCitkcW1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMAorZHFtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCitkcW1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAorZHFtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCitkcW1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKK2RxbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAorCitkcW1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RxbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZHFtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCitkcW1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKK2RxbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMworZHFtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkcW1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZHFtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQorZHFtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMAorZHFtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMAorZHFtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQorZHFtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMAorZHFtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCitkcW1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCitkcW1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwCitkcW1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCitkcW1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcW1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RxbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RxbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZHFtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RxbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCitkcW1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAorZHFtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMAorZHFtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQorZHFtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKK2RxbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKK2RxbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDAKK2RxbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKK2RxbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkcW1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZHFtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZHFtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkcW1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RxbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RxbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZHFtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCitkcW1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAorZHFtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAorZHFtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAorZHFtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MAorZHFtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorZHFtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQorZHFtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQorZHFtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKK2RxbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCitkcW1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2CitkcW1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2CitkcW1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RxbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkcW1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQorZHFtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RxbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKK2RxbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJworZHFtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCitkcW1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKK2RxbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RxbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RxbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZHFtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkcW1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkcW1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZHFtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAorZHFtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkcW1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZHFtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZHFtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkcW1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAorZHFtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZHFtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkcW1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RxbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorZHFtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkcW1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxCitkcW1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RxbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZHFtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZHFtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RxbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RxbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZHFtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAorZHFtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkcW1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RxbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RxbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZHFtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMAorZHFtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAorZHFtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK2RxbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RxbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZHFtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCitkcW1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xCitkcW1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RxbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkcW1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkcW1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkcW1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NAorZHFtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQKK2RxbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RxbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMworZHFtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZHFtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xCitkcW1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKK2RxbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQorZHFtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xCitkcW1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKK2RxbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAorZHFtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMAorZHFtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAorZHFtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKK2RxbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wCitkcW1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKK2RxbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAorZHFtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMAorZHFtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAorCistLSBzdWJub3JtYWxzCitkcW1pbjUxMCBtaW4gIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMSBtaW4gIDAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMiBtaW4gIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxMyBtaW4gIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNCBtaW4gIDAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1pbjUxNSBtaW4gIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNiBtaW4gIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxNyBtaW4gIDAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxOCBtaW4gIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1pbjUxOSBtaW4gIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwCitkcW1pbjUyMCBtaW4gIDAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwCisKK2RxbWluNTMwIG1pbiAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMDBFLTYxNDMKK2RxbWluNTMxIG1pbiAtMC4xRS02MTQzICAgICAgICAwICAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW1pbjUzMiBtaW4gLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFtaW41MzMgbWluIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAtMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbWluNTM0IG1pbiAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW1pbjUzNSBtaW4gLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFtaW41MzYgbWluIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbWluNTM3IG1pbiAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgLTlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1pbjUzOCBtaW4gLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFtaW41MzkgbWluIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAtOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbWluNTQwIG1pbiAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgLTFFLTYxNDcgICAgU3Vibm9ybWFsCisKKworLS0gTnVsbCB0ZXN0cworZHFtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluTWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdAppbmRleCA3MWI4ODZmLi5lZGMyZTQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdApAQCAtMSwyOTMgKzEsMjkzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU1pbk1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgbWlubnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1kcW1uZzAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTINCi1kcW1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTENCi1kcW1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDANCi1kcW1uZzAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDENCi1kcW1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTINCi1kcW1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTENCi1kcW1uZzAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTENCi1kcW1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDANCi1kcW1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTENCi1kcW1uZzAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTENCi1kcW1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDANCi1kcW1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDANCi1kcW1uZzAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDANCi1kcW1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDANCi1kcW1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDANCi1kcW1uZzAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDENCi1kcW1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTENCi1kcW1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDANCi1kcW1uZzAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDENCi1kcW1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDENCi1kcW1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTINCi1kcW1uZzAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTENCi1kcW1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDANCi1kcW1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDENCi1kcW1uZzAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDINCi0NCi0tLSBleHRlbmRlZCB6ZXJvcw0KLWRxbW5nMDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMA0KLWRxbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMA0KLWRxbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wDQotZHFtbmcwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjANCi1kcW1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTANCi1kcW1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTANCi1kcW1uZzAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTANCi1kcW1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTANCi1kcW1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMA0KLWRxbW5nMDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMA0KLWRxbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wDQotZHFtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjANCi1kcW1uZzA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMA0KLWRxbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMA0KLWRxbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQotZHFtbmcwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjANCi0NCi1kcW1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzENCi1kcW1uZzA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzENCi1kcW1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzENCi1kcW1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzENCi1kcW1uZzA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMNCi1kcW1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMNCi0NCi0tLSBTcGVjaWFscw0KLWRxbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KLWRxbW5nMDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTENCi1kcW1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wDQotZHFtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMA0KLWRxbW5nMDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDENCi1kcW1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwDQotZHFtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW1uZzA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZHFtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xDQotZHFtbmcxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMA0KLWRxbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDANCi1kcW1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxDQotZHFtbmcxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLWRxbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFtbmcxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwDQotZHFtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQ0KLWRxbW5nMTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTANCi1kcW1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwDQotZHFtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQ0KLWRxbW5nMTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDANCi1kcW1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtbmcxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMA0KLWRxbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTENCi1kcW1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wDQotZHFtbmcxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMA0KLWRxbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDENCi1kcW1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQotZHFtbmcxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi0NCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCi1kcW1uZzE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkNCi1kcW1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMA0KLWRxbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xDQotZHFtbmcxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTANCi1kcW1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwDQotZHFtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLWRxbW5nMTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1kcW1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KLWRxbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxbW5nMTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotZHFtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KLWRxbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTENCi1kcW1uZzE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wDQotZHFtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMA0KLWRxbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDENCi1kcW1uZzE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotZHFtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCi0NCi1kcW1uZzE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxbW5nMTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTANCi1kcW1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xDQotZHFtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMg0KLWRxbW5nMTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KLWRxbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQNCi0NCi1kcW1uZzE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5DQotZHFtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQotZHFtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLWRxbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uZzE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MNCi1kcW1uZzIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCi1kcW1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDENCi1kcW1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDENCi1kcW1uZzIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCi1kcW1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDENCi1kcW1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDENCi1kcW1uZzIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCi1kcW1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDENCi1kcW1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDENCi1kcW1uZzIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCi1kcW1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDENCi1kcW1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDENCi1kcW1uZzIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCi1kcW1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcW1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDENCi1kcW1uZzIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kcW1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDENCi1kcW1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotZHFtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJw0KLWRxbW5nMjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycNCi1kcW1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcNCi1kcW1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcNCi1kcW1uZzI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KLWRxbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQ0KLWRxbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDENCi1kcW1uZzQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjANCi1kcW1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjENCi1kcW1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwDQotZHFtbmc0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCi1kcW1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwDQotZHFtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wDQotZHFtbmc0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMA0KLWRxbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMA0KLWRxbW5nNDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCi1kcW1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1kcW1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wDQotZHFtbmc0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMA0KLWRxbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTANCi1kcW1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQotZHFtbmc0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQotZHFtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQotZHFtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KLWRxbW5nNDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTENCi1kcW1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1kcW1uZzQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjENCi1kcW1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxDQotZHFtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQotZHFtbmc0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xDQotZHFtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KLWRxbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQotZHFtbmc0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMA0KLWRxbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KLWRxbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTANCi1kcW1uZzQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjANCi1kcW1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCi1kcW1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQotZHFtbmc0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wDQotZHFtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMA0KLWRxbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTANCi1kcW1uZzQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wDQotZHFtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KLWRxbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQ0KLWRxbW5nNDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQ0KLWRxbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTENCi1kcW1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xDQotZHFtbmc0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xDQotLS0gbGFyZ2llcw0KLWRxbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCi1kcW1uZzQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotZHFtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KLWRxbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NA0KLWRxbW5nNDY0IG1pbm1hZyAtMzg0ICAgIDFFKzMgICAgLT4gLTM4NA0KLWRxbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCi1kcW1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQNCi1kcW1uZzQ2NyBtaW5tYWcgLTFFKzMgICAtMzg0ICAgIC0+IC0zODQNCi0NCi0tLSBzdWJub3JtYWxzDQotZHFtbmc1MTAgbWlubWFnICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTExIG1pbm1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDANCi1kcW1uZzUxMiBtaW5tYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTMgbWlubWFnICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTE0IG1pbm1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1uZzUxNSBtaW5tYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTYgbWlubWFnICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUxOCBtaW5tYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MTkgbWlubWFnICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDANCi0NCi1kcW1uZzUzMCBtaW5tYWcgLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzEgbWlubWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTMyIG1pbm1hZyAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDANCi1kcW1uZzUzMyBtaW5tYWcgLTAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzQgbWlubWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTM1IG1pbm1hZyAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUzNiBtaW5tYWcgLTAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwDQotZHFtbmc1MzcgbWlubWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KLWRxbW5nNTM4IG1pbm1hZyAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDANCi1kcW1uZzUzOSBtaW5tYWcgLTAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwDQotZHFtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMA0KLQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW1uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNaW5NYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtbmcwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yCitkcW1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKK2RxbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAorZHFtbmcwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxCitkcW1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKK2RxbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQorZHFtbmcwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xCitkcW1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKK2RxbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQorZHFtbmcwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xCitkcW1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKK2RxbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAorZHFtbmcwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwCitkcW1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKK2RxbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAorZHFtbmcwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxCitkcW1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKK2RxbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAorZHFtbmcwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxCitkcW1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKK2RxbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgorZHFtbmcwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xCitkcW1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKK2RxbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQorZHFtbmcwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcW1uZzAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKK2RxbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAorZHFtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjAKK2RxbW5nMDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCitkcW1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKK2RxbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMAorZHFtbmcwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCitkcW1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKK2RxbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wCitkcW1uZzAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKK2RxbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCitkcW1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMAorZHFtbmcwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKK2RxbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAorZHFtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK2RxbW5nMDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCisKK2RxbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQorZHFtbmcwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxCitkcW1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKK2RxbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQorZHFtbmcwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszCitkcW1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKKworLS0gU3BlY2lhbHMKK2RxbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1uZzA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCitkcW1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wCitkcW1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCitkcW1uZzA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCitkcW1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtbmcwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKK2RxbW5nMTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKK2RxbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDAKK2RxbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKK2RxbW5nMTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RxbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbW5nMTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xCitkcW1uZzEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCitkcW1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCitkcW1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxCitkcW1uZzEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKK2RxbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKK2RxbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTAKK2RxbW5nMTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKK2RxbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKK2RxbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RxbW5nMTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFtbmcxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5CitkcW1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorZHFtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKK2RxbW5nMTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCitkcW1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwCitkcW1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCitkcW1uZzE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkcW1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW1uZzE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZHFtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZHFtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQorZHFtbmcxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAorZHFtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMAorZHFtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQorZHFtbmcxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZHFtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZHFtbmcxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW1uZzE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK2RxbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCitkcW1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCitkcW1uZzE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKK2RxbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworZHFtbmcxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorZHFtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5CitkcW1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK2RxbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb2xkIHJvdW5kaW5nIGNoZWNrcworZHFtbmcyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCitkcW1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKK2RxbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorZHFtbmcyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCitkcW1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKK2RxbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorZHFtbmcyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCitkcW1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKK2RxbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorZHFtbmcyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCitkcW1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKK2RxbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorZHFtbmcyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCitkcW1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorZHFtbmcyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcW1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK2RxbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkcW1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInCitkcW1uZzI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCitkcW1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKK2RxbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJworZHFtbmcyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RxbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorZHFtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQorZHFtbmc0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCitkcW1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK2RxbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbW5nNDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCitkcW1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCitkcW1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK2RxbW5nNDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorZHFtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wCitkcW1uZzQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCitkcW1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKK2RxbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbW5nNDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorZHFtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCitkcW1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xCitkcW1uZzQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCitkcW1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtbmc0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xCitkcW1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCitkcW1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK2RxbW5nNDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorZHFtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAorZHFtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK2RxbW5nNDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAKK2RxbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAorZHFtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAorZHFtbmc0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCitkcW1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKK2RxbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK2RxbW5nNDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorZHFtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAorZHFtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAorZHFtbmc0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMAorZHFtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorZHFtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCitkcW1uZzQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK2RxbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKK2RxbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKK2RxbW5nNDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworZHFtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorZHFtbmc0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorZHFtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworZHFtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0CitkcW1uZzQ2NCBtaW5tYWcgLTM4NCAgICAxRSszICAgIC0+IC0zODQKK2RxbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKK2RxbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NAorZHFtbmc0NjcgbWlubWFnIC0xRSszICAgLTM4NCAgICAtPiAtMzg0CisKKy0tIHN1Ym5vcm1hbHMKK2RxbW5nNTEwIG1pbm1hZyAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTExIG1pbm1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKK2RxbW5nNTEyIG1pbm1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTEzIG1pbm1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE0IG1pbm1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTE1IG1pbm1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE2IG1pbm1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTE5IG1pbm1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKK2RxbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKKworZHFtbmc1MzAgbWlubWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzEgbWlubWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzIgbWlubWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzMgbWlubWFnIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzQgbWlubWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzUgbWlubWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzYgbWlubWFnIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzcgbWlubWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzggbWlubWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCisKKy0tIE51bGwgdGVzdHMKK2RxbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbnVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0CmluZGV4IDdhMDA3NzkuLjAyZTQ2MmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRxbW5zMDAxIG1pbnVzICAgICAgICs3LjUwICAtPiAtNy41MA0KLQ0KLS0tIEluZmluaXRpZXMNCi1kcW1uczAxMSBtaW51cyAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQotZHFtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQotDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTg0KLWRxbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFODQotZHFtbnMwMjMgbWludXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCi1kcW1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCi1kcW1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQotZHFtbnMwMzMgbWludXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KLWRxbW5zMDM2IG1pbnVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCi1kcW1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZmluaXRlcw0KLWRxbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNw0KLWRxbW5zMTAyIG1pbnVzICAgICAgICAgLTcgICAtPiA3DQotZHFtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQ0KLWRxbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQ0KLWRxbW5zMTA1IG1pbnVzICAgICAgIDcuNTAgICAtPiAtNy41MA0KLWRxbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwDQotZHFtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMA0KLWRxbW5zMTA4IG1pbnVzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFtbnMxMTEgbWludXMgICAgICAgICAgMCAgIC0+IDANCi1kcW1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMA0KLWRxbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0DQotZHFtbnMxMTQgbWludXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCi1kcW1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQotZHFtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxbW5zMTE3IG1pbnVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCi1kcW1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1kcW1uczEyMSBtaW51cyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcW1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcW1uczEyMyBtaW51cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi1kcW1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbW5zMTMyIG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQotZHFtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFtbnMxMzQgbWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsDQotDQotZHFtbnMxMzUgbWludXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQotZHFtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFtbnMxMzcgbWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCi1kcW1uczEzOCBtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWludXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAteCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RxbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RxbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KK2RxbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCitkcW1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkcW1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkcW1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZHFtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAorZHFtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RxbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNworZHFtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKK2RxbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKK2RxbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQorZHFtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCitkcW1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAorZHFtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAorZHFtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkcW1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAorZHFtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKK2RxbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkcW1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZHFtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFtbnMxMjEgbWludXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcW1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxbW5zMTIzIG1pbnVzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFtbnMxMjQgbWludXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcW1uczEzMSBtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbW5zMTMyIG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcW1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxbW5zMTM0IG1pbnVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorCitkcW1uczEzNSBtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKK2RxbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFtbnMxMzcgbWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU11bHRpcGx5LmRlY1Rlc3QKaW5kZXggNjc2YzFmNS4uODM4N2E4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0CkBAIC0xLDU4OSArMSw1ODkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTXVsdGlwbHkuZGVjVGVzdCAtLSBkZWNRdWFkIG11bHRpcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlDQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxbXVsMDAwIG11bHRpcGx5IDIgICAgICAyIC0+IDQNCi1kcW11bDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2DQotZHFtdWwwMDIgbXVsdGlwbHkgNSAgICAgIDEgLT4gNQ0KLWRxbXVsMDAzIG11bHRpcGx5IDUgICAgICAyIC0+IDEwDQotZHFtdWwwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MA0KLWRxbXVsMDA1IG11bHRpcGx5IDEuMjAgICAwIC0+IDAuMDANCi1kcW11bDAwNiBtdWx0aXBseSAxLjIwICAtMiAtPiAtMi40MA0KLWRxbXVsMDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwDQotZHFtdWwwMDggbXVsdGlwbHkgLTEuMjAgIDAgLT4gLTAuMDANCi1kcW11bDAwOSBtdWx0aXBseSAtMS4yMCAtMiAtPiAyLjQwDQotZHFtdWwwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5DQotZHFtdWwwMTEgbXVsdGlwbHkgMi41ICAgIDQgLT4gMTAuMA0KLWRxbXVsMDEyIG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwDQotZHFtdWwwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KLWRxbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwDQotZHFtdWwwMTYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsMDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFtdWwwMTkgbXVsdGlwbHkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHplcm9zLCBldGMuDQotZHFtdWwwMjEgbXVsdGlwbHkgIDAgICAgICAwICAgICAtPiAgMA0KLWRxbXVsMDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTANCi1kcW11bDAyMyBtdWx0aXBseSAtMCAgICAgIDAgICAgIC0+IC0wDQotZHFtdWwwMjQgbXVsdGlwbHkgLTAgICAgIC0wICAgICAtPiAgMA0KLWRxbXVsMDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCi1kcW11bDAyNiBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQotZHFtdWwwMjcgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KLWRxbXVsMDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCi1kcW11bDAzMCBtdWx0aXBseSAgNS4wMCAgIDFFLTMgIC0+ICAwLjAwNTAwDQotZHFtdWwwMzEgbXVsdGlwbHkgIDAwLjAwICAwLjAwMCAtPiAgMC4wMDAwMA0KLWRxbXVsMDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFtdWwwMzMgbXVsdGlwbHkgIDBFLTMgICAwMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kcW11bDAzNCBtdWx0aXBseSAtNS4wMCAgIDFFLTMgIC0+IC0wLjAwNTAwDQotZHFtdWwwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMA0KLWRxbXVsMDM2IG11bHRpcGx5IC0wMC4wMCAgMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFtdWwwMzcgbXVsdGlwbHkgLTBFLTMgICAwMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kcW11bDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwDQotZHFtdWwwMzkgbXVsdGlwbHkgIDAwLjAwIC0wLjAwMCAtPiAtMC4wMDAwMA0KLWRxbXVsMDQwIG11bHRpcGx5ICAwMC4wMCAtMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFtdWwwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1kcW11bDA0MiBtdWx0aXBseSAtNS4wMCAgLTFFLTMgIC0+ICAwLjAwNTAwDQotZHFtdWwwNDMgbXVsdGlwbHkgLTAwLjAwIC0wLjAwMCAtPiAgMC4wMDAwMA0KLWRxbXVsMDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZHFtdWwwNDUgbXVsdGlwbHkgLTBFLTMgIC0wMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQotZHFtdWwwNTAgbXVsdGlwbHkgMS4yMCAzICAgICAgICAtPiAzLjYwDQotZHFtdWwwNTEgbXVsdGlwbHkgNyAgICAzICAgICAgICAtPiAyMQ0KLWRxbXVsMDUyIG11bHRpcGx5IDAuOSAgMC44ICAgICAgLT4gMC43Mg0KLWRxbXVsMDUzIG11bHRpcGx5IDAuOSAgLTAgICAgICAgLT4gLTAuMA0KLWRxbXVsMDU0IG11bHRpcGx5IDY1NDMyMSA2NTQzMjEgLT4gNDI4MTM1OTcxMDQxDQotDQotZHFtdWwwNjAgbXVsdGlwbHkgMTIzLjQ1IDFlNyAgLT4gIDEuMjM0NUUrOQ0KLWRxbXVsMDYxIG11bHRpcGx5IDEyMy40NSAxZTggIC0+ICAxLjIzNDVFKzEwDQotZHFtdWwwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTENCi1kcW11bDA2MyBtdWx0aXBseSAxMjMuNDUgMWUxMCAtPiAgMS4yMzQ1RSsxMg0KLWRxbXVsMDY0IG11bHRpcGx5IDEyMy40NSAxZTExIC0+ICAxLjIzNDVFKzEzDQotZHFtdWwwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQNCi1kcW11bDA2NiBtdWx0aXBseSAxMjMuNDUgMWUxMyAtPiAgMS4yMzQ1RSsxNQ0KLQ0KLQ0KLS0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3Rocw0KLS0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFtdWwwODAgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotZHFtdWwwODQgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotZHFtdWwwOTAgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotZHFtdWwwOTQgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45DQotDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2Fycmllcw0KLWRxbXVsMTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxDQotZHFtdWwxMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMA0KLWRxbXVsMTAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMA0KLWRxbXVsMTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwDQotZHFtdWwxMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMA0KLWRxbXVsMTA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMA0KLWRxbXVsMTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwDQotZHFtdWwxMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMA0KLWRxbXVsMTA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMA0KLWRxbXVsMTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwDQotZHFtdWwxMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMA0KLWRxbXVsMTEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMA0KLWRxbXVsMTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwDQotZHFtdWwxMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDANCi0tLWRxbXVsMTE3IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDANCi0tLWRxbXVsMTE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRxbXVsMTIwIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRxbXVsMTIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLS0tZHFtdWwxMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLWRxbXVsMTIzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2Fycmllcw0KLWRxbXVsMTMxIG11bHRpcGx5IDMgMyAgIC0+IDkNCi1kcW11bDEzMiBtdWx0aXBseSAzIDMwICAgLT4gOTANCi1kcW11bDEzMyBtdWx0aXBseSAzIDMwMCAgIC0+IDkwMA0KLWRxbXVsMTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDANCi1kcW11bDEzNSBtdWx0aXBseSAzIDMwMDAwICAgLT4gOTAwMDANCi1kcW11bDEzNiBtdWx0aXBseSAzIDMwMDAwMCAgIC0+IDkwMDAwMA0KLWRxbXVsMTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDANCi1kcW11bDEzOCBtdWx0aXBseSAzIDMwMDAwMDAwICAgLT4gOTAwMDAwMDANCi1kcW11bDEzOSBtdWx0aXBseSAzIDMwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMA0KLWRxbXVsMTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDANCi1kcW11bDE0MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDANCi1kcW11bDE0MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMA0KLWRxbXVsMTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDANCi1kcW11bDE0NCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDANCi1kcW11bDE0NSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ2IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDANCi1kcW11bDE0NyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDE0OCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTQ5IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDE1MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDE1MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTUyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDE1MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDI2MyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcNCi1kcW11bDMwMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMwMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzAzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMwNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMwNSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA2IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMwNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMwOCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzA5IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzEyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMzE1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxNiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDMxNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQNCi1kcW11bDMxOCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkDQotZHFtdWwzMTkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgIFJvdW5kZWQNCi1kcW11bDMyMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgIFJvdW5kZWQNCi1kcW11bDMyMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkDQotZHFtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzkgIFJvdW5kZWQNCi1kcW11bDMyMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNDAgIFJvdW5kZWQNCi0NCi0tLSB0cnl6ZXJvcyBjYXNlcw0KLWRxbXVsNTA0ICBtdWx0aXBseSAgMEUtNDI2MCAxMDAwRS00MjYwICAtPiAwRS02MTc2IENsYW1wZWQNCi1kcW11bDUwNSAgbXVsdGlwbHkgIDEwMEUrNDI2MCAwRSs0MjYwICAgLT4gMEUrNjExMSBDbGFtcGVkDQotDQotLS0gbWl4ZWQgd2l0aCB6ZXJvcw0KLWRxbXVsNTQxIG11bHRpcGx5ICAwICAgIC0xICAgICAtPiAtMA0KLWRxbXVsNTQyIG11bHRpcGx5IC0wICAgIC0xICAgICAtPiAgMA0KLWRxbXVsNTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMA0KLWRxbXVsNTQ0IG11bHRpcGx5IC0wICAgICAxICAgICAtPiAtMA0KLWRxbXVsNTQ1IG11bHRpcGx5IC0xICAgICAwICAgICAtPiAtMA0KLWRxbXVsNTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMA0KLWRxbXVsNTQ3IG11bHRpcGx5ICAxICAgICAwICAgICAtPiAgMA0KLWRxbXVsNTQ4IG11bHRpcGx5ICAxICAgIC0wICAgICAtPiAtMA0KLQ0KLWRxbXVsNTUxIG11bHRpcGx5ICAwLjAgIC0xICAgICAtPiAtMC4wDQotZHFtdWw1NTIgbXVsdGlwbHkgLTAuMCAgLTEgICAgIC0+ICAwLjANCi1kcW11bDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMA0KLWRxbXVsNTU0IG11bHRpcGx5IC0wLjAgICAxICAgICAtPiAtMC4wDQotZHFtdWw1NTUgbXVsdGlwbHkgLTEuMCAgIDAgICAgIC0+IC0wLjANCi1kcW11bDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMA0KLWRxbXVsNTU3IG11bHRpcGx5ICAxLjAgICAwICAgICAtPiAgMC4wDQotZHFtdWw1NTggbXVsdGlwbHkgIDEuMCAgLTAgICAgIC0+IC0wLjANCi0NCi1kcW11bDU2MSBtdWx0aXBseSAgMCAgICAtMS4wICAgLT4gLTAuMA0KLWRxbXVsNTYyIG11bHRpcGx5IC0wICAgIC0xLjAgICAtPiAgMC4wDQotZHFtdWw1NjMgbXVsdGlwbHkgIDAgICAgIDEuMCAgIC0+ICAwLjANCi1kcW11bDU2NCBtdWx0aXBseSAtMCAgICAgMS4wICAgLT4gLTAuMA0KLWRxbXVsNTY1IG11bHRpcGx5IC0xICAgICAwLjAgICAtPiAtMC4wDQotZHFtdWw1NjYgbXVsdGlwbHkgLTEgICAgLTAuMCAgIC0+ICAwLjANCi1kcW11bDU2NyBtdWx0aXBseSAgMSAgICAgMC4wICAgLT4gIDAuMA0KLWRxbXVsNTY4IG11bHRpcGx5ICAxICAgIC0wLjAgICAtPiAtMC4wDQotDQotZHFtdWw1NzEgbXVsdGlwbHkgIDAuMCAgLTEuMCAgIC0+IC0wLjAwDQotZHFtdWw1NzIgbXVsdGlwbHkgLTAuMCAgLTEuMCAgIC0+ICAwLjAwDQotZHFtdWw1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwDQotZHFtdWw1NzQgbXVsdGlwbHkgLTAuMCAgIDEuMCAgIC0+IC0wLjAwDQotZHFtdWw1NzUgbXVsdGlwbHkgLTEuMCAgIDAuMCAgIC0+IC0wLjAwDQotZHFtdWw1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwDQotZHFtdWw1NzcgbXVsdGlwbHkgIDEuMCAgIDAuMCAgIC0+ICAwLjAwDQotZHFtdWw1NzggbXVsdGlwbHkgIDEuMCAgLTAuMCAgIC0+IC0wLjAwDQotDQotDQotLS0gU3BlY2lhbHMNCi1kcW11bDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw1ODEgbXVsdGlwbHkgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNTgyIG11bHRpcGx5ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcW11bDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDU4NCBtdWx0aXBseSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDU4NSBtdWx0aXBseSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFtdWw1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNTg3IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1kcW11bDU4OCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNTkwIG11bHRpcGx5IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDU5MSBtdWx0aXBseSAtMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDU5MyBtdWx0aXBseSAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFtdWw1OTQgbXVsdGlwbHkgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1kcW11bDYwMCBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFtdWw2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNjAyIG11bHRpcGx5IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1kcW11bDYwMyBtdWx0aXBseSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDYwNSBtdWx0aXBseSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotZHFtdWw2MDYgbXVsdGlwbHkgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcW11bDYwOCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw2MDkgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbXVsNjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcW11bDYxMSBtdWx0aXBseSAtMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDYxMiBtdWx0aXBseSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZHFtdWw2MTQgbXVsdGlwbHkgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbXVsNjE1IG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi0NCi1kcW11bDYyMSBtdWx0aXBseSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxbXVsNjIyIG11bHRpcGx5ICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFtdWw2MjMgbXVsdGlwbHkgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcW11bDYyNCBtdWx0aXBseSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxbXVsNjI1IG11bHRpcGx5ICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFtdWw2MjYgbXVsdGlwbHkgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcW11bDYyNyBtdWx0aXBseSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxbXVsNjI4IG11bHRpcGx5ICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFtdWw2MjkgbXVsdGlwbHkgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1kcW11bDYzMCBtdWx0aXBseSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjMxIG11bHRpcGx5IC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFtdWw2MzIgbXVsdGlwbHkgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcW11bDYzMyBtdWx0aXBseSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjM0IG11bHRpcGx5ICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFtdWw2MzUgbXVsdGlwbHkgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1kcW11bDYzNiBtdWx0aXBseSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxbXVsNjM3IG11bHRpcGx5ICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFtdWw2NDEgbXVsdGlwbHkgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDIgbXVsdGlwbHkgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDQgbXVsdGlwbHkgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDUgbXVsdGlwbHkgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDcgbXVsdGlwbHkgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDggbXVsdGlwbHkgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTAgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTEgbXVsdGlwbHkgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTMgbXVsdGlwbHkgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTQgbXVsdGlwbHkgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTYgbXVsdGlwbHkgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTcgbXVsdGlwbHkgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NTkgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxbXVsNjYxIG11bHRpcGx5ICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KLWRxbXVsNjYyIG11bHRpcGx5ICBOYU44ICA5OTkgICAtPiAgTmFOOA0KLWRxbXVsNjYzIG11bHRpcGx5ICBOYU43MSBJbmYgICAtPiAgTmFONzENCi1kcW11bDY2NCBtdWx0aXBseSAgTmFONiAgTmFONSAgLT4gIE5hTjYNCi1kcW11bDY2NSBtdWx0aXBseSAtSW5mICAgTmFONCAgLT4gIE5hTjQNCi1kcW11bDY2NiBtdWx0aXBseSAtOTk5ICAgTmFOMzMgLT4gIE5hTjMzDQotZHFtdWw2NjcgbXVsdGlwbHkgIEluZiAgIE5hTjIgIC0+ICBOYU4yDQotDQotZHFtdWw2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjcyIG11bHRpcGx5ICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY3MyBtdWx0aXBseSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjc1IG11bHRpcGx5ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY3NiBtdWx0aXBseSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjc4IG11bHRpcGx5ICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY3OSBtdWx0aXBseSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFtdWw2ODEgbXVsdGlwbHkgLU5hTjkgLUluZiAgIC0+IC1OYU45DQotZHFtdWw2ODIgbXVsdGlwbHkgLU5hTjggIDk5OSAgIC0+IC1OYU44DQotZHFtdWw2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQ0KLWRxbXVsNjg0IG11bHRpcGx5IC1OYU42IC1OYU41ICAtPiAtTmFONg0KLWRxbXVsNjg1IG11bHRpcGx5IC1JbmYgIC1OYU40ICAtPiAtTmFONA0KLWRxbXVsNjg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMNCi1kcW11bDY4NyBtdWx0aXBseSAgSW5mICAtTmFOMiAgLT4gLU5hTjINCi0NCi1kcW11bDY5MSBtdWx0aXBseSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTIgbXVsdGlwbHkgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjkzIG11bHRpcGx5IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY5NCBtdWx0aXBseSAtc05hTjE2IC1zTmFOOTQgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTUgbXVsdGlwbHkgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjk2IG11bHRpcGx5IC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDY5NyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw2OTggbXVsdGlwbHkgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNjk5IG11bHRpcGx5IC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcW11bDcwMSBtdWx0aXBseSAtTmFOICAtSW5mICAgLT4gLU5hTg0KLWRxbXVsNzAyIG11bHRpcGx5IC1OYU4gICA5OTkgICAtPiAtTmFODQotZHFtdWw3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4NCi1kcW11bDcwNCBtdWx0aXBseSAtTmFOICAtTmFOICAgLT4gLU5hTg0KLWRxbXVsNzA1IG11bHRpcGx5IC1JbmYgIC1OYU4wICAtPiAtTmFODQotZHFtdWw3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4NCi1kcW11bDcwNyBtdWx0aXBseSAgSW5mICAtTmFOICAgLT4gLU5hTg0KLQ0KLWRxbXVsNzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw3MTIgbXVsdGlwbHkgLXNOYU4gICAtMTEgICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxMyBtdWx0aXBseSAtc05hTjAwICBOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw3MTUgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxNiBtdWx0aXBseSAtSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsNzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFtdWw3MTggbXVsdGlwbHkgIEluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW11bDcxOSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KLS0tIHNpZ25zDQotZHFtdWw3NTEgbXVsdGlwbHkgIDFlKzQyNzcgIDFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzUyIG11bHRpcGx5ICAxZSs0Mjc3IC0xZSszMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDc1MyBtdWx0aXBseSAtMWUrNDI3NyAgMWUrMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NTQgbXVsdGlwbHkgLTFlKzQyNzcgLTFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzU1IG11bHRpcGx5ICAxZS00Mjc3ICAxZS0zMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDc1NiBtdWx0aXBseSAgMWUtNDI3NyAtMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw3NTcgbXVsdGlwbHkgLTFlLTQyNzcgIDFlLTMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsNzU4IG11bHRpcGx5IC0xZS00Mjc3IC0xZS0zMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1kcW11bDc2MCBtdWx0aXBseSAxZS02MDY5IDFlLTEwMSAtPiAxRS02MTcwIFN1Ym5vcm1hbA0KLWRxbXVsNzYxIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsDQotZHFtdWw3NjIgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDMgLT4gMUUtNjE3MiBTdWJub3JtYWwNCi1kcW11bDc2MyBtdWx0aXBseSAxZS02MDY5IDFlLTEwNCAtPiAxRS02MTczIFN1Ym5vcm1hbA0KLWRxbXVsNzY0IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsDQotZHFtdWw3NjUgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDYgLT4gMUUtNjE3NSBTdWJub3JtYWwNCi1kcW11bDc2NiBtdWx0aXBseSAxZS02MDY5IDFlLTEwNyAtPiAxRS02MTc2IFN1Ym5vcm1hbA0KLWRxbXVsNzY3IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsNzY4IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsNzY5IG11bHRpcGx5IDFlLTYwNjkgMWUtMTEwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1kcW11bDc3MCBtdWx0aXBseSAxZSs0MCAxZSs2MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQNCi1kcW11bDc3MSBtdWx0aXBseSAxZSs0MCAxZSs2MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZA0KLWRxbXVsNzcyIG11bHRpcGx5IDFlKzQwIDFlKzYxMDMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZA0KLWRxbXVsNzczIG11bHRpcGx5IDFlKzQwIDFlKzYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQNCi1kcW11bDc3NCBtdWx0aXBseSAxZSs0MCAxZSs2MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzc1IG11bHRpcGx5IDFlKzQwIDFlKzYxMDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NzYgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDc3NyBtdWx0aXBseSAxZSs0MCAxZSs2MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbXVsNzc4IG11bHRpcGx5IDFlKzQwIDFlKzYxMDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw3NzkgbXVsdGlwbHkgMWUrNDAgMWUrNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcW11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsDQotZHFtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS02MTcyICAgMWUtMSAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxbXVsODAzIG11bHRpcGx5ICAxLjAwRS02MTcyICAgIDFlLTIgIC0+IDEuMDBFLTYxNzQgICBTdWJub3JtYWwNCi1kcW11bDgwNCBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS0zICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsDQotZHFtdWw4MDUgbXVsdGlwbHkgIDEuMEUtNjE3MiAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcW11bDgwNiBtdWx0aXBseSAgMS4zRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODA3IG11bHRpcGx5ICAxLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MDggbXVsdGlwbHkgIDEuN0UtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgwOSBtdWx0aXBseSAgMi4zRS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODEwIG11bHRpcGx5ICAyLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTEgbXVsdGlwbHkgIDIuN0UtNjE3MiAgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgxMiBtdWx0aXBseSAgMS40OUUtNjE3MiAgICAxZS00ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODEzIG11bHRpcGx5ICAxLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgxNSBtdWx0aXBseSAgMi40OUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODE2IG11bHRpcGx5ICAyLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTYxNzIgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcW11bDgxOCBtdWx0aXBseSAgMUUtNjE3MiAgICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwNCi1kcW11bDgxOSBtdWx0aXBseSAgM0UtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw4MjAgbXVsdGlwbHkgIDVFLTYxNzIgICAgICAgMWUtNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbXVsODIxIG11bHRpcGx5ICA3RS02MTcyICAgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MjIgbXVsdGlwbHkgIDlFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgyMyBtdWx0aXBseSAgOS45RS02MTcyICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxbXVsODI0IG11bHRpcGx5ICAxRS02MTcyICAgICAgLTFlLTQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbA0KLWRxbXVsODI1IG11bHRpcGx5ICAzRS02MTcyICAgICAgLTFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDgyNiBtdWx0aXBseSAtNUUtNjE3MiAgICAgICAxZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFtdWw4MjcgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW11bDgyOCBtdWx0aXBseSAtOUUtNjE3MiAgICAgICAxZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbXVsODI5IG11bHRpcGx5ICA5LjlFLTYxNzIgICAgLTFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFtdWw4MzAgbXVsdGlwbHkgIDMuMEUtNjE3MiAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRxbXVsODMxIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcW11bDgzMiBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0xOTkgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxbXVsODMzIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OCAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsDQotZHFtdWw4MzQgbXVsdGlwbHkgIDIuMEUtNTk3NyAgICAgMmUtMTk4IC0+IDQuMEUtNjE3NSAgICBTdWJub3JtYWwNCi1kcW11bDgzNSBtdWx0aXBseSAgNC4wRS01OTc3ICAgICA0ZS0xOTggLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbA0KLWRxbXVsODM2IG11bHRpcGx5IDEwLjBFLTU5NzcgICAgMTBlLTE5OCAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQotZHFtdWw4MzcgbXVsdGlwbHkgMzAuMEUtNTk3NyAgICAzMGUtMTk4IC0+IDkuMDAwRS02MTczICBTdWJub3JtYWwNCi1kcW11bDgzOCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjYgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbA0KLWRxbXVsODM5IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NSAtPiAxLjYwMDBFLTYxNDQgU3Vibm9ybWFsDQotZHFtdWw4NDAgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY0IC0+IDEuNjAwMEUtNjE0Mw0KLQ0KLS0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KLWRxbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzYxNDMgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1kcW11bDg3MSBtdWx0aXBseSAxMDAgLTkuOTk5RSs2MTQzICAgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZHFtdWw4NzIgbXVsdGlwbHkgICAgICA5Ljk5OUUrNjE0MyAxMDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWRxbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzYxNDMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRxbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg4MyBtdWx0aXBseSAgMS4yM0UtNjEzMyAgMS4yM0UtNDAgICAgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWRxbXVsODg0IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbA0KLWRxbXVsODg1IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTYxNzQgIFN1Ym5vcm1hbA0KLWRxbXVsODg2IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQyICAgICAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFtdWw4ODcgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1kcW11bDg4OCBtdWx0aXBseSAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWRxbXVsODg5IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQzICAgICAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZHFtdWw4OTAgbXVsdGlwbHkgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLWRxbXVsODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgIDEuMjM0RS02MTMzIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kcW11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgICAxLjIzNEUtNjEzMyAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4OTQgbXVsdGlwbHkgIDEuMjM0NTZFLTQwICAxLjIzNEUtNjEzMyAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHFtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdw0KLS0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KLWRxbXVsOTA2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMNCi1kcW11bDkwNyBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLS0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQotZHFtdWw5MDggbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLQ0KLS0tIGh1Z2VzdA0KLWRxbXVsOTA5IG11bHRpcGx5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjcgSW5leGFjdCBSb3VuZGVkDQotLS0gVkcgY2FzZQ0KLWRxbXVsOTEwIG11bHRpcGx5IDguODExMjUwMDAwMDAwMDEzNDk0MzZFLTE1NDggOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcgUm91bmRlZA0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLXByZWNpc2lvbjogICAzNA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1kcW11bDkxMSAgbXVsdGlwbHkgMTMwRS0yICAxMjBFLTIgLT4gMS41NjAwDQotZHFtdWw5MTIgIG11bHRpcGx5IDEzMEUtMiAgMTJFLTEgIC0+IDEuNTYwDQotZHFtdWw5MTMgIG11bHRpcGx5IDEzMEUtMiAgMUUwICAgIC0+IDEuMzANCi1kcW11bDkxNCAgbXVsdGlwbHkgMUUyICAgICAxRTQgICAgLT4gMUUrNg0KLQ0KLS0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzDQotZHFtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMA0KLWRxbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwDQotZHFtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwDQotZHFtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMA0KLWRxbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwDQotZHFtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwDQotZHFtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRxbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwDQotZHFtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwDQotZHFtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRxbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwDQotZHFtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwDQotZHFtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDE2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDE3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAxOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAxOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDIwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMA0KLWRxbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwDQotZHFtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwDQotZHFtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMA0KLWRxbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwDQotZHFtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwDQotZHFtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRxbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwDQotZHFtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwDQotZHFtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRxbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZHFtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZHFtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDM2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMzcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwMzggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTAzOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwNDAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTA0MSBtdWx0aXBseSAgMTAwICAgIDAuMSAgICAgICAgICAgICAgLT4gMTAuMA0KLWRxbXVsMTA0MiBtdWx0aXBseSAgMTAwICAgIDEgICAgICAgICAgICAgICAgLT4gMTAwDQotZHFtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwDQotZHFtdWwxMDQ0IG11bHRpcGx5ICAxMDAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMA0KLWRxbXVsMTA0NSBtdWx0aXBseSAgMTAwICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwDQotZHFtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwDQotZHFtdWwxMDQ3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMA0KLWRxbXVsMTA0OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwDQotZHFtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwDQotZHFtdWwxMDUwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMA0KLWRxbXVsMTA1MSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQotZHFtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQotZHFtdWwxMDUzIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA1NCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQotDQotZHFtdWwxMDU2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA1NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDU4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA1OSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA2MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwDQotZHFtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMA0KLWRxbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMA0KLWRxbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDANCi1kcW11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRxbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRxbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDANCi1kcW11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRxbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRxbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDANCi1kcW11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRxbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kcW11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTA3NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA3NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwNzggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwNzkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA4MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwDQotZHFtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDANCi1kcW11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMA0KLWRxbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDANCi1kcW11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KLWRxbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KLWRxbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDANCi1kcW11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KLWRxbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KLWRxbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDANCi1kcW11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KLWRxbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KLWRxbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCi1kcW11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KLWRxbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KLQ0KLWRxbXVsMTA5NiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDk3IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMDk4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW11bDEwOTkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFtdWwxMTAwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi1kcW11bDExMDcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDANCi1kcW11bDExMDggbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDANCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFtdWw5OTkwIG11bHRpcGx5IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTXVsdGlwbHkuZGVjVGVzdCAtLSBkZWNRdWFkIG11bHRpcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNRdWFkcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbXVsMDAwIG11bHRpcGx5IDIgICAgICAyIC0+IDQKK2RxbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYKK2RxbXVsMDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUKK2RxbXVsMDAzIG11bHRpcGx5IDUgICAgICAyIC0+IDEwCitkcW11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwCitkcW11bDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwCitkcW11bDAwNiBtdWx0aXBseSAxLjIwICAtMiAtPiAtMi40MAorZHFtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDAKK2RxbXVsMDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwCitkcW11bDAwOSBtdWx0aXBseSAtMS4yMCAtMiAtPiAyLjQwCitkcW11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkKK2RxbXVsMDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjAKK2RxbXVsMDEyIG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkcW11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcW11bDAxNSBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorZHFtdWwwMTYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFtdWwwMTggbXVsdGlwbHkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFtdWwwMTkgbXVsdGlwbHkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSB6ZXJvcywgZXRjLgorZHFtdWwwMjEgbXVsdGlwbHkgIDAgICAgICAwICAgICAtPiAgMAorZHFtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMAorZHFtdWwwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMAorZHFtdWwwMjQgbXVsdGlwbHkgLTAgICAgIC0wICAgICAtPiAgMAorZHFtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZHFtdWwwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZHFtdWwwMjcgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZHFtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorZHFtdWwwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMAorZHFtdWwwMzEgbXVsdGlwbHkgIDAwLjAwICAwLjAwMCAtPiAgMC4wMDAwMAorZHFtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxbXVsMDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcW11bDAzNCBtdWx0aXBseSAtNS4wMCAgIDFFLTMgIC0+IC0wLjAwNTAwCitkcW11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwCitkcW11bDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwMzcgbXVsdGlwbHkgLTBFLTMgICAwMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDAKK2RxbXVsMDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDAKK2RxbXVsMDQwIG11bHRpcGx5ICAwMC4wMCAtMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcW11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFtdWwwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMAorZHFtdWwwNDMgbXVsdGlwbHkgLTAwLjAwIC0wLjAwMCAtPiAgMC4wMDAwMAorZHFtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxbXVsMDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RxbXVsMDUwIG11bHRpcGx5IDEuMjAgMyAgICAgICAgLT4gMy42MAorZHFtdWwwNTEgbXVsdGlwbHkgNyAgICAzICAgICAgICAtPiAyMQorZHFtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyCitkcW11bDA1MyBtdWx0aXBseSAwLjkgIC0wICAgICAgIC0+IC0wLjAKK2RxbXVsMDU0IG11bHRpcGx5IDY1NDMyMSA2NTQzMjEgLT4gNDI4MTM1OTcxMDQxCisKK2RxbXVsMDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkKK2RxbXVsMDYxIG11bHRpcGx5IDEyMy40NSAxZTggIC0+ICAxLjIzNDVFKzEwCitkcW11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQorZHFtdWwwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTIKK2RxbXVsMDY0IG11bHRpcGx5IDEyMy40NSAxZTExIC0+ICAxLjIzNDVFKzEzCitkcW11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNAorZHFtdWwwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcW11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxbXVsMDg0IG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFtdWwwOTAgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcW11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZHFtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODEKK2RxbXVsMTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK2RxbXVsMTAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorZHFtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDAKK2RxbXVsMTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK2RxbXVsMTA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorZHFtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDAKK2RxbXVsMTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK2RxbXVsMTA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAorZHFtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAKK2RxbXVsMTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKK2RxbXVsMTEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAorZHFtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAKK2RxbXVsMTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RxbXVsMTE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAorLS1kcW11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcW11bDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZHFtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQorZHFtdWwxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwCitkcW11bDEzMyBtdWx0aXBseSAzIDMwMCAgIC0+IDkwMAorZHFtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMAorZHFtdWwxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwCitkcW11bDEzNiBtdWx0aXBseSAzIDMwMDAwMCAgIC0+IDkwMDAwMAorZHFtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMAorZHFtdWwxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwCitkcW11bDEzOSBtdWx0aXBseSAzIDMwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMAorZHFtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMAorZHFtdWwxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwCitkcW11bDE0MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMAorZHFtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMAorZHFtdWwxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwCitkcW11bDE0NSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMAorZHFtdWwxNDYgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNDcgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE0OCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNDkgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNTAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNTIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxNTMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMjYzIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgyOTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RxbXVsMzAxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5ICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzAzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDUgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA2IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDggbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzA5IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzEwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTEgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzEyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzEzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTQgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzE1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMzE2IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTcgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCitkcW11bDMxOCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCitkcW11bDMxOSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZAorZHFtdWwzMjAgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICBSb3VuZGVkCitkcW11bDMyMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkCitkcW11bDMyMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZAorZHFtdWwzMjMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzQwICBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitkcW11bDUwNCAgbXVsdGlwbHkgIDBFLTQyNjAgMTAwMEUtNDI2MCAgLT4gMEUtNjE3NiBDbGFtcGVkCitkcW11bDUwNSAgbXVsdGlwbHkgIDEwMEUrNDI2MCAwRSs0MjYwICAgLT4gMEUrNjExMSBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RxbXVsNTQxIG11bHRpcGx5ICAwICAgIC0xICAgICAtPiAtMAorZHFtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwCitkcW11bDU0MyBtdWx0aXBseSAgMCAgICAgMSAgICAgLT4gIDAKK2RxbXVsNTQ0IG11bHRpcGx5IC0wICAgICAxICAgICAtPiAtMAorZHFtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wCitkcW11bDU0NiBtdWx0aXBseSAtMSAgICAtMCAgICAgLT4gIDAKK2RxbXVsNTQ3IG11bHRpcGx5ICAxICAgICAwICAgICAtPiAgMAorZHFtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wCisKK2RxbXVsNTUxIG11bHRpcGx5ICAwLjAgIC0xICAgICAtPiAtMC4wCitkcW11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMAorZHFtdWw1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RxbXVsNTU0IG11bHRpcGx5IC0wLjAgICAxICAgICAtPiAtMC4wCitkcW11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMAorZHFtdWw1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjAKK2RxbXVsNTU3IG11bHRpcGx5ICAxLjAgICAwICAgICAtPiAgMC4wCitkcW11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMAorCitkcW11bDU2MSBtdWx0aXBseSAgMCAgICAtMS4wICAgLT4gLTAuMAorZHFtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjAKK2RxbXVsNTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wCitkcW11bDU2NCBtdWx0aXBseSAtMCAgICAgMS4wICAgLT4gLTAuMAorZHFtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjAKK2RxbXVsNTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wCitkcW11bDU2NyBtdWx0aXBseSAgMSAgICAgMC4wICAgLT4gIDAuMAorZHFtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjAKKworZHFtdWw1NzEgbXVsdGlwbHkgIDAuMCAgLTEuMCAgIC0+IC0wLjAwCitkcW11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDAKK2RxbXVsNTczIG11bHRpcGx5ICAwLjAgICAxLjAgICAtPiAgMC4wMAorZHFtdWw1NzQgbXVsdGlwbHkgLTAuMCAgIDEuMCAgIC0+IC0wLjAwCitkcW11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDAKK2RxbXVsNTc2IG11bHRpcGx5IC0xLjAgIC0wLjAgICAtPiAgMC4wMAorZHFtdWw1NzcgbXVsdGlwbHkgIDEuMCAgIDAuMCAgIC0+ICAwLjAwCitkcW11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDAKKworCistLSBTcGVjaWFscworZHFtdWw1ODAgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1ODEgbXVsdGlwbHkgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZHFtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFtdWw1ODMgbXVsdGlwbHkgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDU4NCBtdWx0aXBseSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxbXVsNTg2IG11bHRpcGx5ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxbXVsNTg3IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNTg5IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNTkwIG11bHRpcGx5IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw1OTIgbXVsdGlwbHkgIDAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDU5MyBtdWx0aXBseSAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcW11bDU5NSBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RxbXVsNjAyIG11bHRpcGx5IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYwNSBtdWx0aXBseSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcW11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkcW11bDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYwOCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcW11bDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitkcW11bDYxMSBtdWx0aXBseSAtMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw2MTQgbXVsdGlwbHkgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCitkcW11bDYyMSBtdWx0aXBseSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxbXVsNjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFOCitkcW11bDYyNCBtdWx0aXBseSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxbXVsNjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFOCitkcW11bDYyNyBtdWx0aXBseSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxbXVsNjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW11bDYzMCBtdWx0aXBseSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzMyBtdWx0aXBseSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNiBtdWx0aXBseSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFtdWw2NDEgbXVsdGlwbHkgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQzIG11bHRpcGx5ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDQgbXVsdGlwbHkgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ2IG11bHRpcGx5ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDcgbXVsdGlwbHkgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ5IG11bHRpcGx5ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTAgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjUyIG11bHRpcGx5IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTMgbXVsdGlwbHkgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU1IG11bHRpcGx5ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTYgbXVsdGlwbHkgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU4IG11bHRpcGx5ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTkgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbXVsNjYxIG11bHRpcGx5ICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHFtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkcW11bDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCitkcW11bDY2NCBtdWx0aXBseSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RxbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONAorZHFtdWw2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMworZHFtdWw2NjcgbXVsdGlwbHkgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RxbXVsNjcxIG11bHRpcGx5ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjcyIG11bHRpcGx5ICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc0IG11bHRpcGx5ICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc1IG11bHRpcGx5ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc3IG11bHRpcGx5ICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc4IG11bHRpcGx5ICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFtdWw2ODEgbXVsdGlwbHkgLU5hTjkgLUluZiAgIC0+IC1OYU45CitkcW11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgKK2RxbXVsNjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzEKK2RxbXVsNjg0IG11bHRpcGx5IC1OYU42IC1OYU41ICAtPiAtTmFONgorZHFtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkcW11bDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkcW11bDY4NyBtdWx0aXBseSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZHFtdWw2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTIgbXVsdGlwbHkgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTUgbXVsdGlwbHkgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTggbXVsdGlwbHkgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcW11bDcwMSBtdWx0aXBseSAtTmFOICAtSW5mICAgLT4gLU5hTgorZHFtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4KK2RxbXVsNzAzIG11bHRpcGx5IC1OYU4gICBJbmYgICAtPiAtTmFOCitkcW11bDcwNCBtdWx0aXBseSAtTmFOICAtTmFOICAgLT4gLU5hTgorZHFtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4KK2RxbXVsNzA2IG11bHRpcGx5IC05OTkgIC1OYU4gICAtPiAtTmFOCitkcW11bDcwNyBtdWx0aXBseSAgSW5mICAtTmFOICAgLT4gLU5hTgorCitkcW11bDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTIgbXVsdGlwbHkgLXNOYU4gICAtMTEgICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTUgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTggbXVsdGlwbHkgIEluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RxbXVsNzUxIG11bHRpcGx5ICAxZSs0Mjc3ICAxZSszMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzUyIG11bHRpcGx5ICAxZSs0Mjc3IC0xZSszMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzUzIG11bHRpcGx5IC0xZSs0Mjc3ICAxZSszMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzU0IG11bHRpcGx5IC0xZSs0Mjc3IC0xZSszMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzU1IG11bHRpcGx5ICAxZS00Mjc3ICAxZS0zMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzU2IG11bHRpcGx5ICAxZS00Mjc3IC0xZS0zMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzU3IG11bHRpcGx5IC0xZS00Mjc3ICAxZS0zMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzU4IG11bHRpcGx5IC0xZS00Mjc3IC0xZS0zMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitkcW11bDc2MCBtdWx0aXBseSAxZS02MDY5IDFlLTEwMSAtPiAxRS02MTcwIFN1Ym5vcm1hbAorZHFtdWw3NjEgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDIgLT4gMUUtNjE3MSBTdWJub3JtYWwKK2RxbXVsNzYyIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAzIC0+IDFFLTYxNzIgU3Vibm9ybWFsCitkcW11bDc2MyBtdWx0aXBseSAxZS02MDY5IDFlLTEwNCAtPiAxRS02MTczIFN1Ym5vcm1hbAorZHFtdWw3NjQgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDUgLT4gMUUtNjE3NCBTdWJub3JtYWwKK2RxbXVsNzY1IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA2IC0+IDFFLTYxNzUgU3Vibm9ybWFsCitkcW11bDc2NiBtdWx0aXBseSAxZS02MDY5IDFlLTEwNyAtPiAxRS02MTc2IFN1Ym5vcm1hbAorZHFtdWw3NjcgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDggLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDc2OCBtdWx0aXBseSAxZS02MDY5IDFlLTEwOSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzY5IG11bHRpcGx5IDFlLTYwNjkgMWUtMTEwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZHFtdWw3NzAgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSBDbGFtcGVkCitkcW11bDc3MSBtdWx0aXBseSAxZSs0MCAxZSs2MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZAorZHFtdWw3NzIgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCitkcW11bDc3MyBtdWx0aXBseSAxZSs0MCAxZSs2MTA0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkCitkcW11bDc3NCBtdWx0aXBseSAxZSs0MCAxZSs2MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzUgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc2IG11bHRpcGx5IDFlKzQwIDFlKzYxMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3NyBtdWx0aXBseSAxZSs0MCAxZSs2MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzggbXVsdGlwbHkgMWUrNDAgMWUrNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc5IG11bHRpcGx5IDFlKzQwIDFlKzYxMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2RxbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwKK2RxbXVsODAyIG11bHRpcGx5ICAxLjAwMEUtNjE3MiAgIDFlLTEgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxbXVsODAzIG11bHRpcGx5ICAxLjAwRS02MTcyICAgIDFlLTIgIC0+IDEuMDBFLTYxNzQgICBTdWJub3JtYWwKK2RxbXVsODA0IG11bHRpcGx5ICAxLjBFLTYxNzIgICAgIDFlLTMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxbXVsODA1IG11bHRpcGx5ICAxLjBFLTYxNzIgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcW11bDgwNiBtdWx0aXBseSAgMS4zRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MDcgbXVsdGlwbHkgIDEuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODA4IG11bHRpcGx5ICAxLjdFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgwOSBtdWx0aXBseSAgMi4zRS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTAgbXVsdGlwbHkgIDIuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODExIG11bHRpcGx5ICAyLjdFLTYxNzIgICAgIDFlLTQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMiBtdWx0aXBseSAgMS40OUUtNjE3MiAgICAxZS00ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODE0IG11bHRpcGx5ICAxLjUxRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxNSBtdWx0aXBseSAgMi40OUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODE3IG11bHRpcGx5ICAyLjUxRS02MTcyICAgIDFlLTQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxbXVsODE4IG11bHRpcGx5ICAxRS02MTcyICAgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbAorZHFtdWw4MTkgbXVsdGlwbHkgIDNFLTYxNzIgICAgICAgMWUtNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjAgbXVsdGlwbHkgIDVFLTYxNzIgICAgICAgMWUtNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjEgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODIyIG11bHRpcGx5ICA5RS02MTcyICAgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgyMyBtdWx0aXBseSAgOS45RS02MTcyICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcW11bDgyNCBtdWx0aXBseSAgMUUtNjE3MiAgICAgIC0xZS00ICAtPiAtMUUtNjE3NiAgICBTdWJub3JtYWwKK2RxbXVsODI1IG11bHRpcGx5ICAzRS02MTcyICAgICAgLTFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsODI2IG11bHRpcGx5IC01RS02MTcyICAgICAgIDFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsODI3IG11bHRpcGx5ICA3RS02MTcyICAgICAgLTFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgyOCBtdWx0aXBseSAtOUUtNjE3MiAgICAgICAxZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MjkgbXVsdGlwbHkgIDkuOUUtNjE3MiAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODMwIG11bHRpcGx5ICAzLjBFLTYxNzIgICAgLTFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZHFtdWw4MzEgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MzIgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMTk5IC0+IDFFLTYxNzYgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxbXVsODMzIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OCAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcW11bDgzNCBtdWx0aXBseSAgMi4wRS01OTc3ICAgICAyZS0xOTggLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFtdWw4MzUgbXVsdGlwbHkgIDQuMEUtNTk3NyAgICAgNGUtMTk4IC0+IDEuNjBFLTYxNzQgICBTdWJub3JtYWwKK2RxbXVsODM2IG11bHRpcGx5IDEwLjBFLTU5NzcgICAgMTBlLTE5OCAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsCitkcW11bDgzNyBtdWx0aXBseSAzMC4wRS01OTc3ICAgIDMwZS0xOTggLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFtdWw4MzggbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY2IC0+IDEuNjAwMEUtNjE0NSBTdWJub3JtYWwKK2RxbXVsODM5IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NSAtPiAxLjYwMDBFLTYxNDQgU3Vibm9ybWFsCitkcW11bDg0MCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjQgLT4gMS42MDAwRS02MTQzCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorZHFtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrNjE0MyAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFtdWw4NzEgbXVsdGlwbHkgMTAwIC05Ljk5OUUrNjE0MyAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFtdWw4NzIgbXVsdGlwbHkgICAgICA5Ljk5OUUrNjE0MyAxMDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFtdWw4NzMgbXVsdGlwbHkgICAgIC05Ljk5OUUrNjE0MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZHFtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtNjEzMyAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODgyIG11bHRpcGx5ICAxLjIzNEUtNjEzMyAxLjIzNEUtNDAgICAgLT4gIDEuNTIzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg4MyBtdWx0aXBseSAgMS4yM0UtNjEzMyAgMS4yM0UtNDAgICAgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4ODQgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsCitkcW11bDg4NSBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4yRS00MSAgICAgIC0+ICAxLjQ0RS02MTc0ICBTdWJub3JtYWwKK2RxbXVsODg2IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQyICAgICAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcW11bDg4NyBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZHFtdWw4ODggbXVsdGlwbHkgIDEuM0UtNjEzMyAgIDEuM0UtNDIgICAgICAtPiAgMS43RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODg5IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQzICAgICAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcW11bDg5MCBtdWx0aXBseSAgMS4zRS02MTM0ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK2RxbXVsODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgIDEuMjM0RS02MTMzIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODkyIG11bHRpcGx5ICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODkzIG11bHRpcGx5ICAxLjIzNDVFLTQwICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTQgbXVsdGlwbHkgIDEuMjM0NTZFLTQwICAxLjIzNEUtNjEzMyAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODk2IG11bHRpcGx5ICAxLjIzNDU2RS00MSAgMS4yMzRFLTYxMzMgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93CistLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QKK2RxbXVsOTA2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMKK2RxbXVsOTA3IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZHFtdWw5MDggbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBodWdlc3QKK2RxbXVsOTA5IG11bHRpcGx5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjcgSW5leGFjdCBSb3VuZGVkCistLSBWRyBjYXNlCitkcW11bDkxMCBtdWx0aXBseSA4LjgxMTI1MDAwMDAwMDAxMzQ5NDM2RS0xNTQ4IDguMDAwMDAwMDAwMDAwMDAwMDAwRS0xNTUwIC0+IDcuMDQ5MDAwMDAwMDAwMDEwNzk1NDg4MDAwMDAwMDAwMDAwRS0zMDk3IFJvdW5kZWQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCitkcW11bDkxMSAgbXVsdGlwbHkgMTMwRS0yICAxMjBFLTIgLT4gMS41NjAwCitkcW11bDkxMiAgbXVsdGlwbHkgMTMwRS0yICAxMkUtMSAgLT4gMS41NjAKK2RxbXVsOTEzICBtdWx0aXBseSAxMzBFLTIgIDFFMCAgICAtPiAxLjMwCitkcW11bDkxNCAgbXVsdGlwbHkgMUUyICAgICAxRTQgICAgLT4gMUUrNgorCistLSBwb3dlci1vZi10ZW4gZWRnZSBjYXNlcworZHFtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMAorZHFtdWwxMDAyIG11bHRpcGx5ICAxICAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAKK2RxbXVsMTAwMyBtdWx0aXBseSAgMSAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDA1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTAwNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDA4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTAwOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDExIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTAxMiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE0IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAxNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwMTYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAxNyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAxOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAyMCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwMjEgbXVsdGlwbHkgIDEwICAgICAxICAgICAgICAgICAgICAgIC0+IDEwCitkcW11bDEwMjIgbXVsdGlwbHkgIDEwICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMAorZHFtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwCitkcW11bDEwMjQgbXVsdGlwbHkgIDEwICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwMjUgbXVsdGlwbHkgIDEwICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwMjcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwMjggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwMzAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwMzEgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwMzMgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwMzQgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTAzNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMzcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMzkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNDAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNDEgbXVsdGlwbHkgIDEwMCAgICAwLjEgICAgICAgICAgICAgIC0+IDEwLjAKK2RxbXVsMTA0MiBtdWx0aXBseSAgMTAwICAgIDEgICAgICAgICAgICAgICAgLT4gMTAwCitkcW11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAKK2RxbXVsMTA0NCBtdWx0aXBseSAgMTAwICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTA0NSBtdWx0aXBseSAgMTAwICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTA0NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTA0OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTA1MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTA1MSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTA1MyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1NCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDU2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1OSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDYwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwCitkcW11bDEwNjIgbXVsdGlwbHkgIDEwMDAgICAwLjEgICAgICAgICAgICAgIC0+IDEwMC4wCitkcW11bDEwNjMgbXVsdGlwbHkgIDEwMDAgICAxICAgICAgICAgICAgICAgIC0+IDEwMDAKK2RxbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTA2NSBtdWx0aXBseSAgMTAwMCAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwNjYgbXVsdGlwbHkgIDEwMDAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTA2OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwNjkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTA3MSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwNzIgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3NCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwNzUgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDc2IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNzcgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNzggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwODAgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDgxIG11bHRpcGx5ICAxMDAwMCAgMC4wMDEgICAgICAgICAgICAtPiAxMC4wMDAKK2RxbXVsMTA4MiBtdWx0aXBseSAgMTAwMDAgIDAuMDEgICAgICAgICAgICAgLT4gMTAwLjAwCitkcW11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMAorZHFtdWwxMDg0IG11bHRpcGx5ICAxMDAwMCAgMSAgICAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDg1IG11bHRpcGx5ICAxMDAwMCAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDg3IG11bHRpcGx5ICAxMDAwMCAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDg4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDkwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDkxIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDkzIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk0IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwOTYgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk3IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMTAwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMTA3IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCitkcW11bDExMDggbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKKworLS0gTnVsbCB0ZXN0cworZHFtdWw5OTkwIG11bHRpcGx5IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0TWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0CmluZGV4IDM0ZjM5NTguLjgxNzdiNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0CkBAIC0xLDEyNiArMSwxMjYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcW5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQotZHFuZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQ0KLWRxbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQotZHFuZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KLWRxbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCi1kcW5leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCi1kcW5leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCi1kcW5leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi0NCi1kcW5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQotZHFuZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KLWRxbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KLWRxbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KLWRxbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KLWRxbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KLWRxbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KLWRxbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KLWRxbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KLQ0KLS0tIHVsdHJhLXRpbnkgaW5wdXRzDQotZHFuZXh0bTA2MiBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAtPiAgIDBFLTYxNzYNCi1kcW5leHRtMDY1IG5leHRtaW51cyAtMUUtNjE3NiAgICAgICAgIC0+ICAtMkUtNjE3Ng0KLQ0KLS0tIFplcm9zDQotZHFuZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS02MTc2DQotZHFuZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS02MTc2DQotDQotLS0gc3BlY2lhbHMNCi1kcW5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1kcW5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3DQotZHFuZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTg0KLWRxbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43Nw0KLWRxbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQotZHFuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCi1kcW5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NA0KLWRxbmV4dG0xNzIgbmV4dG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQNCi1kcW5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0DQotZHFuZXh0bTE3NCBuZXh0bWludXMgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gOEUtNjE3Ng0KLWRxbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTYxNzUgICAgICAgICAgICAgICAgIC0+IDkuOEUtNjE3NQ0KLWRxbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcNCi1kcW5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0DQotZHFuZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NA0KLWRxbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQNCi1kcW5leHRtMTgwIG5leHRtaW51cyAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3Ng0KLWRxbmV4dG0xODEgbmV4dG1pbnVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDBFLTYxNzYNCi1kcW5leHRtMTgyIG5leHRtaW51cyAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2DQotDQotZHFuZXh0bTE4MyBuZXh0bWludXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYNCi1kcW5leHRtMTg0IG5leHRtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMkUtNjE3Ng0KLWRxbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0zRS02MTc2DQotZHFuZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gLTEuMUUtNjE3NQ0KLWRxbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS02MTc0DQotZHFuZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTYxNzENCi1kcW5leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHRtMTkxIG5leHRtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU5leHRNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcW5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcW5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1CitkcW5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorCitkcW5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKK2RxbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorCistLSB1bHRyYS10aW55IGlucHV0cworZHFuZXh0bTA2MiBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAtPiAgIDBFLTYxNzYKK2RxbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS02MTc2ICAgICAgICAgLT4gIC0yRS02MTc2CisKKy0tIFplcm9zCitkcW5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtNjE3NgorCistLSBzcGVjaWFscworZHFuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RxbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3CitkcW5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4KK2RxbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3CitkcW5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RxbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0CitkcW5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NAorZHFuZXh0bTE3MiBuZXh0bWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NAorZHFuZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NAorZHFuZXh0bTE3NCBuZXh0bWludXMgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gOEUtNjE3NgorZHFuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLT4gOS44RS02MTc1CitkcW5leHRtMTc2IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3CitkcW5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0CitkcW5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0CitkcW5leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0CitkcW5leHRtMTgwIG5leHRtaW51cyAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTE4MSBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMEUtNjE3NgorZHFuZXh0bTE4MiBuZXh0bWludXMgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE3NgorCitkcW5leHRtMTgzIG5leHRtaW51cyAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTE4NCBuZXh0bWludXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTJFLTYxNzYKK2RxbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0zRS02MTc2CitkcW5leHRtMTg2IG5leHRtaW51cyAgLTEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAtMS4xRS02MTc1CitkcW5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtNjE3NiAgICAgICAgICAgICAgICAtPiAtMS4wMUUtNjE3NAorZHFuZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTYxNzEKK2RxbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRtMTkxIG5leHRtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLUluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK2RxbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFBsdXMuZGVjVGVzdAppbmRleCBhYzNmMDRlLi44YzhlOWNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QKQEAgLTEsMTI0ICsxLDEyNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFOZXh0UGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRxbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KLWRxbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQotZHFuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQotZHFuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQotZHFuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQotZHFuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCi0NCi1kcW5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQNCi1kcW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCi1kcW5leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCi1kcW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQotZHFuZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQotZHFuZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQotZHFuZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQotDQotLS0gWmVyb3MNCi1kcW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtNjE3Ng0KLWRxbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTYxNzYNCi1kcW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtNjE3Ng0KLQ0KLS0tIHNwZWNpYWxzDQotZHFuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkNCi1kcW5leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTg0KLWRxbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1kcW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTg0KLWRxbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcNCi1kcW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQotZHFuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCi1kcW5leHRwMTcxIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NA0KLWRxbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQNCi1kcW5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0DQotZHFuZXh0cDE3NCBuZXh0cGx1cyAgLTlFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtOEUtNjE3Ng0KLWRxbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgLT4gLTkuOEUtNjE3NQ0KLWRxbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcNCi1kcW5leHRwMTc3IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0DQotZHFuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NA0KLWRxbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQNCi1kcW5leHRwMTgwIG5leHRwbHVzICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMEUtNjE3Ng0KLWRxbmV4dHAxODIgbmV4dHBsdXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYNCi0NCi1kcW5leHRwMTgzIG5leHRwbHVzICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQotZHFuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMkUtNjE3Ng0KLWRxbmV4dHAxODUgbmV4dHBsdXMgICAyRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDNFLTYxNzYNCi1kcW5leHRwMTg2IG5leHRwbHVzICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICAxLjFFLTYxNzUNCi1kcW5leHRwMTg3IG5leHRwbHVzICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS02MTc0DQotZHFuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtPiAgMS4wMDAwMUUtNjE3MQ0KLWRxbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHRwMTkxIG5leHRwbHVzICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgSW5maW5pdHkNCi0NCi0tLSBOdWxsIHRlc3RzDQotZHFuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTmV4dFBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworZHFuZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkcW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtNjE3NgorCistLSBzcGVjaWFscworZHFuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NworZHFuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorZHFuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3CitkcW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHRwMTcyIG5leHRwbHVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRwMTc0IG5leHRwbHVzICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC04RS02MTc2CitkcW5leHRwMTc1IG5leHRwbHVzICAtOS45RS02MTc1ICAgICAgICAgICAgICAgIC0+IC05LjhFLTYxNzUKK2RxbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcKK2RxbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQKK2RxbmV4dHAxNzggbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQKK2RxbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQKK2RxbmV4dHAxODAgbmV4dHBsdXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxODEgbmV4dHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTBFLTYxNzYKK2RxbmV4dHAxODIgbmV4dHBsdXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKKworZHFuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMkUtNjE3NgorZHFuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgM0UtNjE3NgorZHFuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAgMS4xRS02MTc1CitkcW5leHRwMTg3IG5leHRwbHVzICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS02MTc0CitkcW5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS02MTcxCitkcW5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHAxOTEgbmV4dHBsdXMgICAxRS02MTQzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZHFuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFRvd2FyZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFRvd2FyZC5kZWNUZXN0CmluZGV4IGU2ZDFlMGIuLjEwN2U3ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QKQEAgLTEsMzc1ICsxLDM3NSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFOZXh0VG93YXJkLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLQ0KLS0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcw0KLWRxbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwDQotZHFuZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTANCi1kcW5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAxMyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0xMCAgLT4gLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAxNiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotDQotLS0tLS0tLSBsaHM9cmhzDQotLS0gZmluaXRlcw0KLWRxbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcNCi1kcW5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03DQotZHFuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUNCi1kcW5leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQ0KLWRxbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTANCi1kcW5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwDQotZHFuZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDANCi1kcW5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMA0KLWRxbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTANCi1kcW5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0DQotZHFuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNA0KLWRxbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQ0KLWRxbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwMDAwMDAwMCAgLTAuMDAgICAgICAgICAgIC0+IC0wRS0xMQ0KLWRxbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQ0KLWRxbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OA0KLWRxbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgNCi1kcW5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0DQotZHFuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDEzMiBuZXh0dG93YXJkICAxRS02MTQzICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAgLT4gICAxRS02MTQzDQotZHFuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFuZXh0dDEzNCBuZXh0dG93YXJkICAxRS02MTc2ICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAgLT4gICAxRS02MTc2DQotDQotZHFuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAgLT4gIC0xRS02MTc2DQotZHFuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFuZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAgLT4gIC0xRS02MTQzDQotZHFuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotDQotLS0tLS0tLSBsaHM8cmhzDQotZHFuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQotZHFuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQotZHFuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KLWRxbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQotZHFuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KLWRxbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQotZHFuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KLWRxbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi1kcW5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQotDQotZHFuZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQNCi1kcW5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1DQotZHFuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCi1kcW5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQotZHFuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KLWRxbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KLWRxbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KLWRxbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KLQ0KLS0tIFplcm9zDQotZHFuZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzcGVjaWFscw0KLWRxbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkNCi1kcW5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4NCi1kcW5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDM1NCBuZXh0dG93YXJkICAgTmFONzcgIEluZmluaXR5IC0+ICBOYU43Nw0KLWRxbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTg0KLWRxbmV4dHQzNTcgbmV4dHRvd2FyZCAtc05hTiAgICBJbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3DQotZHFuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQotZHFuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCi1kcW5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NA0KLWRxbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC04RS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtNjE3NSAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOEUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRxbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZHFuZXh0dDM4MyBuZXh0dG93YXJkICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzg0IG5leHR0b3dhcmQgICAxRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODUgbmV4dHRvd2FyZCAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM4NiBuZXh0dG93YXJkICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Mzg3IG5leHR0b3dhcmQgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS02MTc0ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQzODggbmV4dHRvd2FyZCAgIDEwMDAwMEUtNjE3NiAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTYxNzEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDM4OSBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCi1kcW5leHR0MzkwIG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHQzOTEgbmV4dHRvd2FyZCAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQotZHFuZXh0dDM5MiBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCi1kcW5leHR0MzkzIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQzOTQgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0tLS0tLSBsaHM+cmhzDQotZHFuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLWRxbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCi1kcW5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQotZHFuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KLWRxbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCi1kcW5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQotZHFuZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQotZHFuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQotZHFuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQotZHFuZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQotZHFuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQotZHFuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQotZHFuZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQotZHFuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQotZHFuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQotDQotZHFuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KLWRxbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCi1kcW5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQotZHFuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCi1kcW5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCi1kcW5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCi1kcW5leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCi1kcW5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCi1kcW5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCi1kcW5leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCi1kcW5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCi1kcW5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCi1kcW5leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCi1kcW5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCi0NCi0tLSBaZXJvcw0KLWRxbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzcGVjaWFscw0KLWRxbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQ0KLWRxbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4NCi1kcW5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcNCi1kcW5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFODQotZHFuZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3DQotZHFuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1kcW5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NA0KLWRxbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0DQotZHFuZXh0dDY3MiBuZXh0dG93YXJkICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA4RS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTYxNzUgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOS44RS02MTc1ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY4MSBuZXh0dG93YXJkICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMEUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFuZXh0dDY4MiBuZXh0dG93YXJkICAyRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxbmV4dHQ2ODMgbmV4dHRvd2FyZCAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njg0IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMkUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY4NSBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2ODYgbmV4dHRvd2FyZCAgLTEwRS02MTc2ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0Njg3IG5leHR0b3dhcmQgIC0xMDBFLTYxNzYgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMUUtNjE3NCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDY4OCBuZXh0dG93YXJkICAtMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTYxNzEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ2ODkgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHQ2OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHQ2OTEgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KLWRxbmV4dHQ2OTIgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ2OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtSW5maW5pdHkgIC0+IC1JbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tLS0tLS0gU3BlY2lhbHMNCi1kcW5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWRxbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQotZHFuZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1kcW5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kcW5leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotDQotZHFuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQotZHFuZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcW5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCi1kcW5leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRxbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHFuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCi1kcW5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFuZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFODQotZHFuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFuZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFODQotZHFuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFuZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFODQotZHFuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFuZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZHFuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcW5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZHFuZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWRxbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kcW5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZHFuZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWRxbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kcW5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZHFuZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWRxbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZHFuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kcW5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWRxbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcW5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKworLS0gU2FuaXR5IGNoZWNrIHdpdGggYSBzY2F0dGVyaW5nIG9mIG51bWVyaWNzCitkcW5leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMAorZHFuZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTAKK2RxbmV4dHQwMDMgbmV4dHRvd2FyZCAgIDEgICAgIDEwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAwNiBuZXh0dG93YXJkICAtMSAgICAtMTAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTMgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtMTAgIC0+IC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTYgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKworLS0tLS0tLSBsaHM9cmhzCistLSBmaW5pdGVzCitkcW5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3CitkcW5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03CitkcW5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQorZHFuZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUKK2RxbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKK2RxbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKK2RxbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwCitkcW5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAorCistLSB6ZXJvcworZHFuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAorZHFuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMAorZHFuZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAorZHFuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAorZHFuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExCitkcW5leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMDAwMDAwMDAgIC0wLjAwICAgICAgICAgICAtPiAtMEUtMTEKK2RxbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQorZHFuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcW5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4CitkcW5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4CitkcW5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0CitkcW5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcW5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgIC0+ICAgMUUtNjE0MworZHFuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcW5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgICAtPiAgIDFFLTYxNzYKKworZHFuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAgLT4gIC0xRS02MTc2CitkcW5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgIC0+ICAtMUUtNjE0MworZHFuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tLS0tLS0gbGhzPHJocworZHFuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAorZHFuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCitkcW5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCisKK2RxbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcW5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1CitkcW5leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDIyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0dDIzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0dDIzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0dDIzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorCistLSBaZXJvcworZHFuZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RxbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKK2RxbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCitkcW5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3CitkcW5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgorZHFuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NworZHFuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHR0MzcyIG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc1IG5leHR0b3dhcmQgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05LjhFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzgxIG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxbmV4dHQzODMgbmV4dHRvd2FyZCAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg0IG5leHR0b3dhcmQgICAxRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODYgbmV4dHRvd2FyZCAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg3IG5leHR0b3dhcmQgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS02MTc0ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODkgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0MzkwIG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQzOTIgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0CitkcW5leHR0MzkzIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAgSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLSBsaHM+cmhzCitkcW5leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcW5leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1CitkcW5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0NDEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0NDEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0NDE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0NDE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorCitkcW5leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHQ0MzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHQ0MzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHQ0MzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKK2RxbmV4dHQ0MzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorCistLSBaZXJvcworZHFuZXh0dDUwMCBuZXh0dG93YXJkIC0wICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwMyBuZXh0dG93YXJkIC0wLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNiBuZXh0dG93YXJkICAwRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkcW5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQorZHFuZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTgorZHFuZXh0dDU1MyBuZXh0dG93YXJkICBzTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcKK2RxbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDU1NiBuZXh0dG93YXJkICAtTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTgorZHFuZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcKK2RxbmV4dHQ1NTkgbmV4dHRvd2FyZCAtc05hTjg4ICAgLUluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0dDY3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NjczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA4RS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTYxNzUgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc2IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njc5IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbmV4dHQ2ODIgbmV4dHRvd2FyZCAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDFFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKKworZHFuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4NCBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4NSBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4NyBuZXh0dG93YXJkICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4OCBuZXh0dG93YXJkICAtMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTYxNzEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0NjkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQ2OTEgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC1JbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0NjkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLSBTcGVjaWFscworZHFuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworZHFuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW5leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFuZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcW5leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFOCitkcW5leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFuZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFOCitkcW5leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFuZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFuZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFuZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFuZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFuZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFuZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFuZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFuZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFuZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RxbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFuZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFuZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK2RxbmV4dHQ5MDAgbmV4dHRvd2FyZCAxICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFPci5kZWNUZXN0CmluZGV4IGRhYTNjODYuLjFmZDM0YjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdApAQCAtMSw0MDEgKzEsNDAxIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcU9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZHFvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KLWRxb3IwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi1kcW9yMDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQotZHFvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KLWRxb3IwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTANCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KLWRxb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotZHFvcjAwNyBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFvcjAwOCBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFvcjAxMCBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kcW9yMDExIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcW9yMDEzIG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi1kcW9yNjAxIG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MDIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwMyBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjA0IG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MDUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwNiBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjA3IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MDggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYwOSBvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjEwIG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxMiBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjEzIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxNSBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjE2IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYxOCBvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjE5IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MjAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyMSBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjIyIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MjMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjI1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MjYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYyNyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjI4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2Mjkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYzMCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjMxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2MzIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjYzMyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjM0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLQ0KLWRxb3I2NDEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY0MiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY0NSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQ2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY0OCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjQ5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1MSBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjUyIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTMgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1NCBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjU1IG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTYgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY1NyBvciAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwIDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEwMTAxMDEwMTAgIC0+IDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTANCi1kcW9yNjU4IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NTkgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2MCBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjYxIG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NjIgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2MyBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjY0IG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NjUgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2NiBvciAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxIDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAwMDEwMTAxMDEgIC0+ICAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDENCi1kcW9yNjY3IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2Njggb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY2OSBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjcwIG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NzEgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY3MiBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjczIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2NzQgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY3NSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCi1kcW9yNjc2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KLQ0KLWRxb3I2ODEgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY4MiBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMDEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjgzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMDExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2ODQgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMDExMTExMDExMTExMTExMTExMTExMTEwMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY4NSBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMDExMTExMTExMTExMTExMDExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjg2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMDExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2ODcgb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDEwMTExMTExMTExMDExMTExMTExMTEwMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY4OCBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTExMTExMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjg5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMTExMTExMDExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTAgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTEwMTExMTExMTExMDExMTEwMTExMTExMTEwICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY5MSBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMDExMDExMTExMTExMDEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjkyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMDAxMTExMTExMTAxMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTMgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTEwMDExMTExMTEwMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExDQotZHFvcjY5NCBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMDExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTENCi1kcW9yNjk1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTAxMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTYgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTEwMTExMTExMDEwMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExDQotZHFvcjY5NyBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTENCi1kcW9yNjk4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAwMTExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQ0KLWRxb3I2OTkgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTEwMTExMTEwMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExDQotZHFvcjcwMCBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTEwMTExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTENCi1kcW9yNzAxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTEwMTAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQ0KLWRxb3I3MDIgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTEwMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExDQotZHFvcjcwMyBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMDEwMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTENCi1kcW9yNzA0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTAxMTEwMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQ0KLWRxb3I3MDUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAwMTExMTExMTEwMTExMTExMTEwMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExDQotZHFvcjcwNiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDEwMTExMTExMDExMTExMTExMDExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTENCi1kcW9yNzA3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTEwMTExMTAxMTExMTExMTAxMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQ0KLWRxb3I3MDggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTEwMTEwMTExMTExMTEwMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExDQotZHFvcjcwOSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTEwMDExMTExMTExMDExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTENCi1kcW9yNzEwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAwMTExMTExMTAxMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQ0KLWRxb3I3MTEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTEwMTExMTEwMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExDQotZHFvcjcxMiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTEwMTExMDExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTENCi1kcW9yNzEzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQ0KLWRxb3I3MTQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQotDQotDQotDQotLS0gICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYNCi1kcW9yMDIwIG9yIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExDQotZHFvcjAyMSBvciAgMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQ0KLWRxb3IwMjIgb3IgICAxMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTENCi1kcW9yMDIzIG9yICAgIDExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExDQotZHFvcjAyNCBvciAgICAgMTExMTExMTExMTExICAgICAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQ0KLWRxb3IwMjUgb3IgICAgICAxMTExMTExMTExMSAgICAgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTENCi1kcW9yMDI2IG9yICAgICAgIDExMTExMTExMTEgICAgICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExDQotZHFvcjAyNyBvciAgICAgICAgMTExMTExMTExICAgICAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQ0KLWRxb3IwMjggb3IgICAgICAgICAxMTExMTExMSAgICAgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTENCi1kcW9yMDI5IG9yICAgICAgICAgIDExMTExMTEgICAgICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExDQotZHFvcjAzMCBvciAgICAgICAgICAgMTExMTExICAgICAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQ0KLWRxb3IwMzEgb3IgICAgICAgICAgICAxMTExMSAgICAgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTENCi1kcW9yMDMyIG9yICAgICAgICAgICAgIDExMTEgICAgICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExDQotZHFvcjAzMyBvciAgICAgICAgICAgICAgMTExICAgICAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQ0KLWRxb3IwMzQgb3IgICAgICAgICAgICAgICAxMSAgICAgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTENCi1kcW9yMDM1IG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxDQotZHFvcjAzNiBvciAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMA0KLQ0KLWRxb3IwNDIgb3IgIDExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDExMTExMTExMTAwMDAwMDANCi1kcW9yMDQzIG9yICAgMTExMTExMTAwMDAwMDAgICAgIDEwMDAwMDAxMDAwMDAwMDAgIC0+ICAxMDExMTExMTEwMDAwMDAwDQotZHFvcjA0NCBvciAgICAxMTExMTEwMDAwMDAwICAgICAxMDAwMDAxMDAwMDAwMDAwICAtPiAgMTAwMTExMTExMDAwMDAwMA0KLWRxb3IwNDUgb3IgICAgIDExMTExMDAwMDAwMCAgICAgMTAwMDAxMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDANCi1kcW9yMDQ2IG9yICAgICAgMTExMTAwMDAwMDAgICAgIDEwMDAxMDAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwDQotZHFvcjA0NyBvciAgICAgICAxMTEwMDAwMDAwICAgICAxMDAxMDAwMDAwMDAwMDAwICAtPiAgMTAwMTAwMTExMDAwMDAwMA0KLWRxb3IwNDggb3IgICAgICAgIDExMDAwMDAwMCAgICAgMTAxMDAwMDAwMDAwMDAwMCAgLT4gIDEwMTAwMDAxMTAwMDAwMDANCi1kcW9yMDQ5IG9yICAgICAgICAgMTAwMDAwMDAgICAgIDExMDAwMDAwMDAwMDAwMDAgIC0+ICAxMTAwMDAwMDEwMDAwMDAwDQotDQotZHFvcjA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMDkyIG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZHFvcjA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1kcW9yMDk1IG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotZHFvcjA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMDk4IG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQotDQotZHFvcjEwMCBvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTENCi1kcW9yMTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExDQotZHFvcjEwMyBvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gIDExMTExMTExMQ0KLWRxb3IxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1kcW9yMTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExDQotZHFvcjEwNiBvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTExMQ0KLWRxb3IxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTENCi1kcW9yMTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQotZHFvcjIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjIyIG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjI1IG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjI4IG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjMxIG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGEgZmV3IHJhbmRvbXMNCi1kcW9yMjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNDIgb3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQotZHFvcjI1MCBvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjUxIG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTIgb3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1MyBvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjU0IG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTUgb3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1NiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjU3IG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNTggb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI1OSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjYwIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNjEgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI2MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjYzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNjQgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI2NSBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1TRC0xDQotZHFvcjI3MCBvciAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjcxIG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNzIgb3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI3MyBvciAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjc0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyNzUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI3NiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjc3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotZHFvcjI4MCBvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjgxIG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDggMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI4MyBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjg0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyODUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI4NiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjg3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotZHFvcjI4OCBvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjg5IG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyOTAgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5MSBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjkyIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3IyOTMgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMjk1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHNpZ25zDQotZHFvcjI5NiBvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5NyBvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjI5OSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMTExMTAwMTExMTAwMTExMTAwMDAxMTAwMDEwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCi1kcW9yMzMxIG9yICAyICAgOS45OTk5OTk5OUUrMTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzMyIG9yICAzICAgMUUtMTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtMTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzM0IG9yICA1ICAgMUUtMTAwOSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzM1IG9yICA2ICAgLTFFLTEwMDkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzM3IG9yICA4ICAgLTFFLTE5OTkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQxIG9yICA5Ljk5OTk5OTk5RSsyOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQyIG9yICAxRS0yOTk5ICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQzIG9yICAxLjAwMDAwMDAwRS0yOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQ0IG9yICAxRS0xMDA5ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQ1IG9yICAtMUUtMTAwOSAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQ2IG9yICAtMS4wMDAwMDAwMEUtMjk5OSAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQ3IG9yICAtMUUtMjk5OSAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzQ4IG9yICAtOS45OTk5OTk5OUUrMjk5OSAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCi1kcW9yMzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzYyIG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzY1IG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzcyIG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzc1IG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yMzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQotZHFvcjc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFvcjgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwMSBvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwNCBvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwNyBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxMCBvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxMyBvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFvcjgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyMiBvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyNSBvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyOCBvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzMSBvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzNCBvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjgzNyBvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFvcjg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcW9yODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxb3I4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFvcjg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2MiBvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2NSBvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2OCBvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3MiBvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3NSBvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3OCBvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4MSBvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4NCBvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFvcjg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcW9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkcW9yMDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCitkcW9yMDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkcW9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCitkcW9yMDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZHFvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rxb3IwMDcgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAwOCBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMTAgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkcW9yMDExIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAxMyBvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworZHFvcjYwMSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjAzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjEyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxNiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxOSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjIxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Mjkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworZHFvcjY0MSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MCBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTEgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjUyIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MyBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTQgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU1IG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1NiBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTcgb3IgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxMDEwMTAxMDEwICAtPiAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwCitkcW9yNjU4IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1OSBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjAgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjYxIG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2MiBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjMgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY0IG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2NSBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjYgb3IgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMSAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxICAtPiAgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxCitkcW9yNjY3IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2OCBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Njkgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjcwIG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3MSBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzIgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjczIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3NCBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzUgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcW9yNjc2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCitkcW9yNjgxIG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMCAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4MiBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMDEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODMgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTEwMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg0IG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTAxMTExMTAxMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4NSBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMDExMTExMTExMTExMTExMDExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODYgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTEwMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg3IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMDExMTExMTExMTAxMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4OCBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTExMTExMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODkgb3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTAxMTExMTExMTEwMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkwIG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMDExMTExMTExMTAxMTExMDExMTExMTExMCAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5MSBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMDExMDExMTExMTExMDEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTIgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTEwMDExMTExMTExMDExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkzIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5NCBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMDExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTUgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTEwMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCitkcW9yNjk2IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQorZHFvcjY5NyBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMDExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTggb3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMDEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCitkcW9yNjk5IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQorZHFvcjcwMCBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTEwMTExMDExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEKK2Rxb3I3MDEgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMDExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCitkcW9yNzAyIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQorZHFvcjcwMyBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMDEwMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEKK2Rxb3I3MDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMDExMTAxMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCitkcW9yNzA1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMDExMTExMTExMDExMTExMTExMDExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQorZHFvcjcwNiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDEwMTExMTExMDExMTExMTExMDExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEKK2Rxb3I3MDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCitkcW9yNzA4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMDExMDExMTExMTExMDExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQorZHFvcjcwOSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTEwMDExMTExMTExMDExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEKK2Rxb3I3MTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDAxMTExMTExMDExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCitkcW9yNzExIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMDExMTExMDExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQorZHFvcjcxMiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTEwMTExMDExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEKK2Rxb3I3MTMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTAxMDExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcW9yNzE0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorCisKKworLS0gICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYKK2Rxb3IwMjAgb3IgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2Rxb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKK2Rxb3IwMjIgb3IgICAxMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKK2Rxb3IwMjMgb3IgICAgMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2Rxb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKK2Rxb3IwMjUgb3IgICAgICAxMTExMTExMTExMSAgICAgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKK2Rxb3IwMjYgb3IgICAgICAgMTExMTExMTExMSAgICAgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2Rxb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKK2Rxb3IwMjggb3IgICAgICAgICAxMTExMTExMSAgICAgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKK2Rxb3IwMjkgb3IgICAgICAgICAgMTExMTExMSAgICAgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2Rxb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKK2Rxb3IwMzEgb3IgICAgICAgICAgICAxMTExMSAgICAgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKK2Rxb3IwMzIgb3IgICAgICAgICAgICAgMTExMSAgICAgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2Rxb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKK2Rxb3IwMzQgb3IgICAgICAgICAgICAgICAxMSAgICAgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKK2Rxb3IwMzUgb3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2Rxb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKKworZHFvcjA0MiBvciAgMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMTExMTExMTExMDAwMDAwMAorZHFvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMAorZHFvcjA0NCBvciAgICAxMTExMTEwMDAwMDAwICAgICAxMDAwMDAxMDAwMDAwMDAwICAtPiAgMTAwMTExMTExMDAwMDAwMAorZHFvcjA0NSBvciAgICAgMTExMTEwMDAwMDAwICAgICAxMDAwMDEwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZHFvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMAorZHFvcjA0NyBvciAgICAgICAxMTEwMDAwMDAwICAgICAxMDAxMDAwMDAwMDAwMDAwICAtPiAgMTAwMTAwMTExMDAwMDAwMAorZHFvcjA0OCBvciAgICAgICAgMTEwMDAwMDAwICAgICAxMDEwMDAwMDAwMDAwMDAwICAtPiAgMTAxMDAwMDExMDAwMDAwMAorZHFvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMAorCitkcW9yMDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkyIG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkcW9yMDk1IG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitkcW9yMDk4IG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgMTExMTExMTExCisKK2Rxb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rxb3IxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTEKK2Rxb3IxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcW9yMjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIyIG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI1IG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI4IG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMxIG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCitkcW9yMjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHFvcjI1MCBvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTEgb3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjUyIG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1MyBvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTQgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU1IG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1NiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTcgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1OSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjAgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjYxIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjY0IG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2NSBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2Rxb3IyNzAgb3IgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjcxIG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3MiBvciAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzMgb3IgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2Rxb3IyODAgb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjgxIG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4MiBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg3IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2Rxb3IyODggb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg5IG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTEgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjkyIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2Rxb3IyOTYgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5NyBvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDExMTEwMDExMTEwMDExMTEwMDAwMTEwMDAxMDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZHFvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzMyIG9yICAzICAgMUUtMTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS0xOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNCBvciAgNSAgIDFFLTEwMDkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM1IG9yICA2ICAgLTFFLTEwMDkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtMTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNyBvciAgOCAgIC0xRS0xOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDEgb3IgIDkuOTk5OTk5OTlFKzI5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0MiBvciAgMUUtMjk5OSAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQzIG9yICAxLjAwMDAwMDAwRS0yOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDQgb3IgIDFFLTEwMDkgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0NSBvciAgLTFFLTEwMDkgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ2IG9yICAtMS4wMDAwMDAwMEUtMjk5OSAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDcgb3IgIC0xRS0yOTk5ICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OTkgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHFvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzYyIG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzY1IG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzcyIG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzc1IG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcW9yNzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwMSBvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNCBvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNyBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMCBvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMyBvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcW9yODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcW9yODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW9yODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QKaW5kZXggZGYxYTE1Yy4uOGFlY2FhYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFQbHVzLmRlY1Rlc3QgLS0gZGVjUXVhZCAwK3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjaw0KLWRxcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTANCi0NCi0tLSBJbmZpbml0aWVzDQotZHFwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCi1kcXBsczAxMiBwbHVzICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBOYU5zLCAwIHBheWxvYWQNCi1kZHFsczAyMSBwbHVzICAgICAgICAgTmFOICAtPiBOYU4NCi1kZHFsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFODQotZGRxbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcWxzMDI0IHBsdXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkDQotZGRxbHMwMzEgcGx1cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCi1kZHFsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMNCi1kZHFsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uDQotZGRxbHMwMzQgcGx1cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcWxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwDQotZGRxbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwDQotZGRxbHMwMzcgcGx1cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRkcWxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZHFwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNw0KLWRxcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03DQotZHFwbHMxMDMgcGx1cyAgICAgICAgIDc1ICAgLT4gNzUNCi1kcXBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUNCi1kcXBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwDQotZHFwbHMxMDYgcGx1cyAgICAgIC03LjUwICAgLT4gLTcuNTANCi1kcXBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMA0KLWRxcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotZHFwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMA0KLWRxcGxzMTEyIHBsdXMgICAgICAgICAtMCAgIC0+IDANCi1kcXBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0DQotZHFwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNA0KLWRxcGxzMTE1IHBsdXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KLWRxcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KLWRxcGxzMTE4IHBsdXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotZHFwbHMxMjEgcGx1cyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCi1kcXBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KLWRxcGxzMTIzIHBsdXMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQotZHFwbHMxMjQgcGx1cyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxcGxzMTMxIHBsdXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFwbHMxMzIgcGx1cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KLWRxcGxzMTMzIHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFwbHMxMzQgcGx1cyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCi0NCi1kcXBsczEzNSBwbHVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbA0KLWRxcGxzMTM2IHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFwbHMxMzcgcGx1cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0Mw0KLWRxcGxzMTM4IHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAreCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RxcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkcWxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRxbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRxbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZHFsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMworZGRxbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZHFsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRxbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZHFsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RxcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcKK2RxcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03CitkcXBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQorZHFwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1CitkcXBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwCitkcXBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MAorZHFwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RxcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZHFwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMAorZHFwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMAorZHFwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNAorZHFwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZHFwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcXBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcXBsczEyMSBwbHVzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxcGxzMTIzIHBsdXMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcXBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFwbHMxMzEgcGx1cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxcGxzMTMyIHBsdXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxcGxzMTMzIHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXBsczEzNCBwbHVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorCitkcXBsczEzNSBwbHVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorZHFwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxcGxzMTM3IHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxcGxzMTM4IHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUXVhbnRpemUuZGVjVGVzdAppbmRleCA0ZWQzOWI0Li41MTQ3MWMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QKQEAgLTEsODM2ICsxLDgzNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFRdWFudGl6ZS5kZWNUZXN0IC0tIGRlY1F1YWQgcXVhbnRpemUgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQ0KLS0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4NCi0tLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZA0KLS0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnDQotLS0gW0ZvcmtlZCBmcm9tIHF1YW50aXplLmRlY1Rlc3QgMjAwNi4xMS4yNV0NCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLWRxcXVhMDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMA0KLWRxcXVhMDAyIHF1YW50aXplIDEgICAgICAgMWUwICAgLT4gMQ0KLWRxcXVhMDAzIHF1YW50aXplIDAuMSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMDYgcXVhbnRpemUgMC4xICAgICAxZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDA3IHF1YW50aXplIDAuMSAgICAxZS0xICAgLT4gMC4xDQotZHFxdWEwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwDQotZHFxdWEwMDkgcXVhbnRpemUgMC4xICAgIDFlLTMgICAtPiAwLjEwMA0KLWRxcXVhMDEwIHF1YW50aXplIDAuOSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMTIgcXVhbnRpemUgMC45ICAgIDFlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDEzIHF1YW50aXplIDAuOSAgICAxZS0xICAgLT4gMC45DQotZHFxdWEwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwDQotZHFxdWEwMTUgcXVhbnRpemUgMC45ICAgIDFlLTMgICAtPiAwLjkwMA0KLS0tIG5lZ2F0aXZlcw0KLWRxcXVhMDIxIHF1YW50aXplIC0wICAgICAgMWUwICAgLT4gLTANCi1kcXF1YTAyMiBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+IC0xDQotZHFxdWEwMjMgcXVhbnRpemUgLTAuMSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAyNSBxdWFudGl6ZSAtMC4xICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDI2IHF1YW50aXplIC0wLjEgICAgMWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMjcgcXVhbnRpemUgLTAuMSAgIDFlLTEgICAtPiAtMC4xDQotZHFxdWEwMjggcXVhbnRpemUgLTAuMSAgIDFlLTIgICAtPiAtMC4xMA0KLWRxcXVhMDI5IHF1YW50aXplIC0wLjEgICAxZS0zICAgLT4gLTAuMTAwDQotZHFxdWEwMzAgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAzMSBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDMyIHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMzMgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45DQotZHFxdWEwMzQgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MA0KLWRxcXVhMDM1IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwDQotZHFxdWEwMzYgcXVhbnRpemUgLTAuNSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTAzNyBxdWFudGl6ZSAtMC41ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDM4IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwMzkgcXVhbnRpemUgLTAuNSAgIDFlLTEgICAtPiAtMC41DQotZHFxdWEwNDAgcXVhbnRpemUgLTAuNSAgIDFlLTIgICAtPiAtMC41MA0KLWRxcXVhMDQxIHF1YW50aXplIC0wLjUgICAxZS0zICAgLT4gLTAuNTAwDQotZHFxdWEwNDIgcXVhbnRpemUgLTAuOSAgIDFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA0MyBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDQ0IHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNDUgcXVhbnRpemUgLTAuOSAgIDFlLTEgICAtPiAtMC45DQotZHFxdWEwNDYgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MA0KLWRxcXVhMDQ3IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwDQotDQotLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uDQotZHFxdWEwNjAgcXVhbnRpemUgMi4xNyAgIDAuMDAxICAtPiAyLjE3MA0KLWRxcXVhMDYxIHF1YW50aXplIDIuMTcgICAwLjAxICAgLT4gMi4xNw0KLWRxcXVhMDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDYzIHF1YW50aXplIDIuMTcgICAxZSswICAgLT4gMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA2NCBxdWFudGl6ZSAyLjE3ICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXF1YTA2NiBxdWFudGl6ZSAyICAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMDY3IHF1YW50aXplIC0wLjEgICAgMSAgICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQ0KLWRxcXVhMDY5IHF1YW50aXplICsxMjM0NTEyMzQ1Njc4OTk4NzY1NDMyMTY3ODkwMTIzNDUuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMDcwIHF1YW50aXplIC05ODc2NTEyMzQ1Njc4OTk4NzY1NDMyMTQzMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMDcxIHF1YW50aXplIDIxNyAgICAxZS0xICAgLT4gMjE3LjANCi1kcXF1YTA3MiBxdWFudGl6ZSAyMTcgICAgMWUrMCAgIC0+IDIxNw0KLWRxcXVhMDczIHF1YW50aXplIDIxNyAgICAxZSsxICAgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDc0IHF1YW50aXplIDIxNyAgICAxZSsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBnZW5lcmFsIHRlc3RzIC4uDQotZHFxdWEwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDkwIHF1YW50aXplIDEyICAgICAxZSszICAgLT4gMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5MSBxdWFudGl6ZSAxMiAgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDkzIHF1YW50aXplIDEuMjM0NSAxZS0yICAgLT4gMS4yMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5NCBxdWFudGl6ZSAxLjIzNTUgMWUtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMA0KLWRxcXVhMDk2IHF1YW50aXplIDkuOTk5OSAxZS0yICAgLT4gMTAuMDAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEwOTcgcXVhbnRpemUgMC4wMDAxIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTA5OSBxdWFudGl6ZSAwLjAwOSAgMWUtMiAgIC0+IDAuMDEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMDAgcXVhbnRpemUgOTIgICAgIDFlKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMTAxIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gIC0xDQotZHFxdWExMDIgcXVhbnRpemUgLTEgICAgIDFlLTEgICAtPiAgLTEuMA0KLWRxcXVhMTAzIHF1YW50aXplIC0xICAgICAxZS0yICAgLT4gIC0xLjAwDQotZHFxdWExMDQgcXVhbnRpemUgIDAgICAgICAxZTAgICAtPiAgMA0KLWRxcXVhMTA1IHF1YW50aXplICAwICAgICAxZS0xICAgLT4gIDAuMA0KLWRxcXVhMTA2IHF1YW50aXplICAwICAgICAxZS0yICAgLT4gIDAuMDANCi1kcXF1YTEwNyBxdWFudGl6ZSAgMC4wMCAgIDFlMCAgIC0+ICAwDQotZHFxdWExMDggcXVhbnRpemUgIDAgICAgIDFlKzEgICAtPiAgMEUrMQ0KLWRxcXVhMTA5IHF1YW50aXplICAwICAgICAxZSsyICAgLT4gIDBFKzINCi1kcXF1YTExMCBxdWFudGl6ZSArMSAgICAgIDFlMCAgIC0+ICAxDQotZHFxdWExMTEgcXVhbnRpemUgKzEgICAgIDFlLTEgICAtPiAgMS4wDQotZHFxdWExMTIgcXVhbnRpemUgKzEgICAgIDFlLTIgICAtPiAgMS4wMA0KLQ0KLWRxcXVhMTIwIHF1YW50aXplICAgMS4wNCAgMWUtMyAtPiAgMS4wNDANCi1kcXF1YTEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQNCi1kcXF1YTEyMiBxdWFudGl6ZSAgIDEuMDQgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEyMyBxdWFudGl6ZSAgIDEuMDQgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MA0KLWRxcXVhMTI1IHF1YW50aXplICAgMS4wNSAgMWUtMiAtPiAgMS4wNQ0KLWRxcXVhMTI2IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMiBxdWFudGl6ZSAgIDEuMDYgIDFlLTMgLT4gIDEuMDYwDQotZHFxdWExMzMgcXVhbnRpemUgICAxLjA2ICAxZS0yIC0+ICAxLjA2DQotZHFxdWExMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMzUgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDANCi1kcXF1YTE0MSBxdWFudGl6ZSAgICsxICAgICAxZS0yICAtPiAgMS4wMA0KLWRxcXVhMTQyIHF1YW50aXplICAgKzEwICAgIDFlLTIgIC0+ICAxMC4wMA0KLWRxcXVhMTQzIHF1YW50aXplICAgMUUrMzcgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTE0NCBxdWFudGl6ZSAgIDFFLTM3ICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0NSBxdWFudGl6ZSAgIDFFLTMgICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQ0KLWRxcXVhMTQ3IHF1YW50aXplICAgMUUtMSAgIDFlLTIgIC0+ICAwLjEwDQotZHFxdWExNDggcXVhbnRpemUgICAwRS0zNyAgMWUtMiAgLT4gIDAuMDANCi0NCi1kcXF1YTE1MCBxdWFudGl6ZSAgIDEuMDYwMCAxZS01IC0+ICAxLjA2MDAwDQotZHFxdWExNTEgcXVhbnRpemUgICAxLjA2MDAgMWUtNCAtPiAgMS4wNjAwDQotZHFxdWExNTIgcXVhbnRpemUgICAxLjA2MDAgMWUtMyAtPiAgMS4wNjAgUm91bmRlZA0KLWRxcXVhMTUzIHF1YW50aXplICAgMS4wNjAwIDFlLTIgLT4gIDEuMDYgUm91bmRlZA0KLWRxcXVhMTU0IHF1YW50aXplICAgMS4wNjAwIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1NSBxdWFudGl6ZSAgIDEuMDYwMCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGEgY291cGxlIHdoZXJlIHJvdW5kaW5nIHdhcyBkaWZmZXJlbnQgaW4gYmFzZSB0ZXN0cw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotZHFxdWExNTcgcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1OCBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE1OSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMNCi1kcXF1YTE2MSBxdWFudGl6ZSAwICAgICAgLTllMCAgIC0+IDANCi1kcXF1YTE2MiBxdWFudGl6ZSAxICAgICAgLTdlMCAgIC0+IDENCi1kcXF1YTE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjUgcXVhbnRpemUgMC4xICAgIDBlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTY2IHF1YW50aXplIDAuMSAgICAgMmUwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQ0KLWRxcXVhMTY4IHF1YW50aXplIDAuMSAgIDQ0ZS0yICAgLT4gMC4xMA0KLWRxcXVhMTY5IHF1YW50aXplIDAuMSAgNTU1ZS0zICAgLT4gMC4xMDANCi1kcXF1YTE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNzEgcXVhbnRpemUgMC45IC03NzdlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcyIHF1YW50aXplIDAuOSAgLTg4ZSswICAgLT4gMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQ0KLWRxcXVhMTc0IHF1YW50aXplIDAuOSAgICAwZS0yICAgLT4gMC45MA0KLWRxcXVhMTc1IHF1YW50aXplIDAuOSAgMS4xZS0zICAgLT4gMC45MDAwDQotLS0gbmVnYXRpdmVzDQotZHFxdWExODEgcXVhbnRpemUgLTAgICAgMS4xZTAgICAtPiAtMC4wDQotZHFxdWExODIgcXVhbnRpemUgLTEgICAgIC0xZTAgICAtPiAtMQ0KLWRxcXVhMTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExODUgcXVhbnRpemUgLTAuMSAxMTFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE4NiBxdWFudGl6ZSAtMC4xICAgNzFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQ0KLWRxcXVhMTg4IHF1YW50aXplIC0wLjEgLS4xZS0yICAgLT4gLTAuMTAwDQotZHFxdWExODkgcXVhbnRpemUgLTAuMSAgLTFlLTMgICAtPiAtMC4xMDANCi1kcXF1YTE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTkxIHF1YW50aXplIC0wLjkgIC0wZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExOTIgcXVhbnRpemUgLTAuOSAtMTBlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkNCi1kcXF1YTE5NCBxdWFudGl6ZSAtMC45IDk5OWUtMiAgIC0+IC0wLjkwDQotDQotLS0gK3ZlIGV4cG9uZW50cyAuLg0KLWRxcXVhMjAxIHF1YW50aXplICAgLTEgICAxZSswIC0+ICAtMQ0KLWRxcXVhMjAyIHF1YW50aXplICAgLTEgICAxZSsxIC0+ICAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDQgcXVhbnRpemUgICAgMCAgIDFlKzAgLT4gIDANCi1kcXF1YTIwNSBxdWFudGl6ZSAgICAwICAgMWUrMSAtPiAgMEUrMQ0KLWRxcXVhMjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyDQotZHFxdWEyMDcgcXVhbnRpemUgICArMSAgIDFlKzAgLT4gIDENCi1kcXF1YTIwOCBxdWFudGl6ZSAgICsxICAgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTIyMCBxdWFudGl6ZSAgIDEuMDQgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMiBxdWFudGl6ZSAgIDEuMDQgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMyBxdWFudGl6ZSAgIDEuMDQgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyNSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyNiBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyOCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyOSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMSBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMiBxdWFudGl6ZSAgIDEuMDYgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzNCBxdWFudGl6ZSAgIDEuMDYgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIzNSBxdWFudGl6ZSAgIDEuMDYgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTI0MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzEgIC0+ICAtMUUrMSBSb3VuZGVkDQotZHFxdWEyNDEgcXVhbnRpemUgICArMSAgICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI0MiBxdWFudGl6ZSAgICsxMCAgIDFlKzEgIC0+ICAxRSsxIFJvdW5kZWQNCi1kcXF1YTI0MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzEgIC0+ICAxRSsxICAgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzEgIC0+ICAxLjAwMEUrNCAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI0OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzEgIC0+ICAxLjAwMDAwMEUrNyAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI1MCBxdWFudGl6ZSAgIDFFKzggIDFlKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi1kcXF1YTI1MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzENCi0tLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcw0KLWRxcXVhMjUyIHF1YW50aXplICAgMUUrMzcgMWUrMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMjUzIHF1YW50aXplICAgMUUtMzcgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyNTQgcXVhbnRpemUgICAxRS0yICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI1NSBxdWFudGl6ZSAgIDBFLTM3IDFlKzEgIC0+ICAwRSsxDQotZHFxdWEyNTYgcXVhbnRpemUgIC0wRS0zNyAxZSsxICAtPiAtMEUrMQ0KLWRxcXVhMjU3IHF1YW50aXplICAtMEUtMSAgMWUrMSAgLT4gLTBFKzENCi1kcXF1YTI1OCBxdWFudGl6ZSAgLTAgICAgIDFlKzEgIC0+IC0wRSsxDQotZHFxdWEyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQ0KLQ0KLWRxcXVhMjYwIHF1YW50aXplICAgLTEwICAgMWUrMiAgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyNjIgcXVhbnRpemUgICArMTAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI2MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzINCi1kcXF1YTI2NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzIgIC0+ICAxLjBFKzMNCi1kcXF1YTI2NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzIgIC0+ICAxLjAwRSs0DQotZHFxdWEyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUNCi1kcXF1YTI2OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzIgIC0+ICAxLjAwMDBFKzYNCi1kcXF1YTI2OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzIgIC0+ICAxLjAwMDAwRSs3DQotZHFxdWEyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgNCi1kcXF1YTI3MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzIgIC0+ICAxLjAwMDAwMDBFKzkNCi1kcXF1YTI3MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzIgIC0+ICAxLjAwMDAwMDAwRSsxMA0KLWRxcXVhMjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyNzQgcXVhbnRpemUgICAxRS0yICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI3NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzIgIC0+ICAwRSsyDQotDQotZHFxdWEyODAgcXVhbnRpemUgICAtMTAgICAxZSszICAtPiAgLTBFKzMgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyODEgcXVhbnRpemUgICArMSAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI4MiBxdWFudGl6ZSAgICsxMCAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjgzIHF1YW50aXplICAgMUUrMSAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyODQgcXVhbnRpemUgICAxRSsyICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI4NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzMgIC0+ICAxRSszDQotZHFxdWEyODYgcXVhbnRpemUgICAxRSs0ICAxZSszICAtPiAgMS4wRSs0DQotZHFxdWEyODcgcXVhbnRpemUgICAxRSs1ICAxZSszICAtPiAgMS4wMEUrNQ0KLWRxcXVhMjg4IHF1YW50aXplICAgMUUrNiAgMWUrMyAgLT4gIDEuMDAwRSs2DQotZHFxdWEyODkgcXVhbnRpemUgICAxRSs3ICAxZSszICAtPiAgMS4wMDAwRSs3DQotZHFxdWEyOTAgcXVhbnRpemUgICAxRSs4ICAxZSszICAtPiAgMS4wMDAwMEUrOA0KLWRxcXVhMjkxIHF1YW50aXplICAgMUUrOSAgMWUrMyAgLT4gIDEuMDAwMDAwRSs5DQotZHFxdWEyOTIgcXVhbnRpemUgICAxRSsxMCAxZSszICAtPiAgMS4wMDAwMDAwRSsxMA0KLWRxcXVhMjkzIHF1YW50aXplICAgMUUtMTAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyOTQgcXVhbnRpemUgICAxRS0yICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTI5NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzMgIC0+ICAwRSszDQotDQotLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0NCi1kcXF1YTMwMCBxdWFudGl6ZSAgIDAuMDA3OCAxZS01IC0+ICAwLjAwNzgwDQotZHFxdWEzMDEgcXVhbnRpemUgICAwLjAwNzggMWUtNCAtPiAgMC4wMDc4DQotZHFxdWEzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMDMgcXVhbnRpemUgICAwLjAwNzggMWUtMiAtPiAgMC4wMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMwNCBxdWFudGl6ZSAgIDAuMDA3OCAxZS0xIC0+ICAwLjAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMwNiBxdWFudGl6ZSAgIDAuMDA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzA3IHF1YW50aXplICAgMC4wMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEzMTAgcXVhbnRpemUgIC0wLjAwNzggMWUtNSAtPiAtMC4wMDc4MA0KLWRxcXVhMzExIHF1YW50aXplICAtMC4wMDc4IDFlLTQgLT4gLTAuMDA3OA0KLWRxcXVhMzEyIHF1YW50aXplICAtMC4wMDc4IDFlLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzEzIHF1YW50aXplICAtMC4wMDc4IDFlLTIgLT4gLTAuMDEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMTQgcXVhbnRpemUgIC0wLjAwNzggMWUtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzE1IHF1YW50aXplICAtMC4wMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMTYgcXVhbnRpemUgIC0wLjAwNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMxNyBxdWFudGl6ZSAgLTAuMDA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMzIwIHF1YW50aXplICAgMC4wNzggMWUtNSAtPiAgMC4wNzgwMA0KLWRxcXVhMzIxIHF1YW50aXplICAgMC4wNzggMWUtNCAtPiAgMC4wNzgwDQotZHFxdWEzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OA0KLWRxcXVhMzIzIHF1YW50aXplICAgMC4wNzggMWUtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMyNCBxdWFudGl6ZSAgIDAuMDc4IDFlLTEgLT4gIDAuMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMjYgcXVhbnRpemUgICAwLjA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzI3IHF1YW50aXplICAgMC4wNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTMzMCBxdWFudGl6ZSAgLTAuMDc4IDFlLTUgLT4gLTAuMDc4MDANCi1kcXF1YTMzMSBxdWFudGl6ZSAgLTAuMDc4IDFlLTQgLT4gLTAuMDc4MA0KLWRxcXVhMzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgNCi1kcXF1YTMzMyBxdWFudGl6ZSAgLTAuMDc4IDFlLTIgLT4gLTAuMDggSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMzQgcXVhbnRpemUgIC0wLjA3OCAxZS0xIC0+IC0wLjEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzM2IHF1YW50aXplICAtMC4wNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTMzNyBxdWFudGl6ZSAgLTAuMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEzNDAgcXVhbnRpemUgICAwLjc4IDFlLTUgLT4gIDAuNzgwMDANCi1kcXF1YTM0MSBxdWFudGl6ZSAgIDAuNzggMWUtNCAtPiAgMC43ODAwDQotZHFxdWEzNDIgcXVhbnRpemUgICAwLjc4IDFlLTMgLT4gIDAuNzgwDQotZHFxdWEzNDMgcXVhbnRpemUgICAwLjc4IDFlLTIgLT4gIDAuNzgNCi1kcXF1YTM0NCBxdWFudGl6ZSAgIDAuNzggMWUtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzQ1IHF1YW50aXplICAgMC43OCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzQ2IHF1YW50aXplICAgMC43OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzQ3IHF1YW50aXplICAgMC43OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMzUwIHF1YW50aXplICAtMC43OCAxZS01IC0+IC0wLjc4MDAwDQotZHFxdWEzNTEgcXVhbnRpemUgIC0wLjc4IDFlLTQgLT4gLTAuNzgwMA0KLWRxcXVhMzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MA0KLWRxcXVhMzUzIHF1YW50aXplICAtMC43OCAxZS0yIC0+IC0wLjc4DQotZHFxdWEzNTQgcXVhbnRpemUgIC0wLjc4IDFlLTEgLT4gLTAuOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM1NiBxdWFudGl6ZSAgLTAuNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM1NyBxdWFudGl6ZSAgLTAuNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTM2MCBxdWFudGl6ZSAgIDcuOCAxZS01IC0+ICA3LjgwMDAwDQotZHFxdWEzNjEgcXVhbnRpemUgICA3LjggMWUtNCAtPiAgNy44MDAwDQotZHFxdWEzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDANCi1kcXF1YTM2MyBxdWFudGl6ZSAgIDcuOCAxZS0yIC0+ICA3LjgwDQotZHFxdWEzNjQgcXVhbnRpemUgICA3LjggMWUtMSAtPiAgNy44DQotZHFxdWEzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM2NiBxdWFudGl6ZSAgIDcuOCAxZSsxIC0+ICAxRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzY3IHF1YW50aXplICAgNy44IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTM3MCBxdWFudGl6ZSAgLTcuOCAxZS01IC0+IC03LjgwMDAwDQotZHFxdWEzNzEgcXVhbnRpemUgIC03LjggMWUtNCAtPiAtNy44MDAwDQotZHFxdWEzNzIgcXVhbnRpemUgIC03LjggMWUtMyAtPiAtNy44MDANCi1kcXF1YTM3MyBxdWFudGl6ZSAgLTcuOCAxZS0yIC0+IC03LjgwDQotZHFxdWEzNzQgcXVhbnRpemUgIC03LjggMWUtMSAtPiAtNy44DQotZHFxdWEzNzUgcXVhbnRpemUgIC03LjggIDFlMCAtPiAtOCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM3NiBxdWFudGl6ZSAgLTcuOCAxZSsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMzc3IHF1YW50aXplICAtNy44IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzNzggcXVhbnRpemUgIC03LjggMWUrMyAtPiAtMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzb21lIGluZGl2aWR1YWxzDQotZHFxdWEzODAgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzODEgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2DQotZHFxdWEzODIgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhMzgzIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTM4NCBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzODUgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNg0KLWRxcXVhMzg2IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTM4NyBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotcm91bmRpbmc6IGRvd24NCi1kcXF1YTM4OSBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm91bmRpbmc6IGhhbGZfdXANCi0NCi0tLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucw0KLWRxcXVhMzkxIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTM5MiBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEzOTMgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyMzQ1NjcuICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHNvbWUgOTk5OSByb3VuZC11cCBjYXNlcw0KLWRxcXVhNDAwIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTUgIC0+ICA5Ljk5OTAwDQotZHFxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MA0KLWRxcXVhNDAyIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTMgIC0+ICA5Ljk5OQ0KLWRxcXVhNDAzIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTIgIC0+IDEwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MDUgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMCAgLT4gMTAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDA2IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTEgIC0+IDFFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE0MTAgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNSAgLT4gIDAuOTk5MDANCi1kcXF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwDQotZHFxdWE0MTIgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMyAgLT4gIDAuOTk5DQotZHFxdWE0MTMgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMiAgLT4gIDEuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQxNSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUwICAtPiAgMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MTYgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhNDIwIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTUgIC0+ICAwLjA5OTkwDQotZHFxdWE0MjEgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNCAgLT4gIDAuMDk5OQ0KLWRxcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQyMyBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0yICAtPiAgMC4xMCAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MjQgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQyNiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkNCi1kcXF1YTQzMSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS00ICAtPiAgMC4wMTAwICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MzIgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMyAgLT4gIDAuMDEwICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQzNCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0MzUgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTQ0MCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS01ICAtPiAgMC4wMDEwMCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDQyIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTMgIC0+ICAwLjAwMSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ0MyBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0yICAtPiAgMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDQ1IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ0NiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWExMDAxIHF1YW50aXplICAwLjAwMCAgICAgICAgMC4wMDEgLT4gIDAuMDAwDQotZHFxdWExMDAyIHF1YW50aXplICAwLjAwMSAgICAgICAgMC4wMDEgLT4gIDAuMDAxDQotZHFxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEwMDQgcXVhbnRpemUgIDAuMDAxOCAgICAgICAwLjAwMSAtPiAgMC4wMDIgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTAwNSBxdWFudGl6ZSAgMC41MDEgICAgICAgIDAuMDAxIC0+ICAwLjUwMQ0KLWRxcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMDA3IHF1YW50aXplICAwLjUwMTggICAgICAgMC4wMDEgLT4gIDAuNTAyICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEwMDggcXVhbnRpemUgIDAuOTk5ICAgICAgICAwLjAwMSAtPiAgMC45OTkNCi0NCi1kcXF1YTQ4MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZA0KLWRxcXVhNDgyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotZHFxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCi1kcXF1YTQ4NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0ODUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotLS0gYSBwb3RlbnRpYWwgZG91YmxlLXJvdW5kDQotZHFxdWE0ODcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE0OTEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQNCi1kcXF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KLWRxcXVhNDkzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQotZHFxdWE0OTQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE0OTYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDk3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFplcm9zDQotZHFxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzENCi1kcXF1YTUwMSBxdWFudGl6ZSAgIDAgICAgIDFlMCAtPiAgMA0KLWRxcXVhNTAyIHF1YW50aXplICAgMCAgICAxZS0xIC0+ICAwLjANCi1kcXF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wDQotZHFxdWE1MDQgcXVhbnRpemUgICAwLjAgICAxZTAgLT4gIDANCi1kcXF1YTUwNSBxdWFudGl6ZSAgIDAuMCAgMWUrMSAtPiAgMEUrMQ0KLWRxcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjANCi1kcXF1YTUwNyBxdWFudGl6ZSAgIDBFKzEgIDFlMCAtPiAgMA0KLWRxcXVhNTA4IHF1YW50aXplICAgMEUrMSAxZSsxIC0+ICAwRSsxDQotZHFxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzENCi1kcXF1YTUxMCBxdWFudGl6ZSAgLTAgICAgIDFlMCAtPiAtMA0KLWRxcXVhNTExIHF1YW50aXplICAtMCAgICAxZS0xIC0+IC0wLjANCi1kcXF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wDQotZHFxdWE1MTMgcXVhbnRpemUgIC0wLjAgICAxZTAgLT4gLTANCi1kcXF1YTUxNCBxdWFudGl6ZSAgLTAuMCAgMWUrMSAtPiAtMEUrMQ0KLWRxcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjANCi1kcXF1YTUxNiBxdWFudGl6ZSAgLTBFKzEgIDFlMCAtPiAtMA0KLWRxcXVhNTE3IHF1YW50aXplICAtMEUrMSAxZSsxIC0+IC0wRSsxDQotLS0gIzUxOSBoZXJlIG9uY2UgYSBwcm9ibGVtDQotZHFxdWE1MTggcXVhbnRpemUgIDAgICAgMEUtMyAgLT4gMC4wMDANCi1kcXF1YTUxOSBxdWFudGl6ZSAgMCAgICAwRS0zMyAtPiAwRS0zMw0KLWRxcXVhNTIwIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMEUtMzMgLT4gMEUtMzMNCi1kcXF1YTUyMSBxdWFudGl6ZSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDBFLTMzIC0+IDBFLTMzDQotDQotLS0gU29tZSBub24temVyb3Mgd2l0aCBsb3RzIG9mIHBhZGRpbmcgb24gdGhlIHJpZ2h0DQotZHFxdWE1MjMgcXVhbnRpemUgICAxICAgMEUtMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXF1YTUyNCBxdWFudGl6ZSAgMTIgICAwRS0zMiAtPiAxMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcXVhNTI1IHF1YW50aXplIDEyMyAgIDBFLTMxIC0+IDEyMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFxdWE1MjYgcXVhbnRpemUgMTIzICAgMEUtMzIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1MjcgcXVhbnRpemUgMTIzLjQgMEUtMzEgLT4gMTIzLjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXF1YTUyOCBxdWFudGl6ZSAxMjMuNCAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMNCi1kcXF1YTUzMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTUzMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTUzMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTUzMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cw0KLWRxcXVhNTM2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1MzcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTM5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFxdWE1NDIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTU0MyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNTQ0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE1NDcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQ0KLS0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MNCi1kcXF1YTU0OCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1NDkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIFttb3JlIGJlbG93XQ0KLQ0KLS0tIFNwZWNpYWxzDQotZHFxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWRxcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRxcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZHFxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkNCi1kcXF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRxcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KLWRxcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4NCi1kcXF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFODQotZHFxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTg0KLWRxcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4NCi1kcXF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFODQotZHFxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTg0KLWRxcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4NCi1kcXF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTg0KLWRxcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4NCi1kcXF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTg0KLWRxcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4NCi1kcXF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFODQotZHFxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTg0KLWRxcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4NCi1kcXF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFODQotDQotZHFxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQotZHFxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44DQotZHFxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KLWRxcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONg0KLWRxcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONA0KLWRxcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzENCi1kcXF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCi0NCi1kcXF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCi1kcXF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgNCi1kcXF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQotZHFxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQotZHFxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQotZHFxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQ0KLWRxcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KLQ0KLWRxcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLWRxcXVhNzEwIHF1YW50aXplICAxLjAwRS02MTQzICAgMWUtNjE0MyAgLT4gICAxRS02MTQzICAgUm91bmRlZA0KLWRxcXVhNzExIHF1YW50aXplICAwLjFFLTYxNDMgICAgMmUtNjE0NCAgLT4gICAxRS02MTQ0ICAgU3Vibm9ybWFsDQotZHFxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTYxNDMgICAzZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxcXVhNzEzIHF1YW50aXplICAwLjEwMEUtNjE0MyAgNGUtNjE0NCAgLT4gICAxRS02MTQ0ICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXF1YTcxNCBxdWFudGl6ZSAgMC4wMUUtNjE0MyAgIDVlLTYxNDUgIC0+ICAgMUUtNjE0NSAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQotZHFxdWE3MTUgcXVhbnRpemUgIDAuOTk5RS02MTQzICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTcxNiBxdWFudGl6ZSAgMC4wOTlFLTYxNDMgMTBlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi0NCi1kcXF1YTcxNyBxdWFudGl6ZSAgMC4wMDlFLTYxNDMgIDFlLTYxNDUgIC0+ICAgMUUtNjE0NSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCi1kcXF1YTcxOCBxdWFudGl6ZSAgMC4wMDFFLTYxNDMgIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTYxNDMgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3MjAgcXVhbnRpemUgIDAuMDAwMUUtNjE0MyAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTczMCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMUUtNjE0MyAgICAgUm91bmRlZA0KLWRxcXVhNzMxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QNCi1kcXF1YTczMiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0DQotZHFxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdA0KLWRxcXVhNzM0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRxcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtNjE0MyA5MGUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTczNiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgLTFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3MzcgcXVhbnRpemUgLTAuMDA5RS02MTQzIC0xZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAtMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTczOSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDBlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgUm91bmRlZA0KLWRxcXVhNzQxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsDQotZHFxdWE3NDIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRxcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXF1YTc0NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQotZHFxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3NDYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQotZHFxdWE3NDcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzQ5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0Mw0KLWRxcXVhNzUxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsDQotZHFxdWE3NTIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwNCi1kcXF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFxdWE3NTQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ1IC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KLWRxcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMDBFLTYxNDMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhNzU2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRxcXVhNzU3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NSAtPiAgLTFFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KLWRxcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NSAtPiAgLTBFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWE3NTkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ1IC0+ICAtMEUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwMEUtNjE0Mw0KLWRxcXVhNzYxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxcXVhNzYyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxcXVhNzY0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMEUtNjE0NSAgIFN1Ym5vcm1hbA0KLWRxcXVhNzY1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOTlFLTYxNDQgIFN1Ym5vcm1hbA0KLWRxcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOUUtNjE0NSAgIFN1Ym5vcm1hbA0KLWRxcXVhNzY3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NiAtPiAgLTlFLTYxNDYgICAgIFN1Ym5vcm1hbA0KLWRxcXVhNzY4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NiAtPiAgLTFFLTYxNDYgICAgIFN1Ym5vcm1hbA0KLWRxcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NiAtPiAgLTBFLTYxNDYgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgZnJvbSBGdW5nIExlZQ0KLS0tIHRoZSBuZXh0IGZvdXIgd291bGQgYXBwZWFyIHRvIGJlIGluIGVycm9yLCBidXQgdGhleSBhcmUgbWlzbGVhZGluZyAodGhlDQotLS0gb3BlcmFuZHMgd2lsbCBiZSBjbGFtcGVkIHRvIGEgbG93ZXIgZXhwb25lbnQpIGFuZCBzbyBhcmUgb21pdHRlZA0KLS0tIGRxcXVhMTAyMSBxdWFudGl6ZSAgOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+ICA4LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KLS0tIGRxcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+IC04LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KLS0tIGRxcXVhMTAyNyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICAxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBkcXF1YTEwMzAgcXVhbnRpemUgOC42NjY2NjY2NkUrMyAgICAgICAgICAgMUUrMyAgICAgLT4gOUUrMyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KLWRxcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0Ng0KLWRxcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0Nw0KLWRxcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OA0KLWRxcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQ0KLWRxcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0Ng0KLWRxcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0Nw0KLWRxcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OA0KLWRxcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQ0KLWRxcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NA0KLWRxcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQ0KLWRxcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5Ng0KLWRxcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5Nw0KLQ0KLS0tIFJvdW5kaW5nIHN3YXRoZQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1kcXF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1kcXF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWRxcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCi1kcXF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogdXANCi1kcXF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcXF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGNlaWxpbmcNCi1kcXF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQotZHFxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGZsb29yDQotZHFxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KLWRxcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAwNXVwDQotZHFxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZA0KLWRxcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQNCi1kcXF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkDQotZHFxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQotDQotZHFxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZA0KLWRxcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KLWRxcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWRxcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQNCi1kcXF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcXF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kcXF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkDQotZHFxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotZHFxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxcXVhOTk4IHF1YW50aXplIDEwICAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFxdWE5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUXVhbnRpemUuZGVjVGVzdCAtLSBkZWNRdWFkIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCistLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAorLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKKy0tIFtGb3JrZWQgZnJvbSBxdWFudGl6ZS5kZWNUZXN0IDIwMDYuMTEuMjVdCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxcXVhMDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMAorZHFxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxCitkcXF1YTAwMyBxdWFudGl6ZSAwLjEgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAwNyBxdWFudGl6ZSAwLjEgICAgMWUtMSAgIC0+IDAuMQorZHFxdWEwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwCitkcXF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwCitkcXF1YTAxMCBxdWFudGl6ZSAwLjkgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAxMyBxdWFudGl6ZSAwLjkgICAgMWUtMSAgIC0+IDAuOQorZHFxdWEwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwCitkcXF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwCistLSBuZWdhdGl2ZXMKK2RxcXVhMDIxIHF1YW50aXplIC0wICAgICAgMWUwICAgLT4gLTAKK2RxcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTEKK2RxcXVhMDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAyNSBxdWFudGl6ZSAtMC4xICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQorZHFxdWEwMjggcXVhbnRpemUgLTAuMSAgIDFlLTIgICAtPiAtMC4xMAorZHFxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDAKK2RxcXVhMDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzMSBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZHFxdWEwMzQgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZHFxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKK2RxcXVhMDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzNyBxdWFudGl6ZSAtMC41ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQorZHFxdWEwNDAgcXVhbnRpemUgLTAuNSAgIDFlLTIgICAtPiAtMC41MAorZHFxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDAKK2RxcXVhMDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA0MyBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZHFxdWEwNDYgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZHFxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKKworLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uCitkcXF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwCitkcXF1YTA2MSBxdWFudGl6ZSAyLjE3ICAgMC4wMSAgIC0+IDIuMTcKK2RxcXVhMDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjQgcXVhbnRpemUgMi4xNyAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTA2NyBxdWFudGl6ZSAtMC4xICAgIDEgICAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQorZHFxdWEwNjkgcXVhbnRpemUgKzEyMzQ1MTIzNDU2Nzg5OTg3NjU0MzIxNjc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTA3MCBxdWFudGl6ZSAtOTg3NjUxMjM0NTY3ODk5ODc2NTQzMjE0MzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMDcxIHF1YW50aXplIDIxNyAgICAxZS0xICAgLT4gMjE3LjAKK2RxcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3CitkcXF1YTA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDc0IHF1YW50aXplIDIxNyAgICAxZSsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gZ2VuZXJhbCB0ZXN0cyAuLgorZHFxdWEwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTEgcXVhbnRpemUgMTIgICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTQgcXVhbnRpemUgMS4yMzU1IDFlLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZAorZHFxdWEwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMAorZHFxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk3IHF1YW50aXplIDAuMDAwMSAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwIHF1YW50aXplIDkyICAgICAxZSsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTEKK2RxcXVhMTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjAKK2RxcXVhMTAzIHF1YW50aXplIC0xICAgICAxZS0yICAgLT4gIC0xLjAwCitkcXF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwCitkcXF1YTEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjAKK2RxcXVhMTA2IHF1YW50aXplICAwICAgICAxZS0yICAgLT4gIDAuMDAKK2RxcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDAKK2RxcXVhMTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzEKK2RxcXVhMTA5IHF1YW50aXplICAwICAgICAxZSsyICAgLT4gIDBFKzIKK2RxcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDEKK2RxcXVhMTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMAorZHFxdWExMTIgcXVhbnRpemUgKzEgICAgIDFlLTIgICAtPiAgMS4wMAorCitkcXF1YTEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwCitkcXF1YTEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQKK2RxcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MAorZHFxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1CitkcXF1YTEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjAKK2RxcXVhMTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNgorZHFxdWExMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDAKK2RxcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwCitkcXF1YTE0MiBxdWFudGl6ZSAgICsxMCAgICAxZS0yICAtPiAgMTAuMDAKK2RxcXVhMTQzIHF1YW50aXplICAgMUUrMzcgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMTQ0IHF1YW50aXplICAgMUUtMzcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDUgcXVhbnRpemUgICAxRS0zICAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQorZHFxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTAKK2RxcXVhMTQ4IHF1YW50aXplICAgMEUtMzcgIDFlLTIgIC0+ICAwLjAwCisKK2RxcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDAKK2RxcXVhMTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMAorZHFxdWExNTIgcXVhbnRpemUgICAxLjA2MDAgMWUtMyAtPiAgMS4wNjAgUm91bmRlZAorZHFxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkCitkcXF1YTE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1NSBxdWFudGl6ZSAgIDEuMDYwMCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCistLSBhIGNvdXBsZSB3aGVyZSByb3VuZGluZyB3YXMgZGlmZmVyZW50IGluIGJhc2UgdGVzdHMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcXF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTggcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1OSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMKK2RxcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMAorZHFxdWExNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxCitkcXF1YTE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQorZHFxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwCitkcXF1YTE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwCitkcXF1YTE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQorZHFxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwCitkcXF1YTE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMAorLS0gbmVnYXRpdmVzCitkcXF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjAKK2RxcXVhMTgyIHF1YW50aXplIC0xICAgICAtMWUwICAgLT4gLTEKK2RxcXVhMTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWExODYgcXVhbnRpemUgLTAuMSAgIDcxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQorZHFxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDAKK2RxcXVhMTg5IHF1YW50aXplIC0wLjEgIC0xZS0zICAgLT4gLTAuMTAwCitkcXF1YTE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkyIHF1YW50aXplIC0wLjkgLTEwZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkKK2RxcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTAKKworLS0gK3ZlIGV4cG9uZW50cyAuLgorZHFxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xCitkcXF1YTIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMAorZHFxdWEyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzEKK2RxcXVhMjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyCitkcXF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQorZHFxdWEyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMjAgcXVhbnRpemUgICAxLjA0IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjMgcXVhbnRpemUgICAxLjA0IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjYgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjkgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzIgcXVhbnRpemUgICAxLjA2IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzUgcXVhbnRpemUgICAxLjA2IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQKK2RxcXVhMjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI0MiBxdWFudGl6ZSAgICsxMCAgIDFlKzEgIC0+ICAxRSsxIFJvdW5kZWQKK2RxcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI1MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zCitkcXF1YTI1MiBxdWFudGl6ZSAgIDFFKzM3IDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMjUzIHF1YW50aXplICAgMUUtMzcgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNTUgcXVhbnRpemUgICAwRS0zNyAxZSsxICAtPiAgMEUrMQorZHFxdWEyNTYgcXVhbnRpemUgIC0wRS0zNyAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQorZHFxdWEyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQorCitkcXF1YTI2MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNjMgcXVhbnRpemUgICAxRSsxICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzIKK2RxcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMworZHFxdWEyNjYgcXVhbnRpemUgICAxRSs0ICAxZSsyICAtPiAgMS4wMEUrNAorZHFxdWEyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUKK2RxcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNgorZHFxdWEyNjkgcXVhbnRpemUgICAxRSs3ICAxZSsyICAtPiAgMS4wMDAwMEUrNworZHFxdWEyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgKK2RxcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQorZHFxdWEyNzIgcXVhbnRpemUgICAxRSsxMCAxZSsyICAtPiAgMS4wMDAwMDAwMEUrMTAKK2RxcXVhMjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNzUgcXVhbnRpemUgICAwRS0xMCAxZSsyICAtPiAgMEUrMgorCitkcXF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4MiBxdWFudGl6ZSAgICsxMCAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzMgIC0+ICAxRSszCitkcXF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQKK2RxcXVhMjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUKK2RxcXVhMjg4IHF1YW50aXplICAgMUUrNiAgMWUrMyAgLT4gIDEuMDAwRSs2CitkcXF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcKK2RxcXVhMjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgKK2RxcXVhMjkxIHF1YW50aXplICAgMUUrOSAgMWUrMyAgLT4gIDEuMDAwMDAwRSs5CitkcXF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwCitkcXF1YTI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyOTQgcXVhbnRpemUgICAxRS0yICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMKKworLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KK2RxcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODAKK2RxcXVhMzAxIHF1YW50aXplICAgMC4wMDc4IDFlLTQgLT4gIDAuMDA3OAorZHFxdWEzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDQgcXVhbnRpemUgICAwLjAwNzggMWUtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwNyBxdWFudGl6ZSAgIDAuMDA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwCitkcXF1YTMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgKK2RxcXVhMzEyIHF1YW50aXplICAtMC4wMDc4IDFlLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE1IHF1YW50aXplICAtMC4wMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwCitkcXF1YTMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MAorZHFxdWEzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OAorZHFxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMAorZHFxdWEzMzEgcXVhbnRpemUgIC0wLjA3OCAxZS00IC0+IC0wLjA3ODAKK2RxcXVhMzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgKK2RxcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzM0IHF1YW50aXplICAtMC4wNzggMWUtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMzcgcXVhbnRpemUgIC0wLjA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMAorZHFxdWEzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMAorZHFxdWEzNDIgcXVhbnRpemUgICAwLjc4IDFlLTMgLT4gIDAuNzgwCitkcXF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OAorZHFxdWEzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzQ1IHF1YW50aXplICAgMC43OCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDAKK2RxcXVhMzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDAKK2RxcXVhMzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MAorZHFxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgKK2RxcXVhMzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCitkcXF1YTM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDAKK2RxcXVhMzYxIHF1YW50aXplICAgNy44IDFlLTQgLT4gIDcuODAwMAorZHFxdWEzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDAKK2RxcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODAKK2RxcXVhMzY0IHF1YW50aXplICAgNy44IDFlLTEgLT4gIDcuOAorZHFxdWEzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM2NyBxdWFudGl6ZSAgIDcuOCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMAorZHFxdWEzNzEgcXVhbnRpemUgIC03LjggMWUtNCAtPiAtNy44MDAwCitkcXF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMAorZHFxdWEzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MAorZHFxdWEzNzQgcXVhbnRpemUgIC03LjggMWUtMSAtPiAtNy44CitkcXF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZAorZHFxdWEzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzc3IHF1YW50aXplICAtNy44IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGluZGl2aWR1YWxzCitkcXF1YTM4MCBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzgxIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgorZHFxdWEzODIgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODMgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODQgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzODUgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgorZHFxdWEzODYgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEzODcgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3VuZGluZzogZG93bgorZHFxdWEzODkgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm91bmRpbmc6IGhhbGZfdXAKKworLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKK2RxcXVhMzkxIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzkyIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzkzIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCitkcXF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAorZHFxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAorZHFxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5CitkcXF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwCitkcXF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCitkcXF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKK2RxcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKK2RxcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKK2RxcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKK2RxcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKK2RxcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQorZHFxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKK2RxcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5CisKK2RxcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkcXF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZHFxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RxcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK2RxcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorZHFxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitkcXF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZHFxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2RxcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworZHFxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKK2RxcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCitkcXF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wCitkcXF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCitkcXF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAorZHFxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzEKK2RxcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKK2RxcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCitkcXF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQorZHFxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKK2RxcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCitkcXF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wCitkcXF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCitkcXF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAorZHFxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzEKK2RxcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKK2RxcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCitkcXF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQorLS0gIzUxOSBoZXJlIG9uY2UgYSBwcm9ibGVtCitkcXF1YTUxOCBxdWFudGl6ZSAgMCAgICAwRS0zICAtPiAwLjAwMAorZHFxdWE1MTkgcXVhbnRpemUgIDAgICAgMEUtMzMgLT4gMEUtMzMKK2RxcXVhNTIwIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMEUtMzMgLT4gMEUtMzMKK2RxcXVhNTIxIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMEUtMzMgLT4gMEUtMzMKKworLS0gU29tZSBub24temVyb3Mgd2l0aCBsb3RzIG9mIHBhZGRpbmcgb24gdGhlIHJpZ2h0CitkcXF1YTUyMyBxdWFudGl6ZSAgIDEgICAwRS0zMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFxdWE1MjQgcXVhbnRpemUgIDEyICAgMEUtMzIgLT4gMTIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxcXVhNTI1IHF1YW50aXplIDEyMyAgIDBFLTMxIC0+IDEyMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyNiBxdWFudGl6ZSAxMjMgICAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTI3IHF1YW50aXplIDEyMy40IDBFLTMxIC0+IDEyMy40MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyOCBxdWFudGl6ZSAxMjMuNCAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCitkcXF1YTUzMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTMxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZHFxdWE1MzIgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTUzMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitkcXF1YTUzNiBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1MzcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTUzOSBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTU0MiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE1NDMgcXVhbnRpemUgICAxLjIzNEUrMjk4ICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTQ0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTU0NyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5CistLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitkcXF1YTU0OCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU0OSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBbbW9yZSBiZWxvd10KKworLS0gU3BlY2lhbHMKK2RxcXVhNTgwIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4MyBxdWFudGl6ZSAgSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4NiBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTU4OSBxdWFudGl6ZSAtMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5MiBxdWFudGl6ZSAgMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcXF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTUgcXVhbnRpemUgLTAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZHFxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE2MDEgcXVhbnRpemUgLUluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDQgcXVhbnRpemUgLUluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkcXF1YTYwNyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjEwIHF1YW50aXplICAwICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjEzIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4KK2RxcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4KK2RxcXVhNjIzIHF1YW50aXplICBOYU4gMWUtMSAgICAgIC0+ICBOYU4KK2RxcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4KK2RxcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4KK2RxcXVhNjI2IHF1YW50aXplICBOYU4gIDFlMjk5ICAgIC0+ICBOYU4KK2RxcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4KK2RxcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjI5IHF1YW50aXplIC1JbmYgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMyIHF1YW50aXplICAwICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM1IHF1YW50aXplICBJbmYgICAgTmFOICAgIC0+ICBOYU4KK2RxcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4KK2RxcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4KKworZHFxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0MyBxdWFudGl6ZSAgc05hTiAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0NiBxdWFudGl6ZSAgc05hTiAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0OSBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1MiBxdWFudGl6ZSAtMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1NSBxdWFudGl6ZSAgMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1OCBxdWFudGl6ZSAgc05hTiAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcXF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgKK2RxcXVhNjYzIHF1YW50aXplICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RxcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcXF1YTY2NiBxdWFudGl6ZSAtOTE5ICAgTmFOMzEgLT4gIE5hTjMxCitkcXF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZHFxdWE2NzEgcXVhbnRpemUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzQgcXVhbnRpemUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzcgcXVhbnRpemUgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RxcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOAorZHFxdWE2ODMgcXVhbnRpemUgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZHFxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkcXF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxcXVhNjg2IHF1YW50aXplIC05MTkgIC1OYU4zMSAtPiAtTmFOMzEKK2RxcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkcXF1YTY5MSBxdWFudGl6ZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NCBxdWFudGl6ZSAtc05hTjE2IHNOYU45NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5NyBxdWFudGl6ZSAgMDg4ICAgLXNOYU45MSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworZHFxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBSb3VuZGVkCitkcXF1YTcxMSBxdWFudGl6ZSAgMC4xRS02MTQzICAgIDJlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbAorZHFxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTYxNDMgICAzZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS02MTQzICA0ZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTYxNDMgICA1ZS02MTQ1ICAtPiAgIDFFLTYxNDUgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkcXF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTYxNDMgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS02MTQzIDEwZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCisKK2RxcXVhNzE3IHF1YW50aXplICAwLjAwOUUtNjE0MyAgMWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZHFxdWE3MTggcXVhbnRpemUgIDAuMDAxRS02MTQzICAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTYxNDMgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTczMCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMUUtNjE0MyAgICAgUm91bmRlZAorZHFxdWE3MzEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAorZHFxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtNjE0MyA5MGUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAtMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgUm91bmRlZAorZHFxdWE3NDEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxcXVhNzQyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzQ0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZHFxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MworZHFxdWE3NTEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzUyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMDBFLTYxNDMgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkcXF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NSAtPiAgLTBFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwMEUtNjE0MworZHFxdWE3NjEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wRS02MTQ1ICAgU3Vibm9ybWFsCitkcXF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDYgLT4gIC05Ljk5RS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOUUtNjE0NSAgIFN1Ym5vcm1hbAorZHFxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ2IC0+ICAtOUUtNjE0NiAgICAgU3Vibm9ybWFsCitkcXF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDYgLT4gIC0xRS02MTQ2ICAgICBTdWJub3JtYWwKK2RxcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NiAtPiAgLTBFLTYxNDYgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIGZyb20gRnVuZyBMZWUKKy0tIHRoZSBuZXh0IGZvdXIgd291bGQgYXBwZWFyIHRvIGJlIGluIGVycm9yLCBidXQgdGhleSBhcmUgbWlzbGVhZGluZyAodGhlCistLSBvcGVyYW5kcyB3aWxsIGJlIGNsYW1wZWQgdG8gYSBsb3dlciBleHBvbmVudCkgYW5kIHNvIGFyZSBvbWl0dGVkCistLSBkcXF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSs2MTQ0ICAxLjAwMDAwMDAwMDAwMDAwMEUrNjE0NCAtPiAgOC42NjY2NjY2NjY2NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKKy0tIGRxcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+IC04LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAorLS0gZHFxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gZHFxdWExMDMwIHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitkcXF1YTEwNDAgcXVhbnRpemUgLTIxNDc0ODM2NDYgICAgIDAgLT4gLTIxNDc0ODM2NDYKK2RxcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0NworZHFxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4CitkcXF1YTEwNDMgcXVhbnRpemUgLTIxNDc0ODM2NDkgICAgIDAgLT4gLTIxNDc0ODM2NDkKK2RxcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0NgorZHFxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3CitkcXF1YTEwNDYgcXVhbnRpemUgIDIxNDc0ODM2NDggICAgIDAgLT4gIDIxNDc0ODM2NDgKK2RxcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQorZHFxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0CitkcXF1YTEwNDkgcXVhbnRpemUgIDQyOTQ5NjcyOTUgICAgIDAgLT4gIDQyOTQ5NjcyOTUKK2RxcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5NgorZHFxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIFJvdW5kaW5nIHN3YXRoZQorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFxdWExMTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZHFxdWExMjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkcXF1YTEzMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorZHFxdWExNDAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcXF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK2RxcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTYwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RxcXVhMTcwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZHFxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZAorZHFxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDIgcXVhbnRpemUgIDEuMjAxMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDcgcXVhbnRpemUgIDEuMjA2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MTEgcXVhbnRpemUgLTEuMjA5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZAorZHFxdWExOTAxIHF1YW50aXplICAxLjIxMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA0IHF1YW50aXplICAxLjIxNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA5IHF1YW50aXplICAxLjIxOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMDAwIHF1YW50aXplICAxLjI0MDAgICAgMS4wMCAgICAtPiAgMS4yNCAgUm91bmRlZAorZHFxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwMyBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwOCBxdWFudGl6ZSAgMS4yNDcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZAorZHFxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDIgcXVhbnRpemUgIDEuMjUxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDcgcXVhbnRpemUgIDEuMjU2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMTEgcXVhbnRpemUgLTEuMjU5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZAorZHFxdWEyMjAxIHF1YW50aXplICAxLjI2MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA0IHF1YW50aXplICAxLjI2NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA5IHF1YW50aXplICAxLjI2OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEyMzAwIHF1YW50aXplICAxLjI5MDAgICAgMS4wMCAgICAtPiAgMS4yOSAgUm91bmRlZAorZHFxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwMyBxdWFudGl6ZSAgMS4yOTUwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwOCBxdWFudGl6ZSAgMS4yOTcwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZHFxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZWR1Y2UuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0CmluZGV4IDIzNjU3NGYuLjU2MzVlNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0CkBAIC0xLDE4MyArMSwxODMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxUmVkdWNlLmRlY1Rlc3QgLS0gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gYSBkZWNRdWFkICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotZHFyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJw0KLWRxcmVkMDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnDQotZHFyZWQwMDMgcmVkdWNlICcxLjAwJyAgIC0+ICcxJw0KLWRxcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnDQotZHFyZWQwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJw0KLWRxcmVkMDA2IHJlZHVjZSAnMC4wMCcgICAtPiAnMCcNCi1kcXJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnDQotZHFyZWQwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJw0KLWRxcmVkMDA5IHJlZHVjZSAnMDAnICAgICAtPiAnMCcNCi1kcXJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnDQotZHFyZWQwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJw0KLQ0KLWRxcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInDQotZHFyZWQwMTMgcmVkdWNlICcyJyAgICAgIC0+ICcyJw0KLWRxcmVkMDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInDQotZHFyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJw0KLWRxcmVkMDE2IHJlZHVjZSAnLTAnICAgICAtPiAnLTAnDQotZHFyZWQwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcNCi1kcXJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJw0KLWRxcmVkMDE5IHJlZHVjZSAnLTAwLjAwJyAtPiAnLTAnDQotZHFyZWQwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcNCi1kcXJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcNCi1kcXJlZDAyMiByZWR1Y2UgJy0wRSsxJyAgLT4gJy0wJw0KLQ0KLWRxcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJw0KLWRxcmVkMDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScNCi1kcXJlZDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQotZHFyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScNCi1kcXJlZDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KLWRxcmVkMDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJw0KLWRxcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQotZHFyZWQwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnDQotZHFyZWQwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicNCi1kcXJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicNCi0NCi1kcXJlZDA0MSByZWR1Y2UgMS4xICAgICAgICAtPiAxLjENCi1kcXJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjENCi1kcXJlZDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjENCi1kcXJlZDA0NCByZWR1Y2UgMS4xMTAgICAgICAtPiAxLjExDQotZHFyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQ0KLWRxcmVkMDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjENCi1kcXJlZDA0NyByZWR1Y2UgLTEuMTAwICAgICAtPiAtMS4xDQotZHFyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTENCi1kcXJlZDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkNCi1kcXJlZDA1MCByZWR1Y2UgOS45MCAgICAgICAtPiA5LjkNCi1kcXJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkNCi1kcXJlZDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5DQotZHFyZWQwNTMgcmVkdWNlIC05LjkgICAgICAgLT4gLTkuOQ0KLWRxcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkNCi1kcXJlZDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45DQotZHFyZWQwNTYgcmVkdWNlIC05Ljk5MCAgICAgLT4gLTkuOTkNCi0NCi0tLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cw0KLWRxcmVkMDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQ0KLWRxcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQ0KLWRxcmVkMDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMg0KLWRxcmVkMDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMg0KLWRxcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszDQotZHFyZWQwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMNCi1kcXJlZDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxDQotZHFyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQ0KLWRxcmVkMDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzINCi1kcXJlZDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyDQotZHFyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszDQotZHFyZWQwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszDQotDQotLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQNCi1kcXJlZDA4MCByZWR1Y2UgIDEwRSsxICAgICAgIC0+IDFFKzINCi1kcXJlZDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMNCi1kcXJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzINCi1kcXJlZDA4MyByZWR1Y2UgIDEuMEUrMyAgICAgIC0+IDFFKzMNCi1kcXJlZDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMw0KLWRxcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMw0KLWRxcmVkMDg2IHJlZHVjZSAgMS4xMEUrMyAgICAgLT4gMS4xRSszDQotZHFyZWQwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMg0KLWRxcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMNCi1kcXJlZDA4OSByZWR1Y2UgLTEuMEUrMiAgICAgIC0+IC0xRSsyDQotZHFyZWQwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMw0KLWRxcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMw0KLWRxcmVkMDkyIHJlZHVjZSAtMS4wMEUrMyAgICAgLT4gLTFFKzMNCi1kcXJlZDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMNCi0NCi0tLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nDQotZHFyZWQxMDAgcmVkdWNlICAxMSAgICAgICAgICAtPiAxMQ0KLWRxcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQ0KLWRxcmVkMTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQ0KLWRxcmVkMTAzIHJlZHVjZSAgMS4xRSsxICAgICAgLT4gMTENCi1kcXJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzENCi1kcXJlZDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMg0KLWRxcmVkMTA2IHJlZHVjZSAgMS4wMEUrMiAgICAgLT4gMUUrMg0KLWRxcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszDQotZHFyZWQxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszDQotZHFyZWQxMDkgcmVkdWNlICAxLjAwMDAwMEUrNiAtPiAxRSs2DQotZHFyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTENCi1kcXJlZDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxDQotZHFyZWQxMTIgcmVkdWNlIC0xMC4gICAgICAgICAtPiAtMUUrMQ0KLWRxcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExDQotZHFyZWQxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQ0KLWRxcmVkMTE1IHJlZHVjZSAtMS4xMEUrMiAgICAgLT4gLTEuMUUrMg0KLWRxcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzINCi1kcXJlZDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMNCi1kcXJlZDExOCByZWR1Y2UgLTEuMDAwRSszICAgIC0+IC0xRSszDQotZHFyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQ0KLWRxcmVkMTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYNCi1kcXJlZDEyMSByZWR1Y2UgLTEwLjAwMDAwRSs2IC0+IC0xRSs3DQotZHFyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOA0KLWRxcmVkMTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkNCi1kcXJlZDEyNCByZWR1Y2UgLTEwMDAwLjAwRSs2IC0+IC0xRSsxMA0KLWRxcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExDQotZHFyZWQxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTINCi0NCi0tLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoDQotZHFyZWQxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScNCi1kcXJlZDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInDQotZHFyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicNCi1kcXJlZDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicNCi1kcXJlZDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJw0KLWRxcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJw0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlDQotZHFyZWQxNTEgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyZWQxNTIgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMEUrNjE0MCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDBFKzYxNDANCi1kcXJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQNCi1kcXJlZDE1NCByZWR1Y2UgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE0Mw0KLWRxcmVkMTU1IHJlZHVjZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAxRS02MTQzDQotZHFyZWQxNTYgcmVkdWNlICAyLjAwMEUtNjE3MyAgICAgICAgICAgICAgIC0+IDJFLTYxNzMgICBTdWJub3JtYWwNCi1kcXJlZDE1NyByZWR1Y2UgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE3NiAgIFN1Ym5vcm1hbA0KLQ0KLWRxcmVkMTYxIHJlZHVjZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiAgU3Vibm9ybWFsDQotZHFyZWQxNjIgcmVkdWNlICAtMi4wMDBFLTYxNzMgICAgICAgICAgICAgIC0+IC0yRS02MTczICBTdWJub3JtYWwNCi1kcXJlZDE2MyByZWR1Y2UgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTFFLTYxNDMNCi1kcXJlZDE2NCByZWR1Y2UgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMNCi1kcXJlZDE2NSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMEUrNjE0MCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDBFKzYxNDANCi1kcXJlZDE2NiByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0DQotZHFyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NA0KLWRxcmVkMTY4IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXJlZDE2OSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0DQotDQotDQotLS0gc3BlY2lhbHMgKHJlZHVjZSBkb2VzIG5vdCBhZmZlY3QgcGF5bG9hZCkNCi1kcXJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5Jw0KLWRxcmVkODIxIHJlZHVjZSAnLUluZicgICAtPiAnLUluZmluaXR5Jw0KLWRxcmVkODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFODQotZHFyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlZDgyNCByZWR1Y2UgICBOYU4xMDEgLT4gIE5hTjEwMQ0KLWRxcmVkODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4NCi1kcXJlZDgyOCByZWR1Y2UgLXNOYU4gICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVkODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxDQotZHFyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBOdWxsIHRlc3QNCi1kcXJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjUXVhZCAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJworZHFyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScKK2RxcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScKK2RxcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnCitkcXJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnCitkcXJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnCitkcXJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnCitkcXJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnCitkcXJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnCitkcXJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnCitkcXJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnCisKK2RxcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInCitkcXJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInCitkcXJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJworZHFyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJworZHFyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcKK2RxcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnCitkcXJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJworZHFyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcKK2RxcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnCitkcXJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcKK2RxcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnCisKK2RxcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZHFyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJworZHFyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworZHFyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScKK2RxcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkcXJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScKK2RxcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkcXJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScKK2RxcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCitkcXJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicKKworZHFyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xCitkcXJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjEKK2RxcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQorZHFyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQorZHFyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQorZHFyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQorZHFyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQorZHFyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTEKK2RxcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQorZHFyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45CitkcXJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkKK2RxcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkKK2RxcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkKK2RxcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkKK2RxcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkKK2RxcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5CisKKy0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzCitkcXJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzEKK2RxcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQorZHFyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyCitkcXJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzIKK2RxcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszCitkcXJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMworZHFyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQorZHFyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQorZHFyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMgorZHFyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMgorZHFyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszCitkcXJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMKKworLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQKK2RxcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMgorZHFyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszCitkcXJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzIKK2RxcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMworZHFyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMKK2RxcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMworZHFyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMKK2RxcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzIKK2RxcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMKK2RxcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzIKK2RxcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMKK2RxcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMworZHFyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMworZHFyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszCisKKy0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcKK2RxcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTEKK2RxcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQorZHFyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxCitkcXJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExCitkcXJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzEKK2RxcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyCitkcXJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzIKK2RxcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszCitkcXJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMKK2RxcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNgorZHFyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTEKK2RxcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzEKK2RxcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzEKK2RxcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExCitkcXJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxCitkcXJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzIKK2RxcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzIKK2RxcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMworZHFyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMworZHFyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQorZHFyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNgorZHFyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNworZHFyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOAorZHFyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQorZHFyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTAKK2RxcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExCitkcXJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMgorCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitkcXJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJworZHFyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJworZHFyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicKK2RxcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJworZHFyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicKK2RxcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJworCistLSBObWF4LCBObWluLCBOdGlueQorLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlCitkcXJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxcmVkMTUyIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwCitkcXJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQKK2RxcmVkMTU0IHJlZHVjZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAxRS02MTQzCitkcXJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gMUUtNjE0MworZHFyZWQxNTYgcmVkdWNlICAyLjAwMEUtNjE3MyAgICAgICAgICAgICAgIC0+IDJFLTYxNzMgICBTdWJub3JtYWwKK2RxcmVkMTU3IHJlZHVjZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2ICAgU3Vibm9ybWFsCisKK2RxcmVkMTYxIHJlZHVjZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiAgU3Vibm9ybWFsCitkcXJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtNjE3MyAgICAgICAgICAgICAgLT4gLTJFLTYxNzMgIFN1Ym5vcm1hbAorZHFyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xRS02MTQzCitkcXJlZDE2NCByZWR1Y2UgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MAorZHFyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NAorZHFyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorZHFyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorCisKKy0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpCitkcXJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JworZHFyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCitkcXJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTgorZHFyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCitkcXJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KK2RxcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkcXJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQorZHFyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0CitkcXJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0CmluZGV4IGJhZThlYWUuLjA5MGQzY2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0CkBAIC0xLDU5NyArMSw1OTcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxUmVtYWluZGVyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQotZHFyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwDQotZHFyZW0wMDIgcmVtYWluZGVyICAyICAgICAxICAgIC0+ICAwDQotZHFyZW0wMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxDQotZHFyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwDQotZHFyZW0wMDUgcmVtYWluZGVyICAwICAgICAxICAgIC0+ICAwDQotZHFyZW0wMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwDQotZHFyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxDQotZHFyZW0wMDggcmVtYWluZGVyICAyICAgICAzICAgIC0+ICAyDQotZHFyZW0wMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwDQotDQotZHFyZW0wMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQNCi1kcXJlbTAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNA0KLWRxcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNA0KLWRxcmVtMDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNA0KLWRxcmVtMDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MA0KLWRxcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDANCi1kcXJlbTAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNA0KLWRxcmVtMDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDANCi1kcXJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDANCi1kcXJlbTAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDANCi0NCi1kcXJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMA0KLWRxcmVtMDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxDQotZHFyZW0wMjIgcmVtYWluZGVyICA1ICAgICAyLjAgICAgLT4gIDEuMA0KLWRxcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMA0KLWRxcmVtMDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KLWRxcmVtMDI1IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KLQ0KLWRxcmVtMDMwIHJlbWFpbmRlciAgMSAgICAgMiAgICAgIC0+ICAxDQotZHFyZW0wMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDENCi1kcXJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQ0KLQ0KLWRxcmVtMDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxDQotZHFyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDENCi1kcXJlbTAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQ0KLWRxcmVtMDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxDQotZHFyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDENCi1kcXJlbTA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQ0KLWRxcmVtMDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxDQotZHFyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDENCi1kcXJlbTA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQ0KLWRxcmVtMDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQ0KLWRxcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQ0KLWRxcmVtMDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQ0KLWRxcmVtMDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQ0KLWRxcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQ0KLWRxcmVtMDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQ0KLWRxcmVtMDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQ0KLWRxcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQ0KLWRxcmVtMDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQ0KLWRxcmVtMDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQ0KLWRxcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQ0KLWRxcmVtMDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQ0KLQ0KLWRxcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwDQotZHFyZW0wNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNA0KLWRxcmVtMDY4IHJlbWFpbmRlciAgOTk5OTk5OTk5LjUgICAxICAtPiAwLjUNCi1kcXJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45DQotZHFyZW0wNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5DQotZHFyZW0wNzEgcmVtYWluZGVyICA5OTk5OTkuOTk5OTk5IDEgIC0+IDAuOTk5OTk5DQotZHFyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDANCi0NCi1kcXJlbTA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMA0KLWRxcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjANCi1kcXJlbTA4MiByZW1haW5kZXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMA0KLWRxcmVtMDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwDQotZHFyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDANCi1kcXJlbTA4NSByZW1haW5kZXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMA0KLWRxcmVtMDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjANCi1kcXJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMA0KLWRxcmVtMDg4IHJlbWFpbmRlciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwDQotZHFyZW0wODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwDQotZHFyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMA0KLWRxcmVtMDkxIHJlbWFpbmRlciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwDQotZHFyZW0wOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwDQotZHFyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcNCi1kcXJlbTA5NCByZW1haW5kZXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOA0KLWRxcmVtMDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NA0KLQ0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDANCi1kcXJlbTEwMSByZW1haW5kZXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTEwMyByZW1haW5kZXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTEwNCByZW1haW5kZXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTEwNiByZW1haW5kZXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi0tLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQNCi0tLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcg0KLS0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldDQotZHFyZW0xMDcgcmVtYWluZGVyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTA5IHJlbWFpbmRlciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMTAgcmVtYWluZGVyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTEyIHJlbWFpbmRlciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMTMgcmVtYWluZGVyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTE1IHJlbWFpbmRlciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMTYgcmVtYWluZGVyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTIwIHJlbWFpbmRlciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMjEgcmVtYWluZGVyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTIzIHJlbWFpbmRlciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0xMjQgcmVtYWluZGVyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgemVyb3Mgb24gbGVmdA0KLWRxcmVtMTMwIHJlbWFpbmRlciAgMCAgICAgIDEgICAtPiAgMA0KLWRxcmVtMTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMA0KLWRxcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wDQotZHFyZW0xMzMgcmVtYWluZGVyICAwLjAgICAtMSAgIC0+ICAwLjANCi1kcXJlbTEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTANCi1kcXJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTANCi1kcXJlbTEzNiByZW1haW5kZXIgLTAuMCAgICAxICAgLT4gLTAuMA0KLWRxcmVtMTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wDQotDQotLS0gMC41ZXJzDQotZHFyZW0xNDMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41DQotZHFyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41DQotZHFyZW0xNDUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MA0KLWRxcmVtMTQ2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQotZHFyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRxcmVtMTQ4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCi1kcXJlbTE0OSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KLQ0KLS0tIHN0ZWFkaWVzDQotZHFyZW0xNTAgcmVtYWluZGVyICAxICAxICAgLT4gMA0KLWRxcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDENCi1kcXJlbTE1MiByZW1haW5kZXIgIDEgIDMgICAtPiAxDQotZHFyZW0xNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQ0KLWRxcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDENCi1kcXJlbTE1NSByZW1haW5kZXIgIDEgIDYgICAtPiAxDQotZHFyZW0xNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQ0KLWRxcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDENCi1kcXJlbTE1OCByZW1haW5kZXIgIDEgIDkgICAtPiAxDQotZHFyZW0xNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQ0KLWRxcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDANCi1kcXJlbTE2MSByZW1haW5kZXIgIDIgIDEgICAtPiAwDQotZHFyZW0xNjIgcmVtYWluZGVyICAzICAxICAgLT4gMA0KLWRxcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDANCi1kcXJlbTE2NCByZW1haW5kZXIgIDUgIDEgICAtPiAwDQotZHFyZW0xNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMA0KLWRxcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDANCi1kcXJlbTE2NyByZW1haW5kZXIgIDggIDEgICAtPiAwDQotZHFyZW0xNjggcmVtYWluZGVyICA5ICAxICAgLT4gMA0KLWRxcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDANCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcg0KLWRxcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwDQotZHFyZW0xNzIgcmVtYWluZGVyICAgMC41MCAxLjAyMCAtPiAgMC41MDANCi1kcXJlbTE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMA0KLWRxcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwDQotZHFyZW0xNzUgcmVtYWluZGVyICAgMC42ICAxLjAyMCAtPiAgMC42MDANCi0NCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwDQotZHFyZW0yMDEgcmVtYWluZGVyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJlbTIwMiByZW1haW5kZXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFyZW0yMDQgcmVtYWluZGVyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMjA1IHJlbWFpbmRlciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0yMDcgcmVtYWluZGVyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMjA4IHJlbWFpbmRlciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW0yMTAgcmVtYWluZGVyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMjExIHJlbWFpbmRlciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcg0KLWRxcmVtMjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwDQotZHFyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDANCi1kcXJlbTIzMyByZW1haW5kZXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMA0KLWRxcmVtMjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwDQotZHFyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDANCi0NCi0tLSBoaWdoIFhzDQotZHFyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMA0KLQ0KLS0tIGRxcmVtM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsDQotZHFyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQ0KLWRxcmVtMzAyIHJlbWFpbmRlciAgIDUgICAgNSAgICAgLT4gIDANCi1kcXJlbTMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzDQotZHFyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMNCi1kcXJlbTMwNSByZW1haW5kZXIgICAxMyAgIDEwMCAgIC0+ICAxMw0KLWRxcmVtMzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzDQotZHFyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMw0KLWRxcmVtMzA4IHJlbWFpbmRlciAgIDAuMTMzICAxICAgLT4gIDAuMTMzDQotZHFyZW0zMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzDQotZHFyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMNCi1kcXJlbTMxMSByZW1haW5kZXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzDQotZHFyZW0zMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMw0KLWRxcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMw0KLWRxcmVtMzE0IHJlbWFpbmRlciAgIDEzMyAgIDEwICAgLT4gIDMNCi1kcXJlbTMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzDQotZHFyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMNCi1kcXJlbTMxNyByZW1haW5kZXIgICAxMDEuMCAgMyAgIC0+ICAyLjANCi1kcXJlbTMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjANCi1kcXJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjANCi1kcXJlbTMyMCByZW1haW5kZXIgICAyLjQwICAgMSAgIC0+ICAwLjQwDQotZHFyZW0zMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDANCi1kcXJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQNCi1kcXJlbTMyMyByZW1haW5kZXIgICAyLjQgICAgMiAgIC0+ICAwLjQNCi1kcXJlbTMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMA0KLWRxcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQ0KLWRxcmVtMzI2IHJlbWFpbmRlciAgIDEgICAwLjMwICAgLT4gIDAuMTANCi1kcXJlbTMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMA0KLWRxcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMA0KLWRxcmVtMzI5IHJlbWFpbmRlciAgIDEuMCAgICAwLjMgLT4gIDAuMQ0KLWRxcmVtMzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTANCi1kcXJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMA0KLWRxcmVtMzMyIHJlbWFpbmRlciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMA0KLWRxcmVtMzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KLWRxcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KLWRxcmVtMzM1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kcXJlbTMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KLWRxcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCi1kcXJlbTMzOCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZHFyZW0zMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCi0NCi1kcXJlbTM0MCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIDAuNTAwMDAwMA0KLWRxcmVtMzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDANCi1kcXJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDANCi1kcXJlbTM0MyByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMA0KLWRxcmVtMzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMDANCi1kcXJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcNCi1kcXJlbTM0NiByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04DQotZHFyZW0zNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkNCi1kcXJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwDQotZHFyZW0zNDkgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTENCi1kcXJlbTM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTINCi0NCi1kcXJlbTM1MSByZW1haW5kZXIgICAwLjAzICA3ICAtPiAgMC4wMw0KLWRxcmVtMzUyIHJlbWFpbmRlciAgIDUgICAyICAgIC0+ICAxDQotZHFyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xDQotZHFyZW0zNTQgcmVtYWluZGVyICAgNC4wMSAgIDIgICAgLT4gIDAuMDENCi1kcXJlbTM1NSByZW1haW5kZXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxDQotZHFyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxDQotZHFyZW0zNTcgcmVtYWluZGVyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDENCi1kcXJlbTM1OCByZW1haW5kZXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxDQotZHFyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNw0KLQ0KLWRxcmVtMzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1DQotZHFyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgNCi1kcXJlbTM2MiByZW1haW5kZXIgICAwLjggICAwLjIgICAgLT4gIDAuMA0KLWRxcmVtMzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yDQotZHFyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMA0KLWRxcmVtMzY1IHJlbWFpbmRlciAgIDAuODAwICAgMS43ICAtPiAgMC44MDANCi1kcXJlbTM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwDQotDQotZHFyZW0zNzEgcmVtYWluZGVyICAgMi40MDAgIDIgICAgICAgIC0+ICAwLjQwMA0KLQ0KLWRxcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwDQotZHFyZW0zODIgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDAuNzY1Nw0KLWRxcmVtMzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OA0KLWRxcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4DQotZHFyZW0zODUgcmVtYWluZGVyIDEyMzQ1ICAxLjEgICAgICAgLT4gIDAuOA0KLWRxcmVtMzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzDQotZHFyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDENCi1kcXJlbTM4OCByZW1haW5kZXIgMTIzNTUgIDQuMDAwMSAgICAtPiAgMi42OTEyDQotZHFyZW0zODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNA0KLWRxcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkNCi1kcXJlbTM5MSByZW1haW5kZXIgMTIzNDUgIDQuOTkgICAgICAtPiAgNC43Mw0KLWRxcmVtMzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQ0KLWRxcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkNCi1kcXJlbTM5NCByZW1haW5kZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMA0KLWRxcmVtMzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzINCi1kcXJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzINCi1kcXJlbTM5NyByZW1haW5kZXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNg0KLWRxcmVtMzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjANCi0NCi0tLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcw0KLWRxcmVtNDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41DQotZHFyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1DQotZHFyZW00MDMgcmVtYWluZGVyICAgMC41NTUgICAgICAgMSAgIC0+ICAwLjU1NQ0KLWRxcmVtNDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1DQotZHFyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1DQotZHFyZW00MDYgcmVtYWluZGVyICAgMC41NTU1NTUgICAgMSAgIC0+ICAwLjU1NTU1NQ0KLWRxcmVtNDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1DQotZHFyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1DQotZHFyZW00MDkgcmVtYWluZGVyICAgMC41NTU1NTU1NTUgMSAgIC0+ICAwLjU1NTU1NTU1NQ0KLQ0KLS0tIGZvbGRkb3ducw0KLWRxcmVtNDIxIHJlbWFpbmRlciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcXJlbTQyMiByZW1haW5kZXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KLWRxcmVtNDIzIHJlbWFpbmRlciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQotZHFyZW00MjQgcmVtYWluZGVyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJlbTQyNSByZW1haW5kZXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcmVtNDI2IHJlbWFpbmRlciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQotZHFyZW00MjcgcmVtYWluZGVyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJlbTQyOCByZW1haW5kZXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KLWRxcmVtNDI5IHJlbWFpbmRlciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQotZHFyZW00MzAgcmVtYWluZGVyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi0tLSB0aW5pZXMNCi1kcXJlbTQzMSByZW1haW5kZXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJlbTQzMiByZW1haW5kZXIgICAxRS02MTc1ICAyRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJlbTQzMyByZW1haW5kZXIgICAxRS02MTc1ICAzRS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsDQotZHFyZW00MzQgcmVtYWluZGVyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbA0KLWRxcmVtNDM1IHJlbWFpbmRlciAgIDFFLTYxNzUgIDVFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcmVtNDM2IHJlbWFpbmRlciAgIDFFLTYxNzUgIDZFLTYxNzYgIC0+ICAgNEUtNjE3NiBTdWJub3JtYWwNCi1kcXJlbTQzNyByZW1haW5kZXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsDQotZHFyZW00MzggcmVtYWluZGVyICAgMUUtNjE3NSAgOEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbA0KLWRxcmVtNDM5IHJlbWFpbmRlciAgIDFFLTYxNzUgIDlFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcXJlbTQ0MCByZW1haW5kZXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJlbTQ0MSByZW1haW5kZXIgICAxRS02MTc1IDExRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotZHFyZW00NDIgcmVtYWluZGVyIDEwMEUtNjE3NSAxMUUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KLWRxcmVtNDQzIHJlbWFpbmRlciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcmVtNDQ0IHJlbWFpbmRlciAxMDBFLTYxNzUgMjFFLTYxNzYgIC0+IDEuM0UtNjE3NSBTdWJub3JtYWwNCi1kcXJlbTQ0NSByZW1haW5kZXIgMTAwRS02MTc1IDMwRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotDQotLS0gemVybyBzaWducw0KLWRxcmVtNjUwIHJlbWFpbmRlciAgMSAgMSAtPiAgMA0KLWRxcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMA0KLWRxcmVtNjUyIHJlbWFpbmRlciAgMSAtMSAtPiAgMA0KLWRxcmVtNjUzIHJlbWFpbmRlciAtMSAtMSAtPiAtMA0KLWRxcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMA0KLWRxcmVtNjU1IHJlbWFpbmRlciAtMCAgMSAtPiAtMA0KLWRxcmVtNjU2IHJlbWFpbmRlciAgMCAtMSAtPiAgMA0KLWRxcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMA0KLWRxcmVtNjU4IHJlbWFpbmRlciAgMC4wMCAgMSAgLT4gIDAuMDANCi1kcXJlbTY1OSByZW1haW5kZXIgLTAuMDAgIDEgIC0+IC0wLjAwDQotDQotLS0gU3BlY2lhbHMNCi1kcXJlbTY4MCByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4MyByZW1haW5kZXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4NiByZW1haW5kZXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZHFyZW02ODkgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQ0KLWRxcmVtNjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDANCi1kcXJlbTY5MyByZW1haW5kZXIgLTAgICAgIEluZiAgIC0+IC0wDQotZHFyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQ0KLWRxcmVtNjk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDANCi1kcXJlbTY5NiByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXJlbTcwMCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwMSByZW1haW5kZXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwMyByZW1haW5kZXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwNCByZW1haW5kZXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwNiByZW1haW5kZXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwNyByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTcwOSByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZHFyZW03MTAgcmVtYWluZGVyIC0xICAgIC1JbmYgICAtPiAtMQ0KLWRxcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTANCi1kcXJlbTcxMiByZW1haW5kZXIgIDAgICAgLUluZiAgIC0+ICAwDQotZHFyZW03MTMgcmVtYWluZGVyICAxICAgIC1JbmYgICAtPiAgMQ0KLWRxcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDANCi1kcXJlbTcxNSByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcXJlbTcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1kcXJlbTcyMyByZW1haW5kZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcXJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcXJlbTcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4NCi1kcXJlbTcyNiByZW1haW5kZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcXJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcXJlbTcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1kcXJlbTcyOSByZW1haW5kZXIgIE5hTiAtTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczMiByZW1haW5kZXIgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4NCi1kcXJlbTczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczNSByZW1haW5kZXIgIDEgICAtTmFOICAgIC0+IC1OYU4NCi1kcXJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcXJlbTczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1kcXJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzQzIHJlbWFpbmRlciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzQ2IHJlbWFpbmRlciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzUwIHJlbWFpbmRlciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzUzIHJlbWFpbmRlciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzU2IHJlbWFpbmRlciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyZW03NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzU5IHJlbWFpbmRlciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdpbmcgTmFOcw0KLWRxcmVtNzYwIHJlbWFpbmRlciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQ0KLWRxcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzYzIHJlbWFpbmRlciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTENCi1kcXJlbTc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYNCi1kcXJlbTc2NiByZW1haW5kZXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzDQotZHFyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNA0KLWRxcmVtNzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUNCi1kcXJlbTc2OSByZW1haW5kZXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2DQotDQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQotZHFyZW03NzAgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDYNCi1kcXJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMSAgICAtPiAgMA0KLWRxcmVtNzcyICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtNzczICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLQ0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCi1kcXJlbTgwMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCi1kcXJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kcXJlbTgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCi1kcXJlbTgwNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCi1kcXJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kcXJlbTgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCi1kcXJlbTgwNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCi1kcXJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcXJlbTgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCi1kcXJlbTgxMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kcXJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYNCi1kcXJlbTgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi1kcXJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCi1kcXJlbTgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kcXJlbTgyMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCi1kcXJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCi1kcXJlbTgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kcXJlbTgyNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCi1kcXJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCi1kcXJlbTgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcXJlbTgyOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCi1kcXJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kcXJlbTgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYNCi1kcXJlbTgzMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGRpdmlkZWludA0KLWRxcmVtODQwIHJlbWFpbmRlciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wDQotZHFyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQNCi1kcXJlbTg0MiByZW1haW5kZXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQ0KLWRxcmVtODQzIHJlbWFpbmRlciAgMTAwMDAwMDAwLjkgICAxICAtPiAgMC45DQotZHFyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQ0KLWRxcmVtODUwIHJlbWFpbmRlciAgMTAwMDAwMDAzICAgICA1ICAtPiAgMw0KLWRxcmVtODUxIHJlbWFpbmRlciAgMTAwMDAwMDMgICAgICA1ICAtPiAgMw0KLWRxcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMw0KLWRxcmVtODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMw0KLWRxcmVtODU0IHJlbWFpbmRlciAgMTAwMDMgICAgICAgICA1ICAtPiAgMw0KLWRxcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMw0KLWRxcmVtODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMw0KLWRxcmVtODU3IHJlbWFpbmRlciAgMTMgICAgICAgICAgICA1ICAtPiAgMw0KLWRxcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQ0KLQ0KLS0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQotZHFyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcmVtODYxIHJlbWFpbmRlciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJlbTg2MiByZW1haW5kZXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcmVtODY0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJlbTg3MCByZW1haW5kZXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODcyIHJlbWFpbmRlciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3MyByZW1haW5kZXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODc1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODc4IHJlbWFpbmRlciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg3OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODgxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzANCi1kcXJlbTg4MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwDQotZHFyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMA0KLWRxcmVtODg0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzANCi1kcXJlbTg4NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwDQotZHFyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMA0KLQ0KLWRxcmVtODkwIHJlbWFpbmRlciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04OTIgcmVtYWluZGVyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODkzIHJlbWFpbmRlciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04OTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtODk2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW04OTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTAwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwDQotZHFyZW05MDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMA0KLWRxcmVtOTAzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IDEyMzANCi1kcXJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwDQotZHFyZW05MDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gICAxMA0KLWRxcmVtOTA2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDANCi0NCi1kcXJlbTkxMCByZW1haW5kZXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTEgcmVtYWluZGVyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkxMyByZW1haW5kZXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTQgcmVtYWluZGVyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkxNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkyMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwDQotZHFyZW05MjEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMA0KLWRxcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzANCi1kcXJlbTkyMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwDQotZHFyZW05MjQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMA0KLWRxcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzANCi1kcXJlbTkyNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwDQotDQotZHFyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTMxIHJlbWFpbmRlciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkzMiByZW1haW5kZXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTM0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkzNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwDQotZHFyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTM3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzANCi1kcXJlbTkzOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwDQotZHFyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTQxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzANCi1kcXJlbTk0MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwDQotZHFyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMA0KLWRxcmVtOTQ0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzANCi1kcXJlbTk0NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgIDYwDQotZHFyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNg0KLQ0KLWRxcmVtOTUwIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTYyIHJlbWFpbmRlciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTYzIHJlbWFpbmRlciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY1IHJlbWFpbmRlciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY2IHJlbWFpbmRlciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY4IHJlbWFpbmRlciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcmVtOTY5IHJlbWFpbmRlciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMA0KLQ0KLWRxcmVtOTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQ0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQ0KLWRxcmVtMTA1MSByZW1haW5kZXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtMTA1MiByZW1haW5kZXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtMTA1NCByZW1haW5kZXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcmVtMTA1NSByZW1haW5kZXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcNCi1kcXJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3DQotZHFyZW0xMDU3IHJlbWFpbmRlciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3Nw0KLWRxcmVtMTA1OCByZW1haW5kZXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcNCi0NCi0tLSBHeXVyaXMgZXhhbXBsZQ0KLWRxcmVtMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMNCi0NCi0tLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdA0KLWRxcmVtMTEyMCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4DQotZHFyZW0xMTIxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkNCi1kcXJlbTExMjIgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDAuNTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODg5MA0KLWRxcmVtMTEyMyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3DQotZHFyZW0xMTI0ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTINCi1kcXJlbTExMjUgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDMuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MQ0KLWRxcmVtMTEyNiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQotZHFyZW0xMTI3ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYNCi1kcXJlbTExMjggIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDQuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1OQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcXJlbTEwMDAgcmVtYWluZGVyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcmVtMTAwMSByZW1haW5kZXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQorZHFyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwCitkcXJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDAKK2RxcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQorZHFyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwCitkcXJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDAKK2RxcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMAorZHFyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxCitkcXJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDIKK2RxcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMAorCitkcXJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNAorZHFyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQKK2RxcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNAorZHFyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40CitkcXJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2RxcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDAKK2RxcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40CitkcXJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkcXJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDAKK2RxcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMAorCitkcXJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZHFyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDEKK2RxcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK2RxcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZHFyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitkcXJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworZHFyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDEKK2RxcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxCitkcXJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQorCitkcXJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQorZHFyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDEKK2RxcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxCitkcXJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQorZHFyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDEKK2RxcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxCitkcXJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQorZHFyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDEKK2RxcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxCitkcXJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2RxcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQorZHFyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xCitkcXJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2RxcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQorZHFyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xCitkcXJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2RxcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQorZHFyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xCitkcXJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2RxcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQorZHFyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK2RxcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCitkcXJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40CitkcXJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41CitkcXJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45CitkcXJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkKK2RxcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQorZHFyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDAKKworZHFyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDAKK2RxcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKK2RxcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkcXJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAorZHFyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKK2RxcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkcXJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCitkcXJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAorZHFyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2RxcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAorZHFyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAorZHFyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2RxcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAorZHFyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKK2RxcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkcXJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorZHFyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0CistLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgorLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KK2RxcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZHFyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCitkcXJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDAKK2RxcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCitkcXJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAorZHFyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wCitkcXJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKK2RxcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCitkcXJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMAorCistLSAwLjVlcnMKK2RxcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkcXJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZHFyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2RxcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RxcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDEKK2RxcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKK2RxcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKK2RxcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDEKK2RxcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKK2RxcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKK2RxcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDEKK2RxcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKK2RxcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKK2RxcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK2RxcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKK2RxcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKK2RxcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDAKK2RxcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKK2RxcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKK2RxcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDAKK2RxcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKK2RxcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKK2RxcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDAKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RxcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCitkcXJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZHFyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK2RxcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCitkcXJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkcXJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCitkcXJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAorZHFyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2RxcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCitkcXJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAorZHFyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDAKKworLS0gaGlnaCBYcworZHFyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAorCistLSBkcXJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorZHFyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQorZHFyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAorZHFyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMworZHFyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKK2RxcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCitkcXJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMworZHFyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMworZHFyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2RxcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworZHFyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK2RxcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2RxcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK2RxcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMworZHFyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMworZHFyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMworZHFyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKK2RxcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAorZHFyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wCitkcXJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK2RxcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2RxcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitkcXJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK2RxcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAorZHFyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK2RxcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQorZHFyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZHFyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK2RxcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorZHFyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkcXJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitkcXJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorZHFyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkcXJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2RxcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2RxcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2RxcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2RxcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK2RxcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCitkcXJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCitkcXJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAKK2RxcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwCitkcXJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwCitkcXJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2RxcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKK2RxcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05CitkcXJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkcXJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQorZHFyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCisKK2RxcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkcXJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQorZHFyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCitkcXJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZHFyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorZHFyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCitkcXJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZHFyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorZHFyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCitkcXJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQorZHFyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK2RxcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCitkcXJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMgorZHFyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorZHFyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorZHFyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCitkcXJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCisKK2RxcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitkcXJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3CitkcXJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgKK2RxcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4CitkcXJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44CitkcXJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMworZHFyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK2RxcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKK2RxcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2RxcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK2RxcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCitkcXJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2RxcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK2RxcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCitkcXJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyCitkcXJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKK2RxcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CitkcXJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkcXJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorZHFyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1CitkcXJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1CitkcXJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQorZHFyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1CitkcXJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1CitkcXJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQorZHFyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1CitkcXJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1CisKKy0tIGZvbGRkb3ducworZHFyZW00MjEgcmVtYWluZGVyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW00MjIgcmVtYWluZGVyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2RxcmVtNDIzIHJlbWFpbmRlciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJlbTQyNCByZW1haW5kZXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjUgcmVtYWluZGVyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI2IHJlbWFpbmRlciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJlbTQyNyByZW1haW5kZXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MjggcmVtYWluZGVyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI5IHJlbWFpbmRlciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQzMCByZW1haW5kZXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorLS0gdGluaWVzCitkcXJlbTQzMSByZW1haW5kZXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDMyIHJlbWFpbmRlciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00MzMgcmVtYWluZGVyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzQgcmVtYWluZGVyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzUgcmVtYWluZGVyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQzNiByZW1haW5kZXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgIDRFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzNyByZW1haW5kZXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzOCByZW1haW5kZXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQzOSByZW1haW5kZXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCitkcXJlbTQ0MCByZW1haW5kZXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDQxIHJlbWFpbmRlciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKK2RxcmVtNDQyIHJlbWFpbmRlciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKK2RxcmVtNDQzIHJlbWFpbmRlciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00NDQgcmVtYWluZGVyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gMS4zRS02MTc1IFN1Ym5vcm1hbAorZHFyZW00NDUgcmVtYWluZGVyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorCistLSB6ZXJvIHNpZ25zCitkcXJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDAKK2RxcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAorZHFyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCitkcXJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTAKK2RxcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAorZHFyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCitkcXJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDAKK2RxcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAorZHFyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAorZHFyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZHFyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQorZHFyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMAorZHFyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAorZHFyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQorZHFyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZHFyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTEKK2RxcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKK2RxcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKK2RxcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDEKK2RxcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RxcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCitkcXJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgorZHFyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCitkcXJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCitkcXJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcXJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2RxcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCitkcXJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkcXJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK2RxcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2RxcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZHFyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworZHFyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZHFyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZHFyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RxcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgIDEwICAgIC0+ICA2CitkcXJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZHFyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZHFyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RxcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZHFyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RxcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZHFyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZHFyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RxcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkcXJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RxcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZHFyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RxcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZHFyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RxcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RxcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZHFyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZGl2aWRlaW50CitkcXJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZHFyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2RxcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41CitkcXJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQorZHFyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQorZHFyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzCitkcXJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMKK2RxcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMworZHFyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMworZHFyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZHFyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorZHFyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZHFyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZHFyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorZHFyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZHFyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZHFyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCitkcXJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkcXJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkcXJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCitkcXJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwCitkcXJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkcXJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCitkcXJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2RxcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2RxcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKK2RxcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2RxcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2RxcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKK2RxcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKK2RxcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZHFyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZHFyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZHFyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorZHFyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZHFyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZHFyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorZHFyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZHFyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MAorZHFyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgorCitkcXJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZHFyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZHFyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3CitkcXJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkcXJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkcXJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3CisKKy0tIEd5dXJpcyBleGFtcGxlCitkcXJlbTEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzCisKKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0CitkcXJlbTExMjAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OAorZHFyZW0xMTIxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkKK2RxcmVtMTEyMiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwCitkcXJlbTExMjMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4NworZHFyZW0xMTI0ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2RxcmVtMTEyNSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxCitkcXJlbTExMjYgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFyZW0xMTI3ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYKK2RxcmVtMTEyOCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5CisKKy0tIE51bGwgdGVzdHMKK2RxcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QKaW5kZXggYjg1MDYyNi4uMGRkMjczZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyTmVhci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdApAQCAtMSw2MzEgKzEsNjMxIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNRdWFkIHJlbWFpbmRlci1uZWFyICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQ0KLWRxcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDANCi1kcXJtbjAwMiByZW1haW5kZXJuZWFyICAyICAgICAxICAgIC0+ICAwDQotZHFybW4wMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQ0KLWRxcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDANCi1kcXJtbjAwNSByZW1haW5kZXJuZWFyICAwICAgICAxICAgIC0+ICAwDQotZHFybW4wMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMA0KLWRxcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDENCi1kcXJtbjAwOCByZW1haW5kZXJuZWFyICAyICAgICAzICAgIC0+IC0xDQotZHFybW4wMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMA0KLQ0KLWRxcm1uMDEwIHJlbWFpbmRlcm5lYXIgIDIuNCAgIDEgICAgLT4gIDAuNA0KLWRxcm1uMDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNA0KLWRxcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQNCi1kcXJtbjAxMyByZW1haW5kZXJuZWFyICAtMi40ICAtMSAgIC0+ICAtMC40DQotZHFybW4wMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MA0KLWRxcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwDQotZHFybW4wMTYgcmVtYWluZGVybmVhciAgMi40ICAgMiAgICAtPiAgMC40DQotZHFybW4wMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDANCi1kcXJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwDQotZHFybW4wMTkgcmVtYWluZGVybmVhciAgMjAgICAgMjAgICAtPiAgMA0KLQ0KLWRxcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMA0KLWRxcm1uMDIxIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIgICAgICAtPiAgMQ0KLWRxcm1uMDIyIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMCAgICAtPiAgMS4wDQotZHFybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMA0KLWRxcm1uMDI0IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCi1kcXJtbjAyNSByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQotDQotZHFybW4wMzAgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAgIC0+ICAxDQotZHFybW4wMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxDQotZHFybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxDQotDQotZHFybW4wMzMgcmVtYWluZGVybmVhciAgMSAgICAgMTYgICAgIC0+ICAxDQotZHFybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxDQotZHFybW4wMzUgcmVtYWluZGVybmVhciAgMSAgICAgNjQgICAgIC0+ICAxDQotZHFybW4wNDAgcmVtYWluZGVybmVhciAgMSAgICAtMiAgICAgIC0+ICAxDQotZHFybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxDQotZHFybW4wNDIgcmVtYWluZGVybmVhciAgMSAgICAtOCAgICAgIC0+ICAxDQotZHFybW4wNDMgcmVtYWluZGVybmVhciAgMSAgICAtMTYgICAgIC0+ICAxDQotZHFybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxDQotZHFybW4wNDUgcmVtYWluZGVybmVhciAgMSAgICAtNjQgICAgIC0+ICAxDQotZHFybW4wNTAgcmVtYWluZGVybmVhciAtMSAgICAgMiAgICAgIC0+ICAtMQ0KLWRxcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTENCi1kcXJtbjA1MiByZW1haW5kZXJuZWFyIC0xICAgICA4ICAgICAgLT4gIC0xDQotZHFybW4wNTMgcmVtYWluZGVybmVhciAtMSAgICAgMTYgICAgIC0+ICAtMQ0KLWRxcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTENCi1kcXJtbjA1NSByZW1haW5kZXJuZWFyIC0xICAgICA2NCAgICAgLT4gIC0xDQotZHFybW4wNjAgcmVtYWluZGVybmVhciAtMSAgICAtMiAgICAgIC0+ICAtMQ0KLWRxcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTENCi1kcXJtbjA2MiByZW1haW5kZXJuZWFyIC0xICAgIC04ICAgICAgLT4gIC0xDQotZHFybW4wNjMgcmVtYWluZGVybmVhciAtMSAgICAtMTYgICAgIC0+ICAtMQ0KLWRxcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTENCi1kcXJtbjA2NSByZW1haW5kZXJuZWFyIC0xICAgIC02NCAgICAgLT4gIC0xDQotDQotZHFybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xDQotZHFybW4wNjcgcmVtYWluZGVybmVhciAgICAgICAgIDk5LjcgICAxICAtPiAtMC4zDQotZHFybW4wNjggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwDQotZHFybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQNCi1kcXJtbjA3MCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNSAgIDEgIC0+IC0wLjUNCi1kcXJtbjA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOSAgIDEgIC0+IC0wLjENCi1kcXJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQ0KLWRxcm1uMDczIHJlbWFpbmRlcm5lYXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gLTAuMDAwMDAxDQotZHFybW4wNzQgcmVtYWluZGVybmVhciAgOSAgICAgICAgICAgICAxICAtPiAwDQotZHFybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwDQotZHFybW4wNzYgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAyICAtPiAtMQ0KLWRxcm1uMDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMA0KLWRxcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTENCi0NCi1kcXJtbjA4MCByZW1haW5kZXJuZWFyICAwLiAgICAgICAgICAgIDEgIC0+IDANCi1kcXJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMA0KLWRxcm1uMDgyIHJlbWFpbmRlcm5lYXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMA0KLWRxcm1uMDgzIHJlbWFpbmRlcm5lYXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMA0KLWRxcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMA0KLWRxcm1uMDg1IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMA0KLWRxcm1uMDg2IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wDQotZHFybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwDQotZHFybW4wODggcmVtYWluZGVybmVhciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwDQotZHFybW4wODkgcmVtYWluZGVybmVhciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMA0KLWRxcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwDQotZHFybW4wOTEgcmVtYWluZGVybmVhciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwDQotZHFybW4wOTIgcmVtYWluZGVybmVhciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMA0KLWRxcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNw0KLWRxcm1uMDk0IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOA0KLWRxcm1uMDk1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQNCi0NCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMA0KLWRxcm1uMTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4xMDMgcmVtYWluZGVybmVhciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCi1kcXJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQotZHFybW4xMDYgcmVtYWluZGVybmVhciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLS0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dA0KLS0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yDQotLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0NCi1kcXJtbjEwNyByZW1haW5kZXJuZWFyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEwOSByZW1haW5kZXJuZWFyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExMCByZW1haW5kZXJuZWFyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExMiByZW1haW5kZXJuZWFyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExNSByZW1haW5kZXJuZWFyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExNiByZW1haW5kZXJuZWFyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEyMCByZW1haW5kZXJuZWFyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEyMSByZW1haW5kZXJuZWFyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEyMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEyNCByZW1haW5kZXJuZWFyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgemVyb3Mgb24gbGVmdA0KLWRxcm1uMTMwIHJlbWFpbmRlcm5lYXIgIDAgICAgICAxICAgLT4gIDANCi1kcXJtbjEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwDQotZHFybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wDQotZHFybW4xMzMgcmVtYWluZGVybmVhciAgMC4wICAgLTEgICAtPiAgMC4wDQotZHFybW4xMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMA0KLWRxcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTANCi1kcXJtbjEzNiByZW1haW5kZXJuZWFyIC0wLjAgICAgMSAgIC0+IC0wLjANCi1kcXJtbjEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjANCi0NCi0tLSAwLjVlcnMNCi1kcXJtbjE0MyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41DQotZHFybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KLWRxcm1uMTQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQotZHFybW4xNDYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQotZHFybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCi1kcXJtbjE0OCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MA0KLWRxcm1uMTQ5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KLQ0KLS0tIHN0ZWFkaWVzDQotZHFybW4xNTAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDANCi1kcXJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQ0KLWRxcm1uMTUyIHJlbWFpbmRlcm5lYXIgIDEgIDMgICAtPiAxDQotZHFybW4xNTMgcmVtYWluZGVybmVhciAgMSAgNCAgIC0+IDENCi1kcXJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQ0KLWRxcm1uMTU1IHJlbWFpbmRlcm5lYXIgIDEgIDYgICAtPiAxDQotZHFybW4xNTYgcmVtYWluZGVybmVhciAgMSAgNyAgIC0+IDENCi1kcXJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQ0KLWRxcm1uMTU4IHJlbWFpbmRlcm5lYXIgIDEgIDkgICAtPiAxDQotZHFybW4xNTkgcmVtYWluZGVybmVhciAgMSAgMTAgIC0+IDENCi1kcXJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMA0KLWRxcm1uMTYxIHJlbWFpbmRlcm5lYXIgIDIgIDEgICAtPiAwDQotZHFybW4xNjIgcmVtYWluZGVybmVhciAgMyAgMSAgIC0+IDANCi1kcXJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMA0KLWRxcm1uMTY0IHJlbWFpbmRlcm5lYXIgIDUgIDEgICAtPiAwDQotZHFybW4xNjUgcmVtYWluZGVybmVhciAgNiAgMSAgIC0+IDANCi1kcXJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMA0KLWRxcm1uMTY3IHJlbWFpbmRlcm5lYXIgIDggIDEgICAtPiAwDQotZHFybW4xNjggcmVtYWluZGVybmVhciAgOSAgMSAgIC0+IDANCi1kcXJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMA0KLQ0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXINCi1kcXJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDANCi1kcXJtbjE3MiByZW1haW5kZXJuZWFyICAgMC41MCAxLjAyMCAtPiAgMC41MDANCi1kcXJtbjE3MyByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTANCi1kcXJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDANCi1kcXJtbjE3NSByZW1haW5kZXJuZWFyICAgMC42ICAxLjAyMCAtPiAtMC40MjANCi0NCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMA0KLWRxcm1uMjAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMjAyIHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KLWRxcm1uMjA0IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW4yMDUgcmVtYWluZGVybmVhciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMjA3IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW4yMDggcmVtYWluZGVybmVhciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uMjEwIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW4yMTEgcmVtYWluZGVybmVhciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSB0ZXN0cyBmcm9tIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uDQotZHFybW4yMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45DQotZHFybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMg0KLWRxcm1uMjIzIHJlbWFpbmRlcm5lYXIgIDEwICAgICAzICAgLT4gIDENCi1kcXJtbjIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xDQotZHFybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjINCi1kcXJtbjIyNiByZW1haW5kZXJuZWFyICAxMCAgICAgMC4zIC0+IDAuMQ0KLWRxcm1uMjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMw0KLQ0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXINCi1kcXJtbjIzMSByZW1haW5kZXJuZWFyICAtMC40ICAxLjAyMCAtPiAtMC40MDANCi1kcXJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDANCi1kcXJtbjIzMyByZW1haW5kZXJuZWFyICAtMC41MSAxLjAyMCAtPiAtMC41MTANCi1kcXJtbjIzNCByZW1haW5kZXJuZWFyICAtMC41MiAxLjAyMCAtPiAgMC41MDANCi1kcXJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjANCi0NCi0tLSBoaWdoIFhzDQotZHFybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDANCi0NCi0tLSBkcXJtbjN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbA0KLWRxcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxDQotZHFybW4zMDIgcmVtYWluZGVybmVhciAgIDUgICAgNSAgICAgLT4gIDANCi1kcXJtbjMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMw0KLWRxcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMw0KLWRxcm1uMzA1IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMCAgIC0+ICAxMw0KLWRxcm1uMzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMw0KLWRxcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzDQotZHFybW4zMDggcmVtYWluZGVybmVhciAgIDAuMTMzICAxICAgLT4gIDAuMTMzDQotZHFybW4zMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMw0KLWRxcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMw0KLWRxcm1uMzExIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzDQotZHFybW4zMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMNCi1kcXJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zDQotZHFybW4zMTQgcmVtYWluZGVybmVhciAgIDEzMyAgIDEwICAgLT4gIDMNCi1kcXJtbjMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMw0KLWRxcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNw0KLWRxcm1uMzE3IHJlbWFpbmRlcm5lYXIgICAxMDEuMCAgMyAgIC0+IC0xLjANCi1kcXJtbjMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wDQotZHFybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMA0KLWRxcm1uMzIwIHJlbWFpbmRlcm5lYXIgICAyLjQwICAgMSAgIC0+ICAwLjQwDQotZHFybW4zMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwDQotZHFybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNA0KLWRxcm1uMzIzIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMiAgIC0+ICAwLjQNCi1kcXJtbjMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDANCi1kcXJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xDQotZHFybW4zMjYgcmVtYWluZGVybmVhciAgIDEgICAwLjMwICAgLT4gIDAuMTANCi1kcXJtbjMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDANCi1kcXJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwDQotZHFybW4zMjkgcmVtYWluZGVybmVhciAgIDEuMCAgICAwLjMgLT4gIDAuMQ0KLWRxcm1uMzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwDQotZHFybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwDQotZHFybW4zMzIgcmVtYWluZGVybmVhciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMA0KLWRxcm1uMzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCi1kcXJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41DQotZHFybW4zMzUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCi1kcXJtbjMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCi1kcXJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MA0KLWRxcm1uMzM4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQotZHFybW4zMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQotDQotZHFybW4zNDAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgLTFFLTcNCi1kcXJtbjM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgNCi1kcXJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05DQotZHFybW4zNDMgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgLTFFLTEwDQotZHFybW4zNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQ0KLWRxcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcNCi1kcXJtbjM0NiByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOA0KLWRxcm1uMzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQ0KLWRxcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwDQotZHFybW4zNDkgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExDQotZHFybW4zNTAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMg0KLQ0KLWRxcm1uMzUxIHJlbWFpbmRlcm5lYXIgICAwLjAzICA3ICAtPiAgMC4wMw0KLWRxcm1uMzUyIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQ0KLWRxcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjENCi1kcXJtbjM1NCByZW1haW5kZXJuZWFyICAgNC4wMSAgIDIgICAgLT4gIDAuMDENCi1kcXJtbjM1NSByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQ0KLWRxcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDENCi1kcXJtbjM1NyByZW1haW5kZXJuZWFyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDENCi1kcXJtbjM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQ0KLWRxcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03DQotDQotZHFybW4zNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwDQotZHFybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44DQotZHFybW4zNjIgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wDQotZHFybW4zNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xDQotZHFybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDANCi1kcXJtbjM2NSByZW1haW5kZXJuZWFyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMA0KLWRxcm1uMzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwDQotDQotLS0gcm91bmQgdG8gZXZlbg0KLWRxcm1uMzcxIHJlbWFpbmRlcm5lYXIgICAxMjEgICAgIDIgICAgLT4gIDENCi1kcXJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwDQotZHFybW4zNzMgcmVtYWluZGVybmVhciAgIDEyMyAgICAgMiAgICAtPiAtMQ0KLWRxcm1uMzc0IHJlbWFpbmRlcm5lYXIgICAxMjQgICAgIDIgICAgLT4gIDANCi1kcXJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxDQotZHFybW4zNzYgcmVtYWluZGVybmVhciAgIDEyNiAgICAgMiAgICAtPiAgMA0KLWRxcm1uMzc3IHJlbWFpbmRlcm5lYXIgICAxMjcgICAgIDIgICAgLT4gLTENCi0NCi1kcXJtbjM4MSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxICAgICAgICAgLT4gIDANCi1kcXJtbjM4MiByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMDEgICAgLT4gLTAuMjM0NA0KLWRxcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMNCi1kcXJtbjM4NCByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAxICAgICAgLT4gLTAuMjMNCi1kcXJtbjM4NSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjEgICAgICAgLT4gLTAuMw0KLWRxcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQ0KLWRxcm1uMzg3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQ0KLWRxcm1uMzg4IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQuMDAwMSAgICAtPiAtMS4zMDg5DQotZHFybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQNCi1kcXJtbjM5MCByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQ0KLWRxcm1uMzkxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTkgICAgICAtPiAtMC4yNg0KLWRxcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkNCi1kcXJtbjM5MyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQ0KLWRxcm1uMzk0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUgICAgICAgICAtPiAgMA0KLWRxcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5DQotZHFybW4zOTYgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDEgICAgIC0+IC0yLjQ2OQ0KLWRxcm1uMzk3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNg0KLWRxcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xDQotDQotLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMNCi1kcXJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQNCi1kcXJtbjQwMiByZW1haW5kZXJuZWFyICAgMC40NSAgICAgICAgMSAgIC0+ICAwLjQ1DQotZHFybW40MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUNCi1kcXJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUNCi1kcXJtbjQwNSByZW1haW5kZXJuZWFyICAgMC40NTU1NSAgICAgMSAgIC0+ICAwLjQ1NTU1DQotZHFybW40MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUNCi1kcXJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUNCi1kcXJtbjQwOCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NSAgMSAgIC0+ICAwLjQ1NTU1NTU1DQotZHFybW40MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUNCi0tLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdDQotZHFybW40MTEgcmVtYWluZGVybmVhciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41DQotZHFybW40MTIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQ0KLWRxcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1DQotZHFybW40MTQgcmVtYWluZGVybmVhciAgIDAuNTU1NSAgICAgIDEgICAtPiAtMC40NDQ1DQotZHFybW40MTUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQ0KLWRxcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1DQotZHFybW40MTcgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NSAgIDEgICAtPiAtMC40NDQ0NDQ1DQotZHFybW40MTggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQ0KLWRxcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1DQotDQotLS0gZm9sZGRvd25zDQotZHFybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcXJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCi1kcXJtbjQyMyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgMkUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCi1kcXJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJtbjQyNiByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCi1kcXJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gIC0yLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJtbjQyOSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi1kcXJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCi0tLSB0aW5pZXMNCi1kcXJtbjQzMSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgMUUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KLWRxcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAzRS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsDQotZHFybW40MzQgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDRFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDZFLTYxNzYgIC0+ICAtMkUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQzNyByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgN0UtNjE3NiAgLT4gICAzRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsDQotZHFybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDlFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQ0MCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAxMEUtNjE3NiAgLT4gICAwRS02MTc2DQotZHFybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwNCi1kcXJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAxMUUtNjE3NiAgLT4gIC0xRS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDQzIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDIwRS02MTc2ICAtPiAgIDBFLTYxNzYNCi1kcXJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gIC04RS02MTc2IFN1Ym5vcm1hbA0KLWRxcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDMwRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQotDQotLS0gemVybyBzaWducw0KLWRxcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDANCi1kcXJtbjY1MSByZW1haW5kZXJuZWFyIC0xICAxIC0+IC0wDQotZHFybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMA0KLWRxcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTANCi1kcXJtbjY1NCByZW1haW5kZXJuZWFyICAwICAxIC0+ICAwDQotZHFybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMA0KLWRxcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDANCi1kcXJtbjY1NyByZW1haW5kZXJuZWFyIC0wIC0xIC0+IC0wDQotZHFybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDANCi1kcXJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMA0KLQ0KLS0tIFNwZWNpYWxzDQotZHFybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjgxIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjg0IHJlbWFpbmRlcm5lYXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNjg3IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KLWRxcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjY5MSByZW1haW5kZXJuZWFyIC0xICAgICBJbmYgICAtPiAtMQ0KLWRxcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwDQotZHFybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTANCi1kcXJtbjY5NCByZW1haW5kZXJuZWFyICAxICAgICBJbmYgICAtPiAgMQ0KLWRxcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQotZHFybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDIgcmVtYWluZGVybmVhciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDUgcmVtYWluZGVybmVhciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43MDggcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotZHFybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTENCi1kcXJtbjcxMSByZW1haW5kZXJuZWFyIC0wICAgIC1JbmYgICAtPiAtMA0KLWRxcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwDQotZHFybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDENCi1kcXJtbjcxNCByZW1haW5kZXJuZWFyICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KLWRxcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXJtbjcyMSByZW1haW5kZXJuZWFyICBOYU4gLUluZiAgICAtPiAgTmFODQotZHFybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1kcXJtbjcyNCByZW1haW5kZXJuZWFyICBOYU4gLTAgICAgICAtPiAgTmFODQotZHFybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTg0KLWRxcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1kcXJtbjcyNyByZW1haW5kZXJuZWFyICBOYU4gIDEwMDAgICAtPiAgTmFODQotZHFybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4NCi1kcXJtbjczMCByZW1haW5kZXJuZWFyIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZHFybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1kcXJtbjczMyByZW1haW5kZXJuZWFyIC0wICAgLU5hTiAgICAtPiAtTmFODQotZHFybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4NCi1kcXJtbjczNiByZW1haW5kZXJuZWFyICAxMDAwIE5hTiAgICAtPiAgTmFODQotZHFybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxcm1uNzQxIHJlbWFpbmRlcm5lYXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzQ0IHJlbWFpbmRlcm5lYXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzQ3IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzUxIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzU0IHJlbWFpbmRlcm5lYXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzU3IHJlbWFpbmRlcm5lYXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2luZyBOYU5zDQotZHFybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQ0KLWRxcm1uNzYxIHJlbWFpbmRlcm5lYXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uDQotZHFybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm1uNzY0IHJlbWFpbmRlcm5lYXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExDQotZHFybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONg0KLWRxcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzDQotZHFybW43NjcgcmVtYWluZGVybmVhciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQNCi1kcXJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQ0KLWRxcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2DQotDQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQotZHFybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgIDEwICAgIC0+IC00DQotZHFybW43NzEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAxICAgIC0+ICAwDQotZHFybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi0NCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzDQotZHFybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KLWRxcm1uODAyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCi1kcXJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQotZHFybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KLWRxcm1uODA1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCi1kcXJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQotZHFybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KLWRxcm1uODA4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1kcXJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQotZHFybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KLWRxcm1uODExIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00DQotZHFybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLWRxcm1uODIxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCi1kcXJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQotZHFybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KLWRxcm1uODI0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCi1kcXJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQotZHFybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KLWRxcm1uODI3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCi1kcXJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQotZHFybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KLWRxcm1uODMwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1kcXJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNA0KLWRxcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCi0NCi0tLSBmcm9tIGRpdmlkZWludA0KLWRxcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMA0KLWRxcm1uODQxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNA0KLWRxcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQ0KLWRxcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQ0KLWRxcm1uODQ0IHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gLTAuMDAxDQotZHFybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMg0KLWRxcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTINCi1kcXJtbjg1MiByZW1haW5kZXJuZWFyICAxMDAwMDAzICAgICAgIDUgIC0+IC0yDQotZHFybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMg0KLWRxcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTINCi1kcXJtbjg1NSByZW1haW5kZXJuZWFyICAxMDAzICAgICAgICAgIDUgIC0+IC0yDQotZHFybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMg0KLWRxcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTINCi1kcXJtbjg1OCByZW1haW5kZXJuZWFyICAxICAgICAgICAgICAgIDUgIC0+ICAxDQotDQotLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCi1kcXJtbjg2MCByZW1haW5kZXJuZWFyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCi1kcXJtbjg2MyByZW1haW5kZXJuZWFyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KLWRxcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQotZHFybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg3NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg4MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwDQotZHFybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzANCi1kcXJtbjg4MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMA0KLWRxcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwDQotZHFybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDANCi1kcXJtbjg4NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMA0KLQ0KLWRxcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44OTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44OTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW44OTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwDQotZHFybW45MDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzANCi1kcXJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMA0KLWRxcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwDQotZHFybW45MDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzANCi1kcXJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMA0KLWRxcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwDQotDQotZHFybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTEyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTE1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTE5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwDQotZHFybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzANCi1kcXJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMA0KLWRxcm1uOTIyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwDQotZHFybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzANCi1kcXJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMA0KLWRxcm1uOTI1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgLTIwDQotZHFybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDANCi0NCi1kcXJtbjkzMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkzMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjkzNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwDQotZHFybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjk0MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMA0KLWRxcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwDQotZHFybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzANCi1kcXJtbjk0MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMA0KLWRxcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwDQotZHFybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzANCi1kcXJtbjk0NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAtMw0KLQ0KLWRxcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCi1kcXJtbjk2MSByZW1haW5kZXJuZWFyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kcXJtbjk2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCi1kcXJtbjk2NyByZW1haW5kZXJuZWFyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQotZHFybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KLWRxcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzANCi0NCi1kcXJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5DQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQotZHFybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcm1uMTA1MiByZW1haW5kZXJuZWFyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCi1kcXJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQotZHFybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KLWRxcm1uMTA1NSByZW1haW5kZXJuZWFyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3DQotZHFybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcNCi1kcXJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3Nw0KLWRxcm1uMTA1OCByZW1haW5kZXJuZWFyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3DQotDQotLS0gR3l1cmlzIGV4YW1wbGUNCi1kcXJtbjEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzDQotDQotLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QNCi1kcXJtbjExMDEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzDQotZHFybW4xMTAyICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAtMC4zNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMg0KLWRxcm1uMTEwMyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTENCi1kcXJtbjExMDQgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0DQotZHFybW4xMTA1ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5Mg0KLWRxcm1uMTEwNiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgNCi1kcXJtbjExMDcgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQotZHFybW4xMTA4ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIC0wLjc1MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1Mw0KLWRxcm1uMTEwOSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcNCi1kcXJtbjExMTAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAxLjUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU0DQotZHFybW4xMTExICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Mg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1kcXJtbjEwMDAgcmVtYWluZGVybmVhciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyLW5lYXIgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCitkcXJtbjAwMSByZW1haW5kZXJuZWFyICAxICAgICAxICAgIC0+ICAwCitkcXJtbjAwMiByZW1haW5kZXJuZWFyICAyICAgICAxICAgIC0+ICAwCitkcXJtbjAwMyByZW1haW5kZXJuZWFyICAxICAgICAyICAgIC0+ICAxCitkcXJtbjAwNCByZW1haW5kZXJuZWFyICAyICAgICAyICAgIC0+ICAwCitkcXJtbjAwNSByZW1haW5kZXJuZWFyICAwICAgICAxICAgIC0+ICAwCitkcXJtbjAwNiByZW1haW5kZXJuZWFyICAwICAgICAyICAgIC0+ICAwCitkcXJtbjAwNyByZW1haW5kZXJuZWFyICAxICAgICAzICAgIC0+ICAxCitkcXJtbjAwOCByZW1haW5kZXJuZWFyICAyICAgICAzICAgIC0+IC0xCitkcXJtbjAwOSByZW1haW5kZXJuZWFyICAzICAgICAzICAgIC0+ICAwCisKK2Rxcm1uMDEwIHJlbWFpbmRlcm5lYXIgIDIuNCAgIDEgICAgLT4gIDAuNAorZHFybW4wMTEgcmVtYWluZGVybmVhciAgMi40ICAgLTEgICAtPiAgMC40CitkcXJtbjAxMiByZW1haW5kZXJuZWFyICAtMi40ICAxICAgIC0+ICAtMC40CitkcXJtbjAxMyByZW1haW5kZXJuZWFyICAtMi40ICAtMSAgIC0+ICAtMC40CitkcXJtbjAxNCByZW1haW5kZXJuZWFyICAyLjQwICAxICAgIC0+ICAwLjQwCitkcXJtbjAxNSByZW1haW5kZXJuZWFyICAyLjQwMCAxICAgIC0+ICAwLjQwMAorZHFybW4wMTYgcmVtYWluZGVybmVhciAgMi40ICAgMiAgICAtPiAgMC40CitkcXJtbjAxNyByZW1haW5kZXJuZWFyICAyLjQwMCAyICAgIC0+ICAwLjQwMAorZHFybW4wMTggcmVtYWluZGVybmVhciAgMi4gICAgMiAgICAtPiAgMAorZHFybW4wMTkgcmVtYWluZGVybmVhciAgMjAgICAgMjAgICAtPiAgMAorCitkcXJtbjAyMCByZW1haW5kZXJuZWFyICAxODcgICAxODcgICAgLT4gIDAKK2Rxcm1uMDIxIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIgICAgICAtPiAgMQorZHFybW4wMjIgcmVtYWluZGVybmVhciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK2Rxcm1uMDIzIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDAKK2Rxcm1uMDI0IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKK2Rxcm1uMDI1IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworZHFybW4wMzAgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAgIC0+ICAxCitkcXJtbjAzMSByZW1haW5kZXJuZWFyICAxICAgICA0ICAgICAgLT4gIDEKK2Rxcm1uMDMyIHJlbWFpbmRlcm5lYXIgIDEgICAgIDggICAgICAtPiAgMQorCitkcXJtbjAzMyByZW1haW5kZXJuZWFyICAxICAgICAxNiAgICAgLT4gIDEKK2Rxcm1uMDM0IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMyICAgICAtPiAgMQorZHFybW4wMzUgcmVtYWluZGVybmVhciAgMSAgICAgNjQgICAgIC0+ICAxCitkcXJtbjA0MCByZW1haW5kZXJuZWFyICAxICAgIC0yICAgICAgLT4gIDEKK2Rxcm1uMDQxIHJlbWFpbmRlcm5lYXIgIDEgICAgLTQgICAgICAtPiAgMQorZHFybW4wNDIgcmVtYWluZGVybmVhciAgMSAgICAtOCAgICAgIC0+ICAxCitkcXJtbjA0MyByZW1haW5kZXJuZWFyICAxICAgIC0xNiAgICAgLT4gIDEKK2Rxcm1uMDQ0IHJlbWFpbmRlcm5lYXIgIDEgICAgLTMyICAgICAtPiAgMQorZHFybW4wNDUgcmVtYWluZGVybmVhciAgMSAgICAtNjQgICAgIC0+ICAxCitkcXJtbjA1MCByZW1haW5kZXJuZWFyIC0xICAgICAyICAgICAgLT4gIC0xCitkcXJtbjA1MSByZW1haW5kZXJuZWFyIC0xICAgICA0ICAgICAgLT4gIC0xCitkcXJtbjA1MiByZW1haW5kZXJuZWFyIC0xICAgICA4ICAgICAgLT4gIC0xCitkcXJtbjA1MyByZW1haW5kZXJuZWFyIC0xICAgICAxNiAgICAgLT4gIC0xCitkcXJtbjA1NCByZW1haW5kZXJuZWFyIC0xICAgICAzMiAgICAgLT4gIC0xCitkcXJtbjA1NSByZW1haW5kZXJuZWFyIC0xICAgICA2NCAgICAgLT4gIC0xCitkcXJtbjA2MCByZW1haW5kZXJuZWFyIC0xICAgIC0yICAgICAgLT4gIC0xCitkcXJtbjA2MSByZW1haW5kZXJuZWFyIC0xICAgIC00ICAgICAgLT4gIC0xCitkcXJtbjA2MiByZW1haW5kZXJuZWFyIC0xICAgIC04ICAgICAgLT4gIC0xCitkcXJtbjA2MyByZW1haW5kZXJuZWFyIC0xICAgIC0xNiAgICAgLT4gIC0xCitkcXJtbjA2NCByZW1haW5kZXJuZWFyIC0xICAgIC0zMiAgICAgLT4gIC0xCitkcXJtbjA2NSByZW1haW5kZXJuZWFyIC0xICAgIC02NCAgICAgLT4gIC0xCisKK2Rxcm1uMDY2IHJlbWFpbmRlcm5lYXIgICAgICAgICAgOS45ICAgMSAgLT4gLTAuMQorZHFybW4wNjcgcmVtYWluZGVybmVhciAgICAgICAgIDk5LjcgICAxICAtPiAtMC4zCitkcXJtbjA2OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkgICAgIDEgIC0+IDAKK2Rxcm1uMDY5IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40CitkcXJtbjA3MCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNSAgIDEgIC0+IC0wLjUKK2Rxcm1uMDcxIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gLTAuMQorZHFybW4wNzIgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAtMC4wMDEKK2Rxcm1uMDczIHJlbWFpbmRlcm5lYXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gLTAuMDAwMDAxCitkcXJtbjA3NCByZW1haW5kZXJuZWFyICA5ICAgICAgICAgICAgIDEgIC0+IDAKK2Rxcm1uMDc1IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMAorZHFybW4wNzYgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAyICAtPiAtMQorZHFybW4wNzcgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwCitkcXJtbjA3OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IC0xCisKK2Rxcm1uMDgwIHJlbWFpbmRlcm5lYXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorZHFybW4wODEgcmVtYWluZGVybmVhciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKK2Rxcm1uMDgyIHJlbWFpbmRlcm5lYXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMAorZHFybW4wODMgcmVtYWluZGVybmVhciAgMC4wMEUrOSAgICAgICAxICAtPiAwCitkcXJtbjA4NCByZW1haW5kZXJuZWFyICAwLjAwRSszICAgICAgIDEgIC0+IDAKK2Rxcm1uMDg1IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMAorZHFybW4wODYgcmVtYWluZGVybmVhciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjAKK2Rxcm1uMDg3IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAorZHFybW4wODggcmVtYWluZGVybmVhciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwCitkcXJtbjA4OSByZW1haW5kZXJuZWFyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwCitkcXJtbjA5MCByZW1haW5kZXJuZWFyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAorZHFybW4wOTEgcmVtYWluZGVybmVhciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwCitkcXJtbjA5MiByZW1haW5kZXJuZWFyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwCitkcXJtbjA5MyByZW1haW5kZXJuZWFyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKK2Rxcm1uMDk0IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOAorZHFybW4wOTUgcmVtYWluZGVybmVhciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorZHFybW4xMDEgcmVtYWluZGVybmVhciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4xMDIgcmVtYWluZGVybmVhciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4xMDMgcmVtYWluZGVybmVhciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4xMDQgcmVtYWluZGVybmVhciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4xMDUgcmVtYWluZGVybmVhciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4xMDYgcmVtYWluZGVybmVhciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0CistLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgorLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KK2Rxcm1uMTA3IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMDggcmVtYWluZGVybmVhciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEwOSByZW1haW5kZXJuZWFyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTEwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTEgcmVtYWluZGVybmVhciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExMiByZW1haW5kZXJuZWFyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTEzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTQgcmVtYWluZGVybmVhciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExNSByZW1haW5kZXJuZWFyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTE2IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTkgcmVtYWluZGVybmVhciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyMCByZW1haW5kZXJuZWFyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIxIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjIgcmVtYWluZGVybmVhciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTI0IHJlbWFpbmRlcm5lYXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHplcm9zIG9uIGxlZnQKK2Rxcm1uMTMwIHJlbWFpbmRlcm5lYXIgIDAgICAgICAxICAgLT4gIDAKK2Rxcm1uMTMxIHJlbWFpbmRlcm5lYXIgIDAgICAgIC0xICAgLT4gIDAKK2Rxcm1uMTMyIHJlbWFpbmRlcm5lYXIgIDAuMCAgICAxICAgLT4gIDAuMAorZHFybW4xMzMgcmVtYWluZGVybmVhciAgMC4wICAgLTEgICAtPiAgMC4wCitkcXJtbjEzNCByZW1haW5kZXJuZWFyIC0wICAgICAgMSAgIC0+IC0wCitkcXJtbjEzNSByZW1haW5kZXJuZWFyIC0wICAgICAtMSAgIC0+IC0wCitkcXJtbjEzNiByZW1haW5kZXJuZWFyIC0wLjAgICAgMSAgIC0+IC0wLjAKK2Rxcm1uMTM3IHJlbWFpbmRlcm5lYXIgLTAuMCAgIC0xICAgLT4gLTAuMAorCistLSAwLjVlcnMKK2Rxcm1uMTQzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2Rxcm1uMTQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2Rxcm1uMTQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkcXJtbjE0NiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2Rxcm1uMTQ3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkcXJtbjE0OCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAorZHFybW4xNDkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKKy0tIHN0ZWFkaWVzCitkcXJtbjE1MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorZHFybW4xNTEgcmVtYWluZGVybmVhciAgMSAgMiAgIC0+IDEKK2Rxcm1uMTUyIHJlbWFpbmRlcm5lYXIgIDEgIDMgICAtPiAxCitkcXJtbjE1MyByZW1haW5kZXJuZWFyICAxICA0ICAgLT4gMQorZHFybW4xNTQgcmVtYWluZGVybmVhciAgMSAgNSAgIC0+IDEKK2Rxcm1uMTU1IHJlbWFpbmRlcm5lYXIgIDEgIDYgICAtPiAxCitkcXJtbjE1NiByZW1haW5kZXJuZWFyICAxICA3ICAgLT4gMQorZHFybW4xNTcgcmVtYWluZGVybmVhciAgMSAgOCAgIC0+IDEKK2Rxcm1uMTU4IHJlbWFpbmRlcm5lYXIgIDEgIDkgICAtPiAxCitkcXJtbjE1OSByZW1haW5kZXJuZWFyICAxICAxMCAgLT4gMQorZHFybW4xNjAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDAKK2Rxcm1uMTYxIHJlbWFpbmRlcm5lYXIgIDIgIDEgICAtPiAwCitkcXJtbjE2MiByZW1haW5kZXJuZWFyICAzICAxICAgLT4gMAorZHFybW4xNjMgcmVtYWluZGVybmVhciAgNCAgMSAgIC0+IDAKK2Rxcm1uMTY0IHJlbWFpbmRlcm5lYXIgIDUgIDEgICAtPiAwCitkcXJtbjE2NSByZW1haW5kZXJuZWFyICA2ICAxICAgLT4gMAorZHFybW4xNjYgcmVtYWluZGVybmVhciAgNyAgMSAgIC0+IDAKK2Rxcm1uMTY3IHJlbWFpbmRlcm5lYXIgIDggIDEgICAtPiAwCitkcXJtbjE2OCByZW1haW5kZXJuZWFyICA5ICAxICAgLT4gMAorZHFybW4xNjkgcmVtYWluZGVybmVhciAgMTAgMSAgIC0+IDAKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorZHFybW4xNzEgcmVtYWluZGVybmVhciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCitkcXJtbjE3MiByZW1haW5kZXJuZWFyICAgMC41MCAxLjAyMCAtPiAgMC41MDAKK2Rxcm1uMTczIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorZHFybW4xNzQgcmVtYWluZGVybmVhciAgIDAuNTIgMS4wMjAgLT4gLTAuNTAwCitkcXJtbjE3NSByZW1haW5kZXJuZWFyICAgMC42ICAxLjAyMCAtPiAtMC40MjAKKworLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKK2Rxcm1uMjAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4yMDIgcmVtYWluZGVybmVhciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjIwMyByZW1haW5kZXJuZWFyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMjA0IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwNSByZW1haW5kZXJuZWFyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDYgcmVtYWluZGVybmVhciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA3IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwOCByZW1haW5kZXJuZWFyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDkgcmVtYWluZGVybmVhciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjEwIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIxMSByZW1haW5kZXJuZWFyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSB0ZXN0cyBmcm9tIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uCitkcXJtbjIyMSByZW1haW5kZXJuZWFyIDIuMSAgICAgMyAgIC0+IC0wLjkKK2Rxcm1uMjIyIHJlbWFpbmRlcm5lYXIgIDEwICAgICA2ICAgLT4gLTIKK2Rxcm1uMjIzIHJlbWFpbmRlcm5lYXIgIDEwICAgICAzICAgLT4gIDEKK2Rxcm1uMjI0IHJlbWFpbmRlcm5lYXIgLTEwICAgICAzICAgLT4gLTEKK2Rxcm1uMjI1IHJlbWFpbmRlcm5lYXIgIDEwLjIgICAxICAgLT4gMC4yCitkcXJtbjIyNiByZW1haW5kZXJuZWFyICAxMCAgICAgMC4zIC0+IDAuMQorZHFybW4yMjcgcmVtYWluZGVybmVhciAgIDMuNiAgIDEuMyAtPiAtMC4zCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKK2Rxcm1uMjMxIHJlbWFpbmRlcm5lYXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAorZHFybW4yMzIgcmVtYWluZGVybmVhciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwCitkcXJtbjIzMyByZW1haW5kZXJuZWFyICAtMC41MSAxLjAyMCAtPiAtMC41MTAKK2Rxcm1uMjM0IHJlbWFpbmRlcm5lYXIgIC0wLjUyIDEuMDIwIC0+ICAwLjUwMAorZHFybW4yMzUgcmVtYWluZGVybmVhciAgLTAuNiAgMS4wMjAgLT4gIDAuNDIwCisKKy0tIGhpZ2ggWHMKK2Rxcm1uMjQwIHJlbWFpbmRlcm5lYXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwCisKKy0tIGRxcm1uM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCitkcXJtbjMwMSByZW1haW5kZXJuZWFyICAgMSAgICAzICAgICAtPiAgMQorZHFybW4zMDIgcmVtYWluZGVybmVhciAgIDUgICAgNSAgICAgLT4gIDAKK2Rxcm1uMzAzIHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwICAgIC0+ICAzCitkcXJtbjMwNCByZW1haW5kZXJuZWFyICAgMTMgICA1MCAgICAtPiAgMTMKK2Rxcm1uMzA1IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMCAgIC0+ICAxMworZHFybW4zMDYgcmVtYWluZGVybmVhciAgIDEzICAgMTAwMCAgLT4gIDEzCitkcXJtbjMwNyByZW1haW5kZXJuZWFyICAgLjEzICAgIDEgICAtPiAgMC4xMworZHFybW4zMDggcmVtYWluZGVybmVhciAgIDAuMTMzICAxICAgLT4gIDAuMTMzCitkcXJtbjMwOSByZW1haW5kZXJuZWFyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCitkcXJtbjMxMCByZW1haW5kZXJuZWFyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK2Rxcm1uMzExIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzCitkcXJtbjMxMiByZW1haW5kZXJuZWFyICAgMTAuMzMgMTAgICAtPiAgMC4zMworZHFybW4zMTMgcmVtYWluZGVybmVhciAgIDEwMy4zICAxICAgLT4gIDAuMworZHFybW4zMTQgcmVtYWluZGVybmVhciAgIDEzMyAgIDEwICAgLT4gIDMKK2Rxcm1uMzE1IHJlbWFpbmRlcm5lYXIgICAxMDMzICAxMCAgIC0+ICAzCitkcXJtbjMxNiByZW1haW5kZXJuZWFyICAgMTAzMyAgNTAgICAtPiAtMTcKK2Rxcm1uMzE3IHJlbWFpbmRlcm5lYXIgICAxMDEuMCAgMyAgIC0+IC0xLjAKK2Rxcm1uMzE4IHJlbWFpbmRlcm5lYXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK2Rxcm1uMzE5IHJlbWFpbmRlcm5lYXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK2Rxcm1uMzIwIHJlbWFpbmRlcm5lYXIgICAyLjQwICAgMSAgIC0+ICAwLjQwCitkcXJtbjMyMSByZW1haW5kZXJuZWFyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK2Rxcm1uMzIyIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK2Rxcm1uMzIzIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMiAgIC0+ICAwLjQKK2Rxcm1uMzI0IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorZHFybW4zMjUgcmVtYWluZGVybmVhciAgIDEgICAwLjMgICAgLT4gIDAuMQorZHFybW4zMjYgcmVtYWluZGVybmVhciAgIDEgICAwLjMwICAgLT4gIDAuMTAKK2Rxcm1uMzI3IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorZHFybW4zMjggcmVtYWluZGVybmVhciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorZHFybW4zMjkgcmVtYWluZGVybmVhciAgIDEuMCAgICAwLjMgLT4gIDAuMQorZHFybW4zMzAgcmVtYWluZGVybmVhciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK2Rxcm1uMzMxIHJlbWFpbmRlcm5lYXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorZHFybW4zMzIgcmVtYWluZGVybmVhciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMAorZHFybW4zMzMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFybW4zMzQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFybW4zMzUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMzM2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFybW4zMzcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2Rxcm1uMzM4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkcXJtbjMzOSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworZHFybW4zNDAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgLTFFLTcKK2Rxcm1uMzQxIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAtMUUtOAorZHFybW4zNDIgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAtMUUtOQorZHFybW4zNDMgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgLTFFLTEwCitkcXJtbjM0NCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgLTFFLTExCitkcXJtbjM0NSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03CitkcXJtbjM0NiByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOAorZHFybW4zNDcgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05CitkcXJtbjM0OCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMAorZHFybW4zNDkgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExCitkcXJtbjM1MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCisKK2Rxcm1uMzUxIHJlbWFpbmRlcm5lYXIgICAwLjAzICA3ICAtPiAgMC4wMworZHFybW4zNTIgcmVtYWluZGVybmVhciAgIDUgICAyICAgIC0+ICAxCitkcXJtbjM1MyByZW1haW5kZXJuZWFyICAgNC4xICAgMiAgICAtPiAgMC4xCitkcXJtbjM1NCByZW1haW5kZXJuZWFyICAgNC4wMSAgIDIgICAgLT4gIDAuMDEKK2Rxcm1uMzU1IHJlbWFpbmRlcm5lYXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxCitkcXJtbjM1NiByZW1haW5kZXJuZWFyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCitkcXJtbjM1NyByZW1haW5kZXJuZWFyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDEKK2Rxcm1uMzU4IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxCitkcXJtbjM1OSByZW1haW5kZXJuZWFyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCitkcXJtbjM2MCByZW1haW5kZXJuZWFyICAgMS4yICAgMC43MzQ1IC0+IC0wLjI2OTAKK2Rxcm1uMzYxIHJlbWFpbmRlcm5lYXIgICAwLjggICAxMiAgICAgLT4gIDAuOAorZHFybW4zNjIgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCitkcXJtbjM2MyByZW1haW5kZXJuZWFyICAgMC44ICAgMC4zICAgIC0+IC0wLjEKK2Rxcm1uMzY0IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwCitkcXJtbjM2NSByZW1haW5kZXJuZWFyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorZHFybW4zNjYgcmVtYWluZGVybmVhciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDAKKworLS0gcm91bmQgdG8gZXZlbgorZHFybW4zNzEgcmVtYWluZGVybmVhciAgIDEyMSAgICAgMiAgICAtPiAgMQorZHFybW4zNzIgcmVtYWluZGVybmVhciAgIDEyMiAgICAgMiAgICAtPiAgMAorZHFybW4zNzMgcmVtYWluZGVybmVhciAgIDEyMyAgICAgMiAgICAtPiAtMQorZHFybW4zNzQgcmVtYWluZGVybmVhciAgIDEyNCAgICAgMiAgICAtPiAgMAorZHFybW4zNzUgcmVtYWluZGVybmVhciAgIDEyNSAgICAgMiAgICAtPiAgMQorZHFybW4zNzYgcmVtYWluZGVybmVhciAgIDEyNiAgICAgMiAgICAtPiAgMAorZHFybW4zNzcgcmVtYWluZGVybmVhciAgIDEyNyAgICAgMiAgICAtPiAtMQorCitkcXJtbjM4MSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxICAgICAgICAgLT4gIDAKK2Rxcm1uMzgyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAwMSAgICAtPiAtMC4yMzQ0CitkcXJtbjM4MyByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMSAgICAgLT4gLTAuMzMzCitkcXJtbjM4NCByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAxICAgICAgLT4gLTAuMjMKK2Rxcm1uMzg1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMSAgICAgICAtPiAtMC4zCitkcXJtbjM4NiByZW1haW5kZXJuZWFyIDEyMzU1ICA0ICAgICAgICAgLT4gLTEKK2Rxcm1uMzg3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQorZHFybW4zODggcmVtYWluZGVybmVhciAxMjM1NSAgNC4wMDAxICAgIC0+IC0xLjMwODkKK2Rxcm1uMzg5IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0CitkcXJtbjM5MCByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQorZHFybW4zOTEgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OSAgICAgIC0+IC0wLjI2CitkcXJtbjM5MiByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5CitkcXJtbjM5MyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQorZHFybW4zOTQgcmVtYWluZGVybmVhciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCitkcXJtbjM5NSByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMDEgICAgLT4gLTAuMjQ2OQorZHFybW4zOTYgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDEgICAgIC0+IC0yLjQ2OQorZHFybW4zOTcgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CitkcXJtbjM5OCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjEgICAgICAgLT4gLTIuMQorCistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcworZHFybW40MDEgcmVtYWluZGVybmVhciAgIDAuNCAgICAgICAgIDEgICAtPiAgMC40CitkcXJtbjQwMiByZW1haW5kZXJuZWFyICAgMC40NSAgICAgICAgMSAgIC0+ICAwLjQ1CitkcXJtbjQwMyByZW1haW5kZXJuZWFyICAgMC40NTUgICAgICAgMSAgIC0+ICAwLjQ1NQorZHFybW40MDQgcmVtYWluZGVybmVhciAgIDAuNDU1NSAgICAgIDEgICAtPiAgMC40NTU1CitkcXJtbjQwNSByZW1haW5kZXJuZWFyICAgMC40NTU1NSAgICAgMSAgIC0+ICAwLjQ1NTU1CitkcXJtbjQwNiByZW1haW5kZXJuZWFyICAgMC40NTU1NTUgICAgMSAgIC0+ICAwLjQ1NTU1NQorZHFybW40MDcgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NSAgIDEgICAtPiAgMC40NTU1NTU1CitkcXJtbjQwOCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NSAgMSAgIC0+ICAwLjQ1NTU1NTU1CitkcXJtbjQwOSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQorLS0gd2l0aCBzcGlsbC4uLiBbNDEyIGV4ZXJjaXNlcyBzdGlja3RhYiBsb29wXQorZHFybW40MTEgcmVtYWluZGVybmVhciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41CitkcXJtbjQxMiByZW1haW5kZXJuZWFyICAgMC41NSAgICAgICAgMSAgIC0+IC0wLjQ1CitkcXJtbjQxMyByZW1haW5kZXJuZWFyICAgMC41NTUgICAgICAgMSAgIC0+IC0wLjQ0NQorZHFybW40MTQgcmVtYWluZGVybmVhciAgIDAuNTU1NSAgICAgIDEgICAtPiAtMC40NDQ1CitkcXJtbjQxNSByZW1haW5kZXJuZWFyICAgMC41NTU1NSAgICAgMSAgIC0+IC0wLjQ0NDQ1CitkcXJtbjQxNiByZW1haW5kZXJuZWFyICAgMC41NTU1NTUgICAgMSAgIC0+IC0wLjQ0NDQ0NQorZHFybW40MTcgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NSAgIDEgICAtPiAtMC40NDQ0NDQ1CitkcXJtbjQxOCByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NSAgMSAgIC0+IC0wLjQ0NDQ0NDQ1CitkcXJtbjQxOSByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NTUgMSAgIC0+IC0wLjQ0NDQ0NDQ0NQorCistLSBmb2xkZG93bnMKK2Rxcm1uNDIxIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKK2Rxcm1uNDIzIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAyRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFybW40MjQgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDNFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI2IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA1RSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFybW40MjcgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDZFKzYxNDMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI5IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA4RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MzAgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDlFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCistLSB0aW5pZXMKK2Rxcm1uNDMxIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYKK2Rxcm1uNDMyIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAyRS02MTc2ICAtPiAgIDBFLTYxNzYKK2Rxcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAzRS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzNCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzUgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDVFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDZFLTYxNzYgIC0+ICAtMkUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM3IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzOCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDlFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDQwIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYKK2Rxcm1uNDQxIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAxMUUtNjE3NiAgLT4gIC0xRS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDMgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40NDQgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMjFFLTYxNzYgIC0+ICAtOEUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDMwRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCisKKy0tIHplcm8gc2lnbnMKK2Rxcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDAKK2Rxcm1uNjUxIHJlbWFpbmRlcm5lYXIgLTEgIDEgLT4gLTAKK2Rxcm1uNjUyIHJlbWFpbmRlcm5lYXIgIDEgLTEgLT4gIDAKK2Rxcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTAKK2Rxcm1uNjU0IHJlbWFpbmRlcm5lYXIgIDAgIDEgLT4gIDAKK2Rxcm1uNjU1IHJlbWFpbmRlcm5lYXIgLTAgIDEgLT4gLTAKK2Rxcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDAKK2Rxcm1uNjU3IHJlbWFpbmRlcm5lYXIgLTAgLTEgLT4gLTAKK2Rxcm1uNjU4IHJlbWFpbmRlcm5lYXIgIDAuMDAgIDEgIC0+ICAwLjAwCitkcXJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZHFybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODIgcmVtYWluZGVybmVhciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODUgcmVtYWluZGVybmVhciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42ODggcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2Rxcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xCitkcXJtbjY5MiByZW1haW5kZXJuZWFyICAwICAgICBJbmYgICAtPiAgMAorZHFybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTAKK2Rxcm1uNjk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxCitkcXJtbjY5NSByZW1haW5kZXJuZWFyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZHFybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJtbjcwMCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwMiByZW1haW5kZXJuZWFyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwMyByZW1haW5kZXJuZWFyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwNSByZW1haW5kZXJuZWFyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwNiByZW1haW5kZXJuZWFyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwOCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjcwOSByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTEKK2Rxcm1uNzExIHJlbWFpbmRlcm5lYXIgLTAgICAgLUluZiAgIC0+IC0wCitkcXJtbjcxMiByZW1haW5kZXJuZWFyICAwICAgIC1JbmYgICAtPiAgMAorZHFybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDEKK2Rxcm1uNzE0IHJlbWFpbmRlcm5lYXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkcXJtbjcxNSByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm1uNzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rxcm1uNzIyIHJlbWFpbmRlcm5lYXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rxcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rxcm1uNzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rxcm1uNzI1IHJlbWFpbmRlcm5lYXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK2Rxcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rxcm1uNzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rxcm1uNzI4IHJlbWFpbmRlcm5lYXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rxcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzMxIHJlbWFpbmRlcm5lYXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzMzIHJlbWFpbmRlcm5lYXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2Rxcm1uNzM0IHJlbWFpbmRlcm5lYXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK2Rxcm1uNzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxcm1uNzM3IHJlbWFpbmRlcm5lYXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFybW43NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQyIHJlbWFpbmRlcm5lYXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ1IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ5IHJlbWFpbmRlcm5lYXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUyIHJlbWFpbmRlcm5lYXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU1IHJlbWFpbmRlcm5lYXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU4IHJlbWFpbmRlcm5lYXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworZHFybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorZHFybW43NjEgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NjIgcmVtYWluZGVybmVhciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NjQgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2Rxcm1uNzY1IHJlbWFpbmRlcm5lYXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK2Rxcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCitkcXJtbjc2NyByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZHFybW43NjggcmVtYWluZGVybmVhciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK2Rxcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZHFybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgIDEwICAgIC0+IC00CitkcXJtbjc3MSAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKK2Rxcm1uNzcyICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZHFybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZHFybW44MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZHFybW44MDMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZHFybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZHFybW44MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZHFybW44MDYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZHFybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZHFybW44MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFybW44MDkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZHFybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFybW44MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rxcm1uODEyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworZHFybW44MjEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZHFybW44MjIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZHFybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZHFybW44MjQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZHFybW44MjUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZHFybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZHFybW44MjcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZHFybW44MjggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZHFybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZHFybW44MzAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFybW44MzEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rxcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBkaXZpZGVpbnQKK2Rxcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZHFybW44NDEgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40CitkcXJtbjg0MiByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUKK2Rxcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQorZHFybW44NDQgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjk5OSAxICAtPiAtMC4wMDEKK2Rxcm1uODUwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gLTIKK2Rxcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTIKK2Rxcm1uODUyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDMgICAgICAgNSAgLT4gLTIKK2Rxcm1uODUzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMyAgICAgICAgNSAgLT4gLTIKK2Rxcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTIKK2Rxcm1uODU1IHJlbWFpbmRlcm5lYXIgIDEwMDMgICAgICAgICAgNSAgLT4gLTIKK2Rxcm1uODU2IHJlbWFpbmRlcm5lYXIgIDEwMyAgICAgICAgICAgNSAgLT4gLTIKK2Rxcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTIKK2Rxcm1uODU4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKKworLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm1uODYwIHJlbWFpbmRlcm5lYXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg2MSByZW1haW5kZXJuZWFyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODYzIHJlbWFpbmRlcm5lYXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODcxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3OCByZW1haW5kZXJuZWFyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwCitkcXJtbjg4MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZHFybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK2Rxcm1uODgzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwCitkcXJtbjg4NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZHFybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK2Rxcm1uODg2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwCisKK2Rxcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkcXJtbjkwMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorZHFybW45MDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK2Rxcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwCitkcXJtbjkwNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorZHFybW45MDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAtMTAKK2Rxcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2Rxcm1uOTEwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTEzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTIwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCitkcXJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorZHFybW45MjIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2Rxcm1uOTIzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCitkcXJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorZHFybW45MjUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAtMjAKK2Rxcm1uOTI2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCisKK2Rxcm1uOTMwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTMzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTQwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwCitkcXJtbjk0MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZHFybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK2Rxcm1uOTQzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwCitkcXJtbjk0NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZHFybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzAKK2Rxcm1uOTQ2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgIC0zCisKK2Rxcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTYxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTYyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY4IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rxcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZHFybW45ODAgcmVtYWluZGVybmVhciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2Rxcm1uMTA1MSByZW1haW5kZXJuZWFyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uMTA1MiByZW1haW5kZXJuZWFyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uMTA1MyByZW1haW5kZXJuZWFyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uMTA1NCByZW1haW5kZXJuZWFyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uMTA1NSByZW1haW5kZXJuZWFyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3CitkcXJtbjEwNTYgcmVtYWluZGVybmVhciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3NworZHFybW4xMDU3IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcKK2Rxcm1uMTA1OCByZW1haW5kZXJuZWFyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3CisKKy0tIEd5dXJpcyBleGFtcGxlCitkcXJtbjEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzCisKKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0CitkcXJtbjExMDEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzCitkcXJtbjExMDIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIC0wLjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIyCitkcXJtbjExMDMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAtMC40NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExCitkcXJtbjExMDQgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0CitkcXJtbjExMDUgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcXJtbjExMDYgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAtMS4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzQ4CitkcXJtbjExMDcgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcXJtbjExMDggIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgLTAuNzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzUzCitkcXJtbjExMDkgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcXJtbjExMTAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAxLjUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU0CitkcXJtbjExMTEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAtMC42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyCisKKy0tIE51bGwgdGVzdHMKK2Rxcm1uMTAwMCByZW1haW5kZXJuZWFyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJvdGF0ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QKaW5kZXggODU4YjgyMy4uZWRjZjllZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QKQEAgLTEsMjk4ICsxLDI5OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1kcXJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1kcXJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDANCi1kcXJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLWRxcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDM0ICAtPiAgMQ0KLWRxcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KLWRxcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAgNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQ0KLWRxcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQ0KLWRxcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLQ0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCi1kcXJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KLWRxcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZnVsbCBwYXR0ZXJuDQotZHFyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxDQotZHFyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyDQotZHFyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzDQotZHFyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0DQotZHFyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1DQotZHFyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2DQotZHFyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3DQotZHFyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4DQotZHFyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5DQotZHFyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwDQotZHFyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxDQotZHFyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyDQotZHFyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzDQotZHFyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1DQotZHFyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2DQotZHFyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3DQotZHFyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4DQotZHFyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQotZHFyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQotZHFyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTExICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1DQotZHFyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTggICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2DQotZHFyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3DQotZHFyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4DQotZHFyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTUgICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQotZHFyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQotZHFyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIgICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFyb3QwNjQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFyb3QwNjUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotZHFyb3QwNjYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwNjcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxDQotZHFyb3QwNjggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyDQotZHFyb3QwNjkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzDQotZHFyb3QwNzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0DQotZHFyb3QwNzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1DQotZHFyb3QwNzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2DQotZHFyb3QwNzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3DQotZHFyb3QwNzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4DQotZHFyb3QwNzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5DQotZHFyb3QwNzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwDQotZHFyb3QwNzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxDQotZHFyb3QwNzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyDQotZHFyb3QwNzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzDQotZHFyb3QwODAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwODEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1DQotZHFyb3QwODIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2DQotZHFyb3QwODMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3DQotZHFyb3QwODQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4DQotZHFyb3QwODUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFyb3QwODYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQotZHFyb3QwODcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQotZHFyb3QwODggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFyb3QwODkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFyb3QwOTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFyb3QwOTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1DQotZHFyb3QwOTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2DQotZHFyb3QwOTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3DQotZHFyb3QwOTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4DQotZHFyb3QwOTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5DQotZHFyb3QwOTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQotZHFyb3QwOTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQotZHFyb3QwOTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQotZHFyb3QwOTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQotZHFyb3QxMDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotDQotLS0gemVyb3MNCi1kcXJvdDI3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwDQotZHFyb3QyNzEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRS0xMA0KLWRxcm90MjcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDANCi1kcXJvdDI3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwDQotZHFyb3QyNzQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRSsxMA0KLWRxcm90Mjc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTANCi1kcXJvdDI3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwDQotZHFyb3QyNzcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRS0xMA0KLWRxcm90Mjc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDANCi1kcXJvdDI3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwDQotZHFyb3QyODAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRSsxMA0KLWRxcm90MjgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTQyIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTQzIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTQ1IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMA0KLWRxcm90MTQ2IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNDINCi1kcXJvdDE0NyByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyDQotZHFyb3QxNDggcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQotZHFyb3QxNTEgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3Ng0KLWRxcm90MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAxRS02MTc2DQotZHFyb3QxNTQgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2DQotZHFyb3QxNTcgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDlFLTYxNzYNCi1kcXJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxcm90MTYwIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxcm90MTYxIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNzUNCi1kcXJvdDE2MiByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1DQotZHFyb3QxNjMgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotLS0gIG5lZ2F0aXZlcw0KLWRxcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFyb3QxNzMgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KLWRxcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXJvdDE3NSByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQotZHFyb3QxNzYgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNDINCi1kcXJvdDE3NyByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0Mg0KLWRxcm90MTc4IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCi1kcXJvdDE4MSByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYNCi1kcXJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTFFLTYxNzYNCi1kcXJvdDE4NCByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYNCi1kcXJvdDE4NyByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTlFLTYxNzYNCi1kcXJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXJvdDE5MCByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQotZHFyb3QxOTEgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNzUNCi1kcXJvdDE5MiByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQ0KLWRxcm90MTkzIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi0NCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQotZHFyb3QyMDEgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wDQotZHFyb3QyMDIgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wDQotZHFyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDANCi1kcXJvdDIwNCByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXJvdDIwNSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTENCi1kcXJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXJvdDIwNyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTANCi1kcXJvdDIwOCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDENCi1kcXJvdDIxMCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXJvdDIxMSByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDkNCi1kcXJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi0NCi0NCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KLWRxcm90NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5DQotZHFyb3Q3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcXJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KLWRxcm90Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZHFyb3Q3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcXJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KLWRxcm90Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXJvdDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkNCi1kcXJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQotZHFyb3Q4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KLWRxcm90ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkNCi1kcXJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQotZHFyb3Q4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KLWRxcm90ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWRxcm90ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxcm90ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KLWRxcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWRxcm90ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRxcm90ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTg0KLWRxcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWRxcm90ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxcm90ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxcm90ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXJvdDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotZHFyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWRxcm90ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kcXJvdDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQotZHFyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWRxcm90ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kcXJvdDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQotZHFyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWRxcm90ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kcXJvdDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KLWRxcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxcm90ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQotZHFyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZHFyb3Q4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kcXJvdDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxUm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGRlY1F1YWQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcXJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rxcm90MDAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAorZHFyb3QwMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK2Rxcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QwMDUgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzQgIC0+ICAxCitkcXJvdDAwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZHFyb3QwMDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+ICA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDAwOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QwMTEgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICA5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ5CitkcXJvdDAxMiByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZHFyb3QwMTUgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAxNyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTggcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyMCByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjEgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitkcXJvdDAyNSByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDI3IHJvdGF0ZSAgICAgICAgMSAgICAgMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyOCByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHBhdHRlcm4KK2Rxcm90MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCitkcXJvdDAzMiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIKK2Rxcm90MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMworZHFyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0CitkcXJvdDAzNSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUKK2Rxcm90MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NgorZHFyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3CitkcXJvdDAzOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgKK2Rxcm90MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OQorZHFyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwCitkcXJvdDA0MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEKK2Rxcm90MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMgorZHFyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzCitkcXJvdDA0NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NQorZHFyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2CitkcXJvdDA0OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxcm90MDQ5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gOTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXJvdDA1MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxcm90MDUyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXJvdDA1NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDU1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gNTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA1NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDU4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA2MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDYxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA2MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDY0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwNjUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKK2Rxcm90MDY2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QwNjcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCitkcXJvdDA2OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIKK2Rxcm90MDY5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMworZHFyb3QwNzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0CitkcXJvdDA3MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUKK2Rxcm90MDcyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NgorZHFyb3QwNzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3CitkcXJvdDA3NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOCAgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgKK2Rxcm90MDc1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OQorZHFyb3QwNzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwCitkcXJvdDA3NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTEgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEKK2Rxcm90MDc4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMgorZHFyb3QwNzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzCitkcXJvdDA4MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTQgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQKK2Rxcm90MDgxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NQorZHFyb3QwODIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2CitkcXJvdDA4MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcKK2Rxcm90MDg0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFyb3QwODUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXJvdDA4NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjAgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAKK2Rxcm90MDg3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFyb3QwODggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXJvdDA4OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjMgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDkwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QwOTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA5MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjYgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDkzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwOTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA5NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjkgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDk2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwOTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA5OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzIgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDk5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QxMDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKy0tIHplcm9zCitkcXJvdDI3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwCitkcXJvdDI3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwCitkcXJvdDI3MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgIDAuMDAwCitkcXJvdDI3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwCitkcXJvdDI3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwCitkcXJvdDI3NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFKzEwCitkcXJvdDI3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwCitkcXJvdDI3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwCitkcXJvdDI3OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgLTAuMDAwCitkcXJvdDI3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwCitkcXJvdDI4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwCitkcXJvdDI4MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXJvdDE0MSByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTQyIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE0NCByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTQ1IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFyb3QxNDYgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE0MgorZHFyb3QxNDcgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE0MgorZHFyb3QxNDggcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNTIgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDFFLTYxNzYKK2Rxcm90MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAxRS02MTc2CitkcXJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNTUgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2CitkcXJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gOUUtNjE3NgorZHFyb3QxNTggcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTYwIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFyb3QxNjEgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE3NQorZHFyb3QxNjIgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE3NQorZHFyb3QxNjMgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCistLSAgbmVnYXRpdmVzCitkcXJvdDE3MSByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE3MyByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE3NCByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE3NSByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXJvdDE3NiByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE0MgorZHFyb3QxNzcgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNDIKK2Rxcm90MTc4IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxODIgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC0xRS02MTc2CitkcXJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTFFLTYxNzYKK2Rxcm90MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxODUgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYKK2Rxcm90MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtOUUtNjE3NgorZHFyb3QxODggcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE5MCByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXJvdDE5MSByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE3NQorZHFyb3QxOTIgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNzUKK2Rxcm90MTkzIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorZHFyb3QyMDEgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCitkcXJvdDIwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTAKK2Rxcm90MjAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCitkcXJvdDIwNCByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxcm90MjA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDM0ICAtPiAtMQorZHFyb3QyMDYgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXJvdDIwNyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKK2Rxcm90MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAtNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QyMDkgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC0yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCitkcXJvdDIxMCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxcm90MjExIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQorZHFyb3QyMTIgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK2Rxcm90NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rxcm90Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK2Rxcm90Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJvdDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorZHFyb3Q4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJvdDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rxcm90ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFyb3Q4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFOCitkcXJvdDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rxcm90ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgorZHFyb3Q4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFOCitkcXJvdDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rxcm90ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFyb3Q4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXJvdDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxcm90ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2Rxcm90ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2Rxcm90ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2Rxcm90ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2Rxcm90ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2Rxcm90ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2Rxcm90ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2Rxcm90ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2Rxcm90ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcXJvdDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2Rxcm90ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2Rxcm90ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNhbWVRdWFudHVtLmRlY1Rlc3QKaW5kZXggMmYzNTZiYi4uMjU3Y2RhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0CkBAIC0xLDM4OSArMSwzODkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNRdWFkIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcXNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDENCi1kcXNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDENCi1kcXNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDENCi1kcXNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDENCi0NCi1kcXNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMA0KLWRxc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxDQotZHFzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDANCi1kcXNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMA0KLWRxc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwDQotZHFzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDENCi1kcXNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMA0KLWRxc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxDQotZHFzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDENCi1kcXNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQ0KLWRxc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxDQotDQotLS0gemVyb3MNCi1kcXNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQ0KLWRxc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwDQotZHFzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDANCi1kcXNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQ0KLWRxc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwDQotZHFzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDANCi1kcXNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQ0KLWRxc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwDQotZHFzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDANCi1kcXNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQ0KLWRxc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwDQotZHFzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwDQotZHFzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxDQotZHFzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwDQotZHFzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxDQotZHFzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwDQotZHFzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxDQotZHFzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwDQotZHFzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxDQotZHFzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1kcXNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQ0KLWRxc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtNjE0MyAgICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAtPiAxDQotZHFzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDENCi1kcXNhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxDQotZHFzYW1xMDU2IHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDENCi1kcXNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gMQ0KLWRxc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxDQotDQotZHFzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDENCi1kcXNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQ0KLWRxc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxDQotZHFzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi1kcXNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxDQotZHFzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDENCi1kcXNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KLQ0KLWRxc2FtcTA3MSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxDQotZHFzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwRS02MTQzIC0+IDENCi1kcXNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQ0KLWRxc2FtcTA3NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQotZHFzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDENCi1kcXNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQ0KLWRxc2FtcTA3NyBzYW1lcXVhbnR1bSAgLTRFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxDQotZHFzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCi0NCi1kcXNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwDQotZHFzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDANCi1kcXNhbXEwODMgc2FtZXF1YW50dW0gIC00RS02MTQwICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwDQotZHFzYW1xMDg0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDANCi1kcXNhbXEwODUgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwDQotZHFzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDANCi1kcXNhbXEwODcgc2FtZXF1YW50dW0gIC00RS02MTMzICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwDQotZHFzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDANCi0NCi0tLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucw0KLWRxc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDENCi1kcXNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxDQotZHFzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDANCi1kcXNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwDQotZHFzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDANCi1kcXNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwDQotZHFzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDANCi1kcXNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwDQotZHFzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDANCi1kcXNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwDQotZHFzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxDQotZHFzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQ0KLWRxc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDANCi1kcXNhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwDQotZHFzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDANCi1kcXNhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDANCi1kcXNhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwDQotZHFzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDANCi1kcXNhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwDQotZHFzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDANCi1kcXNhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTAzMTEgc2FtZXF1YW50dW0gICBOYU4gICAgIEluZiAgIC0+IDANCi1kcXNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxDQotZHFzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTAzMTQgc2FtZXF1YW50dW0gICBOYU4gICAgLTcgICAgIC0+IDANCi1kcXNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwDQotZHFzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTAzMTcgc2FtZXF1YW50dW0gICBOYU4gICAgLTAgICAgIC0+IDANCi1kcXNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwDQotZHFzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTAzMjAgc2FtZXF1YW50dW0gICBOYU4gICAgIDAgICAgIC0+IDANCi1kcXNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwDQotZHFzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTAzMjMgc2FtZXF1YW50dW0gICBOYU4gICAgIDcgICAgIC0+IDANCi1kcXNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwDQotZHFzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQ0KLQ0KLWRxc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDANCi1kcXNhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxDQotZHFzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDANCi1kcXNhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDANCi1kcXNhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQ0KLWRxc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwDQotZHFzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDANCi1kcXNhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQ0KLWRxc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwDQotZHFzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDANCi1kcXNhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQ0KLWRxc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDANCi1kcXNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDENCi1kcXNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwDQotZHFzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDENCi1kcXNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwDQotZHFzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDENCi1kcXNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwDQotZHFzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDENCi1kcXNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwDQotZHFzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMDYxMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIEluZiAgIC0+IDANCi1kcXNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwDQotZHFzYW1xMDYxNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTcgICAgIC0+IDANCi1kcXNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQ0KLWRxc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxDQotZHFzYW1xMDYxNyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTAgICAgIC0+IDANCi1kcXNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxDQotZHFzYW1xMDYyMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDAgICAgIC0+IDANCi1kcXNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxDQotZHFzYW1xMDYyMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDcgICAgIC0+IDANCi1kcXNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDANCi1kcXNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDANCi1kcXNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxDQotZHFzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDENCi1kcXNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwDQotZHFzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDENCi1kcXNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwDQotZHFzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDENCi1kcXNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwDQotZHFzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDANCi1kcXNhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwDQotZHFzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQ0KLWRxc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDANCi1kcXNhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQ0KLWRxc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDANCi1kcXNhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwDQotZHFzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQ0KLWRxc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDANCi1kcXNhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwDQotZHFzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQ0KLWRxc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDANCi1kcXNhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDANCi1kcXNhbXEwOTExIHNhbWVxdWFudHVtICAtMEUrMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwDQotZHFzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDENCi1kcXNhbXEwOTE0IHNhbWVxdWFudHVtICAtMEUrMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwDQotZHFzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDANCi1kcXNhbXEwOTE3IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxDQotZHFzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDANCi1kcXNhbXEwOTIwIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxDQotZHFzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDANCi1kcXNhbXEwOTIzIHNhbWVxdWFudHVtICAtMEUrMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxDQotZHFzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDANCi1kcXNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwDQotZHFzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDENCi1kcXNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxDQotZHFzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDANCi1kcXNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxDQotZHFzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDANCi1kcXNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxDQotZHFzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDANCi1kcXNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDANCi1kcXNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwDQotZHFzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMA0KLWRxc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDENCi1kcXNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwDQotZHFzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDENCi1kcXNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwDQotZHFzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDENCi1kcXNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwDQotZHFzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDENCi1kcXNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwDQotZHFzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDANCi1kcXNhbXExMzExIHNhbWVxdWFudHVtICAwRSszICAgICBJbmYgICAtPiAwDQotZHFzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMA0KLWRxc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDENCi1kcXNhbXExMzE0IHNhbWVxdWFudHVtICAwRSszICAgIC03ICAgICAtPiAwDQotZHFzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDANCi1kcXNhbXExMzE3IHNhbWVxdWFudHVtICAwRSszICAgIC0wICAgICAtPiAwDQotZHFzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQ0KLWRxc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDANCi1kcXNhbXExMzIwIHNhbWVxdWFudHVtICAwRSszICAgICAwICAgICAtPiAwDQotZHFzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQ0KLWRxc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDANCi1kcXNhbXExMzIzIHNhbWVxdWFudHVtICAwRSszICAgICA3ICAgICAtPiAwDQotZHFzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQ0KLWRxc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDANCi0NCi1kcXNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMA0KLWRxc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDANCi1kcXNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwDQotZHFzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMA0KLWRxc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDENCi1kcXNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxDQotZHFzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMA0KLWRxc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDANCi1kcXNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxDQotZHFzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMA0KLWRxc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDANCi1kcXNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxDQotZHFzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMA0KLWRxc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDANCi1kcXNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwDQotZHFzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwDQotZHFzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwDQotZHFzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwDQotZHFzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxDQotZHFzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwDQotZHFzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwDQotZHFzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxDQotZHFzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwDQotZHFzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwDQotZHFzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxDQotZHFzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwDQotZHFzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwDQotZHFzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxDQotZHFzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwDQotZHFzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwDQotDQotZHFzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMA0KLWRxc2FtcTE2MTEgc2FtZXF1YW50dW0gIDdFKzMgICAgIEluZiAgIC0+IDANCi1kcXNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwDQotZHFzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQ0KLWRxc2FtcTE2MTQgc2FtZXF1YW50dW0gIDdFKzMgICAgLTcgICAgIC0+IDANCi1kcXNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwDQotZHFzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMA0KLWRxc2FtcTE2MTcgc2FtZXF1YW50dW0gIDdFKzMgICAgLTAgICAgIC0+IDANCi1kcXNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxDQotZHFzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMA0KLWRxc2FtcTE2MjAgc2FtZXF1YW50dW0gIDdFKzMgICAgIDAgICAgIC0+IDANCi1kcXNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxDQotZHFzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMA0KLWRxc2FtcTE2MjMgc2FtZXF1YW50dW0gIDdFKzMgICAgIDcgICAgIC0+IDANCi1kcXNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxDQotZHFzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMA0KLQ0KLWRxc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDANCi1kcXNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwDQotZHFzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQ0KLWRxc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDANCi1kcXNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwDQotZHFzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMA0KLWRxc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDANCi1kcXNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwDQotZHFzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMA0KLWRxc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDANCi1kcXNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwDQotZHFzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMA0KLWRxc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDANCi1kcXNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwDQotZHFzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMA0KLWRxc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDENCi0tLSBub2lzeSBOYU5zDQotZHFzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQ0KLWRxc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDENCi1kcXNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxDQotZHFzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQ0KLWRxc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDANCi1kcXNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwDQotZHFzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMA0KLWRxc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDANCi1kcXNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwDQotZHFzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMA0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFTYW1lUXVhbnR1bS5kZWNUZXN0IC0tIGNoZWNrIGRlY1F1YWQgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZHFzYW1xMDAxIHNhbWVxdWFudHVtICAwICAgICAgMCAgICAgIC0+ICAxCitkcXNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDEKK2Rxc2FtcTAwMyBzYW1lcXVhbnR1bSAgMSAgICAgIDAgICAgICAtPiAgMQorZHFzYW1xMDA0IHNhbWVxdWFudHVtICAxICAgICAgMSAgICAgIC0+ICAxCisKK2Rxc2FtcTAxMSBzYW1lcXVhbnR1bSAgMTAgICAgIDFFKzEgICAtPiAwCitkcXNhbXEwMTIgc2FtZXF1YW50dW0gIDEwRSsxICAxMEUrMSAgLT4gMQorZHFzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDAKK2Rxc2FtcTAxNCBzYW1lcXVhbnR1bSAgMTAwICAgIDFFKzIgICAtPiAwCitkcXNhbXEwMTUgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0yICAgLT4gMAorZHFzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDEKK2Rxc2FtcTAxNyBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTAgICAtPiAwCitkcXNhbXEwMTggc2FtZXF1YW50dW0gIDk5OSAgICA5OTkgICAgLT4gMQorZHFzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDEKK2Rxc2FtcTAyMCBzYW1lcXVhbnR1bSAgMTExRS0xIDIyLjIgICAtPiAxCitkcXNhbXEwMjEgc2FtZXF1YW50dW0gIDExMUUtMSAxMjM0LjIgLT4gMQorCistLSB6ZXJvcworZHFzYW1xMDMwIHNhbWVxdWFudHVtICAwLjAgICAgMS4xICAgIC0+IDEKK2Rxc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwCitkcXNhbXEwMzIgc2FtZXF1YW50dW0gIDAuMCAgICAwICAgICAgLT4gMAorZHFzYW1xMDMzIHNhbWVxdWFudHVtICAwLjAgICAgMC4wICAgIC0+IDEKK2Rxc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwCitkcXNhbXEwMzUgc2FtZXF1YW50dW0gIDBFKzEgICAwRSswICAgLT4gMAorZHFzYW1xMDM2IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMSAgIC0+IDEKK2Rxc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwCitkcXNhbXEwMzggc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNiAgLT4gMAorZHFzYW1xMDM5IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTcgIC0+IDEKK2Rxc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwCitkcXNhbXEwNDEgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE1IC0+IDAKK2Rxc2FtcTA0MiBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTYgLT4gMQorZHFzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwCitkcXNhbXEwNDQgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE2IC0+IDEKK2Rxc2FtcTA0NSBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTcgLT4gMAorZHFzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxCitkcXNhbXEwNDcgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rxc2FtcTA0OCBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTYgLT4gMQorZHFzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQorZHFzYW1xMDUyIHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDEKK2Rxc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAxCitkcXNhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQorZHFzYW1xMDU1IHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDEKK2Rxc2FtcTA1NiBzYW1lcXVhbnR1bSAgMUUtNjE0MyAgICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAtPiAxCitkcXNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gMQorZHFzYW1xMDU4IHNhbWVxdWFudHVtICAxRS02MTc2ICAgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgIC0+IDEKKworZHFzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNjMgc2FtZXF1YW50dW0gIC0xRS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2Rxc2FtcTA2NSBzYW1lcXVhbnR1bSAgLTFFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCitkcXNhbXEwNjYgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQorZHFzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKK2Rxc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCisKK2Rxc2FtcTA3MSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCitkcXNhbXEwNzIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDBFLTYxNDMgLT4gMQorZHFzYW1xMDczIHNhbWVxdWFudHVtICAtNEUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcXNhbXEwNzUgc2FtZXF1YW50dW0gIC00RS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQorZHFzYW1xMDc2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDEKK2Rxc2FtcTA3NyBzYW1lcXVhbnR1bSAgLTRFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCitkcXNhbXEwNzggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorCitkcXNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwCitkcXNhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMzYgLT4gMAorZHFzYW1xMDgzIHNhbWVxdWFudHVtICAtNEUtNjE0MCAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMAorZHFzYW1xMDg0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDAKK2Rxc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjEzNiAtPiAwCitkcXNhbXEwODcgc2FtZXF1YW50dW0gIC00RS02MTMzICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwCitkcXNhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMAorCistLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucworZHFzYW1xMDExMCBzYW1lcXVhbnR1bSAgLUluZiAgICAtSW5mICAgLT4gMQorZHFzYW1xMDExMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgSW5mICAgLT4gMQorZHFzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMAorZHFzYW1xMDExMyBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDExNCBzYW1lcXVhbnR1bSAgLUluZiAgICAtNyAgICAgLT4gMAorZHFzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDExNiBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDExNyBzYW1lcXVhbnR1bSAgLUluZiAgICAtMCAgICAgLT4gMAorZHFzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDExOSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDEyMCBzYW1lcXVhbnR1bSAgLUluZiAgICAgMCAgICAgLT4gMAorZHFzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDEyMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDEyMyBzYW1lcXVhbnR1bSAgLUluZiAgICAgNyAgICAgLT4gMAorZHFzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDEyNSBzYW1lcXVhbnR1bSAgLUluZiAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxCitkcXNhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxCitkcXNhbXEwMjEyIHNhbWVxdWFudHVtICAgSW5mICAgICBOYU4gICAtPiAwCitkcXNhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwCitkcXNhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwCitkcXNhbXEwMjE1IHNhbWVxdWFudHVtICAgSW5mICAgIC03RS0zICAtPiAwCitkcXNhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwCitkcXNhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwCitkcXNhbXEwMjE4IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRSszICAtPiAwCitkcXNhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwCitkcXNhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwCitkcXNhbXEwMjIxIHNhbWVxdWFudHVtICAgSW5mICAgICAwRSszICAtPiAwCitkcXNhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwCitkcXNhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwCitkcXNhbXEwMjI0IHNhbWVxdWFudHVtICAgSW5mICAgICA3RSszICAtPiAwCitkcXNhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTAzMTAgc2FtZXF1YW50dW0gICBOYU4gICAgLUluZiAgIC0+IDAKK2Rxc2FtcTAzMTEgc2FtZXF1YW50dW0gICBOYU4gICAgIEluZiAgIC0+IDAKK2Rxc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDEKK2Rxc2FtcTAzMTMgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTAzMTQgc2FtZXF1YW50dW0gICBOYU4gICAgLTcgICAgIC0+IDAKK2Rxc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTAzMTYgc2FtZXF1YW50dW0gICBOYU4gICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTAzMTcgc2FtZXF1YW50dW0gICBOYU4gICAgLTAgICAgIC0+IDAKK2Rxc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTAzMTkgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTAzMjAgc2FtZXF1YW50dW0gICBOYU4gICAgIDAgICAgIC0+IDAKK2Rxc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTAzMjIgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTAzMjMgc2FtZXF1YW50dW0gICBOYU4gICAgIDcgICAgIC0+IDAKK2Rxc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTAzMjUgc2FtZXF1YW50dW0gICBOYU4gICAgIHNOYU4gIC0+IDEKKworZHFzYW1xMDQxMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA0MTEgc2FtZXF1YW50dW0gIC03RSszICAgICBJbmYgICAtPiAwCitkcXNhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMDQxMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTA0MTQgc2FtZXF1YW50dW0gIC03RSszICAgIC03ICAgICAtPiAwCitkcXNhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDQxNiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA0MTcgc2FtZXF1YW50dW0gIC03RSszICAgIC0wICAgICAtPiAwCitkcXNhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMDQxOSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA0MjAgc2FtZXF1YW50dW0gIC03RSszICAgICAwICAgICAtPiAwCitkcXNhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMDQyMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA0MjMgc2FtZXF1YW50dW0gIC03RSszICAgICA3ICAgICAtPiAwCitkcXNhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMDQyNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMAorZHFzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMAorZHFzYW1xMDUxMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgTmFOICAgLT4gMAorZHFzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQorZHFzYW1xMDUxNSBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQorZHFzYW1xMDUxOCBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQorZHFzYW1xMDUyMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQorZHFzYW1xMDUyNCBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwNjEwIHNhbWVxdWFudHVtICAtN0UtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMDYxMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwCitkcXNhbXEwNjEzIHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDYxNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxCitkcXNhbXEwNjE2IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMDYxNyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwCitkcXNhbXEwNjE5IHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMDYyMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwCitkcXNhbXEwNjIyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMDYyMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwCitkcXNhbXEwNjI1IHNhbWVxdWFudHVtICAtN0UtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwNzEwIHNhbWVxdWFudHVtICAtMEUtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMDcxMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwCitkcXNhbXEwNzEzIHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDcxNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxCitkcXNhbXEwNzE2IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMDcxNyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwCitkcXNhbXEwNzE5IHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMDcyMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwCitkcXNhbXEwNzIyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMDcyMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwCitkcXNhbXEwNzI1IHNhbWVxdWFudHVtICAtMEUtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwCitkcXNhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwCitkcXNhbXEwODEyIHNhbWVxdWFudHVtICAtMCAgICAgICBOYU4gICAtPiAwCitkcXNhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwCitkcXNhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxCitkcXNhbXEwODE1IHNhbWVxdWFudHVtICAtMCAgICAgIC03RS0zICAtPiAwCitkcXNhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwCitkcXNhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxCitkcXNhbXEwODE4IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRSszICAtPiAwCitkcXNhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwCitkcXNhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxCitkcXNhbXEwODIxIHNhbWVxdWFudHVtICAtMCAgICAgICAwRSszICAtPiAwCitkcXNhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwCitkcXNhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxCitkcXNhbXEwODI0IHNhbWVxdWFudHVtICAtMCAgICAgICA3RSszICAtPiAwCitkcXNhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA5MTAgc2FtZXF1YW50dW0gIC0wRSszICAgIC1JbmYgICAtPiAwCitkcXNhbXEwOTExIHNhbWVxdWFudHVtICAtMEUrMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA5MTMgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RSszICAtPiAxCitkcXNhbXEwOTE0IHNhbWVxdWFudHVtICAtMEUrMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTA5MTYgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRS0zICAtPiAwCitkcXNhbXEwOTE3IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDEKK2Rxc2FtcTA5MTkgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRS0zICAtPiAwCitkcXNhbXEwOTIwIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDEKK2Rxc2FtcTA5MjIgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RS0zICAtPiAwCitkcXNhbXEwOTIzIHNhbWVxdWFudHVtICAtMEUrMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDEKK2Rxc2FtcTA5MjUgc2FtZXF1YW50dW0gIC0wRSszICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTExMTAgc2FtZXF1YW50dW0gIDBFLTMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTExMTEgc2FtZXF1YW50dW0gIDBFLTMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTExMTMgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTExMTQgc2FtZXF1YW50dW0gIDBFLTMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTExMTYgc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFLTMgIC0+IDEKK2Rxc2FtcTExMTcgc2FtZXF1YW50dW0gIDBFLTMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTExMTkgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFLTMgIC0+IDEKK2Rxc2FtcTExMjAgc2FtZXF1YW50dW0gIDBFLTMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTExMjIgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFLTMgIC0+IDEKK2Rxc2FtcTExMjMgc2FtZXF1YW50dW0gIDBFLTMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTExMjUgc2FtZXF1YW50dW0gIDBFLTMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMAorZHFzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMAorZHFzYW1xMTIxMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgTmFOICAgLT4gMAorZHFzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQorZHFzYW1xMTIxNSBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQorZHFzYW1xMTIxOCBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQorZHFzYW1xMTIyMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQorZHFzYW1xMTIyNCBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMAorCitkcXNhbXExMzEwIHNhbWVxdWFudHVtICAwRSszICAgIC1JbmYgICAtPiAwCitkcXNhbXExMzExIHNhbWVxdWFudHVtICAwRSszICAgICBJbmYgICAtPiAwCitkcXNhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwCitkcXNhbXExMzEzIHNhbWVxdWFudHVtICAwRSszICAgIC03RSszICAtPiAxCitkcXNhbXExMzE0IHNhbWVxdWFudHVtICAwRSszICAgIC03ICAgICAtPiAwCitkcXNhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwCitkcXNhbXExMzE2IHNhbWVxdWFudHVtICAwRSszICAgIC0wRS0zICAtPiAwCitkcXNhbXExMzE3IHNhbWVxdWFudHVtICAwRSszICAgIC0wICAgICAtPiAwCitkcXNhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxCitkcXNhbXExMzE5IHNhbWVxdWFudHVtICAwRSszICAgICAwRS0zICAtPiAwCitkcXNhbXExMzIwIHNhbWVxdWFudHVtICAwRSszICAgICAwICAgICAtPiAwCitkcXNhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxCitkcXNhbXExMzIyIHNhbWVxdWFudHVtICAwRSszICAgICA3RS0zICAtPiAwCitkcXNhbXExMzIzIHNhbWVxdWFudHVtICAwRSszICAgICA3ICAgICAtPiAwCitkcXNhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxCitkcXNhbXExMzI1IHNhbWVxdWFudHVtICAwRSszICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTE0MTAgc2FtZXF1YW50dW0gIDdFLTMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTE0MTEgc2FtZXF1YW50dW0gIDdFLTMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTE0MTMgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTE0MTQgc2FtZXF1YW50dW0gIDdFLTMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTE0MTYgc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFLTMgIC0+IDEKK2Rxc2FtcTE0MTcgc2FtZXF1YW50dW0gIDdFLTMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTE0MTkgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFLTMgIC0+IDEKK2Rxc2FtcTE0MjAgc2FtZXF1YW50dW0gIDdFLTMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTE0MjIgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFLTMgIC0+IDEKK2Rxc2FtcTE0MjMgc2FtZXF1YW50dW0gIDdFLTMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTE0MjUgc2FtZXF1YW50dW0gIDdFLTMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwCitkcXNhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTE1MTIgc2FtZXF1YW50dW0gIDcgICAgICAgTmFOICAgLT4gMAorZHFzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwCitkcXNhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDEKK2Rxc2FtcTE1MTUgc2FtZXF1YW50dW0gIDcgICAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwCitkcXNhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDEKK2Rxc2FtcTE1MTggc2FtZXF1YW50dW0gIDcgICAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwCitkcXNhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDEKK2Rxc2FtcTE1MjEgc2FtZXF1YW50dW0gIDcgICAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwCitkcXNhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDEKK2Rxc2FtcTE1MjQgc2FtZXF1YW50dW0gIDcgICAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTE2MTAgc2FtZXF1YW50dW0gIDdFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTE2MTEgc2FtZXF1YW50dW0gIDdFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTE2MTMgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTE2MTQgc2FtZXF1YW50dW0gIDdFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTE2MTYgc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTE2MTcgc2FtZXF1YW50dW0gIDdFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDEKK2Rxc2FtcTE2MTkgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTE2MjAgc2FtZXF1YW50dW0gIDdFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDEKK2Rxc2FtcTE2MjIgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTE2MjMgc2FtZXF1YW50dW0gIDdFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDEKK2Rxc2FtcTE2MjUgc2FtZXF1YW50dW0gIDdFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTcxMCBzYW1lcXVhbnR1bSAgc05hTiAgICAtSW5mICAgLT4gMAorZHFzYW1xMTcxMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgSW5mICAgLT4gMAorZHFzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQorZHFzYW1xMTcxMyBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTcxNCBzYW1lcXVhbnR1bSAgc05hTiAgICAtNyAgICAgLT4gMAorZHFzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTcxNiBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTcxNyBzYW1lcXVhbnR1bSAgc05hTiAgICAtMCAgICAgLT4gMAorZHFzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTcxOSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTcyMCBzYW1lcXVhbnR1bSAgc05hTiAgICAgMCAgICAgLT4gMAorZHFzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTcyMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTcyMyBzYW1lcXVhbnR1bSAgc05hTiAgICAgNyAgICAgLT4gMAorZHFzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTcyNSBzYW1lcXVhbnR1bSAgc05hTiAgICAgc05hTiAgLT4gMQorLS0gbm9pc3kgTmFOcworZHFzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQorZHFzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQorZHFzYW1xMTczMiBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjMgLT4gMQorZHFzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQorZHFzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMAorZHFzYW1xMTczNSBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIDMgICAgLT4gMAorZHFzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMAorZHFzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMAorZHFzYW1xMTczOCBzYW1lcXVhbnR1bSAgICBJbmYgICAgc05hTjQgLT4gMAorZHFzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMAorCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTY2FsZUIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0CmluZGV4IDAxZTExOTEuLjA0NWRjNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0CkBAIC0xLDI2MCArMSwyNjAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxU2NhbGViQi5kZWNUZXN0IC0tIHNjYWxlIGEgZGVjUXVhZCBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gTWF4IHxyaHN8IGlzIDIqKDYxNDQrMzQpID0gMTIzNTYNCi0NCi0tLSBTYW5pdHkgY2hlY2tzDQotZHFzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMA0KLWRxc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMw0KLWRxc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwDQotZHFzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wDQotZHFzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwDQotZHFzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MA0KLWRxc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwDQotZHFzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMA0KLWRxc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMNCi1kcXNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTANCi1kcXNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wDQotZHFzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MA0KLWRxc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwDQotDQotLS0gSW5maW5pdGllcw0KLWRxc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5DQotZHFzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5DQotZHFzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkNCi1kcXNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkNCi0NCi0tLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyDQotZHFzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nDQotLS0gTmFOcywgMCBwYXlsb2FkDQotZHFzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTg0KLWRxc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFODQotZHFzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTg0KLWRxc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFODQotZHFzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gbm9uLWludGVnZXIgUkhTDQotZHFzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMNCi1kcXNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzDQotZHFzY2IwNjE0IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2IwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG91dC1vZiByYW5nZSBSSFMNCi1kcXNjYjEyMCBzY2FsZWIgIDEuMjMgICAgMTIzNTUgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxc2NiMTIxIHNjYWxlYiAgMS4yMyAgICAxMjM1NiAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFzY2IxMjIgc2NhbGViICAxLjIzICAgIDEyMzU3ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjEyMyBzY2FsZWIgIDEuMjMgICAgMTIzNTggICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMTI0IHNjYWxlYiAgMS4yMyAgIC0xMjM1NSAgICAgICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHFzY2IxMjUgc2NhbGViICAxLjIzICAgLTEyMzU2ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcXNjYjEyNiBzY2FsZWIgIDEuMjMgICAtMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC0xMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcXNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjENCi1kcXNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCi1kcXNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCi1kcXNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQNCi1kcXNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCi1kcXNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQotZHFzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQ0KLWRxc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCi1kcXNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KLWRxc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uDQotZHFzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmaW5pdGVzDQotZHFzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNw0KLWRxc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3DQotZHFzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQ0KLWRxc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1DQotZHFzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwDQotZHFzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MA0KLWRxc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDANCi1kcXNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMA0KLWRxc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNw0KLWRxc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcNCi1kcXNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUNCi1kcXNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41DQotZHFzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTANCi1kcXNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTANCi1kcXNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDANCi1kcXNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwDQotZHFzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNw0KLWRxc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03DQotZHFzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUNCi1kcXNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUNCi1kcXNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwDQotZHFzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTANCi1kcXNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMA0KLWRxc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMA0KLWRxc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzENCi1kcXNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQ0KLWRxc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMg0KLWRxc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzINCi1kcXNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wDQotZHFzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjANCi1kcXNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMA0KLWRxc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMA0KLWRxc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzINCi1kcXNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMg0KLWRxc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMw0KLWRxc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMNCi1kcXNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTANCi1kcXNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwDQotZHFzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjANCi1kcXNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjANCi0NCi0tLSB6ZXJvcw0KLWRxc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzENCi1kcXNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMg0KLWRxc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcNCi1kcXNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOA0KLWRxc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzENCi1kcXNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMg0KLWRxc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNA0KLWRxc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMNCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLWRxc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICs2MTQ0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRxc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcXNjYjEzNSBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCi1kcXNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMNCi1kcXNjYjEzNyBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgICsxICAtPiAxRS02MTQyDQotZHFzY2IxNjE0IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTAgIC0+IDFFLTYxNDMNCi1kcXNjYjEzOSBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgIC0xICAtPiAxRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbA0KLWRxc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICsxICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mg0KLWRxc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxc2NiMTQyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZHFzY2IxNDMgc2NhbGViICAxRS02MTc2ICAgICAgICAgICsxICAtPiAxRS02MTc1ICAgICAgICAgU3Vibm9ybWFsDQotZHFzY2IxNDQgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0wICAtPiAxRS02MTc2ICAgICAgICAgU3Vibm9ybWFsDQotZHFzY2IxNDUgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0xICAtPiAwRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLWRxc2NiMTUwIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICArMSAgLT4gLTFFLTYxNzUgICAgICAgIFN1Ym5vcm1hbA0KLWRxc2NiMTUxIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICAtMCAgLT4gLTFFLTYxNzYgICAgICAgIFN1Ym5vcm1hbA0KLWRxc2NiMTUyIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICAtMSAgLT4gLTBFLTYxNzYgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcXNjYjE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyDQotZHFzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgKzAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLWRxc2NiMTU1IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMTU2IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgKzEgIC0+IC0xRS02MTQyDQotZHFzY2IxNTcgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICAtMCAgLT4gLTFFLTYxNDMNCi1kcXNjYjE1OCBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0xICAtPiAtMUUtNjE0NCAgICAgICAgICBTdWJub3JtYWwNCi1kcXNjYjE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kcXNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQotZHFzY2IxNjEgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0Mw0KLWRxc2NiMTYyIHNjYWxlYiAgLTlFKzYxNDQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHFzY2IxNjMgc2NhbGViICAtMUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzb21lIE9yaWdhbWkNCi0tLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkNCi1kcXNjYjE3MSBzY2FsZWIgICAxMDAwRSs2MTA5ICArMSAtPiAxLjAwMEUrNjExMw0KLWRxc2NiMTcyIHNjYWxlYiAgIDEwMDBFKzYxMTAgICsxIC0+IDEuMDAwRSs2MTE0DQotZHFzY2IxNzMgc2NhbGViICAgMTAwMEUrNjExMSAgKzEgLT4gMS4wMDAwRSs2MTE1ICAgICAgICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxNzQgc2NhbGViICAgMTAwMEUrNjExMiAgKzEgLT4gMS4wMDAwMEUrNjExNiAgICAgICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxNzUgc2NhbGViICAgMTAwMEUrNjExMyAgKzEgLT4gMS4wMDAwMDBFKzYxMTcgICAgICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxNzYgc2NhbGViICAgMTAwMEUrNjExNCAgKzEgLT4gMS4wMDAwMDAwRSs2MTE4ICAgICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxNzcgc2NhbGViICAgMTAwMEUrNjEzMSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzUgICAgICAgICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTc4IHNjYWxlYiAgIDEwMDBFKzYxMzIgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNiAgICAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE3OSBzY2FsZWIgICAxMDAwRSs2MTMzICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM3ICAgICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxODAgc2NhbGViICAgMTAwMEUrNjEzNCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzggICAgICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTgxIHNjYWxlYiAgIDEwMDBFKzYxMzUgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOSAgICAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE4MiBzY2FsZWIgICAxMDAwRSs2MTM2ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQwICAgICAgICAgICBDbGFtcGVkDQotZHFzY2IxODMgc2NhbGViICAgMTAwMEUrNjEzNyAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgICAgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTg0IHNjYWxlYiAgIDEwMDBFKzYxMzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgICAgICAgIENsYW1wZWQNCi1kcXNjYjE4NSBzY2FsZWIgICAxMDAwRSs2MTM5ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICAgICAgICBDbGFtcGVkDQotZHFzY2IxODYgc2NhbGViICAgMTAwMEUrNjE0MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgICAgICAgQ2xhbXBlZA0KLWRxc2NiMTg3IHNjYWxlYiAgIDEwMDBFKzYxNDEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGFuZCBhIGZldyBtb3JlIHN1Ym5vcm1hbCB0cnVuY2F0aW9ucw0KLS0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkNCi1kcXNjYjIyMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi1kcXNjYjIyMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjIzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDUgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIyNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDYgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIyNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC01ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDggU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIyNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNiAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDkgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIyOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNyAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjI5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC04ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTEgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtOSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTIgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MyBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjMyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTUgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTcgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTggU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTYgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMEUtNjE1OSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjM4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNyAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFLTYxNjAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIzOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTggLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTYxNjEgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIwMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTkgLT4gMS4wMDAwMDAwMDAwMDAwMEUtNjE2MiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMCAtPiAxLjAwMDAwMDAwMDAwMDBFLTYxNjMgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjEgLT4gMS4wMDAwMDAwMDAwMDBFLTYxNjQgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIwNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjIgLT4gMS4wMDAwMDAwMDAwMEUtNjE2NSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMyAtPiAxLjAwMDAwMDAwMDBFLTYxNjYgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjQgLT4gMS4wMDAwMDAwMDBFLTYxNjcgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIwOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjUgLT4gMS4wMDAwMDAwMEUtNjE2OCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNiAtPiAxLjAwMDAwMDBFLTYxNjkgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjcgLT4gMS4wMDAwMDBFLTYxNzAgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIxMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjggLT4gMS4wMDAwMEUtNjE3MSBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOSAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzAgLT4gMS4wMDBFLTYxNzMgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIxNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzEgLT4gMS4wMEUtNjE3NCBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMiAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsIFJvdW5kZWQNCi1kcXNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzMgLT4gMUUtNjE3NiBTdWJub3JtYWwgUm91bmRlZA0KLWRxc2NiMjE3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zNCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kcXNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzUgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVNjYWxlYkIuZGVjVGVzdCAtLSBzY2FsZSBhIGRlY1F1YWQgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIE1heCB8cmhzfCBpcyAyKig2MTQ0KzM0KSA9IDEyMzU2CisKKy0tIFNhbml0eSBjaGVja3MKK2Rxc2NiMDAxIHNjYWxlYiAgICAgICA3LjUwICAgMTAgLT4gNy41MEUrMTAKK2Rxc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMworZHFzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTAKK2Rxc2NiMDA0IHNjYWxlYiAgICAgICA3LjUwICAgIDEgLT4gNzUuMAorZHFzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwCitkcXNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwCitkcXNjYjAwNyBzY2FsZWIgICAgICAgNy41MCAgIC0yIC0+IDAuMDc1MAorZHFzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMAorZHFzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMworZHFzY2IwMTAgc2NhbGViICAgICAgLTcuNTAgICAgMiAtPiAtNzUwCitkcXNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wCitkcXNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwCitkcXNjYjAxMyBzY2FsZWIgICAgICAtNy41MCAgIC0xIC0+IC0wLjc1MAorCistLSBJbmZpbml0aWVzCitkcXNjYjAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQorZHFzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5CitkcXNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQorZHFzY2IwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5CisKKy0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXIKK2Rxc2NiMDE4IHNjYWxlYiAgMTAgIEluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMgYXJlIHVuZGVmaW5lZCBpbiA3NTRyOyBhc3N1bWUgdXN1YWwgcHJvY2Vzc2luZworLS0gTmFOcywgMCBwYXlsb2FkCitkcXNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFOCitkcXNjYjAyMiBzY2FsZWIgICAgICAgIC1OYU4gLTEgLT4gLU5hTgorZHFzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDI1IHNjYWxlYiAgICA0ICAgIE5hTiAgICAtPiBOYU4KK2Rxc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFOCitkcXNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAyOCBzY2FsZWIgIEluZiAgLXNOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBub24taW50ZWdlciBSSFMKK2Rxc2NiMDMwIHNjYWxlYiAgMS4yMyAgICAxICAgIC0+ICAxMi4zCitkcXNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzMyBzY2FsZWIgIDEuMjMgICAgMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzNiBzY2FsZWIgIDEuMjMgICAgMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzCitkcXNjYjA2MTQgc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG91dC1vZiByYW5nZSBSSFMKK2Rxc2NiMTIwIHNjYWxlYiAgMS4yMyAgICAxMjM1NSAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEyMSBzY2FsZWIgIDEuMjMgICAgMTIzNTYgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMjIgc2NhbGViICAxLjIzICAgIDEyMzU3ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMTIzIHNjYWxlYiAgMS4yMyAgICAxMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjEyNCBzY2FsZWIgIDEuMjMgICAtMTIzNTUgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFzY2IxMjUgc2NhbGViICAxLjIzICAgLTEyMzU2ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rxc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC0xMjM1NyAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjEyNyBzY2FsZWIgIDEuMjMgICAtMTIzNTggICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKK2Rxc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgorZHFzY2I4NjMgc2NhbGViICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitkcXNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKK2Rxc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQorZHFzY2I4NjYgc2NhbGViIC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorZHFzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQorZHFzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQorZHFzY2I4Njkgc2NhbGViICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK2Rxc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzMgc2NhbGViIC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzYgc2NhbGViICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4Nzkgc2NhbGViICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmaW5pdGVzCitkcXNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3CitkcXNjYjA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNworZHFzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQorZHFzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUKK2Rxc2NiMDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MAorZHFzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MAorZHFzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMAorZHFzY2IwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDAKK2Rxc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNworZHFzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNworZHFzY2IwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41CitkcXNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41CitkcXNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MAorZHFzY2IwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwCitkcXNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDAKK2Rxc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDAKK2Rxc2NiMDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcKK2Rxc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03CitkcXNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQorZHFzY2IwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1CitkcXNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwCitkcXNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MAorZHFzY2IwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDAKK2Rxc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMAorZHFzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQorZHFzY2IwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzEKK2Rxc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMgorZHFzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMgorZHFzY2IwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMAorZHFzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjAKK2Rxc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwCitkcXNjYjA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDAKK2Rxc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzIKK2Rxc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyCitkcXNjYjA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMKK2Rxc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMKK2Rxc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MAorZHFzY2IwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MAorZHFzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjAKK2Rxc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMAorCistLSB6ZXJvcworZHFzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQorZHFzY2IxMTIgc2NhbGViICAgICAgICAgLTAgIDIgLT4gLTBFKzIKK2Rxc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcKK2Rxc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4CitkcXNjYjExNSBzY2FsZWIgICAgIDAuMDAwMCAgNSAtPiAwRSsxCitkcXNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMgorZHFzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0CitkcXNjYjExOCBzY2FsZWIgICAgIC0wRS0xNDEgOCAtPiAtMEUtMTMzCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXNjYjEzMiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArNjE0NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMzUgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2NiMTM3IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgKzEgIC0+IDFFLTYxNDIKK2Rxc2NiMTYxNCBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgIC0wICAtPiAxRS02MTQzCitkcXNjYjEzOSBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgIC0xICAtPiAxRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyCitkcXNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxc2NiMTQyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjE0MyBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgKzEgIC0+IDFFLTYxNzUgICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTQ0IHNjYWxlYiAgMUUtNjE3NiAgICAgICAgICAtMCAgLT4gMUUtNjE3NiAgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNDUgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0xICAtPiAwRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcXNjYjE1MCBzY2FsZWIgIC0xRS02MTc2ICAgICAgICAgKzEgIC0+IC0xRS02MTc1ICAgICAgICBTdWJub3JtYWwKK2Rxc2NiMTUxIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICAtMCAgLT4gLTFFLTYxNzYgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNTIgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0xICAtPiAtMEUtNjE3NiAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFzY2IxNTMgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MgorZHFzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgKzAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjE1NiBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgICsxICAtPiAtMUUtNjE0MgorZHFzY2IxNTcgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICAtMCAgLT4gLTFFLTYxNDMKK2Rxc2NiMTU4IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgLTEgIC0+IC0xRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNTkgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzCitkcXNjYjE2MiBzY2FsZWIgIC05RSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxNjMgc2NhbGViICAtMUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBPcmlnYW1pCistLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rxc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzYxMDkgICsxIC0+IDEuMDAwRSs2MTEzCitkcXNjYjE3MiBzY2FsZWIgICAxMDAwRSs2MTEwICArMSAtPiAxLjAwMEUrNjExNAorZHFzY2IxNzMgc2NhbGViICAgMTAwMEUrNjExMSAgKzEgLT4gMS4wMDAwRSs2MTE1ICAgICAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3NCBzY2FsZWIgICAxMDAwRSs2MTEyICArMSAtPiAxLjAwMDAwRSs2MTE2ICAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc1IHNjYWxlYiAgIDEwMDBFKzYxMTMgICsxIC0+IDEuMDAwMDAwRSs2MTE3ICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzYgc2NhbGViICAgMTAwMEUrNjExNCAgKzEgLT4gMS4wMDAwMDAwRSs2MTE4ICAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3NyBzY2FsZWIgICAxMDAwRSs2MTMxICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNSAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3OCBzY2FsZWIgICAxMDAwRSs2MTMyICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3OSBzY2FsZWIgICAxMDAwRSs2MTMzICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM3ICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE4MCBzY2FsZWIgICAxMDAwRSs2MTM0ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOCAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE4MSBzY2FsZWIgICAxMDAwRSs2MTM1ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE4MiBzY2FsZWIgICAxMDAwRSs2MTM2ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQwICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE4MyBzY2FsZWIgICAxMDAwRSs2MTM3ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSAgICAgICAgICBDbGFtcGVkCitkcXNjYjE4NCBzY2FsZWIgICAxMDAwRSs2MTM4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgICAgICAgICBDbGFtcGVkCitkcXNjYjE4NSBzY2FsZWIgICAxMDAwRSs2MTM5ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICAgICAgICBDbGFtcGVkCitkcXNjYjE4NiBzY2FsZWIgICAxMDAwRSs2MTQwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgICAgICBDbGFtcGVkCitkcXNjYjE4NyBzY2FsZWIgICAxMDAwRSs2MTQxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zCistLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCitkcXNjYjIyMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxc2NiMjIyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMiAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ1IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC00ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ3IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ4IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNiAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC03ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUwIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIyOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtOCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUxIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtOSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUzIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU2IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU3IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTggU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwRS02MTU5IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTcgLT4gMS4wMDAwMDAwMDAwMDAwMDAwRS02MTYwIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIzOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTggLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTYxNjEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOSAtPiAxLjAwMDAwMDAwMDAwMDAwRS02MTYyIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjAgLT4gMS4wMDAwMDAwMDAwMDAwRS02MTYzIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjEgLT4gMS4wMDAwMDAwMDAwMDBFLTYxNjQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMiAtPiAxLjAwMDAwMDAwMDAwRS02MTY1IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjMgLT4gMS4wMDAwMDAwMDAwRS02MTY2IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjQgLT4gMS4wMDAwMDAwMDBFLTYxNjcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNSAtPiAxLjAwMDAwMDAwRS02MTY4IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIwOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjYgLT4gMS4wMDAwMDAwRS02MTY5IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjcgLT4gMS4wMDAwMDBFLTYxNzAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOCAtPiAxLjAwMDAwRS02MTcxIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjkgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzAgLT4gMS4wMDBFLTYxNzMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMSAtPiAxLjAwRS02MTc0IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzIgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzMgLT4gMUUtNjE3NiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM0IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFzY2IyMTggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM1IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNoaWZ0LmRlY1Rlc3QKaW5kZXggNGVlODM2ZS4uNmQ2OTIxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0CkBAIC0xLDI5OCArMSwyOTggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxU2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBkZWNRdWFkIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gU2FuaXR5IGNoZWNrDQotZHFzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1kcXNoaTAwMiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMA0KLWRxc2hpMDAzIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCi1kcXNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDA1IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzQgIC0+ICAwDQotZHFzaGkwMDYgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDANCi1kcXNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KLWRxc2hpMDA4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXNoaTAwOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMQ0KLWRxc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwDQotZHFzaGkwMTEgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDkNCi1kcXNoaTAxMiBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMA0KLQ0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCi1kcXNoaTAxNSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDE3IHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAxOCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDIwIHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAyMSBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCi1kcXNoaTAyNSBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpMDI3IHNoaWZ0ICAgICAgICAxICAgICAzNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTAyOCBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuDQotZHFzaGkwMzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzQgIC0+IDANCi1kcXNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMyAgLT4gMQ0KLWRxc2hpMDMyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMyICAtPiAxMg0KLWRxc2hpMDMzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiAxMjMNCi1kcXNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMCAgLT4gMTIzNA0KLWRxc2hpMDM1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI5ICAtPiAxMjM0NQ0KLWRxc2hpMDM2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiAxMjM0NTYNCi1kcXNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNyAgLT4gMTIzNDU2Nw0KLWRxc2hpMDM4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI2ICAtPiAxMjM0NTY3OA0KLWRxc2hpMDM5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAxMjM0NTY3ODkNCi1kcXNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNCAgLT4gMTIzNDU2Nzg5MA0KLWRxc2hpMDQxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIzICAtPiAxMjM0NTY3ODkwMQ0KLWRxc2hpMDQyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAxMjM0NTY3ODkwMTINCi1kcXNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMSAgLT4gMTIzNDU2Nzg5MDEyMw0KLWRxc2hpMDQ0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIwICAtPiAxMjM0NTY3ODkwMTIzNA0KLWRxc2hpMDQ1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDUNCi1kcXNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxc2hpMDQ4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nw0KLWRxc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2NzgNCi1kcXNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OQ0KLWRxc2hpMDUxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MA0KLWRxc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCi1kcXNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMg0KLWRxc2hpMDU0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KLWRxc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCi1kcXNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQ0KLWRxc2hpMDU3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ng0KLWRxc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcNCi1kcXNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OA0KLWRxc2hpMDYwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQ0KLWRxc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTANCi1kcXNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ0KLWRxc2hpMDYzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMg0KLWRxc2hpMDY0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXNoaTA2NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLQ0KLWRxc2hpMDY2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQotZHFzaGkwNjcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDANCi1kcXNoaTA2OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMA0KLWRxc2hpMDY5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwDQotZHFzaGkwNzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDANCi1kcXNoaTA3MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMA0KLWRxc2hpMDcyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwDQotZHFzaGkwNzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDANCi1kcXNoaTA3NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs4ICAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMA0KLWRxc2hpMDc1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwDQotZHFzaGkwNzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDANCi1kcXNoaTA3NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMSAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMA0KLWRxc2hpMDc4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwDQotZHFzaGkwNzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDgxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDg0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMCAgLT4gMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDg3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwODggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA4OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMyAgLT4gNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDkwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNiAgLT4gNzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDkzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOSAgLT4gIDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDk2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkwOTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXNoaTA5OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMiAgLT4gMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMDk5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHFzaGkxMDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDANCi0NCi0tLSB6ZXJvcw0KLWRxc2hpMjcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRS0xMA0KLWRxc2hpMjcxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRS0xMA0KLWRxc2hpMjcyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwLjAwMA0KLWRxc2hpMjczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwLjAwMA0KLWRxc2hpMjc0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRSsxMA0KLWRxc2hpMjc1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRSsxMA0KLWRxc2hpMjc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRS0xMA0KLWRxc2hpMjc3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRS0xMA0KLWRxc2hpMjc4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wLjAwMA0KLWRxc2hpMjc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wLjAwMA0KLWRxc2hpMjgwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRSsxMA0KLWRxc2hpMjgxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRSsxMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotZHFzaGkxNDEgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0Mw0KLWRxc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDlFKzYxMTENCi1kcXNoaTE0MyBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NA0KLWRxc2hpMTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQotZHFzaGkxNDUgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE0Mw0KLWRxc2hpMTQ2IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDBFLTYxNDMNCi1kcXNoaTE0NyBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNDINCi1kcXNoaTE0OCBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMA0KLWRxc2hpMTUxIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCi1kcXNoaTE1MiBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAxRS02MTc2DQotZHFzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3Ng0KLWRxc2hpMTU0IHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDBFLTYxNzYNCi1kcXNoaTE1NSBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQotZHFzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gOUUtNjE3Ng0KLWRxc2hpMTU3IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDBFLTYxNzYNCi1kcXNoaTE1OCBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAwRS02MTc2DQotZHFzaGkxNjAgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE3Ng0KLWRxc2hpMTYxIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDBFLTYxNzYNCi1kcXNoaTE2MiBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTYxNzUNCi1kcXNoaTE2MyBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KLS0tICBuZWdhdGl2ZXMNCi1kcXNoaTE3MSBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0Mw0KLWRxc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IC05RSs2MTExDQotZHFzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0DQotZHFzaGkxNzQgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQotZHFzaGkxNzUgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNDMNCi1kcXNoaTE3NiBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMEUtNjE0Mw0KLWRxc2hpMTc3IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNDINCi1kcXNoaTE3OCBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCi1kcXNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KLWRxc2hpMTgyIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC0xRS02MTc2DQotZHFzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYNCi1kcXNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3Ng0KLWRxc2hpMTg1IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQotZHFzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYNCi1kcXNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMEUtNjE3Ng0KLWRxc2hpMTg4IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2DQotZHFzaGkxOTAgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNzYNCi1kcXNoaTE5MSBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMEUtNjE3Ng0KLWRxc2hpMTkyIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNzUNCi1kcXNoaTE5MyBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCi0NCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQotZHFzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTANCi1kcXNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMA0KLWRxc2hpMjAzIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDANCi1kcXNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzQgIC0+IC0wDQotZHFzaGkyMDYgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTANCi1kcXNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMA0KLWRxc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCi1kcXNoaTIwOSBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtMQ0KLWRxc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wDQotZHFzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTkNCi1kcXNoaTIxMiBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMA0KLQ0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotZHFzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KLWRxc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1kcXNoaTc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZHFzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLWRxc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1kcXNoaTc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotZHFzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotZHFzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotZHFzaGk4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1kcXNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLWRxc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFODQotZHFzaGk4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1kcXNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTg0KLWRxc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFODQotZHFzaGk4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1kcXNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTg0KLWRxc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFODQotZHFzaGk4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLWRxc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFODQotZHFzaGk4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTg0KLWRxc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFODQotZHFzaGk4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1kcXNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLWRxc2hpODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcXNoaTg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1kcXNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1kcXNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1kcXNoaTg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1kcXNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1kcXNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1kcXNoaTg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1kcXNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1kcXNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZHFzaGk4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzaGk4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1kcXNoaTg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1kcXNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFTaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGRlY1F1YWQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2Rxc2hpMDAxIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwCitkcXNoaTAwMiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAorZHFzaGkwMDMgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorZHFzaGkwMDQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzMyAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDA1IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzQgIC0+ICAwCitkcXNoaTAwNiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMAorZHFzaGkwMDcgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDAKK2Rxc2hpMDA4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxc2hpMDA5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICAxCitkcXNoaTAxMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMAorZHFzaGkwMTEgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDkKK2Rxc2hpMDEyIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwCisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK2Rxc2hpMDE1IHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDE2IHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDE3IHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDE4IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDE5IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDIwIHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDIxIHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDIyIHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK2Rxc2hpMDI1IHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDI2IHNoaWZ0ICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDI3IHNoaWZ0ICAgICAgICAxICAgICAzNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpMDI4IHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuCitkcXNoaTAzMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zNCAgLT4gMAorZHFzaGkwMzEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzMgIC0+IDEKK2Rxc2hpMDMyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMyICAtPiAxMgorZHFzaGkwMzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzEgIC0+IDEyMworZHFzaGkwMzQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzAgIC0+IDEyMzQKK2Rxc2hpMDM1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI5ICAtPiAxMjM0NQorZHFzaGkwMzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjggIC0+IDEyMzQ1NgorZHFzaGkwMzcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjcgIC0+IDEyMzQ1NjcKK2Rxc2hpMDM4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI2ICAtPiAxMjM0NTY3OAorZHFzaGkwMzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjUgIC0+IDEyMzQ1Njc4OQorZHFzaGkwNDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjQgIC0+IDEyMzQ1Njc4OTAKK2Rxc2hpMDQxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIzICAtPiAxMjM0NTY3ODkwMQorZHFzaGkwNDIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjIgIC0+IDEyMzQ1Njc4OTAxMgorZHFzaGkwNDMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjEgIC0+IDEyMzQ1Njc4OTAxMjMKK2Rxc2hpMDQ0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIwICAtPiAxMjM0NTY3ODkwMTIzNAorZHFzaGkwNDUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NQorZHFzaGkwNDcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2Rxc2hpMDQ4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2NworZHFzaGkwNDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFzaGkwNTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxc2hpMDUxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFzaGkwNTIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFzaGkwNTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxc2hpMDU0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkwNTUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFzaGkwNTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKK2Rxc2hpMDU3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NgorZHFzaGkwNTggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NworZHFzaGkwNTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxc2hpMDYwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFzaGkwNjEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFzaGkwNjIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxc2hpMDYzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFzaGkwNjQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkwNjUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworZHFzaGkwNjYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKK2Rxc2hpMDY3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwCitkcXNoaTA2OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMAorZHFzaGkwNjkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAKK2Rxc2hpMDcwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwCitkcXNoaTA3MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMAorZHFzaGkwNzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAKK2Rxc2hpMDczIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwCitkcXNoaTA3NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs4ICAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMAorZHFzaGkwNzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOSAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAKK2Rxc2hpMDc2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwCitkcXNoaTA3NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMSAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMAorZHFzaGkwNzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAKK2Rxc2hpMDc5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwCitkcXNoaTA4MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMAorZHFzaGkwODEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTUgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTggIC0+IDkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMCAgLT4gMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjEgIC0+IDIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMyAgLT4gNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjQgIC0+IDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDkxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNiAgLT4gNzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjcgIC0+IDg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOSAgLT4gIDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzAgIC0+IDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMiAgLT4gMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzMgIC0+IDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMTAwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAwCisKKy0tIHplcm9zCitkcXNoaTI3MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUtMTAKK2Rxc2hpMjcxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRS0xMAorZHFzaGkyNzIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgIDAuMDAwCitkcXNoaTI3MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMC4wMDAKK2Rxc2hpMjc0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRSsxMAorZHFzaGkyNzUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFKzEwCitkcXNoaTI3NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUtMTAKK2Rxc2hpMjc3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRS0xMAorZHFzaGkyNzggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgLTAuMDAwCitkcXNoaTI3OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMC4wMDAKK2Rxc2hpMjgwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRSsxMAorZHFzaGkyODEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcXNoaTE0MSBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzCitkcXNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5RSs2MTExCitkcXNoaTE0MyBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAorZHFzaGkxNDQgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2Rxc2hpMTQ1IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTYxNDMKK2Rxc2hpMTQ2IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDBFLTYxNDMKK2Rxc2hpMTQ3IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE0MgorZHFzaGkxNDggc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxc2hpMTUxIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxc2hpMTUyIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDFFLTYxNzYKK2Rxc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDBFLTYxNzYKK2Rxc2hpMTU0IHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDBFLTYxNzYKK2Rxc2hpMTU1IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDlFLTYxNzYKK2Rxc2hpMTU3IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDBFLTYxNzYKK2Rxc2hpMTU4IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDBFLTYxNzYKK2Rxc2hpMTYwIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTYxNzYKK2Rxc2hpMTYxIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDBFLTYxNzYKK2Rxc2hpMTYyIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE3NQorZHFzaGkxNjMgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKy0tICBuZWdhdGl2ZXMKK2Rxc2hpMTcxIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzCitkcXNoaTE3MiBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiAtOUUrNjExMQorZHFzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0CitkcXNoaTE3NCBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2Rxc2hpMTc1IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS02MTQzCitkcXNoaTE3NiBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMEUtNjE0MworZHFzaGkxNzcgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0MgorZHFzaGkxNzggc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxODIgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYKK2Rxc2hpMTgzIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2CitkcXNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3NgorZHFzaGkxODUgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxc2hpMTg2IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC05RS02MTc2CitkcXNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMEUtNjE3NgorZHFzaGkxODggc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTBFLTYxNzYKK2Rxc2hpMTkwIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS02MTc2CitkcXNoaTE5MSBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMEUtNjE3NgorZHFzaGkxOTIgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQorZHFzaGkxOTMgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK2Rxc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCitkcXNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZHFzaGkyMDMgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAorZHFzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzQgIC0+IC0wCitkcXNoaTIwNiBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMAorZHFzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKK2Rxc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxc2hpMjA5IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC0xCitkcXNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMAorZHFzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTkKK2Rxc2hpMjEyIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wCisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK2Rxc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK2Rxc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkcXNoaTgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkcXNoaTgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXNoaTgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rxc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCitkcXNoaTgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2Rxc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCitkcXNoaTgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rxc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFzaGk4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxc2hpODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcXNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2Rxc2hpODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcXNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2Rxc2hpODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcXNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcXNoaTg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2Rxc2hpODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcXNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVN1YnRyYWN0LmRlY1Rlc3QKaW5kZXggZjNiOTIyNy4uMzQ1NzJmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0CkBAIC0xLDYzNSArMSw2MzUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGRxU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNRdWFkIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlDQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQNCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddDQotZHFzdWIwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcNCi1kcXN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJw0KLWRxc3ViMDAzIHN1YnRyYWN0ICAxICAgMiAgLT4gJy0xJw0KLWRxc3ViMDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnDQotZHFzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcNCi1kcXN1YjAwNiBzdWJ0cmFjdCAgMyAgIDIgIC0+ICcxJw0KLWRxc3ViMDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJw0KLQ0KLWRxc3ViMDExIHN1YnRyYWN0IC0wICAgMCAgLT4gJy0wJw0KLWRxc3ViMDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJw0KLWRxc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJw0KLWRxc3ViMDE0IHN1YnRyYWN0IC0yICAgMSAgLT4gJy0zJw0KLWRxc3ViMDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00Jw0KLWRxc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01Jw0KLWRxc3ViMDE3IHN1YnRyYWN0IC0yICAgMyAgLT4gJy01Jw0KLQ0KLWRxc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnDQotZHFzdWIwMjIgc3VidHJhY3QgIDEgIC0xICAtPiAnMicNCi1kcXN1YjAyMyBzdWJ0cmFjdCAgMSAgLTIgIC0+ICczJw0KLWRxc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnDQotZHFzdWIwMjUgc3VidHJhY3QgIDIgIC0yICAtPiAnNCcNCi1kcXN1YjAyNiBzdWJ0cmFjdCAgMyAgLTIgIC0+ICc1Jw0KLWRxc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnDQotDQotZHFzdWIwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMA0KLWRxc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkNCi1kcXN1YjAzMiBzdWJ0cmFjdCAgOSAgIDEgIC0+ICA4DQotZHFzdWIwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMA0KLWRxc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTENCi1kcXN1YjAzNSBzdWJ0cmFjdCAtMSAgIDEgIC0+IC0yDQotZHFzdWIwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTANCi1kcXN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQ0KLWRxc3ViMDM4IHN1YnRyYWN0IC0xMSAgMSAgLT4gLTEyDQotDQotZHFzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScNCi1kcXN1YjA0MSBzdWJ0cmFjdCAnNScgICAgJy0zJyAgIC0+ICc4Jw0KLWRxc3ViMDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJw0KLWRxc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnDQotZHFzdWIwNDQgc3VidHJhY3QgJzAuNycgICcwLjMnICAtPiAnMC40Jw0KLWRxc3ViMDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcNCi1kcXN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJw0KLQ0KLWRxc3ViMDUwIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknDQotZHFzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcNCi0NCi1kcXN1YjA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWIwNjIgc3VidHJhY3QgJzcwMDAnICAgICcxMDAwMGUrMzQnIC0+ICctOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzM3JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrMzQnIC0+ICctOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTNFKzM3JyBSb3VuZGVkDQotZHFzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQNCi0gIC0tIHN5bW1ldHJ5Og0KLWRxc3ViMDY1IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWIwNjcgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViMDY4IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZA0KLWRxc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQNCi0NCi0gIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cw0KLWRxc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcNCi1kcXN1YjA5MSBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJw0KLWRxc3ViMDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnDQotZHFzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcNCi1kcXN1YjA5NCBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJw0KLWRxc3ViMDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycNCi1kcXN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnDQotZHFzdWIwOTcgc3VidHJhY3QgJzMuMCcgICcuMycgICAtPiAnMi43Jw0KLWRxc3ViMDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnDQotZHFzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcNCi1kcXN1YjEwMCBzdWJ0cmFjdCAnMycgICAgJyszJyAgIC0+ICcwJw0KLWRxc3ViMTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnDQotZHFzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43Jw0KLWRxc3ViMTAzIHN1YnRyYWN0ICczLicgICAnMC4zJyAgLT4gJzIuNycNCi1kcXN1YjEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnDQotZHFzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcNCi1kcXN1YjEwNiBzdWJ0cmFjdCAnMycgICAgJzMuMCcgIC0+ICcwLjAnDQotZHFzdWIxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJw0KLWRxc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcNCi0NCi0tLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLg0KLS0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10NCi0tLSBOQjogLXhFLTggYmVsb3cgd2VyZSBub24tZXhwb25lbnRzIHByZS1BTlNJIFgzLTI3NCwgYW5kIC0xRS03IG9yIDBFLTcNCi0tLSB3aXRoIGlucHV0IHJvdW5kaW5nLg0KLWRxc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcNCi1kcXN1YjEyMSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg1JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTRFLTgnDQotZHFzdWIxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04Jw0KLWRxc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcNCi1kcXN1YjEyNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTFFLTgnDQotZHFzdWIxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnDQotZHFzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnDQotZHFzdWIxMjcgc3VidHJhY3QgICcxMC4yMzQ1Njc5MScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzJFLTgnDQotZHFzdWIxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnDQotZHFzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnDQotZHFzdWIxMzAgc3VidHJhY3QgICcxMC4yMzQ1Njc5NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzVFLTgnDQotZHFzdWIxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04Jw0KLWRxc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcNCi1kcXN1YjEzMyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgzJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTNFLTgnDQotZHFzdWIxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04Jw0KLWRxc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcNCi1kcXN1YjEzNiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMEUtOCcNCi1kcXN1YjEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcNCi1kcXN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcNCi1kcXN1YjEzOSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnM0UtOCcNCi1kcXN1YjE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcNCi1kcXN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcNCi1kcXN1YjE0MiBzdWJ0cmFjdCAgJzEnICAgICAgICAgICAgICAnMC45OTk5OTk5OTknICAtPiAnMUUtOScNCi1kcXN1YjE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknDQotZHFzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnDQotZHFzdWIxNDUgc3VidHJhY3QgICctMTAuMjM0NTY3OTAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy00RS04Jw0KLWRxc3ViMTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcNCi0NCi0tLSBhZGRpdGlvbmFsIHNjYWxlZCBhcml0aG1ldGljIHRlc3RzIFswLjk3IHByb2JsZW1dDQotZHFzdWIxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnDQotZHFzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJw0KLWRxc3ViMTYyIHN1YnRyYWN0ICcwJyAgICAgJy45JyAgICAgIC0+ICctMC45Jw0KLWRxc3ViMTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInDQotZHFzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnDQotZHFzdWIxNjUgc3VidHJhY3QgJzAnICAgICAnLjMwNycgICAgLT4gJy0wLjMwNycNCi1kcXN1YjE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInDQotZHFzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScNCi1kcXN1YjE2OCBzdWJ0cmFjdCAnLjAnICAgICcuMDInICAgICAtPiAnLTAuMDInDQotZHFzdWIxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicNCi1kcXN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnDQotZHFzdWIxNzEgc3VidHJhY3QgJzAnICAgICAnMC41MScgICAgLT4gJy0wLjUxJw0KLWRxc3ViMTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0Jw0KLWRxc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJw0KLWRxc3ViMTc0IHN1YnRyYWN0ICcuMCcgICAgJy4wMDA4JyAgIC0+ICctMC4wMDA4Jw0KLS0tIDAuIG9uIGxlZnQNCi1kcXN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJw0KLWRxc3ViMTgxIHN1YnRyYWN0ICcwLjAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJw0KLWRxc3ViMTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknDQotZHFzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJw0KLWRxc3ViMTg0IHN1YnRyYWN0ICcwLjAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnDQotZHFzdWIxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3Jw0KLWRxc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJw0KLWRxc3ViMTg3IHN1YnRyYWN0ICcwLjAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScNCi1kcXN1YjE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicNCi1kcXN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInDQotZHFzdWIxOTAgc3VidHJhY3QgJzAuMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnDQotZHFzdWIxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnDQotZHFzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcNCi1kcXN1YjE5MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMicgICAgICAtPiAnMC4yJw0KLWRxc3ViMTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnDQotLS0gbmVnYXRpdmVzIG9mIHNhbWUNCi1kcXN1YjIwMCBzdWJ0cmFjdCAnMCcgICAgICctLjEnICAgICAgLT4gJzAuMScNCi1kcXN1YjIwMSBzdWJ0cmFjdCAnMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnDQotZHFzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknDQotZHFzdWIyMDMgc3VidHJhY3QgJzAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicNCi1kcXN1YjIwNCBzdWJ0cmFjdCAnMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcNCi1kcXN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3Jw0KLWRxc3ViMjA2IHN1YnRyYWN0ICcwJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicNCi1kcXN1YjIwNyBzdWJ0cmFjdCAnMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJw0KLWRxc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicNCi1kcXN1YjIwOSBzdWJ0cmFjdCAnMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJw0KLWRxc3ViMjEwIHN1YnRyYWN0ICcwJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicNCi1kcXN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnDQotZHFzdWIyMTIgc3VidHJhY3QgJzAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnDQotZHFzdWIyMTMgc3VidHJhY3QgJzAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInDQotZHFzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnDQotDQotLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0NCi1kcXN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnDQotZHFzdWIyMjEgc3VidHJhY3QgJy01NjI2N0UtMTEnIDAgIC0+ICctNS42MjY3RS03Jw0KLWRxc3ViMjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycNCi1kcXN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycNCi1kcXN1YjIyNCBzdWJ0cmFjdCAnLTU2MjY3RS04JyAgMCAgLT4gJy0wLjAwMDU2MjY3Jw0KLWRxc3ViMjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycNCi1kcXN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycNCi1kcXN1YjIyNyBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgMCAgLT4gJy0wLjU2MjY3Jw0KLWRxc3ViMjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycNCi1kcXN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnDQotZHFzdWIyMzAgc3VidHJhY3QgJy01NjI2N0UtMCcgIDAgIC0+ICctNTYyNjcnDQotLS0gc3ltbWV0cnkgLi4uDQotZHFzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnDQotZHFzdWIyNDEgc3VidHJhY3QgMCAnLTU2MjY3RS0xMScgIC0+ICc1LjYyNjdFLTcnDQotZHFzdWIyNDIgc3VidHJhY3QgMCAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnDQotZHFzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycNCi1kcXN1YjI0NCBzdWJ0cmFjdCAwICctNTYyNjdFLTgnICAgLT4gJzAuMDAwNTYyNjcnDQotZHFzdWIyNDUgc3VidHJhY3QgMCAnLTU2MjY3RS03JyAgIC0+ICcwLjAwNTYyNjcnDQotZHFzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycNCi1kcXN1YjI0NyBzdWJ0cmFjdCAwICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnDQotZHFzdWIyNDggc3VidHJhY3QgMCAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnDQotZHFzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnDQotZHFzdWIyNTAgc3VidHJhY3QgMCAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycNCi0NCi0tLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZA0KLWRxc3ViMzAxIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5Jw0KLWRxc3ViMzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4Jw0KLQ0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KLWRxc3ViMzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWRxc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3Jw0KLWRxc3ViMzIzIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMC45OTk2Jw0KLWRxc3ViMzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1Jw0KLWRxc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcNCi1kcXN1YjMyNiBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDEnIC0+ICcwLjk5OTknDQotZHFzdWIzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJw0KLWRxc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScNCi0NCi0tLSBpbnRlcm5hbCBib3VuZGFyaWVzDQotZHFzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnDQotZHFzdWIzNDcgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwJyAgIC0+ICc5OTk5OTk5OTk5OTMwJw0KLWRxc3ViMzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnDQotZHFzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnDQotZHFzdWIzNTAgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwJyAgIC0+ICc5OTk5OTk5OTMwMDAwJw0KLWRxc3ViMzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnDQotZHFzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnDQotZHFzdWIzNTMgc3VidHJhY3QgJzcwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5OTMwJw0KLWRxc3ViMzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnDQotZHFzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnDQotZHFzdWIzNTYgc3VidHJhY3QgJzcwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTMwMDAwJw0KLWRxc3ViMzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnDQotDQotLS0gemVybyBwcmVzZXJ2YXRpb24NCi1kcXN1YjM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknDQotZHFzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknDQotZHFzdWIzNjMgc3VidHJhY3QgMSAnMC4wMDAwMDEnIC0+ICcwLjk5OTk5OScNCi1kcXN1YjM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQotZHFzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjM2NiBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dDQotZHFzdWIzNzAgc3VidHJhY3QgMSAgMCAgLT4gMQ0KLWRxc3ViMzcxIHN1YnRyYWN0IDEgMC4gIC0+IDENCi1kcXN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjANCi1kcXN1YjM3MyBzdWJ0cmFjdCAxIDAuMCAtPiAxLjANCi1kcXN1YjM3NCBzdWJ0cmFjdCAgMCAgMSAtPiAtMQ0KLWRxc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xDQotZHFzdWIzNzYgc3VidHJhY3QgIC4wIDEgLT4gLTEuMA0KLWRxc3ViMzc3IHN1YnRyYWN0IDAuMCAxIC0+IC0xLjANCi0NCi0tLSBsZWFkaW5nIDAgZGlnaXQgYmVmb3JlIHJvdW5kDQotZHFzdWI5MTAgc3VidHJhY3QgLTEwMzUxOTM2MiAtNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNw0KLWRxc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExDQotDQotZHFzdWI5MjAgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gMjk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI5MjIgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjUgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1DQotZHFzdWI5MjMgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQotZHFzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgUm91bmRlZA0KLWRxc3ViOTI1IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYwIC0+ICA5MC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxc3ViOTI2IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYxIC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KLWRxc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLWRxc3ViOTI4IHN1YnRyYWN0IDEwMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDkxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLWRxc3ViOTI5IHN1YnRyYWN0IDEwMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDk5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICAgMS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KLQ0KLS0tIG1vcmUgTEhTIHN3YXBzIFt3ZXJlIGZpeGVkXQ0KLWRxc3ViMzkwIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWRxc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQotZHFzdWIzOTIgc3VidHJhY3QgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KLWRxc3ViMzkzIHN1YnRyYWN0ICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWRxc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KLWRxc3ViMzk1IHN1YnRyYWN0ICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KLWRxc3ViMzk2IHN1YnRyYWN0ICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWRxc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQotZHFzdWIzOTggc3VidHJhY3QgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCi1kcXN1YjM5OSBzdWJ0cmFjdCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZHFzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCi1kcXN1YjQwMSBzdWJ0cmFjdCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQotZHFzdWI0MDIgc3VidHJhY3QgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZHFzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQotZHFzdWI0MDQgc3VidHJhY3QgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KLWRxc3ViNDA1IHN1YnRyYWN0ICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZHFzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQotZHFzdWI0MDcgc3VidHJhY3QgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxc3ViNDA4IHN1YnRyYWN0ICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZA0KLWRxc3ViNDA5IHN1YnRyYWN0ICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZA0KLWRxc3ViNDEwIHN1YnRyYWN0ICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZA0KLWRxc3ViNDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzIFt3ZXJlIGZpeGVkXQ0KLWRxc3ViNDIwIHN1YnRyYWN0IDAgICctNTYyNjdFLTEwJyAtPiAgJzAuMDAwMDA1NjI2NycNCi1kcXN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycNCi1kcXN1YjQyMiBzdWJ0cmFjdCAwICAnLTU2MjY3RS01JyAgLT4gICcwLjU2MjY3Jw0KLWRxc3ViNDIzIHN1YnRyYWN0IDAgICctNTYyNjdFLTQnICAtPiAgJzUuNjI2NycNCi1kcXN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnDQotZHFzdWI0MjUgc3VidHJhY3QgMCAgJy01NjI2N0UtMicgIC0+ICAnNTYyLjY3Jw0KLWRxc3ViNDI2IHN1YnRyYWN0IDAgICctNTYyNjdFLTEnICAtPiAgJzU2MjYuNycNCi1kcXN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycNCi1kcXN1YjQyOCBzdWJ0cmFjdCAwICAnLTVFLTEwJyAgICAgLT4gICc1RS0xMCcNCi1kcXN1YjQyOSBzdWJ0cmFjdCAwICAnLTVFLTcnICAgICAgLT4gICc1RS03Jw0KLWRxc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1Jw0KLWRxc3ViNDMxIHN1YnRyYWN0IDAgICctNUUtNScgICAgICAtPiAgJzAuMDAwMDUnDQotZHFzdWI0MzIgc3VidHJhY3QgMCAgJy01RS00JyAgICAgIC0+ICAnMC4wMDA1Jw0KLWRxc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScNCi1kcXN1YjQzNCBzdWJ0cmFjdCAwICAnLTVFMCcgICAgICAgLT4gICc1Jw0KLWRxc3ViNDM1IHN1YnRyYWN0IDAgICctNUUxJyAgICAgICAtPiAgJzUwJw0KLWRxc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcNCi1kcXN1YjQzNyBzdWJ0cmFjdCAwICAnLTVFMzMnICAgICAgLT4gICc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KLWRxc3ViNDM4IHN1YnRyYWN0IDAgICctNUUzNCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkDQotZHFzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTM1JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQNCi1kcXN1YjQ0MCBzdWJ0cmFjdCAwICAnLTVFMzYnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICAgUm91bmRlZA0KLWRxc3ViNDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQotDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1kcXN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknDQotZHFzdWI0NjIgc3VidHJhY3QgJzFFKzEyJyAnLTEuMTExJyAgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScNCi1kcXN1YjQ2MyBzdWJ0cmFjdCAnMS4xMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJw0KLWRxc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCi1kcXN1YjQ2NSBzdWJ0cmFjdCAnN0UrMTUnICcxJyAgICAgICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknDQotZHFzdWI0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTExJyAgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScNCi1kcXN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJw0KLWRxc3ViNDY4IHN1YnRyYWN0ICctMScgICAgJy03RSsxNScgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScNCi0NCi0tLSAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1DQotZHFzdWI0NzAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNDcxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI0NzMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNDc0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI0NzYgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNDc3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZHFzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KLWRxc3ViNDc5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcNCi1kcXN1YjQ4MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcnDQotZHFzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Jw0KLWRxc3ViNDgyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NScNCi1kcXN1YjQ4MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQnDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQotZHFzdWI1MDEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTAyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MDQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTA1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MDcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTA4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTExIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTE0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MTYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnDQotZHFzdWI1MTcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUxOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWRxc3ViNTIwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KLWRxc3ViNTIxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MjMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTI0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MjYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTI3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1Mjkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTMwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MzIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTMzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1MzUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTM2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KLWRxc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjUzOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1Mzkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZHFzdWI1NDAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTQxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1kcXN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScNCi1kcXN1YjU1MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU1NCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU1NyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NjEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2MyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1NjQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjU2NiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCi1kcXN1YjU2NyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNTY5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeS4uLg0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFzdWI2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KLWRxc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MDIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MDUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MDggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCi1kcXN1YjYxNyBzdWJ0cmFjdCAxLjAwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KLWRxc3ViNjIxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjI0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjI3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjMwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjMzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjM2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCi1kcXN1YjYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Mzkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWRxc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NDEgc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZHFzdWI2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KLWRxc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NTIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NTUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NTggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NjEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2NjQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1kcXN1YjY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCi1kcXN1YjY2NyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KLWRxc3ViNjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQotZHFzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0NCi0tLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZg0KLS0tIGlucHV0IHJvdW5kaW5nIHdvdWxkIGhhdmUgYWZmZWN0ZWQgdGhlIGZvbGxvd2luZw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZHFzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRxc3ViNjcxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kcXN1YjY3MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRxc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZHFzdWI2NzQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZHFzdWI2ODAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRxc3ViNjgxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kcXN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRxc3ViNjgzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZHFzdWI2ODQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi1kcXN1YjY4NSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuMScgLT4gMC45DQotZHFzdWI2ODYgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjknIC0+IDAuMQ0KLWRxc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xDQotZHFzdWI2ODggc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjUnIC0+IC0wLjUNCi1kcXN1YjY4OSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguOScgLT4gLTAuOQ0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZHFzdWI2OTAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQ0KLWRxc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjENCi1kcXN1YjY5MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQ0KLWRxc3ViNjkzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41DQotZHFzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkNCi0NCi0tLSBTcGVjaWFscw0KLWRxc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4MSBzdWJ0cmFjdCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZHFzdWI3ODIgc3VidHJhY3QgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4NCBzdWJ0cmFjdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotZHFzdWI3ODUgc3VidHJhY3QgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc4OCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFzdWI3ODkgc3VidHJhY3QgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLWRxc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkNCi1kcXN1Yjc5MSBzdWJ0cmFjdCAgMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQotZHFzdWI3OTIgc3VidHJhY3QgIDEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLQ0KLWRxc3ViODAwIHN1YnRyYWN0ICBJbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQotZHFzdWI4MDMgc3VidHJhY3QgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQotZHFzdWI4MDYgc3VidHJhY3QgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5DQotZHFzdWI4MDkgc3VidHJhY3QgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgxMiBzdWJ0cmFjdCAgMCAgICAtSW5mICAgLT4gIEluZmluaXR5DQotZHFzdWI4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KLWRxc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkNCi1kcXN1YjgxNSBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotDQotZHFzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4NCi1kcXN1YjgyMiBzdWJ0cmFjdCAtTmFOICAgMTAwMCAgLT4gLU5hTg0KLWRxc3ViODIzIHN1YnRyYWN0ICBOYU4gICAxICAgICAtPiAgTmFODQotZHFzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4NCi1kcXN1YjgyNSBzdWJ0cmFjdCAgTmFOICAtMCAgICAgLT4gIE5hTg0KLWRxc3ViODI2IHN1YnRyYWN0ICBOYU4gIC0xICAgICAtPiAgTmFODQotZHFzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4NCi1kcXN1YjgyOCBzdWJ0cmFjdCAgTmFOICAtSW5mICAgLT4gIE5hTg0KLWRxc3ViODI5IHN1YnRyYWN0IC1OYU4gICBOYU4gICAtPiAtTmFODQotZHFzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4NCi1kcXN1YjgzMSBzdWJ0cmFjdCAtMTAwMCAgTmFOICAgLT4gIE5hTg0KLWRxc3ViODMyIHN1YnRyYWN0IC0xICAgICBOYU4gICAtPiAgTmFODQotZHFzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4NCi1kcXN1YjgzNCBzdWJ0cmFjdCAgMCAgICAgTmFOICAgLT4gIE5hTg0KLWRxc3ViODM1IHN1YnRyYWN0ICAxICAgICBOYU4gICAtPiAgTmFODQotZHFzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4NCi1kcXN1YjgzNyBzdWJ0cmFjdCAgSW5mICAgTmFOICAgLT4gIE5hTg0KLQ0KLWRxc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQyIHN1YnRyYWN0IC1zTmFOICAxMDAwICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQzIHN1YnRyYWN0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ1IHN1YnRyYWN0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ2IHN1YnRyYWN0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ4IHN1YnRyYWN0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODQ5IHN1YnRyYWN0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODUxIHN1YnRyYWN0IC1JbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODUyIHN1YnRyYWN0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU0IHN1YnRyYWN0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU1IHN1YnRyYWN0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU3IHN1YnRyYWN0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU4IHN1YnRyYWN0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1kcXN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KLWRxc3ViODYyIHN1YnRyYWN0IC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yDQotZHFzdWI4NjMgc3VidHJhY3QgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCi1kcXN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KLWRxc3ViODY1IHN1YnRyYWN0ICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41DQotZHFzdWI4NjYgc3VidHJhY3QgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQotZHFzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQotZHFzdWI4Njggc3VidHJhY3QgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxDQotZHFzdWI4Njkgc3VidHJhY3QgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KLWRxc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3MiBzdWJ0cmFjdCAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NzMgc3VidHJhY3QgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3NSBzdWJ0cmFjdCAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4NzYgc3VidHJhY3QgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg3OCBzdWJ0cmFjdCAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uDQotZHFzdWI4Nzkgc3VidHJhY3QgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KLWRxc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjg4MSBzdWJ0cmFjdCAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZWRnZSBjYXNlIHNwaWxscw0KLWRxc3ViOTAxIHN1YnRyYWN0ICAyLkUtMyAgMS4wMDIgIC0+IC0xLjAwMA0KLWRxc3ViOTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwDQotZHFzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDANCi1kcXN1YjkwNCBzdWJ0cmFjdCAgMi4wMDBFLTMgIDEuMDAyMDAgIC0+IC0xLjAwMDAwMA0KLWRxc3ViOTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwDQotZHFzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDANCi1kcXN1YjkwNyBzdWJ0cmFjdCAgMi4wMDAwMDBFLTMgIDEuMDAyMDAwMDAgIC0+IC0xLjAwMDAwMDAwMA0KLWRxc3ViOTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwDQotDQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzIGNvdmVyZWQgdW5kZXIgQWRkDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotZHFzdWIxMTI1ICBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwDQotZHFzdWIxMTI2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwDQotZHFzdWIxMTI3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwDQotZHFzdWIxMTI4ICBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszDQotDQotLS0gTnVsbCB0ZXN0cw0KLWRxc3ViOTk5MCBzdWJ0cmFjdCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXN1Yjk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVN1YnRyYWN0LmRlY1Rlc3QgLS0gZGVjUXVhZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2Rxc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnCitkcXN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJworZHFzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCitkcXN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJworZHFzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKK2Rxc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCitkcXN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScKKworZHFzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCitkcXN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKK2Rxc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJworZHFzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCitkcXN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKK2Rxc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01JworZHFzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCisKK2Rxc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCitkcXN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJworZHFzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKK2Rxc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCitkcXN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0JworZHFzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKK2Rxc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCisKK2Rxc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTAKK2Rxc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKK2Rxc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKK2Rxc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDAKK2Rxc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKK2Rxc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKK2Rxc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwCitkcXN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQorZHFzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKKworZHFzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScKK2Rxc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCitkcXN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKK2Rxc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnCitkcXN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCitkcXN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCitkcXN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJworCitkcXN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JworZHFzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKKworZHFzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZAorZHFzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZAorZHFzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKKyAgLS0gc3ltbWV0cnk6CitkcXN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5M0UrMzcnIFJvdW5kZWQKK2Rxc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKKworICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKK2Rxc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcKK2Rxc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitkcXN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworZHFzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rxc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkcXN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJworZHFzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcKK2Rxc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCitkcXN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2JworZHFzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcKK2Rxc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKK2Rxc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKK2Rxc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcKKworLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4KKy0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNworLS0gd2l0aCBpbnB1dCByb3VuZGluZy4KK2Rxc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKK2Rxc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKK2Rxc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcKK2Rxc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKK2Rxc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKK2Rxc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04JworZHFzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCitkcXN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKK2Rxc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04JworZHFzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCitkcXN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKK2Rxc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcKK2Rxc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKK2Rxc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKK2Rxc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcKK2Rxc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKK2Rxc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04JworZHFzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnCitkcXN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKK2Rxc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04JworZHFzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnCitkcXN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKK2Rxc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05JworZHFzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05JworZHFzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCitkcXN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCitkcXN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnCisKKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KK2Rxc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJworZHFzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJworZHFzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCitkcXN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJworZHFzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCitkcXN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3JworZHFzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJworZHFzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKK2Rxc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKK2Rxc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInCitkcXN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCitkcXN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCitkcXN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcKK2Rxc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJworZHFzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCistLSAwLiBvbiBsZWZ0CitkcXN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZHFzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkcXN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45JworZHFzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZHFzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rxc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK2Rxc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZHFzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZHFzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCitkcXN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkcXN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rxc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworZHFzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rxc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkcXN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworLS0gbmVnYXRpdmVzIG9mIHNhbWUKK2Rxc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZHFzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworZHFzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkcXN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZHFzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitkcXN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZHFzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZHFzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK2Rxc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rxc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkcXN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitkcXN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkcXN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rxc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworZHFzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCisKKy0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCitkcXN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnCitkcXN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCitkcXN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCitkcXN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycKK2Rxc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCitkcXN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCitkcXN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycKK2Rxc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCitkcXN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCitkcXN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnCitkcXN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKKy0tIHN5bW1ldHJ5IC4uLgorZHFzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCitkcXN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycKK2Rxc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZHFzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKK2Rxc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycKK2Rxc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3JworZHFzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKK2Rxc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2Rxc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZHFzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkcXN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZAorZHFzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkcXN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkcXN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rxc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3JworZHFzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCitkcXN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScKK2Rxc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rxc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKK2Rxc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcKK2Rxc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKKworLS0gaW50ZXJuYWwgYm91bmRhcmllcworZHFzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCitkcXN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCitkcXN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJworZHFzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCitkcXN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCitkcXN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJworZHFzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCitkcXN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCitkcXN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJworZHFzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCitkcXN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCitkcXN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorZHFzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5JworZHFzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCitkcXN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5JworZHFzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcXN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxCitkcXN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCitkcXN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKK2Rxc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMAorZHFzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKK2Rxc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCitkcXN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wCitkcXN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCisKKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQKK2Rxc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKK2Rxc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCisKK2Rxc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcXN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2Rxc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgUm91bmRlZAorZHFzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2Rxc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorZHFzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcXN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKKworLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkcXN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2Rxc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkcXN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkcXN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2Rxc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZHFzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkcXN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2Rxc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkcXN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZHFzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZHFzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2Rxc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2Rxc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZHFzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkcXN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkcXN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZHFzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkcXN1YjQwNyBzdWJ0cmFjdCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcXN1YjQwOCBzdWJ0cmFjdCAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKK2Rxc3ViNDA5IHN1YnRyYWN0ICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZAorZHFzdWI0MTAgc3VidHJhY3QgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCitkcXN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkcXN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCitkcXN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKK2Rxc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnCitkcXN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCitkcXN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCitkcXN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnCitkcXN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCitkcXN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKK2Rxc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJworZHFzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKK2Rxc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1JworZHFzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScKK2Rxc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKK2Rxc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKK2Rxc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnCitkcXN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKK2Rxc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKK2Rxc3ViNDM3IHN1YnRyYWN0IDAgICctNUUzMycgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcXN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMzQnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZAorZHFzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTM1JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKK2Rxc3ViNDQwIHN1YnRyYWN0IDAgICctNUUzNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcXN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkcXN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKK2Rxc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CitkcXN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JworZHFzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3JworZHFzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2JworZHFzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1JworZHFzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcXN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcXN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCistLSBzeW1tZXRyeS4uLgorcm91bmRpbmc6IGhhbGZfdXAKK2Rxc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rxc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZgorLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nCityb3VuZGluZzogaGFsZl91cAorZHFzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZHFzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZHFzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rxc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkcXN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkcXN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkcXN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZHFzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rxc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK2Rxc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkKK2Rxc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjEKK2Rxc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xCitkcXN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQorZHFzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rxc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rxc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkcXN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZHFzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworLS0gU3BlY2lhbHMKK2Rxc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkKKworZHFzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcXN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcXN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcXN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitkcXN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworZHFzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4KK2Rxc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFOCitkcXN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTgorZHFzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4KK2Rxc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFOCitkcXN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTgorZHFzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4KK2Rxc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFOCitkcXN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTgorZHFzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFOCitkcXN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4KK2Rxc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFOCisKK2Rxc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZHFzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rxc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitkcXN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZHFzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rxc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorZHFzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkcXN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rxc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK2Rxc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZWRnZSBjYXNlIHNwaWxscworZHFzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwCitkcXN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMAorZHFzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDAKK2Rxc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwCitkcXN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMAorZHFzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDAKK2Rxc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwCitkcXN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkcXN1YjExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2Rxc3ViMTEyNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorZHFzdWIxMTI3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCitkcXN1YjExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0gTnVsbCB0ZXN0cworZHFzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxVG9JbnRlZ3JhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxVG9JbnRlZ3JhbC5kZWNUZXN0CmluZGV4IGViMTIzODcuLjMwNTVkZTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QKQEAgLTEsMjU3ICsxLDI1NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHFUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgUXVhZCB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbA0KLS0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4NCi0tLSBBbGwgbm9uLXplcm8gcmVzdWx0cyBhcmUgZGVmaW5lZCBhcyBiZWluZyB0aG9zZSBmcm9tIGVpdGhlciBjb3B5IG9yDQotLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQgZXh0ZW5zaXZlbHkNCi0tLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuDQotLS0gQWxzbywgaXQgaXMgYXNzdW1lZCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwgdXNlIHRoZXNlIHRlc3RzIGZvciBib3RoDQotLS0gVG9JbnRlZ3JhbEV4YWN0ICh3aGljaCBkb2VzIHNldCBJbmV4YWN0KSBhbmQgdGhlIGZpeGVkLW5hbWUNCi0tLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuDQotDQotLS0gTm90ZSB0aGF0IGRlY051bWJlciBpbXBsZW1lbnRzIGFuIGVhcmxpZXIgZGVmaW5pdGlvbiBvZiB0b0ludGVncmFsDQotLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQNCi0tLSAndG9pbnRlZ3JhbCcgaW5zdGVhZCBvZiAndG9pbnRlZ3JhbHgnLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgMzQNCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1kcWludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMA0KLWRxaW50eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwDQotZHFpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDENCi1kcWludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZA0KLWRxaW50eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KLS0tIG5lZ2F0aXZlcw0KLWRxaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wDQotZHFpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTANCi1kcWludHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQ0KLWRxaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkDQotZHFpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApDQotZHFpbnR4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSs2MCAgLT4gMS4wRSs2MQ0KLWRxaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxDQotDQotLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uDQotZHFpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDYyIHRvaW50ZWdyYWx4ICc1NjI2N0UtMicgICAgLT4gJzU2MycgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3Jw0KLWRxaW50eDA2NiB0b2ludGVncmFseCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycNCi1kcWludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1Jw0KLWRxaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJw0KLWRxaW50eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzEwJyAgIC0+ICc1LjYyNjdFKzE0Jw0KLWRxaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1Jw0KLWRxaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2Jw0KLWRxaW50eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzEzJyAgIC0+ICc1LjYyNjdFKzE3Jw0KLWRxaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicNCi1kcWludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzYxNDQnICAtPiAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KLQ0KLWRxaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3Jw0KLWRxaW50eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnDQotZHFpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnDQotZHFpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJw0KLWRxaW50eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSsxMCcgIC0+ICctNS42MjY3RSsxNCcNCi1kcWludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnDQotZHFpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2Jw0KLWRxaW50eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSsxMycgIC0+ICctNS42MjY3RSsxNycNCi1kcWludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2Jw0KLWRxaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzYxNDQnIC0+ICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQotDQotLS0gc3Vibm9ybWFsIGlucHV0cw0KLWRxaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDANCi0NCi0tLSBzcGVjaWFscyBhbmQgemVyb3MNCi1kcWludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5DQotZHFpbnR4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQ0KLWRxaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFODQotZHFpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnR4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQotZHFpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wDQotZHFpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwDQotZHFpbnR4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwDQotZHFpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwDQotZHFpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQotZHFpbnR4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwDQotZHFpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwDQotZHFpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwDQotZHFpbnR4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwDQotZHFpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxDQotZHFpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyDQotZHFpbnR4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszDQotZHFpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0DQotZHFpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1DQotZHFpbnR4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wDQotZHFpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wDQotZHFpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wDQotZHFpbnR4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wDQotZHFpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wDQotZHFpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wDQotZHFpbnR4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wDQotZHFpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wDQotZHFpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxDQotZHFpbnR4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyDQotZHFpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszDQotZHFpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0DQotZHFpbnR4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1DQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4DQotZHFpbnR4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCi1kcWludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOA0KLWRxaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uDQotZHFpbnR4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4NCi1kcWludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGV4YW1wbGVzDQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1kcWludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwDQotZHFpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQNCi1kcWludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjA0IHRvaW50ZWdyYWx4ICAtMTAxLjUgICAgLT4gLTEwMiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNg0KLWRxaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3DQotZHFpbnR4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5DQotDQotDQotLS0gYWxsIHJvdW5kaW5nIG1vZGVzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLWRxaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotDQotZHFpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLQ0KLWRxaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICB1cA0KLQ0KLWRxaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBkb3duDQotDQotZHFpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0NCi1kcWludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgZmxvb3INCi0NCi1kcWludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1kcWludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KLWRxaW50eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQotZHFpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KLWRxaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYNCi1kcWludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3DQotZHFpbnR4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OA0KLWRxaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkNCi1kcWludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2DQotZHFpbnR4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0Nw0KLWRxaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgNCi1kcWludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5DQotZHFpbnR4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NA0KLWRxaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUNCi1kcWludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2DQotZHFpbnR4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5Nw0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgUXVhZCB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5CistLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuCistLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgKKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lCistLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuCisKKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbAorLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQKKy0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCitkcWludHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAorZHFpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDEKK2RxaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkCitkcWludHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2RxaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wCitkcWludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAorZHFpbnR4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2RxaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkCitkcWludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKK2RxaW50eDA1MyB0b2ludGVncmFseCAgICAxMEUrNjAgIC0+IDEuMEUrNjEKK2RxaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxCisKKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbgorZHFpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitkcWludHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitkcWludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworZHFpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnCitkcWludHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMCcgICAtPiAnNS42MjY3RSsxNCcKK2RxaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1JworZHFpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnCitkcWludHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMycgICAtPiAnNS42MjY3RSsxNycKK2RxaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicKK2RxaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrNjE0NCcgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCisKK2RxaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitkcWludHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworZHFpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitkcWludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnCitkcWludHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTAnICAtPiAnLTUuNjI2N0UrMTQnCitkcWludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnCitkcWludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnCitkcWludHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTMnICAtPiAnLTUuNjI2N0UrMTcnCitkcWludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworZHFpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrNjE0NCcgLT4gI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKKworLS0gc3Vibm9ybWFsIGlucHV0cworZHFpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2RxaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2RxaW50eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2RxaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCitkcWludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZHFpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkcWludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2RxaW50eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMAorZHFpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCitkcWludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RxaW50eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMAorZHFpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCitkcWludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2RxaW50eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMAorZHFpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCitkcWludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2RxaW50eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMworZHFpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0CitkcWludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2RxaW50eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMAorZHFpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCitkcWludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2RxaW50eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZHFpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCitkcWludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2RxaW50eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMAorZHFpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCitkcWludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2RxaW50eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMgorZHFpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCitkcWludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2RxaW50eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2RxaW50eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkcWludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOAorZHFpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitkcWludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAorZHFpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQKK2RxaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNgorZHFpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKK2RxaW50eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCitkcWludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworZHFpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKworZHFpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorCitkcWludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2RxaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2RxaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RxaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKK2RxaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2RxaW50eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgKK2RxaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKK2RxaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2RxaW50eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcKK2RxaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKK2RxaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2RxaW50eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQKK2RxaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKK2RxaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2RxaW50eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxWG9yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdAppbmRleCBmYmIzMmU0Li4yMjE2ZTllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdApAQCAtMSw0MTAgKzEsNDEwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkcVhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1jbGFtcDogICAgICAgMQ0KLXByZWNpc2lvbjogICAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotZHF4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotZHF4b3IwMDIgeG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxDQotZHF4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQotZHF4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwDQotZHF4b3IwMDUgeG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAgMTEwDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi1kcXhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotZHF4b3IwMDcgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi1kcXhvcjAxMCB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotZHF4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yMDEzIHhvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KLWRxeG9yNjAxIHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwMiB4b3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MDMgeG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjA0IHhvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwNSB4b3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MDYgeG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjA3IHhvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYwOCB4b3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MDkgeG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjEwIHhvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxMSB4b3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTIgeG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjEzIHhvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxNCB4b3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTUgeG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjE2IHhvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYxNyB4b3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MTggeG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjE5IHhvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjYyMCB4b3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwDQotZHF4b3I2MjEgeG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjIyIHhvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDANCi1kcXhvcjYyMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwDQotZHF4b3I2MjQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMA0KLWRxeG9yNjI1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDANCi1kcXhvcjYyNiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwDQotZHF4b3I2MjcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMA0KLWRxeG9yNjI4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDANCi1kcXhvcjYyOSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwDQotZHF4b3I2MzAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMA0KLWRxeG9yNjMxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDANCi1kcXhvcjYzMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwDQotZHF4b3I2MzMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMA0KLWRxeG9yNjM0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi0NCi1kcXhvcjY0MSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjQzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY0NCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjQ2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY0NyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NDggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjQ5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1MCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjUyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1MyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjU1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1NiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NTcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjU4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDANCi1kcXhvcjY1OSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwDQotZHF4b3I2NjAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMA0KLWRxeG9yNjYxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDANCi1kcXhvcjY2MiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwDQotZHF4b3I2NjMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMA0KLWRxeG9yNjY0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDANCi1kcXhvcjY2NSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwDQotZHF4b3I2NjYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMA0KLWRxeG9yNjY3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDANCi1kcXhvcjY2OCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwDQotZHF4b3I2NjkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMA0KLWRxeG9yNjcwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDANCi1kcXhvcjY3MSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwDQotZHF4b3I2NzIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMA0KLWRxeG9yNjczIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTANCi1kcXhvcjY3NCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotZHF4b3I2NzUgeG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KLWRxeG9yNjc2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCi0NCi0NCi1kcXhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyMiB4b3IgIDExMTExMTExMDAwMDAwMCAgICAgIDExMTExMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyMyB4b3IgICAxMTExMTExMDAwMDAwMCAgICAgICAxMTExMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyNSB4b3IgICAgIDExMTExMDAwMDAwMCAgICAgICAgIDExMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyNiB4b3IgICAgICAxMTExMDAwMDAwMCAgICAgICAgICAxMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyOCB4b3IgICAgICAgIDExMDAwMDAwMCAgICAgICAgICAgIDExMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAyOSB4b3IgICAgICAgICAxMDAwMDAwMCAgICAgICAgICAgICAxMDAwMDAwMCAgLT4gIDANCi1kcXhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDANCi1kcXhvcjAzMSB4b3IgICAgICAgICAgIDEwMDAwMCAgICAgICAgICAgICAgIDEwMDAwMCAgLT4gIDANCi1kcXhvcjAzMiB4b3IgICAgICAgICAgICAxMDAwMCAgICAgICAgICAgICAgICAxMDAwMCAgLT4gIDANCi1kcXhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDANCi1kcXhvcjAzNCB4b3IgICAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAgIDEwMCAgLT4gIDANCi1kcXhvcjAzNSB4b3IgICAgICAgICAgICAgICAxMCAgICAgICAgICAgICAgICAgICAxMCAgLT4gIDANCi1kcXhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDANCi0NCi1kcXhvcjA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTEwMDAwMDAwMDANCi1kcXhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDANCi1kcXhvcjA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDANCi1kcXhvcjA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDENCi1kcXhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTENCi1kcXhvcjA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTENCi1kcXhvcjA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTENCi1kcXhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTENCi1kcXhvcjA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTENCi1kcXhvcjA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDENCi0NCi1kcXhvcjA1MCB4b3IgMTExMTExMTExMSAgMSAgLT4gIDExMTExMTExMTANCi1kcXhvcjA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMA0KLWRxeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTANCi1kcXhvcjA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTANCi1kcXhvcjA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMA0KLWRxeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTANCi1kcXhvcjA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTANCi1kcXhvcjA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMA0KLWRxeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTANCi1kcXhvcjA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDANCi0NCi1kcXhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTENCi1kcXhvcjA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KLWRxeG9yMDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTENCi1kcXhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTENCi1kcXhvcjA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQ0KLWRxeG9yMDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTENCi1kcXhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTENCi1kcXhvcjA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQ0KLWRxeG9yMDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTENCi1kcXhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDENCi0NCi1kcXhvcjA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTANCi1kcXhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMA0KLWRxeG9yMDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTANCi1kcXhvcjA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTANCi1kcXhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMA0KLWRxeG9yMDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTANCi1kcXhvcjA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTANCi1kcXhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMA0KLWRxeG9yMDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTANCi1kcXhvcjA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDANCi0NCi1kcXhvcjA4MCB4b3IgMCAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTENCi1kcXhvcjA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLWRxeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTENCi1kcXhvcjA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTENCi1kcXhvcjA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQ0KLWRxeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTENCi1kcXhvcjA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTENCi1kcXhvcjA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQ0KLWRxeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTENCi1kcXhvcjA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDENCi0NCi1kcXhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDANCi1kcXhvcjA5MSB4b3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAgMTAwMTAwMDANCi1kcXhvcjA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDANCi1kcXhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDANCi1kcXhvcjA5NCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDANCi1kcXhvcjA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDANCi1kcXhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDANCi1kcXhvcjA5NyB4b3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAgICAgMTAwMTANCi1kcXhvcjA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDENCi0NCi1kcXhvcjEwMCB4b3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMDAwMTAwMDANCi1kcXhvcjEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDANCi1kcXhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDANCi1kcXhvcjEwMyB4b3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAgICAxMTAwMDANCi1kcXhvcjEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDANCi1kcXhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDANCi1kcXhvcjEwNiB4b3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAgICAgMTAxMDANCi1kcXhvcjEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTANCi1kcXhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDENCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1kcXhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyMSB4b3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyNCB4b3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyNyB4b3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIzMCB4b3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotZHF4b3IyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNDIgeG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1kcXhvcjI1MCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTEgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjUyIHhvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1MyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTQgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjU1IHhvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1NiB4b3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNTcgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjU4IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI1OSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNjAgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjYxIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI2MiB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNjMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjY0IHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI2NSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QtMQ0KLWRxeG9yMjcwIHhvciAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI3MSB4b3IgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNzIgeG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjczIHhvciAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI3NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyNzUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjc2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI3NyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1kcXhvcjI4MCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODEgeG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjgyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI4MyB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjg1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI4NiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyODcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTWlkZGllDQotZHF4b3IyODggeG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjg5IHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5MCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTEgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjkyIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5MyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjk1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBzaWducw0KLWRxeG9yMjk2IHhvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IyOTcgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjI5OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMjk5IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMTAwMTAwMTAwMTAwMTAwMTAwMDAxMDAwMDEwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCi1kcXhvcjMzMSB4b3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjgyMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjMzNCB4b3IgIDUgICAxRS05MDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzM1IHhvciAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjMzNyB4b3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0MiB4b3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNDQgeG9yICAxRS05MDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0NSB4b3IgIC0xRS05MDcgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM0OCB4b3IgIC05Ljk5OTk5OTk5RSsyOTkxICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWRxeG9yMzYxIHhvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzY0IHhvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzcxIHhvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yMzc0IHhvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3IzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1kcXhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yNzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXhvcjgwMCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwMyB4b3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwNiB4b3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgwOSB4b3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgxMiB4b3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgxNSB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWRxeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MjIgeG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MjUgeG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MjggeG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzEgeG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzQgeG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4MzcgeG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1kcXhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWRxeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NjIgeG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NjUgeG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NjggeG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzIgeG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzUgeG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4NzggeG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4ODEgeG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWRxeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZHF4b3I4ODQgeG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1kcXhvcjg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFYb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZHF4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkcXhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2RxeG9yMDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQorZHF4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwCitkcXhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkcXhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkcXhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMDggeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDExIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXhvcjYwMSB4b3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwMiB4b3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwMyB4b3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNCB4b3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNSB4b3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNiB4b3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNyB4b3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwOCB4b3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwOSB4b3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMCB4b3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMSB4b3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMiB4b3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMyB4b3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNCB4b3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNSB4b3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNiB4b3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNyB4b3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxOCB4b3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxOSB4b3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYyMCB4b3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwCitkcXhvcjYyMSB4b3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwCitkcXhvcjYyMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwCitkcXhvcjYyMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwCitkcXhvcjYyNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwCitkcXhvcjYyNSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwCitkcXhvcjYyNiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwCitkcXhvcjYyNyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwCitkcXhvcjYyOCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwCitkcXhvcjYyOSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwCitkcXhvcjYzMCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwCitkcXhvcjYzMSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCitkcXhvcjYzMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCitkcXhvcjYzMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCitkcXhvcjYzNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKK2RxeG9yNjQxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjYwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjYxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAKK2RxeG9yNjYyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAKK2RxeG9yNjYzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAKK2RxeG9yNjY0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAKK2RxeG9yNjY1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAKK2RxeG9yNjY2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAKK2RxeG9yNjY3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAKK2RxeG9yNjY4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAKK2RxeG9yNjY5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAKK2RxeG9yNjcwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKK2RxeG9yNjcxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKK2RxeG9yNjcyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKK2RxeG9yNjczIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKK2RxeG9yNjc0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2RxeG9yNjc1IHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxeG9yNjc2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworCitkcXhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKK2RxeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAorZHF4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCitkcXhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKK2RxeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAorZHF4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCitkcXhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKKworZHF4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCitkcXhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKK2RxeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAorZHF4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCitkcXhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKK2RxeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQorZHF4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitkcXhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK2RxeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorZHF4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK2RxeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAorZHF4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK2RxeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKK2RxeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAorZHF4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK2RxeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKK2RxeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAorZHF4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK2RxeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKK2RxeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAorCitkcXhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKK2RxeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitkcXhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitkcXhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK2RxeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitkcXhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitkcXhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK2RxeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCitkcXhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCitkcXhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworZHF4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCitkcXhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorZHF4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAorZHF4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCitkcXhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAorZHF4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAorZHF4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCitkcXhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAorZHF4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAorZHF4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK2RxeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQorZHF4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2RxeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKK2RxeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQorZHF4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK2RxeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKK2RxeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQorZHF4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK2RxeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKK2RxeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQorCitkcXhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK2RxeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAorZHF4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCitkcXhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK2RxeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAorZHF4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCitkcXhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK2RxeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAorZHF4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCisKK2RxeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAorZHF4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCitkcXhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKK2RxeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAorZHF4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkcXhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKK2RxeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAorZHF4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCitkcXhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcXhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RxeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHF4b3IyNTAgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTEgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTIgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTMgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTQgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTUgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTYgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTcgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTggeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjAgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjEgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjQgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjUgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZHF4b3IyNzAgeG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzEgeG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzIgeG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzMgeG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RxeG9yMjgwIHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgxIHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgzIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg3IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkcXhvcjI4OCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI4OSB4b3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZHF4b3IyOTYgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk3IHhvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyOTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMDAxMDAxMDAxMDAxMDAxMDAwMDEwMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RxeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjgyMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM0IHhvciAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzNSB4b3IgIDYgICAtMUUtOTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDQgeG9yICAxRS05MDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ1IHhvciAgLTFFLTkwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OTEgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHF4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcXhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0Jhc2UuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0Jhc2UuZGVjVGVzdAppbmRleCA4YWM0NWZjLi41ZTVlNWE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0CkBAIC0xLDEwNjIgKzEsMTA2MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZHNCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNTaW5nbGUgPC0tPiBzdHJpbmcgY29udmVyc2lvbnMgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXINCi0tLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQ0KLQ0KLS0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nDQotLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbA0KLS0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQ0KLS0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQ0KLS0tIHJlcHJlc2VudGVkIGluIGEgZGVjU2luZ2xlLiAgU29tZSB0ZXN0Y2FzZXMgZ28gdG8gdGhlIGxpbWl0IG9mIHRoZQ0KLS0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8NCi0tLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4NCi0NCi1leHRlbmRlZDogICAgMQ0KLWNsYW1wOiAgICAgICAxDQotcHJlY2lzaW9uOiAgIDcNCi1tYXhFeHBvbmVudDogOTYNCi1taW5FeHBvbmVudDogLTk1DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLWRzYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMA0KLWRzYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQ0KLWRzYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wDQotZHNiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwDQotZHNiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMA0KLWRzYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMA0KLWRzYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMA0KLWRzYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQ0KLWRzYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNA0KLWRzYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQ0KLWRzYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNg0KLWRzYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQ0KLWRzYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMA0KLWRzYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNA0KLWRzYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMw0KLWRzYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMg0KLWRzYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMA0KLWRzYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wDQotZHNiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwDQotDQotZHNiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xDQotZHNiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjANCi1kc2JhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQ0KLWRzYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xDQotZHNiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQ0KLWRzYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQ0KLWRzYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQ0KLQ0KLWRzYmFzMDMwIHRvU2NpICAnMTIzNC41NjcnICAgLT4gJzEyMzQuNTY3Jw0KLWRzYmFzMDMxIHRvU2NpICAnMTIzNC4wMDAnICAgLT4gJzEyMzQuMDAwJw0KLWRzYmFzMDMyIHRvU2NpICAgJzEyMzQ5MTInICAgLT4gJzEyMzQ5MTInDQotZHNiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2NycgICAtPiAnMC4wMDAwMTIzNDU2NycNCi1kc2JhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAwMTIzNDU2NycNCi1kc2JhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3JyAgIC0+ICcxLjIzNDU2N0UtNycNCi1kc2JhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2NycgIC0+ICcxLjIzNDU2N0UtOCcNCi0NCi1kc2JhczAzNyB0b1NjaSAnMC4xMjM0NTY0JyAgIC0+ICcwLjEyMzQ1NjQnDQotZHNiYXMwMzggdG9TY2kgJzAuMTIzNDU2NScgICAtPiAnMC4xMjM0NTY1Jw0KLQ0KLS0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpDQotZHNic24wMDEgdG9TY2kgLTkuOTk5OTk5RSs5NiAtPiAtOS45OTk5OTlFKzk2DQotZHNic24wMDIgdG9TY2kgLTFFLTk1IC0+IC0xRS05NQ0KLWRzYnNuMDAzIHRvU2NpIC0xRS0xMDEgLT4gLTFFLTEwMSBTdWJub3JtYWwNCi1kc2JzbjAwNCB0b1NjaSAtMCAtPiAtMA0KLWRzYnNuMDA1IHRvU2NpICswIC0+ICAwDQotZHNic24wMDYgdG9TY2kgKzFFLTEwMSAtPiAgMUUtMTAxIFN1Ym5vcm1hbA0KLWRzYnNuMDA3IHRvU2NpICsxRS05NSAtPiAgMUUtOTUNCi1kc2JzbjAwOCB0b1NjaSArOS45OTk5OTlFKzk2IC0+ICA5Ljk5OTk5OUUrOTYNCi0NCi0tLSBTdHJpbmcgW21hbnkgbW9yZSBleGFtcGxlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgZWxzZXdoZXJlXQ0KLS0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdA0KLWRzYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicNCi1kc2JhczA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2Jw0KLWRzYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicNCi1kc2JhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnDQotZHNiYXMwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2Jw0KLWRzYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycNCi1kc2JhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnDQotZHNiYXMwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScNCi1kc2JhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnDQotZHNiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0Jw0KLWRzYmFzMDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScNCi1kc2JhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1Jw0KLWRzYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1Jw0KLWRzYmFzMDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcNCi1kc2JhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03Jw0KLWRzYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnDQotZHNiYXMwNTYgdG9TY2kgIjEyNjc4LjU0IiAtPiAnMTI2NzguNTQnDQotZHNiYXMwNTcgdG9TY2kgIjI2NzguNTQzIiAtPiAnMjY3OC41NDMnDQotZHNiYXMwNTggdG9TY2kgIjM0NTY3OC41IiAtPiAnMzQ1Njc4LjUnDQotZHNiYXMwNTkgdG9TY2kgIjA2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KLWRzYmFzMDYwIHRvU2NpICI2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KLWRzYmFzMDYxIHRvU2NpICIrNjc4LjU0MzIiIC0+ICc2NzguNTQzMicNCi1kc2JhczA2MiB0b1NjaSAiKzA2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KLWRzYmFzMDYzIHRvU2NpICIrMDA2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KLWRzYmFzMDY0IHRvU2NpICItNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJw0KLWRzYmFzMDY1IHRvU2NpICItMDY3OC41NDMyIiAgLT4gJy02NzguNTQzMicNCi1kc2JhczA2NiB0b1NjaSAiLTAwNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJw0KLS0tIGV4YW1wbGVzDQotZHNiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnDQotZHNiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJw0KLWRzYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnDQotDQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0NCi0NCi0tLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMNCi1kc2JhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYgIC0+IDAuMTIzNDU2OCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYgIC0+IDEuMjM0NTY4IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NiAgLT4gMTIuMzQ1NjggSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2ICAtPiAxMjMuNDU2OCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYgIC0+IDEyMzQuNTY4IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NiAgLT4gMTIzNDUuNjggSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2ICAtPiAxMjM0NTYuOCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYgIC0+IDEyMzQ1NjggIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzcgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2ICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NiAgLT4gMS4yMzQ1NjhFKzEwIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NiAgLT4gMS4yMzQ1NjhFKzExIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NiAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NiAgLT4gMS4yMzQ1NjhFKzEzIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNiAgLT4gMS4yMzQ1NjhFKzE0IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LiAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2ICAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE51bWJlcnMgd2l0aCBFDQotZHNiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcNCi1kc2JhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcNCi1kc2JhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnDQotZHNiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnDQotZHNiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcNCi1kc2JhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcNCi1kc2JhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnDQotZHNiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnDQotZHNiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknDQotZHNiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5Jw0KLWRzYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KLWRzYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5Jw0KLWRzYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcNCi1kc2JhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScNCi1kc2JhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScNCi1kc2JhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScNCi1kc2JhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScNCi1kc2JhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnDQotZHNiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknDQotZHNiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknDQotZHNiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknDQotZHNiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknDQotZHNiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJw0KLWRzYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5Jw0KLWRzYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5Jw0KLWRzYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcNCi1kc2JhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KLWRzYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5Jw0KLWRzYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJw0KLWRzYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnDQotZHNiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknDQotZHNiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknDQotZHNiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnDQotZHNiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnDQotZHNiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnDQotZHNiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnDQotZHNiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJw0KLWRzYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScNCi1kc2JhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInDQotZHNiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJw0KLQ0KLWRzYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScNCi1kc2JhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJw0KLWRzYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcNCi1kc2JhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1Jw0KLWRzYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScNCi1kc2JhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScNCi1kc2JhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1Jw0KLWRzYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScNCi1kc2JhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnDQotZHNiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41Jw0KLWRzYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1Jw0KLWRzYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcNCi1kc2JhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnDQotZHNiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcNCi0NCi1kc2JhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnDQotZHNiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScNCi1kc2JhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnDQotZHNiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1Jw0KLWRzYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1Jw0KLWRzYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnDQotZHNiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1Jw0KLWRzYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScNCi1kc2JhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnDQotZHNiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnDQotZHNiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0Jw0KLWRzYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScNCi1kc2JhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknDQotZHNiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScNCi0NCi1kc2JhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnDQotZHNiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcNCi1kc2JhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnDQotZHNiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnDQotZHNiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScNCi1kc2JhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnDQotZHNiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1Jw0KLWRzYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScNCi1kc2JhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScNCi1kc2JhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnDQotZHNiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1Jw0KLWRzYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicNCi1kc2JhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJw0KLWRzYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInDQotDQotZHNiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScNCi1kc2JhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnDQotZHNiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScNCi1kc2JhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnDQotZHNiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnDQotZHNiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnDQotZHNiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnDQotZHNiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScNCi1kc2JhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcNCi1kc2JhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScNCi1kc2JhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicNCi1kc2JhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycNCi1kc2JhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnDQotZHNiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJw0KLQ0KLWRzYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1Jw0KLWRzYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJw0KLWRzYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknDQotZHNiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1Jw0KLWRzYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1Jw0KLWRzYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnDQotZHNiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1Jw0KLWRzYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1Jw0KLWRzYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnDQotZHNiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScNCi1kc2JhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41Jw0KLWRzYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScNCi1kc2JhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3Jw0KLWRzYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5Jw0KLQ0KLS0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10NCi1kc2JhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnDQotZHNiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcNCi1kc2JhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcNCi1kc2JhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03Jw0KLWRzYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcNCi1kc2JhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJw0KLWRzYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJw0KLWRzYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcNCi1kc2JhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJw0KLWRzYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJw0KLQ0KLS0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzDQotZHNiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzDQotZHNiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTINCi1kc2JhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTINCi1kc2JhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTINCi1kc2JhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTENCi1kc2JhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQ0KLWRzYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMA0KLWRzYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkNCi1kc2JhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQ0KLWRzYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5DQotZHNiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgNCi1kc2JhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNg0KLWRzYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3DQotZHNiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNg0KLWRzYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2DQotZHNiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYNCi1kc2JhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQ0KLWRzYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszDQotZHNiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQNCi1kc2JhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszDQotZHNiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMNCi1kc2JhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMw0KLWRzYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyDQotZHNiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDANCi1kc2JhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwDQotZHNiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMA0KLWRzYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wDQotZHNiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjANCi1kc2JhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTANCi1kc2JhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTANCi1kc2JhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwDQotZHNiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMA0KLWRzYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwDQotZHNiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTANCi1kc2JhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTANCi1kc2JhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTANCi1kc2JhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwDQotZHNiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMA0KLWRzYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwDQotZHNiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTANCi1kc2JhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNw0KLWRzYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05DQotZHNiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgNCi1kc2JhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05DQotZHNiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkNCi1kc2JhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQ0KLWRzYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMA0KLWRzYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMg0KLWRzYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQ0KLWRzYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyDQotZHNiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyDQotZHNiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyDQotDQotZHNiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyDQotZHNiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyDQotZHNiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExDQotZHNiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQ0KLWRzYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMA0KLWRzYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQ0KLWRzYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5DQotZHNiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkNCi1kc2JhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOA0KLWRzYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYNCi1kc2JhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNw0KLWRzYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNg0KLWRzYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2DQotZHNiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYNCi1kc2JhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQ0KLWRzYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMNCi1kc2JhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNA0KLWRzYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMw0KLWRzYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszDQotZHNiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMNCi1kc2JhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMg0KLWRzYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDANCi1kc2JhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQ0KLWRzYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MA0KLWRzYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3DQotZHNiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcNCi1kc2JhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43DQotZHNiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNw0KLWRzYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3DQotZHNiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcNCi1kc2JhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcNCi1kc2JhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcNCi1kc2JhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3DQotZHNiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNw0KLWRzYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3DQotZHNiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcNCi1kc2JhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcNCi1kc2JhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcNCi1kc2JhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNw0KLWRzYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkNCi1kc2JhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOA0KLWRzYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQ0KLWRzYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05DQotZHNiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkNCi1kc2JhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTANCi1kc2JhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMg0KLWRzYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQ0KLWRzYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTINCi1kc2JhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTINCi1kc2JhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTINCi1kc2JhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMNCi1kc2JhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQ0KLQ0KLS0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uDQotZHNiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDANCi1kc2JhczQyMiAgdG9TY2kgICAxMDAwIC0+IDEwMDANCi1kc2JhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQ0KLWRzYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wDQotZHNiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjENCi1kc2JhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDANCi1kc2JhczQzMiAgdG9TY2kgMTAwMCAgICAgICAgLT4gMTAwMA0KLWRzYmFzNDM0ICB0b1NjaSAxMDAwMCAgICAgICAtPiAxMDAwMA0KLWRzYmFzNDM2ICB0b1NjaSAxMDAwMDAgICAgICAtPiAxMDAwMDANCi1kc2JhczQzOCAgdG9TY2kgMTAwMDAwMCAgICAgLT4gMTAwMDAwMA0KLWRzYmFzNDQwICB0b1NjaSAxMDAwMDAwMCAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQNCi1kc2JhczQ0MiAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkDQotZHNiYXM0NDQgIHRvU2NpIDEwMDAwMDAzICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NDYgIHRvU2NpIDEwMDAwMDA1ICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NDggIHRvU2NpIDEwMDAwMDA1MCAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NTAgIHRvU2NpIDEwMDAwMDA5ICAgIC0+IDEuMDAwMDAxRSs3ICAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMCAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZA0KLWRzYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDMgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDUgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDU4ICB0b1NjaSAxMDAwMDAwMDkgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdA0KLWRzYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQNCi1kc2JhczQ2MiAgdG9TY2kgMTAwMDAwMDMwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ2NCAgdG9TY2kgMTAwMDAwMDUwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ2NiAgdG9TY2kgMTAwMDAwMDkwMCAgLT4gMS4wMDAwMDFFKzkgICBSb3VuZGVkIEluZXhhY3QNCi1kc2JhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkDQotZHNiYXM0NzAgIHRvU2NpIDEwMDAwMDAzMDAwIC0+IDEuMDAwMDAwRSsxMCAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NzIgIHRvU2NpIDEwMDAwMDA1MDAwIC0+IDEuMDAwMDAwRSsxMCAgUm91bmRlZCBJbmV4YWN0DQotZHNiYXM0NzQgIHRvU2NpIDEwMDAwMDA5MDAwIC0+IDEuMDAwMDAxRSsxMCAgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZHNic3I0MDEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I0MDIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQwMyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDA0ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRzYnNyNDA1ICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDA2ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MDcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQwOCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kc2JzcjQxMCAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjQxMSAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDEyICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MTMgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRzYnNyNDE1ICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDE2ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MTcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQxOCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDE5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kc2JzcjQyMSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjQyMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDIzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MjQgIHRvU2NpICAxLjExMjM0NjUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQyNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRzYnNyNDI2ICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDI3ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MjggIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQyOSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRzYnNyNDMxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNDMyICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I0MzMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjQzNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNDM1ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotLS0gbmVnYXRpdmVzDQotcm91bmRpbmc6ICBjZWlsaW5nDQotZHNic3I1MDEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQotZHNic3I1MDIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUwMyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTA0ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICB1cA0KLWRzYnNyNTA1ICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTA2ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MDcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUwOCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZmxvb3INCi1kc2JzcjUxMCAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjUxMSAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTEyICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MTMgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogIGhhbGZfZG93bg0KLWRzYnNyNTE1ICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTE2ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MTcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUxOCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTE5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1kc2JzcjUyMSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQNCi1kc2JzcjUyMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTIzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MjQgIHRvU2NpIC0xLjExMjM0NjUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUyNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgZG93bg0KLWRzYnNyNTI2ICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTI3ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MjggIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUyOSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KLXJvdW5kaW5nOiAgaGFsZl91cA0KLWRzYnNyNTMxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KLWRzYnNyNTMyICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQotZHNic3I1MzMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCi1kc2JzcjUzNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KLWRzYnNyNTM1ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzDQotZHNiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQotLS0gTmVhci1zcGVjaWFscw0KLWRzYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscw0KLWRzYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kc2JhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQotZHNiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLS0tIFplcm9zDQotZHNiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQ0KLWRzYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgNCi1kc2JhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03DQotZHNiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kc2JhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwDQotZHNiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZHNiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCi1kc2JhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwDQotZHNiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHNiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHNiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMA0KLWRzYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kc2JhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMA0KLWRzYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjANCi1kc2JhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRzYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KLWRzYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDANCi1kc2JhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRzYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KLWRzYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03DQotZHNiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgNCi1kc2JhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRzYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCi1kc2JhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjANCi1kc2JhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZHNiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQ0KLWRzYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzINCi1kc2JhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszDQotZHNiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNA0KLWRzYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUNCi1kc2JhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQotZHNiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNw0KLQ0KLWRzYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRzYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDANCi1kc2JhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxDQotZHNiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMg0KLWRzYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kc2JhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0DQotZHNiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQ0KLWRzYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYNCi1kc2JhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3DQotZHNiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOA0KLQ0KLWRzYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDANCi1kc2JhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxDQotZHNiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMg0KLWRzYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kc2JhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0DQotZHNiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQ0KLWRzYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYNCi1kc2JhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3DQotZHNiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOA0KLWRzYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCi0NCi1kc2JhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjANCi1kc2JhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZHNiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCi1kc2JhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDANCi1kc2JhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZHNiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCi1kc2JhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03DQotZHNiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOA0KLWRzYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kc2JhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMA0KLQ0KLWRzYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kc2JhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KLWRzYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMA0KLWRzYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2JhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KLWRzYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcNCi1kc2JhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04DQotZHNiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRzYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwDQotZHNiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTENCi0NCi1kc2JhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRzYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwDQotZHNiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDANCi1kc2JhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMA0KLWRzYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwDQotZHNiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDANCi1kc2JhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMA0KLWRzYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wDQotZHNiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDANCi1kc2JhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMA0KLQ0KLS0tIFNwZWNpYWxzDQotZHNiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFODQotZHNiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRzYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4NCi1kc2JhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFODQotZHNiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTg0KLWRzYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTg0KLWRzYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjENCi1kc2JhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMg0KLWRzYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMw0KLWRzYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQNCi1kc2JhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xDQotZHNiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTINCi1kc2JhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMNCi1kc2JhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0DQotZHNiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQ0KLWRzYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyDQotZHNiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzDQotZHNiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNA0KLWRzYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi1kc2JhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCi0NCi1kc2JhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4NCi1kc2JhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4NCi1kc2JhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFODQotZHNiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFODQotZHNiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4NCi1kc2Jhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTg0KLWRzYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFODQotZHNiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTg0KLWRzYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43DQotZHNiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQNCi1kc2Jhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLWRzYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KLQ0KLWRzYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi1kc2Jhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCi1kc2Jhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5DQotZHNiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZHNiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQotZHNiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5DQotZHNiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5DQotDQotLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZw0KLWRzYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkNCi1kc2Jhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFODQotZHNiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFODQotZHNiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTg0KLWRzYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFODQotZHNiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KLWRzYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTg0KLQ0KLS0tIFplcm8gdG9FbmcsIGV0Yy4NCi1kc2Jhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQ0KLQ0KLWRzYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQotZHNiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYNCi1kc2Jhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02DQotZHNiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHNiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2Jhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQotZHNiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwDQotZHNiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCi1kc2Jhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQotZHNiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KLWRzYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwDQotZHNiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCi1kc2Jhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTANCi1kc2Jhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KLWRzYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KLWRzYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDANCi1kc2Jhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KLWRzYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KLWRzYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDANCi1kc2Jhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNg0KLWRzYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNg0KLWRzYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KLQ0KLWRzYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwDQotZHNiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KLWRzYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwDQotZHNiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMNCi1kc2Jhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszDQotZHNiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCi1kc2Jhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNg0KLWRzYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYNCi1kc2Jhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNg0KLWRzYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5DQotDQotZHNiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KLWRzYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwDQotZHNiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kc2Jhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszDQotZHNiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCi1kc2Jhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRzYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYNCi1kc2Jhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KLWRzYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5DQotZHNiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQ0KLQ0KLWRzYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwDQotZHNiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMNCi1kc2Jhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszDQotZHNiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCi1kc2Jhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNg0KLWRzYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYNCi1kc2Jhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KLWRzYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5DQotZHNiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQ0KLWRzYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5DQotDQotZHNiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KLWRzYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQotZHNiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwDQotZHNiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KLWRzYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQotZHNiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwDQotZHNiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNg0KLWRzYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02DQotZHNiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCi1kc2Jhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05DQotDQotZHNiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCi1kc2Jhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDANCi1kc2Jhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQotZHNiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCi1kc2Jhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDANCi1kc2Jhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02DQotZHNiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYNCi1kc2Jhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KLWRzYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkNCi1kc2Jhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQ0KLQ0KLS0tIGxvbmcgaW5wdXQgc3RyaW5ncw0KLWRzYmFzODAxIHRvc2NpICAgICAgICAgICcwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODAyIHRvc2NpICAgICAgICAgJzAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODAzIHRvc2NpICAgICAgICAnMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA0IHRvc2NpICAgICAgICcwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA1IHRvc2NpICAgICAgJzAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA2IHRvc2NpICAgICAnMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA3IHRvc2NpICAgICcwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA4IHRvc2NpICAgJzAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODA5IHRvc2NpICAnMDAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLWRzYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2Nw0KLQ0KLWRzYmFzODExIHRvc2NpICAgICAgICAgICcwLjEyMzQ1NjcnIC0+ICAgICAgMC4xMjM0NTY3DQotZHNiYXM4MTIgdG9zY2kgICAgICAgICAnMC4wMTIzNDU2NycgLT4gICAgIDAuMDEyMzQ1NjcNCi1kc2JhczgxMyB0b3NjaSAgICAgICAgJzAuMDAxMjM0NTY3JyAtPiAgICAwLjAwMTIzNDU2Nw0KLWRzYmFzODE0IHRvc2NpICAgICAgICcwLjAwMDEyMzQ1NjcnIC0+ICAgMC4wMDAxMjM0NTY3DQotZHNiYXM4MTUgdG9zY2kgICAgICAnMC4wMDAwMTIzNDU2NycgLT4gIDAuMDAwMDEyMzQ1NjcNCi1kc2JhczgxNiB0b3NjaSAgICAgJzAuMDAwMDAxMjM0NTY3JyAtPiAwLjAwMDAwMTIzNDU2Nw0KLWRzYmFzODE3IHRvc2NpICAgICcwLjAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS03DQotZHNiYXM4MTggdG9zY2kgICAnMC4wMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTgNCi1kc2JhczgxOSB0b3NjaSAgJzAuMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtOQ0KLWRzYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS0xMA0KLQ0KLWRzYmFzODIxIHRvc2NpICcxMjM0NTY3OTAnICAgICAgICAgLT4gMS4yMzQ1NjhFKzggSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjIgdG9zY2kgJzEyMzQ1Njc5MDEnICAgICAgICAtPiAxLjIzNDU2OEUrOSAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjMgdG9zY2kgJzEyMzQ1Njc5MDEyJyAgICAgICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjQgdG9zY2kgJzEyMzQ1Njc5MDEyMycgICAgICAtPiAxLjIzNDU2OEUrMTEgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjUgdG9zY2kgJzEyMzQ1Njc5MDEyMzQnICAgICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjYgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1JyAgICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjcgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1NicgICAtPiAxLjIzNDU2OEUrMTQgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjggdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1NjcnICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTYnICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzDQotZHNiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTExIHRvU2NpICcxMGUtMTAwMDAwMDAwMCcgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MTQgdG9TY2kgJzExMWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotLS0gbmVnYXRpdmVzIHRoZSBzYW1lDQotZHNiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTIyIHRvU2NpICctMC4xZTEwMDAwMDAwMDAnICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMNCi1yb3VuZGluZzogIGNlaWxpbmcNCi1kc2JhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgdXANCi1kc2JhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTMzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBkb3duDQotZHNiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotZHNiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6ICBmbG9vcg0KLWRzYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLWRzYmFzOTM3IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICBoYWxmX3VwDQotZHNiYXM5MzggdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotZHNiYXM5NDAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2Jhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiAgaGFsZl9kb3duDQotZHNiYXM5NDIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCi1kc2Jhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuDQotDQotLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDANCi1kc2JlbTQwMCB0b1NjaSAgMS4wMDAwRS04NiAgICAgLT4gMS4wMDAwRS04Ng0KLWRzYmVtNDAxIHRvU2NpICAwLjFFLTk3ICAgICAgICAtPiAxRS05OCAgICAgICBTdWJub3JtYWwNCi1kc2JlbTQwMiB0b1NjaSAgMC4xMDAwRS05NyAgICAgLT4gMS4wMDBFLTk4ICAgU3Vibm9ybWFsDQotZHNiZW00MDMgdG9TY2kgIDAuMDEwMEUtOTcgICAgIC0+IDEuMDBFLTk5ICAgIFN1Ym5vcm1hbA0KLWRzYmVtNDA0IHRvU2NpICAwLjAwMTBFLTk3ICAgICAtPiAxLjBFLTEwMCAgICAgU3Vibm9ybWFsDQotZHNiZW00MDUgdG9TY2kgIDAuMDAwMUUtOTcgICAgIC0+IDFFLTEwMSAgICAgICBTdWJub3JtYWwNCi1kc2JlbTQwNiB0b1NjaSAgMC4wMDAxMEUtOTcgICAgLT4gMUUtMTAxICAgICBTdWJub3JtYWwgUm91bmRlZA0KLWRzYmVtNDA3IHRvU2NpICAwLjAwMDEzRS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MDggdG9TY2kgIDAuMDAwMTVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQwOSB0b1NjaSAgMC4wMDAxN0UtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDEwIHRvU2NpICAwLjAwMDIzRS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxMiB0b1NjaSAgMC4wMDAyN0UtOTcgICAgLT4gM0UtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtOTcgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTk3ICAgLT4gM0UtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDE5IHRvU2NpICAwLjAwMDA5RS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmVtNDIxIHRvU2NpICAwLjAwMDAzRS05NyAgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1kc2JlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDI2IHRvU2NpICAwLjAwMTA1MEUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS05NyAgIC0+IDEuMUUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTk3ICAgLT4gMS4xRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDI5IHRvU2NpICAwLjAwMTE1MEUtOTcgICAtPiAxLjJFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kc2JlbTQzMiB0b1NjaSAgMC4wMTAwNDlFLTk3ICAgLT4gMS4wMEUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQzNSB0b1NjaSAgMC4wMTAxNDlFLTk3ICAgLT4gMS4wMUUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtOTcgICAtPiAxLjAyRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kc2JlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTk3ICAgIC0+IDEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDQyIHRvU2NpICAwLjEwMTA3RS05NyAgICAtPiAxLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ0MyB0b1NjaSAgMC4xMDExM0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS05NyAgICAtPiAxLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1kc2JlbTQ1MCB0b1NjaSAgMS4xMDczMEUtOTggICAgLT4gMS4xMDdFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTEgdG9TY2kgIDEuMTA3NTBFLTk4ICAgIC0+IDEuMTA4RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDUyIHRvU2NpICAxLjEwNzcwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTQgdG9TY2kgIDEuMTA4NTBFLTk4ICAgIC0+IDEuMTA4RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDU1IHRvU2NpICAxLjEwODcwRS05OCAgICAtPiAxLjEwOUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBtYWtlIHN1cmUgc2lnbiBPSw0KLWRzYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtOTcgICAtPiAtMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS05NyAgIC0+IC0xLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTk3ICAgLT4gLTEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWRzYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZHNiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tICc5OTlzJyBjYXNlcw0KLWRzYmVtNDY0IHRvU2NpICA5OTk5OTlFLTk4ICAgICAgICAgLT4gOS45OTk5OUUtOTMNCi1kc2JlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtOTcgICAgICAgIC0+IDkuOTk5OTBFLTkzDQotZHNiZW00NjYgdG9TY2kgIDk5OTk5LkUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTkzDQotZHNiZW00NjcgdG9TY2kgIDk5OTkuOUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk0DQotZHNiZW00NjggdG9TY2kgIDk5OS45OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk1DQotZHNiZW00NjkgdG9TY2kgIDk5Ljk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk2IFN1Ym5vcm1hbA0KLWRzYmVtNDcwIHRvU2NpICA5Ljk5OTlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NyBTdWJub3JtYWwNCi1kc2JlbTQ3MSB0b1NjaSAgMC45OTk5OUUtOTcgICAgICAgIC0+IDEuMDAwMEUtOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTk3ICAgICAgIC0+IDEuMDAwRS05OCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ3MyB0b1NjaSAgMC4wMDk5OTk5RS05NyAgICAgIC0+IDEuMDBFLTk5ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtOTcgICAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1kc2JlbTQ3NiB0b1NjaSAgMC4wMDAwMDk5OTk5RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS05NyAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS05NyAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MNCi1kc2JhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZHNiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1kc2JhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzMTAwOCB0b1NjaSAgMWUtMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1kc2JhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWRzYmFzMTAxMSB0b1NjaSAgMWUtMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZHNiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KLWRzYmFzMTA0MSB0b1NjaSAgICAgMS4xMTUyNDQ0RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1kc2JhczEwNDIgdG9TY2kgICAgIDEuMTE1MjQ0NUUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZHNiYXMxMDQzIHRvU2NpICAgICAxLjExNTI0NDZFLTk2IC0+ICAxLjExNTI0RS05NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdDQotZHNiYXMxMDc1IHRvU2NpICAgMGUrMTAwMDAgIC0+ICAwRSs5MCAgIENsYW1wZWQNCi1kc2JhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTEwMSAgQ2xhbXBlZA0KLWRzYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrOTAgICBDbGFtcGVkDQotZHNiYXMxMDc4IHRvU2NpICAtMGUtMTAwMDAgIC0+IC0wRS0xMDEgIENsYW1wZWQNCi0NCi0tLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXINCi1kc2JhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWRzYmFzMTEwMiB0b1NjaSAtMUUtMzgzIC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRzYmFzMTEwMyB0b1NjaSAtMUUtMzk4IC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRzYmFzMTEwNCB0b1NjaSAtMCAtPiAtMA0KLWRzYmFzMTEwNSB0b1NjaSArMCAtPiAgMA0KLWRzYmFzMTEwNiB0b1NjaSArMUUtMzk4IC0+ICAwRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRzYmFzMTEwNyB0b1NjaSArMUUtMzgzIC0+ICAwRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWRzYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmFycm93aW5nIGNhc2UNCi1kc2JhczExMTAgdG9TY2kgMi4wMDAwMDAwMDAwMDAwMDBFLTk5IC0+IDIuMDBFLTk5IFJvdW5kZWQgU3Vibm9ybWFsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkc0Jhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1NpbmdsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pCisKKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsCistLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUKKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNTaW5nbGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvCistLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RzYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMAorZHNiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxCitkc2JhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMAorZHNiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitkc2JhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitkc2JhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDAKK2RzYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorZHNiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitkc2JhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQKK2RzYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorZHNiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42Citkc2JhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkKK2RzYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorZHNiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0Citkc2JhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMKK2RzYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorZHNiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitkc2JhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMAorZHNiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2RzYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQorZHNiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjAKK2RzYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitkc2JhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorZHNiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQorZHNiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5Citkc2JhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworZHNiYXMwMzAgdG9TY2kgICcxMjM0LjU2NycgICAtPiAnMTIzNC41NjcnCitkc2JhczAzMSB0b1NjaSAgJzEyMzQuMDAwJyAgIC0+ICcxMjM0LjAwMCcKK2RzYmFzMDMyIHRvU2NpICAgJzEyMzQ5MTInICAgLT4gJzEyMzQ5MTInCitkc2JhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAxMjM0NTY3JworZHNiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2NycgICAtPiAnMC4wMDAwMDEyMzQ1NjcnCitkc2JhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3JyAgIC0+ICcxLjIzNDU2N0UtNycKK2RzYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3JyAgLT4gJzEuMjM0NTY3RS04JworCitkc2JhczAzNyB0b1NjaSAnMC4xMjM0NTY0JyAgIC0+ICcwLjEyMzQ1NjQnCitkc2JhczAzOCB0b1NjaSAnMC4xMjM0NTY1JyAgIC0+ICcwLjEyMzQ1NjUnCisKKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpCitkc2JzbjAwMSB0b1NjaSAtOS45OTk5OTlFKzk2IC0+IC05Ljk5OTk5OUUrOTYKK2RzYnNuMDAyIHRvU2NpIC0xRS05NSAtPiAtMUUtOTUKK2RzYnNuMDAzIHRvU2NpIC0xRS0xMDEgLT4gLTFFLTEwMSBTdWJub3JtYWwKK2RzYnNuMDA0IHRvU2NpIC0wIC0+IC0wCitkc2JzbjAwNSB0b1NjaSArMCAtPiAgMAorZHNic24wMDYgdG9TY2kgKzFFLTEwMSAtPiAgMUUtMTAxIFN1Ym5vcm1hbAorZHNic24wMDcgdG9TY2kgKzFFLTk1IC0+ICAxRS05NQorZHNic24wMDggdG9TY2kgKzkuOTk5OTk5RSs5NiAtPiAgOS45OTk5OTlFKzk2CisKKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKK2RzYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKK2RzYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCitkc2JhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCitkc2JhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCitkc2JhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCitkc2JhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCitkc2JhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCitkc2JhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JworZHNiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JworZHNiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JworZHNiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JworZHNiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKK2RzYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JworZHNiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJworZHNiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKK2RzYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCitkc2JhczA1NiB0b1NjaSAiMTI2NzguNTQiIC0+ICcxMjY3OC41NCcKK2RzYmFzMDU3IHRvU2NpICIyNjc4LjU0MyIgLT4gJzI2NzguNTQzJworZHNiYXMwNTggdG9TY2kgIjM0NTY3OC41IiAtPiAnMzQ1Njc4LjUnCitkc2JhczA1OSB0b1NjaSAiMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInCitkc2JhczA2MCB0b1NjaSAiNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYxIHRvU2NpICIrNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYyIHRvU2NpICIrMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInCitkc2JhczA2MyB0b1NjaSAiKzAwNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDY0IHRvU2NpICItNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworZHNiYXMwNjUgdG9TY2kgIi0wNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworZHNiYXMwNjYgdG9TY2kgIi0wMDY3OC41NDMyIiAgLT4gJy02NzguNTQzMicKKy0tIGV4YW1wbGVzCitkc2JhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2RzYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2RzYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnCisKKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdCisKKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcworZHNiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkwMTIzNDU2ICAtPiAwLjEyMzQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYgIC0+IDEuMjM0NTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2ICAtPiAxMi4zNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MDEyMzQ1NiAgLT4gMTIzLjQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYgIC0+IDEyMzQuNTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2ICAtPiAxMjM0NS42OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MDEyMzQ1NiAgLT4gMTIzNDU2LjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYgIC0+IDEyMzQ1NjggIEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2ICAtPiAxLjIzNDU2OEUrNyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMDEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzggSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2ICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NiAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorZHNiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2ICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LiAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bWJlcnMgd2l0aCBFCitkc2JhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHNiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkc2JhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkc2JhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RzYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkc2JhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RzYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RzYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZHNiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkc2JhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkc2JhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RzYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZHNiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZHNiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkc2JhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RzYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkc2JhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkc2JhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RzYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZHNiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkc2JhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RzYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RzYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZHNiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkc2JhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkc2JhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHNiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkc2JhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RzYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkc2JhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RzYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZHNiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkc2JhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZHNiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkc2JhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkc2JhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkc2JhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkc2JhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RzYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RzYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkc2JhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkc2JhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZHNiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZHNiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkc2JhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZHNiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZHNiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZHNiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZHNiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkc2JhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkc2JhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkc2JhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkc2JhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkc2JhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZHNiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZHNiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZHNiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkc2JhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZHNiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZHNiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZHNiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZHNiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkc2JhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkc2JhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkc2JhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkc2JhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkc2JhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkc2JhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZHNiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZHNiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkc2JhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZHNiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZHNiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZHNiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZHNiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkc2JhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkc2JhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkc2JhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkc2JhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZHNiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZHNiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RzYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RzYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkc2JhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkc2JhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RzYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZHNiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkc2JhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZHNiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkc2JhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZHNiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkc2JhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkc2JhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCisKK2RzYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZHNiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkc2JhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZHNiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZHNiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkc2JhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZHNiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZHNiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkc2JhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZHNiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RzYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkc2JhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkc2JhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZHNiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RzYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RzYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkc2JhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RzYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkc2JhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkc2JhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZHNiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkc2JhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkc2JhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZHNiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkc2JhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RzYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkc2JhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RzYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZHNiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkc2JhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZHNiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkc2JhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5Citkc2JhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZHNiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RzYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4Citkc2JhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZHNiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RzYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RzYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2Citkc2JhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZHNiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RzYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkc2JhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZHNiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZHNiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RzYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkc2JhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZHNiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RzYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RzYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RzYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkc2JhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZHNiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkc2JhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RzYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RzYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RzYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkc2JhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZHNiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkc2JhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RzYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RzYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RzYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkc2JhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZHNiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RzYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05Citkc2JhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZHNiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZHNiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RzYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05Citkc2JhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RzYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZHNiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkc2JhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZHNiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkc2JhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZHNiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkc2JhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RzYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZHNiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZHNiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkc2JhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RzYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5Citkc2JhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZHNiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RzYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RzYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3Citkc2JhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RzYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2Citkc2JhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZHNiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RzYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RzYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0Citkc2JhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RzYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkc2JhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZHNiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RzYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RzYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkc2JhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RzYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3Citkc2JhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZHNiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZHNiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZHNiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RzYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3Citkc2JhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RzYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZHNiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZHNiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZHNiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RzYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3Citkc2JhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RzYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZHNiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RzYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RzYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04Citkc2JhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RzYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05Citkc2JhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZHNiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkc2JhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZHNiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkc2JhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkc2JhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RzYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZHNiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkc2JhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorZHNiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKK2RzYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZHNiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKK2RzYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkc2JhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZHNiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCitkc2JhczQzMiAgdG9TY2kgMTAwMCAgICAgICAgLT4gMTAwMAorZHNiYXM0MzQgIHRvU2NpIDEwMDAwICAgICAgIC0+IDEwMDAwCitkc2JhczQzNiAgdG9TY2kgMTAwMDAwICAgICAgLT4gMTAwMDAwCitkc2JhczQzOCAgdG9TY2kgMTAwMDAwMCAgICAgLT4gMTAwMDAwMAorZHNiYXM0NDAgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZAorZHNiYXM0NDIgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZAorZHNiYXM0NDQgIHRvU2NpIDEwMDAwMDAzICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ0NiAgdG9TY2kgMTAwMDAwMDUgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDQ4ICB0b1NjaSAxMDAwMDAwNTAgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTAgIHRvU2NpIDEwMDAwMDA5ICAgIC0+IDEuMDAwMDAxRSs3ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1MiAgdG9TY2kgMTAwMDAwMDAwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkCitkc2JhczQ1NCAgdG9TY2kgMTAwMDAwMDAzICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDUgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTggIHRvU2NpIDEwMDAwMDAwOSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkCitkc2JhczQ2MiAgdG9TY2kgMTAwMDAwMDMwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDY0ICB0b1NjaSAxMDAwMDAwNTAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NjYgIHRvU2NpIDEwMDAwMDA5MDAgIC0+IDEuMDAwMDAxRSs5ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkCitkc2JhczQ3MCAgdG9TY2kgMTAwMDAwMDMwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDcyICB0b1NjaSAxMDAwMDAwNTAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NzQgIHRvU2NpIDEwMDAwMDA5MDAwIC0+IDEuMDAwMDAxRSsxMCAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkc2JzcjQwMSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDAyICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwMyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MDQgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RzYnNyNDA1ICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MDYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDA3ICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwOCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHNic3I0MTAgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQxMSAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTIgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDEzICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHNic3I0MTUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQxNiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDE4ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxOSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYnNyNDIxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MjIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDIzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHNic3I0MjYgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQyNyAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjggIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDI5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RzYnNyNDMxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MzIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDMzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQzNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MzUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkc2JzcjUwMSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTAyICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwMyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MDQgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RzYnNyNTA1ICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MDYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTA3ICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwOCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHNic3I1MTAgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUxMSAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTIgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTEzICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHNic3I1MTUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUxNiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTE4ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxOSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYnNyNTIxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MjIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTIzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHNic3I1MjYgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUyNyAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjggIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTI5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RzYnNyNTMxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MzIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTMzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUzNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MzUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZHNiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkc2JhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZHNiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkc2JhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkc2JhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05Citkc2JhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04Citkc2JhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03Citkc2JhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkc2JhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHNiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2JhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RzYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkc2JhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkc2JhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHNiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkc2JhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkc2JhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHNiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkc2JhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZHNiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RzYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RzYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZHNiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHNiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZHNiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZHNiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZHNiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZHNiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZHNiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHNiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkc2JhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RzYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RzYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RzYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RzYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RzYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RzYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RzYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RzYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZHNiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHNiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZHNiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZHNiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHNiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZHNiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZHNiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZHNiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZHNiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZHNiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkc2JhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkc2JhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03Citkc2JhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04Citkc2JhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Citkc2JhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkc2JhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkc2JhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHNiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkc2JhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkc2JhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZHNiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZHNiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHNiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RzYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RzYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZHNiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RzYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkc2JhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkc2JhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkc2JhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkc2JhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0Citkc2JhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkc2JhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkc2JhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0Citkc2JhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkc2JhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkc2JhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0Citkc2JhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHNiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RzYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43Citkc2Jhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZHNiYXM3NDUgdG9TY2kgJ3NOYU43MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RzYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RzYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RzYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZHNiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkc2Jhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZHNiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZHNiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RzYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02Citkc2Jhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02Citkc2Jhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkc2Jhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkc2Jhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZHNiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZHNiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHNiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZHNiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RzYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHNiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZHNiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RzYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZHNiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RzYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHNiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RzYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RzYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkc2Jhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZHNiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZHNiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RzYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RzYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkc2Jhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZHNiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZHNiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RzYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2Citkc2Jhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2Citkc2Jhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHNiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RzYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZHNiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RzYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkc2Jhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkc2Jhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHNiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RzYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RzYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Citkc2Jhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZHNiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZHNiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZHNiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHNiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZHNiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Citkc2Jhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RzYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkc2Jhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RzYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02Citkc2Jhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHNiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZHNiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkc2JhczgwMSB0b3NjaSAgICAgICAgICAnMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODAyIHRvc2NpICAgICAgICAgJzAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDMgdG9zY2kgICAgICAgICcwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNCB0b3NjaSAgICAgICAnMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA1IHRvc2NpICAgICAgJzAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDYgdG9zY2kgICAgICcwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNyB0b3NjaSAgICAnMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA4IHRvc2NpICAgJzAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDkgdG9zY2kgICcwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKKworZHNiYXM4MTEgdG9zY2kgICAgICAgICAgJzAuMTIzNDU2NycgLT4gICAgICAwLjEyMzQ1NjcKK2RzYmFzODEyIHRvc2NpICAgICAgICAgJzAuMDEyMzQ1NjcnIC0+ICAgICAwLjAxMjM0NTY3Citkc2JhczgxMyB0b3NjaSAgICAgICAgJzAuMDAxMjM0NTY3JyAtPiAgICAwLjAwMTIzNDU2NworZHNiYXM4MTQgdG9zY2kgICAgICAgJzAuMDAwMTIzNDU2NycgLT4gICAwLjAwMDEyMzQ1NjcKK2RzYmFzODE1IHRvc2NpICAgICAgJzAuMDAwMDEyMzQ1NjcnIC0+ICAwLjAwMDAxMjM0NTY3Citkc2JhczgxNiB0b3NjaSAgICAgJzAuMDAwMDAxMjM0NTY3JyAtPiAwLjAwMDAwMTIzNDU2NworZHNiYXM4MTcgdG9zY2kgICAgJzAuMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTcKK2RzYmFzODE4IHRvc2NpICAgJzAuMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS04Citkc2JhczgxOSB0b3NjaSAgJzAuMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtOQorZHNiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTEwCisKK2RzYmFzODIxIHRvc2NpICcxMjM0NTY3OTAnICAgICAgICAgLT4gMS4yMzQ1NjhFKzggSW5leGFjdCBSb3VuZGVkCitkc2JhczgyMiB0b3NjaSAnMTIzNDU2NzkwMScgICAgICAgIC0+IDEuMjM0NTY4RSs5ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODIzIHRvc2NpICcxMjM0NTY3OTAxMicgICAgICAgLT4gMS4yMzQ1NjhFKzEwIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjQgdG9zY2kgJzEyMzQ1Njc5MDEyMycgICAgICAtPiAxLjIzNDU2OEUrMTEgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNSB0b3NjaSAnMTIzNDU2NzkwMTIzNCcgICAgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI2IHRvc2NpICcxMjM0NTY3OTAxMjM0NScgICAgLT4gMS4yMzQ1NjhFKzEzIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjcgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1NicgICAtPiAxLjIzNDU2OEUrMTQgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyOCB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2NycgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI5IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2JyAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MKK2RzYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcyB0aGUgc2FtZQorZHNiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICBjZWlsaW5nCitkc2JhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkc2JhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZHNiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZmxvb3IKK2RzYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkc2JhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkc2Jhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2Jhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RzYmVtNDAwIHRvU2NpICAxLjAwMDBFLTg2ICAgICAtPiAxLjAwMDBFLTg2Citkc2JlbTQwMSB0b1NjaSAgMC4xRS05NyAgICAgICAgLT4gMUUtOTggICAgICAgU3Vibm9ybWFsCitkc2JlbTQwMiB0b1NjaSAgMC4xMDAwRS05NyAgICAgLT4gMS4wMDBFLTk4ICAgU3Vibm9ybWFsCitkc2JlbTQwMyB0b1NjaSAgMC4wMTAwRS05NyAgICAgLT4gMS4wMEUtOTkgICAgU3Vibm9ybWFsCitkc2JlbTQwNCB0b1NjaSAgMC4wMDEwRS05NyAgICAgLT4gMS4wRS0xMDAgICAgIFN1Ym5vcm1hbAorZHNiZW00MDUgdG9TY2kgIDAuMDAwMUUtOTcgICAgIC0+IDFFLTEwMSAgICAgICBTdWJub3JtYWwKK2RzYmVtNDA2IHRvU2NpICAwLjAwMDEwRS05NyAgICAtPiAxRS0xMDEgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkc2JlbTQwNyB0b1NjaSAgMC4wMDAxM0UtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MDggdG9TY2kgIDAuMDAwMTVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDA5IHRvU2NpICAwLjAwMDE3RS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMCB0b1NjaSAgMC4wMDAyM0UtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEyIHRvU2NpICAwLjAwMDI3RS05NyAgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTk3ICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtOTcgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxOSB0b1NjaSAgMC4wMDAwOUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkc2JlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS05NyAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTk3ICAgLT4gMS4xRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtOTcgICAtPiAxLjJFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RzYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtOTcgICAtPiAxLjAyRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtOTcgICAtPiAxLjAyRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHNiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTk3ICAgIC0+IDEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTk3ICAgIC0+IDEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkc2JlbTQ1MCB0b1NjaSAgMS4xMDczMEUtOTggICAgLT4gMS4xMDdFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtOTggICAgLT4gMS4xMDlFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1ha2Ugc3VyZSBzaWduIE9LCitkc2JlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS05NyAgIC0+IC0xLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTk3ICAgLT4gLTEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtOTcgICAtPiAtMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tICc5OTlzJyBjYXNlcworZHNiZW00NjQgdG9TY2kgIDk5OTk5OUUtOTggICAgICAgICAtPiA5Ljk5OTk5RS05MworZHNiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTk3ICAgICAgICAtPiA5Ljk5OTkwRS05MworZHNiZW00NjYgdG9TY2kgIDk5OTk5LkUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTkzCitkc2JlbTQ2NyB0b1NjaSAgOTk5OS45RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTQKK2RzYmVtNDY4IHRvU2NpICA5OTkuOTlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NQorZHNiZW00NjkgdG9TY2kgIDk5Ljk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk2IFN1Ym5vcm1hbAorZHNiZW00NzAgdG9TY2kgIDkuOTk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk3IFN1Ym5vcm1hbAorZHNiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTk3ICAgICAgICAtPiAxLjAwMDBFLTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTk3ICAgICAgIC0+IDEuMDAwRS05OCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTk3ICAgICAgLT4gMS4wMEUtOTkgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTk3ICAgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtOTcgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS05NyAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCitkc2JhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtMTAxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkc2JhczEwNDEgdG9TY2kgICAgIDEuMTE1MjQ0NEUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Citkc2JhczEwNDIgdG9TY2kgICAgIDEuMTE1MjQ0NUUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Citkc2JhczEwNDMgdG9TY2kgICAgIDEuMTE1MjQ0NkUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdCitkc2JhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzkwICAgQ2xhbXBlZAorZHNiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS0xMDEgIENsYW1wZWQKK2RzYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrOTAgICBDbGFtcGVkCitkc2JhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTEwMSAgQ2xhbXBlZAorCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXIKK2RzYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczExMDIgdG9TY2kgLTFFLTM4MyAtPiAtMEUtMTAxIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RzYmFzMTEwMyB0b1NjaSAtMUUtMzk4IC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTA0IHRvU2NpIC0wIC0+IC0wCitkc2JhczExMDUgdG9TY2kgKzAgLT4gIDAKK2RzYmFzMTEwNiB0b1NjaSArMUUtMzk4IC0+ICAwRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTA3IHRvU2NpICsxRS0zODMgLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBuYXJyb3dpbmcgY2FzZQorZHNiYXMxMTEwIHRvU2NpIDIuMDAwMDAwMDAwMDAwMDAwRS05OSAtPiAyLjAwRS05OSBSb3VuZGVkIFN1Ym5vcm1hbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzRW5jb2RlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdAppbmRleCA3MjY0NzQ4Li44MTg1NzhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdApAQCAtMSwzNzIgKzEsMzcyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBkc0VuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZm91ci1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDMyLmRlY1Rlc3RdDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZm91ci1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLg0KLS0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOg0KLS0tDQotLS0gIDEgYml0ICBzaWduDQotLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZA0KLS0tICA2IGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uDQotLS0gMjAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24NCi0tLQ0KLS0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCA4IGJpdHMNCi0tLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMjQgYml0cyAoNyBkaWdpdHMpDQotLS0NCi0tLSBFbGltaXQgPSAgMTkxIChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpDQotLS0gRW1heCAgID0gICA5NiAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkNCi0tLSBFbWluICAgPSAgLTk1IChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkNCi0tLSBiaWFzICAgPSAgMTAxIChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkNCi0NCi0tLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQ0KLS0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnDQotLS0gdGVzdGNhc2UgZ3JvdXBzLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotY2xhbXA6ICAgICAgIDENCi1wcmVjaXNpb246ICAgNw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk2DQotbWluRXhwb25lbnQ6IC05NQ0KLQ0KLS0tIEdlbmVyYWwgdGVzdGNhc2VzDQotLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQ0KLWRlY3MwMDEgYXBwbHkgICAjQTIzMDAzRDAgICAgICAgICAgLT4gLTcuNTANCi1kZWNzMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgIC0+ICNBMjMwMDNEMA0KLS0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MNCi1kZWNzMDAzIGFwcGx5ICAgI0EyNjAwM0QwICAgICAgICAgLT4gLTcuNTBFKzMNCi1kZWNzMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyNjAwM0QwDQotZGVjczAwNSBhcHBseSAgICNBMjUwMDNEMCAgICAgICAgIC0+IC03NTANCi1kZWNzMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyNTAwM0QwDQotZGVjczAwNyBhcHBseSAgICNBMjQwMDNEMCAgICAgICAgIC0+IC03NS4wDQotZGVjczAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjQwMDNEMA0KLWRlY3MwMDkgYXBwbHkgICAjQTIyMDAzRDAgICAgICAgICAtPiAtMC43NTANCi1kZWNzMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMjAwM0QwDQotZGVjczAxMSBhcHBseSAgICNBMjEwMDNEMCAgICAgICAgIC0+IC0wLjA3NTANCi1kZWNzMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMTAwM0QwDQotZGVjczAxMyBhcHBseSAgICNBMWYwMDNEMCAgICAgICAgIC0+IC0wLjAwMDc1MA0KLWRlY3MwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTFmMDAzRDANCi1kZWNzMDE1IGFwcGx5ICAgI0ExZDAwM0QwICAgICAgICAgLT4gLTAuMDAwMDA3NTANCi1kZWNzMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0ExZDAwM0QwDQotZGVjczAxNyBhcHBseSAgICNBMWMwMDNEMCAgICAgICAgIC0+IC03LjUwRS03DQotZGVjczAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMWMwMDNEMA0KLQ0KLS0tIE5vcm1hbGl0eQ0KLWRlY3MwMjAgYXBwbHkgICAxMjM0NTY3ICAgICAgICAgICAgLT4gIzI2NTRkMmU3DQotZGVjczAyMSBhcHBseSAgLTEyMzQ1NjcgICAgICAgICAgICAtPiAjYTY1NGQyZTcNCi1kZWNzMDIyIGFwcGx5ICAgMTExMTExMSAgICAgICAgICAgIC0+ICMyNjUyNDQ5MQ0KLQ0KLS0tIE5tYXggYW5kIHNpbWlsYXINCi1kZWNzMDMxIGFwcGx5ICAgOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gIzc3ZjNmY2ZmDQotZGVjczAzMiBhcHBseSAgICM3N2YzZmNmZiAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5RSs5Ng0KLWRlY3MwMzMgYXBwbHkgICAxLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjNDdmNGQyZTcNCi1kZWNzMDM0IGFwcGx5ICAgIzQ3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gMS4yMzQ1NjdFKzk2DQotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCi1kZWNzMDM1IGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gIzQ3ZjRjMDAwIENsYW1wZWQNCi1kZWNzMDM2IGFwcGx5ICAgIzQ3ZjRjMDAwICAgICAgICAgICAgICAgLT4gMS4yMzAwMDBFKzk2DQotZGVjczAzNyBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkDQotZGVjczAzOCBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5Ng0KLQ0KLWRlY3MwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDQ5YzUNCi1kZWNzMDUyIGFwcGx5ICAgIzIyNTA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzNDUNCi1kZWNzMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwNTM0DQotZGVjczA1NCBhcHBseSAgICMyMjUwMDUzNCAgICAgICAgICAgICAgIC0+IDEyMzQNCi1kZWNzMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMGEzDQotZGVjczA1NiBhcHBseSAgICMyMjUwMDBhMyAgICAgICAgICAgICAgIC0+IDEyMw0KLWRlY3MwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMTINCi1kZWNzMDU4IGFwcGx5ICAgIzIyNTAwMDEyICAgICAgICAgICAgICAgLT4gMTINCi1kZWNzMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAxDQotZGVjczA2MCBhcHBseSAgICMyMjUwMDAwMSAgICAgICAgICAgICAgIC0+IDENCi1kZWNzMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMGEzDQotZGVjczA2MiBhcHBseSAgICMyMjMwMDBhMyAgICAgICAgICAgICAgIC0+IDEuMjMNCi1kZWNzMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMzA0OWM1DQotZGVjczA2NCBhcHBseSAgICMyMjMwNDljNSAgICAgICAgICAgICAgIC0+IDEyMy40NQ0KLQ0KLS0tIE5taW4gYW5kIGJlbG93DQotZGVjczA3MSBhcHBseSAgIDFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICMwMDYwMDAwMQ0KLWRlY3MwNzIgYXBwbHkgICAjMDA2MDAwMDEgICAgICAgICAgICAgICAtPiAxRS05NQ0KLWRlY3MwNzMgYXBwbHkgICAxLjAwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDQwMDAwMDANCi1kZWNzMDc0IGFwcGx5ICAgIzA0MDAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFLTk1DQotZGVjczA3NSBhcHBseSAgIDEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMQ0KLWRlY3MwNzYgYXBwbHkgICAjMDQwMDAwMDEgICAgICAgICAgICAgICAtPiAxLjAwMDAwMUUtOTUNCi0NCi1kZWNzMDc3IGFwcGx5ICAgMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDIwMDAwICAgICBTdWJub3JtYWwNCi1kZWNzMDd4IGFwcGx5ICAgMS4wMDAwMEUtOTYgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwNCi1kZWNzMDc4IGFwcGx5ICAgIzAwMDIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwNCi1kZWNzMDc5IGFwcGx5ICAgMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDEwICAgICBTdWJub3JtYWwNCi1kZWNzMDgwIGFwcGx5ICAgIzAwMDAwMDEwICAgICAgICAgICAgICAgLT4gMS4wRS0xMDAgICAgICBTdWJub3JtYWwNCi1kZWNzMDgxIGFwcGx5ICAgMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwNCi1kZWNzMDgyIGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCi1kZWNzMDgzIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwNCi1kZWNzMDg0IGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCi1kZWNzMDh4IGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCi0NCi0tLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQ7IGp1c3QgY2hlY2sgZWRnZSBjYXNlDQotZGVjczA5MCBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgU3Vibm9ybWFsDQotDQotLS0gc2FtZSBhZ2FpbiwgbmVnYXRpdmVzIC0tDQotDQotLS0gTm1heCBhbmQgc2ltaWxhcg0KLWRlY3MxMjIgYXBwbHkgIC05Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjZjdmM2ZjZmYNCi1kZWNzMTIzIGFwcGx5ICAgI2Y3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5RSs5Ng0KLWRlY3MxMjQgYXBwbHkgIC0xLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjYzdmNGQyZTcNCi1kZWNzMTI1IGFwcGx5ICAgI2M3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gLTEuMjM0NTY3RSs5Ng0KLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpDQotZGVjczEzMCBhcHBseSAgLTEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+ICNjN2Y0YzAwMCBDbGFtcGVkDQotZGVjczEzMSBhcHBseSAgICNjN2Y0YzAwMCAgICAgICAgICAgICAgIC0+IC0xLjIzMDAwMEUrOTYNCi1kZWNzMTMyIGFwcGx5ICAtMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gI2M3ZjAwMDAwIENsYW1wZWQNCi1kZWNzMTMzIGFwcGx5ICAgI2M3ZjAwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwRSs5Ng0KLQ0KLWRlY3MxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDQ5YzUNCi1kZWNzMTUyIGFwcGx5ICAgI2EyNTA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMzQ1DQotZGVjczE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDUzNA0KLWRlY3MxNTQgYXBwbHkgICAjYTI1MDA1MzQgICAgICAgICAgICAgICAtPiAtMTIzNA0KLWRlY3MxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwYTMNCi1kZWNzMTU2IGFwcGx5ICAgI2EyNTAwMGEzICAgICAgICAgICAgICAgLT4gLTEyMw0KLWRlY3MxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMTINCi1kZWNzMTU4IGFwcGx5ICAgI2EyNTAwMDEyICAgICAgICAgICAgICAgLT4gLTEyDQotZGVjczE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMQ0KLWRlY3MxNjAgYXBwbHkgICAjYTI1MDAwMDEgICAgICAgICAgICAgICAtPiAtMQ0KLWRlY3MxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwYTMNCi1kZWNzMTYyIGFwcGx5ICAgI2EyMzAwMGEzICAgICAgICAgICAgICAgLT4gLTEuMjMNCi1kZWNzMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzA0OWM1DQotZGVjczE2NCBhcHBseSAgICNhMjMwNDljNSAgICAgICAgICAgICAgIC0+IC0xMjMuNDUNCi0NCi0tLSBObWluIGFuZCBiZWxvdw0KLWRlY3MxNzEgYXBwbHkgIC0xRS05NSAgICAgICAgICAgICAgICAgICAtPiAjODA2MDAwMDENCi1kZWNzMTcyIGFwcGx5ICAgIzgwNjAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTk1DQotZGVjczE3MyBhcHBseSAgLTEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMA0KLWRlY3MxNzQgYXBwbHkgICAjODQwMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFLTk1DQotZGVjczE3NSBhcHBseSAgLTEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMQ0KLWRlY3MxNzYgYXBwbHkgICAjODQwMDAwMDEgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDFFLTk1DQotDQotZGVjczE3NyBhcHBseSAgLTAuMTAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4MDAyMDAwMCAgICAgU3Vibm9ybWFsDQotZGVjczE3OCBhcHBseSAgICM4MDAyMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwRS05NiAgU3Vibm9ybWFsDQotZGVjczE3OSBhcHBseSAgLTAuMDAwMDEwRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAxMCAgICAgU3Vibm9ybWFsDQotZGVjczE4MCBhcHBseSAgICM4MDAwMDAxMCAgICAgICAgICAgICAgIC0+IC0xLjBFLTEwMCAgICAgU3Vibm9ybWFsDQotZGVjczE4MSBhcHBseSAgLTAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsDQotZGVjczE4MiBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsDQotZGVjczE4MyBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsDQotZGVjczE4NCBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsDQotDQotLS0gdW5kZXJmbG93IGVkZ2UgY2FzZQ0KLWRlY3MxOTAgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgIFN1Ym5vcm1hbA0KLQ0KLS0tIHplcm9zDQotZGVjczQwMCBhcHBseSAgIDBFLTQwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MDEgYXBwbHkgICAwRS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDANCi1kZWNzNDAyIGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxDQotZGVjczQwMyBhcHBseSAgIDAuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMA0KLWRlY3M0MDQgYXBwbHkgICAjMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwRS0xMDENCi1kZWNzNDA1IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwDQotZGVjczQwNiBhcHBseSAgICMyMjMwMDAwMCAgICAgICAgICAgICAgIC0+IDAuMDANCi1kZWNzNDA3IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAwDQotZGVjczQwOCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAgICAgICAgIC0+IDANCi1kZWNzNDA5IGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyODAwMDAwDQotZGVjczQxMCBhcHBseSAgICMyMjgwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzMNCi1kZWNzNDExIGFwcGx5ICAgMEUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwDQotZGVjczQxMiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwDQotLS0gY2xhbXBlZCB6ZXJvcy4uLg0KLWRlY3M0MTMgYXBwbHkgICAwRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQNCi1kZWNzNDE0IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTANCi1kZWNzNDE1IGFwcGx5ICAgMEUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkDQotZGVjczQxNiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwDQotZGVjczQxNyBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MTggYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MA0KLQ0KLS0tIG5lZ2F0aXZlIHplcm9zDQotZGVjczQyMCBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MjEgYXBwbHkgICAtMEUtMTAxICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDANCi1kZWNzNDIyIGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQ0KLWRlY3M0MjMgYXBwbHkgICAtMC4wMDAwMDBFLTk1ICAgICAgICAgICAtPiAjODAwMDAwMDANCi1kZWNzNDI0IGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQ0KLWRlY3M0MjUgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDANCi1kZWNzNDI2IGFwcGx5ICAgI2EyMzAwMDAwICAgICAgICAgICAgICAgLT4gLTAuMDANCi1kZWNzNDI3IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAwDQotZGVjczQyOCBhcHBseSAgICNhMjUwMDAwMCAgICAgICAgICAgICAgIC0+IC0wDQotZGVjczQyOSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjgwMDAwMA0KLWRlY3M0MzAgYXBwbHkgICAjYTI4MDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrMw0KLWRlY3M0MzEgYXBwbHkgICAtMEUrOTAgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDANCi1kZWNzNDMyIGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwDQotLS0gY2xhbXBlZCB6ZXJvcy4uLg0KLWRlY3M0MzMgYXBwbHkgICAtMEUrOTEgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQNCi1kZWNzNDM0IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwDQotZGVjczQzNSBhcHBseSAgIC0wRSs5NiAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZA0KLWRlY3M0MzYgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTANCi1kZWNzNDM3IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkDQotZGVjczQzOCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MA0KLQ0KLS0tIFNwZWNpYWxzDQotZGVjczUwMCBhcHBseSAgIEluZmluaXR5ICAtPiAjNzgwMDAwMDANCi1kZWNzNTAxIGFwcGx5ICAgIzc4Nzg3ODc4IC0+ICM3ODAwMDAwMA0KLWRlY3M1MDIgYXBwbHkgICAjNzgwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNzNTAzIGFwcGx5ICAgIzc5Nzk3OTc5IC0+ICM3ODAwMDAwMA0KLWRlY3M1MDQgYXBwbHkgICAjNzkwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNzNTA1IGFwcGx5ICAgIzdhN2E3YTdhIC0+ICM3ODAwMDAwMA0KLWRlY3M1MDYgYXBwbHkgICAjN2EwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNzNTA3IGFwcGx5ICAgIzdiN2I3YjdiIC0+ICM3ODAwMDAwMA0KLWRlY3M1MDggYXBwbHkgICAjN2IwMDAwMDAgLT4gSW5maW5pdHkNCi1kZWNzNTA5IGFwcGx5ICAgIzdjN2M3YzdjIC0+ICM3YzBjN2M3Yw0KLQ0KLWRlY3M1MTAgYXBwbHkgICBOYU4gICAgICAgLT4gIzdjMDAwMDAwDQotZGVjczUxMSBhcHBseSAgICM3YzAwMDAwMCAtPiBOYU4NCi1kZWNzNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkIC0+ICM3YzBkN2Q3ZA0KLWRlY3M1MTMgYXBwbHkgICAjN2QwMDAwMDAgLT4gTmFODQotZGVjczUxNCBhcHBseSAgICM3ZTdlN2U3ZSAtPiAjN2UwZTdjN2UNCi1kZWNzNTE1IGFwcGx5ICAgIzdlMDAwMDAwIC0+IHNOYU4NCi1kZWNzNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmIC0+ICM3ZTBmN2M3Zg0KLWRlY3M1MTcgYXBwbHkgICAjN2YwMDAwMDAgLT4gc05hTg0KLWRlY3M1MTggYXBwbHkgICAjN2ZmZmZmZmYgLT4gc05hTjk5OTk5OQ0KLWRlY3M1MTkgYXBwbHkgICAjN2ZmZmZmZmYgLT4gIzdlMDNmY2ZmDQotDQotZGVjczUyMCBhcHBseSAgIC1JbmZpbml0eSAtPiAjZjgwMDAwMDANCi1kZWNzNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4IC0+ICNmODAwMDAwMA0KLWRlY3M1MjIgYXBwbHkgICAjZjgwMDAwMDAgLT4gLUluZmluaXR5DQotZGVjczUyMyBhcHBseSAgICNmOTc5Nzk3OSAtPiAjZjgwMDAwMDANCi1kZWNzNTI0IGFwcGx5ICAgI2Y5MDAwMDAwIC0+IC1JbmZpbml0eQ0KLWRlY3M1MjUgYXBwbHkgICAjZmE3YTdhN2EgLT4gI2Y4MDAwMDAwDQotZGVjczUyNiBhcHBseSAgICNmYTAwMDAwMCAtPiAtSW5maW5pdHkNCi1kZWNzNTI3IGFwcGx5ICAgI2ZiN2I3YjdiIC0+ICNmODAwMDAwMA0KLWRlY3M1MjggYXBwbHkgICAjZmIwMDAwMDAgLT4gLUluZmluaXR5DQotDQotZGVjczUyOSBhcHBseSAgIC1OYU4gICAgICAtPiAjZmMwMDAwMDANCi1kZWNzNTMwIGFwcGx5ICAgI2ZjN2M3YzdjIC0+ICNmYzBjN2M3Yw0KLWRlY3M1MzEgYXBwbHkgICAjZmMwMDAwMDAgLT4gLU5hTg0KLWRlY3M1MzIgYXBwbHkgICAjZmQ3ZDdkN2QgLT4gI2ZjMGQ3ZDdkDQotZGVjczUzMyBhcHBseSAgICNmZDAwMDAwMCAtPiAtTmFODQotZGVjczUzNCBhcHBseSAgICNmZTdlN2U3ZSAtPiAjZmUwZTdjN2UNCi1kZWNzNTM1IGFwcGx5ICAgI2ZlMDAwMDAwIC0+IC1zTmFODQotZGVjczUzNiBhcHBseSAgICNmZjdmN2Y3ZiAtPiAjZmUwZjdjN2YNCi1kZWNzNTM3IGFwcGx5ICAgI2ZmMDAwMDAwIC0+IC1zTmFODQotZGVjczUzOCBhcHBseSAgICNmZmZmZmZmZiAtPiAtc05hTjk5OTk5OQ0KLWRlY3M1MzkgYXBwbHkgICAjZmZmZmZmZmYgLT4gI2ZlMDNmY2ZmDQotDQotLS0gZGlhZ25vc3RpYyBOYU5zDQotZGVjczU0MCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDANCi1kZWNzNTQxIGFwcGx5ICAgTmFOMCAgICAgIC0+ICM3YzAwMDAwMA0KLWRlY3M1NDIgYXBwbHkgICBOYU4xICAgICAgLT4gIzdjMDAwMDAxDQotZGVjczU0MyBhcHBseSAgIE5hTjEyICAgICAtPiAjN2MwMDAwMTINCi1kZWNzNTQ0IGFwcGx5ICAgTmFONzkgICAgIC0+ICM3YzAwMDA3OQ0KLWRlY3M1NDUgYXBwbHkgICBOYU4xMjM0NSAgIC0+ICM3YzAwNDljNQ0KLWRlY3M1NDYgYXBwbHkgICBOYU4xMjM0NTYgIC0+ICM3YzAyOGU1Ng0KLWRlY3M1NDcgYXBwbHkgICBOYU43OTk3OTkgIC0+ICM3YzBmN2ZkZg0KLWRlY3M1NDggYXBwbHkgICBOYU45OTk5OTkgIC0+ICM3YzAzZmNmZg0KLQ0KLQ0KLS0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlDQotZGVjczYwMSBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkDQotZGVjczYwMiBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5Ng0KLWRlY3M2MDMgYXBwbHkgICAxRSs5NSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMjAwMDAgQ2xhbXBlZA0KLWRlY3M2MDQgYXBwbHkgICAjNDNmMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRSs5NQ0KLWRlY3M2MDUgYXBwbHkgICAxRSs5NCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDQwMDAgQ2xhbXBlZA0KLWRlY3M2MDYgYXBwbHkgICAjNDNmMDQwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDBFKzk0DQotZGVjczYwNyBhcHBseSAgIDFFKzkzICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDQwMCBDbGFtcGVkDQotZGVjczYwOCBhcHBseSAgICM0M2YwMDQwMCAgICAgICAgICAgICAgIC0+IDEuMDAwRSs5Mw0KLWRlY3M2MDkgYXBwbHkgICAxRSs5MiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwODAgQ2xhbXBlZA0KLWRlY3M2MTAgYXBwbHkgICAjNDNmMDAwODAgICAgICAgICAgICAgICAtPiAxLjAwRSs5Mg0KLWRlY3M2MTEgYXBwbHkgICAxRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMTAgQ2xhbXBlZA0KLWRlY3M2MTIgYXBwbHkgICAjNDNmMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFKzkxDQotZGVjczYxMyBhcHBseSAgIDFFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMQ0KLWRlY3M2MTQgYXBwbHkgICAjNDNmMDAwMDEgICAgICAgICAgICAgICAtPiAxRSs5MA0KLQ0KLQ0KLS0tIFNlbGVjdGVkIERQRCBjb2Rlcw0KLWRlY3M3MDAgYXBwbHkgICAjMjI1MDAwMDAgICAgICAgLT4gMA0KLWRlY3M3MDEgYXBwbHkgICAjMjI1MDAwMDkgICAgICAgLT4gOQ0KLWRlY3M3MDIgYXBwbHkgICAjMjI1MDAwMTAgICAgICAgLT4gMTANCi1kZWNzNzAzIGFwcGx5ICAgIzIyNTAwMDE5ICAgICAgIC0+IDE5DQotZGVjczcwNCBhcHBseSAgICMyMjUwMDAyMCAgICAgICAtPiAyMA0KLWRlY3M3MDUgYXBwbHkgICAjMjI1MDAwMjkgICAgICAgLT4gMjkNCi1kZWNzNzA2IGFwcGx5ICAgIzIyNTAwMDMwICAgICAgIC0+IDMwDQotZGVjczcwNyBhcHBseSAgICMyMjUwMDAzOSAgICAgICAtPiAzOQ0KLWRlY3M3MDggYXBwbHkgICAjMjI1MDAwNDAgICAgICAgLT4gNDANCi1kZWNzNzA5IGFwcGx5ICAgIzIyNTAwMDQ5ICAgICAgIC0+IDQ5DQotZGVjczcxMCBhcHBseSAgICMyMjUwMDA1MCAgICAgICAtPiA1MA0KLWRlY3M3MTEgYXBwbHkgICAjMjI1MDAwNTkgICAgICAgLT4gNTkNCi1kZWNzNzEyIGFwcGx5ICAgIzIyNTAwMDYwICAgICAgIC0+IDYwDQotZGVjczcxMyBhcHBseSAgICMyMjUwMDA2OSAgICAgICAtPiA2OQ0KLWRlY3M3MTQgYXBwbHkgICAjMjI1MDAwNzAgICAgICAgLT4gNzANCi1kZWNzNzE1IGFwcGx5ICAgIzIyNTAwMDcxICAgICAgIC0+IDcxDQotZGVjczcxNiBhcHBseSAgICMyMjUwMDA3MiAgICAgICAtPiA3Mg0KLWRlY3M3MTcgYXBwbHkgICAjMjI1MDAwNzMgICAgICAgLT4gNzMNCi1kZWNzNzE4IGFwcGx5ICAgIzIyNTAwMDc0ICAgICAgIC0+IDc0DQotZGVjczcxOSBhcHBseSAgICMyMjUwMDA3NSAgICAgICAtPiA3NQ0KLWRlY3M3MjAgYXBwbHkgICAjMjI1MDAwNzYgICAgICAgLT4gNzYNCi1kZWNzNzIxIGFwcGx5ICAgIzIyNTAwMDc3ICAgICAgIC0+IDc3DQotZGVjczcyMiBhcHBseSAgICMyMjUwMDA3OCAgICAgICAtPiA3OA0KLWRlY3M3MjMgYXBwbHkgICAjMjI1MDAwNzkgICAgICAgLT4gNzkNCi0NCi1kZWNzNzMwIGFwcGx5ICAgIzIyNTAwMjllICAgICAgIC0+IDk5NA0KLWRlY3M3MzEgYXBwbHkgICAjMjI1MDAyOWYgICAgICAgLT4gOTk1DQotZGVjczczMiBhcHBseSAgICMyMjUwMDJhMCAgICAgICAtPiA1MjANCi1kZWNzNzMzIGFwcGx5ICAgIzIyNTAwMmExICAgICAgIC0+IDUyMQ0KLQ0KLS0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzDQotZGVjczc0MCBhcHBseSAgICMyMjUwMDNmNyAgICAgICAtPiA3NzcNCi1kZWNzNzQxIGFwcGx5ICAgIzIyNTAwM2Y4ICAgICAgIC0+IDc3OA0KLWRlY3M3NDIgYXBwbHkgICAjMjI1MDAzZWIgICAgICAgLT4gNzg3DQotZGVjczc0MyBhcHBseSAgICMyMjUwMDM3ZCAgICAgICAtPiA4NzcNCi1kZWNzNzQ0IGFwcGx5ICAgIzIyNTAwMzlmICAgICAgIC0+IDk5Nw0KLWRlY3M3NDUgYXBwbHkgICAjMjI1MDAzYmYgICAgICAgLT4gOTc5DQotZGVjczc0NiBhcHBseSAgICMyMjUwMDNkZiAgICAgICAtPiA3OTkNCi1kZWNzNzQ3IGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OA0KLQ0KLQ0KLS0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpDQotZGVjczc1MCBhcHBseSAgICMyMjUwMDA2ZSAgICAgICAtPiA4ODgNCi1kZWNzNzUxIGFwcGx5ICAgIzIyNTAwMTZlICAgICAgIC0+IDg4OA0KLWRlY3M3NTIgYXBwbHkgICAjMjI1MDAyNmUgICAgICAgLT4gODg4DQotZGVjczc1MyBhcHBseSAgICMyMjUwMDM2ZSAgICAgICAtPiA4ODgNCi1kZWNzNzU0IGFwcGx5ICAgIzIyNTAwMDZmICAgICAgIC0+IDg4OQ0KLWRlY3M3NTUgYXBwbHkgICAjMjI1MDAxNmYgICAgICAgLT4gODg5DQotZGVjczc1NiBhcHBseSAgICMyMjUwMDI2ZiAgICAgICAtPiA4ODkNCi1kZWNzNzU3IGFwcGx5ICAgIzIyNTAwMzZmICAgICAgIC0+IDg4OQ0KLQ0KLWRlY3M3NjAgYXBwbHkgICAjMjI1MDAwN2UgICAgICAgLT4gODk4DQotZGVjczc2MSBhcHBseSAgICMyMjUwMDE3ZSAgICAgICAtPiA4OTgNCi1kZWNzNzYyIGFwcGx5ICAgIzIyNTAwMjdlICAgICAgIC0+IDg5OA0KLWRlY3M3NjMgYXBwbHkgICAjMjI1MDAzN2UgICAgICAgLT4gODk4DQotZGVjczc2NCBhcHBseSAgICMyMjUwMDA3ZiAgICAgICAtPiA4OTkNCi1kZWNzNzY1IGFwcGx5ICAgIzIyNTAwMTdmICAgICAgIC0+IDg5OQ0KLWRlY3M3NjYgYXBwbHkgICAjMjI1MDAyN2YgICAgICAgLT4gODk5DQotZGVjczc2NyBhcHBseSAgICMyMjUwMDM3ZiAgICAgICAtPiA4OTkNCi0NCi1kZWNzNzcwIGFwcGx5ICAgIzIyNTAwMGVlICAgICAgIC0+IDk4OA0KLWRlY3M3NzEgYXBwbHkgICAjMjI1MDAxZWUgICAgICAgLT4gOTg4DQotZGVjczc3MiBhcHBseSAgICMyMjUwMDJlZSAgICAgICAtPiA5ODgNCi1kZWNzNzczIGFwcGx5ICAgIzIyNTAwM2VlICAgICAgIC0+IDk4OA0KLWRlY3M3NzQgYXBwbHkgICAjMjI1MDAwZWYgICAgICAgLT4gOTg5DQotZGVjczc3NSBhcHBseSAgICMyMjUwMDFlZiAgICAgICAtPiA5ODkNCi1kZWNzNzc2IGFwcGx5ICAgIzIyNTAwMmVmICAgICAgIC0+IDk4OQ0KLWRlY3M3NzcgYXBwbHkgICAjMjI1MDAzZWYgICAgICAgLT4gOTg5DQotDQotZGVjczc4MCBhcHBseSAgICMyMjUwMDBmZSAgICAgICAtPiA5OTgNCi1kZWNzNzgxIGFwcGx5ICAgIzIyNTAwMWZlICAgICAgIC0+IDk5OA0KLWRlY3M3ODIgYXBwbHkgICAjMjI1MDAyZmUgICAgICAgLT4gOTk4DQotZGVjczc4MyBhcHBseSAgICMyMjUwMDNmZSAgICAgICAtPiA5OTgNCi1kZWNzNzg0IGFwcGx5ICAgIzIyNTAwMGZmICAgICAgIC0+IDk5OQ0KLWRlY3M3ODUgYXBwbHkgICAjMjI1MDAxZmYgICAgICAgLT4gOTk5DQotZGVjczc4NiBhcHBseSAgICMyMjUwMDJmZiAgICAgICAtPiA5OTkNCi1kZWNzNzg3IGFwcGx5ICAgIzIyNTAwM2ZmICAgICAgIC0+IDk5OQ0KLQ0KLS0tIG5hcnJvd2luZyBjYXNlDQotZGVjczc5MCBhcHBseSAyLjAwRS05OSAtPiAjMDAwMDAxMDAgU3Vibm9ybWFsDQotZGVjczc5MSBhcHBseSAjMDAwMDAxMDAgLT4gMi4wMEUtOTkgU3Vibm9ybWFsDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkc0VuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZm91ci1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDMyLmRlY1Rlc3RdCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZm91ci1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLgorLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6CistLQorLS0gIDEgYml0ICBzaWduCistLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCistLSAgNiBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbgorLS0gMjAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KKy0tCistLSBUb3RhbCBleHBvbmVudCBsZW5ndGggOCBiaXRzCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMjQgYml0cyAoNyBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gIDE5MSAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gICA5NiAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkKKy0tIEVtaW4gICA9ICAtOTUgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDEwMSAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1CisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNzMDAxIGFwcGx5ICAgI0EyMzAwM0QwICAgICAgICAgIC0+IC03LjUwCitkZWNzMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgIC0+ICNBMjMwMDNEMAorLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncworZGVjczAwMyBhcHBseSAgICNBMjYwMDNEMCAgICAgICAgIC0+IC03LjUwRSszCitkZWNzMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyNjAwM0QwCitkZWNzMDA1IGFwcGx5ICAgI0EyNTAwM0QwICAgICAgICAgLT4gLTc1MAorZGVjczAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjUwMDNEMAorZGVjczAwNyBhcHBseSAgICNBMjQwMDNEMCAgICAgICAgIC0+IC03NS4wCitkZWNzMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyNDAwM0QwCitkZWNzMDA5IGFwcGx5ICAgI0EyMjAwM0QwICAgICAgICAgLT4gLTAuNzUwCitkZWNzMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMjAwM0QwCitkZWNzMDExIGFwcGx5ICAgI0EyMTAwM0QwICAgICAgICAgLT4gLTAuMDc1MAorZGVjczAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjEwMDNEMAorZGVjczAxMyBhcHBseSAgICNBMWYwMDNEMCAgICAgICAgIC0+IC0wLjAwMDc1MAorZGVjczAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMWYwMDNEMAorZGVjczAxNSBhcHBseSAgICNBMWQwMDNEMCAgICAgICAgIC0+IC0wLjAwMDAwNzUwCitkZWNzMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0ExZDAwM0QwCitkZWNzMDE3IGFwcGx5ICAgI0ExYzAwM0QwICAgICAgICAgLT4gLTcuNTBFLTcKK2RlY3MwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTFjMDAzRDAKKworLS0gTm9ybWFsaXR5CitkZWNzMDIwIGFwcGx5ICAgMTIzNDU2NyAgICAgICAgICAgIC0+ICMyNjU0ZDJlNworZGVjczAyMSBhcHBseSAgLTEyMzQ1NjcgICAgICAgICAgICAtPiAjYTY1NGQyZTcKK2RlY3MwMjIgYXBwbHkgICAxMTExMTExICAgICAgICAgICAgLT4gIzI2NTI0NDkxCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3MwMzEgYXBwbHkgICA5Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjNzdmM2ZjZmYKK2RlY3MwMzIgYXBwbHkgICAjNzdmM2ZjZmYgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OUUrOTYKK2RlY3MwMzMgYXBwbHkgICAxLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjNDdmNGQyZTcKK2RlY3MwMzQgYXBwbHkgICAjNDdmNGQyZTcgICAgICAgICAgICAgICAtPiAxLjIzNDU2N0UrOTYKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNzMDM1IGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gIzQ3ZjRjMDAwIENsYW1wZWQKK2RlY3MwMzYgYXBwbHkgICAjNDdmNGMwMDAgICAgICAgICAgICAgICAtPiAxLjIzMDAwMEUrOTYKK2RlY3MwMzcgYXBwbHkgICAxRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDdmMDAwMDAgQ2xhbXBlZAorZGVjczAzOCBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5NgorCitkZWNzMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyNTA0OWM1CitkZWNzMDUyIGFwcGx5ICAgIzIyNTA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzNDUKK2RlY3MwNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDA1MzQKK2RlY3MwNTQgYXBwbHkgICAjMjI1MDA1MzQgICAgICAgICAgICAgICAtPiAxMjM0CitkZWNzMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMGEzCitkZWNzMDU2IGFwcGx5ICAgIzIyNTAwMGEzICAgICAgICAgICAgICAgLT4gMTIzCitkZWNzMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDEyCitkZWNzMDU4IGFwcGx5ICAgIzIyNTAwMDEyICAgICAgICAgICAgICAgLT4gMTIKK2RlY3MwNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDEKK2RlY3MwNjAgYXBwbHkgICAjMjI1MDAwMDEgICAgICAgICAgICAgICAtPiAxCitkZWNzMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMGEzCitkZWNzMDYyIGFwcGx5ICAgIzIyMzAwMGEzICAgICAgICAgICAgICAgLT4gMS4yMworZGVjczA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjMwNDljNQorZGVjczA2NCBhcHBseSAgICMyMjMwNDljNSAgICAgICAgICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjczA3MSBhcHBseSAgIDFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICMwMDYwMDAwMQorZGVjczA3MiBhcHBseSAgICMwMDYwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTk1CitkZWNzMDczIGFwcGx5ICAgMS4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzA0MDAwMDAwCitkZWNzMDc0IGFwcGx5ICAgIzA0MDAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFLTk1CitkZWNzMDc1IGFwcGx5ICAgMS4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzA0MDAwMDAxCitkZWNzMDc2IGFwcGx5ICAgIzA0MDAwMDAxICAgICAgICAgICAgICAgLT4gMS4wMDAwMDFFLTk1CisKK2RlY3MwNzcgYXBwbHkgICAwLjEwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDAwMjAwMDAgICAgIFN1Ym5vcm1hbAorZGVjczA3eCBhcHBseSAgIDEuMDAwMDBFLTk2ICAgICAgICAgICAgIC0+IDEuMDAwMDBFLTk2ICAgU3Vibm9ybWFsCitkZWNzMDc4IGFwcGx5ICAgIzAwMDIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwKK2RlY3MwNzkgYXBwbHkgICAwLjAwMDAxMEUtOTUgICAgICAgICAgICAtPiAjMDAwMDAwMTAgICAgIFN1Ym5vcm1hbAorZGVjczA4MCBhcHBseSAgICMwMDAwMDAxMCAgICAgICAgICAgICAgIC0+IDEuMEUtMTAwICAgICAgU3Vibm9ybWFsCitkZWNzMDgxIGFwcGx5ICAgMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MwODIgYXBwbHkgICAjMDAwMDAwMDEgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbAorZGVjczA4MyBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMDg0IGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKK2RlY3MwOHggYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAxRS0xMDEgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQ7IGp1c3QgY2hlY2sgZWRnZSBjYXNlCitkZWNzMDkwIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICBTdWJub3JtYWwKKworLS0gc2FtZSBhZ2FpbiwgbmVnYXRpdmVzIC0tCisKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3MxMjIgYXBwbHkgIC05Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjZjdmM2ZjZmYKK2RlY3MxMjMgYXBwbHkgICAjZjdmM2ZjZmYgICAgICAgICAgICAgICAtPiAtOS45OTk5OTlFKzk2CitkZWNzMTI0IGFwcGx5ICAtMS4yMzQ1NjdFKzk2ICAgICAgICAgICAgLT4gI2M3ZjRkMmU3CitkZWNzMTI1IGFwcGx5ICAgI2M3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gLTEuMjM0NTY3RSs5NgorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3MxMzAgYXBwbHkgIC0xLjIzRSs5NiAgICAgICAgICAgICAgICAtPiAjYzdmNGMwMDAgQ2xhbXBlZAorZGVjczEzMSBhcHBseSAgICNjN2Y0YzAwMCAgICAgICAgICAgICAgIC0+IC0xLjIzMDAwMEUrOTYKK2RlY3MxMzIgYXBwbHkgIC0xRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjYzdmMDAwMDAgQ2xhbXBlZAorZGVjczEzMyBhcHBseSAgICNjN2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMEUrOTYKKworZGVjczE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwNDljNQorZGVjczE1MiBhcHBseSAgICNhMjUwNDljNSAgICAgICAgICAgICAgIC0+IC0xMjM0NQorZGVjczE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDUzNAorZGVjczE1NCBhcHBseSAgICNhMjUwMDUzNCAgICAgICAgICAgICAgIC0+IC0xMjM0CitkZWNzMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMGEzCitkZWNzMTU2IGFwcGx5ICAgI2EyNTAwMGEzICAgICAgICAgICAgICAgLT4gLTEyMworZGVjczE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAxMgorZGVjczE1OCBhcHBseSAgICNhMjUwMDAxMiAgICAgICAgICAgICAgIC0+IC0xMgorZGVjczE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMQorZGVjczE2MCBhcHBseSAgICNhMjUwMDAwMSAgICAgICAgICAgICAgIC0+IC0xCitkZWNzMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMGEzCitkZWNzMTYyIGFwcGx5ICAgI2EyMzAwMGEzICAgICAgICAgICAgICAgLT4gLTEuMjMKK2RlY3MxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDQ5YzUKK2RlY3MxNjQgYXBwbHkgICAjYTIzMDQ5YzUgICAgICAgICAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNzMTcxIGFwcGx5ICAtMUUtOTUgICAgICAgICAgICAgICAgICAgLT4gIzgwNjAwMDAxCitkZWNzMTcyIGFwcGx5ICAgIzgwNjAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTk1CitkZWNzMTczIGFwcGx5ICAtMS4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzg0MDAwMDAwCitkZWNzMTc0IGFwcGx5ICAgIzg0MDAwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwRS05NQorZGVjczE3NSBhcHBseSAgLTEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMQorZGVjczE3NiBhcHBseSAgICM4NDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMUUtOTUKKworZGVjczE3NyBhcHBseSAgLTAuMTAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4MDAyMDAwMCAgICAgU3Vibm9ybWFsCitkZWNzMTc4IGFwcGx5ICAgIzgwMDIwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDBFLTk2ICBTdWJub3JtYWwKK2RlY3MxNzkgYXBwbHkgIC0wLjAwMDAxMEUtOTUgICAgICAgICAgICAtPiAjODAwMDAwMTAgICAgIFN1Ym5vcm1hbAorZGVjczE4MCBhcHBseSAgICM4MDAwMDAxMCAgICAgICAgICAgICAgIC0+IC0xLjBFLTEwMCAgICAgU3Vibm9ybWFsCitkZWNzMTgxIGFwcGx5ICAtMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDAxICAgICBTdWJub3JtYWwKK2RlY3MxODIgYXBwbHkgICAjODAwMDAwMDEgICAgICAgICAgICAgICAtPiAtMUUtMTAxICAgICAgIFN1Ym5vcm1hbAorZGVjczE4MyBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMTg0IGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93IGVkZ2UgY2FzZQorZGVjczE5MCBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgU3Vibm9ybWFsCisKKy0tIHplcm9zCitkZWNzNDAwIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwICBDbGFtcGVkCitkZWNzNDAxIGFwcGx5ICAgMEUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwCitkZWNzNDAyIGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxCitkZWNzNDAzIGFwcGx5ICAgMC4wMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAwCitkZWNzNDA0IGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxCitkZWNzNDA1IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwCitkZWNzNDA2IGFwcGx5ICAgIzIyMzAwMDAwICAgICAgICAgICAgICAgLT4gMC4wMAorZGVjczQwNyBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAwMAorZGVjczQwOCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAgICAgICAgIC0+IDAKK2RlY3M0MDkgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI4MDAwMDAKK2RlY3M0MTAgYXBwbHkgICAjMjI4MDAwMDAgICAgICAgICAgICAgICAtPiAwRSszCitkZWNzNDExIGFwcGx5ICAgMEUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwCitkZWNzNDEyIGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3M0MTMgYXBwbHkgICAwRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MTQgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAorZGVjczQxNSBhcHBseSAgIDBFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZAorZGVjczQxNiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCitkZWNzNDE3IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkCitkZWNzNDE4IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKKworLS0gbmVnYXRpdmUgemVyb3MKK2RlY3M0MjAgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAgIENsYW1wZWQKK2RlY3M0MjEgYXBwbHkgICAtMEUtMTAxICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAKK2RlY3M0MjIgYXBwbHkgICAjODAwMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUtMTAxCitkZWNzNDIzIGFwcGx5ICAgLTAuMDAwMDAwRS05NSAgICAgICAgICAgLT4gIzgwMDAwMDAwCitkZWNzNDI0IGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQorZGVjczQyNSBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMAorZGVjczQyNiBhcHBseSAgICNhMjMwMDAwMCAgICAgICAgICAgICAgIC0+IC0wLjAwCitkZWNzNDI3IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAwCitkZWNzNDI4IGFwcGx5ICAgI2EyNTAwMDAwICAgICAgICAgICAgICAgLT4gLTAKK2RlY3M0MjkgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAjYTI4MDAwMDAKK2RlY3M0MzAgYXBwbHkgICAjYTI4MDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrMworZGVjczQzMSBhcHBseSAgIC0wRSs5MCAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMAorZGVjczQzMiBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorLS0gY2xhbXBlZCB6ZXJvcy4uLgorZGVjczQzMyBhcHBseSAgIC0wRSs5MSAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzNCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorZGVjczQzNSBhcHBseSAgIC0wRSs5NiAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzNiBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorZGVjczQzNyBhcHBseSAgIC0wRSs0MDAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZAorZGVjczQzOCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MAorCistLSBTcGVjaWFscworZGVjczUwMCBhcHBseSAgIEluZmluaXR5ICAtPiAjNzgwMDAwMDAKK2RlY3M1MDEgYXBwbHkgICAjNzg3ODc4NzggLT4gIzc4MDAwMDAwCitkZWNzNTAyIGFwcGx5ICAgIzc4MDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTAzIGFwcGx5ICAgIzc5Nzk3OTc5IC0+ICM3ODAwMDAwMAorZGVjczUwNCBhcHBseSAgICM3OTAwMDAwMCAtPiBJbmZpbml0eQorZGVjczUwNSBhcHBseSAgICM3YTdhN2E3YSAtPiAjNzgwMDAwMDAKK2RlY3M1MDYgYXBwbHkgICAjN2EwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3M1MDcgYXBwbHkgICAjN2I3YjdiN2IgLT4gIzc4MDAwMDAwCitkZWNzNTA4IGFwcGx5ICAgIzdiMDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTA5IGFwcGx5ICAgIzdjN2M3YzdjIC0+ICM3YzBjN2M3YworCitkZWNzNTEwIGFwcGx5ICAgTmFOICAgICAgIC0+ICM3YzAwMDAwMAorZGVjczUxMSBhcHBseSAgICM3YzAwMDAwMCAtPiBOYU4KK2RlY3M1MTIgYXBwbHkgICAjN2Q3ZDdkN2QgLT4gIzdjMGQ3ZDdkCitkZWNzNTEzIGFwcGx5ICAgIzdkMDAwMDAwIC0+IE5hTgorZGVjczUxNCBhcHBseSAgICM3ZTdlN2U3ZSAtPiAjN2UwZTdjN2UKK2RlY3M1MTUgYXBwbHkgICAjN2UwMDAwMDAgLT4gc05hTgorZGVjczUxNiBhcHBseSAgICM3ZjdmN2Y3ZiAtPiAjN2UwZjdjN2YKK2RlY3M1MTcgYXBwbHkgICAjN2YwMDAwMDAgLT4gc05hTgorZGVjczUxOCBhcHBseSAgICM3ZmZmZmZmZiAtPiBzTmFOOTk5OTk5CitkZWNzNTE5IGFwcGx5ICAgIzdmZmZmZmZmIC0+ICM3ZTAzZmNmZgorCitkZWNzNTIwIGFwcGx5ICAgLUluZmluaXR5IC0+ICNmODAwMDAwMAorZGVjczUyMSBhcHBseSAgICNmODc4Nzg3OCAtPiAjZjgwMDAwMDAKK2RlY3M1MjIgYXBwbHkgICAjZjgwMDAwMDAgLT4gLUluZmluaXR5CitkZWNzNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5IC0+ICNmODAwMDAwMAorZGVjczUyNCBhcHBseSAgICNmOTAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3M1MjUgYXBwbHkgICAjZmE3YTdhN2EgLT4gI2Y4MDAwMDAwCitkZWNzNTI2IGFwcGx5ICAgI2ZhMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjczUyNyBhcHBseSAgICNmYjdiN2I3YiAtPiAjZjgwMDAwMDAKK2RlY3M1MjggYXBwbHkgICAjZmIwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY3M1MjkgYXBwbHkgICAtTmFOICAgICAgLT4gI2ZjMDAwMDAwCitkZWNzNTMwIGFwcGx5ICAgI2ZjN2M3YzdjIC0+ICNmYzBjN2M3YworZGVjczUzMSBhcHBseSAgICNmYzAwMDAwMCAtPiAtTmFOCitkZWNzNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkIC0+ICNmYzBkN2Q3ZAorZGVjczUzMyBhcHBseSAgICNmZDAwMDAwMCAtPiAtTmFOCitkZWNzNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlIC0+ICNmZTBlN2M3ZQorZGVjczUzNSBhcHBseSAgICNmZTAwMDAwMCAtPiAtc05hTgorZGVjczUzNiBhcHBseSAgICNmZjdmN2Y3ZiAtPiAjZmUwZjdjN2YKK2RlY3M1MzcgYXBwbHkgICAjZmYwMDAwMDAgLT4gLXNOYU4KK2RlY3M1MzggYXBwbHkgICAjZmZmZmZmZmYgLT4gLXNOYU45OTk5OTkKK2RlY3M1MzkgYXBwbHkgICAjZmZmZmZmZmYgLT4gI2ZlMDNmY2ZmCisKKy0tIGRpYWdub3N0aWMgTmFOcworZGVjczU0MCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDAKK2RlY3M1NDEgYXBwbHkgICBOYU4wICAgICAgLT4gIzdjMDAwMDAwCitkZWNzNTQyIGFwcGx5ICAgTmFOMSAgICAgIC0+ICM3YzAwMDAwMQorZGVjczU0MyBhcHBseSAgIE5hTjEyICAgICAtPiAjN2MwMDAwMTIKK2RlY3M1NDQgYXBwbHkgICBOYU43OSAgICAgLT4gIzdjMDAwMDc5CitkZWNzNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAtPiAjN2MwMDQ5YzUKK2RlY3M1NDYgYXBwbHkgICBOYU4xMjM0NTYgIC0+ICM3YzAyOGU1NgorZGVjczU0NyBhcHBseSAgIE5hTjc5OTc5OSAgLT4gIzdjMGY3ZmRmCitkZWNzNTQ4IGFwcGx5ICAgTmFOOTk5OTk5ICAtPiAjN2MwM2ZjZmYKKworCistLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQorZGVjczYwMSBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkCitkZWNzNjAyIGFwcGx5ICAgIzQ3ZjAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzk2CitkZWNzNjAzIGFwcGx5ICAgMUUrOTUgICAgICAgICAgICAgICAgICAgLT4gIzQzZjIwMDAwIENsYW1wZWQKK2RlY3M2MDQgYXBwbHkgICAjNDNmMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRSs5NQorZGVjczYwNSBhcHBseSAgIDFFKzk0ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwNDAwMCBDbGFtcGVkCitkZWNzNjA2IGFwcGx5ICAgIzQzZjA0MDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwRSs5NAorZGVjczYwNyBhcHBseSAgIDFFKzkzICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDQwMCBDbGFtcGVkCitkZWNzNjA4IGFwcGx5ICAgIzQzZjAwNDAwICAgICAgICAgICAgICAgLT4gMS4wMDBFKzkzCitkZWNzNjA5IGFwcGx5ICAgMUUrOTIgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDgwIENsYW1wZWQKK2RlY3M2MTAgYXBwbHkgICAjNDNmMDAwODAgICAgICAgICAgICAgICAtPiAxLjAwRSs5MgorZGVjczYxMSBhcHBseSAgIDFFKzkxICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAxMCBDbGFtcGVkCitkZWNzNjEyIGFwcGx5ICAgIzQzZjAwMDEwICAgICAgICAgICAgICAgLT4gMS4wRSs5MQorZGVjczYxMyBhcHBseSAgIDFFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMQorZGVjczYxNCBhcHBseSAgICM0M2YwMDAwMSAgICAgICAgICAgICAgIC0+IDFFKzkwCisKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNzNzAwIGFwcGx5ICAgIzIyNTAwMDAwICAgICAgIC0+IDAKK2RlY3M3MDEgYXBwbHkgICAjMjI1MDAwMDkgICAgICAgLT4gOQorZGVjczcwMiBhcHBseSAgICMyMjUwMDAxMCAgICAgICAtPiAxMAorZGVjczcwMyBhcHBseSAgICMyMjUwMDAxOSAgICAgICAtPiAxOQorZGVjczcwNCBhcHBseSAgICMyMjUwMDAyMCAgICAgICAtPiAyMAorZGVjczcwNSBhcHBseSAgICMyMjUwMDAyOSAgICAgICAtPiAyOQorZGVjczcwNiBhcHBseSAgICMyMjUwMDAzMCAgICAgICAtPiAzMAorZGVjczcwNyBhcHBseSAgICMyMjUwMDAzOSAgICAgICAtPiAzOQorZGVjczcwOCBhcHBseSAgICMyMjUwMDA0MCAgICAgICAtPiA0MAorZGVjczcwOSBhcHBseSAgICMyMjUwMDA0OSAgICAgICAtPiA0OQorZGVjczcxMCBhcHBseSAgICMyMjUwMDA1MCAgICAgICAtPiA1MAorZGVjczcxMSBhcHBseSAgICMyMjUwMDA1OSAgICAgICAtPiA1OQorZGVjczcxMiBhcHBseSAgICMyMjUwMDA2MCAgICAgICAtPiA2MAorZGVjczcxMyBhcHBseSAgICMyMjUwMDA2OSAgICAgICAtPiA2OQorZGVjczcxNCBhcHBseSAgICMyMjUwMDA3MCAgICAgICAtPiA3MAorZGVjczcxNSBhcHBseSAgICMyMjUwMDA3MSAgICAgICAtPiA3MQorZGVjczcxNiBhcHBseSAgICMyMjUwMDA3MiAgICAgICAtPiA3MgorZGVjczcxNyBhcHBseSAgICMyMjUwMDA3MyAgICAgICAtPiA3MworZGVjczcxOCBhcHBseSAgICMyMjUwMDA3NCAgICAgICAtPiA3NAorZGVjczcxOSBhcHBseSAgICMyMjUwMDA3NSAgICAgICAtPiA3NQorZGVjczcyMCBhcHBseSAgICMyMjUwMDA3NiAgICAgICAtPiA3NgorZGVjczcyMSBhcHBseSAgICMyMjUwMDA3NyAgICAgICAtPiA3NworZGVjczcyMiBhcHBseSAgICMyMjUwMDA3OCAgICAgICAtPiA3OAorZGVjczcyMyBhcHBseSAgICMyMjUwMDA3OSAgICAgICAtPiA3OQorCitkZWNzNzMwIGFwcGx5ICAgIzIyNTAwMjllICAgICAgIC0+IDk5NAorZGVjczczMSBhcHBseSAgICMyMjUwMDI5ZiAgICAgICAtPiA5OTUKK2RlY3M3MzIgYXBwbHkgICAjMjI1MDAyYTAgICAgICAgLT4gNTIwCitkZWNzNzMzIGFwcGx5ICAgIzIyNTAwMmExICAgICAgIC0+IDUyMQorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjczc0MCBhcHBseSAgICMyMjUwMDNmNyAgICAgICAtPiA3NzcKK2RlY3M3NDEgYXBwbHkgICAjMjI1MDAzZjggICAgICAgLT4gNzc4CitkZWNzNzQyIGFwcGx5ICAgIzIyNTAwM2ViICAgICAgIC0+IDc4NworZGVjczc0MyBhcHBseSAgICMyMjUwMDM3ZCAgICAgICAtPiA4NzcKK2RlY3M3NDQgYXBwbHkgICAjMjI1MDAzOWYgICAgICAgLT4gOTk3CitkZWNzNzQ1IGFwcGx5ICAgIzIyNTAwM2JmICAgICAgIC0+IDk3OQorZGVjczc0NiBhcHBseSAgICMyMjUwMDNkZiAgICAgICAtPiA3OTkKK2RlY3M3NDcgYXBwbHkgICAjMjI1MDAwNmUgICAgICAgLT4gODg4CisKKworLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykKK2RlY3M3NTAgYXBwbHkgICAjMjI1MDAwNmUgICAgICAgLT4gODg4CitkZWNzNzUxIGFwcGx5ICAgIzIyNTAwMTZlICAgICAgIC0+IDg4OAorZGVjczc1MiBhcHBseSAgICMyMjUwMDI2ZSAgICAgICAtPiA4ODgKK2RlY3M3NTMgYXBwbHkgICAjMjI1MDAzNmUgICAgICAgLT4gODg4CitkZWNzNzU0IGFwcGx5ICAgIzIyNTAwMDZmICAgICAgIC0+IDg4OQorZGVjczc1NSBhcHBseSAgICMyMjUwMDE2ZiAgICAgICAtPiA4ODkKK2RlY3M3NTYgYXBwbHkgICAjMjI1MDAyNmYgICAgICAgLT4gODg5CitkZWNzNzU3IGFwcGx5ICAgIzIyNTAwMzZmICAgICAgIC0+IDg4OQorCitkZWNzNzYwIGFwcGx5ICAgIzIyNTAwMDdlICAgICAgIC0+IDg5OAorZGVjczc2MSBhcHBseSAgICMyMjUwMDE3ZSAgICAgICAtPiA4OTgKK2RlY3M3NjIgYXBwbHkgICAjMjI1MDAyN2UgICAgICAgLT4gODk4CitkZWNzNzYzIGFwcGx5ICAgIzIyNTAwMzdlICAgICAgIC0+IDg5OAorZGVjczc2NCBhcHBseSAgICMyMjUwMDA3ZiAgICAgICAtPiA4OTkKK2RlY3M3NjUgYXBwbHkgICAjMjI1MDAxN2YgICAgICAgLT4gODk5CitkZWNzNzY2IGFwcGx5ICAgIzIyNTAwMjdmICAgICAgIC0+IDg5OQorZGVjczc2NyBhcHBseSAgICMyMjUwMDM3ZiAgICAgICAtPiA4OTkKKworZGVjczc3MCBhcHBseSAgICMyMjUwMDBlZSAgICAgICAtPiA5ODgKK2RlY3M3NzEgYXBwbHkgICAjMjI1MDAxZWUgICAgICAgLT4gOTg4CitkZWNzNzcyIGFwcGx5ICAgIzIyNTAwMmVlICAgICAgIC0+IDk4OAorZGVjczc3MyBhcHBseSAgICMyMjUwMDNlZSAgICAgICAtPiA5ODgKK2RlY3M3NzQgYXBwbHkgICAjMjI1MDAwZWYgICAgICAgLT4gOTg5CitkZWNzNzc1IGFwcGx5ICAgIzIyNTAwMWVmICAgICAgIC0+IDk4OQorZGVjczc3NiBhcHBseSAgICMyMjUwMDJlZiAgICAgICAtPiA5ODkKK2RlY3M3NzcgYXBwbHkgICAjMjI1MDAzZWYgICAgICAgLT4gOTg5CisKK2RlY3M3ODAgYXBwbHkgICAjMjI1MDAwZmUgICAgICAgLT4gOTk4CitkZWNzNzgxIGFwcGx5ICAgIzIyNTAwMWZlICAgICAgIC0+IDk5OAorZGVjczc4MiBhcHBseSAgICMyMjUwMDJmZSAgICAgICAtPiA5OTgKK2RlY3M3ODMgYXBwbHkgICAjMjI1MDAzZmUgICAgICAgLT4gOTk4CitkZWNzNzg0IGFwcGx5ICAgIzIyNTAwMGZmICAgICAgIC0+IDk5OQorZGVjczc4NSBhcHBseSAgICMyMjUwMDFmZiAgICAgICAtPiA5OTkKK2RlY3M3ODYgYXBwbHkgICAjMjI1MDAyZmYgICAgICAgLT4gOTk5CitkZWNzNzg3IGFwcGx5ICAgIzIyNTAwM2ZmICAgICAgIC0+IDk5OQorCistLSBuYXJyb3dpbmcgY2FzZQorZGVjczc5MCBhcHBseSAyLjAwRS05OSAtPiAjMDAwMDAxMDAgU3Vibm9ybWFsCitkZWNzNzkxIGFwcGx5ICMwMDAwMDEwMCAtPiAyLjAwRS05OSBTdWJub3JtYWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdAppbmRleCAwMjFiNDc4Li5lYWI5OTBkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CkBAIC0xLDY3NCArMSw2NzQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIGV4cC5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBleHBvbmVudGlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUZXN0cyBvZiB0aGUgZXhwb25lbnRpYWwgZnVudGlvbi4gIEN1cnJlbnRseSBhbGwgdGVzdGNhc2VzIGhlcmUNCi0tLSBzaG93IHJlc3VsdHMgd2hpY2ggYXJlIGNvcnJlY3RseSByb3VuZGVkICh3aXRoaW4gPD0gMC41IHVscCkuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljaWF0aW9uLCBldGMuKQ0KLWV4cHgwMDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCi1leHB4MDAyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NTM5OTkyOTggSW5leGFjdCBSb3VuZGVkDQotZXhweDAwMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNjc4Nzk0NDEgSW5leGFjdCBSb3VuZGVkDQotZXhweDAwNCBleHAgICAwICAgICAgICAgICAgLT4gMQ0KLWV4cHgwMDUgZXhwICAtMCAgICAgICAgICAgIC0+IDENCi1leHB4MDA2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcxODI4MTgzICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDA3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyMjAyNi40NjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDA5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQ0KLQ0KLS0tIHRpbnkgZWRnZSBjYXNlcw0KLXByZWNpc2lvbjogICA3DQotZXhweDAxMSBleHAgIDAuMSAgICAgICAgICAtPiAgMS4xMDUxNzEgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTIgZXhwICAwLjAxICAgICAgICAgLT4gIDEuMDEwMDUwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDEzIGV4cCAgMC4wMDEgICAgICAgIC0+ICAxLjAwMTAwMSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAxNCBleHAgIDAuMDAwMSAgICAgICAtPiAgMS4wMDAxMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTUgZXhwICAwLjAwMDAxICAgICAgLT4gIDEuMDAwMDEwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDE2IGV4cCAgMC4wMDAwMDEgICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAxNyBleHAgIDAuMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMTggZXhwICAwLjAwMDAwMDMgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDE5IGV4cCAgMC4wMDAwMDA0ICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyMCBleHAgIDAuMDAwMDAwNSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjEgZXhwICAwLjAwMDAwMDggICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDIyIGV4cCAgMC4wMDAwMDA5ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyMyBleHAgIDAuMDAwMDAxMCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjQgZXhwICAwLjAwMDAwMTEgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDI1IGV4cCAgMC4wMDAwMDAwOSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDAyNiBleHAgIDAuMDAwMDAwMDUgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgwMjcgZXhwICAwLjAwMDAwMDA0ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDI4IGV4cCAgMC4wMDAwMDAwMSAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYW5kIHNvbWUgbW9yZSB6ZXJvcw0KLWV4cHgwMzAgZXhwICAwLjAwMDAwMDAwICAgLT4gIDENCi1leHB4MDMxIGV4cCAgMEUrMTAwICAgICAgIC0+ICAxDQotZXhweDAzMiBleHAgIDBFLTEwMCAgICAgICAtPiAgMQ0KLWV4cHgwMzMgZXhwIC0wLjAwMDAwMDAwICAgLT4gIDENCi1leHB4MDM0IGV4cCAtMEUrMTAwICAgICAgIC0+ICAxDQotZXhweDAzNSBleHAgLTBFLTEwMCAgICAgICAtPiAgMQ0KLQ0KLS0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcw0KLXByZWNpc2lvbjogICA3DQotZXhweDA0MSBleHAgIDEgICAgICAgICAgLT4gIDIuNzE4MjgyICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDQyIGV4cCAtMSAgICAgICAgICAtPiAgMC4zNjc4Nzk0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgwNDMgZXhwICAxMCAgICAgICAgIC0+ICAyMjAyNi40NyAgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0NCBleHAgLTEwICAgICAgICAgLT4gIDAuMDAwMDQ1Mzk5OTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0NSBleHAgIDEwMCAgICAgICAgLT4gIDIuNjg4MTE3RSs0MyAgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0NiBleHAgLTEwMCAgICAgICAgLT4gIDMuNzIwMDc2RS00NCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDA0NyBleHAgIDEwMDAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHgwNDggZXhwIC0xMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLWV4cHgwNDkgZXhwICAxMDAwMDAwMDAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MDUwIGV4cCAtMTAwMDAwMDAwICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi0NCi0tLSBtaXNjZWxsYW5lYQ0KLS0tIHNpbWlsYXIgdG8gJ1ZGIGJ1ZycgdGVzdCwgYXQgMTcsIGJ1dCB3aXRoIGxhc3QgZGlnaXQgY29ycmVjdGVkIGZvciBkZWNpbWFsDQotcHJlY2lzaW9uOiAxNg0KLWV4cHgwNTUgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyRS0yMzYgSW5leGFjdCBSb3VuZGVkDQotLS0gIHJlc3VsdCBmcm9tIE5ldFJleHgvSmF2YSBwcm90b3R5cGUgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE3Njc3OTI5NjI4NjE3MjQ2MDU0NDU5NjQ0NzExMTA4RS0yMzYNCi0tLSAgIHJlc3VsdCBmcm9tIFJleHggKHNlcmllcykgdmVyc2lvbiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NkUtMjM2DQotcHJlY2lzaW9uOiAxNw0KLWV4cHgwNTYgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMUUtMjM2IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTgNCi1leHB4MDU3IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExRS0yMzYgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOQ0KLWV4cHgwNTggZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTEyRS0yMzYgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMA0KLWV4cHgwNTkgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExOEUtMjM2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHJvdW5kaW5nIGluIGFyZWFzIG9mIC4uNTAwLi4sIC4uNDk5Li4sIC4uMTAwLi4sIC4uOTk5Li4gc2VxdWVuY2VzDQotcHJlY2lzaW9uOiAgIDUwDQotZXhweDEwMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3MzM3NDk5NTA3OTI1MDA3MzgxMSBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMzENCi1leHB4MTAyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjcgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDMwDQotZXhweDEwMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyOQ0KLWV4cHgxMDQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjgNCi1leHB4MTA1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI3DQotZXhweDEwNiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNg0KLWV4cHgxMDcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjUNCi1leHB4MTA4IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDI0DQotZXhweDEwOSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMw0KLWV4cHgxMTAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjINCi1leHB4MTExIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTkgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDIxDQotZXhweDExMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMA0KLWV4cHgxMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTkNCi1leHB4MTE0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE4DQotZXhweDExNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNw0KLWV4cHgxMTYgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTYNCi1leHB4MTE3IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE1DQotZXhweDExOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNA0KLWV4cHgxMTkgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTMNCi1leHB4MTIwIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDEyDQotZXhweDEyMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMQ0KLWV4cHgxMjIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTANCi1leHB4MTIzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA5DQotZXhweDEyNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgOA0KLWV4cHgxMjUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDcNCi1leHB4MTI2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA2DQotZXhweDEyNyBleHAgLTlFLTggLT4gMS4wMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNQ0KLWV4cHgxMjggZXhwIC05RS04IC0+IDEuMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDQNCi1leHB4MTI5IGV4cCAtOUUtOCAtPiAxLjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAzDQotZXhweDEzMCBleHAgLTlFLTggLT4gMS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMg0KLWV4cHgxMzEgZXhwIC05RS04IC0+IDEuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDENCi1leHB4MTMyIGV4cCAtOUUtOCAtPiAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gc2FuaXR5IGNoZWNrcywgd2l0aCBpdGVyYXRpb24gY291bnRzIFtub3JtYWxpemVkIHNvIDA8PXx4fDwxXQ0KLXByZWNpc2lvbjogICA1MA0KLQ0KLWV4cHgyMTAgZXhwIDAgLT4gMQ0KLS0tIGl0ZXJhdGlvbnM6IDINCi1leHB4MjExIGV4cCAtMUUtNDAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA4DQotZXhweDIxMiBleHAgLTlFLTcgLT4gMC45OTk5OTkxMDAwMDA0MDQ5OTk4Nzg1MDAwMjczMzc0OTUwNzkyNTA3MzgxMTI0MDUxMCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA2DQotZXhweDIxMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3MzM3NDk5NTA3OTI1MDA3MzgxMSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAxNQ0KLWV4cHgyMTQgZXhwIC0wLjAwMyAtPiAwLjk5NzAwNDQ5NTUwMzM3Mjk3NjAxMjA2NjIzNDA5NzU2MDkxMDc0MTc3NDgwNDg5ODQ1IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDE0DQotZXhweDIxNSBleHAgLTAuMDAxIC0+IDAuOTk5MDAwNDk5ODMzMzc0OTkxNjY4MDU1MzU3MTY3NjU1OTc0NzAyMzU1OTAyMzYwMDggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjE2IGV4cCAtMC4xIC0+IDAuOTA0ODM3NDE4MDM1OTU5NTczMTY0MjQ5MDU5NDQ2NDM2NjIxMTk0NzA1MzYwOTgwNDAgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzkNCi1leHB4MjE3IGV4cCAtMC43IC0+IDAuNDk2NTg1MzAzNzkxNDA5NTE0NzA0ODAwMDkzMzk3NTI4OTYxNzA3NjY3MTY1NzExODIgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogNDENCi1leHB4MjE4IGV4cCAtMC45IC0+IDAuNDA2NTY5NjU5NzQwNTk5MTExODgzNDU0MjM5NjQ1NjI1OTg3ODMzNzAzMzc2MTcwMzggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogNDMNCi1leHB4MjE5IGV4cCAtMC45OSAtPiAwLjM3MTU3NjY5MTAyMjA0NTY5MDUzMTUyNDExOTkwODIwMTM4NjkxODAyODg1NDkwNTAxIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI2DQotZXhweDIyMCBleHAgLTEgLT4gMC4zNjc4Nzk0NDExNzE0NDIzMjE1OTU1MjM3NzAxNjE0NjA4Njc0NDU4MTExMzEwMzE3NyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNg0KLWV4cHgyMjEgZXhwIC0xLjAxIC0+IDAuMzY0MjE4OTc5NTcxNTIzMzE5NzU3MDQ2Mjk1NjM3MzQ1NDg5NTk1ODkxMzkxOTI0ODIgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjcNCi1leHB4MjIyIGV4cCAtMS4xIC0+IDAuMzMyODcxMDgzNjk4MDc5NTUzMjg4ODQ2OTA2NDMxMzE1NTIxNjEyNDc5NTIxNTY5MjEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjgNCi1leHB4MjIzIGV4cCAtMS41IC0+IDAuMjIzMTMwMTYwMTQ4NDI5ODI4OTMzMjgwNDcwNzY0MDEyNTIxMzQyMTcxNjI5MzYxMDggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzANCi1leHB4MjI0IGV4cCAtMiAtPiAwLjEzNTMzNTI4MzIzNjYxMjY5MTg5Mzk5OTQ5NDk3MjQ4NDQwMzQwNzYzMTU0NTkwOTU4IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDM2DQotZXhweDIyNSBleHAgLTUgLT4gMC4wMDY3Mzc5NDY5OTkwODU0NjcwOTY2MzYwNDg0MjMxNDg0MjQyNDg4NDk1ODUwMjczNTUxIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI2DQotZXhweDIyNiBleHAgLTEwIC0+IDAuMDAwMDQ1Mzk5OTI5NzYyNDg0ODUxNTM1NTkxNTE1NTYwNTUwNjEwMjM3OTE4MDg4ODY2NTY1IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI4DQotZXhweDIyNyBleHAgLTE0IC0+IDguMzE1Mjg3MTkxMDM1Njc4ODQwNjM5ODUxNDI1NjUyNjIyOTQ2MDc2NTgzNjQ5ODQ1N0UtNyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOQ0KLWV4cHgyMjggZXhwIC0xNSAtPiAzLjA1OTAyMzIwNTAxODI1Nzg4MzcxNDc5NDk3NzAyMjg5NjM5MzcwODIwNzgwODE4NTZFLTcgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMzANCi1leHB4MjMzIGV4cCAwIC0+IDENCi0tLSBpdGVyYXRpb25zOiAyDQotZXhweDIzNCBleHAgMUUtNDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDcNCi1leHB4MjM1IGV4cCA5RS03IC0+IDEuMDAwMDAwOTAwMDAwNDA1MDAwMTIxNTAwMDI3MzM3NTA0OTIwNzUwNzM4MTEyNTk0OSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA2DQotZXhweDIzNiBleHAgOUUtOCAtPiAxLjAwMDAwMDA5MDAwMDAwNDA1MDAwMDEyMTUwMDAwMjczMzc1MDA0OTIwNzUwMDczODEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMTUNCi1leHB4MjM3IGV4cCAwLjAwMyAtPiAxLjAwMzAwNDUwNDUwMzM3NzAyNjAxMjkzNDA5MTM0ODkwMDIwNTMzMTg3MjcxOTU2MTkgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMTMNCi1leHB4MjM4IGV4cCAwLjAwMSAtPiAxLjAwMTAwMDUwMDE2NjcwODM0MTY2ODA1NTc1Mzk5MzA1ODMxMTU2MzA3NjIwMDU4MDcgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjUNCi1leHB4MjM5IGV4cCAwLjEgLT4gMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY2NjgyMjQ1NDcxOTQ3Mzc1IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDM4DQotZXhweDI0MCBleHAgMC43IC0+IDIuMDEzNzUyNzA3NDcwNDc2NTIxNjI0NTQ5Mzg4NTgzMDY1MjcwMDE3NTQyMzk0MTQ1OSBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiA0MQ0KLWV4cHgyNDEgZXhwIDAuOSAtPiAyLjQ1OTYwMzExMTE1Njk0OTY2MzgwMDEyNjU2MzYwMjQ3MDY5NTQyMTc3MjMwNjQ0MDEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogNDINCi1leHB4MjQyIGV4cCAwLjk5IC0+IDIuNjkxMjM0NDcyMzQ5MjYyMjg5MDk5ODc5NDA0MDcxMDEzOTcyMTgwMjkzMTg0MTAzMCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyNg0KLWV4cHgyNDMgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM3MDAwIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI2DQotZXhweDI0NCBleHAgMS4wMSAtPiAyLjc0NTYwMTAxNTAxNjkxNjQ5Mzk4OTc3NjMxNjY2MDM4NzYyNDA3Mzc1MDgxOTU5NjAgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjQ1IGV4cCAxLjEgLT4gMy4wMDQxNjYwMjM5NDY0MzMxMTIwNTg0MDc5NTM1ODg2NzIzOTMyODI2ODEwMjYwMTYzIEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDI4DQotZXhweDI0NiBleHAgMS41IC0+IDQuNDgxNjg5MDcwMzM4MDY0ODIyNjAyMDU1NDYwMTE5Mjc1ODE5MDA1NzQ5ODY4MzY5NyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBpdGVyYXRpb25zOiAyOQ0KLWV4cHgyNDcgZXhwIDIgLT4gNy4zODkwNTYwOTg5MzA2NTAyMjcyMzA0Mjc0NjA1NzUwMDc4MTMxODAzMTU1NzA1NTE4IEluZXhhY3QgUm91bmRlZA0KLS0tIGl0ZXJhdGlvbnM6IDM2DQotZXhweDI0OCBleHAgNSAtPiAxNDguNDEzMTU5MTAyNTc2NjAzNDIxMTE1NTgwMDQwNTUyMjc5NjIzNDg3NjY3NTkzODggSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjYNCi1leHB4MjQ5IGV4cCAxMCAtPiAyMjAyNi40NjU3OTQ4MDY3MTY1MTY5NTc5MDA2NDUyODQyNDQzNjYzNTM1MTI2MTg1NTcgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjgNCi1leHB4MjUwIGV4cCAxNCAtPiAxMjAyNjA0LjI4NDE2NDc3Njc3Nzc0OTIzNjc3MDc2Nzg1OTQ0OTQxMjQ4NjU0MzM3NjEgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjgNCi1leHB4MjUxIGV4cCAxNSAtPiAzMjY5MDE3LjM3MjQ3MjExMDYzOTMwMTg1NTA0NjA5MTcyMTMxNTUwNTczODU0MzgyMDAgSW5leGFjdCBSb3VuZGVkDQotLS0gaXRlcmF0aW9uczogMjkNCi0NCi0tLSBhIGJpZ2dpZSBbcmVzdWx0IHZlcmlmaWVkIDMgd2F5c10NCi1wcmVjaXNpb246IDI1MA0KLWV4cHgyNjAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM2OTk5NTk1NzQ5NjY5Njc2Mjc3MjQwNzY2MzAzNTM1NDc1OTQ1NzEzODIxNzg1MjUxNjY0Mjc0Mjc0NjYzOTE5MzIwMDMwNTk5MjE4MTc0MTM1OTY2MjkwNDM1NzI5MDAzMzQyOTUyNjA1OTU2MzA3MzgxMzIzMjg2Mjc5NDM0OTA3NjMyMzM4Mjk4ODA3NTMxOTUyNTEwMTkwMTE1NzM4MzQxODc5MzA3MDIxNTQwODkxNDk5MzQ4ODQxNjc1MDkyNDQ3NjE0NjA2NjggSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZXh0cmVtZSByYW5nZSBib3VuZGFyaWVzDQotcHJlY2lzaW9uOiAgIDE2DQotbWF4RXhwb25lbnQ6IDk5OTk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5OTk5DQotLS0gTnRpbnkgYm91bmRhcnkNCi1leHB4MjkwIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI5IC0+IDBFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWV4cHgyOTEgZXhwICAtMjMwMjYxOC4wMjIzMzI1MjggLT4gMUUtMTAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLS0tIE5tYXgvMTAgYW5kIE5tYXggYm91bmRhcnkNCi1leHB4MjkyIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTIgLT4gOS45OTk5OTk5OTMxMDAyNzdFKzk5OTk5OCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDI5MyBleHAgIDIzMDI1ODIuNzkwNDA4OTUzIC0+IDEuMDAwMDAwMDAwMzEwMDI4RSs5OTk5OTkgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgyOTQgZXhwICAyMzAyNTg1LjA5Mjk5Mzk0NiAtPiA5Ljk5OTk5OTAwMzE1OTg3MEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgyOTUgZXhwICAyMzAyNTg1LjA5Mjk5NDAzNiAtPiA5Ljk5OTk5OTkwMzE1OTgyMUUrOTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgyOTYgZXhwICAyMzAyNTg1LjA5Mjk5NDA0NSAtPiA5Ljk5OTk5OTk5MzE1OTgyMEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgyOTcgZXhwICAyMzAyNTg1LjA5Mjk5NDA0NiAtPiBJbmZpbml0eSBPdmVyZmxvdyAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIDA8LXg8PDEgZWZmZWN0cw0KLXByZWNpc2lvbjogICAgMzANCi1leHB4MzIwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAwOTc5MTY2NjE3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMjEgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNDk5OTk5NzkxNjY2NjcgSW5leGFjdCBSb3VuZGVkDQotZXhweDMyMiBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5ODk3OTE2NjcxNyBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDIwDQotZXhweDMyMyBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMjQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzI1IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAxNA0KLWV4cHgzMjYgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzI3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZXhweDMyOCBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLS0tIG92ZXJwcmVjaXNlIGFuZCAwPC14PDwxDQotcHJlY2lzaW9uOiAgICA4DQotZXhweDMzMCBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzEgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzMyIGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA3DQotZXhweDMzMyBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzM1IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAzDQotZXhweDMzNiBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzMzcgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzM4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gMDx4PDwxIGVmZmVjdHMNCi1wcmVjaXNpb246ICAgIDMwDQotZXhweDM0MCBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI0OTk5OTAyMDgzMzI4ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzQxIGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMDAwMDIwODMzMzMgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNDIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDEwMjA4MzMzOCAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAyMA0KLWV4cHgzNDMgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzQ0IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM0NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMTQNCi1leHB4MzQ2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDM0NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNDggZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBvdmVycHJlY2lzZSBhbmQgMDx4PDwxDQotcHJlY2lzaW9uOiAgICA4DQotZXhweDM1MCBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzUyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA3DQotZXhweDM1MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTQgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzU1IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAzDQotZXhweDM1NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHgzNTcgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MzU4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gY2FzZXMgbmVhciAxICAgICAgICAgICAgICAtLSAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwDQotcHJlY2lzaW9uOiAgICAyMA0KLWV4cHg0MDEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OTM2NTA0MSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQwMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODE4Mjg0NTg5NjM2ODY5ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDAzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MTgyODQ1ODk5MDg2OTcgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MDQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MDE4MDUyNSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQwNSBleHAgMS4wMDAwMDAwMDAwMDAwICAgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzU0ICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDA2IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MTgyODQ1OTMxNzA2MzUgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MDcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NTg4ODkxNyAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAxNA0KLWV4cHg0MTEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OSAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQxMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDEzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MTQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQxNSBleHAgMS4wMDAwMDAwMDAwMDAwICAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDE2IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MTgyODQ1OTMgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MTcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NiAgSW5leGFjdCBSb3VuZGVkDQotLS0gb3ZlcnByZWNpc2UuLi4NCi1wcmVjaXNpb246ICAgIDcNCi1leHB4NDIxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MjIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQyMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDI0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MjUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQyNiBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDI3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMg0KLWV4cHg0MzEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQzMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDMzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MzQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDQzNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NDM2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg0MzcgZXhwIDEuMDAwMDAwMDAwMDAwMyAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gYmFzaWNzIGF0IGxvdyBwcmVjaXNpb25zDQotcHJlY2lzaW9uOiAzDQotZXhweDUwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KLWV4cHg1MDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1NCAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MDMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzY4ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MDQgZXhwICAgMCAgICAgICAgICAgIC0+IDENCi1leHB4NTA1IGV4cCAgLTAgICAgICAgICAgICAtPiAxDQotZXhweDUwNiBleHAgICAxICAgICAgICAgICAgLT4gMi43MiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUwOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yMEUrNCAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUwOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkNCi1wcmVjaXNpb246IDINCi1leHB4NTExIGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQotZXhweDUxMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDUgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUxMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNyAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotZXhweDUxNCBleHAgICAwICAgICAgICAgICAgLT4gMQ0KLWV4cHg1MTUgZXhwICAtMCAgICAgICAgICAgIC0+IDENCi1leHB4NTE2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTE3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTE4IGV4cCAgIDEwICAgICAgICAgICAtPiAyLjJFKzQgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTE5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQ0KLXByZWNpc2lvbjogMQ0KLWV4cHg1MjEgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCi1leHB4NTIyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA1ICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTIzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjQgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NTI0IGV4cCAgIDAgICAgICAgICAgICAtPiAxDQotZXhweDUyNSBleHAgIC0wICAgICAgICAgICAgLT4gMQ0KLWV4cHg1MjYgZXhwICAgMSAgICAgICAgICAgIC0+IDMgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MjcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MjggZXhwICAgMTAgICAgICAgICAgIC0+IDJFKzQgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWV4cHg1MjkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5DQotDQotLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBvdmVycHJlY2lzZSBib3JkZXJsaW5lcw0KLXByZWNpc2lvbjogICA3DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotZXhweDcwMSBleHAgIDEwMDAwMDAwMDAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDIgZXhwICAxMDAwMDAwMDAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzAzIGV4cCAgMTAwMDAwMDAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcwNCBleHAgIDEwMDAwMDAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDUgZXhwICAxMDAwMDAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzA2IGV4cCAgMTAwMDAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcwNyBleHAgIDEwMDAgICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MDggZXhwICA4ODYuNDk1MjYwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzA5IGV4cCAgODg2LjQ5NTI2MDcgLT4gOS45OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzEwIGV4cCAgODg2LjQ5NTI3ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcxMSBleHAgIDg4Ni40OTUyNiAgIC0+IDkuOTk5OTkyRSszODQgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDE2DQotZXhweDcyMSBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MjIgZXhwICA4ODYuNDk1MjYwODAyNzA3NTg4MiAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MjMgZXhwICA4ODYuNDk1MjYwODAyNzA3NTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzI0IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ICAgLT4gOS45OTk5OTk5OTk5OTk5MTdFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzI1IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzYgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDcyNiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ICAgIC0+IDkuOTk5OTk5OTk5OTk5MTE3RSszODQgSW5leGFjdCBSb3VuZGVkDQotLS0gYW5kIGJ5IHNwZWNpYWwgcmVxdWVzdCAuLi4NCi1wcmVjaXNpb246ICAgMTUNCi1leHB4NzMxIGV4cCAgODg2LjQ5NTI2MDgwMjcwOCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZXhweDczMiBleHAgIDg4Ni40OTUyNjA4MDI3MDcgICAgIC0+IDkuOTk5OTk5OTk5OTk0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzMzIGV4cCAgODg2LjQ5NTI2MDgwMjcwNiAgICAgLT4gOS45OTk5OTk5OTk5ODQxMkUrMzg0IEluZXhhY3QgUm91bmRlZA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLWV4cHg3MzUgZXhwICAyMzAyLjU4NTA5Mjk5NDA1ICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWV4cHg3MzYgZXhwICAyMzAyLjU4NTA5Mjk5NDA0ICAgIC0+IDkuOTk5OTk5OTk5OTQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzM3IGV4cCAgMjMwMi41ODUwOTI5OTQwMyAgICAtPiA5Ljk5OTk5OTk5OTg0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cywgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQNCi1wcmVjaXNpb246ICAgNw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4cHg3NTEgZXhwIC0xMDAwMDAwMDAwICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDc1MiBleHAgLTEwMDAwMDAwMCAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi1leHB4NzUzIGV4cCAtMTAwMDAwMDAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLWV4cHg3NTQgZXhwIC0xMDAwMDAwICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDc1NSBleHAgLTEwMDAwMCAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCi1leHB4NzU2IGV4cCAtMTAwMDAgICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KLWV4cHg3NTcgZXhwIC0xMDAwICAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQotZXhweDc1OCBleHAgLTg4MS44OTAwOSAgICAtPiAgMS4wMDAwMDFFLTM4MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4NzU5IGV4cCAtODgxLjg5MDEgICAgIC0+ICA5Ljk5OTkxRS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2MCBleHAgLTg4NSAgICAgICAgICAtPiAgNC40NjA1RS0zODUgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NjEgZXhwIC04ODggICAgICAgICAgLT4gIDIuMjIxRS0zODYgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzYyIGV4cCAtODkwICAgICAgICAgIC0+ICAzLjAxRS0zODcgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2MyBleHAgLTg5Mi45ICAgICAgICAtPiAgMS43RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NjQgZXhwIC04OTMgICAgICAgICAgLT4gIDEuNUUtMzg4ICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzY1IGV4cCAtODkzLjUgICAgICAgIC0+ICA5RS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc2NiBleHAgLTg5NS43MDU2ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NjkgZXhwIC04OTUuOCAgICAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1leHB4NzcwIGV4cCAtODk1LjczICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQotZXhweDc3MSBleHAgLTg5Ni4zOTg3ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLWV4cHg3NzIgZXhwIC04OTYuMzk4OCAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZA0KLWV4cHg3NzMgZXhwIC04OTguMDA4MSAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZA0KLWV4cHg3NzQgZXhwIC04OTguMDA4MiAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZA0KLQ0KLS0tIHNwZWNpYWwgdmFsdWVzDQotbWF4ZXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotZXhweDgyMCBleHAgICBJbmYgICAgLT4gSW5maW5pdHkNCi1leHB4ODIxIGV4cCAgLUluZiAgICAtPiAwDQotZXhweDgyMiBleHAgICBOYU4gICAgLT4gTmFODQotZXhweDgyMyBleHAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWV4cHg4MjQgZXhwICBzTmFOMTIzIC0+ICBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24NCi1leHB4ODI1IGV4cCAtc05hTjMyMSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uDQotZXhweDgyNiBleHAgICBOYU40NTYgLT4gIE5hTjQ1Ng0KLWV4cHg4MjcgZXhwICAtTmFONjU0IC0+IC1OYU42NTQNCi1leHB4ODI4IGV4cCAgIE5hTjEgICAtPiAgTmFOMQ0KLQ0KLS0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zDQotLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10NCi1wcmVjaXNpb246IDEwMDAwMDAwMA0KLWV4cHg5MDEgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQNCi1wcmVjaXNpb246ICA5OTk5OTk5OQ0KLWV4cHg5MDIgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQNCi0NCi1wcmVjaXNpb246IDkNCi1tYXhFeHBvbmVudDogICAxMDAwMDAwDQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWV4cHg5MDMgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWV4cHg5MDQgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAtMTAwMDAwMA0KLWV4cHg5MDUgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OA0KLWV4cHg5MDYgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCi0NCi0tLQ0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi0tLSBOdWxsIHRlc3QNCi1leHB4OTAwIGV4cCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCi0tLSBSYW5kb21zIFA9NTAsIHdpdGhpbiAwLTk5OQ0KLVByZWNpc2lvbjogNTANCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1leHB4MTUwMSBleHAgNjU2LjM1Mzk3OTUwNTkwMjg1NjEyMjY2MDk1NTk2NTM5OTM0MjEzOTQzODcyODg1NzI4ICAtPiAxLjEyNDM3NTc2MTA2NDAzMTk3ODM2MTExNzg1Mjg4Mzk2NTI2NzIwNjI4MjAwNDAzMTRFKzI4NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwMiBleHAgMC45MzYyMDU3MTA5MzY1MjgwMDIyNTAzODU1MDYwMDc4MDMyMjgzMTIzNjA4Mjc4MTQ3MSAtPiAyLjU1MDI4NjUxMzA5ODYxNzY2ODkxOTk3MTE4NTc4MjU3NzEzMTExNzgwNDY4NDIwMDkgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MDMgZXhwIDAuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTQ3MTQxODMzNzM4NzQxMDU3OTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwODM0MDc4NTg1NjYwMTUxNTA2MjAyNjkxNzQwMjUyNTEyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTA0IGV4cCAwLjAwMDA5MTc0MDU3MjYyODg3Nzg5NjI1NzQ1NTc0Njg2NTQ1MTYzMTY4Nzg4NDU2MjAzIC0+IDEuMDAwMDkxNzQ0NzgwOTIzOTAwNTE0NjcyMjM0MTI1MTUyNDA4MTAwNjA1MTQ3MzI3MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwNSBleHAgMzMuOTA5MTE2ODk3OTczNzk3NzM1NjU3NzUxNTkxMDE0OTI2NjI5MDUxMTE3NTQxMjQzICAtPiA1MzI3NzMxODEwMjUwMDIuMDM1NDM2MTg5MDEzMDY3MjY0OTU4NzA0NzY2MTcyMzIyMjkgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MDYgZXhwIDAuMDAwMDA3NDA0NzA0MTMwMDQ0MDY1OTIxMjQ1NzUyOTUyNzg0NTY5MzY4MDk1ODczMTEgLT4gMS4wMDAwMDc0MDQ3MzE1NDQ5MzMzNTkwMDY2Mzk1NjcwMzA2MTM1NTY3ODg5MjEwODE0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTA3IGV4cCAwLjAwMDAwMDAwMDAwMTI0ODU0OTIyMjIyMTA4ODAyNDUzNzQ2OTIyNDgzMDcxNDQ1NDkyIC0+IDEuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxODY3NDYyMTE3NjIzOTkxMTQyNDk2ODI2MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUwOCBleHAgNC4xNzkzMjgwNjc0MTU1NjU5Nzk0Mjg2OTUxMTU5NDMwNjUxMjU4MzU2MDE0MzkxMzgyICAtPiA2NS4zMjE5NDY1MjAxNDcxOTk0MDQxOTk3ODc4MTEzMzY4NjAwODc5NzUxMTgyNzgxODUgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MDkgZXhwIDQ4NS40MzU5NTc0NTQ2MDY1NTg5Mzc0NjE3OTg5MDI1NTUyOTkxOTIyMTU1MDIwMTY4NiAgLT4gNi42Mzk4NDAzOTIwNDU5NjE3MjU1OTUwNDc2OTUzMTI5Mzc3NDU5ODQ1MzY2NTg1NDYzRSsyMTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTAgZXhwIDAuMDAwMDAwMDAwMDM1NDcyNTk4MDY1OTA4NTYwMzI1Mjc4NzUxNTc4MzAzMjgxNTY1OTcgLT4gMS4wMDAwMDAwMDAwMzU0NzI1OTgwNjY1Mzc3MTI5MzIwNTg5NDA2NzE1MDAwNjg1NTE1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTExIGV4cCAwLjAwMDAwMDAwMDAwMDAwNzU5NjIxNDk3MzM5MTA0MDQ3OTMwNjE2NDc4NjM1MDQyNjc4IC0+IDEuMDAwMDAwMDAwMDAwMDA3NTk2MjE0OTczMzkxMDY5MzMwNTQ3MTI1NzcxNTQ2Mzg4NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxMiBleHAgOS43OTU5MTY4ODIxNzYwMzM5MzA0NTcxNTk1NDc0NDgwNjQwMjg2MDcyNzIwMjMzNzk2ICAtPiAxNzk2MC4yNjExNDYwNDI5NTUxNzkxNjQzMDM2NTM0MTI2NTA3NTE2ODE0MzYzNTI0MzcgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTMgZXhwIDAuMDAwMDAwMDA1NjY2NDIwMDYyNTgyOTA1MjY3ODM5MDE0NTExOTQ5NDMxNjQ1MzU1ODEgLT4gMS4wMDAwMDAwMDU2NjY0MjAwNzg2MzcwNjM0NjA5ODMyNDM4ODE1NjY1MjQ5MzQ3NjUwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTE0IGV4cCA3NDEuMjk4ODg3OTExMzQyOTgxOTQwODg4Mjc1NzIzNzQ3MTg5NDA5MjU4MjAwMjczNTQgIC0+IDguNzUwMTY5NDAwNjMxNzMzMjgwODEyODk0NjY2NjQwMjYyMjQzMjA2NDkyMzE5ODczMUUrMzIxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTE1IGV4cCAwMzIuNzU1NzMwMDM1NTI1MTc2Njg4MDg1MjkwOTk4OTcxNTM3MTA4ODcwMTQ5NDc5MzUgIC0+IDE2ODEyNTE5NjU3ODY3OC4xNzcyNTg0MTEwODYxNzk1NTkwNDQyNTM0NTYzMTA5MjMzOSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxNiBleHAgNDIuMzMzNzAwNzI2NDI5MzMzMzA4NTk0MjY1NTUzNDIyOTAyNDYzNzM3Mzk5NDM3NjQ0ICAtPiAyNDI4MjQ1Njc1ODY0MTcyNDc1LjQ2ODExMTk0OTMwNDU2NTc3OTczMDkzNjk2NzIwMTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MTcgZXhwIDAuMDAwMDAwMDAwMDAwMDA1NTk2ODI2MTY4NzY0OTE4ODgxOTc2MDkxNTg4MDI4MzU3OTggLT4gMS4wMDAwMDAwMDAwMDAwMDU1OTY4MjYxNjg3NjQ5MzQ1NDQyMDc2NzMyNzM5NTc3MDQ5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTE4IGV4cCAwLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MjgwMTkzNTg0NzU4MzAwOTczNTQ5NDg2MzEyIC0+IDEuMDAwMDAwMDAwMDAwODA3MDM2ODg2NjgzMTI3NTkwMTE1ODE2NDMyMTg2NzkxNDM0MiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUxOSBleHAgNjQwLjcyMzk2MDEyNzk2NTA5NDgyMzgyNzEyODkxNzA5MDcyNTcwNjUzNjA2ODM4MjUxICAtPiAxLjgzMTgwOTQ5OTA2ODMzOTQyMjkzMDQxMzMwNjg5ODM5MTQyMzY5OTUzMjY4OTEwNDVFKzI3OCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyMCBleHAgMC4wMDAwMDAwMDAwMDAwMDUwOTQ1ODkyMjE2NzYzMTA3MTQxNjk0ODExMjIxOTUxMjIyNCAtPiAxLjAwMDAwMDAwMDAwMDAwNTA5NDU4OTIyMTY3NjMyMzY5MTU4OTE0OTkzMjQzNTg1NTYgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjEgZXhwIDYuNzY3MDM5NDMxNDMxNTIwNjM3ODYyNTIyMTU4Mzk3MzQxNDY2MDcyNzk2MDI0MTM5NSAgLT4gODY4LjczNjEzMDEyODIyMDMxMzY3ODA2MjQ4Njk3MDkyODg0NDE1MTE5NTY4MjcxMzE1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTIyIGV4cCAwNC44MjMyMTc0MDc0MTI5NjM1MDY2MzgyNjcyMjY4OTEwMjQxMzgwNTQ3ODMxMjI1NDggIC0+IDEyNC4zNjQ1NzkyOTU4ODgzNzEyOTczMTgyMTA3NzU4NjcwNTUwNTU2NTkwNDIwNTM2NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyMyBleHAgMTkzLjUxMzA3ODc4NzAxMTk2NDAzOTkxMjA4NDgyNTIwMTE1MzU5NjkwMTA2MTQzNjE1ICAtPiAxLjEwMDY4MzA4NzI4NTQ3MTU2NzczOTA5MTQ2NTU0NTIyNjE1NTA3Njg5NTc1NzYwMzRFKzg0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTI0IGV4cCA1LjczMDc3NDkwMzgzMDM2NTA1MzkyMDAzNDU5MDEyMTA0OTcwMTU2MTczOTM5NzA0NjMgIC0+IDMwOC4yMDgwMDc0MzEwNjg0MzA4MzUyMjcyMTUyMzcxNTY0NTk1MDU3NDg2NjQ5NTE5NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyNSBleHAgMC4wMDAwMDAwMDAwMDA5NTIxNzgyNTE5OTc5Nzk2NTIwMDU0MTE2OTEyMzc0MzUwMDI2NyAtPiAxLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5ODQzMjk3MzcxNzIwMDc5OTEzOTAzODEyNzMgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjYgZXhwIDAuMDAwMjcxMzE0NDA5NDkxODMzNzA5NjYzOTM2ODI2MTc5MzAxNTM0OTUwMjg5MTkxNDAgLT4gMS4wMDAyNzEzNTEyMTg1NzUxMDIyOTA2MDU4MTYwNDgwNjA2NTk4NzU0OTEzNjA3MzY0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTI3IGV4cCAwLjAwMDAwMDAwMDY0NTAzMDU5MTE0NjgwNjgyMzQzMDAyMzE1NjYyMDY5MjcyNzA3MTIzIC0+IDEuMDAwMDAwMDAwNjQ1MDMwNTkxMzU0ODM5MDU1MjMyMzUxNzQwMzYxMzEzNTQ5NjYzMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUyOCBleHAgMC4wMDAwMDAwMDAwMDAwMDA5NTYxNjY0MzUwNjUyNzI4ODg2NjIzNTIzODU0ODQ0MDU5MyAtPiAxLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3MzM0NTc4OTQ3ODE1ODIwMDkwOTQgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MjkgZXhwIDAuMDAwMDAwMDAwMDAwMDAwODY0NDk5NDI4MTE2Nzg2NTAyNDQ0NTk1NTAyNTI3NDM0MzMgLT4gMS4wMDAwMDAwMDAwMDAwMDA4NjQ0OTk0MjgxMTY3ODY4NzYxMjQyMjYxMDk2NTI5OTg2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTMwIGV4cCAwLjA2MjIzNDg4MzU1NjM1MzU5OTY1NjgzMDUzMTU3NzI5MjA0OTg4MzgxODg3NjIxODUwIC0+IDEuMDY0MjEyMjgxMzM5MjQwNjY1Nzc4OTY4ODkzMTgzODkxOTMyMzgyNjI1MDYzMDgzMSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzMSBleHAgMC4wMDAwMDQwMDcxMDgwNzgwNDQyOTQzNTUwMjY1NzEzMTkxMjMwODY4MDY3NDA1NzA1MyAtPiAxLjAwMDAwNDAwNzExNjEwNjUxMjU5MjU2MjA4OTAwMTkzMTk4MzIxMjc4NjM1NTkyNjAgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzIgZXhwIDg1LjUyMjc5Njg5NDc0NDU3NjIxMTU3MzIzMjA1NTQ5NDU1MTQyOTI5Nzg3ODQxMzAxNyAgLT4gMTM4NzAwNzM2ODY0MDQyMjg0NTI3NTc3OTk3NzAyNTEwODUxNzcuODUzMzM3MzY4OTM1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTMzIGV4cCA5LjE0OTY3MjA4MTEzNjM2Nzg2OTY5MzgwMzYzNzk3NTY2NjM1NDgzNTMzOTk5NTQzNjMgIC0+IDk0MTEuMzUzNzEyMjgzMjc0MzM4Njc4MzU5NzYyOTE2MTc2MzA1NzM3MDAzNDQ5NTE1NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzNCBleHAgOC4yMjE1NzA1MjQwNzg4Mjk0NDcyOTQ0MzgyMDU2MzMwNTE2NzM4NTc3Nzg1MTc3OTQyICAtPiAzNzIwLjM0MDY4MTMzODMwNzY5NTM4OTk2NTQ3MDE2MTUwODQ0MjU1OTgzNzc3NTgxODkgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzUgZXhwIDAuMDAwMDAwMDAwMTU3NzIwNjQ1Njk2NDA2MTMxNDI4MjMyMDM3MjY4MjEwNzYyMzk1NjEgLT4gMS4wMDAwMDAwMDAxNTc3MjA2NDU3MDg4NDQwMzI0NjgzMzE1Nzg4MzU4OTI2MTI5ODMwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTM2IGV4cCAwLjU4MTc5MzQ2NDczOTU5NTMxNDMyNjI0MTUzNTc2ODgzNDQwNjI1NTM4MDE3NTMyNDgwIC0+IDEuNzg5MjQ0NTAxODI3NTM2MDE2Mzc5NzAyMjM3MjY1NTgzNzE4ODQyMzE5NDg2MzYwNSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTUzNyBleHAgMzMuNTU1NzI2MTk3MTQ5NTI1MDYxNDU1NTE3Nzg0ODcwNTcwNDcwODMzNDk4MDk2NTU5ICAtPiAzNzQxNjgwNjk4OTYzMjQuNjI1NzgwNzMxNDg5OTM1MjY2MjYzMDcwOTU4NTQ0MDc5NTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDE1MzggZXhwIDkuNzg5ODA3OTgwMzkwNjIxNTA5NDE0MDAxMDAwOTU4MzM3NTUzNzI1OTgxMDM5ODY1OSAgLT4gMTc4NTAuODc4MTE5OTEyMjA4ODg4MjE3MTAwOTk4MDE5OTg2NjM0NjIwMzY4NTM4NDI2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxNTM5IGV4cCA4OS4xNTc2OTczMjcxNzQ1MjE1NDI1MDI0NDc5NTMwMzI1MzY1NDEwMzg2MzY5NjYzNDcgIC0+IDUyNTY0OTE1MjMyMDE2NjUwMzc3MTIyNDE0OTMzMDQ0ODA4OTU1MC42NzI5MzgyOTIyNyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTU0MCBleHAgMjUuMDIyOTQ3NjAwMTIzMzI4OTEyMDI5MDUxODk3MTcxMzE5NTczMzIyODg4NTE0ODg1ICAtPiA3MzY3NjM0MzQ0Mi45NTI1MTc4MjQzNDU0MzE0Mzc2ODMxNTMzMDQ2NDU4NTE5NjA1MjQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZXhwKDEpIGF0IDM0DQotUHJlY2lzaW9uOiAzNA0KLWV4cHgxMjAwIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFJhbmRvbXMgUD0zNCwgd2l0aGluIDAtOTk5DQotUHJlY2lzaW9uOiAzNA0KLW1heEV4cG9uZW50OiA2MTQ0DQotbWluRXhwb25lbnQ6IC02MTQzDQotZXhweDEyMDEgZXhwIDMwOS41OTQ4ODU1ODIxNTEwMjEyOTk2NzAwNjQ1MDg3MTg4ICAtPiAyLjg1MzMxOTY5MjkwMTM4NzUyMTIwMTczODAxNTA1MDcyNEUrMTM0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjAyIGV4cCA5LjkzNjU0MzA2ODcwNjIxMTQyMDQyMjgwMzk2MjY4MDE2NCAgLT4gMjA2NzIuMTU4MzkyMDMxNzE4Nzc0NzY1MTEwOTMyNzYwMjIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDMgZXhwIDYuMzA3ODcwMzIzODgxNTA1Njg0NDI5ODM5NDkxNzA3OTA4ICAtPiA1NDguODc0Nzc3NzA1NDYzNzI5NjEzNzI3NzM5MTc1NDY2NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIwNCBleHAgMC4wMDAzNTQzMjgxMzg5NDM4NDIwNTM1MjAxMzA4MjgyNTAzIC0+IDEuMDAwMzU0MzkwOTIwNTczNzQ2MTY0NzMzMzUwODQzMTU1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjA1IGV4cCAwLjAwMDAwMzcwODc0NTMzNjM5MTgzNzU1OTgzOTQ5MjAyMjkgLT4gMS4wMDAwMDM3MDg3NTIyMTM3OTYzMjQ4NDE5MjAxODkzMjMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDYgZXhwIDAuMDAyMDQzMjMxMjY4NzUxMjQzODA0MDIyMjQ0NDExNjU4NSAtPiAxLjAwMjA0NTMyMDA4ODE2NDgyNjAxMzU2MTYzMDk3NTMwOCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIwNyBleHAgNi44NTYzMTMzNDAwMzIxNzc2NzI1NTAzNDMyMTYxMjk1ODYgIC0+IDk0OS44NTg3OTgxNjA0MTQ0MTQ3OTgzNTg5NjYwNTI0Mzk2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjA4IGV4cCAwLjAwMDAwMDAwMDA0MDIwOTQ5MjgzMzM4MTU2NDMzMjY0MTggLT4gMS4wMDAwMDAwMDAwNDAyMDk0OTI4MzQxODk5NjU5ODk2MTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMDkgZXhwIDAuMDA0OTYxMDc4NDcyMjQxMjExNzYzMjY0NzAwMzU0NTgzOSAtPiAxLjAwNDk3MzQwNDk5NzkwMTk4NzAzOTU4OTAyOTI3NzgzMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxMCBleHAgMC4wMDAwODkxNDcxODgzNzI0MDY2OTA5NzQ2Nzg2NzAyNjg2IC0+IDEuMDAwMDg5MTUxMTYyMTAxMDg1NDEyNzgwMDg4MjY2Njk5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjExIGV4cCAwOC41OTk3OTE3MDM3NjA2MTg5MDY4NDcyMzIxMTExMjU2NiAgLT4gNTQzMC41MjgzMTQ5MjA5MDU3MTQ2MTUzMzkyNzM3MzgwOTcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTIgZXhwIDkuNDczMTE3MDM5MzQxMDAzODU0ODcyNzc4MTEyNzUyNTkwICAtPiAxMzAwNS4zNjIzNDMzMTIyNDk1MzQ2MDA1NTg5NzkxMzkxNyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxMyBleHAgMC4wOTk5MDYwNzI0NjkyMjA3NjQ4NDI5OTY5OTk5MzEwMTE4IC0+IDEuMTA1MDY3MTE2OTc1MTkwNjAyMjk2MDUyNzAwNzI2ODAyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjE0IGV4cCAwLjAwMDAwMDA5Mjc4MDQ1MzM1NTU4Nzc4ODQwODIyNjkyNDcgLT4gMS4wMDAwMDAwOTI3ODA0NTc2NTk2OTQxODM5NTQ3NDA3NzIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTUgZXhwIDAuMDM3NjU3ODU4Mzg3Mjg4OTkxNjI5ODc3MjgxODI2NTY3NyAtPiAxLjAzODM3NTkwMDQ4OTc3MTk0NjQ3Nzg1NzgxODQ0NzU1NiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxNiBleHAgMjYxLjY4OTY0MTE2OTc1Mzk1MjQ5MTE1MzYxMTY3MTIzMDcgIC0+IDQuNDcwNjEzNTYyMTI3NDY1MDk1MjQxNjAwMTc0OTQxNDYwRSsxMTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMTcgZXhwIDAuMDcwOTk5NzQyMzI2OTE2Mjk4MDg3NTgyNDIxMzg4OTYyNiAtPiAxLjA3MzU4MDk0OTIzNTQwNzk0OTQxNzgxNDQ4NTUzMzE3MiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIxOCBleHAgMC4wMDAwMDAwNDQ0NjA1NTgzMjk1MTY5ODk1MjM1NjU4NzMxIC0+IDEuMDAwMDAwMDQ0NDYwNTU5MzE3ODg3NjI3NjU3NTkzOTAwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjE5IGV4cCAwLjAwMDAwMjEyMjQwNzI4NTQ3Nzc1MTIyODEzNjk4MTUxODUgLT4gMS4wMDAwMDIxMjI0MDk1Mzc3ODU2ODczOTA2MzEwNzA5MDYgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjAgZXhwIDU0Ny41MTc0NDYyNTc0MTU2ODg1NDczNTU4NDg1NDc1MDUyICAtPiA2LjA3ODYyOTI0NzM4MzgwNzk0MjYxMjExNDU3OTcyODY3MkUrMjM3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjIxIGV4cCAwLjAwMDAwMDkwNjc1OTgwNDE2MTUxOTIwMDIzMzk4NDQ2NzAgLT4gMS4wMDAwMDA5MDY3NjAyMTUyNjgzMTQ2ODAxMTUzNzQzODcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjIgZXhwIDAuMDMxNjQ3NjUwMDMwODA2NTM2NTgwMzQ1NTUzMzI0NDYwMyAtPiAxLjAzMjE1Mzc2MTg4MDE4Nzk3NzY1ODM4Nzk2MTc2OTAzNCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyMyBleHAgODQuNDYxNjA1MzAzNzc2NDUxMDE4MzM5OTY3MDYzODQ0NzMgIC0+IDQuNzk5NjQ0OTk1ODk3OTY4MzgzNTAzMjY5ODcxNjk3ODU2RSszNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyNCBleHAgMC4wMDAwMDAwMDAwNTIwNTk5NzQwMjkwODQ4MDE4OTA0MTQ1IC0+IDEuMDAwMDAwMDAwMDUyMDU5OTc0MDMwNDM5OTIyMzM4MzkzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjI1IGV4cCAwLjAwMDAwMDY3NDg1MzA2NDAwOTM2MjA2NjU2NTE3MjY3MDggLT4gMS4wMDAwMDA2NzQ4NTMyOTE3MjI3NDIyOTIzMzE4MTI5OTcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjYgZXhwIDAuMDAwMDAwMDExNjg1MzExOTc2MTA0MjAyMDUwNzkxNjE2OSAtPiAxLjAwMDAwMDAxMTY4NTMxMjA0NDM3NzQ2MDMwNjE2NTIwMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIyNyBleHAgMC4wMDIyNTkzODE4MDk0MjU4NjM2NzI3NjE2ODg2NjkzMjgwIC0+IDEuMDAyMjYxOTM2MTM1ODc2ODkzNzA3MDk0ODQ1NTQzNDYxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjI4IGV4cCAwLjAwMjkzOTg4NTc2NzM0Nzg5MTIyNDk4NTY1MDk2Njc1MTcgLT4gMS4wMDI5NDQyMTE0Njk0OTUwODY4MTMwODc2NTEyODcwMTIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMjkgZXhwIDAuNzUxMTQ4MDAyOTkyODgwMjc3NTM3NjI3MDU1NzYzNjk2MyAtPiAyLjExOTQzMTczNDUxMDMyMDE2OTgwNjk3NjU2OTM2Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzMCBleHAgMTc0Ljk0MzE5NTIxNzY3NTA2NzExNTA4ODY0MjMwNDg0NDcgIC0+IDkuNDgxMjIyMzA1Mzc0OTU1MDExNDY0NjE5NDY4MDQ0MDUxRSs3NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzMSBleHAgMC4wMDAwODEwNjEyNDUxNjk0MTM2MTI5MTk5ODk1MTY0NDI0IC0+IDEuMDAwMDgxMDY0NTMwNzIwOTI0MTg2NjE1MTQ5NjQ2OTIwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjMyIGV4cCA1MS4wNjg4ODk4OTcwMjY2OTI4ODE4MDk0NjI3MjQ5OTAzNSAgLT4gMTUwOTg2MTM4ODg2MTkxNjUwNzM5NTkuODk4OTYwMTg3NDkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMzMgZXhwIDAuMDAwMDAwMDAwNTk5Mjg4NzU5OTQzNzA5MzY1MTQ5NDUxMCAtPiAxLjAwMDAwMDAwMDU5OTI4ODc2MDEyMzI4Mjg3NDA4Mjc1OCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzNCBleHAgNzE0Ljg1NDkwNDY3NjEwNTQ4NTYzMTExMDg4Mjg5MDM5NzIgIC0+IDIuODY3NzQ0NTQ0ODkxMDgxMTE3MzgxNTk1MDgwNDgwNzg0RSszMTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMzUgZXhwIDAuMDAwMDAwMDAwNDQ2ODI0NzgwMjk5MDY0MzY0NTYwNzExMCAtPiAxLjAwMDAwMDAwMDQ0NjgyNDc4MDM5ODg5MDU1NjcyMDIzMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzNiBleHAgODMxLjU4MTgxNTE1ODk4OTAzNjYzMjM1NTE2NzIwNDM3MDkgIC0+IDEuNDE3MDc3NDA5MTgyNjI0OTY5NDM1OTM4MDYyMjYxNjU1RSszNjEgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyMzcgZXhwIDAuMDAwMDAwMDAwNjg2ODMyMzgyNTE3OTYwNTc0NzEwODA0NCAtPiAxLjAwMDAwMDAwMDY4NjgzMjM4Mjc1MzgyOTkzNTYwMjQ1NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTIzOCBleHAgMC4wMDAwMDAxMzA2NzQwMjY2NDA4OTc2ODQwMjI4NDQwMjU1IC0+IDEuMDAwMDAwMTMwNjc0MDM1MTc4NzQ4Njc1MTg3NjQ4MDk4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMjM5IGV4cCAwLjMxODIyMTA2MDkwMjIyNjc3MDQ4MTE1MDI0MTIzMzUxNjMgLT4gMS4zNzQ2ODAxMTU2Njc3OTgxODU3NTg5MjcyNDc4OTQ4NTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEyNDAgZXhwIDAuMDE0Nzc0MTIzNDE3OTEwNDQzNzQ0MDI2NDY0NDI5NTUwMSAtPiAxLjAxNDg4MzgwMDIzOTk1MDY4MjYyODI3NzUzNDgzOTIyMiBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBSYW5kb21zIFA9MTYsIHdpdGhpbiAwLTk5DQotUHJlY2lzaW9uOiAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWV4cHgxMTAxIGV4cCA4LjQ3MzAxMTUyNzAxMzcyNCAgLT4gNDc4My45MDA2NDM5NjkyNDYgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDIgZXhwIDAuMDAwMDA1NTc1MzAyMjc2NCAtPiAxLjAwMDAwNTU3NTMxNzgxOCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEwMyBleHAgMC4wMDAwMzIzNDc0MTE0NDgyIC0+IDEuMDAwMDMyMzQ3OTM0NjMxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTA0IGV4cCA2NC41NDM3NDEzODU0NDE2NiAgLT4gMS4wNzM5NjY0NzYxNzM1MzFFKzI4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTA1IGV4cCA5MC40NzIwMzI0NjQxNjU2OSAgLT4gMS45NTY2MTA4ODcyNTA2NDNFKzM5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTA2IGV4cCA5LjI5OTkzMTUzMjM0Mjc1NyAgLT4gMTA5MzcuMjcwMzMzMjUyMjcgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMDcgZXhwIDguNzU5Njc4NDM3ODUyMjAzICAtPiA2MzcyLjA2MjIzNDQ5NTM4MSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEwOCBleHAgMC4wMDAwOTMxNzU1MTI3MTcyIC0+IDEuMDAwMDkzMTc5ODUzNjkwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTA5IGV4cCAwLjAwMDAwMjgxMDExNTgzNzMgLT4gMS4wMDAwMDI4MTAxMTk3ODYgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMTAgZXhwIDAuMDAwMDAwODAwODEzMDkxOSAtPiAxLjAwMDAwMDgwMDgxMzQxMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExMSBleHAgOC4zMzk3NzE3MjIyOTkwNDkgIC0+IDQxODcuMTMzODAzMDgxODc4IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTEyIGV4cCAwLjAwMjYxNDA0OTc5OTU0NzQgLT4gMS4wMDI2MTc0Njk0MDY3NTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMTMgZXhwIDAuNzQ3ODAzMzM1NjI2MTc3MSAtPiAyLjExMjM1NDc4MTk3NTQxOCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExNCBleHAgNTEuNzc2NjM3NjE4Mjc5NjYgIC0+IDMuMDY0MTM1ODAxMTIwMzY1RSsyMiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExNSBleHAgMC4xNTI0OTg5NzgzMDYxMDEyIC0+IDEuMTY0NzQxMjcyMDg0OTU1IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTE2IGV4cCAwLjAwNjYyOTg3OTg2NjkyMTkgLT4gMS4wMDY2NTE5MDYxNzA3OTEgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMTcgZXhwIDkuOTU1MTQxODY1NTM0OTYwICAtPiAyMTA2MC4yMzMzNDI4NzAzOCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExOCBleHAgOTIuMzQ1MDMwNTkxOTg0ODMgIC0+IDEuMjczMzE4OTkzNDgxMjI2RSs0MCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTExOSBleHAgMC4wMDAwNzA5Mzg4Njc3MzQ2IC0+IDEuMDAwMDcwOTQxMzgzOTU2IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTIwIGV4cCA3OS4xMjg4MzAzNjQzMzIwNCAgLT4gMi4zMTg1Mzg4OTkzODkyNDNFKzM0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTIxIGV4cCAwLjAwMDAwOTA4ODE1NDg4NzMgLT4gMS4wMDAwMDkwODgxOTYxODUgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjIgZXhwIDAuMDQyNDgyODgwOTYwMzQxMSAtPiAxLjA0MzM5ODE5NDI0NTcyMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyMyBleHAgMC44MDA5MDM1ODkxNDI3NDE2IC0+IDIuMjI3NTUyODExOTMzMzEwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTI0IGV4cCA4LjgyNTc4NjE2NzI4MzEwMiAgLT4gNjgwNy41NDA0NTUyODk5OTUgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjUgZXhwIDEuNTM1NDU3MjQ5NzQ2Mjc1ICAtPiA0LjY0MzQ0ODI2MDE0Njg0OSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyNiBleHAgNjkuMDIyNTQyNTQzNTU4MDAgIC0+IDkuNDY0NzU0NTAwNjcwNjUzRSsyOSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEyNyBleHAgMC4wMDA3MDUwNTU0MzY4NzEzIC0+IDEuMDAwNzA1MzA0MDQ2ODgwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTI4IGV4cCAwLjAwMDAwODEyMDY1NDk1MDQgLT4gMS4wMDAwMDgxMjA2ODc5MjMgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMjkgZXhwIDAuNjIxNzc0ODU0NjQxMTM3ICAtPiAxLjg2MjIzMDI5ODU1NDkwMyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzMCBleHAgMy44NDc2MjkwMzE0MDQzNTQgIC0+IDQ2Ljg4MTc3NjEzNTY4MjAzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTMxIGV4cCAyNC44MTI1MDE4NDY5NzczMiAgLT4gNTk2OTQyNjg0NTYuMTk5NjYgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzIgZXhwIDUuMTA3NTQ2NTAwNTE2MDQ0ICAtPiAxNjUuMjY0MzgwOTc1NTY3MCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzMyBleHAgNzkuMTc4MTA5NDM5NTE5ODYgIC0+IDIuNDM1NjU2MzcyNTQxMzYwRSszNCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzNCBleHAgMC4wMDUxMzk0Njk1NjY3MDE1IC0+IDEuMDA1MTUyNjk5Mjk1MzAxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTM1IGV4cCA1Ny40NDUwNDQ4ODUwMTcyNSAgLT4gOC44NzI5MDg1NjY5Mjk2ODhFKzI0IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTM2IGV4cCAwLjAwMDA1MDgzODg5NjgwMzYgLT4gMS4wMDAwNTA4NDAxODkxMjIgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzcgZXhwIDY5LjcxMzA5OTMyMTQ4OTk3ICAtPiAxLjg4ODA1Mzc0MDY5MzU0MUUrMzAgSW5leGFjdCBSb3VuZGVkDQotZXhweDExMzggZXhwIDAuMDA2NDE4MzQxMjk4MTUwMiAtPiAxLjAwNjQzODk4Mjk4ODgzNSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTEzOSBleHAgOS4zNDY5OTEyMjA4MTQ2NzcgIC0+IDExNDY0LjI3ODAyMDM1MDgyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMTQwIGV4cCAzMy4wOTA4NzEzOTk5OTE1MiAgLT4gMjM1MDYyMjI5MTY4NzYzLjUgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUmFuZG9tcyBQPTcsIHdpdGhpbiAwLTkNCi1QcmVjaXNpb246IDcNCi1tYXhFeHBvbmVudDogOTYNCi1taW5FeHBvbmVudDogLTk1DQotZXhweDEwMDEgZXhwIDIuMzk1NDQxICAtPiAxMC45NzMwNCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAwMiBleHAgMC42NDA2Nzc5IC0+IDEuODk3NzY3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDAzIGV4cCAwLjU2MTgyMTggLT4gMS43NTM4NjUgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMDQgZXhwIDMuMDU1MTIwICAtPiAyMS4yMjM3MyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAwNSBleHAgMS41MzY3OTIgIC0+IDQuNjQ5NjUwIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDA2IGV4cCAwLjA4MDE1OTEgLT4gMS4wODM0NTkgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMDcgZXhwIDAuMDk2Njg3NSAtPiAxLjEwMTUxNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAwOCBleHAgMC4wNjQ2NzYxIC0+IDEuMDY2ODEzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDA5IGV4cCAwLjAwOTU2NzAgLT4gMS4wMDk2MTMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTAgZXhwIDIuOTU2ODU5ICAtPiAxOS4yMzc0NSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxMSBleHAgNy41MDQ2NzkgIC0+IDE4MTYuNTIyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDEyIGV4cCAwLjAwNDUyNTkgLT4gMS4wMDQ1MzYgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTMgZXhwIDMuODEwMDcxICAtPiA0NS4xNTM2NCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxNCBleHAgMS41MDIzOTAgIC0+IDQuNDkyNDEzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDE1IGV4cCAwLjAzMjE1MjMgLT4gMS4wMzI2NzUgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTYgZXhwIDAuMDA1NzIxNCAtPiAxLjAwNTczOCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAxNyBleHAgOS44MTE0NDUgIC0+IDE4MjQxLjMzIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDE4IGV4cCAzLjI0NTI0OSAgLT4gMjUuNjY4MTAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMTkgZXhwIDAuMzE4OTc0MiAtPiAxLjM3NTcxNiBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyMCBleHAgMC44NjIxNjEwIC0+IDIuMzY4MjczIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDIxIGV4cCAwLjAxMjI1MTEgLT4gMS4wMTIzMjYgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjIgZXhwIDIuMjAyMDg4ICAtPiA5LjA0Mzg3NyBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyMyBleHAgOC43NzgyMDMgIC0+IDY0OTEuMjAyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDI0IGV4cCAwLjE4OTYyNzkgLT4gMS4yMDg4MDAgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjUgZXhwIDAuNDUxMDk0NyAtPiAxLjU3MDAzMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyNiBleHAgMC4yNzY0MTMgIC0+IDEuMzE4MzkyIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDI3IGV4cCA0LjQ5MDA2NyAgLT4gODkuMTI3NDIgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMjggZXhwIDAuMDQzOTc4NiAtPiAxLjA0NDk2MCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAyOSBleHAgMC44MTY4MjQ1IC0+IDIuMjYzMzAxIEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDMwIGV4cCAwLjAzOTE2NTggLT4gMS4wMzk5NDMgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzEgZXhwIDkuMjYxODE2ICAtPiAxMDUyOC4yNCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzMiBleHAgOS42MTExODYgIC0+IDE0OTMwLjg3IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDMzIGV4cCA5LjExODEyNSAgLT4gOTExOS4wODcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzQgZXhwIDkuNDY5MDgzICAtPiAxMjk1My4wMCBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzNSBleHAgMC4wNDk5OTgzIC0+IDEuMDUxMjY5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDM2IGV4cCAwLjAwNTA3NDYgLT4gMS4wMDUwODcgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwMzcgZXhwIDAuMDAxNDY5NiAtPiAxLjAwMTQ3MSBJbmV4YWN0IFJvdW5kZWQNCi1leHB4MTAzOCBleHAgOS4xMzg0OTQgIC0+IDkzMDYuNzM5IEluZXhhY3QgUm91bmRlZA0KLWV4cHgxMDM5IGV4cCAwLjAwNjU0MzYgLT4gMS4wMDY1NjUgSW5leGFjdCBSb3VuZGVkDQotZXhweDEwNDAgZXhwIDAuNzI4NDgwMyAtPiAyLjA3MTkzMCBJbmV4YWN0IFJvdW5kZWQNCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGV4cC5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBleHBvbmVudGlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGVzdHMgb2YgdGhlIGV4cG9uZW50aWFsIGZ1bnRpb24uICBDdXJyZW50bHkgYWxsIHRlc3RjYXNlcyBoZXJlCistLSBzaG93IHJlc3VsdHMgd2hpY2ggYXJlIGNvcnJlY3RseSByb3VuZGVkICh3aXRoaW4gPD0gMC41IHVscCkuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2lhdGlvbiwgZXRjLikKK2V4cHgwMDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHgwMDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1Mzk5OTI5OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzY3ODc5NDQxIEluZXhhY3QgUm91bmRlZAorZXhweDAwNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDAwNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDAwNiBleHAgICAxICAgICAgICAgICAgLT4gMi43MTgyODE4MyAgSW5leGFjdCBSb3VuZGVkCitleHB4MDA3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDggZXhwICAgMTAgICAgICAgICAgIC0+IDIyMDI2LjQ2NTggIEluZXhhY3QgUm91bmRlZAorZXhweDAwOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKKworLS0gdGlueSBlZGdlIGNhc2VzCitwcmVjaXNpb246ICAgNworZXhweDAxMSBleHAgIDAuMSAgICAgICAgICAtPiAgMS4xMDUxNzEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxMiBleHAgIDAuMDEgICAgICAgICAtPiAgMS4wMTAwNTAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxMyBleHAgIDAuMDAxICAgICAgICAtPiAgMS4wMDEwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNCBleHAgIDAuMDAwMSAgICAgICAtPiAgMS4wMDAxMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNSBleHAgIDAuMDAwMDEgICAgICAtPiAgMS4wMDAwMTAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNiBleHAgIDAuMDAwMDAxICAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAxNyBleHAgIDAuMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxOCBleHAgIDAuMDAwMDAwMyAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAxOSBleHAgIDAuMDAwMDAwNCAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMCBleHAgIDAuMDAwMDAwNSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMSBleHAgIDAuMDAwMDAwOCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMiBleHAgIDAuMDAwMDAwOSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyMyBleHAgIDAuMDAwMDAxMCAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNCBleHAgIDAuMDAwMDAxMSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNSBleHAgIDAuMDAwMDAwMDkgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNiBleHAgIDAuMDAwMDAwMDUgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyNyBleHAgIDAuMDAwMDAwMDQgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDAyOCBleHAgIDAuMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlIHplcm9zCitleHB4MDMwIGV4cCAgMC4wMDAwMDAwMCAgIC0+ICAxCitleHB4MDMxIGV4cCAgMEUrMTAwICAgICAgIC0+ICAxCitleHB4MDMyIGV4cCAgMEUtMTAwICAgICAgIC0+ICAxCitleHB4MDMzIGV4cCAtMC4wMDAwMDAwMCAgIC0+ICAxCitleHB4MDM0IGV4cCAtMEUrMTAwICAgICAgIC0+ICAxCitleHB4MDM1IGV4cCAtMEUtMTAwICAgICAgIC0+ICAxCisKKy0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2V4cHgwNDEgZXhwICAxICAgICAgICAgIC0+ICAyLjcxODI4MiAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQyIGV4cCAtMSAgICAgICAgICAtPiAgMC4zNjc4Nzk0IEluZXhhY3QgUm91bmRlZAorZXhweDA0MyBleHAgIDEwICAgICAgICAgLT4gIDIyMDI2LjQ3ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDQgZXhwIC0xMCAgICAgICAgIC0+ICAwLjAwMDA0NTM5OTkzIEluZXhhY3QgUm91bmRlZAorZXhweDA0NSBleHAgIDEwMCAgICAgICAgLT4gIDIuNjg4MTE3RSs0MyAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ2IGV4cCAtMTAwICAgICAgICAtPiAgMy43MjAwNzZFLTQ0ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDcgZXhwICAxMDAwICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDggZXhwIC0xMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDA0OSBleHAgIDEwMDAwMDAwMCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDA1MCBleHAgLTEwMDAwMDAwMCAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCisKKy0tIG1pc2NlbGxhbmVhCistLSBzaW1pbGFyIHRvICdWRiBidWcnIHRlc3QsIGF0IDE3LCBidXQgd2l0aCBsYXN0IGRpZ2l0IGNvcnJlY3RlZCBmb3IgZGVjaW1hbAorcHJlY2lzaW9uOiAxNgorZXhweDA1NSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiBJbmV4YWN0IFJvdW5kZWQKKy0tICByZXN1bHQgZnJvbSBOZXRSZXh4L0phdmEgcHJvdG90eXBlIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExNzY3NzkyOTYyODYxNzI0NjA1NDQ1OTY0NDcxMTEwOEUtMjM2CistLSAgIHJlc3VsdCBmcm9tIFJleHggKHNlcmllcykgdmVyc2lvbiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NkUtMjM2CitwcmVjaXNpb246IDE3CitleHB4MDU2IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK2V4cHgwNTcgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2V4cHgwNTggZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTEyRS0yMzYgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitleHB4MDU5IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gcm91bmRpbmcgaW4gYXJlYXMgb2YgLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMKK3ByZWNpc2lvbjogICA1MAorZXhweDEwMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3MzM3NDk5NTA3OTI1MDA3MzgxMSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAzMQorZXhweDEwMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMwCitleHB4MTAzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjkKK2V4cHgxMDQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOAorZXhweDEwNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI3CitleHB4MTA2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjYKK2V4cHgxMDcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNQorZXhweDEwOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI0CitleHB4MTA5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjMKK2V4cHgxMTAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMgorZXhweDExMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIxCitleHB4MTEyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjAKK2V4cHgxMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxOQorZXhweDExNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE4CitleHB4MTE1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTcKK2V4cHgxMTYgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorZXhweDExNyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE1CitleHB4MTE4IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTQKK2V4cHgxMTkgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMworZXhweDEyMCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEyCitleHB4MTIxIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMCAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTEKK2V4cHgxMjIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMAorZXhweDEyMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA5CitleHB4MTI0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDgKK2V4cHgxMjUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDEyNiBleHAgLTlFLTggLT4gMC45OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA2CitleHB4MTI3IGV4cCAtOUUtOCAtPiAxLjAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDUKK2V4cHgxMjggZXhwIC05RS04IC0+IDEuMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNAorZXhweDEyOSBleHAgLTlFLTggLT4gMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MTMwIGV4cCAtOUUtOCAtPiAxLjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIKK2V4cHgxMzEgZXhwIC05RS04IC0+IDEuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMQorZXhweDEzMiBleHAgLTlFLTggLT4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHNhbml0eSBjaGVja3MsIHdpdGggaXRlcmF0aW9uIGNvdW50cyBbbm9ybWFsaXplZCBzbyAwPD18eHw8MV0KK3ByZWNpc2lvbjogICA1MAorCitleHB4MjEwIGV4cCAwIC0+IDEKKy0tIGl0ZXJhdGlvbnM6IDIKK2V4cHgyMTEgZXhwIC0xRS00MCAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogOAorZXhweDIxMiBleHAgLTlFLTcgLT4gMC45OTk5OTkxMDAwMDA0MDQ5OTk4Nzg1MDAwMjczMzc0OTUwNzkyNTA3MzgxMTI0MDUxMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDYKK2V4cHgyMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxNQorZXhweDIxNCBleHAgLTAuMDAzIC0+IDAuOTk3MDA0NDk1NTAzMzcyOTc2MDEyMDY2MjM0MDk3NTYwOTEwNzQxNzc0ODA0ODk4NDUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxNAorZXhweDIxNSBleHAgLTAuMDAxIC0+IDAuOTk5MDAwNDk5ODMzMzc0OTkxNjY4MDU1MzU3MTY3NjU1OTc0NzAyMzU1OTAyMzYwMDggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDIxNiBleHAgLTAuMSAtPiAwLjkwNDgzNzQxODAzNTk1OTU3MzE2NDI0OTA1OTQ0NjQzNjYyMTE5NDcwNTM2MDk4MDQwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzkKK2V4cHgyMTcgZXhwIC0wLjcgLT4gMC40OTY1ODUzMDM3OTE0MDk1MTQ3MDQ4MDAwOTMzOTc1Mjg5NjE3MDc2NjcxNjU3MTE4MiBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQxCitleHB4MjE4IGV4cCAtMC45IC0+IDAuNDA2NTY5NjU5NzQwNTk5MTExODgzNDU0MjM5NjQ1NjI1OTg3ODMzNzAzMzc2MTcwMzggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA0MworZXhweDIxOSBleHAgLTAuOTkgLT4gMC4zNzE1NzY2OTEwMjIwNDU2OTA1MzE1MjQxMTk5MDgyMDEzODY5MTgwMjg4NTQ5MDUwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjIwIGV4cCAtMSAtPiAwLjM2Nzg3OTQ0MTE3MTQ0MjMyMTU5NTUyMzc3MDE2MTQ2MDg2NzQ0NTgxMTEzMTAzMTc3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyMjEgZXhwIC0xLjAxIC0+IDAuMzY0MjE4OTc5NTcxNTIzMzE5NzU3MDQ2Mjk1NjM3MzQ1NDg5NTk1ODkxMzkxOTI0ODIgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNworZXhweDIyMiBleHAgLTEuMSAtPiAwLjMzMjg3MTA4MzY5ODA3OTU1MzI4ODg0NjkwNjQzMTMxNTUyMTYxMjQ3OTUyMTU2OTIxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyMjMgZXhwIC0xLjUgLT4gMC4yMjMxMzAxNjAxNDg0Mjk4Mjg5MzMyODA0NzA3NjQwMTI1MjEzNDIxNzE2MjkzNjEwOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDMwCitleHB4MjI0IGV4cCAtMiAtPiAwLjEzNTMzNTI4MzIzNjYxMjY5MTg5Mzk5OTQ5NDk3MjQ4NDQwMzQwNzYzMTU0NTkwOTU4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzYKK2V4cHgyMjUgZXhwIC01IC0+IDAuMDA2NzM3OTQ2OTk5MDg1NDY3MDk2NjM2MDQ4NDIzMTQ4NDI0MjQ4ODQ5NTg1MDI3MzU1MSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjI2IGV4cCAtMTAgLT4gMC4wMDAwNDUzOTk5Mjk3NjI0ODQ4NTE1MzU1OTE1MTU1NjA1NTA2MTAyMzc5MTgwODg4NjY1NjUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDIyNyBleHAgLTE0IC0+IDguMzE1Mjg3MTkxMDM1Njc4ODQwNjM5ODUxNDI1NjUyNjIyOTQ2MDc2NTgzNjQ5ODQ1N0UtNyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CitleHB4MjI4IGV4cCAtMTUgLT4gMy4wNTkwMjMyMDUwMTgyNTc4ODM3MTQ3OTQ5NzcwMjI4OTYzOTM3MDgyMDc4MDgxODU2RS03IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzAKK2V4cHgyMzMgZXhwIDAgLT4gMQorLS0gaXRlcmF0aW9uczogMgorZXhweDIzNCBleHAgMUUtNDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNworZXhweDIzNSBleHAgOUUtNyAtPiAxLjAwMDAwMDkwMDAwMDQwNTAwMDEyMTUwMDAyNzMzNzUwNDkyMDc1MDczODExMjU5NDkgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA2CitleHB4MjM2IGV4cCA5RS04IC0+IDEuMDAwMDAwMDkwMDAwMDA0MDUwMDAwMTIxNTAwMDAyNzMzNzUwMDQ5MjA3NTAwNzM4MSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDE1CitleHB4MjM3IGV4cCAwLjAwMyAtPiAxLjAwMzAwNDUwNDUwMzM3NzAyNjAxMjkzNDA5MTM0ODkwMDIwNTMzMTg3MjcxOTU2MTkgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxMworZXhweDIzOCBleHAgMC4wMDEgLT4gMS4wMDEwMDA1MDAxNjY3MDgzNDE2NjgwNTU3NTM5OTMwNTgzMTE1NjMwNzYyMDA1ODA3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjUKK2V4cHgyMzkgZXhwIDAuMSAtPiAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjY2ODIyNDU0NzE5NDczNzUgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzOAorZXhweDI0MCBleHAgMC43IC0+IDIuMDEzNzUyNzA3NDcwNDc2NTIxNjI0NTQ5Mzg4NTgzMDY1MjcwMDE3NTQyMzk0MTQ1OSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQxCitleHB4MjQxIGV4cCAwLjkgLT4gMi40NTk2MDMxMTExNTY5NDk2NjM4MDAxMjY1NjM2MDI0NzA2OTU0MjE3NzIzMDY0NDAxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNDIKK2V4cHgyNDIgZXhwIDAuOTkgLT4gMi42OTEyMzQ0NzIzNDkyNjIyODkwOTk4Nzk0MDQwNzEwMTM5NzIxODAyOTMxODQxMDMwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDMgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM3MDAwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDQgZXhwIDEuMDEgLT4gMi43NDU2MDEwMTUwMTY5MTY0OTM5ODk3NzYzMTY2NjAzODc2MjQwNzM3NTA4MTk1OTYwIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyNDUgZXhwIDEuMSAtPiAzLjAwNDE2NjAyMzk0NjQzMzExMjA1ODQwNzk1MzU4ODY3MjM5MzI4MjY4MTAyNjAxNjMgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDI0NiBleHAgMS41IC0+IDQuNDgxNjg5MDcwMzM4MDY0ODIyNjAyMDU1NDYwMTE5Mjc1ODE5MDA1NzQ5ODY4MzY5NyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CitleHB4MjQ3IGV4cCAyIC0+IDcuMzg5MDU2MDk4OTMwNjUwMjI3MjMwNDI3NDYwNTc1MDA3ODEzMTgwMzE1NTcwNTUxOCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDM2CitleHB4MjQ4IGV4cCA1IC0+IDE0OC40MTMxNTkxMDI1NzY2MDM0MjExMTU1ODAwNDA1NTIyNzk2MjM0ODc2Njc1OTM4OCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjQ5IGV4cCAxMCAtPiAyMjAyNi40NjU3OTQ4MDY3MTY1MTY5NTc5MDA2NDUyODQyNDQzNjYzNTM1MTI2MTg1NTcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOAorZXhweDI1MCBleHAgMTQgLT4gMTIwMjYwNC4yODQxNjQ3NzY3Nzc3NDkyMzY3NzA3Njc4NTk0NDk0MTI0ODY1NDMzNzYxIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyNTEgZXhwIDE1IC0+IDMyNjkwMTcuMzcyNDcyMTEwNjM5MzAxODU1MDQ2MDkxNzIxMzE1NTA1NzM4NTQzODIwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI5CisKKy0tIGEgYmlnZ2llIFtyZXN1bHQgdmVyaWZpZWQgMyB3YXlzXQorcHJlY2lzaW9uOiAyNTAKK2V4cHgyNjAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjI0OTc3NTcyNDcwOTM2OTk5NTk1NzQ5NjY5Njc2Mjc3MjQwNzY2MzAzNTM1NDc1OTQ1NzEzODIxNzg1MjUxNjY0Mjc0Mjc0NjYzOTE5MzIwMDMwNTk5MjE4MTc0MTM1OTY2MjkwNDM1NzI5MDAzMzQyOTUyNjA1OTU2MzA3MzgxMzIzMjg2Mjc5NDM0OTA3NjMyMzM4Mjk4ODA3NTMxOTUyNTEwMTkwMTE1NzM4MzQxODc5MzA3MDIxNTQwODkxNDk5MzQ4ODQxNjc1MDkyNDQ3NjE0NjA2NjggSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4dHJlbWUgcmFuZ2UgYm91bmRhcmllcworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogOTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OQorLS0gTnRpbnkgYm91bmRhcnkKK2V4cHgyOTAgZXhwICAtMjMwMjYxOC4wMjIzMzI1MjkgLT4gMEUtMTAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitleHB4MjkxIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI4IC0+IDFFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKy0tIE5tYXgvMTAgYW5kIE5tYXggYm91bmRhcnkKK2V4cHgyOTIgZXhwICAyMzAyNTgyLjc5MDQwODk1MiAtPiA5Ljk5OTk5OTk5MzEwMDI3N0UrOTk5OTk4ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTMgZXhwICAyMzAyNTgyLjc5MDQwODk1MyAtPiAxLjAwMDAwMDAwMDMxMDAyOEUrOTk5OTk5ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTQgZXhwICAyMzAyNTg1LjA5Mjk5Mzk0NiAtPiA5Ljk5OTk5OTAwMzE1OTg3MEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorZXhweDI5NSBleHAgIDIzMDI1ODUuMDkyOTk0MDM2IC0+IDkuOTk5OTk5OTAzMTU5ODIxRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitleHB4Mjk2IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDUgLT4gOS45OTk5OTk5OTMxNTk4MjBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTcgZXhwICAyMzAyNTg1LjA5Mjk5NDA0NiAtPiBJbmZpbml0eSBPdmVyZmxvdyAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSAwPC14PDwxIGVmZmVjdHMKK3ByZWNpc2lvbjogICAgMzAKK2V4cHgzMjAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMDA5NzkxNjY2MTcgSW5leGFjdCBSb3VuZGVkCitleHB4MzIxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjQ5OTk5OTc5MTY2NjY3IEluZXhhY3QgUm91bmRlZAorZXhweDMyMiBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5ODk3OTE2NjcxNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMjAKK2V4cHgzMjMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2V4cHgzMjYgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjcgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjggZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIG92ZXJwcmVjaXNlIGFuZCAwPC14PDwxCitwcmVjaXNpb246ICAgIDgKK2V4cHgzMzAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzEgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDMzMyBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzNCBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzNSBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MzM2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzM4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIDA8eDw8MSBlZmZlY3RzCitwcmVjaXNpb246ICAgIDMwCitleHB4MzQwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjQ5OTk5MDIwODMzMjggIEluZXhhY3QgUm91bmRlZAorZXhweDM0MSBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAwMDAyMDgzMzMzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDEwMjA4MzMzOCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIwCitleHB4MzQzIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ0IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ1IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDE0CitleHB4MzQ2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQ4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkCistLSBvdmVycHJlY2lzZSBhbmQgMDx4PDwxCitwcmVjaXNpb246ICAgIDgKK2V4cHgzNTAgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTIgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNworZXhweDM1MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitleHB4MzU2IGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzU4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MAorcHJlY2lzaW9uOiAgICAyMAorZXhweDQwMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODE4Mjg0NTg5MzY1MDQxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgxODI4NDU4OTYzNjg2OSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDAzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MTgyODQ1ODk5MDg2OTcgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODE4Mjg0NTkwMTgwNTI1ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDUgZXhwIDEuMDAwMDAwMDAwMDAwMCAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDA2IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MTgyODQ1OTMxNzA2MzUgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNyBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43MTgyODE4Mjg0NTk1ODg4OTE3ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2V4cHg0MTEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDEyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDE1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NiAgSW5leGFjdCBSb3VuZGVkCistLSBvdmVycHJlY2lzZS4uLgorcHJlY2lzaW9uOiAgICA3CitleHB4NDIxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyCitleHB4NDMxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzNSBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBiYXNpY3MgYXQgbG93IHByZWNpc2lvbnMKK3ByZWNpc2lvbjogMworZXhweDUwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorZXhweDUwMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDU0ICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2OCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MDUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzIgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyLjIwRSs0ICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5CitwcmVjaXNpb246IDIKK2V4cHg1MTEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHg1MTIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1ICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNyAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCitleHB4NTE1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCitleHB4NTE2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yRSs0ICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQorcHJlY2lzaW9uOiAxCitleHB4NTIxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCitleHB4NTIyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA1ICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuNCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDUyNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDUyNiBleHAgICAxICAgICAgICAgICAgLT4gMyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTI3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjggZXhwICAgMTAgICAgICAgICAgIC0+IDJFKzQgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKKworLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBvdmVycHJlY2lzZSBib3JkZXJsaW5lcworcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4NzAxIGV4cCAgMTAwMDAwMDAwMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzAyIGV4cCAgMTAwMDAwMDAwICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzAzIGV4cCAgMTAwMDAwMDAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA0IGV4cCAgMTAwMDAwMCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA1IGV4cCAgMTAwMDAwICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA2IGV4cCAgMTAwMDAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA3IGV4cCAgMTAwMCAgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA4IGV4cCAgODg2LjQ5NTI2MDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzA5IGV4cCAgODg2LjQ5NTI2MDcgLT4gOS45OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MTAgZXhwICA4ODYuNDk1MjcgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MTEgZXhwICA4ODYuNDk1MjYgICAtPiA5Ljk5OTk5MkUrMzg0IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2CitleHB4NzIxIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzIyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODIgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjMgZXhwICA4ODYuNDk1MjYwODAyNzA3NTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjQgZXhwICA4ODYuNDk1MjYwODAyNzA3NTggICAtPiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDcyNSBleHAgIDg4Ni40OTUyNjA4MDI3MDc2ICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcyNiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ICAgIC0+IDkuOTk5OTk5OTk5OTk5MTE3RSszODQgSW5leGFjdCBSb3VuZGVkCistLSBhbmQgYnkgc3BlY2lhbCByZXF1ZXN0IC4uLgorcHJlY2lzaW9uOiAgIDE1CitleHB4NzMxIGV4cCAgODg2LjQ5NTI2MDgwMjcwOCAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzMyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNyAgICAgLT4gOS45OTk5OTk5OTk5OTQxMkUrMzg0IEluZXhhY3QgUm91bmRlZAorZXhweDczMyBleHAgIDg4Ni40OTUyNjA4MDI3MDYgICAgIC0+IDkuOTk5OTk5OTk5OTg0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CitleHB4NzM1IGV4cCAgMjMwMi41ODUwOTI5OTQwNSAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzYgZXhwICAyMzAyLjU4NTA5Mjk5NDA0ICAgIC0+IDkuOTk5OTk5OTk5OTQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzcgZXhwICAyMzAyLjU4NTA5Mjk5NDAzICAgIC0+IDkuOTk5OTk5OTk5ODQzMTZFKzk5OSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cywgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXhweDc1MSBleHAgLTEwMDAwMDAwMDAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTIgZXhwIC0xMDAwMDAwMDAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzUzIGV4cCAtMTAwMDAwMDAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NCBleHAgLTEwMDAwMDAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTUgZXhwIC0xMDAwMDAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU2IGV4cCAtMTAwMDAgICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NyBleHAgLTEwMDAgICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTggZXhwIC04ODEuODkwMDkgICAgLT4gIDEuMDAwMDAxRS0zODMgSW5leGFjdCBSb3VuZGVkCitleHB4NzU5IGV4cCAtODgxLjg5MDEgICAgIC0+ICA5Ljk5OTkxRS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYwIGV4cCAtODg1ICAgICAgICAgIC0+ICA0LjQ2MDVFLTM4NSAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYxIGV4cCAtODg4ICAgICAgICAgIC0+ICAyLjIyMUUtMzg2ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYyIGV4cCAtODkwICAgICAgICAgIC0+ICAzLjAxRS0zODcgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzYzIGV4cCAtODkyLjkgICAgICAgIC0+ICAxLjdFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY0IGV4cCAtODkzICAgICAgICAgIC0+ICAxLjVFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY1IGV4cCAtODkzLjUgICAgICAgIC0+ICA5RS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY2IGV4cCAtODk1LjcwNTYgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzY5IGV4cCAtODk1LjggICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcwIGV4cCAtODk1LjczICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcxIGV4cCAtODk2LjM5ODcgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitleHB4NzcyIGV4cCAtODk2LjM5ODggICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK2V4cHg3NzMgZXhwIC04OTguMDA4MSAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorZXhweDc3NCBleHAgLTg5OC4wMDgyICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCisKKy0tIHNwZWNpYWwgdmFsdWVzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorZXhweDgyMCBleHAgICBJbmYgICAgLT4gSW5maW5pdHkKK2V4cHg4MjEgZXhwICAtSW5mICAgIC0+IDAKK2V4cHg4MjIgZXhwICAgTmFOICAgIC0+IE5hTgorZXhweDgyMyBleHAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitleHB4ODI0IGV4cCAgc05hTjEyMyAtPiAgTmFOMTIzIEludmFsaWRfb3BlcmF0aW9uCitleHB4ODI1IGV4cCAtc05hTjMyMSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCitleHB4ODI2IGV4cCAgIE5hTjQ1NiAtPiAgTmFONDU2CitleHB4ODI3IGV4cCAgLU5hTjY1NCAtPiAtTmFONjU0CitleHB4ODI4IGV4cCAgIE5hTjEgICAtPiAgTmFOMQorCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitleHB4OTAxIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0CitwcmVjaXNpb246ICA5OTk5OTk5OQorZXhweDkwMiBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAorCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiAgIDEwMDAwMDAKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2V4cHg5MDMgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2V4cHg5MDQgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgLTEwMDAwMDAKK2V4cHg5MDUgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK2V4cHg5MDYgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKKworLS0KK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTnVsbCB0ZXN0CitleHB4OTAwIGV4cCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCistLSBSYW5kb21zIFA9NTAsIHdpdGhpbiAwLTk5OQorUHJlY2lzaW9uOiA1MAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4cHgxNTAxIGV4cCA2NTYuMzUzOTc5NTA1OTAyODU2MTIyNjYwOTU1OTY1Mzk5MzQyMTM5NDM4NzI4ODU3MjggIC0+IDEuMTI0Mzc1NzYxMDY0MDMxOTc4MzYxMTE3ODUyODgzOTY1MjY3MjA2MjgyMDA0MDMxNEUrMjg1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDIgZXhwIDAuOTM2MjA1NzEwOTM2NTI4MDAyMjUwMzg1NTA2MDA3ODAzMjI4MzEyMzYwODI3ODE0NzEgLT4gMi41NTAyODY1MTMwOTg2MTc2Njg5MTk5NzExODU3ODI1NzcxMzExMTc4MDQ2ODQyMDA5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDMgZXhwIDAuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTQ3MTQxODMzNzM4NzQxMDU3OTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwODM0MDc4NTg1NjYwMTUxNTA2MjAyNjkxNzQwMjUyNTEyIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDQgZXhwIDAuMDAwMDkxNzQwNTcyNjI4ODc3ODk2MjU3NDU1NzQ2ODY1NDUxNjMxNjg3ODg0NTYyMDMgLT4gMS4wMDAwOTE3NDQ3ODA5MjM5MDA1MTQ2NzIyMzQxMjUxNTI0MDgxMDA2MDUxNDczMjczIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDUgZXhwIDMzLjkwOTExNjg5Nzk3Mzc5NzczNTY1Nzc1MTU5MTAxNDkyNjYyOTA1MTExNzU0MTI0MyAgLT4gNTMyNzczMTgxMDI1MDAyLjAzNTQzNjE4OTAxMzA2NzI2NDk1ODcwNDc2NjE3MjMyMjI5IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDYgZXhwIDAuMDAwMDA3NDA0NzA0MTMwMDQ0MDY1OTIxMjQ1NzUyOTUyNzg0NTY5MzY4MDk1ODczMTEgLT4gMS4wMDAwMDc0MDQ3MzE1NDQ5MzMzNTkwMDY2Mzk1NjcwMzA2MTM1NTY3ODg5MjEwODE0IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDcgZXhwIDAuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxMDg4MDI0NTM3NDY5MjI0ODMwNzE0NDU0OTIgLT4gMS4wMDAwMDAwMDAwMDEyNDg1NDkyMjIyMjE4Njc0NjIxMTc2MjM5OTExNDI0OTY4MjYzIEluZXhhY3QgUm91bmRlZAorZXhweDE1MDggZXhwIDQuMTc5MzI4MDY3NDE1NTY1OTc5NDI4Njk1MTE1OTQzMDY1MTI1ODM1NjAxNDM5MTM4MiAgLT4gNjUuMzIxOTQ2NTIwMTQ3MTk5NDA0MTk5Nzg3ODExMzM2ODYwMDg3OTc1MTE4Mjc4MTg1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MDkgZXhwIDQ4NS40MzU5NTc0NTQ2MDY1NTg5Mzc0NjE3OTg5MDI1NTUyOTkxOTIyMTU1MDIwMTY4NiAgLT4gNi42Mzk4NDAzOTIwNDU5NjE3MjU1OTUwNDc2OTUzMTI5Mzc3NDU5ODQ1MzY2NTg1NDYzRSsyMTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMCBleHAgMC4wMDAwMDAwMDAwMzU0NzI1OTgwNjU5MDg1NjAzMjUyNzg3NTE1NzgzMDMyODE1NjU5NyAtPiAxLjAwMDAwMDAwMDAzNTQ3MjU5ODA2NjUzNzcxMjkzMjA1ODk0MDY3MTUwMDA2ODU1MTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMSBleHAgMC4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNDA0NzkzMDYxNjQ3ODYzNTA0MjY3OCAtPiAxLjAwMDAwMDAwMDAwMDAwNzU5NjIxNDk3MzM5MTA2OTMzMDU0NzEyNTc3MTU0NjM4ODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMiBleHAgOS43OTU5MTY4ODIxNzYwMzM5MzA0NTcxNTk1NDc0NDgwNjQwMjg2MDcyNzIwMjMzNzk2ICAtPiAxNzk2MC4yNjExNDYwNDI5NTUxNzkxNjQzMDM2NTM0MTI2NTA3NTE2ODE0MzYzNTI0MzcgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxMyBleHAgMC4wMDAwMDAwMDU2NjY0MjAwNjI1ODI5MDUyNjc4MzkwMTQ1MTE5NDk0MzE2NDUzNTU4MSAtPiAxLjAwMDAwMDAwNTY2NjQyMDA3ODYzNzA2MzQ2MDk4MzI0Mzg4MTU2NjUyNDkzNDc2NTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxNCBleHAgNzQxLjI5ODg4NzkxMTM0Mjk4MTk0MDg4ODI3NTcyMzc0NzE4OTQwOTI1ODIwMDI3MzU0ICAtPiA4Ljc1MDE2OTQwMDYzMTczMzI4MDgxMjg5NDY2NjY0MDI2MjI0MzIwNjQ5MjMxOTg3MzFFKzMyMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE1IGV4cCAwMzIuNzU1NzMwMDM1NTI1MTc2Njg4MDg1MjkwOTk4OTcxNTM3MTA4ODcwMTQ5NDc5MzUgIC0+IDE2ODEyNTE5NjU3ODY3OC4xNzcyNTg0MTEwODYxNzk1NTkwNDQyNTM0NTYzMTA5MjMzOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE2IGV4cCA0Mi4zMzM3MDA3MjY0MjkzMzMzMDg1OTQyNjU1NTM0MjI5MDI0NjM3MzczOTk0Mzc2NDQgIC0+IDI0MjgyNDU2NzU4NjQxNzI0NzUuNDY4MTExOTQ5MzA0NTY1Nzc5NzMwOTM2OTY3MjAxMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE3IGV4cCAwLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkxODg4MTk3NjA5MTU4ODAyODM1Nzk4IC0+IDEuMDAwMDAwMDAwMDAwMDA1NTk2ODI2MTY4NzY0OTM0NTQ0MjA3NjczMjczOTU3NzA0OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE4IGV4cCAwLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MjgwMTkzNTg0NzU4MzAwOTczNTQ5NDg2MzEyIC0+IDEuMDAwMDAwMDAwMDAwODA3MDM2ODg2NjgzMTI3NTkwMTE1ODE2NDMyMTg2NzkxNDM0MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTE5IGV4cCA2NDAuNzIzOTYwMTI3OTY1MDk0ODIzODI3MTI4OTE3MDkwNzI1NzA2NTM2MDY4MzgyNTEgIC0+IDEuODMxODA5NDk5MDY4MzM5NDIyOTMwNDEzMzA2ODk4MzkxNDIzNjk5NTMyNjg5MTA0NUUrMjc4IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjAgZXhwIDAuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzEwNzE0MTY5NDgxMTIyMTk1MTIyMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDUwOTQ1ODkyMjE2NzYzMjM2OTE1ODkxNDk5MzI0MzU4NTU2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjEgZXhwIDYuNzY3MDM5NDMxNDMxNTIwNjM3ODYyNTIyMTU4Mzk3MzQxNDY2MDcyNzk2MDI0MTM5NSAgLT4gODY4LjczNjEzMDEyODIyMDMxMzY3ODA2MjQ4Njk3MDkyODg0NDE1MTE5NTY4MjcxMzE1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjIgZXhwIDA0LjgyMzIxNzQwNzQxMjk2MzUwNjYzODI2NzIyNjg5MTAyNDEzODA1NDc4MzEyMjU0OCAgLT4gMTI0LjM2NDU3OTI5NTg4ODM3MTI5NzMxODIxMDc3NTg2NzA1NTA1NTY1OTA0MjA1MzY2IEluZXhhY3QgUm91bmRlZAorZXhweDE1MjMgZXhwIDE5My41MTMwNzg3ODcwMTE5NjQwMzk5MTIwODQ4MjUyMDExNTM1OTY5MDEwNjE0MzYxNSAgLT4gMS4xMDA2ODMwODcyODU0NzE1Njc3MzkwOTE0NjU1NDUyMjYxNTUwNzY4OTU3NTc2MDM0RSs4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI0IGV4cCA1LjczMDc3NDkwMzgzMDM2NTA1MzkyMDAzNDU5MDEyMTA0OTcwMTU2MTczOTM5NzA0NjMgIC0+IDMwOC4yMDgwMDc0MzEwNjg0MzA4MzUyMjcyMTUyMzcxNTY0NTk1MDU3NDg2NjQ5NTE5NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI1IGV4cCAwLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5Nzk3OTY1MjAwNTQxMTY5MTIzNzQzNTAwMjY3IC0+IDEuMDAwMDAwMDAwMDAwOTUyMTc4MjUxOTk4NDMyOTczNzE3MjAwNzk5MTM5MDM4MTI3MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI2IGV4cCAwLjAwMDI3MTMxNDQwOTQ5MTgzMzcwOTY2MzkzNjgyNjE3OTMwMTUzNDk1MDI4OTE5MTQwIC0+IDEuMDAwMjcxMzUxMjE4NTc1MTAyMjkwNjA1ODE2MDQ4MDYwNjU5ODc1NDkxMzYwNzM2NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI3IGV4cCAwLjAwMDAwMDAwMDY0NTAzMDU5MTE0NjgwNjgyMzQzMDAyMzE1NjYyMDY5MjcyNzA3MTIzIC0+IDEuMDAwMDAwMDAwNjQ1MDMwNTkxMzU0ODM5MDU1MjMyMzUxNzQwMzYxMzEzNTQ5NjYzMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI4IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3Mjg4ODY2MjM1MjM4NTQ4NDQwNTkzIC0+IDEuMDAwMDAwMDAwMDAwMDAwOTU2MTY2NDM1MDY1MjczMzQ1Nzg5NDc4MTU4MjAwOTA5NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTI5IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4NjUwMjQ0NDU5NTUwMjUyNzQzNDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwODY0NDk5NDI4MTE2Nzg2ODc2MTI0MjI2MTA5NjUyOTk4NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMwIGV4cCAwLjA2MjIzNDg4MzU1NjM1MzU5OTY1NjgzMDUzMTU3NzI5MjA0OTg4MzgxODg3NjIxODUwIC0+IDEuMDY0MjEyMjgxMzM5MjQwNjY1Nzc4OTY4ODkzMTgzODkxOTMyMzgyNjI1MDYzMDgzMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMxIGV4cCAwLjAwMDAwNDAwNzEwODA3ODA0NDI5NDM1NTAyNjU3MTMxOTEyMzA4NjgwNjc0MDU3MDUzIC0+IDEuMDAwMDA0MDA3MTE2MTA2NTEyNTkyNTYyMDg5MDAxOTMxOTgzMjEyNzg2MzU1OTI2MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMyIGV4cCA4NS41MjI3OTY4OTQ3NDQ1NzYyMTE1NzMyMzIwNTU0OTQ1NTE0MjkyOTc4Nzg0MTMwMTcgIC0+IDEzODcwMDczNjg2NDA0MjI4NDUyNzU3Nzk5NzcwMjUxMDg1MTc3Ljg1MzMzNzM2ODkzNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTMzIGV4cCA5LjE0OTY3MjA4MTEzNjM2Nzg2OTY5MzgwMzYzNzk3NTY2NjM1NDgzNTMzOTk5NTQzNjMgIC0+IDk0MTEuMzUzNzEyMjgzMjc0MzM4Njc4MzU5NzYyOTE2MTc2MzA1NzM3MDAzNDQ5NTE1NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM0IGV4cCA4LjIyMTU3MDUyNDA3ODgyOTQ0NzI5NDQzODIwNTYzMzA1MTY3Mzg1Nzc3ODUxNzc5NDIgIC0+IDM3MjAuMzQwNjgxMzM4MzA3Njk1Mzg5OTY1NDcwMTYxNTA4NDQyNTU5ODM3Nzc1ODE4OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM1IGV4cCAwLjAwMDAwMDAwMDE1NzcyMDY0NTY5NjQwNjEzMTQyODIzMjAzNzI2ODIxMDc2MjM5NTYxIC0+IDEuMDAwMDAwMDAwMTU3NzIwNjQ1NzA4ODQ0MDMyNDY4MzMxNTc4ODM1ODkyNjEyOTgzMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM2IGV4cCAwLjU4MTc5MzQ2NDczOTU5NTMxNDMyNjI0MTUzNTc2ODgzNDQwNjI1NTM4MDE3NTMyNDgwIC0+IDEuNzg5MjQ0NTAxODI3NTM2MDE2Mzc5NzAyMjM3MjY1NTgzNzE4ODQyMzE5NDg2MzYwNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM3IGV4cCAzMy41NTU3MjYxOTcxNDk1MjUwNjE0NTU1MTc3ODQ4NzA1NzA0NzA4MzM0OTgwOTY1NTkgIC0+IDM3NDE2ODA2OTg5NjMyNC42MjU3ODA3MzE0ODk5MzUyNjYyNjMwNzA5NTg1NDQwNzk1MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM4IGV4cCA5Ljc4OTgwNzk4MDM5MDYyMTUwOTQxNDAwMTAwMDk1ODMzNzU1MzcyNTk4MTAzOTg2NTkgIC0+IDE3ODUwLjg3ODExOTkxMjIwODg4ODIxNzEwMDk5ODAxOTk4NjYzNDYyMDM2ODUzODQyNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTM5IGV4cCA4OS4xNTc2OTczMjcxNzQ1MjE1NDI1MDI0NDc5NTMwMzI1MzY1NDEwMzg2MzY5NjYzNDcgIC0+IDUyNTY0OTE1MjMyMDE2NjUwMzc3MTIyNDE0OTMzMDQ0ODA4OTU1MC42NzI5MzgyOTIyNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTQwIGV4cCAyNS4wMjI5NDc2MDAxMjMzMjg5MTIwMjkwNTE4OTcxNzEzMTk1NzMzMjI4ODg1MTQ4ODUgIC0+IDczNjc2MzQzNDQyLjk1MjUxNzgyNDM0NTQzMTQzNzY4MzE1MzMwNDY0NTg1MTk2MDUyNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXhwKDEpIGF0IDM0CitQcmVjaXNpb246IDM0CitleHB4MTIwMCBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUmFuZG9tcyBQPTM0LCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2V4cHgxMjAxIGV4cCAzMDkuNTk0ODg1NTgyMTUxMDIxMjk5NjcwMDY0NTA4NzE4OCAgLT4gMi44NTMzMTk2OTI5MDEzODc1MjEyMDE3MzgwMTUwNTA3MjRFKzEzNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjAyIGV4cCA5LjkzNjU0MzA2ODcwNjIxMTQyMDQyMjgwMzk2MjY4MDE2NCAgLT4gMjA2NzIuMTU4MzkyMDMxNzE4Nzc0NzY1MTEwOTMyNzYwMjIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwMyBleHAgNi4zMDc4NzAzMjM4ODE1MDU2ODQ0Mjk4Mzk0OTE3MDc5MDggIC0+IDU0OC44NzQ3Nzc3MDU0NjM3Mjk2MTM3Mjc3MzkxNzU0NjY1IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDQgZXhwIDAuMDAwMzU0MzI4MTM4OTQzODQyMDUzNTIwMTMwODI4MjUwMyAtPiAxLjAwMDM1NDM5MDkyMDU3Mzc0NjE2NDczMzM1MDg0MzE1NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA1IGV4cCAwLjAwMDAwMzcwODc0NTMzNjM5MTgzNzU1OTgzOTQ5MjAyMjkgLT4gMS4wMDAwMDM3MDg3NTIyMTM3OTYzMjQ4NDE5MjAxODkzMjMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwNiBleHAgMC4wMDIwNDMyMzEyNjg3NTEyNDM4MDQwMjIyNDQ0MTE2NTg1IC0+IDEuMDAyMDQ1MzIwMDg4MTY0ODI2MDEzNTYxNjMwOTc1MzA4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMDcgZXhwIDYuODU2MzEzMzQwMDMyMTc3NjcyNTUwMzQzMjE2MTI5NTg2ICAtPiA5NDkuODU4Nzk4MTYwNDE0NDE0Nzk4MzU4OTY2MDUyNDM5NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA4IGV4cCAwLjAwMDAwMDAwMDA0MDIwOTQ5MjgzMzM4MTU2NDMzMjY0MTggLT4gMS4wMDAwMDAwMDAwNDAyMDk0OTI4MzQxODk5NjU5ODk2MTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwOSBleHAgMC4wMDQ5NjEwNzg0NzIyNDEyMTE3NjMyNjQ3MDAzNTQ1ODM5IC0+IDEuMDA0OTczNDA0OTk3OTAxOTg3MDM5NTg5MDI5Mjc3ODMzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTAgZXhwIDAuMDAwMDg5MTQ3MTg4MzcyNDA2NjkwOTc0Njc4NjcwMjY4NiAtPiAxLjAwMDA4OTE1MTE2MjEwMTA4NTQxMjc4MDA4ODI2NjY5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjExIGV4cCAwOC41OTk3OTE3MDM3NjA2MTg5MDY4NDcyMzIxMTExMjU2NiAgLT4gNTQzMC41MjgzMTQ5MjA5MDU3MTQ2MTUzMzkyNzM3MzgwOTcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxMiBleHAgOS40NzMxMTcwMzkzNDEwMDM4NTQ4NzI3NzgxMTI3NTI1OTAgIC0+IDEzMDA1LjM2MjM0MzMxMjI0OTUzNDYwMDU1ODk3OTEzOTE3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTMgZXhwIDAuMDk5OTA2MDcyNDY5MjIwNzY0ODQyOTk2OTk5OTMxMDExOCAtPiAxLjEwNTA2NzExNjk3NTE5MDYwMjI5NjA1MjcwMDcyNjgwMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE0IGV4cCAwLjAwMDAwMDA5Mjc4MDQ1MzM1NTU4Nzc4ODQwODIyNjkyNDcgLT4gMS4wMDAwMDAwOTI3ODA0NTc2NTk2OTQxODM5NTQ3NDA3NzIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxNSBleHAgMC4wMzc2NTc4NTgzODcyODg5OTE2Mjk4NzcyODE4MjY1Njc3IC0+IDEuMDM4Mzc1OTAwNDg5NzcxOTQ2NDc3ODU3ODE4NDQ3NTU2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTYgZXhwIDI2MS42ODk2NDExNjk3NTM5NTI0OTExNTM2MTE2NzEyMzA3ICAtPiA0LjQ3MDYxMzU2MjEyNzQ2NTA5NTI0MTYwMDE3NDk0MTQ2MEUrMTEzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTcgZXhwIDAuMDcwOTk5NzQyMzI2OTE2Mjk4MDg3NTgyNDIxMzg4OTYyNiAtPiAxLjA3MzU4MDk0OTIzNTQwNzk0OTQxNzgxNDQ4NTUzMzE3MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE4IGV4cCAwLjAwMDAwMDA0NDQ2MDU1ODMyOTUxNjk4OTUyMzU2NTg3MzEgLT4gMS4wMDAwMDAwNDQ0NjA1NTkzMTc4ODc2Mjc2NTc1OTM5MDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxOSBleHAgMC4wMDAwMDIxMjI0MDcyODU0Nzc3NTEyMjgxMzY5ODE1MTg1IC0+IDEuMDAwMDAyMTIyNDA5NTM3Nzg1Njg3MzkwNjMxMDcwOTA2IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjAgZXhwIDU0Ny41MTc0NDYyNTc0MTU2ODg1NDczNTU4NDg1NDc1MDUyICAtPiA2LjA3ODYyOTI0NzM4MzgwNzk0MjYxMjExNDU3OTcyODY3MkUrMjM3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjEgZXhwIDAuMDAwMDAwOTA2NzU5ODA0MTYxNTE5MjAwMjMzOTg0NDY3MCAtPiAxLjAwMDAwMDkwNjc2MDIxNTI2ODMxNDY4MDExNTM3NDM4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjIyIGV4cCAwLjAzMTY0NzY1MDAzMDgwNjUzNjU4MDM0NTU1MzMyNDQ2MDMgLT4gMS4wMzIxNTM3NjE4ODAxODc5Nzc2NTgzODc5NjE3NjkwMzQgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyMyBleHAgODQuNDYxNjA1MzAzNzc2NDUxMDE4MzM5OTY3MDYzODQ0NzMgIC0+IDQuNzk5NjQ0OTk1ODk3OTY4MzgzNTAzMjY5ODcxNjk3ODU2RSszNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI0IGV4cCAwLjAwMDAwMDAwMDA1MjA1OTk3NDAyOTA4NDgwMTg5MDQxNDUgLT4gMS4wMDAwMDAwMDAwNTIwNTk5NzQwMzA0Mzk5MjIzMzgzOTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyNSBleHAgMC4wMDAwMDA2NzQ4NTMwNjQwMDkzNjIwNjY1NjUxNzI2NzA4IC0+IDEuMDAwMDAwNjc0ODUzMjkxNzIyNzQyMjkyMzMxODEyOTk3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjYgZXhwIDAuMDAwMDAwMDExNjg1MzExOTc2MTA0MjAyMDUwNzkxNjE2OSAtPiAxLjAwMDAwMDAxMTY4NTMxMjA0NDM3NzQ2MDMwNjE2NTIwMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI3IGV4cCAwLjAwMjI1OTM4MTgwOTQyNTg2MzY3Mjc2MTY4ODY2OTMyODAgLT4gMS4wMDIyNjE5MzYxMzU4NzY4OTM3MDcwOTQ4NDU1NDM0NjEgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyOCBleHAgMC4wMDI5Mzk4ODU3NjczNDc4OTEyMjQ5ODU2NTA5NjY3NTE3IC0+IDEuMDAyOTQ0MjExNDY5NDk1MDg2ODEzMDg3NjUxMjg3MDEyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMjkgZXhwIDAuNzUxMTQ4MDAyOTkyODgwMjc3NTM3NjI3MDU1NzYzNjk2MyAtPiAyLjExOTQzMTczNDUxMDMyMDE2OTgwNjk3NjU2OTM2Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMwIGV4cCAxNzQuOTQzMTk1MjE3Njc1MDY3MTE1MDg4NjQyMzA0ODQ0NyAgLT4gOS40ODEyMjIzMDUzNzQ5NTUwMTE0NjQ2MTk0NjgwNDQwNTFFKzc1IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzEgZXhwIDAuMDAwMDgxMDYxMjQ1MTY5NDEzNjEyOTE5OTg5NTE2NDQyNCAtPiAxLjAwMDA4MTA2NDUzMDcyMDkyNDE4NjYxNTE0OTY0NjkyMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMyIGV4cCA1MS4wNjg4ODk4OTcwMjY2OTI4ODE4MDk0NjI3MjQ5OTAzNSAgLT4gMTUwOTg2MTM4ODg2MTkxNjUwNzM5NTkuODk4OTYwMTg3NDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzMyBleHAgMC4wMDAwMDAwMDA1OTkyODg3NTk5NDM3MDkzNjUxNDk0NTEwIC0+IDEuMDAwMDAwMDAwNTk5Mjg4NzYwMTIzMjgyODc0MDgyNzU4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzQgZXhwIDcxNC44NTQ5MDQ2NzYxMDU0ODU2MzExMTA4ODI4OTAzOTcyICAtPiAyLjg2Nzc0NDU0NDg5MTA4MTExNzM4MTU5NTA4MDQ4MDc4NEUrMzEwIEluZXhhY3QgUm91bmRlZAorZXhweDEyMzUgZXhwIDAuMDAwMDAwMDAwNDQ2ODI0NzgwMjk5MDY0MzY0NTYwNzExMCAtPiAxLjAwMDAwMDAwMDQ0NjgyNDc4MDM5ODg5MDU1NjcyMDIzMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM2IGV4cCA4MzEuNTgxODE1MTU4OTg5MDM2NjMyMzU1MTY3MjA0MzcwOSAgLT4gMS40MTcwNzc0MDkxODI2MjQ5Njk0MzU5MzgwNjIyNjE2NTVFKzM2MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM3IGV4cCAwLjAwMDAwMDAwMDY4NjgzMjM4MjUxNzk2MDU3NDcxMDgwNDQgLT4gMS4wMDAwMDAwMDA2ODY4MzIzODI3NTM4Mjk5MzU2MDI0NTQgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzOCBleHAgMC4wMDAwMDAxMzA2NzQwMjY2NDA4OTc2ODQwMjI4NDQwMjU1IC0+IDEuMDAwMDAwMTMwNjc0MDM1MTc4NzQ4Njc1MTg3NjQ4MDk4IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzkgZXhwIDAuMzE4MjIxMDYwOTAyMjI2NzcwNDgxMTUwMjQxMjMzNTE2MyAtPiAxLjM3NDY4MDExNTY2Nzc5ODE4NTc1ODkyNzI0Nzg5NDg1OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjQwIGV4cCAwLjAxNDc3NDEyMzQxNzkxMDQ0Mzc0NDAyNjQ2NDQyOTU1MDEgLT4gMS4wMTQ4ODM4MDAyMzk5NTA2ODI2MjgyNzc1MzQ4MzkyMjIgSW5leGFjdCBSb3VuZGVkCisKKy0tIFJhbmRvbXMgUD0xNiwgd2l0aGluIDAtOTkKK1ByZWNpc2lvbjogMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4MTEwMSBleHAgOC40NzMwMTE1MjcwMTM3MjQgIC0+IDQ3ODMuOTAwNjQzOTY5MjQ2IEluZXhhY3QgUm91bmRlZAorZXhweDExMDIgZXhwIDAuMDAwMDA1NTc1MzAyMjc2NCAtPiAxLjAwMDAwNTU3NTMxNzgxOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTAzIGV4cCAwLjAwMDAzMjM0NzQxMTQ0ODIgLT4gMS4wMDAwMzIzNDc5MzQ2MzEgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwNCBleHAgNjQuNTQzNzQxMzg1NDQxNjYgIC0+IDEuMDczOTY2NDc2MTczNTMxRSsyOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA1IGV4cCA5MC40NzIwMzI0NjQxNjU2OSAgLT4gMS45NTY2MTA4ODcyNTA2NDNFKzM5IEluZXhhY3QgUm91bmRlZAorZXhweDExMDYgZXhwIDkuMjk5OTMxNTMyMzQyNzU3ICAtPiAxMDkzNy4yNzAzMzMyNTIyNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA3IGV4cCA4Ljc1OTY3ODQzNzg1MjIwMyAgLT4gNjM3Mi4wNjIyMzQ0OTUzODEgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwOCBleHAgMC4wMDAwOTMxNzU1MTI3MTcyIC0+IDEuMDAwMDkzMTc5ODUzNjkwIEluZXhhY3QgUm91bmRlZAorZXhweDExMDkgZXhwIDAuMDAwMDAyODEwMTE1ODM3MyAtPiAxLjAwMDAwMjgxMDExOTc4NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTEwIGV4cCAwLjAwMDAwMDgwMDgxMzA5MTkgLT4gMS4wMDAwMDA4MDA4MTM0MTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTExMSBleHAgOC4zMzk3NzE3MjIyOTkwNDkgIC0+IDQxODcuMTMzODAzMDgxODc4IEluZXhhY3QgUm91bmRlZAorZXhweDExMTIgZXhwIDAuMDAyNjE0MDQ5Nzk5NTQ3NCAtPiAxLjAwMjYxNzQ2OTQwNjc1MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTEzIGV4cCAwLjc0NzgwMzMzNTYyNjE3NzEgLT4gMi4xMTIzNTQ3ODE5NzU0MTggSW5leGFjdCBSb3VuZGVkCitleHB4MTExNCBleHAgNTEuNzc2NjM3NjE4Mjc5NjYgIC0+IDMuMDY0MTM1ODAxMTIwMzY1RSsyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE1IGV4cCAwLjE1MjQ5ODk3ODMwNjEwMTIgLT4gMS4xNjQ3NDEyNzIwODQ5NTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTExNiBleHAgMC4wMDY2Mjk4Nzk4NjY5MjE5IC0+IDEuMDA2NjUxOTA2MTcwNzkxIEluZXhhY3QgUm91bmRlZAorZXhweDExMTcgZXhwIDkuOTU1MTQxODY1NTM0OTYwICAtPiAyMTA2MC4yMzMzNDI4NzAzOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE4IGV4cCA5Mi4zNDUwMzA1OTE5ODQ4MyAgLT4gMS4yNzMzMTg5OTM0ODEyMjZFKzQwIEluZXhhY3QgUm91bmRlZAorZXhweDExMTkgZXhwIDAuMDAwMDcwOTM4ODY3NzM0NiAtPiAxLjAwMDA3MDk0MTM4Mzk1NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIwIGV4cCA3OS4xMjg4MzAzNjQzMzIwNCAgLT4gMi4zMTg1Mzg4OTkzODkyNDNFKzM0IEluZXhhY3QgUm91bmRlZAorZXhweDExMjEgZXhwIDAuMDAwMDA5MDg4MTU0ODg3MyAtPiAxLjAwMDAwOTA4ODE5NjE4NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIyIGV4cCAwLjA0MjQ4Mjg4MDk2MDM0MTEgLT4gMS4wNDMzOTgxOTQyNDU3MjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyMyBleHAgMC44MDA5MDM1ODkxNDI3NDE2IC0+IDIuMjI3NTUyODExOTMzMzEwIEluZXhhY3QgUm91bmRlZAorZXhweDExMjQgZXhwIDguODI1Nzg2MTY3MjgzMTAyICAtPiA2ODA3LjU0MDQ1NTI4OTk5NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI1IGV4cCAxLjUzNTQ1NzI0OTc0NjI3NSAgLT4gNC42NDM0NDgyNjAxNDY4NDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyNiBleHAgNjkuMDIyNTQyNTQzNTU4MDAgIC0+IDkuNDY0NzU0NTAwNjcwNjUzRSsyOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI3IGV4cCAwLjAwMDcwNTA1NTQzNjg3MTMgLT4gMS4wMDA3MDUzMDQwNDY4ODAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyOCBleHAgMC4wMDAwMDgxMjA2NTQ5NTA0IC0+IDEuMDAwMDA4MTIwNjg3OTIzIEluZXhhY3QgUm91bmRlZAorZXhweDExMjkgZXhwIDAuNjIxNzc0ODU0NjQxMTM3ICAtPiAxLjg2MjIzMDI5ODU1NDkwMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMwIGV4cCAzLjg0NzYyOTAzMTQwNDM1NCAgLT4gNDYuODgxNzc2MTM1NjgyMDMgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzMSBleHAgMjQuODEyNTAxODQ2OTc3MzIgIC0+IDU5Njk0MjY4NDU2LjE5OTY2IEluZXhhY3QgUm91bmRlZAorZXhweDExMzIgZXhwIDUuMTA3NTQ2NTAwNTE2MDQ0ICAtPiAxNjUuMjY0MzgwOTc1NTY3MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMzIGV4cCA3OS4xNzgxMDk0Mzk1MTk4NiAgLT4gMi40MzU2NTYzNzI1NDEzNjBFKzM0IEluZXhhY3QgUm91bmRlZAorZXhweDExMzQgZXhwIDAuMDA1MTM5NDY5NTY2NzAxNSAtPiAxLjAwNTE1MjY5OTI5NTMwMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM1IGV4cCA1Ny40NDUwNDQ4ODUwMTcyNSAgLT4gOC44NzI5MDg1NjY5Mjk2ODhFKzI0IEluZXhhY3QgUm91bmRlZAorZXhweDExMzYgZXhwIDAuMDAwMDUwODM4ODk2ODAzNiAtPiAxLjAwMDA1MDg0MDE4OTEyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM3IGV4cCA2OS43MTMwOTkzMjE0ODk5NyAgLT4gMS44ODgwNTM3NDA2OTM1NDFFKzMwIEluZXhhY3QgUm91bmRlZAorZXhweDExMzggZXhwIDAuMDA2NDE4MzQxMjk4MTUwMiAtPiAxLjAwNjQzODk4Mjk4ODgzNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM5IGV4cCA5LjM0Njk5MTIyMDgxNDY3NyAgLT4gMTE0NjQuMjc4MDIwMzUwODIgSW5leGFjdCBSb3VuZGVkCitleHB4MTE0MCBleHAgMzMuMDkwODcxMzk5OTkxNTIgIC0+IDIzNTA2MjIyOTE2ODc2My41IEluZXhhY3QgUm91bmRlZAorCistLSBSYW5kb21zIFA9Nywgd2l0aGluIDAtOQorUHJlY2lzaW9uOiA3CittYXhFeHBvbmVudDogOTYKK21pbkV4cG9uZW50OiAtOTUKK2V4cHgxMDAxIGV4cCAyLjM5NTQ0MSAgLT4gMTAuOTczMDQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwMiBleHAgMC42NDA2Nzc5IC0+IDEuODk3NzY3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDMgZXhwIDAuNTYxODIxOCAtPiAxLjc1Mzg2NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA0IGV4cCAzLjA1NTEyMCAgLT4gMjEuMjIzNzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwNSBleHAgMS41MzY3OTIgIC0+IDQuNjQ5NjUwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMDYgZXhwIDAuMDgwMTU5MSAtPiAxLjA4MzQ1OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA3IGV4cCAwLjA5NjY4NzUgLT4gMS4xMDE1MTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwOCBleHAgMC4wNjQ2NzYxIC0+IDEuMDY2ODEzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMDkgZXhwIDAuMDA5NTY3MCAtPiAxLjAwOTYxMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDEwIGV4cCAyLjk1Njg1OSAgLT4gMTkuMjM3NDUgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxMSBleHAgNy41MDQ2NzkgIC0+IDE4MTYuNTIyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTIgZXhwIDAuMDA0NTI1OSAtPiAxLjAwNDUzNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDEzIGV4cCAzLjgxMDA3MSAgLT4gNDUuMTUzNjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNCBleHAgMS41MDIzOTAgIC0+IDQuNDkyNDEzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTUgZXhwIDAuMDMyMTUyMyAtPiAxLjAzMjY3NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE2IGV4cCAwLjAwNTcyMTQgLT4gMS4wMDU3MzggSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNyBleHAgOS44MTE0NDUgIC0+IDE4MjQxLjMzIEluZXhhY3QgUm91bmRlZAorZXhweDEwMTggZXhwIDMuMjQ1MjQ5ICAtPiAyNS42NjgxMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE5IGV4cCAwLjMxODk3NDIgLT4gMS4zNzU3MTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMCBleHAgMC44NjIxNjEwIC0+IDIuMzY4MjczIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjEgZXhwIDAuMDEyMjUxMSAtPiAxLjAxMjMyNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDIyIGV4cCAyLjIwMjA4OCAgLT4gOS4wNDM4NzcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMyBleHAgOC43NzgyMDMgIC0+IDY0OTEuMjAyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjQgZXhwIDAuMTg5NjI3OSAtPiAxLjIwODgwMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI1IGV4cCAwLjQ1MTA5NDcgLT4gMS41NzAwMzAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyNiBleHAgMC4yNzY0MTMgIC0+IDEuMzE4MzkyIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjcgZXhwIDQuNDkwMDY3ICAtPiA4OS4xMjc0MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI4IGV4cCAwLjA0Mzk3ODYgLT4gMS4wNDQ5NjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyOSBleHAgMC44MTY4MjQ1IC0+IDIuMjYzMzAxIEluZXhhY3QgUm91bmRlZAorZXhweDEwMzAgZXhwIDAuMDM5MTY1OCAtPiAxLjAzOTk0MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDMxIGV4cCA5LjI2MTgxNiAgLT4gMTA1MjguMjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzMiBleHAgOS42MTExODYgIC0+IDE0OTMwLjg3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzMgZXhwIDkuMTE4MTI1ICAtPiA5MTE5LjA4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM0IGV4cCA5LjQ2OTA4MyAgLT4gMTI5NTMuMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzNSBleHAgMC4wNDk5OTgzIC0+IDEuMDUxMjY5IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzYgZXhwIDAuMDA1MDc0NiAtPiAxLjAwNTA4NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM3IGV4cCAwLjAwMTQ2OTYgLT4gMS4wMDE0NzEgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzOCBleHAgOS4xMzg0OTQgIC0+IDkzMDYuNzM5IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzkgZXhwIDAuMDA2NTQzNiAtPiAxLjAwNjU2NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDQwIGV4cCAwLjcyODQ4MDMgLT4gMi4wNzE5MzAgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdAppbmRleCBiMGE4MWNhLi5hODE5N2VmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0CkBAIC0xLDM0MjYgKzEsMzQyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gZm1hLmRlY1Rlc3QgLS0gZGVjaW1hbCBmdXNlZCBtdWx0aXBseSBhZGQgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOg0KLS0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQ0KLS0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpDQotLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQ0KLS0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkNCi0tLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUNCi0tLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQ0KLS0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLg0KLQ0KLS0tIFNhbml0eSBjaGVja3MNCi1mbWF4MDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDINCi1mbWF4MDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCi1mbWF4MDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcNCi1mbWF4MDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTANCi1mbWF4MDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCi1mbWF4MDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDENCi1mbWF4MDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTENCi1mbWF4MDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCi1mbWF4MDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDANCi1mbWF4MDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDENCi1mbWF4MDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCi1mbWF4MDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzINCi1mbWF4MDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDANCi1mbWF4MDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCi1mbWF4MDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDENCi1mbWF4MDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzINCi1mbWF4MDAxOSBmbWEgIDMgICA1ICAgNyAtPiAgMjINCi1mbWF4MDAyOSBmbWEgIDMgIC01ICAgNyAtPiAgLTgNCi0NCi0tLSBub24taW50ZWdlciBleGFjdHMNCi1mbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43Mg0KLWZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQotZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYNCi1mbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyDQotZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCi1mbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMw0KLWZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQ0KLWZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQotZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1Mw0KLWZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5DQotZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCi1mbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzDQotZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjANCi1mbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQotZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQNCi1mbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYNCi1mbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQotZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDINCi1mbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OA0KLWZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQotZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExDQotDQotLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoDQotLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQNCi0tLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdDQotLS0gICAgICAgICAgICAgICA4ODg1NjUyOTAgICAxNTU3Ljk2OTMwICAtODYwODcuNzU3OCAgLT4gMS4zODQzNTczNUUrMTINCi1mbWEwMjAxICBmbWEgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM2RSsxMiAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODRFKzE2DQotZm1hMDIwNSAgZm1hICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODNFKzE2IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NjlFKzEwDQotZm1hMDIwOCAgZm1hICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY3MEUrMTAgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICA1OTY3NjI3LjM5ICAgODM1MjY1NDAuNiAgIDQ5ODQ5NC44MTAgIC0+IDQuOTg0NTUyNzFFKzE0DQotZm1hMDIxMSAgZm1hICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MkUrMTQgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgMzQ1Ni45NDMzICAgIDg3NC4zOTUxOCAgIDE5Nzg2Ni42MTUgIC0+ICAzMjIwNjAxLjE4DQotZm1hMDIxNiAgZm1hICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTcgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDUNCi1mbWEwMjE4ICBmbWEgICAgNjI3NjkuODI4NyAgIDIwOTYuOTg5MjcgICAgNDguNDIwMzE3ICAtPiAgMTMxNjI3NzA2ICAgICAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgICAtNjguODE1MDAgICA1OTk2MTExMy45ICAgICAtODk4ODg2MiAgLT4gLTQuMTM1MjEyOTFFKzkNCi1mbWEwMjE5ICBmbWEgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MkUrOSAgSW5leGFjdCBSb3VuZGVkDQotLS0gICAgICAgICAgICAgIDIxMjYzNDEuMDIgICA2MzQ5MS41MTUyICAgIDMwMjQyNzQ1NSAgLT4gMS4zNTMwNzA0MEUrMTENCi1mbWEwMjI2ICBmbWEgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQxRSsxMSAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gSW5maW5pdGUgY29tYmluYXRpb25zDQotZm1heDA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZm1heDA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1mbWF4MDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5DQotZm1heDA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQotZm1heDA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwODA4IGZtYSAtSW5mICAgMCAgICAgICAxICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDgwOSBmbWEgLUluZiAgIDAgICAgIE5hTiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbg0KLWZtYXgwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yDQotZm1heDA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCi1mbWF4MDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQ0KLS0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZw0KLS0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQ0KLWZtYXgwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQ0KLWZtYXgyMDAwIGZtYSAyICAgICAgMiAgMEUrOTk5OTk5ICAtPiA0DQotZm1heDIwMDEgZm1hIDIgICAgICAzICAwRSs5OTk5OTkgIC0+IDYNCi1mbWF4MjAwMiBmbWEgNSAgICAgIDEgIDBFKzk5OTk5OSAgLT4gNQ0KLWZtYXgyMDAzIGZtYSA1ICAgICAgMiAgMEUrOTk5OTk5ICAtPiAxMA0KLWZtYXgyMDA0IGZtYSAxLjIwICAgMiAgMEUrOTk5OTk5ICAtPiAyLjQwDQotZm1heDIwMDUgZm1hIDEuMjAgICAwICAwRSs5OTk5OTkgIC0+IDAuMDANCi1mbWF4MjAwNiBmbWEgMS4yMCAgLTIgIDBFKzk5OTk5OSAgLT4gLTIuNDANCi1mbWF4MjAwNyBmbWEgLTEuMjAgIDIgIDBFKzk5OTk5OSAgLT4gLTIuNDANCi1mbWF4MjAwOCBmbWEgLTEuMjAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMA0KLWZtYXgyMDA5IGZtYSAtMS4yMCAtMiAgMEUrOTk5OTk5ICAtPiAyLjQwDQotZm1heDIwMTAgZm1hIDUuMDkgNy4xICAwRSs5OTk5OTkgIC0+IDM2LjEzOQ0KLWZtYXgyMDExIGZtYSAyLjUgICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wDQotZm1heDIwMTIgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwDQotZm1heDIwMTMgZm1hIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5IFJvdW5kZWQNCi1mbWF4MjAxNCBmbWEgOS45OTk5OTk5OTkgOS45OTk5OTk5OTkgIDBFKzk5OTk5OSAgLT4gMTAwLjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjAxNSBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDANCi1wcmVjaXNpb246IDYNCi1mbWF4MjAxNiBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDANCi1mbWF4MjAxNyBmbWEgIDkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjAxOCBmbWEgIDkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjAxOSBmbWEgLTkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjAyMCBmbWEgLTkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQNCi1wcmVjaXNpb246IDE1DQotZm1heDIwNTkgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzANCi1mbWF4MjE2MCBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOTc2NTYyNDk5OTk5MDIzNDM3NQ0KLXByZWNpc2lvbjogOQ0KLS0tLS0tDQotDQotLS0gemVyb3MsIGV0Yy4NCi1mbWF4MjAyMSBmbWEgIDAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyMDIyIGZtYSAgMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDIwMjMgZm1hIC0wICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjAyNCBmbWEgLTAgICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyMDI1IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDIwMjYgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjAyNyBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyMDI4IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDIwMzAgZm1hICA1LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDANCi1mbWF4MjAzMSBmbWEgIDAwLjAwICAwLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMA0KLWZtYXgyMDMyIGZtYSAgMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWZtYXgyMDMzIGZtYSAgMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLWZtYXgyMDM0IGZtYSAtNS4wMCAgIDFFLTMgICAwRSs5OTk5OTkgIC0+IC0wLjAwNTAwDQotZm1heDIwMzUgZm1hIC0wMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDANCi1mbWF4MjAzNiBmbWEgLTAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCi1mbWF4MjAzNyBmbWEgLTBFLTMgICAwMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCi1mbWF4MjAzOCBmbWEgIDUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMA0KLWZtYXgyMDM5IGZtYSAgMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwDQotZm1heDIwNDAgZm1hICAwMC4wMCAtMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQotZm1heDIwNDEgZm1hICAwRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQotZm1heDIwNDIgZm1hIC01LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDANCi1mbWF4MjA0MyBmbWEgLTAwLjAwIC0wLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMA0KLWZtYXgyMDQ0IGZtYSAtMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KLWZtYXgyMDQ1IGZtYSAtMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGggbXVsdGlwbHkNCi1mbWF4MjA1MCBmbWEgMS4yMCAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAzLjYwDQotZm1heDIwNTEgZm1hIDcgICAgMyAgICAgICAgIDBFKzk5OTk5OSAgLT4gMjENCi1mbWF4MjA1MiBmbWEgMC45ICAwLjggICAgICAgMEUrOTk5OTk5ICAtPiAwLjcyDQotZm1heDIwNTMgZm1hIDAuOSAgLTAgICAgICAgIDBFKzk5OTk5OSAgLT4gMC4wDQotZm1heDIwNTQgZm1hIDY1NDMyMSA2NTQzMjEgIDBFKzk5OTk5OSAgLT4gNC4yODEzNTk3MUUrMTEgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgyMDYwIGZtYSAxMjMuNDUgMWU3ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSs5DQotZm1heDIwNjEgZm1hIDEyMy40NSAxZTggICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEwDQotZm1heDIwNjIgZm1hIDEyMy40NSAxZSs5ICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzExDQotZm1heDIwNjMgZm1hIDEyMy40NSAxZTEwICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEyDQotZm1heDIwNjQgZm1hIDEyMy40NSAxZTExICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEzDQotZm1heDIwNjUgZm1hIDEyMy40NSAxZTEyICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE0DQotZm1heDIwNjYgZm1hIDEyMy40NSAxZTEzICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE1DQotDQotDQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQotcHJlY2lzaW9uOiA5DQotZm1heDIwODAgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KLWZtYXgyMDgxIGZtYSAwLjEgMTIzNDU2Nzg5MSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA4MiBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDgzIGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDg0IGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkNCi1wcmVjaXNpb246IDgNCi1mbWF4MjA4NSBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwODYgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDcNCi1mbWF4MjA4NyBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA4OCBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiA5DQotZm1heDIwOTAgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KLWZtYXgyMDkxIGZtYSAxMjM0NTY3ODkxICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA5MiBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDkzIGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyMDk0IGZtYSAxMjM0NTY3ODkgICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkNCi1wcmVjaXNpb246IDgNCi1mbWF4MjA5NSBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDIwOTYgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDcNCi1mbWF4MjA5NyBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjA5OCBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2Fycmllcw0KLW1heGV4cG9uZW50OiA5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5DQotcHJlY2lzaW9uOiAzMw0KLWZtYXgyMTAxIGZtYSA5IDkgICAgMEUrOTk5OTk5ICAtPiA4MQ0KLWZtYXgyMTAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwDQotZm1heDIxMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMA0KLWZtYXgyMTA0IGZtYSA5IDkwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMA0KLWZtYXgyMTA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwDQotZm1heDIxMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMA0KLWZtYXgyMTA3IGZtYSA5IDkwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMA0KLWZtYXgyMTA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwDQotZm1heDIxMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMA0KLWZtYXgyMTEwIGZtYSA5IDkwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMA0KLWZtYXgyMTExIGZtYSA5IDkwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwDQotZm1heDIxMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMA0KLWZtYXgyMTEzIGZtYSA5IDkwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMA0KLWZtYXgyMTE0IGZtYSA5IDkwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwDQotZm1heDIxMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTE2IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTE3IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTE5IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTIwIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQotZm1heDIxMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTIyIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTIzIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMNCi1mbWF4MjEzMSBmbWEgMyAzICAgIDBFKzk5OTk5OSAgLT4gOQ0KLWZtYXgyMTMyIGZtYSAzIDMwICAgIDBFKzk5OTk5OSAgLT4gOTANCi1mbWF4MjEzMyBmbWEgMyAzMDAgICAgMEUrOTk5OTk5ICAtPiA5MDANCi1mbWF4MjEzNCBmbWEgMyAzMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMA0KLWZtYXgyMTM1IGZtYSAzIDMwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDANCi1mbWF4MjEzNiBmbWEgMyAzMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDANCi1mbWF4MjEzNyBmbWEgMyAzMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMA0KLWZtYXgyMTM4IGZtYSAzIDMwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDANCi1mbWF4MjEzOSBmbWEgMyAzMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDANCi1mbWF4MjE0MCBmbWEgMyAzMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMA0KLWZtYXgyMTQxIGZtYSAzIDMwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDANCi1mbWF4MjE0MiBmbWEgMyAzMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDANCi1mbWF4MjE0MyBmbWEgMyAzMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ0IGZtYSAzIDMwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDANCi1mbWF4MjE0NSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDANCi1mbWF4MjE0NiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTQ3IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjE0OCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjE0OSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTUwIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjE1MSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDANCi1mbWF4MjE1MiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KLWZtYXgyMTUzIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCi0NCi1tYXhleHBvbmVudDogOTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTkNCi1wcmVjaXNpb246IDkNCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cvdW5kZXJmbG93DQotZm1heDIxNzAgZm1hIDEgOWU5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5DQotZm1heDIxNzEgZm1hIDEgOS45ZTk5OTk5OSAgIDBFKzk5OTk5OSAgLT4gOS45RSs5OTk5OTkNCi1mbWF4MjE3MiBmbWEgMSA5Ljk5ZTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5Ljk5RSs5OTk5OTkNCi1mbWF4MjE3MyBmbWEgOWU5OTk5OTkgICAgMSAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkNCi1mbWF4MjE3NCBmbWEgOS45ZTk5OTk5OSAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQ0KLWZtYXgyMTc2IGZtYSA5Ljk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQ0KLWZtYXgyMTc3IGZtYSAxIDkuOTk5OTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQ0KLWZtYXgyMTc4IGZtYSA5Ljk5OTk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQ0KLQ0KLWZtYXgyMTgwIGZtYSAwLjEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5DQotZm1heDIxODEgZm1hIDAuMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OA0KLWZtYXgyMTgyIGZtYSAwLjEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk3DQotDQotZm1heDIxODMgZm1hIDAuMSA5ZS05OTk5OTggICAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQ0KLWZtYXgyMTg0IGZtYSAwLjEgOTllLTk5OTk5OCAgICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OA0KLWZtYXgyMTg1IGZtYSAwLjEgOTk5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcNCi1mbWF4MjE4NiBmbWEgMC4xIDk5OWUtOTk5OTk3ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2DQotZm1heDIxODcgZm1hIDAuMSA5OTk5ZS05OTk5OTcgICAwRSs5OTk5OTkgIC0+IDkuOTk5RS05OTk5OTUNCi1mbWF4MjE4OCBmbWEgMC4xIDk5OTk5ZS05OTk5OTcgIDBFKzk5OTk5OSAgLT4gOS45OTk5RS05OTk5OTQNCi0NCi1mbWF4MjE5MCBmbWEgMSA5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTgNCi1mbWF4MjE5MSBmbWEgMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5Nw0KLWZtYXgyMTkyIGZtYSAxIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5Ng0KLWZtYXgyMTkzIGZtYSA5ZS05OTk5OTggICAxICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OA0KLWZtYXgyMTk0IGZtYSA5OWUtOTk5OTk4ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3DQotZm1heDIxOTUgZm1hIDk5OWUtOTk5OTk4IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2DQotDQotLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlDQotcHJlY2lzaW9uOiAzMw0KLWZtYXgyMjQ2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MzAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMg0KLWZtYXgyMjQ3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMQ0KLWZtYXgyMjQ4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMA0KLWZtYXgyMjQ5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTMgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyOQ0KLWZtYXgyMjUwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OSAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyOA0KLWZtYXgyMjUxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIwICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNw0KLWZtYXgyMjUyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNg0KLWZtYXgyMjUzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNQ0KLWZtYXgyMjU0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNA0KLWZtYXgyMjU1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMw0KLWZtYXgyMjU2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMg0KLWZtYXgyMjU3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMQ0KLWZtYXgyMjU4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMA0KLWZtYXgyMjU5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOQ0KLWZtYXgyMjYwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk3ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOA0KLWZtYXgyMjYxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNw0KLWZtYXgyMjYyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNg0KLWZtYXgyMjYzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTM0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNQ0KLWZtYXgyMjY0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNA0KLWZtYXgyMjY1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOSAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMw0KLWZtYXgyMjY2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMg0KLWZtYXgyMjY3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMQ0KLWZtYXgyMjY4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMA0KLWZtYXgyMjY5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgOQ0KLWZtYXgyMjcwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTEgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgOA0KLWZtYXgyMjcxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNw0KLWZtYXgyMjcyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNg0KLWZtYXgyMjczIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA1DQotZm1heDIyNzQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTQzRSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDQNCi1mbWF4MjI3NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NEUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzDQotZm1heDIyNzYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAyDQotZm1heDIyNzcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS41RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDENCi1mbWF4MjI3OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxRSs1ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nDQotbWF4ZXhwb25lbnQ6IDk5OTkNCi1taW5leHBvbmVudDogLTk5OTkNCi1wcmVjaXNpb246IDkNCi1mbWF4MjMwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODENCi1mbWF4MjMwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMA0KLWZtYXgyMzAzIGZtYSA5IDkwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDANCi1mbWF4MjMwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDANCi1mbWF4MjMwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMA0KLWZtYXgyMzA2IGZtYSA5IDkwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDANCi1mbWF4MjMwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDANCi1mbWF4MjMwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMA0KLWZtYXgyMzA5IGZtYSA5IDkwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzkgICBSb3VuZGVkDQotZm1heDIzMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEwICBSb3VuZGVkDQotZm1heDIzMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMSAgUm91bmRlZA0KLWZtYXgyMzEyIGZtYSA5IDkwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEyICBSb3VuZGVkDQotZm1heDIzMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEzICBSb3VuZGVkDQotZm1heDIzMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNCAgUm91bmRlZA0KLWZtYXgyMzE1IGZtYSA5IDkwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE1ICBSb3VuZGVkDQotZm1heDIzMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE2ICBSb3VuZGVkDQotZm1heDIzMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNyAgUm91bmRlZA0KLWZtYXgyMzE4IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE4ICBSb3VuZGVkDQotZm1heDIzMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE5ICBSb3VuZGVkDQotZm1heDIzMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMCAgUm91bmRlZA0KLWZtYXgyMzIxIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIxICBSb3VuZGVkDQotZm1heDIzMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIyICBSb3VuZGVkDQotZm1heDIzMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMyAgUm91bmRlZA0KLQ0KLS0tIGZhc3RwYXRoIGJyZWFrZXJzDQotcHJlY2lzaW9uOiAgIDI5DQotZm1heDIzMzAgZm1hIDEuNDkxODI0Njk3NjQxMjcwMzE3ODI0ODUyOTUyODM3MjI0IDEuMTA1MTcwOTE4MDc1NjQ3NjI0ODExNzA3ODI2NDkwMjQ2NTE0Njc1NjI4NjE0NTYyODgzNTM3MzQ1NzQ3NjAzICAwRSs5OTk5OTkgIC0+IDEuNjQ4NzIxMjcwNzAwMTI4MTQ2ODQ4NjUwNzg3OCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgNTUNCi1mbWF4MjMzMSBmbWEgMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAgMEUrOTk5OTk5ICAtPiAwLjgwMjUxODc5Nzk2MjQ3ODQ4Mjk4NDI1NTM4Mjk5MzQwNjk5NTU4OTA5ODM2OTY3NTIyMjgyOTkgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1wcmVjaXNpb246ICAgNw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDkyDQotbWluZXhwb25lbnQ6IC05Mg0KLWZtYXgyNTA0ICBmbWEgIDBFLTYwIDEwMDBFLTYwICAgMEUrOTk5OTk5ICAtPiAwRS05OCBDbGFtcGVkDQotZm1heDI1MDUgIGZtYSAgMTAwRSs2MCAwRSs2MCAgICAwRSs5OTk5OTkgIC0+IDBFKzkyIENsYW1wZWQNCi0NCi0tLSBtaXhlZCB3aXRoIHplcm9zDQotbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5DQotcHJlY2lzaW9uOiA5DQotZm1heDI1NDEgZm1hICAwICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyNTQyIGZtYSAtMCAgICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjU0MyBmbWEgIDAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDI1NDQgZm1hIC0wICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyNTQ1IGZtYSAtMSAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi1mbWF4MjU0NiBmbWEgLTEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQotZm1heDI1NDcgZm1hICAxICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KLWZtYXgyNTQ4IGZtYSAgMSAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCi0NCi1mbWF4MjU1MSBmbWEgIDAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1MiBmbWEgLTAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1MyBmbWEgIDAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1NCBmbWEgLTAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1NSBmbWEgLTEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1NiBmbWEgLTEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1NyBmbWEgIDEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU1OCBmbWEgIDEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi0NCi1mbWF4MjU2MSBmbWEgIDAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2MiBmbWEgLTAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2MyBmbWEgIDAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2NCBmbWEgLTAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2NSBmbWEgLTEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2NiBmbWEgLTEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2NyBmbWEgIDEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi1mbWF4MjU2OCBmbWEgIDEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCi0NCi1mbWF4MjU3MSBmbWEgIDAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDI1NzIgZm1hIC0wLjAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyNTczIGZtYSAgMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjU3NCBmbWEgLTAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDI1NzUgZm1hIC0xLjAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLWZtYXgyNTc2IGZtYSAtMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCi1mbWF4MjU3NyBmbWEgIDEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQotZm1heDI1NzggZm1hICAxLjAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KLQ0KLQ0KLS0tIFNwZWNpYWxzDQotZm1heDI1ODAgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjU4MSBmbWEgIEluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNTgyIGZtYSAgSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI1ODMgZm1hICBJbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNTg0IGZtYSAgSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjU4NSBmbWEgIEluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNTg2IGZtYSAgSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI1ODcgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjU4OCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNTg5IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI1OTAgZm1hIC0xICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjU5MSBmbWEgLTAgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI1OTIgZm1hICAwICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNTkzIGZtYSAgMSAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI1OTQgZm1hICAxMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjU5NSBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLQ0KLWZtYXgyNjAwIGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI2MDEgZm1hIC1JbmYgIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCi1mbWF4MjYwMiBmbWEgLUluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNjAzIGZtYSAtSW5mICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjYwNCBmbWEgLUluZiAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2MDUgZm1hIC1JbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjYwNiBmbWEgLUluZiAgIDEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNjA3IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI2MDggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi1mbWF4MjYwOSBmbWEgLUluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KLWZtYXgyNjEwIGZtYSAtMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQotZm1heDI2MTEgZm1hIC0wICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjEyIGZtYSAgMCAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjYxMyBmbWEgIDEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KLWZtYXgyNjE0IGZtYSAgMTAwMCAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQotZm1heDI2MTUgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCi0NCi1mbWF4MjYyMSBmbWEgIE5hTiAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyMiBmbWEgIE5hTiAtMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyMyBmbWEgIE5hTiAtMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyNCBmbWEgIE5hTiAtMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyNSBmbWEgIE5hTiAgMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyNiBmbWEgIE5hTiAgMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyNyBmbWEgIE5hTiAgMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyOCBmbWEgIE5hTiAgSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYyOSBmbWEgIE5hTiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzMCBmbWEgLUluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzMSBmbWEgLTEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzMiBmbWEgLTEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzMyBmbWEgLTAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzNCBmbWEgIDAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzNSBmbWEgIDEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzNiBmbWEgIDEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi1mbWF4MjYzNyBmbWEgIEluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCi0NCi1mbWF4MjY0MSBmbWEgIHNOYU4gLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDIgZm1hICBzTmFOIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjQzIGZtYSAgc05hTiAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY0NCBmbWEgIHNOYU4gLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDUgZm1hICBzTmFOICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjQ2IGZtYSAgc05hTiAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY0NyBmbWEgIHNOYU4gIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NDggZm1hICBzTmFOICBOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjQ5IGZtYSAgc05hTiBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1MCBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTEgZm1hIC1JbmYgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjUyIGZtYSAtMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1MyBmbWEgLTEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTQgZm1hIC0wICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjU1IGZtYSAgMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1NiBmbWEgIDEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NTcgZm1hICAxMDAwIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjU4IGZtYSAgSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY1OSBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWZtYXgyNjYxIGZtYSAgTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjkNCi1mbWF4MjY2MiBmbWEgIE5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+ICBOYU44DQotZm1heDI2NjMgZm1hICBOYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFONzENCi1mbWF4MjY2NCBmbWEgIE5hTjYgIE5hTjUgICAwRSs5OTk5OTkgIC0+ICBOYU42DQotZm1heDI2NjUgZm1hIC1JbmYgICBOYU40ICAgMEUrOTk5OTk5ICAtPiAgTmFONA0KLWZtYXgyNjY2IGZtYSAtOTk5ICAgTmFOMzMgIDBFKzk5OTk5OSAgLT4gIE5hTjMzDQotZm1heDI2NjcgZm1hICBJbmYgICBOYU4yICAgMEUrOTk5OTk5ICAtPiAgTmFOMg0KLQ0KLWZtYXgyNjcxIGZtYSAgc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NzIgZm1hICBzTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3MyBmbWEgIHNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjc0IGZtYSAgc05hTjE2IHNOYU45NCAgIDBFKzk5OTk5OSAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NzUgZm1hICBOYU45NSAgc05hTjkzICAgMEUrOTk5OTk5ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3NiBmbWEgLUluZiAgICBzTmFOOTIgICAwRSs5OTk5OTkgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjc3IGZtYSAgMDg4ICAgIHNOYU45MSAgIDBFKzk5OTk5OSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2NzggZm1hICBJbmYgICAgc05hTjkwICAgMEUrOTk5OTk5ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY3OSBmbWEgIE5hTiAgICBzTmFOODkgICAwRSs5OTk5OTkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWZtYXgyNjgxIGZtYSAtTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjkNCi1mbWF4MjY4MiBmbWEgLU5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+IC1OYU44DQotZm1heDI2ODMgZm1hIC1OYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFONzENCi1mbWF4MjY4NCBmbWEgLU5hTjYgLU5hTjUgICAwRSs5OTk5OTkgIC0+IC1OYU42DQotZm1heDI2ODUgZm1hIC1JbmYgIC1OYU40ICAgMEUrOTk5OTk5ICAtPiAtTmFONA0KLWZtYXgyNjg2IGZtYSAtOTk5ICAtTmFOMzMgIDBFKzk5OTk5OSAgLT4gLU5hTjMzDQotZm1heDI2ODcgZm1hICBJbmYgIC1OYU4yICAgMEUrOTk5OTk5ICAtPiAtTmFOMg0KLQ0KLWZtYXgyNjkxIGZtYSAtc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2OTIgZm1hIC1zTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5MyBmbWEgLXNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjk0IGZtYSAtc05hTjE2IC1zTmFOOTQgIDBFKzk5OTk5OSAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2OTUgZm1hIC1OYU45NSAgLXNOYU45MyAgMEUrOTk5OTk5ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5NiBmbWEgLUluZiAgICAtc05hTjkyICAwRSs5OTk5OTkgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNjk3IGZtYSAgMDg4ICAgIC1zTmFOOTEgIDBFKzk5OTk5OSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI2OTggZm1hICBJbmYgICAgLXNOYU45MCAgMEUrOTk5OTk5ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MjY5OSBmbWEgLU5hTiAgICAtc05hTjg5ICAwRSs5OTk5OTkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLWZtYXgyNzAxIGZtYSAtTmFOICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzAyIGZtYSAtTmFOICAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzAzIGZtYSAtTmFOICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzA0IGZtYSAtTmFOICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzA1IGZtYSAtSW5mICAtTmFOMCAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzA2IGZtYSAtOTk5ICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLWZtYXgyNzA3IGZtYSAgSW5mICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KLQ0KLWZtYXgyNzExIGZtYSAtc05hTiAgIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzEyIGZtYSAtc05hTiAgIC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzEzIGZtYSAtc05hTjAwICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE0IGZtYSAtc05hTiAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE1IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE2IGZtYSAtSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE3IGZtYSAgMDg4ICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE4IGZtYSAgSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgyNzE5IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KLW1heGV4cG9uZW50OiA5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OQ0KLWZtYXgyNzMwIGZtYSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI3MzEgZm1hIDlFKzk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MjczMiBmbWEgKzAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbA0KLWZtYXgyNzMzIGZtYSA5RS05OTk5OTkgKzAuMTAwICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQotZm1heDI3MzUgZm1hIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI3MzYgZm1hIDlFKzk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDI3MzcgZm1hIC0wLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQotZm1heDI3MzggZm1hIDlFLTk5OTk5OSAtMC4xMDAgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQotDQotLS0gc2lnbnMNCi1mbWF4Mjc1MSBmbWEgIDFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc1MiBmbWEgIDFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc1MyBmbWEgLTFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc1NCBmbWEgLTFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc1NSBmbWEgIDFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4Mjc1NiBmbWEgIDFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4Mjc1NyBmbWEgLTFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4Mjc1OCBmbWEgLTFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCi1wcmVjaXNpb246IDkNCi1mbWF4Mjc2MCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAxIFN1Ym5vcm1hbA0KLWZtYXgyNzYxIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAyICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDIgU3Vibm9ybWFsDQotZm1heDI3NjIgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDMgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwNCi1mbWF4Mjc2MyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA0IFN1Ym5vcm1hbA0KLWZtYXgyNzY0IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA1ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDUgU3Vibm9ybWFsDQotZm1heDI3NjUgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDYgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNiBTdWJub3JtYWwNCi1mbWF4Mjc2NiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA3IFN1Ym5vcm1hbA0KLWZtYXgyNzY3IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyNzY4IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA5ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyNzY5IGZtYSAxZS02MDAwMDAgMWUtNDAwMDEwICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCi1mbWF4Mjc3MCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3MSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3MiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3MyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3NCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3NSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3NiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3NyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3OCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mjc3OSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAxMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAnc3Vibm9ybWFsJyB0ZXN0IGVkZ2UgY29uZGl0aW9uIGF0IGhpZ2hlciBwcmVjaXNpb25zDQotcHJlY2lzaW9uOiA5OQ0KLWZtYXgyNzgwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsDQotZm1heDI3ODEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwOCBTdWJub3JtYWwNCi1mbWF4Mjc4MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDA5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDk3IFN1Ym5vcm1hbA0KLWZtYXgyNzgzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLXByZWNpc2lvbjogOTk5DQotZm1heDI3ODQgZm1hIDFlLTYwMDAwMCAxZS00MDA5OTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDk5NyBTdWJub3JtYWwNCi1mbWF4Mjc4NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5OCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwOTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi0tLSB0ZXN0IHN1Ym5vcm1hbHMgcm91bmRpbmcNCi1wcmVjaXNpb246ICAgNQ0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1mbWF4MjgwMSBmbWEgIDEuMDAwMEUtOTk5ICAxICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDBFLTk5OQ0KLWZtYXgyODAyIGZtYSAgMS4wMDBFLTk5OSAgIDFlLTEgICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbA0KLWZtYXgyODAzIGZtYSAgMS4wMEUtOTk5ICAgIDFlLTIgICAwRSs5OTk5OTkgIC0+IDEuMDBFLTEwMDEgIFN1Ym5vcm1hbA0KLWZtYXgyODA0IGZtYSAgMS4wRS05OTkgICAgIDFlLTMgICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbA0KLWZtYXgyODA1IGZtYSAgMS4wRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI4MDYgZm1hICAxLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgwNyBmbWEgIDEuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODA4IGZtYSAgMS43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MDkgZm1hICAyLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgxMCBmbWEgIDIuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODExIGZtYSAgMi43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MTIgZm1hICAxLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgxMyBmbWEgIDEuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODE0IGZtYSAgMS41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MTUgZm1hICAyLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgxNiBmbWEgIDIuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODE3IGZtYSAgMi41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDI4MTggZm1hICAxRS05OTkgICAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsDQotZm1heDI4MTkgZm1hICAzRS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyODIwIGZtYSAgNUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1mbWF4MjgyMSBmbWEgIDdFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODIyIGZtYSAgOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MjMgZm1hICA5LjlFLTk5OSAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MjgyNCBmbWEgIDFFLTk5OSAgICAgIC0xZS00ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBTdWJub3JtYWwNCi1mbWF4MjgyNSBmbWEgIDNFLTk5OSAgICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI4MjYgZm1hIC01RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyODI3IGZtYSAgN0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4MjggZm1hIC05RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MjgyOSBmbWEgIDkuOUUtOTk5ICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODMwIGZtYSAgMy4wRS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1mbWF4MjgzMSBmbWEgIDEuMEUtNTAxICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsDQotZm1heDI4MzIgZm1hICAyLjBFLTUwMSAgICAgMmUtNTAxICAwRSs5OTk5OTkgIC0+IDQuMEUtMTAwMiAgIFN1Ym5vcm1hbA0KLWZtYXgyODMzIGZtYSAgNC4wRS01MDEgICAgIDRlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwRS0xMDAxICBTdWJub3JtYWwNCi1mbWF4MjgzNCBmbWEgMTAuMEUtNTAxICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsDQotZm1heDI4MzUgZm1hIDMwLjBFLTUwMSAgICAzMGUtNTAxICAwRSs5OTk5OTkgIC0+IDkuMDAwRS0xMDAwIFN1Ym5vcm1hbA0KLWZtYXgyODM2IGZtYSA0MC4wRS01MDEgICAgNDBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwMDBFLTk5OQ0KLQ0KLS0tIHNxdWFyZXMNCi1mbWF4Mjg0MCBmbWEgIDFFLTUwMiAgICAgICAxZS01MDIgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLWZtYXgyODQxIGZtYSAgMUUtNTAxICAgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgICBTdWJub3JtYWwNCi1mbWF4Mjg0MiBmbWEgIDJFLTUwMSAgICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNEUtMTAwMiAgICAgU3Vibm9ybWFsDQotZm1heDI4NDMgZm1hICA0RS01MDEgICAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNkUtMTAwMSAgIFN1Ym5vcm1hbA0KLWZtYXgyODQ0IGZtYSAxMEUtNTAxICAgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAwICBTdWJub3JtYWwNCi1mbWF4Mjg0NSBmbWEgMzBFLTUwMSAgICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMCAgU3Vibm9ybWFsDQotZm1heDI4NDYgZm1hIDQwRS01MDEgICAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwRS05OTkNCi0NCi0tLSBjdWJlcw0KLWZtYXgyODUwIGZtYSAgMUUtNjcwICAgICAxZS0zMzUgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotZm1heDI4NTEgZm1hICAxRS02NjggICAgIDFlLTMzNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbA0KLWZtYXgyODUyIGZtYSAgNEUtNjY4ICAgICAyZS0zMzQgIDBFKzk5OTk5OSAgLT4gOEUtMTAwMiAgICBTdWJub3JtYWwNCi1mbWF4Mjg1MyBmbWEgIDlFLTY2OCAgICAgM2UtMzM0ICAwRSs5OTk5OTkgIC0+IDIuN0UtMTAwMSAgU3Vibm9ybWFsDQotZm1heDI4NTQgZm1hIDE2RS02NjggICAgIDRlLTMzNCAgMEUrOTk5OTk5ICAtPiA2LjRFLTEwMDEgIFN1Ym5vcm1hbA0KLWZtYXgyODU1IGZtYSAyNUUtNjY4ICAgICA1ZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4yNUUtMTAwMCBTdWJub3JtYWwNCi1mbWF4Mjg1NiBmbWEgMTBFLTY2OCAgIDEwMGUtMzM0ICAwRSs5OTk5OTkgIC0+IDEuMDAwRS05OTkNCi0NCi0tLSB0ZXN0IGRlcml2ZWQgZnJvbSByZXN1bHQgb2YgMC4wOTkgKiogOTk5IGF0IDE1IGRpZ2l0cyB3aXRoIHVubGltaXRlZCBleHBvbmVudA0KLXByZWNpc2lvbjogMTkNCi1mbWF4Mjg2MCBmbWEgIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgIDBFKzk5OTk5OSAgLT4gNC40MDQ3Nzk4NjAyODU1MUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KLXByZWNpc2lvbjogMw0KLW1heEV4cG9uZW50OiA5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OQ0KLWZtYXgyODcwIGZtYSAxICA5Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgyODcxIGZtYSAxIC05Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgyODcyIGZtYSAgICA5Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgyODczIGZtYSAgIC05Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQotcHJlY2lzaW9uOiAgIDUNCi1tYXhleHBvbmVudDogNzkNCi1taW5leHBvbmVudDogLTc5DQotZm1heDI4ODEgZm1hICAxLjIzNDdFLTQwICAxLjIzNDdFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjRFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgyODgyIGZtYSAgMS4yMzRFLTQwICAxLjIzNEUtNDAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4Mjg4MyBmbWEgIDEuMjNFLTQwICAgMS4yM0UtNDAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjUxM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDI4ODQgZm1hICAxLjJFLTQwICAgIDEuMkUtNDAgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40NEUtODAgICBTdWJub3JtYWwNCi1mbWF4Mjg4NSBmbWEgIDEuMkUtNDAgICAgMS4yRS00MSAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MSAgIFN1Ym5vcm1hbA0KLWZtYXgyODg2IGZtYSAgMS4yRS00MCAgICAxLjJFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNEUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4Mjg4NyBmbWEgIDEuMkUtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjZFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDI4ODggZm1hICAxLjNFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS43RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgyODg5IGZtYSAgMS4zRS00MCAgICAxLjNFLTQzICAgICAgIDBFKzk5OTk5OSAgLT4gICAgMkUtODMgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4Mjg5MCBmbWEgIDEuM0UtNDEgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDBFLTgzICAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0NCi1mbWF4Mjg5MSBmbWEgIDEuMjM0NUUtMzkgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgyODkyIGZtYSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDI4OTMgZm1hICAxLjIzNDVFLTQwICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgyODk0IGZtYSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4Mjg5NSBmbWEgIDEuMjM0NUUtNDEgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDI4OTYgZm1hICAxLjIzNDU2RS00MSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cNCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLQ0KLWZtYXgyOTAwIGZtYSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgIDBFKzk5OTk5OSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MDEgZm1hICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkwMiBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgyOTAzIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MDQgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MjkwNSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLS0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KLWZtYXgyOTA2IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KLWZtYXgyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgIDBFKzk5OTk5OSAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQ0KLS0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQotZm1heDI5MDggZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MDkgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OSAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MTAgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDI5MTEgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQotcHJlY2lzaW9uOiAgIDM0DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogNjE0NA0KLW1pbkV4cG9uZW50OiAtNjE0Mw0KLWZtYXgyOTIxICBmbWEgMTMwRS0yICAxMjBFLTIgIDBFKzk5OTk5OSAgLT4gMS41NjAwDQotZm1heDI5MjIgIGZtYSAxMzBFLTIgIDEyRS0xICAgMEUrOTk5OTk5ICAtPiAxLjU2MA0KLWZtYXgyOTIzICBmbWEgMTMwRS0yICAxRTAgICAgIDBFKzk5OTk5OSAgLT4gMS4zMA0KLQ0KLS0tIE51bGwgdGVzdHMNCi1mbWF4Mjk5MCBmbWEgICMgMTAgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDI5OTEgZm1hIDEwICAjICAwRSs5OTk5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1mbWF4MzAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDINCi1mbWF4MzAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUNCi1mbWF4MzAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCi1mbWF4MzAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDINCi1mbWF4MzAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04DQotZm1heDMwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQotZm1heDMwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCi1mbWF4MzAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCi1mbWF4MzAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCi1mbWF4MzAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCi0NCi1mbWF4MzAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDE1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDE4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzMDIxIGZtYSAgMSAgIDAgMSAtPiAxDQotZm1heDMwMjIgZm1hICAxICAgMSAxIC0+IDINCi1mbWF4MzAyMyBmbWEgIDEgICAyIDEgLT4gMw0KLWZtYXgzMDI0IGZtYSAgMSAgIDMgMSAtPiA0DQotZm1heDMwMjUgZm1hICAxICAgNCAxIC0+IDUNCi1mbWF4MzAyNiBmbWEgIDEgICA1IDEgLT4gNg0KLWZtYXgzMDI3IGZtYSAgMSAgIDYgMSAtPiA3DQotZm1heDMwMjggZm1hICAxICAgNyAxIC0+IDgNCi1mbWF4MzAyOSBmbWEgIDEgICA4IDEgLT4gOQ0KLWZtYXgzMDMwIGZtYSAgMSAgIDkgMSAtPiAxMA0KLQ0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KLWZtYXgzMDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWZtYXgzMDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5Jw0KLWZtYXgzMDMzIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJw0KLWZtYXgzMDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KLQ0KLWZtYXgzMDM1IGZtYSAgMSAgICc3MCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAzNiBmbWEgIDEgICAnNzAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDM3IGZtYSAgMSAgICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMDM4IGZtYSAgMSAgICc3MDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQNCi0NCi0tLSBzeW1tZXRyeToNCi1mbWF4MzA0MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwNDEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA0MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzA0NCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwNDUgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkDQotDQotLS0gc2FtZSwgaGlnaGVyIHByZWNpc2lvbg0KLXByZWNpc2lvbjogMTUNCi1mbWF4MzA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KLWZtYXgzMDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KLWZtYXgzMDQ4IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCi1mbWF4MzA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KLWZtYXgzMDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KLWZtYXgzMDUxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCi1mbWF4MzA1MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1mbWF4MzA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQotZm1heDMwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCi1mbWF4MzA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KLWZtYXgzMDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KLWZtYXgzMDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQotDQotLS0gemVybyBwcmVzZXJ2YXRpb24NCi1wcmVjaXNpb246IDYNCi1mbWF4MzA2MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwNjEgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KLWZtYXgzMDYyIGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KLWZtYXgzMDYzIGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwNjQgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMwNjUgZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCi1mbWF4MzA3MCBmbWEgIDEgICAxICAwICAgIC0+IDENCi1mbWF4MzA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDENCi1mbWF4MzA3MiBmbWEgIDEgICAxICAuMCAgIC0+IDEuMA0KLWZtYXgzMDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wDQotZm1heDMwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwDQotZm1heDMwNzUgZm1hICAxICAgIDAgIDEgICAtPiAxDQotZm1heDMwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxDQotZm1heDMwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjANCi1mbWF4MzA3OCBmbWEgIDEgICAwLjAgMSAgIC0+IDEuMA0KLWZtYXgzMDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMA0KLQ0KLXByZWNpc2lvbjogOQ0KLQ0KLS0tIHNvbWUgY2Fycmllcw0KLWZtYXgzMDgwIGZtYSAgMSAgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCi1mbWF4MzA4MSBmbWEgIDEgICA5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMEUrOSBSb3VuZGVkDQotZm1heDMwODIgZm1hICAxICAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMA0KLWZtYXgzMDgzIGZtYSAgMSAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KLWZtYXgzMDg0IGZtYSAgMSAgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwDQotZm1heDMwODUgZm1hICAxICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMA0KLWZtYXgzMDg2IGZtYSAgMSAgICAgICAgOTk5OSAxICAtPiAxMDAwMA0KLWZtYXgzMDg3IGZtYSAgMSAgICAgICAgIDk5OSAxICAtPiAxMDAwDQotZm1heDMwODggZm1hICAxICAgICAgICAgIDk5IDEgIC0+IDEwMA0KLWZtYXgzMDg5IGZtYSAgMSAgICAgICAgICAgOSAxICAtPiAxMA0KLQ0KLQ0KLS0tIG1vcmUgTEhTIHN3YXBzDQotZm1heDMwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQotZm1heDMwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCi1mbWF4MzA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZm1heDMwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQotZm1heDMwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQotZm1heDMwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZm1heDMwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQotZm1heDMwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCi1mbWF4MzA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWZtYXgzMDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCi1mbWF4MzEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KLWZtYXgzMTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1mbWF4MzEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCi1mbWF4MzEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCi1mbWF4MzEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZm1heDMxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCi1mbWF4MzEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCi1mbWF4MzEwNyBmbWEgIDEgICAnLTVFOCcgICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMCcNCi1mbWF4MzEwOCBmbWEgIDEgICAnLTVFOScgICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgUm91bmRlZA0KLWZtYXgzMTA5IGZtYSAgMSAgICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkDQotZm1heDMxMTAgZm1hICAxICAgJy01RTExJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMScgIFJvdW5kZWQNCi1mbWF4MzExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KLQ0KLS0tIG1vcmUgUkhTIHN3YXBzDQotZm1heDMxMTMgZm1hICAxICAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCi1mbWF4MzExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQotZm1heDMxMTYgZm1hICAxICAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQotZm1heDMxMTcgZm1hICAxICAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCi1mbWF4MzExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KLWZtYXgzMTIwIGZtYSAgMSAgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQotZm1heDMxMjEgZm1hICAxICAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCi1mbWF4MzEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQotZm1heDMxMjMgZm1hICAxICAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KLWZtYXgzMTI0IGZtYSAgMSAgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KLWZtYXgzMTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCi1mbWF4MzEyNiBmbWEgIDEgICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCi1mbWF4MzEyNyBmbWEgIDEgICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KLWZtYXgzMTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQotZm1heDMxMjkgZm1hICAxICAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQotZm1heDMxMzAgZm1hICAxICAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KLWZtYXgzMTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQotZm1heDMxMzIgZm1hICAxICAgMCAgJy01RTgnICAgICAgIC0+ICAnLTUwMDAwMDAwMCcNCi1mbWF4MzEzMyBmbWEgIDEgICAwICAnLTVFOScgICAgICAgLT4gICctNS4wMDAwMDAwMEUrOScgICAgUm91bmRlZA0KLWZtYXgzMTM0IGZtYSAgMSAgIDAgICctNUUxMCcgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMCcgICBSb3VuZGVkDQotZm1heDMxMzUgZm1hICAxICAgMCAgJy01RTExJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgIFJvdW5kZWQNCi1mbWF4MzEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KLQ0KLS0tIHJlbGF0ZWQNCi1mbWF4MzEzNyBmbWEgIDEgICAgMSAgJzBFLTEyJyAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzEzOCBmbWEgIDEgICAtMSAgJzBFLTEyJyAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQNCi1mbWF4MzEzOSBmbWEgIDEgICAnMEUtMTInIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzE0MCBmbWEgIDEgICAnMEUtMTInIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQNCi1mbWF4MzE0MSBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMCAgIC0+ICAnMTAwMDAuMDAwMCcNCi1mbWF4MzE0MiBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMDAgIC0+ICAnMTAwMDAuMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzE0MyBmbWEgIDEgICAwLjAwMCAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcNCi1mbWF4MzE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcgIFJvdW5kZWQNCi0NCi0tLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQ0KLWZtYXgzMTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcNCi1mbWF4MzE0NyBmbWEgIDEgICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KLWZtYXgzMTQ4IGZtYSAgMSAgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnDQotZm1heDMxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJw0KLWZtYXgzMTUwIGZtYSAgMSAgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQotZm1heDMxNTEgZm1hICAxICAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcNCi1mbWF4MzE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnDQotZm1heDMxNTMgZm1hICAxICAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KLWZtYXgzMTU0IGZtYSAgMSAgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycNCi1mbWF4MzE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJw0KLWZtYXgzMTU2IGZtYSAgMSAgICczJyAgICAgJzMnICAgICAtPiAgJzYnDQotZm1heDMxNTcgZm1hICAxICAgJzMnICAgICAnKzMnICAgIC0+ICAnNicNCi1mbWF4MzE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJw0KLWZtYXgzMTU5IGZtYSAgMSAgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCi1mbWF4MzE2MCBmbWEgIDEgICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJw0KLQ0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuDQotcHJlY2lzaW9uOiAxNQ0KLWZtYXgzMTYxIGZtYSAgMSAgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KLWZtYXgzMTYyIGZtYSAgMSAgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQotZm1heDMxNjQgZm1hICAxICAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQotZm1heDMxNjUgZm1hICAxICAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLWZtYXgzMTY2IGZtYSAgMSAgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCi1mbWF4MzE2NyBmbWEgIDEgICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQotZm1heDMxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KLQ0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQotZm1heDMxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknDQotZm1heDMxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTgnDQotZm1heDMxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTcnDQotZm1heDMxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnDQotZm1heDMxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTUnDQotZm1heDMxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTQnDQotDQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KLXByZWNpc2lvbjogOQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDMyMDAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KLWZtYXgzMjAxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMDIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjA0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMDUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjA3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMDggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIwOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjEwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIxMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjEzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIxNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjE2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCi1mbWF4MzIxNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjE4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDMyMjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KLWZtYXgzMjIxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMjIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjI0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMjUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjI3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMjggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIyOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjMwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIzMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjMzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzIzNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjM2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCi1mbWF4MzIzNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjM4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyMzkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KLWZtYXgzMjQwIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNDEgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI0MiBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBkb3duDQotZm1heDMyNTAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KLWZtYXgzMjUxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1MyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjU0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1NiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjU3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNTggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI1OSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjYwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI2MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjYzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI2NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjY2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCi1mbWF4MzI2NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjY4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBpbnB1dCBwcmVwYXJhdGlvbiB0ZXN0cyAob3BlcmFuZHMgc2hvdWxkIG5vdCBiZSByb3VuZGVkKQ0KLXByZWNpc2lvbjogMw0KLXJvdW5kaW5nOiBoYWxmX3VwDQotDQotZm1heDMyNzAgZm1hICAxICAgJzEyMzQ1Njc4OTAwMDAwJyAgOTk5OTk5OTk5OTk5OSAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI3MSBmbWEgIDEgICAgJzk5OTk5OTk5OTk5OTknIDEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzMjcyIGZtYSAgMSAgICcxMkUrMycgICczNDQ0JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNzMgZm1hICAxICAgJzEyRSszJyAgJzM0NDYnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI3NCBmbWEgIDEgICAnMTJFKzMnICAnMzQ0OS45JyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjc1IGZtYSAgMSAgICcxMkUrMycgICczNDUwLjAnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyNzYgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMScgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI3NyBmbWEgIDEgICAnMTJFKzMnICAnMzQ1NCcgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjc4IGZtYSAgMSAgICcxMkUrMycgICczNDU2JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDMyODEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI4MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjgzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyODQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI4NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjg2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyODcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl9kb3duDQotZm1heDMyOTEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI5MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjkzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyOTQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzI5NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMjk2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDMyOTcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzMzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDANCi1mbWF4MzMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxDQotZm1heDMzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMg0KLWZtYXgzMzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMNCi1mbWF4MzMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5DQotZm1heDMzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMA0KLWZtYXgzMzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDENCi1mbWF4MzMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyDQotZm1heDMzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMg0KLWZtYXgzMzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTENCi1mbWF4MzMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwDQotZm1heDMzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQ0KLWZtYXgzMzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcNCi1mbWF4MzMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4DQotZm1heDMzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQ0KLWZtYXgzMzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDANCi0NCi1mbWF4MzMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWZtYXgzMzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQotZm1heDMzMjMgZm1hICAxICAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCi1mbWF4MzMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWZtYXgzMzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQotZm1heDMzMjYgZm1hICAxICAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCi1mbWF4MzMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWZtYXgzMzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQotZm1heDMzMjkgZm1hICAxICAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCi1mbWF4MzMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWZtYXgzMzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQotZm1heDMzMzIgZm1hICAxICAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCi1mbWF4MzMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWZtYXgzMzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQotZm1heDMzMzUgZm1hICAxICAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCi1mbWF4MzMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQotcHJlY2lzaW9uOiA5DQotZm1heDMzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMA0KLWZtYXgzMzQxIGZtYSAgMSAgIDFFKzggICAgMCAgICAtPiAgICAxMDAwMDAwMDANCi1mbWF4MzM0MiBmbWEgIDEgICAxRSs5ICAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgUm91bmRlZA0KLWZtYXgzMzQzIGZtYSAgMSAgIDFFKzEwICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBSb3VuZGVkDQotLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLg0KLWZtYXgzMzQ0IGZtYSAgMSAgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDENCi1mbWF4MzM0NSBmbWEgIDEgICAxRSs4ICAgIDEgICAgLT4gICAgMTAwMDAwMDAxDQotZm1heDMzNDYgZm1hICAxICAgMUUrOSAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMzQ3IGZtYSAgMSAgIDFFKzEwICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQotZm1heDMzNDkgZm1hICAxICAgMUUrOCAgICA3ICAgIC0+ICAgIDEwMDAwMDAwNw0KLWZtYXgzMzUwIGZtYSAgMSAgIDFFKzkgICAgNyAgICAtPiAgIDEuMDAwMDAwMDFFKzkgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzM1MSBmbWEgIDEgICAxRSsxMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1wcmVjaXNpb246ICAgNw0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDkyDQotbWluZXhwb25lbnQ6IC05Mg0KLWZtYXgzMzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1DQotZm1heDMzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZA0KLWZtYXgzMzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzM2NCAgZm1hICAxICAgOS45OTk5OTlFKzkyIC05Ljk5OTk5OUUrOTIgLT4gMEUrODYNCi0NCi0tLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQotcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KLXByZWNpc2lvbjogICAxMA0KLWZtYXgzMzcwIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQ0KLXByZWNpc2lvbjogICAgICA2DQotZm1heDMzNzEgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLXByZWNpc2lvbjogICAxMA0KLWZtYXgzMzcyIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQ0KLXByZWNpc2lvbjogICAgICA2DQotZm1heDMzNzMgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotcHJlY2lzaW9uOiAgIDEwDQotZm1heDMzNzQgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExDQotcHJlY2lzaW9uOiAgICAgIDYNCi1mbWF4MzM3NSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KLXByZWNpc2lvbjogOQ0KLW1heGV4cG9uZW50OiA5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OQ0KLWZtYXgzNDAwIGZtYSAgMSAgICAgMSAgIDc3ZS03ICAgICAgIC0+ICAxLjAwMDAwNzcNCi1mbWF4MzQwMSBmbWEgIDEgICAgIDEgICA3N2UtOCAgICAgICAtPiAgMS4wMDAwMDA3Nw0KLWZtYXgzNDAyIGZtYSAgMSAgICAgMSAgIDc3ZS05ICAgICAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xMCAgICAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xMSAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDA3IGZtYSAgMSAgICAgMSAgIDc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNDEwIGZtYSAgMSAgICAxMCAgIDc3ZS03ICAgICAgIC0+ICAxMC4wMDAwMDc3DQotZm1heDM0MTEgZm1hICAxICAgIDEwICAgNzdlLTggICAgICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTIgZm1hICAxICAgIDEwICAgNzdlLTkgICAgICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTMgZm1hICAxICAgIDEwICAgNzdlLTEwICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTQgZm1hICAxICAgIDEwICAgNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTUgZm1hICAxICAgIDEwICAgNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTYgZm1hICAxICAgIDEwICAgNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MTcgZm1hICAxICAgIDEwICAgNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0MjAgZm1hICAxICAgIDc3ZS03ICAgICAgICAxICAgLT4gIDEuMDAwMDA3Nw0KLWZtYXgzNDIxIGZtYSAgMSAgICA3N2UtOCAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDc3DQotZm1heDM0MjIgZm1hICAxICAgIDc3ZS05ICAgICAgICAxICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MjMgZm1hICAxICAgIDc3ZS0xMCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MjQgZm1hICAxICAgIDc3ZS0xMSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MjUgZm1hICAxICAgIDc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MjYgZm1hICAxICAgIDc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0MjcgZm1hICAxICAgIDc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0MzAgZm1hICAxICAgIDc3ZS03ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwNzcNCi1mbWF4MzQzMSBmbWEgIDEgICAgNzdlLTggICAgICAgMTAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzMiBmbWEgIDEgICAgNzdlLTkgICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzMyBmbWEgIDEgICAgNzdlLTEwICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzNCBmbWEgIDEgICAgNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzNSBmbWEgIDEgICAgNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQzNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZm1heDM0NDAgZm1hICAxICAgICAxICAgLTc3ZS03ICAgICAgIC0+ICAwLjk5OTk5MjMNCi1mbWF4MzQ0MSBmbWEgIDEgICAgIDEgICAtNzdlLTggICAgICAgLT4gIDAuOTk5OTk5MjMNCi1mbWF4MzQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTkgICAgICAgLT4gIDAuOTk5OTk5OTIzDQotZm1heDM0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xMCAgICAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ0NCBmbWEgIDEgICAgIDEgICAtNzdlLTExICAgICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NDcgZm1hICAxICAgICAxICAgLTc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNDUwIGZtYSAgMSAgICAxMCAgIC03N2UtNyAgICAgICAtPiAgIDkuOTk5OTkyMw0KLWZtYXgzNDUxIGZtYSAgMSAgICAxMCAgIC03N2UtOCAgICAgICAtPiAgIDkuOTk5OTk5MjMNCi1mbWF4MzQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTkgICAgICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTAgICAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NTQgZm1hICAxICAgIDEwICAgLTc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NTcgZm1hICAxICAgIDEwICAgLTc3ZS05OTk5OTkgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNDYwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgIDEgICAtPiAgMC45OTk5OTIzDQotZm1heDM0NjEgZm1hICAxICAgIC03N2UtOCAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTIzDQotZm1heDM0NjIgZm1hICAxICAgIC03N2UtOSAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTkyMw0KLWZtYXgzNDYzIGZtYSAgMSAgICAtNzdlLTEwICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NjQgZm1hICAxICAgIC03N2UtMTEgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ2NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NjYgZm1hICAxICAgIC03N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDY3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzQ3MCBmbWEgIDEgICAgLTc3ZS03ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5MjMNCi1mbWF4MzQ3MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTIzDQotZm1heDM0NzIgZm1hICAxICAgIC03N2UtOSAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ3MyBmbWEgIDEgICAgLTc3ZS0xMCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDc0IGZtYSAgMSAgICAtNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ3NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0NzYgZm1hICAxICAgIC03N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDc3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWdhdGl2ZSB1bHBzDQotZm1heDM0ODAgZm1hICAxICAgIC0xICAgIDc3ZS03ICAgICAgIC0+ICAtMC45OTk5OTIzDQotZm1heDM0ODEgZm1hICAxICAgIC0xICAgIDc3ZS04ICAgICAgIC0+ICAtMC45OTk5OTkyMw0KLWZtYXgzNDgyIGZtYSAgMSAgICAtMSAgICA3N2UtOSAgICAgICAtPiAgLTAuOTk5OTk5OTIzDQotZm1heDM0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xMCAgICAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xMSAgICAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xMiAgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5OSAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDg3IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5OTk5ICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM0OTAgZm1hICAxICAgLTEwICAgIDc3ZS03ICAgICAgIC0+ICAgLTkuOTk5OTkyMw0KLWZtYXgzNDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtOCAgICAgICAtPiAgIC05Ljk5OTk5OTIzDQotZm1heDM0OTIgZm1hICAxICAgLTEwICAgIDc3ZS05ICAgICAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xMCAgICAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xMSAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTEyICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTk5ICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM0OTcgZm1hICAxICAgLTEwICAgIDc3ZS05OTk5OTkgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzUwMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5MjMNCi1mbWF4MzUwMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTIzDQotZm1heDM1MDIgZm1hICAxICAgICA3N2UtOSAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5MjMNCi1mbWF4MzUwMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUwNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUwNSBmbWEgIDEgICAgIDc3ZS0xMiAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTA2IGZtYSAgMSAgICAgNzdlLTk5OSAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MDcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzUxMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTIzDQotZm1heDM1MTEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5MjMNCi1mbWF4MzUxMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUxMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUxNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTE1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MTYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUxNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLQ0KLS0tIGxvbmcgb3BlcmFuZHMNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246IDkNCi1mbWF4MzUyMSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCi1mbWF4MzUyMiBmbWEgIDEgICAwIDEyMzQ1Njc4MDAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCi1mbWF4MzUyMyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KLWZtYXgzNTI0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQotZm1heDM1MjUgZm1hICAxICAgMTIzNDU2Nzg5MCAgMCAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCi1mbWF4MzUyNiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLWZtYXgzNTI3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUyOCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM1MjkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUzMCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTMxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzUzMiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAxNQ0KLS0tIHN0aWxsIGNoZWNraW5nDQotZm1heDM1NDEgZm1hICAxICAgMTIzNDU2NzgwMDAgMCAtPiAxMjM0NTY3ODAwMA0KLWZtYXgzNTQyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMTIzNDU2NzgwMDANCi1mbWF4MzU0MyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEyMzQ1Njc4MDANCi1mbWF4MzU0NCBmbWEgIDEgICAwIDEyMzQ1Njc4MDAgIC0+IDEyMzQ1Njc4MDANCi1mbWF4MzU0NSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEyMzQ1Njc4OTANCi1mbWF4MzU0NiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEyMzQ1Njc4OTANCi1mbWF4MzU0NyBmbWEgIDEgICAxMjM0NTY3ODkxICAwIC0+IDEyMzQ1Njc4OTENCi1mbWF4MzU0OCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEyMzQ1Njc4OTENCi1mbWF4MzU0OSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEyMzQ1Njc4OTAxDQotZm1heDM1NTAgZm1hICAxICAgMCAxMjM0NTY3ODkwMSAtPiAxMjM0NTY3ODkwMQ0KLWZtYXgzNTUxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMTIzNDU2Nzg5Ng0KLWZtYXgzNTUyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMTIzNDU2Nzg5Ng0KLQ0KLS0tIHZlcmlmeSBhIHF1ZXJ5DQotcHJlY2lzaW9uOiAgICAxNg0KLW1heEV4cG9uZW50OiArMzk0DQotbWluRXhwb25lbnQ6IC0zOTMNCi1yb3VuZGluZzogICAgIGRvd24NCi1mbWF4MzU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZA0KLS0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uDQotcHJlY2lzaW9uOiAgICAxNg0KLW1heEV4cG9uZW50OiArMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1yb3VuZGluZzogICAgIGRvd24NCi1mbWF4MzU2MyBmbWEgIDEgICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KLQ0KLQ0KLS0tIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgd2l0aCBleHRyZW1lIHJvdW5kaW5nDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzNjAxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzYwMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9kb3duDQotZm1heDM2MDMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGZsb29yDQotZm1heDM2MDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGNlaWxpbmcNCi1mbWF4MzYwNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogdXANCi1mbWF4MzYwNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZG93bg0KLWZtYXgzNjA3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDM2MTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjEyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1mbWF4MzYxMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZmxvb3INCi1mbWF4MzYxNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogY2VpbGluZw0KLWZtYXgzNjE1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiB1cA0KLWZtYXgzNjE2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBkb3duDQotZm1heDM2MTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzYyMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDM2MjIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWZtYXgzNjIzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBmbG9vcg0KLWZtYXgzNjI0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBjZWlsaW5nDQotZm1heDM2MjUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IHVwDQotZm1heDM2MjYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzYyNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogaGFsZl91cA0KLWZtYXgzNjMxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzYzMiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9kb3duDQotZm1heDM2MzMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGZsb29yDQotZm1heDM2MzQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGNlaWxpbmcNCi1mbWF4MzYzNSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogdXANCi1mbWF4MzYzNiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZG93bg0KLWZtYXgzNjM3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX3VwDQotZm1heDM2NDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjQyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBoYWxmX2Rvd24NCi1mbWF4MzY0MyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogZmxvb3INCi1mbWF4MzY0NCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogY2VpbGluZw0KLWZtYXgzNjQ1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiB1cA0KLWZtYXgzNjQ2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBkb3duDQotZm1heDM2NDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzY1MSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi1yb3VuZGluZzogaGFsZl9ldmVuDQotZm1heDM2NTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGhhbGZfZG93bg0KLWZtYXgzNjUzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBmbG9vcg0KLWZtYXgzNjU0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KLXJvdW5kaW5nOiBjZWlsaW5nDQotZm1heDM2NTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IHVwDQotZm1heDM2NTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzY1NyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUNCi1yb3VuZGluZzogaGFsZl91cA0KLXByZWNpc2lvbjogIDM3DQotZm1heDM2NjAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NTM4DQotcHJlY2lzaW9uOiAgMzYNCi1mbWF4MzY2MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1NCAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzUNCi1mbWF4MzY2MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzQNCi1mbWF4MzY2MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzUgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzMNCi1mbWF4MzY2NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MyAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzINCi1mbWF4MzY2NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzENCi1mbWF4MzY2NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMzANCi1mbWF4MzY2NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjkNCi1mbWF4MzY2OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjgNCi1mbWF4MzY2OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjcNCi1mbWF4MzY3MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjYNCi1mbWF4MzY3MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjUNCi1mbWF4MzY3MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjQNCi1mbWF4MzY3MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MiAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjMNCi1mbWF4MzY3NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjINCi1mbWF4MzY3NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2MzkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjENCi1mbWF4MzY3NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMjANCi1mbWF4MzY3NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTkNCi1mbWF4MzY3OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjQgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTgNCi1mbWF4MzY3OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTcNCi1mbWF4MzY4MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTYNCi1mbWF4MzY4MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTUNCi1mbWF4MzY4MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTQNCi1mbWF4MzY4MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTMNCi1mbWF4MzY4NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTINCi1mbWF4MzY4NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTENCi1mbWF4MzY4NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMTANCi1mbWF4MzY4NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDkNCi1mbWF4MzY4OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDgNCi1mbWF4MzY4OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDcNCi1mbWF4MzY5MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgNg0KLWZtYXgzNjkxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzEyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDUNCi1mbWF4MzY5MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDQNCi1mbWF4MzY5MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMw0KLWZtYXgzNjk0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg1RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDINCi1mbWF4MzY5NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgIDENCi1mbWF4MzY5NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gMUUrMTEgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1yb3VuZGluZzogaGFsZl91cA0KLXByZWNpc2lvbjogICA5DQotDQotZm1heDM3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCi1mbWF4MzcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDANCi1mbWF4MzcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCi1mbWF4MzcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCi0NCi1mbWF4MzcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMA0KLWZtYXgzNzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjANCi1mbWF4MzcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMA0KLWZtYXgzNzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxDQotZm1heDM3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCi1mbWF4MzcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMw0KLWZtYXgzNzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszDQotZm1heDM3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCi1mbWF4MzcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMA0KLWZtYXgzNzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMA0KLWZtYXgzNzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KLQ0KLWZtYXgzNzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwDQotZm1heDM3MjEgZm1hICAxICAgMDAuMCAgIDBFKzMgIC0+IDAuMA0KLWZtYXgzNzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwDQotZm1heDM3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCi1mbWF4MzcyNCBmbWEgIDEgICAwMC5FKzIgMEUrMyAgLT4gMEUrMg0KLWZtYXgzNzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszDQotZm1heDM3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCi1mbWF4MzcyNyBmbWEgIDEgICAwMC5FKzUgMEUrMyAgLT4gMEUrMw0KLWZtYXgzNzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwDQotZm1heDM3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KLWZtYXgzNzMwIGZtYSAgMSAgIC0wMC4gICAwRSszICAtPiAwDQotDQotZm1heDM3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwDQotZm1heDM3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwDQotZm1heDM3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwDQotZm1heDM3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCi0NCi1mbWF4MzczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDANCi1mbWF4MzczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTINCi1mbWF4MzczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDINCi1mbWF4MzczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDANCi0NCi1mbWF4Mzc0MSBmbWEgIDEgICAgMCAgICAtMSAgICAgLT4gLTENCi1mbWF4Mzc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTENCi1mbWF4Mzc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDENCi1mbWF4Mzc0NCBmbWEgIDEgICAtMCAgICAgMSAgICAgLT4gIDENCi1mbWF4Mzc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTENCi1mbWF4Mzc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTENCi1mbWF4Mzc0NyBmbWEgIDEgICAgMSAgICAgMCAgICAgLT4gIDENCi1mbWF4Mzc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDENCi0NCi1mbWF4Mzc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMA0KLWZtYXgzNzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wDQotZm1heDM3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjANCi1mbWF4Mzc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMA0KLWZtYXgzNzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wDQotZm1heDM3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjANCi1mbWF4Mzc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMA0KLWZtYXgzNzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wDQotDQotZm1heDM3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjANCi1mbWF4Mzc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMA0KLWZtYXgzNzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wDQotZm1heDM3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjANCi1mbWF4Mzc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMA0KLWZtYXgzNzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wDQotZm1heDM3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjANCi1mbWF4Mzc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMA0KLQ0KLWZtYXgzNzcxIGZtYSAgMSAgICAwLjAgIC0xLjAgICAtPiAtMS4wDQotZm1heDM3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCi1mbWF4Mzc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMA0KLWZtYXgzNzc0IGZtYSAgMSAgIC0wLjAgICAxLjAgICAtPiAgMS4wDQotZm1heDM3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCi1mbWF4Mzc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMA0KLWZtYXgzNzc3IGZtYSAgMSAgICAxLjAgICAwLjAgICAtPiAgMS4wDQotZm1heDM3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCi0NCi0tLSBTcGVjaWFscw0KLWZtYXgzNzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQotZm1heDM3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotZm1heDM3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4Mzc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZm1heDM4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4MDEgZm1hICAxICAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQotZm1heDM4MDQgZm1hICAxICAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQotZm1heDM4MDcgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzgxMCBmbWEgIDEgICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzgxMyBmbWEgIDEgICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1mbWF4MzgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLWZtYXgzODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFODQotZm1heDM4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCi1mbWF4MzgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTg0KLWZtYXgzODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFODQotZm1heDM4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCi1mbWF4MzgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTg0KLWZtYXgzODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFODQotZm1heDM4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZm1heDM4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4NCi1mbWF4MzgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLWZtYXgzODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZm1heDM4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWZtYXgzODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLWZtYXgzODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWZtYXgzODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KLWZtYXgzODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLWZtYXgzODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWZtYXgzODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KLWZtYXgzODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLWZtYXgzODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWZtYXgzODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCi1mbWF4Mzg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4Mzg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KLWZtYXgzODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWZtYXgzODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gb3ZlcmZsb3csIHVuZGVyZmxvdyBhbmQgc3Vibm9ybWFsIHRlc3RzDQotbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5DQotcHJlY2lzaW9uOiA5DQotZm1heDM4OTAgZm1hICAxICAgMUUrOTk5OTk5ICAgICA5RSs5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4Mzg5MSBmbWEgIDEgICA5RSs5OTk5OTkgICAgIDFFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzODkyIGZtYSAgMSAgIC0xLjFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsDQotZm1heDM4OTMgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwNCi1mbWF4Mzg5NCBmbWEgIDEgICAtMS4wMDAxRS05OTk5OTkgIDFFLTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAzIFN1Ym5vcm1hbA0KLWZtYXgzODk1IGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4wMDAxZS05OTk5OTkgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsDQotZm1heDM4OTYgZm1hICAxICAgLTFFKzk5OTk5OSAgIC05RSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM4OTcgZm1hICAxICAgLTlFKzk5OTk5OSAgIC0xRSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM4OTggZm1hICAxICAgKzEuMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAwICAgU3Vibm9ybWFsDQotZm1heDM4OTkgZm1hICAxICAgLTFFLTk5OTk5OSAgICsxLjFlLTk5OTk5OSAtPiAxRS0xMDAwMDAwICAgIFN1Ym5vcm1hbA0KLWZtYXgzOTAwIGZtYSAgMSAgICsxLjAwMDFFLTk5OTk5OSAtMUUtOTk5OTk5ICAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwNCi1mbWF4MzkwMSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMDAwMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsDQotZm1heDM5MDIgZm1hICAxICAgLTFFKzk5OTk5OSAgICs5RSs5OTk5OTkgICAtPiAgOEUrOTk5OTk5DQotZm1heDM5MDMgZm1hICAxICAgLTlFKzk5OTk5OSAgICsxRSs5OTk5OTkgICAtPiAtOEUrOTk5OTk5DQotDQotcHJlY2lzaW9uOiAzDQotZm1heDM5MDQgZm1hICAxICAgICAgICAwIC05Ljk5OUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLWZtYXgzOTA1IGZtYSAgMSAgICAgICAgICAtOS45OTlFKzk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1mbWF4MzkwNiBmbWEgIDEgICAgICAgIDAgIDkuOTk5RSs5OTk5OTkgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQotZm1heDM5MDcgZm1hICAxICAgICAgICAgICA5Ljk5OUUrOTk5OTk5IDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KLQ0KLXByZWNpc2lvbjogMw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLWZtYXgzOTEwIGZtYSAgMSAgICAxLjAwRS05OTkgICAwICAgIC0+ICAgMS4wMEUtOTk5DQotZm1heDM5MTEgZm1hICAxICAgIDAuMUUtOTk5ICAgIDAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsDQotZm1heDM5MTIgZm1hICAxICAgIDAuMTBFLTk5OSAgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsDQotZm1heDM5MTMgZm1hICAxICAgIDAuMTAwRS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MzkxNCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgMCAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbg0KLWZtYXgzOTE1IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAwICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5MTYgZm1hICAxICAgIDAuMDk5RS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzkxNyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgMCAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTE4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzkxOSBmbWEgIDEgICAgMC4wMDA5RS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM5MjAgZm1hICAxICAgIDAuMDAwMUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLWZtYXgzOTMwIGZtYSAgMSAgIC0xLjAwRS05OTkgICAwICAgIC0+ICAtMS4wMEUtOTk5DQotZm1heDM5MzEgZm1hICAxICAgLTAuMUUtOTk5ICAgIDAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsDQotZm1heDM5MzIgZm1hICAxICAgLTAuMTBFLTk5OSAgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsDQotZm1heDM5MzMgZm1hICAxICAgLTAuMTAwRS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MzkzNCBmbWEgIDEgICAtMC4wMUUtOTk5ICAgMCAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbg0KLWZtYXgzOTM1IGZtYSAgMSAgIC0wLjk5OUUtOTk5ICAwICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDM5MzYgZm1hICAxICAgLTAuMDk5RS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzkzNyBmbWEgIDEgICAtMC4wMDlFLTk5OSAgMCAgICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTM4IGZtYSAgMSAgIC0wLjAwMUUtOTk5ICAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzkzOSBmbWEgIDEgICAtMC4wMDA5RS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM5NDAgZm1hICAxICAgLTAuMDAwMUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLS0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIGZtYSAgMSAgcw0KLWZtYXgzOTUwIGZtYSAgMSAgICAxLjAwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5DQotZm1heDM5NTEgZm1hICAxICAgIDAuMUUtOTk5ICAgICAwLjFFLTk5OSAgLT4gICAyRS0xMDAwICAgIFN1Ym5vcm1hbA0KLWZtYXgzOTUyIGZtYSAgMSAgICAwLjEwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwNCi1mbWF4Mzk1MyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4Mzk1NCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgU3Vibm9ybWFsDQotZm1heDM5NTUgZm1hICAxICAgIDAuOTk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzOTU2IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTU3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTU4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTU5IGZtYSAgMSAgICAwLjAwMDlFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTYwIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLS0tIG5lZ2F0aXZlcy4uLg0KLWZtYXgzOTYxIGZtYSAgMSAgICAxLjAwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBTdWJub3JtYWwNCi1mbWF4Mzk2MiBmbWEgIDEgICAgMC4xRS05OTkgICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDANCi1mbWF4Mzk2MyBmbWEgIDEgICAgMC4xMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDENCi1mbWF4Mzk2NCBmbWEgIDEgICAgMC4xMDBFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEgICAgQ2xhbXBlZA0KLWZtYXgzOTY1IGZtYSAgMSAgICAwLjAxRS05OTkgICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwNCi1mbWF4Mzk2NiBmbWEgIDEgICAgMC45OTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4Mzk2NyBmbWEgIDEgICAgMC4wOTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzOTY4IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTY5IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTcwIGZtYSAgMSAgICAwLjAwMDlFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzOTcxIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLQ0KLS0tIHNvbWUgJ3JlYWwnIG51bWJlcnMNCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1wcmVjaXNpb246IDgNCi1mbWF4MzU2NiBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MDZFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KLXByZWNpc2lvbjogNw0KLWZtYXgzNTY3IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkxRS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi1wcmVjaXNpb246IDYNCi1mbWF4MzU2OCBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCi0NCi0tLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsDQotLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlDQotLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQ0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotDQotZm1heDM1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4Mw0KLWZtYXgzNTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwNCi1mbWF4MzU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMNCi1mbWF4MzU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbA0KLQ0KLS0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbg0KLWZtYXgzNTc1IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KLWZtYXgzNTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KLWZtYXgzNTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotZm1heDM1Nzggc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCi1mbWF4MzU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzNTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQotDQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCi1wcmVjaXNpb246ICAgNQ0KLW1heGV4cG9uZW50OiA3OQ0KLW1pbmV4cG9uZW50OiAtNzkNCi0tLSBBZGQ6IGxocyBhbmQgcmhzIDANCi1mbWF4MzEwMDEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMDIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMDMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMDQgZm1hICAxICAgICAgICAgMCAxLjUyNDQ0RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMDUgZm1hICAxICAgICAgICAgMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMDYgZm1hICAxICAgICAgICAgMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBBZGQ6IGxocyA+PiByaHMgYW5kIHZpY2UgdmVyc2ENCi1mbWF4MzEwMTEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAxMiBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDEzIGZtYSAgMSAgICAgICAgIDEuNTI0NDZFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMTQgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAxNSBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDE2IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi0NCi0tLSBBZGQ6IGxocyArIHJocyBmbWEgIDEgIGl0aW9uIGNhcnJpZWQgb3V0DQotZm1heDMxMDIxIGZtYSAgMSAgICAgICAgIDEuNTI0NDNFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMjIgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAyMyBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMDI0IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQzRS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1mbWF4MzEwMjUgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDRFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLWZtYXgzMTAyNiBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NUUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotDQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQotcHJlY2lzaW9uOiAgICAxNg0KLW1heEV4cG9uZW50OiArMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1yb3VuZGluZzogICAgIGRvd24NCi0NCi1mbWF4MzExMDAgZm1hICAxICAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMDQgZm1hICAxICAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMDcgZm1hICAxICAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLXJvdW5kaW5nOiAgICAgY2VpbGluZw0KLWZtYXgzMTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQotDQotcm91bmRpbmc6ICAgICBkb3duDQotcHJlY2lzaW9uOiAgICA3DQotbWF4RXhwb25lbnQ6ICs5Ng0KLW1pbkV4cG9uZW50OiAtOTUNCi1mbWF4MzExMzAgZm1hICAxICAgICAxICAgICAgICAgICAgLTFlLTIwMCAgLT4gMC45OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi0tLSBzdWJub3JtYWwgYm91bmRhcnkNCi1mbWF4MzExMzEgZm1hICAxICAgICAxLjAwMDAwMEUtOTQgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5OUUtOTUgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzMTEzMiBmbWEgIDEgICAgIDEuMDAwMDAxRS05NSAgLTFlLTIwMCAgLT4gIDEuMDAwMDAwRS05NSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDMxMTMzIGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OUUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMTM0IGZtYSAgMSAgICAgMC45OTk5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OEUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMTM1IGZtYSAgMSAgICAgMC4wMDEwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OUUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMTM2IGZtYSAgMSAgICAgMC4wMDA5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OEUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQotZm1heDMxMTM3IGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMTAxICAtPiAgOS45OTk5OUUtOTYgIFN1Ym5vcm1hbA0KLWZtYXgzMTEzOCBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOTk5RS05OCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzExMzkgZm1hICAxICAgICAgICAgMTAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxMTQwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45RS0xMDAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTE0MSBmbWEgIDEgICAgICAgICAgIDEwRS0xMDEgLTFlLTIwMCAgLT4gIDlFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzExNDIgZm1hICAxICAgICAgICAgICAgMUUtMTAxIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzExNDMgZm1hICAxICAgICAgICAgICAgMEUtMTAxIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzExNDQgZm1hICAxICAgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1mbWF4MzExNTEgZm1hICAxICAgICAgICAxMDAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzExNTIgZm1hICAxICAgICAgICAgMTAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzExNTMgZm1hICAxICAgICAgICAgIDEwMEUtMTAyIC0xZS0yMDAgIC0+ICA5RS0xMDEgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTE1NCBmbWEgIDEgICAgICAgICAgIDEwRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTE1NSBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTE1NiBmbWEgIDEgICAgICAgICAgICAwRS0xMDIgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTE1NyBmbWEgIDEgICAgICAgICAgICAxRS0xMDMgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLWZtYXgzMTE2MCBmbWEgIDEgICAgICAgICAgMTAwRS0xMDUgLTFlLTEwMSAgLT4gLTBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxMTYxIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMjAxICAtPiAgMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KLXByZWNpc2lvbjogICAxNQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotZm1heDMxMjAwIGZtYSAgMSAgIDFFMTUgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMDEgZm1hICAxICAgMUUxNSAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxMCBmbWEgIDEgICAxRTE1ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjExIGZtYSAgMSAgIDFFMTUgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTIgZm1hICAxICAgMUUxNSAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxMyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjE0IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxNiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjE3IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMTggZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIxOSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjIwIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMjEgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIyMiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjIzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEyMjQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTIyNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMjMwIGZtYSAgMSAgIDFFMTUgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246ICAgMTYNCi0NCi1mbWF4MzEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTAgZm1hICAxICAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMTkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzcgZm1hICAxICAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzUwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzUzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzU2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzU5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzYyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzY1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzY5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzc1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzc4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzg0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzg3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzkwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzkzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzMTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDMxMzk2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KLXByZWNpc2lvbjogICAxNQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotZm1heDMxNDAwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDAzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDA2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MDcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtNw0KLWZtYXgzMTQwOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS04DQotZm1heDMxNDA5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTkNCi1mbWF4MzE0MTAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTANCi1mbWF4MzE0MTEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTENCi1mbWF4MzE0MTIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTINCi1mbWF4MzE0MTMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTMNCi1mbWF4MzE0MTQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTQNCi1mbWF4MzE0MTUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTUNCi1mbWF4MzE0MTYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTYNCi1mbWF4MzE0MTcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTcNCi1mbWF4MzE0MTggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTgNCi1mbWF4MzE0MTkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCBwcmVjaXNpb24gMTYuLg0KLXByZWNpc2lvbjogICAxNg0KLWZtYXgzMTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQotZm1heDMxNDI4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KLWZtYXgzMTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1mbWF4MzE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KLWZtYXgzMTQzMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQotZm1heDMxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1mbWF4MzE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KLWZtYXgzMTQzNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQotZm1heDMxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1mbWF4MzE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KLWZtYXgzMTQzNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQotZm1heDMxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1mbWF4MzE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KLQ0KLS0tIHNhbWUsIHJldmVyc2VkIDANCi1mbWF4MzE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1mbWF4MzE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCi1mbWF4MzE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1mbWF4MzE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZm1heDMxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KLWZtYXgzMTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1mbWF4MzE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZm1heDMxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KLWZtYXgzMTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1mbWF4MzE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZm1heDMxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KLWZtYXgzMTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1mbWF4MzE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgRXMgb24gdGhlIDANCi1mbWF4MzE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzMTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDMxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCi1mbWF4MzE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZm1heDMxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWZtYXgzMTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1mbWF4MzE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotDQotLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCi1wcmVjaXNpb246ICAgMTYNCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi1yb3VuZGluZzogICAgaGFsZl91cA0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzE1MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDMxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzMTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDMxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDMxNTI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzMTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTUzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTUzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzMTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzMTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1NTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDMxNTU1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTU3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTU4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIHVwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzMTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU2MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU2MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzMTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzMTU2NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU2NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTU2NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDMxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzMTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1NzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDMxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTgxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDMxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDMxNTg0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDMxNTg3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzMTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU5MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU5MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzMTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgY2VpbGluZw0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDMxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTYxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDMxNjE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzMTYxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KLXJvdW5kaW5nOiAgICBmbG9vcg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1mbWF4MzE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCi1mbWF4MzE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDMxNjMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzMTYzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDMxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDMxNjM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQotZm1heDMxNjM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQotZm1heDMxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLS0tIEJpZ0RlY2ltYWwgcHJvYmxlbSB0ZXN0Y2FzZXMgMjAwNi4wMS4yMw0KLXByZWNpc2lvbjogICAxNg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLXJvdW5kaW5nOiAgZG93bg0KLXByZWNpc2lvbjogNw0KLWZtYXgzMTY1MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYNCi1wcmVjaXNpb246IDYNCi1mbWF4MzE2NTIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQotcHJlY2lzaW9uOiA1DQotZm1heDMxNjUzIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwRSs2ICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0DQotZm1heDMxNjU0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzDQotZm1heDMxNjU1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyDQotZm1heDMxNjU2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxDQotZm1heDMxNjU3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICBoYWxmX2V2ZW4NCi1wcmVjaXNpb246IDcNCi1mbWF4MzE2NjEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQotcHJlY2lzaW9uOiA2DQotZm1heDMxNjYyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNg0KLXByZWNpc2lvbjogNQ0KLWZtYXgzMTY2MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNA0KLWZtYXgzMTY2NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwRSs2ICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMw0KLWZtYXgzMTY2NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMg0KLWZtYXgzMTY2NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMQ0KLWZtYXgzMTY2NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDFFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgdXANCi1wcmVjaXNpb246IDcNCi1mbWF4MzE2NzEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQotcHJlY2lzaW9uOiA2DQotZm1heDMxNjcyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNg0KLXByZWNpc2lvbjogNQ0KLWZtYXgzMTY3MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNA0KLWZtYXgzMTY3NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAxRSs2ICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMw0KLWZtYXgzMTY3NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDFFKzYgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMg0KLWZtYXgzMTY3NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMUUrNiAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMQ0KLWZtYXgzMTY3NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDJFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXByZWNpc2lvbjogICAzNA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDYxNDQNCi1taW5FeHBvbmVudDogLTYxNDMNCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCi1mbWF4MzE3MDEgIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MA0KLWZtYXgzMTcwMiAgZm1hICAxICAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQotZm1heDMxNzAzICBmbWEgIDEgICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzANCi1mbWF4MzE3MDQgIGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNA0KLWZtYXgzMTcwNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMA0KLWZtYXgzMTcwNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMA0KLWZtYXgzMTcwNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMA0KLWZtYXgzMTcwOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMw0KLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGRlY2ltYWw2NCBkZWZhdWx0IHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXByZWNpc2lvbjogICAxNg0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCi1mbWF4MzYwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyDQotZm1heDM2MDAyIGZtYSAgMSAgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KLWZtYXgzNjAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCi1mbWF4MzYwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyDQotZm1heDM2MDA1IGZtYSAgMSAgICctNScgICAgJy0zJyAgICAtPiAgLTgNCi1mbWF4MzYwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQotZm1heDM2MDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wDQotZm1heDM2MDA4IGZtYSAgMSAgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KLWZtYXgzNjAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCi1mbWF4MzYwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnDQotDQotZm1heDM2MDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDEzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDE2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDE5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzYwMjEgZm1hICAxICAgMCAxIC0+IDENCi1mbWF4MzYwMjIgZm1hICAxICAgMSAxIC0+IDINCi1mbWF4MzYwMjMgZm1hICAxICAgMiAxIC0+IDMNCi1mbWF4MzYwMjQgZm1hICAxICAgMyAxIC0+IDQNCi1mbWF4MzYwMjUgZm1hICAxICAgNCAxIC0+IDUNCi1mbWF4MzYwMjYgZm1hICAxICAgNSAxIC0+IDYNCi1mbWF4MzYwMjcgZm1hICAxICAgNiAxIC0+IDcNCi1mbWF4MzYwMjggZm1hICAxICAgNyAxIC0+IDgNCi1mbWF4MzYwMjkgZm1hICAxICAgOCAxIC0+IDkNCi1mbWF4MzYwMzAgZm1hICAxICAgOSAxIC0+IDEwDQotDQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQotZm1heDM2MDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KLWZtYXgzNjAzMiBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCi1mbWF4MzYwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQotZm1heDM2MDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KLQ0KLWZtYXgzNjAzNSBmbWEgIDEgICAnNzAnICAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDM2IGZtYSAgMSAgICc3MDAnICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYwMzcgZm1hICAxICAgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjAzOCBmbWEgIDEgICAnNzAwMDAnICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDM5IGZtYSAgMSAgICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQotDQotLS0gc3ltbWV0cnk6DQotZm1heDM2MDQwIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjA0MSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDQyIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MDQ0IGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjA0NSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KLQ0KLWZtYXgzNjA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KLWZtYXgzNjA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcNCi1mbWF4MzYwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KLWZtYXgzNjA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KLWZtYXgzNjA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcNCi1mbWF4MzYwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCi1mbWF4MzYwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJw0KLWZtYXgzNjA1NCBmbWEgIDEgICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KLWZtYXgzNjA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KLWZtYXgzNjA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycNCi1mbWF4MzYwNTcgZm1hICAxICAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCi0NCi0tLSBmcm9tIGFib3ZlDQotZm1heDM2MDYxIGZtYSAgMSAgIDEgJzAuMScgLT4gJzEuMScNCi1mbWF4MzYwNjIgZm1hICAxICAgMSAnMC4wMScgLT4gJzEuMDEnDQotZm1heDM2MDYzIGZtYSAgMSAgIDEgJzAuMDAxJyAtPiAnMS4wMDEnDQotZm1heDM2MDY0IGZtYSAgMSAgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCi1mbWF4MzYwNjUgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnDQotZm1heDM2MDY2IGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQotZm1heDM2MDY3IGZtYSAgMSAgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCi1mbWF4MzYwNjggZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnDQotDQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KLWZtYXgzNjA3MCBmbWEgIDEgICAxICAwICAgIC0+IDENCi1mbWF4MzYwNzEgZm1hICAxICAgMSAwLiAgICAtPiAxDQotZm1heDM2MDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wDQotZm1heDM2MDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wDQotZm1heDM2MDc0IGZtYSAgMSAgIDEgMC4wMCAgLT4gMS4wMA0KLWZtYXgzNjA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDENCi1mbWF4MzYwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxDQotZm1heDM2MDc3IGZtYSAgMSAgICAuMCAxICAgLT4gMS4wDQotZm1heDM2MDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wDQotZm1heDM2MDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMA0KLQ0KLS0tIHNvbWUgY2Fycmllcw0KLWZtYXgzNjA4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OTk5OTk5OTkNCi1mbWF4MzYwODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZA0KLWZtYXgzNjA4MiBmbWEgIDEgICAgOTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwMDANCi1mbWF4MzYwODMgZm1hICAxICAgICAgOTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMA0KLWZtYXgzNjA4NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMA0KLWZtYXgzNjA4NSBmbWEgIDEgICAgICAgICAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDANCi1mbWF4MzYwODYgZm1hICAxICAgICAgICAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KLWZtYXgzNjA4NyBmbWEgIDEgICAgICAgICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMA0KLWZtYXgzNjA4OCBmbWEgIDEgICAgICAgICAgICAgICAgOTk5IDEgIC0+IDEwMDANCi1mbWF4MzYwODkgZm1hICAxICAgICAgICAgICAgICAgICAgOSAxICAtPiAxMA0KLQ0KLQ0KLS0tIG1vcmUgTEhTIHN3YXBzDQotZm1heDM2MDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWZtYXgzNjA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KLWZtYXgzNjA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQotZm1heDM2MDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KLWZtYXgzNjA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCi1mbWF4MzYwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQotZm1heDM2MDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KLWZtYXgzNjA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KLWZtYXgzNjA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KLWZtYXgzNjA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQotZm1heDM2MTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQotZm1heDM2MTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCi1mbWF4MzYxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQotZm1heDM2MTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KLWZtYXgzNjEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQotZm1heDM2MTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQotZm1heDM2MTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KLWZtYXgzNjEwNyBmbWEgIDEgICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQotZm1heDM2MTA4IGZtYSAgMSAgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCi1mbWF4MzYxMDkgZm1hICAxICAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkDQotZm1heDM2MTEwIGZtYSAgMSAgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZA0KLWZtYXgzNjExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCi0NCi0tLSBtb3JlIFJIUyBzd2Fwcw0KLWZtYXgzNjExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3Jw0KLWZtYXgzNjExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQotZm1heDM2MTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3Jw0KLWZtYXgzNjExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3Jw0KLWZtYXgzNjExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KLWZtYXgzNjEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3Jw0KLWZtYXgzNjEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43Jw0KLWZtYXgzNjEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQotZm1heDM2MTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcNCi1mbWF4MzYxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnDQotZm1heDM2MTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCi1mbWF4MzYxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnDQotZm1heDM2MTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnDQotZm1heDM2MTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQotZm1heDM2MTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01Jw0KLWZtYXgzNjEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnDQotZm1heDM2MTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQotZm1heDM2MTMyIGZtYSAgMSAgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KLWZtYXgzNjEzMyBmbWEgIDEgICAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCi1mbWF4MzYxMzQgZm1hICAxICAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQotZm1heDM2MTM1IGZtYSAgMSAgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZA0KLWZtYXgzNjEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCi0NCi0tLSByZWxhdGVkDQotZm1heDM2MTM3IGZtYSAgMSAgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCi1mbWF4MzYxMzggZm1hICAxICAgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KLWZtYXgzNjEzOSBmbWEgIDEgICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQotZm1heDM2MTQwIGZtYSAgMSAgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1mbWF4MzYxNDEgZm1hICAxICAgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJw0KLWZtYXgzNjE0MiBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkDQotZm1heDM2MTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcNCi1mbWF4MzYxNDQgZm1hICAxICAgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZA0KLQ0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQotZm1heDM2MTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcNCi1mbWF4MzYxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCi1mbWF4MzYxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCi1mbWF4MzYxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJw0KLWZtYXgzNjE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KLWZtYXgzNjE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KLWZtYXgzNjE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnDQotZm1heDM2MTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCi1mbWF4MzYxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KLWZtYXgzNjE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJw0KLWZtYXgzNjE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KLWZtYXgzNjE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2Jw0KLWZtYXgzNjE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJw0KLWZtYXgzNjE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQotZm1heDM2MTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQotDQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCi1mbWF4MzYxNjEgZm1hICAxICAgJzFFKzEzJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTk5Jw0KLWZtYXgzNjE2MiBmbWEgIDEgICAnMUUrMTMnICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDAxLjExJw0KLWZtYXgzNjE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMycgLT4gJzEwMDAwMDAwMDAwMDAxLjExJw0KLWZtYXgzNjE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMycgLT4gJzk5OTk5OTk5OTk5OTknDQotZm1heDM2MTY1IGZtYSAgMSAgICc3RSsxMycgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OTknDQotZm1heDM2MTY2IGZtYSAgMSAgICc3RSsxMycgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnDQotZm1heDM2MTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEzJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnDQotZm1heDM2MTY4IGZtYSAgMSAgICctMScgICAgJzdFKzEzJyAtPiAnNjk5OTk5OTk5OTk5OTknDQotDQotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYNCi1mbWF4MzYxNzAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxNzMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxNzYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCi1mbWF4MzYxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknDQotZm1heDM2MTc5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk4Jw0KLWZtYXgzNjE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycNCi1mbWF4MzYxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnDQotZm1heDM2MTgyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk1Jw0KLWZtYXgzNjE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcNCi0NCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQotcm91bmRpbmc6IGhhbGZfdXANCi1mbWF4MzYyMDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQotZm1heDM2MjAxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjEwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIxMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjEzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIxNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjE2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KLWZtYXgzNjIxNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjE4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMTkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzYyMjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQotZm1heDM2MjIxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMjIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjI0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMjUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjI3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIyOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjMwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIzMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjMzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIzNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjM2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KLWZtYXgzNjIzNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjM4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMzkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQotZm1heDM2MjQwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI0MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6IGRvd24NCi1mbWF4MzYyNTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQotZm1heDM2MjUxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNTIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjU0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNTUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjU3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI1OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjYwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI2MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjYzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjI2NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjY2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KLWZtYXgzNjI2NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjY4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyNjkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cw0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi1mbWF4MzYzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMA0KLWZtYXgzNjMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxDQotZm1heDM2MzAzIGZtYSAgMSAgICAgMSAgIDEgICAgICAtPiAgIDINCi1mbWF4MzYzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMw0KLWZtYXgzNjMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5DQotZm1heDM2MzA2IGZtYSAgMSAgICA5OSAgIDEgICAgICAtPiAxMDANCi1mbWF4MzYzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQ0KLWZtYXgzNjMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyDQotZm1heDM2MzA5IGZtYSAgMSAgICAtMSAgLTEgICAgICAtPiAgLTINCi1mbWF4MzYzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQ0KLWZtYXgzNjMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwDQotZm1heDM2MzEyIGZtYSAgMSAgICAxMiAgLTEgICAgICAtPiAgMTENCi1mbWF4MzYzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5Nw0KLWZtYXgzNjMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4DQotZm1heDM2MzE1IGZtYSAgMSAgIDEwMCAgLTEgICAgICAtPiAgOTkNCi1mbWF4MzYzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMA0KLQ0KLWZtYXgzNjMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KLWZtYXgzNjMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KLWZtYXgzNjMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KLWZtYXgzNjMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KLWZtYXgzNjMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KLWZtYXgzNjMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KLWZtYXgzNjMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KLWZtYXgzNjMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KLWZtYXgzNjMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KLWZtYXgzNjMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KLWZtYXgzNjMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KLWZtYXgzNjMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KLWZtYXgzNjMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KLWZtYXgzNjMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KLWZtYXgzNjMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KLWZtYXgzNjMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KLQ0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQotZm1heDM2MzQwIGZtYSAgMSAgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCi1mbWF4MzYzNDEgZm1hICAxICAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDANCi1mbWF4MzYzNDIgZm1hICAxICAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQotZm1heDM2MzQzIGZtYSAgMSAgIDFFKzE3ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZA0KLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCi1mbWF4MzYzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KLWZtYXgzNjM0NSBmbWEgIDEgICAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQ0KLWZtYXgzNjM0NiBmbWEgIDEgICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjM0NyBmbWEgIDEgICAxRSsxNyAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQotZm1heDM2MzQ5IGZtYSAgMSAgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3DQotZm1heDM2MzUwIGZtYSAgMSAgIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MzUxIGZtYSAgMSAgIDFFKzE3ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gdHJ5emVyb3MgY2FzZXMNCi1mbWF4MzYzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCi1mbWF4MzYzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZA0KLWZtYXgzNjM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MzY0ICBmbWEgIDEgICAxMi4zNCAgICAwZS0zOTggIC0+IDEyLjM0MDAwMDAwMDAwMDAwICBSb3VuZGVkDQotDQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQotZm1heDM2NDAwIGZtYSAgMSAgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDAxIGZtYSAgMSAgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KLWZtYXgzNjQwMiBmbWEgIDEgICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MDQgZm1hICAxICAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0MTAgZm1hICAxICAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDExIGZtYSAgMSAgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MTIgZm1hICAxICAgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDE0IGZtYSAgMSAgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MTUgZm1hICAxICAgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NDIwIGZtYSAgMSAgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDIxIGZtYSAgMSAgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KLWZtYXgzNjQyMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDIzIGZtYSAgMSAgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MjQgZm1hICAxICAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQyNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDI2IGZtYSAgMSAgICA3N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0MzAgZm1hICAxICAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQotZm1heDM2NDMxIGZtYSAgMSAgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MzIgZm1hICAxICAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQzMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDM0IGZtYSAgMSAgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0MzUgZm1hICAxICAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQzNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gbmVnYXRpdmUgdWxwcw0KLWZtYXgzNjQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NDEgZm1hICAxICAgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NDUwIGZtYSAgMSAgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NTEgZm1hICAxICAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NTIgZm1hICAxICAgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjQ2MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NjEgZm1hICAxICAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ2MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ2MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0NjQgZm1hICAxICAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDY1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDY2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2NDcwIGZtYSAgMSAgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NzEgZm1hICAxICAgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0NzIgZm1hICAxICAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDczIGZtYSAgMSAgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ3NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ3NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ3NiBmbWEgIDEgICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIG5lZ2F0aXZlIHVscHMNCi1mbWF4MzY0ODAgZm1hICAxICAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjQ4MiBmbWEgIDEgICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDg1IGZtYSAgMSAgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzY0OTAgZm1hICAxICAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY0OTEgZm1hICAxICAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NDkyIGZtYSAgMSAgIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjQ5NCBmbWEgIDEgICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY0OTUgZm1hICAxICAgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjUwMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQotZm1heDM2NTAxIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQotZm1heDM2NTAyIGZtYSAgMSAgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjUwMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTA0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MDUgZm1hICAxICAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTA2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLWZtYXgzNjUxMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KLWZtYXgzNjUxMSBmbWEgIDEgICAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCi1mbWF4MzY1MTIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUxMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTE0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUxNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MTYgZm1hICAxICAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gbG9uZyBvcGVyYW5kcw0KLWZtYXgzNjUyMSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMDAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZA0KLWZtYXgzNjUyMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZA0KLWZtYXgzNjUyMyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZA0KLWZtYXgzNjUyNCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwICAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZA0KLWZtYXgzNjUyNSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZA0KLWZtYXgzNjUyNiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZA0KLWZtYXgzNjUyNyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MSAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTI4IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTEgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MjkgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTAxIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjUzMCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwMSAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTMxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODk2ICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY1MzIgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5NiAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHZlcmlmeSBhIHF1ZXJ5DQotcm91bmRpbmc6ICAgICBkb3duDQotZm1heDM2NTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZA0KLS0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uDQotcm91bmRpbmc6ICAgICBkb3duDQotZm1heDM2NTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2NTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KLQ0KLS0tIG1vcmUgemVyb3MsIGV0Yy4NCi1yb3VuZGluZzogaGFsZl9ldmVuDQotDQotZm1heDM2NzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQotZm1heDM2NzAyIGZtYSAgMSAgIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KLWZtYXgzNjcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCi1mbWF4MzY3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQotDQotZm1heDM2NzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwDQotZm1heDM2NzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjANCi1mbWF4MzY3MTIgZm1hICAxICAgMEUrMyAgMDAuICAgIC0+IDANCi1mbWF4MzY3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzENCi1mbWF4MzY3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCi1mbWF4MzY3MTUgZm1hICAxICAgMEUrMyAgMDAuRSszIC0+IDBFKzMNCi1mbWF4MzY3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCi1mbWF4MzY3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCi1mbWF4MzY3MTggZm1hICAxICAgMEUrMyAgLTAwLjAgICAtPiAwLjANCi1mbWF4MzY3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwDQotZm1heDM2NzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KLQ0KLWZtYXgzNjcyMCBmbWEgIDEgICAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KLWZtYXgzNjcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wDQotZm1heDM2NzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwDQotZm1heDM2NzIzIGZtYSAgMSAgIDAwLkUrMSAwRSszICAtPiAwRSsxDQotZm1heDM2NzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyDQotZm1heDM2NzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszDQotZm1heDM2NzI2IGZtYSAgMSAgIDAwLkUrNCAwRSszICAtPiAwRSszDQotZm1heDM2NzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszDQotZm1heDM2NzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwDQotZm1heDM2NzI5IGZtYSAgMSAgIC0wMC4wICAwRSszICAtPiAwLjANCi1mbWF4MzY3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDANCi0NCi1mbWF4MzY3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwDQotZm1heDM2NzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMA0KLWZtYXgzNjczNCBmbWEgIDEgICAtMCAgICAgMCAgICAgLT4gIDANCi1mbWF4MzY3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCi0NCi1mbWF4MzY3MzYgZm1hICAxICAgIDEgICAgLTEgICAgIC0+ICAwDQotZm1heDM2NzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMg0KLWZtYXgzNjczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDINCi1mbWF4MzY3MzkgZm1hICAxICAgLTEgICAgIDEgICAgIC0+ICAwDQotDQotZm1heDM2NzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQ0KLWZtYXgzNjc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTENCi1mbWF4MzY3NDMgZm1hICAxICAgIDAgICAgIDEgICAgIC0+ICAxDQotZm1heDM2NzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQ0KLWZtYXgzNjc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTENCi1mbWF4MzY3NDYgZm1hICAxICAgLTEgICAgLTAgICAgIC0+IC0xDQotZm1heDM2NzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQ0KLWZtYXgzNjc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDENCi0NCi1mbWF4MzY3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjANCi1mbWF4MzY3NTIgZm1hICAxICAgLTAuMCAgLTEgICAgIC0+IC0xLjANCi1mbWF4MzY3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjANCi1mbWF4MzY3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjANCi1mbWF4MzY3NTUgZm1hICAxICAgLTEuMCAgIDAgICAgIC0+IC0xLjANCi1mbWF4MzY3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjANCi1mbWF4MzY3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjANCi1mbWF4MzY3NTggZm1hICAxICAgIDEuMCAgLTAgICAgIC0+ICAxLjANCi0NCi1mbWF4MzY3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjANCi1mbWF4MzY3NjIgZm1hICAxICAgLTAgICAgLTEuMCAgIC0+IC0xLjANCi1mbWF4MzY3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjANCi1mbWF4MzY3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjANCi1mbWF4MzY3NjUgZm1hICAxICAgLTEgICAgIDAuMCAgIC0+IC0xLjANCi1mbWF4MzY3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjANCi1mbWF4MzY3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjANCi1mbWF4MzY3NjggZm1hICAxICAgIDEgICAgLTAuMCAgIC0+ICAxLjANCi0NCi1mbWF4MzY3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjANCi1mbWF4MzY3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCi1mbWF4MzY3NzMgZm1hICAxICAgIDAuMCAgIDEuMCAgIC0+ICAxLjANCi1mbWF4MzY3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjANCi1mbWF4MzY3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCi1mbWF4MzY3NzYgZm1hICAxICAgLTEuMCAgLTAuMCAgIC0+IC0xLjANCi1mbWF4MzY3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjANCi1mbWF4MzY3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCi0NCi0tLSBTcGVjaWFscw0KLWZtYXgzNjc4MCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM2NzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4MyBmbWEgIDEgICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotZm1heDM2Nzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4NiBmbWEgIDEgICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotZm1heDM2Nzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc4OSBmbWEgIDEgICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM2NzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLWZtYXgzNjc5MiBmbWEgIDEgICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQotZm1heDM2NzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1mbWF4MzY3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotZm1heDM2ODAwIGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotZm1heDM2ODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDMgZm1hICAxICAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotZm1heDM2ODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDYgZm1hICAxICAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM2ODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MDkgZm1hICAxICAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgxMiBmbWEgIDEgICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQotZm1heDM2ODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1mbWF4MzY4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLWZtYXgzNjgxNSBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotZm1heDM2ODIxIGZtYSAgMSAgICBOYU4gLUluZiAgICAtPiAgTmFODQotZm1heDM2ODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFODQotZm1heDM2ODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFODQotZm1heDM2ODI0IGZtYSAgMSAgICBOYU4gLTAgICAgICAtPiAgTmFODQotZm1heDM2ODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFODQotZm1heDM2ODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFODQotZm1heDM2ODI3IGZtYSAgMSAgICBOYU4gIDEwMDAgICAtPiAgTmFODQotZm1heDM2ODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFODQotZm1heDM2ODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODMwIGZtYSAgMSAgIC1JbmYgIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODMzIGZtYSAgMSAgIC0wICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODM2IGZtYSAgMSAgICAxMDAwIE5hTiAgICAtPiAgTmFODQotZm1heDM2ODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFODQotDQotZm1heDM2ODQxIGZtYSAgMSAgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODQ0IGZtYSAgMSAgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODQ3IGZtYSAgMSAgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODUwIGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODUzIGZtYSAgMSAgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODU2IGZtYSAgMSAgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWZtYXgzNjg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODU5IGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1mbWF4MzY4NjEgZm1hICAxICAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQotZm1heDM2ODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KLWZtYXgzNjg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1mbWF4MzY4NjQgZm1hICAxICAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQotZm1heDM2ODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KLWZtYXgzNjg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1mbWF4MzY4NjcgZm1hICAxICAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQotZm1heDM2ODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KLWZtYXgzNjg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotZm1heDM2ODcxIGZtYSAgMSAgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc0IGZtYSAgMSAgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc3IGZtYSAgMSAgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODgwIGZtYSAgMSAgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2ODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1mbWF4MzY4ODMgZm1hICAxICAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzY4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KLWZtYXgzNjg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwNCi0tLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UNCi0tLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdDQotDQotZm1heDM2NTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMNCi1mbWF4MzY1NzIgZm1hICAxICAgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbA0KLWZtYXgzNjU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMNCi1mbWF4MzY1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwNCi0NCi0tLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCi1mbWF4MzY1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQotZm1heDM2NTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KLWZtYXgzNjU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzNjU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzNjU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLWZtYXgzNjU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KLQ0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KLWZtYXgzNjk3MiBhcHBseSAgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1mbWF4MzY5NzMgZm1hICAxICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk3NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTc1IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk3NiBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5NzcgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTc4IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk3OSBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODAgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTgxIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTgyIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTgzIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2OTg1IGFwcGx5ICAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCi1mbWF4MzY5ODYgZm1hICAxICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5ODggZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk4OSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTkwIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTEgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk5MiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTkzIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTQgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2OTk1IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjk5NiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzY5OTcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQotcm91bmRpbmc6ICAgICBkb3duDQotZm1heDM2MTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KLWZtYXgzNjExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCi0NCi1yb3VuZGluZzogICAgIGNlaWxpbmcNCi1mbWF4MzYxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTEzIGZtYSAgMSAgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE2IGZtYSAgMSAgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQotZm1heDM2MTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCi1mbWF4MzYxMTE5IGZtYSAgMSAgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KLQ0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCi0NCi1mbWF4MzYxMzAwIGZtYSAgMSAgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzEyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzE1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzE4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzIxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzI0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzI3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzMwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzMzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzM2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzM5IGZtYSAgMSAgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotZm1heDM2MTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1mbWF4MzYxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQotZm1heDM2MTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDIxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDI0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDI3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KLWZtYXgzNjE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZm1heDM2MTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCi1mbWF4MzYxNDMwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCi1mbWF4MzYxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1mbWF4MzYxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCi1mbWF4MzYxNDMzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCi1mbWF4MzYxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1mbWF4MzYxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCi1mbWF4MzYxNDM2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCi1mbWF4MzYxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1mbWF4MzYxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCi1mbWF4MzYxNDM5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCi0NCi0tLSBzYW1lLCByZXZlcnNlZCAwDQotZm1heDM2MTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQotZm1heDM2MTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KLWZtYXgzNjE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCi1mbWF4MzYxNDQ4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQotZm1heDM2MTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KLWZtYXgzNjE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQotZm1heDM2MTQ1MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCi1mbWF4MzYxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KLWZtYXgzNjE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQotZm1heDM2MTQ1NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCi1mbWF4MzYxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KLWZtYXgzNjE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQotZm1heDM2MTQ1NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCi1mbWF4MzYxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KLWZtYXgzNjE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQotDQotLS0gc2FtZSwgRXMgb24gdGhlIDANCi1mbWF4MzYxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDYxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDcwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDczIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi1mbWF4MzYxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCi0tLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0DQotZm1heDM2MTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi1mbWF4MzYxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KLWZtYXgzNjE0NzggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQotZm1heDM2MTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCi0NCi0tLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzNjE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzYxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzNjE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDM2MTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTUyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTUyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTUyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzYxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCi1mbWF4MzYxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQotZm1heDM2MTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KLS0tIGluZXhhY3QgemVyb3MNCi1mbWF4MzYxNTUxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTU0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzNjE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi0NCi1yb3VuZGluZzogICAgdXANCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDM2MTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQotZm1heDM2MTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNTc2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotDQotcm91bmRpbmc6ICAgIGRvd24NCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTU4MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTU4MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTU4NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLWZtYXgzNjE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzYxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotcm91bmRpbmc6ICAgIGNlaWxpbmcNCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQotZm1heDM2MTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KLWZtYXgzNjE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQotZm1heDM2MTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KLWZtYXgzNjE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCi0tLSBpbmV4YWN0IHplcm9zDQotZm1heDM2MTYxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLWZtYXgzNjE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNjE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KLWZtYXgzNjE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQotZm1heDM2MTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KLWZtYXgzNjE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCi1mbWF4MzYxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQotcm91bmRpbmc6ICAgIGZsb29yDQotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KLWZtYXgzNjE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCi1mbWF4MzYxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQotZm1heDM2MTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KLWZtYXgzNjE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCi1mbWF4MzYxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQotZm1heDM2MTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzNjE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzYxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQotLS0gaW5leGFjdCB6ZXJvcw0KLWZtYXgzNjE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCi1mbWF4MzYxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTYzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCi1mbWF4MzYxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCi1mbWF4MzYxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQotZm1heDM2MTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KLWZtYXgzNjE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCi1mbWF4MzYxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KLQ0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KLWZtYXgzNjE3MDEgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQotZm1heDM2MTcwMiBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCi1mbWF4MzYxNzAzIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KLWZtYXgzNjE3MDQgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQotZm1heDM2MTcwNSBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwDQotZm1heDM2MTcwNiBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwDQotZm1heDM2MTcwNyBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwDQotZm1heDM2MTcwOCBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszDQotDQotLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4NCi0NCi1mbWF4MzYyMDAxIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcNCi1mbWF4MzYyMDAyIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMDMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAwNCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDA1IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMDYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAwNyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDA4IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMDkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxMCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDExIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDE0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDE3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMTggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjAxOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDIwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwMjEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KLWZtYXgzNjIwMzAgZm1hICAxICAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkNCi1mbWF4MzYyMDMxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjENCi1mbWF4MzYyMDMyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyDQotZm1heDM2MjAzMyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMNCi1mbWF4MzYyMDM0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQNCi1mbWF4MzYyMDM1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1DQotZm1heDM2MjAzNiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYNCi1mbWF4MzYyMDM3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcNCi1mbWF4MzYyMDM4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4DQotZm1heDM2MjAzOSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDEgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0MiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0NSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQ2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNDcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA0OCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDQ5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2DQotcm91bmRpbmc6IGhhbGZfZXZlbg0KLWZtYXgzNjIwNTAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA1MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDUyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNTMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA1NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDU1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNTYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA1NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDYwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjEgZm1hICAxICAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2MiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDYzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjQgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA2NSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDY2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNjcgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KLXJvdW5kaW5nOiB1cA0KLWZtYXgzNjIwNzAgZm1hICAxICAgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDENCi1mbWF4MzYyMDcxIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNzIgZm1hICAxICAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3MyBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDc0IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNzUgZm1hICAxICAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3NiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDc3IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwNzggZm1hICAxICAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA3OSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDgwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODEgZm1hICAxICAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDgzIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODQgZm1hICAxICAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDg2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLWZtYXgzNjIwODcgZm1hICAxICAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQotZm1heDM2MjA4OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCi1mbWF4MzYyMDg5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHBheWxvYWQgZGVjYXBpdGF0ZSB4Mw0KLXByZWNpc2lvbjogNQ0KLWZtYXgzNjMwMDAgZm1hICAxIDEgIHNOYU4xMjM0NTY3ODkwICAgICAtPiAgTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM2MzAwMSBmbWEgICAgMSAtc05hTjEyMzQ1MTIzNDUgMSAgIC0+IC1OYU4xMjM0NSAgSW52YWxpZF9vcGVyYXRpb24NCi1mbWF4MzYzMDAyIGZtYSAgICAgICBzTmFOMTIzNDU1NDMyMSAxIDEgLT4gIE5hTjU0MzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1mbWF4Mzk5OTAgZm1hICAxICAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotZm1heDM5OTkxIGZtYSAgMSAgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZm1hLmRlY1Rlc3QgLS0gZGVjaW1hbCBmdXNlZCBtdWx0aXBseSBhZGQgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitmbWF4MDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKK2ZtYXgwMDAyIGZtYSAgMSAgIDEgICAyIC0+ICAgMworZm1heDAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitmbWF4MDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKK2ZtYXgwMDA1IGZtYSAtMSAgIDEgICAxIC0+ICAgMAorZm1heDAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitmbWF4MDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKK2ZtYXgwMDA4IGZtYSAtOSAgIDkgICA5IC0+IC03MgorZm1heDAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitmbWF4MDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKK2ZtYXgwMDEzIGZtYSAgMiAgLTIgICAzIC0+ICAtMQorZm1heDAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitmbWF4MDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKK2ZtYXgwMDE2IGZtYSAgMSAgIDEgIC0yIC0+ICAtMQorZm1heDAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitmbWF4MDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKK2ZtYXgwMDE5IGZtYSAgMyAgIDUgICA3IC0+ICAyMgorZm1heDAwMjkgZm1hICAzICAtNSAgIDcgLT4gIC04CisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzIKK2ZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCitmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2MgorZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKK2ZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUKK2ZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4CitmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQorZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKK2ZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2ZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wCitmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4CitmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2CitmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4CitmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgKK2ZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0CitmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICA4ODg1NjUyOTAgICAxNTU3Ljk2OTMwICAtODYwODcuNzU3OCAgLT4gMS4zODQzNTczNUUrMTIKK2ZtYTAyMDEgIGZtYSAgICAgODg4NTY1MjkwICAgMTU1Ny45NjkzMCAgLTg2MDg3Ljc1NzggIC0+IDEuMzg0MzU3MzZFKzEyICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgIC04NTUxOTM0Mi45ICAgIDczNTE1NTQxOSAgICAgNDIwMTA0MzEgIC0+IC02LjI4NzAwMDg0RSsxNgorZm1hMDIwNSAgZm1hICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODNFKzE2IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY2OUUrMTAKK2ZtYTAyMDggIGZtYSAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NzBFKzEwICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICA1OTY3NjI3LjM5ICAgODM1MjY1NDAuNiAgIDQ5ODQ5NC44MTAgIC0+IDQuOTg0NTUyNzFFKzE0CitmbWEwMjExICBmbWEgICAgNTk2NzYyNy4zOSAgIDgzNTI2NTQwLjYgICA0OTg0OTQuODEwICAtPiA0Ljk4NDU1MjcyRSsxNCAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgIDM0NTYuOTQzMyAgICA4NzQuMzk1MTggICAxOTc4NjYuNjE1ICAtPiAgMzIyMDYwMS4xOAorZm1hMDIxNiAgZm1hICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTcgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgIDYyNzY5LjgyODcgICAyMDk2Ljk4OTI3ICAgIDQ4LjQyMDMxNyAgLT4gIDEzMTYyNzcwNQorZm1hMDIxOCAgZm1hICAgIDYyNzY5LjgyODcgICAyMDk2Ljk4OTI3ICAgIDQ4LjQyMDMxNyAgLT4gIDEzMTYyNzcwNiAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAtNjguODE1MDAgICA1OTk2MTExMy45ICAgICAtODk4ODg2MiAgLT4gLTQuMTM1MjEyOTFFKzkKK2ZtYTAyMTkgIGZtYSAgICAgLTY4LjgxNTAwICAgNTk5NjExMTMuOSAgICAgLTg5ODg4NjIgIC0+IC00LjEzNTIxMjkyRSs5ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAyMTI2MzQxLjAyICAgNjM0OTEuNTE1MiAgICAzMDI0Mjc0NTUgIC0+IDEuMzUzMDcwNDBFKzExCitmbWEwMjI2ICBmbWEgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQxRSsxMSAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gSW5maW5pdGUgY29tYmluYXRpb25zCitmbWF4MDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2ZtYXgwODAxIGZtYSAgSW5mICAgSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZm1heDA4MDQgZm1hIC1JbmYgICBJbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitmbWF4MDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2ZtYXgwODA3IGZtYSAtSW5mICAtSW5mICAtSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODA4IGZtYSAtSW5mICAgMCAgICAgICAxICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODA5IGZtYSAtSW5mICAgMCAgICAgTmFOICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbgorZm1heDA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKK2ZtYXgwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitmbWF4MDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQorLS0gZmlyc3Qgc05hTiB3aW5zIChjb25zaWRlciBxTmFOIGZyb20gZWFybGllciBzTmFOIGJlaW5nCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkKK2ZtYXgwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTVVMVElQTElDQVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2ZtYXgyMDAwIGZtYSAyICAgICAgMiAgMEUrOTk5OTk5ICAtPiA0CitmbWF4MjAwMSBmbWEgMiAgICAgIDMgIDBFKzk5OTk5OSAgLT4gNgorZm1heDIwMDIgZm1hIDUgICAgICAxICAwRSs5OTk5OTkgIC0+IDUKK2ZtYXgyMDAzIGZtYSA1ICAgICAgMiAgMEUrOTk5OTk5ICAtPiAxMAorZm1heDIwMDQgZm1hIDEuMjAgICAyICAwRSs5OTk5OTkgIC0+IDIuNDAKK2ZtYXgyMDA1IGZtYSAxLjIwICAgMCAgMEUrOTk5OTk5ICAtPiAwLjAwCitmbWF4MjAwNiBmbWEgMS4yMCAgLTIgIDBFKzk5OTk5OSAgLT4gLTIuNDAKK2ZtYXgyMDA3IGZtYSAtMS4yMCAgMiAgMEUrOTk5OTk5ICAtPiAtMi40MAorZm1heDIwMDggZm1hIC0xLjIwICAwICAwRSs5OTk5OTkgIC0+IDAuMDAKK2ZtYXgyMDA5IGZtYSAtMS4yMCAtMiAgMEUrOTk5OTk5ICAtPiAyLjQwCitmbWF4MjAxMCBmbWEgNS4wOSA3LjEgIDBFKzk5OTk5OSAgLT4gMzYuMTM5CitmbWF4MjAxMSBmbWEgMi41ICAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMAorZm1heDIwMTIgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCitmbWF4MjAxMyBmbWEgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODkgUm91bmRlZAorZm1heDIwMTQgZm1hIDkuOTk5OTk5OTk5IDkuOTk5OTk5OTk5ICAwRSs5OTk5OTkgIC0+IDEwMC4wMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAxNSBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDAKK3ByZWNpc2lvbjogNgorZm1heDIwMTYgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCitmbWF4MjAxNyBmbWEgIDkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDE4IGZtYSAgOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDIwMTkgZm1hIC05Ljk5OTk5OSAgOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAyMCBmbWEgLTkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gMTk5OS4xMi4yMTogbmV4dCBvbmUgaXMgYSBlZGdlIGNhc2UgaWYgaW50ZXJtZWRpYXRlIGxvbmdzIGFyZSB1c2VkCitwcmVjaXNpb246IDE1CitmbWF4MjA1OSBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOS43NjU2MjQ5OTk5OTAyM0UrMTggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitmbWF4MjE2MCBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOTc2NTYyNDk5OTk5MDIzNDM3NQorcHJlY2lzaW9uOiA5CistLS0tLQorCistLSB6ZXJvcywgZXRjLgorZm1heDIwMjEgZm1hICAwICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDIyIGZtYSAgMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjAyMyBmbWEgLTAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDIwMjQgZm1hIC0wICAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDI1IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAyNiBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDIwMjcgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyMDI4IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAzMCBmbWEgIDUuMDAgICAxRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMAorZm1heDIwMzEgZm1hICAwMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDMyIGZtYSAgMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwMzMgZm1hICAwRS0zICAgMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjAzNCBmbWEgLTUuMDAgICAxRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMAorZm1heDIwMzUgZm1hIC0wMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDM2IGZtYSAtMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwMzcgZm1hIC0wRS0zICAgMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjAzOCBmbWEgIDUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMAorZm1heDIwMzkgZm1hICAwMC4wMCAtMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDQwIGZtYSAgMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwNDEgZm1hICAwRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitmbWF4MjA0MiBmbWEgLTUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDUwMAorZm1heDIwNDMgZm1hIC0wMC4wMCAtMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAKK2ZtYXgyMDQ0IGZtYSAtMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZm1heDIwNDUgZm1hIC0wRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGggbXVsdGlwbHkKK2ZtYXgyMDUwIGZtYSAxLjIwIDMgICAgICAgICAwRSs5OTk5OTkgIC0+IDMuNjAKK2ZtYXgyMDUxIGZtYSA3ICAgIDMgICAgICAgICAwRSs5OTk5OTkgIC0+IDIxCitmbWF4MjA1MiBmbWEgMC45ICAwLjggICAgICAgMEUrOTk5OTk5ICAtPiAwLjcyCitmbWF4MjA1MyBmbWEgMC45ICAtMCAgICAgICAgMEUrOTk5OTk5ICAtPiAwLjAKK2ZtYXgyMDU0IGZtYSA2NTQzMjEgNjU0MzIxICAwRSs5OTk5OTkgIC0+IDQuMjgxMzU5NzFFKzExICBJbmV4YWN0IFJvdW5kZWQKKworZm1heDIwNjAgZm1hIDEyMy40NSAxZTcgICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzkKK2ZtYXgyMDYxIGZtYSAxMjMuNDUgMWU4ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMAorZm1heDIwNjIgZm1hIDEyMy40NSAxZSs5ICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzExCitmbWF4MjA2MyBmbWEgMTIzLjQ1IDFlMTAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTIKK2ZtYXgyMDY0IGZtYSAxMjMuNDUgMWUxMSAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMworZm1heDIwNjUgZm1hIDEyMy40NSAxZTEyICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE0CitmbWF4MjA2NiBmbWEgMTIzLjQ1IDFlMTMgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTUKKworCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKK3ByZWNpc2lvbjogOQorZm1heDIwODAgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorZm1heDIwODEgZm1hIDAuMSAxMjM0NTY3ODkxICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorZm1heDIwODIgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDgzIGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZAorZm1heDIwODQgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorcHJlY2lzaW9uOiA4CitmbWF4MjA4NSBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4NiBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3CitmbWF4MjA4NyBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDg4IGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA5CitmbWF4MjA5MCBmbWEgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitmbWF4MjA5MSBmbWEgMTIzNDU2Nzg5MSAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5MiBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTMgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5NCBmbWEgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxMjM0NTY3OC45CitwcmVjaXNpb246IDgKK2ZtYXgyMDk1IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDk2IGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3OUUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDcKK2ZtYXgyMDk3IGZtYSAxMjM0NTY3ODkxMiAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTggZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCittYXhleHBvbmVudDogOTk5OQorbWluZXhwb25lbnQ6IC05OTk5CitwcmVjaXNpb246IDMzCitmbWF4MjEwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODEKK2ZtYXgyMTAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwCitmbWF4MjEwMyBmbWEgOSA5MDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwCitmbWF4MjEwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAKK2ZtYXgyMTA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwCitmbWF4MjEwNiBmbWEgOSA5MDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwCitmbWF4MjEwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAKK2ZtYXgyMTA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwCitmbWF4MjEwOSBmbWEgOSA5MDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwCitmbWF4MjExMCBmbWEgOSA5MDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAKK2ZtYXgyMTExIGZtYSA5IDkwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwCitmbWF4MjExMiBmbWEgOSA5MDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwCitmbWF4MjExMyBmbWEgOSA5MDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAKK2ZtYXgyMTE0IGZtYSA5IDkwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwCitmbWF4MjExNSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwCitmbWF4MjExNiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTE3IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjExOCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjExOSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIwIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMiBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTIzIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworZm1heDIxMzEgZm1hIDMgMyAgICAwRSs5OTk5OTkgIC0+IDkKK2ZtYXgyMTMyIGZtYSAzIDMwICAgIDBFKzk5OTk5OSAgLT4gOTAKK2ZtYXgyMTMzIGZtYSAzIDMwMCAgICAwRSs5OTk5OTkgIC0+IDkwMAorZm1heDIxMzQgZm1hIDMgMzAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAKK2ZtYXgyMTM1IGZtYSAzIDMwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAKK2ZtYXgyMTM2IGZtYSAzIDMwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMAorZm1heDIxMzcgZm1hIDMgMzAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAKK2ZtYXgyMTM4IGZtYSAzIDMwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAKK2ZtYXgyMTM5IGZtYSAzIDMwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMAorZm1heDIxNDAgZm1hIDMgMzAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAKK2ZtYXgyMTQxIGZtYSAzIDMwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAKK2ZtYXgyMTQyIGZtYSAzIDMwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMAorZm1heDIxNDMgZm1hIDMgMzAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ0IGZtYSAzIDMwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ1IGZtYSAzIDMwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMAorZm1heDIxNDYgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ3IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ4IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNDkgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUwIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUxIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxNTIgZm1hIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUzIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK3ByZWNpc2lvbjogOQorLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93L3VuZGVyZmxvdworZm1heDIxNzAgZm1hIDEgOWU5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5CitmbWF4MjE3MSBmbWEgMSA5LjllOTk5OTk5ICAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQorZm1heDIxNzIgZm1hIDEgOS45OWU5OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS45OUUrOTk5OTk5CitmbWF4MjE3MyBmbWEgOWU5OTk5OTkgICAgMSAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkKK2ZtYXgyMTc0IGZtYSA5LjllOTk5OTk5ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUrOTk5OTk5CitmbWF4MjE3NiBmbWEgOS45OWU5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiA5Ljk5RSs5OTk5OTkKK2ZtYXgyMTc3IGZtYSAxIDkuOTk5OTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQorZm1heDIxNzggZm1hIDkuOTk5OTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OTk5OUUrOTk5OTk5CisKK2ZtYXgyMTgwIGZtYSAwLjEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5CitmbWF4MjE4MSBmbWEgMC4xIDk5ZS05OTk5OTggICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4CitmbWF4MjE4MiBmbWEgMC4xIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NworCitmbWF4MjE4MyBmbWEgMC4xIDllLTk5OTk5OCAgICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5CitmbWF4MjE4NCBmbWEgMC4xIDk5ZS05OTk5OTggICAgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTgKK2ZtYXgyMTg1IGZtYSAwLjEgOTk5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcKK2ZtYXgyMTg2IGZtYSAwLjEgOTk5ZS05OTk5OTcgICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYKK2ZtYXgyMTg3IGZtYSAwLjEgOTk5OWUtOTk5OTk3ICAgMEUrOTk5OTk5ICAtPiA5Ljk5OUUtOTk5OTk1CitmbWF4MjE4OCBmbWEgMC4xIDk5OTk5ZS05OTk5OTcgIDBFKzk5OTk5OSAgLT4gOS45OTk5RS05OTk5OTQKKworZm1heDIxOTAgZm1hIDEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk4CitmbWF4MjE5MSBmbWEgMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5NworZm1heDIxOTIgZm1hIDEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2CitmbWF4MjE5MyBmbWEgOWUtOTk5OTk4ICAgMSAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTgKK2ZtYXgyMTk0IGZtYSA5OWUtOTk5OTk4ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3CitmbWF4MjE5NSBmbWEgOTk5ZS05OTk5OTggMSAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTYKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCitwcmVjaXNpb246IDMzCitmbWF4MjI0NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODMwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorZm1heDIyNDcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK2ZtYXgyMjQ4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitmbWF4MjI0OSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkzICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOQorZm1heDIyNTAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjgKK2ZtYXgyMjUxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIwICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3CitmbWF4MjI1MiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEyICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNgorZm1heDIyNTMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjUKK2ZtYXgyMjU0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0CitmbWF4MjI1NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE3ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMworZm1heDIyNTYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjIKK2ZtYXgyMjU3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCitmbWF4MjI1OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorZm1heDIyNTkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2ZtYXgyMjYwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk3ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitmbWF4MjI2MSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzcwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworZm1heDIyNjIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK2ZtYXgyMjYzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTM0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CitmbWF4MjI2NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNAorZm1heDIyNjUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTMKK2ZtYXgyMjY2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitmbWF4MjI2NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMQorZm1heDIyNjggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAKK2ZtYXgyMjY5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5CitmbWF4MjI3MCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkxICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOAorZm1heDIyNzEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDcKK2ZtYXgyMjcyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2CitmbWF4MjI3MyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA1CitmbWF4MjI3NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NDNFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0CitmbWF4MjI3NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NEUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK2ZtYXgyMjc2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDEuNDVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyCitmbWF4MjI3NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCitmbWF4MjI3OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxRSs1ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorcHJlY2lzaW9uOiA5CitmbWF4MjMwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODEKK2ZtYXgyMzAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwCitmbWF4MjMwMyBmbWEgOSA5MDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwCitmbWF4MjMwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAKK2ZtYXgyMzA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwCitmbWF4MjMwNiBmbWEgOSA5MDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwCitmbWF4MjMwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAKK2ZtYXgyMzA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwCitmbWF4MjMwOSBmbWEgOSA5MDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSs5ICAgUm91bmRlZAorZm1heDIzMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEwICBSb3VuZGVkCitmbWF4MjMxMSBmbWEgOSA5MDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzExICBSb3VuZGVkCitmbWF4MjMxMiBmbWEgOSA5MDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMiAgUm91bmRlZAorZm1heDIzMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEzICBSb3VuZGVkCitmbWF4MjMxNCBmbWEgOSA5MDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE0ICBSb3VuZGVkCitmbWF4MjMxNSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNSAgUm91bmRlZAorZm1heDIzMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE2ICBSb3VuZGVkCitmbWF4MjMxNyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE3ICBSb3VuZGVkCitmbWF4MjMxOCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxOCAgUm91bmRlZAorZm1heDIzMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE5ICBSb3VuZGVkCitmbWF4MjMyMCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIwICBSb3VuZGVkCitmbWF4MjMyMSBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMSAgUm91bmRlZAorZm1heDIzMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIyICBSb3VuZGVkCitmbWF4MjMyMyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIzICBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJyZWFrZXJzCitwcmVjaXNpb246ICAgMjkKK2ZtYXgyMzMwIGZtYSAxLjQ5MTgyNDY5NzY0MTI3MDMxNzgyNDg1Mjk1MjgzNzIyNCAxLjEwNTE3MDkxODA3NTY0NzYyNDgxMTcwNzgyNjQ5MDI0NjUxNDY3NTYyODYxNDU2Mjg4MzUzNzM0NTc0NzYwMyAgMEUrOTk5OTk5ICAtPiAxLjY0ODcyMTI3MDcwMDEyODE0Njg0ODY1MDc4NzggSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNTUKK2ZtYXgyMzMxIGZtYSAwLjg5NTgzNDEzNTI5NjUyODI1MDY3Njg1NDU4Mjg3NjUxMTc4MDM4NzM3MTcyODQ4OTEwNDA0MjggMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4ICAwRSs5OTk5OTkgIC0+IDAuODAyNTE4Nzk3OTYyNDc4NDgyOTg0MjU1MzgyOTkzNDA2OTk1NTg5MDk4MzY5Njc1MjIyODI5OSBJbmV4YWN0IFJvdW5kZWQKKworCistLSB0cnl6ZXJvcyBjYXNlcworcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTIKK21pbmV4cG9uZW50OiAtOTIKK2ZtYXgyNTA0ICBmbWEgIDBFLTYwIDEwMDBFLTYwICAgMEUrOTk5OTk5ICAtPiAwRS05OCBDbGFtcGVkCitmbWF4MjUwNSAgZm1hICAxMDBFKzYwIDBFKzYwICAgIDBFKzk5OTk5OSAgLT4gMEUrOTIgQ2xhbXBlZAorCistLSBtaXhlZCB3aXRoIHplcm9zCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorcHJlY2lzaW9uOiA5CitmbWF4MjU0MSBmbWEgIDAgICAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0MiBmbWEgLTAgICAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0MyBmbWEgIDAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NCBmbWEgLTAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NSBmbWEgLTEgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NiBmbWEgLTEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0NyBmbWEgIDEgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjU0OCBmbWEgIDEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCisKK2ZtYXgyNTUxIGZtYSAgMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTIgZm1hIC0wLjAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1MyBmbWEgIDAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU0IGZtYSAtMC4wICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTUgZm1hIC0xLjAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1NiBmbWEgLTEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU3IGZtYSAgMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTggZm1hICAxLjAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCisKK2ZtYXgyNTYxIGZtYSAgMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjIgZm1hIC0wICAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2MyBmbWEgIDAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY0IGZtYSAtMCAgICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjUgZm1hIC0xICAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2NiBmbWEgLTEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY3IGZtYSAgMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjggZm1hICAxICAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCisKK2ZtYXgyNTcxIGZtYSAgMC4wICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTcyIGZtYSAtMC4wICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTczIGZtYSAgMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc0IGZtYSAtMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc1IGZtYSAtMS4wICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc2IGZtYSAtMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc3IGZtYSAgMS4wICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyNTc4IGZtYSAgMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKKworCistLSBTcGVjaWFscworZm1heDI1ODAgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTgxIGZtYSAgSW5mICAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU4MiBmbWEgIEluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1ODMgZm1hICBJbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1ODQgZm1hICBJbmYgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1ODUgZm1hICBJbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTg2IGZtYSAgSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU4NyBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1ODggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTg5IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU5MCBmbWEgLTEgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1OTEgZm1hIC0wICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1OTIgZm1hICAwICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI1OTMgZm1hICAxICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTk0IGZtYSAgMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU5NSBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorCitmbWF4MjYwMCBmbWEgLUluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MDEgZm1hIC1JbmYgIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjAyIGZtYSAtSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYwMyBmbWEgLUluZiAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYwNCBmbWEgLUluZiAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYwNSBmbWEgLUluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDYgZm1hIC1JbmYgICAxMDAwICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjA3IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYwOCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDkgZm1hIC1JbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjEwIGZtYSAtMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYxMSBmbWEgLTAgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYxMiBmbWEgIDAgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjYxMyBmbWEgIDEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MTQgZm1hICAxMDAwIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjE1IGZtYSAgSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CisKK2ZtYXgyNjIxIGZtYSAgTmFOIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjIgZm1hICBOYU4gLTEwMDAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyMyBmbWEgIE5hTiAtMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI0IGZtYSAgTmFOIC0wICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjUgZm1hICBOYU4gIDAgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyNiBmbWEgIE5hTiAgMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI3IGZtYSAgTmFOICAxMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjggZm1hICBOYU4gIEluZiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyOSBmbWEgIE5hTiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMwIGZtYSAtSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzEgZm1hIC0xMDAwIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzMiBmbWEgLTEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMzIGZtYSAtMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzQgZm1hICAwICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzNSBmbWEgIDEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjM2IGZtYSAgMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzcgZm1hICBJbmYgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCisKK2ZtYXgyNjQxIGZtYSAgc05hTiAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQyIGZtYSAgc05hTiAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQzIGZtYSAgc05hTiAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ0IGZtYSAgc05hTiAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ1IGZtYSAgc05hTiAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ2IGZtYSAgc05hTiAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ3IGZtYSAgc05hTiAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ4IGZtYSAgc05hTiAgTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjQ5IGZtYSAgc05hTiBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUwIGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUxIGZtYSAtSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUyIGZtYSAtMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjUzIGZtYSAtMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU0IGZtYSAtMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU1IGZtYSAgMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU2IGZtYSAgMSAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU3IGZtYSAgMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU4IGZtYSAgSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjU5IGZtYSAgTmFOICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZm1heDI2NjEgZm1hICBOYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOOQorZm1heDI2NjIgZm1hICBOYU44ICA5OTkgICAgMEUrOTk5OTk5ICAtPiAgTmFOOAorZm1heDI2NjMgZm1hICBOYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFONzEKK2ZtYXgyNjY0IGZtYSAgTmFONiAgTmFONSAgIDBFKzk5OTk5OSAgLT4gIE5hTjYKK2ZtYXgyNjY1IGZtYSAtSW5mICAgTmFONCAgIDBFKzk5OTk5OSAgLT4gIE5hTjQKK2ZtYXgyNjY2IGZtYSAtOTk5ICAgTmFOMzMgIDBFKzk5OTk5OSAgLT4gIE5hTjMzCitmbWF4MjY2NyBmbWEgIEluZiAgIE5hTjIgICAwRSs5OTk5OTkgIC0+ICBOYU4yCisKK2ZtYXgyNjcxIGZtYSAgc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3MiBmbWEgIHNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzMgZm1hICBzTmFOOTcgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc0IGZtYSAgc05hTjE2IHNOYU45NCAgIDBFKzk5OTk5OSAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3NSBmbWEgIE5hTjk1ICBzTmFOOTMgICAwRSs5OTk5OTkgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzYgZm1hIC1JbmYgICAgc05hTjkyICAgMEUrOTk5OTk5ICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc3IGZtYSAgMDg4ICAgIHNOYU45MSAgIDBFKzk5OTk5OSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3OCBmbWEgIEluZiAgICBzTmFOOTAgICAwRSs5OTk5OTkgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzkgZm1hICBOYU4gICAgc05hTjg5ICAgMEUrOTk5OTk5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDI2ODEgZm1hIC1OYU45IC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOOQorZm1heDI2ODIgZm1hIC1OYU44ICA5OTkgICAgMEUrOTk5OTk5ICAtPiAtTmFOOAorZm1heDI2ODMgZm1hIC1OYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFONzEKK2ZtYXgyNjg0IGZtYSAtTmFONiAtTmFONSAgIDBFKzk5OTk5OSAgLT4gLU5hTjYKK2ZtYXgyNjg1IGZtYSAtSW5mICAtTmFONCAgIDBFKzk5OTk5OSAgLT4gLU5hTjQKK2ZtYXgyNjg2IGZtYSAtOTk5ICAtTmFOMzMgIDBFKzk5OTk5OSAgLT4gLU5hTjMzCitmbWF4MjY4NyBmbWEgIEluZiAgLU5hTjIgICAwRSs5OTk5OTkgIC0+IC1OYU4yCisKK2ZtYXgyNjkxIGZtYSAtc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5MiBmbWEgLXNOYU45OCAtMTEgICAgICAwRSs5OTk5OTkgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTMgZm1hIC1zTmFOOTcgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk0IGZtYSAtc05hTjE2IC1zTmFOOTQgIDBFKzk5OTk5OSAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5NSBmbWEgLU5hTjk1ICAtc05hTjkzICAwRSs5OTk5OTkgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTYgZm1hIC1JbmYgICAgLXNOYU45MiAgMEUrOTk5OTk5ICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk3IGZtYSAgMDg4ICAgIC1zTmFOOTEgIDBFKzk5OTk5OSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5OCBmbWEgIEluZiAgICAtc05hTjkwICAwRSs5OTk5OTkgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTkgZm1hIC1OYU4gICAgLXNOYU44OSAgMEUrOTk5OTk5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDI3MDEgZm1hIC1OYU4gIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwMiBmbWEgLU5hTiAgIDk5OSAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzAzIGZtYSAtTmFOICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDQgZm1hIC1OYU4gIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwNSBmbWEgLUluZiAgLU5hTjAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzA2IGZtYSAtOTk5ICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDcgZm1hICBJbmYgIC1OYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOCisKK2ZtYXgyNzExIGZtYSAtc05hTiAgIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTIgZm1hIC1zTmFOICAgLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxMyBmbWEgLXNOYU4wMCAgTmFOICAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE0IGZtYSAtc05hTiAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTUgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxNiBmbWEgLUluZiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE3IGZtYSAgMDg4ICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTggZm1hICBJbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxOSBmbWEgLU5hTiAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorZm1heDI3MzAgZm1hICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyNzMxIGZtYSA5RSs5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczMiBmbWEgKzAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorZm1heDI3MzMgZm1hIDlFLTk5OTk5OSArMC4xMDAgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKK2ZtYXgyNzM1IGZtYSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI3MzYgZm1hIDlFKzk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczNyBmbWEgLTAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKK2ZtYXgyNzM4IGZtYSA5RS05OTk5OTkgLTAuMTAwICAwRSs5OTk5OTkgIC0+IC05LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbAorCistLSBzaWducworZm1heDI3NTEgZm1hICAxZSs3Nzc3NzcgIDFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1MiBmbWEgIDFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzUzIGZtYSAtMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NTQgZm1hIC0xZSs3Nzc3NzcgLTFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1NSBmbWEgIDFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzU2IGZtYSAgMWUtNzc3Nzc3IC0xZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NTcgZm1hIC0xZS03Nzc3NzcgIDFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc1OCBmbWEgLTFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCitwcmVjaXNpb246IDkKK2ZtYXgyNzYwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAxICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDEgU3Vibm9ybWFsCitmbWF4Mjc2MSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMiAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAyIFN1Ym5vcm1hbAorZm1heDI3NjIgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDMgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgyNzYzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA0ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDQgU3Vibm9ybWFsCitmbWF4Mjc2NCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA1IFN1Ym5vcm1hbAorZm1heDI3NjUgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDYgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNiBTdWJub3JtYWwKK2ZtYXgyNzY2IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsCitmbWF4Mjc2NyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzY4IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA5ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NjkgZm1hIDFlLTYwMDAwMCAxZS00MDAwMTAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitmbWF4Mjc3MCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzcxIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAyICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzIgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDMgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3MyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc0IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA1ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzUgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDYgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3NiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc3IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA4ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzggZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3OSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAxMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gJ3N1Ym5vcm1hbCcgdGVzdCBlZGdlIGNvbmRpdGlvbiBhdCBoaWdoZXIgcHJlY2lzaW9ucworcHJlY2lzaW9uOiA5OQorZm1heDI3ODAgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNyBTdWJub3JtYWwKK2ZtYXgyNzgxIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA4ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDggU3Vibm9ybWFsCitmbWF4Mjc4MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDA5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDk3IFN1Ym5vcm1hbAorZm1heDI3ODMgZm1hIDFlLTYwMDAwMCAxZS00MDAwOTggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDA5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwcmVjaXNpb246IDk5OQorZm1heDI3ODQgZm1hIDFlLTYwMDAwMCAxZS00MDA5OTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDk5NyBTdWJub3JtYWwKK2ZtYXgyNzg1IGZtYSAxZS02MDAwMDAgMWUtNDAwOTk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDA5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSB0ZXN0IHN1Ym5vcm1hbHMgcm91bmRpbmcKK3ByZWNpc2lvbjogICA1CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitmbWF4MjgwMSBmbWEgIDEuMDAwMEUtOTk5ICAxICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDBFLTk5OQorZm1heDI4MDIgZm1hICAxLjAwMEUtOTk5ICAgMWUtMSAgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgwMyBmbWEgIDEuMDBFLTk5OSAgICAxZS0yICAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAxICBTdWJub3JtYWwKK2ZtYXgyODA0IGZtYSAgMS4wRS05OTkgICAgIDFlLTMgICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorZm1heDI4MDUgZm1hICAxLjBFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyODA2IGZtYSAgMS4zRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgwNyBmbWEgIDEuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MDggZm1hICAxLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODA5IGZtYSAgMi4zRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMCBmbWEgIDIuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTEgZm1hICAyLjdFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODEyIGZtYSAgMS40OUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMyBmbWEgIDEuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTQgZm1hICAxLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODE1IGZtYSAgMi40OUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxNiBmbWEgIDIuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTcgZm1hICAyLjUxRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gM0UtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDI4MTggZm1hICAxRS05OTkgICAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsCitmbWF4MjgxOSBmbWEgIDNFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyMCBmbWEgIDVFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4MjgyMSBmbWEgIDdFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MjIgZm1hICA5RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODIzIGZtYSAgOS45RS05OTkgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgyODI0IGZtYSAgMUUtOTk5ICAgICAgLTFlLTQgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFN1Ym5vcm1hbAorZm1heDI4MjUgZm1hICAzRS05OTkgICAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjYgZm1hIC01RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjcgZm1hICA3RS05OTkgICAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODI4IGZtYSAtOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgyOSBmbWEgIDkuOUUtOTk5ICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MzAgZm1hICAzLjBFLTk5OSAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitmbWF4MjgzMSBmbWEgIDEuMEUtNTAxICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsCitmbWF4MjgzMiBmbWEgIDIuMEUtNTAxICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNC4wRS0xMDAyICAgU3Vibm9ybWFsCitmbWF4MjgzMyBmbWEgIDQuMEUtNTAxICAgICA0ZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MEUtMTAwMSAgU3Vibm9ybWFsCitmbWF4MjgzNCBmbWEgMTAuMEUtNTAxICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgzNSBmbWEgMzAuMEUtNTAxICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMDBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MjgzNiBmbWEgNDAuMEUtNTAxICAgIDQwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MDAwRS05OTkKKworLS0gc3F1YXJlcworZm1heDI4NDAgZm1hICAxRS01MDIgICAgICAgMWUtNTAyICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODQxIGZtYSAgMUUtNTAxICAgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgICBTdWJub3JtYWwKK2ZtYXgyODQyIGZtYSAgMkUtNTAxICAgICAgIDJlLTUwMSAgMEUrOTk5OTk5ICAtPiA0RS0xMDAyICAgICBTdWJub3JtYWwKK2ZtYXgyODQzIGZtYSAgNEUtNTAxICAgICAgIDRlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjZFLTEwMDEgICBTdWJub3JtYWwKK2ZtYXgyODQ0IGZtYSAxMEUtNTAxICAgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgyODQ1IGZtYSAzMEUtNTAxICAgICAgMzBlLTUwMSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgyODQ2IGZtYSA0MEUtNTAxICAgICAgNDBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwMEUtOTk5CisKKy0tIGN1YmVzCitmbWF4Mjg1MCBmbWEgIDFFLTY3MCAgICAgMWUtMzM1ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4NTEgZm1hICAxRS02NjggICAgIDFlLTMzNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbAorZm1heDI4NTIgZm1hICA0RS02NjggICAgIDJlLTMzNCAgMEUrOTk5OTk5ICAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbAorZm1heDI4NTMgZm1hICA5RS02NjggICAgIDNlLTMzNCAgMEUrOTk5OTk5ICAtPiAyLjdFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4NTQgZm1hIDE2RS02NjggICAgIDRlLTMzNCAgMEUrOTk5OTk5ICAtPiA2LjRFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4NTUgZm1hIDI1RS02NjggICAgIDVlLTMzNCAgMEUrOTk5OTk5ICAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbAorZm1heDI4NTYgZm1hIDEwRS02NjggICAxMDBlLTMzNCAgMEUrOTk5OTk5ICAtPiAxLjAwMEUtOTk5CisKKy0tIHRlc3QgZGVyaXZlZCBmcm9tIHJlc3VsdCBvZiAwLjA5OSAqKiA5OTkgYXQgMTUgZGlnaXRzIHdpdGggdW5saW1pdGVkIGV4cG9uZW50CitwcmVjaXNpb246IDE5CitmbWF4Mjg2MCBmbWEgIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgIDBFKzk5OTk5OSAgLT4gNC40MDQ3Nzk4NjAyODU1MUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK3ByZWNpc2lvbjogMworbWF4RXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2ZtYXgyODcwIGZtYSAxICA5Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI4NzEgZm1hIDEgLTkuOTk5RSs5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4Mjg3MiBmbWEgICAgOS45OTlFKzk5OTk5OSAxICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyODczIGZtYSAgIC05Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorZm1heDI4ODEgZm1hICAxLjIzNDdFLTQwICAxLjIzNDdFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjRFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODIgZm1hICAxLjIzNEUtNDAgIDEuMjM0RS00MCAgICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODMgZm1hICAxLjIzRS00MCAgIDEuMjNFLTQwICAgICAgMEUrOTk5OTk5ICAtPiAgMS41MTNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4ODQgZm1hICAxLjJFLTQwICAgIDEuMkUtNDAgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40NEUtODAgICBTdWJub3JtYWwKK2ZtYXgyODg1IGZtYSAgMS4yRS00MCAgICAxLjJFLTQxICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNDRFLTgxICAgU3Vibm9ybWFsCitmbWF4Mjg4NiBmbWEgIDEuMkUtNDAgICAgMS4yRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjRFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4NyBmbWEgIDEuMkUtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjZFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4OCBmbWEgIDEuM0UtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjdFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg4OSBmbWEgIDEuM0UtNDAgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDJFLTgzICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4Mjg5MCBmbWEgIDEuM0UtNDEgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDBFLTgzICAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZm1heDI4OTEgZm1hICAxLjIzNDVFLTM5ICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjM0RS03OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODkyIGZtYSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjg5MyBmbWEgIDEuMjM0NUUtNDAgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NCBmbWEgIDEuMjM0NTZFLTQwICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NSBmbWEgIDEuMjM0NUUtNDEgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mjg5NiBmbWEgIDEuMjM0NTZFLTQxICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2ZtYXgyOTAwIGZtYSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgIDBFKzk5OTk5OSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwMSBmbWEgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxICAwRSs5OTk5OTkgIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDIgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTAzIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwNCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDUgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZm1heDI5MDYgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitmbWF4MjkwNyBmbWEgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAwRSs5OTk5OTkgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitmbWF4MjkwOCBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTA5IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MTAgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkxMSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTkgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCitmbWF4MjkyMSAgZm1hIDEzMEUtMiAgMTIwRS0yICAwRSs5OTk5OTkgIC0+IDEuNTYwMAorZm1heDI5MjIgIGZtYSAxMzBFLTIgIDEyRS0xICAgMEUrOTk5OTk5ICAtPiAxLjU2MAorZm1heDI5MjMgIGZtYSAxMzBFLTIgIDFFMCAgICAgMEUrOTk5OTk5ICAtPiAxLjMwCisKKy0tIE51bGwgdGVzdHMKK2ZtYXgyOTkwIGZtYSAgIyAxMCAgMEUrOTk5OTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyOTkxIGZtYSAxMCAgIyAgMEUrOTk5OTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZm1heDMwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyCitmbWF4MzAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUKK2ZtYXgzMDAzIGZtYSAgMSAgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZm1heDMwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyCitmbWF4MzAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04CitmbWF4MzAwNiBmbWEgIDEgICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2ZtYXgzMDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitmbWF4MzAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2ZtYXgzMDA5IGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZm1heDMwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKK2ZtYXgzMDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxMiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTknICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDAwJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxOCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDAxJyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MScgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMDIxIGZtYSAgMSAgIDAgMSAtPiAxCitmbWF4MzAyMiBmbWEgIDEgICAxIDEgLT4gMgorZm1heDMwMjMgZm1hICAxICAgMiAxIC0+IDMKK2ZtYXgzMDI0IGZtYSAgMSAgIDMgMSAtPiA0CitmbWF4MzAyNSBmbWEgIDEgICA0IDEgLT4gNQorZm1heDMwMjYgZm1hICAxICAgNSAxIC0+IDYKK2ZtYXgzMDI3IGZtYSAgMSAgIDYgMSAtPiA3CitmbWF4MzAyOCBmbWEgIDEgICA3IDEgLT4gOAorZm1heDMwMjkgZm1hICAxICAgOCAxIC0+IDkKK2ZtYXgzMDMwIGZtYSAgMSAgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2ZtYXgzMDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZm1heDMwMzIgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitmbWF4MzAzMyBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2ZtYXgzMDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitmbWF4MzAzNSBmbWEgIDEgICAnNzAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzNiBmbWEgIDEgICAnNzAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMzcgZm1hICAxICAgJzcwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzOCBmbWEgIDEgICAnNzAwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitmbWF4MzA0MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNDIgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0NCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA0NSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQKKworLS0gc2FtZSwgaGlnaGVyIHByZWNpc2lvbgorcHJlY2lzaW9uOiAxNQorZm1heDMwNDYgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2ZtYXgzMDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZm1heDMwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZm1heDMwNDkgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2ZtYXgzMDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZm1heDMwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworZm1heDMwNTIgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZm1heDMwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZm1heDMwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2ZtYXgzMDU1IGZtYSAgMSAgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitmbWF4MzA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2ZtYXgzMDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitwcmVjaXNpb246IDYKK2ZtYXgzMDYwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDYxIGZtYSAgMSAgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2ZtYXgzMDYyIGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZm1heDMwNjMgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDY0IGZtYSAgMSAgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNjUgZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitmbWF4MzA3MCBmbWEgIDEgICAxICAwICAgIC0+IDEKK2ZtYXgzMDcxIGZtYSAgMSAgIDEgMC4gICAgLT4gMQorZm1heDMwNzIgZm1hICAxICAgMSAgLjAgICAtPiAxLjAKK2ZtYXgzMDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wCitmbWF4MzA3NCBmbWEgIDEgICAxIDAuMDAgIC0+IDEuMDAKK2ZtYXgzMDc1IGZtYSAgMSAgICAwICAxICAgLT4gMQorZm1heDMwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxCitmbWF4MzA3NyBmbWEgIDEgICAgLjAgMSAgIC0+IDEuMAorZm1heDMwNzggZm1hICAxICAgMC4wIDEgICAtPiAxLjAKK2ZtYXgzMDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMAorCitwcmVjaXNpb246IDkKKworLS0gc29tZSBjYXJyaWVzCitmbWF4MzA4MCBmbWEgIDEgICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitmbWF4MzA4MSBmbWEgIDEgICA5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMEUrOSBSb3VuZGVkCitmbWF4MzA4MiBmbWEgIDEgICAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCitmbWF4MzA4MyBmbWEgIDEgICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2ZtYXgzMDg0IGZtYSAgMSAgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitmbWF4MzA4NSBmbWEgIDEgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitmbWF4MzA4NiBmbWEgIDEgICAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2ZtYXgzMDg3IGZtYSAgMSAgICAgICAgIDk5OSAxICAtPiAxMDAwCitmbWF4MzA4OCBmbWEgIDEgICAgICAgICAgOTkgMSAgLT4gMTAwCitmbWF4MzA4OSBmbWEgIDEgICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZm1heDMwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZm1heDMwOTIgZm1hICAxICAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZm1heDMwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitmbWF4MzA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2ZtYXgzMDk1IGZtYSAgMSAgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZm1heDMwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitmbWF4MzA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZm1heDMwOTggZm1hICAxICAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2ZtYXgzMDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2ZtYXgzMTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitmbWF4MzEwMSBmbWEgIDEgICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitmbWF4MzEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2ZtYXgzMTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZm1heDMxMDQgZm1hICAxICAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZm1heDMxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2ZtYXgzMTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZm1heDMxMDcgZm1hICAxICAgJy01RTgnICAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAnCitmbWF4MzEwOCBmbWEgIDEgICAnLTVFOScgICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgUm91bmRlZAorZm1heDMxMDkgZm1hICAxICAgJy01RTEwJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMCcgIFJvdW5kZWQKK2ZtYXgzMTEwIGZtYSAgMSAgICctNUUxMScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTEnICBSb3VuZGVkCitmbWF4MzExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZm1heDMxMTMgZm1hICAxICAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2ZtYXgzMTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzMTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZm1heDMxMTcgZm1hICAxICAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2ZtYXgzMTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitmbWF4MzEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZm1heDMxMjEgZm1hICAxICAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2ZtYXgzMTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2ZtYXgzMTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2ZtYXgzMTI0IGZtYSAgMSAgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZm1heDMxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZm1heDMxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitmbWF4MzEyNyBmbWEgIDEgICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZm1heDMxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2ZtYXgzMTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZm1heDMxMzAgZm1hICAxICAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZm1heDMxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2ZtYXgzMTMyIGZtYSAgMSAgIDAgICctNUU4JyAgICAgICAtPiAgJy01MDAwMDAwMDAnCitmbWF4MzEzMyBmbWEgIDEgICAwICAnLTVFOScgICAgICAgLT4gICctNS4wMDAwMDAwMEUrOScgICAgUm91bmRlZAorZm1heDMxMzQgZm1hICAxICAgMCAgJy01RTEwJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgIFJvdW5kZWQKK2ZtYXgzMTM1IGZtYSAgMSAgIDAgICctNUUxMScgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMScgICBSb3VuZGVkCitmbWF4MzEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitmbWF4MzEzNyBmbWEgIDEgICAgMSAgJzBFLTEyJyAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQKK2ZtYXgzMTM4IGZtYSAgMSAgIC0xICAnMEUtMTInICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZAorZm1heDMxMzkgZm1hICAxICAgJzBFLTEyJyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzE0MCBmbWEgIDEgICAnMEUtMTInIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzMTQxIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwICAgLT4gICcxMDAwMC4wMDAwJworZm1heDMxNDIgZm1hICAxICAgMUUrNCAgICAwLjAwMDAwICAtPiAgJzEwMDAwLjAwMDAnICBSb3VuZGVkCitmbWF4MzE0MyBmbWEgIDEgICAwLjAwMCAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcKK2ZtYXgzMTQ0IGZtYSAgMSAgIDAuMDAwMCAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZm1heDMxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZm1heDMxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2ZtYXgzMTQ4IGZtYSAgMSAgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitmbWF4MzE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitmbWF4MzE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDMxNTEgZm1hICAxICAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2ZtYXgzMTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTU0IGZtYSAgMSAgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzMTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitmbWF4MzE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2JworZm1heDMxNTcgZm1hICAxICAgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2ZtYXgzMTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitmbWF4MzE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitmbWF4MzE2MCBmbWEgIDEgICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorcHJlY2lzaW9uOiAxNQorZm1heDMxNjEgZm1hICAxICAgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCitmbWF4MzE2MiBmbWEgIDEgICAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKK2ZtYXgzMTY1IGZtYSAgMSAgICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2ZtYXgzMTY2IGZtYSAgMSAgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzMTY4IGZtYSAgMSAgICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMTIzNDU2Nzg5MDEyMzQ1ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQorZm1heDMxNzAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OScKK2ZtYXgzMTc5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk4JworZm1heDMxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTcnCitmbWF4MzE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5NicKK2ZtYXgzMTgyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk1JworZm1heDMxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3ByZWNpc2lvbjogOQorcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzMjAwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2ZtYXgzMjAxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjEwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjEzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2ZtYXgzMjE3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDMyMjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworZm1heDMyMjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjIyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjcgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI4IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzAgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjMxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzYgZm1hICAxICAgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworZm1heDMyMzcgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2ZtYXgzMjQwIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI0MSBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNDIgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2ZtYXgzMjUwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2ZtYXgzMjUxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1OCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2MSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2NCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2ZtYXgzMjY3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2OCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gaW5wdXQgcHJlcGFyYXRpb24gdGVzdHMgKG9wZXJhbmRzIHNob3VsZCBub3QgYmUgcm91bmRlZCkKK3ByZWNpc2lvbjogMworcm91bmRpbmc6IGhhbGZfdXAKKworZm1heDMyNzAgZm1hICAxICAgJzEyMzQ1Njc4OTAwMDAwJyAgOTk5OTk5OTk5OTk5OSAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjcxIGZtYSAgMSAgICAnOTk5OTk5OTk5OTk5OScgMTIzNDU2Nzg5MDAwMDAgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMjcyIGZtYSAgMSAgICcxMkUrMycgICczNDQ0JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3MyBmbWEgIDEgICAnMTJFKzMnICAnMzQ0NicgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzQgZm1hICAxICAgJzEyRSszJyAgJzM0NDkuOScgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc1IGZtYSAgMSAgICcxMkUrMycgICczNDUwLjAnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3NiBmbWEgIDEgICAnMTJFKzMnICAnMzQ1MC4xJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzcgZm1hICAxICAgJzEyRSszJyAgJzM0NTQnICAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc4IGZtYSAgMSAgICcxMkUrMycgICczNDU2JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzMjgxIGZtYSAgMSAgICczNDQ0JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg0IGZtYSAgMSAgICczNDUwLjAnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg3IGZtYSAgMSAgICczNDU2JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzMjkxIGZtYSAgMSAgICczNDQ0JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTMgZm1hICAxICAgJzM0NDkuOScgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk0IGZtYSAgMSAgICczNDUwLjAnICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTYgZm1hICAxICAgJzM0NTQnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk3IGZtYSAgMSAgICczNDU2JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzMzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDAKK2ZtYXgzMzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDEKK2ZtYXgzMzAzIGZtYSAgMSAgICAgMSAgIDEgICAgICAtPiAgIDIKK2ZtYXgzMzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMKK2ZtYXgzMzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkKK2ZtYXgzMzA2IGZtYSAgMSAgICA5OSAgIDEgICAgICAtPiAxMDAKK2ZtYXgzMzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDEKK2ZtYXgzMzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDIKK2ZtYXgzMzA5IGZtYSAgMSAgICAtMSAgLTEgICAgICAtPiAgLTIKK2ZtYXgzMzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTEKK2ZtYXgzMzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDAKK2ZtYXgzMzEyIGZtYSAgMSAgICAxMiAgLTEgICAgICAtPiAgMTEKK2ZtYXgzMzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcKK2ZtYXgzMzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgKK2ZtYXgzMzE1IGZtYSAgMSAgIDEwMCAgLTEgICAgICAtPiAgOTkKK2ZtYXgzMzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZm1heDMzMjEgZm1hICAxICAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzMzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCitmbWF4MzMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZm1heDMzMjQgZm1hICAxICAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2ZtYXgzMzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5CitmbWF4MzMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZm1heDMzMjcgZm1hICAxICAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2ZtYXgzMzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCitmbWF4MzMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZm1heDMzMzAgZm1hICAxICAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2ZtYXgzMzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCitmbWF4MzMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZm1heDMzMzMgZm1hICAxICAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2ZtYXgzMzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4CitmbWF4MzMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZm1heDMzMzYgZm1hICAxICAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK3ByZWNpc2lvbjogOQorZm1heDMzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZm1heDMzNDEgZm1hICAxICAgMUUrOCAgICAwICAgIC0+ICAgIDEwMDAwMDAwMAorZm1heDMzNDIgZm1hICAxICAgMUUrOSAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIFJvdW5kZWQKK2ZtYXgzMzQzIGZtYSAgMSAgIDFFKzEwICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitmbWF4MzM0NCBmbWEgIDEgICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitmbWF4MzM0NSBmbWEgIDEgICAxRSs4ICAgIDEgICAgLT4gICAgMTAwMDAwMDAxCitmbWF4MzM0NiBmbWEgIDEgICAxRSs5ICAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM0NyBmbWEgIDEgICAxRSsxMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitmbWF4MzM0OSBmbWEgIDEgICAxRSs4ICAgIDcgICAgLT4gICAgMTAwMDAwMDA3CitmbWF4MzM1MCBmbWEgIDEgICAxRSs5ICAgIDcgICAgLT4gICAxLjAwMDAwMDAxRSs5ICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzM1MSBmbWEgIDEgICAxRSsxMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorZm1heDMzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2ZtYXgzMzYyICBmbWEgIDEgICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQKK2ZtYXgzMzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMzY0ICBmbWEgIDEgICA5Ljk5OTk5OUUrOTIgLTkuOTk5OTk5RSs5MiAtPiAwRSs4NgorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitwcmVjaXNpb246ICAgMTAKK2ZtYXgzMzcwIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2ZtYXgzMzcxIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorcHJlY2lzaW9uOiAgIDEwCitmbWF4MzM3MiBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CitmbWF4MzM3MyBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorcHJlY2lzaW9uOiAgIDEwCitmbWF4MzM3NCBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CitmbWF4MzM3NSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2ZtYXgzNDAwIGZtYSAgMSAgICAgMSAgIDc3ZS03ICAgICAgIC0+ICAxLjAwMDAwNzcKK2ZtYXgzNDAxIGZtYSAgMSAgICAgMSAgIDc3ZS04ICAgICAgIC0+ICAxLjAwMDAwMDc3CitmbWF4MzQwMiBmbWEgIDEgICAgIDEgICA3N2UtOSAgICAgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xMCAgICAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDQgZm1hICAxICAgICAxICAgNzdlLTExICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDcgZm1hICAxICAgICAxICAgNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDEwIGZtYSAgMSAgICAxMCAgIDc3ZS03ICAgICAgIC0+ICAxMC4wMDAwMDc3CitmbWF4MzQxMSBmbWEgIDEgICAgMTAgICA3N2UtOCAgICAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDEyIGZtYSAgMSAgICAxMCAgIDc3ZS05ICAgICAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTMgZm1hICAxICAgIDEwICAgNzdlLTEwICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNCBmbWEgIDEgICAgMTAgICA3N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDE1IGZtYSAgMSAgICAxMCAgIDc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTYgZm1hICAxICAgIDEwICAgNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNyBmbWEgIDEgICAgMTAgICA3N2UtOTk5OTk5ICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0MjAgZm1hICAxICAgIDc3ZS03ICAgICAgICAxICAgLT4gIDEuMDAwMDA3NworZm1heDM0MjEgZm1hICAxICAgIDc3ZS04ICAgICAgICAxICAgLT4gIDEuMDAwMDAwNzcKK2ZtYXgzNDIyIGZtYSAgMSAgICA3N2UtOSAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MjMgZm1hICAxICAgIDc3ZS0xMCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNCBmbWEgIDEgICAgNzdlLTExICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDI1IGZtYSAgMSAgICA3N2UtMTIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MjYgZm1hICAxICAgIDc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0MzAgZm1hICAxICAgIDc3ZS03ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwNzcKK2ZtYXgzNDMxIGZtYSAgMSAgICA3N2UtOCAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM0MzIgZm1hICAxICAgIDc3ZS05ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzMyBmbWEgIDEgICAgNzdlLTEwICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM0IGZtYSAgMSAgICA3N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzUgZm1hICAxICAgIDc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM3IGZtYSAgMSAgICA3N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTcgICAgICAgLT4gIDAuOTk5OTkyMworZm1heDM0NDEgZm1hICAxICAgICAxICAgLTc3ZS04ICAgICAgIC0+ICAwLjk5OTk5OTIzCitmbWF4MzQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTkgICAgICAgLT4gIDAuOTk5OTk5OTIzCitmbWF4MzQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTEwICAgICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xMSAgICAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ3IGZtYSAgMSAgICAgMSAgIC03N2UtOTk5OTk5ICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0NTAgZm1hICAxICAgIDEwICAgLTc3ZS03ICAgICAgIC0+ICAgOS45OTk5OTIzCitmbWF4MzQ1MSBmbWEgIDEgICAgMTAgICAtNzdlLTggICAgICAgLT4gICA5Ljk5OTk5OTIzCitmbWF4MzQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTkgICAgICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xMCAgICAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU0IGZtYSAgMSAgICAxMCAgIC03N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDU3IGZtYSAgMSAgICAxMCAgIC03N2UtOTk5OTk5ICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM0NjAgZm1hICAxICAgIC03N2UtNyAgICAgICAgMSAgIC0+ICAwLjk5OTk5MjMKK2ZtYXgzNDYxIGZtYSAgMSAgICAtNzdlLTggICAgICAgIDEgICAtPiAgMC45OTk5OTkyMworZm1heDM0NjIgZm1hICAxICAgIC03N2UtOSAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTkyMworZm1heDM0NjMgZm1hICAxICAgIC03N2UtMTAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDY0IGZtYSAgMSAgICAtNzdlLTExICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NyBmbWEgIDEgICAgLTc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDcwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgMTAgICAtPiAgIDkuOTk5OTkyMworZm1heDM0NzEgZm1hICAxICAgIC03N2UtOCAgICAgICAxMCAgIC0+ICAgOS45OTk5OTkyMworZm1heDM0NzIgZm1hICAxICAgIC03N2UtOSAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDczIGZtYSAgMSAgICAtNzdlLTEwICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NCBmbWEgIDEgICAgLTc3ZS0xMSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NiBmbWEgIDEgICAgLTc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3NyBmbWEgIDEgICAgLTc3ZS05OTk5OTkgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2ZtYXgzNDgwIGZtYSAgMSAgICAtMSAgICA3N2UtNyAgICAgICAtPiAgLTAuOTk5OTkyMworZm1heDM0ODEgZm1hICAxICAgIC0xICAgIDc3ZS04ICAgICAgIC0+ICAtMC45OTk5OTkyMworZm1heDM0ODIgZm1hICAxICAgIC0xICAgIDc3ZS05ICAgICAgIC0+ICAtMC45OTk5OTk5MjMKK2ZtYXgzNDgzIGZtYSAgMSAgICAtMSAgICA3N2UtMTAgICAgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xMSAgICAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ4NSBmbWEgIDEgICAgLTEgICAgNzdlLTEyICAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0ODYgZm1hICAxICAgIC0xICAgIDc3ZS05OTkgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDg3IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5OTk5ICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDkwIGZtYSAgMSAgIC0xMCAgICA3N2UtNyAgICAgICAtPiAgIC05Ljk5OTk5MjMKK2ZtYXgzNDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtOCAgICAgICAtPiAgIC05Ljk5OTk5OTIzCitmbWF4MzQ5MiBmbWEgIDEgICAtMTAgICAgNzdlLTkgICAgICAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDkzIGZtYSAgMSAgIC0xMCAgICA3N2UtMTAgICAgICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xMSAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDk1IGZtYSAgMSAgIC0xMCAgICA3N2UtMTIgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5NiBmbWEgIDEgICAtMTAgICAgNzdlLTk5OSAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0OTcgZm1hICAxICAgLTEwICAgIDc3ZS05OTk5OTkgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM1MDAgZm1hICAxICAgICA3N2UtNyAgICAgICAtMSAgIC0+ICAtMC45OTk5OTIzCitmbWF4MzUwMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTIzCitmbWF4MzUwMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTkyMworZm1heDM1MDMgZm1hICAxICAgICA3N2UtMTAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTA1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNiBmbWEgIDEgICAgIDc3ZS05OTkgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MDcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM1MTAgZm1hICAxICAgICA3N2UtNyAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTkyMworZm1heDM1MTEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5MjMKK2ZtYXgzNTEyIGZtYSAgMSAgICAgNzdlLTkgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTMgZm1hICAxICAgICA3N2UtMTAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTUgZm1hICAxICAgICA3N2UtMTIgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTE2IGZtYSAgMSAgICAgNzdlLTk5OSAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvbmcgb3BlcmFuZHMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2ZtYXgzNTIxIGZtYSAgMSAgIDEyMzQ1Njc4MDAwIDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorZm1heDM1MjIgZm1hICAxICAgMCAxMjM0NTY3ODAwMCAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitmbWF4MzUyMyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorZm1heDM1MjQgZm1hICAxICAgMCAxMjM0NTY3ODAwICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2ZtYXgzNTI1IGZtYSAgMSAgIDEyMzQ1Njc4OTAgIDAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitmbWF4MzUyNiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZm1heDM1MjcgZm1hICAxICAgMTIzNDU2Nzg5MSAgMCAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MjggZm1hICAxICAgMCAxMjM0NTY3ODkxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MjkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTMwIGZtYSAgMSAgIDAgMTIzNDU2Nzg5MDEgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUzMSBmbWEgIDEgICAxMjM0NTY3ODk2ICAwIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUzMiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKKy0tIHN0aWxsIGNoZWNraW5nCitmbWF4MzU0MSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEyMzQ1Njc4MDAwCitmbWF4MzU0MiBmbWEgIDEgICAwIDEyMzQ1Njc4MDAwIC0+IDEyMzQ1Njc4MDAwCitmbWF4MzU0MyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEyMzQ1Njc4MDAKK2ZtYXgzNTQ0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMTIzNDU2NzgwMAorZm1heDM1NDUgZm1hICAxICAgMTIzNDU2Nzg5MCAgMCAtPiAxMjM0NTY3ODkwCitmbWF4MzU0NiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEyMzQ1Njc4OTAKK2ZtYXgzNTQ3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMTIzNDU2Nzg5MQorZm1heDM1NDggZm1hICAxICAgMCAxMjM0NTY3ODkxICAtPiAxMjM0NTY3ODkxCitmbWF4MzU0OSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEyMzQ1Njc4OTAxCitmbWF4MzU1MCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEyMzQ1Njc4OTAxCitmbWF4MzU1MSBmbWEgIDEgICAxMjM0NTY3ODk2ICAwIC0+IDEyMzQ1Njc4OTYKK2ZtYXgzNTUyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMTIzNDU2Nzg5NgorCistLSB2ZXJpZnkgYSBxdWVyeQorcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszOTQKK21pbkV4cG9uZW50OiAtMzkzCityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzU2MiBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uCitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM1NjMgZm1hICAxICAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCisKKy0tIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgd2l0aCBleHRyZW1lIHJvdW5kaW5nCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjAxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MDIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYwMyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MDUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjA2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjA3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2MTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYxMiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjEzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzYxNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzYxNSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2MTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2MTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYyMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjIyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2MjMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjI0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjI1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzYyNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYyNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjMxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MzIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYzMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MzQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MzUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjM2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjM3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2NDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzY0MiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjQzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzY0NCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzY0NSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2NDYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2NDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzY1MSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjUyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2NTMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjU0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjU1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzY1NiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzY1NyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCityb3VuZGluZzogaGFsZl91cAorcHJlY2lzaW9uOiAgMzcKK2ZtYXgzNjYwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDUzOAorcHJlY2lzaW9uOiAgMzYKK2ZtYXgzNjYxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNDU0ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDM1CitmbWF4MzY2MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzNAorZm1heDM2NjMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM1ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzMKK2ZtYXgzNjY0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMyCitmbWF4MzY2NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMQorZm1heDM2NjYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzAKK2ZtYXgzNjY3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI5CitmbWF4MzY2OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyOAorZm1heDM2NjkgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjcKK2ZtYXgzNjcwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjM0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI2CitmbWF4MzY3MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNQorZm1heDM2NzIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjQKK2ZtYXgzNjczIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIzCitmbWF4MzY3NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMgorZm1heDM2NzUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM5ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjEKK2ZtYXgzNjc2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzY0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIwCitmbWF4MzY3NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxOQorZm1heDM2NzggZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDI0ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTgKK2ZtYXgzNjc5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE3CitmbWF4MzY4MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNgorZm1heDM2ODEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTUKK2ZtYXgzNjgyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE0CitmbWF4MzY4MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMworZm1heDM2ODQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTIKK2ZtYXgzNjg1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDExCitmbWF4MzY4NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMAorZm1heDM2ODcgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NDE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDkKK2ZtYXgzNjg4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA4CitmbWF4MzY4OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNworZm1heDM2OTAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNgorZm1heDM2OTEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTJFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA1CitmbWF4MzY5MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNAorZm1heDM2OTMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMworZm1heDM2OTQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODVFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyCitmbWF4MzY5NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMQorZm1heDM2OTYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDFFKzExICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogICA5CisKK2ZtYXgzNzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitmbWF4MzcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2ZtYXgzNzAzIGZtYSAgMSAgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZm1heDM3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2ZtYXgzNzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitmbWF4MzcxMSBmbWEgIDEgICAwRSszICAwMC4wICAgLT4gMC4wCitmbWF4MzcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMAorZm1heDM3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2ZtYXgzNzE0IGZtYSAgMSAgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitmbWF4MzcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMworZm1heDM3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2ZtYXgzNzE3IGZtYSAgMSAgIDBFKzMgIDAwLkUrNSAtPiAwRSszCitmbWF4MzcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMAorZm1heDM3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwCitmbWF4MzczMSBmbWEgIDEgICAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZm1heDM3MjAgZm1hICAxICAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2ZtYXgzNzIxIGZtYSAgMSAgIDAwLjAgICAwRSszICAtPiAwLjAKK2ZtYXgzNzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwCitmbWF4MzcyMyBmbWEgIDEgICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZm1heDM3MjQgZm1hICAxICAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2ZtYXgzNzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszCitmbWF4MzcyNiBmbWEgIDEgICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZm1heDM3MjcgZm1hICAxICAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwCitmbWF4MzcyOSBmbWEgIDEgICAtMDAuMCAgMEUrMyAgLT4gMC4wCitmbWF4MzczMCBmbWEgIDEgICAtMDAuICAgMEUrMyAgLT4gMAorCitmbWF4MzczMiBmbWEgIDEgICAgMCAgICAgMCAgICAgLT4gIDAKK2ZtYXgzNzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMAorZm1heDM3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwCitmbWF4MzczNSBmbWEgIDEgICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitmbWF4MzczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDAKK2ZtYXgzNzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMgorZm1heDM3MzggZm1hICAxICAgIDEgICAgIDEgICAgIC0+ICAyCitmbWF4MzczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDAKKworZm1heDM3NDEgZm1hICAxICAgIDAgICAgLTEgICAgIC0+IC0xCitmbWF4Mzc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTEKK2ZtYXgzNzQzIGZtYSAgMSAgICAwICAgICAxICAgICAtPiAgMQorZm1heDM3NDQgZm1hICAxICAgLTAgICAgIDEgICAgIC0+ICAxCitmbWF4Mzc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTEKK2ZtYXgzNzQ2IGZtYSAgMSAgIC0xICAgIC0wICAgICAtPiAtMQorZm1heDM3NDcgZm1hICAxICAgIDEgICAgIDAgICAgIC0+ICAxCitmbWF4Mzc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDEKKworZm1heDM3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2ZtYXgzNzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wCitmbWF4Mzc1MyBmbWEgIDEgICAgMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wCitmbWF4Mzc1NiBmbWEgIDEgICAtMS4wICAtMCAgICAgLT4gLTEuMAorZm1heDM3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2ZtYXgzNzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2ZtYXgzNzYxIGZtYSAgMSAgICAwICAgIC0xLjAgICAtPiAtMS4wCitmbWF4Mzc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNzY0IGZtYSAgMSAgIC0wICAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMAorZm1heDM3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNzY3IGZtYSAgMSAgICAxICAgICAwLjAgICAtPiAgMS4wCitmbWF4Mzc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitmbWF4Mzc3MSBmbWEgIDEgICAgMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNzczIGZtYSAgMSAgICAwLjAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc3NCBmbWEgIDEgICAtMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2ZtYXgzNzc2IGZtYSAgMSAgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitmbWF4Mzc3NyBmbWEgIDEgICAgMS4wICAgMC4wICAgLT4gIDEuMAorZm1heDM3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2ZtYXgzNzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgyIGZtYSAgMSAgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg1IGZtYSAgMSAgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg4IGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkxIGZtYSAgMSAgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNzk0IGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitmbWF4MzgwMCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODAxIGZtYSAgMSAgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODAzIGZtYSAgMSAgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA0IGZtYSAgMSAgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA2IGZtYSAgMSAgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzODA3IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODA5IGZtYSAgMSAgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4MTAgZm1hICAxICAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTIgZm1hICAxICAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTMgZm1hICAxICAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM4MTUgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitmbWF4MzgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZm1heDM4MjIgZm1hICAxICAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2ZtYXgzODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFOCitmbWF4MzgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTgorZm1heDM4MjUgZm1hICAxICAgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2ZtYXgzODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFOCitmbWF4MzgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTgorZm1heDM4MjggZm1hICAxICAgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2ZtYXgzODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzEgZm1hICAxICAgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzQgZm1hICAxICAgIDAgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM4MzcgZm1hICAxICAgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZm1heDM4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQzIGZtYSAgMSAgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ2IGZtYSAgMSAgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ5IGZtYSAgMSAgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODUyIGZtYSAgMSAgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU1IGZtYSAgMSAgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU4IGZtYSAgMSAgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ZtYXgzODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZm1heDM4NjIgZm1hICAxICAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitmbWF4Mzg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2ZtYXgzODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZm1heDM4NjUgZm1hICAxICAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitmbWF4Mzg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2ZtYXgzODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZm1heDM4NjggZm1hICAxICAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitmbWF4Mzg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitmbWF4Mzg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzIgZm1hICAxICAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzUgZm1hICAxICAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzggZm1hICAxICAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4ODEgZm1hICAxICAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2ZtYXgzODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4NCBmbWEgIDEgICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitmbWF4Mzg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdywgdW5kZXJmbG93IGFuZCBzdWJub3JtYWwgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitwcmVjaXNpb246IDkKK2ZtYXgzODkwIGZtYSAgMSAgIDFFKzk5OTk5OSAgICAgOUUrOTk5OTk5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5MSBmbWEgIDEgICA5RSs5OTk5OTkgICAgIDFFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTIgZm1hICAxICAgLTEuMUUtOTk5OTk5ICAxRS05OTk5OTkgICAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwKK2ZtYXgzODkzIGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4xZS05OTk5OTkgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCitmbWF4Mzg5NCBmbWEgIDEgICAtMS4wMDAxRS05OTk5OTkgIDFFLTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAzIFN1Ym5vcm1hbAorZm1heDM4OTUgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjAwMDFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzODk2IGZtYSAgMSAgIC0xRSs5OTk5OTkgICAtOUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTcgZm1hICAxICAgLTlFKzk5OTk5OSAgIC0xRSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzg5OCBmbWEgIDEgICArMS4xRS05OTk5OTkgLTFFLTk5OTk5OSAgIC0+IDFFLTEwMDAwMDAgICBTdWJub3JtYWwKK2ZtYXgzODk5IGZtYSAgMSAgIC0xRS05OTk5OTkgICArMS4xZS05OTk5OTkgLT4gMUUtMTAwMDAwMCAgICBTdWJub3JtYWwKK2ZtYXgzOTAwIGZtYSAgMSAgICsxLjAwMDFFLTk5OTk5OSAtMUUtOTk5OTk5ICAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzOTAxIGZtYSAgMSAgIC0xRS05OTk5OTkgICArMS4wMDAxZS05OTk5OTkgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzOTAyIGZtYSAgMSAgIC0xRSs5OTk5OTkgICArOUUrOTk5OTk5ICAgLT4gIDhFKzk5OTk5OQorZm1heDM5MDMgZm1hICAxICAgLTlFKzk5OTk5OSAgICsxRSs5OTk5OTkgICAtPiAtOEUrOTk5OTk5CisKK3ByZWNpc2lvbjogMworZm1heDM5MDQgZm1hICAxICAgICAgICAwIC05Ljk5OUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDUgZm1hICAxICAgICAgICAgIC05Ljk5OUUrOTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDYgZm1hICAxICAgICAgICAwICA5Ljk5OUUrOTk5OTk5ICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDM5MDcgZm1hICAxICAgICAgICAgICA5Ljk5OUUrOTk5OTk5IDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitmbWF4MzkxMCBmbWEgIDEgICAgMS4wMEUtOTk5ICAgMCAgICAtPiAgIDEuMDBFLTk5OQorZm1heDM5MTEgZm1hICAxICAgIDAuMUUtOTk5ICAgIDAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitmbWF4MzkxMiBmbWEgIDEgICAgMC4xMEUtOTk5ICAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgzOTEzIGZtYSAgMSAgICAwLjEwMEUtOTk5ICAwICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzkxNCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgMCAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCitmbWF4MzkxNSBmbWEgIDEgICAgMC45OTlFLTk5OSAgMCAgICAtPiAgIDEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MTYgZm1hICAxICAgIDAuMDk5RS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTE3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAwICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkxOCBmbWEgIDEgICAgMC4wMDFFLTk5OSAgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzkxOSBmbWEgIDEgICAgMC4wMDA5RS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzkyMCBmbWEgIDEgICAgMC4wMDAxRS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzOTMwIGZtYSAgMSAgIC0xLjAwRS05OTkgICAwICAgIC0+ICAtMS4wMEUtOTk5CitmbWF4MzkzMSBmbWEgIDEgICAtMC4xRS05OTkgICAgMCAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK2ZtYXgzOTMyIGZtYSAgMSAgIC0wLjEwRS05OTkgICAwICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorZm1heDM5MzMgZm1hICAxICAgLTAuMTAwRS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzOTM0IGZtYSAgMSAgIC0wLjAxRS05OTkgICAwICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK2ZtYXgzOTM1IGZtYSAgMSAgIC0wLjk5OUUtOTk5ICAwICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkzNiBmbWEgIDEgICAtMC4wOTlFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MzcgZm1hICAxICAgLTAuMDA5RS05OTkgIDAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTM4IGZtYSAgMSAgIC0wLjAwMUUtOTk5ICAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTM5IGZtYSAgMSAgIC0wLjAwMDlFLTk5OSAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTQwIGZtYSAgMSAgIC0wLjAwMDFFLTk5OSAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gc29tZSBub24temVybyBzdWJub3JtYWwgZm1hICAxICBzCitmbWF4Mzk1MCBmbWEgIDEgICAgMS4wMEUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OQorZm1heDM5NTEgZm1hICAxICAgIDAuMUUtOTk5ICAgICAwLjFFLTk5OSAgLT4gICAyRS0xMDAwICAgIFN1Ym5vcm1hbAorZm1heDM5NTIgZm1hICAxICAgIDAuMTBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDM5NTMgZm1hICAxICAgIDAuMTAwRS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4Mzk1NCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mzk1NSBmbWEgIDEgICAgMC45OTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OSAgSW5leGFjdCBSb3VuZGVkCitmbWF4Mzk1NiBmbWEgIDEgICAgMC4wOTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTU3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NTggZm1hICAxICAgIDAuMDAxRS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk1OSBmbWEgIDEgICAgMC4wMDA5RS05OTkgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTYwIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworLS0gbmVnYXRpdmVzLi4uCitmbWF4Mzk2MSBmbWEgIDEgICAgMS4wMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mzk2MiBmbWEgIDEgICAgMC4xRS05OTkgICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDAKK2ZtYXgzOTYzIGZtYSAgMSAgICAwLjEwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMQorZm1heDM5NjQgZm1hICAxICAgIDAuMTAwRS05OTkgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAxICAgIENsYW1wZWQKK2ZtYXgzOTY1IGZtYSAgMSAgICAwLjAxRS05OTkgICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwKK2ZtYXgzOTY2IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NjcgZm1hICAxICAgIDAuMDk5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzOTY4IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NjkgZm1hICAxICAgIDAuMDAxRS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk3MCBmbWEgIDEgICAgMC4wMDA5RS05OTkgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTcxIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBzb21lICdyZWFsJyBudW1iZXJzCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiA4CitmbWF4MzU2NiBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MDZFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcHJlY2lzaW9uOiA3CitmbWF4MzU2NyBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MUUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwcmVjaXNpb246IDYKK2ZtYXgzNTY4IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTlFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKKy0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2ZtYXgzNTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKK2ZtYXgzNTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwKK2ZtYXgzNTczIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4MworZm1heDM1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwKKworLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitmbWF4MzU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZm1heDM1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKKy0tIEFkZDogbGhzIGFuZCByaHMgMAorZm1heDMxMDAxIGZtYSAgMSAgICAgICAgIDEuNTI0NDRFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwMyBmbWEgIDEgICAgICAgICAxLjUyNDQ2RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDA0IGZtYSAgMSAgICAgICAgIDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDUgZm1hICAxICAgICAgICAgMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwNiBmbWEgIDEgICAgICAgICAwIDEuNTI0NDZFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBZGQ6IGxocyA+PiByaHMgYW5kIHZpY2UgdmVyc2EKK2ZtYXgzMTAxMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDEzIGZtYSAgMSAgICAgICAgIDEuNTI0NDZFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxNCBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NEUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTUgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDVFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDE2IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQWRkOiBsaHMgKyByaHMgZm1hICAxICBpdGlvbiBjYXJyaWVkIG91dAorZm1heDMxMDIxIGZtYSAgMSAgICAgICAgIDEuNTI0NDNFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyMiBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjMgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDI0IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQzRS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyNSBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NEUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjYgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDVFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3ByZWNpc2lvbjogICAgMTYKK21heEV4cG9uZW50OiArMzg0CittaW5FeHBvbmVudDogLTM4Mworcm91bmRpbmc6ICAgICBkb3duCisKK2ZtYXgzMTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDEgZm1hICAxICAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDUgZm1hICAxICAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDggZm1hICAxICAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGNlaWxpbmcKK2ZtYXgzMTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTEzIGZtYSAgMSAgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE2IGZtYSAgMSAgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTE5IGZtYSAgMSAgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAorCityb3VuZGluZzogICAgIGRvd24KK3ByZWNpc2lvbjogICAgNworbWF4RXhwb25lbnQ6ICs5NgorbWluRXhwb25lbnQ6IC05NQorZm1heDMxMTMwIGZtYSAgMSAgICAgMSAgICAgICAgICAgIC0xZS0yMDAgIC0+IDAuOTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CistLSBzdWJub3JtYWwgYm91bmRhcnkKK2ZtYXgzMTEzMSBmbWEgIDEgICAgIDEuMDAwMDAwRS05NCAgLTFlLTIwMCAgLT4gIDkuOTk5OTk5RS05NSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMzIgZm1hICAxICAgICAxLjAwMDAwMUUtOTUgIC0xZS0yMDAgIC0+ICAxLjAwMDAwMEUtOTUgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTMzIGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OUUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzQgZm1hICAxICAgICAwLjk5OTk5OUUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5OTk4RS05NiAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTEzNSBmbWEgIDEgICAgIDAuMDAxMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMTM2IGZtYSAgMSAgICAgMC4wMDA5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OEUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzcgZm1hICAxICAgICAxLjAwMDAwMEUtOTUgIC0xZS0xMDEgIC0+ICA5Ljk5OTk5RS05NiAgU3Vibm9ybWFsCitmbWF4MzExMzggZm1hICAxICAgICAgICAxMDAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5OUUtOTggIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExMzkgZm1hICAxICAgICAgICAgMTAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDAgZm1hICAxICAgICAgICAgIDEwMEUtMTAxIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDEgZm1hICAxICAgICAgICAgICAxMEUtMTAxIC0xZS0yMDAgIC0+ICA5RS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNDIgZm1hICAxICAgICAgICAgICAgMUUtMTAxIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE0MyBmbWEgIDEgICAgICAgICAgICAwRS0xMDEgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTQ0IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzMTE1MSBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOTlFLTk5ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTUyIGZtYSAgMSAgICAgICAgIDEwMDBFLTEwMiAtMWUtMjAwICAtPiAgOS45RS0xMDAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzExNTMgZm1hICAxICAgICAgICAgIDEwMEUtMTAyIC0xZS0yMDAgIC0+ICA5RS0xMDEgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTU0IGZtYSAgMSAgICAgICAgICAgMTBFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNTUgZm1hICAxICAgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE1NiBmbWEgIDEgICAgICAgICAgICAwRS0xMDIgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTU3IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMyAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK2ZtYXgzMTE2MCBmbWEgIDEgICAgICAgICAgMTAwRS0xMDUgLTFlLTEwMSAgLT4gLTBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNjEgZm1hICAxICAgICAgICAgIDEwMEUtMTA1IC0xZS0yMDEgIC0+ICAwRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQorcHJlY2lzaW9uOiAgIDE1Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworZm1heDMxMjAwIGZtYSAgMSAgIDFFMTUgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIwMSBmbWEgIDEgICAxRTE1ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTAgZm1hICAxICAgMUUxNSAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjExIGZtYSAgMSAgIDFFMTUgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxMiBmbWEgIDEgICAxRTE1ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTMgZm1hICAxICAgMUUxNSAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE0IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTYgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE3IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxOCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTkgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIwIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyMSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjIgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyNCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorZm1heDMxMjMwIGZtYSAgMSAgIDFFMTUgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDE2CisKK2ZtYXgzMTMwMCBmbWEgIDEgICAxRTE2ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzEwIGZtYSAgMSAgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxMiBmbWEgIDEgICAxRTE2ICAtMC41MDAxICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzEzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAxICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAxICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAxICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzIyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzMxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzOSBmbWEgIDEgICAxRTE2ICAtMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCitmbWF4MzEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNzkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitwcmVjaXNpb246ICAgMTUKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitmbWF4MzE0MDAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NQorZm1heDMxNDAxIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA0IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MDYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA3IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzMTQwOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzE0MDkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOQorZm1heDMxNDEwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzE0MTEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzMTQxMiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDMxNDEzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzE0MTQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzMTQxNSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDMxNDE2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzE0MTcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzMTQxOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDMxNDE5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHByZWNpc2lvbiAxNi4uCitwcmVjaXNpb246ICAgMTYKK2ZtYXgzMTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQyNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzMTQyOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzMTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzMTQzMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzE0MzEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDMxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzMTQzMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzE0MzQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDMxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzMTQzNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzE0MzcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDMxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzMTQzOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2ZtYXgzMTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDQ3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzMTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDMxNDUwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDMxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDMxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDMxNDUzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDMxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDMxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDMxNDU2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDMxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDMxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDMxNDU5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBFcyBvbiB0aGUgMAorZm1heDMxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2ZtYXgzMTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzMTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUyMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTUyNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUyNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1NDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTU1MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTUyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU1NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTU1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTU4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU2MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU2NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTU3NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTc3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1ODAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU4MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1ODMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTU4NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1ODYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU4NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTk3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNjAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNjA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE2MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNjE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNjIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzMTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZm1heDMxNjIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTYzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE2MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE2MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKKy0tIEJpZ0RlY2ltYWwgcHJvYmxlbSB0ZXN0Y2FzZXMgMjAwNi4wMS4yMworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCityb3VuZGluZzogIGRvd24KK3ByZWNpc2lvbjogNworZm1heDMxNjUxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CitmbWF4MzE2NTIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2ZtYXgzMTY1MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMEUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitmbWF4MzE2NTQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworZm1heDMxNjU1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2ZtYXgzMTY1NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitmbWF4MzE2NTcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KK3ByZWNpc2lvbjogNworZm1heDMxNjYxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CitmbWF4MzE2NjIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2ZtYXgzMTY2MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitmbWF4MzE2NjQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMEUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworZm1heDMxNjY1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2ZtYXgzMTY2NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitmbWF4MzE2NjcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICB1cAorcHJlY2lzaW9uOiA3CitmbWF4MzE2NzEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDYKK2ZtYXgzMTY3MiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNQorZm1heDMxNjczIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAxRSs2ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK2ZtYXgzMTY3NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAxRSs2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCitmbWF4MzE2NzUgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAxRSs2ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorZm1heDMxNjc2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4xRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEKK2ZtYXgzMTY3NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDJFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2ZtYXgzMTcwMSAgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitmbWF4MzE3MDIgIGZtYSAgMSAgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZm1heDMxNzAzICBmbWEgIDEgICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2ZtYXgzMTcwNCAgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitmbWF4MzE3MDUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2ZtYXgzMTcwNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorZm1heDMxNzA3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCitmbWF4MzE3MDggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBTYW1lIGFzIGFib3ZlLCB1c2luZyBkZWNpbWFsNjQgZGVmYXVsdCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2ZtYXgzNjAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDIKK2ZtYXgzNjAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUKK2ZtYXgzNjAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2ZtYXgzNjAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDIKK2ZtYXgzNjAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04CitmbWF4MzYwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitmbWF4MzYwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2ZtYXgzNjAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2ZtYXgzNjAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2ZtYXgzNjAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworZm1heDM2MDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxMyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxOCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2MDIxIGZtYSAgMSAgIDAgMSAtPiAxCitmbWF4MzYwMjIgZm1hICAxICAgMSAxIC0+IDIKK2ZtYXgzNjAyMyBmbWEgIDEgICAyIDEgLT4gMworZm1heDM2MDI0IGZtYSAgMSAgIDMgMSAtPiA0CitmbWF4MzYwMjUgZm1hICAxICAgNCAxIC0+IDUKK2ZtYXgzNjAyNiBmbWEgIDEgICA1IDEgLT4gNgorZm1heDM2MDI3IGZtYSAgMSAgIDYgMSAtPiA3CitmbWF4MzYwMjggZm1hICAxICAgNyAxIC0+IDgKK2ZtYXgzNjAyOSBmbWEgIDEgICA4IDEgLT4gOQorZm1heDM2MDMwIGZtYSAgMSAgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2ZtYXgzNjAzMSBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2ZtYXgzNjAzMiBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2ZtYXgzNjAzMyBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2ZtYXgzNjAzNCBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZm1heDM2MDM1IGZtYSAgMSAgICc3MCcgICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzNiBmbWEgIDEgICAnNzAwJyAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMzcgZm1hICAxICAgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDM4IGZtYSAgMSAgICc3MDAwMCcgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2ZtYXgzNjA0MCBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0MSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwNDIgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0NCBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjA0NSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCitmbWF4MzYwNDYgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2ZtYXgzNjA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2ZtYXgzNjA0OCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitmbWF4MzYwNDkgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2ZtYXgzNjA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2ZtYXgzNjA1MSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2ZtYXgzNjA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitmbWF4MzYwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2ZtYXgzNjA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZm1heDM2MDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZm1heDM2MDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGZyb20gYWJvdmUKK2ZtYXgzNjA2MSBmbWEgIDEgICAxICcwLjEnIC0+ICcxLjEnCitmbWF4MzYwNjIgZm1hICAxICAgMSAnMC4wMScgLT4gJzEuMDEnCitmbWF4MzYwNjMgZm1hICAxICAgMSAnMC4wMDEnIC0+ICcxLjAwMScKK2ZtYXgzNjA2NCBmbWEgIDEgICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitmbWF4MzYwNjUgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitmbWF4MzYwNjYgZm1hICAxICAgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2ZtYXgzNjA2NyBmbWEgIDEgICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitmbWF4MzYwNjggZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2ZtYXgzNjA3MCBmbWEgIDEgICAxICAwICAgIC0+IDEKK2ZtYXgzNjA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDEKK2ZtYXgzNjA3MiBmbWEgIDEgICAxICAuMCAgIC0+IDEuMAorZm1heDM2MDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wCitmbWF4MzYwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwCitmbWF4MzYwNzUgZm1hICAxICAgIDAgIDEgICAtPiAxCitmbWF4MzYwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxCitmbWF4MzYwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjAKK2ZtYXgzNjA3OCBmbWEgIDEgICAwLjAgMSAgIC0+IDEuMAorZm1heDM2MDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMAorCistLSBzb21lIGNhcnJpZXMKK2ZtYXgzNjA4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OTk5OTk5OTkKK2ZtYXgzNjA4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBSb3VuZGVkCitmbWF4MzYwODIgZm1hICAxICAgIDk5OTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMDAwCitmbWF4MzYwODMgZm1hICAxICAgICAgOTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMAorZm1heDM2MDg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwCitmbWF4MzYwODUgZm1hICAxICAgICAgICAgIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitmbWF4MzYwODYgZm1hICAxICAgICAgICAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZm1heDM2MDg3IGZtYSAgMSAgICAgICAgICAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCitmbWF4MzYwODggZm1hICAxICAgICAgICAgICAgICAgIDk5OSAxICAtPiAxMDAwCitmbWF4MzYwODkgZm1hICAxICAgICAgICAgICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitmbWF4MzYwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzYwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzNjA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitmbWF4MzYwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitmbWF4MzYwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitmbWF4MzYwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitmbWF4MzYwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitmbWF4MzYwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2ZtYXgzNjA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZm1heDM2MDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2ZtYXgzNjEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZm1heDM2MTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2ZtYXgzNjEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2ZtYXgzNjEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2ZtYXgzNjEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitmbWF4MzYxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2ZtYXgzNjEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2ZtYXgzNjEwNyBmbWEgIDEgICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitmbWF4MzYxMDggZm1hICAxICAgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZm1heDM2MTA5IGZtYSAgMSAgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZm1heDM2MTEwIGZtYSAgMSAgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZAorZm1heDM2MTExIGZtYSAgMSAgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZm1heDM2MTEzIGZtYSAgMSAgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzYxMTQgZm1hICAxICAgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZm1heDM2MTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZm1heDM2MTE3IGZtYSAgMSAgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitmbWF4MzYxMTkgZm1hICAxICAgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2ZtYXgzNjEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZm1heDM2MTIxIGZtYSAgMSAgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitmbWF4MzYxMjIgZm1hICAxICAgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZm1heDM2MTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2ZtYXgzNjEyNCBmbWEgIDEgICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2ZtYXgzNjEyNSBmbWEgIDEgICAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitmbWF4MzYxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitmbWF4MzYxMjcgZm1hICAxICAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2ZtYXgzNjEyOCBmbWEgIDEgICAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZm1heDM2MTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZm1heDM2MTMwIGZtYSAgMSAgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2ZtYXgzNjEzMSBmbWEgIDEgICAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZm1heDM2MTMyIGZtYSAgMSAgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZm1heDM2MTMzIGZtYSAgMSAgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZm1heDM2MTM0IGZtYSAgMSAgIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAorZm1heDM2MTM1IGZtYSAgMSAgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZm1heDM2MTM2IGZtYSAgMSAgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitmbWF4MzYxMzcgZm1hICAxICAgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZm1heDM2MTM4IGZtYSAgMSAgIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzNjEzOSBmbWEgIDEgICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzYxNDAgZm1hICAxICAgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZm1heDM2MTQxIGZtYSAgMSAgIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2ZtYXgzNjE0MiBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitmbWF4MzYxNDMgZm1hICAxICAgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJworZm1heDM2MTQ0IGZtYSAgMSAgIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2ZtYXgzNjE0NiBmbWEgIDEgICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitmbWF4MzYxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2ZtYXgzNjE0OCBmbWEgIDEgICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDM2MTQ5IGZtYSAgMSAgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2ZtYXgzNjE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDM2MTUxIGZtYSAgMSAgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitmbWF4MzYxNTIgZm1hICAxICAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDM2MTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzNjE1NCBmbWEgIDEgICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzYxNTUgZm1hICAxICAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2ZtYXgzNjE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2JworZm1heDM2MTU3IGZtYSAgMSAgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitmbWF4MzYxNTggZm1hICAxICAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2ZtYXgzNjE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitmbWF4MzYxNjAgZm1hICAxICAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2ZtYXgzNjE2MSBmbWEgIDEgICAnMUUrMTMnICctMScgICAgLT4gJzk5OTk5OTk5OTk5OTknCitmbWF4MzYxNjIgZm1hICAxICAgJzFFKzEzJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMycgLT4gJzEwMDAwMDAwMDAwMDAxLjExJworZm1heDM2MTY0IGZtYSAgMSAgICctMScgICAgJzFFKzEzJyAtPiAnOTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE2NSBmbWEgIDEgICAnN0UrMTMnICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTk5JworZm1heDM2MTY2IGZtYSAgMSAgICc3RSsxMycgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzYxNjcgZm1hICAxICAgJzEuMTEnICAnN0UrMTMnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2OCBmbWEgIDEgICAnLTEnICAgICc3RSsxMycgLT4gJzY5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorZm1heDM2MTcwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTcyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTczIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzNjE3OCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE3OSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcKK2ZtYXgzNjE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycKK2ZtYXgzNjE4MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicKK2ZtYXgzNjE4MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScKK2ZtYXgzNjE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjIwMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2ZtYXgzNjIwMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjEyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2ZtYXgzNjIxNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MjIwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZm1heDM2MjIxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJworZm1heDM2MjM3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzOCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2ZtYXgzNjI0MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjQyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2ZtYXgzNjI1MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2ZtYXgzNjI1MSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjUzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjYyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2ZtYXgzNjI2NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMAorZm1heDM2MzAyIGZtYSAgMSAgICAgMCAgIDEgICAgICAtPiAgIDEKK2ZtYXgzNjMwMyBmbWEgIDEgICAgIDEgICAxICAgICAgLT4gICAyCitmbWF4MzYzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMworZm1heDM2MzA1IGZtYSAgMSAgICA5OCAgIDEgICAgICAtPiAgOTkKK2ZtYXgzNjMwNiBmbWEgIDEgICAgOTkgICAxICAgICAgLT4gMTAwCitmbWF4MzYzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQorZm1heDM2MzA4IGZtYSAgMSAgIDEwMSAgIDEgICAgICAtPiAxMDIKK2ZtYXgzNjMwOSBmbWEgIDEgICAgLTEgIC0xICAgICAgLT4gIC0yCitmbWF4MzYzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQorZm1heDM2MzExIGZtYSAgMSAgICAgMSAgLTEgICAgICAtPiAgIDAKK2ZtYXgzNjMxMiBmbWEgIDEgICAgMTIgIC0xICAgICAgLT4gIDExCitmbWF4MzYzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5NworZm1heDM2MzE0IGZtYSAgMSAgICA5OSAgLTEgICAgICAtPiAgOTgKK2ZtYXgzNjMxNSBmbWEgIDEgICAxMDAgIC0xICAgICAgLT4gIDk5CitmbWF4MzYzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMAorCitmbWF4MzYzMjEgZm1hICAxICAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzNjMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZm1heDM2MzIzIGZtYSAgMSAgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitmbWF4MzYzMjQgZm1hICAxICAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2ZtYXgzNjMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZm1heDM2MzI2IGZtYSAgMSAgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitmbWF4MzYzMjcgZm1hICAxICAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2ZtYXgzNjMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZm1heDM2MzI5IGZtYSAgMSAgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitmbWF4MzYzMzAgZm1hICAxICAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2ZtYXgzNjMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZm1heDM2MzMyIGZtYSAgMSAgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitmbWF4MzYzMzMgZm1hICAxICAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2ZtYXgzNjMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZm1heDM2MzM1IGZtYSAgMSAgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitmbWF4MzYzMzYgZm1hICAxICAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGZtYSAgMSAgaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK2ZtYXgzNjM0MCBmbWEgIDEgICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCitmbWF4MzYzNDEgZm1hICAxICAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKK2ZtYXgzNjM0MiBmbWEgIDEgICAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKK2ZtYXgzNjM0MyBmbWEgIDEgICAxRSsxNyAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KK2ZtYXgzNjM0NCBmbWEgIDEgICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitmbWF4MzYzNDUgZm1hICAxICAgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDEKK2ZtYXgzNjM0NiBmbWEgIDEgICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MzQ3IGZtYSAgMSAgIDFFKzE3ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYzNDggZm1hICAxICAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNworZm1heDM2MzQ5IGZtYSAgMSAgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3CitmbWF4MzYzNTAgZm1hICAxICAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjM1MSBmbWEgIDEgICAxRSsxNyAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworZm1heDM2MzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1CitmbWF4MzYzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZAorZm1heDM2MzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjM2NCAgZm1hICAxICAgMTIuMzQgICAgMGUtMzk4ICAtPiAxMi4zNDAwMDAwMDAwMDAwMCAgUm91bmRlZAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2ZtYXgzNjQwMCBmbWEgIDEgICAgIDEgICA3N2UtMTQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworZm1heDM2NDAxIGZtYSAgMSAgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZm1heDM2NDAyIGZtYSAgMSAgICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwMyBmbWEgIDEgICAgIDEgICA3N2UtMTcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MDQgZm1hICAxICAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwNiBmbWEgIDEgICAgIDEgICA3N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQxMCBmbWEgIDEgICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQxMSBmbWEgIDEgICAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTIgZm1hICAxICAgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDEzIGZtYSAgMSAgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxNCBmbWEgIDEgICAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTUgZm1hICAxICAgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDE2IGZtYSAgMSAgICAxMCAgIDc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDIwIGZtYSAgMSAgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MjEgZm1hICAxICAgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MjIgZm1hICAxICAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDIzIGZtYSAgMSAgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQyNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MjUgZm1hICAxICAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDI2IGZtYSAgMSAgICA3N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDMwIGZtYSAgMSAgICA3N2UtMTQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZm1heDM2NDMxIGZtYSAgMSAgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzMgZm1hICAxICAgIDc3ZS0xNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDM0IGZtYSAgMSAgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzYgZm1hICAxICAgIDc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzY0NDAgZm1hICAxICAgICAxICAgLTc3ZS0xNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NDEgZm1hICAxICAgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NDQyIGZtYSAgMSAgICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NDUgZm1hICAxICAgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0NTAgZm1hICAxICAgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZm1heDM2NDUxIGZtYSAgMSAgICAxMCAgIC03N2UtMTUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NTIgZm1hICAxICAgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTMgZm1hICAxICAgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTQgZm1hICAxICAgIDEwICAgLTc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDU2IGZtYSAgMSAgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ2MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ2MSBmbWEgIDEgICAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NjIgZm1hICAxICAgIC03N2UtMTYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ2MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ2NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ2NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDY2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ3MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NzEgZm1hICAxICAgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ3MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDc1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NzYgZm1hICAxICAgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZm1heDM2NDgwIGZtYSAgMSAgICAtMSAgICA3N2UtMTQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NDgyIGZtYSAgMSAgICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZm1heDM2NDgzIGZtYSAgMSAgICAtMSAgICA3N2UtMTcgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0ODYgZm1hICAxICAgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZm1heDM2NDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtMTUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZm1heDM2NDkyIGZtYSAgMSAgIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xOCAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTUgZm1hICAxICAgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjUwMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MDEgZm1hICAxICAgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUwMiBmbWEgIDEgICAgIDc3ZS0xNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUwMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MDQgZm1hICAxICAgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTA1IGZtYSAgMSAgICAgNzdlLTE5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTA2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY1MTAgZm1hICAxICAgICA3N2UtMTQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUxMSBmbWEgIDEgICAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjUxMiBmbWEgIDEgICAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MTMgZm1hICAxICAgICA3N2UtMTcgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE1IGZtYSAgMSAgICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTE2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvbmcgb3BlcmFuZHMKK2ZtYXgzNjUyMSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMDAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZAorZm1heDM2NTIyIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4MDAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkCitmbWF4MzY1MjMgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4MDAgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwICAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZAorZm1heDM2NTI1IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkwICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkCitmbWF4MzY1MjYgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MCAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MSAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MjggZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MSAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTI5IGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODkwMSAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUzMCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwMSAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MzEgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTYgIDAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTMyIGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTYgIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdmVyaWZ5IGEgcXVlcnkKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM2NTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCistLSBhbmQgdXNpbmcgZGVjaW1hbDY0IGJvdW5kcy4uLgorcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzY1NjMgZm1hICAxICAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjU2NCBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorcm91bmRpbmc6IGhhbGZfZXZlbgorCitmbWF4MzY3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2ZtYXgzNjcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2ZtYXgzNjcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2ZtYXgzNjcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZm1heDM2NzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwCitmbWF4MzY3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMAorZm1heDM2NzEyIGZtYSAgMSAgIDBFKzMgIDAwLiAgICAtPiAwCitmbWF4MzY3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2ZtYXgzNjcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMgorZm1heDM2NzE1IGZtYSAgMSAgIDBFKzMgIDAwLkUrMyAtPiAwRSszCitmbWF4MzY3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2ZtYXgzNjcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMworZm1heDM2NzE4IGZtYSAgMSAgIDBFKzMgIC0wMC4wICAgLT4gMC4wCitmbWF4MzY3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwCitmbWF4MzY3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2ZtYXgzNjcyMCBmbWEgIDEgICAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZm1heDM2NzIxIGZtYSAgMSAgIDAwLjAgICAwRSszICAtPiAwLjAKK2ZtYXgzNjcyMiBmbWEgIDEgICAwMC4gICAgMEUrMyAgLT4gMAorZm1heDM2NzIzIGZtYSAgMSAgIDAwLkUrMSAwRSszICAtPiAwRSsxCitmbWF4MzY3MjQgZm1hICAxICAgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2ZtYXgzNjcyNSBmbWEgIDEgICAwMC5FKzMgMEUrMyAgLT4gMEUrMworZm1heDM2NzI2IGZtYSAgMSAgIDAwLkUrNCAwRSszICAtPiAwRSszCitmbWF4MzY3MjcgZm1hICAxICAgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNjcyOCBmbWEgIDEgICAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZm1heDM2NzI5IGZtYSAgMSAgIC0wMC4wICAwRSszICAtPiAwLjAKK2ZtYXgzNjczMCBmbWEgIDEgICAtMDAuICAgMEUrMyAgLT4gMAorCitmbWF4MzY3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwCitmbWF4MzY3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwCitmbWF4MzY3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwCitmbWF4MzY3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZm1heDM2NzM2IGZtYSAgMSAgICAxICAgIC0xICAgICAtPiAgMAorZm1heDM2NzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMgorZm1heDM2NzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMgorZm1heDM2NzM5IGZtYSAgMSAgIC0xICAgICAxICAgICAtPiAgMAorCitmbWF4MzY3NDEgZm1hICAxICAgIDAgICAgLTEgICAgIC0+IC0xCitmbWF4MzY3NDIgZm1hICAxICAgLTAgICAgLTEgICAgIC0+IC0xCitmbWF4MzY3NDMgZm1hICAxICAgIDAgICAgIDEgICAgIC0+ICAxCitmbWF4MzY3NDQgZm1hICAxICAgLTAgICAgIDEgICAgIC0+ICAxCitmbWF4MzY3NDUgZm1hICAxICAgLTEgICAgIDAgICAgIC0+IC0xCitmbWF4MzY3NDYgZm1hICAxICAgLTEgICAgLTAgICAgIC0+IC0xCitmbWF4MzY3NDcgZm1hICAxICAgIDEgICAgIDAgICAgIC0+ICAxCitmbWF4MzY3NDggZm1hICAxICAgIDEgICAgLTAgICAgIC0+ICAxCisKK2ZtYXgzNjc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMAorZm1heDM2NzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wCitmbWF4MzY3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNjc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMAorZm1heDM2NzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wCitmbWF4MzY3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2ZtYXgzNjc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMAorZm1heDM2NzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2ZtYXgzNjc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzYyIGZtYSAgMSAgIC0wICAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMAorZm1heDM2NzY1IGZtYSAgMSAgIC0xICAgICAwLjAgICAtPiAtMS4wCitmbWF4MzY3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMAorZm1heDM2NzY4IGZtYSAgMSAgICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2ZtYXgzNjc3MSBmbWEgIDEgICAgMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzcyIGZtYSAgMSAgIC0wLjAgIC0xLjAgICAtPiAtMS4wCitmbWF4MzY3NzMgZm1hICAxICAgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc3NCBmbWEgIDEgICAtMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM2Nzc1IGZtYSAgMSAgIC0xLjAgICAwLjAgICAtPiAtMS4wCitmbWF4MzY3NzYgZm1hICAxICAgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2ZtYXgzNjc3NyBmbWEgIDEgICAgMS4wICAgMC4wICAgLT4gIDEuMAorZm1heDM2Nzc4IGZtYSAgMSAgICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitmbWF4MzY3ODAgZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODMgZm1hICAxICAgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODYgZm1hICAxICAgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODkgZm1hICAxICAgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTIgZm1hICAxICAgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDM2ODAwIGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODAxIGZtYSAgMSAgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwMiBmbWEgIDEgICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDMgZm1hICAxICAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA0IGZtYSAgMSAgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwNSBmbWEgIDEgICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDYgZm1hICAxICAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA3IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwOCBmbWEgIDEgICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDkgZm1hICAxICAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4MTAgZm1hICAxICAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODExIGZtYSAgMSAgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxMiBmbWEgIDEgICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTMgZm1hICAxICAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODE0IGZtYSAgMSAgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxNSBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2ZtYXgzNjgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTgorZm1heDM2ODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFOCitmbWF4MzY4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTgorZm1heDM2ODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFOCitmbWF4MzY4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTgorZm1heDM2ODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFOCitmbWF4MzY4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2ZtYXgzNjg0MSBmbWEgIDEgICAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NCBmbWEgIDEgICAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0NyBmbWEgIDEgICAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MCBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1MyBmbWEgIDEgICAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NiBmbWEgIDEgICAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg1OSBmbWEgIDEgICAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZm1heDM2ODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZm1heDM2ODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZm1heDM2ODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZm1heDM2ODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZm1heDM2ODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZm1heDM2ODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZm1heDM2ODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZm1heDM2ODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZm1heDM2ODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2ZtYXgzNjg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZm1heDM2ODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZm1heDM2ODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwKKy0tIFtub3RlIHRoaXMgY2FuJ3QgaGFwcGVuIGlmIHRoZSBvcGVyYW5kcyBhcmUgYWxzbyBib3VuZGVkLCBhcyB3ZQorLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQorCitmbWF4MzY1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4MworZm1heDM2NTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwKK2ZtYXgzNjU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMKK2ZtYXgzNjU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbAorCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2ZtYXgzNjU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNjU3NiBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNjU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM2NTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzY1Nzkgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNjU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZm1heDM2OTcyIGFwcGx5ICAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZm1heDM2OTczIGZtYSAgMSAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk3NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzUgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzYgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzcgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzggZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDdFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzkgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODAgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODEgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDRFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4MiBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTgzIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDFFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2OTg1IGFwcGx5ICAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2ZtYXgzNjk4NiBmbWEgIDEgICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg3IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODggZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg5IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MCBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTEgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTkyIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTQgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTUgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTYgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzYxMTAwIGZtYSAgMSAgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDEgZm1hICAxICAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA0IGZtYSAgMSAgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDUgZm1hICAxICAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA3IGZtYSAgMSAgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDggZm1hICAxICAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitmbWF4MzYxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTExIGZtYSAgMSAgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExMyBmbWEgIDEgICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE1IGZtYSAgMSAgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExNiBmbWEgIDEgICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTE4IGZtYSAgMSAgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExOSBmbWEgIDEgICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2ZtYXgzNjEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTAgZm1hICAxICAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMTkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzcgZm1hICAxICAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2MTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM0MSBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzYxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2ZtYXgzNjE0MjAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDIxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0MjYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDM2MTQyOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzNjE0MjkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzYxNDMwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzNjE0MzEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDM2MTQzMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzYxNDMzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzNjE0MzQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDM2MTQzNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzYxNDM2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzNjE0MzcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDM2MTQzOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzYxNDM5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgcmV2ZXJzZWQgMAorZm1heDM2MTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDM2MTQ0OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZm1heDM2MTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDM2MTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzNjE0NTEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzYxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDM2MTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzNjE0NTQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzYxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDM2MTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzNjE0NTcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzYxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDM2MTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2ZtYXgzNjE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZm1heDM2MTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzNjE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzYxNDc4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDM2MTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTU1MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTU1NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTU1NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU1OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1NjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTc1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTU3OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1ODAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1ODMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1OTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE2MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTYxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTYxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE2MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzNjE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzNjE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTYzNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDM2MTYzOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitmbWF4MzYxNzAxIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZm1heDM2MTcwMiBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2ZtYXgzNjE3MDMgZm1hICAxICAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitmbWF4MzYxNzA0IGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZm1heDM2MTcwNSBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCitmbWF4MzYxNzA2IHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTAKK2ZtYXgzNjE3MDcgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorZm1heDM2MTcwOCBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZm1heDM2MjAwMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CitmbWF4MzYyMDAyIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDQgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA1IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDcgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA4IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTAgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDExIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxMiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxNSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxOCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDIwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAyMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZm1heDM2MjAzMCBmbWEgIDEgICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorZm1heDM2MjAzMSBmbWEgIDEgICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCitmbWF4MzYyMDMyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitmbWF4MzYyMDMzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworZm1heDM2MjAzNCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CitmbWF4MzYyMDM1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitmbWF4MzYyMDM2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorZm1heDM2MjAzNyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CitmbWF4MzYyMDM4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitmbWF4MzYyMDM5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDEgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0NiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0OSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYyMDUwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTIgZm1hICAxICAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTUgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDU2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2MiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2NSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitmbWF4MzYyMDcwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCitmbWF4MzYyMDcxIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzMgZm1hICAxICAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc0IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzYgZm1hICAxICAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc3IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzkgZm1hICAxICAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4MSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODIgZm1hICAxICAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgzIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODUgZm1hICAxICAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NyBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODggZm1hICAxICAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUgeDMKK3ByZWNpc2lvbjogNQorZm1heDM2MzAwMCBmbWEgIDEgMSAgc05hTjEyMzQ1Njc4OTAgICAgIC0+ICBOYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjMwMDEgZm1hICAgIDEgLXNOYU4xMjM0NTEyMzQ1IDEgICAtPiAtTmFOMTIzNDUgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzYzMDAyIGZtYSAgICAgICBzTmFOMTIzNDU1NDMyMSAxIDEgLT4gIE5hTjU0MzIxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitmbWF4Mzk5OTAgZm1hICAxICAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzk5OTEgZm1hICAxICAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QKaW5kZXggOWVmNWE5MS4uYTJmN2JlNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ludmVydC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdApAQCAtMSwxNzYgKzEsMTc2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBpbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotDQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSksIGFuZCBleGFtcGxlcyBmcm9tIGRlY0FyaXRoDQotaW52eDAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTENCi1pbnZ4MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMA0KLWludngwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTAxDQotaW52eDAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAgICAgICAgIDANCi1pbnZ4MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMQ0KLWludngwMDYgaW52ZXJ0ICAgICAxMDEwMTAxMDEgLT4gJzEwMTAxMDEwJw0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQotaW52eDAwNyBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExDQotaW52eDAwOSBpbnZlcnQgMTAwMDAwMDAwIC0+ICAgIDExMTExMTExDQotaW52eDAxMSBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExDQotaW52eDAxMyBpbnZlcnQgMDEwMDAwMDAwIC0+ICAgMTAxMTExMTExDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5DQotaW52eDAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMA0KLWludngwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDANCi1pbnZ4MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMDAwMDAwMDANCi1pbnZ4MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTAwMDAwMDANCi1pbnZ4MDI2IGludmVydCAgICAxMTExMTEgICAgIC0+ICAxMTEwMDAwMDANCi1pbnZ4MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMDAwMDANCi1pbnZ4MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTAwMDANCi1pbnZ4MDI5IGludmVydCAgICAgICAxMTEgICAgIC0+ICAxMTExMTEwMDANCi1pbnZ4MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMDANCi1pbnZ4MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTANCi1pbnZ4MDMzIGludmVydCAxMTExMTExMTExMTEgIC0+ICAwDQotaW52eDAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMA0KLWludngwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gIDANCi1pbnZ4MDM2IGludmVydCAxMTExMTExMTEgICAgIC0+ICAwDQotDQotaW52eDA4MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDEwMDAwMDAwMA0KLWludngwODEgaW52ZXJ0IDEwMTExMTExMSAgIC0+ICAgMTAwMDAwMDANCi1pbnZ4MDgyIGludmVydCAxMTAxMTExMTEgICAtPiAgICAxMDAwMDAwDQotaW52eDA4MyBpbnZlcnQgMTExMDExMTExICAgLT4gICAgIDEwMDAwMA0KLWludngwODQgaW52ZXJ0IDExMTEwMTExMSAgIC0+ICAgICAgMTAwMDANCi1pbnZ4MDg1IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwDQotaW52eDA4NiBpbnZlcnQgMTExMTExMDExICAgLT4gICAgICAgIDEwMA0KLWludngwODcgaW52ZXJ0IDExMTExMTEwMSAgIC0+ICAgICAgICAgMTANCi1pbnZ4MDg4IGludmVydCAxMTExMTExMTAgICAtPiAgICAgICAgICAxDQotaW52eDA4OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDEwMDAwMDEwMA0KLWludngwOTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+ICAgMTAwMDAwMTANCi1pbnZ4MDkxIGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxDQotaW52eDA5MiBpbnZlcnQgMTExMDExMTAxICAgLT4gICAgIDEwMDAxMA0KLWludngwOTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+ICAgICAgMTAxMDANCi1pbnZ4MDk0IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwDQotaW52eDA5NSBpbnZlcnQgMTExMTAxMDExICAgLT4gICAgICAxMDEwMA0KLWludngwOTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+ICAgICAxMDAwMTANCi1pbnZ4MDk3IGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxDQotaW52eDA5OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gICAxMDAwMDAxMA0KLWludngwOTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+ICAxMDAwMDAxMDANCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1pbnZ4MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYSBmZXcgcmFuZG9tcw0KLWludngyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1pbnZ4MjUwIGludmVydCAgMjAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI1MSBpbnZlcnQgIDMwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNTIgaW52ZXJ0ICA0MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjUzIGludmVydCAgNTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI1NCBpbnZlcnQgIDYwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNTUgaW52ZXJ0ICA3MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjU2IGludmVydCAgODAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI1NyBpbnZlcnQgIDkwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1pbnZ4MjcwIGludmVydCAgMDIxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI3MSBpbnZlcnQgIDAzMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNzIgaW52ZXJ0ICAwNDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjczIGludmVydCAgMDUwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI3NCBpbnZlcnQgIDE2MDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyNzUgaW52ZXJ0ICAxNzAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjc2IGludmVydCAgMTgwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI3NyBpbnZlcnQgIDE5MDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQotaW52eDI4MCBpbnZlcnQgIDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODEgaW52ZXJ0ICAwMDAwMDAwMDMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjgyIGludmVydCAgMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI4MyBpbnZlcnQgIDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODQgaW52ZXJ0ICAxMDEwMDAwMDYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjg1IGludmVydCAgMTAwMTAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI4NiBpbnZlcnQgIDEwMDAxMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyODcgaW52ZXJ0ICAxMDAwMDEwMDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLWludngyODggaW52ZXJ0ICAwMDAwMjAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjg5IGludmVydCAgMDAwMDMwMDAxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI5MCBpbnZlcnQgIDAwMDA0MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyOTEgaW52ZXJ0ICAwMDAwNTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MjkyIGludmVydCAgMTAxMDYwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI5MyBpbnZlcnQgIDEwMDE3MDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngyOTQgaW52ZXJ0ICAxMDAwODAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4Mjk1IGludmVydCAgMTAwMDkxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1pbnZ4Mjk2IGludmVydCAtMTAwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDI5OSBpbnZlcnQgIDEwMDAwMTAwMCAgLT4gIDExMTEwMTExDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1pbnZ4MzQxIGludmVydCAgOS45OTk5OTk5OUUrOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM0MiBpbnZlcnQgIDFFLTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS05OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzQ0IGludmVydCAgMUUtMTAwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM0NSBpbnZlcnQgIC0xRS0xMDA3ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzQ3IGludmVydCAgLTFFLTk5OSAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLWludngzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludngzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi1pbnZ4Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotaW52eDc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1pbnZ4ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWludng4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWludng4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gaW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKSwgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2ludngwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExCitpbnZ4MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMAoraW52eDAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMDEKK2ludngwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gICAgICAgICAwCitpbnZ4MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMQoraW52eDAwNiBpbnZlcnQgICAgIDEwMTAxMDEwMSAtPiAnMTAxMDEwMTAnCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQoraW52eDAwNyBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExCitpbnZ4MDA5IGludmVydCAxMDAwMDAwMDAgLT4gICAgMTExMTExMTEKK2ludngwMTEgaW52ZXJ0IDAwMDAwMDAwMCAtPiAgIDExMTExMTExMQoraW52eDAxMyBpbnZlcnQgMDEwMDAwMDAwIC0+ICAgMTAxMTExMTExCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5CitpbnZ4MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAwCitpbnZ4MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+ICAwCitpbnZ4MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMDAwMDAwMDAKK2ludngwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMDAwMDAwMAoraW52eDAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMDAwMDAwCitpbnZ4MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMDAwMDAKK2ludngwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMDAwMAoraW52eDAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMDAwCitpbnZ4MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMDAKK2ludngwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMAoraW52eDAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMAoraW52eDAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMAoraW52eDAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMAoraW52eDAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMAorCitpbnZ4MDgwIGludmVydCAwMTExMTExMTEgICAtPiAgMTAwMDAwMDAwCitpbnZ4MDgxIGludmVydCAxMDExMTExMTEgICAtPiAgIDEwMDAwMDAwCitpbnZ4MDgyIGludmVydCAxMTAxMTExMTEgICAtPiAgICAxMDAwMDAwCitpbnZ4MDgzIGludmVydCAxMTEwMTExMTEgICAtPiAgICAgMTAwMDAwCitpbnZ4MDg0IGludmVydCAxMTExMDExMTEgICAtPiAgICAgIDEwMDAwCitpbnZ4MDg1IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCitpbnZ4MDg2IGludmVydCAxMTExMTEwMTEgICAtPiAgICAgICAgMTAwCitpbnZ4MDg3IGludmVydCAxMTExMTExMDEgICAtPiAgICAgICAgIDEwCitpbnZ4MDg4IGludmVydCAxMTExMTExMTAgICAtPiAgICAgICAgICAxCitpbnZ4MDg5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCitpbnZ4MDkwIGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCitpbnZ4MDkxIGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCitpbnZ4MDkyIGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCitpbnZ4MDkzIGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCitpbnZ4MDk0IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCitpbnZ4MDk1IGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCitpbnZ4MDk2IGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCitpbnZ4MDk3IGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCitpbnZ4MDk4IGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCitpbnZ4MDk5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworaW52eDIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworaW52eDI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2ludngyNTAgaW52ZXJ0ICAyMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTEgaW52ZXJ0ICAzMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTIgaW52ZXJ0ICA0MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTMgaW52ZXJ0ICA1MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTQgaW52ZXJ0ICA2MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTUgaW52ZXJ0ICA3MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTYgaW52ZXJ0ICA4MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNTcgaW52ZXJ0ICA5MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2ludngyNzAgaW52ZXJ0ICAwMjEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzEgaW52ZXJ0ICAwMzAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzIgaW52ZXJ0ICAwNDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzMgaW52ZXJ0ICAwNTAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzQgaW52ZXJ0ICAxNjAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzUgaW52ZXJ0ICAxNzAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzYgaW52ZXJ0ICAxODAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNzcgaW52ZXJ0ICAxOTAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitpbnZ4MjgwIGludmVydCAgMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgxIGludmVydCAgMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgyIGludmVydCAgMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjgzIGludmVydCAgMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg0IGludmVydCAgMTAxMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg1IGludmVydCAgMTAwMTAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg2IGludmVydCAgMTAwMDEwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjg3IGludmVydCAgMTAwMDAxMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQoraW52eDI4OCBpbnZlcnQgIDAwMDAyMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4OSBpbnZlcnQgIDAwMDAzMDAwMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MCBpbnZlcnQgIDAwMDA0MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MSBpbnZlcnQgIDAwMDA1MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MiBpbnZlcnQgIDEwMTA2MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5MyBpbnZlcnQgIDEwMDE3MDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5NCBpbnZlcnQgIDEwMDA4MDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI5NSBpbnZlcnQgIDEwMDA5MTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2ludngyOTYgaW52ZXJ0IC0xMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTkgaW52ZXJ0ICAxMDAwMDEwMDAgIC0+ICAxMTExMDExMQorCistLSBObWF4LCBObWluLCBOdGlueQoraW52eDM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0MiBpbnZlcnQgIDFFLTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NCBpbnZlcnQgIDFFLTEwMDcgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NSBpbnZlcnQgIC0xRS0xMDA3ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS05OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0NyBpbnZlcnQgIC0xRS05OTkgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2ludngzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgoraW52eDc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworaW52eDg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sbi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QKaW5kZXggZWZjYjJhNi4uZjYwMmFmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QKQEAgLTEsNjExICsxLDYxMSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gbG4uZGVjVGVzdCAtLSBkZWNpbWFsIG5hdHVyYWwgbG9nYXJpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbikNCi1wcmVjaXNpb246IDkNCi1sbnhzMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbnhzMDAyIGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDANCi1sbnhzMDAzIGxuICAyLjcxODI4MTgzICAgICAgICAtPiAgIDEuMDAwMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbnhzMDA0IGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbnhzMDA1IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0NCi0tLSBiYXNpY3MNCi1wcmVjaXNpb246ICAgMTYNCi1sbngwMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbngwMDAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDAzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMjY0NDMwMjIyOTIwODY5ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OTQzOTM4NzMyNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDA2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDANCi1sbngwMDA3IGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDANCi1sbngwMDA4IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MTA4MTA4MTY0NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDA5IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkzMTQ3MTgwNTU5OTQ1MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDEwIGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDExIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDEyIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDEzIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDE0IGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1MjU3MTYzNDc4ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDE1IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMjEwMjQwMzY2OTc1ODQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDE2IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTMuODE1NTEwNTU3OTY0MjcgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDE3IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMDE4IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSBub3RhYmxlIGNhc2VzDQotLS0gbmVnYXRpdmVzDQotbG54MDAyMSBsbiAtMUUtOSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyMiBsbiAtMC4wMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyMyBsbiAtMC4xICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyNCBsbiAtMC43ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyNSBsbiAtMSAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyNiBsbiAtMS41ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyNyBsbiAtMiAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyOSBsbiAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAyOCBsbiAtOTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAzMCBsbiAtMi43MTgyODE4Mjg0NTkwNDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAzMSBsbiAtMi43MTgyODE4Mjg0NTkwNDYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDAzMiBsbiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG54MDAzMyBsbiAtMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG54MDAzNCBsbiAtMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotLS0gb3RoZXIgemVyb3MNCi1sbngwMDQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbngwMDQyIGxuICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sbngwMDQzIGxuICAwRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi0tLSBpbmZpbml0aWVzDQotbG54MDA0NSBsbiAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG54MDA0NiBsbiArSW5maW5pdHkgICAgICAgICAgLT4gSW5maW5pdHkNCi0tLSBvbmVzDQotbG54MDA1MCBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQotbG54MDA1MSBsbiAgMS4wICAgICAgICAgICAgICAgLT4gICAwDQotbG54MDA1MiBsbiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotbG54MDA1MyBsbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotDQotLS0gbG93ZXIgcHJlY2lzaW9uIGJhc2ljcw0KLVByZWNpc2lvbjogNw0KLWxueDAxMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAxMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zMDI1ODUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxueDAxMDcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MDU0NjUxICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcyICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi4zNTEzNzUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxMy44MTU1MSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMC43MjMyNyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLVByZWNpc2lvbjogMg0KLWxueDAxMjEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAxMjIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxueDAxMjcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMjkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMzcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLVByZWNpc2lvbjogMQ0KLWxueDAxNDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxueDAxNDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNyAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxueDAxNDcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC43ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxNTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIGdyb3VwIGxvdy1wcmVjaXNpb24gbG4oMSlzOg0KLXByZWNpc2lvbjogMQ0KLWxueDAxNjEgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogMg0KLWxueDAxNjIgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogMw0KLWxueDAxNjMgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogNA0KLWxueDAxNjQgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogNQ0KLWxueDAxNjUgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogNg0KLWxueDAxNjYgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogNw0KLWxueDAxNjcgbG4gIDEgLT4gMA0KLXByZWNpc2lvbjogOA0KLWxueDAxNjggbG4gIDEgLT4gMA0KLQ0KLS0tIGVkZ2UtdGVzdCBsbigyKSBhbmQgbG4oMTApIGluIGNhc2Ugb2YgbG9va2FzaWRlcw0KLXByZWNpc2lvbjogNDUNCi1sbngyMDEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTM0ICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMDIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDkgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQ0DQotbG54MjAzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEzICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjA0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTUgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0Mw0KLWxueDIwNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIwNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDEgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDINCi1sbngyMDcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMDggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQxDQotbG54MjA5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjEwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0MA0KLWxueDIxMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIxMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDEgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzkNCi1sbngyMTMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMTQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM4DQotbG54MjE1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjE2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNw0KLWxueDIxNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgxICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIxOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDggICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzYNCi1sbngyMTkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMjAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjEgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM1DQotbG54MjIxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjIyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNA0KLWxueDIyMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY2ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIyNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzMNCi1sbngyMjUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMjYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzYgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMyDQotbG54MjI3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE4ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MjI4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMQ0KLWxueDIyOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgyICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDIzMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzANCi1sbngyMzEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngyMzIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0NjggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBleHRyZW1lIGlucHV0IHJhbmdlIHZhbHVlcw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLVByZWNpc2lvbjogMTYNCi0NCi1sbngwOTAxIGxuIDFlLTQwMCAgICAtPiAtOTIxLjAzNDAzNzE5NzYxODMgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MDIgbG4gMWUrNDAwICAgIC0+ICA5MjEuMDM0MDM3MTk3NjE4MyAgSW5leGFjdCBSb3VuZGVkDQotbG54MDkwMyBsbiAxZS05OTk5OTkgLT4gLTIzMDI1ODIuNzkwNDA4OTUzICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwOTA0IGxuIDFlKzk5OTk5OSAtPiAgMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MDUgbG4gMWUtMTAwMDAxMyAgICAgICAgICAgICAgICAtPiAtMjMwMjYxNS4wMjY2MDAyNTUgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MDYgbG4gMmUtMTAwMDAxMyAgICAgICAgICAgICAgICAtPiAtMjMwMjYxNC4zMzM0NTMwNzQgIEluZXhhY3QgUm91bmRlZA0KLQ0KLWxueDA5MTAgbG4gOS45OTk5OTllKzk5OTk5OSAgICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTM5NDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTEgbG4gOS45OTk5OTk5ZSs5OTk5OTkgICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwMzYgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTIgbG4gOS45OTk5OTk5OWUrOTk5OTk5ICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDUgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTMgbG4gOS45OTk5OTk5OTllKzk5OTk5OSAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTQgbG4gOS45OTk5OTk5OTk5OTllKzk5OTk5OSAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTUgbG4gOS45OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLWxueDA5MTYgbG4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHJhbmRvbXMNCi0tLSBQPTUwLCB3aXRoaW4gMC05OTkNCi1QcmVjaXNpb246IDUwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotbG54MTUwMSBsbiAwLjAwMDk4ODAwOTA2NTc0NDg2Mzg4NjA0NjA4NDc3ODY5ODEyNTE4ODU3MDIzNzY4OTUxIC0+IC02LjkxOTgxODY4NDQwMzM3ODc5OTU5NDUxNDc4MzY5NTU1ODYwMDk1NDg1MTMwNDM2ODkgSW5leGFjdCBSb3VuZGVkDQotbG54MTUwMiBsbiAxNTguMTU4NjY2MjQ2NjQ2MjMwNzAxODQ1OTUwNDUzMDQxNDU5NDk5MDA3MTQ5ODc4MjcgIC0+IDUuMDYzNTk4NzQ1ODg5NTY0NzQ1NDkwNzgwNjUwNzUwMzgyNTYwMjc1ODM5MjI4NzY4NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTAzIGxuIDAuMDA1NjU2NjE0MTIwNTk1NzE5MjUwNDAyODU4MTQwMjE3OTk3NzUyNDkyODgzMDkzMjEgLT4gLTUuMTc0OTI5Nzc3Njc2MDYzMjEwMjA0NzU0MDMwMDQ5MTU1MDkzMTY1MTMxODk3NTIzNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTA0IGxuIDAuMDAwMDAwMDY5MTQyMzI1MzI2MjA0ODk2MDIwMDg0MDIwOTE2NjY1NDc5MDMxODA2MDcgLT4gLTE2LjQ4NzA5ODc3MDg3NzgyNTMwODEzODk3NjgxODY4ODc3MTYzODE3MjMzMzAzNDM0NyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTA1IGxuIDAuMDAwMjUzODAzNzQ2MjEyOTc2NTc1MDQ2NjE1NDA3NDkzNTUyNTEyMzE3NzAwNzA3MjMgLT4gLTguMjc4OTQ5MjQyMzAwNTAwMzIwNTI0MjE2Mjc0MTU2OTAzMzEyNDI2MDMyMTk1NDU4OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTA2IGxuIDgzLjAzMzY1NDA2Mzg3NzQyNjI2MTEwODU5MjU5OTE4MjQxODk1MzQ0MjY3NzU1NDgwNiAgLT4gNC40MTkyNDU5OTYyNjQ3MTM3OTc2OTQ5MjQ5ODEwODE1Njk4NDY1MDMxNjA5ODQzNjY5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDcgbG4gMC4wMDAwMDAwMDQxNjg2MzIyODA5MjQ4MTY1MTYyNzczNDY2ODQ0MDY2MzY3ODExODcyOSAtPiAtMTkuMjk1Njc3ODQ1MTIyMTQxNzcyNzkxMjk0NTk5NzE0OTUwMTc1Mjg0OTE1NjY2NDMwIEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDggbG4gMC4wMDAwMDE0MDg0Nzg3MzE4NzgyMDU3MDE4MTIxNDI3MTk2MDUxMTA4MDUyMzQ1NzY2OSAtPiAtMTMuNDczMDAwMzQ5NTgxOTY3MTg5NjY4MzA1MzE0Mzg0OTUyMjUxNTU2ODA5NDgwMzM5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MDkgbG4gNjYuMTc2MTA2NTU1MTgxNTI3MTAxNjMwMzUxMTI3NTgzOTQ0Njg5NzUyMDY5MTMyNTIyICAtPiA0LjE5MjMxOTQ2OTYyMzI1MDU4ODM2NjYxNzExMTY5NjYxMzc2OTQwMTM0MzE1MDQyNTIgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxMCBsbiAwLjAwMDAwMDAwMDAwMDA5ODk5MDQzNDg3NDAzNTkwOTAwMTExNjAyMDI0NTYyMjk3OTA4IC0+IC0yOS45NDM3NTMxNjY4Nzc4NDA5ODU4MjE1MDgxMTI5MTc5OTE1MDY2NTY1NDUxNzQxNjMgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxMSBsbiAwLjAwMDAwMDAwMDAwMzI0NjE4Mjk2NzIxNzQ3MDk3NTEwNDUzMzg4NjgzOTEyNzMzNTY5IC0+IC0yNi40NTM1NDEyODE0NDQ1ODY4MTkwMDk1NDY0MTg1Nzc1MDcxNjMzNjI1OTAxMzk0MjIgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxMiBsbiA3Mi42NDY5Njg4MTg0NjM1NDY0NDk0OTkxNDc1NzkwMjM1NTUwMDgzOTI4NjA0MjMzODUgIC0+IDQuMjg1NjExNjY2MDY4OTY0Njg4Mjg1MjEyODg1MzQyMzU2NjI3NjcxODIzMDQyNjQ3OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTEzIGxuIDAuMDAwMDAwMDAwMDAwMDAwNjY3NTU0ODMxMjQ2MzU2MTI1NzQyNjMxNTM4MjU5OTA1MjMgLT4gLTM0Ljk0MjkxMDE0MjgwMjc2OTMxOTI2Mjg3NTA4MDM5ODg1MjQ5MTU4ODcwNzE3MjQ4MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTE0IGxuIDYxLjAwMjkxMDQ0NzIwMjM5ODIwNDExNDkwOTQ1MTg1MTExMTQyNDY1NzY3MTkxMTAwMiAgLT4gNC4xMTA5MjE1NzUyODQzMzc3MzIzMzYzMTgyMDUxNDQ2MTc3MDY2NDM0MDM4MDk2NTI5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MTUgbG4gOTE3LjA2OTE3NjExMzMxOTgwOTk5MjI3ODkzNTg0MDEwNTQ0NTQyMzEyMjM5MTc0Nzc0ICAtPiA2LjgyMTE4MjkwNjgzMDMxMTQxMjg3NTI0NTM2NjE5NDY0NDY5Nzk3ODc4MjYyODI5MDcgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxNiBsbiAwLjAwMDAwMDAwMTcwODIzNzk0ODgzNjczMDgzMzU4NTQ5NzQ5MDc4OTcyMDAzOTY1MTk0IC0+IC0yMC4xODc4MDM0MzY5NzYxNTA0NzcyOTcyNDY2NjY3NzE2MjY4MjcwNTcxOTEwMjMwMDQgSW5leGFjdCBSb3VuZGVkDQotbG54MTUxNyBsbiAwLjUzNzMxNzY3ODQ1MzU4MjI0NDQ1ODA5NzYxMzE1MTU5MjQ5ODk4NTY2NTQyOTEwNjQ5IC0+IC0wLjYyMTE2NTc3OTM5OTY4NDA5MjExNzM2NDEzNjI4MjM2Mjg1MTYwMDQ4MzU3MDAwOTYxIEluZXhhY3QgUm91bmRlZA0KLWxueDE1MTggbG4gMC4wMDAwMDAwMDAwMDAwMDAwODk2NTI5MTM5Mjg4MjgwNDE2MTI5OTc1ODcwODAzMzM3MyAtPiAtMzYuOTUwNTg1OTcwOTgwODU3Mzc2MDgxMjY1MDczMjc2MzAzNjcwODIwMDU2OTE2MjA2IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MTkgbG4gMC4wMDAwMDAwMDAwNjk5MDI0NDkxNjAyNjQyOTkwNDQ5ODI3ODk4MjUzMDE3MDI5NTY2OCAtPiAtMjMuMzgzOTIwNDI5MjQ0NDU3NTc4MzczNTIzNTA4NDI3NzgzMTQ0NTg5NDgwNDIwNzUzIEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjAgbG4gNC4wMzEyNTQyOTc3MDcwMzAwMDcwNTA2MDY0NjY2NTM2NDc4MzczODAxOTg4NTQwNjE0ICAtPiAxLjM5NDA3NzU2NzY1OTI0NTE5NDU3OTU3NTI3OTY0MjEzOTE4NzEzMDIwMjQ3NjMzMDUgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyMSBsbiAyNzEuODQ5OTEzMTE1NTE4NzU2MDE0MzI1MTg4MTk1NjIzOTE2OTkzMjQ2MzIzOTY0MjMgIC0+IDUuNjA1MjUwMTIzOTg3Mzg2MjUxNzkxNjY3OTc0NzE0NjUzOTgwODA3NzQzMTg3MzQ3OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxNTIyIGxuIDcuNDExODY3MTYyOTM3Mzg2NDY2NzIyOTQ0NTc0Njg2MjMxNDQ0Mzg5NTQwNDgxODY4OSAgLT4gMi4wMDMwODIzODYzNzA2MzQ0NjI4MjM5MTQ3NjM5MzE4Mjg5OTYxOTE3MDYwMTIxMTQxIEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjMgbG4gMC4wMDAwMDAwMDAwMDAwMjAyNjMxMTQ1MjYyNTM2NDkwNTM1NzMyMTY2NDE4NjAzNDI1OCAtPiAtMzEuNTI5OTc0MTgwMDU0NDM4NzkyMDQzODU2ODc3MzE0MDQzNzk0MzIwOTUxMTM0NzU0IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjQgbG4gMC4wMDAwMDAwMDAwMDAwOTU2MzM5ODY1MTI2MTc1Njk1MjM5ODI1MDYyNDczNzgwOTM0NyAtPiAtMjkuOTc4MjQ4MTMwNTc2OTcyOTUzMTQxMjg0MTM2OTYyNjcwMDIxMzY4ODM0NzkyNTc5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjUgbG4gMC4wMDAwMDAwMDAwOTU1Njc3MjY2OTQwOTg1ODY1MzAyNjU1ODIyMzQ2NTE5NzgwODk5MSAtPiAtMjMuMDcxMTg1OTM5NzQ4Mjg1NTQxMjI4MjA2MTYxNDcyOTU2NjYxMTk2OTU2NzQxMTg2IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MjYgbG4gNi44NDQxNjQ4Mjk4MDI3MzAxMjkyMzQyMDU3MjQ4NzM3MzI2MTUyMjUwNzk0MDI2NzYxICAtPiAxLjkyMzM5NjQzOTU4MDE5NDY1OTcyNzI1ODk0NzM0MTc5NDgwMjQzNjEwMDUwODI5MDggSW5leGFjdCBSb3VuZGVkDQotbG54MTUyNyBsbiAwLjAwMDAwMDAwMDAwMDczMDU5Njk5ODg0NDM5OTc5Mzk0OTQ1ODIyMDM1NzA0MjY0NTc3IC0+IC0yNy45NDQ5MTQzODgzNTM3MjQ3MTg4MzYxMDE4Mjg2Nzc3NzE5NjcxMjg1MDk2MDMxNTggSW5leGFjdCBSb3VuZGVkDQotbG54MTUyOCBsbiAwLjAwMDAwMDAwMDAwMDAwMDAyNjEwMDc4MjgwNDE5MDgyMjYzMTM4MDY0NzQ1NDE2Nzg3IC0+IC0zOC4xODQ1NjYzNjc1MTYyMDc4ODU1NzM3NzMzMjAxMzU5NjU3OTg3MTcxMjA3MzUxMTUgSW5leGFjdCBSb3VuZGVkDQotbG54MTUyOSBsbiAwLjAwMDAwMDAwMDAwMDAwMDAwMTUwMjU5NTE3MTY2Mjk0MjQzMDg4NTQ2ODA2MDgzMjgzIC0+IC00MS4wMzkzMzc5NDYyNjY2NzYxMDg1MzgxNzA4Mzc1ODAwNTE2OTk2MTgzMzQ5Mjg0MjEgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzMCBsbiAwLjAwMDAwMDAwMDAwMDAwMDg3OTE5MTYwNTQxNzE0NTgwNzA3MTgxOTY5NzA4NTAyMDkxIC0+IC0zNC42Njc1Mjg4MTg4Mjc2NzE1MDc1MTQzMTk3NDQwNDc0NDA2OTYxODczNTg2NzY4NDggSW5leGFjdCBSb3VuZGVkDQotbG54MTUzMSBsbiAwLjAwMDAwMDAwMDAwMzk1NzI2NzI1MTIwNzg3NzYzMjcxODQ5NTc3NzA4MDY4NTg0NTk4IC0+IC0yNi4yNTU0Njc0MTY5NjEzNTc3NDE4MTg3MzU3ODcyMjY2NzE5Mzg2Nzg0MjQ3NDg0MzEgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzMiBsbiAwLjAwMDAwMDAwMDAyMDE0MzM0OTAxNjY5MzY2MjE4MDE4Mzc3MjEzMTUwNzE1OTM4MzU1IC0+IC0yNC42MjgxNDY5NTU2MzUzNTkwMzUyODkxMjMwMjczMTk5NjkyMDE2OTM3MzcxNTkxMDggSW5leGFjdCBSb3VuZGVkDQotbG54MTUzMyBsbiAwLjAwMDAwMDA4MDk3OTI3MTAxMTAxMDkzMTE3NzUzOTM4NzY2MjQxNDQyODk2MDMwNjM3IC0+IC0xNi4zMjkwNzI2Mjg0Njk3MTUxNzg2MzcxNzgzNjU3MTAzNzMzOTgyMDMxOTA5Mzc0NTQgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzNCBsbiAwLjAwMDAwMDAwMDAwMDE3MTE1ODM0MTYyNjMyODY0MzkyMDM5NjY4MTE2MjQzOTg0MTc2IC0+IC0yOS4zOTYxODcyOTI0MzQ4OTgyMjU0NTM2MjY3OTQ0NTkyODUxNTcyNjMxNzc1MjgwMzQgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzNSBsbiAwLjM5MTY4MzE3NTkzODY2MzM0MDg3MzA1NDU5OTMzNzIzODY0Mjk0ODU3MDg2MTA1MDM1IC0+IC0wLjkzNzMwMTk5MDYyNzU3MjQwNDg1ODM2NjM3MzA2Nzg1MDM3MzY4NzQ2NzM3NjkzMDI5IEluZXhhY3QgUm91bmRlZA0KLWxueDE1MzYgbG4gNzkuMzM1MDM2Nzk4OTcxNTE1MDI2NTE5NjMwMTAzMzI1MzY5NzI5NjM3NTE0MTI3NjE3ICAtPiA0LjM3MzY3OTg1NzAyODc4Mjg4MjM3NzIxNDk3MzUxNzA0MzEwMTA2MTY5NjE5NzY5NjUgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzNyBsbiAwLjAwMDAwMDAwMDAwMDAwMDU2MDA0OTUyMTI5OTI2MTM3NDEzNjAyMTE2NTkxNDkzNjI1IC0+IC0zNS4xMTg1MDY0NjMxODE4NzAwMjA3MzA2ODU4ODQzMzMwMDAyNDEwMzkwMjgxMjcyMTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzOCBsbiAwLjAwMDAwMDA2MDA2MDM1OTA3ODQzODkwOTE4ODMyNDgxMDk5NjYwNjM5NTUzNjY2MDc4IC0+IC0xNi42Mjc5MTU3OTU3NDcxMTI1NjY1MzI3MDU5NzQ4NTMxMTQ0NTQ0MDUwMTA0NzIwNDMgSW5leGFjdCBSb3VuZGVkDQotbG54MTUzOSBsbiAwLjAwMDAwMDAwMDg1MjQyMDI0OTM3NDE0OTA2MzcxMzMzODI2NTc0NjMyNDUwNTg3NTkwIC0+IC0yMC44ODI5NDE0NjAyNjgxMDEwODAxODY0ODIyMzA2NTc3NzQ5OTcyNzM0OTQxMDcyMjEgSW5leGFjdCBSb3VuZGVkDQotbG54MTU0MCBsbiAwLjAwMDAwMDAwMDAwMDQzNjcxMDk5NDk5MjYyMzUwMzE2MTczMjQ2NTUwNzcxOTUxNTYxIC0+IC0yOC40NTk1MDQ3NTcyODU2MzkyMjE3NzYzMDU5Njg0NjkwNTg4NTQ1NTg3MjY1OTM5NDUgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUD0zNCwgd2l0aGluIDAtOTk5DQotUHJlY2lzaW9uOiAzNA0KLWxueDEyMDEgbG4gMC4wMDg2NzMyODgwODE1OTI3MTgyOTk3NTY2ODEwMzM0Mzk0IC0+IC00Ljc0NzUwNzMxMTkyMDg0NDc1MjQ4NjkzODE4Nzk3MzcyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjAyIGxuIDAuMDAwNzEwNDEwMzY5MzQ2MDI2MDYwOTc5MjIyMjU2OTg1NCAtPiAtNy4yNDk2Njc3Njk5MDM1MDMwMjMwMDU1NDkyNTAzNDc2OTUgSW5leGFjdCBSb3VuZGVkDQotbG54MTIwMyBsbiA3ODYuODM5ODk0NTM4NTEwNTE5MDY5NzU0MTQ5MzM5Mjc0MiAgLT4gNi42NjgwMjQ3OTAwMzE4MzYzNDA0NzE4MjQxNDcwMTA1NDYgSW5leGFjdCBSb3VuZGVkDQotbG54MTIwNCBsbiAwLjc3MjMwNzM2MjAyODI2ODc2NTY4OTUxOTAxNzE5NjczOTkgLT4gLTAuMjU4MzcyNjcwODUwNjg1MDg2ODc4NjgxNjIzODIxNzMyNiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA1IGxuIDAuMDA2MTA1Nzk1MTUxNzE5NzYzMTI4NzE4MzkzODQxMjIwMCAtPiAtNS4wOTg1MTY5MzM5MTg3OTczNDcwNjQ0NTQxMDM3NDI2MzUgSW5leGFjdCBSb3VuZGVkDQotbG54MTIwNiBsbiAwLjYxODEzNzk3MDgxODQzOTM3MzAxMDM5MTc1NjI0OTg3NDUgLT4gLTAuNDgxMDQzNTkyNjkwMzM2NTA4NzQ2MzM4Nzc2MDM1MDAyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA3IGxuIDA5LjEzODg4MjYxMjI5MDM5OTg5MTEwNzUzMzg5MDk2NzYwICAtPiAyLjIxMjUzODEyNTUwNzk3NTU3NDUwOTU2MzAyNzY5NjAyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA4IGxuIDgwMi4wMTA1NDE3MDYzMTQzNjk2NDk3MjkyMTU4MTQ3MTc0ICAtPiA2LjY4NzEyMTc1MjA1MjM0MTczNzIzNDgzMjIwMzM1MDIxNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjA5IGxuIDc3OC43NzQ5NzEwMzg3NzczNzEzNTIzMDI4NDk3MzMzMDU4ICAtPiA2LjY1NzcyMjEzNTEyNjkzNTQ3MjA4NjYyNTAzMTQxMzAzMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjEwIGxuIDAuMDAyNDQ1NzI5NTg5NTM0NjUwMjUxMzU2NzY3OTM5MDYxNiAtPiAtNi4wMTM0MTE3OTk5NDAyNDUzNDUzMjEzNDgyOTAzOTg1MTcgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxMSBsbiAwLjAwMDA1MTEyOTY5NDc4NzI4MjgzMTAzMzg4NjQyMTc4NjAgLT4gLTkuODgxMTQ1MTE4MjM3MjgxNzk4MDgxNTczMTMxNzExNjM2IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTIgbG4gMC4wMDAwMjQ2ODAzNTA4NjAyNTU0OTI0OTM4Njg1MTU1NjU4IC0+IC0xMC42MDk1MDMxNDI2NDgyNTY2MTgyNTM2MDk3MTQzMDIxOCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjEzIGxuIDkuMDI3ODk4MTk5MjUzNTExNjY4MjQyOTc3NzY2NjE2MDgyICAtPiAyLjIwMDMxOTU4Mjc3ODg5OTAyOTc4NjAxNzgzMDU1NzI5MyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjE0IGxuIDAuMDk5MTgxMjM5NjU0MjUwNTYzMTg1MDY5MjgwMDkwNDE4OCAtPiAtMi4zMTA4MDYzOTg5NjQ2NzIyNTg4MjMwNDMxODA0MDAzODQgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxNSBsbiAwLjAwMDAwMDAwMDAwNzAyMzg4MTAxNDMwMjg4MTEyMjM5MjQgLT4gLTI1LjY4MTcwNTE5OTYxNjM2NjQ3MTc0NzE0NTM4MjkwMDc1IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMTYgbG4gMi42MzAxMDE2NjUzNDI4MjY0OTQ3MzAzOTQ3MjkzMTMxNjcgIC0+IDAuOTY3MDIyNTAxNDY2NDM2NzQ2NTEyODI0MzAzOTc0OTU1OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjE3IGxuIDAuMDA1Njg3ODkyODU5NDM1OTU4NzY5MTUyNjA2MzI1NDY4MyAtPiAtNS4xNjk0MTU0MjI5MDQwMzc4MTk3MzY2MzczOTk0NDUwOTYgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxOCBsbiA1NjcuMzQzNjA0NzEyMTA1Nzg0MzkwODEwNjU3MzA5NTU5MCAgLT4gNi4zNDA5NjUxMjQ5NjQyNTg0ODY0NjM0NDQzNjA3ODc5NzAgSW5leGFjdCBSb3VuZGVkDQotbG54MTIxOSBsbiAxLjE5OTI5MTI0ODEyNDY1NTk5NjYxNDYwNTc0NTY0OTcyNSAgLT4gMC4xODE3MzA3NTU3NDI1OTExODA1NzY1MDg3NzU1Njc1NjU3IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjAgbG4gMjUuMDIwNTA0NDg1ODIwMzEwOTg2OTYyNjc0NzkxMzU1NTcgIC0+IDMuMjE5Njk1NjY4MTM3NjU5MTM5NTQ0MTc4OTA1NDU5MzE3IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjEgbG4gMC4wMDAwMDAwMDAwMDA5OTM5NTk3MDIzNTU4NzU2OTYxMzAwIC0+IC0yNy42MzcwNzk3Mjk5NjUzNzYzNjUwNDM5NjU1ODI1OTA1OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjIyIGxuIDAuMDAwMDAwNzk4ODU1MTY3MDE1OTQyOTcxNjUwNjQzMDQwMyAtPiAtMTQuMDQwMDg2MTc1NDI1OTcyMzA5ODgxOTg2MTIzNzY0MTUgSW5leGFjdCBSb3VuZGVkDQotbG54MTIyMyBsbiA0LjY4MTUxNTgwMDE3NjEyOTE4NDg3Mzc3MDYwNTU4OTc5NSAgLT4gMS41NDM2MjE5NDY0MTUzODMzMzg5NzIxMjQ0NDU0NDU3NDggSW5leGFjdCBSb3VuZGVkDQotbG54MTIyNCBsbiAxNS45NTEyNjY2OTE2MTEwMzAxMTIwNjY1ODc0OTM0NTc4MSAgLT4gMi43Njk1MzgyNDI0Nzk0ODM1MzkyNzU5ODYzOTU0NDM1MzkgSW5leGFjdCBSb3VuZGVkDQotbG54MTIyNSBsbiAwLjAzMDE2MjY3ODM5MjIyMTEyMTM2NzU0NTcyNzkwNzYwNjYgLT4gLTMuNTAxMTQ5OTMzNjc3MjgzMzQxMDIzOTMyMjgxODI2MzQxIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMjYgbG4gMDAwLjAwNDA1NDQwNjQ4ODE4MjE3NzA1Mjg0NzUxODU2NzQgIC0+IC01LjUwNzk1MDk2NzU1NzAyMTY3MTY0NzE2NTg4OTYwODMyNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjI3IGxuIDI5LjAxNjE3MDk1OTM1NTkzNzkyMDk1OTEzNzg1MTAwMzYwICAtPiAzLjM2Nzg1MzI5Mzg2Mjc0NTY1MTg4ODQ1MDAwNDQ3MzI5NyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjI4IGxuIDc4LjAxODM2MTY3MzQ0NzM2NzMzMDI0ODA0MjQzMTk1MzIzICAtPiA0LjM1Njk0NDIwNTA1NTc2ODU3NTk4Nzc4MTM3NTAwMzk5MiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjI5IGxuIDAuMDAwMDAwMDA5NjU0NTMxOTMxNjk2NTMyMTE1ODYzNDg5MyAtPiAtMTguNDU1ODM4NDAxNjA5NjU4MTQ0NjIwOTU0NzczNjUwMTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzMCBsbiA5Ny45NTQ3NTIzNzcyMDU3OTc1Mjc3MDU4NzE4NTA3NDQyOCAgLT4gNC41ODQ1MDU2NjE2MTI4MTI3NDIyMDg2MTkzNTgyMTQ3MjkgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzMSBsbiA1MjguMDYwOTI2MjA1MDQyMzI0NjQwMjU2NDIyODQzMjM3MSAgLT4gNi4yNjkyMTE2Njc1ODkxMzgxMTMzOTY1ODM4OTQzMTU5NTYgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzMiBsbiAwLjAwMDAwMDIyNTAwNjQzNDk3MzI5Njk2OTY2NjA0NTI5NzIgLT4gLTE1LjMwNzEzNjgzNTI2OTYzOTk2NzEyMTY3NzAxNzM4NzI0IEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzMgbG4gNDcuOTcwNjM2Mzc3Njc5OTg2NTg1NjcxOTkwNDk3MjU3NTQgIC0+IDMuODcwNTg5MDgxNTg1NjYwNjkyMTk1OTg5ODU0ODQyMzcyIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzQgbG4gMC4wMDA1Mzk0MzExMzQ0NTQxNDMyMzE4ODUzNTEzNDE0MzYxIC0+IC03LjUyNDk5NTQyODM5MzkyNTkzNDA4NzEyNjcwMjk3NDEyMSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjM1IGxuIDAuMDAwMDAwMDA5MDk3MzM4NTY0OTU2NzQ3MTY3NDk3MjYzMyAtPiAtMTguNTE1MjgzOTMxNTg5MzE3ODM0NDcwMzUwMDQxMjU3OTEgSW5leGFjdCBSb3VuZGVkDQotbG54MTIzNiBsbiAwLjAwMDAwMDAwMDAyMzg3NzY0OTAyMjc1NzYxOTczMTc5NzcgLT4gLTI0LjQ1ODA3ODI4MTg4Mzg5NTYxMzMxMTU4ODc5MjA3MjYyIEluZXhhY3QgUm91bmRlZA0KLWxueDEyMzcgbG4gMC4wMDAwMjM2NTg3MDAwMjMxOTIxNTMyMTQ1MzI2MjE4NzU4IC0+IC0xMC42NTE3Nzk2NDQ5OTgyMzMxNDk1MjQyOTI3Nzk3OTAzNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjM4IGxuIDQ5OS4xMjc3NDQ4ODQ2MTMwNzA5ODI3MTU0NTU2MTI1OTQyICAtPiA2LjIxMjg2MjA2NDc2MTQyNzk2NzQ2MTE4ODA4MzUxNDc3NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMjM5IGxuIDAuMDAwMDAwMzk2MDE5MjMwMDI4NDc4NzY2MzcxMjQxNzY0NyAtPiAtMTQuNzQxODAzMDY2MTkyOTg1NDgwOTM2OTc2MDgyOTMyODQgSW5leGFjdCBSb3VuZGVkDQotbG54MTI0MCBsbiA0MS4wODI2ODM1MDgyOTQ3NzQ1MTY2NzIyODg5MjQ5NTEzNiAgLT4gMy43MTU1ODY3MDY4ODcyNzgwMzkxNzM1ODQ4NTkyMTg5NjAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUD0xNiwgd2l0aGluIDAtOTkNCi1QcmVjaXNpb246IDE2DQotbG54MTEwMSBsbiA3Ljk2NDg3NTI2MTAzMzk0OCAgLT4gMi4wNzUwNDEyODIzNTIyNDEgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwMiBsbiAxMy41NDUyNzM5Njg0NTM5NCAgLT4gMi42MDYwMzc3MDE4NzAyNjMgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwMyBsbiAwLjAwMDgwMjY1NTQzNDEzMzEgLT4gLTcuMTI3NTg1MDM0MzIxODE0IEluZXhhY3QgUm91bmRlZA0KLWxueDExMDQgbG4gMC4wMDAwMDMwNTgyMjMzMjYxIC0+IC0xMi42OTc2NzY0MjMwMDYyNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTA1IGxuIDAuMDAwNDQ3NzQ5NzUwOTY3MiAtPiAtNy43MTEyNzYwNzMyMTA3NjYgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwNiBsbiA3LjYxNjI2ODYyMjQ3NDM3MSAgLT4gMi4wMzAyODY1Njc2NzUxNDggSW5leGFjdCBSb3VuZGVkDQotbG54MTEwNyBsbiA1MS41ODMyOTkyNTgwNjM4MSAgLT4gMy45NDMxOTc5NjIzMDk1NjkgSW5leGFjdCBSb3VuZGVkDQotbG54MTEwOCBsbiAwLjAwMTgxOTc0OTc5NTEyNjMgLT4gLTYuMzA5MDU2MjYyNTQ5MzQ1IEluZXhhY3QgUm91bmRlZA0KLWxueDExMDkgbG4gMi45NTYyODI0NTcwNzI5ODQgIC0+IDEuMDgzOTMyNTUyMzM0NTc1IEluZXhhY3QgUm91bmRlZA0KLWxueDExMTAgbG4gMC4zODQzMzI1NTc5MTg5OTA2IC0+IC0wLjk1NjI0NzA2NDk0MDA1NTggSW5leGFjdCBSb3VuZGVkDQotbG54MTExMSBsbiAwLjAwNzQ0NjYzMjkyNjU2NjMgLT4gLTQuODk5OTkzMzA0OTE5MjM3IEluZXhhY3QgUm91bmRlZA0KLWxueDExMTIgbG4gMC4wMDAzMzcyNDc4NTMyOTkzIC0+IC03Ljk5NDY5MjQyODIwNjM3OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTEzIGxuIDAuMDA4NDc5MjI2MzE2NzgwOSAtPiAtNC43NzAxMzYwNjk1NjkyNzEgSW5leGFjdCBSb3VuZGVkDQotbG54MTExNCBsbiA1LjkyNjc1Njk5ODE1MTEwMiAgLT4gMS43Nzk0NzcxODI4MzQzMDUgSW5leGFjdCBSb3VuZGVkDQotbG54MTExNSBsbiA5LjAyNTY5OTE1MjE4MDg5NyAgLT4gMi4yMDAwNzU5Njk2MDQxMTkgSW5leGFjdCBSb3VuZGVkDQotbG54MTExNiBsbiAxLjkxMDEyNDY0MzUzMzUyNiAgLT4gMC42NDcxNjg0OTgzMjM4MTgzIEluZXhhY3QgUm91bmRlZA0KLWxueDExMTcgbG4gMC44MTU4OTIyNzExNDExMDIwIC0+IC0wLjIwMzQ3Mjk1MzM5MzkzODcgSW5leGFjdCBSb3VuZGVkDQotbG54MTExOCBsbiAwLjAwNjcwODAwMTY0NzUzMjIgLT4gLTUuMDA0NDU0MTg5NDE0MTM5IEluZXhhY3QgUm91bmRlZA0KLWxueDExMTkgbG4gMC4wMDQ3NTgzMjQyMDkyNzE2IC0+IC01LjM0Nzg1OTcyOTYwMTA5NCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTIwIGxuIDAuMDM4NjY0NzQxMTY0MTMzOSAtPiAtMy4yNTI4MjcxNzUyNjMxMTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyMSBsbiAwLjAwNTAyMjY0Mjc4NDE3NjEgLT4gLTUuMjkzNzk5MDMyNzc0MTMxIEluZXhhY3QgUm91bmRlZA0KLWxueDExMjIgbG4gNi45Mjc5Mzc1NDE2MzcyNjEgIC0+IDEuOTM1NTYyMTU1ODY2OTA2IEluZXhhY3QgUm91bmRlZA0KLWxueDExMjMgbG4gMC4wMDAwMDk1NzQ1MzQzNTEzIC0+IC0xMS41NTY0MDM2NTU3OTgxNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI0IGxuIDEuNjAyNDY1NDkyOTU2NTM4ICAtPiAwLjQ3MTU0MzM3NjMyNDM5MzYgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyNSBsbiAzOC45ODQxNTYyNTA4NzUzNSAgLT4gMy42NjMxNTUzMTM2MTAyMTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyNiBsbiA1LjM0MzE4MjA0MjI3NjczNCAgLT4gMS42NzU4MjEzNjM1NjgxMTIgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyNyBsbiA1NS44OTc2MzcwMzI0NTgxNiAgLT4gNC4wMjM1MjIxMDc5MzQxMTAgSW5leGFjdCBSb3VuZGVkDQotbG54MTEyOCBsbiAwLjc0NDUyNTc4MTAyODA4NDcgLT4gLTAuMjk1MDA3Nzk4ODEwMTAzMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTI5IGxuIDEuNjMxNDA3MzE0OTQ2MDk0ICAtPiAwLjQ4OTQ0MzAyNTcyMDEyNDggSW5leGFjdCBSb3VuZGVkDQotbG54MTEzMCBsbiAwLjAwMDU0NjI0NTE5MzI2MDIgLT4gLTcuNTEyNDQyNjExMTE2ODUyIEluZXhhY3QgUm91bmRlZA0KLWxueDExMzEgbG4gMC4wMDAwODY0MTczMjY5MzYyIC0+IC05LjM1NjMyMjM1OTAxNzMxNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTMyIGxuIDUuMjI3MTYxNzE5MTMyODQ5ICAtPiAxLjY1Mzg2ODQzODQzOTYzNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTMzIGxuIDYwLjU3MDc4NDY2OTQxOTk4ICAtPiA0LjEwMzgxMjY3NTY2MjQ1MiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTM0IGxuIDAuMDk5Mjg2NDMyNTMzMzE2MCAtPiAtMi4zMDk3NDYzNDgzNTAzMTggSW5leGFjdCBSb3VuZGVkDQotbG54MTEzNSBsbiAwOS40ODU2NDI2ODQ0NzMyNSAgLT4gMi4yNDk3NzkzNTkwNzQ5ODMgSW5leGFjdCBSb3VuZGVkDQotbG54MTEzNiBsbiAwLjAwMzYxMDYwODkzNTU2MzQgLT4gLTUuNjIzODc4ODQwNjUwNzg3IEluZXhhY3QgUm91bmRlZA0KLWxueDExMzcgbG4gMS44MDUxNzY4NjU1ODcxNzIgIC0+IDAuNTkwNjU4NTczNDU5MzcwNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTM4IGxuIDYyLjU5MzYzMjU5NjQyMjU1ICAtPiA0LjEzNjY2MzU1NzIyMDU1OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTM5IGxuIDQuMzczODI4MjYxMTM3MjAxICAtPiAxLjQ3NTYzODY1NzkxMjAwMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMTQwIGxuIDAuOTk0NDgzNTI0MTQ4NzM4ICAtPiAtMC4wMDU1MzE3NDc3OTQ5Mzg2OTAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUD03LCB3aXRoaW4gMC05DQotUHJlY2lzaW9uOiA3DQotbG54MTAwMSBsbiAwLjA5MTIwMjUgLT4gLTIuMzk0NjczIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDIgbG4gMC45NzI4NjI2IC0+IC0wLjAyNzUxMjQyIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDMgbG4gMC4zODg2MDMyIC0+IC0wLjk0NTE5NjUgSW5leGFjdCBSb3VuZGVkDQotbG54MTAwNCBsbiA4Ljc5ODYzOSAgLT4gMi4xNzQ1OTcgSW5leGFjdCBSb3VuZGVkDQotbG54MTAwNSBsbiAyLjQ1OTEyMSAgLT4gMC44OTk4MDQwIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMDYgbG4gMi4wMTMxOTMgIC0+IDAuNjk5NzIyMCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDA3IGxuIDkuMDY0ODU3ICAtPiAyLjIwNDQwNSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDA4IGxuIDUuNzk2NDE3ICAtPiAxLjc1NzI0MCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDA5IGxuIDAuMTE0MzQ3MSAtPiAtMi4xNjg1MTcgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxMCBsbiAwLjUzNDE1NDIgLT4gLTAuNjI3MDcwNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDExIGxuIDYuNjkzNzgxICAtPiAxLjkwMTE3OSBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDEyIGxuIDAuMDA4MTc3OSAtPiAtNC44MDYzMjAgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxMyBsbiA4LjMxMzYxNiAgLT4gMi4xMTc4OTUgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxNCBsbiAzLjQ4NjkyNSAgLT4gMS4yNDkwMjAgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxNSBsbiAwLjE4MDE0MDEgLT4gLTEuNzE0MDIwIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMTYgbG4gMC41MjI3MTQ4IC0+IC0wLjY0ODcxOTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxNyBsbiA3LjgxODExMSAgLT4gMi4wNTY0NDMgSW5leGFjdCBSb3VuZGVkDQotbG54MTAxOCBsbiAwLjA4NzA2NzEgLT4gLTIuNDQxMDc2IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMTkgbG4gOC4xNTM5NjYgIC0+IDIuMDk4NTA0IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjAgbG4gMi4wNDA5NzUgIC0+IDAuNzEzNDI3NiBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDIxIGxuIDEuNDgxNjQyICAtPiAwLjM5MzE1MDkgSW5leGFjdCBSb3VuZGVkDQotbG54MTAyMiBsbiAwLjI2MTAxMjMgLT4gLTEuMzQzMTg4IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjMgbG4gMC40NjY3MjMgIC0+IC0wLjc2MjAxOTMgSW5leGFjdCBSb3VuZGVkDQotbG54MTAyNCBsbiAwLjA1MTg3NTYgLT4gLTIuOTU4OTA3IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMjUgbG4gMi4wNTY0MTAgIC0+IDAuNzIwOTYxNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDI2IGxuIDAuMTgxNTIyICAtPiAtMS43MDYzNzggSW5leGFjdCBSb3VuZGVkDQotbG54MTAyNyBsbiAwLjUxNTU1MSAgLT4gLTAuNjYyNTE5MCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDI4IGxuIDguNDI1MDg5ICAtPiAyLjEzMTIxNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDI5IGxuIDIuMDc3MDkxICAtPiAwLjczMDk2ODQgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzMCBsbiA2LjIxMjcwNSAgLT4gMS44MjY1OTYgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzMSBsbiA1LjcyOTM0MyAgLT4gMS43NDU2MDEgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzMiBsbiA0LjgzMTI1MSAgLT4gMS41NzUxMDUgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzMyBsbiAyLjAyOTc2MCAgLT4gMC43MDc5MTc2IEluZXhhY3QgUm91bmRlZA0KLWxueDEwMzQgbG4gOC42MTUwNjAgIC0+IDIuMTUzNTEyIEluZXhhY3QgUm91bmRlZA0KLWxueDEwMzUgbG4gMC4wNjExNTExIC0+IC0yLjc5NDQwNyBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDM2IGxuIDUuMTk1MjY5ICAtPiAxLjY0Nzc0OCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDM3IGxuIDkuNjE3Njg2ICAtPiAyLjI2MzYwNCBJbmV4YWN0IFJvdW5kZWQNCi1sbngxMDM4IGxuIDAuMDA0OTM4MiAtPiAtNS4zMTA3NTQgSW5leGFjdCBSb3VuZGVkDQotbG54MTAzOSBsbiAyLjc4Njg0MCAgLT4gMS4wMjQ5MDggSW5leGFjdCBSb3VuZGVkDQotbG54MTA0MCBsbiAwLjAwOTEwNzMgLT4gLTQuNjk4Njc5IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGZyb20gaGVyZSAzLWRpZ2l0IHRlc3RzIGFyZSBiYXNlZCBvbiByZXZlcnNlIGV4cCB0ZXN0cw0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLWxueDAwMSAgbG4gMCAgICAgICAgICAgLT4gIC1JbmZpbml0eQ0KLWxueDAwMiAgbG4gMC4zNjc4Nzk0NDEgLT4gIC0xLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAwMyAgbG4gMSAgICAgICAgICAgLT4gICAwDQotbG54MDA1ICBsbiAyLjcxODI4MTgzICAtPiAgIDEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDA2ICBsbiAyLjAwMDAwMDAwICAtPiAgIDAuNjkzMTQ3MTgxICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDA3ICBsbiArSW5maW5pdHkgICAtPiAgIEluZmluaXR5DQotDQotLS0gdGlueSBlZGdlIGNhc2VzDQotcHJlY2lzaW9uOiAgIDcNCi1sbngwMTEgIGxuIDEuMTA1MTcxIC0+ICAwLjEwMDAwMDEgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDEyICBsbiAxLjAxMDA1MCAtPiAgMC4wMDk5OTk4MzUgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDAxMyAgbG4gMS4wMDAwMTAgLT4gIDAuMDAwMDA5OTk5OTUwICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwMTQgIGxuIDEuMDAwMDAxIC0+ICA5Ljk5OTk5NUUtNyAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDE1ICBsbiAxLjAwMDAwMCAtPiAgMA0KLQ0KLS0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcw0KLXByZWNpc2lvbjogICA3DQotbG54MDQxICBsbiAyLjcxODI4MiAgICAgIC0+ICAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwNDIgIGxuIDAuMzY3ODc5NCAgICAgLT4gLTEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDA0MyAgbG4gMjIwMjYuNDcgICAgICAtPiAgMTAuMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDQ0ICBsbiAwLjAwMDA0NTM5OTkzIC0+IC0xMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbngwNDUgIGxuIDIuNjg4MTE3RSs0MyAgLT4gIDEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDA0NiAgbG4gMy43MjAwNzZFLTQ0ICAtPiAtMTAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54MDQ3ICBsbiBJbmZpbml0eSAgICAgIC0+ICBJbmZpbml0eQ0KLWxueDA0OCAgbG4gMEUtMzg5ICAgICAgICAtPiAtSW5maW5pdHkNCi0NCi0tLSBtaXNjZWxsYW5lYQ0KLXByZWNpc2lvbjogMTYNCi1sbngwNTUgIGxuIDIuNzE3NjU4NDg2ODg0NTcyRS0yMzYgICAgIC0+IC01NDIuNDEwMzExMjg3NDQxNSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE3DQotbG54MDU2ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ2ICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxOA0KLWxueDA1NyAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMUUtMjM2ICAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTkNCi1sbngwNTggIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTEyRS0yMzYgIC0+IC01NDIuNDEwMzExMjg3NDQxNDU5MiAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIwDQotbG54MDU5ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTE3ICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gaW5wdXRzIGVuZGluZyBpbiAuLjUwMC4uLCAuLjQ5OS4uLCAuLjEwMC4uLCAuLjk5OS4uIHNlcXVlbmNlcw0KLXByZWNpc2lvbjogICA1MA0KLWxueDEwMiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3IC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzM3NDk5NTM4Mjk5OTY0NDYxMjQ4NjE3NTBFLTggIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAzMA0KLWxueDEwMyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMzc0OTlFLTggICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjkNCi1sbngxMDQgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1MEUtOCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjgNCi1sbngxMDUgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzNzVFLTggICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNw0KLWxueDEwNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzhFLTggICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjYNCi1sbngxMDcgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczNEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjUNCi1sbngxMDggIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NSAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzNFLTggICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyNA0KLWxueDEwOSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTUwMDAwMjdFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjMNCi1sbngxMTAgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggLT4gLTguOTk5OTk5OTk5OTk5OTk5ODUwMDAwM0UtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjINCi1sbngxMTEgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5OSAtPiAtOC45OTk5OTk5OTk5OTk5OTc4NTAwMDBFLTggICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAyMQ0KLWxueDExMiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMDBFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMjANCi1sbngxMTMgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMEUtOCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTkNCi1sbngxMTQgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTBFLTggICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxOA0KLWxueDExNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODVFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IG1heSBiZSBhID4gMC41dWxwIGNhc2U7IGEgbW9yZSBwcmVjaXNlIGFuc3dlciBpczoNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTguOTk5OTk5OTk5OTk5OTg3ODQ5OTk5MThFLTgNCi1wcmVjaXNpb246ICAgMTcNCi1sbngxMTYgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUgLT4gLTguOTk5OTk5OTk5OTk5OTg3OEUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNg0KLWxueDExNyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwIC0+IC05LjAwMDAwMDAwNDk5OTk4OEUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNQ0KLWxueDExOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQgLT4gLTkuMDAwMDAwMDA0OTk5OTlFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTQNCi1sbngxMTkgIGxuIDAuOTk5OTk5OTEwMDAwMDAgLT4gLTkuMDAwMDAwNDA1MDAwMEUtOCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMw0KLWxueDEyMCAgbG4gMC45OTk5OTk5MTAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTINCi1sbngxMjEgIGxuIDAuOTk5OTk5OTEwMDAwIC0+IC05LjAwMDAwMDQwNTAwRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTENCi1sbngxMjIgIGxuIDAuOTk5OTk5OTEwMDAgLT4gLTkuMDAwMDAwNDA1MEUtOCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxMA0KLWxueDEyMyAgbG4gMC45OTk5OTk5MTAwIC0+IC05LjAwMDAwMDQwNUUtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDkNCi1sbngxMjQgIGxuIDAuOTk5OTk5OTEwIC0+IC05LjAwMDAwMDQxRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDgNCi1sbngxMjUgIGxuIDAuOTk5OTk5OTEgLT4gLTkuMDAwMDAwNEUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNw0KLWxueDEyNiAgbG4gMC45OTk5OTk5IC0+IC0xLjAwMDAwMEUtNyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgMTYNCi1sbngxMjZiIGxuIDAuOTk5OTk5OSAtPiAtMS4wMDAwMDAwNTAwMDAwMDNFLTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICA2DQotbG54MTI3ICBsbiAwLjk5OTk5OSAtPiAtMC4wMDAwMDEwMDAwMCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgNQ0KLWxueDEyOCAgbG4gMC45OTk5OSAtPiAtMC4wMDAwMTAwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDQNCi1sbngxMjkgIGxuIDAuOTk5OSAtPiAtMC4wMDAxMDAwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAzDQotbG54MTMwICBsbiAwLjk5OSAtPiAtMC4wMDEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAgMg0KLWxueDEzMSAgbG4gMC45OSAtPiAtMC4wMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAgIDENCi1sbngxMzIgIGxuIDAuOSAtPiAtMC4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gY2FzZXMgbmVhciAxICAgICAgICAgICAgICAtLSAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwDQotcHJlY2lzaW9uOiAgICAyMA0KLWxueDQwMSAgbG4gMi43MTgyODE4Mjg0NTg5MzY1MDQxIC0+IDAuOTk5OTk5OTk5OTk5OTYwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotbG54NDAyICBsbiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgLT4gMC45OTk5OTk5OTk5OTk5NzAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MDMgIGxuIDIuNzE4MjgxODI4NDU4OTkwODY5NyAtPiAwLjk5OTk5OTk5OTk5OTk3OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KLWxueDQwNCAgbG4gMi43MTgyODE4Mjg0NTkwMTgwNTI1IC0+IDAuOTk5OTk5OTk5OTk5OTg5OTk5OTggSW5leGFjdCBSb3VuZGVkDQotbG54NDA1ICBsbiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MDYgIGxuIDIuNzE4MjgxODI4NDU5MzE3MDYzNSAtPiAxLjAwMDAwMDAwMDAwMDEwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KLWxueDQwNyAgbG4gMi43MTgyODE4Mjg0NTk1ODg4OTE3IC0+IDEuMDAwMDAwMDAwMDAwMjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgICAxNA0KLWxueDQxMSAgbG4gMi43MTgyODE4Mjg0NTg5IC0+IDAuOTk5OTk5OTk5OTk5OTUgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NDEzICBsbiAyLjcxODI4MTgyODQ1OTAgLT4gMC45OTk5OTk5OTk5OTk5OCAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng0MTYgIGxuIDIuNzE4MjgxODI4NDU5MSAtPiAxLjAwMDAwMDAwMDAwMDAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDQxNyAgbG4gMi43MTgyODE4Mjg0NTkyIC0+IDEuMDAwMDAwMDAwMDAwMSAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBleHAgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMNCi1wcmVjaXNpb246ICAgNw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5FeHBvbmVudDogLTM4Mw0KLWxueDcwOSAgbG4gOS45OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTMgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDcxMSAgbG4gOS45OTk5OTJFKzM4NCAtPiAgODg2LjQ5NTMgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogICAxNg0KLWxueDcyMiAgbG4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzYgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDcyNCAgbG4gOS45OTk5OTk5OTk5OTk5MTdFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzYgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDcyNiAgbG4gOS45OTk5OTk5OTk5OTkxMTdFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzUgICAgIEluZXhhY3QgUm91bmRlZA0KLS0tIGFuZCBtb3JlLi4uDQotcHJlY2lzaW9uOiAgIDE1DQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5DQotbG54NzMxICBsbiA5Ljk5OTk5OTk5OTk5OTk5RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0tLSBuZXh0IG1heSBiZSBhID4gMC41dWxwIGNhc2U7IGEgbW9yZSBwcmVjaXNlIGFuc3dlciBpczoNCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzAyLjU4NTA5Mjk5NDA0NDk1MDAxNzk5MTQ1NDQyDQotbG54NzMyICBsbiA5Ljk5OTk5OTk5OTk5MjY2RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3MzMgIGxuIDkuOTk5OTk5OTk5OTkyNjVFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDczNCAgbG4gOS45OTk5OTk5OTk5OTI2NEUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cyBmb3IgZXhwLCBpbmNsdWRpbmcgdW5kZXJmbG93LXRvLXplcm8gZWRnZSBwb2ludA0KLXByZWNpc2lvbjogICA3DQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotbG54NzUxICBsbiAwRS0zODkgLT4gLUluZmluaXR5DQotbG54NzU4ICBsbiAxLjAwMDAwMUUtMzgzIC0+IC04ODEuODkwMSAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc1OSAgbG4gOS45OTk5MUUtMzg0IC0+IC04ODEuODkwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NjAgIGxuIDQuNDYwNUUtMzg1IC0+IC04ODUuMDAwMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzYxICBsbiAyLjIyMUUtMzg2IC0+IC04ODcuOTk5OSAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc2MiAgbG4gMy4wMUUtMzg3IC0+IC04ODkuOTk4NSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NjMgIGxuIDEuN0UtMzg4IC0+IC04OTIuODcyNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54NzY0ICBsbiAxLjVFLTM4OCAtPiAtODkyLjk5NzYgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWxueDc2NSAgbG4gOUUtMzg5IC0+IC04OTMuNTA4NCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sbng3NjYgIGxuIDFFLTM4OSAtPiAtODk1LjcwNTYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG54Nzc0ICBsbiAwRS0zODkgLT4gLUluZmluaXR5DQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1sbng4MjAgIGxuIEluZmluaXR5IC0+ICAgSW5maW5pdHkNCi1sbng4MjEgIGxuIDAgICAgICAgIC0+ICAtSW5maW5pdHkNCi1sbng4MjIgIGxuIE5hTiAgICAgIC0+ICAgTmFODQotbG54ODIzICBsbiBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotbG54ODI0ICBsbiBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24NCi1sbng4MjUgIGxuIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbg0KLWxueDgyNiAgbG4gTmFONDU2ICAgLT4gICBOYU40NTYNCi1sbng4MjcgIGxuIC1OYU42NTQgIC0+ICAtTmFONjU0DQotbG54ODI4ICBsbiBOYU4xICAgICAtPiAgIE5hTjENCi0NCi0tLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucw0KLS0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdDQotcHJlY2lzaW9uOiAxMDAwMDAwMDANCi1sbng5MDEgIGxuIDEgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KLXByZWNpc2lvbjogIDk5OTk5OTk5DQotbG54OTAyICBsbiAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi0NCi1wcmVjaXNpb246IDkNCi1tYXhFeHBvbmVudDogICAxMDAwMDAwDQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWxueDkwMyAgbG4gMSAgIC0+ICBOYU4gICAgICAgICAgSW52YWxpZF9jb250ZXh0DQotbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KLW1pbkV4cG9uZW50OiAgIC05OTk5OTkNCi1sbng5MDQgIGxuIDAgLT4gIC1JbmZpbml0eQ0KLW1heEV4cG9uZW50OiAgICA5OTk5OTkNCi1taW5FeHBvbmVudDogIC0xMDAwMDAwDQotbG54OTA1ICBsbiAxICAgLT4gIE5hTiAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OA0KLWxueDkwNiAgbG4gMCAtPiAgLUluZmluaXR5DQotDQotLS0gcGF5bG9hZCBkZWNhcGl0YXRlDQotcHJlY2lzaW9uOiA1DQotbG54OTEwICBsbiAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdA0KLWxueDkwMCAgbG4gIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbG4uZGVjVGVzdCAtLSBkZWNpbWFsIG5hdHVyYWwgbG9nYXJpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24pCitwcmVjaXNpb246IDkKK2xueHMwMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54czAwMiBsbiAgMS4wMDAgICAgICAgICAgICAgLT4gICAwCitsbnhzMDAzIGxuICAyLjcxODI4MTgzICAgICAgICAtPiAgIDEuMDAwMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueHMwMDQgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUwOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54czAwNSBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKworLS0gYmFzaWNzCitwcmVjaXNpb246ICAgMTYKK2xueDAwMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDAwMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIwLjcyMzI2NTgzNjk0NjQxICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDAzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMjY0NDMwMjIyOTIwODY5ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zMDI1ODUwOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDAwNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM1NjY3NDk0MzkzODczMjQgSW5leGFjdCBSb3VuZGVkCitsbngwMDA2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAwMDcgbG4gIDEuMDAwICAgICAgICAgICAgIC0+ICAgMAorbG54MDAwOCBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQwNTQ2NTEwODEwODE2NDQgSW5leGFjdCBSb3VuZGVkCitsbngwMDA5IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkzMTQ3MTgwNTU5OTQ1MyBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorbG54MDAxMSBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitsbngwMDEyIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTMgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUwOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDAxNCBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjM1MTM3NTI1NzE2MzQ3OCAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE1IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMjEwMjQwMzY2OTc1ODQ5ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTYgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxMy44MTU1MTA1NTc5NjQyNyAgIEluZXhhY3QgUm91bmRlZAorbG54MDAxNyBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIwLjcyMzI2NTgzNjk0NjQxICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE4IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbm90YWJsZSBjYXNlcworLS0gbmVnYXRpdmVzCitsbngwMDIxIGxuIC0xRS05ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjIgbG4gLTAuMDAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyMyBsbiAtMC4xICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI0IGxuIC0wLjcgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjUgbG4gLTEgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyNiBsbiAtMS41ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI3IGxuIC0yICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjkgbG4gLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyOCBsbiAtOTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDMwIGxuIC0yLjcxODI4MTgyODQ1OTA0NSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMzEgbG4gLTIuNzE4MjgxODI4NDU5MDQ2IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAzMiBsbiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDMzIGxuIC0wRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwMzQgbG4gLTBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorLS0gb3RoZXIgemVyb3MKK2xueDAwNDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDA0MiBsbiAgMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDQzIGxuICAwRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIGluZmluaXRpZXMKK2xueDAwNDUgbG4gLUluZmluaXR5ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDA0NiBsbiArSW5maW5pdHkgICAgICAgICAgLT4gSW5maW5pdHkKKy0tIG9uZXMKK2xueDAwNTAgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDA1MSBsbiAgMS4wICAgICAgICAgICAgICAgLT4gICAwCitsbngwMDUyIGxuICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKK2xueDAwNTMgbG4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBsb3dlciBwcmVjaXNpb24gYmFzaWNzCitQcmVjaXNpb246IDcKK2xueDAxMDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDEwMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIwLjcyMzI3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTAzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMjY0NDMwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zMDI1ODUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM1NjY3NDkgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAxMDcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MDU0NjUxICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwOCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5MzE0NzIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTEyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi4zNTEzNzUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExNCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIxMDI0MCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTMuODE1NTEgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMC43MjMyNyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExNyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CitQcmVjaXNpb246IDIKK2xueDAxMjEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDEyMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTIzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMi4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM2ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAxMjcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyOCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzNCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTQgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzNyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CitQcmVjaXNpb246IDEKK2xueDAxNDEgbG4gIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDE0MiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTJFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDQgbG4gIDAuMSAgICAgICAgICAgICAgIC0+ICAtMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0NSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAxNDcgbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0OCBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjcgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTAgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MSBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTMgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1NCBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMUUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTYgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1NyBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIGdyb3VwIGxvdy1wcmVjaXNpb24gbG4oMSlzOgorcHJlY2lzaW9uOiAxCitsbngwMTYxIGxuICAxIC0+IDAKK3ByZWNpc2lvbjogMgorbG54MDE2MiBsbiAgMSAtPiAwCitwcmVjaXNpb246IDMKK2xueDAxNjMgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA0CitsbngwMTY0IGxuICAxIC0+IDAKK3ByZWNpc2lvbjogNQorbG54MDE2NSBsbiAgMSAtPiAwCitwcmVjaXNpb246IDYKK2xueDAxNjYgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA3CitsbngwMTY3IGxuICAxIC0+IDAKK3ByZWNpc2lvbjogOAorbG54MDE2OCBsbiAgMSAtPiAwCisKKy0tIGVkZ2UtdGVzdCBsbigyKSBhbmQgbG4oMTApIGluIGNhc2Ugb2YgbG9va2FzaWRlcworcHJlY2lzaW9uOiA0NQorbG54MjAxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEzNCAgSW5leGFjdCBSb3VuZGVkCitsbngyMDIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDkgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDQKK2xueDIwMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxMyAgIEluZXhhY3QgUm91bmRlZAorbG54MjA0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTUgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQzCitsbngyMDUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDEgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MgorbG54MjA3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMCAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMDggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDEKK2xueDIwOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MCAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjEwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQwCitsbngyMTEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOQorbG54MjEzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NiAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzgKK2xueDIxNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwOCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjE2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM3CitsbngyMTcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNgorbG54MjE5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2OCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjEgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzUKK2xueDIyMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjIyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM0CitsbngyMjMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMworbG54MjI1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzYgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK2xueDIyNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjI4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMxCitsbngyMjkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MiAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIzMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorbG54MjMxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1OCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMzIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0NjggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZXh0cmVtZSBpbnB1dCByYW5nZSB2YWx1ZXMKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitQcmVjaXNpb246IDE2CisKK2xueDA5MDEgbG4gMWUtNDAwICAgIC0+IC05MjEuMDM0MDM3MTk3NjE4MyAgSW5leGFjdCBSb3VuZGVkCitsbngwOTAyIGxuIDFlKzQwMCAgICAtPiAgOTIxLjAzNDAzNzE5NzYxODMgIEluZXhhY3QgUm91bmRlZAorbG54MDkwMyBsbiAxZS05OTk5OTkgLT4gLTIzMDI1ODIuNzkwNDA4OTUzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDQgbG4gMWUrOTk5OTk5IC0+ICAyMzAyNTgyLjc5MDQwODk1MyAgSW5leGFjdCBSb3VuZGVkCitsbngwOTA1IGxuIDFlLTEwMDAwMTMgICAgICAgICAgICAgICAgLT4gLTIzMDI2MTUuMDI2NjAwMjU1ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDYgbG4gMmUtMTAwMDAxMyAgICAgICAgICAgICAgICAtPiAtMjMwMjYxNC4zMzM0NTMwNzQgIEluZXhhY3QgUm91bmRlZAorCitsbngwOTEwIGxuIDkuOTk5OTk5ZSs5OTk5OTkgICAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTkzOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTEgbG4gOS45OTk5OTk5ZSs5OTk5OTkgICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwMzYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxMiBsbiA5Ljk5OTk5OTk5ZSs5OTk5OTkgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NSAgSW5leGFjdCBSb3VuZGVkCitsbngwOTEzIGxuIDkuOTk5OTk5OTk5ZSs5OTk5OTkgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTQgbG4gOS45OTk5OTk5OTk5OTllKzk5OTk5OSAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxNSBsbiA5Ljk5OTk5OTk5OTk5OTk5OWUrOTk5OTk5IC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTE2IGxuIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZSs5OTk5OTkgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tcworLS0gUD01MCwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDUwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworbG54MTUwMSBsbiAwLjAwMDk4ODAwOTA2NTc0NDg2Mzg4NjA0NjA4NDc3ODY5ODEyNTE4ODU3MDIzNzY4OTUxIC0+IC02LjkxOTgxODY4NDQwMzM3ODc5OTU5NDUxNDc4MzY5NTU1ODYwMDk1NDg1MTMwNDM2ODkgSW5leGFjdCBSb3VuZGVkCitsbngxNTAyIGxuIDE1OC4xNTg2NjYyNDY2NDYyMzA3MDE4NDU5NTA0NTMwNDE0NTk0OTkwMDcxNDk4NzgyNyAgLT4gNS4wNjM1OTg3NDU4ODk1NjQ3NDU0OTA3ODA2NTA3NTAzODI1NjAyNzU4MzkyMjg3Njg0IEluZXhhY3QgUm91bmRlZAorbG54MTUwMyBsbiAwLjAwNTY1NjYxNDEyMDU5NTcxOTI1MDQwMjg1ODE0MDIxNzk5Nzc1MjQ5Mjg4MzA5MzIxIC0+IC01LjE3NDkyOTc3NzY3NjA2MzIxMDIwNDc1NDAzMDA0OTE1NTA5MzE2NTEzMTg5NzUyMzcgSW5leGFjdCBSb3VuZGVkCitsbngxNTA0IGxuIDAuMDAwMDAwMDY5MTQyMzI1MzI2MjA0ODk2MDIwMDg0MDIwOTE2NjY1NDc5MDMxODA2MDcgLT4gLTE2LjQ4NzA5ODc3MDg3NzgyNTMwODEzODk3NjgxODY4ODc3MTYzODE3MjMzMzAzNDM0NyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDUgbG4gMC4wMDAyNTM4MDM3NDYyMTI5NzY1NzUwNDY2MTU0MDc0OTM1NTI1MTIzMTc3MDA3MDcyMyAtPiAtOC4yNzg5NDkyNDIzMDA1MDAzMjA1MjQyMTYyNzQxNTY5MDMzMTI0MjYwMzIxOTU0NTg5IEluZXhhY3QgUm91bmRlZAorbG54MTUwNiBsbiA4My4wMzM2NTQwNjM4Nzc0MjYyNjExMDg1OTI1OTkxODI0MTg5NTM0NDI2Nzc1NTQ4MDYgIC0+IDQuNDE5MjQ1OTk2MjY0NzEzNzk3Njk0OTI0OTgxMDgxNTY5ODQ2NTAzMTYwOTg0MzY2OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDcgbG4gMC4wMDAwMDAwMDQxNjg2MzIyODA5MjQ4MTY1MTYyNzczNDY2ODQ0MDY2MzY3ODExODcyOSAtPiAtMTkuMjk1Njc3ODQ1MTIyMTQxNzcyNzkxMjk0NTk5NzE0OTUwMTc1Mjg0OTE1NjY2NDMwIEluZXhhY3QgUm91bmRlZAorbG54MTUwOCBsbiAwLjAwMDAwMTQwODQ3ODczMTg3ODIwNTcwMTgxMjE0MjcxOTYwNTExMDgwNTIzNDU3NjY5IC0+IC0xMy40NzMwMDAzNDk1ODE5NjcxODk2NjgzMDUzMTQzODQ5NTIyNTE1NTY4MDk0ODAzMzkgSW5leGFjdCBSb3VuZGVkCitsbngxNTA5IGxuIDY2LjE3NjEwNjU1NTE4MTUyNzEwMTYzMDM1MTEyNzU4Mzk0NDY4OTc1MjA2OTEzMjUyMiAgLT4gNC4xOTIzMTk0Njk2MjMyNTA1ODgzNjY2MTcxMTE2OTY2MTM3Njk0MDEzNDMxNTA0MjUyIEluZXhhY3QgUm91bmRlZAorbG54MTUxMCBsbiAwLjAwMDAwMDAwMDAwMDA5ODk5MDQzNDg3NDAzNTkwOTAwMTExNjAyMDI0NTYyMjk3OTA4IC0+IC0yOS45NDM3NTMxNjY4Nzc4NDA5ODU4MjE1MDgxMTI5MTc5OTE1MDY2NTY1NDUxNzQxNjMgSW5leGFjdCBSb3VuZGVkCitsbngxNTExIGxuIDAuMDAwMDAwMDAwMDAzMjQ2MTgyOTY3MjE3NDcwOTc1MTA0NTMzODg2ODM5MTI3MzM1NjkgLT4gLTI2LjQ1MzU0MTI4MTQ0NDU4NjgxOTAwOTU0NjQxODU3NzUwNzE2MzM2MjU5MDEzOTQyMiBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTIgbG4gNzIuNjQ2OTY4ODE4NDYzNTQ2NDQ5NDk5MTQ3NTc5MDIzNTU1MDA4MzkyODYwNDIzMzg1ICAtPiA0LjI4NTYxMTY2NjA2ODk2NDY4ODI4NTIxMjg4NTM0MjM1NjYyNzY3MTgyMzA0MjY0NzkgSW5leGFjdCBSb3VuZGVkCitsbngxNTEzIGxuIDAuMDAwMDAwMDAwMDAwMDAwNjY3NTU0ODMxMjQ2MzU2MTI1NzQyNjMxNTM4MjU5OTA1MjMgLT4gLTM0Ljk0MjkxMDE0MjgwMjc2OTMxOTI2Mjg3NTA4MDM5ODg1MjQ5MTU4ODcwNzE3MjQ4MyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTQgbG4gNjEuMDAyOTEwNDQ3MjAyMzk4MjA0MTE0OTA5NDUxODUxMTExNDI0NjU3NjcxOTExMDAyICAtPiA0LjExMDkyMTU3NTI4NDMzNzczMjMzNjMxODIwNTE0NDYxNzcwNjY0MzQwMzgwOTY1MjkgSW5leGFjdCBSb3VuZGVkCitsbngxNTE1IGxuIDkxNy4wNjkxNzYxMTMzMTk4MDk5OTIyNzg5MzU4NDAxMDU0NDU0MjMxMjIzOTE3NDc3NCAgLT4gNi44MjExODI5MDY4MzAzMTE0MTI4NzUyNDUzNjYxOTQ2NDQ2OTc5Nzg3ODI2MjgyOTA3IEluZXhhY3QgUm91bmRlZAorbG54MTUxNiBsbiAwLjAwMDAwMDAwMTcwODIzNzk0ODgzNjczMDgzMzU4NTQ5NzQ5MDc4OTcyMDAzOTY1MTk0IC0+IC0yMC4xODc4MDM0MzY5NzYxNTA0NzcyOTcyNDY2NjY3NzE2MjY4MjcwNTcxOTEwMjMwMDQgSW5leGFjdCBSb3VuZGVkCitsbngxNTE3IGxuIDAuNTM3MzE3Njc4NDUzNTgyMjQ0NDU4MDk3NjEzMTUxNTkyNDk4OTg1NjY1NDI5MTA2NDkgLT4gLTAuNjIxMTY1Nzc5Mzk5Njg0MDkyMTE3MzY0MTM2MjgyMzYyODUxNjAwNDgzNTcwMDA5NjEgSW5leGFjdCBSb3VuZGVkCitsbngxNTE4IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDg5NjUyOTEzOTI4ODI4MDQxNjEyOTk3NTg3MDgwMzMzNzMgLT4gLTM2Ljk1MDU4NTk3MDk4MDg1NzM3NjA4MTI2NTA3MzI3NjMwMzY3MDgyMDA1NjkxNjIwNiBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTkgbG4gMC4wMDAwMDAwMDAwNjk5MDI0NDkxNjAyNjQyOTkwNDQ5ODI3ODk4MjUzMDE3MDI5NTY2OCAtPiAtMjMuMzgzOTIwNDI5MjQ0NDU3NTc4MzczNTIzNTA4NDI3NzgzMTQ0NTg5NDgwNDIwNzUzIEluZXhhY3QgUm91bmRlZAorbG54MTUyMCBsbiA0LjAzMTI1NDI5NzcwNzAzMDAwNzA1MDYwNjQ2NjY1MzY0NzgzNzM4MDE5ODg1NDA2MTQgIC0+IDEuMzk0MDc3NTY3NjU5MjQ1MTk0NTc5NTc1Mjc5NjQyMTM5MTg3MTMwMjAyNDc2MzMwNSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjEgbG4gMjcxLjg0OTkxMzExNTUxODc1NjAxNDMyNTE4ODE5NTYyMzkxNjk5MzI0NjMyMzk2NDIzICAtPiA1LjYwNTI1MDEyMzk4NzM4NjI1MTc5MTY2Nzk3NDcxNDY1Mzk4MDgwNzc0MzE4NzM0NzggSW5leGFjdCBSb3VuZGVkCitsbngxNTIyIGxuIDcuNDExODY3MTYyOTM3Mzg2NDY2NzIyOTQ0NTc0Njg2MjMxNDQ0Mzg5NTQwNDgxODY4OSAgLT4gMi4wMDMwODIzODYzNzA2MzQ0NjI4MjM5MTQ3NjM5MzE4Mjg5OTYxOTE3MDYwMTIxMTQxIEluZXhhY3QgUm91bmRlZAorbG54MTUyMyBsbiAwLjAwMDAwMDAwMDAwMDAyMDI2MzExNDUyNjI1MzY0OTA1MzU3MzIxNjY0MTg2MDM0MjU4IC0+IC0zMS41Mjk5NzQxODAwNTQ0Mzg3OTIwNDM4NTY4NzczMTQwNDM3OTQzMjA5NTExMzQ3NTQgSW5leGFjdCBSb3VuZGVkCitsbngxNTI0IGxuIDAuMDAwMDAwMDAwMDAwMDk1NjMzOTg2NTEyNjE3NTY5NTIzOTgyNTA2MjQ3Mzc4MDkzNDcgLT4gLTI5Ljk3ODI0ODEzMDU3Njk3Mjk1MzE0MTI4NDEzNjk2MjY3MDAyMTM2ODgzNDc5MjU3OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjUgbG4gMC4wMDAwMDAwMDAwOTU1Njc3MjY2OTQwOTg1ODY1MzAyNjU1ODIyMzQ2NTE5NzgwODk5MSAtPiAtMjMuMDcxMTg1OTM5NzQ4Mjg1NTQxMjI4MjA2MTYxNDcyOTU2NjYxMTk2OTU2NzQxMTg2IEluZXhhY3QgUm91bmRlZAorbG54MTUyNiBsbiA2Ljg0NDE2NDgyOTgwMjczMDEyOTIzNDIwNTcyNDg3MzczMjYxNTIyNTA3OTQwMjY3NjEgIC0+IDEuOTIzMzk2NDM5NTgwMTk0NjU5NzI3MjU4OTQ3MzQxNzk0ODAyNDM2MTAwNTA4MjkwOCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjcgbG4gMC4wMDAwMDAwMDAwMDA3MzA1OTY5OTg4NDQzOTk3OTM5NDk0NTgyMjAzNTcwNDI2NDU3NyAtPiAtMjcuOTQ0OTE0Mzg4MzUzNzI0NzE4ODM2MTAxODI4Njc3NzcxOTY3MTI4NTA5NjAzMTU4IEluZXhhY3QgUm91bmRlZAorbG54MTUyOCBsbiAwLjAwMDAwMDAwMDAwMDAwMDAyNjEwMDc4MjgwNDE5MDgyMjYzMTM4MDY0NzQ1NDE2Nzg3IC0+IC0zOC4xODQ1NjYzNjc1MTYyMDc4ODU1NzM3NzMzMjAxMzU5NjU3OTg3MTcxMjA3MzUxMTUgSW5leGFjdCBSb3VuZGVkCitsbngxNTI5IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDAxNTAyNTk1MTcxNjYyOTQyNDMwODg1NDY4MDYwODMyODMgLT4gLTQxLjAzOTMzNzk0NjI2NjY3NjEwODUzODE3MDgzNzU4MDA1MTY5OTYxODMzNDkyODQyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzAgbG4gMC4wMDAwMDAwMDAwMDAwMDA4NzkxOTE2MDU0MTcxNDU4MDcwNzE4MTk2OTcwODUwMjA5MSAtPiAtMzQuNjY3NTI4ODE4ODI3NjcxNTA3NTE0MzE5NzQ0MDQ3NDQwNjk2MTg3MzU4Njc2ODQ4IEluZXhhY3QgUm91bmRlZAorbG54MTUzMSBsbiAwLjAwMDAwMDAwMDAwMzk1NzI2NzI1MTIwNzg3NzYzMjcxODQ5NTc3NzA4MDY4NTg0NTk4IC0+IC0yNi4yNTU0Njc0MTY5NjEzNTc3NDE4MTg3MzU3ODcyMjY2NzE5Mzg2Nzg0MjQ3NDg0MzEgSW5leGFjdCBSb3VuZGVkCitsbngxNTMyIGxuIDAuMDAwMDAwMDAwMDIwMTQzMzQ5MDE2NjkzNjYyMTgwMTgzNzcyMTMxNTA3MTU5MzgzNTUgLT4gLTI0LjYyODE0Njk1NTYzNTM1OTAzNTI4OTEyMzAyNzMxOTk2OTIwMTY5MzczNzE1OTEwOCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzMgbG4gMC4wMDAwMDAwODA5NzkyNzEwMTEwMTA5MzExNzc1MzkzODc2NjI0MTQ0Mjg5NjAzMDYzNyAtPiAtMTYuMzI5MDcyNjI4NDY5NzE1MTc4NjM3MTc4MzY1NzEwMzczMzk4MjAzMTkwOTM3NDU0IEluZXhhY3QgUm91bmRlZAorbG54MTUzNCBsbiAwLjAwMDAwMDAwMDAwMDE3MTE1ODM0MTYyNjMyODY0MzkyMDM5NjY4MTE2MjQzOTg0MTc2IC0+IC0yOS4zOTYxODcyOTI0MzQ4OTgyMjU0NTM2MjY3OTQ0NTkyODUxNTcyNjMxNzc1MjgwMzQgSW5leGFjdCBSb3VuZGVkCitsbngxNTM1IGxuIDAuMzkxNjgzMTc1OTM4NjYzMzQwODczMDU0NTk5MzM3MjM4NjQyOTQ4NTcwODYxMDUwMzUgLT4gLTAuOTM3MzAxOTkwNjI3NTcyNDA0ODU4MzY2MzczMDY3ODUwMzczNjg3NDY3Mzc2OTMwMjkgSW5leGFjdCBSb3VuZGVkCitsbngxNTM2IGxuIDc5LjMzNTAzNjc5ODk3MTUxNTAyNjUxOTYzMDEwMzMyNTM2OTcyOTYzNzUxNDEyNzYxNyAgLT4gNC4zNzM2Nzk4NTcwMjg3ODI4ODIzNzcyMTQ5NzM1MTcwNDMxMDEwNjE2OTYxOTc2OTY1IEluZXhhY3QgUm91bmRlZAorbG54MTUzNyBsbiAwLjAwMDAwMDAwMDAwMDAwMDU2MDA0OTUyMTI5OTI2MTM3NDEzNjAyMTE2NTkxNDkzNjI1IC0+IC0zNS4xMTg1MDY0NjMxODE4NzAwMjA3MzA2ODU4ODQzMzMwMDAyNDEwMzkwMjgxMjcyMTMgSW5leGFjdCBSb3VuZGVkCitsbngxNTM4IGxuIDAuMDAwMDAwMDYwMDYwMzU5MDc4NDM4OTA5MTg4MzI0ODEwOTk2NjA2Mzk1NTM2NjYwNzggLT4gLTE2LjYyNzkxNTc5NTc0NzExMjU2NjUzMjcwNTk3NDg1MzExNDQ1NDQwNTAxMDQ3MjA0MyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzkgbG4gMC4wMDAwMDAwMDA4NTI0MjAyNDkzNzQxNDkwNjM3MTMzMzgyNjU3NDYzMjQ1MDU4NzU5MCAtPiAtMjAuODgyOTQxNDYwMjY4MTAxMDgwMTg2NDgyMjMwNjU3Nzc0OTk3MjczNDk0MTA3MjIxIEluZXhhY3QgUm91bmRlZAorbG54MTU0MCBsbiAwLjAwMDAwMDAwMDAwMDQzNjcxMDk5NDk5MjYyMzUwMzE2MTczMjQ2NTUwNzcxOTUxNTYxIC0+IC0yOC40NTk1MDQ3NTcyODU2MzkyMjE3NzYzMDU5Njg0NjkwNTg4NTQ1NTg3MjY1OTM5NDUgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9MzQsIHdpdGhpbiAwLTk5OQorUHJlY2lzaW9uOiAzNAorbG54MTIwMSBsbiAwLjAwODY3MzI4ODA4MTU5MjcxODI5OTc1NjY4MTAzMzQzOTQgLT4gLTQuNzQ3NTA3MzExOTIwODQ0NzUyNDg2OTM4MTg3OTczNzIxIEluZXhhY3QgUm91bmRlZAorbG54MTIwMiBsbiAwLjAwMDcxMDQxMDM2OTM0NjAyNjA2MDk3OTIyMjI1Njk4NTQgLT4gLTcuMjQ5NjY3NzY5OTAzNTAzMDIzMDA1NTQ5MjUwMzQ3Njk1IEluZXhhY3QgUm91bmRlZAorbG54MTIwMyBsbiA3ODYuODM5ODk0NTM4NTEwNTE5MDY5NzU0MTQ5MzM5Mjc0MiAgLT4gNi42NjgwMjQ3OTAwMzE4MzYzNDA0NzE4MjQxNDcwMTA1NDYgSW5leGFjdCBSb3VuZGVkCitsbngxMjA0IGxuIDAuNzcyMzA3MzYyMDI4MjY4NzY1Njg5NTE5MDE3MTk2NzM5OSAtPiAtMC4yNTgzNzI2NzA4NTA2ODUwODY4Nzg2ODE2MjM4MjE3MzI2IEluZXhhY3QgUm91bmRlZAorbG54MTIwNSBsbiAwLjAwNjEwNTc5NTE1MTcxOTc2MzEyODcxODM5Mzg0MTIyMDAgLT4gLTUuMDk4NTE2OTMzOTE4Nzk3MzQ3MDY0NDU0MTAzNzQyNjM1IEluZXhhY3QgUm91bmRlZAorbG54MTIwNiBsbiAwLjYxODEzNzk3MDgxODQzOTM3MzAxMDM5MTc1NjI0OTg3NDUgLT4gLTAuNDgxMDQzNTkyNjkwMzM2NTA4NzQ2MzM4Nzc2MDM1MDAyMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDcgbG4gMDkuMTM4ODgyNjEyMjkwMzk5ODkxMTA3NTMzODkwOTY3NjAgIC0+IDIuMjEyNTM4MTI1NTA3OTc1NTc0NTA5NTYzMDI3Njk2MDIxIEluZXhhY3QgUm91bmRlZAorbG54MTIwOCBsbiA4MDIuMDEwNTQxNzA2MzE0MzY5NjQ5NzI5MjE1ODE0NzE3NCAgLT4gNi42ODcxMjE3NTIwNTIzNDE3MzcyMzQ4MzIyMDMzNTAyMTQgSW5leGFjdCBSb3VuZGVkCitsbngxMjA5IGxuIDc3OC43NzQ5NzEwMzg3NzczNzEzNTIzMDI4NDk3MzMzMDU4ICAtPiA2LjY1NzcyMjEzNTEyNjkzNTQ3MjA4NjYyNTAzMTQxMzAzMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTAgbG4gMC4wMDI0NDU3Mjk1ODk1MzQ2NTAyNTEzNTY3Njc5MzkwNjE2IC0+IC02LjAxMzQxMTc5OTk0MDI0NTM0NTMyMTM0ODI5MDM5ODUxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTEgbG4gMC4wMDAwNTExMjk2OTQ3ODcyODI4MzEwMzM4ODY0MjE3ODYwIC0+IC05Ljg4MTE0NTExODIzNzI4MTc5ODA4MTU3MzEzMTcxMTYzNiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTIgbG4gMC4wMDAwMjQ2ODAzNTA4NjAyNTU0OTI0OTM4Njg1MTU1NjU4IC0+IC0xMC42MDk1MDMxNDI2NDgyNTY2MTgyNTM2MDk3MTQzMDIxOCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTMgbG4gOS4wMjc4OTgxOTkyNTM1MTE2NjgyNDI5Nzc3NjY2MTYwODIgIC0+IDIuMjAwMzE5NTgyNzc4ODk5MDI5Nzg2MDE3ODMwNTU3MjkzIEluZXhhY3QgUm91bmRlZAorbG54MTIxNCBsbiAwLjA5OTE4MTIzOTY1NDI1MDU2MzE4NTA2OTI4MDA5MDQxODggLT4gLTIuMzEwODA2Mzk4OTY0NjcyMjU4ODIzMDQzMTgwNDAwMzg0IEluZXhhY3QgUm91bmRlZAorbG54MTIxNSBsbiAwLjAwMDAwMDAwMDAwNzAyMzg4MTAxNDMwMjg4MTEyMjM5MjQgLT4gLTI1LjY4MTcwNTE5OTYxNjM2NjQ3MTc0NzE0NTM4MjkwMDc1IEluZXhhY3QgUm91bmRlZAorbG54MTIxNiBsbiAyLjYzMDEwMTY2NTM0MjgyNjQ5NDczMDM5NDcyOTMxMzE2NyAgLT4gMC45NjcwMjI1MDE0NjY0MzY3NDY1MTI4MjQzMDM5NzQ5NTU5IEluZXhhY3QgUm91bmRlZAorbG54MTIxNyBsbiAwLjAwNTY4Nzg5Mjg1OTQzNTk1ODc2OTE1MjYwNjMyNTQ2ODMgLT4gLTUuMTY5NDE1NDIyOTA0MDM3ODE5NzM2NjM3Mzk5NDQ1MDk2IEluZXhhY3QgUm91bmRlZAorbG54MTIxOCBsbiA1NjcuMzQzNjA0NzEyMTA1Nzg0MzkwODEwNjU3MzA5NTU5MCAgLT4gNi4zNDA5NjUxMjQ5NjQyNTg0ODY0NjM0NDQzNjA3ODc5NzAgSW5leGFjdCBSb3VuZGVkCitsbngxMjE5IGxuIDEuMTk5MjkxMjQ4MTI0NjU1OTk2NjE0NjA1NzQ1NjQ5NzI1ICAtPiAwLjE4MTczMDc1NTc0MjU5MTE4MDU3NjUwODc3NTU2NzU2NTcgSW5leGFjdCBSb3VuZGVkCitsbngxMjIwIGxuIDI1LjAyMDUwNDQ4NTgyMDMxMDk4Njk2MjY3NDc5MTM1NTU3ICAtPiAzLjIxOTY5NTY2ODEzNzY1OTEzOTU0NDE3ODkwNTQ1OTMxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjEgbG4gMC4wMDAwMDAwMDAwMDA5OTM5NTk3MDIzNTU4NzU2OTYxMzAwIC0+IC0yNy42MzcwNzk3Mjk5NjUzNzYzNjUwNDM5NjU1ODI1OTA1OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjIgbG4gMC4wMDAwMDA3OTg4NTUxNjcwMTU5NDI5NzE2NTA2NDMwNDAzIC0+IC0xNC4wNDAwODYxNzU0MjU5NzIzMDk4ODE5ODYxMjM3NjQxNSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjMgbG4gNC42ODE1MTU4MDAxNzYxMjkxODQ4NzM3NzA2MDU1ODk3OTUgIC0+IDEuNTQzNjIxOTQ2NDE1MzgzMzM4OTcyMTI0NDQ1NDQ1NzQ4IEluZXhhY3QgUm91bmRlZAorbG54MTIyNCBsbiAxNS45NTEyNjY2OTE2MTEwMzAxMTIwNjY1ODc0OTM0NTc4MSAgLT4gMi43Njk1MzgyNDI0Nzk0ODM1MzkyNzU5ODYzOTU0NDM1MzkgSW5leGFjdCBSb3VuZGVkCitsbngxMjI1IGxuIDAuMDMwMTYyNjc4MzkyMjIxMTIxMzY3NTQ1NzI3OTA3NjA2NiAtPiAtMy41MDExNDk5MzM2NzcyODMzNDEwMjM5MzIyODE4MjYzNDEgSW5leGFjdCBSb3VuZGVkCitsbngxMjI2IGxuIDAwMC4wMDQwNTQ0MDY0ODgxODIxNzcwNTI4NDc1MTg1Njc0ICAtPiAtNS41MDc5NTA5Njc1NTcwMjE2NzE2NDcxNjU4ODk2MDgzMjQgSW5leGFjdCBSb3VuZGVkCitsbngxMjI3IGxuIDI5LjAxNjE3MDk1OTM1NTkzNzkyMDk1OTEzNzg1MTAwMzYwICAtPiAzLjM2Nzg1MzI5Mzg2Mjc0NTY1MTg4ODQ1MDAwNDQ3MzI5NyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjggbG4gNzguMDE4MzYxNjczNDQ3MzY3MzMwMjQ4MDQyNDMxOTUzMjMgIC0+IDQuMzU2OTQ0MjA1MDU1NzY4NTc1OTg3NzgxMzc1MDAzOTkyIEluZXhhY3QgUm91bmRlZAorbG54MTIyOSBsbiAwLjAwMDAwMDAwOTY1NDUzMTkzMTY5NjUzMjExNTg2MzQ4OTMgLT4gLTE4LjQ1NTgzODQwMTYwOTY1ODE0NDYyMDk1NDc3MzY1MDEzIEluZXhhY3QgUm91bmRlZAorbG54MTIzMCBsbiA5Ny45NTQ3NTIzNzcyMDU3OTc1Mjc3MDU4NzE4NTA3NDQyOCAgLT4gNC41ODQ1MDU2NjE2MTI4MTI3NDIyMDg2MTkzNTgyMTQ3MjkgSW5leGFjdCBSb3VuZGVkCitsbngxMjMxIGxuIDUyOC4wNjA5MjYyMDUwNDIzMjQ2NDAyNTY0MjI4NDMyMzcxICAtPiA2LjI2OTIxMTY2NzU4OTEzODExMzM5NjU4Mzg5NDMxNTk1NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzIgbG4gMC4wMDAwMDAyMjUwMDY0MzQ5NzMyOTY5Njk2NjYwNDUyOTcyIC0+IC0xNS4zMDcxMzY4MzUyNjk2Mzk5NjcxMjE2NzcwMTczODcyNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzMgbG4gNDcuOTcwNjM2Mzc3Njc5OTg2NTg1NjcxOTkwNDk3MjU3NTQgIC0+IDMuODcwNTg5MDgxNTg1NjYwNjkyMTk1OTg5ODU0ODQyMzcyIEluZXhhY3QgUm91bmRlZAorbG54MTIzNCBsbiAwLjAwMDUzOTQzMTEzNDQ1NDE0MzIzMTg4NTM1MTM0MTQzNjEgLT4gLTcuNTI0OTk1NDI4MzkzOTI1OTM0MDg3MTI2NzAyOTc0MTIxIEluZXhhY3QgUm91bmRlZAorbG54MTIzNSBsbiAwLjAwMDAwMDAwOTA5NzMzODU2NDk1Njc0NzE2NzQ5NzI2MzMgLT4gLTE4LjUxNTI4MzkzMTU4OTMxNzgzNDQ3MDM1MDA0MTI1NzkxIEluZXhhY3QgUm91bmRlZAorbG54MTIzNiBsbiAwLjAwMDAwMDAwMDAyMzg3NzY0OTAyMjc1NzYxOTczMTc5NzcgLT4gLTI0LjQ1ODA3ODI4MTg4Mzg5NTYxMzMxMTU4ODc5MjA3MjYyIEluZXhhY3QgUm91bmRlZAorbG54MTIzNyBsbiAwLjAwMDAyMzY1ODcwMDAyMzE5MjE1MzIxNDUzMjYyMTg3NTggLT4gLTEwLjY1MTc3OTY0NDk5ODIzMzE0OTUyNDI5Mjc3OTc5MDM0IEluZXhhY3QgUm91bmRlZAorbG54MTIzOCBsbiA0OTkuMTI3NzQ0ODg0NjEzMDcwOTgyNzE1NDU1NjEyNTk0MiAgLT4gNi4yMTI4NjIwNjQ3NjE0Mjc5Njc0NjExODgwODM1MTQ3NzQgSW5leGFjdCBSb3VuZGVkCitsbngxMjM5IGxuIDAuMDAwMDAwMzk2MDE5MjMwMDI4NDc4NzY2MzcxMjQxNzY0NyAtPiAtMTQuNzQxODAzMDY2MTkyOTg1NDgwOTM2OTc2MDgyOTMyODQgSW5leGFjdCBSb3VuZGVkCitsbngxMjQwIGxuIDQxLjA4MjY4MzUwODI5NDc3NDUxNjY3MjI4ODkyNDk1MTM2ICAtPiAzLjcxNTU4NjcwNjg4NzI3ODAzOTE3MzU4NDg1OTIxODk2MCBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD0xNiwgd2l0aGluIDAtOTkKK1ByZWNpc2lvbjogMTYKK2xueDExMDEgbG4gNy45NjQ4NzUyNjEwMzM5NDggIC0+IDIuMDc1MDQxMjgyMzUyMjQxIEluZXhhY3QgUm91bmRlZAorbG54MTEwMiBsbiAxMy41NDUyNzM5Njg0NTM5NCAgLT4gMi42MDYwMzc3MDE4NzAyNjMgSW5leGFjdCBSb3VuZGVkCitsbngxMTAzIGxuIDAuMDAwODAyNjU1NDM0MTMzMSAtPiAtNy4xMjc1ODUwMzQzMjE4MTQgSW5leGFjdCBSb3VuZGVkCitsbngxMTA0IGxuIDAuMDAwMDAzMDU4MjIzMzI2MSAtPiAtMTIuNjk3Njc2NDIzMDA2MjUgSW5leGFjdCBSb3VuZGVkCitsbngxMTA1IGxuIDAuMDAwNDQ3NzQ5NzUwOTY3MiAtPiAtNy43MTEyNzYwNzMyMTA3NjYgSW5leGFjdCBSb3VuZGVkCitsbngxMTA2IGxuIDcuNjE2MjY4NjIyNDc0MzcxICAtPiAyLjAzMDI4NjU2NzY3NTE0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDcgbG4gNTEuNTgzMjk5MjU4MDYzODEgIC0+IDMuOTQzMTk3OTYyMzA5NTY5IEluZXhhY3QgUm91bmRlZAorbG54MTEwOCBsbiAwLjAwMTgxOTc0OTc5NTEyNjMgLT4gLTYuMzA5MDU2MjYyNTQ5MzQ1IEluZXhhY3QgUm91bmRlZAorbG54MTEwOSBsbiAyLjk1NjI4MjQ1NzA3Mjk4NCAgLT4gMS4wODM5MzI1NTIzMzQ1NzUgSW5leGFjdCBSb3VuZGVkCitsbngxMTEwIGxuIDAuMzg0MzMyNTU3OTE4OTkwNiAtPiAtMC45NTYyNDcwNjQ5NDAwNTU4IEluZXhhY3QgUm91bmRlZAorbG54MTExMSBsbiAwLjAwNzQ0NjYzMjkyNjU2NjMgLT4gLTQuODk5OTkzMzA0OTE5MjM3IEluZXhhY3QgUm91bmRlZAorbG54MTExMiBsbiAwLjAwMDMzNzI0Nzg1MzI5OTMgLT4gLTcuOTk0NjkyNDI4MjA2Mzc4IEluZXhhY3QgUm91bmRlZAorbG54MTExMyBsbiAwLjAwODQ3OTIyNjMxNjc4MDkgLT4gLTQuNzcwMTM2MDY5NTY5MjcxIEluZXhhY3QgUm91bmRlZAorbG54MTExNCBsbiA1LjkyNjc1Njk5ODE1MTEwMiAgLT4gMS43Nzk0NzcxODI4MzQzMDUgSW5leGFjdCBSb3VuZGVkCitsbngxMTE1IGxuIDkuMDI1Njk5MTUyMTgwODk3ICAtPiAyLjIwMDA3NTk2OTYwNDExOSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTYgbG4gMS45MTAxMjQ2NDM1MzM1MjYgIC0+IDAuNjQ3MTY4NDk4MzIzODE4MyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTcgbG4gMC44MTU4OTIyNzExNDExMDIwIC0+IC0wLjIwMzQ3Mjk1MzM5MzkzODcgSW5leGFjdCBSb3VuZGVkCitsbngxMTE4IGxuIDAuMDA2NzA4MDAxNjQ3NTMyMiAtPiAtNS4wMDQ0NTQxODk0MTQxMzkgSW5leGFjdCBSb3VuZGVkCitsbngxMTE5IGxuIDAuMDA0NzU4MzI0MjA5MjcxNiAtPiAtNS4zNDc4NTk3Mjk2MDEwOTQgSW5leGFjdCBSb3VuZGVkCitsbngxMTIwIGxuIDAuMDM4NjY0NzQxMTY0MTMzOSAtPiAtMy4yNTI4MjcxNzUyNjMxMTMgSW5leGFjdCBSb3VuZGVkCitsbngxMTIxIGxuIDAuMDA1MDIyNjQyNzg0MTc2MSAtPiAtNS4yOTM3OTkwMzI3NzQxMzEgSW5leGFjdCBSb3VuZGVkCitsbngxMTIyIGxuIDYuOTI3OTM3NTQxNjM3MjYxICAtPiAxLjkzNTU2MjE1NTg2NjkwNiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjMgbG4gMC4wMDAwMDk1NzQ1MzQzNTEzIC0+IC0xMS41NTY0MDM2NTU3OTgxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjQgbG4gMS42MDI0NjU0OTI5NTY1MzggIC0+IDAuNDcxNTQzMzc2MzI0MzkzNiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjUgbG4gMzguOTg0MTU2MjUwODc1MzUgIC0+IDMuNjYzMTU1MzEzNjEwMjEzIEluZXhhY3QgUm91bmRlZAorbG54MTEyNiBsbiA1LjM0MzE4MjA0MjI3NjczNCAgLT4gMS42NzU4MjEzNjM1NjgxMTIgSW5leGFjdCBSb3VuZGVkCitsbngxMTI3IGxuIDU1Ljg5NzYzNzAzMjQ1ODE2ICAtPiA0LjAyMzUyMjEwNzkzNDExMCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjggbG4gMC43NDQ1MjU3ODEwMjgwODQ3IC0+IC0wLjI5NTAwNzc5ODgxMDEwMzAgSW5leGFjdCBSb3VuZGVkCitsbngxMTI5IGxuIDEuNjMxNDA3MzE0OTQ2MDk0ICAtPiAwLjQ4OTQ0MzAyNTcyMDEyNDggSW5leGFjdCBSb3VuZGVkCitsbngxMTMwIGxuIDAuMDAwNTQ2MjQ1MTkzMjYwMiAtPiAtNy41MTI0NDI2MTExMTY4NTIgSW5leGFjdCBSb3VuZGVkCitsbngxMTMxIGxuIDAuMDAwMDg2NDE3MzI2OTM2MiAtPiAtOS4zNTYzMjIzNTkwMTczMTcgSW5leGFjdCBSb3VuZGVkCitsbngxMTMyIGxuIDUuMjI3MTYxNzE5MTMyODQ5ICAtPiAxLjY1Mzg2ODQzODQzOTYzNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzMgbG4gNjAuNTcwNzg0NjY5NDE5OTggIC0+IDQuMTAzODEyNjc1NjYyNDUyIEluZXhhY3QgUm91bmRlZAorbG54MTEzNCBsbiAwLjA5OTI4NjQzMjUzMzMxNjAgLT4gLTIuMzA5NzQ2MzQ4MzUwMzE4IEluZXhhY3QgUm91bmRlZAorbG54MTEzNSBsbiAwOS40ODU2NDI2ODQ0NzMyNSAgLT4gMi4yNDk3NzkzNTkwNzQ5ODMgSW5leGFjdCBSb3VuZGVkCitsbngxMTM2IGxuIDAuMDAzNjEwNjA4OTM1NTYzNCAtPiAtNS42MjM4Nzg4NDA2NTA3ODcgSW5leGFjdCBSb3VuZGVkCitsbngxMTM3IGxuIDEuODA1MTc2ODY1NTg3MTcyICAtPiAwLjU5MDY1ODU3MzQ1OTM3MDcgSW5leGFjdCBSb3VuZGVkCitsbngxMTM4IGxuIDYyLjU5MzYzMjU5NjQyMjU1ICAtPiA0LjEzNjY2MzU1NzIyMDU1OSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzkgbG4gNC4zNzM4MjgyNjExMzcyMDEgIC0+IDEuNDc1NjM4NjU3OTEyMDAwIEluZXhhY3QgUm91bmRlZAorbG54MTE0MCBsbiAwLjk5NDQ4MzUyNDE0ODczOCAgLT4gLTAuMDA1NTMxNzQ3Nzk0OTM4NjkwIEluZXhhY3QgUm91bmRlZAorCistLSBQPTcsIHdpdGhpbiAwLTkKK1ByZWNpc2lvbjogNworbG54MTAwMSBsbiAwLjA5MTIwMjUgLT4gLTIuMzk0NjczIEluZXhhY3QgUm91bmRlZAorbG54MTAwMiBsbiAwLjk3Mjg2MjYgLT4gLTAuMDI3NTEyNDIgSW5leGFjdCBSb3VuZGVkCitsbngxMDAzIGxuIDAuMzg4NjAzMiAtPiAtMC45NDUxOTY1IEluZXhhY3QgUm91bmRlZAorbG54MTAwNCBsbiA4Ljc5ODYzOSAgLT4gMi4xNzQ1OTcgSW5leGFjdCBSb3VuZGVkCitsbngxMDA1IGxuIDIuNDU5MTIxICAtPiAwLjg5OTgwNDAgSW5leGFjdCBSb3VuZGVkCitsbngxMDA2IGxuIDIuMDEzMTkzICAtPiAwLjY5OTcyMjAgSW5leGFjdCBSb3VuZGVkCitsbngxMDA3IGxuIDkuMDY0ODU3ICAtPiAyLjIwNDQwNSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDggbG4gNS43OTY0MTcgIC0+IDEuNzU3MjQwIEluZXhhY3QgUm91bmRlZAorbG54MTAwOSBsbiAwLjExNDM0NzEgLT4gLTIuMTY4NTE3IEluZXhhY3QgUm91bmRlZAorbG54MTAxMCBsbiAwLjUzNDE1NDIgLT4gLTAuNjI3MDcwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTEgbG4gNi42OTM3ODEgIC0+IDEuOTAxMTc5IEluZXhhY3QgUm91bmRlZAorbG54MTAxMiBsbiAwLjAwODE3NzkgLT4gLTQuODA2MzIwIEluZXhhY3QgUm91bmRlZAorbG54MTAxMyBsbiA4LjMxMzYxNiAgLT4gMi4xMTc4OTUgSW5leGFjdCBSb3VuZGVkCitsbngxMDE0IGxuIDMuNDg2OTI1ICAtPiAxLjI0OTAyMCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTUgbG4gMC4xODAxNDAxIC0+IC0xLjcxNDAyMCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTYgbG4gMC41MjI3MTQ4IC0+IC0wLjY0ODcxOTMgSW5leGFjdCBSb3VuZGVkCitsbngxMDE3IGxuIDcuODE4MTExICAtPiAyLjA1NjQ0MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTggbG4gMC4wODcwNjcxIC0+IC0yLjQ0MTA3NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTkgbG4gOC4xNTM5NjYgIC0+IDIuMDk4NTA0IEluZXhhY3QgUm91bmRlZAorbG54MTAyMCBsbiAyLjA0MDk3NSAgLT4gMC43MTM0Mjc2IEluZXhhY3QgUm91bmRlZAorbG54MTAyMSBsbiAxLjQ4MTY0MiAgLT4gMC4zOTMxNTA5IEluZXhhY3QgUm91bmRlZAorbG54MTAyMiBsbiAwLjI2MTAxMjMgLT4gLTEuMzQzMTg4IEluZXhhY3QgUm91bmRlZAorbG54MTAyMyBsbiAwLjQ2NjcyMyAgLT4gLTAuNzYyMDE5MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjQgbG4gMC4wNTE4NzU2IC0+IC0yLjk1ODkwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjUgbG4gMi4wNTY0MTAgIC0+IDAuNzIwOTYxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjYgbG4gMC4xODE1MjIgIC0+IC0xLjcwNjM3OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjcgbG4gMC41MTU1NTEgIC0+IC0wLjY2MjUxOTAgSW5leGFjdCBSb3VuZGVkCitsbngxMDI4IGxuIDguNDI1MDg5ICAtPiAyLjEzMTIxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjkgbG4gMi4wNzcwOTEgIC0+IDAuNzMwOTY4NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzAgbG4gNi4yMTI3MDUgIC0+IDEuODI2NTk2IEluZXhhY3QgUm91bmRlZAorbG54MTAzMSBsbiA1LjcyOTM0MyAgLT4gMS43NDU2MDEgSW5leGFjdCBSb3VuZGVkCitsbngxMDMyIGxuIDQuODMxMjUxICAtPiAxLjU3NTEwNSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzMgbG4gMi4wMjk3NjAgIC0+IDAuNzA3OTE3NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzQgbG4gOC42MTUwNjAgIC0+IDIuMTUzNTEyIEluZXhhY3QgUm91bmRlZAorbG54MTAzNSBsbiAwLjA2MTE1MTEgLT4gLTIuNzk0NDA3IEluZXhhY3QgUm91bmRlZAorbG54MTAzNiBsbiA1LjE5NTI2OSAgLT4gMS42NDc3NDggSW5leGFjdCBSb3VuZGVkCitsbngxMDM3IGxuIDkuNjE3Njg2ICAtPiAyLjI2MzYwNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzggbG4gMC4wMDQ5MzgyIC0+IC01LjMxMDc1NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzkgbG4gMi43ODY4NDAgIC0+IDEuMDI0OTA4IEluZXhhY3QgUm91bmRlZAorbG54MTA0MCBsbiAwLjAwOTEwNzMgLT4gLTQuNjk4Njc5IEluZXhhY3QgUm91bmRlZAorCistLSBmcm9tIGhlcmUgMy1kaWdpdCB0ZXN0cyBhcmUgYmFzZWQgb24gcmV2ZXJzZSBleHAgdGVzdHMKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCitsbngwMDEgIGxuIDAgICAgICAgICAgIC0+ICAtSW5maW5pdHkKK2xueDAwMiAgbG4gMC4zNjc4Nzk0NDEgLT4gIC0xLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDAzICBsbiAxICAgICAgICAgICAtPiAgIDAKK2xueDAwNSAgbG4gMi43MTgyODE4MyAgLT4gICAxLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDA2ICBsbiAyLjAwMDAwMDAwICAtPiAgIDAuNjkzMTQ3MTgxICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDcgIGxuICtJbmZpbml0eSAgIC0+ICAgSW5maW5pdHkKKworLS0gdGlueSBlZGdlIGNhc2VzCitwcmVjaXNpb246ICAgNworbG54MDExICBsbiAxLjEwNTE3MSAtPiAgMC4xMDAwMDAxICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyICBsbiAxLjAxMDA1MCAtPiAgMC4wMDk5OTk4MzUgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzICBsbiAxLjAwMDAxMCAtPiAgMC4wMDAwMDk5OTk5NTAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0ICBsbiAxLjAwMDAwMSAtPiAgOS45OTk5OTVFLTcgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1ICBsbiAxLjAwMDAwMCAtPiAgMAorCistLSBiYXNpYyBlPTAsIGU9MSwgZT0yLCBlPTQsIGU+PTggY2FzZXMKK3ByZWNpc2lvbjogICA3CitsbngwNDEgIGxuIDIuNzE4MjgyICAgICAgLT4gIDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQyICBsbiAwLjM2Nzg3OTQgICAgIC0+IC0xLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0MyAgbG4gMjIwMjYuNDcgICAgICAtPiAgMTAuMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDQgIGxuIDAuMDAwMDQ1Mzk5OTMgLT4gLTEwLjAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQ1ICBsbiAyLjY4ODExN0UrNDMgIC0+ICAxMDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NiAgbG4gMy43MjAwNzZFLTQ0ICAtPiAtMTAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDcgIGxuIEluZmluaXR5ICAgICAgLT4gIEluZmluaXR5CitsbngwNDggIGxuIDBFLTM4OSAgICAgICAgLT4gLUluZmluaXR5CisKKy0tIG1pc2NlbGxhbmVhCitwcmVjaXNpb246IDE2CitsbngwNTUgIGxuIDIuNzE3NjU4NDg2ODg0NTcyRS0yMzYgICAgIC0+IC01NDIuNDEwMzExMjg3NDQxNSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK2xueDA1NiAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxRS0yMzYgICAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorbG54MDU3ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExRS0yMzYgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OSAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5CitsbngwNTggIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTEyRS0yMzYgIC0+IC01NDIuNDEwMzExMjg3NDQxNDU5MiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2xueDA1OSAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMTE4RS0yMzYgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkxNyAgIEluZXhhY3QgUm91bmRlZAorCistLSBpbnB1dHMgZW5kaW5nIGluIC4uNTAwLi4sIC4uNDk5Li4sIC4uMTAwLi4sIC4uOTk5Li4gc2VxdWVuY2VzCitwcmVjaXNpb246ICAgNTAKK2xueDEwMiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3IC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzM3NDk5NTM4Mjk5OTY0NDYxMjQ4NjE3NTBFLTggIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMwCitsbngxMDMgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAzIC0+IC04Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzM3NDk5RS04ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjkKK2xueDEwNCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzNzUwRS04ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI4CitsbngxMDUgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzNzVFLTggICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI3CitsbngxMDYgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM4RS04ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjYKK2xueDEwNyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzM0RS04ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI1CitsbngxMDggIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NSAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzNFLTggICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI0CitsbngxMDkgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc5IC0+IC04Ljk5OTk5OTk5OTk5OTk5OTk1MDAwMDI3RS04ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjMKK2xueDExMCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4OCAtPiAtOC45OTk5OTk5OTk5OTk5OTk4NTAwMDAzRS04ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIyCitsbngxMTEgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5OSAtPiAtOC45OTk5OTk5OTk5OTk5OTc4NTAwMDBFLTggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIxCitsbngxMTIgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MDAwRS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjAKK2xueDExMyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTAwRS04ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE5CitsbngxMTQgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTBFLTggICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE4CitsbngxMTUgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IG1heSBiZSBhID4gMC41dWxwIGNhc2U7IGEgbW9yZSBwcmVjaXNlIGFuc3dlciBpczoKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtOC45OTk5OTk5OTk5OTk5ODc4NDk5OTkxOEUtOAorcHJlY2lzaW9uOiAgIDE3CitsbngxMTYgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUgLT4gLTguOTk5OTk5OTk5OTk5OTg3OEUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2CitsbngxMTcgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MCAtPiAtOS4wMDAwMDAwMDQ5OTk5ODhFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNQorbG54MTE4ICBsbiAwLjk5OTk5OTkxMDAwMDAwNCAtPiAtOS4wMDAwMDAwMDQ5OTk5OUUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE0CitsbngxMTkgIGxuIDAuOTk5OTk5OTEwMDAwMDAgLT4gLTkuMDAwMDAwNDA1MDAwMEUtOCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEzCitsbngxMjAgIGxuIDAuOTk5OTk5OTEwMDAwMCAtPiAtOS4wMDAwMDA0MDUwMDBFLTggICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTIKK2xueDEyMSAgbG4gMC45OTk5OTk5MTAwMDAgLT4gLTkuMDAwMDAwNDA1MDBFLTggICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDExCitsbngxMjIgIGxuIDAuOTk5OTk5OTEwMDAgLT4gLTkuMDAwMDAwNDA1MEUtOCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEwCitsbngxMjMgIGxuIDAuOTk5OTk5OTEwMCAtPiAtOS4wMDAwMDA0MDVFLTggICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDkKK2xueDEyNCAgbG4gMC45OTk5OTk5MTAgLT4gLTkuMDAwMDAwNDFFLTggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA4CitsbngxMjUgIGxuIDAuOTk5OTk5OTEgLT4gLTkuMDAwMDAwNEUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA3CitsbngxMjYgIGxuIDAuOTk5OTk5OSAtPiAtMS4wMDAwMDBFLTcgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2xueDEyNmIgbG4gMC45OTk5OTk5IC0+IC0xLjAwMDAwMDA1MDAwMDAwM0UtNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNgorbG54MTI3ICBsbiAwLjk5OTk5OSAtPiAtMC4wMDAwMDEwMDAwMCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA1CitsbngxMjggIGxuIDAuOTk5OTkgLT4gLTAuMDAwMDEwMDAwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDQKK2xueDEyOSAgbG4gMC45OTk5IC0+IC0wLjAwMDEwMDAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMworbG54MTMwICBsbiAwLjk5OSAtPiAtMC4wMDEwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyCitsbngxMzEgIGxuIDAuOTkgLT4gLTAuMDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDEKK2xueDEzMiAgbG4gMC45IC0+IC0wLjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworCistLSBjYXNlcyBuZWFyIDEgICAgICAgICAgICAgIC0tICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAKK3ByZWNpc2lvbjogICAgMjAKK2xueDQwMSAgbG4gMi43MTgyODE4Mjg0NTg5MzY1MDQxIC0+IDAuOTk5OTk5OTk5OTk5OTYwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsbng0MDIgIGxuIDIuNzE4MjgxODI4NDU4OTYzNjg2OSAtPiAwLjk5OTk5OTk5OTk5OTk3MDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG54NDAzICBsbiAyLjcxODI4MTgyODQ1ODk5MDg2OTcgLT4gMC45OTk5OTk5OTk5OTk5Nzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2xueDQwNCAgbG4gMi43MTgyODE4Mjg0NTkwMTgwNTI1IC0+IDAuOTk5OTk5OTk5OTk5OTg5OTk5OTggSW5leGFjdCBSb3VuZGVkCitsbng0MDUgIGxuIDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorbG54NDA2ICBsbiAyLjcxODI4MTgyODQ1OTMxNzA2MzUgLT4gMS4wMDAwMDAwMDAwMDAxMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2xueDQwNyAgbG4gMi43MTgyODE4Mjg0NTk1ODg4OTE3IC0+IDEuMDAwMDAwMDAwMDAwMjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDE0Citsbng0MTEgIGxuIDIuNzE4MjgxODI4NDU4OSAtPiAwLjk5OTk5OTk5OTk5OTk1ICAgIEluZXhhY3QgUm91bmRlZAorbG54NDEzICBsbiAyLjcxODI4MTgyODQ1OTAgLT4gMC45OTk5OTk5OTk5OTk5OCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDQxNiAgbG4gMi43MTgyODE4Mjg0NTkxIC0+IDEuMDAwMDAwMDAwMDAwMCAgICAgSW5leGFjdCBSb3VuZGVkCitsbng0MTcgIGxuIDIuNzE4MjgxODI4NDU5MiAtPiAxLjAwMDAwMDAwMDAwMDEgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvd3MsIGluY2x1ZGluZyBzb21lIGV4cCBvdmVycHJlY2lzZSBib3JkZXJsaW5lcworcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitsbng3MDkgIGxuIDkuOTk5OTk5RSszODQgLT4gIDg4Ni40OTUzICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDcxMSAgbG4gOS45OTk5OTJFKzM4NCAtPiAgODg2LjQ5NTMgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE2Citsbng3MjIgIGxuIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc2ICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDcyNCAgbG4gOS45OTk5OTk5OTk5OTk5MTdFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzYgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzI2ICBsbiA5Ljk5OTk5OTk5OTk5OTExN0UrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NSAgICAgSW5leGFjdCBSb3VuZGVkCistLSBhbmQgbW9yZS4uLgorcHJlY2lzaW9uOiAgIDE1CittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorbG54NzMxICBsbiA5Ljk5OTk5OTk5OTk5OTk5RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNSAgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgbWF5IGJlIGEgPiAwLjV1bHAgY2FzZTsgYSBtb3JlIHByZWNpc2UgYW5zd2VyIGlzOgorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMwMi41ODUwOTI5OTQwNDQ5NTAwMTc5OTE0NTQ0MgorbG54NzMyICBsbiA5Ljk5OTk5OTk5OTk5MjY2RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDczMyAgbG4gOS45OTk5OTk5OTk5OTI2NUUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MzQgIGxuIDkuOTk5OTk5OTk5OTkyNjRFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzIGZvciBleHAsIGluY2x1ZGluZyB1bmRlcmZsb3ctdG8temVybyBlZGdlIHBvaW50CitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2xueDc1MSAgbG4gMEUtMzg5IC0+IC1JbmZpbml0eQorbG54NzU4ICBsbiAxLjAwMDAwMUUtMzgzIC0+IC04ODEuODkwMSAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzU5ICBsbiA5Ljk5OTkxRS0zODQgLT4gLTg4MS44OTAxICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzYwICBsbiA0LjQ2MDVFLTM4NSAtPiAtODg1LjAwMDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzYxICBsbiAyLjIyMUUtMzg2IC0+IC04ODcuOTk5OSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzYyICBsbiAzLjAxRS0zODcgLT4gLTg4OS45OTg1ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzYzICBsbiAxLjdFLTM4OCAtPiAtODkyLjg3MjQgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzY0ICBsbiAxLjVFLTM4OCAtPiAtODkyLjk5NzYgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzY1ICBsbiA5RS0zODkgLT4gLTg5My41MDg0ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzY2ICBsbiAxRS0zODkgLT4gLTg5NS43MDU2ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54Nzc0ICBsbiAwRS0zODkgLT4gLUluZmluaXR5CisKKy0tIHNwZWNpYWwgdmFsdWVzCitsbng4MjAgIGxuIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xueDgyMSAgbG4gMCAgICAgICAgLT4gIC1JbmZpbml0eQorbG54ODIyICBsbiBOYU4gICAgICAtPiAgIE5hTgorbG54ODIzICBsbiBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2xueDgyNCAgbG4gc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitsbng4MjUgIGxuIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorbG54ODI2ICBsbiBOYU40NTYgICAtPiAgIE5hTjQ1NgorbG54ODI3ICBsbiAtTmFONjU0ICAtPiAgLU5hTjY1NAorbG54ODI4ICBsbiBOYU4xICAgICAtPiAgIE5hTjEKKworLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCitwcmVjaXNpb246IDEwMDAwMDAwMAorbG54OTAxICBsbiAxIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK3ByZWNpc2lvbjogIDk5OTk5OTk5Citsbng5MDIgIGxuIDAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiAgIDEwMDAwMDAKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2xueDkwMyAgbG4gMSAgIC0+ICBOYU4gICAgICAgICAgSW52YWxpZF9jb250ZXh0CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogICAtOTk5OTk5Citsbng5MDQgIGxuIDAgLT4gIC1JbmZpbml0eQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMAorbG54OTA1ICBsbiAxICAgLT4gIE5hTiAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK2xueDkwNiAgbG4gMCAtPiAgLUluZmluaXR5CisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQorcHJlY2lzaW9uOiA1Citsbng5MTAgIGxuIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdAorbG54OTAwICBsbiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZzEwLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdAppbmRleCA1MTY5ZWFiLi42NTAyZjBkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdApAQCAtMSw1NTEgKzEsNTUxIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBsb2cxMC5kZWNUZXN0IC0tIGRlY2ltYWwgbG9nYXJpdGhtIGluIGJhc2UgMTAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbg0KLS0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotLS0gZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbg0KLXByZWNpc2lvbjogICA5DQotbG9neHMwMDAgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxvZ3hzMDAxIGxvZzEwICAwLjAwMSAgICAgICAgICAgICAtPiAtMw0KLWxvZ3hzMDAyIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMA0KLWxvZ3hzMDAzIGxvZzEwICAyICAgICAgICAgICAgICAgICAtPiAgMC4zMDEwMjk5OTYgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4czAwNCBsb2cxMCAgMTAgICAgICAgICAgICAgICAgLT4gIDENCi1sb2d4czAwNSBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotbG9neHMwMDYgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLQ0KLS0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbiwgZXRjLikNCi1wcmVjaXNpb246ICAgMTYNCi1sb2d4MDAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG9neDAwMDEgbG9nMTAgIDdFLTEwMDAgICAgICAgICAgIC0+IC05OTkuMTU0OTAxOTU5OTg1NyAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDAyIGxvZzEwICAxLjFFLTkgICAgICAgICAgICAtPiAtOC45NTg2MDczMTQ4NDE3NzUgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAwMyBsb2cxMCAgMC4wMDA3ICAgICAgICAgICAgLT4gLTMuMTU0OTAxOTU5OTg1NzQzICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMDQgbG9nMTAgIDAuMTEgICAgICAgICAgICAgIC0+IC0wLjk1ODYwNzMxNDg0MTc3NTAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDA1IGxvZzEwICAwLjcgICAgICAgICAgICAgICAtPiAtMC4xNTQ5MDE5NTk5ODU3NDMyICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAwNiBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gIDANCi1sb2d4MDAwNyBsb2cxMCAgMS41ICAgICAgICAgICAgICAgLT4gIDAuMTc2MDkxMjU5MDU1NjgxMiAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMDggbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NTY2Mzk4MTIgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDA5IGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgMC40MzQyOTQ0ODE5MDMyNTE4ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxMCBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDYgLT4gIDAuNDM0Mjk0NDgxOTAzMjUxOSAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTEgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MjEgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDEyIGxvZzEwICA3ICAgICAgICAgICAgICAgICAtPiAgMC44NDUwOTgwNDAwMTQyNTY4ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxMyBsb2cxMCAgMTAgICAgICAgICAgICAgICAgLT4gIDENCi1sb2d4MDAxNCBsb2cxMCAgMTAuNSAgICAgICAgICAgICAgLT4gIDEuMDIxMTg5Mjk5MDY5OTM4ICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTUgbG9nMTAgIDExICAgICAgICAgICAgICAgIC0+ICAxLjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDE2IGxvZzEwICA3MCAgICAgICAgICAgICAgICAtPiAgMS44NDUwOTgwNDAwMTQyNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAxNyBsb2cxMCAgOTk5OSAgICAgICAgICAgICAgLT4gIDMuOTk5OTU2NTY4MzgwMTkyICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMTggbG9nMTAgIDEuMjFFNiAgICAgICAgICAgIC0+ICA2LjA4Mjc4NTM3MDMxNjQ1MCAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gwMDE5IGxvZzEwICAxLjFFKzkgICAgICAgICAgICAtPiAgOS4wNDEzOTI2ODUxNTgyMjUgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MDAyMCBsb2cxMCAgN0UrMTAwMCAgICAgICAgICAgLT4gIDEwMDAuODQ1MDk4MDQwMDE0ICAgSW5leGFjdCBSb3VuZGVkDQotbG9neDAwMjEgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KLQ0KLS0tIG5vdGFibGUgY2FzZXMNCi0tLSBuZWdhdGl2ZXMNCi1sb2d4MDAzMSBsb2cxMCAtMUUtOSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzIgbG9nMTAgLTAuMDAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDMzIGxvZzEwIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDAzNCBsb2cxMCAtMC43ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzUgbG9nMTAgLTEgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDM2IGxvZzEwIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDAzNyBsb2cxMCAtMiAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwMzggbG9nMTAgLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDM5IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDA0MCBsb2cxMCAtOTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDAwNDEgbG9nMTAgLTEwICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLWxvZ3gwMDQyIGxvZzEwIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sb2d4MDA0MyBsb2cxMCAtMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotbG9neDAwNDQgbG9nMTAgLTBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLS0tIG90aGVyIHplcm9zDQotbG9neDAwNTEgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KLWxvZ3gwMDUyIGxvZzEwICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCi1sb2d4MDA1MyBsb2cxMCAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQotLS0gaW5maW5pdGllcw0KLWxvZ3gwMDU1IGxvZzEwIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4MDA1NiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gSW5maW5pdHkNCi0tLSBvbmVzDQotbG9neDAwNjEgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KLWxvZ3gwMDYyIGxvZzEwICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCi1sb2d4MDA2MyBsb2cxMCAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwDQotbG9neDAwNjQgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KLQ0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwDQotbG9neDExMDAgbG9nMTAgMSAgICAgICAgICAgICAtPiAwDQotbG9neDExMDEgbG9nMTAgMTAgICAgICAgICAgICAtPiAxDQotbG9neDExMDIgbG9nMTAgMTAwICAgICAgICAgICAtPiAyDQotbG9neDExMDMgbG9nMTAgMTAwMCAgICAgICAgICAtPiAzDQotbG9neDExMDQgbG9nMTAgMTAwMDAgICAgICAgICAtPiA0DQotbG9neDExMDUgbG9nMTAgMTAwMDAwICAgICAgICAtPiA1DQotbG9neDExMDYgbG9nMTAgMTAwMDAwMCAgICAgICAtPiA2DQotbG9neDExMDcgbG9nMTAgMTAwMDAwMDAgICAgICAtPiA3DQotbG9neDExMDggbG9nMTAgMTAwMDAwMDAwICAgICAtPiA4DQotbG9neDExMDkgbG9nMTAgMTAwMDAwMDAwMCAgICAtPiA5DQotbG9neDExMTAgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMA0KLWxvZ3gxMTExIGxvZzEwIDEwMDAwMDAwMDAwMCAgLT4gMTENCi1sb2d4MTExMiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyDQotbG9neDExMTMgbG9nMTAgMC4wMDAwMDAwMDAwMSAtPiAtMTENCi1sb2d4MTExNCBsb2cxMCAwLjAwMDAwMDAwMDEgLT4gLTEwDQotbG9neDExMTUgbG9nMTAgMC4wMDAwMDAwMDEgLT4gLTkNCi1sb2d4MTExNiBsb2cxMCAwLjAwMDAwMDAxIC0+IC04DQotbG9neDExMTcgbG9nMTAgMC4wMDAwMDAxIC0+IC03DQotbG9neDExMTggbG9nMTAgMC4wMDAwMDEgLT4gLTYNCi1sb2d4MTExOSBsb2cxMCAwLjAwMDAxIC0+IC01DQotbG9neDExMjAgbG9nMTAgMC4wMDAxIC0+IC00DQotbG9neDExMjEgbG9nMTAgMC4wMDEgLT4gLTMNCi1sb2d4MTEyMiBsb2cxMCAwLjAxIC0+IC0yDQotbG9neDExMjMgbG9nMTAgMC4xIC0+IC0xDQotbG9neDExMjQgbG9nMTAgMUUtOTkgIC0+IC05OQ0KLWxvZ3gxMTI1IGxvZzEwIDFFLTEwMCAtPiAtMTAwDQotbG9neDExMjYgbG9nMTAgMUUtMzgzIC0+IC0zODMNCi0NCi0tLSBjaGVjayBub3JtYWxseSBleGFjdCBjYXNlcyByb3VuZCBwcm9wZXJseQ0KLXByZWNpc2lvbjogMQ0KLWxvZ3gxMTQxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMUUrMSAgICAgICAgIFJvdW5kZWQNCi1sb2d4MTE0MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNDMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxRSsyICAgICAgICAgUm91bmRlZA0KLWxvZ3gxMTQ0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE0NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNDYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5RSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTQ3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMUUrMyBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDINCi1sb2d4MTE1MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDEwDQotbG9neDExNTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMg0KLWxvZ3gxMTUzIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMS4wRSsyICAgICAgICAgUm91bmRlZA0KLWxvZ3gxMTU0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTU1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTU2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOS4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTU3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gMS4wRSszIEluZXhhY3QgUm91bmRlZA0KLS0tIHNvbWUgaGFsZi13YXkgcG9pbnQgcm91bmRzLCBvdGhlciBjYXNlcywgYW5kIG5lZ2F0aXZlcw0KLWxvZ3gxMTU4IGxvZzEwIDFFKzEyNSAgICAgICAgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTU5IGxvZzEwIDFFKzEzNSAgICAgICAgLT4gMS40RSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTYwIGxvZzEwIDFFKzEyOSAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTYxIGxvZzEwIDFFKzEzMSAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTYyIGxvZzEwIDFFLTEyMyAgICAgICAgLT4gLTEuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE2MyBsb2cxMCAxRS0xMjYgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjQgbG9nMTAgMUUtOTE2ICAgICAgICAtPiAtOS4yRSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTY1IGxvZzEwIDFFLTk5OSAgICAgICAgLT4gLTEuMEUrMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE2NiBsb2cxMCAxRS0xMjUgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDExNjcgbG9nMTAgMUUtMTM1ICAgICAgICAtPiAtMS40RSsyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMTY4IGxvZzEwIDFFLTEyOSAgICAgICAgLT4gLTEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTE2OSBsb2cxMCAxRS0xMzEgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAzDQotbG9neDExNzEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMA0KLWxvZ3gxMTcyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTINCi1sb2d4MTE3MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEwMA0KLWxvZ3gxMTc0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMTIzDQotbG9neDExNzUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxMjYNCi1sb2d4MTE3NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkxNg0KLWxvZ3gxMTc3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gOTk5DQotDQotLS0gbG9nMTAoMikgLi4gdGVzdHMgYm90aCBsbigyKSBhbmQgbG4oMTApIGNvbnN0YW50cywgdG9vDQotcHJlY2lzaW9uOiA1MA0KLWxvZ3gxMjAxIGxvZzEwIDIgICAgIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkDQotbG9neDEyMDIgbG9nMTAgMi4wMDAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTIwMyBsb2cxMCAwLjJFMSAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDkNCi1sb2d4MTIwNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMSBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQ4DQotbG9neDEyMDUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MiAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0Nw0KLWxvZ3gxMjA2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NiAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDYNCi1sb2d4MTIwNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQ1DQotbG9neDEyMDggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MSAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0NA0KLWxvZ3gxMjA5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4OCAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDMNCi1sb2d4MTIxMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5OSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDQyDQotbG9neDEyMTEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5MCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA0MQ0KLWxvZ3gxMjEyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogNDANCi1sb2d4MTIxMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM5DQotbG9neDEyMTQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2OCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzOA0KLWxvZ3gxMjE1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzcNCi1sb2d4MTIxNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2OCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDM2DQotbG9neDEyMTcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzNQ0KLWxvZ3gxMjE4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzQNCi1sb2d4MTIxOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMzDQotbG9neDEyMjAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAzMg0KLWxvZ3gxMjIxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMzENCi1sb2d4MTIyMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NSAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDMwDQotbG9neDEyMjMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNCAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyOQ0KLWxvZ3gxMjI0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjgNCi1sb2d4MTIyNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NyAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI3DQotbG9neDEyMjYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyNg0KLWxvZ3gxMjI3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OSAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjUNCi1sb2d4MTIyOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDI0DQotbG9neDEyMjkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMw0KLWxvZ3gxMjMwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3NCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMjINCi1sb2d4MTIzMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIxDQotbG9neDEyMzIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAyMA0KLWxvZ3gxMjMzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTkNCi1sb2d4MTIzNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE4DQotbG9neDEyMzUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNw0KLWxvZ3gxMjM2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTYNCi1sb2d4MTIzNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE1DQotbG9neDEyMzggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNA0KLWxvZ3gxMjM5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTMNCi1sb2d4MTI0MCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEyDQotbG9neDEyNDEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMQ0KLWxvZ3gxMjQyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTANCi1sb2d4MTI0MyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA5DQotbG9neDEyNDQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgOA0KLWxvZ3gxMjQ1IGxvZzEwIDIgLT4gMC4zMDEwMzAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDcNCi1sb2d4MTI0NiBsb2cxMCAyIC0+IDAuMzAxMDMwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICA2DQotbG9neDEyNDcgbG9nMTAgMiAtPiAwLjMwMTAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgNQ0KLWxvZ3gxMjQ4IGxvZzEwIDIgLT4gMC4zMDEwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDQNCi1sb2d4MTI0OSBsb2cxMCAyIC0+IDAuMzAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246ICAzDQotbG9neDEyNTAgbG9nMTAgMiAtPiAwLjMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAgMg0KLWxvZ3gxMjUxIGxvZzEwIDIgLT4gMC4zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogIDENCi1sb2d4MTI1MiBsb2cxMCAyIC0+IDAuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1tYXhFeHBvbmVudDogMzg0DQotbWluRXhwb25lbnQ6IC0zODMNCi1wcmVjaXNpb246ICAgMTYNCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotDQotLS0gTW9yZSBjbG9zZS10by1lLCBldGMuLCB0ZXN0cw0KLXByZWNpc2lvbjogICAzNA0KLWxvZ3gxMzAxIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYxICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDggSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMDIgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMwMyBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MyAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzA0IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNzNFLTMzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzA1IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTNFLTM0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzA2IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTFFLTM1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzA3IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwDQotbG9neDEzMDggbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMwOSBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDlFLTM0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzEwIGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjAyOUUtMzMgSW5leGFjdCBSb3VuZGVkDQotLS0gbG93ZXIgcA0KLXByZWNpc2lvbjogICAgNw0KLWxvZ3gxMzIwIGxvZzEwIDAuOTk5OTk5ICAgIC0+IC00LjM0Mjk0N0UtNyAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMjEgbG9nMTAgMC45OTk5OTk5ICAgLT4gLTQuMzQyOTQ1RS04ICBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMyMiBsb2cxMCAwLjk5OTk5OTk5ICAtPiAtNC4zNDI5NDVFLTkgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzIzIGxvZzEwIDAuOTk5OTk5OTk5IC0+IC00LjM0Mjk0NUUtMTAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMjQgbG9nMTAgMS4wMDAwMDAwMCAgLT4gIDANCi1sb2d4MTMyNSBsb2cxMCAxLjAwMDAwMDAxICAtPiAgNC4zNDI5NDVFLTkgIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzI2IGxvZzEwIDEuMDAwMDAwMSAgIC0+ICA0LjM0Mjk0NUUtOCAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMjcgbG9nMTAgMS4wMDAwMDEgICAgLT4gIDQuMzQyOTQzRS03ICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBuZWFyIDEwXjMNCi1wcmVjaXNpb246ICAgOQ0KLWxvZ3gxMzMxIGxvZzEwICA5OTkuOTk5OTk5OCAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTMzMiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzMzMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzDQotbG9neDEzMzQgbG9nMTAgMTAwMC4wMDAwMDEgICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzM1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE2DQotbG9neDEzNDEgbG9nMTAgIDk5OS45OTk5OTk4ICAtPiAyLjk5OTk5OTk5OTkxMzE0MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MTM0MiBsb2cxMCAgOTk5Ljk5OTk5OTkgIC0+IDIuOTk5OTk5OTk5OTU2NTcxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gxMzQzIGxvZzEwIDEwMDAuMDAwMDAwICAgLT4gMw0KLWxvZ3gxMzQ0IGxvZzEwIDEwMDAuMDAwMDAxICAgLT4gMy4wMDAwMDAwMDA0MzQyOTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDEzNDUgbG9nMTAgMTAwMC4wMDAwMDIgICAtPiAzLjAwMDAwMDAwMDg2ODU4OSBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hDQotbG9neDE0MDAgbG9nMTAgMTBFLTMgICAgLT4gLTINCi1sb2d4MTQwMSBsb2cxMCAxMEUtMiAgICAtPiAtMQ0KLWxvZ3gxNDAyIGxvZzEwIDEwMEUtMiAgIC0+ICAwDQotbG9neDE0MDMgbG9nMTAgMTAwMEUtMiAgLT4gIDENCi1sb2d4MTQwNCBsb2cxMCAxMDAwMEUtMiAtPiAgMg0KLWxvZ3gxNDA1IGxvZzEwIDEwRS0xICAgIC0+ICAwDQotbG9neDE0MDYgbG9nMTAgMTAwRS0xICAgLT4gIDENCi1sb2d4MTQwNyBsb2cxMCAxMDAwRS0xICAtPiAgMg0KLWxvZ3gxNDA4IGxvZzEwIDEwMDAwRS0xIC0+ICAzDQotbG9neDE0MDkgbG9nMTAgMTBFMCAgICAgLT4gIDENCi1sb2d4MTQxMCBsb2cxMCAxMDBFMCAgICAtPiAgMg0KLWxvZ3gxNDExIGxvZzEwIDEwMDBFMCAgIC0+ICAzDQotbG9neDE0MTIgbG9nMTAgMTAwMDBFMCAgLT4gIDQNCi1sb2d4MTQxMyBsb2cxMCAxMEUxICAgICAtPiAgMg0KLWxvZ3gxNDE0IGxvZzEwIDEwMEUxICAgIC0+ICAzDQotbG9neDE0MTUgbG9nMTAgMTAwMEUxICAgLT4gIDQNCi1sb2d4MTQxNiBsb2cxMCAxMDAwMEUxICAtPiAgNQ0KLWxvZ3gxNDE3IGxvZzEwIDEwRTIgICAgIC0+ICAzDQotbG9neDE0MTggbG9nMTAgMTAwRTIgICAgLT4gIDQNCi1sb2d4MTQxOSBsb2cxMCAxMDAwRTIgICAtPiAgNQ0KLWxvZ3gxNDIwIGxvZzEwIDEwMDAwRTIgIC0+ICA2DQotDQotLS0gUmFuZG9tcw0KLS0tIFA9NTAsIHdpdGhpbiAwLTk5OTkNCi1QcmVjaXNpb246IDUwDQotbG9neDI1MDEgbG9nMTAgMC4wMDAzNTQ0ODAwMTY2Nzk2ODE0MTc3NTg5MTI0Njk5MTkxMjY1NTk2MTE2MzM0NTkwNCAtPiAgLTMuNDUwNDA4MjQyNTQxMTc3NTI5MDg2NDA1MzMxODI0NzI3NDk0NDY4NTU4NjE4ODUwNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUwMiBsb2cxMCA3MC42MzY0NTU3MjY0MjQzMTEyMjgyNTUzMzg2Mzc5MzUzMzA4MjY5OTUxMzY1OTc2NDQgIC0+ICAgMS44NDkwMjg4OTk4NDA4NDkyMDQ1NzkzMDcwMjU1MzAyMzM1NTU4MTQwOTc1NzE5MjQ3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTAzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAyMzM1NTAzNjI0NzM4MjE4ODkwNjA4MTI4MDQwNjMwNDAxNjkgLT4gLTE0LjYzMTYxOTQ1NDM0MzgzNDg1ODAyMzU3ODI5OTE0Mjg2NjU1NzcxNzkwNDIyMzY2NyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUwNCBsb2cxMCA5Ny43ODM2Mjg2MjE1MjMyNDQ2Nzk5MDEyNjAzNTgyODY4OTg5NTg4MzIxMzU0MzM3NjQgIC0+ICAgMS45OTAyNjYxNDkzMjI0MjE5NTE3ODk3NjU3OTY0MzYyNTcxNjkwNTkyNzM0NDA3MzMwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTA1IGxvZzEwIDAwNjIuMjM3NzEzNTMxNTg1ODM5MjgwMjYxMjgxMjAyMjgwNzgzODU5OTU3MjAxNzM0MiAgLT4gICAxLjc5NDA1MzYyOTMwODUwNjYxOTkyODc2MzI3MjUwMjY4MzcwMTg0ODY1MzM1NDQxNDEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MDYgbG9nMTAgNi4zNzY3NjM0NjUyMDcxMDUzNjE5OTc3NjAyODA0NzI0MTI5NjUyOTgxNzQ3ODc5NTMyICAtPiAgIDAuODA0NjAwMzA3ODk4MjU5NjE2MTUxMDAxNjM1NzYwODA3NjEzMjY4NTczNzQwOTg2NDQgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MDcgbG9nMTAgNjMuMjk3MDg4OTgxMzEzMjc4NTI5MzA2NTMzODE0MTk1MDY4ODUwNTMyNjY2NjU4Nzk4ICAtPiAgIDEuODAxMzgzNzM3MzcyNDQyNzA5MjQxNzE3MDE0OTA5ODYxNDQxMDg0OTM1MzgzOTY3MyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUwOCBsb2cxMCAwLjAwMDAwMDc3MjM5NjkzMzE2ODgxNzk3NzE3ODIwMTEwODk4MTY3NzIxNjAyMjk5MTg3IC0+ICAtNi4xMTIxNTk0NTkyNzE4NTUwNjEzNzczODg2MjQxOTUxOTY2MjY0ODI2NzYwMzEwMDQ3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTA5IGxvZzEwIDAuMDAwMDAwMDM5NTM1ODAzNTk3ODAxODU1MzQ4MzA1NzI0NjE5MjI1Mjc4MzEzOTUwMDIgLT4gIC03LjQwMzAwOTQyOTM4MzM4NDcxMzYyNTI1NDcwNjk5MDU0NzcyMTM1NDE3ODcxNzc1NjEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTAgbG9nMTAgNzU0LjYyOTA1ODE3MzY5OTg5MTY5MTg4OTk4MTExNTI3MjcyNjg4NzkxNTQ0NTc3MjA0ICAtPiAgIDIuODc3NzMzNTI0Mzc2MTMwMDA0Nzc1ODUzNDMwNDM3MTkxMjA5OTk1ODA1NzU0NTQxNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxMSBsb2cxMCAwLjAwMDAwMDQ4MzYwMzc4NDEwMjQxNDI4OTM2NjA3MTQ3MDU2MjgzMjgyODQ5MTU4MzEyIC0+ICAtNi4zMTU1MTAzMDk1MzA5MzUzNDU3NjA0MDM4Mzk3OTgwMDkxNjUwNzYwMzQ2MzM0NTEyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTEyIGxvZzEwIDAuMDAwMDc1MDkwMzc1ODM2NDU2MTI1NzcxOTYxMDQ1OTE2NzIwODA1NDI5MzIxNjYwODkgLT4gIC00LjEyNDQxNTcyMTk3MDAxNjYzMTQwMTIzNDQ3MDU1MzgwODgwMzA1OTI4OTYxMTEwMjYgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTMgbG9nMTAgMC4wMDAwMDAwMDAwMDcwNTQ3NTk0NDYzODkxNTA1MzQxOTgzOTA2MzU2Nzg5ODA5MjA2NCAtPiAtMTEuMTUxNTE3NzkwMjU2NDY2MDQ4NTUzODEwMDAyNTI1ODY4MTk4MTc4MTY3OTUwMzc3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTE0IGxvZzEwIDkuNjIxMDMwMDQ2MDQ5NzY1NzkxNzQ0NTQxMDk0NzA5OTYzMzQ3OTYwOTE2NTEyMDY2MSAgLT4gICAwLjk4MzIyMTU3MDkzMjYwOTc4MjA2NjMzOTIyODc3NzE2MDc4NjgzNTE4NjE3NzY4NDExIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTE1IGxvZzEwIDAuMDAwMDAwMDAwNTAxNTAzNjEzODY1NTU1Mjc0OTY2MDcyNDU5NzYxMjA4NjQ5ODU2MTEgLT4gIC05LjI5OTcyNTkzMzA3OTgyNjEwNDA0MTEwODY4MzU1NjMyMzQzOTA5MzQ5MzQ2MjkzNDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTYgbG9nMTAgMDk4LjI0NzU0MDI5NzMxOTk0MTI1Nzk3NzIzNTQ1MzMzNjc3NjA0NDkwMDc0ODEwNzUxICAtPiAgIDEuOTkyMzIxNjg2Mjg3NDMzNzA3Nzc5NTI3ODYyOTM1MTA2MDgxOTEwNTY3OTY3MDYzMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxNyBsb2cxMCA3LjUwOTE5OTgxNTAwNDY5OTQzMjA0NDE0NjM4NTQzMDE2MjQ3NDI0OTEwMTU3NTI5ODAgIC0+ICAgMC44NzU1OTM2NjA3ODAwNTkyNDA4MDc2NjQ2OTE1ODc2MzQ5OTcyNTQxNDAyNDEyODc4MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUxOCBsb2cxMCAwLjAwMDAwMDAwMDAwMDc5NTQwNTcxMjczMzMwMDc1MTkzNjY4NTk2OTQyMjY4NTQyNDI1IC0+IC0xMi4wOTk0MTEyOTQxNjUxNzYwMjg4MTczMDUxMDg0NzUzMjYzMjUwMDYyNTA5MzY5NjMgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MTkgbG9nMTAgMC4wMDAwMDA0MjM5NTAzNDc5OTU1NTIxNTc4MjkwNzUxNTA3NDEzNDE1NDkxNTQ5MTcwMSAtPiAgLTYuMzcyNjg1MDAzOTEyNTM4MTEzNDA2OTQ1MDgwMjEwODg5MzA3NTYwNDQ2NDEzNTI5NyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyMCBsb2cxMCA1Ni42ODMzNzYzMDQ2NzQzNTU0ODE5MDUwMjMxNDUyMzg3OTk5MDkzMDE3MzI2OTQ5ODIgIC0+ICAgMS43NTM0NTU3MTA3ODUzNDgwNDM1NzAzNDIxODI2MDc3NjA2MjUwNjM2NTgwMDkxNzU0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTIxIGxvZzEwIDQ4LjczNDAzMzgxMTQ0NDE5NTA3MDgwNzYwNjcyMTUxNzE2OTgxMDQzODA0OTU4MTIyNyAgLT4gICAxLjY4NzgzMjM2MDI3NDEwNjUxOTA5NDI2NTQ3MTAwNDk0MzM4MDgyMDgyOTE1NjQwNDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MjIgbG9nMTAgMC4wMDA3NDgzMDMxMDkzMDA0Njg2NTAwOTg1MTcwNjk4OTQzMDIyODU2MTg4MDIyMTA2MyAtPiAgLTMuMTI1OTIyNDUwMjIwOTk3NDA4MjIyMzY2NzcxMjAxNjQ0NTU3MjQzMTc5MTkyMDYxOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyMyBsb2cxMCAzNi42NzczNDg4ODUxMTE1OTMzODQwMjA4MzY3MjAzOTYyNjI0OTcxMjI3MDg1OTgzNTkgIC0+ICAgMS41NjQzOTc5MzY0MjYwNzk2MDg2NzU0NTMwMjgyMzAyNjA1NDc3NTY3NDY5Mzk1NDI1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTI0IGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwMDQ0OTU2Nzg1NjA0ODA0MzI4NTg4MTI0MTkxNDU4MzM3NDQgLT4gLTE2LjM0NzIwNDc0ODIzOTc0MDUxMDAxNDMyMDYzMDM2MzI0NDAxNTkxNjAyOTYxOTU2MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyNSBsb2cxMCA5NTA5LjU4NTQwMTM2NTA2NDI3OTkzNzQxNTkxMzE5NDAxMDg3NDg1OTQ3NzQzMDcxMDQgIC0+ICAgMy45NzgxNjE1ODI5OTE2MzI2NzQxMTAwMTY2NTE5NzI2ODI0NDMwOTQ1NDA2MzAyNjYxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTI2IGxvZzEwIDAuMDc4MzQ4OTEyNjg2ODkxNzcwMTQwNDQ0NTQ3OTM2MDg3MTUyNzY2MTU3NDM4MTkwOTcgLT4gIC0xLjEwNTk2NzAyNjIxOTc2NDMxNDc4MDU1MTczOTg2MjEyODg4OTc2Njk4NzY5OTYzNDggSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MjcgbG9nMTAgMC4wMDAwMDAyOTU4NDUyOTg4MDcwNjEyODQ0NDQ1NDY4ODQ1NDk5OTAzMjgwMTkwNDc5NCAtPiAgLTYuNTI4OTM1MzI3NTgxNDA0MzcxMDA3NjUyNjkyMDU2NjcyMTU3MDM3NTAyNjkxNzIwNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyOCBsb2cxMCAzLjA3MTM0OTY1NDQ0OTc2MTgwOTg3OTQzMzI3ODc3NzIxODYxNzY5ODEwMTE5MDQyOTQgIC0+ICAgMC40ODczMjkyNjEwMzg5NjgyODU0NjQyNDM0MTAyOTQ5MjQ2ODEwMDQzMTQxNDA3Mjk5NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUyOSBsb2cxMCAzNTIuNjYzOTI2NzA3ODg4MTY0NzQ0MDc0NDI3ODU0NjA4MDM4MzM5MjcxMzY0MTM5NDMgIC0+ICAgMi41NDczNjEwMzg4MTk5NTYyNzE0NzA5ODM2Mzk4MjQzOTMzMzIwMjg0MDc3MDA4MzE0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTMwIGxvZzEwIDAuMDAzMDQ3NDMxMjUxODE4NzYyNjcyMTA1MTY1MjczNjE3NDIxODU2MTcwOTE4MDE2NTAgLT4gIC0yLjUxNjA2NjA4MzAxNjM5ODE5Njc3NzQxMjQ3NDUzMTE0OTc0NDcwNTAwNTY0MDAyMDcgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzEgbG9nMTAgMC4wMDAwMDA3NjEyMDUzNTg5NDk1MjEzNjQ5OTI1MDM2NDYwNDUzODExNzcyOTQzNzE4MyAtPiAgLTYuMTE4NDk4MTYyOTA0NzA1MTUzMjQ0ODQxMzg2Mzk1MDc3NjQ5NjY1MjQ4MzAxOTQxNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzMiBsb2cxMCA3NjkuODg3OTU5Nzg1MzQzNTMwNTI5NjUyODYxOTUwNTM3MzUwMDc0NzMxODc3MzU4MTUgIC0+ICAgMi44ODY0Mjc1Mjc3ODYyNjUyNzA5OTg2NDk4NTgxMDY0MTE3OTUwMjg4Nzk4MjIyMTAwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTMzIGxvZzEwIDAuMDAwMDAwMDAwMDAwMDAwNDEyOTc0OTQ4MDg2MTIyMjYzMDQ2MTk1NzAwMTYzMzYxODggLT4gLTE1LjM4NDA3NjI5Mjc0NTQxNTkxNzUxMDY2ODQ1NDM2MTg2ODY1OTQ2ODY2OTgwNDcxMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzNCBsb2cxMCA4NjAuODg4NjQ1OTU3MTQ0MjY5NDAyNDc5NDA5NjAyNTg1NTg4NzY5MDM3NDE5NjY5NzQgIC0+ICAgMi45MzQ5NDY5ODAwNTU0Mjc3OTE1OTIwMjc4MDkwNjQ3MjgzMjMzNDQwODU5MTU1MTc2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyNTM1IGxvZzEwIDU4MzkuMDMyODgxMjk5NDc4NzIzNTkwMDE3ODU4NzM3MTA1MTA5Njg5ODY4Mzk3MjQ0NCAgLT4gICAzLjc2NjM0MDkyMDg5NzIzOTI1NjkyNjkxMjU1Mzk0Mzg4NzQ3MzcxNDc5MDYyMzg1NDMgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzYgbG9nMTAgMC4wMDAwMDAyODUzMjcxMDE1MTI4NDg0MDQ3MTY3MDQ5NzExMjgyMTIwMTU5ODM3Nzg0MSAtPiAgLTYuNTQ0NjU2OTc1MzUxNDAyNzY3NTg3ODg3OTg0MzIzODA2NTQ4ODQ5MDYxODE1OTQ5MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjUzNyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA5NzM0NDkwMDU5OTMxNjM4NDgzNDQ1NjMxODM1NjUxNTgxIC0+IC0xNi4wMTE2ODY3OTQwMTEyNzExMzU5Nzg2MzM4ODA4NjQyNzg2OTIyNTQyNDMxMDY5MzEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzggbG9nMTAgNS44NjEwOTQ5NTI2NDM5NTI5NDg5MjUyMzAyNDYzNDUwMzAyOTgxNTExNzE0MTQ0MzMwICAtPiAgIDAuNzY3OTc4NzU3MjI0NTI1NDkyODEwMjg1NTIwNjc2NDU3MzI0OTA5MjkzNjE5NTIyNzggSW5leGFjdCBSb3VuZGVkDQotbG9neDI1MzkgbG9nMTAgNi42MjgyNDMyMjIxMTE1OTIzMzcyMTUxMTQ4OTkwMTM3MTc5NjExOTc3NTc2MzI3MjA2ICAtPiAgIDAuODIxMzk4NDM2MzkyMjcyMTMyMTEwMTIwNDQwMDA3ODU3NTcyNjcxNTU3MzYwNzEzNjEgSW5leGFjdCBSb3VuZGVkDQotbG9neDI1NDAgbG9nMTAgMC4wMDAwMDAwMDAwMTk5NDA3MTg2MjM4Njg0NjYyNjk1NDgxOTkyMzkyMzM0NDQxMzQ1NCAtPiAtMTAuNzAwMjU5MTk0NjMyMzM5OTgwMjY2NTU5MjI0NDQ3MjEyMjYwMTE1MDIxNjM3NjI2IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFA9MzQsIHdpdGhpbiAwLTk5OTkNCi1QcmVjaXNpb246IDM0DQotbG9neDIyMDEgbG9nMTAgMS41MjI1MTMyMDM4ODk3MTQxNzkwODgzMjczMjg4NjQxODMgIC0+IDAuMTgyNTYxMDY3NzA5ODg5NjI1MDQ5NjY1MTMzMDQ5MjEwOSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwMiBsb2cxMCAwLjE3MTEyMzc3NDc2OTcxNzMxNjE1NDA4MDg4ODkzMDQwNCAgLT4gLTAuNzY2Njg5NjQ4MzU0ODQ2MjU4MjQ2MTg5ODA5Mjc2NDQwOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwMyBsb2cxMCAwLjAwMDAwMDA5OTc0NjcyMzYyNTE3MTQyODMxMDQ5NjM4MzggLT4gLTcuMDAxMTAxMzYwNjUyNTE4Mjc0MjcxNTY5MDEwMzEyMTE1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjA0IGxvZzEwIDAuMDAwODg1NjEwMzYyNDEyMjQ3OTc2OTY0NzU0MzQ2ODYzMyAtPiAtMy4wNTI3NTczMTA0NzYwNzA4OTE4MzA0OTAzMjcxMzgxOTAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMDUgbG9nMTAgMS45MzgyNzQ4Njg3MzgwMzI5MzA3MDk0OTgyMjEyMzY3NTggIC0+IDAuMjg3NDE1MzY0ODI1OTQ0OTUyMDIwMTUzNjE3MTcxNDU5NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIwNiBsb2cxMCA0NzkuNTY2Nzg0NzgyMzgyNjcxMzA4MjYxMzQ0NTAxMDA5NyAgLT4gMi42ODA4NDkwOTU4NTAzNjEwNjg3MDkxNjUxNTcyODY0MzUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMDcgbG9nMTAgODg1Ni4xMzY1OTkxNzg4MjAyMDIxNDE4MjMxNTczMzY4MDQgIC0+IDMuOTQ3MjQ0MzA2NTg0NzY3MTAxNDgwNDU0MjYxOTUwNTU5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjA4IGxvZzEwIDAuMDAwMDkxMTAyNjMxODgwMTkwMzk4MjY0Mjg3MTM0NDg1OCAtPiAtNC4wNDA0NjkwNzY0MzQ5NzkzOTg0Mzg2MTc0NjQwMzM4MjYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMDkgbG9nMTAgMC4wMDAwMDAwMDAwMDE3MjcxMTEyNjUwNDI3NDE0NzMyNjMwIC0+IC0xMS43NjI2Nzk2ODMxNDAzODc0ODk5NTE3ODIxMjY1NDkyMSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIxMCBsb2cxMCA2Ljk2MjYwNTM3MDA3ODg4NTY0NzYzOTUwMzU0ODIyOTY5NSAgLT4gMC44NDI3NzE3ODA3MjAwMzIyMzUyNjg2Mzk2OTI1OTkyMjUwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjExIGxvZzEwIDAuMzM1NDgwNDQyODk5Mjc5MzEzMjg1NTkyMzU0MTY5Mjc4MSAtPiAtMC40NzQzMzI3OTIzMDEyMTU5MTcwOTY3NjM2MDcwODQ0ODM0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjEyIGxvZzEwIDIuMDc5ODY0MjU3NDc0ODU5MDA4MjUyMTY1ODM2NjYzNTA0ICAtPiAwLjMxODAzNDk5MTYxOTgwNTkwNDY4MTI1MDY3NDEzODg4NTYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTMgbG9nMTAgMjgwNS40Nzk1MjkyOTI5Mzk0OTkyMjAyNzY5ODY2MjE5ODggIC0+IDMuNDQ4MDA3MTA0MTM5OTc0MzQ0NTY1OTc4NzgwNjI0NzQ0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjE0IGxvZzEwIDY2LjQ1NzMxMTMzMDM0MTg3Mzc0NTU3MDI4NTM3MjEzOTQ5ICAtPiAxLjgyMjU0Mjc2NzAwNTY0NDA0MTY2MTUyMDkzNjIyMzA4NiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIxNSBsb2cxMCAwLjAwMDAwMDEyMDY1MjEyNjE3NjI2ODE3MzgyNzQ4MjI4MzUgLT4gLTYuOTE4NDY1MDIwMzkwMjE2OTY5NTYxNDk0NzU1NzY3MzE4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjE2IGxvZzEwIDAuMDAwMDAwMDAwMTg4NDg5MTkxNjI2NDQwMTE2MDQ3MjM4MSAtPiAtOS43MjQ3MTM1NDgxMTkwNjUzODYwOTE5MzMwMDc1Mjg2MzMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMTcgbG9nMTAgMC4wMDAwMDE1NDY3Mjc5NTUxNzI2MzI2NTgxMzE0NTgyNzU5IC0+IC01LjgxMDU4NjA2NTA3MDQzNTM4Mzc1NTc1OTUxNDYwODczOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIxOCBsb2cxMCAwLjAwOTA3NzYzMTY3MjgwNjg1ODY3NDQ2MzM5MTQxMzU5NTIgLT4gLTIuMDQyMDI3NDQyODQzNzQ1ODg0NTAzMjgwOTU0MzkwMTE0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjE5IGxvZzEwIDAuMDAwMDAwMDAwMDAyNDU0MTEwNjUyODcxMzM5Mzc0MDAzMCAtPiAtMTEuNjEwMTA1ODU5MzU2MzU3MTMwOTAxMTkxNTYwNjk0NzkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjAgbG9nMTAgMTQuMTI5MzY4NzkzODU4NjM0MTAwODEwODc3NTA2NDU4NTYgIC0+IDEuMTUwMTIyNzYwODk1NDY2OTg5ODQxMDU3Mzg1NzQyNjYyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjIxIGxvZzEwIDAuMDAwMDAzNjkxMjQ4MTgzMTM5MjkyMjkyMjY0NzIzMTM5MiAtPiAtNS40MzI4MjY3NTM3ODk4OTIyODM1NTYyMTEzODA4MjQyMDMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjIgbG9nMTAgMC4wMDAwMDAwMDA0MDY3NDc3NTI1NDIwNDI0MjcwMTM4NzM0IC0+IC05LjM5MDY3NDgzODA1MDA3MzEyMjg1Nzg2ODAxMjQ3NTA2MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyMyBsb2cxMCA3MDgwLjEyMjU2MjcwNTM5OTc0NDk2OTMxOTU4OTgwNjE5NCAgLT4gMy44NTAwNDA3NzU3NDcxMDMzMTg3MjQzMzAwNDc1NDY5MTYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjQgbG9nMTAgMjYxLjM0OTE0MTEzNjM2NzkyMDkxNzU1MjQ3OTAyNTU3MjUgIC0+IDIuNDE3MjIxMDc3MjI3NTM2MzE5NjU1Njk5NTE3NTMwODU1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjI1IGxvZzEwIDAwMy45OTQ1NTgxNDQ5OTE1MjQwMDk0NzI4MzgwMDQxNDk0ICAtPiAwLjYwMTQ2ODc0NzE1MzE5ODgyNjA4MjMwNjY5OTc4NDU2OTEgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjYgbG9nMTAgMC4wMDAwMDAwMDAwNTgzNTQ5MTY0NTg4NDk1MjA2NzY3ODQwIC0+IC0xMC4yMzM5MjI1NDgzNDE4MjY3NzAyMzIzMTcxMzUxOTM0MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyNyBsb2cxMCA5NTY3Ljk2MTgzMjYwNzI0MDI3ODM0Mjc2MTA4ODQ4NzQ4NCAgLT4gMy45ODA4MTk0MzQyMTExMDc2MzE1NjkzODYxNDcwMTYzNjggSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMjggbG9nMTAgMDYuMjY1OTI5NzkxNjAzNDI5NzI3NzcyMTk4Mjg4NjcwMzMgIC0+IDAuNzk2OTg1NTI0Mzk2NjIyMTQwODU5NTAyNDAxMjU3NDcyOSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIyOSBsb2cxMCAwLjAwMDAwMDAwMDA1ODk4NDcwNDY1OTgwNjcyNzMyODczMTkgLT4gLTEwLjIyOTI2MDU5MDc4MjA2MjE4NzE3NzU1MjUzNTgyOTA3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjMwIGxvZzEwIDU2Ny45Mzg4NjQ4MjM1NTg5MjA0NzY5NDQyODYzNzI0OTk3ICAtPiAyLjc1NDMwMTU4OTA1ODMxMzU3NjQ3MjM4MDI2MjkwNzYzOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzMSBsb2cxMCAwMzkuNzc5MDMyNTQ4MDAzNzc3ODkxODE2MjI2NDg4MzQxNSAgLT4gMS41OTk2NTQyMTY1OTIwMTkxOTk2MzkyODUzMDg5OTc4ODYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzIgbG9nMTAgMC4wMDAwMDAwMDA1MTIzOTUxOTIxODk0MTYyMTQ5ODE3MjA3IC0+IC05LjI5MDM5NDk1Mzg5ODg2MjY5NDg0NzMyNzEzNzI0MjY5MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMzg1MDA5OTk3MjM2MzY5MDQyNzY3MjMgLT4gLTExLjQxNDUyNzk5MzM3OTI0MDU2MTg2ODY3MzI0ODU0NjkxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjM0IGxvZzEwIDAuMDAwNjcyNjUwMDY1ODk3Nzc1OTgyNTYxNjUzNzkzNTg2NCAtPiAtMy4xNzIyMTA4MTA5MjI3Njg3MjU2ODc2NzE4NDk0MjE3OTIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzUgbG9nMTAgMjYwLjI0MDAyNTA0NzU5Njc1Mjg0Mjk5NDM3NzkxMjY1MDcgIC0+IDIuNDE1Mzc0MDkyMDczNzk5MjA0MjM2ODAxMzgzMDcwMDY0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMjM2IGxvZzEwIDAuMDAwMDAwMDAwNjEwMTk0MjMzOTM4NTEwMjU4NTA0MjU0OCAtPiAtOS4yMTQ1MzE5MDA1NjIwNDY1NTcxOTEyNjEyMjY2MzI1MDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzcgbG9nMTAgMC4wMDAwMDAwMDEwODQ2ODY3NTAxMzgyNzQ2NzYwMDY2NTU3IC0+IC04Ljk2NDY5NTY2NDg4MzI4MjQwNjM1OTg3NDI0MjM4NzIzNiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjIzOCBsb2cxMCA2MC4yNDA3ODM3NTU2ODgxNDc2OTAxMDMzMzcxMTUwOTkyOCAgLT4gMS43Nzk4OTA2MTM1NjcwODQyNTMxNjgzNzMyNjY2NDg5MjIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIyMzkgbG9nMTAgMC4wMDEyMDU4NzM4NzExNzU3NjY5MzM3NjAwMjUyOTg2MDkzIC0+IC0yLjkxODY5ODExNTAxMjYwNTkxNTc1MzcyODIyMDg5NjAxMCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjI0MCBsb2cxMCAyMzAuOTQ1MDkzMDE5Nzg0MTYwMDYxMTUwMzA5NTE4NTYwMCAgLT4gMi4zNjM1MDg3MzkwNTY4MjI4NDY3NDI5NDI1OTk2Mjg5NjYgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gUD0xNiwgd2l0aGluIDAtOTk5DQotUHJlY2lzaW9uOiAxNg0KLWxvZ3gyMTAxIGxvZzEwIDAuMDA3MjA2NzExOTYwNTE4NCAtPiAtMi4xNDIyNjI4MzU1NzMwMzggSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMDIgbG9nMTAgNTAzLjY4Mjg0ODIyMjY2MjQgIC0+IDIuNzAyMTU3MTYyMTk1NjUyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTAzIGxvZzEwIDY0Ljk2MDc0NDQ3ODIxODE1ICAtPiAxLjgxMjY1MDk5MzQ2NDE3NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwNCBsb2cxMCA0OC43NTQwODU5NzQ2NzI0NiAgLT4gMS42ODgwMTEwMTg4NDI2MDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMDUgbG9nMTAgMC4wMzI5MDA5ODM5MjY5NTg3IC0+IC0xLjQ4Mjc5MTExMzk3NTI4MCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwNiBsb2cxMCAyMjMuNTMyMDQxNTA2MDYzMyAgLT4gMi4zNDkzMzk3ODQ1MjM0MTAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMDcgbG9nMTAgNzMuMTI3NjUwMDIyOTIxOTQgIC0+IDEuODY0MDgxNjE3NDc2MjY4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTA4IGxvZzEwIDQ4Ny4zNzQ5Mzc4MzU4NTA5ICAtPiAyLjY4Nzg2MzE5MjgwMjI1MiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEwOSBsb2cxMCAwLjAwMDAwMTk2NzE5ODc2MjEgLT4gLTUuNzA2MTUxNzU3NTU3OTI2IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTEwIGxvZzEwIDAuMDU3MDY4MDY2MDYwOTc4NCAtPiAtMS4yNDM2MDY4NDQ2OTc4NzMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTEgbG9nMTAgMzMuMTAzMTE2Mzg3ODg5OTggIC0+IDEuNTE5ODY4ODgwOTc2NzczIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTEyIGxvZzEwIDAuMDY4NzM4MjY5OTE4NzA3NyAtPiAtMS4xNjI4MDE0MDI4NjgxODUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTMgbG9nMTAgMjU4Ljk0MTYxOTM2MjY0ODQgIC0+IDIuNDEzMjAxODU5NjU0MTQ1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTE0IGxvZzEwIDAuMDAwNTMwNjEwMDEzNjczNiAtPiAtMy4yNzUyMjQ1NTgyNjk3MjUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTUgbG9nMTAgNjUuNzg0OTAzOTM0MDg1NzIgIC0+IDEuODE4MTI2MjQ0ODI1MTA5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTE2IGxvZzEwIDUwNC4yMzI4ODQyMDczNTEwICAtPiAyLjcwMjYzMTE2NTM0Njk1OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjExNyBsb2cxMCA5LjQxNzQzMjc1NTgxNTAyNyAgLT4gMC45NzM5MzI1Mjc4NTI0NTAzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTE4IGxvZzEwIDAwNi43MDU0ODM1MzU1NDk4ICAtPiAwLjgyNjQzMDEwMDQ5NDc2NDAgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMTkgbG9nMTAgMC4wOTE3MDEyMjcyMzYzOTE1IC0+IC0xLjAzNzYyNDg1MjEzMzM5OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyMCBsb2cxMCA1Ljk1OTQwNDM4NTI0NDkyMSAgLT4gMC43NzUyMDI4NTYxOTUzNDAxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTIxIGxvZzEwIDAuMDAwMTIwOTc1OTE0ODQ4NiAtPiAtMy45MTczMDEwODQ5Njg5MDMgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjIgbG9nMTAgMC4wMDA0NzA2MTEyMTM5ODM4IC0+IC0zLjMyNzMzNzcyODQyODAzOSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyMyBsb2cxMCAwLjAwNjk3MDA0NTczNzcwNDYgLT4gLTIuMTU2NzY0MzcyMDM1NzcxIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTI0IGxvZzEwIDAuNTE1NTU4NDU2OTg1MjYxOSAtPiAtMC4yODc3MjIwODQ3ODA1MDI1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTI1IGxvZzEwIDg4LjA2MDA1ODg1NjA3NDE0ICAtPiAxLjk0NDc3ODk3MTM4OTkxMyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyNiBsb2cxMCAwLjA0NDgyNDAwMzgyMTk4NjYgLT4gLTEuMzQ4NDg5MzUzNTA5NzA5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTI3IGxvZzEwIDMuNDE5NjIyNDg0MDU5NTY1ICAtPiAwLjUzMzk3ODE2MzkxMDExNDUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIxMjggbG9nMTAgNS4xNzExMjMzNTM4NTg3MjEgIC0+IDAuNzEzNTg0ODk3NzE0Mjg1NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEyOSBsb2cxMCAwLjAwMDIxMzMxODgzMTk4MDcgLT4gLTMuNjcwOTcwODAyOTQ1ODcyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTMwIGxvZzEwIDQ2LjIxMDg2NzAzMTM2OTY2ICAtPiAxLjY2NDc0NDExNzA0NTE0OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEzMSBsb2cxMCAwLjAwMDA2MzEwNTM3MTQ0MTUgLT4gLTQuMTk5OTMzNjcyNjM5ODgwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTMyIGxvZzEwIDc4LjY2MDE5MTk2ODcwNjk4ICAtPiAxLjg5NTc1NTAwMTk2MjQ2OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEzMyBsb2cxMCAwLjAwMDcxNTIyNzgzNTExODggLT4gLTMuMTQ1NTU1NTkyMDgyMjk3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM0IGxvZzEwIDQ1LjUyNTA5ODE5OTI4NTM2ICAtPiAxLjY1ODI1MDg5MTI1Njg5MiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEzNSBsb2cxMCAwLjAwMDA3MDMyMjc3OTU3NDAgLT4gLTQuMTUyOTAzOTcxNjk3MTgzIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM2IGxvZzEwIDI2LjI0NDM4NjQxNDI2NjY5ICAtPiAxLjQxOTAzNjQyMzU1MDU5OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjEzNyBsb2cxMCAwLjAwMDAwNDQ2NTQ4Mjk1MzUgLT4gLTUuMzUwMTMxNTY0MTY2ODE3IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM4IGxvZzEwIDAuNzM2MDcwMjczMzA2MjUyOSAtPiAtMC4xMzMwODA3MjExODkzNjExIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMTM5IGxvZzEwIDguNDE3MDU5MTc2NDY5NjU1ICAtPiAwLjkyNTE2MDM4MDUxMTI3NzggSW5leGFjdCBSb3VuZGVkDQotbG9neDIxNDAgbG9nMTAgMC4wMDAyOTI2NTcwNzY3OTY4IC0+IC0zLjUzMzY0MDk2OTY2NDgxOCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQPTcsIHdpdGhpbiAwLTk5DQotUHJlY2lzaW9uOiA3DQotbG9neDIwMDEgbG9nMTAgNTcuMjYwODkgIC0+IDEuNzU3ODU4IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDAyIGxvZzEwIDAuMDU3NTQyMSAtPiAtMS4yNDAwMTQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDMgbG9nMTAgMC41OTE4NDY1IC0+IC0wLjIyNzc5MDkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDQgbG9nMTAgMC4wMDY4Nzc2IC0+IC0yLjE2MjU2MyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwNSBsb2cxMCAwLjAwNjY4MzMgLT4gLTIuMTc1MDA5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDA2IGxvZzEwIDkuOTI2OTYzICAtPiAwLjk5NjgxNjQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDcgbG9nMTAgMC4wMDQxODUyIC0+IC0yLjM3ODI4NCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAwOCBsb2cxMCA4NC4xNTQxMiAgLT4gMS45MjUwNzUgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMDkgbG9nMTAgMi40NjY4NTYgIC0+IDAuMzkyMTQzOCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxMCBsb2cxMCAwLjAwNTgwNDcgLT4gLTIuMjM2MjIwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDExIGxvZzEwIDkuODg1MTU0ICAtPiAwLjk5NDk4MzQgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTIgbG9nMTAgMC42NjY3NjU0IC0+IC0wLjE3NjAyNjkgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTMgbG9nMTAgMzQuNjU3MzYgIC0+IDEuNTM5Nzk1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDE0IGxvZzEwIDAuMDAyNjg4NCAtPiAtMi41NzA1MDYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTUgbG9nMTAgMC4wNDMyNzY3IC0+IC0xLjM2Mzc0NiBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxNiBsb2cxMCA2Ni4wMTQwNyAgLT4gMS44MTk2MzcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMTcgbG9nMTAgMC4wMDcwNTcyIC0+IC0yLjE1MTM2OCBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAxOCBsb2cxMCAwLjA3MzE2MTMgLT4gLTEuMTM1NzE5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDE5IGxvZzEwIDkuODM4OTgzICAtPiAwLjk5Mjk1MDIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjAgbG9nMTAgMTUuODk2OTYgIC0+IDEuMjAxMzE0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDIxIGxvZzEwIDguNDU5MjQ3ICAtPiAwLjkyNzMzMTcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjIgbG9nMTAgMC4wMDEwODczIC0+IC0yLjk2MzY1MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyMyBsb2cxMCAwLjY0OTg2MTkgLT4gLTAuMTg3MTc4OSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAyNCBsb2cxMCAwLjA4NDcwMDggLT4gLTEuMDcyMTEyIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDI1IGxvZzEwIDAuMDA3NTQ4OSAtPiAtMi4xMjIxMTYgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjYgbG9nMTAgNTEuMTExNTIgIC0+IDEuNzA4NTE5IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDI3IGxvZzEwIDAuNzIzMzg2NiAtPiAtMC4xNDA2Mjk1IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDI4IGxvZzEwIDIuMjU0NzIxICAtPiAwLjM1MzA5MjggSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMjkgbG9nMTAgNi41Njg0NDQgIC0+IDAuODE3NDYyNSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzMCBsb2cxMCA4My43MjYzOSAgLT4gMS45MjI4NjIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzEgbG9nMTAgNi43MjA1ODUgIC0+IDAuODI3NDA3MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzMiBsb2cxMCA4Ny45MDM2NiAgLT4gMS45NDQwMDcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzMgbG9nMTAgMC4wNDMzMzI0IC0+IC0xLjM2MzE4NyBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzNCBsb2cxMCAzNC42MzkxMiAgLT4gMS41Mzk1NjcgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzUgbG9nMTAgMC44MDg5MDU5IC0+IC0wLjA5MjEwMjAwIEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDM2IGxvZzEwIDcuNzkzNDA1ICAtPiAwLjg5MTcyNzIgSW5leGFjdCBSb3VuZGVkDQotbG9neDIwMzcgbG9nMTAgMC4wMDQxNzU3IC0+IC0yLjM3OTI3MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjAzOCBsb2cxMCA3LjEzNTQxNyAgLT4gMC44NTM0MTk0IEluZXhhY3QgUm91bmRlZA0KLWxvZ3gyMDM5IGxvZzEwIDEyLjQ5NTcwICAtPiAxLjA5Njc2MSBJbmV4YWN0IFJvdW5kZWQNCi1sb2d4MjA0MCBsb2cxMCA2LjM1NjI3NiAgLT4gMC44MDMyMDI3IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tLS0tLS0tDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbkV4cG9uZW50OiAtMzgzDQotcHJlY2lzaW9uOiAgIDE2DQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLQ0KLS0tIHNwZWNpYWwgdmFsdWVzDQotbG9neDgyMCAgbG9nMTAgICBJbmZpbml0eSAtPiAgIEluZmluaXR5DQotbG9neDgyMSAgbG9nMTAgICAwICAgICAgICAtPiAgLUluZmluaXR5DQotbG9neDgyMiAgbG9nMTAgICBOYU4gICAgICAtPiAgIE5hTg0KLWxvZ3g4MjMgIGxvZzEwICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWxvZ3g4MjQgIGxvZzEwICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQotbG9neDgyNSAgbG9nMTAgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24NCi1sb2d4ODI2ICBsb2cxMCAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2DQotbG9neDgyNyAgbG9nMTAgICAtTmFONjU0ICAtPiAgLU5hTjY1NA0KLWxvZ3g4MjggIGxvZzEwICAgTmFOMSAgICAgLT4gICBOYU4xDQotDQotDQotLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMNCi0tLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQ0KLXByZWNpc2lvbjogMTAwMDAwMDAwDQotbG9neDkwMSAgbG9nMTAgMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQotcHJlY2lzaW9uOiAgOTk5OTk5OTkNCi1sb2d4OTAyICBsb2cxMCAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCi0NCi1wcmVjaXNpb246IDkNCi1tYXhFeHBvbmVudDogICAxMDAwMDAwDQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQ0KLWxvZ3g5MDMgIGxvZzEwIDEgICAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQotbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KLW1pbkV4cG9uZW50OiAgIC05OTk5OTkNCi1sb2d4OTA0ICBsb2cxMCAwIC0+ICAtSW5maW5pdHkNCi1tYXhFeHBvbmVudDogICAgOTk5OTk5DQotbWluRXhwb25lbnQ6ICAtMTAwMDAwMA0KLWxvZ3g5MDUgIGxvZzEwIDEgICAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQotbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KLW1pbkV4cG9uZW50OiAgIC05OTk5OTgNCi1sb2d4OTA2ICBsb2cxMCAwIC0+ICAtSW5maW5pdHkNCi0NCi0tLSBOdWxsIHRlc3QNCi1sb2d4OTAwICBsb2cxMCAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsb2cxMC5kZWNUZXN0IC0tIGRlY2ltYWwgbG9nYXJpdGhtIGluIGJhc2UgMTAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4KKy0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24KK3ByZWNpc2lvbjogICA5Citsb2d4czAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4czAwMSBsb2cxMCAgMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2xvZ3hzMDAyIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9neHMwMDMgbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG9neHMwMDQgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2d4czAwNSBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsb2d4czAwNiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKworLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uLCBldGMuKQorcHJlY2lzaW9uOiAgIDE2Citsb2d4MDAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDAwMSBsb2cxMCAgN0UtMTAwMCAgICAgICAgICAgLT4gLTk5OS4xNTQ5MDE5NTk5ODU3ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwMiBsb2cxMCAgMS4xRS05ICAgICAgICAgICAgLT4gLTguOTU4NjA3MzE0ODQxNzc1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwMyBsb2cxMCAgMC4wMDA3ICAgICAgICAgICAgLT4gLTMuMTU0OTAxOTU5OTg1NzQzICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNCBsb2cxMCAgMC4xMSAgICAgICAgICAgICAgLT4gLTAuOTU4NjA3MzE0ODQxNzc1MCAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNSBsb2cxMCAgMC43ICAgICAgICAgICAgICAgLT4gLTAuMTU0OTAxOTU5OTg1NzQzMiAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNiBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ3gwMDA3IGxvZzEwICAxLjUgICAgICAgICAgICAgICAtPiAgMC4xNzYwOTEyNTkwNTU2ODEyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA4IGxvZzEwICAyICAgICAgICAgICAgICAgICAtPiAgMC4zMDEwMjk5OTU2NjM5ODEyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA5IGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgMC40MzQyOTQ0ODE5MDMyNTE4ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEwIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgMC40MzQyOTQ0ODE5MDMyNTE5ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDExIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgMC40MzQyOTQ0ODE5MDMyNTIxICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEyIGxvZzEwICA3ICAgICAgICAgICAgICAgICAtPiAgMC44NDUwOTgwNDAwMTQyNTY4ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEzIGxvZzEwICAxMCAgICAgICAgICAgICAgICAtPiAgMQorbG9neDAwMTQgbG9nMTAgIDEwLjUgICAgICAgICAgICAgIC0+ICAxLjAyMTE4OTI5OTA2OTkzOCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTUgbG9nMTAgIDExICAgICAgICAgICAgICAgIC0+ICAxLjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTYgbG9nMTAgIDcwICAgICAgICAgICAgICAgIC0+ICAxLjg0NTA5ODA0MDAxNDI1NyAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTcgbG9nMTAgIDk5OTkgICAgICAgICAgICAgIC0+ICAzLjk5OTk1NjU2ODM4MDE5MiAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTggbG9nMTAgIDEuMjFFNiAgICAgICAgICAgIC0+ICA2LjA4Mjc4NTM3MDMxNjQ1MCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTkgbG9nMTAgIDEuMUUrOSAgICAgICAgICAgIC0+ICA5LjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMjAgbG9nMTAgIDdFKzEwMDAgICAgICAgICAgIC0+ICAxMDAwLjg0NTA5ODA0MDAxNCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMjEgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBub3RhYmxlIGNhc2VzCistLSBuZWdhdGl2ZXMKK2xvZ3gwMDMxIGxvZzEwIC0xRS05ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDMyIGxvZzEwIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDMzIGxvZzEwIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM0IGxvZzEwIC0wLjcgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM1IGxvZzEwIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM2IGxvZzEwIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM3IGxvZzEwIC0yICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM4IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM5IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQwIGxvZzEwIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQxIGxvZzEwIC0xMCAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQyIGxvZzEwIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDQzIGxvZzEwIC0wRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDQ0IGxvZzEwIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIG90aGVyIHplcm9zCitsb2d4MDA1MSBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDA1MiBsb2cxMCAgMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDA1MyBsb2cxMCAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CistLSBpbmZpbml0aWVzCitsb2d4MDA1NSBsb2cxMCAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsb2d4MDA1NiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gSW5maW5pdHkKKy0tIG9uZXMKK2xvZ3gwMDYxIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ3gwMDYyIGxvZzEwICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ3gwMDYzIGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKK2xvZ3gwMDY0IGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTAKK2xvZ3gxMTAwIGxvZzEwIDEgICAgICAgICAgICAgLT4gMAorbG9neDExMDEgbG9nMTAgMTAgICAgICAgICAgICAtPiAxCitsb2d4MTEwMiBsb2cxMCAxMDAgICAgICAgICAgIC0+IDIKK2xvZ3gxMTAzIGxvZzEwIDEwMDAgICAgICAgICAgLT4gMworbG9neDExMDQgbG9nMTAgMTAwMDAgICAgICAgICAtPiA0Citsb2d4MTEwNSBsb2cxMCAxMDAwMDAgICAgICAgIC0+IDUKK2xvZ3gxMTA2IGxvZzEwIDEwMDAwMDAgICAgICAgLT4gNgorbG9neDExMDcgbG9nMTAgMTAwMDAwMDAgICAgICAtPiA3Citsb2d4MTEwOCBsb2cxMCAxMDAwMDAwMDAgICAgIC0+IDgKK2xvZ3gxMTA5IGxvZzEwIDEwMDAwMDAwMDAgICAgLT4gOQorbG9neDExMTAgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExMTEgbG9nMTAgMTAwMDAwMDAwMDAwICAtPiAxMQorbG9neDExMTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExMTMgbG9nMTAgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2xvZ3gxMTE0IGxvZzEwIDAuMDAwMDAwMDAwMSAtPiAtMTAKK2xvZ3gxMTE1IGxvZzEwIDAuMDAwMDAwMDAxIC0+IC05Citsb2d4MTExNiBsb2cxMCAwLjAwMDAwMDAxIC0+IC04Citsb2d4MTExNyBsb2cxMCAwLjAwMDAwMDEgLT4gLTcKK2xvZ3gxMTE4IGxvZzEwIDAuMDAwMDAxIC0+IC02Citsb2d4MTExOSBsb2cxMCAwLjAwMDAxIC0+IC01Citsb2d4MTEyMCBsb2cxMCAwLjAwMDEgLT4gLTQKK2xvZ3gxMTIxIGxvZzEwIDAuMDAxIC0+IC0zCitsb2d4MTEyMiBsb2cxMCAwLjAxIC0+IC0yCitsb2d4MTEyMyBsb2cxMCAwLjEgLT4gLTEKK2xvZ3gxMTI0IGxvZzEwIDFFLTk5ICAtPiAtOTkKK2xvZ3gxMTI1IGxvZzEwIDFFLTEwMCAtPiAtMTAwCitsb2d4MTEyNiBsb2cxMCAxRS0zODMgLT4gLTM4MworCistLSBjaGVjayBub3JtYWxseSBleGFjdCBjYXNlcyByb3VuZCBwcm9wZXJseQorcHJlY2lzaW9uOiAxCitsb2d4MTE0MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDFFKzEgICAgICAgICBSb3VuZGVkCitsb2d4MTE0MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDFFKzIgICAgICAgICBSb3VuZGVkCitsb2d4MTE0NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDlFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDFFKzMgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorbG9neDExNTEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExNTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExNTMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxLjBFKzIgICAgICAgICBSb3VuZGVkCitsb2d4MTE1NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNTYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5LjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDEuMEUrMyBJbmV4YWN0IFJvdW5kZWQKKy0tIHNvbWUgaGFsZi13YXkgcG9pbnQgcm91bmRzLCBvdGhlciBjYXNlcywgYW5kIG5lZ2F0aXZlcworbG9neDExNTggbG9nMTAgMUUrMTI1ICAgICAgICAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1OSBsb2cxMCAxRSsxMzUgICAgICAgIC0+IDEuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYwIGxvZzEwIDFFKzEyOSAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNjEgbG9nMTAgMUUrMTMxICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MiBsb2cxMCAxRS0xMjMgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MyBsb2cxMCAxRS0xMjYgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NCBsb2cxMCAxRS05MTYgICAgICAgIC0+IC05LjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NSBsb2cxMCAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NiBsb2cxMCAxRS0xMjUgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NyBsb2cxMCAxRS0xMzUgICAgICAgIC0+IC0xLjRFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2OCBsb2cxMCAxRS0xMjkgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2OSBsb2cxMCAxRS0xMzEgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworbG9neDExNzEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExNzIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExNzMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxMDAKK2xvZ3gxMTc0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMTIzCitsb2d4MTE3NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDEyNgorbG9neDExNzYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5MTYKK2xvZ3gxMTc3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gOTk5CisKKy0tIGxvZzEwKDIpIC4uIHRlc3RzIGJvdGggbG4oMikgYW5kIGxuKDEwKSBjb25zdGFudHMsIHRvbworcHJlY2lzaW9uOiA1MAorbG9neDEyMDEgbG9nMTAgMiAgICAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMjAyIGxvZzEwIDIuMDAwIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTIwMyBsb2cxMCAwLjJFMSAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0OQorbG9neDEyMDQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjEgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ4Citsb2d4MTIwNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDcKK2xvZ3gxMjA2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NgorbG9neDEyMDcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTUgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ1Citsb2d4MTIwOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDQKK2xvZ3gxMjA5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4OCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MworbG9neDEyMTAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTkgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQyCitsb2d4MTIxMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDEKK2xvZ3gxMjEyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MAorbG9neDEyMTMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM5Citsb2d4MTIxNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzgKK2xvZ3gxMjE1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNworbG9neDEyMTYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM2Citsb2d4MTIxNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzUKK2xvZ3gxMjE4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNAorbG9neDEyMTkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMzCitsb2d4MTIyMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK2xvZ3gxMjIxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorbG9neDEyMjIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDUgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitsb2d4MTIyMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK2xvZ3gxMjI0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorbG9neDEyMjUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3Citsb2d4MTIyNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk1ICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK2xvZ3gxMjI3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OSAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorbG9neDEyMjggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODkgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0Citsb2d4MTIyOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK2xvZ3gxMjMwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3NCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorbG9neDEyMzEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCitsb2d4MTIzMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2xvZ3gxMjMzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorbG9neDEyMzQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4Citsb2d4MTIzNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK2xvZ3gxMjM2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorbG9neDEyMzcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1Citsb2d4MTIzOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK2xvZ3gxMjM5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworbG9neDEyNDAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitsb2d4MTI0MSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK2xvZ3gxMjQyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorbG9neDEyNDMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5Citsb2d4MTI0NCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK2xvZ3gxMjQ1IGxvZzEwIDIgLT4gMC4zMDEwMzAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworbG9neDEyNDYgbG9nMTAgMiAtPiAwLjMwMTAzMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2Citsb2d4MTI0NyBsb2cxMCAyIC0+IDAuMzAxMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK2xvZ3gxMjQ4IGxvZzEwIDIgLT4gMC4zMDEwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNAorbG9neDEyNDkgbG9nMTAgMiAtPiAwLjMwMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzCitsb2d4MTI1MCBsb2cxMCAyIC0+IDAuMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK2xvZ3gxMjUxIGxvZzEwIDIgLT4gMC4zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMQorbG9neDEyNTIgbG9nMTAgMiAtPiAwLjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTW9yZSBjbG9zZS10by1lLCBldGMuLCB0ZXN0cworcHJlY2lzaW9uOiAgIDM0Citsb2d4MTMwMSBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MSAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ4IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDIgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzAzIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYzICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNCBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDczRS0zMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA1IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTNFLTM0IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDYgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUUtMzUgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNyBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMAorbG9neDEzMDggbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA5IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OUUtMzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMxMCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwMjlFLTMzIEluZXhhY3QgUm91bmRlZAorLS0gbG93ZXIgcAorcHJlY2lzaW9uOiAgICA3Citsb2d4MTMyMCBsb2cxMCAwLjk5OTk5OSAgICAtPiAtNC4zNDI5NDdFLTcgIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjEgbG9nMTAgMC45OTk5OTk5ICAgLT4gLTQuMzQyOTQ1RS04ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzIyIGxvZzEwIDAuOTk5OTk5OTkgIC0+IC00LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyMyBsb2cxMCAwLjk5OTk5OTk5OSAtPiAtNC4zNDI5NDVFLTEwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjQgbG9nMTAgMS4wMDAwMDAwMCAgLT4gIDAKK2xvZ3gxMzI1IGxvZzEwIDEuMDAwMDAwMDEgIC0+ICA0LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNiBsb2cxMCAxLjAwMDAwMDEgICAtPiAgNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjcgbG9nMTAgMS4wMDAwMDEgICAgLT4gIDQuMzQyOTQzRS03ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVhciAxMF4zCitwcmVjaXNpb246ICAgOQorbG9neDEzMzEgbG9nMTAgIDk5OS45OTk5OTk4ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMzIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMzMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzCitsb2d4MTMzNCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzNSBsb2cxMCAxMDAwLjAwMDAwMiAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2Citsb2d4MTM0MSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDIuOTk5OTk5OTk5OTEzMTQxIEluZXhhY3QgUm91bmRlZAorbG9neDEzNDIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAyLjk5OTk5OTk5OTk1NjU3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzQzIGxvZzEwIDEwMDAuMDAwMDAwICAgLT4gMworbG9neDEzNDQgbG9nMTAgMTAwMC4wMDAwMDEgICAtPiAzLjAwMDAwMDAwMDQzNDI5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzQ1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMDA4Njg1ODkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKK2xvZ3gxNDAwIGxvZzEwIDEwRS0zICAgIC0+IC0yCitsb2d4MTQwMSBsb2cxMCAxMEUtMiAgICAtPiAtMQorbG9neDE0MDIgbG9nMTAgMTAwRS0yICAgLT4gIDAKK2xvZ3gxNDAzIGxvZzEwIDEwMDBFLTIgIC0+ICAxCitsb2d4MTQwNCBsb2cxMCAxMDAwMEUtMiAtPiAgMgorbG9neDE0MDUgbG9nMTAgMTBFLTEgICAgLT4gIDAKK2xvZ3gxNDA2IGxvZzEwIDEwMEUtMSAgIC0+ICAxCitsb2d4MTQwNyBsb2cxMCAxMDAwRS0xICAtPiAgMgorbG9neDE0MDggbG9nMTAgMTAwMDBFLTEgLT4gIDMKK2xvZ3gxNDA5IGxvZzEwIDEwRTAgICAgIC0+ICAxCitsb2d4MTQxMCBsb2cxMCAxMDBFMCAgICAtPiAgMgorbG9neDE0MTEgbG9nMTAgMTAwMEUwICAgLT4gIDMKK2xvZ3gxNDEyIGxvZzEwIDEwMDAwRTAgIC0+ICA0Citsb2d4MTQxMyBsb2cxMCAxMEUxICAgICAtPiAgMgorbG9neDE0MTQgbG9nMTAgMTAwRTEgICAgLT4gIDMKK2xvZ3gxNDE1IGxvZzEwIDEwMDBFMSAgIC0+ICA0Citsb2d4MTQxNiBsb2cxMCAxMDAwMEUxICAtPiAgNQorbG9neDE0MTcgbG9nMTAgMTBFMiAgICAgLT4gIDMKK2xvZ3gxNDE4IGxvZzEwIDEwMEUyICAgIC0+ICA0Citsb2d4MTQxOSBsb2cxMCAxMDAwRTIgICAtPiAgNQorbG9neDE0MjAgbG9nMTAgMTAwMDBFMiAgLT4gIDYKKworLS0gUmFuZG9tcworLS0gUD01MCwgd2l0aGluIDAtOTk5OQorUHJlY2lzaW9uOiA1MAorbG9neDI1MDEgbG9nMTAgMC4wMDAzNTQ0ODAwMTY2Nzk2ODE0MTc3NTg5MTI0Njk5MTkxMjY1NTk2MTE2MzM0NTkwNCAtPiAgLTMuNDUwNDA4MjQyNTQxMTc3NTI5MDg2NDA1MzMxODI0NzI3NDk0NDY4NTU4NjE4ODUwNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTAyIGxvZzEwIDcwLjYzNjQ1NTcyNjQyNDMxMTIyODI1NTMzODYzNzkzNTMzMDgyNjk5NTEzNjU5NzY0NCAgLT4gICAxLjg0OTAyODg5OTg0MDg0OTIwNDU3OTMwNzAyNTUzMDIzMzU1NTgxNDA5NzU3MTkyNDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMjMzNTUwMzYyNDczODIxODg5MDYwODEyODA0MDYzMDQwMTY5IC0+IC0xNC42MzE2MTk0NTQzNDM4MzQ4NTgwMjM1NzgyOTkxNDI4NjY1NTc3MTc5MDQyMjM2NjcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNCBsb2cxMCA5Ny43ODM2Mjg2MjE1MjMyNDQ2Nzk5MDEyNjAzNTgyODY4OTg5NTg4MzIxMzU0MzM3NjQgIC0+ICAgMS45OTAyNjYxNDkzMjI0MjE5NTE3ODk3NjU3OTY0MzYyNTcxNjkwNTkyNzM0NDA3MzMwIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDUgbG9nMTAgMDA2Mi4yMzc3MTM1MzE1ODU4MzkyODAyNjEyODEyMDIyODA3ODM4NTk5NTcyMDE3MzQyICAtPiAgIDEuNzk0MDUzNjI5MzA4NTA2NjE5OTI4NzYzMjcyNTAyNjgzNzAxODQ4NjUzMzU0NDE0MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA2IGxvZzEwIDYuMzc2NzYzNDY1MjA3MTA1MzYxOTk3NzYwMjgwNDcyNDEyOTY1Mjk4MTc0Nzg3OTUzMiAgLT4gICAwLjgwNDYwMDMwNzg5ODI1OTYxNjE1MTAwMTYzNTc2MDgwNzYxMzI2ODU3Mzc0MDk4NjQ0IEluZXhhY3QgUm91bmRlZAorbG9neDI1MDcgbG9nMTAgNjMuMjk3MDg4OTgxMzEzMjc4NTI5MzA2NTMzODE0MTk1MDY4ODUwNTMyNjY2NjU4Nzk4ICAtPiAgIDEuODAxMzgzNzM3MzcyNDQyNzA5MjQxNzE3MDE0OTA5ODYxNDQxMDg0OTM1MzgzOTY3MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA4IGxvZzEwIDAuMDAwMDAwNzcyMzk2OTMzMTY4ODE3OTc3MTc4MjAxMTA4OTgxNjc3MjE2MDIyOTkxODcgLT4gIC02LjExMjE1OTQ1OTI3MTg1NTA2MTM3NzM4ODYyNDE5NTE5NjYyNjQ4MjY3NjAzMTAwNDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwOSBsb2cxMCAwLjAwMDAwMDAzOTUzNTgwMzU5NzgwMTg1NTM0ODMwNTcyNDYxOTIyNTI3ODMxMzk1MDAyIC0+ICAtNy40MDMwMDk0MjkzODMzODQ3MTM2MjUyNTQ3MDY5OTA1NDc3MjEzNTQxNzg3MTc3NTYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTAgbG9nMTAgNzU0LjYyOTA1ODE3MzY5OTg5MTY5MTg4OTk4MTExNTI3MjcyNjg4NzkxNTQ0NTc3MjA0ICAtPiAgIDIuODc3NzMzNTI0Mzc2MTMwMDA0Nzc1ODUzNDMwNDM3MTkxMjA5OTk1ODA1NzU0NTQxNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTExIGxvZzEwIDAuMDAwMDAwNDgzNjAzNzg0MTAyNDE0Mjg5MzY2MDcxNDcwNTYyODMyODI4NDkxNTgzMTIgLT4gIC02LjMxNTUxMDMwOTUzMDkzNTM0NTc2MDQwMzgzOTc5ODAwOTE2NTA3NjAzNDYzMzQ1MTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMiBsb2cxMCAwLjAwMDA3NTA5MDM3NTgzNjQ1NjEyNTc3MTk2MTA0NTkxNjcyMDgwNTQyOTMyMTY2MDg5IC0+ICAtNC4xMjQ0MTU3MjE5NzAwMTY2MzE0MDEyMzQ0NzA1NTM4MDg4MDMwNTkyODk2MTExMDI2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTMgbG9nMTAgMC4wMDAwMDAwMDAwMDcwNTQ3NTk0NDYzODkxNTA1MzQxOTgzOTA2MzU2Nzg5ODA5MjA2NCAtPiAtMTEuMTUxNTE3NzkwMjU2NDY2MDQ4NTUzODEwMDAyNTI1ODY4MTk4MTc4MTY3OTUwMzc3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTQgbG9nMTAgOS42MjEwMzAwNDYwNDk3NjU3OTE3NDQ1NDEwOTQ3MDk5NjMzNDc5NjA5MTY1MTIwNjYxICAtPiAgIDAuOTgzMjIxNTcwOTMyNjA5NzgyMDY2MzM5MjI4Nzc3MTYwNzg2ODM1MTg2MTc3Njg0MTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNSBsb2cxMCAwLjAwMDAwMDAwMDUwMTUwMzYxMzg2NTU1NTI3NDk2NjA3MjQ1OTc2MTIwODY0OTg1NjExIC0+ICAtOS4yOTk3MjU5MzMwNzk4MjYxMDQwNDExMDg2ODM1NTYzMjM0MzkwOTM0OTM0NjI5MzQwIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTYgbG9nMTAgMDk4LjI0NzU0MDI5NzMxOTk0MTI1Nzk3NzIzNTQ1MzMzNjc3NjA0NDkwMDc0ODEwNzUxICAtPiAgIDEuOTkyMzIxNjg2Mjg3NDMzNzA3Nzc5NTI3ODYyOTM1MTA2MDgxOTEwNTY3OTY3MDYzMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTE3IGxvZzEwIDcuNTA5MTk5ODE1MDA0Njk5NDMyMDQ0MTQ2Mzg1NDMwMTYyNDc0MjQ5MTAxNTc1Mjk4MCAgLT4gICAwLjg3NTU5MzY2MDc4MDA1OTI0MDgwNzY2NDY5MTU4NzYzNDk5NzI1NDE0MDI0MTI4NzgxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTggbG9nMTAgMC4wMDAwMDAwMDAwMDA3OTU0MDU3MTI3MzMzMDA3NTE5MzY2ODU5Njk0MjI2ODU0MjQyNSAtPiAtMTIuMDk5NDExMjk0MTY1MTc2MDI4ODE3MzA1MTA4NDc1MzI2MzI1MDA2MjUwOTM2OTYzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTkgbG9nMTAgMC4wMDAwMDA0MjM5NTAzNDc5OTU1NTIxNTc4MjkwNzUxNTA3NDEzNDE1NDkxNTQ5MTcwMSAtPiAgLTYuMzcyNjg1MDAzOTEyNTM4MTEzNDA2OTQ1MDgwMjEwODg5MzA3NTYwNDQ2NDEzNTI5NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIwIGxvZzEwIDU2LjY4MzM3NjMwNDY3NDM1NTQ4MTkwNTAyMzE0NTIzODc5OTkwOTMwMTczMjY5NDk4MiAgLT4gICAxLjc1MzQ1NTcxMDc4NTM0ODA0MzU3MDM0MjE4MjYwNzc2MDYyNTA2MzY1ODAwOTE3NTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyMSBsb2cxMCA0OC43MzQwMzM4MTE0NDQxOTUwNzA4MDc2MDY3MjE1MTcxNjk4MTA0MzgwNDk1ODEyMjcgIC0+ICAgMS42ODc4MzIzNjAyNzQxMDY1MTkwOTQyNjU0NzEwMDQ5NDMzODA4MjA4MjkxNTY0MDQ5IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjIgbG9nMTAgMC4wMDA3NDgzMDMxMDkzMDA0Njg2NTAwOTg1MTcwNjk4OTQzMDIyODU2MTg4MDIyMTA2MyAtPiAgLTMuMTI1OTIyNDUwMjIwOTk3NDA4MjIyMzY2NzcxMjAxNjQ0NTU3MjQzMTc5MTkyMDYxOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIzIGxvZzEwIDM2LjY3NzM0ODg4NTExMTU5MzM4NDAyMDgzNjcyMDM5NjI2MjQ5NzEyMjcwODU5ODM1OSAgLT4gICAxLjU2NDM5NzkzNjQyNjA3OTYwODY3NTQ1MzAyODIzMDI2MDU0Nzc1Njc0NjkzOTU0MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNCBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA0NDk1Njc4NTYwNDgwNDMyODU4ODEyNDE5MTQ1ODMzNzQ0IC0+IC0xNi4zNDcyMDQ3NDgyMzk3NDA1MTAwMTQzMjA2MzAzNjMyNDQwMTU5MTYwMjk2MTk1NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNSBsb2cxMCA5NTA5LjU4NTQwMTM2NTA2NDI3OTkzNzQxNTkxMzE5NDAxMDg3NDg1OTQ3NzQzMDcxMDQgIC0+ICAgMy45NzgxNjE1ODI5OTE2MzI2NzQxMTAwMTY2NTE5NzI2ODI0NDMwOTQ1NDA2MzAyNjYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MjYgbG9nMTAgMC4wNzgzNDg5MTI2ODY4OTE3NzAxNDA0NDQ1NDc5MzYwODcxNTI3NjYxNTc0MzgxOTA5NyAtPiAgLTEuMTA1OTY3MDI2MjE5NzY0MzE0NzgwNTUxNzM5ODYyMTI4ODg5NzY2OTg3Njk5NjM0OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI3IGxvZzEwIDAuMDAwMDAwMjk1ODQ1Mjk4ODA3MDYxMjg0NDQ0NTQ2ODg0NTQ5OTkwMzI4MDE5MDQ3OTQgLT4gIC02LjUyODkzNTMyNzU4MTQwNDM3MTAwNzY1MjY5MjA1NjY3MjE1NzAzNzUwMjY5MTcyMDYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyOCBsb2cxMCAzLjA3MTM0OTY1NDQ0OTc2MTgwOTg3OTQzMzI3ODc3NzIxODYxNzY5ODEwMTE5MDQyOTQgIC0+ICAgMC40ODczMjkyNjEwMzg5NjgyODU0NjQyNDM0MTAyOTQ5MjQ2ODEwMDQzMTQxNDA3Mjk5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI5IGxvZzEwIDM1Mi42NjM5MjY3MDc4ODgxNjQ3NDQwNzQ0Mjc4NTQ2MDgwMzgzMzkyNzEzNjQxMzk0MyAgLT4gICAyLjU0NzM2MTAzODgxOTk1NjI3MTQ3MDk4MzYzOTgyNDM5MzMzMjAyODQwNzcwMDgzMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMCBsb2cxMCAwLjAwMzA0NzQzMTI1MTgxODc2MjY3MjEwNTE2NTI3MzYxNzQyMTg1NjE3MDkxODAxNjUwIC0+ICAtMi41MTYwNjYwODMwMTYzOTgxOTY3Nzc0MTI0NzQ1MzExNDk3NDQ3MDUwMDU2NDAwMjA3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzEgbG9nMTAgMC4wMDAwMDA3NjEyMDUzNTg5NDk1MjEzNjQ5OTI1MDM2NDYwNDUzODExNzcyOTQzNzE4MyAtPiAgLTYuMTE4NDk4MTYyOTA0NzA1MTUzMjQ0ODQxMzg2Mzk1MDc3NjQ5NjY1MjQ4MzAxOTQxNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMyIGxvZzEwIDc2OS44ODc5NTk3ODUzNDM1MzA1Mjk2NTI4NjE5NTA1MzczNTAwNzQ3MzE4NzczNTgxNSAgLT4gICAyLjg4NjQyNzUyNzc4NjI2NTI3MDk5ODY0OTg1ODEwNjQxMTc5NTAyODg3OTgyMjIxMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDQxMjk3NDk0ODA4NjEyMjI2MzA0NjE5NTcwMDE2MzM2MTg4IC0+IC0xNS4zODQwNzYyOTI3NDU0MTU5MTc1MTA2Njg0NTQzNjE4Njg2NTk0Njg2Njk4MDQ3MTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNCBsb2cxMCA4NjAuODg4NjQ1OTU3MTQ0MjY5NDAyNDc5NDA5NjAyNTg1NTg4NzY5MDM3NDE5NjY5NzQgIC0+ICAgMi45MzQ5NDY5ODAwNTU0Mjc3OTE1OTIwMjc4MDkwNjQ3MjgzMjMzNDQwODU5MTU1MTc2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzUgbG9nMTAgNTgzOS4wMzI4ODEyOTk0Nzg3MjM1OTAwMTc4NTg3MzcxMDUxMDk2ODk4NjgzOTcyNDQ0ICAtPiAgIDMuNzY2MzQwOTIwODk3MjM5MjU2OTI2OTEyNTUzOTQzODg3NDczNzE0NzkwNjIzODU0MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM2IGxvZzEwIDAuMDAwMDAwMjg1MzI3MTAxNTEyODQ4NDA0NzE2NzA0OTcxMTI4MjEyMDE1OTgzNzc4NDEgLT4gIC02LjU0NDY1Njk3NTM1MTQwMjc2NzU4Nzg4Nzk4NDMyMzgwNjU0ODg0OTA2MTgxNTk0OTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA5NzM0NDkwMDU5OTMxNjM4NDgzNDQ1NjMxODM1NjUxNTgxIC0+IC0xNi4wMTE2ODY3OTQwMTEyNzExMzU5Nzg2MzM4ODA4NjQyNzg2OTIyNTQyNDMxMDY5MzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzOCBsb2cxMCA1Ljg2MTA5NDk1MjY0Mzk1Mjk0ODkyNTIzMDI0NjM0NTAzMDI5ODE1MTE3MTQxNDQzMzAgIC0+ICAgMC43Njc5Nzg3NTcyMjQ1MjU0OTI4MTAyODU1MjA2NzY0NTczMjQ5MDkyOTM2MTk1MjI3OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM5IGxvZzEwIDYuNjI4MjQzMjIyMTExNTkyMzM3MjE1MTE0ODk5MDEzNzE3OTYxMTk3NzU3NjMyNzIwNiAgLT4gICAwLjgyMTM5ODQzNjM5MjI3MjEzMjExMDEyMDQ0MDAwNzg1NzU3MjY3MTU1NzM2MDcxMzYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1NDAgbG9nMTAgMC4wMDAwMDAwMDAwMTk5NDA3MTg2MjM4Njg0NjYyNjk1NDgxOTkyMzkyMzM0NDQxMzQ1NCAtPiAtMTAuNzAwMjU5MTk0NjMyMzM5OTgwMjY2NTU5MjI0NDQ3MjEyMjYwMTE1MDIxNjM3NjI2IEluZXhhY3QgUm91bmRlZAorCistLSBQPTM0LCB3aXRoaW4gMC05OTk5CitQcmVjaXNpb246IDM0Citsb2d4MjIwMSBsb2cxMCAxLjUyMjUxMzIwMzg4OTcxNDE3OTA4ODMyNzMyODg2NDE4MyAgLT4gMC4xODI1NjEwNjc3MDk4ODk2MjUwNDk2NjUxMzMwNDkyMTA5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDIgbG9nMTAgMC4xNzExMjM3NzQ3Njk3MTczMTYxNTQwODA4ODg5MzA0MDQgIC0+IC0wLjc2NjY4OTY0ODM1NDg0NjI1ODI0NjE4OTgwOTI3NjQ0MDggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwMyBsb2cxMCAwLjAwMDAwMDA5OTc0NjcyMzYyNTE3MTQyODMxMDQ5NjM4MzggLT4gLTcuMDAxMTAxMzYwNjUyNTE4Mjc0MjcxNTY5MDEwMzEyMTE1IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDQgbG9nMTAgMC4wMDA4ODU2MTAzNjI0MTIyNDc5NzY5NjQ3NTQzNDY4NjMzIC0+IC0zLjA1Mjc1NzMxMDQ3NjA3MDg5MTgzMDQ5MDMyNzEzODE5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA1IGxvZzEwIDEuOTM4Mjc0ODY4NzM4MDMyOTMwNzA5NDk4MjIxMjM2NzU4ICAtPiAwLjI4NzQxNTM2NDgyNTk0NDk1MjAyMDE1MzYxNzE3MTQ1OTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNiBsb2cxMCA0NzkuNTY2Nzg0NzgyMzgyNjcxMzA4MjYxMzQ0NTAxMDA5NyAgLT4gMi42ODA4NDkwOTU4NTAzNjEwNjg3MDkxNjUxNTcyODY0MzUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNyBsb2cxMCA4ODU2LjEzNjU5OTE3ODgyMDIwMjE0MTgyMzE1NzMzNjgwNCAgLT4gMy45NDcyNDQzMDY1ODQ3NjcxMDE0ODA0NTQyNjE5NTA1NTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwOCBsb2cxMCAwLjAwMDA5MTEwMjYzMTg4MDE5MDM5ODI2NDI4NzEzNDQ4NTggLT4gLTQuMDQwNDY5MDc2NDM0OTc5Mzk4NDM4NjE3NDY0MDMzODI2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDkgbG9nMTAgMC4wMDAwMDAwMDAwMDE3MjcxMTEyNjUwNDI3NDE0NzMyNjMwIC0+IC0xMS43NjI2Nzk2ODMxNDAzODc0ODk5NTE3ODIxMjY1NDkyMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEwIGxvZzEwIDYuOTYyNjA1MzcwMDc4ODg1NjQ3NjM5NTAzNTQ4MjI5Njk1ICAtPiAwLjg0Mjc3MTc4MDcyMDAzMjIzNTI2ODYzOTY5MjU5OTIyNTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxMSBsb2cxMCAwLjMzNTQ4MDQ0Mjg5OTI3OTMxMzI4NTU5MjM1NDE2OTI3ODEgLT4gLTAuNDc0MzMyNzkyMzAxMjE1OTE3MDk2NzYzNjA3MDg0NDgzNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEyIGxvZzEwIDIuMDc5ODY0MjU3NDc0ODU5MDA4MjUyMTY1ODM2NjYzNTA0ICAtPiAwLjMxODAzNDk5MTYxOTgwNTkwNDY4MTI1MDY3NDEzODg4NTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxMyBsb2cxMCAyODA1LjQ3OTUyOTI5MjkzOTQ5OTIyMDI3Njk4NjYyMTk4OCAgLT4gMy40NDgwMDcxMDQxMzk5NzQzNDQ1NjU5Nzg3ODA2MjQ3NDQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNCBsb2cxMCA2Ni40NTczMTEzMzAzNDE4NzM3NDU1NzAyODUzNzIxMzk0OSAgLT4gMS44MjI1NDI3NjcwMDU2NDQwNDE2NjE1MjA5MzYyMjMwODYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNSBsb2cxMCAwLjAwMDAwMDEyMDY1MjEyNjE3NjI2ODE3MzgyNzQ4MjI4MzUgLT4gLTYuOTE4NDY1MDIwMzkwMjE2OTY5NTYxNDk0NzU1NzY3MzE4IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTYgbG9nMTAgMC4wMDAwMDAwMDAxODg0ODkxOTE2MjY0NDAxMTYwNDcyMzgxIC0+IC05LjcyNDcxMzU0ODExOTA2NTM4NjA5MTkzMzAwNzUyODYzMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE3IGxvZzEwIDAuMDAwMDAxNTQ2NzI3OTU1MTcyNjMyNjU4MTMxNDU4Mjc1OSAtPiAtNS44MTA1ODYwNjUwNzA0MzUzODM3NTU3NTk1MTQ2MDg3MzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxOCBsb2cxMCAwLjAwOTA3NzYzMTY3MjgwNjg1ODY3NDQ2MzM5MTQxMzU5NTIgLT4gLTIuMDQyMDI3NDQyODQzNzQ1ODg0NTAzMjgwOTU0MzkwMTE0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTkgbG9nMTAgMC4wMDAwMDAwMDAwMDI0NTQxMTA2NTI4NzEzMzkzNzQwMDMwIC0+IC0xMS42MTAxMDU4NTkzNTYzNTcxMzA5MDExOTE1NjA2OTQ3OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIwIGxvZzEwIDE0LjEyOTM2ODc5Mzg1ODYzNDEwMDgxMDg3NzUwNjQ1ODU2ICAtPiAxLjE1MDEyMjc2MDg5NTQ2Njk4OTg0MTA1NzM4NTc0MjY2MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIxIGxvZzEwIDAuMDAwMDAzNjkxMjQ4MTgzMTM5MjkyMjkyMjY0NzIzMTM5MiAtPiAtNS40MzI4MjY3NTM3ODk4OTIyODM1NTYyMTEzODA4MjQyMDMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyMiBsb2cxMCAwLjAwMDAwMDAwMDQwNjc0Nzc1MjU0MjA0MjQyNzAxMzg3MzQgLT4gLTkuMzkwNjc0ODM4MDUwMDczMTIyODU3ODY4MDEyNDc1MDYwIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjMgbG9nMTAgNzA4MC4xMjI1NjI3MDUzOTk3NDQ5NjkzMTk1ODk4MDYxOTQgIC0+IDMuODUwMDQwNzc1NzQ3MTAzMzE4NzI0MzMwMDQ3NTQ2OTE2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjQgbG9nMTAgMjYxLjM0OTE0MTEzNjM2NzkyMDkxNzU1MjQ3OTAyNTU3MjUgIC0+IDIuNDE3MjIxMDc3MjI3NTM2MzE5NjU1Njk5NTE3NTMwODU1IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjUgbG9nMTAgMDAzLjk5NDU1ODE0NDk5MTUyNDAwOTQ3MjgzODAwNDE0OTQgIC0+IDAuNjAxNDY4NzQ3MTUzMTk4ODI2MDgyMzA2Njk5Nzg0NTY5MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI2IGxvZzEwIDAuMDAwMDAwMDAwMDU4MzU0OTE2NDU4ODQ5NTIwNjc2Nzg0MCAtPiAtMTAuMjMzOTIyNTQ4MzQxODI2NzcwMjMyMzE3MTM1MTkzNDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNyBsb2cxMCA5NTY3Ljk2MTgzMjYwNzI0MDI3ODM0Mjc2MTA4ODQ4NzQ4NCAgLT4gMy45ODA4MTk0MzQyMTExMDc2MzE1NjkzODYxNDcwMTYzNjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyOCBsb2cxMCAwNi4yNjU5Mjk3OTE2MDM0Mjk3Mjc3NzIxOTgyODg2NzAzMyAgLT4gMC43OTY5ODU1MjQzOTY2MjIxNDA4NTk1MDI0MDEyNTc0NzI5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjkgbG9nMTAgMC4wMDAwMDAwMDAwNTg5ODQ3MDQ2NTk4MDY3MjczMjg3MzE5IC0+IC0xMC4yMjkyNjA1OTA3ODIwNjIxODcxNzc1NTI1MzU4MjkwNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMwIGxvZzEwIDU2Ny45Mzg4NjQ4MjM1NTg5MjA0NzY5NDQyODYzNzI0OTk3ICAtPiAyLjc1NDMwMTU4OTA1ODMxMzU3NjQ3MjM4MDI2MjkwNzYzOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMxIGxvZzEwIDAzOS43NzkwMzI1NDgwMDM3Nzc4OTE4MTYyMjY0ODgzNDE1ICAtPiAxLjU5OTY1NDIxNjU5MjAxOTE5OTYzOTI4NTMwODk5Nzg4NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMyIGxvZzEwIDAuMDAwMDAwMDAwNTEyMzk1MTkyMTg5NDE2MjE0OTgxNzIwNyAtPiAtOS4yOTAzOTQ5NTM4OTg4NjI2OTQ4NDczMjcxMzcyNDI2OTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMzg1MDA5OTk3MjM2MzY5MDQyNzY3MjMgLT4gLTExLjQxNDUyNzk5MzM3OTI0MDU2MTg2ODY3MzI0ODU0NjkxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzQgbG9nMTAgMC4wMDA2NzI2NTAwNjU4OTc3NzU5ODI1NjE2NTM3OTM1ODY0IC0+IC0zLjE3MjIxMDgxMDkyMjc2ODcyNTY4NzY3MTg0OTQyMTc5MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM1IGxvZzEwIDI2MC4yNDAwMjUwNDc1OTY3NTI4NDI5OTQzNzc5MTI2NTA3ICAtPiAyLjQxNTM3NDA5MjA3Mzc5OTIwNDIzNjgwMTM4MzA3MDA2NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM2IGxvZzEwIDAuMDAwMDAwMDAwNjEwMTk0MjMzOTM4NTEwMjU4NTA0MjU0OCAtPiAtOS4yMTQ1MzE5MDA1NjIwNDY1NTcxOTEyNjEyMjY2MzI1MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzNyBsb2cxMCAwLjAwMDAwMDAwMTA4NDY4Njc1MDEzODI3NDY3NjAwNjY1NTcgLT4gLTguOTY0Njk1NjY0ODgzMjgyNDA2MzU5ODc0MjQyMzg3MjM2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzggbG9nMTAgNjAuMjQwNzgzNzU1Njg4MTQ3NjkwMTAzMzM3MTE1MDk5MjggIC0+IDEuNzc5ODkwNjEzNTY3MDg0MjUzMTY4MzczMjY2NjQ4OTIyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzkgbG9nMTAgMC4wMDEyMDU4NzM4NzExNzU3NjY5MzM3NjAwMjUyOTg2MDkzIC0+IC0yLjkxODY5ODExNTAxMjYwNTkxNTc1MzcyODIyMDg5NjAxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjQwIGxvZzEwIDIzMC45NDUwOTMwMTk3ODQxNjAwNjExNTAzMDk1MTg1NjAwICAtPiAyLjM2MzUwODczOTA1NjgyMjg0Njc0Mjk0MjU5OTYyODk2NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD0xNiwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDE2Citsb2d4MjEwMSBsb2cxMCAwLjAwNzIwNjcxMTk2MDUxODQgLT4gLTIuMTQyMjYyODM1NTczMDM4IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDIgbG9nMTAgNTAzLjY4Mjg0ODIyMjY2MjQgIC0+IDIuNzAyMTU3MTYyMTk1NjUyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDMgbG9nMTAgNjQuOTYwNzQ0NDc4MjE4MTUgIC0+IDEuODEyNjUwOTkzNDY0MTc0IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDQgbG9nMTAgNDguNzU0MDg1OTc0NjcyNDYgIC0+IDEuNjg4MDExMDE4ODQyNjAwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDUgbG9nMTAgMC4wMzI5MDA5ODM5MjY5NTg3IC0+IC0xLjQ4Mjc5MTExMzk3NTI4MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA2IGxvZzEwIDIyMy41MzIwNDE1MDYwNjMzICAtPiAyLjM0OTMzOTc4NDUyMzQxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA3IGxvZzEwIDczLjEyNzY1MDAyMjkyMTk0ICAtPiAxLjg2NDA4MTYxNzQ3NjI2OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA4IGxvZzEwIDQ4Ny4zNzQ5Mzc4MzU4NTA5ICAtPiAyLjY4Nzg2MzE5MjgwMjI1MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA5IGxvZzEwIDAuMDAwMDAxOTY3MTk4NzYyMSAtPiAtNS43MDYxNTE3NTc1NTc5MjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMCBsb2cxMCAwLjA1NzA2ODA2NjA2MDk3ODQgLT4gLTEuMjQzNjA2ODQ0Njk3ODczIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTEgbG9nMTAgMzMuMTAzMTE2Mzg3ODg5OTggIC0+IDEuNTE5ODY4ODgwOTc2NzczIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTIgbG9nMTAgMC4wNjg3MzgyNjk5MTg3MDc3IC0+IC0xLjE2MjgwMTQwMjg2ODE4NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTEzIGxvZzEwIDI1OC45NDE2MTkzNjI2NDg0ICAtPiAyLjQxMzIwMTg1OTY1NDE0NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE0IGxvZzEwIDAuMDAwNTMwNjEwMDEzNjczNiAtPiAtMy4yNzUyMjQ1NTgyNjk3MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNSBsb2cxMCA2NS43ODQ5MDM5MzQwODU3MiAgLT4gMS44MTgxMjYyNDQ4MjUxMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNiBsb2cxMCA1MDQuMjMyODg0MjA3MzUxMCAgLT4gMi43MDI2MzExNjUzNDY5NTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNyBsb2cxMCA5LjQxNzQzMjc1NTgxNTAyNyAgLT4gMC45NzM5MzI1Mjc4NTI0NTAzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTggbG9nMTAgMDA2LjcwNTQ4MzUzNTU0OTggIC0+IDAuODI2NDMwMTAwNDk0NzY0MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE5IGxvZzEwIDAuMDkxNzAxMjI3MjM2MzkxNSAtPiAtMS4wMzc2MjQ4NTIxMzMzOTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMCBsb2cxMCA1Ljk1OTQwNDM4NTI0NDkyMSAgLT4gMC43NzUyMDI4NTYxOTUzNDAxIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjEgbG9nMTAgMC4wMDAxMjA5NzU5MTQ4NDg2IC0+IC0zLjkxNzMwMTA4NDk2ODkwMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIyIGxvZzEwIDAuMDAwNDcwNjExMjEzOTgzOCAtPiAtMy4zMjczMzc3Mjg0MjgwMzkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMyBsb2cxMCAwLjAwNjk3MDA0NTczNzcwNDYgLT4gLTIuMTU2NzY0MzcyMDM1NzcxIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjQgbG9nMTAgMC41MTU1NTg0NTY5ODUyNjE5IC0+IC0wLjI4NzcyMjA4NDc4MDUwMjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNSBsb2cxMCA4OC4wNjAwNTg4NTYwNzQxNCAgLT4gMS45NDQ3Nzg5NzEzODk5MTMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNiBsb2cxMCAwLjA0NDgyNDAwMzgyMTk4NjYgLT4gLTEuMzQ4NDg5MzUzNTA5NzA5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMjcgbG9nMTAgMy40MTk2MjI0ODQwNTk1NjUgIC0+IDAuNTMzOTc4MTYzOTEwMTE0NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI4IGxvZzEwIDUuMTcxMTIzMzUzODU4NzIxICAtPiAwLjcxMzU4NDg5NzcxNDI4NTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyOSBsb2cxMCAwLjAwMDIxMzMxODgzMTk4MDcgLT4gLTMuNjcwOTcwODAyOTQ1ODcyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzAgbG9nMTAgNDYuMjEwODY3MDMxMzY5NjYgIC0+IDEuNjY0NzQ0MTE3MDQ1MTQ5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzEgbG9nMTAgMC4wMDAwNjMxMDUzNzE0NDE1IC0+IC00LjE5OTkzMzY3MjYzOTg4MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTMyIGxvZzEwIDc4LjY2MDE5MTk2ODcwNjk4ICAtPiAxLjg5NTc1NTAwMTk2MjQ2OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTMzIGxvZzEwIDAuMDAwNzE1MjI3ODM1MTE4OCAtPiAtMy4xNDU1NTU1OTIwODIyOTcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNCBsb2cxMCA0NS41MjUwOTgxOTkyODUzNiAgLT4gMS42NTgyNTA4OTEyNTY4OTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNSBsb2cxMCAwLjAwMDA3MDMyMjc3OTU3NDAgLT4gLTQuMTUyOTAzOTcxNjk3MTgzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzYgbG9nMTAgMjYuMjQ0Mzg2NDE0MjY2NjkgIC0+IDEuNDE5MDM2NDIzNTUwNTk5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzcgbG9nMTAgMC4wMDAwMDQ0NjU0ODI5NTM1IC0+IC01LjM1MDEzMTU2NDE2NjgxNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM4IGxvZzEwIDAuNzM2MDcwMjczMzA2MjUyOSAtPiAtMC4xMzMwODA3MjExODkzNjExIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzkgbG9nMTAgOC40MTcwNTkxNzY0Njk2NTUgIC0+IDAuOTI1MTYwMzgwNTExMjc3OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTQwIGxvZzEwIDAuMDAwMjkyNjU3MDc2Nzk2OCAtPiAtMy41MzM2NDA5Njk2NjQ4MTggSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOTkKK1ByZWNpc2lvbjogNworbG9neDIwMDEgbG9nMTAgNTcuMjYwODkgIC0+IDEuNzU3ODU4IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDIgbG9nMTAgMC4wNTc1NDIxIC0+IC0xLjI0MDAxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDAzIGxvZzEwIDAuNTkxODQ2NSAtPiAtMC4yMjc3OTA5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDQgbG9nMTAgMC4wMDY4Nzc2IC0+IC0yLjE2MjU2MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA1IGxvZzEwIDAuMDA2NjgzMyAtPiAtMi4xNzUwMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNiBsb2cxMCA5LjkyNjk2MyAgLT4gMC45OTY4MTY0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDcgbG9nMTAgMC4wMDQxODUyIC0+IC0yLjM3ODI4NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA4IGxvZzEwIDg0LjE1NDEyICAtPiAxLjkyNTA3NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA5IGxvZzEwIDIuNDY2ODU2ICAtPiAwLjM5MjE0MzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMCBsb2cxMCAwLjAwNTgwNDcgLT4gLTIuMjM2MjIwIEluZXhhY3QgUm91bmRlZAorbG9neDIwMTEgbG9nMTAgOS44ODUxNTQgIC0+IDAuOTk0OTgzNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDEyIGxvZzEwIDAuNjY2NzY1NCAtPiAtMC4xNzYwMjY5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTMgbG9nMTAgMzQuNjU3MzYgIC0+IDEuNTM5Nzk1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTQgbG9nMTAgMC4wMDI2ODg0IC0+IC0yLjU3MDUwNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE1IGxvZzEwIDAuMDQzMjc2NyAtPiAtMS4zNjM3NDYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNiBsb2cxMCA2Ni4wMTQwNyAgLT4gMS44MTk2MzcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNyBsb2cxMCAwLjAwNzA1NzIgLT4gLTIuMTUxMzY4IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTggbG9nMTAgMC4wNzMxNjEzIC0+IC0xLjEzNTcxOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE5IGxvZzEwIDkuODM4OTgzICAtPiAwLjk5Mjk1MDIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMCBsb2cxMCAxNS44OTY5NiAgLT4gMS4yMDEzMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMSBsb2cxMCA4LjQ1OTI0NyAgLT4gMC45MjczMzE3IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjIgbG9nMTAgMC4wMDEwODczIC0+IC0yLjk2MzY1MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIzIGxvZzEwIDAuNjQ5ODYxOSAtPiAtMC4xODcxNzg5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjQgbG9nMTAgMC4wODQ3MDA4IC0+IC0xLjA3MjExMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI1IGxvZzEwIDAuMDA3NTQ4OSAtPiAtMi4xMjIxMTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNiBsb2cxMCA1MS4xMTE1MiAgLT4gMS43MDg1MTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNyBsb2cxMCAwLjcyMzM4NjYgLT4gLTAuMTQwNjI5NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI4IGxvZzEwIDIuMjU0NzIxICAtPiAwLjM1MzA5MjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyOSBsb2cxMCA2LjU2ODQ0NCAgLT4gMC44MTc0NjI1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMzAgbG9nMTAgODMuNzI2MzkgIC0+IDEuOTIyODYyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzEgbG9nMTAgNi43MjA1ODUgIC0+IDAuODI3NDA3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDMyIGxvZzEwIDg3LjkwMzY2ICAtPiAxLjk0NDAwNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDMzIGxvZzEwIDAuMDQzMzMyNCAtPiAtMS4zNjMxODcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNCBsb2cxMCAzNC42MzkxMiAgLT4gMS41Mzk1NjcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNSBsb2cxMCAwLjgwODkwNTkgLT4gLTAuMDkyMTAyMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNiBsb2cxMCA3Ljc5MzQwNSAgLT4gMC44OTE3MjcyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzcgbG9nMTAgMC4wMDQxNzU3IC0+IC0yLjM3OTI3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM4IGxvZzEwIDcuMTM1NDE3ICAtPiAwLjg1MzQxOTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzOSBsb2cxMCAxMi40OTU3MCAgLT4gMS4wOTY3NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjA0MCBsb2cxMCA2LjM1NjI3NiAgLT4gMC44MDMyMDI3IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tLQorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzcGVjaWFsIHZhbHVlcworbG9neDgyMCAgbG9nMTAgICBJbmZpbml0eSAtPiAgIEluZmluaXR5Citsb2d4ODIxICBsb2cxMCAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkKK2xvZ3g4MjIgIGxvZzEwICAgTmFOICAgICAgLT4gICBOYU4KK2xvZ3g4MjMgIGxvZzEwICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitsb2d4ODI0ICBsb2cxMCAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorbG9neDgyNSAgbG9nMTAgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2xvZ3g4MjYgIGxvZzEwICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2xvZ3g4MjcgIGxvZzEwICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2xvZ3g4MjggIGxvZzEwICAgTmFOMSAgICAgLT4gICBOYU4xCisKKworLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCitwcmVjaXNpb246IDEwMDAwMDAwMAorbG9neDkwMSAgbG9nMTAgMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CitwcmVjaXNpb246ICA5OTk5OTk5OQorbG9neDkwMiAgbG9nMTAgMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG9neDkwMyAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2xvZ3g5MDQgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMAorbG9neDkwNSAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK2xvZ3g5MDYgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQorCistLSBOdWxsIHRlc3QKK2xvZ3g5MDAgIGxvZzEwICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZ2IuZGVjVGVzdAppbmRleCBmZjQyMGQwLi44Yjc5MDA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QKQEAgLTEsMTg4ICsxLDE4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gbG9nYi5kZWNUZXN0IC0tIHJldHVybiBpbnRlZ3JhbCBhZGp1c3RlZCBleHBvbmVudCBhcyBwZXIgNzU0ciAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDkuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4NCi0tLSBoYXZlIHVudXN1YWwgcGF0aHMgKGVzcGVjaWFsbHkgdGhlIDEwKipuIHJlc3VsdHMpLg0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLQ0KLS0tIGJhc2ljcyAmIGV4YW1wbGVzDQotcHJlY2lzaW9uOiAgIDkNCi1sb2dieDAwMSBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCi1sb2dieDAwMiBsb2diICAxRS05OTkgICAgICAgICAgICAtPiAtOTk5DQotbG9nYngwMDMgbG9nYiAgOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQ0KLWxvZ2J4MDA0IGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zDQotbG9nYngwMDUgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTINCi1sb2dieDAwNiBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMA0KLWxvZ2J4MDA3IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwDQotbG9nYngwMDggbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDANCi1sb2dieDAwOSBsb2diICAyLjUwICAgICAgICAgICAgICAtPiAgMA0KLWxvZ2J4MDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxDQotbG9nYngwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDENCi1sb2dieDAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMg0KLWxvZ2J4MDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyDQotbG9nYngwMTQgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQotDQotLS0gbmVnYXRpdmVzIGFyZSB0cmVhdGVkIGFzIHBvc2l0aXZlcw0KLWxvZ2J4MDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MDIyIGxvZ2IgLTFFLTk5OSAgICAgICAgICAgIC0+IC05OTkNCi1sb2dieDAyMyBsb2diIC05RS05OTkgICAgICAgICAgICAtPiAtOTk5DQotbG9nYngwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMNCi1sb2dieDAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMA0KLWxvZ2J4MDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwDQotbG9nYngwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDENCi1sb2dieDAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQ0KLWxvZ2J4MDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyDQotbG9nYngwMzAgbG9nYiAtMTAwMDAwMDAwICAgICAgICAgLT4gIDgNCi1sb2dieDAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCi0NCi0tLSB6ZXJvcw0KLWxvZ2J4MTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLWxvZ2J4MTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KLQ0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQotbG9nYngxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOA0KLWxvZ2J4MTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgNCi1sb2dieDEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4DQotbG9nYngxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotbG9nYngxMzEgbG9nYiAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOTk5DQotbG9nYngxMzIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQ0KLWxvZ2J4MTMzIGxvZ2IgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC05OTkNCi1sb2dieDEzNCBsb2diICAxRS0xMDA3ICAgICAgICAgICAtPiAtMTAwNw0KLQ0KLWxvZ2J4MTM1IGxvZ2IgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xMDA3DQotbG9nYngxMzYgbG9nYiAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTk5OQ0KLWxvZ2J4MTM3IGxvZ2IgIC0xRS05OTkgICAgICAgICAgIC0+IC05OTkNCi1sb2dieDEzOCBsb2diICAtOS45OTk5OTk5OUUrOTk5ICAtPiAgOTk5DQotDQotLS0gb25lcw0KLWxvZ2J4MDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDANCi1sb2dieDAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwDQotbG9nYngwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KLWxvZ2J4MDA2NCBsb2diICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCi0NCi0tLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMA0KLWxvZ2J4MTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMA0KLWxvZ2J4MTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQ0KLWxvZ2J4MTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMg0KLWxvZ2J4MTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMw0KLWxvZ2J4MTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNA0KLWxvZ2J4MTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQ0KLWxvZ2J4MTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNg0KLWxvZ2J4MTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNw0KLWxvZ2J4MTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOA0KLWxvZ2J4MTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQ0KLWxvZ2J4MTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTANCi1sb2dieDExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExDQotbG9nYngxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMg0KLWxvZ2J4MTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExDQotbG9nYngxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMA0KLWxvZ2J4MTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05DQotbG9nYngxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOA0KLWxvZ2J4MTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNw0KLWxvZ2J4MTExOCBsb2diIDAuMDAwMDAxIC0+IC02DQotbG9nYngxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQ0KLWxvZ2J4MTEyMCBsb2diIDAuMDAwMSAtPiAtNA0KLWxvZ2J4MTEyMSBsb2diIDAuMDAxIC0+IC0zDQotbG9nYngxMTIyIGxvZ2IgMC4wMSAtPiAtMg0KLWxvZ2J4MTEyMyBsb2diIDAuMSAtPiAtMQ0KLWxvZ2J4MTEyNCBsb2diIDFFLTk5ICAtPiAtOTkNCi1sb2dieDExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMA0KLWxvZ2J4MTEyNiBsb2diIDFFLTM4MyAtPiAtMzgzDQotbG9nYngxMTI3IGxvZ2IgMUUtOTk5IC0+IC05OTkNCi0NCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hDQotbG9nYngxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTINCi1sb2dieDE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQ0KLWxvZ2J4MTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwDQotbG9nYngxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDENCi1sb2dieDE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMg0KLWxvZ2J4MTQwNSBsb2diIDEwRS0xICAgIC0+ICAwDQotbG9nYngxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDENCi1sb2dieDE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMg0KLWxvZ2J4MTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzDQotbG9nYngxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDENCi1sb2dieDE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMg0KLWxvZ2J4MTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzDQotbG9nYngxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQNCi1sb2dieDE0MTMgbG9nYiAxMEUxICAgICAtPiAgMg0KLWxvZ2J4MTQxNCBsb2diIDEwMEUxICAgIC0+ICAzDQotbG9nYngxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQNCi1sb2dieDE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQ0KLWxvZ2J4MTQxNyBsb2diIDEwRTIgICAgIC0+ICAzDQotbG9nYngxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQNCi1sb2dieDE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQ0KLWxvZ2J4MTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2DQotDQotLS0gaW5leGFjdHMNCi1wcmVjaXNpb246IDINCi1sb2dieDE1MDAgbG9nYiAxMDAwMEUyICAgICAgIC0+ICA2DQotbG9nYngxNTAxIGxvZ2IgMUUrOTkgICAgICAgICAtPiAgOTkNCi1sb2dieDE1MDIgbG9nYiAxRS05OSAgICAgICAgIC0+IC05OQ0KLWxvZ2J4MTUwMyBsb2diIDFFKzEwMCAgICAgICAgLT4gIDEuMEUrMiAgUm91bmRlZA0KLWxvZ2J4MTUwNCBsb2diIDFFKzk5OSAgICAgICAgLT4gIDEuMEUrMyAgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTA1IGxvZ2IgMUUtMTAwICAgICAgICAtPiAtMS4wRSsyICBSb3VuZGVkDQotbG9nYngxNTA2IGxvZ2IgMUUtOTk5ICAgICAgICAtPiAtMS4wRSszICBJbmV4YWN0IFJvdW5kZWQNCi1sb2dieDE1MDcgbG9nYiAxRS0xMTExICAgICAgIC0+IC0xLjFFKzMgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUwOCBsb2diIDFFLTMzMzMgICAgICAgLT4gLTMuM0UrMyAgSW5leGFjdCBSb3VuZGVkDQotbG9nYngxNTA5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtNi43RSszICBJbmV4YWN0IFJvdW5kZWQNCi1sb2dieDE1MTAgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICAxLjBFKzkgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUxMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMEUrOSAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxDQotbG9nYngxNTE3IGxvZ2IgMUUtMTExMSAgICAgICAtPiAtMUUrMyAgICBJbmV4YWN0IFJvdW5kZWQNCi1sb2dieDE1MTggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zRSszICAgIEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUxOSBsb2diIDFFLTY2NjYgICAgICAgLT4gLTdFKzMgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA4DQotbG9nYngxNTIwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZA0KLWxvZ2J4MTUyMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDkNCi1sb2dieDE1MjMgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTkNCi1sb2dieDE1MjQgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC05OTk5OTk5OTkNCi0NCi0tLSBzcGVjaWFsIHZhbHVlcw0KLXByZWNpc2lvbjogOQ0KLWxvZ2J4ODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KLWxvZ2J4ODIxICBsb2diICAtSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KLWxvZ2J4ODIyICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQotbG9nYng4MjMgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTg0KLWxvZ2J4ODI0ICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLWxvZ2J4ODI1ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQotbG9nYng4MjYgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24NCi1sb2dieDgyNyAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2DQotbG9nYng4MjggIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NA0KLWxvZ2J4ODI5ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xDQotDQotLS0gTnVsbCB0ZXN0DQotbG9nYng5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbG9nYi5kZWNUZXN0IC0tIHJldHVybiBpbnRlZ3JhbCBhZGp1c3RlZCBleHBvbmVudCBhcyBwZXIgNzU0ciAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGVtcGhhc2lzZXMgdGhlIHRlc3Rpbmcgb2Ygbm90YWJsZSBjYXNlcywgYXMgdGhleSB3aWxsIG9mdGVuCistLSBoYXZlIHVudXN1YWwgcGF0aHMgKGVzcGVjaWFsbHkgdGhlIDEwKipuIHJlc3VsdHMpLgorCitleHRlbmRlZDogICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gYmFzaWNzICYgZXhhbXBsZXMKK3ByZWNpc2lvbjogICA5Citsb2dieDAwMSBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MDAyIGxvZ2IgIDFFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDAzIGxvZ2IgIDlFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDA0IGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCitsb2dieDAwNSBsb2diICAwLjAzICAgICAgICAgICAgICAtPiAtMgorbG9nYngwMDYgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDA3IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAwOCBsb2diICAyLjUgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMDkgbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAxMSBsb2diICA3MCAgICAgICAgICAgICAgICAtPiAgMQorbG9nYngwMTIgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDIKK2xvZ2J4MDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyCitsb2dieDAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbmVnYXRpdmVzIGFyZSB0cmVhdGVkIGFzIHBvc2l0aXZlcworbG9nYngwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDAyMiBsb2diIC0xRS05OTkgICAgICAgICAgICAtPiAtOTk5Citsb2dieDAyMyBsb2diIC05RS05OTkgICAgICAgICAgICAtPiAtOTk5Citsb2dieDAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMworbG9nYngwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQorbG9nYngwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ2J4MDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyCitsb2dieDAzMCBsb2diIC0xMDAwMDAwMDAgICAgICAgICAtPiAgOAorbG9nYngwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKy0tIHplcm9zCitsb2dieDExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworbG9nYngxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOAorbG9nYngxMjIgbG9nYiAgLTI2ODI2ODI2OCAgICAgICAgLT4gOAorbG9nYngxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAorbG9nYngxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOAorCistLSBObWF4LCBObWluLCBOdGlueQorbG9nYngxMzEgbG9nYiAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOTk5Citsb2dieDEzMiBsb2diICAxRS05OTkgICAgICAgICAgICAtPiAtOTk5Citsb2dieDEzMyBsb2diICAxLjAwMDAwMDAwRS05OTkgICAtPiAtOTk5Citsb2dieDEzNCBsb2diICAxRS0xMDA3ICAgICAgICAgICAtPiAtMTAwNworCitsb2dieDEzNSBsb2diICAtMUUtMTAwNyAgICAgICAgICAtPiAtMTAwNworbG9nYngxMzYgbG9nYiAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTk5OQorbG9nYngxMzcgbG9nYiAgLTFFLTk5OSAgICAgICAgICAgLT4gLTk5OQorbG9nYngxMzggbG9nYiAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gIDk5OQorCistLSBvbmVzCitsb2dieDAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsb2dieDAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwCitsb2dieDAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCitsb2dieDAwNjQgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCitsb2dieDExMDAgbG9nYiAxICAgICAgICAgICAgIC0+IDAKK2xvZ2J4MTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQorbG9nYngxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCitsb2dieDExMDMgbG9nYiAxMDAwICAgICAgICAgIC0+IDMKK2xvZ2J4MTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNAorbG9nYngxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1Citsb2dieDExMDYgbG9nYiAxMDAwMDAwICAgICAgIC0+IDYKK2xvZ2J4MTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNworbG9nYngxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4Citsb2dieDExMDkgbG9nYiAxMDAwMDAwMDAwICAgIC0+IDkKK2xvZ2J4MTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTAKK2xvZ2J4MTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKK2xvZ2J4MTExMiBsb2diIDEwMDAwMDAwMDAwMDAgLT4gMTIKK2xvZ2J4MTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExCitsb2dieDExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCitsb2dieDExMTUgbG9nYiAwLjAwMDAwMDAwMSAtPiAtOQorbG9nYngxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOAorbG9nYngxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03Citsb2dieDExMTggbG9nYiAwLjAwMDAwMSAtPiAtNgorbG9nYngxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQorbG9nYngxMTIwIGxvZ2IgMC4wMDAxIC0+IC00Citsb2dieDExMjEgbG9nYiAwLjAwMSAtPiAtMworbG9nYngxMTIyIGxvZ2IgMC4wMSAtPiAtMgorbG9nYngxMTIzIGxvZ2IgMC4xIC0+IC0xCitsb2dieDExMjQgbG9nYiAxRS05OSAgLT4gLTk5Citsb2dieDExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMAorbG9nYngxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMKK2xvZ2J4MTEyNyBsb2diIDFFLTk5OSAtPiAtOTk5CisKKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKK2xvZ2J4MTQwMCBsb2diIDEwRS0zICAgIC0+IC0yCitsb2dieDE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQorbG9nYngxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDAKK2xvZ2J4MTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxCitsb2dieDE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMgorbG9nYngxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDAKK2xvZ2J4MTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxCitsb2dieDE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMgorbG9nYngxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMKK2xvZ2J4MTQwOSBsb2diIDEwRTAgICAgIC0+ICAxCitsb2dieDE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMgorbG9nYngxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMKK2xvZ2J4MTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0Citsb2dieDE0MTMgbG9nYiAxMEUxICAgICAtPiAgMgorbG9nYngxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMKK2xvZ2J4MTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0Citsb2dieDE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQorbG9nYngxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMKK2xvZ2J4MTQxOCBsb2diIDEwMEUyICAgIC0+ICA0Citsb2dieDE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQorbG9nYngxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYKKworLS0gaW5leGFjdHMKK3ByZWNpc2lvbjogMgorbG9nYngxNTAwIGxvZ2IgMTAwMDBFMiAgICAgICAtPiAgNgorbG9nYngxNTAxIGxvZ2IgMUUrOTkgICAgICAgICAtPiAgOTkKK2xvZ2J4MTUwMiBsb2diIDFFLTk5ICAgICAgICAgLT4gLTk5Citsb2dieDE1MDMgbG9nYiAxRSsxMDAgICAgICAgIC0+ICAxLjBFKzIgIFJvdW5kZWQKK2xvZ2J4MTUwNCBsb2diIDFFKzk5OSAgICAgICAgLT4gIDEuMEUrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MDUgbG9nYiAxRS0xMDAgICAgICAgIC0+IC0xLjBFKzIgIFJvdW5kZWQKK2xvZ2J4MTUwNiBsb2diIDFFLTk5OSAgICAgICAgLT4gLTEuMEUrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MDcgbG9nYiAxRS0xMTExICAgICAgIC0+IC0xLjFFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTA4IGxvZ2IgMUUtMzMzMyAgICAgICAtPiAtMy4zRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwOSBsb2diIDFFLTY2NjYgICAgICAgLT4gLTYuN0UrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MTAgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICAxLjBFKzkgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTExIGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtMS4wRSs5ICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorbG9nYngxNTE3IGxvZ2IgMUUtMTExMSAgICAgICAtPiAtMUUrMyAgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxOCBsb2diIDFFLTMzMzMgICAgICAgLT4gLTNFKzMgICAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MTkgbG9nYiAxRS02NjY2ICAgICAgIC0+IC03RSszICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA4Citsb2dieDE1MjAgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICAxLjAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MjEgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC0xLjAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK2xvZ2J4MTUyMyBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OQorbG9nYngxNTI0IGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtOTk5OTk5OTk5CisKKy0tIHNwZWNpYWwgdmFsdWVzCitwcmVjaXNpb246IDkKK2xvZ2J4ODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQorbG9nYng4MjEgIGxvZ2IgIC1JbmZpbml0eSAtPiAgIEluZmluaXR5Citsb2dieDgyMiAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworbG9nYng4MjMgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTgorbG9nYng4MjQgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2xvZ2J4ODI1ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitsb2dieDgyNiAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorbG9nYng4MjcgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1NgorbG9nYng4MjggIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NAorbG9nYng4MjkgIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjEKKworLS0gTnVsbCB0ZXN0Citsb2dieDkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0CmluZGV4IDZiNDQyMTMuLjI2NWU5MTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXhtYWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QKQEAgLTEsNDA0ICsxLDQwNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gbWF4bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBtYXhpbXVtIGJ5IG1hZ25pdHVkZSAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLQ0KLS0tIHNhbml0eSBjaGVja3MNCi1teGd4MDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMg0KLW14Z3gwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yDQotbXhneDAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTINCi1teGd4MDA0IG1heG1hZyAgLTIgICAxICAtPiAtMg0KLW14Z3gwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyDQotbXhneDAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTINCi1teGd4MDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQ0KLW14Z3gwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xDQotbXhneDAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDENCi1teGd4MDEwIG1heG1hZyAgLTEgICAyICAtPiAgMg0KLW14Z3gwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yDQotbXhneDAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTENCi1teGd4MDEzIG1heG1hZyAgIDAgICAwICAtPiAgMA0KLW14Z3gwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxDQotbXhneDAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDINCi1teGd4MDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMg0KLW14Z3gwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxDQotbXhneDAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDENCi1teGd4MDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQ0KLW14Z3gwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyDQotbXhneDAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDINCi1teGd4MDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMg0KLW14Z3gwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyDQotbXhneDAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDINCi1teGd4MDI2IG1heG1hZyAgIDIgICAyICAtPiAgMg0KLQ0KLS0tIGV4dGVuZGVkIHplcm9zDQotbXhneDAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDANCi1teGd4MDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMA0KLW14Z3gwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwDQotbXhneDAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDANCi1teGd4MDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3Nlbg0KLW14Z3gwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wDQotbXhneDAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMA0KLW14Z3gwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjANCi1teGd4MDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMA0KLW14Z3gwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjANCi1teGd4MDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wDQotbXhneDA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMA0KLW14Z3gwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwDQotbXhneDA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMA0KLW14Z3gwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjANCi1teGd4MDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wDQotDQotbXhneDA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzENCi1teGd4MDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMg0KLW14Z3gwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxDQotbXhneDA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzINCi1teGd4MDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQ0KLW14Z3gwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyDQotbXhneDA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzINCi1teGd4MDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQ0KLQ0KLW14Z3gwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxDQotbXhneDA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzINCi1teGd4MDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMg0KLW14Z3gwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyDQotbXhneDA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzENCi1teGd4MDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMg0KLW14Z3gwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxDQotbXhneDA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzENCi0NCi0tLSBTcGVjaWFscw0KLXByZWNpc2lvbjogOQ0KLW14Z3gwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQotbXhneDA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCi1teGd4MDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQotbXhneDA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCi1teGd4MDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCi1teGd4MTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQotbXhneDEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1teGd4MTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMjIgbWF4bWFnIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1teGd4MTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotbXhneDEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMjUgbWF4bWFnIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1teGd4MTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQotbXhneDEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW14Z3gxMjggbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCi1teGd4MTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotbXhneDE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQ0KLW14Z3gxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMA0KLW14Z3gxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQ0KLW14Z3gxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMA0KLW14Z3gxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMA0KLW14Z3gxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQ0KLW14Z3gxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KLW14Z3gxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCi1teGd4MTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KLW14Z3gxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCi1teGd4MTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCi1teGd4MTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTENCi1teGd4MTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTANCi1teGd4MTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDANCi1teGd4MTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDENCi1teGd4MTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCi1teGd4MTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQotDQotbXhneDE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLW14Z3gxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5DQotbXhneDE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQ0KLW14Z3gxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotbXhneDE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQ0KLW14Z3gxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjINCi1teGd4MTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMw0KLW14Z3gxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0DQotDQotbXhneDE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkNCi1teGd4MTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05DQotbXhneDE5MCBtYXhtYWcgIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkNCi0NCi1teGd4MTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3gxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3gxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCi1teGd4MTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQotbXhneDE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3gxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSByb3VuZGluZyBjaGVja3MNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wcmVjaXNpb246IDkNCi1teGd4MjAxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkDQotbXhneDIwMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZA0KLW14Z3gyMDMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KLW14Z3gyMDQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KLW14Z3gyMDUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLW14Z3gyMDYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KLW14Z3gyMDcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQotbXhneDIwOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjA5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjEwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjExIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQotbXhneDIxMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEuMjM0NTY3ODlFKzkgICBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjE0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xLjIzNDU2Nzg5RSsxMCAgSW5leGFjdCBSb3VuZGVkDQotbXhneDIxNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQNCi1teGd4MjE3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZA0KLW14Z3gyMTggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xLjIzNDU2NzkwRSs5ICAgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAxNQ0KLW14Z3gyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwDQotbXhneDIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCi1teGd4MjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwDQotbXhneDIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KLW14Z3gyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTANCi1teGd4MjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQotbXhneDIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQ0KLW14Z3gyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCi1teGd4MjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQ0KLW14Z3gyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxDQotbXhneDIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5Ng0KLW14Z3gyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCi1teGd4MjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQ0KLW14Z3gyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxDQotbXhneDIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxDQotbXhneDIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxDQotbXhneDIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYNCi1teGd4MjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5Ng0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1teGd4MjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycNCi1teGd4MjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJw0KLW14Z3gyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJw0KLW14Z3gyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJw0KLW14Z3gyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3Jw0KLQ0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4uDQotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5OTk5OTk5DQotbXhneDMzMCBtYXhtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkNCi1teGd4MzMxIG1heG1hZyA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDlFKzk5OTk5OTk5OQ0KLW14Z3gzMzIgbWF4bWFnICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMC4xMDANCi1teGd4MzMzIG1heG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gIDAuMTAwDQotbXhneDMzNSBtYXhtYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkNCi1teGd4MzM2IG1heG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDlFKzk5OTk5OTk5OQ0KLW14Z3gzMzcgbWF4bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgLTAuMTAwDQotbXhneDMzOCBtYXhtYWcgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAtMC4xMDANCi0NCi1teGd4MzM5IG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gIDFFLTQwMDAwMDAwMQ0KLW14Z3gzNDAgbWF4bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwDQotbXhneDM0MSBtYXhtYWcgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDANCi1teGd4MzQyIG1heG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gIDAuMDENCi1teGd4MzQzIG1heG1hZyA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gIDAuMQ0KLW14Z3gzNDQgbWF4bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMC4wMQ0KLW14Z3gzNDUgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMUUrNTk5OTk5OTk5DQotbXhneDM0NiBtYXhtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs1OTk5OTk5OTkNCi1teGd4MzQ3IG1heG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzYwMDAwMDAwMA0KLW14Z3gzNDggbWF4bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4DQotbXhneDM0OSBtYXhtYWcgOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgNCi1teGd4MzUwIG1heG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OA0KLS0tIHNpZ25zDQotbXhneDM1MSBtYXhtYWcgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcNCi1teGd4MzUyIG1heG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3Nw0KLW14Z3gzNTMgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3DQotbXhneDM1NCBtYXhtYWcgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcNCi1teGd4MzU1IG1heG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQ0KLW14Z3gzNTYgbWF4bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExDQotbXhneDM1NyBtYXhtYWcgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTENCi1teGd4MzU4IG1heG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTQxMTExMTExMQ0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1teGd4NDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5DQotbXhneDQwMiBtYXhtYWcgIDEuMSAgICAxICAgICAgIC0+ICAxLjENCi1teGd4NDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDENCi1teGd4NDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMA0KLW14Z3g0MDUgbWF4bWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQotbXhneDQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQotbXhneDQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwDQotbXhneDQwOCBtYXhtYWcgIDAgICAgICAwLjAgICAgIC0+ICAwDQotbXhneDQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCi1teGd4NDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMA0KLW14Z3g0MTEgbWF4bWFnICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KLW14Z3g0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQotbXhneDQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwDQotbXhneDQxNCBtYXhtYWcgIDAgICAgIC0wICAgICAgIC0+ICAwDQotbXhneDQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCi1teGd4NDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwDQotbXhneDQxNyBtYXhtYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMA0KLW14Z3g0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KLW14Z3g0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wDQotbXhneDQyMCBtYXhtYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xLjANCi1teGd4NDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KLW14Z3g0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkNCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1teGd4NDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5DQotbXhneDQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjENCi1teGd4NDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDENCi1teGd4NDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMA0KLW14Z3g0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xDQotbXhneDQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwDQotbXhneDQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwDQotbXhneDQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwDQotbXhneDQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjANCi1teGd4NDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMA0KLW14Z3g0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMA0KLW14Z3g0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wDQotbXhneDQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwDQotbXhneDQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwDQotbXhneDQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1teGd4NDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwDQotbXhneDQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KLW14Z3g0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMA0KLW14Z3g0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQotbXhneDQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCi1teGd4NDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQ0KLW14Z3g0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkNCi0tLSBsYXJnaWVzDQotbXhneDQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQotbXhneDQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszDQotbXhneDQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwDQotbXhneDQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQotbXhneDQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszDQotbXhneDQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotbXhneDQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQotbXhneDQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwDQotDQotLS0gcm91bmRpbmcgKHJlc3VsdHMgdHJlYXRlZCBhcyB0aG91Z2ggcGx1cykNCi1tYXhleHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1wcmVjaXNpb246IDMNCi0NCi1teGd4NDcwIG1heG1hZyAgMSAgICAgIC41ICAgICAtPiAgMQ0KLW14Z3g0NzEgbWF4bWFnICAxMCAgICAgNSAgICAgIC0+ICAxMA0KLW14Z3g0NzIgbWF4bWFnICAxMDAgICAgNTAgICAgIC0+ICAxMDANCi1teGd4NDczIG1heG1hZyAgMTAwMCAgIDUwMCAgICAtPiAgMS4wMEUrMyBSb3VuZGVkDQotbXhneDQ3NCBtYXhtYWcgIDEwMDAwICA1MDAwICAgLT4gIDEuMDBFKzQgUm91bmRlZA0KLW14Z3g0NzUgbWF4bWFnICA2ICAgICAgLjUgICAgIC0+ICA2DQotbXhneDQ3NiBtYXhtYWcgIDY2ICAgICA1ICAgICAgLT4gIDY2DQotbXhneDQ3NyBtYXhtYWcgIDY2NiAgICA1MCAgICAgLT4gIDY2Ng0KLW14Z3g0NzggbWF4bWFnICA2NjY2ICAgNTAwICAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdA0KLW14Z3g0NzkgbWF4bWFnICA2NjY2NiAgNTAwMCAgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdA0KLW14Z3g0ODAgbWF4bWFnICAzMzMzMyAgNTAwMCAgIC0+ICAzLjMzRSs0IFJvdW5kZWQgSW5leGFjdA0KLW14Z3g0ODEgbWF4bWFnICAuNSAgICAgMSAgICAgIC0+ICAxDQotbXhneDQ4MiBtYXhtYWcgIC41ICAgICAxMCAgICAgLT4gIDEwDQotbXhneDQ4MyBtYXhtYWcgIC41ICAgICAxMDAgICAgLT4gIDEwMA0KLW14Z3g0ODQgbWF4bWFnICAuNSAgICAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCi1teGd4NDg1IG1heG1hZyAgLjUgICAgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkDQotbXhneDQ4NiBtYXhtYWcgIC41ICAgICA2ICAgICAgLT4gIDYNCi1teGd4NDg3IG1heG1hZyAgLjUgICAgIDY2ICAgICAtPiAgNjYNCi1teGd4NDg4IG1heG1hZyAgLjUgICAgIDY2NiAgICAtPiAgNjY2DQotbXhneDQ4OSBtYXhtYWcgIC41ICAgICA2NjY2ICAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQotbXhneDQ5MCBtYXhtYWcgIC41ICAgICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQotbXhneDQ5MSBtYXhtYWcgIC41ICAgICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQotDQotLS0gb3ZlcmZsb3cgdGVzdHMNCi1tYXhleHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1wcmVjaXNpb246IDMNCi1teGd4NTAwIG1heG1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi1teGd4NTAxIG1heG1hZyAtOS45OTlFKzk5OTk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cNCi1wcmVjaXNpb246IDMNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1teGd4NTEwIG1heG1hZyAgMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wMEUtOTk5DQotbXhneDUxMSBtYXhtYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwNCi1teGd4NTEyIG1heG1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbA0KLW14Z3g1MTMgbWF4bWFnICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCi1teGd4NTE0IG1heG1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbA0KLS0tIG5leHQgaXMgcm91bmRlZCB0byBObWluDQotbXhneDUxNSBtYXhtYWcgIDAuOTk5RS05OTkgICAgICAwICAtPiAgIDEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLW14Z3g1MTYgbWF4bWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1teGd4NTE3IG1heG1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotbXhneDUxOCBtYXhtYWcgIDAuMDAxRS05OTkgICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotbXhneDUxOSBtYXhtYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotbXhneDUyMCBtYXhtYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQotDQotbXhneDUzMCBtYXhtYWcgLTEuMDBFLTk5OSAgICAgICAwICAtPiAgLTEuMDBFLTk5OQ0KLW14Z3g1MzEgbWF4bWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsDQotbXhneDUzMiBtYXhtYWcgLTAuMTBFLTk5OSAgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwNCi1teGd4NTMzIG1heG1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkDQotbXhneDUzNCBtYXhtYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwNCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gLU5taW4NCi1teGd4NTM1IG1heG1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQotbXhneDUzNiBtYXhtYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KLW14Z3g1MzcgbWF4bWFnIC0wLjAwOUUtOTk5ICAgICAgMCAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCi1teGd4NTM4IG1heG1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1teGd4NTM5IG1heG1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi1teGd4NTQwIG1heG1hZyAtMC4wMDAxRS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCi0NCi0tLSBOdWxsIHRlc3RzDQotbXhneDkwMCBtYXhtYWcgMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW14Z3g5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0NCi0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1heG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWF4aW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbXhneDAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTIKK214Z3gwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitteGd4MDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgorbXhneDAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTIKK214Z3gwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitteGd4MDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgorbXhneDAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTEKK214Z3gwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitteGd4MDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQorbXhneDAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDIKK214Z3gwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitteGd4MDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQorbXhneDAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDAKK214Z3gwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitteGd4MDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgorbXhneDAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTIKK214Z3gwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitteGd4MDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQorbXhneDAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDEKK214Z3gwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitteGd4MDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgorbXhneDAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDIKK214Z3gwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitteGd4MDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgorbXhneDAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK214Z3gwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitteGd4MDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAorbXhneDAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDAKK214Z3gwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitteGd4MDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorbXhneDAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTAKK214Z3gwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK214Z3gwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKK214Z3gwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwCitteGd4MDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitteGd4MDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCitteGd4MDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCitteGd4MDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorbXhneDA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAorbXhneDA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorbXhneDA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitteGd4MDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQorbXhneDA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzIKK214Z3gwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitteGd4MDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgorbXhneDA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzEKK214Z3gwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitteGd4MDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgorbXhneDA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzEKKworbXhneDA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK214Z3gwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCitteGd4MDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMgorbXhneDA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK214Z3gwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCitteGd4MDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMgorbXhneDA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK214Z3gwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK214Z3gwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK214Z3gwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK214Z3gwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbXhneDEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorbXhneDEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorbXhneDEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorbXhneDEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK214Z3gxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK214Z3gxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAorbXhneDE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xCitteGd4MTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK214Z3gxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAorbXhneDE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxCitteGd4MTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK214Z3gxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK214Z3gxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitteGd4MTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitteGd4MTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK214Z3gxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQorbXhneDE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitteGd4MTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKK214Z3gxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQorbXhneDE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitteGd4MTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK214Z3gxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitteGd4MTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQorbXhneDE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworbXhneDE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorbXhneDE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorbXhneDE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK214Z3gxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK214Z3gxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitteGd4MTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05CitteGd4MTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitteGd4MTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHJvdW5kaW5nIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorbXhneDIwMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbXhneDIwMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbXhneDIwMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitteGd4MjA0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK214Z3gyMDUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorbXhneDIwNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitteGd4MjA3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIwOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMDkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorbXhneDIxMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitteGd4MjExIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIxMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xLjIzNDU2Nzg5RSsxMCAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorbXhneDIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK214Z3gyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitteGd4MjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitteGd4MjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitteGd4MjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitteGd4MjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitteGd4MjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitteGd4MjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitteGd4MjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorbXhneDIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK214Z3gyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK214Z3gyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK214Z3gyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxCitteGd4MjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorbXhneDIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCitteGd4MjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDEKK214Z3gyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitteGd4MjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgorCistLSBmcm9tIGV4YW1wbGVzCitteGd4MjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycKK214Z3gyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitteGd4MjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKK214Z3gyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJworbXhneDI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4uCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbXhneDMzMCBtYXhtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzEgbWF4bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5CitteGd4MzMyIG1heG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDAuMTAwCitteGd4MzMzIG1heG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gIDAuMTAwCitteGd4MzM1IG1heG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzNiBtYXhtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzcgbWF4bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgLTAuMTAwCitteGd4MzM4IG1heG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIC0wLjEwMAorCitteGd4MzM5IG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gIDFFLTQwMDAwMDAwMQorbXhneDM0MCBtYXhtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKK214Z3gzNDEgbWF4bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwCitteGd4MzQyIG1heG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gIDAuMDEKK214Z3gzNDMgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xCitteGd4MzQ0IG1heG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDAuMDEKK214Z3gzNDUgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMUUrNTk5OTk5OTk5CitteGd4MzQ2IG1heG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQorbXhneDM0NyBtYXhtYWcgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs2MDAwMDAwMDAKK214Z3gzNDggbWF4bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CitteGd4MzQ5IG1heG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorbXhneDM1MCBtYXhtYWcgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKKy0tIHNpZ25zCitteGd4MzUxIG1heG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NworbXhneDM1MiBtYXhtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcKK214Z3gzNTMgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3CitteGd4MzU0IG1heG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3NworbXhneDM1NSBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTEKK214Z3gzNTYgbWF4bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExCitteGd4MzU3IG1heG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQorbXhneDM1OCBtYXhtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitteGd4NDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CitteGd4NDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorbXhneDQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCitteGd4NDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorbXhneDQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK214Z3g0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorbXhneDQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCitteGd4NDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK214Z3g0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitteGd4NDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorbXhneDQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitteGd4NDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorbXhneDQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwCitteGd4NDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK214Z3g0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitteGd4NDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCitteGd4NDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitteGd4NDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK214Z3g0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCitteGd4NDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorbXhneDQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK214Z3g0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorbXhneDQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorbXhneDQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK214Z3g0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQorbXhneDQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK214Z3g0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitteGd4NDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK214Z3g0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorbXhneDQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCitteGd4NDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK214Z3g0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorbXhneDQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK214Z3g0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorbXhneDQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCitteGd4NDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorbXhneDQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorbXhneDQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorbXhneDQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCitteGd4NDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorbXhneDQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK214Z3g0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCitteGd4NDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitteGd4NDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK214Z3g0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworbXhneDQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitteGd4NDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK214Z3g0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworbXhneDQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitteGd4NDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK214Z3g0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCitteGd4NDcwIG1heG1hZyAgMSAgICAgIC41ICAgICAtPiAgMQorbXhneDQ3MSBtYXhtYWcgIDEwICAgICA1ICAgICAgLT4gIDEwCitteGd4NDcyIG1heG1hZyAgMTAwICAgIDUwICAgICAtPiAgMTAwCitteGd4NDczIG1heG1hZyAgMTAwMCAgIDUwMCAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCitteGd4NDc0IG1heG1hZyAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkCitteGd4NDc1IG1heG1hZyAgNiAgICAgIC41ICAgICAtPiAgNgorbXhneDQ3NiBtYXhtYWcgIDY2ICAgICA1ICAgICAgLT4gIDY2CitteGd4NDc3IG1heG1hZyAgNjY2ICAgIDUwICAgICAtPiAgNjY2CitteGd4NDc4IG1heG1hZyAgNjY2NiAgIDUwMCAgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK214Z3g0NzkgbWF4bWFnICA2NjY2NiAgNTAwMCAgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbXhneDQ4MCBtYXhtYWcgIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDgxIG1heG1hZyAgLjUgICAgIDEgICAgICAtPiAgMQorbXhneDQ4MiBtYXhtYWcgIC41ICAgICAxMCAgICAgLT4gIDEwCitteGd4NDgzIG1heG1hZyAgLjUgICAgIDEwMCAgICAtPiAgMTAwCitteGd4NDg0IG1heG1hZyAgLjUgICAgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCitteGd4NDg1IG1heG1hZyAgLjUgICAgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCitteGd4NDg2IG1heG1hZyAgLjUgICAgIDYgICAgICAtPiAgNgorbXhneDQ4NyBtYXhtYWcgIC41ICAgICA2NiAgICAgLT4gIDY2CitteGd4NDg4IG1heG1hZyAgLjUgICAgIDY2NiAgICAtPiAgNjY2CitteGd4NDg5IG1heG1hZyAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK214Z3g0OTAgbWF4bWFnICAuNSAgICAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbXhneDQ5MSBtYXhtYWcgIC41ICAgICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCitteGd4NTAwIG1heG1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK214Z3g1MDEgbWF4bWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK214Z3g1MTAgbWF4bWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkKK214Z3g1MTEgbWF4bWFnICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitteGd4NTEyIG1heG1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorbXhneDUxMyBtYXhtYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbXhneDUxNCBtYXhtYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCitteGd4NTE1IG1heG1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE2IG1heG1hZyAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE3IG1heG1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE4IG1heG1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1MTkgbWF4bWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDUyMCBtYXhtYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK214Z3g1MzAgbWF4bWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gIC0xLjAwRS05OTkKK214Z3g1MzEgbWF4bWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCitteGd4NTMyIG1heG1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorbXhneDUzMyBtYXhtYWcgLTAuMTAwRS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbXhneDUzNCBtYXhtYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byAtTm1pbgorbXhneDUzNSBtYXhtYWcgLTAuOTk5RS05OTkgICAgICAwICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzNiBtYXhtYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzNyBtYXhtYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzOCBtYXhtYWcgLTAuMDAxRS05OTkgICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitteGd4NTM5IG1heG1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1NDAgbWF4bWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBOdWxsIHRlc3RzCitteGd4OTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitteGd4OTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWlubWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWlubWFnLmRlY1Rlc3QKaW5kZXggOWU1NjIzMy4uZjFhYzM4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdApAQCAtMSwzOTAgKzEsMzkwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBtaW5tYWcuZGVjVGVzdCAtLSBkZWNpbWFsIG1pbmltdW0gYnkgbWFnbml0dWRlICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotLS0gc2FuaXR5IGNoZWNrcw0KLW1uZ3gwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yDQotbW5neDAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTENCi1tbmd4MDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMA0KLW1uZ3gwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxDQotbW5neDAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTINCi1tbmd4MDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQ0KLW1uZ3gwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xDQotbW5neDAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDANCi1tbmd4MDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQ0KLW1uZ3gwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xDQotbW5neDAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDANCi1tbmd4MDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMA0KLW1uZ3gwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwDQotbW5neDAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDANCi1tbmd4MDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMA0KLW1uZ3gwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxDQotbW5neDAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTENCi1tbmd4MDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMA0KLW1uZ3gwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxDQotbW5neDAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDENCi1tbmd4MDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMg0KLW1uZ3gwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xDQotbW5neDAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDANCi1tbmd4MDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQ0KLW1uZ3gwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyDQotDQotLS0gZXh0ZW5kZWQgemVyb3MNCi1tbmd4MDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMA0KLW1uZ3gwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wDQotbW5neDAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMA0KLW1uZ3gwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjANCi1tbmd4MDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMA0KLW1uZ3gwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wDQotbW5neDAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTANCi1tbmd4MDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMA0KLW1uZ3gwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjANCi1tbmd4MDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMA0KLW1uZ3gwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjANCi1tbmd4MDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQotbW5neDA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMA0KLW1uZ3gwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wDQotbW5neDA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KLW1uZ3gwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjANCi0NCi1tbmd4MDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KLW1uZ3gwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxDQotbW5neDA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzENCi1tbmd4MDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KLW1uZ3gwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszDQotbW5neDA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMNCi0NCi0tLSBTcGVjaWFscw0KLXByZWNpc2lvbjogOQ0KLW1uZ3gwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1tbmd4MDkxIG1pbm1hZyAgSW5mICAtMTAwMCAgLT4gLTEwMDANCi1tbmd4MDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTENCi1tbmd4MDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTANCi1tbmd4MDk0IG1pbm1hZyAgSW5mICAgMCAgICAgLT4gIDANCi1tbmd4MDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDENCi1tbmd4MDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDANCi1tbmd4MDk3IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotbW5neDA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQotbW5neDA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLW1uZ3gxMDAgbWlubWFnIC0xICAgICBJbmYgICAtPiAtMQ0KLW1uZ3gxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMA0KLW1uZ3gxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMA0KLW1uZ3gxMDMgbWlubWFnICAxICAgICBJbmYgICAtPiAgMQ0KLW1uZ3gxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMA0KLW1uZ3gxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCi0NCi1tbmd4MTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotbW5neDEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwDQotbW5neDEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xDQotbW5neDEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wDQotbW5neDEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwDQotbW5neDEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxDQotbW5neDEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwDQotbW5neDEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KLW1uZ3gxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1tbmd4MTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDANCi1tbmd4MTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTENCi1tbmd4MTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTANCi1tbmd4MTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDANCi1tbmd4MTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDENCi1tbmd4MTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDANCi1tbmd4MTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotDQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQotbW5neDE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkNCi1tbmd4MTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQotbW5neDE0MyBtaW5tYWcgIE5hTiAtMSAgICAgIC0+ICAtMQ0KLW1uZ3gxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTANCi1tbmd4MTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDANCi1tbmd4MTQ2IG1pbm1hZyAgTmFOICAxICAgICAgLT4gIDENCi1tbmd4MTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDANCi1tbmd4MTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQotbW5neDE0OSBtaW5tYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4NCi1tbmd4MTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQotbW5neDE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwDQotbW5neDE1MiBtaW5tYWcgLTEgICAtTmFOICAgIC0+IC0xDQotbW5neDE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wDQotbW5neDE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwDQotbW5neDE1NSBtaW5tYWcgIDEgICAgTmFOICAgIC0+ICAxDQotbW5neDE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwDQotbW5neDE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KLQ0KLW1uZ3gxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1tbmd4MTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkNCi1tbmd4MTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KLW1uZ3gxODMgbWlubWFnICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLQ0KLW1uZ3gxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xDQotbW5neDE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQotbW5neDE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMNCi1tbmd4MTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQNCi0NCi1tbmd4MTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCi1tbmd4MTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQ0KLW1uZ3gxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KLQ0KLW1uZ3gxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTkyIG1pbm1hZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTk1IG1pbm1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KLW1uZ3gxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCi1tbmd4MTk4IG1pbm1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQotbW5neDE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHJvdW5kaW5nIGNoZWNrcyAtLSBjaG9zZW4gaXMgcm91bmRlZCwgb3Igbm90DQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiA5DQotbW5neDIwMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCi1tbmd4MjAyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQ0KLW1uZ3gyMDMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxDQotbW5neDIwNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCi1tbmd4MjA1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQ0KLW1uZ3gyMDYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxDQotbW5neDIwNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCi1tbmd4MjA4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQ0KLW1uZ3gyMDkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxDQotbW5neDIxMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCi1tbmd4MjExIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQ0KLW1uZ3gyMTIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxDQotbW5neDIxMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCi1tbmd4MjE0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KLW1uZ3gyMTUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxDQotbW5neDIxNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCi1tbmd4MjE3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KLW1uZ3gyMTggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQotDQotcHJlY2lzaW9uOiAxNQ0KLW1uZ3gyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxDQotbW5neDIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDENCi1tbmd4MjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQ0KLW1uZ3gyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxDQotbW5neDIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDENCi1tbmd4MjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQ0KLW1uZ3gyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxDQotbW5neDIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDENCi1tbmd4MjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQ0KLW1uZ3gyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxDQotbW5neDIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDENCi1tbmd4MjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQ0KLW1uZ3gyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxDQotbW5neDIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDENCi1tbmd4MjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQ0KLW1uZ3gyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQotbW5neDIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDENCi1tbmd4MjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KLQ0KLS0tIGZyb20gZXhhbXBsZXMNCi1tbmd4MjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicNCi1tbmd4MjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycNCi1tbmd4MjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJw0KLW1uZ3gyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnDQotbW5neDI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnDQotDQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBbaW5wdXRzXSBub3cgYWxsb3dlZA0KLW1heEV4cG9uZW50OiA5OTk5OTk5OTkNCi1taW5leHBvbmVudDogLTk5OTk5OTk5OQ0KLW1uZ3gzMzAgbWlubWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC05RSs5OTk5OTk5OTkgLT4gLTEuMjM0NTY3ODkwMTIzNDUNCi1tbmd4MzMxIG1pbm1hZyAtOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1DQotbW5neDMzMiBtaW5tYWcgLTAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5DQotbW5neDMzMyBtaW5tYWcgLTlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5DQotbW5neDMzNSBtaW5tYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAgMS4yMzQ1Njc4OTAxMjM0NQ0KLW1uZ3gzMzYgbWlubWFnIC05RSs5OTk5OTk5OTkgMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gIDEuMjM0NTY3ODkwMTIzNDUNCi1tbmd4MzM3IG1pbm1hZyArMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCi1tbmd4MzM4IG1pbm1hZyAtOUUtOTk5OTk5OTk5IDAuMTAwICAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCi0NCi1tbmd4MzM5IG1pbm1hZyAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDEgICAtPiAgLTFFLTU5OTk5OTk5OQ0KLW1uZ3gzNDAgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMCAgIC0+ICAtMUUtNTk5OTk5OTk5DQotbW5neDM0MSBtaW5tYWcgLTFlLTYwMDAwMDAwMCAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS02MDAwMDAwMDANCi1tbmd4MzQyIG1pbm1hZyAtOWUtOTk5OTk5OTk4IC0wLjAxICAgICAgICAgICAtPiAgLTlFLTk5OTk5OTk5OA0KLW1uZ3gzNDMgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMSAgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4DQotbW5neDM0NCBtaW5tYWcgLTAuMDEgICAgICAgICAtOWUtOTk5OTk5OTk4ICAgLT4gIC05RS05OTk5OTk5OTgNCi1tbmd4MzQ1IG1pbm1hZyAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMSAgICAtPiAgLTFFKzQwMDAwMDAwMQ0KLW1uZ3gzNDYgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNDAwMDAwMDAwDQotbW5neDM0NyBtaW5tYWcgLTFlNjAwMDAwMDAwICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDANCi1tbmd4MzQ4IG1pbm1hZyAtOWU5OTk5OTk5OTggIC0xMDAgICAgICAgICAgICAtPiAgLTEwMA0KLW1uZ3gzNDkgbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwICAgICAgICAgICAgIC0+ICAtMTANCi1tbmd4MzUwIG1pbm1hZyAtMTAwICAgICAgICAgIC05ZTk5OTk5OTk5OCAgICAtPiAgLTEwMA0KLS0tIHNpZ25zDQotbW5neDM1MSBtaW5tYWcgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTENCi1tbmd4MzUyIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQ0KLW1uZ3gzNTMgbWlubWFnICsxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNDExMTExMTExDQotbW5neDM1NCBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyArMWUrNDExMTExMTExIC0+ICAxRSs0MTExMTExMTENCi1tbmd4MzU1IG1pbm1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTc3Nzc3Nzc3Nw0KLW1uZ3gzNTYgbWlubWFnIC0xZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3DQotbW5neDM1NyBtaW5tYWcgKzFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxRS03Nzc3Nzc3NzcNCi1tbmd4MzU4IG1pbm1hZyArMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3Nw0KLQ0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCi1tbmd4NDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQ0KLW1uZ3g0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQ0KLW1uZ3g0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wDQotbW5neDQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjENCi1tbmd4NDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCi1tbmd4NDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwDQotbW5neDQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwDQotbW5neDQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjANCi1tbmd4NDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTANCi1tbmd4NDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMA0KLW1uZ3g0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQotbW5neDQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwDQotbW5neDQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjANCi1tbmd4NDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTANCi1tbmd4NDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTANCi1tbmd4NDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTANCi1tbmd4NDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTANCi1tbmd4NDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQ0KLW1uZ3g0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQotbW5neDQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xDQotbW5neDQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xDQotbW5neDQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCi1tbmd4NDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQ0KLW1uZ3g0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQ0KLW1uZ3g0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQotbW5neDQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjENCi1tbmd4NDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTANCi1tbmd4NDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQotbW5neDQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwDQotbW5neDQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjANCi1tbmd4NDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTANCi1tbmd4NDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMA0KLW1uZ3g0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wDQotbW5neDQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQotbW5neDQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjANCi1tbmd4NDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTANCi1tbmd4NDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTANCi1tbmd4NDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTANCi1tbmd4NDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTANCi1tbmd4NDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQ0KLW1uZ3g0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQotbW5neDQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xDQotbW5neDQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xDQotbW5neDQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjENCi0tLSBsYXJnaWVzDQotbW5neDQ2MCBtaW5tYWcgIDEwMDAgICAxRSszICAgIC0+ICAxMDAwDQotbW5neDQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQotbW5neDQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszDQotbW5neDQ2MyBtaW5tYWcgIDFFKzMgIC0xMDAwICAgIC0+IC0xMDAwDQotbW5neDQ2NCBtaW5tYWcgLTEwMDAgICAxRSszICAgIC0+IC0xMDAwDQotbW5neDQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszDQotbW5neDQ2NiBtaW5tYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xRSszDQotbW5neDQ2NyBtaW5tYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xRSszDQotDQotLS0gcm91bmRpbmcgKHJlc3VsdHMgdHJlYXRlZCBhcyB0aG91Z2ggcGx1cykNCi1tYXhleHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1wcmVjaXNpb246IDMNCi0NCi1tbmd4NDcwIG1pbm1hZyAgMSAgICAgIDUgICAgICAtPiAgMQ0KLW1uZ3g0NzEgbWlubWFnICAxMCAgICAgNTAgICAgIC0+ICAxMA0KLW1uZ3g0NzIgbWlubWFnICAxMDAgICAgNTAwICAgIC0+ICAxMDANCi1tbmd4NDczIG1pbm1hZyAgMTAwMCAgIDUwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkDQotbW5neDQ3NCBtaW5tYWcgIDEwMDAwICA1MDAwMCAgLT4gIDEuMDBFKzQgUm91bmRlZA0KLW1uZ3g0NzUgbWlubWFnICA2ICAgICAgNTAgICAgIC0+ICA2DQotbW5neDQ3NiBtaW5tYWcgIDY2ICAgICA1MDAgICAgLT4gIDY2DQotbW5neDQ3NyBtaW5tYWcgIDY2NiAgICA1MDAwICAgLT4gIDY2Ng0KLW1uZ3g0NzggbWlubWFnICA2NjY2ICAgNTAwMDAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdA0KLW1uZ3g0NzkgbWlubWFnICA2NjY2NiAgNTAwMDAwIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdA0KLW1uZ3g0ODAgbWlubWFnICAzMzMzMyAgNTAwMDAwIC0+ICAzLjMzRSs0IFJvdW5kZWQgSW5leGFjdA0KLW1uZ3g0ODEgbWlubWFnICA3NTQwMSAgMSAgICAgIC0+ICAxDQotbW5neDQ4MiBtaW5tYWcgIDc1NDAyICAxMCAgICAgLT4gIDEwDQotbW5neDQ4MyBtaW5tYWcgIDc1NDAzICAxMDAgICAgLT4gIDEwMA0KLW1uZ3g0ODQgbWlubWFnICA3NTQwNCAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCi1tbmd4NDg1IG1pbm1hZyAgNzU0MDUgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkDQotbW5neDQ4NiBtaW5tYWcgIDc1NDA2ICA2ICAgICAgLT4gIDYNCi1tbmd4NDg3IG1pbm1hZyAgNzU0MDcgIDY2ICAgICAtPiAgNjYNCi1tbmd4NDg4IG1pbm1hZyAgNzU0MDggIDY2NiAgICAtPiAgNjY2DQotbW5neDQ4OSBtaW5tYWcgIDc1NDA5ICA2NjY2ICAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQotbW5neDQ5MCBtaW5tYWcgIDc1NDEwICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQotbW5neDQ5MSBtaW5tYWcgIDc1NDExICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQotDQotDQotLS0gb3ZlcmZsb3cgdGVzdHMNCi1tYXhleHBvbmVudDogOTk5OTk5OTk5DQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCi1wcmVjaXNpb246IDMNCi1tbmd4NTAwIG1pbm1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICAwDQotbW5neDUwMSBtaW5tYWcgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAgMA0KLQ0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KLXByZWNpc2lvbjogMw0KLW1heGV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLW1uZ3g1MTAgbWlubWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAwDQotbW5neDUxMSBtaW5tYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDANCi1tbmd4NTEyIG1pbm1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTMgbWlubWFnICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUxNCBtaW5tYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDANCi1tbmd4NTE1IG1pbm1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTYgbWlubWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUxNyBtaW5tYWcgIDAuMDA5RS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTE4IG1pbm1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MTkgbWlubWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwDQotbW5neDUyMCBtaW5tYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDANCi0NCi1tbmd4NTMwIG1pbm1hZyAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzEgbWlubWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gICAwDQotbW5neDUzMiBtaW5tYWcgLTAuMTBFLTk5OSAgICAgICAwICAtPiAgIDANCi1tbmd4NTMzIG1pbm1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzQgbWlubWFnIC0wLjAxRS05OTkgICAgICAgMCAgLT4gICAwDQotbW5neDUzNSBtaW5tYWcgLTAuOTk5RS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTM2IG1pbm1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMA0KLW1uZ3g1MzcgbWlubWFnIC0wLjAwOUUtOTk5ICAgICAgMCAgLT4gICAwDQotbW5neDUzOCBtaW5tYWcgLTAuMDAxRS05OTkgICAgICAwICAtPiAgIDANCi1tbmd4NTM5IG1pbm1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMA0KLW1uZ3g1NDAgbWlubWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwDQotDQotDQotLS0gTnVsbCB0ZXN0cw0KLW1uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1pbm1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWluaW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbW5neDAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTIKK21uZ3gwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCittbmd4MDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAorbW5neDAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDEKK21uZ3gwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCittbmd4MDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQorbW5neDAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTEKK21uZ3gwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCittbmd4MDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQorbW5neDAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTEKK21uZ3gwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCittbmd4MDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAorbW5neDAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDAKK21uZ3gwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCittbmd4MDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAorbW5neDAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDEKK21uZ3gwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCittbmd4MDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAorbW5neDAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDEKK21uZ3gwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCittbmd4MDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgorbW5neDAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTEKK21uZ3gwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCittbmd4MDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQorbW5neDAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK21uZ3gwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCittbmd4MDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAorbW5neDAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMAorbW5neDAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAorbW5neDAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKK21uZ3gwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wCittbmd4MDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAorbW5neDAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKK21uZ3gwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjAKK21uZ3gwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCittbmd4MDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCittbmd4MDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCittbmd4MDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCittbmd4MDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAorbW5neDA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorbW5neDA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAorCittbmd4MDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQorbW5neDA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzEKK21uZ3gwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCittbmd4MDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQorbW5neDA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMKK21uZ3gwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK21uZ3gwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21uZ3gwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAorbW5neDA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCittbmd4MDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTAKK21uZ3gwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAorbW5neDA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCittbmd4MDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK21uZ3gwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21uZ3gwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAorbW5neDA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5neDEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCittbmd4MTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKK21uZ3gxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMAorbW5neDEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCittbmd4MTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK21uZ3gxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbW5neDEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCittbmd4MTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTEKK21uZ3gxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAorbW5neDEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCittbmd4MTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDEKK21uZ3gxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAorbW5neDEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCittbmd4MTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKK21uZ3gxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMAorbW5neDEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCittbmd4MTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKK21uZ3gxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMAorbW5neDEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK21uZ3gxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5Cittbmd4MTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCittbmd4MTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCittbmd4MTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCittbmd4MTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDAKK21uZ3gxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQorbW5neDE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCittbmd4MTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5Cittbmd4MTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorbW5neDE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorbW5neDE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCittbmd4MTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKK21uZ3gxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAorbW5neDE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwCittbmd4MTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKK21uZ3gxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorbW5neDE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCittbmd4MTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworbW5neDE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5Cittbmd4MTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorbW5neDE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK21uZ3gxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCittbmd4MTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK21uZ3gxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCittbmd4MTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKKworbW5neDE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5Cittbmd4MTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorbW5neDE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK21uZ3gxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzIC0tIGNob3NlbiBpcyByb3VuZGVkLCBvciBub3QKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK21uZ3gyMDEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCittbmd4MjAyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQorbW5neDIwMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK21uZ3gyMDQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCittbmd4MjA1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQorbW5neDIwNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK21uZ3gyMDcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCittbmd4MjA4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQorbW5neDIwOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK21uZ3gyMTAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCittbmd4MjExIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQorbW5neDIxMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK21uZ3gyMTMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCittbmd4MjE0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQorbW5neDIxNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK21uZ3gyMTYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCittbmd4MjE3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQorbW5neDIxOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworcHJlY2lzaW9uOiAxNQorbW5neDIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKK21uZ3gyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCittbmd4MjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQorbW5neDIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKK21uZ3gyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCittbmd4MjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQorbW5neDIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKK21uZ3gyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCittbmd4MjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQorbW5neDIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKK21uZ3gyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCittbmd4MjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQorbW5neDIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK21uZ3gyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCittbmd4MjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQorbW5neDIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK21uZ3gyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCittbmd4MjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCittbmd4MjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicKK21uZ3gyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJworbW5neDI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKK21uZ3gyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnCittbmd4Mjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBbaW5wdXRzXSBub3cgYWxsb3dlZAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK21uZ3gzMzAgbWlubWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC05RSs5OTk5OTk5OTkgLT4gLTEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzEgbWlubWFnIC05RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLTEuMjM0NTY3ODkwMTIzNDUKK21uZ3gzMzIgbWlubWFnIC0wLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorbW5neDMzMyBtaW5tYWcgLTlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Cittbmd4MzM1IG1pbm1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+ICAxLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzM2IG1pbm1hZyAtOUUrOTk5OTk5OTk5IDEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAxLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzM3IG1pbm1hZyArMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKK21uZ3gzMzggbWlubWFnIC05RS05OTk5OTk5OTkgMC4xMDAgICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorCittbmd4MzM5IG1pbm1hZyAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDEgICAtPiAgLTFFLTU5OTk5OTk5OQorbW5neDM0MCBtaW5tYWcgLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS01OTk5OTk5OTkKK21uZ3gzNDEgbWlubWFnIC0xZS02MDAwMDAwMDAgLTFlLTQwMDAwMDAwMCAgIC0+ICAtMUUtNjAwMDAwMDAwCittbmd4MzQyIG1pbm1hZyAtOWUtOTk5OTk5OTk4IC0wLjAxICAgICAgICAgICAtPiAgLTlFLTk5OTk5OTk5OAorbW5neDM0MyBtaW5tYWcgLTllLTk5OTk5OTk5OCAtMC4xICAgICAgICAgICAgLT4gIC05RS05OTk5OTk5OTgKK21uZ3gzNDQgbWlubWFnIC0wLjAxICAgICAgICAgLTllLTk5OTk5OTk5OCAgIC0+ICAtOUUtOTk5OTk5OTk4Cittbmd4MzQ1IG1pbm1hZyAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMSAgICAtPiAgLTFFKzQwMDAwMDAwMQorbW5neDM0NiBtaW5tYWcgLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDAKK21uZ3gzNDcgbWlubWFnIC0xZTYwMDAwMDAwMCAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNDAwMDAwMDAwCittbmd4MzQ4IG1pbm1hZyAtOWU5OTk5OTk5OTggIC0xMDAgICAgICAgICAgICAtPiAgLTEwMAorbW5neDM0OSBtaW5tYWcgLTllOTk5OTk5OTk4ICAtMTAgICAgICAgICAgICAgLT4gIC0xMAorbW5neDM1MCBtaW5tYWcgLTEwMCAgICAgICAgICAtOWU5OTk5OTk5OTggICAgLT4gIC0xMDAKKy0tIHNpZ25zCittbmd4MzUxIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQorbW5neDM1MiBtaW5tYWcgLTFlKzc3Nzc3Nzc3NyArMWUrNDExMTExMTExIC0+ICAxRSs0MTExMTExMTEKK21uZ3gzNTMgbWlubWFnICsxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNDExMTExMTExCittbmd4MzU0IG1pbm1hZyArMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQorbW5neDM1NSBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKK21uZ3gzNTYgbWlubWFnIC0xZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3Cittbmd4MzU3IG1pbm1hZyArMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NworbW5neDM1OCBtaW5tYWcgKzFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+ICAxRS03Nzc3Nzc3NzcKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCittbmd4NDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQorbW5neDQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxCittbmd4NDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorbW5neDQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKK21uZ3g0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorbW5neDQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorbW5neDQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCittbmd4NDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorbW5neDQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCittbmd4NDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAorbW5neDQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK21uZ3g0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorbW5neDQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKK21uZ3g0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMAorbW5neDQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCittbmd4NDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKK21uZ3g0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorbW5neDQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK21uZ3g0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCittbmd4NDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEKK21uZ3g0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQorbW5neDQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorbW5neDQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK21uZ3g0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQorbW5neDQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKK21uZ3g0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xCittbmd4NDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK21uZ3g0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKK21uZ3g0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMAorbW5neDQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK21uZ3g0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAorbW5neDQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK21uZ3g0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCittbmd4NDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKK21uZ3g0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCittbmd4NDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKK21uZ3g0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAorbW5neDQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wCittbmd4NDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK21uZ3g0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCittbmd4NDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorbW5neDQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCittbmd4NDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKK21uZ3g0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCittbmd4NDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK21uZ3g0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorbW5neDQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCittbmd4NDYzIG1pbm1hZyAgMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKK21uZ3g0NjQgbWlubWFnIC0xMDAwICAgMUUrMyAgICAtPiAtMTAwMAorbW5neDQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCittbmd4NDY2IG1pbm1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK21uZ3g0NjcgbWlubWFnIC0xRSszICAtMTAwMCAgICAtPiAtMUUrMworCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCittbmd4NDcwIG1pbm1hZyAgMSAgICAgIDUgICAgICAtPiAgMQorbW5neDQ3MSBtaW5tYWcgIDEwICAgICA1MCAgICAgLT4gIDEwCittbmd4NDcyIG1pbm1hZyAgMTAwICAgIDUwMCAgICAtPiAgMTAwCittbmd4NDczIG1pbm1hZyAgMTAwMCAgIDUwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbmd4NDc0IG1pbm1hZyAgMTAwMDAgIDUwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbmd4NDc1IG1pbm1hZyAgNiAgICAgIDUwICAgICAtPiAgNgorbW5neDQ3NiBtaW5tYWcgIDY2ICAgICA1MDAgICAgLT4gIDY2Cittbmd4NDc3IG1pbm1hZyAgNjY2ICAgIDUwMDAgICAtPiAgNjY2Cittbmd4NDc4IG1pbm1hZyAgNjY2NiAgIDUwMDAwICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21uZ3g0NzkgbWlubWFnICA2NjY2NiAgNTAwMDAwIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5neDQ4MCBtaW5tYWcgIDMzMzMzICA1MDAwMDAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0Cittbmd4NDgxIG1pbm1hZyAgNzU0MDEgIDEgICAgICAtPiAgMQorbW5neDQ4MiBtaW5tYWcgIDc1NDAyICAxMCAgICAgLT4gIDEwCittbmd4NDgzIG1pbm1hZyAgNzU0MDMgIDEwMCAgICAtPiAgMTAwCittbmd4NDg0IG1pbm1hZyAgNzU0MDQgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbmd4NDg1IG1pbm1hZyAgNzU0MDUgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbmd4NDg2IG1pbm1hZyAgNzU0MDYgIDYgICAgICAtPiAgNgorbW5neDQ4NyBtaW5tYWcgIDc1NDA3ICA2NiAgICAgLT4gIDY2Cittbmd4NDg4IG1pbm1hZyAgNzU0MDggIDY2NiAgICAtPiAgNjY2Cittbmd4NDg5IG1pbm1hZyAgNzU0MDkgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21uZ3g0OTAgbWlubWFnICA3NTQxMCAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5neDQ5MSBtaW5tYWcgIDc1NDExICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK21uZ3g1MDAgbWlubWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIDAKK21uZ3g1MDEgbWlubWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gIDAKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Cittbmd4NTEwIG1pbm1hZyAgMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUxMSBtaW5tYWcgIDAuMUUtOTk5ICAgICAgICAwICAtPiAgIDAKK21uZ3g1MTIgbWlubWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTEzIG1pbm1hZyAgMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxNCBtaW5tYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MTUgbWlubWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE2IG1pbm1hZyAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxNyBtaW5tYWcgIDAuMDA5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTggbWlubWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE5IG1pbm1hZyAgMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMAorbW5neDUyMCBtaW5tYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDAKKworbW5neDUzMCBtaW5tYWcgLTEuMDBFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MzEgbWlubWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gICAwCittbmd4NTMyIG1pbm1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUzMyBtaW5tYWcgLTAuMTAwRS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzQgbWlubWFnIC0wLjAxRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTM1IG1pbm1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzNiBtaW5tYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzcgbWlubWFnIC0wLjAwOUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM4IG1pbm1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzOSBtaW5tYWcgLTAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDAKK21uZ3g1NDAgbWlubWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwCisKKworLS0gTnVsbCB0ZXN0cworbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK21uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QKaW5kZXggYmE5MzA2Ni4uNTMxYzUyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRtaW51cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdApAQCAtMSwxNDggKzEsMTQ4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBuZXh0bWludXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk0DQotbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk1DQotbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk2DQotbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk3DQotbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk4DQotbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDANCi1uZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMQ0KLW5leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAyDQotbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDMNCi1uZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNA0KLW5leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwNiAgLT4gICAxLjAwMDAwMDA1DQotbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDYNCi1uZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwNw0KLW5leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwOSAgLT4gICAxLjAwMDAwMDA4DQotbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDkNCi1uZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMA0KLW5leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAxMiAgLT4gICAxLjAwMDAwMDExDQotDQotbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk2DQotbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk3DQotbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk4DQotbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDANCi1uZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMQ0KLW5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAxDQotbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDENCi1uZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMg0KLW5leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAzDQotbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDQNCi1uZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwNQ0KLW5leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDA2DQotbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDcNCi1uZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwOA0KLW5leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDA5DQotbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMTANCi1uZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAxMQ0KLW5leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDEyDQotDQotLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uDQotbmV4dG0wNDEgbmV4dG1pbnVzICAxLjAwMDAwMDEwOTk4ICAtPiAgIDEuMDAwMDAwMTANCi1uZXh0bTA0MiBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTkgIC0+ICAgMS4wMDAwMDAxMA0KLW5leHRtMDQzIG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEwDQotbmV4dG0wNDQgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAxICAtPiAgIDEuMDAwMDAwMTENCi1uZXh0bTA0NSBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRtMDQ2IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExDQotbmV4dG0wNDcgbmV4dG1pbnVzICAxLjAwMDAwMDExMDUyICAtPiAgIDEuMDAwMDAwMTENCi1uZXh0bTA0OCBuZXh0bWludXMgIDEuMDAwMDAwMTE1NTIgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRtMDQ5IG5leHRtaW51cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDExDQotbmV4dG0wNTAgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk5ICAtPiAgLTEuMDAwMDAwMTENCi1uZXh0bTA1MSBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDAgIC0+ICAtMS4wMDAwMDAxMg0KLW5leHRtMDUyIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDEyDQotbmV4dG0wNTMgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTINCi1uZXh0bTA1NCBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMg0KLW5leHRtMDU1IG5leHRtaW51cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDEyDQotbmV4dG0wNTYgbmV4dG1pbnVzIC0xLjAwMDAwMDExNTUyICAtPiAgLTEuMDAwMDAwMTINCi0tLSB1bHRyYS10aW55IGlucHV0cw0KLW5leHRtMDYwIG5leHRtaW51cyAgMUUtOTk5OTkgICAgICAgLT4gICAwRS0zOTENCi1uZXh0bTA2MSBuZXh0bWludXMgIDFFLTk5OTk5OTk5OSAgIC0+ICAgMEUtMzkxDQotbmV4dG0wNjIgbmV4dG1pbnVzICAxRS0zOTEgICAgICAgICAtPiAgIDBFLTM5MQ0KLW5leHRtMDYzIG5leHRtaW51cyAtMUUtOTk5OTkgICAgICAgLT4gIC0xRS0zOTENCi1uZXh0bTA2NCBuZXh0bWludXMgLTFFLTk5OTk5OTk5OSAgIC0+ICAtMUUtMzkxDQotbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTEgICAgICAgICAtPiAgLTJFLTM5MQ0KLQ0KLS0tIFplcm9zDQotbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzkxDQotbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzkxDQotDQotcHJlY2lzaW9uOiA5DQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotLS0gc3BlY2lhbHMNCi1uZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTlFKzk5OQ0KLW5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkNCi1uZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTg0KLW5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3DQotbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFODQotbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcNCi1uZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1uZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OThFKzk5OQ0KLW5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5N0UrOTk5DQotbmV4dG0xNzIgbmV4dG1pbnVzICAxRS05OTkgICAgICAgICAgICAtPiA5Ljk5OTk5OTlFLTEwMDANCi1uZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDkuOTk5OTk5OUUtMTAwMA0KLW5leHRtMTc0IG5leHRtaW51cyAgOUUtMTAwNyAgICAgICAgICAgLT4gOEUtMTAwNw0KLW5leHRtMTc1IG5leHRtaW51cyAgOS45RS0xMDA2ICAgICAgICAgLT4gOS44RS0xMDA2DQotbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTlFLTEwMDMgICAgICAtPiA5Ljk5OThFLTEwMDMNCi1uZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OUUtMTAwMCAgIC0+IDkuOTk5OTk5OEUtMTAwMA0KLW5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk4RS0xMDAwICAgLT4gOS45OTk5OTk3RS0xMDAwDQotbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OTZFLTEwMDANCi1uZXh0bTE4MCBuZXh0bWludXMgIDBFLTEwMDcgICAgICAgICAgIC0+IC0xRS0xMDA3DQotbmV4dG0xODEgbmV4dG1pbnVzICAxRS0xMDA3ICAgICAgICAgICAtPiAwRS0xMDA3DQotbmV4dG0xODIgbmV4dG1pbnVzICAyRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3DQotDQotbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNw0KLW5leHRtMTg0IG5leHRtaW51cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTJFLTEwMDcNCi1uZXh0bTE4NSBuZXh0bWludXMgIC0yRS0xMDA3ICAgICAgICAgIC0+IC0zRS0xMDA3DQotbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTEwMDcgICAgICAgICAtPiAtMS4xRS0xMDA2DQotbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS0xMDA3ICAgICAgICAtPiAtMS4wMUUtMTAwNQ0KLW5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtMTAwNyAgICAgLT4gLTEuMDAwMDFFLTEwMDINCi1uZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDBFLTk5OSAgICAgIC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0bTE5MSBuZXh0bWludXMgIC0xRS05OTkgICAgICAgICAgIC0+IC0xLjAwMDAwMDAxRS05OTkNCi1uZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk4RSs5OTkgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1uZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE51bGwgdGVzdHMNCi1uZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBuZXh0bWludXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK25leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5NAorbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk1CituZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTYKK25leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5NworbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OSAtPiAgIDAuOTk5OTk5OTk4CituZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTkKK25leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OQorbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5CituZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMAorbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDEKK25leHRtMDExIG5leHRtaW51cyAgMS4wMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAyCituZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMworbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDQKK25leHRtMDE0IG5leHRtaW51cyAgMS4wMDAwMDAwNiAgLT4gICAxLjAwMDAwMDA1CituZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwNgorbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDcKK25leHRtMDE3IG5leHRtaW51cyAgMS4wMDAwMDAwOSAgLT4gICAxLjAwMDAwMDA4CituZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwOQorbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDExICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDIwIG5leHRtaW51cyAgMS4wMDAwMDAxMiAgLT4gICAxLjAwMDAwMDExCisKK25leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NgorbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk3CituZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTgKK25leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OQorbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAKK25leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAxCituZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMQorbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDEKK25leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAyCituZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMworbmV4dG0wMzEgbmV4dG1pbnVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDQKK25leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDA1CituZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwNgorbmV4dG0wMzQgbmV4dG1pbnVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDcKK25leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA4CituZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwOQorbmV4dG0wMzcgbmV4dG1pbnVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMTAKK25leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDExCituZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAxMgorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHRtMDQxIG5leHRtaW51cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDEwCituZXh0bTA0MiBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTkgIC0+ICAgMS4wMDAwMDAxMAorbmV4dG0wNDMgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDQ0IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0NSBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDYgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ3IG5leHRtaW51cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0OCBuZXh0bWludXMgIDEuMDAwMDAwMTE1NTIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDkgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTEKK25leHRtMDUwIG5leHRtaW51cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDExCituZXh0bTA1MSBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDAgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTIgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDUzIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1NCBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTUgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDU2IG5leHRtaW51cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDEyCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dG0wNjAgbmV4dG1pbnVzICAxRS05OTk5OSAgICAgICAtPiAgIDBFLTM5MQorbmV4dG0wNjEgbmV4dG1pbnVzICAxRS05OTk5OTk5OTkgICAtPiAgIDBFLTM5MQorbmV4dG0wNjIgbmV4dG1pbnVzICAxRS0zOTEgICAgICAgICAtPiAgIDBFLTM5MQorbmV4dG0wNjMgbmV4dG1pbnVzIC0xRS05OTk5OSAgICAgICAtPiAgLTFFLTM5MQorbmV4dG0wNjQgbmV4dG1pbnVzIC0xRS05OTk5OTk5OTkgICAtPiAgLTFFLTM5MQorbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTEgICAgICAgICAtPiAgLTJFLTM5MQorCistLSBaZXJvcworbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTEKK25leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTEKK25leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzkxCituZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTEKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorLS0gc3BlY2lhbHMKK25leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OUUrOTk5CituZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5CituZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgorbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43NworbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4KK25leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKK25leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK25leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OEUrOTk5CituZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OThFKzk5OSAgIC0+IDkuOTk5OTk5OTdFKzk5OQorbmV4dG0xNzIgbmV4dG1pbnVzICAxRS05OTkgICAgICAgICAgICAtPiA5Ljk5OTk5OTlFLTEwMDAKK25leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gOS45OTk5OTk5RS0xMDAwCituZXh0bTE3NCBuZXh0bWludXMgIDlFLTEwMDcgICAgICAgICAgIC0+IDhFLTEwMDcKK25leHRtMTc1IG5leHRtaW51cyAgOS45RS0xMDA2ICAgICAgICAgLT4gOS44RS0xMDA2CituZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDkuOTk5OEUtMTAwMworbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDAKK25leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk4RS0xMDAwICAgLT4gOS45OTk5OTk3RS0xMDAwCituZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5NkUtMTAwMAorbmV4dG0xODAgbmV4dG1pbnVzICAwRS0xMDA3ICAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dG0xODEgbmV4dG1pbnVzICAxRS0xMDA3ICAgICAgICAgICAtPiAwRS0xMDA3CituZXh0bTE4MiBuZXh0bWludXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKKworbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMkUtMTAwNworbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtM0UtMTAwNworbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTEwMDcgICAgICAgICAtPiAtMS4xRS0xMDA2CituZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC0xLjAxRS0xMDA1CituZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC0xLjAwMDAxRS0xMDAyCituZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDBFLTk5OSAgICAgIC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtOTk5ICAgICAgICAgICAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk4RSs5OTkgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK25leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLUluZmluaXR5CisKKy0tIE51bGwgdGVzdHMKK25leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRwbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdAppbmRleCA0NDk4OWU1Li5jNjZlMzI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdApAQCAtMSwxNTAgKzEsMTUwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBuZXh0cGx1cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX3VwDQotbWF4RXhwb25lbnQ6IDM4NA0KLW1pbmV4cG9uZW50OiAtMzgzDQotDQotbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTYNCi1uZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5Nw0KLW5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk4DQotbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTkNCi1uZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTkgLT4gICAxLjAwMDAwMDAwDQotbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMQ0KLW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDENCi1uZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAxDQotbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMg0KLW5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDMNCi1uZXh0cDAxMSBuZXh0cGx1cyAgMS4wMDAwMDAwMyAgLT4gICAxLjAwMDAwMDA0DQotbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwNQ0KLW5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDYNCi1uZXh0cDAxNCBuZXh0cGx1cyAgMS4wMDAwMDAwNiAgLT4gICAxLjAwMDAwMDA3DQotbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwOA0KLW5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDkNCi1uZXh0cDAxNyBuZXh0cGx1cyAgMS4wMDAwMDAwOSAgLT4gICAxLjAwMDAwMDEwDQotbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDExICAtPiAgIDEuMDAwMDAwMTINCi0NCi1uZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NA0KLW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk1DQotbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTYNCi1uZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5Nw0KLW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk4DQotbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAgIC0+ICAtMC45OTk5OTk5OTkNCi1uZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQ0KLW5leHRwMDI4IG5leHRwbHVzIC0xICAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dHAwMjkgbmV4dHBsdXMgLTEuMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMA0KLW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDENCi1uZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAyDQotbmV4dHAwMzIgbmV4dHBsdXMgLTEuMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMw0KLW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDQNCi1uZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDA1DQotbmV4dHAwMzUgbmV4dHBsdXMgLTEuMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwNg0KLW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDcNCi1uZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDA4DQotbmV4dHAwMzggbmV4dHBsdXMgLTEuMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwOQ0KLW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTANCi1uZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAxMiAgLT4gIC0xLjAwMDAwMDExDQotDQotLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uDQotbmV4dHAwNDEgbmV4dHBsdXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMQ0KLW5leHRwMDQyIG5leHRwbHVzICAxLjAwMDAwMDEwOTk5ICAtPiAgIDEuMDAwMDAwMTENCi1uZXh0cDA0MyBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEyDQotbmV4dHAwNDQgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMg0KLW5leHRwMDQ1IG5leHRwbHVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTINCi1uZXh0cDA0NiBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyDQotbmV4dHAwNDcgbmV4dHBsdXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMg0KLW5leHRwMDQ4IG5leHRwbHVzICAxLjAwMDAwMDExNTUyICAtPiAgIDEuMDAwMDAwMTINCi1uZXh0cDA0OSBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDEwDQotbmV4dHAwNTAgbmV4dHBsdXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMA0KLW5leHRwMDUxIG5leHRwbHVzIC0xLjAwMDAwMDExMDAwICAtPiAgLTEuMDAwMDAwMTANCi1uZXh0cDA1MiBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDExDQotbmV4dHAwNTMgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMQ0KLW5leHRwMDU0IG5leHRwbHVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTENCi1uZXh0cDA1NSBuZXh0cGx1cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDExDQotbmV4dHAwNTYgbmV4dHBsdXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMQ0KLS0tIHVsdHJhLXRpbnkgaW5wdXRzDQotbmV4dHAwNjAgbmV4dHBsdXMgIDFFLTk5OTk5ICAgICAgIC0+ICAgMUUtMzkxDQotbmV4dHAwNjEgbmV4dHBsdXMgIDFFLTk5OTk5OTk5OSAgIC0+ICAgMUUtMzkxDQotbmV4dHAwNjIgbmV4dHBsdXMgIDFFLTM5MSAgICAgICAgIC0+ICAgMkUtMzkxDQotbmV4dHAwNjMgbmV4dHBsdXMgLTFFLTk5OTk5ICAgICAgIC0+ICAtMEUtMzkxDQotbmV4dHAwNjQgbmV4dHBsdXMgLTFFLTk5OTk5OTk5OSAgIC0+ICAtMEUtMzkxDQotbmV4dHAwNjUgbmV4dHBsdXMgLTFFLTM5MSAgICAgICAgIC0+ICAtMEUtMzkxDQotDQotLS0gWmVyb3MNCi1uZXh0cDEwMCBuZXh0cGx1cyAgMCAgICAgICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwMyBuZXh0cGx1cyAgMEUrMzAwICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwNiBuZXh0cGx1cyAtMC4wMCAgICAgICAgLT4gIDFFLTM5MQ0KLW5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzkxDQotbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS0zOTENCi1uZXh0cDEwOSBuZXh0cGx1cyAtMEUrMzAwMDAgICAgLT4gIDFFLTM5MQ0KLQ0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogOQ0KLS0tIHNwZWNpYWxzDQotbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5DQotbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLW5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4NCi1uZXh0cDE1MyBuZXh0cGx1cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcNCi1uZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0cDE1NiBuZXh0cGx1cyAgLU5hTiAgICAtPiAtTmFODQotbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3DQotbmV4dHAxNTkgbmV4dHBsdXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1uZXh0cDE3MCBuZXh0cGx1cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gSW5maW5pdHkNCi1uZXh0cDE3MSBuZXh0cGx1cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5DQotbmV4dHAxNzIgbmV4dHBsdXMgIDFFLTk5OSAgICAgICAgICAgIC0+IDEuMDAwMDAwMDFFLTk5OQ0KLW5leHRwMTczIG5leHRwbHVzICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAxRS05OTkNCi1uZXh0cDE3NCBuZXh0cGx1cyAgOUUtMTAwNyAgICAgICAgICAgLT4gMS4wRS0xMDA2DQotbmV4dHAxNzUgbmV4dHBsdXMgIDkuOUUtMTAwNiAgICAgICAgIC0+IDEuMDBFLTEwMDUNCi1uZXh0cDE3NiBuZXh0cGx1cyAgOS45OTk5RS0xMDAzICAgICAgLT4gMS4wMDAwMEUtMTAwMg0KLW5leHRwMTc3IG5leHRwbHVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiAxLjAwMDAwMDAwRS05OTkNCi1uZXh0cDE3OCBuZXh0cGx1cyAgOS45OTk5OTk4RS0xMDAwICAgLT4gOS45OTk5OTk5RS0xMDAwDQotbmV4dHAxNzkgbmV4dHBsdXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5OEUtMTAwMA0KLW5leHRwMTgwIG5leHRwbHVzICAwRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3DQotbmV4dHAxODEgbmV4dHBsdXMgIDFFLTEwMDcgICAgICAgICAgIC0+IDJFLTEwMDcNCi1uZXh0cDE4MiBuZXh0cGx1cyAgMkUtMTAwNyAgICAgICAgICAgLT4gM0UtMTAwNw0KLQ0KLW5leHRwMTgzIG5leHRwbHVzICAtMEUtMTAwNyAgICAgICAgICAtPiAgMUUtMTAwNw0KLW5leHRwMTg0IG5leHRwbHVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMEUtMTAwNw0KLW5leHRwMTg1IG5leHRwbHVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNw0KLW5leHRwMTg2IG5leHRwbHVzICAtMTBFLTEwMDcgICAgICAgICAtPiAtOUUtMTAwNw0KLW5leHRwMTg3IG5leHRwbHVzICAtMTAwRS0xMDA3ICAgICAgICAtPiAtOS45RS0xMDA2DQotbmV4dHAxODggbmV4dHBsdXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC05Ljk5OTlFLTEwMDMNCi1uZXh0cDE4OSBuZXh0cGx1cyAgLTEuMDAwMEUtOTk5ICAgICAgLT4gLTkuOTk5OTk5OUUtMTAwMA0KLW5leHRwMTkwIG5leHRwbHVzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtOS45OTk5OTk5RS0xMDAwDQotbmV4dHAxOTEgbmV4dHBsdXMgIC0xRS05OTkgICAgICAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDANCi1uZXh0cDE5MiBuZXh0cGx1cyAgLTkuOTk5OTk5OThFKzk5OSAgLT4gLTkuOTk5OTk5OTdFKzk5OQ0KLW5leHRwMTkzIG5leHRwbHVzICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtOS45OTk5OTk5OEUrOTk5DQotDQotLS0gTnVsbCB0ZXN0cw0KLW5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbmV4dHBsdXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCituZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5NgorbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTcKK25leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk4CituZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OQorbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMAorbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQorbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMgorbmV4dHAwMTAgbmV4dHBsdXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMworbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwNAorbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwNQorbmV4dHAwMTMgbmV4dHBsdXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNgorbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNworbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwOAorbmV4dHAwMTYgbmV4dHBsdXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwOQorbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAxMAorbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAxMQorbmV4dHAwMTkgbmV4dHBsdXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMgorCituZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NAorbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTUKK25leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk2CituZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5NworbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5IC0+ICAtMC45OTk5OTk5OTgKK25leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5CituZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkKK25leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAKK25leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDEKK25leHRwMDMxIG5leHRwbHVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDIKK25leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDMKK25leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDQKK25leHRwMDM0IG5leHRwbHVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDUKK25leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDYKK25leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDcKK25leHRwMDM3IG5leHRwbHVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDgKK25leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDkKK25leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTAKK25leHRwMDQwIG5leHRwbHVzIC0xLjAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMTEKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0cDA0MSBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDExCituZXh0cDA0MiBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDExCituZXh0cDA0MyBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NCBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NSBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NiBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0NyBuZXh0cGx1cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0OCBuZXh0cGx1cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDEyCituZXh0cDA0OSBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MCBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MSBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA1MiBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1MyBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NCBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NSBuZXh0cGx1cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDExCituZXh0cDA1NiBuZXh0cGx1cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDExCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dHAwNjAgbmV4dHBsdXMgIDFFLTk5OTk5ICAgICAgIC0+ICAgMUUtMzkxCituZXh0cDA2MSBuZXh0cGx1cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAxRS0zOTEKK25leHRwMDYyIG5leHRwbHVzICAxRS0zOTEgICAgICAgICAtPiAgIDJFLTM5MQorbmV4dHAwNjMgbmV4dHBsdXMgLTFFLTk5OTk5ICAgICAgIC0+ICAtMEUtMzkxCituZXh0cDA2NCBuZXh0cGx1cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0wRS0zOTEKK25leHRwMDY1IG5leHRwbHVzIC0xRS0zOTEgICAgICAgICAtPiAgLTBFLTM5MQorCistLSBaZXJvcworbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzkxCituZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTEKKworbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorLS0gc3BlY2lhbHMKK25leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQorbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTlFKzk5OQorbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgorbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcKK25leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK25leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworbmV4dHAxNzAgbmV4dHBsdXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IEluZmluaXR5CituZXh0cDE3MSBuZXh0cGx1cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5CituZXh0cDE3MiBuZXh0cGx1cyAgMUUtOTk5ICAgICAgICAgICAgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0cDE3MyBuZXh0cGx1cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0cDE3NCBuZXh0cGx1cyAgOUUtMTAwNyAgICAgICAgICAgLT4gMS4wRS0xMDA2CituZXh0cDE3NSBuZXh0cGx1cyAgOS45RS0xMDA2ICAgICAgICAgLT4gMS4wMEUtMTAwNQorbmV4dHAxNzYgbmV4dHBsdXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDEuMDAwMDBFLTEwMDIKK25leHRwMTc3IG5leHRwbHVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiAxLjAwMDAwMDAwRS05OTkKK25leHRwMTc4IG5leHRwbHVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTlFLTEwMDAKK25leHRwMTc5IG5leHRwbHVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDAKK25leHRwMTgwIG5leHRwbHVzICAwRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CituZXh0cDE4MSBuZXh0cGx1cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMkUtMTAwNworbmV4dHAxODIgbmV4dHBsdXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDNFLTEwMDcKKworbmV4dHAxODMgbmV4dHBsdXMgIC0wRS0xMDA3ICAgICAgICAgIC0+ICAxRS0xMDA3CituZXh0cDE4NCBuZXh0cGx1cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTBFLTEwMDcKK25leHRwMTg1IG5leHRwbHVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworbmV4dHAxODYgbmV4dHBsdXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC05RS0xMDA3CituZXh0cDE4NyBuZXh0cGx1cyAgLTEwMEUtMTAwNyAgICAgICAgLT4gLTkuOUUtMTAwNgorbmV4dHAxODggbmV4dHBsdXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC05Ljk5OTlFLTEwMDMKK25leHRwMTg5IG5leHRwbHVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwCituZXh0cDE5MCBuZXh0cGx1cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTkuOTk5OTk5OUUtMTAwMAorbmV4dHAxOTEgbmV4dHBsdXMgIC0xRS05OTkgICAgICAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDAKK25leHRwMTkyIG5leHRwbHVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5N0UrOTk5CituZXh0cDE5MyBuZXh0cGx1cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OThFKzk5OQorCistLSBOdWxsIHRlc3RzCituZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHR0b3dhcmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QKaW5kZXggZGEyNmY2NS4uNTYyMzg1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHR0b3dhcmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0CkBAIC0xLDQyNiArMSw0MjYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIG5leHR0b3dhcmQuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MNCi1uZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTANCi1uZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTANCi1uZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMQ0KLW5leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OQ0KLW5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OQ0KLW5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAxDQotbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTM5MSAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTEgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OUUrMzg0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tLS0tLS0gbGhzPXJocw0KLS0tIGZpbml0ZXMNCi1uZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNw0KLW5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03DQotbmV4dHQxMDMgbmV4dHRvd2FyZCAgICAgICAgIDc1ICAgICAgNzUgLT4gIDc1DQotbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1DQotbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTANCi1uZXh0dDEwNiBuZXh0dG93YXJkICAgICAgLTcuNTAgICAtNy41MCAtPiAtNy41MA0KLW5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMA0KLW5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMA0KLQ0KLS0tIHplcm9zDQotbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDANCi1uZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMA0KLW5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0DQotbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQNCi1uZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAgMC4wMDAwMCAtPiAgMC4wMDAwDQotbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwICAgLTAuMDAgLT4gLTAuMDAwMA0KLW5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDENCi1uZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxDQotDQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCi1uZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OA0KLW5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4DQotbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQNCi1uZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQotbmV4dHQxMzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMNCi1uZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS0zODMgIDEuMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMEUtMzgzDQotbmV4dHQxMzQgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgICAxRS0zOTEgICAgICAgICAgICAtPiAgIDFFLTM5MQ0KLQ0KLW5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS0zOTEgICAgICAgICAgLTFFLTM5MSAgICAgICAgICAgLT4gIC0xRS0zOTENCi1uZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwRS0zODMgIC0+ICAtMS4wMDAwMDAwMEUtMzgzDQotbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAtMUUtMzgzICAgICAgICAgICAtPiAgLTFFLTM4Mw0KLW5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5RSszODQNCi0NCi0tLS0tLS0tIGxoczxyaHMNCi1uZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2DQotbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5Nw0KLW5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTgNCi1uZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQotbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwDQotbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxDQotbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxDQotbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxDQotbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyDQotbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzDQotbmV4dHQyMTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA0DQotbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1DQotbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2DQotbmV4dHQyMTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA3DQotbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4DQotbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5DQotbmV4dHQyMTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwDQotbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQotbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyDQotDQotbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NA0KLW5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk2IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTUNCi1uZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NyBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2DQotbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5Nw0KLW5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTgNCi1uZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5DQotbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQ0KLW5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkNCi1uZXh0dDIyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDANCi1uZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDENCi1uZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDINCi1uZXh0dDIzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDMNCi1uZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQNCi1uZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUNCi1uZXh0dDIzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDYNCi1uZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcNCi1uZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgNCi1uZXh0dDIzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDkNCi1uZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCi1uZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi0NCi0tLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24NCi1uZXh0dDI0MSBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDI0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDI0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0NCBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0NyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCi1uZXh0dDI0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCi1uZXh0dDI1MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCi1uZXh0dDI1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCi1uZXh0dDI1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDI1MyBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDI1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDI1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDI1NiBuZXh0dG93YXJkIC0xLjAwMDAwMDExNTUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi0tLSB1bHRyYS10aW55IGlucHV0cw0KLW5leHR0MjYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAgMUUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQyNjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDI2MiBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgIDJFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MjYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1uZXh0dDI2NCBuZXh0dG93YXJkIC0xRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotbmV4dHQyNjUgbmV4dHRvd2FyZCAtMUUtMzkxICAgICAgICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLQ0KLS0tIFplcm9zDQotbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzcGVjaWFscw0KLW5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5DQotbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFODQotbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDM1NCBuZXh0dG93YXJkICAgTmFONzcgIEluZmluaXR5IC0+ICBOYU43Nw0KLW5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFODQotbmV4dHQzNTcgbmV4dHRvd2FyZCAtc05hTiAgICBJbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43Nw0KLW5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1uZXh0dDM3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICBJbmZpbml0eSAtPiBJbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzNzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgSW5maW5pdHkgLT4gOS45OTk5OTk5OUUrOTk5DQotbmV4dHQzNzIgbmV4dHRvd2FyZCAgMUUtOTk5ICAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5DQotbmV4dHQzNzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5DQotbmV4dHQzNzQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTlFLTk5OSAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMEUtOTk5DQotbmV4dHQzNzUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OUUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMEUtOTk5DQotbmV4dHQzNzYgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wRS0xMDA2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzNzcgbmV4dHRvd2FyZCAgOS45RS0xMDA2ICAgICAgICAgSW5maW5pdHkgLT4gMS4wMEUtMTAwNSAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzNzggbmV4dHRvd2FyZCAgOS45OTk5RS0xMDAzICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMEUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzNzkgbmV4dHRvd2FyZCAgOS45OTk5OTk4RS0xMDAwICAgSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzODAgbmV4dHRvd2FyZCAgOS45OTk5OTk3RS0xMDAwICAgSW5maW5pdHkgLT4gOS45OTk5OTk4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzODEgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzODIgbmV4dHRvd2FyZCAgMUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMkUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzODMgbmV4dHRvd2FyZCAgMkUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gM0UtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotbmV4dHQzODUgbmV4dHRvd2FyZCAgLTBFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzODYgbmV4dHRvd2FyZCAgLTFFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1uZXh0dDM4NyBuZXh0dG93YXJkICAtMkUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4OCBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICBJbmZpbml0eSAtPiAtOUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM4OSBuZXh0dG93YXJkICAtMTAwRS0xMDA3ICAgICAgICBJbmZpbml0eSAtPiAtOS45RS0xMDA2ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM5MCBuZXh0dG93YXJkICAtMTAwMDAwRS0xMDA3ICAgICBJbmZpbml0eSAtPiAtOS45OTk5RS0xMDAzICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM5MSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0MzkyIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS05OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQzOTMgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDM5NCBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5N0UrOTk5DQotbmV4dHQzOTUgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OThFKzk5OQ0KLQ0KLS0tLS0tLS0gbGhzPnJocw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLW5leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NA0KLW5leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NQ0KLW5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5Ng0KLW5leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5Nw0KLW5leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OA0KLW5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQ0KLW5leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQ0KLW5leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQ0KLW5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwDQotbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCi1uZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMg0KLW5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzDQotbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQNCi1uZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNQ0KLW5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2DQotbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcNCi1uZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwOA0KLW5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5DQotbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCi1uZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLQ0KLW5leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5Ng0KLW5leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5Nw0KLW5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OA0KLW5leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQ0KLW5leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwDQotbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDENCi1uZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQ0KLW5leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxDQotbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDINCi1uZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMw0KLW5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA0DQotbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUNCi1uZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNg0KLW5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA3DQotbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgNCi1uZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQ0KLW5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwDQotbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCi1uZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KLQ0KLS0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbg0KLW5leHR0NDQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwDQotbmV4dHQ0NDIgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCi1uZXh0dDQ0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMA0KLW5leHR0NDQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQotbmV4dHQ0NDUgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDQ0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KLW5leHR0NDQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQotbmV4dHQ0NDggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCi1uZXh0dDQ0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KLW5leHR0NDUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExDQotbmV4dHQ0NTEgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCi1uZXh0dDQ1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KLW5leHR0NDUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQotbmV4dHQ0NTQgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCi1uZXh0dDQ1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KLW5leHR0NDU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQotLS0gdWx0cmEtdGlueSBpbnB1dHMNCi1uZXh0dDQ2MCBuZXh0dG93YXJkICAxRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotbmV4dHQ0NjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLW5leHR0NDYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi1uZXh0dDQ2MyBuZXh0dG93YXJkIC0xRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAtMUUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NDY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ0NjUgbmV4dHRvd2FyZCAtMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTJFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBaZXJvcw0KLW5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDUwOCBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLTAuMDAwMCAgIC0+IC0wLjAwDQotDQotLS0gc3BlY2lhbHMNCi1uZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkNCi1uZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTg0KLW5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3DQotbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFODQotbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcNCi1uZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCi1tYXhFeHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1uZXh0dDU3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OThFKzk5OQ0KLW5leHR0NTcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OThFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5N0UrOTk5DQotbmV4dHQ1NzIgbmV4dHRvd2FyZCAgMUUtOTk5ICAgICAgICAgICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTc0IG5leHR0b3dhcmQgIDlFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gOEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1NzUgbmV4dHRvd2FyZCAgOS45RS0xMDA2ICAgICAgICAgIC1JbmZpbml0eSAtPiA5LjhFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU3NiBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OUUtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1NzggbmV4dHRvd2FyZCAgOS45OTk5OTk4RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTdFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5NkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTgwIG5leHR0b3dhcmQgIDBFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODEgbmV4dHRvd2FyZCAgMUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAwRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLW5leHR0NTgyIG5leHR0b3dhcmQgIDJFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotbmV4dHQ1ODMgbmV4dHRvd2FyZCAgLTBFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU4NCBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0yRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTg1IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTNFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODYgbmV4dHRvd2FyZCAgLTEwRS0xMDA3ICAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4xRS0xMDA2ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDU4NyBuZXh0dG93YXJkICAtMTAwRS0xMDA3ICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAxRS0xMDA1ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NTg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDFFLTEwMDIgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ1ODkgbmV4dHRvd2FyZCAgLTEuMDAwMEUtOTk5ICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5DQotbmV4dHQ1OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5DQotbmV4dHQ1OTEgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5DQotbmV4dHQ1OTIgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OThFKzk5OSAgIC1JbmZpbml0eSAtPiAtOS45OTk5OTk5OUUrOTk5DQotbmV4dHQ1OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzk5OSAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotDQotDQotDQotDQotLS0tLS0tLSBTcGVjaWFscw0KLW1heEV4cG9uZW50OiAzODQNCi1taW5leHBvbmVudDogLTM4Mw0KLW5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KLW5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5RSszODQNCi1uZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KLW5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5RSszODQNCi1uZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KLW5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAxDQotbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQotbmV4dHQ3ODkgbmV4dHRvd2FyZCAtMSAgICAtSW5mICAgLT4gLTEuMDAwMDAwMDENCi1uZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLW5leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5DQotbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTkNCi1uZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0DQotDQotbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCi1uZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCi1uZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OUUrMzg0DQotbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KLW5leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5DQotbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KLW5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OQ0KLW5leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1uZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMQ0KLW5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAxDQotbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQotDQotbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLW5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1uZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFODQotbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLW5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1uZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFODQotbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLW5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1uZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLW5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1uZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLW5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1uZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFODQotbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLW5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1uZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1uZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLW5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1uZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLW5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1uZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLW5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLW5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1uZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1uZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIE51bGwgdGVzdHMNCi1uZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbmV4dHRvd2FyZC5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK25leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMAorbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwCituZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMQorbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5CituZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTkKK25leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAxCituZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OUUrMzg0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCituZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrMzg0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0gbGhzPXJocworLS0gZmluaXRlcworbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcKK25leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03CituZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKK25leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQorbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKK25leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCituZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDAKK25leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAorCistLSB6ZXJvcworbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKK25leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wCituZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAorbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKK25leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMCAwLjAwMDAwIC0+ICAwLjAwMDAKK25leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMCAgIC0wLjAwIC0+IC0wLjAwMDAKK25leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKK25leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK25leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4CituZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAorbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQKK25leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CituZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgOS45OTk5OTk5OUUrMzg0CituZXh0dDEzMiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgIC0+ICAgMUUtMzgzCituZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS0zODMgIDEuMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMEUtMzgzCituZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgIDFFLTM5MSAgICAgICAgICAgIC0+ICAgMUUtMzkxCisKK25leHR0MTM1IG5leHR0b3dhcmQgIC0xRS0zOTEgICAgICAgICAgLTFFLTM5MSAgICAgICAgICAgLT4gIC0xRS0zOTEKK25leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS0zODMgLTEuMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwRS0zODMKK25leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMKK25leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gIC05Ljk5OTk5OTk5RSszODQKKworLS0tLS0tLSBsaHM8cmhzCituZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2CituZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3CituZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4CituZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAKK25leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQorbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCituZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMgorbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzCituZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQKK25leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNQorbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2CituZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcKK25leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwOAorbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5CituZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCisKK25leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTQKK25leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk2IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTUKK25leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTYKK25leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTcKK25leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTgKK25leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMAorbmV4dHQyMzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDIKK25leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMworbmV4dHQyMzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA0CituZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUKK25leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNgorbmV4dHQyMzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA3CituZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgKK25leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQorbmV4dHQyMzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0dDI0MSBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0MjQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQyNDMgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NCBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI1MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0MjUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQyNTIgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1MyBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0MjU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQyNTUgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTA1MiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1NiBuZXh0dG93YXJkIC0xLjAwMDAwMDExNTUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCituZXh0dDI2MCBuZXh0dG93YXJkICAxRS05OTk5OSAgICAgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQyNjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MjYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAgMkUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDI2MyBuZXh0dG93YXJkIC0xRS05OTk5OSAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDI2NCBuZXh0dG93YXJkIC0xRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDI2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIFplcm9zCituZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBzcGVjaWFscworbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKK25leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCituZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK25leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCituZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4KK25leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NworbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CituZXh0dDM3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICBJbmZpbml0eSAtPiBJbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk4RSs5OTkgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTk5RSs5OTkKK25leHR0MzcyIG5leHR0b3dhcmQgIDFFLTk5OSAgICAgICAgICAgIEluZmluaXR5IC0+IDEuMDAwMDAwMDFFLTk5OQorbmV4dHQzNzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5CituZXh0dDM3NCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OUUtOTk5ICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkKK25leHR0Mzc1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTlFLTk5OSAgIEluZmluaXR5IC0+IDEuMDAwMDAwMDBFLTk5OQorbmV4dHQzNzYgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wRS0xMDA2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3NyBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICBJbmZpbml0eSAtPiAxLjAwRS0xMDA1ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzc4IG5leHR0b3dhcmQgIDkuOTk5OUUtMTAwMyAgICAgIEluZmluaXR5IC0+IDEuMDAwMDBFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzNzkgbmV4dHRvd2FyZCAgOS45OTk5OTk4RS0xMDAwICAgSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MCBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzgxIG5leHR0b3dhcmQgIDBFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDFFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODIgbmV4dHRvd2FyZCAgMUUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMkUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MyBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAzRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworbmV4dHQzODUgbmV4dHRvd2FyZCAgLTBFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4NiBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMEUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQzODcgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4OCBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICBJbmZpbml0eSAtPiAtOUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzg5IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgIEluZmluaXR5IC0+IC05LjlFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTAgbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgSW5maW5pdHkgLT4gLTkuOTk5OUUtMTAwMyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5MSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTIgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzkzIG5leHR0b3dhcmQgIC0xRS05OTkgICAgICAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5NCBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5N0UrOTk5CituZXh0dDM5NSBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OEUrOTk5CisKKy0tLS0tLS0gbGhzPnJocworbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKK25leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NAorbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk1CituZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYKK25leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NworbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4CituZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKK25leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQorbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMAorbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyCituZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMworbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQKK25leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1CituZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNgorbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcKK25leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4CituZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwOQorbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCisKK25leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NgorbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3CituZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTgKK25leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAKK25leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQorbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKK25leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAyCituZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMworbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQKK25leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA1CituZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNgorbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcKK25leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA4CituZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQorbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KK25leHR0NDQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDQ0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQ0NDMgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0NDUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDQ1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTIgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTUgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dHQ0NjAgbmV4dHRvd2FyZCAgMUUtOTk5OTkgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjEgbmV4dHRvd2FyZCAgMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ0NjMgbmV4dHRvd2FyZCAtMUUtOTk5OTkgICAgICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NDY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDQ2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAtMkUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBaZXJvcworbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwOCBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLTAuMDAwMCAgIC0+IC0wLjAwCisKKy0tIHNwZWNpYWxzCituZXh0dDU1MCBuZXh0dG93YXJkICAgSW5mICAgICAtSW5maW5pdHkgLT4gIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQorbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4KK25leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcKK25leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK25leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCituZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3CituZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbmV4dHQ1NzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OUUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk4RSs5OTkKK25leHR0NTcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OThFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5N0UrOTk5CituZXh0dDU3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc0IG5leHR0b3dhcmQgIDlFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gOEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3NSBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICAgLUluZmluaXR5IC0+IDkuOEUtMTAwNiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzYgbmV4dHRvd2FyZCAgOS45OTk5RS0xMDAzICAgICAgIC1JbmZpbml0eSAtPiA5Ljk5OThFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OUUtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3OCBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5N0UtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk3RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTZFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTgwIG5leHR0b3dhcmQgIDBFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4MSBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCituZXh0dDU4MiBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDFFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCituZXh0dDU4MyBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODQgbmV4dHRvd2FyZCAgLTFFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMkUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg1IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTNFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4NiBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjFFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODcgbmV4dHRvd2FyZCAgLTEwMEUtMTAwNyAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMUUtMTAwNSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDFFLTEwMDIgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4OSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHR0NTkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS05OTkgICAtSW5maW5pdHkgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dHQ1OTEgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0dDU5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICAgLUluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSs5OTkKK25leHR0NTkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSs5OTkgICAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCisKKworCistLS0tLS0tIFNwZWNpYWxzCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CituZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMQorbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CituZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMQorbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTkKK25leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5CituZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0CisKK25leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTkKK25leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OQorbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMQorbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDEKK25leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCituZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCituZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFOCituZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFOCituZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCituZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFOCituZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFOCituZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCituZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFOCituZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCituZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK25leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK25leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCituZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK25leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CituZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK25leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CituZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCituZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK25leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCituZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9vci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QKaW5kZXggZjQ3MWQwYi4uMWFlYmZmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QKQEAgLTEsMzM0ICsxLDMzNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQotb3J4MDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQotb3J4MDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxDQotb3J4MDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQotb3J4MDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQotb3J4MDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwDQotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCi1vcngwMDYgb3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLW9yeDAwNyBvciAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwDQotb3J4MDA4IG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCi1vcngwMDkgb3IgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KLW9yeDAxMCBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQotb3J4MDExIG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDANCi1vcngwMTIgb3IgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMA0KLW9yeDAxMyBvciAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQotDQotLS0gVmFyaW91cyBsZW5ndGhzDQotLS0gICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5DQotb3J4MDIxIG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDIyIG9yIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDIzIG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExDQotb3J4MDI1IG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExDQotb3J4MDI2IG9yICAgIDExMTExMSAgICAgICAgMTExMTExICAtPiAgICAgMTExMTExDQotb3J4MDI3IG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgICAgIDExMTExDQotb3J4MDI4IG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgICAgICAxMTExDQotb3J4MDI5IG9yICAgICAgIDExMSAgICAgICAgICAgMTExICAtPiAgICAgICAgMTExDQotb3J4MDMxIG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgICAgICAgIDExDQotb3J4MDMyIG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgICAgICAgICAxDQotb3J4MDMzIG9yIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDM0IG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDM1IG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDM2IG9yIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotDQotb3J4MDQwIG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDQxIG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDQyIG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDQzIG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTExDQotb3J4MDQ0IG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMTExDQotb3J4MDQ1IG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDExMTExDQotb3J4MDQ2IG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExDQotb3J4MDQ3IG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExDQotb3J4MDQ4IG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExDQotb3J4MDQ5IG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxDQotDQotb3J4MDUwIG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTENCi1vcngwNTEgb3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMQ0KLW9yeDA1MiBvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTENCi1vcngwNTMgb3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTENCi1vcngwNTQgb3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMQ0KLW9yeDA1NSBvciAgICAgIDExMTExICAxICAtPiAgMTExMTENCi1vcngwNTYgb3IgICAgICAgMTExMSAgMSAgLT4gIDExMTENCi1vcngwNTcgb3IgICAgICAgIDExMSAgMSAgLT4gIDExMQ0KLW9yeDA1OCBvciAgICAgICAgIDExICAxICAtPiAgMTENCi1vcngwNTkgb3IgICAgICAgICAgMSAgMSAgLT4gIDENCi0NCi1vcngwNjAgb3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KLW9yeDA2MSBvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQotb3J4MDYyIG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KLW9yeDA2MyBvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQ0KLW9yeDA2NCBvciAgICAgMTExMTExICAwICAtPiAgMTExMTExDQotb3J4MDY1IG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KLW9yeDA2NiBvciAgICAgICAxMTExICAwICAtPiAgMTExMQ0KLW9yeDA2NyBvciAgICAgICAgMTExICAwICAtPiAgMTExDQotb3J4MDY4IG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KLW9yeDA2OSBvciAgICAgICAgICAxICAwICAtPiAgMQ0KLQ0KLW9yeDA3MCBvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExDQotb3J4MDcxIG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwNzIgb3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTExDQotb3J4MDczIG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTExDQotb3J4MDc0IG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTENCi1vcngwNzUgb3IgMSAgICAgICAxMTExMSAgLT4gIDExMTExDQotb3J4MDc2IG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTExDQotb3J4MDc3IG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTENCi1vcngwNzggb3IgMSAgICAgICAgICAxMSAgLT4gIDExDQotb3J4MDc5IG9yIDEgICAgICAgICAgIDEgIC0+ICAxDQotDQotb3J4MDgwIG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngwODEgb3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLW9yeDA4MiBvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTENCi1vcngwODMgb3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTENCi1vcngwODQgb3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQ0KLW9yeDA4NSBvciAwICAgICAgIDExMTExICAtPiAgMTExMTENCi1vcngwODYgb3IgMCAgICAgICAgMTExMSAgLT4gIDExMTENCi1vcngwODcgb3IgMCAgICAgICAgIDExMSAgLT4gIDExMQ0KLW9yeDA4OCBvciAwICAgICAgICAgIDExICAtPiAgMTENCi1vcngwODkgb3IgMCAgICAgICAgICAgMSAgLT4gIDENCi0NCi1vcngwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1vcngwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi1vcngwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCi0NCi1vcngxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDIgb3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCi1vcngxMDUgb3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTENCi1vcngxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTENCi1vcngxMDggb3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTENCi0NCi0tLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCi1vcngyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQotb3J4MjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjQxIG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjQ0IG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNU0QNCi1vcngyNTAgb3IgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1MSBvciAgNzAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjUyIG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTMgb3IgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1NCBvciAgMjAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjU1IG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTYgb3IgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI1NyBvciAgOTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjU4IG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNTkgb3IgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI2MCBvciAgMTAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjYxIG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNjIgb3IgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI2MyBvciAgMDAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjY0IG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNjUgb3IgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi1vcngyNzAgb3IgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI3MSBvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjcyIG9yICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNzMgb3IgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI3NCBvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjc1IG9yICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyNzYgb3IgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI3NyBvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBMU0QNCi1vcngyODAgb3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4MSBvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjgyIG9yICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyODMgb3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4NCBvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mjg1IG9yICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyODYgb3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4NyBvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gdGVzdCBNaWRkaWUNCi1vcngyODggb3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI4OSBvciAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjkwIG9yICAwMDAwODAwMDAgMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTEgb3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5MiBvciAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MjkzIG9yICAxMDAxMDAwMDAgMDAwMDcwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTQgb3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDI5NSBvciAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi1vcngyOTYgb3IgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTcgb3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTggb3IgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngyOTkgb3IgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwMTEwMDANCi0NCi0tLSBObWF4LCBObWluLCBOdGlueQ0KLW9yeDMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzMyIG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzMzMgb3IgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDMzNCBvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzM1IG9yICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzMzYgb3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDMzNyBvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNDEgb3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0MiBvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzQzIG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNDQgb3IgIDFFLTEwMDcgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0NSBvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzQ2IG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNDcgb3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM0OCBvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQotb3J4MzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4MzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Mzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcngzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KLW9yeDc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4NzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Nzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4Nzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4NzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4NzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLW9yeDgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotb3J4ODIxIG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODI0IG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODI3IG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODMwIG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODMzIG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODM2IG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLW9yeDg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotb3J4ODYxIG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODY0IG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODY3IG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODcxIG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODc0IG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODc3IG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODgwIG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotb3J4ODgzIG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1vcng4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLW9yeDg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitvcngwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK29yeDAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorb3J4MDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitvcngwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK29yeDAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK29yeDAwNiBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitvcngwMDcgb3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAorb3J4MDA4IG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK29yeDAwOSBvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCitvcngwMTAgb3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorb3J4MDExIG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK29yeDAxMiBvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCitvcngwMTMgb3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQorb3J4MDIxIG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMjIgb3IgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAyMyBvciAgMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gICAxMTExMTExMQorb3J4MDI1IG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExCitvcngwMjYgb3IgICAgMTExMTExICAgICAgICAxMTExMTEgIC0+ICAgICAxMTExMTEKK29yeDAyNyBvciAgICAgMTExMTEgICAgICAgICAxMTExMSAgLT4gICAgICAxMTExMQorb3J4MDI4IG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgICAgICAxMTExCitvcngwMjkgb3IgICAgICAgMTExICAgICAgICAgICAxMTEgIC0+ICAgICAgICAxMTEKK29yeDAzMSBvciAgICAgICAgMTEgICAgICAgICAgICAxMSAgLT4gICAgICAgICAxMQorb3J4MDMyIG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgICAgICAgICAxCitvcngwMzMgb3IgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAzNCBvciAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDM1IG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMzYgb3IgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKKworb3J4MDQwIG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNDEgb3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA0MiBvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDQzIG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTExCitvcngwNDQgb3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTExMTEKK29yeDA0NSBvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMTExMQorb3J4MDQ2IG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitvcngwNDcgb3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK29yeDA0OCBvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorb3J4MDQ5IG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK29yeDA1MCBvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExCitvcngwNTEgb3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMQorb3J4MDUyIG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMQorb3J4MDUzIG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTExCitvcngwNTQgb3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMQorb3J4MDU1IG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMQorb3J4MDU2IG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTExCitvcngwNTcgb3IgICAgICAgIDExMSAgMSAgLT4gIDExMQorb3J4MDU4IG9yICAgICAgICAgMTEgIDEgIC0+ICAxMQorb3J4MDU5IG9yICAgICAgICAgIDEgIDEgIC0+ICAxCisKK29yeDA2MCBvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitvcngwNjEgb3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQorb3J4MDYyIG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQorb3J4MDYzIG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExCitvcngwNjQgb3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQorb3J4MDY1IG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQorb3J4MDY2IG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExCitvcngwNjcgb3IgICAgICAgIDExMSAgMCAgLT4gIDExMQorb3J4MDY4IG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQorb3J4MDY5IG9yICAgICAgICAgIDEgIDAgIC0+ICAxCisKK29yeDA3MCBvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNzEgb3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDcyIG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorb3J4MDczIG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitvcngwNzQgb3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMQorb3J4MDc1IG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMQorb3J4MDc2IG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTExCitvcngwNzcgb3IgMSAgICAgICAgIDExMSAgLT4gIDExMQorb3J4MDc4IG9yIDEgICAgICAgICAgMTEgIC0+ICAxMQorb3J4MDc5IG9yIDEgICAgICAgICAgIDEgIC0+ICAxCisKK29yeDA4MCBvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwODEgb3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDgyIG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorb3J4MDgzIG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitvcngwODQgb3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQorb3J4MDg1IG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQorb3J4MDg2IG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCitvcngwODcgb3IgMCAgICAgICAgIDExMSAgLT4gIDExMQorb3J4MDg4IG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQorb3J4MDg5IG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK29yeDA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitvcngwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKKworb3J4MTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCitvcngxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQorb3J4MTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCitvcngxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK29yeDEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQorb3J4MTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCitvcngxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTEKK29yeDEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK29yeDIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworb3J4MjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitvcngyNTAgb3IgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjUxIG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1MiBvciAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTMgb3IgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU0IG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1NSBvciAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTYgb3IgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU3IG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1OCBvciAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTkgb3IgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYwIG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2MSBvciAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjIgb3IgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYzIG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2NCBvciAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjUgb3IgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorb3J4MjcwIG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3MSBvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzIgb3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjczIG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NCBvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzUgb3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc2IG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NyBvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorb3J4MjgwIG9yICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4MSBvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODIgb3IgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjgzIG9yICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NCBvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODUgb3IgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg2IG9yICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NyBvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorb3J4Mjg4IG9yICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4OSBvciAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTAgb3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjkxIG9yICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MiBvciAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTMgb3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk0IG9yICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5NSBvciAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworb3J4Mjk2IG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTcgb3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5OCBvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk5IG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDExMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitvcngzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzMyIG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzQgb3IgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM1IG9yICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzcgb3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0MSBvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDIgb3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQzIG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NCBvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDUgb3IgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ2IG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NyBvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDggb3IgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK29yeDM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorb3J4NzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworb3J4ODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitvcng4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXJzcXJ0LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXJzcXJ0LmRlY1Rlc3QKaW5kZXggNmMwMjFhMC4uMjYwYjk0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdApAQCAtMSwyOTcwICsxLDI5NzAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHBvd2Vyc3FydC5kZWNUZXN0IC0tIGRlY2ltYWwgc3F1YXJlIHJvb3QsIHVzaW5nIHBvd2VyICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA0LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIHRha2VuIGZyb20gc3F1YXJlcm9vdC5kZWNUZXN0IGJ1dCBhcmUNCi0tLSBldmFsdWF0ZWQgdXNpbmcgdGhlIHBvd2VyIG9wZXJhdG9yLiAgVGhlIGRpZmZlcmVuY2VzIGluIHJlc3VsdHMNCi0tLSAoMTUzIG91dCBvZiAyODU2KSBmYWxsIGludG8gdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOg0KLS0tDQotLS0gICAgeCAgICAqKiAwLjUgKHg+MCkgaGFzIG5vIHByZWZlcnJlZCBleHBvbmVudCwgYW5kIGlzIEluZXhhY3QNCi0tLSAgICAgICAgICAgICAgICAoYW5kIGhlbmNlIGZ1bGwgcHJlY2lzaW9uKTsgYWxtb3N0IGFsbCBkaWZmZXJlbmNlcyBhcmUNCi0tLSAgICAgICAgICAgICAgICBpbiB0aGlzIGNhdGVnb3J5DQotLS0gICAgMC4wMCAqKiAwLjUgYmVjb21lcyAwIChub3QgMC4wKSwgZXRjLg0KLS0tICAgLTAgICAgKiogMC41IGJlY29tZXMgMCAobmV2ZXIgLTApDQotLS0gICAgU29tZSBleGFjdCBzdWJub3JtYWxzIGJlY29tZSBpbmV4YWN0IGFuZCBoZW5jZSB1bmRlcmZsb3dzDQotDQotZXh0ZW5kZWQ6ICAgIDENCi1wcmVjaXNpb246ICAgOQ0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi1tYXhFeHBvbmVudDogMzg0DQotbWluZXhwb25lbnQ6IC0zODMNCi0NCi0tLSBiYXNpY3MNCi1wd3N4MDAxICBwb3dlciAxICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDAyICBwb3dlciAtMSAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAwMyAgcG93ZXIgMS4wMCAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAwNCAgcG93ZXIgLTEuMDAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwMDUgIHBvd2VyIDAgICAgICAgIDAuNSAtPiAwDQotcHdzeDAwNiAgcG93ZXIgMDAuMCAgICAgMC41IC0+IDANCi1wd3N4MDA3ICBwb3dlciAwLjAwICAgICAwLjUgLT4gMA0KLXB3c3gwMDggIHBvd2VyIDAwLjAwICAgIDAuNSAtPiAwDQotcHdzeDAwOSAgcG93ZXIgMDAuMDAwICAgMC41IC0+IDANCi1wd3N4MDEwICBwb3dlciAwMC4wMDAwICAwLjUgLT4gMA0KLXB3c3gwMTEgIHBvd2VyIDAwICAgICAgIDAuNSAtPiAwDQotDQotcHdzeDAxMiAgcG93ZXIgLTIgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwMTMgIHBvd2VyIDIgICAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwMTQgIHBvd2VyIC0yLjAwICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDE1ICBwb3dlciAyLjAwICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDE2ICBwb3dlciAtMCAgICAgICAwLjUgLT4gMA0KLXB3c3gwMTcgIHBvd2VyIC0wLjAgICAgIDAuNSAtPiAwDQotcHdzeDAxOCAgcG93ZXIgLTAwLjAwICAgMC41IC0+IDANCi1wd3N4MDE5ICBwb3dlciAtMDAuMDAwICAwLjUgLT4gMA0KLXB3c3gwMjAgIHBvd2VyIC0wLjAwMDAgIDAuNSAtPiAwDQotcHdzeDAyMSAgcG93ZXIgLTBFKzkgICAgMC41IC0+IDANCi1wd3N4MDIyICBwb3dlciAtMEUrMTAgICAwLjUgLT4gMA0KLXB3c3gwMjMgIHBvd2VyIC0wRSsxMSAgIDAuNSAtPiAwDQotcHdzeDAyNCAgcG93ZXIgLTBFKzEyICAgMC41IC0+IDANCi1wd3N4MDI1ICBwb3dlciAtMDAgICAgICAwLjUgLT4gMA0KLXB3c3gwMjYgIHBvd2VyIDBFKzUgICAgIDAuNSAtPiAwDQotcHdzeDAyNyAgcG93ZXIgNC4wICAgICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAyOCAgcG93ZXIgNC4wMCAgICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotDQotcHdzeDAzMCAgcG93ZXIgKzAuMSAgICAgICAgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAzMSAgcG93ZXIgLTAuMSAgICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAzMiAgcG93ZXIgKzAuMDEgICAgICAgICAgICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAzMyAgcG93ZXIgLTAuMDEgICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAzNCAgcG93ZXIgKzAuMDAxICAgICAgICAgICAwLjUgLT4gMC4wMzE2MjI3NzY2IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwMzUgIHBvd2VyIC0wLjAwMSAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwMzYgIHBvd2VyICswLjAwMDAwMSAgICAgICAgMC41IC0+IDAuMDAxMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDAzNyAgcG93ZXIgLTAuMDAwMDAxICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDAzOCAgcG93ZXIgKzAuMDAwMDAwMDAwMDAxICAwLjUgLT4gMC4wMDAwMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDM5ICBwb3dlciAtMC4wMDAwMDAwMDAwMDEgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1wd3N4MDQxICBwb3dlciAxLjEgICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDQyICBwb3dlciAxLjEwICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDQzICBwb3dlciAxLjEwMCAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDQ0ICBwb3dlciAxLjExMCAgICAgICAwLjUgLT4gMS4wNTM1NjUzOCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDQ1ICBwb3dlciAtMS4xICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA0NiAgcG93ZXIgLTEuMTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNDcgIHBvd2VyIC0xLjEwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDQ4ICBwb3dlciAtMS4xMTAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA0OSAgcG93ZXIgOS45ICAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA1MCAgcG93ZXIgOS45MCAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA1MSAgcG93ZXIgOS45MDAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA1MiAgcG93ZXIgOS45OTAgICAgICAgMC41IC0+IDMuMTYwNjk2MTMgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA1MyAgcG93ZXIgLTkuOSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNTQgIHBvd2VyIC05LjkwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4MDU1ICBwb3dlciAtOS45MDAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDA1NiAgcG93ZXIgLTkuOTkwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLXB3c3gwNjAgIHBvd2VyICAxICAgICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2MSAgcG93ZXIgIDEuMCAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDYyICBwb3dlciAgMS4wMCAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjMgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2NCAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDY1ICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjYgIHBvd2VyICAxMC4wMCAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA2NyAgcG93ZXIgIDEwMCAgICAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDY4ICBwb3dlciAgMTAwLjAgICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNjkgIHBvd2VyICAxMDAuMDAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA3MCAgcG93ZXIgIDEuMTAwMEUrMyAgICAwLjUgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDcxICBwb3dlciAgMS4xMDAwMEUrMyAgIDAuNSAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZA0KLXB3c3gwNzIgIHBvd2VyIC0xMC4wICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNzMgIHBvd2VyIC0xMC4wMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNzQgIHBvd2VyIC0xMDAuMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNzUgIHBvd2VyIC0xMDAuMDAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNzYgIHBvd2VyIC0xLjEwMDBFKzMgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXB3c3gwNzcgIHBvd2VyIC0xLjEwMDAwRSszICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIGZhbW91cyBzcXVhcmVzDQotcHdzeDA4MCAgcG93ZXIgICAgIDEgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDgxICBwb3dlciAgICAgNCAgIDAuNSAtPiAyLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODIgIHBvd2VyICAgICA5ICAgMC41IC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4MyAgcG93ZXIgICAgMTYgICAwLjUgLT4gNC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDg0ICBwb3dlciAgICAyNSAgIDAuNSAtPiA1LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODUgIHBvd2VyICAgIDM2ICAgMC41IC0+IDYuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4NiAgcG93ZXIgICAgNDkgICAwLjUgLT4gNy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDg3ICBwb3dlciAgICA2NCAgIDAuNSAtPiA4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwODggIHBvd2VyICAgIDgxICAgMC41IC0+IDkuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA4OSAgcG93ZXIgICAxMDAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDkwICBwb3dlciAgIDEyMSAgIDAuNSAtPiAxMS4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwOTEgIHBvd2VyICAgMTQ0ICAgMC41IC0+IDEyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA5MiAgcG93ZXIgICAxNjkgICAwLjUgLT4gMTMuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MDkzICBwb3dlciAgIDI1NiAgIDAuNSAtPiAxNi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gwOTQgIHBvd2VyICAxMDI0ICAgMC41IC0+IDMyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDA5NSAgcG93ZXIgIDQwOTYgICAwLjUgLT4gNjQuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTAwICBwb3dlciAgIDAuMDEgIDAuNSAtPiAwLjEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTAxICBwb3dlciAgIDAuMDQgIDAuNSAtPiAwLjIwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTAyICBwb3dlciAgIDAuMDkgIDAuNSAtPiAwLjMwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTAzICBwb3dlciAgIDAuMTYgIDAuNSAtPiAwLjQwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA0ICBwb3dlciAgIDAuMjUgIDAuNSAtPiAwLjUwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA1ICBwb3dlciAgIDAuMzYgIDAuNSAtPiAwLjYwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA2ICBwb3dlciAgIDAuNDkgIDAuNSAtPiAwLjcwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA3ICBwb3dlciAgIDAuNjQgIDAuNSAtPiAwLjgwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA4ICBwb3dlciAgIDAuODEgIDAuNSAtPiAwLjkwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTA5ICBwb3dlciAgIDEuMDAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMTAgIHBvd2VyICAgMS4yMSAgMC41IC0+IDEuMTAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDExMSAgcG93ZXIgICAxLjQ0ICAwLjUgLT4gMS4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTEyICBwb3dlciAgIDEuNjkgIDAuNSAtPiAxLjMwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMTMgIHBvd2VyICAgMi41NiAgMC41IC0+IDEuNjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDExNCAgcG93ZXIgIDEwLjI0ICAwLjUgLT4gMy4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTE1ICBwb3dlciAgNDAuOTYgIDAuNSAtPiA2LjQwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFByZWNpc2lvbiAxIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiAgIDENCi1wd3N4MTIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwMyAgcG93ZXIgMS4wRS0xICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwNiAgcG93ZXIgMUUrMSAgMC41IC0+IDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIwOCAgcG93ZXIgMUUrMyAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjA5ICBwb3dlciAwLjIgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxMSAgcG93ZXIgMi4wRS0xICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxMiAgcG93ZXIgMi4wMEUtMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxNCAgcG93ZXIgMkUrMSAgMC41IC0+IDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjE1ICBwb3dlciAyRSsyICAwLjUgLT4gMUUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIxOCAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjIxICBwb3dlciAzRS0zICAwLjUgLT4gMC4wNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjI0ICBwb3dlciAzRSszICAwLjUgLT4gNUUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjcgIHBvd2VyIDQuMEUtMSAgMC41IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzAgIHBvd2VyIDRFKzEgIDAuNSAtPiA2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzMyAgcG93ZXIgMC41ICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzYgIHBvd2VyIDUuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTIzOSAgcG93ZXIgNUUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQwICBwb3dlciA1RSszICAwLjUgLT4gN0UrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDEgIHBvd2VyIDAuNiAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDIgIHBvd2VyIDAuMDYgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQ0ICBwb3dlciA2LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI0NSAgcG93ZXIgNkUtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI0OCAgcG93ZXIgNkUrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1MSAgcG93ZXIgNy4wRS0xICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1NCAgcG93ZXIgN0UrMSAgMC41IC0+IDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1NyAgcG93ZXIgMC44ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjAgIHBvd2VyIDguMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI2MyAgcG93ZXIgOEUrMiAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjY0ICBwb3dlciA4RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjUgIHBvd2VyIDAuOSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjYgIHBvd2VyIDAuMDkgIDAuNSAtPiAwLjMgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gxMjY5ICBwb3dlciA5RS0zICAwLjUgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MTI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDNFKzEgSW5leGFjdCBSb3VuZGVkDQotcHdzeDEyNzIgIHBvd2VyIDlFKzMgIDAuNSAtPiA5RSsxICBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBQcmVjaXNpb24gMiBzcXVhcmVyb290IHRlc3RzIFtleGhhdXN0aXZlLCBwbHVzIGV4cG9uZW50IGFkanVzdHNdDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogICAyDQotcHdzeDIyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIwMyAgcG93ZXIgMS4wRS0xICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjA1ICBwb3dlciAxRS0zICAwLjUgLT4gMC4wMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjA2ICBwb3dlciAxRSsxICAwLjUgLT4gMy4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjA4ICBwb3dlciAxRSszICAwLjUgLT4gMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjA5ICBwb3dlciAwLjIgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxMiAgcG93ZXIgMi4wMEUtMiAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNC41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxNSAgcG93ZXIgMkUrMiAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMTggIHBvd2VyIDAuMDMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyMSAgcG93ZXIgM0UtMyAgMC41IC0+IDAuMDU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjMgIHBvd2VyIDNFKzIgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjQgIHBvd2VyIDNFKzMgIDAuNSAtPiA1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjI2ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIyNyAgcG93ZXIgNC4wRS0xICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjMwICBwb3dlciA0RSsxICAwLjUgLT4gNi4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjMyICBwb3dlciA0RSszICAwLjUgLT4gNjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjMzICBwb3dlciAwLjUgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM1ICBwb3dlciA1LjBFLTEgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIzNiAgcG93ZXIgNS4wMEUtMiAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjM4ICBwb3dlciA1RSsxICAwLjUgLT4gNy4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjIzOSAgcG93ZXIgNUUrMiAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNDIgIHBvd2VyIDAuMDYgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0NSAgcG93ZXIgNkUtMyAgMC41IC0+IDAuMDc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDcuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNDggIHBvd2VyIDZFKzMgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTEgIHBvd2VyIDcuMEUtMSAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNTQgIHBvd2VyIDdFKzEgIDAuNSAtPiA4LjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjU2ICBwb3dlciA3RSszICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjU3ICBwb3dlciAwLjggIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjU5ICBwb3dlciA4LjBFLTEgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2MCAgcG93ZXIgOC4wMEUtMiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjYyICBwb3dlciA4RSsxICAwLjUgLT4gOC45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2MyAgcG93ZXIgOEUrMiAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNjYgIHBvd2VyIDAuMDkgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjY5ICBwb3dlciA5RS0zICAwLjUgLT4gMC4wOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOS41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDMwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjcyICBwb3dlciA5RSszICAwLjUgLT4gOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjczICBwb3dlciAwLjEwICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyNzQgIHBvd2VyIDAuMDEwICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI3NSAgcG93ZXIgMTAuMEUtMSAgMC41IC0+IDEuMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI3NiAgcG93ZXIgMTAuMDBFLTIgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI3NyAgcG93ZXIgMTBFLTMgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjc4ICBwb3dlciAxMEUrMSAgMC41IC0+IDEwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjc5ICBwb3dlciAxMEUrMiAgMC41IC0+IDMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4MCAgcG93ZXIgMTBFKzMgIDAuNSAtPiAxLjBFKzIgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODEgIHBvd2VyIDAuMTEgIDAuNSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4MiAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4MyAgcG93ZXIgMTEuMEUtMSAgMC41IC0+IDEuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODQgIHBvd2VyIDExLjAwRS0yICAwLjUgLT4gMC4zMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODUgIHBvd2VyIDExRS0zICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyODYgIHBvd2VyIDExRSsxICAwLjUgLT4gMTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjg3ICBwb3dlciAxMUUrMiAgMC41IC0+IDMzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI4OCAgcG93ZXIgMTFFKzMgIDAuNSAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjg5ICBwb3dlciAwLjEyICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTAgIHBvd2VyIDAuMDEyICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTEgIHBvd2VyIDEyLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjkyICBwb3dlciAxMi4wMEUtMiAgMC41IC0+IDAuMzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjkzICBwb3dlciAxMkUtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjk0ICBwb3dlciAxMkUrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI5NSAgcG93ZXIgMTJFKzIgIDAuNSAtPiAzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIyOTYgIHBvd2VyIDEyRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjI5NyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjk4ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMjk5ICBwb3dlciAxMy4wRS0xICAwLjUgLT4gMS4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwMCAgcG93ZXIgMTMuMDBFLTIgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwMSAgcG93ZXIgMTNFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwMiAgcG93ZXIgMTNFKzEgIDAuNSAtPiAxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMDMgIHBvd2VyIDEzRSsyICAwLjUgLT4gMzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzA0ICBwb3dlciAxM0UrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMDUgIHBvd2VyIDAuMTQgIDAuNSAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMwNyAgcG93ZXIgMTQuMEUtMSAgMC41IC0+IDEuMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMDggIHBvd2VyIDE0LjAwRS0yICAwLjUgLT4gMC4zNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMDkgIHBvd2VyIDE0RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTAgIHBvd2VyIDE0RSsxICAwLjUgLT4gMTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzExICBwb3dlciAxNEUrMiAgMC41IC0+IDM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMxMiAgcG93ZXIgMTRFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzEzICBwb3dlciAwLjE1ICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTQgIHBvd2VyIDAuMDE1ICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMTUgIHBvd2VyIDE1LjBFLTEgIDAuNSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzE2ICBwb3dlciAxNS4wMEUtMiAgMC41IC0+IDAuMzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzE3ICBwb3dlciAxNUUtMyAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzE4ICBwb3dlciAxNUUrMSAgMC41IC0+IDEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMxOSAgcG93ZXIgMTVFKzIgIDAuNSAtPiAzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjAgIHBvd2VyIDE1RSszICAwLjUgLT4gMS4yRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMyMSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjIgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjMgIHBvd2VyIDE2LjBFLTEgIDAuNSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzI0ICBwb3dlciAxNi4wMEUtMiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjUgIHBvd2VyIDE2RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjYgIHBvd2VyIDE2RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzI3ICBwb3dlciAxNkUrMiAgMC41IC0+IDQwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzI4ICBwb3dlciAxNkUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMjkgIHBvd2VyIDAuMTcgIDAuNSAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzMCAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzMSAgcG93ZXIgMTcuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzIgIHBvd2VyIDE3LjAwRS0yICAwLjUgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzMgIHBvd2VyIDE3RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzQgIHBvd2VyIDE3RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzM1ICBwb3dlciAxN0UrMiAgMC41IC0+IDQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjMzNiAgcG93ZXIgMTdFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzM3ICBwb3dlciAwLjE4ICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzggIHBvd2VyIDAuMDE4ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzMzkgIHBvd2VyIDE4LjBFLTEgIDAuNSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQwICBwb3dlciAxOC4wMEUtMiAgMC41IC0+IDAuNDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQxICBwb3dlciAxOEUtMyAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQyICBwb3dlciAxOEUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM0MyAgcG93ZXIgMThFKzIgIDAuNSAtPiA0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNDQgIHBvd2VyIDE4RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM0NSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQ2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzQ3ICBwb3dlciAxOS4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM0OCAgcG93ZXIgMTkuMDBFLTIgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM0OSAgcG93ZXIgMTlFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1MCAgcG93ZXIgMTlFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTEgIHBvd2VyIDE5RSsyICAwLjUgLT4gNDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzUyICBwb3dlciAxOUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTMgIHBvd2VyIDAuMjAgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1NCAgcG93ZXIgMC4wMjAgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM1NSAgcG93ZXIgMjAuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTYgIHBvd2VyIDIwLjAwRS0yICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTcgIHBvd2VyIDIwRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNTggIHBvd2VyIDIwRSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzU5ICBwb3dlciAyMEUrMiAgMC41IC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2MCAgcG93ZXIgMjBFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzYxICBwb3dlciAwLjIxICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjIgIHBvd2VyIDAuMDIxICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjMgIHBvd2VyIDIxLjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzY0ICBwb3dlciAyMS4wMEUtMiAgMC41IC0+IDAuNDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzY1ICBwb3dlciAyMUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzY2ICBwb3dlciAyMUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2NyAgcG93ZXIgMjFFKzIgIDAuNSAtPiA0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNjggIHBvd2VyIDIxRSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM2OSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzcwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzcxICBwb3dlciAyMi4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3MiAgcG93ZXIgMjIuMDBFLTIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3MyAgcG93ZXIgMjJFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3NCAgcG93ZXIgMjJFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNzUgIHBvd2VyIDIyRSsyICAwLjUgLT4gNDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzc2ICBwb3dlciAyMkUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzNzcgIHBvd2VyIDAuMjMgIDAuNSAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3OCAgcG93ZXIgMC4wMjMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM3OSAgcG93ZXIgMjMuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODAgIHBvd2VyIDIzLjAwRS0yICAwLjUgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODEgIHBvd2VyIDIzRS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODIgIHBvd2VyIDIzRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzgzICBwb3dlciAyM0UrMiAgMC41IC0+IDQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM4NCAgcG93ZXIgMjNFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzg1ICBwb3dlciAwLjI0ICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODYgIHBvd2VyIDAuMDI0ICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzODcgIHBvd2VyIDI0LjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzg4ICBwb3dlciAyNC4wMEUtMiAgMC41IC0+IDAuNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzg5ICBwb3dlciAyNEUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzkwICBwb3dlciAyNEUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5MSAgcG93ZXIgMjRFKzIgIDAuNSAtPiA0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTIgIHBvd2VyIDI0RSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjM5MyAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTQgIHBvd2VyIDAuMDI1ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTUgIHBvd2VyIDI1LjBFLTEgIDAuNSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzk2ICBwb3dlciAyNS4wMEUtMiAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTcgIHBvd2VyIDI1RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDIzOTggIHBvd2VyIDI1RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyMzk5ICBwb3dlciAyNUUrMiAgMC41IC0+IDUwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDAwICBwb3dlciAyNUUrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDEgIHBvd2VyIDAuMjYgIDAuNSAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwMiAgcG93ZXIgMC4wMjYgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwMyAgcG93ZXIgMjYuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDQgIHBvd2VyIDI2LjAwRS0yICAwLjUgLT4gMC41MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDUgIHBvd2VyIDI2RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MDYgIHBvd2VyIDI2RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDA3ICBwb3dlciAyNkUrMiAgMC41IC0+IDUxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQwOCAgcG93ZXIgMjZFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDA5ICBwb3dlciAwLjI3ICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTAgIHBvd2VyIDAuMDI3ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTEgIHBvd2VyIDI3LjBFLTEgIDAuNSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDEyICBwb3dlciAyNy4wMEUtMiAgMC41IC0+IDAuNTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDEzICBwb3dlciAyN0UtMyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDE0ICBwb3dlciAyN0UrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQxNSAgcG93ZXIgMjdFKzIgIDAuNSAtPiA1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MTYgIHBvd2VyIDI3RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQxNyAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDE4ICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDE5ICBwb3dlciAyOC4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyMCAgcG93ZXIgMjguMDBFLTIgIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyMSAgcG93ZXIgMjhFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyMiAgcG93ZXIgMjhFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MjMgIHBvd2VyIDI4RSsyICAwLjUgLT4gNTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDI0ICBwb3dlciAyOEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MjUgIHBvd2VyIDAuMjkgIDAuNSAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyNiAgcG93ZXIgMC4wMjkgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQyNyAgcG93ZXIgMjkuMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MjggIHBvd2VyIDI5LjAwRS0yICAwLjUgLT4gMC41NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MjkgIHBvd2VyIDI5RS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzAgIHBvd2VyIDI5RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDMxICBwb3dlciAyOUUrMiAgMC41IC0+IDU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQzMiAgcG93ZXIgMjlFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDMzICBwb3dlciAwLjMwICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzQgIHBvd2VyIDAuMDMwICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0MzUgIHBvd2VyIDMwLjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDM2ICBwb3dlciAzMC4wMEUtMiAgMC41IC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDM3ICBwb3dlciAzMEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDM4ICBwb3dlciAzMEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQzOSAgcG93ZXIgMzBFKzIgIDAuNSAtPiA1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDAgIHBvd2VyIDMwRSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0MSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQyICBwb3dlciAwLjAzMSAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQzICBwb3dlciAzMS4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0NCAgcG93ZXIgMzEuMDBFLTIgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0NSAgcG93ZXIgMzFFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ0NiAgcG93ZXIgMzFFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDcgIHBvd2VyIDMxRSsyICAwLjUgLT4gNTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDQ4ICBwb3dlciAzMUUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NDkgIHBvd2VyIDAuMzIgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1MCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1MSAgcG93ZXIgMzIuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTIgIHBvd2VyIDMyLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTMgIHBvd2VyIDMyRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTQgIHBvd2VyIDMyRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDU1ICBwb3dlciAzMkUrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ1NiAgcG93ZXIgMzJFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDU3ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTggIHBvd2VyIDAuMDMzICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NTkgIHBvd2VyIDMzLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDYwICBwb3dlciAzMy4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDYxICBwb3dlciAzM0UtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDYyICBwb3dlciAzM0UrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ2MyAgcG93ZXIgMzNFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NjQgIHBvd2VyIDMzRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ2NSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDY2ICBwb3dlciAwLjAzNCAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDY3ICBwb3dlciAzNC4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ2OCAgcG93ZXIgMzQuMDBFLTIgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ2OSAgcG93ZXIgMzRFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3MCAgcG93ZXIgMzRFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzEgIHBvd2VyIDM0RSsyICAwLjUgLT4gNTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDcyICBwb3dlciAzNEUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzMgIHBvd2VyIDAuMzUgIDAuNSAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ3NSAgcG93ZXIgMzUuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzYgIHBvd2VyIDM1LjAwRS0yICAwLjUgLT4gMC41OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzcgIHBvd2VyIDM1RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0NzggIHBvd2VyIDM1RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDc5ICBwb3dlciAzNUUrMiAgMC41IC0+IDU5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4MCAgcG93ZXIgMzVFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDgxICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4MiAgcG93ZXIgMC4wMzYgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4MyAgcG93ZXIgMzYuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0ODQgIHBvd2VyIDM2LjAwRS0yICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4NSAgcG93ZXIgMzZFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4NiAgcG93ZXIgMzZFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0ODcgIHBvd2VyIDM2RSsyICAwLjUgLT4gNjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0ODggIHBvd2VyIDM2RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ4OSAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDkwICBwb3dlciAwLjAzNyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDkxICBwb3dlciAzNy4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5MiAgcG93ZXIgMzcuMDBFLTIgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5MyAgcG93ZXIgMzdFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5NCAgcG93ZXIgMzdFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0OTUgIHBvd2VyIDM3RSsyICAwLjUgLT4gNjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNDk2ICBwb3dlciAzN0UrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI0OTcgIHBvd2VyIDAuMzggIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5OCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjQ5OSAgcG93ZXIgMzguMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDAgIHBvd2VyIDM4LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDEgIHBvd2VyIDM4RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDIgIHBvd2VyIDM4RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTAzICBwb3dlciAzOEUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUwNCAgcG93ZXIgMzhFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTA1ICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDYgIHBvd2VyIDAuMDM5ICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MDcgIHBvd2VyIDM5LjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTA4ICBwb3dlciAzOS4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTA5ICBwb3dlciAzOUUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTEwICBwb3dlciAzOUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxMSAgcG93ZXIgMzlFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTIgIHBvd2VyIDM5RSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxMyAgcG93ZXIgMC40MCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTE0ICBwb3dlciAwLjA0MCAgMC41IC0+IDAuMjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTUgIHBvd2VyIDQwLjBFLTEgIDAuNSAtPiAyLjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTYgIHBvd2VyIDQwLjAwRS0yICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MTcgIHBvd2VyIDQwRS0zICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxOCAgcG93ZXIgNDBFKzEgIDAuNSAtPiAyMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUxOSAgcG93ZXIgNDBFKzIgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjAgIHBvd2VyIDQwRSszICAwLjUgLT4gMi4wRSsyIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTIxICBwb3dlciAwLjQxICAwLjUgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjIgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjMgIHBvd2VyIDQxLjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTI0ICBwb3dlciA0MS4wMEUtMiAgMC41IC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTI1ICBwb3dlciA0MUUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTI2ICBwb3dlciA0MUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyNyAgcG93ZXIgNDFFKzIgIDAuNSAtPiA2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MjggIHBvd2VyIDQxRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUyOSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTMwICBwb3dlciAwLjA0MiAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTMxICBwb3dlciA0Mi4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzMiAgcG93ZXIgNDIuMDBFLTIgIDAuNSAtPiAwLjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzMyAgcG93ZXIgNDJFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzNCAgcG93ZXIgNDJFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MzUgIHBvd2VyIDQyRSsyICAwLjUgLT4gNjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTM2ICBwb3dlciA0MkUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1MzcgIHBvd2VyIDAuNDMgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzOCAgcG93ZXIgMC4wNDMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjUzOSAgcG93ZXIgNDMuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDAgIHBvd2VyIDQzLjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDEgIHBvd2VyIDQzRS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDIgIHBvd2VyIDQzRSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTQzICBwb3dlciA0M0UrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU0NCAgcG93ZXIgNDNFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTQ1ICBwb3dlciAwLjQ0ICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDYgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NDcgIHBvd2VyIDQ0LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTQ4ICBwb3dlciA0NC4wMEUtMiAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTQ5ICBwb3dlciA0NEUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTUwICBwb3dlciA0NEUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1MSAgcG93ZXIgNDRFKzIgIDAuNSAtPiA2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NTIgIHBvd2VyIDQ0RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1MyAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTU0ICBwb3dlciAwLjA0NSAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTU1ICBwb3dlciA0NS4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1NiAgcG93ZXIgNDUuMDBFLTIgIDAuNSAtPiAwLjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1NyAgcG93ZXIgNDVFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU1OCAgcG93ZXIgNDVFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NTkgIHBvd2VyIDQ1RSsyICAwLjUgLT4gNjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTYwICBwb3dlciA0NUUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjEgIHBvd2VyIDAuNDYgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2MiAgcG93ZXIgMC4wNDYgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2MyAgcG93ZXIgNDYuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjQgIHBvd2VyIDQ2LjAwRS0yICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjUgIHBvd2VyIDQ2RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NjYgIHBvd2VyIDQ2RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTY3ICBwb3dlciA0NkUrMiAgMC41IC0+IDY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU2OCAgcG93ZXIgNDZFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTY5ICBwb3dlciAwLjQ3ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzAgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzEgIHBvd2VyIDQ3LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTcyICBwb3dlciA0Ny4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTczICBwb3dlciA0N0UtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTc0ICBwb3dlciA0N0UrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU3NSAgcG93ZXIgNDdFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1NzYgIHBvd2VyIDQ3RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU3NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTc4ICBwb3dlciAwLjA0OCAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTc5ICBwb3dlciA0OC4wRS0xICAwLjUgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4MCAgcG93ZXIgNDguMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4MSAgcG93ZXIgNDhFLTMgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4MiAgcG93ZXIgNDhFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODMgIHBvd2VyIDQ4RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTg0ICBwb3dlciA0OEUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1ODUgIHBvd2VyIDAuNDkgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTg2ICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTg3ICBwb3dlciA0OS4wRS0xICAwLjUgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU4OCAgcG93ZXIgNDkuMDBFLTIgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTg5ICBwb3dlciA0OUUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTkwICBwb3dlciA0OUUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU5MSAgcG93ZXIgNDlFKzIgIDAuNSAtPiA3MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU5MiAgcG93ZXIgNDlFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTkzICBwb3dlciAwLjUwICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTQgIHBvd2VyIDAuMDUwICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI1OTUgIHBvd2VyIDUwLjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTk2ICBwb3dlciA1MC4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTk3ICBwb3dlciA1MEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNTk4ICBwb3dlciA1MEUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjU5OSAgcG93ZXIgNTBFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDAgIHBvd2VyIDUwRSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwMSAgcG93ZXIgMC41MSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjAyICBwb3dlciAwLjA1MSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjAzICBwb3dlciA1MS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwNCAgcG93ZXIgNTEuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwNSAgcG93ZXIgNTFFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYwNiAgcG93ZXIgNTFFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDcgIHBvd2VyIDUxRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjA4ICBwb3dlciA1MUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MDkgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxMCAgcG93ZXIgMC4wNTIgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxMSAgcG93ZXIgNTIuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTIgIHBvd2VyIDUyLjAwRS0yICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTMgIHBvd2VyIDUyRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTQgIHBvd2VyIDUyRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjE1ICBwb3dlciA1MkUrMiAgMC41IC0+IDcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYxNiAgcG93ZXIgNTJFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjE3ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTggIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MTkgIHBvd2VyIDUzLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjIwICBwb3dlciA1My4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjIxICBwb3dlciA1M0UtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjIyICBwb3dlciA1M0UrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYyMyAgcG93ZXIgNTNFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MjQgIHBvd2VyIDUzRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYyNSAgcG93ZXIgMC41NCAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjI2ICBwb3dlciAwLjA1NCAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjI3ICBwb3dlciA1NC4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYyOCAgcG93ZXIgNTQuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYyOSAgcG93ZXIgNTRFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzMCAgcG93ZXIgNTRFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzEgIHBvd2VyIDU0RSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjMyICBwb3dlciA1NEUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzMgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzNCAgcG93ZXIgMC4wNTUgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjYzNSAgcG93ZXIgNTUuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzYgIHBvd2VyIDU1LjAwRS0yICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzcgIHBvd2VyIDU1RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2MzggIHBvd2VyIDU1RSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjM5ICBwb3dlciA1NUUrMiAgMC41IC0+IDc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0MCAgcG93ZXIgNTVFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDMgIHBvd2VyIDU2LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQ0ICBwb3dlciA1Ni4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQ1ICBwb3dlciA1NkUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjQ2ICBwb3dlciA1NkUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0NyAgcG93ZXIgNTZFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NDggIHBvd2VyIDU2RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY0OSAgcG93ZXIgMC41NyAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjUwICBwb3dlciAwLjA1NyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjUxICBwb3dlciA1Ny4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1MiAgcG93ZXIgNTcuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1MyAgcG93ZXIgNTdFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1NCAgcG93ZXIgNTdFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NTUgIHBvd2VyIDU3RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjU2ICBwb3dlciA1N0UrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NTcgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1OCAgcG93ZXIgMC4wNTggIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY1OSAgcG93ZXIgNTguMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjAgIHBvd2VyIDU4LjAwRS0yICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjEgIHBvd2VyIDU4RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjIgIHBvd2VyIDU4RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjYzICBwb3dlciA1OEUrMiAgMC41IC0+IDc2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY2NCAgcG93ZXIgNThFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjY1ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjYgIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NjcgIHBvd2VyIDU5LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjY4ICBwb3dlciA1OS4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjY5ICBwb3dlciA1OUUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjcwICBwb3dlciA1OUUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3MSAgcG93ZXIgNTlFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NzIgIHBvd2VyIDU5RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3MyAgcG93ZXIgMC42MCAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjc0ICBwb3dlciAwLjA2MCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjc1ICBwb3dlciA2MC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3NiAgcG93ZXIgNjAuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3NyAgcG93ZXIgNjBFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY3OCAgcG93ZXIgNjBFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2NzkgIHBvd2VyIDYwRSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjgwICBwb3dlciA2MEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODEgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4MiAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4MyAgcG93ZXIgNjEuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODQgIHBvd2VyIDYxLjAwRS0yICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODUgIHBvd2VyIDYxRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2ODYgIHBvd2VyIDYxRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjg3ICBwb3dlciA2MUUrMiAgMC41IC0+IDc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY4OCAgcG93ZXIgNjFFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjg5ICBwb3dlciAwLjYyICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTAgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTEgIHBvd2VyIDYyLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjkyICBwb3dlciA2Mi4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjkzICBwb3dlciA2MkUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjk0ICBwb3dlciA2MkUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY5NSAgcG93ZXIgNjJFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI2OTYgIHBvd2VyIDYyRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjY5NyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjk4ICBwb3dlciAwLjA2MyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNjk5ICBwb3dlciA2My4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwMCAgcG93ZXIgNjMuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwMSAgcG93ZXIgNjNFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwMiAgcG93ZXIgNjNFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDMgIHBvd2VyIDYzRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzA0ICBwb3dlciA2M0UrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MDUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzA2ICBwb3dlciAwLjA2NCAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzA3ICBwb3dlciA2NC4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcwOCAgcG93ZXIgNjQuMDBFLTIgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzA5ICBwb3dlciA2NEUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzEwICBwb3dlciA2NEUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcxMSAgcG93ZXIgNjRFKzIgIDAuNSAtPiA4MCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcxMiAgcG93ZXIgNjRFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzEzICBwb3dlciAwLjY1ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTQgIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MTUgIHBvd2VyIDY1LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzE2ICBwb3dlciA2NS4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzE3ICBwb3dlciA2NUUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzE4ICBwb3dlciA2NUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcxOSAgcG93ZXIgNjVFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjAgIHBvd2VyIDY1RSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyMSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzIyICBwb3dlciAwLjA2NiAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzIzICBwb3dlciA2Ni4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyNCAgcG93ZXIgNjYuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyNSAgcG93ZXIgNjZFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjcyNiAgcG93ZXIgNjZFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjcgIHBvd2VyIDY2RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzI4ICBwb3dlciA2NkUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MjkgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczMCAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczMSAgcG93ZXIgNjcuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzIgIHBvd2VyIDY3LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzMgIHBvd2VyIDY3RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzQgIHBvd2VyIDY3RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzM1ICBwb3dlciA2N0UrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjczNiAgcG93ZXIgNjdFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzM3ICBwb3dlciAwLjY4ICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzggIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3MzkgIHBvd2VyIDY4LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQwICBwb3dlciA2OC4wMEUtMiAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQxICBwb3dlciA2OEUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQyICBwb3dlciA2OEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc0MyAgcG93ZXIgNjhFKzIgIDAuNSAtPiA4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NDQgIHBvd2VyIDY4RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc0NSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQ2ICBwb3dlciAwLjA2OSAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzQ3ICBwb3dlciA2OS4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc0OCAgcG93ZXIgNjkuMDBFLTIgIDAuNSAtPiAwLjgzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc0OSAgcG93ZXIgNjlFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1MCAgcG93ZXIgNjlFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTEgIHBvd2VyIDY5RSsyICAwLjUgLT4gODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzUyICBwb3dlciA2OUUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTMgIHBvd2VyIDAuNzAgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1NCAgcG93ZXIgMC4wNzAgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc1NSAgcG93ZXIgNzAuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTYgIHBvd2VyIDcwLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTcgIHBvd2VyIDcwRS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NTggIHBvd2VyIDcwRSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzU5ICBwb3dlciA3MEUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2MCAgcG93ZXIgNzBFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzYxICBwb3dlciAwLjcxICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjIgIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjMgIHBvd2VyIDcxLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzY0ICBwb3dlciA3MS4wMEUtMiAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzY1ICBwb3dlciA3MUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzY2ICBwb3dlciA3MUUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2NyAgcG93ZXIgNzFFKzIgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NjggIHBvd2VyIDcxRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc2OSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzcwICBwb3dlciAwLjA3MiAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzcxICBwb3dlciA3Mi4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3MiAgcG93ZXIgNzIuMDBFLTIgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3MyAgcG93ZXIgNzJFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3NCAgcG93ZXIgNzJFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NzUgIHBvd2VyIDcyRSsyICAwLjUgLT4gODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzc2ICBwb3dlciA3MkUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3NzcgIHBvd2VyIDAuNzMgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3OCAgcG93ZXIgMC4wNzMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc3OSAgcG93ZXIgNzMuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODAgIHBvd2VyIDczLjAwRS0yICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODEgIHBvd2VyIDczRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODIgIHBvd2VyIDczRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzgzICBwb3dlciA3M0UrMiAgMC41IC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc4NCAgcG93ZXIgNzNFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzg1ICBwb3dlciAwLjc0ICAwLjUgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODYgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3ODcgIHBvd2VyIDc0LjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzg4ICBwb3dlciA3NC4wMEUtMiAgMC41IC0+IDAuODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzg5ICBwb3dlciA3NEUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzkwICBwb3dlciA3NEUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5MSAgcG93ZXIgNzRFKzIgIDAuNSAtPiA4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3OTIgIHBvd2VyIDc0RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5MyAgcG93ZXIgMC43NSAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzk0ICBwb3dlciAwLjA3NSAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyNzk1ICBwb3dlciA3NS4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5NiAgcG93ZXIgNzUuMDBFLTIgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5NyAgcG93ZXIgNzVFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjc5OCAgcG93ZXIgNzVFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI3OTkgIHBvd2VyIDc1RSsyICAwLjUgLT4gODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODAwICBwb3dlciA3NUUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDEgIHBvd2VyIDAuNzYgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwMiAgcG93ZXIgMC4wNzYgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwMyAgcG93ZXIgNzYuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDQgIHBvd2VyIDc2LjAwRS0yICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDUgIHBvd2VyIDc2RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MDYgIHBvd2VyIDc2RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODA3ICBwb3dlciA3NkUrMiAgMC41IC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgwOCAgcG93ZXIgNzZFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODA5ICBwb3dlciAwLjc3ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTEgIHBvd2VyIDc3LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODEyICBwb3dlciA3Ny4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODEzICBwb3dlciA3N0UtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODE0ICBwb3dlciA3N0UrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgxNSAgcG93ZXIgNzdFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MTYgIHBvd2VyIDc3RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgxNyAgcG93ZXIgMC43OCAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODE4ICBwb3dlciAwLjA3OCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODE5ICBwb3dlciA3OC4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyMCAgcG93ZXIgNzguMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyMSAgcG93ZXIgNzhFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyMiAgcG93ZXIgNzhFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MjMgIHBvd2VyIDc4RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODI0ICBwb3dlciA3OEUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MjUgIHBvd2VyIDAuNzkgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyNiAgcG93ZXIgMC4wNzkgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgyNyAgcG93ZXIgNzkuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MjggIHBvd2VyIDc5LjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MjkgIHBvd2VyIDc5RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzAgIHBvd2VyIDc5RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODMxICBwb3dlciA3OUUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgzMiAgcG93ZXIgNzlFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODMzICBwb3dlciAwLjgwICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzQgIHBvd2VyIDAuMDgwICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4MzUgIHBvd2VyIDgwLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODM2ICBwb3dlciA4MC4wMEUtMiAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODM3ICBwb3dlciA4MEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODM4ICBwb3dlciA4MEUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjgzOSAgcG93ZXIgODBFKzIgIDAuNSAtPiA4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDAgIHBvd2VyIDgwRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg0MSAgcG93ZXIgMC44MSAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDIgIHBvd2VyIDAuMDgxICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDMgIHBvd2VyIDgxLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODQ0ICBwb3dlciA4MS4wMEUtMiAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDUgIHBvd2VyIDgxRS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDYgIHBvd2VyIDgxRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODQ3ICBwb3dlciA4MUUrMiAgMC41IC0+IDkwIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODQ4ICBwb3dlciA4MUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NDkgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1MCAgcG93ZXIgMC4wODIgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1MSAgcG93ZXIgODIuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTIgIHBvd2VyIDgyLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTMgIHBvd2VyIDgyRS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTQgIHBvd2VyIDgyRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODU1ICBwb3dlciA4MkUrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg1NiAgcG93ZXIgODJFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODU3ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTggIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NTkgIHBvd2VyIDgzLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODYwICBwb3dlciA4My4wMEUtMiAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODYxICBwb3dlciA4M0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODYyICBwb3dlciA4M0UrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg2MyAgcG93ZXIgODNFKzIgIDAuNSAtPiA5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NjQgIHBvd2VyIDgzRSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg2NSAgcG93ZXIgMC44NCAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODY2ICBwb3dlciAwLjA4NCAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODY3ICBwb3dlciA4NC4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg2OCAgcG93ZXIgODQuMDBFLTIgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg2OSAgcG93ZXIgODRFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3MCAgcG93ZXIgODRFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzEgIHBvd2VyIDg0RSsyICAwLjUgLT4gOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODcyICBwb3dlciA4NEUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3NCAgcG93ZXIgMC4wODUgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg3NSAgcG93ZXIgODUuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzYgIHBvd2VyIDg1LjAwRS0yICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzcgIHBvd2VyIDg1RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4NzggIHBvd2VyIDg1RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODc5ICBwb3dlciA4NUUrMiAgMC41IC0+IDkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4MCAgcG93ZXIgODVFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODgxICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODIgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODMgIHBvd2VyIDg2LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODg0ICBwb3dlciA4Ni4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODg1ICBwb3dlciA4NkUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODg2ICBwb3dlciA4NkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4NyAgcG93ZXIgODZFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4ODggIHBvd2VyIDg2RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg4OSAgcG93ZXIgMC44NyAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODkwICBwb3dlciAwLjA4NyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODkxICBwb3dlciA4Ny4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5MiAgcG93ZXIgODcuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5MyAgcG93ZXIgODdFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5NCAgcG93ZXIgODdFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4OTUgIHBvd2VyIDg3RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyODk2ICBwb3dlciA4N0UrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI4OTcgIHBvd2VyIDAuODggIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5OCAgcG93ZXIgMC4wODggIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjg5OSAgcG93ZXIgODguMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDAgIHBvd2VyIDg4LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDEgIHBvd2VyIDg4RS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDIgIHBvd2VyIDg4RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTAzICBwb3dlciA4OEUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkwNCAgcG93ZXIgODhFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTA1ICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDYgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MDcgIHBvd2VyIDg5LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTA4ICBwb3dlciA4OS4wMEUtMiAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTA5ICBwb3dlciA4OUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTEwICBwb3dlciA4OUUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxMSAgcG93ZXIgODlFKzIgIDAuNSAtPiA5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTIgIHBvd2VyIDg5RSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxMyAgcG93ZXIgMC45MCAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTE0ICBwb3dlciAwLjA5MCAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTUgIHBvd2VyIDkwLjBFLTEgIDAuNSAtPiAzLjAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTYgIHBvd2VyIDkwLjAwRS0yICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MTcgIHBvd2VyIDkwRS0zICAwLjUgLT4gMC4zMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxOCAgcG93ZXIgOTBFKzEgIDAuNSAtPiAzMCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkxOSAgcG93ZXIgOTBFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjAgIHBvd2VyIDkwRSszICAwLjUgLT4gMy4wRSsyIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTIxICBwb3dlciAwLjkxICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjIgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjMgIHBvd2VyIDkxLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTI0ICBwb3dlciA5MS4wMEUtMiAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTI1ICBwb3dlciA5MUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTI2ICBwb3dlciA5MUUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyNyAgcG93ZXIgOTFFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MjggIHBvd2VyIDkxRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkyOSAgcG93ZXIgMC45MiAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTMwICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTMxICBwb3dlciA5Mi4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzMiAgcG93ZXIgOTIuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzMyAgcG93ZXIgOTJFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzNCAgcG93ZXIgOTJFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MzUgIHBvd2VyIDkyRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTM2ICBwb3dlciA5MkUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5MzcgIHBvd2VyIDAuOTMgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzOCAgcG93ZXIgMC4wOTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MjkzOSAgcG93ZXIgOTMuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDAgIHBvd2VyIDkzLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDEgIHBvd2VyIDkzRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDIgIHBvd2VyIDkzRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTQzICBwb3dlciA5M0UrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk0NCAgcG93ZXIgOTNFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTQ1ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDYgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NDcgIHBvd2VyIDk0LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTQ4ICBwb3dlciA5NC4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTQ5ICBwb3dlciA5NEUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTUwICBwb3dlciA5NEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1MSAgcG93ZXIgOTRFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NTIgIHBvd2VyIDk0RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1MyAgcG93ZXIgMC45NSAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTU0ICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTU1ICBwb3dlciA5NS4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1NiAgcG93ZXIgOTUuMDBFLTIgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1NyAgcG93ZXIgOTVFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk1OCAgcG93ZXIgOTVFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NTkgIHBvd2VyIDk1RSsyICAwLjUgLT4gOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTYwICBwb3dlciA5NUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjEgIHBvd2VyIDAuOTYgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2MiAgcG93ZXIgMC4wOTYgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2MyAgcG93ZXIgOTYuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjQgIHBvd2VyIDk2LjAwRS0yICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjUgIHBvd2VyIDk2RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NjYgIHBvd2VyIDk2RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTY3ICBwb3dlciA5NkUrMiAgMC41IC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk2OCAgcG93ZXIgOTZFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTY5ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzAgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzEgIHBvd2VyIDk3LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTcyICBwb3dlciA5Ny4wMEUtMiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTczICBwb3dlciA5N0UtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTc0ICBwb3dlciA5N0UrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk3NSAgcG93ZXIgOTdFKzIgIDAuNSAtPiA5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5NzYgIHBvd2VyIDk3RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk3NyAgcG93ZXIgMC45OCAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTc5ICBwb3dlciA5OC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4MCAgcG93ZXIgOTguMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4MSAgcG93ZXIgOThFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4MiAgcG93ZXIgOThFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5ODMgIHBvd2VyIDk4RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTg0ICBwb3dlciA5OEUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5ODUgIHBvd2VyIDAuOTkgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4NiAgcG93ZXIgMC4wOTkgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk4NyAgcG93ZXIgOTkuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5ODggIHBvd2VyIDk5LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5ODkgIHBvd2VyIDk5RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDI5OTAgIHBvd2VyIDk5RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gyOTkxICBwb3dlciA5OUUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Mjk5MiAgcG93ZXIgOTlFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIFByZWNpc2lvbiAzIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIGYgYW5kIGYvMTBdDQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5leHBvbmVudDogLTk5OQ0KLXByZWNpc2lvbjogICAzDQotcHdzeDMwMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwMyAgcG93ZXIgMC4yICAwLjUgLT4gMC40NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDA0ICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDA1ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMDYgIHBvd2VyIDAuMDMgIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMDcgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwOCAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAwOSAgcG93ZXIgMC41ICAwLjUgLT4gMC43MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDEwICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDExICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTIgIHBvd2VyIDAuMDYgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTMgIHBvd2VyIDAuNyAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxNCAgcG93ZXIgMC4wNyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAxNSAgcG93ZXIgMC44ICAwLjUgLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDE2ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDE3ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTggIHBvd2VyIDAuMDkgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMTkgIHBvd2VyIDAuMTEgIDAuNSAtPiAwLjMzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjAgIHBvd2VyIDAuMDExICAwLjUgLT4gMC4xMDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDIxICBwb3dlciAwLjEyICAwLjUgLT4gMC4zNDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDIyICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyMyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyNCAgcG93ZXIgMC4wMTMgIDAuNSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjUgIHBvd2VyIDAuMTQgIDAuNSAtPiAwLjM3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMjYgIHBvd2VyIDAuMDE0ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDI3ICBwb3dlciAwLjE1ICAwLjUgLT4gMC4zODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDI4ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAyOSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzMCAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzEgIHBvd2VyIDAuMTcgIDAuNSAtPiAwLjQxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzIgIHBvd2VyIDAuMDE3ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDMzICBwb3dlciAwLjE4ICAwLjUgLT4gMC40MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDM0ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzNSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDM2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzAzNiAgcG93ZXIgMC4wMTkgIDAuNSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzcgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwMzggIHBvd2VyIDAuMDIxICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDM5ICBwb3dlciAwLjIyICAwLjUgLT4gMC40NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0MSAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0MiAgcG93ZXIgMC4wMjMgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDMgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDQgIHBvd2VyIDAuMDI0ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQ1ICBwb3dlciAwLjI1ICAwLjUgLT4gMC41MDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDQ2ICBwb3dlciAwLjAyNSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0NyAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA0OCAgcG93ZXIgMC4wMjYgIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTAgIHBvd2VyIDAuMDI3ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDUxICBwb3dlciAwLjI4ICAwLjUgLT4gMC41MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDUyICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1MyAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTM5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1NCAgcG93ZXIgMC4wMjkgIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTUgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNTYgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDU3ICBwb3dlciAwLjMyICAwLjUgLT4gMC41NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDU4ICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA1OSAgcG93ZXIgMC4zMyAgMC41IC0+IDAuNTc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2MCAgcG93ZXIgMC4wMzMgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjEgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjIgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDYzICBwb3dlciAwLjM1ICAwLjUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDY0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2NSAgcG93ZXIgMC4zNiAgMC41IC0+IDAuNjAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA2NiAgcG93ZXIgMC4wMzYgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjcgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNjggIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDY5ICBwb3dlciAwLjM4ICAwLjUgLT4gMC42MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDcwICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3MSAgcG93ZXIgMC4zOSAgMC41IC0+IDAuNjI0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3MiAgcG93ZXIgMC4wMzkgIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzMgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzQgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDc1ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDc2ICBwb3dlciAwLjA0MiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3NyAgcG93ZXIgMC40MyAgMC41IC0+IDAuNjU2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA3OCAgcG93ZXIgMC4wNDMgIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwNzkgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODAgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDgxICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDgyICBwb3dlciAwLjA0NSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4MyAgcG93ZXIgMC40NiAgMC41IC0+IDAuNjc4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4NCAgcG93ZXIgMC4wNDYgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODUgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwODYgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDg3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDg4ICBwb3dlciAwLjA0OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA4OSAgcG93ZXIgMC40OSAgMC41IC0+IDAuNzAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5MCAgcG93ZXIgMC4wNDkgIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTEgIHBvd2VyIDAuNTEgIDAuNSAtPiAwLjcxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDkzICBwb3dlciAwLjUyICAwLjUgLT4gMC43MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDk0ICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5NSAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzI4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzA5NiAgcG93ZXIgMC4wNTMgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTcgIHBvd2VyIDAuNTQgIDAuNSAtPiAwLjczNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMwOTggIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMDk5ICBwb3dlciAwLjU1ICAwLjUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTAwICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwMSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzQ4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwMiAgcG93ZXIgMC4wNTYgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDMgIHBvd2VyIDAuNTcgIDAuNSAtPiAwLjc1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDQgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTA1ICBwb3dlciAwLjU4ICAwLjUgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTA2ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwNyAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEwOCAgcG93ZXIgMC4wNTkgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMDkgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTAgIHBvd2VyIDAuMDYxICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTExICBwb3dlciAwLjYyICAwLjUgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTEyICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExMyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExNCAgcG93ZXIgMC4wNjMgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMTYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTE3ICBwb3dlciAwLjY1ICAwLjUgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTE4ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzExOSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyMCAgcG93ZXIgMC4wNjYgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjEgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjIgIHBvd2VyIDAuMDY3ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTIzICBwb3dlciAwLjY4ICAwLjUgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTI0ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyNSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEyNiAgcG93ZXIgMC4wNjkgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjcgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMjggIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTI5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTMwICBwb3dlciAwLjA3MiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzMSAgcG93ZXIgMC43MyAgMC41IC0+IDAuODU0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzMiAgcG93ZXIgMC4wNzMgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzMgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzQgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTM1ICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTM2ICBwb3dlciAwLjA3NSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzNyAgcG93ZXIgMC43NiAgMC41IC0+IDAuODcyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzEzOCAgcG93ZXIgMC4wNzYgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxMzkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQxICBwb3dlciAwLjc4ICAwLjUgLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQyICBwb3dlciAwLjA3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0MyAgcG93ZXIgMC43OSAgMC41IC0+IDAuODg5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0NCAgcG93ZXIgMC4wNzkgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDUgIHBvd2VyIDAuODEgIDAuNSAtPiAwLjkwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNDYgIHBvd2VyIDAuMDgxICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQ3ICBwb3dlciAwLjgyICAwLjUgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTQ4ICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE0OSAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTExICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1MCAgcG93ZXIgMC4wODMgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTEgIHBvd2VyIDAuODQgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTIgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTUzICBwb3dlciAwLjg1ICAwLjUgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTU0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1NSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTI3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE1NiAgcG93ZXIgMC4wODYgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTcgIHBvd2VyIDAuODcgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNTggIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTU5ICBwb3dlciAwLjg4ICAwLjUgLT4gMC45MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTYwICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2MSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2MiAgcG93ZXIgMC4wODkgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjMgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjQgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTY1ICBwb3dlciAwLjkyICAwLjUgLT4gMC45NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTY2ICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2NyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTY0ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE2OCAgcG93ZXIgMC4wOTMgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNjkgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzAgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTcxICBwb3dlciAwLjk1ICAwLjUgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTcyICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3MyAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3NCAgcG93ZXIgMC4wOTYgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzUgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxNzYgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTc3ICBwb3dlciAwLjk4ICAwLjUgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE3OSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4MzE4MCAgcG93ZXIgMC4wOTkgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODEgIHBvd2VyIDAuMTAxICAwLjUgLT4gMC4zMTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTgyICBwb3dlciAwLjAxMDEgIDAuNSAtPiAwLjEwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODMgIHBvd2VyIDAuMTAyICAwLjUgLT4gMC4zMTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTg0ICBwb3dlciAwLjAxMDIgIDAuNSAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODUgIHBvd2VyIDAuMTAzICAwLjUgLT4gMC4zMjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTg2ICBwb3dlciAwLjAxMDMgIDAuNSAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODcgIHBvd2VyIDAuMTA0ICAwLjUgLT4gMC4zMjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTg4ICBwb3dlciAwLjAxMDQgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxODkgIHBvd2VyIDAuMTA1ICAwLjUgLT4gMC4zMjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTkwICBwb3dlciAwLjAxMDUgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTEgIHBvd2VyIDAuMTA2ICAwLjUgLT4gMC4zMjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTkyICBwb3dlciAwLjAxMDYgIDAuNSAtPiAwLjEwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTMgIHBvd2VyIDAuMTA3ICAwLjUgLT4gMC4zMjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTk0ICBwb3dlciAwLjAxMDcgIDAuNSAtPiAwLjEwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTUgIHBvd2VyIDAuMTA4ICAwLjUgLT4gMC4zMjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTk2ICBwb3dlciAwLjAxMDggIDAuNSAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTcgIHBvd2VyIDAuMTA5ICAwLjUgLT4gMC4zMzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMTk4ICBwb3dlciAwLjAxMDkgIDAuNSAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMxOTkgIHBvd2VyIDAuMTExICAwLjUgLT4gMC4zMzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjAwICBwb3dlciAwLjAxMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDEgIHBvd2VyIDAuMTEyICAwLjUgLT4gMC4zMzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjAyICBwb3dlciAwLjAxMTIgIDAuNSAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDMgIHBvd2VyIDAuMTEzICAwLjUgLT4gMC4zMzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjA0ICBwb3dlciAwLjAxMTMgIDAuNSAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDUgIHBvd2VyIDAuMTE0ICAwLjUgLT4gMC4zMzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjA2ICBwb3dlciAwLjAxMTQgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDcgIHBvd2VyIDAuMTE1ICAwLjUgLT4gMC4zMzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjA4ICBwb3dlciAwLjAxMTUgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMDkgIHBvd2VyIDAuMTE2ICAwLjUgLT4gMC4zNDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjEwICBwb3dlciAwLjAxMTYgIDAuNSAtPiAwLjEwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTEgIHBvd2VyIDAuMTE3ICAwLjUgLT4gMC4zNDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjEyICBwb3dlciAwLjAxMTcgIDAuNSAtPiAwLjEwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTMgIHBvd2VyIDAuMTE4ICAwLjUgLT4gMC4zNDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjE0ICBwb3dlciAwLjAxMTggIDAuNSAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTUgIHBvd2VyIDAuMTE5ICAwLjUgLT4gMC4zNDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjE2ICBwb3dlciAwLjAxMTkgIDAuNSAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTcgIHBvd2VyIDAuMTIxICAwLjUgLT4gMC4zNDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjE4ICBwb3dlciAwLjAxMjEgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMTkgIHBvd2VyIDAuMTIyICAwLjUgLT4gMC4zNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjIwICBwb3dlciAwLjAxMjIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjEgIHBvd2VyIDAuMTIzICAwLjUgLT4gMC4zNTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjIyICBwb3dlciAwLjAxMjMgIDAuNSAtPiAwLjExMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjMgIHBvd2VyIDAuMTI0ICAwLjUgLT4gMC4zNTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjI0ICBwb3dlciAwLjAxMjQgIDAuNSAtPiAwLjExMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjUgIHBvd2VyIDAuMTI1ICAwLjUgLT4gMC4zNTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjI2ICBwb3dlciAwLjAxMjUgIDAuNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjcgIHBvd2VyIDAuMTI2ICAwLjUgLT4gMC4zNTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjI4ICBwb3dlciAwLjAxMjYgIDAuNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMjkgIHBvd2VyIDAuMTI3ICAwLjUgLT4gMC4zNTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjMwICBwb3dlciAwLjAxMjcgIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzEgIHBvd2VyIDAuMTI4ICAwLjUgLT4gMC4zNTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjMyICBwb3dlciAwLjAxMjggIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzMgIHBvd2VyIDAuMTI5ICAwLjUgLT4gMC4zNTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjM0ICBwb3dlciAwLjAxMjkgIDAuNSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzUgIHBvd2VyIDAuMTMxICAwLjUgLT4gMC4zNjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjM2ICBwb3dlciAwLjAxMzEgIDAuNSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzcgIHBvd2VyIDAuMTMyICAwLjUgLT4gMC4zNjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjM4ICBwb3dlciAwLjAxMzIgIDAuNSAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyMzkgIHBvd2VyIDAuMTMzICAwLjUgLT4gMC4zNjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjQwICBwb3dlciAwLjAxMzMgIDAuNSAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDEgIHBvd2VyIDAuMTM0ICAwLjUgLT4gMC4zNjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjQyICBwb3dlciAwLjAxMzQgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDMgIHBvd2VyIDAuMTM1ICAwLjUgLT4gMC4zNjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjQ0ICBwb3dlciAwLjAxMzUgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDUgIHBvd2VyIDAuMTM2ICAwLjUgLT4gMC4zNjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjQ2ICBwb3dlciAwLjAxMzYgIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDcgIHBvd2VyIDAuMTM3ICAwLjUgLT4gMC4zNzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjQ4ICBwb3dlciAwLjAxMzcgIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNDkgIHBvd2VyIDAuMTM4ICAwLjUgLT4gMC4zNzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjUwICBwb3dlciAwLjAxMzggIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTEgIHBvd2VyIDAuMTM5ICAwLjUgLT4gMC4zNzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjUyICBwb3dlciAwLjAxMzkgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTMgIHBvd2VyIDAuMTQxICAwLjUgLT4gMC4zNzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjU0ICBwb3dlciAwLjAxNDEgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTUgIHBvd2VyIDAuMTQyICAwLjUgLT4gMC4zNzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjU2ICBwb3dlciAwLjAxNDIgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTcgIHBvd2VyIDAuMTQzICAwLjUgLT4gMC4zNzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjU4ICBwb3dlciAwLjAxNDMgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNTkgIHBvd2VyIDAuMTQ0ICAwLjUgLT4gMC4zNzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjYwICBwb3dlciAwLjAxNDQgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjEgIHBvd2VyIDAuMTQ1ICAwLjUgLT4gMC4zODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjYyICBwb3dlciAwLjAxNDUgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjMgIHBvd2VyIDAuMTQ2ICAwLjUgLT4gMC4zODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjY0ICBwb3dlciAwLjAxNDYgIDAuNSAtPiAwLjEyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjUgIHBvd2VyIDAuMTQ3ICAwLjUgLT4gMC4zODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjY2ICBwb3dlciAwLjAxNDcgIDAuNSAtPiAwLjEyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjcgIHBvd2VyIDAuMTQ4ICAwLjUgLT4gMC4zODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjY4ICBwb3dlciAwLjAxNDggIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNjkgIHBvd2VyIDAuMTQ5ICAwLjUgLT4gMC4zODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjcwICBwb3dlciAwLjAxNDkgIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzEgIHBvd2VyIDAuMTUxICAwLjUgLT4gMC4zODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjcyICBwb3dlciAwLjAxNTEgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzMgIHBvd2VyIDAuMTUyICAwLjUgLT4gMC4zOTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjc0ICBwb3dlciAwLjAxNTIgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzUgIHBvd2VyIDAuMTUzICAwLjUgLT4gMC4zOTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjc2ICBwb3dlciAwLjAxNTMgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzcgIHBvd2VyIDAuMTU0ICAwLjUgLT4gMC4zOTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjc4ICBwb3dlciAwLjAxNTQgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyNzkgIHBvd2VyIDAuMTU1ICAwLjUgLT4gMC4zOTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjgwICBwb3dlciAwLjAxNTUgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODEgIHBvd2VyIDAuMTU2ICAwLjUgLT4gMC4zOTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjgyICBwb3dlciAwLjAxNTYgIDAuNSAtPiAwLjEyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODMgIHBvd2VyIDAuMTU3ICAwLjUgLT4gMC4zOTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjg0ICBwb3dlciAwLjAxNTcgIDAuNSAtPiAwLjEyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODUgIHBvd2VyIDAuMTU4ICAwLjUgLT4gMC4zOTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjg2ICBwb3dlciAwLjAxNTggIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODcgIHBvd2VyIDAuMTU5ICAwLjUgLT4gMC4zOTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjg4ICBwb3dlciAwLjAxNTkgIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyODkgIHBvd2VyIDAuMTYxICAwLjUgLT4gMC40MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjkwICBwb3dlciAwLjAxNjEgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTEgIHBvd2VyIDAuMTYyICAwLjUgLT4gMC40MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjkyICBwb3dlciAwLjAxNjIgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTMgIHBvd2VyIDAuMTYzICAwLjUgLT4gMC40MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjk0ICBwb3dlciAwLjAxNjMgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTUgIHBvd2VyIDAuMTY0ICAwLjUgLT4gMC40MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjk2ICBwb3dlciAwLjAxNjQgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTcgIHBvd2VyIDAuMTY1ICAwLjUgLT4gMC40MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMjk4ICBwb3dlciAwLjAxNjUgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMyOTkgIHBvd2VyIDAuMTY2ICAwLjUgLT4gMC40MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzAwICBwb3dlciAwLjAxNjYgIDAuNSAtPiAwLjEyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDEgIHBvd2VyIDAuMTY3ICAwLjUgLT4gMC40MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzAyICBwb3dlciAwLjAxNjcgIDAuNSAtPiAwLjEyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDMgIHBvd2VyIDAuMTY4ICAwLjUgLT4gMC40MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzA0ICBwb3dlciAwLjAxNjggIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDUgIHBvd2VyIDAuMTY5ICAwLjUgLT4gMC40MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzA2ICBwb3dlciAwLjAxNjkgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDcgIHBvd2VyIDAuMTcxICAwLjUgLT4gMC40MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzA4ICBwb3dlciAwLjAxNzEgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMDkgIHBvd2VyIDAuMTcyICAwLjUgLT4gMC40MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzEwICBwb3dlciAwLjAxNzIgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTEgIHBvd2VyIDAuMTczICAwLjUgLT4gMC40MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzEyICBwb3dlciAwLjAxNzMgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTMgIHBvd2VyIDAuMTc0ICAwLjUgLT4gMC40MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzE0ICBwb3dlciAwLjAxNzQgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTUgIHBvd2VyIDAuMTc1ICAwLjUgLT4gMC40MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzE2ICBwb3dlciAwLjAxNzUgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTcgIHBvd2VyIDAuMTc2ICAwLjUgLT4gMC40MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzE4ICBwb3dlciAwLjAxNzYgIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMTkgIHBvd2VyIDAuMTc3ICAwLjUgLT4gMC40MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzIwICBwb3dlciAwLjAxNzcgIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjEgIHBvd2VyIDAuMTc4ICAwLjUgLT4gMC40MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzIyICBwb3dlciAwLjAxNzggIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjMgIHBvd2VyIDAuMTc5ICAwLjUgLT4gMC40MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzI0ICBwb3dlciAwLjAxNzkgIDAuNSAtPiAwLjEzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjUgIHBvd2VyIDAuMTgxICAwLjUgLT4gMC40MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzI2ICBwb3dlciAwLjAxODEgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjcgIHBvd2VyIDAuMTgyICAwLjUgLT4gMC40MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzI4ICBwb3dlciAwLjAxODIgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMjkgIHBvd2VyIDAuMTgzICAwLjUgLT4gMC40MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzMwICBwb3dlciAwLjAxODMgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzEgIHBvd2VyIDAuMTg0ICAwLjUgLT4gMC40MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzMyICBwb3dlciAwLjAxODQgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzMgIHBvd2VyIDAuMTg1ICAwLjUgLT4gMC40MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzM0ICBwb3dlciAwLjAxODUgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzUgIHBvd2VyIDAuMTg2ICAwLjUgLT4gMC40MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzM2ICBwb3dlciAwLjAxODYgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzcgIHBvd2VyIDAuMTg3ICAwLjUgLT4gMC40MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzM4ICBwb3dlciAwLjAxODcgIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzMzkgIHBvd2VyIDAuMTg4ICAwLjUgLT4gMC40MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzQwICBwb3dlciAwLjAxODggIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDEgIHBvd2VyIDAuMTg5ICAwLjUgLT4gMC40MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzQyICBwb3dlciAwLjAxODkgIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDMgIHBvd2VyIDAuMTkxICAwLjUgLT4gMC40MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzQ0ICBwb3dlciAwLjAxOTEgIDAuNSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDUgIHBvd2VyIDAuMTkyICAwLjUgLT4gMC40MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzQ2ICBwb3dlciAwLjAxOTIgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDcgIHBvd2VyIDAuMTkzICAwLjUgLT4gMC40MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzQ4ICBwb3dlciAwLjAxOTMgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNDkgIHBvd2VyIDAuMTk0ICAwLjUgLT4gMC40NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzUwICBwb3dlciAwLjAxOTQgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTEgIHBvd2VyIDAuMTk1ICAwLjUgLT4gMC40NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzUyICBwb3dlciAwLjAxOTUgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTMgIHBvd2VyIDAuMTk2ICAwLjUgLT4gMC40NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzU0ICBwb3dlciAwLjAxOTYgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTUgIHBvd2VyIDAuMTk3ICAwLjUgLT4gMC40NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzU2ICBwb3dlciAwLjAxOTcgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTcgIHBvd2VyIDAuMTk4ICAwLjUgLT4gMC40NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzU4ICBwb3dlciAwLjAxOTggIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNTkgIHBvd2VyIDAuMTk5ICAwLjUgLT4gMC40NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzYwICBwb3dlciAwLjAxOTkgIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjEgIHBvd2VyIDAuMjAxICAwLjUgLT4gMC40NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzYyICBwb3dlciAwLjAyMDEgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjMgIHBvd2VyIDAuMjAyICAwLjUgLT4gMC40NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzY0ICBwb3dlciAwLjAyMDIgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjUgIHBvd2VyIDAuMjAzICAwLjUgLT4gMC40NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzY2ICBwb3dlciAwLjAyMDMgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjcgIHBvd2VyIDAuMjA0ICAwLjUgLT4gMC40NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzY4ICBwb3dlciAwLjAyMDQgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNjkgIHBvd2VyIDAuMjA1ICAwLjUgLT4gMC40NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzcwICBwb3dlciAwLjAyMDUgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzEgIHBvd2VyIDAuMjA2ICAwLjUgLT4gMC40NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzcyICBwb3dlciAwLjAyMDYgIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzMgIHBvd2VyIDAuMjA3ICAwLjUgLT4gMC40NTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzc0ICBwb3dlciAwLjAyMDcgIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzUgIHBvd2VyIDAuMjA4ICAwLjUgLT4gMC40NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzc2ICBwb3dlciAwLjAyMDggIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzcgIHBvd2VyIDAuMjA5ICAwLjUgLT4gMC40NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzc4ICBwb3dlciAwLjAyMDkgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzNzkgIHBvd2VyIDAuMjExICAwLjUgLT4gMC40NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzgwICBwb3dlciAwLjAyMTEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODEgIHBvd2VyIDAuMjEyICAwLjUgLT4gMC40NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzgyICBwb3dlciAwLjAyMTIgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODMgIHBvd2VyIDAuMjEzICAwLjUgLT4gMC40NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzg0ICBwb3dlciAwLjAyMTMgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODUgIHBvd2VyIDAuMjE0ICAwLjUgLT4gMC40NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzg2ICBwb3dlciAwLjAyMTQgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODcgIHBvd2VyIDAuMjE1ICAwLjUgLT4gMC40NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzg4ICBwb3dlciAwLjAyMTUgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzODkgIHBvd2VyIDAuMjE2ICAwLjUgLT4gMC40NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzkwICBwb3dlciAwLjAyMTYgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTEgIHBvd2VyIDAuMjE3ICAwLjUgLT4gMC40NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzkyICBwb3dlciAwLjAyMTcgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTMgIHBvd2VyIDAuMjE4ICAwLjUgLT4gMC40NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzk0ICBwb3dlciAwLjAyMTggIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTUgIHBvd2VyIDAuMjE5ICAwLjUgLT4gMC40NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzk2ICBwb3dlciAwLjAyMTkgIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTcgIHBvd2VyIDAuMjIxICAwLjUgLT4gMC40NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzMzk4ICBwb3dlciAwLjAyMjEgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDMzOTkgIHBvd2VyIDAuMjIyICAwLjUgLT4gMC40NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDAwICBwb3dlciAwLjAyMjIgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDEgIHBvd2VyIDAuMjIzICAwLjUgLT4gMC40NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDAyICBwb3dlciAwLjAyMjMgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDMgIHBvd2VyIDAuMjI0ICAwLjUgLT4gMC40NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDA0ICBwb3dlciAwLjAyMjQgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDUgIHBvd2VyIDAuMjI1ICAwLjUgLT4gMC40NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDA2ICBwb3dlciAwLjAyMjUgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDcgIHBvd2VyIDAuMjI2ICAwLjUgLT4gMC40NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDA4ICBwb3dlciAwLjAyMjYgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MDkgIHBvd2VyIDAuMjI3ICAwLjUgLT4gMC40NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDEwICBwb3dlciAwLjAyMjcgIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTEgIHBvd2VyIDAuMjI4ICAwLjUgLT4gMC40NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDEyICBwb3dlciAwLjAyMjggIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTMgIHBvd2VyIDAuMjI5ICAwLjUgLT4gMC40NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDE0ICBwb3dlciAwLjAyMjkgIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTUgIHBvd2VyIDAuMjMxICAwLjUgLT4gMC40ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDE2ICBwb3dlciAwLjAyMzEgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTcgIHBvd2VyIDAuMjMyICAwLjUgLT4gMC40ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDE4ICBwb3dlciAwLjAyMzIgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MTkgIHBvd2VyIDAuMjMzICAwLjUgLT4gMC40ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDIwICBwb3dlciAwLjAyMzMgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjEgIHBvd2VyIDAuMjM0ICAwLjUgLT4gMC40ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDIyICBwb3dlciAwLjAyMzQgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjMgIHBvd2VyIDAuMjM1ICAwLjUgLT4gMC40ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDI0ICBwb3dlciAwLjAyMzUgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjUgIHBvd2VyIDAuMjM2ICAwLjUgLT4gMC40ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDI2ICBwb3dlciAwLjAyMzYgIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjcgIHBvd2VyIDAuMjM3ICAwLjUgLT4gMC40ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDI4ICBwb3dlciAwLjAyMzcgIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MjkgIHBvd2VyIDAuMjM4ICAwLjUgLT4gMC40ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDMwICBwb3dlciAwLjAyMzggIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzEgIHBvd2VyIDAuMjM5ICAwLjUgLT4gMC40ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDMyICBwb3dlciAwLjAyMzkgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzMgIHBvd2VyIDAuMjQxICAwLjUgLT4gMC40OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDM0ICBwb3dlciAwLjAyNDEgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzUgIHBvd2VyIDAuMjQyICAwLjUgLT4gMC40OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDM2ICBwb3dlciAwLjAyNDIgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzcgIHBvd2VyIDAuMjQzICAwLjUgLT4gMC40OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDM4ICBwb3dlciAwLjAyNDMgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0MzkgIHBvd2VyIDAuMjQ0ICAwLjUgLT4gMC40OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDQwICBwb3dlciAwLjAyNDQgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDEgIHBvd2VyIDAuMjQ1ICAwLjUgLT4gMC40OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDQyICBwb3dlciAwLjAyNDUgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDMgIHBvd2VyIDAuMjQ2ICAwLjUgLT4gMC40OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDQ0ICBwb3dlciAwLjAyNDYgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDUgIHBvd2VyIDAuMjQ3ICAwLjUgLT4gMC40OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDQ2ICBwb3dlciAwLjAyNDcgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDcgIHBvd2VyIDAuMjQ4ICAwLjUgLT4gMC40OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDQ4ICBwb3dlciAwLjAyNDggIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NDkgIHBvd2VyIDAuMjQ5ICAwLjUgLT4gMC40OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDUwICBwb3dlciAwLjAyNDkgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTEgIHBvd2VyIDAuMjUxICAwLjUgLT4gMC41MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDUyICBwb3dlciAwLjAyNTEgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTMgIHBvd2VyIDAuMjUyICAwLjUgLT4gMC41MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDU0ICBwb3dlciAwLjAyNTIgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTUgIHBvd2VyIDAuMjUzICAwLjUgLT4gMC41MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDU2ICBwb3dlciAwLjAyNTMgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTcgIHBvd2VyIDAuMjU0ICAwLjUgLT4gMC41MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDU4ICBwb3dlciAwLjAyNTQgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NTkgIHBvd2VyIDAuMjU1ICAwLjUgLT4gMC41MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDYwICBwb3dlciAwLjAyNTUgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjEgIHBvd2VyIDAuMjU2ICAwLjUgLT4gMC41MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDYyICBwb3dlciAwLjAyNTYgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjMgIHBvd2VyIDAuMjU3ICAwLjUgLT4gMC41MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDY0ICBwb3dlciAwLjAyNTcgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjUgIHBvd2VyIDAuMjU4ICAwLjUgLT4gMC41MDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDY2ICBwb3dlciAwLjAyNTggIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjcgIHBvd2VyIDAuMjU5ICAwLjUgLT4gMC41MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDY4ICBwb3dlciAwLjAyNTkgIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NjkgIHBvd2VyIDAuMjYxICAwLjUgLT4gMC41MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDcwICBwb3dlciAwLjAyNjEgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzEgIHBvd2VyIDAuMjYyICAwLjUgLT4gMC41MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDcyICBwb3dlciAwLjAyNjIgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzMgIHBvd2VyIDAuMjYzICAwLjUgLT4gMC41MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDc0ICBwb3dlciAwLjAyNjMgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzUgIHBvd2VyIDAuMjY0ICAwLjUgLT4gMC41MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDc2ICBwb3dlciAwLjAyNjQgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzcgIHBvd2VyIDAuMjY1ICAwLjUgLT4gMC41MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDc4ICBwb3dlciAwLjAyNjUgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0NzkgIHBvd2VyIDAuMjY2ICAwLjUgLT4gMC41MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDgwICBwb3dlciAwLjAyNjYgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODEgIHBvd2VyIDAuMjY3ICAwLjUgLT4gMC41MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDgyICBwb3dlciAwLjAyNjcgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODMgIHBvd2VyIDAuMjY4ICAwLjUgLT4gMC41MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDg0ICBwb3dlciAwLjAyNjggIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODUgIHBvd2VyIDAuMjY5ICAwLjUgLT4gMC41MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDg2ICBwb3dlciAwLjAyNjkgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODcgIHBvd2VyIDAuMjcxICAwLjUgLT4gMC41MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDg4ICBwb3dlciAwLjAyNzEgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0ODkgIHBvd2VyIDAuMjcyICAwLjUgLT4gMC41MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDkwICBwb3dlciAwLjAyNzIgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTEgIHBvd2VyIDAuMjczICAwLjUgLT4gMC41MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDkyICBwb3dlciAwLjAyNzMgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTMgIHBvd2VyIDAuMjc0ICAwLjUgLT4gMC41MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDk0ICBwb3dlciAwLjAyNzQgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTUgIHBvd2VyIDAuMjc1ICAwLjUgLT4gMC41MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDk2ICBwb3dlciAwLjAyNzUgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTcgIHBvd2VyIDAuMjc2ICAwLjUgLT4gMC41MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNDk4ICBwb3dlciAwLjAyNzYgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM0OTkgIHBvd2VyIDAuMjc3ICAwLjUgLT4gMC41MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTAwICBwb3dlciAwLjAyNzcgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDEgIHBvd2VyIDAuMjc4ICAwLjUgLT4gMC41MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTAyICBwb3dlciAwLjAyNzggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDMgIHBvd2VyIDAuMjc5ICAwLjUgLT4gMC41MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTA0ICBwb3dlciAwLjAyNzkgIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDUgIHBvd2VyIDAuMjgxICAwLjUgLT4gMC41MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTA2ICBwb3dlciAwLjAyODEgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDcgIHBvd2VyIDAuMjgyICAwLjUgLT4gMC41MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTA4ICBwb3dlciAwLjAyODIgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MDkgIHBvd2VyIDAuMjgzICAwLjUgLT4gMC41MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTEwICBwb3dlciAwLjAyODMgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTEgIHBvd2VyIDAuMjg0ICAwLjUgLT4gMC41MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTEyICBwb3dlciAwLjAyODQgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTMgIHBvd2VyIDAuMjg1ICAwLjUgLT4gMC41MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTE0ICBwb3dlciAwLjAyODUgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTUgIHBvd2VyIDAuMjg2ICAwLjUgLT4gMC41MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTE2ICBwb3dlciAwLjAyODYgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTcgIHBvd2VyIDAuMjg3ICAwLjUgLT4gMC41MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTE4ICBwb3dlciAwLjAyODcgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MTkgIHBvd2VyIDAuMjg4ICAwLjUgLT4gMC41MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTIwICBwb3dlciAwLjAyODggIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjEgIHBvd2VyIDAuMjg5ICAwLjUgLT4gMC41MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTIyICBwb3dlciAwLjAyODkgIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjMgIHBvd2VyIDAuMjkxICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTI0ICBwb3dlciAwLjAyOTEgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjUgIHBvd2VyIDAuMjkyICAwLjUgLT4gMC41NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTI2ICBwb3dlciAwLjAyOTIgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjcgIHBvd2VyIDAuMjkzICAwLjUgLT4gMC41NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTI4ICBwb3dlciAwLjAyOTMgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MjkgIHBvd2VyIDAuMjk0ICAwLjUgLT4gMC41NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTMwICBwb3dlciAwLjAyOTQgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzEgIHBvd2VyIDAuMjk1ICAwLjUgLT4gMC41NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTMyICBwb3dlciAwLjAyOTUgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzMgIHBvd2VyIDAuMjk2ICAwLjUgLT4gMC41NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTM0ICBwb3dlciAwLjAyOTYgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzUgIHBvd2VyIDAuMjk3ICAwLjUgLT4gMC41NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTM2ICBwb3dlciAwLjAyOTcgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzcgIHBvd2VyIDAuMjk4ICAwLjUgLT4gMC41NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTM4ICBwb3dlciAwLjAyOTggIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1MzkgIHBvd2VyIDAuMjk5ICAwLjUgLT4gMC41NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTQwICBwb3dlciAwLjAyOTkgIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDEgIHBvd2VyIDAuMzAxICAwLjUgLT4gMC41NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTQyICBwb3dlciAwLjAzMDEgIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDMgIHBvd2VyIDAuMzAyICAwLjUgLT4gMC41NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTQ0ICBwb3dlciAwLjAzMDIgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDUgIHBvd2VyIDAuMzAzICAwLjUgLT4gMC41NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTQ2ICBwb3dlciAwLjAzMDMgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDcgIHBvd2VyIDAuMzA0ICAwLjUgLT4gMC41NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTQ4ICBwb3dlciAwLjAzMDQgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NDkgIHBvd2VyIDAuMzA1ICAwLjUgLT4gMC41NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTUwICBwb3dlciAwLjAzMDUgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTEgIHBvd2VyIDAuMzA2ICAwLjUgLT4gMC41NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTUyICBwb3dlciAwLjAzMDYgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTMgIHBvd2VyIDAuMzA3ICAwLjUgLT4gMC41NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTU0ICBwb3dlciAwLjAzMDcgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTUgIHBvd2VyIDAuMzA4ICAwLjUgLT4gMC41NTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTU2ICBwb3dlciAwLjAzMDggIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTcgIHBvd2VyIDAuMzA5ICAwLjUgLT4gMC41NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTU4ICBwb3dlciAwLjAzMDkgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NTkgIHBvd2VyIDAuMzExICAwLjUgLT4gMC41NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTYwICBwb3dlciAwLjAzMTEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjEgIHBvd2VyIDAuMzEyICAwLjUgLT4gMC41NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTYyICBwb3dlciAwLjAzMTIgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjMgIHBvd2VyIDAuMzEzICAwLjUgLT4gMC41NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTY0ICBwb3dlciAwLjAzMTMgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjUgIHBvd2VyIDAuMzE0ICAwLjUgLT4gMC41NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTY2ICBwb3dlciAwLjAzMTQgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjcgIHBvd2VyIDAuMzE1ICAwLjUgLT4gMC41NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTY4ICBwb3dlciAwLjAzMTUgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NjkgIHBvd2VyIDAuMzE2ICAwLjUgLT4gMC41NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTcwICBwb3dlciAwLjAzMTYgIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzEgIHBvd2VyIDAuMzE3ICAwLjUgLT4gMC41NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTcyICBwb3dlciAwLjAzMTcgIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzMgIHBvd2VyIDAuMzE4ICAwLjUgLT4gMC41NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTc0ICBwb3dlciAwLjAzMTggIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzUgIHBvd2VyIDAuMzE5ICAwLjUgLT4gMC41NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTc2ICBwb3dlciAwLjAzMTkgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzcgIHBvd2VyIDAuMzIxICAwLjUgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTc4ICBwb3dlciAwLjAzMjEgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1NzkgIHBvd2VyIDAuMzIyICAwLjUgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTgwICBwb3dlciAwLjAzMjIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODEgIHBvd2VyIDAuMzIzICAwLjUgLT4gMC41NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTgyICBwb3dlciAwLjAzMjMgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODMgIHBvd2VyIDAuMzI0ICAwLjUgLT4gMC41NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTg0ICBwb3dlciAwLjAzMjQgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODUgIHBvd2VyIDAuMzI1ICAwLjUgLT4gMC41NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTg2ICBwb3dlciAwLjAzMjUgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODcgIHBvd2VyIDAuMzI2ICAwLjUgLT4gMC41NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTg4ICBwb3dlciAwLjAzMjYgIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1ODkgIHBvd2VyIDAuMzI3ICAwLjUgLT4gMC41NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTkwICBwb3dlciAwLjAzMjcgIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTEgIHBvd2VyIDAuMzI4ICAwLjUgLT4gMC41NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTkyICBwb3dlciAwLjAzMjggIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTMgIHBvd2VyIDAuMzI5ICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTk0ICBwb3dlciAwLjAzMjkgIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTUgIHBvd2VyIDAuMzMxICAwLjUgLT4gMC41NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTk2ICBwb3dlciAwLjAzMzEgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTcgIHBvd2VyIDAuMzMyICAwLjUgLT4gMC41NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNTk4ICBwb3dlciAwLjAzMzIgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM1OTkgIHBvd2VyIDAuMzMzICAwLjUgLT4gMC41NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjAwICBwb3dlciAwLjAzMzMgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDEgIHBvd2VyIDAuMzM0ICAwLjUgLT4gMC41NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjAyICBwb3dlciAwLjAzMzQgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDMgIHBvd2VyIDAuMzM1ICAwLjUgLT4gMC41NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjA0ICBwb3dlciAwLjAzMzUgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDUgIHBvd2VyIDAuMzM2ICAwLjUgLT4gMC41ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjA2ICBwb3dlciAwLjAzMzYgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDcgIHBvd2VyIDAuMzM3ICAwLjUgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjA4ICBwb3dlciAwLjAzMzcgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MDkgIHBvd2VyIDAuMzM4ICAwLjUgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjEwICBwb3dlciAwLjAzMzggIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTEgIHBvd2VyIDAuMzM5ICAwLjUgLT4gMC41ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjEyICBwb3dlciAwLjAzMzkgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTMgIHBvd2VyIDAuMzQxICAwLjUgLT4gMC41ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjE0ICBwb3dlciAwLjAzNDEgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTUgIHBvd2VyIDAuMzQyICAwLjUgLT4gMC41ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjE2ICBwb3dlciAwLjAzNDIgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTcgIHBvd2VyIDAuMzQzICAwLjUgLT4gMC41ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjE4ICBwb3dlciAwLjAzNDMgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MTkgIHBvd2VyIDAuMzQ0ICAwLjUgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjIwICBwb3dlciAwLjAzNDQgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjEgIHBvd2VyIDAuMzQ1ICAwLjUgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjIyICBwb3dlciAwLjAzNDUgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjMgIHBvd2VyIDAuMzQ2ICAwLjUgLT4gMC41ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjI0ICBwb3dlciAwLjAzNDYgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjUgIHBvd2VyIDAuMzQ3ICAwLjUgLT4gMC41ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjI2ICBwb3dlciAwLjAzNDcgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjcgIHBvd2VyIDAuMzQ4ICAwLjUgLT4gMC41OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjI4ICBwb3dlciAwLjAzNDggIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MjkgIHBvd2VyIDAuMzQ5ICAwLjUgLT4gMC41OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjMwICBwb3dlciAwLjAzNDkgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzEgIHBvd2VyIDAuMzUxICAwLjUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjMyICBwb3dlciAwLjAzNTEgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzMgIHBvd2VyIDAuMzUyICAwLjUgLT4gMC41OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjM0ICBwb3dlciAwLjAzNTIgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzUgIHBvd2VyIDAuMzUzICAwLjUgLT4gMC41OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjM2ICBwb3dlciAwLjAzNTMgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzcgIHBvd2VyIDAuMzU0ICAwLjUgLT4gMC41OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjM4ICBwb3dlciAwLjAzNTQgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2MzkgIHBvd2VyIDAuMzU1ICAwLjUgLT4gMC41OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjQwICBwb3dlciAwLjAzNTUgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDEgIHBvd2VyIDAuMzU2ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjQyICBwb3dlciAwLjAzNTYgIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDMgIHBvd2VyIDAuMzU3ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjQ0ICBwb3dlciAwLjAzNTcgIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDUgIHBvd2VyIDAuMzU4ICAwLjUgLT4gMC41OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjQ2ICBwb3dlciAwLjAzNTggIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDcgIHBvd2VyIDAuMzU5ICAwLjUgLT4gMC41OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjQ4ICBwb3dlciAwLjAzNTkgIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NDkgIHBvd2VyIDAuMzYxICAwLjUgLT4gMC42MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjUwICBwb3dlciAwLjAzNjEgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTEgIHBvd2VyIDAuMzYyICAwLjUgLT4gMC42MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjUyICBwb3dlciAwLjAzNjIgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTMgIHBvd2VyIDAuMzYzICAwLjUgLT4gMC42MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjU0ICBwb3dlciAwLjAzNjMgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTUgIHBvd2VyIDAuMzY0ICAwLjUgLT4gMC42MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjU2ICBwb3dlciAwLjAzNjQgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTcgIHBvd2VyIDAuMzY1ICAwLjUgLT4gMC42MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjU4ICBwb3dlciAwLjAzNjUgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NTkgIHBvd2VyIDAuMzY2ICAwLjUgLT4gMC42MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjYwICBwb3dlciAwLjAzNjYgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjEgIHBvd2VyIDAuMzY3ICAwLjUgLT4gMC42MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjYyICBwb3dlciAwLjAzNjcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjMgIHBvd2VyIDAuMzY4ICAwLjUgLT4gMC42MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjY0ICBwb3dlciAwLjAzNjggIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjUgIHBvd2VyIDAuMzY5ICAwLjUgLT4gMC42MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjY2ICBwb3dlciAwLjAzNjkgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjcgIHBvd2VyIDAuMzcxICAwLjUgLT4gMC42MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjY4ICBwb3dlciAwLjAzNzEgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NjkgIHBvd2VyIDAuMzcyICAwLjUgLT4gMC42MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjcwICBwb3dlciAwLjAzNzIgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzEgIHBvd2VyIDAuMzczICAwLjUgLT4gMC42MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjcyICBwb3dlciAwLjAzNzMgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzMgIHBvd2VyIDAuMzc0ICAwLjUgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjc0ICBwb3dlciAwLjAzNzQgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzUgIHBvd2VyIDAuMzc1ICAwLjUgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjc2ICBwb3dlciAwLjAzNzUgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzcgIHBvd2VyIDAuMzc2ICAwLjUgLT4gMC42MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjc4ICBwb3dlciAwLjAzNzYgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2NzkgIHBvd2VyIDAuMzc3ICAwLjUgLT4gMC42MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjgwICBwb3dlciAwLjAzNzcgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODEgIHBvd2VyIDAuMzc4ICAwLjUgLT4gMC42MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjgyICBwb3dlciAwLjAzNzggIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODMgIHBvd2VyIDAuMzc5ICAwLjUgLT4gMC42MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjg0ICBwb3dlciAwLjAzNzkgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODUgIHBvd2VyIDAuMzgxICAwLjUgLT4gMC42MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjg2ICBwb3dlciAwLjAzODEgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODcgIHBvd2VyIDAuMzgyICAwLjUgLT4gMC42MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjg4ICBwb3dlciAwLjAzODIgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2ODkgIHBvd2VyIDAuMzgzICAwLjUgLT4gMC42MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjkwICBwb3dlciAwLjAzODMgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTEgIHBvd2VyIDAuMzg0ICAwLjUgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjkyICBwb3dlciAwLjAzODQgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTMgIHBvd2VyIDAuMzg1ICAwLjUgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjk0ICBwb3dlciAwLjAzODUgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTUgIHBvd2VyIDAuMzg2ICAwLjUgLT4gMC42MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjk2ICBwb3dlciAwLjAzODYgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTcgIHBvd2VyIDAuMzg3ICAwLjUgLT4gMC42MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNjk4ICBwb3dlciAwLjAzODcgIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM2OTkgIHBvd2VyIDAuMzg4ICAwLjUgLT4gMC42MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzAwICBwb3dlciAwLjAzODggIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDEgIHBvd2VyIDAuMzg5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzAyICBwb3dlciAwLjAzODkgIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDMgIHBvd2VyIDAuMzkxICAwLjUgLT4gMC42MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzA0ICBwb3dlciAwLjAzOTEgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDUgIHBvd2VyIDAuMzkyICAwLjUgLT4gMC42MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzA2ICBwb3dlciAwLjAzOTIgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDcgIHBvd2VyIDAuMzkzICAwLjUgLT4gMC42MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzA4ICBwb3dlciAwLjAzOTMgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MDkgIHBvd2VyIDAuMzk0ICAwLjUgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzEwICBwb3dlciAwLjAzOTQgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTEgIHBvd2VyIDAuMzk1ICAwLjUgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzEyICBwb3dlciAwLjAzOTUgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTMgIHBvd2VyIDAuMzk2ICAwLjUgLT4gMC42MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzE0ICBwb3dlciAwLjAzOTYgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTUgIHBvd2VyIDAuMzk3ICAwLjUgLT4gMC42MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzE2ICBwb3dlciAwLjAzOTcgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTcgIHBvd2VyIDAuMzk4ICAwLjUgLT4gMC42MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzE4ICBwb3dlciAwLjAzOTggIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MTkgIHBvd2VyIDAuMzk5ICAwLjUgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzIwICBwb3dlciAwLjAzOTkgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjEgIHBvd2VyIDAuNDAxICAwLjUgLT4gMC42MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzIyICBwb3dlciAwLjA0MDEgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjMgIHBvd2VyIDAuNDAyICAwLjUgLT4gMC42MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzI0ICBwb3dlciAwLjA0MDIgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjUgIHBvd2VyIDAuNDAzICAwLjUgLT4gMC42MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzI2ICBwb3dlciAwLjA0MDMgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjcgIHBvd2VyIDAuNDA0ICAwLjUgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzI4ICBwb3dlciAwLjA0MDQgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MjkgIHBvd2VyIDAuNDA1ICAwLjUgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzMwICBwb3dlciAwLjA0MDUgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzEgIHBvd2VyIDAuNDA2ICAwLjUgLT4gMC42MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzMyICBwb3dlciAwLjA0MDYgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzMgIHBvd2VyIDAuNDA3ICAwLjUgLT4gMC42MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzM0ICBwb3dlciAwLjA0MDcgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzUgIHBvd2VyIDAuNDA4ICAwLjUgLT4gMC42MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzM2ICBwb3dlciAwLjA0MDggIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzcgIHBvd2VyIDAuNDA5ICAwLjUgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzM4ICBwb3dlciAwLjA0MDkgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3MzkgIHBvd2VyIDAuNDExICAwLjUgLT4gMC42NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzQwICBwb3dlciAwLjA0MTEgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDEgIHBvd2VyIDAuNDEyICAwLjUgLT4gMC42NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzQyICBwb3dlciAwLjA0MTIgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDMgIHBvd2VyIDAuNDEzICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzQ0ICBwb3dlciAwLjA0MTMgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDUgIHBvd2VyIDAuNDE0ICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzQ2ICBwb3dlciAwLjA0MTQgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDcgIHBvd2VyIDAuNDE1ICAwLjUgLT4gMC42NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzQ4ICBwb3dlciAwLjA0MTUgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NDkgIHBvd2VyIDAuNDE2ICAwLjUgLT4gMC42NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzUwICBwb3dlciAwLjA0MTYgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTEgIHBvd2VyIDAuNDE3ICAwLjUgLT4gMC42NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzUyICBwb3dlciAwLjA0MTcgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTMgIHBvd2VyIDAuNDE4ICAwLjUgLT4gMC42NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzU0ICBwb3dlciAwLjA0MTggIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTUgIHBvd2VyIDAuNDE5ICAwLjUgLT4gMC42NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzU2ICBwb3dlciAwLjA0MTkgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTcgIHBvd2VyIDAuNDIxICAwLjUgLT4gMC42NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzU4ICBwb3dlciAwLjA0MjEgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NTkgIHBvd2VyIDAuNDIyICAwLjUgLT4gMC42NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzYwICBwb3dlciAwLjA0MjIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjEgIHBvd2VyIDAuNDIzICAwLjUgLT4gMC42NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzYyICBwb3dlciAwLjA0MjMgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjMgIHBvd2VyIDAuNDI0ICAwLjUgLT4gMC42NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzY0ICBwb3dlciAwLjA0MjQgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjUgIHBvd2VyIDAuNDI1ICAwLjUgLT4gMC42NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzY2ICBwb3dlciAwLjA0MjUgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjcgIHBvd2VyIDAuNDI2ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzY4ICBwb3dlciAwLjA0MjYgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NjkgIHBvd2VyIDAuNDI3ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzcwICBwb3dlciAwLjA0MjcgIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzEgIHBvd2VyIDAuNDI4ICAwLjUgLT4gMC42NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzcyICBwb3dlciAwLjA0MjggIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzMgIHBvd2VyIDAuNDI5ICAwLjUgLT4gMC42NTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzc0ICBwb3dlciAwLjA0MjkgIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzUgIHBvd2VyIDAuNDMxICAwLjUgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzc2ICBwb3dlciAwLjA0MzEgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzcgIHBvd2VyIDAuNDMyICAwLjUgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzc4ICBwb3dlciAwLjA0MzIgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3NzkgIHBvd2VyIDAuNDMzICAwLjUgLT4gMC42NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzgwICBwb3dlciAwLjA0MzMgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODEgIHBvd2VyIDAuNDM0ICAwLjUgLT4gMC42NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzgyICBwb3dlciAwLjA0MzQgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODMgIHBvd2VyIDAuNDM1ICAwLjUgLT4gMC42NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzg0ICBwb3dlciAwLjA0MzUgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODUgIHBvd2VyIDAuNDM2ICAwLjUgLT4gMC42NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzg2ICBwb3dlciAwLjA0MzYgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODcgIHBvd2VyIDAuNDM3ICAwLjUgLT4gMC42NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzg4ICBwb3dlciAwLjA0MzcgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3ODkgIHBvd2VyIDAuNDM4ICAwLjUgLT4gMC42NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzkwICBwb3dlciAwLjA0MzggIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTEgIHBvd2VyIDAuNDM5ICAwLjUgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzkyICBwb3dlciAwLjA0MzkgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTMgIHBvd2VyIDAuNDQxICAwLjUgLT4gMC42NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzk0ICBwb3dlciAwLjA0NDEgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTUgIHBvd2VyIDAuNDQyICAwLjUgLT4gMC42NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzk2ICBwb3dlciAwLjA0NDIgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTcgIHBvd2VyIDAuNDQzICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzNzk4ICBwb3dlciAwLjA0NDMgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM3OTkgIHBvd2VyIDAuNDQ0ICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODAwICBwb3dlciAwLjA0NDQgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDEgIHBvd2VyIDAuNDQ1ICAwLjUgLT4gMC42NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODAyICBwb3dlciAwLjA0NDUgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDMgIHBvd2VyIDAuNDQ2ICAwLjUgLT4gMC42NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODA0ICBwb3dlciAwLjA0NDYgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDUgIHBvd2VyIDAuNDQ3ICAwLjUgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODA2ICBwb3dlciAwLjA0NDcgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDcgIHBvd2VyIDAuNDQ4ICAwLjUgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODA4ICBwb3dlciAwLjA0NDggIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MDkgIHBvd2VyIDAuNDQ5ICAwLjUgLT4gMC42NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODEwICBwb3dlciAwLjA0NDkgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTEgIHBvd2VyIDAuNDUxICAwLjUgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODEyICBwb3dlciAwLjA0NTEgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTMgIHBvd2VyIDAuNDUyICAwLjUgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODE0ICBwb3dlciAwLjA0NTIgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTUgIHBvd2VyIDAuNDUzICAwLjUgLT4gMC42NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODE2ICBwb3dlciAwLjA0NTMgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTcgIHBvd2VyIDAuNDU0ICAwLjUgLT4gMC42NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODE4ICBwb3dlciAwLjA0NTQgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MTkgIHBvd2VyIDAuNDU1ICAwLjUgLT4gMC42NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODIwICBwb3dlciAwLjA0NTUgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjEgIHBvd2VyIDAuNDU2ICAwLjUgLT4gMC42NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODIyICBwb3dlciAwLjA0NTYgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjMgIHBvd2VyIDAuNDU3ICAwLjUgLT4gMC42NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODI0ICBwb3dlciAwLjA0NTcgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjUgIHBvd2VyIDAuNDU4ICAwLjUgLT4gMC42NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODI2ICBwb3dlciAwLjA0NTggIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjcgIHBvd2VyIDAuNDU5ICAwLjUgLT4gMC42NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODI4ICBwb3dlciAwLjA0NTkgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MjkgIHBvd2VyIDAuNDYxICAwLjUgLT4gMC42NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODMwICBwb3dlciAwLjA0NjEgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzEgIHBvd2VyIDAuNDYyICAwLjUgLT4gMC42ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODMyICBwb3dlciAwLjA0NjIgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzMgIHBvd2VyIDAuNDYzICAwLjUgLT4gMC42ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODM0ICBwb3dlciAwLjA0NjMgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzUgIHBvd2VyIDAuNDY0ICAwLjUgLT4gMC42ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODM2ICBwb3dlciAwLjA0NjQgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzcgIHBvd2VyIDAuNDY1ICAwLjUgLT4gMC42ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODM4ICBwb3dlciAwLjA0NjUgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4MzkgIHBvd2VyIDAuNDY2ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODQwICBwb3dlciAwLjA0NjYgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDEgIHBvd2VyIDAuNDY3ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODQyICBwb3dlciAwLjA0NjcgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDMgIHBvd2VyIDAuNDY4ICAwLjUgLT4gMC42ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODQ0ICBwb3dlciAwLjA0NjggIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDUgIHBvd2VyIDAuNDY5ICAwLjUgLT4gMC42ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODQ2ICBwb3dlciAwLjA0NjkgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDcgIHBvd2VyIDAuNDcxICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODQ4ICBwb3dlciAwLjA0NzEgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NDkgIHBvd2VyIDAuNDcyICAwLjUgLT4gMC42ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODUwICBwb3dlciAwLjA0NzIgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTEgIHBvd2VyIDAuNDczICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODUyICBwb3dlciAwLjA0NzMgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTMgIHBvd2VyIDAuNDc0ICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODU0ICBwb3dlciAwLjA0NzQgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTUgIHBvd2VyIDAuNDc1ICAwLjUgLT4gMC42ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODU2ICBwb3dlciAwLjA0NzUgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTcgIHBvd2VyIDAuNDc2ICAwLjUgLT4gMC42OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODU4ICBwb3dlciAwLjA0NzYgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NTkgIHBvd2VyIDAuNDc3ICAwLjUgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODYwICBwb3dlciAwLjA0NzcgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjEgIHBvd2VyIDAuNDc4ICAwLjUgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODYyICBwb3dlciAwLjA0NzggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjMgIHBvd2VyIDAuNDc5ICAwLjUgLT4gMC42OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODY0ICBwb3dlciAwLjA0NzkgIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjUgIHBvd2VyIDAuNDgxICAwLjUgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODY2ICBwb3dlciAwLjA0ODEgIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjcgIHBvd2VyIDAuNDgyICAwLjUgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODY4ICBwb3dlciAwLjA0ODIgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NjkgIHBvd2VyIDAuNDgzICAwLjUgLT4gMC42OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODcwICBwb3dlciAwLjA0ODMgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzEgIHBvd2VyIDAuNDg0ICAwLjUgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODcyICBwb3dlciAwLjA0ODQgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzMgIHBvd2VyIDAuNDg1ICAwLjUgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODc0ICBwb3dlciAwLjA0ODUgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzUgIHBvd2VyIDAuNDg2ICAwLjUgLT4gMC42OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODc2ICBwb3dlciAwLjA0ODYgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzcgIHBvd2VyIDAuNDg3ICAwLjUgLT4gMC42OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODc4ICBwb3dlciAwLjA0ODcgIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4NzkgIHBvd2VyIDAuNDg4ICAwLjUgLT4gMC42OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODgwICBwb3dlciAwLjA0ODggIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODEgIHBvd2VyIDAuNDg5ICAwLjUgLT4gMC42OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODgyICBwb3dlciAwLjA0ODkgIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODMgIHBvd2VyIDAuNDkxICAwLjUgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODg0ICBwb3dlciAwLjA0OTEgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODUgIHBvd2VyIDAuNDkyICAwLjUgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODg2ICBwb3dlciAwLjA0OTIgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODcgIHBvd2VyIDAuNDkzICAwLjUgLT4gMC43MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODg4ICBwb3dlciAwLjA0OTMgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4ODkgIHBvd2VyIDAuNDk0ICAwLjUgLT4gMC43MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODkwICBwb3dlciAwLjA0OTQgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTEgIHBvd2VyIDAuNDk1ICAwLjUgLT4gMC43MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODkyICBwb3dlciAwLjA0OTUgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTMgIHBvd2VyIDAuNDk2ICAwLjUgLT4gMC43MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODk0ICBwb3dlciAwLjA0OTYgIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTUgIHBvd2VyIDAuNDk3ICAwLjUgLT4gMC43MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODk2ICBwb3dlciAwLjA0OTcgIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTcgIHBvd2VyIDAuNDk4ICAwLjUgLT4gMC43MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzODk4ICBwb3dlciAwLjA0OTggIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM4OTkgIHBvd2VyIDAuNDk5ICAwLjUgLT4gMC43MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTAwICBwb3dlciAwLjA0OTkgIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDEgIHBvd2VyIDAuNTAxICAwLjUgLT4gMC43MDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTAyICBwb3dlciAwLjA1MDEgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDMgIHBvd2VyIDAuNTAyICAwLjUgLT4gMC43MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTA0ICBwb3dlciAwLjA1MDIgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDUgIHBvd2VyIDAuNTAzICAwLjUgLT4gMC43MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTA2ICBwb3dlciAwLjA1MDMgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDcgIHBvd2VyIDAuNTA0ICAwLjUgLT4gMC43MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTA4ICBwb3dlciAwLjA1MDQgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MDkgIHBvd2VyIDAuNTA1ICAwLjUgLT4gMC43MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTEwICBwb3dlciAwLjA1MDUgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTEgIHBvd2VyIDAuNTA2ICAwLjUgLT4gMC43MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTEyICBwb3dlciAwLjA1MDYgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTMgIHBvd2VyIDAuNTA3ICAwLjUgLT4gMC43MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTE0ICBwb3dlciAwLjA1MDcgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTUgIHBvd2VyIDAuNTA4ICAwLjUgLT4gMC43MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTE2ICBwb3dlciAwLjA1MDggIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTcgIHBvd2VyIDAuNTA5ICAwLjUgLT4gMC43MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTE4ICBwb3dlciAwLjA1MDkgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MTkgIHBvd2VyIDAuNTExICAwLjUgLT4gMC43MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTIwICBwb3dlciAwLjA1MTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjEgIHBvd2VyIDAuNTEyICAwLjUgLT4gMC43MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTIyICBwb3dlciAwLjA1MTIgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjMgIHBvd2VyIDAuNTEzICAwLjUgLT4gMC43MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTI0ICBwb3dlciAwLjA1MTMgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjUgIHBvd2VyIDAuNTE0ICAwLjUgLT4gMC43MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTI2ICBwb3dlciAwLjA1MTQgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjcgIHBvd2VyIDAuNTE1ICAwLjUgLT4gMC43MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTI4ICBwb3dlciAwLjA1MTUgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MjkgIHBvd2VyIDAuNTE2ICAwLjUgLT4gMC43MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTMwICBwb3dlciAwLjA1MTYgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzEgIHBvd2VyIDAuNTE3ICAwLjUgLT4gMC43MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTMyICBwb3dlciAwLjA1MTcgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzMgIHBvd2VyIDAuNTE4ICAwLjUgLT4gMC43MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTM0ICBwb3dlciAwLjA1MTggIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzUgIHBvd2VyIDAuNTE5ICAwLjUgLT4gMC43MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTM2ICBwb3dlciAwLjA1MTkgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzcgIHBvd2VyIDAuNTIxICAwLjUgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTM4ICBwb3dlciAwLjA1MjEgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5MzkgIHBvd2VyIDAuNTIyICAwLjUgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTQwICBwb3dlciAwLjA1MjIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDEgIHBvd2VyIDAuNTIzICAwLjUgLT4gMC43MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTQyICBwb3dlciAwLjA1MjMgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDMgIHBvd2VyIDAuNTI0ICAwLjUgLT4gMC43MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTQ0ICBwb3dlciAwLjA1MjQgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDUgIHBvd2VyIDAuNTI1ICAwLjUgLT4gMC43MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTQ2ICBwb3dlciAwLjA1MjUgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDcgIHBvd2VyIDAuNTI2ICAwLjUgLT4gMC43MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTQ4ICBwb3dlciAwLjA1MjYgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NDkgIHBvd2VyIDAuNTI3ICAwLjUgLT4gMC43MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTUwICBwb3dlciAwLjA1MjcgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTEgIHBvd2VyIDAuNTI4ICAwLjUgLT4gMC43MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTUyICBwb3dlciAwLjA1MjggIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTMgIHBvd2VyIDAuNTI5ICAwLjUgLT4gMC43MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTU0ICBwb3dlciAwLjA1MjkgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTUgIHBvd2VyIDAuNTMxICAwLjUgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTU2ICBwb3dlciAwLjA1MzEgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTcgIHBvd2VyIDAuNTMyICAwLjUgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTU4ICBwb3dlciAwLjA1MzIgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NTkgIHBvd2VyIDAuNTMzICAwLjUgLT4gMC43MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTYwICBwb3dlciAwLjA1MzMgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjEgIHBvd2VyIDAuNTM0ICAwLjUgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTYyICBwb3dlciAwLjA1MzQgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjMgIHBvd2VyIDAuNTM1ICAwLjUgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTY0ICBwb3dlciAwLjA1MzUgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjUgIHBvd2VyIDAuNTM2ICAwLjUgLT4gMC43MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTY2ICBwb3dlciAwLjA1MzYgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjcgIHBvd2VyIDAuNTM3ICAwLjUgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTY4ICBwb3dlciAwLjA1MzcgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NjkgIHBvd2VyIDAuNTM4ICAwLjUgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTcwICBwb3dlciAwLjA1MzggIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzEgIHBvd2VyIDAuNTM5ICAwLjUgLT4gMC43MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTcyICBwb3dlciAwLjA1MzkgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzMgIHBvd2VyIDAuNTQxICAwLjUgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTc0ICBwb3dlciAwLjA1NDEgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzUgIHBvd2VyIDAuNTQyICAwLjUgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTc2ICBwb3dlciAwLjA1NDIgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzcgIHBvd2VyIDAuNTQzICAwLjUgLT4gMC43MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTc4ICBwb3dlciAwLjA1NDMgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5NzkgIHBvd2VyIDAuNTQ0ICAwLjUgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTgwICBwb3dlciAwLjA1NDQgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODEgIHBvd2VyIDAuNTQ1ICAwLjUgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTgyICBwb3dlciAwLjA1NDUgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODMgIHBvd2VyIDAuNTQ2ICAwLjUgLT4gMC43MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTg0ICBwb3dlciAwLjA1NDYgIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODUgIHBvd2VyIDAuNTQ3ICAwLjUgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTg2ICBwb3dlciAwLjA1NDcgIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODcgIHBvd2VyIDAuNTQ4ICAwLjUgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTg4ICBwb3dlciAwLjA1NDggIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5ODkgIHBvd2VyIDAuNTQ5ICAwLjUgLT4gMC43NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTkwICBwb3dlciAwLjA1NDkgIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTEgIHBvd2VyIDAuNTUxICAwLjUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTkyICBwb3dlciAwLjA1NTEgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTMgIHBvd2VyIDAuNTUyICAwLjUgLT4gMC43NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTk0ICBwb3dlciAwLjA1NTIgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTUgIHBvd2VyIDAuNTUzICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTk2ICBwb3dlciAwLjA1NTMgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTcgIHBvd2VyIDAuNTU0ICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3gzOTk4ICBwb3dlciAwLjA1NTQgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDM5OTkgIHBvd2VyIDAuNTU1ICAwLjUgLT4gMC43NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDAwICBwb3dlciAwLjA1NTUgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDEgIHBvd2VyIDAuNTU2ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDAyICBwb3dlciAwLjA1NTYgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDMgIHBvd2VyIDAuNTU3ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDA0ICBwb3dlciAwLjA1NTcgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDUgIHBvd2VyIDAuNTU4ICAwLjUgLT4gMC43NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDA2ICBwb3dlciAwLjA1NTggIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDcgIHBvd2VyIDAuNTU5ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDA4ICBwb3dlciAwLjA1NTkgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMDkgIHBvd2VyIDAuNTYxICAwLjUgLT4gMC43NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDEwICBwb3dlciAwLjA1NjEgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTEgIHBvd2VyIDAuNTYyICAwLjUgLT4gMC43NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDEyICBwb3dlciAwLjA1NjIgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTMgIHBvd2VyIDAuNTYzICAwLjUgLT4gMC43NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDE0ICBwb3dlciAwLjA1NjMgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTUgIHBvd2VyIDAuNTY0ICAwLjUgLT4gMC43NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDE2ICBwb3dlciAwLjA1NjQgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTcgIHBvd2VyIDAuNTY1ICAwLjUgLT4gMC43NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDE4ICBwb3dlciAwLjA1NjUgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMTkgIHBvd2VyIDAuNTY2ICAwLjUgLT4gMC43NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDIwICBwb3dlciAwLjA1NjYgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjEgIHBvd2VyIDAuNTY3ICAwLjUgLT4gMC43NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDIyICBwb3dlciAwLjA1NjcgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjMgIHBvd2VyIDAuNTY4ICAwLjUgLT4gMC43NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDI0ICBwb3dlciAwLjA1NjggIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjUgIHBvd2VyIDAuNTY5ICAwLjUgLT4gMC43NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDI2ICBwb3dlciAwLjA1NjkgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjcgIHBvd2VyIDAuNTcxICAwLjUgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDI4ICBwb3dlciAwLjA1NzEgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMjkgIHBvd2VyIDAuNTcyICAwLjUgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDMwICBwb3dlciAwLjA1NzIgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzEgIHBvd2VyIDAuNTczICAwLjUgLT4gMC43NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDMyICBwb3dlciAwLjA1NzMgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzMgIHBvd2VyIDAuNTc0ICAwLjUgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDM0ICBwb3dlciAwLjA1NzQgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzUgIHBvd2VyIDAuNTc1ICAwLjUgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDM2ICBwb3dlciAwLjA1NzUgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzcgIHBvd2VyIDAuNTc2ICAwLjUgLT4gMC43NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDM4ICBwb3dlciAwLjA1NzYgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwMzkgIHBvd2VyIDAuNTc3ICAwLjUgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDQwICBwb3dlciAwLjA1NzcgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDEgIHBvd2VyIDAuNTc4ICAwLjUgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDQyICBwb3dlciAwLjA1NzggIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDMgIHBvd2VyIDAuNTc5ICAwLjUgLT4gMC43NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDQ0ICBwb3dlciAwLjA1NzkgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDUgIHBvd2VyIDAuNTgxICAwLjUgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDQ2ICBwb3dlciAwLjA1ODEgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDcgIHBvd2VyIDAuNTgyICAwLjUgLT4gMC43NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDQ4ICBwb3dlciAwLjA1ODIgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNDkgIHBvd2VyIDAuNTgzICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDUwICBwb3dlciAwLjA1ODMgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTEgIHBvd2VyIDAuNTg0ICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDUyICBwb3dlciAwLjA1ODQgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTMgIHBvd2VyIDAuNTg1ICAwLjUgLT4gMC43NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDU0ICBwb3dlciAwLjA1ODUgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTUgIHBvd2VyIDAuNTg2ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDU2ICBwb3dlciAwLjA1ODYgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTcgIHBvd2VyIDAuNTg3ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDU4ICBwb3dlciAwLjA1ODcgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNTkgIHBvd2VyIDAuNTg4ICAwLjUgLT4gMC43NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDYwICBwb3dlciAwLjA1ODggIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjEgIHBvd2VyIDAuNTg5ICAwLjUgLT4gMC43NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDYyICBwb3dlciAwLjA1ODkgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjMgIHBvd2VyIDAuNTkxICAwLjUgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDY0ICBwb3dlciAwLjA1OTEgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjUgIHBvd2VyIDAuNTkyICAwLjUgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDY2ICBwb3dlciAwLjA1OTIgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjcgIHBvd2VyIDAuNTkzICAwLjUgLT4gMC43NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDY4ICBwb3dlciAwLjA1OTMgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNjkgIHBvd2VyIDAuNTk0ICAwLjUgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDcwICBwb3dlciAwLjA1OTQgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzEgIHBvd2VyIDAuNTk1ICAwLjUgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDcyICBwb3dlciAwLjA1OTUgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzMgIHBvd2VyIDAuNTk2ICAwLjUgLT4gMC43NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDc0ICBwb3dlciAwLjA1OTYgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzUgIHBvd2VyIDAuNTk3ICAwLjUgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDc2ICBwb3dlciAwLjA1OTcgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzcgIHBvd2VyIDAuNTk4ICAwLjUgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDc4ICBwb3dlciAwLjA1OTggIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwNzkgIHBvd2VyIDAuNTk5ICAwLjUgLT4gMC43NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDgwICBwb3dlciAwLjA1OTkgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODEgIHBvd2VyIDAuNjAxICAwLjUgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDgyICBwb3dlciAwLjA2MDEgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODMgIHBvd2VyIDAuNjAyICAwLjUgLT4gMC43NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDg0ICBwb3dlciAwLjA2MDIgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODUgIHBvd2VyIDAuNjAzICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDg2ICBwb3dlciAwLjA2MDMgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODcgIHBvd2VyIDAuNjA0ICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDg4ICBwb3dlciAwLjA2MDQgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwODkgIHBvd2VyIDAuNjA1ICAwLjUgLT4gMC43NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDkwICBwb3dlciAwLjA2MDUgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTEgIHBvd2VyIDAuNjA2ICAwLjUgLT4gMC43NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDkyICBwb3dlciAwLjA2MDYgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTMgIHBvd2VyIDAuNjA3ICAwLjUgLT4gMC43NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDk0ICBwb3dlciAwLjA2MDcgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTUgIHBvd2VyIDAuNjA4ICAwLjUgLT4gMC43ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDk2ICBwb3dlciAwLjA2MDggIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTcgIHBvd2VyIDAuNjA5ICAwLjUgLT4gMC43ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MDk4ICBwb3dlciAwLjA2MDkgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQwOTkgIHBvd2VyIDAuNjExICAwLjUgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTAwICBwb3dlciAwLjA2MTEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDEgIHBvd2VyIDAuNjEyICAwLjUgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTAyICBwb3dlciAwLjA2MTIgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDMgIHBvd2VyIDAuNjEzICAwLjUgLT4gMC43ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTA0ICBwb3dlciAwLjA2MTMgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDUgIHBvd2VyIDAuNjE0ICAwLjUgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTA2ICBwb3dlciAwLjA2MTQgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDcgIHBvd2VyIDAuNjE1ICAwLjUgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTA4ICBwb3dlciAwLjA2MTUgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMDkgIHBvd2VyIDAuNjE2ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTEwICBwb3dlciAwLjA2MTYgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTEgIHBvd2VyIDAuNjE3ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTEyICBwb3dlciAwLjA2MTcgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTMgIHBvd2VyIDAuNjE4ICAwLjUgLT4gMC43ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTE0ICBwb3dlciAwLjA2MTggIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTUgIHBvd2VyIDAuNjE5ICAwLjUgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTE2ICBwb3dlciAwLjA2MTkgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTcgIHBvd2VyIDAuNjIxICAwLjUgLT4gMC43ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTE4ICBwb3dlciAwLjA2MjEgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMTkgIHBvd2VyIDAuNjIyICAwLjUgLT4gMC43ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTIwICBwb3dlciAwLjA2MjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjEgIHBvd2VyIDAuNjIzICAwLjUgLT4gMC43ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTIyICBwb3dlciAwLjA2MjMgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjMgIHBvd2VyIDAuNjI0ICAwLjUgLT4gMC43OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTI0ICBwb3dlciAwLjA2MjQgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjUgIHBvd2VyIDAuNjI1ICAwLjUgLT4gMC43OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTI2ICBwb3dlciAwLjA2MjUgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjcgIHBvd2VyIDAuNjI2ICAwLjUgLT4gMC43OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTI4ICBwb3dlciAwLjA2MjYgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMjkgIHBvd2VyIDAuNjI3ICAwLjUgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTMwICBwb3dlciAwLjA2MjcgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzEgIHBvd2VyIDAuNjI4ICAwLjUgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTMyICBwb3dlciAwLjA2MjggIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzMgIHBvd2VyIDAuNjI5ICAwLjUgLT4gMC43OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTM0ICBwb3dlciAwLjA2MjkgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzUgIHBvd2VyIDAuNjMxICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTM2ICBwb3dlciAwLjA2MzEgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzcgIHBvd2VyIDAuNjMyICAwLjUgLT4gMC43OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTM4ICBwb3dlciAwLjA2MzIgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxMzkgIHBvd2VyIDAuNjMzICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTQwICBwb3dlciAwLjA2MzMgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDEgIHBvd2VyIDAuNjM0ICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTQyICBwb3dlciAwLjA2MzQgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDMgIHBvd2VyIDAuNjM1ICAwLjUgLT4gMC43OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTQ0ICBwb3dlciAwLjA2MzUgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDUgIHBvd2VyIDAuNjM2ICAwLjUgLT4gMC43OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTQ2ICBwb3dlciAwLjA2MzYgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDcgIHBvd2VyIDAuNjM3ICAwLjUgLT4gMC43OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTQ4ICBwb3dlciAwLjA2MzcgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNDkgIHBvd2VyIDAuNjM4ICAwLjUgLT4gMC43OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTUwICBwb3dlciAwLjA2MzggIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTEgIHBvd2VyIDAuNjM5ICAwLjUgLT4gMC43OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTUyICBwb3dlciAwLjA2MzkgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTMgIHBvd2VyIDAuNjQxICAwLjUgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTU0ICBwb3dlciAwLjA2NDEgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTUgIHBvd2VyIDAuNjQyICAwLjUgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTU2ICBwb3dlciAwLjA2NDIgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTcgIHBvd2VyIDAuNjQzICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTU4ICBwb3dlciAwLjA2NDMgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNTkgIHBvd2VyIDAuNjQ0ICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTYwICBwb3dlciAwLjA2NDQgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjEgIHBvd2VyIDAuNjQ1ICAwLjUgLT4gMC44MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTYyICBwb3dlciAwLjA2NDUgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjMgIHBvd2VyIDAuNjQ2ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTY0ICBwb3dlciAwLjA2NDYgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjUgIHBvd2VyIDAuNjQ3ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTY2ICBwb3dlciAwLjA2NDcgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjcgIHBvd2VyIDAuNjQ4ICAwLjUgLT4gMC44MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTY4ICBwb3dlciAwLjA2NDggIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNjkgIHBvd2VyIDAuNjQ5ICAwLjUgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTcwICBwb3dlciAwLjA2NDkgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzEgIHBvd2VyIDAuNjUxICAwLjUgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTcyICBwb3dlciAwLjA2NTEgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzMgIHBvd2VyIDAuNjUyICAwLjUgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTc0ICBwb3dlciAwLjA2NTIgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzUgIHBvd2VyIDAuNjUzICAwLjUgLT4gMC44MDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTc2ICBwb3dlciAwLjA2NTMgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzcgIHBvd2VyIDAuNjU0ICAwLjUgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTc4ICBwb3dlciAwLjA2NTQgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxNzkgIHBvd2VyIDAuNjU1ICAwLjUgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTgwICBwb3dlciAwLjA2NTUgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODEgIHBvd2VyIDAuNjU2ICAwLjUgLT4gMC44MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTgyICBwb3dlciAwLjA2NTYgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODMgIHBvd2VyIDAuNjU3ICAwLjUgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTg0ICBwb3dlciAwLjA2NTcgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODUgIHBvd2VyIDAuNjU4ICAwLjUgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTg2ICBwb3dlciAwLjA2NTggIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODcgIHBvd2VyIDAuNjU5ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTg4ICBwb3dlciAwLjA2NTkgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxODkgIHBvd2VyIDAuNjYxICAwLjUgLT4gMC44MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTkwICBwb3dlciAwLjA2NjEgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTEgIHBvd2VyIDAuNjYyICAwLjUgLT4gMC44MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTkyICBwb3dlciAwLjA2NjIgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTMgIHBvd2VyIDAuNjYzICAwLjUgLT4gMC44MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTk0ICBwb3dlciAwLjA2NjMgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTUgIHBvd2VyIDAuNjY0ICAwLjUgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTk2ICBwb3dlciAwLjA2NjQgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTcgIHBvd2VyIDAuNjY1ICAwLjUgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MTk4ICBwb3dlciAwLjA2NjUgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQxOTkgIHBvd2VyIDAuNjY2ICAwLjUgLT4gMC44MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjAwICBwb3dlciAwLjA2NjYgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDEgIHBvd2VyIDAuNjY3ICAwLjUgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjAyICBwb3dlciAwLjA2NjcgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDMgIHBvd2VyIDAuNjY4ICAwLjUgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjA0ICBwb3dlciAwLjA2NjggIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDUgIHBvd2VyIDAuNjY5ICAwLjUgLT4gMC44MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjA2ICBwb3dlciAwLjA2NjkgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDcgIHBvd2VyIDAuNjcxICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjA4ICBwb3dlciAwLjA2NzEgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMDkgIHBvd2VyIDAuNjcyICAwLjUgLT4gMC44MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjEwICBwb3dlciAwLjA2NzIgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTEgIHBvd2VyIDAuNjczICAwLjUgLT4gMC44MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjEyICBwb3dlciAwLjA2NzMgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTMgIHBvd2VyIDAuNjc0ICAwLjUgLT4gMC44MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjE0ICBwb3dlciAwLjA2NzQgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTUgIHBvd2VyIDAuNjc1ICAwLjUgLT4gMC44MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjE2ICBwb3dlciAwLjA2NzUgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTcgIHBvd2VyIDAuNjc2ICAwLjUgLT4gMC44MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjE4ICBwb3dlciAwLjA2NzYgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMTkgIHBvd2VyIDAuNjc3ICAwLjUgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjIwICBwb3dlciAwLjA2NzcgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjEgIHBvd2VyIDAuNjc4ICAwLjUgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjIyICBwb3dlciAwLjA2NzggIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjMgIHBvd2VyIDAuNjc5ICAwLjUgLT4gMC44MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjI0ICBwb3dlciAwLjA2NzkgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjUgIHBvd2VyIDAuNjgxICAwLjUgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjI2ICBwb3dlciAwLjA2ODEgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjcgIHBvd2VyIDAuNjgyICAwLjUgLT4gMC44MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjI4ICBwb3dlciAwLjA2ODIgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMjkgIHBvd2VyIDAuNjgzICAwLjUgLT4gMC44MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjMwICBwb3dlciAwLjA2ODMgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzEgIHBvd2VyIDAuNjg0ICAwLjUgLT4gMC44MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjMyICBwb3dlciAwLjA2ODQgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzMgIHBvd2VyIDAuNjg1ICAwLjUgLT4gMC44MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjM0ICBwb3dlciAwLjA2ODUgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzUgIHBvd2VyIDAuNjg2ICAwLjUgLT4gMC44MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjM2ICBwb3dlciAwLjA2ODYgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzcgIHBvd2VyIDAuNjg3ICAwLjUgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjM4ICBwb3dlciAwLjA2ODcgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyMzkgIHBvd2VyIDAuNjg4ICAwLjUgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjQwICBwb3dlciAwLjA2ODggIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDEgIHBvd2VyIDAuNjg5ICAwLjUgLT4gMC44MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjQyICBwb3dlciAwLjA2ODkgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDMgIHBvd2VyIDAuNjkxICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjQ0ICBwb3dlciAwLjA2OTEgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDUgIHBvd2VyIDAuNjkyICAwLjUgLT4gMC44MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjQ2ICBwb3dlciAwLjA2OTIgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDcgIHBvd2VyIDAuNjkzICAwLjUgLT4gMC44MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjQ4ICBwb3dlciAwLjA2OTMgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNDkgIHBvd2VyIDAuNjk0ICAwLjUgLT4gMC44MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjUwICBwb3dlciAwLjA2OTQgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTEgIHBvd2VyIDAuNjk1ICAwLjUgLT4gMC44MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjUyICBwb3dlciAwLjA2OTUgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTMgIHBvd2VyIDAuNjk2ICAwLjUgLT4gMC44MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjU0ICBwb3dlciAwLjA2OTYgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTUgIHBvd2VyIDAuNjk3ICAwLjUgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjU2ICBwb3dlciAwLjA2OTcgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTcgIHBvd2VyIDAuNjk4ICAwLjUgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjU4ICBwb3dlciAwLjA2OTggIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNTkgIHBvd2VyIDAuNjk5ICAwLjUgLT4gMC44MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjYwICBwb3dlciAwLjA2OTkgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjEgIHBvd2VyIDAuNzAxICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjYyICBwb3dlciAwLjA3MDEgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjMgIHBvd2VyIDAuNzAyICAwLjUgLT4gMC44MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjY0ICBwb3dlciAwLjA3MDIgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjUgIHBvd2VyIDAuNzAzICAwLjUgLT4gMC44MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjY2ICBwb3dlciAwLjA3MDMgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjcgIHBvd2VyIDAuNzA0ICAwLjUgLT4gMC44MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjY4ICBwb3dlciAwLjA3MDQgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNjkgIHBvd2VyIDAuNzA1ICAwLjUgLT4gMC44NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjcwICBwb3dlciAwLjA3MDUgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzEgIHBvd2VyIDAuNzA2ICAwLjUgLT4gMC44NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjcyICBwb3dlciAwLjA3MDYgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzMgIHBvd2VyIDAuNzA3ICAwLjUgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjc0ICBwb3dlciAwLjA3MDcgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzUgIHBvd2VyIDAuNzA4ICAwLjUgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjc2ICBwb3dlciAwLjA3MDggIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzcgIHBvd2VyIDAuNzA5ICAwLjUgLT4gMC44NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjc4ICBwb3dlciAwLjA3MDkgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyNzkgIHBvd2VyIDAuNzExICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjgwICBwb3dlciAwLjA3MTEgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODEgIHBvd2VyIDAuNzEyICAwLjUgLT4gMC44NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjgyICBwb3dlciAwLjA3MTIgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODMgIHBvd2VyIDAuNzEzICAwLjUgLT4gMC44NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjg0ICBwb3dlciAwLjA3MTMgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODUgIHBvd2VyIDAuNzE0ICAwLjUgLT4gMC44NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjg2ICBwb3dlciAwLjA3MTQgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODcgIHBvd2VyIDAuNzE1ICAwLjUgLT4gMC44NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjg4ICBwb3dlciAwLjA3MTUgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyODkgIHBvd2VyIDAuNzE2ICAwLjUgLT4gMC44NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjkwICBwb3dlciAwLjA3MTYgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTEgIHBvd2VyIDAuNzE3ICAwLjUgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MjkyICBwb3dlciAwLjA3MTcgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTMgIHBvd2VyIDAuNzE4ICAwLjUgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjk0ICBwb3dlciAwLjA3MTggIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTUgIHBvd2VyIDAuNzE5ICAwLjUgLT4gMC44NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjk2ICBwb3dlciAwLjA3MTkgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTcgIHBvd2VyIDAuNzIxICAwLjUgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mjk4ICBwb3dlciAwLjA3MjEgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQyOTkgIHBvd2VyIDAuNzIyICAwLjUgLT4gMC44NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzAwICBwb3dlciAwLjA3MjIgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDEgIHBvd2VyIDAuNzIzICAwLjUgLT4gMC44NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzAyICBwb3dlciAwLjA3MjMgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDMgIHBvd2VyIDAuNzI0ICAwLjUgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzA0ICBwb3dlciAwLjA3MjQgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDUgIHBvd2VyIDAuNzI1ICAwLjUgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzA2ICBwb3dlciAwLjA3MjUgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDcgIHBvd2VyIDAuNzI2ICAwLjUgLT4gMC44NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzA4ICBwb3dlciAwLjA3MjYgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMDkgIHBvd2VyIDAuNzI3ICAwLjUgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzEwICBwb3dlciAwLjA3MjcgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTEgIHBvd2VyIDAuNzI4ICAwLjUgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzEyICBwb3dlciAwLjA3MjggIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTMgIHBvd2VyIDAuNzI5ICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzE0ICBwb3dlciAwLjA3MjkgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTUgIHBvd2VyIDAuNzMxICAwLjUgLT4gMC44NTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzE2ICBwb3dlciAwLjA3MzEgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTcgIHBvd2VyIDAuNzMyICAwLjUgLT4gMC44NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzE4ICBwb3dlciAwLjA3MzIgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMTkgIHBvd2VyIDAuNzMzICAwLjUgLT4gMC44NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzIwICBwb3dlciAwLjA3MzMgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjEgIHBvd2VyIDAuNzM0ICAwLjUgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzIyICBwb3dlciAwLjA3MzQgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjMgIHBvd2VyIDAuNzM1ICAwLjUgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzI0ICBwb3dlciAwLjA3MzUgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjUgIHBvd2VyIDAuNzM2ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzI2ICBwb3dlciAwLjA3MzYgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjcgIHBvd2VyIDAuNzM3ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzI4ICBwb3dlciAwLjA3MzcgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMjkgIHBvd2VyIDAuNzM4ICAwLjUgLT4gMC44NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzMwICBwb3dlciAwLjA3MzggIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzEgIHBvd2VyIDAuNzM5ICAwLjUgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzMyICBwb3dlciAwLjA3MzkgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzMgIHBvd2VyIDAuNzQxICAwLjUgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzM0ICBwb3dlciAwLjA3NDEgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzUgIHBvd2VyIDAuNzQyICAwLjUgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzM2ICBwb3dlciAwLjA3NDIgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzcgIHBvd2VyIDAuNzQzICAwLjUgLT4gMC44NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzM4ICBwb3dlciAwLjA3NDMgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzMzkgIHBvd2VyIDAuNzQ0ICAwLjUgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzQwICBwb3dlciAwLjA3NDQgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDEgIHBvd2VyIDAuNzQ1ICAwLjUgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzQyICBwb3dlciAwLjA3NDUgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDMgIHBvd2VyIDAuNzQ2ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzQ0ICBwb3dlciAwLjA3NDYgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDUgIHBvd2VyIDAuNzQ3ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzQ2ICBwb3dlciAwLjA3NDcgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDcgIHBvd2VyIDAuNzQ4ICAwLjUgLT4gMC44NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzQ4ICBwb3dlciAwLjA3NDggIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNDkgIHBvd2VyIDAuNzQ5ICAwLjUgLT4gMC44NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzUwICBwb3dlciAwLjA3NDkgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTEgIHBvd2VyIDAuNzUxICAwLjUgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzUyICBwb3dlciAwLjA3NTEgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTMgIHBvd2VyIDAuNzUyICAwLjUgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzU0ICBwb3dlciAwLjA3NTIgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTUgIHBvd2VyIDAuNzUzICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzU2ICBwb3dlciAwLjA3NTMgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTcgIHBvd2VyIDAuNzU0ICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzU4ICBwb3dlciAwLjA3NTQgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNTkgIHBvd2VyIDAuNzU1ICAwLjUgLT4gMC44NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzYwICBwb3dlciAwLjA3NTUgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjEgIHBvd2VyIDAuNzU2ICAwLjUgLT4gMC44NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzYyICBwb3dlciAwLjA3NTYgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjMgIHBvd2VyIDAuNzU3ICAwLjUgLT4gMC44NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzY0ICBwb3dlciAwLjA3NTcgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjUgIHBvd2VyIDAuNzU4ICAwLjUgLT4gMC44NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzY2ICBwb3dlciAwLjA3NTggIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjcgIHBvd2VyIDAuNzU5ICAwLjUgLT4gMC44NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzY4ICBwb3dlciAwLjA3NTkgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNjkgIHBvd2VyIDAuNzYxICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzcwICBwb3dlciAwLjA3NjEgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzEgIHBvd2VyIDAuNzYyICAwLjUgLT4gMC44NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzcyICBwb3dlciAwLjA3NjIgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzMgIHBvd2VyIDAuNzYzICAwLjUgLT4gMC44NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzc0ICBwb3dlciAwLjA3NjMgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzUgIHBvd2VyIDAuNzY0ICAwLjUgLT4gMC44NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzc2ICBwb3dlciAwLjA3NjQgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzcgIHBvd2VyIDAuNzY1ICAwLjUgLT4gMC44NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzc4ICBwb3dlciAwLjA3NjUgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzNzkgIHBvd2VyIDAuNzY2ICAwLjUgLT4gMC44NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzgwICBwb3dlciAwLjA3NjYgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODEgIHBvd2VyIDAuNzY3ICAwLjUgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzgyICBwb3dlciAwLjA3NjcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODMgIHBvd2VyIDAuNzY4ICAwLjUgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzg0ICBwb3dlciAwLjA3NjggIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODUgIHBvd2VyIDAuNzY5ICAwLjUgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzg2ICBwb3dlciAwLjA3NjkgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODcgIHBvd2VyIDAuNzcxICAwLjUgLT4gMC44NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzg4ICBwb3dlciAwLjA3NzEgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzODkgIHBvd2VyIDAuNzcyICAwLjUgLT4gMC44NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzkwICBwb3dlciAwLjA3NzIgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTEgIHBvd2VyIDAuNzczICAwLjUgLT4gMC44NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0MzkyICBwb3dlciAwLjA3NzMgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTMgIHBvd2VyIDAuNzc0ICAwLjUgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzk0ICBwb3dlciAwLjA3NzQgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTUgIHBvd2VyIDAuNzc1ICAwLjUgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzk2ICBwb3dlciAwLjA3NzUgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTcgIHBvd2VyIDAuNzc2ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Mzk4ICBwb3dlciAwLjA3NzYgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQzOTkgIHBvd2VyIDAuNzc3ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDAwICBwb3dlciAwLjA3NzcgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDEgIHBvd2VyIDAuNzc4ICAwLjUgLT4gMC44ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDAyICBwb3dlciAwLjA3NzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDMgIHBvd2VyIDAuNzc5ICAwLjUgLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDA0ICBwb3dlciAwLjA3NzkgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDUgIHBvd2VyIDAuNzgxICAwLjUgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDA2ICBwb3dlciAwLjA3ODEgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDcgIHBvd2VyIDAuNzgyICAwLjUgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDA4ICBwb3dlciAwLjA3ODIgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MDkgIHBvd2VyIDAuNzgzICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDEwICBwb3dlciAwLjA3ODMgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTEgIHBvd2VyIDAuNzg0ICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDEyICBwb3dlciAwLjA3ODQgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTMgIHBvd2VyIDAuNzg1ICAwLjUgLT4gMC44ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDE0ICBwb3dlciAwLjA3ODUgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTUgIHBvd2VyIDAuNzg2ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDE2ICBwb3dlciAwLjA3ODYgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTcgIHBvd2VyIDAuNzg3ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDE4ICBwb3dlciAwLjA3ODcgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MTkgIHBvd2VyIDAuNzg4ICAwLjUgLT4gMC44ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDIwICBwb3dlciAwLjA3ODggIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjEgIHBvd2VyIDAuNzg5ICAwLjUgLT4gMC44ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDIyICBwb3dlciAwLjA3ODkgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjMgIHBvd2VyIDAuNzkxICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDI0ICBwb3dlciAwLjA3OTEgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjUgIHBvd2VyIDAuNzkyICAwLjUgLT4gMC44OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDI2ICBwb3dlciAwLjA3OTIgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjcgIHBvd2VyIDAuNzkzICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDI4ICBwb3dlciAwLjA3OTMgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MjkgIHBvd2VyIDAuNzk0ICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDMwICBwb3dlciAwLjA3OTQgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzEgIHBvd2VyIDAuNzk1ICAwLjUgLT4gMC44OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDMyICBwb3dlciAwLjA3OTUgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzMgIHBvd2VyIDAuNzk2ICAwLjUgLT4gMC44OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDM0ICBwb3dlciAwLjA3OTYgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzUgIHBvd2VyIDAuNzk3ICAwLjUgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDM2ICBwb3dlciAwLjA3OTcgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzcgIHBvd2VyIDAuNzk4ICAwLjUgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDM4ICBwb3dlciAwLjA3OTggIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0MzkgIHBvd2VyIDAuNzk5ICAwLjUgLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDQwICBwb3dlciAwLjA3OTkgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDEgIHBvd2VyIDAuODAxICAwLjUgLT4gMC44OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDQyICBwb3dlciAwLjA4MDEgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDMgIHBvd2VyIDAuODAyICAwLjUgLT4gMC44OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDQ0ICBwb3dlciAwLjA4MDIgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDUgIHBvd2VyIDAuODAzICAwLjUgLT4gMC44OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDQ2ICBwb3dlciAwLjA4MDMgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDcgIHBvd2VyIDAuODA0ICAwLjUgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDQ4ICBwb3dlciAwLjA4MDQgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NDkgIHBvd2VyIDAuODA1ICAwLjUgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDUwICBwb3dlciAwLjA4MDUgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTEgIHBvd2VyIDAuODA2ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDUyICBwb3dlciAwLjA4MDYgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTMgIHBvd2VyIDAuODA3ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDU0ICBwb3dlciAwLjA4MDcgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTUgIHBvd2VyIDAuODA4ICAwLjUgLT4gMC44OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDU2ICBwb3dlciAwLjA4MDggIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTcgIHBvd2VyIDAuODA5ICAwLjUgLT4gMC44OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDU4ICBwb3dlciAwLjA4MDkgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NTkgIHBvd2VyIDAuODExICAwLjUgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDYwICBwb3dlciAwLjA4MTEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjEgIHBvd2VyIDAuODEyICAwLjUgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDYyICBwb3dlciAwLjA4MTIgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjMgIHBvd2VyIDAuODEzICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDY0ICBwb3dlciAwLjA4MTMgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjUgIHBvd2VyIDAuODE0ICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDY2ICBwb3dlciAwLjA4MTQgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjcgIHBvd2VyIDAuODE1ICAwLjUgLT4gMC45MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDY4ICBwb3dlciAwLjA4MTUgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NjkgIHBvd2VyIDAuODE2ICAwLjUgLT4gMC45MDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDcwICBwb3dlciAwLjA4MTYgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzEgIHBvd2VyIDAuODE3ICAwLjUgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDcyICBwb3dlciAwLjA4MTcgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzMgIHBvd2VyIDAuODE4ICAwLjUgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDc0ICBwb3dlciAwLjA4MTggIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzUgIHBvd2VyIDAuODE5ICAwLjUgLT4gMC45MDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDc2ICBwb3dlciAwLjA4MTkgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzcgIHBvd2VyIDAuODIxICAwLjUgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDc4ICBwb3dlciAwLjA4MjEgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0NzkgIHBvd2VyIDAuODIyICAwLjUgLT4gMC45MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDgwICBwb3dlciAwLjA4MjIgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODEgIHBvd2VyIDAuODIzICAwLjUgLT4gMC45MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDgyICBwb3dlciAwLjA4MjMgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODMgIHBvd2VyIDAuODI0ICAwLjUgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDg0ICBwb3dlciAwLjA4MjQgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODUgIHBvd2VyIDAuODI1ICAwLjUgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDg2ICBwb3dlciAwLjA4MjUgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODcgIHBvd2VyIDAuODI2ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDg4ICBwb3dlciAwLjA4MjYgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0ODkgIHBvd2VyIDAuODI3ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDkwICBwb3dlciAwLjA4MjcgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTEgIHBvd2VyIDAuODI4ICAwLjUgLT4gMC45MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDkyICBwb3dlciAwLjA4MjggIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTMgIHBvd2VyIDAuODI5ICAwLjUgLT4gMC45MTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDk0ICBwb3dlciAwLjA4MjkgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTUgIHBvd2VyIDAuODMxICAwLjUgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDk2ICBwb3dlciAwLjA4MzEgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTcgIHBvd2VyIDAuODMyICAwLjUgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NDk4ICBwb3dlciAwLjA4MzIgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ0OTkgIHBvd2VyIDAuODMzICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTAwICBwb3dlciAwLjA4MzMgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDEgIHBvd2VyIDAuODM0ICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTAyICBwb3dlciAwLjA4MzQgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDMgIHBvd2VyIDAuODM1ICAwLjUgLT4gMC45MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTA0ICBwb3dlciAwLjA4MzUgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDUgIHBvd2VyIDAuODM2ICAwLjUgLT4gMC45MTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTA2ICBwb3dlciAwLjA4MzYgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDcgIHBvd2VyIDAuODM3ICAwLjUgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTA4ICBwb3dlciAwLjA4MzcgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MDkgIHBvd2VyIDAuODM4ICAwLjUgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTEwICBwb3dlciAwLjA4MzggIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTEgIHBvd2VyIDAuODM5ICAwLjUgLT4gMC45MTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTEyICBwb3dlciAwLjA4MzkgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTMgIHBvd2VyIDAuODQxICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTE0ICBwb3dlciAwLjA4NDEgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTUgIHBvd2VyIDAuODQyICAwLjUgLT4gMC45MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTE2ICBwb3dlciAwLjA4NDIgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTcgIHBvd2VyIDAuODQzICAwLjUgLT4gMC45MTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTE4ICBwb3dlciAwLjA4NDMgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MTkgIHBvd2VyIDAuODQ0ICAwLjUgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTIwICBwb3dlciAwLjA4NDQgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjEgIHBvd2VyIDAuODQ1ICAwLjUgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTIyICBwb3dlciAwLjA4NDUgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjMgIHBvd2VyIDAuODQ2ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTI0ICBwb3dlciAwLjA4NDYgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjUgIHBvd2VyIDAuODQ3ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTI2ICBwb3dlciAwLjA4NDcgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjcgIHBvd2VyIDAuODQ4ICAwLjUgLT4gMC45MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTI4ICBwb3dlciAwLjA4NDggIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MjkgIHBvd2VyIDAuODQ5ICAwLjUgLT4gMC45MjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTMwICBwb3dlciAwLjA4NDkgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzEgIHBvd2VyIDAuODUxICAwLjUgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTMyICBwb3dlciAwLjA4NTEgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzMgIHBvd2VyIDAuODUyICAwLjUgLT4gMC45MjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTM0ICBwb3dlciAwLjA4NTIgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzUgIHBvd2VyIDAuODUzICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTM2ICBwb3dlciAwLjA4NTMgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzcgIHBvd2VyIDAuODU0ICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTM4ICBwb3dlciAwLjA4NTQgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1MzkgIHBvd2VyIDAuODU1ICAwLjUgLT4gMC45MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTQwICBwb3dlciAwLjA4NTUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDEgIHBvd2VyIDAuODU2ICAwLjUgLT4gMC45MjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTQyICBwb3dlciAwLjA4NTYgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDMgIHBvd2VyIDAuODU3ICAwLjUgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTQ0ICBwb3dlciAwLjA4NTcgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDUgIHBvd2VyIDAuODU4ICAwLjUgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTQ2ICBwb3dlciAwLjA4NTggIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDcgIHBvd2VyIDAuODU5ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTQ4ICBwb3dlciAwLjA4NTkgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NDkgIHBvd2VyIDAuODYxICAwLjUgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTUwICBwb3dlciAwLjA4NjEgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTEgIHBvd2VyIDAuODYyICAwLjUgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTUyICBwb3dlciAwLjA4NjIgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTMgIHBvd2VyIDAuODYzICAwLjUgLT4gMC45MjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTU0ICBwb3dlciAwLjA4NjMgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTUgIHBvd2VyIDAuODY0ICAwLjUgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTU2ICBwb3dlciAwLjA4NjQgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTcgIHBvd2VyIDAuODY1ICAwLjUgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTU4ICBwb3dlciAwLjA4NjUgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NTkgIHBvd2VyIDAuODY2ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTYwICBwb3dlciAwLjA4NjYgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjEgIHBvd2VyIDAuODY3ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTYyICBwb3dlciAwLjA4NjcgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjMgIHBvd2VyIDAuODY4ICAwLjUgLT4gMC45MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTY0ICBwb3dlciAwLjA4NjggIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjUgIHBvd2VyIDAuODY5ICAwLjUgLT4gMC45MzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTY2ICBwb3dlciAwLjA4NjkgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjcgIHBvd2VyIDAuODcxICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTY4ICBwb3dlciAwLjA4NzEgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NjkgIHBvd2VyIDAuODcyICAwLjUgLT4gMC45MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTcwICBwb3dlciAwLjA4NzIgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzEgIHBvd2VyIDAuODczICAwLjUgLT4gMC45MzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTcyICBwb3dlciAwLjA4NzMgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzMgIHBvd2VyIDAuODc0ICAwLjUgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTc0ICBwb3dlciAwLjA4NzQgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzUgIHBvd2VyIDAuODc1ICAwLjUgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTc2ICBwb3dlciAwLjA4NzUgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzcgIHBvd2VyIDAuODc2ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTc4ICBwb3dlciAwLjA4NzYgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1NzkgIHBvd2VyIDAuODc3ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTgwICBwb3dlciAwLjA4NzcgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODEgIHBvd2VyIDAuODc4ICAwLjUgLT4gMC45MzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTgyICBwb3dlciAwLjA4NzggIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODMgIHBvd2VyIDAuODc5ICAwLjUgLT4gMC45MzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTg0ICBwb3dlciAwLjA4NzkgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODUgIHBvd2VyIDAuODgxICAwLjUgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTg2ICBwb3dlciAwLjA4ODEgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODcgIHBvd2VyIDAuODgyICAwLjUgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTg4ICBwb3dlciAwLjA4ODIgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1ODkgIHBvd2VyIDAuODgzICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTkwICBwb3dlciAwLjA4ODMgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTEgIHBvd2VyIDAuODg0ICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTkyICBwb3dlciAwLjA4ODQgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTMgIHBvd2VyIDAuODg1ICAwLjUgLT4gMC45NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTk0ICBwb3dlciAwLjA4ODUgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTUgIHBvd2VyIDAuODg2ICAwLjUgLT4gMC45NDEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTk2ICBwb3dlciAwLjA4ODYgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTcgIHBvd2VyIDAuODg3ICAwLjUgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NTk4ICBwb3dlciAwLjA4ODcgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ1OTkgIHBvd2VyIDAuODg4ICAwLjUgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjAwICBwb3dlciAwLjA4ODggIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDEgIHBvd2VyIDAuODg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjAyICBwb3dlciAwLjA4ODkgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDMgIHBvd2VyIDAuODkxICAwLjUgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjA0ICBwb3dlciAwLjA4OTEgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDUgIHBvd2VyIDAuODkyICAwLjUgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjA2ICBwb3dlciAwLjA4OTIgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDcgIHBvd2VyIDAuODkzICAwLjUgLT4gMC45NDUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjA4ICBwb3dlciAwLjA4OTMgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MDkgIHBvd2VyIDAuODk0ICAwLjUgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjEwICBwb3dlciAwLjA4OTQgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTEgIHBvd2VyIDAuODk1ICAwLjUgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjEyICBwb3dlciAwLjA4OTUgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTMgIHBvd2VyIDAuODk2ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjE0ICBwb3dlciAwLjA4OTYgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTUgIHBvd2VyIDAuODk3ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjE2ICBwb3dlciAwLjA4OTcgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTcgIHBvd2VyIDAuODk4ICAwLjUgLT4gMC45NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjE4ICBwb3dlciAwLjA4OTggIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MTkgIHBvd2VyIDAuODk5ICAwLjUgLT4gMC45NDggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjIwICBwb3dlciAwLjA4OTkgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjEgIHBvd2VyIDAuOTAxICAwLjUgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjIyICBwb3dlciAwLjA5MDEgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjMgIHBvd2VyIDAuOTAyICAwLjUgLT4gMC45NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjI0ICBwb3dlciAwLjA5MDIgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjUgIHBvd2VyIDAuOTAzICAwLjUgLT4gMC45NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjI2ICBwb3dlciAwLjA5MDMgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjcgIHBvd2VyIDAuOTA0ICAwLjUgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjI4ICBwb3dlciAwLjA5MDQgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MjkgIHBvd2VyIDAuOTA1ICAwLjUgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjMwICBwb3dlciAwLjA5MDUgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzEgIHBvd2VyIDAuOTA2ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjMyICBwb3dlciAwLjA5MDYgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzMgIHBvd2VyIDAuOTA3ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjM0ICBwb3dlciAwLjA5MDcgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzUgIHBvd2VyIDAuOTA4ICAwLjUgLT4gMC45NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjM2ICBwb3dlciAwLjA5MDggIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzcgIHBvd2VyIDAuOTA5ICAwLjUgLT4gMC45NTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjM4ICBwb3dlciAwLjA5MDkgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2MzkgIHBvd2VyIDAuOTExICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjQwICBwb3dlciAwLjA5MTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDEgIHBvd2VyIDAuOTEyICAwLjUgLT4gMC45NTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjQyICBwb3dlciAwLjA5MTIgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDMgIHBvd2VyIDAuOTEzICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjQ0ICBwb3dlciAwLjA5MTMgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDUgIHBvd2VyIDAuOTE0ICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjQ2ICBwb3dlciAwLjA5MTQgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDcgIHBvd2VyIDAuOTE1ICAwLjUgLT4gMC45NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjQ4ICBwb3dlciAwLjA5MTUgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NDkgIHBvd2VyIDAuOTE2ICAwLjUgLT4gMC45NTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjUwICBwb3dlciAwLjA5MTYgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTEgIHBvd2VyIDAuOTE3ICAwLjUgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjUyICBwb3dlciAwLjA5MTcgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTMgIHBvd2VyIDAuOTE4ICAwLjUgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjU0ICBwb3dlciAwLjA5MTggIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTUgIHBvd2VyIDAuOTE5ICAwLjUgLT4gMC45NTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjU2ICBwb3dlciAwLjA5MTkgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTcgIHBvd2VyIDAuOTIxICAwLjUgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjU4ICBwb3dlciAwLjA5MjEgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NTkgIHBvd2VyIDAuOTIyICAwLjUgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjYwICBwb3dlciAwLjA5MjIgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjEgIHBvd2VyIDAuOTIzICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjYyICBwb3dlciAwLjA5MjMgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjMgIHBvd2VyIDAuOTI0ICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjY0ICBwb3dlciAwLjA5MjQgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjUgIHBvd2VyIDAuOTI1ICAwLjUgLT4gMC45NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjY2ICBwb3dlciAwLjA5MjUgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjcgIHBvd2VyIDAuOTI2ICAwLjUgLT4gMC45NjIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjY4ICBwb3dlciAwLjA5MjYgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NjkgIHBvd2VyIDAuOTI3ICAwLjUgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjcwICBwb3dlciAwLjA5MjcgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzEgIHBvd2VyIDAuOTI4ICAwLjUgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjcyICBwb3dlciAwLjA5MjggIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzMgIHBvd2VyIDAuOTI5ICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njc0ICBwb3dlciAwLjA5MjkgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzUgIHBvd2VyIDAuOTMxICAwLjUgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njc2ICBwb3dlciAwLjA5MzEgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzcgIHBvd2VyIDAuOTMyICAwLjUgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njc4ICBwb3dlciAwLjA5MzIgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2NzkgIHBvd2VyIDAuOTMzICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjgwICBwb3dlciAwLjA5MzMgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODEgIHBvd2VyIDAuOTM0ICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjgyICBwb3dlciAwLjA5MzQgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODMgIHBvd2VyIDAuOTM1ICAwLjUgLT4gMC45NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njg0ICBwb3dlciAwLjA5MzUgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODUgIHBvd2VyIDAuOTM2ICAwLjUgLT4gMC45NjcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njg2ICBwb3dlciAwLjA5MzYgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODcgIHBvd2VyIDAuOTM3ICAwLjUgLT4gMC45NjggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njg4ICBwb3dlciAwLjA5MzcgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2ODkgIHBvd2VyIDAuOTM4ICAwLjUgLT4gMC45NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjkwICBwb3dlciAwLjA5MzggIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTEgIHBvd2VyIDAuOTM5ICAwLjUgLT4gMC45NjkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NjkyICBwb3dlciAwLjA5MzkgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTMgIHBvd2VyIDAuOTQxICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njk0ICBwb3dlciAwLjA5NDEgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTUgIHBvd2VyIDAuOTQyICAwLjUgLT4gMC45NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njk2ICBwb3dlciAwLjA5NDIgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTcgIHBvd2VyIDAuOTQzICAwLjUgLT4gMC45NzEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Njk4ICBwb3dlciAwLjA5NDMgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ2OTkgIHBvd2VyIDAuOTQ0ICAwLjUgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzAwICBwb3dlciAwLjA5NDQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDEgIHBvd2VyIDAuOTQ1ICAwLjUgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzAyICBwb3dlciAwLjA5NDUgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDMgIHBvd2VyIDAuOTQ2ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzA0ICBwb3dlciAwLjA5NDYgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDUgIHBvd2VyIDAuOTQ3ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzA2ICBwb3dlciAwLjA5NDcgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDcgIHBvd2VyIDAuOTQ4ICAwLjUgLT4gMC45NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzA4ICBwb3dlciAwLjA5NDggIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MDkgIHBvd2VyIDAuOTQ5ICAwLjUgLT4gMC45NzQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzEwICBwb3dlciAwLjA5NDkgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTEgIHBvd2VyIDAuOTUxICAwLjUgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzEyICBwb3dlciAwLjA5NTEgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTMgIHBvd2VyIDAuOTUyICAwLjUgLT4gMC45NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzE0ICBwb3dlciAwLjA5NTIgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTUgIHBvd2VyIDAuOTUzICAwLjUgLT4gMC45NzYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzE2ICBwb3dlciAwLjA5NTMgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTcgIHBvd2VyIDAuOTU0ICAwLjUgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzE4ICBwb3dlciAwLjA5NTQgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MTkgIHBvd2VyIDAuOTU1ICAwLjUgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzIwICBwb3dlciAwLjA5NTUgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjEgIHBvd2VyIDAuOTU2ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzIyICBwb3dlciAwLjA5NTYgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjMgIHBvd2VyIDAuOTU3ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzI0ICBwb3dlciAwLjA5NTcgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjUgIHBvd2VyIDAuOTU4ICAwLjUgLT4gMC45NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzI2ICBwb3dlciAwLjA5NTggIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjcgIHBvd2VyIDAuOTU5ICAwLjUgLT4gMC45NzkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzI4ICBwb3dlciAwLjA5NTkgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MjkgIHBvd2VyIDAuOTYxICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzMwICBwb3dlciAwLjA5NjEgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzEgIHBvd2VyIDAuOTYyICAwLjUgLT4gMC45ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzMyICBwb3dlciAwLjA5NjIgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzMgIHBvd2VyIDAuOTYzICAwLjUgLT4gMC45ODEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzM0ICBwb3dlciAwLjA5NjMgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzUgIHBvd2VyIDAuOTY0ICAwLjUgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzM2ICBwb3dlciAwLjA5NjQgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzcgIHBvd2VyIDAuOTY1ICAwLjUgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzM4ICBwb3dlciAwLjA5NjUgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3MzkgIHBvd2VyIDAuOTY2ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzQwICBwb3dlciAwLjA5NjYgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDEgIHBvd2VyIDAuOTY3ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzQyICBwb3dlciAwLjA5NjcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDMgIHBvd2VyIDAuOTY4ICAwLjUgLT4gMC45ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzQ0ICBwb3dlciAwLjA5NjggIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDUgIHBvd2VyIDAuOTY5ICAwLjUgLT4gMC45ODQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzQ2ICBwb3dlciAwLjA5NjkgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDcgIHBvd2VyIDAuOTcxICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzQ4ICBwb3dlciAwLjA5NzEgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NDkgIHBvd2VyIDAuOTcyICAwLjUgLT4gMC45ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzUwICBwb3dlciAwLjA5NzIgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTEgIHBvd2VyIDAuOTczICAwLjUgLT4gMC45ODYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzUyICBwb3dlciAwLjA5NzMgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTMgIHBvd2VyIDAuOTc0ICAwLjUgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzU0ICBwb3dlciAwLjA5NzQgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTUgIHBvd2VyIDAuOTc1ICAwLjUgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzU2ICBwb3dlciAwLjA5NzUgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTcgIHBvd2VyIDAuOTc2ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzU4ICBwb3dlciAwLjA5NzYgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NTkgIHBvd2VyIDAuOTc3ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzYwICBwb3dlciAwLjA5NzcgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjEgIHBvd2VyIDAuOTc4ICAwLjUgLT4gMC45ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzYyICBwb3dlciAwLjA5NzggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjMgIHBvd2VyIDAuOTc5ICAwLjUgLT4gMC45ODkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzY0ICBwb3dlciAwLjA5NzkgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjUgIHBvd2VyIDAuOTgxICAwLjUgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzY2ICBwb3dlciAwLjA5ODEgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjcgIHBvd2VyIDAuOTgyICAwLjUgLT4gMC45OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzY4ICBwb3dlciAwLjA5ODIgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NjkgIHBvd2VyIDAuOTgzICAwLjUgLT4gMC45OTEgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzcwICBwb3dlciAwLjA5ODMgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzEgIHBvd2VyIDAuOTg0ICAwLjUgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzcyICBwb3dlciAwLjA5ODQgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzMgIHBvd2VyIDAuOTg1ICAwLjUgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzc0ICBwb3dlciAwLjA5ODUgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzUgIHBvd2VyIDAuOTg2ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzc2ICBwb3dlciAwLjA5ODYgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzcgIHBvd2VyIDAuOTg3ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzc4ICBwb3dlciAwLjA5ODcgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3NzkgIHBvd2VyIDAuOTg4ICAwLjUgLT4gMC45OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzgwICBwb3dlciAwLjA5ODggIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODEgIHBvd2VyIDAuOTg5ICAwLjUgLT4gMC45OTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzgyICBwb3dlciAwLjA5ODkgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODMgIHBvd2VyIDAuOTkxICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzg0ICBwb3dlciAwLjA5OTEgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODUgIHBvd2VyIDAuOTkyICAwLjUgLT4gMC45OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzg2ICBwb3dlciAwLjA5OTIgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODcgIHBvd2VyIDAuOTkzICAwLjUgLT4gMC45OTYgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzg4ICBwb3dlciAwLjA5OTMgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3ODkgIHBvd2VyIDAuOTk0ICAwLjUgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzkwICBwb3dlciAwLjA5OTQgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTEgIHBvd2VyIDAuOTk1ICAwLjUgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0NzkyICBwb3dlciAwLjA5OTUgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTMgIHBvd2VyIDAuOTk2ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzk0ICBwb3dlciAwLjA5OTYgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTUgIHBvd2VyIDAuOTk3ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzk2ICBwb3dlciAwLjA5OTcgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTcgIHBvd2VyIDAuOTk4ICAwLjUgLT4gMC45OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0Nzk4ICBwb3dlciAwLjA5OTggIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDQ3OTkgIHBvd2VyIDAuOTk5ICAwLjUgLT4gMC45OTkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g0ODAwICBwb3dlciAwLjA5OTkgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gQSBncm91cCBvZiBwcmVjaXNpb24gNCB0ZXN0cyB3aGVyZSBIdWxsICYgQWJyaGFtIGFkanVzdG1lbnRzIGFyZQ0KLS0tIG5lZWRlZCBpbiBzb21lIGNhc2VzIChib3RoIHVwIGFuZCBkb3duKSBbc2VlIEh1bGwxOTg1Yl0NCi1yb3VuZGluZzogICAgaGFsZl9ldmVuDQotbWF4RXhwb25lbnQ6IDk5OQ0KLW1pbmV4cG9uZW50OiAtOTk5DQotcHJlY2lzaW9uOiAgIDQNCi1wd3N4NTAwMSAgcG93ZXIgMC4wMTE4ICAgMC41IC0+IDAuMTA4NiAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDIgIHBvd2VyIDAuMTE5ICAgIDAuNSAtPiAwLjM0NTAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDAzICBwb3dlciAwLjAxMTkgICAwLjUgLT4gMC4xMDkxICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAwNCAgcG93ZXIgMC4xMjEgICAgMC41IC0+IDAuMzQ3OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDUgIHBvd2VyIDAuMDEyMSAgIDAuNSAtPiAwLjExMDAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDA2ICBwb3dlciAwLjEyMiAgICAwLjUgLT4gMC4zNDkzICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAwNyAgcG93ZXIgMC4wMTIyICAgMC41IC0+IDAuMTEwNSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMDggIHBvd2VyIDAuMTIzICAgIDAuNSAtPiAwLjM1MDcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDA5ICBwb3dlciAwLjQ5NCAgICAwLjUgLT4gMC43MDI5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxMCAgcG93ZXIgMC4wNjY5ICAgMC41IC0+IDAuMjU4NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMTEgIHBvd2VyIDAuOTU1OCAgIDAuNSAtPiAwLjk3NzcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDEyICBwb3dlciAwLjkzNDggICAwLjUgLT4gMC45NjY5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxMyAgcG93ZXIgMC45MzQ1ICAgMC41IC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMTQgIHBvd2VyIDAuMDkzNDUgIDAuNSAtPiAwLjMwNTcgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g1MDE1ICBwb3dlciAwLjkzNDYgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NTAxNiAgcG93ZXIgMC4wOTM0NiAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDUwMTcgIHBvd2VyIDAuOTM0NyAgIDAuNSAtPiAwLjk2NjggIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCi1wcmVjaXNpb246IDkNCi1wd3N4NzAwICBwb3dlciAgMCAgICAgICAgMC41IC0+ICcwJw0KLXB3c3g3MDEgIHBvd2VyICAtMCAgICAgICAwLjUgLT4gJzAnDQotcHdzeDcwMiAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzAzICBwb3dlciAgMTAwICAgICAgMC41IC0+ICcxMC4wMDAwMDAwJyAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MDQgIHBvd2VyICAxLjAwICAgICAwLjUgLT4gJzEuMDAwMDAwMDAnICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcwNSAgcG93ZXIgIDcgICAgICAgIDAuNSAtPiAnMi42NDU3NTEzMScgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzA2ICBwb3dlciAgMTAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgICAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHNvbWUgb25lLW9mZnMNCi1wcmVjaXNpb246IDkNCi1wd3N4NzExICBwb3dlciAgMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2ICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MTIgIHBvd2VyICAwLjIgICAgICAwLjUgLT4gMC40NDcyMTM1OTUgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxMyAgcG93ZXIgIDAuMyAgICAgIDAuNSAtPiAwLjU0NzcyMjU1OCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzE0ICBwb3dlciAgMC40ICAgICAgMC41IC0+IDAuNjMyNDU1NTMyICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MTUgIHBvd2VyICAwLjUgICAgICAwLjUgLT4gMC43MDcxMDY3ODEgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxNiAgcG93ZXIgIDAuNiAgICAgIDAuNSAtPiAwLjc3NDU5NjY2OSAgICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzE3ICBwb3dlciAgMC43ICAgICAgMC41IC0+IDAuODM2NjYwMDI3ICAgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MTggIHBvd2VyICAwLjggICAgICAwLjUgLT4gMC44OTQ0MjcxOTEgICAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDcxOSAgcG93ZXIgIDAuOSAgICAgIDAuNSAtPiAwLjk0ODY4MzI5OCAgICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gbm90ZSBubyBub3JtYWxpemF0b2luIGhlcmUNCi1wd3N4NzIwICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MCAgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTENCi1wd3N4NzIxICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDIgIEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogMTINCi1wd3N4NzIyICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDE3IEluZXhhY3QgUm91bmRlZA0KLXByZWNpc2lvbjogOQ0KLXB3c3g3MjMgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk4MDAgICAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxNQ0KLXB3c3g3MjQgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk3OTk4Mzk4NDAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gZGlzY3Vzc2lvbiBjYXNlcw0KLXByZWNpc2lvbjogNw0KLXB3c3g3MzEgIHBvd2VyICAgICA5ICAgIDAuNSAtPiAzLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDczMiAgcG93ZXIgICAxMDAgICAgMC41IC0+IDEwLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzMzICBwb3dlciAgIDEyMyAgICAwLjUgLT4gMTEuMDkwNTQgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3MzQgIHBvd2VyICAgMTQ0ICAgIDAuNSAtPiAxMi4wMDAwMCAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDczNSAgcG93ZXIgICAxNTYgICAgMC41IC0+IDEyLjQ5MDAwICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzM2ICBwb3dlciAxMDAwMCAgICAwLjUgLT4gMTAwLjAwMDAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLS0tIHZhbHVlcyBjbG9zZSB0byBvdmVyZmxvdyAoaWYgdGhlcmUgd2VyZSBpbnB1dCByb3VuZGluZykNCi1tYXhleHBvbmVudDogOTkNCi1taW5leHBvbmVudDogLTk5DQotcHJlY2lzaW9uOiA1DQotcHdzeDc2MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5OEUrNDkgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2MSAgcG93ZXIgIDkuOTk5OEUrOTkgICAgMC41IC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2NCAgcG93ZXIgIDkuOTk5OTRFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc2NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiA5DQotcHdzeDc3MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5ODUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzcxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5MDAwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3NzIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiA5Ljk5OTk1MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc3MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDkuOTk5OTU1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Nzc0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gOS45OTk5NzAwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3NzUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiA5Ljk5OTk3NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc3NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDkuOTk5OTk1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDIwDQotcHdzeDc4MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+ICc5Ljk5OTg0OTk5ODg3NDk4MzEyNDdFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4NzgxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gJzkuOTk5ODk5OTk5NDk5OTk0OTk5OUUrNDknIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3ODIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiAnOS45OTk5NDk5OTk4NzQ5OTkzNzUwRSs0OScgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc4MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+ICc5Ljk5OTk1NDk5OTg5ODc0OTU0NDRFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4Nzg0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gJzkuOTk5OTY5OTk5OTU0OTk5ODY1MEUrNDknIEluZXhhY3QgUm91bmRlZA0KLXB3c3g3ODUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiAnOS45OTk5NzQ5OTk5Njg3NDk5MjE5RSs0OScgSW5leGFjdCBSb3VuZGVkDQotcHdzeDc4NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+ICc5Ljk5OTk5NDk5OTk5ODc0OTk5OTRFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzIFt0aGVzZSBjYW4gb25seSByZXN1bHQgd2hlbiBlTWF4IGlzIDwgZGlnaXRzKzFdDQotLS0gRXRpbnkgPSAtKEVtYXggKyAocHJlY2lzaW9uLTEpKQ0KLS0tIHN0YXJ0IHdpdGggc3Vibm9ybWFsIG9wZXJhbmRzIGFuZCBub3JtYWwgcmVzdWx0cw0KLW1heGV4cG9uZW50OiA5DQotbWluZXhwb25lbnQ6IC05DQotcHJlY2lzaW9uOiA5ICAgICAgICAgICAgICAgIC0tIEV0aW55PS0xNw0KLXB3c3g4MDAgIHBvd2VyICAxRS0xNyAgICAwLjUgLT4gMy4xNjIyNzc2NkUtOSBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4ODAxICBwb3dlciAxMEUtMTcgICAgMC41IC0+IDEuMDAwMDAwMDBFLTggSW5leGFjdCBSb3VuZGVkDQotcHJlY2lzaW9uOiAxMCAgICAgICAgICAgICAgIC0tIEV0aW55PS0xOA0KLXB3c3g4MDIgIHBvd2VyIDEwRS0xOCAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTkgSW5leGFjdCBSb3VuZGVkDQotcHdzeDgwMyAgcG93ZXIgIDFFLTE4ICAgIDAuNSAtPiAxLjAwMDAwMDAwMEUtOSBJbmV4YWN0IFJvdW5kZWQNCi0NCi1wcmVjaXNpb246IDExICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE5DQotcHdzeDgwNCAgcG93ZXIgIDFFLTE5ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi0tLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXINCi1wd3N4ODA1ICBwb3dlciAxMEUtMTkgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtOSBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDEyICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIwDQotcHdzeDgwNiAgcG93ZXIgMTBFLTIwICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotcHdzeDgwNyAgcG93ZXIgIDFFLTIwICAgIDAuNSAtPiAxLjAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotcHJlY2lzaW9uOiAxMyAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMQ0KLXB3c3g4MDggIHBvd2VyICAxRS0yMSAgICAwLjUgLT4gMy4xNjIyNzc2NjAyRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLXB3c3g4MDkgIHBvd2VyIDEwRS0yMSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1wcmVjaXNpb246IDE0ICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIyDQotcHdzeDgxMCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KLXB3c3g4MTEgIHBvd2VyIDEwRS0yMiAgICAwLjUgLT4gMy4xNjIyNzc2NjAxN0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCi1wd3N4ODEyICBwb3dlciAgMUUtMjIgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQotDQotDQotLS0gc3BlY2lhbCB2YWx1ZXMNCi1tYXhleHBvbmVudDogOTk5DQotbWluZXhwb25lbnQ6IC05OTkNCi1wd3N4ODIwICBwb3dlciAgIEluZiAgICAgMC41IC0+IEluZmluaXR5DQotcHdzeDgyMSAgcG93ZXIgIC1JbmYgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1wd3N4ODIyICBwb3dlciAgIE5hTiAgICAgMC41IC0+IE5hTg0KLXB3c3g4MjMgIHBvd2VyICBzTmFOICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gcHJvcGFnYXRpbmcgTmFOcw0KLXB3c3g4MjQgIHBvd2VyICBzTmFOMTIzICAwLjUgLT4gTmFOMTIzIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDgyNSAgcG93ZXIgLXNOYU4zMjEgIDAuNSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uDQotcHdzeDgyNiAgcG93ZXIgICBOYU40NTYgIDAuNSAtPiBOYU40NTYNCi1wd3N4ODI3ICBwb3dlciAgLU5hTjY1NCAgMC41IC0+IC1OYU42NTQNCi1wd3N4ODI4ICBwb3dlciAgIE5hTjEgICAgMC41IC0+IE5hTjENCi0NCi0tLSBOdWxsIHRlc3QNCi1wd3N4OTAwICBwb3dlciAgIyAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcG93ZXJzcXJ0LmRlY1Rlc3QgLS0gZGVjaW1hbCBzcXVhcmUgcm9vdCwgdXNpbmcgcG93ZXIgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIHRha2VuIGZyb20gc3F1YXJlcm9vdC5kZWNUZXN0IGJ1dCBhcmUKKy0tIGV2YWx1YXRlZCB1c2luZyB0aGUgcG93ZXIgb3BlcmF0b3IuICBUaGUgZGlmZmVyZW5jZXMgaW4gcmVzdWx0cworLS0gKDE1MyBvdXQgb2YgMjg1NikgZmFsbCBpbnRvIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczoKKy0tCistLSAgICB4ICAgICoqIDAuNSAoeD4wKSBoYXMgbm8gcHJlZmVycmVkIGV4cG9uZW50LCBhbmQgaXMgSW5leGFjdAorLS0gICAgICAgICAgICAgICAgKGFuZCBoZW5jZSBmdWxsIHByZWNpc2lvbik7IGFsbW9zdCBhbGwgZGlmZmVyZW5jZXMgYXJlCistLSAgICAgICAgICAgICAgICBpbiB0aGlzIGNhdGVnb3J5CistLSAgICAwLjAwICoqIDAuNSBiZWNvbWVzIDAgKG5vdCAwLjApLCBldGMuCistLSAgIC0wICAgICoqIDAuNSBiZWNvbWVzIDAgKG5ldmVyIC0wKQorLS0gICAgU29tZSBleGFjdCBzdWJub3JtYWxzIGJlY29tZSBpbmV4YWN0IGFuZCBoZW5jZSB1bmRlcmZsb3dzCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzCitwd3N4MDAxICBwb3dlciAxICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMDIgIHBvd2VyIC0xICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMDMgIHBvd2VyIDEuMDAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAwNCAgcG93ZXIgLTEuMDAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAwNSAgcG93ZXIgMCAgICAgICAgMC41IC0+IDAKK3B3c3gwMDYgIHBvd2VyIDAwLjAgICAgIDAuNSAtPiAwCitwd3N4MDA3ICBwb3dlciAwLjAwICAgICAwLjUgLT4gMAorcHdzeDAwOCAgcG93ZXIgMDAuMDAgICAgMC41IC0+IDAKK3B3c3gwMDkgIHBvd2VyIDAwLjAwMCAgIDAuNSAtPiAwCitwd3N4MDEwICBwb3dlciAwMC4wMDAwICAwLjUgLT4gMAorcHdzeDAxMSAgcG93ZXIgMDAgICAgICAgMC41IC0+IDAKKworcHdzeDAxMiAgcG93ZXIgLTIgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAxMyAgcG93ZXIgMiAgICAgICAgMC41IC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDE0ICBwb3dlciAtMi4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDE1ICBwb3dlciAyLjAwICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMTYgIHBvd2VyIC0wICAgICAgIDAuNSAtPiAwCitwd3N4MDE3ICBwb3dlciAtMC4wICAgICAwLjUgLT4gMAorcHdzeDAxOCAgcG93ZXIgLTAwLjAwICAgMC41IC0+IDAKK3B3c3gwMTkgIHBvd2VyIC0wMC4wMDAgIDAuNSAtPiAwCitwd3N4MDIwICBwb3dlciAtMC4wMDAwICAwLjUgLT4gMAorcHdzeDAyMSAgcG93ZXIgLTBFKzkgICAgMC41IC0+IDAKK3B3c3gwMjIgIHBvd2VyIC0wRSsxMCAgIDAuNSAtPiAwCitwd3N4MDIzICBwb3dlciAtMEUrMTEgICAwLjUgLT4gMAorcHdzeDAyNCAgcG93ZXIgLTBFKzEyICAgMC41IC0+IDAKK3B3c3gwMjUgIHBvd2VyIC0wMCAgICAgIDAuNSAtPiAwCitwd3N4MDI2ICBwb3dlciAwRSs1ICAgICAwLjUgLT4gMAorcHdzeDAyNyAgcG93ZXIgNC4wICAgICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDI4ICBwb3dlciA0LjAwICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworcHdzeDAzMCAgcG93ZXIgKzAuMSAgICAgICAgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDMxICBwb3dlciAtMC4xICAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzIgIHBvd2VyICswLjAxICAgICAgICAgICAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAzMyAgcG93ZXIgLTAuMDEgICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDM0ICBwb3dlciArMC4wMDEgICAgICAgICAgIDAuNSAtPiAwLjAzMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM1ICBwb3dlciAtMC4wMDEgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzYgIHBvd2VyICswLjAwMDAwMSAgICAgICAgMC41IC0+IDAuMDAxMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM3ICBwb3dlciAtMC4wMDAwMDEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzggIHBvd2VyICswLjAwMDAwMDAwMDAwMSAgMC41IC0+IDAuMDAwMDAxMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM5ICBwb3dlciAtMC4wMDAwMDAwMDAwMDEgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcHdzeDA0MSAgcG93ZXIgMS4xICAgICAgICAgMC41IC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitwd3N4MDQyICBwb3dlciAxLjEwICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDMgIHBvd2VyIDEuMTAwICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorcHdzeDA0NCAgcG93ZXIgMS4xMTAgICAgICAgMC41IC0+IDEuMDUzNTY1MzggSW5leGFjdCBSb3VuZGVkCitwd3N4MDQ1ICBwb3dlciAtMS4xICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ2ICBwb3dlciAtMS4xMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ3ICBwb3dlciAtMS4xMDAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ4ICBwb3dlciAtMS4xMTAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ5ICBwb3dlciA5LjkgICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTAgIHBvd2VyIDkuOTAgICAgICAgIDAuNSAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorcHdzeDA1MSAgcG93ZXIgOS45MDAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitwd3N4MDUyICBwb3dlciA5Ljk5MCAgICAgICAwLjUgLT4gMy4xNjA2OTYxMyBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTMgIHBvd2VyIC05LjkgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTQgIHBvd2VyIC05LjkwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTUgIHBvd2VyIC05LjkwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTYgIHBvd2VyIC05Ljk5MCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcHdzeDA2MCAgcG93ZXIgIDEgICAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjEgIHBvd2VyICAxLjAgICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDYyICBwb3dlciAgMS4wMCAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2MyAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjQgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY1ICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NiAgcG93ZXIgIDEwLjAwICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjcgIHBvd2VyICAxMDAgICAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY4ICBwb3dlciAgMTAwLjAgICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2OSAgcG93ZXIgIDEwMC4wMCAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNzAgIHBvd2VyICAxLjEwMDBFKzMgICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkCitwd3N4MDcxICBwb3dlciAgMS4xMDAwMEUrMyAgIDAuNSAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZAorcHdzeDA3MiAgcG93ZXIgLTEwLjAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDczICBwb3dlciAtMTAuMDAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzQgIHBvd2VyIC0xMDAuMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NSAgcG93ZXIgLTEwMC4wMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDc2ICBwb3dlciAtMS4xMDAwRSszICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzcgIHBvd2VyIC0xLjEwMDAwRSszICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmYW1vdXMgc3F1YXJlcworcHdzeDA4MCAgcG93ZXIgICAgIDEgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODEgIHBvd2VyICAgICA0ICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDgyICBwb3dlciAgICAgOSAgIDAuNSAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4MyAgcG93ZXIgICAgMTYgICAwLjUgLT4gNC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODQgIHBvd2VyICAgIDI1ICAgMC41IC0+IDUuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg1ICBwb3dlciAgICAzNiAgIDAuNSAtPiA2LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NiAgcG93ZXIgICAgNDkgICAwLjUgLT4gNy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODcgIHBvd2VyICAgIDY0ICAgMC41IC0+IDguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg4ICBwb3dlciAgICA4MSAgIDAuNSAtPiA5LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4OSAgcG93ZXIgICAxMDAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTAgIHBvd2VyICAgMTIxICAgMC41IC0+IDExLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDkxICBwb3dlciAgIDE0NCAgIDAuNSAtPiAxMi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MiAgcG93ZXIgICAxNjkgICAwLjUgLT4gMTMuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTMgIHBvd2VyICAgMjU2ICAgMC41IC0+IDE2LjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDk0ICBwb3dlciAgMTAyNCAgIDAuNSAtPiAzMi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5NSAgcG93ZXIgIDQwOTYgICAwLjUgLT4gNjQuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDAgIHBvd2VyICAgMC4wMSAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMSAgcG93ZXIgICAwLjA0ICAwLjUgLT4gMC4yMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTAyICBwb3dlciAgIDAuMDkgIDAuNSAtPiAwLjMwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDMgIHBvd2VyICAgMC4xNiAgMC41IC0+IDAuNDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNCAgcG93ZXIgICAwLjI1ICAwLjUgLT4gMC41MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA1ICBwb3dlciAgIDAuMzYgIDAuNSAtPiAwLjYwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDYgIHBvd2VyICAgMC40OSAgMC41IC0+IDAuNzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNyAgcG93ZXIgICAwLjY0ICAwLjUgLT4gMC44MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA4ICBwb3dlciAgIDAuODEgIDAuNSAtPiAwLjkwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDkgIHBvd2VyICAgMS4wMCAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTEwICBwb3dlciAgIDEuMjEgIDAuNSAtPiAxLjEwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExMSAgcG93ZXIgICAxLjQ0ICAwLjUgLT4gMS4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTIgIHBvd2VyICAgMS42OSAgMC41IC0+IDEuMzAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTEzICBwb3dlciAgIDIuNTYgIDAuNSAtPiAxLjYwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExNCAgcG93ZXIgIDEwLjI0ICAwLjUgLT4gMy4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTUgIHBvd2VyICA0MC45NiAgMC41IC0+IDYuNDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAxIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMQorcHdzeDEyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA2ICBwb3dlciAxRSsxICAwLjUgLT4gMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwOCAgcG93ZXIgMUUrMyAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxMSAgcG93ZXIgMi4wRS0xICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNCAgcG93ZXIgMkUrMSAgMC41IC0+IDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE2ICBwb3dlciAyRSszICAwLjUgLT4gNEUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE5ICBwb3dlciAzLjBFLTEgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjIyICBwb3dlciAzRSsxICAwLjUgLT4gNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjQgIHBvd2VyIDNFKzMgIDAuNSAtPiA1RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI1ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNyAgcG93ZXIgNC4wRS0xICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI4ICBwb3dlciA0LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzEgIHBvd2VyIDRFKzIgIDAuNSAtPiAyRSsxIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjMzICBwb3dlciAwLjUgIDAuNSAtPiAwLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzQgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNiAgcG93ZXIgNS4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNyAgcG93ZXIgNUUtMyAgMC41IC0+IDAuMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDdFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDEgIHBvd2VyIDAuNiAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ0ICBwb3dlciA2LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gOEUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0OSAgcG93ZXIgMC43ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTIgIHBvd2VyIDcuMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1NSAgcG93ZXIgN0UrMiAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU3ICBwb3dlciAwLjggIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTggIHBvd2VyIDAuMDggIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MCAgcG93ZXIgOC4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MSAgcG93ZXIgOEUtMyAgMC41IC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYzICBwb3dlciA4RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjUgIHBvd2VyIDAuOSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMyBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY3ICBwb3dlciA5LjBFLTEgIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDNFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorCistLSBQcmVjaXNpb24gMiBzcXVhcmVyb290IHRlc3RzIFtleGhhdXN0aXZlLCBwbHVzIGV4cG9uZW50IGFkanVzdHNdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDIKK3B3c3gyMjAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA0ICBwb3dlciAxLjAwRS0yICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA1ICBwb3dlciAxRS0zICAwLjUgLT4gMC4wMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDcgIHBvd2VyIDFFKzIgIDAuNSAtPiAxMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA4ICBwb3dlciAxRSszICAwLjUgLT4gMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTAgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxMyAgcG93ZXIgMkUtMyAgMC41IC0+IDAuMDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNC41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE1ICBwb3dlciAyRSsyICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxOCAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjIxICBwb3dlciAzRS0zICAwLjUgLT4gMC4wNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1LjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjMgIHBvd2VyIDNFKzIgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI1ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI2ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI4ICBwb3dlciA0LjAwRS0yICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzAgIHBvd2VyIDRFKzEgIDAuNSAtPiA2LjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzEgIHBvd2VyIDRFKzIgIDAuNSAtPiAyMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjMyICBwb3dlciA0RSszICAwLjUgLT4gNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzQgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM1ICBwb3dlciA1LjBFLTEgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzNyAgcG93ZXIgNUUtMyAgMC41IC0+IDAuMDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM4ICBwb3dlciA1RSsxICAwLjUgLT4gNy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDAgIHBvd2VyIDVFKzMgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDMgIHBvd2VyIDYuMEUtMSAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDYgIHBvd2VyIDZFKzEgIDAuNSAtPiA3LjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0OCAgcG93ZXIgNkUrMyAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MSAgcG93ZXIgNy4wRS0xICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NCAgcG93ZXIgN0UrMSAgMC41IC0+IDguNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NSAgcG93ZXIgN0UrMiAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU2ICBwb3dlciA3RSszICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTggIHBvd2VyIDAuMDggIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU5ICBwb3dlciA4LjBFLTEgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2MSAgcG93ZXIgOEUtMyAgMC41IC0+IDAuMDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYyICBwb3dlciA4RSsxICAwLjUgLT4gOC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYzICBwb3dlciA4RSsyICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjQgIHBvd2VyIDhFKzMgIDAuNSAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MCAgcG93ZXIgOUUrMSAgMC41IC0+IDkuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDMwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzIgIHBvd2VyIDlFKzMgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MyAgcG93ZXIgMC4xMCAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzQgIHBvd2VyIDAuMDEwICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc1ICBwb3dlciAxMC4wRS0xICAwLjUgLT4gMS4wIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzYgIHBvd2VyIDEwLjAwRS0yICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NyAgcG93ZXIgMTBFLTMgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzggIHBvd2VyIDEwRSsxICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3OSAgcG93ZXIgMTBFKzIgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MCAgcG93ZXIgMTBFKzMgIDAuNSAtPiAxLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODIgIHBvd2VyIDAuMDExICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MyAgcG93ZXIgMTEuMEUtMSAgMC41IC0+IDEuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NCAgcG93ZXIgMTEuMDBFLTIgIDAuNSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg1ICBwb3dlciAxMUUtMyAgMC41IC0+IDAuMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODYgIHBvd2VyIDExRSsxICAwLjUgLT4gMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODcgIHBvd2VyIDExRSsyICAwLjUgLT4gMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODggIHBvd2VyIDExRSszICAwLjUgLT4gMS4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg5ICBwb3dlciAwLjEyICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5MCAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkxICBwb3dlciAxMi4wRS0xICAwLjUgLT4gMS4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkyICBwb3dlciAxMi4wMEUtMiAgMC41IC0+IDAuMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTMgIHBvd2VyIDEyRS0zICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NCAgcG93ZXIgMTJFKzEgIDAuNSAtPiAxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NSAgcG93ZXIgMTJFKzIgIDAuNSAtPiAzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NiAgcG93ZXIgMTJFKzMgIDAuNSAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTcgIHBvd2VyIDAuMTMgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk4ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTkgIHBvd2VyIDEzLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDAgIHBvd2VyIDEzLjAwRS0yICAwLjUgLT4gMC4zNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwMSAgcG93ZXIgMTNFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAyICBwb3dlciAxM0UrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAzICBwb3dlciAxM0UrMiAgMC41IC0+IDM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA0ICBwb3dlciAxM0UrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDYgIHBvd2VyIDAuMDE0ICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNyAgcG93ZXIgMTQuMEUtMSAgMC41IC0+IDEuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwOCAgcG93ZXIgMTQuMDBFLTIgIDAuNSAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA5ICBwb3dlciAxNEUtMyAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTAgIHBvd2VyIDE0RSsxICAwLjUgLT4gMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTEgIHBvd2VyIDE0RSsyICAwLjUgLT4gMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTIgIHBvd2VyIDE0RSszICAwLjUgLT4gMS4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzEzICBwb3dlciAwLjE1ICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxNCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE1ICBwb3dlciAxNS4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE2ICBwb3dlciAxNS4wMEUtMiAgMC41IC0+IDAuMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTcgIHBvd2VyIDE1RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxOCAgcG93ZXIgMTVFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxOSAgcG93ZXIgMTVFKzIgIDAuNSAtPiAzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMCAgcG93ZXIgMTVFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjEgIHBvd2VyIDAuMTYgIDAuNSAtPiAwLjQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjIgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMyAgcG93ZXIgMTYuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNCAgcG93ZXIgMTYuMDBFLTIgIDAuNSAtPiAwLjQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjUgIHBvd2VyIDE2RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNiAgcG93ZXIgMTZFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNyAgcG93ZXIgMTZFKzIgIDAuNSAtPiA0MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI4ICBwb3dlciAxNkUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyOSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzAgIHBvd2VyIDAuMDE3ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMSAgcG93ZXIgMTcuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMiAgcG93ZXIgMTcuMDBFLTIgIDAuNSAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMzICBwb3dlciAxN0UtMyAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzQgIHBvd2VyIDE3RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzUgIHBvd2VyIDE3RSsyICAwLjUgLT4gNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzYgIHBvd2VyIDE3RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM3ICBwb3dlciAwLjE4ICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzOCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM5ICBwb3dlciAxOC4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQwICBwb3dlciAxOC4wMEUtMiAgMC41IC0+IDAuNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDEgIHBvd2VyIDE4RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MiAgcG93ZXIgMThFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MyAgcG93ZXIgMThFKzIgIDAuNSAtPiA0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NCAgcG93ZXIgMThFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDUgIHBvd2VyIDAuMTkgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDcgIHBvd2VyIDE5LjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDggIHBvd2VyIDE5LjAwRS0yICAwLjUgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0OSAgcG93ZXIgMTlFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUwICBwb3dlciAxOUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUxICBwb3dlciAxOUUrMiAgMC41IC0+IDQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUyICBwb3dlciAxOUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1MyAgcG93ZXIgMC4yMCAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTQgIHBvd2VyIDAuMDIwICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NSAgcG93ZXIgMjAuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NiAgcG93ZXIgMjAuMDBFLTIgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU3ICBwb3dlciAyMEUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTggIHBvd2VyIDIwRSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTkgIHBvd2VyIDIwRSsyICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjAgIHBvd2VyIDIwRSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYxICBwb3dlciAwLjIxICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2MiAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYzICBwb3dlciAyMS4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY0ICBwb3dlciAyMS4wMEUtMiAgMC41IC0+IDAuNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjUgIHBvd2VyIDIxRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NiAgcG93ZXIgMjFFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NyAgcG93ZXIgMjFFKzIgIDAuNSAtPiA0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2OCAgcG93ZXIgMjFFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzcwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzEgIHBvd2VyIDIyLjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzIgIHBvd2VyIDIyLjAwRS0yICAwLjUgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MyAgcG93ZXIgMjJFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc0ICBwb3dlciAyMkUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc1ICBwb3dlciAyMkUrMiAgMC41IC0+IDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc2ICBwb3dlciAyMkUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3NyAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzggIHBvd2VyIDAuMDIzICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3OSAgcG93ZXIgMjMuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MCAgcG93ZXIgMjMuMDBFLTIgIDAuNSAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzgxICBwb3dlciAyM0UtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODIgIHBvd2VyIDIzRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODMgIHBvd2VyIDIzRSsyICAwLjUgLT4gNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODQgIHBvd2VyIDIzRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg1ICBwb3dlciAwLjI0ICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4NiAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg3ICBwb3dlciAyNC4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg4ICBwb3dlciAyNC4wMEUtMiAgMC41IC0+IDAuNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODkgIHBvd2VyIDI0RS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MCAgcG93ZXIgMjRFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MSAgcG93ZXIgMjRFKzIgIDAuNSAtPiA0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MiAgcG93ZXIgMjRFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTMgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTQgIHBvd2VyIDAuMDI1ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NSAgcG93ZXIgMjUuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NiAgcG93ZXIgMjUuMDBFLTIgIDAuNSAtPiAwLjUwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTcgIHBvd2VyIDI1RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5OCAgcG93ZXIgMjVFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5OSAgcG93ZXIgMjVFKzIgIDAuNSAtPiA1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAwICBwb3dlciAyNUUrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMSAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDIgIHBvd2VyIDAuMDI2ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMyAgcG93ZXIgMjYuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNCAgcG93ZXIgMjYuMDBFLTIgIDAuNSAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA1ICBwb3dlciAyNkUtMyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDYgIHBvd2VyIDI2RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDcgIHBvd2VyIDI2RSsyICAwLjUgLT4gNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDggIHBvd2VyIDI2RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA5ICBwb3dlciAwLjI3ICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxMCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDExICBwb3dlciAyNy4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDEyICBwb3dlciAyNy4wMEUtMiAgMC41IC0+IDAuNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTMgIHBvd2VyIDI3RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNCAgcG93ZXIgMjdFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNSAgcG93ZXIgMjdFKzIgIDAuNSAtPiA1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNiAgcG93ZXIgMjdFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTcgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE4ICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTkgIHBvd2VyIDI4LjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjAgIHBvd2VyIDI4LjAwRS0yICAwLjUgLT4gMC41MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyMSAgcG93ZXIgMjhFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIyICBwb3dlciAyOEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIzICBwb3dlciAyOEUrMiAgMC41IC0+IDUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI0ICBwb3dlciAyOEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNSAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjYgIHBvd2VyIDAuMDI5ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNyAgcG93ZXIgMjkuMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyOCAgcG93ZXIgMjkuMDBFLTIgIDAuNSAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI5ICBwb3dlciAyOUUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzAgIHBvd2VyIDI5RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzEgIHBvd2VyIDI5RSsyICAwLjUgLT4gNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzIgIHBvd2VyIDI5RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDMzICBwb3dlciAwLjMwICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzNCAgcG93ZXIgMC4wMzAgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM1ICBwb3dlciAzMC4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM2ICBwb3dlciAzMC4wMEUtMiAgMC41IC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzcgIHBvd2VyIDMwRS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzOCAgcG93ZXIgMzBFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzOSAgcG93ZXIgMzBFKzIgIDAuNSAtPiA1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MCAgcG93ZXIgMzBFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDEgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQyICBwb3dlciAwLjAzMSAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDMgIHBvd2VyIDMxLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDQgIHBvd2VyIDMxLjAwRS0yICAwLjUgLT4gMC41NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0NSAgcG93ZXIgMzFFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ2ICBwb3dlciAzMUUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ3ICBwb3dlciAzMUUrMiAgMC41IC0+IDU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ4ICBwb3dlciAzMUUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0OSAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTAgIHBvd2VyIDAuMDMyICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MSAgcG93ZXIgMzIuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MiAgcG93ZXIgMzIuMDBFLTIgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUzICBwb3dlciAzMkUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTQgIHBvd2VyIDMyRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTUgIHBvd2VyIDMyRSsyICAwLjUgLT4gNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTYgIHBvd2VyIDMyRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU3ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1OCAgcG93ZXIgMC4wMzMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU5ICBwb3dlciAzMy4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYwICBwb3dlciAzMy4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjEgIHBvd2VyIDMzRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MiAgcG93ZXIgMzNFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MyAgcG93ZXIgMzNFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NCAgcG93ZXIgMzNFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjUgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY2ICBwb3dlciAwLjAzNCAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjcgIHBvd2VyIDM0LjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjggIHBvd2VyIDM0LjAwRS0yICAwLjUgLT4gMC41OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2OSAgcG93ZXIgMzRFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcwICBwb3dlciAzNEUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcxICBwb3dlciAzNEUrMiAgMC41IC0+IDU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcyICBwb3dlciAzNEUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzQgIHBvd2VyIDAuMDM1ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NSAgcG93ZXIgMzUuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NiAgcG93ZXIgMzUuMDBFLTIgIDAuNSAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc3ICBwb3dlciAzNUUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzggIHBvd2VyIDM1RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzkgIHBvd2VyIDM1RSsyICAwLjUgLT4gNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODAgIHBvd2VyIDM1RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDgxICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDgyICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODMgIHBvd2VyIDM2LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODQgIHBvd2VyIDM2LjAwRS0yICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDg1ICBwb3dlciAzNkUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODYgIHBvd2VyIDM2RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODcgIHBvd2VyIDM2RSsyICAwLjUgLT4gNjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4OCAgcG93ZXIgMzZFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODkgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDkwICBwb3dlciAwLjAzNyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTEgIHBvd2VyIDM3LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTIgIHBvd2VyIDM3LjAwRS0yICAwLjUgLT4gMC42MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MyAgcG93ZXIgMzdFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk0ICBwb3dlciAzN0UrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk1ICBwb3dlciAzN0UrMiAgMC41IC0+IDYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk2ICBwb3dlciAzN0UrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5NyAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTggIHBvd2VyIDAuMDM4ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5OSAgcG93ZXIgMzguMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMCAgcG93ZXIgMzguMDBFLTIgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTAxICBwb3dlciAzOEUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDIgIHBvd2VyIDM4RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDMgIHBvd2VyIDM4RSsyICAwLjUgLT4gNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDQgIHBvd2VyIDM4RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA1ICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwNiAgcG93ZXIgMC4wMzkgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA3ICBwb3dlciAzOS4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA4ICBwb3dlciAzOS4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDkgIHBvd2VyIDM5RS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMCAgcG93ZXIgMzlFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMSAgcG93ZXIgMzlFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMiAgcG93ZXIgMzlFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTMgIHBvd2VyIDAuNDAgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE0ICBwb3dlciAwLjA0MCAgMC41IC0+IDAuMjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxNSAgcG93ZXIgNDAuMEUtMSAgMC41IC0+IDIuMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE2ICBwb3dlciA0MC4wMEUtMiAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTcgIHBvd2VyIDQwRS0zICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE4ICBwb3dlciA0MEUrMSAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTkgIHBvd2VyIDQwRSsyICAwLjUgLT4gNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjAgIHBvd2VyIDQwRSszICAwLjUgLT4gMi4wRSsyIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjEgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTIyICBwb3dlciAwLjA0MSAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjMgIHBvd2VyIDQxLjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjQgIHBvd2VyIDQxLjAwRS0yICAwLjUgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyNSAgcG93ZXIgNDFFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI2ICBwb3dlciA0MUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI3ICBwb3dlciA0MUUrMiAgMC41IC0+IDY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI4ICBwb3dlciA0MUUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyOSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzAgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMSAgcG93ZXIgNDIuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMiAgcG93ZXIgNDIuMDBFLTIgIDAuNSAtPiAwLjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMzICBwb3dlciA0MkUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzQgIHBvd2VyIDQyRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzUgIHBvd2VyIDQyRSsyICAwLjUgLT4gNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzYgIHBvd2VyIDQyRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzOCAgcG93ZXIgMC4wNDMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM5ICBwb3dlciA0My4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQwICBwb3dlciA0My4wMEUtMiAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDEgIHBvd2VyIDQzRS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MiAgcG93ZXIgNDNFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MyAgcG93ZXIgNDNFKzIgIDAuNSAtPiA2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NCAgcG93ZXIgNDNFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDUgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ2ICBwb3dlciAwLjA0NCAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDcgIHBvd2VyIDQ0LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDggIHBvd2VyIDQ0LjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0OSAgcG93ZXIgNDRFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUwICBwb3dlciA0NEUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUxICBwb3dlciA0NEUrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUyICBwb3dlciA0NEUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1MyAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTQgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NSAgcG93ZXIgNDUuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NiAgcG93ZXIgNDUuMDBFLTIgIDAuNSAtPiAwLjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU3ICBwb3dlciA0NUUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTggIHBvd2VyIDQ1RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTkgIHBvd2VyIDQ1RSsyICAwLjUgLT4gNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjAgIHBvd2VyIDQ1RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYxICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2MiAgcG93ZXIgMC4wNDYgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYzICBwb3dlciA0Ni4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY0ICBwb3dlciA0Ni4wMEUtMiAgMC41IC0+IDAuNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjUgIHBvd2VyIDQ2RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NiAgcG93ZXIgNDZFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NyAgcG93ZXIgNDZFKzIgIDAuNSAtPiA2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2OCAgcG93ZXIgNDZFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjkgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTcwICBwb3dlciAwLjA0NyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzEgIHBvd2VyIDQ3LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzIgIHBvd2VyIDQ3LjAwRS0yICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MyAgcG93ZXIgNDdFLTMgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc0ICBwb3dlciA0N0UrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc1ICBwb3dlciA0N0UrMiAgMC41IC0+IDY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc2ICBwb3dlciA0N0UrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3OSAgcG93ZXIgNDguMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MCAgcG93ZXIgNDguMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTgxICBwb3dlciA0OEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODIgIHBvd2VyIDQ4RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODMgIHBvd2VyIDQ4RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODQgIHBvd2VyIDQ4RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg1ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg2ICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODcgIHBvd2VyIDQ5LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODggIHBvd2VyIDQ5LjAwRS0yICAwLjUgLT4gMC43MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg5ICBwb3dlciA0OUUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTAgIHBvd2VyIDQ5RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTEgIHBvd2VyIDQ5RSsyICAwLjUgLT4gNzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MiAgcG93ZXIgNDlFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTMgIHBvd2VyIDAuNTAgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk0ICBwb3dlciAwLjA1MCAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTUgIHBvd2VyIDUwLjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTYgIHBvd2VyIDUwLjAwRS0yICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NyAgcG93ZXIgNTBFLTMgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk4ICBwb3dlciA1MEUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk5ICBwb3dlciA1MEUrMiAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAwICBwb3dlciA1MEUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMSAgcG93ZXIgMC41MSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMyAgcG93ZXIgNTEuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNCAgcG93ZXIgNTEuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA1ICBwb3dlciA1MUUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDYgIHBvd2VyIDUxRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDcgIHBvd2VyIDUxRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDggIHBvd2VyIDUxRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA5ICBwb3dlciAwLjUyICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxMCAgcG93ZXIgMC4wNTIgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjExICBwb3dlciA1Mi4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjEyICBwb3dlciA1Mi4wMEUtMiAgMC41IC0+IDAuNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTMgIHBvd2VyIDUyRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNCAgcG93ZXIgNTJFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNSAgcG93ZXIgNTJFKzIgIDAuNSAtPiA3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNiAgcG93ZXIgNTJFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTcgIHBvd2VyIDAuNTMgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE4ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTkgIHBvd2VyIDUzLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjAgIHBvd2VyIDUzLjAwRS0yICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyMSAgcG93ZXIgNTNFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIyICBwb3dlciA1M0UrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIzICBwb3dlciA1M0UrMiAgMC41IC0+IDczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI0ICBwb3dlciA1M0UrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNSAgcG93ZXIgMC41NCAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjYgIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNyAgcG93ZXIgNTQuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyOCAgcG93ZXIgNTQuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI5ICBwb3dlciA1NEUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzAgIHBvd2VyIDU0RSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzEgIHBvd2VyIDU0RSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzIgIHBvd2VyIDU0RSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjMzICBwb3dlciAwLjU1ICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzNCAgcG93ZXIgMC4wNTUgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM1ICBwb3dlciA1NS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM2ICBwb3dlciA1NS4wMEUtMiAgMC41IC0+IDAuNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzcgIHBvd2VyIDU1RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzOCAgcG93ZXIgNTVFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzOSAgcG93ZXIgNTVFKzIgIDAuNSAtPiA3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MCAgcG93ZXIgNTVFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDEgIHBvd2VyIDAuNTYgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDMgIHBvd2VyIDU2LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDQgIHBvd2VyIDU2LjAwRS0yICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0NSAgcG93ZXIgNTZFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ2ICBwb3dlciA1NkUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ3ICBwb3dlciA1NkUrMiAgMC41IC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ4ICBwb3dlciA1NkUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0OSAgcG93ZXIgMC41NyAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTAgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MSAgcG93ZXIgNTcuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MiAgcG93ZXIgNTcuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUzICBwb3dlciA1N0UtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTQgIHBvd2VyIDU3RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTUgIHBvd2VyIDU3RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTYgIHBvd2VyIDU3RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU3ICBwb3dlciAwLjU4ICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1OCAgcG93ZXIgMC4wNTggIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU5ICBwb3dlciA1OC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYwICBwb3dlciA1OC4wMEUtMiAgMC41IC0+IDAuNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjEgIHBvd2VyIDU4RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MiAgcG93ZXIgNThFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MyAgcG93ZXIgNThFKzIgIDAuNSAtPiA3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NCAgcG93ZXIgNThFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjUgIHBvd2VyIDAuNTkgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY2ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjcgIHBvd2VyIDU5LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjggIHBvd2VyIDU5LjAwRS0yICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2OSAgcG93ZXIgNTlFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcwICBwb3dlciA1OUUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcxICBwb3dlciA1OUUrMiAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcyICBwb3dlciA1OUUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3MyAgcG93ZXIgMC42MCAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzQgIHBvd2VyIDAuMDYwICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NSAgcG93ZXIgNjAuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NiAgcG93ZXIgNjAuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc3ICBwb3dlciA2MEUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzggIHBvd2VyIDYwRSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzkgIHBvd2VyIDYwRSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODAgIHBvd2VyIDYwRSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgxICBwb3dlciAwLjYxICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4MiAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgzICBwb3dlciA2MS4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg0ICBwb3dlciA2MS4wMEUtMiAgMC41IC0+IDAuNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODUgIHBvd2VyIDYxRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NiAgcG93ZXIgNjFFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NyAgcG93ZXIgNjFFKzIgIDAuNSAtPiA3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4OCAgcG93ZXIgNjFFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODkgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjkwICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTEgIHBvd2VyIDYyLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTIgIHBvd2VyIDYyLjAwRS0yICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MyAgcG93ZXIgNjJFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk0ICBwb3dlciA2MkUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk1ICBwb3dlciA2MkUrMiAgMC41IC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk2ICBwb3dlciA2MkUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5NyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTggIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5OSAgcG93ZXIgNjMuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMCAgcG93ZXIgNjMuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzAxICBwb3dlciA2M0UtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDIgIHBvd2VyIDYzRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDMgIHBvd2VyIDYzRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDQgIHBvd2VyIDYzRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA1ICBwb3dlciAwLjY0ICAwLjUgLT4gMC44MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA2ICBwb3dlciAwLjA2NCAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDcgIHBvd2VyIDY0LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDggIHBvd2VyIDY0LjAwRS0yICAwLjUgLT4gMC44MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA5ICBwb3dlciA2NEUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTAgIHBvd2VyIDY0RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTEgIHBvd2VyIDY0RSsyICAwLjUgLT4gODAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMiAgcG93ZXIgNjRFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTMgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE0ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTUgIHBvd2VyIDY1LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTYgIHBvd2VyIDY1LjAwRS0yICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNyAgcG93ZXIgNjVFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE4ICBwb3dlciA2NUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE5ICBwb3dlciA2NUUrMiAgMC41IC0+IDgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIwICBwb3dlciA2NUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjIgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMyAgcG93ZXIgNjYuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNCAgcG93ZXIgNjYuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI1ICBwb3dlciA2NkUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjYgIHBvd2VyIDY2RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjcgIHBvd2VyIDY2RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjggIHBvd2VyIDY2RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI5ICBwb3dlciAwLjY3ICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczMCAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMxICBwb3dlciA2Ny4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMyICBwb3dlciA2Ny4wMEUtMiAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzMgIHBvd2VyIDY3RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNCAgcG93ZXIgNjdFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNSAgcG93ZXIgNjdFKzIgIDAuNSAtPiA4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNiAgcG93ZXIgNjdFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzcgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM4ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzkgIHBvd2VyIDY4LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDAgIHBvd2VyIDY4LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0MSAgcG93ZXIgNjhFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQyICBwb3dlciA2OEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQzICBwb3dlciA2OEUrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ0ICBwb3dlciA2OEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NyAgcG93ZXIgNjkuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0OCAgcG93ZXIgNjkuMDBFLTIgIDAuNSAtPiAwLjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ5ICBwb3dlciA2OUUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTAgIHBvd2VyIDY5RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTEgIHBvd2VyIDY5RSsyICAwLjUgLT4gODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTIgIHBvd2VyIDY5RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzUzICBwb3dlciAwLjcwICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1NCAgcG93ZXIgMC4wNzAgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU1ICBwb3dlciA3MC4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU2ICBwb3dlciA3MC4wMEUtMiAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTcgIHBvd2VyIDcwRS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1OCAgcG93ZXIgNzBFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1OSAgcG93ZXIgNzBFKzIgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MCAgcG93ZXIgNzBFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjEgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzYyICBwb3dlciAwLjA3MSAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjMgIHBvd2VyIDcxLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjQgIHBvd2VyIDcxLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2NSAgcG93ZXIgNzFFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY2ICBwb3dlciA3MUUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY3ICBwb3dlciA3MUUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY4ICBwb3dlciA3MUUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2OSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MSAgcG93ZXIgNzIuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MiAgcG93ZXIgNzIuMDBFLTIgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzczICBwb3dlciA3MkUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzQgIHBvd2VyIDcyRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzUgIHBvd2VyIDcyRSsyICAwLjUgLT4gODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzYgIHBvd2VyIDcyRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc3ICBwb3dlciAwLjczICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3OCAgcG93ZXIgMC4wNzMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc5ICBwb3dlciA3My4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgwICBwb3dlciA3My4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODEgIHBvd2VyIDczRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MiAgcG93ZXIgNzNFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MyAgcG93ZXIgNzNFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NCAgcG93ZXIgNzNFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODUgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg2ICBwb3dlciAwLjA3NCAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODcgIHBvd2VyIDc0LjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODggIHBvd2VyIDc0LjAwRS0yICAwLjUgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4OSAgcG93ZXIgNzRFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkwICBwb3dlciA3NEUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkxICBwb3dlciA3NEUrMiAgMC41IC0+IDg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkyICBwb3dlciA3NEUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5MyAgcG93ZXIgMC43NSAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTQgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NSAgcG93ZXIgNzUuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NiAgcG93ZXIgNzUuMDBFLTIgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk3ICBwb3dlciA3NUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTggIHBvd2VyIDc1RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTkgIHBvd2VyIDc1RSsyICAwLjUgLT4gODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDAgIHBvd2VyIDc1RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAxICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwMiAgcG93ZXIgMC4wNzYgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAzICBwb3dlciA3Ni4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA0ICBwb3dlciA3Ni4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDUgIHBvd2VyIDc2RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNiAgcG93ZXIgNzZFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNyAgcG93ZXIgNzZFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwOCAgcG93ZXIgNzZFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODEwICBwb3dlciAwLjA3NyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTEgIHBvd2VyIDc3LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTIgIHBvd2VyIDc3LjAwRS0yICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMyAgcG93ZXIgNzdFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE0ICBwb3dlciA3N0UrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE1ICBwb3dlciA3N0UrMiAgMC41IC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE2ICBwb3dlciA3N0UrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxNyAgcG93ZXIgMC43OCAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTggIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxOSAgcG93ZXIgNzguMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMCAgcG93ZXIgNzguMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODIxICBwb3dlciA3OEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjIgIHBvd2VyIDc4RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjMgIHBvd2VyIDc4RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjQgIHBvd2VyIDc4RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI1ICBwb3dlciAwLjc5ICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyNiAgcG93ZXIgMC4wNzkgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI3ICBwb3dlciA3OS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI4ICBwb3dlciA3OS4wMEUtMiAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjkgIHBvd2VyIDc5RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMCAgcG93ZXIgNzlFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMSAgcG93ZXIgNzlFKzIgIDAuNSAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMiAgcG93ZXIgNzlFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzMgIHBvd2VyIDAuODAgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM0ICBwb3dlciAwLjA4MCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzUgIHBvd2VyIDgwLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzYgIHBvd2VyIDgwLjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNyAgcG93ZXIgODBFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM4ICBwb3dlciA4MEUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM5ICBwb3dlciA4MEUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQwICBwb3dlciA4MEUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0MSAgcG93ZXIgMC44MSAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0MiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQzICBwb3dlciA4MS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ0ICBwb3dlciA4MS4wMEUtMiAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0NSAgcG93ZXIgODFFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ2ICBwb3dlciA4MUUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ3ICBwb3dlciA4MUUrMiAgMC41IC0+IDkwIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDggIHBvd2VyIDgxRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ5ICBwb3dlciAwLjgyICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1MCAgcG93ZXIgMC4wODIgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUxICBwb3dlciA4Mi4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUyICBwb3dlciA4Mi4wMEUtMiAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTMgIHBvd2VyIDgyRS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NCAgcG93ZXIgODJFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NSAgcG93ZXIgODJFKzIgIDAuNSAtPiA5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NiAgcG93ZXIgODJFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTcgIHBvd2VyIDAuODMgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU4ICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTkgIHBvd2VyIDgzLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjAgIHBvd2VyIDgzLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2MSAgcG93ZXIgODNFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYyICBwb3dlciA4M0UrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYzICBwb3dlciA4M0UrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY0ICBwb3dlciA4M0UrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NSAgcG93ZXIgMC44NCAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjYgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NyAgcG93ZXIgODQuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2OCAgcG93ZXIgODQuMDBFLTIgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY5ICBwb3dlciA4NEUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzAgIHBvd2VyIDg0RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzEgIHBvd2VyIDg0RSsyICAwLjUgLT4gOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzIgIHBvd2VyIDg0RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODczICBwb3dlciAwLjg1ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3NCAgcG93ZXIgMC4wODUgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc1ICBwb3dlciA4NS4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc2ICBwb3dlciA4NS4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzcgIHBvd2VyIDg1RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3OCAgcG93ZXIgODVFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3OSAgcG93ZXIgODVFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MCAgcG93ZXIgODVFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODEgIHBvd2VyIDAuODYgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODgyICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODMgIHBvd2VyIDg2LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODQgIHBvd2VyIDg2LjAwRS0yICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4NSAgcG93ZXIgODZFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg2ICBwb3dlciA4NkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg3ICBwb3dlciA4NkUrMiAgMC41IC0+IDkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg4ICBwb3dlciA4NkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4OSAgcG93ZXIgMC44NyAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTAgIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MSAgcG93ZXIgODcuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MiAgcG93ZXIgODcuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkzICBwb3dlciA4N0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTQgIHBvd2VyIDg3RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTUgIHBvd2VyIDg3RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTYgIHBvd2VyIDg3RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk3ICBwb3dlciAwLjg4ICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5OCAgcG93ZXIgMC4wODggIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk5ICBwb3dlciA4OC4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAwICBwb3dlciA4OC4wMEUtMiAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDEgIHBvd2VyIDg4RS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMiAgcG93ZXIgODhFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMyAgcG93ZXIgODhFKzIgIDAuNSAtPiA5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNCAgcG93ZXIgODhFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDUgIHBvd2VyIDAuODkgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA2ICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDcgIHBvd2VyIDg5LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDggIHBvd2VyIDg5LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwOSAgcG93ZXIgODlFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEwICBwb3dlciA4OUUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTExICBwb3dlciA4OUUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEyICBwb3dlciA4OUUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxMyAgcG93ZXIgMC45MCAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTQgIHBvd2VyIDAuMDkwICAwLjUgLT4gMC4zMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE1ICBwb3dlciA5MC4wRS0xICAwLjUgLT4gMy4wIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTYgIHBvd2VyIDkwLjAwRS0yICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNyAgcG93ZXIgOTBFLTMgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTggIHBvd2VyIDkwRSsxICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxOSAgcG93ZXIgOTBFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMCAgcG93ZXIgOTBFKzMgIDAuNSAtPiAzLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMSAgcG93ZXIgMC45MSAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjIgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMyAgcG93ZXIgOTEuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNCAgcG93ZXIgOTEuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI1ICBwb3dlciA5MUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjYgIHBvd2VyIDkxRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjcgIHBvd2VyIDkxRSsyICAwLjUgLT4gOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjggIHBvd2VyIDkxRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI5ICBwb3dlciAwLjkyICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzMCAgcG93ZXIgMC4wOTIgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMxICBwb3dlciA5Mi4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMyICBwb3dlciA5Mi4wMEUtMiAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzMgIHBvd2VyIDkyRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNCAgcG93ZXIgOTJFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNSAgcG93ZXIgOTJFKzIgIDAuNSAtPiA5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNiAgcG93ZXIgOTJFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzcgIHBvd2VyIDAuOTMgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzkgIHBvd2VyIDkzLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDAgIHBvd2VyIDkzLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0MSAgcG93ZXIgOTNFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQyICBwb3dlciA5M0UrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQzICBwb3dlciA5M0UrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ0ICBwb3dlciA5M0UrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NSAgcG93ZXIgMC45NCAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDYgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NyAgcG93ZXIgOTQuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0OCAgcG93ZXIgOTQuMDBFLTIgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ5ICBwb3dlciA5NEUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTAgIHBvd2VyIDk0RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTEgIHBvd2VyIDk0RSsyICAwLjUgLT4gOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTIgIHBvd2VyIDk0RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTUzICBwb3dlciAwLjk1ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1NCAgcG93ZXIgMC4wOTUgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU1ICBwb3dlciA5NS4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU2ICBwb3dlciA5NS4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTcgIHBvd2VyIDk1RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1OCAgcG93ZXIgOTVFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1OSAgcG93ZXIgOTVFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MCAgcG93ZXIgOTVFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjEgIHBvd2VyIDAuOTYgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTYyICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjMgIHBvd2VyIDk2LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjQgIHBvd2VyIDk2LjAwRS0yICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2NSAgcG93ZXIgOTZFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY2ICBwb3dlciA5NkUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY3ICBwb3dlciA5NkUrMiAgMC41IC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY4ICBwb3dlciA5NkUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2OSAgcG93ZXIgMC45NyAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzAgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MSAgcG93ZXIgOTcuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MiAgcG93ZXIgOTcuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTczICBwb3dlciA5N0UtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzQgIHBvd2VyIDk3RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzUgIHBvd2VyIDk3RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzYgIHBvd2VyIDk3RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc3ICBwb3dlciAwLjk4ICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3OCAgcG93ZXIgMC4wOTggIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc5ICBwb3dlciA5OC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgwICBwb3dlciA5OC4wMEUtMiAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODEgIHBvd2VyIDk4RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MiAgcG93ZXIgOThFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MyAgcG93ZXIgOThFKzIgIDAuNSAtPiA5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NCAgcG93ZXIgOThFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODUgIHBvd2VyIDAuOTkgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg2ICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODcgIHBvd2VyIDk5LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODggIHBvd2VyIDk5LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4OSAgcG93ZXIgOTlFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkwICBwb3dlciA5OUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkxICBwb3dlciA5OUUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkyICBwb3dlciA5OUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAzIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIGYgYW5kIGYvMTBdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDMKK3B3c3gzMDAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDAzICBwb3dlciAwLjIgIDAuNSAtPiAwLjQ0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwNCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA1ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwNiAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA3ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwOCAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA5ICBwb3dlciAwLjUgIDAuNSAtPiAwLjcwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxMCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDExICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxMiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEzICBwb3dlciAwLjcgIDAuNSAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxNCAgcG93ZXIgMC4wNyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE1ICBwb3dlciAwLjggIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxNiAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE3ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxOCAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE5ICBwb3dlciAwLjExICAwLjUgLT4gMC4zMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjAgIHBvd2VyIDAuMDExICAwLjUgLT4gMC4xMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjEgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMiAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI0ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI1ICBwb3dlciAwLjE0ICAwLjUgLT4gMC4zNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjYgIHBvd2VyIDAuMDE0ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjcgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyOCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyOSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDMwICBwb3dlciAwLjAxNiAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDMxICBwb3dlciAwLjE3ICAwLjUgLT4gMC40MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzIgIHBvd2VyIDAuMDE3ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzMgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzNCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzNSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM3ICBwb3dlciAwLjIxICAwLjUgLT4gMC40NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzggIHBvd2VyIDAuMDIxICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0MCAgcG93ZXIgMC4wMjIgIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0MSAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQyICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQzICBwb3dlciAwLjI0ICAwLjUgLT4gMC40OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDQgIHBvd2VyIDAuMDI0ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDUgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NiAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NyAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ4ICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ5ICBwb3dlciAwLjI3ICAwLjUgLT4gMC41MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTAgIHBvd2VyIDAuMDI3ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTEgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MiAgcG93ZXIgMC4wMjggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MyAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU0ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU1ICBwb3dlciAwLjMxICAwLjUgLT4gMC41NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTYgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTcgIHBvd2VyIDAuMzIgIDAuNSAtPiAwLjU2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1OCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1OSAgcG93ZXIgMC4zMyAgMC41IC0+IDAuNTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDYwICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDYxICBwb3dlciAwLjM0ICAwLjUgLT4gMC41ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjIgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjMgIHBvd2VyIDAuMzUgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2NSAgcG93ZXIgMC4zNiAgMC41IC0+IDAuNjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY2ICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY3ICBwb3dlciAwLjM3ICAwLjUgLT4gMC42MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjggIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjkgIHBvd2VyIDAuMzggIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3MCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3MSAgcG93ZXIgMC4zOSAgMC41IC0+IDAuNjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcyICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDczICBwb3dlciAwLjQxICAwLjUgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzQgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzUgIHBvd2VyIDAuNDIgIDAuNSAtPiAwLjY0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NiAgcG93ZXIgMC4wNDIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NyAgcG93ZXIgMC40MyAgMC41IC0+IDAuNjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc5ICBwb3dlciAwLjQ0ICAwLjUgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODAgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODEgIHBvd2VyIDAuNDUgIDAuNSAtPiAwLjY3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MiAgcG93ZXIgMC4wNDUgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MyAgcG93ZXIgMC40NiAgMC41IC0+IDAuNjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg0ICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg1ICBwb3dlciAwLjQ3ICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODYgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODcgIHBvd2VyIDAuNDggIDAuNSAtPiAwLjY5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4OCAgcG93ZXIgMC4wNDggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4OSAgcG93ZXIgMC40OSAgMC41IC0+IDAuNzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDkwICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDkxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTMgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5NCAgcG93ZXIgMC4wNTIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5NSAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk2ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk3ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTggIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTkgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwMCAgcG93ZXIgMC4wNTUgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwMSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAzICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDQgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDUgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNiAgcG93ZXIgMC4wNTggIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNyAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA4ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA5ICBwb3dlciAwLjYxICAwLjUgLT4gMC43ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTAgIHBvd2VyIDAuMDYxICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTEgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMiAgcG93ZXIgMC4wNjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE0ICBwb3dlciAwLjA2MyAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE1ICBwb3dlciAwLjY0ICAwLjUgLT4gMC44MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTcgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExOCAgcG93ZXIgMC4wNjUgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExOSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTIwICBwb3dlciAwLjA2NiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTIxICBwb3dlciAwLjY3ICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjIgIHBvd2VyIDAuMDY3ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjMgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyNCAgcG93ZXIgMC4wNjggIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyNSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI2ICBwb3dlciAwLjA2OSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI3ICBwb3dlciAwLjcxICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjggIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjkgIHBvd2VyIDAuNzIgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzMCAgcG93ZXIgMC4wNzIgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzMSAgcG93ZXIgMC43MyAgMC41IC0+IDAuODU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMyICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMzICBwb3dlciAwLjc0ICAwLjUgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzQgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzUgIHBvd2VyIDAuNzUgIDAuNSAtPiAwLjg2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNiAgcG93ZXIgMC4wNzUgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNyAgcG93ZXIgMC43NiAgMC41IC0+IDAuODcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM4ICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM5ICBwb3dlciAwLjc3ICAwLjUgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDEgIHBvd2VyIDAuNzggIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MiAgcG93ZXIgMC4wNzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MyAgcG93ZXIgMC43OSAgMC41IC0+IDAuODg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ0ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ1ICBwb3dlciAwLjgxICAwLjUgLT4gMC45MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDYgIHBvd2VyIDAuMDgxICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDcgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0OCAgcG93ZXIgMC4wODIgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0OSAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTUwICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTUxICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTIgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1NCAgcG93ZXIgMC4wODUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1NSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU2ICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU3ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTggIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTkgIHBvd2VyIDAuODggIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2MCAgcG93ZXIgMC4wODggIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2MSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYyICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYzICBwb3dlciAwLjkxICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjQgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjUgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NiAgcG93ZXIgMC4wOTIgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY5ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzAgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzEgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MiAgcG93ZXIgMC4wOTUgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MyAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc0ICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc1ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzYgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3OCAgcG93ZXIgMC4wOTggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3OSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgwICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgxICBwb3dlciAwLjEwMSAgMC41IC0+IDAuMzE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgyICBwb3dlciAwLjAxMDEgIDAuNSAtPiAwLjEwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4MyAgcG93ZXIgMC4xMDIgIDAuNSAtPiAwLjMxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NCAgcG93ZXIgMC4wMTAyICAwLjUgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODUgIHBvd2VyIDAuMTAzICAwLjUgLT4gMC4zMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODYgIHBvd2VyIDAuMDEwMyAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg3ICBwb3dlciAwLjEwNCAgMC41IC0+IDAuMzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg4ICBwb3dlciAwLjAxMDQgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4OSAgcG93ZXIgMC4xMDUgIDAuNSAtPiAwLjMyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MCAgcG93ZXIgMC4wMTA1ICAwLjUgLT4gMC4xMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTEgIHBvd2VyIDAuMTA2ICAwLjUgLT4gMC4zMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTIgIHBvd2VyIDAuMDEwNiAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTkzICBwb3dlciAwLjEwNyAgMC41IC0+IDAuMzI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk0ICBwb3dlciAwLjAxMDcgIDAuNSAtPiAwLjEwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NSAgcG93ZXIgMC4xMDggIDAuNSAtPiAwLjMyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NiAgcG93ZXIgMC4wMTA4ICAwLjUgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTcgIHBvd2VyIDAuMTA5ICAwLjUgLT4gMC4zMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTggIHBvd2VyIDAuMDEwOSAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk5ICBwb3dlciAwLjExMSAgMC41IC0+IDAuMzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAwICBwb3dlciAwLjAxMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMSAgcG93ZXIgMC4xMTIgIDAuNSAtPiAwLjMzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMiAgcG93ZXIgMC4wMTEyICAwLjUgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDMgIHBvd2VyIDAuMTEzICAwLjUgLT4gMC4zMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDQgIHBvd2VyIDAuMDExMyAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA1ICBwb3dlciAwLjExNCAgMC41IC0+IDAuMzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA2ICBwb3dlciAwLjAxMTQgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwNyAgcG93ZXIgMC4xMTUgIDAuNSAtPiAwLjMzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwOCAgcG93ZXIgMC4wMTE1ICAwLjUgLT4gMC4xMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDkgIHBvd2VyIDAuMTE2ICAwLjUgLT4gMC4zNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTAgIHBvd2VyIDAuMDExNiAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjExICBwb3dlciAwLjExNyAgMC41IC0+IDAuMzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjEyICBwb3dlciAwLjAxMTcgIDAuNSAtPiAwLjEwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxMyAgcG93ZXIgMC4xMTggIDAuNSAtPiAwLjM0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNCAgcG93ZXIgMC4wMTE4ICAwLjUgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTUgIHBvd2VyIDAuMTE5ICAwLjUgLT4gMC4zNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTYgIHBvd2VyIDAuMDExOSAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE3ICBwb3dlciAwLjEyMSAgMC41IC0+IDAuMzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE4ICBwb3dlciAwLjAxMjEgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxOSAgcG93ZXIgMC4xMjIgIDAuNSAtPiAwLjM0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMCAgcG93ZXIgMC4wMTIyICAwLjUgLT4gMC4xMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjEgIHBvd2VyIDAuMTIzICAwLjUgLT4gMC4zNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjIgIHBvd2VyIDAuMDEyMyAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjIzICBwb3dlciAwLjEyNCAgMC41IC0+IDAuMzUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI0ICBwb3dlciAwLjAxMjQgIDAuNSAtPiAwLjExMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNSAgcG93ZXIgMC4xMjUgIDAuNSAtPiAwLjM1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNiAgcG93ZXIgMC4wMTI1ICAwLjUgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjcgIHBvd2VyIDAuMTI2ICAwLjUgLT4gMC4zNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjggIHBvd2VyIDAuMDEyNiAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI5ICBwb3dlciAwLjEyNyAgMC41IC0+IDAuMzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMwICBwb3dlciAwLjAxMjcgIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMSAgcG93ZXIgMC4xMjggIDAuNSAtPiAwLjM1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMiAgcG93ZXIgMC4wMTI4ICAwLjUgLT4gMC4xMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzMgIHBvd2VyIDAuMTI5ICAwLjUgLT4gMC4zNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzQgIHBvd2VyIDAuMDEyOSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM1ICBwb3dlciAwLjEzMSAgMC41IC0+IDAuMzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM2ICBwb3dlciAwLjAxMzEgIDAuNSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzNyAgcG93ZXIgMC4xMzIgIDAuNSAtPiAwLjM2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzOCAgcG93ZXIgMC4wMTMyICAwLjUgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzkgIHBvd2VyIDAuMTMzICAwLjUgLT4gMC4zNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDAgIHBvd2VyIDAuMDEzMyAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQxICBwb3dlciAwLjEzNCAgMC41IC0+IDAuMzY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQyICBwb3dlciAwLjAxMzQgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0MyAgcG93ZXIgMC4xMzUgIDAuNSAtPiAwLjM2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NCAgcG93ZXIgMC4wMTM1ICAwLjUgLT4gMC4xMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDUgIHBvd2VyIDAuMTM2ICAwLjUgLT4gMC4zNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDYgIHBvd2VyIDAuMDEzNiAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ3ICBwb3dlciAwLjEzNyAgMC41IC0+IDAuMzcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ4ICBwb3dlciAwLjAxMzcgIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0OSAgcG93ZXIgMC4xMzggIDAuNSAtPiAwLjM3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MCAgcG93ZXIgMC4wMTM4ICAwLjUgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTEgIHBvd2VyIDAuMTM5ICAwLjUgLT4gMC4zNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTIgIHBvd2VyIDAuMDEzOSAgMC41IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjUzICBwb3dlciAwLjE0MSAgMC41IC0+IDAuMzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU0ICBwb3dlciAwLjAxNDEgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NSAgcG93ZXIgMC4xNDIgIDAuNSAtPiAwLjM3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NiAgcG93ZXIgMC4wMTQyICAwLjUgLT4gMC4xMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTcgIHBvd2VyIDAuMTQzICAwLjUgLT4gMC4zNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTggIHBvd2VyIDAuMDE0MyAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU5ICBwb3dlciAwLjE0NCAgMC41IC0+IDAuMzc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYwICBwb3dlciAwLjAxNDQgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MSAgcG93ZXIgMC4xNDUgIDAuNSAtPiAwLjM4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MiAgcG93ZXIgMC4wMTQ1ICAwLjUgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjMgIHBvd2VyIDAuMTQ2ICAwLjUgLT4gMC4zODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjQgIHBvd2VyIDAuMDE0NiAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY1ICBwb3dlciAwLjE0NyAgMC41IC0+IDAuMzgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY2ICBwb3dlciAwLjAxNDcgIDAuNSAtPiAwLjEyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2NyAgcG93ZXIgMC4xNDggIDAuNSAtPiAwLjM4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2OCAgcG93ZXIgMC4wMTQ4ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjkgIHBvd2VyIDAuMTQ5ICAwLjUgLT4gMC4zODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzAgIHBvd2VyIDAuMDE0OSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjcxICBwb3dlciAwLjE1MSAgMC41IC0+IDAuMzg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjcyICBwb3dlciAwLjAxNTEgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3MyAgcG93ZXIgMC4xNTIgIDAuNSAtPiAwLjM5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NCAgcG93ZXIgMC4wMTUyICAwLjUgLT4gMC4xMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzUgIHBvd2VyIDAuMTUzICAwLjUgLT4gMC4zOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzYgIHBvd2VyIDAuMDE1MyAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc3ICBwb3dlciAwLjE1NCAgMC41IC0+IDAuMzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc4ICBwb3dlciAwLjAxNTQgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3OSAgcG93ZXIgMC4xNTUgIDAuNSAtPiAwLjM5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MCAgcG93ZXIgMC4wMTU1ICAwLjUgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODEgIHBvd2VyIDAuMTU2ICAwLjUgLT4gMC4zOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODIgIHBvd2VyIDAuMDE1NiAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjgzICBwb3dlciAwLjE1NyAgMC41IC0+IDAuMzk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg0ICBwb3dlciAwLjAxNTcgIDAuNSAtPiAwLjEyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NSAgcG93ZXIgMC4xNTggIDAuNSAtPiAwLjM5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NiAgcG93ZXIgMC4wMTU4ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODcgIHBvd2VyIDAuMTU5ICAwLjUgLT4gMC4zOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODggIHBvd2VyIDAuMDE1OSAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg5ICBwb3dlciAwLjE2MSAgMC41IC0+IDAuNDAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkwICBwb3dlciAwLjAxNjEgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MSAgcG93ZXIgMC4xNjIgIDAuNSAtPiAwLjQwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MiAgcG93ZXIgMC4wMTYyICAwLjUgLT4gMC4xMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTMgIHBvd2VyIDAuMTYzICAwLjUgLT4gMC40MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTQgIHBvd2VyIDAuMDE2MyAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk1ICBwb3dlciAwLjE2NCAgMC41IC0+IDAuNDA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk2ICBwb3dlciAwLjAxNjQgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5NyAgcG93ZXIgMC4xNjUgIDAuNSAtPiAwLjQwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5OCAgcG93ZXIgMC4wMTY1ICAwLjUgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTkgIHBvd2VyIDAuMTY2ICAwLjUgLT4gMC40MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDAgIHBvd2VyIDAuMDE2NiAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAxICBwb3dlciAwLjE2NyAgMC41IC0+IDAuNDA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAyICBwb3dlciAwLjAxNjcgIDAuNSAtPiAwLjEyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwMyAgcG93ZXIgMC4xNjggIDAuNSAtPiAwLjQxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNCAgcG93ZXIgMC4wMTY4ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDUgIHBvd2VyIDAuMTY5ICAwLjUgLT4gMC40MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDYgIHBvd2VyIDAuMDE2OSAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA3ICBwb3dlciAwLjE3MSAgMC41IC0+IDAuNDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA4ICBwb3dlciAwLjAxNzEgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwOSAgcG93ZXIgMC4xNzIgIDAuNSAtPiAwLjQxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMCAgcG93ZXIgMC4wMTcyICAwLjUgLT4gMC4xMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTEgIHBvd2VyIDAuMTczICAwLjUgLT4gMC40MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTIgIHBvd2VyIDAuMDE3MyAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzEzICBwb3dlciAwLjE3NCAgMC41IC0+IDAuNDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE0ICBwb3dlciAwLjAxNzQgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNSAgcG93ZXIgMC4xNzUgIDAuNSAtPiAwLjQxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNiAgcG93ZXIgMC4wMTc1ICAwLjUgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTcgIHBvd2VyIDAuMTc2ICAwLjUgLT4gMC40MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTggIHBvd2VyIDAuMDE3NiAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE5ICBwb3dlciAwLjE3NyAgMC41IC0+IDAuNDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIwICBwb3dlciAwLjAxNzcgIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMSAgcG93ZXIgMC4xNzggIDAuNSAtPiAwLjQyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMiAgcG93ZXIgMC4wMTc4ICAwLjUgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjMgIHBvd2VyIDAuMTc5ICAwLjUgLT4gMC40MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjQgIHBvd2VyIDAuMDE3OSAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI1ICBwb3dlciAwLjE4MSAgMC41IC0+IDAuNDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI2ICBwb3dlciAwLjAxODEgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyNyAgcG93ZXIgMC4xODIgIDAuNSAtPiAwLjQyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyOCAgcG93ZXIgMC4wMTgyICAwLjUgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjkgIHBvd2VyIDAuMTgzICAwLjUgLT4gMC40MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzAgIHBvd2VyIDAuMDE4MyAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMxICBwb3dlciAwLjE4NCAgMC41IC0+IDAuNDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMyICBwb3dlciAwLjAxODQgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzMyAgcG93ZXIgMC4xODUgIDAuNSAtPiAwLjQzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNCAgcG93ZXIgMC4wMTg1ICAwLjUgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzUgIHBvd2VyIDAuMTg2ICAwLjUgLT4gMC40MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzYgIHBvd2VyIDAuMDE4NiAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM3ICBwb3dlciAwLjE4NyAgMC41IC0+IDAuNDMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM4ICBwb3dlciAwLjAxODcgIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzOSAgcG93ZXIgMC4xODggIDAuNSAtPiAwLjQzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MCAgcG93ZXIgMC4wMTg4ICAwLjUgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDEgIHBvd2VyIDAuMTg5ICAwLjUgLT4gMC40MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDIgIHBvd2VyIDAuMDE4OSAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQzICBwb3dlciAwLjE5MSAgMC41IC0+IDAuNDM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ0ICBwb3dlciAwLjAxOTEgIDAuNSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NSAgcG93ZXIgMC4xOTIgIDAuNSAtPiAwLjQzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NiAgcG93ZXIgMC4wMTkyICAwLjUgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDcgIHBvd2VyIDAuMTkzICAwLjUgLT4gMC40MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDggIHBvd2VyIDAuMDE5MyAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ5ICBwb3dlciAwLjE5NCAgMC41IC0+IDAuNDQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUwICBwb3dlciAwLjAxOTQgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MSAgcG93ZXIgMC4xOTUgIDAuNSAtPiAwLjQ0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MiAgcG93ZXIgMC4wMTk1ICAwLjUgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTMgIHBvd2VyIDAuMTk2ICAwLjUgLT4gMC40NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTQgIHBvd2VyIDAuMDE5NiAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU1ICBwb3dlciAwLjE5NyAgMC41IC0+IDAuNDQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU2ICBwb3dlciAwLjAxOTcgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1NyAgcG93ZXIgMC4xOTggIDAuNSAtPiAwLjQ0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1OCAgcG93ZXIgMC4wMTk4ICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTkgIHBvd2VyIDAuMTk5ICAwLjUgLT4gMC40NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjAgIHBvd2VyIDAuMDE5OSAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYxICBwb3dlciAwLjIwMSAgMC41IC0+IDAuNDQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYyICBwb3dlciAwLjAyMDEgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2MyAgcG93ZXIgMC4yMDIgIDAuNSAtPiAwLjQ0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NCAgcG93ZXIgMC4wMjAyICAwLjUgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjUgIHBvd2VyIDAuMjAzICAwLjUgLT4gMC40NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjYgIHBvd2VyIDAuMDIwMyAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY3ICBwb3dlciAwLjIwNCAgMC41IC0+IDAuNDUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY4ICBwb3dlciAwLjAyMDQgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2OSAgcG93ZXIgMC4yMDUgIDAuNSAtPiAwLjQ1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MCAgcG93ZXIgMC4wMjA1ICAwLjUgLT4gMC4xNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzEgIHBvd2VyIDAuMjA2ICAwLjUgLT4gMC40NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzIgIHBvd2VyIDAuMDIwNiAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzczICBwb3dlciAwLjIwNyAgMC41IC0+IDAuNDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc0ICBwb3dlciAwLjAyMDcgIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NSAgcG93ZXIgMC4yMDggIDAuNSAtPiAwLjQ1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NiAgcG93ZXIgMC4wMjA4ICAwLjUgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzcgIHBvd2VyIDAuMjA5ICAwLjUgLT4gMC40NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzggIHBvd2VyIDAuMDIwOSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc5ICBwb3dlciAwLjIxMSAgMC41IC0+IDAuNDU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgwICBwb3dlciAwLjAyMTEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MSAgcG93ZXIgMC4yMTIgIDAuNSAtPiAwLjQ2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MiAgcG93ZXIgMC4wMjEyICAwLjUgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODMgIHBvd2VyIDAuMjEzICAwLjUgLT4gMC40NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODQgIHBvd2VyIDAuMDIxMyAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg1ICBwb3dlciAwLjIxNCAgMC41IC0+IDAuNDYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg2ICBwb3dlciAwLjAyMTQgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4NyAgcG93ZXIgMC4yMTUgIDAuNSAtPiAwLjQ2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4OCAgcG93ZXIgMC4wMjE1ICAwLjUgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODkgIHBvd2VyIDAuMjE2ICAwLjUgLT4gMC40NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTAgIHBvd2VyIDAuMDIxNiAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkxICBwb3dlciAwLjIxNyAgMC41IC0+IDAuNDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkyICBwb3dlciAwLjAyMTcgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5MyAgcG93ZXIgMC4yMTggIDAuNSAtPiAwLjQ2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NCAgcG93ZXIgMC4wMjE4ICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTUgIHBvd2VyIDAuMjE5ICAwLjUgLT4gMC40NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTYgIHBvd2VyIDAuMDIxOSAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk3ICBwb3dlciAwLjIyMSAgMC41IC0+IDAuNDcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk4ICBwb3dlciAwLjAyMjEgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5OSAgcG93ZXIgMC4yMjIgIDAuNSAtPiAwLjQ3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMCAgcG93ZXIgMC4wMjIyICAwLjUgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDEgIHBvd2VyIDAuMjIzICAwLjUgLT4gMC40NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDIgIHBvd2VyIDAuMDIyMyAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDAzICBwb3dlciAwLjIyNCAgMC41IC0+IDAuNDczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA0ICBwb3dlciAwLjAyMjQgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNSAgcG93ZXIgMC4yMjUgIDAuNSAtPiAwLjQ3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNiAgcG93ZXIgMC4wMjI1ICAwLjUgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDcgIHBvd2VyIDAuMjI2ICAwLjUgLT4gMC40NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDggIHBvd2VyIDAuMDIyNiAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA5ICBwb3dlciAwLjIyNyAgMC41IC0+IDAuNDc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDEwICBwb3dlciAwLjAyMjcgIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMSAgcG93ZXIgMC4yMjggIDAuNSAtPiAwLjQ3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMiAgcG93ZXIgMC4wMjI4ICAwLjUgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTMgIHBvd2VyIDAuMjI5ICAwLjUgLT4gMC40NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTQgIHBvd2VyIDAuMDIyOSAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE1ICBwb3dlciAwLjIzMSAgMC41IC0+IDAuNDgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE2ICBwb3dlciAwLjAyMzEgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxNyAgcG93ZXIgMC4yMzIgIDAuNSAtPiAwLjQ4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxOCAgcG93ZXIgMC4wMjMyICAwLjUgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTkgIHBvd2VyIDAuMjMzICAwLjUgLT4gMC40ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjAgIHBvd2VyIDAuMDIzMyAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIxICBwb3dlciAwLjIzNCAgMC41IC0+IDAuNDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIyICBwb3dlciAwLjAyMzQgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyMyAgcG93ZXIgMC4yMzUgIDAuNSAtPiAwLjQ4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNCAgcG93ZXIgMC4wMjM1ICAwLjUgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjUgIHBvd2VyIDAuMjM2ICAwLjUgLT4gMC40ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjYgIHBvd2VyIDAuMDIzNiAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI3ICBwb3dlciAwLjIzNyAgMC41IC0+IDAuNDg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI4ICBwb3dlciAwLjAyMzcgIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyOSAgcG93ZXIgMC4yMzggIDAuNSAtPiAwLjQ4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMCAgcG93ZXIgMC4wMjM4ICAwLjUgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzEgIHBvd2VyIDAuMjM5ICAwLjUgLT4gMC40ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzIgIHBvd2VyIDAuMDIzOSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDMzICBwb3dlciAwLjI0MSAgMC41IC0+IDAuNDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM0ICBwb3dlciAwLjAyNDEgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNSAgcG93ZXIgMC4yNDIgIDAuNSAtPiAwLjQ5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNiAgcG93ZXIgMC4wMjQyICAwLjUgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzcgIHBvd2VyIDAuMjQzICAwLjUgLT4gMC40OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzggIHBvd2VyIDAuMDI0MyAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM5ICBwb3dlciAwLjI0NCAgMC41IC0+IDAuNDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQwICBwb3dlciAwLjAyNDQgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MSAgcG93ZXIgMC4yNDUgIDAuNSAtPiAwLjQ5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MiAgcG93ZXIgMC4wMjQ1ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDMgIHBvd2VyIDAuMjQ2ICAwLjUgLT4gMC40OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDQgIHBvd2VyIDAuMDI0NiAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ1ICBwb3dlciAwLjI0NyAgMC41IC0+IDAuNDk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ2ICBwb3dlciAwLjAyNDcgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0NyAgcG93ZXIgMC4yNDggIDAuNSAtPiAwLjQ5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0OCAgcG93ZXIgMC4wMjQ4ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDkgIHBvd2VyIDAuMjQ5ICAwLjUgLT4gMC40OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTAgIHBvd2VyIDAuMDI0OSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUxICBwb3dlciAwLjI1MSAgMC41IC0+IDAuNTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUyICBwb3dlciAwLjAyNTEgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1MyAgcG93ZXIgMC4yNTIgIDAuNSAtPiAwLjUwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NCAgcG93ZXIgMC4wMjUyICAwLjUgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTUgIHBvd2VyIDAuMjUzICAwLjUgLT4gMC41MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTYgIHBvd2VyIDAuMDI1MyAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU3ICBwb3dlciAwLjI1NCAgMC41IC0+IDAuNTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU4ICBwb3dlciAwLjAyNTQgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1OSAgcG93ZXIgMC4yNTUgIDAuNSAtPiAwLjUwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MCAgcG93ZXIgMC4wMjU1ICAwLjUgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjEgIHBvd2VyIDAuMjU2ICAwLjUgLT4gMC41MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjIgIHBvd2VyIDAuMDI1NiAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDYzICBwb3dlciAwLjI1NyAgMC41IC0+IDAuNTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY0ICBwb3dlciAwLjAyNTcgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NSAgcG93ZXIgMC4yNTggIDAuNSAtPiAwLjUwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NiAgcG93ZXIgMC4wMjU4ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjcgIHBvd2VyIDAuMjU5ICAwLjUgLT4gMC41MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjggIHBvd2VyIDAuMDI1OSAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY5ICBwb3dlciAwLjI2MSAgMC41IC0+IDAuNTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcwICBwb3dlciAwLjAyNjEgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MSAgcG93ZXIgMC4yNjIgIDAuNSAtPiAwLjUxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MiAgcG93ZXIgMC4wMjYyICAwLjUgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzMgIHBvd2VyIDAuMjYzICAwLjUgLT4gMC41MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzQgIHBvd2VyIDAuMDI2MyAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc1ICBwb3dlciAwLjI2NCAgMC41IC0+IDAuNTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc2ICBwb3dlciAwLjAyNjQgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3NyAgcG93ZXIgMC4yNjUgIDAuNSAtPiAwLjUxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3OCAgcG93ZXIgMC4wMjY1ICAwLjUgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzkgIHBvd2VyIDAuMjY2ICAwLjUgLT4gMC41MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODAgIHBvd2VyIDAuMDI2NiAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgxICBwb3dlciAwLjI2NyAgMC41IC0+IDAuNTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgyICBwb3dlciAwLjAyNjcgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4MyAgcG93ZXIgMC4yNjggIDAuNSAtPiAwLjUxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NCAgcG93ZXIgMC4wMjY4ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODUgIHBvd2VyIDAuMjY5ICAwLjUgLT4gMC41MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODYgIHBvd2VyIDAuMDI2OSAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg3ICBwb3dlciAwLjI3MSAgMC41IC0+IDAuNTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg4ICBwb3dlciAwLjAyNzEgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4OSAgcG93ZXIgMC4yNzIgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MCAgcG93ZXIgMC4wMjcyICAwLjUgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTEgIHBvd2VyIDAuMjczICAwLjUgLT4gMC41MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTIgIHBvd2VyIDAuMDI3MyAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDkzICBwb3dlciAwLjI3NCAgMC41IC0+IDAuNTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk0ICBwb3dlciAwLjAyNzQgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NSAgcG93ZXIgMC4yNzUgIDAuNSAtPiAwLjUyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NiAgcG93ZXIgMC4wMjc1ICAwLjUgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTcgIHBvd2VyIDAuMjc2ICAwLjUgLT4gMC41MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTggIHBvd2VyIDAuMDI3NiAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk5ICBwb3dlciAwLjI3NyAgMC41IC0+IDAuNTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAwICBwb3dlciAwLjAyNzcgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMSAgcG93ZXIgMC4yNzggIDAuNSAtPiAwLjUyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMiAgcG93ZXIgMC4wMjc4ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDMgIHBvd2VyIDAuMjc5ICAwLjUgLT4gMC41MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDQgIHBvd2VyIDAuMDI3OSAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA1ICBwb3dlciAwLjI4MSAgMC41IC0+IDAuNTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA2ICBwb3dlciAwLjAyODEgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwNyAgcG93ZXIgMC4yODIgIDAuNSAtPiAwLjUzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwOCAgcG93ZXIgMC4wMjgyICAwLjUgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDkgIHBvd2VyIDAuMjgzICAwLjUgLT4gMC41MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTAgIHBvd2VyIDAuMDI4MyAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTExICBwb3dlciAwLjI4NCAgMC41IC0+IDAuNTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTEyICBwb3dlciAwLjAyODQgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxMyAgcG93ZXIgMC4yODUgIDAuNSAtPiAwLjUzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNCAgcG93ZXIgMC4wMjg1ICAwLjUgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTUgIHBvd2VyIDAuMjg2ICAwLjUgLT4gMC41MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTYgIHBvd2VyIDAuMDI4NiAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE3ICBwb3dlciAwLjI4NyAgMC41IC0+IDAuNTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE4ICBwb3dlciAwLjAyODcgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxOSAgcG93ZXIgMC4yODggIDAuNSAtPiAwLjUzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMCAgcG93ZXIgMC4wMjg4ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjEgIHBvd2VyIDAuMjg5ICAwLjUgLT4gMC41MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjIgIHBvd2VyIDAuMDI4OSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTIzICBwb3dlciAwLjI5MSAgMC41IC0+IDAuNTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI0ICBwb3dlciAwLjAyOTEgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNSAgcG93ZXIgMC4yOTIgIDAuNSAtPiAwLjU0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNiAgcG93ZXIgMC4wMjkyICAwLjUgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjcgIHBvd2VyIDAuMjkzICAwLjUgLT4gMC41NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjggIHBvd2VyIDAuMDI5MyAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI5ICBwb3dlciAwLjI5NCAgMC41IC0+IDAuNTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMwICBwb3dlciAwLjAyOTQgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMSAgcG93ZXIgMC4yOTUgIDAuNSAtPiAwLjU0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMiAgcG93ZXIgMC4wMjk1ICAwLjUgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzMgIHBvd2VyIDAuMjk2ICAwLjUgLT4gMC41NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzQgIHBvd2VyIDAuMDI5NiAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM1ICBwb3dlciAwLjI5NyAgMC41IC0+IDAuNTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM2ICBwb3dlciAwLjAyOTcgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzNyAgcG93ZXIgMC4yOTggIDAuNSAtPiAwLjU0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzOCAgcG93ZXIgMC4wMjk4ICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzkgIHBvd2VyIDAuMjk5ICAwLjUgLT4gMC41NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDAgIHBvd2VyIDAuMDI5OSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQxICBwb3dlciAwLjMwMSAgMC41IC0+IDAuNTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQyICBwb3dlciAwLjAzMDEgIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0MyAgcG93ZXIgMC4zMDIgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NCAgcG93ZXIgMC4wMzAyICAwLjUgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDUgIHBvd2VyIDAuMzAzICAwLjUgLT4gMC41NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDYgIHBvd2VyIDAuMDMwMyAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ3ICBwb3dlciAwLjMwNCAgMC41IC0+IDAuNTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ4ICBwb3dlciAwLjAzMDQgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0OSAgcG93ZXIgMC4zMDUgIDAuNSAtPiAwLjU1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MCAgcG93ZXIgMC4wMzA1ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTEgIHBvd2VyIDAuMzA2ICAwLjUgLT4gMC41NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTIgIHBvd2VyIDAuMDMwNiAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTUzICBwb3dlciAwLjMwNyAgMC41IC0+IDAuNTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU0ICBwb3dlciAwLjAzMDcgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NSAgcG93ZXIgMC4zMDggIDAuNSAtPiAwLjU1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NiAgcG93ZXIgMC4wMzA4ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTcgIHBvd2VyIDAuMzA5ICAwLjUgLT4gMC41NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTggIHBvd2VyIDAuMDMwOSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU5ICBwb3dlciAwLjMxMSAgMC41IC0+IDAuNTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYwICBwb3dlciAwLjAzMTEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MSAgcG93ZXIgMC4zMTIgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MiAgcG93ZXIgMC4wMzEyICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjMgIHBvd2VyIDAuMzEzICAwLjUgLT4gMC41NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjQgIHBvd2VyIDAuMDMxMyAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY1ICBwb3dlciAwLjMxNCAgMC41IC0+IDAuNTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY2ICBwb3dlciAwLjAzMTQgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2NyAgcG93ZXIgMC4zMTUgIDAuNSAtPiAwLjU2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2OCAgcG93ZXIgMC4wMzE1ICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjkgIHBvd2VyIDAuMzE2ICAwLjUgLT4gMC41NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzAgIHBvd2VyIDAuMDMxNiAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTcxICBwb3dlciAwLjMxNyAgMC41IC0+IDAuNTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTcyICBwb3dlciAwLjAzMTcgIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3MyAgcG93ZXIgMC4zMTggIDAuNSAtPiAwLjU2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NCAgcG93ZXIgMC4wMzE4ICAwLjUgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzUgIHBvd2VyIDAuMzE5ICAwLjUgLT4gMC41NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzYgIHBvd2VyIDAuMDMxOSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc3ICBwb3dlciAwLjMyMSAgMC41IC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc4ICBwb3dlciAwLjAzMjEgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3OSAgcG93ZXIgMC4zMjIgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MCAgcG93ZXIgMC4wMzIyICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODEgIHBvd2VyIDAuMzIzICAwLjUgLT4gMC41NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODIgIHBvd2VyIDAuMDMyMyAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTgzICBwb3dlciAwLjMyNCAgMC41IC0+IDAuNTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg0ICBwb3dlciAwLjAzMjQgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NSAgcG93ZXIgMC4zMjUgIDAuNSAtPiAwLjU3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NiAgcG93ZXIgMC4wMzI1ICAwLjUgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODcgIHBvd2VyIDAuMzI2ICAwLjUgLT4gMC41NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODggIHBvd2VyIDAuMDMyNiAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg5ICBwb3dlciAwLjMyNyAgMC41IC0+IDAuNTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkwICBwb3dlciAwLjAzMjcgIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MSAgcG93ZXIgMC4zMjggIDAuNSAtPiAwLjU3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MiAgcG93ZXIgMC4wMzI4ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTMgIHBvd2VyIDAuMzI5ICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTQgIHBvd2VyIDAuMDMyOSAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk1ICBwb3dlciAwLjMzMSAgMC41IC0+IDAuNTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk2ICBwb3dlciAwLjAzMzEgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5NyAgcG93ZXIgMC4zMzIgIDAuNSAtPiAwLjU3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5OCAgcG93ZXIgMC4wMzMyICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTkgIHBvd2VyIDAuMzMzICAwLjUgLT4gMC41NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDAgIHBvd2VyIDAuMDMzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAxICBwb3dlciAwLjMzNCAgMC41IC0+IDAuNTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAyICBwb3dlciAwLjAzMzQgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwMyAgcG93ZXIgMC4zMzUgIDAuNSAtPiAwLjU3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNCAgcG93ZXIgMC4wMzM1ICAwLjUgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDUgIHBvd2VyIDAuMzM2ICAwLjUgLT4gMC41ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDYgIHBvd2VyIDAuMDMzNiAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA3ICBwb3dlciAwLjMzNyAgMC41IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA4ICBwb3dlciAwLjAzMzcgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwOSAgcG93ZXIgMC4zMzggIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMCAgcG93ZXIgMC4wMzM4ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTEgIHBvd2VyIDAuMzM5ICAwLjUgLT4gMC41ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTIgIHBvd2VyIDAuMDMzOSAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjEzICBwb3dlciAwLjM0MSAgMC41IC0+IDAuNTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE0ICBwb3dlciAwLjAzNDEgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNSAgcG93ZXIgMC4zNDIgIDAuNSAtPiAwLjU4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNiAgcG93ZXIgMC4wMzQyICAwLjUgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTcgIHBvd2VyIDAuMzQzICAwLjUgLT4gMC41ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTggIHBvd2VyIDAuMDM0MyAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE5ICBwb3dlciAwLjM0NCAgMC41IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIwICBwb3dlciAwLjAzNDQgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMSAgcG93ZXIgMC4zNDUgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMiAgcG93ZXIgMC4wMzQ1ICAwLjUgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjMgIHBvd2VyIDAuMzQ2ICAwLjUgLT4gMC41ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjQgIHBvd2VyIDAuMDM0NiAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI1ICBwb3dlciAwLjM0NyAgMC41IC0+IDAuNTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI2ICBwb3dlciAwLjAzNDcgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyNyAgcG93ZXIgMC4zNDggIDAuNSAtPiAwLjU5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyOCAgcG93ZXIgMC4wMzQ4ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjkgIHBvd2VyIDAuMzQ5ICAwLjUgLT4gMC41OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzAgIHBvd2VyIDAuMDM0OSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMxICBwb3dlciAwLjM1MSAgMC41IC0+IDAuNTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMyICBwb3dlciAwLjAzNTEgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzMyAgcG93ZXIgMC4zNTIgIDAuNSAtPiAwLjU5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNCAgcG93ZXIgMC4wMzUyICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzUgIHBvd2VyIDAuMzUzICAwLjUgLT4gMC41OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzYgIHBvd2VyIDAuMDM1MyAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM3ICBwb3dlciAwLjM1NCAgMC41IC0+IDAuNTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM4ICBwb3dlciAwLjAzNTQgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzOSAgcG93ZXIgMC4zNTUgIDAuNSAtPiAwLjU5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MCAgcG93ZXIgMC4wMzU1ICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDEgIHBvd2VyIDAuMzU2ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDIgIHBvd2VyIDAuMDM1NiAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQzICBwb3dlciAwLjM1NyAgMC41IC0+IDAuNTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ0ICBwb3dlciAwLjAzNTcgIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NSAgcG93ZXIgMC4zNTggIDAuNSAtPiAwLjU5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NiAgcG93ZXIgMC4wMzU4ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDcgIHBvd2VyIDAuMzU5ICAwLjUgLT4gMC41OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDggIHBvd2VyIDAuMDM1OSAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ5ICBwb3dlciAwLjM2MSAgMC41IC0+IDAuNjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUwICBwb3dlciAwLjAzNjEgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MSAgcG93ZXIgMC4zNjIgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MiAgcG93ZXIgMC4wMzYyICAwLjUgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTMgIHBvd2VyIDAuMzYzICAwLjUgLT4gMC42MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTQgIHBvd2VyIDAuMDM2MyAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU1ICBwb3dlciAwLjM2NCAgMC41IC0+IDAuNjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU2ICBwb3dlciAwLjAzNjQgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1NyAgcG93ZXIgMC4zNjUgIDAuNSAtPiAwLjYwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1OCAgcG93ZXIgMC4wMzY1ICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTkgIHBvd2VyIDAuMzY2ICAwLjUgLT4gMC42MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjAgIHBvd2VyIDAuMDM2NiAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYxICBwb3dlciAwLjM2NyAgMC41IC0+IDAuNjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYyICBwb3dlciAwLjAzNjcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2MyAgcG93ZXIgMC4zNjggIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NCAgcG93ZXIgMC4wMzY4ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjUgIHBvd2VyIDAuMzY5ICAwLjUgLT4gMC42MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjYgIHBvd2VyIDAuMDM2OSAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY3ICBwb3dlciAwLjM3MSAgMC41IC0+IDAuNjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY4ICBwb3dlciAwLjAzNzEgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2OSAgcG93ZXIgMC4zNzIgIDAuNSAtPiAwLjYxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MCAgcG93ZXIgMC4wMzcyICAwLjUgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzEgIHBvd2VyIDAuMzczICAwLjUgLT4gMC42MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzIgIHBvd2VyIDAuMDM3MyAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjczICBwb3dlciAwLjM3NCAgMC41IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc0ICBwb3dlciAwLjAzNzQgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NSAgcG93ZXIgMC4zNzUgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NiAgcG93ZXIgMC4wMzc1ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzcgIHBvd2VyIDAuMzc2ICAwLjUgLT4gMC42MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzggIHBvd2VyIDAuMDM3NiAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc5ICBwb3dlciAwLjM3NyAgMC41IC0+IDAuNjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgwICBwb3dlciAwLjAzNzcgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MSAgcG93ZXIgMC4zNzggIDAuNSAtPiAwLjYxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MiAgcG93ZXIgMC4wMzc4ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODMgIHBvd2VyIDAuMzc5ICAwLjUgLT4gMC42MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODQgIHBvd2VyIDAuMDM3OSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg1ICBwb3dlciAwLjM4MSAgMC41IC0+IDAuNjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg2ICBwb3dlciAwLjAzODEgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4NyAgcG93ZXIgMC4zODIgIDAuNSAtPiAwLjYxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4OCAgcG93ZXIgMC4wMzgyICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODkgIHBvd2VyIDAuMzgzICAwLjUgLT4gMC42MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTAgIHBvd2VyIDAuMDM4MyAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkxICBwb3dlciAwLjM4NCAgMC41IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkyICBwb3dlciAwLjAzODQgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5MyAgcG93ZXIgMC4zODUgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NCAgcG93ZXIgMC4wMzg1ICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTUgIHBvd2VyIDAuMzg2ICAwLjUgLT4gMC42MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTYgIHBvd2VyIDAuMDM4NiAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk3ICBwb3dlciAwLjM4NyAgMC41IC0+IDAuNjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk4ICBwb3dlciAwLjAzODcgIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5OSAgcG93ZXIgMC4zODggIDAuNSAtPiAwLjYyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMCAgcG93ZXIgMC4wMzg4ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDEgIHBvd2VyIDAuMzg5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDIgIHBvd2VyIDAuMDM4OSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzAzICBwb3dlciAwLjM5MSAgMC41IC0+IDAuNjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA0ICBwb3dlciAwLjAzOTEgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNSAgcG93ZXIgMC4zOTIgIDAuNSAtPiAwLjYyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNiAgcG93ZXIgMC4wMzkyICAwLjUgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDcgIHBvd2VyIDAuMzkzICAwLjUgLT4gMC42MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDggIHBvd2VyIDAuMDM5MyAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA5ICBwb3dlciAwLjM5NCAgMC41IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzEwICBwb3dlciAwLjAzOTQgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMSAgcG93ZXIgMC4zOTUgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMiAgcG93ZXIgMC4wMzk1ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTMgIHBvd2VyIDAuMzk2ICAwLjUgLT4gMC42MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTQgIHBvd2VyIDAuMDM5NiAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE1ICBwb3dlciAwLjM5NyAgMC41IC0+IDAuNjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE2ICBwb3dlciAwLjAzOTcgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxNyAgcG93ZXIgMC4zOTggIDAuNSAtPiAwLjYzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxOCAgcG93ZXIgMC4wMzk4ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTkgIHBvd2VyIDAuMzk5ICAwLjUgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjAgIHBvd2VyIDAuMDM5OSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIxICBwb3dlciAwLjQwMSAgMC41IC0+IDAuNjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIyICBwb3dlciAwLjA0MDEgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyMyAgcG93ZXIgMC40MDIgIDAuNSAtPiAwLjYzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNCAgcG93ZXIgMC4wNDAyICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjUgIHBvd2VyIDAuNDAzICAwLjUgLT4gMC42MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjYgIHBvd2VyIDAuMDQwMyAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI3ICBwb3dlciAwLjQwNCAgMC41IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI4ICBwb3dlciAwLjA0MDQgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyOSAgcG93ZXIgMC40MDUgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMCAgcG93ZXIgMC4wNDA1ICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzEgIHBvd2VyIDAuNDA2ICAwLjUgLT4gMC42MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzIgIHBvd2VyIDAuMDQwNiAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzMzICBwb3dlciAwLjQwNyAgMC41IC0+IDAuNjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM0ICBwb3dlciAwLjA0MDcgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNSAgcG93ZXIgMC40MDggIDAuNSAtPiAwLjYzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNiAgcG93ZXIgMC4wNDA4ICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzcgIHBvd2VyIDAuNDA5ICAwLjUgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzggIHBvd2VyIDAuMDQwOSAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM5ICBwb3dlciAwLjQxMSAgMC41IC0+IDAuNjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQwICBwb3dlciAwLjA0MTEgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MSAgcG93ZXIgMC40MTIgIDAuNSAtPiAwLjY0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MiAgcG93ZXIgMC4wNDEyICAwLjUgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDMgIHBvd2VyIDAuNDEzICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDQgIHBvd2VyIDAuMDQxMyAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ1ICBwb3dlciAwLjQxNCAgMC41IC0+IDAuNjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ2ICBwb3dlciAwLjA0MTQgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0NyAgcG93ZXIgMC40MTUgIDAuNSAtPiAwLjY0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0OCAgcG93ZXIgMC4wNDE1ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDkgIHBvd2VyIDAuNDE2ICAwLjUgLT4gMC42NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTAgIHBvd2VyIDAuMDQxNiAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUxICBwb3dlciAwLjQxNyAgMC41IC0+IDAuNjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUyICBwb3dlciAwLjA0MTcgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1MyAgcG93ZXIgMC40MTggIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NCAgcG93ZXIgMC4wNDE4ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTUgIHBvd2VyIDAuNDE5ICAwLjUgLT4gMC42NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTYgIHBvd2VyIDAuMDQxOSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU3ICBwb3dlciAwLjQyMSAgMC41IC0+IDAuNjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU4ICBwb3dlciAwLjA0MjEgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1OSAgcG93ZXIgMC40MjIgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MCAgcG93ZXIgMC4wNDIyICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjEgIHBvd2VyIDAuNDIzICAwLjUgLT4gMC42NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjIgIHBvd2VyIDAuMDQyMyAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzYzICBwb3dlciAwLjQyNCAgMC41IC0+IDAuNjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY0ICBwb3dlciAwLjA0MjQgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NSAgcG93ZXIgMC40MjUgIDAuNSAtPiAwLjY1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NiAgcG93ZXIgMC4wNDI1ICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjcgIHBvd2VyIDAuNDI2ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjggIHBvd2VyIDAuMDQyNiAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY5ICBwb3dlciAwLjQyNyAgMC41IC0+IDAuNjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcwICBwb3dlciAwLjA0MjcgIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MSAgcG93ZXIgMC40MjggIDAuNSAtPiAwLjY1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MiAgcG93ZXIgMC4wNDI4ICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzMgIHBvd2VyIDAuNDI5ICAwLjUgLT4gMC42NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzQgIHBvd2VyIDAuMDQyOSAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc1ICBwb3dlciAwLjQzMSAgMC41IC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc2ICBwb3dlciAwLjA0MzEgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3NyAgcG93ZXIgMC40MzIgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3OCAgcG93ZXIgMC4wNDMyICAwLjUgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzkgIHBvd2VyIDAuNDMzICAwLjUgLT4gMC42NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODAgIHBvd2VyIDAuMDQzMyAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgxICBwb3dlciAwLjQzNCAgMC41IC0+IDAuNjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgyICBwb3dlciAwLjA0MzQgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4MyAgcG93ZXIgMC40MzUgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NCAgcG93ZXIgMC4wNDM1ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODUgIHBvd2VyIDAuNDM2ICAwLjUgLT4gMC42NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODYgIHBvd2VyIDAuMDQzNiAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg3ICBwb3dlciAwLjQzNyAgMC41IC0+IDAuNjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg4ICBwb3dlciAwLjA0MzcgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4OSAgcG93ZXIgMC40MzggIDAuNSAtPiAwLjY2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MCAgcG93ZXIgMC4wNDM4ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTEgIHBvd2VyIDAuNDM5ICAwLjUgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTIgIHBvd2VyIDAuMDQzOSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzkzICBwb3dlciAwLjQ0MSAgMC41IC0+IDAuNjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk0ICBwb3dlciAwLjA0NDEgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NSAgcG93ZXIgMC40NDIgIDAuNSAtPiAwLjY2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NiAgcG93ZXIgMC4wNDQyICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTcgIHBvd2VyIDAuNDQzICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTggIHBvd2VyIDAuMDQ0MyAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk5ICBwb3dlciAwLjQ0NCAgMC41IC0+IDAuNjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAwICBwb3dlciAwLjA0NDQgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMSAgcG93ZXIgMC40NDUgIDAuNSAtPiAwLjY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMiAgcG93ZXIgMC4wNDQ1ICAwLjUgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDMgIHBvd2VyIDAuNDQ2ICAwLjUgLT4gMC42NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDQgIHBvd2VyIDAuMDQ0NiAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA1ICBwb3dlciAwLjQ0NyAgMC41IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA2ICBwb3dlciAwLjA0NDcgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwNyAgcG93ZXIgMC40NDggIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwOCAgcG93ZXIgMC4wNDQ4ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDkgIHBvd2VyIDAuNDQ5ICAwLjUgLT4gMC42NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTAgIHBvd2VyIDAuMDQ0OSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODExICBwb3dlciAwLjQ1MSAgMC41IC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODEyICBwb3dlciAwLjA0NTEgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxMyAgcG93ZXIgMC40NTIgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNCAgcG93ZXIgMC4wNDUyICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTUgIHBvd2VyIDAuNDUzICAwLjUgLT4gMC42NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTYgIHBvd2VyIDAuMDQ1MyAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE3ICBwb3dlciAwLjQ1NCAgMC41IC0+IDAuNjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE4ICBwb3dlciAwLjA0NTQgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxOSAgcG93ZXIgMC40NTUgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMCAgcG93ZXIgMC4wNDU1ICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjEgIHBvd2VyIDAuNDU2ICAwLjUgLT4gMC42NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjIgIHBvd2VyIDAuMDQ1NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODIzICBwb3dlciAwLjQ1NyAgMC41IC0+IDAuNjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI0ICBwb3dlciAwLjA0NTcgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNSAgcG93ZXIgMC40NTggIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNiAgcG93ZXIgMC4wNDU4ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjcgIHBvd2VyIDAuNDU5ICAwLjUgLT4gMC42NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjggIHBvd2VyIDAuMDQ1OSAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI5ICBwb3dlciAwLjQ2MSAgMC41IC0+IDAuNjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMwICBwb3dlciAwLjA0NjEgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMSAgcG93ZXIgMC40NjIgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMiAgcG93ZXIgMC4wNDYyICAwLjUgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzMgIHBvd2VyIDAuNDYzICAwLjUgLT4gMC42ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzQgIHBvd2VyIDAuMDQ2MyAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM1ICBwb3dlciAwLjQ2NCAgMC41IC0+IDAuNjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM2ICBwb3dlciAwLjA0NjQgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzNyAgcG93ZXIgMC40NjUgIDAuNSAtPiAwLjY4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzOCAgcG93ZXIgMC4wNDY1ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzkgIHBvd2VyIDAuNDY2ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDAgIHBvd2VyIDAuMDQ2NiAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQxICBwb3dlciAwLjQ2NyAgMC41IC0+IDAuNjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQyICBwb3dlciAwLjA0NjcgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0MyAgcG93ZXIgMC40NjggIDAuNSAtPiAwLjY4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NCAgcG93ZXIgMC4wNDY4ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDUgIHBvd2VyIDAuNDY5ICAwLjUgLT4gMC42ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDYgIHBvd2VyIDAuMDQ2OSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ3ICBwb3dlciAwLjQ3MSAgMC41IC0+IDAuNjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ4ICBwb3dlciAwLjA0NzEgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0OSAgcG93ZXIgMC40NzIgIDAuNSAtPiAwLjY4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MCAgcG93ZXIgMC4wNDcyICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTEgIHBvd2VyIDAuNDczICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTIgIHBvd2VyIDAuMDQ3MyAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODUzICBwb3dlciAwLjQ3NCAgMC41IC0+IDAuNjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU0ICBwb3dlciAwLjA0NzQgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NSAgcG93ZXIgMC40NzUgIDAuNSAtPiAwLjY4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NiAgcG93ZXIgMC4wNDc1ICAwLjUgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTcgIHBvd2VyIDAuNDc2ICAwLjUgLT4gMC42OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTggIHBvd2VyIDAuMDQ3NiAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU5ICBwb3dlciAwLjQ3NyAgMC41IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYwICBwb3dlciAwLjA0NzcgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MSAgcG93ZXIgMC40NzggIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MiAgcG93ZXIgMC4wNDc4ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjMgIHBvd2VyIDAuNDc5ICAwLjUgLT4gMC42OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjQgIHBvd2VyIDAuMDQ3OSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY1ICBwb3dlciAwLjQ4MSAgMC41IC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY2ICBwb3dlciAwLjA0ODEgIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2NyAgcG93ZXIgMC40ODIgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2OCAgcG93ZXIgMC4wNDgyICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjkgIHBvd2VyIDAuNDgzICAwLjUgLT4gMC42OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzAgIHBvd2VyIDAuMDQ4MyAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODcxICBwb3dlciAwLjQ4NCAgMC41IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODcyICBwb3dlciAwLjA0ODQgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3MyAgcG93ZXIgMC40ODUgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NCAgcG93ZXIgMC4wNDg1ICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzUgIHBvd2VyIDAuNDg2ICAwLjUgLT4gMC42OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzYgIHBvd2VyIDAuMDQ4NiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc3ICBwb3dlciAwLjQ4NyAgMC41IC0+IDAuNjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc4ICBwb3dlciAwLjA0ODcgIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3OSAgcG93ZXIgMC40ODggIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MCAgcG93ZXIgMC4wNDg4ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODEgIHBvd2VyIDAuNDg5ICAwLjUgLT4gMC42OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODIgIHBvd2VyIDAuMDQ4OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODgzICBwb3dlciAwLjQ5MSAgMC41IC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg0ICBwb3dlciAwLjA0OTEgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NSAgcG93ZXIgMC40OTIgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NiAgcG93ZXIgMC4wNDkyICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODcgIHBvd2VyIDAuNDkzICAwLjUgLT4gMC43MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODggIHBvd2VyIDAuMDQ5MyAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg5ICBwb3dlciAwLjQ5NCAgMC41IC0+IDAuNzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkwICBwb3dlciAwLjA0OTQgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MSAgcG93ZXIgMC40OTUgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MiAgcG93ZXIgMC4wNDk1ICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTMgIHBvd2VyIDAuNDk2ICAwLjUgLT4gMC43MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTQgIHBvd2VyIDAuMDQ5NiAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk1ICBwb3dlciAwLjQ5NyAgMC41IC0+IDAuNzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk2ICBwb3dlciAwLjA0OTcgIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5NyAgcG93ZXIgMC40OTggIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5OCAgcG93ZXIgMC4wNDk4ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTkgIHBvd2VyIDAuNDk5ICAwLjUgLT4gMC43MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDAgIHBvd2VyIDAuMDQ5OSAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAxICBwb3dlciAwLjUwMSAgMC41IC0+IDAuNzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAyICBwb3dlciAwLjA1MDEgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwMyAgcG93ZXIgMC41MDIgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNCAgcG93ZXIgMC4wNTAyICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDUgIHBvd2VyIDAuNTAzICAwLjUgLT4gMC43MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDYgIHBvd2VyIDAuMDUwMyAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA3ICBwb3dlciAwLjUwNCAgMC41IC0+IDAuNzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA4ICBwb3dlciAwLjA1MDQgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwOSAgcG93ZXIgMC41MDUgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMCAgcG93ZXIgMC4wNTA1ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTEgIHBvd2VyIDAuNTA2ICAwLjUgLT4gMC43MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTIgIHBvd2VyIDAuMDUwNiAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTEzICBwb3dlciAwLjUwNyAgMC41IC0+IDAuNzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE0ICBwb3dlciAwLjA1MDcgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNSAgcG93ZXIgMC41MDggIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNiAgcG93ZXIgMC4wNTA4ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTcgIHBvd2VyIDAuNTA5ICAwLjUgLT4gMC43MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTggIHBvd2VyIDAuMDUwOSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE5ICBwb3dlciAwLjUxMSAgMC41IC0+IDAuNzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIwICBwb3dlciAwLjA1MTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMSAgcG93ZXIgMC41MTIgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMiAgcG93ZXIgMC4wNTEyICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjMgIHBvd2VyIDAuNTEzICAwLjUgLT4gMC43MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjQgIHBvd2VyIDAuMDUxMyAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI1ICBwb3dlciAwLjUxNCAgMC41IC0+IDAuNzE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI2ICBwb3dlciAwLjA1MTQgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyNyAgcG93ZXIgMC41MTUgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyOCAgcG93ZXIgMC4wNTE1ICAwLjUgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjkgIHBvd2VyIDAuNTE2ICAwLjUgLT4gMC43MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzAgIHBvd2VyIDAuMDUxNiAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMxICBwb3dlciAwLjUxNyAgMC41IC0+IDAuNzE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMyICBwb3dlciAwLjA1MTcgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzMyAgcG93ZXIgMC41MTggIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNCAgcG93ZXIgMC4wNTE4ICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzUgIHBvd2VyIDAuNTE5ICAwLjUgLT4gMC43MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzYgIHBvd2VyIDAuMDUxOSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM3ICBwb3dlciAwLjUyMSAgMC41IC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM4ICBwb3dlciAwLjA1MjEgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzOSAgcG93ZXIgMC41MjIgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MCAgcG93ZXIgMC4wNTIyICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDEgIHBvd2VyIDAuNTIzICAwLjUgLT4gMC43MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDIgIHBvd2VyIDAuMDUyMyAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQzICBwb3dlciAwLjUyNCAgMC41IC0+IDAuNzI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ0ICBwb3dlciAwLjA1MjQgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NSAgcG93ZXIgMC41MjUgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NiAgcG93ZXIgMC4wNTI1ICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDcgIHBvd2VyIDAuNTI2ICAwLjUgLT4gMC43MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDggIHBvd2VyIDAuMDUyNiAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ5ICBwb3dlciAwLjUyNyAgMC41IC0+IDAuNzI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUwICBwb3dlciAwLjA1MjcgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MSAgcG93ZXIgMC41MjggIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MiAgcG93ZXIgMC4wNTI4ICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTMgIHBvd2VyIDAuNTI5ICAwLjUgLT4gMC43MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTQgIHBvd2VyIDAuMDUyOSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU1ICBwb3dlciAwLjUzMSAgMC41IC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU2ICBwb3dlciAwLjA1MzEgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1NyAgcG93ZXIgMC41MzIgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1OCAgcG93ZXIgMC4wNTMyICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTkgIHBvd2VyIDAuNTMzICAwLjUgLT4gMC43MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjAgIHBvd2VyIDAuMDUzMyAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYxICBwb3dlciAwLjUzNCAgMC41IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYyICBwb3dlciAwLjA1MzQgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2MyAgcG93ZXIgMC41MzUgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NCAgcG93ZXIgMC4wNTM1ICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjUgIHBvd2VyIDAuNTM2ICAwLjUgLT4gMC43MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjYgIHBvd2VyIDAuMDUzNiAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY3ICBwb3dlciAwLjUzNyAgMC41IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY4ICBwb3dlciAwLjA1MzcgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2OSAgcG93ZXIgMC41MzggIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MCAgcG93ZXIgMC4wNTM4ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzEgIHBvd2VyIDAuNTM5ICAwLjUgLT4gMC43MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzIgIHBvd2VyIDAuMDUzOSAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTczICBwb3dlciAwLjU0MSAgMC41IC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc0ICBwb3dlciAwLjA1NDEgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NSAgcG93ZXIgMC41NDIgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NiAgcG93ZXIgMC4wNTQyICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzcgIHBvd2VyIDAuNTQzICAwLjUgLT4gMC43MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzggIHBvd2VyIDAuMDU0MyAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc5ICBwb3dlciAwLjU0NCAgMC41IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgwICBwb3dlciAwLjA1NDQgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MSAgcG93ZXIgMC41NDUgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MiAgcG93ZXIgMC4wNTQ1ICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODMgIHBvd2VyIDAuNTQ2ICAwLjUgLT4gMC43MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODQgIHBvd2VyIDAuMDU0NiAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg1ICBwb3dlciAwLjU0NyAgMC41IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg2ICBwb3dlciAwLjA1NDcgIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4NyAgcG93ZXIgMC41NDggIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4OCAgcG93ZXIgMC4wNTQ4ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODkgIHBvd2VyIDAuNTQ5ICAwLjUgLT4gMC43NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTAgIHBvd2VyIDAuMDU0OSAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkxICBwb3dlciAwLjU1MSAgMC41IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkyICBwb3dlciAwLjA1NTEgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5MyAgcG93ZXIgMC41NTIgIDAuNSAtPiAwLjc0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NCAgcG93ZXIgMC4wNTUyICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTUgIHBvd2VyIDAuNTUzICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTYgIHBvd2VyIDAuMDU1MyAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk3ICBwb3dlciAwLjU1NCAgMC41IC0+IDAuNzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk4ICBwb3dlciAwLjA1NTQgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5OSAgcG93ZXIgMC41NTUgIDAuNSAtPiAwLjc0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMCAgcG93ZXIgMC4wNTU1ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDEgIHBvd2VyIDAuNTU2ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDIgIHBvd2VyIDAuMDU1NiAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDAzICBwb3dlciAwLjU1NyAgMC41IC0+IDAuNzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA0ICBwb3dlciAwLjA1NTcgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNSAgcG93ZXIgMC41NTggIDAuNSAtPiAwLjc0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNiAgcG93ZXIgMC4wNTU4ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDcgIHBvd2VyIDAuNTU5ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDggIHBvd2VyIDAuMDU1OSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA5ICBwb3dlciAwLjU2MSAgMC41IC0+IDAuNzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDEwICBwb3dlciAwLjA1NjEgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMSAgcG93ZXIgMC41NjIgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMiAgcG93ZXIgMC4wNTYyICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTMgIHBvd2VyIDAuNTYzICAwLjUgLT4gMC43NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTQgIHBvd2VyIDAuMDU2MyAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE1ICBwb3dlciAwLjU2NCAgMC41IC0+IDAuNzUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE2ICBwb3dlciAwLjA1NjQgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxNyAgcG93ZXIgMC41NjUgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxOCAgcG93ZXIgMC4wNTY1ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTkgIHBvd2VyIDAuNTY2ICAwLjUgLT4gMC43NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjAgIHBvd2VyIDAuMDU2NiAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIxICBwb3dlciAwLjU2NyAgMC41IC0+IDAuNzUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIyICBwb3dlciAwLjA1NjcgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyMyAgcG93ZXIgMC41NjggIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNCAgcG93ZXIgMC4wNTY4ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjUgIHBvd2VyIDAuNTY5ICAwLjUgLT4gMC43NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjYgIHBvd2VyIDAuMDU2OSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI3ICBwb3dlciAwLjU3MSAgMC41IC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI4ICBwb3dlciAwLjA1NzEgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyOSAgcG93ZXIgMC41NzIgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMCAgcG93ZXIgMC4wNTcyICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzEgIHBvd2VyIDAuNTczICAwLjUgLT4gMC43NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzIgIHBvd2VyIDAuMDU3MyAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDMzICBwb3dlciAwLjU3NCAgMC41IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM0ICBwb3dlciAwLjA1NzQgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNSAgcG93ZXIgMC41NzUgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNiAgcG93ZXIgMC4wNTc1ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzcgIHBvd2VyIDAuNTc2ICAwLjUgLT4gMC43NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzggIHBvd2VyIDAuMDU3NiAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM5ICBwb3dlciAwLjU3NyAgMC41IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQwICBwb3dlciAwLjA1NzcgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MSAgcG93ZXIgMC41NzggIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MiAgcG93ZXIgMC4wNTc4ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDMgIHBvd2VyIDAuNTc5ICAwLjUgLT4gMC43NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDQgIHBvd2VyIDAuMDU3OSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ1ICBwb3dlciAwLjU4MSAgMC41IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ2ICBwb3dlciAwLjA1ODEgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0NyAgcG93ZXIgMC41ODIgIDAuNSAtPiAwLjc2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0OCAgcG93ZXIgMC4wNTgyICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDkgIHBvd2VyIDAuNTgzICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTAgIHBvd2VyIDAuMDU4MyAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUxICBwb3dlciAwLjU4NCAgMC41IC0+IDAuNzY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUyICBwb3dlciAwLjA1ODQgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1MyAgcG93ZXIgMC41ODUgIDAuNSAtPiAwLjc2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NCAgcG93ZXIgMC4wNTg1ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTUgIHBvd2VyIDAuNTg2ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTYgIHBvd2VyIDAuMDU4NiAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU3ICBwb3dlciAwLjU4NyAgMC41IC0+IDAuNzY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU4ICBwb3dlciAwLjA1ODcgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1OSAgcG93ZXIgMC41ODggIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MCAgcG93ZXIgMC4wNTg4ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjEgIHBvd2VyIDAuNTg5ICAwLjUgLT4gMC43NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjIgIHBvd2VyIDAuMDU4OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDYzICBwb3dlciAwLjU5MSAgMC41IC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY0ICBwb3dlciAwLjA1OTEgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NSAgcG93ZXIgMC41OTIgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NiAgcG93ZXIgMC4wNTkyICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjcgIHBvd2VyIDAuNTkzICAwLjUgLT4gMC43NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjggIHBvd2VyIDAuMDU5MyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY5ICBwb3dlciAwLjU5NCAgMC41IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcwICBwb3dlciAwLjA1OTQgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MSAgcG93ZXIgMC41OTUgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MiAgcG93ZXIgMC4wNTk1ICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzMgIHBvd2VyIDAuNTk2ICAwLjUgLT4gMC43NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzQgIHBvd2VyIDAuMDU5NiAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc1ICBwb3dlciAwLjU5NyAgMC41IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc2ICBwb3dlciAwLjA1OTcgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3NyAgcG93ZXIgMC41OTggIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3OCAgcG93ZXIgMC4wNTk4ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzkgIHBvd2VyIDAuNTk5ICAwLjUgLT4gMC43NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODAgIHBvd2VyIDAuMDU5OSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgxICBwb3dlciAwLjYwMSAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgyICBwb3dlciAwLjA2MDEgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4MyAgcG93ZXIgMC42MDIgIDAuNSAtPiAwLjc3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NCAgcG93ZXIgMC4wNjAyICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODUgIHBvd2VyIDAuNjAzICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODYgIHBvd2VyIDAuMDYwMyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg3ICBwb3dlciAwLjYwNCAgMC41IC0+IDAuNzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg4ICBwb3dlciAwLjA2MDQgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4OSAgcG93ZXIgMC42MDUgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MCAgcG93ZXIgMC4wNjA1ICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTEgIHBvd2VyIDAuNjA2ICAwLjUgLT4gMC43NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTIgIHBvd2VyIDAuMDYwNiAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDkzICBwb3dlciAwLjYwNyAgMC41IC0+IDAuNzc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk0ICBwb3dlciAwLjA2MDcgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NSAgcG93ZXIgMC42MDggIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NiAgcG93ZXIgMC4wNjA4ICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTcgIHBvd2VyIDAuNjA5ICAwLjUgLT4gMC43ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTggIHBvd2VyIDAuMDYwOSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk5ICBwb3dlciAwLjYxMSAgMC41IC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAwICBwb3dlciAwLjA2MTEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMSAgcG93ZXIgMC42MTIgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMiAgcG93ZXIgMC4wNjEyICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDMgIHBvd2VyIDAuNjEzICAwLjUgLT4gMC43ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDQgIHBvd2VyIDAuMDYxMyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA1ICBwb3dlciAwLjYxNCAgMC41IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA2ICBwb3dlciAwLjA2MTQgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwNyAgcG93ZXIgMC42MTUgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwOCAgcG93ZXIgMC4wNjE1ICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDkgIHBvd2VyIDAuNjE2ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTAgIHBvd2VyIDAuMDYxNiAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTExICBwb3dlciAwLjYxNyAgMC41IC0+IDAuNzg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTEyICBwb3dlciAwLjA2MTcgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExMyAgcG93ZXIgMC42MTggIDAuNSAtPiAwLjc4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNCAgcG93ZXIgMC4wNjE4ICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTUgIHBvd2VyIDAuNjE5ICAwLjUgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTYgIHBvd2VyIDAuMDYxOSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE3ICBwb3dlciAwLjYyMSAgMC41IC0+IDAuNzg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE4ICBwb3dlciAwLjA2MjEgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExOSAgcG93ZXIgMC42MjIgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMCAgcG93ZXIgMC4wNjIyICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjEgIHBvd2VyIDAuNjIzICAwLjUgLT4gMC43ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjIgIHBvd2VyIDAuMDYyMyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTIzICBwb3dlciAwLjYyNCAgMC41IC0+IDAuNzkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI0ICBwb3dlciAwLjA2MjQgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNSAgcG93ZXIgMC42MjUgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNiAgcG93ZXIgMC4wNjI1ICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjcgIHBvd2VyIDAuNjI2ICAwLjUgLT4gMC43OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjggIHBvd2VyIDAuMDYyNiAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI5ICBwb3dlciAwLjYyNyAgMC41IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMwICBwb3dlciAwLjA2MjcgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMSAgcG93ZXIgMC42MjggIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMiAgcG93ZXIgMC4wNjI4ICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzMgIHBvd2VyIDAuNjI5ICAwLjUgLT4gMC43OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzQgIHBvd2VyIDAuMDYyOSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM1ICBwb3dlciAwLjYzMSAgMC41IC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM2ICBwb3dlciAwLjA2MzEgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzNyAgcG93ZXIgMC42MzIgIDAuNSAtPiAwLjc5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzOCAgcG93ZXIgMC4wNjMyICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzkgIHBvd2VyIDAuNjMzICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDAgIHBvd2VyIDAuMDYzMyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQxICBwb3dlciAwLjYzNCAgMC41IC0+IDAuNzk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQyICBwb3dlciAwLjA2MzQgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0MyAgcG93ZXIgMC42MzUgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NCAgcG93ZXIgMC4wNjM1ICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDUgIHBvd2VyIDAuNjM2ICAwLjUgLT4gMC43OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDYgIHBvd2VyIDAuMDYzNiAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ3ICBwb3dlciAwLjYzNyAgMC41IC0+IDAuNzk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ4ICBwb3dlciAwLjA2MzcgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0OSAgcG93ZXIgMC42MzggIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MCAgcG93ZXIgMC4wNjM4ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTEgIHBvd2VyIDAuNjM5ICAwLjUgLT4gMC43OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTIgIHBvd2VyIDAuMDYzOSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTUzICBwb3dlciAwLjY0MSAgMC41IC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU0ICBwb3dlciAwLjA2NDEgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NSAgcG93ZXIgMC42NDIgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NiAgcG93ZXIgMC4wNjQyICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTcgIHBvd2VyIDAuNjQzICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTggIHBvd2VyIDAuMDY0MyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU5ICBwb3dlciAwLjY0NCAgMC41IC0+IDAuODAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYwICBwb3dlciAwLjA2NDQgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MSAgcG93ZXIgMC42NDUgIDAuNSAtPiAwLjgwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MiAgcG93ZXIgMC4wNjQ1ICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjMgIHBvd2VyIDAuNjQ2ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjQgIHBvd2VyIDAuMDY0NiAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY1ICBwb3dlciAwLjY0NyAgMC41IC0+IDAuODA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY2ICBwb3dlciAwLjA2NDcgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2NyAgcG93ZXIgMC42NDggIDAuNSAtPiAwLjgwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2OCAgcG93ZXIgMC4wNjQ4ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjkgIHBvd2VyIDAuNjQ5ICAwLjUgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzAgIHBvd2VyIDAuMDY0OSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTcxICBwb3dlciAwLjY1MSAgMC41IC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTcyICBwb3dlciAwLjA2NTEgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3MyAgcG93ZXIgMC42NTIgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NCAgcG93ZXIgMC4wNjUyICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzUgIHBvd2VyIDAuNjUzICAwLjUgLT4gMC44MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzYgIHBvd2VyIDAuMDY1MyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc3ICBwb3dlciAwLjY1NCAgMC41IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc4ICBwb3dlciAwLjA2NTQgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3OSAgcG93ZXIgMC42NTUgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MCAgcG93ZXIgMC4wNjU1ICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODEgIHBvd2VyIDAuNjU2ICAwLjUgLT4gMC44MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODIgIHBvd2VyIDAuMDY1NiAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTgzICBwb3dlciAwLjY1NyAgMC41IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg0ICBwb3dlciAwLjA2NTcgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NSAgcG93ZXIgMC42NTggIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NiAgcG93ZXIgMC4wNjU4ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODcgIHBvd2VyIDAuNjU5ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODggIHBvd2VyIDAuMDY1OSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg5ICBwb3dlciAwLjY2MSAgMC41IC0+IDAuODEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkwICBwb3dlciAwLjA2NjEgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MSAgcG93ZXIgMC42NjIgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MiAgcG93ZXIgMC4wNjYyICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTMgIHBvd2VyIDAuNjYzICAwLjUgLT4gMC44MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTQgIHBvd2VyIDAuMDY2MyAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk1ICBwb3dlciAwLjY2NCAgMC41IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk2ICBwb3dlciAwLjA2NjQgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5NyAgcG93ZXIgMC42NjUgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5OCAgcG93ZXIgMC4wNjY1ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTkgIHBvd2VyIDAuNjY2ICAwLjUgLT4gMC44MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDAgIHBvd2VyIDAuMDY2NiAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAxICBwb3dlciAwLjY2NyAgMC41IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAyICBwb3dlciAwLjA2NjcgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwMyAgcG93ZXIgMC42NjggIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNCAgcG93ZXIgMC4wNjY4ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDUgIHBvd2VyIDAuNjY5ICAwLjUgLT4gMC44MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDYgIHBvd2VyIDAuMDY2OSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA3ICBwb3dlciAwLjY3MSAgMC41IC0+IDAuODE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA4ICBwb3dlciAwLjA2NzEgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwOSAgcG93ZXIgMC42NzIgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMCAgcG93ZXIgMC4wNjcyICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTEgIHBvd2VyIDAuNjczICAwLjUgLT4gMC44MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTIgIHBvd2VyIDAuMDY3MyAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjEzICBwb3dlciAwLjY3NCAgMC41IC0+IDAuODIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE0ICBwb3dlciAwLjA2NzQgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNSAgcG93ZXIgMC42NzUgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNiAgcG93ZXIgMC4wNjc1ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTcgIHBvd2VyIDAuNjc2ICAwLjUgLT4gMC44MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTggIHBvd2VyIDAuMDY3NiAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE5ICBwb3dlciAwLjY3NyAgMC41IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIwICBwb3dlciAwLjA2NzcgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMSAgcG93ZXIgMC42NzggIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMiAgcG93ZXIgMC4wNjc4ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjMgIHBvd2VyIDAuNjc5ICAwLjUgLT4gMC44MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjQgIHBvd2VyIDAuMDY3OSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI1ICBwb3dlciAwLjY4MSAgMC41IC0+IDAuODI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI2ICBwb3dlciAwLjA2ODEgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyNyAgcG93ZXIgMC42ODIgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyOCAgcG93ZXIgMC4wNjgyICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjkgIHBvd2VyIDAuNjgzICAwLjUgLT4gMC44MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzAgIHBvd2VyIDAuMDY4MyAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMxICBwb3dlciAwLjY4NCAgMC41IC0+IDAuODI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMyICBwb3dlciAwLjA2ODQgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzMyAgcG93ZXIgMC42ODUgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNCAgcG93ZXIgMC4wNjg1ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzUgIHBvd2VyIDAuNjg2ICAwLjUgLT4gMC44MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzYgIHBvd2VyIDAuMDY4NiAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM3ICBwb3dlciAwLjY4NyAgMC41IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM4ICBwb3dlciAwLjA2ODcgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzOSAgcG93ZXIgMC42ODggIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MCAgcG93ZXIgMC4wNjg4ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDEgIHBvd2VyIDAuNjg5ICAwLjUgLT4gMC44MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDIgIHBvd2VyIDAuMDY4OSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQzICBwb3dlciAwLjY5MSAgMC41IC0+IDAuODMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ0ICBwb3dlciAwLjA2OTEgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NSAgcG93ZXIgMC42OTIgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NiAgcG93ZXIgMC4wNjkyICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDcgIHBvd2VyIDAuNjkzICAwLjUgLT4gMC44MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDggIHBvd2VyIDAuMDY5MyAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ5ICBwb3dlciAwLjY5NCAgMC41IC0+IDAuODMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUwICBwb3dlciAwLjA2OTQgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MSAgcG93ZXIgMC42OTUgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MiAgcG93ZXIgMC4wNjk1ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTMgIHBvd2VyIDAuNjk2ICAwLjUgLT4gMC44MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTQgIHBvd2VyIDAuMDY5NiAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU1ICBwb3dlciAwLjY5NyAgMC41IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU2ICBwb3dlciAwLjA2OTcgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1NyAgcG93ZXIgMC42OTggIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1OCAgcG93ZXIgMC4wNjk4ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTkgIHBvd2VyIDAuNjk5ICAwLjUgLT4gMC44MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjAgIHBvd2VyIDAuMDY5OSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYxICBwb3dlciAwLjcwMSAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYyICBwb3dlciAwLjA3MDEgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2MyAgcG93ZXIgMC43MDIgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NCAgcG93ZXIgMC4wNzAyICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjUgIHBvd2VyIDAuNzAzICAwLjUgLT4gMC44MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjYgIHBvd2VyIDAuMDcwMyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY3ICBwb3dlciAwLjcwNCAgMC41IC0+IDAuODM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY4ICBwb3dlciAwLjA3MDQgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2OSAgcG93ZXIgMC43MDUgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MCAgcG93ZXIgMC4wNzA1ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzEgIHBvd2VyIDAuNzA2ICAwLjUgLT4gMC44NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzIgIHBvd2VyIDAuMDcwNiAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjczICBwb3dlciAwLjcwNyAgMC41IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc0ICBwb3dlciAwLjA3MDcgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NSAgcG93ZXIgMC43MDggIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NiAgcG93ZXIgMC4wNzA4ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzcgIHBvd2VyIDAuNzA5ICAwLjUgLT4gMC44NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzggIHBvd2VyIDAuMDcwOSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc5ICBwb3dlciAwLjcxMSAgMC41IC0+IDAuODQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgwICBwb3dlciAwLjA3MTEgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MSAgcG93ZXIgMC43MTIgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MiAgcG93ZXIgMC4wNzEyICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODMgIHBvd2VyIDAuNzEzICAwLjUgLT4gMC44NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODQgIHBvd2VyIDAuMDcxMyAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg1ICBwb3dlciAwLjcxNCAgMC41IC0+IDAuODQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg2ICBwb3dlciAwLjA3MTQgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4NyAgcG93ZXIgMC43MTUgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4OCAgcG93ZXIgMC4wNzE1ICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODkgIHBvd2VyIDAuNzE2ICAwLjUgLT4gMC44NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTAgIHBvd2VyIDAuMDcxNiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkxICBwb3dlciAwLjcxNyAgMC41IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkyICBwb3dlciAwLjA3MTcgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5MyAgcG93ZXIgMC43MTggIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NCAgcG93ZXIgMC4wNzE4ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTUgIHBvd2VyIDAuNzE5ICAwLjUgLT4gMC44NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTYgIHBvd2VyIDAuMDcxOSAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk3ICBwb3dlciAwLjcyMSAgMC41IC0+IDAuODQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk4ICBwb3dlciAwLjA3MjEgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5OSAgcG93ZXIgMC43MjIgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMCAgcG93ZXIgMC4wNzIyICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDEgIHBvd2VyIDAuNzIzICAwLjUgLT4gMC44NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDIgIHBvd2VyIDAuMDcyMyAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzAzICBwb3dlciAwLjcyNCAgMC41IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA0ICBwb3dlciAwLjA3MjQgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNSAgcG93ZXIgMC43MjUgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNiAgcG93ZXIgMC4wNzI1ICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDcgIHBvd2VyIDAuNzI2ICAwLjUgLT4gMC44NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDggIHBvd2VyIDAuMDcyNiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA5ICBwb3dlciAwLjcyNyAgMC41IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzEwICBwb3dlciAwLjA3MjcgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMSAgcG93ZXIgMC43MjggIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMiAgcG93ZXIgMC4wNzI4ICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTMgIHBvd2VyIDAuNzI5ICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTQgIHBvd2VyIDAuMDcyOSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE1ICBwb3dlciAwLjczMSAgMC41IC0+IDAuODU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE2ICBwb3dlciAwLjA3MzEgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxNyAgcG93ZXIgMC43MzIgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxOCAgcG93ZXIgMC4wNzMyICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTkgIHBvd2VyIDAuNzMzICAwLjUgLT4gMC44NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjAgIHBvd2VyIDAuMDczMyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIxICBwb3dlciAwLjczNCAgMC41IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIyICBwb3dlciAwLjA3MzQgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyMyAgcG93ZXIgMC43MzUgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNCAgcG93ZXIgMC4wNzM1ICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjUgIHBvd2VyIDAuNzM2ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjYgIHBvd2VyIDAuMDczNiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI3ICBwb3dlciAwLjczNyAgMC41IC0+IDAuODU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI4ICBwb3dlciAwLjA3MzcgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyOSAgcG93ZXIgMC43MzggIDAuNSAtPiAwLjg1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMCAgcG93ZXIgMC4wNzM4ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzEgIHBvd2VyIDAuNzM5ICAwLjUgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzIgIHBvd2VyIDAuMDczOSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzMzICBwb3dlciAwLjc0MSAgMC41IC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM0ICBwb3dlciAwLjA3NDEgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNSAgcG93ZXIgMC43NDIgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNiAgcG93ZXIgMC4wNzQyICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzcgIHBvd2VyIDAuNzQzICAwLjUgLT4gMC44NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzggIHBvd2VyIDAuMDc0MyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM5ICBwb3dlciAwLjc0NCAgMC41IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQwICBwb3dlciAwLjA3NDQgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MSAgcG93ZXIgMC43NDUgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MiAgcG93ZXIgMC4wNzQ1ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDMgIHBvd2VyIDAuNzQ2ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDQgIHBvd2VyIDAuMDc0NiAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ1ICBwb3dlciAwLjc0NyAgMC41IC0+IDAuODY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ2ICBwb3dlciAwLjA3NDcgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0NyAgcG93ZXIgMC43NDggIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0OCAgcG93ZXIgMC4wNzQ4ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDkgIHBvd2VyIDAuNzQ5ICAwLjUgLT4gMC44NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTAgIHBvd2VyIDAuMDc0OSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUxICBwb3dlciAwLjc1MSAgMC41IC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUyICBwb3dlciAwLjA3NTEgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1MyAgcG93ZXIgMC43NTIgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NCAgcG93ZXIgMC4wNzUyICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTUgIHBvd2VyIDAuNzUzICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTYgIHBvd2VyIDAuMDc1MyAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU3ICBwb3dlciAwLjc1NCAgMC41IC0+IDAuODY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU4ICBwb3dlciAwLjA3NTQgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1OSAgcG93ZXIgMC43NTUgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MCAgcG93ZXIgMC4wNzU1ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjEgIHBvd2VyIDAuNzU2ICAwLjUgLT4gMC44NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjIgIHBvd2VyIDAuMDc1NiAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzYzICBwb3dlciAwLjc1NyAgMC41IC0+IDAuODcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY0ICBwb3dlciAwLjA3NTcgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NSAgcG93ZXIgMC43NTggIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NiAgcG93ZXIgMC4wNzU4ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjcgIHBvd2VyIDAuNzU5ICAwLjUgLT4gMC44NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjggIHBvd2VyIDAuMDc1OSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY5ICBwb3dlciAwLjc2MSAgMC41IC0+IDAuODcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcwICBwb3dlciAwLjA3NjEgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MSAgcG93ZXIgMC43NjIgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MiAgcG93ZXIgMC4wNzYyICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzMgIHBvd2VyIDAuNzYzICAwLjUgLT4gMC44NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzQgIHBvd2VyIDAuMDc2MyAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc1ICBwb3dlciAwLjc2NCAgMC41IC0+IDAuODc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc2ICBwb3dlciAwLjA3NjQgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3NyAgcG93ZXIgMC43NjUgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3OCAgcG93ZXIgMC4wNzY1ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzkgIHBvd2VyIDAuNzY2ICAwLjUgLT4gMC44NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODAgIHBvd2VyIDAuMDc2NiAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgxICBwb3dlciAwLjc2NyAgMC41IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgyICBwb3dlciAwLjA3NjcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4MyAgcG93ZXIgMC43NjggIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NCAgcG93ZXIgMC4wNzY4ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODUgIHBvd2VyIDAuNzY5ICAwLjUgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODYgIHBvd2VyIDAuMDc2OSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg3ICBwb3dlciAwLjc3MSAgMC41IC0+IDAuODc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg4ICBwb3dlciAwLjA3NzEgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4OSAgcG93ZXIgMC43NzIgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MCAgcG93ZXIgMC4wNzcyICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTEgIHBvd2VyIDAuNzczICAwLjUgLT4gMC44NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTIgIHBvd2VyIDAuMDc3MyAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzkzICBwb3dlciAwLjc3NCAgMC41IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk0ICBwb3dlciAwLjA3NzQgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NSAgcG93ZXIgMC43NzUgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NiAgcG93ZXIgMC4wNzc1ICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTcgIHBvd2VyIDAuNzc2ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTggIHBvd2VyIDAuMDc3NiAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk5ICBwb3dlciAwLjc3NyAgMC41IC0+IDAuODgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAwICBwb3dlciAwLjA3NzcgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMSAgcG93ZXIgMC43NzggIDAuNSAtPiAwLjg4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMiAgcG93ZXIgMC4wNzc4ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDMgIHBvd2VyIDAuNzc5ICAwLjUgLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDQgIHBvd2VyIDAuMDc3OSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA1ICBwb3dlciAwLjc4MSAgMC41IC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA2ICBwb3dlciAwLjA3ODEgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwNyAgcG93ZXIgMC43ODIgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwOCAgcG93ZXIgMC4wNzgyICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDkgIHBvd2VyIDAuNzgzICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTAgIHBvd2VyIDAuMDc4MyAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDExICBwb3dlciAwLjc4NCAgMC41IC0+IDAuODg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDEyICBwb3dlciAwLjA3ODQgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxMyAgcG93ZXIgMC43ODUgIDAuNSAtPiAwLjg4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNCAgcG93ZXIgMC4wNzg1ICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTUgIHBvd2VyIDAuNzg2ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTYgIHBvd2VyIDAuMDc4NiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE3ICBwb3dlciAwLjc4NyAgMC41IC0+IDAuODg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE4ICBwb3dlciAwLjA3ODcgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxOSAgcG93ZXIgMC43ODggIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMCAgcG93ZXIgMC4wNzg4ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjEgIHBvd2VyIDAuNzg5ICAwLjUgLT4gMC44ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjIgIHBvd2VyIDAuMDc4OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDIzICBwb3dlciAwLjc5MSAgMC41IC0+IDAuODg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI0ICBwb3dlciAwLjA3OTEgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNSAgcG93ZXIgMC43OTIgIDAuNSAtPiAwLjg5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNiAgcG93ZXIgMC4wNzkyICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjcgIHBvd2VyIDAuNzkzICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjggIHBvd2VyIDAuMDc5MyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI5ICBwb3dlciAwLjc5NCAgMC41IC0+IDAuODkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMwICBwb3dlciAwLjA3OTQgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMSAgcG93ZXIgMC43OTUgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMiAgcG93ZXIgMC4wNzk1ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzMgIHBvd2VyIDAuNzk2ICAwLjUgLT4gMC44OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzQgIHBvd2VyIDAuMDc5NiAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM1ICBwb3dlciAwLjc5NyAgMC41IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM2ICBwb3dlciAwLjA3OTcgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzNyAgcG93ZXIgMC43OTggIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzOCAgcG93ZXIgMC4wNzk4ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzkgIHBvd2VyIDAuNzk5ICAwLjUgLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDAgIHBvd2VyIDAuMDc5OSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQxICBwb3dlciAwLjgwMSAgMC41IC0+IDAuODk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQyICBwb3dlciAwLjA4MDEgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0MyAgcG93ZXIgMC44MDIgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NCAgcG93ZXIgMC4wODAyICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDUgIHBvd2VyIDAuODAzICAwLjUgLT4gMC44OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDYgIHBvd2VyIDAuMDgwMyAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ3ICBwb3dlciAwLjgwNCAgMC41IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ4ICBwb3dlciAwLjA4MDQgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0OSAgcG93ZXIgMC44MDUgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MCAgcG93ZXIgMC4wODA1ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTEgIHBvd2VyIDAuODA2ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTIgIHBvd2VyIDAuMDgwNiAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDUzICBwb3dlciAwLjgwNyAgMC41IC0+IDAuODk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU0ICBwb3dlciAwLjA4MDcgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NSAgcG93ZXIgMC44MDggIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NiAgcG93ZXIgMC4wODA4ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTcgIHBvd2VyIDAuODA5ICAwLjUgLT4gMC44OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTggIHBvd2VyIDAuMDgwOSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU5ICBwb3dlciAwLjgxMSAgMC41IC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYwICBwb3dlciAwLjA4MTEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MSAgcG93ZXIgMC44MTIgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MiAgcG93ZXIgMC4wODEyICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjMgIHBvd2VyIDAuODEzICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjQgIHBvd2VyIDAuMDgxMyAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY1ICBwb3dlciAwLjgxNCAgMC41IC0+IDAuOTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY2ICBwb3dlciAwLjA4MTQgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2NyAgcG93ZXIgMC44MTUgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2OCAgcG93ZXIgMC4wODE1ICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjkgIHBvd2VyIDAuODE2ICAwLjUgLT4gMC45MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzAgIHBvd2VyIDAuMDgxNiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDcxICBwb3dlciAwLjgxNyAgMC41IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDcyICBwb3dlciAwLjA4MTcgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3MyAgcG93ZXIgMC44MTggIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NCAgcG93ZXIgMC4wODE4ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzUgIHBvd2VyIDAuODE5ICAwLjUgLT4gMC45MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzYgIHBvd2VyIDAuMDgxOSAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc3ICBwb3dlciAwLjgyMSAgMC41IC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc4ICBwb3dlciAwLjA4MjEgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3OSAgcG93ZXIgMC44MjIgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MCAgcG93ZXIgMC4wODIyICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODEgIHBvd2VyIDAuODIzICAwLjUgLT4gMC45MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODIgIHBvd2VyIDAuMDgyMyAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDgzICBwb3dlciAwLjgyNCAgMC41IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg0ICBwb3dlciAwLjA4MjQgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NSAgcG93ZXIgMC44MjUgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NiAgcG93ZXIgMC4wODI1ICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODcgIHBvd2VyIDAuODI2ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODggIHBvd2VyIDAuMDgyNiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg5ICBwb3dlciAwLjgyNyAgMC41IC0+IDAuOTA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkwICBwb3dlciAwLjA4MjcgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MSAgcG93ZXIgMC44MjggIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MiAgcG93ZXIgMC4wODI4ICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTMgIHBvd2VyIDAuODI5ICAwLjUgLT4gMC45MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTQgIHBvd2VyIDAuMDgyOSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk1ICBwb3dlciAwLjgzMSAgMC41IC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk2ICBwb3dlciAwLjA4MzEgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5NyAgcG93ZXIgMC44MzIgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5OCAgcG93ZXIgMC4wODMyICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTkgIHBvd2VyIDAuODMzICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDAgIHBvd2VyIDAuMDgzMyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAxICBwb3dlciAwLjgzNCAgMC41IC0+IDAuOTEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAyICBwb3dlciAwLjA4MzQgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwMyAgcG93ZXIgMC44MzUgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNCAgcG93ZXIgMC4wODM1ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDUgIHBvd2VyIDAuODM2ICAwLjUgLT4gMC45MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDYgIHBvd2VyIDAuMDgzNiAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA3ICBwb3dlciAwLjgzNyAgMC41IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA4ICBwb3dlciAwLjA4MzcgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwOSAgcG93ZXIgMC44MzggIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMCAgcG93ZXIgMC4wODM4ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTEgIHBvd2VyIDAuODM5ICAwLjUgLT4gMC45MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTIgIHBvd2VyIDAuMDgzOSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTEzICBwb3dlciAwLjg0MSAgMC41IC0+IDAuOTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE0ICBwb3dlciAwLjA4NDEgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNSAgcG93ZXIgMC44NDIgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNiAgcG93ZXIgMC4wODQyICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTcgIHBvd2VyIDAuODQzICAwLjUgLT4gMC45MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTggIHBvd2VyIDAuMDg0MyAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE5ICBwb3dlciAwLjg0NCAgMC41IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIwICBwb3dlciAwLjA4NDQgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMSAgcG93ZXIgMC44NDUgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMiAgcG93ZXIgMC4wODQ1ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjMgIHBvd2VyIDAuODQ2ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjQgIHBvd2VyIDAuMDg0NiAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI1ICBwb3dlciAwLjg0NyAgMC41IC0+IDAuOTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI2ICBwb3dlciAwLjA4NDcgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyNyAgcG93ZXIgMC44NDggIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyOCAgcG93ZXIgMC4wODQ4ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjkgIHBvd2VyIDAuODQ5ICAwLjUgLT4gMC45MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzAgIHBvd2VyIDAuMDg0OSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMxICBwb3dlciAwLjg1MSAgMC41IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMyICBwb3dlciAwLjA4NTEgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzMyAgcG93ZXIgMC44NTIgIDAuNSAtPiAwLjkyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNCAgcG93ZXIgMC4wODUyICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzUgIHBvd2VyIDAuODUzICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzYgIHBvd2VyIDAuMDg1MyAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM3ICBwb3dlciAwLjg1NCAgMC41IC0+IDAuOTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM4ICBwb3dlciAwLjA4NTQgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzOSAgcG93ZXIgMC44NTUgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MCAgcG93ZXIgMC4wODU1ICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDEgIHBvd2VyIDAuODU2ICAwLjUgLT4gMC45MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDIgIHBvd2VyIDAuMDg1NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQzICBwb3dlciAwLjg1NyAgMC41IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ0ICBwb3dlciAwLjA4NTcgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NSAgcG93ZXIgMC44NTggIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NiAgcG93ZXIgMC4wODU4ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDcgIHBvd2VyIDAuODU5ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDggIHBvd2VyIDAuMDg1OSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ5ICBwb3dlciAwLjg2MSAgMC41IC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUwICBwb3dlciAwLjA4NjEgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MSAgcG93ZXIgMC44NjIgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MiAgcG93ZXIgMC4wODYyICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTMgIHBvd2VyIDAuODYzICAwLjUgLT4gMC45MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTQgIHBvd2VyIDAuMDg2MyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU1ICBwb3dlciAwLjg2NCAgMC41IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU2ICBwb3dlciAwLjA4NjQgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1NyAgcG93ZXIgMC44NjUgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1OCAgcG93ZXIgMC4wODY1ICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTkgIHBvd2VyIDAuODY2ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjAgIHBvd2VyIDAuMDg2NiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYxICBwb3dlciAwLjg2NyAgMC41IC0+IDAuOTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYyICBwb3dlciAwLjA4NjcgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2MyAgcG93ZXIgMC44NjggIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NCAgcG93ZXIgMC4wODY4ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjUgIHBvd2VyIDAuODY5ICAwLjUgLT4gMC45MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjYgIHBvd2VyIDAuMDg2OSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY3ICBwb3dlciAwLjg3MSAgMC41IC0+IDAuOTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY4ICBwb3dlciAwLjA4NzEgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2OSAgcG93ZXIgMC44NzIgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MCAgcG93ZXIgMC4wODcyICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzEgIHBvd2VyIDAuODczICAwLjUgLT4gMC45MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzIgIHBvd2VyIDAuMDg3MyAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTczICBwb3dlciAwLjg3NCAgMC41IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc0ICBwb3dlciAwLjA4NzQgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NSAgcG93ZXIgMC44NzUgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NiAgcG93ZXIgMC4wODc1ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzcgIHBvd2VyIDAuODc2ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzggIHBvd2VyIDAuMDg3NiAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc5ICBwb3dlciAwLjg3NyAgMC41IC0+IDAuOTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgwICBwb3dlciAwLjA4NzcgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MSAgcG93ZXIgMC44NzggIDAuNSAtPiAwLjkzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MiAgcG93ZXIgMC4wODc4ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODMgIHBvd2VyIDAuODc5ICAwLjUgLT4gMC45MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODQgIHBvd2VyIDAuMDg3OSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg1ICBwb3dlciAwLjg4MSAgMC41IC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg2ICBwb3dlciAwLjA4ODEgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4NyAgcG93ZXIgMC44ODIgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4OCAgcG93ZXIgMC4wODgyICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODkgIHBvd2VyIDAuODgzICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTAgIHBvd2VyIDAuMDg4MyAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkxICBwb3dlciAwLjg4NCAgMC41IC0+IDAuOTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkyICBwb3dlciAwLjA4ODQgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5MyAgcG93ZXIgMC44ODUgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NCAgcG93ZXIgMC4wODg1ICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTUgIHBvd2VyIDAuODg2ICAwLjUgLT4gMC45NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTYgIHBvd2VyIDAuMDg4NiAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk3ICBwb3dlciAwLjg4NyAgMC41IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk4ICBwb3dlciAwLjA4ODcgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5OSAgcG93ZXIgMC44ODggIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMCAgcG93ZXIgMC4wODg4ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDEgIHBvd2VyIDAuODg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDIgIHBvd2VyIDAuMDg4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjAzICBwb3dlciAwLjg5MSAgMC41IC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA0ICBwb3dlciAwLjA4OTEgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNSAgcG93ZXIgMC44OTIgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNiAgcG93ZXIgMC4wODkyICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDcgIHBvd2VyIDAuODkzICAwLjUgLT4gMC45NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDggIHBvd2VyIDAuMDg5MyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA5ICBwb3dlciAwLjg5NCAgMC41IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjEwICBwb3dlciAwLjA4OTQgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMSAgcG93ZXIgMC44OTUgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMiAgcG93ZXIgMC4wODk1ICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTMgIHBvd2VyIDAuODk2ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTQgIHBvd2VyIDAuMDg5NiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE1ICBwb3dlciAwLjg5NyAgMC41IC0+IDAuOTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE2ICBwb3dlciAwLjA4OTcgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxNyAgcG93ZXIgMC44OTggIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxOCAgcG93ZXIgMC4wODk4ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTkgIHBvd2VyIDAuODk5ICAwLjUgLT4gMC45NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjAgIHBvd2VyIDAuMDg5OSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIxICBwb3dlciAwLjkwMSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIyICBwb3dlciAwLjA5MDEgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyMyAgcG93ZXIgMC45MDIgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNCAgcG93ZXIgMC4wOTAyICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjUgIHBvd2VyIDAuOTAzICAwLjUgLT4gMC45NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjYgIHBvd2VyIDAuMDkwMyAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI3ICBwb3dlciAwLjkwNCAgMC41IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI4ICBwb3dlciAwLjA5MDQgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyOSAgcG93ZXIgMC45MDUgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMCAgcG93ZXIgMC4wOTA1ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzEgIHBvd2VyIDAuOTA2ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzIgIHBvd2VyIDAuMDkwNiAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjMzICBwb3dlciAwLjkwNyAgMC41IC0+IDAuOTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM0ICBwb3dlciAwLjA5MDcgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNSAgcG93ZXIgMC45MDggIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNiAgcG93ZXIgMC4wOTA4ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzcgIHBvd2VyIDAuOTA5ICAwLjUgLT4gMC45NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzggIHBvd2VyIDAuMDkwOSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM5ICBwb3dlciAwLjkxMSAgMC41IC0+IDAuOTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQwICBwb3dlciAwLjA5MTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MSAgcG93ZXIgMC45MTIgIDAuNSAtPiAwLjk1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MiAgcG93ZXIgMC4wOTEyICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDMgIHBvd2VyIDAuOTEzICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDQgIHBvd2VyIDAuMDkxMyAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ1ICBwb3dlciAwLjkxNCAgMC41IC0+IDAuOTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ2ICBwb3dlciAwLjA5MTQgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0NyAgcG93ZXIgMC45MTUgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0OCAgcG93ZXIgMC4wOTE1ICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDkgIHBvd2VyIDAuOTE2ICAwLjUgLT4gMC45NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTAgIHBvd2VyIDAuMDkxNiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUxICBwb3dlciAwLjkxNyAgMC41IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUyICBwb3dlciAwLjA5MTcgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1MyAgcG93ZXIgMC45MTggIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NCAgcG93ZXIgMC4wOTE4ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTUgIHBvd2VyIDAuOTE5ICAwLjUgLT4gMC45NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTYgIHBvd2VyIDAuMDkxOSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU3ICBwb3dlciAwLjkyMSAgMC41IC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU4ICBwb3dlciAwLjA5MjEgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1OSAgcG93ZXIgMC45MjIgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MCAgcG93ZXIgMC4wOTIyICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjEgIHBvd2VyIDAuOTIzICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjIgIHBvd2VyIDAuMDkyMyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjYzICBwb3dlciAwLjkyNCAgMC41IC0+IDAuOTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY0ICBwb3dlciAwLjA5MjQgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NSAgcG93ZXIgMC45MjUgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NiAgcG93ZXIgMC4wOTI1ICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjcgIHBvd2VyIDAuOTI2ICAwLjUgLT4gMC45NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjggIHBvd2VyIDAuMDkyNiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY5ICBwb3dlciAwLjkyNyAgMC41IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcwICBwb3dlciAwLjA5MjcgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MSAgcG93ZXIgMC45MjggIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MiAgcG93ZXIgMC4wOTI4ICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzMgIHBvd2VyIDAuOTI5ICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzQgIHBvd2VyIDAuMDkyOSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc1ICBwb3dlciAwLjkzMSAgMC41IC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc2ICBwb3dlciAwLjA5MzEgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3NyAgcG93ZXIgMC45MzIgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3OCAgcG93ZXIgMC4wOTMyICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzkgIHBvd2VyIDAuOTMzICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODAgIHBvd2VyIDAuMDkzMyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgxICBwb3dlciAwLjkzNCAgMC41IC0+IDAuOTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgyICBwb3dlciAwLjA5MzQgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4MyAgcG93ZXIgMC45MzUgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NCAgcG93ZXIgMC4wOTM1ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODUgIHBvd2VyIDAuOTM2ICAwLjUgLT4gMC45NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODYgIHBvd2VyIDAuMDkzNiAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg3ICBwb3dlciAwLjkzNyAgMC41IC0+IDAuOTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg4ICBwb3dlciAwLjA5MzcgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4OSAgcG93ZXIgMC45MzggIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MCAgcG93ZXIgMC4wOTM4ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTEgIHBvd2VyIDAuOTM5ICAwLjUgLT4gMC45NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTIgIHBvd2VyIDAuMDkzOSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjkzICBwb3dlciAwLjk0MSAgMC41IC0+IDAuOTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk0ICBwb3dlciAwLjA5NDEgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NSAgcG93ZXIgMC45NDIgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NiAgcG93ZXIgMC4wOTQyICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTcgIHBvd2VyIDAuOTQzICAwLjUgLT4gMC45NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTggIHBvd2VyIDAuMDk0MyAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk5ICBwb3dlciAwLjk0NCAgMC41IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAwICBwb3dlciAwLjA5NDQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMSAgcG93ZXIgMC45NDUgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMiAgcG93ZXIgMC4wOTQ1ICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDMgIHBvd2VyIDAuOTQ2ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDQgIHBvd2VyIDAuMDk0NiAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA1ICBwb3dlciAwLjk0NyAgMC41IC0+IDAuOTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA2ICBwb3dlciAwLjA5NDcgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwNyAgcG93ZXIgMC45NDggIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwOCAgcG93ZXIgMC4wOTQ4ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDkgIHBvd2VyIDAuOTQ5ICAwLjUgLT4gMC45NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTAgIHBvd2VyIDAuMDk0OSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzExICBwb3dlciAwLjk1MSAgMC41IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzEyICBwb3dlciAwLjA5NTEgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxMyAgcG93ZXIgMC45NTIgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNCAgcG93ZXIgMC4wOTUyICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTUgIHBvd2VyIDAuOTUzICAwLjUgLT4gMC45NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTYgIHBvd2VyIDAuMDk1MyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE3ICBwb3dlciAwLjk1NCAgMC41IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE4ICBwb3dlciAwLjA5NTQgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxOSAgcG93ZXIgMC45NTUgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMCAgcG93ZXIgMC4wOTU1ICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjEgIHBvd2VyIDAuOTU2ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjIgIHBvd2VyIDAuMDk1NiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzIzICBwb3dlciAwLjk1NyAgMC41IC0+IDAuOTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI0ICBwb3dlciAwLjA5NTcgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNSAgcG93ZXIgMC45NTggIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNiAgcG93ZXIgMC4wOTU4ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjcgIHBvd2VyIDAuOTU5ICAwLjUgLT4gMC45NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjggIHBvd2VyIDAuMDk1OSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI5ICBwb3dlciAwLjk2MSAgMC41IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMwICBwb3dlciAwLjA5NjEgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMSAgcG93ZXIgMC45NjIgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMiAgcG93ZXIgMC4wOTYyICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzMgIHBvd2VyIDAuOTYzICAwLjUgLT4gMC45ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzQgIHBvd2VyIDAuMDk2MyAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM1ICBwb3dlciAwLjk2NCAgMC41IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM2ICBwb3dlciAwLjA5NjQgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczNyAgcG93ZXIgMC45NjUgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczOCAgcG93ZXIgMC4wOTY1ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzkgIHBvd2VyIDAuOTY2ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDAgIHBvd2VyIDAuMDk2NiAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQxICBwb3dlciAwLjk2NyAgMC41IC0+IDAuOTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQyICBwb3dlciAwLjA5NjcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0MyAgcG93ZXIgMC45NjggIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NCAgcG93ZXIgMC4wOTY4ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDUgIHBvd2VyIDAuOTY5ICAwLjUgLT4gMC45ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDYgIHBvd2VyIDAuMDk2OSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ3ICBwb3dlciAwLjk3MSAgMC41IC0+IDAuOTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ4ICBwb3dlciAwLjA5NzEgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0OSAgcG93ZXIgMC45NzIgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MCAgcG93ZXIgMC4wOTcyICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTEgIHBvd2VyIDAuOTczICAwLjUgLT4gMC45ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTIgIHBvd2VyIDAuMDk3MyAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzUzICBwb3dlciAwLjk3NCAgMC41IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU0ICBwb3dlciAwLjA5NzQgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NSAgcG93ZXIgMC45NzUgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NiAgcG93ZXIgMC4wOTc1ICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTcgIHBvd2VyIDAuOTc2ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTggIHBvd2VyIDAuMDk3NiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU5ICBwb3dlciAwLjk3NyAgMC41IC0+IDAuOTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYwICBwb3dlciAwLjA5NzcgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MSAgcG93ZXIgMC45NzggIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MiAgcG93ZXIgMC4wOTc4ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjMgIHBvd2VyIDAuOTc5ICAwLjUgLT4gMC45ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjQgIHBvd2VyIDAuMDk3OSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY1ICBwb3dlciAwLjk4MSAgMC41IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY2ICBwb3dlciAwLjA5ODEgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2NyAgcG93ZXIgMC45ODIgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2OCAgcG93ZXIgMC4wOTgyICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjkgIHBvd2VyIDAuOTgzICAwLjUgLT4gMC45OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzAgIHBvd2VyIDAuMDk4MyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzcxICBwb3dlciAwLjk4NCAgMC41IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzcyICBwb3dlciAwLjA5ODQgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3MyAgcG93ZXIgMC45ODUgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NCAgcG93ZXIgMC4wOTg1ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzUgIHBvd2VyIDAuOTg2ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzYgIHBvd2VyIDAuMDk4NiAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc3ICBwb3dlciAwLjk4NyAgMC41IC0+IDAuOTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc4ICBwb3dlciAwLjA5ODcgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3OSAgcG93ZXIgMC45ODggIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MCAgcG93ZXIgMC4wOTg4ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODEgIHBvd2VyIDAuOTg5ICAwLjUgLT4gMC45OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODIgIHBvd2VyIDAuMDk4OSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzgzICBwb3dlciAwLjk5MSAgMC41IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg0ICBwb3dlciAwLjA5OTEgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NSAgcG93ZXIgMC45OTIgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NiAgcG93ZXIgMC4wOTkyICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODcgIHBvd2VyIDAuOTkzICAwLjUgLT4gMC45OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODggIHBvd2VyIDAuMDk5MyAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg5ICBwb3dlciAwLjk5NCAgMC41IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkwICBwb3dlciAwLjA5OTQgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MSAgcG93ZXIgMC45OTUgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MiAgcG93ZXIgMC4wOTk1ICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTMgIHBvd2VyIDAuOTk2ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTQgIHBvd2VyIDAuMDk5NiAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk1ICBwb3dlciAwLjk5NyAgMC41IC0+IDAuOTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk2ICBwb3dlciAwLjA5OTcgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5NyAgcG93ZXIgMC45OTggIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5OCAgcG93ZXIgMC4wOTk4ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTkgIHBvd2VyIDAuOTk5ICAwLjUgLT4gMC45OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ4MDAgIHBvd2VyIDAuMDk5OSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gQSBncm91cCBvZiBwcmVjaXNpb24gNCB0ZXN0cyB3aGVyZSBIdWxsICYgQWJyaGFtIGFkanVzdG1lbnRzIGFyZQorLS0gbmVlZGVkIGluIHNvbWUgY2FzZXMgKGJvdGggdXAgYW5kIGRvd24pIFtzZWUgSHVsbDE5ODViXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICA0Citwd3N4NTAwMSAgcG93ZXIgMC4wMTE4ICAgMC41IC0+IDAuMTA4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwMiAgcG93ZXIgMC4xMTkgICAgMC41IC0+IDAuMzQ1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwMyAgcG93ZXIgMC4wMTE5ICAgMC41IC0+IDAuMTA5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNCAgcG93ZXIgMC4xMjEgICAgMC41IC0+IDAuMzQ3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNSAgcG93ZXIgMC4wMTIxICAgMC41IC0+IDAuMTEwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNiAgcG93ZXIgMC4xMjIgICAgMC41IC0+IDAuMzQ5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNyAgcG93ZXIgMC4wMTIyICAgMC41IC0+IDAuMTEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwOCAgcG93ZXIgMC4xMjMgICAgMC41IC0+IDAuMzUwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwOSAgcG93ZXIgMC40OTQgICAgMC41IC0+IDAuNzAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMCAgcG93ZXIgMC4wNjY5ICAgMC41IC0+IDAuMjU4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMSAgcG93ZXIgMC45NTU4ICAgMC41IC0+IDAuOTc3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMiAgcG93ZXIgMC45MzQ4ICAgMC41IC0+IDAuOTY2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMyAgcG93ZXIgMC45MzQ1ICAgMC41IC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNCAgcG93ZXIgMC4wOTM0NSAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNSAgcG93ZXIgMC45MzQ2ICAgMC41IC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNiAgcG93ZXIgMC4wOTM0NiAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNyAgcG93ZXIgMC45MzQ3ICAgMC41IC0+IDAuOTY2OCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK3ByZWNpc2lvbjogOQorcHdzeDcwMCAgcG93ZXIgIDAgICAgICAgIDAuNSAtPiAnMCcKK3B3c3g3MDEgIHBvd2VyICAtMCAgICAgICAwLjUgLT4gJzAnCitwd3N4NzAyICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwMyAgcG93ZXIgIDEwMCAgICAgIDAuNSAtPiAnMTAuMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MDQgIHBvd2VyICAxLjAwICAgICAwLjUgLT4gJzEuMDAwMDAwMDAnICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzA1ICBwb3dlciAgNyAgICAgICAgMC41IC0+ICcyLjY0NTc1MTMxJyAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwNiAgcG93ZXIgIDEwICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2ICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBvbmUtb2ZmcworcHJlY2lzaW9uOiA5Citwd3N4NzExICBwb3dlciAgMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxMiAgcG93ZXIgIDAuMiAgICAgIDAuNSAtPiAwLjQ0NzIxMzU5NSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTMgIHBvd2VyICAwLjMgICAgICAwLjUgLT4gMC41NDc3MjI1NTggICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE0ICBwb3dlciAgMC40ICAgICAgMC41IC0+IDAuNjMyNDU1NTMyICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxNSAgcG93ZXIgIDAuNSAgICAgIDAuNSAtPiAwLjcwNzEwNjc4MSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTYgIHBvd2VyICAwLjYgICAgICAwLjUgLT4gMC43NzQ1OTY2NjkgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE3ICBwb3dlciAgMC43ICAgICAgMC41IC0+IDAuODM2NjYwMDI3ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxOCAgcG93ZXIgIDAuOCAgICAgIDAuNSAtPiAwLjg5NDQyNzE5MSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTkgIHBvd2VyICAwLjkgICAgICAwLjUgLT4gMC45NDg2ODMyOTggICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gbm90ZSBubyBub3JtYWxpemF0b2luIGhlcmUKK3B3c3g3MjAgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCitwd3N4NzIxICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorcHdzeDcyMiAgcG93ZXIgKzAuMSAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NjAxNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorcHdzeDcyMyAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK3B3c3g3MjQgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk3OTk4Mzk4NDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGRpc2N1c3Npb24gY2FzZXMKK3ByZWNpc2lvbjogNworcHdzeDczMSAgcG93ZXIgICAgIDkgICAgMC41IC0+IDMuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzIgIHBvd2VyICAgMTAwICAgIDAuNSAtPiAxMC4wMDAwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzMzICBwb3dlciAgIDEyMyAgICAwLjUgLT4gMTEuMDkwNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDczNCAgcG93ZXIgICAxNDQgICAgMC41IC0+IDEyLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzUgIHBvd2VyICAgMTU2ICAgIDAuNSAtPiAxMi40OTAwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzM2ICBwb3dlciAxMDAwMCAgICAwLjUgLT4gMTAwLjAwMDAgIEluZXhhY3QgUm91bmRlZAorCistLSB2YWx1ZXMgY2xvc2UgdG8gb3ZlcmZsb3cgKGlmIHRoZXJlIHdlcmUgaW5wdXQgcm91bmRpbmcpCittYXhleHBvbmVudDogOTkKK21pbmV4cG9uZW50OiAtOTkKK3ByZWNpc2lvbjogNQorcHdzeDc2MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5OEUrNDkgSW5leGFjdCBSb3VuZGVkCitwd3N4NzYxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAorcHdzeDc2MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzY0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorcHdzeDc2NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK3B3c3g3NzAgIHBvd2VyICA5Ljk5OTdFKzk5ICAgIDAuNSAtPiA5Ljk5OTg1MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzcxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5MDAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OTUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzMgIHBvd2VyICA5Ljk5OTkxRSs5OSAgIDAuNSAtPiA5Ljk5OTk1NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzc0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gOS45OTk5NzAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDkuOTk5OTc1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzYgIHBvd2VyICA5Ljk5OTk5RSs5OSAgIDAuNSAtPiA5Ljk5OTk5NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitwd3N4NzgwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gJzkuOTk5ODQ5OTk4ODc0OTgzMTI0N0UrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4MSAgcG93ZXIgIDkuOTk5OEUrOTkgICAgMC41IC0+ICc5Ljk5OTg5OTk5OTQ5OTk5NDk5OTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiAnOS45OTk5NDk5OTk4NzQ5OTkzNzUwRSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4NzgzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gJzkuOTk5OTU0OTk5ODk4NzQ5NTQ0NEUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4NCAgcG93ZXIgIDkuOTk5OTRFKzk5ICAgMC41IC0+ICc5Ljk5OTk2OTk5OTk1NDk5OTg2NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiAnOS45OTk5NzQ5OTk5Njg3NDk5MjE5RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzg2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gJzkuOTk5OTk0OTk5OTk4NzQ5OTk5NEUrNDknIEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzIFt0aGVzZSBjYW4gb25seSByZXN1bHQgd2hlbiBlTWF4IGlzIDwgZGlnaXRzKzFdCistLSBFdGlueSA9IC0oRW1heCArIChwcmVjaXNpb24tMSkpCistLSBzdGFydCB3aXRoIHN1Ym5vcm1hbCBvcGVyYW5kcyBhbmQgbm9ybWFsIHJlc3VsdHMKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3ByZWNpc2lvbjogOSAgICAgICAgICAgICAgICAtLSBFdGlueT0tMTcKK3B3c3g4MDAgIHBvd2VyICAxRS0xNyAgICAwLjUgLT4gMy4xNjIyNzc2NkUtOSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g4MDEgIHBvd2VyIDEwRS0xNyAgICAwLjUgLT4gMS4wMDAwMDAwMEUtOCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBFdGlueT0tMTgKK3B3c3g4MDIgIHBvd2VyIDEwRS0xOCAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTkgSW5leGFjdCBSb3VuZGVkCitwd3N4ODAzICBwb3dlciAgMUUtMTggICAgMC41IC0+IDEuMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDExICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE5Citwd3N4ODA0ICBwb3dlciAgMUUtMTkgICAgMC41IC0+IDMuMTYyMjc3NjYwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwd3N4ODA1ICBwb3dlciAxMEUtMTkgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtOSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIgICAgICAgICAgICAgICAtLSBFdGlueT0tMjAKK3B3c3g4MDYgIHBvd2VyIDEwRS0yMCAgICAwLjUgLT4gMy4xNjIyNzc2NjAyRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgwNyAgcG93ZXIgIDFFLTIwICAgIDAuNSAtPiAxLjAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTMgICAgICAgICAgICAgICAtLSBFdGlueT0tMjEKK3B3c3g4MDggIHBvd2VyICAxRS0yMSAgICAwLjUgLT4gMy4xNjIyNzc2NjAyRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgwOSAgcG93ZXIgMTBFLTIxICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNCAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMgorcHdzeDgxMCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgxMSAgcG93ZXIgMTBFLTIyICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgxMiAgcG93ZXIgIDFFLTIyICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHNwZWNpYWwgdmFsdWVzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHdzeDgyMCAgcG93ZXIgICBJbmYgICAgIDAuNSAtPiBJbmZpbml0eQorcHdzeDgyMSAgcG93ZXIgIC1JbmYgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3g4MjIgIHBvd2VyICAgTmFOICAgICAwLjUgLT4gTmFOCitwd3N4ODIzICBwb3dlciAgc05hTiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworcHdzeDgyNCAgcG93ZXIgIHNOYU4xMjMgIDAuNSAtPiBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24KK3B3c3g4MjUgIHBvd2VyIC1zTmFOMzIxICAwLjUgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyNiAgcG93ZXIgICBOYU40NTYgIDAuNSAtPiBOYU40NTYKK3B3c3g4MjcgIHBvd2VyICAtTmFONjU0ICAwLjUgLT4gLU5hTjY1NAorcHdzeDgyOCAgcG93ZXIgICBOYU4xICAgIDAuNSAtPiBOYU4xCisKKy0tIE51bGwgdGVzdAorcHdzeDkwMCAgcG93ZXIgICMgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdAppbmRleCAxMmRiODIxLi44MWFkZTc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm90YXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0CkBAIC0xLDI0NyArMSwyNDcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1yb3R4MDAxIHJvdGF0ZSAgICAgICAgICAwICAgIDAgIC0+ICAwDQotcm90eDAwMiByb3RhdGUgICAgICAgICAgMCAgICAyICAtPiAgMA0KLXJvdHgwMDMgcm90YXRlICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLXJvdHgwMDQgcm90YXRlICAgICAgICAgMzQgICAgOCAgLT4gIDQwMDAwMDAwMw0KLXJvdHgwMDUgcm90YXRlICAgICAgICAgIDEgICAgOSAgLT4gIDENCi1yb3R4MDA2IHJvdGF0ZSAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDANCi1yb3R4MDA3IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTEgIC0+ICA5MTIzNDU2NzgNCi1yb3R4MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTggIC0+ICAyMzQ1Njc4OTENCi1yb3R4MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAxMjM0NTY3ODkNCi1yb3R4MDEwIHJvdGF0ZSAgICAgICAgICAwICAgLTIgIC0+ICAwDQotDQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcg0KLXJvdHgwMTEgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDEyIHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAxMyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMTQgcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAxNiByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMTcgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDE4IHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KLXJvdHgwMjAgcm90YXRlICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4MDIxIHJvdGF0ZSAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDAyMiByb3RhdGUgICAgICAgIDEgICAgIDEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHgwMjMgcm90YXRlICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBmdWxsIHBhdHRlcm4NCi1yb3R4MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC05ICAgLT4gMTIzNDU2Nzg5DQotcm90eDAzMSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDIzNDU2Nzg5MQ0KLXJvdHgwMzIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAzNDU2Nzg5MTINCi1yb3R4MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC02ICAgLT4gNDU2Nzg5MTIzDQotcm90eDAzNCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDU2Nzg5MTIzNA0KLXJvdHgwMzUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiA2Nzg5MTIzNDUNCi1yb3R4MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC0zICAgLT4gNzg5MTIzNDU2DQotcm90eDAzNyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDg5MTIzNDU2Nw0KLXJvdHgwMzggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiA5MTIzNDU2NzgNCi1yb3R4MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5DQotcm90eDA0MCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQ0KLXJvdHgwNDEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTENCi1yb3R4MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICsyICAgLT4gMzQ1Njc4OTEyDQotcm90eDA0MyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTEyMw0KLXJvdHgwNDQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzQgICAtPiA1Njc4OTEyMzQNCi1yb3R4MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs1ICAgLT4gNjc4OTEyMzQ1DQotcm90eDA0NiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTEyMzQ1Ng0KLXJvdHgwNDcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzcgICAtPiA4OTEyMzQ1NjcNCi1yb3R4MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs4ICAgLT4gOTEyMzQ1Njc4DQotcm90eDA0OSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDEyMzQ1Njc4OQ0KLQ0KLS0tIHplcm9zDQotcm90eDA2MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTANCi1yb3R4MDYxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMA0KLXJvdHgwNjIgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwDQotcm90eDA2MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDANCi1yb3R4MDY0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMA0KLXJvdHgwNjUgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwDQotcm90eDA2NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTANCi1yb3R4MDY3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMA0KLXJvdHgwNjggcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwDQotcm90eDA2OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDANCi1yb3R4MDcwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMA0KLXJvdHgwNzEgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1yb3R4MTQxIHJvdGF0ZSAgOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gOS45OTk5OTk5OUUrOTk5DQotcm90eDE0MiByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDkuOTk5OTk5OTlFKzk5OQ0KLXJvdHgxNDMgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gOS45OTk5OTk5OUUrOTk5DQotcm90eDE0NSByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5MQ0KLXJvdHgxNDYgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAxLjBFLTk5OA0KLXJvdHgxNDcgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgICAxICAtPiAxLjBFLTk5OA0KLXJvdHgxNDggcm90YXRlICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTENCi1yb3R4MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwDQotcm90eDE1MiByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDFFLTEwMDcNCi1yb3R4MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMUUtMTAwNw0KLXJvdHgxNTQgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAxLjAwMDAwMDBFLTEwMDANCi1yb3R4MTU1IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gOS4wMDAwMDAwRS0xMDAwDQotcm90eDE1NiByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcNCi1yb3R4MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gOUUtMTAwNw0KLXJvdHgxNTggcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiA5LjAwMDAwMDBFLTEwMDANCi1yb3R4MTYwIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMEUtOTk5DQotcm90eDE2MSByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IDEuMEUtMTAwNg0KLXJvdHgxNjIgcm90YXRlICAxRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAxLjBFLTEwMDYNCi1yb3R4MTYzIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5DQotLS0gIG5lZ2F0aXZlcw0KLXJvdHgxNzEgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiAtOS45OTk5OTk5OUUrOTk5DQotcm90eDE3MiByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05Ljk5OTk5OTk5RSs5OTkNCi1yb3R4MTczIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KLXJvdHgxNzQgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiAtOS45OTk5OTk5OUUrOTk5DQotcm90eDE3NSByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTENCi1yb3R4MTc2IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTEuMEUtOTk4DQotcm90eDE3NyByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTk5OA0KLXJvdHgxNzggcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxDQotcm90eDE4MSByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDANCi1yb3R4MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTFFLTEwMDcNCi1yb3R4MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTFFLTEwMDcNCi1yb3R4MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTEuMDAwMDAwMEUtMTAwMA0KLXJvdHgxODUgcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtOS4wMDAwMDAwRS0xMDAwDQotcm90eDE4NiByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3DQotcm90eDE4NyByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC05RS0xMDA3DQotcm90eDE4OCByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC05LjAwMDAwMDBFLTEwMDANCi1yb3R4MTkwIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLXJvdHgxOTEgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMS4wRS0xMDA2DQotcm90eDE5MiByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTEwMDYNCi1yb3R4MTkzIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLQ0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykNCi1yb3R4MjAxIHJvdGF0ZSAgICAgICAgIC0wICAgIDAgIC0+ICAtMA0KLXJvdHgyMDIgcm90YXRlICAgICAgICAgLTAgICAgMiAgLT4gIC0wDQotcm90eDIwMyByb3RhdGUgICAgICAgICAtMSAgICAyICAtPiAgLTEwMA0KLXJvdHgyMDQgcm90YXRlICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDANCi1yb3R4MjA1IHJvdGF0ZSAgICAgICAgIC0xICAgIDkgIC0+ICAtMQ0KLXJvdHgyMDYgcm90YXRlICAgICAgICAgLTEgICAtMSAgLT4gIC0xMDAwMDAwMDANCi1yb3R4MjA3IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtOTEyMzQ1Njc4DQotcm90eDIwOCByb3RhdGUgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTIzNDU2Nzg5MQ0KLXJvdHgyMDkgcm90YXRlIC0xMjM0NTY3ODkgICAtOSAgLT4gIC0xMjM0NTY3ODkNCi1yb3R4MjEwIHJvdGF0ZSAgICAgICAgIC0wICAgLTIgIC0+ICAtMA0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotcm90eDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KLXJvdHg3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCi1yb3R4NzgzIHJvdGF0ZSAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotcm90eDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KLXJvdHg3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCi1yb3R4Nzg2IHJvdGF0ZSAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotcm90eDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4Nzg5IHJvdGF0ZSAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4NzkyIHJvdGF0ZSAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi1yb3R4ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQotcm90eDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQotcm90eDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotcm90eDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQotcm90eDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQotcm90eDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotcm90eDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotcm90eDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCi1yb3R4ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KLXJvdHg4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFODQotcm90eDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCi1yb3R4ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTg0KLXJvdHg4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFODQotcm90eDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCi1yb3R4ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KLXJvdHg4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFODQotcm90eDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KLXJvdHg4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFODQotcm90eDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KLXJvdHg4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFODQotcm90eDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCi1yb3R4ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KLQ0KLQ0KLQ0KLXJvdHg4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1yb3R4ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCi1yb3R4ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCi1yb3R4ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1yb3R4ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCi1yb3R4ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCi1yb3R4ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1yb3R4ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCi1yb3R4ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCi1yb3R4ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotcm90eDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotcm90eDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCi1yb3R4ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1yb3R4ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KLXJvdHg4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCi1yb3R4ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHBheWxvYWQgZGVjYXBpdGF0ZQ0KLXByZWNpc2lvbjogNQ0KLXJvdHg4ODYgcm90YXRlICAxMSAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK3JvdHgwMDEgcm90YXRlICAgICAgICAgIDAgICAgMCAgLT4gIDAKK3JvdHgwMDIgcm90YXRlICAgICAgICAgIDAgICAgMiAgLT4gIDAKK3JvdHgwMDMgcm90YXRlICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorcm90eDAwNCByb3RhdGUgICAgICAgICAzNCAgICA4ICAtPiAgNDAwMDAwMDAzCityb3R4MDA1IHJvdGF0ZSAgICAgICAgICAxICAgIDkgIC0+ICAxCityb3R4MDA2IHJvdGF0ZSAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAKK3JvdHgwMDcgcm90YXRlICAxMjM0NTY3ODkgICAtMSAgLT4gIDkxMjM0NTY3OAorcm90eDAwOCByb3RhdGUgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMjM0NTY3ODkxCityb3R4MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAxMjM0NTY3ODkKK3JvdHgwMTAgcm90YXRlICAgICAgICAgIDAgICAtMiAgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorcm90eDAxMSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxMiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxMyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNiByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNyByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxOCByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorcm90eDAyMCByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMSByb3RhdGUgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMiByb3RhdGUgICAgICAgIDEgICAgIDEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMyByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHBhdHRlcm4KK3JvdHgwMzAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAxMjM0NTY3ODkKK3JvdHgwMzEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAyMzQ1Njc4OTEKK3JvdHgwMzIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAzNDU2Nzg5MTIKK3JvdHgwMzMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiA0NTY3ODkxMjMKK3JvdHgwMzQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiA1Njc4OTEyMzQKK3JvdHgwMzUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiA2Nzg5MTIzNDUKK3JvdHgwMzYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiA3ODkxMjM0NTYKK3JvdHgwMzcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiA4OTEyMzQ1NjcKK3JvdHgwMzggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiA5MTIzNDU2NzgKK3JvdHgwMzkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkKK3JvdHgwNDAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkKK3JvdHgwNDEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTEKK3JvdHgwNDIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MTIKK3JvdHgwNDMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkxMjMKK3JvdHgwNDQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzQgICAtPiA1Njc4OTEyMzQKK3JvdHgwNDUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MTIzNDUKK3JvdHgwNDYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkxMjM0NTYKK3JvdHgwNDcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzcgICAtPiA4OTEyMzQ1NjcKK3JvdHgwNDggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MTIzNDU2NzgKK3JvdHgwNDkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAxMjM0NTY3ODkKKworLS0gemVyb3MKK3JvdHgwNjAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCityb3R4MDYxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorcm90eDA2MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK3JvdHgwNjMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCityb3R4MDY0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorcm90eDA2NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK3JvdHgwNjYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCityb3R4MDY3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorcm90eDA2OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK3JvdHgwNjkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCityb3R4MDcwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorcm90eDA3MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3JvdHgxNDEgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDIgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDMgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDQgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDUgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwRS05OTEKK3JvdHgxNDYgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAxLjBFLTk5OAorcm90eDE0NyByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4Cityb3R4MTQ4IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxCityb3R4MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwCityb3R4MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNworcm90eDE1MyByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDFFLTEwMDcKK3JvdHgxNTQgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAxLjAwMDAwMDBFLTEwMDAKK3JvdHgxNTUgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiA5LjAwMDAwMDBFLTEwMDAKK3JvdHgxNTYgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3Cityb3R4MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gOUUtMTAwNworcm90eDE1OCByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDkuMDAwMDAwMEUtMTAwMAorcm90eDE2MCByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5OQorcm90eDE2MSByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IDEuMEUtMTAwNgorcm90eDE2MiByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMTAwNgorcm90eDE2MyByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQorLS0gIG5lZ2F0aXZlcworcm90eDE3MSByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzIgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOS45OTk5OTk5OUUrOTk5Cityb3R4MTczIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3NCByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzUgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMEUtOTkxCityb3R4MTc2IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTEuMEUtOTk4Cityb3R4MTc3IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4Cityb3R4MTc4IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5MQorcm90eDE4MSByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAKK3JvdHgxODIgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNworcm90eDE4MyByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0xRS0xMDA3Cityb3R4MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTEuMDAwMDAwMEUtMTAwMAorcm90eDE4NSByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDAKK3JvdHgxODYgcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNworcm90eDE4NyByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC05RS0xMDA3Cityb3R4MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMEUtMTAwMAorcm90eDE5MCByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTkKK3JvdHgxOTEgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMS4wRS0xMDA2Cityb3R4MTkyIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNgorcm90eDE5MyByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorcm90eDIwMSByb3RhdGUgICAgICAgICAtMCAgICAwICAtPiAgLTAKK3JvdHgyMDIgcm90YXRlICAgICAgICAgLTAgICAgMiAgLT4gIC0wCityb3R4MjAzIHJvdGF0ZSAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwCityb3R4MjA0IHJvdGF0ZSAgICAgICAgIC0xICAgIDggIC0+ICAtMTAwMDAwMDAwCityb3R4MjA1IHJvdGF0ZSAgICAgICAgIC0xICAgIDkgIC0+ICAtMQorcm90eDIwNiByb3RhdGUgICAgICAgICAtMSAgIC0xICAtPiAgLTEwMDAwMDAwMAorcm90eDIwNyByb3RhdGUgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTkxMjM0NTY3OAorcm90eDIwOCByb3RhdGUgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTIzNDU2Nzg5MQorcm90eDIwOSByb3RhdGUgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTEyMzQ1Njc4OQorcm90eDIxMCByb3RhdGUgICAgICAgICAtMCAgIC0yICAtPiAgLTAKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK3JvdHg3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm90eDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5Cityb3R4ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorcm90eDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5Cityb3R4ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorcm90eDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3R4ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorcm90eDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3JvdHg4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFOCityb3R4ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgorcm90eDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK3JvdHg4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFOCityb3R4ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgorcm90eDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK3JvdHg4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFOCityb3R4ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgorcm90eDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgorcm90eDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorcm90eDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworCisKK3JvdHg4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCityb3R4ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK3JvdHg4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorcm90eDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCityb3R4ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK3JvdHg4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorcm90eDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Cityb3R4ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK3JvdHg4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorcm90eDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorcm90eDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Cityb3R4ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorcm90eDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK3JvdHg4ODYgcm90YXRlICAxMSAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NjYWxlYi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NjYWxlYi5kZWNUZXN0CmluZGV4IDM3MmUzZGQuLjA0YTY1ZDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QKQEAgLTEsMjA5ICsxLDIwOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gc2NhbGViLmRlY1Rlc3QgLS0gc2NhbGUgYSBudW1iZXIgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgICAgICAgIC0tDQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotdmVyc2lvbjogMi41OQ0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLS0tIE1heCB8cmhzfCBpcyAyKig5OTkrOSkgPSAyMDE2DQotDQotLS0gU2FuaXR5IGNoZWNrcw0KLXNjYngwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMA0KLXNjYngwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszDQotc2NieDAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MA0KLXNjYngwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wDQotc2NieDAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTANCi1zY2J4MDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTANCi1zY2J4MDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwDQotc2NieDAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwDQotc2NieDAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszDQotc2NieDAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTANCi1zY2J4MDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjANCi1zY2J4MDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTANCi1zY2J4MDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwDQotDQotLS0gSW5maW5pdGllcw0KLXNjYngwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkNCi1zY2J4MDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQ0KLXNjYngwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkNCi1zY2J4MDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQ0KLQ0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXINCi1zY2J4MDE4IHNjYWxlYiAgMTAgIEluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nDQotLS0gTmFOcywgMCBwYXlsb2FkDQotc2NieDAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFODQotc2NieDAyMiBzY2FsZWIgICAgICAgIC1OYU4gLTEgLT4gLU5hTg0KLXNjYngwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDI1IHNjYWxlYiAgICA0ICAgIE5hTiAgICAtPiBOYU4NCi1zY2J4MDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFODQotc2NieDAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDAyOCBzY2FsZWIgIEluZiAgLXNOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIG5vbi1pbnRlZ2VyIFJIUw0KLXNjYngwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMNCi1zY2J4MDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMNCi1zY2J4MDM4IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLQ0KLXNjYngxMjAgc2NhbGViICAxLjIzICAgIDIwMTUgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1zY2J4MTIxIHNjYWxlYiAgMS4yMyAgICAyMDE2ICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotc2NieDEyMiBzY2FsZWIgIDEuMjMgICAgMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYngxMjMgc2NhbGViICAxLjIzICAgIDIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MTI0IHNjYWxlYiAgMS4yMyAgIC0yMDE1ICAgICAgICAtPiAgMEUtMTAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotc2NieDEyNSBzY2FsZWIgIDEuMjMgICAtMjAxNiAgICAgICAgLT4gIDBFLTEwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KLXNjYngxMjYgc2NhbGViICAxLjIzICAgLTIwMTcgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4MTI3IHNjYWxlYiAgMS4yMyAgIC0yMDE4ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1zY2J4ODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KLXNjYng4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yDQotc2NieDg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCi1zY2J4ODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KLXNjYng4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41DQotc2NieDg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQotc2NieDg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQotc2NieDg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxDQotc2NieDg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KLXNjYng4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uDQotc2NieDg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KLXNjYng4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCi1zY2J4ODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZmluaXRlcw0KLXNjYngwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNw0KLXNjYngwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcNCi1zY2J4MDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUNCi1zY2J4MDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1DQotc2NieDA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTANCi1zY2J4MDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTANCi1zY2J4MDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDANCi1zY2J4MDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwDQotc2NieDA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcNCi1zY2J4MDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcNCi1zY2J4MDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQ0KLXNjYngwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQ0KLXNjYngwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTANCi1zY2J4MDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MA0KLXNjYngwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwDQotc2NieDA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwDQotc2NieDA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3DQotc2NieDA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNw0KLXNjYngwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUNCi1zY2J4MDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQ0KLXNjYngwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MA0KLXNjYngwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTANCi1zY2J4MDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwDQotc2NieDA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDANCi1zY2J4MDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzENCi1zY2J4MDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxDQotc2NieDA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzINCi1zY2J4MDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzINCi1zY2J4MDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjANCi1zY2J4MDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wDQotc2NieDA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMA0KLXNjYngwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwDQotc2NieDA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyDQotc2NieDA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMg0KLXNjYngwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszDQotc2NieDA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszDQotc2NieDA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTANCi1zY2J4MDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTANCi1zY2J4MDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wDQotc2NieDA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjANCi0NCi0tLSB6ZXJvcw0KLXNjYngxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQ0KLXNjYngxMTIgc2NhbGViICAgICAgICAgLTAgIDIgLT4gLTBFKzINCi1zY2J4MTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcNCi1zY2J4MTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4DQotc2NieDExNSBzY2FsZWIgICAgIDAuMDAwMCAgNSAtPiAwRSsxDQotc2NieDExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMg0KLXNjYngxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0DQotc2NieDExOCBzY2FsZWIgICAgIC0wRS0xNDEgOCAtPiAtMEUtMTMzDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1zY2J4MTMyIHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICs5OTkgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQotc2NieDEzMyBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1zY2J4MTM0IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLXNjYngxMzUgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICAwICAtPiA5Ljk5OTk5OTk5RSs5OTkNCi1zY2J4MTM2IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICAtMSAgLT4gOS45OTk5OTk5OUUrOTk4DQotc2NieDEzNyBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgKzEgIC0+IDFFLTk5OA0KLXNjYngxMzggc2NhbGViICAxRS05OTkgICAgICAgICAgIC0wICAtPiAxRS05OTkNCi1zY2J4MTM5IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICAtMSAgLT4gMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbA0KLXNjYngxNDAgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICsxICAtPiAxLjAwMDAwMDAwRS05OTgNCi1zY2J4MTQxIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICAgMCAgLT4gMS4wMDAwMDAwMEUtOTk5DQotc2NieDE0MiBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZA0KLXNjYngxNDMgc2NhbGViICAxRS0xMDA3ICAgICAgICAgICsxICAtPiAxRS0xMDA2ICAgICAgICAgU3Vibm9ybWFsDQotc2NieDE0NCBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgLTAgIC0+IDFFLTEwMDcgICAgICAgICBTdWJub3JtYWwNCi1zY2J4MTQ1IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMSAgLT4gMEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCi0NCi1zY2J4MTUwIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICArMSAgLT4gLTFFLTEwMDYgICAgICAgIFN1Ym5vcm1hbA0KLXNjYngxNTEgc2NhbGViICAtMUUtMTAwNyAgICAgICAgIC0wICAtPiAtMUUtMTAwNyAgICAgICAgU3Vibm9ybWFsDQotc2NieDE1MiBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTEgIC0+IC0wRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQotc2NieDE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgKzEgIC0+IC0xLjAwMDAwMDAwRS05OTgNCi1zY2J4MTU0IHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMCAgLT4gLTEuMDAwMDAwMDBFLTk5OQ0KLXNjYngxNTUgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5IC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkDQotc2NieDE1NiBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgKzEgIC0+IC0xRS05OTgNCi1zY2J4MTU3IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICAtMCAgLT4gLTFFLTk5OQ0KLXNjYngxNTggc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0xICAtPiAtMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbA0KLXNjYngxNTkgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KLXNjYngxNjAgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5ICswICAtPiAtOS45OTk5OTk5OUUrOTk5DQotc2NieDE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTgNCi1zY2J4MTYyIHNjYWxlYiAgLTlFKzk5OSAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi1zY2J4MTYzIHNjYWxlYiAgLTFFKzk5OSAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCi0NCi0tLSBLcmFoIGV4YW1wbGVzDQotcHJlY2lzaW9uOiAgIDM0DQotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQ0KLW1pbkV4cG9uZW50OiAtOTk5OTk5OTk5DQotLS0gaW50ZWdlciBvdmVyZmxvdyBpbiAzLjYxIG9yIGVhcmxpZXINCi1zY2J4MTY0IHNjYWxlYiAgMUUtOTk5OTk5OTk5ICAtMTIwMDAwMDAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gb3V0IG9mIHJhbmdlDQotc2NieDE2NSBzY2FsZWIgIC0xRS05OTk5OTk5OTkgICsxMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNjYWxlYi5kZWNUZXN0IC0tIHNjYWxlIGEgbnVtYmVyIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gTWF4IHxyaHN8IGlzIDIqKDk5OSs5KSA9IDIwMTYKKworLS0gU2FuaXR5IGNoZWNrcworc2NieDAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwCitzY2J4MDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMworc2NieDAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAorc2NieDAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjAKK3NjYngwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwCitzY2J4MDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKK3NjYngwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTAKK3NjYngwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMAorc2NieDAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCitzY2J4MDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MAorc2NieDAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wCitzY2J4MDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKK3NjYngwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTAKKworLS0gSW5maW5pdGllcworc2NieDAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQorc2NieDAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKK3NjYngwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkKK3NjYngwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5CisKKy0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXIKK3NjYngwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDE5IHNjYWxlYiAgMTAgLUluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcKKy0tIE5hTnMsIDAgcGF5bG9hZAorc2NieDAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFOCitzY2J4MDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCitzY2J4MDIzIHNjYWxlYiAgICAgICAgc05hTiAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgorc2NieDAyNiBzY2FsZWIgLUluZiAgIC1OYU4gICAgLT4gLU5hTgorc2NieDAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vbi1pbnRlZ2VyIFJIUworc2NieDAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMworc2NieDAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzCitzY2J4MDM4IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKK3NjYngxMjAgc2NhbGViICAxLjIzICAgIDIwMTUgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMjEgc2NhbGViICAxLjIzICAgIDIwMTYgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMjIgc2NhbGViICAxLjIzICAgIDIwMTcgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngxMjMgc2NhbGViICAxLjIzICAgIDIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngxMjQgc2NhbGViICAxLjIzICAgLTIwMTUgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NjYngxMjUgc2NhbGViICAxLjIzICAgLTIwMTYgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NjYngxMjYgc2NhbGViICAxLjIzICAgLTIwMTcgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngxMjcgc2NhbGViICAxLjIzICAgLTIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorLS0gcHJvcGFnYXRpbmcgTmFOcworc2NieDg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKK3NjYng4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitzY2J4ODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMworc2NieDg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKK3NjYng4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitzY2J4ODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKK3NjYng4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQorc2NieDg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitzY2J4ODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCitzY2J4ODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCitzY2J4ODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK3NjYngwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNworc2NieDA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNworc2NieDA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1CitzY2J4MDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1CitzY2J4MDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MAorc2NieDA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCitzY2J4MDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDAKK3NjYngwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDAKK3NjYngwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43CitzY2J4MDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcKK3NjYngwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41CitzY2J4MDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKK3NjYngwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTAKK3NjYngwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwCitzY2J4MDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAorc2NieDA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwCitzY2J4MDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcKK3NjYngwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKK3NjYngwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUKK3NjYngwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1CitzY2J4MDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKK3NjYngwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTAKK3NjYngwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDAKK3NjYngwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCitzY2J4MDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzEKK3NjYngwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzEKK3NjYngwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCitzY2J4MDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzIKK3NjYngwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMAorc2NieDA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAorc2NieDA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMAorc2NieDA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDAKK3NjYngwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgorc2NieDA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMgorc2NieDA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMKK3NjYngwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMworc2NieDA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTAKK3NjYngwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MAorc2NieDA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAorc2NieDA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjAKKworLS0gemVyb3MKK3NjYngxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQorc2NieDExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgorc2NieDExMyBzY2FsZWIgICAgICAgMEUrNCAgMyAtPiAwRSs3CitzY2J4MTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4CitzY2J4MTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKK3NjYngxMTYgc2NhbGViICAgIC0wLjAwMDAgIDYgLT4gLTBFKzIKK3NjYngxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0CitzY2J4MTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3NjYngxMzIgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgKzk5OSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMzMgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTM0IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEzNSBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgIDAgIC0+IDkuOTk5OTk5OTlFKzk5OQorc2NieDEzNiBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OAorc2NieDEzNyBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgKzEgIC0+IDFFLTk5OAorc2NieDEzOCBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTAgIC0+IDFFLTk5OQorc2NieDEzOSBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTEgIC0+IDFFLTEwMDAgICAgICAgICBTdWJub3JtYWwKK3NjYngxNDAgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICsxICAtPiAxLjAwMDAwMDAwRS05OTgKK3NjYngxNDEgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICAwICAtPiAxLjAwMDAwMDAwRS05OTkKK3NjYngxNDIgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK3NjYngxNDMgc2NhbGViICAxRS0xMDA3ICAgICAgICAgICsxICAtPiAxRS0xMDA2ICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTQ0IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMCAgLT4gMUUtMTAwNyAgICAgICAgIFN1Ym5vcm1hbAorc2NieDE0NSBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgLTEgIC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3NjYngxNTAgc2NhbGViICAtMUUtMTAwNyAgICAgICAgICsxICAtPiAtMUUtMTAwNiAgICAgICAgU3Vibm9ybWFsCitzY2J4MTUxIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMCAgLT4gLTFFLTEwMDcgICAgICAgIFN1Ym5vcm1hbAorc2NieDE1MiBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTEgIC0+IC0wRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzY2J4MTUzIHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMSAgLT4gLTEuMDAwMDAwMDBFLTk5OAorc2NieDE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgKzAgIC0+IC0xLjAwMDAwMDAwRS05OTkKK3NjYngxNTUgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5IC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitzY2J4MTU2IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICArMSAgLT4gLTFFLTk5OAorc2NieDE1NyBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTAgIC0+IC0xRS05OTkKK3NjYngxNTggc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0xICAtPiAtMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbAorc2NieDE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTYwIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSArMCAgLT4gLTkuOTk5OTk5OTlFKzk5OQorc2NieDE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTgKK3NjYngxNjIgc2NhbGViICAtOUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDE2MyBzY2FsZWIgIC0xRSs5OTkgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIEtyYWggZXhhbXBsZXMKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluRXhwb25lbnQ6IC05OTk5OTk5OTkKKy0tIGludGVnZXIgb3ZlcmZsb3cgaW4gMy42MSBvciBlYXJsaWVyCitzY2J4MTY0IHNjYWxlYiAgMUUtOTk5OTk5OTk5ICAtMTIwMDAwMDAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBvdXQgb2YgcmFuZ2UKK3NjYngxNjUgc2NhbGViICAtMUUtOTk5OTk5OTk5ICArMTIwMDAwMDAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2hpZnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0CmluZGV4IDNmYWM3MmYuLjc4ODM4Y2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0CkBAIC0xLDI1MCArMSwyNTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi0NCi0tLSBTYW5pdHkgY2hlY2sNCi1zaGl4MDAxIHNoaWZ0ICAgICAgICAgIDAgICAgMCAgLT4gIDANCi1zaGl4MDAyIHNoaWZ0ICAgICAgICAgIDAgICAgMiAgLT4gIDANCi1zaGl4MDAzIHNoaWZ0ICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KLXNoaXgwMDQgc2hpZnQgICAgICAgICAgMSAgICA4ICAtPiAgMTAwMDAwMDAwDQotc2hpeDAwNSBzaGlmdCAgICAgICAgICAxICAgIDkgIC0+ICAwDQotc2hpeDAwNiBzaGlmdCAgICAgICAgICAxICAgLTEgIC0+ICAwDQotc2hpeDAwNyBzaGlmdCAgMTIzNDU2Nzg5ICAgLTEgIC0+ICAxMjM0NTY3OA0KLXNoaXgwMDggc2hpZnQgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMQ0KLXNoaXgwMDkgc2hpZnQgIDEyMzQ1Njc4OSAgIC05ICAtPiAgMA0KLXNoaXgwMTAgc2hpZnQgICAgICAgICAgMCAgIC0yICAtPiAgMA0KLQ0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCi1zaGl4MDExIHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDEyIHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDEzIHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDE0IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDE1IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDE2IHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDE3IHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4MDE4IHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uDQotc2hpeDAyMCBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDAyMSBzaGlmdCAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDAyMiBzaGlmdCAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDAyMyBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuDQotc2hpeDAzMCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC05ICAgLT4gMA0KLXNoaXgwMzEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDENCi1zaGl4MDMyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAxMg0KLXNoaXgwMzMgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDEyMw0KLXNoaXgwMzQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDEyMzQNCi1zaGl4MDM1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiAxMjM0NQ0KLXNoaXgwMzYgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDEyMzQ1Ng0KLXNoaXgwMzcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDEyMzQ1NjcNCi1zaGl4MDM4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiAxMjM0NTY3OA0KLXNoaXgwMzkgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQ0KLXNoaXgwNDAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQ0KLXNoaXgwNDEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MA0KLXNoaXgwNDIgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMA0KLXNoaXgwNDMgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTAwMA0KLXNoaXgwNDQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MDAwMA0KLXNoaXgwNDUgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkwMDAwMA0KLXNoaXgwNDYgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTAwMDAwMA0KLXNoaXgwNDcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MDAwMDAwMA0KLXNoaXgwNDggc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkwMDAwMDAwMA0KLXNoaXgwNDkgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDANCi0NCi0tLSBmcm9tIGV4YW1wbGVzDQotc2hpeDA1MSBzaGlmdCAzNCAgICAgICAgOCAgIC0+ICAnNDAwMDAwMDAwJw0KLXNoaXgwNTIgc2hpZnQgMTIgICAgICAgIDkgICAtPiAgJzAnDQotc2hpeDA1MyBzaGlmdCAxMjM0NTY3ODkgLTIgIC0+ICAnMTIzNDU2NycNCi1zaGl4MDU0IHNoaWZ0IDEyMzQ1Njc4OSAwICAgLT4gICcxMjM0NTY3ODknDQotc2hpeDA1NSBzaGlmdCAxMjM0NTY3ODkgKzIgIC0+ICAnMzQ1Njc4OTAwJw0KLQ0KLS0tIHplcm9zDQotc2hpeDA2MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMA0KLXNoaXgwNjEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCi1zaGl4MDYyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwDQotc2hpeDA2MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMA0KLXNoaXgwNjQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCi1zaGl4MDY1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwDQotc2hpeDA2NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMA0KLXNoaXgwNjcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCi1zaGl4MDY4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwDQotc2hpeDA2OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMA0KLXNoaXgwNzAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCi1zaGl4MDcxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwDQotDQotLS0gTm1heCwgTm1pbiwgTnRpbnkNCi1zaGl4MTQxIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTlFKzk5OA0KLXNoaXgxNDIgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDlFKzk5MQ0KLXNoaXgxNDMgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTBFKzk5OQ0KLXNoaXgxNDQgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuMDAwMDAwMDBFKzk5OQ0KLXNoaXgxNDUgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDBFLTk5OQ0KLXNoaXgxNDYgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDBFLTk5OQ0KLXNoaXgxNDcgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4DQotc2hpeDE0OCBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxDQotc2hpeDE1MSBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwDQotc2hpeDE1MiBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNw0KLXNoaXgxNTMgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDBFLTEwMDcNCi1zaGl4MTU0IHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAwRS0xMDA3DQotc2hpeDE1NSBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gOS4wMDAwMDAwRS0xMDAwDQotc2hpeDE1NiBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gOUUtMTAwNw0KLXNoaXgxNTcgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDBFLTEwMDcNCi1zaGl4MTU4IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAwRS0xMDA3DQotc2hpeDE2MCBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMEUtMTAwNw0KLXNoaXgxNjEgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IDBFLTEwMDcNCi1zaGl4MTYyIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAxLjBFLTEwMDYNCi1zaGl4MTYzIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTkNCi0tLSAgbmVnYXRpdmVzDQotc2hpeDE3MSBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OUUrOTk4DQotc2hpeDE3MiBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gLTlFKzk5MQ0KLXNoaXgxNzMgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IC05Ljk5OTk5OTkwRSs5OTkNCi1zaGl4MTc0IHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwMEUrOTk5DQotc2hpeDE3NSBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gLTBFLTk5OQ0KLXNoaXgxNzYgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IC0wRS05OTkNCi1zaGl4MTc3IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgNCi1zaGl4MTc4IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxDQotc2hpeDE4MSBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMA0KLXNoaXgxODIgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3DQotc2hpeDE4MyBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcNCi1zaGl4MTg0IHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMEUtMTAwNw0KLXNoaXgxODUgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDANCi1zaGl4MTg2IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNw0KLXNoaXgxODcgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0wRS0xMDA3DQotc2hpeDE4OCBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcNCi1zaGl4MTkwIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAtMEUtMTAwNw0KLXNoaXgxOTEgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0wRS0xMDA3DQotc2hpeDE5MiBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNg0KLXNoaXgxOTMgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkNCi0NCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQotc2hpeDIwMSBzaGlmdCAgICAgICAgIC0wICAgIDAgIC0+ICAtMA0KLXNoaXgyMDIgc2hpZnQgICAgICAgICAtMCAgICAyICAtPiAgLTANCi1zaGl4MjAzIHNoaWZ0ICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDANCi1zaGl4MjA0IHNoaWZ0ICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDANCi1zaGl4MjA1IHNoaWZ0ICAgICAgICAgLTEgICAgOSAgLT4gIC0wDQotc2hpeDIwNiBzaGlmdCAgICAgICAgIC0xICAgLTEgIC0+ICAtMA0KLXNoaXgyMDcgc2hpZnQgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTEyMzQ1Njc4DQotc2hpeDIwOCBzaGlmdCAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMQ0KLXNoaXgyMDkgc2hpZnQgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTANCi1zaGl4MjEwIHNoaWZ0ICAgICAgICAgLTAgICAtMiAgLT4gIC0wDQotc2hpeDIxMSBzaGlmdCAgICAgICAgIC0wICAgLTAgIC0+ICAtMA0KLQ0KLQ0KLS0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsDQotc2hpeDc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5DQotc2hpeDc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotc2hpeDgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkNCi1zaGl4ODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KLXNoaXg4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5DQotc2hpeDgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkNCi1zaGl4ODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KLXNoaXg4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5DQotc2hpeDgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQotc2hpeDgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KLXNoaXg4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCi1zaGl4ODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFODQotc2hpeDgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTg0KLXNoaXg4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCi1zaGl4ODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFODQotc2hpeDgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTg0KLXNoaXg4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCi1zaGl4ODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFODQotc2hpeDgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTg0KLXNoaXg4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCi1zaGl4ODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFODQotc2hpeDgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTg0KLXNoaXg4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCi1zaGl4ODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFODQotc2hpeDgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KLXNoaXg4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCi0NCi1zaGl4ODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIHByb3BhZ2F0aW5nIE5hTnMNCi1zaGl4ODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KLXNoaXg4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQotc2hpeDg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCi1zaGl4ODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KLXNoaXg4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQotc2hpeDg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCi1zaGl4ODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KLXNoaXg4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQotc2hpeDg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQotc2hpeDg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KLXNoaXg4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCi1zaGl4ODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCi1zaGl4ODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQotc2hpeDg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQotc2hpeDg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK3NoaXgwMDEgc2hpZnQgICAgICAgICAgMCAgICAwICAtPiAgMAorc2hpeDAwMiBzaGlmdCAgICAgICAgICAwICAgIDIgIC0+ICAwCitzaGl4MDAzIHNoaWZ0ICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorc2hpeDAwNCBzaGlmdCAgICAgICAgICAxICAgIDggIC0+ICAxMDAwMDAwMDAKK3NoaXgwMDUgc2hpZnQgICAgICAgICAgMSAgICA5ICAtPiAgMAorc2hpeDAwNiBzaGlmdCAgICAgICAgICAxICAgLTEgIC0+ICAwCitzaGl4MDA3IHNoaWZ0ICAxMjM0NTY3ODkgICAtMSAgLT4gIDEyMzQ1Njc4CitzaGl4MDA4IHNoaWZ0ICAxMjM0NTY3ODkgICAtOCAgLT4gIDEKK3NoaXgwMDkgc2hpZnQgIDEyMzQ1Njc4OSAgIC05ICAtPiAgMAorc2hpeDAxMCBzaGlmdCAgICAgICAgICAwICAgLTIgIC0+ICAwCisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK3NoaXgwMTEgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxMiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDEzIHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTQgc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxNSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE2IHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTcgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxOCBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCitzaGl4MDIwIHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMjEgc2hpZnQgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAyMiBzaGlmdCAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDIzIHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuCitzaGl4MDMwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAwCitzaGl4MDMxIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAxCitzaGl4MDMyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAxMgorc2hpeDAzMyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC02ICAgLT4gMTIzCitzaGl4MDM0IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiAxMjM0CitzaGl4MDM1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiAxMjM0NQorc2hpeDAzNiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0zICAgLT4gMTIzNDU2CitzaGl4MDM3IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiAxMjM0NTY3CitzaGl4MDM4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiAxMjM0NTY3OAorc2hpeDAzOSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5CitzaGl4MDQwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkKK3NoaXgwNDEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MAorc2hpeDA0MiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAwCitzaGl4MDQzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkwMDAKK3NoaXgwNDQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MDAwMAorc2hpeDA0NSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs1ICAgLT4gNjc4OTAwMDAwCitzaGl4MDQ2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkwMDAwMDAKK3NoaXgwNDcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MDAwMDAwMAorc2hpeDA0OCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs4ICAgLT4gOTAwMDAwMDAwCitzaGl4MDQ5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAwCisKKy0tIGZyb20gZXhhbXBsZXMKK3NoaXgwNTEgc2hpZnQgMzQgICAgICAgIDggICAtPiAgJzQwMDAwMDAwMCcKK3NoaXgwNTIgc2hpZnQgMTIgICAgICAgIDkgICAtPiAgJzAnCitzaGl4MDUzIHNoaWZ0IDEyMzQ1Njc4OSAtMiAgLT4gICcxMjM0NTY3Jworc2hpeDA1NCBzaGlmdCAxMjM0NTY3ODkgMCAgIC0+ICAnMTIzNDU2Nzg5Jworc2hpeDA1NSBzaGlmdCAxMjM0NTY3ODkgKzIgIC0+ICAnMzQ1Njc4OTAwJworCistLSB6ZXJvcworc2hpeDA2MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMAorc2hpeDA2MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorc2hpeDA2MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorc2hpeDA2MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMAorc2hpeDA2NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorc2hpeDA2NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorc2hpeDA2NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMAorc2hpeDA2NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorc2hpeDA2OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorc2hpeDA2OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMAorc2hpeDA3MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorc2hpeDA3MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorc2hpeDE0MSBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gOS45OTk5OTk5RSs5OTgKK3NoaXgxNDIgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDlFKzk5MQorc2hpeDE0MyBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gOS45OTk5OTk5MEUrOTk5CitzaGl4MTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5LjAwMDAwMDAwRSs5OTkKK3NoaXgxNDUgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDBFLTk5OQorc2hpeDE0NiBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gMEUtOTk5CitzaGl4MTQ3IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICAxICAtPiAxLjBFLTk5OAorc2hpeDE0OCBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxCitzaGl4MTUxIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAKK3NoaXgxNTIgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDFFLTEwMDcKK3NoaXgxNTMgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDBFLTEwMDcKK3NoaXgxNTQgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDBFLTEwMDcKK3NoaXgxNTUgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMAorc2hpeDE1NiBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gOUUtMTAwNworc2hpeDE1NyBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNworc2hpeDE1OCBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNworc2hpeDE2MCBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMEUtMTAwNworc2hpeDE2MSBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMEUtMTAwNworc2hpeDE2MiBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2CitzaGl4MTYzIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTkKKy0tICBuZWdhdGl2ZXMKK3NoaXgxNzEgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTlFKzk5OAorc2hpeDE3MiBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gLTlFKzk5MQorc2hpeDE3MyBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTBFKzk5OQorc2hpeDE3NCBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMDBFKzk5OQorc2hpeDE3NSBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gLTBFLTk5OQorc2hpeDE3NiBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTBFLTk5OQorc2hpeDE3NyBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4CitzaGl4MTc4IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxCitzaGl4MTgxIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwCitzaGl4MTgyIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNworc2hpeDE4MyBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcKK3NoaXgxODQgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3CitzaGl4MTg1IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtOS4wMDAwMDAwRS0xMDAwCitzaGl4MTg2IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNworc2hpeDE4NyBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTBFLTEwMDcKK3NoaXgxODggc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3CitzaGl4MTkwIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAtMEUtMTAwNworc2hpeDE5MSBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gLTBFLTEwMDcKK3NoaXgxOTIgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTEwMDYKK3NoaXgxOTMgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorc2hpeDIwMSBzaGlmdCAgICAgICAgIC0wICAgIDAgIC0+ICAtMAorc2hpeDIwMiBzaGlmdCAgICAgICAgIC0wICAgIDIgIC0+ICAtMAorc2hpeDIwMyBzaGlmdCAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwCitzaGl4MjA0IHNoaWZ0ICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDAKK3NoaXgyMDUgc2hpZnQgICAgICAgICAtMSAgICA5ICAtPiAgLTAKK3NoaXgyMDYgc2hpZnQgICAgICAgICAtMSAgIC0xICAtPiAgLTAKK3NoaXgyMDcgc2hpZnQgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTEyMzQ1Njc4CitzaGl4MjA4IHNoaWZ0IC0xMjM0NTY3ODkgICAtOCAgLT4gIC0xCitzaGl4MjA5IHNoaWZ0IC0xMjM0NTY3ODkgICAtOSAgLT4gIC0wCitzaGl4MjEwIHNoaWZ0ICAgICAgICAgLTAgICAtMiAgLT4gIC0wCitzaGl4MjExIHNoaWZ0ICAgICAgICAgLTAgICAtMCAgLT4gIC0wCisKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK3NoaXg3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorc2hpeDc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitzaGl4NzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorc2hpeDc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitzaGl4Nzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4Nzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4NzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3NoaXg4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitzaGl4ODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorc2hpeDgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitzaGl4ODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorc2hpeDgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitzaGl4ODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCitzaGl4ODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFOCitzaGl4ODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCitzaGl4ODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCitzaGl4ODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFOCitzaGl4ODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCitzaGl4ODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCitzaGl4ODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFOCitzaGl4ODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCitzaGl4ODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCitzaGl4ODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFOCitzaGl4ODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCitzaGl4ODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCitzaGl4ODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK3NoaXg4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3NoaXg4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitzaGl4ODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorc2hpeDg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK3NoaXg4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitzaGl4ODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorc2hpeDg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK3NoaXg4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitzaGl4ODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorc2hpeDg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitzaGl4ODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK3NoaXg4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorc2hpeDg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3RvaW50ZWdyYWx4LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdAppbmRleCAwY2UwZDA5Li5lMjUwZTNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdApAQCAtMSwyNTUgKzEsMjU1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSB0b2ludGVncmFseC5kZWNUZXN0IC0tIHJvdW5kIGRlY2ltYWwgdG8gaW50ZWdyYWwgdmFsdWUsIGV4YWN0ICAgICAgLS0NCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi12ZXJzaW9uOiAyLjU5DQotDQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsDQotLS0gdmFsdWUnIG9wZXJhdGlvbiAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuDQotLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcg0KLS0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkLg0KLQ0KLS0tIFRoaXMgdGVzdHMgdG9JbnRlZ3JhRXhhY3QsIHdoaWNoIG1heSBzZXQgSW5leGFjdA0KLQ0KLWV4dGVuZGVkOiAgICAxDQotcHJlY2lzaW9uOiAgIDkNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLW1heEV4cG9uZW50OiA5OTkNCi1taW5FeHBvbmVudDogLTk5OQ0KLQ0KLWludHh4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDANCi1pbnR4eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwDQotaW50eHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQ0KLWludHh4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgUm91bmRlZA0KLWludHh4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KLS0tIG5lZ2F0aXZlcw0KLWludHh4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTANCi1pbnR4eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wDQotaW50eHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQ0KLWludHh4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgUm91bmRlZA0KLWludHh4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KLS0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQ0KLWludHh4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSszMCAgLT4gMS4wRSszMQ0KLWludHh4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSszMCAgLT4gLTEuMEUrMzENCi0NCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24NCi1wcmVjaXNpb246IDkNCi1pbnR4eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTEwJyAgIC0+ICcwJyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3Jw0KLWludHh4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3Jw0KLWludHh4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScNCi1pbnR4eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzInICAgIC0+ICc1LjYyNjdFKzYnDQotaW50eHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSszJyAgICAtPiAnNS42MjY3RSs3Jw0KLWludHh4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrNCcgICAgLT4gJzUuNjI2N0UrOCcNCi1pbnR4eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzUnICAgIC0+ICc1LjYyNjdFKzknDQotaW50eHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSs2JyAgICAtPiAnNS42MjY3RSsxMCcNCi1pbnR4eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicNCi1pbnR4eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICcxLjIzRSszODQnDQotaW50eHgwNzUgdG9pbnRlZ3JhbHggJzEuMjNFKzk5OScgICAtPiAnMS4yM0UrOTk5Jw0KLQ0KLWludHh4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3Jw0KLWludHh4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycNCi1pbnR4eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1Jw0KLWludHh4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzInICAgLT4gJy01LjYyNjdFKzYnDQotaW50eHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMycgICAtPiAnLTUuNjI2N0UrNycNCi1pbnR4eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSs0JyAgIC0+ICctNS42MjY3RSs4Jw0KLWludHh4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzUnICAgLT4gJy01LjYyNjdFKzknDQotaW50eHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrNicgICAtPiAnLTUuNjI2N0UrMTAnDQotaW50eHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2Jw0KLWludHh4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gJy0xLjIzRSszODQnDQotaW50eHgwOTUgdG9pbnRlZ3JhbHggJy0xLjIzRSs5OTknICAtPiAnLTEuMjNFKzk5OScNCi0NCi0tLSBzdWJub3JtYWwgaW5wdXRzDQotaW50eHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTk5OSAtPiAwDQotDQotLS0gc3BlY2lhbHMgYW5kIHplcm9zDQotaW50eHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5DQotaW50eHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5DQotaW50eHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTg0KLWludHh4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQotaW50eHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCi1pbnR4eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMA0KLWludHh4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwDQotaW50eHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDANCi1pbnR4eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMA0KLWludHh4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQotaW50eHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDANCi1pbnR4eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMA0KLWludHh4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwDQotaW50eHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDANCi1pbnR4eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQ0KLWludHh4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyDQotaW50eHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMNCi1pbnR4eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNA0KLWludHh4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1DQotaW50eHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTANCi1pbnR4eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMA0KLWludHh4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wDQotaW50eHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCi1pbnR4eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMA0KLWludHh4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wDQotaW50eHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTANCi1pbnR4eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMA0KLWludHh4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxDQotaW50eHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzINCi1pbnR4eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMw0KLWludHh4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0DQotaW50eHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUNCi0tLSBwcm9wYWdhdGluZyBOYU5zDQotaW50eHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOA0KLWludHh4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCi1pbnR4eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4DQotaW50eHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KLWludHh4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4NCi1pbnR4eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQotDQotLS0gZXhhbXBsZXMNCi1yb3VuZGluZzogICAgaGFsZl91cA0KLXByZWNpc2lvbjogICA5DQotaW50eHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMA0KLWludHh4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgICAgICAgICAgUm91bmRlZA0KLWludHh4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNg0KLWludHh4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcNCi1pbnR4eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KLQ0KLQ0KLS0tIGFsbCByb3VuZGluZyBtb2Rlcw0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCi0NCi1pbnR4eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgaGFsZl91cA0KLQ0KLWludHh4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24NCi0NCi1pbnR4eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgdXANCi0NCi1pbnR4eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQNCi0NCi1yb3VuZGluZzogICAgZG93bg0KLQ0KLWludHh4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KLQ0KLXJvdW5kaW5nOiAgICBjZWlsaW5nDQotDQotaW50eHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQotDQotcm91bmRpbmc6ICAgIGZsb29yDQotDQotaW50eHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQotaW50eHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCi1pbnR4eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KLWludHh4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkDQotDQotLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMNCi1wcmVjaXNpb246IDE2DQotaW50eHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2DQotaW50eHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3DQotaW50eHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4DQotaW50eHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5DQotaW50eHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2DQotaW50eHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3DQotaW50eHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4DQotaW50eHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5DQotaW50eHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0DQotaW50eHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1DQotaW50eHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2DQotaW50eHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB0b2ludGVncmFseC5kZWNUZXN0IC0tIHJvdW5kIGRlY2ltYWwgdG8gaW50ZWdyYWwgdmFsdWUsIGV4YWN0ICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHRlc3RzIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uICdyb3VuZC10by1pbnRlZ3JhbAorLS0gdmFsdWUnIG9wZXJhdGlvbiAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuCistLSBBbGwgbm9uLXplcm8gcmVzdWx0cyBhcmUgZGVmaW5lZCBhcyBiZWluZyB0aG9zZSBmcm9tIGVpdGhlciBjb3B5IG9yCistLSBxdWFudGl6ZSwgc28gdGhvc2UgYXJlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHRlc3RlZC4KKworLS0gVGhpcyB0ZXN0cyB0b0ludGVncmFFeGFjdCwgd2hpY2ggbWF5IHNldCBJbmV4YWN0CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKK2ludHh4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDAKK2ludHh4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDAKK2ludHh4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDUgdG9pbnRlZ3JhbHggICAgICAwLjMgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDggdG9pbnRlZ3JhbHggICAgICAwLjYgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTEgdG9pbnRlZ3JhbHggICAgICAwLjkgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDEKK2ludHh4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgUm91bmRlZAoraW50eHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAoraW50eHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzCitpbnR4eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wCitpbnR4eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wCitpbnR4eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xCitpbnR4eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xIFJvdW5kZWQKK2ludHh4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0NSB0b2ludGVncmFseCAgICAgLTEuMiAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0OCB0b2ludGVncmFseCAgICAgLTEuNSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA1MSB0b2ludGVncmFseCAgICAgLTEuOCAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAoraW50eHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQoraW50eHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzMwICAtPiAxLjBFKzMxCitpbnR4eDA1NCB0b2ludGVncmFseCAgIC0xMEUrMzAgIC0+IC0xLjBFKzMxCisKKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbgorcHJlY2lzaW9uOiA5CitpbnR4eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTEwJyAgIC0+ICcwJyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDYyIHRvaW50ZWdyYWx4ICc1NjI2N0UtMicgICAgLT4gJzU2MycgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitpbnR4eDA2NiB0b2ludGVncmFseCAnNTYyNjdFKzAnICAgIC0+ICc1NjI2NycKK2ludHh4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKK2ludHh4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrMicgICAgLT4gJzUuNjI2N0UrNicKK2ludHh4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMycgICAgLT4gJzUuNjI2N0UrNycKK2ludHh4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrNCcgICAgLT4gJzUuNjI2N0UrOCcKK2ludHh4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrNScgICAgLT4gJzUuNjI2N0UrOScKK2ludHh4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrNicgICAgLT4gJzUuNjI2N0UrMTAnCitpbnR4eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicKK2ludHh4MDc0IHRvaW50ZWdyYWx4ICcxLjIzRSszODQnICAgLT4gJzEuMjNFKzM4NCcKK2ludHh4MDc1IHRvaW50ZWdyYWx4ICcxLjIzRSs5OTknICAgLT4gJzEuMjNFKzk5OScKKworaW50eHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDgxIHRvaW50ZWdyYWx4ICctNTYyNjdFLTUnICAgLT4gJy0xJyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDg1IHRvaW50ZWdyYWx4ICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycKK2ludHh4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKK2ludHh4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitpbnR4eDA4OCB0b2ludGVncmFseCAnLTU2MjY3RSsyJyAgIC0+ICctNS42MjY3RSs2JworaW50eHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMycgICAtPiAnLTUuNjI2N0UrNycKK2ludHh4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzQnICAgLT4gJy01LjYyNjdFKzgnCitpbnR4eDA5MSB0b2ludGVncmFseCAnLTU2MjY3RSs1JyAgIC0+ICctNS42MjY3RSs5JworaW50eHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrNicgICAtPiAnLTUuNjI2N0UrMTAnCitpbnR4eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnCitpbnR4eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzM4NCcgIC0+ICctMS4yM0UrMzg0JworaW50eHgwOTUgdG9pbnRlZ3JhbHggJy0xLjIzRSs5OTknICAtPiAnLTEuMjNFKzk5OScKKworLS0gc3Vibm9ybWFsIGlucHV0cworaW50eHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTk5OSAtPiAwCisKKy0tIHNwZWNpYWxzIGFuZCB6ZXJvcworaW50eHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5CitpbnR4eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2ludHh4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4KK2ludHh4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitpbnR4eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAoraW50eHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2ludHh4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwCitpbnR4eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMAoraW50eHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDAKK2ludHh4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitpbnR4eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMAoraW50eHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDAKK2ludHh4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwCitpbnR4eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMAoraW50eHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzEKK2ludHh4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyCitpbnR4eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMworaW50eHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQKK2ludHh4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1CitpbnR4eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMAoraW50eHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTAKK2ludHh4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wCitpbnR4eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAoraW50eHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTAKK2ludHh4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wCitpbnR4eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMAoraW50eHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTAKK2ludHh4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxCitpbnR4eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMgoraW50eHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMKK2ludHh4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0CitpbnR4eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworaW50eHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOAoraW50eHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgoraW50eHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOAoraW50eHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgoraW50eHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTgoraW50eHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK3ByZWNpc2lvbjogICA5CitpbnR4eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDAKK2ludHh4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgICAgICAgICAgUm91bmRlZAoraW50eHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjA0IHRvaW50ZWdyYWx4ICAtMTAxLjUgICAgLT4gLTEwMiAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNgoraW50eHgyMDYgdG9pbnRlZ3JhbHggIDcuODlFKzc3ICAtPiA3Ljg5RSs3NworaW50eHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkKKworCistLSBhbGwgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworaW50eHgyMTAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCitpbnR4eDIyMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworaW50eHgyMzAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKworaW50eHgyNDAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorCitpbnR4eDI1MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2ludHh4MjYwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjYzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2ludHh4MjcwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjczIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK3ByZWNpc2lvbjogMTYKK2ludHh4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0NgoraW50eHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3CitpbnR4eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgKK2ludHh4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQoraW50eHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2CitpbnR4eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcKK2ludHh4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OAoraW50eHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5CitpbnR4eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQKK2ludHh4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQoraW50eHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2CitpbnR4eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdAppbmRleCBjZDcxYmJjLi4xMjI5NzZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEveG9yLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0CkBAIC0xLDMzNSArMSwzMzUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIHhvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXZlcnNpb246IDIuNTkNCi0NCi1leHRlbmRlZDogICAgMQ0KLXByZWNpc2lvbjogICA5DQotcm91bmRpbmc6ICAgIGhhbGZfdXANCi1tYXhFeHBvbmVudDogOTk5DQotbWluRXhwb25lbnQ6IC05OTkNCi0NCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KLXhvcngwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQoteG9yeDAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCi14b3J4MDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQ0KLXhvcngwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwDQoteG9yeDAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTANCi14b3J4MDA2IHhvciAgICAgICAgICAxMTExICAgMTAgLT4gMTEwMQ0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQoteG9yeDAxMCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLXhvcngwMTEgeG9yIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCi14b3J4MDEyIHhvciAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwDQoteG9yeDAxMyB4b3IgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KLXhvcngwMTQgeG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCi14b3J4MDE1IHhvciAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQoteG9yeDAxNiB4b3IgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMA0KLXhvcngwMTcgeG9yIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgICAgICAgIDANCi0NCi0tLSBWYXJpb3VzIGxlbmd0aHMNCi0tLSAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkNCi14b3J4MDIxIHhvciAxMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDANCi14b3J4MDIyIHhvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDANCi14b3J4MDIzIHhvciAgMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gIDANCi14b3J4MDI1IHhvciAgIDExMTExMTEgICAgICAgMTExMTExMSAgLT4gIDANCi14b3J4MDI2IHhvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gIDANCi14b3J4MDI3IHhvciAgICAgMTExMTEgICAgICAgICAxMTExMSAgLT4gIDANCi14b3J4MDI4IHhvciAgICAgIDExMTEgICAgICAgICAgMTExMSAgLT4gIDANCi14b3J4MDI5IHhvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gIDANCi14b3J4MDMxIHhvciAgICAgICAgMTEgICAgICAgICAgICAxMSAgLT4gIDANCi14b3J4MDMyIHhvciAgICAgICAgIDEgICAgICAgICAgICAgMSAgLT4gIDANCi14b3J4MDMzIHhvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDANCi14b3J4MDM0IHhvciAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDANCi14b3J4MDM1IHhvciAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDANCi14b3J4MDM2IHhvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDANCi0NCi14b3J4MDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDANCi14b3J4MDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMA0KLXhvcngwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwDQoteG9yeDA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDENCi14b3J4MDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQ0KLXhvcngwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExDQoteG9yeDA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTENCi14b3J4MDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQ0KLXhvcngwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExDQoteG9yeDA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDENCi0NCi14b3J4MDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQoteG9yeDA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMA0KLXhvcngwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMA0KLXhvcngwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwDQoteG9yeDA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMA0KLXhvcngwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMA0KLXhvcngwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwDQoteG9yeDA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMA0KLXhvcngwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMA0KLXhvcngwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwDQotDQoteG9yeDA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KLXhvcngwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTENCi14b3J4MDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTENCi14b3J4MDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQ0KLXhvcngwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTENCi14b3J4MDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTENCi14b3J4MDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQ0KLXhvcngwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTENCi14b3J4MDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTENCi14b3J4MDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQ0KLQ0KLXhvcngwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTANCi14b3J4MDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQoteG9yeDA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwDQoteG9yeDA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTANCi14b3J4MDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwDQoteG9yeDA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwDQoteG9yeDA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTANCi14b3J4MDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwDQoteG9yeDA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwDQoteG9yeDA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDANCi0NCi14b3J4MDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExDQoteG9yeDA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KLXhvcngwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KLXhvcngwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExDQoteG9yeDA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQ0KLXhvcngwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KLXhvcngwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExDQoteG9yeDA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQ0KLXhvcngwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQ0KLXhvcngwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxDQotDQoteG9yeDA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDANCi14b3J4MDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMA0KLXhvcngwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwDQoteG9yeDA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDANCi14b3J4MDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLXhvcngwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwDQoteG9yeDA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDANCi14b3J4MDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMA0KLXhvcngwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxDQotDQoteG9yeDEwMCB4b3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMDAwMTAwMDANCi14b3J4MTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMA0KLXhvcngxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwDQoteG9yeDEwMyB4b3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAgICAxMTAwMDANCi14b3J4MTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KLXhvcngxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwDQoteG9yeDEwNiB4b3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAgICAgMTAxMDANCi14b3J4MTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMA0KLXhvcngxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxDQotDQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQoteG9yeDIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSBhIGZldyByYW5kb21zDQoteG9yeDI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNDIgeG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNEDQoteG9yeDI1MCB4b3IgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTEgeG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjUyIHhvciAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1MyB4b3IgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTQgeG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjU1IHhvciAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1NiB4b3IgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNTcgeG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjU4IHhvciAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI1OSB4b3IgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNjAgeG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjYxIHhvciAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI2MiB4b3IgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNjMgeG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjY0IHhvciAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI2NSB4b3IgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTVNELTENCi14b3J4MjcwIHhvciAgMDIwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI3MSB4b3IgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNzIgeG9yICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjczIHhvciAgMDkwMDAxMDAwIDEwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI3NCB4b3IgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyNzUgeG9yICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjc2IHhvciAgMTAwMDAwMDEwIDA4MDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI3NyB4b3IgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLS0tIHRlc3QgTFNEDQoteG9yeDI4MCB4b3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODEgeG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjgyIHhvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI4MyB4b3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODQgeG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjg1IHhvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI4NiB4b3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyODcgeG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0tLSB0ZXN0IE1pZGRpZQ0KLXhvcngyODggeG9yICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjg5IHhvciAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5MCB4b3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTEgeG9yICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MjkyIHhvciAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5MyB4b3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTQgeG9yICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjk1IHhvciAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQotLS0gc2lnbnMNCi14b3J4Mjk2IHhvciAtMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngyOTcgeG9yIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDI5OCB4b3IgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mjk5IHhvciAgMTAwMDAxMDAwICAwMDAwMTEwMDAgLT4gIDEwMDAxMDAwMA0KLQ0KLS0tIE5tYXgsIE5taW4sIE50aW55DQoteG9yeDMzMSB4b3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzMzIgeG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDMzNCB4b3IgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzMzUgeG9yICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDMzNyB4b3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQxIHhvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM0MiB4b3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNDMgeG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQ0IHhvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM0NSB4b3IgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNDYgeG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzQ3IHhvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM0OCB4b3IgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KLXhvcngzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4MzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcngzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Mzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLQ0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCi14b3J4NzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4NzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Nzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4Nzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4NzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi14b3J4ODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQotDQoteG9yeDgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjIgeG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjUgeG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MjggeG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MzEgeG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MzQgeG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4MzcgeG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi0NCi14b3J4ODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCi0NCi0tLSBwcm9wYWdhdGluZyBOYU5zDQoteG9yeDg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjIgeG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjUgeG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NjggeG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzIgeG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzUgeG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4NzggeG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4ODEgeG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoteG9yeDg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KLXhvcng4ODQgeG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCi14b3J4ODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB4b3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCit4b3J4MDAxIHhvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAoreG9yeDAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK3hvcngwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCit4b3J4MDA0IHhvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMAoreG9yeDAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKK3hvcngwMDYgeG9yICAgICAgICAgIDExMTEgICAxMCAtPiAxMTAxCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQoreG9yeDAxMCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxMSB4b3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoreG9yeDAxMiB4b3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoreG9yeDAxMyB4b3IgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxNCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoreG9yeDAxNSB4b3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoreG9yeDAxNiB4b3IgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoreG9yeDAxNyB4b3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQoreG9yeDAyMSB4b3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAwCit4b3J4MDIyIHhvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDAKK3hvcngwMjMgeG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgMAoreG9yeDAyNSB4b3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAwCit4b3J4MDI2IHhvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gIDAKK3hvcngwMjcgeG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgMAoreG9yeDAyOCB4b3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAwCit4b3J4MDI5IHhvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gIDAKK3hvcngwMzEgeG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgMAoreG9yeDAzMiB4b3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAwCit4b3J4MDMzIHhvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDAKK3hvcngwMzQgeG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMAoreG9yeDAzNSB4b3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAwCit4b3J4MDM2IHhvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDAKKworeG9yeDA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAwCit4b3J4MDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMAoreG9yeDA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDAKK3hvcngwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCit4b3J4MDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQoreG9yeDA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTEKK3hvcngwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCit4b3J4MDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQoreG9yeDA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTEKK3hvcngwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK3hvcngwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK3hvcngwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK3hvcngwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAoreG9yeDA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTAKK3hvcngwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK3hvcngwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAoreG9yeDA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTAKK3hvcngwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK3hvcngwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAoreG9yeDA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDAKKworeG9yeDA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoreG9yeDA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoreG9yeDA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCit4b3J4MDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQoreG9yeDA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQoreG9yeDA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCit4b3J4MDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQoreG9yeDA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQoreG9yeDA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCit4b3J4MDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQorCit4b3J4MDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTEwCit4b3J4MDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCit4b3J4MDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTAKK3hvcngwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCit4b3J4MDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCit4b3J4MDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTAKK3hvcngwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCit4b3J4MDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCit4b3J4MDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTAKK3hvcngwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK3hvcngwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK3hvcngwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK3hvcngwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQoreG9yeDA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKK3hvcngwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK3hvcngwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQoreG9yeDA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKK3hvcngwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK3hvcngwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQoreG9yeDA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDEKKworeG9yeDA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK3hvcngwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCit4b3J4MDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMAoreG9yeDA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK3hvcngwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCit4b3J4MDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMAoreG9yeDA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK3hvcngwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCit4b3J4MDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQorCit4b3J4MTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAoreG9yeDEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKK3hvcngxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwCit4b3J4MTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAoreG9yeDEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKK3hvcngxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwCit4b3J4MTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAoreG9yeDEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKK3hvcngxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworeG9yeDIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK3hvcngyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK3hvcngyNTAgeG9yICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTEgeG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTIgeG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTMgeG9yICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTQgeG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTUgeG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTYgeG9yICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTcgeG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTggeG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNTkgeG9yICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjAgeG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjEgeG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjIgeG9yICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjMgeG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjQgeG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNjUgeG9yICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK3hvcngyNzAgeG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzEgeG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzIgeG9yICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzMgeG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzQgeG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzUgeG9yICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzYgeG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNzcgeG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECit4b3J4MjgwIHhvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgxIHhvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgyIHhvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjgzIHhvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg0IHhvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg1IHhvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg2IHhvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjg3IHhvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQoreG9yeDI4OCB4b3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4OSB4b3IgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MCB4b3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MSB4b3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MiB4b3IgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5MyB4b3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5NCB4b3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5NSB4b3IgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK3hvcngyOTYgeG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk3IHhvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5OCB4b3IgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTkgeG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDEwMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55Cit4b3J4MzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM0IHhvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM1IHhvciAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQxIHhvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ0IHhvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ1IHhvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ3IHhvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MzQ4IHhvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworeG9yeDM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCit4b3J4NzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4NzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Nzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3hvcng4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworeG9yeDgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCit4b3J4ODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworeG9yeDg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5IGIvTGliL3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5CmluZGV4IGU2ZTVjYTkuLjFmMzNmODMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RvY3Rlc3RfYWxpYXNlcy5weQorKysgYi9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkKQEAgLTEwLDQgKzEwLDQgQEAKICAgICAgICAgJycnCiAgICAgICAgIHJldHVybiAnZicKIAotICAgICAgICBnID0gZiAjIGRlZmluZSBhbiBhbGlhcyBmb3IgZgorICAgIGcgPSBmICMgZGVmaW5lIGFuIGFsaWFzIGZvciBmCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0IGIvTGliL3Rlc3QvZmxvYXRpbmdfcG9pbnRzLnR4dAppbmRleCA3MGQyMWVhLi41MzkwNzNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0CisrKyBiL0xpYi90ZXN0L2Zsb2F0aW5nX3BvaW50cy50eHQKQEAgLTEwMTksMyArMTAxOSwxMCBAQAogKzQzNzIzMzM0OTg0OTk3MzA3RS0yNgogKzEwMTgyNDE5ODQ5NTM3OTYzRS0yNAogLTkzNTAxNzAzNTcyNjYxOTgyRS0yNgorCisjIEEgdmFsdWUgdGhhdCBjYXVzZWQgYSBjcmFzaCBpbiBkZWJ1ZyBidWlsZHMgZm9yIFB5dGhvbiA+PSAyLjcsIDMuMQorIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc2MzIKKzIxODMxNjcwMTIzMTIxMTIzMTIzMTIuMjM1MzgwMjAzNzQ0MjA0NDYxOTJlLTM3MAorCisjIEFub3RoZXIgdmFsdWUgZGVzaWduZWQgdG8gdGVzdCBhIGNvcm5lciBjYXNlIG9mIFB5dGhvbidzIHN0cnRvZCBjb2RlLgorMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUrMjMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weSBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQppbmRleCAzYzc1ZGUzLi4yNjQ2Y2JkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkKKysrIGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CkBAIC0xLDYgKzEsNiBAQAogIiIiVGhpcyB0ZXN0IGNhc2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9ya2luZyBhbmQgd2FpdCBiZWhhdmlvci4KIAotVG8gdGVzdCBkaWZmZXJlbnQgd2FpdCBiZWhhdmlvciwgb3ZlcnJpc2UgdGhlIHdhaXRfaW1wbCBtZXRob2QuCitUbyB0ZXN0IGRpZmZlcmVudCB3YWl0IGJlaGF2aW9yLCBvdmVycmlkZSB0aGUgd2FpdF9pbXBsIG1ldGhvZC4KIAogV2Ugd2FudCBmb3JrMSgpIHNlbWFudGljcyAtLSBvbmx5IHRoZSBmb3JraW5nIHRocmVhZCBzdXJ2aXZlcyBpbiB0aGUKIGNoaWxkIGFmdGVyIGEgZm9yaygpLgpAQCAtMTIsNyArMTIsOSBAQAogdGhlIHNhbWUgYXBwbGljYXRpb24sIHRoZSBwcmVzZW50IGV4YW1wbGUgc2hvdWxkIHdvcmsganVzdCBmaW5lLiAgREMKICIiIgogCi1pbXBvcnQgb3MsIHN5cywgdGltZSwgdGhyZWFkLCB1bml0dGVzdAoraW1wb3J0IG9zLCBzeXMsIHRpbWUsIHVuaXR0ZXN0CitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgdGVzdF9zdXBwb3J0Cit0aHJlYWQgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkJykKIAogTE9OR1NMRUVQID0gMgogU0hPUlRTTEVFUCA9IDAuNQpAQCAtNDEsOCArNDMsOCBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICB0aW1lLnNsZWVwKDIgKiBTSE9SVFNMRUVQKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwaWQsIGNwaWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0YXR1cywgMCwgImNhdXNlID0gJWQsIGV4aXQgPSAlZCIgJSAoc3RhdHVzJjB4ZmYsIHN0YXR1cz4+OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQogCiAgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1RIUkVBRFMpOgpAQCAtNTIsNyArNTQsNyBAQAogCiAgICAgICAgIGEgPSBzZWxmLmFsaXZlLmtleXMoKQogICAgICAgICBhLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLCByYW5nZShOVU1fVEhSRUFEUykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoTlVNX1RIUkVBRFMpKQogCiAgICAgICAgIHByZWZvcmtfbGl2ZXMgPSBzZWxmLmFsaXZlLmNvcHkoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0IGIvTGliL3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VmMDQwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dApAQCAtMCwwICsxLDM4MCBAQAorLS0gJ2YnIGNvZGUgZm9ybWF0dGluZywgd2l0aCBleHBsaWNpdCBwcmVjaXNpb24gKD49IDApLiAgT3V0cHV0IGFsd2F5cworLS0gaGFzIHRoZSBnaXZlbiBudW1iZXIgb2YgcGxhY2VzIGFmdGVyIHRoZSBwb2ludDsgIHplcm9zIGFyZSBhZGRlZCBpZgorLS0gbmVjZXNzYXJ5IHRvIG1ha2UgdGhpcyB0cnVlLgorCistLSB6ZXJvcworJS4wZiAwIC0+IDAKKyUuMWYgMCAtPiAwLjAKKyUuMmYgMCAtPiAwLjAwCislLjNmIDAgLT4gMC4wMDAKKyUuNTBmIDAgLT4gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBwcmVjaXNpb24gMDsgIHJlc3VsdCBzaG91bGQgbmV2ZXIgaW5jbHVkZSBhIC4KKyUuMGYgMS41IC0+IDIKKyUuMGYgMi41IC0+IDIKKyUuMGYgMy41IC0+IDQKKyUuMGYgMC4wIC0+IDAKKyUuMGYgMC4xIC0+IDAKKyUuMGYgMC4wMDEgLT4gMAorJS4wZiAxMC4wIC0+IDEwCislLjBmIDEwLjEgLT4gMTAKKyUuMGYgMTAuMDEgLT4gMTAKKyUuMGYgMTIzLjQ1NiAtPiAxMjMKKyUuMGYgMTIzNC41NiAtPiAxMjM1CislLjBmIDFlNDkgLT4gOTk5OTk5OTk5OTk5OTk5OTQ2NDkwMjc2OTQ3NTQ4MTc5MzE5Njg3MjQxNDc4OTYzMgorJS4wZiA5Ljk5OTk5OTk5OTk5OTk5ODdlKzQ5IC0+IDk5OTk5OTk5OTk5OTk5OTg2ODYwNTgyNDA2OTUyNTc2NDg5MTcyOTc5NjU0MDY2MTc2CislLjBmIDFlNTAgLT4gMTAwMDAwMDAwMDAwMDAwMDA3NjI5NzY5ODQxMDkxODg3MDAzMjk0OTY0OTcwOTQ2NTYwCisKKy0tIHByZWNpc2lvbiAxCislLjFmIDAuMDAwMSAtPiAwLjAKKyUuMWYgMC4wMDEgLT4gMC4wCislLjFmIDAuMDEgLT4gMC4wCislLjFmIDAuMDQgLT4gMC4wCislLjFmIDAuMDYgLT4gMC4xCislLjFmIDAuMjUgLT4gMC4yCislLjFmIDAuNzUgLT4gMC44CislLjFmIDEuNCAtPiAxLjQKKyUuMWYgMS41IC0+IDEuNQorJS4xZiAxMC4wIC0+IDEwLjAKKyUuMWYgMTAwMC4wMyAtPiAxMDAwLjAKKyUuMWYgMTIzNC41Njc4IC0+IDEyMzQuNgorJS4xZiAxMjM0Ljc0OTkgLT4gMTIzNC43CislLjFmIDEyMzQuNzUgLT4gMTIzNC44CisKKy0tIHByZWNpc2lvbiAyCislLjJmIDAuMDAwMSAtPiAwLjAwCislLjJmIDAuMDAxIC0+IDAuMDAKKyUuMmYgMC4wMDQ5OTkgLT4gMC4wMAorJS4yZiAwLjAwNTAwMSAtPiAwLjAxCislLjJmIDAuMDEgLT4gMC4wMQorJS4yZiAwLjEyNSAtPiAwLjEyCislLjJmIDAuMzc1IC0+IDAuMzgKKyUuMmYgMTIzNDUwMCAtPiAxMjM0NTAwLjAwCislLjJmIDEyMzQ1NjAgLT4gMTIzNDU2MC4wMAorJS4yZiAxMjM0NTY3IC0+IDEyMzQ1NjcuMDAKKyUuMmYgMTIzNDU2Ny44IC0+IDEyMzQ1NjcuODAKKyUuMmYgMTIzNDU2Ny44OSAtPiAxMjM0NTY3Ljg5CislLjJmIDEyMzQ1NjcuODkxIC0+IDEyMzQ1NjcuODkKKyUuMmYgMTIzNDU2Ny44OTEyIC0+IDEyMzQ1NjcuODkKKworLS0gYWx0ZXJuYXRlIGZvcm0gYWx3YXlzIGluY2x1ZGVzIGEgZGVjaW1hbCBwb2ludC4gIFRoaXMgb25seQorLS0gbWFrZXMgYSBkaWZmZXJlbmNlIHdoZW4gdGhlIHByZWNpc2lvbiBpcyAwLgorJSMuMGYgMCAtPiAwLgorJSMuMWYgMCAtPiAwLjAKKyUjLjBmIDEuNSAtPiAyLgorJSMuMGYgMi41IC0+IDIuCislIy4wZiAxMC4xIC0+IDEwLgorJSMuMGYgMTIzNC41NiAtPiAxMjM1LgorJSMuMWYgMS40IC0+IDEuNAorJSMuMmYgMC4zNzUgLT4gMC4zOAorCistLSBpZiBwcmVjaXNpb24gaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0byA2CislZiAwIC0+IDAuMDAwMDAwCislZiAxMjMwMDAwIC0+IDEyMzAwMDAuMDAwMDAwCislZiAxMjM0NTY3IC0+IDEyMzQ1NjcuMDAwMDAwCislZiAxMjMuNDU2NyAtPiAxMjMuNDU2NzAwCislZiAxLjIzNDU2Nzg5IC0+IDEuMjM0NTY4CislZiAwLjAwMDEyIC0+IDAuMDAwMTIwCislZiAwLjAwMDEyMyAtPiAwLjAwMDEyMworJWYgMC4wMDAxMjM0NSAtPiAwLjAwMDEyMworJWYgMC4wMDAwMDEgLT4gMC4wMDAwMDEKKyVmIDAuMDAwMDAwNTAwMSAtPiAwLjAwMDAwMQorJWYgMC4wMDAwMDA0OTk5IC0+IDAuMDAwMDAwCisKKy0tIG5hbnMgYW5kIGluZmluaXRpZXMKKyVmIG5hbiAtPiBuYW4KKyVmIGluZiAtPiBpbmYKKyVmIC1pbmZpbml0eSAtPiAtaW5mCislRiBuYW4gLT4gTkFOCislRiBpbmZpbml0eSAtPiBJTkYKKyVGIC1pbmYgLT4gLUlORgorCistLSAnZScgY29kZSBmb3JtYXR0aW5nIHdpdGggZXhwbGljaXQgcHJlY2lzaW9uICg+PSAwKS4gT3V0cHV0IHNob3VsZAorLS0gYWx3YXlzIGhhdmUgZXhhY3RseSB0aGUgbnVtYmVyIG9mIHBsYWNlcyBhZnRlciB0aGUgcG9pbnQgdGhhdCB3ZXJlCistLSByZXF1ZXN0ZWQuCisKKy0tIHplcm9zCislLjBlIDAgLT4gMGUrMDAKKyUuMWUgMCAtPiAwLjBlKzAwCislLjJlIDAgLT4gMC4wMGUrMDAKKyUuMTBlIDAgLT4gMC4wMDAwMDAwMDAwZSswMAorJS41MGUgMCAtPiAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMAorCistLSBwcmVjaXNpb24gMC4gIG5vIGRlY2ltYWwgcG9pbnQgaW4gdGhlIG91dHB1dAorJS4wZSAwLjAxIC0+IDFlLTAyCislLjBlIDAuMSAtPiAxZS0wMQorJS4wZSAxIC0+IDFlKzAwCislLjBlIDEwIC0+IDFlKzAxCislLjBlIDEwMCAtPiAxZSswMgorJS4wZSAwLjAxMiAtPiAxZS0wMgorJS4wZSAwLjEyIC0+IDFlLTAxCislLjBlIDEuMiAtPiAxZSswMAorJS4wZSAxMiAtPiAxZSswMQorJS4wZSAxMjAgLT4gMWUrMDIKKyUuMGUgMTIzLjQ1NiAtPiAxZSswMgorJS4wZSAwLjAwMDEyMzQ1NiAtPiAxZS0wNAorJS4wZSAxMjM0NTYwMDAgLT4gMWUrMDgKKyUuMGUgMC41IC0+IDVlLTAxCislLjBlIDEuNCAtPiAxZSswMAorJS4wZSAxLjUgLT4gMmUrMDAKKyUuMGUgMS42IC0+IDJlKzAwCislLjBlIDIuNDk5OTk5OSAtPiAyZSswMAorJS4wZSAyLjUgLT4gMmUrMDAKKyUuMGUgMi41MDAwMDAxIC0+IDNlKzAwCislLjBlIDMuNDk5OTk5OTk5OTk5IC0+IDNlKzAwCislLjBlIDMuNSAtPiA0ZSswMAorJS4wZSA0LjUgLT4gNGUrMDAKKyUuMGUgNS41IC0+IDZlKzAwCislLjBlIDYuNSAtPiA2ZSswMAorJS4wZSA3LjUgLT4gOGUrMDAKKyUuMGUgOC41IC0+IDhlKzAwCislLjBlIDkuNDk5OSAtPiA5ZSswMAorJS4wZSA5LjUgLT4gMWUrMDEKKyUuMGUgMTAuNSAtPiAxZSswMQorJS4wZSAxNC45OTkgLT4gMWUrMDEKKyUuMGUgMTUgLT4gMmUrMDEKKworLS0gcHJlY2lzaW9uIDEKKyUuMWUgMC4wMDAxIC0+IDEuMGUtMDQKKyUuMWUgMC4wMDEgLT4gMS4wZS0wMworJS4xZSAwLjAxIC0+IDEuMGUtMDIKKyUuMWUgMC4xIC0+IDEuMGUtMDEKKyUuMWUgMSAtPiAxLjBlKzAwCislLjFlIDEwIC0+IDEuMGUrMDEKKyUuMWUgMTAwIC0+IDEuMGUrMDIKKyUuMWUgMTIwIC0+IDEuMmUrMDIKKyUuMWUgMTIzIC0+IDEuMmUrMDIKKyUuMWUgMTIzLjQgLT4gMS4yZSswMgorCistLSBwcmVjaXNpb24gMgorJS4yZSAwLjAwMDEzIC0+IDEuMzBlLTA0CislLjJlIDAuMDAwMTM1IC0+IDEuMzVlLTA0CislLjJlIDAuMDAwMTM1NyAtPiAxLjM2ZS0wNAorJS4yZSAwLjAwMDEgLT4gMS4wMGUtMDQKKyUuMmUgMC4wMDEgLT4gMS4wMGUtMDMKKyUuMmUgMC4wMSAtPiAxLjAwZS0wMgorJS4yZSAwLjEgLT4gMS4wMGUtMDEKKyUuMmUgMSAtPiAxLjAwZSswMAorJS4yZSAxMCAtPiAxLjAwZSswMQorJS4yZSAxMDAgLT4gMS4wMGUrMDIKKyUuMmUgMTAwMCAtPiAxLjAwZSswMworJS4yZSAxNTAwIC0+IDEuNTBlKzAzCislLjJlIDE1OTAgLT4gMS41OWUrMDMKKyUuMmUgMTU5OCAtPiAxLjYwZSswMworJS4yZSAxNTk4LjcgLT4gMS42MGUrMDMKKyUuMmUgMTU5OC43NiAtPiAxLjYwZSswMworJS4yZSA5OTk5IC0+IDEuMDBlKzA0CisKKy0tIG9taXR0ZWQgcHJlY2lzaW9uIGRlZmF1bHRzIHRvIDYKKyVlIDAgLT4gMC4wMDAwMDBlKzAwCislZSAxNjUgLT4gMS42NTAwMDBlKzAyCislZSAxMjM0NTY3IC0+IDEuMjM0NTY3ZSswNgorJWUgMTIzNDU2NzggLT4gMS4yMzQ1NjhlKzA3CislZSAxLjEgLT4gMS4xMDAwMDBlKzAwCisKKy0tIGFsdGVybmF0ZSBmb3JtIGFsd2F5cyBjb250YWlucyBhIGRlY2ltYWwgcG9pbnQuICBUaGlzIG9ubHkgbWFrZXMKKy0tIGEgZGlmZmVyZW5jZSB3aGVuIHByZWNpc2lvbiBpcyAwLgorCislIy4wZSAwLjAxIC0+IDEuZS0wMgorJSMuMGUgMC4xIC0+IDEuZS0wMQorJSMuMGUgMSAtPiAxLmUrMDAKKyUjLjBlIDEwIC0+IDEuZSswMQorJSMuMGUgMTAwIC0+IDEuZSswMgorJSMuMGUgMC4wMTIgLT4gMS5lLTAyCislIy4wZSAwLjEyIC0+IDEuZS0wMQorJSMuMGUgMS4yIC0+IDEuZSswMAorJSMuMGUgMTIgLT4gMS5lKzAxCislIy4wZSAxMjAgLT4gMS5lKzAyCislIy4wZSAxMjMuNDU2IC0+IDEuZSswMgorJSMuMGUgMC4wMDAxMjM0NTYgLT4gMS5lLTA0CislIy4wZSAxMjM0NTYwMDAgLT4gMS5lKzA4CislIy4wZSAwLjUgLT4gNS5lLTAxCislIy4wZSAxLjQgLT4gMS5lKzAwCislIy4wZSAxLjUgLT4gMi5lKzAwCislIy4wZSAxLjYgLT4gMi5lKzAwCislIy4wZSAyLjQ5OTk5OTkgLT4gMi5lKzAwCislIy4wZSAyLjUgLT4gMi5lKzAwCislIy4wZSAyLjUwMDAwMDEgLT4gMy5lKzAwCislIy4wZSAzLjQ5OTk5OTk5OTk5OSAtPiAzLmUrMDAKKyUjLjBlIDMuNSAtPiA0LmUrMDAKKyUjLjBlIDQuNSAtPiA0LmUrMDAKKyUjLjBlIDUuNSAtPiA2LmUrMDAKKyUjLjBlIDYuNSAtPiA2LmUrMDAKKyUjLjBlIDcuNSAtPiA4LmUrMDAKKyUjLjBlIDguNSAtPiA4LmUrMDAKKyUjLjBlIDkuNDk5OSAtPiA5LmUrMDAKKyUjLjBlIDkuNSAtPiAxLmUrMDEKKyUjLjBlIDEwLjUgLT4gMS5lKzAxCislIy4wZSAxNC45OTkgLT4gMS5lKzAxCislIy4wZSAxNSAtPiAyLmUrMDEKKyUjLjFlIDEyMy40IC0+IDEuMmUrMDIKKyUjLjJlIDAuMDAwMTM1NyAtPiAxLjM2ZS0wNAorCistLSBuYW5zIGFuZCBpbmZpbml0aWVzCislZSBuYW4gLT4gbmFuCislZSBpbmYgLT4gaW5mCislZSAtaW5maW5pdHkgLT4gLWluZgorJUUgbmFuIC0+IE5BTgorJUUgaW5maW5pdHkgLT4gSU5GCislRSAtaW5mIC0+IC1JTkYKKworLS0gJ2cnIGNvZGUgZm9ybWF0dGluZy4KKworLS0gemVyb3MKKyUuMGcgMCAtPiAwCislLjFnIDAgLT4gMAorJS4yZyAwIC0+IDAKKyUuM2cgMCAtPiAwCislLjRnIDAgLT4gMAorJS4xMGcgMCAtPiAwCislLjUwZyAwIC0+IDAKKyUuMTAwZyAwIC0+IDAKKworLS0gcHJlY2lzaW9uIDAgZG9lc24ndCBtYWtlIGEgbG90IG9mIHNlbnNlIGZvciB0aGUgJ2cnIGNvZGUgKHdoYXQgZG9lcworLS0gaXQgbWVhbiB0byBoYXZlIG5vIHNpZ25pZmljYW50IGRpZ2l0cz8pOyBpbiBwcmFjdGljZSwgaXQncyBpbnRlcnByZXRlZAorLS0gYXMgaWRlbnRpY2FsIHRvIHByZWNpc2lvbiAxCislLjBnIDEwMDAgLT4gMWUrMDMKKyUuMGcgMTAwIC0+IDFlKzAyCislLjBnIDEwIC0+IDFlKzAxCislLjBnIDEgLT4gMQorJS4wZyAwLjEgLT4gMC4xCislLjBnIDAuMDEgLT4gMC4wMQorJS4wZyAxZS0zIC0+IDAuMDAxCislLjBnIDFlLTQgLT4gMC4wMDAxCislLjBnIDFlLTUgLT4gMWUtMDUKKyUuMGcgMWUtNiAtPiAxZS0wNgorJS4wZyAxMiAtPiAxZSswMQorJS4wZyAxMjAgLT4gMWUrMDIKKyUuMGcgMS4yIC0+IDEKKyUuMGcgMC4xMiAtPiAwLjEKKyUuMGcgMC4wMTIgLT4gMC4wMQorJS4wZyAwLjAwMTIgLT4gMC4wMDEKKyUuMGcgMC4wMDAxMiAtPiAwLjAwMDEKKyUuMGcgMC4wMDAwMTIgLT4gMWUtMDUKKyUuMGcgMC4wMDAwMDEyIC0+IDFlLTA2CisKKy0tIHByZWNpc2lvbiAxIGlkZW50aWNhbCB0byBwcmVjaXNpb24gMAorJS4xZyAxMDAwIC0+IDFlKzAzCislLjFnIDEwMCAtPiAxZSswMgorJS4xZyAxMCAtPiAxZSswMQorJS4xZyAxIC0+IDEKKyUuMWcgMC4xIC0+IDAuMQorJS4xZyAwLjAxIC0+IDAuMDEKKyUuMWcgMWUtMyAtPiAwLjAwMQorJS4xZyAxZS00IC0+IDAuMDAwMQorJS4xZyAxZS01IC0+IDFlLTA1CislLjFnIDFlLTYgLT4gMWUtMDYKKyUuMWcgMTIgLT4gMWUrMDEKKyUuMWcgMTIwIC0+IDFlKzAyCislLjFnIDEuMiAtPiAxCislLjFnIDAuMTIgLT4gMC4xCislLjFnIDAuMDEyIC0+IDAuMDEKKyUuMWcgMC4wMDEyIC0+IDAuMDAxCislLjFnIDAuMDAwMTIgLT4gMC4wMDAxCislLjFnIDAuMDAwMDEyIC0+IDFlLTA1CislLjFnIDAuMDAwMDAxMiAtPiAxZS0wNgorCistLSBwcmVjaXNpb24gMgorJS4yZyAxMDAwIC0+IDFlKzAzCislLjJnIDEwMCAtPiAxZSswMgorJS4yZyAxMCAtPiAxMAorJS4yZyAxIC0+IDEKKyUuMmcgMC4xIC0+IDAuMQorJS4yZyAwLjAxIC0+IDAuMDEKKyUuMmcgMC4wMDEgLT4gMC4wMDEKKyUuMmcgMWUtNCAtPiAwLjAwMDEKKyUuMmcgMWUtNSAtPiAxZS0wNQorJS4yZyAxZS02IC0+IDFlLTA2CislLjJnIDEyMzQgLT4gMS4yZSswMworJS4yZyAxMjMgLT4gMS4yZSswMgorJS4yZyAxMi4zIC0+IDEyCislLjJnIDEuMjMgLT4gMS4yCislLjJnIDAuMTIzIC0+IDAuMTIKKyUuMmcgMC4wMTIzIC0+IDAuMDEyCislLjJnIDAuMDAxMjMgLT4gMC4wMDEyCislLjJnIDAuMDAwMTIzIC0+IDAuMDAwMTIKKyUuMmcgMC4wMDAwMTIzIC0+IDEuMmUtMDUKKworLS0gYWx0ZXJuYXRlIGcgZm9ybWF0dGluZzogIGFsd2F5cyBpbmNsdWRlIGRlY2ltYWwgcG9pbnQgYW5kCistLSBleGFjdGx5IDxwcmVjaXNpb24+IHNpZ25pZmljYW50IGRpZ2l0cy4KKyUjLjBnIDAgLT4gMC4KKyUjLjFnIDAgLT4gMC4KKyUjLjJnIDAgLT4gMC4wCislIy4zZyAwIC0+IDAuMDAKKyUjLjRnIDAgLT4gMC4wMDAKKworJSMuMGcgMC4yIC0+IDAuMgorJSMuMWcgMC4yIC0+IDAuMgorJSMuMmcgMC4yIC0+IDAuMjAKKyUjLjNnIDAuMiAtPiAwLjIwMAorJSMuNGcgMC4yIC0+IDAuMjAwMAorJSMuMTBnIDAuMiAtPiAwLjIwMDAwMDAwMDAKKworJSMuMGcgMiAtPiAyLgorJSMuMWcgMiAtPiAyLgorJSMuMmcgMiAtPiAyLjAKKyUjLjNnIDIgLT4gMi4wMAorJSMuNGcgMiAtPiAyLjAwMAorCislIy4wZyAyMCAtPiAyLmUrMDEKKyUjLjFnIDIwIC0+IDIuZSswMQorJSMuMmcgMjAgLT4gMjAuCislIy4zZyAyMCAtPiAyMC4wCislIy40ZyAyMCAtPiAyMC4wMAorCislIy4wZyAyMzQuNTYgLT4gMi5lKzAyCislIy4xZyAyMzQuNTYgLT4gMi5lKzAyCislIy4yZyAyMzQuNTYgLT4gMi4zZSswMgorJSMuM2cgMjM0LjU2IC0+IDIzNS4KKyUjLjRnIDIzNC41NiAtPiAyMzQuNgorJSMuNWcgMjM0LjU2IC0+IDIzNC41NgorJSMuNmcgMjM0LjU2IC0+IDIzNC41NjAKKworLS0gbmFucyBhbmQgaW5maW5pdGllcworJWcgbmFuIC0+IG5hbgorJWcgaW5mIC0+IGluZgorJWcgLWluZmluaXR5IC0+IC1pbmYKKyVHIG5hbiAtPiBOQU4KKyVHIGluZmluaXR5IC0+IElORgorJUcgLWluZiAtPiAtSU5GCisKKy0tIGZvciByZXByIGZvcm1hdHRpbmcgc2VlIHRoZSBzZXBhcmF0ZSB0ZXN0X3Nob3J0X3JlcHIgdGVzdCBpbgorLS0gdGVzdF9mbG9hdC5weS4gIE5vdCBhbGwgcGxhdGZvcm1zIHVzZSBzaG9ydCByZXByIGZvciBmbG9hdHMuCisKKy0tIHN0ciBmb3JtYXR0aW5nLiAgUmVzdWx0IGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsIHBvaW50IGFuZCBhdAorLS0gbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIHRoZSBwb2ludCwgb3IgYW4gZXhwb25lbnQuCislcyAwIC0+IDAuMAorJXMgMSAtPiAxLjAKKworJXMgMC4wMSAtPiAwLjAxCislcyAwLjAyIC0+IDAuMDIKKyVzIDAuMDMgLT4gMC4wMworJXMgMC4wNCAtPiAwLjA0CislcyAwLjA1IC0+IDAuMDUKKworLS0gc3RyIHRydW5jYXRlcyB0byAxMiBzaWduaWZpY2FudCBkaWdpdHMKKyVzIDEuMjM0MTIzNDEyMzQxIC0+IDEuMjM0MTIzNDEyMzQKKyVzIDEuMjM0MTIzNDEyMzQgLT4gMS4yMzQxMjM0MTIzNAorJXMgMS4yMzQxMjM0MTIzIC0+IDEuMjM0MTIzNDEyMworCistLSB2YWx1ZXMgPj0gMWUxMSBnZXQgYW4gZXhwb25lbnQKKyVzIDEwIC0+IDEwLjAKKyVzIDEwMCAtPiAxMDAuMAorJXMgMWUxMCAtPiAxMDAwMDAwMDAwMC4wCislcyA5Ljk5OWUxMCAtPiA5OTk5MDAwMDAwMC4wCislcyA5OTk5OTk5OTk5OSAtPiA5OTk5OTk5OTk5OS4wCislcyA5OTk5OTk5OTk5OS45IC0+IDk5OTk5OTk5OTk5LjkKKyVzIDk5OTk5OTk5OTk5Ljk5IC0+IDFlKzExCislcyAxZTExIC0+IDFlKzExCislcyAxZTEyIC0+IDFlKzEyCisKKy0tIGFzIGRvIHZhbHVlcyA8IDFlLTQKKyVzIDFlLTMgLT4gMC4wMDEKKyVzIDEuMDAxZS00IC0+IDAuMDAwMTAwMQorJXMgMS4wMDAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxCislcyAxLjAwMDAwMDAwMDAxZS00IC0+IDAuMDAwMTAwMDAwMDAwMDAxCislcyAxLjAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxMDAwMDAwMDAwMQorJXMgMWUtNCAtPiAwLjAwMDEKKyVzIDAuOTk5OTk5OTk5OTk5ZS00IC0+IDkuOTk5OTk5OTk5OTllLTA1CislcyAwLjk5OWUtNCAtPiA5Ljk5ZS0wNQorJXMgMWUtNSAtPiAxZS0wNQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weSBiL0xpYi90ZXN0L2dkYl9zYW1wbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczMmIyNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2dkYl9zYW1wbGUucHkKQEAgLTAsMCArMSwxMiBAQAorIyBTYW1wbGUgc2NyaXB0IGZvciB1c2UgYnkgdGVzdF9nZGIucHkKKworZGVmIGZvbyhhLCBiLCBjKToKKyAgICBiYXIoYSwgYiwgYykKKworZGVmIGJhcihhLCBiLCBjKToKKyAgICBiYXooYSwgYiwgYykKKworZGVmIGJheigqYXJncyk6CisgICAgcHJpbnQoNDIpCisKK2ZvbygxLCAyLCAzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvaWVlZTc1NC50eHQgYi9MaWIvdGVzdC9pZWVlNzU0LnR4dAppbmRleCA1YTQxYzhmLi44OWJiMGM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9pZWVlNzU0LnR4dAorKysgYi9MaWIvdGVzdC9pZWVlNzU0LnR4dApAQCAtNzIsNyArNzIsNyBAQAogPj4+IE5BTiA+PSAwCiBGYWxzZQogCi1BbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgYSBOYU4gcmV0dXJuIGEgTmFOIGV4Y2VwdCBmb3IgdGhlIHBvd2VyIG9mICowKiBhbmQgKjEqLgorQWxsIG9wZXJhdGlvbnMgaW52b2x2aW5nIGEgTmFOIHJldHVybiBhIE5hTiBleGNlcHQgZm9yIG5hbioqMCBhbmQgMSoqbmFuLgogPj4+IDEgKyBOQU4KIG5hbgogPj4+IDEgKiBOQU4KQEAgLTgxLDggKzgxLDEwIEBACiBuYW4KID4+PiAxICoqIE5BTgogMS4wCis+Pj4gTkFOICoqIDAKKzEuMAogPj4+IDAgKiogTkFOCi0wLjAKK25hbgogPj4+ICgxLjAgKyBGSS5lcHNpbG9uKSAqIE5BTgogbmFuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9kaWN0c2VsZi5weSBiL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9kaWN0c2VsZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWJkMzdkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2RpY3RzZWxmLnB5CkBAIC0wLDAgKzEsMTIgQEAKKycnJ1Rlc3QgY2FzZSBmb3IgInNlbGYuX19kaWN0X18gPSBzZWxmIiBjaXJjdWxhciByZWZlcmVuY2UgYnVnICgjMTQ2OTYyOSknJycKKworaW1wb3J0IGdjCisKK2NsYXNzIExlYWt5RGljdChkaWN0KToKKyAgICBwYXNzCisKK2RlZiBsZWFrKCk6CisgICAgbGQgPSBMZWFreURpY3QoKQorICAgIGxkLl9fZGljdF9fID0gbGQKKyAgICBkZWwgbGQKKyAgICBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5IGIvTGliL3Rlc3QvbGlzdF90ZXN0cy5weQppbmRleCBlNDI1NGVmLi5iOGQ2ZDZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2xpc3RfdGVzdHMucHkKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYWRFeGMsIGQucmVtb3ZlLCAnYycpCiAgICAgICAgIGZvciB4LCB5IGluIHppcChkLCBlKToKICAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgb3JpZ2luYWwgb3JkZXIgYW5kIHZhbHVlcyBhcmUgcmV0YWluZWQuCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4LCB5KQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKjMKQEAgLTQxOSw3ICs0MTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUucmV2ZXJzZSwgNDIpCiAKICAgICBkZWYgdGVzdF9zb3J0KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICAgICAoInRoZSBjbXAgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgc2VsZi5fdGVzdF9zb3J0KCkKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiAgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCiAgICAgICAgIHUyID0gdQogICAgICAgICB1ICs9IFsyLCAzXQotICAgICAgICBzZWxmLmFzc2VydF8odSBpcyB1MikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh1LCB1MikKIAogICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoInNwYW0iKQogICAgICAgICB1ICs9ICJlZ2dzIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weSBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKaW5kZXggODU1YWQ0Ni4uOTY2ZjliZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbG9ja190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CkBAIC0yNTcsMTAgKzI1Nyw4IEBACiAgICAgICAgIHJlc3VsdHMxID0gW10KICAgICAgICAgcmVzdWx0czIgPSBbXQogICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgZXZ0LndhaXQoKQotICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKGV2dC5pc19zZXQoKSkKLSAgICAgICAgICAgIGV2dC53YWl0KCkKLSAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChldnQuaXNfc2V0KCkpCisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LndhaXQoKSkKKyAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChldnQud2FpdCgpKQogICAgICAgICBiID0gQnVuY2goZiwgTikKICAgICAgICAgYi53YWl0X2Zvcl9zdGFydGVkKCkKICAgICAgICAgX3dhaXQoKQpAQCAtMjg0LDExICsyODIsOSBAQAogICAgICAgICByZXN1bHRzMiA9IFtdCiAgICAgICAgIE4gPSA1CiAgICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICBldnQud2FpdCgwLjApCi0gICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LmlzX3NldCgpKQorICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKGV2dC53YWl0KDAuMCkpCiAgICAgICAgICAgICB0MSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICBldnQud2FpdCgwLjIpCi0gICAgICAgICAgICByID0gZXZ0LmlzX3NldCgpCisgICAgICAgICAgICByID0gZXZ0LndhaXQoMC4yKQogICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKChyLCB0MiAtIHQxKSkKICAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weSBiL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKaW5kZXggNmM0ZTZlYy4uNDlmNjM3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CkBAIC01MSwxNyArNTEsMTcgQEAKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5yZWZlcmVuY2UuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrZXldLCB2YWx1ZSkKICAgICAgICAga25vd25rZXkgPSBzZWxmLm90aGVyLmtleXMoKVswXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTpkW2tub3dua2V5XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTpkW2tub3dua2V5XSkKICAgICAgICAgI2xlbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIGxlbihzZWxmLnJlZmVyZW5jZSkpCiAgICAgICAgICNpbgogICAgICAgICBmb3IgayBpbiBzZWxmLnJlZmVyZW5jZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGQpCiAgICAgICAgIGZvciBrIGluIHNlbGYub3RoZXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoayBub3QgaW4gZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgZCkKICAgICAgICAgI2hhc19rZXkKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CiAgICAgICAgICAgICBmb3IgayBpbiBzZWxmLnJlZmVyZW5jZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KGspKQogICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5vdGhlcjoKQEAgLTc2LDEwICs3NiwxMCBAQAogICAgICAgICBpZiBub3QgZDogc2VsZi5mYWlsKCJGdWxsIG1hcHBpbmcgbXVzdCBjb21wYXJlIHRvIFRydWUiKQogICAgICAgICAjIGtleXMoKSwgaXRlbXMoKSwgaXRlcmtleXMoKSAuLi4KICAgICAgICAgZGVmIGNoZWNrX2l0ZXJhbmRsaXN0KGl0ZXIsIGxzdCwgcmVmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGl0ZXIsICduZXh0JykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihpdGVyLCAnX19pdGVyX18nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGl0ZXIsICduZXh0JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihpdGVyLCAnX19pdGVyX18nKSkKICAgICAgICAgICAgIHggPSBsaXN0KGl0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHgpPT1zZXQobHN0KT09c2V0KHJlZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHgpPT1zZXQobHN0KT09c2V0KHJlZikpCiAgICAgICAgIGNoZWNrX2l0ZXJhbmRsaXN0KGQuaXRlcmtleXMoKSwgZC5rZXlzKCksIHNlbGYucmVmZXJlbmNlLmtleXMoKSkKICAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoaXRlcihkKSwgZC5rZXlzKCksIHNlbGYucmVmZXJlbmNlLmtleXMoKSkKICAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoZC5pdGVydmFsdWVzKCksIGQudmFsdWVzKCksIHNlbGYucmVmZXJlbmNlLnZhbHVlcygpKQpAQCAtODksNyArODksNyBAQAogICAgICAgICBrbm93bmtleSwga25vd252YWx1ZSA9IHNlbGYub3RoZXIuaXRlcml0ZW1zKCkubmV4dCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa2V5LCBrbm93bnZhbHVlKSwgdmFsdWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa25vd25rZXksIGtub3dudmFsdWUpLCBrbm93bnZhbHVlKQotICAgICAgICBzZWxmLmZhaWxJZihrbm93bmtleSBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtub3dua2V5LCBkKQogCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3Igd3JpdGUgb3BlcmF0aW9ucyBvbiBtYXBwaW5nCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFtrZXldLCB2YWx1ZSkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLnJlZmVyZW5jZS5rZXlzKCk6CiAgICAgICAgICAgICBkZWwgcFtrZXldCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTpwW2tleV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOnBba2V5XSkKICAgICAgICAgcCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQogICAgICAgICAjdXBkYXRlCiAgICAgICAgIHAudXBkYXRlKHNlbGYucmVmZXJlbmNlKQpAQCAtMTE5LDE2ICsxMTksMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tub3dua2V5XSwga25vd252YWx1ZSkKICAgICAgICAgI3BvcAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGtub3dua2V5KSwga25vd252YWx1ZSkKLSAgICAgICAgc2VsZi5mYWlsSWYoa25vd25rZXkgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCBrbm93bmtleSkKICAgICAgICAgZGVmYXVsdCA9IDkwOQogICAgICAgICBkW2tub3dua2V5XSA9IGtub3dudmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSwgZGVmYXVsdCksIGtub3dudmFsdWUpCi0gICAgICAgIHNlbGYuZmFpbElmKGtub3dua2V5IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa25vd25rZXksIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3Aoa25vd25rZXksIGRlZmF1bHQpLCBkZWZhdWx0KQogICAgICAgICAjcG9waXRlbQogICAgICAgICBrZXksIHZhbHVlID0gZC5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5mYWlsSWYoa2V5IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5LCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBzZWxmLnJlZmVyZW5jZVtrZXldKQogICAgICAgICBwPXNlbGYuX2VtcHR5X21hcHBpbmcoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcC5wb3BpdGVtKQpAQCAtMTM3LDE3ICsxMzcsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbXB0eV9tYXBwaW5nKCksIHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKIAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5yZWZlcmVuY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhib29sKHNlbGYuX2VtcHR5X21hcHBpbmcoKSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhib29sKHNlbGYucmVmZXJlbmNlKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucmVmZXJlbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9lbXB0eV9tYXBwaW5nKCkpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLnJlZmVyZW5jZSkgaXMgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCiAgICAgICAgIGQgPSBzZWxmLnJlZmVyZW5jZQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5pbm1hcHBpbmcua2V5cygpWzBdIGluIGQua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5vdGhlci5rZXlzKClbMF0gbm90IGluIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5vdGhlci5rZXlzKClbMF0sIGQua2V5cygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQua2V5cywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKQEAgLTI3MywxMCArMjczLDEwIEBACiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KHNlbGYub3RoZXIua2V5cygpWzBdKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0sIDMpLCAzKQogICAgICAgICBkID0gc2VsZi5yZWZlcmVuY2UKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuZ2V0KHNlbGYub3RoZXIua2V5cygpWzBdKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0sIDMpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSksIHNlbGYuaW5tYXBwaW5nLnZhbHVlcygpWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYuaW5tYXBwaW5nLmtleXMoKVswXSwgMyksIHNlbGYuaW5tYXBwaW5nLnZhbHVlcygpWzBdKQpAQCAtMzA3LDE1ICszMDcsMTUgQEAKIGNsYXNzIFRlc3RNYXBwaW5nUHJvdG9jb2woQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfY29uc3RydWN0b3Ioc2VsZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2VtcHR5X21hcHBpbmcoKSBpcyBub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fZW1wdHlfbWFwcGluZygpIGlzIG5vdCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoeD0xLCB5PTIpLCB7IngiOiAxLCAieSI6IDJ9KQogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfYm9vbChzZWxmKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2Z1bGxfbWFwcGluZyh7IngiOiAieSJ9KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJvb2woc2VsZi5fZW1wdHlfbWFwcGluZygpKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJvb2woc2VsZi5fZnVsbF9tYXBwaW5nKHsieCI6ICJ5In0pKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX2Z1bGxfbWFwcGluZyh7IngiOiAieSJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woc2VsZi5fZW1wdHlfbWFwcGluZygpKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woc2VsZi5fZnVsbF9tYXBwaW5nKHsieCI6ICJ5In0pKSBpcyBUcnVlKQogCiAgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3Rfa2V5cyhzZWxmKQpAQCAtMzIzLDkgKzMyMyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5rZXlzKCksIFtdKQogICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCiAgICAgICAgIGsgPSBkLmtleXMoKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIGspCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYicgaW4gaykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdjJyBub3QgaW4gaykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGspCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBrKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgaykKIAogICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfdmFsdWVzKHNlbGYpCkBAIC0zNDAsNyArMzQwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBkLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkLmhhc19rZXkoJ2EnKSkKICAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnOiAxLCAnYic6IDJ9KQogICAgICAgICBrID0gZC5rZXlzKCkKICAgICAgICAgay5zb3J0KCkKQEAgLTM1MCwxMiArMzUwLDEzIEBACiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICgnYScgaW4gZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgbm90IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICgnYScgaW4gZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgbm90IGluIGQpCiAgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2InIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYycgbm90IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdiJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYycsIGQpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fY29udGFpbnNfXykKIApAQCAtNDM0LDcgKzQzNSw3IEBACiAgICAgZGVmIHRlc3RfZnJvbWtleXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdChkLmZyb21rZXlzKCdhYmMnKSBpcyBkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdChkLmZyb21rZXlzKCdhYmMnKSBpcyBkKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoKDQsNSksMCksIHs0OjAsIDU6MH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cyhbXSksIHt9KQpAQCAtNDQ1LDE3ICs0NDYsMTcgQEAKICAgICAgICAgY2xhc3MgZGljdGxpa2Uoc2VsZi50eXBlMnRlc3QpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZSgpLmZyb21rZXlzKCdhJyksIHsnYSc6Tm9uZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaWN0bGlrZS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKS5fX2NsYXNzX18gaXMgZGljdGxpa2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0bGlrZS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKS5fX2NsYXNzX18gaXMgZGljdGxpa2UpCiAgICAgICAgICMgRklYTUU6IHRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yayB3aXRoIFVzZXJEaWN0LCBiZWNhdXNlIGl0J3MgYW4gb2xkIHN0eWxlIGNsYXNzCi0gICAgICAgICMgc2VsZi5hc3NlcnRfKHR5cGUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCiAgICAgICAgIGNsYXNzIG15ZGljdChzZWxmLnR5cGUydGVzdCk6CiAgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgogICAgICAgICAgICAgICAgIHJldHVybiBVc2VyRGljdC5Vc2VyRGljdCgpCiAgICAgICAgIHVkID0gbXlkaWN0LmZyb21rZXlzKCdhYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWQsIHsnYSc6Tm9uZSwgJ2InOk5vbmV9KQogICAgICAgICAjIEZJWE1FOiB0aGUgZm9sbG93aW5nIHdvbid0IHdvcmsgd2l0aCBVc2VyRGljdCwgYmVjYXVzZSBpdCdzIGFuIG9sZCBzdHlsZSBjbGFzcwotICAgICAgICAjIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkpCisgICAgICAgICMgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaWN0LmZyb21rZXlzKQogCiAgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCkBAIC00ODUsMTYgKzQ4NiwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29weSgpLCB7MToxLCAyOjIsIDM6M30pCiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvcHkoKSwgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZC5jb3B5KCksIGQuX19jbGFzc19fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQuY29weSgpLCBkLl9fY2xhc3NfXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNvcHksIE5vbmUpCiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2dldChzZWxmKQogICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2MnLCAzKSwgMykKICAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnIDogMSwgJ2InIDogMn0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2MnLCAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYScpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJywgMyksIDEpCkBAIC01MDIsOSArNTAzLDkgQEAKICAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9zZXRkZWZhdWx0KHNlbGYpCiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNldGRlZmF1bHQoJ2tleTAnKSBpcyBOb25lKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleTAnLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNldGRlZmF1bHQoJ2tleTAnKSBpcyBOb25lKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydrZXknXVswXSwgMykKICAgICAgICAgZC5zZXRkZWZhdWx0KCdrZXknLCBbXSkuYXBwZW5kKDQpCkBAIC01MzAsOSArNTMxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YSwgaW50KGthKSkKICAgICAgICAgICAgICAgICAgICAga2IsIHZiID0gdGIgPSBiLnBvcGl0ZW0oKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZiLCBpbnQoa2IpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obm90KGNvcHltb2RlIDwgMCBhbmQgdGEgIT0gdGIpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYikKIAogICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKICAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfcG9wKHNlbGYpCkBAIC01OTAsNyArNTkxLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVXNlckRpY3QuVXNlckRpY3QoKQogICAgICAgICB1ZCA9IG15ZGljdC5mcm9ta2V5cygnYWInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkLCB7J2EnOk5vbmUsICdiJzpOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodWQsIFVzZXJEaWN0LlVzZXJEaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKIAogICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKICAgICAgICAgVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3BvcChzZWxmKQpAQCAtNjQxLDggKzY0Miw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgcmVwciwgZCkKIAogICAgIGRlZiB0ZXN0X2xlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IChzZWxmLl9lbXB0eV9tYXBwaW5nKCkgPCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IChzZWxmLl9mdWxsX21hcHBpbmcoezE6IDJ9KSA8IHNlbGYuX2Z1bGxfbWFwcGluZyh7MUw6IDJMfSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IChzZWxmLl9lbXB0eV9tYXBwaW5nKCkgPCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IChzZWxmLl9mdWxsX21hcHBpbmcoezE6IDJ9KSA8IHNlbGYuX2Z1bGxfbWFwcGluZyh7MUw6IDJMfSkpKQogCiAgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dCBiL0xpYi90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTFhNDlmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0CkBAIC0wLDAgKzEsNDQ3IEBACistLSBUZXN0Y2FzZXMgZm9yIGZ1bmN0aW9ucyBpbiBtYXRoLgorLS0KKy0tIEVhY2ggbGluZSB0YWtlcyB0aGUgZm9ybToKKy0tCistLSA8dGVzdGlkPiA8ZnVuY3Rpb24+IDxpbnB1dF92YWx1ZT4gLT4gPG91dHB1dF92YWx1ZT4gPGZsYWdzPgorLS0KKy0tIHdoZXJlOgorLS0KKy0tICAgPHRlc3RpZD4gaXMgYSBzaG9ydCBuYW1lIGlkZW50aWZ5aW5nIHRoZSB0ZXN0LAorLS0KKy0tICAgPGZ1bmN0aW9uPiBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgdGVzdGVkIChleHAsIGNvcywgYXNpbmgsIC4uLiksCistLQorLS0gICA8aW5wdXRfdmFsdWU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlCistLQorLS0gICA8b3V0cHV0X3ZhbHVlPiBpcyB0aGUgZXhwZWN0ZWQgKGlkZWFsKSBvdXRwdXQgdmFsdWUsIGFnYWluCistLSAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCistLQorLS0gICA8ZmxhZ3M+IGlzIGEgbGlzdCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgZmxhZ3MgcmVxdWlyZWQgYnkgQzk5CistLQorLS0gVGhlIHBvc3NpYmxlIGZsYWdzIGFyZToKKy0tCistLSAgIGRpdmlkZS1ieS16ZXJvIDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYQorLS0gICAgIG1hdGhlbWF0aWNhbGx5IGluZmluaXRlIHJlc3VsdC4KKy0tCistLSAgIG92ZXJmbG93IDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYSBmaW5pdGUgcmVzdWx0IHRoYXQKKy0tICAgICBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSB1c3VhbCByYW5nZSBvZiBhbiBJRUVFIDc1NCBkb3VibGUuCistLQorLS0gICBpbnZhbGlkIDogcmFpc2VkIGZvciBpbnZhbGlkIGlucHV0cyAoZS5nLiwgc3FydCgtMSkpCistLQorLS0gICBpZ25vcmUtc2lnbiA6IGluZGljYXRlcyB0aGF0IHRoZSBzaWduIG9mIHRoZSByZXN1bHQgaXMKKy0tICAgICB1bnNwZWNpZmllZDsgZS5nLiwgaWYgdGhlIHJlc3VsdCBpcyBnaXZlbiBhcyBpbmYsCistLSAgICAgdGhlbiBib3RoIC1pbmYgYW5kIGluZiBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgY29ycmVjdC4KKy0tCistLSBGbGFncyBtYXkgYXBwZWFyIGluIGFueSBvcmRlci4KKy0tCistLSBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnLS0nIChsaWtlIHRoaXMgb25lKSBzdGFydCBhIGNvbW1lbnQsIGFuZCBhcmUKKy0tIGlnbm9yZWQuICBCbGFuayBsaW5lcywgb3IgbGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UsIGFyZSBhbHNvCistLSBpZ25vcmVkLgorCistLSBNYW55IG9mIHRoZSB2YWx1ZXMgYmVsb3cgd2VyZSBjb21wdXRlZCB3aXRoIHRoZSBoZWxwIG9mCistLSB2ZXJzaW9uIDIuNCBvZiB0aGUgTVBGUiBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24KKy0tIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9ucyB3aXRoIGNvcnJlY3Qgcm91bmRpbmcuICBBbGwgb3V0cHV0CistLSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSAobW9kdWxvIHlldC10by1iZS1kaXNjb3ZlcmVkIGJ1Z3MpCistLSBjb3JyZWN0bHkgcm91bmRlZCwgcHJvdmlkZWQgdGhhdCBlYWNoIGlucHV0IGFuZCBvdXRwdXQgZGVjaW1hbAorLS0gZmxvYXRpbmctcG9pbnQgdmFsdWUgYmVsb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZXByZXNlbnRhdGlvbiBvZgorLS0gdGhlIGNvcnJlc3BvbmRpbmcgbmVhcmVzdCBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlLiAgU2VlIHRoZQorLS0gTVBGUiBob21lcGFnZSBhdCBodHRwOi8vd3d3Lm1wZnIub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorLS0gTVBGUiBwcm9qZWN0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZjogZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmMDAwMCBlcmYgMC4wIC0+IDAuMAorZXJmMDAwMSBlcmYgLTAuMCAtPiAtMC4wCitlcmYwMDAyIGVyZiBpbmYgLT4gMS4wCitlcmYwMDAzIGVyZiAtaW5mIC0+IC0xLjAKK2VyZjAwMDQgZXJmIG5hbiAtPiBuYW4KKworLS0gdGlueSB2YWx1ZXMKK2VyZjAwMTAgZXJmIDFlLTMwOCAtPiAxLjEyODM3OTE2NzA5NTUxMjVlLTMwOAorZXJmMDAxMSBlcmYgNWUtMzI0IC0+IDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0CitlcmYwMDEyIGVyZiAxZS0xMCAtPiAxLjEyODM3OTE2NzA5NTUxMjZlLTEwCisKKy0tIHNtYWxsIGludGVnZXJzCitlcmYwMDIwIGVyZiAxIC0+IDAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMjEgZXJmIDIgLT4gMC45OTUzMjIyNjUwMTg5NTI3MQorZXJmMDAyMiBlcmYgMyAtPiAwLjk5OTk3NzkwOTUwMzAwMTM2CitlcmYwMDIzIGVyZiA0IC0+IDAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMjQgZXJmIDUgLT4gMC45OTk5OTk5OTk5OTg0NjI1NgorZXJmMDAyNSBlcmYgNiAtPiAxLjAKKworZXJmMDAzMCBlcmYgLTEgLT4gLTAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMzEgZXJmIC0yIC0+IC0wLjk5NTMyMjI2NTAxODk1MjcxCitlcmYwMDMyIGVyZiAtMyAtPiAtMC45OTk5Nzc5MDk1MDMwMDEzNgorZXJmMDAzMyBlcmYgLTQgLT4gLTAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMzQgZXJmIC01IC0+IC0wLjk5OTk5OTk5OTk5ODQ2MjU2CitlcmYwMDM1IGVyZiAtNiAtPiAtMS4wCisKKy0tIGh1Z2UgdmFsdWVzIHNob3VsZCBhbGwgZ28gdG8gKy8tMSwgZGVwZW5kaW5nIG9uIHNpZ24KK2VyZjAwNDAgZXJmIC00MCAtPiAtMS4wCitlcmYwMDQxIGVyZiAxZTE2IC0+IDEuMAorZXJmMDA0MiBlcmYgLTFlMTUwIC0+IC0xLjAKK2VyZjAwNDMgZXJmIDEuN2UzMDggLT4gMS4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZjAxMDAgZXJmIDI2LjIgLT4gMS4wCitlcmYwMTAxIGVyZiAyNi40IC0+IDEuMAorZXJmMDEwMiBlcmYgMjYuNiAtPiAxLjAKK2VyZjAxMDMgZXJmIDI2LjggLT4gMS4wCitlcmYwMTA0IGVyZiAyNy4wIC0+IDEuMAorZXJmMDEwNSBlcmYgMjcuMiAtPiAxLjAKK2VyZjAxMDYgZXJmIDI3LjQgLT4gMS4wCitlcmYwMTA3IGVyZiAyNy42IC0+IDEuMAorCitlcmYwMTEwIGVyZiAtMjYuMiAtPiAtMS4wCitlcmYwMTExIGVyZiAtMjYuNCAtPiAtMS4wCitlcmYwMTEyIGVyZiAtMjYuNiAtPiAtMS4wCitlcmYwMTEzIGVyZiAtMjYuOCAtPiAtMS4wCitlcmYwMTE0IGVyZiAtMjcuMCAtPiAtMS4wCitlcmYwMTE1IGVyZiAtMjcuMiAtPiAtMS4wCitlcmYwMTE2IGVyZiAtMjcuNCAtPiAtMS4wCitlcmYwMTE3IGVyZiAtMjcuNiAtPiAtMS4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZmM6IGNvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmYzAwMDAgZXJmYyAwLjAgLT4gMS4wCitlcmZjMDAwMSBlcmZjIC0wLjAgLT4gMS4wCitlcmZjMDAwMiBlcmZjIGluZiAtPiAwLjAKK2VyZmMwMDAzIGVyZmMgLWluZiAtPiAyLjAKK2VyZmMwMDA0IGVyZmMgbmFuIC0+IG5hbgorCistLSB0aW55IHZhbHVlcworZXJmYzAwMTAgZXJmYyAxZS0zMDggLT4gMS4wCitlcmZjMDAxMSBlcmZjIDVlLTMyNCAtPiAxLjAKK2VyZmMwMDEyIGVyZmMgMWUtMTAgLT4gMC45OTk5OTk5OTk4ODcxNjIwNAorCistLSBzbWFsbCBpbnRlZ2VycworZXJmYzAwMjAgZXJmYyAxIC0+IDAuMTU3Mjk5MjA3MDUwMjg1MTMKK2VyZmMwMDIxIGVyZmMgMiAtPiAwLjAwNDY3NzczNDk4MTA0NzI2NjIKK2VyZmMwMDIyIGVyZmMgMyAtPiAyLjIwOTA0OTY5OTg1ODU0NDFlLTA1CitlcmZjMDAyMyBlcmZjIDQgLT4gMS41NDE3MjU3OTAwMjgwMDJlLTA4CitlcmZjMDAyNCBlcmZjIDUgLT4gMS41Mzc0NTk3OTQ0MjgwMzQ5ZS0xMgorZXJmYzAwMjUgZXJmYyA2IC0+IDIuMTUxOTczNjcxMjQ5ODkxM2UtMTcKKworZXJmYzAwMzAgZXJmYyAtMSAtPiAxLjg0MjcwMDc5Mjk0OTcxNDgKK2VyZmMwMDMxIGVyZmMgLTIgLT4gMS45OTUzMjIyNjUwMTg5NTI4CitlcmZjMDAzMiBlcmZjIC0zIC0+IDEuOTk5OTc3OTA5NTAzMDAxNQorZXJmYzAwMzMgZXJmYyAtNCAtPiAxLjk5OTk5OTk4NDU4Mjc0MjEKK2VyZmMwMDM0IGVyZmMgLTUgLT4gMS45OTk5OTk5OTk5OTg0NjI2CitlcmZjMDAzNSBlcmZjIC02IC0+IDIuMAorCistLSBhcyB4IC0+IGluZmluaXR5LCBlcmZjKHgpIGJlaGF2ZXMgbGlrZSBleHAoLXgqeCkveC9zcXJ0KHBpKQorZXJmYzAwNDAgZXJmYyAyMCAtPiA1LjM5NTg2NTYxMTYwNzkwMTJlLTE3NgorZXJmYzAwNDEgZXJmYyAyNSAtPiA4LjMwMDE3MjU3MTE5NjUyMjhlLTI3NAorZXJmYzAwNDIgZXJmYyAyNyAtPiA1LjIzNzA0NjQzOTM1MjYyOTJlLTMxOQorZXJmYzAwNDMgZXJmYyAyOCAtPiAwLjAKKworLS0gaHVnZSB2YWx1ZXMKK2VyZmMwMDUwIGVyZmMgLTQwIC0+IDIuMAorZXJmYzAwNTEgZXJmYyAxZTE2IC0+IDAuMAorZXJmYzAwNTIgZXJmYyAtMWUxNTAgLT4gMi4wCitlcmZjMDA1MyBlcmZjIDEuN2UzMDggLT4gMC4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZmMwMTAwIGVyZmMgMjYuMiAtPiAxLjY0MzI1MDc5MjQzODk0NjFlLTMwMAorZXJmYzAxMDEgZXJmYyAyNi40IC0+IDQuNDAxNzc2ODU4ODAzNTQyNmUtMzA1CitlcmZjMDEwMiBlcmZjIDI2LjYgLT4gMS4wODg1MTI1ODg1NDQyMjY5ZS0zMDkKK2VyZmMwMTAzIGVyZmMgMjYuOCAtPiAyLjQ4NDk2MjE1NzE5NjY2MjllLTMxNAorZXJmYzAxMDQgZXJmYyAyNy4wIC0+IDUuMjM3MDQ2NDM5MzUyNjI5MmUtMzE5CitlcmZjMDEwNSBlcmZjIDI3LjIgLT4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQKK2VyZmMwMTA2IGVyZmMgMjcuNCAtPiAwLjAKK2VyZmMwMTA3IGVyZmMgMjcuNiAtPiAwLjAKKworZXJmYzAxMTAgZXJmYyAtMjYuMiAtPiAyLjAKK2VyZmMwMTExIGVyZmMgLTI2LjQgLT4gMi4wCitlcmZjMDExMiBlcmZjIC0yNi42IC0+IDIuMAorZXJmYzAxMTMgZXJmYyAtMjYuOCAtPiAyLjAKK2VyZmMwMTE0IGVyZmMgLTI3LjAgLT4gMi4wCitlcmZjMDExNSBlcmZjIC0yNy4yIC0+IDIuMAorZXJmYzAxMTYgZXJmYyAtMjcuNCAtPiAyLjAKK2VyZmMwMTE3IGVyZmMgLTI3LjYgLT4gMi4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbGdhbW1hOiBsb2cgb2YgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xnYW0wMDAwIGxnYW1tYSAwLjAgLT4gaW5mICAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAxIGxnYW1tYSAtMC4wIC0+IGluZiAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAyIGxnYW1tYSBpbmYgLT4gaW5mCitsZ2FtMDAwMyBsZ2FtbWEgLWluZiAtPiBpbmYKK2xnYW0wMDA0IGxnYW1tYSBuYW4gLT4gbmFuCisKKy0tIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDAxMCBsZ2FtbWEgLTEgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMSBsZ2FtbWEgLTIgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMiBsZ2FtbWEgLTFlMTYgLT4gaW5mICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMyBsZ2FtbWEgLTFlMzAwIC0+IGluZiAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxNCBsZ2FtbWEgLTEuNzllMzA4IC0+IGluZiBkaXZpZGUtYnktemVybworCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2xnYW0wMDIwIGxnYW1tYSAxIC0+IDAuMAorbGdhbTAwMjEgbGdhbW1hIDIgLT4gMC4wCitsZ2FtMDAyMiBsZ2FtbWEgMyAtPiAwLjY5MzE0NzE4MDU1OTk0NTI5CitsZ2FtMDAyMyBsZ2FtbWEgNCAtPiAxLjc5MTc1OTQ2OTIyODA1NQorbGdhbTAwMjQgbGdhbW1hIDUgLT4gMy4xNzgwNTM4MzAzNDc5NDU4CitsZ2FtMDAyNSBsZ2FtbWEgNiAtPiA0Ljc4NzQ5MTc0Mjc4MjA0NTgKKworLS0gaGFsZiBpbnRlZ2VycworbGdhbTAwMzAgbGdhbW1hIDAuNSAtPiAwLjU3MjM2NDk0MjkyNDcwMDA4CitsZ2FtMDAzMSBsZ2FtbWEgMS41IC0+IC0wLjEyMDc4MjIzNzYzNTI0NTIyCitsZ2FtMDAzMiBsZ2FtbWEgMi41IC0+IDAuMjg0NjgyODcwNDcyOTE5MTgKK2xnYW0wMDMzIGxnYW1tYSAzLjUgLT4gMS4yMDA5NzM2MDIzNDcwNzQzCitsZ2FtMDAzNCBsZ2FtbWEgLTAuNSAtPiAxLjI2NTUxMjEyMzQ4NDY0NTQKK2xnYW0wMDM1IGxnYW1tYSAtMS41IC0+IDAuODYwMDQ3MDE1Mzc2NDgwOTgKK2xnYW0wMDM2IGxnYW1tYSAtMi41IC0+IC0wLjA1NjI0MzcxNjQ5NzY3NDA1NAorbGdhbTAwMzcgbGdhbW1hIC0zLjUgLT4gLTEuMzA5MDA2Njg0OTkzMDQyCisKKy0tIHZhbHVlcyBuZWFyIDAKK2xnYW0wMDQwIGxnYW1tYSAwLjEgLT4gMi4yNTI3MTI2NTE3MzQyMDYKK2xnYW0wMDQxIGxnYW1tYSAwLjAxIC0+IDQuNTk5NDc5ODc4MDQyMDIxOQorbGdhbTAwNDIgbGdhbW1hIDFlLTggLT4gMTguNDIwNjgwNzM4MTgwMjA5CitsZ2FtMDA0MyBsZ2FtbWEgMWUtMTYgLT4gMzYuODQxMzYxNDg3OTA0NzM0CitsZ2FtMDA0NCBsZ2FtbWEgMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA0NSBsZ2FtbWEgMWUtMTYwIC0+IDM2OC40MTM2MTQ4NzkwNDczMgorbGdhbTAwNDYgbGdhbW1hIDFlLTMwOCAtPiA3MDkuMTk2MjA4NjQyMTY2MDgKK2xnYW0wMDQ3IGxnYW1tYSA1LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDQ4IGxnYW1tYSA1LjVlLTMwOSAtPiA3MDkuNzk0MDQ1NjQyOTIxNjcKK2xnYW0wMDQ5IGxnYW1tYSAxZS0zMDkgLT4gNzExLjQ5ODc5MzczNTE2MDEyCitsZ2FtMDA1MCBsZ2FtbWEgMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNTEgbGdhbW1hIDVlLTMyNCAtPiA3NDQuNDQwMDcxOTIxMzgxMjIKK2xnYW0wMDYwIGxnYW1tYSAtMC4xIC0+IDIuMzY4OTYxMzMyNzI4Nzg4NgorbGdhbTAwNjEgbGdhbW1hIC0wLjAxIC0+IDQuNjExMDI0OTkyNzUyODAxMworbGdhbTAwNjIgbGdhbW1hIC0xZS04IC0+IDE4LjQyMDY4MDc0OTcyNDUyMgorbGdhbTAwNjMgbGdhbW1hIC0xZS0xNiAtPiAzNi44NDEzNjE0ODc5MDQ3MzQKK2xnYW0wMDY0IGxnYW1tYSAtMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA2NSBsZ2FtbWEgLTFlLTE2MCAtPiAzNjguNDEzNjE0ODc5MDQ3MzIKK2xnYW0wMDY2IGxnYW1tYSAtMWUtMzA4IC0+IDcwOS4xOTYyMDg2NDIxNjYwOAorbGdhbTAwNjcgbGdhbW1hIC01LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDY4IGxnYW1tYSAtNS41ZS0zMDkgLT4gNzA5Ljc5NDA0NTY0MjkyMTY3CitsZ2FtMDA2OSBsZ2FtbWEgLTFlLTMwOSAtPiA3MTEuNDk4NzkzNzM1MTYwMTIKK2xnYW0wMDcwIGxnYW1tYSAtMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNzEgbGdhbW1hIC01ZS0zMjQgLT4gNzQ0LjQ0MDA3MTkyMTM4MTIyCisKKy0tIHZhbHVlcyBuZWFyIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDA4MCBsZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gMzYuNzM2ODAwNTY5Njc3MTAxCitsZ2FtMDA4MSBsZ2FtbWEgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAzNi4wNDM2NTMzODkxMTcxNTQKK2xnYW0wMDgyIGxnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDM1LjM1MDUwNjIwODU1NzIxMworbGdhbTAwODMgbGdhbW1hIC0yLjAwMDAwMDAwMDAwMDAwMDQgLT4gMzQuNjU3MzU5MDI3OTk3MjY2CitsZ2FtMDA4NCBsZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtMzMxLjg1NDYwNTI0OTgwNjA3CitsZ2FtMDA4NSBsZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiAtMzMxLjg1NDYwNTI0OTgwNTk2CisKKy0tIGxhcmdlIGlucHV0cworbGdhbTAxMDAgbGdhbW1hIDE3MCAtPiA3MDEuNDM3MjYzODA4NzM3MDQKK2xnYW0wMTAxIGxnYW1tYSAxNzEgLT4gNzA2LjU3MzA2MjI0NTc4NzM2CitsZ2FtMDEwMiBsZ2FtbWEgMTcxLjYyNCAtPiA3MDkuNzgwNzc0NDM2Njk4OTUKK2xnYW0wMTAzIGxnYW1tYSAxNzEuNjI1IC0+IDcwOS43ODU5MTY4Mjk0ODM2NQorbGdhbTAxMDQgbGdhbW1hIDE3MiAtPiA3MTEuNzE0NzI1ODAyMjg5OTkKK2xnYW0wMTA1IGxnYW1tYSAyMDAwIC0+IDEzMTk4LjkyMzQ0ODA1NDI2NQorbGdhbTAxMDYgbGdhbW1hIDIuNTU5OTgzMzI3ODUxNjNlMzA1IC0+IDEuNzk3NjkzMTM0ODYyMzA5OWUrMzA4CitsZ2FtMDEwNyBsZ2FtbWEgMi41NTk5ODMzMjc4NTE2NGUzMDUgLT4gaW5mIG92ZXJmbG93CitsZ2FtMDEwOCBsZ2FtbWEgMS43ZTMwOCAtPiBpbmYgb3ZlcmZsb3cKKworLS0gaW5wdXRzIGZvciB3aGljaCBnYW1tYSh4KSBpcyB0aW55CitsZ2FtMDEyMCBsZ2FtbWEgLTEwMC41IC0+IC0zNjQuOTAwOTY4MzA5NDI3MzYKK2xnYW0wMTIxIGxnYW1tYSAtMTYwLjUgLT4gLTY1Ni44ODAwNTI2MTEyNjQzMgorbGdhbTAxMjIgbGdhbW1hIC0xNzAuNSAtPiAtNzA3Ljk5ODQzMzE0NTA3ODgyCitsZ2FtMDEyMyBsZ2FtbWEgLTE3MS41IC0+IC03MTMuMTQzMDE2NDExNjg0ODEKK2xnYW0wMTI0IGxnYW1tYSAtMTc2LjUgLT4gLTczOC45NTI0NzU5MDg0NjQ4NgorbGdhbTAxMjUgbGdhbW1hIC0xNzcuNSAtPiAtNzQ0LjEzMTQ0NjUxNzM4MDM3CitsZ2FtMDEyNiBsZ2FtbWEgLTE3OC41IC0+IC03NDkuMzE2MDM1MTE4NjAwMQorCitsZ2FtMDEzMCBsZ2FtbWEgLTEwMDAuNSAtPiAtNTkxNC40Mzc3MDExMTY4NTE3CitsZ2FtMDEzMSBsZ2FtbWEgLTMwMDAwLjUgLT4gLTI3OTI3OC42NjI5OTU5MTQ0CitsZ2FtMDEzMiBsZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAtMS41NzgyMjU4NDM0NDkyODgzZSsxNworCistLSByZXN1bHRzIGNsb3NlIHRvIDA6ICBwb3NpdGl2ZSBhcmd1bWVudCAuLi4KK2xnYW0wMTUwIGxnYW1tYSAwLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDYuNDA4MzgxMjEzNDgwMDA3NWUtMTcKK2xnYW0wMTUxIGxnYW1tYSAxLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTEuMjgxNjc2MjQyNjk2MDAwOGUtMTYKK2xnYW0wMTUyIGxnYW1tYSAxLjk5OTk5OTk5OTk5OTk5OTggLT4gLTkuMzg3Njk4MDY1NTQzMTE3MGUtMTcKK2xnYW0wMTUzIGxnYW1tYSAyLjAwMDAwMDAwMDAwMDAwMDQgLT4gMS44Nzc1Mzk2MTMxMDg2MjQ0ZS0xNgorCistLSAuLi4gYW5kIG5lZ2F0aXZlIGFyZ3VtZW50CitsZ2FtMDE2MCBsZ2FtbWEgLTIuNzQ3NjgyNjQ2NyAtPiAtNS4yNDc3NDA4MTQ3Njg5MTM2ZS0xMQorbGdhbTAxNjEgbGdhbW1hIC0yLjQ1NzAyNDczOCAtPiAzLjM0NjQ2Mzc1NDE5MTI5MzJlLTEwCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBnYW1tYTogR2FtbWEgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzcGVjaWFsIHZhbHVlcworZ2FtMDAwMCBnYW1tYSAwLjAgLT4gaW5mICAgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMSBnYW1tYSAtMC4wIC0+IC1pbmYgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMiBnYW1tYSBpbmYgLT4gaW5mCitnYW0wMDAzIGdhbW1hIC1pbmYgLT4gbmFuICAgICAgIGludmFsaWQKK2dhbTAwMDQgZ2FtbWEgbmFuIC0+IG5hbgorCistLSBuZWdhdGl2ZSBpbnRlZ2VycyBpbnB1dHMgYXJlIGludmFsaWQKK2dhbTAwMTAgZ2FtbWEgLTEgLT4gbmFuICAgICAgICAgaW52YWxpZAorZ2FtMDAxMSBnYW1tYSAtMiAtPiBuYW4gICAgICAgICBpbnZhbGlkCitnYW0wMDEyIGdhbW1hIC0xZTE2IC0+IG5hbiAgICAgIGludmFsaWQKK2dhbTAwMTMgZ2FtbWEgLTFlMzAwIC0+IG5hbiAgICAgaW52YWxpZAorCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2dhbTAwMjAgZ2FtbWEgMSAtPiAxCitnYW0wMDIxIGdhbW1hIDIgLT4gMQorZ2FtMDAyMiBnYW1tYSAzIC0+IDIKK2dhbTAwMjMgZ2FtbWEgNCAtPiA2CitnYW0wMDI0IGdhbW1hIDUgLT4gMjQKK2dhbTAwMjUgZ2FtbWEgNiAtPiAxMjAKKworLS0gaGFsZiBpbnRlZ2VycworZ2FtMDAzMCBnYW1tYSAwLjUgLT4gMS43NzI0NTM4NTA5MDU1MTYxCitnYW0wMDMxIGdhbW1hIDEuNSAtPiAwLjg4NjIyNjkyNTQ1Mjc1ODA1CitnYW0wMDMyIGdhbW1hIDIuNSAtPiAxLjMyOTM0MDM4ODE3OTEzNzAKK2dhbTAwMzMgZ2FtbWEgMy41IC0+IDMuMzIzMzUwOTcwNDQ3ODQyNgorZ2FtMDAzNCBnYW1tYSAtMC41IC0+IC0zLjU0NDkwNzcwMTgxMTAzMjIKK2dhbTAwMzUgZ2FtbWEgLTEuNSAtPiAyLjM2MzI3MTgwMTIwNzM1NDgKK2dhbTAwMzYgZ2FtbWEgLTIuNSAtPiAtMC45NDUzMDg3MjA0ODI5NDE5MAorZ2FtMDAzNyBnYW1tYSAtMy41IC0+IDAuMjcwMDg4MjA1ODUyMjY5MTEKKworLS0gdmFsdWVzIG5lYXIgMAorZ2FtMDA0MCBnYW1tYSAwLjEgLT4gOS41MTM1MDc2OTg2Njg3MzA2CitnYW0wMDQxIGdhbW1hIDAuMDEgLT4gOTkuNDMyNTg1MTE5MTUwNjAyCitnYW0wMDQyIGdhbW1hIDFlLTggLT4gOTk5OTk5OTkuNDIyNzg0MzQzCitnYW0wMDQzIGdhbW1hIDFlLTE2IC0+IDEwMDAwMDAwMDAwMDAwMDAwCitnYW0wMDQ0IGdhbW1hIDFlLTMwIC0+IDkuOTk5OTk5OTk5OTk5OTk4OGUrMjkKK2dhbTAwNDUgZ2FtbWEgMWUtMTYwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDQ2IGdhbW1hIDFlLTMwOCAtPiAxLjAwMDAwMDAwMDAwMDAwMDBlKzMwOAorZ2FtMDA0NyBnYW1tYSA1LjZlLTMwOSAtPiAxLjc4NTcxNDI4NTcxNDI4NDhlKzMwOAorZ2FtMDA0OCBnYW1tYSA1LjVlLTMwOSAtPiBpbmYgICBvdmVyZmxvdworZ2FtMDA0OSBnYW1tYSAxZS0zMDkgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MCBnYW1tYSAxZS0zMjMgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MSBnYW1tYSA1ZS0zMjQgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA2MCBnYW1tYSAtMC4xIC0+IC0xMC42ODYyODcwMjExOTMxOTMKK2dhbTAwNjEgZ2FtbWEgLTAuMDEgLT4gLTEwMC41ODcxOTc5NjQ0MTA3OAorZ2FtMDA2MiBnYW1tYSAtMWUtOCAtPiAtMTAwMDAwMDAwLjU3NzIxNTY3CitnYW0wMDYzIGdhbW1hIC0xZS0xNiAtPiAtMTAwMDAwMDAwMDAwMDAwMDAKK2dhbTAwNjQgZ2FtbWEgLTFlLTMwIC0+IC05Ljk5OTk5OTk5OTk5OTk5ODhlKzI5CitnYW0wMDY1IGdhbW1hIC0xZS0xNjAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDY2IGdhbW1hIC0xZS0zMDggLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMzA4CitnYW0wMDY3IGdhbW1hIC01LjZlLTMwOSAtPiAtMS43ODU3MTQyODU3MTQyODQ4ZSszMDgKK2dhbTAwNjggZ2FtbWEgLTUuNWUtMzA5IC0+IC1pbmYgb3ZlcmZsb3cKK2dhbTAwNjkgZ2FtbWEgLTFlLTMwOSAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzAgZ2FtbWEgLTFlLTMyMyAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzEgZ2FtbWEgLTVlLTMyNCAtPiAtaW5mICAgb3ZlcmZsb3cKKworLS0gdmFsdWVzIG5lYXIgbmVnYXRpdmUgaW50ZWdlcnMKK2dhbTAwODAgZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gLTkwMDcxOTkyNTQ3NDA5OTIuMAorZ2FtMDA4MSBnYW1tYSAtMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDQ1MDM1OTk2MjczNzA0OTUuNQorZ2FtMDA4MiBnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDIyNTE3OTk4MTM2ODUyNDguNQorZ2FtMDA4MyBnYW1tYSAtMi4wMDAwMDAwMDAwMDAwMDA0IC0+IC0xMTI1ODk5OTA2ODQyNjIzLjUKK2dhbTAwODQgZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtNy41NDAwODMzMzQ4ODMxMDkwZS0xNDUKK2dhbTAwODUgZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiA3LjU0MDA4MzMzNDg4NDA5NjJlLTE0NQorCistLSBsYXJnZSBpbnB1dHMKK2dhbTAxMDAgZ2FtbWEgMTcwIC0+IDQuMjY5MDY4MDA5MDA0NzA1MWUrMzA0CitnYW0wMTAxIGdhbW1hIDE3MSAtPiA3LjI1NzQxNTYxNTMwNzk5OTBlKzMwNgorZ2FtMDEwMiBnYW1tYSAxNzEuNjI0IC0+IDEuNzk0MjExNzU5OTI0ODEwNGUrMzA4CitnYW0wMTAzIGdhbW1hIDE3MS42MjUgLT4gaW5mICAgIG92ZXJmbG93CitnYW0wMTA0IGdhbW1hIDE3MiAtPiBpbmYgICAgICAgIG92ZXJmbG93CitnYW0wMTA1IGdhbW1hIDIwMDAgLT4gaW5mICAgICAgIG92ZXJmbG93CitnYW0wMTA2IGdhbW1hIDEuN2UzMDggLT4gaW5mICAgIG92ZXJmbG93CisKKy0tIGlucHV0cyBmb3Igd2hpY2ggZ2FtbWEoeCkgaXMgdGlueQorZ2FtMDEyMCBnYW1tYSAtMTAwLjUgLT4gLTMuMzUzNjkwODE5ODA3Njc4N2UtMTU5CitnYW0wMTIxIGdhbW1hIC0xNjAuNSAtPiAtNS4yNTU1NDY0NDcwMDc4MjkzZS0yODYKK2dhbTAxMjIgZ2FtbWEgLTE3MC41IC0+IC0zLjMxMjczOTUyMTUzODYwNzRlLTMwOAorZ2FtMDEyMyBnYW1tYSAtMTcxLjUgLT4gMS45MzE2MjY1NDMxNzExOTAyZS0zMTAKK2dhbTAxMjQgZ2FtbWEgLTE3Ni41IC0+IC0xLjE5NTYzODg2MjkzNTgxNjZlLTMyMQorZ2FtMDEyNSBnYW1tYSAtMTc3LjUgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQKK2dhbTAxMjYgZ2FtbWEgLTE3OC41IC0+IC0wLjAKK2dhbTAxMjcgZ2FtbWEgLTE3OS41IC0+IDAuMAorZ2FtMDEyOCBnYW1tYSAtMjAxLjAwMDEgLT4gMC4wCitnYW0wMTI5IGdhbW1hIC0yMDIuOTk5OSAtPiAtMC4wCitnYW0wMTMwIGdhbW1hIC0xMDAwLjUgLT4gLTAuMAorZ2FtMDEzMSBnYW1tYSAtMTAwMDAwMDAwMC4zIC0+IC0wLjAKK2dhbTAxMzIgZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAwLjAKKworLS0gaW5wdXRzIHRoYXQgY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBzdGFuZGFyZCByZWZsZWN0aW9uIGZvcm11bGEsCistLSB0aGFua3MgdG8gbG9zcyBvZiBhY2N1cmFjeSBpbiAxLXgKK2dhbTAxNDAgZ2FtbWEgLTYzLjM0OTA3ODcyOTAyMjk4NSAtPiA0LjE3Nzc5NzE2Nzc3NjE4ODBlLTg4CitnYW0wMTQxIGdhbW1hIC0xMjcuNDUxMTc2MzI5NDMyOTUgLT4gMS4xODMxMTEwODk2MjM2ODEwZS0yMTQKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZXhwbTE6IGV4cCh4KSAtIDEsIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MgZm9yIHNtYWxsIHggLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHNwZWNpYWwgdmFsdWVzCitleHBtMTAwMDAgZXhwbTEgMC4wIC0+IDAuMAorZXhwbTEwMDAxIGV4cG0xIC0wLjAgLT4gLTAuMAorZXhwbTEwMDAyIGV4cG0xIGluZiAtPiBpbmYKK2V4cG0xMDAwMyBleHBtMSAtaW5mIC0+IC0xLjAKK2V4cG0xMDAwNCBleHBtMSBuYW4gLT4gbmFuCisKKy0tIGV4cG0xKHgpIH4geCBmb3IgdGlueSB4CitleHBtMTAwMTAgZXhwbTEgNWUtMzI0IC0+IDVlLTMyNAorZXhwbTEwMDExIGV4cG0xIDFlLTMyMCAtPiAxZS0zMjAKK2V4cG0xMDAxMiBleHBtMSAxZS0zMDAgLT4gMWUtMzAwCitleHBtMTAwMTMgZXhwbTEgMWUtMTUwIC0+IDFlLTE1MAorZXhwbTEwMDE0IGV4cG0xIDFlLTIwIC0+IDFlLTIwCisKK2V4cG0xMDAyMCBleHBtMSAtNWUtMzI0IC0+IC01ZS0zMjQKK2V4cG0xMDAyMSBleHBtMSAtMWUtMzIwIC0+IC0xZS0zMjAKK2V4cG0xMDAyMiBleHBtMSAtMWUtMzAwIC0+IC0xZS0zMDAKK2V4cG0xMDAyMyBleHBtMSAtMWUtMTUwIC0+IC0xZS0xNTAKK2V4cG0xMDAyNCBleHBtMSAtMWUtMjAgLT4gLTFlLTIwCisKKy0tIG1vZGVyYXRlIHNpemVkIHZhbHVlcywgd2hlcmUgZGlyZWN0IGV2YWx1YXRpb24gcnVucyBpbnRvIHRyb3VibGUKK2V4cG0xMDEwMCBleHBtMSAxZS0xMCAtPiAxLjAwMDAwMDAwMDA1MDAwMDBlLTEwCitleHBtMTAxMDEgZXhwbTEgLTkuOTk5OTk5OTk5OTk5OTk5NWUtMDggLT4gLTkuOTk5OTk5NTAwMDAwMDE2M2UtOAorZXhwbTEwMTAyIGV4cG0xIDMuMDAwMDAwMDAwMDAwMDAwMWUtMDUgLT4gMy4wMDAwNDUwMDA0NTAwMDM0ZS01CitleHBtMTAxMDMgZXhwbTEgLTAuMDA3MDAwMDAwMDAwMDAwMDAwMSAtPiAtMC4wMDY5NzU1NTcwNjY3NjQ4OTUxCitleHBtMTAxMDQgZXhwbTEgLTAuMDcxNDk5MjA4NzQwMDk0NjMzIC0+IC0wLjA2OTAwMjk4NTc0NDgyMDI1MAorZXhwbTEwMTA1IGV4cG0xIC0wLjA2MzI5NjAwNDE4MDExNjc5OSAtPiAtMC4wNjEzMzQ0MTYzNzM2MzMwMDkKK2V4cG0xMDEwNiBleHBtMSAwLjAyMzkwOTU0MDM1NTk3NzU2IC0+IDAuMDI0MTk3NjY1MTQzODE5OTQyCitleHBtMTAxMDcgZXhwbTEgMC4wODU2MzczNTI2NDkwNDQ5MDEgLT4gMC4wODk0MTExODQ1ODAzNTc3NjcKK2V4cG0xMDEwOCBleHBtMSAwLjU5NjYxNzQ5NDc0MTEwMDYgLT4gMC44MTU5NjU4ODU5NjUwMTQ4NQorZXhwbTEwMTA5IGV4cG0xIDAuMzAyNDcyMDYyMTIwNzUxMzkgLT4gMC4zNTMxOTk4NzAzNTg0ODY3NworZXhwbTEwMTEwIGV4cG0xIDAuNzQ1NzQ3MjczNzU4ODk1MTYgLT4gMS4xMDgwMTYxMTE2NzM3NDU5CitleHBtMTAxMTEgZXhwbTEgMC45Nzc2NzUxMjkyNjU1NTcxMSAtPiAxLjY1ODI2ODkyMDczNzIxODUKK2V4cG0xMDExMiBleHBtMSAwLjg0NTAxNTQ1NjY3ODc3MTIgLT4gMS4zMjgwMTM3OTc2NTM1ODk3CitleHBtMTAxMTMgZXhwbTEgLTAuMTM5NzkyNjAzMjMxMjUyNjQgLT4gLTAuMTMwNDYxNDQzODEzOTYwNjAKK2V4cG0xMDExNCBleHBtMSAtMC41Mjg5OTMyMjAzOTY0MzI3MSAtPiAtMC40MTA4MDIxMzY0MzY5NTkyMworZXhwbTEwMTE1IGV4cG0xIC0wLjc0MDgzMjYxNDc4OTAwNjMxIC0+IC0wLjUyMzI4MzE3MTI0Nzk3MDk3CitleHBtMTAxMTYgZXhwbTEgLTAuOTM4NDc3NjY5ODQ1NDYwNTUgLT4gLTAuNjA4Nzc3MDQ3MjQwODU5NDYKK2V4cG0xMDExNyBleHBtMSAxMC4wIC0+IDIyMDI1LjQ2NTc5NDgwNjcxOAorZXhwbTEwMTE4IGV4cG0xIDI3LjAgLT4gNTMyMDQ4MjQwNjAwLjc5ODY1CitleHBtMTAxMTkgZXhwbTEgMTIzIC0+IDIuNjE5NTE3MzE4NzQ5MDYyNmUrNTMKK2V4cG0xMDEyMCBleHBtMSAtMTIuMCAtPiAtMC45OTk5OTM4NTU3ODc2NDY2NgorZXhwbTEwMTIxIGV4cG0xIC0zNS4xMDAwMDAwMDAwMDAwMDEgLT4gLTAuOTk5OTk5OTk5OTk5OTk5NDQKKworLS0gZXh0cmVtZSBuZWdhdGl2ZSB2YWx1ZXMKK2V4cG0xMDIwMSBleHBtMSAtMzcuMCAtPiAtMC45OTk5OTk5OTk5OTk5OTk4OQorZXhwbTEwMjAwIGV4cG0xIC0zOC4wIC0+IC0xLjAKK2V4cG0xMDIxMCBleHBtMSAtNzEwLjAgLT4gLTEuMAorLS0gdGhlIGZvcm11bGEgZXhwbTEoeCkgPSAyICogc2luaCh4LzIpICogZXhwKHgvMikgZG9lc24ndCB3b3JrIHNvCistLSB3ZWxsIHdoZW4gZXhwKHgvMikgaXMgc3Vibm9ybWFsIG9yIHVuZGVyZmxvd3MgdG8gemVybzsgY2hlY2sgd2UncmUKKy0tIG5vdCB1c2luZyBpdCEKK2V4cG0xMDIxMSBleHBtMSAtMTQyMC4wIC0+IC0xLjAKK2V4cG0xMDIxMiBleHBtMSAtMTQ1MC4wIC0+IC0xLjAKK2V4cG0xMDIxMyBleHBtMSAtMTUwMC4wIC0+IC0xLjAKK2V4cG0xMDIxNCBleHBtMSAtMWU1MCAtPiAtMS4wCitleHBtMTAyMTUgZXhwbTEgLTEuNzllMzA4IC0+IC0xLjAKKworLS0gZXh0cmVtZSBwb3NpdGl2ZSB2YWx1ZXMKK2V4cG0xMDMwMCBleHBtMSAzMDAgLT4gMS45NDI0MjYzOTUyNDEyNTU4ZSsxMzAKK2V4cG0xMDMwMSBleHBtMSA3MDAgLT4gMS4wMTQyMzIwNTQ3MzUwMDQ1ZSszMDQKKy0tIHRoZSBuZXh0IHRlc3QgKGV4cG0xMDMwMikgaXMgZGlzYWJsZWQgYmVjYXVzZSBpdCBjYXVzZXMgZmFpbHVyZSBvbgorLS0gT1MgWCAxMC40L0ludGVsOiBhcHBhcmVudGx5IGFsbCB2YWx1ZXMgb3ZlciA3MDkuNzggcHJvZHVjZSBhbgorLS0gb3ZlcmZsb3cgb24gdGhhdCBwbGF0Zm9ybS4gIFNlZSBpc3N1ZSAjNzU3NS4KKy0tIGV4cG0xMDMwMiBleHBtMSA3MDkuNzgyNzEyODkzMjgzOTMgLT4gMS43OTc2OTMxMzQ2ODI0MjQwZSszMDgKK2V4cG0xMDMwMyBleHBtMSA3MDkuNzgyNzEyODkzNDg0MDIgLT4gaW5mIG92ZXJmbG93CitleHBtMTAzMDQgZXhwbTEgMTAwMCAtPiBpbmYgb3ZlcmZsb3cKK2V4cG0xMDMwNSBleHBtMSAxZTUwIC0+IGluZiBvdmVyZmxvdworZXhwbTEwMzA2IGV4cG0xIDEuNzllMzA4IC0+IGluZiBvdmVyZmxvdworCistLSB3ZWFrZXIgdmVyc2lvbiBvZiBleHBtMTAzMDIKK2V4cG0xMDMwNyBleHBtMSA3MDkuNSAtPiAxLjM1NDk4NjMxOTMxNDYzMjhlKzMwOApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CmluZGV4IDI0NTRhZjEuLmM5ZTc0YjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTIsMTEgKzIsMTEgQEAKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBjUGlja2xlCiBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBjU3RyaW5nSU8KIGltcG9ydCBwaWNrbGV0b29scwogaW1wb3J0IGNvcHlfcmVnCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQsIGhhdmVfdW5pY29kZSwgVEVTVEZOLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fd2l0aF9sb2NhbGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQsIGhhdmVfdW5pY29kZSwgVEVTVEZOCiAKICMgVGVzdHMgdGhhdCB0cnkgYSBudW1iZXIgb2YgcGlja2xlIHByb3RvY29scyBzaG91bGQgaGF2ZSBhCiAjICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtMTQsNiArMTQsNDIgQEAKIGFzc2VydCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA9PSBjUGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgPT0gMgogcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQogCisjIENvcHkgb2YgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3dpdGhfbG9jYWxlLiBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFB5dGhvbgorIyAyLjQsIHdoaWNoIGRpZG4ndCBpbmNsdWRlIGl0LiBUaGlzIGlzIGFsbCB0byBzdXBwb3J0IHRlc3RfeHBpY2tsZSwgd2hpY2gKKyMgYm91bmNlcyBwaWNrbGVkIG9iamVjdHMgdGhyb3VnaCBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gdGVzdCBiYWNrd2FyZHMKKyMgY29tcGF0aWJpbGl0eS4KK2RlZiBydW5fd2l0aF9sb2NhbGUoY2F0c3RyLCAqbG9jYWxlcyk6CisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIGlubmVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGdldGF0dHIobG9jYWxlLCBjYXRzdHIpCisgICAgICAgICAgICAgICAgb3JpZ19sb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5KQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgaWYgdGhlIHRlc3QgYXV0aG9yIGdpdmVzIHVzIGFuIGludmFsaWQgY2F0ZWdvcnkgc3RyaW5nCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIGNhbm5vdCByZXRyaWV2ZSBvcmlnaW5hbCBsb2NhbGUsIHNvIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICBsb2NhbGUgPSBvcmlnX2xvY2FsZSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxvYyBpbiBsb2NhbGVzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2MpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgbm93IHJ1biB0aGUgZnVuY3Rpb24sIHJlc2V0dGluZyB0aGUgbG9jYWxlIG9uIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2RzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBsb2NhbGUgYW5kIG9yaWdfbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBvcmlnX2xvY2FsZSkKKyAgICAgICAgaW5uZXIuZnVuY19uYW1lID0gZnVuYy5mdW5jX25hbWUKKyAgICAgICAgaW5uZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworICAgICAgICByZXR1cm4gaW5uZXIKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKIAogIyBSZXR1cm4gVHJ1ZSBpZiBvcGNvZGUgY29kZSBhcHBlYXJzIGluIHRoZSBwaWNrbGUsIGVsc2UgRmFsc2UuCiBkZWYgb3Bjb2RlX2luX3BpY2tsZShjb2RlLCBwaWNrbGUpOgpAQCAtNDEwLDEyICs0NDYsMTEgQEAKICAgICAjIGlzIGEgbXlzdGVyeS4gIGNQaWNrbGUgYWxzbyBzdXBwcmVzc2VzIFBVVCBmb3Igb2JqZWN0cyB3aXRoIGEgcmVmY291bnQKICAgICAjIG9mIDEuCiAgICAgZGVmIGRvbnRfdGVzdF9kaXNhc3NlbWJseShzZWxmKToKLSAgICAgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiAgICAgICAgIGZyb20gcGlja2xldG9vbHMgaW1wb3J0IGRpcwogCiAgICAgICAgIGZvciBwcm90bywgZXhwZWN0ZWQgaW4gKDAsIERBVEEwX0RJUyksICgxLCBEQVRBMV9ESVMpOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoc2VsZi5fdGVzdGRhdGEsIHByb3RvKQotICAgICAgICAgICAgZmlsZWxpa2UgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBmaWxlbGlrZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgICBkaXMocywgb3V0PWZpbGVsaWtlKQogICAgICAgICAgICAgZ290ID0gZmlsZWxpa2UuZ2V0dmFsdWUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQpAQCAtNDI3LDcgKzQ2Miw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHhbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdKQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3R1cGxlKHNlbGYpOgogICAgICAgICB0ID0gKFtdLCkKQEAgLTQzNyw3ICs0NzIsNyBAQAogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeFswXSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyB4WzBdWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXVswXSkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9kaWN0KHNlbGYpOgogICAgICAgICBkID0ge30KQEAgLTQ0Niw3ICs0ODEsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmtleXMoKSwgWzFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHhbMV0gaXMgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzFdIGlzIHgpCiAKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfaW5zdChzZWxmKToKICAgICAgICAgaSA9IEMoKQpAQCAtNDU1LDcgKzQ5MCw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhpLCAyKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHgpLCBkaXIoaSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeC5hdHRyIGlzIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5hdHRyIGlzIHgpCiAKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfbXVsdGkoc2VsZik6CiAgICAgICAgIGwgPSBbXQpAQCAtNDY5LDcgKzUwNCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHhbMF0pLCBkaXIoaSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbMF0uYXR0ci5rZXlzKCksIFsxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4WzBdLmF0dHJbMV0gaXMgeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdLmF0dHJbMV0gaXMgeCkKIAogICAgIGRlZiB0ZXN0X2dhcnlwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmVycm9yLCBzZWxmLmxvYWRzLCAnZ2FyeXAnKQpAQCAtNjEwLDcgKzY0NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZGV0YWlsOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihkZXRhaWwpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBiYWQgcHJvdG9jb2wgbnVtYmVyIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQpAQCAtNjgyLDcgKzcxNyw3IEBACiAgICAgICAgICAgICBmb3IgeCBpbiBOb25lLCBGYWxzZSwgVHJ1ZToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHksIChwcm90bywgeCwgcywgeSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSwgKHByb3RvLCB4LCBzLCB5KSkKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgeF0KICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQogCkBAIC03MzIsOCArNzY3LDggQEAKIAogICAgICAgICAgICAgIyBEdW1wIHVzaW5nIHByb3RvY29sIDEgZm9yIGNvbXBhcmlzb24uCiAgICAgICAgICAgICBzMSA9IHNlbGYuZHVtcHMoeCwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhfX25hbWVfXyBpbiBzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiTXlMaXN0IiBpbiBzMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oX19uYW1lX18sIHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiTXlMaXN0IiwgczEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSksIEZhbHNlKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMSkKQEAgLTc0Miw4ICs3NzcsOCBAQAogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KICAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKF9fbmFtZV9fIG5vdCBpbiBzMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiTXlMaXN0IiBub3QgaW4gczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKF9fbmFtZV9fLCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIk15TGlzdCIsIHMyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczIpLCBUcnVlKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMikKQEAgLTc4Nyw3ICs4MjIsNyBAQAogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCAwKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobnVtX2FwcGVuZHMgPj0gMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX2FwcGVuZHMgPj0gMikKIAogICAgIGRlZiB0ZXN0X2RpY3RfY2h1bmtpbmcoc2VsZik6CiAgICAgICAgIG4gPSAxMCAgIyB0b28gc21hbGwgdG8gY2h1bmsKQEAgLTgwOSw3ICs4NDQsNyBAQAogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgMCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG51bV9zZXRpdGVtcyA+PSAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fc2V0aXRlbXMgPj0gMikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZV9uZXdvYmooc2VsZik6CiAgICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhTaW1wbGVOZXdPYmopICAjIGF2b2lkIF9faW5pdF9fCkBAIC04MzMsNyArODY4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmJhciwgeS5iYXIpCiAKICAgICBkZWYgdGVzdF9yZWR1Y2Vfb3ZlcnJpZGVzX2RlZmF1bHRfcmVkdWNlX2V4KHNlbGYpOgotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMSwgMjoKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHggPSBSRVhfb25lKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcmVkdWNlX2NhbGxlZCwgMCkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQpAQCAtODQyLDcgKzg3Nyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3JlZHVjZV9jYWxsZWQsIDApCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfZXhfY2FsbGVkKHNlbGYpOgotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMSwgMjoKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHggPSBSRVhfdHdvKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIE5vbmUpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKQEAgLTg1MSw3ICs4ODYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9wcm90bywgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9leF9vdmVycmlkZXNfcmVkdWNlKHNlbGYpOgotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMSwgMjoKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHggPSBSRVhfdGhyZWUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQpAQCAtODYwLDcgKzg5NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3Byb3RvLCBOb25lKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX2V4X2NhbGxzX2Jhc2Uoc2VsZik6Ci0gICAgICAgIGZvciBwcm90byBpbiAwLCAxLCAyOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IFJFWF9mb3VyKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcHJvdG8sIE5vbmUpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKQEAgLTg2OSw3ICs5MDQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9wcm90bywgcHJvdG8pCiAKICAgICBkZWYgdGVzdF9yZWR1Y2VfY2FsbHNfYmFzZShzZWxmKToKLSAgICAgICAgZm9yIHByb3RvIGluIDAsIDEsIDI6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICB4ID0gUkVYX2ZpdmUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9yZWR1Y2VfY2FsbGVkLCAwKQogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCkBAIC04OTAsNyArOTI1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZGljdCwgKCksIE5vbmUsIE5vbmUsIFtdCiAKICAgICAgICAgIyBQcm90b2NvbCAwIGlzIGxlc3Mgc3RyaWN0IGFuZCBhbHNvIGFjY2VwdCBpdGVyYWJsZXMuCi0gICAgICAgIGZvciBwcm90byBpbiAwLCAxLCAyOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoQygpLCBwcm90bykKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHBpY2tsZS5QaWNrbGVFcnJvciwgY1BpY2tsZS5QaWNrbGVFcnJvcik6CkBAIC05MDAsNiArOTM1LDM1IEBACiAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBwaWNrbGUuUGlja2xlRXJyb3IsIGNQaWNrbGUuUGlja2xlRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X21hbnlfcHV0c19hbmRfZ2V0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGNvcnJlY3RseSBkZWFsIHdpdGggbG90cyBvZgorICAgICAgICAjIHB1dHMvZ2V0cy4KKyAgICAgICAga2V5cyA9ICgiYWFhIiArIHN0cihpKSBmb3IgaSBpbiB4cmFuZ2UoMTAwKSkKKyAgICAgICAgbGFyZ2VfZGljdCA9IGRpY3QoKGssIFs0LCA1LCA2XSkgZm9yIGsgaW4ga2V5cykKKyAgICAgICAgb2JqID0gW2RpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCksIGRpY3QobGFyZ2VfZGljdCldCisKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBwcm90b2NvbCAlZDogJXIgIT0gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHByb3RvLCBvYmosIGxvYWRlZCkpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfbmFtZV9pbnRlcm5pbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGF0dHJpYnV0ZSBuYW1lcyBvZiBwaWNrbGVkIG9iamVjdHMgYXJlIGludGVybmVkIHdoZW4KKyAgICAgICAgIyB1bnBpY2tsaW5nLgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgeC5mb28gPSA0MgorICAgICAgICAgICAgeC5iYXIgPSAiaGVsbG8iCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICB4X2tleXMgPSBzb3J0ZWQoeC5fX2RpY3RfXykKKyAgICAgICAgICAgIHlfa2V5cyA9IHNvcnRlZCh5Ll9fZGljdF9fKQorICAgICAgICAgICAgZm9yIHhfa2V5LCB5X2tleSBpbiB6aXAoeF9rZXlzLCB5X2tleXMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeF9rZXksIHlfa2V5KQorCisKICMgVGVzdCBjbGFzc2VzIGZvciByZWR1Y2VfZXgKIAogY2xhc3MgUkVYX29uZShvYmplY3QpOgpAQCAtMTAwMSwxMyArMTA2NSwyMCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKIAorICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9hbmRfZHVtcF90b19maWxlKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBkYXRhID0gWzEyMywge30sIDEyNF0KKyAgICAgICAgc2VsZi5tb2R1bGUuZHVtcChkYXRhLCBzdHJlYW0pCisgICAgICAgIHN0cmVhbS5zZWVrKDApCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubW9kdWxlLmxvYWQoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgZGF0YSkKKwogICAgIGRlZiB0ZXN0X2hpZ2hlc3RfcHJvdG9jb2woc2VsZik6CiAgICAgICAgICMgT2YgY291cnNlIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIEhJR0hFU1RfUFJPVE9DT0wgY2hhbmdlcy4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5ISUdIRVNUX1BST1RPQ09MLCAyKQogCiAgICAgZGVmIHRlc3RfY2FsbGFwaShzZWxmKToKLSAgICAgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi0gICAgICAgIGYgPSBTdHJpbmdJTygpCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICAjIFdpdGggYW5kIHdpdGhvdXQga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAgc2VsZi5tb2R1bGUuZHVtcCgxMjMsIGYsIC0xKQogICAgICAgICBzZWxmLm1vZHVsZS5kdW1wKDEyMywgZmlsZT1mLCBwcm90b2NvbD0tMSkKQEAgLTEwNzMsMyArMTE0NCwxMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoTCwgMSkpLCBMKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaWRfY291bnQsIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkX2NvdW50LCA1KQorCitjbGFzcyBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBwaWNrbGVyX2NsYXNzID0gTm9uZQorICAgIHVucGlja2xlcl9jbGFzcyA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucGlja2xlcl9jbGFzcworICAgICAgICBhc3NlcnQgc2VsZi51bnBpY2tsZXJfY2xhc3MKKworICAgIGRlZiB0ZXN0X2NsZWFyX3BpY2tsZXJfbWVtbyhzZWxmKToKKyAgICAgICAgIyBUbyB0ZXN0IHdoZXRoZXIgY2xlYXJfbWVtbygpIGhhcyBhbnkgZWZmZWN0LCB3ZSBwaWNrbGUgYW4gb2JqZWN0LAorICAgICAgICAjIHRoZW4gcGlja2xlIGl0IGFnYWluIHdpdGhvdXQgY2xlYXJpbmcgdGhlIG1lbW87IHRoZSB0d28gc2VyaWFsaXplZAorICAgICAgICAjIGZvcm1zIHNob3VsZCBiZSBkaWZmZXJlbnQuIElmIHdlIGNsZWFyX21lbW8oKSBhbmQgdGhlbiBwaWNrbGUgdGhlCisgICAgICAgICMgb2JqZWN0IGFnYWluLCB0aGUgdGhpcmQgc2VyaWFsaXplZCBmb3JtIHNob3VsZCBiZSBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICMgZmlyc3Qgb25lIHdlIG9idGFpbmVkLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgICMgUmVzZXQgU3RyaW5nSU8gb2JqZWN0LgorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIHNlY29uZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgIyBSZXNldCB0aGUgUGlja2xlciBhbmQgU3RyaW5nSU8gb2JqZWN0cy4KKyAgICAgICAgcGlja2xlci5jbGVhcl9tZW1vKCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGYudHJ1bmNhdGUoKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICB0aGlyZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaXJzdF9waWNrbGVkLCBzZWNvbmRfcGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9waWNrbGVkLCB0aGlyZF9waWNrbGVkKQorCisgICAgZGVmIHRlc3RfcHJpbWluZ19waWNrbGVyX21lbW8oc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgY2FuIHNldCB0aGUgUGlja2xlcidzIG1lbW8gYXR0cmlidXRlLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwcmltZWQgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcHJpbWVkLm1lbW8gPSBwaWNrbGVyLm1lbW8KKworICAgICAgICBwcmltZWQuZHVtcChkYXRhKQorICAgICAgICBwcmltZWRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmlyc3RfcGlja2xlZCwgcHJpbWVkX3BpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9wcmltaW5nX3VucGlja2xlcl9tZW1vKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGNhbiBzZXQgdGhlIFVucGlja2xlcidzIG1lbW8gYXR0cmlidXRlLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwcmltZWQgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcHJpbWVkLm1lbW8gPSBwaWNrbGVyLm1lbW8KKworICAgICAgICBwcmltZWQuZHVtcChkYXRhKQorICAgICAgICBwcmltZWRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGNTdHJpbmdJTy5TdHJpbmdJTyhmaXJzdF9waWNrbGVkKSkKKyAgICAgICAgdW5waWNrbGVkX2RhdGExID0gdW5waWNrbGVyLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkX2RhdGExLCBkYXRhKQorCisgICAgICAgIHByaW1lZCA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGNTdHJpbmdJTy5TdHJpbmdJTyhwcmltZWRfcGlja2xlZCkpCisgICAgICAgIHByaW1lZC5tZW1vID0gdW5waWNrbGVyLm1lbW8KKyAgICAgICAgdW5waWNrbGVkX2RhdGEyID0gcHJpbWVkLmxvYWQoKQorCisgICAgICAgIHByaW1lZC5tZW1vLmNsZWFyKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZF9kYXRhMiwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVucGlja2xlZF9kYXRhMiBpcyB1bnBpY2tsZWRfZGF0YTEpCisKKyAgICBkZWYgdGVzdF9yZXVzaW5nX3VucGlja2xlcl9vYmplY3RzKHNlbGYpOgorICAgICAgICBkYXRhMSA9IFsiYWJjZGVmZyIsICJhYmNkZWZnIiwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKKyAgICAgICAgcGlja2xlZDEgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBkYXRhMiA9IFsiYWJjZGVmZyIsIDQ0LCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEyKQorICAgICAgICBwaWNrbGVkMiA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlKHBpY2tsZWQxKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKKworICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgIGYud3JpdGUocGlja2xlZDIpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGEyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVncnRlc3QucHkgYi9MaWIvdGVzdC9yZWdydGVzdC5weQppbmRleCA5MjBkNTQ1Li5iMWZkM2JiIDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZWdydGVzdC5weQorKysgYi9MaWIvdGVzdC9yZWdydGVzdC5weQpAQCAtMSw0OSArMSw4MCBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbgogCi0iIiJSZWdyZXNzaW9uIHRlc3QuCisiIiIKK1VzYWdlOgogCi1UaGlzIHdpbGwgZmluZCBhbGwgbW9kdWxlcyB3aG9zZSBuYW1lIGlzICJ0ZXN0XyoiIGluIHRoZSB0ZXN0Ci1kaXJlY3RvcnksIGFuZCBydW4gdGhlbS4gIFZhcmlvdXMgY29tbWFuZCBsaW5lIG9wdGlvbnMgcHJvdmlkZQotYWRkaXRpb25hbCBmYWNpbGl0aWVzLgorcHl0aG9uIC1tIHRlc3QucmVncnRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCitweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KIAotQ29tbWFuZCBsaW5lIG9wdGlvbnM6CiAKLS12OiB2ZXJib3NlICAgIC0tIHJ1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0Ci0tdzogdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQotLXE6IHF1aWV0ICAgICAgLS0gZG9uJ3QgcHJpbnQgYW55dGhpbmcgZXhjZXB0IGlmIGEgdGVzdCBmYWlscwotLXg6IGV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKLS1zOiBzaW5nbGUgICAgIC0tIHJ1biBvbmx5IGEgc2luZ2xlIHRlc3QgKHNlZSBiZWxvdykKLS1TOiBzbG93ICAgICAgIC0tIHByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzCi0tcjogcmFuZG9tICAgICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIKLS1mOiBmcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCi0tbDogZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKLS11OiB1c2UgICAgICAgIC0tIHNwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgdG8gcnVuCi0taDogaGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKLS10OiB0aHJlc2hvbGQgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChOKQotLVQ6IGNvdmVyYWdlICAgLS0gdHVybiBvbiBjb2RlIGNvdmVyYWdlIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKLS1EOiBjb3ZlcmRpciAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0Ci0tTjogbm9jb3ZlcmRpciAtLSBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMKLS1MOiBydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0Ci0tUjogaHVudHJsZWFrcyAtLSBzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsIHYuIHNsb3cpCi0tTTogbWVtbGltaXQgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCitJZiBubyBhcmd1bWVudHMgb3Igb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGZpbmRzIGFsbCBmaWxlcyBtYXRjaGluZwordGhlIHBhdHRlcm4gInRlc3RfKiIgaW4gdGhlIExpYi90ZXN0IHN1YmRpcmVjdG9yeSBhbmQgcnVucwordGhlbSBpbiBhbHBoYWJldGljYWwgb3JkZXIgKGJ1dCBzZWUgLU0gYW5kIC11LCBiZWxvdywgZm9yIGV4Y2VwdGlvbnMpLgogCi1JZiBub24tb3B0aW9uIGFyZ3VtZW50cyBhcmUgcHJlc2VudCwgdGhleSBhcmUgbmFtZXMgZm9yIHRlc3RzIHRvIHJ1biwKLXVubGVzcyAteCBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZSB0aGV5IGFyZSBuYW1lcyBmb3IgdGVzdHMgbm90IHRvIHJ1bi4KLUlmIG5vIHRlc3QgbmFtZXMgYXJlIGdpdmVuLCBhbGwgdGVzdHMgYXJlIHJ1bi4KK0ZvciBtb3JlIHJpZ29yb3VzIHRlc3RpbmcsIGl0IGlzIHVzZWZ1bCB0byB1c2UgdGhlIGZvbGxvd2luZworY29tbWFuZCBsaW5lOgogCi0tVCB0dXJucyBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgd2l0aCB0aGUgdHJhY2UgbW9kdWxlLgorcHl0aG9uIC1FIC10dCAtV2QgLTMgLW0gdGVzdC5yZWdydGVzdCBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgLi4uXQogCi0tRCBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0LgogCi0tTiBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMuCitPcHRpb25zOgogCi0tcyBtZWFucyB0byBydW4gb25seSBhIHNpbmdsZSB0ZXN0IGFuZCBleGl0LiAgVGhpcyBpcyB1c2VmdWwgd2hlbgotZG9pbmcgbWVtb3J5IGFuYWx5c2lzIG9uIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgKHdoaWNoIHRlbmQgdG8gY29uc3VtZQotdG9vIG1hbnkgcmVzb3VyY2VzIHRvIHJ1biB0aGUgZnVsbCByZWdyZXNzaW9uIHRlc3Qgbm9uLXN0b3ApLiAgVGhlCi1maWxlIC90bXAvcHluZXh0dGVzdCBpcyByZWFkIHRvIGZpbmQgdGhlIG5leHQgdGVzdCB0byBydW4uICBJZiB0aGlzCi1maWxlIGlzIG1pc3NpbmcsIHRoZSBmaXJzdCB0ZXN0XyoucHkgZmlsZSBpbiB0ZXN0ZGlyIG9yIG9uIHRoZSBjb21tYW5kCi1saW5lIGlzIHVzZWQuICAoYWN0dWFsbHkgdGVtcGZpbGUuZ2V0dGVtcGRpcigpIGlzIHVzZWQgaW5zdGVhZCBvZgotL3RtcCkuCistaC8tLWhlbHAgICAgICAgLS0gcHJpbnQgdGhpcyB0ZXh0IGFuZCBleGl0CisKK1ZlcmJvc2l0eQorCistdi8tLXZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKKy13Ly0tdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQorLVcvLS12ZXJib3NlMyAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIGltbWVkaWF0ZWx5CistcS8tLXF1aWV0ICAgICAgLS0gbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsCistUy8tLXNsb3cgICAgICAgLS0gcHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMKKyAgIC0taGVhZGVyICAgICAtLSBwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvCisKK1NlbGVjdGluZyB0ZXN0cworCistci8tLXJhbmRvbSAgICAgLS0gcmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyIChzZWUgYmVsb3cpCisgICAtLXJhbmRzZWVkICAgLS0gcGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzIHJhbmRvbSBydW4KKy1mLy0tZnJvbWZpbGUgICAtLSByZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZSAoc2VlIGJlbG93KQorLXgvLS1leGNsdWRlICAgIC0tIGFyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqCistcy8tLXNpbmdsZSAgICAgLS0gc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cyAoc2VlIGJlbG93KQorLXUvLS11c2UgUkVTMSxSRVMyLC4uLgorICAgICAgICAgICAgICAgIC0tIHNwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgdG8gcnVuCistTS8tLW1lbWxpbWl0IExJTUlUCisgICAgICAgICAgICAgICAgLS0gcnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cworCitTcGVjaWFsIHJ1bnMKKworLWwvLS1maW5kbGVha3MgIC0tIGlmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeQorLUwvLS1ydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0CistUi8tLWh1bnRybGVha3MgUlVOQ09VTlRTCisgICAgICAgICAgICAgICAgLS0gc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCB2LiBzbG93KQorLWovLS1tdWx0aXByb2Nlc3MgUFJPQ0VTU0VTCisgICAgICAgICAgICAgICAgLS0gcnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZQorLVQvLS1jb3ZlcmFnZSAgIC0tIHR1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKKy1ELy0tY292ZXJkaXIgRElSRUNUT1JZCisgICAgICAgICAgICAgICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKKy1OLy0tbm9jb3ZlcmRpciAtLSBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMKKy10Ly0tdGhyZXNob2xkIFRIUkVTSE9MRAorICAgICAgICAgICAgICAgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpCistRi8tLWZvcmV2ZXIgICAgLS0gcnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiBlcnJvciBoYXBwZW5zCisKKworQWRkaXRpb25hbCBPcHRpb24gRGV0YWlsczoKKworLXIgcmFuZG9taXplcyB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4gWW91IGNhbiB1c2UgLS1yYW5kc2VlZD1pbnQgdG8gcHJvdmlkZSBhCitpbnQgc2VlZCB2YWx1ZSBmb3IgdGhlIHJhbmRvbWl6ZXI7IHRoaXMgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyB0cm91Ymxlc29tZQordGVzdCBvcmRlcnMuCisKKy1zIE9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHJlZ3J0ZXN0IHVzaW5nIC1zLCB0aGUgZmlyc3QgdGVzdCBmaWxlIGZvdW5kCitvciB0aGUgZmlyc3QgdGVzdCBmaWxlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcnVuLCBhbmQgdGhlIG5hbWUgb2YKK3RoZSBuZXh0IHRlc3QgaXMgcmVjb3JkZWQgaW4gYSBmaWxlIG5hbWVkIHB5bmV4dHRlc3QuICBJZiBydW4gZnJvbSB0aGUKK1B5dGhvbiBidWlsZCBkaXJlY3RvcnksIHB5bmV4dHRlc3QgaXMgbG9jYXRlZCBpbiB0aGUgJ2J1aWxkJyBzdWJkaXJlY3RvcnksCitvdGhlcndpc2UgaXQgaXMgbG9jYXRlZCBpbiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkuICBPbiBzdWJzZXF1ZW50IHJ1bnMsCit0aGUgdGVzdCBpbiBweW5leHR0ZXN0IGlzIHJ1biwgYW5kIHRoZSBuZXh0IHRlc3QgaXMgd3JpdHRlbiB0byBweW5leHR0ZXN0LgorV2hlbiB0aGUgbGFzdCB0ZXN0IGhhcyBiZWVuIHJ1biwgcHluZXh0dGVzdCBpcyBkZWxldGVkLiAgSW4gdGhpcyB3YXkgaXQKK2lzIHBvc3NpYmxlIHRvIHNpbmdsZSBzdGVwIHRocm91Z2ggdGhlIHRlc3QgZmlsZXMuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCitkb2luZyBtZW1vcnkgYW5hbHlzaXMgb24gdGhlIFB5dGhvbiBpbnRlcnByZXRlciwgd2hpY2ggcHJvY2VzcyB0ZW5kcyB0bworY29uc3VtZSB0b28gbWFueSByZXNvdXJjZXMgdG8gcnVuIHRoZSBmdWxsIHJlZ3Jlc3Npb24gdGVzdCBub24tc3RvcC4KIAogLWYgcmVhZHMgdGhlIG5hbWVzIG9mIHRlc3RzIGZyb20gdGhlIGZpbGUgZ2l2ZW4gYXMgZidzIGFyZ3VtZW50LCBvbmUKIG9yIG1vcmUgdGVzdCBuYW1lcyBwZXIgbGluZS4gIFdoaXRlc3BhY2UgaXMgaWdub3JlZC4gIEJsYW5rIGxpbmVzIGFuZApAQCAtNjAsNyArOTEsNyBAQAogdGVzdCBpcyBydW4gdG8gbGV0IGdldHRvdGFscmVmY291bnQgc2V0dGxlIGRvd24sICdydW4nIGlzIHRoZSBudW1iZXIKIG9mIHRpbWVzIGZ1cnRoZXIgaXQgaXMgcnVuIGFuZCAnZm5hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoZQogcmVwb3J0cyBhcmUgd3JpdHRlbiB0by4gIFRoZXNlIHBhcmFtZXRlcnMgYWxsIGhhdmUgZGVmYXVsdHMgKDUsIDQgYW5kCi0icmVmbG9nLnR4dCIgcmVzcGVjdGl2ZWx5KSwgc28gdGhlIG1pbmltYWwgaW52b2NhdGlvbiBpcyAnLVIgOjonLgorInJlZmxvZy50eHQiIHJlc3BlY3RpdmVseSksIGFuZCB0aGUgbWluaW1hbCBpbnZvY2F0aW9uIGlzICctUiA6Jy4KIAogLU0gcnVucyB0ZXN0cyB0aGF0IHJlcXVpcmUgYW4gZXhvcmJpdGFudCBhbW91bnQgb2YgbWVtb3J5LiBUaGVzZSB0ZXN0cwogdHlwaWNhbGx5IHRyeSB0byBhc2NlcnRhaW4gY29udGFpbmVycyBrZWVwIHdvcmtpbmcgd2hlbiBjb250YWluaW5nIG1vcmUgdGhhbgpAQCAtOTEsOCArMTIyLDYgQEAKICAgICBjdXJzZXMgLSAgICBUZXN0cyB0aGF0IHVzZSBjdXJzZXMgYW5kIHdpbGwgbW9kaWZ5IHRoZSB0ZXJtaW5hbCdzCiAgICAgICAgICAgICAgICAgc3RhdGUgYW5kIG91dHB1dCBtb2Rlcy4KIAotICAgIGxpYjJ0bzMgLSAgIFJ1biB0aGUgdGVzdHMgZm9yIDJ0bzMgKFRoZXkgdGFrZSBhIHdoaWxlLikKLQogICAgIGxhcmdlZmlsZSAtIEl0IGlzIG9rYXkgdG8gcnVuIHNvbWUgdGVzdCB0aGF0IG1heSBjcmVhdGUgaHVnZQogICAgICAgICAgICAgICAgIGZpbGVzLiAgVGhlc2UgdGVzdHMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIG1heQogICAgICAgICAgICAgICAgIGNvbnN1bWUgPjJHQiBvZiBkaXNrIHNwYWNlIHRlbXBvcmFyaWx5LgpAQCAtMTA2LDIzICsxMzUsMjYgQEAKICAgICBkZWNpbWFsIC0gICBUZXN0IHRoZSBkZWNpbWFsIG1vZHVsZSBhZ2FpbnN0IGEgbGFyZ2Ugc3VpdGUgdGhhdAogICAgICAgICAgICAgICAgIHZlcmlmaWVzIGNvbXBsaWFuY2Ugd2l0aCBzdGFuZGFyZHMuCiAKLSAgICBjb21waWxlciAtICBUZXN0IHRoZSBjb21waWxlciBwYWNrYWdlIGJ5IGNvbXBpbGluZyBhbGwgdGhlIHNvdXJjZQotICAgICAgICAgICAgICAgIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCB0ZXN0IHN1aXRlLiAgVGhpcyB0YWtlcwotICAgICAgICAgICAgICAgIGEgbG9uZyB0aW1lLiAgRW5hYmxpbmcgdGhpcyByZXNvdXJjZSBhbHNvIGFsbG93cwotICAgICAgICAgICAgICAgIHRlc3RfdG9rZW5pemUgdG8gdmVyaWZ5IHJvdW5kLXRyaXAgbGV4aW5nIG9uIGV2ZXJ5Ci0gICAgICAgICAgICAgICAgZmlsZSBpbiB0aGUgdGVzdCBsaWJyYXJ5LgorICAgIGNwdSAtICAgICAgIFVzZWQgZm9yIGNlcnRhaW4gQ1BVLWhlYXZ5IHRlc3RzLgogCiAgICAgc3VicHJvY2VzcyAgUnVuIGFsbCB0ZXN0cyBmb3IgdGhlIHN1YnByb2Nlc3MgbW9kdWxlLgogCiAgICAgdXJsZmV0Y2ggLSAgSXQgaXMgb2theSB0byBkb3dubG9hZCBmaWxlcyByZXF1aXJlZCBvbiB0ZXN0aW5nLgogCisgICAgZ3VpIC0gICAgICAgUnVuIHRlc3RzIHRoYXQgcmVxdWlyZSBhIHJ1bm5pbmcgR1VJLgorCisgICAgeHBpY2tsZSAtICAgVGVzdCBwaWNrbGUgYW5kIGNQaWNrbGUgYWdhaW5zdCBQeXRob24gMi40LCAyLjUgYW5kIDIuNiB0bworICAgICAgICAgICAgICAgIHRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZXNlIHRlc3RzIHRha2UgYSBsb25nIHRpbWUKKyAgICAgICAgICAgICAgICB0byBydW4uCisKIFRvIGVuYWJsZSBhbGwgcmVzb3VyY2VzIGV4Y2VwdCBvbmUsIHVzZSAnLXVhbGwsLTxyZXNvdXJjZT4nLiAgRm9yCiBleGFtcGxlLCB0byBydW4gYWxsIHRoZSB0ZXN0cyBleGNlcHQgZm9yIHRoZSBic2RkYiB0ZXN0cywgZ2l2ZSB0aGUKIG9wdGlvbiAnLXVhbGwsLWJzZGRiJy4KICIiIgogCi1pbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBnZXRvcHQKK2ltcG9ydCBqc29uCiBpbXBvcnQgb3MKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQpAQCAtMTMwLDI4ICsxNjIsMjkgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgd2FybmluZ3MKLSMga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgYXNjaWkgbW9kdWxlIHRvIHdvcmthcm91bmQgIzcxNDAgYnVnCi0jIChzZWUgaXNzdWUgIzcwMjcpCi1pbXBvcnQgZW5jb2RpbmdzLmFzY2lpCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IGltcAoraW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc3lzY29uZmlnCiAKLSMgSSBzZWUgbm8gb3RoZXIgd2F5IHRvIHN1cHByZXNzIHRoZXNlIHdhcm5pbmdzOwotIyBwdXR0aW5nIHRoZW0gaW4gdGVzdF9ncmFtbWFyLnB5IGhhcyBubyBlZmZlY3Q6Ci13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImhleC9vY3QgY29uc3RhbnRzIiwgRnV0dXJlV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICIuKnRlc3QudGVzdF9ncmFtbWFyJCIpCi1pZiBzeXMubWF4aW50ID4gMHg3ZmZmZmZmZjoKLSAgICAjIEFsc28gc3VwcHJlc3MgdGhlbSBpbiA8c3RyaW5nPiwgYmVjYXVzZSBmb3IgNjQtYml0IHBsYXRmb3JtcywKLSAgICAjIHRoYXQncyB3aGVyZSB0ZXN0X2dyYW1tYXIucHkgaGlkZXMgdGhlbS4KLSAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImhleC9vY3QgY29uc3RhbnRzIiwgRnV0dXJlV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN0cmluZz4iKQogCi0jIElnbm9yZSBJbXBvcnRXYXJuaW5ncyB0aGF0IG9ubHkgb2NjdXIgaW4gdGhlIHNvdXJjZSB0cmVlLAotIyAoYmVjYXVzZSBvZiBtb2R1bGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBzb3VyY2UtZGlyZWN0b3JpZXMgaW4gTW9kdWxlcy8pCi1mb3IgbW9kIGluICgiY3R5cGVzIiwgImd6aXAiLCAiemlwZmlsZSIsICJ0YXJmaWxlIiwgImVuY29kaW5ncy56bGliX2NvZGVjIiwKLSAgICAgICAgICAgICJ0ZXN0LnRlc3RfemlwaW1wb3J0IiwgInRlc3QudGVzdF96bGliIiwgInRlc3QudGVzdF96aXBmaWxlIiwKLSAgICAgICAgICAgICJ0ZXN0LnRlc3RfY29kZWNzIiwgInRlc3Quc3RyaW5nX3Rlc3RzIik6Ci0gICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MobW9kdWxlPSIuKiVzJCIgJSAobW9kLCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJpZ25vcmUiLCBjYXRlZ29yeT1JbXBvcnRXYXJuaW5nKQorIyBTb21lIHRpbWVzIF9fcGF0aF9fIGFuZCBfX2ZpbGVfXyBhcmUgbm90IGFic29sdXRlIChlLmcuIHdoaWxlIHJ1bm5pbmcgZnJvbQorIyBMaWIvKSBhbmQsIGlmIHdlIGNoYW5nZSB0aGUgQ1dEIHRvIHJ1biB0aGUgdGVzdHMgaW4gYSB0ZW1wb3JhcnkgZGlyLCBzb21lCisjIGltcG9ydHMgbWlnaHQgZmFpbC4gIFRoaXMgYWZmZWN0cyBvbmx5IHRoZSBtb2R1bGVzIGltcG9ydGVkIGJlZm9yZSBvcy5jaGRpcigpLgorIyBUaGVzZSBtb2R1bGVzIGFyZSBzZWFyY2hlZCBmaXJzdCBpbiBzeXMucGF0aFswXSAoc28gJycgLS0gdGhlIENXRCkgYW5kIGlmCisjIHRoZXkgYXJlIGZvdW5kIGluIHRoZSBDV0QgdGhlaXIgX19maWxlX18gYW5kIF9fcGF0aF9fIHdpbGwgYmUgcmVsYXRpdmUgKHRoaXMKKyMgaGFwcGVucyBiZWZvcmUgdGhlIGNoZGlyKS4gIEFsbCB0aGUgbW9kdWxlcyBpbXBvcnRlZCBhZnRlciB0aGUgY2hkaXIsIGFyZQorIyBub3QgZm91bmQgaW4gdGhlIENXRCwgYW5kIHNpbmNlIHRoZSBvdGhlciBwYXRocyBpbiBzeXMucGF0aFsxOl0gYXJlIGFic29sdXRlCisjIChzaXRlLnB5IGFic29sdXRpemUgdGhlbSksIHRoZSBfX2ZpbGVfXyBhbmQgX19wYXRoX18gd2lsbCBiZSBhYnNvbHV0ZSB0b28uCisjIFRoZXJlZm9yZSBpdCBpcyBuZWNlc3NhcnkgdG8gYWJzb2x1dGl6ZSBtYW51YWxseSB0aGUgX19maWxlX18gYW5kIF9fcGF0aF9fIG9mCisjIHRoZSBwYWNrYWdlcyB0byBwcmV2ZW50IGxhdGVyIGltcG9ydHMgdG8gZmFpbCB3aGVuIHRoZSBDV0QgaXMgZGlmZmVyZW50LgorZm9yIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVydmFsdWVzKCk6CisgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbb3MucGF0aC5hYnNwYXRoKHBhdGgpIGZvciBwYXRoIGluIG1vZHVsZS5fX3BhdGhfX10KKyAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJyk6CisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IG9zLnBhdGguYWJzcGF0aChtb2R1bGUuX19maWxlX18pCisKIAogIyBNYWNPU1ggKGEuay5hLiBEYXJ3aW4pIGhhcyBhIGRlZmF1bHQgc3RhY2sgc2l6ZSB0aGF0IGlzIHRvbyBzbWFsbAogIyBmb3IgZGVlcGx5IHJlY3Vyc2l2ZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2Ugc2VlIHRoaXMgYXMgY3Jhc2hlcyBpbgpAQCAtMTY5LDEwICsyMDIsMjEgQEAKICAgICAgICAgbmV3c29mdCA9IG1pbihoYXJkLCBtYXgoc29mdCwgMTAyNCoyMDQ4KSkKICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9TVEFDSywgKG5ld3NvZnQsIGhhcmQpKQogCisjIFRlc3QgcmVzdWx0IGNvbnN0YW50cy4KK1BBU1NFRCA9IDEKK0ZBSUxFRCA9IDAKK0VOVl9DSEFOR0VEID0gLTEKK1NLSVBQRUQgPSAtMgorUkVTT1VSQ0VfREVOSUVEID0gLTMKK0lOVEVSUlVQVEVEID0gLTQKKwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogUkVTT1VSQ0VfTkFNRVMgPSAoJ2F1ZGlvJywgJ2N1cnNlcycsICdsYXJnZWZpbGUnLCAnbmV0d29yaycsICdic2RkYicsCi0gICAgICAgICAgICAgICAgICAnZGVjaW1hbCcsICdjb21waWxlcicsICdzdWJwcm9jZXNzJywgJ3VybGZldGNoJykKKyAgICAgICAgICAgICAgICAgICdkZWNpbWFsJywgJ2NwdScsICdzdWJwcm9jZXNzJywgJ3VybGZldGNoJywgJ2d1aScsCisgICAgICAgICAgICAgICAgICAneHBpY2tsZScpCisKK1RFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKQogCiAKIGRlZiB1c2FnZShjb2RlLCBtc2c9JycpOgpAQCAtMTg0LDcgKzIyOCw5IEBACiBkZWYgbWFpbih0ZXN0cz1Ob25lLCB0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCiAgICAgICAgICBleGNsdWRlPUZhbHNlLCBzaW5nbGU9RmFsc2UsIHJhbmRvbWl6ZT1GYWxzZSwgZnJvbWZpbGU9Tm9uZSwKICAgICAgICAgIGZpbmRsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLCB0cmFjZT1GYWxzZSwgY292ZXJkaXI9J2NvdmVyYWdlJywKLSAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSk6CisgICAgICAgICBydW5sZWFrcz1GYWxzZSwgaHVudHJsZWFrcz1GYWxzZSwgdmVyYm9zZTI9RmFsc2UsIHByaW50X3Nsb3c9RmFsc2UsCisgICAgICAgICByYW5kb21fc2VlZD1Ob25lLCB1c2VfbXA9Tm9uZSwgdmVyYm9zZTM9RmFsc2UsIGZvcmV2ZXI9RmFsc2UsCisgICAgICAgICBoZWFkZXI9RmFsc2UpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yMDIsMjQgKzI0OCwyNiBAQAogICAgIGZpbGVzIGJlZ2lubmluZyB3aXRoIHRlc3RfIHdpbGwgYmUgdXNlZC4KIAogICAgIFRoZSBvdGhlciBkZWZhdWx0IGFyZ3VtZW50cyAodmVyYm9zZSwgcXVpZXQsIGV4Y2x1ZGUsCi0gICAgc2luZ2xlLCByYW5kb21pemUsIGZpbmRsZWFrcywgdXNlX3Jlc291cmNlcywgdHJhY2UsIGNvdmVyZGlyLCBhbmQKLSAgICBwcmludF9zbG93KSBhbGxvdyBwcm9ncmFtbWVycyBjYWxsaW5nIG1haW4oKSBkaXJlY3RseSB0byBzZXQgdGhlCi0gICAgdmFsdWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2V0IGJ5IGZsYWdzIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgc2luZ2xlLCByYW5kb21pemUsIGZpbmRsZWFrcywgdXNlX3Jlc291cmNlcywgdHJhY2UsIGNvdmVyZGlyLAorICAgIHByaW50X3Nsb3csIGFuZCByYW5kb21fc2VlZCkgYWxsb3cgcHJvZ3JhbW1lcnMgY2FsbGluZyBtYWluKCkKKyAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncworICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIiIiCiAKICAgICB0ZXN0X3N1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dChzeXMuc3Rkb3V0KQogICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHZxeHNTcmY6bHU6dDpURDpOTFI6d006JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydoZWxwJywgJ3ZlcmJvc2UnLCAncXVpZXQnLCAnZXhjbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9tJywgJ2Zyb21maWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaW5kbGVha3MnLCAndXNlPScsICd0aHJlc2hvbGQ9JywgJ3RyYWNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsICdydW5sZWFrcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVudHJsZWFrcz0nLCAndmVyYm9zZTInLCAnbWVtbGltaXQ9JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2h2cXhzU3JmOmx1OnQ6VEQ6TkxSOkZ3V006ajonLAorICAgICAgICAgICAgWydoZWxwJywgJ3ZlcmJvc2UnLCAndmVyYm9zZTInLCAndmVyYm9zZTMnLCAncXVpZXQnLAorICAgICAgICAgICAgICdleGNsdWRlJywgJ3NpbmdsZScsICdzbG93JywgJ3JhbmRvbScsICdmcm9tZmlsZScsICdmaW5kbGVha3MnLAorICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAndHJhY2UnLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAorICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKKyAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnaGVhZGVyJ10pCiAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgogICAgICAgICB1c2FnZSgyLCBtc2cpCiAKICAgICAjIERlZmF1bHRzCisgICAgaWYgcmFuZG9tX3NlZWQgaXMgTm9uZToKKyAgICAgICAgcmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQogICAgIGlmIHVzZV9yZXNvdXJjZXMgaXMgTm9uZToKICAgICAgICAgdXNlX3Jlc291cmNlcyA9IFtdCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKQEAgLTIyOSw2ICsyNzcsOCBAQAogICAgICAgICAgICAgdmVyYm9zZSArPSAxCiAgICAgICAgIGVsaWYgbyBpbiAoJy13JywgJy0tdmVyYm9zZTInKToKICAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctVycsICctLXZlcmJvc2UzJyk6CisgICAgICAgICAgICB2ZXJib3NlMyA9IFRydWUKICAgICAgICAgZWxpZiBvIGluICgnLXEnLCAnLS1xdWlldCcpOgogICAgICAgICAgICAgcXVpZXQgPSBUcnVlOwogICAgICAgICAgICAgdmVyYm9zZSA9IDAKQEAgLTI0MCw2ICsyOTAsOCBAQAogICAgICAgICAgICAgcHJpbnRfc2xvdyA9IFRydWUKICAgICAgICAgZWxpZiBvIGluICgnLXInLCAnLS1yYW5kb21pemUnKToKICAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKKyAgICAgICAgZWxpZiBvID09ICctLXJhbmRzZWVkJzoKKyAgICAgICAgICAgIHJhbmRvbV9zZWVkID0gaW50KGEpCiAgICAgICAgIGVsaWYgbyBpbiAoJy1mJywgJy0tZnJvbWZpbGUnKToKICAgICAgICAgICAgIGZyb21maWxlID0gYQogICAgICAgICBlbGlmIG8gaW4gKCctbCcsICctLWZpbmRsZWFrcycpOgpAQCAtMjU3LDE5ICszMDksMTkgQEAKICAgICAgICAgICAgIGNvdmVyZGlyID0gTm9uZQogICAgICAgICBlbGlmIG8gaW4gKCctUicsICctLWh1bnRybGVha3MnKToKICAgICAgICAgICAgIGh1bnRybGVha3MgPSBhLnNwbGl0KCc6JykKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSAhPSAzOgorICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpIG5vdCBpbiAoMiwgMyk6CiAgICAgICAgICAgICAgICAgcHJpbnQgYSwgaHVudHJsZWFrcwotICAgICAgICAgICAgICAgIHVzYWdlKDIsICctUiB0YWtlcyB0aHJlZSBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzWzBdKSA9PSAwOgorICAgICAgICAgICAgICAgIHVzYWdlKDIsICctUiB0YWtlcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1swXToKICAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gNQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gaW50KGh1bnRybGVha3NbMF0pCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrc1sxXSkgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzFdOgogICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSA0CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSBpbnQoaHVudHJsZWFrc1sxXSkKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzWzJdKSA9PSAwOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMl0gPSAicmVmbG9nLnR4dCIKKyAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSA9PSAyIG9yIG5vdCBodW50cmxlYWtzWzJdOgorICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMjpdID0gWyJyZWZsb2cudHh0Il0KICAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgogICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnNldF9tZW1saW1pdChhKQogICAgICAgICBlbGlmIG8gaW4gKCctdScsICctLXVzZScpOgpAQCAtMjg5LDE3ICszNDEsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCiAgICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiB1c2VfcmVzb3VyY2VzOgogICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmFwcGVuZChyKQorICAgICAgICBlbGlmIG8gaW4gKCctRicsICctLWZvcmV2ZXInKToKKyAgICAgICAgICAgIGZvcmV2ZXIgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1qJywgJy0tbXVsdGlwcm9jZXNzJyk6CisgICAgICAgICAgICB1c2VfbXAgPSBpbnQoYSkKKyAgICAgICAgZWxpZiBvID09ICctLWhlYWRlcic6CisgICAgICAgICAgICBoZWFkZXIgPSBUcnVlCisgICAgICAgIGVsaWYgbyA9PSAnLS1zbGF2ZWFyZ3MnOgorICAgICAgICAgICAgYXJncywga3dhcmdzID0ganNvbi5sb2FkcyhhKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSU5URVJSVVBURUQsIGUuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICBwcmludCAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCisgICAgICAgICAgICBwcmludCBqc29uLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgiTm8gaGFuZGxlciBmb3Igb3B0aW9uIHswfS4gIFBsZWFzZSAiCisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgiTm8gaGFuZGxlciBmb3Igb3B0aW9uIHt9LiAgUGxlYXNlICIKICAgICAgICAgICAgICAgICAicmVwb3J0IHRoaXMgYXMgYSBidWcgYXQgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4iKS5mb3JtYXQobykKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgaWYgc2luZ2xlIGFuZCBmcm9tZmlsZToKICAgICAgICAgdXNhZ2UoMiwgIi1zIGFuZCAtZiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIHVzZV9tcCBhbmQgdHJhY2U6CisgICAgICAgIHVzYWdlKDIsICItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiB1c2VfbXAgYW5kIGZpbmRsZWFrczoKKyAgICAgICAgdXNhZ2UoMiwgIi1sIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQogCiAgICAgZ29vZCA9IFtdCiAgICAgYmFkID0gW10KICAgICBza2lwcGVkID0gW10KICAgICByZXNvdXJjZV9kZW5pZWRzID0gW10KKyAgICBlbnZpcm9ubWVudF9jaGFuZ2VkID0gW10KKyAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCiAKICAgICBpZiBmaW5kbGVha3M6CiAgICAgICAgIHRyeToKQEAgLTMxNSwxOSArMzg4LDE4IEBACiAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlID0gW10KIAogICAgIGlmIHNpbmdsZToKLSAgICAgICAgZnJvbSB0ZW1wZmlsZSBpbXBvcnQgZ2V0dGVtcGRpcgotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihnZXR0ZW1wZGlyKCksICdweW5leHR0ZXN0JykKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgJ3B5bmV4dHRlc3QnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICAgICAgICAgIG5leHQgPSBmcC5yZWFkKCkuc3RyaXAoKQotICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF0KKyAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCiAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgaWYgZnJvbWZpbGU6CiAgICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZnAgPSBvcGVuKGZyb21maWxlKQorICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5TQVZFRENXRCwgZnJvbWZpbGUpKQogICAgICAgICBmb3IgbGluZSBpbiBmcDoKICAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCiAgICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6CkBAIC0zMzUsNzYgKzQwNywxOTMgQEAKICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgIyBTdHJpcCAucHkgZXh0ZW5zaW9ucy4KLSAgICBpZiBhcmdzOgotICAgICAgICBhcmdzID0gbWFwKHJlbW92ZXB5LCBhcmdzKQotICAgIGlmIHRlc3RzOgotICAgICAgICB0ZXN0cyA9IG1hcChyZW1vdmVweSwgdGVzdHMpCisgICAgcmVtb3ZlcHkoYXJncykKKyAgICByZW1vdmVweSh0ZXN0cykKIAogICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KLSAgICBub3R0ZXN0cyA9IE5PVFRFU1RTWzpdCisgICAgbm90dGVzdHMgPSBOT1RURVNUUy5jb3B5KCkKICAgICBpZiBleGNsdWRlOgogICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKLSAgICAgICAgbm90dGVzdHNbOjBdID0gYXJncworICAgICAgICAgICAgbm90dGVzdHMuYWRkKGFyZykKICAgICAgICAgYXJncyA9IFtdCi0gICAgdGVzdHMgPSB0ZXN0cyBvciBhcmdzIG9yIGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCisKKyAgICAjIEZvciBhIHBhcnRpYWwgcnVuLCB3ZSBkbyBub3QgbmVlZCB0byBjbHV0dGVyIHRoZSBvdXRwdXQuCisgICAgaWYgdmVyYm9zZSBvciBoZWFkZXIgb3Igbm90IChxdWlldCBvciBzaW5nbGUgb3IgdGVzdHMgb3IgYXJncyk6CisgICAgICAgICMgUHJpbnQgYmFzaWMgcGxhdGZvcm0gaW5mb3JtYXRpb24KKyAgICAgICAgcHJpbnQgIj09IiwgcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksIFwKKyAgICAgICAgICAgICAgICAgICAgIiAiLmpvaW4oc3lzLnZlcnNpb24uc3BsaXQoKSkKKyAgICAgICAgcHJpbnQgIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLCBcCisgICAgICAgICAgICAgICAgICAgICAgIiVzLWVuZGlhbiIgJSBzeXMuYnl0ZW9yZGVyCisgICAgICAgIHByaW50ICI9PSAgIiwgb3MuZ2V0Y3dkKCkKKyAgICAgICAgcHJpbnQgIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MKKworICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKyAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIGFyZ3Mgb3IgYWxsdGVzdHMKICAgICBpZiBzaW5nbGU6Ci0gICAgICAgIHRlc3RzID0gdGVzdHNbOjFdCisgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRbOjFdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBhbGx0ZXN0c1thbGx0ZXN0cy5pbmRleChzZWxlY3RlZFswXSkrMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gTm9uZQogICAgIGlmIHJhbmRvbWl6ZToKLSAgICAgICAgcmFuZG9tLnNodWZmbGUodGVzdHMpCisgICAgICAgIHJhbmRvbS5zZWVkKHJhbmRvbV9zZWVkKQorICAgICAgICBwcmludCAiVXNpbmcgcmFuZG9tIHNlZWQiLCByYW5kb21fc2VlZAorICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKICAgICBpZiB0cmFjZToKICAgICAgICAgaW1wb3J0IHRyYWNlCiAgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPUZhbHNlLCBjb3VudD1UcnVlKQorCiAgICAgdGVzdF90aW1lcyA9IFtdCi0gICAgdGVzdF9zdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKICAgICBzYXZlX21vZHVsZXMgPSBzeXMubW9kdWxlcy5rZXlzKCkKLSAgICBmb3IgdGVzdCBpbiB0ZXN0czoKLSAgICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICAgICAgcHJpbnQgdGVzdAotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIGlmIHRyYWNlOgotICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwotICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCi0gICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgdGVzdF90aW1lcywgdGVzdGRpciknLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIHRlc3RfdGltZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RkaXIsIGh1bnRybGVha3MpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgIyBwcmludCBhIG5ld2xpbmUgc2VwYXJhdGUgZnJvbSB0aGUgXkMKLSAgICAgICAgICAgICAgICBwcmludAotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIG9rID4gMDoKLSAgICAgICAgICAgICAgICBnb29kLmFwcGVuZCh0ZXN0KQotICAgICAgICAgICAgZWxpZiBvayA9PSAwOgotICAgICAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKLSAgICAgICAgICAgICAgICBpZiBvayA9PSAtMjoKLSAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfZGVuaWVkcy5hcHBlbmQodGVzdCkKLSAgICAgICAgaWYgZmluZGxlYWtzOgotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgotICAgICAgICAgICAgICAgIHByaW50ICJXYXJuaW5nOiB0ZXN0IGNyZWF0ZWQiLCBsZW4oZ2MuZ2FyYmFnZSksCi0gICAgICAgICAgICAgICAgcHJpbnQgInVuY29sbGVjdGFibGUgb2JqZWN0KHMpLiIKLSAgICAgICAgICAgICAgICAjIG1vdmUgdGhlIHVuY29sbGVjdGFibGUgb2JqZWN0cyBzb21ld2hlcmUgc28gd2UgZG9uJ3Qgc2VlCi0gICAgICAgICAgICAgICAgIyB0aGVtIGFnYWluCi0gICAgICAgICAgICAgICAgZm91bmRfZ2FyYmFnZS5leHRlbmQoZ2MuZ2FyYmFnZSkKLSAgICAgICAgICAgICAgICBkZWwgZ2MuZ2FyYmFnZVs6XQotICAgICAgICAjIFVubG9hZCB0aGUgbmV3bHkgaW1wb3J0ZWQgbW9kdWxlcyAoYmVzdCBlZmZvcnQgZmluYWxpemF0aW9uKQotICAgICAgICBmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLmtleXMoKToKLSAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gc2F2ZV9tb2R1bGVzIGFuZCBtb2R1bGUuc3RhcnRzd2l0aCgidGVzdC4iKToKLSAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKG1vZHVsZSkKIAorICAgIGRlZiBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpOgorICAgICAgICBvaywgdGVzdF90aW1lID0gcmVzdWx0CisgICAgICAgIHRlc3RfdGltZXMuYXBwZW5kKCh0ZXN0X3RpbWUsIHRlc3QpKQorICAgICAgICBpZiBvayA9PSBQQVNTRUQ6CisgICAgICAgICAgICBnb29kLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IEZBSUxFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBFTlZfQ0hBTkdFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIGVudmlyb25tZW50X2NoYW5nZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gU0tJUFBFRDoKKyAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gUkVTT1VSQ0VfREVOSUVEOgorICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCisKKyAgICBpZiBmb3JldmVyOgorICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRlc3RzID0gdGVzdF9mb3JldmVyKCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyA9IGl0ZXIoc2VsZWN0ZWQpCisKKyAgICBpZiB1c2VfbXA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcHJpbnQgIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiCisgICAgICAgICAgICBzeXMuZXhpdCgyKQorICAgICAgICBmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorICAgICAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmc1xdJCIpCisgICAgICAgIG91dHB1dCA9IFF1ZXVlKCkKKyAgICAgICAgZGVmIHRlc3RzX2FuZF9hcmdzKCk6CisgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBhcmdzX3R1cGxlID0gKAorICAgICAgICAgICAgICAgICAgICAodGVzdCwgdmVyYm9zZSwgcXVpZXQpLAorICAgICAgICAgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9aHVudHJsZWFrcywgdXNlX3Jlc291cmNlcz11c2VfcmVzb3VyY2VzKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAodGVzdCwgYXJnc190dXBsZSkKKyAgICAgICAgcGVuZGluZyA9IHRlc3RzX2FuZF9hcmdzKCkKKyAgICAgICAgb3B0X2FyZ3MgPSB0ZXN0X3N1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgYmFzZV9jbWQgPSBbc3lzLmV4ZWN1dGFibGVdICsgb3B0X2FyZ3MgKyBbJy1tJywgJ3Rlc3QucmVncnRlc3QnXQorICAgICAgICBkZWYgd29yaygpOgorICAgICAgICAgICAgIyBBIHdvcmtlciB0aHJlYWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCwgYXJnc190dXBsZSA9IG5leHQocGVuZGluZykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAjIC1FIGlzIG5lZWRlZCBieSBzb21lIHRlc3RzLCBlLmcuIHRlc3RfaW1wb3J0CisgICAgICAgICAgICAgICAgICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhhcmdzX3R1cGxlKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICAgICAgICAgICMgU3RyaXAgbGFzdCByZWZjb3VudCBvdXRwdXQgbGluZSBpZiBpdCBleGlzdHMsIHNpbmNlIGl0CisgICAgICAgICAgICAgICAgICAgICMgY29tZXMgZnJvbSB0aGUgc2h1dGRvd24gb2YgdGhlIGludGVycHJldGVyIGluIHRoZSBzdWJjb21tYW5kLgorICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBkZWJ1Z19vdXRwdXRfcGF0LnN1YigiIiwgc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIF8sIHJlc3VsdCA9IHN0ZG91dC5zdHJpcCgpLnJwYXJ0aXRpb24oIlxuIikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzb24ubG9hZHMocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSB0ZXN0Kydcbicrc3Rkb3V0CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKHRlc3QsIHN0ZG91dC5yc3RyaXAoKSwgc3RkZXJyLnJzdHJpcCgpLCByZXN1bHQpKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKHVzZV9tcCldCisgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisgICAgICAgIGZpbmlzaGVkID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IHVzZV9tcDoKKyAgICAgICAgICAgICAgICB0ZXN0LCBzdGRvdXQsIHN0ZGVyciwgcmVzdWx0ID0gb3V0cHV0LmdldCgpCisgICAgICAgICAgICAgICAgaWYgdGVzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCArPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBwcmludCBzdGRvdXQKKyAgICAgICAgICAgICAgICBpZiBzdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgc3RkZXJyCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0WzBdID09IElOVEVSUlVQVEVEOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVzdWx0WzFdID09ICdLZXlib2FyZEludGVycnVwdCcKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQgICAjIFdoYXQgZWxzZT8KKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgcGVuZGluZy5jbG9zZSgpCisgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBwcmludCB0ZXN0CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBpZiB0cmFjZToKKyAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCisgICAgICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCisgICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlMyBhbmQgcmVzdWx0WzBdID09IEZBSUxFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJSZS1ydW5uaW5nIHRlc3QgJXIgaW4gdmVyYm9zZSBtb2RlIiAlIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBpZiBmaW5kbGVha3M6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgaWYgZ2MuZ2FyYmFnZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIldhcm5pbmc6IHRlc3QgY3JlYXRlZCIsIGxlbihnYy5nYXJiYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgInVuY29sbGVjdGFibGUgb2JqZWN0KHMpLiIKKyAgICAgICAgICAgICAgICAgICAgIyBtb3ZlIHRoZSB1bmNvbGxlY3RhYmxlIG9iamVjdHMgc29tZXdoZXJlIHNvIHdlIGRvbid0IHNlZQorICAgICAgICAgICAgICAgICAgICAjIHRoZW0gYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZ2FyYmFnZS5leHRlbmQoZ2MuZ2FyYmFnZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgICAgICMgVW5sb2FkIHRoZSBuZXdseSBpbXBvcnRlZCBtb2R1bGVzIChiZXN0IGVmZm9ydCBmaW5hbGl6YXRpb24pCisgICAgICAgICAgICBmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHNhdmVfbW9kdWxlcyBhbmQgbW9kdWxlLnN0YXJ0c3dpdGgoInRlc3QuIik6CisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQobW9kdWxlKQorCisgICAgaWYgaW50ZXJydXB0ZWQ6CisgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIGFmdGVyIF5DCisgICAgICAgIHByaW50CisgICAgICAgIHByaW50ICJUZXN0IHN1aXRlIGludGVycnVwdGVkIGJ5IHNpZ25hbCBTSUdJTlQuIgorICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCisgICAgICAgIHByaW50IGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IgorICAgICAgICBwcmludGxpc3Qob21pdHRlZCkKICAgICBpZiBnb29kIGFuZCBub3QgcXVpZXQ6Ci0gICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBsZW4oZ29vZCkgPiAxOgorICAgICAgICBpZiBub3QgYmFkIGFuZCBub3Qgc2tpcHBlZCBhbmQgbm90IGludGVycnVwdGVkIGFuZCBsZW4oZ29vZCkgPiAxOgogICAgICAgICAgICAgcHJpbnQgIkFsbCIsCiAgICAgICAgIHByaW50IGNvdW50KGxlbihnb29kKSwgInRlc3QiKSwgIk9LLiIKICAgICBpZiBwcmludF9zbG93OgpAQCAtNDEzLDggKzYwMiwxNCBAQAogICAgICAgICBmb3IgdGltZSwgdGVzdCBpbiB0ZXN0X3RpbWVzWzoxMF06CiAgICAgICAgICAgICBwcmludCAiJXM6ICUuMWZzIiAlICh0ZXN0LCB0aW1lKQogICAgIGlmIGJhZDoKLSAgICAgICAgcHJpbnQgY291bnQobGVuKGJhZCksICJ0ZXN0IiksICJmYWlsZWQ6IgotICAgICAgICBwcmludGxpc3QoYmFkKQorICAgICAgICBiYWQgPSBzZXQoYmFkKSAtIHNldChlbnZpcm9ubWVudF9jaGFuZ2VkKQorICAgICAgICBpZiBiYWQ6CisgICAgICAgICAgICBwcmludCBjb3VudChsZW4oYmFkKSwgInRlc3QiKSwgImZhaWxlZDoiCisgICAgICAgICAgICBwcmludGxpc3QoYmFkKQorICAgICAgICBpZiBlbnZpcm9ubWVudF9jaGFuZ2VkOgorICAgICAgICAgICAgcHJpbnQgInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBjb3VudChsZW4oZW52aXJvbm1lbnRfY2hhbmdlZCksICJ0ZXN0IikpCisgICAgICAgICAgICBwcmludGxpc3QoZW52aXJvbm1lbnRfY2hhbmdlZCkKICAgICBpZiBza2lwcGVkIGFuZCBub3QgcXVpZXQ6CiAgICAgICAgIHByaW50IGNvdW50KGxlbihza2lwcGVkKSwgInRlc3QiKSwgInNraXBwZWQ6IgogICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKQEAgLTQ0MCw4ICs2MzUsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnZlcmJvc2UgPSBUcnVlCi0gICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCB0ZXN0X3RpbWVzLCB0ZXN0ZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBxdWlldCwgaHVudHJsZWFrcykKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50CkBAIC00NTAsMTYgKzY0NCw5IEBACiAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGlmIHNpbmdsZToKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYWxsdGVzdHMpKToKLSAgICAgICAgICAgIGlmIHRlc3RzWzBdID09IGFsbHRlc3RzW2ldOgotICAgICAgICAgICAgICAgIGlmIGkgPT0gbGVuKGFsbHRlc3RzKSAtIDE6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoYWxsdGVzdHNbaSsxXSArICdcbicpCi0gICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuZXh0X3NpbmdsZV90ZXN0OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKG5leHRfc2luZ2xlX3Rlc3QgKyAnXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQogCkBAIC00NzAsNyArNjU3LDcgQEAKICAgICBpZiBydW5sZWFrczoKICAgICAgICAgb3Muc3lzdGVtKCJsZWFrcyAlZCIgJSBvcy5nZXRwaWQoKSkKIAotICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCkKKyAgICBzeXMuZXhpdChsZW4oYmFkKSA+IDAgb3IgaW50ZXJydXB0ZWQpCiAKIAogU1REVEVTVFMgPSBbCkBAIC00ODMsNjggKzY3MCwxOTEgQEAKICAgICAndGVzdF91bml0dGVzdCcsCiAgICAgJ3Rlc3RfZG9jdGVzdCcsCiAgICAgJ3Rlc3RfZG9jdGVzdDInLAotICAgICMgT24gMi42LCB3aGVuIGEgQyBtb2R1bGUgbGlrZSBkbCBvciBsaW51eGF1ZGlvZGV2IGlzIGltcG9ydGVkIGJ5IHNvbWUKLSAgICAjIHRlc3QsIGEgRGVwcmVjYXRpb25XYXJuaW5nIGlzIHJhaXNlZCwgYnV0IHRlc3RfcHkza3dhcm4gY2FuIG5vdCBmaW5kCi0gICAgIyBpdCBpbiB0aGUgX193YXJuaW5ncmVnaXN0cnlfXyBvZiB0aGUgbW9kdWxlcyBpbiBzeXMubW9kdWxlcy4KLSAgICAjIEMgbW9kdWxlcyByYWlzZSB0aGUgd2FybmluZyBvbmx5IG9uY2UsIGFuZCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0bwotICAgICMgZmluZCB0aGVzZSB3YXJuaW5ncywgdGVzdF9weTNrd2FybiBpcyBleGVjdXRlZCBmaXJzdCB0byBjYXRjaCB0aGVtCi0gICAgIyBiZWZvcmUgdGhlIG90aGVyIG1vZHVsZXMuICBUaGlzIHNob3VsZG4ndCBhZmZlY3QgMi43KwotICAgICd0ZXN0X3B5M2t3YXJuJywKLSAgIF0KK10KIAotTk9UVEVTVFMgPSBbCitOT1RURVNUUyA9IHsKICAgICAndGVzdF9zdXBwb3J0JywKICAgICAndGVzdF9mdXR1cmUxJywKICAgICAndGVzdF9mdXR1cmUyJywKLSAgICBdCit9CiAKIGRlZiBmaW5kdGVzdHModGVzdGRpcj1Ob25lLCBzdGR0ZXN0cz1TVERURVNUUywgbm90dGVzdHM9Tk9UVEVTVFMpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIGFwcGxpY2FibGUgdGVzdCBtb2R1bGVzLiIiIgotICAgIGlmIG5vdCB0ZXN0ZGlyOiB0ZXN0ZGlyID0gZmluZHRlc3RkaXIoKQorICAgIHRlc3RkaXIgPSBmaW5kdGVzdGRpcih0ZXN0ZGlyKQogICAgIG5hbWVzID0gb3MubGlzdGRpcih0ZXN0ZGlyKQogICAgIHRlc3RzID0gW10KKyAgICBvdGhlcnMgPSBzZXQoc3RkdGVzdHMpIHwgbm90dGVzdHMKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgaWYgbmFtZVs6NV0gPT0gInRlc3RfIiBhbmQgbmFtZVstMzpdID09IG9zLmV4dHNlcCsicHkiOgotICAgICAgICAgICAgbW9kbmFtZSA9IG5hbWVbOi0zXQotICAgICAgICAgICAgaWYgbW9kbmFtZSBub3QgaW4gc3RkdGVzdHMgYW5kIG1vZG5hbWUgbm90IGluIG5vdHRlc3RzOgotICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChtb2RuYW1lKQotICAgIHRlc3RzLnNvcnQoKQotICAgIHJldHVybiBzdGR0ZXN0cyArIHRlc3RzCisgICAgICAgIG1vZG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKKyAgICAgICAgaWYgbW9kbmFtZVs6NV0gPT0gInRlc3RfIiBhbmQgZXh0ID09ICIucHkiIGFuZCBtb2RuYW1lIG5vdCBpbiBvdGhlcnM6CisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQobW9kbmFtZSkKKyAgICByZXR1cm4gc3RkdGVzdHMgKyBzb3J0ZWQodGVzdHMpCiAKLWRlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCB0ZXN0X3RpbWVzLAotICAgICAgICAgICAgdGVzdGRpcj1Ob25lLCBodW50cmxlYWtzPUZhbHNlKToKK2RlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lKToKICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KIAogICAgIHRlc3QgLS0gdGhlIG5hbWUgb2YgdGhlIHRlc3QKICAgICB2ZXJib3NlIC0tIGlmIHRydWUsIHByaW50IG1vcmUgbWVzc2FnZXMKICAgICBxdWlldCAtLSBpZiB0cnVlLCBkb24ndCBwcmludCAnc2tpcHBlZCcgbWVzc2FnZXMgKHByb2JhYmx5IHJlZHVuZGFudCkKICAgICB0ZXN0X3RpbWVzIC0tIGEgbGlzdCBvZiAodGltZSwgdGVzdF9uYW1lKSBwYWlycwotICAgIHRlc3RkaXIgLS0gdGVzdCBkaXJlY3RvcnkKICAgICBodW50cmxlYWtzIC0tIHJ1biBtdWx0aXBsZSB0aW1lcyB0byB0ZXN0IGZvciBsZWFrczsgcmVxdWlyZXMgYSBkZWJ1ZwogICAgICAgICAgICAgICAgICAgYnVpbGQ7IGEgdHJpcGxlIGNvcnJlc3BvbmRpbmcgdG8gLVIncyB0aHJlZSBhcmd1bWVudHMKLSAgICBSZXR1cm46Ci0gICAgICAgIC0yICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKLSAgICAgICAgLTEgIHRlc3Qgc2tpcHBlZCBmb3Igc29tZSBvdGhlciByZWFzb24KLSAgICAgICAgIDAgIHRlc3QgZmFpbGVkCi0gICAgICAgICAxICB0ZXN0IHBhc3NlZAorICAgIFJldHVybnMgb25lIG9mIHRoZSB0ZXN0IHJlc3VsdCBjb25zdGFudHM6CisgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKKyAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKKyAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCisgICAgICAgIEVOVl9DSEFOR0VEICAgICAgdGVzdCBmYWlsZWQgYmVjYXVzZSBpdCBjaGFuZ2VkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQKKyAgICAgICAgRkFJTEVEICAgICAgICAgICB0ZXN0IGZhaWxlZAorICAgICAgICBQQVNTRUQgICAgICAgICAgIHRlc3QgcGFzc2VkCiAgICAgIiIiCiAKKyAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CisgICAgaWYgdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGVzdF90aW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRpciwgaHVudHJsZWFrcykKKyAgICAgICAgcmV0dXJuIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MpCiAgICAgZmluYWxseToKICAgICAgICAgY2xlYW51cF90ZXN0X2Ryb3BwaW5ncyh0ZXN0LCB2ZXJib3NlKQogCi1kZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGVzdF90aW1lcywKLSAgICAgICAgICAgICAgICAgIHRlc3RkaXI9Tm9uZSwgaHVudHJsZWFrcz1GYWxzZSk6CisKKyMgVW5pdCB0ZXN0cyBhcmUgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1bmNoYW5nZWQKKyMgb25jZSB0aGV5IGNvbXBsZXRlLiAgQnV0IHNvbWV0aW1lcyB0ZXN0cyBoYXZlIGJ1Z3MsIGVzcGVjaWFsbHkgd2hlbgorIyB0ZXN0cyBmYWlsLCBhbmQgdGhlIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgZ28gb24gdG8gbWVzcyB1cCBvdGhlcgorIyB0ZXN0cy4gIFRoaXMgY2FuIGNhdXNlIGlzc3VlcyB3aXRoIGJ1aWxkYm90IHN0YWJpbGl0eSwgc2luY2UgdGVzdHMKKyMgYXJlIHJ1biBpbiByYW5kb20gb3JkZXIgYW5kIHNvIHByb2JsZW1zIG1heSBhcHBlYXIgdG8gY29tZSBhbmQgZ28uCisjIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2UgY2FuIHNhdmUgYW5kIHJlc3RvcmUgdG8gbWl0aWdhdGUgdGhpcywgYW5kCisjIHRoZSBmb2xsb3dpbmcgY29udGV4dCBtYW5hZ2VyIGhhbmRsZXMgdGhpcyB0YXNrLgorCitjbGFzcyBzYXZlZF90ZXN0X2Vudmlyb25tZW50OgorICAgICIiIlNhdmUgYml0cyBvZiB0aGUgdGVzdCBlbnZpcm9ubWVudCBhbmQgcmVzdG9yZSB0aGVtIGF0IGJsb2NrIGV4aXQuCisKKyAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3RuYW1lLCB2ZXJib3NlLCBxdWlldCk6CisgICAgICAgICAgICAjc3R1ZmYKKworICAgIFVubGVzcyBxdWlldCBpcyBUcnVlLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBzdGRlcnIgaWYgYW55IG9mCisgICAgdGhlIHNhdmVkIGl0ZW1zIHdhcyBjaGFuZ2VkIGJ5IHRoZSB0ZXN0LiAgVGhlIGF0dHJpYnV0ZSAnY2hhbmdlZCcKKyAgICBpcyBpbml0aWFsbHkgRmFsc2UsIGJ1dCBpcyBzZXQgdG8gVHJ1ZSBpZiBhIGNoYW5nZSBpcyBkZXRlY3RlZC4KKworICAgIElmIHZlcmJvc2UgaXMgbW9yZSB0aGFuIDEsIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHN0YXRlIG9mIGNoYW5nZWQKKyAgICBpdGVtcyBpcyBhbHNvIHByaW50ZWQuCisgICAgIiIiCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0bmFtZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSk6CisgICAgICAgIHNlbGYudGVzdG5hbWUgPSB0ZXN0bmFtZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYucXVpZXQgPSBxdWlldAorCisgICAgIyBUbyBhZGQgdGhpbmdzIHRvIHNhdmUgYW5kIHJlc3RvcmUsIGFkZCBhIG5hbWUgWFhYIHRvIHRoZSByZXNvdXJjZXMgbGlzdAorICAgICMgYW5kIGFkZCBjb3JyZXNwb25kaW5nIGdldF9YWFgvcmVzdG9yZV9YWFggZnVuY3Rpb25zLiAgZ2V0X1hYWCBzaG91bGQKKyAgICAjIHJldHVybiB0aGUgdmFsdWUgdG8gYmUgc2F2ZWQgYW5kIGNvbXBhcmVkIGFnYWluc3QgYSBzZWNvbmQgY2FsbCB0byB0aGUKKyAgICAjIGdldCBmdW5jdGlvbiB3aGVuIHRlc3QgZXhlY3V0aW9uIGNvbXBsZXRlcy4gIHJlc3RvcmVfWFhYIHNob3VsZCBhY2NlcHQKKyAgICAjIHRoZSBzYXZlZCB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgcmVzb3VyY2UgdXNpbmcgaXQuICBJdCB3aWxsIGJlIGNhbGxlZCBpZgorICAgICMgYW5kIG9ubHkgaWYgYSBjaGFuZ2UgaW4gdGhlIHZhbHVlIGlzIGRldGVjdGVkLgorICAgICMKKyAgICAjIE5vdGU6IFhYWCB3aWxsIGhhdmUgYW55ICcuJyByZXBsYWNlZCB3aXRoICdfJyBjaGFyYWN0ZXJzIHdoZW4gZGV0ZXJtaW5pbmcKKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBuYW1lcy4KKworICAgIHJlc291cmNlcyA9ICgnc3lzLmFyZ3YnLCAnY3dkJywgJ3N5cy5zdGRpbicsICdzeXMuc3Rkb3V0JywgJ3N5cy5zdGRlcnInLAorICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdhc3luY29yZS5zb2NrZXRfbWFwJykKKworICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMuYXJndiksIHN5cy5hcmd2LCBzeXMuYXJndls6XQorICAgIGRlZiByZXN0b3JlX3N5c19hcmd2KHNlbGYsIHNhdmVkX2FyZ3YpOgorICAgICAgICBzeXMuYXJndiA9IHNhdmVkX2FyZ3ZbMV0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzYXZlZF9hcmd2WzJdCisKKyAgICBkZWYgZ2V0X2N3ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLmdldGN3ZCgpCisgICAgZGVmIHJlc3RvcmVfY3dkKHNlbGYsIHNhdmVkX2N3ZCk6CisgICAgICAgIG9zLmNoZGlyKHNhdmVkX2N3ZCkKKworICAgIGRlZiBnZXRfc3lzX3N0ZG91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN5cy5zdGRvdXQKKyAgICBkZWYgcmVzdG9yZV9zeXNfc3Rkb3V0KHNlbGYsIHNhdmVkX3N0ZG91dCk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlZF9zdGRvdXQKKworICAgIGRlZiBnZXRfc3lzX3N0ZGVycihzZWxmKToKKyAgICAgICAgcmV0dXJuIHN5cy5zdGRlcnIKKyAgICBkZWYgcmVzdG9yZV9zeXNfc3RkZXJyKHNlbGYsIHNhdmVkX3N0ZGVycik6CisgICAgICAgIHN5cy5zdGRlcnIgPSBzYXZlZF9zdGRlcnIKKworICAgIGRlZiBnZXRfc3lzX3N0ZGluKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZGluCisgICAgZGVmIHJlc3RvcmVfc3lzX3N0ZGluKHNlbGYsIHNhdmVkX3N0ZGluKToKKyAgICAgICAgc3lzLnN0ZGluID0gc2F2ZWRfc3RkaW4KKworICAgIGRlZiBnZXRfb3NfZW52aXJvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIGlkKG9zLmVudmlyb24pLCBvcy5lbnZpcm9uLCBkaWN0KG9zLmVudmlyb24pCisgICAgZGVmIHJlc3RvcmVfb3NfZW52aXJvbihzZWxmLCBzYXZlZF9lbnZpcm9uKToKKyAgICAgICAgb3MuZW52aXJvbiA9IHNhdmVkX2Vudmlyb25bMV0KKyAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgICAgIG9zLmVudmlyb24udXBkYXRlKHNhdmVkX2Vudmlyb25bMl0pCisKKyAgICBkZWYgZ2V0X3N5c19wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQoc3lzLnBhdGgpLCBzeXMucGF0aCwgc3lzLnBhdGhbOl0KKyAgICBkZWYgcmVzdG9yZV9zeXNfcGF0aChzZWxmLCBzYXZlZF9wYXRoKToKKyAgICAgICAgc3lzLnBhdGggPSBzYXZlZF9wYXRoWzFdCisgICAgICAgIHN5cy5wYXRoWzpdID0gc2F2ZWRfcGF0aFsyXQorCisgICAgZGVmIGdldF9hc3luY29yZV9zb2NrZXRfbWFwKHNlbGYpOgorICAgICAgICBhc3luY29yZSA9IHN5cy5tb2R1bGVzLmdldCgnYXN5bmNvcmUnKQorICAgICAgICAjIFhYWCBNYWtpbmcgYSBjb3B5IGtlZXBzIG9iamVjdHMgYWxpdmUgdW50aWwgX19leGl0X18gZ2V0cyBjYWxsZWQuCisgICAgICAgIHJldHVybiBhc3luY29yZSBhbmQgYXN5bmNvcmUuc29ja2V0X21hcC5jb3B5KCkgb3Ige30KKyAgICBkZWYgcmVzdG9yZV9hc3luY29yZV9zb2NrZXRfbWFwKHNlbGYsIHNhdmVkX21hcCk6CisgICAgICAgIGFzeW5jb3JlID0gc3lzLm1vZHVsZXMuZ2V0KCdhc3luY29yZScpCisgICAgICAgIGlmIGFzeW5jb3JlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKGlnbm9yZV9hbGw9VHJ1ZSkKKyAgICAgICAgICAgIGFzeW5jb3JlLnNvY2tldF9tYXAudXBkYXRlKHNhdmVkX21hcCkKKworICAgIGRlZiByZXNvdXJjZV9pbmZvKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnJlc291cmNlczoKKyAgICAgICAgICAgIG1ldGhvZF9zdWZmaXggPSBuYW1lLnJlcGxhY2UoJy4nLCAnXycpCisgICAgICAgICAgICBnZXRfbmFtZSA9ICdnZXRfJyArIG1ldGhvZF9zdWZmaXgKKyAgICAgICAgICAgIHJlc3RvcmVfbmFtZSA9ICdyZXN0b3JlXycgKyBtZXRob2Rfc3VmZml4CisgICAgICAgICAgICB5aWVsZCBuYW1lLCBnZXRhdHRyKHNlbGYsIGdldF9uYW1lKSwgZ2V0YXR0cihzZWxmLCByZXN0b3JlX25hbWUpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnNhdmVkX3ZhbHVlcyA9IGRpY3QoKG5hbWUsIGdldCgpKSBmb3IgbmFtZSwgZ2V0LCByZXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzZWxmLnJlc291cmNlX2luZm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2F2ZWRfdmFsdWVzID0gc2VsZi5zYXZlZF92YWx1ZXMKKyAgICAgICAgZGVsIHNlbGYuc2F2ZWRfdmFsdWVzCisgICAgICAgIGZvciBuYW1lLCBnZXQsIHJlc3RvcmUgaW4gc2VsZi5yZXNvdXJjZV9pbmZvKCk6CisgICAgICAgICAgICBjdXJyZW50ID0gZ2V0KCkKKyAgICAgICAgICAgIG9yaWdpbmFsID0gc2F2ZWRfdmFsdWVzLnBvcChuYW1lKQorICAgICAgICAgICAgIyBDaGVjayBmb3IgY2hhbmdlcyB0byB0aGUgcmVzb3VyY2UncyB2YWx1ZQorICAgICAgICAgICAgaWYgY3VycmVudCAhPSBvcmlnaW5hbDoKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmVzdG9yZShvcmlnaW5hbCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5xdWlldDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIC0tIHt9IHdhcyBtb2RpZmllZCBieSB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYudGVzdG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBCZWZvcmU6IHt9XG4gIEFmdGVyOiAge30gIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsLCBjdXJyZW50KSkKKyAgICAgICAgICAgICMgWFhYIChuY29naGxhbik6IGZvciBtb3N0IHJlc291cmNlcyAoZS5nLiBzeXMucGF0aCkgaWRlbnRpdHkKKyAgICAgICAgICAgICMgbWF0dGVycyBhdCBsZWFzdCBhcyBtdWNoIGFzIHZhbHVlLiBGb3Igb3RoZXJzIChlLmcuIGN3ZCksCisgICAgICAgICAgICAjIGlkZW50aXR5IGlzIGlycmVsZXZhbnQuIFNob3VsZCB3ZSBhZGQgYSBtZWNoYW5pc20gdG8gY2hlY2sKKyAgICAgICAgICAgICMgZm9yIHN1YnN0aXR1dGlvbiBpbiB0aGUgY2FzZXMgd2hlcmUgaXQgbWF0dGVycz8KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3M9RmFsc2UpOgogICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQodGVzdCkKLSAgICBpZiBub3QgdGVzdGRpcjoKLSAgICAgICAgdGVzdGRpciA9IGZpbmR0ZXN0ZGlyKCkKICAgICBpZiB2ZXJib3NlOgogICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IE5vbmUKICAgICBlbHNlOgotICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNhcHR1cmVfc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogCisgICAgdGVzdF90aW1lID0gMC4wCisgICAgcmVmbGVhayA9IEZhbHNlICAjIFRydWUgaWYgdGhlIHRlc3QgbGVha2VkIHJlZmVyZW5jZXMuCiAgICAgdHJ5OgogICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgdHJ5OgpAQCAtNTU1LDYxICs4NjUsNzEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBbHdheXMgaW1wb3J0IGl0IGZyb20gdGhlIHRlc3QgcGFja2FnZQogICAgICAgICAgICAgICAgIGFic3Rlc3QgPSAndGVzdC4nICsgdGVzdAotICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICB0aGVfcGFja2FnZSA9IF9faW1wb3J0X18oYWJzdGVzdCwgZ2xvYmFscygpLCBsb2NhbHMoKSwgW10pCi0gICAgICAgICAgICB0aGVfbW9kdWxlID0gZ2V0YXR0cih0aGVfcGFja2FnZSwgdGVzdCkKLSAgICAgICAgICAgICMgT2xkIHRlc3RzIHJ1biB0byBjb21wbGV0aW9uIHNpbXBseSBhcyBhIHNpZGUtZWZmZWN0IG9mCi0gICAgICAgICAgICAjIGJlaW5nIGltcG9ydGVkLiAgRm9yIHRlc3RzIGJhc2VkIG9uIHVuaXR0ZXN0IG9yIGRvY3Rlc3QsCi0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgaW52b2tlIHRoZWlyIHRlc3RfbWFpbigpIGZ1bmN0aW9uIChpZiBpdCBleGlzdHMpLgotICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCi0gICAgICAgICAgICBpZiBpbmRpcmVjdF90ZXN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGluZGlyZWN0X3Rlc3QoKQotICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKLSAgICAgICAgICAgICAgICBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgaW5kaXJlY3RfdGVzdCwgaHVudHJsZWFrcykKLSAgICAgICAgICAgIHRlc3RfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQotICAgICAgICAgICAgdGVzdF90aW1lcy5hcHBlbmQoKHRlc3RfdGltZSwgdGVzdCkpCisgICAgICAgICAgICB3aXRoIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQodGVzdCwgdmVyYm9zZSwgcXVpZXQpIGFzIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgIHRoZV9wYWNrYWdlID0gX19pbXBvcnRfXyhhYnN0ZXN0LCBnbG9iYWxzKCksIGxvY2FscygpLCBbXSkKKyAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gZ2V0YXR0cih0aGVfcGFja2FnZSwgdGVzdCkKKyAgICAgICAgICAgICAgICAjIE9sZCB0ZXN0cyBydW4gdG8gY29tcGxldGlvbiBzaW1wbHkgYXMgYSBzaWRlLWVmZmVjdCBvZgorICAgICAgICAgICAgICAgICMgYmVpbmcgaW1wb3J0ZWQuICBGb3IgdGVzdHMgYmFzZWQgb24gdW5pdHRlc3Qgb3IgZG9jdGVzdCwKKyAgICAgICAgICAgICAgICAjIGV4cGxpY2l0bHkgaW52b2tlIHRoZWlyIHRlc3RfbWFpbigpIGZ1bmN0aW9uIChpZiBpdCBleGlzdHMpLgorICAgICAgICAgICAgICAgIGluZGlyZWN0X3Rlc3QgPSBnZXRhdHRyKHRoZV9tb2R1bGUsICJ0ZXN0X21haW4iLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGluZGlyZWN0X3Rlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGluZGlyZWN0X3Rlc3QoKQorICAgICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6CisgICAgICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgaW5kaXJlY3RfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKICAgICBleGNlcHQgdGVzdF9zdXBwb3J0LlJlc291cmNlRGVuaWVkLCBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKICAgICAgICAgICAgIHByaW50IHRlc3QsICJza2lwcGVkIC0tIiwgbXNnCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIC0yCi0gICAgZXhjZXB0IChJbXBvcnRFcnJvciwgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkKSwgbXNnOgorICAgICAgICByZXR1cm4gUkVTT1VSQ0VfREVOSUVELCB0ZXN0X3RpbWUKKyAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QsIG1zZzoKICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgcHJpbnQgdGVzdCwgInNraXBwZWQgLS0iLCBtc2cKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIFNLSVBQRUQsIHRlc3RfdGltZQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgcmFpc2UKICAgICBleGNlcHQgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsIG1zZzoKLSAgICAgICAgcHJpbnQgInRlc3QiLCB0ZXN0LCAiZmFpbGVkIC0tIiwgbXNnCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gMAorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ0ZXN0IiwgdGVzdCwgImZhaWxlZCAtLSIsIG1zZworICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCiAgICAgZXhjZXB0OgogICAgICAgICB0eXBlLCB2YWx1ZSA9IHN5cy5leGNfaW5mbygpWzoyXQotICAgICAgICBwcmludCAidGVzdCIsIHRlc3QsICJjcmFzaGVkIC0tIiwgc3RyKHR5cGUpICsgIjoiLCB2YWx1ZQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAidGVzdCIsIHRlc3QsICJjcmFzaGVkIC0tIiwgc3RyKHR5cGUpICsgIjoiLCB2YWx1ZQorICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJldHVybiAwCisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKICAgICBlbHNlOgorICAgICAgICBpZiByZWZsZWFrOgorICAgICAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisgICAgICAgIGlmIGVudmlyb25tZW50LmNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gRU5WX0NIQU5HRUQsIHRlc3RfdGltZQogICAgICAgICAjIEV4Y2VwdCBpbiB2ZXJib3NlIG1vZGUsIHRlc3RzIHNob3VsZCBub3QgcHJpbnQgYW55dGhpbmcKICAgICAgICAgaWYgdmVyYm9zZSBvciBodW50cmxlYWtzOgotICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIHJldHVybiBQQVNTRUQsIHRlc3RfdGltZQogICAgICAgICBvdXRwdXQgPSBjYXB0dXJlX3N0ZG91dC5nZXR2YWx1ZSgpCiAgICAgICAgIGlmIG5vdCBvdXRwdXQ6Ci0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgcmV0dXJuIFBBU1NFRCwgdGVzdF90aW1lCiAgICAgICAgIHByaW50ICJ0ZXN0IiwgdGVzdCwgInByb2R1Y2VkIHVuZXhwZWN0ZWQgb3V0cHV0OiIKICAgICAgICAgcHJpbnQgIioiICogNzAKICAgICAgICAgcHJpbnQgb3V0cHV0CiAgICAgICAgIHByaW50ICIqIiAqIDcwCiAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKIAogZGVmIGNsZWFudXBfdGVzdF9kcm9wcGluZ3ModGVzdG5hbWUsIHZlcmJvc2UpOgogICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgc3RhdAorICAgIGltcG9ydCBnYworCisgICAgIyBGaXJzdCBraWxsIGFueSBkYW5nbGluZyByZWZlcmVuY2VzIHRvIG9wZW4gZmlsZXMgZXRjLgorICAgIGdjLmNvbGxlY3QoKQogCiAgICAgIyBUcnkgdG8gY2xlYW4gdXAganVuayBjb21tb25seSBsZWZ0IGJlaGluZC4gIFdoaWxlIHRlc3RzIHNob3VsZG4ndCBsZWF2ZQogICAgICMgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVzIGJlaGluZCwgd2hlbiBhIHRlc3QgZmFpbHMgdGhhdCBjYW4gYmUgdGVkaW91cwpAQCAtNjM0LDE0ICs5NTQsMjMgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIlciBsZWZ0IGJlaGluZCAlcyAlciIgJSAodGVzdG5hbWUsIGtpbmQsIG5hbWUpCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaWYgd2UgaGF2ZSBjaG1vZCwgZml4IHBvc3NpYmxlIHBlcm1pc3Npb25zIHByb2JsZW1zCisgICAgICAgICAgICAjIHRoYXQgbWlnaHQgcHJldmVudCBjbGVhbnVwCisgICAgICAgICAgICBpZiAoaGFzYXR0cihvcywgJ2NobW9kJykpOgorICAgICAgICAgICAgICAgIG9zLmNobW9kKG5hbWUsIHN0YXQuU19JUldYVSB8IHN0YXQuU19JUldYRyB8IHN0YXQuU19JUldYTykKICAgICAgICAgICAgIG51a2VyKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIG1zZzoKICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiJXIgbGVmdCBiZWhpbmQgJXMgJXIgYW5kIGl0IGNvdWxkbid0IGJlICIKICAgICAgICAgICAgICAgICAicmVtb3ZlZDogJXMiICUgKHRlc3RuYW1lLCBraW5kLCBuYW1lLCBtc2cpKQogCiBkZWYgZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIGluZGlyZWN0X3Rlc3QsIGh1bnRybGVha3MpOgorICAgICIiIlJ1biBhIHRlc3QgbXVsdGlwbGUgdGltZXMsIGxvb2tpbmcgZm9yIHJlZmVyZW5jZSBsZWFrcy4KKworICAgIFJldHVybnM6CisgICAgICAgIEZhbHNlIGlmIHRoZSB0ZXN0IGRpZG4ndCBsZWFrIHJlZmVyZW5jZXM7IFRydWUgaWYgd2UgZGV0ZWN0ZWQgcmVmbGVha3MuCisgICAgIiIiCiAgICAgIyBUaGlzIGNvZGUgaXMgaGFja2lzaCBhbmQgaW5lbGVnYW50LCBidXQgaXQgc2VlbXMgdG8gZG8gdGhlIGpvYi4KLSAgICBpbXBvcnQgY29weV9yZWcsIF9hYmNvbGwsIGlvCisgICAgaW1wb3J0IGNvcHlfcmVnLCBfYWJjb2xsLCBfcHlpbwogCiAgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRyYWNraW5nIHJlZmVyZW5jZSBsZWFrcyByZXF1aXJlcyBhIGRlYnVnIGJ1aWxkICIKQEAgLTY1MSw4ICs5ODAsMTQgQEAKICAgICBmcyA9IHdhcm5pbmdzLmZpbHRlcnNbOl0KICAgICBwcyA9IGNvcHlfcmVnLmRpc3BhdGNoX3RhYmxlLmNvcHkoKQogICAgIHBpYyA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHppcGltcG9ydAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgemRjID0gTm9uZSAjIFJ1biB1bm1vZGlmaWVkIG9uIHBsYXRmb3JtcyB3aXRob3V0IHppcGltcG9ydCBzdXBwb3J0CisgICAgZWxzZToKKyAgICAgICAgemRjID0gemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNvcHkoKQogICAgIGFiY3MgPSB7fQotICAgIG1vZHVsZXMgPSBfYWJjb2xsLCBpbworICAgIG1vZHVsZXMgPSBfYWJjb2xsLCBfcHlpbwogICAgIGZvciBhYmMgaW4gW2dldGF0dHIobW9kLCBhKSBmb3IgbW9kIGluIG1vZHVsZXMgZm9yIGEgaW4gbW9kLl9fYWxsX19dOgogICAgICAgICAjIFhYWCBpc2luc3RhbmNlKGFiYywgQUJDTWV0YSkgbGVhZHMgdG8gaW5maW5pdGUgcmVjdXJzaW9uCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGFiYywgJ19hYmNfcmVnaXN0cnknKToKQEAgLTY2OSwyNiArMTAwNCwzMCBAQAogCiAgICAgZGVsdGFzID0gW10KICAgICBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUgPSBodW50cmxlYWtzCisgICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKICAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAogICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIgogICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdCi0gICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIGFiY3MpCisgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICByY19iZWZvcmUgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIHJ1bl90aGVfdGVzdCgpCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgYWJjcykKKyAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKKyAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQoc3lzLmdldHRvdGFscmVmY291bnQoKSAtIHJjIC0gMikKKyAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCiAgICAgcHJpbnQgPj4gc3lzLnN0ZGVycgogICAgIGlmIGFueShkZWx0YXMpOgogICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzIHJlZmVyZW5jZXMsIHN1bT0lcycgJSAodGVzdCwgZGVsdGFzLCBzdW0oZGVsdGFzKSkKICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgbXNnCi0gICAgICAgIHJlZnJlcCA9IG9wZW4oZm5hbWUsICJhIikKLSAgICAgICAgcHJpbnQgPj4gcmVmcmVwLCBtc2cKLSAgICAgICAgcmVmcmVwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgIHByaW50ID4+IHJlZnJlcCwgbXNnCisgICAgICAgICAgICByZWZyZXAuZmx1c2goKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQogCi1kZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIGFiY3MpOgorZGVmIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpOgogICAgIGltcG9ydCBnYywgY29weV9yZWcKICAgICBpbXBvcnQgX3N0cnB0aW1lLCBsaW5lY2FjaGUKICAgICBkaXJjYWNoZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdkaXJjYWNoZScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKQEAgLTcwNyw2ICsxMDQ2LDEzIEBACiAgICAgY29weV9yZWcuZGlzcGF0Y2hfdGFibGUudXBkYXRlKHBzKQogICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS51cGRhdGUocGljKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHppcGltcG9ydAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcyAjIFJ1biB1bm1vZGlmaWVkIG9uIHBsYXRmb3JtcyB3aXRob3V0IHppcGltcG9ydCBzdXBwb3J0CisgICAgZWxzZToKKyAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLnVwZGF0ZSh6ZGMpCiAKICAgICAjIGNsZWFyIHR5cGUgY2FjaGUKICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQpAQCAtNzM0LDE4ICsxMDgwLDE2IEBACiAgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaC4KICAgICBnYy5jb2xsZWN0KCkKIAotZGVmIGZpbmR0ZXN0ZGlyKCk6Ci0gICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgZmlsZSA9IHN5cy5hcmd2WzBdCi0gICAgZWxzZToKLSAgICAgICAgZmlsZSA9IF9fZmlsZV9fCi0gICAgdGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKSBvciBvcy5jdXJkaXIKLSAgICByZXR1cm4gdGVzdGRpcgorZGVmIGZpbmR0ZXN0ZGlyKHBhdGg9Tm9uZSk6CisgICAgcmV0dXJuIHBhdGggb3Igb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKIAotZGVmIHJlbW92ZXB5KG5hbWUpOgotICAgIGlmIG5hbWUuZW5kc3dpdGgob3MuZXh0c2VwICsgInB5Iik6Ci0gICAgICAgIG5hbWUgPSBuYW1lWzotM10KLSAgICByZXR1cm4gbmFtZQorZGVmIHJlbW92ZXB5KG5hbWVzKToKKyAgICBpZiBub3QgbmFtZXM6CisgICAgICAgIHJldHVybgorICAgIGZvciBpZHgsIG5hbWUgaW4gZW51bWVyYXRlKG5hbWVzKToKKyAgICAgICAgYmFzZW5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKKyAgICAgICAgaWYgZXh0ID09ICcucHknOgorICAgICAgICAgICAgbmFtZXNbaWR4XSA9IGJhc2VuYW1lCiAKIGRlZiBjb3VudChuLCB3b3JkKToKICAgICBpZiBuID09IDE6CkBAIC03NzQsOSArMTExOCw2IEBACiAjICAgICB0ZXN0X3BlcDI3NwogIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAogIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF9zb2NrZXRfc3NsCi0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3NvY2tldF9zc2wuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UsIGFuZCBhIHNvY2tldCBtb2R1bGUgd2l0aCBzc2wgc3VwcG9ydC4KICMgICAgIHRlc3RfdGltZW91dAogIyAgICAgICAgIENvbnRyb2xsZWQgYnkgdGVzdF90aW1lb3V0LnNraXBfZXhwZWN0ZWQuICBSZXF1aXJlcyB0aGUgbmV0d29yawogIyAgICAgICAgIHJlc291cmNlIGFuZCBhIHNvY2tldCBtb2R1bGUuCkBAIC04MjcsNDEgKzExNjgsNiBAQAogICAgICAgICB0ZXN0X2txdWV1ZQogICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CiAgICAgICAgICIiIiwKLSAgICdtYWMnOgotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hdGV4aXQKLSAgICAgICAgdGVzdF9ic2RkYgotICAgICAgICB0ZXN0X2JzZGRiMTg1Ci0gICAgICAgIHRlc3RfYnNkZGIzCi0gICAgICAgIHRlc3RfYnoyCi0gICAgICAgIHRlc3RfY29tbWFuZHMKLSAgICAgICAgdGVzdF9jcnlwdAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9tbWFwCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICB0ZXN0X3BvcGVuCi0gICAgICAgIHRlc3RfcG9wZW4yCi0gICAgICAgIHRlc3RfcG9zaXgKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9wd2QKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICB0ZXN0X3N1bmRyeQotICAgICAgICB0ZXN0X3RhcmZpbGUKLSAgICAgICAgdGVzdF90aW1pbmcKLSAgICAgICAgIiIiLAogICAgICd1bml4d2FyZTcnOgogICAgICAgICAiIiIKICAgICAgICAgdGVzdF9ic2RkYgpAQCAtOTUzLDYgKzEyNTksNyBAQAogICAgICAgICB0ZXN0X2JzZGRiMwogICAgICAgICB0ZXN0X2N1cnNlcwogICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RiCiAgICAgICAgIHRlc3RfZ2RibQogICAgICAgICB0ZXN0X2xhcmdlZmlsZQogICAgICAgICB0ZXN0X2xvY2FsZQpAQCAtMTA1Myw5ICsxMzYwLDExIEBACiAgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKICAgICAgICAgdGVzdF9wZXAyNzcKICAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9zb2NrZXRfc3NsCiAgICAgICAgIHRlc3Rfc29ja2V0c2VydmVyCiAgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQogICAgICAgICB0ZXN0X3RpbWVvdXQKICAgICAgICAgdGVzdF91cmxsaWJuZXQKICAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKQEAgLTEwNzMsMTEgKzEzODIsMTUgQEAKICAgICAgICAgdGVzdF9rcXVldWUKICAgICAgICAgdGVzdF9vc3NhdWRpb2RldgogICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKICAgICAgICAgdGVzdF96aXBpbXBvcnQKICAgICAgICAgdGVzdF96bGliCiAgICAgICAgICIiIiwKICAgICAnb3BlbmJzZDMnOgogICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc2NpaV9mb3JtYXRkCiAgICAgICAgIHRlc3RfYnNkZGIKICAgICAgICAgdGVzdF9ic2RkYjMKICAgICAgICAgdGVzdF9jdHlwZXMKQEAgLTEwODksMTAgKzE0MDIsMTQgQEAKICAgICAgICAgdGVzdF9vc3NhdWRpb2RldgogICAgICAgICB0ZXN0X3BlcDI3NwogICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKICAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKICAgICAgICAgIiIiLAogICAgICduZXRic2QzJzoKICAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYXNjaWlfZm9ybWF0ZAogICAgICAgICB0ZXN0X2JzZGRiCiAgICAgICAgIHRlc3RfYnNkZGIxODUKICAgICAgICAgdGVzdF9ic2RkYjMKQEAgLTExMDUsNiArMTQyMiw5IEBACiAgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKICAgICAgICAgdGVzdF9wZXAyNzcKICAgICAgICAgdGVzdF90Y2wKKyAgICAgICAgdGVzdF90aworICAgICAgICB0ZXN0X3R0a19ndWlvbmx5CisgICAgICAgIHRlc3RfdHRrX3RleHRvbmx5CiAgICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCiAgICAgICAgICIiIiwKIH0KQEAgLTExMjksMjEgKzE0NDksMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgogICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCiAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc29ja2V0X3NzbAotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgdGVzdF9zb2NrZXRfc3NsLnNraXBfZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3NvY2tldF9zc2wnKQotCiAgICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKIAogICAgICAgICAgICAgaWYgc3lzLm1heGludCA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3TDoKICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9pbWFnZW9wJykKIAotICAgICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybSBpbiAoIm1hYyIsICJkYXJ3aW4iKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAiZGFyd2luIjoKICAgICAgICAgICAgICAgICBNQUNfT05MWSA9IFsidGVzdF9tYWNvcyIsICJ0ZXN0X21hY29zdG9vbHMiLCAidGVzdF9hZXBhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3BsaXN0bGliIiwgInRlc3Rfc2NyaXB0cGFja2FnZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X2FwcGxlc2luZ2xlIl0KQEAgLTExOTEsMTYgKzE1MDMsMzQgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWQKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjIFJlbW92ZSByZWdydGVzdC5weSdzIG93biBkaXJlY3RvcnkgZnJvbSB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoLiAgVGhpcwotICAgICMgcHJldmVudHMgcmVsYXRpdmUgaW1wb3J0cyBmcm9tIHdvcmtpbmcsIGFuZCByZWxhdGl2ZSBpbXBvcnRzIHdpbGwgc2NyZXcKLSAgICAjIHVwIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4gIEUuZy4gaWYgYm90aCB0ZXN0LnRlc3Rfc3VwcG9ydCBhbmQKLSAgICAjIHRlc3Rfc3VwcG9ydCBhcmUgaW1wb3J0ZWQsIHRoZXkgd2lsbCBub3QgY29udGFpbiB0aGUgc2FtZSBnbG9iYWxzLCBhbmQKLSAgICAjIG11Y2ggb2YgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIHJlbGllcyBvbiB0aGUgZ2xvYmFscyBpbiB0aGUKLSAgICAjIHRlc3QudGVzdF9zdXBwb3J0IG1vZHVsZS4KLSAgICBteWRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpKQotICAgIGkgPSBsZW4oc3lzLnBhdGgpCi0gICAgd2hpbGUgaSA+PSAwOgotICAgICAgICBpIC09IDEKLSAgICAgICAgaWYgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgubm9ybXBhdGgoc3lzLnBhdGhbaV0pKSA9PSBteWRpcjoKLSAgICAgICAgICAgIGRlbCBzeXMucGF0aFtpXQotICAgIG1haW4oKQorICAgICMgZmluZHRlc3RkaXIoKSBnZXRzIHRoZSBkaXJuYW1lIG91dCBvZiBfX2ZpbGVfXywgc28gd2UgaGF2ZSB0byBtYWtlIGl0CisgICAgIyBhYnNvbHV0ZSBiZWZvcmUgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICMgRm9yIGV4YW1wbGUgX19maWxlX18gbWF5IGJlIHJlbGF0aXZlIHdoZW4gcnVubmluZyB0cmFjZSBvciBwcm9maWxlLgorICAgICMgU2VlIGlzc3VlICM5MzIzLgorICAgIF9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorCisgICAgIyBzYW5pdHkgY2hlY2sKKyAgICBhc3NlcnQgX19maWxlX18gPT0gb3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKQorCisgICAgIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQorICAgICMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIEl0IGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCisgICAgIyBmaWxlcyB1c2luZyBjb21tYW5kICJtYWtlIGRpc3RjbGVhbiIuCisgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgICAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCisgICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFRFTVBESVIpOgorICAgICAgICAgICAgb3MubWtkaXIoVEVNUERJUikKKworICAgICMgRGVmaW5lIGEgd3JpdGFibGUgdGVtcCBkaXIgdGhhdCB3aWxsIGJlIHVzZWQgYXMgY3dkIHdoaWxlIHJ1bm5pbmcKKyAgICAjIHRoZSB0ZXN0cy4gVGhlIG5hbWUgb2YgdGhlIGRpciBpbmNsdWRlcyB0aGUgcGlkIHRvIGFsbG93IHBhcmFsbGVsCisgICAgIyB0ZXN0aW5nIChzZWUgdGhlIC1qIG9wdGlvbikuCisgICAgVEVTVENXRCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorCisgICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQorCisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKKyAgICAjIGF2YWlsYWJsZSBmcm9tIHRlc3Rfc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKKyAgICAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzc4NTRhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMCwwICsxLDE2NCBAQAorIyBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgdXNlZCBieSB2YXJpb3VzIHNjcmlwdCBleGVjdXRpb24gdGVzdHMKKyMgIGUuZy4gdGVzdF9jbWRfbGluZSwgdGVzdF9jbWRfbGluZV9zY3JpcHQgYW5kIHRlc3RfcnVucHkKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB6aXBmaWxlCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHN0cmlwX3B5dGhvbl9zdGRlcnIKKworIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcworZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgICAgIGNtZF9saW5lLmFwcGVuZCgnLUUnKQorICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgICMgTmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQsIGZvciBpbi1wbGFjZSB0ZXN0aW5nIG9mCisgICAgIyBzaGFyZWQgbGlicmFyeSBidWlsZHMuCisgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICBlbnYudXBkYXRlKGVudl92YXJzKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgIHRyeToKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgcmMgPSBwLnJldHVybmNvZGUKKyAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKKyAgICAgICAgICAgICJzdGRlcnIgZm9sbG93czpcbiVzIiAlIChyYywgZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJykpKQorICAgIHJldHVybiByYywgb3V0LCBlcnIKKworZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgICIiIgorICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX2Fzc2VydF9weXRob24oVHJ1ZSwgKmFyZ3MsICoqZW52X3ZhcnMpCisKK2RlZiBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgICIiIgorICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQorCitkZWYgcHl0aG9uX2V4aXRfY29kZSgqYXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCisgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCisgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICd3JykgYXMgZGV2bnVsbDoKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbChjbWRfbGluZSwgc3Rkb3V0PWRldm51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIHNwYXduX3B5dGhvbigqYXJncywgKiprd2FyZ3MpOgorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQorICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCitkZWYga2lsbF9weXRob24ocCk6CisgICAgcC5zdGRpbi5jbG9zZSgpCisgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQorICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAjIHRyeSB0byBjbGVhbnVwIHRoZSBjaGlsZCBzbyB3ZSBkb24ndCBhcHBlYXIgdG8gbGVhayB3aGVuIHJ1bm5pbmcKKyAgICAjIHdpdGggcmVncnRlc3QgLVIuCisgICAgcC53YWl0KCkKKyAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICByZXR1cm4gZGF0YQorCitkZWYgcnVuX3B5dGhvbigqYXJncywgKiprd2FyZ3MpOgorICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbigqYXJncywgKiprd2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLU8nLCAqYXJncywgKiprd2FyZ3MpCisgICAgc3Rkb3V0X2RhdGEgPSBraWxsX3B5dGhvbihwKQorICAgIHJldHVybiBwLndhaXQoKSwgc3Rkb3V0X2RhdGEKKworIyBTY3JpcHQgY3JlYXRpb24gdXRpbGl0aWVzCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfZGlyKCk6CisgICAgZGlybmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIGRpcm5hbWUgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcm5hbWUpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBkaXJuYW1lCisgICAgZmluYWxseToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJuYW1lKQorCitkZWYgbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpOgorICAgIHNjcmlwdF9maWxlbmFtZSA9IHNjcmlwdF9iYXNlbmFtZStvcy5leHRzZXArJ3B5JworICAgIHNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsIHNjcmlwdF9maWxlbmFtZSkKKyAgICBzY3JpcHRfZmlsZSA9IG9wZW4oc2NyaXB0X25hbWUsICd3JykKKyAgICBzY3JpcHRfZmlsZS53cml0ZShzb3VyY2UpCisgICAgc2NyaXB0X2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiBzY3JpcHRfbmFtZQorCitkZWYgY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpOgorICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgY29tcGlsZWRfbmFtZSA9IHNjcmlwdF9uYW1lICsgJ2MnCisgICAgZWxzZToKKyAgICAgICAgY29tcGlsZWRfbmFtZSA9IHNjcmlwdF9uYW1lICsgJ28nCisgICAgcmV0dXJuIGNvbXBpbGVkX25hbWUKKworZGVmIG1ha2VfemlwX3NjcmlwdCh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcD1Ob25lKToKKyAgICB6aXBfZmlsZW5hbWUgPSB6aXBfYmFzZW5hbWUrb3MuZXh0c2VwKyd6aXAnCisgICAgemlwX25hbWUgPSBvcy5wYXRoLmpvaW4oemlwX2RpciwgemlwX2ZpbGVuYW1lKQorICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAndycpCisgICAgaWYgbmFtZV9pbl96aXAgaXMgTm9uZToKKyAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQorICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcCkKKyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgI2lmIHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQorICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQorICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQorICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBuYW1lX2luX3ppcCkKKworZGVmIG1ha2VfcGtnKHBrZ19kaXIpOgorICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgbWFrZV9zY3JpcHQocGtnX2RpciwgJ19faW5pdF9fJywgJycpCisKK2RlZiBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlcHRoPTEsIGNvbXBpbGVkPUZhbHNlKToKKyAgICB1bmxpbmsgPSBbXQorICAgIGluaXRfbmFtZSA9IG1ha2Vfc2NyaXB0KHppcF9kaXIsICdfX2luaXRfXycsICcnKQorICAgIHVubGluay5hcHBlbmQoaW5pdF9uYW1lKQorICAgIGluaXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGluaXRfbmFtZSkKKyAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KHppcF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgIHVubGluay5hcHBlbmQoc2NyaXB0X25hbWUpCisgICAgaWYgY29tcGlsZWQ6CisgICAgICAgIGluaXRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KGluaXRfbmFtZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgdW5saW5rLmV4dGVuZCgoaW5pdF9uYW1lLCBzY3JpcHRfbmFtZSkpCisgICAgcGtnX25hbWVzID0gW29zLnNlcC5qb2luKFtwa2dfbmFtZV0qaSkgZm9yIGkgaW4gcmFuZ2UoMSwgZGVwdGgrMSldCisgICAgc2NyaXB0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKHBrZ19uYW1lc1stMV0sIG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpKQorICAgIHppcF9maWxlbmFtZSA9IHppcF9iYXNlbmFtZStvcy5leHRzZXArJ3ppcCcKKyAgICB6aXBfbmFtZSA9IG9zLnBhdGguam9pbih6aXBfZGlyLCB6aXBfZmlsZW5hbWUpCisgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICd3JykKKyAgICBmb3IgbmFtZSBpbiBwa2dfbmFtZXM6CisgICAgICAgIGluaXRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4obmFtZSwgaW5pdF9iYXNlbmFtZSkKKyAgICAgICAgemlwX2ZpbGUud3JpdGUoaW5pdF9uYW1lLCBpbml0X25hbWVfaW5femlwKQorICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCisgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIGZvciBuYW1lIGluIHVubGluazoKKyAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgI2lmIHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQorICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQorICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQorICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zZXFfdGVzdHMucHkgYi9MaWIvdGVzdC9zZXFfdGVzdHMucHkKaW5kZXggMTQzMDNhYS4uZjVlNGUwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc2VxX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3NlcV90ZXN0cy5weQpAQCAtMTMxLDggKzEzMSw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50eXBlMnRlc3QsIEl0ZXJHZW5FeGMocykpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLnR5cGUydGVzdCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50eXBlMnRlc3QoWzQyXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudHlwZTJ0ZXN0KFs0Ml0pKQogCiAgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKICAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyLCAzLCA0XSkKQEAgLTIwMSw5ICsyMDEsOSBAQAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDEsIDJdKQogICAgICAgICBmb3IgaSBpbiB1OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgdSkKICAgICAgICAgZm9yIGkgaW4gbWluKHUpLTEsIG1heCh1KSsxOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgbm90IGluIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGksIHUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ll9fY29udGFpbnNfXykKIApAQCAtMjE1LDggKzIxNSw4IEBACiAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgQ2FuJ3QgbWVldCBoYXNoIGludmFyaWFudCByZXF1aXJlbWVudHMKLSAgICAgICAgc2VsZi5hc3NlcnRfKEFsbEVxKCkgbm90IGluIHNlbGYudHlwZTJ0ZXN0KFtdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKEFsbEVxKCkgaW4gc2VsZi50eXBlMnRlc3QoWzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihBbGxFcSgpLCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oQWxsRXEoKSwgc2VsZi50eXBlMnRlc3QoWzFdKSkKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zX29yZGVyKHNlbGYpOgogICAgICAgICAjIFNlcXVlbmNlcyBtdXN0IHRlc3QgaW4tb3JkZXIuICBJZiBhIHJpY2ggY29tcGFyaXNvbiBoYXMgc2lkZQpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgRG9Ob3RUZXN0RXEKIAogICAgICAgICBjaGVja2ZpcnN0ID0gc2VsZi50eXBlMnRlc3QoWzEsIFN0b3BDb21wYXJlcygpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDEgaW4gY2hlY2tmaXJzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBjaGVja2ZpcnN0KQogICAgICAgICBjaGVja2xhc3QgPSBzZWxmLnR5cGUydGVzdChbU3RvcENvbXBhcmVzKCksIDFdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEb05vdFRlc3RFcSwgY2hlY2tsYXN0Ll9fY29udGFpbnNfXywgMSkKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHUzID0gc3ViY2xhc3MoWzAsIDFdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUzLCB1MyoxKQotICAgICAgICBzZWxmLmFzc2VydF8odTMgaXMgbm90IHUzKjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodTMsIHUzKjEpCiAKICAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgogICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc2hhMjU2LnBlbSBiL0xpYi90ZXN0L3NoYTI1Ni5wZW0KaW5kZXggMDE4NzhlOS4uZDQ4OGU2ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc2hhMjU2LnBlbQorKysgYi9MaWIvdGVzdC9zaGEyNTYucGVtCkBAIC0xLDMzICsxLDEyOSBAQAorIyBDZXJ0aWZpY2F0ZSBjaGFpbiBmb3IgaHR0cHM6Ly9zaGEyNTYudGJzLWludGVybmV0LmNvbQorIDAgczovQz1GUi9wb3N0YWxDb2RlPTE0MDAwL1NUPUNhbHZhZG9zL0w9Q0FFTi9zdHJlZXQ9MjIgcnVlIGRlIEJyZXRhZ25lL089VEJTIElOVEVSTkVUL09VPTAwMDIgNDQwNDQzODEwL09VPXNoYS0yNTYgcHJvZHVjdGlvbi9DTj1zaGEyNTYudGJzLWludGVybmV0LmNvbQorICAgaTovQz1GUi9TVD1DYWx2YWRvcy9MPUNhZW4vTz1UQlMgSU5URVJORVQvT1U9VGVybXMgYW5kIENvbmRpdGlvbnM6IGh0dHA6Ly93d3cudGJzLWludGVybmV0LmNvbS9DQS9yZXBvc2l0b3J5L09VPVRCUyBJTlRFUk5FVCBDQS9DTj1UQlMgWDUwOSBDQSBTR0MKIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotTUlJRnh6Q0NBNitnQXdJQkFnSUpBTG5sbmY1dXpUa0lNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1Fc3hDekFKQmdOVgotQkFZVEFrUkZNUmN3RlFZRFZRUUtFdzV6WTJodmEyOXJaV3R6TG05eVp6RWpNQ0VHQ1NxR1NJYjNEUUVKQVJZVQotYUdGdWJtOUFjMk5vYjJ0dmEyVnJjeTV2Y21jd0hoY05NVEF3TVRJM01EQXlNVEkxV2hjTk1qQXdNVEkxTURBeQotTVRJMVdqQkxNUXN3Q1FZRFZRUUdFd0pFUlRFWE1CVUdBMVVFQ2hNT2MyTm9iMnR2YTJWcmN5NXZjbWN4SXpBaAotQmdrcWhraUc5dzBCQ1FFV0ZHaGhibTV2UUhOamFHOXJiMnRsYTNNdWIzSm5NSUlDSWpBTkJna3Foa2lHOXcwQgotQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBcEo0T0RQd0Vvb01XMzVkUVBsQnFkdmNma0V2amhjc0E3am1KZkZxTgotZS8xVDM0elQ0NFg5K0tuTUJTRzJJbmFjYkQ3ZXlGZ2pmYUVORnNaODdZa0VCRElGWi9TSG90TEpaT1JROFBVagotWW94UEc0bWpLTit5TDJXdGhOY1liUnlKcmVUYmJEcm9OTXV3NnRrVFN4ZVNYeVlGUXJLTUNVZkVyVmJaYS9kNQotUnZmRlZrK0F1OWRWVUZoZWQvU3RuNWN2K2EwZmZ2cHlBN3lnaWhtMWtNRklDYnZQZUkwODQ2dG1DMlBoN3JNNQotcFlReU5CRE9WcFVMT0RUazVXdTZqaWlKSnlndkpXQ1oxRmRwc2RCczVhS1dIV2RSaFgrK3F1R3VmbFRUakg1ZAotcWFJa2E0b3A5SDdYa3NZcGhURFhtVitxSG52YTVqYlBvZ3d1dERRY1ZzR0JRY0phTG1RcWhzUUsxM2JmNGtoRQotaVdKdmZCTGZIbjhPT3BZMjVad3d1aWdKSXdpZk5DeFFlZVQxRnJMbXl1WU5oejJwaFBwengwNjVrcVNVU1IrQQotSXc4RFBFNmU2NVVxTURLcVpuSUQzZFFlaVFhRnJIRVYrSWJvMFUvdEQwWVNCdzVwMzNUTWgwRXMzM0lCV01hYwotbTd4NGhJRldkaGw4VzUyMnU2cU9yVHN3WTNzOHZCN2JsTldxTWM5bjdvV0g4eWJGZjdFZ0tlRFZ0RU45QXlCRQotMFdvdFhJRVpXSStXdkRiVTFBQ0pYYXU5c1FoWVAvZWVyZzdad3IzaUdVeTRJUTVvVUppYm5qdGNFK3o4em1ETgotcEU2WWNNQ0xKeUxqWGlRM2lIRzltTlh6dzd3UG5zbFRiRUVFdWtyZlNsSEdnVzhEbStWck55VzBKVU0xYm50eAotdmJNQ0F3RUFBYU9CclRDQnFqQWRCZ05WSFE0RUZnUVVDZWR2N3BEVHVYdEN4bTRIVHc5aFV0clR2c293ZXdZRAotVlIwakJIUXdjb0FVQ2VkdjdwRFR1WHRDeG00SFR3OWhVdHJUdnNxaFQ2Uk5NRXN4Q3pBSkJnTlZCQVlUQWtSRgotTVJjd0ZRWURWUVFLRXc1elkyaHZhMjlyWld0ekxtOXlaekVqTUNFR0NTcUdTSWIzRFFFSkFSWVVhR0Z1Ym05QQotYzJOb2IydHZhMlZyY3k1dmNtZUNDUUM1NVozK2JzMDVDREFNQmdOVkhSTUVCVEFEQVFIL01BMEdDU3FHU0liMwotRFFFQkN3VUFBNElDQVFCSEtBeEE3V0EvTUVGamV0MDNLOG91ekVPcjZKcmsyZlpPdVJob0RaKzlncjRGdGFKQgotUDNIaDVEMDBrdVNPdkRud3N2Q29oeGVOZDFLVE1Bd1ZtVm9IK05aa0hFUm4zVVhuaVVFTmxwMThrb0kxZWhscgotQ1piWGJ6ekU5VGU5QmVsbGlTRkE2M3EwY3EweUpOMXg5R3lhYlUzNFhrQW91Q0FtT3FmU3BLTlpXWkhHQkhQRgotYmJZblpySEVNY3N5ZTZ2S2VUT2NnMUdxVUhHclFNMldLMFFhT3duQ1F2MlJibEk5Vk4rU2VSb1VKNDRxVFhkVwotVHdJWVN0c0lQZXNhY05jQVFUU3RuSGdLcUlQeDR6Q3dkeDV4bzh6T05iWEpmb2Nxd3lGcWlBb2Z2YjlkTjFuVwotZzFub1ZCY1hCK29SQlpXNUNqRnc4N1U4OGl0cTM5aTkrQldsODM1RFdMQlcycFZteDFRVExHdjBSTmdzL3hWeAotbVduakg0bk5IdnJqbjZwUm1xSFpUay9TUzBIa2wycXREc3luVnhJbDhFaU1UZldTVTNEQlR1RDJKL1JTenVPRQotZUt0QWJhb1hrWEUzMWpDbDRGRVpMSVRJWmQ4VWtYYWNiOXJOMzA0dEFLOTJMNzZKT0FWK3hPWnhGUmlwbXZ4NAotK0E5cVFYZ0xodFA0VmFEYWpiNDRWL2tDS1BTQTBWbTNhcGVoa2U5V2w4ZER0YWdmb3MxZTZNeFN1M0VWTFhSRgotU1AyVTc3N1Y3N3BkTVNkMGYvN2NlcktuNUZqcnhXMXYxRmFQMW9JR25pTWs0cVFOVGdBL2p2dmhqeWJzUGxWQQotanNmbmhXR2JoMXZvSmEwUlFjTWlSTXN4cHcyUDFLTk9FdTM3VzJlcS92RmdoVnp0WkpRVW1iNWlOdz09CitNSUlHWFRDQ0JVV2dBd0lCQWdJUkFNbWFnK3lnU0FkeFpzYnl6WWpodVcwd0RRWUpLb1pJaHZjTkFRRUxCUUF3CitnY1F4Q3pBSkJnTlZCQVlUQWtaU01SRXdEd1lEVlFRSUV3aERZV3gyWVdSdmN6RU5NQXNHQTFVRUJ4TUVRMkZsCitiakVWTUJNR0ExVUVDaE1NVkVKVElFbE9WRVZTVGtWVU1VZ3dSZ1lEVlFRTEV6OVVaWEp0Y3lCaGJtUWdRMjl1CitaR2wwYVc5dWN6b2dhSFIwY0RvdkwzZDNkeTUwWW5NdGFXNTBaWEp1WlhRdVkyOXRMME5CTDNKbGNHOXphWFJ2Citjbmt4R0RBV0JnTlZCQXNURDFSQ1V5QkpUbFJGVWs1RlZDQkRRVEVZTUJZR0ExVUVBeE1QVkVKVElGZzFNRGtnCitRMEVnVTBkRE1CNFhEVEV3TURJeE9EQXdNREF3TUZvWERURXlNREl4T1RJek5UazFPVm93Z2NzeEN6QUpCZ05WCitCQVlUQWtaU01RNHdEQVlEVlFRUkV3VXhOREF3TURFUk1BOEdBMVVFQ0JNSVEyRnNkbUZrYjNNeERUQUxCZ05WCitCQWNUQkVOQlJVNHhHekFaQmdOVkJBa1RFakl5SUhKMVpTQmtaU0JDY21WMFlXZHVaVEVWTUJNR0ExVUVDaE1NCitWRUpUSUVsT1ZFVlNUa1ZVTVJjd0ZRWURWUVFMRXc0d01EQXlJRFEwTURRME16Z3hNREViTUJrR0ExVUVDeE1TCitjMmhoTFRJMU5pQndjbTlrZFdOMGFXOXVNU0F3SGdZRFZRUURFeGR6YUdFeU5UWXVkR0p6TFdsdWRHVnlibVYwCitMbU52YlRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS2J1TThWVDdmMG5udHd1CitOM0Y3djlLSUJsaEtOQXhxQ3J6aU9YVTVpcVV0OEhyUUIzRHRIYmRtSUkrQ3BWVWx3bG1lcHN4Nkcrc3JFWjlhCitNSUdBeTBueGk1YUxiN3dhdGt5SWRQakpUTXZUVUJRLytSUFd6dDVKdFliYlk5QmxKK3ljaTBkY3RQNzRmNE5VCitJU0x0bHJFalViZjJnVG9oTHJjRTAxVGZtT0Y2UERFYkI1UEtEaTM4Y0IzTnpLZml6V2ZyT2FKVzZRMUMxcU9KCit5NC80amtVUkVYMVVGVUl4eng3djYyVmZqWFNHbGNqR3BCWDFmdnRBQlFPU0xlRTBhNmdjaURaczFSRXFyb0ZmCis1ZVh0cVlwaHBUYTE0WjgzSVRYTWZnZzVOemUxVnRNbnpJOVF4NGJsWUJ3NGRnUVZFdUlzWXI3RkRCT0lURHpjCitWRVZYWngwQ0F3RUFBYU9DQWo4d2dnSTdNQjhHQTFVZEl3UVlNQmFBRkFkRWRvV1RLTHgvYlhqU0N1djZURXZmCisyWUlmTUIwR0ExVWREZ1FXQkJTSktJL0FZVkk5UlFOWTBRUElxYzhlajJRaXZUQU9CZ05WSFE4QkFmOEVCQU1DCitCYUF3REFZRFZSMFRBUUgvQkFJd0FEQTBCZ05WSFNVRUxUQXJCZ2dyQmdFRkJRY0RBUVlJS3dZQkJRVUhBd0lHCitDaXNHQVFRQmdqY0tBd01HQ1dDR1NBR0crRUlFQVRCTUJnTlZIU0FFUlRCRE1FRUdDeXNHQVFRQmdPVTNBZ1FCCitNREl3TUFZSUt3WUJCUVVIQWdFV0pHaDBkSEJ6T2k4dmQzZDNMblJpY3kxcGJuUmxjbTVsZEM1amIyMHZRMEV2CitRMUJUTkRCdEJnTlZIUjhFWmpCa01ES2dNS0F1aGl4b2RIUndPaTh2WTNKc0xuUmljeTFwYm5SbGNtNWxkQzVqCitiMjB2VkVKVFdEVXdPVU5CVTBkRExtTnliREF1b0N5Z0tvWW9hSFIwY0RvdkwyTnliQzUwWW5NdGVEVXdPUzVqCitiMjB2VkVKVFdEVXdPVU5CVTBkRExtTnliRENCcGdZSUt3WUJCUVVIQVFFRWdaa3dnWll3T0FZSUt3WUJCUVVICitNQUtHTEdoMGRIQTZMeTlqY25RdWRHSnpMV2x1ZEdWeWJtVjBMbU52YlM5VVFsTllOVEE1UTBGVFIwTXVZM0owCitNRFFHQ0NzR0FRVUZCekFDaGlob2RIUndPaTh2WTNKMExuUmljeTE0TlRBNUxtTnZiUzlVUWxOWU5UQTVRMEZUCitSME11WTNKME1DUUdDQ3NHQVFVRkJ6QUJoaGhvZEhSd09pOHZiMk56Y0M1MFluTXRlRFV3T1M1amIyMHdQd1lECitWUjBSQkRnd05vSVhjMmhoTWpVMkxuUmljeTFwYm5SbGNtNWxkQzVqYjIyQ0czZDNkeTV6YUdFeU5UWXVkR0p6CitMV2x1ZEdWeWJtVjBMbU52YlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUE1TkwwRDRRU3FoRXJobGtkUG16CitYdGlNdmRHTCtaZWhNNGNvVFJJcGFzTS9BZ3QzNlJjME56Q3ZuUXdLRSt3a25nZzFHeTJxZTdRMEUvemlxQnRCCitmWll6ZFZndTF6ZGlMNGtUYWYrd0ZLWUFGR3NGYnllRW1YeXN5K0NNd2FOb0YydnBTakNVMVVENTZiRW5UWC9XCitmeFZaWXh0QlFVcG51MndPc204Y0RadVpSdjlYcllnQWhHajlUdDZGMGFWSFNER241OXV3U2hHMStCVkYvdWp1CitTQ3lQVFRqTDFvYzdZRWxKVXpSL3g0bVFKWXZ0UUk4Z0RJREFHRU9zN3YzUi9nS2E1RU1mYlVRVUk0Qzg0VWJJCitZejA5SmRud3MvTWtDL0htMUJaRXFrODl1N0h2ZnYrb0hxRWIwWGFVbzBURGZzeEUwTTFzTWRuTGI5MVFOUUJtCitVUT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMSBzOi9DPUZSL1NUPUNhbHZhZG9zL0w9Q2Flbi9PPVRCUyBJTlRFUk5FVC9PVT1UZXJtcyBhbmQgQ29uZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRvcnkvT1U9VEJTIElOVEVSTkVUIENBL0NOPVRCUyBYNTA5IENBIFNHQworICAgaTovQz1TRS9PPUFkZFRydXN0IEFCL09VPUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrL0NOPUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3QKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRlZqQ0NCRDZnQXdJQkFnSVFYcERaMEVUSk1WMDJXVHgzR1RuaGhUQU5CZ2txaGtpRzl3MEJBUVVGQURCdgorTVFzd0NRWURWUVFHRXdKVFJURVVNQklHQTFVRUNoTUxRV1JrVkhKMWMzUWdRVUl4SmpBa0JnTlZCQXNUSFVGaworWkZSeWRYTjBJRVY0ZEdWeWJtRnNJRlJVVUNCT1pYUjNiM0pyTVNJd0lBWURWUVFERXhsQlpHUlVjblZ6ZENCRgorZUhSbGNtNWhiQ0JEUVNCU2IyOTBNQjRYRFRBMU1USXdNVEF3TURBd01Gb1hEVEU1TURZeU5ERTVNRFl6TUZvdworZ2NReEN6QUpCZ05WQkFZVEFrWlNNUkV3RHdZRFZRUUlFd2hEWVd4MllXUnZjekVOTUFzR0ExVUVCeE1FUTJGbAorYmpFVk1CTUdBMVVFQ2hNTVZFSlRJRWxPVkVWU1RrVlVNVWd3UmdZRFZRUUxFejlVWlhKdGN5QmhibVFnUTI5dQorWkdsMGFXOXVjem9nYUhSMGNEb3ZMM2QzZHk1MFluTXRhVzUwWlhKdVpYUXVZMjl0TDBOQkwzSmxjRzl6YVhSdgorY25reEdEQVdCZ05WQkFzVEQxUkNVeUJKVGxSRlVrNUZWQ0JEUVRFWU1CWUdBMVVFQXhNUFZFSlRJRmcxTURrZworUTBFZ1UwZERNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXNnT2tPM2Y3d3pONgorck9qZzQ1dFI1dmpCZnpLN3FtVjlJQnhiL1FXOUVFWHhHK0U3Rk5oWnFRTHR3R0JLb1NzSFRuUXFWNzV3V01rMAorOXRpbld2ZnRCa1NwajVzVGkvOGNiekpmVXZUU1ZZaDNReHY2QVZWak1NSC9ydUxqRTZ5KzRQb2FQczhXb1lBUQordHM1UjRaMWc4Yy9XblRlcExzdDJ4MC9XdjdHbXVvUWkrZ1h2SFU2WXJCaXU3WGtlWWh6Yzk1UWR2aVdTSlJEaworb3doYjVLNDNxaGN2alJtQmZPL3BhR2xDbGlER1pwOG1Id3JJMjFtd29iV3BWalR4WlJ3WU8zYmQ0K1RHY0k0RworSWU1d21Id0U4RjdTSzF0Z1NxYkJhY0tqRGE5M2o3dHhLa2Z6L1lkMm43VEdxT1hpSFBzSnBHNjU1dnJLdG5YaworOXZzMXpvRGVKUUlEQVFBQm80SUJsakNDQVpJd0hRWURWUjBPQkJZRUZBZEVkb1dUS0x4L2JYalNDdXY2VEV2ZgorMllJZk1BNEdBMVVkRHdFQi93UUVBd0lCQmpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQU1DQUdBMVVkSlFRWgorTUJjR0Npc0dBUVFCZ2pjS0F3TUdDV0NHU0FHRytFSUVBVEFZQmdOVkhTQUVFVEFQTUEwR0N5c0dBUVFCZ09VMworQWdRQk1Ic0dBMVVkSHdSME1ISXdPS0Eyb0RTR01taDBkSEE2THk5amNtd3VZMjl0YjJSdlkyRXVZMjl0TDBGaworWkZSeWRYTjBSWGgwWlhKdVlXeERRVkp2YjNRdVkzSnNNRGFnTktBeWhqQm9kSFJ3T2k4dlkzSnNMbU52Ylc5aworYnk1dVpYUXZRV1JrVkhKMWMzUkZlSFJsY201aGJFTkJVbTl2ZEM1amNtd3dnWUFHQ0NzR0FRVUZCd0VCQkhRdworY2pBNEJnZ3JCZ0VGQlFjd0FvWXNhSFIwY0RvdkwyTnlkQzVqYjIxdlpHOWpZUzVqYjIwdlFXUmtWSEoxYzNSVgorVkU1VFIwTkRRUzVqY25Rd05nWUlLd1lCQlFVSE1BS0dLbWgwZEhBNkx5OWpjblF1WTI5dGIyUnZMbTVsZEM5QgorWkdSVWNuVnpkRlZVVGxOSFEwTkJMbU55ZERBUkJnbGdoa2dCaHZoQ0FRRUVCQU1DQWdRd0RRWUpLb1pJaHZjTgorQVFFRkJRQURnZ0VCQUsyekV6cytqY0lyVks5b0RrZERaTnZodUJZVGRDZnB4ZkZzK09BdWpXMGJJZkpBeTIzMgorZXVWc25KbTZ1LytPcnFLdWREMnRhZDJCYmVqTExYaE1aVmlhQ21LN0Q5bnJYSHg0dGU1RVA4ckwxOVNVVnFMWQorMXBUbnY1ZGhOZ0VndkE3bjVsSXpEU1lzN3lSTHNyN0hKc1lQcjZTZVlTdVppenlYMVNOejdvb0ozMi9GM1g5OAorUkIwTWxjL0UwT3lPcmtROS95NUlybnBuYVNvcmE4Q25VclY1WE5PZytreUN6OWVkQ3l4NEQ1d1hZY3daUFZXegorOGFEcXF1RVNyZXpQeWp0Zmk0V1JPNHMvVkQzSExadk94ek1yV0FWWUNERzlGeGFPaEYwUUd1dUcxRjdGM0dLVgordjZwck55Q2wwMTZrUmwyajFVVCthN2dMZDhmQTI1QTRDOUU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMiBzOi9DPVNFL089QWRkVHJ1c3QgQUIvT1U9QWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsvQ049QWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdAorICAgaTovQz1VUy9TVD1VVC9MPVNhbHQgTGFrZSBDaXR5L089VGhlIFVTRVJUUlVTVCBOZXR3b3JrL09VPWh0dHA6Ly93d3cudXNlcnRydXN0LmNvbS9DTj1VVE4gLSBEQVRBQ29ycCBTR0MKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVpqQ0NBMDZnQXdJQkFnSVFVU1lLa3h6aWY1ekRwVjk1NEhLdWdqQU5CZ2txaGtpRzl3MEJBUVVGQURDQgora3pFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBbFZVTVJjd0ZRWURWUVFIRXc1VFlXeDBJRXhoYTJVZworUTJsMGVURWVNQndHQTFVRUNoTVZWR2hsSUZWVFJWSlVVbFZUVkNCT1pYUjNiM0pyTVNFd0h3WURWUVFMRXhobworZEhSd09pOHZkM2QzTG5WelpYSjBjblZ6ZEM1amIyMHhHekFaQmdOVkJBTVRFbFZVVGlBdElFUkJWRUZEYjNKdworSUZOSFF6QWVGdzB3TlRBMk1EY3dPREE1TVRCYUZ3MHhPVEEyTWpReE9UQTJNekJhTUc4eEN6QUpCZ05WQkFZVAorQWxORk1SUXdFZ1lEVlFRS0V3dEJaR1JVY25WemRDQkJRakVtTUNRR0ExVUVDeE1kUVdSa1ZISjFjM1FnUlhoMAorWlhKdVlXd2dWRlJRSUU1bGRIZHZjbXN4SWpBZ0JnTlZCQU1UR1VGa1pGUnlkWE4wSUVWNGRHVnlibUZzSUVOQgorSUZKdmIzUXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDMzl4b3o1dklBQkMwNQorNEU1YjdSKzhiQS9OdGZvanRzN2VteEV6bDZRcFRIMlRuNzFLdkpQdEF4cmpqOC9sYlZCYTFwY3BsRnFBc0VsNgorMnk2Vi9iakt2emM0TFI0K2tVR3RjRmJIOEU4LzZES2VkTXJJa0ZUcHhsOFBlSjJhUUR3T3JHR3FYaFNQbm9laAorYWxEYzE1cE9yd1d6cG5HVW5IR3pVR0FLeHhPZE9BZUdBcWpwcUdrbUdKQ3JUTEJQSTZzNlQ0VFkzODZmNFdsdgordTlkQzEydEU1TWV0N20xQlgzSmFjUWczczNsbHBGbWdsRGYzQUM4TndwSnkydEE0Y3RzVXFFWEVYU3A5dDdUVworeE82c3pSTkV0OGtyM1VNQUpmcGh1V2xxV0NNUnQ2Y3pqMVoxV2ZYTktkZEd0d29yWmJiVFFtOFZzcmg3KysvcAorWFZQVk5Gb25BZ01CQUFHamdkZ3dnZFV3SHdZRFZSMGpCQmd3Rm9BVVV6TFJzODkvK3VEeG9GMkZUcExTbmtVZAordEU4d0hRWURWUjBPQkJZRUZLMjltSG8wdENiMytzUW1WTzhEdmVBa3kxUWFNQTRHQTFVZER3RUIvd1FFQXdJQgorQmpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUJFR0NXQ0dTQUdHK0VJQkFRUUVBd0lCQWpBZ0JnTlZIU1VFR1RBWAorQmdvckJnRUVBWUkzQ2dNREJnbGdoa2dCaHZoQ0JBRXdQUVlEVlIwZkJEWXdOREF5b0RDZ0xvWXNhSFIwY0RvdgorTDJOeWJDNTFjMlZ5ZEhKMWMzUXVZMjl0TDFWVVRpMUVRVlJCUTI5eWNGTkhReTVqY213d0RRWUpLb1pJaHZjTgorQVFFRkJRQURnZ0VCQU1idVV4ZG9GTEpSSWg2UVdBMlUvYjN4Y09XR0xjTTJNWTlVU0VibkxRZzN2R3dLWU9FTworclZFMDRCS1Q2YjY0cTdnbXRPbVdQU2lQcm1RSC91QUI3TVhqa2VzWW9QRjFmdHNLNXArUjI2K3VkZDhqa1dqZAorRndCYVMvOWtiSERyQVJyUWtObkhwdFp0OWhQay83WEowaDRxeTdFbFF5WjQyVENiVGcwZXZtbnYzK3IrTGJQTQorK2JEZHRSVEtrZFN5dGFYN0FSbWpSM21mbll5Vmh6VDRIemlTMmphbUVmcHI2MnZwM0VWNEZUa0cxMDFCNUNISQorM0MrSDBiZS9TR0IxcFdMTEpONDdZYUFwSUthK3hXeWN4T2tLYVNMdmtUcjZKcS9SVzBHbk91TDRPQWRDcThGYgorK001dHVnOEVQekkwck53RUtOZHdNQlFtQnNUa201alZ6M2c9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMyBzOi9DPVVTL1NUPVVUL0w9U2FsdCBMYWtlIENpdHkvTz1UaGUgVVNFUlRSVVNUIE5ldHdvcmsvT1U9aHR0cDovL3d3dy51c2VydHJ1c3QuY29tL0NOPVVUTiAtIERBVEFDb3JwIFNHQworICAgaTovQz1VUy9TVD1VVC9MPVNhbHQgTGFrZSBDaXR5L089VGhlIFVTRVJUUlVTVCBOZXR3b3JrL09VPWh0dHA6Ly93d3cudXNlcnRydXN0LmNvbS9DTj1VVE4gLSBEQVRBQ29ycCBTR0MKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRVhqQ0NBMGFnQXdJQkFnSVFSTDRNaTFBQUliUVIweXBvQnFtdGFUQU5CZ2txaGtpRzl3MEJBUVVGQURDQgora3pFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBbFZVTVJjd0ZRWURWUVFIRXc1VFlXeDBJRXhoYTJVZworUTJsMGVURWVNQndHQTFVRUNoTVZWR2hsSUZWVFJWSlVVbFZUVkNCT1pYUjNiM0pyTVNFd0h3WURWUVFMRXhobworZEhSd09pOHZkM2QzTG5WelpYSjBjblZ6ZEM1amIyMHhHekFaQmdOVkJBTVRFbFZVVGlBdElFUkJWRUZEYjNKdworSUZOSFF6QWVGdzA1T1RBMk1qUXhPRFUzTWpGYUZ3MHhPVEEyTWpReE9UQTJNekJhTUlHVE1Rc3dDUVlEVlFRRworRXdKVlV6RUxNQWtHQTFVRUNCTUNWVlF4RnpBVkJnTlZCQWNURGxOaGJIUWdUR0ZyWlNCRGFYUjVNUjR3SEFZRAorVlFRS0V4VlVhR1VnVlZORlVsUlNWVk5VSUU1bGRIZHZjbXN4SVRBZkJnTlZCQXNUR0doMGRIQTZMeTkzZDNjdQorZFhObGNuUnlkWE4wTG1OdmJURWJNQmtHQTFVRUF4TVNWVlJPSUMwZ1JFRlVRVU52Y25BZ1UwZERNSUlCSWpBTgorQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMys1WUVLSXJibFhFanI4dVJnbm40QWdQTGl0NgorRTVRYnZmYTJnSTVsQlpNQUhyeXY0ZytPR1EwU1IreXNyYVA2TG5ENDNtNzdWa0lWbmk1Yzd5UGVJYmtGZGljWgorRDAvV3c1eTB2cFFaWS9LbUVRcnJVMGljdnZJcE94Ym9HcUJNcHNuMEdGbG93SER5VXdEQVhsQ0NwVlp2TnZsSworNEVTR29FMU8xa2R1U1VyTFo5ZW14QVc1amg3MC9QL041emJnbkFWc3NqTWlGZEMwNE13WHdMTEE5UDR5UHlrcQorbFh2WThxZE9EMVI4b1EyQXN3a0R3ZjljM1Y2YVByeXV2RWVLYXE1eHloK3hLcmhmUWdVTDdFWXcwWElMeXVsVworYmZYdjMzaStZYnF5cGE0RVRMeW9yR2tWbDczdjY3U012elg0MU1QUktBNWNPcDl3R0RNZ2Q4U2lyd0lEQVFBQgorbzRHck1JR29NQXNHQTFVZER3UUVBd0lCeGpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJSVAorTXRHenozLzY0UEdnWFlWT2t0S2VSUjIwVHpBOUJnTlZIUjhFTmpBME1ES2dNS0F1aGl4b2RIUndPaTh2WTNKcworTG5WelpYSjBjblZ6ZEM1amIyMHZWVlJPTFVSQlZFRkRiM0p3VTBkRExtTnliREFxQmdOVkhTVUVJekFoQmdncgorQmdFRkJRY0RBUVlLS3dZQkJBR0NOd29EQXdZSllJWklBWWI0UWdRQk1BMEdDU3FHU0liM0RRRUJCUVVBQTRJQgorQVFBbk5aY0Fpb3NvdmNZek1CNHAvT0wzMVpqVVFMdGd5cityRnl3Sk5uOVEra0hjcnBZNkNpTStpVm5Kb3dmdAorR3pldC9IeStVVWxhM2pvS1ZBZ1dSY0tac1lmTmpHamdhUVBweEU2WXNqdU1Gck1Pb0F5WVVKdVRxWEFKeUN5agorajk4QzVPQnhPdkcwSTNLZ3FnSGYzNWcrRkZDZ01TYTlLT2xhTUNaMStYdGdISTN6elZBbWJRUW5tdC9WRFVWSAorS1dzczVuYlpxU2w5TXQzSk5qeTlyalh4RVo0ZHU1QS9Fa2RPanRkK0QySnpIVkltT0J3WVNmMHdkSnJFNVNJdgorMk1DTjdaRjZUQUNQY245ZDJ0MGJpMFZyNTkxcGw2akZWa3dQRFBhZmVwRTM5cGVDNE4xeGFmOTJQMkJOUE0vMworbWZuR1YvVEpWVGw0dWl4NXlhYUlLL1FJCiAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggN2UyMTRlYi4uNTQ2YjQ4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIG9iamVjdCA9IHN1YnR5cGUob2JqZWN0KQogICAgICAgICAgICAgcmVhbHJlc3VsdCA9IGdldGF0dHIob2JqZWN0LCBtZXRob2RuYW1lKSgqYXJncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqZWN0IGlzIG5vdCByZWFscmVzdWx0KQogCiAgICAgIyBjaGVjayB0aGF0IG9iamVjdC5tZXRob2QoKmFyZ3MpIHJhaXNlcyBleGMKICAgICBkZWYgY2hlY2tyYWlzZXMoc2VsZiwgZXhjLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKQEAgLTE4NSw2ICsxODUsOSBAQAogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICcnLCAnZmluZCcsICd4eCcsIDEsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJ3h4Jywgc3lzLm1heGludCwgMCkKIAorICAgICAgICAjIGlzc3VlIDc0NTgKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWInLCAnZmluZCcsICd4eHgnLCBzeXMubWF4c2l6ZSArIDEsIDApCisKICAgICAgICAgIyBGb3IgYSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucywKICAgICAgICAgIyAgICB2ZXJpZnkgdGhhdCBzdHIuZmluZCgpIG1hdGNoZXMgX19jb250YWluc19fCiAgICAgICAgICMgICAgYW5kIHRoYXQgdGhlIGZvdW5kIHN1YnN0cmluZyBpcyByZWFsbHkgYXQgdGhhdCBsb2NhdGlvbgpAQCAtMjA1LDggKzIwOCw3IEBACiAgICAgICAgICAgICAgICAgbG9jID0gaS5maW5kKGopCiAgICAgICAgICAgICAgICAgcjEgPSAobG9jICE9IC0xKQogICAgICAgICAgICAgICAgIHIyID0gaiBpbiBpCi0gICAgICAgICAgICAgICAgaWYgcjEgIT0gcjI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQogICAgICAgICAgICAgICAgIGlmIGxvYyAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpW2xvYzpsb2MrbGVuKGopXSwgaikKIApAQCAtMjMwLDYgKzIzMiwzMyBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JmaW5kJykKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyZmluZCcsIDQyKQogCisgICAgICAgICMgRm9yIGEgdmFyaWV0eSBvZiBjb21iaW5hdGlvbnMsCisgICAgICAgICMgICAgdmVyaWZ5IHRoYXQgc3RyLnJmaW5kKCkgbWF0Y2hlcyBfX2NvbnRhaW5zX18KKyAgICAgICAgIyAgICBhbmQgdGhhdCB0aGUgZm91bmQgc3Vic3RyaW5nIGlzIHJlYWxseSBhdCB0aGF0IGxvY2F0aW9uCisgICAgICAgIGNoYXJzZXQgPSBbJycsICdhJywgJ2InLCAnYyddCisgICAgICAgIGRpZ2l0cyA9IDUKKyAgICAgICAgYmFzZSA9IGxlbihjaGFyc2V0KQorICAgICAgICB0ZXN0c3RyaW5ncyA9IHNldCgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShiYXNlICoqIGRpZ2l0cyk6CisgICAgICAgICAgICBlbnRyeSA9IFtdCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoZGlnaXRzKToKKyAgICAgICAgICAgICAgICBpLCBtID0gZGl2bW9kKGksIGJhc2UpCisgICAgICAgICAgICAgICAgZW50cnkuYXBwZW5kKGNoYXJzZXRbbV0pCisgICAgICAgICAgICB0ZXN0c3RyaW5ncy5hZGQoJycuam9pbihlbnRyeSkpCisgICAgICAgIHRlc3RzdHJpbmdzID0gbGlzdCh0ZXN0c3RyaW5ncykKKyAgICAgICAgZm9yIGkgaW4gdGVzdHN0cmluZ3M6CisgICAgICAgICAgICBpID0gc2VsZi5maXh0eXBlKGkpCisgICAgICAgICAgICBmb3IgaiBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgICAgICBsb2MgPSBpLnJmaW5kKGopCisgICAgICAgICAgICAgICAgcjEgPSAobG9jICE9IC0xKQorICAgICAgICAgICAgICAgIHIyID0gaiBpbiBpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisgICAgICAgICAgICAgICAgaWYgbG9jICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlbbG9jOmxvYytsZW4oaildLCBzZWxmLmZpeHR5cGUoaikpCisKKyAgICAgICAgIyBpc3N1ZSA3NDU4CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2FiJywgJ3JmaW5kJywgJ3h4eCcsIHN5cy5tYXhzaXplICsgMSwgMCkKKwogICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FiY2RlZmdoaWFiYycsICdpbmRleCcsICcnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FiY2RlZmdoaWFiYycsICdpbmRleCcsICdkZWYnKQpAQCAtNjg2LDcgKzcxNSw3IEBACiAgICAgICAgIEVRKCJib2JvYlhib2JvYiIsICJib2JvYm9iWGJvYm9ib2IiLCAicmVwbGFjZSIsICJib2JvYiIsICJib2IiKQogICAgICAgICBFUSgiQk9CT0JPQiIsICJCT0JPQk9CIiwgInJlcGxhY2UiLCAiYm9iIiwgImJvYmJ5IikKIAotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBiYSA9IGJ1ZmZlcignYScpCiAgICAgICAgICAgICBiYiA9IGJ1ZmZlcignYicpCiAgICAgICAgIEVRKCJiYmMiLCAiYWJjIiwgInJlcGxhY2UiLCBiYSwgYmIpCkBAIC0xMDkwLDE1ICsxMTE5LDggQEAKICAgICAgICAgICAgIGZvcm1hdCA9ICclJS4laWYnICUgcHJlYwogICAgICAgICAgICAgdmFsdWUgPSAwLjAxCiAgICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoNjApOgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAzLjE0MTU5MjY1NSAvIDMuMCAqIDEwLjAKLSAgICAgICAgICAgICAgICAjIFRoZSBmb3JtYXRmbG9hdCgpIGNvZGUgaW4gc3RyaW5nb2JqZWN0LmMgYW5kCi0gICAgICAgICAgICAgICAgIyB1bmljb2Rlb2JqZWN0LmMgdXNlcyBhIDEyMCBieXRlIGJ1ZmZlciBhbmQgc3dpdGNoZXMgZnJvbQotICAgICAgICAgICAgICAgICMgJ2YnIGZvcm1hdHRpbmcgdG8gJ2cnIGF0IHByZWNpc2lvbiA1MCwgc28gd2UgZXhwZWN0Ci0gICAgICAgICAgICAgICAgIyBPdmVyZmxvd0Vycm9ycyBmb3IgdGhlIHJhbmdlcyB4IDwgNTAgYW5kIHByZWMgPj0gNjcuCi0gICAgICAgICAgICAgICAgaWYgeCA8IDUwIGFuZCBwcmVjID49IDY3OgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIGZvcm1hdCwgIl9fbW9kX18iLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrY2FsbChmb3JtYXQsICJfX21vZF9fIiwgdmFsdWUpCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDMuMTQxNTkyNjUzNTkgLyAzLjAgKiAxMC4wCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2NhbGwoZm9ybWF0LCAiX19tb2RfXyIsIHZhbHVlKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZV9yZXdyaXRlcyhzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IHN0cmluZ3MgZG9uJ3QgY29weSBhbmQgbW9kaWZ5IGNhY2hlZCBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZ3MKQEAgLTEyMjEsMzQgKzEyNDMsMzQgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgczEgPSBzdWJjbGFzcygiYWJjZCIpCiAgICAgICAgIHMyID0gdCgpLmpvaW4oW3MxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIG5vdCBzMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoczIpIGlzIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB0KQogCiAgICAgICAgIHMxID0gdCgiYWJjZCIpCiAgICAgICAgIHMyID0gdCgpLmpvaW4oW3MxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIHMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgczIpCiAKICAgICAgICAgIyBTaG91bGQgYWxzbyB0ZXN0IG1peGVkLXR5cGUgam9pbi4KICAgICAgICAgaWYgdCBpcyB1bmljb2RlOgogICAgICAgICAgICAgczEgPSBzdWJjbGFzcygiYWJjZCIpCiAgICAgICAgICAgICBzMiA9ICIiLmpvaW4oW3MxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzMSBpcyBub3QgczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMikgaXMgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMikgaXMgdCkKIAogICAgICAgICAgICAgczEgPSB0KCJhYmNkIikKICAgICAgICAgICAgIHMyID0gIiIuam9pbihbczFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIHMyKQogCiAgICAgICAgIGVsaWYgdCBpcyBzdHI6CiAgICAgICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKICAgICAgICAgICAgIHMyID0gdSIiLmpvaW4oW3MxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzMSBpcyBub3QgczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMikgaXMgdW5pY29kZSkgIyBwcm9tb3RlcyEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMikgaXMgdW5pY29kZSkgIyBwcm9tb3RlcyEKIAogICAgICAgICAgICAgczEgPSB0KCJhYmNkIikKICAgICAgICAgICAgIHMyID0gdSIiLmpvaW4oW3MxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzMSBpcyBub3QgczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShzMikgaXMgdW5pY29kZSkgIyBwcm9tb3RlcyEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMikgaXMgdW5pY29kZSkgIyBwcm9tb3RlcyEKIAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIHR5cGUgZm9yIE1peGluU3RyVW5pY29kZVRlc3QgJXIiICUgdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3NpZ2NoaWxkX2lnbm9yZS5weSBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3NpZ2NoaWxkX2lnbm9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDcyYWVjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvc2lnY2hpbGRfaWdub3JlLnB5CkBAIC0wLDAgKzEsNiBAQAoraW1wb3J0IHNpZ25hbCwgc3VicHJvY2Vzcywgc3lzCisjIE9uIExpbnV4IHRoaXMgY2F1c2VzIG9zLndhaXRwaWQgdG8gZmFpbCB3aXRoIE9TRXJyb3IgYXMgdGhlIE9TIGhhcyBhbHJlYWR5CisjIHJlYXBlZCBvdXIgY2hpbGQgcHJvY2Vzcy4gIFRoZSB3YWl0KCkgcGFzc2luZyB0aGUgT1NFcnJvciBvbiB0byB0aGUgY2FsbGVyCisjIGFuZCBjYXVzaW5nIHVzIHRvIGV4aXQgd2l0aCBhbiBlcnJvciBpcyB3aGF0IHdlIGFyZSB0ZXN0aW5nIGFnYWluc3QuCitzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzaWduYWwuU0lHX0lHTikKK3N1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncHJpbnQoImFsYmF0cm9zcyIpJ10pLndhaXQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5CmluZGV4IDlkM2FkMTYuLjY2ZWM4NTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X1NpbXBsZUhUVFBTZXJ2ZXIucHkKQEAgLTIxLDE3ICsyMSwxNyBAQAogCiAgICAgZGVmIHRlc3RfcXVlcnlBcmd1bWVudHMgKHNlbGYpOgogICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnL2ZpbGVuYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQogICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnL2ZpbGVuYW1lP2Zvbz1iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWU/YT1iJnNwYW09ZWdncyN6b3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAKICAgICBkZWYgdGVzdF9zdGFydFdpdGhEb3VibGVTbGFzaCAoc2VsZik6CiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvL2ZpbGVuYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQogICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnLy9maWxlbmFtZT9mb289YmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfU3RyaW5nSU8ucHkgYi9MaWIvdGVzdC90ZXN0X1N0cmluZ0lPLnB5CmluZGV4IDQ3YTA3MTUuLjQ3NzRjNmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfU3RyaW5nSU8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9TdHJpbmdJTy5weQpAQCAtODcsNyArODcsNyBAQAogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3Ioc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB1bmxlc3MgPSBzZWxmLmZhaWxVbmxlc3MKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgIGVxKGl0ZXIoc2VsZi5fZnApLCBzZWxmLl9mcCkKICAgICAgICAgIyBEb2VzIHRoaXMgb2JqZWN0IHN1cHBvcnQgdGhlIGl0ZXJhdGlvbiBwcm90b2NvbD8KICAgICAgICAgdW5sZXNzKGhhc2F0dHIoc2VsZi5fZnAsICdfX2l0ZXJfXycpKQpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTdHJpbmdJTywgVGVzdGNTdHJpbmdJTykKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RCdWZmZXJTdHJpbmdJTywgVGVzdEJ1ZmZlcmNTdHJpbmdJTykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CmluZGV4IDJhN2JjNjMuLjJjNWRiZWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKQEAgLTQsNyArNCwxMiBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgd2FybmluZ3MKKworIyBTZXR1cCBic2RkYiB3YXJuaW5ncwordHJ5OgorICAgIGJzZGRiID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdic2RkYicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2V4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICBwYXNzCiAKIAogY2xhc3MgTm9BbGwoUnVudGltZUVycm9yKToKQEAgLTE4LDkgKzIzLDggQEAKIAogICAgIGRlZiBjaGVja19hbGwoc2VsZiwgbW9kbmFtZSk6CiAgICAgICAgIG5hbWVzID0ge30KLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKiAobW9kdWxlfHBhY2thZ2UpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiLiogKG1vZHVsZXxwYWNrYWdlKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9VHJ1ZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZXhlYyAiaW1wb3J0ICVzIiAlIG1vZG5hbWUgaW4gbmFtZXMKICAgICAgICAgICAgIGV4Y2VwdDoKQEAgLTM1LDcgKzM5LDcgQEAKICAgICAgICAgICAgIGV4ZWMgImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSBpbiBuYW1lcwogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAjIEluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lIGluIHRoZSBleGNlcHRpb24gc3RyaW5nCi0gICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7MH06IHsxfTogezJ9Ii5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7fToge306IHt9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQogICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiBuYW1lczoKICAgICAgICAgICAgIGRlbCBuYW1lc1siX19idWlsdGluc19fIl0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weSBiL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weQppbmRleCA1MGEyYzc0Li4xZDhmOGU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CkBAIC0xNSw3ICsxNSw3IEBACiAgICAgICAgIGZvciBuYW1lIGluIGRpcihfX2Z1dHVyZV9fKToKICAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoX19mdXR1cmVfXywgbmFtZSwgTm9uZSkKICAgICAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvYmosIF9fZnV0dXJlX18uX0ZlYXR1cmUpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIG5hbWUgaW4gZ2l2ZW5fZmVhdHVyZV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCBoYXZlIGJlZW4gaW4gYWxsX2ZlYXR1cmVfbmFtZXMiICUgbmFtZQogICAgICAgICAgICAgICAgICkKQEAgLTMwLDcgKzMwLDcgQEAKICAgICAgICAgICAgIG9wdGlvbmFsID0gdmFsdWUuZ2V0T3B0aW9uYWxSZWxlYXNlKCkKICAgICAgICAgICAgIG1hbmRhdG9yeSA9IHZhbHVlLmdldE1hbmRhdG9yeVJlbGVhc2UoKQogCi0gICAgICAgICAgICBhID0gc2VsZi5hc3NlcnRfCisgICAgICAgICAgICBhID0gc2VsZi5hc3NlcnRUcnVlCiAgICAgICAgICAgICBlID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICAgICAgZGVmIGNoZWNrKHQsIG5hbWUpOgogICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZSh0LCB0dXBsZSksICIlcyBpc24ndCB0dXBsZSIgJSBuYW1lKQpAQCAtNTMsOSArNTMsMTIgQEAKIAogICAgICAgICAgICAgYShoYXNhdHRyKHZhbHVlLCAiY29tcGlsZXJfZmxhZyIpLAogICAgICAgICAgICAgICAgICAgICJmZWF0dXJlIGlzIG1pc3NpbmcgYSAuY29tcGlsZXJfZmxhZyBhdHRyIikKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjb21waWxlIGFjY2VwdHMgdGhlIGZsYWcuCisgICAgICAgICAgICBjb21waWxlKCIiLCAiPHRlc3Q+IiwgImV4ZWMiLCB2YWx1ZS5jb21waWxlcl9mbGFnKQogICAgICAgICAgICAgYShpc2luc3RhbmNlKGdldGF0dHIodmFsdWUsICJjb21waWxlcl9mbGFnIiksIGludCksCiAgICAgICAgICAgICAgICAgICAgIi5jb21waWxlcl9mbGFnIGlzbid0IGludCIpCiAKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnV0dXJlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5CmluZGV4IDY5ZmM2MjUuLmFmY2I5MjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKQEAgLTEsMTMgKzEsMTggQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QKLWZyb20gX2xvY2FsZSBpbXBvcnQgKHNldGxvY2FsZSwgTENfTlVNRVJJQywgUkFESVhDSEFSLCBUSE9VU0VQLCBubF9sYW5naW5mbywKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlY29udiwgRXJyb3IpCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gX2xvY2FsZSBpbXBvcnQgKHNldGxvY2FsZSwgTENfTlVNRVJJQywgbG9jYWxlY29udiwgRXJyb3IpCit0cnk6CisgICAgZnJvbSBfbG9jYWxlIGltcG9ydCAoUkFESVhDSEFSLCBUSE9VU0VQLCBubF9sYW5naW5mbykKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBubF9sYW5naW5mbyA9IE5vbmUKKwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCiBmcm9tIHBsYXRmb3JtIGltcG9ydCB1bmFtZQogCiBpZiB1bmFtZSgpWzBdID09ICJEYXJ3aW4iOgogICAgIG1haiwgbWluLCBtaWMgPSBbaW50KHBhcnQpIGZvciBwYXJ0IGluIHVuYW1lKClbMl0uc3BsaXQoIi4iKV0KICAgICBpZiAobWFqLCBtaW4sIG1pYykgPCAoOCwgMCwgMCk6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJsb2NhbGUgc3VwcG9ydCBicm9rZW4gZm9yIE9TIFggPCAxMC40IikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImxvY2FsZSBzdXBwb3J0IGJyb2tlbiBmb3IgT1MgWCA8IDEwLjQiKQogCiBjYW5kaWRhdGVfbG9jYWxlcyA9IFsnZXNfVVknLCAnZnJfRlInLCAnZmlfRkknLCAnZXNfQ08nLCAncHRfUFQnLCAnaXRfSVQnLAogICAgICdldF9FRScsICdlc19QWScsICdub19OTycsICdubF9OTCcsICdsdl9MVicsICdlbF9HUicsICdiZV9CWScsICdmcl9CRScsCkBAIC0yMCw2ICsyNSwxMyBAQAogICAgICdldV9FUycsICd2aV9WTicsICdhZl9aQScsICduYl9OTycsICdlbl9ESycsICd0Z19USicsICdlbl9VUycsCiAgICAgJ2VzX0VTLklTTzg4NTktMScsICdmcl9GUi5JU084ODU5LTE1JywgJ3J1X1JVLktPSTgtUicsICdrb19LUi5ldWNLUiddCiAKKyMgV29ya2Fyb3VuZCBmb3IgTVNWQzYoZGVidWcpIGNyYXNoIGJ1ZworaWYgIk1TQyB2LjEyMDAiIGluIHN5cy52ZXJzaW9uOgorICAgIGRlZiBhY2NlcHQobG9jKToKKyAgICAgICAgYSA9IGxvYy5zcGxpdCgiLiIpCisgICAgICAgIHJldHVybiBub3QobGVuKGEpID09IDIgYW5kIGxlbihhWy0xXSkgPj0gOSkKKyAgICBjYW5kaWRhdGVfbG9jYWxlcyA9IFtsb2MgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlcyBpZiBhY2NlcHQobG9jKV0KKwogIyBMaXN0IGtub3duIGxvY2FsZSB2YWx1ZXMgdG8gdGVzdCBhZ2FpbnN0IHdoZW4gYXZhaWxhYmxlLgogIyBEaWN0IGZvcm1hdHRlZCBhcyBgYDxsb2NhbGU+IDogKDxkZWNpbWFsX3BvaW50PiwgPHRob3VzYW5kc19zZXA+KWBgLiAgSWYgYQogIyB2YWx1ZSBpcyBub3Qga25vd24sIHVzZSAnJyAuCkBAIC00NywxMiArNTksMTMgQEAKICAgICAgICAga25vd25fdmFsdWUgPSBrbm93bl9udW1lcmljcy5nZXQodXNlZF9sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICcnKSlbZGF0YV90eXBlID09ICd0aG91c2FuZHNfc2VwJ10KICAgICAgICAgaWYga25vd25fdmFsdWUgYW5kIGNhbGNfdmFsdWU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjYWxjX3ZhbHVlLCBrbm93bl92YWx1ZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsY192YWx1ZSwga25vd25fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGNfbnVtZXJpY19lcnJfbXNnICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY192YWx1ZSwga25vd25fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjX3R5cGUsIGRhdGFfdHlwZSwgc2V0X2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfbG9jYWxlKSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG5sX2xhbmdpbmZvLCAibmxfbGFuZ2luZm8gaXMgbm90IGF2YWlsYWJsZSIpCiAgICAgZGVmIHRlc3RfbGNfbnVtZXJpY19ubF9sYW5naW5mbyhzZWxmKToKICAgICAgICAgIyBUZXN0IG5sX2xhbmdpbmZvIGFnYWluc3Qga25vd24gdmFsdWVzCiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CkBAIC03MSwxMCArODQsMTAgQEAKICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQogICAgICAgICAgICAgZXhjZXB0IEVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBmb3IgbGksIGxjIGluICgoUkFESVhDSEFSLCAiZGVjaW1hbF9wb2ludCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUSE9VU0VQLCAidGhvdXNhbmRzX3NlcCIpKToKKyAgICAgICAgICAgIGZvciBsYyBpbiAoImRlY2ltYWxfcG9pbnQiLCAidGhvdXNhbmRzX3NlcCIpOgogICAgICAgICAgICAgICAgIHNlbGYubnVtZXJpY190ZXN0ZXIoJ2xvY2FsZWNvbnYnLCBsb2NhbGVjb252KClbbGNdLCBsYywgbG9jKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobmxfbGFuZ2luZm8sICJubF9sYW5naW5mbyBpcyBub3QgYXZhaWxhYmxlIikKICAgICBkZWYgdGVzdF9sY19udW1lcmljX2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgbmxfbGFuZ2luZm8gYWdhaW5zdCBsb2NhbGVjb252CiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CkBAIC05MCw3ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZXRfbG9jYWxlID0gc2V0bG9jYWxlKExDX05VTUVSSUMpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEVycm9yOgogICAgICAgICAgICAgICAgICAgICBzZXRfbG9jYWxlID0gIjxub3QgYWJsZSB0byBkZXRlcm1pbmU+IgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5sX3JhZGl4Y2hhciwgbGlfcmFkaXhjaGFyLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAobmxfbGFuZ2luZm8pICE9ICVzIChsb2NhbGVjb252KSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2V0IHRvICVzLCB1c2luZyAlcykiICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCkBAIC0xMDksOSArMTIyLDkgQEAKICAgICAgICAgICAgIGlmIGxvYyA9PSAnZXVfRVMnIGFuZCBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXSA9PSAiJyAiOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludChldmFsKCczLjE0JykgKiAxMDApLCAzMTQsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChldmFsKCczLjE0JykgKiAxMDApLCAzMTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBldmFsKCczLjE0JykgZmFpbGVkIGZvciAlcyIgJSBsb2MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnQoZmxvYXQoJzMuMTQnKSAqIDEwMCksIDMxNCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KCczLjE0JykgKiAxMDApLCAzMTQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBmbG9hdCgnMy4xNCcpIGZhaWxlZCBmb3IgJXMiICUgbG9jKQogICAgICAgICAgICAgaWYgbG9jYWxlY29udigpWydkZWNpbWFsX3BvaW50J10gIT0gJy4nOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQppbmRleCAzZTA5NTVmLi42YThjM2ExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FiYy5weQpAQCAtMyw3ICszLDcgQEAKIAogIiIiVW5pdCB0ZXN0cyBmb3IgYWJjLnB5LiIiIgogCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdCwgd2Vha3JlZgogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogaW1wb3J0IGFiYwpAQCAtMTUsMTYgKzE1LDE2IEBACiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19pc2Fic3RyYWN0bWV0aG9kX18sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19pc2Fic3RyYWN0bWV0aG9kX18pCiAgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGJhciwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYmFyLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iKSkKIAogICAgIGRlZiB0ZXN0X2Fic3RyYWN0cHJvcGVydHlfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0cHJvcGVydHkKICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXykKICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIoYmFyLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihiYXIsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIpKQogCiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKQEAgLTQ0LDIzICs0NCwyMyBAQAogICAgICAgICAgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MgICMgY29uY3JldGUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX2Fic3RyYWN0bWV0aG9kc19fLCBzZXQoWyJmb28iXSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMpICAjIGJlY2F1c2UgZm9vIGlzIGFic3RyYWN0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNhYnN0cmFjdChDKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2Fic3RyYWN0KEMpKQogICAgICAgICAgICAgY2xhc3MgRChDKToKICAgICAgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzICAjIGNvbmNyZXRlIG92ZXJyaWRlIG9mIGNvbmNyZXRlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KFsiZm9vIl0pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEKSAgIyBiZWNhdXNlIGZvbyBpcyBzdGlsbCBhYnN0cmFjdAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzYWJzdHJhY3QoRCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnN0cmFjdChEKSkKICAgICAgICAgICAgIGNsYXNzIEUoRCk6CiAgICAgICAgICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFLl9fYWJzdHJhY3RtZXRob2RzX18sIHNldCgpKQogICAgICAgICAgICAgRSgpICAjIG5vdyBmb28gaXMgY29uY3JldGUsIHRvbwotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNhYnN0cmFjdChFKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnN0cmFjdChFKSkKICAgICAgICAgICAgIGNsYXNzIEYoRSk6CiAgICAgICAgICAgICAgICAgQGFic3RyYWN0dGhpbmcKICAgICAgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzICAjIGFic3RyYWN0IG92ZXJyaWRlIG9mIGNvbmNyZXRlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KFsiYmFyIl0pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGKSAgIyBiZWNhdXNlIGJhciBpcyBhYnN0cmFjdCBub3cKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2Fic3RyYWN0KEYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzdHJhY3QoRikpCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19vbGRzdHlsZV9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQToKQEAgLTg3LDIyICs4NywyMiBAQAogICAgICAgICBjbGFzcyBCKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGIgPSBCKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEIsIEEpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEIsIChBLCkpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGIsIEEpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGIsIChBLCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShiLCBBKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoYiwgKEEsKSkKICAgICAgICAgQS5yZWdpc3RlcihCKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoQiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhCLCAoQSwpKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGIsIEEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgKEEsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCAoQSwpKQogICAgICAgICBjbGFzcyBDKEIpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBjID0gQygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhDLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEMsIChBLCkpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYywgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShjLCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIChBLCkpCiAKICAgICBkZWYgdGVzdF9pc2luc3RhbmNlX2ludmFsaWRhdGlvbihzZWxmKToKICAgICAgICAgY2xhc3MgQToKQEAgLTExMCwyNyArMTEwLDI3IEBACiAgICAgICAgIGNsYXNzIEIob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYiA9IEIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgQSksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgKEEsKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKICAgICAgICAgQS5yZWdpc3RlcihCKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIChBLCkpKQogCiAgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX2J1aWx0aW5zKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCiAgICAgICAgIEEucmVnaXN0ZXIoaW50KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIEEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIChBLCkpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoaW50LCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKGludCwgKEEsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCAoQSwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIChBLCkpKQogICAgICAgICBjbGFzcyBCKEEpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBCLnJlZ2lzdGVyKGJhc2VzdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgiIiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgiIiwgKEEsKSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhzdHIsIEEpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3Moc3RyLCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCIiLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoIiIsIChBLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgKEEsKSkpCiAKICAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fZWRnZV9jYXNlcyhzZWxmKToKICAgICAgICAgY2xhc3MgQToKQEAgLTE0OSw0NCArMTQ5LDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgQy5yZWdpc3RlciwgQSkgICMgY3ljbGVzIG5vdCBhbGxvd2VkCiAgICAgICAgIEMucmVnaXN0ZXIoQikgICMgb2sKIAorICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX25vbl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgIkNhbiBvbmx5IHJlZ2lzdGVyIGNsYXNzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBLnJlZ2lzdGVyLCA0KQorCiAgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX3RyYW5zaXRpdmVuZXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEEsIEEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhBLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQSwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEEsIChBLCkpKQogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoQSwgQikpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoQSwgKEIsKSkpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoQiwgQSkpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoQiwgKEEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhBLCBCKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEEsIChCLCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhCLCAoQSwpKSkKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQogICAgICAgICBBLnJlZ2lzdGVyKEIpCiAgICAgICAgIGNsYXNzIEIxKEIpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhCMSwgQSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEIxLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQjEsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCMSwgKEEsKSkpCiAgICAgICAgIGNsYXNzIEMxKEMpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBCMS5yZWdpc3RlcihDMSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhDLCBCKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhDLCAoQiwpKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhDLCBCMSkpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoQywgKEIxLCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhDMSwgQSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMxLCAoQSwpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoQzEsIEIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhDMSwgKEIsKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMxLCBCMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMxLCAoQjEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBCKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIChCLCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgQjEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgKEIxLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCBCMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQjEsKSkpCiAgICAgICAgIEMxLnJlZ2lzdGVyKGludCkKICAgICAgICAgY2xhc3MgTXlJbnQoaW50KToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoTXlJbnQsIEEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhNeUludCwgKEEsKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKDQyLCBBKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoNDIsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhNeUludCwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE15SW50LCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIChBLCkpCiAKICAgICBkZWYgdGVzdF9hbGxfbmV3X21ldGhvZHNfYXJlX2NhbGxlZChzZWxmKToKICAgICAgICAgY2xhc3MgQToKQEAgLTIwMiw2ICsyMDgsMjIgQEAKICAgICAgICAgQygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQi5jb3VudGVyLCAxKQogCisgICAgZGVmIHRlc3RfY2FjaGVfbGVhayhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzI1MjEuCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgQS5mKHNlbGYpCisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihDKQorICAgICAgICAjIFRyaWdnZXIgY2FjaGUuCisgICAgICAgIEMoKS5mKCkKKyAgICAgICAgZGVsIEMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFCQykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWJzdHJhY3RfbnVtYmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJzdHJhY3RfbnVtYmVycy5weQppbmRleCAwMzRmYjUyLi45MjVmOGNmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5CkBAIC0xLDE2ICsxLDE0IEBACiAiIiJVbml0IHRlc3RzIGZvciBudW1iZXJzLnB5LiIiIgogCiBpbXBvcnQgbWF0aAotaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gbnVtYmVycyBpbXBvcnQgQ29tcGxleCwgUmVhbCwgUmF0aW9uYWwsIEludGVncmFsCi1mcm9tIG51bWJlcnMgaW1wb3J0IE51bWJlcgogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogY2xhc3MgVGVzdE51bWJlcnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2ludChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoaW50LCBJbnRlZ3JhbCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGludCwgQ29tcGxleCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgSW50ZWdyYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIENvbXBsZXgpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgaW50KDcpLnJlYWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaW50KDcpLmltYWcpCkBAIC0xOSw4ICsxNyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaW50KDcpLmRlbm9taW5hdG9yKQogCiAgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MobG9uZywgSW50ZWdyYWwpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhsb25nLCBDb21wbGV4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobG9uZywgSW50ZWdyYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhsb25nLCBDb21wbGV4KSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGxvbmcoNykucmVhbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsb25nKDcpLmltYWcpCkBAIC0yOSwxNiArMjcsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb25nKDcpLmRlbm9taW5hdG9yKQogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoZmxvYXQsIFJhdGlvbmFsKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoZmxvYXQsIFJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoZmxvYXQsIFJhdGlvbmFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZmxvYXQsIFJlYWwpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNy4zLCBmbG9hdCg3LjMpLnJlYWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZmxvYXQoNy4zKS5pbWFnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcuMywgZmxvYXQoNy4zKS5jb25qdWdhdGUoKSkKIAogICAgIGRlZiB0ZXN0X2NvbXBsZXgoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoY29tcGxleCwgUmVhbCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGNvbXBsZXgsIENvbXBsZXgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoY29tcGxleCwgUmVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGNvbXBsZXgsIENvbXBsZXgpKQogCiAgICAgICAgIGMxLCBjMiA9IGNvbXBsZXgoMywgMiksIGNvbXBsZXgoNCwxKQogICAgICAgICAjIFhYWDogVGhpcyBpcyBub3QgaWRlYWwsIGJ1dCBzZWUgdGhlIGNvbW1lbnQgaW4gbWF0aF90cnVuYygpLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hZXBhY2sucHkgYi9MaWIvdGVzdC90ZXN0X2FlcGFjay5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IGM0NGYxZWYuLmY0ZWEyNWIKLS0tIGEvTGliL3Rlc3QvdGVzdF9hZXBhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hZXBhY2sucHkKQEAgLTEsMTEgKzEsMTIgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGFlcGFjawotaW1wb3J0IGFldHlwZXMKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAorYWV0eXBlcyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdhZXR5cGVzJykKK2FlcGFjayA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdhZXBhY2snKQorCiBjbGFzcyBUZXN0QWVwYWNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPQkpFQ1RTID0gWwogICAgICAgICBhZXR5cGVzLkVudW0oJ2VudW0nKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQppbmRleCBkNmI3OTQyLi5jYmYwMGU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CkBAIC0xLDUgKzEsNiBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdCwgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcwogCiBpbXBvcnQgYWlmYwogCkBAIC03LDE2ICs4LDI5IEBACiBjbGFzcyBBSUZDVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZiA9IHNlbGYuZm91dCA9IE5vbmUKICAgICAgICAgc2VsZi5zbmRmaWxlcGF0aCA9IGZpbmRmaWxlKCdTaW5lLTEwMDBIei0zMDBtcy5haWYnKQogCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLmZvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5mb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoYWlmYy5FcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9za2lwdW5rbm93bihzZWxmKToKICAgICAgICAgI0lzc3VlIDIyNDUKICAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgotICAgICAgICBmID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKIAogICAgIGRlZiB0ZXN0X3BhcmFtcyhzZWxmKToKLSAgICAgICAgZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIDQ4MDAwKQpAQCAtMjQsMTAgKzM4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksICdOT05FJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXBuYW1lKCksICdub3QgY29tcHJlc3NlZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRwYXJhbXMoKSwgKDIsIDIsIDQ4MDAwLCAxNDQwMCwgJ05PTkUnLCAnbm90IGNvbXByZXNzZWQnKSkKLSAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgotICAgICAgICBmID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDAwXHgwMFx4MDBceDAwXHgwYlx4ZDRceDBiXHhkNCcpCiAgICAgICAgIGYucmV3aW5kKCkKQEAgLTQxLDkgKzU0LDQyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCAnXHgxN3RceDE3dCJceGFkIlx4YWQnKQogICAgICAgICBmLnNldHBvcyhwb3MwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKLSAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAjWFhYIE5lZWQgbW9yZSB0ZXN0cyEKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZm91dC5haWZjKCkKKyAgICAgICAgZm91dC5zZXRwYXJhbXMoZi5nZXRwYXJhbXMoKSkKKyAgICAgICAgZm9yIGZyYW1lIGluIHJhbmdlKGYuZ2V0bmZyYW1lcygpKToKKyAgICAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZi5yZWFkZnJhbWVzKDEpKQorICAgICAgICBmb3V0LmNsb3NlKCkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYucmV3aW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpLCBmb3V0LmdldHBhcmFtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyg1KSwgZm91dC5yZWFkZnJhbWVzKDUpKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICd3YicpCisgICAgICAgIGZvdXQuYWlmYygpCisgICAgICAgIGZvdXQuc2V0bmNoYW5uZWxzKGYuZ2V0bmNoYW5uZWxzKCkpCisgICAgICAgIGZvdXQuc2V0c2FtcHdpZHRoKGYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIGZvdXQuc2V0ZnJhbWVyYXRlKGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIGZvdXQuc2V0Y29tcHR5cGUoJ1VMQVcnLCAnZm9vJykKKyAgICAgICAgZm9yIGZyYW1lIGluIHJhbmdlKGYuZ2V0bmZyYW1lcygpKToKKyAgICAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZi5yZWFkZnJhbWVzKDEpKQorICAgICAgICBmb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAgICAgICAgICAgb3Muc3RhdChURVNURk4pLnN0X3NpemUsCisgICAgICAgICAgICBvcy5zdGF0KHNlbGYuc25kZmlsZXBhdGgpLnN0X3NpemUqMC43NSwKKyAgICAgICAgICAgICkKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYucmV3aW5kKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpWzA6M10sIGZvdXQuZ2V0cGFyYW1zKClbMDozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3V0LmdldGNvbXB0eXBlKCksICdVTEFXJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3V0LmdldGNvbXBuYW1lKCksICdmb28nKQorICAgICAgICAjIFhYWDogdGhpcyB0ZXN0IGZhaWxzLCBub3Qgc3VyZSBpZiBpdCBzaG91bGQgc3VjY2VlZCBvciBub3QKKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyg1KSwgZm91dC5yZWFkZnJhbWVzKDUpKQogCiAgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CiAgICAgICAgIGNsYXNzIFdyYXBmaWxlKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcHBsZXNpbmdsZS5weQppbmRleCBlOTE1MDI4Li4xYmVmZmUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXBwbGVzaW5nbGUucHkKQEAgLTEsMTIgKzEsMTIgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IG1hY29zdG9vbHMKLWltcG9ydCBDYXJib24uRmlsZQotaW1wb3J0IE1hY09TCiBpbXBvcnQgb3MKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgc3RydWN0CisKK01hY09TID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ01hY09TJykKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgZXhpc3QgaWYgTWFjT1MgZG9lcy4KIGltcG9ydCBhcHBsZXNpbmdsZQogCiBBU19NQUdJQz0weDAwMDUxNjAwCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmM4NWExCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMCwwICsxLDQzOTYgQEAKKyMgQXV0aG9yOiBTdGV2ZW4gSi4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPi4KKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBhcmdwYXJzZQorCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitjbGFzcyBTdGRJT0J1ZmZlcihTdHJpbmdJTyk6CisgICAgcGFzcworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgb2JqMSwgb2JqMik6CisgICAgICAgIGlmIG9iajEgIT0gb2JqMjoKKyAgICAgICAgICAgIHByaW50KCcnKQorICAgICAgICAgICAgcHJpbnQocmVwcihvYmoxKSkKKyAgICAgICAgICAgIHByaW50KHJlcHIob2JqMikpCisgICAgICAgICAgICBwcmludChvYmoxKQorICAgICAgICAgICAgcHJpbnQob2JqMikKKyAgICAgICAgc3VwZXIoVGVzdENhc2UsIHNlbGYpLmFzc2VydEVxdWFsKG9iajEsIG9iajIpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlIHRlc3RzIGFzc3VtZSB0aGF0IGxpbmUgd3JhcHBpbmcgb2NjdXJzIGF0IDgwIGNvbHVtbnMsIGJ1dCB0aGlzCisgICAgICAgICMgYmVoYXZpb3VyIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIENPTFVNTlMgZW52aXJvbm1lbnQKKyAgICAgICAgIyB2YXJpYWJsZS4gIFRvIGVuc3VyZSB0aGF0IHRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlLCB1bnNldCBDT0xVTU5TLgorICAgICAgICBlbnYgPSB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIGVudi51bnNldCgiQ09MVU1OUyIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChlbnYuX19leGl0X18pCisKKworY2xhc3MgVGVtcERpck1peGluKG9iamVjdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5vbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi50ZW1wX2RpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIsIFRydWUpCisKKyAgICBkZWYgY3JlYXRlX3JlYWRvbmx5X2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZW5hbWUpCisgICAgICAgIG9zLmNobW9kKGZpbGVfcGF0aCwgc3RhdC5TX0lSRUFEKQorCitjbGFzcyBTaWcob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisKKworY2xhc3MgTlMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc29ydGVkX2l0ZW1zID0gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSkKKyAgICAgICAga3dhcmdfc3RyID0gJywgJy5qb2luKFsnJXM9JXInICUgdHVwIGZvciB0dXAgaW4gc29ydGVkX2l0ZW1zXSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGt3YXJnX3N0cikKKworICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworCitjbGFzcyBBcmd1bWVudFBhcnNlckVycm9yKEV4Y2VwdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBlcnJvcl9jb2RlPU5vbmUpOgorICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbWVzc2FnZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKyAgICAgICAgc2VsZi5lcnJvcl9jb2RlID0gZXJyb3JfY29kZQorCisKK2RlZiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKHBhcnNlX2FyZ3MsICphcmdzLCAqKmt3YXJncyk6CisgICAgIyBpZiB0aGlzIGlzIGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseSBhbmQgc3RkZXJyIG9yIHN0ZG91dCBpcyBhbHJlYWR5IGJlaW5nCisgICAgIyByZWRpcmVjdGVkLCBzaW1wbHkgY2FsbCB0aGUgZnVuY3Rpb24gYW5kIGxldCB0aGUgZW5jbG9zaW5nIGZ1bmN0aW9uCisgICAgIyBjYXRjaCB0aGUgZXhjZXB0aW9uCisgICAgaWYgaXNpbnN0YW5jZShzeXMuc3RkZXJyLCBTdGRJT0J1ZmZlcikgb3IgaXNpbnN0YW5jZShzeXMuc3Rkb3V0LCBTdGRJT0J1ZmZlcik6CisgICAgICAgIHJldHVybiBwYXJzZV9hcmdzKCphcmdzLCAqKmt3YXJncykKKworICAgICMgaWYgdGhpcyBpcyBub3QgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5LCByZWRpcmVjdCBzdGRlcnIgYW5kCisgICAgIyB1c2UgaXQgYXMgdGhlIEFyZ3VtZW50UGFyc2VyRXJyb3IgbWVzc2FnZQorICAgIG9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICBzeXMuc3Rkb3V0ID0gU3RkSU9CdWZmZXIoKQorICAgIHN5cy5zdGRlcnIgPSBTdGRJT0J1ZmZlcigpCisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZV9hcmdzKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGZvciBrZXkgaW4gbGlzdCh2YXJzKHJlc3VsdCkpOgorICAgICAgICAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCBrZXkpIGlzIHN5cy5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIocmVzdWx0LCBrZXksIG9sZF9zdGRvdXQpCisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsIGtleSkgaXMgc3lzLnN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIGtleSwgb2xkX3N0ZGVycikKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICBjb2RlID0gc3lzLmV4Y19pbmZvKClbMV0uY29kZQorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzdGRlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoIlN5c3RlbUV4aXQiLCBzdGRvdXQsIHN0ZGVyciwgY29kZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkX3N0ZG91dAorICAgICAgICBzeXMuc3RkZXJyID0gb2xkX3N0ZGVycgorCisKK2NsYXNzIEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKKworICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikucGFyc2VfYXJncworICAgICAgICByZXR1cm4gc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihwYXJzZV9hcmdzLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZXhpdChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBleGl0ID0gc3VwZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIsIHNlbGYpLmV4aXQKKyAgICAgICAgcmV0dXJuIHN0ZGVycl90b19wYXJzZXJfZXJyb3IoZXhpdCwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGVycm9yID0gc3VwZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIsIHNlbGYpLmVycm9yCisgICAgICAgIHJldHVybiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKGVycm9yLCAqYXJncywgKiprd2FyZ3MpCisKKworY2xhc3MgUGFyc2VyVGVzdGVyTWV0YWNsYXNzKHR5cGUpOgorICAgICIiIkFkZHMgcGFyc2VyIHRlc3RzIHVzaW5nIHRoZSBjbGFzcyBhdHRyaWJ1dGVzLgorCisgICAgQ2xhc3NlcyBvZiB0aGlzIHR5cGUgc2hvdWxkIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyAtLSBhIGxpc3Qgb2YgU2lnIG9iamVjdHMgd2hpY2ggc3BlY2lmeQorICAgICAgICB0aGUgc2lnbmF0dXJlcyBvZiBBcmd1bWVudCBvYmplY3RzIHRvIGJlIGNyZWF0ZWQKKyAgICBmYWlsdXJlcyAtLSBhIGxpc3Qgb2YgYXJncyBsaXN0cyB0aGF0IHNob3VsZCBjYXVzZSB0aGUgcGFyc2VyCisgICAgICAgIHRvIGZhaWwKKyAgICBzdWNjZXNzZXMgLS0gYSBsaXN0IG9mIChpbml0aWFsX2FyZ3MsIG9wdGlvbnMsIHJlbWFpbmluZ19hcmdzKSB0dXBsZXMKKyAgICAgICAgd2hlcmUgaW5pdGlhbF9hcmdzIHNwZWNpZmllcyB0aGUgc3RyaW5nIGFyZ3MgdG8gYmUgcGFyc2VkLAorICAgICAgICBvcHRpb25zIGlzIGEgZGljdCB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdmFycygpIG9mIHRoZSBvcHRpb25zCisgICAgICAgIHBhcnNlZCBvdXQgb2YgaW5pdGlhbF9hcmdzLCBhbmQgcmVtYWluaW5nX2FyZ3Mgc2hvdWxkIGJlIGFueQorICAgICAgICByZW1haW5pbmcgdW5wYXJzZWQgYXJndW1lbnRzCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYm9keWRpY3QpOgorICAgICAgICBpZiBuYW1lID09ICdQYXJzZXJUZXN0Q2FzZSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGRlZmF1bHQgcGFyc2VyIHNpZ25hdHVyZSBpcyBlbXB0eQorICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICdwYXJzZXJfc2lnbmF0dXJlJyk6CisgICAgICAgICAgICBjbHMucGFyc2VyX3NpZ25hdHVyZSA9IFNpZygpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BhcnNlcl9jbGFzcycpOgorICAgICAgICAgICAgY2xzLnBhcnNlcl9jbGFzcyA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyCisKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBmdW5jdGlvbnMgZm9yIGFkZGluZyBvcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZGVmIG5vX2dyb3VwcyhwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGFsbCBhcmd1bWVudHMgZGlyZWN0bHkgdG8gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZm9yIHNpZyBpbiBhcmd1bWVudF9zaWduYXR1cmVzOgorICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoKnNpZy5hcmdzLCAqKnNpZy5rd2FyZ3MpCisKKyAgICAgICAgZGVmIG9uZV9ncm91cChwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGFsbCBhcmd1bWVudHMgdW5kZXIgYSBzaW5nbGUgZ3JvdXAgaW4gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdmb28nKQorICAgICAgICAgICAgZm9yIHNpZyBpbiBhcmd1bWVudF9zaWduYXR1cmVzOgorICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICBkZWYgbWFueV9ncm91cHMocGFyc2VyLCBhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICIiIkFkZCBlYWNoIGFyZ3VtZW50IGluIGl0cyBvd24gZ3JvdXAgdG8gdGhlIHBhcnNlciIiIgorICAgICAgICAgICAgZm9yIGksIHNpZyBpbiBlbnVtZXJhdGUoYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdmb286JWknICUgaSkKKyAgICAgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoKnNpZy5hcmdzLCAqKnNpZy5rd2FyZ3MpCisKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGZ1bmN0aW9ucyBmb3IgcGFyc2luZyBhcmdzCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZGVmIGxpc3RhcmdzKHBhcnNlciwgYXJncyk6CisgICAgICAgICAgICAiIiJQYXJzZSB0aGUgYXJncyBieSBwYXNzaW5nIGluIGEgbGlzdCIiIgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisKKyAgICAgICAgZGVmIHN5c2FyZ3MocGFyc2VyLCBhcmdzKToKKyAgICAgICAgICAgICIiIlBhcnNlIHRoZSBhcmdzIGJ5IGRlZmF1bHRpbmcgdG8gc3lzLmFyZ3YiIiIKKyAgICAgICAgICAgIG9sZF9zeXNfYXJndiA9IHN5cy5hcmd2CisgICAgICAgICAgICBzeXMuYXJndiA9IFtvbGRfc3lzX2FyZ3ZbMF1dICsgYXJncworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN5cy5hcmd2ID0gb2xkX3N5c19hcmd2CisKKyAgICAgICAgIyBjbGFzcyB0aGF0IGhvbGRzIHRoZSBjb21iaW5hdGlvbiBvZiBvbmUgb3B0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgIyBhZGRpdGlvbiBtZXRob2QgYW5kIG9uZSBhcmcgcGFyc2luZyBtZXRob2QKKyAgICAgICAgY2xhc3MgQWRkVGVzdHMob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rlcl9jbHMsIGFkZF9hcmd1bWVudHMsIHBhcnNlX2FyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9hcmd1bWVudHMgPSBhZGRfYXJndW1lbnRzCisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfYXJncyA9IHBhcnNlX2FyZ3MKKworICAgICAgICAgICAgICAgIGFkZF9hcmd1bWVudHNfbmFtZSA9IHNlbGYuX2FkZF9hcmd1bWVudHMuX19uYW1lX18KKyAgICAgICAgICAgICAgICBwYXJzZV9hcmdzX25hbWUgPSBzZWxmLl9wYXJzZV9hcmdzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgZm9yIHRlc3RfZnVuYyBpbiBbc2VsZi50ZXN0X2ZhaWx1cmVzLCBzZWxmLnRlc3Rfc3VjY2Vzc2VzXToKKyAgICAgICAgICAgICAgICAgICAgZnVuY19uYW1lID0gdGVzdF9mdW5jLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgIG5hbWVzID0gZnVuY19uYW1lLCBhZGRfYXJndW1lbnRzX25hbWUsIHBhcnNlX2FyZ3NfbmFtZQorICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSAnXycuam9pbihuYW1lcykKKworICAgICAgICAgICAgICAgICAgICBkZWYgd3JhcHBlcihzZWxmLCB0ZXN0X2Z1bmM9dGVzdF9mdW5jKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZnVuYyhzZWxmKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdGVyX2NscywgdGVzdF9uYW1lLCB3cmFwcGVyKQorCisgICAgICAgICAgICBkZWYgX2dldF9wYXJzZXIoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBhcmdzID0gdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUuYXJncworICAgICAgICAgICAgICAgIGt3YXJncyA9IHRlc3Rlci5wYXJzZXJfc2lnbmF0dXJlLmt3YXJncworICAgICAgICAgICAgICAgIHBhcnNlciA9IHRlc3Rlci5wYXJzZXJfY2xhc3MoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9hcmd1bWVudHMocGFyc2VyLCB0ZXN0ZXIuYXJndW1lbnRfc2lnbmF0dXJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2ZhaWx1cmVzKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3Nfc3RyIGluIHRlc3Rlci5mYWlsdXJlczoKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Nfc3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VzID0gdGVzdGVyLmFzc2VydFJhaXNlcworICAgICAgICAgICAgICAgICAgICByYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3N1Y2Nlc3NlcyhzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQorICAgICAgICAgICAgICAgIGZvciBhcmdzLCBleHBlY3RlZF9ucyBpbiB0ZXN0ZXIuc3VjY2Vzc2VzOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIHN0cik6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9ucyA9IHNlbGYuX3BhcnNlX2FyZ3MocGFyc2VyLCBhcmdzKQorICAgICAgICAgICAgICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfbnMsIHJlc3VsdF9ucykKKworICAgICAgICAjIGFkZCB0ZXN0cyBmb3IgZWFjaCBjb21iaW5hdGlvbiBvZiBhbiBvcHRpb25hbHMgYWRkaW5nIG1ldGhvZAorICAgICAgICAjIGFuZCBhbiBhcmcgcGFyc2luZyBtZXRob2QKKyAgICAgICAgZm9yIGFkZF9hcmd1bWVudHMgaW4gW25vX2dyb3Vwcywgb25lX2dyb3VwLCBtYW55X2dyb3Vwc106CisgICAgICAgICAgICBmb3IgcGFyc2VfYXJncyBpbiBbbGlzdGFyZ3MsIHN5c2FyZ3NdOgorICAgICAgICAgICAgICAgIEFkZFRlc3RzKGNscywgYWRkX2FyZ3VtZW50cywgcGFyc2VfYXJncykKKworYmFzZXMgPSBUZXN0Q2FzZSwKK1BhcnNlclRlc3RDYXNlID0gUGFyc2VyVGVzdGVyTWV0YWNsYXNzKCdQYXJzZXJUZXN0Q2FzZScsIGJhc2VzLCB7fSkKKworIyA9PT09PT09PT09PT09PT0KKyMgT3B0aW9uYWxzIHRlc3RzCisjID09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgc2luZ2xlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JyldCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EnLCAnLS1mb28nLCAnLXggLS1mb28nLCAnLXggLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD0nYScpKSwKKyAgICAgICAgKCcteGEnLCBOUyh4PSdhJykpLAorICAgICAgICAoJy14IC0xJywgTlMoeD0nLTEnKSksCisgICAgICAgICgnLXgtMScsIE5TKHg9Jy0xJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaENvbWJpbmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLXl5eScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgICAgIFNpZygnLXonKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1mb28nLCAnLXhhJywgJy14IC0tZm9vJywgJy14IC16JywgJy16IC14JywKKyAgICAgICAgICAgICAgICAnLXl4JywgJy15eiBhJywgJy15eXl4JywgJy15eXl6YScsICcteHl6YSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9Tm9uZSkpLAorICAgICAgICAoJy16YScsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy16IGEnLCBOUyh4PUZhbHNlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteHphJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteHogYScsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXggLXphJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteCAteiBhJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteScsIE5TKHg9RmFsc2UsIHl5eT00Miwgej1Ob25lKSksCisgICAgICAgICgnLXl5eScsIE5TKHg9RmFsc2UsIHl5eT00Miwgej1Ob25lKSksCisgICAgICAgICgnLXggLXl5eSAtemEnLCBOUyh4PVRydWUsIHl5eT00Miwgej0nYScpKSwKKyAgICAgICAgKCcteCAteXl5IC16IGEnLCBOUyh4PVRydWUsIHl5eT00Miwgej0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hMb25nKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBtdWx0aS1jaGFyYWN0ZXIgc2luZ2xlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy1mb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnLWZvbycsICdhJywgJy0tZm9vJywgJy1mb28gLS1mb28nLCAnLWZvbyAteScsICctZm9vYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lKSksCisgICAgICAgICgnLWZvbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy1mb28gLTEnLCBOUyhmb289Jy0xJykpLAorICAgICAgICAoJy1mbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy1mIGEnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoU3Vic2V0QW1iaWd1b3VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IE9wdGlvbmFscyB3aGVyZSBvcHRpb24gc3RyaW5ncyBhcmUgc3Vic2V0cyBvZiBlYWNoIG90aGVyIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWYnKSwgU2lnKCctZm9vYmFyJyksIFNpZygnLWZvb3JhYicpXQorICAgIGZhaWx1cmVzID0gWyctZicsICctZm9vJywgJy1mbycsICctZm9vIGInLCAnLWZvb2InLCAnLWZvb2JhJywgJy1mb29yYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9Tm9uZSwgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWYgYScsIE5TKGY9J2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZmEnLCBOUyhmPSdhJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvYScsIE5TKGY9J29hJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb2EnLCBOUyhmPSdvb2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYmFyIGEnLCBOUyhmPU5vbmUsIGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhYiBhJywgTlMoZj1Ob25lLCBmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaEFtYmlndW91cyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBPcHRpb25hbHMgdGhhdCBwYXJ0aWFsbHkgbWF0Y2ggYnV0IGFyZSBub3Qgc3Vic2V0cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy1mb29iYXInKSwgU2lnKCctZm9vcmFiJyldCisgICAgZmFpbHVyZXMgPSBbJy1mJywgJy1mIGEnLCAnLWZhJywgJy1mb2EnLCAnLWZvbycsICctZm8nLCAnLWZvbyBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb2IgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3IgYScsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgICAgICgnLWZvb2JhIGEnLCBOUyhmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yYSBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICAgICAgKCctZm9vYmFyIGEnLCBOUyhmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yYWIgYScsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOdW1lcmljKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaG9ydCBvcHQgc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLTEnLCBkZXN0PSdvbmUnKV0KKyAgICBmYWlsdXJlcyA9IFsnLTEnLCAnYScsICctMSAtLWZvbycsICctMSAteScsICctMSAtMScsICctMSAtMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKG9uZT1Ob25lKSksCisgICAgICAgICgnLTEgYScsIE5TKG9uZT0nYScpKSwKKyAgICAgICAgKCctMWEnLCBOUyhvbmU9J2EnKSksCisgICAgICAgICgnLTEtMicsIE5TKG9uZT0nLTInKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1mb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nLCAnLWYnLCAnLWYgYScsICdhJywgJy0tZm9vIC14JywgJy0tZm9vIC0tYmFyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUpKSwKKyAgICAgICAgKCctLWZvbyBhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy0tZm9vPWEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLS1mb28gLTIuNScsIE5TKGZvbz0nLTIuNScpKSwKKyAgICAgICAgKCctLWZvbz0tMi41JywgTlMoZm9vPSctMi41JykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRG91YmxlRGFzaFBhcnRpYWxNYXRjaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgcGFydGlhbCBtYXRjaGluZyB3aXRoIGEgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWJhZGdlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy0tYmF0JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctLWInLCAnLS1iYScsICctLWI9MicsICctLWJhPTQnLCAnLS1iYWRnZSA1J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmFkZ2VyPUZhbHNlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmF0IFgnLCBOUyhiYWRnZXI9RmFsc2UsIGJhdD0nWCcpKSwKKyAgICAgICAgKCctLWJhZCcsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZycsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2UnLCBOUyhiYWRnZXI9VHJ1ZSwgYmF0PU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlcicsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRG91YmxlRGFzaFByZWZpeE1hdGNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB3aGVuIG9uZSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIGlzIGEgcHJlZml4IG9mIGFub3RoZXIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1iYWRnZXInLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWJhJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctLWInLCAnLS1iYScsICctLWI9MicsICctLWJhZGdlIDUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYWRnZXI9RmFsc2UsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhIFgnLCBOUyhiYWRnZXI9RmFsc2UsIGJhPSdYJykpLAorICAgICAgICAoJy0tYmE9WCcsIE5TKGJhZGdlcj1GYWxzZSwgYmE9J1gnKSksCisgICAgICAgICgnLS1iYWQnLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZycsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZScsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZXInLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRG91YmxlRGFzaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIHNpbmdsZS0gYW5kIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLS1iYXInKSwKKyAgICAgICAgU2lnKCctYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1mYmF6JywgJy1iYXpmJywgJy1iIEInLCAnQiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9RmFsc2UsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy1mJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJhIEInLCBOUyhmPUZhbHNlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy1mIC0tYmFyIEInLCBOUyhmPVRydWUsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYgLWInLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICAgICAgKCctYmEgLWYnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggb3B0aW9uIHN0cmluZ3Mgd2l0aCBjdXN0b20gcHJlZml4ZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPScrOi8nLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJytmJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnOjpiYXInKSwKKyAgICAgICAgU2lnKCcvYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1iIEInLCAnQicsICctZicsICctLWJhciBCJywgJy1iYXonLCAnLWgnLCAnLS1oZWxwJywgJytoJywgJzo6aGVscCcsICcvaGVscCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9RmFsc2UsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCc6OmJhIEInLCBOUyhmPUZhbHNlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIDo6YmFyIEInLCBOUyhmPVRydWUsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgL2InLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICAgICAgKCcvYmEgK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzQWRkZWRIZWxwKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJXaGVuIGBgLWBgIG5vdCBpbiBwcmVmaXhfY2hhcnMsIGRlZmF1bHQgb3BlcmF0b3JzIGNyZWF0ZWQgZm9yIGhlbHAKKyAgICAgICBzaG91bGQgdXNlIHRoZSBwcmVmaXhfY2hhcnMgaW4gdXNlIHJhdGhlciB0aGFuIC0gb3IgLS0KKyAgICAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTQ0NCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jys6LycsIGFkZF9oZWxwPVRydWUpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcrZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJzo6YmFyJyksCisgICAgICAgIFNpZygnL2JheicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctZmJhcicsICctYiBCJywgJ0InLCAnLWYnLCAnLS1iYXIgQicsICctYmF6J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJzo6YmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgOjpiYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiAvYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy9iYSArZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBbHRlcm5hdGVQcmVmaXhDaGFyc011bHRpcGxlU2hvcnRBcmdzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJWZXJpZnkgdGhhdCBPcHRpb25hbHMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGVpciBkZWZpbmVkIHByZWZpeGVzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nKy0nLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnK3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcreicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXcnLAorICAgICAgICAgICAgICAgICcteHl6JywKKyAgICAgICAgICAgICAgICAnK3gnLAorICAgICAgICAgICAgICAgICcteScsCisgICAgICAgICAgICAgICAgJyt4eXonLAorICAgIF0KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1GYWxzZSwgeT1GYWxzZSwgej1GYWxzZSkpLAorICAgICAgICAoJy14JywgTlMoeD1UcnVlLCB5PUZhbHNlLCB6PUZhbHNlKSksCisgICAgICAgICgnK3kgLXgnLCBOUyh4PVRydWUsIHk9VHJ1ZSwgej1GYWxzZSkpLAorICAgICAgICAoJyt5eiAteCcsIE5TKHg9VHJ1ZSwgeT1UcnVlLCB6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1Nob3J0TG9uZyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIGNvbWJpbmF0aW9uIG9mIHNpbmdsZS0gYW5kIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy12JywgJy0tdmVyYm9zZScsICctbicsICctLW5vaXN5JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLXggLS12ZXJib3NlJywgJy1OJywgJ2EnLCAnLXYgeCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHZlcmJvc2U9RmFsc2UpKSwKKyAgICAgICAgKCctdicsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgICAgICAoJy0tdmVyYm9zZScsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgICAgICAoJy1uJywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLS1ub2lzeScsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRGVzdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdmFyaW91cyBtZWFucyBvZiBzZXR0aW5nIGRlc3RpbmF0aW9uIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1mb28tYmFyJyksIFNpZygnLS1iYXonLCBkZXN0PSd6YWJiYXonKV0KKyAgICBmYWlsdXJlcyA9IFsnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tZm9vLWJhciBmJywgTlMoZm9vX2Jhcj0nZicsIHphYmJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogZycsIE5TKGZvb19iYXI9Tm9uZSwgemFiYmF6PSdnJykpLAorICAgICAgICAoJy0tZm9vLWJhciBoIC0tYmF6IGknLCBOUyhmb29fYmFyPSdoJywgemFiYmF6PSdpJykpLAorICAgICAgICAoJy0tYmF6IGogLS1mb28tYmFyIGsnLCBOUyhmb29fYmFyPSdrJywgemFiYmF6PSdqJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhIGRlZmF1bHQgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnKSwgU2lnKCcteScsIGRlZmF1bHQ9NDIpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PTQyKSksCisgICAgICAgICgnLXh4JywgTlMoeD0neCcsIHk9NDIpKSwKKyAgICAgICAgKCcteXknLCBOUyh4PU5vbmUsIHk9J3knKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc0RlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG5vdCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgYXJncyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYScsIE5TKHg9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnczEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIDEgYXJnIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3MzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSAzIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0zKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCcsICcteCBhJywgJy14IGEgYicsICdhIC14JywgJ2EgLXggYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEgYiBjJywgTlMoeD1bJ2EnLCAnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gT3B0aW9uYWwgYXJnIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nPycsIGNvbnN0PTQyKSwKKyAgICAgICAgU2lnKCcteScsIG5hcmdzPSc/JywgZGVmYXVsdD0nc3BhbScpLAorICAgICAgICBTaWcoJy16JywgbmFyZ3M9Jz8nLCB0eXBlPWludCwgY29uc3Q9JzQyJywgZGVmYXVsdD0nODQnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJzInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCctdycsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy13IDInLCBOUyh3PScyJywgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy14JywgTlModz1Ob25lLCB4PTQyLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy14IDInLCBOUyh3PU5vbmUsIHg9JzInLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy15JywgTlModz1Ob25lLCB4PU5vbmUsIHk9Tm9uZSwgej04NCkpLAorICAgICAgICAoJy15IDInLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nMicsIHo9ODQpKSwKKyAgICAgICAgKCcteicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej00MikpLAorICAgICAgICAoJy16IDInLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicpLAorICAgICAgICBTaWcoJy15JywgbmFyZ3M9JyonLCBkZWZhdWx0PSdzcGFtJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14JywgTlMoeD1bXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhIGInLCBOUyh4PVsnYScsICdiJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXknLCBOUyh4PU5vbmUsIHk9W10pKSwKKyAgICAgICAgKCcteSBhJywgTlMoeD1Ob25lLCB5PVsnYSddKSksCisgICAgICAgICgnLXkgYSBiJywgTlMoeD1Ob25lLCB5PVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyBvbmUgb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScrJyksCisgICAgICAgIFNpZygnLXknLCBuYXJncz0nKycsIGRlZmF1bHQ9J3NwYW0nKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnLCAnLXknLCAnYSAteCcsICdhIC15IGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYScsIE5TKHg9WydhJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYSBiJywgTlMoeD1bJ2EnLCAnYiddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy15IGEnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCcteSBhIGInLCBOUyh4PU5vbmUsIHk9WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQ2hvaWNlcyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyB0aGUgY2hvaWNlcyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWYnLCBjaG9pY2VzPSdhYmMnKSwKKyAgICAgICAgU2lnKCctZycsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDUpKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctZiBkJywgJy1mYWQnLCAnLWdhJywgJy1nIDYnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPU5vbmUsIGc9Tm9uZSkpLAorICAgICAgICAoJy1mIGEnLCBOUyhmPSdhJywgZz1Ob25lKSksCisgICAgICAgICgnLWYgYycsIE5TKGY9J2MnLCBnPU5vbmUpKSwKKyAgICAgICAgKCctZyAwJywgTlMoZj1Ob25lLCBnPTApKSwKKyAgICAgICAgKCctZyAwMycsIE5TKGY9Tm9uZSwgZz0zKSksCisgICAgICAgICgnLWZiIC1nNCcsIE5TKGY9J2InLCBnPTQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1JlcXVpcmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYW4gb3B0aW9uYWwgYWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWludCwgcmVxdWlyZWQ9VHJ1ZSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy14IDEnLCBOUyh4PTEpKSwKKyAgICAgICAgKCcteDQyJywgTlMoeD00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZSBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBhY3Rpb249J3N0b3JlJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnYSAteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14Zm9vJywgTlMoeD0nZm9vJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVDb25zdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlX2NvbnN0IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1vYmplY3QpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeT1Ob25lKSksCisgICAgICAgICgnLXknLCBOUyh5PW9iamVjdCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVGYWxzZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlX2ZhbHNlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctemEnLCAnLXogYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHo9VHJ1ZSkpLAorICAgICAgICAoJy16JywgTlMoej1GYWxzZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uU3RvcmVUcnVlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfdHJ1ZSBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1hcHBsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYXBwbGU9YicsICctLWFwcGxlIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhhcHBsZT1GYWxzZSkpLAorICAgICAgICAoJy0tYXBwbGUnLCBOUyhhcHBsZT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmQgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tYmF6JywgYWN0aW9uPSdhcHBlbmQnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWJheicsICdhIC0tYmF6JywgJy0tYmF6IGEgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogYScsIE5TKGJhej1bJ2EnXSkpLAorICAgICAgICAoJy0tYmF6IGEgLS1iYXogYicsIE5TKGJhej1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRXaXRoRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1iYXonLCBhY3Rpb249J2FwcGVuZCcsIGRlZmF1bHQ9WydYJ10pXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYmF6JywgJ2EgLS1iYXonLCAnLS1iYXogYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmF6PVsnWCddKSksCisgICAgICAgICgnLS1iYXogYScsIE5TKGJhej1bJ1gnLCAnYSddKSksCisgICAgICAgICgnLS1iYXogYSAtLWJheiBiJywgTlMoYmF6PVsnWCcsICdhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kQ29uc3QoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmRfY29uc3QgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYicsIGFjdGlvbj0nYXBwZW5kX2NvbnN0JywgY29uc3Q9RXhjZXB0aW9uKSwKKyAgICAgICAgU2lnKCctYycsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0nYicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctYycsICdhIC1jJywgJy1ieCcsICctYiB4J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYj1Ob25lKSksCisgICAgICAgICgnLWInLCBOUyhiPVtFeGNlcHRpb25dKSksCisgICAgICAgICgnLWIgLWN4IC1iIC1jeXonLCBOUyhiPVtFeGNlcHRpb24sICd4JywgRXhjZXB0aW9uLCAneXonXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kQ29uc3RXaXRoRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZF9jb25zdCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1iJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1FeGNlcHRpb24sIGRlZmF1bHQ9WydYJ10pLAorICAgICAgICBTaWcoJy1jJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdiJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1jJywgJ2EgLWMnLCAnLWJ4JywgJy1iIHgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiPVsnWCddKSksCisgICAgICAgICgnLWInLCBOUyhiPVsnWCcsIEV4Y2VwdGlvbl0pKSwKKyAgICAgICAgKCctYiAtY3ggLWIgLWN5eicsIE5TKGI9WydYJywgRXhjZXB0aW9uLCAneCcsIEV4Y2VwdGlvbiwgJ3l6J10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkNvdW50KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgY291bnQgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgYWN0aW9uPSdjb3VudCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14IGEnLCAnLXggYicsICcteCBhIC14IGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9MSkpLAorICAgIF0KKworCisjID09PT09PT09PT09PT09PT0KKyMgUG9zaXRpb25hbCB0ZXN0cworIyA9PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBkb2Vzbid0IHNwZWNpZnkgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgYW4gbmFyZ3Mgb2YgMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczIoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIGFuIG5hcmdzIG9mIDIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJ2EnLCAnLXgnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIHVubGltaXRlZCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPVtdKSksCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZURlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIHVubGltaXRlZCBuYXJncyBhbmQgYSBkZWZhdWx0IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonLCBkZWZhdWx0PSdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289J2JhcicpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIG9uZSBvciBtb3JlIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBhbiBPcHRpb25hbCBQb3NpdGlvbmFsIHdpdGggYSBkZWZhdWx0IHZhbHVlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbENvbnZlcnRlZERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKyAgICB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICAiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nLCB0eXBlPWludCwgZGVmYXVsdD0nNDInKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EgYicsICcxIDInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIpKSwKKyAgICAgICAgKCcxJywgTlMoZm9vPTEpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0d28gUG9zaXRpb25hbHMgdGhhdCBkb24ndCBzcGVjaWZ5IG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCcsICdhJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiJywgJ2EgYiBjIGQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZVplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggdW5saW1pdGVkIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG9uZSBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9Jz8nKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1Ob25lKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIHVubGltaXRlZCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bXSwgYmFyPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPSdiJykpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPbmVPck1vcmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG9uZSBvciBtb3JlIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKycpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPSdiJykpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggYW4gT3B0aW9uYWwgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD00MiksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289NDIsIGJhcj0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMlplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCB1bmxpbWl0ZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9W10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggb25lIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgb3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0yKSwgU2lnKCdiYXInLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGIgYyBkJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1Ob25lKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIHVubGltaXRlZCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVtdLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggb25lIG9yIG1vcmUgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScrJyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbDEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggYW4gT3B0aW9uYWwgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289Tm9uZSwgYmFyPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZVplcm9Pck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgdW5saW1pdGVkIG5hcmdzIGFuZCAxIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnYmF6JywgbmFyZ3M9MSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bXSwgYmF6PVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPbmVPck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgb25lIG9yIG1vcmUgbmFyZ3MgYW5kIDEgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JysnKSwKKyAgICAgICAgU2lnKCdiYXonLCBuYXJncz0xKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2InXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVsnYyddKSksCisgICAgICAgICgnYSBiIGMgZCcsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddLCBiYXo9WydkJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT3B0aW9uYWwxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVlIFBvc2l0aW9uYWxzOiBubyBuYXJncywgb3B0aW9uYWwgbmFyZyBhbmQgMSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nPycsIGRlZmF1bHQ9MC42MjUpLAorICAgICAgICBTaWcoJ2JheicsIG5hcmdzPTEpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9MC42MjUsIGJhej1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPSdiJywgYmF6PVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0d28gb3B0aW9uYWwgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgYmFyPTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj00MikpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbFplcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgbmFyZyBmb2xsb3dlZCBieSB1bmxpbWl0ZWQgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpLCBTaWcoJ2JhcicsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUsIGJhcj1bXSkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9W10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgbmFyZyBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1Ob25lLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0Nob2ljZXNTdHJpbmcoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBzZXQgb2Ygc2luZ2xlLWNoYXJhY3RlciBjaG9pY2VzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnc3BhbScsIGNob2ljZXM9c2V0KCdhYmNkZWZnJykpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnaCcsICc0MicsICdlZiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhzcGFtPSdhJykpLAorICAgICAgICAoJ2cnLCBOUyhzcGFtPSdnJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNDaG9pY2VzSW50KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgc2V0IG9mIGludGVnZXIgY2hvaWNlcyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ3NwYW0nLCB0eXBlPWludCwgY2hvaWNlcz1yYW5nZSgyMCkpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnaCcsICc0MicsICdlZiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJzQnLCBOUyhzcGFtPTQpKSwKKyAgICAgICAgKCcxNScsIE5TKHNwYW09MTUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzQWN0aW9uQXBwZW5kKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSAnYXBwZW5kJyBhY3Rpb24iIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnc3BhbScsIGFjdGlvbj0nYXBwZW5kJyksCisgICAgICAgIFNpZygnc3BhbScsIGFjdGlvbj0nYXBwZW5kJywgbmFyZ3M9MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInLCAnYSBiIGMgZCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoc3BhbT1bJ2EnLCBbJ2InLCAnYyddXSkpLAorICAgIF0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENvbWJpbmVkIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzTnVtZXJpY0FuZFBvc2l0aW9uYWxzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBuZWdhdGl2ZSBudW1iZXIgYXJncyB3aGVuIG51bWVyaWMgb3B0aW9ucyBhcmUgcHJlc2VudCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd4JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCctNCcsIGRlc3Q9J3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0yJywgJy0zMTUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdhJywgTlMoeD0nYScsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctNCcsIE5TKHg9Tm9uZSwgeT1UcnVlKSksCisgICAgICAgICgnLTQgYScsIE5TKHg9J2EnLCB5PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsbW9zdE51bWVyaWNBbmRQb3NpdGlvbmFscyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbmVnYXRpdmUgbnVtYmVyIGFyZ3Mgd2hlbiBhbG1vc3QgbnVtZXJpYyBvcHRpb25zIGFyZSBwcmVzZW50IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3gnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy1rNCcsIGRlc3Q9J3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy1rMyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy0yJywgTlMoeD0nLTInLCB5PUZhbHNlKSksCisgICAgICAgICgnYScsIE5TKHg9J2EnLCB5PUZhbHNlKSksCisgICAgICAgICgnLWs0JywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICAgICAgKCctazQgYScsIE5TKHg9J2EnLCB5PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEVtcHR5QW5kU3BhY2VDb250YWluaW5nQXJndW1lbnRzKFBhcnNlclRlc3RDYXNlKToKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneCcsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLXknLCAnLS15eXknLCBkZXN0PSd5JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoWycnXSwgTlMoeD0nJywgeT1Ob25lKSksCisgICAgICAgIChbJ2EgYmFkZ2VyJ10sIE5TKHg9J2EgYmFkZ2VyJywgeT1Ob25lKSksCisgICAgICAgIChbJy1hIGJhZGdlciddLCBOUyh4PSctYSBiYWRnZXInLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnLXknLCAnJ10sIE5TKHg9Tm9uZSwgeT0nJykpLAorICAgICAgICAoWycteScsICdhIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9J2EgYmFkZ2VyJykpLAorICAgICAgICAoWycteScsICctYSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSctYSBiYWRnZXInKSksCisgICAgICAgIChbJy0teXl5PWEgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nYSBiYWRnZXInKSksCisgICAgICAgIChbJy0teXl5PS1hIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9Jy1hIGJhZGdlcicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFByZWZpeENoYXJhY3Rlck9ubHlBcmd1bWVudHMoUGFyc2VyVGVzdENhc2UpOgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jy0rJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0nLCBkZXN0PSd4JywgbmFyZ3M9Jz8nLCBjb25zdD0nYmFkZ2VyJyksCisgICAgICAgIFNpZygnKycsIGRlc3Q9J3knLCB0eXBlPWludCwgZGVmYXVsdD00MiksCisgICAgICAgIFNpZygnLSstJywgZGVzdD0neicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXknLCAnKyAtJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PTQyLCB6PUZhbHNlKSksCisgICAgICAgICgnLScsIE5TKHg9J2JhZGdlcicsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctIFgnLCBOUyh4PSdYJywgeT00Miwgej1GYWxzZSkpLAorICAgICAgICAoJysgLTMnLCBOUyh4PU5vbmUsIHk9LTMsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctKy0nLCBOUyh4PU5vbmUsIHk9NDIsIHo9VHJ1ZSkpLAorICAgICAgICAoJy0gPT09JywgTlMoeD0nPT09JywgeT00Miwgej1GYWxzZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0TmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIG5hcmdzPScqJyksIFNpZygneScsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9W10pKSwKKyAgICAgICAgKCcteCcsIE5TKHg9W10sIHk9W10pKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT1bXSkpLAorICAgICAgICAoJy14IGEgLS0gYicsIE5TKHg9WydhJ10sIHk9WydiJ10pKSwKKyAgICAgICAgKCdhJywgTlMoeD1Ob25lLCB5PVsnYSddKSksCisgICAgICAgICgnYSAteCcsIE5TKHg9W10sIHk9WydhJ10pKSwKKyAgICAgICAgKCdhIC14IGInLCBOUyh4PVsnYiddLCB5PVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3ROYXJnc1JlbWFpbmRlcihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhIHBvc2l0aW9uYWwgd2l0aCBuYXJncz1SRU1BSU5ERVIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCd4JyksIFNpZygneScsIG5hcmdzPScuLi4nKSwgU2lnKCcteicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXonLCAnLXogWiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ1gnLCBOUyh4PSdYJywgeT1bXSwgej1Ob25lKSksCisgICAgICAgICgnLXogWiBYJywgTlMoeD0nWCcsIHk9W10sIHo9J1onKSksCisgICAgICAgICgnWCBBIEIgLXogWicsIE5TKHg9J1gnLCB5PVsnQScsICdCJywgJy16JywgJ1onXSwgej1Ob25lKSksCisgICAgICAgICgnWCBZIC0tZm9vJywgTlMoeD0nWCcsIHk9WydZJywgJy0tZm9vJ10sIHo9Tm9uZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uTGlrZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgb3B0aW9ucyB0aGF0IG1heSBvciBtYXkgbm90IGJlIGFyZ3VtZW50cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9ZmxvYXQpLAorICAgICAgICBTaWcoJy0zJywgdHlwZT1mbG9hdCwgZGVzdD0neScpLAorICAgICAgICBTaWcoJ3onLCBuYXJncz0nKicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXkyLjUnLCAnLXhhJywgJy14IC1hJywKKyAgICAgICAgICAgICAgICAnLXggLTMnLCAnLXggLTMuNScsICctMyAtMy41JywKKyAgICAgICAgICAgICAgICAnLXggLTIuNScsICcteCAtMi41IGEnLCAnLTMgLS41JywKKyAgICAgICAgICAgICAgICAnYSB4IC0xJywgJy14IC0xIGEnLCAnLTMgLTEgYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1Ob25lLCB6PVtdKSksCisgICAgICAgICgnLXggMi41JywgTlMoeD0yLjUsIHk9Tm9uZSwgej1bXSkpLAorICAgICAgICAoJy14IDIuNSBhJywgTlMoeD0yLjUsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJy0zLjUnLCBOUyh4PU5vbmUsIHk9MC41LCB6PVtdKSksCisgICAgICAgICgnLTMtLjUnLCBOUyh4PU5vbmUsIHk9LTAuNSwgej1bXSkpLAorICAgICAgICAoJy0zIC41JywgTlMoeD1Ob25lLCB5PTAuNSwgej1bXSkpLAorICAgICAgICAoJ2EgLTMuNScsIE5TKHg9Tm9uZSwgeT0wLjUsIHo9WydhJ10pKSwKKyAgICAgICAgKCdhJywgTlMoeD1Ob25lLCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCdhIC14IDEnLCBOUyh4PTEuMCwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLXggMSBhJywgTlMoeD0xLjAsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJy0zIDEgYScsIE5TKHg9Tm9uZSwgeT0xLjAsIHo9WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdERlZmF1bHRTdXBwcmVzcyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhY3Rpb25zIHdpdGggc3VwcHJlc3NlZCBkZWZhdWx0cyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCctLWJheicsIE5TKGJhej1UcnVlKSksCisgICAgICAgICgnYSAtLWJheicsIE5TKGZvbz0nYScsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UGFyc2VyRGVmYXVsdFN1cHByZXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBhIHBhcnNlci1sZXZlbCBkZWZhdWx0IG9mIFNVUFBSRVNTIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGFyZ3VtZW50X2RlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCctLWJheicsIE5TKGJhej1UcnVlKSksCisgICAgICAgICgnYSAtLWJheicsIE5TKGZvbz0nYScsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UGFyc2VyRGVmYXVsdDQyKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBhIHBhcnNlci1sZXZlbCBkZWZhdWx0IG9mIDQyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGFyZ3VtZW50X2RlZmF1bHQ9NDIsIHZlcnNpb249JzEuMCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLS1iYXonLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPTQyLCBiYXI9NDIsIGJhej00MikpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9NDIsIGJhej00MikpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PTQyKSksCisgICAgICAgICgnLS1iYXonLCBOUyhmb289NDIsIGJhcj00MiwgYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmFyPTQyLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJy0tYmF6IGEgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFyZ3VtZW50c0Zyb21GaWxlKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgcmVhZGluZyBhcmd1bWVudHMgZnJvbSBhIGZpbGUiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFyZ3VtZW50c0Zyb21GaWxlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZpbGVfdGV4dHMgPSBbCisgICAgICAgICAgICAoJ2hlbGxvJywgJ2hlbGxvIHdvcmxkIVxuJyksCisgICAgICAgICAgICAoJ3JlY3Vyc2l2ZScsICctYVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnQVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnQGhlbGxvJyksCisgICAgICAgICAgICAoJ2ludmFsaWQnLCAnQG5vLXN1Y2gtcGF0aFxuJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHBhdGgsIHRleHQgaW4gZmlsZV90ZXh0czoKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgICAgIGZpbGUud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhmcm9tZmlsZV9wcmVmaXhfY2hhcnM9J0AnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWEnKSwKKyAgICAgICAgU2lnKCd4JyksCisgICAgICAgIFNpZygneScsIG5hcmdzPScrJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLWInLCAnWCcsICdAaW52YWxpZCcsICdAbWlzc2luZyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ1ggWScsIE5TKGE9Tm9uZSwgeD0nWCcsIHk9WydZJ10pKSwKKyAgICAgICAgKCdYIC1hIEEgWSBaJywgTlMoYT0nQScsIHg9J1gnLCB5PVsnWScsICdaJ10pKSwKKyAgICAgICAgKCdAaGVsbG8gWCcsIE5TKGE9Tm9uZSwgeD0naGVsbG8gd29ybGQhJywgeT1bJ1gnXSkpLAorICAgICAgICAoJ1ggQGhlbGxvJywgTlMoYT1Ob25lLCB4PSdYJywgeT1bJ2hlbGxvIHdvcmxkISddKSksCisgICAgICAgICgnLWEgQiBAcmVjdXJzaXZlIFkgWicsIE5TKGE9J0EnLCB4PSdoZWxsbyB3b3JsZCEnLCB5PVsnWScsICdaJ10pKSwKKyAgICAgICAgKCdYIEByZWN1cnNpdmUgWiAtYSBCJywgTlMoYT0nQicsIHg9J1gnLCB5PVsnaGVsbG8gd29ybGQhJywgJ1onXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0QXJndW1lbnRzRnJvbUZpbGVDb252ZXJ0ZXIoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCByZWFkaW5nIGFyZ3VtZW50cyBmcm9tIGEgZmlsZSIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0QXJndW1lbnRzRnJvbUZpbGVDb252ZXJ0ZXIsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZmlsZV90ZXh0cyA9IFsKKyAgICAgICAgICAgICgnaGVsbG8nLCAnaGVsbG8gd29ybGQhXG4nKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcGF0aCwgdGV4dCBpbiBmaWxlX3RleHRzOgorICAgICAgICAgICAgZmlsZSA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBjbGFzcyBGcm9tRmlsZUNvbnZlcnRlckFyZ3VtZW50UGFyc2VyKEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKToKKworICAgICAgICBkZWYgY29udmVydF9hcmdfbGluZV90b19hcmdzKHNlbGYsIGFyZ19saW5lKToKKyAgICAgICAgICAgIGZvciBhcmcgaW4gYXJnX2xpbmUuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgYXJnLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgeWllbGQgYXJnCisgICAgcGFyc2VyX2NsYXNzID0gRnJvbUZpbGVDb252ZXJ0ZXJBcmd1bWVudFBhcnNlcgorICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoZnJvbWZpbGVfcHJlZml4X2NoYXJzPSdAJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3knLCBuYXJncz0nKycpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ0BoZWxsbyBYJywgTlMoeT1bJ2hlbGxvJywgJ3dvcmxkIScsICdYJ10pKSwKKyAgICBdCisKKworIyA9PT09PT09PT09PT09PT09PT09PT0KKyMgVHlwZSBjb252ZXJzaW9uIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0RmlsZVR5cGVSZXByKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Ioc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJykiLCByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfd2JfMShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3YicsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3YicsIDEpIiwgcmVwcih0eXBlKSkKKworCitjbGFzcyBSRmlsZShvYmplY3QpOgorICAgIHNlZW4gPSB7fQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBvdGhlciBpbiBzZWxmLnNlZW46CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi5zZWVuW290aGVyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGV4dCA9IHNlbGYuc2VlbltvdGhlcl0gPSBvdGhlci5yZWFkKCkKKyAgICAgICAgICAgIG90aGVyLmNsb3NlKCkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGV4dCwgc3RyKToKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LmRlY29kZSgnYXNjaWknKQorICAgICAgICByZXR1cm4gc2VsZi5uYW1lID09IG90aGVyLm5hbWUgPT0gdGV4dAorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVIoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHJlYWRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlUiwgc2VsZikuc2V0VXAoKQorICAgICAgICBmb3IgZmlsZV9uYW1lIGluIFsnZm9vJywgJ2JhciddOgorICAgICAgICAgICAgZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsIGZpbGVfbmFtZSksICd3JykKKyAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZV9uYW1lKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuY3JlYXRlX3JlYWRvbmx5X2ZpbGUoJ3JlYWRvbmx5JykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCkpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyJykpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJywgJ25vbi1leGlzdGVudC1maWxlLnR4dCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1SRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZGluLCBzcGFtPXN5cy5zdGRpbikpLAorICAgICAgICAoJ3JlYWRvbmx5JywgTlMoeD1Ob25lLCBzcGFtPVJGaWxlKCdyZWFkb25seScpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVJCKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIEZpbGVUeXBlIG9wdGlvbi9hcmd1bWVudCB0eXBlIGZvciByZWFkaW5nIGZpbGVzIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RGaWxlVHlwZVJCLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZvciBmaWxlX25hbWUgaW4gWydmb28nLCAnYmFyJ106CisgICAgICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZV9uYW1lKSwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlX25hbWUpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyYicpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncmInKSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteCBiYXInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdmb28nLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ2ZvbycpKSksCisgICAgICAgICgnLXggZm9vIGJhcicsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJ2JhciAteCBmb28nLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCcteCAtIC0nLCBOUyh4PXN5cy5zdGRpbiwgc3BhbT1zeXMuc3RkaW4pKSwKKyAgICBdCisKKworY2xhc3MgV0ZpbGUob2JqZWN0KToKKyAgICBzZWVuID0gc2V0KCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgb3RoZXIgbm90IGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSAnQ2hlY2sgdGhhdCBmaWxlIGlzIHdyaXRhYmxlLicKKyAgICAgICAgICAgIGlmICdiJyBpbiBvdGhlci5tb2RlOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgb3RoZXIud3JpdGUodGV4dCkKKyAgICAgICAgICAgIG90aGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2Vlbi5hZGQob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVcoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHdyaXRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlVywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmNyZWF0ZV9yZWFkb25seV9maWxlKCdyZWFkb25seScpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhcicsICdyZWFkb25seSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVdCKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3YicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZWdncycsIHR5cGU9Y29tcGxleCksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9ZmxvYXQpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICc0MmonLCAnLS1lZ2dzIGEnLCAnLS1lZ2dzIDJpJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1lZ2dzPTQyIDQyJywgTlMoZWdncz00Miwgc3BhbT00Mi4wKSksCisgICAgICAgICgnLS1lZ2dzIDJqIC0tIC0xLjUnLCBOUyhlZ2dzPTJqLCBzcGFtPS0xLjUpKSwKKyAgICAgICAgKCcxMDI0LjY3NScsIE5TKGVnZ3M9Tm9uZSwgc3BhbT0xMDI0LjY3NSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0VHlwZVVzZXJEZWZpbmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIG9wdGlvbi9hcmd1bWVudCB0eXBlIiIiCisKKyAgICBjbGFzcyBNeVR5cGUoVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPU15VHlwZSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9TXlUeXBlKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIC14IGInLCBOUyh4PU15VHlwZSgnYicpLCBzcGFtPU15VHlwZSgnYScpKSksCisgICAgICAgICgnLXhmIGcnLCBOUyh4PU15VHlwZSgnZicpLCBzcGFtPU15VHlwZSgnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2xhc3NpY0NsYXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgY2xhc3NpYyBjbGFzcyB0eXBlIiIiCisKKyAgICBjbGFzcyBDOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPUMpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPUMpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgLXggYicsIE5TKHg9QygnYicpLCBzcGFtPUMoJ2EnKSkpLAorICAgICAgICAoJy14ZiBnJywgTlMoeD1DKCdmJyksIHNwYW09QygnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlUmVnaXN0cmF0aW9uKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIHR5cGUgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZXRfbXlfdHlwZShzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuICdteV90eXBleyVzfScgJSBzdHJpbmcKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcigndHlwZScsICdteV90eXBlJywgZ2V0X215X3R5cGUpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgdHlwZT0nbXlfdHlwZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCB0eXBlPSdteV90eXBlJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcxJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh4PU5vbmUsIHk9J215X3R5cGV7MX0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLXggMSA0Micuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoeD0nbXlfdHlwZXsxfScsIHk9J215X3R5cGV7NDJ9JykpCisKKworIyA9PT09PT09PT09PT0KKyMgQWN0aW9uIHRlc3RzCisjID09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWN0aW9uVXNlckRlZmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgb3B0aW9uL2FyZ3VtZW50IGFjdGlvbiIiIgorCisgICAgY2xhc3MgT3B0aW9uYWxBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKworICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24gYW5kIG9wdGlvbiBzdHJpbmcKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdzcGFtJywgJ2Rlc3Q6ICVzJyAlIHNlbGYuZGVzdAorICAgICAgICAgICAgICAgIGFzc2VydCBvcHRpb25fc3RyaW5nID09ICctcycsICdmbGFnOiAlcycgJSBvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIG9wdGlvbiBpcyBiZWZvcmUgYXJndW1lbnQsIGJhZGdlcj0yLCBhbmQgd2hlbgorICAgICAgICAgICAgICAgICMgb3B0aW9uIGlzIGFmdGVyIGFyZ3VtZW50LCBiYWRnZXI9PHdoYXRldmVyIHdhcyBzZXQ+CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMgPSBOUyhzcGFtPTAuMjUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gWzAuMTI1LCAwLjYyNV06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLmJhZGdlciA9IDIKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyLjBdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5iYWRnZXIgPSA4NAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd2YWx1ZTogJXMnICUgdmFsdWUpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX25zID09IG5hbWVzcGFjZSwgKCdleHBlY3RlZCAlcywgZ290ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9ucywgbmFtZXNwYWNlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudFBhcnNlckVycm9yKCdvcHRfYWN0aW9uIGZhaWxlZDogJXMnICUgZSkKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAnc3BhbScsIHZhbHVlKQorCisgICAgY2xhc3MgUG9zaXRpb25hbEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWUsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG9wdGlvbl9zdHJpbmcgaXMgTm9uZSwgKCdvcHRpb25fc3RyaW5nOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nKQorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdiYWRnZXInLCAnZGVzdDogJXMnICUgc2VsZi5kZXN0CisgICAgICAgICAgICAgICAgIyB3aGVuIGFyZ3VtZW50IGlzIGJlZm9yZSBvcHRpb24sIHNwYW09MC4yNSwgYW5kIHdoZW4KKyAgICAgICAgICAgICAgICAjIG9wdGlvbiBpcyBhZnRlciBhcmd1bWVudCwgc3BhbT08d2hhdGV2ZXIgd2FzIHNldD4KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ucyA9IE5TKGJhZGdlcj0yKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIFs0MiwgODRdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC4yNQorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzFdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC42MjUKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyXToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMuc3BhbSA9IDAuMTI1CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3ZhbHVlOiAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbnMgPT0gbmFtZXNwYWNlLCAoJ2V4cGVjdGVkICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX25zLCBuYW1lc3BhY2UpKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoJ2FyZ19hY3Rpb24gZmFpbGVkOiAlcycgJSBlKQorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdiYWRnZXInLCB2YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXMnLCBkZXN0PSdzcGFtJywgYWN0aW9uPU9wdGlvbmFsQWN0aW9uLAorICAgICAgICAgICAgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjI1KSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBhY3Rpb249UG9zaXRpb25hbEFjdGlvbiwKKyAgICAgICAgICAgIHR5cGU9aW50LCBuYXJncz0nPycsIGRlZmF1bHQ9MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXMwLjEyNScsIE5TKHNwYW09MC4xMjUsIGJhZGdlcj0yKSksCisgICAgICAgICgnNDInLCBOUyhzcGFtPTAuMjUsIGJhZGdlcj00MikpLAorICAgICAgICAoJy1zIDAuNjI1IDEnLCBOUyhzcGFtPTAuNjI1LCBiYWRnZXI9MSkpLAorICAgICAgICAoJzg0IC1zMicsIE5TKHNwYW09Mi4wLCBiYWRnZXI9ODQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFjdGlvblJlZ2lzdHJhdGlvbihUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHVzZXItZGVmaW5lZCBhY3Rpb24gc3VwcGxpZWQgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGNsYXNzIE15QWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCAnZm9vWyVzXScgJSB2YWx1ZXMpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcignYWN0aW9uJywgJ215X2FjdGlvbicsIHNlbGYuTXlBY3Rpb24pCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhZGdlcicsIGFjdGlvbj0nbXlfYWN0aW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKFsnMSddKSwgTlMoYmFkZ2VyPSdmb29bMV0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncyhbJzQyJ10pLCBOUyhiYWRnZXI9J2Zvb1s0Ml0nKSkKKworCisjID09PT09PT09PT09PT09PT0KKyMgU3VicGFyc2VycyB0ZXN0cworIyA9PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBZGRTdWJwYXJzZXJzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBhZGRfc3VicGFyc2VycyBtZXRob2QiIiIKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCBzdWJwYXJzZXJfaGVscD1GYWxzZSwgcHJlZml4X2NoYXJzPU5vbmUpOgorICAgICAgICAjIGNyZWF0ZSBhIHBhcnNlciB3aXRoIGEgc3VicGFyc2VycyBhcmd1bWVudAorICAgICAgICBpZiBwcmVmaXhfY2hhcnM6CisgICAgICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgICAgICBwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J21haW4gZGVzY3JpcHRpb24nLCBwcmVmaXhfY2hhcnM9cHJlZml4X2NoYXJzKQorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICAgICBwcmVmaXhfY2hhcnNbMF0gKiAyICsgJ2ZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgIHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicpCisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgICctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICdiYXInLCB0eXBlPWZsb2F0LCBoZWxwPSdiYXIgaGVscCcpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IG9ubHkgb25lIHN1YnBhcnNlcnMgYXJndW1lbnQgY2FuIGJlIGFkZGVkCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nY29tbWFuZCBoZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlci5hZGRfc3VicGFyc2VycykKKworICAgICAgICAjIGFkZCBmaXJzdCBzdWItcGFyc2VyCisgICAgICAgIHBhcnNlcjFfa3dhcmdzID0gZGljdChkZXNjcmlwdGlvbj0nMSBkZXNjcmlwdGlvbicpCisgICAgICAgIGlmIHN1YnBhcnNlcl9oZWxwOgorICAgICAgICAgICAgcGFyc2VyMV9rd2FyZ3NbJ2hlbHAnXSA9ICcxIGhlbHAnCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnLCAqKnBhcnNlcjFfa3dhcmdzKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgnLXcnLCB0eXBlPWludCwgaGVscD0ndyBoZWxwJykKKyAgICAgICAgcGFyc2VyMS5hZGRfYXJndW1lbnQoJ3gnLCBjaG9pY2VzPSdhYmMnLCBoZWxwPSd4IGhlbHAnKQorCisgICAgICAgICMgYWRkIHNlY29uZCBzdWItcGFyc2VyCisgICAgICAgIHBhcnNlcjJfa3dhcmdzID0gZGljdChkZXNjcmlwdGlvbj0nMiBkZXNjcmlwdGlvbicpCisgICAgICAgIGlmIHN1YnBhcnNlcl9oZWxwOgorICAgICAgICAgICAgcGFyc2VyMl9rd2FyZ3NbJ2hlbHAnXSA9ICcyIGhlbHAnCisgICAgICAgIHBhcnNlcjIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzInLCAqKnBhcnNlcjJfa3dhcmdzKQorICAgICAgICBwYXJzZXIyLmFkZF9hcmd1bWVudCgnLXknLCBjaG9pY2VzPScxMjMnLCBoZWxwPSd5IGhlbHAnKQorICAgICAgICBwYXJzZXIyLmFkZF9hcmd1bWVudCgneicsIHR5cGU9Y29tcGxleCwgbmFyZ3M9JyonLCBoZWxwPSd6IGhlbHAnKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBtYWluIHBhcnNlcgorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RBZGRTdWJwYXJzZXJzLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcigpCisgICAgICAgIHNlbGYuY29tbWFuZF9oZWxwX3BhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIoc3VicGFyc2VyX2hlbHA9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2FyZ3NfZmFpbHVyZXMoc2VsZik6CisgICAgICAgICMgY2hlY2sgc29tZSBmYWlsdXJlIGNhc2VzOgorICAgICAgICBmb3IgYXJnc19zdHIgaW4gWycnLCAnYScsICdhIGEnLCAnMC41IGEnLCAnMC41IDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcwLjUgMSAteScsICcwLjUgMiAtdyddOgorICAgICAgICAgICAgYXJncyA9IGFyZ3Nfc3RyLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihzZWxmLnBhcnNlci5wYXJzZV9hcmdzLCBhcmdzKQorCisgICAgZGVmIHRlc3RfcGFyc2VfYXJncyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBzb21lIG5vbi1mYWlsdXJlIGNhc2VzOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnMC41IDEgYiAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoJzAuMjUgLS1mb28gMiAteSAyIDNqIC0tIC0xaicuc3BsaXQoKSksCisgICAgICAgICAgICBOUyhmb289VHJ1ZSwgYmFyPTAuMjUsIHk9JzInLCB6PVszaiwgLTFqXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIDAuMTI1IDEgYycuc3BsaXQoKSksCisgICAgICAgICAgICBOUyhmb289VHJ1ZSwgYmFyPTAuMTI1LCB3PU5vbmUsIHg9J2MnKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcGFyc2Vfa25vd25fYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAxIGIgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgW10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgLXAgMSBiIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgKE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksIFsnLXAnXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAxIGIgLXcgNyAtcCcuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctcCddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtcSAtcnMgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctcScsICctcnMnXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAtVyAxIGIgLVggWSAtdyA3IFonLnNwbGl0KCkpLAorICAgICAgICAgICAgKE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksIFsnLVcnLCAnLVgnLCAnWScsICdaJ10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kZXN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSdiYXInKQorICAgICAgICBwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJykKKyAgICAgICAgcGFyc2VyMS5hZGRfYXJndW1lbnQoJ2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoZm9vPUZhbHNlLCBiYXI9JzEnLCBiYXo9JzInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnMSAyJy5zcGxpdCgpKSkKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfaGVscF9leHRyYV9wcmVmaXhfY2hhcnMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIC0gaXMgc3RpbGwgdXNlZCBmb3IgaGVscCBpZiBpdCBpcyBhIG5vbi1maXJzdCBwcmVmaXggY2hhcgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHByZWZpeF9jaGFycz0nKzotJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWysrZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbKytmb29dIGJhciB7MSwyfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKyAgICAgICAgICAgICAgezEsMn0gICAgICAgY29tbWFuZCBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICArK2ZvbyAgICAgICBmb28gaGVscAorICAgICAgICAgICAgJycnKSkKKworCisgICAgZGVmIHRlc3RfaGVscF9hbHRlcm5hdGVfcHJlZml4X2NoYXJzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHByZWZpeF9jaGFycz0nKzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFsraF0gWysrZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWytoXSBbKytmb29dIGJhciB7MSwyfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKyAgICAgICAgICAgICAgezEsMn0gICAgICAgY29tbWFuZCBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgK2gsICsraGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICArK2ZvbyAgICAgICBmb28gaGVscAorICAgICAgICAgICAgJycnKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9jb21tYW5kX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21tYW5kX2hlbHBfcGFyc2VyLmZvcm1hdF91c2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIuZm9ybWF0X2hlbHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKyAgICAgICAgICAgICAgezEsMn0gICAgICAgY29tbWFuZCBoZWxwCisgICAgICAgICAgICAgICAgMSAgICAgICAgIDEgaGVscAorICAgICAgICAgICAgICAgIDIgICAgICAgICAyIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3RpdGxlX2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nY29tbWFuZCBoZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhZGRpdGlvbmFsIHRleHQnKQorICAgICAgICBwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJykKKyAgICAgICAgcGFyc2VyMiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF91c2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtLWZvbyAgICAgICBmb28gaGVscAorCisgICAgICAgICAgICBzdWJjb21tYW5kczoKKyAgICAgICAgICAgICAgY29tbWFuZCBoZWxwCisKKyAgICAgICAgICAgICAgezEsMn0gICAgICAgYWRkaXRpb25hbCB0ZXh0CisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIF90ZXN0X3N1YnBhcnNlcl9oZWxwKHNlbGYsIGFyZ3Nfc3RyLCBleHBlY3RlZF9oZWxwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncyhhcmdzX3N0ci5zcGxpdCgpKQorICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKKyAgICAgICAgICAgIGVyciA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBpZiBlcnIuc3Rkb3V0ICE9IGV4cGVjdGVkX2hlbHA6CisgICAgICAgICAgICAgICAgcHJpbnQocmVwcihleHBlY3RlZF9oZWxwKSkKKyAgICAgICAgICAgICAgICBwcmludChyZXByKGVyci5zdGRvdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuc3Rkb3V0LCBleHBlY3RlZF9oZWxwKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyMV9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3N1YnBhcnNlcl9oZWxwKCc1LjAgMSAtaCcsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBiYXIgMSBbLWhdIFstdyBXXSB7YSxiLGN9CisKKyAgICAgICAgICAgIDEgZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIHthLGIsY30gICAgIHggaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXcgVyAgICAgICAgdyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyMl9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3N1YnBhcnNlcl9oZWxwKCc1LjAgMiAtaCcsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBiYXIgMiBbLWhdIFsteSB7MSwyLDN9XSBbeiBbeiAuLi5dXQorCisgICAgICAgICAgICAyIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICB6ICAgICAgICAgICB6IGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC15IHsxLDIsM30gIHkgaGVscAorICAgICAgICAgICAgJycnKSkKKworIyA9PT09PT09PT09PT0KKyMgR3JvdXBzIHRlc3RzCisjID09PT09PT09PT09PQorCitjbGFzcyBUZXN0UG9zaXRpb25hbHNHcm91cHMoVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgb3JkZXIgb2YgZ3JvdXAgcG9zaXRpb25hbHMgbWF0Y2hlcyBjb25zdHJ1Y3Rpb24gb3JkZXIiIiIKKworICAgIGRlZiB0ZXN0X25vbmdyb3VwX2ZpcnN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnKQorICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2dyb3VwX2ZpcnN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgneHh4JykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBleHBlY3RlZCA9IE5TKGZvbz0nMScsIGJhcj0nMicsIGJhej0nMycpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMycuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWRfZ3JvdXBzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgneHh4JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3l5eScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnZnJlbGwnKQorICAgICAgICBleHBlY3RlZCA9IE5TKGZvbz0nMScsIGJhcj0nMicsIGJhej0nMycsIGZyZWxsPSc0JykKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzIDQnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworIyA9PT09PT09PT09PT09PT09PT09CisjIFBhcmVudCBwYXJzZXIgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0UGFyZW50UGFyc2VycyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhhdCBwYXJzZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggcGFyZW50IHBhcnNlcnMiIiIKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFBhcmVudFBhcnNlcnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi53eHl6X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50LmFkZF9hcmd1bWVudCgnLS13JykKKyAgICAgICAgeF9ncm91cCA9IHNlbGYud3h5el9wYXJlbnQuYWRkX2FyZ3VtZW50X2dyb3VwKCd4JykKKyAgICAgICAgeF9ncm91cC5hZGRfYXJndW1lbnQoJy15JykKKyAgICAgICAgc2VsZi53eHl6X3BhcmVudC5hZGRfYXJndW1lbnQoJ3onKQorCisgICAgICAgIHNlbGYuYWJjZF9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi5hYmNkX3BhcmVudC5hZGRfYXJndW1lbnQoJ2EnKQorICAgICAgICBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudCgnLWInKQorICAgICAgICBjX2dyb3VwID0gc2VsZi5hYmNkX3BhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAoJ2MnKQorICAgICAgICBjX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1kJykKKworICAgICAgICBzZWxmLndfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYud19wYXJlbnQuYWRkX2FyZ3VtZW50KCctLXcnKQorCisgICAgICAgIHNlbGYuel9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi56X3BhcmVudC5hZGRfYXJndW1lbnQoJ3onKQorCisgICAgICAgICMgcGFyZW50cyB3aXRoIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cHMKKyAgICAgICAgc2VsZi5hYl9tdXRleF9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgZ3JvdXAgPSBzZWxmLmFiX211dGV4X3BhcmVudC5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgICAgIHNlbGYubWFpbl9wcm9ncmFtID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9wYXJlbnQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3NlbGYud3h5el9wYXJlbnRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcteSAxIDIgLS13IDMnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHc9JzMnLCB5PScxJywgej0nMicpKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3BhcmVudF9tdXRleChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihzZWxmLmFiX211dGV4X3BhcmVudC5wYXJzZV9hcmdzKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtzZWxmLmFiX211dGV4X3BhcmVudF0pCisgICAgICAgIHNlbGYuX3Rlc3RfbXV0ZXhfYWIocGFyc2VyLnBhcnNlX2FyZ3MpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZ3JhbnBhcmVudF9tdXRleChzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiX211dGV4X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyc2VyXSkKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihwYXJzZXIucGFyc2VfYXJncykKKworICAgIGRlZiBfdGVzdF9tdXRleF9hYihzZWxmLCBwYXJzZV9hcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9hcmdzKFtdKSwgTlMoYT1GYWxzZSwgYj1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfYXJncyhbJy1hJ10pLCBOUyhhPVRydWUsIGI9RmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2FyZ3MoWyctYiddKSwgTlMoYT1GYWxzZSwgYj1UcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWEnLCAnLWInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWInLCAnLWEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWEnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWInLCAnLWMnXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYmNkX3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCctLWQgMSAtLXcgMiAzIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9JzMnLCBiPU5vbmUsIGQ9JzEnLCB3PScyJywgeT1Ob25lLCB6PSc0JykpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy1hIC0tdyAyIDMnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgdz0nMicsIHk9Tm9uZSwgej0nMycpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJy1hIC0tdyAyIDMgLWInLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnLWEgLWIgLS13IDIgMycuc3BsaXQoKSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3BhcmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAorICAgICAgICAgICAgcGFyZW50cz1bc2VsZi53X3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdGluZ19wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciwKKyAgICAgICAgICAgIHBhcmVudHM9W3NlbGYuYWJjZF9wYXJlbnQsIHNlbGYuYWJfbXV0ZXhfcGFyZW50XSkKKworICAgIGRlZiB0ZXN0X3NhbWVfYXJndW1lbnRfbmFtZV9wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYud3h5el9wYXJlbnQsIHNlbGYuel9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnMSAyJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh3PU5vbmUsIHk9Tm9uZSwgej0nMicpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgIGFiY2RlX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJywgcGFyZW50cz1bc2VsZi5hYmNkX3BhcmVudF0pCisgICAgICAgIGFiY2RlX3BhcnNlci5hZGRfYXJndW1lbnQoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdiYXIgLWIgMSAtLWQgMiAzIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9JzMnLCBiPScxJywgZD0nMicsIGU9JzQnKSkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcl9wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICBhYmNfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdmb28nLCBwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIGNfZ3JvdXAgPSBhYmNfcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnY19ncm91cCcpCisgICAgICAgIGNfZ3JvdXAuYWRkX2FyZ3VtZW50KCdjJykKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLnd4eXpfcGFyZW50LCBzZWxmLmFiX211dGV4X3BhcmVudF0KKyAgICAgICAgd3h5emFiZV9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgd3h5emFiZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnZm9vIC1hIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgYz0nNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdiYXIgLWIgIC0tdyAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1GYWxzZSwgYj1UcnVlLCB3PScyJywgeT1Ob25lLCB6PSczJywgZT0nNCcpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJ2ZvbyAtYSAtYiA0Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJ2JhciAtYiAtYSA0Jy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3RfcGFyZW50X2hlbHAoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYmNkX3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBwYXJzZXJfaGVscCA9IHBhcnNlci5mb3JtYXRfaGVscCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyX2hlbHAsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZToge30gWy1oXSBbLWIgQl0gWy0tZCBEXSBbLS13IFddIFsteSBZXSBhIHoKKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGEKKyAgICAgICAgICAgICAgegorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLWIgQgorICAgICAgICAgICAgICAtLXcgVworCisgICAgICAgICAgICBjOgorICAgICAgICAgICAgICAtLWQgRAorCisgICAgICAgICAgICB4OgorICAgICAgICAgICAgICAteSBZCisgICAgICAgICcnJy5mb3JtYXQoc2VsZi5tYWluX3Byb2dyYW0pKSkKKworICAgIGRlZiB0ZXN0X2dyb3Vwc19wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgZyA9IHBhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAodGl0bGU9J2cnLCBkZXNjcmlwdGlvbj0nZ2QnKQorICAgICAgICBnLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBnLmFkZF9hcmd1bWVudCgnLXgnKQorICAgICAgICBtID0gcGFyZW50LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBtLmFkZF9hcmd1bWVudCgnLXknKQorICAgICAgICBtLmFkZF9hcmd1bWVudCgnLXonKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIHBhcnNlci5wYXJzZV9hcmdzLAorICAgICAgICAgICAgWycteScsICdZJywgJy16JywgJ1onXSkKKworICAgICAgICBwYXJzZXJfaGVscCA9IHBhcnNlci5mb3JtYXRfaGVscCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyX2hlbHAsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZToge30gWy1oXSBbLXcgV10gWy14IFhdIFsteSBZIHwgLXogWl0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC15IFkKKyAgICAgICAgICAgICAgLXogWgorCisgICAgICAgICAgICBnOgorICAgICAgICAgICAgICBnZAorCisgICAgICAgICAgICAgIC13IFcKKyAgICAgICAgICAgICAgLXggWAorICAgICAgICAnJycuZm9ybWF0KHNlbGYubWFpbl9wcm9ncmFtKSkpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cCB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnMoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hZGRfYXJndW1lbnRfZ3JvdXAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAsIHRpdGxlPSdmb28nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hZGRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGFkZF9hcmd1bWVudCA9IGdyb3VwLmFkZF9hcmd1bWVudAorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnLS1mb28nLCByZXF1aXJlZD1UcnVlKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicsIG5hcmdzPScrJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicsIG5hcmdzPTEpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInLCBuYXJncz1hcmdwYXJzZS5QQVJTRVIpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAxID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cDEuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGdyb3VwMS5hZGRfYXJndW1lbnQoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgICAgIGdyb3VwMiA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAyLmFkZF9hcmd1bWVudCgnLS1zb3VwJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAyLmFkZF9hcmd1bWVudCgnLS1udXRzJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgICAgIGV4cGVjdGVkID0gJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gfCAtLWJhcl0gWy0tc291cCB8IC0tbnV0c10KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vCisgICAgICAgICAgICAgIC0tYmFyCisgICAgICAgICAgICAgIC0tc291cAorICAgICAgICAgICAgICAtLW51dHMKKyAgICAgICAgICAgICAgJycnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZCkpCisKK2NsYXNzIE1FTWl4aW4ob2JqZWN0KToKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmVzX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5wYXJzZV9hcmdzCisgICAgICAgIGVycm9yID0gQXJndW1lbnRQYXJzZXJFcnJvcgorICAgICAgICBmb3IgYXJnc19zdHJpbmcgaW4gc2VsZi5mYWlsdXJlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCBwYXJzZV9hcmdzLCBhcmdzX3N0cmluZy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3RfZmFpbHVyZXNfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5wYXJzZV9hcmdzCisgICAgICAgIGVycm9yID0gQXJndW1lbnRQYXJzZXJFcnJvcgorICAgICAgICBmb3IgYXJnc19zdHJpbmcgaW4gc2VsZi5mYWlsdXJlcyArIFsnJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgcGFyc2VfYXJncywgYXJnc19zdHJpbmcuc3BsaXQoKSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkucGFyc2VfYXJncworICAgICAgICBzdWNjZXNzZXMgPSBzZWxmLnN1Y2Nlc3NlcyArIHNlbGYuc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkCisgICAgICAgIGZvciBhcmdzX3N0cmluZywgZXhwZWN0ZWRfbnMgaW4gc3VjY2Vzc2VzOgorICAgICAgICAgICAgYWN0dWFsX25zID0gcGFyc2VfYXJncyhhcmdzX3N0cmluZy5zcGxpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbnMsIGV4cGVjdGVkX25zKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkucGFyc2VfYXJncworICAgICAgICBmb3IgYXJnc19zdHJpbmcsIGV4cGVjdGVkX25zIGluIHNlbGYuc3VjY2Vzc2VzOgorICAgICAgICAgICAgYWN0dWFsX25zID0gcGFyc2VfYXJncyhhcmdzX3N0cmluZy5zcGxpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfbnMsIGV4cGVjdGVkX25zKQorCisgICAgZGVmIHRlc3RfdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF91c2FnZSA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkuZm9ybWF0X3VzYWdlCisgICAgICAgIGV4cGVjdGVkX3VzYWdlID0gc2VsZi51c2FnZV93aGVuX25vdF9yZXF1aXJlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF91c2FnZSgpLCB0ZXh0d3JhcC5kZWRlbnQoZXhwZWN0ZWRfdXNhZ2UpKQorCisgICAgZGVmIHRlc3RfdXNhZ2Vfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X3VzYWdlID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLmZvcm1hdF91c2FnZQorICAgICAgICBleHBlY3RlZF91c2FnZSA9IHNlbGYudXNhZ2Vfd2hlbl9yZXF1aXJlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF91c2FnZSgpLCB0ZXh0d3JhcC5kZWRlbnQoZXhwZWN0ZWRfdXNhZ2UpKQorCisgICAgZGVmIHRlc3RfaGVscF93aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X2hlbHAgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLmZvcm1hdF9oZWxwCisgICAgICAgIGhlbHAgPSBzZWxmLnVzYWdlX3doZW5fbm90X3JlcXVpcmVkICsgc2VsZi5oZWxwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KGhlbHApKQorCisgICAgZGVmIHRlc3RfaGVscF93aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfaGVscCA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5mb3JtYXRfaGVscAorICAgICAgICBoZWxwID0gc2VsZi51c2FnZV93aGVuX3JlcXVpcmVkICsgc2VsZi5oZWxwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KGhlbHApKQorCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZVNpbXBsZShNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXonLCBuYXJncz0nPycsIGNvbnN0PSdaJywgaGVscD0nYmF6IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLS1iYXIgWCAtLWJheiBZJywgJy0tYmFyIFggLS1iYXonXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWJhciBYJywgTlMoYmFyPSdYJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJhciBYIC0tYmFyIFonLCBOUyhiYXI9J1onLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IFknLCBOUyhiYXI9Tm9uZSwgYmF6PSdZJykpLAorICAgICAgICAoJy0tYmF6JywgTlMoYmFyPU5vbmUsIGJhej0nWicpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWJhciBCQVIgfCAtLWJheiBbQkFaXV0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1iYXIgQkFSIHwgLS1iYXogW0JBWl0pCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1iYXIgQkFSICAgIGJhciBoZWxwCisgICAgICAgICAgLS1iYXogW0JBWl0gIGJheiBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUxvbmcoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQ9Tm9uZSk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFiY2RlJywgaGVscD0nYWJjZGUgaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZmdoaWonLCBoZWxwPSdmZ2hpaiBoZWxwJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWtsbW5vJywgaGVscD0na2xtbm8gaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1wcXJzdCcsIGhlbHA9J3BxcnN0IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLS1rbG1ubyBYIC0tcHFyc3QgWSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0ta2xtbm8gWCcsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPSdYJywgcHFyc3Q9Tm9uZSkpLAorICAgICAgICAoJy0tYWJjZGUgWSAtLWtsbW5vIFgnLAorICAgICAgICAgICAgTlMoYWJjZGU9J1knLCBmZ2hpaj1Ob25lLCBrbG1ubz0nWCcsIHBxcnN0PU5vbmUpKSwKKyAgICAgICAgKCctLXBxcnN0IFgnLCBOUyhhYmNkZT1Ob25lLCBmZ2hpaj1Ob25lLCBrbG1ubz1Ob25lLCBwcXJzdD0nWCcpKSwKKyAgICAgICAgKCctLXBxcnN0IFggLS1mZ2hpaiBZJywKKyAgICAgICAgICAgIE5TKGFiY2RlPU5vbmUsIGZnaGlqPSdZJywga2xtbm89Tm9uZSwgcHFyc3Q9J1gnKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhhYmNkZT1Ob25lLCBmZ2hpaj1Ob25lLCBrbG1ubz1Ob25lLCBwcXJzdD1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1hYmNkZSBBQkNERV0gWy0tZmdoaWogRkdISUpdCisgICAgICAgICAgICAgICAgWy0ta2xtbm8gS0xNTk8gfCAtLXBxcnN0IFBRUlNUXQorICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1hYmNkZSBBQkNERV0gWy0tZmdoaWogRkdISUpdCisgICAgICAgICAgICAgICAgKC0ta2xtbm8gS0xNTk8gfCAtLXBxcnN0IFBRUlNUKQorICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAtLWFiY2RlIEFCQ0RFICBhYmNkZSBoZWxwCisgICAgICAtLWZnaGlqIEZHSElKICBmZ2hpaiBoZWxwCisgICAgICAtLWtsbW5vIEtMTU5PICBrbG1ubyBoZWxwCisgICAgICAtLXBxcnN0IFBRUlNUICBwcXJzdCBoZWxwCisgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlRmlyc3RTdXBwcmVzc2VkKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXgnLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGhlbHA9J3kgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWycteCBYIC15J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXggWCcsIE5TKHg9J1gnLCB5PVRydWUpKSwKKyAgICAgICAgKCcteCBYIC14IFknLCBOUyh4PSdZJywgeT1UcnVlKSksCisgICAgICAgICgnLXknLCBOUyh4PU5vbmUsIHk9RmFsc2UpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1UcnVlKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy15XQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIC15CisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteSAgICAgICAgICB5IGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTWFueVN1cHByZXNzZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgYWRkID0gZ3JvdXAuYWRkX2FyZ3VtZW50CisgICAgICAgIGFkZCgnLS1zcGFtJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgYWRkKCctLWJhZGdlcicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICBhZGQoJy0tYmxhZGRlcicsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWworICAgICAgICAnLS1zcGFtIC0tYmFkZ2VyJywKKyAgICAgICAgJy0tYmFkZ2VyIC0tYmxhZGRlciBCJywKKyAgICAgICAgJy0tYmxhZGRlciBCIC0tc3BhbScsCisgICAgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLXNwYW0nLCBOUyhzcGFtPVRydWUsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlcicsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1GYWxzZSwgYmxhZGRlcj1Ob25lKSksCisgICAgICAgICgnLS1ibGFkZGVyIEInLCBOUyhzcGFtPUZhbHNlLCBiYWRnZXI9VHJ1ZSwgYmxhZGRlcj0nQicpKSwKKyAgICAgICAgKCctLXNwYW0gLS1zcGFtJywgTlMoc3BhbT1UcnVlLCBiYWRnZXI9VHJ1ZSwgYmxhZGRlcj1Ob25lKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhzcGFtPUZhbHNlLCBiYWRnZXI9VHJ1ZSwgYmxhZGRlcj1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9IHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxBbmRQb3NpdGlvbmFsKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdGT08nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc3BhbScsIGhlbHA9J1NQQU0nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2JhZGdlcicsIG5hcmdzPScqJywgZGVmYXVsdD0nWCcsIGhlbHA9J0JBREdFUicpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWworICAgICAgICAnLS1mb28gLS1zcGFtIFMnLAorICAgICAgICAnLS1zcGFtIFMgWCcsCisgICAgICAgICdYIC0tZm9vJywKKyAgICAgICAgJ1ggWSBaIC0tc3BhbSBTJywKKyAgICAgICAgJy0tZm9vIFggWScsCisgICAgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWZvbycsIE5TKGZvbz1UcnVlLCBzcGFtPU5vbmUsIGJhZGdlcj0nWCcpKSwKKyAgICAgICAgKCctLXNwYW0gUycsIE5TKGZvbz1GYWxzZSwgc3BhbT0nUycsIGJhZGdlcj0nWCcpKSwKKyAgICAgICAgKCdYJywgTlMoZm9vPUZhbHNlLCBzcGFtPU5vbmUsIGJhZGdlcj1bJ1gnXSkpLAorICAgICAgICAoJ1ggWSBaJywgTlMoZm9vPUZhbHNlLCBzcGFtPU5vbmUsIGJhZGdlcj1bJ1gnLCAnWScsICdaJ10pKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGZvbz1GYWxzZSwgc3BhbT1Ob25lLCBiYWRnZXI9J1gnKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIHwgLS1zcGFtIFNQQU0gfCBiYWRnZXIgW2JhZGdlciAuLi5dXQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWZvbyB8IC0tc3BhbSBTUEFNIHwgYmFkZ2VyIFtiYWRnZXIgLi4uXSkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBiYWRnZXIgICAgICAgQkFER0VSCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gICAgICAgIEZPTworICAgICAgICAgIC0tc3BhbSBTUEFNICBTUEFNCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neCBoZWxwJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2EgaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdiIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J3kgaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdjIGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLWEgLWInLCAnLWIgLWMnLCAnLWEgLWMnLCAnLWEgLWIgLWMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctYScsIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy1iJywgTlMoYT1GYWxzZSwgYj1UcnVlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLWMnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPVRydWUsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctYSAteCcsIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD1UcnVlLCB5PUZhbHNlKSksCisgICAgICAgICgnLXkgLWInLCBOUyhhPUZhbHNlLCBiPVRydWUsIGM9RmFsc2UsIHg9RmFsc2UsIHk9VHJ1ZSkpLAorICAgICAgICAoJy14IC15IC1jJywgTlMoYT1GYWxzZSwgYj1GYWxzZSwgYz1UcnVlLCB4PVRydWUsIHk9VHJ1ZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYT1GYWxzZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy14JywgTlMoYT1GYWxzZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD1UcnVlLCB5PUZhbHNlKSksCisgICAgICAgICgnLXknLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PVRydWUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14XSBbLWFdIFstYl0gWy15XSBbLWNdCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICB4IGhlbHAKKyAgICAgICAgICAtYSAgICAgICAgICBhIGhlbHAKKyAgICAgICAgICAtYiAgICAgICAgICBiIGhlbHAKKyAgICAgICAgICAteSAgICAgICAgICB5IGhlbHAKKyAgICAgICAgICAtYyAgICAgICAgICBjIGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlSW5Hcm91cChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHRpdGxlZF9ncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoCisgICAgICAgICAgICB0aXRsZT0nVGl0bGVkIGdyb3VwJywgZGVzY3JpcHRpb249J0dyb3VwIGRlc2NyaXB0aW9uJykKKyAgICAgICAgbXV0ZXhfZ3JvdXAgPSBcCisgICAgICAgICAgICB0aXRsZWRfZ3JvdXAuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgbXV0ZXhfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgbXV0ZXhfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJheicsIGhlbHA9J2JheiBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyIFggLS1iYXogWScsICctLWJheiBYIC0tYmFyIFknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWJhciBYJywgTlMoYmFyPSdYJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBZJywgTlMoYmFyPU5vbmUsIGJhej0nWScpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWJhciBCQVIgfCAtLWJheiBCQVpdCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gKC0tYmFyIEJBUiB8IC0tYmF6IEJBWikKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisgICAgICAgIFRpdGxlZCBncm91cDoKKyAgICAgICAgICBHcm91cCBkZXNjcmlwdGlvbgorCisgICAgICAgICAgLS1iYXIgQkFSICAgYmFyIGhlbHAKKyAgICAgICAgICAtLWJheiBCQVogICBiYXogaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNBbmRQb3NpdGlvbmFsc01peGVkKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnLCBoZWxwPSd4IGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J3kgaGVscCcpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYScsIG5hcmdzPSc/JywgaGVscD0nYSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2IgaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdjIGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnWCBBIC1iJywgJy1iIC1jJywgJy1jIFggQSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ1ggQScsIE5TKGE9J0EnLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggLWInLCBOUyhhPU5vbmUsIGI9VHJ1ZSwgYz1GYWxzZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIC1jJywgTlMoYT1Ob25lLCBiPUZhbHNlLCBjPVRydWUsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCBBIC15JywgTlMoYT0nQScsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PVRydWUpKSwKKyAgICAgICAgKCdYIC15IC1iJywgTlMoYT1Ob25lLCBiPVRydWUsIGM9RmFsc2UsIHg9J1gnLCB5PVRydWUpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJ1gnLCBOUyhhPU5vbmUsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCAteScsIE5TKGE9Tm9uZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXldIFstYl0gWy1jXSB4IFthXQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHggICAgICAgICAgIHggaGVscAorICAgICAgICAgIGEgICAgICAgICAgIGEgaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXkgICAgICAgICAgeSBoZWxwCisgICAgICAgICAgLWIgICAgICAgICAgYiBoZWxwCisgICAgICAgICAgLWMgICAgICAgICAgYyBoZWxwCisgICAgICAgICcnJworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwIGluIHBhcmVudCBwYXJzZXIgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBNRVBCYXNlKG9iamVjdCk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyZW50ID0gc3VwZXIoTUVQQmFzZSwgc2VsZikuZ2V0X3BhcnNlcihyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoCisgICAgICAgICAgICBwcm9nPXBhcmVudC5wcm9nLCBhZGRfaGVscD1GYWxzZSwgcGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUdyb3VwRXJyb3JzUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUdyb3VwRXJyb3JzKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZVNpbXBsZSk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUxvbmdQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZyk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUZpcnN0U3VwcHJlc3NlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVGaXJzdFN1cHByZXNzZWQpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVNYW55U3VwcHJlc3NlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVNYW55U3VwcHJlc3NlZCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsQW5kUG9zaXRpb25hbFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbEFuZFBvc2l0aW9uYWwpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNNaXhlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNNaXhlZCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc0FuZFBvc2l0aW9uYWxzTWl4ZWRQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzQW5kUG9zaXRpb25hbHNNaXhlZCk6CisgICAgcGFzcworCisjID09PT09PT09PT09PT09PT09CisjIFNldCBkZWZhdWx0IHRlc3RzCisjID09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RTZXREZWZhdWx0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfbm9fYXJncyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHg9J2ZvbycpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeT0nYmFyJywgej0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2ZvbycsIHk9J2JhcicsIHo9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2ZvbycsIHk9J2JhcicsIHo9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicsIHo9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKHg9J2JheicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdiYXonLCB5PSdiYXInLCB6PTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUyh4PSdiYXonLCB6PTIpKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c193aXRoX2FyZ3Moc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh4PSdmb28nLCB5PSdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGRlZmF1bHQ9J3hmb294JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSd4Zm9veCcsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSd4Zm9veCcsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdiYXonLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoeD0nYmF6JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9JzEnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnLXggMScuc3BsaXQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nMScsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcteCAxJy5zcGxpdCgpLCBOUygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PScxJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJy14IDEnLnNwbGl0KCksIE5TKHg9J2JheicpKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zdWJwYXJzZXJzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgIHBhcnNlcl9hID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdhJykKKyAgICAgICAgcGFyc2VyX2Euc2V0X2RlZmF1bHRzKHk9J2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJ2EnLnNwbGl0KCkpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBwYXJlbnQuc2V0X2RlZmF1bHRzKHg9J2ZvbycpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJyksIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zYW1lX2FzX2FkZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1cnLCB4PSdYJywgeT0nWScsIHo9J1onKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0nWFgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd5JywgbmFyZ3M9Jz8nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd6JywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdaWicpCisKKyAgICAgICAgIyBkZWZhdWx0cyBzZXQgcHJldmlvdXNseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1cnLCB4PSdYWCcsIHk9J1knLCB6PSdaWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgICAgICAjIHJlc2V0IGRlZmF1bHRzCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfc2FtZV9hc19hZGRfYXJndW1lbnRfZ3JvdXAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXJywgeD0nWCcsIHk9J1knLCB6PSdaJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdmb28nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy13JykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsIGRlZmF1bHQ9J1hYJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCd5JywgbmFyZ3M9Jz8nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ3onLCBuYXJncz0nPycsIGRlZmF1bHQ9J1paJykKKworCisgICAgICAgICMgZGVmYXVsdHMgc2V0IHByZXZpb3VzbHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXJywgeD0nWFgnLCB5PSdZJywgej0nWlonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyAgICAgICAgIyByZXNldCBkZWZhdWx0cworICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisjID09PT09PT09PT09PT09PT09CisjIEdldCBkZWZhdWx0IHRlc3RzCisjID09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RHZXREZWZhdWx0KFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2dldF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1iYXIiLCB0eXBlPWludCwgZGVmYXVsdD00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQorCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoZm9vPSJiYWRnZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJiYWRnZXIiLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE5hbWVzcGFjZSAnY29udGFpbnMnIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3ROYW1lc3BhY2VDb250YWluc1NpbXBsZShUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJyBub3QgaW4gbnMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIGluIG5zLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X25vbl9lbXB0eShzZWxmKToKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoeD0xLCB5PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIGluIG5zLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4JyBub3QgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd5JyBpbiBucywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJyBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3h4JyBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3onIGluIG5zLCBGYWxzZSkKKworIyA9PT09PT09PT09PT09PT09PT09PT0KKyMgSGVscCBmb3JtYXR0aW5nIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SGVscEZvcm1hdHRpbmdNZXRhY2xhc3ModHlwZSk6CisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYm9keWRpY3QpOgorICAgICAgICBpZiBuYW1lID09ICdIZWxwVGVzdENhc2UnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY2xhc3MgQWRkVGVzdHMob2JqZWN0KToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2xhc3MsIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mdW5jX3N1ZmZpeCA9IGZ1bmNfc3VmZml4CisgICAgICAgICAgICAgICAgc2VsZi5zdGRfbmFtZSA9IHN0ZF9uYW1lCisKKyAgICAgICAgICAgICAgICBmb3IgdGVzdF9mdW5jIGluIFtzZWxmLnRlc3RfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9wcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcHJpbnRfZmlsZV06CisgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9ICclc18lcycgJSAodGVzdF9mdW5jLl9fbmFtZV9fLCBmdW5jX3N1ZmZpeCkKKworICAgICAgICAgICAgICAgICAgICBkZWYgdGVzdF93cmFwcGVyKHNlbGYsIHRlc3RfZnVuYz10ZXN0X2Z1bmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9mdW5jKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfd3JhcHBlci5fX25hbWVfXyA9IHRlc3RfbmFtZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHRlc3RfY2xhc3MsIHRlc3RfbmFtZSwgdGVzdF93cmFwcGVyKQorCisgICAgICAgICAgICBkZWYgX2dldF9wYXJzZXIoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgICAgICAgICAgKnRlc3Rlci5wYXJzZXJfc2lnbmF0dXJlLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICoqdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUua3dhcmdzKQorICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudF9zaWcgaW4gdGVzdGVyLmFyZ3VtZW50X3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoKmFyZ3VtZW50X3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYXJndW1lbnRfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICBncm91cF9zaWduYXR1cmVzID0gdGVzdGVyLmFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICBmb3IgZ3JvdXBfc2lnLCBhcmd1bWVudF9zaWdzIGluIGdyb3VwX3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgqZ3JvdXBfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmdyb3VwX3NpZy5rd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudF9zaWcgaW4gYXJndW1lbnRfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqYXJndW1lbnRfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmd1bWVudF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgICAgICAgICAgZGVmIF90ZXN0KHNlbGYsIHRlc3RlciwgcGFyc2VyX3RleHQpOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBnZXRhdHRyKHRlc3Rlciwgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0ID0gdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkX3RleHQpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdGV4dCAhPSBwYXJzZXJfdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihleHBlY3RlZF90ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihwYXJzZXJfdGV4dCkpCisgICAgICAgICAgICAgICAgICAgIGZvciBjaGFyMSwgY2hhcjIgaW4gemlwKGV4cGVjdGVkX3RleHQsIHBhcnNlcl90ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIxICE9IGNoYXIyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaXJzdCBkaWZmOiAlciAlcicgJSAoY2hhcjEsIGNoYXIyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXh0LCBwYXJzZXJfdGV4dCkKKworICAgICAgICAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gZ2V0YXR0cihwYXJzZXIsICdmb3JtYXRfJXMnICUgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgZm9ybWF0KCkpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgcHJpbnRfID0gZ2V0YXR0cihwYXJzZXIsICdwcmludF8lcycgJSBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIG9sZF9zdHJlYW0gPSBnZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgU3RkSU9CdWZmZXIoKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHByaW50XygpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gZ2V0YXR0cihzeXMsIHNlbGYuc3RkX25hbWUpLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgb2xkX3N0cmVhbSkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgcGFyc2VyX3RleHQpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50X2ZpbGUoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBwcmludF8gPSBnZXRhdHRyKHBhcnNlciwgJ3ByaW50XyVzJyAlIHNlbGYuZnVuY19zdWZmaXgpCisgICAgICAgICAgICAgICAgc2ZpbGUgPSBTdGRJT0J1ZmZlcigpCisgICAgICAgICAgICAgICAgcHJpbnRfKHNmaWxlKQorICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gc2ZpbGUuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBwYXJzZXJfdGV4dCkKKworICAgICAgICAjIGFkZCB0ZXN0cyBmb3Ige2Zvcm1hdCxwcmludH1fe3VzYWdlLGhlbHAsdmVyc2lvbn0KKyAgICAgICAgZm9yIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSBpbiBbKCd1c2FnZScsICdzdGRvdXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3ZlcnNpb24nLCAnc3RkZXJyJyldOgorICAgICAgICAgICAgQWRkVGVzdHMoY2xzLCBmdW5jX3N1ZmZpeCwgc3RkX25hbWUpCisKK2Jhc2VzID0gVGVzdENhc2UsCitIZWxwVGVzdENhc2UgPSBUZXN0SGVscEZvcm1hdHRpbmdNZXRhY2xhc3MoJ0hlbHBUZXN0Q2FzZScsIGJhc2VzLCB7fSkKKworCitjbGFzcyBUZXN0SGVscEJpZ2dlck9wdGlvbmFscyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIGZvbyBiYXIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIERFU0NSSVBUSU9OCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgZm9vICAgICAgICAgICAgRk9PIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICBYIEhFTFAKKyAgICAgICAgICAtLXkgWSAgICAgICAgICBZIEhFTFAKKworICAgICAgICBFUElMT0cKKyAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBCaWdnZXJPcHRpb25hbEdyb3VwcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0dST1VQIFRJVExFJywgZGVzY3JpcHRpb249J0dST1VQIERFU0NSSVBUSU9OJyksIFsKKyAgICAgICAgICAgIFNpZygnYmF6JywgaGVscD0nQkFaIEhFTFAnKSwKKyAgICAgICAgICAgIFNpZygnLXonLCBuYXJncz0nKycsIGhlbHA9J1ogSEVMUCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIFsteiBaIFtaIC4uLl1dIGZvbyBiYXIgYmF6CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBERVNDUklQVElPTgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGZvbyAgICAgICAgICAgIEZPTyBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgQkFSIEhFTFAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICAgLXggICAgICAgICAgICAgWCBIRUxQCisgICAgICAgICAgLS15IFkgICAgICAgICAgWSBIRUxQCisKKyAgICAgICAgR1JPVVAgVElUTEU6CisgICAgICAgICAgR1JPVVAgREVTQ1JJUFRJT04KKworICAgICAgICAgIGJheiAgICAgICAgICAgIEJBWiBIRUxQCisgICAgICAgICAgLXogWiBbWiAuLi5dICAgWiBIRUxQCisKKyAgICAgICAgRVBJTE9HCisgICAgJycnCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RIZWxwQmlnZ2VyUG9zaXRpb25hbHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCBoZWxwIGFsaWducyB3aGVuIGFyZ3VtZW50cyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHVzYWdlPSdVU0FHRScsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2VraWVraWVraWZla2FuZycsIGhlbHA9J0VLSSBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBVU0FHRQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgREVTQ1JJUFRJT04KKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBla2lla2lla2lmZWthbmcgIEVLSSBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICAgIFggSEVMUAorICAgICAgICAgIC0teSBZICAgICAgICAgICAgWSBIRUxQCisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZWZvcm1hdHRpbmcoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCB0ZXh0IGFmdGVyIHNob3J0IG5hbWVzIHN0YXJ0cyBvbiB0aGUgZmlyc3QgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsCisgICAgICAgIGRlc2NyaXB0aW9uPScgICBvZGRseSAgICBmb3JtYXR0ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ3RoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIG11bHRpcGxlICcKKyAgICAgICAgICAgICAgICAgICAgJ2xpbmVzIHdoZW4gd3JhcHBlZCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nb2RkbHlcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZvcm1hdHRlZCAteCBoZWxwJyksCisgICAgICAgIFNpZygneScsIG1ldGF2YXI9J3l5eScsIGhlbHA9J25vcm1hbCB5IGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBvZGRseSBmb3JtYXR0ZWQgZ3JvdXBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyksCisgICAgICAgICBbU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgIGhlbHA9JyBvZGRseSBcbicKKyAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVkICAgIC1hICBoZWxwICBcbicKKyAgICAgICAgICAgICAgICAgICAnICAgIGFnYWluLCBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGJlIHdyYXBwZWQgb3ZlciAnCisgICAgICAgICAgICAgICAgICAgJ211bHRpcGxlIGxpbmVzJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYXSBbLWFdIHl5eQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGRlc2NyaXB0aW9uIHRoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIFwKK211bHRpcGxlCisgICAgICAgIGxpbmVzIHdoZW4gd3JhcHBlZAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eSAgICAgICAgIG5vcm1hbCB5IGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIG9kZGx5IGZvcm1hdHRlZCAteCBoZWxwCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtYSAgICAgICAgICBvZGRseSBmb3JtYXR0ZWQgLWEgaGVscCBhZ2Fpbiwgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBcCitiZSB3cmFwcGVkCisgICAgICAgICAgICAgICAgICAgICAgb3ZlciBtdWx0aXBsZSBsaW5lcworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFdyYXBwaW5nU2hvcnROYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgc2hvcnQgbmFtZXMgc3RhcnRzIG9uIHRoZSBmaXJzdCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0gJ0RcbkQnICogMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nWEhIIEhYJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neXl5JywgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0FISEggSEhBJyAqIDEwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhdIFstYV0geXl5CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXkgICAgICAgICBZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFwKK1lIWUggWUhZSAorICAgICAgICAgICAgICAgICAgICAgIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBcCitIWFhISCBIWFhISAorICAgICAgICAgICAgICAgICAgICAgIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYCisKKyAgICAgICAgQUxQSEFTOgorICAgICAgICAgIC1hICAgICAgICAgIEFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggXAorSEhBQUhISAorICAgICAgICAgICAgICAgICAgICAgIEhIQUFISEggSEhBQUhISCBISEEKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBXcmFwcGluZ0xvbmdOYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgbG9uZyBuYW1lcyBzdGFydHMgb24gdGhlIG5leHQgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyh1c2FnZT0nVVNBR0UnLCBkZXNjcmlwdGlvbj0gJ0QgRCcgKiAzMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249J1YgVicqMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUsIGhlbHA9J1hIIFhIJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neScgKiAyNSwgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIG1ldGF2YXI9J0EnICogMjUsIGhlbHA9J0FIIEFIJyAqIDIwKSwKKyAgICAgICAgICAgIFNpZygneicsIG1ldGF2YXI9J3onICogMjUsIGhlbHA9J1pIIFpIJyAqIDIwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFVTQUdFCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBcCitZSFlIIFlIWUgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBcCitYSFhIIFhIWEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEgKKworICAgICAgICBBTFBIQVM6CisgICAgICAgICAgLWEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggXAorQUhBSCBBSEFICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFICisgICAgICAgICAgenp6enp6enp6enp6enp6enp6enp6enp6egorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggXAorWkhaSCBaSFpICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpICisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIFYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgXAorVlYgVlYgVlYKKyAgICAgICAgVlYgVlYgVlYgVlYgVgorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbmFyZ3M9JysnLCBoZWxwPSd3JyksCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicsIGhlbHA9J3gnKSwKKyAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJywgbmFyZ3M9MiksCisgICAgICAgIFNpZygnYycsIGhlbHA9J2MnLCBuYXJncz0nPycpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdncm91cCcpLCBbCisgICAgICAgICAgICBTaWcoJy15JywgbmFyZ3M9Jz8nLCBoZWxwPSd5JyksCisgICAgICAgICAgICBTaWcoJy16JywgbmFyZ3M9MywgaGVscD0neicpLAorICAgICAgICAgICAgU2lnKCdkJywgaGVscD0nZCcsIG5hcmdzPScqJyksCisgICAgICAgICAgICBTaWcoJ2UnLCBoZWxwPSdlJywgbmFyZ3M9JysnKSwKKyAgICAgICAgXSkKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFcgW1cgLi4uXV0gWy14IFtYIFtYIC4uLl1dXSBbLXkgW1ldXSBbLXogWiBaIFpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBiIFtjXSBbZCBbZCAuLi5dXSBlIFtlIC4uLl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEgICAgICAgICAgICAgICBhCisgICAgICAgICAgYiAgICAgICAgICAgICAgIGIKKyAgICAgICAgICBjICAgICAgICAgICAgICAgYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcgW1cgLi4uXSAgICB3CisgICAgICAgICAgLXggW1ggW1ggLi4uXV0gIHgKKworICAgICAgICBncm91cDoKKyAgICAgICAgICAteSBbWV0gICAgICAgICAgeQorICAgICAgICAgIC16IFogWiBaICAgICAgICB6CisgICAgICAgICAgZCAgICAgICAgICAgICAgIGQKKyAgICAgICAgICBlICAgICAgICAgICAgICAgZQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE9ubHlVc2VyR3JvdXBzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygneHh4eCcpLCBbCisgICAgICAgICAgICBTaWcoJy14JywgaGVscD0neCcpLAorICAgICAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBdKSwKKyAgICAgICAgKFNpZygneXl5eScpLCBbCisgICAgICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJyksCisgICAgICAgICAgICBTaWcoJy15JywgaGVscD0neScpLAorICAgICAgICBdKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFsteCBYXSBbLXkgWV0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICB4eHh4OgorICAgICAgICAgIC14IFggIHgKKyAgICAgICAgICBhICAgICBhCisKKyAgICAgICAgeXl5eToKKyAgICAgICAgICBiICAgICBiCisgICAgICAgICAgLXkgWSAgeQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2coSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmciIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUCcgKiA2MCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbWV0YXZhcj0nVycpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBbLWhdIFstdyBXXSBbLXggWF0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVworICAgICAgICAgIC14IFgKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZUxvbmdQcm9nT3B0aW9uc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBvcHRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQJyAqIDYwKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAorICAgICAgICAgICAgICAgWy1oXSBbLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV10gXAorWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdCisgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXVworICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2dQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1AnICogNjAsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlT3B0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgICAgICBTaWcoJ2MnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1ddIFwKK1steCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXQorICAgICAgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gXAorWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorICAgICAgICAgIGMKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXCisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnKSwKKyAgICAgICAgU2lnKCcteScpLAorICAgICAgICBTaWcoJy16JyksCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYXSBbLXkgWV0gWy16IFpdCisgICAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYCisgICAgICAgICAgLXkgWQorICAgICAgICAgIC16IFoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZU9wdGlvbmFsc1Bvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnICogMjUpLAorICAgICAgICBTaWcoJ2InICogMjUpLAorICAgICAgICBTaWcoJ2MnICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0gXAorWy15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVldCisgICAgICAgICAgICAgICAgICAgIFsteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaXQorICAgICAgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VPcHRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgb3B0aW9uYWxzIGFuZCB0aGV5IHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdIFwKK1steSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXQorICAgICAgICAgICAgICAgICAgICBbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlUG9zaXRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgcG9zaXRpb25hbHMgYW5kIHRoZXkgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBWYXJpYWJsZUV4cGFuc2lvbihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHByb3Blcmx5IGluIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LAorICAgICAgICAgICAgaGVscD0neCAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKHR5cGUpcyAlJScpLAorICAgICAgICBTaWcoJy15JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlZmF1bHQ9NDIsIGNvbnN0PSdYWFgnLAorICAgICAgICAgICAgaGVscD0neSAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKGNvbnN0KXMnKSwKKyAgICAgICAgU2lnKCctLWZvbycsIGNob2ljZXM9J2FiYycsCisgICAgICAgICAgICBoZWxwPSdmb28gJShwcm9nKXMgJShkZWZhdWx0KXMgJShjaG9pY2VzKXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGRlZmF1bHQ9J2JheicsIGNob2ljZXM9WzEsIDJdLCBtZXRhdmFyPSdCQkInLAorICAgICAgICAgICAgaGVscD0nYmFyICUocHJvZylzICUoZGVmYXVsdClzICUoZGVzdClzJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBkZWZhdWx0PTAuNSwgaGVscD0nYmFkZ2VyICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFsKKyAgICAgICAgICAgIFNpZygnLWEnLCBoZWxwPSdhICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgICAgICAgICBTaWcoJy1iJywgZGVmYXVsdD0tMSwgaGVscD0nYiAlKHByb2cpcyAlKGRlZmF1bHQpcycpLAorICAgICAgICBdKQorICAgIF0KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFsteV0gWy0tZm9vIHthLGIsY31dIFstLWJhciBCQkJdIFstYSBBXSBbLWIgQl0KKyAgICAgICAgICAgICAgICAgICAgc3BhbSBiYWRnZXIKKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICAgICBzcGFtIFBST0cgTm9uZQorICAgICAgICAgIGJhZGdlciAgICAgICAgIGJhZGdlciBQUk9HIDAuNQorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWCAgICAgICAgICAgeCBQUk9HIE5vbmUgaW50ICUKKyAgICAgICAgICAteSAgICAgICAgICAgICB5IFBST0cgNDIgWFhYCisgICAgICAgICAgLS1mb28ge2EsYixjfSAgZm9vIFBST0cgTm9uZSBhLCBiLCBjCisgICAgICAgICAgLS1iYXIgQkJCICAgICAgYmFyIFBST0cgYmF6IGJhcgorCisgICAgICAgIGdyb3VwOgorICAgICAgICAgIC1hIEEgICAgICAgICAgIGEgUFJPRyBOb25lCisgICAgICAgICAgLWIgQiAgICAgICAgICAgYiBQUk9HIC0xCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmFyaWFibGVFeHBhbnNpb25Vc2FnZVN1cHBsaWVkKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgcHJvcGVybHkgd2hlbiB1c2FnZT0gaXMgcHJlc2VudCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgdXNhZ2U9JyUocHJvZylzIEZPTycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRyBGT08KKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZhcmlhYmxlRXhwYW5zaW9uTm9Bcmd1bWVudHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBwcm9wZXJseSB3aXRoIG5vIGFyZ3VtZW50cyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRworICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBTdXBwcmVzc1VzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGl0ZW1zIGNhbiBiZSBzdXBwcmVzc2VkIGluIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCB1c2FnZT1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIGhlbHAgPSAnJydcCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdXNhZ2UgPSAnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NPcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gIHNwYW0gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzT3B0aW9uYWxHcm91cChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBncm91cHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFtTaWcoJy0tYmFyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzUG9zaXRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZXF1aXJlZE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHJlcXVpcmVkIG9wdGlvbnMgZG9uJ3QgbG9vayBvcHRpb25hbCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nZm9vIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLS1mb28gRk9PCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwQWx0ZXJuYXRlUHJlZml4Q2hhcnMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3B0aW9ucyBkaXNwbGF5IHdpdGggZGlmZmVyZW50IHByZWZpeCBjaGFyYWN0ZXJzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9J147JywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdeXmZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnO2InLCAnOztiYXInLCBoZWxwPSdiYXIgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgW15eZm9vXSBbO2IgQkFSXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIF5eZm9vICAgICAgICAgICAgICBmb28gaGVscAorICAgICAgICAgIDtiIEJBUiwgOztiYXIgQkFSICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE5vSGVscE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLWhlbHAgYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLS1mb28gRk9PICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZlcnNpb25PcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB0aGUgLS12ZXJzaW9uIGFyZ3VtZW50IGNhbiBiZSBzdXBwcmVzc2VkIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHZlcnNpb249JzEuMCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICAgICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAxLjAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBOb25lKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG5vIGVycm9ycyBvY2N1ciBpZiBubyBoZWxwIGlzIHNwZWNpZmllZCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJyksCisgICAgICAgIFNpZygnc3BhbScpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08KKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBUdXBsZU1ldGF2YXIoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHNwZWNpZnlpbmcgbWV0YXZhciBhcyBhIHR1cGxlIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBoZWxwPSd3JywgbmFyZ3M9JysnLCBtZXRhdmFyPSgnVzEnLCAnVzInKSksCisgICAgICAgIFNpZygnLXgnLCBoZWxwPSd4JywgbmFyZ3M9JyonLCBtZXRhdmFyPSgnWDEnLCAnWDInKSksCisgICAgICAgIFNpZygnLXknLCBoZWxwPSd5JywgbmFyZ3M9MywgbWV0YXZhcj0oJ1kxJywgJ1kyJywgJ1kzJykpLAorICAgICAgICBTaWcoJy16JywgaGVscD0neicsIG5hcmdzPSc/JywgbWV0YXZhcj0oJ1oxJywgKSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdyBXMSBbVzIgLi4uXV0gWy14IFtYMSBbWDIgLi4uXV1dIFsteSBZMSBZMiBZM10gXAorWy16IFtaMV1dCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcxIFtXMiAuLi5dICAgIHcKKyAgICAgICAgICAteCBbWDEgW1gyIC4uLl1dICB4CisgICAgICAgICAgLXkgWTEgWTIgWTMgICAgICAgeQorICAgICAgICAgIC16IFtaMV0gICAgICAgICAgIHoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSYXdUZXh0KEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdLZWVwIHRoZSBmb3JtYXR0aW5nXG4nCisgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ2hlcmVcbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nICAgIGZvbyBoZWxwIHNob3VsZCBhbHNvXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBlYXIgYXMgZ2l2ZW4gaGVyZScpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nICAgIFRoaXMgdGV4dFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHNob3VsZCBiZSBpbmRlbnRlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBsaWtlIGl0IGlzIGhlcmVcbicpLAorICAgICAgICAgW1NpZygnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFstLWJhciBCQVJdIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEtlZXAgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAgICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlbgorCisgICAgICAgIGhlcmUKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgICAgICBmb28gaGVscCBzaG91bGQgYWxzbworICAgICAgICAgICAgICAgICAgICAgIGFwcGVhciBhcyBnaXZlbiBoZXJlCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgICAgIFRoaXMgdGV4dAorICAgICAgICAgICAgc2hvdWxkIGJlIGluZGVudGVkCisgICAgICAgICAgICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJhd0Rlc2NyaXB0aW9uKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICAgICAgICBkZXNjcmlwdGlvbj0nS2VlcCB0aGUgZm9ybWF0dGluZ1xuJworICAgICAgICAgICAgICAgICAgICAnICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlblxuJworICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICdoZXJlXG4nKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9JyAgZm9vIGhlbHAgc2hvdWxkIG5vdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHJldGFpbiB0aGlzIG9kZCBmb3JtYXR0aW5nJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPScgICAgVGhpcyB0ZXh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc2hvdWxkIGJlIGluZGVudGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZVxuJyksCisgICAgICAgICBbU2lnKCctLWJhcicsIGhlbHA9J2JhciBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyIEJBUl0gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgS2VlcCB0aGUgZm9ybWF0dGluZworICAgICAgICAgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuCisKKyAgICAgICAgaGVyZQorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAgc2hvdWxkIG5vdCByZXRhaW4gdGhpcyBvZGQgZm9ybWF0dGluZworCisgICAgICAgIHRpdGxlOgorICAgICAgICAgICAgICBUaGlzIHRleHQKKyAgICAgICAgICAgIHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAgICAgICAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZQorCisgICAgICAgICAgLS1iYXIgQkFSICAgYmFyIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBBcmd1bWVudERlZmF1bHRzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdkZXNjcmlwdGlvbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAgLSBvaCBhbmQgYnkgdGhlIHdheSwgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2JhciBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIG5hcmdzPSc/JywgZGVmYXVsdD0nd29vZGVuJywgaGVscD0nYmFkZ2VyIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nZGVzY3JpcHRpb24nKSwKKyAgICAgICAgIFtTaWcoJy0tYmF6JywgdHlwZT1pbnQsIGRlZmF1bHQ9NDIsIGhlbHA9J2JheiBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyXSBbLS1iYXogQkFaXSBzcGFtIFtiYWRnZXJdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkZXNjcmlwdGlvbgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorICAgICAgICAgIGJhZGdlciAgICAgIGJhZGdlciBoZWxwIChkZWZhdWx0OiB3b29kZW4pCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscCAtIG9oIGFuZCBieSB0aGUgd2F5LCBOb25lCisgICAgICAgICAgLS1iYXIgICAgICAgYmFyIGhlbHAgKGRlZmF1bHQ6IEZhbHNlKQorCisgICAgICAgIHRpdGxlOgorICAgICAgICAgIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJheiBCQVogICBiYXogaGVscCAoZGVmYXVsdDogNDIpCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCitjbGFzcyBUZXN0SGVscFZlcnNpb25BY3Rpb24oSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBkZWZhdWx0IGhlbHAgZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J2Rlc2NyaXB0aW9uJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLVYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nMy42JyldCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy1WXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGVzY3JpcHRpb24KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC1WLCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgT3B0aW9uYWwvUG9zaXRpb25hbCBjb25zdHJ1Y3RvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJbnZhbGlkQXJndW1lbnRDb25zdHJ1Y3RvcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBidW5jaCBvZiBpbnZhbGlkIEFyZ3VtZW50IGNvbnN0cnVjdG9ycyIiIgorCisgICAgZGVmIGFzc2VydFR5cGVFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGFyc2VyLmFkZF9hcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFZhbHVlRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZXIuYWRkX2FyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2tleXdvcmRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBiYXI9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2s9J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2FyZ3M9KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2t3YXJncz17fSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZGVzdGluYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCkKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ2FwcGVuZCcsICdzdG9yZSddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfb3B0aW9uX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS0nKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy0tLScpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCB0eXBlPSdpbnQnKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLXgnLCBhY3Rpb249J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignZm9vJywgYWN0aW9uPSdiYXonKQorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIiwgYWN0aW9uPSJzdG9yZS10cnVlIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ3Vua25vd24gYWN0aW9uJworICAgICAgICAgICAgbXNnID0gJ2V4cGVjdGVkICVyLCBmb3VuZCAlcicgJSAoZXhwZWN0ZWQsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gc3RyKGUpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9kZXN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoZGVzdD0nZm9vJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgZGVzdD0nYmF6JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ2Rlc3Qgc3VwcGxpZWQgdHdpY2UgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQnCisgICAgICAgICAgICBtc2cgPSAnZXhwZWN0ZWQgJXIsIGZvdW5kICVyJyAlIChleHBlY3RlZCwgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBzdHIoZSksIG1zZykKKworICAgIGRlZiB0ZXN0X25vX2FyZ3VtZW50X2FjdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZV9jb25zdCcsICdzdG9yZV90cnVlJywgJ3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGVuZF9jb25zdCcsICdjb3VudCddOgorICAgICAgICAgICAgZm9yIGF0dHJzIGluIFtkaWN0KHR5cGU9aW50KSwgZGljdChuYXJncz0nKycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGNob2ljZXM9J2FiJyldOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIGFjdGlvbj1hY3Rpb24sICoqYXR0cnMpCisKKyAgICBkZWYgdGVzdF9ub19hcmd1bWVudF9ub19jb25zdF9hY3Rpb25zKHNlbGYpOgorICAgICAgICAjIG9wdGlvbnMgd2l0aCB6ZXJvIGFyZ3VtZW50cworICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScsICdjb3VudCddOgorCisgICAgICAgICAgICAjIGNvbnN0IGlzIGFsd2F5cyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBjb25zdD0nZm9vJywgYWN0aW9uPWFjdGlvbikKKworICAgICAgICAgICAgIyBuYXJncyBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgbmFyZ3M9JyonLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfbW9yZV90aGFuX29uZV9hcmd1bWVudF9hY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmUnLCAnYXBwZW5kJ106CisKKyAgICAgICAgICAgICMgbmFyZ3M9MCBpcyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy14JywgbmFyZ3M9MCwgYWN0aW9uPWFjdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignc3BhbScsIG5hcmdzPTAsIGFjdGlvbj1hY3Rpb24pCisKKyAgICAgICAgICAgICMgY29uc3QgaXMgZGlzYWxsb3dlZCB3aXRoIG5vbi1vcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgICAgIGZvciBuYXJncyBpbiBbMSwgJyonLCAnKyddOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLXgnLCBjb25zdD0nZm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsIGFjdGlvbj1hY3Rpb24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdzcGFtJywgY29uc3Q9J2ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPW5hcmdzLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfcmVxdWlyZWRfY29uc3RfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlX2NvbnN0JywgJ2FwcGVuZF9jb25zdCddOgorCisgICAgICAgICAgICAjIG5hcmdzIGlzIGFsd2F5cyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBuYXJncz0nKycsIGFjdGlvbj1hY3Rpb24pCisKKyAgICBkZWYgdGVzdF9wYXJzZXJzX2FjdGlvbl9taXNzaW5nX3BhcmFtcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignY29tbWFuZCcsIGFjdGlvbj0ncGFyc2VycycsIHByb2c9J1BST0cnKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignY29tbWFuZCcsIGFjdGlvbj0ncGFyc2VycycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudFBhcnNlcikKKworICAgIGRlZiB0ZXN0X3JlcXVpcmVkX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdmb28nLCByZXF1aXJlZD1UcnVlKQorCisgICAgZGVmIHRlc3RfdXNlcl9kZWZpbmVkX2FjdGlvbihzZWxmKToKKworICAgICAgICBjbGFzcyBTdWNjZXNzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQWN0aW9uKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSk6CisgICAgICAgICAgICAgICAgaWYgZGVzdCA9PSAnc3BhbSc6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnN0IGlzIFN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIFN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3VjY2VzcygpCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1Y2Nlc3MsIHBhcnNlci5hZGRfYXJndW1lbnQsICctLXNwYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249QWN0aW9uLCBkZWZhdWx0PVN1Y2Nlc3MsIGNvbnN0PVN1Y2Nlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1Y2Nlc3MsIHBhcnNlci5hZGRfYXJndW1lbnQsICdzcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPUFjdGlvbiwgZGVmYXVsdD1TdWNjZXNzLCBjb25zdD1TdWNjZXNzKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFjdGlvbnMgcmV0dXJuZWQgYnkgYWRkX2FyZ3VtZW50CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBY3Rpb25zUmV0dXJuZWQoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICdmb28nKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICdiYXInKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsICcteScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICd4JykKKworICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0nPycsIGNvbnN0PTQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ODQsIHR5cGU9aW50LCBjaG9pY2VzPVsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGT08nLCBtZXRhdmFyPSdCQVInLCBkZXN0PSdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5uYXJncywgJz8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5jb25zdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlZmF1bHQsIDg0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi50eXBlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmNob2ljZXMsIFsxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uaGVscCwgJ0ZPTycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLm1ldGF2YXIsICdCQVInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnYmF6JykKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50IGNvbmZsaWN0IGhhbmRsaW5nIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RDb25mbGljdEhhbmRsaW5nKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2JhZF90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0nZm9vJykKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X2Vycm9yKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCwgJy14JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCwgJy0tc3BhbScpCisKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2Vycm9yKHNlbGYpOgorICAgICAgICBnZXRfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIKKyAgICAgICAgcGFyc2VyID0gZ2V0X3BhcnNlcihwcm9nPSdQUk9HJywgY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBoZWxwPSdPTEQgWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgaGVscD0nTkVXIFgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC14IFggICAgICAgIE5FVyBYCisgICAgICAgICAgICAnJycpKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScsIG1ldGF2YXI9J09MRF9TUEFNJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgbWV0YXZhcj0nTkVXX1NQQU0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0gWy0tc3BhbSBORVdfU1BBTV0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXggWCAgICAgICAgICAgICBORVcgWAorICAgICAgICAgICAgICAtLXNwYW0gTkVXX1NQQU0KKyAgICAgICAgICAgICcnJykpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBIZWxwIGFuZCBWZXJzaW9uIG9wdGlvbiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzSGVscFZlcnNpb25BY3Rpb25zKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBoZWxwIGFuZCB2ZXJzaW9uIGFjdGlvbnMiIiIKKworICAgIGRlZiBfZ2V0X2Vycm9yKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFByaW50SGVscEV4aXQoc2VsZiwgcGFyc2VyLCBhcmdzX3N0cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIuZm9ybWF0X2hlbHAoKSwKKyAgICAgICAgICAgIHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgYXJnc19zdHIuc3BsaXQoKSkuc3Rkb3V0KQorCisgICAgZGVmIGFzc2VydFByaW50VmVyc2lvbkV4aXQoc2VsZiwgcGFyc2VyLCBhcmdzX3N0cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIuZm9ybWF0X3ZlcnNpb24oKSwKKyAgICAgICAgICAgIHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgYXJnc19zdHIuc3BsaXQoKSkuc3RkZXJyKQorCisgICAgZGVmIGFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZiwgcGFyc2VyLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIHBhcnNlci5wYXJzZV9hcmdzLCBhcmdzKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIodmVyc2lvbj0nMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BQUCcsIHZlcnNpb249JyUocHJvZylzIDMuNScpCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgdmVyc2lvbj0nMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZGVycgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWFggMy43XG4nLCBtc2cpCisKKyAgICBkZWYgdGVzdF9ub19oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfYWx0ZXJuYXRlX2hlbHBfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0naGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSd2ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy14JykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy15JykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy12JykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0tdmVyc2lvbicpCisKKyAgICBkZWYgdGVzdF9oZWxwX3ZlcnNpb25fZXh0cmFfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcih2ZXJzaW9uPScxLjAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knKQorCisgICAgICAgICMgdHJ5IGFsbCBjb21iaW5hdGlvbnMgb2YgdmFsaWQgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzCisgICAgICAgIHZhbGlkX3ByZWZpeGVzID0gWycnLCAnLXgnLCAnZm9vJywgJy14IGJhcicsICdiYXogLXgnXQorICAgICAgICB2YWxpZF9zdWZmaXhlcyA9IHZhbGlkX3ByZWZpeGVzICsgWyctLWJhZC1vcHRpb24nLCAnZm9vIGJhciBiYXonXQorICAgICAgICBmb3IgcHJlZml4IGluIHZhbGlkX3ByZWZpeGVzOgorICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiB2YWxpZF9zdWZmaXhlczoKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSAnJXMgJSVzICVzJyAlIChwcmVmaXgsIHN1ZmZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsIGZvcm1hdCAlICctaCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLS1oZWxwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsIGZvcm1hdCAlICctdicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLS12ZXJzaW9uJykKKworCisjID09PT09PT09PT09PT09PT09PT09PT0KKyMgc3RyKCkgYW5kIHJlcHIoKSB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RTdHJpbmdzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHN0cigpICBhbmQgcmVwcigpIG9uIE9wdGlvbmFscyBhbmQgUG9zaXRpb25hbHMiIiIKKworICAgIGRlZiBhc3NlcnRTdHJpbmdFcXVhbChzZWxmLCBvYmosIHJlc3VsdF9zdHJpbmcpOgorICAgICAgICBmb3IgZnVuYyBpbiBbc3RyLCByZXByXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhvYmopLCByZXN1bHRfc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWwoc2VsZik6CisgICAgICAgIG9wdGlvbiA9IGFyZ3BhcnNlLkFjdGlvbigKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPVsnLS1mb28nLCAnLWEnLCAnLWInXSwKKyAgICAgICAgICAgIGRlc3Q9J2InLAorICAgICAgICAgICAgdHlwZT0naW50JywKKyAgICAgICAgICAgIG5hcmdzPScrJywKKyAgICAgICAgICAgIGRlZmF1bHQ9NDIsCisgICAgICAgICAgICBjaG9pY2VzPVsxLCAyLCAzXSwKKyAgICAgICAgICAgIGhlbHA9J0hFTFAnLAorICAgICAgICAgICAgbWV0YXZhcj0nTUVUQVZBUicpCisgICAgICAgIHN0cmluZyA9ICgKKyAgICAgICAgICAgICJBY3Rpb24ob3B0aW9uX3N0cmluZ3M9WyctLWZvbycsICctYScsICctYiddLCBkZXN0PSdiJywgIgorICAgICAgICAgICAgIm5hcmdzPScrJywgY29uc3Q9Tm9uZSwgZGVmYXVsdD00MiwgdHlwZT0naW50JywgIgorICAgICAgICAgICAgImNob2ljZXM9WzEsIDIsIDNdLCBoZWxwPSdIRUxQJywgbWV0YXZhcj0nTUVUQVZBUicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChvcHRpb24sIHN0cmluZykKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBhcmd1bWVudCA9IGFyZ3BhcnNlLkFjdGlvbigKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPVtdLAorICAgICAgICAgICAgZGVzdD0neCcsCisgICAgICAgICAgICB0eXBlPWZsb2F0LAorICAgICAgICAgICAgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgZGVmYXVsdD0yLjUsCisgICAgICAgICAgICBjaG9pY2VzPVswLjUsIDEuNSwgMi41XSwKKyAgICAgICAgICAgIGhlbHA9J0ggSEggSCcsCisgICAgICAgICAgICBtZXRhdmFyPSdNViBNViBNVicpCisgICAgICAgIHN0cmluZyA9ICgKKyAgICAgICAgICAgICJBY3Rpb24ob3B0aW9uX3N0cmluZ3M9W10sIGRlc3Q9J3gnLCBuYXJncz0nPycsICIKKyAgICAgICAgICAgICJjb25zdD1Ob25lLCBkZWZhdWx0PTIuNSwgdHlwZT0lciwgY2hvaWNlcz1bMC41LCAxLjUsIDIuNV0sICIKKyAgICAgICAgICAgICJoZWxwPSdIIEhIIEgnLCBtZXRhdmFyPSdNViBNViBNVicpIiAlIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKGFyZ3VtZW50LCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKGZvbz00MiwgYmFyPSdzcGFtJykKKyAgICAgICAgc3RyaW5nID0gIk5hbWVzcGFjZShiYXI9J3NwYW0nLCBmb289NDIpIgorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKG5zLCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIHVzYWdlPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUsICIKKyAgICAgICAgICAgICJ2ZXJzaW9uPU5vbmUsIGZvcm1hdHRlcl9jbGFzcz0lciwgY29uZmxpY3RfaGFuZGxlcj0nZXJyb3InLCAiCisgICAgICAgICAgICAiYWRkX2hlbHA9VHJ1ZSkiICUgYXJncGFyc2UuSGVscEZvcm1hdHRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChwYXJzZXIsIHN0cmluZykKKworIyA9PT09PT09PT09PT09PT0KKyMgTmFtZXNwYWNlIHRlc3RzCisjID09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TmFtZXNwYWNlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBucywgJ3gnKQorCisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9NDIsIGI9J3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmEsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmIsICdzcGFtJykKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBuczEgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYT0xLCBiPTIpCisgICAgICAgIG5zMiA9IGFyZ3BhcnNlLk5hbWVzcGFjZShiPTIsIGE9MSkKKyAgICAgICAgbnMzID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9MSkKKyAgICAgICAgbnM0ID0gYXJncGFyc2UuTmFtZXNwYWNlKGI9MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zMSwgbnMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMSwgbnMzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMSwgbnM0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgbnMzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgbnM0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMxICE9IG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMSAhPSBuczQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczIgIT0gbnMzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zNCkKKworCisjID09PT09PT09PT09PT09PT09PT0KKyMgRmlsZSBlbmNvZGluZyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RFbmNvZGluZyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgX3Rlc3RfbW9kdWxlX2VuY29kaW5nKHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoLCBfID0gb3MucGF0aC5zcGxpdGV4dChwYXRoKQorICAgICAgICBwYXRoICs9ICIucHkiCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3InLCAndXRmOCcpIGFzIGY6CisgICAgICAgICAgICBmLnJlYWQoKQorCisgICAgZGVmIHRlc3RfYXJncGFyc2VfbW9kdWxlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X21vZHVsZV9lbmNvZGluZyhhcmdwYXJzZS5fX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X3Rlc3RfYXJncGFyc2VfbW9kdWxlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X21vZHVsZV9lbmNvZGluZyhfX2ZpbGVfXykKKworIyA9PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50RXJyb3IgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QXJndW1lbnRFcnJvcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmd1bWVudF9lcnJvcihzZWxmKToKKyAgICAgICAgbXNnID0gIm15IGVycm9yIGhlcmUiCisgICAgICAgIGVycm9yID0gYXJncGFyc2UuQXJndW1lbnRFcnJvcihOb25lLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwgbXNnKQorCisjID09PT09PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50VHlwZUVycm9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBcmd1bWVudFR5cGVFcnJvcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmd1bWVudF90eXBlX2Vycm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBzcGFtKHN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignc3BhbSEnKQorCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneCcsIHR5cGU9c3BhbSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoWydYWFgnXSkKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICd1c2FnZTogUFJPRyB4XG5QUk9HOiBlcnJvcjogYXJndW1lbnQgeDogc3BhbSFcbicKKyAgICAgICAgICAgIG1zZyA9IHN5cy5leGNfaW5mbygpWzFdLnN0ZGVycgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworIyA9PT09PT09PT09PT09PT09PT09PT09CisjIHBhcnNlX2tub3duX2FyZ3MgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0UGFyc2VLbm93bkFyZ3MoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWxzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgICAgICAgYXJncywgZXh0cmFzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJy0tZm9vIEYgLS1iYXIgLS1iYXonLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoZm9vPSdGJyksIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyctLWJhcicsICctLWJheiddLCBleHRyYXMpCisKKyAgICBkZWYgdGVzdF9taXhlZChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIG5hcmdzPSc/JywgY29uc3Q9MSwgdHlwZT1pbnQpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYWRnZXInKQorCisgICAgICAgIGFyZ3YgPSBbIkIiLCAiQyIsICItLWZvbyIsICItdiIsICIzIiwgIjQiXQorICAgICAgICBhcmdzLCBleHRyYXMgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHY9Mywgc3BhbT1UcnVlLCBiYWRnZXI9IkIiKSwgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbIkMiLCAiLS1mb28iLCAiNCJdLCBleHRyYXMpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBmcm9tIGFyZ3BhcnNlIGltcG9ydCAqIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEltcG9ydFN0YXIoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIGFyZ3BhcnNlLl9fYWxsX186CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhcmdwYXJzZSwgbmFtZSkpCisKKyAgICBkZWYgdGVzdF9hbGxfZXhwb3J0c19ldmVyeXRoaW5nX2J1dF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBpdGVtcyA9IFsKKyAgICAgICAgICAgIG5hbWUKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB2YXJzKGFyZ3BhcnNlKS5pdGVtcygpCisgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCJfIikKKyAgICAgICAgICAgIGlmIG5vdCBpbnNwZWN0LmlzbW9kdWxlKHZhbHVlKQorICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0ZW1zKSwgc29ydGVkKGFyZ3BhcnNlLl9fYWxsX18pKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBzaWxlbmNlIHdhcm5pbmdzIGFib3V0IHZlcnNpb24gYXJndW1lbnQgLSB0aGVzZSBhcmUgZXhwZWN0ZWQKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygKKyAgICAgICAgICAgICgnVGhlICJ2ZXJzaW9uIiBhcmd1bWVudCB0byBBcmd1bWVudFBhcnNlciBpcyBkZXByZWNhdGVkLicsCisgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgnVGhlIChmb3JtYXR8cHJpbnQpX3ZlcnNpb24gbWV0aG9kIGlzIGRlcHJlY2F0ZWQnLAorICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgICMgUmVtb3ZlIGdsb2JhbCByZWZlcmVuY2VzIHRvIGF2b2lkIGxvb2tpbmcgbGlrZSB3ZSBoYXZlIHJlZmxlYWtzLgorICAgIFJGaWxlLnNlZW4gPSB7fQorICAgIFdGaWxlLnNlZW4gPSBzZXQoKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKaW5kZXggMDFjMjIwOS4uYjZjMGYxYiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0xNCw3ICsxNCw3IEBACiAKIGNsYXNzIEFycmF5U3ViY2xhc3NXaXRoS3dhcmdzKGFycmF5LmFycmF5KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZWNvZGUsIG5ld2FyZz1Ob25lKToKLSAgICAgICAgYXJyYXkuYXJyYXkuX19pbml0X18odHlwZWNvZGUpCisgICAgICAgIGFycmF5LmFycmF5Ll9faW5pdF9fKHNlbGYsIHR5cGVjb2RlKQogCiB0ZXN0cyA9IFtdICMgbGlzdCB0byBhY2N1bXVsYXRlIGFsbCB0ZXN0cwogdHlwZWNvZGVzID0gImN1YkJoSGlJbExmZCIKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS50eXBlY29kZSwgc2VsZi50eXBlY29kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEuaXRlbXNpemU+PXNlbGYubWluaXRlbXNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLml0ZW1zaXplPj1zZWxmLm1pbml0ZW1zaXplKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCBOb25lKQogCiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgpAQCAtNjMsMTAgKzYzLDEwIEBACiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5idWZmZXJfaW5mbywgNDIpCiAgICAgICAgIGJpID0gYS5idWZmZXJfaW5mbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGJpLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaSwgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJpKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYmlbMF0sIChpbnQsIGxvbmcpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYmlbMV0sIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaVswXSwgKGludCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaVsxXSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpWzFdLCBsZW4oYSkpCiAKICAgICBkZWYgdGVzdF9ieXRlc3dhcChzZWxmKToKQEAgLTE5OSw2ICsxOTksMjUgQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCisgICAgZGVmIHRlc3RfZmlsZXdyaXRlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoYSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAncmInKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGIuZnJvbWZpbGUoZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKwogICAgIGRlZiB0ZXN0X3RvZnJvbWxpc3Qoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCkBAIC0yMzMsMzkgKzI1MiwzOSBAQAogCiAgICAgZGVmIHRlc3RfY21wKHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPT0gNDIpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgIT0gNDIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA9PSA0MikgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSA0MikgaXMgVHJ1ZSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPT0gYSkgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICE9IGEpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPCBhKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDw9IGEpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+IGEpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj0gYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IGEpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSBhKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PSBhKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiBhKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IGEpIGlzIFRydWUpCiAKICAgICAgICAgYWwgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLnNtYWxsZXJleGFtcGxlKQogICAgICAgICBhYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuYmlnZ2VyZXhhbXBsZSkKIAotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPT0gMiphKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICE9IDIqYSkgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDwgMiphKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPD0gMiphKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPiAyKmEpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj0gMiphKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IDIqYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSAyKmEpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw9IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4gMiphKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IDIqYSkgaXMgRmFsc2UpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID09IGFsKSBpcyBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICE9IGFsKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPCBhbCkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8PSBhbCkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA+IGFsKSBpcyBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj0gYWwpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA9PSBhbCkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSBhbCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgYWwpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gYWwpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiBhbCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IGFsKSBpcyBUcnVlKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA9PSBhYikgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAhPSBhYikgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIDwgYWIpIGlzIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8PSBhYikgaXMgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID4gYWIpIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPj0gYWIpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gYWIpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgIT0gYWIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IGFiKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gYWIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+IGFiKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IGFiKSBpcyBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkgXApAQCAtMjg0LDExICszMDMsMTcgQEAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6Oi0xXSkKICAgICAgICAgYiA9IGEKICAgICAgICAgYSArPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGEsCiAgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjotMV0rMipzZWxmLmV4YW1wbGUpCiAgICAgICAgICkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYSArPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlKQorICAgICAgICApCiAKICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYuYmFkdHlwZWNvZGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fYWRkX18sIGIpCkBAIC0zMjcsMjIgKzM1MiwyMiBAQAogICAgICAgICBiID0gYQogCiAgICAgICAgIGEgKj0gNQotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgYSwKICAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDUqc2VsZi5leGFtcGxlKQogICAgICAgICApCiAKICAgICAgICAgYSAqPSAwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCiAKICAgICAgICAgYSAqPSAxMDAwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCiAKICAgICAgICAgYSAqPSAtMQotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpKQogCiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCkBAIC02MDMsMTEgKzYyOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBkYXRhLnJldmVyc2UoKQogICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCiAgICAgICAgICAgICAgICAgICAgIGFbc3RhcnQ6c3RvcDpzdGVwXSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIEwpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIEwpKQogCiAgICAgICAgICAgICAgICAgICAgIGRlbCBMW3N0YXJ0OnN0b3A6c3RlcF0KICAgICAgICAgICAgICAgICAgICAgZGVsIGFbc3RhcnQ6c3RvcDpzdGVwXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBMKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBMKSkKIAogICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgogICAgICAgICBleGFtcGxlID0gMipzZWxmLmV4YW1wbGUKQEAgLTY4Niw2ICs3MTEsMTMgQEAKICAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZStzZWxmLmV4YW1wbGVbOjotMV0pCiAgICAgICAgICkKIAorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhLmV4dGVuZChhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZStzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKwogICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi5iYWR0eXBlY29kZSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZXh0ZW5kLCBiKQogCkBAIC03MjgsNyArNzYwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgYiA9IGJ1ZmZlcihhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sIGEudG9zdHJpbmcoKVswXSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5IGIvTGliL3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTYxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzY2lpX2Zvcm1hdGQucHkKQEAgLTAsMCArMSw1OCBAQAorIyBQeU9TX2FzY2lpX2Zvcm1hdGQgaXMgZGVwcmVjYXRlZCBhbmQgbm90IGNhbGxlZCBmcm9tIGFueXdoZXJlIGluCisjICBQeXRob24gaXRzZWxmLiBTbyB0aGlzIG1vZHVsZSBpcyB0aGUgb25seSBwbGFjZSBpdCBnZXRzIHRlc3RlZC4KKyMgVGVzdCB0aGF0IGl0IHdvcmtzLCBhbmQgdGVzdCB0aGF0IGl0J3MgZGVwcmVjYXRlZC4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0cyBpZiBfY3R5cGVzIG1vZHVsZSBkb2VzIG5vdCBleGlzdAoraW1wb3J0X21vZHVsZSgnX2N0eXBlcycpCisKK2Zyb20gY3R5cGVzIGltcG9ydCBweXRob25hcGksIGNyZWF0ZV9zdHJpbmdfYnVmZmVyLCBzaXplb2YsIGJ5cmVmLCBjX2RvdWJsZQorUHlPU19hc2NpaV9mb3JtYXRkID0gcHl0aG9uYXBpLlB5T1NfYXNjaWlfZm9ybWF0ZAorCisKK2NsYXNzIEZvcm1hdERlcHJlY2F0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9ybWF0X2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBidWYgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcignICcgKiAxMDApCisKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ1B5T1NfYXNjaWlfZm9ybWF0ZCBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnlyZWYoYnVmKSwgc2l6ZW9mKGJ1ZiksICclKy4xMGYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlKDEwLjApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICcrMTAuMDAwMDAwMDAwMCcpCisKKworY2xhc3MgRm9ybWF0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgZW5zdXJlIHRoYXQsIGZvciB0aGUgcmVzdHJpY3RlZCBzZXQgb2YgZm9ybWF0IGNvZGVzLAorICAgICMgJS1mb3JtYXR0aW5nIHJldHVybnMgdGhlIHNhbWUgdmFsdWVzIG9zIFB5T1NfYXNjaWlfZm9ybWF0ZAorICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgYnVmID0gY3JlYXRlX3N0cmluZ19idWZmZXIoJyAnICogMTAwKQorCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCclZicsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJWcnLCAxMDAuMCksCisgICAgICAgICAgICAoJyUjZycsIDEwMC4wKSwKKyAgICAgICAgICAgICgnJSMuMmcnLCAxMDAuMCksCisgICAgICAgICAgICAoJyUjLjJnJywgMTIzLjQ1NjcpLAorICAgICAgICAgICAgKCclIy4yZycsIDEuMjM0NTY3ZTIwMCksCisgICAgICAgICAgICAoJyVlJywgMS4yMzQ1NjdlMjAwKSwKKyAgICAgICAgICAgICgnJWUnLCAxLjIzNCksCisgICAgICAgICAgICAoJyUrZScsIDEuMjM0KSwKKyAgICAgICAgICAgICgnJS1lJywgMS4yMzQpLAorICAgICAgICAgICAgXQorCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCdQeU9TX2FzY2lpX2Zvcm1hdGQgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgZm9yIGZvcm1hdCwgdmFsIGluIHRlc3RzOgorICAgICAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChieXJlZihidWYpLCBzaXplb2YoYnVmKSwgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2RvdWJsZSh2YWwpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCBmb3JtYXQgJSB2YWwpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChGb3JtYXREZXByZWNhdGlvblRlc3RzLCBGb3JtYXRUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQppbmRleCAyMTIyZjYxLi5jMTU3NGVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtNjQsNiArNjQsMTAgQEAKICAgICAiYnJlYWsiLAogICAgICMgQ29udGludWUKICAgICAiY29udGludWUiLAorICAgICMgZm9yIHN0YXRlbWVudHMgd2l0aCBuYWtlZCB0dXBsZXMgKHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjcwNCkKKyAgICAiZm9yIGEsYiBpbiBjOiBwYXNzIiwKKyAgICAiWyhhLGIpIGZvciBhLGIgaW4gY10iLAorICAgICIoKGEsYikgZm9yIGEsYiBpbiBjKSIsCiBdCiAKICMgVGhlc2UgYXJlIGNvbXBpbGVkIHRocm91Z2ggInNpbmdsZSIKQEAgLTEyMiwyMCArMTI2LDIwIEBACiAKIGNsYXNzIEFTVF9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgX2Fzc2VydF9vcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3Bvcyk6CisgICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhc3Rfbm9kZSwgYXN0LkFTVCkgb3IgYXN0X25vZGUuX2ZpZWxkcyBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXN0X25vZGUsIChhc3QuZXhwciwgYXN0LnN0bXQsIGFzdC5leGNlcHRoYW5kbGVyKSk6CiAgICAgICAgICAgICBub2RlX3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm9kZV9wb3MgPj0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQogICAgICAgICAgICAgcGFyZW50X3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCiAgICAgICAgIGZvciBuYW1lIGluIGFzdF9ub2RlLl9maWVsZHM6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoYXN0X25vZGUsIG5hbWUpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9vcmRlcihjaGlsZCwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGNoaWxkLCBwYXJlbnRfcG9zKQogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfb3JkZXIodmFsdWUsIHBhcmVudF9wb3MpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zKQogCiAgICAgZGVmIHRlc3Rfc25pcHBldHMoc2VsZik6CiAgICAgICAgIGZvciBpbnB1dCwgb3V0cHV0LCBraW5kIGluICgoZXhlY190ZXN0cywgZXhlY19yZXN1bHRzLCAiZXhlYyIpLApAQCAtMTQzLDI1ICsxNDcsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmFsX3Rlc3RzLCBldmFsX3Jlc3VsdHMsICJldmFsIikpOgogICAgICAgICAgICAgZm9yIGksIG8gaW4gaXRlcnRvb2xzLml6aXAoaW5wdXQsIG91dHB1dCk6CiAgICAgICAgICAgICAgICAgYXN0X3RyZWUgPSBjb21waWxlKGksICI/Iiwga2luZCwgYXN0LlB5Q0ZfT05MWV9BU1QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModG9fdHVwbGUoYXN0X3RyZWUpLCBvKQotICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9vcmRlcihhc3RfdHJlZSwgKDAsIDApKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdHVwbGUoYXN0X3RyZWUpLCBvKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihhc3RfdHJlZSwgKDAsIDApKQorCisgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CisgICAgICAgIHNsYyA9IGFzdC5wYXJzZSgieFs6Ol0iKS5ib2R5WzBdLnZhbHVlLnNsaWNlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNsYy51cHBlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2xjLmxvd2VyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2xjLnN0ZXAsIGFzdC5OYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsYy5zdGVwLmlkLCAiTm9uZSIpCisKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydChzZWxmKToKKyAgICAgICAgaW0gPSBhc3QucGFyc2UoImZyb20gLiBpbXBvcnQgeSIpLmJvZHlbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW0ubW9kdWxlKQorCisgICAgZGVmIHRlc3RfYmFzZV9jbGFzc2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuRm9yLCBhc3Quc3RtdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5OYW1lLCBhc3QuZXhwcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5zdG10LCBhc3QuQVNUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0LmV4cHIsIGFzdC5BU1QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuY29tcHJlaGVuc2lvbiwgYXN0LkFTVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5HdCwgYXN0LkFTVCkpCiAKICAgICBkZWYgdGVzdF9ub2RlY2xhc3NlcyhzZWxmKToKICAgICAgICAgeCA9IGFzdC5CaW5PcCgxLCAyLCAzLCBsaW5lbm89MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5sZWZ0LCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Lm9wLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LnJpZ2h0LCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LmxpbmVubywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxlZnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5vcCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJpZ2h0LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAwKQogCiAgICAgICAgICMgbm9kZSByYWlzZXMgZXhjZXB0aW9uIHdoZW4gbm90IGdpdmVuIGVub3VnaCBhcmd1bWVudHMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuQmluT3AsIDEsIDIpCiAKICAgICAgICAgIyBjYW4gc2V0IGF0dHJpYnV0ZXMgdGhyb3VnaCBrd2FyZ3MgdG9vCiAgICAgICAgIHggPSBhc3QuQmluT3AobGVmdD0xLCBvcD0yLCByaWdodD0zLCBsaW5lbm89MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC5sZWZ0LCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4Lm9wLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LnJpZ2h0LCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LmxpbmVubywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxlZnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5vcCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJpZ2h0LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAwKQogCiAgICAgICAgICMgdGhpcyB1c2VkIHRvIGZhaWwgYmVjYXVzZSBTdWIuX2ZpZWxkcyB3YXMgTm9uZQogICAgICAgICB4ID0gYXN0LlN1YigpCkBAIC0xNzksNyArMjAyLDcgQEAKICAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgZm9yIGFzdCBpbiAoY29tcGlsZShpLCAiPyIsICJleGVjIiwgMHg0MDApIGZvciBpIGluIGV4ZWNfdGVzdHMpOgogICAgICAgICAgICAgICAgICAgICBhc3QyID0gbW9kLmxvYWRzKG1vZC5kdW1wcyhhc3QsIHByb3RvY29sKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModG9fdHVwbGUoYXN0MiksIHRvX3R1cGxlKGFzdCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdHVwbGUoYXN0MiksIHRvX3R1cGxlKGFzdCkpCiAKIAogY2xhc3MgQVNUSGVscGVyc19UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI0MSw2ICsyNjQsMTQgQEAKICAgICAgICAgICAgICdvcD1BZGQoKSwgcmlnaHQ9TnVtKG49MSwgbGluZW5vPTQsIGNvbF9vZmZzZXQ9NCksIGxpbmVubz00LCAnCiAgICAgICAgICAgICAnY29sX29mZnNldD0wKSknCiAgICAgICAgICkKKyAgICAgICAgIyBpc3N1ZTEwODY5OiBkbyBub3QgaW5jcmVtZW50IGxpbmVubyBvZiByb290IHR3aWNlCisgICAgICAgIHNyYyA9IGFzdC5wYXJzZSgnMSArIDEnLCBtb2RlPSdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuaW5jcmVtZW50X2xpbmVubyhzcmMuYm9keSwgbj0zKSwgc3JjLmJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAoc3JjLCBpbmNsdWRlX2F0dHJpYnV0ZXM9VHJ1ZSksCisgICAgICAgICAgICAnRXhwcmVzc2lvbihib2R5PUJpbk9wKGxlZnQ9TnVtKG49MSwgbGluZW5vPTQsIGNvbF9vZmZzZXQ9MCksICcKKyAgICAgICAgICAgICdvcD1BZGQoKSwgcmlnaHQ9TnVtKG49MSwgbGluZW5vPTQsIGNvbF9vZmZzZXQ9NCksIGxpbmVubz00LCAnCisgICAgICAgICAgICAnY29sX29mZnNldD0wKSknCisgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2l0ZXJfZmllbGRzKHNlbGYpOgogICAgICAgICBub2RlID0gYXN0LnBhcnNlKCdmb28oKScsIG1vZGU9J2V2YWwnKQpAQCAtMjcxLDggKzMwMiwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJyhUcnVlLCBGYWxzZSwgTm9uZSknKSwgKFRydWUsIEZhbHNlLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXN0LmxpdGVyYWxfZXZhbCwgJ2ZvbygpJykKIAorICAgIGRlZiB0ZXN0X2xpdGVyYWxfZXZhbF9pc3N1ZTQ5MDcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMmonKSwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMTAgKyAyaicpLCAxMCArIDJqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJzEuNSAtIDJqJyksIDEuNSAtIDJqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3QubGl0ZXJhbF9ldmFsLCAnMiArICgzICsgNGopJykKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChBU1RfVGVzdHMsIEFTVEhlbHBlcnNfVGVzdCkKIApAQCAtMjg1LDcgKzMyMyw3IEBACiAgICAgICAgICAgICBwcmludCBraW5kKyJfcmVzdWx0cyA9IFsiCiAgICAgICAgICAgICBmb3IgcyBpbiBzdGF0ZW1lbnRzOgogICAgICAgICAgICAgICAgIHByaW50IHJlcHIodG9fdHVwbGUoY29tcGlsZShzLCAiPyIsIGtpbmQsIDB4NDAwKSkpKyIsIgotICAgICAgICAgICAgICAgIHByaW50ICJdIgorICAgICAgICAgICAgcHJpbnQgIl0iCiAgICAgICAgIHByaW50ICJtYWluKCkiCiAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKICAgICB0ZXN0X21haW4oKQpAQCAtMzE0LDYgKzM1Miw5IEBACiAoJ01vZHVsZScsIFsoJ1Bhc3MnLCAoMSwgMCkpXSksCiAoJ01vZHVsZScsIFsoJ0JyZWFrJywgKDEsIDApKV0pLAogKCdNb2R1bGUnLCBbKCdDb250aW51ZScsICgxLCAwKSldKSwKKygnTW9kdWxlJywgWygnRm9yJywgKDEsIDApLCAoJ1R1cGxlJywgKDEsIDQpLCBbKCdOYW1lJywgKDEsIDQpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDExKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdUdXBsZScsICgxLCAyKSwgWygnTmFtZScsICgxLCAyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDExKSwgWygnTmFtZScsICgxLCAxMSksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMyksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ2MnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnVHVwbGUnLCAoMSwgMiksIFsoJ05hbWUnLCAoMSwgMiksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSldLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICdjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCiBdCiBzaW5nbGVfcmVzdWx0cyA9IFsKICgnSW50ZXJhY3RpdmUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksICgnQWRkJywpLCAoJ051bScsICgxLCAyKSwgMikpKV0pLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKaW5kZXggNTUwMWMyZC4uYzgxZWMwZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CkBAIC0xLDk5ICsxLDExMCBAQAotIyB0ZXN0IGFzeW5jaGF0IC0tIHJlcXVpcmVzIHRocmVhZGluZworIyB0ZXN0IGFzeW5jaGF0CiAKLWltcG9ydCB0aHJlYWQgIyBJZiB0aGlzIGZhaWxzLCB3ZSBjYW4ndCB0ZXN0IHRoaXMgbW9kdWxlCi1pbXBvcnQgYXN5bmNvcmUsIGFzeW5jaGF0LCBzb2NrZXQsIHRocmVhZGluZywgdGltZQoraW1wb3J0IGFzeW5jb3JlLCBhc3luY2hhdCwgc29ja2V0LCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCiBTRVJWRVJfUVVJVCA9ICdRVUlUXG4nCiAKLWNsYXNzIGVjaG9fc2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgotICAgICMgcGFyYW1ldGVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhc3NlZCBiYWNrIHRvIHRoZQotICAgICMgY2xpZW50IGVhY2ggc2VuZAotICAgIGNodW5rX3NpemUgPSAxCitpZiB0aHJlYWRpbmc6CisgICAgY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICMgcGFyYW1ldGVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBhc3NlZCBiYWNrIHRvIHRoZQorICAgICAgICAjIGNsaWVudCBlYWNoIHNlbmQKKyAgICAgICAgY2h1bmtfc2l6ZSA9IDEKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudCk6Ci0gICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5ldmVudCA9IGV2ZW50Ci0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudCk6CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmV2ZW50ID0gZXZlbnQKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICAgICAgIyBUaGlzIHdpbGwgYmUgc2V0IGlmIHRoZSBjbGllbnQgd2FudHMgdXMgdG8gd2FpdCBiZWZvcmUgZWNob2luZyBkYXRhCisgICAgICAgICAgICAjIGJhY2suCisgICAgICAgICAgICBzZWxmLnN0YXJ0X3Jlc2VuZF9ldmVudCA9IE5vbmUKIAotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuc29jay5saXN0ZW4oMSkKLSAgICAgICAgc2VsZi5ldmVudC5zZXQoKQotICAgICAgICBjb25uLCBjbGllbnQgPSBzZWxmLnNvY2suYWNjZXB0KCkKLSAgICAgICAgc2VsZi5idWZmZXIgPSAiIgotICAgICAgICAjIGNvbGxlY3QgZGF0YSB1bnRpbCBxdWl0IG1lc3NhZ2UgaXMgc2VlbgotICAgICAgICB3aGlsZSBTRVJWRVJfUVVJVCBub3QgaW4gc2VsZi5idWZmZXI6Ci0gICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEpCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlciArIGRhdGEKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc29jay5saXN0ZW4oMSkKKyAgICAgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKyAgICAgICAgICAgIGNvbm4sIGNsaWVudCA9IHNlbGYuc29jay5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSAiIgorICAgICAgICAgICAgIyBjb2xsZWN0IGRhdGEgdW50aWwgcXVpdCBtZXNzYWdlIGlzIHNlZW4KKyAgICAgICAgICAgIHdoaWxlIFNFUlZFUl9RVUlUIG5vdCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlciArIGRhdGEKIAotICAgICAgICAjIHJlbW92ZSB0aGUgU0VSVkVSX1FVSVQgbWVzc2FnZQotICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyLnJlcGxhY2UoU0VSVkVSX1FVSVQsICcnKQorICAgICAgICAgICAgIyByZW1vdmUgdGhlIFNFUlZFUl9RVUlUIG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXIucmVwbGFjZShTRVJWRVJfUVVJVCwgJycpCiAKLSAgICAgICAgIyByZS1zZW5kIGVudGlyZSBzZXQgb2YgY29sbGVjdGVkIGRhdGEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsIHNpbmNlCi0gICAgICAgICAgICAjIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjaGFubmVsIHdoZW4gaXQncyBkb25lIHNlbmRpbmcKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuYnVmZmVyOgotICAgICAgICAgICAgICAgIG4gPSBjb25uLnNlbmQoc2VsZi5idWZmZXJbOnNlbGYuY2h1bmtfc2l6ZV0pCi0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKLSAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyW246XQotICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBzZWxmLnN0YXJ0X3Jlc2VuZF9ldmVudDoKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3Jlc2VuZF9ldmVudC53YWl0KCkKKworICAgICAgICAgICAgIyByZS1zZW5kIGVudGlyZSBzZXQgb2YgY29sbGVjdGVkIGRhdGEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjaGFubmVsIHdoZW4gaXQncyBkb25lIHNlbmRpbmcKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvbm4uc2VuZChzZWxmLmJ1ZmZlcls6c2VsZi5jaHVua19zaXplXSkKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltuOl0KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKworICAgIGNsYXNzIGVjaG9fY2xpZW50KGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXJtaW5hdG9yLCBzZXJ2ZXJfcG9ydCk6CisgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5jb25uZWN0KChIT1NULCBzZXJ2ZXJfcG9ydCkpCisgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKHRlcm1pbmF0b3IpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICcnCisKKyAgICAgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIHNlbGVjdC5wb2xsIHJldHVybnMgYSBzZWxlY3QuUE9MTEhVUCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0cworICAgICAgICAgICAgIyBvbiBkYXJ3aW4sIHNvIGp1c3QgaWdub3JlIGl0CisgICAgICAgICAgICBkZWYgaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcwogCi1jbGFzcyBlY2hvX2NsaWVudChhc3luY2hhdC5hc3luY19jaGF0KToKKyAgICAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXJtaW5hdG9yLCBzZXJ2ZXJfcG9ydCk6Ci0gICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5jb250ZW50cyA9IFtdCi0gICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICBzZWxmLmNvbm5lY3QoKEhPU1QsIHNlcnZlcl9wb3J0KSkKLSAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcih0ZXJtaW5hdG9yKQotICAgICAgICBzZWxmLmJ1ZmZlciA9ICcnCi0KLSAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgIyBzZWxlY3QucG9sbCByZXR1cm5zIGEgc2VsZWN0LlBPTExIVVAgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdHMKLSAgICAgICAgIyBvbiBkYXJ3aW4sIHNvIGp1c3QgaWdub3JlIGl0Ci0gICAgICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEKLQotICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgotICAgICAgICBzZWxmLmNvbnRlbnRzLmFwcGVuZChzZWxmLmJ1ZmZlcikKLSAgICAgICAgc2VsZi5idWZmZXIgPSAiIgorICAgICAgICBkZWYgZm91bmRfdGVybWluYXRvcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY29udGVudHMuYXBwZW5kKHNlbGYuYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSAiIgogCiAKLWRlZiBzdGFydF9lY2hvX3NlcnZlcigpOgotICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICBzID0gZWNob19zZXJ2ZXIoZXZlbnQpCi0gICAgcy5zdGFydCgpCi0gICAgZXZlbnQud2FpdCgpCi0gICAgZXZlbnQuY2xlYXIoKQotICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KLSAgICByZXR1cm4gcywgZXZlbnQKKyAgICBkZWYgc3RhcnRfZWNob19zZXJ2ZXIoKToKKyAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzID0gZWNob19zZXJ2ZXIoZXZlbnQpCisgICAgICAgIHMuc3RhcnQoKQorICAgICAgICBldmVudC53YWl0KCkKKyAgICAgICAgZXZlbnQuY2xlYXIoKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICMgR2l2ZSBzZXJ2ZXIgdGltZSB0byBzdGFydCBhY2NlcHRpbmcuCisgICAgICAgIHJldHVybiBzLCBldmVudAogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBUZXN0QXN5bmNoYXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHVzZXBvbGwgPSBGYWxzZQogCiAgICAgZGVmIHNldFVwIChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAKICAgICBkZWYgdGVhckRvd24gKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiBsaW5lX3Rlcm1pbmF0b3JfY2hlY2soc2VsZiwgdGVybSwgc2VydmVyX2NodW5rKToKICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQpAQCAtMjAwLDExICsyMTEsMTggQEAKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX3doZW5fZG9uZShzZWxmKToKICAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIHMuc3RhcnRfcmVzZW5kX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgYyA9IGVjaG9fY2xpZW50KCdcbicsIHMucG9ydCkKICAgICAgICAgYy5wdXNoKCJoZWxsbyB3b3JsZFxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYy5jbG9zZV93aGVuX2RvbmUoKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKworICAgICAgICAjIE9ubHkgYWxsb3cgdGhlIHNlcnZlciB0byBzdGFydCBlY2hvaW5nIGRhdGEgYmFjayB0byB0aGUgY2xpZW50IGFmdGVyCisgICAgICAgICMgdGhlIGNsaWVudCBoYXMgY2xvc2VkIGl0cyBjb25uZWN0aW9uLiAgVGhpcyBwcmV2ZW50cyBhIHJhY2UgY29uZGl0aW9uCisgICAgICAgICMgd2hlcmUgdGhlIHNlcnZlciBlY2hvZXMgYWxsIG9mIGl0cyBkYXRhIGJlZm9yZSB3ZSBjYW4gY2hlY2sgdGhhdCBpdAorICAgICAgICAjIGdvdCBhbnkgZG93biBiZWxvdy4KKyAgICAgICAgcy5zdGFydF9yZXNlbmRfZXZlbnQuc2V0KCkKICAgICAgICAgcy5qb2luKCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKaW5kZXggNTZmMTkzOS4uN2QxYTNjYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CkBAIC0zLDE1ICszLDIwIEBACiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBlcnJubwogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluawogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogCiBjbGFzcyBkdW1teXNvY2tldDoKQEAgLTExMiw2NSArMTE3LDY1IEBACiAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tbGlzdC8yMDAxLU9jdG9iZXIvMTA5OTczLmh0bWwpCiAgICAgIyBUaGVzZSBjb25zdGFudHMgc2hvdWxkIGJlIHByZXNlbnQgYXMgbG9uZyBhcyBwb2xsIGlzIGF2YWlsYWJsZQogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiB0ZXN0X3JlYWR3cml0ZShzZWxmKToKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBjb3JyZWN0IG1ldGhvZHMgYXJlIGNhbGxlZCBieSByZWFkd3JpdGUoKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpLCAnc2VsZWN0LnBvbGwgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X3JlYWR3cml0ZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvcnJlY3QgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHJlYWR3cml0ZSgpCiAKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSAoJ3JlYWQnLCAnZXhwdCcsICd3cml0ZScsICdjbG9zZWQnLCAnZXJyb3JfaGFuZGxlZCcpCisgICAgICAgIGF0dHJpYnV0ZXMgPSAoJ3JlYWQnLCAnZXhwdCcsICd3cml0ZScsICdjbG9zZWQnLCAnZXJyb3JfaGFuZGxlZCcpCiAKLSAgICAgICAgICAgIGV4cGVjdGVkID0gKAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTElOLCAncmVhZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTFBSSSwgJ2V4cHQnKSwKLSAgICAgICAgICAgICAgICAoc2VsZWN0LlBPTExPVVQsICd3cml0ZScpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTEVSUiwgJ2Nsb3NlZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTEhVUCwgJ2Nsb3NlZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTE5WQUwsICdjbG9zZWQnKSwKLSAgICAgICAgICAgICAgICApCisgICAgICAgIGV4cGVjdGVkID0gKAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMSU4sICdyZWFkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExQUkksICdleHB0JyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExPVVQsICd3cml0ZScpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMRVJSLCAnY2xvc2VkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExIVVAsICdjbG9zZWQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTE5WQUwsICdjbG9zZWQnKSwKKyAgICAgICAgICAgICkKIAotICAgICAgICAgICAgY2xhc3MgdGVzdG9iajoKLSAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IEZhbHNlCisgICAgICAgIGNsYXNzIHRlc3RvYmo6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5yZWFkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX2hhbmRsZWQgPSBGYWxzZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkX2V2ZW50KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBUcnVlCisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5yZWFkID0gVHJ1ZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGVfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhwdF9ldmVudChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0X2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gVHJ1ZQogCi0gICAgICAgICAgICBmb3IgZmxhZywgZXhwZWN0ZWRhdHRyIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgIHRvYmogPSB0ZXN0b2JqKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgZXhwZWN0ZWRhdHRyKSwgRmFsc2UpCi0gICAgICAgICAgICAgICAgYXN5bmNvcmUucmVhZHdyaXRlKHRvYmosIGZsYWcpCisgICAgICAgIGZvciBmbGFnLCBleHBlY3RlZGF0dHIgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICB0b2JqID0gdGVzdG9iaigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgZXhwZWN0ZWRhdHRyKSwgRmFsc2UpCisgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodG9iaiwgZmxhZykKIAotICAgICAgICAgICAgICAgICMgT25seSB0aGUgYXR0cmlidXRlIG1vZGlmaWVkIGJ5IHRoZSByb3V0aW5lIHdlIGV4cGVjdCB0byBiZQotICAgICAgICAgICAgICAgICMgY2FsbGVkIHNob3VsZCBiZSBUcnVlLgotICAgICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBhdHRyKSwgYXR0cj09ZXhwZWN0ZWRhdHRyKQorICAgICAgICAgICAgIyBPbmx5IHRoZSBhdHRyaWJ1dGUgbW9kaWZpZWQgYnkgdGhlIHJvdXRpbmUgd2UgZXhwZWN0IHRvIGJlCisgICAgICAgICAgICAjIGNhbGxlZCBzaG91bGQgYmUgVHJ1ZS4KKyAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHRvYmosIGF0dHIpLCBhdHRyPT1leHBlY3RlZGF0dHIpCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKLSAgICAgICAgICAgICAgICAjIGJ1YmJsZXMgYWxsIHRoZSB3YXkgdXAgdGhyb3VnaCBhc3luY29yZSByZWFkd3JpdGUgY2FsbAotICAgICAgICAgICAgICAgIHRyMSA9IGV4aXRpbmdkdW1teSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUucmVhZHdyaXRlLCB0cjEsIGZsYWcpCisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKKyAgICAgICAgICAgICMgYnViYmxlcyBhbGwgdGhlIHdheSB1cCB0aHJvdWdoIGFzeW5jb3JlIHJlYWR3cml0ZSBjYWxsCisgICAgICAgICAgICB0cjEgPSBleGl0aW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUucmVhZHdyaXRlLCB0cjEsIGZsYWcpCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gRXhpdE5vdyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIKLSAgICAgICAgICAgICAgICAjIG1ldGhvZCBjYXVzZXMgdGhlIGhhbmRsZV9lcnJvciBtZXRob2QgdG8gZ2V0IGNhbGxlZAotICAgICAgICAgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIEZhbHNlKQotICAgICAgICAgICAgICAgIGFzeW5jb3JlLnJlYWR3cml0ZSh0cjIsIGZsYWcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBFeGl0Tm93IGluIHRoZSBvYmplY3QgaGFuZGxlcgorICAgICAgICAgICAgIyBtZXRob2QgY2F1c2VzIHRoZSBoYW5kbGVfZXJyb3IgbWV0aG9kIHRvIGdldCBjYWxsZWQKKyAgICAgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgRmFsc2UpCisgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodHIyLCBmbGFnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlYWxsX2NoZWNrKEZhbHNlKQpAQCAtMjUzLDcgKzI1OCw3IEBACiAgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAKICAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsaW5lcywgWydsb2c6ICVzJyAlIGwxLCAnbG9nOiAlcycgJSBsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnbG9nOiAlcycgJSBsMSwgJ2xvZzogJXMnICUgbDJdKQogCiAgICAgZGVmIHRlc3RfbG9nX2luZm8oc2VsZik6CiAgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKQEAgLTI3NSw3ICsyODAsNyBAQAogICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIGV4cGVjdGVkID0gWydFR0dTOiAlcycgJSBsMSwgJ2luZm86ICVzJyAlIGwyLCAnU1BBTTogJXMnICUgbDNdCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZXMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3VuaGFuZGxlZChzZWxmKToKICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQpAQCAtMzAwLDIwICszMDUsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCB3cml0ZSBldmVudCcsCiAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgY29ubmVjdCBldmVudCcsCiAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgYWNjZXB0IGV2ZW50J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZXMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2lzc3VlXzg1OTQoc2VsZik6CisgICAgICAgICMgWFhYIC0gdGhpcyB0ZXN0IGlzIHN1cHBvc2VkIHRvIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciBQeXRob24KKyAgICAgICAgIyB2ZXJzaW9uCiAgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKHNvY2tldC5zb2NrZXQoKSkKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2Ugbm8gbG9uZ2VyIHJlZmVycyB0byB0aGUgc29ja2V0CiAgICAgICAgICMgb2JqZWN0IGJ1dCB0aGUgZGlzcGF0Y2hlciBpbnN0YW5jZSBpbnN0ZWFkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQuZm9vCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdkaXNwYXRjaGVyIGluc3RhbmNlJyBpbiBzdHIoZXJyKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQotICAgICAgICAjIHRlc3QgY2hlYXAgaW5oZXJpdGFuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEF0dHJpYnV0ZUVycm9yLCAnZGlzcGF0Y2hlciBpbnN0YW5jZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIsIGQsICdmb28nKQorICAgICAgICAjIGNoZWFwIGluaGVyaXRhbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IGlzIHN1cHBvc2VkCisgICAgICAgICMgdG8gc3RpbGwgd29yayBidXQgYSBEZXByZWNhdGlvbldhcm5pbmcgaXMgZXhwZWN0ZWQKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGZhbWlseSA9IGQuZmFtaWx5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykpCiAKICAgICBkZWYgdGVzdF9zdHJlcnJvcihzZWxmKToKICAgICAgICAgIyByZWZlcnMgdG8gYnVnICM4NTczCkBAIC0zMjEsNyArMzMwLDcgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ3N0cmVycm9yJyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgb3Muc3RyZXJyb3IoZXJybm8uRVBFUk0pKQogICAgICAgICBlcnIgPSBhc3luY29yZS5fc3RyZXJyb3IoLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidW5rbm93biBlcnJvciIgaW4gZXJyLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIgIT0gIiIpCiAKIAogY2xhc3MgZGlzcGF0Y2hlcndpdGhzZW5kX25vcmVhZChhc3luY29yZS5kaXNwYXRjaGVyX3dpdGhfc2VuZCk6CkBAIC0zNDAsOTYgKzM0OSwzNzMgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCiAgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKLSAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDMpCi0gICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICBldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrLnNldHRpbWVvdXQoMykKKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc29jaykKIAogICAgICAgICBjYXAgPSBTdHJpbmdJTygpCi0gICAgICAgIGFyZ3MgPSAoc2VsZi5ldnQsIGNhcCwgc2VsZi5zb2NrKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jYXB0dXJlX3NlcnZlciwgYXJncz1hcmdzKS5zdGFydCgpCisgICAgICAgIGFyZ3MgPSAoZXZ0LCBjYXAsIHNvY2spCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jYXB0dXJlX3NlcnZlciwgYXJncz1hcmdzKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB3YWl0IGEgbGl0dGxlIGxvbmdlciBmb3IgdGhlIHNlcnZlciB0byBpbml0aWFsaXplIChpdCBzb21ldGltZXMKKyAgICAgICAgICAgICMgcmVmdXNlcyBjb25uZWN0aW9ucyBvbiBzbG93IG1hY2hpbmVzIHdpdGhvdXQgdGhpcyB3YWl0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCiAKLSAgICAgICAgIyB3YWl0IGEgbGl0dGxlIGxvbmdlciBmb3IgdGhlIHNlcnZlciB0byBpbml0aWFsaXplIChpdCBzb21ldGltZXMKLSAgICAgICAgIyByZWZ1c2VzIGNvbm5lY3Rpb25zIG9uIHNsb3cgbWFjaGluZXMgd2l0aG91dCB0aGlzIHdhaXQpCi0gICAgICAgIHRpbWUuc2xlZXAoMC4yKQorICAgICAgICAgICAgZGF0YSA9ICJTdXBwb3NlIHRoZXJlIGlzbid0IGEgMTYtdG9uIHdlaWdodD8iCisgICAgICAgICAgICBkID0gZGlzcGF0Y2hlcndpdGhzZW5kX25vcmVhZCgpCisgICAgICAgICAgICBkLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIGQuY29ubmVjdCgoSE9TVCwgcG9ydCkpCiAKLSAgICAgICAgZGF0YSA9ICJTdXBwb3NlIHRoZXJlIGlzbid0IGEgMTYtdG9uIHdlaWdodD8iCi0gICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKLSAgICAgICAgZC5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGQuY29ubmVjdCgoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgICAgICMgZ2l2ZSB0aW1lIGZvciBzb2NrZXQgdG8gY29ubmVjdAorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAKLSAgICAgICAgIyBnaXZlIHRpbWUgZm9yIHNvY2tldCB0byBjb25uZWN0Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgZC5zZW5kKGRhdGEpCisgICAgICAgICAgICBkLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGQuc2VuZCgnXG4nKQogCi0gICAgICAgIGQuc2VuZChkYXRhKQotICAgICAgICBkLnNlbmQoZGF0YSkKLSAgICAgICAgZC5zZW5kKCdcbicpCisgICAgICAgICAgICBuID0gMTAwMAorICAgICAgICAgICAgd2hpbGUgZC5vdXRfYnVmZmVyIGFuZCBuID4gMDoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5wb2xsKCkKKyAgICAgICAgICAgICAgICBuIC09IDEKIAotICAgICAgICBuID0gMTAwMAotICAgICAgICB3aGlsZSBkLm91dF9idWZmZXIgYW5kIG4gPiAwOgotICAgICAgICAgICAgYXN5bmNvcmUucG9sbCgpCi0gICAgICAgICAgICBuIC09IDEKKyAgICAgICAgICAgIGV2dC53YWl0KCkKIAotICAgICAgICBzZWxmLmV2dC53YWl0KCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcC5nZXR2YWx1ZSgpLCBkYXRhKjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcC5nZXR2YWx1ZSgpLCBkYXRhKjIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LmpvaW4oKQogCiAKIGNsYXNzIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzX1VzZVBvbGwoRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHMpOgogICAgIHVzZXBvbGwgPSBUcnVlCiAKLWlmIGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX3dyYXBwZXInKToKLSAgICBjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmQgPSAiSXQncyBub3QgZGVhZCwgaXQncyBzbGVlcGluZyEiCi0gICAgICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZShzZWxmLmQpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV93cmFwcGVyJyksCisgICAgICAgICAgICAgICAgICAgICAnYXN5bmNvcmUuZmlsZV93cmFwcGVyIHJlcXVpcmVkJykKK2NsYXNzIEZpbGVXcmFwcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSAiSXQncyBub3QgZGVhZCwgaXQncyBzbGVlcGluZyEiCisgICAgICAgIHdpdGggZmlsZShURVNURk4sICd3JykgYXMgaDoKKyAgICAgICAgICAgIGgud3JpdGUoc2VsZi5kKQogCi0gICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQogCi0gICAgICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6Ci0gICAgICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKLSAgICAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCi0gICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICBkZWYgdGVzdF9yZWN2KHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgdyA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwody5mZCwgZmQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmlsZW5vKCksIGZkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlY3YoMTMpLCAiSXQncyBub3QgZGVhZCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcucmVhZCg2KSwgIiwgaXQncyIpCi0gICAgICAgICAgICB3LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHcucmVhZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LmZkLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LmZpbGVubygpLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlY3YoMTMpLCAiSXQncyBub3QgZGVhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5yZWFkKDYpLCAiLCBpdCdzIikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHcucmVhZCwgMSkKIAotICAgICAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgotICAgICAgICAgICAgZDEgPSAiQ29tZSBhZ2Fpbj8iCi0gICAgICAgICAgICBkMiA9ICJJIHdhbnQgdG8gYnV5IHNvbWUgY2hlZXNlLiIKLSAgICAgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCi0gICAgICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQotICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAKLSAgICAgICAgICAgIHcud3JpdGUoZDEpCi0gICAgICAgICAgICB3LnNlbmQoZDIpCi0gICAgICAgICAgICB3LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZShURVNURk4pLnJlYWQoKSwgc2VsZi5kICsgZDEgKyBkMikKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICBkMSA9ICJDb21lIGFnYWluPyIKKyAgICAgICAgZDIgPSAiSSB3YW50IHRvIGJ1eSBzb21lIGNoZWVzZS4iCisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCisgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCisgICAgICAgIG9zLmNsb3NlKGZkKQogCi0gICAgICAgIGRlZiB0ZXN0X2Rpc3BhdGNoZXIoc2VsZik6Ci0gICAgICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKLSAgICAgICAgICAgIGRhdGEgPSBbXQotICAgICAgICAgICAgY2xhc3MgRmlsZURpc3BhdGNoZXIoYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyKToKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHNlbGYucmVjdigyOSkpCi0gICAgICAgICAgICBzID0gRmlsZURpc3BhdGNoZXIoZmQpCi0gICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCB1c2VfcG9sbD1UcnVlLCBjb3VudD0yKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIi5qb2luKGRhdGEpLCBzZWxmLmQpCisgICAgICAgIHcud3JpdGUoZDEpCisgICAgICAgIHcuc2VuZChkMikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZShURVNURk4pLnJlYWQoKSwgc2VsZi5kICsgZDEgKyBkMikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX2Rpc3BhdGNoZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyIHJlcXVpcmVkJykKKyAgICBkZWYgdGVzdF9kaXNwYXRjaGVyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGNsYXNzIEZpbGVEaXNwYXRjaGVyKGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlcik6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoc2VsZi5yZWN2KDI5KSkKKyAgICAgICAgcyA9IEZpbGVEaXNwYXRjaGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPVRydWUsIGNvdW50PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4oZGF0YSksIHNlbGYuZCkKKworCitjbGFzcyBCYXNlVGVzdEhhbmRsZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaz1Ob25lKToKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBzb2NrKQorICAgICAgICBzZWxmLmZsYWcgPSBGYWxzZQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2FjY2VwdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfY29ubmVjdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfZXhwdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2Nsb3NlIG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBUQ1BTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICAgIiIiQSBzZXJ2ZXIgd2hpY2ggbGlzdGVucyBvbiBhbiBhZGRyZXNzIGFuZCBkaXNwYXRjaGVzIHRoZQorICAgIGNvbm5lY3Rpb24gdG8gYSBoYW5kbGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXI9QmFzZVRlc3RIYW5kbGVyLCBob3N0PUhPU1QsIHBvcnQ9MCk6CisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICBzZWxmLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgc29jaywgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5oYW5kbGVyKHNvY2spCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIEJhc2VDbGllbnQoQmFzZVRlc3RIYW5kbGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmNvbm5lY3QoYWRkcmVzcykKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEJhc2VUZXN0QVBJKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKworICAgIGRlZiBsb29wX3dhaXRpbmdfZm9yX2ZsYWcoc2VsZiwgaW5zdGFuY2UsIHRpbWVvdXQ9NSk6CisgICAgICAgIHRpbWVvdXQgPSBmbG9hdCh0aW1lb3V0KSAvIDEwMAorICAgICAgICBjb3VudCA9IDEwMAorICAgICAgICB3aGlsZSBhc3luY29yZS5zb2NrZXRfbWFwIGFuZCBjb3VudCA+IDA6CisgICAgICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgY291bnQ9MSwgdXNlX3BvbGw9c2VsZi51c2VfcG9sbCkKKyAgICAgICAgICAgIGlmIGluc3RhbmNlLmZsYWc6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBjb3VudCAtPSAxCisgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQpCisgICAgICAgIHNlbGYuZmFpbCgiZmxhZyBub3Qgc2V0IikKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfY29ubmVjdCBpcyBjYWxsZWQgb24gY29ubmVjdCgpCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX2FjY2VwdCgpIGlzIGNhbGxlZCB3aGVuIGEgY2xpZW50IGNvbm5lY3RzCisKKyAgICAgICAgY2xhc3MgVGVzdExpc3RlbmVyKEJhc2VUZXN0SGFuZGxlcik6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgICAgICBzZWxmLmJpbmQoKEhPU1QsIDApKQorICAgICAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCisgICAgICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVs6Ml0KKworICAgICAgICAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIHNlcnZlciA9IFRlc3RMaXN0ZW5lcigpCisgICAgICAgIGNsaWVudCA9IEJhc2VDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKHNlcnZlcikKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfcmVhZCBpcyBjYWxsZWQgb24gZGF0YSByZWNlaXZlZAorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyKEJhc2VUZXN0SGFuZGxlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kKCd4JyAqIDEwMjQpCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKFRlc3RIYW5kbGVyKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfd3JpdGUoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV93cml0ZSBpcyBjYWxsZWQKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfY2xvc2UgaXMgY2FsbGVkIHdoZW4gdGhlIG90aGVyIGVuZCBjbG9zZXMKKyAgICAgICAgIyB0aGUgY29ubmVjdGlvbgorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICAjIGluIG9yZGVyIHRvIG1ha2UgaGFuZGxlX2Nsb3NlIGJlIGNhbGxlZCB3ZSBhcmUgc3VwcG9zZWQKKyAgICAgICAgICAgICAgICAjIHRvIG1ha2UgYXQgbGVhc3Qgb25lIHJlY3YoKSBjYWxsCisgICAgICAgICAgICAgICAgc2VsZi5yZWN2KDEwMjQpCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyKEJhc2VUZXN0SGFuZGxlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKFRlc3RIYW5kbGVyKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJzdW5vcyIpLAorICAgICAgICAgICAgICAgICAgICAgIk9PQiBzdXBwb3J0IGlzIGJyb2tlbiBvbiBTb2xhcmlzIikKKyAgICBkZWYgdGVzdF9oYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgaGFuZGxlX2V4cHQgaXMgY2FsbGVkIG9uIE9PQiBkYXRhIHJlY2VpdmVkLgorICAgICAgICAjIE5vdGU6IHRoaXMgbWlnaHQgZmFpbCBvbiBzb21lIHBsYXRmb3JtcyBhcyBPT0IgZGF0YSBpcworICAgICAgICAjIHRlbnVvdXNseSBzdXBwb3J0ZWQgYW5kIHJhcmVseSB1c2VkLgorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyKEJhc2VUZXN0SGFuZGxlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChjaHIoMjQ0KSwgc29ja2V0Lk1TR19PT0IpCisKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKFRlc3RIYW5kbGVyKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfZXJyb3Ioc2VsZik6CisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CisgICAgICAgICAgICAgICAgMS4wIC8gMAorICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Rpb25fYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VydmVyID0gVENQU2VydmVyKCkKKyAgICAgICAgY2xpZW50ID0gQmFzZUNsaWVudChzZXJ2ZXIuYWRkcmVzcykKKworICAgICAgICAjIHdlIHN0YXJ0IGRpc2Nvbm5lY3RlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXIuYWNjZXB0aW5nKQorICAgICAgICAjIHRoaXMgY2FuJ3QgYmUgdGFrZW4gZm9yIGdyYW50ZWQgYWNyb3NzIGFsbCBwbGF0Zm9ybXMKKyAgICAgICAgI3NlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuYWNjZXB0aW5nKQorCisgICAgICAgICMgZXhlY3V0ZSBzb21lIGxvb3BzIHNvIHRoYXQgY2xpZW50IGNvbm5lY3RzIHRvIHNlcnZlcgorICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgdXNlX3BvbGw9c2VsZi51c2VfcG9sbCwgY291bnQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXIuYWNjZXB0aW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xpZW50LmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuYWNjZXB0aW5nKQorCisgICAgICAgICMgZGlzY29ubmVjdCB0aGUgY2xpZW50CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlci5hY2NlcHRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQuYWNjZXB0aW5nKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuYWNjZXB0aW5nKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NvY2tldChzZWxmKToKKyAgICAgICAgcyA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNvY2tldC5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKworICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CisgICAgICAgIHMxID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMxLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgczEuYmluZCgoSE9TVCwgMCkpCisgICAgICAgIHMxLmxpc3Rlbig1KQorICAgICAgICBwb3J0ID0gczEuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKworICAgICAgICBzMiA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzMi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKEhPU1QsIHBvcnQpKQorCisgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCisgICAgICAgICAgICAjIHRvIGRvIHRoZSBzYW1lCisgICAgICAgICAgICBzID0gYXN5bmNvcmUuZGlzcGF0Y2hlcihzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgICAgICBzLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHMuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworCitjbGFzcyBUZXN0QVBJX1VzZVNlbGVjdChCYXNlVGVzdEFQSSk6CisgICAgdXNlX3BvbGwgPSBGYWxzZQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKSwgJ3NlbGVjdC5wb2xsIHJlcXVpcmVkJykKK2NsYXNzIFRlc3RBUElfVXNlUG9sbChCYXNlVGVzdEFQSSk6CisgICAgdXNlX3BvbGwgPSBUcnVlCiAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW0hlbHBlckZ1bmN0aW9uVGVzdHMsIERpc3BhdGNoZXJUZXN0cywgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHMsCi0gICAgICAgICAgICAgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbF0KLSAgICBpZiBoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV93cmFwcGVyJyk6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChGaWxlV3JhcHBlclRlc3QpCi0KKyAgICAgICAgICAgICBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsLCBUZXN0QVBJX1VzZVNlbGVjdCwKKyAgICAgICAgICAgICBUZXN0QVBJX1VzZVBvbGwsIEZpbGVXcmFwcGVyVGVzdF0KICAgICBydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkgYi9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weQppbmRleCAxN2JkYjI0Li4wNTllOGI3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weQpAQCAtMSw2ICsxLDYgQEAKICMgQXVnbWVudGVkIGFzc2lnbm1lbnQgdGVzdC4KIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0xOSwxMCArMTksMTMgQEAKICAgICAgICAgeCAvPSAyCiAgICAgICAgIGlmIDEvMiA9PSAwOgogICAgICAgICAgICAgIyBjbGFzc2ljIGRpdmlzaW9uCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBuZXctc3R5bGUgZGl2aXNpb24gKHdpdGggLVFuZXcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCAzLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDMuMCkKKworICAgIGRlZiB0ZXN0X3dpdGhfdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgIngsIGIgKz0gMyIsICI8dGVzdD4iLCAiZXhlYyIpCiAKICAgICBkZWYgdGVzdEluTGlzdChzZWxmKToKICAgICAgICAgeCA9IFsyXQpAQCAtMzcsOSArNDAsOSBAQAogICAgICAgICB4WzBdIF49IDEKICAgICAgICAgeFswXSAvPSAyCiAgICAgICAgIGlmIDEvMiA9PSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeFswXSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHhbMF0sIDMuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMy4wKQogCiAgICAgZGVmIHRlc3RJbkRpY3Qoc2VsZik6CiAgICAgICAgIHggPSB7MDogMn0KQEAgLTU0LDI0ICs1NywyNCBAQAogICAgICAgICB4WzBdIF49IDEKICAgICAgICAgeFswXSAvPSAyCiAgICAgICAgIGlmIDEvMiA9PSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeFswXSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHhbMF0sIDMuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgMy4wKQogCiAgICAgZGVmIHRlc3RTZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgIHggPSBbMSwyXQogICAgICAgICB4ICs9IFszLDRdCiAgICAgICAgIHggKj0gMgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIFsxLCAyLCAzLCA0LCAxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbMSwgMiwgMywgNCwgMSwgMiwgMywgNF0pCiAKICAgICAgICAgeCA9IFsxLCAyLCAzXQogICAgICAgICB5ID0geAogICAgICAgICB4WzE6Ml0gKj0gMgogICAgICAgICB5WzE6Ml0gKz0gWzFdCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgWzEsIDIsIDEsIDIsIDNdKQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIFsxLCAyLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSkKIAogICAgIGRlZiB0ZXN0Q3VzdG9tTWV0aG9kczEoc2VsZik6CiAKQEAgLTk2LDI0ICs5OSwyNCBAQAogICAgICAgICB5ID0geAogICAgICAgICB4ICs9IDEwCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgYXVnX3Rlc3QpKQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeC52YWwsIDExKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgYXVnX3Rlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMSkKIAogICAgICAgICB4ID0gYXVnX3Rlc3QyKDIpCiAgICAgICAgIHkgPSB4CiAgICAgICAgIHggKz0gMTAKIAotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyB4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LnZhbCwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDEyKQogCiAgICAgICAgIHggPSBhdWdfdGVzdDMoMykKICAgICAgICAgeSA9IHgKICAgICAgICAgeCArPSAxMAogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHgsIGF1Z190ZXN0MykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LnZhbCwgMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMykKIAogCiAgICAgZGVmIHRlc3RDdXN0b21NZXRob2RzMih0ZXN0X3NlbGYpOgpAQCAtMjgxLDcgKzI4NCw3IEBACiAgICAgICAgIDEgPDwgeAogICAgICAgICB4IDw8PSAxCiAKLSAgICAgICAgdGVzdF9zZWxmLmFzc2VydEVxdWFscyhvdXRwdXQsICcnJ1wKKyAgICAgICAgdGVzdF9zZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJycnXAogX19hZGRfXyBjYWxsZWQKIF9fcmFkZF9fIGNhbGxlZAogX19pYWRkX18gY2FsbGVkCkBAIC0zMjEsNyArMzI0LDcgQEAKICcnJy5zcGxpdGxpbmVzKCkpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgiY2xhc3NpYyBpbnQgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJjbGFzc2ljIGludCBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICBydW5fdW5pdHRlc3QoQXVnQXNzaWduVGVzdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlnYWRkcnNwYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkKaW5kZXggOGMyMTVmZS4uZGIxOWE1MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIE92ZXJmbG93RXJyb3IiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oeCksIE1BWF9QeV9zc2l6ZV90KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgTUFYX1B5X3NzaXplX3QpCiAKICAgICAjIyMgdGhlIGZvbGxvd2luZyB0ZXN0IGlzIHBlbmRpbmcgYSBwYXRjaAogICAgICMgICAoaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA2LUp1bHkvMDY3Nzc0Lmh0bWwpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2JpZ21lbS5weSBiL0xpYi90ZXN0L3Rlc3RfYmlnbWVtLnB5CmluZGV4IGNlYTVjY2IuLmM1NjAxNjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlnbWVtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlnbWVtLnB5CkBAIC0xMyw3ICsxMyw3IEBACiAjICAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgb2xkICdzJyAoaWYgaXQgZXhpc3RzKSB1bnRpbCB3ZWxsIGFmdGVyIGl0cyBuZXcKICMgICAgdmFsdWUgaGFzIGJlZW4gY3JlYXRlZC4gVXNlICdkZWwgcycgYmVmb3JlIHRoZSBjcmVhdGVfbGFyZ2VzdHJpbmcgY2FsbC4KICMKLSMgIC0gRG8gKm5vdCogY29tcGFyZSBsYXJnZSBvYmplY3RzIHVzaW5nIGFzc2VydEVxdWFscyBvciBzaW1pbGFyLiBJdCdzIGEKKyMgIC0gRG8gKm5vdCogY29tcGFyZSBsYXJnZSBvYmplY3RzIHVzaW5nIGFzc2VydEVxdWFsIG9yIHNpbWlsYXIuIEl0J3MgYQogIyAgICBsZW5ndHkgb3BlcmF0aW9uIGFuZCB0aGUgZXJyb3JtZXNzYWdlIHdpbGwgYmUgdXR0ZXJseSB1c2VsZXNzIGR1ZSB0bwogIyAgICBpdHMgc2l6ZS4gVG8gbWFrZSBzdXJlIHdoZXRoZXIgYSByZXN1bHQgaGFzIHRoZSByaWdodCBjb250ZW50cywgYmV0dGVyCiAjICAgIHRvIHVzZSB0aGUgc3RyaXAgb3IgY291bnQgbWV0aG9kcywgb3IgY29tcGFyZSBtZWFuaW5nZnVsIHNsaWNlcy4KQEAgLTM5LDIwICszOSwyMCBAQAogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzID0gJy0nICogc2l6ZSArIFNVQlNUUgogICAgICAgICBjYXBzID0gcy5jYXBpdGFsaXplKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2Fwc1stbGVuKFNVQlNUUik6XSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXBzWy1sZW4oU1VCU1RSKTpdLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5jYXBpdGFsaXplKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNhcHMubHN0cmlwKCctJyksIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXBzLmxzdHJpcCgnLScpLCBTVUJTVFIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKICAgICBkZWYgdGVzdF9jZW50ZXIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSBTVUJTVFIuY2VudGVyKHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCiAgICAgICAgIGxwYWRzaXplID0gcnBhZHNpemUgPSAobGVuKHMpIC0gbGVuKFNVQlNUUikpIC8vIDIKICAgICAgICAgaWYgbGVuKHMpICUgMjoKICAgICAgICAgICAgIGxwYWRzaXplICs9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tscGFkc2l6ZTotcnBhZHNpemVdLCBTVUJTVFIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tscGFkc2l6ZTotcnBhZHNpemVdLCBTVUJTVFIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKIAogICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHIC0gMSwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3RfY2VudGVyX3VuaWNvZGUoc2VsZiwgc2l6ZSk6CkBAIC02MiwzNiArNjIsMzYgQEAKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQogICAgICAgICAgICAgbHBhZHNpemUgPSBycGFkc2l6ZSA9IChsZW4ocykgLSBsZW4oU1VCU1RSKSkgLy8gMgogICAgICAgICAgICAgaWYgbGVuKHMpICUgMjoKICAgICAgICAgICAgICAgICBscGFkc2l6ZSArPSAxCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xwYWRzaXplOi1ycGFkc2l6ZV0sIFNVQlNUUikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbHBhZHNpemU6LXJwYWRzaXplXSwgU1VCU1RSKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogICAgICAgICAgICAgZGVsIHMKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9jb3VudChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9ICcuJyAqIHNpemUgKyBTVUJTVFIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnLicpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgc2l6ZSkKICAgICAgICAgcyArPSAnLicKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnLicpLCBzaXplICsgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnICcpLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCdpJyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ2onKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJyAnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdpJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnaicpLCAwKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MykKICAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnLicgKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzLmRlY29kZSgndXRmLTgnKSksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuZGVjb2RlKCd1dGYtOCcpKSwgc2l6ZSkKIAogICAgIGRlZiBiYXNpY19lbmNvZGVfdGVzdChzZWxmLCBzaXplLCBlbmMsIGM9dScuJywgZXhwZWN0ZWRzaXplPU5vbmUpOgogICAgICAgICBpZiBleHBlY3RlZHNpemUgaXMgTm9uZToKICAgICAgICAgICAgIGV4cGVjdGVkc2l6ZSA9IHNpemUKIAogICAgICAgICBzID0gYyAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMuZW5jb2RlKGVuYykpLCBleHBlY3RlZHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuZW5jb2RlKGVuYykpLCBleHBlY3RlZHNpemUpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0zKQogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmLCBzaXplKToKQEAgLTEzMCw2MCArMTMwLDYwIEBACiAgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMgPT0gZXZhbChyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzID09IGV2YWwocikpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfZW5kc3dpdGgoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSAnLScgKiBzaXplICsgU1VCU1RSCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmVuZHN3aXRoKFNVQlNUUikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmVuZHN3aXRoKHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aChTVUJTVFIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aChzKSkKICAgICAgICAgczIgPSAnLi4uJyArIHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMyLmVuZHN3aXRoKHMpKQotICAgICAgICBzZWxmLmZhaWxJZihzLmVuZHN3aXRoKCdhJyArIFNVQlNUUikpCi0gICAgICAgIHNlbGYuZmFpbElmKFNVQlNUUi5lbmRzd2l0aChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMyLmVuZHN3aXRoKHMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuZW5kc3dpdGgoJ2EnICsgU1VCU1RSKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShTVUJTVFIuZW5kc3dpdGgocykpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9leHBhbmR0YWJzKHNlbGYsIHNpemUpOgogICAgICAgICBzID0gJy0nICogc2l6ZQogICAgICAgICB0YWJzaXplID0gOAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmV4cGFuZHRhYnMoKSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmV4cGFuZHRhYnMoKSwgcykKICAgICAgICAgZGVsIHMKICAgICAgICAgc2xlbiwgcmVtYWluZGVyID0gZGl2bW9kKHNpemUsIHRhYnNpemUpCiAgICAgICAgIHMgPSAnICAgICAgIFx0JyAqIHNsZW4KICAgICAgICAgcyA9IHMuZXhwYW5kdGFicyh0YWJzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgLSByZW1haW5kZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzLnN0cmlwKCcgJykpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAtIHJlbWFpbmRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zdHJpcCgnICcpKSwgMCkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9maW5kKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQogICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmZpbmQoJyAnKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKFNVQlNUUiksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZmluZCgnICcsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZmluZChTVUJTVFIsIGxlbihTVUJTVFIpKSwgc3VibGVuICsgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKCdpJyksIFNVQlNUUi5maW5kKCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZmluZCgnaScsIHN1YmxlbiksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCcgJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKFNVQlNUUiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCcgJywgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoU1VCU1RSLCBsZW4oU1VCU1RSKSksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCdpJyksIFNVQlNUUi5maW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCdpJywgc3VibGVuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmZpbmQoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5maW5kKCdpJywgc2l6ZSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCdpJywgc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5maW5kKCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuZmluZCgnaicpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZpbmQoJ2onKSwgLTEpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaW5kZXgoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCiAgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuaW5kZXgoJyAnKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleChTVUJTVFIpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmluZGV4KCcgJywgc3VibGVuKSwgc3VibGVuICsgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5pbmRleChTVUJTVFIsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuaW5kZXgoJ2knKSwgU1VCU1RSLmluZGV4KCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuaW5kZXgoJ2knLCBzdWJsZW4pLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJyAnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KFNVQlNUUiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnICcsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleChTVUJTVFIsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnaScpLCBTVUJTVFIuaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCdpJywgc3VibGVuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmluZGV4KCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuaW5kZXgoJ2knLCBzaXplKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCdpJywgc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5pbmRleCgnaScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLmluZGV4LCAnaicpCiAKQEAgLTE5MSwxNjMgKzE5MSwxNjMgQEAKICAgICBkZWYgdGVzdF9pc2FsbnVtKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnMTIzNDU2JwogICAgICAgICBzID0gJ2EnICogc2l6ZSArIFNVQlNUUgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzYWxudW0oKSkKICAgICAgICAgcyArPSAnLicKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2FsbnVtKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJ3p6enp6enonCiAgICAgICAgIHMgPSAnYScgKiBzaXplICsgU1VCU1RSCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNhbHBoYSgpKQogICAgICAgICBzICs9ICcuJwotICAgICAgICBzZWxmLmZhaWxJZihzLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzYWxwaGEoKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9pc2RpZ2l0KHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnMTIzNDU2JwogICAgICAgICBzID0gJzknICogc2l6ZSArIFNVQlNUUgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzZGlnaXQoKSkKICAgICAgICAgcyArPSAneicKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2RpZ2l0KCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmLCBzaXplKToKICAgICAgICAgY2hhcnMgPSAnJy5qb2luKFsgY2hyKGMpIGZvciBjIGluIHJhbmdlKDI1NSkgaWYgbm90IGNocihjKS5pc3VwcGVyKCkgXSkKICAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gbGVuKGNoYXJzKSArIDIKICAgICAgICAgcyA9IGNoYXJzICogcmVwZWF0cwotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc2xvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzbG93ZXIoKSkKICAgICAgICAgcyArPSAnQScKLSAgICAgICAgc2VsZi5mYWlsSWYocy5pc2xvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2xvd2VyKCkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfaXNzcGFjZShzZWxmLCBzaXplKToKICAgICAgICAgd2hpdGVzcGFjZSA9ICcgXGZcblxyXHRcdicKICAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gbGVuKHdoaXRlc3BhY2UpICsgMgogICAgICAgICBzID0gd2hpdGVzcGFjZSAqIHJlcGVhdHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3NwYWNlKCkpCiAgICAgICAgIHMgKz0gJ2onCi0gICAgICAgIHNlbGYuZmFpbElmKHMuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXNzcGFjZSgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2lzdGl0bGUoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCiAgICAgICAgIHMgPSAnJy5qb2luKFsnQScsICdhJyAqIHNpemUsIFNVQlNUUl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXN0aXRsZSgpKQogICAgICAgICBzICs9ICdBJwotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzdGl0bGUoKSkKICAgICAgICAgcyArPSAnYUEnCi0gICAgICAgIHNlbGYuZmFpbElmKHMuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN0aXRsZSgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGNoYXJzID0gJycuam9pbihbIGNocihjKSBmb3IgYyBpbiByYW5nZSgyNTUpIGlmIG5vdCBjaHIoYykuaXNsb3dlcigpIF0pCiAgICAgICAgIHJlcGVhdHMgPSBzaXplIC8vIGxlbihjaGFycykgKyAyCiAgICAgICAgIHMgPSBjaGFycyAqIHJlcGVhdHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3VwcGVyKCkpCiAgICAgICAgIHMgKz0gJ2EnCi0gICAgICAgIHNlbGYuZmFpbElmKHMuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN1cHBlcigpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnQScgKiBzaXplCiAgICAgICAgIHggPSBzLmpvaW4oWydhYWFhYScsICdiYmJiYiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LmNvdW50KCdhJyksIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguY291bnQoJ2InKSwgNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHguc3RhcnRzd2l0aCgnYWFhYWFBJykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh4LmVuZHN3aXRoKCdBYmJiYmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmNvdW50KCdhJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5jb3VudCgnYicpLCA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zdGFydHN3aXRoKCdhYWFhYUEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZW5kc3dpdGgoJ0FiYmJiYicpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCiAgICAgZGVmIHRlc3RfbGp1c3Qoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aChTVUJTVFIgKyAnICAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKFNVQlNUUiArICcgICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfbG93ZXIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnQScgKiBzaXplCiAgICAgICAgIHMgPSBzLmxvd2VyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCdhJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ2EnKSwgc2l6ZSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X2xzdHJpcChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJ2FiYyBkZWYgZ2hpJwogICAgICAgICBzID0gU1VCU1RSLnJqdXN0KHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5sc3RyaXAoKSwgU1VCU1RSLmxzdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxzdHJpcCgpLCBTVUJTVFIubHN0cmlwKCkpCiAgICAgICAgIGRlbCBzCiAgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKICAgICAgICAgc3RyaXBwZWQgPSBzLmxzdHJpcCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJpcHBlZCBpcyBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyaXBwZWQgaXMgcykKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHJlcGxhY2VtZW50ID0gJ2EnCiAgICAgICAgIHMgPSAnICcgKiBzaXplCiAgICAgICAgIHMgPSBzLnJlcGxhY2UoJyAnLCByZXBsYWNlbWVudCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KHJlcGxhY2VtZW50KSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChyZXBsYWNlbWVudCksIHNpemUpCiAgICAgICAgIHMgPSBzLnJlcGxhY2UocmVwbGFjZW1lbnQsICcgJywgc2l6ZSAtIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudChyZXBsYWNlbWVudCksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTEwOl0sICcgICAgICBhYWFhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChyZXBsYWNlbWVudCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMTA6XSwgJyAgICAgIGFhYWEnKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3JmaW5kKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQogICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJmaW5kKCcgJyksIHN1YmxlbiArIHNpemUgKyBTVUJTVFIucmZpbmQoJyAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yZmluZChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJmaW5kKCcgJywgMCwgc2l6ZSksIFNVQlNUUi5yZmluZCgnICcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJmaW5kKFNVQlNUUiwgMCwgc3VibGVuICsgc2l6ZSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJ2knKSwgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yZmluZCgnaScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnJmaW5kKCdpJywgMCwgc3VibGVuKSwgU1VCU1RSLnJmaW5kKCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJ2knLCAwLCBzdWJsZW4gKyBzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJmaW5kKCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmZpbmQoJ2onKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnICcpLCBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJmaW5kKCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJyAnLCAwLCBzaXplKSwgU1VCU1RSLnJmaW5kKCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZChTVUJTVFIsIDAsIHN1YmxlbiArIHNpemUpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2knKSwgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2knLCAwLCBzdWJsZW4pLCBTVUJTVFIucmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCdpJywgMCwgc3VibGVuICsgc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJmaW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnaicpLCAtMSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCiAgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmluZGV4KCcgJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJyAnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yaW5kZXgoJyAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoU1VCU1RSKSwgc3VibGVuICsgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoJyAnLCAwLCBzdWJsZW4gKyBzaXplIC0gMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJyAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoU1VCU1RSLCAwLCBzdWJsZW4gKyBzaXplKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoJ2knKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yaW5kZXgoJ2knKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5yaW5kZXgoJ2knLCAwLCBzdWJsZW4pLCBTVUJTVFIucmluZGV4KCdpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucmluZGV4KCdpJywgMCwgc3VibGVuICsgc2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCcgJywgMCwgc3VibGVuICsgc2l6ZSAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleChTVUJTVFIsIDAsIHN1YmxlbiArIHNpemUpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCdpJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnaScsIDAsIHN1YmxlbiksIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnaScsIDAsIHN1YmxlbiArIHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJ2knKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yaW5kZXgsICdqJykKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3JqdXN0KHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJwogICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoU1VCU1RSICsgJyAgJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aChTVUJTVFIgKyAnICAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3JzdHJpcChzZWxmLCBzaXplKToKICAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKICAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMucnN0cmlwKCksIFNVQlNUUi5yc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yc3RyaXAoKSwgU1VCU1RSLnJzdHJpcCgpKQogICAgICAgICBkZWwgcwogICAgICAgICBzID0gU1VCU1RSLnJqdXN0KHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCiAgICAgICAgIHN0cmlwcGVkID0gcy5yc3RyaXAoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyaXBwZWQgaXMgcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmlwcGVkIGlzIHMpCiAKICAgICAjIFRoZSB0ZXN0IHRha2VzIGFib3V0IHNpemUgYnl0ZXMgdG8gYnVpbGQgYSBzdHJpbmcsIGFuZCB0aGVuIGFib3V0CiAgICAgIyBzcXJ0KHNpemUpIHN1YnN0cmluZ3Mgb2Ygc3FydChzaXplKSBpbiBzaXplIGFuZCBhIGxpc3QgdG8KQEAgLTM2MCwxMiArMzYwLDEyIEBACiAgICAgICAgIFNVQlNUUiA9ICdhJyArICcgJyAqIGNodW5rc2l6ZQogICAgICAgICBzID0gU1VCU1RSICogY2h1bmtzaXplCiAgICAgICAgIGwgPSBzLnNwbGl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBjaHVua3NpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChsKSwgc2V0KFsnYSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIGNodW5rc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJ2EnXSkpCiAgICAgICAgIGRlbCBsCiAgICAgICAgIGwgPSBzLnNwbGl0KCdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBjaHVua3NpemUgKyAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobCksIHNldChbJycsICcgJyAqIGNodW5rc2l6ZV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJycsICcgJyAqIGNodW5rc2l6ZV0pKQogCiAgICAgIyBBbGxvY2F0ZXMgYSBzdHJpbmcgb2YgdHdpY2Ugc2l6ZSAoYW5kIGJyaWVmbHkgdHdvKSBhbmQgYSBsaXN0IG9mCiAgICAgIyBzaXplLiAgQmVjYXVzZSBvZiBpbnRlcm5hbCBhZmZhaXJzLCB0aGUgcy5zcGxpdCgpIGNhbGwgcHJvZHVjZXMgYQpAQCAtMzc3LDEyICszNzcsMTIgQEAKICAgICBkZWYgdGVzdF9zcGxpdF9sYXJnZShzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICcgYScgKiBzaXplICsgJyAnCiAgICAgICAgIGwgPSBzLnNwbGl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobCksIHNldChbJ2EnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnYSddKSkKICAgICAgICAgZGVsIGwKICAgICAgICAgbCA9IHMuc3BsaXQoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKyAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQobCksIHNldChbJyAnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJyAnXSkpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIuMSkKICAgICBkZWYgdGVzdF9zcGxpdGxpbmVzKHNlbGYsIHNpemUpOgpAQCAtMzkyLDI3ICszOTIsMjcgQEAKICAgICAgICAgU1VCU1RSID0gJyAnICogY2h1bmtzaXplICsgJ1xuJyArICcgJyAqIGNodW5rc2l6ZSArICdcclxuJwogICAgICAgICBzID0gU1VCU1RSICogY2h1bmtzaXplCiAgICAgICAgIGwgPSBzLnNwbGl0bGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIGNodW5rc2l6ZSAqIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldChsKSwgc2V0KFsnICcgKiBjaHVua3NpemVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIGNodW5rc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwpLCBzZXQoWycgJyAqIGNodW5rc2l6ZV0pKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3N0YXJ0c3dpdGgoc2VsZiwgc2l6ZSk6CiAgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCiAgICAgICAgIHMgPSAnLScgKiBzaXplICsgU1VCU1RSCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgocykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoJy0nICogc2l6ZSkpCi0gICAgICAgIHNlbGYuZmFpbElmKHMuc3RhcnRzd2l0aChTVUJTVFIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCctJyAqIHNpemUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc3RhcnRzd2l0aChTVUJTVFIpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3N0cmlwKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnICAgYWJjIGRlZiBnaGkgICAnCiAgICAgICAgIHMgPSBTVUJTVFIucmp1c3Qoc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQogICAgICAgICBkZWwgcwogICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmLCBzaXplKToKQEAgLTQyMSwxNyArNDIxLDE3IEBACiAgICAgICAgIHJlcGVhdHMgPSBzaXplIC8vIHN1YmxlbiArIDIKICAgICAgICAgcyA9IFNVQlNUUiAqIHJlcGVhdHMKICAgICAgICAgcyA9IHMuc3dhcGNhc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHN1YmxlbiAqIHJlcGVhdHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbOnN1YmxlbiAqIDNdLCBTVUJTVFIuc3dhcGNhc2UoKSAqIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLXN1YmxlbiAqIDM6XSwgU1VCU1RSLnN3YXBjYXNlKCkgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc3VibGVuICogcmVwZWF0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzpzdWJsZW4gKiAzXSwgU1VCU1RSLnN3YXBjYXNlKCkgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1YmxlbiAqIDM6XSwgU1VCU1RSLnN3YXBjYXNlKCkgKiAzKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQogICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnU3BhYUhBYWFBYWhhbScKICAgICAgICAgcyA9IFNVQlNUUiAqIChzaXplIC8vIGxlbihTVUJTVFIpICsgMikKICAgICAgICAgcyA9IHMudGl0bGUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKChTVUJTVFIgKiAzKS50aXRsZSgpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZW5kc3dpdGgoU1VCU1RSLmxvd2VyKCkgKiAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgoU1VCU1RSICogMykudGl0bGUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKFNVQlNUUi5sb3dlcigpICogMykpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYsIHNpemUpOgpAQCAtNDQxLDM5ICs0NDEsMzkgQEAKICAgICAgICAgcmVwZWF0cyA9IHNpemUgLy8gc3VibGVuICsgMgogICAgICAgICBzID0gU1VCU1RSICogcmVwZWF0cwogICAgICAgICBzID0gcy50cmFuc2xhdGUodHJhbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgcmVwZWF0cyAqIHN1YmxlbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1s6c3VibGVuXSwgU1VCU1RSLnRyYW5zbGF0ZSh0cmFucykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLXN1YmxlbjpdLCBTVUJTVFIudHJhbnNsYXRlKHRyYW5zKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnLicpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCchJyksIHJlcGVhdHMgKiAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCd6JyksIHJlcGVhdHMgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgcmVwZWF0cyAqIHN1YmxlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzpzdWJsZW5dLCBTVUJTVFIudHJhbnNsYXRlKHRyYW5zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy1zdWJsZW46XSwgU1VCU1RSLnRyYW5zbGF0ZSh0cmFucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJyEnKSwgcmVwZWF0cyAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgneicpLCByZXBlYXRzICogMykKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgNSwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfdXBwZXIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnYScgKiBzaXplCiAgICAgICAgIHMgPSBzLnVwcGVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCdBJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ0EnKSwgc2l6ZSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMjAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3pmaWxsKHNlbGYsIHNpemUpOgogICAgICAgICBTVUJTVFIgPSAnLTU2ODMyNDcyMzU5ODIzNCcKICAgICAgICAgcyA9IFNVQlNUUi56ZmlsbChzaXplKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5lbmRzd2l0aCgnMCcgKyBTVUJTVFJbMTpdKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnLTAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcwJyksIHNpemUgLSBsZW4oU1VCU1RSKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoJzAnICsgU1VCU1RSWzE6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJy0wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSAtIGxlbihTVUJTVFIpKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYsIHNpemUpOgogICAgICAgICBzID0gJy0nICogc2l6ZQogICAgICAgICBzZiA9ICclcycgJSAocywpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzID09IHNmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocyA9PSBzZikKICAgICAgICAgZGVsIHNmCiAgICAgICAgIHNmID0gJy4uJXMuLicgJSAocywpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzZiksIGxlbihzKSArIDQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZi5zdGFydHN3aXRoKCcuLi0nKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNmLmVuZHN3aXRoKCctLi4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2YpLCBsZW4ocykgKyA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Yuc3RhcnRzd2l0aCgnLi4tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZi5lbmRzd2l0aCgnLS4uJykpCiAgICAgICAgIGRlbCBzLCBzZgogCiAgICAgICAgIHNpemUgLy89IDIKQEAgLTQ4MSwxOCArNDgxLDE4IEBACiAgICAgICAgIHMgPSAnJy5qb2luKFtlZGdlLCAnJXMnLCBlZGdlXSkKICAgICAgICAgZGVsIGVkZ2UKICAgICAgICAgcyA9IHMgJSAnLi4uJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiAyICsgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnLicpLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCctJyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDIgKyAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCctJyksIHNpemUgKiAyKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfcmVwcl9zbWFsbChzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICctJyAqIHNpemUKICAgICAgICAgcyA9IHJlcHIocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplICsgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1swXSwgIiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy0xXSwgIiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCctJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCctJyksIHNpemUpCiAgICAgICAgIGRlbCBzCiAgICAgICAgICMgcmVwcigpIHdpbGwgY3JlYXRlIGEgc3RyaW5nIGZvdXIgdGltZXMgYXMgbGFyZ2UgYXMgdGhpcyAnYmluYXJ5CiAgICAgICAgICMgc3RyaW5nJywgYnV0IHdlIGRvbid0IHdhbnQgdG8gYWxsb2NhdGUgbXVjaCBtb3JlIHRoYW4gdHdpY2UKQEAgLTUwMCw0NiArNTAwLDQ2IEBACiAgICAgICAgIHNpemUgPSBzaXplIC8vIDUgKiAyCiAgICAgICAgIHMgPSAnXHgwMCcgKiBzaXplCiAgICAgICAgIHMgPSByZXByKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSAqIDQgKyAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWzBdLCAiJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTFdLCAiJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJ1xcJyksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMuY291bnQoJzAnKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogNCArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnXFwnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUgKiAyKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTUpCiAgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKICAgICAgICAgcyA9ICdceDAwJyAqIHNpemUKICAgICAgICAgcyA9IHJlcHIocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplICogNCArIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbMF0sICInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stMV0sICInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnXFwnKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnMCcpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiA0ICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdcXCcpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSAqIDIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPTIqKjMyIC8vIDUsIG1lbXVzZT02KzIpCiAgICAgZGVmIHRlc3RfdW5pY29kZV9yZXByKHNlbGYsIHNpemUpOgogICAgICAgICBzID0gdSJcdUFBQUEiICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobGVuKHJlcHIocykpID4gc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZXByKHMpKSA+IHNpemUpCiAKICAgICAjIFRoaXMgdGVzdCBpcyBtZWFuaW5nZnVsIGV2ZW4gd2l0aCBzaXplIDwgMkcsIGFzIGxvbmcgYXMgdGhlCiAgICAgIyBkb3VibGVkIHN0cmluZyBpcyA+IDJHIChidXQgaXQgdGVzdHMgbW9yZSBpZiBib3RoIGFyZSA+IDJHIDopCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMUcgKyAyLCBtZW11c2U9MykKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnLicgKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCiAgICAgICAgIHMgPSBzICsgcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplICogMikKIAogICAgICMgVGhpcyB0ZXN0IGlzIG1lYW5pbmdmdWwgZXZlbiB3aXRoIHNpemUgPCAyRywgYXMgbG9uZyBhcyB0aGUKICAgICAjIHJlcGVhdGVkIHN0cmluZyBpcyA+IDJHIChidXQgaXQgdGVzdHMgbW9yZSBpZiBib3RoIGFyZSA+IDJHIDopCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMUcgKyAyLCBtZW11c2U9MykKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHMgPSAnLicgKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCiAgICAgICAgIHMgPSBzICogMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcuJyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMjAsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X3NsaWNlX2FuZF9nZXRpdGVtKHNlbGYsIHNpemUpOgpAQCAtNTQ5LDI2ICs1NDksMjYgQEAKICAgICAgICAgc3RlcHNpemUgPSBsZW4ocykgLy8gMTAwCiAgICAgICAgIHN0ZXBzaXplID0gc3RlcHNpemUgLSAoc3RlcHNpemUgJSBzdWJsZW4pCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSAtIHN0ZXBzaXplLCBzdGVwc2l6ZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2ldLCBTVUJTVFJbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2k6aSArIHN1Ymxlbl0sIFNVQlNUUikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbaTppICsgc3VibGVuOjJdLCBTVUJTVFJbOjoyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tpXSwgU1VCU1RSWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2k6aSArIHN1Ymxlbl0sIFNVQlNUUikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tpOmkgKyBzdWJsZW46Ml0sIFNVQlNUUls6OjJdKQogICAgICAgICAgICAgaWYgaSA+IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tpICsgc3VibGVuIC0gMTppIC0gMTotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSW3N1Ymxlbjo6LTNdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1tpICsgc3VibGVuIC0gMTppIC0gMTotM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJTVFJbc3VibGVuOjotM10pCiAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvIHNvbWUgc2xpY2luZyBhbmQgaW5kZXhpbmcgbmVhciB0aGUgZW5kIG9mIHRoZQogICAgICAgICAjIHN0cmluZywgdG9vLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xlbihzKSAtIDFdLCBTVUJTVFJbLTFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy0xXSwgU1VCU1RSWy0xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tsZW4ocykgLSAxMF0sIFNVQlNUUlswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stc3VibGVuXSwgU1VCU1RSWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzW2xlbihzKTpdLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tsZW4ocykgLSAxOl0sIFNVQlNUUlstMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTE6XSwgU1VCU1RSWy0xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1tsZW4ocykgLSBzdWJsZW46XSwgU1VCU1RSKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWy1zdWJsZW46XSwgU1VCU1RSKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oc1s6XSksIGxlbihzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHNbOmxlbihzKSAtIDVdKSwgbGVuKHMpIC0gNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHNbNTotNV0pLCBsZW4ocykgLSAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIDFdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gMTBdLCBTVUJTVFJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuXSwgU1VCU1RSWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpOl0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gMTpdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTE6XSwgU1VCU1RSWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIHN1YmxlbjpdLCBTVUJTVFIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuOl0sIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc1s6XSksIGxlbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc1s6bGVuKHMpIC0gNV0pLCBsZW4ocykgLSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzWzU6LTVdKSwgbGVuKHMpIC0gMTApCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgcywgbGVuKHMpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBzLCBsZW4ocykgKyAxKQpAQCAtNTgwLDI0ICs1ODAsMjQgQEAKICAgICAgICAgZWRnZSA9ICctJyAqIChzaXplIC8vIDIpCiAgICAgICAgIHMgPSAnJy5qb2luKFtlZGdlLCBTVUJTVFIsIGVkZ2VdKQogICAgICAgICBkZWwgZWRnZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoU1VCU1RSIGluIHMpCi0gICAgICAgIHNlbGYuZmFpbElmKFNVQlNUUiAqIDIgaW4gcykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCctJyBpbiBzKQotICAgICAgICBzZWxmLmZhaWxJZignYScgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihTVUJTVFIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oU1VCU1RSICogMiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLScsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzKQogICAgICAgICBzICs9ICdhJwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoJ2EnIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBzKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCiAgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmLCBzaXplKToKICAgICAgICAgczEgPSAnLScgKiBzaXplCiAgICAgICAgIHMyID0gJy0nICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoczEgPT0gczIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSA9PSBzMikKICAgICAgICAgZGVsIHMyCiAgICAgICAgIHMyID0gczEgKyAnYScKLSAgICAgICAgc2VsZi5mYWlsSWYoczEgPT0gczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEgPT0gczIpCiAgICAgICAgIGRlbCBzMgogICAgICAgICBzMiA9ICcuJyAqIHNpemUKLSAgICAgICAgc2VsZi5mYWlsSWYoczEgPT0gczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEgPT0gczIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgpAQCAtNjExLDcgKzYxMSw3IEBACiAgICAgICAgIGgxID0gaGFzaChzKQogICAgICAgICBkZWwgcwogICAgICAgICBzID0gJ1x4MDAnICogKHNpemUgKyAxKQotICAgICAgICBzZWxmLmZhaWxJZihoMSA9PSBoYXNoKHMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGhhc2gocykpCiAKIGNsYXNzIFR1cGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTYyOCwxMyArNjI4LDEzIEBACiAgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmLCBzaXplKToKICAgICAgICAgdDEgPSAodScnLCkgKiBzaXplCiAgICAgICAgIHQyID0gKHUnJywpICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MikKICAgICAgICAgZGVsIHQyCiAgICAgICAgIHQyID0gKHUnJywpICogKHNpemUgKyAxKQotICAgICAgICBzZWxmLmZhaWxJZih0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0MSA9PSB0MikKICAgICAgICAgZGVsIHQyCiAgICAgICAgIHQyID0gKDEsKSAqIHNpemUKLSAgICAgICAgc2VsZi5mYWlsSWYodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDEgPT0gdDIpCiAKICAgICAjIFRlc3QgY29uY2F0ZW5hdGluZyBpbnRvIGEgc2luZ2xlIHR1cGxlIG9mIG1vcmUgdGhhbiAyRyBpbiBsZW5ndGgsCiAgICAgIyBhbmQgY29uY2F0ZW5hdGluZyBhIHR1cGxlIG9mIG1vcmUgdGhhbiAyRyBpbiBsZW5ndGggc2VwYXJhdGVseSwgc28KQEAgLTY0Myw5ICs2NDMsOSBAQAogICAgICMgc2tpcHBlZCwgaW4gdmVyYm9zZSBtb2RlLikKICAgICBkZWYgYmFzaWNfY29uY2F0X3Rlc3Qoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHQgPSAoKCksKSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKICAgICAgICAgdCA9IHQgKyB0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih0KSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCiAgICAgZGVmIHRlc3RfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtNjU4LDEwICs2NTgsMTAgQEAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMTAsIG1lbXVzZT04ICogNSkKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmLCBzaXplKToKICAgICAgICAgdCA9ICgxLCAyLCAzLCA0LCA1KSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplICogNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDUgaW4gdCkKLSAgICAgICAgc2VsZi5mYWlsSWYoKDEsIDIsIDMsIDQsIDUpIGluIHQpCi0gICAgICAgIHNlbGYuZmFpbElmKDAgaW4gdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEluKDUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDIsIDMsIDQsIDUpLCB0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIHQpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgpAQCAtNjY5LDMyICs2NjksMzIgQEAKICAgICAgICAgaDEgPSBoYXNoKHQxKQogICAgICAgICBkZWwgdDEKICAgICAgICAgdDIgPSAoMCwpICogKHNpemUgKyAxKQotICAgICAgICBzZWxmLmZhaWxJZihoMSA9PSBoYXNoKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoYXNoKHQyKSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQogICAgIGRlZiB0ZXN0X2luZGV4X2FuZF9zbGljZShzZWxmLCBzaXplKToKICAgICAgICAgdCA9IChOb25lLCkgKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih0KSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFstMV0sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbNV0sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZSAtIDFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wy0xXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0WzVdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDFdLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCB0LCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0Wzo1XSwgKE5vbmUsKSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbLTU6XSwgKE5vbmUsKSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbMjA6MjVdLCAoTm9uZSwpICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModFstMjU6LTIwXSwgKE5vbmUsKSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZSAtIDU6XSwgKE5vbmUsKSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZSAtIDU6c2l6ZV0sIChOb25lLCkgKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0W3NpemUgLSA2OnNpemUgLSAyXSwgKE5vbmUsKSAqIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZTpzaXplXSwgKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRbc2l6ZTpzaXplKzVdLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Wzo1XSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFstNTpdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0WzIwOjI1XSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFstMjU6LTIwXSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplIC0gNTpdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemUgLSA1OnNpemVdLCAoTm9uZSwpICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemUgLSA2OnNpemUgLSAyXSwgKE5vbmUsKSAqIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplOnNpemVdLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W3NpemU6c2l6ZSs1XSwgKCkpCiAKICAgICAjIExpa2UgdGVzdF9jb25jYXQsIHNwbGl0IGluIHR3by4KICAgICBkZWYgYmFzaWNfdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHQgPSAoJycsKSAqIHNpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgc2l6ZSkKICAgICAgICAgdCA9IHQgKiAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih0KSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogMikKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCiAgICAgZGVmIHRlc3RfcmVwZWF0X3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtNzE3LDkgKzcxNyw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGZvciBpdGVtIGluIHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbSwgY291bnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCBjb3VudCkKICAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3VudCwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNpemUpCiAKICAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyAtIDI1LCBtZW11c2U9OSkKICAgICBkZWYgdGVzdF9mcm9tX2FsbW9zdF8yR19nZW5lcmF0b3Ioc2VsZiwgc2l6ZSk6CkBAIC03MjcsOSArNzI3LDkgQEAKICAgICAgICAgICAgIHQgPSB0dXBsZSh4cmFuZ2Uoc2l6ZSkpCiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGZvciBpdGVtIGluIHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbSwgY291bnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCBjb3VudCkKICAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3VudCwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNpemUpCiAgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlLCBleHBlY3RlZCBvbiAzMi1iaXQKIApAQCAtNzM4LDEwICs3MzgsMTAgQEAKICAgICAgICAgdCA9ICgwLCkgKiBzaXplCiAgICAgICAgIHMgPSByZXByKHQpCiAgICAgICAgICMgVGhlIHJlcHIgb2YgYSB0dXBsZSBvZiAwJ3MgaXMgZXhhY3RseSB0aHJlZSB0aW1lcyB0aGUgdHVwbGUgbGVuZ3RoLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocyksIHNpemUgKiAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzWzo1XSwgJygwLCAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1stNTpdLCAnMCwgMCknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLmNvdW50KCcwJyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzo1XSwgJygwLCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy01Ol0sICcwLCAwKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMyArIDIsIG1lbXVzZT04ICsgMykKICAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtNzYyLDEzICs3NjIsMTMgQEAKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgogICAgICAgICBsMSA9IFt1JyddICogc2l6ZQogICAgICAgICBsMiA9IFt1JyddICogc2l6ZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobDEgPT0gbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMSA9PSBsMikKICAgICAgICAgZGVsIGwyCiAgICAgICAgIGwyID0gW3UnJ10gKiAoc2l6ZSArIDEpCi0gICAgICAgIHNlbGYuZmFpbElmKGwxID09IGwyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwxID09IGwyKQogICAgICAgICBkZWwgbDIKICAgICAgICAgbDIgPSBbMl0gKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbElmKGwxID09IGwyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwxID09IGwyKQogCiAgICAgIyBUZXN0IGNvbmNhdGVuYXRpbmcgaW50byBhIHNpbmdsZSBsaXN0IG9mIG1vcmUgdGhhbiAyRyBpbiBsZW5ndGgsCiAgICAgIyBhbmQgY29uY2F0ZW5hdGluZyBhIGxpc3Qgb2YgbW9yZSB0aGFuIDJHIGluIGxlbmd0aCBzZXBhcmF0ZWx5LCBzbwpAQCAtNzc3LDkgKzc3Nyw5IEBACiAgICAgIyBza2lwcGVkLCBpbiB2ZXJib3NlIG1vZGUuKQogICAgIGRlZiBiYXNpY190ZXN0X2NvbmNhdChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFtbXV0gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCiAgICAgICAgIGwgPSBsICsgbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTI0KQogICAgIGRlZiB0ZXN0X2NvbmNhdF9zbWFsbChzZWxmLCBzaXplKToKQEAgLTc5Miw5ICs3OTIsOSBAQAogICAgIGRlZiBiYXNpY190ZXN0X2lucGxhY2VfY29uY2F0KHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW3N5cy5zdGRvdXRdICogc2l6ZQogICAgICAgICBsICs9IGwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplICogMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxbMF0gaXMgbFstMV0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsW3NpemUgLSAxXSBpcyBsW3NpemUgKyAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbc2l6ZSArIDFdKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKICAgICBkZWYgdGVzdF9pbnBsYWNlX2NvbmNhdF9zbWFsbChzZWxmLCBzaXplKToKQEAgLTgwNyw3OSArODA3LDc5IEBACiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDEwLCBtZW11c2U9OCAqIDUpCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyg1IGluIGwpCi0gICAgICAgIHNlbGYuZmFpbElmKFsxLCAyLCAzLCA0LCA1XSBpbiBsKQotICAgICAgICBzZWxmLmZhaWxJZigwIGluIGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbig1LCBsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKFsxLCAyLCAzLCA0LCA1XSwgbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBsKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmLCBzaXplKToKICAgICAgICAgbCA9IFswXSAqIHNpemUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBsKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCiAgICAgZGVmIHRlc3RfaW5kZXhfYW5kX3NsaWNlKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW05vbmVdICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTFdLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzVdLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsW3NpemUgLSAxXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs1XSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSAxXSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgbCwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFs6NV0sIFtOb25lXSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTU6XSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFsyMDoyNV0sIFtOb25lXSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTI1Oi0yMF0sIFtOb25lXSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbc2l6ZSAtIDU6XSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFtzaXplIC0gNTpzaXplXSwgW05vbmVdICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFtzaXplIC0gNjpzaXplIC0gMl0sIFtOb25lXSAqIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbc2l6ZTpzaXplXSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbc2l6ZTpzaXplKzVdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzo1XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy01Ol0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsyMDoyNV0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMjU6LTIwXSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA1Ol0sIFtOb25lXSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFtzaXplIC0gNTpzaXplXSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA2OnNpemUgLSAyXSwgW05vbmVdICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemU6c2l6ZV0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZTpzaXplKzVdLCBbXSkKIAogICAgICAgICBsW3NpemUgLSAyXSA9IDUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy0zOl0sIFtOb25lLCA1LCBOb25lXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobC5jb3VudCg1KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMzpdLCBbTm9uZSwgNSwgTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCg1KSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgbCwgc2l6ZSwgNikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKIAogICAgICAgICBsW3NpemUgLSA3Ol0gPSBbMSwgMiwgMywgNCwgNV0KICAgICAgICAgc2l6ZSAtPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstNzpdLCBbTm9uZSwgTm9uZSwgMSwgMiwgMywgNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTc6XSwgW05vbmUsIE5vbmUsIDEsIDIsIDMsIDQsIDVdKQogCiAgICAgICAgIGxbOjddID0gWzEsIDIsIDMsIDQsIDVdCiAgICAgICAgIHNpemUgLT0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbOjddLCBbMSwgMiwgMywgNCwgNSwgTm9uZSwgTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjddLCBbMSwgMiwgMywgNCwgNSwgTm9uZSwgTm9uZV0pCiAKICAgICAgICAgZGVsIGxbc2l6ZSAtIDFdCiAgICAgICAgIHNpemUgLT0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTFdLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0xXSwgNCkKIAogICAgICAgICBkZWwgbFstMjpdCiAgICAgICAgIHNpemUgLT0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTFdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0xXSwgMikKIAogICAgICAgICBkZWwgbFswXQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzBdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzBdLCAyKQogCiAgICAgICAgIGRlbCBsWzoyXQogICAgICAgICBzaXplIC09IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzBdLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzBdLCA0KQogCiAgICAgIyBMaWtlIHRlc3RfY29uY2F0LCBzcGxpdCBpbiB0d28uCiAgICAgZGVmIGJhc2ljX3Rlc3RfcmVwZWF0KHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW10gKiBzaXplCi0gICAgICAgIHNlbGYuZmFpbElmKGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobCkKICAgICAgICAgbCA9IFsnJ10gKiBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCiAgICAgICAgIGwgPSBsICogMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTI0KQogICAgIGRlZiB0ZXN0X3JlcGVhdF9zbWFsbChzZWxmLCBzaXplKToKQEAgLTg5MiwxNCArODkyLDE0IEBACiAgICAgZGVmIGJhc2ljX3Rlc3RfaW5wbGFjZV9yZXBlYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbJyddCiAgICAgICAgIGwgKj0gc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsWzBdIGlzIGxbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbMF0gaXMgbFstMV0pCiAgICAgICAgIGRlbCBsCiAKICAgICAgICAgbCA9IFsnJ10gKiBzaXplCiAgICAgICAgIGwgKj0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKiAyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobFtzaXplIC0gMV0gaXMgbFstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbLTFdKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0xNikKICAgICBkZWYgdGVzdF9pbnBsYWNlX3JlcGVhdF9zbWFsbChzZWxmLCBzaXplKToKQEAgLTkxMywxMCArOTEzLDEwIEBACiAgICAgICAgIGwgPSBbMF0gKiBzaXplCiAgICAgICAgIHMgPSByZXByKGwpCiAgICAgICAgICMgVGhlIHJlcHIgb2YgYSBsaXN0IG9mIDAncyBpcyBleGFjdGx5IHRocmVlIHRpbWVzIHRoZSBsaXN0IGxlbmd0aC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHMpLCBzaXplICogMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc1s6NV0sICdbMCwgMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNbLTU6XSwgJzAsIDBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocy5jb3VudCgnMCcpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6NV0sICdbMCwgMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stNTpdLCAnMCwgMF0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDMgKyAyLCBtZW11c2U9OCArIDMpCiAgICAgZGVmIHRlc3RfcmVwcl9zbWFsbChzZWxmLCBzaXplKToKQEAgLTkzMiwyMiArOTMyLDIyIEBACiAgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW29iamVjdCgpXSAqIHNpemUKICAgICAgICAgbC5hcHBlbmQob2JqZWN0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSsxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobFstM10gaXMgbFstMl0pCi0gICAgICAgIHNlbGYuZmFpbElmKGxbLTJdIGlzIGxbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSsxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFstM10gaXMgbFstMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobFstMl0gaXMgbFstMV0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMiwgbWVtdXNlPTggKiA1KQogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYsIHNpemUpOgogICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsLmNvdW50KDEpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsLmNvdW50KCIxIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCgxKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KCIxIiksIDApCiAKICAgICBkZWYgYmFzaWNfdGVzdF9leHRlbmQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbZmlsZV0gKiBzaXplCiAgICAgICAgIGwuZXh0ZW5kKGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsWzBdIGlzIGxbLTFdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobFtzaXplIC0gMV0gaXMgbFtzaXplICsgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbMF0gaXMgbFstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsW3NpemUgLSAxXSBpcyBsW3NpemUgKyAxXSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MTYpCiAgICAgZGVmIHRlc3RfZXh0ZW5kX3NtYWxsKHNlbGYsIHNpemUpOgpAQCAtOTYxLDkgKzk2MSw5IEBACiAgICAgZGVmIHRlc3RfaW5kZXgoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMUwsIDJMLCAzTCwgNEwsIDVMXSAqIHNpemUKICAgICAgICAgc2l6ZSAqPSA1Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwuaW5kZXgoMSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwuaW5kZXgoNSwgc2l6ZSAtIDUpLCBzaXplIC0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobC5pbmRleCg1LCBzaXplIC0gNSwgc2l6ZSksIHNpemUgLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuaW5kZXgoMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5pbmRleCg1LCBzaXplIC0gNSksIHNpemUgLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuaW5kZXgoNSwgc2l6ZSAtIDUsIHNpemUpLCBzaXplIC0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbC5pbmRleCwgMSwgc2l6ZSAtIDQsIHNpemUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGwuaW5kZXgsIDZMKQogCkBAIC05NzMsOTYgKzk3Myw5NiBAQAogICAgICAgICBsID0gWzEuMF0gKiBzaXplCiAgICAgICAgIGwuaW5zZXJ0KHNpemUgLSAxLCAiQSIpCiAgICAgICAgIHNpemUgKz0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTM6XSwgWzEuMCwgIkEiLCAxLjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0zOl0sIFsxLjAsICJBIiwgMS4wXSkKIAogICAgICAgICBsLmluc2VydChzaXplICsgMSwgIkIiKQogICAgICAgICBzaXplICs9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy0zOl0sIFsiQSIsIDEuMCwgIkIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMzpdLCBbIkEiLCAxLjAsICJCIl0pCiAKICAgICAgICAgbC5pbnNlcnQoMSwgIkMiKQogICAgICAgICBzaXplICs9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWzozXSwgWzEuMCwgIkMiLCAxLjBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsW3NpemUgLSAzOl0sIFsiQSIsIDEuMCwgIkIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFs6M10sIFsxLjAsICJDIiwgMS4wXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSAzOl0sIFsiQSIsIDEuMCwgIkIiXSkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDUgKyA0LCBtZW11c2U9OCAqIDUpCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gW3UiYSIsIHUiYiIsIHUiYyIsIHUiZCIsIHUiZSJdICogc2l6ZQogICAgICAgICBzaXplICo9IDUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKIAogICAgICAgICBpdGVtID0gbC5wb3AoKQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpdGVtLCB1ImUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy0yOl0sIFt1ImMiLCB1ImQiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgdSJlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFt1ImMiLCB1ImQiXSkKIAogICAgICAgICBpdGVtID0gbC5wb3AoMCkKICAgICAgICAgc2l6ZSAtPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbSwgdSJhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFs6Ml0sIFt1ImIiLCB1ImMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgdSJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzoyXSwgW3UiYiIsIHUiYyJdKQogCiAgICAgICAgIGl0ZW0gPSBsLnBvcChzaXplIC0gMikKICAgICAgICAgc2l6ZSAtPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbSwgdSJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFstMjpdLCBbdSJiIiwgdSJkIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIHUiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMjpdLCBbdSJiIiwgdSJkIl0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMTBdICogc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQogCiAgICAgICAgIGwucmVtb3ZlKDEwKQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKIAogICAgICAgICAjIEJlY2F1c2Ugb2YgdGhlIGVhcmxpZXIgbC5yZW1vdmUoKSwgdGhpcyBhcHBlbmQgZG9lc24ndCB0cmlnZ2VyCiAgICAgICAgICMgYSByZXNpemUuCiAgICAgICAgIGwuYXBwZW5kKDUpCiAgICAgICAgIHNpemUgKz0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTI6XSwgWzEwLCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMjpdLCBbMTAsIDVdKQogICAgICAgICBsLnJlbW92ZSg1KQogICAgICAgICBzaXplIC09IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGwpLCBzaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy0yOl0sIFsxMCwgMTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yOl0sIFsxMCwgMTBdKQogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDIsIG1lbXVzZT04ICogNSkKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQogICAgICAgICBsLnJldmVyc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obCksIHNpemUgKiA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsWy01Ol0sIFs1LCA0LCAzLCAyLCAxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobFs6NV0sIFs1LCA0LCAzLCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTU6XSwgWzUsIDQsIDMsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjVdLCBbNSwgNCwgMywgMiwgMV0pCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMiwgbWVtdXNlPTggKiA1KQogICAgIGRlZiB0ZXN0X3NvcnQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCiAgICAgICAgIGwuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsKSwgc2l6ZSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwuY291bnQoMSksIHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbOjEwXSwgWzFdICogMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxbLTEwOl0sIFs1XSAqIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCgxKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzoxMF0sIFsxXSAqIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTEwOl0sIFs1XSAqIDEwKQogCiBjbGFzcyBCdWZmZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHLCBtZW11c2U9NCkKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgYiA9IGJ1ZmZlcigiQUFBQSIpKnNpemUKICAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGZvciBjIGluIGI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYywgJ0EnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgJ0EnKQogICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvdW50LCBzaXplKjQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBzaXplKjQpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0clRlc3QsIFR1cGxlVGVzdCwgTGlzdFRlc3QsIEJ1ZmZlclRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5IGIvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDdmYjA3YmUuLmY4MjVmMWMKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CkBAIC0zLDQ4ICszLDc2IEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBhcnJheQorCisjIE5vdGU6ICIqX2hleCIgZnVuY3Rpb25zIGFyZSBhbGlhc2VzIGZvciAiKHVuKWhleGxpZnkiCitiMmFfZnVuY3Rpb25zID0gWydiMmFfYmFzZTY0JywgJ2IyYV9oZXgnLCAnYjJhX2hxeCcsICdiMmFfcXAnLCAnYjJhX3V1JywKKyAgICAgICAgICAgICAgICAgJ2hleGxpZnknLCAncmxlY29kZV9ocXgnXQorYTJiX2Z1bmN0aW9ucyA9IFsnYTJiX2Jhc2U2NCcsICdhMmJfaGV4JywgJ2EyYl9ocXgnLCAnYTJiX3FwJywgJ2EyYl91dScsCisgICAgICAgICAgICAgICAgICd1bmhleGxpZnknLCAncmxlZGVjb2RlX2hxeCddCithbGxfZnVuY3Rpb25zID0gYTJiX2Z1bmN0aW9ucyArIGIyYV9mdW5jdGlvbnMgKyBbJ2NyYzMyJywgJ2NyY19ocXgnXQorCiAKIGNsYXNzIEJpbkFTQ0lJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICB0eXBlMnRlc3QgPSBzdHIKICAgICAjIENyZWF0ZSBiaW5hcnkgdGVzdCBkYXRhCi0gICAgZGF0YSA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLlxyXG4iCisgICAgcmF3ZGF0YSA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLlxyXG4iCiAgICAgIyBCZSBzbG93IHNvIHdlIGRvbid0IGRlcGVuZCBvbiBvdGhlciBtb2R1bGVzCi0gICAgZGF0YSArPSAiIi5qb2luKG1hcChjaHIsIHhyYW5nZSgyNTYpKSkKLSAgICBkYXRhICs9ICJcclxuSGVsbG8gd29ybGQuXG4iCisgICAgcmF3ZGF0YSArPSAiIi5qb2luKG1hcChjaHIsIHhyYW5nZSgyNTYpKSkKKyAgICByYXdkYXRhICs9ICJcclxuSGVsbG8gd29ybGQuXG4iCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYudHlwZTJ0ZXN0KHNlbGYucmF3ZGF0YSkKIAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgbW9kdWxlIGV4Y2VwdGlvbnMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoYmluYXNjaWkuRXJyb3IsIEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKGJpbmFzY2lpLkluY29tcGxldGUsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGJpbmFzY2lpLkVycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhiaW5hc2NpaS5JbmNvbXBsZXRlLCBFeGNlcHRpb24pKQogCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25zKHNlbGYpOgogICAgICAgICAjIENoZWNrIHByZXNlbmNlIG9mIGFsbCBmdW5jdGlvbnMKLSAgICAgICAgZnVuY3MgPSBbXQotICAgICAgICBmb3Igc3VmZml4IGluICJiYXNlNjQiLCAiaHF4IiwgInV1IiwgImhleCI6Ci0gICAgICAgICAgICBwcmVmaXhlcyA9IFsiYTJiXyIsICJiMmFfIl0KLSAgICAgICAgICAgIGlmIHN1ZmZpeCA9PSAiaHF4IjoKLSAgICAgICAgICAgICAgICBwcmVmaXhlcy5leHRlbmQoWyJjcmNfIiwgInJsZWNvZGVfIiwgInJsZWRlY29kZV8iXSkKLSAgICAgICAgICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6Ci0gICAgICAgICAgICAgICAgbmFtZSA9IHByZWZpeCArIHN1ZmZpeAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGdldGF0dHIoYmluYXNjaWksIG5hbWUpLCAnX19jYWxsX18nKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoYmluYXNjaWksIG5hbWUpKQotICAgICAgICBmb3IgbmFtZSBpbiAoImhleGxpZnkiLCAidW5oZXhsaWZ5Iik6CisgICAgICAgIGZvciBuYW1lIGluIGFsbF9mdW5jdGlvbnM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihnZXRhdHRyKGJpbmFzY2lpLCBuYW1lKSwgJ19fY2FsbF9fJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIoYmluYXNjaWksIG5hbWUpKQogCisgICAgZGVmIHRlc3RfcmV0dXJuZWRfdmFsdWUoc2VsZik6CisgICAgICAgICMgTGltaXQgdG8gdGhlIG1pbmltdW0gb2YgYWxsIGxpbWl0cyAoYjJhX3V1KQorICAgICAgICBNQVhfQUxMID0gNDUKKyAgICAgICAgcmF3ID0gc2VsZi5yYXdkYXRhWzpNQVhfQUxMXQorICAgICAgICBmb3IgZmEsIGZiIGluIHppcChhMmJfZnVuY3Rpb25zLCBiMmFfZnVuY3Rpb25zKToKKyAgICAgICAgICAgIGEyYiA9IGdldGF0dHIoYmluYXNjaWksIGZhKQorICAgICAgICAgICAgYjJhID0gZ2V0YXR0cihiaW5hc2NpaSwgZmIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYSA9IGIyYShzZWxmLnR5cGUydGVzdChyYXcpKQorICAgICAgICAgICAgICAgIHJlcyA9IGEyYihzZWxmLnR5cGUydGVzdChhKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInt9L3t9IGNvbnZlcnNpb24gcmFpc2VzIHshcn0iLmZvcm1hdChmYiwgZmEsIGVycikpCisgICAgICAgICAgICBpZiBmYiA9PSAnYjJhX2hxeCc6CisgICAgICAgICAgICAgICAgIyBiMmFfaHF4IHJldHVybnMgYSB0dXBsZQorICAgICAgICAgICAgICAgIHJlcywgXyA9IHJlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHJhdywgInt9L3t9IGNvbnZlcnNpb246ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0gIT0geyFyfSIuZm9ybWF0KGZiLCBmYSwgcmVzLCByYXcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlcywgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtYXgob3JkKGMpIGZvciBjIGluIGEpLCAxMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaW5hc2NpaS5jcmNfaHF4KHJhdywgMCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpbmFzY2lpLmNyYzMyKHJhdyksIGludCkKKwogICAgIGRlZiB0ZXN0X2Jhc2U2NHZhbGlkKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGggdmFsaWQgZGF0YQogICAgICAgICBNQVhfQkFTRTY0ID0gNTcKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5kYXRhKSwgTUFYX0JBU0U2NCk6Ci0gICAgICAgICAgICBiID0gc2VsZi5kYXRhW2k6aStNQVhfQkFTRTY0XQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5yYXdkYXRhKSwgTUFYX0JBU0U2NCk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfQkFTRTY0XSkKICAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KGIpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYSkKICAgICAgICAgcmVzID0gIiIKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX2Jhc2U2NChsaW5lKQorICAgICAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KGxpbmUpCisgICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX2Jhc2U2NChhKQogICAgICAgICAgICAgcmVzID0gcmVzICsgYgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQogCiAgICAgZGVmIHRlc3RfYmFzZTY0aW52YWxpZChzZWxmKToKICAgICAgICAgIyBUZXN0IGJhc2U2NCB3aXRoIHJhbmRvbSBpbnZhbGlkIGNoYXJhY3RlcnMgc3ByaW5rbGVkIHRocm91Z2hvdXQKQEAgLTUyLDcgKzgwLDcgQEAKICAgICAgICAgTUFYX0JBU0U2NCA9IDU3CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuZGF0YSksIE1BWF9CQVNFNjQpOgotICAgICAgICAgICAgYiA9IHNlbGYuZGF0YVtpOmkrTUFYX0JBU0U2NF0KKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9CQVNFNjRdKQogICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoYikKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQogCkBAIC03NSwyNiArMTAzLDI4IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzICsgbm9pc2UgKyBsaW5lCiAgICAgICAgIHJlcyA9ICIiCiAgICAgICAgIGZvciBsaW5lIGluIG1hcChhZGRub2lzZSwgbGluZXMpOgotICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQoYSkKICAgICAgICAgICAgIHJlcyArPSBiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCiAKICAgICAgICAgIyBUZXN0IGJhc2U2NCB3aXRoIGp1c3QgaW52YWxpZCBjaGFyYWN0ZXJzLCB3aGljaCBzaG91bGQgcmV0dXJuCiAgICAgICAgICMgZW1wdHkgc3RyaW5ncy4gVEJEOiBzaG91bGRuJ3QgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgPwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9iYXNlNjQoZmlsbGVycyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9iYXNlNjQoc2VsZi50eXBlMnRlc3QoZmlsbGVycykpLCAnJykKIAogICAgIGRlZiB0ZXN0X3V1KHNlbGYpOgogICAgICAgICBNQVhfVVUgPSA0NQogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmRhdGEpLCBNQVhfVVUpOgotICAgICAgICAgICAgYiA9IHNlbGYuZGF0YVtpOmkrTUFYX1VVXQorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNlbGYucmF3ZGF0YVtpOmkrTUFYX1VVXSkKICAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfdXUoYikKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQogICAgICAgICByZXMgPSAiIgogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfdXUobGluZSkKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl91dShhKQogICAgICAgICAgICAgcmVzICs9IGIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYucmF3ZGF0YSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl91dSgiXHg3ZiIpLCAiXHgwMCIqMzEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3V1KCJceDgwIiksICJceDAwIiozMikKQEAgLTEwOCwxOSArMTM4LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3V1KCd4JyksICchPiAgIFxuJykKIAogICAgIGRlZiB0ZXN0X2NyYzMyKHNlbGYpOgotICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMigiVGVzdCB0aGUgQ1JDLTMyIG9mIikKLSAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoIiB0aGlzIHN0cmluZy4iLCBjcmMpCisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KCJUZXN0IHRoZSBDUkMtMzIgb2YiKSkKKyAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoc2VsZi50eXBlMnRlc3QoIiB0aGlzIHN0cmluZy4iKSwgY3JjKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyYywgMTU3MTIyMDMzMCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmNyYzMyKQogCi0gICAgIyBUaGUgaHF4IHRlc3QgaXMgaW4gdGVzdF9iaW5oZXgucHkKKyAgICBkZWYgdGVzdF9ocXgoc2VsZik6CisgICAgICAgICMgUGVyZm9ybSBiaW5oZXg0IHN0eWxlIFJMRS1jb21wcmVzc2lvbgorICAgICAgICAjIFRoZW4gY2FsY3VsYXRlIHRoZSBoZXhiaW40IGJpbmFyeS10by1BU0NJSSB0cmFuc2xhdGlvbgorICAgICAgICBybGUgPSBiaW5hc2NpaS5ybGVjb2RlX2hxeChzZWxmLmRhdGEpCisgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfaHF4KHNlbGYudHlwZTJ0ZXN0KHJsZSkpCisgICAgICAgIGIsIF8gPSBiaW5hc2NpaS5hMmJfaHF4KHNlbGYudHlwZTJ0ZXN0KGEpKQorICAgICAgICByZXMgPSBiaW5hc2NpaS5ybGVkZWNvZGVfaHF4KGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYucmF3ZGF0YSkKIAogICAgIGRlZiB0ZXN0X2hleChzZWxmKToKICAgICAgICAgIyB0ZXN0IGhleGxpZmljYXRpb24KICAgICAgICAgcyA9ICd7c1wwMDVcMDAwXDAwMFwwMDB3b3JsZGlcMDAyXDAwMFwwMDBcMDAwc1wwMDVcMDAwXDAwMFwwMDBoZWxsb2lcMDAxXDAwMFwwMDBcMDAwMCcKLSAgICAgICAgdCA9IGJpbmFzY2lpLmIyYV9oZXgocykKLSAgICAgICAgdSA9IGJpbmFzY2lpLmEyYl9oZXgodCkKKyAgICAgICAgdCA9IGJpbmFzY2lpLmIyYV9oZXgoc2VsZi50eXBlMnRlc3QocykpCisgICAgICAgIHUgPSBiaW5hc2NpaS5hMmJfaGV4KHNlbGYudHlwZTJ0ZXN0KHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuYTJiX2hleCwgdFs6LTFdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmEyYl9oZXgsIHRbOi0xXSArICdxJykKQEAgLTE2MiwxNiArMjAwLDM3IEBACiAKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgICMgQSB0ZXN0IGZvciBTRiBidWcgIzEwMjI5NTMuICBNYWtlIHN1cmUgU3lzdGVtRXJyb3IgaXMgbm90IHJhaXNlZC4KLSAgICAgICAgZm9yIG4gaW4gWydiMmFfcXAnLCAnYTJiX2hleCcsICdiMmFfYmFzZTY0JywgJ2EyYl91dScsICdhMmJfcXAnLAotICAgICAgICAgICAgICAgICAgJ2IyYV9oZXgnLCAndW5oZXhsaWZ5JywgJ2hleGxpZnknLCAnY3JjMzInLCAnYjJhX2hxeCcsCi0gICAgICAgICAgICAgICAgICAnYTJiX2hxeCcsICdhMmJfYmFzZTY0JywgJ3JsZWNvZGVfaHF4JywgJ2IyYV91dScsCi0gICAgICAgICAgICAgICAgICAncmxlZGVjb2RlX2hxeCddOgotICAgICAgICAgICAgZiA9IGdldGF0dHIoYmluYXNjaWksIG4pCi0gICAgICAgICAgICBmKCcnKQotICAgICAgICBiaW5hc2NpaS5jcmNfaHF4KCcnLCAwKQorICAgICAgICBlbXB0eSA9IHNlbGYudHlwZTJ0ZXN0KCcnKQorICAgICAgICBmb3IgZnVuYyBpbiBhbGxfZnVuY3Rpb25zOgorICAgICAgICAgICAgaWYgZnVuYyA9PSAnY3JjX2hxeCc6CisgICAgICAgICAgICAgICAgIyBjcmNfaHF4IG5lZWRzIDIgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgYmluYXNjaWkuY3JjX2hxeChlbXB0eSwgMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZiA9IGdldGF0dHIoYmluYXNjaWksIGZ1bmMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZihlbXB0eSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInt9KHshcn0pIHJhaXNlcyB7IXJ9Ii5mb3JtYXQoZnVuYywgZW1wdHksIGVycikpCisKKworY2xhc3MgQXJyYXlCaW5BU0NJSVRlc3QoQmluQVNDSUlUZXN0KToKKyAgICBkZWYgdHlwZTJ0ZXN0KHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gYXJyYXkuYXJyYXkoJ2MnLCBzKQorCisKK2NsYXNzIEJ5dGVhcnJheUJpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIHR5cGUydGVzdCA9IGJ5dGVhcnJheQorCisKK2NsYXNzIE1lbW9yeXZpZXdCaW5BU0NJSVRlc3QoQmluQVNDSUlUZXN0KToKKyAgICB0eXBlMnRlc3QgPSBtZW1vcnl2aWV3CisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluQVNDSUlUZXN0KQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluQVNDSUlUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlYXJyYXlCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnl2aWV3QmluQVNDSUlUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5IGIvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQppbmRleCA1NDFmMDdmLi5iMWVmNjI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKQEAgLTIyMywxMCArMjIzLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKC0xMCwgLTIpLCAtMikKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMjApOgogICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMSwgMjApOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhnY2QoaSwgaikgPiAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhnY2QoLWksIGopIDwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZ2NkKGksIC1qKSA+IDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdjZCgtaSwgLWopIDwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKGksIGopID4gMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKC1pLCBqKSA8IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjZChpLCAtaikgPiAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnY2QoLWksIC1qKSA8IDApCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgYSA9IFJhdCgxMCwgMTUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDY2YmFlNDguLjkzNGJhOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC0xMzAsMTQgKzEzMCwxNCBAQAogICAgICAgICAgICAgZWxlbSA9IHJhbmRyYW5nZSgtMSwgbisxKQogICAgICAgICAgICAgaXAgPSBzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdChkYXRhLCBlbGVtKQogICAgICAgICAgICAgaWYgaXAgPCBsZW4oZGF0YSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGVsZW0gPD0gZGF0YVtpcF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPD0gZGF0YVtpcF0pCiAgICAgICAgICAgICBpZiBpcCA+IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhdGFbaXAtMV0gPCBlbGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDwgZWxlbSkKICAgICAgICAgICAgIGlwID0gc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0KGRhdGEsIGVsZW0pCiAgICAgICAgICAgICBpZiBpcCA8IGxlbihkYXRhKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZWxlbSA8IGRhdGFbaXBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIDwgZGF0YVtpcF0pCiAgICAgICAgICAgICBpZiBpcCA+IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhdGFbaXAtMV0gPD0gZWxlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YVtpcC0xXSA8PSBlbGVtKQogCiAgICAgZGVmIHRlc3Rfb3B0aW9uYWxTbGljaW5nKHNlbGYpOgogICAgICAgICBmb3IgZnVuYywgZGF0YSwgZWxlbSwgZXhwZWN0ZWQgaW4gc2VsZi5wcmVjb21wdXRlZENhc2VzOgpAQCAtMTQ2LDE1ICsxNDYsMTUgQEAKICAgICAgICAgICAgICAgICBmb3IgaGkgaW4geHJhbmdlKDMsOCk6CiAgICAgICAgICAgICAgICAgICAgIGhpID0gbWluKGxlbihkYXRhKSwgaGkpCiAgICAgICAgICAgICAgICAgICAgIGlwID0gZnVuYyhkYXRhLCBlbGVtLCBsbywgaGkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhsbyA8PSBpcCA8PSBoaSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvIDw9IGlwIDw9IGhpKQogICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0IGFuZCBpcCA8IGhpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGVsZW0gPD0gZGF0YVtpcF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8PSBkYXRhW2lwXSkKICAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCBhbmQgaXAgPiBsbzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYXRhW2lwLTFdIDwgZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDwgZWxlbSkKICAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQgYW5kIGlwIDwgaGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZWxlbSA8IGRhdGFbaXBdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gPCBkYXRhW2lwXSkKICAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQgYW5kIGlwID4gbG86Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGF0YVtpcC0xXSA8PSBlbGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGFbaXAtMV0gPD0gZWxlbSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcCwgbWF4KGxvLCBtaW4oaGksIGV4cGVjdGVkKSkpCiAKICAgICBkZWYgdGVzdF9iYWNrY29tcGF0aWJpbGl0eShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weSBiL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQppbmRleCA2ODBhNDBmLi45ZDU4YTJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CkBAIC03LDEyICs3LDYgQEAKIAogY2xhc3MgQm9vbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIGFzc2VydElzKHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQotCi0gICAgZGVmIGFzc2VydElzTm90KHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBub3QgYikKLQogICAgIGRlZiB0ZXN0X3N1YmNsYXNzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGFzcyBDKGJvb2wpOgpAQCAtNTEsNiArNDUsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoVHJ1ZSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoaW50KFRydWUpLCBUcnVlKQogCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoRmFsc2UpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZmxvYXQoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChUcnVlKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZsb2F0KFRydWUpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKEZhbHNlKSwgMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9uZyhGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoVHJ1ZSksIDFMKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvbmcoVHJ1ZSksIFRydWUpCisKICAgICBkZWYgdGVzdF9tYXRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCtGYWxzZSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCgrRmFsc2UsIEZhbHNlKQpAQCAtMTYzLDEyICsxNjksMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKCIiKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCgpLCBGYWxzZSkKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJWQiICUgRmFsc2UsICIwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJWQiICUgVHJ1ZSwgIjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIleCIgJSBGYWxzZSwgIjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIleCIgJSBUcnVlLCAiMSIpCisKICAgICBkZWYgdGVzdF9oYXNhdHRyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKGhhc2F0dHIoW10sICJhcHBlbmQiKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhoYXNhdHRyKFtdLCAid29iYmxlIiksIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfY2FsbGFibGUoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FsbGFibGUobGVuKSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FsbGFibGUoMSksIEZhbHNlKQogCkBAIC0xODcsNyArMTk5LDcgQEAKICAgICBkZWYgdGVzdF9oYXNrZXkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB7fSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB7MToxfSwgVHJ1ZSkKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh7fS5oYXNfa2V5KDEpLCBGYWxzZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoezE6MX0uaGFzX2tleSgxKSwgVHJ1ZSkKIApAQCAtMjM3LDE1ICsyNDksMTUgQEAKIAogICAgIGRlZiB0ZXN0X2Jvb2xlYW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSAmIDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNpbnN0YW5jZShUcnVlICYgMSwgYm9vbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShUcnVlICYgMSwgYm9vbCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlICYgVHJ1ZSwgVHJ1ZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUgfCAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2UoVHJ1ZSB8IDEsIGJvb2wpKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoVHJ1ZSB8IDEsIGJvb2wpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSB8IFRydWUsIFRydWUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlIF4gMSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKFRydWUgXiAxLCBib29sKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKFRydWUgXiAxLCBib29sKQogICAgICAgICBzZWxmLmFzc2VydElzKFRydWUgXiBUcnVlLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2ZpbGVjbG9zZWQoc2VsZik6CkBAIC0yNTcsMTIgKzI2OSwxOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKKyAgICBkZWYgdGVzdF90eXBlcyhzZWxmKToKKyAgICAgICAgIyB0eXBlcyBhcmUgYWx3YXlzIHRydWUuCisgICAgICAgIGZvciB0IGluIFtib29sLCBjb21wbGV4LCBkaWN0LCBmaWxlLCBmbG9hdCwgaW50LCBsaXN0LCBsb25nLCBvYmplY3QsCisgICAgICAgICAgICAgICAgICBzZXQsIHN0ciwgdHVwbGUsIHR5cGVdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKHQpLCBUcnVlKQorCiAgICAgZGVmIHRlc3Rfb3BlcmF0b3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBvcGVyYXRvcgogICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLnRydXRoKDApLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci50cnV0aCgxKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc0NhbGxhYmxlKDApLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc0NhbGxhYmxlKGxlbiksIFRydWUpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNDYWxsYWJsZSgwKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzQ2FsbGFibGUobGVuKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc051bWJlclR5cGUoTm9uZSksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSgwKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5ub3RfKDEpLCBGYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkgYi9MaWIvdGVzdC90ZXN0X2JzZGRiLnB5CmluZGV4IGZhODhmNTY1Li5kMWVlMGExIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2JzZGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkKQEAgLTMsOSArMyw2IEBACiAgICBBZGFwdGVkIHRvIHVuaXR0ZXN0IGZvcm1hdCBhbmQgZXhwYW5kZWQgc2NvcGUgYnkgUmF5bW9uZCBIZXR0aW5nZXIKICIiIgogaW1wb3J0IG9zLCBzeXMKLWltcG9ydCBjb3B5Ci1pbXBvcnQgYnNkZGIKLWltcG9ydCBkYmhhc2ggIyBKdXN0IHNvIHdlIGtub3cgaXQncyBpbXBvcnRlZAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCkBAIC00Niw4ICs0Myw4IEBACiAgICAgZGVmIHRlc3RfY2hhbmdlKHNlbGYpOgogICAgICAgICBzZWxmLmZbJ3InXSA9ICdkaXNjb3ZlcmVkJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZlsnciddLCAnZGlzY292ZXJlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygncicgaW4gc2VsZi5mLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdkaXNjb3ZlcmVkJyBpbiBzZWxmLmYudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3InLCBzZWxmLmYua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdkaXNjb3ZlcmVkJywgc2VsZi5mLnZhbHVlcygpKQogCiAgICAgZGVmIHRlc3RfY2xvc2VfYW5kX3Jlb3BlbihzZWxmKToKICAgICAgICAgaWYgc2VsZi5mbmFtZSBpcyBOb25lOgpAQCAtMTc5LDcgKzE3Niw3IEBACiAKICAgICBkZWYgdGVzdF9maXJzdF93aGlsZV9kZWxldGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciBidWcgMTcyNTg1NgotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmQpID49IDIsICJ0ZXN0IHJlcXVpcmVzID49MiBpdGVtcyIpCiAgICAgICAgIGZvciBfIGluIHNlbGYuZDoKICAgICAgICAgICAgIGtleSA9IHNlbGYuZi5maXJzdCgpWzBdCiAgICAgICAgICAgICBkZWwgc2VsZi5mW2tleV0KQEAgLTE4Nyw3ICsxODQsNyBAQAogCiAgICAgZGVmIHRlc3RfbGFzdF93aGlsZV9kZWxldGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciBidWcgMTcyNTg1NidzIGV2aWwgdHdpbgotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuZCkgPj0gMiwgInRlc3QgcmVxdWlyZXMgPj0yIGl0ZW1zIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmQpID49IDIsICJ0ZXN0IHJlcXVpcmVzID49MiBpdGVtcyIpCiAgICAgICAgIGZvciBfIGluIHNlbGYuZDoKICAgICAgICAgICAgIGtleSA9IHNlbGYuZi5sYXN0KClbMF0KICAgICAgICAgICAgIGRlbCBzZWxmLmZba2V5XQpAQCAtMTk4LDEzICsxOTUsMTMgQEAKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICBmb3IgayBpbiBzZWxmLmQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oayBpbiBzZWxmLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygnbm90IGhlcmUnIG5vdCBpbiBzZWxmLmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbm90IGhlcmUnLCBzZWxmLmYpCiAKICAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgogICAgICAgICBmb3IgayBpbiBzZWxmLmQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5mLmhhc19rZXkoaykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgc2VsZi5mLmhhc19rZXkoJ25vdCBoZXJlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmhhc19rZXkoaykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5mLmhhc19rZXkoJ25vdCBoZXJlJykpCiAKICAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKICAgICAgICAgc2VsZi5mLmNsZWFyKCkKQEAgLTI1NiwxMSArMjUzLDExIEBACiAgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIksiCiAKICAgICAgICAgIyB0ZXN0IHRoZSBsZWdhY3kgY3Vyc29yIGludGVyZmFjZSBtaXhlZCB3aXRoIHdyaXRlcwotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5mLmZpcnN0KClbMF0gaW4gc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuZi5maXJzdCgpWzBdLCBzZWxmLmQpCiAgICAgICAgIGsgPSBzZWxmLmYubmV4dCgpWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrIGluIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCiAgICAgICAgIHNlbGYuZltrXSA9ICJiZSBnb25lIHdpdGggeWUgZGVhZGxvY2tzIgotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5mW2tdLCAiYmUgZ29uZSB3aXRoIHllIGRlYWRsb2NrcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZba10sICJiZSBnb25lIHdpdGggeWUgZGVhZGxvY2tzIikKIAogICAgIGRlZiB0ZXN0X2Zvcl9jdXJzb3JfbWVtbGVhayhzZWxmKToKICAgICAgICAgIyBkbyB0aGUgYnNkZGIuX0RCV2l0aEN1cnNvciBpdGVyYXRvciBpbnRlcm5hbHMgbGVhayBjdXJzb3JzPwpAQCAtMjc4LDIxICsyNzUsMjEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jMSwgbmMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jMSwgbmM0KQotICAgICAgICBzZWxmLmFzc2VydF8obmMzID09IG5jMSsxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmMzID09IG5jMSsxKQogCiAgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKICAgICAgICAgaywgdiA9IHNlbGYuZi5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGsgaW4gc2VsZi5kKQotICAgICAgICBzZWxmLmFzc2VydF8odiBpbiBzZWxmLmQudmFsdWVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrIG5vdCBpbiBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYuZC52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBzZWxmLmYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZCktMSwgbGVuKHNlbGYuZikpCiAKICAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CiAgICAgICAgIGsgPSAndycKICAgICAgICAgdiA9IHNlbGYuZi5wb3AoaykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBzZWxmLmRba10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrIG5vdCBpbiBzZWxmLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2IG5vdCBpbiBzZWxmLmYudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgc2VsZi5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHYsIHNlbGYuZi52YWx1ZXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5kKS0xLCBsZW4oc2VsZi5mKSkKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKaW5kZXggZGM1MDk2OC4uNmJkYzM0ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKQEAgLTIzLDcgKzIzLDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQnVmZmVyVGVzdHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CmluZGV4IDRmNWRlMTAuLjEwOGIxZTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWZpby5weQpAQCAtMSwxMiArMSwxNSBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAogCi0jIFNpbXBsZSB0ZXN0IHRvIGVuc3VyZSB0aGF0IG9wdGltaXphdGlvbnMgaW4gZmlsZW9iamVjdC5jIGRlbGl2ZXIKLSMgdGhlIGV4cGVjdGVkIHJlc3VsdHMuICBGb3IgYmVzdCB0ZXN0aW5nLCBydW4gdGhpcyB1bmRlciBhIGRlYnVnLWJ1aWxkCi0jIFB5dGhvbiB0b28gKHRvIGV4ZXJjaXNlIGFzc2VydHMgaW4gdGhlIEMgY29kZSkuCitpbXBvcnQgaW8gIyBDIGltcGxlbWVudGF0aW9uLgoraW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24uCiAKLWxlbmd0aHMgPSByYW5nZSgxLCAyNTcpICsgWzUxMiwgMTAwMCwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTAwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM4NCwgMzI3NjgsIDY1NTM2LCAxMDAwMDAwXQorIyBTaW1wbGUgdGVzdCB0byBlbnN1cmUgdGhhdCBvcHRpbWl6YXRpb25zIGluIHRoZSBJTyBsaWJyYXJ5IGRlbGl2ZXIgdGhlCisjIGV4cGVjdGVkIHJlc3VsdHMuICBGb3IgYmVzdCB0ZXN0aW5nLCBydW4gdGhpcyB1bmRlciBhIGRlYnVnLWJ1aWxkIFB5dGhvbiB0b28KKyMgKHRvIGV4ZXJjaXNlIGFzc2VydHMgaW4gdGhlIEMgY29kZSkuCisKK2xlbmd0aHMgPSBsaXN0KHJhbmdlKDEsIDI1NykpICsgWzUxMiwgMTAwMCwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM4NCwgMzI3NjgsIDY1NTM2LCAxMDAwMDAwXQogCiBjbGFzcyBCdWZmZXJTaXplVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRyeV9vbmUoc2VsZiwgcyk6CkBAIC0xNCwyNyArMTcsMjcgQEAKICAgICAgICAgIyAucmVhZGxpbmUoKXMgZGVsaXZlciB3aGF0IHdlIHdyb3RlLgogCiAgICAgICAgICMgRW5zdXJlIHdlIGNhbiBvcGVuIFRFU1RGTiBmb3Igd3JpdGluZy4KLSAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgICAgICAjIFNpbmNlIEMgZG9lc24ndCBndWFyYW50ZWUgd2UgY2FuIHdyaXRlL3JlYWQgYXJiaXRyYXJ5IGJ5dGVzIGluIHRleHQKICAgICAgICAgIyBmaWxlcywgdXNlIGJpbmFyeSBtb2RlLgotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHdyaXRlIG9uY2Ugd2l0aCBcbiBhbmQgb25jZSB3aXRob3V0CiAgICAgICAgICAgICBmLndyaXRlKHMpCi0gICAgICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgICAgICBmLndyaXRlKGIiXG4iKQogICAgICAgICAgICAgZi53cml0ZShzKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQorICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpCiAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMgKyAiXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBzICsgYiJcbiIpCiAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMpCiAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGxpbmUpICMgTXVzdCBiZSBhdCBFT0YKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgbGluZSkgIyBNdXN0IGJlIGF0IEVPRgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiBkcml2ZV9vbmUoc2VsZiwgcGF0dGVybik6CiAgICAgICAgIGZvciBsZW5ndGggaW4gbGVuZ3RoczoKQEAgLTQ3LDE5ICs1MCwzMCBAQAogICAgICAgICAgICAgdGVzdHN0cmluZyA9IHBhdHRlcm4gKiBxICsgcGF0dGVybls6cl0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RzdHJpbmcpLCBsZW5ndGgpCiAgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZykKLSAgICAgICAgICAgIHNlbGYudHJ5X29uZSh0ZXN0c3RyaW5nICsgIngiKQorICAgICAgICAgICAgc2VsZi50cnlfb25lKHRlc3RzdHJpbmcgKyBiIngiKQogICAgICAgICAgICAgc2VsZi50cnlfb25lKHRlc3RzdHJpbmdbOi0xXSkKIAogICAgIGRlZiB0ZXN0X3ByaW1lcGF0KHNlbGYpOgogICAgICAgICAjIEEgcGF0dGVybiB3aXRoIHByaW1lIGxlbmd0aCwgdG8gYXZvaWQgc2ltcGxlIHJlbGF0aW9uc2hpcHMgd2l0aAogICAgICAgICAjIHN0ZGlvIGJ1ZmZlciBzaXplcy4KLSAgICAgICAgc2VsZi5kcml2ZV9vbmUoIjEyMzQ1Njc4OTBcMDBcMDFcMDJcMDNcMDRcMDVcMDYiKQorICAgICAgICBzZWxmLmRyaXZlX29uZShiIjEyMzQ1Njc4OTBcMDBcMDFcMDJcMDNcMDRcMDVcMDYiKQogCiAgICAgZGVmIHRlc3RfbnVsbHBhdChzZWxmKToKLSAgICAgICAgc2VsZi5kcml2ZV9vbmUoIlwwIiAqIDEwMDApCisgICAgICAgIHNlbGYuZHJpdmVfb25lKGJ5dGVzKDEwMDApKQorCisKK2NsYXNzIENCdWZmZXJTaXplVGVzdChCdWZmZXJTaXplVGVzdCk6CisgICAgb3BlbiA9IGlvLm9wZW4KKworY2xhc3MgUHlCdWZmZXJTaXplVGVzdChCdWZmZXJTaXplVGVzdCk6CisgICAgb3BlbiA9IHN0YXRpY21ldGhvZChweWlvLm9wZW4pCisKK2NsYXNzIEJ1aWx0aW5CdWZmZXJTaXplVGVzdChCdWZmZXJTaXplVGVzdCk6CisgICAgb3BlbiA9IG9wZW4KKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCdWZmZXJTaXplVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDQnVmZmVyU2l6ZVRlc3QsIFB5QnVmZmVyU2l6ZVRlc3QsIEJ1aWx0aW5CdWZmZXJTaXplVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5IGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CmluZGV4IDk0MDFmNjUuLmQ4ZmIyZDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKQEAgLTIsMTIgKzIsMTMgQEAKIAogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZjbXAsIGhhdmVfdW5pY29kZSwgVEVTVEZOLCB1bmxpbmssIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncwogaW1wb3J0IHdhcm5pbmdzCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoZmNtcCwgaGF2ZV91bmljb2RlLCBURVNURk4sIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl91bml0dGVzdCwgX2NoZWNrX3B5M2tfd2FybmluZ3MsIGNoZWNrX3dhcm5pbmdzKQogZnJvbSBvcGVyYXRvciBpbXBvcnQgbmVnCiAKIGltcG9ydCBzeXMsIGNTdHJpbmdJTywgcmFuZG9tLCBVc2VyRGljdAorCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLgogIyB1c2VkIHRvIHNraXAgcnVubmluZyB0ZXN0X2V4ZWNmaWxlKCkgbXVsdGlwbGUgdGltZXMKICMgYW5kIHRvIGNyZWF0ZSB1bmlxdWUgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtODksNiArOTAsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoLTEyMzRMKSwgMTIzNEwpCiAgICAgICAgICMgc3RyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzLCAnYScpCisgICAgICAgICMgYm9vbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhUcnVlKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoRmFsc2UpLCAwKQorICAgICAgICAjIG90aGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFicywgTm9uZSkKKyAgICAgICAgY2xhc3MgQWJzQ2xhc3Mob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Fic19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAtNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhBYnNDbGFzcygpKSwgLTUpCiAKICAgICBkZWYgdGVzdF9hbGwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKFsyLCA0LCA2XSksIFRydWUpCkBAIC0xMjAsNyArMTMxLDcgQEAKIAogICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKICAgICAgICAgeCA9IC1zeXMubWF4aW50LTEKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgaW50KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgteCwgc3lzLm1heGludCsxKQogCiAgICAgZGVmIHRlc3RfYXBwbHkoc2VsZik6CkBAIC0xNTAsMjAgKzE2MSw0NSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFwcGx5LCBpZCwgKDQyLCksIDQyKQogCiAgICAgZGVmIHRlc3RfY2FsbGFibGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhjYWxsYWJsZShsZW4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobGVuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoY2FsbGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobGFtYmRhIHgsIHk6IHggKyB5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShfX2J1aWx0aW5zX18pKQogICAgICAgICBkZWYgZigpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjYWxsYWJsZShmKSkKLSAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGYpKQorCisgICAgICAgIGNsYXNzIENsYXNzaWM6CiAgICAgICAgICAgICBkZWYgbWV0aChzZWxmKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydF8oY2FsbGFibGUoQykpCi0gICAgICAgIHggPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNhbGxhYmxlKHgubWV0aCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgY2FsbGFibGUoeCkpCi0gICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShDbGFzc2ljKSkKKyAgICAgICAgYyA9IENsYXNzaWMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoYy5tZXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKworICAgICAgICBjbGFzcyBOZXdTdHlsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKE5ld1N0eWxlKSkKKyAgICAgICAgbiA9IE5ld1N0eWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKG4ubWV0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUobikpCisKKyAgICAgICAgIyBDbGFzc2ljIGFuZCBuZXctc3R5bGUgY2xhc3NlcyBldmFsdWF0ZSBfX2NhbGxfXygpIGRpZmZlcmVudGx5CisgICAgICAgIGMuX19jYWxsX18gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjKSkKKyAgICAgICAgZGVsIGMuX19jYWxsX18KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKyAgICAgICAgbi5fX2NhbGxfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKyAgICAgICAgZGVsIG4uX19jYWxsX18KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKworICAgICAgICBjbGFzcyBOMihvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOiBwYXNzCi0gICAgICAgIHkgPSBEKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNhbGxhYmxlKHkpKQotICAgICAgICB5KCkKKyAgICAgICAgbjIgPSBOMigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShuMikpCisgICAgICAgIGNsYXNzIE4zKE4yKTogcGFzcworICAgICAgICBuMyA9IE4zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKG4zKSkKIAogICAgIGRlZiB0ZXN0X2NocihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHIoMzIpLCAnICcpCkBAIC0xOTEsOSArMjI3LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXApCiAKICAgICBkZWYgdGVzdF9jb2VyY2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmNtcChjb2VyY2UoMSwgMS4xKSwgKDEuMCwgMS4xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChjb2VyY2UoMSwgMS4xKSwgKDEuMCwgMS4xKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29lcmNlKDEsIDFMKSwgKDFMLCAxTCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmNtcChjb2VyY2UoMUwsIDEuMSksICgxLjAsIDEuMSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoY29lcmNlKDFMLCAxLjEpLCAoMS4wLCAxLjEpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2VyY2UpCiAgICAgICAgIGNsYXNzIEJhZE51bWJlcjoKICAgICAgICAgICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKQEAgLTIzMiwxMSArMjY4LDExIEBACiAKICAgICAgICAgIyBkaXIoKSAtIGxvY2FsIHNjb3BlCiAgICAgICAgIGxvY2FsX3ZhciA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdsb2NhbF92YXInIGluIGRpcigpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsb2NhbF92YXInLCBkaXIoKSkKIAogICAgICAgICAjIGRpcihtb2R1bGUpCiAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdleGl0JyBpbiBkaXIoc3lzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZXhpdCcsIGRpcihzeXMpKQogCiAgICAgICAgICMgZGlyKG1vZHVsZV93aXRoX2ludmFsaWRfX2RpY3RfXykKICAgICAgICAgaW1wb3J0IHR5cGVzCkBAIC0yNDYsOCArMjgyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXIsIGYpCiAKICAgICAgICAgIyBkaXIodHlwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJzdHJpcCIgaW4gZGlyKHN0cikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19tcm9fXyIgbm90IGluIGRpcihzdHIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJpcCIsIGRpcihzdHIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJfX21yb19fIiwgZGlyKHN0cikpCiAKICAgICAgICAgIyBkaXIob2JqKQogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKQEAgLTI1NiwxMyArMjkyLDEzIEBACiAgICAgICAgICAgICAgICAgc2VsZi55ID0gOAogICAgICAgICAgICAgICAgIHNlbGYueiA9IDkKICAgICAgICAgZiA9IEZvbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygieSIgaW4gZGlyKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ5IiwgZGlyKGYpKQogCiAgICAgICAgICMgZGlyKG9ial9ub19fZGljdF9fKQogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCiAgICAgICAgIGYgPSBGb28oKQotICAgICAgICBzZWxmLmFzc2VydF8oIl9fcmVwcl9fIiBpbiBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fcmVwcl9fIiwgZGlyKGYpKQogCiAgICAgICAgICMgZGlyKG9ial9ub19fY2xhc3NfX3dpdGhfX2RpY3RfXykKICAgICAgICAgIyAoYW4gdWdseSB0cmljayB0byBjYXVzZSBnZXRhdHRyKGYsICJfX2NsYXNzX18iKSB0byBmYWlsKQpAQCAtMjcxLDE1ICszMDcsMTUgQEAKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmJhciA9ICJ3b3ciCiAgICAgICAgIGYgPSBGb28oKQotICAgICAgICBzZWxmLmFzc2VydF8oIl9fcmVwcl9fIiBub3QgaW4gZGlyKGYpKQotICAgICAgICBzZWxmLmFzc2VydF8oImJhciIgaW4gZGlyKGYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJfX3JlcHJfXyIsIGRpcihmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYmFyIiwgZGlyKGYpKQogCiAgICAgICAgICMgZGlyKG9ial91c2luZyBfX2Rpcl9fKQogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBbImthbiIsICJnYSIsICJyb28iXQogICAgICAgICBmID0gRm9vKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRpcihmKSA9PSBbImdhIiwgImthbiIsICJyb28iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcihmKSA9PSBbImdhIiwgImthbiIsICJyb28iXSkKIAogICAgICAgICAjIGRpcihvYmpfX2Rpcl9fbm90X2xpc3QpCiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgpAQCAtMzA3LDEwICszNDMsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLXN5cy5tYXhpbnQtMSwgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChzeXMubWF4aW50KzEsIDApKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmNtcChkaXZtb2QoMy4yNSwgMS4wKSwgKDMuMCwgMC4yNSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGZjbXAoZGl2bW9kKC0zLjI1LCAxLjApLCAoLTQuMCwgMC43NSkpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGZjbXAoZGl2bW9kKDMuMjUsIC0xLjApLCAoLTQuMCwgLTAuNzUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmY21wKGRpdm1vZCgtMy4yNSwgLTEuMCksICgzLjAsIC0wLjI1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChkaXZtb2QoMy4yNSwgMS4wKSwgKDMuMCwgMC4yNSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKC0zLjI1LCAxLjApLCAoLTQuMCwgMC43NSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKDMuMjUsIC0xLjApLCAoLTQuMCwgLTAuNzUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgtMy4yNSwgLTEuMCksICgzLjAsIC0wLjI1KSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXZtb2QpCiAKQEAgLTQxNSw3ICs0NTEsNyBAQAogICAgIGYud3JpdGUoJ3ogPSB6KzFcbicpCiAgICAgZi53cml0ZSgneiA9IHoqMlxuJykKICAgICBmLmNsb3NlKCkKLSAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgiZXhlY2ZpbGUuLiBub3Qgc3VwcG9ydGVkIGluIDMueCIsCisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiZXhlY2ZpbGUuLiBub3Qgc3VwcG9ydGVkIGluIDMueCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgZXhlY2ZpbGUoVEVTVEZOKQogCkBAIC01NzEsMTEgKzYwNywxMSBAQAogICAgICAgICAgICAgICAgIGZvciBmdW5jIGluIGZ1bmNzOgogICAgICAgICAgICAgICAgICAgICBvdXRwID0gZmlsdGVyKGZ1bmMsIGNscyhpbnApKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHAsIGV4cCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKG91dHAsIGNscykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShvdXRwLCBjbHMpKQogCiAgICAgZGVmIHRlc3RfZ2V0YXR0cihzZWxmKToKICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBzZWxmLmFzc2VydF8oZ2V0YXR0cihzeXMsICdzdGRvdXQnKSBpcyBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihzeXMsICdzdGRvdXQnKSBpcyBzeXMuc3Rkb3V0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIsIHN5cywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyLCBzeXMsIDEsICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGF0dHIpCkBAIC01ODQsNyArNjIwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2hhc2F0dHIoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoc3lzLCAnc3Rkb3V0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN5cywgJ3N0ZG91dCcpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2F0dHIsIHN5cywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNhdHRyKQogICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CkBAIC02MTUsMTUgKzY1MSwxNSBAQAogICAgICAgICBjbGFzcyBYOgogICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAyKioxMDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHlwZShoYXNoKFgoKSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFgoKSkpLCBpbnQpCiAgICAgICAgIGNsYXNzIFkob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gMioqMTAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR5cGUoaGFzaChZKCkpKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaGFzaChZKCkpKSwgaW50KQogICAgICAgICBjbGFzcyBaKGxvbmcpOgogICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goWig0MikpLCBoYXNoKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChaKDQyKSksIGhhc2goNDJMKSkKIAogICAgIGRlZiB0ZXN0X2hleChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTYpLCAnMHgxMCcpCkBAIC02NDksOSArNjg1LDkgQEAKICAgICAgICAgIyBUaGlzIGZhaWxzIGlmIHRoZSB0ZXN0IGlzIHJ1biB0d2ljZSB3aXRoIGEgY29uc3RhbnQgc3RyaW5nLAogICAgICAgICAjIHRoZXJlZm9yZSBhcHBlbmQgdGhlIHJ1biBjb3VudGVyCiAgICAgICAgIHMgPSAibmV2ZXIgaW50ZXJuZWQgYmVmb3JlICIgKyBzdHIobnVtcnVucykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGludGVybihzKSBpcyBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJuKHMpIGlzIHMpCiAgICAgICAgIHMyID0gcy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGludGVybihzMikgaXMgcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludGVybihzMikgaXMgcykKIAogICAgICAgICAjIFN1YmNsYXNzZXMgb2Ygc3RyaW5nIGNhbid0IGJlIGludGVybmVkLCBiZWNhdXNlIHRoZXkKICAgICAgICAgIyBwcm92aWRlIHRvbyBtdWNoIG9wcG9ydHVuaXR5IGZvciBpbnNhbmUgdGhpbmdzIHRvIGhhcHBlbi4KQEAgLTY5MiwxMSArNzI4LDExIEBACiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgZCA9IEQoKQogICAgICAgICBlID0gRSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGMsIEMpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkLCBDKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKGUsIEMpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzaW5zdGFuY2UoYywgRCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNpbnN0YW5jZSgnZm9vJywgRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGMsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKGUsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2UoYywgRCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZSgnZm9vJywgRSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNpbnN0YW5jZSwgRSwgJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNpbnN0YW5jZSkKIApAQCAtNzEwLDkgKzc0Niw5IEBACiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgZCA9IEQoKQogICAgICAgICBlID0gRSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKEQsIEMpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhDLCBDKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc3N1YmNsYXNzKEMsIEQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhELCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNzdWJjbGFzcyhDLCBEKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzLCAnZm9vJywgRSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzLCBFLCAnZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzKQpAQCAtNzI4LDYgKzc2NCwxMSBAQAogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsZW4sIEJhZFNlcSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgMikKKyAgICAgICAgY2xhc3MgQ2xhc3NpY1N0eWxlOiBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGxlbiwgQ2xhc3NpY1N0eWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCBOZXdTdHlsZSgpKQogCiAgICAgZGVmIHRlc3RfbWFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtODg5LDcgKzkzMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV4dChpdCwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0LCA0MiksIDQyKQogCiAgICAgICAgIGNsYXNzIEl0ZXIob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKQEAgLTg5OCw3ICs5MzksNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KIAogICAgICAgICBpdCA9IGl0ZXIoSXRlcigpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXh0KGl0LCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQsIDQyKSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQogCiAgICAgICAgIGRlZiBnZW4oKToKQEAgLTkwNiw5ICs5NDcsOSBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaXQgPSBnZW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXh0KGl0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5leHQoaXQsIDQyKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCwgNDIpLCA0MikKIAogICAgIGRlZiB0ZXN0X29jdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoMTAwKSwgJzAxNDQnKQpAQCAtMTA0NCwxOCArMTA4NSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKGErNCwgYSwgLTIpLCBbYSs0LCBhKzJdKQogCiAgICAgICAgIHNlcSA9IHJhbmdlKGEsIGIsIGMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiwgc2VxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQogCiAgICAgICAgIHNlcSA9IHJhbmdlKGIsIGEsIC1jKQotICAgICAgICBzZWxmLmFzc2VydF8oYiBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIG5vdCBpbiBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIHNlcSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKIAogICAgICAgICBzZXEgPSByYW5nZSgtYSwgLWIsIC1jKQotICAgICAgICBzZWxmLmFzc2VydF8oLWEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydF8oLWIgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSkKQEAgLTEwNjksMTQgKzExMTAsOSBAQAogICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgSW52YWxpZCBjbXAgbWFrZXMgdGhpcyB1bmhhc2hhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmFuZ2UsIGEsIGEgKyAxLCBiYWR6ZXJvKDEpKQogCi0gICAgICAgICMgUmVqZWN0IGZsb2F0cyB3aGVuIGl0IHdvdWxkIHJlcXVpcmUgUHlMb25ncyB0byByZXByZXNlbnQuCi0gICAgICAgICMgKHNtYWxsZXIgZmxvYXRzIHN0aWxsIGFjY2VwdGVkLCBidXQgZGVwcmVjYXRlZCkKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMWUxMDEsIDFlMTAxKQotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMS4wKSwgWzBdKQorICAgICAgICAjIFJlamVjdCBmbG9hdHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDEuLCAxLiwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAxZTEwMSwgMWUxMDEpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgInNwYW0iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCA0MiwgInNwYW0iKQpAQCAtMTExOCwyMCArMTE1NCwyMSBAQAogCiAgICAgICAgICMgRXhlcmNpc2UgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYmFkIGFyZ3VtZW50cywgdG8gY2hlY2sKICAgICAgICAgIyByZWZjb3VudGluZyBsb2dpYwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAxZTEwMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMWUxMDAsIDFlMTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLjApCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAsIDFlMTAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMWUxMDAsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAxZTEwMCwgMWUxMDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMCwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAwLCAxZTEwMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAxZTEwMCwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDFlMTAwLCAxZTEwMCwgMWUxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMC4wLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLjAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMC4wLCAxLjApCisKKwogCiAgICAgZGVmIHRlc3RfaW5wdXRfYW5kX3Jhd19pbnB1dChzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCkBAIC0xMTkxLDkgKzEyMjgsMTAgQEAKICAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFsnYScsICdiJywgJ2MnXSwgJycpLCAnYWJjJykKKyAgICAgICAgYWRkID0gbGFtYmRhIHgsIHk6IHgreQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFsnYScsICdiJywgJ2MnXSwgJycpLCAnYWJjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBbWydhJywgJ2MnXSwgW10sIFsnZCcsICd3J11dLCBbXSksCisgICAgICAgICAgICByZWR1Y2UoYWRkLCBbWydhJywgJ2MnXSwgW10sIFsnZCcsICd3J11dLCBbXSksCiAgICAgICAgICAgICBbJ2EnLCdjJywnZCcsJ3cnXQogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4KnksIHJhbmdlKDIsOCksIDEpLCA1MDQwKQpAQCAtMTIwMSwxNSArMTIzOSwyMyBAQAogICAgICAgICAgICAgcmVkdWNlKGxhbWJkYSB4LCB5OiB4KnksIHJhbmdlKDIsMjEpLCAxTCksCiAgICAgICAgICAgICAyNDMyOTAyMDA4MTc2NjQwMDAwTAogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFNxdWFyZXMoMTApKSwgMjg1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBTcXVhcmVzKDEwKSwgMCksIDI4NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgU3F1YXJlcygwKSwgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU3F1YXJlcygxMCkpLCAyODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU3F1YXJlcygxMCksIDApLCAyODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU3F1YXJlcygwKSwgMCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgTm9uZSwgcmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBhZGQsIDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZSg0MiwgIjEiKSwgIjEiKSAjIGZ1bmMgaXMgbmV2ZXIgY2FsbGVkIHdpdGggb25lIGl0ZW0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoNDIsICIiLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIsICg0MiwgNDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCBbXSkgIyBhcmcgMiBtdXN0IG5vdCBiZSBlbXB0eSBzZXF1ZW5jZSB3aXRoIG5vIGluaXRpYWwgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBhZGQsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFtdLCBOb25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBbXSwgNDIpLCA0MikKIAogICAgICAgICBjbGFzcyBCYWRTZXE6CiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgpAQCAtMTMxMiw2ICsxMzU4LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIHQsIDApCiAKKyAgICAjIFNvbWUgdmVyc2lvbnMgb2YgZ2xpYmMgZm9yIGFscGhhIGhhdmUgYSBidWcgdGhhdCBhZmZlY3RzCisgICAgIyBmbG9hdCAtPiBpbnRlZ2VyIHJvdW5kaW5nIChmbG9vciwgY2VpbCwgcmludCwgcm91bmQpIGZvcgorICAgICMgdmFsdWVzIGluIHRoZSByYW5nZSBbMioqNTIsIDIqKjUzKS4gIFNlZToKKyAgICAjCisgICAgIyAgIGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTUzNTAKKyAgICAjCisgICAgIyBXZSBza2lwIHRoaXMgdGVzdCBvbiBMaW51eC9hbHBoYSBpZiBpdCB3b3VsZCBmYWlsLgorICAgIGxpbnV4X2FscGhhID0gKHBsYXRmb3JtLnN5c3RlbSgpLnN0YXJ0c3dpdGgoJ0xpbnV4JykgYW5kCisgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0ubWFjaGluZSgpLnN0YXJ0c3dpdGgoJ2FscGhhJykpCisgICAgc3lzdGVtX3JvdW5kX2J1ZyA9IHJvdW5kKDVlMTUrMSkgIT0gNWUxNSsxCisgICAgQHVuaXR0ZXN0LnNraXBJZihsaW51eF9hbHBoYSBhbmQgc3lzdGVtX3JvdW5kX2J1ZywKKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHdpbGwgZmFpbDsgIGZhaWx1cmUgaXMgcHJvYmFibHkgZHVlIHRvIGEgIgorICAgICAgICAgICAgICAgICAgICAgImJ1Z2d5IHN5c3RlbSByb3VuZCBmdW5jdGlvbiIpCiAgICAgZGVmIHRlc3Rfcm91bmRfbGFyZ2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE4Njk6IGludGVncmFsIGZsb2F0cyBzaG91bGQgcmVtYWluIHVuY2hhbmdlZAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDVlMTUtMSksIDVlMTUtMSkKQEAgLTEzNDcsNiArMTQwNiwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VtLCBCYWRTZXEoKSkKIAorICAgICAgICBlbXB0eSA9IFtdCisgICAgICAgIHN1bSgoW3hdIGZvciB4IGluIHJhbmdlKDEwKSksIGVtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVtcHR5LCBbXSkKKwogICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSgnJyksICB0eXBlKCcxMjMnKSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0eXBlKCcnKSwgdHlwZSgoKSkpCkBAIC0xMzc3LDYgKzE0NDAsMTEgQEAKICAgICAgICAgYiA9IDIKICAgICAgICAgcmV0dXJuIHZhcnMoKQogCisgICAgY2xhc3MgQ19nZXRfdmFycyhvYmplY3QpOgorICAgICAgICBkZWYgZ2V0RGljdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB7J2EnOjJ9CisgICAgICAgIF9fZGljdF9fID0gcHJvcGVydHkoZmdldD1nZXREaWN0KQorCiAgICAgZGVmIHRlc3RfdmFycyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQodmFycygpKSwgc2V0KGRpcigpKSkKICAgICAgICAgaW1wb3J0IHN5cwpAQCAtMTM4NSw2ICsxNDUzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF92YXJzX2YyKCksIHsnYSc6IDEsICdiJzogMn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdmFycywgNDIsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHZhcnMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc2VsZi5DX2dldF92YXJzKCkpLCB7J2EnOjJ9KQogCiAgICAgZGVmIHRlc3RfemlwKHNlbGYpOgogICAgICAgICBhID0gKDEsIDIsIDMpCkBAIC0xNTEzLDEzICsxNTgyLDQ4IEBACiAgICAgICAgICMgdGVzdHMgZm9yIG9iamVjdC5fX2Zvcm1hdF9fIHJlYWxseSBiZWxvbmcgZWxzZXdoZXJlLCBidXQKICAgICAgICAgIyAgdGhlcmUncyBubyBnb29kIHBsYWNlIHRvIHB1dCB0aGVtCiAgICAgICAgIHggPSBvYmplY3QoKS5fX2Zvcm1hdF9fKCcnKQotICAgICAgICBzZWxmLmFzc2VydF8oeC5zdGFydHN3aXRoKCc8b2JqZWN0IG9iamVjdCBhdCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zdGFydHN3aXRoKCc8b2JqZWN0IG9iamVjdCBhdCcpKQogCiAgICAgICAgICMgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Ll9fZm9ybWF0X18gbXVzdCBiZSBzdHJpbmcKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvYmplY3QoKS5fX2Zvcm1hdF9fLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIG9iamVjdCgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIE5vbmUpCiAKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIElzc3VlICM3OTk0OiBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMKKyAgICAgICAgIyAgcGVuZGluZyBkZXByZWNhdGVkCisgICAgICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhvYmosIGZtdF9zdHIsIHNob3VsZF9yYWlzZV93YXJuaW5nKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCisgICAgICAgICAgICBpZiBzaG91bGRfcmFpc2Vfd2FybmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod1swXS5tZXNzYWdlLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisKKyAgICAgICAgZm10X3N0cnMgPSBbJycsICdzJywgdScnLCB1J3MnXQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmbXRfc3RyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCcnLCBmbXRfc3RyKQorCisgICAgICAgIGZvciBmbXRfc3RyIGluIGZtdF9zdHJzOgorICAgICAgICAgICAgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcoQSgpLCBmbXRfc3RyLCBGYWxzZSkKKworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgY2xzIGluIFtvYmplY3QsIEIsIENdOgorICAgICAgICAgICAgZm9yIGZtdF9zdHIgaW4gZm10X3N0cnM6CisgICAgICAgICAgICAgICAgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcoY2xzKCksIGZtdF9zdHIsIGxlbihmbXRfc3RyKSAhPSAwKQorICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgY2FuIHRha2UgYSBzdWJjbGFzcyBvZiBzdHIgYXMgYSBmb3JtYXQgc3BlYwogICAgICAgICBjbGFzcyBEZXJpdmVkRnJvbVN0cihzdHIpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAsIERlcml2ZWRGcm9tU3RyKCcxMCcpKSwgJyAgICAgICAgIDAnKQpAQCAtMTU3OCwxMyArMTY4MiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvcnRlZCwgZGF0YSwgTm9uZSwgbGFtYmRhIHgseTogMCkKIAogZGVmIF9ydW5fdW5pdHRlc3QoKmFyZ3MpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCIuKyBub3Qgc3VwcG9ydGVkIGluIDMueCIsIERlcHJlY2F0aW9uV2FybmluZyksCiAgICAgICAgICAgICAoIi4rIGlzIHJlbmFtZWQgdG8gaW1wLnJlbG9hZCIsIERlcHJlY2F0aW9uV2FybmluZyksCiAgICAgICAgICAgICAoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHJ1bl91bml0dGVzdCgqYXJncykKIAotCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgdGVzdF9jbGFzc2VzID0gKEJ1aWx0aW5UZXN0LCBUZXN0U29ydGVkKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQppbmRleCBhNjk5ZDkxLi4yMDI2Y2RiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKQEAgLTksMTQgKzksMjggQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IGNvcHkKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAogaW1wb3J0IHRlc3Quc3RyaW5nX3Rlc3RzCiBpbXBvcnQgdGVzdC5idWZmZXJfdGVzdHMKIAorCitpZiBzeXMuZmxhZ3MuYnl0ZXNfd2FybmluZzoKKyAgICBkZWYgY2hlY2tfYnl0ZXNfd2FybmluZ3MoZnVuYyk6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIEJ5dGVzV2FybmluZykpOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICByZXR1cm4gd3JhcHBlcgorZWxzZToKKyAgICAjIG5vLW9wCisgICAgZGVmIGNoZWNrX2J5dGVzX3dhcm5pbmdzKGZ1bmMpOgorICAgICAgICByZXR1cm4gZnVuYworCisKIGNsYXNzIEluZGV4YWJsZToKICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MCk6CiAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQpAQCAtMjYsMTIgKzQwLDYgQEAKIAogY2xhc3MgQmFzZUJ5dGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2FybmluZ19maWx0ZXJzID0gd2FybmluZ3MuZmlsdGVyc1s6XQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy5maWx0ZXJzID0gc2VsZi53YXJuaW5nX2ZpbHRlcnMKLQogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGIpLCBzZWxmLnR5cGUydGVzdCkKQEAgLTc5LDcgKzg3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgMC4wKQogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgcGFzcwotICAgICAgICAjIGFsbG93ZWQgaW4gMi42CisgICAgICAgICMgYWxsb3dlZCBpbiAyLngKICAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFsiMCJdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbMC4wXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW05vbmVdKQpAQCAtMTAzLDI1ICsxMTEsMjUgQEAKICAgICAgICAgYjMgPSBzZWxmLnR5cGUydGVzdChbMSwgM10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiMSwgYjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiMiAhPSBiMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIxIDw9IGIyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYjEgPD0gYjMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiMSA8ICBiMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGIxID49IGIyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYjMgPj0gYjIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiMyA+ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIyICE9IGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPD0gYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA8PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIxIDwgIGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPj0gYjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMyA+PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIzID4gIGIyKQogCi0gICAgICAgIHNlbGYuZmFpbElmKGIxICE9IGIyKQotICAgICAgICBzZWxmLmZhaWxJZihiMiA9PSBiMykKLSAgICAgICAgc2VsZi5mYWlsSWYoYjEgPiAgYjIpCi0gICAgICAgIHNlbGYuZmFpbElmKGIxID4gIGIzKQotICAgICAgICBzZWxmLmZhaWxJZihiMSA+PSBiMykKLSAgICAgICAgc2VsZi5mYWlsSWYoYjEgPCAgYjIpCi0gICAgICAgIHNlbGYuZmFpbElmKGIzIDwgIGIyKQotICAgICAgICBzZWxmLmZhaWxJZihiMyA8PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSAhPSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMiA9PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+ICBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA8ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMyA8ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMyA8PSBiMikKIAorICAgIEBjaGVja19ieXRlc193YXJuaW5ncwogICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fc3RyKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIEJ5dGVzV2FybmluZykKICAgICAgICAgIyBCeXRlIGNvbXBhcmlzb25zIHdpdGggdW5pY29kZSBzaG91bGQgYWx3YXlzIGZhaWwhCiAgICAgICAgICMgVGVzdCB0aGlzIGZvciBhbGwgZXhwZWN0ZWQgYnl0ZSBvcmRlcnMgYW5kIFVuaWNvZGUgY2hhcmFjdGVyIHNpemVzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiJcMGFcMGJcMGMiKSA9PSB1ImFiYyIsIEZhbHNlKQpAQCAtMTg3LDYgKzE5NSw4IEBACiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzYW1wbGUsICJsYXRpbjEiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIuZGVjb2RlLCAidXRmOCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kZWNvZGUoInV0ZjgiLCAiaWdub3JlIiksICJIZWxsbyB3b3JsZFxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZShlcnJvcnM9Imlnbm9yZSIsIGVuY29kaW5nPSJ1dGY4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvIHdvcmxkXG4iKQogCiAgICAgZGVmIHRlc3RfZnJvbV9pbnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgwKQpAQCAtMjIxLDM3ICsyMzEsMzUgQEAKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYiJhYmMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3JkKCdhJykgaW4gYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGludChvcmQoJ2EnKSkgaW4gYikKLSAgICAgICAgc2VsZi5mYWlsSWYoMjAwIGluIGIpCi0gICAgICAgIHNlbGYuZmFpbElmKDIwMCBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydEluKG9yZCgnYScpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEluKGludChvcmQoJ2EnKSksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMjAwLCBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IDMwMCBpbiBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IC0xIGluIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBmbG9hdChvcmQoJ2EnKSkgaW4gYikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHUiYSIgaW4gYikKICAgICAgICAgZm9yIGYgaW4gYnl0ZXMsIGJ5dGVhcnJheToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmKGIiIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmKGIiYSIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZihiImIiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYoYiJjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmKGIiYWIiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYoYiJiYyIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZihiImFiYyIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmKGIiYWMiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZihiImQiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZihiImRhYiIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmKGIiYWJkIikgaW4gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiIiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYSIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYiIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYWIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImJjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJhYmMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImFjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJkIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJkYWIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZihiImFiZCIpLCBiKQogCiAgICAgZGVmIHRlc3RfZnJvbWhleChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScnKSwgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnJyksIHNlbGYudHlwZTJ0ZXN0KCkpCiAgICAgICAgIGIgPSBieXRlYXJyYXkoWzB4MWEsIDB4MmIsIDB4MzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnMWEyQjMwJyksIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScgIDFBIDJCICAzMCAgICcpLCBiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnMDAwMCcpLCBiJ1wwXDAnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIGInMUInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScxYTJCMzAnKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnICAxQSAyQiAgMzAgICAnKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9taGV4KHUnMDAwMCcpLCBiJ1wwXDAnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1J2EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1J3J0JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgdScxYSBiIGNkJykKQEAgLTI2OSwxMyArMjc3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCiAgICAgICAgICMgWFhYIG1vcmUuLi4KIAotICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidwYXJyb3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoJ3AnKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmluZGV4KCdycicpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoJ3QnKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBiLmluZGV4KCd3JykpCi0KICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY291bnQoYidpJyksIDQpCkBAIC0zNjEsNiArMzYyLDEwIEBACiAgICAgZGVmIHRlc3Rfc3BsaXRfc3RyaW5nX2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0KGInYSBiJykuc3BsaXQsIHUnICcpCiAKKyAgICBkZWYgdGVzdF9zcGxpdF91bmljb2Rld2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIiXHgwOVx4MEFceDBCXHgwQ1x4MERceDFDXHgxRFx4MUVceDFGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KCksIFtiJ1x4MWNceDFkXHgxZVx4MWYnXSkKKwogICAgIGRlZiB0ZXN0X3JzcGxpdChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGInaScpLCBbYidtJywgYidzcycsIGInc3MnLCBiJ3BwJywgYicnXSkKQEAgLTM4NCwxOCArMzg5LDE4IEBACiAKICAgICBkZWYgdGVzdF9yc3BsaXRfdW5pY29kZXdoaXRlc3BhY2Uoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiIlx4MDlceDBBXHgwQlx4MENceDBEXHgxQ1x4MURceDFFXHgxRiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdCgpLCBbYidceDFjXHgxZFx4MWVceDFmJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQogCiAgICAgZGVmIHRlc3RfcGFydGl0aW9uKHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wYXJ0aXRpb24oYidzcycpLCAoYidtaScsIGInc3MnLCBiJ2lzc2lwcGknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYid3JyksIChiJycsIGInJywgYidtaXNzaXNzaXBwaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucGFydGl0aW9uKGIndycpLCAoYidtaXNzaXNzaXBwaScsIGInJywgYicnKSkKIAogICAgIGRlZiB0ZXN0X3JwYXJ0aXRpb24oc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidzcycpLCAoYidtaXNzaScsIGInc3MnLCBiJ2lwcGknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidpJyksIChiJ21pc3Npc3NpcHAnLCBiJ2knLCBiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ3cnKSwgKGInJywgYicnLCBiJ21pc3Npc3NpcHBpJykpCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CkBAIC00MzYsOCArNDQxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmxzdHJpcCgpLCBiJ2FiYyBcdFxuXHJcZlx2JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzdHJpcCgpLCBiJyBcdFxuXHJcZlx2YWJjJykKIAotICAgIGRlZiBYWFh0ZXN0X3N0cmlwX2J5dGVhcnJheShzZWxmKToKLSAgICAgICAgIyBYWFggbWVtb3J5dmlldyBub3QgYXZhaWxhYmxlCisgICAgZGVmIHRlc3Rfc3RyaXBfYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykuc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2InKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykubHN0cmlwKG1lbW9yeXZpZXcoYidhYycpKSwgYidiYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYidhYmMnKS5yc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2FiJykKQEAgLTU4MywxMSArNTg3LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEucmV2ZXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKICAgICAgICAgICAgICAgICAgICAgYltzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBieXRlYXJyYXkoTCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KEwpKQogCiAgICAgICAgICAgICAgICAgICAgIGRlbCBMW3N0YXJ0OnN0b3A6c3RlcF0KICAgICAgICAgICAgICAgICAgICAgZGVsIGJbc3RhcnQ6c3RvcDpzdGVwXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBieXRlYXJyYXkoTCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KEwpKQogCiAgICAgZGVmIHRlc3Rfc2V0c2xpY2VfdHJhcChzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaGFuZGxlIGFzc2lnbmluZyBzZWxmCkBAIC02MDIsNyArNjA2LDcgQEAKICAgICAgICAgYiArPSBiImRlZiIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiY2RlZiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiIGlzIGIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBiMSkKICAgICAgICAgYiArPSBiInh5eiIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiY2RlZnh5eiIpCiAgICAgICAgIHRyeToKQEAgLTYxOCw3ICs2MjIsNyBAQAogICAgICAgICBiICo9IDMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiY2FiY2FiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiIGlzIGIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBiMSkKIAogICAgIGRlZiB0ZXN0X2lyZXBlYXRfMWNoYXIoc2VsZik6CiAgICAgICAgIGIgPSBieXRlYXJyYXkoYiJ4IikKQEAgLTYyNiwxNyArNjMwLDE3IEBACiAgICAgICAgIGIgKj0gMTAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJ4IioxMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYjEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiIGlzIGIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBiMSkKIAogICAgIGRlZiB0ZXN0X2FsbG9jKHNlbGYpOgogICAgICAgICBiID0gYnl0ZWFycmF5KCkKICAgICAgICAgYWxsb2MgPSBiLl9fYWxsb2NfXygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhbGxvYyA+PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsb2MgPj0gMCkKICAgICAgICAgc2VxID0gW2FsbG9jXQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgogICAgICAgICAgICAgYiArPSBiIngiCiAgICAgICAgICAgICBhbGxvYyA9IGIuX19hbGxvY19fKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhhbGxvYyA+PSBsZW4oYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsb2MgPj0gbGVuKGIpKQogICAgICAgICAgICAgaWYgYWxsb2Mgbm90IGluIHNlcToKICAgICAgICAgICAgICAgICBzZXEuYXBwZW5kKGFsbG9jKQogCkBAIC02OTEsNyArNjk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBvcCgwKSwgb3JkKCd3JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wb3AoLTIpLCBvcmQoJ3InKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiLnBvcCgxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogYnl0ZWFycmF5KCkucG9wKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYnl0ZWFycmF5KCkucG9wKCkpCiAgICAgICAgICMgdGVzdCBmb3IgaXNzdWUgIzY4NDYKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoYidceGZmJykucG9wKCksIDB4ZmYpCiAKQEAgLTcxOCw3ICs3MjIsNyBAQAogICAgICAgICBiLmluc2VydCgtMiwgb3JkKCdpJykpCiAgICAgICAgIGIuaW5zZXJ0KDEwMDAsIG9yZCgnaScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInbWlzc2lzc2lwcGknKQotICAgICAgICAjIGFsbG93ZWQgaW4gMi42CisgICAgICAgICMgYWxsb3dlZCBpbiAyLngKICAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiLmluc2VydCgwLCBiJzEnKSkKICAgICAgICAgYiA9IGJ5dGVhcnJheSgpCiAgICAgICAgIGIuaW5zZXJ0KDAsIEluZGV4YWJsZShvcmQoJ0EnKSkpCkBAIC03MzgsNyArNzQyLDcgQEAKICAgICAgICAgYSwgYiwgYyA9IGJ5dGVhcnJheShiIngiKS5wYXJ0aXRpb24oYiJ5IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQotICAgICAgICBzZWxmLmFzc2VydF8oYiBpcyBub3QgYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgbm90IGMpCiAgICAgICAgIGIgKz0gYiIhIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGIiIikKICAgICAgICAgYSwgYiwgYyA9IGJ5dGVhcnJheShiIngiKS5wYXJ0aXRpb24oYiJ5IikKQEAgLTc0OCwxNSArNzUyLDE0IEBACiAgICAgICAgIGIsIGMsIGEgPSBieXRlYXJyYXkoYiJ4IikucnBhcnRpdGlvbihiInkiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhiIGlzIG5vdCBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBub3QgYykKICAgICAgICAgYiArPSBiIiEiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQogICAgICAgICBjLCBiLCBhID0gYnl0ZWFycmF5KGIieCIpLnJwYXJ0aXRpb24oYiJ5IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQogCi0gICAgIyBYWFggbWVtb3J5dmlldyBub3QgYXZhaWxhYmxlCi0gICAgZGVmIFhYWHRlc3RfcmVzaXplX2ZvcmJpZGRlbihzZWxmKToKKyAgICBkZWYgdGVzdF9yZXNpemVfZm9yYmlkZGVuKHNlbGYpOgogICAgICAgICAjICM0NTA5OiBjYW4ndCByZXNpemUgYSBieXRlYXJyYXkgd2hlbiB0aGVyZSBhcmUgYnVmZmVyIGV4cG9ydHMsIGV2ZW4KICAgICAgICAgIyBpZiBpdCB3b3VsZG4ndCByZWFsbG9jYXRlIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KICAgICAgICAgIyBGdXJ0aGVybW9yZSwgbm8gZGVzdHJ1Y3RpdmUgY2hhbmdlcyB0byB0aGUgYnVmZmVyIG1heSBiZSBhcHBsaWVkCkBAIC03NjgsMjUgKzc3MSwyNSBAQAogICAgICAgICByZXNpemUoMTApCiAgICAgICAgIG9yaWcgPSBiWzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCByZXNpemUsIDExKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCByZXNpemUsIDkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogICAgICAgICAjIE90aGVyIG9wZXJhdGlvbnMgaW1wbHlpbmcgcmVzaXplCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBiLnBvcCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgYi5yZW1vdmUsIGJbMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKICAgICAgICAgZGVmIGRlbGl0ZW0oKToKICAgICAgICAgICAgIGRlbCBiWzFdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBkZWxpdGVtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCiAgICAgICAgICMgZGVsZXRpbmcgYSBub24tY29udGlndW91cyBzbGljZQogICAgICAgICBkZWYgZGVsc2xpY2UoKToKICAgICAgICAgICAgIGJbMTotMToyXSA9IGIiIgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgZGVsc2xpY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2J5dGVhcnJheShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzU2MTogb3BlcmF0aW9ucyBvbiBlbXB0eSBieXRlYXJyYXlzIGNvdWxkIGNyYXNoIGluIG1hbnkKQEAgLTgwMCwxNCArODAzLDggQEAKICAgICAjIFRlc3QgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQogICAgICMKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi53YXJuaW5nX2ZpbHRlcnMgPSB3YXJuaW5ncy5maWx0ZXJzWzpdCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLmZpbHRlcnMgPSBzZWxmLndhcm5pbmdfZmlsdGVycwotCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCiAgICAgZGVmIHRlc3RfcmVwcl9zdHIoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgQnl0ZXNXYXJuaW5nKQogICAgICAgICBmb3IgZiBpbiBzdHIsIHJlcHI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KCkpLCAiYnl0ZWFycmF5KGInJykiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGJ5dGVhcnJheShbMF0pKSwgImJ5dGVhcnJheShiJ1xceDAwJykiKQpAQCAtODQ3LDEwICs4NDQsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiYyIpIDw9IGIiYWIiLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2RvYyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJ5dGVhcnJheS5fX2RvY19fICE9IE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhieXRlYXJyYXkuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlYXJyYXkoIiksIGJ5dGVhcnJheS5fX2RvY19fKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYnl0ZXMuX19kb2NfXyAhPSBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYnl0ZXMuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlcygiKSwgYnl0ZXMuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYnl0ZWFycmF5Ll9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXRlYXJyYXkuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlYXJyYXkoIiksIGJ5dGVhcnJheS5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShieXRlcy5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnl0ZXMuX19kb2NfXy5zdGFydHN3aXRoKCJieXRlcygiKSwgYnl0ZXMuX19kb2NfXykKIAogICAgIGRlZiB0ZXN0X2Zyb21fYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICBzYW1wbGUgPSBieXRlcyhiIkhlbGxvIHdvcmxkXG5ceDgwXHg4MVx4ZmVceGZmIikKQEAgLTg1OCw4ICs4NTUsOCBAQAogICAgICAgICBiID0gYnl0ZWFycmF5KGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoc2FtcGxlKSkKIAorICAgIEBjaGVja19ieXRlc193YXJuaW5ncwogICAgIGRlZiB0ZXN0X3RvX3N0cihzZWxmKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGInJyksICJiJyciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ3gnKSwgImIneCciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ1x4ODAnKSwgImInXFx4ODAnIikKQEAgLTg5Myw4ICs4OTAsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiJ2hlZScpCiAgICAgICAgIGMgPSBiLnRyYW5zbGF0ZShOb25lLCBiJ2UnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGxsbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi50cmFuc2xhdGUsIGInYScqMjU2LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhLnRyYW5zbGF0ZSwgYidhJyoyNTYsIE5vbmUpCisgICAgICAgIGMgPSBiYS50cmFuc2xhdGUoTm9uZSwgYidlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiJ2hsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIudHJhbnNsYXRlLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhLnRyYW5zbGF0ZSwgTm9uZSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3NwbGl0X2J5dGVhcnJheShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2EgYicuc3BsaXQobWVtb3J5dmlldyhiJyAnKSksIFtiJ2EnLCBiJ2InXSkKQEAgLTkzMiw3ICs5MzEsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG5hbWUrJyByZXR1cm5lZCBzZWxmIG9uIGEgbXV0YWJsZSBvYmplY3QnKQotCisgICAgICAgIGZvciBleHByIGluICgndmFsLnNwbGl0KClbMF0nLCAndmFsLnJzcGxpdCgpWzBdJywKKyAgICAgICAgICAgICAgICAgICAgICd2YWwucGFydGl0aW9uKCIuIilbMF0nLCAndmFsLnJwYXJ0aXRpb24oIi4iKVsyXScsCisgICAgICAgICAgICAgICAgICAgICAndmFsLnNwbGl0bGluZXMoKVswXScsICd2YWwucmVwbGFjZSgiIiwgIiIpJyk6CisgICAgICAgICAgICBuZXd2YWwgPSBldmFsKGV4cHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCiAKIGNsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CiAKQEAgLTk2NywyMCArOTcyLDIwIEBACiBjbGFzcyBCeXRlQXJyYXlTdWJjbGFzc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKEJ5dGVBcnJheVN1YmNsYXNzLCBieXRlYXJyYXkpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShCeXRlQXJyYXlTdWJjbGFzcygpLCBieXRlYXJyYXkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCeXRlQXJyYXlTdWJjbGFzcywgYnl0ZWFycmF5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEJ5dGVBcnJheVN1YmNsYXNzKCksIGJ5dGVhcnJheSkKIAogICAgICAgICBhLCBiID0gYiJhYmNkIiwgYiJlZmdoIgogICAgICAgICBfYSwgX2IgPSBCeXRlQXJyYXlTdWJjbGFzcyhhKSwgQnl0ZUFycmF5U3ViY2xhc3MoYikKIAogICAgICAgICAjIHRlc3QgY29tcGFyaXNvbiBvcGVyYXRvcnMgd2l0aCBzdWJjbGFzcyBpbnN0YW5jZXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9hID09IF9hKQotICAgICAgICBzZWxmLmFzc2VydF8oX2EgIT0gX2IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfYSA8IF9iKQotICAgICAgICBzZWxmLmFzc2VydF8oX2EgPD0gX2IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfYiA+PSBfYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9iID4gX2EpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfYSBpcyBub3QgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hID09IF9hKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgIT0gX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSA8IF9iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgPD0gX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYiA+PSBfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9iID4gX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSBpcyBub3QgYSkKIAogICAgICAgICAjIHRlc3QgY29uY2F0IG9mIHN1YmNsYXNzIGluc3RhbmNlcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBiLCBfYSArIF9iKQpAQCAtOTg4LDcgKzk5Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGIsIF9hICsgYikKIAogICAgICAgICAjIHRlc3QgcmVwZWF0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhKjUgPT0gX2EqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEqNSA9PSBfYSo1KQogCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgam9pbiByZXR1cm5zIGEgTkVXIG9iamVjdCBmb3Igc2luZ2xlIGl0ZW0gc2VxdWVuY2VzCkBAIC05OTYsMTIgKzEwMDEsMTIgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpdCBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KICAgICAgICAgczEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQogICAgICAgICBzMiA9IGJ5dGVhcnJheSgpLmpvaW4oW3MxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMxIGlzIG5vdCBzMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoczIpIGlzIGJ5dGVhcnJheSwgdHlwZShzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyBieXRlYXJyYXksIHR5cGUoczIpKQogCiAgICAgICAgICMgVGVzdCByZXZlcnNlLCBjYWxsaW5nIGpvaW4gb24gc3ViY2xhc3MKICAgICAgICAgczMgPSBzMS5qb2luKFtiImFiY2QiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoczMpIGlzIGJ5dGVhcnJheSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczMpIGlzIGJ5dGVhcnJheSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgYSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiYWJjZCIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J6Mi5weSBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CmluZGV4IGVlN2U4ODYuLmQ5Y2NmMGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CkBAIC0xLDE1ICsxLDE5IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGltcG9ydF9tb2R1bGUKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBvcwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKIAotaW1wb3J0IGJ6MgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK2J6MiA9IGltcG9ydF9tb2R1bGUoJ2J6MicpCiBmcm9tIGJ6MiBpbXBvcnQgQloyRmlsZSwgQloyQ29tcHJlc3NvciwgQloyRGVjb21wcmVzc29yCiAKIGhhc19jbWRsaW5lX2J1bnppcDIgPSBzeXMucGxhdGZvcm0gbm90IGluICgid2luMzIiLCAib3MyZW14IiwgInJpc2NvcyIpCkBAIC01MCw2OCArNTQsNjggQEAKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmZpbGVuYW1lKQogCiAgICAgZGVmIGNyZWF0ZVRlbXBGaWxlKHNlbGYsIGNybGY9MCk6Ci0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpCi0gICAgICAgIGlmIGNybGY6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBX0NSTEYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLkRBVEEKLSAgICAgICAgZi53cml0ZShkYXRhKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBpZiBjcmxmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLkRBVEFfQ1JMRgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAKICAgICBkZWYgdGVzdFJlYWQoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0UmVhZDAoc2VsZik6CisgICAgICAgICMgVGVzdCBCQloyRmlsZS5yZWFkKDApIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDApLCAiIikKIAogICAgIGRlZiB0ZXN0UmVhZENodW5rMTAoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKCkgaW4gY2h1bmtzIG9mIDEwIGJ5dGVzIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgdGV4dCA9ICcnCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzdHIgPSBiejJmLnJlYWQoMTApCi0gICAgICAgICAgICBpZiBub3Qgc3RyOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB0ZXh0ICs9IHN0cgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHRleHQpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHRleHQgPSAnJworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBzdHIgPSBiejJmLnJlYWQoMTApCisgICAgICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0ZXh0ICs9IHN0cgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLlRFWFQpCiAKICAgICBkZWYgdGVzdFJlYWQxMDAoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKDEwMCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgxMDApLCBzZWxmLlRFWFRbOjEwMF0pCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDEwMCksIHNlbGYuVEVYVFs6MTAwXSkKIAogICAgIGRlZiB0ZXN0UmVhZExpbmUoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkbGluZSgpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lLCBOb25lKQotICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCi0gICAgICAgIGZvciBsaW5lIGluIHNpby5yZWFkbGluZXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBsaW5lKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmUsIE5vbmUpCisgICAgICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzaW8ucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lKCksIGxpbmUpCiAKICAgICBkZWYgdGVzdFJlYWRMaW5lcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWRsaW5lcygpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lcywgTm9uZSkKLSAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIHNpby5yZWFkbGluZXMoKSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lcywgTm9uZSkKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZXMoKSwgc2lvLnJlYWRsaW5lcygpKQogCiAgICAgZGVmIHRlc3RJdGVyYXRvcihzZWxmKToKICAgICAgICAgIyAiVGVzdCBpdGVyKEJaMkZpbGUpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcihiejJmKSksIHNpby5yZWFkbGluZXMoKSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0ZXIoYnoyZikpLCBzaW8ucmVhZGxpbmVzKCkpCiAKICAgICBkZWYgdGVzdENsb3NlZEl0ZXJhdG9yRGVhZGxvY2soc2VsZik6CiAgICAgICAgICMgIlRlc3QgdGhhdCBpdGVyYXRpb24gb24gYSBjbG9zZWQgYnoyZmlsZSByZWxlYXNlcyB0aGUgbG9jay4iCkBAIC0xNTAsMTA0ICsxNTQsOTEgQEAKIAogICAgIGRlZiB0ZXN0V3JpdGUoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS53cml0ZSgpIgotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZSkKLSAgICAgICAgYnoyZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQotICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYud3JpdGUpCisgICAgICAgICAgICBiejJmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0V3JpdGVDaHVua3MxMChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlKCkgd2l0aCBjaHVua3Mgb2YgMTAgYnl0ZXMiCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikKLSAgICAgICAgbiA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0ciA9IHNlbGYuVEVYVFtuKjEwOihuKzEpKjEwXQotICAgICAgICAgICAgaWYgbm90IHN0cjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgYnoyZi53cml0ZShzdHIpCi0gICAgICAgICAgICBuICs9IDEKLSAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHN0ciA9IHNlbGYuVEVYVFtuKjEwOihuKzEpKjEwXQorICAgICAgICAgICAgICAgIGlmIG5vdCBzdHI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYnoyZi53cml0ZShzdHIpCisgICAgICAgICAgICAgICAgbiArPSAxCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCiAKICAgICBkZWYgdGVzdFdyaXRlTGluZXMoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS53cml0ZWxpbmVzKCkiCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLndyaXRlbGluZXMpCi0gICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKLSAgICAgICAgYnoyZi53cml0ZWxpbmVzKHNpby5yZWFkbGluZXMoKSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYud3JpdGVsaW5lcykKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIGJ6MmYud3JpdGVsaW5lcyhzaW8ucmVhZGxpbmVzKCkpCiAgICAgICAgICMgcGF0Y2ggIzE1MzU1MDAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbImEiXSkKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RXcml0ZU1ldGhvZHNPblJlYWRPbmx5RmlsZShzZWxmKToKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBiejJmLndyaXRlKCJhYmMiKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYud3JpdGUoImFiYyIpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlLCAiYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgWyJhIl0pCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlLCAiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFsiYSJdKQogCiAgICAgZGVmIHRlc3RTZWVrRm9yd2FyZChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoMTUwLCAwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5zZWVrKQotICAgICAgICBiejJmLnNlZWsoMTUwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbMTUwOl0pCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5zZWVrKQorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFsxNTA6XSkKIAogICAgIGRlZiB0ZXN0U2Vla0JhY2t3YXJkcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMSkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBiejJmLnJlYWQoNTAwKQotICAgICAgICBiejJmLnNlZWsoLTE1MCwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzUwMC0xNTA6XSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzUwMC0xNTA6XSkKIAogICAgIGRlZiB0ZXN0U2Vla0JhY2t3YXJkc0Zyb21FbmQoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKC0xNTAsIDIpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFtsZW4oc2VsZi5URVhUKS0xNTA6XSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGVuKHNlbGYuVEVYVCktMTUwOl0pCiAKICAgICBkZWYgdGVzdFNlZWtQb3N0RW5kKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAwMDApIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksICIiKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnNlZWsoMTUwMDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCAiIikKIAogICAgIGRlZiB0ZXN0U2Vla1Bvc3RFbmRUd2ljZShzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoMTUwMDAwKSB0d2ljZSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCi0gICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIGxlbihzZWxmLlRFWFQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCAiIikKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCBsZW4oc2VsZi5URVhUKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksICIiKQogCiAgICAgZGVmIHRlc3RTZWVrUHJlU3RhcnQoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKC0xNTAsIDApIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKC0xNTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RPcGVuRGVsKHNlbGYpOgogICAgICAgICAjICJUZXN0IG9wZW5pbmcgYW5kIGRlbGV0aW5nIGEgZmlsZSBtYW55IHRpbWVzIgpAQCAtMjczLDI0ICsyNjQsNDMgQEAKICAgICBkZWYgdGVzdEJ1ZzExOTEwNDMoc2VsZik6CiAgICAgICAgICMgcmVhZGxpbmVzKCkgZm9yIGZpbGVzIGNvbnRhaW5pbmcgbm8gbmV3bGluZQogICAgICAgICBkYXRhID0gJ0JaaDkxQVkmU1lceGQ5Ylx4ODldXHgwMFx4MDBceDAwXHgwM1x4ODBceDA0XHgwMFx4MDJceDAwXHgwY1x4MDAgXHgwMCFceDlhaDNNXHgxMzxdXHhjOVx4MTRceGUxQkNlXHg4YSV0JwotICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKQotICAgICAgICBmLndyaXRlKGRhdGEpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBsaW5lcyA9IGJ6MmYucmVhZGxpbmVzKCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGxpbmVzID0gYnoyZi5yZWFkbGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbJ1Rlc3QnXSkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgeGxpbmVzID0gbGlzdChiejJmLnhyZWFkbGluZXMoKSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgeGxpbmVzID0gbGlzdChiejJmLnJlYWRsaW5lcygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhsaW5lcywgWydUZXN0J10pCiAKKyAgICBkZWYgdGVzdENvbnRleHRQcm90b2NvbChzZWxmKToKKyAgICAgICAgIyBCWjJGaWxlIHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2VudGVyX18gb24gYSBjbG9zZWQgZmlsZSBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiMSAvLyAwIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdFRocmVhZGluZyhzZWxmKToKICAgICAgICAgIyBVc2luZyBhIEJaMkZpbGUgZnJvbSBzZXZlcmFsIHRocmVhZHMgZG9lc24ndCBkZWFkbG9jayAoaXNzdWUgIzcyMDUpLgogICAgICAgICBkYXRhID0gIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICBmID0gYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICBkZWYgY29tcCgpOgogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCkBAIC0yOTksMjcgKzMwOSwxOSBAQAogICAgICAgICAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKICAgICAgICAgICAgICAgICB0LmpvaW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uUmVhZHMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzgzOTc6IG1peGVkIGl0ZXJhdGlvbiBhbmQgcmVhZHMgc2hvdWxkIGJlIGZvcmJpZGRlbi4KLSAgICAgICAgZiA9IGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgIyBUaGUgaW50ZXJuYWwgYnVmZmVyIHNpemUgaXMgaGFyZC13aXJlZCB0byA4MTkyIGJ5dGVzLCB3ZSBtdXN0CiAgICAgICAgICAgICAjIHdyaXRlIG91dCBtb3JlIHRoYW4gdGhhdCBmb3IgdGhlIHRlc3QgdG8gc3RvcCBoYWxmIHRocm91Z2gKICAgICAgICAgICAgICMgdGhlIGJ1ZmZlci4KICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUICogMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIG5leHQoZikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRsaW5lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiBjbGFzcyBCWjJDb21wcmVzc29yVGVzdChCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RDb21wcmVzcyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CmluZGV4IGZhZDUxN2MuLjJhNTYyNjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQpAQCAtMiw2ICsyLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGxvY2FsZQogCiAKIHJlc3VsdF8yMDA0X3RleHQgPSAiIiIKQEAgLTI0OCw2ICsyNDksMTkgQEAKICAgICAgICAgICAgICMgdmVyaWZ5IGl0ICJhY3RzIGxpa2UgYSBzZXF1ZW5jZSIgaW4gdHdvIGZvcm1zIG9mIGl0ZXJhdGlvbgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVs6Oi0xXSwgbGlzdChyZXZlcnNlZCh2YWx1ZSkpKQogCisgICAgZGVmIHRlc3RfbG9jYWxlY2FsZW5kYXJzKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSB0aGF0IExvY2FsZXtUZXh0LEhUTUx9Q2FsZW5kYXIgcmVzZXRzIHRoZSBsb2NhbGUgcHJvcGVybHkKKyAgICAgICAgIyAoaXQgaXMgc3RpbGwgbm90IHRocmVhZC1zYWZlIHRob3VnaCkKKyAgICAgICAgb2xkX29jdG9iZXIgPSBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXIobG9jYWxlPScnKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgIyBjYW5ub3Qgc2V0IHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2NhbGUgLS0gc2tpcCByZXN0IG9mIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjYWxlbmRhci5Mb2NhbGVIVE1MQ2FsZW5kYXIobG9jYWxlPScnKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTApCisgICAgICAgIG5ld19vY3RvYmVyID0gY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0bW9udGhuYW1lKDIwMTAsIDEwLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob2xkX29jdG9iZXIsIG5ld19vY3RvYmVyKQorCiAKIGNsYXNzIE1vbnRoQ2FsZW5kYXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMzgwLDEyICszOTQsNjIgQEAKICAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTk1LCAxMiwgKDIsIDcsIDcsIDcsIDcsIDEpKQogCiAKK2NsYXNzIE1vbnRoUmFuZ2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfamFudWFyeShzZWxmKToKKyAgICAgICAgIyBUZXN0cyB2YWxpZCBsb3dlciBib3VuZGFyeSBjYXNlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwxKSwgKDMsMzEpKQorCisgICAgZGVmIHRlc3RfZmVicnVhcnlfbGVhcChzZWxmKToKKyAgICAgICAgIyBUZXN0cyBGZWJydWFyeSBkdXJpbmcgbGVhcCB5ZWFyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwyKSwgKDYsMjkpKQorCisgICAgZGVmIHRlc3RfZmVicnVhcnlfbm9ubGVhcChzZWxmKToKKyAgICAgICAgIyBUZXN0cyBGZWJydWFyeSBpbiBub24tbGVhcCB5ZWFyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAxMCwyKSwgKDAsMjgpKQorCisgICAgZGVmIHRlc3RfZGVjZW1iZXIoc2VsZik6CisgICAgICAgICMgVGVzdHMgdmFsaWQgdXBwZXIgYm91bmRhcnkgY2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5tb250aHJhbmdlKDIwMDQsMTIpLCAoMiwzMSkpCisKKyAgICBkZWYgdGVzdF96ZXJvdGhfbW9udGgoc2VsZik6CisgICAgICAgICMgVGVzdHMgbG93IGludmFsaWQgYm91bmRhcnkgY2FzZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjYWxlbmRhci5JbGxlZ2FsTW9udGhFcnJvcik6CisgICAgICAgICAgICBjYWxlbmRhci5tb250aHJhbmdlKDIwMDQsIDApCisKKyAgICBkZWYgdGVzdF90aGlydGVlbnRoX21vbnRoKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGhpZ2ggaW52YWxpZCBib3VuZGFyeSBjYXNlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNhbGVuZGFyLklsbGVnYWxNb250aEVycm9yKToKKyAgICAgICAgICAgIGNhbGVuZGFyLm1vbnRocmFuZ2UoMjAwNCwgMTMpCisKK2NsYXNzIExlYXBkYXlzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25vX3JhbmdlKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2hlbiBubyByYW5nZSBpLmUuIHR3byBpZGVudGljYWwgeWVhcnMgYXMgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDIwMTAsMjAxMCksIDApCisKKyAgICBkZWYgdGVzdF9ub19sZWFwZGF5cyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdoZW4gbm8gbGVhcCB5ZWFycyBpbiByYW5nZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDIwMTAsMjAxMSksIDApCisKKyAgICBkZWYgdGVzdF9ub19sZWFwZGF5c191cHBlcl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgIyB0ZXN0IG5vIGxlYXAgeWVhcnMgaW4gcmFuZ2UsIHdoZW4gdXBwZXIgYm91bmRhcnkgaXMgYSBsZWFwIHllYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygyMDEwLDIwMTIpLCAwKQorCisgICAgZGVmIHRlc3Rfb25lX2xlYXBkYXlfbG93ZXJfYm91bmRhcnkoc2VsZik6CisgICAgICAgICMgdGVzdCB3aGVuIG9uZSBsZWFwIHllYXIgaW4gcmFuZ2UsIGxvd2VyIGJvdW5kYXJ5IGlzIGxlYXAgeWVhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmxlYXBkYXlzKDIwMTIsMjAxMyksIDEpCisKKyAgICBkZWYgdGVzdF9zZXZlcmFsX2xlYXB5ZWFyc19pbl9yYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygxOTk3LDIwMjApLCA1KQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBPdXRwdXRUZXN0Q2FzZSwKICAgICAgICAgQ2FsZW5kYXJUZXN0Q2FzZSwKICAgICAgICAgTW9uZGF5VGVzdENhc2UsCi0gICAgICAgIFN1bmRheVRlc3RDYXNlCisgICAgICAgIFN1bmRheVRlc3RDYXNlLAorICAgICAgICBNb250aFJhbmdlVGVzdENhc2UsCisgICAgICAgIExlYXBkYXlzVGVzdENhc2UsCiAgICAgKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FsbC5weSBiL0xpYi90ZXN0L3Rlc3RfY2FsbC5weQppbmRleCBmZDNlYzNjLi5kMDZjMmM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYWxsLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30uaGFzX2tleSkKIAogICAgIGRlZiB0ZXN0X3ZhcmFyZ3MxKHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB7fS5oYXNfa2V5KDApCiAKICAgICBkZWYgdGVzdF92YXJhcmdzMihzZWxmKToKQEAgLTI1LDEyICsyNSwxMiBAQAogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfdmFyYXJnczFfZXh0KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB7fS5oYXNfa2V5KCooMCwpKQogCiAgICAgZGVmIHRlc3RfdmFyYXJnczJfZXh0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgICAgIHt9Lmhhc19rZXkoKigxLCAyKSkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQppbmRleCBlZWE0MWMxLi43YzI1OTIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC0xLDEwICsxLDEwMSBAQAogIyBSdW4gdGhlIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgKHRlc3RzIGZvciB0aGUgUHl0aG9uL0MgQVBJKTogIGJ5IGRlZm4sCiAjIHRoZXNlIGFyZSBhbGwgZnVuY3Rpb25zIF90ZXN0Y2FwaSBleHBvcnRzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggJ3Rlc3RfJy4KIAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogaW1wb3J0IF90ZXN0Y2FwaQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVGVzdFBlbmRpbmdDYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgcGVuZGluZ2NhbGxzX3N1Ym1pdChzZWxmLCBsLCBuKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICAjdGhpcyBmdW5jdGlvbiBjYW4gYmUgaW50ZXJydXB0ZWQgYnkgdGhyZWFkIHN3aXRjaGluZyBzbyBsZXQncworICAgICAgICAgICAgI3VzZSBhbiBhdG9taWMgb3BlcmF0aW9uCisgICAgICAgICAgICBsLmFwcGVuZChOb25lKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgdGltZS5zbGVlcChyYW5kb20ucmFuZG9tKCkqMC4wMikgIzAuMDEgc2VjcyBvbiBhdmVyYWdlCisgICAgICAgICAgICAjdHJ5IHN1Ym1pdHRpbmcgY2FsbGJhY2sgdW50aWwgc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICNyZWx5IG9uIHJlZ3VsYXIgaW50ZXJydXB0IHRvIGZsdXNoIHF1ZXVlIGlmIHdlIGFyZQorICAgICAgICAgICAgI3Vuc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgaWYgX3Rlc3RjYXBpLl9wZW5kaW5nX3RocmVhZGZ1bmMoY2FsbGJhY2spOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfd2FpdChzZWxmLCBsLCBuLCBjb250ZXh0ID0gTm9uZSk6CisgICAgICAgICNub3csIHN0aWNrIGFyb3VuZCB1bnRpbCBsWzBdIGhhcyBncm93biB0byAxMAorICAgICAgICBjb3VudCA9IDA7CisgICAgICAgIHdoaWxlIGxlbihsKSAhPSBuOgorICAgICAgICAgICAgI3RoaXMgYnVzeSBsb29wIGlzIHdoZXJlIHdlIGV4cGVjdCB0byBiZSBpbnRlcnJ1cHRlZCB0bworICAgICAgICAgICAgI3J1biBvdXIgY2FsbGJhY2tzLiAgTm90ZSB0aGF0IGNhbGxiYWNrcyBhcmUgb25seSBydW4gb24gdGhlCisgICAgICAgICAgICAjbWFpbiB0aHJlYWQKKyAgICAgICAgICAgIGlmIEZhbHNlIGFuZCB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiKCVpKSIlKGxlbihsKSwpLAorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDApOgorICAgICAgICAgICAgICAgIGEgPSBpKmkKKyAgICAgICAgICAgIGlmIGNvbnRleHQgYW5kIG5vdCBjb250ZXh0LmV2ZW50LmlzX3NldCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPCAxMDAwMCwKKyAgICAgICAgICAgICAgICAidGltZW91dCB3YWl0aW5nIGZvciAlaSBjYWxsYmFja3MsIGdvdCAlaSIlKG4sIGxlbihsKSkpCisgICAgICAgIGlmIEZhbHNlIGFuZCB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIoJWkpIiUobGVuKGwpLCkKKworICAgIGRlZiB0ZXN0X3BlbmRpbmdjYWxsc190aHJlYWRlZChzZWxmKToKKyAgICAgICAgI2RvIGV2ZXJ5IGNhbGxiYWNrIG9uIGEgc2VwYXJhdGUgdGhyZWFkCisgICAgICAgIG4gPSAzMiAjdG90YWwgY2FsbGJhY2tzCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICBjbGFzcyBmb28ob2JqZWN0KTpwYXNzCisgICAgICAgIGNvbnRleHQgPSBmb28oKQorICAgICAgICBjb250ZXh0LmwgPSBbXQorICAgICAgICBjb250ZXh0Lm4gPSAyICNzdWJtaXRzIHBlciB0aHJlYWQKKyAgICAgICAgY29udGV4dC5uVGhyZWFkcyA9IG4gLy8gY29udGV4dC5uCisgICAgICAgIGNvbnRleHQubkZpbmlzaGVkID0gMAorICAgICAgICBjb250ZXh0LmxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIGNvbnRleHQuZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGNvbnRleHQublRocmVhZHMpOgorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYucGVuZGluZ2NhbGxzX3RocmVhZCwgYXJncyA9IChjb250ZXh0LCkpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisKKyAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfd2FpdChjb250ZXh0LmwsIG4sIGNvbnRleHQpCisKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuam9pbigpCisKKyAgICBkZWYgcGVuZGluZ2NhbGxzX3RocmVhZChzZWxmLCBjb250ZXh0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGNvbnRleHQubCwgY29udGV4dC5uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2l0aCBjb250ZXh0LmxvY2s6CisgICAgICAgICAgICAgICAgY29udGV4dC5uRmluaXNoZWQgKz0gMQorICAgICAgICAgICAgICAgIG5GaW5pc2hlZCA9IGNvbnRleHQubkZpbmlzaGVkCisgICAgICAgICAgICAgICAgaWYgRmFsc2UgYW5kIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiZmluaXNoZWQgdGhyZWFkczogIiwgbkZpbmlzaGVkCisgICAgICAgICAgICBpZiBuRmluaXNoZWQgPT0gY29udGV4dC5uVGhyZWFkczoKKyAgICAgICAgICAgICAgICBjb250ZXh0LmV2ZW50LnNldCgpCisKKyAgICBkZWYgdGVzdF9wZW5kaW5nY2FsbHNfbm9uX3RocmVhZGVkKHNlbGYpOgorICAgICAgICAjYWdhaW4sIGp1c3QgdXNpbmcgdGhlIG1haW4gdGhyZWFkLCBsaWtlbHkgdGhleSB3aWxsIGFsbCBiZSBkaXNwYXRoY2VkIGF0CisgICAgICAgICNvbmNlLiAgSXQgaXMgb2sgdG8gYXNrIGZvciB0b28gbWFueSwgYmVjYXVzZSB3ZSBsb29wIHVudGlsIHdlIGZpbmQgYSBzbG90LgorICAgICAgICAjdGhlIGxvb3AgY2FuIGJlIGludGVycnVwdGVkIHRvIGRpc3BhdGNoLgorICAgICAgICAjdGhlcmUgYXJlIG9ubHkgMzIgZGlzcGF0Y2ggc2xvdHMsIHNvIHdlIGdvIGZvciB0d2ljZSB0aGF0IQorICAgICAgICBsID0gW10KKyAgICAgICAgbiA9IDY0CisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChsLCBuKQorICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGwsIG4pCisKKwogZGVmIHRlc3RfbWFpbigpOgogCiAgICAgZm9yIG5hbWUgaW4gZGlyKF90ZXN0Y2FwaSk6CkBAIC0zNSwyMCArMTI2LDE1IEBACiAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgXAogICAgICAgICAgICAgICAgICAgIkNvdWxkbid0IGZpbmQgbWFpbiB0aHJlYWQgY29ycmVjdGx5IGluIHRoZSBsaXN0IgogCi0gICAgdHJ5OgotICAgICAgICBfdGVzdGNhcGkuX3Rlc3RfdGhyZWFkX3N0YXRlCi0gICAgICAgIGhhdmVfdGhyZWFkX3N0YXRlID0gVHJ1ZQotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgaGF2ZV90aHJlYWRfc3RhdGUgPSBGYWxzZQotCi0gICAgaWYgaGF2ZV90aHJlYWRfc3RhdGU6CisgICAgaWYgdGhyZWFkaW5nOgogICAgICAgICBpbXBvcnQgdGhyZWFkCiAgICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgIFRlc3RUaHJlYWRTdGF0ZSgpCi0gICAgICAgIGltcG9ydCB0aHJlYWRpbmcKICAgICAgICAgdD10aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1UZXN0VGhyZWFkU3RhdGUpCiAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICB0LmpvaW4oKQogCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGVuZGluZ0NhbGxzKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NkLnB5IGIvTGliL3Rlc3QvdGVzdF9jZC5weQppbmRleCBkYWFkMjIzLi5lZGFhODJiIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2NkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2QucHkKQEAgLTIsOCArMiw5IEBACiAiIiJXaGltcHkgdGVzdCBzY3JpcHQgZm9yIHRoZSBjZCBtb2R1bGUKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKLWltcG9ydCBjZAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorCitjZCA9IGltcG9ydF9tb2R1bGUoJ2NkJykKIAogY2RhdHRycyA9IFsnQkxPQ0tTSVpFJywgJ0NEUk9NJywgJ0RBVEFTSVpFJywgJ0VSUk9SJywgJ05PRElTQycsICdQQVVTRUQnLCAnUExBWUlORycsICdSRUFEWScsCiAgICAgICAgICAgICdTVElMTCcsICdfX2RvY19fJywgJ19fbmFtZV9fJywgJ2F0aW1lJywgJ2F1ZGlvJywgJ2NhdGFsb2cnLCAnY29udHJvbCcsICdjcmVhdGVwYXJzZXInLCAnZXJyb3InLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weQppbmRleCA3ODY1N2RlLi5kNDRhNDE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weQpAQCAtMSwxMCArMSwxMiBAQAogaW1wb3J0IENvbmZpZ1BhcnNlcgogaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IFVzZXJEaWN0CiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKKwogY2xhc3MgU29ydGVkRGljdChVc2VyRGljdC5Vc2VyRGljdCk6CiAgICAgZGVmIGl0ZW1zKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGEuaXRlbXMoKQpAQCAtMjYsMTIgKzI4LDE2IEBACiAgICAgX19pdGVyX18gPSBpdGVya2V5cwogICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOiByZXR1cm4gaXRlcihzZWxmLnZhbHVlcygpKQogCisKIGNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYWxsb3dfbm9fdmFsdWUgPSBGYWxzZQorCiAgICAgZGVmIG5ld2NvbmZpZyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKICAgICAgICAgaWYgZGVmYXVsdHMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcygpCisgICAgICAgICAgICBzZWxmLmNmID0gc2VsZi5jb25maWdfY2xhc3MoYWxsb3dfbm9fdmFsdWU9c2VsZi5hbGxvd19ub192YWx1ZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhkZWZhdWx0cykKKyAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhkZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19ub192YWx1ZT1zZWxmLmFsbG93X25vX3ZhbHVlKQogICAgICAgICByZXR1cm4gc2VsZi5jZgogCiAgICAgZGVmIGZyb21zdHJpbmcoc2VsZiwgc3RyaW5nLCBkZWZhdWx0cz1Ob25lKToKQEAgLTQxLDcgKzQ3LDcgQEAKICAgICAgICAgcmV0dXJuIGNmCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoCisgICAgICAgIGNvbmZpZ19zdHJpbmcgPSAoCiAgICAgICAgICAgICAiW0ZvbyBCYXJdXG4iCiAgICAgICAgICAgICAiZm9vPWJhclxuIgogICAgICAgICAgICAgIltTcGFjZXkgQmFyXVxuIgpAQCAtNjEsMTcgKzY3LDI4IEBACiAgICAgICAgICAgICAia2V5IHdpdGggc3BhY2VzIDogdmFsdWVcbiIKICAgICAgICAgICAgICJhbm90aGVyIHdpdGggc3BhY2VzID0gc3BsYXQhXG4iCiAgICAgICAgICAgICApCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBjb25maWdfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICAgICAiW05vVmFsdWVdXG4iCisgICAgICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGNvbmZpZ19zdHJpbmcpCiAgICAgICAgIEwgPSBjZi5zZWN0aW9ucygpCiAgICAgICAgIEwuc29ydCgpCisgICAgICAgIEUgPSBbcidDb21tZW50ZWQgQmFyJywKKyAgICAgICAgICAgICByJ0ZvbyBCYXInLAorICAgICAgICAgICAgIHInSW50ZXJuYXRpb25hbGl6ZWQgU3R1ZmYnLAorICAgICAgICAgICAgIHInTG9uZyBMaW5lJywKKyAgICAgICAgICAgICByJ1NlY3Rpb25cd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzWycgJ1x0JywKKyAgICAgICAgICAgICByJ1NwYWNlcycsCisgICAgICAgICAgICAgcidTcGFjZXkgQmFyJywKKyAgICAgICAgICAgICBdCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBFLmFwcGVuZChyJ05vVmFsdWUnKQorICAgICAgICBFLnNvcnQoKQogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoTCwgW3InQ29tbWVudGVkIEJhcicsCi0gICAgICAgICAgICAgICByJ0ZvbyBCYXInLAotICAgICAgICAgICAgICAgcidJbnRlcm5hdGlvbmFsaXplZCBTdHVmZicsCi0gICAgICAgICAgICAgICByJ0xvbmcgTGluZScsCi0gICAgICAgICAgICAgICByJ1NlY3Rpb25cd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzWycgJ1x0JywKLSAgICAgICAgICAgICAgIHInU3BhY2VzJywKLSAgICAgICAgICAgICAgIHInU3BhY2V5IEJhcicsCi0gICAgICAgICAgICAgICBdKQorICAgICAgICBlcShMLCBFKQogCiAgICAgICAgICMgVGhlIHVzZSBvZiBzcGFjZXMgaW4gdGhlIHNlY3Rpb24gbmFtZXMgc2VydmVzIGFzIGEKICAgICAgICAgIyByZWdyZXNzaW9uIHRlc3QgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjNTgzMjQ4OgpAQCAtODEsMTcgKzk4LDE5IEBACiAgICAgICAgIGVxKGNmLmdldCgnQ29tbWVudGVkIEJhcicsICdmb28nKSwgJ2JhcicpCiAgICAgICAgIGVxKGNmLmdldCgnU3BhY2VzJywgJ2tleSB3aXRoIHNwYWNlcycpLCAndmFsdWUnKQogICAgICAgICBlcShjZi5nZXQoJ1NwYWNlcycsICdhbm90aGVyIHdpdGggc3BhY2VzJyksICdzcGxhdCEnKQorICAgICAgICBpZiBzZWxmLmFsbG93X25vX3ZhbHVlOgorICAgICAgICAgICAgZXEoY2YuZ2V0KCdOb1ZhbHVlJywgJ29wdGlvbi13aXRob3V0LXZhbHVlJyksIE5vbmUpCiAKLSAgICAgICAgc2VsZi5mYWlsSWYoJ19fbmFtZV9fJyBpbiBjZi5vcHRpb25zKCJGb28gQmFyIiksCi0gICAgICAgICAgICAgICAgICAgICdfX25hbWVfXyAib3B0aW9uIiBzaG91bGQgbm90IGJlIGV4cG9zZWQgYnkgdGhlIEFQSSEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX25hbWVfXycsIGNmLm9wdGlvbnMoIkZvbyBCYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18gIm9wdGlvbiIgc2hvdWxkIG5vdCBiZSBleHBvc2VkIGJ5IHRoZSBBUEkhJykKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmlnaHQgdGhpbmdzIGhhcHBlbiBmb3IgcmVtb3ZlX29wdGlvbigpOwogICAgICAgICAjIGFkZGVkIHRvIGluY2x1ZGUgY2hlY2sgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjMTIzMzI0OgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLnJlbW92ZV9vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZXBvcnQgZXhpc3RlbmNlIG9mIG9wdGlvbiIpCi0gICAgICAgIHNlbGYuZmFpbElmKGNmLmhhc19vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuaGFzX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKICAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9vcHRpb24oKSBmYWlsZWQgdG8gcmVtb3ZlIG9wdGlvbiIpCi0gICAgICAgIHNlbGYuZmFpbElmKGNmLnJlbW92ZV9vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKICAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9vcHRpb24oKSBmYWlsZWQgdG8gcmVwb3J0IG5vbi1leGlzdGVuY2Ugb2Ygb3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAiIHRoYXQgd2FzIHJlbW92ZWQiKQogCkBAIC0xMTMsMTAgKzEzMiwxMCBAQAogICAgICAgICBlcShjZi5vcHRpb25zKCJhIiksIFsiYiJdKQogICAgICAgICBlcShjZi5nZXQoImEiLCAiYiIpLCAidmFsdWUiLAogICAgICAgICAgICAiY291bGQgbm90IGxvY2F0ZSBvcHRpb24sIGV4cGVjdGluZyBjYXNlLWluc2Vuc2l0aXZlIG9wdGlvbiBuYW1lcyIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjZi5oYXNfb3B0aW9uKCJhIiwgImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmhhc19vcHRpb24oImEiLCAiYiIpKQogICAgICAgICBjZi5zZXQoIkEiLCAiQS1CIiwgIkEtQiB2YWx1ZSIpCiAgICAgICAgIGZvciBvcHQgaW4gKCJhLWIiLCAiQS1iIiwgImEtQiIsICJBLUIiKToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICBjZi5oYXNfb3B0aW9uKCJBIiwgb3B0KSwKICAgICAgICAgICAgICAgICAiaGFzX29wdGlvbigpIHJldHVybmVkIGZhbHNlIGZvciBvcHRpb24gd2hpY2ggc2hvdWxkIGV4aXN0IikKICAgICAgICAgZXEoY2Yub3B0aW9ucygiQSIpLCBbImEtYiJdKQpAQCAtMTMzLDcgKzE1Miw3IEBACiAgICAgICAgICMgU0YgYnVnICM1NjE4MjI6CiAgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdGlvbl1cbm5la2V5PW5ldmFsdWVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzPXsia2V5IjoidmFsdWUifSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNmLmhhc19vcHRpb24oInNlY3Rpb24iLCAiS2V5IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5oYXNfb3B0aW9uKCJzZWN0aW9uIiwgIktleSIpKQogCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CkBAIC0xNTMsOCArMTcyLDYgQEAKICAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuICBleHRyYS1zcGFjZXM9IHNwbGF0XG4iKQogICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG5vcHRpb24td2l0aG91dC12YWx1ZVxuIikKLSAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuOnZhbHVlLXdpdGhvdXQtb3B0aW9uLW5hbWVcbiIpCiAgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbj12YWx1ZS13aXRob3V0LW9wdGlvbi1uYW1lXG4iKQpAQCAtMTY5LDggKzE4Niw5IEBACiAgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLnNlY3Rpb25zKCksIFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGRlZmluZWQgc2VjdGlvbnMiKQotICAgICAgICBzZWxmLmZhaWxJZihjZi5oYXNfc2VjdGlvbigiRm9vIiksCi0gICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGFja25vd2xlZGdlZCBzZWN0aW9ucyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuaGFzX3NlY3Rpb24oIkZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGFja25vd2xlZGdlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY3Rpb25zIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjZi5vcHRpb25zLCAiRm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yLApAQCAtMjA4LDggKzIyNiw4IEBACiAgICAgICAgICAgICAiRTU9RkFMU0UgQU5EIE1PUkUiCiAgICAgICAgICAgICApCiAgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIDUpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ3QlZCcgJSB4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ2YlZCcgJSB4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5nZXRib29sZWFuKCdCT09MVEVTVCcsICd0JWQnICUgeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ2YlZCcgJSB4KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZi5nZXRib29sZWFuLCAnQk9PTFRFU1QnLCAnZSVkJyAlIHgpCiAKQEAgLTIyMCwxOCArMjM4LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uLCAiRm9vIikKIAogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgotICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKKyAgICAgICAgY29uZmlnX3N0cmluZyA9ICgKICAgICAgICAgICAgICJbTG9uZyBMaW5lXVxuIgogICAgICAgICAgICAgImZvbzogdGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG4iCiAgICAgICAgICAgICAiICAgbGlrZXMgaXQuXG4iCiAgICAgICAgICAgICAiW0RFRkFVTFRdXG4iCiAgICAgICAgICAgICAiZm9vOiBhbm90aGVyIHZlcnlcbiIKLSAgICAgICAgICAgICIgbG9uZyBsaW5lIgorICAgICAgICAgICAgIiBsb25nIGxpbmVcbiIKICAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGNvbmZpZ19zdHJpbmcgKz0gKAorICAgICAgICAgICAgIltWYWx1ZWxlc3NdXG4iCisgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIKKyAgICAgICAgICAgICkKKworICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZyhjb25maWdfc3RyaW5nKQogICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIGNmLndyaXRlKG91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICBleHBlY3Rfc3RyaW5nID0gKAogICAgICAgICAgICAgIltERUZBVUxUXVxuIgogICAgICAgICAgICAgImZvbyA9IGFub3RoZXIgdmVyeVxuIgogICAgICAgICAgICAgIlx0bG9uZyBsaW5lXG4iCkBAIC0yNDEsNiArMjY1LDEzIEBACiAgICAgICAgICAgICAiXHRsaWtlcyBpdC5cbiIKICAgICAgICAgICAgICJcbiIKICAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGV4cGVjdF9zdHJpbmcgKz0gKAorICAgICAgICAgICAgICAgICJbVmFsdWVsZXNzXVxuIgorICAgICAgICAgICAgICAgICJvcHRpb24td2l0aG91dC12YWx1ZVxuIgorICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdF9zdHJpbmcpCiAKICAgICBkZWYgdGVzdF9zZXRfc3RyaW5nX3R5cGVzKHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3RdXG4iCkBAIC0zMjYsOCArMzU3LDE0IEBACiAKIGNsYXNzIENvbmZpZ1BhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CiAgICAgY29uZmlnX2NsYXNzID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIGFsbG93X25vX3ZhbHVlID0gVHJ1ZQogCiAgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgcmF3dmFsID0geworICAgICAgICAgICAgQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcjogKCJzb21ldGhpbmcgJSh3aXRoMTEpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIiksCisgICAgICAgICAgICBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcjogIiUod2l0aDEpcyIsCisgICAgICAgIH0KICAgICAgICAgY2YgPSBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJnZXRuYW1lIiksICJGb28iKQpAQCAtMzM5LDcgKzM3Niw3IEBACiAgICAgICAgIHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvciwgIkZvbyIsICJiYXIxMSIpCiAKICAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uX21pc3NpbmdfdmFsdWUoc2VsZik6Ci0gICAgICAgIGNmID0gc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQorICAgICAgICBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCiAgICAgICAgIGUgPSBzZWxmLmdldF9lcnJvcihDb25maWdQYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVycG9sYXRpb24gRXJyb3IiLCAibmFtZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5yZWZlcmVuY2UsICJyZWZlcmVuY2UiKQpAQCAtMzYxLDYgKzM5OCw3IEBACiAgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdkaWN0JywgeydwaSc6IDMuMTQxNTksICclKCc6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclKGxpc3QpJzogJyUobGlzdCknfSkKICAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ3N0cmluZ193aXRoX2ludGVycG9sYXRpb24nLCAnJShsaXN0KXMnKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnbm8tdmFsdWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdpbnQnLCByYXc9VHJ1ZSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsICdpbnQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdsaXN0JywgcmF3PVRydWUpLApAQCAtMzczLDcgKzQxMSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc9VHJ1ZSksICclKGxpc3QpcycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmdldCwgJ25vbi1zdHJpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nX3dpdGhfaW50ZXJwb2xhdGlvbicsIHJhdz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnbm8tdmFsdWUnKSwgTm9uZSkKIAorY2xhc3MgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyCisgICAgd29uZGVyZnVsX3NwYW0gPSAoIkknbSBoYXZpbmcgc3BhbSBzcGFtIHNwYW0gc3BhbSAiCisgICAgICAgICAgICAgICAgICAgICAgInNwYW0gc3BhbSBzcGFtIGJlYWtlZCBiZWFucyBzcGFtICIKKyAgICAgICAgICAgICAgICAgICAgICAic3BhbSBzcGFtIGFuZCBzcGFtISIpLnJlcGxhY2UoJyAnLCAnXHRcbicpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcyA9ICdzZWN0aW9ue30nLmZvcm1hdChpKQorICAgICAgICAgICAgY2YuYWRkX3NlY3Rpb24ocykKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBjZi5zZXQocywgJ2xvdmVseV9zcGFte30nLmZvcm1hdChqKSwgc2VsZi53b25kZXJmdWxfc3BhbSkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGNmLndyaXRlKGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZG9taW5hdGluZ19tdWx0aWxpbmVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIHdlJ3JlIHJlYWRpbmcgZnJvbSBmaWxlIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSBjaGFuZ2VkCisgICAgICAgICMgZHVyaW5nIHBlcmZvcm1hbmNlIHVwZGF0ZXMgaW4gUHl0aG9uIDMuMgorICAgICAgICBjZl9mcm9tX2ZpbGUgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgY2ZfZnJvbV9maWxlLnJlYWRmcChmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmX2Zyb21fZmlsZS5nZXQoJ3NlY3Rpb244JywgJ2xvdmVseV9zcGFtNCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud29uZGVyZnVsX3NwYW0ucmVwbGFjZSgnXHRcbicsICdcbicpKQogCiBjbGFzcyBSYXdDb25maWdQYXJzZXJUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgogICAgIGNvbmZpZ19jbGFzcyA9IENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIKQEAgLTQ1OSw2ICs1MjUsMzggQEAKICAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCAiREVGQVVMVCIpCiAKKworY2xhc3MgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlTm9WYWx1ZShTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGFsbG93X25vX3ZhbHVlID0gVHJ1ZQorCisKK2NsYXNzIElzc3VlNzAwNVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IG91dHB1dCB3aGVuIE5vbmUgaXMgc2V0KCkgYXMgYSB2YWx1ZSBhbmQgYWxsb3dfbm9fdmFsdWUgPT0gRmFsc2UuCisKKyAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzAwNQorCisgICAgIiIiCisKKyAgICBleHBlY3RlZF9vdXRwdXQgPSAiW3NlY3Rpb25dXG5vcHRpb24gPSBOb25lXG5cbiIKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIGNvbmZpZ19jbGFzcyk6CisgICAgICAgICMgVGhpcyBpcyB0aGUgZGVmYXVsdCwgYnV0IHRoYXQncyB0aGUgcG9pbnQuCisgICAgICAgIGNwID0gY29uZmlnX2NsYXNzKGFsbG93X25vX3ZhbHVlPUZhbHNlKQorICAgICAgICBjcC5hZGRfc2VjdGlvbigic2VjdGlvbiIpCisgICAgICAgIGNwLnNldCgic2VjdGlvbiIsICJvcHRpb24iLCBOb25lKQorICAgICAgICBzaW8gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNwLndyaXRlKHNpbykKKyAgICAgICAgcmV0dXJuIHNpby5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9ub25lX2FzX3ZhbHVlX3N0cmluZ2lmaWVkKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLnByZXBhcmUoQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIHNlbGYuZXhwZWN0ZWRfb3V0cHV0KQorCisgICAgZGVmIHRlc3Rfbm9uZV9hc192YWx1ZV9zdHJpbmdpZmllZF9yYXcoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYucHJlcGFyZShDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZF9vdXRwdXQpCisKKwogY2xhc3MgU29ydGVkVGVzdENhc2UoUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UpOgogICAgIGRlZiBuZXdjb25maWcoc2VsZiwgZGVmYXVsdHM9Tm9uZSk6CiAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcyhkZWZhdWx0cz1kZWZhdWx0cywgZGljdF90eXBlPVNvcnRlZERpY3QpCkBAIC00NzQsMjIgKzU3MiwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIms9dlxuIikKICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICBzZWxmLmNmLndyaXRlKG91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3V0cHV0LmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJbYV1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImsgPSB2XG5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIltiXVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAibzEgPSA0XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJvMiA9IDNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm8zID0gMlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAibzQgPSAxXG5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlthXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJrID0gdlxuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIltiXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvMSA9IDRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibzIgPSAzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm8zID0gMlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvNCA9IDFcblxuIikKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2UsCisgICAgICAgIE11bHRpbGluZVZhbHVlc1Rlc3RDYXNlLAogICAgICAgICBSYXdDb25maWdQYXJzZXJUZXN0Q2FzZSwKICAgICAgICAgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlLAotICAgICAgICBTb3J0ZWRUZXN0Q2FzZQotICAgICkKKyAgICAgICAgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlTm9WYWx1ZSwKKyAgICAgICAgU29ydGVkVGVzdENhc2UsCisgICAgICAgIElzc3VlNzAwNVRlc3RDYXNlLAorICAgICAgICApCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQppbmRleCBiNzIzZDc0Li5lMjgyYTUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NnaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQpAQCAtMSwxMCArMSw5IEBACi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzLCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogaW1wb3J0IGNnaQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAogY2xhc3MgSGFja2VkU3lzTW9kdWxlOgogICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdCB3aWxsIGhhdmUgcmVhbCB2YWx1ZXMgaW4gc3lzLmFyZ3YsIHdoaWNoCkBAIC0xMTUsNyArMTE0LDcgQEAKIAogICAgIHJlc3VsdCA9IHt9CiAgICAgZm9yIGssIHYgaW4gZGljdChmb3JtKS5pdGVtcygpOgotICAgICAgICByZXN1bHRba10gPSB0eXBlKHYpIGlzIGxpc3QgYW5kIGZvcm0uZ2V0bGlzdChrKSBvciB2LnZhbHVlCisgICAgICAgIHJlc3VsdFtrXSA9IGlzaW5zdGFuY2UodiwgbGlzdCkgYW5kIGZvcm0uZ2V0bGlzdChrKSBvciB2LnZhbHVlCiAKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTEzMywyMyArMTMyLDIzIEBACiAgICAgICAgICAgICBmY2QgPSBjZ2kuRm9ybUNvbnRlbnREaWN0KGVudikKICAgICAgICAgICAgIHNkID0gY2dpLlN2Rm9ybUNvbnRlbnREaWN0KGVudikKICAgICAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShlbnZpcm9uPWVudikKLSAgICAgICAgICAgIGlmIHR5cGUoZXhwZWN0KSA9PSB0eXBlKHt9KToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0LCBkaWN0KToKICAgICAgICAgICAgICAgICAjIHRlc3QgZGljdCBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3QpLCBsZW4oZmNkKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChleHBlY3Qua2V5cygpKSwgc29ydGVkKGZjZC5rZXlzKCkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVjdC52YWx1ZXMoKSksIHNvcnRlZChmY2QudmFsdWVzKCkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVjdC5pdGVtcygpKSwgc29ydGVkKGZjZC5pdGVtcygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0LmtleXMoKSwgZmNkLmtleXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0LnZhbHVlcygpLCBmY2QudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGV4cGVjdC5pdGVtcygpLCBmY2QuaXRlbXMoKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjZC5nZXQoIm5vbmV4aXN0ZW50IGZpZWxkIiwgImRlZmF1bHQiKSwgImRlZmF1bHQiKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNkKSwgbGVuKGZzKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZC5rZXlzKCkpLCBzb3J0ZWQoZnMua2V5cygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2Qua2V5cygpLCBmcy5rZXlzKCkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5nZXR2YWx1ZSgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAgICAgICAgICAgICAgICAgIyB0ZXN0IGluZGl2aWR1YWwgZmllbGRzCiAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBleHBlY3Qua2V5cygpOgogICAgICAgICAgICAgICAgICAgICBleHBlY3RfdmFsID0gZXhwZWN0W2tleV0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGZjZC5oYXNfa2V5KGtleSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZjZFtrZXldKSwgc29ydGVkKGV4cGVjdFtrZXldKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjZC5oYXNfa2V5KGtleSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmY2Rba2V5XSwgZXhwZWN0W2tleV0pCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNkLmdldChrZXksICJkZWZhdWx0IiksIGZjZFtrZXldKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZnMuaGFzX2tleShrZXkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMuaGFzX2tleShrZXkpKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0X3ZhbCkgPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3ZhbHVlID0gMAogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTU3LDE4ICsxNTYsMTggQEAKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc2Rba2V5XQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKHNpbmdsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2luZ2xlX3ZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5nZXR2YWx1ZShrZXkpLCBleHBlY3RfdmFsKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHNpbmdsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaW5nbGVfdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0X3ZhbFswXSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZ2V0dmFsdWUoa2V5KSwgZXhwZWN0X3ZhbFswXSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2QuZ2V0bGlzdChrZXkpKSwgc29ydGVkKGV4cGVjdF92YWwpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoc2QuZ2V0bGlzdChrZXkpLCBleHBlY3RfdmFsKQogICAgICAgICAgICAgICAgICAgICBpZiBzaW5nbGVfdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZC52YWx1ZXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VsdHMoc29ydGVkKGV4cGVjdC52YWx1ZXMoKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2QuaXRlbXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X3NlY29uZF9lbHRzKHNvcnRlZChleHBlY3QuaXRlbXMoKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNkLnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZWx0cyhleHBlY3QudmFsdWVzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNkLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9zZWNvbmRfZWx0cyhleHBlY3QuaXRlbXMoKSkpCiAKICAgICBkZWYgdGVzdF93ZWlyZF9mb3JtY29udGVudGRpY3Qoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgd2VpcmQgRm9ybUNvbnRlbnREaWN0IGNsYXNzZXMKQEAgLTE3OSw4ICsxNzgsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tdLCB2KQogICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdFtrXSwgdikKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZXhwZWN0LnZhbHVlcygpKSwgc29ydGVkKGQudmFsdWVzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0LnZhbHVlcygpLCBkLnZhbHVlcygpKQogCiAgICAgZGVmIHRlc3RfbG9nKHNlbGYpOgogICAgICAgICBjZ2kubG9nKCJUZXN0aW5nIikKQEAgLTIyNyw3ICsyMjUsNyBAQAogICAgICAgICAjIGlmIHdlJ3JlIG5vdCBjaHVua2luZyBwcm9wZXJseSwgcmVhZGxpbmUgaXMgb25seSBjYWxsZWQgdHdpY2UKICAgICAgICAgIyAoYnkgcmVhZF9iaW5hcnkpOyBpZiB3ZSBhcmUgY2h1bmtpbmcgcHJvcGVybHksIGl0IHdpbGwgYmUgY2FsbGVkIDUgdGltZXMKICAgICAgICAgIyBhcyBsb25nIGFzIHRoZSBjaHVua3NpemUgaXMgMSA8PCAxNi4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGYubnVtY2FsbHMgPiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5udW1jYWxscyA+IDIpCiAKICAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfbXVsdGlwYXJ0KHNlbGYpOgogICAgICAgICAjVGVzdCBiYXNpYyBGaWVsZFN0b3JhZ2UgbXVsdGlwYXJ0IHBhcnNpbmcKQEAgLTI1Myw3ICsyNTEsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQtLQogIiIiCiAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcD1TdHJpbmdJTyhwb3N0ZGF0YSksIGVudmlyb249ZW52KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZnMubGlzdCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZzLmxpc3QpLCA0KQogICAgICAgICBleHBlY3QgPSBbeyduYW1lJzonaWQnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6JzEyMzQnfSwKICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J3RpdGxlJywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicnfSwKICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J2ZpbGUnLCAnZmlsZW5hbWUnOid0ZXN0LnR4dCcsJ3ZhbHVlJzonVGVzdGluZyAxMjMuXG4nfSwKQEAgLTI2MSw3ICsyNTksNyBAQAogICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZnMubGlzdCkpOgogICAgICAgICAgICAgZm9yIGssIGV4cCBpbiBleHBlY3RbeF0uaXRlbXMoKToKICAgICAgICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZzLmxpc3RbeF0sIGspCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ290LCBleHApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKIAogICAgIF9xc19yZXN1bHQgPSB7CiAgICAgICAgICdrZXkxJzogJ3ZhbHVlMScsCkBAIC0zNDEsMTQgKzMzOSwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdikKIAogICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcGFyc2VfcXMoc2VsZik6Ci0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKKyAgICAgICAgIyB0aGlzIGZ1bmMgaXMgbW92ZWQgdG8gdXJscGFyc2UsIHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnY2dpLnBhcnNlX3FzIGlzIGRlcHJlY2F0ZWQsIHVzZSB1cmxwYXJzZS4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJzZV9xcyBpbnN0ZWFkJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7J2EnOiBbJ0ExJ10sICdCJzogWydCMyddLCAnYic6IFsnQjInXX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNnaS5wYXJzZV9xcygnYT1BMSZiPUIyJkI9QjMnKSkKIAogICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcGFyc2VfcXNsKHNlbGYpOgotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAjIHRoaXMgZnVuYyBpcyBtb3ZlZCB0byB1cmxwYXJzZSwgdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrCisgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ2NnaS5wYXJzZV9xc2wgaXMgZGVwcmVjYXRlZCwgdXNlIHVybHBhcnNlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnNlX3FzbCBpbnN0ZWFkJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdhJywgJ0ExJyksICgnYicsICdCMicpLCAoJ0InLCAnQjMnKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNnaS5wYXJzZV9xc2woJ2E9QTEmYj1CMiZCPUIzJykpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2hhcm1hcGNvZGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkKaW5kZXggMjg2Njk4NC4uZDk4NDA1OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkKQEAgLTI3LDI0ICsyNywyNCBAQAogCiBjbGFzcyBDaGFybWFwQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcngoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ2FiYycsIGNvZGVjbmFtZSksIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgneGRlZicsIGNvZGVjbmFtZSksIHUnYWJjZGVmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnZGVmeCcsIGNvZGVjbmFtZSksIHUnZGVmYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pY29kZSgnZHhmJywgY29kZWNuYW1lKSwgdSdkYWJjZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ2R4ZngnLCBjb2RlY25hbWUpLCB1J2RhYmNmYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdhYmMnLCBjb2RlY25hbWUpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgneGRlZicsIGNvZGVjbmFtZSksIHUnYWJjZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkZWZ4JywgY29kZWNuYW1lKSwgdSdkZWZhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R4ZicsIGNvZGVjbmFtZSksIHUnZGFiY2YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R4ZngnLCBjb2RlY25hbWUpLCB1J2RhYmNmYWJjJykKIAogICAgIGRlZiB0ZXN0X2VuY29kZXgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUnYWJjJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUneGRlZicuZW5jb2RlKGNvZGVjbmFtZSksICdhYmNkZWYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1J2RlZngnLmVuY29kZShjb2RlY25hbWUpLCAnZGVmYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSdkeGYnLmVuY29kZShjb2RlY25hbWUpLCAnZGFiY2YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1J2R4ZngnLmVuY29kZShjb2RlY25hbWUpLCAnZGFiY2ZhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd4ZGVmJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiY2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdkZWZ4Jy5lbmNvZGUoY29kZWNuYW1lKSwgJ2RlZmFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdkeGYnLmVuY29kZShjb2RlY25hbWUpLCAnZGFiY2YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnZHhmeCcuZW5jb2RlKGNvZGVjbmFtZSksICdkYWJjZmFiYycpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcnkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ3lkZWYnLCBjb2RlY25hbWUpLCB1J2RlZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ2RlZnknLCBjb2RlY25hbWUpLCB1J2RlZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoJ2R5ZicsIGNvZGVjbmFtZSksIHUnZGYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCdkeWZ5JywgY29kZWNuYW1lKSwgdSdkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgneWRlZicsIGNvZGVjbmFtZSksIHUnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkZWZ5JywgY29kZWNuYW1lKSwgdSdkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R5ZicsIGNvZGVjbmFtZSksIHUnZGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R5ZnknLCBjb2RlY25hbWUpLCB1J2RmJykKIAogICAgIGRlZiB0ZXN0X21hcHRvdW5kZWZpbmVkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICdhYmNcMDAxJywgY29kZWNuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbC5weSBiL0xpYi90ZXN0L3Rlc3RfY2wucHkKaW5kZXggYTI3MjhiNy4uNTAxMDJlOSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NsLnB5CkBAIC0yLDggKzIsOSBAQAogIiIiV2hpbXB5IHRlc3Qgc2NyaXB0IGZvciB0aGUgY2wgbW9kdWxlCiAgICBSb2dlciBFLiBNYXNzZQogIiIiCi1pbXBvcnQgY2wKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKKworY2wgPSBpbXBvcnRfbW9kdWxlKCdjbCcpCiAKIGNsYXR0cnMgPSBbJ0FEREVEX0FMR09SSVRITV9FUlJPUicsICdBTEFXJywgJ0FMR09SSVRITV9JRCcsCiAnQUxHT1JJVEhNX1ZFUlNJT04nLCAnQVVESU8nLCAnQVdBUkVfRVJST1InLCAnQVdBUkVfTVBFR19BVURJTycsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQppbmRleCBjMmQzYzU0Li4wZjI1MTAxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKQEAgLTQ3NSw3ICs0NzUsNyBAQAogICAgICAgICBkZWwgdGVzdG1lCiAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoWyJjcmFiIHBlb3BsZSwgY3JhYiBwZW9wbGUiXSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImNyYWIgcGVvcGxlLCBjcmFiIHBlb3BsZSJdLCB4KQogCiAgICAgZGVmIHRlc3RCYWRUeXBlUmV0dXJuZWQoc2VsZik6CiAgICAgICAgICMgcmV0dXJuIHZhbHVlcyBvZiBzb21lIG1ldGhvZCBhcmUgdHlwZS1jaGVja2VkCkBAIC01MDcsMTQgKzUwNywxNCBAQAogCiAgICAgICAgIGNhbGxMc3RbOl0gPSBbXQogICAgICAgICBhc19pbnQgPSBpbnQobWl4SW50QW5kTG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHlwZShhc19pbnQpLCBsb25nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhc19pbnQsIDQyTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFzX2ludCksIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfaW50LCA0MkwpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19faW50X18nLCAobWl4SW50QW5kTG9uZywpKV0pCiAKICAgICAgICAgY2FsbExzdFs6XSA9IFtdCiAgICAgICAgIGFzX2xvbmcgPSBsb25nKG1peEludEFuZExvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR5cGUoYXNfbG9uZyksIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXNfbG9uZywgNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhc19sb25nKSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19sb25nLCA2NCkKICAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19sb25nX18nLCAobWl4SW50QW5kTG9uZywpKV0pCiAKICAgICBkZWYgdGVzdEhhc2hTdHVmZihzZWxmKToKQEAgLTU5OSwyNCArNTk5LDI0IEBACiAKICAgICAgICAgYTEgPSBBKDEpCiAgICAgICAgIGEyID0gQSgyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhMS5mLCBhMS5mKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhhMS5mLCBhMi5mKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhhMS5mLCBhMS5nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhMS5mLCBBKDEpLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goYTEuZiksIGhhc2goYTEuZikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goYTEuZiksIGhhc2goQSgxKS5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMS5mLCBhMS5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGExLmYsIGEyLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYTEuZiwgYTEuZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMS5mLCBBKDEpLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhMS5mKSwgaGFzaChhMS5mKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGExLmYpLCBoYXNoKEEoMSkuZikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoQS5mLCBhMS5mKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhBLmYsIEEuZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoQi5mLCBBLmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goQi5mKSwgaGFzaChBLmYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEEuZiwgYTEuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChBLmYsIEEuZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCLmYsIEEuZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKEIuZiksIGhhc2goQS5mKSkKIAogICAgICAgICAjIHRoZSBmb2xsb3dpbmcgdHJpZ2dlcnMgYSBTeXN0ZW1FcnJvciBpbiAyLjQKICAgICAgICAgYSA9IEEoaGFzaChBLmYuaW1fZnVuYyleKC0xKSkKICAgICAgICAgaGFzaChhLmYpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCIuK19fKGdldHxzZXR8ZGVsKXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCiAgICAgICAgICAgICAoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKICAgICAgICAgICAgICgiPD4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBjZGExNjk1Li44YjVjNGJmCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQpAQCAtMSw3ICsxLDYgQEAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogZnJvbSB0ZXN0LnRlc3RfbWF0aCBpbXBvcnQgcGFyc2VfdGVzdGZpbGUsIHRlc3RfZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MsIHN5cwogaW1wb3J0IGNtYXRoLCBtYXRoCiBmcm9tIGNtYXRoIGltcG9ydCBwaGFzZSwgcG9sYXIsIHJlY3QsIHBpCiAKQEAgLTQ2LDM3ICs0NSw2IEBACiAgICAgICAgIChJTkYsIE5BTikKICAgICAgICAgXV0KIAotZGVmIGFsbW9zdEVxdWFsRihhLCBiLCByZWxfZXJyPTJlLTE1LCBhYnNfZXJyID0gNWUtMzIzKToKLSAgICAiIiJEZXRlcm1pbmUgd2hldGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluCi0gICAgYSAoc21hbGwpIHJvdW5kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciByZWxfZXJyIGFuZAotICAgIGFic19lcnIgYXJlIGNob3NlbiB0byBiZSBzdWl0YWJsZSBmb3IgcGxhdGZvcm1zIHdoZXJlIGEgZmxvYXQgaXMKLSAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KLSAgICA5IGFuZCAxOSB1bHBzLiIiIgotCi0gICAgIyBzcGVjaWFsIHZhbHVlcyB0ZXN0aW5nCi0gICAgaWYgbWF0aC5pc25hbihhKToKLSAgICAgICAgcmV0dXJuIG1hdGguaXNuYW4oYikKLSAgICBpZiBtYXRoLmlzaW5mKGEpOgotICAgICAgICByZXR1cm4gYSA9PSBiCi0KLSAgICAjIGlmIGJvdGggYSBhbmQgYiBhcmUgemVybywgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgdGhlIHNhbWUgc2lnbgotICAgICMgKGluIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgaXQgd291bGQgYmUgbGVnaXRpbWF0ZSBmb3IgYQotICAgICMgYW5kIGIgdG8gaGF2ZSBvcHBvc2l0ZSBzaWduczsgaW4gcHJhY3RpY2UgdGhlc2UgaGFyZGx5IGV2ZXIKLSAgICAjIG9jY3VyKS4KLSAgICBpZiBub3QgYSBhbmQgbm90IGI6Ci0gICAgICAgIHJldHVybiBtYXRoLmNvcHlzaWduKDEuLCBhKSA9PSBtYXRoLmNvcHlzaWduKDEuLCBiKQotCi0gICAgIyBpZiBhLWIgb3ZlcmZsb3dzLCBvciBiIGlzIGluZmluaXRlLCByZXR1cm4gRmFsc2UuICBBZ2FpbiwgaW4KLSAgICAjIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgYSBpcyB3aXRoaW4gYSBmZXcgdWxwcyBvZiB0aGUKLSAgICAjIG1heCByZXByZXNlbnRhYmxlIGZsb2F0LCBhbmQgdGhlbiBiIGNvdWxkIGxlZ2l0aW1hdGVseSBiZQotICAgICMgaW5maW5pdGUuICBJbiBwcmFjdGljZSB0aGVzZSBleGFtcGxlcyBhcmUgcmFyZS4KLSAgICB0cnk6Ci0gICAgICAgIGFic29sdXRlX2Vycm9yID0gYWJzKGItYSkKLSAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGFic29sdXRlX2Vycm9yIDw9IG1heChhYnNfZXJyLCByZWxfZXJyICogYWJzKGEpKQotCiBjbGFzcyBDTWF0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBpbiBjbWF0aAogICAgIHRlc3RfZnVuY3Rpb25zID0gW2dldGF0dHIoY21hdGgsIGZuYW1lKSBmb3IgZm5hbWUgaW4gWwpAQCAtOTMsNDcgKzYxLDYzIEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3RfdmFsdWVzLmNsb3NlKCkKIAotICAgIGRlZiByQXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYSwgYiwgcmVsX2VyciA9IDJlLTE1LCBhYnNfZXJyID0gNWUtMzIzKToKLSAgICAgICAgIiIiQ2hlY2sgdGhhdCB0d28gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgYWxtb3N0IGVxdWFsLiIiIgorICAgIGRlZiByQXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYSwgYiwgcmVsX2VyciA9IDJlLTE1LCBhYnNfZXJyID0gNWUtMzIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgbm90IGFsbW9zdCBlcXVhbC4KKworICAgICAgICBEZXRlcm1pbmUgd2hldGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluCisgICAgICAgIGEgKHNtYWxsKSByb3VuZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcmVsX2VyciBhbmQKKyAgICAgICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcworICAgICAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KKyAgICAgICAgOSBhbmQgMTkgdWxwcy4KKyAgICAgICAgIiIiCiAKICAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyB0ZXN0aW5nCiAgICAgICAgIGlmIG1hdGguaXNuYW4oYSk6CiAgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKGIpOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBzaG91bGQgYmUgbmFuIiAlIHJlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwobXNnIG9yICd7IXJ9IHNob3VsZCBiZSBuYW4nLmZvcm1hdChiKSkKIAogICAgICAgICBpZiBtYXRoLmlzaW5mKGEpOgogICAgICAgICAgICAgaWYgYSA9PSBiOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5mYWlsKCJmaW5pdGUgcmVzdWx0IHdoZXJlIGluZmluaXR5IGV4Y3BlY3RlZDogIgotICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcywgZ290ICVzIiAlIChyZXByKGEpLCByZXByKGIpKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cgb3IgJ2Zpbml0ZSByZXN1bHQgd2hlcmUgaW5maW5pdHkgZXhwZWN0ZWQ6ICcKKyAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQgeyFyfSwgZ290IHshcn0nLmZvcm1hdChhLCBiKSkKIAorICAgICAgICAjIGlmIGJvdGggYSBhbmQgYiBhcmUgemVybywgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgdGhlIHNhbWUgc2lnbgorICAgICAgICAjIChpbiB0aGVvcnkgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGl0IHdvdWxkIGJlIGxlZ2l0aW1hdGUgZm9yIGEKKyAgICAgICAgIyBhbmQgYiB0byBoYXZlIG9wcG9zaXRlIHNpZ25zOyBpbiBwcmFjdGljZSB0aGVzZSBoYXJkbHkgZXZlcgorICAgICAgICAjIG9jY3VyKS4KICAgICAgICAgaWYgbm90IGEgYW5kIG5vdCBiOgotICAgICAgICAgICAgaWYgbWF0aC5hdGFuMihhLCAtMS4pICE9IG1hdGguYXRhbjIoYiwgLTEuKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInplcm8gaGFzIHdyb25nIHNpZ246IGV4cGVjdGVkICVzLCBnb3QgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcHIoYSksIHJlcHIoYikpKQorICAgICAgICAgICAgaWYgbWF0aC5jb3B5c2lnbigxLiwgYSkgIT0gbWF0aC5jb3B5c2lnbigxLiwgYik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAnemVybyBoYXMgd3Jvbmcgc2lnbjogZXhwZWN0ZWQgeyFyfSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHshcn0nLmZvcm1hdChhLCBiKSkKIAotICAgICAgICAjIHRlc3QgcGFzc2VzIGlmIGVpdGhlciB0aGUgYWJzb2x1dGUgZXJyb3Igb3IgdGhlIHJlbGF0aXZlCi0gICAgICAgICMgZXJyb3IgaXMgc3VmZmljaWVudGx5IHNtYWxsLiAgVGhlIGRlZmF1bHRzIGFtb3VudCB0byBhbgotICAgICAgICAjIGVycm9yIG9mIGJldHdlZW4gOSB1bHBzIGFuZCAxOSB1bHBzIG9uIGFuIElFRUUtNzU0IGNvbXBsaWFudAotICAgICAgICAjIG1hY2hpbmUuCi0KKyAgICAgICAgIyBpZiBhLWIgb3ZlcmZsb3dzLCBvciBiIGlzIGluZmluaXRlLCByZXR1cm4gRmFsc2UuICBBZ2FpbiwgaW4KKyAgICAgICAgIyB0aGVvcnkgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGEgaXMgd2l0aGluIGEgZmV3IHVscHMgb2YgdGhlCisgICAgICAgICMgbWF4IHJlcHJlc2VudGFibGUgZmxvYXQsIGFuZCB0aGVuIGIgY291bGQgbGVnaXRpbWF0ZWx5IGJlCisgICAgICAgICMgaW5maW5pdGUuICBJbiBwcmFjdGljZSB0aGVzZSBleGFtcGxlcyBhcmUgcmFyZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYWJzb2x1dGVfZXJyb3IgPSBhYnMoYi1hKQogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGVzdCBwYXNzZXMgaWYgZWl0aGVyIHRoZSBhYnNvbHV0ZSBlcnJvciBvciB0aGUgcmVsYXRpdmUKKyAgICAgICAgICAgICMgZXJyb3IgaXMgc3VmZmljaWVudGx5IHNtYWxsLiAgVGhlIGRlZmF1bHRzIGFtb3VudCB0byBhbgorICAgICAgICAgICAgIyBlcnJvciBvZiBiZXR3ZWVuIDkgdWxwcyBhbmQgMTkgdWxwcyBvbiBhbiBJRUVFLTc1NCBjb21wbGlhbnQKKyAgICAgICAgICAgICMgbWFjaGluZS4KICAgICAgICAgICAgIGlmIGFic29sdXRlX2Vycm9yIDw9IG1heChhYnNfZXJyLCByZWxfZXJyICogYWJzKGEpKToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgYXJlIG5vdCBzdWZmaWNpZW50bHkgY2xvc2UiICUgKHJlcHIoYSksIHJlcHIoYikpKQorICAgICAgICBzZWxmLmZhaWwobXNnIG9yCisgICAgICAgICAgICAgICAgICAneyFyfSBhbmQgeyFyfSBhcmUgbm90IHN1ZmZpY2llbnRseSBjbG9zZScuZm9ybWF0KGEsIGIpKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBlX2V4cGVjdGVkID0gMi43MTgyODE4Mjg0NTkwNDUyMzUzNgogICAgICAgICBwaV9leHBlY3RlZCA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5waSwgcGlfZXhwZWN0ZWQsIHBsYWNlcz05LAotICAgICAgICAgICAgbXNnPSJjbWF0aC5waSBpcyAlczsgc2hvdWxkIGJlICVzIiAlIChjbWF0aC5waSwgcGlfZXhwZWN0ZWQpKQorICAgICAgICAgICAgbXNnPSJjbWF0aC5waSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGgucGksIHBpX2V4cGVjdGVkKSkKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5lLCBlX2V4cGVjdGVkLCBwbGFjZXM9OSwKLSAgICAgICAgICAgIG1zZz0iY21hdGguZSBpcyAlczsgc2hvdWxkIGJlICVzIiAlIChjbWF0aC5lLCBlX2V4cGVjdGVkKSkKKyAgICAgICAgICAgIG1zZz0iY21hdGguZSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGguZSwgZV9leHBlY3RlZCkpCiAKICAgICBkZWYgdGVzdF91c2VyX29iamVjdChzZWxmKToKICAgICAgICAgIyBUZXN0IGF1dG9tYXRpYyBjYWxsaW5nIG9mIF9fY29tcGxleF9fIGFuZCBfX2Zsb2F0X18gYnkgY21hdGgKQEAgLTMyNSw4ICszMDksOCBAQAogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyID0gIiVzOiAlcyhjb21wbGV4KCVyLCAlcikpIiAlIChpZCwgZm4sIGFyLCBhaSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdWYWx1ZUVycm9yIG5vdCByYWlzZWQgaW4gdGVzdCAlcycgJSB0ZXN0X3N0cikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdWYWx1ZUVycm9yIG5vdCByYWlzZWQgaW4gdGVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICd7fToge30oY29tcGxleCh7IXJ9LCB7IXJ9KSknLmZvcm1hdChpZCwgZm4sIGFyLCBhaSkpCiAKICAgICAgICAgICAgIGlmICdvdmVyZmxvdycgaW4gZmxhZ3M6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzM0LDggKzMxOCw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHIgPSAiJXM6ICVzKGNvbXBsZXgoJXIsICVyKSkiICUgKGlkLCBmbiwgYXIsIGFpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ092ZXJmbG93RXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICVzJyAlIHRlc3Rfc3RyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ092ZXJmbG93RXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9OiB7fShjb21wbGV4KHshcn0sIHshcn0pKScuZm9ybWF0KGlkLCBmbiwgYXIsIGFpKSkKIAogICAgICAgICAgICAgYWN0dWFsID0gZnVuY3Rpb24oYXJnKQogCkBAIC0zNTMsMTcgKzMzNywxOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZWFsX2Fic19lcnIgPSA1ZS0zMjMKIAotICAgICAgICAgICAgaWYgbm90IChhbG1vc3RFcXVhbEYoZXhwZWN0ZWQucmVhbCwgYWN0dWFsLnJlYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNfZXJyID0gcmVhbF9hYnNfZXJyKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgYWxtb3N0RXF1YWxGKGV4cGVjdGVkLmltYWcsIGFjdHVhbC5pbWFnKSk6Ci0gICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICgKLSAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyhjb21wbGV4KCVyLCAlcikpXG4iICUgKGlkLCBmbiwgYXIsIGFpKSArCi0gICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDogY29tcGxleCglciwgJXIpXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZC5yZWFsLCBleHBlY3RlZC5pbWFnKSArCi0gICAgICAgICAgICAgICAgICAgICJSZWNlaXZlZDogY29tcGxleCglciwgJXIpXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3R1YWwucmVhbCwgYWN0dWFsLmltYWcpICsKLSAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkIHZhbHVlIGluc3VmZmljaWVudGx5IGNsb3NlIHRvIGV4cGVjdGVkIHZhbHVlLiIpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKGVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gKAorICAgICAgICAgICAgICAgICd7fToge30oY29tcGxleCh7IXJ9LCB7IXJ9KSlcbicKKyAgICAgICAgICAgICAgICAnRXhwZWN0ZWQ6IGNvbXBsZXgoeyFyfSwgeyFyfSlcbicKKyAgICAgICAgICAgICAgICAnUmVjZWl2ZWQ6IGNvbXBsZXgoeyFyfSwgeyFyfSlcbicKKyAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgdmFsdWUgaW5zdWZmaWNpZW50bHkgY2xvc2UgdG8gZXhwZWN0ZWQgdmFsdWUuJworICAgICAgICAgICAgICAgICkuZm9ybWF0KGlkLCBmbiwgYXIsIGFpLAorICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucmVhbCwgZXhwZWN0ZWQuaW1hZywKKyAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5yZWFsLCBhY3R1YWwuaW1hZykKKyAgICAgICAgICAgIHNlbGYuckFzc2VydEFsbW9zdEVxdWFsKGV4cGVjdGVkLnJlYWwsIGFjdHVhbC5yZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnI9cmVhbF9hYnNfZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJvcl9tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWQuaW1hZywgYWN0dWFsLmltYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm9yX21lc3NhZ2UpCiAKICAgICBkZWYgYXNzZXJ0Q0lTRXF1YWwoc2VsZiwgYSwgYik6CiAgICAgICAgIGVwcyA9IDFFLTcKQEAgLTQxNiw3ICs0MDIsNyBAQAogCiAgICAgICAgICMgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBOYU4KICAgICAgICAgZm9yIHogaW4gY29tcGxleF9uYW5zOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4ocGhhc2UoeikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocGhhc2UoeikpKQogCiAgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgogICAgICAgICAjIHplcm9zCkBAIC00MjksMTggKzQxNSwxOCBAQAogCiAgICAgICAgICMgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBOYU4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoY29tcGxleChOQU4sIC1JTkYpKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIC0yLjMpKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgLTAuMCkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAwLjApKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgMi4zKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIC0yLjMpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgLTAuMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAwLjApKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgMi4zKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KE5BTiwgSU5GKSksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoY29tcGxleCgtSU5GLCBOQU4pKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihhYnMoY29tcGxleCgtMi4zLCBOQU4pKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KC0wLjAsIE5BTikpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoMC4wLCBOQU4pKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKGFicyhjb21wbGV4KDIuMywgTkFOKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleCgtMi4zLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KC0wLjAsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoMC4wLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KDIuMywgTkFOKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KElORiwgTkFOKSksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgTkFOKSkpKQogCiAgICAgICAgICMgcmVzdWx0IG92ZXJmbG93cwogICAgICAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6CkBAIC00NTksMjYgKzQ0NSwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydENFcXVhbChyZWN0KDEsIC1waS8yKSwgKDAsIC0xLikpCiAKICAgICBkZWYgdGVzdF9pc25hbihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsSWYoY21hdGguaXNuYW4oMSkpCi0gICAgICAgIHNlbGYuZmFpbElmKGNtYXRoLmlzbmFuKDFqKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoY21hdGguaXNuYW4oSU5GKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzbmFuKE5BTikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc25hbihjb21wbGV4KE5BTiwgMCkpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNuYW4oY29tcGxleCgwLCBOQU4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBOQU4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBJTkYpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzbmFuKGNvbXBsZXgoSU5GLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNuYW4oSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKE5BTikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KE5BTiwgMCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleCgwLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoSU5GLCBOQU4pKSkKIAogICAgIGRlZiB0ZXN0X2lzaW5mKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxJZihjbWF0aC5pc2luZigxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoY21hdGguaXNpbmYoMWopKQotICAgICAgICBzZWxmLmZhaWxJZihjbWF0aC5pc2luZihOQU4pKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNpbmYoSU5GKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNtYXRoLmlzaW5mKGNvbXBsZXgoSU5GLCAwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjbWF0aC5pc2luZihjb21wbGV4KDAsIElORikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNpbmYoY29tcGxleChJTkYsIElORikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNpbmYoY29tcGxleChOQU4sIElORikpKQotICAgICAgICBzZWxmLmFzc2VydF8oY21hdGguaXNpbmYoY29tcGxleChJTkYsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzaW5mKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzaW5mKDFqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc2luZihOQU4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoSU5GLCAwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KDAsIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChJTkYsIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChJTkYsIE5BTikpKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWQucHkKaW5kZXggYjQ4YjBmMS4uYzQ2ZmVjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWQucHkKQEAgLTcsNiArNyw3IEBACiAKIGltcG9ydCBjbWQKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgcmUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IFN0cmluZ0lPCkBAIC02MCwxNSArNjEsMTcgQEAKICAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiMTIiKQogICAgIFtdCiAgICAgPj4+IG15Y21kLmNvbXBsZXRlbmFtZXMoImhlbHAiKQotICAgIFsnaGVscCcsICdoZWxwJ10KKyAgICBbJ2hlbHAnXQogCiAgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlX2hlbHAoKToKICAgICA+Pj4gbXljbWQuY29tcGxldGVfaGVscCgiYSIpCiAgICAgWydhZGQnXQogICAgID4+PiBteWNtZC5jb21wbGV0ZV9oZWxwKCJoZSIpCi0gICAgWydoZWxwJywgJ2hlbHAnXQorICAgIFsnaGVscCddCiAgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoIjEyIikKICAgICBbXQorICAgID4+PiBzb3J0ZWQobXljbWQuY29tcGxldGVfaGVscCgiIikpCisgICAgWydhZGQnLCAnZXhpdCcsICdoZWxwJywgJ3NoZWxsJ10KIAogICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBkb19oZWxwKCk6CiAgICAgPj4+IG15Y21kLmRvX2hlbHAoInRlc3RldCIpCkBAIC0xODUsMTkgKzE4OCwxOSBAQAogICAgICAgICBjbWQgPSBzZWxmLnNpbXBsZWNtZChzdGRpbj1pbnB1dCwgc3Rkb3V0PW91dHB1dCkKICAgICAgICAgY21kLnVzZV9yYXdpbnB1dCA9IEZhbHNlCiAgICAgICAgIGNtZC5jbWRsb29wKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICgiKENtZCkgdGVzdFxuIgogICAgICAgICAgICAgICIoQ21kKSB0ZXN0MlxuIgogICAgICAgICAgICAgICIoQ21kKSAiKSkKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfY21kCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2NtZAogICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2NtZCwgdmVyYm9zZSkKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBbHRlcm5hdGVJbnB1dCkKIAogZGVmIHRlc3RfY292ZXJhZ2UoY292ZXJkaXIpOgotICAgIGltcG9ydCB0cmFjZQorICAgIHRyYWNlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RyYWNlJykKICAgICB0cmFjZXI9dHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQogICAgIHRyYWNlci5ydW4oJ3JlbG9hZChjbWQpO3Rlc3RfbWFpbigpJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CmluZGV4IGVmZWY3NGYuLmJlM2I3MGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQpAQCAtNCwzMyArNCwxNiBAQAogCiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IHNwYXduX3B5dGhvbiwga2lsbF9weXRob24sIHB5dGhvbl9leGl0X2NvZGUKIAotZGVmIF9zcGF3bl9weXRob24oKmFyZ3MpOgotICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQotICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQotICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotCi1kZWYgX2tpbGxfcHl0aG9uKHApOgotICAgIHAuc3RkaW4uY2xvc2UoKQotICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkKLSAgICBwLnN0ZG91dC5jbG9zZSgpCi0gICAgIyB0cnkgdG8gY2xlYW51cCB0aGUgY2hpbGQgc28gd2UgZG9uJ3QgYXBwZWFyIHRvIGxlYWsgd2hlbiBydW5uaW5nCi0gICAgIyB3aXRoIHJlZ3J0ZXN0IC1SLiAgVGhpcyBzaG91bGQgYmUgYSBuby1vcCBvbiBXaW5kb3dzLgotICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQotICAgIHJldHVybiBkYXRhCiAKIGNsYXNzIENtZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc3RhcnRfcHl0aG9uKHNlbGYsICphcmdzKToKLSAgICAgICAgcCA9IF9zcGF3bl9weXRob24oKmFyZ3MpCi0gICAgICAgIHJldHVybiBfa2lsbF9weXRob24ocCkKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbigqYXJncykKKyAgICAgICAgcmV0dXJuIGtpbGxfcHl0aG9uKHApCiAKICAgICBkZWYgZXhpdF9jb2RlKHNlbGYsICphcmdzKToKLSAgICAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCi0gICAgICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKGNtZF9saW5lLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICByZXR1cm4gcHl0aG9uX2V4aXRfY29kZSgqYXJncykKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yaWVzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZXhpdF9jb2RlKCcuJyksIDApCkBAIC0zOSw3ICsyMiw3IEBACiAgICAgZGVmIHZlcmlmeV92YWxpZF9mbGFnKHNlbGYsIGNtZF9saW5lKToKICAgICAgICAgZGF0YSA9IHNlbGYuc3RhcnRfcHl0aG9uKGNtZF9saW5lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSAnJyBvciBkYXRhLmVuZHN3aXRoKCdcbicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RyYWNlYmFjaycgbm90IGluIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIGRhdGEpCiAKICAgICBkZWYgdGVzdF9vcHRpbWl6ZShzZWxmKToKICAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLU8nKQpAQCAtNTUsNyArMzgsNyBAQAogICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUycpCiAKICAgICBkZWYgdGVzdF91c2FnZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd1c2FnZScgaW4gc2VsZi5zdGFydF9weXRob24oJy1oJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzYWdlJywgc2VsZi5zdGFydF9weXRob24oJy1oJykpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICB2ZXJzaW9uID0gJ1B5dGhvbiAlZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXQpAQCAtODMsMTIgKzY2LDEyIEBACiAgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCiAgICAgICAgICMgUnVucyB0aGUgdGltZWl0IG1vZHVsZSBhbmQgY2hlY2tzIHRoZSBfX21haW5fXwogICAgICAgICAjIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYXBwcm9wcmlhdGVseQotICAgICAgICBwID0gX3NwYXduX3B5dGhvbignLWknLCAnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKQorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCctaScsICctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCiAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ1RpbWVyXG4nKQogICAgICAgICBwLnN0ZGluLndyaXRlKCdleGl0KClcbicpCi0gICAgICAgIGRhdGEgPSBfa2lsbF9weXRob24ocCkKKyAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLnN0YXJ0c3dpdGgoJzEgbG9vcCcpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19fbWFpbl9fLlRpbWVyJyBpbiBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfX21haW5fXy5UaW1lcicsIGRhdGEpCiAKICAgICBkZWYgdGVzdF9ydW5fY29kZShzZWxmKToKICAgICAgICAgIyBUZXN0IGV4cGVjdGVkIG9wZXJhdGlvbiBvZiB0aGUgJy1jJyBzd2l0Y2gKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKaW5kZXggOTk1ZDRhOC4uMDk5NDcxZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKQEAgLTMsMzYgKzMsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5cwogaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Ci1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgcHlfY29tcGlsZQotaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBzaHV0aWwKLWltcG9ydCB6aXBmaWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKHJ1bl9weXRob24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGlyLCBtYWtlX3NjcmlwdCwgY29tcGlsZV9zY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfcGtnLCBtYWtlX3ppcF9zY3JpcHQsIG1ha2VfemlwX3BrZykKIAogdmVyYm9zZSA9IHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2UKIAotIyBYWFggbmNvZ2hsYW46IFNob3VsZCB3ZSBjb25zaWRlciBtb3ZpbmcgdGhlc2UgdG8gdGVzdF9zdXBwb3J0PwotZnJvbSB0ZXN0X2NtZF9saW5lIGltcG9ydCBfc3Bhd25fcHl0aG9uLCBfa2lsbF9weXRob24KLQotZGVmIF9ydW5fcHl0aG9uKCphcmdzKToKLSAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCphcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCctTycsICphcmdzKQotICAgIHN0ZG91dF9kYXRhID0gX2tpbGxfcHl0aG9uKHApCi0gICAgcmV0dXJuIHAud2FpdCgpLCBzdGRvdXRfZGF0YQotCi1AY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIHRlbXBfZGlyKCk6Ci0gICAgZGlybmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgIGRpcm5hbWUgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcm5hbWUpCi0gICAgdHJ5OgotICAgICAgICB5aWVsZCBkaXJuYW1lCi0gICAgZmluYWxseToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJuYW1lKQogCiB0ZXN0X3NvdXJjZSA9ICIiIlwKICMgU2NyaXB0IG1heSBiZSBydW4gd2l0aCBvcHRpbWlzYXRpb24gZW5hYmxlZCwgc28gZG9uJ3QgcmVseSBvbiBhc3NlcnQKQEAgLTYwLDYzICszNywxMiBAQAogIiIiCiAKIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT10ZXN0X3NvdXJjZSk6Ci0gICAgc2NyaXB0X2ZpbGVuYW1lID0gc2NyaXB0X2Jhc2VuYW1lK29zLmV4dHNlcCsncHknCi0gICAgc2NyaXB0X25hbWUgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2Rpciwgc2NyaXB0X2ZpbGVuYW1lKQotICAgIHNjcmlwdF9maWxlID0gb3BlbihzY3JpcHRfbmFtZSwgJ3cnKQotICAgIHNjcmlwdF9maWxlLndyaXRlKHNvdXJjZSkKLSAgICBzY3JpcHRfZmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHNjcmlwdF9uYW1lCi0KLWRlZiBfY29tcGlsZV90ZXN0X3NjcmlwdChzY3JpcHRfbmFtZSk6Ci0gICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCi0gICAgaWYgX19kZWJ1Z19fOgotICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnYycKLSAgICBlbHNlOgotICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnbycKLSAgICByZXR1cm4gY29tcGlsZWRfbmFtZQotCi1kZWYgX21ha2VfdGVzdF96aXAoemlwX2RpciwgemlwX2Jhc2VuYW1lLCBzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXA9Tm9uZSk6Ci0gICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLmV4dHNlcCsnemlwJwotICAgIHppcF9uYW1lID0gb3MucGF0aC5qb2luKHppcF9kaXIsIHppcF9maWxlbmFtZSkKLSAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3cnKQotICAgIGlmIG5hbWVfaW5femlwIGlzIE5vbmU6Ci0gICAgICAgIG5hbWVfaW5femlwID0gb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkKLSAgICB6aXBfZmlsZS53cml0ZShzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXApCi0gICAgemlwX2ZpbGUuY2xvc2UoKQotICAgICNpZiB2ZXJib3NlOgotICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKLSAgICAjICAgIHByaW50ICdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUKLSAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKLSAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKLSAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgbmFtZV9pbl96aXApCi0KLWRlZiBfbWFrZV90ZXN0X3BrZyhwa2dfZGlyKToKLSAgICBvcy5ta2Rpcihwa2dfZGlyKQotICAgIF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX2luaXRfXycsICcnKQorICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKIAogZGVmIF9tYWtlX3Rlc3RfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT10ZXN0X3NvdXJjZSwgZGVwdGg9MSk6Ci0gICAgaW5pdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoemlwX2RpciwgJ19faW5pdF9fJywgJycpCi0gICAgaW5pdF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5pdF9uYW1lKQotICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoemlwX2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCi0gICAgcGtnX25hbWVzID0gW29zLnNlcC5qb2luKFtwa2dfbmFtZV0qaSkgZm9yIGkgaW4gcmFuZ2UoMSwgZGVwdGgrMSldCi0gICAgc2NyaXB0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKHBrZ19uYW1lc1stMV0sIG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpKQotICAgIHppcF9maWxlbmFtZSA9IHppcF9iYXNlbmFtZStvcy5leHRzZXArJ3ppcCcKLSAgICB6aXBfbmFtZSA9IG9zLnBhdGguam9pbih6aXBfZGlyLCB6aXBfZmlsZW5hbWUpCi0gICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICd3JykKLSAgICBmb3IgbmFtZSBpbiBwa2dfbmFtZXM6Ci0gICAgICAgIGluaXRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4obmFtZSwgaW5pdF9iYXNlbmFtZSkKLSAgICAgICAgemlwX2ZpbGUud3JpdGUoaW5pdF9uYW1lLCBpbml0X25hbWVfaW5femlwKQotICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCi0gICAgemlwX2ZpbGUuY2xvc2UoKQotICAgIG9zLnVubGluayhpbml0X25hbWUpCi0gICAgb3MudW5saW5rKHNjcmlwdF9uYW1lKQotICAgICNpZiB2ZXJib3NlOgotICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKLSAgICAjICAgIHByaW50ICdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUKLSAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKLSAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKLSAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgc2NyaXB0X25hbWVfaW5femlwKQorICAgIHJldHVybiBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBkZXB0aCkKIAogIyBUaGVyZSdzIG5vIGVhc3kgd2F5IHRvIHBhc3MgdGhlIHNjcmlwdCBkaXJlY3RvcnkgaW4gdG8gZ2V0CiAjIC1tIHRvIHdvcmsgKGF2b2lkaW5nIHRoYXQgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1ha2luZwpAQCAtMTM0LDE0ICs2MCwxNCBAQAogICAgIGVsc2U6CiAgICAgICAgIHBhdGggPSByZXByKHBhdGgpCiAgICAgc291cmNlID0gbGF1bmNoX3NvdXJjZSAlIChwYXRoLCBtb2R1bGVfbmFtZSkKLSAgICByZXR1cm4gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQogCiBjbGFzcyBDbWRMaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIF9jaGVja19zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsIGV4cGVjdGVkX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhY2thZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNtZF9saW5lX3N3aXRjaGVzKToKICAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCi0gICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IF9ydW5fcHl0aG9uKCpydW5fYXJncykKKyAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gcnVuX3B5dGhvbigqcnVuX2FyZ3MpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnT3V0cHV0IGZyb20gdGVzdCBzY3JpcHQgJXI6JyAlIHNjcmlwdF9uYW1lCiAgICAgICAgICAgICBwcmludCBkYXRhCkBAIC0xNTQsOSArODAsMTkgQEAKICAgICAgICAgICAgIHByaW50IHByaW50ZWRfZmlsZQogICAgICAgICAgICAgcHJpbnQgcHJpbnRlZF9wYWNrYWdlCiAgICAgICAgICAgICBwcmludCBwcmludGVkX2FyZ3YwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhwcmludGVkX2ZpbGUgaW4gZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByaW50ZWRfcGFja2FnZSBpbiBkYXRhKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJpbnRlZF9hcmd2MCBpbiBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfZmlsZSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwcmludGVkX3BhY2thZ2UsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJpbnRlZF9hcmd2MCwgZGF0YSkKKworICAgIGRlZiBfY2hlY2tfaW1wb3J0X2Vycm9yKHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNtZF9saW5lX3N3aXRjaGVzKToKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCisgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IHJ1bl9weXRob24oKnJ1bl9hcmdzKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ091dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOicgJSBzY3JpcHRfbmFtZQorICAgICAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICAgICAgcHJpbnQgJ0V4cGVjdGVkIG91dHB1dDogJXInICUgZXhwZWN0ZWRfbXNnCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWRfbXNnLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKQEAgLTE2Niw3ICsxMDIsNyBAQAogICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsIGNvbXBpbGVkX25hbWUsIGNvbXBpbGVkX25hbWUsIE5vbmUpCiAKQEAgLTE3OCwyNyArMTE0LDM5IEBACiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2NvbXBpbGVkKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKLSAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBfY29tcGlsZV90ZXN0X3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCBjb21waWxlZF9uYW1lLCBzY3JpcHRfZGlyLCAnJykKIAorICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzY3JpcHRfZGlyCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3Ioc2NyaXB0X2RpciwgbXNnKQorCiAgICAgZGVmIHRlc3RfemlwZmlsZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgcnVuX25hbWUsIHppcF9uYW1lLCAnJykKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQotICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXAoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCBydW5fbmFtZSwgemlwX25hbWUsICcnKQogCisgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdub3RfbWFpbicpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSB6aXBfbmFtZQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHppcF9uYW1lLCBtc2cpCisKICAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCi0gICAgICAgICAgICBfbWFrZV90ZXN0X3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy5zY3JpcHQnKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICd0ZXN0X3BrZycpCkBAIC0yMTUsNiArMTYzLDQ3IEBACiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy50ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgcnVuX25hbWUsIHJ1bl9uYW1lLCAndGVzdF9wa2cudGVzdF9wa2cnKQogCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ3Rlc3RfcGtnJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgY29tcGlsZWRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbXNnID0gKCIndGVzdF9wa2cnIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIKKyAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKGxhdW5jaF9uYW1lLCBtc2cpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbWFpbl9kaXIgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ19fbWFpbl9fJykKKyAgICAgICAgICAgIG1ha2VfcGtnKG1haW5fZGlyKQorICAgICAgICAgICAgbXNnID0gKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlOyAiCisgICAgICAgICAgICAgICAgICAgIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IobGF1bmNoX25hbWUsIG1zZykKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENtZExpbmVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlLnB5CmluZGV4IGI2OTIyM2QuLjk3YWRmNTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGUucHkKQEAgLTgwLDYgKzgwLDExIEBACiAKICIiIgogCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgX3Rlc3RjYXBpCisKKwogZGVmIGNvbnN0cyh0KToKICAgICAiIiJZaWVsZCBhIGRvY3Rlc3Qtc2FmZSBzZXF1ZW5jZSBvZiBvYmplY3QgcmVwcnMuIiIiCiAgICAgZm9yIGVsdCBpbiB0OgpAQCAtOTYsMTEgKzEwMSw0NyBAQAogICAgICAgICBwcmludCAiJXM6ICVzIiAlIChhdHRyLCBnZXRhdHRyKGNvLCAiY29fIiArIGF0dHIpKQogICAgIHByaW50ICJjb25zdHM6IiwgdHVwbGUoY29uc3RzKGNvLmNvX2NvbnN0cykpCiAKKworY2xhc3MgQ29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbmV3ZW1wdHkoc2VsZik6CisgICAgICAgIGNvID0gX3Rlc3RjYXBpLmNvZGVfbmV3ZW1wdHkoImZpbGVuYW1lIiwgImZ1bmNuYW1lIiwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fZmlsZW5hbWUsICJmaWxlbmFtZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fbmFtZSwgImZ1bmNuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maXJzdGxpbmVubywgMTUpCisKKworY2xhc3MgQ29kZVdlYWtSZWZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIGNvZGUgb2JqZWN0IGluIGEgY2xlYW4gZW52aXJvbm1lbnQgc28gdGhhdCB3ZSBrbm93IHdlIGhhdmUKKyAgICAgICAgIyB0aGUgb25seSByZWZlcmVuY2UgdG8gaXQgbGVmdC4KKyAgICAgICAgbmFtZXNwYWNlID0ge30KKyAgICAgICAgZXhlYyAiZGVmIGYoKTogcGFzcyIgaW4gZ2xvYmFscygpLCBuYW1lc3BhY2UKKyAgICAgICAgZiA9IG5hbWVzcGFjZVsiZiJdCisgICAgICAgIGRlbCBuYW1lc3BhY2UKKworICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCisgICAgICAgIGRlZiBjYWxsYmFjayhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorCisgICAgICAgICMgZiBpcyBub3cgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHRocm91Z2ggaXQsIHRoZSBjb2RlCisgICAgICAgICMgb2JqZWN0LiAgV2hpbGUgd2UgaG9sZCBpdCwgY2hlY2sgdGhhdCB3ZSBjYW4gY3JlYXRlIGEgd2Vha3JlZiBhbmQKKyAgICAgICAgIyBkZXJlZiBpdC4gIFRoZW4gZGVsZXRlIGl0LCBhbmQgY2hlY2sgdGhhdCB0aGUgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYW5kCisgICAgICAgICMgdGhlIHJlZmVyZW5jZSBkaWVzLgorICAgICAgICBjb2RlcmVmID0gd2Vha3JlZi5yZWYoZi5fX2NvZGVfXywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKGNvZGVyZWYoKSkpCisgICAgICAgIGRlbCBmCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm9vbChjb2RlcmVmKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl9kb2N0ZXN0CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX2RvY3Rlc3QsIHJ1bl91bml0dGVzdAogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jb2RlCiAgICAgcnVuX2RvY3Rlc3QodGVzdF9jb2RlLCB2ZXJib3NlKQorICAgIHJ1bl91bml0dGVzdChDb2RlVGVzdCwgQ29kZVdlYWtSZWZUZXN0KQogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQppbmRleCA2OWM4Zjk0Li40ODI1ZjQzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICBjaGFybWFwID0gZGljdChbIChvcmQoYyksIDIqYy51cHBlcigpKSBmb3IgYyBpbiAiYWJjZGVmZ2giXSkKICAgICAgICAgc2luID0gdSJhYmMiCiAgICAgICAgIHNvdXQgPSAiQUFCQkNDIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb2RlY3MuY2hhcm1hcF9lbmNvZGUoc2luLCAic3RyaWN0IiwgY2hhcm1hcClbMF0sIHNvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJtYXBfZW5jb2RlKHNpbiwgInN0cmljdCIsIGNoYXJtYXApWzBdLCBzb3V0KQogCiAgICAgICAgIHNpbiA9IHUiYWJjQSIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHNpbiwgInN0cmljdCIsIGNoYXJtYXApCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgY2hhcm1hcFtvcmQoIj8iKV0gPSAiWFlaIgogICAgICAgICBzaW4gPSB1ImFiY0RFRiIKICAgICAgICAgc291dCA9ICJBQUJCQ0NYWVpYWVpYWVoiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5jaGFybWFwX2VuY29kZShzaW4sICJyZXBsYWNlIiwgY2hhcm1hcClbMF0sIHNvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJtYXBfZW5jb2RlKHNpbiwgInJlcGxhY2UiLCBjaGFybWFwKVswXSwgc291dCkKIAogICAgICAgICBjaGFybWFwW29yZCgiPyIpXSA9IHUiWFlaIgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2VuY29kZSwgc2luLCAicmVwbGFjZSIsIGNoYXJtYXApCkBAIC0zMjcsNyArMzI3LDcgQEAKIAogICAgICAgICAjIGNoZWNrIHdpdGggdGhlIGNvcnJlY3QgbnVtYmVyIGFuZCB0eXBlIG9mIGFyZ3VtZW50cwogICAgICAgICBleGMgPSBleGN0eXBlKCphcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZXhjKSwgbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleGMpLCBtc2cpCiAKICAgICBkZWYgdGVzdF91bmljb2RlZW5jb2RlZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKQEAgLTQzNywxNSArNDM3LDE1IEBACiAgICAgICAgICAgIFVuaWNvZGVFcnJvcigib3VjaCIpCiAgICAgICAgICkKICAgICAgICAgIyBJZiB0aGUgY29ycmVjdCBleGNlcHRpb24gaXMgcGFzc2VkIGluLCAiaWdub3JlIiByZXR1cm5zIGFuIGVtcHR5IHJlcGxhY2VtZW50Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSIiLCAxKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSIiLCAxKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSIiLCAxKQogICAgICAgICApCkBAIC00NzQsMTUgKzQ3NCwxNSBAQAogICAgICAgICAgICAgQmFkT2JqZWN0VW5pY29kZURlY29kZUVycm9yKCkKICAgICAgICAgKQogICAgICAgICAjIFdpdGggdGhlIGNvcnJlY3QgZXhjZXB0aW9uLCAicmVwbGFjZSIgcmV0dXJucyBhbiAiPyIgb3IgdSJcdWZmZmQiIHJlcGxhY2VtZW50Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgKHUiPyIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcdWZmZmQiLCAxKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzKFVuaWNvZGVUcmFuc2xhdGVFcnJvcih1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgKHUiXHVmZmZkIiwgMSkKICAgICAgICAgKQpAQCAtNTE0LDcgKzUxNCw3IEBACiAgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgogICAgICAgICBjcyA9ICgwLCAxLCA5LCAxMCwgOTksIDEwMCwgOTk5LCAxMDAwLCA5OTk5LCAxMDAwMCwgMHgzMDQyKQogICAgICAgICBzID0gIiIuam9pbih1bmljaHIoYykgZm9yIGMgaW4gY3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycygKICAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgcywgMCwgbGVuKHMpLCAib3VjaCIpCiAgICAgICAgICAgICApLApAQCAtNTQ2LDMyICs1NDYsMzIgQEAKICAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcih1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikKICAgICAgICAgKQogICAgICAgICAjIFVzZSB0aGUgY29ycmVjdCBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcXHUzMDQyIiwgMSkKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJceDAwIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcXHgwMCIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHhmZiIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgKHUiXFx4ZmYiLCAxKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1MDEwMCIsIDAsIDEsICJvdWNoIikpLAogICAgICAgICAgICAgKHUiXFx1MDEwMCIsIDEpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHVmZmZmIiwgMCwgMSwgIm91Y2giKSksCiAgICAgICAgICAgICAodSJcXHVmZmZmIiwgMSkKICAgICAgICAgKQogICAgICAgICBpZiBzeXMubWF4dW5pY29kZT4weGZmZmY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1IlxVMDAwMTAwMDAiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICAgICAodSJcXFUwMDAxMDAwMCIsIDEpCiAgICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1IlxVMDAxMGZmZmYiLCAwLCAxLCAib3VjaCIpKSwKICAgICAgICAgICAgICAgICAodSJcXFUwMDEwZmZmZiIsIDEpCiAgICAgICAgICAgICApCkBAIC01ODEsNyArNTgxLDcgQEAKICAgICAgICAgZW5jcyA9ICgiYXNjaWkiLCAibGF0aW4tMSIsICJpc28tODg1OS0xIiwgImlzby04ODU5LTE1IikKIAogICAgICAgICBmb3IgcmVzIGluIHJlc3VsdHM6Ci0gICAgICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkaGFuZGxlciIsIGxhbWJkYTogcmVzKQorICAgICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmJhZGhhbmRsZXIiLCBsYW1iZGEgeDogcmVzKQogICAgICAgICAgICAgZm9yIGVuYyBpbiBlbmNzOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAogICAgICAgICAgICAgICAgICAgICBUeXBlRXJyb3IsCkBAIC02MDMsMTQgKzYwMywxNCBAQAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2xvb2t1cChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29kZWNzLnN0cmljdF9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoInN0cmljdCIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb2RlY3MuaWdub3JlX2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigiaWdub3JlIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5zdHJpY3RfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJzdHJpY3QiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnN0cmljdF9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoInN0cmljdCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5pZ25vcmVfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJpZ25vcmUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3Muc3RyaWN0X2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigic3RyaWN0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAogICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcigieG1sY2hhcnJlZnJlcGxhY2UiKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAogICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcigiYmFja3NsYXNocmVwbGFjZSIpCiAgICAgICAgICkKQEAgLTY4NiwxMSArNjg2LDExIEBACiAKICAgICAgICAgIyBWYWxpZCBuZWdhdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IC0xCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQogCiAgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAtMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz48Pz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/Pjw/PiIpCiAKICAgICAgICAgIyBOZWdhdGl2ZSBwb3NpdGlvbiBvdXQgb2YgYm91bmRzCiAgICAgICAgIGhhbmRsZXIucG9zID0gLTMKQEAgLTY5OCwxMSArNjk4LDExIEBACiAKICAgICAgICAgIyBWYWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgogICAgICAgICBoYW5kbGVyLnBvcyA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+MCIpCiAKICAgICAgICAgIyBMYXJnZXN0IHZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uIChvbmUgYmV5b25kIGVuZCBvZiBpbnB1dCkKICAgICAgICAgaGFuZGxlci5wb3MgPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4ZmYwIi5kZWNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksIHUiPD8+IikKIAogICAgICAgICAjIEludmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAzCkBAIC03MTAsNyArNzEwLDcgQEAKIAogICAgICAgICAjIFJlc3RhcnQgYXQgdGhlICIwIgogICAgICAgICBoYW5kbGVyLnBvcyA9IDYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlxcdXl5eXkwIi5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJcXHV5eXl5MCIuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKIAogICAgICAgICBjbGFzcyBEKGRpY3QpOgogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CkBAIC03NDAsMTEgKzc0MCwxMSBAQAogCiAgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAtMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz4wIikKIAogICAgICAgICAjIFZhbGlkIG5lZ2F0aXZlIHBvc2l0aW9uCiAgICAgICAgIGhhbmRsZXIucG9zID0gLTIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+PD8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz48Pz4iKQogCiAgICAgICAgICMgTmVnYXRpdmUgcG9zaXRpb24gb3V0IG9mIGJvdW5kcwogICAgICAgICBoYW5kbGVyLnBvcyA9IC0zCkBAIC03NTIsMTEgKzc1MiwxMSBAQAogCiAgICAgICAgICMgVmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQogCiAgICAgICAgICMgTGFyZ2VzdCB2YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbiAob25lIGJleW9uZCBlbmQgb2YgaW5wdXQKICAgICAgICAgaGFuZGxlci5wb3MgPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+IikKIAogICAgICAgICAjIEludmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KICAgICAgICAgaGFuZGxlci5wb3MgPSAzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IDRkMDNhZTcuLjdjZDcxNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC0yNjMsMTEgKzI2MywxMSBAQAogICAgICAgICBmLndyaXRlKHUic3BhbSIpCiAgICAgICAgIGQgPSBzLmdldHZhbHVlKCkKICAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGV4YWN0bHkgb25lIEJPTSBpbiBpdAotICAgICAgICBzZWxmLmFzc2VydF8oZCA9PSBzZWxmLnNwYW1sZSBvciBkID09IHNlbGYuc3BhbWJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZCA9PSBzZWxmLnNwYW1sZSBvciBkID09IHNlbGYuc3BhbWJlKQogICAgICAgICAjIHRyeSB0byByZWFkIGl0IGJhY2sKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKGQpCiAgICAgICAgIGYgPSByZWFkZXIocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIHUic3BhbXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1InNwYW1zcGFtIikKIAogICAgIGRlZiB0ZXN0X2JhZGJvbShzZWxmKToKICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKDQqIlx4ZmYiKQpAQCAtNDIxLDExICs0MjEsMTEgQEAKICAgICAgICAgZi53cml0ZSh1InNwYW0iKQogICAgICAgICBkID0gcy5nZXR2YWx1ZSgpCiAgICAgICAgICMgY2hlY2sgd2hldGhlciB0aGVyZSBpcyBleGFjdGx5IG9uZSBCT00gaW4gaXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQgPT0gc2VsZi5zcGFtbGUgb3IgZCA9PSBzZWxmLnNwYW1iZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQgPT0gc2VsZi5zcGFtbGUgb3IgZCA9PSBzZWxmLnNwYW1iZSkKICAgICAgICAgIyB0cnkgdG8gcmVhZCBpdCBiYWNrCiAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTyhkKQogICAgICAgICBmID0gcmVhZGVyKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCB1InNwYW1zcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdSJzcGFtc3BhbSIpCiAKICAgICBkZWYgdGVzdF9iYWRib20oc2VsZik6CiAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhmZlx4ZmYiKQpAQCAtNjczLDcgKzY3Myw3IEBACiAKIGNsYXNzIEVzY2FwZURlY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb2RlY3MuZXNjYXBlX2RlY29kZSgiIiksICgiIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVzY2FwZV9kZWNvZGUoIiIpLCAoIiIsIDApKQogCiBjbGFzcyBSZWNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlY29kaW5nKHNlbGYpOgpAQCAtODAwLDExICs4MDAsMTEgQEAKICAgICAgICAgICAgICMgY29kZSBwcm9kdWNlcyBvbmx5IGxvd2VyIGNhc2UuIENvbnZlcnRpbmcganVzdCBwdW55IHRvCiAgICAgICAgICAgICAjIGxvd2VyIGlzIGFsc28gaW5zdWZmaWNpZW50LCBzaW5jZSBzb21lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXJzCiAgICAgICAgICAgICAjIGFyZSB1cHBlciBjYXNlLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLmVuY29kZSgicHVueWNvZGUiKS5sb3dlcigpLCBwdW55Lmxvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaS5lbmNvZGUoInB1bnljb2RlIikubG93ZXIoKSwgcHVueS5sb3dlcigpKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgogICAgICAgICBmb3IgdW5pLCBwdW55IGluIHB1bnljb2RlX3Rlc3RjYXNlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaSwgcHVueS5kZWNvZGUoInB1bnljb2RlIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaSwgcHVueS5kZWNvZGUoInB1bnljb2RlIikpCiAKIGNsYXNzIFVuaWNvZGVJbnRlcm5hbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2J1ZzEyNTEzMDAoc2VsZik6CkBAIC04MjYsNyArODI2LDcgQEAKICAgICAgICAgICAgIGZvciBpbnRlcm5hbCwgdW5pIGluIG9rOgogICAgICAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CiAgICAgICAgICAgICAgICAgICAgIGludGVybmFsID0gIiIuam9pbihyZXZlcnNlZChpbnRlcm5hbCkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLCBpbnRlcm5hbC5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaSwgaW50ZXJuYWwuZGVjb2RlKCJ1bmljb2RlX2ludGVybmFsIikpCiAgICAgICAgICAgICBmb3IgaW50ZXJuYWwgaW4gbm90X29rOgogICAgICAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CiAgICAgICAgICAgICAgICAgICAgIGludGVybmFsID0gIiIuam9pbihyZXZlcnNlZChpbnRlcm5hbCkpCkBAIC04MzgsMTAgKzgzOCwxMCBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MTFceDExXHgwMCIuZGVjb2RlKCJ1bmljb2RlX2ludGVybmFsIikKICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGV4OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCJ1bmljb2RlX2ludGVybmFsIiwgZXguZW5jb2RpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIlx4MDBceDAwXHgwMFx4MDBceDAwXHgxMVx4MTFceDAwIiwgZXgub2JqZWN0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGV4LnN0YXJ0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDgsIGV4LmVuZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ1bmljb2RlX2ludGVybmFsIiwgZXguZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHgwMFx4MDBceDAwXHgwMFx4MDBceDExXHgxMVx4MDAiLCBleC5vYmplY3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBleC5zdGFydCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGV4LmVuZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKIApAQCAtODUyLDEwICs4NTIsMTYgQEAKICAgICAgICAgICAgIGFiID0gdSJhYiIuZW5jb2RlKCJ1bmljb2RlX2ludGVybmFsIikKICAgICAgICAgICAgIGlnbm9yZWQgPSBkZWNvZGVyKCIlc1x4MjJceDIyXHgyMlx4MjIlcyIgJSAoYWJbOjRdLCBhYls0Ol0pLAogICAgICAgICAgICAgICAgICJVbmljb2RlSW50ZXJuYWxUZXN0IikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCh1ImFiIiwgMTIpLCBpZ25vcmVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodSJhYiIsIDEyKSwgaWdub3JlZCkKKworICAgIGRlZiB0ZXN0X2VuY29kZV9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMzczOQorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGVuY29kZXIoInVuaWNvZGVfaW50ZXJuYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIodSJhIilbMV0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlcih1Ilx4ZTlcdTAxNDIiKVsxXSwgMikKIAogICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGVuY29kZXIoInN0cmluZy1lc2NhcGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbmNvZGVyKHInXHgwMCcpWzFdLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIocidceDAwJylbMV0sIDQpCiAKICMgRnJvbSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuL2RyYWZ0LWpvc2Vmc3Nvbi1pZG4tdGVzdC12ZWN0b3JzLmh0bWwKIG5hbWVwcmVwX3Rlc3RzID0gWwpAQCAtMTAyNiwxMDIgKzEwMzIsMTAyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByZXBwZWQgPSB1bmljb2RlKHByZXBwZWQsICJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuYW1lcHJlcChvcmlnKSwgcHJlcHBlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcHJlcChvcmlnKSwgcHJlcHBlZCkKICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCJUZXN0IDMuJWQ6ICVzIiAlIChwb3MrMSwgc3RyKGUpKSkKIAogY2xhc3MgSUROQUNvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYnVpbHRpbl9kZWNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoInB5dGhvbi5vcmciLCAiaWRuYSIpLCB1InB5dGhvbi5vcmciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCJweXRob24ub3JnLiIsICJpZG5hIiksIHUicHl0aG9uLm9yZy4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmljb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZyIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuaWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInB5dGhvbi5vcmciLCAiaWRuYSIpLCB1InB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInB5dGhvbi5vcmcuIiwgImlkbmEiKSwgdSJweXRob24ub3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgieG4tLXB5dGhuLW11YS5vcmciLCAiaWRuYSIpLCB1InB5dGhceGY2bi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoInhuLS1weXRobi1tdWEub3JnLiIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZy4iKQogCiAgICAgZGVmIHRlc3RfYnVpbHRpbl9lbmNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHUicHl0aG9uLm9yZyIuZW5jb2RlKCJpZG5hIiksICJweXRob24ub3JnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoInB5dGhvbi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInB5dGhvbi5vcmcuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJweXRoXHhmNm4ub3JnIi5lbmNvZGUoImlkbmEiKSwgInhuLS1weXRobi1tdWEub3JnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModSJweXRoXHhmNm4ub3JnLiIuZW5jb2RlKCJpZG5hIiksICJ4bi0tcHl0aG4tbXVhLm9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUicHl0aG9uLm9yZyIuZW5jb2RlKCJpZG5hIiksICJweXRob24ub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicHl0aG9uLm9yZy4iLmVuY29kZSgiaWRuYSIpLCAicHl0aG9uLm9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUicHl0aFx4ZjZuLm9yZyIuZW5jb2RlKCJpZG5hIiksICJ4bi0tcHl0aG4tbXVhLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJweXRoXHhmNm4ub3JnLiIuZW5jb2RlKCJpZG5hIiksICJ4bi0tcHl0aG4tbXVhLm9yZy4iKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtKHNlbGYpOgogICAgICAgICBpbXBvcnQgU3RyaW5nSU8KICAgICAgICAgciA9IGNvZGVjcy5nZXRyZWFkZXIoImlkbmEiKShTdHJpbmdJTy5TdHJpbmdJTygiYWJjIikpCiAgICAgICAgIHIucmVhZCgzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyLnJlYWQoKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIucmVhZCgpLCB1IiIpCiAKICAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9kZWNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgicHl0aG9uLm9yZyIsICJpZG5hIikpLAogICAgICAgICAgICAgdSJweXRob24ub3JnIgogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgicHl0aG9uLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgIHUicHl0aG9uLm9yZy4iCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgIHUicHl0aFx4ZjZuLm9yZy4iCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgIHUicHl0aFx4ZjZuLm9yZy4iCiAgICAgICAgICkKIAogICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcigiaWRuYSIpKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoInhuLS14YW0iLCApLCB1IiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuZGVjb2RlKCJwbGUtOXRhLm8iLCApLCB1Ilx4ZTR4YW1wbGUuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUodSJyZyIpLCB1IiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuZGVjb2RlKHUiIiwgVHJ1ZSksIHUib3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgieG4tLXhhbSIsICksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgicGxlLTl0YS5vIiwgKSwgdSJceGU0eGFtcGxlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUodSJyZyIpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUodSIiLCBUcnVlKSwgdSJvcmciKQogCiAgICAgICAgIGRlY29kZXIucmVzZXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSgieG4tLXhhbSIsICksIHUiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoInBsZS05dGEubyIsICksIHUiXHhlNHhhbXBsZS4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLmRlY29kZSgicmcuIiksIHUib3JnLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIuZGVjb2RlKCIiLCBUcnVlKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJ4bi0teGFtIiwgKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJwbGUtOXRhLm8iLCApLCB1Ilx4ZTR4YW1wbGUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgicmcuIiksIHUib3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoIiIsIFRydWUpLCB1IiIpCiAKICAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9lbmNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmVuY29kZSh1InB5dGhvbi5vcmciLCAiaWRuYSIpKSwKICAgICAgICAgICAgICJweXRob24ub3JnIgogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmVuY29kZSh1InB5dGhvbi5vcmcuIiwgImlkbmEiKSksCiAgICAgICAgICAgICAicHl0aG9uLm9yZy4iCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aFx4ZjZuLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgICJ4bi0tcHl0aG4tbXVhLm9yZy4iCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aFx4ZjZuLm9yZy4iLCAiaWRuYSIpKSwKICAgICAgICAgICAgICJ4bi0tcHl0aG4tbXVhLm9yZy4iCiAgICAgICAgICkKIAogICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcigiaWRuYSIpKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSJceGU0eCIpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmciKSwgInhuLS14YW1wbGUtOXRhLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSksICJvcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiXHhlNHgiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmciKSwgInhuLS14YW1wbGUtOXRhLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKSwgIm9yZyIpCiAKICAgICAgICAgZW5jb2Rlci5yZXNldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIuZW5jb2RlKHUiXHhlNHgiKSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIuZW5jb2RlKHUiYW1wbGUub3JnLiIpLCAieG4tLXhhbXBsZS05dGEub3JnLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiXHhlNHgiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmcuIiksICJ4bi0teGFtcGxlLTl0YS5vcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1IiIsIFRydWUpLCAiIikKIAogY2xhc3MgQ29kZWNzTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5kZWNvZGUoJ1x4ZTRceGY2XHhmYycsICdsYXRpbi0xJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZSgnXHhlNFx4ZjZceGZjJywgJ2xhdGluLTEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdceGU0XHhmNlx4ZmMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5kZWNvZGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5kZWNvZGUoJ2FiYycpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZSgnYWJjJyksIHUnYWJjJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MuZGVjb2RlLCAnXHhmZicsICdhc2NpaScpCiAKICAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5lbmNvZGUodSdceGU0XHhmNlx4ZmMnLCAnbGF0aW4tMScpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5lbmNvZGUodSdceGU0XHhmNlx4ZmMnLCAnbGF0aW4tMScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnXHhlNFx4ZjZceGZjJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuZW5jb2RlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgY29kZWNzLmVuY29kZSwgImZvbyIsICJfX3NwYW1fXyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvZGVjcy5lbmNvZGUodSdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVuY29kZSh1J2FiYycpLCAnYWJjJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBjb2RlY3MuZW5jb2RlLCB1J1x4ZmZmZicsICdhc2NpaScpCiAKICAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKQEAgLTExNTcsMTkgKzExNjMsMTkgQEAKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYucmVhZGVyKHNlbGYuc3RyZWFtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWRsaW5lcygpLCBbdSdcdWQ1NWNcbicsIHUnXHVhZTAwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3UnXHVkNTVjXG4nLCB1J1x1YWUwMCddKQogCiBjbGFzcyBFbmNvZGVkRmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygnXHhlZFx4OTVceDljXG5ceGVhXHhiOFx4ODAnKQogICAgICAgICBlZiA9IGNvZGVjcy5FbmNvZGVkRmlsZShmLCAndXRmLTE2LWxlJywgJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZWYucmVhZCgpLCAnXFxceGQ1XG5ceDAwXHgwMFx4YWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVmLnJlYWQoKSwgJ1xcXHhkNVxuXHgwMFx4MDBceGFlJykKIAogICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICBlZiA9IGNvZGVjcy5FbmNvZGVkRmlsZShmLCAndXRmLTgnLCAnbGF0aW4xJykKICAgICAgICAgZWYud3JpdGUoJ1x4YzNceGJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5nZXR2YWx1ZSgpLCAnXHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXR2YWx1ZSgpLCAnXHhmYycpCiAKIGNsYXNzIFN0cjJTdHJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTE3OCwxNCArMTE4NCwxNCBAQAogICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJiYXNlNjRfY29kZWMiKShTdHJpbmdJTy5TdHJpbmdJTyhzaW4pKQogICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsICJceDgwIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc291dCwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvdXQsIHN0cikKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgogICAgICAgICBzaW4gPSAiXHg4MCIuZW5jb2RlKCJiYXNlNjRfY29kZWMiKQogICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJiYXNlNjRfY29kZWMiKShTdHJpbmdJTy5TdHJpbmdJTyhzaW4pKQogICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCAiXHg4MCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNvdXQsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb3V0LCBzdHIpCiAKIGFsbF91bmljb2RlX2VuY29kaW5ncyA9IFsKICAgICAiYXNjaWkiLApAQCAtMTIwOSw2ICsxMjE1LDcgQEAKICAgICAiY3A0MjQiLAogICAgICJjcDQzNyIsCiAgICAgImNwNTAwIiwKKyAgICAiY3A3MjAiLAogICAgICJjcDczNyIsCiAgICAgImNwNzc1IiwKICAgICAiY3A4NTAiLApAQCAtMTIxNiw2ICsxMjIzLDcgQEAKICAgICAiY3A4NTUiLAogICAgICJjcDg1NiIsCiAgICAgImNwODU3IiwKKyAgICAiY3A4NTgiLAogICAgICJjcDg2MCIsCiAgICAgImNwODYxIiwKICAgICAiY3A4NjIiLApAQCAtMTM0Nyw4ICsxMzU1LDcgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gImxhdGluXzEiCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLnJlcGxhY2UoIl8iLCAiLSIpLCBuYW1lLnJlcGxhY2UoIl8iLCAiLSIpKQogICAgICAgICAgICAgKGJ5dGVzLCBzaXplKSA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKShzKQotICAgICAgICAgICAgaWYgZW5jb2RpbmcgIT0gInVuaWNvZGVfaW50ZXJuYWwiOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKHMpLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoc2l6ZSwgbGVuKHMpLCBlbmNvZGluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihzKSwgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKHNpemUsIGxlbihzKSwgZW5jb2RpbmcpKQogICAgICAgICAgICAgKGNoYXJzLCBzaXplKSA9IGNvZGVjcy5nZXRkZWNvZGVyKGVuY29kaW5nKShieXRlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhcnMsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChjaGFycywgcywgZW5jb2RpbmcpKQogCkBAIC0xNDcxLDMzICsxNDc4LDMzIEBACiAKIGNsYXNzIENoYXJtYXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9kZWNvZGVfd2l0aF9zdHJpbmdfbWFwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsIHUiYWJjIiksCiAgICAgICAgICAgICAodSJhYmMiLCAzKQogICAgICAgICApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwgdSJhYiIpLAogICAgICAgICAgICAgKHUiYWJcdWZmZmQiLCAzKQogICAgICAgICApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwgdSJhYlx1ZmZmZSIpLAogICAgICAgICAgICAgKHUiYWJcdWZmZmQiLCAzKQogICAgICAgICApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLCB1ImFiIiksCiAgICAgICAgICAgICAodSJhYiIsIDMpCiAgICAgICAgICkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsIHUiYWJcdWZmZmUiKSwKICAgICAgICAgICAgICh1ImFiIiwgMykKICAgICAgICAgKQogCiAgICAgICAgIGFsbGJ5dGVzID0gIiIuam9pbihjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKGFsbGJ5dGVzLCAiaWdub3JlIiwgdSIiKSwKICAgICAgICAgICAgICh1IiIsIGxlbihhbGxieXRlcykpCiAgICAgICAgICkKQEAgLTE1MDYsMTQgKzE1MTMsMTQgQEAKICAgICBkZWYgdGVzdF9lbmNvZGVkZmlsZShzZWxmKToKICAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGMzXHhiYyIpCiAgICAgICAgIHdpdGggY29kZWNzLkVuY29kZWRGaWxlKGYsICJsYXRpbi0xIiwgInV0Zi04IikgYXMgZWY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlZi5yZWFkKCksICJceGZjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWYucmVhZCgpLCAiXHhmYyIpCiAKICAgICBkZWYgdGVzdF9zdHJlYW1yZWFkZXJ3cml0ZXIoc2VsZik6CiAgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygiXHhjM1x4YmMiKQogICAgICAgICBpbmZvID0gY29kZWNzLmxvb2t1cCgidXRmLTgiKQogICAgICAgICB3aXRoIGNvZGVjcy5TdHJlYW1SZWFkZXJXcml0ZXIoZiwgaW5mby5zdHJlYW1yZWFkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnN0cmVhbXdyaXRlciwgJ3N0cmljdCcpIGFzIHNydzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNydy5yZWFkKCksIHUiXHhmYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNydy5yZWFkKCksIHUiXHhmYyIpCiAKIAogY2xhc3MgQm9tVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNTMxLDI3ICsxNTM4LDI3IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCiAgICAgICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQogCiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIEJPTSBpcyB3cml0dGVuIGFmdGVyIGEgc2VlaygwKQogICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZi50ZWxsKCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLnRlbGwoKSwgMCkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAgICAgICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSkKIAogICAgICAgICAgICAgIyAoU3RyZWFtV3JpdGVyKSBDaGVjayB0aGF0IHRoZSBCT00gaXMgd3JpdHRlbiBhZnRlciBhIHNlZWsoMCkKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3crJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZXIud3JpdGUoZGF0YVswXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhmLndyaXRlci50ZWxsKCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLndyaXRlci50ZWxsKCksIDApCiAgICAgICAgICAgICAgICAgZi53cml0ZXIuc2VlaygwKQogICAgICAgICAgICAgICAgIGYud3JpdGVyLndyaXRlKGRhdGEpCiAgICAgICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSkKIAogICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBCT00gaXMgbm90IHdyaXR0ZW4gYWZ0ZXIgYSBzZWVrKCkgYXQgYSBwb3NpdGlvbgogICAgICAgICAgICAgIyBkaWZmZXJlbnQgdGhhbiB0aGUgc3RhcnQKQEAgLTE1NjAsNyArMTU2Nyw3IEBACiAgICAgICAgICAgICAgICAgZi5zZWVrKGYudGVsbCgpKQogICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCiAKICAgICAgICAgICAgICMgKFN0cmVhbVdyaXRlcikgQ2hlY2sgdGhhdCB0aGUgQk9NIGlzIG5vdCB3cml0dGVuIGFmdGVyIGEgc2VlaygpCiAgICAgICAgICAgICAjIGF0IGEgcG9zaXRpb24gZGlmZmVyZW50IHRoYW4gdGhlIHN0YXJ0CkBAIC0xNTY5LDcgKzE1NzYsNyBAQAogICAgICAgICAgICAgICAgIGYud3JpdGVyLnNlZWsoZi53cml0ZXIudGVsbCgpKQogICAgICAgICAgICAgICAgIGYud3JpdGVyLndyaXRlKGRhdGEpCiAgICAgICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZW9wLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKaW5kZXggZmZmOTY5Yy4uOTlmZTZmOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgJycnc3VjY2VlZCBpZmYgc3RyIGlzIGEgdmFsaWQgcGllY2Ugb2YgY29kZScnJwogICAgICAgICBpZiBpc19qeXRob246CiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZV9jb21tYW5kKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2RlKQogICAgICAgICAgICAgaWYgc3ltYm9sID09ICJzaW5nbGUiOgogICAgICAgICAgICAgICAgIGQsciA9IHt9LHt9CiAgICAgICAgICAgICAgICAgc2F2ZWRfc3Rkb3V0ID0gc3lzLnN0ZG91dApAQCAtMzcsMTQgKzM3LDE0IEBACiAgICAgICAgICAgICAgICAgY3R4ID0geydhJzogMn0KICAgICAgICAgICAgICAgICBkID0geyAndmFsdWUnOiBldmFsKGNvZGUsY3R4KSB9CiAgICAgICAgICAgICAgICAgciA9IHsgJ3ZhbHVlJzogZXZhbChzdHIsY3R4KSB9Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmlmeV9jYWxsYWJsZXMociksdW5pZnlfY2FsbGFibGVzKGQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmlmeV9jYWxsYWJsZXMociksdW5pZnlfY2FsbGFibGVzKGQpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb21waWxlKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wsIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyggY29tcGlsZV9jb21tYW5kKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wpLCBleHBlY3RlZCkKIAogICAgIGRlZiBhc3NlcnRJbmNvbXBsZXRlKHNlbGYsIHN0ciwgc3ltYm9sPSdzaW5nbGUnKToKICAgICAgICAgJycnc3VjY2VlZCBpZmYgc3RyIGlzIHRoZSBzdGFydCBvZiBhIHZhbGlkIHBpZWNlIG9mIGNvZGUnJycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIGNvbXBpbGVfY29tbWFuZChzdHIsIHN5bWJvbD1zeW1ib2wpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZChzdHIsIHN5bWJvbD1zeW1ib2wpLCBOb25lKQogCiAgICAgZGVmIGFzc2VydEludmFsaWQoc2VsZiwgc3RyLCBzeW1ib2w9J3NpbmdsZScsIGlzX3N5bnRheD0xKToKICAgICAgICAgJycnc3VjY2VlZCBpZmYgc3RyIGlzIHRoZSBzdGFydCBvZiBhbiBpbnZhbGlkIHBpZWNlIG9mIGNvZGUnJycKQEAgLTUyLDIxICs1MiwyMSBAQAogICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kKHN0cixzeW1ib2w9c3ltYm9sKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gdGhyb3duIGZvciBpbnZhbGlkIGNvZGUiKQogICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNfc3ludGF4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3N5bnRheCkKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX3N5bnRheCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfc3ludGF4KQogCiAgICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6CiAgICAgICAgIGF2ID0gc2VsZi5hc3NlcnRWYWxpZAogCiAgICAgICAgICMgc3BlY2lhbCBjYXNlCiAgICAgICAgIGlmIG5vdCBpc19qeXRob246Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb21waWxlX2NvbW1hbmQoIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoInBhc3MiLCAiPGlucHV0PiIsICdzaW5nbGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDRl9ET05UX0lNUExZX0RFREVOVCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb21waWxlX2NvbW1hbmQoIlxuIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNGX0RPTlRfSU1QTFlfREVERU5UKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKCIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDRl9ET05UX0lNUExZX0RFREVOVCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDRl9ET05UX0lNUExZX0RFREVOVCkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBhdigiIikKICAgICAgICAgICAgIGF2KCJcbiIpCkBAIC0yOTAsMTQgKzI5MCwxMCBAQAogICAgICAgICBhaSgiW2kgZm9yIGkgaW4gcmFuZ2UoMTApXSA9ICgxLCAyLCAzKSIpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJhID0gMVxuIiwgImFiYyIsICdzaW5nbGUnKS5jb19maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJhID0gMVxuIiwgImRlZiIsICdzaW5nbGUnKS5jb19maWxlbmFtZSkKLQotICAgIGRlZiB0ZXN0X25vX3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKLSAgICAgICAgY29kZSA9IGNvbXBpbGVfY29tbWFuZCgiJ1xyZm9vXHInIiwgc3ltYm9sPSdldmFsJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHJmb29ccicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiYWJjIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiYSA9IDFcbiIsICJhYmMiKS5jb19maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJhID0gMVxuIiwgImRlZiIsICdzaW5nbGUnKS5jb19maWxlbmFtZSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CmluZGV4IGU4MzAxNWUuLjdmNWRkYjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CkBAIC0xNiwxMSArMTYsMjAgQEAKIAogICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQotICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgICAgIHRleHQgPSBmcC5yZWFkKCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZwOgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgdGV4dCwgZmlsZW5hbWUsICdleGVjJykKIAorICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9IHUiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCisgICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCisgICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kaW5nVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2VyY2lvbi5weSBiL0xpYi90ZXN0L3Rlc3RfY29lcmNpb24ucHkKaW5kZXggZDg0MmVlOS4uMmI1NWM0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2VyY2lvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZXJjaW9uLnB5CkBAIC0yNjYsOSArMjY2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhICVzIGInICUgb3AsIHsnYSc6IGEsICdiJzogYn0pCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmb3JtYXRfcmVzdWx0KHJlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcmVzdWx0KGV2YWwoJ2EgJXMgYicgJSBvcCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzICVzICVzID09ICVzIGZhaWxlZCcgJSAoYSwgb3AsIGIsIHJlcykpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF9yZXN1bHQocmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3Jlc3VsdChldmFsKCdhICVzIGInICUgb3ApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzICVzICVzID09ICVzIGZhaWxlZCcgJSAoYSwgb3AsIGIsIHJlcykpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjb3B5LmNvcHkoYSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGNvcHkuRXJyb3I6CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlR5cGVFcnJvciBub3QgcmFpc2VkIikKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoJ3ogJXM9IGInICUgb3ApCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpcmVzLCB6KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcmVzLCB6KQogCiAgICAgZGVmIHRlc3RfcHJlZml4X2Jpbm9wcyhzZWxmKToKICAgICAgICAgZm9yIGlhLCBhIGluIGVudW1lcmF0ZShjYW5kaWRhdGVzKToKQEAgLTI5Myw5ICsyOTMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzKGEsIGIpJyAlIG9wLCB7J2EnOiBhLCAnYic6IGJ9KQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm9ybWF0X3Jlc3VsdChyZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3Jlc3VsdChldmFsKCclcyhhLCBiKScgJSBvcCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzKCVzLCAlcykgPT0gJXMgZmFpbGVkJyAlIChvcCwgYSwgYiwgcmVzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3Jlc3VsdChyZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcmVzdWx0KGV2YWwoJyVzKGEsIGIpJyAlIG9wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcyglcywgJXMpID09ICVzIGZhaWxlZCcgJSAob3AsIGEsIGIsIHJlcykpCiAKICAgICBkZWYgdGVzdF9jbXB0eXBlcyhzZWxmKToKICAgICAgICAgIyBCdWlsdC1pbiB0cF9jb21wYXJlIHNsb3RzIGV4cGVjdCB0aGVpciBhcmd1bWVudHMgdG8gaGF2ZSB0aGUKQEAgLTMwMywyMSArMzAzLDIxIEBACiAgICAgICAgICMgU0YgIzk4MDM1MgogICAgICAgICBldmlsX2NvZXJjZXIgPSBDb2VyY2VUbyg0MikKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlc2UgZG9uJ3QgY3Jhc2ggYW55IG1vcmUKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoY21wKHUnZmlzaCcsIGV2aWxfY29lcmNlciksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGNtcChzbGljZSgxKSwgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjbXAodSdmaXNoJywgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjbXAoc2xpY2UoMSksIGV2aWxfY29lcmNlciksIDApCiAgICAgICAgICMgLi4uYnV0IHRoYXQgdGhpcyBzdGlsbCB3b3JrcwogICAgICAgICBjbGFzcyBXYWNreUNvbXBhcmVyKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19jbXBfXyhzbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ob3RoZXIgPT0gNDIsICdleHBlY3RlZCBldmlsX2NvZXJjZXIsIGdvdCAlcicgJSBvdGhlcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIgPT0gNDIsICdleHBlY3RlZCBldmlsX2NvZXJjZXIsIGdvdCAlcicgJSBvdGhlcikKICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgSW52YWxpZCBjbXAgbWFrZXMgdGhpcyB1bmhhc2hhYmxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtcChXYWNreUNvbXBhcmVyKCksIGV2aWxfY29lcmNlciksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKFdhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKICAgICAgICAgIyAuLi5hbmQgY2xhc3NpYyBjbGFzc2VzIHRvbywgc2luY2UgdGhhdCBjb2RlIHBhdGggaXMgYSBsaXR0bGUgZGlmZmVyZW50CiAgICAgICAgIGNsYXNzIENsYXNzaWNXYWNreUNvbXBhcmVyOgogICAgICAgICAgICAgZGVmIF9fY21wX18oc2xmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG90aGVyID09IDQyLCAnZXhwZWN0ZWQgZXZpbF9jb2VyY2VyLCBnb3QgJXInICUgb3RoZXIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID09IDQyLCAnZXhwZWN0ZWQgZXZpbF9jb2VyY2VyLCBnb3QgJXInICUgb3RoZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY21wKENsYXNzaWNXYWNreUNvbXBhcmVyKCksIGV2aWxfY29lcmNlciksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKENsYXNzaWNXYWNreUNvbXBhcmVyKCksIGV2aWxfY29lcmNlciksIDApCiAKICAgICBkZWYgdGVzdF9pbmZpbml0ZV9yZWNfY2xhc3NpY19jbGFzc2VzKHNlbGYpOgogICAgICAgICAjIGlmIF9fY29lcmNlX18oKSByZXR1cm5zIGl0cyBhcmd1bWVudHMgcmV2ZXJzZWQgaXQgY2F1c2VzIGFuIGluZmluaXRlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQppbmRleCBmNDhhZTVhLi5mNmE0M2ZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKQEAgLTEsOSArMSwxNCBAQAorCiBpbXBvcnQgdW5pdHRlc3QsIGRvY3Rlc3QsIG9wZXJhdG9yCitpbXBvcnQgaW5zcGVjdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIENvdW50ZXIsIE9yZGVyZWREaWN0Citmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKIGltcG9ydCBwaWNrbGUsIGNQaWNrbGUsIGNvcHkKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UsIHNodWZmbGUKIGltcG9ydCBrZXl3b3JkCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNpemVkLCBDb250YWluZXIsIENhbGxhYmxlCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXQsIE11dGFibGVTZXQKQEAgLTE3LDcgKzIyLDYgQEAKICAgICBkZWYgdGVzdF9mYWN0b3J5KHNlbGYpOgogICAgICAgICBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19uYW1lX18sICdQb2ludCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19kb2NfXywgJ1BvaW50KHgsIHkpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX3Nsb3RzX18sICgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fbW9kdWxlX18sIF9fbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fZ2V0aXRlbV9fLCB0dXBsZS5fX2dldGl0ZW1fXykKQEAgLTM3LDEzICs0MSwzMCBAQAogICAgICAgICBuYW1lZHR1cGxlKCdfJywgJ2EgYiBjJykgICAgICAgICMgVGVzdCBsZWFkaW5nIHVuZGVyc2NvcmVzIGluIGEgdHlwZW5hbWUKIAogICAgICAgICBudCA9IG5hbWVkdHVwbGUoJ250JywgdSd0aGUgcXVpY2sgYnJvd24gZm94JykgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdW5pY29kZSBpbnB1dAotICAgICAgICBzZWxmLmFzc2VydF8oInUnIiBub3QgaW4gcmVwcihudC5fZmllbGRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidSciLCByZXByKG50Ll9maWVsZHMpKQogICAgICAgICBudCA9IG5hbWVkdHVwbGUoJ250JywgKHUndGhlJywgdSdxdWljaycpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdW5pY29kZSBpbnB1dAotICAgICAgICBzZWxmLmFzc2VydF8oInUnIiBub3QgaW4gcmVwcihudC5fZmllbGRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidSciLCByZXByKG50Ll9maWVsZHMpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUG9pbnQuX21ha2UsIFsxMV0pICAgICAgICAgICAgICAgICAgICAgIyBjYXRjaCB0b28gZmV3IGFyZ3MKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludC5fbWFrZSwgWzExLCAyMiwgMzNdKSAgICAgICAgICAgICAjIGNhdGNoIHRvbyBtYW55IGFyZ3MKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2ZhY3RvcnlfZG9jX2F0dHIoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2RvY19fLCAnUG9pbnQoeCwgeSknKQorCisgICAgZGVmIHRlc3RfbmFtZV9maXhlcihzZWxmKToKKyAgICAgICAgZm9yIHNwZWMsIHJlbmFtZWQgaW4gWworICAgICAgICAgICAgWygnZWZnJywgJ2claGknKSwgICgnZWZnJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgd2l0aCBub24tYWxwaGEgY2hhcgorICAgICAgICAgICAgWygnYWJjJywgJ2NsYXNzJyksICgnYWJjJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgaGFzIGtleXdvcmQKKyAgICAgICAgICAgIFsoJzhlZmcnLCAnOWdoaScpLCAoJ18wJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkIHN0YXJ0cyB3aXRoIGRpZ2l0CisgICAgICAgICAgICBbKCdhYmMnLCAnX2VmZycpLCAoJ2FiYycsICdfMScpXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCB3aXRoIGxlYWRpbmcgdW5kZXJzY29yZQorICAgICAgICAgICAgWygnYWJjJywgJ2VmZycsICdlZmcnLCAnZ2hpJyksICgnYWJjJywgJ2VmZycsICdfMicsICdnaGknKV0sICAgICMgZHVwbGljYXRlIGZpZWxkCisgICAgICAgICAgICBbKCdhYmMnLCAnJywgJ3gnKSwgKCdhYmMnLCAnXzEnLCAneCcpXSwgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZG5hbWUgaXMgYSBzcGFjZQorICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lZHR1cGxlKCdOVCcsIHNwZWMsIHJlbmFtZT1UcnVlKS5fZmllbGRzLCByZW5hbWVkKQorCiAgICAgZGVmIHRlc3RfaW5zdGFuY2Uoc2VsZik6CiAgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKICAgICAgICAgcCA9IFBvaW50KDExLCAyMikKQEAgLTU3LDggKzc4LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoWFhYPTEsIHk9MiknLCBsb2NhbHMoKSkgICAjIHdyb25nIGtleXdvcmQgYXJndW1lbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoeD0xKScsIGxvY2FscygpKSAgICAgICAgICAjIG1pc3Npbmcga2V5d29yZCBhcmd1bWVudAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocCksICdQb2ludCh4PTExLCB5PTIyKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnX19kaWN0X18nIG5vdCBpbiBkaXIocCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJpZnkgaW5zdGFuY2UgaGFzIG5vIGRpY3QKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdfX3dlYWtyZWZfXycgbm90IGluIGRpcihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX19kaWN0X18nLCBkaXIocCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJpZnkgaW5zdGFuY2UgaGFzIG5vIGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX193ZWFrcmVmX18nLCBkaXIocCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUG9pbnQuX21ha2UoWzExLCAyMl0pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9tYWtlIGNsYXNzbWV0aG9kCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fZmllbGRzLCAoJ3gnLCAneScpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9maWVsZHMgYXR0cmlidXRlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fcmVwbGFjZSh4PTEpLCAoMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9yZXBsYWNlIG1ldGhvZApAQCAtODUsNyArMTA2LDcgQEAKICAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQogICAgICAgICBwID0gUG9pbnQoMTEsIDIyKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHAsIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAsIHR1cGxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsICgxMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWF0Y2hlcyBhIHJlYWwgdHVwbGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShwKSwgKDExLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvZXJjYWJsZSB0byBhIHJlYWwgdHVwbGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHApLCBbMTEsIDIyXSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvZXJjYWJsZSB0byBhIGxpc3QKQEAgLTIxNSwyMSArMjM2LDIxIEBACiAKICAgICAgICAgIyBuZXctc3R5bGUgY2xhc3MKICAgICAgICAgQyA9IHR5cGUoJ0MnLCAob2JqZWN0LCksIHtuYW1lOiBzdHVifSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoQygpLCBhYmMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoQygpLCBhYmMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIGFiYykpCiAgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzCiAgICAgICAgIGNsYXNzIEM6IHBhc3MKICAgICAgICAgc2V0YXR0cihDLCBuYW1lLCBzdHViKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShDKCksIGFiYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShDKCksIGFiYykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgYWJjKSkKIAogICAgICAgICAjIG5ldy1zdHlsZSBjbGFzcwogICAgICAgICBDID0gdHlwZSgnQycsIChvYmplY3QsKSwgeydfX2hhc2hfXyc6IE5vbmV9KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoQygpLCBhYmMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoQygpLCBhYmMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBhYmMpKQogICAgICAgICAjIG9sZC1zdHlsZSBjbGFzcwogICAgICAgICBjbGFzcyBDOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShDKCksIGFiYykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShDKCksIGFiYykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIGFiYykpCiAKICAgICBkZWYgdmFsaWRhdGVfY29tcGFyaXNvbihzZWxmLCBpbnN0YW5jZSk6CkBAIC0yNjksOCArMjkwLDggQEAKICAgICAgICAgIyBDaGVjayBzb21lIG5vbi1oYXNoYWJsZXMKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbbGlzdCgpLCBzZXQoKSwgZGljdCgpXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UoeCwgSGFzaGFibGUpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgSGFzaGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgSGFzaGFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICAjIENoZWNrIHNvbWUgaGFzaGFibGVzCiAgICAgICAgIHNhbXBsZXMgPSBbTm9uZSwKICAgICAgICAgICAgICAgICAgICBpbnQoKSwgZmxvYXQoKSwgY29tcGxleCgpLApAQCAtMjc5LDggKzMwMCw4IEBACiAgICAgICAgICAgICAgICAgICAgaW50LCBsaXN0LCBvYmplY3QsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgSGFzaGFibGUpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3ModHlwZSh4KSwgSGFzaGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEhhc2hhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgSGFzaGFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEhhc2hhYmxlKQogICAgICAgICAjIENoZWNrIGRpcmVjdCBzdWJjbGFzc2luZwogICAgICAgICBjbGFzcyBIKEhhc2hhYmxlKToKQEAgLTI4OCw3ICszMDksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihILCBzZWxmKS5fX2hhc2hfXygpCiAgICAgICAgICAgICBfX2VxX18gPSBIYXNoYWJsZS5fX2VxX18gIyBTaWxlbmNlIFB5M2sgd2FybmluZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goSCgpKSwgMCkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhpbnQsIEgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBIKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEhhc2hhYmxlLCAnX19oYXNoX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSGFzaGFibGUsICdfX2hhc2hfXycpCiAKQEAgLTI5Niw4ICszMTcsOCBAQAogICAgICAgICAjIENoZWNrIHNvbWUgbm9uLWl0ZXJhYmxlcwogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWpdCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZSh4LCBJdGVyYWJsZSksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBJdGVyYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYWJsZSksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgICMgQ2hlY2sgc29tZSBpdGVyYWJsZXMKICAgICAgICAgc2FtcGxlcyA9IFtzdHIoKSwKICAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLApAQCAtMzA2LDE0ICszMjcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgSXRlcmFibGUpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEl0ZXJhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICAjIENoZWNrIGRpcmVjdCBzdWJjbGFzc2luZwogICAgICAgICBjbGFzcyBJKEl0ZXJhYmxlKToKICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoSSwgc2VsZikuX19pdGVyX18oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoSSgpKSwgW10pCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3Moc3RyLCBJKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHN0ciwgSSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYWJsZSwgJ19faXRlcl9fJykKICAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKEl0ZXJhYmxlLCAnX19pdGVyX18nKQogCkBAIC0zMjEsOCArMzQyLDggQEAKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgNDIsIDMuMTQsIDFqLCAiIi5lbmNvZGUoJ2FzY2lpJyksICIiLCAoKSwgW10sCiAgICAgICAgICAgICB7fSwgc2V0KCldCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZSh4LCBJdGVyYXRvciksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBJdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNhbXBsZXMgPSBbaXRlcihzdHIoKSksCiAgICAgICAgICAgICAgICAgICAgaXRlcih0dXBsZSgpKSwgaXRlcihsaXN0KCkpLCBpdGVyKGRpY3QoKSksCiAgICAgICAgICAgICAgICAgICAgaXRlcihzZXQoKSksIGl0ZXIoZnJvemVuc2V0KCkpLApAQCAtMzMyLDEwICszNTMsMjEgQEAKICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgSXRlcmF0b3IpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmF0b3IpLCByZXByKHR5cGUoeCkpKQotICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoSXRlcmF0b3IsICduZXh0JykKLSAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKEl0ZXJhdG9yLCAnbmV4dCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYXRvciwgJ25leHQnLCAnX19pdGVyX18nKQorCisgICAgICAgICMgSXNzdWUgMTA1NjUKKyAgICAgICAgY2xhc3MgTmV4dE9ubHk6CisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5leHRPbmx5KCksIEl0ZXJhdG9yKQorICAgICAgICBjbGFzcyBOZXh0T25seU5ldyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShOZXh0T25seU5ldygpLCBJdGVyYXRvcikKIAogICAgIGRlZiB0ZXN0X1NpemVkKHNlbGYpOgogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCkBAIC0zNDMsMTUgKzM3NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHgsIFNpemVkKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIFNpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIFNpemVkKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2FtcGxlcyA9IFtzdHIoKSwKICAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLAogICAgICAgICAgICAgICAgICAgIGRpY3QoKS5rZXlzKCksIGRpY3QoKS5pdGVtcygpLCBkaWN0KCkudmFsdWVzKCksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoeCwgU2l6ZWQpLCByZXByKHgpKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIFNpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2l6ZWQsICdfX2xlbl9fJykKICAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKFNpemVkLCAnX19sZW5fXycpCiAKQEAgLTM2MSwxNSArMzkzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzaW5zdGFuY2UoeCwgQ29udGFpbmVyKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3ModHlwZSh4KSwgQ29udGFpbmVyKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBDb250YWluZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ29udGFpbmVyKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2FtcGxlcyA9IFtzdHIoKSwKICAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLAogICAgICAgICAgICAgICAgICAgIGRpY3QoKS5rZXlzKCksIGRpY3QoKS5pdGVtcygpLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHgsIENvbnRhaW5lciksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIENvbnRhaW5lcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIENvbnRhaW5lciksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhDb250YWluZXIsICdfX2NvbnRhaW5zX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoQ29udGFpbmVyLCAnX19jb250YWluc19fJykKIApAQCAtMzgwLDE2ICs0MTIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNpbnN0YW5jZSh4LCBDYWxsYWJsZSksIHJlcHIoeCkpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBDYWxsYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBDYWxsYWJsZSksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNhbXBsZXMgPSBbbGFtYmRhOiBOb25lLAogICAgICAgICAgICAgICAgICAgIHR5cGUsIGludCwgb2JqZWN0LAogICAgICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCwgW10uYXBwZW5kLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHgsIENhbGxhYmxlKSwgcmVwcih4KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDYWxsYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKENhbGxhYmxlLCAnX19jYWxsX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoQ2FsbGFibGUsICdfX2NhbGxfXycpCiAKQEAgLTM5NywxNyArNDI5LDE3IEBACiAgICAgICAgIGZvciBCIGluIEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IsIFNpemVkLCBDb250YWluZXIsIENhbGxhYmxlOgogICAgICAgICAgICAgY2xhc3MgQyhCKToKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhDLCBCKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoaW50LCBDKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIEIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGludCwgQykpCiAKICAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb24oc2VsZik6CiAgICAgICAgIGZvciBCIGluIEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IsIFNpemVkLCBDb250YWluZXIsIENhbGxhYmxlOgogICAgICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gdHlwZQogICAgICAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAgIyBNYWtlIHN1cmUgaXQgaXNuJ3QgaGFzaGFibGUgYnkgZGVmYXVsdAotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhDLCBCKSwgQi5fX25hbWVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBCKSwgQi5fX25hbWVfXykKICAgICAgICAgICAgIEIucmVnaXN0ZXIoQykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKEMsIEIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQikpCiAKIGNsYXNzIFdpdGhTZXQoTXV0YWJsZVNldCk6CiAKQEAgLTQzNyw4ICs0NjksOCBAQAogCiAgICAgZGVmIHRlc3RfU2V0KHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFtzZXQsIGZyb3plbnNldF06Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzYW1wbGUoKSwgU2V0KSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNhbXBsZSwgU2V0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgU2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXQpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2V0LCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nKQogICAgICAgICBjbGFzcyBNeVNldChTZXQpOgogICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKQEAgLTQ2MiwxMyArNDk0LDEzIEBACiAgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2goKQogICAgICAgICBhLCBiID0gT25lVHdvVGhyZWVTZXQoKSwgT25lVHdvVGhyZWVTZXQoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzaChhKSA9PSBoYXNoKGIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzaChhKSA9PSBoYXNoKGIpKQogCiAgICAgZGVmIHRlc3RfTXV0YWJsZVNldChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2V0KCksIE11dGFibGVTZXQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzZXQsIE11dGFibGVTZXQpKQotICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKGZyb3plbnNldCgpLCBNdXRhYmxlU2V0KSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhmcm96ZW5zZXQsIE11dGFibGVTZXQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2V0KCksIE11dGFibGVTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNldCwgTXV0YWJsZVNldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmcm96ZW5zZXQoKSwgTXV0YWJsZVNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGZyb3plbnNldCwgTXV0YWJsZVNldCkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNdXRhYmxlU2V0LCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ2FkZCcsICdkaXNjYXJkJykKIApAQCAtNTA1LDEwICs1MzcsMjUgQEAKICAgICAgICAgcyA9IE15U2V0KFs1LDQzLDIsMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5wb3AoKSwgMSkKIAorICAgIGRlZiB0ZXN0X2lzc3VlODc1MChzZWxmKToKKyAgICAgICAgZW1wdHkgPSBXaXRoU2V0KCkKKyAgICAgICAgZnVsbCA9IFdpdGhTZXQocmFuZ2UoMTApKQorICAgICAgICBzID0gV2l0aFNldChmdWxsKQorICAgICAgICBzIC09IHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBlbXB0eSkKKyAgICAgICAgcyA9IFdpdGhTZXQoZnVsbCkKKyAgICAgICAgcyBePSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZW1wdHkpCisgICAgICAgIHMgPSBXaXRoU2V0KGZ1bGwpCisgICAgICAgIHMgJj0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGZ1bGwpCisgICAgICAgIHMgfD0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGZ1bGwpCisKICAgICBkZWYgdGVzdF9NYXBwaW5nKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFtkaWN0XToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHNhbXBsZSgpLCBNYXBwaW5nKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNhbXBsZSwgTWFwcGluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE1hcHBpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIE1hcHBpbmcpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTWFwcGluZywgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdfX2dldGl0ZW1fXycpCiAgICAgICAgIGNsYXNzIE15TWFwcGluZyhjb2xsZWN0aW9ucy5NYXBwaW5nKToKQEAgLTUyMiwzOCArNTY5LDQ2MyBAQAogCiAgICAgZGVmIHRlc3RfTXV0YWJsZU1hcHBpbmcoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW2RpY3RdOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVNYXBwaW5nKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZU1hcHBpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlTWFwcGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZU1hcHBpbmcpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTXV0YWJsZU1hcHBpbmcsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nLCAnX19zZXRpdGVtX18nLCAnX19kZWxpdGVtX18nKQogCiAgICAgZGVmIHRlc3RfU2VxdWVuY2Uoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW3R1cGxlLCBsaXN0LCBzdHJdOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2FtcGxlKCksIFNlcXVlbmNlKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKHNhbXBsZSwgU2VxdWVuY2UpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhiYXNlc3RyaW5nLCBTZXF1ZW5jZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyh4cmFuZ2UsIFNlcXVlbmNlKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3Moc3RyLCBTZXF1ZW5jZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIFNlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGJhc2VzdHJpbmcsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHhyYW5nZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKIAogICAgIGRlZiB0ZXN0X011dGFibGVTZXF1ZW5jZShzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbdHVwbGUsIHN0cl06Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpc2luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCiAgICAgICAgIGZvciBzYW1wbGUgaW4gW2xpc3RdOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzc3ViY2xhc3MoYmFzZXN0cmluZywgTXV0YWJsZVNlcXVlbmNlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZVNlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoYmFzZXN0cmluZywgTXV0YWJsZVNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE11dGFibGVTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsCiAgICAgICAgICAgICAnX19sZW5fXycsICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycsICdpbnNlcnQnKQogCitjbGFzcyBUZXN0Q291bnRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGMgPSBDb3VudGVyKCdhYmNhYmEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoeydhJzozICwgJ2InOiAyLCAnYyc6IDF9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9MywgYj0yLCBjPTEpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIE1hcHBpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKENvdW50ZXIsIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDb3VudGVyLCBNYXBwaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGMudmFsdWVzKCkpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLnZhbHVlcygpKSwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYyksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYy5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1snYiddLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ3onXSwgMCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmhhc19rZXkoJ2MnKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5oYXNfa2V5KCd6JyksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX19jb250YWluc19fKCdjJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fX2NvbnRhaW5zX18oJ3onKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXQoJ2InLCAxMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXQoJ3onLCAxMCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT0zLCBiPTIsIGM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgIkNvdW50ZXIoeydhJzogMywgJ2InOiAyLCAnYyc6IDF9KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tb3N0X2NvbW1vbigpLCBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV0pCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1vc3RfY29tbW9uKGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMyksICgnYicsIDIpLCAoJ2MnLCAxKV1bOmldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oc29ydGVkKGMuZWxlbWVudHMoKSkpLCAnYWFhYmJjJykKKyAgICAgICAgY1snYSddICs9IDEgICAgICAgICAjIGluY3JlbWVudCBhbiBleGlzdGluZyB2YWx1ZQorICAgICAgICBjWydiJ10gLT0gMiAgICAgICAgICMgc3ViIGV4aXN0aW5nIHZhbHVlIHRvIHplcm8KKyAgICAgICAgZGVsIGNbJ2MnXSAgICAgICAgICAjIHJlbW92ZSBhbiBlbnRyeQorICAgICAgICBkZWwgY1snYyddICAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgZGVsIGRvZXNuJ3QgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgY1snZCddIC09IDIgICAgICAgICAjIHN1YiBmcm9tIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBjWydlJ10gPSAtNSAgICAgICAgICMgZGlyZWN0bHkgYXNzaWduIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBjWydmJ10gKz0gNCAgICAgICAgICMgYWRkIHRvIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT00LCBiPTAsIGQ9LTIsIGU9LTUsIGY9NCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSksICdhYWFhZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3AoJ2YnKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZicsIGMpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgZWxlbSwgY250ID0gYy5wb3BpdGVtKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYykKKyAgICAgICAgYy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ0NvdW50ZXIoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIENvdW50ZXIuZnJvbWtleXMsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisgICAgICAgIGMudXBkYXRlKGRpY3QoYT01LCBiPTMpKQorICAgICAgICBjLnVwZGF0ZShjPTEpCisgICAgICAgIGMudXBkYXRlKENvdW50ZXIoJ2EnICogNTAgKyAnYicgKiAzMCkpCisgICAgICAgIGMudXBkYXRlKCkgICAgICAgICAgIyB0ZXN0IGNhc2Ugd2l0aCBubyBhcmdzCisgICAgICAgIGMuX19pbml0X18oJ2EnICogNTAwICsgJ2InICogMzAwKQorICAgICAgICBjLl9faW5pdF9fKCdjZGMnKQorICAgICAgICBjLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBkaWN0KGE9NTU1LCBiPTMzMywgYz0zLCBkPTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2V0ZGVmYXVsdCgnZCcsIDUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ2QnXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNldGRlZmF1bHQoJ2UnLCA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWydlJ10sIDUpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY291bnRlcnMgYXJlIGNvcHlhYmxlLCBkZWVwY29weWFibGUsIHBpY2tsYWJsZSwgYW5kCisgICAgICAgICNoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKKyAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKKyAgICAgICAgdXBkYXRlX3Rlc3QgPSBDb3VudGVyKCkKKyAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKHdvcmRzKQorICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCisgICAgICAgICAgICAgICAgICAgIHdvcmRzLmNvcHkoKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weSh3b3JkcyksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIC0xKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAorICAgICAgICAgICAgICAgICAgICBjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMod29yZHMsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAyKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKKyAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAorICAgICAgICAgICAgICAgICAgICBDb3VudGVyKHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgXSk6CisgICAgICAgICAgICBtc2cgPSAoaSwgZHVwLCB3b3JkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKHdvcmRzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKHdvcmRzKSkKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25zKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdG86IHNldCwgbGlzdCwgZGljdAorICAgICAgICBzID0gJ3NoZSBzZWxscyBzZWEgc2hlbGxzIGJ5IHRoZSBzZWEgc2hvcmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKENvdW50ZXIocykuZWxlbWVudHMoKSksIHNvcnRlZChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoQ291bnRlcihzKSksIHNvcnRlZChzZXQocykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoQ291bnRlcihzKSksIGRpY3QoQ291bnRlcihzKS5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoQ291bnRlcihzKSksIHNldChzKSkKKworICAgIGRlZiB0ZXN0X2ludmFyaWFudF9mb3JfdGhlX2luX29wZXJhdG9yKHNlbGYpOgorICAgICAgICBjID0gQ291bnRlcihhPTEwLCBiPS0yLCBjPTApCisgICAgICAgIGZvciBlbGVtIGluIGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBpbiBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBjKQorCisgICAgZGVmIHRlc3RfbXVsdGlzZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhZGRpbmcgYSB6ZXJvIGNvdW50ZXIgd2lsbCBzdHJpcCB6ZXJvcyBhbmQgbmVnYXRpdmVzCisgICAgICAgIGMgPSBDb3VudGVyKGE9MTAsIGI9LTIsIGM9MCkgKyBDb3VudGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCBkaWN0KGE9MTApKQorCisgICAgICAgIGVsZW1lbnRzID0gJ2FiY2QnCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgIyB0ZXN0IHJhbmRvbSBwYWlycyBvZiBtdWx0aXNldHMKKyAgICAgICAgICAgIHAgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgtMiw0KSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgcC51cGRhdGUoZT0xLCBmPS0xLCBnPTApCisgICAgICAgICAgICBxID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoLTIsNCkpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIHEudXBkYXRlKGg9MSwgaT0tMSwgaj0wKQorICAgICAgICAgICAgZm9yIGNvdW50ZXJvcCwgbnVtYmVyb3AgaW4gWworICAgICAgICAgICAgICAgIChDb3VudGVyLl9fYWRkX18sIGxhbWJkYSB4LCB5OiBtYXgoMCwgeCt5KSksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19zdWJfXywgbGFtYmRhIHgsIHk6IG1heCgwLCB4LXkpKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX29yX18sIGxhbWJkYSB4LCB5OiBtYXgoMCx4LHkpKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX2FuZF9fLCBsYW1iZGEgeCwgeTogbWF4KDAsIG1pbih4LHkpKSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvdW50ZXJvcChwLCBxKQorICAgICAgICAgICAgICAgIGZvciB4IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlcm9wKHBbeF0sIHFbeF0pLCByZXN1bHRbeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50ZXJvcCwgeCwgcCwgcSkpCisgICAgICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCByZXN1bHRzIGV4Y2x1ZGUgbm9uLXBvc2l0aXZlIGNvdW50cworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4PjAgZm9yIHggaW4gcmVzdWx0LnZhbHVlcygpKQorCisgICAgICAgIGVsZW1lbnRzID0gJ2FiY2RlZicKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgcmFuZG9tIG11bHRpc2V0cyB3aXRoIG5vIHJlcGVhdHMgYXJlIGV4YWN0bHkgbGlrZSBzZXRzCisgICAgICAgICAgICBwID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoMCwgMikpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIHEgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgwLCAyKSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgZm9yIGNvdW50ZXJvcCwgc2V0b3AgaW4gWworICAgICAgICAgICAgICAgIChDb3VudGVyLl9fc3ViX18sIHNldC5fX3N1Yl9fKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX29yX18sIHNldC5fX29yX18pLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fYW5kX18sIHNldC5fX2FuZF9fKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICAgICAgY291bnRlcl9yZXN1bHQgPSBjb3VudGVyb3AocCwgcSkKKyAgICAgICAgICAgICAgICBzZXRfcmVzdWx0ID0gc2V0b3Aoc2V0KHAuZWxlbWVudHMoKSksIHNldChxLmVsZW1lbnRzKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlcl9yZXN1bHQsIGRpY3QuZnJvbWtleXMoc2V0X3Jlc3VsdCwgMSkpCisKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoYT0tNSwgYj0wLCBjPTUsIGQ9MTAsIGU9MTUsZz00MCkKKyAgICAgICAgYy5zdWJ0cmFjdChhPTEsIGI9MiwgYz0tMywgZD0xMCwgZT0yMCwgZj0zMCwgaD0tNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS02LCBiPS0yLCBjPTgsIGQ9MCwgZT0tNSwgZj0tMzAsIGc9NDAsIGg9NTApKQorICAgICAgICBjID0gQ291bnRlcihhPS01LCBiPTAsIGM9NSwgZD0xMCwgZT0xNSxnPTQwKQorICAgICAgICBjLnN1YnRyYWN0KENvdW50ZXIoYT0xLCBiPTIsIGM9LTMsIGQ9MTAsIGU9MjAsIGY9MzAsIGg9LTUwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTYsIGI9LTIsIGM9OCwgZD0wLCBlPS01LCBmPS0zMCwgZz00MCwgaD01MCkpCisgICAgICAgIGMgPSBDb3VudGVyKCdhYWFiYmNkJykKKyAgICAgICAgYy5zdWJ0cmFjdCgnYWFhYWJiY2NlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTEsIGI9MCwgYz0tMSwgZD0xLCBlPS0xKSkKKworY2xhc3MgVGVzdE9yZGVyZWREaWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KGRpY3QocGFpcnMpKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAjIGRpY3QgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoT3JkZXJlZERpY3QoKipkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICMga3dkcyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QocGFpcnMpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9MywgZT01KS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICMgbWl4ZWQgaW5wdXQKKworICAgICAgICAjIG1ha2Ugc3VyZSBubyBwb3NpdGlvbmFsIGFyZ3MgY29uZmxpY3Qgd2l0aCBwb3NzaWJsZSBrd2RhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhcmdzcGVjKE9yZGVyZWREaWN0Ll9fZGljdF9fWydfX2luaXRfXyddKS5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc2VsZiddKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZGlyZWN0IGNhbGxzIHRvIF9faW5pdF9fIGRvIG5vdCBjbGVhciBwcmV2aW91cyBjb250ZW50cworICAgICAgICBkID0gT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQ0KSwgKCdlJywgNTUpXSkKKyAgICAgICAgZC5fX2luaXRfXyhbKCdlJywgNSksICgnZicsIDYpXSwgZz03LCBkPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLml0ZW1zKCkpLAorICAgICAgICAgICAgWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNiksICgnZycsIDcpXSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgT3JkZXJlZERpY3QoKS51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKV0sIE5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHBhaXJzID0gWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShkaWN0KHBhaXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGljdCBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKCoqZGljdChwYWlycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGt3ZHMgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFpcnMgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCA5KSwgKCdkJywgNCldLCBjPTMsIGU9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWl4ZWQgaW5wdXQKKworICAgICAgICAjIElzc3VlIDkxMzc6IE5hbWVkIGFyZ3VtZW50IGNhbGxlZCAnb3RoZXInIG9yICdzZWxmJworICAgICAgICAjIHNob3VsZG4ndCBiZSB0cmVhdGVkIHNwZWNpYWxseS4KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShzZWxmPTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ3NlbGYnLCAyMyldKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKG90aGVyPXt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ290aGVyJywge30pXSkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShyZWQ9NSwgYmx1ZT02LCBvdGhlcj03LCBzZWxmPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3Qob2QuaXRlbXMoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2JsdWUnLCA2KSwgKCdvdGhlcicsIDcpLCAoJ3JlZCcsIDUpLCAoJ3NlbGYnLCA4KV0pCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBkaXJlY3QgY2FsbHMgdG8gdXBkYXRlIGRvIG5vdCBjbGVhciBwcmV2aW91cyBjb250ZW50cworICAgICAgICAjIGFkZCB0aGF0IHVwZGF0ZXMgaXRlbXMgYXJlIG5vdCBtb3ZlZCB0byB0aGUgZW5kCisgICAgICAgIGQgPSBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNDQpLCAoJ2UnLCA1NSldKQorICAgICAgICBkLnVwZGF0ZShbKCdlJywgNSksICgnZicsIDYpXSwgZz03LCBkPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLml0ZW1zKCkpLAorICAgICAgICAgICAgWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNiksICgnZycsIDcpXSkKKworICAgIGRlZiB0ZXN0X2FiYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKE9yZGVyZWREaWN0KCksIE11dGFibGVNYXBwaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPcmRlcmVkRGljdCwgTXV0YWJsZU1hcHBpbmcpKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgbGVuKHBhaXJzKSkKKyAgICAgICAgb2QuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgb2QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlyc1s6Ml0gKyBwYWlyc1szOl0pCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2EnLCA0KSwgKCdlJywgNSldKQorICAgICAgICBvZFsnYyddID0gMTAgICAgICAgICAgICMgZXhpc3RpbmcgZWxlbWVudAorICAgICAgICBvZFsnZiddID0gMjAgICAgICAgICAgICMgbmV3IGVsZW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDEwKSwgKCdhJywgNCksICgnZScsIDUpLCAoJ2YnLCAyMCldKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3JzKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Qua2V5cygpWzpdLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QudmFsdWVzKClbOl0sIFt0WzFdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5pdGVtcygpWzpdLCBwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZXJrZXlzKCkpLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVydmFsdWVzKCkpLCBbdFsxXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVyaXRlbXMoKSksIHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdFswXSBmb3IgdCBpbiByZXZlcnNlZChwYWlycyldKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcGl0ZW0oKSwgcGFpcnMucG9wKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBrLCB2ID0gcGFpcnMucG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGspLCB2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLnBvcCgneHl6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcChrLCAxMjM0NSksIDEyMzQ1KQorCisgICAgICAgICMgbWFrZSBzdXJlIHBvcCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKKyAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBtID0gTWlzc2luZyhhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2InLCA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIDYpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgbS5wb3AoJ2EnKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kMSA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIG9kMikgICAgICAgICAgIyBzYW1lIG9yZGVyIGltcGxpZXMgZXF1YWxpdHkKKyAgICAgICAgcGFpcnMgPSBwYWlyc1syOl0gKyBwYWlyc1s6Ml0KKyAgICAgICAgb2QyID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBvZDIpICAgICAgICMgZGlmZmVyZW50IG9yZGVyIGltcGxpZXMgaW5lcXVhbGl0eQorICAgICAgICAjIGNvbXBhcmlzb24gdG8gcmVndWxhciBkaWN0IGlzIG5vdCBvcmRlciBzZW5zaXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIGRpY3Qob2QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KG9kMiksIG9kMSkKKyAgICAgICAgIyBkaWZmZXJlbnQgbGVuZ3RoIGltcGxpZWQgaW5lcXVhbGl0eQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgT3JkZXJlZERpY3QocGFpcnNbOi0xXSkpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgb3JkZXJlZCBkaWN0cyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLAorICAgICAgICAjIGFuZCBoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgdXBkYXRlX3Rlc3QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZShvZCkKKyAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWworICAgICAgICAgICAgICAgICAgICBvZC5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgIGNvcHkuY29weShvZCksCisgICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkob2QpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpLAorICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KG9kKSwKKyAgICAgICAgICAgICAgICAgICAgXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAuaXRlbXMoKSksIGxpc3Qob2QuaXRlbXMoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4ob2QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUob2QpKQorCisgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KKyAgICAgICAgIyBJbiB5YW1sLCBsaXN0cyBhcmUgbmF0aXZlIGJ1dCB0dXBsZXMgYXJlIG5vdC4KKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgIyB5YW1sLmR1bXAob2QpIC0tPgorICAgICAgICAjICchIXB5dGhvbi9vYmplY3QvYXBwbHk6X19tYWluX18uT3JkZXJlZERpY3Rcbi0gLSBbYSwgMV1cbiAgLSBbYiwgMl1cbicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbCh0eXBlKHBhaXIpPT1saXN0IGZvciBwYWlyIGluIG9kLl9fcmVkdWNlX18oKVsxXSkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Vfbm90X3Rvb19mYXQoc2VsZik6CisgICAgICAgICMgZG8gbm90IHNhdmUgaW5zdGFuY2UgZGljdGlvbmFyeSBpZiBub3QgbmVlZGVkCisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDIpCisgICAgICAgIG9kLnggPSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAzKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCisgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKG9kKSksIG9kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoT3JkZXJlZERpY3QoKSksICJPcmRlcmVkRGljdCgpIikKKworICAgIGRlZiB0ZXN0X3JlcHJfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjOTgyNgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnKQorICAgICAgICBvZFsneCddID0gb2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9kKSwKKyAgICAgICAgICAgICJPcmRlcmVkRGljdChbKCdhJywgTm9uZSksICgnYicsIE5vbmUpLCAoJ2MnLCBOb25lKSwgKCd4JywgLi4uKV0pIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHBhaXJfb3JkZXIgPSBsaXN0KG9kLml0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgnYScsIDEwKSwgMykKKyAgICAgICAgIyBtYWtlIHN1cmUgb3JkZXIgZGlkbid0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJfb3JkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgneCcsIDEwKSwgMTApCisgICAgICAgICMgbWFrZSBzdXJlICd4JyBpcyBhZGRlZCB0byB0aGUgZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKVstMV0sICgneCcsIDEwKSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBzZXRkZWZhdWx0IHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAorICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTWlzc2luZygpLnNldGRlZmF1bHQoNSwgOSksIDkpCisKKyAgICBkZWYgdGVzdF9yZWluc2VydChzZWxmKToKKyAgICAgICAgIyBHaXZlbiBpbnNlcnQgYSwgaW5zZXJ0IGIsIGRlbGV0ZSBhLCByZS1pbnNlcnQgYSwKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBhIGlzIG5vdyBsYXRlciB0aGFuIGIuCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBvZFsnYiddID0gMgorICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ2InLCAyKSwgKCdhJywgMSldKQorCisgICAgZGVmIHRlc3Rfdmlld3Moc2VsZik6CisgICAgICAgIHMgPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nIHllc3RlcmRheSBiZWZvcmUgZGF3bicuc3BsaXQoKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3a2V5cygpKSwgIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3dmFsdWVzKCkpLCAgW05vbmUgZm9yIGsgaW4gc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3aXRlbXMoKSksICBbKGssIE5vbmUpIGZvciBrIGluIHNdKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHVwZGF0ZSgpIHdpdGhvdXQgYnJlYWtpbmcgX19pbml0X18oKQorICAgICAgICBjbGFzcyBNeU9EKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKyAgICAgICAgaXRlbXMgPSBbKCdhJywgMSksICgnYycsIDMpLCAoJ2InLCAyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE15T0QoaXRlbXMpLml0ZW1zKCkpLCBpdGVtcykKKworY2xhc3MgR2VuZXJhbE1hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gT3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworY2xhc3MgTXlPcmRlcmVkRGljdChPcmRlcmVkRGljdCk6CisgICAgcGFzcworCitjbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gTXlPcmRlcmVkRGljdAorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCiBpbXBvcnQgY29sbGVjdGlvbnMKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIE5hbWVkVHVwbGVEb2NzID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kdWxlPWNvbGxlY3Rpb25zKQotICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0TmFtZWRUdXBsZSwgTmFtZWRUdXBsZURvY3MsIFRlc3RPbmVUcmlja1BvbnlBQkNzLCBUZXN0Q29sbGVjdGlvbkFCQ3NdCisgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3ROYW1lZFR1cGxlLCBOYW1lZFR1cGxlRG9jcywgVGVzdE9uZVRyaWNrUG9ueUFCQ3MsCisgICAgICAgICAgICAgICAgICAgIFRlc3RDb2xsZWN0aW9uQUJDcywgVGVzdENvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgIFRlc3RPcmRlcmVkRGljdCwgR2VuZXJhbE1hcHBpbmdUZXN0cywgU3ViY2xhc3NNYXBwaW5nVGVzdHNdCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChjb2xsZWN0aW9ucywgdmVyYm9zZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21tYW5kcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29tbWFuZHMucHkKaW5kZXggYTUzOWMyNC4uNzBjZmI1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21tYW5kcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbW1hbmRzLnB5CkBAIC01LDEzICs1LDExIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcywgdGVtcGZpbGUsIHJlCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGltcG9ydF9tb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MpCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGltcG9ydF9tb2R1bGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzCiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGltcG9ydF9tb2R1bGUKICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKLWltcG9ydF9tb2R1bGUoJ2NvbW1hbmRzJywgZGVwcmVjYXRlZD1UcnVlKQotZnJvbSBjb21tYW5kcyBpbXBvcnQgKgorY29tbWFuZHMgPSBpbXBvcnRfbW9kdWxlKCdjb21tYW5kcycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKIAogIyBUaGUgbW9kdWxlIHNheXM6CiAjICAgIk5CIFRoaXMgb25seSB3b3JrcyAoYW5kIGlzIG9ubHkgcmVsZXZhbnQpIGZvciBVTklYLiIKQEAgLTIwLDE0ICsxOCwxNCBAQAogIyBJJ2xsIHRha2UgdGhlIGNvbW1lbnQgYXMgZ2l2ZW4sIGFuZCBza2lwIHRoaXMgc3VpdGUuCiAKIGlmIG9zLm5hbWUgIT0gJ3Bvc2l4JzoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgnTm90IHBvc2l4OyBza2lwcGluZyB0ZXN0X2NvbW1hbmRzJykKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnTm90IHBvc2l4OyBza2lwcGluZyB0ZXN0X2NvbW1hbmRzJykKIAogCiBjbGFzcyBDb21tYW5kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZ2V0b3V0cHV0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRvdXRwdXQoJ2VjaG8geHl6enknKSwgJ3h5enp5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2V0c3RhdHVzb3V0cHV0KCdlY2hvIHh5enp5JyksICgwLCAneHl6enknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tYW5kcy5nZXRvdXRwdXQoJ2VjaG8geHl6enknKSwgJ3h5enp5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tYW5kcy5nZXRzdGF0dXNvdXRwdXQoJ2VjaG8geHl6enknKSwgKDAsICd4eXp6eScpKQogCiAgICAgICAgICMgd2UgdXNlIG1rZHRlbXAgaW4gdGhlIG5leHQgbGluZSB0byBjcmVhdGUgYW4gZW1wdHkgZGlyZWN0b3J5CiAgICAgICAgICMgdW5kZXIgb3VyIGV4Y2x1c2l2ZSBjb250cm9sOyBmcm9tIHRoYXQsIHdlIGNhbiBpbnZlbnQgYSBwYXRobmFtZQpAQCAtMzcsOCArMzUsOCBAQAogICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKGRpciwgImZvbyIpCiAKLSAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gZ2V0c3RhdHVzb3V0cHV0KCdjYXQgJyArIG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhzdGF0dXMsIDApCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCgnY2F0ICcgKyBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0dXMsIDApCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBkaXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQpAQCAtNTcsOCArNTUsMTAgQEAKICAgICAgICAgICAgICAgICAgIFteL10qICAgICAgICAjIFNraXAgdXNlciwgZ3JvdXAsIHNpemUsIGFuZCBkYXRlLgogICAgICAgICAgICAgICAgICAgL1wuICAgICAgICAgICMgYW5kIGVuZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgogICAgICAgICAgICAgICAgJycnCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocGF0LCBnZXRzdGF0dXMoIi8uIiksIHJlLlZFUkJPU0UpKQorCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIuKmNvbW1hbmRzLmdldHN0YXR1cy4uIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChwYXQsIGNvbW1hbmRzLmdldHN0YXR1cygiLy4iKSwgcmUuVkVSQk9TRSkpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CmluZGV4IGIzMTExZGQuLjhhOTVmNmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKQEAgLTYsNiArNiwxOSBAQAogCiBjbGFzcyBUZXN0U3BlY2lmaWNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X25vX2VuZGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBjb21waWxlKCJoaSIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImhpXHIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIGNvbXBpbGUoIiIsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9vdGhlcl9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgY29tcGlsZSgiXHJcbiIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoIlxyIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiaGlcclxuc3R1ZmZcclxuZGVmIGYoKTpcbiAgICBwYXNzXHIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJ0aGlzX2lzXHJyZWFsbHlfb2xkX21hY1xyZGVmIGYoKTpcbiAgICBwYXNzIiwgIjx0ZXN0PiIsICJleGVjIikKKwogICAgIGRlZiB0ZXN0X2RlYnVnX2Fzc2lnbm1lbnQoc2VsZik6CiAgICAgICAgICMgY2F0Y2ggYXNzaWdubWVudHMgdG8gX19kZWJ1Z19fCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCAnX19kZWJ1Z19fID0gMScsICc/JywgJ3NpbmdsZScpCkBAIC0xMzAsNyArMTQzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbXBsZXhfYXJncyhzZWxmKToKIAotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCcnJwogICAgICAgICBkZWYgY29tcF9hcmdzKChhLCBiKSk6CkBAIC0yNDEsOCArMjU0LDggQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiSG93IG1hbnkgYml0cyAqZG9lcyogdGhpcyBtYWNoaW5lIGhhdmU/Pz8iKQogICAgICAgICAjIFZlcmlmeSB0cmVhdG1lbnQgb2YgY29udGFudCBmb2xkaW5nIG9uIC0oc3lzLm1heGludCsxKQogICAgICAgICAjIGkuZS4gLTIxNDc0ODM2NDggb24gMzIgYml0IHBsYXRmb3Jtcy4gIFNob3VsZCByZXR1cm4gaW50LCBub3QgbG9uZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZXZhbCgiJXMiICUgKC1zeXMubWF4aW50IC0gMSkpLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAyKSksIGxvbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXZhbCgiJXMiICUgKC1zeXMubWF4aW50IC0gMSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAyKSksIGxvbmcpCiAKICAgICBpZiBzeXMubWF4aW50ID09IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CiAgICAgICAgIGRlZiB0ZXN0XzMyXzYzX2JpdF92YWx1ZXMoc2VsZik6CkBAIC0yNTcsNyArMjcwLDcgQEAKIAogICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGluIHNlbGYudGVzdF8zMl82M19iaXRfdmFsdWVzLmZ1bmNfY29kZS5jb19jb25zdHM6CiAgICAgICAgICAgICAgICAgaWYgdmFyaWFibGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhcmlhYmxlLCBpbnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFyaWFibGUsIGludCkKIAogICAgIGRlZiB0ZXN0X3NlcXVlbmNlX3VucGFja2luZ19lcnJvcihzZWxmKToKICAgICAgICAgIyBWZXJpZnkgc2VxdWVuY2UgcGFja2luZy91bnBhY2tpbmcgd2l0aCAib3IiLiAgU0YgYnVnICM3NTc4MTgKQEAgLTI3NSwxMSArMjg4LDE5IEBACiAgICAgICAgICAgICAnKGEsIE5vbmUpID0gMCwgMCcsCiAgICAgICAgICAgICAnZm9yIE5vbmUgaW4gcmFuZ2UoMTApOiBwYXNzJywKICAgICAgICAgICAgICdkZWYgZihOb25lKTogcGFzcycsCisgICAgICAgICAgICAnaW1wb3J0IE5vbmUnLAorICAgICAgICAgICAgJ2ltcG9ydCB4IGFzIE5vbmUnLAorICAgICAgICAgICAgJ2Zyb20geCBpbXBvcnQgTm9uZScsCisgICAgICAgICAgICAnZnJvbSB4IGltcG9ydCB5IGFzIE5vbmUnCiAgICAgICAgIF0KICAgICAgICAgZm9yIHN0bXQgaW4gc3RtdHM6CiAgICAgICAgICAgICBzdG10ICs9ICJcbiIKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBzdG10LCAndG1wJywgJ3NpbmdsZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgc3RtdCwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgIyBUaGlzIGlzIG9rLgorICAgICAgICBjb21waWxlKCJmcm9tIE5vbmUgaW1wb3J0IHgiLCAidG1wIiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJmcm9tIHggaW1wb3J0IE5vbmUgYXMgeSIsICJ0bXAiLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImltcG9ydCBOb25lIGFzIHgiLCAidG1wIiwgImV4ZWMiKQogCiAgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgogICAgICAgICBzdWNjZWVkID0gWwpAQCAtMzM3LDYgKzM1OCwxMCBAQAogICAgICAgICBmMSwgZjIgPSBmKCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChmMS5mdW5jX2NvZGUpLCBpZChmMi5mdW5jX2NvZGUpKQogCisgICAgZGVmIHRlc3RfbGFtYmRhX2RvYyhzZWxmKToKKyAgICAgICAgbCA9IGxhbWJkYTogImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobC5fX2RvY19fKQorCiAgICAgZGVmIHRlc3RfdW5pY29kZV9lbmNvZGluZyhzZWxmKToKICAgICAgICAgY29kZSA9IHUiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbnBhc3NcbiIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGNvZGUsICJ0bXAiLCAiZXhlYyIpCkBAIC0zNjIsNTYgKzM4Nyw1NiBAQAogICAgICAgICBkWzFdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCAyKQogICAgICAgICBkZWwgZFsxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgZCkKICAgICAgICAgIyBUdXBsZSBvZiBpbmRpY2VzCiAgICAgICAgIGRbMSwgMV0gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxLCAxXSwgMSkKICAgICAgICAgZFsxLCAxXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxLCAxXSwgMikKICAgICAgICAgZGVsIGRbMSwgMV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgMSkgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDEpLCBkKQogICAgICAgICAjIFNpbXBsZSBzbGljZQogICAgICAgICBkWzE6Ml0gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjJdLCAxKQogICAgICAgICBkWzE6Ml0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyXSwgMikKICAgICAgICAgZGVsIGRbMToyXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDEsIDIpIGluIGQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNsaWNlKDEsIDIpLCBkKQogICAgICAgICAjIFR1cGxlIG9mIHNpbXBsZSBzbGljZXMKICAgICAgICAgZFsxOjIsIDE6Ml0gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjIsIDE6Ml0sIDEpCiAgICAgICAgIGRbMToyLCAxOjJdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MiwgMToyXSwgMikKICAgICAgICAgZGVsIGRbMToyLCAxOjJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHNsaWNlKDEsIDIpLCBzbGljZSgxLCAyKSkgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKHNsaWNlKDEsIDIpLCBzbGljZSgxLCAyKSksIGQpCiAgICAgICAgICMgRXh0ZW5kZWQgc2xpY2UKICAgICAgICAgZFsxOjI6M10gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjI6M10sIDEpCiAgICAgICAgIGRbMToyOjNdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozXSwgMikKICAgICAgICAgZGVsIGRbMToyOjNdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMSwgMiwgMykgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2xpY2UoMSwgMiwgMyksIGQpCiAgICAgICAgICMgVHVwbGUgb2YgZXh0ZW5kZWQgc2xpY2VzCiAgICAgICAgIGRbMToyOjMsIDE6MjozXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozLCAxOjI6M10sIDEpCiAgICAgICAgIGRbMToyOjMsIDE6MjozXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjI6MywgMToyOjNdLCAyKQogICAgICAgICBkZWwgZFsxOjI6MywgMToyOjNdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHNsaWNlKDEsIDIsIDMpLCBzbGljZSgxLCAyLCAzKSkgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKHNsaWNlKDEsIDIsIDMpLCBzbGljZSgxLCAyLCAzKSksIGQpCiAgICAgICAgICMgRWxsaXBzaXMKICAgICAgICAgZFsuLi5dID0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uXSwgMSkKICAgICAgICAgZFsuLi5dICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWy4uLl0sIDIpCiAgICAgICAgIGRlbCBkWy4uLl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFbGxpcHNpcyBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihFbGxpcHNpcywgZCkKICAgICAgICAgIyBUdXBsZSBvZiBFbGxpcHNlcwogICAgICAgICBkWy4uLiwgLi4uXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWy4uLiwgLi4uXSwgMSkKICAgICAgICAgZFsuLi4sIC4uLl0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uLCAuLi5dLCAyKQogICAgICAgICBkZWwgZFsuLi4sIC4uLl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoRWxsaXBzaXMsIEVsbGlwc2lzKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoRWxsaXBzaXMsIEVsbGlwc2lzKSwgZCkKIAogICAgIGRlZiB0ZXN0X21hbmdsaW5nKHNlbGYpOgogICAgICAgICBjbGFzcyBBOgpAQCAtNDIxLDEwICs0NDYsMTAgQEAKICAgICAgICAgICAgICAgICBpbXBvcnQgX19tYW5nbGVkX21vZAogICAgICAgICAgICAgICAgIGltcG9ydCBfX3BhY2thZ2VfXy5tb2R1bGUKIAotICAgICAgICBzZWxmLmFzc2VydF8oIl9BX19tYW5nbGVkIiBpbiBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oIl9fbm90X21hbmdsZWRfXyIgaW4gQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJfQV9fbWFuZ2xlZF9tb2QiIGluIEEuZi5mdW5jX2NvZGUuY29fdmFybmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19wYWNrYWdlX18iIGluIEEuZi5mdW5jX2NvZGUuY29fdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9BX19tYW5nbGVkIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19ub3RfbWFuZ2xlZF9fIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX0FfX21hbmdsZWRfbW9kIiwgQS5mLmZ1bmNfY29kZS5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQogCiAgICAgZGVmIHRlc3RfY29tcGlsZV9hc3Qoc2VsZik6CiAgICAgICAgIGZuYW1lID0gX19maWxlX18KQEAgLTQ0Nyw3ICs0NzIsNyBAQAogICAgICAgICBmb3IgZm5hbWUsIGNvZGUgaW4gc2FtcGxlX2NvZGU6CiAgICAgICAgICAgICBjbzEgPSBjb21waWxlKGNvZGUsICclczEnICUgZm5hbWUsICdleGVjJykKICAgICAgICAgICAgIGFzdCA9IGNvbXBpbGUoY29kZSwgJyVzMicgJSBmbmFtZSwgJ2V4ZWMnLCBfYXN0LlB5Q0ZfT05MWV9BU1QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShhc3QpID09IF9hc3QuTW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYXN0KSA9PSBfYXN0Lk1vZHVsZSkKICAgICAgICAgICAgIGNvMiA9IGNvbXBpbGUoYXN0LCAnJXMzJyAlIGZuYW1lLCAnZXhlYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvMSwgY28yKQogICAgICAgICAgICAgIyB0aGUgY29kZSBvYmplY3QncyBmaWxlbmFtZSBjb21lcyBmcm9tIHRoZSBzZWNvbmQgY29tcGlsYXRpb24gc3RlcApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjY5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTAsMCArMSw4MCBAQAoraW1wb3J0IGNvbXBpbGVhbGwKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIENvbXBpbGVhbGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IHNlbGYuc291cmNlX3BhdGggKyAoJ2MnIGlmIF9fZGVidWdfXyBlbHNlICdvJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoJ3ggPSAxMjNcbicpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGgyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QyLnB5JykKKyAgICAgICAgc2VsZi5iY19wYXRoMiA9IHNlbGYuc291cmNlX3BhdGgyICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnNvdXJjZV9wYXRoMikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcmVjdG9yeSkKKworICAgIGRlZiBkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgZGF0YSA9IGZpbGUucmVhZCg4KQorICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KHNlbGYuc291cmNlX3BhdGgpLnN0X210aW1lKQorICAgICAgICBjb21wYXJlID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICByZXR1cm4gZGF0YSwgY29tcGFyZQorCisgICAgZGVmIHJlY3JlYXRpb25fY2hlY2soc2VsZiwgbWV0YWRhdGEpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNvbXBpbGVhbGwgcmVjcmVhdGVzIGJ5dGVjb2RlIHdoZW4gdGhlIG5ldyBtZXRhZGF0YSBpcworICAgICAgICB1c2VkLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgJ3N0YXQnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgqc2VsZi5kYXRhKCkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBiYyA9IGZpbGUucmVhZCgpW2xlbihtZXRhZGF0YSk6XQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAnd2InKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZShtZXRhZGF0YSkKKyAgICAgICAgICAgIGZpbGUud3JpdGUoYmMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoKnNlbGYuZGF0YSgpKQorICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBmb3JjZT1GYWxzZSwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCpzZWxmLmRhdGEoKSkKKworICAgIGRlZiB0ZXN0X210aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KKyAgICAgICAgc2VsZi5yZWNyZWF0aW9uX2NoZWNrKHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCAxKSkKKworICAgIGRlZiB0ZXN0X21hZ2ljX251bWJlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhiJ1wwXDBcMFwwJykKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBjb21waWxpbmcgYSBzaW5nbGUgZmlsZSwgYW5kIGNvbXBsZXRlIGRpcmVjdG9yeQorICAgICAgICBmb3IgZm4gaW4gKHNlbGYuYmNfcGF0aCwgc2VsZi5iY19wYXRoMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2ZpbGUoc2VsZi5zb3VyY2VfcGF0aCwgZm9yY2U9RmFsc2UsIHF1aWV0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShzZWxmLmJjX3BhdGgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoMikpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgpCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIGZvcmNlPUZhbHNlLCBxdWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoMikpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21waWxlYWxsVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlci5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZXIucHkKaW5kZXggZTViODM2NS4uMzMyZTBiYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVyLnB5CkBAIC0yMyw3ICsyMyw5IEBACiAgICAgICAgICMgdG8gZ2VuZXJhdGUgc29tZSBraW5kIG9mIGNvZGUgZm9yIGl0LgogCiAgICAgICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCi0gICAgICAgIGxpYmRpciA9IG9zLnBhdGguZGlybmFtZSh1bml0dGVzdC5fX2ZpbGVfXykKKyAgICAgICAgIyB3YXJuaW5nOiBpZiAnb3MnIG9yICd0ZXN0X3N1cHBvcnQnIGFyZSBtb3ZlZCBpbiBzb21lIG90aGVyIGRpciwKKyAgICAgICAgIyB0aGV5IHNob3VsZCBiZSBjaGFuZ2VkIGhlcmUuCisgICAgICAgIGxpYmRpciA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguZGlybmFtZSh0ZXN0LnRlc3Rfc3VwcG9ydC5fX2ZpbGVfXykKIAogICAgICAgICBmb3IgZGlyIGluIFtsaWJkaXIsIHRlc3RkaXJdOgpAQCAtNzksMTkgKzgxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3RyaW5nPiIsICJleGVjIikKICAgICAgICAgZGN0ID0ge30KICAgICAgICAgZXhlYyBjIGluIGRjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkY3QuZ2V0KCdlJyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRjdC5nZXQoJ2YnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdlJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0LmdldCgnZicpLCAxKQogCiAgICAgZGVmIHRlc3REZWZhdWx0QXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGVyLnBhcnNlLCAiZGVmIGZvbyhhPTEsIGIpOiBwYXNzIikKIAogICAgIGRlZiB0ZXN0RG9jc3RyaW5ncyhzZWxmKToKICAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJyJkb2MiJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ19fZG9jX18nIGluIGMuY29fbmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19fZG9jX18nLCBjLmNvX25hbWVzKQogICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnZGVmIGYoKTpcbiAiZG9jIicsICc8c3RyaW5nPicsICdleGVjJykKICAgICAgICAgZyA9IHt9CiAgICAgICAgIGV4ZWMgYyBpbiBnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdbJ2YnXS5fX2RvY19fLCAiZG9jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnWydmJ10uX19kb2NfXywgImRvYyIpCiAKICAgICBkZWYgdGVzdExpbmVObyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYWxsIG5vZGVzIGV4Y2VwdCBNb2R1bGUgaGF2ZSBhIGNvcnJlY3QgbGluZW5vIGF0dHJpYnV0ZS4KQEAgLTExMCwxNiArMTEyLDE2IEBACiAKICAgICBkZWYgX2NoZWNrX2xpbmVubyhzZWxmLCBub2RlKToKICAgICAgICAgaWYgbm90IG5vZGUuX19jbGFzc19fIGluIE5PTElORU5POgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uobm9kZS5saW5lbm8sIGludCksCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uobm9kZS5saW5lbm8sIGludCwKICAgICAgICAgICAgICAgICAibGluZW5vPSVzIG9uICVzIiAlIChub2RlLmxpbmVubywgbm9kZS5fX2NsYXNzX18pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vZGUubGluZW5vID4gMCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlLmxpbmVubyA+IDAsCiAgICAgICAgICAgICAgICAgImxpbmVubz0lcyBvbiAlcyIgJSAobm9kZS5saW5lbm8sIG5vZGUuX19jbGFzc19fKSkKICAgICAgICAgZm9yIGNoaWxkIGluIG5vZGUuZ2V0Q2hpbGROb2RlcygpOgogICAgICAgICAgICAgc2VsZi5jaGVja19saW5lbm8oY2hpbGQpCiAKICAgICBkZWYgdGVzdEZsYXR0ZW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsYXR0ZW4oWzEsIFsyXV0pLCBbMSwgMl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsYXR0ZW4oKDEsICgyLCkpKSwgWzEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYXR0ZW4oWzEsIFsyXV0pLCBbMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhdHRlbigoMSwgKDIsKSkpLCBbMSwgMl0pCiAKICAgICBkZWYgdGVzdE5lc3RlZFNjb3BlKHNlbGYpOgogICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnZGVmIGcoKTpcbicKQEAgLTEzMSwxNCArMTMzLDQ0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJykKICAgICAgICAgZGN0ID0ge30KICAgICAgICAgZXhlYyBjIGluIGRjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkY3QuZ2V0KCdyZXN1bHQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMykKIAogICAgIGRlZiB0ZXN0R2VuRXhwKHNlbGYpOgogICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnbGlzdCgoaSxqKSBmb3IgaSBpbiByYW5nZSgzKSBpZiBpIDwgMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoNCkgaWYgaiA+IDIpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmFsKGMpLCBbKDAsIDMpLCAoMSwgMyksICgyLCAzKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgWygwLCAzKSwgKDEsIDMpLCAoMiwgMyldKQorCisgICAgZGVmIHRlc3RTZXRMaXRlcmFsKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezEsIDIsIDN9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLDIsM30pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7MSwgMiwgMyx9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLDIsM30pCisKKyAgICBkZWYgdGVzdERpY3RMaXRlcmFsKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezE6MiwgMjozLCAzOjR9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxOjIsIDI6MywgMzo0fSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3sxOjIsIDI6MywgMzo0LH0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezE6MiwgMjozLCAzOjR9KQorCisgICAgZGVmIHRlc3RTZXRDb21wKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgne3ggZm9yIHggaW4gcmFuZ2UoMSwgNCl9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLCAyLCAzfSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3t4ICogeSBmb3IgeCBpbiByYW5nZSgzKSBpZiB4ICE9IDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgZm9yIHkgaW4gcmFuZ2UoNCkgaWYgeSAhPSAwfScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MSwgMiwgMywgNCwgNn0pCisKKyAgICBkZWYgdGVzdERpY3RDb21wKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgne3g6eCsxIGZvciB4IGluIHJhbmdlKDEsIDQpfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MToyLCAyOjMsIDM6NH0pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7KHgsIHkpIDogeSBmb3IgeCBpbiByYW5nZSgyKSBpZiB4ICE9IDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBmb3IgeSBpbiByYW5nZSgzKSBpZiB5ICE9IDB9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsoMSwgMik6IDIsICgxLCAxKTogMX0pCiAKICAgICBkZWYgdGVzdFdpdGgoc2VsZik6CiAgICAgICAgICMgU0YgYnVnIDE2MzgyNDMKQEAgLTE1MSw3ICsxODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQogICAgICAgICBkY3QgPSB7J1RyaXZpYWxDb250ZXh0JzogVHJpdmlhbENvbnRleHR9CiAgICAgICAgIGV4ZWMgYyBpbiBkY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGN0LmdldCgncmVzdWx0JyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0LmdldCgncmVzdWx0JyksIDEpCiAKICAgICBkZWYgdGVzdFdpdGhBc3Moc2VsZik6CiAgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50XG4nCkBAIC0xNjMsOCArMTk1LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJyApCiAgICAgICAgIGRjdCA9IHsnVHJpdmlhbENvbnRleHQnOiBUcml2aWFsQ29udGV4dH0KICAgICAgICAgZXhlYyBjIGluIGRjdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKIAorICAgIGRlZiB0ZXN0V2l0aE11bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIGNsYXNzIEN0eDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICAgICAgICAgICAgICBzZWxmLm4gPSBuCisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoc2VsZi5uKQorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWYgZigpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHdpdGggQ3R4KDEpIGFzIHRjLCBDdHgoMikgYXMgdGMyOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gMVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0ID0gZigpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnICkKKyAgICAgICAgZGN0ID0geydDdHgnOiBDdHh9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdyZXN1bHQnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsxLCAyXSkKKworICAgIGRlZiB0ZXN0R2xvYmFsKHNlbGYpOgorICAgICAgICBjb2RlID0gY29tcGlsZXIuY29tcGlsZSgnZ2xvYmFsIHhcbng9MScsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgZDEgPSB7J19fYnVpbHRpbnNfXyc6IHt9fQorICAgICAgICBkMiA9IHt9CisgICAgICAgIGV4ZWMgY29kZSBpbiBkMSwgZDIKKyAgICAgICAgIyB4IHNob3VsZCBiZSBpbiB0aGUgZ2xvYmFscyBkaWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuZ2V0KCd4JyksIDEpCiAKICAgICBkZWYgdGVzdFByaW50RnVuY3Rpb24oc2VsZik6CiAgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uXG4nCkBAIC0xNzQsMTQgKzIzNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQogICAgICAgICBkY3QgPSB7J291dHB1dCc6IFN0cmluZ0lPKCl9CiAgICAgICAgIGV4ZWMgYyBpbiBkY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGN0WydvdXRwdXQnXS5nZXR2YWx1ZSgpLCAnYSoqYisrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3RbJ291dHB1dCddLmdldHZhbHVlKCksICdhKipiKysnKQogCiAgICAgZGVmIF90ZXN0RXJyRW5jKHNlbGYsIHNyYywgdGV4dCwgb2Zmc2V0KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29tcGlsZShzcmMsICIiLCAiZXhlYyIpCiAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUub2Zmc2V0LCBvZmZzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLnRleHQsIHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUub2Zmc2V0LCBvZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudGV4dCwgdGV4dCkKIAogICAgIGRlZiB0ZXN0U291cmNlQ29kZUVuY29kaW5nc0Vycm9yKHNlbGYpOgogICAgICAgICAjIFRlc3QgU3ludGF4RXJyb3Igd2l0aCBlbmNvZGluZyBkZWZpbml0aW9uCkBAIC0yMjAsNiArMjgwLDkgQEAKIGxbMzo0XQogZCA9IHsnYSc6IDJ9CiBkID0ge30KK2QgPSB7eDogeSBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoNSksIHJhbmdlKDUsMTApKX0KK3MgPSB7eCBmb3IgeCBpbiByYW5nZSgxMCl9CitzID0gezF9CiB0ID0gKCkKIHQgPSAoMSwgMikKIGwgPSBbXQpAQCAtMjQ3LDcgKzMxMCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBnbG9iYWwgVEVTVF9BTEwKLSAgICBURVNUX0FMTCA9IHRlc3QudGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImNvbXBpbGVyIikKKyAgICBURVNUX0FMTCA9IHRlc3QudGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImNwdSIpCiAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBpbGVyVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQppbmRleCA2MzQyNTAxLi41OWU4Njc3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CkBAIC0yLDcgKzIsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRvbQotZnJvbSBtYXRoIGltcG9ydCBhdGFuMgorZnJvbSBtYXRoIGltcG9ydCBhdGFuMiwgaXNuYW4sIGNvcHlzaWduCiAKIElORiA9IGZsb2F0KCJpbmYiKQogTkFOID0gZmxvYXQoIm5hbiIpCkBAIC0zNSwxNiArMzUsMzYgQEAKICAgICAgICAgaWYgeCA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGFicyh5KSA8IGVwcwogICAgICAgICAjIGNoZWNrIHRoYXQgcmVsYXRpdmUgZGlmZmVyZW5jZSA8IGVwcwotICAgICAgICBzZWxmLmFzc2VydF8oYWJzKCh4LXkpL3kpIDwgZXBzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKCh4LXkpL3kpIDwgZXBzKQorCisgICAgZGVmIGFzc2VydEZsb2F0c0FyZUlkZW50aWNhbChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiYXNzZXJ0IHRoYXQgZmxvYXRzIHggYW5kIHkgYXJlIGlkZW50aWNhbCwgaW4gdGhlIHNlbnNlIHRoYXQ6CisgICAgICAgICgxKSBib3RoIHggYW5kIHkgYXJlIG5hbnMsIG9yCisgICAgICAgICgyKSBib3RoIHggYW5kIHkgYXJlIGluZmluaXRpZXMsIHdpdGggdGhlIHNhbWUgc2lnbiwgb3IKKyAgICAgICAgKDMpIGJvdGggeCBhbmQgeSBhcmUgemVyb3MsIHdpdGggdGhlIHNhbWUgc2lnbiwgb3IKKyAgICAgICAgKDQpIHggYW5kIHkgYXJlIGJvdGggZmluaXRlIGFuZCBub256ZXJvLCBhbmQgeCA9PSB5CisKKyAgICAgICAgIiIiCisgICAgICAgIG1zZyA9ICdmbG9hdHMgeyFyfSBhbmQgeyFyfSBhcmUgbm90IGlkZW50aWNhbCcKKworICAgICAgICBpZiBpc25hbih4KSBvciBpc25hbih5KToKKyAgICAgICAgICAgIGlmIGlzbmFuKHgpIGFuZCBpc25hbih5KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiB4ID09IHk6CisgICAgICAgICAgICBpZiB4ICE9IDAuMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgYm90aCB6ZXJvOyBjaGVjayB0aGF0IHNpZ25zIG1hdGNoCisgICAgICAgICAgICBlbGlmIGNvcHlzaWduKDEuMCwgeCkgPT0gY29weXNpZ24oMS4wLCB5KToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnICs9ICc6IHplcm9zIGhhdmUgZGlmZmVyZW50IHNpZ25zJworICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdCh4LCB5KSkKIAogICAgIGRlZiBhc3NlcnRDbG9zZShzZWxmLCB4LCB5LCBlcHM9MWUtOSk6CiAgICAgICAgICIiIlJldHVybiB0cnVlIGlmZiBjb21wbGV4ZXMgeCBhbmQgeSAiYXJlIGNsb3NlXCIiIiIKICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZUFicyh4LnJlYWwsIHkucmVhbCwgZXBzKQogICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHguaW1hZywgeS5pbWFnLCBlcHMpCiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCi0KICAgICBkZWYgY2hlY2tfZGl2KHNlbGYsIHgsIHkpOgogICAgICAgICAiIiJDb21wdXRlIGNvbXBsZXggej14KnksIGFuZCBjaGVjayB0aGF0IHoveD09eSBhbmQgei95PT14LiIiIgogICAgICAgICB6ID0geCAqIHkKQEAgLTk1LDggKzExNSwyMSBAQAogICAgIGRlZiB0ZXN0X2NvZXJjZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgY29tcGxleC5fX2NvZXJjZV9fLCAxKzFqLCAxTDw8MTAwMDApCiAKKyAgICBkZWYgdGVzdF9ub19pbXBsaWNpdF9jb2VyY2Uoc2VsZik6CisgICAgICAgICMgUHl0aG9uIDIuNyByZW1vdmVkIGltcGxpY2l0IGNvZXJjaW9uIGZyb20gdGhlIGNvbXBsZXggdHlwZQorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19jb2VyY2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBhID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICsgMi4waikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPCAyLjBqKQorCiAgICAgZGVmIHRlc3RfcmljaGNvbXBhcmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGNvbXBsZXguX19lcV9fLCAxKzFqLCAxTDw8MTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleC5fX2VxX18oMSsxaiwgMUw8PDEwMDAwKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleC5fX2x0X18oMSsxaiwgTm9uZSksIE5vdEltcGxlbWVudGVkKQogICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKDErMWosIDErMWopLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKDErMWosIDIrMmopLCBGYWxzZSkKQEAgLTEwNyw2ICsxNDAsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZ3RfXywgMSsxaiwgMisyaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZ2VfXywgMSsxaiwgMisyaikKIAorICAgIGRlZiB0ZXN0X3JpY2hjb21wYXJlX2JvdW5kYXJpZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhuLCBkZWx0YXMsIGlzX2VxdWFsLCBpbWFnID0gMC4wKToKKyAgICAgICAgICAgIGZvciBkZWx0YSBpbiBkZWx0YXM6CisgICAgICAgICAgICAgICAgaSA9IG4gKyBkZWx0YQorICAgICAgICAgICAgICAgIHogPSBjb21wbGV4KGksIGltYWcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXyh6LCBpKSwgaXNfZXF1YWwoZGVsdGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX25lX18oeiwgaSksIG5vdCBpc19lcXVhbChkZWx0YSkpCisgICAgICAgICMgRm9yIElFRUUtNzU0IGRvdWJsZXMgdGhlIGZvbGxvd2luZyBzaG91bGQgaG9sZDoKKyAgICAgICAgIyAgICB4IGluIFsyICoqICg1MiArIGkpLCAyICoqICg1MyArIGkgKyAxKV0gLT4geCBtb2QgMiAqKiBpID09IDAKKyAgICAgICAgIyB3aGVyZSB0aGUgaW50ZXJ2YWwgaXMgcmVwcmVzZW50YWJsZSwgb2YgY291cnNlLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgICAgICAgICBwb3cgPSA1MiArIGkKKyAgICAgICAgICAgIG11bHQgPSAyICoqIGkKKyAgICAgICAgICAgIGNoZWNrKDIgKiogcG93LCByYW5nZSgxLCAxMDEpLCBsYW1iZGEgZGVsdGE6IGRlbHRhICUgbXVsdCA9PSAwKQorICAgICAgICAgICAgY2hlY2soMiAqKiBwb3csIHJhbmdlKDEsIDEwMSksIGxhbWJkYSBkZWx0YTogRmFsc2UsIGZsb2F0KGkpKQorICAgICAgICBjaGVjaygyICoqIDUzLCByYW5nZSgtMTAwLCAwKSwgbGFtYmRhIGRlbHRhOiBUcnVlKQorCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgKDErMWopLl9fbW9kX18sIDArMGopCiAKQEAgLTE2Miw4ICsyMTIsOCBAQAogCiAgICAgZGVmIHRlc3RfYm9vbGNvbnRleHQoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXBsZXgocmFuZG9tKCkgKyAxZS02LCByYW5kb20oKSArIDFlLTYpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvbXBsZXgoMC4wLCAwLjApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBsZXgocmFuZG9tKCkgKyAxZS02LCByYW5kb20oKSArIDFlLTYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvbXBsZXgoMC4wLCAwLjApKQogCiAgICAgZGVmIHRlc3RfY29uanVnYXRlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydENsb3NlKGNvbXBsZXgoNS4zLCA5LjgpLmNvbmp1Z2F0ZSgpLCA1LjMtOS44aikKQEAgLTIxMyw5ICsyNjMsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIrMSIpLCArMSkKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoMSsyaikiKSwgMSsyaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoMS4zKzIuMmopIiksIDEuMysyLjJqKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjFFLTUwMCIpLCAxZS01MDArMGopCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMWUtNTAwSiIpLCAxZS01MDBqKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIisxZS0zMTUtMWUtNDAwaiIpLCAxZS0zMTUtMWUtNDAwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIzLjE0KzFKIiksIDMuMTQrMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQtNkogKSIpLCAzLjE0LTZqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIiAoICszLjE0LUogKSIpLCAzLjE0LTFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIiAoICszLjE0K2ogKSIpLCAzLjE0KzFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIkoiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKCBqICkiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiK0oiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiKCAtaikiKSwgLTFqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoJzFlLTUwMCcpLCAwLjAgKyAwLjBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoJy0xZS01MDBqJyksIDAuMCAtIDAuMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnLTFlLTUwMCsxZS01MDBqJyksIC0wLjAgKyAwLjBqKQogCiAgICAgICAgIGNsYXNzIGNvbXBsZXgyKGNvbXBsZXgpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChjb21wbGV4MigxKzFqKSksIDErMWopCkBAIC0yMzcsMTMgKzI5NSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0X3plcm9zKGNvbXBsZXgoLTAuLCAxLikucmVhbCksIHNwbGl0X3plcm9zKC0wLikpCiAKICAgICAgICAgYyA9IDMuMTQgKyAxagotICAgICAgICBzZWxmLmFzc2VydF8oY29tcGxleChjKSBpcyBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGxleChjKSBpcyBjKQogICAgICAgICBkZWwgYwogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgIjEiLCAiMSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgMSwgIjEiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiICAzLjE0K0ogICIpLCAzLjE0KzFqKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KHVuaWNvZGUoIiAgMy4xNCtKICAiKSksIDMuMTQrMWopCiAKQEAgLTI2OSw4ICszMjYsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjErKDJqKSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIoMSsyaikxMjMiKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgdW5pY29kZSgiMSIqNTAwKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsIHVuaWNvZGUoIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjFqKzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUxZWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUrKzFlaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIpMSsyaigiKQorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgdGhyZWUgYXJlIGFjY2VwdGVkIGJ5IFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjEuLjFqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjEuMTEuMWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUxLjFqIikKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IGNvbXBsZXggYWNjZXB0cyBsb25nIHVuaWNvZGUgc3RyaW5ncworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGNvbXBsZXgodW5pY29kZSgiMSIqNTAwKSkpLCBjb21wbGV4KQogCiAgICAgICAgIGNsYXNzIEV2aWxFeGMoRXhjZXB0aW9uKToKICAgICAgICAgICAgIHBhc3MKQEAgLTMxMyw2ICszODEsNjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGNvbXBsZXgxKDFqKSksIDJqKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIGNvbXBsZXgyKDFqKSkKIAorICAgIGRlZiB0ZXN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyB4Y29tcGxleChjb21wbGV4KToKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICsgb3RoZXIpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKworICAgICAgICAgICAgZGVmIF9fc3ViX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgKyBvdGhlcikKKyAgICAgICAgICAgIF9fcnN1Yl9fID0gX19zdWJfXworCisgICAgICAgICAgICBkZWYgX19tdWxfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAqIG90aGVyKQorICAgICAgICAgICAgX19ybXVsX18gPSBfX211bF9fCisKKyAgICAgICAgICAgIGRlZiBfX2Rpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpIC8gb3RoZXIpCisKKyAgICAgICAgICAgIGRlZiBfX3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgob3RoZXIgLyBjb21wbGV4KHNlbGYpKQorCisgICAgICAgICAgICBfX3RydWVkaXZfXyA9IF9fZGl2X18KKyAgICAgICAgICAgIF9fcnRydWVkaXZfXyA9IF9fcmRpdl9fCisKKyAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgLy8gb3RoZXIpCisKKyAgICAgICAgICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChvdGhlciAvLyBjb21wbGV4KHNlbGYpKQorCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAqKiBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcnBvd19fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChvdGhlciAqKiBjb21wbGV4KHNlbGYpICkKKworICAgICAgICAgICAgZGVmIF9fbW9kX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgJSBvdGhlcikKKworICAgICAgICAgICAgZGVmIF9fcm1vZF9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChvdGhlciAlIGNvbXBsZXgoc2VsZikpCisKKyAgICAgICAgaW5maXhfYmlub3BzID0gKCcrJywgJy0nLCAnKicsICcqKicsICclJywgJy8vJywgJy8nKQorICAgICAgICB4Y29tcGxleF92YWx1ZXMgPSAoeGNvbXBsZXgoMSksIHhjb21wbGV4KDEyMy4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjb21wbGV4KC0xMCsyaiksIHhjb21wbGV4KDMrMTg3aiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y29tcGxleCgzLTc4aikpCisgICAgICAgIHRlc3RfdmFsdWVzID0gKDEsIDEyMy4wLCAxMC0xOWosIHhjb21wbGV4KDErMmopLAorICAgICAgICAgICAgICAgICAgICAgICB4Y29tcGxleCgxKzg3aiksIHhjb21wbGV4KDEwKzkwaikpCisKKyAgICAgICAgZm9yIG9wIGluIGluZml4X2Jpbm9wczoKKyAgICAgICAgICAgIGZvciB4IGluIHhjb21wbGV4X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBmb3IgeSBpbiB0ZXN0X3ZhbHVlczoKKyAgICAgICAgICAgICAgICAgICAgYSA9ICd4ICVzIHknICUgb3AKKyAgICAgICAgICAgICAgICAgICAgYiA9ICd5ICVzIHgnICUgb3AKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZXZhbChhKSkgaXMgdHlwZShldmFsKGIpKSBpcyB4Y29tcGxleCkKKwogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGZvciB4IGluIHhyYW5nZSgtMzAsIDMwKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh4KSwgaGFzaChjb21wbGV4KHgsIDApKSkKQEAgLTMzNSwxNyArNDU4LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTZqLGNvbXBsZXgocmVwcigtNmopKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2aixjb21wbGV4KHJlcHIoNmopKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgSU5GKSksICIoMStpbmYqaikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgLUlORikpLCAiKDEtaW5mKmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMS4sIElORikpLCAiKDEraW5maikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgLUlORikpLCAiKDEtaW5maikiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChJTkYsIDEpKSwgIihpbmYrMWopIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoLUlORiwgSU5GKSksICIoLWluZitpbmYqaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgtSU5GLCBJTkYpKSwgIigtaW5mK2luZmopIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCAxKSksICIobmFuKzFqKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEsIE5BTikpLCAiKDErbmFuKmopIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCBOQU4pKSwgIihuYW4rbmFuKmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMSwgTkFOKSksICIoMStuYW5qKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KE5BTiwgTkFOKSksICIobmFuK25hbmopIikKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCBJTkYpKSwgImluZipqIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgLUlORikpLCAiLWluZipqIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgTkFOKSksICJuYW4qaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDAsIElORikpLCAiaW5maiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDAsIC1JTkYpKSwgIi1pbmZqIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgTkFOKSksICJuYW5qIikKIAogICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDErNmopLCAtMS02aikKQEAgLTM3OCw4ICs1MDEsMTQ2IEBACiAgICAgICAgIGRlZiB0ZXN0X3BsdXNfbWludXNfMGooc2VsZik6CiAgICAgICAgICAgICAjIHRlc3QgdGhhdCAtMGogYW5kIDBqIGxpdGVyYWxzIGFyZSBub3QgaWRlbnRpZmllZAogICAgICAgICAgICAgejEsIHoyID0gMGosIC0wagotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXRhbjIoejEuaW1hZywgLTEuKSwgYXRhbjIoMC4sIC0xLikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdGFuMih6Mi5pbWFnLCAtMS4pLCBhdGFuMigtMC4sIC0xLikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0YW4yKHoxLmltYWcsIC0xLiksIGF0YW4yKDAuLCAtMS4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGFuMih6Mi5pbWFnLCAtMS4pLCBhdGFuMigtMC4sIC0xLikpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiMWU1MDAiKSwgY29tcGxleChJTkYsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwaiIpLCBjb21wbGV4KDAuMCwgLUlORikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwKzEuOGUzMDhqIiksIGNvbXBsZXgoLUlORiwgSU5GKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9yZXByX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgdmFscyA9IFswLjAsIDFlLTUwMCwgMWUtMzE1LCAxZS0yMDAsIDAuMDEyMywgMy4xNDE1LCAxZTUwLCBJTkYsIE5BTl0KKyAgICAgICAgdmFscyArPSBbLXYgZm9yIHYgaW4gdmFsc10KKworICAgICAgICAjIGNvbXBsZXgocmVwcih6KSkgc2hvdWxkIHJlY292ZXIgeiBleGFjdGx5LCBldmVuIGZvciBjb21wbGV4CisgICAgICAgICMgbnVtYmVycyBpbnZvbHZpbmcgYW4gaW5maW5pdHksIG5hbiwgb3IgbmVnYXRpdmUgemVybworICAgICAgICBmb3IgeCBpbiB2YWxzOgorICAgICAgICAgICAgZm9yIHkgaW4gdmFsczoKKyAgICAgICAgICAgICAgICB6ID0gY29tcGxleCh4LCB5KQorICAgICAgICAgICAgICAgIHJvdW5kdHJpcCA9IGNvbXBsZXgocmVwcih6KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCh6LnJlYWwsIHJvdW5kdHJpcC5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHouaW1hZywgcm91bmR0cmlwLmltYWcpCisKKyAgICAgICAgIyBpZiB3ZSBwcmVkZWZpbmUgc29tZSBjb25zdGFudHMsIHRoZW4gZXZhbChyZXByKHopKSBzaG91bGQKKyAgICAgICAgIyBhbHNvIHdvcmssIGV4Y2VwdCB0aGF0IGl0IG1pZ2h0IGNoYW5nZSB0aGUgc2lnbiBvZiB6ZXJvcworICAgICAgICBpbmYsIG5hbiA9IGZsb2F0KCdpbmYnKSwgZmxvYXQoJ25hbicpCisgICAgICAgIGluZmosIG5hbmogPSBjb21wbGV4KDAuMCwgaW5mKSwgY29tcGxleCgwLjAsIG5hbikKKyAgICAgICAgZm9yIHggaW4gdmFsczoKKyAgICAgICAgICAgIGZvciB5IGluIHZhbHM6CisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoeCwgeSkKKyAgICAgICAgICAgICAgICByb3VuZHRyaXAgPSBldmFsKHJlcHIoeikpCisgICAgICAgICAgICAgICAgIyBhZGRpbmcgMC4wIGhhcyBubyBlZmZlY3QgYmVzaWRlIGNoYW5naW5nIC0wLjAgdG8gMC4wCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoMC4wICsgei5yZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCArIHJvdW5kdHJpcC5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKDAuMCArIHouaW1hZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAgKyByb3VuZHRyaXAuaW1hZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBlbXB0eSBmb3JtYXQgc3RyaW5nIGlzIHNhbWUgYXMgc3RyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMSszaiwgJycpLCBzdHIoMSszaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszLjVqLCAnJyksIHN0cigxLjUrMy41aikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDNqLCAnJyksIHN0cigzaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMuMmosICcnKSwgc3RyKDMuMmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzKzBqLCAnJyksIHN0cigzKzBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnJyksIHN0cigzLjIrMGopKQorCisgICAgICAgICMgZW1wdHkgcHJlc2VudGF0aW9uIHR5cGUgc2hvdWxkIHN0aWxsIGJlIGFuYWxvZ291cyB0byBzdHIsCisgICAgICAgICMgZXZlbiB3aGVuIGZvcm1hdCBzdHJpbmcgaXMgbm9uZW1wdHkgKGlzc3VlICM1OTIwKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnLScpLCBzdHIoMy4yKzBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnPCcpLCBzdHIoMy4yKzBqKSkKKyAgICAgICAgeiA9IDQvNy4gLSAxMDBqLzcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzEwJyksIHN0cih6KSkKKyAgICAgICAgeiA9IGNvbXBsZXgoMC4wLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzInKSwgc3RyKHopKQorICAgICAgICB6ID0gY29tcGxleCgtMC4wLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzMnKSwgc3RyKHopKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErM2osICdnJyksICcxKzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoM2osICdnJyksICcwKzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICdnJyksICcxLjUrMy41aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICcrZycpLCAnKzEuNSszLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41LTMuNWosICcrZycpLCAnKzEuNS0zLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41LTMuNWosICctZycpLCAnMS41LTMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrMy41aiwgJyBnJyksICcgMS41KzMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUtMy41aiwgJyBnJyksICcgMS41LTMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41KzMuNWosICcgZycpLCAnLTEuNSszLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnIGcnKSwgJy0xLjUtMy41aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVlLTIwaiwgJ2cnKSwgJy0xLjUtMy41ZS0yMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICdmJyksICctMS41MDAwMDAtMy41MDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnRicpLCAnLTEuNTAwMDAwLTMuNTAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJ2UnKSwgJy0xLjUwMDAwMGUrMDAtMy41MDAwMDBlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJy4yZScpLCAnLTEuNTBlKzAwLTMuNTBlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJy4yRScpLCAnLTEuNTBFKzAwLTMuNTBFKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjVlMTAtMy41ZTVqLCAnLjJHJyksICctMS41RSsxMC0zLjVFKzA1aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwZycpLCAgJzEuNSszaiAgICAgICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnKjwyMGcnKSwgJzEuNSszaioqKioqKioqKioqKioqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPjIwZycpLCAgJyAgICAgICAgICAgICAgMS41KzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnXjIwZycpLCAgJyAgICAgICAxLjUrM2ogICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwJyksICAgJygxLjUrM2opICAgICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPjIwJyksICAgJyAgICAgICAgICAgICgxLjUrM2opJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnXjIwJyksICAgJyAgICAgICgxLjUrM2opICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS4xMjMtMy4xMjNqLCAnXjIwLjInKSwgJyAgICAgKDEuMS0zLjFqKSAgICAgJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICcyMC4yZicpLCAnICAgICAgICAgIDEuNTArMy4wMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc+MjAuMmYnKSwgJyAgICAgICAgICAxLjUwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwLjJmJyksICcxLjUwKzMuMDBqICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMCszaiwgJzwyMC4yZicpLCAnMTUwMDAwMDAwMDAwMDAwMDAwMDAwLjAwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIwKzNqLCAnPjQwLjJmJyksICcgICAgICAgICAgMTUwMDAwMDAwMDAwMDAwMDAwMDAwLjAwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIwKzNqLCAnXjQwLC4yZicpLCAnICAxNTAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMy4wMGogICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMSszaiwgJ140MCwuMmYnKSwgJyAxLDUwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4wMCszLjAwaiAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjErMzAwMGosICcsLjJmJyksICcxLDUwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4wMCszLDAwMC4wMGonKQorCisgICAgICAgICMgYWx0ZXJuYXRlIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSswLjVqKS5fX2Zvcm1hdF9fLCAnI2YnKQorCisgICAgICAgICMgemVybyBwYWRkaW5nIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSswLjVqKS5fX2Zvcm1hdF9fLCAnMDEwZicpCisKKyAgICAgICAgIyAnPScgYWxpZ25tZW50IGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSszaikuX19mb3JtYXRfXywgJz0yMCcpCisKKyAgICAgICAgIyBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmUgYW4gZXJyb3IKKyAgICAgICAgZm9yIHQgaW4gJ2JjZG94WCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoMS41KzAuNWopLl9fZm9ybWF0X18sIHQpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZXZlcnl0aGluZyB3b3JrcyBpbiAnJy5mb3JtYXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcqezA6LjNmfSonLmZvcm1hdCgzLjE0MTU5KzIuNzE4MjhqKSwgJyozLjE0MisyLjcxOGoqJykKKworICAgICAgICAjIGlzc3VlIDMzODI6ICdmJyBhbmQgJ0YnIHdpdGggaW5mJ3MgYW5kIG5hbidzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoSU5GKzBqKSwgJ2luZiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KElORiswaiksICdJTkYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdCgtSU5GKzBqKSwgJy1pbmYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdCgtSU5GKzBqKSwgJy1JTkYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KElORiwgSU5GKSksICdpbmYraW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIElORikpLCAnSU5GK0lORmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoSU5GLCAtSU5GKSksICdpbmYtaW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIC1JTkYpKSwgJ0lORi1JTkZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIElORikpLCAnLWluZitpbmZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIElORikpLCAnLUlORitJTkZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIC1JTkYpKSwgJy1pbmYtaW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleCgtSU5GLCAtSU5GKSksICctSU5GLUlORmonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIDApKSwgJ25hbiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoTkFOLCAwKSksICdOQU4rMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KE5BTiwgTkFOKSksICduYW4rbmFuaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIE5BTikpLCAnTkFOK05BTmonKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJjb21wbGV4IGRpdm1vZC4uLCAvLyBhbmQgJSBhcmUgIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weQppbmRleCBmNDkxNTliLi4wMzZjYmVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weQpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAogICAgICAgICAgICAgKCJwYXJlbnRoZXNpemVkIGFyZ3VtZW50IG5hbWVzIGFyZSBpbnZhbGlkIiwgU3ludGF4V2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBsZXhBcmdzVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weQppbmRleCAwZDU0MDk5Li43MTM4MDgxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkKQEAgLTIwLDU3ICsyMCw1NyBAQAogICAgICAgICBhID0gYmFzZV9zZXQoMSkKICAgICAgICAgYiA9IHNldCgxKQogICAgICAgICBjID0gc2VxKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxIGluIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygwIG5vdCBpbiBiKQotICAgICAgICBzZWxmLmFzc2VydF8oMSBpbiBjKQotICAgICAgICBzZWxmLmFzc2VydF8oMCBub3QgaW4gYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBjKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMSBpbiBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMSBub3QgaW4gYSkKIAogICAgICAgICAjIHRlc3QgY2hhciBpbiBzdHJpbmcKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdjJyBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdkJyBub3QgaW4gJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2MnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsICdhYmMnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnJyBpbiAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgJ2FiYycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IE5vbmUgaW4gJ2FiYycpCiAKICAgICBpZiBoYXZlX3VuaWNvZGU6CiAgICAgICAgIGRlZiB0ZXN0X2NoYXJfaW5fdW5pY29kZShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnYycgaW4gdW5pY29kZSgnYWJjJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ2QnIG5vdCBpbiB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2MnLCB1bmljb2RlKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2QnLCB1bmljb2RlKCdhYmMnKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluIHVuaWNvZGUoJycpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJycpIGluICcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJycpIGluIHVuaWNvZGUoJycpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluIHVuaWNvZGUoJ2FiYycpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJycpIGluICdhYmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJycpIGluIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignJywgdW5pY29kZSgnJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJycpLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksIHVuaWNvZGUoJycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignJywgdW5pY29kZSgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJycpLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odW5pY29kZSgnJyksIHVuaWNvZGUoJ2FiYycpKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogTm9uZSBpbiB1bmljb2RlKCdhYmMnKSkKIAogICAgICAgICAgICAgIyB0ZXN0IFVuaWNvZGUgY2hhciBpbiBVbmljb2RlCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnYycpIGluIHVuaWNvZGUoJ2FiYycpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJ2QnKSBub3QgaW4gdW5pY29kZSgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJ2MnKSwgdW5pY29kZSgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHVuaWNvZGUoJ2QnKSwgdW5pY29kZSgnYWJjJykpCiAKICAgICAgICAgICAgICMgdGVzdCBVbmljb2RlIGNoYXIgaW4gc3RyaW5nCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odW5pY29kZSgnYycpIGluICdhYmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGUoJ2QnKSBub3QgaW4gJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJ2MnKSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHVuaWNvZGUoJ2QnKSwgJ2FiYycpCiAKICAgICBkZWYgdGVzdF9idWlsdGluX3NlcXVlbmNlX3R5cGVzKHNlbGYpOgogICAgICAgICAjIGEgY29sbGVjdGlvbiBvZiB0ZXN0cyBvbiBidWlsdGluIHNlcXVlbmNlIHR5cGVzCiAgICAgICAgIGEgPSByYW5nZSgxMCkKICAgICAgICAgZm9yIGkgaW4gYToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIGluIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxNiBub3QgaW4gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgbm90IGluIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgYSkKIAogICAgICAgICBhID0gdHVwbGUoYSkKICAgICAgICAgZm9yIGkgaW4gYToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIGluIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxNiBub3QgaW4gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgbm90IGluIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgYSkKIAogICAgICAgICBjbGFzcyBEZXZpYW50MToKICAgICAgICAgICAgICIiIkJlaGF2ZXMgc3RyYW5nZWx5IHdoZW4gY29tcGFyZWQKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hTGlzdC5yZW1vdmUoMTQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgICAgICBzZWxmLmFzc2VydF8oRGV2aWFudDEoKSBub3QgaW4gRGV2aWFudDEuYUxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oRGV2aWFudDEoKSwgRGV2aWFudDEuYUxpc3QpCiAKICAgICAgICAgY2xhc3MgRGV2aWFudDI6CiAgICAgICAgICAgICAiIiJCZWhhdmVzIHN0cmFuZ2VseSB3aGVuIGNvbXBhcmVkCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImdvdGNoYSIKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oRGV2aWFudDIoKSBub3QgaW4gYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oRGV2aWFudDIoKSwgYSkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IGM4YTQ1OTEuLmYyOGM5NWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsMTMgKzEsMTUgQEAKICIiIlVuaXQgdGVzdHMgZm9yIGNvbnRleHRsaWIucHksIGFuZCBvdGhlciBjb250ZXh0IG1hbmFnZXJzLiIiIgogCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCBkZWNpbWFsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRocmVhZGluZwogZnJvbSBjb250ZXh0bGliIGltcG9ydCAqICAjIFRlc3RzIF9fYWxsX18KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwogCiBjbGFzcyBDb250ZXh0TWFuYWdlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzMsMTYgKzM1LDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgNDIKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDk5OSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggd29vaG9vKCkgYXMgeDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMV0pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCA0MikKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoeCkKICAgICAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigpCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNDIsIDk5OV0pCiAKICAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9ub19yZXJhaXNlKHNlbGYpOgpAQCAtNTIsNyArNTAsNyBAQAogICAgICAgICBjdHggPSB3aGVlKCkKICAgICAgICAgY3R4Ll9fZW50ZXJfXygpCiAgICAgICAgICMgQ2FsbGluZyBfX2V4aXRfXyBzaG91bGQgbm90IHJlc3VsdCBpbiBhbiBleGNlcHRpb24KLSAgICAgICAgc2VsZi5mYWlsSWYoY3R4Ll9fZXhpdF9fKFR5cGVFcnJvciwgVHlwZUVycm9yKCJmb28iKSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3R4Ll9fZXhpdF9fKFR5cGVFcnJvciwgVHlwZUVycm9yKCJmb28iKSwgTm9uZSkpCiAKICAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl90cmFwX3lpZWxkX2FmdGVyX3Rocm93KHNlbGYpOgogICAgICAgICBAY29udGV4dG1hbmFnZXIKQEAgLTg0LDcgKzgyLDcgQEAKICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKDk5OSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQyLCA5OTldKQogCi0gICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfYXR0cmlicyhzZWxmKToKKyAgICBkZWYgX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKHNlbGYpOgogICAgICAgICBkZWYgYXR0cmlicygqKmt3KToKICAgICAgICAgICAgIGRlZiBkZWNvcmF0ZShmdW5jKToKICAgICAgICAgICAgICAgICBmb3Igayx2IGluIGt3Lml0ZW1zKCk6CkBAIC05NSw4ICs5MywxNyBAQAogICAgICAgICBAYXR0cmlicyhmb289J2JhcicpCiAgICAgICAgIGRlZiBiYXooc3BhbSk6CiAgICAgICAgICAgICAiIiJXaGVlISIiIgorICAgICAgICByZXR1cm4gYmF6CisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fbmFtZV9fLCdiYXonKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5mb28sICdiYXInKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKKyAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCiBjbGFzcyBOZXN0ZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzQsMTggKzE0MSwxNCBAQAogICAgICAgICAgICAgICAgIHlpZWxkIDUKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDYpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSkgYXMgKHgsIHkpOgogICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh4KQogICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh5KQogICAgICAgICAgICAgICAgIDEgLy8gMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNCwgMiwgNSwgNiwgM10pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0LCAyLCA1LCA2LCAzXSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZF9yaWdodF9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgIHN0YXRlID0gW10KICAgICAgICAgQGNvbnRleHRtYW5hZ2VyCiAgICAgICAgIGRlZiBhKCk6CiAgICAgICAgICAgICB5aWVsZCAxCkBAIC0xNTcsMTUgKzE2MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBiKCkpIGFzICh4LCB5KToKICAgICAgICAgICAgICAgICAxIC8vIDAKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeCwgeSksICgxLCAyKSkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVyYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeCwgeSksICgxLCAyKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZF9iX3N3YWxsb3dzKHNlbGYpOgogICAgICAgICBAY29udGV4dG1hbmFnZXIKQEAgLTI0MywxNCArMjQxLDExIEBACiAgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDEpCiAgICAgICAgIHggPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgW10pCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIGNsb3NpbmcoeCkgYXMgeToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAgICAgICAgICAgICAgICAgMSAvLyAwCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzFdKQogCiBjbGFzcyBGaWxlQ29udGV4dFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjU5LDQwICsyNTQsMzIgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IE5vbmUKICAgICAgICAgICAgIHdpdGggb3Blbih0Zm4sICJ3IikgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihmLmNsb3NlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogICAgICAgICAgICAgICAgIGYud3JpdGUoIkJvb2hcbiIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5jbG9zZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAgICAgICAgICAgICBmID0gTm9uZQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgInIiKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZihmLmNsb3NlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgIkJvb2hcbiIpCiAgICAgICAgICAgICAgICAgICAgIDEgLy8gMAotICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLmNsb3NlZCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0Zm4pCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBMb2NrQ29udGV4dFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBib2lsZXJQbGF0ZShzZWxmLCBsb2NrLCBsb2NrZWQpOgotICAgICAgICBzZWxmLmZhaWxJZihsb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrZWQoKSkKICAgICAgICAgd2l0aCBsb2NrOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxvY2tlZCgpKQotICAgICAgICBzZWxmLmZhaWxJZihsb2NrZWQoKSkKLSAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggbG9jazoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobG9ja2VkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2tlZCgpKQogICAgICAgICAgICAgICAgIDEgLy8gMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihsb2NrZWQoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrZWQoKSkKIAogICAgIGRlZiB0ZXN0V2l0aExvY2soc2VsZik6CiAgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCkBAIC0zMzAsOCArMzE3LDEwIEBACiAKICMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb29raWUucHkgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQppbmRleCA4MzllM2UwLi5kMDkzOThkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weQpAQCAtNDcsMTcgKzQ3LDE3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dChbJ3BhdGgnXSksCiAgICAgICAgICAgICAnU2V0LUNvb2tpZTogQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBQYXRoPS9hY21lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmpzX291dHB1dCgpLCAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmpzX291dHB1dCgpLCByIiIiCiAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZTsgVmVyc2lvbj0xIjsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPVwiV0lMRV9FX0NPWU9URVwiOyBQYXRoPS9hY21lOyBWZXJzaW9uPTEiOwogICAgICAgICAvLyBlbmQgaGlkaW5nIC0tPgogICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgIiIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KFsncGF0aCddKSwgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5qc19vdXRwdXQoWydwYXRoJ10pLCByIiIiCiAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKLSAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZSI7CisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJDdXN0b21lcj1cIldJTEVfRV9DT1lPVEVcIjsgUGF0aD0vYWNtZSI7CiAgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CiAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAiIiIpCkBAIC03Miw2ICs3MiwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ2V4cGlyZXMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnV2VkLCAwMS1KYW4tOTggMDA6MDA6MDAgR01UJykKIAorICAgIGRlZiB0ZXN0X2V4dGVuZGVkX2VuY29kZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA5ODI0OiBzb21lIGJyb3dzZXJzIGRvbid0IGZvbGxvdyB0aGUgc3RhbmRhcmQ7IHdlIG5vdworICAgICAgICAjIGVuY29kZSAsIGFuZCA7IHRvIGtlZXAgdGhlbSBmcm9tIHRyaXBwaW5nIHVwLgorICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIENbJ3ZhbCddID0gInNvbWUsZnVua3k7c3R1ZmYiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoWyd2YWwnXSksCisgICAgICAgICAgICAnU2V0LUNvb2tpZTogdmFsPSJzb21lXFwwNTRmdW5reVxcMDczc3R1ZmYiJykKKwogICAgIGRlZiB0ZXN0X3F1b3RlZF9tZXRhKHNlbGYpOgogICAgICAgICAjIFRyeSBjb29raWUgd2l0aCBxdW90ZWQgbWV0YS1kYXRhCiAgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29va2llbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKaW5kZXggMTI5MmIyNi4uZGQwYWQzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb29raWVsaWIucHkKQEAgLTE4LDE1ICsxOCwxNSBAQAogCiAgICAgICAgIGJhc2UgPSAxMDE5MjI3MDAwCiAgICAgICAgIGRheSA9IDI0KjM2MDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGltZTJpc296KGJhc2UpLCAiMjAwMi0wNC0xOSAxNDozNjo0MFoiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0aW1lMmlzb3ooYmFzZStkYXkpLCAiMjAwMi0wNC0yMCAxNDozNjo0MFoiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0aW1lMmlzb3ooYmFzZSsyKmRheSksICIyMDAyLTA0LTIxIDE0OjM2OjQwWiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRpbWUyaXNveihiYXNlKzMqZGF5KSwgIjIwMDItMDQtMjIgMTQ6MzY6NDBaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZSksICIyMDAyLTA0LTE5IDE0OjM2OjQwWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UrZGF5KSwgIjIwMDItMDQtMjAgMTQ6MzY6NDBaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZSsyKmRheSksICIyMDAyLTA0LTIxIDE0OjM2OjQwWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UrMypkYXkpLCAiMjAwMi0wNC0yMiAxNDozNjo0MFoiKQogCiAgICAgICAgIGF6ID0gdGltZTJpc296KCkKICAgICAgICAgYnogPSB0aW1lMmlzb3ooNTAwMDAwKQogICAgICAgICBmb3IgdGV4dCBpbiAoYXosIGJ6KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5zZWFyY2gociJeXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkWiQiLCB0ZXh0KSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gociJeXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkWiQiLCB0ZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHRpbWUyaXNveiBmb3JtYXQ6ICVzICVzIiAlIChheiwgYnopKQogCiAgICAgZGVmIHRlc3RfaHR0cDJ0aW1lKHNlbGYpOgpAQCAtMzUsMTMgKzM1LDEzIEBACiAgICAgICAgIGRlZiBwYXJzZV9kYXRlKHRleHQpOgogICAgICAgICAgICAgcmV0dXJuIHRpbWUuZ210aW1lKGh0dHAydGltZSh0ZXh0KSlbOjZdCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfZGF0ZSgiMDEgSmFuIDIwMDEiKSwgKDIwMDEsIDEsIDEsIDAsIDAsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfZGF0ZSgiMDEgSmFuIDIwMDEiKSwgKDIwMDEsIDEsIDEsIDAsIDAsIDAuMCkpCiAKICAgICAgICAgIyB0aGlzIHRlc3Qgd2lsbCBicmVhayBhcm91bmQgeWVhciAyMDcwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlX2RhdGUoIjAzLUZlYi0yMCIpLCAoMjAyMCwgMiwgMywgMCwgMCwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMy1GZWItMjAiKSwgKDIwMjAsIDIsIDMsIDAsIDAsIDAuMCkpCiAKICAgICAgICAgIyB0aGlzIHRlc3Qgd2lsbCBicmVhayBhcm91bmQgeWVhciAyMDQ4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlX2RhdGUoIjAzLUZlYi05OCIpLCAoMTk5OCwgMiwgMywgMCwgMCwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMy1GZWItOTgiKSwgKDE5OTgsIDIsIDMsIDAsIDAsIDAuMCkpCiAKICAgICBkZWYgdGVzdF9odHRwMnRpbWVfZm9ybWF0cyhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGh0dHAydGltZSwgdGltZTJpc296CkBAIC03MSwxNSArNzEsMTUgQEAKICAgICAgICAgdGVzdF90ID0gNzYwMjMzNjAwICAjIGFzc3VtZSBicm9rZW4gUE9TSVggY291bnRpbmcgb2Ygc2Vjb25kcwogICAgICAgICByZXN1bHQgPSB0aW1lMmlzb3oodGVzdF90KQogICAgICAgICBleHBlY3RlZCA9ICIxOTk0LTAyLTAzIDAwOjAwOjAwWiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICA9PiAgJyVzJyAoJXMpIiAlICh0ZXN0X3QsIHJlc3VsdCwgZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICA9PiAgJyVzJyAoJXMpIiAlICh0ZXN0X3QsIHJlc3VsdCwgZXhwZWN0ZWQpKQogCiAgICAgICAgIGZvciBzIGluIHRlc3RzOgogICAgICAgICAgICAgdCA9IGh0dHAydGltZShzKQogICAgICAgICAgICAgdDIgPSBodHRwMnRpbWUocy5sb3dlcigpKQogICAgICAgICAgICAgdDMgPSBodHRwMnRpbWUocy51cHBlcigpKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odCA9PSB0MiA9PSB0MyA9PSB0ZXN0X3QsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodCA9PSB0MiA9PSB0MyA9PSB0ZXN0X3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgID0+ICAlcywgJXMsICVzICglcykiICUgKHMsIHQsIHQyLCB0MywgdGVzdF90KSkKIAogICAgIGRlZiB0ZXN0X2h0dHAydGltZV9nYXJiYWdlKHNlbGYpOgpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICAgICAgJzAxLTAxLTE5ODAgMDA6NjE6MDAnLAogICAgICAgICAgICAgJzAxLTAxLTE5ODAgMDA6MDA6NjInLAogICAgICAgICAgICAgXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhodHRwMnRpbWUodGVzdCkgaXMgTm9uZSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShodHRwMnRpbWUodGVzdCkgaXMgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDJ0aW1lKCVzKSBpcyBub3QgTm9uZVxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwMnRpbWUodGVzdCkgJXMiICUgKHRlc3QsIGh0dHAydGltZSh0ZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICApCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICdmb289YmFyOyBleHBpcmVzPTAxIEphbiAyMDQwIDIyOjIzOjMyIEdNVCcsCiAgICAgICAgICAgICAnZm9vPWJhcjsgZXhwaXJlcz0iMDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UIicsCiAgICAgICAgICAgICBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfbnNfaGVhZGVycyhbaGRyXSksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFtoZHJdKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9uc19oZWFkZXJzX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBwYXJzZV9uc19oZWFkZXJzCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAgICAgICAgICdmb289YmFyOyB2ZXJzaW9uPSIxIicsCiAgICAgICAgICAgICAnZm9vPWJhcjsgVmVyc2lvbj0iMSInLAogICAgICAgICAgICAgXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfbnNfaGVhZGVycyhbaGRyXSksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfbnNfaGVhZGVyc19zcGVjaWFsX25hbWVzKHNlbGYpOgogICAgICAgICAjIG5hbWVzIHN1Y2ggYXMgJ2V4cGlyZXMnIGFyZSBub3Qgc3BlY2lhbCBpbiBmaXJzdCBuYW1lPXZhbHVlIHBhaXIKQEAgLTEzNSwxNSArMTM1LDE1IEBACiAgICAgICAgICMgQ29va2llIHdpdGggbmFtZSAnZXhwaXJlcycKICAgICAgICAgaGRyID0gJ2V4cGlyZXM9MDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UJwogICAgICAgICBleHBlY3RlZCA9IFtbKCJleHBpcmVzIiwgIjAxIEphbiAyMDQwIDIyOjIzOjMyIEdNVCIpLCAoInZlcnNpb24iLCAiMCIpXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfbnNfaGVhZGVycyhbaGRyXSksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2pvaW5faGVhZGVyX3dvcmRzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgam9pbl9oZWFkZXJfd29yZHMKIAogICAgICAgICBqb2luZWQgPSBqb2luX2hlYWRlcl93b3JkcyhbWygiZm9vIiwgTm9uZSksICgiYmFyIiwgImJheiIpXV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGpvaW5lZCwgImZvbzsgYmFyPWJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbmVkLCAiZm9vOyBiYXI9YmF6IikKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhqb2luX2hlYWRlcl93b3JkcyhbW11dKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbl9oZWFkZXJfd29yZHMoW1tdXSksICIiKQogCiAgICAgZGVmIHRlc3Rfc3BsaXRfaGVhZGVyX3dvcmRzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgc3BsaXRfaGVhZGVyX3dvcmRzCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAgICAgICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoTm9uZSwgZikKICAgICAgICAgICAgICAgICByZXN1bHQgPSAiKGVycm9yIC0tIHRyYWNlYmFjayBmb2xsb3dzKVxuXG4lcyIgJSBmLmdldHZhbHVlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgIGV4cGVjdCwgIiIiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgIGV4cGVjdCwgIiIiCiBXaGVuIHBhcnNpbmc6ICclcycKIEV4cGVjdGVkOiAgICAgJyVzJwogR290OiAgICAgICAgICAnJXMnCkBAIC0yMDksNyArMjA5LDcgQEAKICAgICAgICAgZm9yIGFyZywgZXhwZWN0IGluIHRlc3RzOgogICAgICAgICAgICAgaW5wdXQgPSBzcGxpdF9oZWFkZXJfd29yZHMoW2FyZ10pCiAgICAgICAgICAgICByZXMgPSBqb2luX2hlYWRlcl93b3JkcyhpbnB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgZXhwZWN0LCAiIiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3QsICIiIgogV2hlbiBwYXJzaW5nOiAnJXMnCiBFeHBlY3RlZDogICAgICclcycKIEdvdDogICAgICAgICAgJyVzJwpAQCAtMzY2LDggKzM2Niw4IEBACiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgcmVxdWVzdCA9IHVybGxpYjIuUmVxdWVzdCh1cmwpCiAgICAgICAgICAgICByID0gcG9sLmRvbWFpbl9yZXR1cm5fb2soZG9tYWluLCByZXF1ZXN0KQotICAgICAgICAgICAgaWYgb2s6IHNlbGYuYXNzZXJ0XyhyKQotICAgICAgICAgICAgZWxzZTogc2VsZi5hc3NlcnRfKG5vdCByKQorICAgICAgICAgICAgaWYgb2s6IHNlbGYuYXNzZXJ0VHJ1ZShyKQorICAgICAgICAgICAgZWxzZTogc2VsZi5hc3NlcnRUcnVlKG5vdCByKQogCiAgICAgZGVmIHRlc3RfbWlzc2luZ192YWx1ZShzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IE1vemlsbGFDb29raWVKYXIsIGx3cF9jb29raWVfc3RyCkBAIC0zNzksMTIgKzM3OSwxMiBAQAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnZWdncycpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICcic3BhbSI7IHBhdGg9L2Zvby8nKQogICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJlZ2dzIl0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS52YWx1ZSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUubmFtZSwgImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnZhbHVlIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLm5hbWUsICJlZ2dzIikKICAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bJy9mb28vJ11bJyJzcGFtIiddCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb29raWUudmFsdWUgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29va2llLm5hbWUsICcic3BhbSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsd3BfY29va2llX3N0cihjb29raWUpLCAoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUudmFsdWUgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUubmFtZSwgJyJzcGFtIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHdwX2Nvb2tpZV9zdHIoY29va2llKSwgKAogICAgICAgICAgICAgcicic3BhbSI7IHBhdGg9Ii9mb28vIjsgZG9tYWluPSJ3d3cuYWNtZS5jb20iOyAnCiAgICAgICAgICAgICAncGF0aF9zcGVjOyBkaXNjYXJkOyB2ZXJzaW9uPTAnKSkKICAgICAgICAgb2xkX3N0ciA9IHJlcHIoYykKQEAgLTM5NSwxMyArMzk1LDEzIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy51bmxpbmsoYy5maWxlbmFtZSkKICAgICAgICAgIyBjb29raWVzIHVuY2hhbmdlZCBhcGFydCBmcm9tIGxvc3QgaW5mbyByZS4gd2hldGhlciBwYXRoIHdhcyBzcGVjaWZpZWQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICByZXByKGMpLAogICAgICAgICAgICAgcmUuc3ViKCJwYXRoX3NwZWNpZmllZD0lcyIgJSBUcnVlLCAicGF0aF9zcGVjaWZpZWQ9JXMiICUgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgb2xkX3N0cikKICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vLyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnInNwYW0iOyBlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJzcGFtIjsgZWdncycpCiAKICAgICBkZWYgdGVzdF9yZmMyMTA5X2hhbmRsaW5nKHNlbGYpOgogICAgICAgICAjIFJGQyAyMTA5IGNvb2tpZXMgYXJlIGhhbmRsZWQgYXMgUkZDIDI5NjUgb3IgTmV0c2NhcGUgY29va2llcywKQEAgLTQyNiw3ICs0MjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5leGFtcGxlLmNvbSJdWyIvIl1bIm5pIl0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8odmVyc2lvbiBpcyBOb25lKSAgIyBkaWRuJ3QgZXhwZWN0IGEgc3RvcmVkIGNvb2tpZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2ZXJzaW9uIGlzIE5vbmUpICAjIGRpZG4ndCBleHBlY3QgYSBzdG9yZWQgY29va2llCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLnZlcnNpb24sIHZlcnNpb24pCiAgICAgICAgICAgICAgICAgIyAyOTY1IGNvb2tpZXMgYXJlIHVuYWZmZWN0ZWQKQEAgLTQ0OSwyOSArNDQ5LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBpcmVzPSJGb28gQmFyIDI1IDMzOjIyOjExIDMwMjIiJykKIAogICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyIuYWNtZS5jb20iXVsiLyJdWyJzcGFtIl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29va2llLmRvbWFpbiwgIi5hY21lLmNvbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb29raWUuZG9tYWluX3NwZWNpZmllZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29va2llLnBvcnQsIERFRkFVTFRfSFRUUF9QT1JUKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUuZG9tYWluLCAiLmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5kb21haW5fc3BlY2lmaWVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5wb3J0LCBERUZBVUxUX0hUVFBfUE9SVCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUucG9ydF9zcGVjaWZpZWQpCiAgICAgICAgICMgY2FzZSBpcyBwcmVzZXJ2ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cigiYmxBcmdoIikgYW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUuaGFzX25vbnN0YW5kYXJkX2F0dHIoImJsQXJnaCIpIGFuZAogICAgICAgICAgICAgICAgICAgICAgbm90IGNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cigiYmxhcmdoIikpCiAKICAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsibmkiXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb29raWUuZG9tYWluLCAid3d3LmFjbWUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjb29raWUuZG9tYWluX3NwZWNpZmllZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29va2llLnBvcnQsICI4MCw4MDgwIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUuZG9tYWluLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUuZG9tYWluX3NwZWNpZmllZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUucG9ydCwgIjgwLDgwODAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnBvcnRfc3BlY2lmaWVkKQogCiAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bIm5pbmkiXQotICAgICAgICBzZWxmLmFzc2VydF8oY29va2llLnBvcnQgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjb29raWUucG9ydF9zcGVjaWZpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUucG9ydCBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKIAogICAgICAgICAjIGludmFsaWQgZXhwaXJlcyBzaG91bGQgbm90IGNhdXNlIGNvb2tpZSB0byBiZSBkcm9wcGVkCiAgICAgICAgIGZvbyA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbyJdCiAgICAgICAgIHNwYW0gPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJmb28iXQotICAgICAgICBzZWxmLmFzc2VydF8oZm9vLmV4cGlyZXMgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwYW0uZXhwaXJlcyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLmV4cGlyZXMgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwYW0uZXhwaXJlcyBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfbnNfcGFyc2VyX3NwZWNpYWxfbmFtZXMoc2VsZik6CiAgICAgICAgICMgbmFtZXMgc3VjaCBhcyAnZXhwaXJlcycgYXJlIG5vdCBzcGVjaWFsIGluIGZpcnN0IG5hbWU9dmFsdWUgcGFpcgpAQCAtNDgzLDggKzQ4Myw4IEBACiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICd2ZXJzaW9uPWVnZ3M7IHNwYW09ZWdncycpCiAKICAgICAgICAgY29va2llcyA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl0KLSAgICAgICAgc2VsZi5hc3NlcnRfKCdleHBpcmVzJyBpbiBjb29raWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oJ3ZlcnNpb24nIGluIGNvb2tpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZXhwaXJlcycgaW4gY29va2llcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd2ZXJzaW9uJyBpbiBjb29raWVzKQogCiAgICAgZGVmIHRlc3RfZXhwaXJlcyhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHRpbWUybmV0c2NhcGUsIENvb2tpZUphcgpAQCAtNDk0LDE0ICs0OTQsMTQgQEAKICAgICAgICAgZnV0dXJlID0gdGltZTJuZXRzY2FwZSh0aW1lLnRpbWUoKSszNjAwKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIjsgZXhwaXJlcz0lcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAgICAgICAgIG5vdyA9IHRpbWUybmV0c2NhcGUodGltZS50aW1lKCktMSkKICAgICAgICAgIyAuLi4gYW5kIGlmIGluIHBhc3Qgb3IgcHJlc2VudCwgZGlzY2FyZCBpdAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnZm9vPSJlZ2dzIjsgZXhwaXJlcz0lcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICBub3cpCiAgICAgICAgIGggPSBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygnc3BhbT0iYmFyIicgaW4gaCBhbmQgImZvbyIgbm90IGluIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NwYW09ImJhciInIGluIGggYW5kICJmb28iIG5vdCBpbiBoKQogCiAgICAgICAgICMgbWF4LWFnZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZXhwaXJlcywgYW5kIHplcm8gbWF4LWFnZSBpcyByZXF1ZXN0IHRvCiAgICAgICAgICMgZGVsZXRlIGJvdGggbmV3IGNvb2tpZSBhbmQgYW55IG9sZCBtYXRjaGluZyBjb29raWUKQEAgLTUwOSwyMCArNTA5LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2Jhcj0iYmFyIjsgZXhwaXJlcz0lcycgJQogICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdlZ2dzPSJiYXIiOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBpcmVzPSVzOyBtYXgtYWdlPTAnICUgZnV0dXJlKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnYmFyPSJiYXIiOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTA7IGV4cGlyZXM9JXMnICUgZnV0dXJlKQogICAgICAgICBoID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKIAogICAgICAgICAjIHRlc3QgZXhwaXJ5IGF0IGVuZCBvZiBzZXNzaW9uIGZvciBjb29raWVzIHdpdGggbm8gZXhwaXJlcyBhdHRyaWJ1dGUKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cucmh1YmFyYi5uZXQvIiwgJ3dodW09ImZpenoiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKICAgICAgICAgYy5jbGVhcl9zZXNzaW9uX2Nvb2tpZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygnc3BhbT0iYmFyIicgaW4gaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW09ImJhciInLCBoKQogCiAgICAgICAgICMgWFhYIFJGQyAyOTY1IGV4cGlyeSBydWxlcyAoc29tZSBhcHBseSB0byBWMCB0b28pCiAKQEAgLTUzNCwzOSArNTM0LDM5IEBACiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ3NwYW09ImJhciI7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIvIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgiLCAnZWdncz0iYmFyIjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi8iIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiIiwKICAgICAgICAgICAgICAgICAgICAgICAnZWdncz0iYmFyIjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi9ibGFoLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvcmh1YmFyYi8iLAogICAgICAgICAgICAgICAgICAgICAgICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiL2JsYWgvcmh1YmFyYi8iIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvYmxhaC9yaHViYXJiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgICMgTmV0c2NhcGUKIAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ3NwYW09ImJhciInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi8iIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcigpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgiLCAnZWdncz0iYmFyIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiIiwgJ2VnZ3M9ImJhciInKQotICAgICAgICBzZWxmLmFzc2VydF8oIi9ibGFoIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgiLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiLyIsICdlZ2dzPSJiYXIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIvYmxhaC9yaHViYXJiIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvcmh1YmFyYiIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9wYXRoX3dpdGhfcXVlcnkoc2VsZik6CiAgICAgICAgIGNqID0gY29va2llbGliLkNvb2tpZUphcigpCkBAIC01NzQsOSArNTc0LDkgQEAKICAgICAgICAgdmFsdWUgPSAnZWdncz0iYmFyIicKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osIHVyaSwgdmFsdWUpCiAgICAgICAgICMgZGVmYXVsdCBwYXRoIGRvZXMgbm90IGluY2x1ZGUgcXVlcnksIHNvIGlzICIvIiwgbm90ICIvP3NwYW0iCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiLyIgaW4gY2ouX2Nvb2tpZXNbImV4YW1wbGUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjai5fY29va2llc1siZXhhbXBsZS5jb20iXSkKICAgICAgICAgIyBjb29raWUgaXMgc2VudCBiYWNrIHRvIHRoZSBzYW1lIFVSSQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF9uZXRzY2FwZShjaiwgdXJpKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoY2osIHVyaSksIHZhbHVlKQogCiAgICAgZGVmIHRlc3RfZXNjYXBlX3BhdGgoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBlc2NhcGVfcGF0aApAQCAtNjAwLDcgKzYwMCw3IEBACiAgICAgICAgICAgICAodSIvZm9vL2Jhclx1YWJjZCIsICIvZm9vL2JhciVFQSVBRiU4RCIpLCAgIyBVVEYtOCBlbmNvZGVkCiAgICAgICAgICAgICBdCiAgICAgICAgIGZvciBhcmcsIHJlc3VsdCBpbiBjYXNlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVzY2FwZV9wYXRoKGFyZyksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlX3BhdGgoYXJnKSwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfcmVxdWVzdF9wYXRoKHNlbGYpOgogICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKQEAgLTYwOCwyNSArNjA4LDI1IEBACiAgICAgICAgICMgd2l0aCBwYXJhbWV0ZXJzCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcmhldW0vcmhhcG9udGljdW07IgogICAgICAgICAgICAgICAgICAgICAgICJmb289YmFyO3Npbmc9c29uZz9hcHBsZXM9cGVhcnMmc3BhbT1lZ2dzI25pIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9wYXRoKHJlcSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIvcmhldW0vcmhhcG9udGljdW07Zm9vPWJhcjtzaW5nPXNvbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIvcmhldW0vcmhhcG9udGljdW07Zm9vPWJhcjtzaW5nPXNvbmciKQogICAgICAgICAjIHdpdGhvdXQgcGFyYW1ldGVycwogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3JoZXVtL3JoYXBvbnRpY3VtPyIKICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGVzPXBlYXJzJnNwYW09ZWdncyNuaSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcXVlc3RfcGF0aChyZXEpLCAiL3JoZXVtL3JoYXBvbnRpY3VtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X3BhdGgocmVxKSwgIi9yaGV1bS9yaGFwb250aWN1bSIpCiAgICAgICAgICMgbWlzc2luZyBmaW5hbCBzbGFzaAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9wYXRoKHJlcSksICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X3BhdGgocmVxKSwgIi8iKQogCiAgICAgZGVmIHRlc3RfcmVxdWVzdF9wb3J0KHNlbGYpOgogICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHJlcXVlc3RfcG9ydCwgREVGQVVMVF9IVFRQX1BPUlQKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbToxMjM0LyIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjQzMjEifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9wb3J0KHJlcSksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X3BvcnQocmVxKSwgIjEyMzQiKQogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjQzMjEifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9wb3J0KHJlcSksIERFRkFVTFRfSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcG9ydChyZXEpLCBERUZBVUxUX0hUVFBfUE9SVCkKIAogICAgIGRlZiB0ZXN0X3JlcXVlc3RfaG9zdChzZWxmKToKICAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CkBAIC02MzYsNzkgKzYzNiw3OSBAQAogICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo4MCJ9KQogICAgICAgICAjIGxpYnd3dy1wZXJsIHdhbnRzIHRoaXMgcmVzcG9uc2UsIGJ1dCB0aGF0IHNlZW1zIHdyb25nIChSRkMgMjYxNiwKICAgICAgICAgIyBzZWN0aW9uIDUuMiwgcG9pbnQgMS4sIGFuZCBSRkMgMjk2NSBzZWN0aW9uIDEsIHBhcmFncmFwaCAzKQotICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXF1ZXN0X2hvc3QocmVxKSwgIjEuMS4xLjEiKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9ob3N0KHJlcSksICIxLjEuMS4xIikKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iLAogICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogImlycmVsZXZhbnQuY29tIn0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCiAgICAgICAgICMgbm90IGFjdHVhbGx5IHN1cmUgdGhpcyBvbmUgaXMgdmFsaWQgUmVxdWVzdCBvYmplY3QsIHNvIG1heWJlIHNob3VsZAogICAgICAgICAjIHJlbW92ZSB0ZXN0IGZvciBubyBob3N0IGluIHVybCBpbiByZXF1ZXN0X2hvc3QgZnVuY3Rpb24/CiAgICAgICAgIHJlcSA9IFJlcXVlc3QoIi9yZXNvdXJjZS5odG1sIiwKICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb20ifSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxdWVzdF9ob3N0KHJlcSksICJ3d3cuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKICAgICAgICAgIyBwb3J0IHNob3VsZG4ndCBiZSBpbiByZXF1ZXN0LWhvc3QKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbToyMzQ1L3Jlc291cmNlLmh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo1NDMyIn0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCiAKICAgICBkZWYgdGVzdF9pc19IRE4oc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBpc19IRE4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzX0hETigiZm9vLmJhci5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzX0hETigiMWZvbzIuM2JhcjQuNWNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX0hETigiMTkyLjE2OC4xLjEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc19IRE4oIiIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX0hETigiLiIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX0hETigiLmZvby5iYXIuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNfSEROKCIuLmZvbyIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGlzX0hETigiZm9vLiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfSEROKCJmb28uYmFyLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfSEROKCIxZm9vMi4zYmFyNC41Y29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIxOTIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIuZm9vLmJhci5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIi4uZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCJmb28uIikpCiAKICAgICBkZWYgdGVzdF9yZWFjaChzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHJlYWNoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCJ3d3cuYWNtZS5jb20iKSwgIi5hY21lLmNvbSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCJhY21lLmNvbSIpLCAiYWNtZS5jb20iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFjaCgiYWNtZS5sb2NhbCIpLCAiLmxvY2FsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goIi5sb2NhbCIpLCAiLmxvY2FsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhY2goIi5jb20iKSwgIi5jb20iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFjaCgiLiIpLCAiLiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCIiKSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWNoKCIxOTIuMTY4LjAuMSIpLCAiMTkyLjE2OC4wLjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCJ3d3cuYWNtZS5jb20iKSwgIi5hY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goImFjbWUuY29tIiksICJhY21lLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goImFjbWUubG9jYWwiKSwgIi5sb2NhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIi5sb2NhbCIpLCAiLmxvY2FsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLmNvbSIpLCAiLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIi4iKSwgIi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCIiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIjE5Mi4xNjguMC4xIiksICIxOTIuMTY4LjAuMSIpCiAKICAgICBkZWYgdGVzdF9kb21haW5fbWF0Y2goc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBkb21haW5fbWF0Y2gsIHVzZXJfZG9tYWluX21hdGNoCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhkb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIjE5Mi4xNjguMS4xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuMTY4LjEuMSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgInguWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBkb21haW5fbWF0Y2goIngueS5jb20iLCAiWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRvbWFpbl9tYXRjaCgiYS5iLmMuY29tIiwgIi5jLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGRvbWFpbl9tYXRjaCgiLmMuY29tIiwgImEuYi5jLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZG9tYWluX21hdGNoKCJleGFtcGxlLmxvY2FsIiwgIi5sb2NhbCIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGRvbWFpbl9tYXRjaCgiYmxhaC5ibGFoIiwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGRvbWFpbl9tYXRjaCgiIiwgIi5yaHViYXJiLnJodWJhcmIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGRvbWFpbl9tYXRjaCgiIiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIxOTIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICJ4LlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goIngueS5jb20iLCAiLlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goImEuYi5jLmNvbSIsICIuYy5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goIi5jLmNvbSIsICJhLmIuYy5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiZXhhbXBsZS5sb2NhbCIsICIubG9jYWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goImJsYWguYmxhaCIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goIiIsICIucmh1YmFyYi5yaHViYXJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goIiIsICIiKSkKIAotICAgICAgICBzZWxmLmFzc2VydF8odXNlcl9kb21haW5fbWF0Y2goImFjbWUuY29tIiwgImFjbWUuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdXNlcl9kb21haW5fbWF0Y2goImFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8odXNlcl9kb21haW5fbWF0Y2goInJodWJhcmIuYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgid3d3LnJodWJhcmIuYWNtZS5jb20iLCAiLmFjbWUuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJ4LlkuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8odXNlcl9kb21haW5fbWF0Y2goInkuY29tIiwgIlkuY29tIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdXNlcl9kb21haW5fbWF0Y2goIi55LmNvbSIsICJZLmNvbSIpKQotICAgICAgICBzZWxmLmFzc2VydF8odXNlcl9kb21haW5fbWF0Y2goIi55LmNvbSIsICIuWS5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5jb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJjb20iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICJtIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLm0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiMTkyLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJhY21lLmNvbSIsICJhY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJhY21lLmNvbSIsICIuYWNtZS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJyaHViYXJiLmFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goInd3dy5yaHViYXJiLmFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAieC5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ5LmNvbSIsICJZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCIueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCIueS5jb20iLCAiLlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAibSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIjE5Mi4xNjguMS4xIikpCiAgICAgICAgICMgbm90IGJvdGggSEROcywgc28gbXVzdCBzdHJpbmctY29tcGFyZSBlcXVhbCB0byBtYXRjaAotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuMTY4LjEuMSIpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4xNjguMS4xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4iKSkKICAgICAgICAgIyBlbXB0eSBzdHJpbmcgaXMgYSBzcGVjaWFsIGNhc2UKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB1c2VyX2RvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIiIpKQogCiAgICAgZGVmIHRlc3Rfd3JvbmdfZG9tYWluKHNlbGYpOgogICAgICAgICAjIENvb2tpZXMgd2hvc2UgZWZmZWN0aXZlIHJlcXVlc3QtaG9zdCBuYW1lIGRvZXMgbm90IGRvbWFpbi1tYXRjaCB0aGUKQEAgLTcxOSw3ICs3MTksNyBAQAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5uYXN0eS5jb20vIiwKICAgICAgICAgICAgICAgICAgICAgICAnZm9vPWJhcjsgZG9tYWluPWZyaWVuZGx5Lm9yZzsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAwKQogCiAgICAgZGVmIHRlc3Rfc3RyaWN0X2RvbWFpbihzZWxmKToKICAgICAgICAgIyBDb29raWVzIHdob3NlIGRvbWFpbiBpcyBhIGNvdW50cnktY29kZSB0bGQgbGlrZSAuY28udWsgc2hvdWxkCkBAIC03MzEsMTEgKzczMSwxMSBAQAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjaiwgImh0dHA6Ly9leGFtcGxlLmNvLnVrLyIsICdubz1wcm9ibGVtbycpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuY28udWsvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29rZXk9ZG9rZXk7IERvbWFpbj0uZXhhbXBsZS5jby51aycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjaiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNqKSwgMikKICAgICAgICAgZm9yIHBzZXVkb190bGQgaW4gWyIuY28udWsiLCAiLm9yZy56YSIsICIudHgudXMiLCAiLm5hbWUudXMiXToKICAgICAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuJXMvIiAlIHBzZXVkb190bGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBEb21haW49LmNvLnVrJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjaiksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjaiksIDIpCiAKICAgICBkZWYgdGVzdF90d29fY29tcG9uZW50X2RvbWFpbl9ucyhzZWxmKToKICAgICAgICAgIyBOZXRzY2FwZTogLnd3dy5iYXIuY29tLCB3d3cuYmFyLmNvbSwgLmJhci5jb20sIGJhci5jb20sIG5vIGRvbWFpbgpAQCAtNzQ3LDE3ICs3NDcsMTcgQEAKIAogICAgICAgICAjIHR3by1jb21wb25lbnQgVjAgZG9tYWluIGlzIE9LCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iLCAnbnM9YmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLl9jb29raWVzWyJmb28ubmV0Il1bIi8iXVsibnMiXS52YWx1ZSwgImJhciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iKSwgIm5zPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbImZvby5uZXQiXVsiLyJdWyJucyJdLnZhbHVlLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvIiksICJucz1iYXIiKQogICAgICAgICAjICp3aWxsKiBiZSByZXR1cm5lZCB0byBhbnkgb3RoZXIgZG9tYWluICh1bmxpa2UgUkZDIDI5NjUpLi4uCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJucz1iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5zPWJhciIpCiAgICAgICAgICMgLi4udW5sZXNzIHJlcXVlc3RlZCBvdGhlcndpc2UKICAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeSgKICAgICAgICAgICAgIHN0cmljdF9uc19kb21haW49RGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3ROb25Eb21haW4pCiAgICAgICAgIGMuc2V0X3BvbGljeShwb2wpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksICIiKQogCiAgICAgICAgICMgdW5saWtlIFJGQyAyOTY1LCBldmVuIGV4cGxpY2l0IHR3by1jb21wb25lbnQgZG9tYWluIGlzIE9LLAogICAgICAgICAjIGJlY2F1c2UgLmZvby5uZXQgbWF0Y2hlcyBmb28ubmV0CkBAIC03NjYsMTcgKzc2NiwxNyBAQAogICAgICAgICAjIGV2ZW4gaWYgc3RhcnRzIHdpdGggYSBkb3QgLS0gaW4gTlMgcnVsZXMsIC5mb28ubmV0IG1hdGNoZXMgZm9vLm5ldCEKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby9iYXIvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0yPWVnZ3M7IGRvbWFpbj0uZm9vLm5ldCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2ZvbyJdWyJzcGFtMSJdLnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdncyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vYmFyIl1bInNwYW0yIl0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby9iYXIvIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFtMj1lZ2dzOyBzcGFtMT1lZ2dzOyBucz1iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9jb29raWVzWyIuZm9vLm5ldCJdWyIvZm9vIl1bInNwYW0xIl0udmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vYmFyIl1bInNwYW0yIl0udmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC9mb28vYmFyLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFtMj1lZ2dzOyBzcGFtMT1lZ2dzOyBucz1iYXIiKQogCiAgICAgICAgICMgdG9wLWxldmVsIGRvbWFpbiBpcyB0b28gZ2VuZXJhbAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvIiwgJ25pbmk9Im5pIjsgZG9tYWluPS5uZXQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQogCiAjIyAgICAgICAgICMgTmV0c2NhcGUgcHJvdG9jb2wgZG9lc24ndCBhbGxvdyBub24tc3BlY2lhbCB0b3AgbGV2ZWwgZG9tYWlucyAoc3VjaAogIyMgICAgICAgICAjIGFzIGNvLnVrKSBpbiB0aGUgZG9tYWluIGF0dHJpYnV0ZSB1bmxlc3MgdGhlcmUgYXJlIGF0IGxlYXN0IHRocmVlCkBAIC03ODQsOCArNzg0LDggQEAKICAgICAgICAgIyBPaCB5ZXMgaXQgZG9lcyEgIFJlYWwgaW1wbGVtZW50YXRpb25zIGRvbid0IGNoZWNrIHRoaXMsIGFuZCByZWFsCiAgICAgICAgICMgY29va2llcyAob2YgY291cnNlKSByZWx5IG9uIHRoYXQgYmVoYXZpb3VyLgogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5jby51ayIsICduYXN0eT10cmljazsgZG9tYWluPS5jby51aycpCi0jIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCA0KQorIyMgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDQpCiAKICAgICBkZWYgdGVzdF90d29fY29tcG9uZW50X2RvbWFpbl9yZmMyOTY1KHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC03OTUsNDMgKzc5NSw0MyBAQAogCiAgICAgICAgICMgdHdvLWNvbXBvbmVudCBWMSBkb21haW4gaXMgT0sKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiwgJ2Zvbz1iYXI7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLl9jb29raWVzWyJmb28ubmV0Il1bIi8iXVsiZm9vIl0udmFsdWUsICJiYXIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC8iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiRWZXJzaW9uPTE7IGZvbz1iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9jb29raWVzWyJmb28ubmV0Il1bIi8iXVsiZm9vIl0udmFsdWUsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0LyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKICAgICAgICAgIyB3b24ndCBiZSByZXR1cm5lZCB0byBhbnkgb3RoZXIgZG9tYWluIChiZWNhdXNlIGRvbWFpbiB3YXMgaW1wbGllZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0LyIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksICIiKQogCiAgICAgICAgICMgdW5sZXNzIGRvbWFpbiBpcyBnaXZlbiBleHBsaWNpdGx5LCBiZWNhdXNlIHRoZW4gaXQgbXVzdCBiZQogICAgICAgICAjIHJld3JpdHRlbiB0byBzdGFydCB3aXRoIGEgZG90OiBmb28ubmV0IC0tPiAuZm9vLm5ldCwgd2hpY2ggZG9lcwogICAgICAgICAjIG5vdCBkb21haW4tbWF0Y2ggZm9vLm5ldAogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC9mb28iLAogICAgICAgICAgICAgICAgICAgICAgICdzcGFtPWVnZ3M7IGRvbWFpbj1mb28ubmV0OyBwYXRoPS9mb287IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC9mb28iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiRWZXJzaW9uPTE7IGZvbz1iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC9mb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCiAKICAgICAgICAgIyBleHBsaWNpdCBmb28ubmV0IGZyb20gdGhyZWUtY29tcG9uZW50IGRvbWFpbiB3d3cuZm9vLm5ldCAqZG9lcyogZ2V0CiAgICAgICAgICMgc2V0LCBiZWNhdXNlIC5mb28ubmV0IGRvbWFpbi1tYXRjaGVzIC5mb28ubmV0CiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuZm9vLm5ldC9mb28vIiwKICAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBkb21haW49Zm9vLm5ldDsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLl9jb29raWVzWyIuZm9vLm5ldCJdWyIvZm9vLyJdWyJzcGFtIl0udmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC9mb28vIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0L2Zvby8iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJyRWZXJzaW9uPTE7IHNwYW09ZWdnczsgJERvbWFpbj0iZm9vLm5ldCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vIl1bInNwYW0iXS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0L2Zvby8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJFZlcnNpb249MTsgc3BhbT1lZ2dzOyAkRG9tYWluPSJmb28ubmV0IicpCiAKICAgICAgICAgIyB0b3AtbGV2ZWwgZG9tYWluIGlzIHRvbyBnZW5lcmFsCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0LyIsCiAgICAgICAgICAgICAgICAgICAgICAgJ25pPSJuaSI7IGRvbWFpbj0iLm5ldCI7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKIAogICAgICAgICAjIFJGQyAyOTY1IGRvZXNuJ3QgcmVxdWlyZSBibG9ja2luZyB0aGlzCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28uY28udWsvIiwKICAgICAgICAgICAgICAgICAgICAgICAnbmFzdHk9dHJpY2s7IGRvbWFpbj0uY28udWs7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKIAogICAgIGRlZiB0ZXN0X2RvbWFpbl9hbGxvdyhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtODQ1LDI3ICs4NDUsMjcgQEAKICAgICAgICAgaGVhZGVycyA9IFsiU2V0LUNvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgcGF0aD0vIl0KICAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vYWNtZS5jb20vIikKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCiAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCiAgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCiAgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogCiAgICAgICAgICMgc2V0IGEgY29va2llIHdpdGggbm9uLWFsbG93ZWQgZG9tYWluLi4uCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuY295b3RlLmNvbS8iKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuY295b3RlLmNvbS8iKQogICAgICAgICBjb29raWVzID0gYy5tYWtlX2Nvb2tpZXMocmVzLCByZXEpCiAgICAgICAgIGMuc2V0X2Nvb2tpZShjb29raWVzWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogICAgICAgICAjIC4uLiBhbmQgY2hlY2sgaXMgZG9lc24ndCBnZXQgcmV0dXJuZWQKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKIAogICAgIGRlZiB0ZXN0X2RvbWFpbl9ibG9jayhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtODc5LDM2ICs4NzksMzYgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCiAKICAgICAgICAgcCA9IHBvbC5zZXRfYmxvY2tlZF9kb21haW5zKFsiYWNtZS5jb20iXSkKICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgYy5jbGVhcigpCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cucm9hZHJ1bm5lci5uZXQvIikKICAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LnJvYWRydW5uZXIubmV0LyIpCiAgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnJvYWRydW5uZXIubmV0LyIpCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQotICAgICAgICBzZWxmLmFzc2VydF8oKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSBhbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZXEuaGFzX2hlYWRlcigiQ29va2llIikgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgcmVxLmhhc19oZWFkZXIoIkNvb2tpZTIiKSkpCiAKICAgICAgICAgYy5jbGVhcigpCiAgICAgICAgIHBvbC5zZXRfYmxvY2tlZF9kb21haW5zKFsiLmFjbWUuY29tIl0pCiAgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogCiAgICAgICAgICMgc2V0IGEgY29va2llIHdpdGggYmxvY2tlZCBkb21haW4uLi4KICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQogICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKICAgICAgICAgY29va2llcyA9IGMubWFrZV9jb29raWVzKHJlcywgcmVxKQogICAgICAgICBjLnNldF9jb29raWUoY29va2llc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKICAgICAgICAgIyAuLi4gYW5kIGNoZWNrIGlzIGRvZXNuJ3QgZ2V0IHJldHVybmVkCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXEuaGFzX2hlYWRlcigiQ29va2llIikpCiAKICAgICBkZWYgdGVzdF9zZWN1cmUoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTkyOCwxMCArOTI4LDEwIEBACiAgICAgICAgICAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuYWNtZS5jb20vIgogICAgICAgICAgICAgICAgIGludChjLCB1cmwsICJmb28xPWJhciVzJXMiICUgKHZzLCB3aGl0ZXNwYWNlKSkKICAgICAgICAgICAgICAgICBpbnQoYywgdXJsLCAiZm9vMj1iYXIlczsgc2VjdXJlJXMiICUgICh2cywgd2hpdGVzcGFjZSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgbm90IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbzEiXS5zZWN1cmUsCiAgICAgICAgICAgICAgICAgICAgICJub24tc2VjdXJlIGNvb2tpZSByZWdpc3RlcmVkIHNlY3VyZSIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vMiJdLnNlY3VyZSwKICAgICAgICAgICAgICAgICAgICAgInNlY3VyZSBjb29raWUgcmVnaXN0ZXJlZCBub24tc2VjdXJlIikKIApAQCAtOTQwLDcgKzk0MCw3IEBACiAgICAgICAgIGMgPSBDb29raWVKYXIocG9saWN5PURlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCByJ2Zvbz1cYiJhInI7IFZlcnNpb249MScpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGgsIHInJFZlcnNpb249MTsgZm9vPVxcYlwiYVwicicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCwgcickVmVyc2lvbj0xOyBmb289XFxiXCJhXCJyJykKIAogICAgIGRlZiB0ZXN0X21pc3NpbmdfZmluYWxfc2xhc2goc2VsZik6CiAgICAgICAgICMgTWlzc2luZyBzbGFzaCBmcm9tIHJlcXVlc3QgVVJMJ3MgYWJzX3BhdGggc2hvdWxkIGJlIGFzc3VtZWQgcHJlc2VudC4KQEAgLTk1MCw5ICs5NTAsOSBAQAogICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJmb289YmFyOyBWZXJzaW9uPTEiKQogICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiQ29va2llIikpCiAKICAgICBkZWYgdGVzdF9kb21haW5fbWlycm9yKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC05NjMsMjEgKzk2MywyMSBAQAogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJEb21haW4iIG5vdCBpbiBoLAotICAgICAgICAgICAgICAgICAgICAgImFic2VudCBkb21haW4gcmV0dXJuZWQgd2l0aCBkb21haW4gcHJlc2VudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkRvbWFpbiIsIGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgImFic2VudCBkb21haW4gcmV0dXJuZWQgd2l0aCBkb21haW4gcHJlc2VudCIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBEb21haW49LmJhci5jb20nKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnJERvbWFpbj0iLmJhci5jb20iJyBpbiBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyREb21haW49Ii5iYXIuY29tIicsIGgsICJkb21haW4gbm90IHJldHVybmVkIikKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgICMgbm90ZSBtaXNzaW5nIGluaXRpYWwgZG90IGluIERvbWFpbgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBEb21haW49YmFyLmNvbScpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCckRG9tYWluPSJiYXIuY29tIicgaW4gaCwgImRvbWFpbiBub3QgcmV0dXJuZWQiKQorICAgICAgICBzZWxmLmFzc2VydEluKCckRG9tYWluPSJiYXIuY29tIicsIGgsICJkb21haW4gbm90IHJldHVybmVkIikKIAogICAgIGRlZiB0ZXN0X3BhdGhfbWlycm9yKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC05ODgsMTQgKzk4OCwxMyBAQAogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJQYXRoIiBub3QgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJhYnNlbnQgcGF0aCByZXR1cm5lZCB3aXRoIHBhdGggcHJlc2VudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBhdGgiLCBoLCAiYWJzZW50IHBhdGggcmV0dXJuZWQgd2l0aCBwYXRoIHByZXNlbnQiKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgUGF0aD0vJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oJyRQYXRoPSIvIicgaW4gaCwgInBhdGggbm90IHJldHVybmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBhdGg9Ii8iJywgaCwgInBhdGggbm90IHJldHVybmVkIikKIAogICAgIGRlZiB0ZXN0X3BvcnRfbWlycm9yKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CkBAIC0xMDA2LDMwICsxMDA1LDI5IEBACiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xIikKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8oIlBvcnQiIG5vdCBpbiBoLAotICAgICAgICAgICAgICAgICAgICAgImFic2VudCBwb3J0IHJldHVybmVkIHdpdGggcG9ydCBwcmVzZW50IikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUG9ydCIsIGgsICJhYnNlbnQgcG9ydCByZXR1cm5lZCB3aXRoIHBvcnQgcHJlc2VudCIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0IikKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydF8ocmUuc2VhcmNoKCJcJFBvcnQoW149XXwkKSIsIGgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCJcJFBvcnQoW149XXwkKSIsIGgpLAogICAgICAgICAgICAgICAgICAgICAgInBvcnQgd2l0aCBubyB2YWx1ZSBub3QgcmV0dXJuZWQgd2l0aCBubyB2YWx1ZSIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCInKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnJFBvcnQ9IjgwIicgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggc2luZ2xlIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIHNpbmdsZSB2YWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyRQb3J0PSI4MCInLCBoLAorICAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggc2luZ2xlIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIHNpbmdsZSB2YWx1ZSIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCw4MDgwIicpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCckUG9ydD0iODAsODA4MCInIGluIGgsCi0gICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG11bHRpcGxlIHZhbHVlcyBub3QgcmV0dXJuZWQgd2l0aCBtdWx0aXBsZSAiCi0gICAgICAgICAgICAgICAgICAgICAidmFsdWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBvcnQ9IjgwLDgwODAiJywgaCwKKyAgICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG11bHRpcGxlIHZhbHVlcyBub3QgcmV0dXJuZWQgd2l0aCBtdWx0aXBsZSAiCisgICAgICAgICAgICAgICAgICAgICAgInZhbHVlcyIpCiAKICAgICBkZWYgdGVzdF9ub19yZXR1cm5fY29tbWVudChzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtMTA0MCw3ICsxMDM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAnQ29tbWVudD0iZG9lcyBhbnlib2R5IHJlYWQgdGhlc2U/IjsgJwogICAgICAgICAgICAgICAgICAgICAgICdDb21tZW50VVJMPSJodHRwOi8vZm9vLmJhci5uZXQvY29tbWVudC5odG1sIicpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAiQ29tbWVudCIgbm90IGluIGgsCiAgICAgICAgICAgICAiQ29tbWVudCBvciBDb21tZW50VVJMIGNvb2tpZS1hdHRyaWJ1dGVzIHJldHVybmVkIHRvIHNlcnZlciIpCiAKQEAgLTEwNzEsMzQgKzEwNjksMzQgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CiAgICAgICAgICAgICBpID0gMAogICAgICAgICAgICAgZm9yIGMgaW4gY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYywgQ29va2llKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjLnZlcnNpb24sIHZlcnNpb25zW2ldKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGMubmFtZSwgbmFtZXNbaV0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYy5kb21haW4sIGRvbWFpbnNbaV0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYy5wYXRoLCBwYXRoc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgQ29va2llKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy52ZXJzaW9uLCB2ZXJzaW9uc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmFtZSwgbmFtZXNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRvbWFpbiwgZG9tYWluc1tpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucGF0aCwgcGF0aHNbaV0pCiAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCiAKICAgICBkZWYgdGVzdF9wYXJzZV9uc19oZWFkZXJzKHNlbGYpOgogICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcGFyc2VfbnNfaGVhZGVycwogCiAgICAgICAgICMgbWlzc2luZyBkb21haW4gdmFsdWUgKGludmFsaWQgY29va2llKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhcnNlX25zX2hlYWRlcnMoWyJmb289YmFyOyBwYXRoPS87IGRvbWFpbiJdKSwKICAgICAgICAgICAgIFtbKCJmb28iLCAiYmFyIiksCiAgICAgICAgICAgICAgICgicGF0aCIsICIvIiksICgiZG9tYWluIiwgTm9uZSksICgidmVyc2lvbiIsICIwIildXQogICAgICAgICAgICAgKQogICAgICAgICAjIGludmFsaWQgZXhwaXJlcyB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhcnNlX25zX2hlYWRlcnMoWyJmb289YmFyOyBleHBpcmVzPUZvbyBCYXIgMTIgMzM6MjI6MTEgMjAwMCJdKSwKICAgICAgICAgICAgIFtbKCJmb28iLCAiYmFyIiksICgiZXhwaXJlcyIsIE5vbmUpLCAoInZlcnNpb24iLCAiMCIpXV0KICAgICAgICAgICAgICkKICAgICAgICAgIyBtaXNzaW5nIGNvb2tpZSB2YWx1ZSAodmFsaWQgY29va2llKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhcnNlX25zX2hlYWRlcnMoWyJmb28iXSksCiAgICAgICAgICAgICBbWygiZm9vIiwgTm9uZSksICgidmVyc2lvbiIsICIwIildXQogICAgICAgICAgICAgKQogICAgICAgICAjIHNob3VsZG4ndCBhZGQgdmVyc2lvbiBpZiBoZWFkZXIgaXMgZW1wdHkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VfbnNfaGVhZGVycyhbIiJdKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfbnNfaGVhZGVycyhbIiJdKSwgW10pCiAKICAgICBkZWYgdGVzdF9iYWRfY29va2llX2hlYWRlcihzZWxmKToKIApAQCAtMTEyNCwxMyArMTEyMiwxMyBAQAogICAgICAgICAgICAgXToKICAgICAgICAgICAgIGMgPSBjb29raWVqYXJfZnJvbV9jb29raWVfaGVhZGVycyhoZWFkZXJzKQogICAgICAgICAgICAgIyB0aGVzZSBiYWQgY29va2llcyBzaG91bGRuJ3QgYmUgc2V0Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMCkKIAogICAgICAgICAjIGNvb2tpZSB3aXRoIGludmFsaWQgZXhwaXJlcyBpcyB0cmVhdGVkIGFzIHNlc3Npb24gY29va2llCiAgICAgICAgIGhlYWRlcnMgPSBbIlNldC1Db29raWU6IGM9Zm9vOyBleHBpcmVzPUZvbyBCYXIgMTIgMzM6MjI6MTEgMjAwMCJdCiAgICAgICAgIGMgPSBjb29raWVqYXJfZnJvbV9jb29raWVfaGVhZGVycyhoZWFkZXJzKQogICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuZXhhbXBsZS5jb20iXVsiLyJdWyJjIl0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvb2tpZS5leHBpcmVzIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUuZXhwaXJlcyBpcyBOb25lKQogCiAKIGNsYXNzIExXUENvb2tpZVRlc3RzKFRlc3RDYXNlKToKQEAgLTEyMDcsOCArMTIwNSw4IEBACiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQogCiAgICAgICAgIGggPSByZXEuZ2V0X2hlYWRlcigiQ29va2llIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQogCiAgICAgICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llOiBTSElQUElORz1GRURFWDsgcGF0aD0vZm9vJykKICAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tIikKQEAgLTEyMTgsMTcgKzEyMTYsMTcgQEAKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKICAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQotICAgICAgICBzZWxmLmFzc2VydF8oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiBpbiBoIGFuZAotICAgICAgICAgICAgICAgICAgICAgIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiIGluIGggYW5kCi0gICAgICAgICAgICAgICAgICAgICAiU0hJUFBJTkc9RkVERVgiIG5vdCBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJTSElQUElORz1GRURFWCIsIGgpCiAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKICAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQotICAgICAgICBzZWxmLmFzc2VydF8oKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICBoLnN0YXJ0c3dpdGgoIlNISVBQSU5HPUZFREVYOyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiLCBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguc3RhcnRzd2l0aCgiU0hJUFBJTkc9RkVERVg7IikpCiAKICAgICBkZWYgdGVzdF9uZXRzY2FwZV9leGFtcGxlXzIoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIKQEAgLTEyNjksNyArMTI2Nyw3IEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIikKIAogICAgICAgICBoZWFkZXJzLmFwcGVuZCgKQEAgLTEyODAsNyArMTI3OCw3IEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vYW1tbyIpCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5zZWFyY2gociJQQVJUX05VTUJFUj1SSURJTkdfUk9DS0VUXzAwMjM7XHMqIgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIiUEFSVF9OVU1CRVI9UklESU5HX1JPQ0tFVF8wMDIzO1xzKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSkpCiAKQEAgLTEzMTYsNyArMTMxNCw3IEBACiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoCiAgICAgICAgICAgICBjLCAnaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL2xvZ2luJywKICAgICAgICAgICAgICdDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUpCiAKICAgICAgICAgIwogICAgICAgICAjICAgMy4gIFVzZXIgQWdlbnQgLT4gU2VydmVyCkBAIC0xMzM4LDcgKzEzMzYsNyBAQAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICdodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcGlja2l0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKTsKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgKICAgICAgICAgICAgIHInXlwkVmVyc2lvbj0iPzEiPzsgQ3VzdG9tZXI9Ij9XSUxFX0VfQ09ZT1RFIj87IFwkUGF0aD0iL2FjbWUiJCcsCiAgICAgICAgICAgICBjb29raWUpKQogCkBAIC0xMzYzLDEwICsxMzYxLDEwIEBACiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9zaGlwcGluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NoaXBwaW5nPSJGZWRFeCI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5zZWFyY2gocideXCRWZXJzaW9uPSI/MSI/OycsIGNvb2tpZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5zZWFyY2gocidQYXJ0X051bWJlcj0iP1JvY2tldF9MYXVuY2hlcl8wMDAxIj87JworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInXlwkVmVyc2lvbj0iPzEiPzsnLCBjb29raWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInUGFydF9OdW1iZXI9Ij9Sb2NrZXRfTGF1bmNoZXJfMDAwMSI/OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHMqXCRQYXRoPSJcL2FjbWUiJywgY29va2llKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlLnNlYXJjaChyJ0N1c3RvbWVyPSI/V0lMRV9FX0NPWU9URSI/O1xzKlwkUGF0aD0iXC9hY21lIicsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gocidDdXN0b21lcj0iP1dJTEVfRV9DT1lPVEUiPztccypcJFBhdGg9IlwvYWNtZSInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZSkpCiAKICAgICAgICAgIwpAQCAtMTM4OCw3ICsxMzg2LDcgQEAKICAgICAgICAgIyAgICAgICBUcmFuc2FjdGlvbiBpcyBjb21wbGV0ZS4KIAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcHJvY2VzcyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgcmUuc2VhcmNoKHInU2hpcHBpbmc9Ij9GZWRFeCI/O1xzKlwkUGF0aD0iXC9hY21lIicsIGNvb2tpZSkgYW5kCiAgICAgICAgICAgICAiV0lMRV9FX0NPWU9URSIgaW4gY29va2llKQogCkBAIC0xNDM5LDcgKzE0MzcsNyBAQAogICAgICAgICAjIHRoYW4gb25jZS4KIAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvYW1tby8uLi4iKQotICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIHJlLnNlYXJjaChyIlJpZGluZ19Sb2NrZXRfMDAyMy4qUm9ja2V0X0xhdW5jaGVyXzAwMDEiLCBjb29raWUpKQogCiAgICAgICAgICMgQSBzdWJzZXF1ZW50IHJlcXVlc3QgYnkgdGhlIHVzZXIgYWdlbnQgdG8gdGhlIChzYW1lKSBzZXJ2ZXIgZm9yIGEgVVJMIG9mCkBAIC0xNDUyLDggKzE0NTAsOCBAQAogICAgICAgICAjIHRoZSBzZXJ2ZXIuCiAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL3BhcnRzLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiUm9ja2V0X0xhdW5jaGVyXzAwMDEiIGluIGNvb2tpZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICJSaWRpbmdfUm9ja2V0XzAwMjMiIG5vdCBpbiBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlJvY2tldF9MYXVuY2hlcl8wMDAxIiwgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJSaWRpbmdfUm9ja2V0XzAwMjMiLCBjb29raWUpCiAKICAgICBkZWYgdGVzdF9yZWplY3Rpb24oc2VsZik6CiAgICAgICAgICMgVGVzdCByZWplY3Rpb24gb2YgU2V0LUNvb2tpZTIgcmVzcG9uc2VzIGJhc2VkIG9uIGRvbWFpbiwgcGF0aCwgcG9ydC4KQEAgLTE0NjgsNDUgKzE0NjYsNDUgQEAKICAgICAgICAgIyBpbGxlZ2FsIGRvbWFpbiAobm8gZW1iZWRkZWQgZG90cykKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvbz1iYXI7IGRvbWFpbj0iLmNvbSI7IHZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjKQogCiAgICAgICAgICMgbGVnYWwgZG9tYWluCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaW5nPXBvbmc7IGRvbWFpbj0iYWNtZS5jb20iOyB2ZXJzaW9uPTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogCiAgICAgICAgICMgaWxsZWdhbCBkb21haW4gKGhvc3QgcHJlZml4ICJ3d3cuYSIgY29udGFpbnMgYSBkb3QpCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYS5hY21lLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaXo9YmFuZzsgZG9tYWluPSJhY21lLmNvbSI7IHZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAKICAgICAgICAgIyBsZWdhbCBkb21haW4KICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hLmFjbWUuY29tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd293PWZsdXR0ZXI7IGRvbWFpbj0iLmEuYWNtZS5jb20iOyB2ZXJzaW9uPTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogCiAgICAgICAgICMgY2FuJ3QgcGFydGlhbGx5IG1hdGNoIGFuIElQLWFkZHJlc3MKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovLzEyNS4xMjUuMTI1LjEyNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3p6eno9cGluZzsgZG9tYWluPSIxMjUuMTI1LjEyNSI7IHZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAKICAgICAgICAgIyBpbGxlZ2FsIHBhdGggKG11c3QgYmUgcHJlZml4IG9mIHJlcXVlc3QgcGF0aCkKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdibGFoPXJodWJhcmI7IGRvbWFpbj0iLnNvbC5ubyI7IHBhdGg9Ii9mb28iOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAKICAgICAgICAgIyBsZWdhbCBwYXRoCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vL2Zvby9iYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaW5nPWJvbmc7IGRvbWFpbj0iLnNvbC5ubyI7IHBhdGg9Ii9mb28iOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb249MScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCiAKICAgICAgICAgIyBpbGxlZ2FsIHBvcnQgKHJlcXVlc3QtcG9ydCBub3QgaW4gbGlzdCkKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGl6PWZmZnQ7IGRvbWFpbj0iLnNvbC5ubyI7IHBvcnQ9IjkwLDEwMCI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKIAogICAgICAgICAjIGxlZ2FsIHBvcnQKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKQEAgLTE1MTQsMTMgKzE1MTIsMTMgQEAKICAgICAgICAgICAgIHInYmFuZz13YWxsb3A7IHZlcnNpb249MTsgZG9tYWluPSIuc29sLm5vIjsgJwogICAgICAgICAgICAgcidwb3J0PSI5MCwxMDAsIDgwLDgwODAiOyAnCiAgICAgICAgICAgICByJ21heC1hZ2U9MTAwOyBDb21tZW50ID0gIkp1c3Qga2lkZGluZyEgKFwifFxcXFwpICInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCA0KQogCiAgICAgICAgICMgcG9ydCBhdHRyaWJ1dGUgd2l0aG91dCBhbnkgdmFsdWUgKGN1cnJlbnQgcG9ydCkKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb285PWJhcjsgdmVyc2lvbj0xOyBkb21haW49Ii5zb2wubm8iOyBwb3J0OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heC1hZ2U9MTAwOycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDUpCiAKICAgICAgICAgIyBlbmNvZGVkIHBhdGgKICAgICAgICAgIyBMV1AgaGFzIHRoaXMgdGVzdCwgYnV0IHVuZXNjYXBpbmcgYWxsb3dlZCBwYXRoIGNoYXJhY3RlcnMgc2VlbXMKQEAgLTE1MzEsNyArMTUyOSw3IEBACiAgICAgICAgICMgY2hhcmFjdGVyOgogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5uby88b28vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ2Zvbzg9YmFyOyB2ZXJzaW9uPTE7IHBhdGg9Ii8lM2NvbyInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCA2KQogCiAgICAgICAgICMgc2F2ZSBhbmQgcmVzdG9yZQogICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KQEAgLTE1NDYsNyArMTU0NCw3IEBACiAgICAgICAgICAgICB0cnk6IG9zLnVubGluayhmaWxlbmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob2xkLCByZXByKGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZCwgcmVwcihjKSkKIAogICAgIGRlZiB0ZXN0X3VybF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgIyBUcnkgc29tZSBVUkwgZW5jb2RpbmdzIG9mIHRoZSBQQVRIcy4KQEAgLTE1NjEsMTEgKzE1NTksMTEgQEAKICAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2ZvbyUyZiUyNS88PCUwYW5ld+Uv5vjlIiwKICAgICAgICAgICAgICdiYXI9YmF6OyBwYXRoPSIvZm9vLyI7IHZlcnNpb249MScpOwogICAgICAgICB2ZXJzaW9uX3JlID0gcmUuY29tcGlsZShyJ15cJHZlcnNpb249XCI/MVwiPycsIHJlLkkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vPWJhciIgaW4gY29va2llIGFuZCB2ZXJzaW9uX3JlLnNlYXJjaChjb29raWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImZvbz1iYXIiIGluIGNvb2tpZSBhbmQgdmVyc2lvbl9yZS5zZWFyY2goY29va2llKSkKIAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KAogICAgICAgICAgICAgYywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vLyUyNS88PCUwYW5ld+Uv5vjlIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llKQogCiAgICAgICAgICMgdW5pY29kZSBVUkwgZG9lc24ndCByYWlzZSBleGNlcHRpb24KICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCB1Imh0dHA6Ly93d3cuYWNtZS5jb20vXHhmYyIpCkBAIC0xNjA2LDEyICsxNjA0LDEyIEBACiAgICAgICAgICAgICByZXR1cm4gbmV3X2MKIAogICAgICAgICBuZXdfYyA9IHNhdmVfYW5kX3Jlc3RvcmUoYywgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG5ld19jKSwgNikgICMgbm9uZSBkaXNjYXJkZWQKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciIGluIHJlcHIobmV3X2MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfYyksIDYpICAjIG5vbmUgZGlzY2FyZGVkCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5hbWU9J2ZvbzEnLCB2YWx1ZT0nYmFyJyIsIHJlcHIobmV3X2MpKQogCiAgICAgICAgIG5ld19jID0gc2F2ZV9hbmRfcmVzdG9yZShjLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG5ld19jKSwgNCkgICMgMiBvZiB0aGVtIGRpc2NhcmRlZCBvbiBzYXZlCi0gICAgICAgIHNlbGYuYXNzZXJ0XygibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiBpbiByZXByKG5ld19jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmV3X2MpLCA0KSAgIyAyIG9mIHRoZW0gZGlzY2FyZGVkIG9uIHNhdmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiwgcmVwcihuZXdfYykpCiAKICAgICBkZWYgdGVzdF9uZXRzY2FwZV9taXNjKHNlbGYpOgogICAgICAgICAjIFNvbWUgYWRkaXRpb25hbCBOZXRzY2FwZSBjb29raWVzIHRlc3RzLgpAQCAtMTYzNiw3ICsxNjM0LDcgQEAKIAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZm9vLmJhci5hY21lLmNvbS9mb28iKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Myw0IiBpbiByZXEuZ2V0X2hlYWRlcigiQ29va2llIikgYW5kCiAgICAgICAgICAgICAiQ3VzdG9tZXI9V0lMRV9FX0NPWU9URSIgaW4gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpKQogCkBAIC0xNjQ5LDExICsxNjQ3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgImZvbzE9YmFyOyBQT1JUOyBEaXNjYXJkOyBWZXJzaW9uPTE7IikKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IGRvbWFpbj0iLmxvY2FsIjsgVmVyc2lvbj0xJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28xPWJhciIgaW4gY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28xPWJhciIsIGNvb2tpZSkKIAogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iLCAnZm9vMz1iYXI7IFZlcnNpb249MScpCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9leGFtcGxlLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vMj1iYXIiIGluIGNvb2tpZSBhbmQgbGVuKGMpID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzI9YmFyIiwgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKIAogICAgIGRlZiB0ZXN0X2ludHJhbmV0X2RvbWFpbnNfbnMoc2VsZik6CiAgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKQEAgLTE2NjIsMTIgKzE2NjEsMTIgQEAKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9leGFtcGxlLyIsICJmb28xPWJhciIpCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IGRvbWFpbj0ubG9jYWwnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vMT1iYXIiIGluIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzE9YmFyIiwgY29va2llKQogCiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iKQotICAgICAgICBzZWxmLmFzc2VydF8oImZvbzI9YmFyIiBpbiBjb29raWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMj1iYXIiLCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAyKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQpAQCAtMTY5MSwxNyArMTY5MCwxNyBAQAogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFudHMuY29tLyIpCiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkpTRVNTSU9OSUQ9QUJDREVSQU5ET00xMjMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXEuZ2V0X2hlYWRlcigiQ29va2llMiIpLCAnJFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkpTRVNTSU9OSUQ9QUJDREVSQU5ET00xMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUyIiksICckVmVyc2lvbj0iMSInKQogCiAgICAgICAgICMgbWlzc2luZyBwYXRoIGluIHRoZSByZXF1ZXN0IFVSSQogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFudHMuY29tOjgwODAiKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxLmdldF9oZWFkZXIoIkNvb2tpZTIiKSwgJyRWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llMiIpLCAnJFZlcnNpb249IjEiJykKIAogICAgIGRlZiB0ZXN0X3Nlc3Npb25fY29va2llcyhzZWxmKToKICAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgpAQCAtMTc0MSw3ICsxNzQwLDcgQEAKICAgICAgICAgICAgIGtleSA9ICIlc19hZnRlciIgJSBjb29raWUudmFsdWUKICAgICAgICAgICAgIGNvdW50ZXJba2V5XSA9IGNvdW50ZXJba2V5XSArIDEKIAotICAgICAgICBzZWxmLmFzc2VydF8obm90ICgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoCiAgICAgICAgICAgICAjIGEgcGVybWFuZW50IGNvb2tpZSBnb3QgbG9zdCBhY2NpZGVudGFsbHkKICAgICAgICAgICAgIGNvdW50ZXJbInBlcm1fYWZ0ZXIiXSAhPSBjb3VudGVyWyJwZXJtX2JlZm9yZSJdIG9yCiAgICAgICAgICAgICAjIGEgc2Vzc2lvbiBjb29raWUgaGFzbid0IGJlZW4gY2xlYXJlZApAQCAtMTc1MSw3ICsxNzUwLDYgQEAKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3NldHMKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBEYXRlVGltZVRlc3RzLAogICAgICAgICBIZWFkZXJUZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29weS5weSBiL0xpYi90ZXN0L3Rlc3RfY29weS5weQppbmRleCBiZTMzNGNjLi42YjY0ZjEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvcHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQgY29weQogaW1wb3J0IGNvcHlfcmVnCitpbXBvcnQgd2Vha3JlZgogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CkBAIC0xMSw4ICsxMiw4IEBACiAgICAgIyBBdHRlbXB0IGZ1bGwgbGluZSBjb3ZlcmFnZSBvZiBjb3B5LnB5IGZyb20gdG9wIHRvIGJvdHRvbQogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvcHkuRXJyb3IgaXMgY29weS5lcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoY29weS5FcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkuRXJyb3IgaXMgY29weS5lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoY29weS5FcnJvciwgRXhjZXB0aW9uKSkKIAogICAgICMgVGhlIGNvcHkoKSBtZXRob2QKIApAQCAtNTMsNyArNTQsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAic2hvdWxkbid0IGNhbGwgdGhpcyIKICAgICAgICAgeCA9IEMoKQogICAgICAgICB5ID0gY29weS5jb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCiAKICAgICBkZWYgdGVzdF9jb3B5X3JlZHVjZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtNjEsNyArNjIsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAiIgogICAgICAgICB4ID0gQygpCiAgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKIAogICAgIGRlZiB0ZXN0X2NvcHlfY2FudChzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtODUsNyArODYsNyBAQAogICAgICAgICAgICAgICAgICAiaGVsbG8iLCB1ImhlbGxvXHUxMjM0IiwgZi5mdW5jX2NvZGUsCiAgICAgICAgICAgICAgICAgIE5ld1N0eWxlLCB4cmFuZ2UoMTApLCBDbGFzc2ljLCBtYXhdCiAgICAgICAgIGZvciB4IGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNvcHkuY29weSh4KSBpcyB4LCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkuY29weSh4KSBpcyB4LCByZXByKHgpKQogCiAgICAgZGVmIHRlc3RfY29weV9saXN0KHNlbGYpOgogICAgICAgICB4ID0gWzEsIDIsIDNdCkBAIC0xNzksOSArMTgwLDkgQEAKICAgICAgICAgeCA9IFt4LCB4XQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeVswXSBpcyBub3QgeFswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHlbMF0gaXMgeVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIG5vdCB4WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVswXSBpcyB5WzFdKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfaXNzdWJjbGFzcyhzZWxmKToKICAgICAgICAgIyBYWFggTm90ZTogdGhlcmUncyBubyB3YXkgdG8gdGVzdCB0aGUgVHlwZUVycm9yIGNvbWluZyBvdXQgb2YKQEAgLTIyNiw3ICsyMjcsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAic2hvdWxkbid0IGNhbGwgdGhpcyIKICAgICAgICAgeCA9IEMoKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVkdWNlKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC0yMzQsNyArMjM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgeCA9IEMoKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfY2FudChzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtMjU4LDYxICsyNTksNjEgQEAKICAgICAgICAgICAgICAgICAgImhlbGxvIiwgdSJoZWxsb1x1MTIzNCIsIGYuZnVuY19jb2RlLAogICAgICAgICAgICAgICAgICBOZXdTdHlsZSwgeHJhbmdlKDEwKSwgQ2xhc3NpYywgbWF4XQogICAgICAgICBmb3IgeCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb3B5LmRlZXBjb3B5KHgpIGlzIHgsIHJlcHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weS5kZWVwY29weSh4KSBpcyB4LCByZXByKHgpKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfbGlzdChzZWxmKToKICAgICAgICAgeCA9IFtbMSwgMl0sIDNdCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgbm90IHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WzBdIGlzIG5vdCB5WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgbm90IHlbMF0pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9yZWZsZXhpdmVfbGlzdChzZWxmKToKICAgICAgICAgeCA9IFtdCiAgICAgICAgIHguYXBwZW5kKHgpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCB5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHlbMF0gaXMgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIHkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHkpLCAxKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfdHVwbGUoc2VsZik6CiAgICAgICAgIHggPSAoWzEsIDJdLCAzKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyBub3QgeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX3R1cGxlKHNlbGYpOgogICAgICAgICB4ID0gKFtdLCkKICAgICAgICAgeFswXS5hcHBlbmQoeCkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeVswXSBpcyBub3QgeFswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHlbMF1bMF0gaXMgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIG5vdCB4WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVswXVswXSBpcyB5KQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfZGljdChzZWxmKToKICAgICAgICAgeCA9IHsiZm9vIjogWzEsIDJdLCAiYmFyIjogM30KICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBub3QgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbImZvbyJdIGlzIG5vdCB5WyJmb28iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WyJmb28iXSBpcyBub3QgeVsiZm9vIl0pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9yZWZsZXhpdmVfZGljdChzZWxmKToKICAgICAgICAgeCA9IHt9CiAgICAgICAgIHhbJ2ZvbyddID0geAogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5Wydmb28nXSBpcyB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbJ2ZvbyddIGlzIHkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHkpLCAxKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfa2VlcGFsaXZlKHNlbGYpOgogICAgICAgICBtZW1vID0ge30KICAgICAgICAgeCA9IDQyCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgsIG1lbW8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtZW1vW2lkKHgpXSBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWVtb1tpZCh4KV0gaXMgeCkKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfdmFuaWxsYShzZWxmKToKICAgICAgICAgY2xhc3MgQzoKQEAgLTMyMyw3ICszMjQsNyBAQAogICAgICAgICB4ID0gQyhbNDJdKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2RlZXBjb3B5KHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMzM2LDggKzMzNyw4IEBACiAgICAgICAgIHggPSBDKFs0Ml0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9nZXRpbml0YXJncyhzZWxmKToKICAgICAgICAgY2xhc3MgQzoKQEAgLTM1MCw4ICszNTEsOCBAQAogICAgICAgICB4ID0gQyhbNDJdKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgbm90IHguZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfZ2V0c3RhdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CkBAIC0zNjQsOCArMzY1LDggQEAKICAgICAgICAgeCA9IEMoWzQyXSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X3NldHN0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMzc4LDggKzM3OSw4IEBACiAgICAgICAgIHggPSBDKFs0Ml0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkgaXMgbm90IHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9nZXRzdGF0ZV9zZXRzdGF0ZShzZWxmKToKICAgICAgICAgY2xhc3MgQzoKQEAgLTM5NCw4ICszOTUsOCBAQAogICAgICAgICB4ID0gQyhbNDJdKQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgbm90IHguZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9pbnN0KHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtNDAzLDggKzQwNCw4IEBACiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5mb28gPSB4CiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIG5vdCB4KQotICAgICAgICBzZWxmLmFzc2VydF8oeS5mb28gaXMgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyB5KQogCiAgICAgIyBfcmVjb25zdHJ1Y3QoKQogCkBAIC00MTQsOSArNDE1LDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gIiIKICAgICAgICAgeCA9IEMoKQogICAgICAgICB5ID0gY29weS5jb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCiAKICAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9ub3N0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC00MjUsOSArNDI2LDkgQEAKICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmZvbyA9IDQyCiAgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuX19jbGFzc19fIGlzIHguX19jbGFzc19fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5fX2NsYXNzX18gaXMgeC5fX2NsYXNzX18pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5Ll9fY2xhc3NfXyBpcyB4Ll9fY2xhc3NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuX19jbGFzc19fIGlzIHguX19jbGFzc19fKQogCiAgICAgZGVmIHRlc3RfcmVjb25zdHJ1Y3Rfc3RhdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKQEAgLTQ0Miw3ICs0NDMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIG5vdCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3N0YXRlX3NldHN0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CkBAIC00NTksNyArNDYwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5LmZvbyBpcyBub3QgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCiAKICAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9yZWZsZXhpdmUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKQEAgLTQ2Nyw4ICs0NjgsOCBAQAogICAgICAgICB4ID0gQygpCiAgICAgICAgIHguZm9vID0geAogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQotICAgICAgICBzZWxmLmFzc2VydF8oeSBpcyBub3QgeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHkuZm9vIGlzIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgeSkKIAogICAgICMgQWRkaXRpb25zIGZvciBQeXRob24gMi4zIGFuZCBwaWNrbGUgcHJvdG9jb2wgMgogCkBAIC00ODMsMTIgKzQ4NCwxMiBAQAogICAgICAgICB4ID0gQyhbWzEsIDJdLCAzXSkKICAgICAgICAgeSA9IGNvcHkuY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyB5WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyBub3QgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0gaXMgeVswXSkKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBub3QgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbMF0gaXMgbm90IHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV81dHVwbGUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMoZGljdCk6CkBAIC01MDEsMTIgKzUwMiwxMiBAQAogICAgICAgICB4ID0gQyhbKCJmb28iLCBbMSwgMl0pLCAoImJhciIsIDMpXSkKICAgICAgICAgeSA9IGNvcHkuY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIG5vdCB5KQotICAgICAgICBzZWxmLmFzc2VydF8oeFsiZm9vIl0gaXMgeVsiZm9vIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsiZm9vIl0gaXMgeVsiZm9vIl0pCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgbm90IHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4WyJmb28iXSBpcyBub3QgeVsiZm9vIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsiZm9vIl0gaXMgbm90IHlbImZvbyJdKQogCiAgICAgZGVmIHRlc3RfY29weV9zbG90cyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtNTE0LDcgKzUxNSw3IEBACiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5mb28gPSBbNDJdCiAgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHguZm9vIGlzIHkuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5mb28gaXMgeS5mb28pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weV9zbG90cyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpAQCAtNTIzLDcgKzUyNCwyNyBAQAogICAgICAgICB4LmZvbyA9IFs0Ml0KICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4LmZvbyBpcyBub3QgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyBub3QgeS5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9kaWN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgICAgIHNlbGYuX2tleXMgPSBsaXN0KGQua2V5cygpKQorICAgICAgICAgICAgICAgIGRpY3QuX19pbml0X18oc2VsZiwgZCkKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIGl0ZW0pOgorICAgICAgICAgICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKQorICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fa2V5czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2V5cy5hcHBlbmQoa2V5KQorICAgICAgICB4ID0gQyhkPXsnZm9vJzowfSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2tleXMsIHkuX2tleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICB4WydiYXInXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHguX2tleXMsIHkuX2tleXMpCiAKICAgICBkZWYgdGVzdF9jb3B5X2xpc3Rfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEMobGlzdCk6CkBAIC01MzMsOCArNTU0LDggQEAKICAgICAgICAgeSA9IGNvcHkuY29weSh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQotICAgICAgICBzZWxmLmFzc2VydF8oeFswXSBpcyB5WzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oeC5mb28gaXMgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyB5LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2xpc3Rfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEMobGlzdCk6CkBAIC01NDQsOCArNTY1LDggQEAKICAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbMF0gaXMgbm90IHlbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4LmZvbyBpcyBub3QgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5mb28gaXMgbm90IHkuZm9vKQogCiAgICAgZGVmIHRlc3RfY29weV90dXBsZV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQyh0dXBsZSk6CkBAIC01NjIsOCArNTgzLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgKFsxLCAyXSwgMykpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoeSksIChbMSwgMl0sIDMpKQotICAgICAgICBzZWxmLmFzc2VydF8oeCBpcyBub3QgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHhbMF0gaXMgbm90IHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKIAogICAgIGRlZiB0ZXN0X2dldHN0YXRlX2V4YyhzZWxmKToKICAgICAgICAgY2xhc3MgRXZpbFN0YXRlKG9iamVjdCk6CkBAIC01ODUsNiArNjA2LDEwMyBAQAogICAgICAgICBiYXIgPSBsYW1iZGE6IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmRlZXBjb3B5KGJhciksIGJhcikKIAorICAgIGRlZiBfY2hlY2tfd2Vha3JlZihzZWxmLCBfY29weSk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQygpCisgICAgICAgIHggPSB3ZWFrcmVmLnJlZihvYmopCisgICAgICAgIHkgPSBfY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorICAgICAgICBkZWwgb2JqCisgICAgICAgIHkgPSBfY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFrcmVmKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja193ZWFrcmVmKGNvcHkuY29weSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3dlYWtyZWYoY29weS5kZWVwY29weSkKKworICAgIGRlZiBfY2hlY2tfY29weV93ZWFrZGljdChzZWxmLCBfZGljdHR5cGUpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEsIGIsIGMsIGQgPSBbQygpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IF9kaWN0dHlwZSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgIHYgPSBjb3B5LmNvcHkodSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2IGlzIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2FdLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbY10sIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAyKQorICAgICAgICBkZWwgYywgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMSkKKyAgICAgICAgeCwgeSA9IEMoKSwgQygpCisgICAgICAgICMgVGhlIHVuZGVybHlpbmcgY29udGFpbmVycyBhcmUgZGVjb3VwbGVkCisgICAgICAgIHZbeF0gPSB5CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oeCwgdSkKKworICAgIGRlZiB0ZXN0X2NvcHlfd2Vha2tleWRpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvcHlfd2Vha2RpY3Qod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSkKKworICAgIGRlZiB0ZXN0X2NvcHlfd2Vha3ZhbHVlZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29weV93ZWFrZGljdCh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV93ZWFra2V5ZGljdChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKGkpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICB1W2FdID0gYgorICAgICAgICB1W2NdID0gZAorICAgICAgICAjIEtleXMgYXJlbid0IGNvcGllZCwgdmFsdWVzIGFyZQorICAgICAgICB2ID0gY29weS5kZWVwY29weSh1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHYsIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHZbYV0gaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2W2NdIGlzIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlthXS5pLCBiLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodltjXS5pLCBkLmkpCisgICAgICAgIGRlbCBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAxKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfd2Vha3ZhbHVlZGljdChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKGkpIGZvciBpIGluIHhyYW5nZSg0KV0KKyAgICAgICAgdSA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgICMgS2V5cyBhcmUgY29waWVkLCB2YWx1ZXMgYXJlbid0CisgICAgICAgIHYgPSBjb3B5LmRlZXBjb3B5KHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgICh4LCB5KSwgKHosIHQpID0gc29ydGVkKHYuaXRlbXMoKSwga2V5PWxhbWJkYSBwYWlyOiBwYWlyWzBdLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCBpcyBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguaSwgYS5pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHogaXMgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LmksIGMuaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQgaXMgZCkKKyAgICAgICAgZGVsIHgsIHksIHosIHQKKyAgICAgICAgZGVsIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDEpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9ib3VuZF9tZXRob2Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgZi5iID0gZi5tCisgICAgICAgIGcgPSBjb3B5LmRlZXBjb3B5KGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5tLCBnLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnLmIuaW1fc2VsZiBpcyBnKQorICAgICAgICBnLmIoKQorCisKIGRlZiBnbG9iYWxfZm9vKHgsIHkpOiByZXR1cm4geCt5CiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29weV9yZWcucHkgYi9MaWIvdGVzdC90ZXN0X2NvcHlfcmVnLnB5CmluZGV4IGMzZDM5NjQuLjhjZGI4YjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29weV9yZWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3B5X3JlZy5weQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgaW1wb3J0IGNvcHkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoVHJ1ZSwgY29weS5jb3B5KFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGNvcHkuY29weShUcnVlKSkKIAogICAgIGRlZiB0ZXN0X2V4dGVuc2lvbl9yZWdpc3RyeShzZWxmKToKICAgICAgICAgbW9kLCBmdW5jLCBjb2RlID0gJ2p1bmsxICcsICcganVuazInLCAweGFiY2QKQEAgLTUxLDEwICs1MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLCBmdW5jLCBjb2RlKQogICAgICAgICAgICAgY29weV9yZWcuYWRkX2V4dGVuc2lvbihtb2QsIGZ1bmMsIGNvZGUpCiAgICAgICAgICAgICAjIFNob3VsZCBiZSBpbiB0aGUgcmVnaXN0cnkuCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeVttb2QsIGZ1bmNdID09IGNvZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY29weV9yZWcuX2ludmVydGVkX3JlZ2lzdHJ5W2NvZGVdID09IChtb2QsIGZ1bmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlfcmVnLl9leHRlbnNpb25fcmVnaXN0cnlbbW9kLCBmdW5jXSA9PSBjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeVtjb2RlXSA9PSAobW9kLCBmdW5jKSkKICAgICAgICAgICAgICMgU2hvdWxkbid0IGJlIGluIHRoZSBjYWNoZS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb2RlIG5vdCBpbiBjb3B5X3JlZy5fZXh0ZW5zaW9uX2NhY2hlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjb2RlLCBjb3B5X3JlZy5fZXh0ZW5zaW9uX2NhY2hlKQogICAgICAgICAgICAgIyBSZWR1bmRhbnQgcmVnaXN0cmF0aW9uIHNob3VsZCBiZSBPSy4KICAgICAgICAgICAgIGNvcHlfcmVnLmFkZF9leHRlbnNpb24obW9kLCBmdW5jLCBjb2RlKSAgIyBzaG91bGRuJ3QgYmxvdyB1cAogICAgICAgICAgICAgIyBDb25mbGljdGluZyBjb2RlLgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgICAgZS5yZXN0b3JlKCkKIAogICAgICAgICAjIFNob3VsZG4ndCBiZSB0aGVyZSBhbnltb3JlLgotICAgICAgICBzZWxmLmFzc2VydF8oKG1vZCwgZnVuYykgbm90IGluIGNvcHlfcmVnLl9leHRlbnNpb25fcmVnaXN0cnkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKG1vZCwgZnVuYyksIGNvcHlfcmVnLl9leHRlbnNpb25fcmVnaXN0cnkpCiAgICAgICAgICMgVGhlIGNvZGUgKm1heSogYmUgaW4gY29weV9yZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgdGhvdWdoLCBpZgogICAgICAgICAjIHdlIGhhcHBlbmVkIHRvIHBpY2sgb24gYSByZWdpc3RlcmVkIGNvZGUuICBTbyBkb24ndCBjaGVjayBmb3IKICAgICAgICAgIyB0aGF0LgpAQCAtMTAxLDE2ICsxMDEsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgZnVuYywgY29kZSkKIAogICAgIGRlZiB0ZXN0X3Nsb3RuYW1lcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRob3V0U2xvdHMpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoV2Vha3JlZiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHlfcmVnLl9zbG90bmFtZXMoV2l0aG91dFNsb3RzKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoV2Vha3JlZiksIFtdKQogICAgICAgICBleHBlY3RlZCA9IFsnX1dpdGhQcml2YXRlX19zcGFtJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoUHJpdmF0ZSksIGV4cGVjdGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhTaW5nbGVTdHJpbmcpLCBbJ3NwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhQcml2YXRlKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoU2luZ2xlU3RyaW5nKSwgWydzcGFtJ10pCiAgICAgICAgIGV4cGVjdGVkID0gWydlZ2dzJywgJ3NwYW0nXQogICAgICAgICBleHBlY3RlZC5zb3J0KCkKICAgICAgICAgcmVzdWx0ID0gY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRoSW5oZXJpdGVkKQogICAgICAgICByZXN1bHQuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NwaWNrbGUucHkgYi9MaWIvdGVzdC90ZXN0X2NwaWNrbGUucHkKaW5kZXggYzYzY2EzZS4uYzI0MDY2OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcGlja2xlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3BpY2tsZS5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBjUGlja2xlLCB1bml0dGVzdAogZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzCitmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogY2xhc3MgY1BpY2tsZVRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMsIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMpOgpAQCAtOTUsNiArOTYsMTIgQEAKICAgICAgICAgYiA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhhKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQogCitjbGFzcyBjUGlja2xlUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzKToKKworICAgIHBpY2tsZXJfY2xhc3MgPSBjUGlja2xlLlBpY2tsZXIKKyAgICB1bnBpY2tsZXJfY2xhc3MgPSBjUGlja2xlLlVucGlja2xlcgorCisKIGNsYXNzIE5vZGUob2JqZWN0KToKICAgICBwYXNzCiAKQEAgLTEyNSw2ICsxMzIsNyBAQAogICAgICAgICBjUGlja2xlTGlzdFBpY2tsZXJUZXN0cywKICAgICAgICAgY1BpY2tsZUZhc3RQaWNrbGVyVGVzdHMsCiAgICAgICAgIGNQaWNrbGVEZWVwUmVjdXJzaXZlLAorICAgICAgICBjUGlja2xlUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggODMxODk1Yy4uYWYzZmU2MgotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTM5LDcgKzM5LDcgQEAKICMgRG9uJ3QgcmVtb3ZlIHRoaXMgY29tbWVudC4gRXZlcnl0aGluZyBiZWxvdyBpdCBpcyBhdXRvLWdlbmVyYXRlZC4KICMtLWN1dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9zdGF0cyddID0gIiIiXAotICAgICAgICAgMTI2IGZ1bmN0aW9uIGNhbGxzICgxMDYgcHJpbWl0aXZlIGNhbGxzKSBpbiAxLjAwMCBDUFUgc2Vjb25kcworICAgICAgICAgMTI2IGZ1bmN0aW9uIGNhbGxzICgxMDYgcHJpbWl0aXZlIGNhbGxzKSBpbiAxLjAwMCBzZWNvbmRzCiAKICAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBmNmYzYTgxLi40ZGIyMDBkCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBjcnlwdAorCitjcnlwdCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDdjY2U3NzQuLjdiMTZlMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgY3N2CiBpbXBvcnQgZ2MKK2ltcG9ydCBpbwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogY2xhc3MgVGVzdF9Dc3YodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzI1LDIyICszMjYsMTcgQEAKICAgICAgICAgZXhwZWN0ZWRfZGlhbGVjdHMgPSBjc3YubGlzdF9kaWFsZWN0cygpICsgW25hbWVdCiAgICAgICAgIGV4cGVjdGVkX2RpYWxlY3RzLnNvcnQoKQogICAgICAgICBjc3YucmVnaXN0ZXJfZGlhbGVjdChuYW1lLCBteWV4Y2VsdHN2KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY3N2LmdldF9kaWFsZWN0KG5hbWUpLmRlbGltaXRlciwgJ1x0JykKLSAgICAgICAgICAgIGdvdF9kaWFsZWN0cyA9IGNzdi5saXN0X2RpYWxlY3RzKCkKLSAgICAgICAgICAgIGdvdF9kaWFsZWN0cy5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGlhbGVjdHMsIGdvdF9kaWFsZWN0cykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QobmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3N2LmdldF9kaWFsZWN0KG5hbWUpLmRlbGltaXRlciwgJ1x0JykKKyAgICAgICAgZ290X2RpYWxlY3RzID0gc29ydGVkKGNzdi5saXN0X2RpYWxlY3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZGlhbGVjdHMsIGdvdF9kaWFsZWN0cykKIAogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2t3YXJncyhzZWxmKToKICAgICAgICAgbmFtZSA9ICdmZWRjYmEnCiAgICAgICAgIGNzdi5yZWdpc3Rlcl9kaWFsZWN0KG5hbWUsIGRlbGltaXRlcj0nOycpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjc3YuZ2V0X2RpYWxlY3QobmFtZSkuZGVsaW1pdGVyLCAnXHQnKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxpc3QoY3N2LnJlYWRlcignWDtZO1onLCBuYW1lKSksIFsnWCcsICdZJywgJ1onXSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QobmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3N2LmdldF9kaWFsZWN0KG5hbWUpLmRlbGltaXRlciwgJzsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtbJ1gnLCAnWScsICdaJ11dLCBsaXN0KGNzdi5yZWFkZXIoWydYO1k7WiddLCBuYW1lKSkpCiAKICAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2RpYWxlY3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIG15ZXhjZWx0c3YoY3N2LkRpYWxlY3QpOgpAQCAtNTk1LDExICs1OTEsMTUgQEAKICAgICAjIyMgInNob3J0IiBtZWFucyB0aGVyZSBhcmUgZmV3ZXIgZWxlbWVudHMgaW4gdGhlIHJvdyB0aGFuIGZpZWxkbmFtZXMKICAgICBkZWYgdGVzdF93cml0ZV9zaW1wbGVfZGljdChzZWxmKToKICAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKLSAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIGZpbGVvYmogPSBpby5vcGVuKGZkLCAndytiJykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd3JpdGVyID0gY3N2LkRpY3RXcml0ZXIoZmlsZW9iaiwgZmllbGRuYW1lcyA9IFsiZjEiLCAiZjIiLCAiZjMiXSkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZWhlYWRlcigpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkbGluZSgpLCAiZjEsZjIsZjNcclxuIikKICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyh7ImYxIjogMTAsICJmMyI6ICJhYmMifSkKICAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgZmlsZW9iai5yZWFkbGluZSgpICMgaGVhZGVyCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiMTAsLGFiY1xyXG4iKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCkBAIC04OTEsNyArODkxLDcgQEAKICdIYXJyeScncyc6J0FybGluZ3RvbiBIZWlnaHRzJzonSUwnOicyLzEvMDMnOidLaW1pIEhheWVzJwogJ1NoYXJrIENpdHknOidHbGVuZGFsZSBIZWlnaHRzJzonSUwnOicxMi8yOC8wMic6J1ByZXplbmNlJwogJ1RvbW15JydzIFBsYWNlJzonQmx1ZSBJc2xhbmQnOidJTCc6JzEyLzI4LzAyJzonQmx1ZSBTdW5kYXkvV2hpdGUgQ3JvdycKLSdTdG9uZWN1dHRlcnMgU2VhZm9vZCBhbmQgQ2hvcCBIb3VzZSc6J0xlbW9udCc6J0lMJzonMTIvMTkvMDInOidXZWVrIEJhY2snCisnU3RvbmVjdXR0ZXJzICcnU2VhZm9vZCcnIGFuZCBDaG9wIEhvdXNlJzonTGVtb250JzonSUwnOicxMi8xOS8wMic6J1dlZWsgQmFjaycKICIiIgogICAgIGhlYWRlciA9ICcnJ1wKICJ2ZW51ZSIsImNpdHkiLCJzdGF0ZSIsImRhdGUiLCJwZXJmb3JtZXJzIgpAQCAtOTM1LDcgKzkzNSw3IEBACiAgICAgICAgICMgZ2l2ZW4gdGhhdCBhbGwgdGhyZWUgbGluZXMgaW4gc2FtcGxlMyBhcmUgZXF1YWwsCiAgICAgICAgICMgSSB0aGluayB0aGF0IGFueSBjaGFyYWN0ZXIgY291bGQgaGF2ZSBiZWVuICdndWVzc2VkJyBhcyB0aGUKICAgICAgICAgIyBkZWxpbWl0ZXIsIGRlcGVuZGluZyBvbiBkaWN0aW9uYXJ5IG9yZGVyCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaWFsZWN0LmRlbGltaXRlciBpbiBzZWxmLnNhbXBsZTMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlhbGVjdC5kZWxpbWl0ZXIsIHNlbGYuc2FtcGxlMykKICAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUzLCBkZWxpbWl0ZXJzPSI/LCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICI/IikKICAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUzLCBkZWxpbWl0ZXJzPSIvLCIpCkBAIC05NTAsNiArOTUwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICJ8IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnF1b3RlY2hhciwgIiciKQogCisgICAgZGVmIHRlc3RfZG91YmxlcXVvdGUoc2VsZik6CisgICAgICAgIHNuaWZmZXIgPSBjc3YuU25pZmZlcigpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRpYWxlY3QuZG91YmxlcXVvdGUpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpYWxlY3QuZG91YmxlcXVvdGUpCisKIGlmIG5vdCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZTogcHJpbnQgIioqKiBza2lwcGluZyBsZWFrYWdlIHRlc3RzICoqKiIKIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CmluZGV4IDBiZDJlZDYuLjE3ZjI4NzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CkBAIC0xLDE3ICsxLDE1IEBACiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCiAjU2tpcCB0ZXN0cyBpZiBfY3R5cGVzIG1vZHVsZSBkb2VzIG5vdCBleGlzdAogaW1wb3J0X21vZHVsZSgnX2N0eXBlcycpCiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY2xhc3NpYyAoaW50fGxvbmcpIGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwpOgotICAgICAgICBpbXBvcnQgY3R5cGVzLnRlc3QKLSAgICAgICAgc2tpcHBlZCwgdGVzdGNhc2VzID0gY3R5cGVzLnRlc3QuZ2V0X3Rlc3RzKGN0eXBlcy50ZXN0LCAidGVzdF8qLnB5IiwgdmVyYm9zaXR5PTApCi0gICAgICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUodCkgZm9yIHQgaW4gdGVzdGNhc2VzXQotICAgICAgICBydW5fdW5pdHRlc3QodW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykpCisgICAgaW1wb3J0IGN0eXBlcy50ZXN0CisgICAgc2tpcHBlZCwgdGVzdGNhc2VzID0gY3R5cGVzLnRlc3QuZ2V0X3Rlc3RzKGN0eXBlcy50ZXN0LCAidGVzdF8qLnB5IiwgdmVyYm9zaXR5PTApCisgICAgc3VpdGVzID0gW3VuaXR0ZXN0Lm1ha2VTdWl0ZSh0KSBmb3IgdCBpbiB0ZXN0Y2FzZXNdCisgICAgcnVuX3VuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CmluZGV4IDU0YzMxMGUuLmZhMGQ0NjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CkBAIC05LDI0ICs5LDI2IEBACiAjIE9ubHkgY2FsbGVkLCBub3QgdGVzdGVkOiBnZXRtb3VzZSgpLCB1bmdldG1vdXNlKCkKICMKIAotaW1wb3J0IGN1cnNlcywgc3lzLCB0ZW1wZmlsZSwgb3MKLWltcG9ydCBjdXJzZXMucGFuZWwKK2ltcG9ydCBzeXMsIHRlbXBmaWxlLCBvcwogCiAjIE9wdGlvbmFsbHkgdGVzdCBjdXJzZXMgbW9kdWxlLiAgVGhpcyBjdXJyZW50bHkgcmVxdWlyZXMgdGhhdCB0aGUKICMgJ2N1cnNlcycgcmVzb3VyY2UgYmUgZ2l2ZW4gb24gdGhlIHJlZ3J0ZXN0IGNvbW1hbmQgbGluZSB1c2luZyB0aGUgLXUKICMgb3B0aW9uLiAgSWYgbm90IGF2YWlsYWJsZSwgbm90aGluZyBhZnRlciB0aGlzIGxpbmUgd2lsbCBiZSBleGVjdXRlZC4KIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIFRlc3RTa2lwcGVkCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBpbXBvcnRfbW9kdWxlCiByZXF1aXJlcygnY3Vyc2VzJykKK2N1cnNlcyA9IGltcG9ydF9tb2R1bGUoJ2N1cnNlcycpCitjdXJzZXMucGFuZWwgPSBpbXBvcnRfbW9kdWxlKCdjdXJzZXMucGFuZWwnKQogCiAKICMgWFhYOiBpZiBuZXd0ZXJtIHdhcyBzdXBwb3J0ZWQgd2UgY291bGQgdXNlIGl0IGluc3RlYWQgb2YgaW5pdHNjciBhbmQgbm90IGV4aXQKIHRlcm0gPSBvcy5lbnZpcm9uLmdldCgnVEVSTScpCiBpZiBub3QgdGVybSBvciB0ZXJtID09ICd1bmtub3duJzoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIiRURVJNPSVyLCBjYWxsaW5nIGluaXRzY3IoKSBtYXkgY2F1c2UgZXhpdCIgJSB0ZXJtCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICIkVEVSTT0lciwgY2FsbGluZyBpbml0c2NyKCkgbWF5IGNhdXNlIGV4aXQiICUgdGVybQogCiBpZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCiAKIGRlZiB3aW5kb3dfZnVuY3Moc3Rkc2NyKToKICAgICAiVGVzdCB0aGUgbWV0aG9kcyBvZiB3aW5kb3dzIgpAQCAtMjc2LDcgKzI3OCw3IEBACiAgICAgdW5pdF90ZXN0cygpCiBlbHNlOgogICAgIGlmIG5vdCBzeXMuX19zdGRvdXRfXy5pc2F0dHkoKToKLSAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQoInN5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eSIpCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzeXMuX19zdGRvdXRfXyBpcyBub3QgYSB0dHkiKQogICAgICMgdGVzdGluZyBzZXR1cHRlcm0oKSBpbnNpZGUgaW5pdHNjci9lbmR3aW4KICAgICAjIGNhdXNlcyB0ZXJtaW5hbCBicmVha2FnZQogICAgIGN1cnNlcy5zZXR1cHRlcm0oZmQ9c3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weQppbmRleCA3MzU1ODJmLi4xNTE4OGRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKQEAgLTIsNyArMiw3IEBACiAKIFNlZSBodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvZmRyYWtlL0RhdGVUaW1lV2lraS9UZXN0Q2FzZXMKICIiIgotCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgY1BpY2tsZQpAQCAtNzksOSArNzksOSBAQAogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5fX29mZnNldCA9IG9mZnNldAogICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhOb3RFbm91Z2gsIHR6aW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE5vdEVub3VnaCwgdHppbmZvKSkKICAgICAgICAgbmUgPSBOb3RFbm91Z2goMywgIk5vdEJ5QUxvbmdTaG90IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UobmUsIHR6aW5mbykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShuZSwgdHppbmZvKQogCiAgICAgICAgIGR0ID0gZGF0ZXRpbWUubm93KCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmUudHpuYW1lLCBkdCkKQEAgLTkwLDcgKzkwLDcgQEAKIAogICAgIGRlZiB0ZXN0X25vcm1hbChzZWxmKToKICAgICAgICAgZm8gPSBGaXhlZE9mZnNldCgzLCAiVGhyZWUiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShmbywgdHppbmZvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvLCB0emluZm8pCiAgICAgICAgIGZvciBkdCBpbiBkYXRldGltZS5ub3coKSwgTm9uZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8udXRjb2Zmc2V0KGR0KSwgdGltZWRlbHRhKG1pbnV0ZXM9MykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnR6bmFtZShkdCksICJUaHJlZSIpCkBAIC0xMDEsMjUgKzEwMSwyNSBAQAogICAgICAgICAjIGNhcnJ5IG5vIGRhdGEpLCBidXQgdGhleSBuZWVkIHRvIGJlIHBpY2tsYWJsZSBhbnl3YXkgZWxzZQogICAgICAgICAjIGNvbmNyZXRlIHN1YmNsYXNzZXMgY2FuJ3QgYmUgcGlja2xlZC4KICAgICAgICAgb3JpZyA9IHR6aW5mby5fX25ld19fKHR6aW5mbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUob3JpZykgaXMgdHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShvcmlnKSBpcyB0emluZm8pCiAgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgogICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQogICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGRlcml2ZWQpIGlzIHR6aW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRlcml2ZWQpIGlzIHR6aW5mbykKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gcGlja2xlL3VucGlja2xlIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3MuCiAgICAgICAgIG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPS0zMDApCiAgICAgICAgIG9yaWcgPSBQaWNrbGFibGVGaXhlZE9mZnNldChvZmZzZXQsICdjb29raWUnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShvcmlnLCB0emluZm8pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShvcmlnKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9yaWcsIHR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUob3JpZykgaXMgUGlja2xhYmxlRml4ZWRPZmZzZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZy51dGNvZmZzZXQoTm9uZSksIG9mZnNldCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLnR6bmFtZShOb25lKSwgJ2Nvb2tpZScpCiAgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgogICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQogICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGRlcml2ZWQsIHR6aW5mbykpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShkZXJpdmVkKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXJpdmVkLCB0emluZm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkZXJpdmVkKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoTm9uZSksIG9mZnNldCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoTm9uZSksICdjb29raWUnKQogCkBAIC0xMzYsMTYgKzEzNiwxMyBAQAogICAgIGRlZiB0ZXN0X2hhcm1sZXNzX21peGVkX2NvbXBhcmlzb24oc2VsZik6CiAgICAgICAgIG1lID0gc2VsZi50aGVjbGFzcygxLCAxLCAxKQogCi0gICAgICAgIHNlbGYuZmFpbElmKG1lID09ICgpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWUgIT0gKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKCgpID09IG1lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoKCkgIT0gbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWUgPT0gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZSAhPSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoKSA9PSBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgpICE9IG1lKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtZSBpbiBbMSwgMjBMLCBbXSwgbWVdKQotICAgICAgICBzZWxmLmZhaWxJZihtZSBub3QgaW4gWzEsIDIwTCwgW10sIG1lXSkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoW10gaW4gW21lLCAxLCAyMEwsIFtdXSkKLSAgICAgICAgc2VsZi5mYWlsSWYoW10gbm90IGluIFttZSwgMSwgMjBMLCBbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWUsIFsxLCAyMEwsIFtdLCBtZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oW10sIFttZSwgMSwgMjBMLCBbXV0pCiAKICAgICBkZWYgdGVzdF9oYXJtZnVsX21peGVkX2NvbXBhcmlzb24oc2VsZik6CiAgICAgICAgIG1lID0gc2VsZi50aGVjbGFzcygxLCAxLCAxKQpAQCAtMjY2LDYgKzI2MywyMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNlY29uZHMsIHNlY29uZHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQubWljcm9zZWNvbmRzLCB1cykKIAorICAgIGRlZiB0ZXN0X3RvdGFsX3NlY29uZHMoc2VsZik6CisgICAgICAgIHRkID0gdGltZWRlbHRhKGRheXM9MzY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnRvdGFsX3NlY29uZHMoKSwgMzE1MzYwMDAuMCkKKyAgICAgICAgZm9yIHRvdGFsX3NlY29uZHMgaW4gWzEyMzQ1Ni43ODkwMTIsIC0xMjM0NTYuNzg5MDEyLCAwLjEyMzQ1NiwgMCwgMWU2XToKKyAgICAgICAgICAgIHRkID0gdGltZWRlbHRhKHNlY29uZHM9dG90YWxfc2Vjb25kcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLCB0b3RhbF9zZWNvbmRzKQorICAgICAgICAjIElzc3VlODY0NDogVGVzdCB0aGF0IHRkLnRvdGFsX3NlY29uZHMoKSBoYXMgdGhlIHNhbWUKKyAgICAgICAgIyBhY2N1cmFjeSBhcyB0ZCAvIHRpbWVkZWx0YShzZWNvbmRzPTEpLgorICAgICAgICBmb3IgbXMgaW4gWy0xLCAtMiwgLTEyM106CisgICAgICAgICAgICB0ZCA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9bXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnRvdGFsX3NlY29uZHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgyNCozNjAwKnRkLmRheXMgKyB0ZC5zZWNvbmRzKSoxMCoqNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZC5taWNyb3NlY29uZHMpLzEwKio2KQorCiAgICAgZGVmIHRlc3RfY2FycmllcyhzZWxmKToKICAgICAgICAgdDEgPSB0aW1lZGVsdGEoZGF5cz0xMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtzPS03LApAQCAtMzA3LDI5ICszMTgsMjkgQEAKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWVkZWx0YSgyLCAzLCA0KQogICAgICAgICB0MiA9IHRpbWVkZWx0YSgyLCAzLCA0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID49IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxICE9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxIDwgdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCiAKICAgICAgICAgZm9yIGFyZ3MgaW4gKDMsIDMsIDMpLCAoMiwgNCwgNCksICgyLCAzLCA1KToKICAgICAgICAgICAgIHQyID0gdGltZWRlbHRhKCphcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPiB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSAhPSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiAhPSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyID09IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA8IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA+PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMSkKIApAQCAtMzc3LDcgKzM4OCw3IEBACiAKICAgICAgICAgICAgICMgVmVyaWZ5IHRkIC0+IHN0cmluZyAtPiB0ZCBpZGVudGl0eS4KICAgICAgICAgICAgIHMgPSByZXByKHRkKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKICAgICAgICAgICAgIHMgPSBzWzk6XQogICAgICAgICAgICAgdGQyID0gZXZhbChzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZCwgdGQyKQpAQCAtMzg3LDEwICszOTgsMTAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQsIHRkMikKIAogICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodGltZWRlbHRhLm1pbiwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodGltZWRlbHRhLm1heCwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodGltZWRlbHRhLnJlc29sdXRpb24sIHRpbWVkZWx0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0aW1lZGVsdGEubWF4ID4gdGltZWRlbHRhLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5taW4sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5tYXgsIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRpbWVkZWx0YS5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEubWF4ID4gdGltZWRlbHRhLm1pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEoLTk5OTk5OTk5OSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLm1heCwgdGltZWRlbHRhKDk5OTk5OTk5OSwgMjQqMzYwMC0xLCAxZTYtMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLnJlc29sdXRpb24sIHRpbWVkZWx0YSgwLCAwLCAxKSkKQEAgLTQzNywxMSArNDQ4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xLCAyNCozNjAwLTEsIDk5OTk5OSkpCiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGltZWRlbHRhKDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGltZWRlbHRhKDAsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGltZWRlbHRhKDAsIDAsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0aW1lZGVsdGEoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMCwgMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHRpbWVkZWx0YSgwKSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3RpbWVkZWx0YShzZWxmKToKIApAQCAtNDU3LDE3ICs0NjgsMTcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcm91bmQoc3VtKQogCiAgICAgICAgIHQxID0gVChkYXlzPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHQxKSBpcyBUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MSkgaXMgVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5hc19ob3VycygpLCAyNCkKIAogICAgICAgICB0MiA9IFQoZGF5cz0tMSwgc2Vjb25kcz0tMzYwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodDIpIGlzIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQyKSBpcyBUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLmFzX2hvdXJzKCksIC0yNSkKIAogICAgICAgICB0MyA9IHQxICsgdDIKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodDMpIGlzIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDMpIGlzIHRpbWVkZWx0YSkKICAgICAgICAgdDQgPSBULmZyb21fdGQodDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHQ0KSBpcyBUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0NCkgaXMgVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5kYXlzLCB0NC5kYXlzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnNlY29uZHMsIHQ0LnNlY29uZHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMubWljcm9zZWNvbmRzLCB0NC5taWNyb3NlY29uZHMpCkBAIC01MzAsNyArNTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLnRvZGF5KCkpOgogICAgICAgICAgICAgIyBWZXJpZnkgZHQgLT4gc3RyaW5nIC0+IGRhdGUgaWRlbnRpdHkuCiAgICAgICAgICAgICBzID0gcmVwcihkdCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCiAgICAgICAgICAgICBzID0gc1s5Ol0KICAgICAgICAgICAgIGR0MiA9IGV2YWwocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKQEAgLTc2NSw3ICs3NzYsNyBAQAogCiAgICAgICAgICMgSXQgd29ya2VkIG9yIGl0IGRpZG4ndC4gIElmIGl0IGRpZG4ndCwgYXNzdW1lIGl0J3MgcmVhc29uICMyLCBhbmQKICAgICAgICAgIyBsZXQgdGhlIHRlc3QgcGFzcyBpZiB0aGV5J3JlIHdpdGhpbiBoYWxmIGEgc2Vjb25kIG9mIGVhY2ggb3RoZXIuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0b2RheSA9PSB0b2RheWFnYWluIG9yCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0b2RheSA9PSB0b2RheWFnYWluIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICBhYnModG9kYXlhZ2FpbiAtIHRvZGF5KSA8IHRpbWVkZWx0YShzZWNvbmRzPTAuNSkpCiAKICAgICBkZWYgdGVzdF93ZWVrZGF5KHNlbGYpOgpAQCAtOTAyLDEwICs5MTMsMTAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKGZtdCksICdCJykKIAogICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5taW4sIHNlbGYudGhlY2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1heCwgc2VsZi50aGVjbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbiwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgc2VsZi50aGVjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWF4LCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1heCA+IHNlbGYudGhlY2xhc3MubWluKQogCiAgICAgZGVmIHRlc3RfZXh0cmVtZV90aW1lZGVsdGEoc2VsZik6CiAgICAgICAgIGJpZyA9IHNlbGYudGhlY2xhc3MubWF4IC0gc2VsZi50aGVjbGFzcy5taW4KQEAgLTk1MywyOSArOTY0LDI5IEBACiAgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDQpCiAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAzLCA0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID49IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxICE9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxIDwgdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCiAKICAgICAgICAgZm9yIGFyZ3MgaW4gKDMsIDMsIDMpLCAoMiwgNCwgNCksICgyLCAzLCA1KToKICAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqYXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyID4gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPD0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPj0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgIT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgIT0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID09IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA9PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPCB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPj0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCiAKQEAgLTEwMjksMTMgKzEwNDAsMTMgQEAKICAgICAgICAgdGhlaXIgPSBDb21wYXJhYmxlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAob3VyLCB0aGVpciksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHRoZWlyLCBvdXIpLCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3VyID09IHRoZWlyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGhlaXIgPT0gb3VyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3VyID09IHRoZWlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGhlaXIgPT0gb3VyKQogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgIyBBbGwgZGF0ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1ZS4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYudGhlY2xhc3MubWluKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi50aGVjbGFzcy5tYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4KQogCiAgICAgZGVmIHRlc3Rfc3RyZnRpbWVfb3V0X29mX3JhbmdlKHNlbGYpOgogICAgICAgICAjIEZvciBuYXN0eSB0ZWNobmljYWwgcmVhc29ucywgd2UgY2FuJ3QgaGFuZGxlIHllYXJzIGJlZm9yZSAxOTAwLgpAQCAtMTE1OCw3ICsxMTY5LDcgQEAKICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLm5vdygpKToKICAgICAgICAgICAgICMgVmVyaWZ5IGR0IC0+IHN0cmluZyAtPiBkYXRldGltZSBpZGVudGl0eS4KICAgICAgICAgICAgIHMgPSByZXByKGR0KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKICAgICAgICAgICAgIHMgPSBzWzk6XQogICAgICAgICAgICAgZHQyID0gZXZhbChzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQpAQCAtMTIzMiw3ICsxMjQzLDcgQEAKICAgICAgICAgZHQyID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAxMCwgMCwgMCkKICAgICAgICAgZHQzID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCA5LCAwLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MSwgZHQzKQotICAgICAgICBzZWxmLmFzc2VydF8oZHQyID4gZHQzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQyID4gZHQzKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGNvbXBhcmlzb24gZG9lc24ndCBmb3JnZXQgbWljcm9zZWNvbmRzLCBhbmQgaXNuJ3QgZG9uZQogICAgICAgICAjIHZpYSBjb21wYXJpbmcgYSBmbG9hdCB0aW1lc3RhbXAgKGFuIElFRUUgZG91YmxlIGRvZXNuJ3QgaGF2ZSBlbm91Z2gKQEAgLTEyNDMsNyArMTI1NCw3IEBACiAgICAgICAgIHVzID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKQogICAgICAgICBkdDIgPSBkdDEgKyB1cwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiAtIGR0MSwgdXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkdDEgPCBkdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdDEgPCBkdDIpCiAKICAgICBkZWYgdGVzdF9zdHJmdGltZV93aXRoX2JhZF90em5hbWVfcmVwbGFjZShzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgb2sgaWYgdHppbmZvLnR6bmFtZSgpLnJlcGxhY2UoKSByZXR1cm5zIGEgbm9uLXN0cmluZwpAQCAtMTQyMywxMiArMTQzNCwxMiBAQAogICAgICAgICBhcmdzID0gWzIwMDAsIDExLCAyOSwgMjAsIDU4LCAxNiwgOTk5OTk4XQogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCiAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqYXJncykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID09IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPD0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA+PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSAhPSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA8IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID4gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAwKQogCkBAIC0xNDM2LDE4ICsxNDQ3LDE4IEBACiAgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQogICAgICAgICAgICAgbmV3YXJnc1tpXSA9IGFyZ3NbaV0gKyAxCiAgICAgICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKm5ld2FyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPCB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MiA+IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDw9IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyID49IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxICE9IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyICE9IHQxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MSA9PSB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPT0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID4gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyIDwgdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID49IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA8PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAxKQogCkBAIC0xNDgwLDggKzE0OTEsOCBAQAogICAgIGRlZiB0ZXN0X21pY3Jvc2Vjb25kX3JvdW5kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2hldGhlciBmcm9tdGltZXN0YW1wICJyb3VuZHMgdXAiIGZsb2F0cyB0aGF0IGFyZSBsZXNzCiAgICAgICAgICMgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGFuIGludGVnZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCgwLjk5OTk5OTkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDAuOTk5OTk5OSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDEpKQogCiAgICAgZGVmIHRlc3RfaW5zYW5lX2Zyb210aW1lc3RhbXAoc2VsZik6CiAgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLApAQCAtMTUwMCwyMSArMTUxMSwxNiBAQAogICAgICAgICBmb3IgaW5zYW5lIGluIC0xZTIwMCwgMWUyMDA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNhbmUpCi0KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBkb2Vzbid0IGFjY2VwdCBuZWdhdGl2ZSB0aW1lc3RhbXBzIikKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9mbG9hdF9mcm9tdGltZXN0YW1wKHNlbGYpOgotICAgICAgICAjIFdpbmRvd3MgZG9lc24ndCBhY2NlcHQgbmVnYXRpdmUgdGltZXN0YW1wcwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFRoZSByZXN1bHQgaXMgdHotZGVwZW5kZW50OyBhdCBsZWFzdCB0ZXN0IHRoYXQgdGhpcyBkb2Vzbid0CiAgICAgICAgICMgZmFpbCAobGlrZSBpdCBkaWQgYmVmb3JlIGJ1ZyAxNjQ2NzI4IHdhcyBmaXhlZCkuCiAgICAgICAgIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCgtMS4wNSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgV2luZG93cyBkb2Vzbid0IGFjY2VwdCBuZWdhdGl2ZSB0aW1lc3RhbXBzCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAoLTEuMDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQsIHNlbGYudGhlY2xhc3MoMTk2OSwgMTIsIDMxLCAyMywgNTksIDU4LCA5NTAwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYudGhlY2xhc3MoMTk2OSwgMTIsIDMxLCAyMywgNTksIDU4LCA5NTAwMDApKQogCiAgICAgZGVmIHRlc3RfdXRjbm93KHNlbGYpOgogICAgICAgICBpbXBvcnQgdGltZQpAQCAtMTUyOCw3ICsxNTM0LDcgQEAKICAgICAgICAgICAgIGlmIGFicyhmcm9tX3RpbWVzdGFtcCAtIGZyb21fbm93KSA8PSB0b2xlcmFuY2U6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICMgRWxzZSB0cnkgYWdhaW4gYSBmZXcgdGltZXMuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhhYnMoZnJvbV90aW1lc3RhbXAgLSBmcm9tX25vdykgPD0gdG9sZXJhbmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZSkKIAogICAgIGRlZiB0ZXN0X3N0cnB0aW1lKHNlbGYpOgogICAgICAgICBpbXBvcnQgX3N0cnB0aW1lCkBAIC0xNjk3LDcgKzE3MDMsNyBAQAogCiAgICAgICAgICMgVmVyaWZ5IHQgLT4gc3RyaW5nIC0+IHRpbWUgaWRlbnRpdHkuCiAgICAgICAgIHMgPSByZXByKHQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKICAgICAgICAgcyA9IHNbOTpdCiAgICAgICAgIHQyID0gZXZhbChzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHQyKQpAQCAtMTcxMSwxMiArMTcxNywxMiBAQAogICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDRdCiAgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPT0gdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8PSB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID49IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxICE9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxIDwgdDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCiAKQEAgLTE3MjQsMTggKzE3MzAsMTggQEAKICAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCiAgICAgICAgICAgICBuZXdhcmdzW2ldID0gYXJnc1tpXSArIDEKICAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqbmV3YXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQyID4gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPD0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPj0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgIT0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgIT0gdDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQxID09IHQyKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0MiA9PSB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPiB0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDIgPCB0MSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgdDEgPj0gdDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCiAKQEAgLTE4ODgsMTAgKzE4OTQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMjMsIDE1KSIgJSBuYW1lKQogCiAgICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgc2VsZi50aGVjbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MubWF4LCBzZWxmLnRoZWNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi50aGVjbGFzcy5tYXggPiBzZWxmLnRoZWNsYXNzLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKICAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCkBAIC0xOTExLDEyICsxOTE3LDEyIEBACiAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjbHMoMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjbHMoMCwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjbHMoMCwgMCwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhjbHMoMCwgMCwgMCwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgY2xzKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IGNscygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNscygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbHMoKSkKIAogICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CiAgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKQEAgLTIwMTMsNyArMjAxOSw3IEBACiAgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcGFzcwogICAgICAgICBiID0gQmV0dGVyVHJ5KCkKICAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89YikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQudHppbmZvIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6aW5mbyBpcyBiKQogCiAgICAgZGVmIHRlc3RfdXRjX29mZnNldF9vdXRfb2ZfYm91bmRzKHNlbGYpOgogICAgICAgICBjbGFzcyBFZGd5KHR6aW5mbyk6CkBAIC0yMDUyLDkgKzIwNTgsOSBAQAogICAgICAgICBmb3IgdCBpbiAoY2xzKDEsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1Ob25lKSwKICAgICAgICAgICAgICAgICAgIGNscygxLCAxLCAxLCB0emluZm89QzEoKSkpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0LmRzdCgpIGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModC50em5hbWUoKSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRzdCgpIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC50em5hbWUoKSBpcyBOb25lKQogCiAgICAgICAgIGNsYXNzIEMzKHR6aW5mbyk6CiAgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPS0xNDM5KQpAQCAtMjE0OCw3ICsyMTU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pbnV0ZSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNlY29uZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModC50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQudHppbmZvIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF96b25lcyhzZWxmKToKICAgICAgICAgZXN0ID0gRml4ZWRPZmZzZXQoLTMwMCwgIkVTVCIsIDEpCkBAIC0yMTYzLDI1ICsyMTY5LDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudHppbmZvLCBlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHppbmZvLCB1dGMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHppbmZvLCBtZXQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0NC50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6aW5mbyBpcyBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1LnR6aW5mbywgdXRjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnV0Y29mZnNldCgpIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEudXRjb2Zmc2V0LCAibm8gYXJncyIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50em5hbWUoKSwgIkVTVCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHpuYW1lKCksICJVVEMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6bmFtZSgpLCAiTUVUIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQ0LnR6bmFtZSgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0NC50em5hbWUoKSBpcyBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQxLnR6bmFtZSwgIm5vIGFyZ3MiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuZHN0KCksIHRpbWVkZWx0YShtaW51dGVzPTEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0tMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuZHN0KCksIHRpbWVkZWx0YShtaW51dGVzPTMpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDQuZHN0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LmRzdCgpIGlzIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEuZHN0LCAibm8gYXJncyIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCkBAIC0yMjU3LDcgKzIyNjMsNyBAQAogICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQogICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGRlcml2ZWQudHppbmZvLCBQaWNrbGFibGVGaXhlZE9mZnNldCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVyaXZlZC50emluZm8sIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoKSwgJ2Nvb2tpZScpCiAKQEAgLTIyNjYsMjAgKzIyNzIsMjAgQEAKICAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwogCiAgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQogCiAgICAgICAgIHQgPSBjbHMoNSwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQogCiAgICAgICAgIHQgPSBjbHMoNSwgdHppbmZvPUZpeGVkT2Zmc2V0KDMwMCwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdCkKIAogICAgICAgICB0ID0gY2xzKDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQpCiAKICAgICAgICAgIyBNb3N0bHkgZW5zdXJpbmcgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGludGVybmFsbHkuCiAgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQogCiAgICAgICAgICMgQnV0IHRoaXMgc2hvdWxkIHlpZWxkIGEgdmFsdWUgZXJyb3IgLS0gdGhlIHV0Y29mZnNldCBpcyBib2d1cy4KICAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoMjQqNjAsICIiKSkKQEAgLTIzMTMsMTMgKzIzMTksMTMgQEAKICAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGdldCByaWQgb2YgYSB0emluZm8uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS50em5hbWUoKSwgIisxMDAiKQogICAgICAgICBiYXNlMiA9IGJhc2UucmVwbGFjZSh0emluZm89Tm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJhc2UyLnR6aW5mbyBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZTIudHpuYW1lKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHpuYW1lKCkgaXMgTm9uZSkKIAogICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gYWRkIG9uZS4KICAgICAgICAgYmFzZTMgPSBiYXNlMi5yZXBsYWNlKHR6aW5mbz16MTAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZS50emluZm8gaXMgYmFzZTMudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZS50emluZm8gaXMgYmFzZTMudHppbmZvKQogCiAgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KICAgICAgICAgYmFzZSA9IGNscygxKQpAQCAtMjM1Niw3ICsyMzYyLDcgQEAKIAogICAgICAgICAjIEJ1dCBpZiB0aGV5J3JlIG5vdCBpZGVudGljYWwsIGl0IGlzbid0IGlnbm9yZWQuCiAgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89VmFyaWVzKCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKSAgIyB0MSdzIG9mZnNldCBjb3VudGVyIHN0aWxsIGdvaW5nIHVwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKSAgIyB0MSdzIG9mZnNldCBjb3VudGVyIHN0aWxsIGdvaW5nIHVwCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc190aW1ldHooc2VsZik6CiAKQEAgLTI0MTIsMTIgKzI0MTgsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQzOSwgIiIpKQogCiAgICAgICAgICMgTWFrZSBzdXJlIHRob3NlIGNvbXBhcmUgY29ycmVjdGx5LCBhbmQgdy9vIG92ZXJmbG93LgotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPCB0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxICE9IHQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPiB0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID09IHQxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDIgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID09IHQyKQogCiAgICAgICAgICMgRXF1YWwgYWZlciBhZGp1c3RtZW50LgogICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIikpCkBAIC0yNDI2LDIxICsyNDMyLDIxIEBACiAKICAgICAgICAgIyBDaGFuZ2UgdDEgbm90IHRvIHN1YnRyYWN0IGEgbWludXRlLCBhbmQgdDEgc2hvdWxkIGJlIGxhcmdlci4KICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCiAKICAgICAgICAgIyBDaGFuZ2UgdDEgdG8gc3VidHJhY3QgMiBtaW51dGVzLCBhbmQgdDEgc2hvdWxkIGJlIHNtYWxsZXIuCiAgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIsICIiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQogCiAgICAgICAgICMgQmFjayB0byB0aGUgb3JpZ2luYWwgdDEsIGJ1dCBtYWtlIHNlY29uZHMgcmVzb2x2ZSBpdC4KICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMSwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kPTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA+IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPiB0MikKIAogICAgICAgICAjIExpa2V3aXNlLCBidXQgbWFrZSBtaWNyb3NlY29uZHMgcmVzb2x2ZSBpdC4KICAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMSwgIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmQ9MSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHQxID4gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQogCiAgICAgICAgICMgTWFrZSB0MiBuYWl2ZSBhbmQgaXQgc2hvdWxkIGZhaWwuCiAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcy5taW4KQEAgLTI0ODQsOCArMjQ5MCw3IEBACiAgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCiAgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZGVyaXZlZC50emluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlja2xhYmxlRml4ZWRPZmZzZXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQudHppbmZvLCBQaWNrbGFibGVGaXhlZE9mZnNldCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQogCkBAIC0yNTU1LDcgKzI1NjAsNyBAQAogICAgICAgICB0ejU1ID0gRml4ZWRPZmZzZXQoLTMzMCwgIndlc3QgNTozMCIpCiAgICAgICAgIHRpbWVhd2FyZSA9IG5vdy50aW1lKCkucmVwbGFjZSh0emluZm89dHo1NSkKICAgICAgICAgbm93YXdhcmUgPSBzZWxmLnRoZWNsYXNzLmNvbWJpbmUobm93LmRhdGUoKSwgdGltZWF3YXJlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm93YXdhcmUudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZS50emluZm8gaXMgdHo1NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZS50aW1ldHooKSwgdGltZWF3YXJlKQogCiAgICAgICAgICMgQ2FuJ3QgbWl4IGF3YXJlIGFuZCBub24tYXdhcmUuCkBAIC0yNTc0LDE1ICsyNTc5LDE1IEBACiAgICAgICAgICMgQWRkaW5nIGEgZGVsdGEgc2hvdWxkIHByZXNlcnZlIHR6aW5mby4KICAgICAgICAgZGVsdGEgPSB0aW1lZGVsdGEod2Vla3M9MSwgbWludXRlcz0xMiwgbWljcm9zZWNvbmRzPTU2NzgpCiAgICAgICAgIG5vd2F3YXJlcGx1cyA9IG5vd2F3YXJlICsgZGVsdGEKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vd2F3YXJlLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmUudHppbmZvIGlzIHR6NTUpCiAgICAgICAgIG5vd2F3YXJlcGx1czIgPSBkZWx0YSArIG5vd2F3YXJlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3dhd2FyZXBsdXMyLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmVwbHVzMi50emluZm8gaXMgdHo1NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZXBsdXMsIG5vd2F3YXJlcGx1czIpCiAKICAgICAgICAgIyB0aGF0IC0gZGVsdGEgc2hvdWxkIGJlIHdoYXQgd2Ugc3RhcnRlZCB3aXRoLCBhbmQgdGhhdCAtIHdoYXQgd2UKICAgICAgICAgIyBzdGFydGVkIHdpdGggc2hvdWxkIGJlIGRlbHRhLgogICAgICAgICBkaWZmID0gbm93YXdhcmVwbHVzIC0gZGVsdGEKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpZmYudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWZmLnR6aW5mbyBpcyB0ejU1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLCBkaWZmKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGVsdGEgLSBub3dhd2FyZXBsdXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmVwbHVzIC0gbm93YXdhcmUsIGRlbHRhKQpAQCAtMjU5MSw3ICsyNTk2LDcgQEAKICAgICAgICAgdHpyID0gRml4ZWRPZmZzZXQocmFuZG9tLnJhbmRyYW5nZSgtMTQzOSwgMTQ0MCksICJyYW5kb210aW1lem9uZSIpCiAgICAgICAgICMgQXR0YWNoIGl0IHRvIG5vd2F3YXJlcGx1cy4KICAgICAgICAgbm93YXdhcmVwbHVzID0gbm93YXdhcmVwbHVzLnJlcGxhY2UodHppbmZvPXR6cikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vd2F3YXJlcGx1cy50emluZm8gaXMgdHpyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmVwbHVzLnR6aW5mbyBpcyB0enIpCiAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBkaWZmZXJlbmNlIHRha2VzIHRoZSB0aW1lem9uZSBhZGp1c3RtZW50cyBpbnRvIGFjY291bnQuCiAgICAgICAgIGdvdCA9IG5vd2F3YXJlIC0gbm93YXdhcmVwbHVzCiAgICAgICAgICMgRXhwZWN0ZWQ6ICAobm93YXdhcmUgYmFzZSAtIG5vd2F3YXJlIG9mZnNldCkgLQpAQCAtMjYxOCw3ICsyNjIzLDcgQEAKICAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKICAgICAgICAgYW5vdGhlciA9IG1ldGgob2ZmNDIpCiAgICAgICAgIGFnYWluID0gbWV0aCh0ej1vZmY0MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGFub3RoZXIudHppbmZvIGlzIGFnYWluLnR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFub3RoZXIudHppbmZvIGlzIGFnYWluLnR6aW5mbykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbm90aGVyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz00MikpCiAgICAgICAgICMgQmFkIGFyZ3VtZW50IHdpdGggYW5kIHcvbyBuYW1pbmcgdGhlIGtleXdvcmQuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgMTYpCkBAIC0yNjM1LDcgKzI2NDAsNyBAQAogICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAidXRjIiwgMCkKICAgICAgICAgZm9yIGR1bW15IGluIHJhbmdlKDMpOgogICAgICAgICAgICAgbm93ID0gZGF0ZXRpbWUubm93KHdlaXJkdHopCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm93LnR6aW5mbyBpcyB3ZWlyZHR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdy50emluZm8gaXMgd2VpcmR0eikKICAgICAgICAgICAgIHV0Y25vdyA9IGRhdGV0aW1lLnV0Y25vdygpLnJlcGxhY2UodHppbmZvPXV0YykKICAgICAgICAgICAgIG5vdzIgPSB1dGNub3cuYXN0aW1lem9uZSh3ZWlyZHR6KQogICAgICAgICAgICAgaWYgYWJzKG5vdyAtIG5vdzIpIDwgdGltZWRlbHRhKHNlY29uZHM9MzApOgpAQCAtMjY1Niw3ICsyNjYxLDcgQEAKICAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKICAgICAgICAgYW5vdGhlciA9IG1ldGgodHMsIG9mZjQyKQogICAgICAgICBhZ2FpbiA9IG1ldGgodHMsIHR6PW9mZjQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFub3RoZXIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTQyKSkKICAgICAgICAgIyBCYWQgYXJndW1lbnQgd2l0aCBhbmQgdy9vIG5hbWluZyB0aGUga2V5d29yZC4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgMTYpCkBAIC0yODUwLDEzICsyODU1LDEzIEBACiAgICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKICAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhiYXNlMi50emluZm8gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCiAKICAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCiAgICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKIAogICAgICAgICAjIE91dCBvZiBib3VuZHMuCiAgICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCkBAIC0yODY5LDIwICsyODc0LDIwIEBACiAgICAgICAgIGZtNWggPSBGaXhlZE9mZnNldCgtdGltZWRlbHRhKGhvdXJzPTUpLCAibTMwMCIpCiAKICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm5vdyh0ej1mNDRtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZHQudHppbmZvIGlzIGY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdC50emluZm8gaXMgZjQ0bSkKICAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBkZWdlbmVyYXRlIHR6aW5mbyByYWlzZXMgYW4gZXhjZXB0aW9uLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmbm9uZSkKICAgICAgICAgIyBEaXR0byB3aXRoIE5vbmUgdHouCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgTm9uZSkKICAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBzYW1lIHR6aW5mbyBtYWtlcyBubyBjaGFuZ2UuCiAgICAgICAgIHggPSBkdC5hc3RpbWV6b25lKGR0LnR6aW5mbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHgudHppbmZvIGlzIGY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnR6aW5mbyBpcyBmNDRtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZGF0ZSgpLCBkdC5kYXRlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50aW1lKCksIGR0LnRpbWUoKSkKIAogICAgICAgICAjIFJlcGxhY2luZyB3aXRoIGRpZmZlcmVudCB0emluZm8gZG9lcyBhZGp1c3QuCiAgICAgICAgIGdvdCA9IGR0LmFzdGltZXpvbmUoZm01aCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdvdC50emluZm8gaXMgZm01aCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdvdC50emluZm8gaXMgZm01aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShob3Vycz0tNSkpCiAgICAgICAgIGV4cGVjdGVkID0gZHQgLSBkdC51dGNvZmZzZXQoKSAgIyBpbiBlZmZlY3QsIGNvbnZlcnQgdG8gVVRDCiAgICAgICAgIGV4cGVjdGVkICs9IGZtNWgudXRjb2Zmc2V0KGR0KSAgIyBhbmQgZnJvbSB0aGVyZSB0byBsb2NhbCB0aW1lCkBAIC0yODkwLDcgKzI4OTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC5kYXRlKCksIGV4cGVjdGVkLmRhdGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZSgpLCBleHBlY3RlZC50aW1lKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LnRpbWV0eigpLCBleHBlY3RlZC50aW1ldHooKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGdvdC50emluZm8gaXMgZXhwZWN0ZWQudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBleHBlY3RlZC50emluZm8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2F3YXJlX3N1YnRyYWN0KHNlbGYpOgpAQCAtMjk2NSw3ICsyOTcwLDcgQEAKIAogICAgICAgICAjIEJ1dCBpZiB0aGV5J3JlIG5vdCBpZGVudGljYWwsIGl0IGlzbid0IGlnbm9yZWQuCiAgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89VmFyaWVzKCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0MSA8IHQyKSAgIyB0MSdzIG9mZnNldCBjb3VudGVyIHN0aWxsIGdvaW5nIHVwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKSAgIyB0MSdzIG9mZnNldCBjb3VudGVyIHN0aWxsIGdvaW5nIHVwCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRldGltZXR6KHNlbGYpOgogCkBAIC0zMzE2LDEwICszMzIxLDEwIEBACiAgICAgICAgICMgdHlwZSBjb21wYXJpc29uLCBkZXNwaXRlIHRoYXQgZGF0ZXRpbWUgaXMgYSBzdWJjbGFzcyBvZiBkYXRlLgogICAgICAgICBhc19kYXRlID0gZGF0ZS50b2RheSgpCiAgICAgICAgIGFzX2RhdGV0aW1lID0gZGF0ZXRpbWUuY29tYmluZShhc19kYXRlLCB0aW1lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhhc19kYXRlICE9IGFzX2RhdGV0aW1lKQotICAgICAgICBzZWxmLmFzc2VydF8oYXNfZGF0ZXRpbWUgIT0gYXNfZGF0ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBhc19kYXRlID09IGFzX2RhdGV0aW1lKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGFzX2RhdGV0aW1lID09IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRlICE9IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNfZGF0ZXRpbWUgIT0gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhc19kYXRlID09IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGV0aW1lID09IGFzX2RhdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlIDwgYXNfZGF0ZXRpbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA8IGFzX2RhdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlIDw9IGFzX2RhdGV0aW1lKQpAQCAtMzMzMSw5ICszMzM2LDkgQEAKIAogICAgICAgICAjIE5ldmVydGhlbHNzLCBjb21wYXJpc29uIHNob3VsZCB3b3JrIHdpdGggdGhlIGJhc2UtY2xhc3MgKGRhdGUpCiAgICAgICAgICMgcHJvamVjdGlvbiBpZiB1c2Ugb2YgYSBkYXRlIG1ldGhvZCBpcyBmb3JjZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhhc19kYXRlLl9fZXFfXyhhc19kYXRldGltZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRlLl9fZXFfXyhhc19kYXRldGltZSkpCiAgICAgICAgIGRpZmZlcmVudF9kYXkgPSAoYXNfZGF0ZS5kYXkgKyAxKSAlIDIwICsgMQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lLnJlcGxhY2UoZGF5PQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lLnJlcGxhY2UoZGF5PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnRfZGF5KSkpCiAKICAgICAgICAgIyBBbmQgZGF0ZSBzaG91bGQgY29tcGFyZSB3aXRoIG90aGVyIHN1YmNsYXNzZXMgb2YgZGF0ZS4gIElmIGEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCAwNTQxZjg2Li40MWIwYjVjCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC0xLDYgKzEsNiBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGRibQorZGJtID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2RibScpCiAKIGNsYXNzIERibVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjEsOSArMjEsOSBAQAogICAgICAgICAgICAgc2VsZi5kW2tdID0gdgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLmQua2V5cygpKSwgc29ydGVkKGsgZm9yIChrLCB2KSBpbiBhKSkKICAgICAgICAgZm9yIGssIHYgaW4gYToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrIGluIHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5kKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRba10sIHYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygneHh4JyBub3QgaW4gc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd4eHgnLCBzZWxmLmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuZFsneHh4J10pCiAgICAgICAgIHNlbGYuZC5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQppbmRleCA0MTc2N2MzLi5kYzIxNzc3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CkBAIC0yNCwxNSArMjQsMTUgQEAKIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCiAiIiIKIAotaW1wb3J0IGdsb2IKIGltcG9ydCBtYXRoCiBpbXBvcnQgb3MsIHN5cworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgcGlja2xlLCBjb3B5CiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gZGVjaW1hbCBpbXBvcnQgKgogaW1wb3J0IG51bWJlcnMKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0LCBydW5fZG9jdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZXNvdXJjZV9lbmFibGVkLCBfY2hlY2tfcHkza193YXJuaW5ncykKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Jlc291cmNlX2VuYWJsZWQsIGNoZWNrX3B5M2tfd2FybmluZ3MpCiBpbXBvcnQgcmFuZG9tCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtNjAsNiArNjAsMTEgQEAKICAgICAgICAgKQogICAgIHNldGNvbnRleHQoRGVmYXVsdFRlc3RDb250ZXh0KQogCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKwogVEVTVERBVEFESVIgPSAnZGVjaW1hbHRlc3RkYXRhJwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KQEAgLTIxNywxNiArMjIyLDE3IEBACiAgICAgZGVmIGV2YWxfZmlsZShzZWxmLCBmaWxlKToKICAgICAgICAgZ2xvYmFsIHNraXBfZXhwZWN0ZWQKICAgICAgICAgaWYgc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdAogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZvciBsaW5lIGluIG9wZW4oZmlsZSk6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcclxuJywgJycpLnJlcGxhY2UoJ1xuJywgJycpCi0gICAgICAgICAgICAjcHJpbnQgbGluZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHQgPSBzZWxmLmV2YWxfbGluZShsaW5lKQotICAgICAgICAgICAgZXhjZXB0IERlY2ltYWxFeGNlcHRpb24sIGV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAjRXhjZXB0aW9uIHJhaXNlZCB3aGVyZSB0aGVyZSBzaG91ZG4ndCBoYXZlIGJlZW4gb25lLgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhjZXB0aW9uICInK2V4Y2VwdGlvbi5fX2NsYXNzX18uX19uYW1lX18gKyAnIiByYWlzZWQgb24gbGluZSAnK2xpbmUpCisgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcclxuJywgJycpLnJlcGxhY2UoJ1xuJywgJycpCisgICAgICAgICAgICAgICAgI3ByaW50IGxpbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHQgPSBzZWxmLmV2YWxfbGluZShsaW5lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBEZWNpbWFsRXhjZXB0aW9uIGFzIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgI0V4Y2VwdGlvbiByYWlzZWQgd2hlcmUgdGhlcmUgc2hvdWRuJ3QgaGF2ZSBiZWVuIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gIicrZXhjZXB0aW9uLl9fY2xhc3NfXy5fX25hbWVfXyArICciIHJhaXNlZCBvbiBsaW5lICcrbGluZSkKIAogICAgICAgICByZXR1cm4KIApAQCAtMzgxLDEzICszODcsOSBAQAogICAgICAgICBteWV4Y2VwdGlvbnMgPSBzZWxmLmdldGV4Y2VwdGlvbnMoKQogICAgICAgICBzZWxmLmNvbnRleHQuY2xlYXJfZmxhZ3MoKQogCi0gICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICBteWV4Y2VwdGlvbnMuc29ydCgpCi0gICAgICAgICAgICB0aGVpcmV4Y2VwdGlvbnMuc29ydCgpCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGFucywKICAgICAgICAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IGFuc3dlciBmb3IgJyArIHMgKyAnIC0tIGdvdCAnICsgcmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZXhjZXB0aW9ucywgdGhlaXJleGNlcHRpb25zLAorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwobXlleGNlcHRpb25zLCB0aGVpcmV4Y2VwdGlvbnMsCiAgICAgICAgICAgICAgICdJbmNvcnJlY3QgZmxhZ3Mgc2V0IGluICcgKyBzICsgJyAtLSBnb3QgJyArIHN0cihteWV4Y2VwdGlvbnMpKQogICAgICAgICByZXR1cm4KIApAQCAtNTAwLDYgKzUwMiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDEwLCA0LCA5LCAxKSwgMikgKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDMsIDQsICdhJywgMSksIDIpICkKIAorICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoRmFsc2UpLCBEZWNpbWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoVHJ1ZSksIERlY2ltYWwoMSkpCisKICAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX0RlY2ltYWwoc2VsZik6CiAKICAgICAgICAgI3Bvc2l0aXZlCkBAIC01MjYsNiArNTM0LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQogCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9mbG9hdChzZWxmKToKKyAgICAgICAgciA9IERlY2ltYWwoMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUociksIERlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHIpLAorICAgICAgICAgICAgICAgICcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnbmFuJykpLmlzX3FuYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERlY2ltYWwoZmxvYXQoJ2luZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnLWluZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCduYW4nKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCdOYU4nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJ2luZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ0luZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLUluZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctMC4wJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLTAnKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMCk6CisgICAgICAgICAgICB4ID0gcmFuZG9tLmV4cG92YXJpYXRlKDAuMDEpICogKHJhbmRvbS5yYW5kb20oKSAqIDIuMCAtIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgZmxvYXQoRGVjaW1hbCh4KSkpICMgcm91bmR0cmlwCisKICAgICBkZWYgdGVzdF9leHBsaWNpdF9jb250ZXh0X2NyZWF0ZV9kZWNpbWFsKHNlbGYpOgogCiAgICAgICAgIG5jID0gY29weS5jb3B5KGdldGNvbnRleHQoKSkKQEAgLTU0Miw3ICs1NzEsNyBAQAogCiAgICAgICAgICMgZnJvbSBpbnQKICAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKDQ1NikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZCwgRGVjaW1hbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBEZWNpbWFsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jLmNyZWF0ZV9kZWNpbWFsKDQ1Njc4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYy5jcmVhdGVfZGVjaW1hbCgnNDU3RSsyJykpCiAKQEAgLTYzOCw3ICs2NjcsNyBAQAogICAgICAgICAgICAgKCcvLycsICdfX2Zsb29yZGl2X18nLCAnX19yZmxvb3JkaXZfXycpLAogICAgICAgICAgICAgKCcqKicsICdfX3Bvd19fJywgJ19fcnBvd19fJykKICAgICAgICAgXQotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgaWYgMSAvIDIgPT0gMDoKICAgICAgICAgICAgICAgICAjIHRlc3Rpbmcgd2l0aCBjbGFzc2ljIGRpdmlzaW9uLCBzbyBhZGQgX19kaXZfXwogICAgICAgICAgICAgICAgIG9wbGlzdC5hcHBlbmQoKCcvJywgJ19fZGl2X18nLCAnX19yZGl2X18nKSkKQEAgLTY1NCw2ICs2ODMsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdEZWNpbWFsKDEwKScgKyBzeW0gKyAnRSgpJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMCcgKyByb3AgKyAnc3RyJykKIAorCiBjbGFzcyBEZWNpbWFsRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgJycnVW5pdCB0ZXN0cyBmb3IgdGhlIGZvcm1hdCBmdW5jdGlvbi4nJycKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgpAQCAtNzQzLDExICs3NzMsNTYgQEAKIAogICAgICAgICAgICAgKCcnLCAnMS4wMCcsICcxLjAwJyksCiAKLSAgICAgICAgICAgICMgY2hlY2sgYWxpZ25tZW50CisgICAgICAgICAgICAjIHRlc3QgYWxpZ25tZW50IGFuZCBwYWRkaW5nCisgICAgICAgICAgICAoJzYnLCAnMTIzJywgJyAgIDEyMycpLAogICAgICAgICAgICAgKCc8NicsICcxMjMnLCAnMTIzICAgJyksCiAgICAgICAgICAgICAoJz42JywgJzEyMycsICcgICAxMjMnKSwKICAgICAgICAgICAgICgnXjYnLCAnMTIzJywgJyAxMjMgICcpLAogICAgICAgICAgICAgKCc9KzYnLCAnMTIzJywgJysgIDEyMycpLAorICAgICAgICAgICAgKCcjPDEwJywgJ05hTicsICdOYU4jIyMjIyMjJyksCisgICAgICAgICAgICAoJyM8MTAnLCAnLTQuMycsICctNC4zIyMjIyMjJyksCisgICAgICAgICAgICAoJyM8KzEwJywgJzAuMDEzMCcsICcrMC4wMTMwIyMjJyksCisgICAgICAgICAgICAoJyM8IDEwJywgJzAuMDEzMCcsICcgMC4wMTMwIyMjJyksCisgICAgICAgICAgICAoJ0A+MTAnLCAnLUluZicsICdALUluZmluaXR5JyksCisgICAgICAgICAgICAoJyM+NScsICctSW5mJywgJy1JbmZpbml0eScpLAorICAgICAgICAgICAgKCc/XjUnLCAnMTIzJywgJz8xMjM/JyksCisgICAgICAgICAgICAoJyVeNicsICcxMjMnLCAnJTEyMyUlJyksCisgICAgICAgICAgICAoJyBeNicsICctNDUuNicsICctNDUuNiAnKSwKKyAgICAgICAgICAgICgnLz0xMCcsICctNDUuNicsICctLy8vLy80NS42JyksCisgICAgICAgICAgICAoJy89KzEwJywgJzQ1LjYnLCAnKy8vLy8vNDUuNicpLAorICAgICAgICAgICAgKCcvPSAxMCcsICc0NS42JywgJyAvLy8vLzQ1LjYnKSwKKworICAgICAgICAgICAgIyB0aG91c2FuZHMgc2VwYXJhdG9yCisgICAgICAgICAgICAoJywnLCAnMTIzNDU2NycsICcxLDIzNCw1NjcnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjM0NTYnLCAnMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcsJywgJzEyMzQ1JywgJzEyLDM0NScpLAorICAgICAgICAgICAgKCcsJywgJzEyMzQnLCAnMSwyMzQnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjMnLCAnMTIzJyksCisgICAgICAgICAgICAoJywnLCAnMTInLCAnMTInKSwKKyAgICAgICAgICAgICgnLCcsICcxJywgJzEnKSwKKyAgICAgICAgICAgICgnLCcsICcwJywgJzAnKSwKKyAgICAgICAgICAgICgnLCcsICctMTIzNDU2NycsICctMSwyMzQsNTY3JyksCisgICAgICAgICAgICAoJywnLCAnLTEyMzQ1NicsICctMTIzLDQ1NicpLAorICAgICAgICAgICAgKCc3LCcsICcxMjM0NTYnLCAnMTIzLDQ1NicpLAorICAgICAgICAgICAgKCc4LCcsICcxMjM0NTYnLCAnIDEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnMDgsJywgJzEyMzQ1NicsICcwLDEyMyw0NTYnKSwgIyBzcGVjaWFsIGNhc2U6IGV4dHJhIDAgbmVlZGVkCisgICAgICAgICAgICAoJyswOCwnLCAnMTIzNDU2JywgJysxMjMsNDU2JyksICMgYnV0IG5vdCBpZiB0aGVyZSdzIGEgc2lnbgorICAgICAgICAgICAgKCcgMDgsJywgJzEyMzQ1NicsICcgMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcwOCwnLCAnLTEyMzQ1NicsICctMTIzLDQ1NicpLAorICAgICAgICAgICAgKCcrMDksJywgJzEyMzQ1NicsICcrMCwxMjMsNDU2JyksCisgICAgICAgICAgICAjIC4uLiB3aXRoIGZyYWN0aW9uYWwgcGFydC4uLgorICAgICAgICAgICAgKCcwNywnLCAnMTIzNC41NicsICcxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwOCwnLCAnMTIzNC41NicsICcxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwOSwnLCAnMTIzNC41NicsICcwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDEwLCcsICcxMjM0LjU2JywgJzAwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDExLCcsICcxMjM0LjU2JywgJzAsMDAxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwMTIsJywgJzEyMzQuNTYnLCAnMCwwMDEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzA4LC4xZicsICcxMjM0LjUnLCAnMDEsMjM0LjUnKSwKKyAgICAgICAgICAgICMgbm8gdGhvdXNhbmRzIHNlcGFyYXRvcnMgaW4gZnJhY3Rpb24gcGFydAorICAgICAgICAgICAgKCcsJywgJzEuMjM0NTY3ODknLCAnMS4yMzQ1Njc4OScpLAorICAgICAgICAgICAgKCcsJScsICcxMjMuNDU2Nzg5JywgJzEyLDM0NS42Nzg5JScpLAorICAgICAgICAgICAgKCcsZScsICcxMjM0NTYnLCAnMS4yMzQ1NmUrNScpLAorICAgICAgICAgICAgKCcsRScsICcxMjM0NTYnLCAnMS4yMzQ1NkUrNScpLAogCiAgICAgICAgICAgICAjIGlzc3VlIDY4NTAKICAgICAgICAgICAgICgnYT0tNy4wJywgJzAuMTIzNDUnLCAnYWFhYTAuMScpLApAQCAtNzU1LDYgKzgzMCw3OSBAQAogICAgICAgICBmb3IgZm10LCBkLCByZXN1bHQgaW4gdGVzdF92YWx1ZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChEZWNpbWFsKGQpLCBmbXQpLCByZXN1bHQpCiAKKyAgICBkZWYgdGVzdF9uX2Zvcm1hdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBsb2NhbGUgaW1wb3J0IENIQVJfTUFYCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgU2V0IHVwIHNvbWUgbG9jYWxlY29udi1saWtlIGRpY3Rpb25hcmllcworICAgICAgICBlbl9VUyA9IHsKKyAgICAgICAgICAgICdkZWNpbWFsX3BvaW50JyA6ICcuJywKKyAgICAgICAgICAgICdncm91cGluZycgOiBbMywgMywgMF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCc6ICcsJworICAgICAgICAgICAgfQorCisgICAgICAgIGZyX0ZSID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJywnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFtDSEFSX01BWF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCcgOiAnJworICAgICAgICAgICAgfQorCisgICAgICAgIHJ1X1JVID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJywnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFszLCAzLCAwXSwKKyAgICAgICAgICAgICd0aG91c2FuZHNfc2VwJyA6ICcgJworICAgICAgICAgICAgfQorCisgICAgICAgIGNyYXp5ID0geworICAgICAgICAgICAgJ2RlY2ltYWxfcG9pbnQnIDogJyYnLAorICAgICAgICAgICAgJ2dyb3VwaW5nJyA6IFsxLCA0LCAyLCBDSEFSX01BWF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCcgOiAnLScKKyAgICAgICAgICAgIH0KKworCisgICAgICAgIGRlZiBnZXRfZm10KHgsIGxvY2FsZSwgZm10PSduJyk6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbC5fX2Zvcm1hdF9fKERlY2ltYWwoeCksIGZtdCwgX2xvY2FsZWNvbnY9bG9jYWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIGVuX1VTKSwgJzEyLjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoRGVjaW1hbCgnMTIuNycpLCBmcl9GUiksICcxMiw3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KERlY2ltYWwoJzEyLjcnKSwgcnVfUlUpLCAnMTIsNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIGNyYXp5KSwgJzEtMiY3JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBlbl9VUyksICcxMjMsNDU2LDc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGZyX0ZSKSwgJzEyMzQ1Njc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIHJ1X1JVKSwgJzEyMyA0NTYgNzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OTAxMjMsIGNyYXp5KSwgJzEyMzQ1Ni03OC05MDEyLTMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGVuX1VTLCAnLjZuJyksICcxLjIzNDU3ZSs4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgZnJfRlIsICcuNm4nKSwgJzEsMjM0NTdlKzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBydV9SVSwgJy42bicpLCAnMSwyMzQ1N2UrOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGNyYXp5LCAnLjZuJyksICcxJjIzNDU3ZSs4JykKKworICAgICAgICAjIHplcm8gcGFkZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwM24nKSwgJzEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwNG4nKSwgJzEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNCwgZnJfRlIsICcwNW4nKSwgJzAxMjM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQsIGZyX0ZSLCAnMDZuJyksICcwMDEyMzQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwNW4nKSwgJzEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwNm4nKSwgJzEyLDM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NSwgZW5fVVMsICcwN24nKSwgJzAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDhuJyksICcwLDAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDluJyksICcwLDAxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDEwbicpLCAnMDAsMDEyLDM0NScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwNm4nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwN24nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwOG4nKSwgJzEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwOW4nKSwgJzAxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDEwbicpLCAnMC0wMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxMW4nKSwgJzAtMDEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwMTJuJyksICcwMC0wMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxM24nKSwgJzAwMC0wMS0yMzQ1LTYnKQorCisKIGNsYXNzIERlY2ltYWxBcml0aG1ldGljT3BlcmF0b3JzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgJycnVW5pdCB0ZXN0cyBmb3IgYWxsIGFyaXRobWV0aWMgb3BlcmF0b3JzLCBiaW5hcnkgYW5kIHVuYXJ5LicnJwogCkBAIC05NzksMTggKzExMjcsNjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoRGVjaW1hbCg0NSkpLCBhYnMoRGVjaW1hbCgtNDUpKSkgICMgYWJzCiAKICAgICBkZWYgdGVzdF9uYW5fY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgICMgY29tcGFyaXNvbnMgaW52b2x2aW5nIHNpZ25hbGluZyBuYW5zIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uCisKKyAgICAgICAgIyBvcmRlciBjb21wYXJpc29ucyAoPCwgPD0sID4sID49KSBpbnZvbHZpbmcgb25seSBxdWlldCBuYW5zCisgICAgICAgICMgYWxzbyBzaWduYWwgSW52YWxpZE9wZXJhdGlvbgorCisgICAgICAgICMgZXF1YWxpdHkgY29tcGFyaXNvbnMgKD09LCAhPSkgaW52b2x2aW5nIG9ubHkgcXVpZXQgbmFucworICAgICAgICAjIGRvbid0IHNpZ25hbCwgYnV0IHJldHVybiBGYWxzZSBvciBUcnVlIHJlc3BlY3RpdmVseS4KKwogICAgICAgICBuID0gRGVjaW1hbCgnTmFOJykKICAgICAgICAgcyA9IERlY2ltYWwoJ3NOYU4nKQogICAgICAgICBpID0gRGVjaW1hbCgnSW5mJykKICAgICAgICAgZiA9IERlY2ltYWwoJzInKQotICAgICAgICBmb3IgeCwgeSBpbiBbKG4sIG4pLCAobiwgaSksIChpLCBuKSwgKG4sIGYpLCAoZiwgbiksCi0gICAgICAgICAgICAgICAgICAgICAocywgbiksIChuLCBzKSwgKHMsIGkpLCAoaSwgcyksIChzLCBmKSwgKGYsIHMpLCAocywgcyldOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHggIT0geSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgKHggPT0geSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90ICh4IDwgeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90ICh4IDw9IHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoeCA+IHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoeCA+PSB5KSkKKworICAgICAgICBxbmFuX3BhaXJzID0gKG4sIG4pLCAobiwgaSksIChpLCBuKSwgKG4sIGYpLCAoZiwgbikKKyAgICAgICAgc25hbl9wYWlycyA9IChzLCBuKSwgKG4sIHMpLCAocywgaSksIChpLCBzKSwgKHMsIGYpLCAoZiwgcyksIChzLCBzKQorICAgICAgICBvcmRlcl9vcHMgPSBvcGVyYXRvci5sdCwgb3BlcmF0b3IubGUsIG9wZXJhdG9yLmd0LCBvcGVyYXRvci5nZQorICAgICAgICBlcXVhbGl0eV9vcHMgPSBvcGVyYXRvci5lcSwgb3BlcmF0b3IubmUKKworICAgICAgICAjIHJlc3VsdHMgd2hlbiBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkCisgICAgICAgIGZvciB4LCB5IGluIHFuYW5fcGFpcnMgKyBzbmFuX3BhaXJzOgorICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wcyArIGVxdWFsaXR5X29wczoKKyAgICAgICAgICAgICAgICBnb3QgPSBvcCh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHswIXJ9IGZvciBvcGVyYXRvci57MX0oezIhcn0sIHszIXJ9KTsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCB7NCFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICMgcmVwZWF0IHRoZSBhYm92ZSwgYnV0IHRoaXMgdGltZSB0cmFwIHRoZSBJbnZhbGlkT3BlcmF0aW9uCisgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgY3R4OgorICAgICAgICAgICAgY3R4LnRyYXBzW0ludmFsaWRPcGVyYXRpb25dID0gMQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBxbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgezAhcn0gZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0b3IuezF9KHsyIXJ9LCB7MyFyfSk7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHs0IXJ9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBzbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEludmFsaWRPcGVyYXRpb24sIG9wZXJhdG9yLmVxLCB4LCB5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbnZhbGlkT3BlcmF0aW9uLCBvcGVyYXRvci5uZSwgeCwgeSkKKworICAgICAgICAgICAgZm9yIHgsIHkgaW4gcW5hbl9wYWlycyArIHNuYW5fcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZE9wZXJhdGlvbiwgb3AsIHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb3B5X3NpZ24oc2VsZik6CisgICAgICAgIGQgPSBEZWNpbWFsKDEpLmNvcHlfc2lnbihEZWNpbWFsKC0yKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMSkuY29weV9zaWduKC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEZWNpbWFsKDEpLmNvcHlfc2lnbiwgJy0yJykKIAogIyBUaGUgZm9sbG93aW5nIGFyZSB0d28gZnVuY3Rpb25zIHVzZWQgdG8gdGVzdCB0aHJlYWRpbmcgaW4gdGhlIG5leHQgY2xhc3MKIApAQCAtMTA2MywyMiArMTI1NSwyMiBAQAogICAgICAgICBkYyA9IERlY2ltYWwoJzQ1JykKIAogICAgICAgICAjdHdvIERlY2ltYWxzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYyA+IGRhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGMgPj0gZGEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYSA8IGRjKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGEgPD0gZGMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYSA9PSBkYikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRhICE9IGRjKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGEgPD0gZGIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYSA+PSBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRjLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGMsIGRhKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZGEsIGRjKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkYSwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGEsIGRiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIGRiKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYSwgZGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRjLGRhKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGEsZGMpLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGEsZGIpLCAwKQogCiAgICAgICAgICNhIERlY2ltYWwgYW5kIGFuIGludAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZGMgPiAyMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDIzIDwgZGMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkYyA9PSA0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRjLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDIzLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYywgNDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRjLDIzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoMjMsZGMpLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGMsNDUpLCAwKQpAQCAtMTA5NywxMCArMTI4OSwyNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCiAKICAgICAgICAgIyB3aXRoIE5vbmUKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRGVjaW1hbCgxKSA8IE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbCgxKSA+IE5vbmUpCiAKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2Zsb2F0X2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIGRhID0gRGVjaW1hbCgnMC4yNScpCisgICAgICAgIGRiID0gRGVjaW1hbCgnMy4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRhLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYiwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGIsIDAuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYSwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDMuMCwgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDMuMCwgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMC4yNSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMC4yNSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMy4wLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLjEsIERlY2ltYWwoJzAuMScpKQorCiAgICAgZGVmIHRlc3RfY29weV9hbmRfZGVlcGNvcHlfbWV0aG9kcyhzZWxmKToKICAgICAgICAgZCA9IERlY2ltYWwoJzQzLjI0JykKICAgICAgICAgYyA9IGNvcHkuY29weShkKQpAQCAtMTExMSw2ICsxMzIwLDEwIEBACiAgICAgZGVmIHRlc3RfaGFzaF9tZXRob2Qoc2VsZik6CiAgICAgICAgICNqdXN0IHRoYXQgaXQncyBoYXNoYWJsZQogICAgICAgICBoYXNoKERlY2ltYWwoMjMpKQorICAgICAgICBoYXNoKERlY2ltYWwoJ0luZmluaXR5JykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnLUluZmluaXR5JykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnbmFuMTIzJykpCisgICAgICAgIGhhc2goRGVjaW1hbCgnLU5hTicpKQogCiAgICAgICAgIHRlc3RfdmFsdWVzID0gW0RlY2ltYWwoc2lnbiooMioqbSArIG4pKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbSBpbiBbMCwgMTQsIDE1LCAxNiwgMTcsIDMwLCAzMSwKQEAgLTExNDUsOSArMTM1OCwxOCBAQAogCiAgICAgICAgICN0aGUgc2FtZSBoYXNoIHRoYXQgdG8gYW4gaW50CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChEZWNpbWFsKDIzKSksIGhhc2goMjMpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIERlY2ltYWwoJ05hTicpKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzaChEZWNpbWFsKCdJbmYnKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNoKERlY2ltYWwoJy1JbmYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgRGVjaW1hbCgnc05hTicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzaChEZWNpbWFsKCdJbmYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKERlY2ltYWwoJy1JbmYnKSkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBoYXNoZXMgb2YgYSBEZWNpbWFsIGZsb2F0IG1hdGNoIHdoZW4gdGhleQorICAgICAgICAjIHJlcHJlc2VudCBleGFjdGx5IHRoZSBzYW1lIHZhbHVlcworICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbJ2luZicsICctSW5mJywgJzAuMCcsICctLjBlMScsCisgICAgICAgICAgICAgICAgICAgICAgICAnMzQuMCcsICcyLjUnLCAnMTEyMzkwLjYyNScsICctMC41MTU2MjUnXQorICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBmID0gZmxvYXQocykKKyAgICAgICAgICAgIGQgPSBEZWNpbWFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZiksIGhhc2goZCkpCiAKICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaGFzaCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKICAgICAgICAgIyBjdXJyZW50IGNvbnRleHQgKGlzc3VlICMxNzU3KQpAQCAtMTE3NCwyMiArMTM5NiwyMiBAQAogICAgICAgICBsMiA9IDI4CiAKICAgICAgICAgI2JldHdlZW4gRGVjaW1hbHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1pbihkMSxkMikgaXMgZDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtaW4oZDIsZDEpIGlzIGQxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWF4KGQxLGQyKSBpcyBkMikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1heChkMixkMSkgaXMgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWluKGQxLGQyKSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWluKGQyLGQxKSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWF4KGQxLGQyKSwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWF4KGQyLGQxKSwgZDIpCiAKICAgICAgICAgI2JldHdlZW4gRGVjaW1hbCBhbmQgbG9uZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWluKGQxLGwyKSBpcyBkMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1pbihsMixkMSkgaXMgZDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtYXgobDEsZDIpIGlzIGQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobWF4KGQyLGwxKSBpcyBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDEsbDIpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4obDIsZDEpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgobDEsZDIpLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDIsbDEpLCBkMikKIAogICAgIGRlZiB0ZXN0X2FzX25vbnplcm8oc2VsZik6CiAgICAgICAgICNhcyBmYWxzZQotICAgICAgICBzZWxmLmZhaWxJZihEZWNpbWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKERlY2ltYWwoMCkpCiAgICAgICAgICNhcyB0cnVlCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhEZWNpbWFsKCcwLjM3MicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbCgnMC4zNzInKSkKIAogICAgIGRlZiB0ZXN0X3Rvc3RyaW5nX21ldGhvZHMoc2VsZik6CiAgICAgICAgICNUZXN0IHN0ciBhbmQgcmVwciBtZXRob2RzLgpAQCAtMTM2OSwxMCArMTU5MSwxMCBAQAogICAgICAgICBkMSA9IE15RGVjaW1hbCgxKQogICAgICAgICBkMiA9IE15RGVjaW1hbCgyKQogICAgICAgICBkID0gZDEgKyBkMgotICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkKSBpcyBEZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZCksIERlY2ltYWwpCiAKICAgICAgICAgZCA9IGQxLm1heChkMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZCkgaXMgRGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGQpLCBEZWNpbWFsKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfY29udGV4dChzZWxmKToKICAgICAgICAgIyBDaGVjayByZXN1bHRzIHdoZW4gY29udGV4dCBnaXZlbiBpbXBsaWNpdGx5LiAgKElzc3VlIDI0NzgpCkBAIC0xNDMxLDEwICsxNjUzLDEwIEBACiBjbGFzcyBEZWNpbWFsUHl0aG9uQVBJdGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLk51bWJlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLlJlYWwpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLk51bWJlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaXNpbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLlJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLk51bWJlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLlJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoRGVjaW1hbCgwKSwgbnVtYmVycy5OdW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLlJlYWwpCiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CiAgICAgICAgIGQgPSBEZWNpbWFsKCctMy4xNDE1OTAwMDAnKQpAQCAtMTQ3Miw2ICsxNjk0LDU1IEBACiAgICAgICAgICAgICByID0gZC50b19pbnRlZ3JhbChST1VORF9ET1dOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKG1hdGgudHJ1bmMoZCkpLCByKQogCisgICAgZGVmIHRlc3RfZnJvbV9mbG9hdChzZWxmKToKKworICAgICAgICBjbGFzcyAgTXlEZWNpbWFsKERlY2ltYWwpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHIgPSBNeURlY2ltYWwuZnJvbV9mbG9hdCgwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgTXlEZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihyKSwKKyAgICAgICAgICAgICAgICAnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JykKKyAgICAgICAgYmlnaW50ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeURlY2ltYWwuZnJvbV9mbG9hdChiaWdpbnQpLCBNeURlY2ltYWwoYmlnaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkuaXNfcW5hbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJy1pbmYnKSkuaXNfaW5maW5pdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ25hbicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ05hTicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ2luZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ0luZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnLWluZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJy1JbmZpbml0eScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBNeURlY2ltYWwuZnJvbV9mbG9hdCwgJ2FiYycpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMCk6CisgICAgICAgICAgICB4ID0gcmFuZG9tLmV4cG92YXJpYXRlKDAuMDEpICogKHJhbmRvbS5yYW5kb20oKSAqIDIuMCAtIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgZmxvYXQoTXlEZWNpbWFsLmZyb21fZmxvYXQoeCkpKSAjIHJvdW5kdHJpcAorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChzZWxmKToKKyAgICAgICAgY29udGV4dCA9IENvbnRleHQocHJlYz01LCByb3VuZGluZz1ST1VORF9ET1dOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpLAorICAgICAgICAgICAgRGVjaW1hbCgnMy4xNDE1JykKKyAgICAgICAgKQorICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX1VQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KG1hdGgucGkpLAorICAgICAgICAgICAgRGVjaW1hbCgnMy4xNDE2JykKKyAgICAgICAgKQorICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHRyYXBzPVtJbmV4YWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBJbmV4YWN0LAorICAgICAgICAgICAgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0LAorICAgICAgICAgICAgbWF0aC5waQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoLTAuMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEZWNpbWFsKCctMCcpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgxLjApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGVjaW1hbCgnMScpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgxMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEZWNpbWFsKCcxMCcpIikKKwogY2xhc3MgQ29udGV4dEFQSXRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKQEAgLTE0ODMsOCArMTc1NCw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLCB2MikKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5X3dpdGhfb3RoZXJfdHlwZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhEZWNpbWFsKDEwKSBpbiBbJ2EnLCAxLjAsIERlY2ltYWwoMTApLCAoMSwyKSwge31dKQotICAgICAgICBzZWxmLmFzc2VydF8oRGVjaW1hbCgxMCkgbm90IGluIFsnYScsIDEuMCwgKDEsMiksIHt9XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihEZWNpbWFsKDEwKSwgWydhJywgMS4wLCBEZWNpbWFsKDEwKSwgKDEsMiksIHt9XSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZWNpbWFsKDEwKSwgWydhJywgMS4wLCAoMSwyKSwge31dKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKICAgICAgICAgIyBBbGwgY29waWVzIHNob3VsZCBiZSBkZWVwCkBAIC0xNDk0LDYgKzE3NjUsNDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYy5mbGFncyksIGlkKGQuZmxhZ3MpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMudHJhcHMpLCBpZChkLnRyYXBzKSkKIAorICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5hYnMoRGVjaW1hbCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hYnMoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuYWJzLCAnLTEnKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmFkZChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuYWRkLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hZGQsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZSgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmUoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZSwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZSwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9zaWduYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZV9zaWduYWwoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfc2lnbmFsKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV9zaWduYWwoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3NpZ25hbCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfc2lnbmFsLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3NpZ25hbCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b3RhbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWwoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvdGFsX21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3RvdGFsX21hZyhEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbF9tYWcoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsX21hZyhEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWxfbWFnKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbF9tYWcsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWxfbWFnLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X2FicyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X2FicyhEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfYWJzKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfYWJzLCAnLTEnKQorCisgICAgZGVmIHRlc3RfY29weV9kZWNpbWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfZGVjaW1hbChEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfZGVjaW1hbCgtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X2RlY2ltYWwsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X25lZ2F0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X25lZ2F0ZShEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfbmVnYXRlKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfbmVnYXRlLCAnLTEnKQorCisgICAgZGVmIHRlc3RfY29weV9zaWduKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfc2lnbihEZWNpbWFsKDEpLCBEZWNpbWFsKC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfc2lnbigxLCAtMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X3NpZ24oRGVjaW1hbCgxKSwgLTIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9zaWduKDEsIERlY2ltYWwoLTIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfc2lnbiwgJzEnLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfc2lnbiwgMSwgJy0yJykKKworICAgIGRlZiB0ZXN0X2RpdmlkZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5kaXZpZGUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9kaXZpZGVfaW50KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdmlkZV9pbnQoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZV9pbnQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGVfaW50KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlX2ludCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZV9pbnQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZV9pbnQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2Rpdm1vZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5kaXZtb2QoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdm1vZCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2bW9kLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9leHAoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZXhwKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhwKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmV4cCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2ZtYShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5mbWEoRGVjaW1hbCgyKSwgRGVjaW1hbCgzKSwgRGVjaW1hbCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCAzLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYShEZWNpbWFsKDIpLCAzLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCBEZWNpbWFsKDMpLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCAzLCBEZWNpbWFsKDQpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYShEZWNpbWFsKDIpLCBEZWNpbWFsKDMpLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmZtYSwgJzInLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZm1hLCAyLCAnMycsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5mbWEsIDIsIDMsICc0JykKKworICAgIGRlZiB0ZXN0X2lzX2Zpbml0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19maW5pdGUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19maW5pdGUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfZmluaXRlLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfaW5maW5pdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfaW5maW5pdGUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19pbmZpbml0ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19pbmZpbml0ZSwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX25hbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19uYW4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19uYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfbmFuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfbm9ybWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX25vcm1hbChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX25vcm1hbCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19ub3JtYWwsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19xbmFuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3FuYW4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19xbmFuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3FuYW4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19zaWduZWQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfc2lnbmVkKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfc2lnbmVkKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3NpZ25lZCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3NuYW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfc25hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3NuYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc25hbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3N1Ym5vcm1hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zdWJub3JtYWwoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19zdWJub3JtYWwoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc3Vibm9ybWFsLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfemVybyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc196ZXJvKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfemVybygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc196ZXJvLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZzEwKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZzEwKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9nMTAoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9nMTAsICcxMCcpCisKKyAgICBkZWYgdGVzdF9sb2diKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2IoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2diKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2IsICcxMCcpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX2FuZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX2FuZChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9hbmQoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2FuZChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfYW5kKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9hbmQsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfYW5kLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX2ludmVydChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX2ludmVydChEZWNpbWFsKDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9pbnZlcnQoMTAwMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX2ludmVydCwgJzEwMDAnKQorCisgICAgZGVmIHRlc3RfbG9naWNhbF9vcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX29yKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX29yKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9vcihEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfb3IoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX29yLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX29yLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX3hvcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX3hvcihEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF94b3IoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX3hvcihEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfeG9yKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF94b3IsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfeG9yLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9tYXgoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWF4KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXgsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWF4X21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tYXhfbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXhfbWFnKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4X21hZyhEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heF9tYWcoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXhfbWFnLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXhfbWFnLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWluKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW4sICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbiwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWluX21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW5fbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW5fbWFnKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluX21hZyhEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbl9tYWcoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW5fbWFnLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW5fbWFnLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW51cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW51cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbnVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbnVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbHkoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubXVsdGlwbHkoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm11bHRpcGx5KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubXVsdGlwbHkoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tdWx0aXBseSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm11bHRpcGx5LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tdWx0aXBseSwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbmV4dF9taW51cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5uZXh0X21pbnVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF9taW51cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X21pbnVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbmV4dF9wbHVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfcGx1cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfcGx1cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X3BsdXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9uZXh0X3Rvd2FyZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF90b3dhcmQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfdG93YXJkKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF90b3dhcmQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfdG93YXJkLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9ub3JtYWxpemUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubm9ybWFsaXplKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubm9ybWFsaXplKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5vcm1hbGl6ZSwgJzEwJykKKworICAgIGRlZiB0ZXN0X251bWJlcl9jbGFzcyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubnVtYmVyX2NsYXNzKDEyMyksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoMTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoMCksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubnVtYmVyX2NsYXNzKC00NSksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoLTQ1KSkpCisKKyAgICBkZWYgdGVzdF9wb3dlcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5wb3dlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDQpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgNCwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcihEZWNpbWFsKDEpLCA0LCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKDEsIERlY2ltYWwoNCksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgNCwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDQpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBvd2VyLCAnMScsIDQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wb3dlciwgMSwgJzQnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucG93ZXIsIDEsIDQsICcyJykKKworICAgIGRlZiB0ZXN0X3BsdXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucGx1cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBsdXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucGx1cywgJzEwJykKKworICAgIGRlZiB0ZXN0X3F1YW50aXplKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnF1YW50aXplKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5xdWFudGl6ZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnF1YW50aXplKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucXVhbnRpemUoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5xdWFudGl6ZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucXVhbnRpemUsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JlbWFpbmRlcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yZW1haW5kZXIoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlciwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9yZW1haW5kZXJfbmVhcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyX25lYXIoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcl9uZWFyKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyX25lYXIsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlcl9uZWFyLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucm90YXRlKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yb3RhdGUsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJvdGF0ZSwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc3FydChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zcXJ0KERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3FydCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zcXJ0LCAnMTAnKQorCisgICAgZGVmIHRlc3Rfc2FtZV9xdWFudHVtKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNhbWVfcXVhbnR1bShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2FtZV9xdWFudHVtLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zYW1lX3F1YW50dW0sIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3NjYWxlYihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zY2FsZWIoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNjYWxlYiwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2NhbGViLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zaGlmdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zaGlmdChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2hpZnQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zaGlmdChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNoaWZ0KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2hpZnQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNoaWZ0LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zdWJ0cmFjdChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3VidHJhY3QoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zdWJ0cmFjdChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnN1YnRyYWN0KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc3VidHJhY3QsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnN1YnRyYWN0LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF90b19lbmdfc3RyaW5nKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX2VuZ19zdHJpbmcoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19lbmdfc3RyaW5nKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2VuZ19zdHJpbmcsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19zY2lfc3RyaW5nKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX3NjaV9zdHJpbmcoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19zY2lfc3RyaW5nKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX3NjaV9zdHJpbmcsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19pbnRlZ3JhbF9leGFjdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2ludGVncmFsX2V4YWN0KDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2ludGVncmFsX2V4YWN0LCAnMTAnKQorCisgICAgZGVmIHRlc3RfdG9faW50ZWdyYWxfdmFsdWUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19pbnRlZ3JhbF92YWx1ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy50b19pbnRlZ3JhbF92YWx1ZSwgJzEwJykKKwogY2xhc3MgV2l0aFN0YXRlbWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgQ2FuJ3QgZG8gdGhlc2UgYXMgZG9jc3RyaW5ncyB1bnRpbCBQeXRob24gMi42CiAgICAgIyBhcyBkb2N0ZXN0IGNhbid0IGhhbmRsZSBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKQEAgLTE1MDQsOSArMjIwNyw5IEBACiAgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgZW50ZXJfY3R4OgogICAgICAgICAgICAgc2V0X2N0eCA9IGdldGNvbnRleHQoKQogICAgICAgICBmaW5hbF9jdHggPSBnZXRjb250ZXh0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9yaWdfY3R4IGlzIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvcmlnX2N0eCBpcyBub3Qgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXRfY3R4IGlzIGVudGVyX2N0eCwgJ19fZW50ZXJfXyByZXR1cm5lZCB3cm9uZyBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX2N0eCwgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvcmlnX2N0eCwgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2V0X2N0eCwgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQogCiAgICAgZGVmIHRlc3RfbG9jYWxjb250ZXh0YXJnKHNlbGYpOgogICAgICAgICAjIFVzZSBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIGNvbnRleHQgaW4gdGhlIGJsb2NrCkBAIC0xNTE1LDEwICsyMjE4LDEwIEBACiAgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KG5ld19jdHgpIGFzIGVudGVyX2N0eDoKICAgICAgICAgICAgIHNldF9jdHggPSBnZXRjb250ZXh0KCkKICAgICAgICAgZmluYWxfY3R4ID0gZ2V0Y29udGV4dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvcmlnX2N0eCBpcyBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0X2N0eC5wcmVjID09IG5ld19jdHgucHJlYywgJ2RpZCBub3Qgc2V0IGNvcnJlY3QgY29udGV4dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhuZXdfY3R4IGlzIG5vdCBzZXRfY3R4LCAnZGlkIG5vdCBjb3B5IHRoZSBjb250ZXh0JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldF9jdHggaXMgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfY3R4LCBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9jdHgucHJlYywgbmV3X2N0eC5wcmVjLCAnZGlkIG5vdCBzZXQgY29ycmVjdCBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuZXdfY3R4LCBzZXRfY3R4LCAnZGlkIG5vdCBjb3B5IHRoZSBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZXRfY3R4LCBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCiAKIGNsYXNzIENvbnRleHRGbGFncyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmxhZ3NfaXJyZWxldmFudChzZWxmKToKQEAgLTE1NTksMjAgKzIyNjIsMTYgQEAKICAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiBleHRyYV9mbGFnczoKICAgICAgICAgICAgICAgICAgICAgaWYgZmxhZyBub3QgaW4gZXhwZWN0ZWRfZmxhZ3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9mbGFncy5hcHBlbmQoZmxhZykKLSAgICAgICAgICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9mbGFncy5zb3J0KCkKIAogICAgICAgICAgICAgICAgICMgZmxhZ3Mgd2UgYWN0dWFsbHkgZ290CiAgICAgICAgICAgICAgICAgbmV3X2ZsYWdzID0gW2sgZm9yIGssdiBpbiBjb250ZXh0LmZsYWdzLml0ZW1zKCkgaWYgdl0KLSAgICAgICAgICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgICAgICAgICBuZXdfZmxhZ3Muc29ydCgpCiAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgbmV3X2FucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRpb24gcHJvZHVjZXMgZGlmZmVyZW50IGFuc3dlcnMgZGVwZW5kaW5nIG9uIGZsYWdzIHNldDogIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMsIGdvdCAlcy4iICUgKGFucywgbmV3X2FucykpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfZmxhZ3MsIGV4cGVjdGVkX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdGlvbiByYWlzZXMgZGlmZmVyZW50IGZsYWdzIGRlcGVuZGluZyBvbiBmbGFncyBzZXQ6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVzLCBnb3QgJXMiICUgKGV4cGVjdGVkX2ZsYWdzLCBuZXdfZmxhZ3MpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChuZXdfZmxhZ3MsIGV4cGVjdGVkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRpb24gcmFpc2VzIGRpZmZlcmVudCBmbGFncyBkZXBlbmRpbmcgb24gZmxhZ3Mgc2V0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJSAoZXhwZWN0ZWRfZmxhZ3MsIG5ld19mbGFncykpCiAKIGRlZiB0ZXN0X21haW4oYXJpdGg9RmFsc2UsIHZlcmJvc2U9Tm9uZSwgdG9kb190ZXN0cz1Ob25lLCBkZWJ1Zz1Ob25lKToKICAgICAiIiIgRXhlY3V0ZSB0aGUgdGVzdHMuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQppbmRleCA3YWQyMzkyLi5hNTI0YWQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKQEAgLTI0LDIxICsyNCwyMSBAQAogICAgICAgICBkMVsxM10KICAgICAgICAgZDFbMTRdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIHsxMjogWzQyLCAyNF0sIDEzOiBbXSwgMTQ6IFtdfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQxWzEyXSBpcyBub3QgZDFbMTNdIGlzIG5vdCBkMVsxNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsxMl0gaXMgbm90IGQxWzEzXSBpcyBub3QgZDFbMTRdKQogICAgICAgICBkMiA9IGRlZmF1bHRkaWN0KGxpc3QsIGZvbz0xLCBiYXI9MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGxpc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIHsiZm9vIjogMSwgImJhciI6IDJ9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJmb28iXSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsiYmFyIl0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbNDJdLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28iIGluIGQyKQotICAgICAgICBzZWxmLmFzc2VydF8oImZvbyIgaW4gZDIua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydF8oImJhciIgaW4gZDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYmFyIiBpbiBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyg0MiBpbiBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKDQyIGluIGQyLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDEyIG5vdCBpbiBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKDEyIG5vdCBpbiBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJiYXIiLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNDIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKDQyLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEyLCBkMi5rZXlzKCkpCiAgICAgICAgIGQyLmRlZmF1bHRfZmFjdG9yeSA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIE5vbmUpCiAgICAgICAgIHRyeToKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQyKSwgImRlZmF1bHRkaWN0KDx0eXBlICdpbnQnPiwgezEyOiA0Mn0pIikKICAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gNDMKICAgICAgICAgZDMgPSBkZWZhdWx0ZGljdChmb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkMy5kZWZhdWx0X2ZhY3RvcnkgaXMgZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDMuZGVmYXVsdF9mYWN0b3J5IGlzIGZvbykKICAgICAgICAgZDNbMTNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkMyksICJkZWZhdWx0ZGljdCglcywgezEzOiA0M30pIiAlIHJlcHIoZm9vKSkKIApAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIGQyID0gY29weS5kZWVwY29weShkMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGZvb2JhcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkMVsxXSBpcyBub3QgZDJbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsxXSBpcyBub3QgZDJbMV0pCiAgICAgICAgIGQxLmRlZmF1bHRfZmFjdG9yeSA9IGxpc3QKICAgICAgICAgZDIgPSBjb3B5LmRlZXBjb3B5KGQxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgbGlzdCkKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgICAgZGVmIF9mYWN0b3J5KHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBkID0gc3ViKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcHIoZCkuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICJkZWZhdWx0ZGljdCg8Ym91bmQgbWV0aG9kIHN1Yi5fZmFjdG9yeSBvZiBkZWZhdWx0ZGljdCguLi4iKSkKIAogICAgICAgICAjIE5PVEU6IHByaW50aW5nIGEgc3ViY2xhc3Mgb2YgYSBidWlsdGluIHR5cGUgZG9lcyBub3QgY2FsbCBpdHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CmluZGV4IDU1ODg4ZDAuLmEwZDMwZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQpAQCAtNiw3ICs2LDYgQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKIGltcG9ydCByYW5kb20KLWltcG9ydCBvcwogCiBCSUcgPSAxMDAwMDAKIApAQCAtNTAsNyArNDksOSBAQAogICAgIGRlZiB0ZXN0X21heGxlbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVxdWUsICdhYmMnLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVxdWUsICdhYmMnLCAtMikKLSAgICAgICAgZCA9IGRlcXVlKHJhbmdlKDEwKSwgbWF4bGVuPTMpCisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMCkpCisgICAgICAgIGQgPSBkZXF1ZShpdCwgbWF4bGVuPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICdkZXF1ZShbNywgOCwgOV0sIG1heGxlbj0zKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNywgMTApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKHJhbmdlKDEwKSwgMykpCkBAIC04Nyw2ICs4OCw2NCBAQAogICAgICAgICAgICAgZm8uY2xvc2UoKQogICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCisgICAgZGVmIHRlc3RfbWF4bGVuX3plcm8oc2VsZik6CisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMDApKQorICAgICAgICBkZXF1ZShpdCwgbWF4bGVuPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQorCisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMDApKQorICAgICAgICBkID0gZGVxdWUobWF4bGVuPTApCisgICAgICAgIGQuZXh0ZW5kKGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKworICAgICAgICBpdCA9IGl0ZXIocmFuZ2UoMTAwKSkKKyAgICAgICAgZCA9IGRlcXVlKG1heGxlbj0wKQorICAgICAgICBkLmV4dGVuZGxlZnQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQorCisgICAgZGVmIHRlc3RfbWF4bGVuX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXF1ZSgpLm1heGxlbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXF1ZSgnYWJjJykubWF4bGVuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCdhYmMnLCBtYXhsZW49NCkubWF4bGVuLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCdhYmMnLCBtYXhsZW49MikubWF4bGVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCdhYmMnLCBtYXhsZW49MCkubWF4bGVuLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZSgnYWJjJykKKyAgICAgICAgICAgIGQubWF4bGVuID0gMTAKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJycsICdhYnJhY2FkYWJyYScsICdzaW1zYWxhYmltJyo1MDArJ2FiYycpOgorICAgICAgICAgICAgcyA9IGxpc3QocykKKyAgICAgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICAgICAgZm9yIGxldHRlciBpbiAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChsZXR0ZXIpLCBkLmNvdW50KGxldHRlciksIChzLCBkLCBsZXR0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY291bnQpICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3VudCwgMSwgMikgIyB0b28gbWFueSBhcmdzCisgICAgICAgIGNsYXNzIEJhZENvbXBhcmU6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBBcml0aG1ldGljRXJyb3IKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCBCYWRDb21wYXJlKCksIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcml0aG1ldGljRXJyb3IsIGQuY291bnQsIDIpCisgICAgICAgIGQgPSBkZXF1ZShbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyaXRobWV0aWNFcnJvciwgZC5jb3VudCwgQmFkQ29tcGFyZSgpKQorICAgICAgICBjbGFzcyBNdXRhdGluZ0NvbXBhcmU6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmQucG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBtID0gTXV0YXRpbmdDb21wYXJlKCkKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCAzLCBtLCA0LCA1XSkKKyAgICAgICAgbS5kID0gZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGQuY291bnQsIDMpCisKKyAgICAgICAgIyB0ZXN0IGlzc3VlMTEwMDQKKyAgICAgICAgIyBibG9jayBhZHZhbmNlIGZhaWxlZCBhZnRlciByb3RhdGlvbiBhbGlnbmVkIGVsZW1lbnRzIG9uIHJpZ2h0IHNpZGUgb2YgYmxvY2sKKyAgICAgICAgZCA9IGRlcXVlKFtOb25lXSoxNikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGQpKToKKyAgICAgICAgICAgIGQucm90YXRlKC0xKQorICAgICAgICBkLnJvdGF0ZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY291bnQoMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3VudChOb25lKSwgMTYpCisKICAgICBkZWYgdGVzdF9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZCA9IGRlcXVlKCd4YWJjJyk7IGQucG9wbGVmdCgpCiAgICAgICAgIGZvciBlIGluIFtkLCBkZXF1ZSgnYWJjJyksIGRlcXVlKCdhYicpLCBkZXF1ZSgpLCBsaXN0KGQpXToKQEAgLTE3MiwxMSArMjMxLDIzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbi1pKQogICAgICAgICAgICAgaiA9IHJhbmRvbS5yYW5kcmFuZ2UoLWxlbihkKSwgbGVuKGQpKQogICAgICAgICAgICAgdmFsID0gZFtqXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIGQpCiAgICAgICAgICAgICBkZWwgZFtqXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbCBub3QgaW4gZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odmFsLCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKIAorICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIG4gPSA1MDAgICAgICAgICAjIE8obioqMikgdGVzdCwgZG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UobildCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgZCA9IGRlcXVlKGRhdGFbOmldKQorICAgICAgICAgICAgciA9IGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QocmV2ZXJzZWQoZGF0YVs6aV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMociwgTm9uZSkKKyAgICAgICAgICAgIGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGRhdGFbOmldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucmV2ZXJzZSwgMSkgICAgICAgICAgIyBBcml0eSBpcyB6ZXJvCisKICAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CiAgICAgICAgIHMgPSB0dXBsZSgnYWJjZGUnKQogICAgICAgICBuID0gbGVuKHMpCkBAIC0yNzUsNyArMzQ2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBkLnJlbW92ZSwgJ2MnKQogICAgICAgICBmb3IgeCwgeSBpbiB6aXAoZCwgZSk6CiAgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IG9yaWdpbmFsIG9yZGVyIGFuZCB2YWx1ZXMgYXJlIHJldGFpbmVkLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHkpCiAKICAgICAgICAgIyBIYW5kbGUgZXZpbCBtdXRhdG9yCiAgICAgICAgIGZvciBtYXRjaCBpbiAoVHJ1ZSwgRmFsc2UpOgpAQCAtMjg5LDcgKzM2MCw3IEBACiAgICAgICAgIGUgPSBldmFsKHJlcHIoZCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKICAgICAgICAgZC5hcHBlbmQoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcuLi4nIGluIHJlcHIoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy4uLicsIHJlcHIoZCkpCiAKICAgICBkZWYgdGVzdF9wcmludChzZWxmKToKICAgICAgICAgZCA9IGRlcXVlKHhyYW5nZSgyMDApKQpAQCAtNDQ0LDcgKzUxNSw3IEBACiAgICAgICAgICAgICBvYmoueCA9IGl0ZXIoY29udGFpbmVyKQogICAgICAgICAgICAgZGVsIG9iaiwgY29udGFpbmVyCiAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCiAKIGNsYXNzIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggNTVjNTI2Ni4uYzQ4MmNhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC02Nyw4ICs2Nyw5IEBACiAgICAgICAgICMgRmluZCBtZXRob2QgaW4gcGFyZW50IGNsYXNzCiAgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CiAgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0oYSksIHJlcykKICAgICAgICAgYm0gPSBnZXRhdHRyKGEsIG1ldGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm0oKSwgcmVzKQpAQCAtODcsNyArODgsOSBAQAogICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQogICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgogICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobShhLCBiKSwgcmVzKQogICAgICAgICBibSA9IGdldGF0dHIoYSwgbWV0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibShiKSwgcmVzKQpAQCAtOTksNyArMTAyLDkgQEAKICAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKICAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKICAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0oYSwgYiwgYyksIHJlcykKICAgICAgICAgYm0gPSBnZXRhdHRyKGEsIG1ldGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm0oYiwgYyksIHJlcykKQEAgLTExMiw3ICsxMTcsOSBAQAogICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQogICAgICAgICB3aGlsZSBtZXRoIG5vdCBpbiB0Ll9fZGljdF9fOgogICAgICAgICAgICAgdCA9IHQuX19iYXNlc19fWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCiAgICAgICAgIGRbJ2EnXSA9IGRlZXBjb3B5KGEpCiAgICAgICAgIG0oZFsnYSddLCBiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgcmVzKQpAQCAtMTI5LDcgKzEzNiw5IEBACiAgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCiAgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CiAgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCB0Ll9fZGljdF9fW21ldGhdKQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKICAgICAgICAgZFsnYSddID0gZGVlcGNvcHkoYSkKICAgICAgICAgbShkWydhJ10sIGIsIGMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCkBAIC0xNDYsNyArMTU1LDkgQEAKICAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKICAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQogICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgICMgaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMgKGUuZy4gUHlQeSksICdtJyBjYW4gYmUgYSByZWd1bGFyIHVuYm91bmQKKyAgICAgICAgIyBtZXRob2Qgb2JqZWN0OyB0aGUgZ2V0YXR0cigpIGJlbG93IG9idGFpbnMgaXRzIHVuZGVybHlpbmcgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtLCAnaW1fZnVuYycsIG0pLCB0Ll9fZGljdF9fW21ldGhdKQogICAgICAgICBkaWN0aW9uYXJ5WydhJ10gPSBkZWVwY29weShhKQogICAgICAgICBtKGRpY3Rpb25hcnlbJ2EnXSwgYiwgYywgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0aW9uYXJ5WydhJ10sIHJlcykKQEAgLTE3NCw3ICsxODUsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgZGljdCBvcGVyYXRpb25zLi4uCi0gICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyfSwgezI6MX0sIC0xLCAiY21wKGEsYikiLCAiX19jbXBfXyIpCisgICAgICAgIGlmIGhhc2F0dHIoZGljdCwgJ19fY21wX18nKTogICAjIFB5UHkgaGFzIG9ubHkgcmljaCBjb21wYXJpc29uIG9uIGRpY3RzCisgICAgICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6Mn0sIHsyOjF9LCAtMSwgImNtcChhLGIpIiwgIl9fY21wX18iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjJ9LCB7MjoxfSwgVHJ1ZSwgImEgPCBiIiwgIl9fbHRfXyIpCiAgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyLDM6NH0sIDEsIDEsICJiIGluIGEiLCAiX19jb250YWluc19fIikKICAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjIsMzo0fSwgMiwgMCwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQogICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6MiwzOjR9LCAxLCAyLCAiYVtiXSIsICJfX2dldGl0ZW1fXyIpCkBAIC0yMzcsNyArMjUxLDYgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm90SW1wbGVtZW50ZWQgc2hvdWxkIGhhdmUgY2F1c2VkIFR5cGVFcnJvciIpCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgQyhzeXMubWF4aW50KzEpCiAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgpAQCAtMjg1LDYgKzI5OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIjIzNC41IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnByZWMsIDEyKQogCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCiAgICAgZGVmIHRlc3Rfc3BhbV9saXN0cyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNwYW1saXN0IG9wZXJhdGlvbnMuLi4KICAgICAgICAgaW1wb3J0IGNvcHksIHh4c3VidHlwZSBhcyBzcGFtCkBAIC0zMjgsNiArMzQyLDcgQEAKICAgICAgICAgYS5zZXRzdGF0ZSg0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDQyKQogCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCiAgICAgZGVmIHRlc3Rfc3BhbV9kaWN0cyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNwYW1kaWN0IG9wZXJhdGlvbnMuLi4KICAgICAgICAgaW1wb3J0IGNvcHksIHh4c3VidHlwZSBhcyBzcGFtCkBAIC0zODMsMTIgKzM5OCwxMiBAQAogCiAgICAgZGVmIHRlc3RfcHl0aG9uX2RpY3RzKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgUHl0aG9uIHN1YmNsYXNzIG9mIGRpY3QuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MoZGljdCwgZGljdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHt9LCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZGljdCwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh7fSwgZGljdCkKICAgICAgICAgZCA9IGRpY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHt9KQotICAgICAgICBzZWxmLmFzc2VydF8oZC5fX2NsYXNzX18gaXMgZGljdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZCwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLl9fY2xhc3NfXyBpcyBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKICAgICAgICAgY2xhc3MgQyhkaWN0KToKICAgICAgICAgICAgIHN0YXRlID0gLTEKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmX2xvY2FsLCAqYSwgKiprdyk6CkBAIC00MDEsMTMgKzQxNiwxMyBAQAogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KGtleSwgMCkKICAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmX2xvY2FsLCBrZXksIHZhbHVlKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShrZXksIHR5cGUoMCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHR5cGUoMCkpCiAgICAgICAgICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmX2xvY2FsLCBrZXksIHZhbHVlKQogICAgICAgICAgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKICAgICAgICAgICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZQotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhDLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgZGljdCkpCiAgICAgICAgIGExID0gQygxMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMS5zdGF0ZSwgMTIpCiAgICAgICAgIGEyID0gQyhmb289MSwgYmFyPTIpCkBAIC01MDEsNyArNTE2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gNDIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm5hbWUsICdDJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmJhc2VzLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdzcGFtJyBpbiBDLmRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW0nLCBDLmRpY3QpCiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNwYW0oKSwgNDIpCiAKQEAgLTU2OCw3ICs1ODMsNyBAQAogICAgICAgICAgICAgZGVmIF9zZXRfeChzZWxmLCB4KToKICAgICAgICAgICAgICAgICBzZWxmLl9feCA9IC14CiAgICAgICAgIGEgPSBBKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKGEsICJ4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihhLCAieCIpKQogICAgICAgICBhLnggPSAxMgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fQV9feCwgLTEyKQpAQCAtNjI4LDcgKzY0Myw2IEBACiAgICAgZGVmIHRlc3RfbW9kdWxlX3N1YmNsYXNzZXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBQeXRob24gc3ViY2xhc3Mgb2YgbW9kdWxlLi4uCiAgICAgICAgIGxvZyA9IFtdCi0gICAgICAgIGltcG9ydCB0eXBlcywgc3lzCiAgICAgICAgIE1UID0gdHlwZShzeXMpCiAgICAgICAgIGNsYXNzIE1NKE1UKToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKQEAgLTg4Myw4ICs4OTcsMTEgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjYWxsYWJsZSgqYXJncykKICAgICAgICAgICAgIGV4Y2VwdCBleGMsIG1zZzoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc3RyKG1zZykuc3RhcnRzd2l0aChleHBlY3RlZCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTWVzc2FnZSAlciwgZXhwZWN0ZWQgJXIiICUgKHN0cihtc2cpLCBleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgIyB0aGUgZXhhY3QgbXNnIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGFuIGltcGwgZGV0YWlsCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlsKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIobXNnKS5zdGFydHN3aXRoKGV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTWVzc2FnZSAlciwgZXhwZWN0ZWQgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG1zZyksIGV4cGVjdGVkKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCAlcyIgJSBleGMpCiAKQEAgLTEwNzcsNiArMTA5NCw3IEBACiAgICAgICAgIHguYyA9IENvdW50ZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMykKICAgICAgICAgZGVsIHgKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMCkKICAgICAgICAgY2xhc3MgRChDKToKICAgICAgICAgICAgIHBhc3MKQEAgLTEwODUsNiArMTEwMyw3IEBACiAgICAgICAgIHgueiA9IENvdW50ZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMikKICAgICAgICAgZGVsIHgKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMCkKICAgICAgICAgY2xhc3MgRShEKToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnZSddCkBAIC0xMDk0LDMyICsxMTEzLDMzIEBACiAgICAgICAgIHguZSA9IENvdW50ZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMykKICAgICAgICAgZGVsIHgKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMCkKIAogICAgICAgICAjIFRlc3QgY3ljbGljYWwgbGVha3MgW1NGIGJ1ZyA1MTk2MjFdCiAgICAgICAgIGNsYXNzIEYob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYScsICdiJ10KLSAgICAgICAgbG9nID0gW10KICAgICAgICAgcyA9IEYoKQogICAgICAgICBzLmEgPSBbQ291bnRlZCgpLCBzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMSkKICAgICAgICAgcyA9IE5vbmUKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQogCiAgICAgICAgICMgVGVzdCBsb29rdXAgbGVha3MgW1NGIGJ1ZyA1NzI1NjddCi0gICAgICAgIGltcG9ydCBzeXMsZ2MKLSAgICAgICAgY2xhc3MgRyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZwotICAgICAgICBnID0gRygpCi0gICAgICAgIG9yaWdfb2JqZWN0cyA9IGxlbihnYy5nZXRfb2JqZWN0cygpKQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgotICAgICAgICAgICAgZz09ZwotICAgICAgICBuZXdfb2JqZWN0cyA9IGxlbihnYy5nZXRfb2JqZWN0cygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfb2JqZWN0cywgbmV3X29iamVjdHMpCisgICAgICAgIGltcG9ydCBnYworICAgICAgICBpZiBoYXNhdHRyKGdjLCAnZ2V0X29iamVjdHMnKToKKyAgICAgICAgICAgIGNsYXNzIEcob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgICAgIGcgPSBHKCkKKyAgICAgICAgICAgIG9yaWdfb2JqZWN0cyA9IGxlbihnYy5nZXRfb2JqZWN0cygpKQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBnPT1nCisgICAgICAgICAgICBuZXdfb2JqZWN0cyA9IGxlbihnYy5nZXRfb2JqZWN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnX29iamVjdHMsIG5ld19vYmplY3RzKQorCiAgICAgICAgIGNsYXNzIEgob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYScsICdiJ10KICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTExMzUsMTkgKzExNTUsMTUgQEAKIAogICAgICAgICBjbGFzcyBYKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSAiYSIKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIGRlbCBYKCkuYQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCiAKICAgICBkZWYgdGVzdF9zbG90c19zcGVjaWFsKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgX19kaWN0X18gYW5kIF9fd2Vha3JlZl9fIGluIF9fc2xvdHNfXy4uLgogICAgICAgICBjbGFzcyBEKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fZGljdF9fIl0KICAgICAgICAgYSA9IEQoKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKICAgICAgICAgYS5mb28gPSA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsiZm9vIjogNDJ9KQpAQCAtMTE1NSw3ICsxMTcxLDcgQEAKICAgICAgICAgY2xhc3MgVyhvYmplY3QpOgogICAgICAgICAgICAgX19zbG90c19fID0gWyJfX3dlYWtyZWZfXyJdCiAgICAgICAgIGEgPSBXKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGEuZm9vID0gNDIKQEAgLTExNjcsMTYgKzExODMsMTYgQEAKICAgICAgICAgY2xhc3MgQzEoVywgRCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQogICAgICAgICBhID0gQzEoKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihhLCAiX19kaWN0X18iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX2RpY3RfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKICAgICAgICAgYS5mb28gPSA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsiZm9vIjogNDJ9KQogCiAgICAgICAgIGNsYXNzIEMyKEQsIFcpOgogICAgICAgICAgICAgX19zbG90c19fID0gW10KICAgICAgICAgYSA9IEMyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCiAgICAgICAgIGEuZm9vID0gNDIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZGljdF9fLCB7ImZvbyI6IDQyfSkKIApAQCAtMTE5Myw3ICsxMjA5LDcgQEAKICAgICAgICAgTXlBQkMucmVnaXN0ZXIoVW5yZWxhdGVkKQogCiAgICAgICAgIHUgPSBVbnJlbGF0ZWQoKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh1LCBNeUFCQykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1LCBNeUFCQykKIAogICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE15QUJDLmEuX19zZXRfXywgdSwgMykKQEAgLTEzNzYsMTMgKzEzOTIsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1cGVyKEQsRCkuZ29vKCksIChELCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRCxkKS5nb28oKSwgKEQsKSkKIAotICAgICAgICAjIFZlcmlmeSB0aGF0IGFyZ3VtZW50IGlzIGNoZWNrZWQgZm9yIGNhbGxhYmlsaXR5IChTRiBidWcgNzUzNDUxKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbGFzc21ldGhvZCgxKS5fX2dldF9fKDEpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImNsYXNzbWV0aG9kIHNob3VsZCBjaGVjayBmb3IgY2FsbGFiaWxpdHkiKQorICAgICAgICAjIFZlcmlmeSB0aGF0IGEgbm9uLWNhbGxhYmxlIHdpbGwgcmFpc2UKKyAgICAgICAgbWV0aCA9IGNsYXNzbWV0aG9kKDEpLl9fZ2V0X18oMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgY2xhc3NtZXRob2QoKSBkb2Vzbid0IGFsbG93IGtleXdvcmQgYXJncwogICAgICAgICB0cnk6CkBAIC0xMzkyLDYgKzE0MDQsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjbGFzc21ldGhvZCBzaG91bGRuJ3QgYWNjZXB0IGtleXdvcmQgYXJncyIpCiAKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKICAgICBkZWYgdGVzdF9jbGFzc21ldGhvZHNfaW5fYyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIEMtYmFzZWQgY2xhc3MgbWV0aG9kcy4uLgogICAgICAgICBpbXBvcnQgeHhzdWJ0eXBlIGFzIHNwYW0KQEAgLTE0MjMsNiArMTQzNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28oMSksIChkLCAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmZvbyhkLCAxKSwgKGQsIDEpKQogCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCiAgICAgZGVmIHRlc3Rfc3RhdGljbWV0aG9kc19pbl9jKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgQy1iYXNlZCBzdGF0aWMgbWV0aG9kcy4uLgogICAgICAgICBpbXBvcnQgeHhzdWJ0eXBlIGFzIHNwYW0KQEAgLTE0NTYsNyArMTQ3MCw3IEBACiAgICAgICAgIGNsYXNzIEU6ICMgKm5vdCogc3ViY2xhc3NpbmcgZnJvbSBDCiAgICAgICAgICAgICBmb28gPSBDLmZvbwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mb28sIEMuZm9vKSAjIGkuZS4sIHVuYm91bmQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcHIoQy5mb28uX19nZXRfXyhDKCkpKS5zdGFydHN3aXRoKCI8Ym91bmQgbWV0aG9kICIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihDLmZvby5fX2dldF9fKEMoKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCiAKICAgICBkZWYgdGVzdF9jb21wYXR0cihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGNvbXB1dGVkIGF0dHJpYnV0ZXMuLi4KQEAgLTE1MzksNiArMTU1MywxNCBAQAogICAgICAgICAgICAgICAgIGNsYXNzIF9fbWV0YWNsYXNzX18odHlwZSk6CiAgICAgICAgICAgICAgICAgICAgIGRlZiBtcm8oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NlbGYsIGRpY3QsIG9iamVjdF0KKyAgICAgICAgICAgICMgSW4gQ1B5dGhvbiwgdGhlIGNsYXNzIGNyZWF0aW9uIGFib3ZlIGFscmVhZHkgcmFpc2VzCisgICAgICAgICAgICAjIFR5cGVFcnJvciwgYXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgdGhlIGZhY3QgdGhhdAorICAgICAgICAgICAgIyBpbnN0YW5jZXMgb2YgWCB3b3VsZCBzZWdmYXVsdCBpdC4gIEluIG90aGVyIFB5dGhvbgorICAgICAgICAgICAgIyBpbXBsZW1lbnRhdGlvbnMgaXQgd291bGQgYmUgb2sgdG8gbGV0IHRoZSBjbGFzcyBYCisgICAgICAgICAgICAjIGJlIGNyZWF0ZWQsIGJ1dCBpbnN0ZWFkIGdldCBhIGNsZWFuIFR5cGVFcnJvciBvbiB0aGUKKyAgICAgICAgICAgICMgX19zZXRpdGVtX18gYmVsb3cuCisgICAgICAgICAgICB4ID0gb2JqZWN0Ll9fbmV3X18oWCkKKyAgICAgICAgICAgIHhbNV0gPSA2CiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CkBAIC0xNjM5LDcgKzE2NjEsMTEyIEBACiAgICAgICAgIGNsYXNzIEUob2JqZWN0KToKICAgICAgICAgICAgIGZvbyA9IEMuZm9vCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLmZvbywgQy5mb28pICMgaS5lLiwgdW5ib3VuZAotICAgICAgICBzZWxmLmFzc2VydF8ocmVwcihDLmZvby5fX2dldF9fKEMoMSkpKS5zdGFydHN3aXRoKCI8Ym91bmQgbWV0aG9kICIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihDLmZvby5fX2dldF9fKEMoMSkpKS5zdGFydHN3aXRoKCI8Ym91bmQgbWV0aG9kICIpKQorCisgICAgZGVmIHRlc3Rfc3BlY2lhbF9tZXRob2RfbG9va3VwKHNlbGYpOgorICAgICAgICAjIFRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIGJ5cGFzc2VzIF9fZ2V0YXR0cl9fIGFuZAorICAgICAgICAjIF9fZ2V0YXR0cmlidXRlX18sIGJ1dCB0aGV5IHN0aWxsIGNhbiBiZSBkZXNjcmlwdG9ycy4KKworICAgICAgICBkZWYgcnVuX2NvbnRleHQobWFuYWdlcik6CisgICAgICAgICAgICB3aXRoIG1hbmFnZXI6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgaWRlbihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGRlZiBoZWxsbyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiaGVsbG8iCisgICAgICAgIGRlZiBlbXB0eV9zZXEoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgZGVmIHplcm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBkZWYgY29tcGxleF9udW0oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gMWoKKyAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIGRlZiByZXR1cm5fdHJ1ZShzZWxmLCB0aGluZz1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGRlZiBkb19pc2luc3RhbmNlKG9iaik6CisgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShpbnQsIG9iaikKKyAgICAgICAgZGVmIGRvX2lzc3ViY2xhc3Mob2JqKToKKyAgICAgICAgICAgIHJldHVybiBpc3N1YmNsYXNzKGludCwgb2JqKQorICAgICAgICBkZWYgc3dhbGxvdygqYXJncyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBkb19kaWN0X21pc3NpbmcoY2hlY2tlcik6CisgICAgICAgICAgICBjbGFzcyBEaWN0U3ViKGNoZWNrZXIuX19jbGFzc19fLCBkaWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERpY3RTdWIoKVsiaGkiXSwgNCkKKyAgICAgICAgZGVmIHNvbWVfbnVtYmVyKHNlbGZfLCBrZXkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksICJoaSIpCisgICAgICAgICAgICByZXR1cm4gNAorICAgICAgICBkZWYgZm9ybWF0X2ltcGwoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICByZXR1cm4gImhlbGxvIgorCisgICAgICAgICMgSXQgd291bGQgYmUgbmljZSB0byBoYXZlIGV2ZXJ5IHNwZWNpYWwgbWV0aG9kIHRlc3RlZCBoZXJlLCBidXQgSSdtCisgICAgICAgICMgb25seSBsaXN0aW5nIHRoZSBvbmVzIEkgY2FuIHJlbWVtYmVyIG91dHNpZGUgb2YgdHlwZW9iamVjdC5jLCBzaW5jZSBpdAorICAgICAgICAjIGRvZXMgaXQgcmlnaHQuCisgICAgICAgIHNwZWNpYWxzID0gWworICAgICAgICAgICAgKCJfX3VuaWNvZGVfXyIsIHVuaWNvZGUsIGhlbGxvLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX3JldmVyc2VkX18iLCByZXZlcnNlZCwgZW1wdHlfc2VxLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX2xlbmd0aF9oaW50X18iLCBsaXN0LCB6ZXJvLCBzZXQoKSwKKyAgICAgICAgICAgICB7Il9faXRlcl9fIiA6IGlkZW4sICJuZXh0IiA6IHN0b3B9KSwKKyAgICAgICAgICAgICgiX19zaXplb2ZfXyIsIHN5cy5nZXRzaXplb2YsIHplcm8sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9faW5zdGFuY2VjaGVja19fIiwgZG9faXNpbnN0YW5jZSwgcmV0dXJuX3RydWUsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fbWlzc2luZ19fIiwgZG9fZGljdF9taXNzaW5nLCBzb21lX251bWJlciwKKyAgICAgICAgICAgICBzZXQoKCJfX2NsYXNzX18iLCkpLCB7fSksCisgICAgICAgICAgICAoIl9fc3ViY2xhc3NjaGVja19fIiwgZG9faXNzdWJjbGFzcywgcmV0dXJuX3RydWUsCisgICAgICAgICAgICAgc2V0KCgiX19iYXNlc19fIiwpKSwge30pLAorICAgICAgICAgICAgKCJfX2VudGVyX18iLCBydW5fY29udGV4dCwgaWRlbiwgc2V0KCksIHsiX19leGl0X18iIDogc3dhbGxvd30pLAorICAgICAgICAgICAgKCJfX2V4aXRfXyIsIHJ1bl9jb250ZXh0LCBzd2FsbG93LCBzZXQoKSwgeyJfX2VudGVyX18iIDogaWRlbn0pLAorICAgICAgICAgICAgKCJfX2NvbXBsZXhfXyIsIGNvbXBsZXgsIGNvbXBsZXhfbnVtLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX2Zvcm1hdF9fIiwgZm9ybWF0LCBmb3JtYXRfaW1wbCwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgIF0KKworICAgICAgICBjbGFzcyBDaGVja2VyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0ciwgdGVzdD1zZWxmKToKKyAgICAgICAgICAgICAgICB0ZXN0LmZhaWwoIl9fZ2V0YXR0cl9fIGNhbGxlZCB3aXRoIHswfSIuZm9ybWF0KGF0dHIpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgYXR0ciwgdGVzdD1zZWxmKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyIG5vdCBpbiBvazoKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5mYWlsKCJfX2dldGF0dHJpYnV0ZV9fIGNhbGxlZCB3aXRoIHswfSIuZm9ybWF0KGF0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBhdHRyKQorICAgICAgICBjbGFzcyBTcGVjaWFsRGVzY3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbXBsKToKKyAgICAgICAgICAgICAgICBzZWxmLmltcGwgPSBpbXBsCisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIG93bmVyKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW1wbC5fX2dldF9fKG9iaiwgb3duZXIpCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEVyckRlc2NyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIG93bmVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbgorCisgICAgICAgIGZvciBuYW1lLCBydW5uZXIsIG1ldGhfaW1wbCwgb2ssIGVudiBpbiBzcGVjaWFsczoKKyAgICAgICAgICAgIGNsYXNzIFgoQ2hlY2tlcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZm9yIGF0dHIsIG9iaiBpbiBlbnYuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihYLCBhdHRyLCBvYmopCisgICAgICAgICAgICBzZXRhdHRyKFgsIG5hbWUsIG1ldGhfaW1wbCkKKyAgICAgICAgICAgIHJ1bm5lcihYKCkpCisKKyAgICAgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgICAgICBjbGFzcyBYKENoZWNrZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZvciBhdHRyLCBvYmogaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoWCwgYXR0ciwgb2JqKQorICAgICAgICAgICAgc2V0YXR0cihYLCBuYW1lLCBTcGVjaWFsRGVzY3IobWV0aF9pbXBsKSkKKyAgICAgICAgICAgIHJ1bm5lcihYKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzFdLCBuYW1lKQorCisgICAgICAgICAgICBjbGFzcyBYKENoZWNrZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZvciBhdHRyLCBvYmogaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoWCwgYXR0ciwgb2JqKQorICAgICAgICAgICAgc2V0YXR0cihYLCBuYW1lLCBFcnJEZXNjcigpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJ1bm5lcihYKCkpCisgICAgICAgICAgICBleGNlcHQgTXlFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInswIXJ9IGRpZG4ndCByYWlzZSIuZm9ybWF0KG5hbWUpKQogCiAgICAgZGVmIHRlc3Rfc3BlY2lhbHMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzcGVjaWFsIG9wZXJhdG9ycy4uLgpAQCAtMTY1MiwyMyArMTc3OSwyMyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKICAgICAgICAgYzEgPSBDKCkKICAgICAgICAgYzIgPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBub3QgYzEpICMgV2hhdD8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBub3QgYzEpICMgV2hhdD8KICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChjMSksIGlkKGMyKSkKICAgICAgICAgaGFzaChjMSkKICAgICAgICAgaGFzaChjMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoYzEsIGMyKSwgY21wKGlkKGMxKSwgaWQoYzIpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjMSwgYzEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjMSAhPSBjMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjMSAhPSBjMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBjMSA9PSBjMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxICE9IGMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMxICE9IGMxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMxID09IGMyKQogICAgICAgICAjIE5vdGUgdGhhdCB0aGUgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBzdHIvcmVwciwgYW5kIHRoYXQgdmFyaWVzCiAgICAgICAgICMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB0ZXN0IGlzIHJ1biBzdGFuZGFsb25lIG9yIGZyb20gYSBmcmFtZXdvcmsuCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIoYzEpLmZpbmQoJ0Mgb2JqZWN0IGF0ICcpID49IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoYzEpLmZpbmQoJ0Mgb2JqZWN0IGF0ICcpID49IDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGMxKSwgcmVwcihjMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMSBub3QgaW4gYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIGMxKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBpbiBjMSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxMCBpbiBjMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgYzEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIGMxKQogICAgICAgICAjIFRlc3QgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGR5bmFtaWMgY2xhc3NlcwogICAgICAgICBjbGFzcyBEKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CkBAIC0xNjc2LDIzICsxODAzLDIzIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgogICAgICAgICBkMSA9IEQoKQogICAgICAgICBkMiA9IEQoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG5vdCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBub3QgZDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZDEpLCBpZChkMikpCiAgICAgICAgIGhhc2goZDEpCiAgICAgICAgIGhhc2goZDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGQxLCBkMiksIGNtcChpZChkMSksIGlkKGQyKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIGQxKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQxLCBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBkMSAhPSBkMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBkMSA9PSBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkMSAhPSBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkMSA9PSBkMikKICAgICAgICAgIyBOb3RlIHRoYXQgdGhlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gc3RyL3JlcHIsIGFuZCB0aGF0IHZhcmllcwogICAgICAgICAjIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgdGVzdCBpcyBydW4gc3RhbmRhbG9uZSBvciBmcm9tIGEgZnJhbWV3b3JrLgotICAgICAgICBzZWxmLmFzc2VydF8oc3RyKGQxKS5maW5kKCdEIG9iamVjdCBhdCAnKSA+PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGQxKS5maW5kKCdEIG9iamVjdCBhdCAnKSA+PSAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkMSksIHJlcHIoZDEpKQotICAgICAgICBzZWxmLmFzc2VydF8oLTEgbm90IGluIGQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBkMSkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gZDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMTAgaW4gZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBkMSkKICAgICAgICAgIyBUZXN0IG92ZXJyaWRkZW4gYmVoYXZpb3IgZm9yIHN0YXRpYyBjbGFzc2VzCiAgICAgICAgIGNsYXNzIFByb3h5KG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0xNzE3LDExICsxODQ0LDExIEBACiAgICAgICAgIHAxID0gUHJveHkoMSkKICAgICAgICAgcF8xID0gUHJveHkoLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgbm90IHAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBwMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHAwKSwgaGFzaCgwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMCwgcDApCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDAsIHAxKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHAwICE9IHAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHAwICE9IHAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdCBwMCwgcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwMSksIC0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChwMCwgcDApLCAwKQpAQCAtMTcyOSwxMCArMTg1NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwMCksICJQcm94eTowIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHAwKSwgIlByb3h5KDApIikKICAgICAgICAgcDEwID0gUHJveHkocmFuZ2UoMTApKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKC0xIGluIHAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgcDEwKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaSBpbiBwMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMTAgaW4gcDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBwMTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHAxMCkKICAgICAgICAgIyBUZXN0IG92ZXJyaWRkZW4gYmVoYXZpb3IgZm9yIGR5bmFtaWMgY2xhc3NlcwogICAgICAgICBjbGFzcyBEUHJveHkob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKQEAgLTE3NTcsNyArMTg4NCw3IEBACiAgICAgICAgIHAxID0gRFByb3h5KDEpCiAgICAgICAgIHBfMSA9IERQcm94eSgtMSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBub3QgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgbm90IHAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocDApLCBoYXNoKDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAwLCBwMCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMCwgcDEpCkBAIC0xNzY5LDE1ICsxODk2LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAwKSwgIkRQcm94eTowIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHAwKSwgIkRQcm94eSgwKSIpCiAgICAgICAgIHAxMCA9IERQcm94eShyYW5nZSgxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoLTEgaW4gcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBwMTApCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIGluIHAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxMCBpbiBwMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIHAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgcDEwKQogCiAgICAgICAgICMgU2FmZXR5IHRlc3QgZm9yIF9fY21wX18KICAgICAgICAgZGVmIHVuc2FmZWNtcChhLCBiKToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGEuX19jbGFzc19fLCAiX19jbXBfXyIpOgotICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fY21wX18nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gICAjIHNvbWUgdHlwZXMgZG9uJ3QgaGF2ZSBhIF9fY21wX18gYW55IG1vcmUgKHNvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYW55IG1vcmUpLCBvciBtYXliZSB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZXZlciBoYWQgYSBfX2NtcF9fIGF0IGFsbCwgZS5nLiBpbiBQeVB5CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYS5fX2NsYXNzX18uX19jbXBfXyhhLCBiKQogICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKQEAgLTE3OTMsNyArMTkyMiw4IEBACiAgICAgICAgIHVuc2FmZWNtcCgxLCAxTCkKICAgICAgICAgdW5zYWZlY21wKDFMLCAxKQogCi0gICAgZGVmIHRlc3RfcmVjdXJzaW9ucyhzZWxmKToKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJjdXN0b20gbG9naWMgZm9yIHByaW50aW5nIHRvIHJlYWwgZmlsZSBvYmplY3RzIikKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25zXzEoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyByZWN1cnNpb24gY2hlY2tzIC4uLgogICAgICAgICBjbGFzcyBMZXR0ZXIoc3RyKToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgbGV0dGVyKToKQEAgLTE4MDUsNyArMTkzNSw2IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRVBTJwogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAgICAgICAgICMgc3lzLnN0ZG91dCBuZWVkcyB0byBiZSB0aGUgb3JpZ2luYWwgdG8gdHJpZ2dlciB0aGUgcmVjdXJzaW9uIGJ1ZwotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIHRlc3Rfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzeXMuc3Rkb3V0ID0gdGVzdF9zdXBwb3J0LmdldF9vcmlnaW5hbF9zdGRvdXQoKQogICAgICAgICB0cnk6CkBAIC0xODE4LDYgKzE5NDcsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHRlc3Rfc3Rkb3V0CiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25zXzIoc2VsZik6CiAgICAgICAgICMgQnVnICMxMjAyNTMzLgogICAgICAgICBjbGFzcyBBKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xODM4LDYgKzE5NjgsNyBAQAogICAgICAgICByID0gd2Vha3JlZi5yZWYoYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCksIGMpCiAgICAgICAgIGRlbCBjCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCksIE5vbmUpCiAgICAgICAgIGRlbCByCiAgICAgICAgIGNsYXNzIE5vV2VhayhvYmplY3QpOgpAQCAtMTg0Niw3ICsxOTc3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2Vha3JlZi5yZWYobm8pCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIG1zZzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIobXNnKS5maW5kKCJ3ZWFrIHJlZmVyZW5jZSIpID49IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKG1zZykuZmluZCgid2VhayByZWZlcmVuY2UiKSA+PSAwKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ3ZWFrcmVmLnJlZihubykgc2hvdWxkIGJlIGlsbGVnYWwiKQogICAgICAgICBjbGFzcyBXZWFrKG9iamVjdCk6CkBAIC0xODU1LDYgKzE5ODYsNyBAQAogICAgICAgICByID0gd2Vha3JlZi5yZWYoeWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgeWVzKQogICAgICAgICBkZWwgeWVzCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCksIE5vbmUpCiAgICAgICAgIGRlbCByCiAKQEAgLTE4ODIsMTggKzIwMTQsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJ4IikpCiAKICAgICAgICAgcmF3ID0gQy5fX2RpY3RfX1sneCddCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHJhdywgcHJvcGVydHkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmF3LCBwcm9wZXJ0eSkKIAogICAgICAgICBhdHRycyA9IGRpcihyYXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiX19kb2NfXyIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZmdldCIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZnNldCIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiZmRlbCIgaW4gYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZG9jX18iLCBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZmdldCIsIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmc2V0IiwgYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZkZWwiLCBhdHRycykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5fX2RvY19fLCAiSSdtIHRoZSB4IHByb3BlcnR5LiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyYXcuZmdldCBpcyBDLl9fZGljdF9fWydnZXR4J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyYXcuZnNldCBpcyBDLl9fZGljdF9fWydzZXR4J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyYXcuZmRlbCBpcyBDLl9fZGljdF9fWydkZWx4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZmdldCBpcyBDLl9fZGljdF9fWydnZXR4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZnNldCBpcyBDLl9fZGljdF9fWydzZXR4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZmRlbCBpcyBDLl9fZGljdF9fWydkZWx4J10pCiAKICAgICAgICAgZm9yIGF0dHIgaW4gIl9fZG9jX18iLCAiZmdldCIsICJmc2V0IiwgImZkZWwiOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTkxOCw2ICsyMDUwLDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3IgZnJvbSBiYWQgcHJvcGVydHkiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydGllc19kb2NfYXR0cmliKHNlbGYpOgogICAgICAgICBjbGFzcyBFKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgZ2V0dGVyKHNlbGYpOgogICAgICAgICAgICAgICAgICJnZXR0ZXIgbWV0aG9kIgpAQCAtMTkzMCw2ICsyMDY1LDcgQEAKICAgICAgICAgICAgIHByb3AyID0gcHJvcGVydHkoZnNldD1zZXR0ZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3AyLl9fZG9jX18sIE5vbmUpCiAKKyAgICBkZWYgdGVzdF90ZXN0Y2FwaV9ub19zZWdmYXVsdChzZWxmKToKICAgICAgICAgIyB0aGlzIHNlZ2ZhdWx0ZWQgaW4gMi41YjIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQpAQCAtMTk1NSw3ICsyMDkxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmZvby5fX2RvY19fLCAiaGVsbG8iKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYywgImZvbyIpKQogICAgICAgICBjLmZvbyA9IC00MgotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihjLCAnX2ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihjLCAnX2ZvbycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2ZvbywgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb28sIDQyKQogICAgICAgICBkZWwgYy5mb28KQEAgLTIxMDYsNyArMjI0Miw3IEBACiAKICAgICAgICAgY3N0dWZmID0gWydDZGF0YScsICdDbWV0aG9kJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXyddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKEMpLCBjc3R1ZmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKEMuQ21ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoQy5DbWV0aG9kKSkKIAogICAgICAgICBjID0gQygpICAjIGMuX19kb2NfXyBpcyBhbiBvZGQgdGhpbmcgdG8gc2VlIGhlcmU7IGRpdHRvIGMuX19tb2R1bGVfXy4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYyksIGNzdHVmZikKQEAgLTIxMTQsNyArMjI1MCw3IEBACiAgICAgICAgIGMuY2RhdGEgPSAyCiAgICAgICAgIGMuY21ldGhvZCA9IGxhbWJkYSBzZWxmOiAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKGMpLCBjc3R1ZmYgKyBbJ2NkYXRhJywgJ2NtZXRob2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdpbV9zZWxmJyBpbiBkaXIoYy5DbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihjLkNtZXRob2QpKQogCiAgICAgICAgIGNsYXNzIEEoQyk6CiAgICAgICAgICAgICBBZGF0YSA9IDEKQEAgLTIxMjIsMTAgKzIyNTgsMTAgQEAKIAogICAgICAgICBhc3R1ZmYgPSBbJ0FkYXRhJywgJ0FtZXRob2QnXSArIGNzdHVmZgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihBKSwgYXN0dWZmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihBLkFtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKEEuQW1ldGhvZCkpCiAgICAgICAgIGEgPSBBKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYSksIGFzdHVmZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdpbV9zZWxmJyBpbiBkaXIoYS5BbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihhLkFtZXRob2QpKQogICAgICAgICBhLmFkYXRhID0gNDIKICAgICAgICAgYS5hbWV0aG9kID0gbGFtYmRhIHNlbGY6IDMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoYSksIGFzdHVmZiArIFsnYWRhdGEnLCAnYW1ldGhvZCddKQpAQCAtMjE0NCwxMiArMjI4MCwxMiBAQAogCiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYykpLCBjc3R1ZmYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnaW1fc2VsZicgaW4gZGlyKEMuQ21ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoQy5DbWV0aG9kKSkKIAogICAgICAgICBjLmNkYXRhID0gMgogICAgICAgICBjLmNtZXRob2QgPSBsYW1iZGEgc2VsZjogMAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihjKSksIGNzdHVmZiArIFsnY2RhdGEnLCAnY21ldGhvZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihjLkNtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGMuQ21ldGhvZCkpCiAKICAgICAgICAgY2xhc3MgQShDKToKICAgICAgICAgICAgIEFkYXRhID0gMQpAQCAtMjE1NywxNiArMjI5MywxNSBAQAogCiAgICAgICAgIGFzdHVmZiA9IFsnQWRhdGEnLCAnQW1ldGhvZCddICsgY3N0dWZmCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKEEpKSwgYXN0dWZmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihBLkFtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKEEuQW1ldGhvZCkpCiAgICAgICAgIGEgPSBBKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYSkpLCBhc3R1ZmYpCiAgICAgICAgIGEuYWRhdGEgPSA0MgogICAgICAgICBhLmFtZXRob2QgPSBsYW1iZGEgc2VsZjogMwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihhKSksIGFzdHVmZiArIFsnYWRhdGEnLCAnYW1ldGhvZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2ltX3NlbGYnIGluIGRpcihhLkFtZXRob2QpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGEuQW1ldGhvZCkpCiAKICAgICAgICAgIyBUcnkgYSBtb2R1bGUgc3ViY2xhc3MuCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgY2xhc3MgTSh0eXBlKHN5cykpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBtaW5zdGFuY2UgPSBNKCJtIikKQEAgLTIxOTEsNyArMjMyNiwxMCBAQAogCiAgICAgICAgICMgVHdvIGVzc2VudGlhbGx5IGZlYXR1cmVsZXNzIG9iamVjdHMsIGp1c3QgaW5oZXJpdGluZyBzdHVmZiBmcm9tCiAgICAgICAgICMgb2JqZWN0LgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihOb25lKSwgZGlyKEVsbGlwc2lzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoTm90SW1wbGVtZW50ZWQpLCBkaXIoRWxsaXBzaXMpKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgICMgTm9uZSBkaWZmZXJzIGluIFB5UHk6IGl0IGhhcyBhIF9fbm9uemVyb19fCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihOb25lKSwgZGlyKEVsbGlwc2lzKSkKIAogICAgICAgICAjIE5hc3R5IHRlc3QgY2FzZSBmb3IgcHJveGllZCBvYmplY3RzCiAgICAgICAgIGNsYXNzIFdyYXBwZXIob2JqZWN0KToKQEAgLTIzNDQsMTMgKzI0ODIsMTMgQEAKICAgICAgICAgYSA9IGhleGludCgxMjM0NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCAxMjM0NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoYSksIDEyMzQ1KQotICAgICAgICBzZWxmLmFzc2VydF8oaW50KGEpLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoYSkuX19jbGFzc19fIGlzIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDEyMzQ1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgrYSkuX19jbGFzc19fIGlzIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID4+IDApLl9fY2xhc3NfXyBpcyBpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSA8PCAwKS5fX2NsYXNzX18gaXMgaW50KQotICAgICAgICBzZWxmLmFzc2VydF8oKGhleGludCgwKSA8PCAxMikuX19jbGFzc19fIGlzIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChoZXhpbnQoMCkgPj4gMTIpLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoK2EpLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PiAwKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPDwgMCkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChoZXhpbnQoMCkgPDwgMTIpLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoaGV4aW50KDApID4+IDEyKS5fX2NsYXNzX18gaXMgaW50KQogCiAgICAgICAgIGNsYXNzIG9jdGxvbmcobG9uZyk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQpAQCAtMjM3MCwzNiArMjUwOCwzNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIDEyMzQ1TCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGEpLCAxMjM0NUwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaCgxMjM0NUwpKQotICAgICAgICBzZWxmLmFzc2VydF8obG9uZyhhKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgrYSkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoLWEpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKC1vY3Rsb25nKDApKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhID4+IDApLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgPDwgMCkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAtIDApLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKiAxKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICoqIDEpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgLy8gMSkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoMSAqIGEpLl9fY2xhc3NfXyBpcyBsb25nKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgfCAwKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhIF4gMCkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAmIC0xTCkuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygob2N0bG9uZygwKSA8PCAxMikuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygob2N0bG9uZygwKSA+PiAxMikuX19jbGFzc19fIGlzIGxvbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhYnMob2N0bG9uZygwKSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb25nKGEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCthKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgtYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoLW9jdGxvbmcoMCkpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj4gMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PCAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIC0gMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiogMSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAvLyAxKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgxICogYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSB8IDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgXiAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICYgLTFMKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChvY3Rsb25nKDApIDw8IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChvY3Rsb25nKDApID4+IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhvY3Rsb25nKDApKS5fX2NsYXNzX18gaXMgbG9uZykKIAogICAgICAgICAjIEJlY2F1c2Ugb2N0bG9uZyBvdmVycmlkZXMgX19hZGRfXywgd2UgY2FuJ3QgY2hlY2sgdGhlIGFic2VuY2Ugb2YgKzAKICAgICAgICAgIyBvcHRpbWl6YXRpb25zIHVzaW5nIG9jdGxvbmcuCiAgICAgICAgIGNsYXNzIGxvbmdjbG9uZShsb25nKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IGxvbmdjbG9uZSgxKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKyAwKS5fX2NsYXNzX18gaXMgbG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgwICsgYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSArIDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDAgKyBhKS5fX2NsYXNzX18gaXMgbG9uZykKIAogICAgICAgICAjIENoZWNrIHRoYXQgbmVnYXRpdmUgY2xvbmVzIGRvbid0IHNlZ2ZhdWx0CiAgICAgICAgIGEgPSBsb25nY2xvbmUoLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhhKSwgLTEpICAjIHNlbGYuYXNzZXJ0XyBQeU51bWJlcl9Mb25nKCkgY29waWVzIHRoZSBzaWduIGJpdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoYSksIC0xKSAgIyBzZWxmLmFzc2VydFRydWUgUHlOdW1iZXJfTG9uZygpIGNvcGllcyB0aGUgc2lnbiBiaXQKIAogICAgICAgICBjbGFzcyBwcmVjZmxvYXQoZmxvYXQpOgogICAgICAgICAgICAgX19zbG90c19fID0gWydwcmVjJ10KQEAgLTI0MTEsOSArMjU0OSw5IEBACiAgICAgICAgIGEgPSBwcmVjZmxvYXQoMTIzNDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgMTIzNDUuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChhKSwgMTIzNDUuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZsb2F0KGEpLl9fY2xhc3NfXyBpcyBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsb2F0KGEpLl9fY2xhc3NfXyBpcyBmbG9hdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDEyMzQ1LjApKQotICAgICAgICBzZWxmLmFzc2VydF8oKCthKS5fX2NsYXNzX18gaXMgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoK2EpLl9fY2xhc3NfXyBpcyBmbG9hdCkKIAogICAgICAgICBjbGFzcyBtYWRjb21wbGV4KGNvbXBsZXgpOgogICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpAQCAtMjQ2MSwyMCArMjU5OSwyMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB0KQogICAgICAgICBhID0gbWFkdHVwbGUoKDEsMiwzLDQsNSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoYSksICgxLDIsMyw0LDUpKQotICAgICAgICBzZWxmLmFzc2VydF8odHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goKDEsMiwzLDQsNSkpKQotICAgICAgICBzZWxmLmFzc2VydF8oYVs6XS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAqIDEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICogMCkuX19jbGFzc19fIGlzIHR1cGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKyAoKSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYVs6XS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMCkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKyAoKSkuX19jbGFzc19fIGlzIHR1cGxlKQogICAgICAgICBhID0gbWFkdHVwbGUoKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoYSksICgpKQotICAgICAgICBzZWxmLmFzc2VydF8odHVwbGUoYSkuX19jbGFzc19fIGlzIHR1cGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKyBhKS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoYSAqIDApLl9fY2xhc3NfXyBpcyB0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChhICogMSkuX19jbGFzc19fIGlzIHR1cGxlKQotICAgICAgICBzZWxmLmFzc2VydF8oKGEgKiAyKS5fX2NsYXNzX18gaXMgdHVwbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhWzpdLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR1cGxlKGEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICsgYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAwKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMikuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYVs6XS5fX2NsYXNzX18gaXMgdHVwbGUpCiAKICAgICAgICAgY2xhc3MgbWFkc3RyaW5nKHN0cik6CiAgICAgICAgICAgICBfcmV2ID0gTm9uZQpAQCAtMjQ5Niw1MSArMjYzNCw1MSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzKQogICAgICAgICBzID0gbWFkc3RyaW5nKCIxMjM0NSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMpLCAiMTIzNDUiKQotICAgICAgICBzZWxmLmFzc2VydF8oc3RyKHMpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIocykuX19jbGFzc19fIGlzIHN0cikKIAogICAgICAgICBiYXNlID0gIlx4MDAiICogNQogICAgICAgICBzID0gbWFkc3RyaW5nKGJhc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgYmFzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocyksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIocykuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihzKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocyksIGhhc2goYmFzZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe3M6IDF9W2Jhc2VdLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtiYXNlOiAxfVtzXSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChzICsgIiIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyArICIiKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAiIiwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgiIiArIHMpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIiIgKyBzKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiICsgcywgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChzICogMCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMCkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMCwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygocyAqIDEpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyAqIDEpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyAqIDEsIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygocyAqIDIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyAqIDIpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyAqIDIsIGJhc2UgKyBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oc1s6XS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc1s6XS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOl0sIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzWzA6MF0uX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNbMDowXS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMDowXSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnN0cmlwKCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMubHN0cmlwKCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMubHN0cmlwKCkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxzdHJpcCgpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5yc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5yc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucnN0cmlwKCksIGJhc2UpCiAgICAgICAgIGlkZW50aXR5dGFiID0gJycuam9pbihbY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NildKQotICAgICAgICBzZWxmLmFzc2VydF8ocy50cmFuc2xhdGUoaWRlbnRpdHl0YWIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnRyYW5zbGF0ZShpZGVudGl0eXRhYikuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiwgIngiKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy50cmFuc2xhdGUoaWRlbnRpdHl0YWIsICJ4IikuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiwgIngiKSwgYmFzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiwgIlx4MDAiKSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLnJlcGxhY2UoIngiLCAieCIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnJlcGxhY2UoIngiLCAieCIpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZXBsYWNlKCJ4IiwgIngiKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMubGp1c3QobGVuKHMpKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5sanVzdChsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5sanVzdChsZW4ocykpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5yanVzdChsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnJqdXN0KGxlbihzKSkuX19jbGFzc19fIGlzIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJqdXN0KGxlbihzKSksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzLmNlbnRlcihsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmNlbnRlcihsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jZW50ZXIobGVuKHMpKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMubG93ZXIoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5sb3dlcigpLl9fY2xhc3NfXyBpcyBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5sb3dlcigpLCBiYXNlKQogCiAgICAgICAgIGNsYXNzIG1hZHVuaWNvZGUodW5pY29kZSk6CkBAIC0yNTU5LDQ3ICsyNjk3LDQ3IEBACiAgICAgICAgIGJhc2UgPSB1IjEyMzQ1IgogICAgICAgICB1ID0gbWFkdW5pY29kZShiYXNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUodSksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1bmljb2RlKHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZSh1KS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHUpLCBoYXNoKGJhc2UpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt1OiAxfVtiYXNlXSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YmFzZTogMX1bdV0sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LnN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5zdHJpcCgpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5sc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUubHN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5sc3RyaXAoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUucnN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJzdHJpcCgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucnN0cmlwKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LnJlcGxhY2UodSJ4IiwgdSJ4IikuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJlcGxhY2UodSJ4IiwgdSJ4IikuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yZXBsYWNlKHUieCIsIHUieCIpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5yZXBsYWNlKHUieHkiLCB1Inh5IikuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnJlcGxhY2UodSJ4eSIsIHUieHkiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJlcGxhY2UodSJ4eSIsIHUieHkiKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUuY2VudGVyKGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmNlbnRlcihsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY2VudGVyKGxlbih1KSksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LmxqdXN0KGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmxqdXN0KGxlbih1KSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5sanVzdChsZW4odSkpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5yanVzdChsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5yanVzdChsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmp1c3QobGVuKHUpKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUubG93ZXIoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUubG93ZXIoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Lmxvd2VyKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1LnVwcGVyKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnVwcGVyKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS51cHBlcigpLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odS5jYXBpdGFsaXplKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmNhcGl0YWxpemUoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmNhcGl0YWxpemUoKSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUudGl0bGUoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUudGl0bGUoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnRpdGxlKCksIGJhc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygodSArIHUiIikuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSArIHUiIikuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSArIHUiIiwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCh1IiIgKyB1KS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1IiIgKyB1KS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiIgKyB1LCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKHUgKiAwKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICogMCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSAqIDAsIHUiIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCh1ICogMSkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSAqIDEpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKiAxLCBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8oKHUgKiAyKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICogMikuX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSAqIDIsIGJhc2UgKyBiYXNlKQotICAgICAgICBzZWxmLmFzc2VydF8odVs6XS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVbOl0uX19jbGFzc19fIGlzIHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6XSwgYmFzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVbMDowXS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVbMDowXS5fX2NsYXNzX18gaXMgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzA6MF0sIHUiIikKIAogICAgICAgICBjbGFzcyBzdWJsaXN0KGxpc3QpOgpAQCAtMjcxOCw3ICsyODU2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2Npc3RyKCdvbmUnKV0sIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtjaXN0cigndFdvJyldLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbY2lzdHIoJ1RIckVFJyldLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8oY2lzdHIoJ09OZScpIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY2lzdHIoJ09OZScpLCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGNpc3RyKCd0aHJFRScpKSwgMykKIAogICAgIGRlZiB0ZXN0X2NsYXNzaWNfY29tcGFyaXNvbnMoc2VsZik6CkBAIC0yNzQ1LDEyICsyODgzLDEyIEBACiAgICAgICAgICAgICBjID0gezE6IGMxLCAyOiBjMiwgMzogYzN9CiAgICAgICAgICAgICBmb3IgeCBpbiAxLCAyLCAzOgogICAgICAgICAgICAgICAgIGZvciB5IGluIDEsIDIsIDM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbXAoY1t4XSwgY1t5XSkgPT0gY21wKHgsIHkpLCAieD0lZCwgeT0lZCIgJSAoeCwgeSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbXAoY1t4XSwgY1t5XSkgPT0gY21wKHgsIHkpLCAieD0lZCwgeT0lZCIgJSAoeCwgeSkpCiAgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiAiPCIsICI8PSIsICI9PSIsICIhPSIsICI+IiwgIj49IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiY1t4XSAlcyBjW3ldIiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNtcChjW3hdLCB5KSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNtcCh4LCBjW3ldKSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcChjW3hdLCB5KSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcCh4LCBjW3ldKSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKIAogICAgIGRlZiB0ZXN0X3JpY2hfY29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyByaWNoIGNvbXBhcmlzb25zLi4uCkBAIC0yODIzLDExICsyOTYxLDExIEBACiAgICAgICAgICAgICBmb3IgeCBpbiAxLCAyLCAzOgogICAgICAgICAgICAgICAgIGZvciB5IGluIDEsIDIsIDM6CiAgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiAiPCIsICI8PSIsICI9PSIsICIhPSIsICI+IiwgIj49IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiY1t4XSAlcyBjW3ldIiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCJjW3hdICVzIHkiICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiY1t4XSAlcyB5IiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCJ4ICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgieCAlcyBjW3ldIiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKIAogICAgIGRlZiB0ZXN0X2NvZXJjaW9ucyhzZWxmKToKQEAgLTI4OTMsOSArMzAzMSw5IEBACiAgICAgICAgICAgICBmb3IgY2xzMiBpbiBDLCBELCBFLCBGOgogICAgICAgICAgICAgICAgIHggPSBjbHMoKQogICAgICAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzMgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh4Ll9fY2xhc3NfXyBpcyBjbHMyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMyKQogICAgICAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHguX19jbGFzc19fIGlzIGNscykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5fX2NsYXNzX18gaXMgY2xzKQogICAgICAgICBkZWYgY2FudCh4LCBDKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4Ll9fY2xhc3NfXyA9IEMKQEAgLTI5MDUsNyArMzA0Myw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgJXIuX19jbGFzc19fID0gJXIiICUgKHgsIEMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRlbGF0dHIoeCwgIl9fY2xhc3NfXyIpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGFsbG93IGRlbCAlci5fX2NsYXNzX18iICUgeCkKQEAgLTI5NTcsMTEgKzMwOTUsMTEgQEAKICAgICAgICAgICAgIHggPSBjbHMoKQogICAgICAgICAgICAgeC5hID0gMQogICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBjbHMyCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oeC5fX2NsYXNzX18gaXMgY2xzMiwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMyLAogICAgICAgICAgICAgICAgICAgICJhc3NpZ25pbmcgJXIgYXMgX19jbGFzc19fIGZvciAlciBzaWxlbnRseSBmYWlsZWQiICUgKGNsczIsIHgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDEpCiAgICAgICAgICAgICB4Ll9fY2xhc3NfXyA9IGNscwotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHguX19jbGFzc19fIGlzIGNscywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMsCiAgICAgICAgICAgICAgICAgICAgImFzc2lnbmluZyAlciBhcyBfX2NsYXNzX18gZm9yICVyIHNpbGVudGx5IGZhaWxlZCIgJSAoY2xzLCB4KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAxKQogICAgICAgICBmb3IgY2xzIGluIEcsIEosIEssIEwsIE0sIE4sIFAsIFIsIGxpc3QsIEludDoKQEAgLTMwNDksNiArMzE4NywxNiBAQAogICAgICAgICAgICAgbW9kLl9fZGljdF9fWyJzcGFtIl0gPSAiZWdncyIKIAogICAgICAgICAjIEV4Y2VwdGlvbidzIF9fZGljdF9fIGNhbiBiZSByZXBsYWNlZCwgYnV0IG5vdCBkZWxldGVkCisgICAgICAgICMgKGF0IGxlYXN0IG5vdCBhbnkgbW9yZSB0aGFuIHJlZ3VsYXIgZXhjZXB0aW9uJ3MgX19kaWN0X18gY2FuCisgICAgICAgICMgYmUgZGVsZXRlZDsgb24gQ1B5dGhvbiBpdCBpcyBub3QgdGhlIGNhc2UsIHdoZXJlYXMgb24gUHlQeSB0aGV5CisgICAgICAgICMgY2FuLCBqdXN0IGxpa2UgYW55IG90aGVyIG5ldy1zdHlsZSBpbnN0YW5jZSdzIF9fZGljdF9fLikKKyAgICAgICAgZGVmIGNhbl9kZWxldGVfZGljdChlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgZS5fX2RpY3RfXworICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgY2xhc3MgRXhjZXB0aW9uMShFeGNlcHRpb24sIEJhc2UpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBjbGFzcyBFeGNlcHRpb24yKEJhc2UsIEV4Y2VwdGlvbik6CkBAIC0zMDU3LDEyICszMjA1LDcgQEAKICAgICAgICAgICAgIGUgPSBFeGNlcHRpb25UeXBlKCkKICAgICAgICAgICAgIGUuX19kaWN0X18gPSB7ImEiOiAxfQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDEpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZGVsIGUuX19kaWN0X18KLSAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyJ3MgX19kaWN0X18gY2FuIGJlIGRlbGV0ZWQiICUgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FuX2RlbGV0ZV9kaWN0KGUpLCBjYW5fZGVsZXRlX2RpY3QoVmFsdWVFcnJvcigpKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBhbmQgY29weWluZyBuZXctc3R5bGUgY2xhc3NlcyBhbmQgb2JqZWN0cy4uLgpAQCAtMzEyNiw3ICszMjY5LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKICAgICAgICAgICAgICAgICAgICAgcyA9IHAuZHVtcHMoY2xzLCBiaW4pCiAgICAgICAgICAgICAgICAgICAgIGNsczIgPSBwLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbHMyIGlzIGNscykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsczIgaXMgY2xzKQogCiAgICAgICAgICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQogICAgICAgICAgICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKQEAgLTMxNTYsNyArMzI5OSw3IEBACiAgICAgICAgIGltcG9ydCBjb3B5CiAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgogICAgICAgICAgICAgY2xzMiA9IGNvcHkuZGVlcGNvcHkoY2xzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNsczIgaXMgY2xzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsczIgaXMgY2xzKQogCiAgICAgICAgIGEgPSBDMSgxLCAyKTsgYS5hcHBlbmQoNDIpOyBhLmFwcGVuZCgyNCkKICAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQpAQCAtMzM1NSwxMyArMzQ5OCwxMiBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJkLmZvbyBzaG91bGQgYmUgdW5kZWZpbmVkIG5vdyIpCiAKICAgICAgICAgIyBUZXN0IGEgbmFzdHkgYnVnIGluIHJlY3Vyc2VfZG93bl9zdWJjbGFzc2VzKCkKLSAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgY2xhc3MgQihBKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZGVsIEIKLSAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgQS5fX3NldGl0ZW1fXyA9IGxhbWJkYSAqYTogTm9uZSAjIGNyYXNoCiAKICAgICBkZWYgdGVzdF9idWZmZXJfaW5oZXJpdGFuY2Uoc2VsZik6CkBAIC0zNDUzLDYgKzM1OTUsNyBAQAogICAgICAgICBjID0gQygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLCBbXSkKICAgICAgICAgZGVsIGMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZywgWzFdKQogCiAgICAgICAgIGNsYXNzIEQob2JqZWN0KTogcGFzcwpAQCAtMzU0OCw3ICszNjkxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKG0sICJfX25hbWVfXyIpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIobSwgIl9fZmlsZV9fIiksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihtLCAiZm9vIiksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2RpY3RfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLl9fZGljdF9fKSAgICMgTm9uZSBvciB7fSBhcmUgYm90aCByZWFzb25hYmxlIGFuc3dlcnMKICAgICAgICAgbS5mb28gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2RpY3RfXywgeyJmb28iOiAxfSkKIApAQCAtMzY4MywxNyArMzgyNiwyMyBAQAogICAgICAgICBjID0gQygpCiAgICAgICAgIGMuYXR0ciA9IDQyCiAKLSAgICAgICAgIyBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHdoZXRoZXIgdGhpcyBibG93cyB1cCwgZHVlIHRvIGZsYXdlZAotICAgICAgICAjIEdDIHRyYWNraW5nIGxvZ2ljIGluIHR5cGVvYmplY3QuYydzIGNhbGxfZmluYWxpemVyKCkgKGEgMi4yLjEgYnVnKS4KKyAgICAgICAgIyBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHdoZXRoZXIgdGhpcyBibG93cyB1cCwgZHVlIHRvCisgICAgICAgICMgZmxhd2VkIEdDIHRyYWNraW5nIGxvZ2ljIGluIHR5cGVvYmplY3QuYydzIGNhbGxfZmluYWxpemVyKCkgKGEgMi4yLjEKKyAgICAgICAgIyBidWcpLgogICAgICAgICBkZWwgYwogCiAgICAgICAgICMgSWYgdGhhdCBkaWRuJ3QgYmxvdyB1cCwgaXQncyBhbHNvIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGNsZWFyaW5nCi0gICAgICAgICMgdGhlIGxhc3QgY29udGFpbmVyIHNsb3Qgd29ya3M6ICB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKLSAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbiAiZHVyaW5nIgotICAgICAgICAjIHRoZSBkZWwuCi0gICAgICAgIGRlbCBDLmNvbnRhaW5lclstMV0KKyAgICAgICAgIyB0aGUgbGFzdCBjb250YWluZXIgc2xvdCB3b3JrczogdGhhdCB3aWxsIGF0dGVtcHQgdG8gZGVsZXRlIGMgYWdhaW4sCisgICAgICAgICMgd2hpY2ggd2lsbCBjYXVzZSBjIHRvIGdldCBhcHBlbmRlZCBiYWNrIHRvIHRoZSBjb250YWluZXIgYWdhaW4KKyAgICAgICAgIyAiZHVyaW5nIiB0aGUgZGVsLiAgKE9uIG5vbi1DUHl0aG9uIGltcGxlbWVudGF0aW9ucywgaG93ZXZlciwgX19kZWxfXworICAgICAgICAjIGlzIHR5cGljYWxseSBub3QgY2FsbGVkIGFnYWluLikKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb250YWluZXJbLTFdLmF0dHIsIDQyKQorICAgICAgICBkZWwgQy5jb250YWluZXJbLTFdCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvbnRhaW5lclstMV0uYXR0ciwgNDIpCiAKICAgICAgICAgIyBNYWtlIGMgbW9ydGFsIGFnYWluLCBzbyB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayB3aXRoIC1sIGRvZXNuJ3QgcmVwb3J0CiAgICAgICAgICMgaXQgYXMgYSBsZWFrLgpAQCAtMzcxOSw5ICszODY4LDEwIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNsYXNzIEMoQSxCKSA6CiAgICAgICAgICAgICBfX3Nsb3RzX189KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzaWNzaXplX18sIEIuX19iYXNpY3NpemVfXykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoQywgJ19fZGljdF9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKEMsICdfX3dlYWtyZWZfXycpKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX2Jhc2ljc2l6ZV9fLCBCLl9fYmFzaWNzaXplX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKEMsICdfX2RpY3RfXycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihDLCAnX193ZWFrcmVmX18nKSkKICAgICAgICAgQygpLnggPSAyCiAKICAgICBkZWYgdGVzdF9ybXVsKHNlbGYpOgpAQCAtMzc3NSwzNCArMzkyNSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMyLl9fc3ViY2xhc3Nlc19fKCksIFtEXSkKIAotICAgICAgICAjIHN0dWZmIHRoYXQgc2hvdWxkbid0OgotICAgICAgICBjbGFzcyBMKGxpc3QpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIEwuX19iYXNlc19fID0gKGRpY3QsKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgdHVybiBsaXN0IHN1YmNsYXNzIGludG8gZGljdCBzdWJjbGFzcyIpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGlzdC5fX2Jhc2VzX18gPSAoZGljdCwpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIGFzc2lnbiB0byBsaXN0Ll9fYmFzZXNfXyIpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgRC5fX2Jhc2VzX18gPSAoQzIsIGxpc3QpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3NlcnQgMCwgImJlc3RfYmFzZSBjYWxjdWxhdGlvbiBmb3VuZCB3YW50aW5nIgotCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRlbCBELl9fYmFzZXNfXwotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWxldGUgLl9fYmFzZXNfXyIpCkBAIC0zODcwLDYgKzM5OTUsMzYgQEAKICAgICAgICAgICAgIGlmIHRwIGlzIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odHAuX19iYXNlc19fKSwgMSwgdHApCiAKKyAgICAgICAgY2xhc3MgTChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBMLl9fYmFzZXNfXyA9IChkaWN0LCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IHR1cm4gbGlzdCBzdWJjbGFzcyBpbnRvIGRpY3Qgc3ViY2xhc3MiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpc3QuX19iYXNlc19fID0gKGRpY3QsKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBhc3NpZ24gdG8gbGlzdC5fX2Jhc2VzX18iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEMsIGxpc3QpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgMCwgImJlc3RfYmFzZSBjYWxjdWxhdGlvbiBmb3VuZCB3YW50aW5nIgorCiAKICAgICBkZWYgdGVzdF9tdXRhYmxlX2Jhc2VzX3dpdGhfZmFpbGluZ19tcm8oc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBtdXRhYmxlIGJhc2VzIHdpdGggZmFpbGluZyBtcm8uLi4KQEAgLTQwMTQsNiArNDE2OSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpIC8vIEMoKSwgIkMuX19mbG9vcmRpdl9fIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKCkgLy8gRSgpLCAiQy5fX2Zsb29yZGl2X18iKSAjIFRoaXMgb25lIHdvdWxkIGZhaWwKIAorICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInRlc3RpbmcgYW4gaW50ZXJuYWwga2luZCBvZiBtZXRob2Qgb2JqZWN0IikKICAgICBkZWYgdGVzdF9tZXRoX2NsYXNzX2dldChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIF9fZ2V0X18gbWV0aG9kIG9mIE1FVEhfQ0xBU1MgQyBtZXRob2RzLi4uCiAgICAgICAgICMgRnVsbCBjb3ZlcmFnZSBvZiBkZXNjcm9iamVjdC5jOjpjbGFzc21ldGhvZF9nZXQoKQpAQCAtNDA3MiwyOSArNDIyOCwyOSBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQygpCiAgICAgICAgIHBhID0gUHJveHkoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYSwgQykpICAjIEJhc2VsaW5lCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBhLCBDKSkgIyBUZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAogICAgICAgICAjIFRlc3Qgd2l0aCBhIGNsYXNzaWMgc3ViY2xhc3MKICAgICAgICAgY2xhc3MgRChDKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEQoKQogICAgICAgICBwYSA9IFByb3h5KGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGEsIEMpKSAgIyBCYXNlbGluZQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShwYSwgQykpICMgVGVzdAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKICAgICAgICAgIyBUZXN0IHdpdGggYSBuZXctc3R5bGUgY2xhc3MKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQygpCiAgICAgICAgIHBhID0gUHJveHkoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYSwgQykpICAjIEJhc2VsaW5lCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBhLCBDKSkgIyBUZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAogICAgICAgICAjIFRlc3Qgd2l0aCBhIG5ldy1zdHlsZSBzdWJjbGFzcwogICAgICAgICBjbGFzcyBEKEMpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gRCgpCiAgICAgICAgIHBhID0gUHJveHkoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYSwgQykpICAjIEJhc2VsaW5lCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBhLCBDKSkgIyBUZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhLCBDKSAgIyBCYXNlbGluZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGEsIEMpICMgVGVzdAogCiAgICAgZGVmIHRlc3RfcHJveHlfc3VwZXIoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzdXBlcigpIGZvciBhIHByb3h5IG9iamVjdC4uLgpAQCAtNDE2Miw3ICs0MzE4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpbGVfZmF1bHQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzeXMuc3Rkb3V0IGlzIGNoYW5nZWQgaW4gZ2V0YXR0ci4uLgotICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHRlc3Rfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBjbGFzcyBTdGRvdXRHdWFyZDoKICAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLl9fc3Rkb3V0X18KQEAgLTQxNzIsNiArNDMyOCw4IEBACiAgICAgICAgICAgICBwcmludCAiT29wcyEiCiAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gdGVzdF9zdGRvdXQKIAogICAgIGRlZiB0ZXN0X3ZpY2lvdXNfZGVzY3JpcHRvcl9ub25zZW5zZShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHZpY2lvdXNfZGVzY3JpcHRvcl9ub25zZW5zZS4uLgpAQCAtNDE5OSw3ICs0MzU3LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYXR0ciwgMSkKICAgICAgICAgIyB0aGlzIG1ha2VzIGEgY3Jhc2ggbW9yZSBsaWtlbHk6Ci0gICAgICAgIGltcG9ydCBnYzsgZ2MuY29sbGVjdCgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGMsICdhdHRyJyksIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKQEAgLTQyMjEsMTEgKzQzNzksMTcgQEAKICAgICAgICAgbCA9IFtdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLCBsLl9fYWRkX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLCBbXS5fX2FkZF9fKQotICAgICAgICBzZWxmLmFzc2VydF8obC5fX2FkZF9fICE9IFs1XS5fX2FkZF9fKQotICAgICAgICBzZWxmLmFzc2VydF8obC5fX2FkZF9fICE9IGwuX19tdWxfXykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwuX19hZGRfXy5fX25hbWVfXyA9PSAnX19hZGRfXycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsLl9fYWRkX18uX19zZWxmX18gaXMgbCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwuX19hZGRfXy5fX29iamNsYXNzX18gaXMgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXyAhPSBbNV0uX19hZGRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXyAhPSBsLl9fbXVsX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18uX19uYW1lX18gPT0gJ19fYWRkX18nKQorICAgICAgICBpZiBoYXNhdHRyKGwuX19hZGRfXywgJ19fc2VsZl9fJyk6CisgICAgICAgICAgICAjIENQeXRob24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18uX19zZWxmX18gaXMgbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18uX19vYmpjbGFzc19fIGlzIGxpc3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgW10uX19hZGRfXyBpcyBhIG5vcm1hbCBib3VuZCBtZXRob2QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsLl9fYWRkX18uaW1fc2VsZiBpcyBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5pbV9jbGFzcyBpcyBsaXN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuX19hZGRfXy5fX2RvY19fLCBsaXN0Ll9fYWRkX18uX19kb2NfXykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGFzaChsLl9fYWRkX18pCkBAIC00MjQyLDggKzQ0MDYsNiBAQAogICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIE5vdEltcGxlbWVudGVkLi4uCiAgICAgICAgICMgYWxsIGJpbmFyeSBtZXRob2RzIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiBhIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgaW1wb3J0IHR5cGVzCiAgICAgICAgIGltcG9ydCBvcGVyYXRvcgogCiAgICAgICAgIGRlZiBzcGVjaWFsbWV0aG9kKHNlbGYsIG90aGVyKToKQEAgLTQzMjIsNiArNDQ4NCwzNSBAQAogICAgICAgICBjWzE6Ml0gPSAzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy52YWx1ZSwgMykKIAorICAgIGRlZiB0ZXN0X3NldF9hbmRfbm9fZ2V0KHNlbGYpOgorICAgICAgICAjIFNlZQorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMC1KYW51YXJ5LzA5NTYzNy5odG1sCisgICAgICAgIGNsYXNzIERlc2NyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgICAgIGRlZiBfX3NldF9fKHNlbGYsIG9iaiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIG9iai5fX2RpY3RfX1tzZWxmLm5hbWVdID0gdmFsdWUKKyAgICAgICAgZGVzY3IgPSBEZXNjcigiYSIpCisKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgYSA9IGRlc2NyCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICBzZWxmLmFzc2VydElzKHguYSwgZGVzY3IpCisgICAgICAgIHguYSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCA0MikKKworICAgICAgICAjIEFsc28gY2hlY2sgdHlwZV9nZXRhdHRybyBmb3IgY29ycmVjdG5lc3MuCisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCisgICAgICAgIFguYSA9IDQyCisgICAgICAgIE1ldGEuYSA9IERlc2NyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmEsIDQyKQorCiAgICAgZGVmIHRlc3RfZ2V0YXR0cl9ob29rcyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSA0MjMwCiAKQEAgLTQzNDMsMTEgKzQ1MzQsMTEgQEAKICAgICAgICAgICAgIF9fZ2V0YXR0cl9fID0gZGVzY3IKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgQSgpLCAiYXR0ciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlc2NyLmNvdW50ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzY3IuY291bnRlciwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIEIoKSwgImF0dHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZXNjci5jb3VudGVyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLmNvdW50ZXIsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBDKCksICJhdHRyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVzY3IuY291bnRlciwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5jb3VudGVyLCA0KQogCiAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBjbGFzcyBFdmlsR2V0YXR0cmlidXRlKG9iamVjdCk6CkBAIC00MzYyLDYgKzQ1NTMsMTcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgRXZpbEdldGF0dHJpYnV0ZSgpLCAiYXR0ciIpCiAKKyAgICBkZWYgdGVzdF9hYnN0cmFjdG1ldGhvZHMoc2VsZik6CisgICAgICAgICMgdHlwZSBwcmV0ZW5kcyBub3QgdG8gaGF2ZSBfX2Fic3RyYWN0bWV0aG9kc19fLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgdHlwZSwgIl9fYWJzdHJhY3RtZXRob2RzX18iKQorICAgICAgICBjbGFzcyBtZXRhKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgbWV0YSwgIl9fYWJzdHJhY3RtZXRob2RzX18iKQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFguX19hYnN0cmFjdG1ldGhvZHNfXworCiAKIGNsYXNzIERpY3RQcm94eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00Mzc0LDcgKzQ1NzYsNyBAQAogICAgICAgICAjIFRlc3RpbmcgZGljdC1wcm94eSBpdGVya2V5cy4uLgogICAgICAgICBrZXlzID0gWyBrZXkgZm9yIGtleSBpbiBzZWxmLkMuX19kaWN0X18uaXRlcmtleXMoKSBdCiAgICAgICAgIGtleXMuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGtleXMsIFsnX19kaWN0X18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBbJ19fZGljdF9fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsCiAgICAgICAgICAgICAnX193ZWFrcmVmX18nLCAnbWV0aCddKQogCiAgICAgZGVmIHRlc3RfaXRlcl92YWx1ZXMoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3QucHkKaW5kZXggMzQzNDc2NC4uMjkxNjdkMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQpAQCAtOSwzMiArOSwzMiBAQAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICAjIGNhbGxpbmcgYnVpbHQtaW4gdHlwZXMgd2l0aG91dCBhcmd1bWVudCBtdXN0IHJldHVybiBlbXB0eQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoKSwge30pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaWN0KCkgaXMgbm90IHt9KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGRpY3QoKSwge30pCiAKICAgICBkZWYgdGVzdF9saXRlcmFsX2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICAjIGNoZWNrIGxpdGVyYWwgY29uc3RydWN0b3IgZm9yIGRpZmZlcmVudCBzaXplZCBkaWN0cyAodG8gZXhlcmNpc2UgdGhlIEJVSUxEX01BUCBvcGFyZworICAgICAgICAjIGNoZWNrIGxpdGVyYWwgY29uc3RydWN0b3IgZm9yIGRpZmZlcmVudCBzaXplZCBkaWN0cworICAgICAgICAjICh0byBleGVyY2lzZSB0aGUgQlVJTERfTUFQIG9wYXJnKS4KICAgICAgICAgZm9yIG4gaW4gKDAsIDEsIDYsIDI1NiwgNDAwKToKLSAgICAgICAgICAgIGl0ZW1zID0gWygnJy5qb2luKFtyYW5kb20uY2hvaWNlKHN0cmluZy5sZXR0ZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDgpXSksCi0gICAgICAgICAgICAgICAgICAgICAgaSkKKyAgICAgICAgICAgIGl0ZW1zID0gWygnJy5qb2luKHJhbmRvbS5zYW1wbGUoc3RyaW5nLmxldHRlcnMsIDgpKSwgaSkKICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pXQogICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoaXRlbXMpCi0gICAgICAgICAgICBkaWN0bGl0ZXJhbCA9ICd7JyArICcsICcuam9pbignJXI6ICVkJyAlIGl0ZW0gZm9yIGl0ZW0gaW4gaXRlbXMpICsgJ30nCisgICAgICAgICAgICBmb3JtYXR0ZWRfaXRlbXMgPSAoJ3shcn06IHs6ZH0nLmZvcm1hdChrLCB2KSBmb3IgaywgdiBpbiBpdGVtcykKKyAgICAgICAgICAgIGRpY3RsaXRlcmFsID0gJ3snICsgJywgJy5qb2luKGZvcm1hdHRlZF9pdGVtcykgKyAnfScKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChkaWN0bGl0ZXJhbCksIGRpY3QoaXRlbXMpKQogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHsxOiAyfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJvb2woe30pIGlzIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydF8oYm9vbCh7MTogMn0pIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobm90IHt9LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoezE6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woe30pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKHsxOiAyfSksIFRydWUpCiAKICAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgogICAgICAgICBkID0ge30KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCiAgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CiAgICAgICAgIGsgPSBkLmtleXMoKQotICAgICAgICBzZWxmLmFzc2VydF8oZC5oYXNfa2V5KCdhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmhhc19rZXkoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KCdiJykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmtleXMsIE5vbmUpCiAKQEAgLTU3LDcgKzU3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CiAgICAgICAgIGQgPSB7fQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGQuaGFzX2tleSgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQuaGFzX2tleSgnYScpKQogICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQogICAgICAgICBrID0gZC5rZXlzKCkKICAgICAgICAgay5zb3J0KCkKQEAgLTY3LDEyICs2NywxMyBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGQgPSB7fQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICgnYScgaW4gZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgbm90IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdhJyBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBkKQogICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYicgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdjJyBub3QgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgZCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19jb250YWluc19fKQogCkBAIC0yMDYsNyArMjA3LDcgQEAKICAgICBkZWYgdGVzdF9mcm9ta2V5cyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0LmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQogICAgICAgICBkID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdChkLmZyb21rZXlzKCdhYmMnKSBpcyBkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkLmZyb21rZXlzKCdhYmMnKSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoKDQsNSksMCksIHs0OjAsIDU6MH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cyhbXSksIHt9KQpAQCAtMjE3LDE0ICsyMTgsMTQgQEAKICAgICAgICAgY2xhc3MgZGljdGxpa2UoZGljdCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkaWN0bGlrZS5mcm9ta2V5cygnYScpLCBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgZGljdGxpa2UpCiAgICAgICAgIGNsYXNzIG15ZGljdChkaWN0KToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJEaWN0LlVzZXJEaWN0KCkKICAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1ZCwgVXNlckRpY3QuVXNlckRpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGljdC5mcm9ta2V5cykKIAogICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcwpAQCAtMjYxLDEwICsyNjIsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQotICAgICAgICBkID0geydhJyA6IDEsICdiJyA6IDJ9Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnLCAzKSwgMSkKQEAgLTI3NCw5ICsyNzUsOSBAQAogICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CiAgICAgICAgICMgZGljdC5zZXRkZWZhdWx0KCkKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhkLnNldGRlZmF1bHQoJ2tleTAnKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGQuc2V0ZGVmYXVsdCgna2V5MCcpLCBOb25lKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleTAnLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5zZXRkZWZhdWx0KCdrZXkwJyksIE5vbmUpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCgzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2tleSddWzBdLCAzKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoNCkKQEAgLTMxOCw5ICszMTksOSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhLCBpbnQoa2EpKQogICAgICAgICAgICAgICAgICAgICBrYiwgdmIgPSB0YiA9IGIucG9waXRlbSgpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmIsIGludChrYikpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBhKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb3B5bW9kZSA8IDAgYW5kIHRhICE9IHRiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIpCiAKICAgICAgICAgZCA9IHt9CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCkBAIC0zMzcsOCArMzM4LDggQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3AsIGspCiAKLSAgICAgICAgIyB2ZXJpZnkgbG9uZ3MvaW50cyBnZXQgc2FtZSB2YWx1ZSB3aGVuIGtleSA+IDMyIGJpdHMgKGZvciA2NC1iaXQgYXJjaHMpCi0gICAgICAgICMgc2VlIFNGIGJ1ZyAjNjg5NjU5CisgICAgICAgICMgdmVyaWZ5IGxvbmdzL2ludHMgZ2V0IHNhbWUgdmFsdWUgd2hlbiBrZXkgPiAzMiBiaXRzCisgICAgICAgICMgKGZvciA2NC1iaXQgYXJjaHMpLiAgU2VlIFNGIGJ1ZyAjNjg5NjU5LgogICAgICAgICB4ID0gNDUwMzU5OTYyNzM3MDQ5NkwKICAgICAgICAgeSA9IDQ1MDM1OTk2MjczNzA0OTYKICAgICAgICAgaCA9IHt4OiAnYW55dGhpbmcnLCB5OiAnc29tZXRoaW5nIGVsc2UnfQpAQCAtMzY2LDE1ICszNjcsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnBvcCwgeCkKIAogICAgIGRlZiB0ZXN0X211dGF0aW5naXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIGNoYW5naW5nIGRpY3Qgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCiAgICAgICAgIGQgPSB7fQogICAgICAgICBkWzFdID0gMQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIGZvciBpIGluIGQ6CiAgICAgICAgICAgICAgICAgZFtpKzFdID0gMQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJjaGFuZ2luZyBkaWN0IHNpemUgZHVyaW5nIGl0ZXJhdGlvbiBkb2Vzbid0IHJhaXNlIEVycm9yIikKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGQgPSB7fQpAQCAtMzk1LDggKzM5Myw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgcmVwciwgZCkKIAogICAgIGRlZiB0ZXN0X2xlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90ICh7fSA8IHt9KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoezE6IDJ9IDwgezFMOiAyTH0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHt9IDwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoezE6IDJ9IDwgezFMOiAyTH0pCiAKICAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKIApAQCAtNDA4LDE3ICs0MDYsMTQgQEAKIAogICAgICAgICBkMSA9IHtCYWRDbXAoKTogMX0KICAgICAgICAgZDIgPSB7MTogMX0KLSAgICAgICAgdHJ5OgorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjKToKICAgICAgICAgICAgIGQxIDwgZDIKLSAgICAgICAgZXhjZXB0IEV4YzoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiPCBkaWRuJ3QgcmFpc2UgRXhjIikKIAogICAgIGRlZiB0ZXN0X21pc3Npbmcoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIGRpY3QgZG9lc24ndCBoYXZlIGEgX19taXNzaW5nX18gbWV0aG9kCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihkaWN0LCAiX19taXNzaW5nX18iKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cih7fSwgIl9fbWlzc2luZ19fIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoZGljdCwgIl9fbWlzc2luZ19fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih7fSwgIl9fbWlzc2luZ19fIikpCiAgICAgICAgICMgVGVzdCBzZXZlcmFsIGNhc2VzOgogICAgICAgICAjIChEKSBzdWJjbGFzcyBkZWZpbmVzIF9fbWlzc2luZ19fIG1ldGhvZCByZXR1cm5pbmcgYSB2YWx1ZQogICAgICAgICAjIChFKSBzdWJjbGFzcyBkZWZpbmVzIF9fbWlzc2luZ19fIG1ldGhvZCByYWlzaW5nIFJ1bnRpbWVFcnJvcgpAQCAtNDMwLDQ5ICs0MjUsNDAgQEAKICAgICAgICAgZCA9IEQoezE6IDIsIDM6IDR9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFszXSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDIgbm90IGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyIG5vdCBpbiBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQua2V5cygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMl0sIDQyKQorCiAgICAgICAgIGNsYXNzIEUoZGljdCk6CiAgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioa2V5KQogICAgICAgICBlID0gRSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBlWzQyXQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZVs0Ml0gZGlkbid0IHJhaXNlIFJ1bnRpbWVFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKDQyLCkpCisKICAgICAgICAgY2xhc3MgRihkaWN0KToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICAjIEFuIGluc3RhbmNlIHZhcmlhYmxlIF9fbWlzc2luZ19fIHNob3VsZCBoYXZlIG5vIGVmZmVjdAogICAgICAgICAgICAgICAgIHNlbGYuX19taXNzaW5nX18gPSBsYW1iZGEga2V5OiBOb25lCiAgICAgICAgIGYgPSBGKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjOgogICAgICAgICAgICAgZls0Ml0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZls0Ml0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKKwogICAgICAgICBjbGFzcyBHKGRpY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBnID0gRygpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKICAgICAgICAgICAgIGdbNDJdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImdbNDJdIGRpZG4ndCByYWlzZSBLZXlFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKDQyLCkpCiAKICAgICBkZWYgdGVzdF90dXBsZV9rZXllcnJvcihzZWxmKToKICAgICAgICAgIyBTRiAjMTU3NjY1NwogICAgICAgICBkID0ge30KLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjOgogICAgICAgICAgICAgZFsoMSwpXQotICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCgxLCksKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgibWlzc2luZyBLZXlFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKCgxLCksKSkKIAogICAgIGRlZiB0ZXN0X2JhZF9rZXkoc2VsZik6CiAgICAgICAgICMgRGljdGlvbmFyeSBsb29rdXBzIHNob3VsZCBmYWlsIGlmIF9fY21wX18oKSByYWlzZXMgYW4gZXhjZXB0aW9uLgpAQCAtNTAwLDEyICs0ODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgJ2Quc2V0ZGVmYXVsdCh4MiwgNDIpJywKICAgICAgICAgICAgICAgICAgICAgICdkLnBvcCh4MiknLAogICAgICAgICAgICAgICAgICAgICAgJ2QudXBkYXRlKHt4MjogMn0pJ106Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEN1c3RvbUV4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICAgZXhlYyBzdG10IGluIGxvY2FscygpCi0gICAgICAgICAgICBleGNlcHQgQ3VzdG9tRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTdGF0ZW1lbnQgZGlkbid0IHJhaXNlIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgdGVzdF9yZXNpemUxKHNlbGYpOgogICAgICAgICAjIERpY3QgcmVzaXppbmcgYnVnLCBmb3VuZCBieSBKYWNrIEphbnNlbiBpbiAyLjIgQ1ZTIGRldmVsb3BtZW50LgpAQCAtNTQ4LDExICs1MzAsOSBAQAogICAgIGRlZiB0ZXN0X2VtcHR5X3ByZXNpemVkX2RpY3RfaW5fZnJlZWxpc3Qoc2VsZik6CiAgICAgICAgICMgQnVnICMzNTM3OiBpZiBhbiBlbXB0eSBidXQgcHJlc2l6ZWQgZGljdCB3aXRoIGEgc2l6ZSBsYXJnZXIKICAgICAgICAgIyB0aGFuIDcgd2FzIGluIHRoZSBmcmVlbGlzdCwgaXQgdHJpZ2dlcmVkIGFuIGFzc2VydGlvbiBmYWlsdXJlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQgPSB7J2EnOiAxLy8wLCAgJ2InOiBOb25lLCAnYyc6IE5vbmUsICdkJzogTm9uZSwgJ2UnOiBOb25lLAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIGQgPSB7J2EnOiAxIC8vIDAsICdiJzogTm9uZSwgJ2MnOiBOb25lLCAnZCc6IE5vbmUsICdlJzogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2YnOiBOb25lLCAnZyc6IE5vbmUsICdoJzogTm9uZX0KLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgcGFzcwogICAgICAgICBkID0ge30KIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5lcl9pdGVyYXRvcihzZWxmKToKQEAgLTU2Nyw3ICs1NDcsMTA4IEBACiAgICAgICAgICAgICBvYmoueCA9IGkoY29udGFpbmVyKQogICAgICAgICAgICAgZGVsIG9iaiwgY29udGFpbmVyCiAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYoKSwgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKKworICAgIGRlZiBfbm90X3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgICMgTmVzdGVkIGNvbnRhaW5lcnMgY2FuIHRha2Ugc2V2ZXJhbCBjb2xsZWN0aW9ucyB0byB1bnRyYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgZGVmIF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgZGljdCBsaXRlcmFscworICAgICAgICB4LCB5LCB6LCB3ID0gMS41LCAiYSIsICgxLCBOb25lKSwgW10KKworICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7fSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoe3g6KCksIHk6eCwgejoxfSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoezE6ICJhIiwgImIiOiAyfSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoezE6IDIsIChOb25lLCBUcnVlLCBGYWxzZSwgKCkpOiBpbnR9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogb2JqZWN0KCl9KQorCisgICAgICAgICMgRGljdHMgd2l0aCBtdXRhYmxlIGVsZW1lbnRzIGFyZSBhbHdheXMgdHJhY2tlZCwgZXZlbiBpZiB0aG9zZQorICAgICAgICAjIGVsZW1lbnRzIGFyZSBub3QgdHJhY2tlZCByaWdodCBub3cuCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IFtdfSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogKFtdLCl9KQorICAgICAgICBzZWxmLl90cmFja2VkKHsxOiB7fX0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IHNldCgpfSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfZHluYW1pYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkeW5hbWljYWxseS1jcmVhdGVkIGRpY3RzCisgICAgICAgIGNsYXNzIE15T2JqZWN0KG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHgsIHksIHosIHcsIG8gPSAxLjUsICJhIiwgKDEsIG9iamVjdCgpKSwgW10sIE15T2JqZWN0KCkKKworICAgICAgICBkID0gZGljdCgpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGRbMV0gPSAiYSIKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFt5XSA9IDIKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFt6XSA9IDMKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZC5jb3B5KCkpCisgICAgICAgIGRbNF0gPSB3CisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkLmNvcHkoKSkKKyAgICAgICAgZFs0XSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZC5jb3B5KCkpCisKKyAgICAgICAgIyBkZCBpc24ndCB0cmFja2VkIHJpZ2h0IG5vdywgYnV0IGl0IG1heSBtdXRhdGUgYW5kIHRoZXJlZm9yZSBkCisgICAgICAgICMgd2hpY2ggY29udGFpbnMgaXQgbXVzdCBiZSB0cmFja2VkLgorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRbMV0gPSBkZAorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkZCkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkZFsxXSA9IGQKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkZCkKKworICAgICAgICBkID0gZGljdC5mcm9ta2V5cyhbeCwgeSwgel0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRkLnVwZGF0ZShkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkZCkKKyAgICAgICAgZCA9IGRpY3QuZnJvbWtleXMoW3gsIHksIHosIG9dKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRkLnVwZGF0ZShkKQorICAgICAgICBzZWxmLl90cmFja2VkKGRkKQorCisgICAgICAgIGQgPSBkaWN0KHg9eCwgeT15LCB6PXopCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KHg9eCwgeT15LCB6PXosIHc9dykKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGQudXBkYXRlKHg9eCwgeT15LCB6PXopCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQudXBkYXRlKHc9dykKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorCisgICAgICAgIGQgPSBkaWN0KFsoeCwgeSksICh6LCAxKV0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KFsoeCwgeSksICh6LCB3KV0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoKQorICAgICAgICBkLnVwZGF0ZShbKHgsIHkpLCAoeiwgMSldKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkLnVwZGF0ZShbKHgsIHkpLCAoeiwgdyldKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3RyYWNrX3N1YnR5cGVzKHNlbGYpOgorICAgICAgICAjIERpY3Qgc3VidHlwZXMgYXJlIGFsd2F5cyB0cmFja2VkCisgICAgICAgIGNsYXNzIE15RGljdChkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fdHJhY2tlZChNeURpY3QoKSkKIAogCiBmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKQEAgLTU4Miw3ICs2NjMsNyBAQAogICAgIHR5cGUydGVzdCA9IERpY3QKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICgnZGljdCguaGFzX2tleS4ufCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zKSBub3Qgc3VwcG9ydGVkIGluIDMueCcsCiAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdGNvbXBzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaWN0Y29tcHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmOWU0OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZGljdGNvbXBzLnB5CkBAIC0wLDAgKzEsNTQgQEAKKworZG9jdGVzdHMgPSAiIiIKKworICAgID4+PiBrID0gIm9sZCB2YWx1ZSIKKyAgICA+Pj4geyBrOiBOb25lIGZvciBrIGluIHJhbmdlKDEwKSB9CisgICAgezA6IE5vbmUsIDE6IE5vbmUsIDI6IE5vbmUsIDM6IE5vbmUsIDQ6IE5vbmUsIDU6IE5vbmUsIDY6IE5vbmUsIDc6IE5vbmUsIDg6IE5vbmUsIDk6IE5vbmV9CisgICAgPj4+IGsKKyAgICAnb2xkIHZhbHVlJworCisgICAgPj4+IHsgazogaysxMCBmb3IgayBpbiByYW5nZSgxMCkgfQorICAgIHswOiAxMCwgMTogMTEsIDI6IDEyLCAzOiAxMywgNDogMTQsIDU6IDE1LCA2OiAxNiwgNzogMTcsIDg6IDE4LCA5OiAxOX0KKworICAgID4+PiBnID0gIkdsb2JhbCB2YXJpYWJsZSIKKyAgICA+Pj4geyBrOiBnIGZvciBrIGluIHJhbmdlKDEwKSB9CisgICAgezA6ICdHbG9iYWwgdmFyaWFibGUnLCAxOiAnR2xvYmFsIHZhcmlhYmxlJywgMjogJ0dsb2JhbCB2YXJpYWJsZScsIDM6ICdHbG9iYWwgdmFyaWFibGUnLCA0OiAnR2xvYmFsIHZhcmlhYmxlJywgNTogJ0dsb2JhbCB2YXJpYWJsZScsIDY6ICdHbG9iYWwgdmFyaWFibGUnLCA3OiAnR2xvYmFsIHZhcmlhYmxlJywgODogJ0dsb2JhbCB2YXJpYWJsZScsIDk6ICdHbG9iYWwgdmFyaWFibGUnfQorCisgICAgPj4+IHsgazogdiBmb3IgayBpbiByYW5nZSgxMCkgZm9yIHYgaW4gcmFuZ2UoMTApIGlmIGsgPT0gdiB9CisgICAgezA6IDAsIDE6IDEsIDI6IDIsIDM6IDMsIDQ6IDQsIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDl9CisKKyAgICA+Pj4geyBrOiB2IGZvciB2IGluIHJhbmdlKDEwKSBmb3IgayBpbiByYW5nZSh2KjksIHYqMTApIH0KKyAgICB7OTogMSwgMTg6IDIsIDE5OiAyLCAyNzogMywgMjg6IDMsIDI5OiAzLCAzNjogNCwgMzc6IDQsIDM4OiA0LCAzOTogNCwgNDU6IDUsIDQ2OiA1LCA0NzogNSwgNDg6IDUsIDQ5OiA1LCA1NDogNiwgNTU6IDYsIDU2OiA2LCA1NzogNiwgNTg6IDYsIDU5OiA2LCA2MzogNywgNjQ6IDcsIDY1OiA3LCA2NjogNywgNjc6IDcsIDY4OiA3LCA2OTogNywgNzI6IDgsIDczOiA4LCA3NDogOCwgNzU6IDgsIDc2OiA4LCA3NzogOCwgNzg6IDgsIDc5OiA4LCA4MTogOSwgODI6IDksIDgzOiA5LCA4NDogOSwgODU6IDksIDg2OiA5LCA4NzogOSwgODg6IDksIDg5OiA5fQorCisgICAgPj4+IHsgeDogeSBmb3IgeSwgeCBpbiAoKDEsIDIpLCAoMywgNCkpIH0gPSA1ICMgZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiAuLi4KKworICAgID4+PiB7IHg6IHkgZm9yIHksIHggaW4gKCgxLCAyKSwgKDMsIDQpKSB9ICs9IDUgIyBkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IC4uLgorCisiIiIKKworX190ZXN0X18gPSB7J2RvY3Rlc3RzJyA6IGRvY3Rlc3RzfQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IHN5cworICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RpY3Rjb21wcworICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2RpY3Rjb21wcywgdmVyYm9zZSkKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kaWN0Y29tcHMsIHZlcmJvc2UpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQoY291bnRzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weSBiL0xpYi90ZXN0L3Rlc3RfZGljdHZpZXdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MDM2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpAQCAtMCwwICsxLDE1NCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBEaWN0U2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcnNfbm90X2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBrdCA9IHR5cGUoe30udmlld2tleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBrdCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwga3QpCisgICAgICAgIGl0ID0gdHlwZSh7fS52aWV3aXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXQpCisgICAgICAgIHZ0ID0gdHlwZSh7fS52aWV3dmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdnQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHZ0KQorCisgICAgZGVmIHRlc3RfZGljdF9rZXlzKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBrZXlzID0gZC52aWV3a2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChrZXlzKSwgc2V0KFsxLCAiYSJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBzZXQoWzEsICJhIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMSwgImEiLCAiYiJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXlzLCBzZXQoWzEsICJiIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImEiLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJaIiwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGQudmlld2tleXMoKSkKKyAgICAgICAgZSA9IHsxOiAxMSwgImEiOiAiZGVmIn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGUudmlld2tleXMoKSkKKyAgICAgICAgZGVsIGVbImEiXQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQudmlld2tleXMoKSwgZS52aWV3a2V5cygpKQorCisgICAgZGVmIHRlc3RfZGljdF9pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHsxOiAxMCwgImEiOiAiQUJDIn0KKyAgICAgICAgaXRlbXMgPSBkLnZpZXdpdGVtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0ZW1zKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoaXRlbXMpLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKSwgImp1bmsiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgImRlZiIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoMSwgMTApLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoImEiLCAiQUJDIiksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAxMSksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgpLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwpLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMiwgMyksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2l0ZW1zKCksIGQudmlld2l0ZW1zKCkpCisgICAgICAgIGUgPSBkLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2l0ZW1zKCksIGUudmlld2l0ZW1zKCkpCisgICAgICAgIGVbImEiXSA9ICJkZWYiCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3aXRlbXMoKSkKKworICAgIGRlZiB0ZXN0X2RpY3RfbWl4ZWRfa2V5c19pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHsoMSwgMSk6IDExLCAoMiwgMik6IDIyfQorICAgICAgICBlID0gezE6IDEsIDI6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3a2V5cygpLCBlLnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQudmlld2l0ZW1zKCksIGUudmlld2tleXMoKSkKKworICAgIGRlZiB0ZXN0X2RpY3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICB2YWx1ZXMgPSBkLnZpZXd2YWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh2YWx1ZXMpLCBzZXQoWzEwLCAiQUJDIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCAyKQorCisgICAgZGVmIHRlc3RfZGljdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVwcihkKSwgc3RyKQorICAgICAgICByID0gcmVwcihkLnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uociwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAiZGljdF9pdGVtcyhbKCdhJywgJ0FCQycpLCAoMSwgMTApXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X2l0ZW1zKFsoMSwgMTApLCAoJ2EnLCAnQUJDJyldKSIpCisgICAgICAgIHIgPSByZXByKGQudmlld2tleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gImRpY3Rfa2V5cyhbJ2EnLCAxXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X2tleXMoWzEsICdhJ10pIikKKyAgICAgICAgciA9IHJlcHIoZC52aWV3dmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X3ZhbHVlcyhbJ0FCQycsIDEwXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X3ZhbHVlcyhbMTAsICdBQkMnXSkiKQorCisgICAgZGVmIHRlc3Rfa2V5c19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydiJzogMywgJ2MnOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDEudmlld2tleXMoKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDIudmlld2tleXMoKSwgeydiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIGQzLnZpZXdrZXlzKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBzZXQoZDEudmlld2tleXMoKSksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMi52aWV3a2V5cygpKSwgeydiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMy52aWV3a2V5cygpKSwgc2V0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgZDEudmlld2tleXMoKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgZDIudmlld2tleXMoKSwgeydhJywgJ2InLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMy52aWV3a2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgc2V0KGQxLnZpZXdrZXlzKCkpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDIudmlld2tleXMoKSksIHsnYScsICdiJywgJ2MnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgc2V0KGQzLnZpZXdrZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnYScsICdiJywgJ2QnLCAnZSd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQxLnZpZXdrZXlzKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBkMi52aWV3a2V5cygpLCB7J2EnLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBkMy52aWV3a2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gc2V0KGQxLnZpZXdrZXlzKCkpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gc2V0KGQyLnZpZXdrZXlzKCkpLCB7J2EnLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDMudmlld2tleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisKKyAgICBkZWYgdGVzdF9pdGVtc19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydhJzogMiwgJ2InOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGQxLnZpZXdpdGVtcygpICYgZDEudmlld2l0ZW1zKCksIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgZDIudmlld2l0ZW1zKCksIHsoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBkMy52aWV3aXRlbXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBzZXQoZDEudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgc2V0KGQyLnZpZXdpdGVtcygpKSwgeygnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIHNldChkMy52aWV3aXRlbXMoKSksIHNldCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBkMS52aWV3aXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQyLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMiksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQzLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDEudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgc2V0KGQyLnZpZXdpdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYScsIDIpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDMudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSBeIGQxLnZpZXdpdGVtcygpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSBeIGQyLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDMudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKworCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFNldFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQppbmRleCBhZDVhNmIzLi4zNTMzNDUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CkBAIC00LDggKzQsNDcgQEAKIGltcG9ydCBkb2N0ZXN0CiBpbXBvcnQgc3lzCiAKLWNsYXNzIFRlc3RTRmJ1Z3ModW5pdHRlc3QuVGVzdENhc2UpOgogCitjbGFzcyBUZXN0V2l0aEFzY2lpKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9vbmVfaW5zZXJ0KHNlbGYpOgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsICdiJyAqIDEwMCwgJ2EnICsgJ2InICogMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk1LCBwbGFjZXM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNtLmdldF9vcGNvZGVzKCkpLAorICAgICAgICAgICAgWyAgICgnaW5zZXJ0JywgMCwgMCwgMCwgMSksCisgICAgICAgICAgICAgICAgKCdlcXVhbCcsIDAsIDEwMCwgMSwgMTAxKV0pCisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2InICogMTAwLCAnYicgKiA1MCArICdhJyArICdiJyAqIDUwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk1LCBwbGFjZXM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNtLmdldF9vcGNvZGVzKCkpLAorICAgICAgICAgICAgWyAgICgnZXF1YWwnLCAwLCA1MCwgMCwgNTApLAorICAgICAgICAgICAgICAgICgnaW5zZXJ0JywgNTAsIDUwLCA1MCwgNTEpLAorICAgICAgICAgICAgICAgICgnZXF1YWwnLCA1MCwgMTAwLCA1MSwgMTAxKV0pCisKKyAgICBkZWYgdGVzdF9vbmVfZGVsZXRlKHNlbGYpOgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsICdhJyAqIDQwICsgJ2MnICsgJ2InICogNDAsICdhJyAqIDQwICsgJ2InICogNDApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTQsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc20uZ2V0X29wY29kZXMoKSksCisgICAgICAgICAgICBbICAgKCdlcXVhbCcsIDAsIDQwLCAwLCA0MCksCisgICAgICAgICAgICAgICAgKCdkZWxldGUnLCA0MCwgNDEsIDQwLCA0MCksCisgICAgICAgICAgICAgICAgKCdlcXVhbCcsIDQxLCA4MSwgNDAsIDgwKV0pCisKKworY2xhc3MgVGVzdEF1dG9qdW5rKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIGF1dG9qdW5rIHBhcmFtZXRlciBhZGRlZCBpbiAyLjciIiIKKyAgICBkZWYgdGVzdF9vbmVfaW5zZXJ0X2hvbW9nZW5vdXNfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgQnkgZGVmYXVsdCBhdXRvanVuaz1UcnVlIGFuZCB0aGUgaGV1cmlzdGljIGtpY2tzIGluIGZvciBhIHNlcXVlbmNlCisgICAgICAgICMgb2YgbGVuZ3RoIDIwMCsKKyAgICAgICAgc2VxMSA9ICdiJyAqIDIwMAorICAgICAgICBzZXEyID0gJ2EnICsgJ2InICogMjAwCisKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBzZXExLCBzZXEyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAsIHBsYWNlcz0zKQorCisgICAgICAgICMgTm93IHR1cm4gdGhlIGhldXJpc3RpYyBvZmYKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBzZXExLCBzZXEyLCBhdXRvanVuaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NzUsIHBsYWNlcz0zKQorCisKK2NsYXNzIFRlc3RTRmJ1Z3ModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JhdGlvX2Zvcl9udWxsX3NlcW4oc2VsZik6CiAgICAgICAgICMgQ2hlY2sgY2xlYXJpbmcgb2YgU0YgYnVnIDc2MzAyMwogICAgICAgICBzID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgW10sIFtdKQpAQCAtMTQzLDE0ICsxODIsMTMgQEAKICAgICAgICAgICAgICBrLm1ha2VfdGFibGUoZjMuc3BsaXRsaW5lcyhUcnVlKSx0My5zcGxpdGxpbmVzKFRydWUpKSwKICAgICAgICAgICAgICBdKQogICAgICAgICBhY3R1YWwgPSBmdWxsLnJlcGxhY2UoJzwvYm9keT4nLCdcbiVzXG48L2JvZHk+JyAlIHRhYmxlcykKLSAgICAgICAgIyB0ZW1wb3JhcmlseSB1bmNvbW1lbnQgbmV4dCB0aHJlZSBsaW5lcyB0byBiYXNlbGluZSB0aGlzIHRlc3QKLSAgICAgICAgI2YgPSBvcGVuKCd0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwnLCd3JykKLSAgICAgICAgI2Yud3JpdGUoYWN0dWFsKQotICAgICAgICAjZi5jbG9zZSgpCi0gICAgICAgIGV4cGVjdCA9IG9wZW4oZmluZGZpbGUoJ3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbCcpKS5yZWFkKCkKIAorICAgICAgICAjIHRlbXBvcmFyaWx5IHVuY29tbWVudCBuZXh0IHR3byBsaW5lcyB0byBiYXNlbGluZSB0aGlzIHRlc3QKKyAgICAgICAgI3dpdGggb3BlbigndGVzdF9kaWZmbGliX2V4cGVjdC5odG1sJywndycpIGFzIGZwOgorICAgICAgICAjICAgIGZwLndyaXRlKGFjdHVhbCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCxleHBlY3QpCisgICAgICAgIHdpdGggb3BlbihmaW5kZmlsZSgndGVzdF9kaWZmbGliX2V4cGVjdC5odG1sJykpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGZwLnJlYWQoKSkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKICAgICAgICAgIyBDaGVjayBpZiB0aGUgcHJvYmxlbSBkZXNjcmliZWQgaW4gcGF0Y2ggIzE0MTM3MTEgZXhpc3RzLgpAQCAtMTYwLDEwICsxOTgsMzQgQEAKICAgICAgICAgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgb2xkLCBuZXcpLmdldF9vcGNvZGVzKCkKIAogCitjbGFzcyBUZXN0T3V0cHV0Rm9ybWF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90YWJfZGVsaW1pdGVyKHNlbGYpOgorICAgICAgICBhcmdzID0gWydvbmUnLCAndHdvJywgJ09yaWdpbmFsJywgJ0N1cnJlbnQnLAorICAgICAgICAgICAgJzIwMDUtMDEtMjYgMjM6MzA6NTAnLCAnMjAxMC0wNC0wMiAxMDoyMDo1MiddCisgICAgICAgIHVkID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoKmFyZ3MsIGxpbmV0ZXJtPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodWQpWzA6Ml0sIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICItLS0gT3JpZ2luYWxcdDIwMDUtMDEtMjYgMjM6MzA6NTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIisrKyBDdXJyZW50XHQyMDEwLTA0LTAyIDEwOjIwOjUyIl0pCisgICAgICAgIGNkID0gZGlmZmxpYi5jb250ZXh0X2RpZmYoKmFyZ3MsIGxpbmV0ZXJtPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY2QpWzA6Ml0sIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIqKiogT3JpZ2luYWxcdDIwMDUtMDEtMjYgMjM6MzA6NTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLSBDdXJyZW50XHQyMDEwLTA0LTAyIDEwOjIwOjUyIl0pCisKKyAgICBkZWYgdGVzdF9ub190cmFpbGluZ190YWJfb25fZW1wdHlfZmlsZWRhdGUoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ29uZScsICd0d28nLCAnT3JpZ2luYWwnLCAnQ3VycmVudCddCisgICAgICAgIHVkID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoKmFyZ3MsIGxpbmV0ZXJtPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodWQpWzA6Ml0sIFsiLS0tIE9yaWdpbmFsIiwgIisrKyBDdXJyZW50Il0pCisKKyAgICAgICAgY2QgPSBkaWZmbGliLmNvbnRleHRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjZClbMDoyXSwgWyIqKiogT3JpZ2luYWwiLCAiLS0tIEN1cnJlbnQiXSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgZGlmZmxpYi5IdG1sRGlmZi5fZGVmYXVsdF9wcmVmaXggPSAwCiAgICAgRG9jdGVzdHMgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShkaWZmbGliKQotICAgIHJ1bl91bml0dGVzdChUZXN0U0ZwYXRjaGVzLCBUZXN0U0ZidWdzLCBEb2N0ZXN0cykKKyAgICBydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RXaXRoQXNjaWksIFRlc3RBdXRvanVuaywgVGVzdFNGcGF0Y2hlcywgVGVzdFNGYnVncywKKyAgICAgICAgVGVzdE91dHB1dEZvcm1hdCwgRG9jdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlyY2FjaGUucHkgYi9MaWIvdGVzdC90ZXN0X2RpcmNhY2hlLnB5CmluZGV4IDI3NmM1MmEuLmM2YWQzMWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlyY2FjaGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXJjYWNoZS5weQpAQCAtNCw3ICs0LDcgQEAKICIiIgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKIGRpcmNhY2hlID0gaW1wb3J0X21vZHVsZSgnZGlyY2FjaGUnLCBkZXByZWNhdGVkPVRydWUpCiBpbXBvcnQgb3MsIHRpbWUsIHN5cywgdGVtcGZpbGUKIApAQCAtMzUsMTAgKzM1LDEwIEBACiAgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKICAgICAgICAgIyMgU1VDQ0VTU0ZVTCBDQVNFUwogICAgICAgICBlbnRyaWVzID0gZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVudHJpZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXMsIFtdKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBjYWNoZSBpcyBhY3R1YWxseSBjYWNoaW5nLCBub3QganVzdCBwYXNzaW5nIHRocm91Z2guCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmNhY2hlLmxpc3RkaXIoc2VsZi50ZW1wZGlyKSBpcyBlbnRyaWVzKQogCiAgICAgICAgICMgRGlyZWN0b3JpZXMgYXJlbid0ICJmaWxlcyIgb24gV2luZG93cywgYW5kIGRpcmVjdG9yeSBtdGltZSBoYXMKICAgICAgICAgIyBub3RoaW5nIHRvIGRvIHdpdGggd2hlbiBmaWxlcyB1bmRlciBhIGRpcmVjdG9yeSBnZXQgY3JlYXRlZC4KQEAgLTUyLDggKzUyLDggQEAKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKICAgICAgICAgICAgIHNlbGYud3JpdGVUZW1wKCJ0ZXN0MSIpCiAgICAgICAgICAgICBlbnRyaWVzID0gZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbnRyaWVzLCBbJ3Rlc3QxJ10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpIGlzIGVudHJpZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXMsIFsndGVzdDEnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKIAogICAgICAgICAjIyBVTlNVQ0NFU1NGVUwgQ0FTRVMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZGlyY2FjaGUubGlzdGRpciwgc2VsZi50ZW1wZGlyKyJfbm9uZXhpc3RlbnQiKQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBzZWxmLm1rZGlyVGVtcCgiQSIpCiAgICAgICAgIGxzdCA9IFsnQScsICd0ZXN0MicsICd0ZXN0X25vbmV4aXN0ZW50J10KICAgICAgICAgZGlyY2FjaGUuYW5ub3RhdGUoc2VsZi50ZW1wZGlyLCBsc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxzdCwgWydBLycsICd0ZXN0MicsICd0ZXN0X25vbmV4aXN0ZW50J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbJ0EvJywgJ3Rlc3QyJywgJ3Rlc3Rfbm9uZXhpc3RlbnQnXSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CmluZGV4IGZkNTA4YTkuLjM4NDlkYzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC01NCwyOSArNTQsMjMgQEAKIAogZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCiAgJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCi0gICAgICAgICAgICAgIDMgSlVNUF9JRl9UUlVFICAgICAgICAgICAgNDEgKHRvIDQ3KQotICAgICAgICAgICAgICA2IFBPUF9UT1AKLSAgICAgICAgICAgICAgNyBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCi0gICAgICAgICAgICAgMTAgQlVJTERfTElTVCAgICAgICAgICAgICAgIDAKLSAgICAgICAgICAgICAxMyBEVVBfVE9QCi0gICAgICAgICAgICAgMTQgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDEgKF9bMV0pCi0gICAgICAgICAgICAgMTcgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKHgpCi0gICAgICAgICAgICAgMjAgR0VUX0lURVIKLSAgICAgICAgPj4gICAyMSBGT1JfSVRFUiAgICAgICAgICAgICAgICAxMyAodG8gMzcpCi0gICAgICAgICAgICAgMjQgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDIgKHMpCi0gICAgICAgICAgICAgMjcgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDEgKF9bMV0pCi0gICAgICAgICAgICAgMzAgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDIgKHMpCi0gICAgICAgICAgICAgMzMgTElTVF9BUFBFTkQKLSAgICAgICAgICAgICAzNCBKVU1QX0FCU09MVVRFICAgICAgICAgICAyMQotICAgICAgICA+PiAgIDM3IERFTEVURV9GQVNUICAgICAgICAgICAgICAxIChfWzFdKQorICAgICAgICAgICAgICAzIFBPUF9KVU1QX0lGX1RSVUUgICAgICAgIDM4CisgICAgICAgICAgICAgIDYgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKEFzc2VydGlvbkVycm9yKQorICAgICAgICAgICAgICA5IEJVSUxEX0xJU1QgICAgICAgICAgICAgICAwCisgICAgICAgICAgICAgMTIgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKHgpCisgICAgICAgICAgICAgMTUgR0VUX0lURVIKKyAgICAgICAgPj4gICAxNiBGT1JfSVRFUiAgICAgICAgICAgICAgICAxMiAodG8gMzEpCisgICAgICAgICAgICAgMTkgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDEgKHMpCisgICAgICAgICAgICAgMjIgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDEgKHMpCisgICAgICAgICAgICAgMjUgTElTVF9BUFBFTkQgICAgICAgICAgICAgIDIKKyAgICAgICAgICAgICAyOCBKVU1QX0FCU09MVVRFICAgICAgICAgICAxNgogCi0gJS00ZCAgICAgICAgNDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDEpCi0gICAgICAgICAgICAgNDMgQklOQVJZX0FERAotICAgICAgICAgICAgIDQ0IFJBSVNFX1ZBUkFSR1MgICAgICAgICAgICAyCi0gICAgICAgID4+ICAgNDcgUE9QX1RPUAorICUtNGQgICA+PiAgIDMxIExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgxKQorICAgICAgICAgICAgIDM0IEJJTkFSWV9BREQKKyAgICAgICAgICAgICAzNSBSQUlTRV9WQVJBUkdTICAgICAgICAgICAgMgogCi0gJS00ZCAgICAgICAgNDggTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCi0gICAgICAgICAgICAgNTEgUkVUVVJOX1ZBTFVFCisgJS00ZCAgID4+ICAgMzggTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgNDEgUkVUVVJOX1ZBTFVFCiAiIiIlKGJ1ZzEzMzM5ODIuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMSwKICAgICAgYnVnMTMzMzk4Mi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAyLAogICAgICBidWcxMzMzOTgyLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDMpCkBAIC0xMDksOCArMTAzLDggQEAKIAogICAgIGRlZiB0ZXN0X29wbWFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiU1RPUF9DT0RFIl0sIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJMT0FEX0NPTlNUIl0gaW4gZGlzLmhhc2NvbnN0LCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiU1RPUkVfTkFNRSJdIGluIGRpcy5oYXNuYW1lLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEluKGRpcy5vcG1hcFsiTE9BRF9DT05TVCJdLCBkaXMuaGFzY29uc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlzLm9wbWFwWyJTVE9SRV9OQU1FIl0sIGRpcy5oYXNuYW1lKQogCiAgICAgZGVmIHRlc3Rfb3BuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG5hbWVbZGlzLm9wbWFwWyJMT0FEX0ZBU1QiXV0sICJMT0FEX0ZBU1QiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGwucHkKaW5kZXggYzA0YmMxYi4uNjA2OWE3NyAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9kbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RsLnB5CkBAIC0yLDcgKzIsOCBAQAogIiIiVGVzdCBkbG1vZHVsZS5jCiAgICBSb2dlciBFLiBNYXNzZSAgcmV2aXNlZCBzdHJhdGVneSBieSBCYXJyeSBXYXJzYXcKICIiIgotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSxUZXN0U2tpcHBlZCwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCiBkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQogCiBzaGFyZWRsaWJzID0gWwpAQCAtMzEsNyArMzIsNyBAQAogICAgICAgICAgICAgICAgIHByaW50ICd3b3JrZWQhJwogICAgICAgICAgICAgYnJlYWsKICAgICBlbHNlOgotICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCwgJ0NvdWxkIG5vdCBvcGVuIGFueSBzaGFyZWQgbGlicmFyaWVzJworICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgJ0NvdWxkIG5vdCBvcGVuIGFueSBzaGFyZWQgbGlicmFyaWVzJwogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKaW5kZXggYTc0NzdmMi4uYzAyN2FjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtNDk5LDYgKzQ5OSw4IEBACiB3aWxsIG9ubHkgYmUgZ2VuZXJhdGVkIGZvciBpdCBvbmNlOgogCiAgICAgPj4+IGZyb20gdGVzdCBpbXBvcnQgZG9jdGVzdF9hbGlhc2VzCisgICAgPj4+IGFzc2VydCBkb2N0ZXN0X2FsaWFzZXMuVHdvTmFtZXMuZgorICAgID4+PiBhc3NlcnQgZG9jdGVzdF9hbGlhc2VzLlR3b05hbWVzLmcKICAgICA+Pj4gdGVzdHMgPSBleGNsX2VtcHR5X2ZpbmRlci5maW5kKGRvY3Rlc3RfYWxpYXNlcykKICAgICA+Pj4gcHJpbnQgbGVuKHRlc3RzKQogICAgIDIKQEAgLTg2Myw2ICs4NjUsNzcgQEAKICAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQogICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKIAorSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgYWxzbyBpZ25vcmVzIGRpZmZlcmVuY2UgaW4gZXhjZXB0aW9uIGZvcm1hdHRpbmcKK2JldHdlZW4gUHl0aG9uIHZlcnNpb25zLiBGb3IgZXhhbXBsZSwgaW4gUHl0aG9uIDMueCwgdGhlIG1vZHVsZSBwYXRoIG9mCit0aGUgZXhjZXB0aW9uIGlzIGluIHRoZSBvdXRwdXQsIGJ1dCB0aGlzIHdpbGwgZmFpbCB1bmRlciBQeXRob24gMjoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIGh0dHBsaWIuSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNCwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBodHRwbGliLkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBHb3Q6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0J1dCBpbiBQeXRob24gMiB0aGUgbW9kdWxlIHBhdGggaXMgbm90IGluY2x1ZGVkLCBhbiB0aGVyZWZvcmUgYSB0ZXN0IG11c3QgbG9vaworbGlrZSB0aGUgZm9sbG93aW5nIHRlc3QgdG8gc3VjY2VlZCBpbiBQeXRob24gMi4gQnV0IHRoYXQgdGVzdCB3aWxsIGZhaWwgdW5kZXIKK1B5dGhvbiAzLgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIC4uLiAgICAgPj4+IHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKQorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK0hvd2V2ZXIsIHdpdGggSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwsIHRoZSBtb2R1bGUgbmFtZSBvZiB0aGUgZXhjZXB0aW9uCisoaWYgYW55KSB3aWxsIGJlIGlnbm9yZWQ6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitUaGUgbW9kdWxlIHBhdGggd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIHNvIHR3byBkaWZmZXJlbnQgbW9kdWxlIHBhdGhzIHdpbGwKK3N0aWxsIHBhc3MgaWYgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgaXMgZ2l2ZW4uIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNvIGl0IGNhbgorYmUgdXNlZCB3aGVuIGV4Y2VwdGlvbnMgaGF2ZSBjaGFuZ2VkIG1vZHVsZS4KKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgZm9vLmJhci5IVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKwogQnV0IElHTk9SRV9FWENFUFRJT05fREVUQUlMIGRvZXMgbm90IGFsbG93IGEgbWlzbWF0Y2ggaW4gdGhlIGV4Y2VwdGlvbiB0eXBlOgogCiAgICAgPj4+IGRlZiBmKHgpOgpAQCAtMTY0OCwxMCArMTcyMSwxMyBAQAogCiAgICAgICA+Pj4gZG9jID0gJycnCiAgICAgICAuLi4gPj4+IHggPSA0MgorICAgICAgLi4uID4+PiByYWlzZSBFeGNlcHRpb24oJ2Nsw6knKQorICAgICAgLi4uIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLiBFeGNlcHRpb246IGNsw6kKICAgICAgIC4uLiA+Pj4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCiAgICAgICAuLi4gJycnCiAgICAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKLSAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywge30sICJmb28iLCAiZm9vLnB5IiwgMCkKKyAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywge30sICJmb28tYsOkckBiYXoiLCAiZm9vLWLDpHJAYmF6LnB5IiwgMCkKICAgICAgID4+PiBydW5uZXIgPSBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkKIAogICAgIFRvIGRlbW9uc3RyYXRlIHRoaXMsIHdlJ2xsIGNyZWF0ZSBhIGZha2Ugc3RhbmRhcmQgaW5wdXQgdGhhdApAQCAtMTY2NywxMiArMTc0MywxMiBAQAogICAgICAgPj4+IHRyeTogcnVubmVyLnJ1bih0ZXN0KQogICAgICAgLi4uIGZpbmFsbHk6IHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KICAgICAgIC0tUmV0dXJuLS0KLSAgICAgID4gPGRvY3Rlc3QgZm9vWzFdPigxKTxtb2R1bGU+KCktPk5vbmUKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzJdPigxKTxtb2R1bGU+KCktPk5vbmUKICAgICAgIC0+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQogICAgICAgKFBkYikgcHJpbnQgeAogICAgICAgNDIKICAgICAgIChQZGIpIGNvbnRpbnVlCi0gICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTMpCiAKICAgICAgIFlvdSBjYW4gYWxzbyBwdXQgcGRiLnNldF90cmFjZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGEgdGVzdDoKIApAQCAtMTY4NCw3ICsxNzYwLDcgQEAKICAgICAgIC4uLiA+Pj4geD0xCiAgICAgICAuLi4gPj4+IGNhbGxzX3NldF90cmFjZSgpCiAgICAgICAuLi4gJycnCi0gICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvbyIsICJmb28ucHkiLCAwKQorICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28tYsOkckBiYXoiLCAiZm9vLWLDpHJAYmF6LnB5IiwgMCkKICAgICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCiAgICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCiAgICAgICAuLi4gICAgJ3ByaW50IHknLCAgIyBwcmludCBkYXRhIGRlZmluZWQgaW4gdGhlIGZ1bmN0aW9uCkBAIC0xNzAzLDcgKzE3NzksNyBAQAogICAgICAgKFBkYikgcHJpbnQgeQogICAgICAgMgogICAgICAgKFBkYikgdXAKLSAgICAgID4gPGRvY3Rlc3QgZm9vWzFdPigxKTxtb2R1bGU+KCkKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzFdPigxKTxtb2R1bGU+KCkKICAgICAgIC0+IGNhbGxzX3NldF90cmFjZSgpCiAgICAgICAoUGRiKSBwcmludCB4CiAgICAgICAxCkBAIC0xNzIxLDcgKzE3OTcsNyBAQAogICAgICAgLi4uIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCiAgICAgICAuLi4gPj4+IGYoMykKICAgICAgIC4uLiAnJycKLSAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vIiwgImZvby5weSIsIDApCisgICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQogICAgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KICAgICAgID4+PiBzeXMuc3RkaW4gPSBfRmFrZUlucHV0KFsKICAgICAgIC4uLiAgICAnbGlzdCcsICAgICAjIGxpc3Qgc291cmNlIGZyb20gZXhhbXBsZSAyCkBAIC0xNzM1LDcgKzE4MTEsNyBAQAogICAgICAgLi4uIGZpbmFsbHk6IHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KICAgICAgIC4uLiAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDMpZygpLT5Ob25lCisgICAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelsxXT4oMylnKCktPk5vbmUKICAgICAgIC0+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQogICAgICAgKFBkYikgbGlzdAogICAgICAgICAxICAgICBkZWYgZyh4KToKQEAgLTE3NDQsNyArMTgyMCw3IEBACiAgICAgICBbRU9GXQogICAgICAgKFBkYikgbmV4dAogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMF0+KDIpZigpLT5Ob25lCisgICAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelswXT4oMilmKCktPk5vbmUKICAgICAgIC0+IGcoeCoyKQogICAgICAgKFBkYikgbGlzdAogICAgICAgICAxICAgICBkZWYgZih4KToKQEAgLTE3NTIsMTQgKzE4MjgsMTQgQEAKICAgICAgIFtFT0ZdCiAgICAgICAoUGRiKSBuZXh0CiAgICAgICAtLVJldHVybi0tCi0gICAgICA+IDxkb2N0ZXN0IGZvb1syXT4oMSk8bW9kdWxlPigpLT5Ob25lCisgICAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelsyXT4oMSk8bW9kdWxlPigpLT5Ob25lCiAgICAgICAtPiBmKDMpCiAgICAgICAoUGRiKSBsaXN0CiAgICAgICAgIDEgIC0+IGYoMykKICAgICAgIFtFT0ZdCiAgICAgICAoUGRiKSBjb250aW51ZQogICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgRmlsZSAiZm9vLnB5IiwgbGluZSA3LCBpbiBmb28KKyAgICAgIEZpbGUgImZvby1iw6RyQGJhei5weSIsIGxpbmUgNywgaW4gZm9vLWLDpHJAYmF6CiAgICAgICBGYWlsZWQgZXhhbXBsZToKICAgICAgICAgICBmKDMpCiAgICAgICBFeHBlY3RlZCBub3RoaW5nCkBAIC0xNzkzLDcgKzE4NjksNyBAQAogICAgIC4uLiAnJycKICAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKICAgICA+Pj4gcnVubmVyID0gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpCi0gICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28iLCAiZm9vLnB5IiwgMCkKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQogICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCiAgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWwogICAgIC4uLiAgICAncHJpbnQgeScsICAjIHByaW50IGRhdGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24KQEAgLTE4NDUsNyArMTkyMSw3IEBACiAgICAgKFBkYikgcHJpbnQgeQogICAgIDEKICAgICAoUGRiKSB1cAotICAgID4gPGRvY3Rlc3QgZm9vWzFdPigxKTxtb2R1bGU+KCkKKyAgICA+IDxkb2N0ZXN0IGZvby1iw6RyQGJhelsxXT4oMSk8bW9kdWxlPigpCiAgICAgLT4gY2FsbHNfc2V0X3RyYWNlKCkKICAgICAoUGRiKSBwcmludCBmb28KICAgICAqKiogTmFtZUVycm9yOiBuYW1lICdmb28nIGlzIG5vdCBkZWZpbmVkCkBAIC0xODYzLDE5ICsxOTM5LDE5IEBACiAgICAgICAgICA+Pj4gaW1wb3J0IHRlc3Quc2FtcGxlX2RvY3Rlc3QKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKHRlc3Quc2FtcGxlX2RvY3Rlc3QpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTQ+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KIAogICAgICAgIFdlIGNhbiBhbHNvIHN1cHBseSB0aGUgbW9kdWxlIGJ5IG5hbWU6CiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgogCiAgICAgICAgV2UgY2FuIHVzZSB0aGUgY3VycmVudCBtb2R1bGU6CiAKICAgICAgICAgID4+PiBzdWl0ZSA9IHRlc3Quc2FtcGxlX2RvY3Rlc3QudGVzdF9zdWl0ZSgpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTQ+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KIAogICAgICAgIFdlIGNhbiBzdXBwbHkgZ2xvYmFsIHZhcmlhYmxlcy4gIElmIHdlIHBhc3MgZ2xvYnMsIHRoZXkgd2lsbCBiZQogICAgICAgIHVzZWQgaW5zdGVhZCBvZiB0aGUgbW9kdWxlIGdsb2JhbHMuICBIZXJlIHdlJ2xsIHBhc3MgYW4gZW1wdHkKQEAgLTE4ODMsNyArMTk1OSw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywgZ2xvYnM9e30pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTU+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KIAogICAgICAgIEFsdGVybmF0aXZlbHksIHdlIGNhbiBwcm92aWRlIGV4dHJhIGdsb2JhbHMuICBIZXJlIHdlJ2xsIG1ha2UgYW4KICAgICAgICBlcnJvciBnbyBhd2F5IGJ5IHByb3ZpZGluZyBhbiBleHRyYSBnbG9iYWwgdmFyaWFibGU6CkBAIC0xODkxLDcgKzE5NjcsNyBAQAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFnbG9icz17J3knOiAxfSkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgogCiAgICAgICAgWW91IGNhbiBwYXNzIG9wdGlvbiBmbGFncy4gIEhlcmUgd2UnbGwgY2F1c2UgYW4gZXh0cmEgZXJyb3IKICAgICAgICBieSBkaXNhYmxpbmcgdGhlIGJsYW5rLWxpbmUgZmVhdHVyZToKQEAgLTE4OTksNyArMTk3NSw3IEBACiAgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3M9ZG9jdGVzdC5ET05UX0FDQ0VQVF9CTEFOS0xJTkUpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTU+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KIAogICAgICAgIFlvdSBjYW4gc3VwcGx5IHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnM6CiAKQEAgLTE5MTYsNyArMTk5Miw3IEBACiAgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCiAgICAgICAgICAuLi4gICAgICBzZXRVcD1zZXRVcCwgdGVhckRvd249dGVhckRvd24pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgIEJ1dCB0aGUgdGVhckRvd24gcmVzdG9yZXMgc2FuaXR5OgogCkBAIC0xOTM0LDcgKzIwMTAsNyBAQAogCiAgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsIHNldFVwPXNldFVwKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBIZXJlLCB3ZSBkaWRuJ3QgbmVlZCB0byB1c2UgYSB0ZWFyRG93biBmdW5jdGlvbiBiZWNhdXNlIHdlCiAgICAgICAgbW9kaWZpZWQgdGhlIHRlc3QgZ2xvYmFscywgd2hpY2ggYXJlIGEgY29weSBvZiB0aGUKQEAgLTE5NTMsNyArMjAyOSw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgogCiAgICAgICAgVGhlIHRlc3QgZmlsZXMgYXJlIGxvb2tlZCBmb3IgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQogICAgICAgIGNhbGxpbmcgbW9kdWxlLiAgQSBwYWNrYWdlIGtleXdvcmQgYXJndW1lbnQgY2FuIGJlIHByb3ZpZGVkIHRvCkBAIC0xOTY1LDcgKzIwNDEsNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBTdXBwb3J0IGZvciB1c2luZyBhIHBhY2thZ2UncyBfX2xvYWRlcl9fLmdldF9kYXRhKCkgaXMgYWxzbwogICAgICAgIHByb3ZpZGVkLgpAQCAtMTk4NCwxNCArMjA2MCwxNCBAQAogICAgICAgICAgLi4uIGZpbmFsbHk6CiAgICAgICAgICAuLi4gICAgIGlmIGFkZGVkX2xvYWRlcjoKICAgICAgICAgIC4uLiAgICAgICAgIGRlbCB0ZXN0Ll9fbG9hZGVyX18KLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgICcvJyBzaG91bGQgYmUgdXNlZCBhcyBhIHBhdGggc2VwYXJhdG9yLiAgSXQgd2lsbCBiZSBjb252ZXJ0ZWQKICAgICAgICB0byBhIG5hdGl2ZSBzZXBhcmF0b3IgYXQgcnVuIHRpbWU6CiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCcuLi90ZXN0L3Rlc3RfZG9jdGVzdC50eHQnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0xPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CiAKICAgICAgICBJZiBEb2NGaWxlU3VpdGUgaXMgdXNlZCBmcm9tIGFuIGludGVyYWN0aXZlIHNlc3Npb24sIHRoZW4gZmlsZXMKICAgICAgICBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBvZiBzeXMuYXJndlswXToKQEAgLTIwMTYsNyArMjA5Miw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKHRlc3RfZmlsZSwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0xPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CiAKICAgICAgICBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5IGBwYWNrYWdlYCB3aGVuIGBtb2R1bGVfcmVsYXRpdmU9RmFsc2VgOgogCkBAIC0yMDMyLDcgKzIxMDgsNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzPXsnZmF2b3JpdGVfY29sb3InOiAnYmx1ZSd9KQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CiAKICAgICAgICBJbiB0aGlzIGNhc2UsIHdlIHN1cHBsaWVkIGEgbWlzc2luZyBmYXZvcml0ZSBjb2xvci4gWW91IGNhbgogICAgICAgIHByb3ZpZGUgZG9jdGVzdCBvcHRpb25zOgpAQCAtMjA0Myw3ICsyMTE5LDcgQEAKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncz1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSwKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzPXsnZmF2b3JpdGVfY29sb3InOiAnYmx1ZSd9KQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBBbmQsIHlvdSBjYW4gcHJvdmlkZSBzZXRVcCBhbmQgdGVhckRvd24gZnVuY3Rpb25zOgogCkBAIC0yMDYyLDcgKzIxMzgsNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFVwPXNldFVwLCB0ZWFyRG93bj10ZWFyRG93bikKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgogCiAgICAgICAgQnV0IHRoZSB0ZWFyRG93biByZXN0b3JlcyBzYW5pdHk6CiAKQEAgLTIwODEsNyArMjE1Nyw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0Jywgc2V0VXA9c2V0VXApCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTA+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KIAogICAgICAgIEhlcmUsIHdlIGRpZG4ndCBuZWVkIHRvIHVzZSBhIHRlYXJEb3duIGZ1bmN0aW9uIGJlY2F1c2Ugd2UKICAgICAgICBtb2RpZmllZCB0aGUgdGVzdCBnbG9iYWxzLiAgVGhlIHRlc3QgZ2xvYmFscyBhcmUKQEAgLTIwOTMsNyArMjE2OSw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QzLnR4dCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTA+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KIAogICAgICAgIElmIHRoZSB0ZXN0cyBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCB3ZSBoYXZlIHRvIHNwZWNpZnkgd2hpY2gKICAgICAgICBlbmNvZGluZyB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGguIFdlIGRvIHNvIGJ5IHVzaW5nIHRoZSBgZW5jb2RpbmdgCkBAIC0yMTA0LDcgKzIxODAsNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSd1dGYtOCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KIAogICAgICAgICIiIgogCkBAIC0yNTExLDYgKzI1ODcsNyBAQAogICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChkb2N0ZXN0LCB2ZXJib3NpdHk9VHJ1ZSkKIAogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9kb2N0ZXN0CisKICAgICAjIElnbm9yZSBhbGwgd2FybmluZ3MgYWJvdXQgdGhlIHVzZSBvZiBjbGFzcyBUZXN0ZXIgaW4gdGhpcyBtb2R1bGUuCiAgICAgZGVwcmVjYXRpb25zID0gWygiY2xhc3MgVGVzdGVyIGlzIGRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpXQogICAgIGlmIHN5cy5weTNrd2FybmluZzoKQEAgLTI1MjAsOCArMjU5Nyw5IEBACiAgICAgICAgICMgQ2hlY2sgdGhlIGRvY3Rlc3QgY2FzZXMgZGVmaW5lZCBoZXJlOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9kb2N0ZXN0LCB2ZXJib3NpdHk9VHJ1ZSkKIAotaW1wb3J0IHRyYWNlLCBzeXMKK2ltcG9ydCBzeXMKIGRlZiB0ZXN0X2NvdmVyYWdlKGNvdmVyZGlyKToKKyAgICB0cmFjZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0cmFjZScpCiAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9MCwgY291bnQ9MSkKICAgICB0cmFjZXIucnVuKCdyZWxvYWQoZG9jdGVzdCk7IHRlc3RfbWFpbigpJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5CmluZGV4IDg2NWEzMmUuLjhjMDQzYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weQpAQCAtMTIsNyArMTIsMTEgQEAKIAogIiIiCiAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2lmIHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW5ub3QgdGVzdCBkb2NzdHJpbmdzIHdpdGggLU8yIikKIAogY2xhc3MgQyhvYmplY3QpOgogICAgIHUiIiJDbGFzcyBDLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQppbmRleCAxM2EzYTlmLi43MTYzMzNlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQpAQCAtMSwxNCArMSwyOCBAQAogZnJvbSBEb2NYTUxSUENTZXJ2ZXIgaW1wb3J0IERvY1hNTFJQQ1NlcnZlcgogaW1wb3J0IGh0dHBsaWIKK2ltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgdGhyZWFkaW5nCit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIGltcG9ydCB0aW1lCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB4bWxycGNsaWIKIAogUE9SVCA9IE5vbmUKIAorZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIHRoZSBzZXJ2ZXIgY3JlYXRlZCBpbiBzZXRVcCBibG9ja3MgZXhwZWN0aW5nIG9uZSB0byBjb21lIGluLgorICAgIGlmIG5vdCBjb25kaXRpb246CisgICAgICAgIHJldHVybiBsYW1iZGEgZnVuYzogZnVuYworICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCisgICAgICAgICAgICBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCisgICAgICAgIHJldHVybiBtYWtlX3JlcXVlc3RfYW5kX3NraXAKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKKwogZGVmIHNlcnZlcihldnQsIG51bXJlcXVlc3RzKToKICAgICBzZXJ2ID0gRG9jWE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIGxvZ1JlcXVlc3RzPUZhbHNlKQogCkBAIC0yMCw4ICszNCw4IEBACiAgICAgICAgIHNlcnYuc2V0X3NlcnZlcl90aXRsZSgiRG9jWE1MUlBDU2VydmVyIFRlc3QgRG9jdW1lbnRhdGlvbiIpCiAgICAgICAgIHNlcnYuc2V0X3NlcnZlcl9uYW1lKCJEb2NYTUxSUENTZXJ2ZXIgVGVzdCBEb2NzIikKICAgICAgICAgc2Vydi5zZXRfc2VydmVyX2RvY3VtZW50YXRpb24oCi0iIiJUaGlzIGlzIGFuIFhNTC1SUEMgc2VydmVyJ3MgZG9jdW1lbnRhdGlvbiwgYnV0IHRoZSBzZXJ2ZXIgY2FuIGJlIHVzZWQgYnkKLVBPU1RpbmcgdG8gL1JQQzIuIFRyeSBzZWxmLmFkZCwgdG9vLiIiIikKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIFhNTC1SUEMgc2VydmVyJ3MgZG9jdW1lbnRhdGlvbiwgYnV0IHRoZSBzZXJ2ZXIgIgorICAgICAgICAgICAgImNhbiBiZSB1c2VkIGJ5IFBPU1RpbmcgdG8gL1JQQzIuIFRyeSBzZWxmLmFkZCwgdG9vLiIpCiAKICAgICAgICAgIyBDcmVhdGUgYW5kIHJlZ2lzdGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwogICAgICAgICBjbGFzcyBUZXN0Q2xhc3Mob2JqZWN0KToKQEAgLTU1LDYgKzY5LDcgQEAKIAogY2xhc3MgRG9jWE1MUlBDSFRUUEdFVFNlcnZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgICAgICMgRW5hYmxlIHNlcnZlciBmZWVkYmFjawogICAgICAgICBEb2NYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKIApAQCAtNzYsNiArOTEsNyBAQAogCiAgICAgICAgICMgRGlzYWJsZSBzZXJ2ZXIgZmVlZGJhY2sKICAgICAgICAgRG9jWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBGYWxzZQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAKICAgICBkZWYgdGVzdF92YWxpZF9nZXRfcmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKQEAgLTEwNiwzNiArMTIyLDY4IEBACiAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKAotIiIiPGRsPjxkdD48YSBuYW1lPSItJmx0O2xhbWJkYSZndDsiPjxzdHJvbmc+Jmx0O2xhbWJkYSZndDs8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48L2RsPiIiIgotICAgICAgICAgICAgaW4gcmVzcG9uc2UucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCc8ZGw+PGR0PjxhIG5hbWU9Ii0mbHQ7bGFtYmRhJmd0OyI+PHN0cm9uZz4nCisgICAgICAgICAgICAgICAgICAgICAgJyZsdDtsYW1iZGEmZ3Q7PC9zdHJvbmc+PC9hPih4LCB5KTwvZHQ+PC9kbD4nLAorICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKSkKIAorICAgIEBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfYXV0b2xpbmtpbmcoc2VsZik6Ci0gICAgICAgICIiIlRlc3QgdGhhdCB0aGUgc2VydmVyIGNvcnJlY3RseSBhdXRvbWF0aWNhbGx5IHdyYXBzIHJlZmVyZW5jZXMgdG8gUEVQUwotICAgICAgICBhbmQgUkZDcyB3aXRoIGxpbmtzLCBhbmQgdGhhdCBpdCBsaW5raWZpZXMgdGV4dCBzdGFydGluZyB3aXRoIGh0dHAgb3IKLSAgICAgICAgZnRwIHByb3RvY29sIHByZWZpeGVzLgorICAgICAgICAiIiJUZXN0IHRoYXQgdGhlIHNlcnZlciBjb3JyZWN0bHkgYXV0b21hdGljYWxseSB3cmFwcyByZWZlcmVuY2VzIHRvCisgICAgICAgIFBFUFMgYW5kIFJGQ3Mgd2l0aCBsaW5rcywgYW5kIHRoYXQgaXQgbGlua2lmaWVzIHRleHQgc3RhcnRpbmcgd2l0aAorICAgICAgICBodHRwIG9yIGZ0cCBwcm90b2NvbCBwcmVmaXhlcy4KIAogICAgICAgICBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICJhZGQiIG1ldGhvZCBjb250YWlucyB0aGUgdGVzdCBtYXRlcmlhbC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCAjIFRoaXMgaXMgdWdseSAuLi4gaG93IGNhbiBpdCBiZSBtYWRlIGJldHRlcj8KLSIiIjxkbD48ZHQ+PGEgbmFtZT0iLWFkZCI+PHN0cm9uZz5hZGQ8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48ZGQ+PHR0PkFkZCZuYnNwO3R3byZuYnNwO2luc3RhbmNlcyZuYnNwO3RvZ2V0aGVyLiZuYnNwO1RoaXMmbmJzcDtmb2xsb3dzJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMDA4LyI+UEVQMDA4PC9hPiwmbmJzcDtidXQmbmJzcDtoYXMmbmJzcDtub3RoaW5nPGJyPlxudG8mbmJzcDtkbyZuYnNwO3dpdGgmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxOTUyLnR4dCI+UkZDMTk1MjwvYT4uJm5ic3A7Q2FzZSZuYnNwO3Nob3VsZCZuYnNwO21hdHRlcjombmJzcDtwRXAwMDgmbmJzcDthbmQmbmJzcDtyRkMxOTUyLiZuYnNwOyZuYnNwO1RoaW5nczxicj5cbnRoYXQmbmJzcDtzdGFydCZuYnNwO3dpdGgmbmJzcDtodHRwJm5ic3A7YW5kJm5ic3A7ZnRwJm5ic3A7c2hvdWxkJm5ic3A7YmUmbmJzcDthdXRvLWxpbmtlZCwmbmJzcDt0b286PGJyPlxuPGEgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20iPmh0dHA6Ly9nb29nbGUuY29tPC9hPi48L3R0PjwvZGQ+PC9kbD4iIiIKLSAgICAgICAgICBpbiByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICAoJzxkbD48ZHQ+PGEgbmFtZT0iLWFkZCI+PHN0cm9uZz5hZGQ8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48ZGQ+JworICAgICAgICAgICAgICc8dHQ+QWRkJm5ic3A7dHdvJm5ic3A7aW5zdGFuY2VzJm5ic3A7dG9nZXRoZXIuJm5ic3A7VGhpcyZuYnNwOycKKyAgICAgICAgICAgICAnZm9sbG93cyZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8iPicKKyAgICAgICAgICAgICAnUEVQMDA4PC9hPiwmbmJzcDtidXQmbmJzcDtoYXMmbmJzcDtub3RoaW5nPGJyPlxudG8mbmJzcDtkbyZuYnNwOycKKyAgICAgICAgICAgICAnd2l0aCZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzE5NTIudHh0Ij4nCisgICAgICAgICAgICAgJ1JGQzE5NTI8L2E+LiZuYnNwO0Nhc2UmbmJzcDtzaG91bGQmbmJzcDttYXR0ZXI6Jm5ic3A7cEVwMDA4Jm5ic3A7JworICAgICAgICAgICAgICdhbmQmbmJzcDtyRkMxOTUyLiZuYnNwOyZuYnNwO1RoaW5nczxicj5cbnRoYXQmbmJzcDtzdGFydCZuYnNwOycKKyAgICAgICAgICAgICAnd2l0aCZuYnNwO2h0dHAmbmJzcDthbmQmbmJzcDtmdHAmbmJzcDtzaG91bGQmbmJzcDtiZSZuYnNwOycKKyAgICAgICAgICAgICAnYXV0by1saW5rZWQsJm5ic3A7dG9vOjxicj5cbjxhIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj4nCisgICAgICAgICAgICAgJ2h0dHA6Ly9nb29nbGUuY29tPC9hPi48L3R0PjwvZGQ+PC9kbD4nKSwgcmVzcG9uc2UucmVhZCgpKQogCisgICAgQG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9zeXN0ZW1fbWV0aG9kcyhzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGUgcHJlY2Vuc2Ugb2YgdGhyZWUgY29uc2VjdXRpdmUgc3lzdGVtLiogbWV0aG9kcy4KIAotICAgICAgICBUaGlzIGFsc28gdGVzdHMgdGhlaXIgdXNlIG9mIHBhcmFtZXRlciB0eXBlIHJlY29nbml0aW9uIGFuZCB0aGUgc3lzdGVtcwotICAgICAgICByZWxhdGVkIHRvIHRoYXQgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBhbHNvIHRlc3RzIHRoZWlyIHVzZSBvZiBwYXJhbWV0ZXIgdHlwZSByZWNvZ25pdGlvbiBhbmQgdGhlCisgICAgICAgIHN5c3RlbXMgcmVsYXRlZCB0byB0aGF0IHByb2Nlc3MuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygKLSIiIjxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5saXN0TWV0aG9kcyI+PHN0cm9uZz5zeXN0ZW0ubGlzdE1ldGhvZHM8L3N0cm9uZz48L2E+KCk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubGlzdE1ldGhvZHMiPnN5c3RlbS5saXN0TWV0aG9kczwvYT4oKSZuYnNwOz0mZ3Q7Jm5ic3A7W1wnYWRkXCcsJm5ic3A7XCdzdWJ0cmFjdFwnLCZuYnNwO1wnbXVsdGlwbGVcJ108YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJm5ic3A7YSZuYnNwO2xpc3QmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO21ldGhvZHMmbmJzcDtzdXBwb3J0ZWQmbmJzcDtieSZuYnNwO3RoZSZuYnNwO3NlcnZlci48L3R0PjwvZGQ+PC9kbD5cbiA8ZGw+PGR0PjxhIG5hbWU9Ii1zeXN0ZW0ubWV0aG9kSGVscCI+PHN0cm9uZz5zeXN0ZW0ubWV0aG9kSGVscDwvc3Ryb25nPjwvYT4obWV0aG9kX25hbWUpPC9kdD48ZGQ+PHR0PjxhIGhyZWY9IiMtc3lzdGVtLm1ldGhvZEhlbHAiPnN5c3RlbS5tZXRob2RIZWxwPC9hPihcJ2FkZFwnKSZuYnNwOz0mZ3Q7Jm5ic3A7IkFkZHMmbmJzcDt0d28mbmJzcDtpbnRlZ2VycyZuYnNwO3RvZ2V0aGVyIjxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7c3RyaW5nJm5ic3A7Y29udGFpbmluZyZuYnNwO2RvY3VtZW50YXRpb24mbmJzcDtmb3ImbmJzcDt0aGUmbmJzcDtzcGVjaWZpZWQmbmJzcDttZXRob2QuPC90dD48L2RkPjwvZGw+XG4gPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSI+PHN0cm9uZz5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9hPihcJ2FkZFwnKSZuYnNwOz0mZ3Q7Jm5ic3A7W2RvdWJsZSwmbmJzcDtpbnQsJm5ic3A7aW50XTxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7bGlzdCZuYnNwO2Rlc2NyaWJpbmcmbmJzcDt0aGUmbmJzcDtzaWduYXR1cmUmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO21ldGhvZC4mbmJzcDtJbiZuYnNwO3RoZTxicj5cbmFib3ZlJm5ic3A7ZXhhbXBsZSwmbmJzcDt0aGUmbmJzcDthZGQmbmJzcDttZXRob2QmbmJzcDt0YWtlcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJm5ic3A7YXMmbmJzcDthcmd1bWVudHM8YnI+XG5hbmQmbmJzcDtyZXR1cm5zJm5ic3A7YSZuYnNwO2RvdWJsZSZuYnNwO3Jlc3VsdC48YnI+XG4mbmJzcDs8YnI+XG5UaGlzJm5ic3A7c2VydmVyJm5ic3A7ZG9lcyZuYnNwO05PVCZuYnNwO3N1cHBvcnQmbmJzcDtzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlLjwvdHQ+PC9kZD48L2RsPiIiIgotICAgICAgICAgICAgaW4gcmVzcG9uc2UucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgKCc8ZGw+PGR0PjxhIG5hbWU9Ii1zeXN0ZW0ubGlzdE1ldGhvZHMiPjxzdHJvbmc+c3lzdGVtLmxpc3RNZXRob2RzJworICAgICAgICAgICAgICc8L3N0cm9uZz48L2E+KCk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubGlzdE1ldGhvZHMiPnN5c3RlbScKKyAgICAgICAgICAgICAnLmxpc3RNZXRob2RzPC9hPigpJm5ic3A7PSZndDsmbmJzcDtbXCdhZGRcJywmbmJzcDtcJ3N1YnRyYWN0XCcsJworICAgICAgICAgICAgICcmbmJzcDtcJ211bHRpcGxlXCddPGJyPlxuJm5ic3A7PGJyPlxuUmV0dXJucyZuYnNwO2EmbmJzcDtsaXN0JworICAgICAgICAgICAgICcmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO21ldGhvZHMmbmJzcDtzdXBwb3J0ZWQmbmJzcDtieSZuYnNwO3RoZScKKyAgICAgICAgICAgICAnJm5ic3A7c2VydmVyLjwvdHQ+PC9kZD48L2RsPlxuIDxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5tZXRob2RIZWxwIj4nCisgICAgICAgICAgICAgJzxzdHJvbmc+c3lzdGVtLm1ldGhvZEhlbHA8L3N0cm9uZz48L2E+KG1ldGhvZF9uYW1lKTwvZHQ+PGRkPjx0dD4nCisgICAgICAgICAgICAgJzxhIGhyZWY9IiMtc3lzdGVtLm1ldGhvZEhlbHAiPnN5c3RlbS5tZXRob2RIZWxwPC9hPihcJ2FkZFwnKSZuYnNwOycKKyAgICAgICAgICAgICAnPSZndDsmbmJzcDsiQWRkcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJm5ic3A7dG9nZXRoZXIiPGJyPlxuJm5ic3A7JworICAgICAgICAgICAgICc8YnI+XG5SZXR1cm5zJm5ic3A7YSZuYnNwO3N0cmluZyZuYnNwO2NvbnRhaW5pbmcmbmJzcDtkb2N1bWVudGF0aW9uJworICAgICAgICAgICAgICcmbmJzcDtmb3ImbmJzcDt0aGUmbmJzcDtzcGVjaWZpZWQmbmJzcDttZXRob2QuPC90dD48L2RkPjwvZGw+XG4gJworICAgICAgICAgICAgICc8ZGw+PGR0PjxhIG5hbWU9Ii1zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj48c3Ryb25nPnN5c3RlbS4nCisgICAgICAgICAgICAgJ21ldGhvZFNpZ25hdHVyZTwvc3Ryb25nPjwvYT4obWV0aG9kX25hbWUpPC9kdD48ZGQ+PHR0PjxhIGhyZWY9IiMtJworICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9hPihcJ2FkZFwnKSZuYnNwOycKKyAgICAgICAgICAgICAnPSZndDsmbmJzcDtbZG91YmxlLCZuYnNwO2ludCwmbmJzcDtpbnRdPGJyPlxuJm5ic3A7PGJyPlxuUmV0dXJucycKKyAgICAgICAgICAgICAnJm5ic3A7YSZuYnNwO2xpc3QmbmJzcDtkZXNjcmliaW5nJm5ic3A7dGhlJm5ic3A7c2lnbmF0dXJlJm5ic3A7b2YnCisgICAgICAgICAgICAgJyZuYnNwO3RoZSZuYnNwO21ldGhvZC4mbmJzcDtJbiZuYnNwO3RoZTxicj5cbmFib3ZlJm5ic3A7ZXhhbXBsZSwnCisgICAgICAgICAgICAgJyZuYnNwO3RoZSZuYnNwO2FkZCZuYnNwO21ldGhvZCZuYnNwO3Rha2VzJm5ic3A7dHdvJm5ic3A7aW50ZWdlcnMnCisgICAgICAgICAgICAgJyZuYnNwO2FzJm5ic3A7YXJndW1lbnRzPGJyPlxuYW5kJm5ic3A7cmV0dXJucyZuYnNwO2EmbmJzcDtkb3VibGUnCisgICAgICAgICAgICAgJyZuYnNwO3Jlc3VsdC48YnI+XG4mbmJzcDs8YnI+XG5UaGlzJm5ic3A7c2VydmVyJm5ic3A7ZG9lcyZuYnNwOycKKyAgICAgICAgICAgICAnTk9UJm5ic3A7c3VwcG9ydCZuYnNwO3N5c3RlbS5tZXRob2RTaWduYXR1cmUuPC90dD48L2RkPjwvZGw+JyksCisgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCiAKICAgICBkZWYgdGVzdF9hdXRvbGlua19kb3R0ZWRfbWV0aG9kcyhzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGF0IHNlbGZkb3QgdmFsdWVzIGFyZSBtYWRlIHN0cm9uZyBhdXRvbWF0aWNhbGx5IGluIHRoZQpAQCAtMTQzLDggKzE5MSw4IEBACiAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIiIlRyeSZuYnNwO3NlbGYuPHN0cm9uZz5hZGQ8L3N0cm9uZz4sJm5ic3A7dG9vLiIiIiBpbgotICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCIiIlRyeSZuYnNwO3NlbGYuPHN0cm9uZz5hZGQ8L3N0cm9uZz4sJm5ic3A7dG9vLiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KERvY1hNTFJQQ0hUVFBHRVRTZXJ2ZXIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weSBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CmluZGV4IDU4ZmFlYjQuLmQ5YmRkM2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CkBAIC0yNCw0MyArMjQsNDMgQEAKIAogICAgIGRlZiB0ZXN0X2luaXRsb2NrKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIGxvY2tzIHN0YXJ0IGxvY2tlZAotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHNlbGYubG9jay5sb2NrZWQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jayBvYmplY3QgaXMgbm90IGluaXRpYWxpemVkIHVubG9ja2VkLiIpCiAKICAgICBkZWYgdGVzdF9yZWxlYXNlKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2VsZi5sb2NrLnJlbGVhc2UoKQogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5sb2NrLmxvY2tlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2sgb2JqZWN0IGRpZCBub3QgcmVsZWFzZSBwcm9wZXJseS4iKQogCiAgICAgZGVmIHRlc3RfaW1wcm9wZXJfcmVsZWFzZShzZWxmKToKICAgICAgICAgI01ha2Ugc3VyZSByZWxlYXNlIG9mIGFuIHVubG9ja2VkIHRocmVhZCByYWlzZXMgX3RocmVhZC5lcnJvcgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoX3RocmVhZC5lcnJvciwgc2VsZi5sb2NrLnJlbGVhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKF90aHJlYWQuZXJyb3IsIHNlbGYubG9jay5yZWxlYXNlKQogCiAgICAgZGVmIHRlc3RfY29uZF9hY3F1aXJlX3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgdGhlIGNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiB0aGUgbG9jayB3b3Jrcy4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYubG9jay5hY3F1aXJlKDApLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2NrLmFjcXVpcmUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uZGl0aW9uYWwgYWNxdWlyaW5nIG9mIHRoZSBsb2NrIGZhaWxlZC4iKQogCiAgICAgZGVmIHRlc3RfY29uZF9hY3F1aXJlX2ZhaWwoc2VsZik6CiAgICAgICAgICNUZXN0IGFjcXVpcmluZyBsb2NrZWQgbG9jayByZXR1cm5zIEZhbHNlCiAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3Qgc2VsZi5sb2NrLmFjcXVpcmUoMCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5sb2NrLmFjcXVpcmUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uZGl0aW9uYWwgYWNxdWlyaW5nIG9mIGEgbG9ja2VkIGxvY2sgaW5jb3JyZWN0bHkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICJzdWNjZWVkZWQuIikKIAogICAgIGRlZiB0ZXN0X3VuY29uZF9hY3F1aXJlX3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgdW5jb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrIHdvcmtzLgogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzZWxmLmxvY2subG9ja2VkKCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvY2subG9ja2VkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5jb25kaW9uYWwgbG9ja2luZyBmYWlsZWQuIikKIAogICAgIGRlZiB0ZXN0X3VuY29uZF9hY3F1aXJlX3JldHVybl92YWwoc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgdGhhdCBhbiB1bmNvbmRpdGlvbmFsIGxvY2tpbmcgcmV0dXJucyBUcnVlLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5sb2NrLmFjcXVpcmUoMSkgaXMgVHJ1ZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKDEpIGlzIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5jb25kaXRpb25hbCBsb2NraW5nIGRpZCBub3QgcmV0dXJuIFRydWUuIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNlbGYubG9jay5hY3F1aXJlKCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKCkgaXMgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X3VuY29uZF9hY3F1aXJlX2Jsb2NraW5nKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIHRoYXQgdW5jb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrZWQgbG9jayBibG9ja3MuCkBAIC04MCw3ICs4MCw3IEBACiAgICAgICAgIGVuZF90aW1lID0gaW50KHRpbWUudGltZSgpKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICJkb25lIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoKGVuZF90aW1lIC0gc3RhcnRfdGltZSkgPj0gREVMQVksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kX3RpbWUgLSBzdGFydF90aW1lKSA+PSBERUxBWSwKICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9ja2luZyBieSB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBmYWlsZWQuIikKIAogY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg4LDMzICs4OCwzMyBAQAogCiAgICAgZGVmIHRlc3RfZXhpdChzZWxmKToKICAgICAgICAgI01ha2Ugc3VyZSBfdGhyZWFkLmV4aXQoKSByYWlzZXMgU3lzdGVtRXhpdAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoU3lzdGVtRXhpdCwgX3RocmVhZC5leGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBfdGhyZWFkLmV4aXQpCiAKICAgICBkZWYgdGVzdF9pZGVudChzZWxmKToKICAgICAgICAgI1Rlc3Qgc2FuaXR5IG9mIF90aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLmdldF9pZGVudCgpIHJldHVybmVkIGEgbm9uLWludGVnZXIiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoX3RocmVhZC5nZXRfaWRlbnQoKSAhPSAwLAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgYSBub24taW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfdGhyZWFkLmdldF9pZGVudCgpICE9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX3RocmVhZC5nZXRfaWRlbnQoKSByZXR1cm5lZCAwIikKIAogICAgIGRlZiB0ZXN0X0xvY2tUeXBlKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIF90aHJlYWQuTG9ja1R5cGUgaXMgdGhlIHNhbWUgdHlwZSBhcyBfdGhyZWFkLmFsbG9jYXRlX2xvY2tlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCksIF90aHJlYWQuTG9ja1R5cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuTG9ja1R5cGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIHdoYXQgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSwgX3RocmVhZC5Mb2NrVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLkxvY2tUeXBlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiB3aGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyByZXR1cm5lZCBieSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSIpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfbWFpbihzZWxmKToKICAgICAgICAgI0NhbGxpbmcgc3RhcnRfbmV3X3RocmVhZCB3aXRoIGEgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBpbnRlcnJ1cHRfbWFpbgogICAgICAgICAjIHNob3VsZCByYWlzZSBLZXlib2FyZEludGVycnVwdCB1cG9uIGNvbXBsZXRpb24uCiAgICAgICAgIGRlZiBjYWxsX2ludGVycnVwdCgpOgogICAgICAgICAgICAgX3RocmVhZC5pbnRlcnJ1cHRfbWFpbigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhLZXlib2FyZEludGVycnVwdCwgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF9pbnRlcnJ1cHQsIHR1cGxlKCkpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfaW5fbWFpbihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpZiBpbnRlcnJ1cHRfbWFpbiBpcyBjYWxsZWQgaW4gbWFpbiB0aHJlYXQgdGhhdAogICAgICAgICAjIEtleWJvYXJkSW50ZXJydXB0IGlzIHJhaXNlZCBpbnN0YW50bHkuCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhLZXlib2FyZEludGVycnVwdCwgX3RocmVhZC5pbnRlcnJ1cHRfbWFpbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIF90aHJlYWQuaW50ZXJydXB0X21haW4pCiAKIGNsYXNzIFRocmVhZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IHRocmVhZCBjcmVhdGlvbi4iIiIKQEAgLTEyOCwxNiArMTI4LDE2IEBACiAgICAgICAgIHRlc3RpbmdfcXVldWUgPSBRdWV1ZS5RdWV1ZSgxKQogICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYXJnX3Rlc3RlciwgKHRlc3RpbmdfcXVldWUsIFRydWUsIFRydWUpKQogICAgICAgICByZXN1bHQgPSB0ZXN0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IHBhc3NpbmcgZm9yIHRocmVhZCBjcmVhdGlvbiB1c2luZyB0dXBsZSBmYWlsZWQiKQogICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoYXJnX3Rlc3RlciwgdHVwbGUoKSwgeydxdWV1ZSc6dGVzdGluZ19xdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJnMSc6VHJ1ZSwgJ2FyZzInOlRydWV9KQogICAgICAgICByZXN1bHQgPSB0ZXN0aW5nX3F1ZXVlLmdldCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IHBhc3NpbmcgZm9yIHRocmVhZCBjcmVhdGlvbiB1c2luZyBrd2FyZ3MgZmFpbGVkIikKICAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKGFyZ190ZXN0ZXIsICh0ZXN0aW5nX3F1ZXVlLCBUcnVlKSwgeydhcmcyJzpUcnVlfSkKICAgICAgICAgcmVzdWx0ID0gdGVzdGluZ19xdWV1ZS5nZXQoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHRbMF0gYW5kIHJlc3VsdFsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBwYXNzaW5nIGZvciB0aHJlYWQgY3JlYXRpb24gdXNpbmcgYm90aCB0dXBsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICIgYW5kIGt3YXJncyBmYWlsZWQiKQogCkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgdGltZS5zbGVlcChERUxBWSkKICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnZG9uZScKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHRlc3RpbmdfcXVldWUucXNpemUoKSA9PSB0aHJlYWRfY291bnQsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0aW5nX3F1ZXVlLnFzaXplKCkgPT0gdGhyZWFkX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCBhbGwgJXMgdGhyZWFkcyBleGVjdXRlZCBwcm9wZXJseSBhZnRlciAlcyBzZWMuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAodGhyZWFkX2NvdW50LCBERUxBWSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKaW5kZXggMzUyMmI0Zi4uNmI5ZmY3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW51bSwgJ2FiYycsICdhJykgIyB3cm9uZyB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCAnYWJjJywgMiwgMykgIyB0b28gbWFueSBhcmd1bWVudHMKIAorICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdHVwbGVfcmV1c2Uoc2VsZik6CiAgICAgICAgICMgVGVzdHMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHdoZXJlIHR1cGxlIGlzIHJldXNlZAogICAgICAgICAjIHdoZW5ldmVyIG5vdGhpbmcgZWxzZSBob2xkcyBhIHJlZmVyZW5jZSB0byBpdApAQCAtMTQxLDEwICsxNDIsMTcgQEAKICAgICAgICAgIyBkb24ndCBhbGxvdyBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBbXSwgYT0xKQogCisgICAgZGVmIHRlc3RfY2xhc3NpY19jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCAxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQoQSgpKSksIFsyLCAxXSkKKwogICAgIGRlZiB0ZXN0X3hyYW5nZV9vcHRpbWl6YXRpb24oc2VsZik6CiAgICAgICAgIHggPSB4cmFuZ2UoMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJldmVyc2VkKHgpKSwgdHlwZShpdGVyKHgpKSkKIAorICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgogICAgICAgICAjIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgYW4gaW50ZXJmYWNlIHJlcXVpcmVtZW50CiAgICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgpAQCAtMTk4LDYgKzIwNiwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm9uLWNhbGxhYmxlIF9fcmV2ZXJzZWRfXyBkaWRuJ3QgcmFpc2UhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgc3lzLmdldHJlZmNvdW50KHIpKQogCisgICAgZGVmIHRlc3Rfb2JqbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBPYmplY3RzIG11c3QgaGF2ZSBfX2xlbl9fKCkgYW5kIF9fZ2V0aXRlbV9fKCkgaW1wbGVtZW50ZWQuCisgICAgICAgIGNsYXNzIE5vTGVuKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZik6IHJldHVybiAxCisgICAgICAgIG5sID0gTm9MZW4oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBubCkKKworICAgICAgICBjbGFzcyBOb0dldEl0ZW0ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gMgorICAgICAgICBuZ2kgPSBOb0dldEl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJldmVyc2VkLCBuZ2kpCisKIAogY2xhc3MgRW51bWVyYXRlU3RhcnRUZXN0Q2FzZShFbnVtZXJhdGVUZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IGFhYjJjNmIuLjIxNmUyYzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMjEsMjMgKzIxLDIxIEBACiAiIiIKIFRlc3RzIGZvciBlcG9sbCB3cmFwcGVyLgogIiIiCi1pbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBlcnJubwogaW1wb3J0IHRpbWUKIGltcG9ydCBzZWxlY3QKLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpZiBub3QgaGFzYXR0cihzZWxlY3QsICJlcG9sbCIpOgotICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgidGVzdCB3b3JrcyBvbmx5IG9uIExpbnV4IDIuNiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInRlc3Qgd29ya3Mgb25seSBvbiBMaW51eCAyLjYiKQogCiB0cnk6CiAgICAgc2VsZWN0LmVwb2xsKCkKIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgotICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQoImtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgZXBvbGwoKSIpCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQogCiBjbGFzcyBUZXN0RVBvbGwodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC01OCw3ICs1Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VsZi5zZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKICAgICAgICAgc2VydmVyLCBhZGRyID0gc2VsZi5zZXJ2ZXJTb2NrZXQuYWNjZXB0KCkKQEAgLTcxLDEwICs2OSwxMCBAQAogICAgICAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMTYpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3Ioc3RyKGUpKQotICAgICAgICBzZWxmLmFzc2VydF8oZXAuZmlsZW5vKCkgPiAwLCBlcC5maWxlbm8oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBlcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcC5maWxlbm8oKSA+IDAsIGVwLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGVwLmNsb3NlZCkKICAgICAgICAgZXAuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCiAKICAgICBkZWYgdGVzdF9iYWRjcmVhdGUoc2VsZik6CkBAIC0xNDEsNyArMTM5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXAyLnBvbGwoMSwgNCkKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVCQURGLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVCQURGLCBlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJlcG9sbCBvbiBjbG9zZWQgZmQgZGlkbid0IHJhaXNlIEVCQURGIikKIApAQCAtMTU3LDIwICsxNTUsMjAgQEAKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQogICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsSWYodGhlbiAtIG5vdyA+IDAuMSwgdGhlbiAtIG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKICAgICAgICAgZXhwZWN0ZWQgPSBbKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKSwKICAgICAgICAgICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKV0KICAgICAgICAgZXhwZWN0ZWQuc29ydCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzLCBleHBlY3RlZCkKLSAgICAgICAgc2VsZi5mYWlsSWYodGhlbiAtIG5vdyA+IDAuMDEsIHRoZW4gLSBub3cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKIAogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKHRpbWVvdXQ9Mi4xLCBtYXhldmVudHM9NCkKICAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbElmKGV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldmVudHMpCiAKICAgICAgICAgY2xpZW50LnNlbmQoIkhlbGxvISIpCiAgICAgICAgIHNlcnZlci5zZW5kKCJ3b3JsZCEhISIpCkBAIC0xNzgsMjQgKzE3NiwyNCBAQAogICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCiAgICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQotICAgICAgICBzZWxmLmZhaWxJZih0aGVuIC0gbm93ID4gMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKIAogICAgICAgICBldmVudHMuc29ydCgpCiAgICAgICAgIGV4cGVjdGVkID0gWyhjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKSwKICAgICAgICAgICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpXQogICAgICAgICBleHBlY3RlZC5zb3J0KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhldmVudHMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCiAKICAgICAgICAgZXAudW5yZWdpc3RlcihjbGllbnQuZmlsZW5vKCkpCiAgICAgICAgIGVwLm1vZGlmeShzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5FUE9MTE9VVCkKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQogICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsSWYodGhlbiAtIG5vdyA+IDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCiAKICAgICAgICAgZXhwZWN0ZWQgPSBbKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxlY3QuZXBvbGwsIC0yKQpAQCAtMjExLDcgKzIwOSw3IEBACiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKICAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbElmKHRoZW4gLSBub3cgPiAwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxKQogCiAgICAgICAgIHNlcnZlci5jbG9zZSgpCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoZmQpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5IGIvTGliL3Rlc3QvdGVzdF9lcnJuby5weQppbmRleCA5NTIzOTA3Li5iYjg5MThmIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKQEAgLTE0LDEzICsxNCwxMyBAQAogICAgIGRlZiB0ZXN0X2Zvcl9pbXByb3Blcl9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIE5vIHVuZXhwZWN0ZWQgYXR0cmlidXRlcyBzaG91bGQgYmUgb24gdGhlIG1vZHVsZS4KICAgICAgICAgZm9yIGVycm9yX2NvZGUgaW4gc3RkX2NfZXJyb3JzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoZXJybm8sIGVycm9yX2NvZGUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJybm8sIGVycm9yX2NvZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJubyBpcyBtaXNzaW5nICVzIiAlIGVycm9yX2NvZGUpCiAKICAgICBkZWYgdGVzdF91c2luZ19lcnJvcmNvZGUoc2VsZik6CiAgICAgICAgICMgRXZlcnkga2V5IHZhbHVlIGluIGVycm5vLmVycm9yY29kZSBzaG91bGQgYmUgb24gdGhlIG1vZHVsZS4KICAgICAgICAgZm9yIHZhbHVlIGluIGVycm5vLmVycm9yY29kZS5pdGVydmFsdWVzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihlcnJubywgdmFsdWUpLCAnbm8gJXMgYXR0ciBpbiBlcnJubycgJSB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVycm5vLCB2YWx1ZSksICdubyAlcyBhdHRyIGluIGVycm5vJyAlIHZhbHVlKQogCiAKIGNsYXNzIEVycm9yY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI4LDggKzI4LDggQEAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX2luX2Vycm9yY29kZShzZWxmKToKICAgICAgICAgZm9yIGF0dHJpYnV0ZSBpbiBlcnJuby5fX2RpY3RfXy5pdGVya2V5cygpOgogICAgICAgICAgICAgaWYgYXR0cmlidXRlLmlzdXBwZXIoKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZ2V0YXR0cihlcnJubywgYXR0cmlidXRlKSBpbiBlcnJuby5lcnJvcmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyAlcyBhdHRyIGluIGVycm5vLmVycm9yY29kZScgJSBhdHRyaWJ1dGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihnZXRhdHRyKGVycm5vLCBhdHRyaWJ1dGUpLCBlcnJuby5lcnJvcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gJXMgYXR0ciBpbiBlcnJuby5lcnJvcmNvZGUnICUgYXR0cmlidXRlKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCBkY2RkODg1Li5hMTljODJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHBpY2tsZSwgY1BpY2tsZQogCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCB1bmxpbmssIHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHkpCiBmcm9tIHRlc3QudGVzdF9wZXAzNTIgaW1wb3J0IGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncwogCiAjIFhYWCBUaGlzIGlzIG5vdCByZWFsbHkgZW5vdWdoLCBlYWNoICpvcGVyYXRpb24qIHNob3VsZCBiZSB0ZXN0ZWQhCkBAIC0zMiw4ICszMiw4IEBACiAgICAgICAgICAgICByYWlzZSBleGMoInNwYW0iKQogICAgICAgICBleGNlcHQgZXhjLCBlcnI6CiAgICAgICAgICAgICBidWYyID0gc3RyKGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmMSwgYnVmMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhjLl9fbmFtZV9fLCBleGNuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZjEsIGJ1ZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLl9fbmFtZV9fLCBleGNuYW1lKQogCiAgICAgZGVmIHRlc3RSYWlzaW5nKHNlbGYpOgogICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKEF0dHJpYnV0ZUVycm9yLCAiQXR0cmlidXRlRXJyb3IiKQpAQCAtMTQ3LDYgKzE0Nyw3IEBACiAgICAgICAgIGNrbXNnKHMsICInY29udGludWUnIG5vdCBwcm9wZXJseSBpbiBsb29wIikKICAgICAgICAgY2ttc2coImNvbnRpbnVlXG4iLCAiJ2NvbnRpbnVlJyBub3QgcHJvcGVybHkgaW4gbG9vcCIpCiAKKyAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RTZXR0aW5nRXhjZXB0aW9uKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBzZXR0aW5nIGFuIGV4Y2VwdGlvbiBhdCB0aGUgQyBsZXZlbCB3b3JrcyBldmVuIGlmIHRoZQogICAgICAgICAjIGV4Y2VwdGlvbiBvYmplY3QgY2FuJ3QgYmUgY29uc3RydWN0ZWQuCkBAIC0xNjIsOCArMTYzLDggQEAKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKICAgICAgICAgICAgICAgICBleGMsIGVyciwgdGIgPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgICAgIGNvID0gdGIudGJfZnJhbWUuZl9jb2RlCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY28uY29fbmFtZSwgInRlc3RfY2FwaTEiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjby5jb19maWxlbmFtZS5lbmRzd2l0aCgndGVzdF9leGNlcHRpb25zJytvcy5leHRzZXArJ3B5JykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAidGVzdF9jYXBpMSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBleGNlcHRpb24iKQogCkBAIC0xNzQsMTAgKzE3NSwxMCBAQAogICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZXJyOgogICAgICAgICAgICAgICAgIGV4YywgZXJyLCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICAgICAgY28gPSB0Yi50Yl9mcmFtZS5mX2NvZGUKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjby5jb19uYW1lLCAiX19pbml0X18iKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjby5jb19maWxlbmFtZS5lbmRzd2l0aCgndGVzdF9leGNlcHRpb25zJytvcy5leHRzZXArJ3B5JykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAiX19pbml0X18iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjby5jb19maWxlbmFtZS5lbmRzd2l0aCgndGVzdF9leGNlcHRpb25zJytvcy5leHRzZXArJ3B5JykpCiAgICAgICAgICAgICAgICAgY28yID0gdGIudGJfZnJhbWUuZl9iYWNrLmZfY29kZQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNvMi5jb19uYW1lLCAidGVzdF9jYXBpMiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbzIuY29fbmFtZSwgInRlc3RfY2FwaTIiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGV4Y2VwdGlvbiIpCiAKQEAgLTE5MSwxMiArMTkyLDEyIEBACiAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEpKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFdpbmRvd3NFcnJvcigxMDAxKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwMSIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoV2luZG93c0Vycm9yKDEwMDEsICJtZXNzYWdlIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltFcnJvciAxMDAxXSBtZXNzYWdlIikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLmVycm5vLCAyMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLndpbmVycm9yLCAxMDAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXaW5kb3dzRXJyb3IoMTAwMSwgIm1lc3NhZ2UiKS5lcnJubywgMjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLndpbmVycm9yLCAxMDAxKQogCiAgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncwogICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKQEAgLTI4MywxNCArMjg0LDE0IEBACiAgICAgICAgICAgICAgICAgaWYgdHlwZShlKSBpcyBub3QgZXhjOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgICMgVmVyaWZ5IG1vZHVsZSBuYW1lCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHlwZShlKS5fX21vZHVsZV9fLCAnZXhjZXB0aW9ucycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGUpLl9fbW9kdWxlX18sICdleGNlcHRpb25zJykKICAgICAgICAgICAgICAgICAjIFZlcmlmeSBubyByZWYgbGVha3MgaW4gRXhjX3N0cigpCiAgICAgICAgICAgICAgICAgcyA9IHN0cihlKQogICAgICAgICAgICAgICAgIGZvciBjaGVja0FyZ05hbWUgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcHIoZ2V0YXR0cihlLCBjaGVja0FyZ05hbWUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihleHBlY3RlZFtjaGVja0FyZ05hbWVdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbiAiJXMiLCBhdHRyaWJ1dGUgIiVzIicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcHIoZSksIGNoZWNrQXJnTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihnZXRhdHRyKGUsIGNoZWNrQXJnTmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZXhwZWN0ZWRbY2hlY2tBcmdOYW1lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbiAiJXMiLCBhdHRyaWJ1dGUgIiVzIicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwcihlKSwgY2hlY2tBcmdOYW1lKSkKIAogICAgICAgICAgICAgICAgICMgdGVzdCBmb3IgcGlja2xpbmcgc3VwcG9ydAogICAgICAgICAgICAgICAgIGZvciBwIGluIHBpY2tsZSwgY1BpY2tsZToKQEAgLTI5OSw5ICszMDAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNoZWNrQXJnTmFtZSBpbiBleHBlY3RlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSByZXByKGdldGF0dHIobmV3LCBjaGVja0FyZ05hbWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgPSByZXByKGV4cGVjdGVkW2NoZWNrQXJnTmFtZV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ290LCB3YW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaWNrbGVkICIlciIsIGF0dHJpYnV0ZSAiJXMiJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIGNoZWNrQXJnTmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHdhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGlja2xlZCAiJXIiLCBhdHRyaWJ1dGUgIiVzIicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIGNoZWNrQXJnTmFtZSkpCiAKIAogICAgIGRlZiB0ZXN0RGVwcmVjYXRlZE1lc3NhZ2VBdHRyaWJ1dGUoc2VsZik6CkBAIC0zMjMsNyArMzI0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCiAgICAgICAgICMgRGVsZXRpbmcgdGhlIG1lc3NhZ2UgaXMgc3VwcG9ydGVkLCB0b28uCiAgICAgICAgIGRlbCBleGMubWVzc2FnZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgZXhjLCAibWVzc2FnZSIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZXhjLm1lc3NhZ2UKIAogICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKICAgICBkZWYgdGVzdFBpY2tsZU1lc3NhZ2VBdHRyaWJ1dGUoc2VsZik6CkBAIC0zNDMsNyArMzQ1LDcgQEAKICAgICAgICAgIyBnb2luZyB0aHJvdWdoIHRoZSAnYXJncycgYXR0cmlidXRlLgogICAgICAgICBhcmdzID0gKDEsIDIsIDMpCiAgICAgICAgIGV4YyA9IEJhc2VFeGNlcHRpb24oKmFyZ3MpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGV4Y1s6XSwgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNbOl0sIGFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3NbOl0sIGFyZ3MpCiAKICAgICBkZWYgdGVzdEtleXdvcmRBcmdzKHNlbGYpOgpAQCAtMzU3LDcgKzM1OSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYW5jeV9hcmcgPSBmYW5jeV9hcmcKIAogICAgICAgICB4ID0gRGVyaXZlZEV4Y2VwdGlvbihmYW5jeV9hcmc9NDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHguZmFuY3lfYXJnLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZhbmN5X2FyZywgNDIpCiAKICAgICBkZWYgdGVzdEluZmluaXRlUmVjdXJzaW9uKHNlbGYpOgogICAgICAgICBkZWYgZigpOgpAQCAtMzg2LDExICszODgsMTEgQEAKICAgICBkZWYgdGVzdFVuaWNvZGVTdHJVc2FnZShzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgYm90aCBpbnN0YW5jZXMgYW5kIGNsYXNzZXMgaGF2ZSBhIHN0ciBhbmQgdW5pY29kZQogICAgICAgICAjIHJlcHJlc2VudGF0aW9uLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyKEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmljb2RlKEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoRXhjZXB0aW9uKCdhJykpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModW5pY29kZShFeGNlcHRpb24odSdhJykpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModW5pY29kZShFeGNlcHRpb24odSdceGUxJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlKEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoRXhjZXB0aW9uKCdhJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZShFeGNlcHRpb24odSdhJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZShFeGNlcHRpb24odSdceGUxJykpKQogCiAgICAgZGVmIHRlc3RVbmljb2RlQ2hhbmdlQXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgNzMwOS4gVGhpcyB3YXMgYSBjcmFzaGVyLgpAQCAtNDU5LDggKzQ2MSw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICBlLCB2LCB0YiA9IGcoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGUgaXMgUnVudGltZUVycm9yLCBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCIgaW4gc3RyKHYpLCB2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUgaXMgUnVudGltZUVycm9yLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiLCBzdHIodikpCiAKIAogCkBAIC01NzAsNiArNTcyLDQ2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc3RyLCBlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoZSksIHUnZlx4ZjZceGY2JykKIAorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2l0aF9kb2Moc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgZG9jMiA9ICJUaGlzIGlzIGEgdGVzdCBkb2NzdHJpbmcuIgorICAgICAgICBkb2M0ID0gIlRoaXMgaXMgYW5vdGhlciB0ZXN0IGRvY3N0cmluZy4iCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yMSIpCisKKyAgICAgICAgIyB0ZXN0IGJhc2ljIHVzYWdlIG9mIFB5RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICBlcnJvcjEgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXJyb3IxKSwgdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3IxLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnJvcjEuX19kb2NfXykKKworICAgICAgICAjIHRlc3Qgd2l0aCBnaXZlbiBkb2NzdHJpbmcKKyAgICAgICAgZXJyb3IyID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3IyIiwgZG9jMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjIuX19kb2NfXywgZG9jMikKKworICAgICAgICAjIHRlc3Qgd2l0aCBleHBsaWNpdCBiYXNlICh3aXRob3V0IGRvY3N0cmluZykKKyAgICAgICAgZXJyb3IzID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3IzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U9ZXJyb3IyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjMsIGVycm9yMikpCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZXhwbGljaXQgYmFzZSB0dXBsZQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVycm9yNCA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yNCIsIGRvYzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IzLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3I0LCBlcnJvcjMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjQsIEMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yNC5fX2RvY19fLCBkb2M0KQorCisgICAgICAgICMgdGVzdCB3aXRoIGV4cGxpY2l0IGRpY3Rpb25hcnkKKyAgICAgICAgZXJyb3I1ID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3I1IiwgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjQsIHsnYSc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjUsIGVycm9yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I1LmEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I1Ll9fZG9jX18sICIiKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoRXhjZXB0aW9uVGVzdHMsIFRlc3RTYW1lU3RyQW5kVW5pY29kZU1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weSBiL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQppbmRleCBmNGFiMjA0Li45NTBhYzI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CkBAIC0xLDQgKzEsNSBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKwogIiIiRG9jdGVzdCBmb3IgbWV0aG9kL2Z1bmN0aW9uIGNhbGxzLgogCiBXZSdyZSBnb2luZyB0aGUgdXNlIHRoZXNlIHR5cGVzIGZvciBleHRyYSB0ZXN0aW5nCkBAIC0yNTEsMTMgKzI1Miw1MCBAQAogICAgICAgLi4uCiAgICAgVHlwZUVycm9yOiBpZCgpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzCiAKK0EgY29ybmVyIGNhc2Ugb2Yga2V5d29yZCBkaWN0aW9uYXJ5IGl0ZW1zIGJlaW5nIGRlbGV0ZWQgZHVyaW5nCit0aGUgZnVuY3Rpb24gY2FsbCBzZXR1cC4gU2VlIDxodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAxNj4uCisKKyAgICA+Pj4gY2xhc3MgTmFtZShzdHIpOgorICAgIC4uLiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgICAgZGVsIHhbc2VsZl0KKyAgICAuLi4gICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgLi4uICAgICAgICAgICAgICBwYXNzCisgICAgLi4uICAgICAgICAgcmV0dXJuIHN0ci5fX2VxX18oc2VsZiwgb3RoZXIpCisgICAgLi4uICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIHN0ci5fX2hhc2hfXyhzZWxmKQorCisgICAgPj4+IHggPSB7TmFtZSgiYSIpOjEsIE5hbWUoImIiKToyfQorICAgID4+PiBkZWYgZihhLCBiKToKKyAgICAuLi4gICAgIHByaW50IGEsYgorICAgID4+PiBmKCoqeCkKKyAgICAxIDIKKworQSBvYnNjdXJlIG1lc3NhZ2U6CisKKyAgICA+Pj4gZGVmIGYoYSwgYik6CisgICAgLi4uICAgIHBhc3MKKyAgICA+Pj4gZihiPTEpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAyIGFyZ3VtZW50cyAoMSBnaXZlbikKKworVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGluIGluY2x1ZGVzIGtleXdvcmRzOgorCisgICAgPj4+IGRlZiBmKGEpOgorICAgIC4uLiAgICBwYXNzCisgICAgPj4+IGYoNiwgYT00LCAqKDEsIDIsIDMpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIHRha2VzIGV4YWN0bHkgMSBhcmd1bWVudCAoNSBnaXZlbikKICIiIgogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKIAotY2xhc3MgVW5pY29kZUtleXdvcmRBcmdzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFeHRDYWxsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF91bmljb2RlX2tleXdvcmRzKHNlbGYpOgogICAgICAgICBkZWYgZihhKToKQEAgLTI3NCw5ICszMTIsOCBAQAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZXh0Y2FsbCAjIHNlbGYgaW1wb3J0Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZXh0Y2FsbCwgVHJ1ZSkKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVuaWNvZGVLZXl3b3JkQXJnc1Rlc3QpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgVHJ1ZSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEV4dENhbGxUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5IGIvTGliL3Rlc3QvdGVzdF9mY250bC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDM1MGUyMzMuLmM4ZWE3YjcKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0zLDEyICszLDE2IEBACiBPUy8yK0VNWCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpbGUgbG9ja2luZyBvcGVyYXRpb25zLgogCiAiIiIKLWltcG9ydCBmY250bAogaW1wb3J0IG9zCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgdW5saW5rLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICh2ZXJib3NlLCBURVNURk4sIHVubGluaywgcnVuX3VuaXR0ZXN0LAorICAgIGltcG9ydF9tb2R1bGUpCisKKyMgU2tpcCB0ZXN0IGlmIG5vIGZuY3RsIG1vZHVsZS4KK2ZjbnRsID0gaW1wb3J0X21vZHVsZSgnZmNudGwnKQorCiAKICMgVE9ETyAtIFdyaXRlIHRlc3RzIGZvciBmbG9jaygpIGFuZCBsb2NrZigpLgogCkBAIC04OSw4ICs5Myw3IEBACiAgICAgICAgICAgICAjIFRoaXMgZmxhZyBpcyBsYXJnZXIgdGhhbiAyKiozMSBpbiA2NC1iaXQgYnVpbGRzCiAgICAgICAgICAgICBmbGFncyA9IGZjbnRsLkROX01VTFRJU0hPVAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAjIEZfTk9USUZZIG9yIEROX01VTFRJU0hPVCB1bmF2YWlsYWJsZSwgc2tpcHBpbmcKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRl9OT1RJRlkgb3IgRE5fTVVMVElTSE9UIHVuYXZhaWxhYmxlIikKICAgICAgICAgZmQgPSBvcy5vcGVuKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoVEVTVEZOKSksIG9zLk9fUkRPTkxZKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmY250bC5mY250bChmZCwgY21kLCBmbGFncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQppbmRleCA3NDQ0NTQ4Li5kZmZhNGI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CkBAIC0xLDIxICsxLDI1IEBACisjIE5PVEU6IHRoaXMgZmlsZSB0ZXN0cyB0aGUgbmV3IGBpb2AgbGlicmFyeSBiYWNrcG9ydGVkIGZyb20gUHl0aG9uIDMueC4KKyMgU2ltaWxhciB0ZXN0cyBmb3IgdGhlIGJ1aWx0aW4gZmlsZSBvYmplY3QgY2FuIGJlIGZvdW5kIGluIHRlc3RfZmlsZTJrLnB5LgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaXRlcnRvb2xzCi1pbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwogZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIAotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZmluZGZpbGUsIHJ1bl91bml0dGVzdAoraW1wb3J0IGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAogZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKIAogY2xhc3MgQXV0b0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBmaWxlIHRlc3RzIGZvciB3aGljaCBhIHRlc3QgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3diJykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgc2VsZi5mOgpAQCAtMjUsOCArMjksOCBAQAogICAgIGRlZiB0ZXN0V2Vha1JlZnMoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHdlYWsgcmVmZXJlbmNlcwogICAgICAgICBwID0gcHJveHkoc2VsZi5mKQotICAgICAgICBwLndyaXRlKCd0ZXN0c3RyaW5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgcC50ZWxsKCkpCisgICAgICAgIHAud3JpdGUoYid0ZXN0c3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCBwLnRlbGwoKSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKICAgICAgICAgc2VsZi5mID0gTm9uZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgZ2V0YXR0ciwgcCwgJ3RlbGwnKQpAQCAtMzQsMzggKzM4LDM1IEBACiAgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSBleHBlY3RlZCBhdHRyaWJ1dGVzIGV4aXN0CiAgICAgICAgIGYgPSBzZWxmLmYKLQogICAgICAgICBmLm5hbWUgICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCiAgICAgICAgIGYubW9kZSAgICAgIyBkaXR0bwogICAgICAgICBmLmNsb3NlZCAgICMgZGl0dG8KIAotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKLSAgICAgICAgICAgICgnZmlsZS5zb2Z0c3BhY2Ugbm90IHN1cHBvcnRlZCBpbiAzLngnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIHNvZnRzcGFjZSA9IGYuc29mdHNwYWNlCi0gICAgICAgICAgICAjIHZlcmlmeSBzb2Z0c3BhY2UgaXMgd3JpdGFibGUKLSAgICAgICAgICAgIGYuc29mdHNwYWNlID0gc29mdHNwYWNlICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCi0KLSAgICAgICAgIyB2ZXJpZnkgdGhlIG90aGVycyBhcmVuJ3QKLSAgICAgICAgZm9yIGF0dHIgaW4gJ25hbWUnLCAnbW9kZScsICdjbG9zZWQnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBzZXRhdHRyLCBmLCBhdHRyLCAnb29wcycpCi0KICAgICBkZWYgdGVzdFJlYWRpbnRvKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSByZWFkaW50bwotICAgICAgICBzZWxmLmYud3JpdGUoJzEyJykKKyAgICAgICAgc2VsZi5mLndyaXRlKGInMTInKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBhID0gYXJyYXkoJ2MnLCAneCcqMTApCi0gICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQogICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxMicsIGEudG9zdHJpbmcoKVs6bl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxMicsIGEudG9zdHJpbmcoKVs6bl0pCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvX3RleHQoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvIHJlZnVzZXMgdGV4dCBmaWxlcworICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5mLCAicmVhZGludG8iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBhKQogCiAgICAgZGVmIHRlc3RXcml0ZWxpbmVzVXNlckxpc3Qoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnN0YW5jZSBzZXF1ZW5jZQotICAgICAgICBsID0gVXNlckxpc3QoWycxJywgJzInXSkKKyAgICAgICAgbCA9IFVzZXJMaXN0KFtiJzEnLCBiJzInXSkKICAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIHNlbGYuZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCiAgICAgICAgIGJ1ZiA9IHNlbGYuZi5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLCAnMTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYicxMicpCiAKICAgICBkZWYgdGVzdFdyaXRlbGluZXNJbnRlZ2VycyhzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGludGVnZXJzCkBAIC04NCwxNDkgKzg1LDk2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25TdHJpbmcoKSwgTm9uU3RyaW5nKCldKQogCi0gICAgZGVmIHRlc3RSZXByKHNlbGYpOgotICAgICAgICAjIHZlcmlmeSByZXByIHdvcmtzCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXByKHNlbGYuZikuc3RhcnRzd2l0aCgiPG9wZW4gZmlsZSAnIiArIFRFU1RGTikpCi0KICAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKLSAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCiAgICAgICAgIGYgPSBzZWxmLmYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5uYW1lLCBURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZi5pc2F0dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCisgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0TWV0aG9kcyhzZWxmKToKLSAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2ZsdXNoJywgJ2lzYXR0eScsICduZXh0JywgJ3JlYWQnLCAncmVhZGludG8nLAotICAgICAgICAgICAgICAgICAgICdyZWFkbGluZScsICdyZWFkbGluZXMnLCAnc2VlaycsICd0ZWxsJywgJ3RydW5jYXRlJywKLSAgICAgICAgICAgICAgICAgICAnd3JpdGUnLCAneHJlYWRsaW5lcycsICdfX2l0ZXJfXyddCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdhdGhlb3MnKToKLSAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlKCd0cnVuY2F0ZScpCisgICAgICAgIG1ldGhvZHMgPSBbKCdmaWxlbm8nLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdmbHVzaCcsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ2lzYXR0eScsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ25leHQnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGUnLCAoYiIiLCkpLAorICAgICAgICAgICAgICAgICAgICgncmVhZGxpbmUnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkbGluZXMnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdzZWVrJywgKDAsKSksCisgICAgICAgICAgICAgICAgICAgKCd0ZWxsJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGUnLCAoYiIiLCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGVsaW5lcycsIChbXSwpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19faXRlcl9fJywgKCkpLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdhdGhlb3MnKToKKyAgICAgICAgICAgIG1ldGhvZHMuYXBwZW5kKCgndHJ1bmNhdGUnLCAoKSkpCiAKICAgICAgICAgIyBfX2V4aXRfXyBzaG91bGQgY2xvc2UgdGhlIGZpbGUKICAgICAgICAgc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKIAotICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBtZXRob2RzOgorICAgICAgICBmb3IgbWV0aG9kbmFtZSwgYXJncyBpbiBtZXRob2RzOgogICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCiAgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQotICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZXRob2QsICphcmdzKQogCiAgICAgICAgICMgZmlsZSBpcyBjbG9zZWQsIF9fZXhpdF9fIHNob3VsZG4ndCBkbyBhbnl0aGluZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpLCBOb25lKQogICAgICAgICAjIGl0IG11c3QgYWxzbyByZXR1cm4gTm9uZSBpZiBhbiBleGNlcHRpb24gd2FzIGdpdmVuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIDEgLy8gMAogICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9fZXhpdF9fKCpzeXMuZXhjX2luZm8oKSksIE5vbmUpCiAKICAgICBkZWYgdGVzdFJlYWRXaGVuV3JpdGluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnJlYWQpCiAKLSAgICBkZWYgdGVzdElzc3VlNTY3NyhzZWxmKToKLSAgICAgICAgIyBSZW1hcms6IERvIG5vdCBwZXJmb3JtIG1vcmUgdGhhbiBvbmUgdGVzdCBwZXIgb3BlbiBmaWxlLAotICAgICAgICAjIHNpbmNlIHRoYXQgZG9lcyBOT1QgY2F0Y2ggdGhlIHJlYWRsaW5lIGVycm9yIG9uIFdpbmRvd3MuCi0gICAgICAgIGRhdGEgPSAneHh4JwotICAgICAgICBmb3IgbW9kZSBpbiBbJ3cnLCAnd2InLCAnYScsICdhYiddOgotICAgICAgICAgICAgZm9yIGF0dHIgaW4gWydyZWFkJywgJ3JlYWRsaW5lJywgJ3JlYWRsaW5lcyddOgotICAgICAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQotICAgICAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGdldGF0dHIoc2VsZi5mLCBhdHRyKSkKLSAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorY2xhc3MgQ0F1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cyk6CisgICAgb3BlbiA9IGlvLm9wZW4KIAotICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCi0gICAgICAgICAgICBzZWxmLmYud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGxhbWJkYTogW2xpbmUgZm9yIGxpbmUgaW4gc2VsZi5mXSkKLSAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCitjbGFzcyBQeUF1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cyk6CisgICAgb3BlbiA9IHN0YXRpY21ldGhvZChweWlvLm9wZW4pCiAKLSAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQotICAgICAgICAgICAgc2VsZi5mLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZGludG8sIGJ5dGVhcnJheShsZW4oZGF0YSkpKQotICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLQotICAgICAgICBmb3IgbW9kZSBpbiBbJ3InLCAncmInLCAnVScsICdVYicsICdVcicsICdyVScsICdyYlUnLCAnclViJ106Ci0gICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi53cml0ZSwgZGF0YSkKLSAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0KLSAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIFtkYXRhLCBkYXRhXSkKLSAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0KLSAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLnRydW5jYXRlKQotICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogY2xhc3MgT3RoZXJGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHRlc3RPcGVuRGlyKHNlbGYpOgotICAgICAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgZm9yIG1vZGUgaW4gKE5vbmUsICJ3Iik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgbW9kZToKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIsIG1vZGUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgdGhpc19kaXIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib3BlbmluZyBhIGRpcmVjdG9yeSBkaWRuJ3QgcmFpc2UgYW4gSU9FcnJvciIpCi0KICAgICBkZWYgdGVzdE1vZGVTdHJpbmdzKHNlbGYpOgogICAgICAgICAjIGNoZWNrIGludmFsaWQgbW9kZSBzdHJpbmdzCiAgICAgICAgIGZvciBtb2RlIGluICgiIiwgImFVIiwgIndVKyIpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgbW9kZSkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclciBpcyBhbiBpbnZhbGlkIGZpbGUgbW9kZScgJSBtb2RlKQogCi0gICAgICAgICMgU29tZSBpbnZhbGlkIG1vZGVzIGZhaWwgb24gV2luZG93cywgYnV0IHBhc3Mgb24gVW5peAotICAgICAgICAjIElzc3VlMzk2NTogYXZvaWQgYSBjcmFzaCBvbiBXaW5kb3dzIHdoZW4gZmlsZW5hbWUgaXMgdW5pY29kZQotICAgICAgICBmb3IgbmFtZSBpbiAoVEVTVEZOLCB1bmljb2RlKFRFU1RGTiksIHVuaWNvZGUoVEVTVEZOICsgJ1x0JykpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICJyciIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCiAgICAgZGVmIHRlc3RTdGRpbihzZWxmKToKICAgICAgICAgIyBUaGlzIGNhdXNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdCBvbiBPU0YxIHY1LjEuCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnb3NmMVY1JzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN5cy5zdGRpbi5zZWVrLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJT0Vycm9yLCBWYWx1ZUVycm9yKSwgc3lzLnN0ZGluLnNlZWssIC0xKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgKAorICAgICAgICAgICAgcHJpbnQoKAogICAgICAgICAgICAgICAgICcgIFNraXBwaW5nIHN5cy5zdGRpbi5zZWVrKC0xKSwgaXQgbWF5IGNyYXNoIHRoZSBpbnRlcnByZXRlci4nCi0gICAgICAgICAgICAgICAgJyBUZXN0IG1hbnVhbGx5LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN5cy5zdGRpbi50cnVuY2F0ZSkKLQotICAgIGRlZiB0ZXN0VW5pY29kZU9wZW4oc2VsZik6Ci0gICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MgZm9yIHVuaWNvZGUgdG9vCi0gICAgICAgIGYgPSBvcGVuKHVuaWNvZGUoVEVTVEZOKSwgInciKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwcihmKS5zdGFydHN3aXRoKCI8b3BlbiBmaWxlIHUnIiArIFRFU1RGTikpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgICAgICcgVGVzdCBtYW51YWxseS4nKSwgZmlsZT1zeXMuX19zdGRvdXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKElPRXJyb3IsIFZhbHVlRXJyb3IpLCBzeXMuc3RkaW4udHJ1bmNhdGUpCiAKICAgICBkZWYgdGVzdEJhZE1vZGVBcmd1bWVudChzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgdGhhdCB3ZSBnZXQgYSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgbW9kZSBhcmd1bWVudAogICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgYmFkX21vZGUpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBtc2c6CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgYmFkX21vZGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdICE9IDA6CiAgICAgICAgICAgICAgICAgcyA9IHN0cihtc2cpCiAgICAgICAgICAgICAgICAgaWYgVEVTVEZOIGluIHMgb3IgYmFkX21vZGUgbm90IGluIHM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiYmFkIGVycm9yIG1lc3NhZ2UgZm9yIGludmFsaWQgbW9kZTogJXMiICUgcykKLSAgICAgICAgICAgICMgaWYgbXNnWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5IGJlCisgICAgICAgICAgICAjIGlmIG1zZy5hcmdzWzBdID09IDAsIHdlJ3JlIHByb2JhYmx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhlcmUgbWF5IGJlCiAgICAgICAgICAgICAjIG5vIG9idmlvdXMgd2F5IHRvIGRpc2NvdmVyIHdoeSBvcGVuKCkgZmFpbGVkLgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZi5jbG9zZSgpCkBAIC0yMzcsMzEgKzE4NSwzMiBAQAogICAgICAgICAjIG1pc2JlaGF2aW91ciBlc3BlY2lhbGx5IHdpdGggcmVwZWF0ZWQgY2xvc2UoKSBjYWxscwogICAgICAgICBmb3IgcyBpbiAoLTEsIDAsIDEsIDUxMik6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycsIHMpCi0gICAgICAgICAgICAgICAgZi53cml0ZShzdHIocykpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICd3YicsIHMpCisgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocykuZW5jb2RlKCJhc2NpaSIpKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3InLCBzKQotICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicsIHMpCisgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQsIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHMpCiAKICAgICBkZWYgdGVzdFRydW5jYXRlT25XaW5kb3dzKHNlbGYpOgotICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KKyAgICAgICAgIyAiZmlsZS50cnVuY2F0ZSBmYXVsdCBvbiB3aW5kb3dzIgogCi0gICAgICAgIGRlZiBidWc4MDE2MzEoKToKLSAgICAgICAgICAgICMgU0YgYnVnIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvODAxNjMxPgotICAgICAgICAgICAgIyAiZmlsZS50cnVuY2F0ZSBmYXVsdCBvbiB3aW5kb3dzIgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAnd2InKQotICAgICAgICAgICAgZi53cml0ZSgnMTIzNDU2Nzg5MDEnKSAgICMgMTEgYnl0ZXMKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKyAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICd3YicpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZShiJzEyMzQ1Njc4OTAxJykgICAjIDExIGJ5dGVzCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCdyYisnKQorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sJ3JiKycpCiAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKDUpCi0gICAgICAgICAgICBpZiBkYXRhICE9ICcxMjM0NSc6CisgICAgICAgICAgICBpZiBkYXRhICE9IGInMTIzNDUnOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZCBvbiBmaWxlIG9wZW5lZCBmb3IgdXBkYXRlIGZhaWxlZCAlciIgJSBkYXRhKQogICAgICAgICAgICAgaWYgZi50ZWxsKCkgIT0gNToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZpbGUgcG9zIGFmdGVyIHJlYWQgd3JvbmcgJWQiICUgZi50ZWxsKCkpCkBAIC0yNzQsNTYgKzIyMyw0MiBAQAogICAgICAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShURVNURk4pCiAgICAgICAgICAgICBpZiBzaXplICE9IDU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHNpemUgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIHNpemUpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnVnODAxNjMxKCkKICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKIAogICAgIGRlZiB0ZXN0SXRlcmF0aW9uKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIGNvbXBsZXggaW50ZXJhY3Rpb24gd2hlbiBtaXhpbmcgZmlsZS1pdGVyYXRpb24gYW5kIHRoZQotICAgICAgICAjIHZhcmlvdXMgcmVhZCogbWV0aG9kcy4gT3N0ZW5zaWJseSwgdGhlIG1peHR1cmUgY291bGQganVzdCBiZSB0ZXN0ZWQKLSAgICAgICAgIyB0byB3b3JrIHdoZW4gaXQgc2hvdWxkIHdvcmsgYWNjb3JkaW5nIHRvIHRoZSBQeXRob24gbGFuZ3VhZ2UsCi0gICAgICAgICMgaW5zdGVhZCBvZiBmYWlsIHdoZW4gaXQgc2hvdWxkIGZhaWwgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IENQeXRob24KLSAgICAgICAgIyBpbXBsZW1lbnRhdGlvbi4gIFBlb3BsZSBkb24ndCBhbHdheXMgcHJvZ3JhbSBQeXRob24gdGhlIHdheSB0aGV5Ci0gICAgICAgICMgc2hvdWxkLCB0aG91Z2gsIGFuZCB0aGUgaW1wbGVtZW5hdGlvbiBtaWdodCBjaGFuZ2UgaW4gc3VidGxlIHdheXMsCi0gICAgICAgICMgc28gd2UgZXhwbGljaXRseSB0ZXN0IGZvciBlcnJvcnMsIHRvbzsgdGhlIHRlc3Qgd2lsbCBqdXN0IGhhdmUgdG8KLSAgICAgICAgIyBiZSB1cGRhdGVkIHdoZW4gdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZXMuCisgICAgICAgICMgdmFyaW91cyByZWFkKiBtZXRob2RzLgogICAgICAgICBkYXRhb2Zmc2V0ID0gMTYzODQKLSAgICAgICAgZmlsbGVyID0gImhhbVxuIgorICAgICAgICBmaWxsZXIgPSBiImhhbVxuIgogICAgICAgICBhc3NlcnQgbm90IGRhdGFvZmZzZXQgJSBsZW4oZmlsbGVyKSwgXAogICAgICAgICAgICAgImRhdGFvZmZzZXQgbXVzdCBiZSBtdWx0aXBsZSBvZiBsZW4oZmlsbGVyKSIKICAgICAgICAgbmNodW5rcyA9IGRhdGFvZmZzZXQgLy8gbGVuKGZpbGxlcikKICAgICAgICAgdGVzdGxpbmVzID0gWwotICAgICAgICAgICAgInNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCi0gICAgICAgICAgICAiZWdncywgc3BhbSwgaGFtIGFuZCBzcGFtXG4iLAotICAgICAgICAgICAgInNhdXNzYWdlcywgc3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKLSAgICAgICAgICAgICJzcGFtLCBoYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCi0gICAgICAgICAgICAic3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgaGFtLCBzcGFtXG4iLAotICAgICAgICAgICAgIndvbmRlcmZ1bCBzcGFhYWFhYW0uXG4iCisgICAgICAgICAgICBiInNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICBiImVnZ3MsIHNwYW0sIGhhbSBhbmQgc3BhbVxuIiwKKyAgICAgICAgICAgIGIic2F1c3NhZ2VzLCBzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgYiJzcGFtLCBoYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICBiInNwYW0sIHNwYW0sIHNwYW0sIHNwYW0sIHNwYW0sIGhhbSwgc3BhbVxuIiwKKyAgICAgICAgICAgIGIid29uZGVyZnVsIHNwYWFhYWFhbS5cbiIKICAgICAgICAgXQogICAgICAgICBtZXRob2RzID0gWygicmVhZGxpbmUiLCAoKSksICgicmVhZCIsICgpKSwgKCJyZWFkbGluZXMiLCAoKSksCi0gICAgICAgICAgICAgICAgICAgKCJyZWFkaW50byIsIChhcnJheSgiYyIsICIgIioxMDApLCkpXQorICAgICAgICAgICAgICAgICAgICgicmVhZGludG8iLCAoYXJyYXkoImIiLCBiIiAiKjEwMCksKSldCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBQcmVwYXJlIHRoZSB0ZXN0ZmlsZQotICAgICAgICAgICAgYmFnID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgICAgIGJhZyA9IHNlbGYub3BlbihURVNURk4sICJ3YiIpCiAgICAgICAgICAgICBiYWcud3JpdGUoZmlsbGVyICogbmNodW5rcykKICAgICAgICAgICAgIGJhZy53cml0ZWxpbmVzKHRlc3RsaW5lcykKICAgICAgICAgICAgIGJhZy5jbG9zZSgpCiAgICAgICAgICAgICAjIFRlc3QgZm9yIGFwcHJvcHJpYXRlIGVycm9ycyBtaXhpbmcgcmVhZCogYW5kIGl0ZXJhdGlvbgogICAgICAgICAgICAgZm9yIG1ldGhvZG5hbWUsIGFyZ3MgaW4gbWV0aG9kczoKLSAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCi0gICAgICAgICAgICAgICAgaWYgZi5uZXh0KCkgIT0gZmlsbGVyOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICAgICAgICAgIGlmIG5leHQoZikgIT0gZmlsbGVyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwsICJCcm9rZW4gdGVzdGZpbGUiCiAgICAgICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIoZiwgbWV0aG9kbmFtZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzJXIgYWZ0ZXIgbmV4dCgpIGRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZG5hbWUsIGFyZ3MpKQorICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpICAjIFRoaXMgc2ltcGx5IHNob3VsZG4ndCBmYWlsCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgICAgICMgVGVzdCB0byBzZWUgaWYgaGFybWxlc3MgKGJ5IGFjY2lkZW50KSBtaXhpbmcgb2YgcmVhZCogYW5kCkBAIC0zMzMsOSArMjY4LDkgQEAKICAgICAgICAgICAgICMgKCJoIiwgImEiLCAibSIsICJcbiIpLCBzbyA0MDk2IGxpbmVzIG9mIHRoYXQgc2hvdWxkIGdldCB1cwogICAgICAgICAgICAgIyBleGFjdGx5IG9uIHRoZSBidWZmZXIgYm91bmRhcnkgZm9yIGFueSBwb3dlci1vZi0yIGJ1ZmZlcnNpemUKICAgICAgICAgICAgICMgYmV0d2VlbiA0IGFuZCAxNjM4NCAoaW5jbHVzaXZlKS4KLSAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmNodW5rcyk6Ci0gICAgICAgICAgICAgICAgZi5uZXh0KCkKKyAgICAgICAgICAgICAgICBuZXh0KGYpCiAgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCkBAIC0zNDYsNyArMjgxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQogICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCi0gICAgICAgICAgICBidWYgPSBhcnJheSgiYyIsICJceDAwIiAqIGxlbih0ZXN0bGluZSkpCisgICAgICAgICAgICBidWYgPSBhcnJheSgiYiIsIGIiXHgwMCIgKiBsZW4odGVzdGxpbmUpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYucmVhZGludG8oYnVmKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC0zNzUsNyArMzEwLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKICAgICAgICAgICAgICMgUmVhZGluZyBhZnRlciBpdGVyYXRpb24gaGl0IEVPRiBzaG91bGRuJ3QgaHVydCBlaXRoZXIKLSAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKQEAgLTM5MSwyMzIgKzMyNiwxOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKIAotY2xhc3MgRmlsZVN1YmNsYXNzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQ090aGVyRmlsZVRlc3RzKE90aGVyRmlsZVRlc3RzKToKKyAgICBvcGVuID0gaW8ub3BlbgogCi0gICAgZGVmIHRlc3RFeGl0KHNlbGYpOgotICAgICAgICAjIHRlc3QgdGhhdCBleGl0aW5nIHdpdGggY29udGV4dCBjYWxscyBzdWJjbGFzcycgY2xvc2UKLSAgICAgICAgY2xhc3MgQyhmaWxlKToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdWJjbGFzc19jbG9zZWQgPSBGYWxzZQotICAgICAgICAgICAgICAgIGZpbGUuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdWJjbGFzc19jbG9zZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgZmlsZS5jbG9zZShzZWxmKQotCi0gICAgICAgIHdpdGggQyhURVNURk4sICd3JykgYXMgZjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuc3ViY2xhc3NfY2xvc2VkKQotCi0KLWNsYXNzIEZpbGVUaHJlYWRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBUaGVzZSB0ZXN0cyBjaGVjayB0aGUgYWJpbGl0eSB0byBjYWxsIHZhcmlvdXMgbWV0aG9kcyBvZiBmaWxlIG9iamVjdHMKLSAgICAjIChpbmNsdWRpbmcgY2xvc2UoKSkgY29uY3VycmVudGx5IHdpdGhvdXQgY3Jhc2hpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KLSAgICAjIFNlZSAjODE1NjQ2LCAjNTk1NjAxCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZiA9IE5vbmUKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgiXG4iLmpvaW4oIjAxMjM0NTY3ODkiKSkKLSAgICAgICAgc2VsZi5fY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5jbG9zZV9jb3VudCA9IDAKLSAgICAgICAgc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ID0gMAotICAgICAgICBzZWxmLnVzZV9idWZmZXJpbmcgPSBGYWxzZQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmY6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoRW52aXJvbm1lbnRFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgX2NyZWF0ZV9maWxlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnVzZV9idWZmZXJpbmc6Ci0gICAgICAgICAgICBzZWxmLmYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3KyIsIGJ1ZmZlcmluZz0xMDI0KjE2KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mID0gb3BlbihzZWxmLmZpbGVuYW1lLCAidysiKQotCi0gICAgZGVmIF9jbG9zZV9maWxlKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICBzZWxmLmNsb3NlX2NvdW50ICs9IDEKLSAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ICs9IDEKLQotICAgIGRlZiBfY2xvc2VfYW5kX3Jlb3Blbl9maWxlKHNlbGYpOgotICAgICAgICBzZWxmLl9jbG9zZV9maWxlKCkKLSAgICAgICAgIyBpZiBjbG9zZSByYWlzZXMgYW4gZXhjZXB0aW9uIHRoYXRzIGZpbmUsIHNlbGYuZiByZW1haW5zIHZhbGlkIHNvCi0gICAgICAgICMgd2UgZG9uJ3QgbmVlZCB0byByZW9wZW4uCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKLQotICAgIGRlZiBfcnVuX3dvcmtlcnMoc2VsZiwgZnVuYywgbmJfd29ya2VycywgZHVyYXRpb249MC4yKToKLSAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb3VudCA9IDAKLSAgICAgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA9IDAKLSAgICAgICAgc2VsZi5kb19jb250aW51ZSA9IFRydWUKLSAgICAgICAgdGhyZWFkcyA9IFtdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5iX3dvcmtlcnMpOgotICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mdW5jKQotICAgICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCi0gICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoMTAwKToKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uLzEwMCkKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuX2NvdW50X2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VfY291bnQtc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50ID4gbmJfd29ya2VycysxOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1EnLAotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoZHVyYXRpb24pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmRvX2NvbnRpbnVlID0gRmFsc2UKLSAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdC5qb2luKCkKLQotICAgIGRlZiBfdGVzdF9jbG9zZV9vcGVuX2lvKHNlbGYsIGlvX2Z1bmMsIG5iX3dvcmtlcnM9NSk6Ci0gICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKCkKLSAgICAgICAgICAgIGZ1bmNzID0gaXRlcnRvb2xzLmN5Y2xlKCgKLSAgICAgICAgICAgICAgICBsYW1iZGE6IGlvX2Z1bmMoKSwKLSAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2Nsb3NlX2FuZF9yZW9wZW5fZmlsZSgpLAotICAgICAgICAgICAgKSkKLSAgICAgICAgICAgIGZvciBmIGluIGZ1bmNzOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRvX2NvbnRpbnVlOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLl9ydW5fd29ya2Vycyh3b3JrZXIsIG5iX3dvcmtlcnMpCi0gICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgIyBVc2VmdWwgdmVyYm9zZSBzdGF0aXN0aWNzIHdoZW4gdHVuaW5nIHRoaXMgdGVzdCB0byB0YWtlCi0gICAgICAgICAgICAjIGxlc3MgdGltZSB0byBydW4gYnV0IHN0aWxsIGVuc3VyaW5nIHRoYXQgaXRzIHN0aWxsIHVzZWZ1bC4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgdGhlIHBlcmNlbnQgb2YgY2xvc2UgY2FsbHMgdGhhdCByYWlzZWQgYW4gZXJyb3IKLSAgICAgICAgICAgIHBlcmNlbnQgPSAxMDAuIC0gMTAwLipzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQvc2VsZi5jbG9zZV9jb3VudAotICAgICAgICAgICAgcHJpbnQgc2VsZi5jbG9zZV9jb3VudCwgKCclLjRmICcgJSBwZXJjZW50KSwKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW4oc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9mbHVzaChzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5mbHVzaCgpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pdGVyKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgbGlzdChpdGVyKHNlbGYuZikpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9pc2F0dHkoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYuaXNhdHR5KCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3ByaW50KHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgcHJpbnQgPj4gc2VsZi5mLCAnJwotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcHJpbnRfYnVmZmVyZWQoc2VsZik6Ci0gICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IFRydWUKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHByaW50ID4+IHNlbGYuZiwgJycKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWQoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYucmVhZCgwKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGludG8oc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBhID0gYXJyYXkoJ2MnLCAneHh4eHgnKQotICAgICAgICAgICAgc2VsZi5mLnJlYWRpbnRvKGEpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZShzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi5yZWFkbGluZSgpCi0gICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQotCi0gICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkbGluZXMoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3NlZWsoc2VsZik6Ci0gICAgICAgIGRlZiBpb19mdW5jKCk6Ci0gICAgICAgICAgICBzZWxmLmYuc2VlaygwLCAwKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fdGVsbChzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi50ZWxsKCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3RydW5jYXRlKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLnRydW5jYXRlKCkKLSAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCi0KLSAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3dyaXRlKHNlbGYpOgotICAgICAgICBkZWYgaW9fZnVuYygpOgotICAgICAgICAgICAgc2VsZi5mLndyaXRlKCcnKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fd3JpdGVsaW5lcyhzZWxmKToKLSAgICAgICAgZGVmIGlvX2Z1bmMoKToKLSAgICAgICAgICAgIHNlbGYuZi53cml0ZWxpbmVzKCcnKQotICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKLQotCi1jbGFzcyBTdGRvdXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9tb3ZlX3N0ZG91dF9vbl93cml0ZShzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAzMjQyOiBzeXMuc3Rkb3V0IGNhbiBiZSByZXBsYWNlZCAoYW5kIGZyZWVkKSBkdXJpbmcgYQotICAgICAgICAjIHByaW50IHN0YXRlbWVudDsgcHJldmVudCBhIHNlZ2ZhdWx0IGluIHRoaXMgY2FzZQotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLQotICAgICAgICBjbGFzcyBGaWxlOgotICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgICAgIGlmICdcbicgaW4gZGF0YToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEZpbGUoKQotICAgICAgICAgICAgcHJpbnQgInNvbWUgdGV4dCIKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAotCi0gICAgZGVmIHRlc3RfZGVsX3N0ZG91dF9iZWZvcmVfcHJpbnQoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgNDU5NzogJ3ByaW50JyB3aXRoIG5vIGFyZ3VtZW50IHdhc24ndCByZXBvcnRpbmcgd2hlbgotICAgICAgICAjIHN5cy5zdGRvdXQgd2FzIGRlbGV0ZWQuCi0gICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBkZWwgc3lzLnN0ZG91dAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcmludAotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZSksICJsb3N0IHN5cy5zdGRvdXQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBSdW50aW1lRXJyb3IiKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CitjbGFzcyBQeU90aGVyRmlsZVRlc3RzKE90aGVyRmlsZVRlc3RzKToKKyAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKIAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBIaXN0b3JpY2FsbHksIHRoZXNlIHRlc3RzIGhhdmUgYmVlbiBzbG9wcHkgYWJvdXQgcmVtb3ZpbmcgVEVTVEZOLgogICAgICMgU28gZ2V0IHJpZCBvZiBpdCBubyBtYXR0ZXIgd2hhdC4KICAgICB0cnk6Ci0gICAgICAgIHJ1bl91bml0dGVzdChBdXRvRmlsZVRlc3RzLCBPdGhlckZpbGVUZXN0cywgRmlsZVN1YmNsYXNzVGVzdHMsCi0gICAgICAgICAgICBGaWxlVGhyZWFkaW5nVGVzdHMsIFN0ZG91dFRlc3RzKQorICAgICAgICBydW5fdW5pdHRlc3QoQ0F1dG9GaWxlVGVzdHMsIFB5QXV0b0ZpbGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgIENPdGhlckZpbGVUZXN0cywgUHlPdGhlckZpbGVUZXN0cykKICAgICBmaW5hbGx5OgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgogICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZTJrLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlMmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5ZjExOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZTJrLnB5CkBAIC0wLDAgKzEsNjgwIEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRpbWUKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorCitjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2InKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmY6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RXZWFrUmVmcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCisgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCisgICAgICAgIHAud3JpdGUoJ3Rlc3RzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAndGVsbCcpCisKKyAgICBkZWYgdGVzdEF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGV4cGVjdGVkIGF0dHJpYnV0ZXMgZXhpc3QKKyAgICAgICAgZiA9IHNlbGYuZgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzb2Z0c3BhY2UgPSBmLnNvZnRzcGFjZQorICAgICAgICBmLm5hbWUgICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCisgICAgICAgIGYubW9kZSAgICAgIyBkaXR0bworICAgICAgICBmLmNsb3NlZCAgICMgZGl0dG8KKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIHZlcmlmeSBzb2Z0c3BhY2UgaXMgd3JpdGFibGUKKyAgICAgICAgICAgIGYuc29mdHNwYWNlID0gc29mdHNwYWNlICAgICMgbWVyZWx5IHNob3VsZG4ndCBibG93IHVwCisKKyAgICAgICAgIyB2ZXJpZnkgdGhlIG90aGVycyBhcmVuJ3QKKyAgICAgICAgZm9yIGF0dHIgaW4gJ25hbWUnLCAnbW9kZScsICdjbG9zZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBzZXRhdHRyLCBmLCBhdHRyLCAnb29wcycpCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZWFkaW50bworICAgICAgICBzZWxmLmYud3JpdGUoJzEyJykKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgYSA9IGFycmF5KCdjJywgJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgbiA9IHNlbGYuZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMicsIGEudG9zdHJpbmcoKVs6bl0pCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGluc3RhbmNlIHNlcXVlbmNlCisgICAgICAgIGwgPSBVc2VyTGlzdChbJzEnLCAnMiddKQorICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgJzEyJykKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzSW50ZWdlcnNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGludGVnZXJzIGluIFVzZXJMaXN0CisgICAgICAgIGwgPSBVc2VyTGlzdChbMSwyLDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBsKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzTm9uU3RyaW5nKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggbm9uLXN0cmluZyBvYmplY3QKKyAgICAgICAgY2xhc3MgTm9uU3RyaW5nOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25TdHJpbmcoKSwgTm9uU3RyaW5nKCldKQorCisgICAgZGVmIHRlc3RSZXByKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSByZXByIHdvcmtzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbGYuZikuc3RhcnRzd2l0aCgiPG9wZW4gZmlsZSAnIiArIFRFU1RGTikpCisKKyAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBbJ2ZpbGVubycsICdmbHVzaCcsICdpc2F0dHknLCAnbmV4dCcsICdyZWFkJywgJ3JlYWRpbnRvJywKKyAgICAgICAgICAgICAgICAgICAncmVhZGxpbmUnLCAncmVhZGxpbmVzJywgJ3NlZWsnLCAndGVsbCcsICd0cnVuY2F0ZScsCisgICAgICAgICAgICAgICAgICAgJ3dyaXRlJywgJ19faXRlcl9fJ10KKyAgICAgICAgZGVwcmVjYXRlZF9tZXRob2RzID0gWyd4cmVhZGxpbmVzJ10KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICAgICAgbWV0aG9kcy5yZW1vdmUoJ3RydW5jYXRlJykKKworICAgICAgICAjIF9fZXhpdF9fIHNob3VsZCBjbG9zZSB0aGUgZmlsZQorICAgICAgICBzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZi5jbG9zZWQpCisKKyAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gbWV0aG9kczoKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgIyBzaG91bGQgcmFpc2Ugb24gY2xvc2VkIGZpbGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gZGVwcmVjYXRlZF9tZXRob2RzOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIFtdKQorCisgICAgICAgICMgZmlsZSBpcyBjbG9zZWQsIF9fZXhpdF9fIHNob3VsZG4ndCBkbyBhbnl0aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKSwgTm9uZSkKKyAgICAgICAgIyBpdCBtdXN0IGFsc28gcmV0dXJuIE5vbmUgaWYgYW4gZXhjZXB0aW9uIHdhcyBnaXZlbgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKworICAgIGRlZiB0ZXN0TmFzdHlXcml0ZWxpbmVzR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBkZWYgbmFzdHkoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIG5hc3R5KCkpCisKKyAgICBkZWYgdGVzdElzc3VlNTY3NyhzZWxmKToKKyAgICAgICAgIyBSZW1hcms6IERvIG5vdCBwZXJmb3JtIG1vcmUgdGhhbiBvbmUgdGVzdCBwZXIgb3BlbiBmaWxlLAorICAgICAgICAjIHNpbmNlIHRoYXQgZG9lcyBOT1QgY2F0Y2ggdGhlIHJlYWRsaW5lIGVycm9yIG9uIFdpbmRvd3MuCisgICAgICAgIGRhdGEgPSAneHh4JworICAgICAgICBmb3IgbW9kZSBpbiBbJ3cnLCAnd2InLCAnYScsICdhYiddOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gWydyZWFkJywgJ3JlYWRsaW5lJywgJ3JlYWRsaW5lcyddOgorICAgICAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGdldGF0dHIoc2VsZi5mLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbGFtYmRhOiBbbGluZSBmb3IgbGluZSBpbiBzZWxmLmZdKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkaW50bywgYnl0ZWFycmF5KGxlbihkYXRhKSkpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgIGZvciBtb2RlIGluIFsncicsICdyYicsICdVJywgJ1ViJywgJ1VyJywgJ3JVJywgJ3JiVScsICdyVWInXToKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLndyaXRlLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW2RhdGEsIGRhdGFdKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYudHJ1bmNhdGUpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCitjbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdE9wZW5EaXIoc2VsZik6CisgICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKKyAgICAgICAgZm9yIG1vZGUgaW4gKE5vbmUsICJ3Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbW9kZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIsIG1vZGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgdGhpc19kaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib3BlbmluZyBhIGRpcmVjdG9yeSBkaWRuJ3QgcmFpc2UgYW4gSU9FcnJvciIpCisKKyAgICBkZWYgdGVzdE1vZGVTdHJpbmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGludmFsaWQgbW9kZSBzdHJpbmdzCisgICAgICAgIGZvciBtb2RlIGluICgiIiwgImFVIiwgIndVKyIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclciBpcyBhbiBpbnZhbGlkIGZpbGUgbW9kZScgJSBtb2RlKQorCisgICAgICAgICMgU29tZSBpbnZhbGlkIG1vZGVzIGZhaWwgb24gV2luZG93cywgYnV0IHBhc3Mgb24gVW5peAorICAgICAgICAjIElzc3VlMzk2NTogYXZvaWQgYSBjcmFzaCBvbiBXaW5kb3dzIHdoZW4gZmlsZW5hbWUgaXMgdW5pY29kZQorICAgICAgICBmb3IgbmFtZSBpbiAoVEVTVEZOLCB1bmljb2RlKFRFU1RGTiksIHVuaWNvZGUoVEVTVEZOICsgJ1x0JykpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICJyciIpCisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFN0ZGluKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IG9uIE9TRjEgdjUuMS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdvc2YxVjUnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnNlZWssIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgKAorICAgICAgICAgICAgICAgICcgIFNraXBwaW5nIHN5cy5zdGRpbi5zZWVrKC0xKSwgaXQgbWF5IGNyYXNoIHRoZSBpbnRlcnByZXRlci4nCisgICAgICAgICAgICAgICAgJyBUZXN0IG1hbnVhbGx5LicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN5cy5zdGRpbi50cnVuY2F0ZSkKKworICAgIGRlZiB0ZXN0VW5pY29kZU9wZW4oc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MgZm9yIHVuaWNvZGUgdG9vCisgICAgICAgIGYgPSBvcGVuKHVuaWNvZGUoVEVTVEZOKSwgInciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihmKS5zdGFydHN3aXRoKCI8b3BlbiBmaWxlIHUnIiArIFRFU1RGTikpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RCYWRNb2RlQXJndW1lbnQoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgZ2V0IGEgc2Vuc2libGUgZXJyb3IgbWVzc2FnZSBmb3IgYmFkIG1vZGUgYXJndW1lbnQKKyAgICAgICAgYmFkX21vZGUgPSAicXdlcnR5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sIGJhZF9tb2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKKyAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKKyAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQorICAgICAgICAgICAgIyBpZiBtc2cuYXJnc1swXSA9PSAwLCB3ZSdyZSBwcm9iYWJseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXJlIG1heQorICAgICAgICAgICAgIyBiZSBubyBvYnZpb3VzIHdheSB0byBkaXNjb3ZlciB3aHkgb3BlbigpIGZhaWxlZC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKKworICAgIGRlZiB0ZXN0U2V0QnVmZmVyU2l6ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGJ1ZmZlciBzaXplIGRvZXNuJ3QgY2F1c2UKKyAgICAgICAgIyBtaXNiZWhhdmlvdXIgZXNwZWNpYWxseSB3aXRoIHJlcGVhdGVkIGNsb3NlKCkgY2FsbHMKKyAgICAgICAgZm9yIHMgaW4gKC0xLCAwLCAxLCA1MTIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnLCBzKQorICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKHMpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3InLCBzKQorICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGVPbldpbmRvd3Moc2VsZik6CisgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICAgICAgZGVmIGJ1ZzgwMTYzMSgpOgorICAgICAgICAgICAgIyBTRiBidWcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84MDE2MzE+CisgICAgICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicpCisgICAgICAgICAgICBmLndyaXRlKCcxMjM0NTY3ODkwMScpICAgIyAxMSBieXRlcworICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwncmIrJykKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoNSkKKyAgICAgICAgICAgIGlmIGRhdGEgIT0gJzEyMzQ1JzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWQgb24gZmlsZSBvcGVuZWQgZm9yIHVwZGF0ZSBmYWlsZWQgJXIiICUgZGF0YSkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciByZWFkIHdyb25nICVkIiAlIGYudGVsbCgpKQorCisgICAgICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShURVNURk4pCisgICAgICAgICAgICBpZiBzaXplICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHNpemUgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIHNpemUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVnODAxNjMxKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEl0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBjb21wbGV4IGludGVyYWN0aW9uIHdoZW4gbWl4aW5nIGZpbGUtaXRlcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgIyB2YXJpb3VzIHJlYWQqIG1ldGhvZHMuIE9zdGVuc2libHksIHRoZSBtaXh0dXJlIGNvdWxkIGp1c3QgYmUgdGVzdGVkCisgICAgICAgICMgdG8gd29yayB3aGVuIGl0IHNob3VsZCB3b3JrIGFjY29yZGluZyB0byB0aGUgUHl0aG9uIGxhbmd1YWdlLAorICAgICAgICAjIGluc3RlYWQgb2YgZmFpbCB3aGVuIGl0IHNob3VsZCBmYWlsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBDUHl0aG9uCisgICAgICAgICMgaW1wbGVtZW50YXRpb24uICBQZW9wbGUgZG9uJ3QgYWx3YXlzIHByb2dyYW0gUHl0aG9uIHRoZSB3YXkgdGhleQorICAgICAgICAjIHNob3VsZCwgdGhvdWdoLCBhbmQgdGhlIGltcGxlbWVuYXRpb24gbWlnaHQgY2hhbmdlIGluIHN1YnRsZSB3YXlzLAorICAgICAgICAjIHNvIHdlIGV4cGxpY2l0bHkgdGVzdCBmb3IgZXJyb3JzLCB0b287IHRoZSB0ZXN0IHdpbGwganVzdCBoYXZlIHRvCisgICAgICAgICMgYmUgdXBkYXRlZCB3aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLgorICAgICAgICBkYXRhb2Zmc2V0ID0gMTYzODQKKyAgICAgICAgZmlsbGVyID0gImhhbVxuIgorICAgICAgICBhc3NlcnQgbm90IGRhdGFvZmZzZXQgJSBsZW4oZmlsbGVyKSwgXAorICAgICAgICAgICAgImRhdGFvZmZzZXQgbXVzdCBiZSBtdWx0aXBsZSBvZiBsZW4oZmlsbGVyKSIKKyAgICAgICAgbmNodW5rcyA9IGRhdGFvZmZzZXQgLy8gbGVuKGZpbGxlcikKKyAgICAgICAgdGVzdGxpbmVzID0gWworICAgICAgICAgICAgInNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICAiZWdncywgc3BhbSwgaGFtIGFuZCBzcGFtXG4iLAorICAgICAgICAgICAgInNhdXNzYWdlcywgc3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJzcGFtLCBoYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICAic3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgaGFtLCBzcGFtXG4iLAorICAgICAgICAgICAgIndvbmRlcmZ1bCBzcGFhYWFhYW0uXG4iCisgICAgICAgIF0KKyAgICAgICAgbWV0aG9kcyA9IFsoInJlYWRsaW5lIiwgKCkpLCAoInJlYWQiLCAoKSksICgicmVhZGxpbmVzIiwgKCkpLAorICAgICAgICAgICAgICAgICAgICgicmVhZGludG8iLCAoYXJyYXkoImMiLCAiICIqMTAwKSwpKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFByZXBhcmUgdGhlIHRlc3RmaWxlCisgICAgICAgICAgICBiYWcgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICAgICAgYmFnLndyaXRlKGZpbGxlciAqIG5jaHVua3MpCisgICAgICAgICAgICBiYWcud3JpdGVsaW5lcyh0ZXN0bGluZXMpCisgICAgICAgICAgICBiYWcuY2xvc2UoKQorICAgICAgICAgICAgIyBUZXN0IGZvciBhcHByb3ByaWF0ZSBlcnJvcnMgbWl4aW5nIHJlYWQqIGFuZCBpdGVyYXRpb24KKyAgICAgICAgICAgIGZvciBtZXRob2RuYW1lLCBhcmdzIGluIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgICAgIGlmIGYubmV4dCgpICE9IGZpbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsLCAiQnJva2VuIHRlc3RmaWxlIgorICAgICAgICAgICAgICAgIG1ldGggPSBnZXRhdHRyKGYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtZXRoKCphcmdzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyVyIGFmdGVyIG5leHQoKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2RuYW1lLCBhcmdzKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgIyBUZXN0IHRvIHNlZSBpZiBoYXJtbGVzcyAoYnkgYWNjaWRlbnQpIG1peGluZyBvZiByZWFkKiBhbmQKKyAgICAgICAgICAgICMgaXRlcmF0aW9uIHN0aWxsIHdvcmtzLiBUaGlzIGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlIGludGVybmFsCisgICAgICAgICAgICAjIGl0ZXJhdGlvbiBidWZmZXIgKGN1cnJlbnRseSA4MTkyLCkgYnV0IHdlIGNhbiB0ZXN0IGl0IGluIGEKKyAgICAgICAgICAgICMgZmxleGlibGUgbWFubmVyLiAgRWFjaCBsaW5lIGluIHRoZSBiYWcgbycgaGFtIGlzIDQgYnl0ZXMKKyAgICAgICAgICAgICMgKCJoIiwgImEiLCAibSIsICJcbiIpLCBzbyA0MDk2IGxpbmVzIG9mIHRoYXQgc2hvdWxkIGdldCB1cworICAgICAgICAgICAgIyBleGFjdGx5IG9uIHRoZSBidWZmZXIgYm91bmRhcnkgZm9yIGFueSBwb3dlci1vZi0yIGJ1ZmZlcnNpemUKKyAgICAgICAgICAgICMgYmV0d2VlbiA0IGFuZCAxNjM4NCAoaW5jbHVzaXZlKS4KKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5jaHVua3MpOgorICAgICAgICAgICAgICAgIGYubmV4dCgpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCisgICAgICAgICAgICBidWYgPSBhcnJheSgiYyIsICJceDAwIiAqIGxlbih0ZXN0bGluZSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRpbnRvKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgbGluZSA9IGJ1Zi50b3N0cmluZygpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWQobGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCgpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gdGVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lcyAhPSB0ZXN0bGluZXM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICAjIFJlYWRpbmcgYWZ0ZXIgaXRlcmF0aW9uIGhpdCBFT0Ygc2hvdWxkbid0IGh1cnQgZWl0aGVyCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGludG8oYnVmKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCogZmFpbGVkIGFmdGVyIG5leHQoKSBjb25zdW1lZCBmaWxlIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCitjbGFzcyBGaWxlU3ViY2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdEV4aXQoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IGV4aXRpbmcgd2l0aCBjb250ZXh0IGNhbGxzIHN1YmNsYXNzJyBjbG9zZQorICAgICAgICBjbGFzcyBDKGZpbGUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZmlsZS5fX2luaXRfXyhzZWxmLCAqYXJncykKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKHNlbGYpCisKKyAgICAgICAgd2l0aCBDKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5zdWJjbGFzc19jbG9zZWQpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEZpbGVUaHJlYWRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGVzZSB0ZXN0cyBjaGVjayB0aGUgYWJpbGl0eSB0byBjYWxsIHZhcmlvdXMgbWV0aG9kcyBvZiBmaWxlIG9iamVjdHMKKyAgICAjIChpbmNsdWRpbmcgY2xvc2UoKSkgY29uY3VycmVudGx5IHdpdGhvdXQgY3Jhc2hpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAgICAjIFNlZSAjODE1NjQ2LCAjNTk1NjAxCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgc2VsZi5mID0gTm9uZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gVEVTVEZOCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJcbiIuam9pbigiMDEyMzQ1Njc4OSIpKQorICAgICAgICBzZWxmLl9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmNsb3NlX2NvdW50ID0gMAorICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPSAwCisgICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IEZhbHNlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVuYW1lKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorCisgICAgZGVmIF9jcmVhdGVfZmlsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VfYnVmZmVyaW5nOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihzZWxmLmZpbGVuYW1lLCAidysiLCBidWZmZXJpbmc9MTAyNCoxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgIncrIikKKworICAgIGRlZiBfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb3VudCArPSAxCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKKyAgICAgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCArPSAxCisKKyAgICBkZWYgX2Nsb3NlX2FuZF9yZW9wZW5fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSgpCisgICAgICAgICMgaWYgY2xvc2UgcmFpc2VzIGFuIGV4Y2VwdGlvbiB0aGF0cyBmaW5lLCBzZWxmLmYgcmVtYWlucyB2YWxpZCBzbworICAgICAgICAjIHdlIGRvbid0IG5lZWQgdG8gcmVvcGVuLgorICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSgpCisKKyAgICBkZWYgX3J1bl93b3JrZXJzKHNlbGYsIGZ1bmMsIG5iX3dvcmtlcnMsIGR1cmF0aW9uPTAuMik6CisgICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKKyAgICAgICAgICAgIHNlbGYuY2xvc2VfY291bnQgPSAwCisgICAgICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPSAwCisgICAgICAgIHNlbGYuZG9fY29udGludWUgPSBUcnVlCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuYl93b3JrZXJzKToKKyAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZnVuYykKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgZm9yIF8gaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChkdXJhdGlvbi8xMDApCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNsb3NlX2NvdW50LXNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA+IG5iX3dvcmtlcnMrMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICdRJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5kb19jb250aW51ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisKKyAgICBkZWYgX3Rlc3RfY2xvc2Vfb3Blbl9pbyhzZWxmLCBpb19mdW5jLCBuYl93b3JrZXJzPTUpOgorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSgpCisgICAgICAgICAgICBmdW5jcyA9IGl0ZXJ0b29scy5jeWNsZSgoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBpb19mdW5jKCksCisgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9jbG9zZV9hbmRfcmVvcGVuX2ZpbGUoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgICAgICBmb3IgZiBpbiBmdW5jczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kb19jb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fcnVuX3dvcmtlcnMod29ya2VyLCBuYl93b3JrZXJzKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICMgVXNlZnVsIHZlcmJvc2Ugc3RhdGlzdGljcyB3aGVuIHR1bmluZyB0aGlzIHRlc3QgdG8gdGFrZQorICAgICAgICAgICAgIyBsZXNzIHRpbWUgdG8gcnVuIGJ1dCBzdGlsbCBlbnN1cmluZyB0aGF0IGl0cyBzdGlsbCB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIHRoZSBwZXJjZW50IG9mIGNsb3NlIGNhbGxzIHRoYXQgcmFpc2VkIGFuIGVycm9yCisgICAgICAgICAgICBwZXJjZW50ID0gMTAwLiAtIDEwMC4qc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50L3NlbGYuY2xvc2VfY291bnQKKyAgICAgICAgICAgIHByaW50IHNlbGYuY2xvc2VfY291bnQsICgnJS40ZiAnICUgcGVyY2VudCksCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fZmx1c2goc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuZmx1c2goKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5faXRlcihzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIGxpc3QoaXRlcihzZWxmLmYpKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5faXNhdHR5KHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLmlzYXR0eSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9wcmludChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHByaW50ID4+IHNlbGYuZiwgJycKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3ByaW50X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLnVzZV9idWZmZXJpbmcgPSBUcnVlCisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBwcmludCA+PiBzZWxmLmYsICcnCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnJlYWQoMCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgYSA9IGFycmF5KCdjJywgJ3h4eHh4JykKKyAgICAgICAgICAgIHNlbGYuZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZGxpbmUoKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9zZWVrKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3RlbGwoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYudGVsbCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl90cnVuY2F0ZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi50cnVuY2F0ZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl93cml0ZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZSgnJykKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYud3JpdGVsaW5lcygnJykKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKworY2xhc3MgU3Rkb3V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbW92ZV9zdGRvdXRfb25fd3JpdGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMzI0Mjogc3lzLnN0ZG91dCBjYW4gYmUgcmVwbGFjZWQgKGFuZCBmcmVlZCkgZHVyaW5nIGEKKyAgICAgICAgIyBwcmludCBzdGF0ZW1lbnQ7IHByZXZlbnQgYSBzZWdmYXVsdCBpbiB0aGlzIGNhc2UKKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisKKyAgICAgICAgY2xhc3MgRmlsZToKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgICAgICAgICBpZiAnXG4nIGluIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBGaWxlKCkKKyAgICAgICAgICAgIHByaW50ICJzb21lIHRleHQiCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKworICAgIGRlZiB0ZXN0X2RlbF9zdGRvdXRfYmVmb3JlX3ByaW50KHNlbGYpOgorICAgICAgICAjIElzc3VlIDQ1OTc6ICdwcmludCcgd2l0aCBubyBhcmd1bWVudCB3YXNuJ3QgcmVwb3J0aW5nIHdoZW4KKyAgICAgICAgIyBzeXMuc3Rkb3V0IHdhcyBkZWxldGVkLgorICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgZGVsIHN5cy5zdGRvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJsb3N0IHN5cy5zdGRvdXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBSdW50aW1lRXJyb3IiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgICAgIGRlZiBnZXRfbWVzc2FnZShlbmNvZGluZywgKmNvZGUpOgorICAgICAgICAgICAgY29kZSA9ICdcbicuam9pbihjb2RlKQorICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIGVudlsnUFlUSE9OSU9FTkNPRElORyddID0gZW5jb2RpbmcKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvY2Vzcy5yZXR1cm5jb2RlLCAwKQorICAgICAgICAgICAgcmV0dXJuIHN0ZG91dAorCisgICAgICAgIGRlZiBjaGVja19tZXNzYWdlKHRleHQsIGVuY29kaW5nLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzdGRvdXQgPSBnZXRfbWVzc2FnZShlbmNvZGluZywKKyAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cyIsCisgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJXIpIiAlIHRleHQsCisgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBlbmNvZGluZworICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTUiLCAiMTVceGE0IikKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgInV0Zi04IiwgJzE1XHhlMlx4ODJceGFjJykKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgInV0Zi0xNi1sZSIsICcxXHgwMDVceDAwXHhhY1x4MjAnKQorCisgICAgICAgICMgdGVzdCB0aGUgZXJyb3IgaGFuZGxlcgorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTppZ25vcmUiLCAiMTUiKQorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTpyZXBsYWNlIiwgIjE1PyIpCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJpc28tODg1OS0xOmJhY2tzbGFzaHJlcGxhY2UiLCAiMTVcXHUyMGFjIikKKworICAgICAgICAjIHRlc3QgdGhlIGJ1ZmZlciBBUEkKKyAgICAgICAgZm9yIG9ianR5cGUgaW4gKCdidWZmZXInLCAnYnl0ZWFycmF5Jyk6CisgICAgICAgICAgICBzdGRvdXQgPSBnZXRfbWVzc2FnZSgnYXNjaWknLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICAgICByJ3N5cy5zdGRvdXQud3JpdGUoJXMoIlx4ZTkiKSknICUgb2JqdHlwZSwKKyAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAiXHhlOSIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgSGlzdG9yaWNhbGx5LCB0aGVzZSB0ZXN0cyBoYXZlIGJlZW4gc2xvcHB5IGFib3V0IHJlbW92aW5nIFRFU1RGTi4KKyAgICAjIFNvIGdldCByaWQgb2YgaXQgbm8gbWF0dGVyIHdoYXQuCisgICAgdHJ5OgorICAgICAgICBydW5fdW5pdHRlc3QoQXV0b0ZpbGVUZXN0cywgT3RoZXJGaWxlVGVzdHMsIEZpbGVTdWJjbGFzc1Rlc3RzLAorICAgICAgICAgICAgRmlsZVRocmVhZGluZ1Rlc3RzLCBTdGRvdXRUZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CmluZGV4IDUwMzU2MmIuLjQ3MzllZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKQEAgLTEsNSArMSw1IEBACiAKLWltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZSwgc2h1dGlsCitpbXBvcnQgb3MsIGZpbGVjbXAsIHNodXRpbCwgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIApAQCAtMjUsMTkgKzI1LDE5IEBACiAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWVfZGlmZikKIAogICAgIGRlZiB0ZXN0X21hdGNoaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUsIHNoYWxsb3c9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUsIHNoYWxsb3c9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpZGVudGljYWwgZmlsZSBmYWlscyIpCiAKICAgICBkZWYgdGVzdF9kaWZmZXJlbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbElmKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYpLAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYpLAogICAgICAgICAgICAgICAgICAgICAiTWlzbWF0Y2hlZCBmaWxlcyBjb21wYXJlIGFzIGVxdWFsIikKLSAgICAgICAgc2VsZi5mYWlsSWYoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCiAgICAgICAgICAgICAgICAgICAgICJGaWxlIGFuZCBkaXJlY3RvcnkgY29tcGFyZSBhcyBlcXVhbCIpCiAKIGNsYXNzIERpckNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02OSwxOSArNjksMTkgQEAKICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9kaWZmKQogCiAgICAgZGVmIHRlc3RfY21wZmlsZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10pID09CiAgICAgICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFtdLCBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBpdHNlbGYgZmFpbHMiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgWydmaWxlJ10pID09CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBbJ2ZpbGUnXSkgPT0KICAgICAgICAgICAgICAgICAgICAgICAgIChbJ2ZpbGUnXSwgW10sIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZGlyZWN0b3J5IHRvIHNhbWUgZmFpbHMiKQogCiAgICAgICAgICMgVHJ5IGl0IHdpdGggc2hhbGxvdz1GYWxzZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXIsIFsnZmlsZSddLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXIsIFsnZmlsZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFsbG93PUZhbHNlKSA9PQogICAgICAgICAgICAgICAgICAgICAgICAgKFsnZmlsZSddLCBbXSwgW10pLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gaXRzZWxmIGZhaWxzIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIFsnZmlsZSddLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgWydmaWxlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWxsb3c9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gc2FtZSBmYWlscyIpCiAKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQogICAgICAgICBvdXRwdXQuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuZmFpbElmKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2ZpbGUnLCAnZmlsZTInXSkgPT0KICAgICAgICAgICAgICAgICAgICAgKFsnZmlsZSddLCBbJ2ZpbGUyJ10sIFtdKSwKICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBtaXNtYXRjaGVkIGRpcmVjdG9yaWVzIGZhaWxzIikKQEAgLTEwMywyOCArMTAzLDI4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtkLmxlZnRfbGlzdCwgZC5yaWdodF9saXN0XSxbWydmaWxlJ10sIFsnRmlMZSddXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydmaWxlJ11dKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5jb21tb24gPT0gWydmaWxlJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmxlZnRfb25seSA9PSBkLnJpZ2h0X29ubHkgPT0gW10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLnNhbWVfZmlsZXMgPT0gWydmaWxlJ10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmRpZmZfZmlsZXMgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmNvbW1vbiA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IGQucmlnaHRfb25seSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZGlmZl9maWxlcyA9PSBbXSkKIAogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgZm9yIGNvbXBhcmlzb24gb2YgdHdvIGRpZmZlcmVudCBkaXJlY3RvcmllcwogICAgICAgICBkID0gZmlsZWNtcC5kaXJjbXAoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLmxlZnRfbGlzdCA9PSBbJ2ZpbGUnXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQucmlnaHRfbGlzdCA9PSBbJ2ZpbGUnLCAnZmlsZTInXSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQuY29tbW9uID09IFsnZmlsZSddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5sZWZ0X29ubHkgPT0gW10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkLnJpZ2h0X29ubHkgPT0gWydmaWxlMiddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5kaWZmX2ZpbGVzID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X2xpc3QgPT0gWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnJpZ2h0X2xpc3QgPT0gWydmaWxlJywgJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmNvbW1vbiA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5yaWdodF9vbmx5ID09IFsnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZGlmZl9maWxlcyA9PSBbXSkKIAogICAgICAgICAjIEFkZCBkaWZmZXJlbnQgZmlsZTIKICAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpCiAgICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKICAgICAgICAgb3V0cHV0LmNsb3NlKCkKICAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZC5kaWZmX2ZpbGVzID09IFsnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZGlmZl9maWxlcyA9PSBbJ2ZpbGUyJ10pCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQppbmRleCA5ZmIzZWE3Li44NGFlZDFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQpAQCAtNjUsOCArNjUsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIHQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmxpbmVubygpLCAyMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbGluZW5vKCksIDYpCi0gICAgICAgIHNlbGYuZmFpbElmKGZpLmlzZmlyc3RsaW5lKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKGZpLmlzc3RkaW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaS5pc2ZpcnN0bGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpLmlzc3RkaW4oKSkKIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJyVzLiBOZXh0ZmlsZSAoYnM9JXMpJyAlIChzdGFydCsyLCBicykKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbmFtZSgpLCB0MykKIAogICAgICAgICAgICAgbGluZSA9IGZpLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmxpbmVubygpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbGluZW5vKCksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIHQ0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQppbmRleCA3ZWVlZjdiLi45Njg4ZmZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQpAQCAtMSwyMyArMSwyNiBAQAogIyBBZGFwdGVkIGZyb20gdGVzdF9maWxlLnB5IGJ5IERhbmllbCBTdHV0emJhY2gKLSNmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcworaW1wb3J0IGVycm5vCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5Citmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9iYWRfZmQpCi1mcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0LCBtYWtlX2JhZF9mZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcHkza19ieXRlcyBhcyBieXRlcworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IHJ1bl9weXRob24KIAotaW1wb3J0IF9maWxlaW8KK2Zyb20gX2lvIGltcG9ydCBGaWxlSU8gYXMgX0ZpbGVJTwogCiBjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZiA9IF9maWxlaW8uX0ZpbGVJTyhURVNURk4sICd3JykKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICd3JykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgc2VsZi5mOgpAQCAtMjgsMzEgKzMxLDMxIEBACiAgICAgICAgICMgdmVyaWZ5IHdlYWsgcmVmZXJlbmNlcwogICAgICAgICBwID0gcHJveHkoc2VsZi5mKQogICAgICAgICBwLndyaXRlKGJ5dGVzKHJhbmdlKDEwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIHAudGVsbCgpKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQogICAgICAgICBzZWxmLmYgPSBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAndGVsbCcpCiAKICAgICBkZWYgdGVzdFNlZWtUZWxsKHNlbGYpOgotICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMoYnl0ZWFycmF5KHJhbmdlKDIwKSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYudGVsbCgpLCAyMCkKKyAgICAgICAgc2VsZi5mLndyaXRlKGJ5dGVzKHJhbmdlKDIwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMjApCiAgICAgICAgIHNlbGYuZi5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMCkKICAgICAgICAgc2VsZi5mLnNlZWsoMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIDEwKQogICAgICAgICBzZWxmLmYuc2Vlayg1LCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmYudGVsbCgpLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAxNSkKICAgICAgICAgc2VsZi5mLnNlZWsoLTUsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZi50ZWxsKCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIDEwKQogICAgICAgICBzZWxmLmYuc2VlaygtNSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5mLnRlbGwoKSwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTUpCiAKICAgICBkZWYgdGVzdEF0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IGV4cGVjdGVkIGF0dHJpYnV0ZXMgZXhpc3QKICAgICAgICAgZiA9IHNlbGYuZgogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYubW9kZSwgIndiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5jbG9zZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgRmFsc2UpCiAKICAgICAgICAgIyB2ZXJpZnkgdGhlIGF0dHJpYnV0ZXMgYXJlIHJlYWRvbmx5CiAgICAgICAgIGZvciBhdHRyIGluICdtb2RlJywgJ2Nsb3NlZCc6CkBAIC02MSwzMSArNjQsNDQgQEAKIAogICAgIGRlZiB0ZXN0UmVhZGludG8oc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvCi0gICAgICAgIHNlbGYuZi53cml0ZShieXRlcyhieXRlYXJyYXkoWzEsIDJdKSkpCisgICAgICAgIHNlbGYuZi53cml0ZShiIlx4MDFceDAyIikKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgYSA9IGFycmF5KCdiJywgYid4JyoxMCkKLSAgICAgICAgc2VsZi5mID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBhID0gYXJyYXkoYidiJywgYid4JyoxMCkKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgbiA9IHNlbGYuZi5yZWFkaW50byhhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhcnJheSgnYicsIFsxLCAyXSksIGFbOm5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFycmF5KGInYicsIFsxLCAyXSksIGFbOm5dKQorCisgICAgZGVmIHRlc3Rfbm9uZV9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmYud3JpdGUoYiJoaVxuYnllXG5hYmMiKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5yZWFkKE5vbmUpLCBiImhpXG5ieWVcbmFiYyIpCisgICAgICAgIHNlbGYuZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWRsaW5lKE5vbmUpLCBiImhpXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5yZWFkbGluZXMoTm9uZSksIFtiImJ5ZVxuIiwgYiJhYmMiXSkKIAogICAgIGRlZiB0ZXN0UmVwcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVwcihzZWxmLmYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiX2ZpbGVpby5fRmlsZUlPKCVkLCAlcykiICUgKHNlbGYuZi5maWxlbm8oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHNlbGYuZi5tb2RlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gbmFtZT0lciBtb2RlPSclcyc+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mLm5hbWUsIHNlbGYuZi5tb2RlKSkKKyAgICAgICAgZGVsIHNlbGYuZi5uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gZmQ9JXIgbW9kZT0nJXMnPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuZi5maWxlbm8oKSwgc2VsZi5mLm1vZGUpKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwgIjxfaW8uRmlsZUlPIFtjbG9zZWRdPiIpCiAKICAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYuZgotICAgICAgICBzZWxmLmFzc2VydF8obm90IGYuaXNhdHR5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZi5jbG9zZWQpCi0gICAgICAgICNzZWxmLmFzc2VydEVxdWFscyhmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkLCAxMCkgIyBPcGVuIGZvciByZWFkaW5nCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oZi5jbG9zZWQpCi0gICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8oZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0TWV0aG9kcyhzZWxmKToKICAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2lzYXR0eScsICdyZWFkJywgJ3JlYWRpbnRvJywKQEAgLTk1LDcgKzExMSw3IEBACiAgICAgICAgICAgICBtZXRob2RzLnJlbW92ZSgndHJ1bmNhdGUnKQogCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKIAogICAgICAgICBmb3IgbWV0aG9kbmFtZSBpbiBtZXRob2RzOgogICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLmYsIG1ldGhvZG5hbWUpCkBAIC0xMDcsNTUgKzEyMywxNTQgQEAKICAgICAgICAgIyBXaW5kb3dzIGFsd2F5cyByZXR1cm5zICJbRXJybm8gMTNdOiBQZXJtaXNzaW9uIGRlbmllZAogICAgICAgICAjIFVuaXggY2FsbHMgZGlyY2hlY2soKSBhbmQgcmV0dXJucyAiW0Vycm5vIDIxXTogSXMgYSBkaXJlY3RvcnkiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9maWxlaW8uX0ZpbGVJTygnLicsICdyJykKKyAgICAgICAgICAgIF9GaWxlSU8oJy4nLCAncicpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUuZXJybm8sIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmlsZW5hbWUsICIuIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQogCisgICAgI0Egc2V0IG9mIGZ1bmN0aW9ucyB0ZXN0aW5nIHRoYXQgd2UgZ2V0IGV4cGVjdGVkIGJlaGF2aW91ciBpZiBzb21lb25lIGhhcworICAgICNtYW51YWxseSBjbG9zZWQgdGhlIGludGVybmFsIGZpbGUgZGVzY3JpcHRvci4gIEZpcnN0LCBhIGRlY29yYXRvcjoKKyAgICBkZWYgQ2xvc2VkRkQoZnVuYyk6CisgICAgICAgIEB3cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgICNmb3JjaWJseSBjbG9zZSB0aGUgZmQgYmVmb3JlIGludm9raW5nIHRoZSBwcm9ibGVtIGZ1bmN0aW9uCisgICAgICAgICAgICBmID0gc2VsZi5mCisgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBkZWYgQ2xvc2VkRkRSYWlzZXMoZnVuYyk6CisgICAgICAgIEB3cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgICNmb3JjaWJseSBjbG9zZSB0aGUgZmQgYmVmb3JlIGludm9raW5nIHRoZSBwcm9ibGVtIGZ1bmN0aW9uCisgICAgICAgICAgICBmID0gc2VsZi5mCisgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2Uoc2VsZiwgZik6CisgICAgICAgIGYuY2xvc2UoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkV3JpdGUoc2VsZiwgZik6CisgICAgICAgIGYud3JpdGUoJ2EnKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkU2VlayhzZWxmLCBmKToKKyAgICAgICAgZi5zZWVrKDApCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRUZWxsKHNlbGYsIGYpOgorICAgICAgICBmLnRlbGwoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkVHJ1bmNhdGUoc2VsZiwgZik6CisgICAgICAgIGYudHJ1bmNhdGUoMCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFNlZWthYmxlKHNlbGYsIGYpOgorICAgICAgICBmLnNlZWthYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWRhYmxlKHNlbGYsIGYpOgorICAgICAgICBmLnJlYWRhYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFdyaXRhYmxlKHNlbGYsIGYpOgorICAgICAgICBmLndyaXRhYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZEZpbGVubyhzZWxmLCBmKToKKyAgICAgICAgZi5maWxlbm8oKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkSXNhdHR5KHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNhdHR5KCksIEZhbHNlKQorCisgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBvcy5jbG9zZShzZWxmLmYuZmlsZW5vKCkpCisgICAgICAgIHJldHVybiBzZWxmLmYKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWQoc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBmLnJlYWQoMSkKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWRhbGwoc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBmLnJlYWRhbGwoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGludG8oc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBhID0gYXJyYXkoYidiJywgYid4JyoxMCkKKyAgICAgICAgZi5yZWFkaW50byhhKQogCiBjbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdEFibGVzKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgInciKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkYWJsZSgpLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYud3JpdGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgInciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgInIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkYWJsZSgpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0YWJsZSgpLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgInIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgImErIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYud3JpdGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2Vla2FibGUoKSwgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuaXNhdHR5KCksIEZhbHNlKQorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAiYSsiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmlzYXR0eSgpLCBGYWxzZSkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oIi9kZXYvdHR5IiwgImEiKQorICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKICAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKICAgICAgICAgICAgICAgICAgICAgIyBPUydlcyB0aGF0IGRvbid0IHN1cHBvcnQgL2Rldi90dHkuCiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkYWJsZSgpLCBGYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gImRhcndpbiIgYW5kIFwKICAgICAgICAgICAgICAgICAgICAgICAgJ2JzZCcgbm90IGluIHN5cy5wbGF0Zm9ybSBhbmQgXAogICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3N1bm9zJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIFNvbWVob3cgL2Rldi90dHkgYXBwZWFycyBzZWVrYWJsZSBvbiBzb21lIEJTRHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2Vla2FibGUoKSwgRmFsc2UpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuaXNhdHR5KCksIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc2F0dHkoKSwgVHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQpAQCAtMTY0LDcgKzI3OSw3IEBACiAgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKICAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIiwgInJ3IiwgInJ0Iik6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZiA9IF9maWxlaW8uX0ZpbGVJTyhURVNURk4sIG1vZGUpCisgICAgICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCBtb2RlKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKQEAgLTE3MywxOSArMjg4LDM4IEBACiAKICAgICBkZWYgdGVzdFVuaWNvZGVPcGVuKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSByZXByIHdvcmtzIGZvciB1bmljb2RlIHRvbwotICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKHN0cihURVNURk4pLCAidyIpCisgICAgICAgIGYgPSBfRmlsZUlPKHN0cihURVNURk4pLCAidyIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQogCisgICAgZGVmIHRlc3RCeXRlc09wZW4oc2VsZik6CisgICAgICAgICMgT3BlbmluZyBhIGJ5dGVzIGZpbGVuYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZuID0gVEVTVEZOLmVuY29kZSgiYXNjaWkiKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgIyBTa2lwIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmID0gX0ZpbGVJTyhmbiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCiAgICAgZGVmIHRlc3RJbnZhbGlkRmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9maWxlaW8uX0ZpbGVJTywgLTEwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfZmlsZWlvLl9GaWxlSU8sIG1ha2VfYmFkX2ZkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9GaWxlSU8sIC0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtc3ZjcnQuZ2V0X29zZmhhbmRsZSwgbWFrZV9iYWRfZmQoKSkKIAogICAgIGRlZiB0ZXN0QmFkTW9kZUFyZ3VtZW50KHNlbGYpOgogICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIGdldCBhIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGJhZCBtb2RlIGFyZ3VtZW50CiAgICAgICAgIGJhZF9tb2RlID0gInF3ZXJ0eSIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IF9maWxlaW8uX0ZpbGVJTyhURVNURk4sIGJhZF9tb2RlKQorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCBiYWRfbW9kZSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKICAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKQEAgLTE5OCw3ICszMzIsNyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKIAogICAgIGRlZiB0ZXN0VHJ1bmNhdGUoc2VsZik6Ci0gICAgICAgIGYgPSBfZmlsZWlvLl9GaWxlSU8oVEVTVEZOLCAndycpCisgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQogICAgICAgICBmLndyaXRlKGJ5dGVzKGJ5dGVhcnJheShyYW5nZSgxMCkpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTApCiAgICAgICAgIGYudHJ1bmNhdGUoNSkKQEAgLTIwNywxOCArMzQxLDE5IEBACiAgICAgICAgIGYudHJ1bmNhdGUoMTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsIG9zLlNFRUtfRU5EKSwgMTUpCisgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RUcnVuY2F0ZU9uV2luZG93cyhzZWxmKToKICAgICAgICAgZGVmIGJ1ZzgwMTYzMSgpOgogICAgICAgICAgICAgIyBTRiBidWcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84MDE2MzE+CiAgICAgICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCi0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwgJ3cnKQotICAgICAgICAgICAgZi53cml0ZShieXRlcyhieXRlYXJyYXkocmFuZ2UoMTEpKSkpCisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMocmFuZ2UoMTEpKSkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBmID0gX2ZpbGVpby5fRmlsZUlPKFRFU1RGTiwncisnKQorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCdyKycpCiAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKDUpCi0gICAgICAgICAgICBpZiBkYXRhICE9IGJ5dGVzKGJ5dGVhcnJheShyYW5nZSg1KSkpOgorICAgICAgICAgICAgaWYgZGF0YSAhPSBieXRlcyhyYW5nZSg1KSk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWFkIG9uIGZpbGUgb3BlbmVkIGZvciB1cGRhdGUgZmFpbGVkICVyIiAlIGRhdGEpCiAgICAgICAgICAgICBpZiBmLnRlbGwoKSAhPSA1OgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmlsZSBwb3MgYWZ0ZXIgcmVhZCB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKQEAgLTI1NiwxNiArMzkxLDM1IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RJbnZhbGlkSW5pdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfZmlsZWlvLl9GaWxlSU8sICIxIiwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCAiMSIsIDAsIDApCiAKICAgICBkZWYgdGVzdFdhcm5pbmdzKHNlbGYpOgogICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfZmlsZWlvLl9GaWxlSU8sIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBbXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfZmlsZWlvLl9GaWxlSU8sICIvc29tZS9pbnZhbGlkL25hbWUiLCAicnQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX0ZpbGVJTywgIi9zb21lL2ludmFsaWQvbmFtZSIsICJydCIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQogCisgICAgZGVmIHRlc3Rfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODQzODogdHJ5IHRvIG9wZW4gYSBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZXMuCisgICAgICAgICMgSXQgc2hvdWxkIGVpdGhlciBmYWlsIGJlY2F1c2UgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBvciB0aGUgZmlsZW5hbWUKKyAgICAgICAgIyBjYW4ndCBiZSByZXByZXNlbnRlZCB1c2luZyB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZywgYnV0IG5vdCBiZWNhdXNlCisgICAgICAgICMgb2YgYSBMb29rdXBFcnJvciBmb3IgdGhlIGVycm9yIGhhbmRsZXIgInN1cnJvZ2F0ZWVzY2FwZSIuCisgICAgICAgIGZpbGVuYW1lID0gdSdcdWRjODAudHh0JworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIF9GaWxlSU8oZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRW5jb2RlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFNwYXduIGEgc2VwYXJhdGUgUHl0aG9uIHByb2Nlc3Mgd2l0aCBhIGRpZmZlcmVudCAiZmlsZSBzeXN0ZW0KKyAgICAgICAgIyBkZWZhdWx0IGVuY29kaW5nIiwgdG8gZXhlcmNpc2UgdGhpcyBmdXJ0aGVyLgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgICAgIGVudltiJ0xDX0NUWVBFJ10gPSBiJ0MnCisgICAgICAgIF8sIG91dCA9IHJ1bl9weXRob24oJy1jJywgJ2ltcG9ydCBfaW87IF9pby5GaWxlSU8oJXIpJyAlIGZpbGVuYW1lLCBlbnY9ZW52KQorICAgICAgICBpZiAoJ1VuaWNvZGVFbmNvZGVFcnJvcicgbm90IGluIG91dCBhbmQKKyAgICAgICAgICAgICdJT0Vycm9yOiBbRXJybm8gMl0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScgbm90IGluIG91dCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0JhZCBvdXRwdXQ6ICVyJyAlIG91dCkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgICMgSGlzdG9yaWNhbGx5LCB0aGVzZSB0ZXN0cyBoYXZlIGJlZW4gc2xvcHB5IGFib3V0IHJlbW92aW5nIFRFU1RGTi4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CmluZGV4IDIzYzBjNTQuLmUxNmJlMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtNSwxMSArNSwyNyBAQAogaW1wb3J0IG1hdGgKIGZyb20gbWF0aCBpbXBvcnQgaXNpbmYsIGlzbmFuLCBjb3B5c2lnbiwgbGRleHAKIGltcG9ydCBvcGVyYXRvcgotaW1wb3J0IHJhbmRvbSwgZnJhY3Rpb25zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgc3lzCiAKIElORiA9IGZsb2F0KCJpbmYiKQogTkFOID0gZmxvYXQoIm5hbiIpCiAKK2hhdmVfZ2V0Zm9ybWF0ID0gaGFzYXR0cihmbG9hdCwgIl9fZ2V0Zm9ybWF0X18iKQorcmVxdWlyZXNfZ2V0Zm9ybWF0ID0gdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX2dldGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIF9fZ2V0Zm9ybWF0X18iKQorcmVxdWlyZXNfc2V0Zm9ybWF0ID0gdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZsb2F0LCAiX19zZXRmb3JtYXRfXyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgX19zZXRmb3JtYXRfXyIpCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfZ2V0Zm9ybWF0IGFuZAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworI2xvY2F0ZSBmaWxlIHdpdGggZmxvYXQgZm9ybWF0IHRlc3QgdmFsdWVzCit0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCitmb3JtYXRfdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdmb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0JykKKwogY2xhc3MgR2VuZXJhbEZsb2F0Q2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CkBAIC0yNCwxMSArNDAsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrLTMuMTQiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0rMy4xNCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLS0zLjE0IikKKyAgICAgICAgIyBjaGVjayB0aGF0IHdlIGRvbid0IGFjY2VwdCBhbHRlcm5hdGUgZXhwb25lbnQgbWFya2VycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0xLjdkMjkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIjNELTE0IikKICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQodW5pY29kZSgiICAzLjE0ICAiKSksIDMuMTQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHVuaWNvZGUoIiAgXHUwNjYzLlx1MDY2MVx1MDY2NCAgIiwncmF3LXVuaWNvZGUtZXNjYXBlJykpLCAzLjE0KQotICAgICAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBsaW1pdGF0aW9uIGluIFB5RmxvYXRfRnJvbVN0cmluZygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgdW5pY29kZSgiMSIqMTAwMDApKQorCisgICAgICAgICMgZXh0cmEgbG9uZyBzdHJpbmdzIHNob3VsZCBubyBsb25nZXIgYmUgYSBwcm9ibGVtCisgICAgICAgICMgKGluIDIuNiwgbG9uZyB1bmljb2RlIGlucHV0cyB0byBmbG9hdCByYWlzZWQgVmFsdWVFcnJvcikKKyAgICAgICAgZmxvYXQoJy4nICsgJzEnKjEwMDApCisgICAgICAgIGZsb2F0KHVuaWNvZGUoJy4nICsgJzEnKjEwMDApKQogCiAgICAgQHRlc3Rfc3VwcG9ydC5ydW5fd2l0aF9sb2NhbGUoJ0xDX05VTUVSSUMnLCAnZnJfRlInLCAnZGVfREUnKQogICAgIGRlZiB0ZXN0X2Zsb2F0X3dpdGhfY29tbWEoc2VsZik6CkBAIC0xMzMsNiArMTU1LDIzNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCgnLWluZicpLmFzX2ludGVnZXJfcmF0aW8pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0KCduYW4nKS5hc19pbnRlZ2VyX3JhdGlvKQogCisgICAgZGVmIGFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHNlbGYsIGEsIGIpOgorICAgICAgICAjIGZhaWwgdW5sZXNzIGEgPT0gYiBhbmQgYSBhbmQgYiBoYXZlIHRoZSBzYW1lIHNpZ24gYml0OworICAgICAgICAjIHRoZSBvbmx5IGRpZmZlcmVuY2UgZnJvbSBhc3NlcnRFcXVhbCBpcyB0aGF0IHRoaXMgdGVzdAorICAgICAgICAjIGRpc3Rpbmdpc2hlcyAtMC4wIGFuZCAwLjAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEsIGNvcHlzaWduKDEuMCwgYSkpLCAoYiwgY29weXNpZ24oMS4wLCBiKSkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9mbG9hdF9tb2Qoc2VsZik6CisgICAgICAgICMgQ2hlY2sgYmVoYXZpb3VyIG9mICUgb3BlcmF0b3IgZm9yIElFRUUgNzU0IHNwZWNpYWwgY2FzZXMuCisgICAgICAgICMgSW4gcGFydGljdWxhciwgY2hlY2sgc2lnbnMgb2YgemVyb3MuCisgICAgICAgIG1vZCA9IG9wZXJhdG9yLm1vZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0xLjAsIDEuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTFlLTEwMCwgMS4wKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMC4wLCAxLjApLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDAuMCwgMS4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxZS0xMDAsIDEuMCksIDFlLTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMS4wLCAxLjApLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTEuMCwgLTEuMCksIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0xZS0xMDAsIC0xLjApLCAtMWUtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMC4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMC4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMWUtMTAwLCAtMS4wKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMS4wLCAtMS4wKSwgLTAuMCkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X3BvdyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGJ1aWx0aW4gcG93IGFuZCAqKiBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgIyBTcGVjaWFsIGNhc2VzIHRha2VuIGZyb20gc2VjdGlvbiBGLjkuNC40IG9mIHRoZSBDOTkgc3BlY2lmaWNhdGlvbgorCisgICAgICAgIGZvciBwb3dfb3AgaW4gcG93LCBvcGVyYXRvci5wb3c6CisgICAgICAgICAgICAjIHgqKk5BTiBpcyBOQU4gZm9yIGFueSB4IGV4Y2VwdCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC1JTkYsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLTEuMCwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0wLjUsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC41LCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoSU5GLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCBOQU4pKSkKKworICAgICAgICAgICAgIyBOQU4qKnkgaXMgTkFOIGZvciBhbnkgeSBleGNlcHQgKy0wCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLUlORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIC0yLjApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtMS4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLTAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDEuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDIuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIElORikpKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBhIG5lZ2F0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMS4wKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBmaW5pdGUgYW5kIG5lZ2F0aXZlCisgICAgICAgICAgICAjIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMC41KQorCisgICAgICAgICAgICAjICgrLTApKip5IGlzICstMCBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAxLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgaXMgMCBmb3IgeSBmaW5pdGUgYW5kIHBvc2l0aXZlIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDIuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAyLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKC0xKSoqKy1pbmYgaXMgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLUlORiksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIElORiksIDEuMCkKKworICAgICAgICAgICAgIyAxKip5IGlzIDEgZm9yIGFueSB5LCBldmVuIGlmIHkgaXMgYW4gaW5maW5pdHkgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC1JTkYpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0yLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0xLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjUpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMC41KSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgSU5GKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCBOQU4pLCAxLjApCisKKyAgICAgICAgICAgICMgeCoqKy0wIGlzIDEgZm9yIGFueSB4LCBldmVuIGlmIHggaXMgYSB6ZXJvLCBpbmZpbml0eSwgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoTkFOLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKE5BTiwgLTAuMCksIDEuMCkKKworICAgICAgICAgICAgIyB4Kip5IHJhaXNlcyBWYWx1ZUVycm9yIGZvciBmaW5pdGUgbmVnYXRpdmUgeCBhbmQgbm9uLWludGVncmFsIHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMS4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMS4wLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0wLjUsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0wLjUsIDAuNSkKKworICAgICAgICAgICAgIyB4KiotSU5GIGlzIElORiBmb3IgYWJzKHgpIDwgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIC1JTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIC1JTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIC1JTkYpLCBJTkYpCisKKyAgICAgICAgICAgICMgeCoqLUlORiBpcyAwIGZvciBhYnMoeCkgPiAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLUlORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLUlORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgLUlORiksIDAuMCkKKworICAgICAgICAgICAgIyB4KipJTkYgaXMgMCBmb3IgYWJzKHgpIDwgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIElORiksIDAuMCkKKworICAgICAgICAgICAgIyB4KipJTkYgaXMgSU5GIGZvciBhYnMoeCkgPiAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCBJTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCBJTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgSU5GKSwgSU5GKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyAtMC4wIGZvciB5IGEgbmVnYXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0xLjApLCAtMC4wKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyAwLjAgZm9yIHkgbmVnYXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0yLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIC1JTkYgZm9yIHkgYSBwb3NpdGl2ZSBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMS4wKSwgLUlORikKKworICAgICAgICAgICAgIyAoLUlORikqKnkgaXMgSU5GIGZvciB5IHBvc2l0aXZlIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDAuNSksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDIuMCksIElORikKKworICAgICAgICAgICAgIyBJTkYqKnkgaXMgSU5GIGZvciB5IHBvc2l0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIDAuNSksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMS4wKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAyLjApLCBJTkYpCisKKyAgICAgICAgICAgICMgSU5GKip5IGlzIDAuMCBmb3IgeSBuZWdhdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMi4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMS4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMC41KSwgMC4wKQorCisgICAgICAgICAgICAjIGJhc2ljIGNoZWNrcyBub3QgY292ZXJlZCBieSB0aGUgc3BlY2lhbCBjYXNlcyBhYm92ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMS4wKSwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAxLjApLCAtMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgMi4wKSwgNC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0xLjApLCAtMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDEuMCksIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAyLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0yLjApLCAwLjI1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMS4wKSwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDEuMCksIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMi4wKSwgNC4wKQorCisgICAgICAgICAgICAjIDEgKiogbGFyZ2UgYW5kIC0xICoqIGxhcmdlOyBzb21lIGxpYm1zIGFwcGFyZW50bHkKKyAgICAgICAgICAgICMgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZXNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0xZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMWUxMDApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMWUxMDApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAxZTEwMCksIDEuMCkKKworICAgICAgICAgICAgIyBjaGVjayBzaWduIGZvciByZXN1bHRzIHRoYXQgdW5kZXJmbG93IHRvIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0yMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0yLjAsIC0yMDAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMjAwMS4wKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDEuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIDIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgMjAwMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgMjAwMS4wKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAyMDAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIDIwMDEuMCksIDAuMCkKKworICAgICAgICAgICAgIyBjaGVjayB3ZSBkb24ndCByYWlzZSBhbiBleGNlcHRpb24gZm9yIHN1Ym5vcm1hbCByZXN1bHRzLAorICAgICAgICAgICAgIyBhbmQgdmFsaWRhdGUgc2lnbnMuICBUZXN0cyBjdXJyZW50bHkgZGlzYWJsZWQsIHNpbmNlCisgICAgICAgICAgICAjIHRoZXkgZmFpbCBvbiBzeXN0ZW1zIHdoZXJlIGEgc3Vibm9ybWFsIHJlc3VsdCBmcm9tIHBvdworICAgICAgICAgICAgIyBpcyBmbHVzaGVkIHRvIHplcm8gKGUuZy4gRGViaWFuL2lhNjQuKQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ4KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKC0wLjUsIDEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ3KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wID4gcG93X29wKC0wLjUsIDEwNDcpID4gLTFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKDIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoLTIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMi4wLCAtMTA0NykgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA+IHBvd19vcCgtMi4wLCAtMTA0NykgPiAtMWUtMzE1KQorCisKK0ByZXF1aXJlc19zZXRmb3JtYXQKIGNsYXNzIEZvcm1hdEZ1bmN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE0NCwxMCArMzk0LDEwIEBACiAgICAgICAgIGZsb2F0Ll9fc2V0Zm9ybWF0X18oJ2Zsb2F0Jywgc2VsZi5zYXZlX2Zvcm1hdHNbJ2Zsb2F0J10pCiAKICAgICBkZWYgdGVzdF9nZXRmb3JtYXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhmbG9hdC5fX2dldGZvcm1hdF9fKCdkb3VibGUnKSBpbgotICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQotICAgICAgICBzZWxmLmFzc2VydF8oZmxvYXQuX19nZXRmb3JtYXRfXygnZmxvYXQnKSBpbgotICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQorICAgICAgICBzZWxmLmFzc2VydEluKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmbG9hdC5fX2dldGZvcm1hdF9fKCdmbG9hdCcpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19nZXRmb3JtYXRfXywgJ2NoaWNrZW4nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0Ll9fZ2V0Zm9ybWF0X18sIDEpCiAKQEAgLTE4Myw2ICs0MzMsNyBAQAogIyBvbiBub24tSUVFRSBwbGF0Zm9ybXMsIGF0dGVtcHRpbmcgdG8gdW5wYWNrIGEgYml0IHBhdHRlcm4KICMgcmVwcmVzZW50aW5nIGFuIGluZmluaXR5IG9yIGEgTmFOIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24uCiAKK0ByZXF1aXJlc19zZXRmb3JtYXQKIGNsYXNzIFVua25vd25Gb3JtYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfZm9ybWF0cyA9IHsnZG91YmxlJzpmbG9hdC5fX2dldGZvcm1hdF9fKCdkb3VibGUnKSwKQEAgLTIxNSw0MyArNDY2LDExOSBAQAogIyBsZXQncyBhbHNvIHRyeSB0byBndWFyYW50ZWUgdGhhdCAtMC4wIGFuZCAwLjAgZG9uJ3QgZ2V0IGNvbmZ1c2VkLgogCiBjbGFzcyBJRUVFRm9ybWF0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgZGVmIHRlc3RfZG91YmxlX3NwZWNpYWxzX2RvX3VucGFjayhzZWxmKToKLSAgICAgICAgICAgIGZvciBmbXQsIGRhdGEgaW4gWygnPmQnLCBCRV9ET1VCTEVfSU5GKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmQnLCBCRV9ET1VCTEVfTkFOKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfSU5GKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfTkFOKV06Ci0gICAgICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCiAKLSAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJmbG9hdCIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgZGVmIHRlc3RfZmxvYXRfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgotICAgICAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZicsIEJFX0ZMT0FUX0lORiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5mJywgQkVfRkxPQVRfTkFOKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9JTkYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX05BTildOgotICAgICAgICAgICAgICAgIHN0cnVjdC51bnBhY2soZm10LCBkYXRhKQorICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2RvdWJsZV9zcGVjaWFsc19kb191bnBhY2soc2VsZik6CisgICAgICAgIGZvciBmbXQsIGRhdGEgaW4gWygnPmQnLCBCRV9ET1VCTEVfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZCcsIEJFX0RPVUJMRV9OQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxkJywgTEVfRE9VQkxFX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfTkFOKV06CisgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKIAotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgZGVmIHRlc3RfbmVnYXRpdmVfemVybyhzZWxmKToKLSAgICAgICAgICAgIGltcG9ydCBtYXRoCi0gICAgICAgICAgICBkZWYgcG9zX3BvcygpOgotICAgICAgICAgICAgICAgIHJldHVybiAwLjAsIG1hdGguYXRhbjIoMC4wLCAtMSkKLSAgICAgICAgICAgIGRlZiBwb3NfbmVnKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKLSAgICAgICAgICAgIGRlZiBuZWdfcG9zKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0wLjAsIG1hdGguYXRhbjIoMC4wLCAtMSkKLSAgICAgICAgICAgIGRlZiBuZWdfbmVnKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0wLjAsIG1hdGguYXRhbjIoLTAuMCwgLTEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3NfcG9zKCksIG5lZ19wb3MoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvc19uZWcoKSwgbmVnX25lZygpKQorICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X3NwZWNpYWxzX2RvX3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZicsIEJFX0ZMT0FUX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmYnLCBCRV9GTE9BVF9OQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX05BTildOgorICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCiAKLSAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgIGRlZiB0ZXN0X3VuZGVyZmxvd19zaWduKHNlbGYpOgotICAgICAgICAgICAgaW1wb3J0IG1hdGgKLSAgICAgICAgICAgICMgY2hlY2sgdGhhdCAtMWUtMTAwMCBnaXZlcyAtMC4wLCBub3QgMC4wCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmF0YW4yKC0xZS0xMDAwLCAtMSksIG1hdGguYXRhbjIoLTAuMCwgLTEpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5hdGFuMihmbG9hdCgnLTFlLTEwMDAnKSwgLTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aC5hdGFuMigtMC4wLCAtMSkpCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfbmVnYXRpdmVfemVybyhzZWxmKToKKyAgICAgICAgZGVmIHBvc19wb3MoKToKKyAgICAgICAgICAgIHJldHVybiAwLjAsIG1hdGguYXRhbjIoMC4wLCAtMSkKKyAgICAgICAgZGVmIHBvc19uZWcoKToKKyAgICAgICAgICAgIHJldHVybiAwLjAsIG1hdGguYXRhbjIoLTAuMCwgLTEpCisgICAgICAgIGRlZiBuZWdfcG9zKCk6CisgICAgICAgICAgICByZXR1cm4gLTAuMCwgbWF0aC5hdGFuMigwLjAsIC0xKQorICAgICAgICBkZWYgbmVnX25lZygpOgorICAgICAgICAgICAgcmV0dXJuIC0wLjAsIG1hdGguYXRhbjIoLTAuMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zX3BvcygpLCBuZWdfcG9zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zX25lZygpLCBuZWdfbmVnKCkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF91bmRlcmZsb3dfc2lnbihzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IC0xZS0xMDAwIGdpdmVzIC0wLjAsIG5vdCAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0xZS0xMDAwLCAtMSksIG1hdGguYXRhbjIoLTAuMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoZmxvYXQoJy0xZS0xMDAwJyksIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmF0YW4yKC0wLjAsIC0xKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyB0aGVzZSBzaG91bGQgYmUgcmV3cml0dGVuIHRvIHVzZSBib3RoIGZvcm1hdCh4LCBzcGVjKSBhbmQKKyAgICAgICAgIyB4Ll9fZm9ybWF0X18oc3BlYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAsICdmJyksICcwLjAwMDAwMCcpCisKKyAgICAgICAgIyB0aGUgZGVmYXVsdCBpcyAnZycsIGV4Y2VwdCBmb3IgZW1wdHkgZm9ybWF0IHNwZWMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMC4wLCAnJyksICcwLjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAxLCAnJyksICcwLjAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMC4wMSwgJ2cnKSwgJzAuMDEnKQorCisgICAgICAgICMgZW1wdHkgcHJlc2VudGF0aW9uIHR5cGUgc2hvdWxkIGZvcm1hdCBpbiB0aGUgc2FtZSB3YXkgYXMgc3RyCisgICAgICAgICMgKGlzc3VlIDU5MjApCisgICAgICAgIHggPSAxMDAvNy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeCwgJycpLCBzdHIoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHgsICctJyksIHN0cih4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeCwgJz4nKSwgc3RyKHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnMicpLCBzdHIoeCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS4wLCAnZicpLCAnMS4wMDAwMDAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjAsICdmJyksICctMS4wMDAwMDAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCAxLjAsICcgZicpLCAnIDEuMDAwMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJyBmJyksICctMS4wMDAwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCggMS4wLCAnK2YnKSwgJysxLjAwMDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjAsICcrZicpLCAnLTEuMDAwMDAwJykKKworICAgICAgICAjICUgZm9ybWF0dGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS4wLCAnJScpLCAnLTEwMC4wMDAwMDAlJykKKworICAgICAgICAjIGNvbnZlcnNpb24gdG8gc3RyaW5nIHNob3VsZCBmYWlsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMy4wLCAicyIpCisKKyAgICAgICAgIyBvdGhlciBmb3JtYXQgc3BlY2lmaWVycyBzaG91bGRuJ3Qgd29yayBvbiBmbG9hdHMsCisgICAgICAgICMgIGluIHBhcnRpY3VsYXIgaW50IHNwZWNpZmllcnMKKyAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluIChbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpKzEpXSk6CisgICAgICAgICAgICBpZiBub3QgZm9ybWF0X3NwZWMgaW4gJ2VFZkZnR24lJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTEuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxZTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMWUxMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMWUtMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xZS0xMDAsIGZvcm1hdF9zcGVjKQorCisgICAgICAgICMgaXNzdWUgMzM4MjogJ2YnIGFuZCAnRicgd2l0aCBpbmYncyBhbmQgbmFuJ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChJTkYpLCAnaW5mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChJTkYpLCAnSU5GJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdCgtSU5GKSwgJy1pbmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KC1JTkYpLCAnLUlORicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoTkFOKSwgJ25hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoTkFOKSwgJ05BTicpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9mb3JtYXRfdGVzdGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3Blbihmb3JtYXRfdGVzdGZpbGUpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3Blbihmb3JtYXRfdGVzdGZpbGUpOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLS0nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBsaHMsIHJocyA9IG1hcChzdHIuc3RyaXAsIGxpbmUuc3BsaXQoJy0+JykpCisgICAgICAgICAgICAgICAgZm10LCBhcmcgPSBsaHMuc3BsaXQoKQorICAgICAgICAgICAgICAgIGFyZyA9IGZsb2F0KGFyZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCAlIGFyZywgcmhzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRoLmlzbmFuKGFyZykgYW5kIGNvcHlzaWduKDEuMCwgYXJnKSA+IDAuMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQgJSAtYXJnLCAnLScgKyByaHMpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTU4NjQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEyMy40NTYsICcuNCcpLCAnMTIzLjUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxMjM0LjU2LCAnLjQnKSwgJzEuMjM1ZSswMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEyMzQ1LjYsICcuNCcpLCAnMS4yMzVlKzA0JykKIAogY2xhc3MgUmVwclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgpAQCAtMjY1LDE2ICs1OTIsMjQwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGV2YWwocmVwcih2KSkpCiAgICAgICAgIGZsb2F0c19maWxlLmNsb3NlKCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKKyAgICBkZWYgdGVzdF9zaG9ydF9yZXByKHNlbGYpOgorICAgICAgICAjIHRlc3Qgc2hvcnQgZmxvYXQgcmVwciBpbnRyb2R1Y2VkIGluIFB5dGhvbiAzLjEuICBPbmUgYXNwZWN0CisgICAgICAgICMgb2YgdGhpcyByZXByIGlzIHRoYXQgd2UgZ2V0IHNvbWUgZGVncmVlIG9mIHN0ciAtPiBmbG9hdCAtPgorICAgICAgICAjIHN0ciByb3VuZHRyaXBwaW5nLiAgSW4gcGFydGljdWxhciwgZm9yIGFueSBudW1lcmljIHN0cmluZworICAgICAgICAjIGNvbnRhaW5pbmcgMTUgb3IgZmV3ZXIgc2lnbmlmaWNhbnQgZGlnaXRzLCB0aG9zZSBleGFjdCBzYW1lCisgICAgICAgICMgZGlnaXRzIChtb2R1bG8gdHJhaWxpbmcgemVyb3MpIHNob3VsZCBhcHBlYXIgaW4gdGhlIG91dHB1dC4KKyAgICAgICAgIyBObyBtb3JlIHJlcHIoMC4wMykgLT4gIjAuMDI5OTk5OTk5OTk5OTk5OTk5IiEKKworICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbCisgICAgICAgICAgICAjIG91dHB1dCBhbHdheXMgaW5jbHVkZXMgKmVpdGhlciogYSBkZWNpbWFsIHBvaW50IGFuZCBhdAorICAgICAgICAgICAgIyBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhhdCBwb2ludCwgb3IgYW4gZXhwb25lbnQuCisgICAgICAgICAgICAnMC4wJywKKyAgICAgICAgICAgICcxLjAnLAorICAgICAgICAgICAgJzAuMDEnLAorICAgICAgICAgICAgJzAuMDInLAorICAgICAgICAgICAgJzAuMDMnLAorICAgICAgICAgICAgJzAuMDQnLAorICAgICAgICAgICAgJzAuMDUnLAorICAgICAgICAgICAgJzEuMjM0NTY3ODknLAorICAgICAgICAgICAgJzEwLjAnLAorICAgICAgICAgICAgJzEwMC4wJywKKyAgICAgICAgICAgICMgdmFsdWVzID49IDFlMTYgZ2V0IGFuIGV4cG9uZW50Li4uCisgICAgICAgICAgICAnMTAwMDAwMDAwMDAwMDAwMC4wJywKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTkwLjAnLAorICAgICAgICAgICAgJzFlKzE2JywKKyAgICAgICAgICAgICcxZSsxNycsCisgICAgICAgICAgICAjIC4uLiBhbmQgc28gZG8gdmFsdWVzIDwgMWUtNAorICAgICAgICAgICAgJzAuMDAxJywKKyAgICAgICAgICAgICcwLjAwMTAwMScsCisgICAgICAgICAgICAnMC4wMDAxMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAnMC4wMDAxJywKKyAgICAgICAgICAgICc5Ljk5OTk5OTk5OTk5OWUtMDUnLAorICAgICAgICAgICAgJzFlLTA1JywKKyAgICAgICAgICAgICMgdmFsdWVzIGRlc2lnbmVkIHRvIHByb3Zva2UgZmFpbHVyZSBpZiB0aGUgRlBVIHJvdW5kaW5nCisgICAgICAgICAgICAjIHByZWNpc2lvbiBpc24ndCBzZXQgY29ycmVjdGx5CisgICAgICAgICAgICAnOC43MjI5Mzc3MTExMDM2MWUrMjUnLAorICAgICAgICAgICAgJzcuNDcwMDUzMDczNDIzMTNlKzI2JywKKyAgICAgICAgICAgICcyLjg2NDM4MDAwNDM5Njk4ZSsyOCcsCisgICAgICAgICAgICAnOC44OTE0MjkwNTI0NjE3OWUrMjgnLAorICAgICAgICAgICAgJzMuMDg1NzgwODcwNzkyMzJlKzM1JywKKyAgICAgICAgICAgIF0KKworICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBuZWdzID0gJy0nK3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcmVwcihmbG9hdChzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lZ3MsIHJlcHIoZmxvYXQobmVncykpKQorCisKK0ByZXF1aXJlc19JRUVFXzc1NAorY2xhc3MgUm91bmRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2Vjb25kX2FyZ3VtZW50X3R5cGUoc2VsZik6CisgICAgICAgICMgYW55IHR5cGUgd2l0aCBhbiBfX2luZGV4X18gbWV0aG9kIHNob3VsZCBiZSBwZXJtaXR0ZWQgYXMKKyAgICAgICAgIyBhIHNlY29uZCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDEyLjM0LCBUcnVlKSwgMTIuMykKKworICAgICAgICBjbGFzcyBNeUluZGV4KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOiByZXR1cm4gNAorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjEyMzQ1NiwgTXlJbmRleCgpKSwgLTAuMTIzNSkKKyAgICAgICAgIyBidXQgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIDMuMTQxNTksIDIuMCkKKworICAgIGRlZiB0ZXN0X2luZl9uYW4oc2VsZik6CisgICAgICAgICMgcm91bmRpbmcgYW4gaW5maW5pdHkgb3IgbmFuIHJldHVybnMgdGhlIHNhbWUgbnVtYmVyOworICAgICAgICAjIChpbiBweTNrLCByb3VuZGluZyBhbiBpbmZpbml0eSBvciBuYW4gcmFpc2VzIGFuIGVycm9yLAorICAgICAgICAjICBzaW5jZSB0aGUgcmVzdWx0IGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgbG9uZykuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC1JTkYpLCAtSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyb3VuZChOQU4pKSkKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTUsIDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZChJTkYsIG4pLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC1JTkYsIG4pLCAtSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocm91bmQoTkFOLCBuKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgSU5GLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIC1JTkYsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgTkFOLCAiY2VjaSBuJ2VzdCBwYXMgdW4gaW50ZWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIC0wLjAsIDFqKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfbihzZWxmKToKKyAgICAgICAgZm9yIG4gaW4gWzMyNCwgMzI1LCA0MDAsIDIqKjMxLTEsIDIqKjMxLCAyKiozMiwgMioqMTAwXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzLjQ1NiwgbiksIDEyMy40NTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMjMuNDU2LCBuKSwgLTEyMy40NTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMzAwLCBuKSwgMWUzMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlLTMyMCwgbiksIDFlLTMyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTE1MCwgMzAwKSwgMWUxNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIDMwNyksIDFlMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0zLjE0MTUsIDMwOCksIC0zLjE0MTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUxNTAsIDMwOSksIDFlMTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuNGUtMzE1LCAzMTUpLCAxZS0zMTUpCisKKyAgICBkZWYgdGVzdF9zbWFsbF9uKHNlbGYpOgorICAgICAgICBmb3IgbiBpbiBbLTMwOCwgLTMwOSwgLTQwMCwgMS0yKiozMSwgLTIqKjMxLCAtMioqMzEtMSwgLTIqKjEwMF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEyMy40NTYsIG4pLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMjMuNDU2LCBuKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIG4pLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlLTMyMCwgbiksIDAuMCkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByb3VuZCwgMS42ZTMwOCwgLTMwOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcm91bmQsIC0xLjdlMzA4LCAtMzA4KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpID09ICdzaG9ydCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgc2hvcnQgZmxvYXQgcmVwciBzdHlsZSIpCisgICAgZGVmIHRlc3RfcHJldmlvdXNfcm91bmRfYnVncyhzZWxmKToKKyAgICAgICAgIyBwYXJ0aWN1bGFyIGNhc2VzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiBidWcgcmVwb3J0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDU2Mjk0OTk1MzQyMTMxMi41LCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNTYyOTQ5OTUzNDIxMzEyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNTYyOTQ5OTUzNDIxMzEuNSwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgNTYyOTQ5OTUzNDIxMzEuNSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IGFwcGxpZXMgb25seSB3aGVuIHVzaW5nIHNob3J0IGZsb2F0IHJlcHIgc3R5bGUiKQorICAgIGRlZiB0ZXN0X2hhbGZ3YXlfY2FzZXMoc2VsZik6CisgICAgICAgICMgSGFsZndheSBjYXNlcyBuZWVkIHNwZWNpYWwgYXR0ZW50aW9uLCBzaW5jZSB0aGUgY3VycmVudAorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGhhcyB0byBkZWFsIHdpdGggdGhlbSBzcGVjaWFsbHkuICBOb3RlIHRoYXQKKyAgICAgICAgIyAyLnggcm91bmRzIGhhbGZ3YXkgdmFsdWVzIHVwIChpLmUuLCBhd2F5IGZyb20gemVybykgd2hpbGUKKyAgICAgICAgIyAzLnggZG9lcyByb3VuZC1oYWxmLXRvLWV2ZW4uCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC4xMjUsIDIpLCAwLjEzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuMzc1LCAyKSwgMC4zOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjYyNSwgMiksIDAuNjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC44NzUsIDIpLCAwLjg4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjEyNSwgMiksIC0wLjEzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjM3NSwgMiksIC0wLjM4KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjYyNSwgMiksIC0wLjYzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjg3NSwgMiksIC0wLjg4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC4yNSwgMSksIDAuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjc1LCAxKSwgMC44KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjI1LCAxKSwgLTAuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC43NSwgMSksIC0wLjgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNi41LCAwKSwgLTcuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNS41LCAwKSwgLTYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMS41LCAwKSwgLTIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMC41LCAwKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgwLjUsIDApLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS41LCAwKSwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDIuNSwgMCksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgzLjUsIDApLCA0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNC41LCAwKSwgNS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDUuNSwgMCksIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg2LjUsIDApLCA3LjApCisKKyAgICAgICAgIyBzYW1lIGJ1dCB3aXRob3V0IGFuIGV4cGxpY2l0IHNlY29uZCBhcmd1bWVudDsgaW4gMy54IHRoZXNlCisgICAgICAgICMgd2lsbCBnaXZlIGludGVnZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTYuNSksIC03LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTUuNSksIC02LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEuNSksIC0yLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTAuNSksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMC41KSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuNSksIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgyLjUpLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMy41KSwgNC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDQuNSksIDUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1LjUpLCA2LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNi41KSwgNy4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTI1LjAsIC0xKSwgLTMwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTE1LjAsIC0xKSwgLTIwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTUuMCwgLTEpLCAtMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1LjAsIC0xKSwgMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxNS4wLCAtMSksIDIwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMjUuMCwgLTEpLCAzMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDM1LjAsIC0xKSwgNDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg0NS4wLCAtMSksIDUwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNTUuMCwgLTEpLCA2MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDY1LjAsIC0xKSwgNzAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg3NS4wLCAtMSksIDgwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoODUuMCwgLTEpLCA5MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDk1LjAsIC0xKSwgMTAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzMjUuMCwgLTEpLCAxMjMzMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMzUwLjAsIC0yKSwgNDAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNDUwLjAsIC0yKSwgNTAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjVlMjEsIC0yMSksIDFlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMS41ZTIxLCAtMjEpLCAyZTIxKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDIuNWUyMSwgLTIxKSwgM2UyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCg1LjVlMjEsIC0yMSksIDZlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoOC41ZTIxLCAtMjEpLCA5ZTIxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTEuNWUyMiwgLTIyKSwgLTJlMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuNWUyMiwgLTIyKSwgLTFlMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC41ZTIyLCAtMjIpLCAxZTIyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDEuNWUyMiwgLTIyKSwgMmUyMikKKworCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZm9ybWF0X3NwZWNpYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9ybWF0dGluZyBvZiBuYW5zIGFuZCBpbmZzLgorCisgICAgICAgIGRlZiB0ZXN0KGZtdCwgdmFsdWUsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICMgVGVzdCB3aXRoIGJvdGggJSBhbmQgZm9ybWF0KCkuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCAlIHZhbHVlLCBleHBlY3RlZCwgZm10KQorICAgICAgICAgICAgaWYgbm90ICcjJyBpbiBmbXQ6CisgICAgICAgICAgICAgICAgIyBVbnRpbCBpc3N1ZSA3MDk0IGlzIGltcGxlbWVudGVkLCBmb3JtYXQoKSBmb3IgZmxvYXRzIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAjICBzdXBwb3J0ICcjJyBmb3JtYXR0aW5nCisgICAgICAgICAgICAgICAgZm10ID0gZm10WzE6XSAjIHN0cmlwIG9mZiB0aGUgJQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHZhbHVlLCBmbXQpLCBleHBlY3RlZCwgZm10KQorCisgICAgICAgIGZvciBmbXQgaW4gWyclZScsICclZicsICclZycsICclLjBlJywgJyUuNmYnLCAnJS4yMGcnLAorICAgICAgICAgICAgICAgICAgICAnJSNlJywgJyUjZicsICclI2cnLCAnJSMuMjBlJywgJyUjLjE1ZicsICclIy4zZyddOgorICAgICAgICAgICAgcGZtdCA9ICclKycgKyBmbXRbMTpdCisgICAgICAgICAgICBzZm10ID0gJyUgJyArIGZtdFsxOl0KKyAgICAgICAgICAgIHRlc3QoZm10LCBJTkYsICdpbmYnKQorICAgICAgICAgICAgdGVzdChmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3QoZm10LCBOQU4sICduYW4nKQorICAgICAgICAgICAgdGVzdChmbXQsIC1OQU4sICduYW4nKQorICAgICAgICAgICAgIyBXaGVuIGFza2luZyBmb3IgYSBzaWduLCBpdCdzIGFsd2F5cyBwcm92aWRlZC4gbmFucyBhcmUKKyAgICAgICAgICAgICMgIGFsd2F5cyBwb3NpdGl2ZS4KKyAgICAgICAgICAgIHRlc3QocGZtdCwgSU5GLCAnK2luZicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3QocGZtdCwgTkFOLCAnK25hbicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIC1OQU4sICcrbmFuJykKKyAgICAgICAgICAgICMgV2hlbiB1c2luZyAnICcgZm9yIGEgc2lnbiBjb2RlLCBvbmx5IGluZnMgY2FuIGJlIG5lZ2F0aXZlLgorICAgICAgICAgICAgIyAgT3RoZXJzIGhhdmUgYSBzcGFjZS4KKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgSU5GLCAnIGluZicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIC1JTkYsICctaW5mJykKKyAgICAgICAgICAgIHRlc3Qoc2ZtdCwgTkFOLCAnIG5hbicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIC1OQU4sICcgbmFuJykKKworCiAjIEJlZ2lubmluZyB3aXRoIFB5dGhvbiAyLjYgZmxvYXQgaGFzIGNyb3NzIHBsYXRmb3JtIGNvbXBhdGlibGUKICMgd2F5cyB0byBjcmVhdGUgYW5kIHJlcHJlc2VudCBpbmYgYW5kIG5hbgogY2xhc3MgSW5mTmFuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaW5mX2Zyb21fc3RyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbmYoZmxvYXQoImluZiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5mKGZsb2F0KCIraW5mIikpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbmYoZmxvYXQoIi1pbmYiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luZihmbG9hdCgiaW5maW5pdHkiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luZihmbG9hdCgiK2luZmluaXR5IikpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbmYoZmxvYXQoIi1pbmZpbml0eSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCJpbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiK2luZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCItaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoImluZmluaXR5IikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIitpbmZpbml0eSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCItaW5maW5pdHkiKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCJpbmYiKSksICJpbmYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIitpbmYiKSksICJpbmYiKQpAQCAtMzE2LDkgKzg2Nyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKC0xZTMwMCAqIDFlMzAwKSwgIi1pbmYiKQogCiAgICAgZGVmIHRlc3RfbmFuX2Zyb21fc3RyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNuYW4oZmxvYXQoIm5hbiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzbmFuKGZsb2F0KCIrbmFuIikpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNuYW4oZmxvYXQoIi1uYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdCgibmFuIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoIituYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdCgiLW5hbiIpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIm5hbiIpKSwgIm5hbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK25hbiIpKSwgIm5hbiIpCkBAIC0zNDcsMTQgKzg5OCwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cigtMWUzMDAgKiAxZTMwMCAqIDApLCAibmFuIikKIAogICAgIGRlZiBub3Rlc3RfZmxvYXRfbmFuKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oTkFOLmlzX25hbigpKQotICAgICAgICBzZWxmLmZhaWxJZihJTkYuaXNfbmFuKCkpCi0gICAgICAgIHNlbGYuZmFpbElmKCgwLikuaXNfbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShOQU4uaXNfbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoSU5GLmlzX25hbigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgwLikuaXNfbmFuKCkpCiAKICAgICBkZWYgbm90ZXN0X2Zsb2F0X2luZihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKElORi5pc19pbmYoKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoTkFOLmlzX2luZigpKQotICAgICAgICBzZWxmLmZhaWxJZigoMC4pLmlzX2luZigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoSU5GLmlzX2luZigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE5BTi5pc19pbmYoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMC4pLmlzX2luZigpKQorCisgICAgZGVmIHRlc3RfaGFzaF9pbmYoc2VsZik6CisgICAgICAgICMgdGhlIGFjdHVhbCB2YWx1ZXMgaGVyZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYW4KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGJ1dCB0aGV5IG5lZWQgdG8gYmUKKyAgICAgICAgIyBpZGVudGljYWwgdG8gdGhvc2UgdXNlZCBpbiB0aGUgRGVjaW1hbCBtb2R1bGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmbG9hdCgnaW5mJykpLCAzMTQxNTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmbG9hdCgnLWluZicpKSwgLTI3MTgyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGZsb2F0KCduYW4nKSksIDApCisKIAogZnJvbUhleCA9IGZsb2F0LmZyb21oZXgKIHRvSGV4ID0gZmxvYXQuaGV4CkBAIC03ODUsNiArMTM0NSw3IEBACiAgICAgICAgIFVua25vd25Gb3JtYXRUZXN0Q2FzZSwKICAgICAgICAgSUVFRUZvcm1hdFRlc3RDYXNlLAogICAgICAgICBSZXByVGVzdENhc2UsCisgICAgICAgIFJvdW5kVGVzdENhc2UsCiAgICAgICAgIEluZk5hblRlc3QsCiAgICAgICAgIEhleEZsb2F0VGVzdENhc2UsCiAgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weSBiL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weQppbmRleCBiZDY3ZTA1Li4zN2VjNTBkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZubWF0Y2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5CkBAIC0xNSwxMiArMTUsMTIgQEAKICAgICBkZWYgY2hlY2tfbWF0Y2goc2VsZiwgZmlsZW5hbWUsIHBhdHRlcm4sIHNob3VsZF9tYXRjaD0xLCBmbj1mbm1hdGNoKToKICAgICAgICAgaWYgc2hvdWxkX21hdGNoOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZuKGZpbGVuYW1lLCBwYXR0ZXJuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgdG8gbWF0Y2ggcGF0dGVybiAlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVyIHRvIG1hdGNoIHBhdHRlcm4gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIHBhdHRlcm4pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmbihmaWxlbmFtZSwgcGF0dGVybiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVyIG5vdCB0byBtYXRjaCBwYXR0ZXJuICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXIgbm90IHRvIG1hdGNoIHBhdHRlcm4gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIHBhdHRlcm4pKQogCiAgICAgZGVmIHRlc3RfZm5tYXRjaChzZWxmKToKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX21hdGNoCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKF9NQVhDQUNIRSArIDEpOgogICAgICAgICAgICAgZm5tYXRjaCgnZm9vJywgJz8nICogaSkKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKF9jYWNoZSkgPD0gX01BWENBQ0hFKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oX2NhY2hlKSwgX01BWENBQ0hFKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGbm1hdGNoVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQppbmRleCAzMWI0ZGQ4Li4zOTMwNjY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTEsMjEgKzEsMTkgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBlcnJubwogaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwogCiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBnZXRfYXR0cmlidXRlLCBpbXBvcnRfbW9kdWxlCit0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAib3MuZm9yayBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X2ZvcmsxIgorI1NraXAgdGVzdCBpZiBmb3JrIGRvZXMgbm90IGV4aXN0LgorZ2V0X2F0dHJpYnV0ZShvcywgJ2ZvcmsnKQorCiAKIGNsYXNzIEZvcmtUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQppbmRleCBjZDQ2YmMyLi5mMzk0MjZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weQpAQCAtMTAsMTEgKzEwLDcgQEAKICMgdGhleSBjcmFzaCBweXRob24pCiAjIHRlc3Qgb24gdW5pY29kZSBzdHJpbmdzIGFzIHdlbGwKIAotb3ZlcmZsb3dvayA9IDEKLW92ZXJmbG93cmVxdWlyZWQgPSAwCi0KLQotZGVmIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCBhcmdzLCBvdXRwdXQ9Tm9uZSwgbGltaXQ9Tm9uZSk6CitkZWYgdGVzdGZvcm1hdChmb3JtYXRzdHIsIGFyZ3MsIG91dHB1dD1Ob25lLCBsaW1pdD1Ob25lLCBvdmVyZmxvd29rPUZhbHNlKToKICAgICBpZiB2ZXJib3NlOgogICAgICAgICBpZiBvdXRwdXQ6CiAgICAgICAgICAgICBwcmludCAiJXMgJSUgJXMgPT8gJXMgLi4uIiAlXApAQCAtMjksMTYgKzI1LDExIEBACiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnb3ZlcmZsb3cgKHRoaXMgaXMgZmluZSknCiAgICAgZWxzZToKLSAgICAgICAgaWYgb3ZlcmZsb3dyZXF1aXJlZDoKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBsaW1pdCBpcyBOb25lIGFuZCByZXN1bHQgIT0gb3V0cHV0OgogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCAnbm8nCi0gICAgICAgICAgICBwcmludCAib3ZlcmZsb3cgZXhwZWN0ZWQgb24gJXMgJSUgJXMiICUgXAotICAgICAgICAgICAgICAgICAgKHJlcHIoZm9ybWF0c3RyKSwgcmVwcihhcmdzKSkKLSAgICAgICAgZWxpZiBvdXRwdXQgYW5kIGxpbWl0IGlzIE5vbmUgYW5kIHJlc3VsdCAhPSBvdXRwdXQ6Ci0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICdubycKLSAgICAgICAgICAgIHByaW50ICIlcyAlJSAlcyA9PSAlcyAhPSAlcyIgJSBcCi0gICAgICAgICAgICAgICAgICAocmVwcihmb3JtYXRzdHIpLCByZXByKGFyZ3MpLCByZXByKHJlc3VsdCksIHJlcHIob3V0cHV0KSkKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciAlJSAlciA9PSAlciAhPSAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0c3RyLCBhcmdzLCByZXN1bHQsIG91dHB1dCkpCiAgICAgICAgICMgd2hlbiAnbGltaXQnIGlzIHNwZWNpZmllZCwgaXQgZGV0ZXJtaW5lcyBob3cgbWFueSBjaGFyYWN0ZXJzCiAgICAgICAgICMgbXVzdCBtYXRjaCBleGFjdGx5OyBsZW5ndGhzIG11c3QgYWx3YXlzIG1hdGNoLgogICAgICAgICAjIGV4OiBsaW1pdD01LCAnMTIzNDU2NzgnIG1hdGNoZXMgJzEyMzQ1X19fJwpAQCAtNTUsMTkgKzQ2LDI3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJ3llcycKIAogCi1kZWYgdGVzdGJvdGgoZm9ybWF0c3RyLCAqYXJncyk6Ci0gICAgdGVzdGZvcm1hdChmb3JtYXRzdHIsICphcmdzKQorZGVmIHRlc3Rib3RoKGZvcm1hdHN0ciwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgKmFyZ3MsICoqa3dhcmdzKQogICAgIGlmIGhhdmVfdW5pY29kZToKLSAgICAgICAgdGVzdGZvcm1hdCh1bmljb2RlKGZvcm1hdHN0ciksICphcmdzKQorICAgICAgICB0ZXN0Zm9ybWF0KHVuaWNvZGUoZm9ybWF0c3RyKSwgKmFyZ3MsICoqa3dhcmdzKQogCiAKIGNsYXNzIEZvcm1hdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKICAgICAgICAgdGVzdGJvdGgoIiUuMWQiLCAoMSwpLCAiMSIpCi0gICAgICAgIHRlc3Rib3RoKCIlLipkIiwgKHN5cy5tYXhpbnQsMSkpICAjIGV4cGVjdCBvdmVyZmxvdwotICAgICAgICB0ZXN0Ym90aCgiJS4xMDBkIiwgKDEsKSwgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnKQotICAgICAgICB0ZXN0Ym90aCgiJSMuMTE3eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScpCi0gICAgICAgIHRlc3Rib3RoKCIlIy4xMTh4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScpCisgICAgICAgIHRlc3Rib3RoKCIlLipkIiwgKHN5cy5tYXhpbnQsMSksIG92ZXJmbG93b2s9VHJ1ZSkgICMgZXhwZWN0IG92ZXJmbG93CisgICAgICAgIHRlc3Rib3RoKCIlLjEwMGQiLCAoMSwpLCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMScsIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLjExN3giLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLAorICAgICAgICAgICAgICAgICBvdmVyZmxvd29rPVRydWUpCisgICAgICAgIHRlc3Rib3RoKCIlIy4xMTh4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAgICAgIG92ZXJmbG93b2s9VHJ1ZSkKIAogICAgICAgICB0ZXN0Ym90aCgiJWYiLCAoMS4wLCksICIxLjAwMDAwMCIpCiAgICAgICAgICMgdGhlc2UgYXJlIHRyeWluZyB0byB0ZXN0IHRoZSBsaW1pdHMgb2YgdGhlIGludGVybmFsIG1hZ2ljLW51bWJlci1sZW5ndGgKQEAgLTgxLDE1ICs4MCwxNCBAQAogICAgICAgICB0ZXN0Ym90aCgnJTEyLipmJywgKDEyMzQ1NiwgMS4wKSkKIAogICAgICAgICAjIGNoZWNrIGZvciBpbnRlcm5hbCBvdmVyZmxvdyB2YWxpZGF0aW9uIG9uIGxlbmd0aCBvZiBwcmVjaXNpb24KLSAgICAgICAgb3ZlcmZsb3dyZXF1aXJlZCA9IDEKKyAgICAgICAgIyB0aGVzZSB0ZXN0cyBzaG91bGQgbm8gbG9uZ2VyIGNhdXNlIG92ZXJmbG93IGluIFB5dGhvbgorICAgICAgICAjIDIuNy8zLjEgYW5kIGxhdGVyLgogICAgICAgICB0ZXN0Ym90aCgiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCiAgICAgICAgIHRlc3Rib3RoKCIlIy4qRyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKICAgICAgICAgdGVzdGJvdGgoIiUjLipmIiwgKDExMCwgLTEuZSsxMDAvMy4pKQogICAgICAgICB0ZXN0Ym90aCgiJSMuKkYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCi0gICAgICAgIG92ZXJmbG93cmVxdWlyZWQgPSAwCiAKICAgICAgICAgIyBGb3JtYXR0aW5nIG9mIGxvbmcgaW50ZWdlcnMuIE92ZXJmbG93IGlzIG5vdCBvawotICAgICAgICBvdmVyZmxvd29rID0gMAogICAgICAgICB0ZXN0Ym90aCgiJXgiLCAxMEwsICJhIikKICAgICAgICAgdGVzdGJvdGgoIiV4IiwgMTAwMDAwMDAwMDAwTCwgIjE3NDg3NmU4MDAiKQogICAgICAgICB0ZXN0Ym90aCgiJW8iLCAxMEwsICIxMiIpCkBAIC0yMzIsNiArMjMwLDEwIEBACiAgICAgICAgIHRlc3Rib3RoKCIlbyIsIC0wNDJMLCAiLTQyIikKICAgICAgICAgdGVzdGJvdGgoIiVvIiwgZmxvYXQoMDQyKSwgIjQyIikKIAorICAgICAgICAjIGFsdGVybmF0ZSBmbG9hdCBmb3JtYXR0aW5nCisgICAgICAgIHRlc3Rmb3JtYXQoJyVnJywgMS4xLCAnMS4xJykKKyAgICAgICAgdGVzdGZvcm1hdCgnJSNnJywgMS4xLCAnMS4xMDAwMCcpCisKICAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBmb3IgdW5rbm93biBmb3JtYXQgY2hhcmFjdGVycwogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQgJ1Rlc3RpbmcgZXhjZXB0aW9ucycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnBmb3JtYXQucHkgYi9MaWIvdGVzdC90ZXN0X2ZwZm9ybWF0LnB5CmluZGV4IGE5NTFjZDAuLmU2ZGUzYjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnBmb3JtYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mcGZvcm1hdC5weQpAQCAtMjYsNyArMjYsNyBAQAogICAgICAgICAgICAgbiA9IHJlcHIobikKICAgICAgICAgZXhwZWN0ZWQgPSAiJS4qZiIgJSAoZGlnaXRzLCBmbG9hdChuKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCiAKICAgICBkZWYgY2hlY2tTY2koc2VsZiwgbiwgZGlnaXRzKToKICAgICAgICAgcmVzdWx0ID0gc2NpKG4sIGRpZ2l0cykKQEAgLTM5LDExICszOSwxMSBAQAogICAgICAgICAgICAgZXhwID0gZXhwWzBdICsgIjAiICsgZXhwWzE6XQogICAgICAgICBleHBlY3RlZCA9ICIlc2UlcyIgJSAobnVtLCBleHApCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfY2FzZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZpeCgxMDAuMC8zLCAzKSwgJzMzLjMzMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNjaSgxMDAuMC8zLCAzKSwgJzMuMzMzZSswMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeCgxMDAuMC8zLCAzKSwgJzMzLjMzMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NpKDEwMC4wLzMsIDMpLCAnMy4zMzNlKzAwMScpCiAKICAgICBkZWYgdGVzdF9yZWFzb25hYmxlX3ZhbHVlcyhzZWxmKToKICAgICAgICAgZm9yIGQgaW4gcmFuZ2UoNyk6CkBAIC01NCwxMiArNTQsMTIgQEAKIAogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfdmFsdWVzKHNlbGYpOgogICAgICAgICAjIE5vdyBmb3IgJ3VucmVhc29uYWJsZSBuIGFuZCBkJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmaXgoMS4wLCAxMDAwKSwgJzEuJysoJzAnKjEwMDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzY2koIjEiKygnMCcqMTAwMCksIDApLCAnMWUrMTAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4KDEuMCwgMTAwMCksICcxLicrKCcwJyoxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2koIjEiKygnMCcqMTAwMCksIDApLCAnMWUrMTAwMCcpCiAKICAgICAgICAgIyBUaGlzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudC4gIHNjaSByYWlzZXMgYW4gZXhjZXB0aW9uOyBmaXggZG9lc24ndC4KICAgICAgICAgeWFjaHQgPSAiVGhyb2F0d29iYmxlciBNYW5ncm92ZSIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZml4KHlhY2h0LCAxMCksIHlhY2h0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeCh5YWNodCwgMTApLCB5YWNodCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2NpKHlhY2h0LCAxMCkKICAgICAgICAgZXhjZXB0IE5vdEFOdW1iZXI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CmluZGV4IDA1MDlmOTIuLmE3OTg0NzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CkBAIC0zLDYgKzMsNyBAQAogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBtYXRoCitpbXBvcnQgbnVtYmVycwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgZnJhY3Rpb25zCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTExLDIwICsxMiw5NSBAQAogRiA9IGZyYWN0aW9ucy5GcmFjdGlvbgogZ2NkID0gZnJhY3Rpb25zLmdjZAogCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworY2xhc3MgRHVtbXlGbG9hdChvYmplY3QpOgorICAgICIiIkR1bW15IGZsb2F0IGNsYXNzIGZvciB0ZXN0aW5nIGNvbXBhcmlzb25zIHdpdGggRnJhY3Rpb25zIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJEdW1teUZsb2F0IGNhbiBvbmx5IGJlIGluaXRpYWxpemVkIGZyb20gZmxvYXQiKQorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfcmljaGNtcChzZWxmLCBvdGhlciwgb3ApOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBudW1iZXJzLlJhdGlvbmFsKToKKyAgICAgICAgICAgIHJldHVybiBvcChGLmZyb21fZmxvYXQoc2VsZi52YWx1ZSksIG90aGVyKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob3RoZXIsIER1bW15RmxvYXQpOgorICAgICAgICAgICAgcmV0dXJuIG9wKHNlbGYudmFsdWUsIG90aGVyLnZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmVxKQorICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IubGUpCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5sdCkKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmdlKQorICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IuZ3QpCisKKyAgICAjIHNob3VsZG4ndCBiZSBjYWxsaW5nIF9fZmxvYXRfXyBhdCBhbGwgd2hlbiBkb2luZyBjb21wYXJpc29ucworICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIl9fZmxvYXRfXyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBhcmlzb25zIgorCisgICAgIyBzYW1lIGdvZXMgZm9yIHN1YnRyYWN0aW9uCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJfX3N1Yl9fIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcGFyaXNvbnMiCisgICAgX19yc3ViX18gPSBfX3N1Yl9fCisKKyAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgX19oYXNoX18gPSBOb25lCisKKworY2xhc3MgRHVtbXlSYXRpb25hbChvYmplY3QpOgorICAgICIiIlRlc3QgY29tcGFyaXNvbiBvZiBGcmFjdGlvbiB3aXRoIGEgbmFpdmUgcmF0aW9uYWwgaW1wbGVtZW50YXRpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtLCBkZW4pOgorICAgICAgICBnID0gZ2NkKG51bSwgZGVuKQorICAgICAgICBzZWxmLm51bSA9IG51bSAvLyBnCisgICAgICAgIHNlbGYuZGVuID0gZGVuIC8vIGcKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBmcmFjdGlvbnMuRnJhY3Rpb24pOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLm51bSA9PSBvdGhlci5fbnVtZXJhdG9yIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbiA9PSBvdGhlci5fZGVub21pbmF0b3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPCBzZWxmLmRlbiAqIG90aGVyLl9udW1lcmF0b3IpCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuKHNlbGYubnVtICogb3RoZXIuX2Rlbm9taW5hdG9yID4gc2VsZi5kZW4gKiBvdGhlci5fbnVtZXJhdG9yKQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybihzZWxmLm51bSAqIG90aGVyLl9kZW5vbWluYXRvciA8PSBzZWxmLmRlbiAqIG90aGVyLl9udW1lcmF0b3IpCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuKHNlbGYubnVtICogb3RoZXIuX2Rlbm9taW5hdG9yID49IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgICMgdGhpcyBjbGFzcyBpcyBmb3IgdGVzdGluZyBjb21wYXJpc29uczsgY29udmVyc2lvbiB0byBmbG9hdAorICAgICMgc2hvdWxkIG5ldmVyIGJlIHVzZWQgZm9yIGEgY29tcGFyaXNvbiwgc2luY2UgaXQgbG9zZXMgYWNjdXJhY3kKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICBhc3NlcnQgRmFsc2UsICJfX2Zsb2F0X18gc2hvdWxkIG5vdCBiZSBpbnZva2VkIgorCisgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgIF9faGFzaF9fID0gTm9uZQorCiAKIGNsYXNzIEdjZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RNaXNjKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCBnY2QoMCwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGdjZCgxLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTEsIGdjZCgtMSwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGdjZCgwLCAxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTEsIGdjZCgwLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGdjZCg3LCAxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTEsIGdjZCg3LCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIGdjZCgtMjMsIDE1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTIsIGdjZCgxMjAsIDg0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTEyLCBnY2QoODQsIC0xMjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdjZCgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIGdjZCgtMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCg3LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgZ2NkKDcsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoLTIzLCAxNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTIsIGdjZCgxMjAsIDg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMTIsIGdjZCg4NCwgLTEyMCkpCiAKIAogZGVmIF9jb21wb25lbnRzKHIpOgpAQCAtMzUsOCArMTExLDggQEAKIAogICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFscyhzZWxmLCBleHBlY3RlZCwgYWN0dWFsKToKICAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IGJvdGggdGhlIHR5cGVzIGFuZCB2YWx1ZXMgYXJlIHRoZSBzYW1lLiIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKGV4cGVjdGVkKSwgdHlwZShhY3R1YWwpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZXhwZWN0ZWQpLCB0eXBlKGFjdHVhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogICAgIGRlZiBhc3NlcnRSYWlzZXNNZXNzYWdlKHNlbGYsIGV4Y190eXBlLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNDQsNDIgKzEyMCw3MyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjYWxsYWJsZSgqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIGV4Y2VwdCBleGNfdHlwZSwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsIHN0cihlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgc3RyKGUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBub3QgcmFpc2VkIiAlIGV4Y190eXBlLl9fbmFtZV9fKQogCiAgICAgZGVmIHRlc3RJbml0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMCwgMSksIF9jb21wb25lbnRzKEYoKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg3LCAxKSwgX2NvbXBvbmVudHMoRig3KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg3LCAzKSwgX2NvbXBvbmVudHMoRihGKDcsIDMpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAxKSwgX2NvbXBvbmVudHMoRig3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDMpLCBfY29tcG9uZW50cyhGKEYoNywgMykpKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoLTEsIDEpLCBfY29tcG9uZW50cyhGKC0xLCAxKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtMSwgMSksIF9jb21wb25lbnRzKEYoMSwgLTEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDEsIDEpLCBfY29tcG9uZW50cyhGKC0yLCAtMikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMSwgMiksIF9jb21wb25lbnRzKEYoNSwgMTApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDcsIDE1KSwgX2NvbXBvbmVudHMoRig3LCAxNSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMTAqKjIzLCAxKSwgX2NvbXBvbmVudHMoRigxMCoqMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsIDEpLCBfY29tcG9uZW50cyhGKC0xLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAxKSwgX2NvbXBvbmVudHMoRigxLCAtMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAxKSwgX2NvbXBvbmVudHMoRigtMiwgLTIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgMiksIF9jb21wb25lbnRzKEYoNSwgMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMTUpLCBfY29tcG9uZW50cyhGKDcsIDE1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwKioyMywgMSksIF9jb21wb25lbnRzKEYoMTAqKjIzKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgNzcpLCBfY29tcG9uZW50cyhGKEYoMywgNyksIDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC05LCA1KSwgX2NvbXBvbmVudHMoRigyLCBGKC0xMCwgOSkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMjQ4NiwgMjQ4NSksIF9jb21wb25lbnRzKEYoRigyMiwgNyksIEYoMzU1LCAxMTMpKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKFplcm9EaXZpc2lvbkVycm9yLCAiRnJhY3Rpb24oMTIsIDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsIDEyLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDEuNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAxLjUgKyAzaikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIEYoMSwgMiksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgIjMvMiIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMywgMGopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMywgMWopCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdEluaXRGcm9tRmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDIpLCBfY29tcG9uZW50cyhGKDIuNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKworICAgIGRlZiB0ZXN0SW5pdEZyb21EZWNpbWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMSwgMTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMS4xJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMjAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJzMuNWUtMicpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnLjAwMGUyMCcpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJy1pbmYnKSkKIAogICAgIGRlZiB0ZXN0RnJvbVN0cmluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDUsIDEpLCBfY29tcG9uZW50cyhGKCI1IikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMywgMiksIF9jb21wb25lbnRzKEYoIjMvMiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDMsIDIpLCBfY29tcG9uZW50cyhGKCIgXG4gICszLzIiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtMywgMiksIF9jb21wb25lbnRzKEYoIi0zLzIgICIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDEzLCAyKSwgX2NvbXBvbmVudHMoRigiICAgIDAxMy8wMiBcbiAgIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMTMsIDIpLCBfY29tcG9uZW50cyhGKHUiICAgIDAxMy8wMiBcbiAgIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgMiksIF9jb21wb25lbnRzKEYoIjMvMiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgMiksIF9jb21wb25lbnRzKEYoIiBcbiAgKzMvMiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTMsIDIpLCBfY29tcG9uZW50cyhGKCItMy8yICAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEzLCAyKSwgX2NvbXBvbmVudHMoRigiICAgIDAxMy8wMiBcbiAgIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMywgMiksIF9jb21wb25lbnRzKEYodSIgICAgMDEzLzAyIFxuICAiKSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDE2LCA1KSwgX2NvbXBvbmVudHMoRigiIDMuMiAiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtMTYsIDUpLCBfY29tcG9uZW50cyhGKHUiIC0zLjIgIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoLTMsIDEpLCBfY29tcG9uZW50cyhGKHUiIC0zLiAiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgzLCA1KSwgX2NvbXBvbmVudHMoRih1IiAuNiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDE2LCA1KSwgX2NvbXBvbmVudHMoRigiIDMuMiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xNiwgNSksIF9jb21wb25lbnRzKEYodSIgLTMuMiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0zLCAxKSwgX2NvbXBvbmVudHMoRih1IiAtMy4gIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCA1KSwgX2NvbXBvbmVudHMoRih1IiAuNiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEsIDMxMjUpLCBfY29tcG9uZW50cyhGKCIzMi5lLTUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwMDAwMDAsIDEpLCBfY29tcG9uZW50cyhGKCIxRSswNiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEyMzAwLCAxKSwgX2NvbXBvbmVudHMoRigiLTEuMjNlNCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksIF9jb21wb25lbnRzKEYoIiAuMGUrMFx0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigiLTAuMDAwZTAiKSkpCiAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCkBAIC04OSw2ICsxOTYsOSBAQAogICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICczLyciLAogICAgICAgICAgICAgRiwgIjMvIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICcvMiciLAorICAgICAgICAgICAgRiwgIi8yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAogICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICczIC8yJyIsCiAgICAgICAgICAgICBGLCAiMyAvMiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKQEAgLTEwNCwxMCArMjE0LDYgQEAKICAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnM2EyJyIsCiAgICAgICAgICAgICBGLCAiM2EyIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgIyBPbmx5IHBhcnNlIG9yZGluYXJ5IGRlY2ltYWxzLCBub3Qgc2NpZW50aWZpYyBmb3JtLgotICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICczLjJlNCciLAotICAgICAgICAgICAgRiwgIjMuMmU0IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAogICAgICAgICAgICAgIyBEb24ndCBhY2NlcHQgY29tYmluYXRpb25zIG9mIGRlY2ltYWxzIGFuZCBmcmFjdGlvbnMuCiAgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMvNy4yJyIsCiAgICAgICAgICAgICBGLCAiMy83LjIiKQpAQCAtMTIzLDMzICsyMjksMzMgQEAKICAgICBkZWYgdGVzdEltbXV0YWJsZShzZWxmKToKICAgICAgICAgciA9IEYoNywgMykKICAgICAgICAgci5fX2luaXRfXygyLCAxNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDcsIDMpLCBfY29tcG9uZW50cyhyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMyksIF9jb21wb25lbnRzKHIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCByLCAnbnVtZXJhdG9yJywgMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCByLCAnZGVub21pbmF0b3InLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoNywgMyksIF9jb21wb25lbnRzKHIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAzKSwgX2NvbXBvbmVudHMocikpCiAKICAgICAgICAgIyBCdXQgaWYgeW91IF9yZWFsbHlfIG5lZWQgdG86CiAgICAgICAgIHIuX251bWVyYXRvciA9IDQKICAgICAgICAgci5fZGVub21pbmF0b3IgPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg0LCAyKSwgX2NvbXBvbmVudHMocikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDQsIDIpLCBfY29tcG9uZW50cyhyKSkKICAgICAgICAgIyBXaGljaCBicmVha3Mgc29tZSBpbXBvcnRhbnQgb3BlcmF0aW9uczoKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoRig0LCAyKSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChGKDQsIDIpLCByKQogCiAgICAgZGVmIHRlc3RGcm9tRmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRi5mcm9tX2Zsb2F0LCAzKzRqKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTApKSkKICAgICAgICAgYmlnaW50ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoYmlnaW50LCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KGJpZ2ludCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgtMC4wKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgxMCwgMSksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxMC4wKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgtNSwgMiksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgtMi41KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg5OTk5OTk5OTk5OTk5OTk5MTYxMTM5MiwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgxZTIzKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0KDEwKioyMyksIGZsb2F0KEYuZnJvbV9mbG9hdCgxZTIzKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgzNjAyODc5NzAxODk2Mzk3LCAxMTI1ODk5OTA2ODQyNjI0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDMuMikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLjIsIGZsb2F0KEYuZnJvbV9mbG9hdCgzLjIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYmlnaW50LCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KGJpZ2ludCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0wLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTAuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtNSwgMiksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgtMi41KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDk5OTk5OTk5OTk5OTk5OTkxNjExMzkyLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMWUyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KDEwKioyMyksIGZsb2F0KEYuZnJvbV9mbG9hdCgxZTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDExMjU4OTk5MDY4NDI2MjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgzLjIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjIsIGZsb2F0KEYuZnJvbV9mbG9hdCgzLjIpKSkKIAogICAgICAgICBpbmYgPSAxZTEwMDAKICAgICAgICAgbmFuID0gaW5mIC0gaW5mCkBAIC0xNjUsMTMgKzI3MSwxMyBAQAogCiAgICAgZGVmIHRlc3RGcm9tRGVjaW1hbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLmZyb21fZGVjaW1hbCwgMys0aikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigxMCwgMSksIEYuZnJvbV9kZWNpbWFsKDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiLTAiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEYoNSwgMTApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLjUiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEYoNSwgMTAwMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjVlLTMiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEYoNTAwMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjVlMyIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSAtIEYoMSwgMTAqKjMwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEwLCAxKSwgRi5mcm9tX2RlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIi0wIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoNSwgMTApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLjUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRig1LCAxMDAwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiNWUtMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDUwMDApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCI1ZTMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAtIEYoMSwgMTAqKjMwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLiIgKyAiOSIgKiAzMCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKICAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCkBAIC0yMDAsMjkgKzMwNiwyOSBAQAogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0xLCBtYXRoLnRydW5jKEYoLTExLCAxMCkpKQogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0xLCBpbnQoRigtMTEsIDEwKSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRmFsc2UsIGJvb2woRigwLCAxKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFRydWUsIGJvb2woRigzLCAyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGJvb2woRigwLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYm9vbChGKDMsIDIpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIGZsb2F0KEYoMSwgMTApKSkKIAogICAgICAgICAjIENoZWNrIHRoYXQgX19mbG9hdF9fIGlzbid0IGltcGxlbWVudGVkIGJ5IGNvbnZlcnRpbmcgdGhlCiAgICAgICAgICMgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciB0byBmbG9hdCBiZWZvcmUgZGl2aWRpbmcuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCBsb25nKCcyJyo0MDArJzcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMoMi4wLzMsCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMi4wLzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KEYobG9uZygnMicqNDAwKyc3JyksIGxvbmcoJzMnKjQwMCsnMScpKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjErMGosIGNvbXBsZXgoRigxLDEwKSkpCiAKIAogICAgIGRlZiB0ZXN0QXJpdGhtZXRpYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigxLCAyKSwgRigxLCAxMCkgKyBGKDIsIDUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhGKC0zLCAxMCksIEYoMSwgMTApIC0gRigyLCA1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigxLCAyNSksIEYoMSwgMTApICogRigyLCA1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigxLCA0KSwgRigxLCAxMCkgLyBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgMiksIEYoMSwgMTApICsgRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKC0zLCAxMCksIEYoMSwgMTApIC0gRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEsIDI1KSwgRigxLCAxMCkgKiBGKDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgNCksIEYoMSwgMTApIC8gRigyLCA1KSkKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygyLCBGKDksIDEwKSAvLyBGKDIsIDUpKQogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEwKioyMywgRigxMCoqMjMsIDEpIC8vIEYoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKEYoMiwgMyksIEYoLTcsIDMpICUgRigzLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRig4LCAyNyksIEYoMiwgMykgKiogRigzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoRigyNywgOCksIEYoMiwgMykgKiogRigtMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigyLCAzKSwgRigtNywgMykgJSBGKDMsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoOCwgMjcpLCBGKDIsIDMpICoqIEYoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigyNywgOCksIEYoMiwgMykgKiogRigtMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMi4wLCBGKDQpICoqIEYoMSwgMikpCiAgICAgICAgICMgV2lsbCByZXR1cm4gMWogaW4gMy4wOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIEYoLTEpLCBGKDEsIDIpKQpAQCAtMjg4LDcgKzM5NCw3IEBACiAgICAgICAgICAgICBUeXBlRXJyb3IsCiAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlKHMpIGZvciArOiAnRnJhY3Rpb24nIGFuZCAnRGVjaW1hbCciLAogICAgICAgICAgICAgb3BlcmF0b3IuYWRkLCBGKDMsMTEpLCBEZWNpbWFsKCczLjE0MTU5MjYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoRig1LCAyKSwgRGVjaW1hbCgnMi41JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoRig1LCAyKSwgRGVjaW1hbCgnMi41JykpCiAKICAgICBkZWYgdGVzdENvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IEYoMiwgMykpCkBAIC0zMDEsNiArNDA3LDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSAhPSBGKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSAhPSBGKDEsIDMpKQogCisgICAgZGVmIHRlc3RDb21wYXJpc29uc0R1bW15UmF0aW9uYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID09IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID09IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA9PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMywgNCkgPT0gRigxLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDw9IER1bW15UmF0aW9uYWwoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDEsIDcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID4gRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID4gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPD0gRigxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMSwgNykpCisKKyAgICBkZWYgdGVzdENvbXBhcmlzb25zRHVtbXlGbG9hdChzZWxmKToKKyAgICAgICAgeCA9IER1bW15RmxvYXQoMS4vMy4pCisgICAgICAgIHkgPSBGKDEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4ICE9IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IDwgeSBvciB4ID4geSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4ID09IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCA8PSB5IGFuZCB4ID49IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5ICE9IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgeCBvciB5ID4geCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh5ID09IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeSA8PSB4IGFuZCB5ID49IHgpCisKICAgICBkZWYgdGVzdE1peGVkTGVzcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgPCBGKDUsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIgPCBGKDQsIDIpKQpAQCAtMzEyLDYgKzQ2MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoMC40IDwgRigxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgwLjUgPCBGKDEsIDIpKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ2luZicpIDwgRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsb2F0KCctaW5mJykgPCBGKDAsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnbmFuJykgPCBGKC0zLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNywgMTIpIDwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDE0NCwgLTg5KSA8IGZsb2F0KCduYW4nKSkKKwogICAgIGRlZiB0ZXN0TWl4ZWRMZXNzRXF1YWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjUgPD0gRigxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgwLjYgPD0gRigxLCAyKSkKQEAgLTMyMiw2ICs0NzksMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoNCwgMikgPD0gMikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDUsIDIpIDw9IDIpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnaW5mJykgPD0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsb2F0KCctaW5mJykgPD0gRigwLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ25hbicpIDw9IEYoLTMsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNywgMTIpIDw9IGZsb2F0KCctaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNDQsIC04OSkgPD0gZmxvYXQoJ25hbicpKQorCiAgICAgZGVmIHRlc3RCaWdGbG9hdENvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICAjIEJlY2F1c2UgMTAqKjIzIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBmbG9hdDoKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEwKioyMykgPT0gZmxvYXQoMTAqKjIzKSkKQEAgLTMzNCw4ICs0OTgsMjEgQEAKIAogICAgIGRlZiB0ZXN0QmlnQ29tcGxleENvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTAqKjIzKSA9PSBjb21wbGV4KDEwKioyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEwKioyMykgPiBjb21wbGV4KDEwKioyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxMCoqMjMpIDw9IGNvbXBsZXgoMTAqKjIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgRigxMCoqMjMpLCBjb21wbGV4KDEwKioyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIEYoMTAqKjIzKSwgY29tcGxleCgxMCoqMjMpKQorCisgICAgICAgIHggPSBGKDMsIDgpCisgICAgICAgIHogPSBjb21wbGV4KDAuMzc1LCAwLjApCisgICAgICAgIHcgPSBjb21wbGV4KDAuMzc1LCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4ID09IHopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCAhPSB6KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHggPT0gdykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0gdykKKyAgICAgICAgZm9yIG9wIGluIG9wZXJhdG9yLmx0LCBvcGVyYXRvci5sZSwgb3BlcmF0b3IuZ3QsIG9wZXJhdG9yLmdlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgeCwgeikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHosIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB4LCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgdywgeCkKIAogICAgIGRlZiB0ZXN0TWl4ZWRFcXVhbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNSA9PSBGKDEsIDIpKQpAQCAtMzQ2LDIwICs1MjMsMjQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgyID09IEYoMywgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDQsIDIpID09IDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig1LCAyKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPT0gZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCduYW4nKSA9PSBGKDMsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPT0gZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCctaW5mJykgPT0gRigyLCA1KSkKIAogICAgIGRlZiB0ZXN0U3RyaW5naWZpY2F0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiRnJhY3Rpb24oNywgMykiLCByZXByKEYoNywgMykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiRnJhY3Rpb24oNjI4MzE4NTMwNywgMjAwMDAwMDAwMCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoJzMuMTQxNTkyNjUzNScpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIkZyYWN0aW9uKC0xLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDApIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihGKDEsIC0xMCoqMjApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIjcvMyIsIHN0cihGKDcsIDMpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIjciLCBzdHIoRig3LCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZyYWN0aW9uKDcsIDMpIiwgcmVwcihGKDcsIDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oNjI4MzE4NTMwNywgMjAwMDAwMDAwMCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoRignMy4xNDE1OTI2NTM1JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGcmFjdGlvbigtMSwgMTAwMDAwMDAwMDAwMDAwMDAwMDAwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihGKDEsIC0xMCoqMjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNy8zIiwgc3RyKEYoNywgMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI3Iiwgc3RyKEYoNywgMSkpKQogCiAgICAgZGVmIHRlc3RIYXNoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoYXNoKDIuNSksIGhhc2goRig1LCAyKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhc2goMTAqKjUwKSwgaGFzaChGKDEwKio1MCkpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhoYXNoKGZsb2F0KDEwKioyMykpLCBoYXNoKEYoMTAqKjIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgyLjUpLCBoYXNoKEYoNSwgMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goMTAqKjUwKSwgaGFzaChGKDEwKio1MCkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2goZmxvYXQoMTAqKjIzKSksIGhhc2goRigxMCoqMjMpKSkKIAogICAgIGRlZiB0ZXN0QXBwcm94aW1hdGVQaShzZWxmKToKICAgICAgICAgIyBBbGdvcml0aG0gYm9ycm93ZWQgZnJvbQpAQCAtMzcyLDcgKzU1Myw3IEBACiAgICAgICAgICAgICBkLCBkYSA9IGQrZGEsIGRhKzMyCiAgICAgICAgICAgICB0ID0gKHQgKiBuKSAvIGQKICAgICAgICAgICAgIHMgKz0gdAotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscyhtYXRoLnBpLCBzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGgucGksIHMpCiAKICAgICBkZWYgdGVzdEFwcHJveGltYXRlQ29zMShzZWxmKToKICAgICAgICAgIyBBbGdvcml0aG0gYm9ycm93ZWQgZnJvbQpAQCAtMzg2LDcgKzU2Nyw3IEBACiAgICAgICAgICAgICBudW0gKj0geCAqIHgKICAgICAgICAgICAgIHNpZ24gKj0gLTEKICAgICAgICAgICAgIHMgKz0gbnVtIC8gZmFjdCAqIHNpZ24KLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMobWF0aC5jb3MoMSksIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5jb3MoMSksIHMpCiAKICAgICBkZWYgdGVzdF9jb3B5X2RlZXBjb3B5X3BpY2tsZShzZWxmKToKICAgICAgICAgciA9IEYoMTMsIDcpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmluZGV4IDE2NTRiZTAuLjc3MWY1OTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CkBAIC0yLDcgKzIsNyBAQAogCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzLCBvcworaW1wb3J0IHN5cwogCiBjbGFzcyBGcm96ZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZnJvemVuKHNlbGYpOgpAQCAtMjMsMTYgKzIzLDE1IEBACiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIHg6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5zcGFtIGZhaWxlZDoiICsgc3RyKHgpKQogCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIm1hYyI6ICAjIE9uIHRoZSBNYWMgdGhpcyBpbXBvcnQgZG9lcyBzdWNjZWVkLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3Rkb3V0LmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZC4uLlxuSGVsbG8gd29ybGQuLi5cbkhlbGxvIHdvcmxkLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZC4uLlxuSGVsbG8gd29ybGQuLi5cbkhlbGxvIHdvcmxkLi4uXG4nKQogCiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19oZWxsb19fJ10KICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3BoZWxsb19fJ10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggMWMyY2VlYi4uOTE5OTU4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTEsMTcgKzEsMjQgQEAKICIiIlRlc3Qgc2NyaXB0IGZvciBmdHBsaWIgbW9kdWxlLiIiIgogCi0jIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIHRlc3QgRlRQIGNsYXNzIGFuZCBJUHY2IGVudmlyb25tZW50CisjIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIHRlc3QgRlRQIGNsYXNzLCBJUHY2IGFuZCBUTFMKKyMgZW52aXJvbm1lbnQKIAogaW1wb3J0IGZ0cGxpYgotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IGFzeW5jb3JlCiBpbXBvcnQgYXN5bmNoYXQKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQogCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhPU1QKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiAKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCkBAIC0yMiw2ICsyOSw3IEBACiAKIAogY2xhc3MgRHVtbXlEVFBIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorICAgIGR0cF9jb25uX2Nsb3NlZCA9IEZhbHNlCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubiwgYmFzZWNsYXNzKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQpAQCAtMzIsMTIgKzQwLDIyIEBACiAgICAgICAgIHNlbGYuYmFzZWNsYXNzLmxhc3RfcmVjZWl2ZWRfZGF0YSArPSBzZWxmLnJlY3YoMTAyNCkKIAogICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYmFzZWNsYXNzLnB1c2goJzIyNiB0cmFuc2ZlciBjb21wbGV0ZScpCi0gICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAjIFhYWDogdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtYW55IHRpbWVzIGluIGEgcm93IGZvciBhIHNpbmdsZQorICAgICAgICAjIGNvbm5lY3Rpb24sIGluY2x1ZGluZyBpbiBjbGVhci10ZXh0IChub24tVExTKSBtb2RlLgorICAgICAgICAjIChiZWhhdmlvdXIgd2l0bmVzc2VkIHdpdGggdGVzdF9kYXRhX2Nvbm5lY3Rpb24pCisgICAgICAgIGlmIG5vdCBzZWxmLmR0cF9jb25uX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuYmFzZWNsYXNzLnB1c2goJzIyNiB0cmFuc2ZlciBjb21wbGV0ZScpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuZHRwX2Nvbm5fY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKIAogCiBjbGFzcyBEdW1teUZUUEhhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CiAKKyAgICBkdHBfaGFuZGxlciA9IER1bW15RFRQSGFuZGxlcgorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoIlxyXG4iKQpAQCAtNDYsNiArNjQsNyBAQAogICAgICAgICBzZWxmLmxhc3RfcmVjZWl2ZWRfY21kID0gTm9uZQogICAgICAgICBzZWxmLmxhc3RfcmVjZWl2ZWRfZGF0YSA9ICcnCiAgICAgICAgIHNlbGYubmV4dF9yZXNwb25zZSA9ICcnCisgICAgICAgIHNlbGYucmVzdCA9IE5vbmUKICAgICAgICAgc2VsZi5wdXNoKCcyMjAgd2VsY29tZScpCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgpAQCAtODAsMzggKzk5LDM4IEBACiAgICAgICAgIGFkZHIgPSBtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkKICAgICAgICAgaXAgPSAnJWQuJWQuJWQuJWQnICV0dXBsZShhZGRyWzo0XSkKICAgICAgICAgcG9ydCA9IChhZGRyWzRdICogMjU2KSArIGFkZHJbNV0KLSAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTIpCi0gICAgICAgIHNlbGYuZHRwID0gRHVtbXlEVFBIYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKICAgICBkZWYgY21kX3Bhc3Yoc2VsZiwgYXJnKToKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICBzb2NrLmxpc3Rlbig1KQotICAgICAgICBzb2NrLnNldHRpbWVvdXQoMikKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQogICAgICAgICBpcCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KICAgICAgICAgaXAgPSBpcC5yZXBsYWNlKCcuJywgJywnKQogICAgICAgICBwMSwgcDIgPSBkaXZtb2QocG9ydCwgMjU2KQogICAgICAgICBzZWxmLnB1c2goJzIyNyBlbnRlcmluZyBwYXNzaXZlIG1vZGUgKCVzLCVkLCVkKScgJShpcCwgcDEsIHAyKSkKICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKLSAgICAgICAgc2VsZi5kdHAgPSBEdW1teURUUEhhbmRsZXIoY29ubiwgYmFzZWNsYXNzPXNlbGYpCisgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKIAogICAgIGRlZiBjbWRfZXBydChzZWxmLCBhcmcpOgogICAgICAgICBhZiwgaXAsIHBvcnQgPSBhcmcuc3BsaXQoYXJnWzBdKVsxOi0xXQogICAgICAgICBwb3J0ID0gaW50KHBvcnQpCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIocywgYmFzZWNsYXNzPXNlbGYpCiAgICAgICAgIHNlbGYucHVzaCgnMjAwIGFjdGl2ZSBkYXRhIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnKQogCiAgICAgZGVmIGNtZF9lcHN2KHNlbGYsIGFyZyk6CiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgc29jay5zZXR0aW1lb3V0KDIpCisgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQogICAgICAgICBzZWxmLnB1c2goJzIyOSBlbnRlcmluZyBleHRlbmRlZCBwYXNzaXZlIG1vZGUgKHx8fCVkfCknICVwb3J0KQogICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKGNvbm4sIGJhc2VjbGFzcz1zZWxmKQogCiAgICAgZGVmIGNtZF9lY2hvKHNlbGYsIGFyZyk6CiAgICAgICAgICMgc2VuZHMgYmFjayB0aGUgcmVjZWl2ZWQgc3RyaW5nICh1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlKQpAQCAtMTYwLDEwICsxNzksMTkgQEAKICAgICBkZWYgY21kX3N0b3Ioc2VsZiwgYXJnKToKICAgICAgICAgc2VsZi5wdXNoKCcxMjUgc3RvciBvaycpCiAKKyAgICBkZWYgY21kX3Jlc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5yZXN0ID0gYXJnCisgICAgICAgIHNlbGYucHVzaCgnMzUwIHJlc3Qgb2snKQorCiAgICAgZGVmIGNtZF9yZXRyKHNlbGYsIGFyZyk6CiAgICAgICAgIHNlbGYucHVzaCgnMTI1IHJldHIgb2snKQotICAgICAgICBzZWxmLmR0cC5wdXNoKFJFVFJfREFUQSkKKyAgICAgICAgaWYgc2VsZi5yZXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2Zmc2V0ID0gaW50KHNlbGYucmVzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9mZnNldCA9IDAKKyAgICAgICAgc2VsZi5kdHAucHVzaChSRVRSX0RBVEFbb2Zmc2V0Ol0pCiAgICAgICAgIHNlbGYuZHRwLmNsb3NlX3doZW5fZG9uZSgpCisgICAgICAgIHNlbGYucmVzdCA9IE5vbmUKIAogICAgIGRlZiBjbWRfbGlzdChzZWxmLCBhcmcpOgogICAgICAgICBzZWxmLnB1c2goJzEyNSBsaXN0IG9rJykKQEAgLTIyNiwxMiArMjU0LDE1NiBAQAogICAgICAgICByYWlzZQogCiAKK2lmIHNzbCBpcyBub3QgTm9uZToKKworICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisKKyAgICBjbGFzcyBTU0xDb25uZWN0aW9uKG9iamVjdCwgYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICAgICAgICIiIkFuIGFzeW5jb3JlLmRpc3BhdGNoZXIgc3ViY2xhc3Mgc3VwcG9ydGluZyBUTFMvU1NMLiIiIgorCisgICAgICAgIF9zc2xfYWNjZXB0aW5nID0gRmFsc2UKKyAgICAgICAgX3NzbF9jbG9zaW5nID0gRmFsc2UKKworICAgICAgICBkZWYgc2VjdXJlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2tldCwgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1DRVJURklMRSwgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBUcnVlCisKKyAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgX2RvX3NzbF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX3NzbF9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc2VsZi5zb2NrZXQudW53cmFwKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCisgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCisgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CisgICAgICAgICAgICAgICAgIyBodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vb3BlbnNzbC11c2Vyc0BvcGVuc3NsLm9yZy9tc2c2MDcxMC5odG1sCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5fc3NsX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICAgICAgc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikuY2xvc2UoKQorCisgICAgICAgIGRlZiBoYW5kbGVfcmVhZF9ldmVudChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3NzbF9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9zaHV0ZG93bigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLmhhbmRsZV9yZWFkX2V2ZW50KCkKKworICAgICAgICBkZWYgaGFuZGxlX3dyaXRlX2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3NsX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX3NodXRkb3duKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikuaGFuZGxlX3dyaXRlX2V2ZW50KCkKKworICAgICAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikuc2VuZChkYXRhKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX0VPRiwgc3NsLlNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgcmVjdihzZWxmLCBidWZmZXJfc2l6ZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLnJlY3YoYnVmZmVyX3NpemUpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9FT0YsIHNzbC5TU0xfRVJST1JfWkVST19SRVRVUk4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2Uoc2VsZi5zb2NrZXQsIHNzbC5TU0xTb2NrZXQpIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0Ll9zc2xvYmogaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9zaHV0ZG93bigpCisKKworICAgIGNsYXNzIER1bW15VExTX0RUUEhhbmRsZXIoU1NMQ29ubmVjdGlvbiwgRHVtbXlEVFBIYW5kbGVyKToKKyAgICAgICAgIiIiQSBEdW1teURUUEhhbmRsZXIgc3ViY2xhc3Mgc3VwcG9ydGluZyBUTFMvU1NMLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBiYXNlY2xhc3MpOgorICAgICAgICAgICAgRHVtbXlEVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcykKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZWNsYXNzLnNlY3VyZV9kYXRhX2NoYW5uZWw6CisgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmVfY29ubmVjdGlvbigpCisKKworICAgIGNsYXNzIER1bW15VExTX0ZUUEhhbmRsZXIoU1NMQ29ubmVjdGlvbiwgRHVtbXlGVFBIYW5kbGVyKToKKyAgICAgICAgIiIiQSBEdW1teUZUUEhhbmRsZXIgc3ViY2xhc3Mgc3VwcG9ydGluZyBUTFMvU1NMLiIiIgorCisgICAgICAgIGR0cF9oYW5kbGVyID0gRHVtbXlUTFNfRFRQSGFuZGxlcgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgIER1bW15RlRQSGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgc2VsZi5zZWN1cmVfZGF0YV9jaGFubmVsID0gRmFsc2UKKworICAgICAgICBkZWYgY21kX2F1dGgoc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY2hhbm5lbC4iIiIKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjM0IEFVVEggVExTIHN1Y2Nlc3NmdWwnKQorICAgICAgICAgICAgc2VsZi5zZWN1cmVfY29ubmVjdGlvbigpCisKKyAgICAgICAgZGVmIGNtZF9wYnN6KHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgIiIiTmVnb3RpYXRlIHNpemUgb2YgYnVmZmVyIGZvciBzZWN1cmUgZGF0YSB0cmFuc2Zlci4KKyAgICAgICAgICAgIEZvciBUTFMvU1NMIHRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGlzICcwJy4KKyAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUEJTWj0wIHN1Y2Nlc3NmdWwuJykKKworICAgICAgICBkZWYgY21kX3Byb3Qoc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJTZXR1cCB1bi9zZWN1cmUgZGF0YSBjaGFubmVsLiIiIgorICAgICAgICAgICAgYXJnID0gbGluZS51cHBlcigpCisgICAgICAgICAgICBpZiBhcmcgPT0gJ0MnOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjAwIFByb3RlY3Rpb24gc2V0IHRvIENsZWFyJykKKyAgICAgICAgICAgICAgICBzZWxmLnNlY3VyZV9kYXRhX2NoYW5uZWwgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ1AnOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjAwIFByb3RlY3Rpb24gc2V0IHRvIFByaXZhdGUnKQorICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlX2RhdGFfY2hhbm5lbCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCI1MDIgVW5yZWNvZ25pemVkIFBST1QgdHlwZSAodXNlIEMgb3IgUCkuIikKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRlRQU2VydmVyKER1bW15RlRQU2VydmVyKToKKyAgICAgICAgaGFuZGxlciA9IER1bW15VExTX0ZUUEhhbmRsZXIKKworCiBjbGFzcyBUZXN0RlRQQ2xhc3MoVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15RlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFAodGltZW91dD0yKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFAodGltZW91dD0xMCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMzE2LDYgKzQ4OCwxNSBAQAogICAgICAgICBzZWxmLmNsaWVudC5yZXRyYmluYXJ5KCdyZXRyJywgcmVjZWl2ZWQuYXBwZW5kKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEEpCiAKKyAgICBkZWYgdGVzdF9yZXRyYmluYXJ5X3Jlc3Qoc2VsZik6CisgICAgICAgIGZvciByZXN0IGluICgwLCAxMCwgMjApOgorICAgICAgICAgICAgcmVjZWl2ZWQgPSBbXQorICAgICAgICAgICAgc2VsZi5jbGllbnQucmV0cmJpbmFyeSgncmV0cicsIHJlY2VpdmVkLmFwcGVuZCwgcmVzdD1yZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHJlY2VpdmVkKSwgUkVUUl9EQVRBW3Jlc3Q6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdyZXN0IHRlc3QgY2FzZSAlZCAlZCAlZCcgJSAocmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKCcnLmpvaW4ocmVjZWl2ZWQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKFJFVFJfREFUQVtyZXN0Ol0pKSkKKwogICAgIGRlZiB0ZXN0X3JldHJsaW5lcyhzZWxmKToKICAgICAgICAgcmVjZWl2ZWQgPSBbXQogICAgICAgICBzZWxmLmNsaWVudC5yZXRybGluZXMoJ3JldHInLCByZWNlaXZlZC5hcHBlbmQpCkBAIC0zMzEsNiArNTEyLDEzIEBACiAgICAgICAgIHNlbGYuY2xpZW50LnN0b3JiaW5hcnkoJ3N0b3InLCBmLCBjYWxsYmFjaz1sYW1iZGEgeDogZmxhZy5hcHBlbmQoTm9uZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbGFnKQogCisgICAgZGVmIHRlc3Rfc3RvcmJpbmFyeV9yZXN0KHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oUkVUUl9EQVRBKQorICAgICAgICBmb3IgciBpbiAoMzAsICczMCcpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZiwgcmVzdD1yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLnJlc3QsIHN0cihyKSkKKwogICAgIGRlZiB0ZXN0X3N0b3JsaW5lcyhzZWxmKToKICAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKFJFVFJfREFUQS5yZXBsYWNlKCdcclxuJywgJ1xuJykpCiAgICAgICAgIHNlbGYuY2xpZW50LnN0b3JsaW5lcygnc3RvcicsIGYpCkBAIC0zNTcsNyArNTQ1LDcgQEAKIAogICAgIGRlZiB0ZXN0X21ha2VwYXN2KHNlbGYpOgogICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5jbGllbnQubWFrZXBhc3YoKQotICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgMikKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtMzg0LDcgKzU3Miw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDIpCisgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC0zOTksNiArNTg3LDgxIEBACiAgICAgICAgIHJldHIoKQogCiAKK2NsYXNzIFRlc3RUTFNfRlRQQ2xhc3NNaXhpbihUZXN0RlRQQ2xhc3MpOgorICAgICIiIlJlcGVhdCBUZXN0RlRQQ2xhc3MgdGVzdHMgc3RhcnRpbmcgdGhlIFRMUyBsYXllciBmb3IgYm90aCBjb250cm9sCisgICAgYW5kIGRhdGEgY29ubmVjdGlvbnMgZmlyc3QuCisgICAgIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgIyBlbmFibGUgVExTCisgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICBzZWxmLmNsaWVudC5wcm90X3AoKQorCisKK2NsYXNzIFRlc3RUTFNfRlRQQ2xhc3MoVGVzdENhc2UpOgorICAgICIiIlNwZWNpZmljIFRMU19GVFAgY2xhc3MgdGVzdHMuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2NvbnRyb2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKworICAgIGRlZiB0ZXN0X2RhdGFfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBjbGVhciB0ZXh0CisgICAgICAgIHNvY2sgPSBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC52b2lkcmVzcCgpLCAiMjI2IHRyYW5zZmVyIGNvbXBsZXRlIikKKworICAgICAgICAjIHNlY3VyZWQsIGFmdGVyIFBST1QgUAorICAgICAgICBzZWxmLmNsaWVudC5wcm90X3AoKQorICAgICAgICBzb2NrID0gc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudm9pZHJlc3AoKSwgIjIyNiB0cmFuc2ZlciBjb21wbGV0ZSIpCisKKyAgICAgICAgIyBQUk9UIEMgaXMgaXNzdWVkLCB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIGluIGNsZWFydGV4dCBhZ2FpbgorICAgICAgICBzZWxmLmNsaWVudC5wcm90X2MoKQorICAgICAgICBzb2NrID0gc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudm9pZHJlc3AoKSwgIjIyNiB0cmFuc2ZlciBjb21wbGV0ZSIpCisKKyAgICBkZWYgdGVzdF9sb2dpbihzZWxmKToKKyAgICAgICAgIyBsb2dpbigpIGlzIHN1cHBvc2VkIHRvIGltcGxpY2l0bHkgc2VjdXJlIHRoZSBjb250cm9sIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNlbGYuY2xpZW50LmxvZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgQVVUSCBUTFMgZG9lc24ndCBnZXQgaXNzdWVkIGFnYWluCisgICAgICAgIHNlbGYuY2xpZW50LmxvZ2luKCkKKworICAgIGRlZiB0ZXN0X2F1dGhfaXNzdWVkX3R3aWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5jbGllbnQuYXV0aCkKKworICAgIGRlZiB0ZXN0X2F1dGhfc3NsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5zc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9TU0x2MworICAgICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmNsaWVudC5hdXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbGllbnQuc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKKworCiBjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNDM5LDcgKzcwMiw3IEBACiAKICAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgogICAgICAgICAjIGRlZmF1bHQgLS0gdXNlIGdsb2JhbCBzb2NrZXQgdGltZW91dAotICAgICAgICBzZWxmLmFzc2VydF8oc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnRwID0gZnRwbGliLkZUUCgibG9jYWxob3N0IikKQEAgLTQ1MSw3ICs3MTQsNyBAQAogCiAgICAgZGVmIHRlc3RUaW1lb3V0Tm9uZShzZWxmKToKICAgICAgICAgIyBubyB0aW1lb3V0IC0tIGRvIG5vdCB1c2UgZ2xvYmFsIHNvY2tldCB0aW1lb3V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyhzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdHAgPSBmdHBsaWIuRlRQKCJsb2NhbGhvc3QiLCB0aW1lb3V0PU5vbmUpCkBAIC01MDAsNiArNzYzLDEwIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoVGVzdElQdjZFbnZpcm9ubWVudCkKKworICAgIGlmIHNzbCBpcyBub3QgTm9uZToKKyAgICAgICAgdGVzdHMuZXh0ZW5kKFtUZXN0VExTX0ZUUENsYXNzTWl4aW4sIFRlc3RUTFNfRlRQQ2xhc3NdKQorCiAgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICB0cnk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQppbmRleCBmMzc0YzhkLi5iNjM5Y2EyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpAQCAtMTMsMTUgKzEzLDIwIEBACiAgICAgICAgIHNlbGYuZmkgPSBGKCkKICAgICAgICAgc2VsZi5iID0gYgogCi0gICAgZGVmIGNhbm5vdF9zZXRfYXR0cihzZWxmLG9iaiwgbmFtZSwgdmFsdWUsIGV4Y2VwdGlvbnMpOgotICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgYXMgYSB0ZXN0IChuYW1lIGRvZXNuJ3Qgc3RhcnQgd2l0aCAndGVzdCcpLAotICAgICAgICAjIGJ1dCBtYXkgYmUgdXNlZCBieSBvdGhlciB0ZXN0cy4KLSAgICAgICAgdHJ5OiBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCi0gICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gc2V0ICVzIHRvICVyIiAlIChuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHRyeTogZGVsYXR0cihvYmosIG5hbWUpCi0gICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gZGVsICVzIiAlIG5hbWUpCisgICAgZGVmIGNhbm5vdF9zZXRfYXR0cihzZWxmLCBvYmosIG5hbWUsIHZhbHVlLCBleGNlcHRpb25zKToKKyAgICAgICAgIyBIZWxwZXIgbWV0aG9kIGZvciBvdGhlciB0ZXN0cy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICBleGNlcHQgZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gc2V0ICVzIHRvICVyIiAlIChuYW1lLCB2YWx1ZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbGF0dHIob2JqLCBuYW1lKQorICAgICAgICBleGNlcHQgZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gZGVsICVzIiAlIG5hbWUpCiAKIAogY2xhc3MgRnVuY3Rpb25Qcm9wZXJ0aWVzVGVzdChGdW5jQXR0cnNUZXN0KToKQEAgLTMxLDE2ICszNiwxNiBAQAogCiAgICAgZGVmIHRlc3RfZGlyX2luY2x1ZGVzX2NvcnJlY3RfYXR0cnMoc2VsZik6CiAgICAgICAgIHNlbGYuYi5rbm93bl9hdHRyID0gNwotICAgICAgICBzZWxmLmFzc2VydF8oJ2tub3duX2F0dHInIGluIGRpcihzZWxmLmIpLAotICAgICAgICAgICAgInNldCBhdHRyaWJ1dGVzIG5vdCBpbiBkaXIgbGlzdGluZyBvZiBtZXRob2QiKQorICAgICAgICBzZWxmLmFzc2VydEluKCdrbm93bl9hdHRyJywgZGlyKHNlbGYuYiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGF0dHJpYnV0ZXMgbm90IGluIGRpciBsaXN0aW5nIG9mIG1ldGhvZCIpCiAgICAgICAgICMgVGVzdCBvbiB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCBvZiBtZXRob2QKICAgICAgICAgc2VsZi5mLmEuaW1fZnVuYy5rbm93bl9hdHRyID0gNwotICAgICAgICBzZWxmLmFzc2VydF8oJ2tub3duX2F0dHInIGluIGRpcihzZWxmLmYuYSksCi0gICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBpbiBjbGFzcyBub3QgaW4gIgotICAgICAgICAgICAgICAgICAgICAgImRpciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygna25vd25fYXR0cicgaW4gZGlyKHNlbGYuZmkuYSksCi0gICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMsIHNob3VsZCBzaG93IHVwIgotICAgICAgICAgICAgICAgICAgICAgIiBpbiBuZXh0IGRpciIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5mLmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNldCBhdHRyaWJ1dGUgb24gdW5ib3VuZCBtZXRob2QgaW1wbGVtZW50YXRpb24gaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIG5vdCBpbiBkaXIiKQorICAgICAgICBzZWxmLmFzc2VydEluKCdrbm93bl9hdHRyJywgZGlyKHNlbGYuZmkuYSksCisgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgc2hvdyB1cCBpbiBuZXh0IGRpciIpCiAKICAgICBkZWYgdGVzdF9kdXBsaWNhdGVfZnVuY3Rpb25fZXF1YWxpdHkoc2VsZik6CiAgICAgICAgICMgQm9keSBvZiBgZHVwbGljYXRlJyBpcyB0aGUgZXhhY3Qgc2FtZSBhcyBzZWxmLmIKQEAgLTU2LDkgKzYxLDI5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdCgpLCAzKSAjIHNlbGYuYiBhbHdheXMgcmV0dXJucyAzLCBhcmJpdHJhcmlseQogCiAgICAgZGVmIHRlc3RfZnVuY19nbG9iYWxzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2dsb2JhbHMsIGdsb2JhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmIuZnVuY19nbG9iYWxzLCBnbG9iYWxzKCkpCiAgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuYiwgJ2Z1bmNfZ2xvYmFscycsIDIsIFR5cGVFcnJvcikKIAorICAgIGRlZiB0ZXN0X2Z1bmNfY2xvc3VyZShzZWxmKToKKyAgICAgICAgYSA9IDEyCisgICAgICAgIGRlZiBmKCk6IHByaW50IGEKKyAgICAgICAgYyA9IGYuZnVuY19jbG9zdXJlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgICMgZG9uJ3QgaGF2ZSBhIHR5cGUgb2JqZWN0IGhhbmR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXS5fX2NsYXNzX18uX19uYW1lX18sICJjZWxsIikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoZiwgImZ1bmNfY2xvc3VyZSIsIGMsIFR5cGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2VtcHR5X2NlbGwoc2VsZik6CisgICAgICAgIGRlZiBmKCk6IHByaW50IGEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5mdW5jX2Nsb3N1cmVbMF0uY2VsbF9jb250ZW50cworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gcmVhZCBhbiBlbXB0eSBjZWxsIikKKyAgICAgICAgYSA9IDEyCisKICAgICBkZWYgdGVzdF9mdW5jX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fbmFtZV9fLCAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfbmFtZSwgJ2InKQpAQCAtOTYsMTYgKzEyMSwyMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZnVuY19jb2RlLCBkLmZ1bmNfY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjKCksIDcpCiAgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChkKCksIDcpCi0gICAgICAgIHRyeTogYi5mdW5jX2NvZGUgPSBjLmZ1bmNfY29kZQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoCi0gICAgICAgICAgICAiZnVuY19jb2RlIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgZnJlZSB2YXJzIHNob3VsZCBub3QgYmUgIgotICAgICAgICAgICAgInBvc3NpYmxlIikKLSAgICAgICAgdHJ5OiBlLmZ1bmNfY29kZSA9IGQuZnVuY19jb2RlCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgKLSAgICAgICAgICAgICJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkIG5vdCBiZSAiCi0gICAgICAgICAgICAicG9zc2libGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiLmZ1bmNfY29kZSA9IGMuZnVuY19jb2RlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IGJlIHBvc3NpYmxlIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZS5mdW5jX2NvZGUgPSBkLmZ1bmNfY29kZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZnVuY19jb2RlIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgZnJlZSB2YXJzIHNob3VsZCAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCBiZSBwb3NzaWJsZSIpCiAKICAgICBkZWYgdGVzdF9ibGFua19mdW5jX2RlZmF1bHRzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2RlZmF1bHRzLCBOb25lKQpAQCAtMTI2LDEzICsxNTUsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jKDMsIDUpLCA4KQogICAgICAgICBkZWwgc2Vjb25kX2Z1bmMuZnVuY19kZWZhdWx0cwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZF9mdW5jLmZ1bmNfZGVmYXVsdHMsIE5vbmUpCi0gICAgICAgIHRyeTogc2Vjb25kX2Z1bmMoKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCi0gICAgICAgIGVsc2U6IHNlbGYuZmFpbCgKLSAgICAgICAgICAgICJmdW5jX2RlZmF1bHRzIGRvZXMgbm90IHVwZGF0ZTsgZGVsZXRpbmcgaXQgZG9lcyBub3QgcmVtb3ZlICIKLSAgICAgICAgICAgICJyZXF1aXJlbWVudCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlY29uZF9mdW5jKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZnVuY19kZWZhdWx0cyBkb2VzIG5vdCB1cGRhdGU7IGRlbGV0aW5nIGl0IGRvZXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlIHJlcXVpcmVtZW50IikKIAotY2xhc3MgSW1wbGljaXRSZWZlcmVuY2VzVGVzdChGdW5jQXR0cnNUZXN0KToKKworY2xhc3MgSW5zdGFuY2VtZXRob2RBdHRyVGVzdChGdW5jQXR0cnNUZXN0KToKICAgICBkZWYgdGVzdF9pbV9jbGFzcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYS5pbV9jbGFzcywgc2VsZi5mKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5pbV9jbGFzcywgc2VsZi5mKQpAQCAtMTU5LDkgKzE5MSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuaWQoKSwgaWQoc2VsZi5maSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5maS5pZCgpLCBpZChzZWxmLmYpKQogICAgICAgICAjIFRlc3QgdXNhZ2UKLSAgICAgICAgdHJ5OiBzZWxmLmYuaWQudW5rbm93bl9hdHRyCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoInVzaW5nIHVua25vd24gYXR0cmlidXRlcyBzaG91bGQgcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmYuaWQudW5rbm93bl9hdHRyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidXNpbmcgdW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCiAgICAgICAgICMgVGVzdCBhc3NpZ25tZW50IGFuZCBkZWxldGlvbgogICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmYuaWQsICd1bmtub3duX2F0dHInLCAyLCBBdHRyaWJ1dGVFcnJvcikKICAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5maS5pZCwgJ3Vua25vd25fYXR0cicsIDIsIEF0dHJpYnV0ZUVycm9yKQpAQCAtMTcxLDM1ICsyMDYsNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuYS5rbm93bl9hdHRyLCA3KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5rbm93bl9hdHRyLCA3KQogCisKIGNsYXNzIEFyYml0cmFyeUZ1bmN0aW9uQXR0clRlc3QoRnVuY0F0dHJzVGVzdCk6CiAgICAgZGVmIHRlc3Rfc2V0X2F0dHIoc2VsZik6CisgICAgICAgICMgc2V0dGluZyBhdHRyaWJ1dGVzIG9ubHkgd29ya3Mgb24gZnVuY3Rpb24gb2JqZWN0cwogICAgICAgICBzZWxmLmIua25vd25fYXR0ciA9IDcKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIua25vd25fYXR0ciwgNykKICAgICAgICAgZm9yIGZ1bmMgaW4gW3NlbGYuZi5hLCBzZWxmLmZpLmFdOgotICAgICAgICAgICAgdHJ5OiBmdW5jLmtub3duX2F0dHIgPSA3Ci0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6IHBhc3MKLSAgICAgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgic2V0dGluZyBhdHRyaWJ1dGVzIG9uIG1ldGhvZHMgc2hvdWxkIHJhaXNlIGVycm9yIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLmtub3duX2F0dHIgPSA3CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNldHRpbmcgYXR0cmlidXRlcyBvbiBtZXRob2RzIHNob3VsZCByYWlzZSBlcnJvciIpCiAKICAgICBkZWYgdGVzdF9kZWxldGVfdW5rbm93bl9hdHRyKHNlbGYpOgotICAgICAgICB0cnk6IGRlbCBzZWxmLmIudW5rbm93bl9hdHRyCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoImRlbGV0aW5nIHVua25vd24gYXR0cmlidXRlIHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5iLnVua25vd25fYXR0cgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRlbGV0aW5nIHVua25vd24gYXR0cmlidXRlIHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQogCiAgICAgZGVmIHRlc3Rfc2V0dGluZ19hdHRyc19kdXBsaWNhdGVzKHNlbGYpOgotICAgICAgICB0cnk6IHNlbGYuZi5hLmtsYXNzID0gc2VsZi5mCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoInNldHRpbmcgYXJiaXRyYXJ5IGF0dHJpYnV0ZSBpbiB1bmJvdW5kIGZ1bmN0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgc2hvdWxkIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5mLmEua2xhc3MgPSBzZWxmLmYKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzZXR0aW5nIGFyYml0cmFyeSBhdHRyaWJ1dGUgaW4gdW5ib3VuZCBmdW5jdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgIiBzaG91bGQgcmFpc2UgQXR0cmlidXRlRXJyb3IiKQogICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLmtsYXNzID0gc2VsZi5mCiAgICAgICAgIGZvciBtZXRob2QgaW4gW3NlbGYuZi5hLCBzZWxmLmZpLmEsIHNlbGYuZmkuYS5pbV9mdW5jXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kLmtsYXNzLCBzZWxmLmYpCiAKICAgICBkZWYgdGVzdF91bnNldF9hdHRyKHNlbGYpOgogICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5iLCBzZWxmLmYuYSwgc2VsZi5maS5hXToKLSAgICAgICAgICAgIHRyeTogIGZ1bmMubm9uX2V4aXN0ZW50X2F0dHIKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwotICAgICAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJ1c2luZyB1bmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIHJhaXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXR0cmlidXRlRXJyb3IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMubm9uX2V4aXN0ZW50X2F0dHIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidXNpbmcgdW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCByYWlzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGVFcnJvciIpCisKIAogY2xhc3MgRnVuY3Rpb25EaWN0c1Rlc3QoRnVuY0F0dHJzVGVzdCk6CiAgICAgZGVmIHRlc3Rfc2V0dGluZ19kaWN0X3RvX2ludmFsaWQoc2VsZik6CkBAIC0yMTYsMTMgKzI2NiwxMyBAQAogICAgICAgICAjIFNldHRpbmcgZGljdCBpcyBvbmx5IHBvc3NpYmxlIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdHMKICAgICAgICAgc2VsZi5mLmEuaW1fZnVuYy5fX2RpY3RfXyA9IGQKICAgICAgICAgIyBUZXN0IGFzc2lnbm1lbnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLmIuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi5iLmZ1bmNfZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmIuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5iLmZ1bmNfZGljdCkKICAgICAgICAgIyAuLi4gYW5kIG9uIGFsbCB0aGUgZGlmZmVyZW50IHdheXMgb2YgcmVmZXJlbmNpbmcgdGhlIG1ldGhvZCdzIGZ1bmMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLmYuYS5pbV9mdW5jLl9fZGljdF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYuZi5hLl9fZGljdF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYuZmkuYS5pbV9mdW5jLl9fZGljdF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYuZmkuYS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmYuYS5pbV9mdW5jLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZi5hLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZmkuYS5pbV9mdW5jLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZmkuYS5fX2RpY3RfXykKICAgICAgICAgIyBUZXN0IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmtub3duX2F0dHIsIDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZGljdF9fWydrbm93bl9hdHRyJ10sIDcpCkBAIC0yMzQsMTIgKzI4NCwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5rbm93bl9hdHRyLCA3KQogCiAgICAgZGVmIHRlc3RfZGVsZXRlX2Z1bmNfZGljdChzZWxmKToKLSAgICAgICAgdHJ5OiBkZWwgc2VsZi5iLl9fZGljdF9fCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJkZWxldGluZyBmdW5jdGlvbiBkaWN0aW9uYXJ5IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQotICAgICAgICB0cnk6IGRlbCBzZWxmLmIuZnVuY19kaWN0Ci0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJkZWxldGluZyBmdW5jdGlvbiBkaWN0aW9uYXJ5IHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5iLl9fZGljdF9fCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRlbGV0aW5nIGZ1bmN0aW9uIGRpY3Rpb25hcnkgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmIuZnVuY19kaWN0CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRlbGV0aW5nIGZ1bmN0aW9uIGRpY3Rpb25hcnkgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCiAKICAgICBkZWYgdGVzdF91bmFzc2lnbmVkX2RpY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZGljdF9fLCB7fSkKQEAgLTI1MCw2ICszMDYsNyBAQAogICAgICAgICBkW3NlbGYuYl0gPSB2YWx1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbc2VsZi5iXSwgdmFsdWUpCiAKKwogY2xhc3MgRnVuY3Rpb25Eb2NzdHJpbmdUZXN0KEZ1bmNBdHRyc1Rlc3QpOgogICAgIGRlZiB0ZXN0X3NldF9kb2NzdHJpbmdfYXR0cihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kb2NfXywgTm9uZSkKQEAgLTI3MywxMCArMzMwLDI0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZG9jX18sIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZG9jLCBOb25lKQogCisKK2NsYXNzIFN0YXRpY01ldGhvZEF0dHJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZnVuY19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLl9fZnVuY19fIGlzIGYpCisKKyAgICAgICAgcyA9IHN0YXRpY21ldGhvZChmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5fX2Z1bmNfXyBpcyBmKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZ1bmN0aW9uUHJvcGVydGllc1Rlc3QsIEltcGxpY2l0UmVmZXJlbmNlc1Rlc3QsCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdW5jdGlvblByb3BlcnRpZXNUZXN0LCBJbnN0YW5jZW1ldGhvZEF0dHJUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJiaXRyYXJ5RnVuY3Rpb25BdHRyVGVzdCwgRnVuY3Rpb25EaWN0c1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNNZXRob2RBdHRyc1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggMzFmOGY3MC4uNmJjN2IyYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNyArMSw5IEBACiBpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CitpbXBvcnQgcGlja2xlCiAKIEBzdGF0aWNtZXRob2QKIGRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKQEAgLTE5LDYgKzIxLDEwIEBACiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorZGVmIHNpZ25hdHVyZShwYXJ0KToKKyAgICAiIiIgcmV0dXJuIHRoZSBzaWduYXR1cmUgb2YgYSBwYXJ0aWFsIG9iamVjdCAiIiIKKyAgICByZXR1cm4gKHBhcnQuZnVuYywgcGFydC5hcmdzLCBwYXJ0LmtleXdvcmRzLCBwYXJ0Ll9fZGljdF9fKQorCiBjbGFzcyBUZXN0UGFydGlhbCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICB0aGV0eXBlID0gZnVuY3Rvb2xzLnBhcnRpYWwKQEAgLTk5LDcgKzEwNSw3IEBACiAgICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBhcmdzICsgKCd4JywpCiAgICAgICAgICAgICBnb3QsIGVtcHR5ID0gcCgneCcpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSB7fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09IHt9KQogCiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQpAQCAtMTA3LDE1ICsxMTMsMTUgQEAKICAgICAgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgYT1hKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOmEsJ3gnOk5vbmV9CiAgICAgICAgICAgICBlbXB0eSwgZ290ID0gcCh4PU5vbmUpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09ICgpKQogCiAgICAgZGVmIHRlc3Rfbm9fc2lkZV9lZmZlY3RzKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc2lkZSBlZmZlY3RzIHRoYXQgYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMKICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYXJnczIgPT0gKDAsKSBhbmQga3cyID09IHsnYSc6MX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmdzMiA9PSAoMCwpIGFuZCBrdzIgPT0geydhJzoxfSkKIAogICAgIGRlZiB0ZXN0X2Vycm9yX3Byb3BhZ2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZih4LCB5KToKQEAgLTEzOSw2ICsxNDUsMTIgQEAKICAgICAgICAgam9pbiA9IHNlbGYudGhldHlwZSgnJy5qb2luKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQorICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCisKIGNsYXNzIFBhcnRpYWxTdWJjbGFzcyhmdW5jdG9vbHMucGFydGlhbCk6CiAgICAgcGFzcwogCkBAIC0xNDYsMTEgKzE1OCwxMyBAQAogCiAgICAgdGhldHlwZSA9IFBhcnRpYWxTdWJjbGFzcwogCi0KIGNsYXNzIFRlc3RQeXRob25QYXJ0aWFsKFRlc3RQYXJ0aWFsKToKIAogICAgIHRoZXR5cGUgPSBQeXRob25QYXJ0aWFsCiAKKyAgICAjIHRoZSBweXRob24gdmVyc2lvbiBpc24ndCBwaWNrbGFibGUKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6IHBhc3MKKwogY2xhc3MgVGVzdFVwZGF0ZVdyYXBwZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGNoZWNrX3dyYXBwZXIoc2VsZiwgd3JhcHBlciwgd3JhcHBlZCwKQEAgLTE1OCwxNSArMTcyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZD1mdW5jdG9vbHMuV1JBUFBFUl9VUERBVEVTKToKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgYXNzaWduZWQKICAgICAgICAgZm9yIG5hbWUgaW4gYXNzaWduZWQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSBpcyBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIod3JhcHBlciwgbmFtZSkgaXMgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgdXBkYXRlZAogICAgICAgICBmb3IgbmFtZSBpbiB1cGRhdGVkOgogICAgICAgICAgICAgd3JhcHBlcl9hdHRyID0gZ2V0YXR0cih3cmFwcGVyLCBuYW1lKQogICAgICAgICAgICAgd3JhcHBlZF9hdHRyID0gZ2V0YXR0cih3cmFwcGVkLCBuYW1lKQogICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVkX2F0dHJba2V5XSBpcyB3cmFwcGVyX2F0dHJba2V5XSkKIAotICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwpAQCAtMTc0LDExICsxODgsMjAgQEAKICAgICAgICAgZGVmIHdyYXBwZXIoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYpCisgICAgICAgIHJldHVybiB3cmFwcGVyLCBmCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKICAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgJ1RoaXMgaXMgYSB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlX2RvYyhzZWxmKToKKyAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sICdUaGlzIGlzIGEgdGVzdCcpCisKICAgICBkZWYgdGVzdF9ub191cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgpAQCAtMTkwLDcgKzIxMyw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmLCAoKSwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ3dyYXBwZXInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaGFzYXR0cih3cmFwcGVyLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIod3JhcHBlciwgJ2F0dHInKSkKIAogICAgIGRlZiB0ZXN0X3NlbGVjdGl2ZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CkBAIC0yMTUsMTEgKzIzOCwxMSBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgbWF4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdtYXgnKQotICAgICAgICBzZWxmLmFzc2VydF8od3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZXIuX19kb2NfXy5zdGFydHN3aXRoKCdtYXgoJykpCiAKIGNsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CiAKLSAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKQEAgLTIyOCwxMCArMjUxLDE5IEBACiAgICAgICAgIGRlZiB3cmFwcGVyKCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQorICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgICAgIHdyYXBwZXIgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgJ1RoaXMgaXMgYSB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKIAorICAgIEB1bml0dGVzdC5za2lwSWYobm90IHN5cy5mbGFncy5vcHRpbWl6ZSA8PSAxLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZV9kb2Moc2VsZik6CisgICAgICAgIHdyYXBwZXIgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQorCiAgICAgZGVmIHRlc3Rfbm9fdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKQEAgLTI0Myw3ICsyNzUsNyBAQAogICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZiwgKCksICgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICd3cmFwcGVyJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbElmKGhhc2F0dHIod3JhcHBlciwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHdyYXBwZXIsICdhdHRyJykpCiAKICAgICBkZWYgdGVzdF9zZWxlY3RpdmVfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZigpOgpAQCAtMzA2LDE2ICszMzgsMTAzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKDQyLCAiIiwgIjEiKSwgIjEiKSAjIGZ1bmMgaXMgbmV2ZXIgY2FsbGVkIHdpdGggb25lIGl0ZW0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCAoNDIsIDQyKSkKIAorY2xhc3MgVGVzdENtcFRvS2V5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jbXBfdG9fa2V5KHNlbGYpOgorICAgICAgICBkZWYgbXljbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4geSAtIHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFs0LCAzLCAyLCAxLCAwXSkKIAorICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIGRlZiBteWNtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB5IC0geAorICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkKKyAgICAgICAgayA9IGtleSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoKGspKQogCitjbGFzcyBUZXN0VG90YWxPcmRlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sdChzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPCBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ2Uoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX25vX292ZXJ3cml0ZShzZWxmKToKKyAgICAgICAgIyBuZXcgbWV0aG9kcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEEoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImEiKSA8IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+IEEoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImEiKSA8PSBBKCJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKCJiIikgPj0gQSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpIDw9IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+PSBBKCJiIikpCisKKyAgICBkZWYgdGVzdF9ub19vcGVyYXRpb25zX2RlZmluZWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIHBhc3MKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGltcG9ydCBzeXMKICAgICB0ZXN0X2NsYXNzZXMgPSAoCiAgICAgICAgIFRlc3RQYXJ0aWFsLAogICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAogICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKICAgICAgICAgVGVzdFVwZGF0ZVdyYXBwZXIsCisgICAgICAgIFRlc3RUb3RhbE9yZGVyaW5nLAogICAgICAgICBUZXN0V3JhcHMsCiAgICAgICAgIFRlc3RSZWR1Y2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQppbmRleCA4MWQwYTNlLi44NGY5YzQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsc19leGVjKHNlbGYpOgogICAgICAgICBzY29wZSA9IHt9CiAgICAgICAgIGV4ZWMgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsczsgeCA9ICcnIiBpbiBzY29wZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzY29wZVsieCJdLCB1bmljb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNjb3BlWyJ4Il0sIHVuaWNvZGUpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmU0LnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmU0LnB5CmluZGV4IDI1ODBjNTUuLjUzZjhhZGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZTQucHkKQEAgLTUsNyArNSw3IEBACiAKIGNsYXNzIFRlc3RGdXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBhc3NlcnRUeXBlKHNlbGYsIG9iaiwgdHlwKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUob2JqKSBpcyB0eXAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG9iaikgaXMgdHlwLAogICAgICAgICAgICAgInR5cGUoJXIpIGlzICVyLCBub3QgJXIiICUgKG9iaiwgdHlwZShvYmopLCB0eXApKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5CmluZGV4IDFlMWE5MzAuLjQ5ODQwNzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZTUucHkKQEAgLTksNyArOSw3IEBACiBjbGFzcyBUZXN0TXVsdGlwbGVGZWF0dXJlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF91bmljb2RlX2xpdGVyYWxzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSgiIiwgdW5pY29kZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgdW5pY29kZSkKIAogICAgIGRlZiB0ZXN0X3ByaW50X2Z1bmN0aW9uKHNlbGYpOgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHM6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZV9idWlsdGlucy5weSBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlX2J1aWx0aW5zLnB5CmluZGV4IDBlMTZjYWYuLjk2YzM3ODggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlX2J1aWx0aW5zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlX2J1aWx0aW5zLnB5CkBAIC0yLDcgKzIsNiBAQAogCiAjIHdlJ3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1dHVyZSBidWlsdGluczoKIGZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBoZXgsIG9jdCwgbWFwLCB6aXAsIGZpbHRlcgotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogY2xhc3MgQnVpbHRpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2hleChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkgYi9MaWIvdGVzdC90ZXN0X2djLnB5CmluZGV4IDZlMmVhNDEuLjVhMzVkZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nYy5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgIyAtIHRoZSBjYWxsIHRvIGFzc2VydEVxdWFsIHNvbWVob3cgYXZvaWRzIGJ1aWxkaW5nIGl0cyBhcmdzIHR1cGxlCiAgICAgZGVmIHRlc3RfZ2V0X2NvdW50KHNlbGYpOgogICAgICAgICAjIEF2b2lkIGZ1dHVyZSBhbGxvY2F0aW9uIG9mIG1ldGhvZCBvYmplY3QKLSAgICAgICAgYXNzZXJ0RXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGFzc2VydEVxdWFsID0gc2VsZi5fYmFzZUFzc2VydEVxdWFsCiAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICBhc3NlcnRFcXVhbChnYy5nZXRfY291bnQoKSwgKDAsIDAsIDApKQogICAgICAgICBhID0gZGljdCgpCkBAIC00MTUsNiArNDE1LDM3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nZXRfcmVmZXJlbnRzKDEsICdhJywgNGopLCBbXSkKIAorICAgIGRlZiB0ZXN0X2lzX3RyYWNrZWQoc2VsZik6CisgICAgICAgICMgQXRvbWljIGJ1aWx0LWluIHR5cGVzIGFyZSBub3QgdHJhY2tlZCwgdXNlci1kZWZpbmVkIG9iamVjdHMgYW5kCisgICAgICAgICMgbXV0YWJsZSBjb250YWluZXJzIGFyZS4KKyAgICAgICAgIyBOT1RFOiB0eXBlcyB3aXRoIHNwZWNpYWwgb3B0aW1pemF0aW9ucyAoZS5nLiB0dXBsZSkgaGF2ZSB0ZXN0cworICAgICAgICAjIGluIHRoZWlyIG93biB0ZXN0IGZpbGVzIGluc3RlYWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKDEuMCArIDUuMGopKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoVHJ1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQodSJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChieXRlYXJyYXkoImEiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCh0eXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChvYmplY3QpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQob2JqZWN0KCkpKQorCisgICAgICAgIGNsYXNzIE9sZFN0eWxlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBOZXdTdHlsZShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChnYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKE9sZFN0eWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoT2xkU3R5bGUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKE5ld1N0eWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoTmV3U3R5bGUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoc2V0KCkpKQorCiAgICAgZGVmIHRlc3RfYnVnMTA1NTgyMGIoc2VsZik6CiAgICAgICAgICMgQ29ycmVzcG9uZHMgdG8gdGVtcDJiLnB5IGluIHRoZSBidWcgcmVwb3J0LgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzNkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtMCwwICsxLDY5OSBAQAorIyBWZXJpZnkgdGhhdCBnZGIgY2FuIHByZXR0eS1wcmludCB0aGUgdmFyaW91cyBQeU9iamVjdCogdHlwZXMKKyMKKyMgVGhlIGNvZGUgZm9yIHRlc3RpbmcgZ2RiIHdhcyBhZGFwdGVkIGZyb20gc2ltaWxhciB3b3JrIGluIFVubGFkZW4gU3dhbGxvdydzCisjIExpYi90ZXN0L3Rlc3Rfaml0X2dkYi5weQorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5c2NvbmZpZworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCisKK3RyeToKKyAgICBnZGJfdmVyc2lvbiwgXyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKCkKK2V4Y2VwdCBPU0Vycm9yOgorICAgICMgVGhpcyBpcyB3aGF0ICJubyBnZGIiIGxvb2tzIGxpa2UuICBUaGVyZSBtYXksIGhvd2V2ZXIsIGJlIG90aGVyCisgICAgIyBlcnJvcnMgdGhhdCBtYW5pZmVzdCB0aGlzIHdheSB0b28uCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNvdWxkbid0IGZpbmQgZ2RiIG9uIHRoZSBwYXRoIikKK2dkYl92ZXJzaW9uX251bWJlciA9IHJlLnNlYXJjaChyIl5HTlUgZ2RiIFteXGRdKihcZCspXC4iLCBnZGJfdmVyc2lvbikKK2lmIGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMSkpIDwgNzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIHZlcnNpb25zIGJlZm9yZSA3LjAgZGlkbid0IHN1cHBvcnQgcHl0aG9uIGVtYmVkZGluZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNhdzpcbiIgKyBnZGJfdmVyc2lvbikKKworIyBWZXJpZnkgdGhhdCAiZ2RiIiB3YXMgYnVpbHQgd2l0aCB0aGUgZW1iZWRkZWQgcHl0aG9uIHN1cHBvcnQgZW5hYmxlZDoKK2NtZCA9ICItLWV2YWwtY29tbWFuZD1weXRob24gaW1wb3J0IHN5czsgcHJpbnQgc3lzLnZlcnNpb25faW5mbyIKK3AgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2RiIiwgIi0tYmF0Y2giLCBjbWRdLAorICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKK2dkYnB5X3ZlcnNpb24sIF8gPSBwLmNvbW11bmljYXRlKCkKK2lmIGdkYnB5X3ZlcnNpb24gPT0gJyc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdkYiBub3QgYnVpbHQgd2l0aCBlbWJlZGRlZCBweXRob24gc3VwcG9ydCIpCisKK2RlZiBnZGJfaGFzX2ZyYW1lX3NlbGVjdCgpOgorICAgICMgRG9lcyB0aGlzIGJ1aWxkIG9mIGdkYiBoYXZlIGdkYi5GcmFtZS5zZWxlY3QgPworICAgIGNtZCA9ICItLWV2YWwtY29tbWFuZD1weXRob24gcHJpbnQoZGlyKGdkYi5GcmFtZSkpIgorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2RiIiwgIi0tYmF0Y2giLCBjbWRdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgc3Rkb3V0LCBfID0gcC5jb21tdW5pY2F0ZSgpCisgICAgbSA9IHJlLm1hdGNoKHInLipcWyguKilcXS4qJywgc3Rkb3V0KQorICAgIGlmIG5vdCBtOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIHBhcnNlIG91dHB1dCBmcm9tIGdkYi5GcmFtZS5zZWxlY3QgdGVzdCIpCisgICAgZ2RiX2ZyYW1lX2RpciA9IG0uZ3JvdXAoMSkuc3BsaXQoJywgJykKKyAgICByZXR1cm4gIidzZWxlY3QnIiBpbiBnZGJfZnJhbWVfZGlyCisKK0hBU19QWVVQX1BZRE9XTiA9IGdkYl9oYXNfZnJhbWVfc2VsZWN0KCkKKworY2xhc3MgRGVidWdnZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGRlYnVnZ2VyIGNhbiBkZWJ1ZyBQeXRob24uIiIiCisKKyAgICBkZWYgcnVuX2dkYihzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJ1bnMgZ2RiIHdpdGggdGhlIGNvbW1hbmQgbGluZSBnaXZlbiBieSAqYXJncy4KKworICAgICAgICBSZXR1cm5zIGl0cyBzdGRvdXQsIHN0ZGVycgorICAgICAgICAiIiIKKyAgICAgICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICkuY29tbXVuaWNhdGUoKQorICAgICAgICByZXR1cm4gb3V0LCBlcnIKKworICAgIGRlZiBnZXRfc3RhY2tfdHJhY2Uoc2VsZiwgc291cmNlPU5vbmUsIHNjcmlwdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludD0nUHlPYmplY3RfUHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc2l0ZT1GYWxzZSk6CisgICAgICAgICcnJworICAgICAgICBSdW4gJ3B5dGhvbiAtYyBTT1VSQ0UnIHVuZGVyIGdkYiB3aXRoIGEgYnJlYWtwb2ludC4KKworICAgICAgICBTdXBwb3J0IGluamVjdGluZyBjb21tYW5kcyBhZnRlciB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkCisKKyAgICAgICAgUmV0dXJucyB0aGUgc3Rkb3V0IGZyb20gZ2RiCisKKyAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50OiBpZiBwcm92aWRlZCwgYSBsaXN0IG9mIHN0cmluZ3M6IGdkYiBjb21tYW5kcworICAgICAgICAnJycKKyAgICAgICAgIyBXZSB1c2UgInNldCBicmVha3BvaW50IHBlbmRpbmcgeWVzIiB0byBhdm9pZCBibG9ja2luZyB3aXRoIGE6CisgICAgICAgICMgICBGdW5jdGlvbiAiZm9vIiBub3QgZGVmaW5lZC4KKyAgICAgICAgIyAgIE1ha2UgYnJlYWtwb2ludCBwZW5kaW5nIG9uIGZ1dHVyZSBzaGFyZWQgbGlicmFyeSBsb2FkPyAoeSBvciBbbl0pCisgICAgICAgICMgZXJyb3IsIHdoaWNoIHR5cGljYWxseSBoYXBwZW5zIHB5dGhvbiBpcyBkeW5hbWljYWxseSBsaW5rZWQgKHRoZQorICAgICAgICAjIGJyZWFrcG9pbnRzIG9mIGludGVyZXN0IGFyZSB0byBiZSBmb3VuZCBpbiB0aGUgc2hhcmVkIGxpYnJhcnkpCisgICAgICAgICMgV2hlbiB0aGlzIGhhcHBlbnMsIHdlIHN0aWxsIGdldDoKKyAgICAgICAgIyAgIEZ1bmN0aW9uICJQeU9iamVjdF9QcmludCIgbm90IGRlZmluZWQuCisgICAgICAgICMgZW1pdHRlZCB0byBzdGRlcnIgZWFjaCB0aW1lLCBhbGFzLgorCisgICAgICAgICMgSW5pdGlhbGx5IEkgaGFkICItLWV2YWwtY29tbWFuZD1jb250aW51ZSIgaGVyZSwgYnV0IHJlbW92ZWQgaXQgdG8KKyAgICAgICAgIyBhdm9pZCByZXBlYXRlZCBwcmludCBicmVha3BvaW50cyB3aGVuIHRyYXZlcnNpbmcgaGllcmFyY2hpY2FsIGRhdGEKKyAgICAgICAgIyBzdHJ1Y3R1cmVzCisKKyAgICAgICAgIyBHZW5lcmF0ZSBhIGxpc3Qgb2YgY29tbWFuZHMgaW4gZ2RiJ3MgbGFuZ3VhZ2U6CisgICAgICAgIGNvbW1hbmRzID0gWydzZXQgYnJlYWtwb2ludCBwZW5kaW5nIHllcycsCisgICAgICAgICAgICAgICAgICAgICdicmVhayAlcycgJSBicmVha3BvaW50LAorICAgICAgICAgICAgICAgICAgICAncnVuJ10KKyAgICAgICAgaWYgY21kc19hZnRlcl9icmVha3BvaW50OgorICAgICAgICAgICAgY29tbWFuZHMgKz0gY21kc19hZnRlcl9icmVha3BvaW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tYW5kcyArPSBbJ2JhY2t0cmFjZSddCisKKyAgICAgICAgIyBwcmludCBjb21tYW5kcworCisgICAgICAgICMgVXNlICJjb21tYW5kcyIgdG8gZ2VuZXJhdGUgdGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIHRvIGludm9rZSAiZ2RiIjoKKyAgICAgICAgYXJncyA9IFsiZ2RiIiwgIi0tYmF0Y2giXQorICAgICAgICBhcmdzICs9IFsnLS1ldmFsLWNvbW1hbmQ9JXMnICUgY21kIGZvciBjbWQgaW4gY29tbWFuZHNdCisgICAgICAgIGFyZ3MgKz0gWyItLWFyZ3MiLAorICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZV0KKworICAgICAgICBpZiBub3QgaW1wb3J0X3NpdGU6CisgICAgICAgICAgICAjIC1TIHN1cHByZXNzZXMgdGhlIGRlZmF1bHQgJ2ltcG9ydCBzaXRlJworICAgICAgICAgICAgYXJncyArPSBbIi1TIl0KKworICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICBhcmdzICs9IFsiLWMiLCBzb3VyY2VdCisgICAgICAgIGVsaWYgc2NyaXB0OgorICAgICAgICAgICAgYXJncyArPSBbc2NyaXB0XQorCisgICAgICAgICMgcHJpbnQgYXJncworICAgICAgICAjIHByaW50ICcgJy5qb2luKGFyZ3MpCisKKyAgICAgICAgIyBVc2UgImFyZ3MiIHRvIGludm9rZSBnZGIsIGNhcHR1cmluZyBzdGRvdXQsIHN0ZGVycjoKKyAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnJ1bl9nZGIoKmFyZ3MpCisKKyAgICAgICAgIyBJZ25vcmUgc29tZSBub2lzZSBvbiBzdGRlcnIgZHVlIHRvIHRoZSBwZW5kaW5nIGJyZWFrcG9pbnQ6CisgICAgICAgIGVyciA9IGVyci5yZXBsYWNlKCdGdW5jdGlvbiAiJXMiIG5vdCBkZWZpbmVkLlxuJyAlIGJyZWFrcG9pbnQsICcnKQorICAgICAgICAjIElnbm9yZSBzb21lIG90aGVyIG5vaXNlIG9uIHN0ZGVyciAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg2MDApCisgICAgICAgIGVyciA9IGVyci5yZXBsYWNlKCJ3YXJuaW5nOiBVbmFibGUgdG8gZmluZCBsaWJ0aHJlYWRfZGIgbWF0Y2hpbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW5mZXJpb3IncyB0aHJlYWQgbGlicmFyeSwgdGhyZWFkIGRlYnVnZ2luZyB3aWxsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vdCBiZSBhdmFpbGFibGUuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKworICAgICAgICAjIEVuc3VyZSBubyB1bmV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgJycpCisKKyAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIGdldF9nZGJfcmVwcihzZWxmLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgIyBHaXZlbiBhbiBpbnB1dCBweXRob24gc291cmNlIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEsCisgICAgICAgICMgcnVuICJweXRob24gLWMncHJpbnQgREFUQSciIHVuZGVyIGdkYiB3aXRoIGEgYnJlYWtwb2ludCBvbgorICAgICAgICAjIFB5T2JqZWN0X1ByaW50IGFuZCBzY3JhcGUgb3V0IGdkYidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAib3AiCisgICAgICAgICMgcGFyYW1ldGVyLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGdkYiBkaXNwbGF5cyB0aGUgc2FtZSBzdHJpbmcKKyAgICAgICAgIworICAgICAgICAjIEZvciBhIG5lc3RlZCBzdHJ1Y3R1cmUsIHRoZSBmaXJzdCB0aW1lIHdlIGhpdCB0aGUgYnJlYWtwb2ludCB3aWxsCisgICAgICAgICMgZ2l2ZSB1cyB0aGUgdG9wLWxldmVsIHN0cnVjdHVyZQorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc291cmNlLCBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Y21kc19hZnRlcl9icmVha3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3NpdGU9aW1wb3J0X3NpdGUpCisgICAgICAgICMgZ2RiIGNhbiBpbnNlcnQgYWRkaXRpb25hbCAnXG4nIGFuZCBzcGFjZSBjaGFyYWN0ZXJzIGluIHZhcmlvdXMgcGxhY2VzCisgICAgICAgICMgaW4gaXRzIG91dHB1dCwgZGVwZW5kaW5nIG9uIHRoZSB3aWR0aCBvZiB0aGUgdGVybWluYWwgaXQncyBjb25uZWN0ZWQKKyAgICAgICAgIyB0byAodXNpbmcgaXRzICJ3cmFwX2hlcmUiIGZ1bmN0aW9uKQorICAgICAgICBtID0gcmUubWF0Y2goJy4qIzBccytQeU9iamVjdF9QcmludFxzK1woXHMqb3BcPVxzKiguKj8pLFxzK2ZwPS4qXCkuKicsCisgICAgICAgICAgICAgICAgICAgICBnZGJfb3V0cHV0LCByZS5ET1RBTEwpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGdkYiBvdXRwdXQ6ICVyXG4lcycgJSAoZ2RiX291dHB1dCwgZ2RiX291dHB1dCkpCisgICAgICAgIHJldHVybiBtLmdyb3VwKDEpLCBnZGJfb3V0cHV0CisKKyAgICBkZWYgYXNzZXJ0RW5kc1dpdGgoc2VsZiwgYWN0dWFsLCBleHBfZW5kKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgdGhlIGdpdmVuICJhY3R1YWwiIHN0cmluZyBlbmRzIHdpdGggImV4cF9lbmQiJycnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhY3R1YWwuZW5kc3dpdGgoZXhwX2VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9JyVyIGRpZCBub3QgZW5kIHdpdGggJXInICUgKGFjdHVhbCwgZXhwX2VuZCkpCisKKyAgICBkZWYgYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhzZWxmLCBhY3R1YWwsIHBhdHRlcm4pOgorICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgYWN0dWFsLCByZS5ET1RBTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLCBtc2c9JyVyIGRpZCBub3QgbWF0Y2ggJXInICUgKGFjdHVhbCwgcGF0dGVybikpCisKKyAgICBkZWYgZ2V0X3NhbXBsZV9zY3JpcHQoc2VsZik6CisgICAgICAgIHJldHVybiBmaW5kZmlsZSgnZ2RiX3NhbXBsZS5weScpCisKK2NsYXNzIFByZXR0eVByaW50VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIHRlc3RfZ2V0dGluZ19iYWNrdHJhY2Uoc2VsZik6CisgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZSgncHJpbnQgNDInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1B5T2JqZWN0X1ByaW50JyBpbiBnZGJfb3V0cHV0KQorCisgICAgZGVmIGFzc2VydEdkYlJlcHIoc2VsZiwgdmFsLCBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgZ2RiJ3MgcmVuZGVyaW5nIG9mIHRoZSB2YWx1ZSBpbiBhIGRlYnVnZ2VkIHByb2Nlc3MKKyAgICAgICAgIyBtYXRjaGVzIHJlcHIodmFsdWUpIGluIHRoaXMgcHJvY2VzczoKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgJyArIHJlcHIodmFsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsIHJlcHIodmFsKSwgZ2RiX291dHB1dCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHZhcmlvdXMgImludCIgdmFsdWVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigwKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLTcpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoLXN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdmFyaW91cyAibG9uZyIgdmFsdWVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigxMDAwMDAwMDAwMDAwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC0xTCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC0xMDAwMDAwMDAwMDAwMDAwTCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBUcnVlLCBGYWxzZSBhbmQgTm9uZScKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaWN0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGRpY3Rpb25hcmllcycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHt9KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInLCAnZG91Z2xhcyc6NDJ9KQorCisgICAgZGVmIHRlc3RfbGlzdHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBsaXN0cycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFtdKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIocmFuZ2UoNSkpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2Ygc3RyaW5ncycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCcnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ0FuZCBub3cgZm9yIHNvbWV0aGluZyBob3BlZnVsbHkgdGhlIHNhbWUnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ3N0cmluZyB3aXRoIGVtYmVkZGVkIE5VTCBoZXJlIFwwIGFuZCB0aGVuIHNvbWUgbW9yZSB0ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCd0aGlzIGlzIGJ5dGUgMjU1Olx4ZmYgYW5kIGJ5dGUgMTI4Olx4ODAnKQorCisgICAgZGVmIHRlc3RfdHVwbGVzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdHVwbGVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoJ2ZvbycsICdiYXInLCAnYmF6JykpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdW5pY29kZSB2YWx1ZXMnCisgICAgICAgICMgVGVzdCB0aGUgZW1wdHkgdW5pY29kZSBzdHJpbmc6CisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1JycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnaGVsbG8gd29ybGQnKQorCisgICAgICAgICMgVGVzdCBwcmludGluZyBhIHNpbmdsZSBjaGFyYWN0ZXI6CisgICAgICAgICMgICAgVSsyNjIwIFNLVUxMIEFORCBDUk9TU0JPTkVTCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1J1x1MjYyMCcpCisKKyAgICAgICAgIyBUZXN0IHByaW50aW5nIGEgSmFwYW5lc2UgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgIyAoSSBiZWxpZXZlIHRoaXMgcmVhZHMgIm1vamliYWtlIiwgdXNpbmcgMyBjaGFyYWN0ZXJzIGZyb20gdGhlIENKSworICAgICAgICAjIFVuaWZpZWQgSWRlb2dyYXBocyBhcmVhLCBmb2xsb3dlZCBieSBVKzMwNTEgSElSQUdBTkEgTEVUVEVSIEtFKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSdcdTY1ODdcdTViNTdcdTUzMTZcdTMwNTEnKQorCisgICAgICAgICMgVGVzdCBhIGNoYXJhY3RlciBvdXRzaWRlIHRoZSBCTVA6CisgICAgICAgICMgICAgVSsxRDEyMSBNVVNJQ0FMIFNZTUJPTCBDIENMRUYKKyAgICAgICAgIyBUaGlzIGlzOgorICAgICAgICAjIFVURi04OiAweEYwIDB4OUQgMHg4NCAweEExCisgICAgICAgICMgVVRGLTE2OiAweEQ4MzQgMHhERDIxCisgICAgICAgICMgVGhpcyB3aWxsIG9ubHkgd29yayBvbiB3aWRlLXVuaWNvZGUgYnVpbGRzOgorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSJcVTAwMDFEMTIxIikKKworICAgIGRlZiB0ZXN0X3NldHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBzZXRzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWydhJywgJ2InXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGhhbmRsZWQgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKKyAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQorcy5wb3AoKQorcHJpbnQgcycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInNldChbJ2InXSkiKQorCisgICAgZGVmIHRlc3RfZnJvemVuc2V0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGZyb3plbnNldHMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldChbJ2EnLCAnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldChbNCwgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgUnVudGltZUVycm9yCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCit0cnk6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJJIGFtIGFuIGVycm9yIikKK2V4Y2VwdCBSdW50aW1lRXJyb3IsIGU6CisgICAgcHJpbnQgZQorJycnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb25zLlJ1bnRpbWVFcnJvcignSSBhbSBhbiBlcnJvcicsKSIpCisKKworICAgICAgICAjIFRlc3QgZGl2aXNpb24gYnkgemVybzoKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK3RyeToKKyAgICBhID0gMSAvIDAKK2V4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciwgZToKKyAgICBwcmludCBlCisnJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMuWmVyb0RpdmlzaW9uRXJyb3IoJ2ludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8nLCkiKQorCisgICAgZGVmIHRlc3RfY2xhc3NpY19jbGFzcyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGNsYXNzaWMgY2xhc3MgaW5zdGFuY2VzJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBjbGFzc2ljLWNsYXNzIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X21vZGVybl9jbGFzcyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIG5ldy1zdHlsZSBjbGFzcyBpbnN0YW5jZXMnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28ob2JqZWN0KToKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgbmV3LXN0eWxlIGNsYXNzIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nX2xpc3Qoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBhbiBpbnN0YW5jZSBvZiBhIGxpc3Qgc3ViY2xhc3MnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28obGlzdCk6CisgICAgcGFzcworZm9vID0gRm9vKCkKK2ZvbyArPSBbMSwgMiwgM10KK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIG5ldy1zdHlsZSBjbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZ190dXBsZShzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGFuIGluc3RhbmNlIG9mIGEgdHVwbGUgc3ViY2xhc3MnCisgICAgICAgICMgVGhpcyBzaG91bGQgZXhlcmNpc2UgdGhlIG5lZ2F0aXZlIHRwX2RpY3RvZmZzZXQgY29kZSBpbiB0aGUKKyAgICAgICAgIyBuZXctc3R5bGUgY2xhc3Mgc3VwcG9ydAorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKHR1cGxlKToKKyAgICBwYXNzCitmb28gPSBGb28oKDEsIDIsIDMpKQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgbmV3LXN0eWxlIGNsYXNzIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiBhc3NlcnRTYW5lKHNlbGYsIHNvdXJjZSwgY29ycnVwdGlvbiwgZXhwdmFsdWU9Tm9uZSwgZXhwdHlwZT1Ob25lKToKKyAgICAgICAgJycnUnVuIFB5dGhvbiB1bmRlciBnZGIsIGNvcnJ1cHRpbmcgdmFyaWFibGVzIGluIHRoZSBpbmZlcmlvciBwcm9jZXNzCisgICAgICAgIGltbWVkaWF0ZWx5IGJlZm9yZSB0YWtpbmcgYSBiYWNrdHJhY2UuCisKKyAgICAgICAgVmVyaWZ5IHRoYXQgdGhlIHZhcmlhYmxlJ3MgcmVwcmVzZW50YXRpb24gaXMgdGhlIGV4cGVjdGVkIGZhaWxzYWZlCisgICAgICAgIHJlcHJlc2VudGF0aW9uJycnCisgICAgICAgIGlmIGNvcnJ1cHRpb246CisgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9W2NvcnJ1cHRpb24sICdiYWNrdHJhY2UnXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsnYmFja3RyYWNlJ10KKworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1jbWRzX2FmdGVyX2JyZWFrcG9pbnQpCisKKyAgICAgICAgaWYgZXhwdmFsdWU6CisgICAgICAgICAgICBpZiBnZGJfcmVwciA9PSByZXByKGV4cHZhbHVlKToKKyAgICAgICAgICAgICAgICAjIGdkYiBtYW5hZ2VkIHRvIHByaW50IHRoZSB2YWx1ZSBpbiBzcGl0ZSBvZiB0aGUgY29ycnVwdGlvbjsKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgZ29vZCAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MzMwKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGV4cHR5cGU6CisgICAgICAgICAgICBwYXR0ZXJuID0gJzwnICsgZXhwdHlwZSArICcgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTWF0Y2ggYW55dGhpbmcgZm9yIHRoZSB0eXBlIG5hbWU7IDB4REVBREJFRUYgY291bGQgcG9pbnQgdG8KKyAgICAgICAgICAgICMgc29tZXRoaW5nIGFyYml0cmFyeSAoc2VlICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODMzMCkKKyAgICAgICAgICAgIHBhdHRlcm4gPSAnPC4qIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nCisKKyAgICAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIGdkYl9yZXByKQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF9OVUxMX3B0cihzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgTlVMTCBQeU9iamVjdCogaXMgaGFuZGxlZCBncmFjZWZ1bGx5JworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9ICgKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydzZXQgdmFyaWFibGUgb3A9MCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrdHJhY2UnXSkKKyAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnMHgwJykKKworICAgIGRlZiB0ZXN0X05VTExfb2JfdHlwZShzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggTlVMTCBvYl90eXBlIGlzIGhhbmRsZWQgZ3JhY2VmdWxseScKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlPTAnKQorCisgICAgZGVmIHRlc3RfY29ycnVwdF9vYl90eXBlKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIGNvcnJ1cHQgb2JfdHlwZSBpcyBoYW5kbGVkIGdyYWNlZnVsbHknCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCBvcC0+b2JfdHlwZT0weERFQURCRUVGJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHZhbHVlPTQyKQorCisgICAgZGVmIHRlc3RfY29ycnVwdF90cF9mbGFncyhzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggYSB0eXBlIHdpdGggY29ycnVwdCB0cF9mbGFncyBpcyBoYW5kbGVkJworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgb3AtPm9iX3R5cGUtPnRwX2ZsYWdzPTB4MCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHB2YWx1ZT00MikKKworICAgIGRlZiB0ZXN0X2NvcnJ1cHRfdHBfbmFtZShzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggYSB0eXBlIHdpdGggY29ycnVwdCB0cF9uYW1lIGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCBvcC0+b2JfdHlwZS0+dHBfbmFtZT0weERFQURCRUVGJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHZhbHVlPTQyKQorCisgICAgZGVmIHRlc3RfTlVMTF9pbnN0YW5jZV9kaWN0KHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeUluc3RhbmNlT2JqZWN0IHdpdGggd2l0aCBhIE5VTEwgaW5fZGljdCBpcyBoYW5kbGVkJworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJycnCitjbGFzcyBGb286CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCAoKFB5SW5zdGFuY2VPYmplY3QqKW9wKS0+aW5fZGljdCA9IDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdHlwZT0nRm9vJykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5zX2hlbHAoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCB0aGUgbmV3LXN0eWxlIGNsYXNzIF9IZWxwZXIgaW4gc2l0ZS5weSBjYW4gYmUgaGFuZGxlZCcKKyAgICAgICAgIyAodGhpcyB3YXMgdGhlIGlzc3VlIGNhdXNpbmcgdHJhY2ViYWNrcyBpbgorICAgICAgICAjICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODAzMiNtc2cxMDA1MzcgKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50IF9fYnVpbHRpbnNfXy5oZWxwJywgaW1wb3J0X3NpdGU9VHJ1ZSkKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPF9IZWxwZXIgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfbGlzdChzZWxmKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgYSByZWZlcmVuY2UgbG9vcCBpbnZvbHZpbmcgYSBsaXN0IGRvZXNuJ3QgbGVhZCBwcm94eXZhbAorICAgICAgICBpbnRvIGFuIGluZmluaXRlIGxvb3A6JycnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoImEgPSBbMywgNCwgNV0gOyBhLmFwcGVuZChhKSA7IHByaW50IGEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICdbMywgNCwgNSwgWy4uLl1dJykKKworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCJhID0gWzMsIDQsIDVdIDsgYiA9IFthXSA7IGEuYXBwZW5kKGIpIDsgcHJpbnQgYSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJ1szLCA0LCA1LCBbWy4uLl1dXScpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfZGljdChzZWxmKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgYSByZWZlcmVuY2UgbG9vcCBpbnZvbHZpbmcgYSBkaWN0IGRvZXNuJ3QgbGVhZCBwcm94eXZhbAorICAgICAgICBpbnRvIGFuIGluZmluaXRlIGxvb3A6JycnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoImEgPSB7fSA7IGIgPSB7J2Jhcic6YX0gOyBhWydmb28nXSA9IGIgOyBwcmludCBhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAieydmb28nOiB7J2Jhcic6IHsuLi59fX0iKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX29sZF9zdHlsZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2F0dHIgPSBmb28KK3ByaW50IGZvbycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8Rm9vXChhbl9hdHRyPTxcLlwuXC4+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9uZXdfc3R5bGVfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28ob2JqZWN0KToKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2F0dHIgPSBmb28KK3ByaW50IGZvbycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8Rm9vXChhbl9hdHRyPTxcLlwuXC4+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKG9iamVjdCk6CisgICAgcGFzcworYSA9IEZvbygpCitiID0gRm9vKCkKK2EuYW5fYXR0ciA9IGIKK2IuYW5fYXR0ciA9IGEKK3ByaW50IGEnJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPEZvb1woYW5fYXR0cj08Rm9vXChhbl9hdHRyPTxcLlwuXC4+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0aW9uKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdmVyeSBsb25nIG91dHB1dCBpcyB0cnVuY2F0ZWQnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50IHJhbmdlKDEwMDApJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjIyNCwgMjI1LCAyMjYuLi4odHJ1bmNhdGVkKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0ICsgbGVuKCcuLi4odHJ1bmNhdGVkKScpKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgbGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJzxidWlsdC1pbiBmdW5jdGlvbiBsZW4+JykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fbWV0aG9kKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdpbXBvcnQgc3lzOyBwcmludCBzeXMuc3Rkb3V0LnJlYWRsaW5lcycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPGJ1aWx0LWluIG1ldGhvZCByZWFkbGluZXMgb2YgZmlsZSBvYmplY3QgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X2ZyYW1lcyhzZWxmKToKKyAgICAgICAgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKCcnJworZGVmIGZvbyhhLCBiLCBjKToKKyAgICBwYXNzCisKK2ZvbygzLCA0LCA1KQorcHJpbnQgZm9vLl9fY29kZV9fJycnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludD0nUHlPYmplY3RfUHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHJpbnQgKFB5RnJhbWVPYmplY3QqKSgoKFB5Q29kZU9iamVjdCopb3ApLT5jb196b21iaWVmcmFtZSknXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicuKlxzK1wkMSA9XHMrRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIDxzdHJpbmc+LCBsaW5lIDMsIGluIGZvbyBcKFwpXHMrLionLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLkRPVEFMTCksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSAoZ2RiX291dHB1dCwgZ2RiX291dHB1dCkpCisKK2NsYXNzIFB5TGlzdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiBhc3NlcnRMaXN0aW5nKHNlbGYsIGV4cGVjdGVkLCBhY3R1YWwpOgorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS1saXN0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbGlzdCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgNSAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA2ICAgIGRlZiBiYXIoYSwgYiwgYyk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgNyAgICAgICAgYmF6KGEsIGIsIGMpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgOCAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA5ICAgIGRlZiBiYXooKmFyZ3MpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyA+MTAgICAgICAgIHByaW50KDQyKVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTEgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMiAgICBmb28oMSwgMiwgMylcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidCkKKworICAgIGRlZiB0ZXN0X29uZV9hYnNfYXJnKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSAicHktbGlzdCIgY29tbWFuZCB3aXRoIG9uZSBhYnNvbHV0ZSBhcmd1bWVudCcKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgOSddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgOSAgICBkZWYgYmF6KCphcmdzKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgPjEwICAgICAgICBwcmludCg0MilcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDExICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTIgICAgZm9vKDEsIDIsIDMpXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKKyAgICBkZWYgdGVzdF90d29fYWJzX2FyZ3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlICJweS1saXN0IiBjb21tYW5kIHdpdGggdHdvIGFic29sdXRlIGFyZ3VtZW50cycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgMSwzJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0aW5nKCcgICAxICAgICMgU2FtcGxlIHNjcmlwdCBmb3IgdXNlIGJ5IHRlc3RfZ2RiLnB5XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgMiAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAzICAgIGRlZiBmb28oYSwgYiwgYyk6XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKK2NsYXNzIFN0YWNrTmF2aWdhdGlvblRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfcHl1cF9jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS11cCIgY29tbWFuZCB3b3JrcycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorJCcnJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfZG93bl9hdF9ib3R0b20oc2VsZik6CisgICAgICAgICdWZXJpZnkgaGFuZGxpbmcgb2YgInB5LWRvd24iIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktZG93biddKQorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZmluZCBhIG5ld2VyIHB5dGhvbiBmcmFtZVxuJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfdXBfYXRfdG9wKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IGhhbmRsaW5nIG9mICJweS11cCIgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2snCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCddICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aChidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgYW4gb2xkZXIgcHl0aG9uIGZyYW1lXG4nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF91cF90aGVuX2Rvd24oc2VsZik6CisgICAgICAgICdWZXJpZnkgInB5LXVwIiBmb2xsb3dlZCBieSAicHktZG93biInCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCcsICdweS1kb3duJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDEwLCBpbiBiYXogXChhcmdzPVwoMSwgMiwgM1wpXCkKKyAgICBwcmludFwoNDJcKQorJCcnJykKKworY2xhc3MgUHlCdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LWJ0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktYnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgNCwgaW4gZm9vIFwoYT0xLCBiPTIsIGM9M1wpCisgICAgYmFyXChhLCBiLCBjXCkKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSAxMiwgaW4gPG1vZHVsZT4gXChcKQorZm9vXCgxLCAyLCAzXCkKKycnJykKKworY2xhc3MgUHlQcmludFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LXByaW50IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgYXJncyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5sb2NhbCAnYXJncycgPSBcKDEsIDIsIDNcKVxuLioiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9wcmludF9hZnRlcl91cChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LXByaW50IGMnLCAncHktcHJpbnQgYicsICdweS1wcmludCBhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmxvY2FsICdjJyA9IDNcbmxvY2FsICdiJyA9IDJcbmxvY2FsICdhJyA9IDFcbi4qIikKKworICAgIGRlZiB0ZXN0X3ByaW50aW5nX2dsb2JhbChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXByaW50IF9fbmFtZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmdsb2JhbCAnX19uYW1lX18nID0gJ19fbWFpbl9fJ1xuLioiKQorCisgICAgZGVmIHRlc3RfcHJpbnRpbmdfYnVpbHRpbihzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXByaW50IGxlbiddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5idWlsdGluICdsZW4nID0gPGJ1aWx0LWluIGZ1bmN0aW9uIGxlbj5cbi4qIikKKworY2xhc3MgUHlMb2NhbHNUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbG9jYWxzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmFyZ3MgPSBcKDEsIDIsIDNcKVxuLioiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9sb2NhbHNfYWZ0ZXJfdXAoc2VsZik6CisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCcsICdweS1sb2NhbHMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuYSA9IDFcbmIgPSAyXG5jID0gM1xuLioiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgY2ZsYWdzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpWydQWV9DRkxBR1MnXQorICAgIGZpbmFsX29wdCA9ICIiCisgICAgZm9yIG9wdCBpbiBjZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgaWYgb3B0LnN0YXJ0c3dpdGgoJy1PJyk6CisgICAgICAgICAgICBmaW5hbF9vcHQgPSBvcHQKKyAgICBpZiBmaW5hbF9vcHQgYW5kIGZpbmFsX29wdCAhPSAnLU8wJzoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlB5dGhvbiB3YXMgYnVpbHQgd2l0aCBjb21waWxlciBvcHRpbWl6YXRpb25zLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0cyBjYW4ndCByZWxpYWJseSBzdWNjZWVkIikKKworICAgIHJ1bl91bml0dGVzdChQcmV0dHlQcmludFRlc3RzLAorICAgICAgICAgICAgICAgICBQeUxpc3RUZXN0cywKKyAgICAgICAgICAgICAgICAgU3RhY2tOYXZpZ2F0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgIFB5QnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlQcmludFRlc3RzLAorICAgICAgICAgICAgICAgICBQeUxvY2Fsc1Rlc3RzCisgICAgICAgICAgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9nZGJtLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNzY2ODlmMC4uZjRiYmMzOAotLS0gYS9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZGJtLnB5CkBAIC0xLDcgKzEsNyBAQAotaW1wb3J0IGdkYm0KIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCBpbXBvcnRfbW9kdWxlCitnZGJtID0gaW1wb3J0X21vZHVsZSgnZ2RibScpCiAKIAogZmlsZW5hbWUgPSBURVNURk4KQEAgLTIzLDEwICsyMywxMCBAQAogICAgICAgICBzZWxmLmdbJzEyMzQ1Njc4OTEwJ10gPSAnMDE5MjM3NDEwOTgyMzQwOTEyODQwMTk4MjQyJwogICAgICAgICBrZXlfc2V0ID0gc2V0KHNlbGYuZy5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5X3NldCwgZnJvemVuc2V0KFsnYScsICcxMjM0NTY3ODkxMCddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuZy5oYXNfa2V5KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmcuaGFzX2tleSgnYScpKQogICAgICAgICBrZXkgPSBzZWxmLmcuZmlyc3RrZXkoKQogICAgICAgICB3aGlsZSBrZXk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oa2V5IGluIGtleV9zZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5X3NldCkKICAgICAgICAgICAgIGtleV9zZXQucmVtb3ZlKGtleSkKICAgICAgICAgICAgIGtleSA9IHNlbGYuZy5uZXh0a2V5KGtleSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5nWyd4eHgnXSkKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICBzZWxmLmdbJ3gnXSA9ICd4JyAqIDEwMDAwCiAgICAgICAgIHNpemUxID0gb3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2l6ZTAgPCBzaXplMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUwIDwgc2l6ZTEpCiAKICAgICAgICAgZGVsIHNlbGYuZ1sneCddCiAgICAgICAgICMgJ3NpemUnIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGV2ZW4gYWZ0ZXIgZGVsZXRpbmcgYW4gZW50cnkuCkBAIC03Miw3ICs3Miw3IEBACiAKICAgICAgICAgc2VsZi5nLnJlb3JnYW5pemUoKQogICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplMSA+IHNpemUyID49IHNpemUwKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQppbmRleCAzNzAyYWJjLi4xOWJmZTA3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CkBAIC05MjgsNiArOTI4LDE2IEBACiAnZicKID4+PiByZXByKGcpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogJzxnZW5lcmF0b3Igb2JqZWN0IGYgYXQgLi4uPicKKworTGFtYmRhcyBzaG91bGRuJ3QgaGF2ZSB0aGVpciB1c3VhbCByZXR1cm4gYmVoYXZpb3IuCisKKz4+PiB4ID0gbGFtYmRhOiAoeWllbGQgMSkKKz4+PiBsaXN0KHgoKSkKK1sxXQorCis+Pj4geCA9IGxhbWJkYTogKCh5aWVsZCAxKSwgKHlpZWxkIDIpKQorPj4+IGxpc3QoeCgpKQorWzEsIDJdCiAiIiIKIAogIyBjb25qb2luIGlzIGEgc2ltcGxlIGJhY2t0cmFja2luZyBnZW5lcmF0b3IsIG5hbWVkIGluIGhvbm9yIG9mIEljb24ncwpAQCAtOTUwLDExICs5NjAsMTEgQEAKICMgaXRlcmF0b3JzIGhhdmUgc2lkZS1lZmZlY3RzLCBzbyB0aGF0IHdoaWNoIHZhbHVlcyAqY2FuKiBiZSBnZW5lcmF0ZWQgYXQKICMgZWFjaCBzbG90IGRlcGVuZCBvbiB0aGUgdmFsdWVzIGl0ZXJhdGVkIGF0IHByZXZpb3VzIHNsb3RzLgogCi1kZWYgY29uam9pbihncyk6CitkZWYgc2ltcGxlX2NvbmpvaW4oZ3MpOgogCiAgICAgdmFsdWVzID0gW05vbmVdICogbGVuKGdzKQogCi0gICAgZGVmIGdlbihpLCB2YWx1ZXM9dmFsdWVzKToKKyAgICBkZWYgZ2VuKGkpOgogICAgICAgICBpZiBpID49IGxlbihncyk6CiAgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKICAgICAgICAgZWxzZToKQEAgLTk3OSw3ICs5ODksNyBAQAogICAgICMgRG8gb25lIGxvb3AgbmVzdCBhdCB0aW1lIHJlY3Vyc2l2ZWx5LCB1bnRpbCB0aGUgIyBvZiBsb29wIG5lc3RzCiAgICAgIyByZW1haW5pbmcgaXMgZGl2aXNpYmxlIGJ5IDMuCiAKLSAgICBkZWYgZ2VuKGksIHZhbHVlcz12YWx1ZXMpOgorICAgIGRlZiBnZW4oaSk6CiAgICAgICAgIGlmIGkgPj0gbjoKICAgICAgICAgICAgIHlpZWxkIHZhbHVlcwogCkBAIC05OTcsNyArMTAwNyw3IEBACiAgICAgIyByZW1haW4uICBEb24ndCBjYWxsIGRpcmVjdGx5OiAgdGhpcyBpcyBhbiBpbnRlcm5hbCBvcHRpbWl6YXRpb24gZm9yCiAgICAgIyBnZW4ncyB1c2UuCiAKLSAgICBkZWYgX2dlbjMoaSwgdmFsdWVzPXZhbHVlcyk6CisgICAgZGVmIF9nZW4zKGkpOgogICAgICAgICBhc3NlcnQgaSA8IG4gYW5kIChuLWkpICUgMyA9PSAwCiAgICAgICAgIGlwMSwgaXAyLCBpcDMgPSBpKzEsIGkrMiwgaSszCiAgICAgICAgIGcsIGcxLCBnMiA9IGdzW2kgOiBpcDNdCkBAIC0xNTU0LDcgKzE1NjQsOCBAQAogPj4+IGY9bGFtYmRhOiAoeWllbGQgMSksKHlpZWxkIDIpCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgIC4uLgotU3ludGF4RXJyb3I6ICd5aWVsZCcgb3V0c2lkZSBmdW5jdGlvbiAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIxXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIxXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiAneWllbGQnIG91dHNpZGUgZnVuY3Rpb24KIAogPj4+IGRlZiBmKCk6IHJldHVybiBsYW1iZGEgeD0oeWllbGQpOiAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CkBAIC0xNTY0LDE3ICsxNTc1LDIwIEBACiA+Pj4gZGVmIGYoKTogeCA9IHlpZWxkID0geQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAuLi4KLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIHlpZWxkIGV4cHJlc3Npb24gbm90IHBvc3NpYmxlICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjNdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjNdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8geWllbGQgZXhwcmVzc2lvbiBub3QgcG9zc2libGUKIAogPj4+IGRlZiBmKCk6ICh5aWVsZCBiYXIpID0geQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAuLi4KLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8geWllbGQgZXhwcmVzc2lvbiAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzI0XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzI0XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8geWllbGQgZXhwcmVzc2lvbgogCiA+Pj4gZGVmIGYoKTogKHlpZWxkIGJhcikgKz0geQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAuLi4KLVN5bnRheEVycm9yOiBhdWdtZW50ZWQgYXNzaWdubWVudCB0byB5aWVsZCBleHByZXNzaW9uIG5vdCBwb3NzaWJsZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzI1XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzI1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8geWllbGQgZXhwcmVzc2lvbgogCiAKIE5vdyBjaGVjayBzb21lIHRocm93KCkgY29uZGl0aW9uczoKQEAgLTE2ODYsNiArMTcwMCwxNyBAQAogPj4+IGRlbCBnCiBleGl0aW5nCiAKKz4+PiBjbGFzcyBjb250ZXh0KG9iamVjdCk6CisuLi4gICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogcGFzcworLi4uICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6IHByaW50ICdleGl0aW5nJworPj4+IGRlZiBmKCk6CisuLi4gICAgIHdpdGggY29udGV4dCgpOgorLi4uICAgICAgICAgIHlpZWxkCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZGVsIGcKK2V4aXRpbmcKKwogCiBHZW5lcmF0b3JFeGl0IGlzIG5vdCBjYXVnaHQgYnkgZXhjZXB0IEV4Y2VwdGlvbjoKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKaW5kZXggNTNjNDYwNy4uMzk3NWI1NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0xLDQxICsxLDg3IEBACisiIiIKK1Rlc3RzIGNvbW1vbiB0byBnZW5lcmljcGF0aCwgbWFjcGF0aCwgbnRwYXRoIGFuZCBwb3NpeHBhdGgKKyIiIgorCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgb3MKIGltcG9ydCBnZW5lcmljcGF0aAoraW1wb3J0IHN5cwogCi1jbGFzcyBBbGxDb21tb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBhc3NlcnRJcyhzZWxmLCBhLCBiKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaXMgYikKK2RlZiBzYWZlX3JtZGlyKGRpcm5hbWUpOgorICAgIHRyeToKKyAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEdlbmVyaWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSBwYXRoIG1vZHVsZSB0byBiZSB0ZXN0ZWQKKyAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKKyAgICBjb21tb25fYXR0cmlidXRlcyA9IFsnY29tbW9ucHJlZml4JywgJ2dldHNpemUnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRtdGltZScsICdleGlzdHMnLCAnaXNkaXInLCAnaXNmaWxlJ10KKyAgICBhdHRyaWJ1dGVzID0gW10KKworICAgIGRlZiB0ZXN0X25vX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLmNvbW1vbl9hdHRyaWJ1dGVzICsgc2VsZi5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZi5wYXRobW9kdWxlLCBhdHRyKSgpCisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsKCJ7fS57fSgpIGRpZCBub3QgcmFpc2UgYSBUeXBlRXJyb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5wYXRobW9kdWxlLl9fbmFtZV9fLCBhdHRyKSkKIAogICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKKyAgICAgICAgY29tbW9ucHJlZml4ID0gc2VsZi5wYXRobW9kdWxlLmNvbW1vbnByZWZpeAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgZ2VuZXJpY3BhdGguY29tbW9ucHJlZml4KFtdKSwKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbXSksCiAgICAgICAgICAgICAiIgogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2Vuc29uL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbnNvbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKICAgICAgICAgICAgICIvaG9tZS9zd2VuIgogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9lZ2dzIl0pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vZWdncyJdKSwKICAgICAgICAgICAgICIvaG9tZS9zd2VuLyIKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgZ2VuZXJpY3BhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW4vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCiAgICAgICAgICAgICAiL2hvbWUvc3dlbi9zcGFtIgogICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyJob21lOnN3ZW5zb246c3BhbSIsICJob21lOnN3ZW46c3BhbSJdKSwKKyAgICAgICAgICAgICJob21lOnN3ZW4iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbIjpob21lOnN3ZW46c3BhbSIsICI6aG9tZTpzd2VuOmVnZ3MiXSksCisgICAgICAgICAgICAiOmhvbWU6c3dlbjoiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbIjpob21lOnN3ZW46c3BhbSIsICI6aG9tZTpzd2VuOnNwYW0iXSksCisgICAgICAgICAgICAiOmhvbWU6c3dlbjpzcGFtIgorICAgICAgICApCisKKyAgICAgICAgdGVzdGxpc3QgPSBbJycsICdhYmMnLCAnWGJjZCcsICdYYicsICdYWScsICdhYmNkJywKKyAgICAgICAgICAgICAgICAgICAgJ2FYYycsICdhYmQnLCAnYWInLCAnYVgnLCAnYWJjWCddCisgICAgICAgIGZvciBzMSBpbiB0ZXN0bGlzdDoKKyAgICAgICAgICAgIGZvciBzMiBpbiB0ZXN0bGlzdDoKKyAgICAgICAgICAgICAgICBwID0gY29tbW9ucHJlZml4KFtzMSwgczJdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMS5zdGFydHN3aXRoKHApKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMi5zdGFydHN3aXRoKHApKQorICAgICAgICAgICAgICAgIGlmIHMxICE9IHMyOgorICAgICAgICAgICAgICAgICAgICBuID0gbGVuKHApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoczFbbjpuKzFdLCBzMltuOm4rMV0pCiAKICAgICBkZWYgdGVzdF9nZXRzaXplKHNlbGYpOgogICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLndyaXRlKCJmb28iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyaWNwYXRoLmdldHNpemUodGVzdF9zdXBwb3J0LlRFU1RGTiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGF0aG1vZHVsZS5nZXRzaXplKHRlc3Rfc3VwcG9ydC5URVNURk4pLCAzKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF90aW1lKHNlbGYpOgogICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQpAQCAtNTAsMTM1ICs5NiwxNjEgQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAiZm9vYmFyIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAotICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLmdldGN0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pIDw9Ci0gICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguZ2V0bXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKAorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5nZXRjdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuZ2V0bXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgICkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucGF0aG1vZHVsZSA9PSBnZW5lcmljcGF0aDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5sZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2VuZXJpY3BhdGguZXhpc3RzKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfaXNkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQogICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2VuZXJpY3BhdGguaXNkaXIpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzYWZlX3JtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9pc2ZpbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5lcmljcGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQogICAgICAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2FmZV9ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2VuZXJpY3BhdGguaXNkaXIpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6Ci0gICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguc2FtZWZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICBUcnVlCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCBkb2Vzbid0IHJldHVybiByZXNvbmFibGUKLSAgICAgICAgICAgICAgICAjIGlub2RlIGluZm9ybWF0aW9uIGFuZCB0aHVzLCB0aGF0IHNhbWVmaWxlKCkgZG9lc24ndCB3b3JrCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKLSAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLnNhbWVmaWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFRydWUKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIikKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljcGF0aC5zYW1lZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAgICBGYWxzZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIikKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKKyMgRm9sbG93aW5nIFRlc3RDYXNlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBydW4gZnJvbSB0ZXN0X2dlbmVyaWNwYXRoLgorIyBJdCBpcyBpbmhlcml0ZWQgYnkgb3RoZXIgdGVzdCBtb2R1bGVzIChtYWNwYXRoLCBudHBhdGgsIHBvc2l4cGF0aCkuCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2VuZXJpY3BhdGguc2FtZWZpbGUpCitjbGFzcyBDb21tb25UZXN0KEdlbmVyaWNUZXN0KToKKyAgICAjIFRoZSBwYXRoIG1vZHVsZSB0byBiZSB0ZXN0ZWQKKyAgICBwYXRobW9kdWxlID0gTm9uZQorICAgIGNvbW1vbl9hdHRyaWJ1dGVzID0gR2VuZXJpY1Rlc3QuY29tbW9uX2F0dHJpYnV0ZXMgKyBbCisgICAgICAgICMgUHJvcGVydGllcworICAgICAgICAnY3VyZGlyJywgJ3BhcmRpcicsICdleHRzZXAnLCAnc2VwJywKKyAgICAgICAgJ3BhdGhzZXAnLCAnZGVmcGF0aCcsICdhbHRzZXAnLCAnZGV2bnVsbCcsCisgICAgICAgICMgTWV0aG9kcworICAgICAgICAnbm9ybWNhc2UnLCAnc3BsaXRkcml2ZScsICdleHBhbmR2YXJzJywgJ25vcm1wYXRoJywgJ2Fic3BhdGgnLAorICAgICAgICAnam9pbicsICdzcGxpdCcsICdzcGxpdGV4dCcsICdpc2FicycsICdiYXNlbmFtZScsICdkaXJuYW1lJywKKyAgICAgICAgJ2xleGlzdHMnLCAnaXNsaW5rJywgJ2lzbW91bnQnLCAnZXhwYW5kdXNlcicsICdub3JtcGF0aCcsICdyZWFscGF0aCcsCisgICAgXQorCisgICAgZGVmIHRlc3Rfbm9ybWNhc2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBub3JtY2FzZSgpIGlzIGlkZW1wb3RlbnQKKyAgICAgICAgcCA9ICJGb08vLi9CYVIiCisgICAgICAgIHAgPSBzZWxmLnBhdGhtb2R1bGUubm9ybWNhc2UocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBzZWxmLnBhdGhtb2R1bGUubm9ybWNhc2UocCkpCisKKyAgICBkZWYgdGVzdF9zcGxpdGRyaXZlKHNlbGYpOgorICAgICAgICAjIHNwbGl0ZHJpdmUgZm9yIG5vbi1OVCBwYXRocworICAgICAgICBzcGxpdGRyaXZlID0gc2VsZi5wYXRobW9kdWxlLnNwbGl0ZHJpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCIvZm9vL2JhciIpLCAoIiIsICIvZm9vL2JhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoImZvbzpiYXIiKSwgKCIiLCAiZm9vOmJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoIjpmb286YmFyIiksICgiIiwgIjpmb286YmFyIikpCisKKyAgICBkZWYgdGVzdF9leHBhbmR2YXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhdGhtb2R1bGUuX19uYW1lX18gPT0gJ21hY3BhdGgnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbWFjcGF0aC5leHBhbmR2YXJzIGlzIGEgc3R1YicpCisgICAgICAgIGV4cGFuZHZhcnMgPSBzZWxmLnBhdGhtb2R1bGUuZXhwYW5kdmFycworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIGVudlsiZm9vIl0gPSAiYmFyIgorICAgICAgICAgICAgZW52WyJ7Zm9vIl0gPSAiYmF6MSIKKyAgICAgICAgICAgIGVudlsie2Zvb30iXSA9ICJiYXoyIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCJmb28iKSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRmb28gYmFyIiksICJiYXIgYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHtmb299YmFyIiksICJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkW2Zvb11iYXIiKSwgIiRbZm9vXWJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRiYXIgYmFyIiksICIkYmFyIGJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiQ/YmFyIiksICIkP2JhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGZvb31iYXIiKSwgImJhcn1iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke2ZvbyIpLCAiJHtmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke3tmb299fSIpLCAiYmF6MX0iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkZm9vJGZvbyIpLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGJhciRiYXIiKSwgIiRiYXIkYmFyIikKKworICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIHNlbGYucGF0aG1vZHVsZS5hYnNwYXRoKCJmb28iKSkKKworICAgICAgICAjIEFic3BhdGggcmV0dXJucyBieXRlcyB3aGVuIHRoZSBhcmcgaXMgYnl0ZXMKKyAgICAgICAgZm9yIHBhdGggaW4gKCcnLCAnZm9vJywgJ2ZceGYyXHhmMicsICcvZm9vJywgJ0M6XFwnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aChwYXRoKSwgc3RyKQorCisgICAgZGVmIHRlc3RfcmVhbHBhdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIHNlbGYucGF0aG1vZHVsZS5yZWFscGF0aCgiZm9vIikpCisKKyAgICBkZWYgdGVzdF9ub3JtcGF0aF9pc3N1ZTU4Mjcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlCisgICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnLicsIHUnLycsIHUnXFwnLCB1Jy8vL2Zvby8uLy9iYXIvLycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGF0aG1vZHVsZS5ub3JtcGF0aChwYXRoKSwgdW5pY29kZSkKKworICAgIGRlZiB0ZXN0X2Fic3BhdGhfaXNzdWUzNDI2KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgYWJzcGF0aCByZXR1cm5zIHVuaWNvZGUgd2hlbiB0aGUgYXJnIGlzIHVuaWNvZGUKKyAgICAgICAgIyB3aXRoIGJvdGggQVNDSUkgYW5kIG5vbi1BU0NJSSBjd2RzLgorICAgICAgICBhYnNwYXRoID0gc2VsZi5wYXRobW9kdWxlLmFic3BhdGgKKyAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdSdmdXUnLCB1J2ZceGY5XHhmOScsIHUnL2Z1dScsIHUnVTpcXCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFic3BhdGgocGF0aCksIHVuaWNvZGUpCisKKyAgICAgICAgdW5pY3dkID0gdSdceGU3d1x4ZjAnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZzZW5jb2RpbmcgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOX0VOQ09ESU5HIG9yICJhc2NpaSIKKyAgICAgICAgICAgIHVuaWN3ZC5lbmNvZGUoZnNlbmNvZGluZykKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVW5pY29kZUVuY29kZUVycm9yKToKKyAgICAgICAgICAgICMgRlMgZW5jb2RpbmcgaXMgcHJvYmFibHkgQVNDSUkKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRlbXBfY3dkKHVuaWN3ZCk6CisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdSdmdXUnLCB1J2ZceGY5XHhmOScsIHUnL2Z1dScsIHUnVTpcXCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWJzcGF0aChwYXRoKSwgdW5pY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLAorICAgICAgICAiTWFjIE9TIFggZGVuaWVzIHRoZSBjcmVhdGlvbiBvZiBhIGRpcmVjdG9yeSB3aXRoIGFuIGludmFsaWQgdXRmOCBuYW1lIikKKyAgICBkZWYgdGVzdF9ub25hc2NpaV9hYnNwYXRoKHNlbGYpOgorICAgICAgICAjIFRlc3Qgbm9uLUFTQ0lJLCBub24tVVRGOCBieXRlcyBpbiB0aGUgcGF0aC4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudGVtcF9jd2QoJ1x4ZTd3XHhmMCcpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2Fic3BhdGgoKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbENvbW1vblRlc3QpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmljVGVzdCkKKwogCiBpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CmluZGV4IGE4NmYxMmYuLjNkODk2YTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKQEAgLTEzNywxMiArMTM3LDE0IEBACiAgICAgPj4+ICh5IGZvciB5IGluICgxLDIpKSA9IDEwCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24gKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQwXT4sIGxpbmUgMSkKKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQwXT4iLCBsaW5lIDEKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCiAKICAgICA+Pj4gKHkgZm9yIHkgaW4gKDEsMikpICs9IDEwCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiBhdWdtZW50ZWQgYXNzaWdubWVudCB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbiBub3QgcG9zc2libGUgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQxXT4sIGxpbmUgMSkKKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQxXT4iLCBsaW5lIDEKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCiAKIAogIyMjIyMjIyMjIyMgVGVzdHMgYm9ycm93ZWQgZnJvbSBvciBpbnNwaXJlZCBieSB0ZXN0X2dlbmVyYXRvcnMucHkgIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MucHkKaW5kZXggZTJjMzZkZC4uNGFjNWFhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRhcmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJncy5weQpAQCAtMjEsOSArMjEsNiBAQAogICAgICMgdGhpcyB0ZXN0IHdpbGwgZmFpbCBiZWNhdXNlIGl0IGRvZXMgbm90IHRlc3QgdGhlIHJpZ2h0IHBhcnQgb2YgdGhlCiAgICAgIyBQeUFyZ19QYXJzZVR1cGxlKCkgaW1wbGVtZW50YXRpb24uCiAgICAgZGVmIHRlc3Rfd2l0aF9tYXJzaGFsKHNlbGYpOgotICAgICAgICBpZiBub3QgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGFyZyA9IHVuaWNvZGUocidcMjIyJywgJ3VuaWNvZGUtZXNjYXBlJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBhcmcpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IDliOTBhNjkuLmQwNjI5NmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMSwxNiArMSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcwotCiBpbXBvcnQgd2FybmluZ3MKLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPV9fbmFtZV9fKQotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9InVuaXR0ZXN0IikKIAogIiIiCiA+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgpAQCAtNDgsNyArMzksOCBAQAogVkVSWV9MQVJHRSA9IDB4RkYwMDAwMTIxMjEyMTIxMjEyMTIxMjQyTAogCiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgVUNIQVJfTUFYLCBVU0hSVF9NQVgsIFVJTlRfTUFYLCBVTE9OR19NQVgsIElOVF9NQVgsIFwKLSAgICAgSU5UX01JTiwgTE9OR19NSU4sIExPTkdfTUFYLCBQWV9TU0laRV9UX01JTiwgUFlfU1NJWkVfVF9NQVgKKyAgICAgSU5UX01JTiwgTE9OR19NSU4sIExPTkdfTUFYLCBQWV9TU0laRV9UX01JTiwgUFlfU1NJWkVfVF9NQVgsIFwKKyAgICAgU0hSVF9NSU4sIFNIUlRfTUFYCiAKICMgZmFrZSwgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gUHl0aG9uJ3MgaGVhZGVyIGZpbGVzCiBMTE9OR19NQVggPSAyKio2My0xCkBAIC02Nyw2OSArNTksNjkgQEAKICAgICBkZWYgdGVzdF9iKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19iCiAgICAgICAgICMgYiByZXR1cm5zICd1bnNpZ25lZCBjaGFyJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKDAgLi4uIFVDSEFSX01BWCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19iKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19iKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2IoSW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfYiwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfYihJbnQoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCAtMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19iKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfYihVQ0hBUl9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfYihVQ0hBUl9NQVgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIFVDSEFSX01BWCArIDEpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfYig0MikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX2IoNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19iKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19iKDQyTCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfYiwgVkVSWV9MQVJHRSkKIAogICAgIGRlZiB0ZXN0X0Ioc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0IKICAgICAgICAgIyBCIHJldHVybnMgJ3Vuc2lnbmVkIGNoYXInLCBubyByYW5nZSBjaGVja2luZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX0IoMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0IoTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfQihJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19CLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0IoTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19CKEludCgpKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQigtMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xTCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfQigwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoVUNIQVJfTUFYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19CKFVDSEFSX01BWCsxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVgsIGdldGFyZ3NfQigtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTFMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoVUNIQVJfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoVUNIQVJfTUFYKzEpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0IoNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19CKDQyTCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVDSEFSX01BWCAmIFZFUllfTEFSR0UsIGdldGFyZ3NfQihWRVJZX0xBUkdFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19CKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19CKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYICYgVkVSWV9MQVJHRSwgZ2V0YXJnc19CKFZFUllfTEFSR0UpKQogCiAgICAgZGVmIHRlc3RfSChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSAogICAgICAgICAjIEggcmV0dXJucyAndW5zaWduZWQgc2hvcnQnLCBubyByYW5nZSBjaGVja2luZwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgzLCBnZXRhcmdzX0goMy4xNCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0goTG9uZygpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoOTksIGdldGFyZ3NfSChJbnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ILCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0goTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19IKEludCgpKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSCgtMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfSCgwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVVNIUlRfTUFYLCBnZXRhcmdzX0goVVNIUlRfTUFYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19IKFVTSFJUX01BWCsxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKFVTSFJUX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKFVTSFJUX01BWCsxKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19IKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfSCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0goNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0goNDJMKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChWRVJZX0xBUkdFICYgVVNIUlRfTUFYLCBnZXRhcmdzX0goVkVSWV9MQVJHRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVTSFJUX01BWCwgZ2V0YXJnc19IKFZFUllfTEFSR0UpKQogCiAgICAgZGVmIHRlc3RfSShzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSQogICAgICAgICAjIEkgcmV0dXJucyAndW5zaWduZWQgaW50Jywgbm8gcmFuZ2UgY2hlY2tpbmcKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19JKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19JKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19JKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSShJbnQoKSkpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSSgtMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfSSgwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSShVSU5UX01BWCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfSShVSU5UX01BWCsxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0koMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSShVSU5UX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKFVJTlRfTUFYKzEpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0koNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19JKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSSg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSSg0MkwpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFZFUllfTEFSR0UgJiBVSU5UX01BWCwgZ2V0YXJnc19JKFZFUllfTEFSR0UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZFUllfTEFSR0UgJiBVSU5UX01BWCwgZ2V0YXJnc19JKFZFUllfTEFSR0UpKQogCiAgICAgZGVmIHRlc3RfayhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfawpAQCAtMTM5LDgzICsxMzEsMTE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19rLCBMb25nKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19rLCBJbnQoKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChVTE9OR19NQVgsIGdldGFyZ3NfaygtMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDAsIGdldGFyZ3NfaygwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoVUxPTkdfTUFYLCBnZXRhcmdzX2soVUxPTkdfTUFYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19rKFVMT05HX01BWCsxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVTE9OR19NQVgsIGdldGFyZ3NfaygtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19rKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMT05HX01BWCwgZ2V0YXJnc19rKFVMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19rKFVMT05HX01BWCsxKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19rKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3Nfayg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2soNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2soNDJMKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChWRVJZX0xBUkdFICYgVUxPTkdfTUFYLCBnZXRhcmdzX2soVkVSWV9MQVJHRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVMT05HX01BWCwgZ2V0YXJnc19rKFZFUllfTEFSR0UpKQogCiBjbGFzcyBTaWduZWRfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2gKKyAgICAgICAgIyBoIHJldHVybnMgJ3Nob3J0JywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKFNIUlRfTUlOIC4uLiBTSFJUX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2gsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaChMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgU0hSVF9NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTSFJUX01JTiwgZ2V0YXJnc19oKFNIUlRfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTSFJUX01BWCwgZ2V0YXJnc19oKFNIUlRfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01BWCsxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFZFUllfTEFSR0UpCisKICAgICBkZWYgdGVzdF9pKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19pCiAgICAgICAgICMgaSByZXR1cm5zICdpbnQnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoSU5UX01JTiAuLi4gSU5UX01BWCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19pKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19pKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2koSW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19pKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShJbnQoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBJTlRfTUlOLTEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKElOVF9NSU4sIGdldGFyZ3NfaShJTlRfTUlOKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoSU5UX01BWCwgZ2V0YXJnc19pKElOVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKElOVF9NSU4sIGdldGFyZ3NfaShJTlRfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJTlRfTUFYLCBnZXRhcmdzX2koSU5UX01BWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaSwgSU5UX01BWCsxKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX2koNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19pKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaSg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfaSg0MkwpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIFZFUllfTEFSR0UpCiAKICAgICBkZWYgdGVzdF9sKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19sCiAgICAgICAgICMgbCByZXR1cm5zICdsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExPTkdfTUlOIC4uLiBMT05HX01BWCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19sKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19sKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX2woSW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfbCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19sKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfbChJbnQoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01JTi0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChMT05HX01JTiwgZ2V0YXJnc19sKExPTkdfTUlOKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoTE9OR19NQVgsIGdldGFyZ3NfbChMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTE9OR19NSU4sIGdldGFyZ3NfbChMT05HX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTE9OR19NQVgsIGdldGFyZ3NfbChMT05HX01BWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbCwgTE9OR19NQVgrMSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19sKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfbCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2woNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2woNDJMKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBWRVJZX0xBUkdFKQogCiAgICAgZGVmIHRlc3RfbihzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfbgogICAgICAgICAjIG4gcmV0dXJucyAnUHlfc3NpemVfdCcsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nCiAgICAgICAgICMgKFBZX1NTSVpFX1RfTUlOIC4uLiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19uKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19uKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX24oSW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfbiwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19uKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfbihJbnQoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01JTi0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChQWV9TU0laRV9UX01JTiwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUlOKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoUFlfU1NJWkVfVF9NQVgsIGdldGFyZ3NfbihQWV9TU0laRV9UX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUFlfU1NJWkVfVF9NSU4sIGdldGFyZ3NfbihQWV9TU0laRV9UX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUFlfU1NJWkVfVF9NQVgsIGdldGFyZ3NfbihQWV9TU0laRV9UX01BWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgUFlfU1NJWkVfVF9NQVgrMSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19uKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3Nfbig0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX24oNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX24oNDJMKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBWRVJZX0xBUkdFKQogCiAKIGNsYXNzIExvbmdMb25nX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9MKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MCi0gICAgICAgICMgTCByZXR1cm5zICdsb25nIGxvbmcnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoTExPTkdfTUlOIC4uLiBMTE9OR19NQVgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfTCwgIkhlbGxvIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgZ2V0YXJnc19MKDMuMTQpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg5OSwgZ2V0YXJnc19MKExvbmcoKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQorICAgICAgICAjIEwgcmV0dXJucyAnbG9uZyBsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExMT05HX01JTgorICAgICAgICAjIC4uLiBMTE9OR19NQVgpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKAorICAgICAgICAgICAgICAgICJpZ25vcmUiLAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCisgICAgICAgICAgICAgICAgbW9kdWxlPV9fbmFtZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBnZXRhcmdzX0woMy4xNCkpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKAorICAgICAgICAgICAgICAgICJlcnJvciIsCisgICAgICAgICAgICAgICAgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9Ii4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKKyAgICAgICAgICAgICAgICBtb2R1bGU9InVuaXR0ZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZywgZ2V0YXJnc19MLCAzLjE0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19MLCAiSGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19MKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX0wsIExMT05HX01JTi0xKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChMTE9OR19NSU4sIGdldGFyZ3NfTChMTE9OR19NSU4pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChMTE9OR19NQVgsIGdldGFyZ3NfTChMTE9OR19NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExMT05HX01JTiwgZ2V0YXJnc19MKExMT05HX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTExPTkdfTUFYLCBnZXRhcmdzX0woTExPTkdfTUFYKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NQVgrMSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19MKDQyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoNDIsIGdldGFyZ3NfTCg0MkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0woNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0woNDJMKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBWRVJZX0xBUkdFKQogCiAgICAgZGVmIHRlc3RfSyhzZWxmKToKQEAgLTIyNCwxNCArMjQ3LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCAzLjE0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSywgTG9uZygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSywgSW50KCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFVMTE9OR19NQVgsIGdldGFyZ3NfSyhVTExPTkdfTUFYKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMCwgZ2V0YXJnc19LKDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCgwLCBnZXRhcmdzX0soVUxMT05HX01BWCsxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVTExPTkdfTUFYLCBnZXRhcmdzX0soVUxMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19LKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSyhVTExPTkdfTUFYKzEpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDQyLCBnZXRhcmdzX0soNDIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCg0MiwgZ2V0YXJnc19LKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MkwpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKFZFUllfTEFSR0UgJiBVTExPTkdfTUFYLCBnZXRhcmdzX0soVkVSWV9MQVJHRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVMTE9OR19NQVgsIGdldGFyZ3NfSyhWRVJZX0xBUkdFKSkKIAogCiBjbGFzcyBUdXBsZV9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMzksNyArMjYyLDcgQEAKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfdHVwbGUKIAogICAgICAgICByZXQgPSBnZXRhcmdzX3R1cGxlKDEsICgyLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmV0LCAoMSwyLDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgKDEsMiwzKSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSBpbnZhbGlkIHR1cGxlIGFyZ3VtZW50cyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkKICAgICAgICAgY2xhc3Mgc2VxOgpAQCAtMjUyLDI1ICsyNzUsMjUgQEAKIGNsYXNzIEtleXdvcmRzX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9wb3NpdGlvbmFsX2FyZ3Moc2VsZik6CiAgICAgICAgICMgdXNpbmcgYWxsIHBvc2l0aW9uYWwgYXJncwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoKDEsMiksIDMsICg0LCg1LDYpKSwgKDcsOCw5KSwgMTApLAogICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQogICAgICAgICAgICAgKQogICAgIGRlZiB0ZXN0X21peGVkX2FyZ3Moc2VsZik6CiAgICAgICAgICMgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwgMywgKDQsKDUsNikpLCBhcmc0PSg3LDgsOSksIGFyZzU9MTApLAogICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQogICAgICAgICAgICAgKQogICAgIGRlZiB0ZXN0X2tleXdvcmRfYXJncyhzZWxmKToKICAgICAgICAgIyBhbGwga2V5d29yZHMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKGFyZzE9KDEsMiksIGFyZzI9MywgYXJnMz0oNCwoNSw2KSksIGFyZzQ9KDcsOCw5KSwgYXJnNT0xMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCiAgICAgICAgICAgICApCiAgICAgZGVmIHRlc3Rfb3B0aW9uYWxfYXJncyhzZWxmKToKICAgICAgICAgIyBtaXNzaW5nIG9wdGlvbmFsIGtleXdvcmQgYXJncywgc2tpcHBpbmcgdHVwbGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpLCBhcmcyPTMsIGFyZzU9MTApLAogICAgICAgICAgICAgKDEsIDIsIDMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEwKQogICAgICAgICAgICAgKQpAQCAtMjc5LDE0ICszMDIsMTQgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZXJyKSwgIlJlcXVpcmVkIGFyZ3VtZW50ICdhcmcyJyAocG9zIDIpIG5vdCBmb3VuZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiUmVxdWlyZWQgYXJndW1lbnQgJ2FyZzInIChwb3MgMikgbm90IGZvdW5kIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKICAgICBkZWYgdGVzdF90b29fbWFueV9hcmdzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLDMsKDQsKDUsNikpLCg3LDgsOSksMTAsMTExKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZXJyKSwgImZ1bmN0aW9uIHRha2VzIGF0IG1vc3QgNSBhcmd1bWVudHMgKDYgZ2l2ZW4pIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJmdW5jdGlvbiB0YWtlcyBhdCBtb3N0IDUgYXJndW1lbnRzICg2IGdpdmVuKSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ1R5cGVFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCcpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9rZXl3b3JkKHNlbGYpOgpAQCAtMjk0LDcgKzMxNyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoKDEsMiksMyxhcmc1PTEwLGFyZzY2Nj02NjYpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlcnIpLCAiJ2FyZzY2NicgaXMgYW4gaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50IGZvciB0aGlzIGZ1bmN0aW9uIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICInYXJnNjY2JyBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgZm9yIHRoaXMgZnVuY3Rpb24iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdUeXBlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQnKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldG9wdC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5CmluZGV4IDQ5NjczODguLmY5MjQyODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5CkBAIC0xLDQ1ICsxLDQyIEBACiAjIHRlc3RfZ2V0b3B0LnB5CiAjIERhdmlkIEdvb2RnZXIgPGRnb29kZ2VyQGJpZ2Zvb3QuY29tPiAyMDAwLTA4LTE5CiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl9kb2N0ZXN0LCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl9kb2N0ZXN0LCBydW5fdW5pdHRlc3QsIEVudmlyb25tZW50VmFyR3VhcmQKIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgb3MKIAogc2VudGluZWwgPSBvYmplY3QoKQogCiBjbGFzcyBHZXRvcHRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLm9sZF9wb3NpeGx5X2NvcnJlY3QgPSBvcy5lbnZpcm9uLmdldCgiUE9TSVhMWV9DT1JSRUNUIiwgc2VudGluZWwpCi0gICAgICAgIGlmIHNlbGYub2xkX3Bvc2l4bHlfY29ycmVjdCBpcyBub3Qgc2VudGluZWw6Ci0gICAgICAgICAgICBkZWwgb3MuZW52aXJvblsiUE9TSVhMWV9DT1JSRUNUIl0KKyAgICAgICAgc2VsZi5lbnYgPSBFbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgaWYgIlBPU0lYTFlfQ09SUkVDVCIgaW4gc2VsZi5lbnY6CisgICAgICAgICAgICBkZWwgc2VsZi5lbnZbIlBPU0lYTFlfQ09SUkVDVCJdCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYub2xkX3Bvc2l4bHlfY29ycmVjdCBpcyBzZW50aW5lbDoKLSAgICAgICAgICAgIG9zLmVudmlyb24ucG9wKCJQT1NJWExZX0NPUlJFQ1QiLCBOb25lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3MuZW52aXJvblsiUE9TSVhMWV9DT1JSRUNUIl0gPSBzZWxmLm9sZF9wb3NpeGx5X2NvcnJlY3QKKyAgICAgICAgc2VsZi5lbnYuX19leGl0X18oKQorICAgICAgICBkZWwgc2VsZi5lbnYKIAogICAgIGRlZiBhc3NlcnRFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhnZXRvcHQuR2V0b3B0RXJyb3IsICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X3Nob3J0X2hhc19hcmcoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhnZXRvcHQuc2hvcnRfaGFzX2FyZygnYScsICdhOicpKQotICAgICAgICBzZWxmLmZhaWxJZihnZXRvcHQuc2hvcnRfaGFzX2FyZygnYScsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRvcHQuc2hvcnRfaGFzX2FyZygnYScsICdhOicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2EnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQuc2hvcnRfaGFzX2FyZywgJ2EnLCAnYicpCiAKICAgICBkZWYgdGVzdF9sb25nX2hhc19hcmdzKHNlbGYpOgogICAgICAgICBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmM9J10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNfYXJnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzX2FyZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24sICdhYmMnKQogCiAgICAgICAgIGhhc19hcmcsIG9wdGlvbiA9IGdldG9wdC5sb25nX2hhc19hcmdzKCdhYmMnLCBbJ2FiYyddKQotICAgICAgICBzZWxmLmZhaWxJZihoYXNfYXJnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19hcmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLCAnYWJjJykKIAogICAgICAgICBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmNkJ10pCi0gICAgICAgIHNlbGYuZmFpbElmKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzX2FyZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24sICdhYmNkJykKIAogICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5sb25nX2hhc19hcmdzLCAnYWJjJywgWydkZWYnXSkKQEAgLTEyNCwxMyArMTIxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyksICgnLWInLCAnMScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy0tYWxwaGEnLCAnJyksICgnLS1iZXRhJywgJzInKV0pCiAKKyAgICAgICAgIyByZWNvZ25pemUgIi0iIGFzIGFuIGFyZ3VtZW50CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ251X2dldG9wdChbJy1hJywgJy0nLCAnLWInLCAnLSddLCAnYWI6JywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWyctJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyksICgnLWInLCAnLScpXSkKKwogICAgICAgICAjIFBvc2l4IHN0eWxlIHZpYSArCiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ251X2dldG9wdChjbWRsaW5lLCAnK2FiOicsIFsnYWxwaGEnLCAnYmV0YT0nXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddKQogCiAgICAgICAgICMgUG9zaXggc3R5bGUgdmlhIFBPU0lYTFlfQ09SUkVDVAotICAgICAgICBvcy5lbnZpcm9uWyJQT1NJWExZX0NPUlJFQ1QiXSA9ICIxIgorICAgICAgICBzZWxmLmVudlsiUE9TSVhMWV9DT1JSRUNUIl0gPSAiMSIKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICdhYjonLCBbJ2FscGhhJywgJ2JldGE9J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnYXJnMScsICctYicsICcxJywgJy0tYWxwaGEnLCAnLS1iZXRhPTInXSkKQEAgLTE3Myw5ICsxNzUsOSBAQAogCiAgICAgZGVmIHRlc3RfaXNzdWU0NjI5KHNlbGYpOgogICAgICAgICBsb25nb3B0cywgc2hvcnRvcHRzID0gZ2V0b3B0LmdldG9wdChbJy0taGVscD0nXSwgJycsIFsnaGVscD0nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9uZ29wdHMsIFsoJy0taGVscCcsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZ29wdHMsIFsoJy0taGVscCcsICcnKV0pCiAgICAgICAgIGxvbmdvcHRzLCBzaG9ydG9wdHMgPSBnZXRvcHQuZ2V0b3B0KFsnLS1oZWxwPXgnXSwgJycsIFsnaGVscD0nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9uZ29wdHMsIFsoJy0taGVscCcsICd4JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmdvcHRzLCBbKCctLWhlbHAnLCAneCcpXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZ2V0b3B0LkdldG9wdEVycm9yLCBnZXRvcHQuZ2V0b3B0LCBbJy0taGVscD0nXSwgJycsIFsnaGVscCddKQogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkgYi9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKaW5kZXggYWI2YmM5YS4uZjAzNjk1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQpAQCAtNTgsMjkgKzU4LDI2IEBACiBNT0ZJTEUgPSBvcy5wYXRoLmpvaW4oTE9DQUxFRElSLCAnZ2V0dGV4dC5tbycpCiBVTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ3VnZXR0ZXh0Lm1vJykKIE1NT0ZJTEUgPSBvcy5wYXRoLmpvaW4oTE9DQUxFRElSLCAnbWV0YWRhdGEubW8nKQotdHJ5OgotICAgIExBTkcgPSBvcy5lbnZpcm9uWydMQU5HVUFHRSddCi1leGNlcHQ6Ci0gICAgTEFORyA9ICdlbicKIAogCiBjbGFzcyBHZXR0ZXh0QmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoTE9DQUxFRElSKToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKExPQ0FMRURJUikKLSAgICAgICAgZnAgPSBvcGVuKE1PRklMRSwgJ3diJykKLSAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhHTlVfTU9fREFUQSkpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZnAgPSBvcGVuKFVNT0ZJTEUsICd3YicpCi0gICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoVU1PX0RBVEEpKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIGZwID0gb3BlbihNTU9GSUxFLCAnd2InKQotICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKE1NT19EQVRBKSkKLSAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBvcy5lbnZpcm9uWydMQU5HVUFHRSddID0gJ3h4JworICAgICAgICB3aXRoIG9wZW4oTU9GSUxFLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoR05VX01PX0RBVEEpKQorICAgICAgICB3aXRoIG9wZW4oVU1PRklMRSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKFVNT19EQVRBKSkKKyAgICAgICAgd2l0aCBvcGVuKE1NT0ZJTEUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhNTU9fREFUQSkpCisKKyAgICAgICAgc2VsZi5lbnYgPSB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIHNlbGYuZW52WydMQU5HVUFHRSddID0gJ3h4JworICAgICAgICBnZXR0ZXh0Ll90cmFuc2xhdGlvbnMuY2xlYXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5lbnZpcm9uWydMQU5HVUFHRSddID0gTEFORworICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCisgICAgICAgIGRlbCBzZWxmLmVudgogICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguc3BsaXQoTE9DQUxFRElSKVswXSkKIAogCkBAIC0xMzYsOSArMTMzLDggQEAKICAgICBkZWYgdGVzdF90aGVfYWx0ZXJuYXRpdmVfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyB0ZXN0IHRoZSBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UKLSAgICAgICAgZnAgPSBvcGVuKHNlbGYubW9maWxlLCAncmInKQotICAgICAgICB0ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubW9maWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKICAgICAgICAgIyBJbnN0YWxsIHRoZSB0cmFuc2xhdGlvbiBvYmplY3QKICAgICAgICAgdC5pbnN0YWxsKCkKICAgICAgICAgZXEoXygnbnVkZ2UgbnVkZ2UnKSwgJ3dpbmsgd2luaycpCkBAIC0yMjgsOSArMjI0LDggQEAKIAogICAgIGRlZiB0ZXN0X3BsdXJhbF9mb3JtczIoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBmcCA9IG9wZW4oc2VsZi5tb2ZpbGUsICdyYicpCi0gICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5tb2ZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgdCA9IGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQogICAgICAgICB4ID0gdC5uZ2V0dGV4dCgnVGhlcmUgaXMgJXMgZmlsZScsICdUaGVyZSBhcmUgJXMgZmlsZXMnLCAxKQogICAgICAgICBlcSh4LCAnSGF5ICVzIGZpY2hlcm8nKQogICAgICAgICB4ID0gdC5uZ2V0dGV4dCgnVGhlcmUgaXMgJXMgZmlsZScsICdUaGVyZSBhcmUgJXMgZmlsZXMnLCAyKQpAQCAtMzAwLDE1ICsyOTUsMTIgQEAKIGNsYXNzIFVuaWNvZGVUcmFuc2xhdGlvbnNUZXN0KEdldHRleHRCYXNlVGVzdCk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBHZXR0ZXh0QmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgZnAgPSBvcGVuKFVNT0ZJTEUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKFVNT0ZJTEUsICdyYicpIGFzIGZwOgogICAgICAgICAgICAgc2VsZi50ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuXyA9IHNlbGYudC51Z2V0dGV4dAogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9tc2dpZChzZWxmKToKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShzZWxmLl8oJycpLCB1bmljb2RlKSkKICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc2VsZi5fKHUnJyksIHVuaWNvZGUpKQogCkBAIC0zMjAsMTUgKzMxMiwxMiBAQAogY2xhc3MgV2VpcmRNZXRhZGF0YVRlc3QoR2V0dGV4dEJhc2VUZXN0KToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEdldHRleHRCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBmcCA9IG9wZW4oTU1PRklMRSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oTU1PRklMRSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi50ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dlaXJkX21ldGFkYXRhKHNlbGYpOgogICAgICAgICBpbmZvID0gc2VsZi50LmluZm8oKQpAQCAtMzM2LDYgKzMyNSwzNyBAQAogICAgICAgICAgICAnSm9obiBEb2UgPGpkb2VAZXhhbXBsZS5jb20+XG5KYW5lIEZvb2JhciA8amZvb2JhckBleGFtcGxlLmNvbT4nKQogCiAKK2NsYXNzIER1bW15R05VVHJhbnNsYXRpb25zKGdldHRleHQuR05VVHJhbnNsYXRpb25zKToKKyAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICByZXR1cm4gJ2ZvbycKKworCitjbGFzcyBHZXR0ZXh0Q2FjaGVUZXN0Q2FzZShHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgorICAgICAgICBzZWxmLmxvY2FsZWRpciA9IG9zLmN1cmRpcgorICAgICAgICBzZWxmLm1vZmlsZSA9IE1PRklMRQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDApCisKKyAgICAgICAgdCA9IGdldHRleHQudHJhbnNsYXRpb24oJ2dldHRleHQnLCBzZWxmLmxvY2FsZWRpcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZXR0ZXh0Ll90cmFuc2xhdGlvbnMpLCAxKQorCisgICAgICAgIHQgPSBnZXR0ZXh0LnRyYW5zbGF0aW9uKCdnZXR0ZXh0Jywgc2VsZi5sb2NhbGVkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzXz1EdW1teUdOVVRyYW5zbGF0aW9ucykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZXR0ZXh0Ll90cmFuc2xhdGlvbnMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19jbGFzc19fLCBEdW1teUdOVVRyYW5zbGF0aW9ucykKKworICAgICAgICAjIENhbGxpbmcgaXQgYWdhaW4gZG9lc24ndCBhZGQgdG8gdGhlIGNhY2hlCisKKyAgICAgICAgdCA9IGdldHRleHQudHJhbnNsYXRpb24oJ2dldHRleHQnLCBzZWxmLmxvY2FsZWRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfPUR1bW15R05VVHJhbnNsYXRpb25zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2NsYXNzX18sIER1bW15R05VVHJhbnNsYXRpb25zKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsLnB5IGIvTGliL3Rlc3QvdGVzdF9nbC5weQppbmRleCAyMGZkNzc2Li5jOTI2NGVlIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2dsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2wucHkKQEAgLTMsOCArMywxMSBAQAogICAgIHRha2VuIG1vc3RseSBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgogICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RTa2lwcGVkCi1pbXBvcnQgZ2wsIEdMLCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB0aW1lCitnbCA9IGltcG9ydF9tb2R1bGUoJ2dsJykKK0dMID0gaW1wb3J0X21vZHVsZSgnR0wnKQogCiBnbGF0dHJzID0gWydSR0Jjb2xvcicsICdSR0JjdXJzb3InLCAnUkdCbW9kZScsICdSR0JyYW5nZScsICdSR0J3cml0ZW1hc2snLAogJ19fZG9jX18nLCAnX19uYW1lX18nLCAnYWRkdG9wdXAnLCAnYWx0Z2V0bWF0cml4JywgJ2FyYycsICdhcmNmJywKQEAgLTg3LDcgKzkwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIGRpc3BsYXkgPSBvcy5lbnZpcm9uWydESVNQTEFZJ10KICAgICBleGNlcHQ6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAiTm8gJERJU1BMQVkgLS0gc2tpcHBpbmcgZ2wgdGVzdCIKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJObyAkRElTUExBWSAtLSBza2lwcGluZyBnbCB0ZXN0IgogCiAgICAgIyB0b3VjaCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgZ2wgd2l0aG91dCBkb2luZyBhbnl0aGluZwogICAgIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKaW5kZXggZjE5OTNhYi4uNjkyMzIyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtNTksOCArNTksOCBAQAogICAgICAgICBpZiBzZXQodHlwZSh4KSBmb3IgeCBpbiB0bXApID09IHVuaXNldDoKICAgICAgICAgICAgIHUxID0gZ2xvYi5nbG9iKHUnKicpCiAgICAgICAgICAgICB1MiA9IGdsb2IuZ2xvYih1Jy4vKicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXQodHlwZShyKSBmb3IgciBpbiB1MSksIHVuaXNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNldCh0eXBlKHIpIGZvciByIGluIHUyKSwgdW5pc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQodHlwZShyKSBmb3IgciBpbiB1MSksIHVuaXNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHR5cGUocikgZm9yIHIgaW4gdTIpLCB1bmlzZXQpCiAKICAgICBkZWYgdGVzdF9nbG9iX29uZV9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihzZWxmLnRlbXBkaXIgKyAnKicgKyBvcy5zZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAgICAgICAgICMgZWl0aGVyIG9mIHRoZXNlIHJlc3VsdHMgYXJlIHJlYXNvbmFibGUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc1swXSBpbiBbc2VsZi50ZW1wZGlyLCBzZWxmLnRlbXBkaXIgKyBvcy5zZXBdKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlc1swXSwgW3NlbGYudGVtcGRpciwgc2VsZi50ZW1wZGlyICsgb3Muc2VwXSkKIAogICAgIGRlZiB0ZXN0X2dsb2JfYnJva2VuX3N5bWxpbmtzKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc3ltbGluaycpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5IGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CmluZGV4IDU4ZGRhNDAuLjA4NGY1OTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKQEAgLTEsNTMgKzEsNDcgQEAKICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMSwgZ3JhbW1hci4KICMgVGhpcyBqdXN0IHRlc3RzIHdoZXRoZXIgdGhlIHBhcnNlciBhY2NlcHRzIHRoZW0gYWxsLgogCi0jIE5PVEU6IFdoZW4geW91IHJ1biB0aGlzIHRlc3QgYXMgYSBzY3JpcHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UKLSMgZ2V0IHdhcm5pbmdzIGFib3V0IGNlcnRhaW4gaGV4L29jdCBjb25zdGFudHMuICBTaW5jZSB0aG9zZSBhcmUKLSMgaXNzdWVkIGJ5IHRoZSBwYXJzZXIsIHlvdSBjYW4ndCBzdXBwcmVzcyB0aGVtIGJ5IGFkZGluZyBhCi0jIGZpbHRlcndhcm5pbmdzKCkgY2FsbCB0byB0aGlzIG1vZHVsZS4gIFRoZXJlZm9yZSwgdG8gc2h1dCB1cCB0aGUKLSMgcmVncmVzc2lvbiB0ZXN0LCB0aGUgZmlsdGVyd2FybmluZ3MoKSBjYWxsIGhhcyBiZWVuIGFkZGVkIHRvCi0jIHJlZ3J0ZXN0LnB5LgotCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBjaGVja19zeW50YXhfZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX3B5M2tfd2FybmluZ3MpCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiAjIHRlc3RpbmcgaW1wb3J0ICoKIGZyb20gc3lzIGltcG9ydCAqCiAKKwogY2xhc3MgVG9rZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdEJhY2tzbGFzaChzZWxmKToKICAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246CiAgICAgICAgIHggPSAxIFwKICAgICAgICAgKyAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDIsICdiYWNrc2xhc2ggZm9yIGxpbmUgY29udGludWF0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyLCAnYmFja3NsYXNoIGZvciBsaW5lIGNvbnRpbnVhdGlvbicpCiAKICAgICAgICAgIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcCiAgICAgICAgIHggPSAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDAsICdiYWNrc2xhc2ggZW5kaW5nIGNvbW1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDAsICdiYWNrc2xhc2ggZW5kaW5nIGNvbW1lbnQnKQogCiAgICAgZGVmIHRlc3RQbGFpbkludGVnZXJzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygweGZmLCAyNTUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAzNzcsIDI1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjE0NzQ4MzY0NywgMDE3Nzc3Nzc3Nzc3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmYsIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMzc3LCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjE0NzQ4MzY0NywgMDE3Nzc3Nzc3Nzc3KQogICAgICAgICAjICIweCIgaXMgbm90IGEgdmFsaWQgbGl0ZXJhbAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjB4IikKICAgICAgICAgZnJvbSBzeXMgaW1wb3J0IG1heGludAogICAgICAgICBpZiBtYXhpbnQgPT0gMjE0NzQ4MzY0NzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC0yMTQ3NDgzNjQ3LTEsIC0wMjAwMDAwMDAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0yMTQ3NDgzNjQ3LTEsIC0wMjAwMDAwMDAwMDApCiAgICAgICAgICAgICAjIFhYWCAtMjE0NzQ4MzY0OAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAzNzc3Nzc3Nzc3NyA+IDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMHhmZmZmZmZmZiA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMDM3Nzc3Nzc3Nzc3ID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgweGZmZmZmZmZmID4gMCkKICAgICAgICAgICAgIGZvciBzIGluICcyMTQ3NDgzNjQ4JywgJzA0MDAwMDAwMDAwMCcsICcweDEwMDAwMDAwMCc6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB4ID0gZXZhbChzKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk92ZXJmbG93RXJyb3Igb24gaHVnZSBpbnRlZ2VyIGxpdGVyYWwgJXIiICUgcykKICAgICAgICAgZWxpZiBtYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEsIC0wMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyA+IDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMHhmZmZmZmZmZmZmZmZmZmZmID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSwgLTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3ID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgweGZmZmZmZmZmZmZmZmZmZmYgPiAwKQogICAgICAgICAgICAgZm9yIHMgaW4gJzkyMjMzNzIwMzY4NTQ3NzU4MDgnLCAnMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLCBcCiAgICAgICAgICAgICAgICAgICAgICAnMHgxMDAwMDAwMDAwMDAwMDAwMCc6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtODIsMTUgKzc2LDE1IEBACiAgICAgICAgIHggPSAzLjFlNAogCiAgICAgZGVmIHRlc3RTdHJpbmdMaXRlcmFscyhzZWxmKToKLSAgICAgICAgeCA9ICcnOyB5ID0gIiI7IHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQotICAgICAgICB4ID0gJ1wnJzsgeSA9ICInIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKLSAgICAgICAgeCA9ICciJzsgeSA9ICJcIiI7IHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzQpCisgICAgICAgIHggPSAnJzsgeSA9ICIiOyBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDAgYW5kIHggPT0geSkKKyAgICAgICAgeCA9ICdcJyc7IHkgPSAiJyI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzkpCisgICAgICAgIHggPSAnIic7IHkgPSAiXCIiOyBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM0KQogICAgICAgICB4ID0gImRvZXNuJ3QgXCJzaHJpbmtcIiBkb2VzIGl0IgogICAgICAgICB5ID0gJ2RvZXNuXCd0ICJzaHJpbmsiIGRvZXMgaXQnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQogICAgICAgICB4ID0gImRvZXMgXCJzaHJpbmtcIiBkb2Vzbid0IGl0IgogICAgICAgICB5ID0gJ2RvZXMgInNocmluayIgZG9lc25cJ3QgaXQnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQogICAgICAgICB4ID0gIiIiCiBUaGUgInF1aWNrIgogYnJvd24gZm94CkBAIC05OCwyOCArOTIsMjggQEAKIHRoZSAnbGF6eScgZG9nLgogIiIiCiAgICAgICAgIHkgPSAnXG5UaGUgInF1aWNrIlxuYnJvd24gZm94XG5qdW1wcyBvdmVyXG50aGUgXCdsYXp5XCcgZG9nLlxuJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAgICAgICAgIHkgPSAnJycKIFRoZSAicXVpY2siCiBicm93biBmb3gKIGp1bXBzIG92ZXIKIHRoZSAnbGF6eScgZG9nLgogJycnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKICAgICAgICAgeSA9ICJcblwKIFRoZSBcInF1aWNrXCJcblwKIGJyb3duIGZveFxuXAoganVtcHMgb3ZlclxuXAogdGhlICdsYXp5JyBkb2cuXG5cCiAiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKICAgICAgICAgeSA9ICdcblwKIFRoZSBcInF1aWNrXCJcblwKIGJyb3duIGZveFxuXAoganVtcHMgb3ZlclxuXAogdGhlIFwnbGF6eVwnIGRvZy5cblwKICcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogCiAKIGNsYXNzIEdyYW1tYXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNTYsMTggKzE1MCwxOCBAQAogICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCiAgICAgICAgIGV4ZWMoJ2RlZiBmNCh0d28sIChjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSkpOiBwYXNzJykKICAgICAgICAgZXhlYygnZGVmIGY1KChjb21wb3VuZCwgZmlyc3QpLCB0d28pOiBwYXNzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjIuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ29uZV9hcmd1bWVudCcsKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ3R3bycsICdhcmd1bWVudHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnb25lX2FyZ3VtZW50JywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCd0d28nLCAnYXJndW1lbnRzJykpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY0LmZ1bmNfY29kZS5jb192YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAoJ3R3bycsICcoY29tcG91bmQsIChhcmd1bWVudCwgbGlzdCkpJywgJ2NvbXBvdW5kJywgJ2FyZ3VtZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpc3QnLCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNS5mdW5jX2NvZGUuY29fdmFybmFtZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAoJyhjb21wb3VuZCwgZmlyc3QpJywgJ3R3bycsICdjb21wb3VuZCcsICdmaXJzdCcpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAoJ3R3bycsICcuMScsICdjb21wb3VuZCcsICdhcmd1bWVudCcsICAnbGlzdCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmNS5mdW5jX2NvZGUuY29fdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAoJy4wJywgJ3R3bycsICdjb21wb3VuZCcsICdmaXJzdCcpKQogICAgICAgICBkZWYgYTEob25lX2FyZywpOiBwYXNzCiAgICAgICAgIGRlZiBhMih0d28sIGFyZ3MsKTogcGFzcwpAQCAtMjA0LDEwICsxOTgsMTAgQEAKICAgICAgICAgIyBjZXZhbCB1bnBhY2tzIHRoZSBmb3JtYWwgYXJndW1lbnRzIGludG8gdGhlIGZpcnN0IGFyZ2NvdW50IG5hbWVzOwogICAgICAgICAjIHRodXMsIHRoZSBuYW1lcyBuZXN0ZWQgaW5zaWRlIHR1cGxlcyBtdXN0IGFwcGVhciBhZnRlciB0aGVzZSBuYW1lcy4KICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJyhiLCBjKScsICdyZXN0JywgJ2InLCAnYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcoYiwgYyknLCAncmVzdCcsICdiJywgJ2MnKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJy4xJywgJ3Jlc3QnLCAnYicsICdjJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzKDEsICgyLCAzKSwgNCksICgxLCAyLCAzLCAoNCwpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ2EnLCAnLjEnLCAncmVzdCcsICdiJywgJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2MygxLCAoMiwgMyksIDQpLCAoMSwgMiwgMywgKDQsKSkpCiAgICAgICAgIGRlZiBkMDEoYT0xKTogcGFzcwogICAgICAgICBkMDEoKQogICAgICAgICBkMDEoMSkKQEAgLTI4OSw3ICsyODMsNyBAQAogICAgICAgICAjIGtleXdvcmQgYXJndW1lbnRzIGFmdGVyICphcmdsaXN0CiAgICAgICAgIGRlZiBmKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICByZXR1cm4gYXJncywga3dhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsneCc6MiwgJ3knOjV9KSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsICooMiwzKSwgNCkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgeD0yLCAqKDMsNCksIHg9NSkiKQpAQCAtMzAxLDE1ICsyOTUsMTUgQEAKICAgICBkZWYgdGVzdExhbWJkZWYoc2VsZik6CiAgICAgICAgICMjIyBsYW1iZGVmOiAnbGFtYmRhJyBbdmFyYXJnc2xpc3RdICc6JyB0ZXN0CiAgICAgICAgIGwxID0gbGFtYmRhIDogMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsMSgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxKCksIDApCiAgICAgICAgIGwyID0gbGFtYmRhIDogYVtkXSAjIFhYWCBqdXN0IHRlc3RpbmcgdGhlIGV4cHJlc3Npb24KICAgICAgICAgbDMgPSBsYW1iZGEgOiBbMiA8IHggZm9yIHggaW4gWy0xLCAzLCAwTF1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwzKCksIFswLCAxLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMygpLCBbMCwgMSwgMF0pCiAgICAgICAgIGw0ID0gbGFtYmRhIHggPSBsYW1iZGEgeSA9IGxhbWJkYSB6PTEgOiB6IDogeSgpIDogeCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGw0KCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDQoKSwgMSkKICAgICAgICAgbDUgPSBsYW1iZGEgeCwgeSwgej0yOiB4ICsgeSArIHoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDUoMSwgMiksIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGw1KDEsIDIsIDMpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGw1KDEsIDIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGw1KDEsIDIsIDMpLCA2KQogICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImxhbWJkYSB4OiB4ID0gMiIpCiAgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAibGFtYmRhIChOb25lLCk6IE5vbmUiKQogCkBAIC01NDUsOCArNTM5LDYgQEAKICAgICAgICAgZyA9IHt9CiAgICAgICAgIGwgPSB7fQogCi0gICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImdsb2JhbCBzdGF0ZW1lbnQiLCBtb2R1bGU9IjxzdHJpbmc+IikKICAgICAgICAgZXhlYyAnZ2xvYmFsIGE7IGEgPSAxOyBiID0gMicgaW4gZywgbAogICAgICAgICBpZiAnX19idWlsdGluc19fJyBpbiBnOiBkZWwgZ1snX19idWlsdGluc19fJ10KICAgICAgICAgaWYgJ19fYnVpbHRpbnNfXycgaW4gbDogZGVsIGxbJ19fYnVpbHRpbnNfXyddCkBAIC01NTQsNyArNTQ2LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXhlYyAuLi4gaW4gZyAoJXMpLCBsICglcyknICUoZyxsKSkKIAogICAgIGRlZiB0ZXN0QXNzZXJ0KHNlbGYpOgotICAgICAgICAjIGFzc2VydF9zdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KKyAgICAgICAgIyBhc3NlcnRUcnVlc3RtdDogJ2Fzc2VydCcgdGVzdCBbJywnIHRlc3RdCiAgICAgICAgIGFzc2VydCAxCiAgICAgICAgIGFzc2VydCAxLCAxCiAgICAgICAgIGFzc2VydCBsYW1iZGEgeDp4CkBAIC01NjIsNyArNTU0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYXNzZXJ0IDAsICJtc2ciCiAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUuYXJnc1swXSwgIm1zZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgIm1zZyIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJBc3NlcnRpb25FcnJvciBub3QgcmFpc2VkIGJ5IGFzc2VydCAwIikKQEAgLTU5Niw3ICs1ODgsNyBAQAogICAgICAgICAgICAgeCA9IDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHggPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMikKIAogICAgIGRlZiB0ZXN0Rm9yKHNlbGYpOgogICAgICAgICAjICdmb3InIGV4cHJsaXN0ICdpbicgZXhwcmxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQpAQCAtNzUxLDExICs3NDMsMTEgQEAKICAgICAgICAgZFsxLDIsM10gPSA0CiAgICAgICAgIEwgPSBsaXN0KGQpCiAgICAgICAgIEwuc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihMKSwgJ1sxLCAoMSwpLCAoMSwgMiksICgxLCAyLCAzKV0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihMKSwgJ1sxLCAoMSwpLCAoMSwgMiksICgxLCAyLCAzKV0nKQogCiAgICAgZGVmIHRlc3RBdG9tcyhzZWxmKToKICAgICAgICAgIyMjIGF0b206ICcoJyBbdGVzdGxpc3RdICcpJyB8ICdbJyBbdGVzdGxpc3RdICddJyB8ICd7JyBbZGljdG1ha2VyXSAnfScgfCAnYCcgdGVzdGxpc3QgJ2AnIHwgTkFNRSB8IE5VTUJFUiB8IFNUUklORwotICAgICAgICAjIyMgZGljdG1ha2VyOiB0ZXN0ICc6JyB0ZXN0ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddCisgICAgICAgICMjIyBkaWN0b3JzZXRtYWtlcjogKHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10pIHwgKHRlc3QgKCcsJyB0ZXN0KSogWycsJ10pCiAKICAgICAgICAgeCA9ICgxKQogICAgICAgICB4ID0gKDEgb3IgMiBvciAzKQpAQCAtNzc1LDYgKzc2NywxMSBAQAogICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMix9CiAgICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLCAndGhyZWUnOiAzLCAnZm91cic6IDQsICdmaXZlJzogNSwgJ3NpeCc6IDZ9CiAKKyAgICAgICAgeCA9IHsnb25lJ30KKyAgICAgICAgeCA9IHsnb25lJywgMSx9CisgICAgICAgIHggPSB7J29uZScsICd0d28nLCAndGhyZWUnfQorICAgICAgICB4ID0gezIsIDMsIDQsfQorCiAgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKICAgICAgICAgeCA9IGV2YWwoJ2B4YCcpCiAgICAgICAgIHggPSBldmFsKCdgMSBvciAyIG9yIDNgJykKQEAgLTgxMCw2ICs4MDcsMTMgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHLmRlY29yYXRlZCwgVHJ1ZSkKIAorICAgIGRlZiB0ZXN0RGljdGNvbXBzKHNlbGYpOgorICAgICAgICAjIGRpY3RvcnNldG1ha2VyOiAoICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8CisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICh0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSkgKQorICAgICAgICBudW1zID0gWzEsIDIsIDNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2k6aSsxIGZvciBpIGluIG51bXN9LCB7MTogMiwgMjogMywgMzogNH0pCisKICAgICBkZWYgdGVzdExpc3Rjb21wcyhzZWxmKToKICAgICAgICAgIyBsaXN0IGNvbXByZWhlbnNpb24gdGVzdHMKICAgICAgICAgbnVtcyA9IFsxLCAyLCAzLCA0LCA1XQpAQCAtOTI3LDYgKzkzMSwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt4IGZvciB4LCBpbiBbKDQsKSwgKDUsKSwgKDYsKV1dLCBbNCwgNSwgNl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4IGZvciB4LCBpbiBbKDcsKSwgKDgsKSwgKDksKV0pLCBbNywgOCwgOV0pCiAKKyAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgY2xhc3MgbWFuYWdlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKDEsIDIpCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIG1hbmFnZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgKHgsIHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSwgbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCkgYXMgeToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeCwgbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RJZkVsc2VFeHByKHNlbGYpOgogICAgICAgICAjIFRlc3QgaWZlbHNlIGV4cHJlc3Npb25zIGluIHZhcmlvdXMgY2FzZXMKICAgICAgICAgZGVmIF9jaGVja2V2YWwobXNnLCByZXQpOgpAQCAtOTUzLDkgKzk3NywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IC8gMiBpZiAxIGVsc2UgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgPCA0IGlmIDAgZWxzZSAyKSwgMikKIAorICAgIGRlZiB0ZXN0X3BhcmVuX2V2YWx1YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTYgLy8gKDQgLy8gMiksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDE2IC8vIDQpIC8vIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTYgLy8gNCAvLyAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UgaXMgKDIgaXMgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKEZhbHNlIGlzIDIpIGlzIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRmFsc2UgaXMgMiBpcyAzKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLCBTeW50YXhXYXJuaW5nKSwKICAgICAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZyksCiAgICAgICAgICAgICAoInBhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQiLCBTeW50YXhXYXJuaW5nKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JwLnB5IGIvTGliL3Rlc3QvdGVzdF9ncnAucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA1NjRjN2YwLi5lOWUxNzU4Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3JwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3JwLnB5CkBAIC0xLDkgKzEsMTAgQEAKICIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgZ3JwIG1vZHVsZS4iIiIKIAotaW1wb3J0IGdycAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCitncnAgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZ3JwJykKKwogY2xhc3MgR3JvdXBEYXRhYmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBjaGVja192YWx1ZShzZWxmLCB2YWx1ZSk6CkBAIC0xMSwxMyArMTIsMTMgQEAKICAgICAgICAgIyBhdHRyaWJ1dGVzIHByb21pc2VkIGJ5IHRoZSBkb2NzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlKSwgNCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVswXSwgdmFsdWUuZ3JfbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmFsdWUuZ3JfbmFtZSwgYmFzZXN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9uYW1lLCBiYXNlc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzFdLCB2YWx1ZS5ncl9wYXNzd2QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZhbHVlLmdyX3Bhc3N3ZCwgYmFzZXN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9wYXNzd2QsIGJhc2VzdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMl0sIHZhbHVlLmdyX2dpZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmFsdWUuZ3JfZ2lkLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfZ2lkLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbM10sIHZhbHVlLmdyX21lbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmFsdWUuZ3JfbWVtLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX21lbSwgbGlzdCkKIAogICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKICAgICAgICAgZW50cmllcyA9IGdycC5nZXRncmFsbCgpCkBAIC0zMiwxMiArMzMsMTYgQEAKICAgICAgICAgICAgIGUyID0gZ3JwLmdldGdyZ2lkKGUuZ3JfZ2lkKQogICAgICAgICAgICAgc2VsZi5jaGVja192YWx1ZShlMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIuZ3JfZ2lkLCBlLmdyX2dpZCkKLSAgICAgICAgICAgIGUyID0gZ3JwLmdldGdybmFtKGUuZ3JfbmFtZSkKKyAgICAgICAgICAgIG5hbWUgPSBlLmdyX25hbWUKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnKycpIG9yIG5hbWUuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICMgTklTLXJlbGF0ZWQgZW50cnkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZTIgPSBncnAuZ2V0Z3JuYW0obmFtZSkKICAgICAgICAgICAgIHNlbGYuY2hlY2tfdmFsdWUoZTIpCiAgICAgICAgICAgICAjIFRoZXJlIGFyZSBpbnN0YW5jZXMgd2hlcmUgZ2V0Z3JhbGwoKSByZXR1cm5zIGdyb3VwIG5hbWVzIGluCiAgICAgICAgICAgICAjIGxvd2VyY2FzZSB3aGlsZSBnZXRncmdpZCgpIHJldHVybnMgcHJvcGVyIGNhc2luZy4KICAgICAgICAgICAgICMgRGlzY292ZXJlZCBvbiBVYnVudHUgNS4wNCAoY3VzdG9tKS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIuZ3JfbmFtZS5sb3dlcigpLCBlLmdyX25hbWUubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIuZ3JfbmFtZS5sb3dlcigpLCBuYW1lLmxvd2VyKCkpCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ3JwLmdldGdyZ2lkKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5IGIvTGliL3Rlc3QvdGVzdF9nemlwLnB5CmluZGV4IDEwNTg4MmEuLjU3Mzg3OWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKQEAgLTUsOCArNSw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBpbXBvcnQgb3MKLWltcG9ydCBnemlwCi0KK2ltcG9ydCBpbworaW1wb3J0IHN0cnVjdAorZ3ppcCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdnemlwJykKIAogZGF0YTEgPSAiIiIgIGludCBsZW5ndGg9REVGQVVMVEFMTE9DLCBlcnIgPSBaX09LOwogICBQeU9iamVjdCAqUmV0VmFsOwpAQCAtMzIsMTQgKzMzLDE1IEBACiAKIAogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSA7IGYud3JpdGUoZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCiAKLSAgICAgICAgIyBUcnkgZmx1c2ggYW5kIGZpbGVuby4KLSAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGYuZmlsZW5vKCkKLSAgICAgICAgaWYgaGFzYXR0cihvcywgJ2ZzeW5jJyk6Ci0gICAgICAgICAgICBvcy5mc3luYyhmLmZpbGVubygpKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICMgVHJ5IGZsdXNoIGFuZCBmaWxlbm8uCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIGYuZmlsZW5vKCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdmc3luYycpOgorICAgICAgICAgICAgICAgIG9zLmZzeW5jKGYuZmlsZW5vKCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAjIFRlc3QgbXVsdGlwbGUgY2xvc2UoKSBjYWxscy4KICAgICAgICAgZi5jbG9zZSgpCkBAIC00NywxMTggKzQ5LDIzMCBAQAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IHJlYWRpbmcuCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgOyBkID0gZi5yZWFkKCkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRhdGExKjUwKQogCisgICAgZGVmIHRlc3RfaW9fb25fY2xvc2VkX29iamVjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgSS9PIG9wZXJhdGlvbnMgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdHMgcmFpc2UgYQorICAgICAgICAjIFZhbHVlRXJyb3IsIGp1c3QgbGlrZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgb24gZmlsZSBvYmplY3RzLgorCisgICAgICAgICMgV3JpdGUgdG8gYSBmaWxlLCBvcGVuIGl0IGZvciByZWFkaW5nLCB0aGVuIGNsb3NlIGl0LgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi5yZWFkKDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYudGVsbCgpCisgICAgICAgICMgT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZywgdGhlbiBjbG9zZSBpdC4KKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYud3JpdGUoJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLmZsdXNoKCkKKwogICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBBcHBlbmQgdG8gdGhlIHByZXZpb3VzIGZpbGUKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ2FiJykgOyBmLndyaXRlKGRhdGEyICogMTUpIDsgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnYWInKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMiAqIDE1KQogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIDsgZCA9IGYucmVhZCgpIDsgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZCA9IGYucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgKGRhdGExKjUwKSArIChkYXRhMioxNSkpCiAKICAgICBkZWYgdGVzdF9tYW55X2FwcGVuZChzZWxmKToKICAgICAgICAgIyBCdWcgIzEwNzQyNjEgd2FzIHRyaWdnZXJlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIHRoYXQgY29udGFpbmVkCiAgICAgICAgICMgbWFueSwgbWFueSBtZW1iZXJzLiAgQ3JlYXRlIHN1Y2ggYSBmaWxlIGFuZCB2ZXJpZnkgdGhhdCByZWFkaW5nIGl0CiAgICAgICAgICMgd29ya3MuCi0gICAgICAgIGYgPSBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3diJywgOSkKLSAgICAgICAgZi53cml0ZSgnYScpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLDIwMCk6Ci0gICAgICAgICAgICBmID0gZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhYiIsIDkpICMgYXBwZW5kCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICd3YicsIDkpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKCdhJykKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAyMDApOgorICAgICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIiwgOSkgYXMgZjogIyBhcHBlbmQKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhJykKIAogICAgICAgICAjIFRyeSByZWFkaW5nIHRoZSBmaWxlCi0gICAgICAgIHpnZmlsZSA9IGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKQotICAgICAgICBjb250ZW50cyA9ICIiCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB6dHh0ID0gemdmaWxlLnJlYWQoODE5MikKLSAgICAgICAgICAgIGNvbnRlbnRzICs9IHp0eHQKLSAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawotICAgICAgICB6Z2ZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjb250ZW50cywgJ2EnKjIwMSkKKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgemdmaWxlOgorICAgICAgICAgICAgY29udGVudHMgPSAiIgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB6dHh0ID0gemdmaWxlLnJlYWQoODE5MikKKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSB6dHh0CisgICAgICAgICAgICAgICAgaWYgbm90IHp0eHQ6IGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsICdhJyoyMDEpCiAKKyAgICBkZWYgdGVzdF9idWZmZXJlZF9yZWFkZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc0NzE6IGEgR3ppcEZpbGUgY2FuIGJlIHdyYXBwZWQgaW4gYSBCdWZmZXJlZFJlYWRlciBmb3IKKyAgICAgICAgIyBwZXJmb3JtYW5jZS4KKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggaW8uQnVmZmVyZWRSZWFkZXIoZikgYXMgcjoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IFtsaW5lIGZvciBsaW5lIGluIHJdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgNTAgKiBkYXRhMS5zcGxpdGxpbmVzKFRydWUpKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IC5yZWFkbGluZSgpIHdpdGggdmFyeWluZyBsaW5lIGxlbmd0aHMKIAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKQotICAgICAgICBsaW5lX2xlbmd0aCA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lKGxpbmVfbGVuZ3RoKQotICAgICAgICAgICAgaWYgTCA9PSAiIiBhbmQgbGluZV9sZW5ndGggIT0gMDogYnJlYWsKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oTCkgPD0gbGluZV9sZW5ndGgpCi0gICAgICAgICAgICBsaW5lX2xlbmd0aCA9IChsaW5lX2xlbmd0aCArIDEpICUgNTAKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbGluZV9sZW5ndGggPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lKGxpbmVfbGVuZ3RoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBMIGFuZCBsaW5lX2xlbmd0aCAhPSAwOiBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oTCkgPD0gbGluZV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbGluZV9sZW5ndGggPSAobGluZV9sZW5ndGggKyAxKSAlIDUwCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IC5yZWFkbGluZXMoKQogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIEwgPSBmLnJlYWRsaW5lcygpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygpCiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygxNTApCi0gICAgICAgICAgICBpZiBMID09IFtdOiBicmVhawotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygxNTApCisgICAgICAgICAgICAgICAgaWYgTCA9PSBbXTogYnJlYWsKIAogICAgIGRlZiB0ZXN0X3NlZWtfcmVhZChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgc2VlaywgcmVhZCB0ZXN0CiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIG9sZHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmUxOiBicmVhawotICAgICAgICAgICAgbmV3cG9zID0gZi50ZWxsKCkKLSAgICAgICAgICAgIGYuc2VlayhvbGRwb3MpICAjIG5lZ2F0aXZlIHNlZWsKLSAgICAgICAgICAgIGlmIGxlbihsaW5lMSk+MTA6Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gMTAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gbGVuKGxpbmUxKQotICAgICAgICAgICAgbGluZTIgPSBmLnJlYWQoYW1vdW50KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMVs6YW1vdW50XSwgbGluZTIpCi0gICAgICAgICAgICBmLnNlZWsobmV3cG9zKSAgIyBwb3NpdGl2ZSBzZWVrCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgb2xkcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lMTogYnJlYWsKKyAgICAgICAgICAgICAgICBuZXdwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIGYuc2VlayhvbGRwb3MpICAjIG5lZ2F0aXZlIHNlZWsKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZTEpPjEwOgorICAgICAgICAgICAgICAgICAgICBhbW91bnQgPSAxMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCA9IGxlbihsaW5lMSkKKyAgICAgICAgICAgICAgICBsaW5lMiA9IGYucmVhZChhbW91bnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMVs6YW1vdW50XSwgbGluZTIpCisgICAgICAgICAgICAgICAgZi5zZWVrKG5ld3BvcykgICMgcG9zaXRpdmUgc2VlawogCiAgICAgZGVmIHRlc3Rfc2Vla193aGVuY2Uoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IHNlZWsod2hlbmNlPTEpLCByZWFkIHRlc3QKIAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBmLnJlYWQoMTApCi0gICAgICAgIGYuc2VlaygxMCwgd2hlbmNlPTEpCi0gICAgICAgIHkgPSBmLnJlYWQoMTApCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh5LCBkYXRhMVsyMDozMF0pCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmOgorICAgICAgICAgICAgZi5yZWFkKDEwKQorICAgICAgICAgICAgZi5zZWVrKDEwLCB3aGVuY2U9MSkKKyAgICAgICAgICAgIHkgPSBmLnJlYWQoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgZGF0YTFbMjA6MzBdKQogCiAgICAgZGVmIHRlc3Rfc2Vla193cml0ZShzZWxmKToKICAgICAgICAgIyBUcnkgc2Vlaywgd3JpdGUgdGVzdAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycpCi0gICAgICAgIGZvciBwb3MgaW4gcmFuZ2UoMCwgMjU2LCAxNik6Ci0gICAgICAgICAgICBmLnNlZWsocG9zKQotICAgICAgICAgICAgZi53cml0ZSgnR1pcbicpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZm9yIHBvcyBpbiByYW5nZSgwLCAyNTYsIDE2KToKKyAgICAgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ0daXG4nKQogCiAgICAgZGVmIHRlc3RfbW9kZShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm15ZmlsZW9iai5tb2RlLCAncmInKQogCiAgICAgZGVmIHRlc3RfMTY0NzQ4NChzZWxmKToKICAgICAgICAgZm9yIG1vZGUgaW4gKCd3YicsICdyYicpOgotICAgICAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKGYsICJuYW1lIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgc2VsZi5maWxlbmFtZSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZiwgIm5hbWUiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgc2VsZi5maWxlbmFtZSkKKworICAgIGRlZiB0ZXN0X210aW1lKHNlbGYpOgorICAgICAgICBtdGltZSA9IDEyMzQ1Njc4OQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKSBhcyBmV3JpdGU6CisgICAgICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmUmVhZDoKKyAgICAgICAgICAgIGRhdGFSZWFkID0gZlJlYWQucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFSZWFkLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZSZWFkLCAnbXRpbWUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlJlYWQubXRpbWUsIG10aW1lKQorCisgICAgZGVmIHRlc3RfbWV0YWRhdGEoc2VsZik6CisgICAgICAgIG10aW1lID0gMTIzNDU2Nzg5CisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JywgbXRpbWUgPSBtdGltZSkgYXMgZldyaXRlOgorICAgICAgICAgICAgZldyaXRlLndyaXRlKGRhdGExKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmUmVhZDoKKyAgICAgICAgICAgICMgc2VlIFJGQyAxOTUyOiBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMTk1Mi5odG1sCisKKyAgICAgICAgICAgIGlkQnl0ZXMgPSBmUmVhZC5yZWFkKDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkQnl0ZXMsICdceDFmXHg4YicpICMgZ3ppcCBJRAorCisgICAgICAgICAgICBjbUJ5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtQnl0ZSwgJ1x4MDgnKSAjIGRlZmxhdGUKKworICAgICAgICAgICAgZmxhZ3NCeXRlID0gZlJlYWQucmVhZCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnc0J5dGUsICdceDA4JykgIyBvbmx5IHRoZSBGTkFNRSBmbGFnIGlzIHNldAorCisgICAgICAgICAgICBtdGltZUJ5dGVzID0gZlJlYWQucmVhZCg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBtdGltZSkpICMgbGl0dGxlLWVuZGlhbgorCisgICAgICAgICAgICB4ZmxCeXRlID0gZlJlYWQucmVhZCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ZmxCeXRlLCAnXHgwMicpICMgbWF4aW11bSBjb21wcmVzc2lvbgorCisgICAgICAgICAgICBvc0J5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zQnl0ZSwgJ1x4ZmYnKSAjIE9TICJ1bmtub3duIiAoT1MtaW5kZXBlbmRlbnQpCisKKyAgICAgICAgICAgICMgU2luY2UgdGhlIEZOQU1FIGZsYWcgaXMgc2V0LCB0aGUgemVyby10ZXJtaW5hdGVkIGZpbGVuYW1lIGZvbGxvd3MuCisgICAgICAgICAgICAjIFJGQyAxOTUyIHNwZWNpZmllcyB0aGF0IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUsIGlmIGFueS4KKyAgICAgICAgICAgICMgSG93ZXZlciwgdGhlIGd6aXAgbW9kdWxlIGRlZmF1bHRzIHRvIHN0b3JpbmcgdGhlIG5hbWUgb2YgdGhlIG91dHB1dAorICAgICAgICAgICAgIyBmaWxlIGluIHRoaXMgZmllbGQuCisgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuZmlsZW5hbWUuZW5jb2RlKCdMYXRpbi0xJykgKyAnXHgwMCcKKyAgICAgICAgICAgIG5hbWVCeXRlcyA9IGZSZWFkLnJlYWQobGVuKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZUJ5dGVzLCBleHBlY3RlZCkKKworICAgICAgICAgICAgIyBTaW5jZSBubyBvdGhlciBmbGFncyB3ZXJlIHNldCwgdGhlIGhlYWRlciBlbmRzIGhlcmUuCisgICAgICAgICAgICAjIFJhdGhlciB0aGFuIHByb2Nlc3MgdGhlIGNvbXByZXNzZWQgZGF0YSwgbGV0J3Mgc2VlayB0byB0aGUgdHJhaWxlci4KKyAgICAgICAgICAgIGZSZWFkLnNlZWsob3Muc3RhdChzZWxmLmZpbGVuYW1lKS5zdF9zaXplIC0gOCkKKworICAgICAgICAgICAgY3JjMzJCeXRlcyA9IGZSZWFkLnJlYWQoNCkgIyBDUkMzMiBvZiB1bmNvbXByZXNzZWQgZGF0YSBbZGF0YTFdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyYzMyQnl0ZXMsICdceGFmXHhkN2RceDgzJykKKworICAgICAgICAgICAgaXNpemVCeXRlcyA9IGZSZWFkLnJlYWQoNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpemVCeXRlcywgc3RydWN0LnBhY2soJzxpJywgbGVuKGRhdGExKSkpCisKKyAgICBkZWYgdGVzdF93aXRoX29wZW4oc2VsZik6CisgICAgICAgICMgR3ppcEZpbGUgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbAorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ4eHgiKQorICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIl9fZW50ZXJfXyBvbiBhIGNsb3NlZCBmaWxlIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIxIC8vIDAgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisKKyAgICBkZWYgdGVzdF96ZXJvX3BhZGRlZF9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YTEgKiA1MCkKKworICAgICAgICAjIFBhZCB0aGUgZmlsZSB3aXRoIHplcm9lcworICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIlx4MDAiICogNTApCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGF0YTEgKiA1MCwgIkluY29ycmVjdCBkYXRhIGluIGZpbGUiKQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0R3ppcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQppbmRleCA3Y2U0MGI5Li5kMjU3MWQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CkBAIC0zNSw2ICszNSw3IEBACiAgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgtMioqNjMpLCBsb25nKC0yKio2MyksIGZsb2F0KC0yKio2MykpCiAgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgxLTIqKjYzKSwgbG9uZygxLTIqKjYzKSkKICAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDIqKjYzLTEpLCBsb25nKDIqKjYzLTEpKQorICAgICAgICBzZWxmLnNhbWVfaGFzaChsb25nKDIqKjYzKSwgZmxvYXQoMioqNjMpKQogCiAgICAgZGVmIHRlc3RfY29lcmNlZF9mbG9hdHMoc2VsZik6CiAgICAgICAgIHNlbGYuc2FtZV9oYXNoKGxvbmcoMS4yM2UzMDApLCBmbG9hdCgxLjIzZTMwMCkpCkBAIC0xMDQsMTEgKzEwNSwxMSBAQAogICAgICAgICBvYmplY3RzID0gKHNlbGYuZGVmYXVsdF9leHBlY3RlZCArCiAgICAgICAgICAgICAgICAgICAgc2VsZi5maXhlZF9leHBlY3RlZCkKICAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uob2JqLCBIYXNoYWJsZSksIHJlcHIob2JqKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQogCiAgICAgZGVmIHRlc3Rfbm90X2hhc2hhYmxlKHNlbGYpOgogICAgICAgICBmb3Igb2JqIGluIHNlbGYuZXJyb3JfZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2Uob2JqLCBIYXNoYWJsZSksIHJlcHIob2JqKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQogCiAKICMgSXNzdWUgIzQ3MDE6IENoZWNrIHRoYXQgc29tZSBidWlsdGluIHR5cGVzIGFyZSBjb3JyZWN0bHkgaGFzaGFibGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQppbmRleCA1MmM1MGY1Li5lZDQxNjcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CkBAIC02LDExICs2LDIzIEBACiAjICBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKK2ltcG9ydCBhcnJheQogaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBzeXMKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBfNEcsIHByZWNpc2lvbmJpZ21lbXRlc3QKIAorIyBXZXJlIHdlIGNvbXBpbGVkIC0td2l0aC1weWRlYnVnIG9yIHdpdGggI2RlZmluZSBQeV9ERUJVRz8KK0NPTVBJTEVEX1dJVEhfUFlERUJVRyA9IGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpCisKKwogZGVmIGhleHN0cihzKToKICAgICBpbXBvcnQgc3RyaW5nCiAgICAgaCA9IHN0cmluZy5oZXhkaWdpdHMKQEAgLTI2LDI0ICszOCw5MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQogCisgICAgX3dhcm5fb25fZXh0ZW5zaW9uX2ltcG9ydCA9IENPTVBJTEVEX1dJVEhfUFlERUJVRworCisgICAgZGVmIF9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gaXQgb3IgTm9uZSBvbiBmYWlsdXJlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjKCdpbXBvcnQgJyttb2R1bGVfbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnJvcjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhcm5fb25fZXh0ZW5zaW9uX2ltcG9ydDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdEaWQgYSBDIGV4dGVuc2lvbiBmYWlsIHRvIGNvbXBpbGU/ICVzJyAlIGVycm9yKQorICAgICAgICByZXR1cm4gbG9jYWxzKCkuZ2V0KG1vZHVsZV9uYW1lKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGFsZ29yaXRobXMgPSBzZXQoKQorICAgICAgICBmb3IgYWxnb3JpdGhtIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXM6CisgICAgICAgICAgICBhbGdvcml0aG1zLmFkZChhbGdvcml0aG0ubG93ZXIoKSkKKyAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdCA9IHt9CisgICAgICAgIGZvciBhbGdvcml0aG0gaW4gYWxnb3JpdGhtczoKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbYWxnb3JpdGhtXSA9IHNldCgpCisKKyAgICAgICAgIyBGb3IgZWFjaCBhbGdvcml0aG0sIHRlc3QgdGhlIGRpcmVjdCBjb25zdHJ1Y3RvciBhbmQgdGhlIHVzZQorICAgICAgICAjIG9mIGhhc2hsaWIubmV3IGdpdmVuIHRoZSBhbGdvcml0aG0gbmFtZS4KKyAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKKyAgICAgICAgICAgIGNvbnN0cnVjdG9ycy5hZGQoZ2V0YXR0cihoYXNobGliLCBhbGdvcml0aG0pKQorICAgICAgICAgICAgZGVmIF90ZXN0X2FsZ29yaXRobV92aWFfaGFzaGxpYl9uZXcoZGF0YT1Ob25lLCBfYWxnPWFsZ29yaXRobSk6CisgICAgICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGxpYi5uZXcoX2FsZykKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGxpYi5uZXcoX2FsZywgZGF0YSkKKyAgICAgICAgICAgIGNvbnN0cnVjdG9ycy5hZGQoX3Rlc3RfYWxnb3JpdGhtX3ZpYV9oYXNobGliX25ldykKKworICAgICAgICBfaGFzaGxpYiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19oYXNobGliJykKKyAgICAgICAgaWYgX2hhc2hsaWI6CisgICAgICAgICAgICAjIFRoZXNlIHR3byBhbGdvcml0aG1zIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoaXMgbW9kdWxlCisgICAgICAgICAgICAjIGlzIGNvbXBpbGVkLiAgSWYgbm90LCBzb21ldGhpbmcgd2FzIGNvbXBpbGVkIHdyb25nLgorICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpCisgICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpCisgICAgICAgICAgICBmb3IgYWxnb3JpdGhtLCBjb25zdHJ1Y3RvcnMgaW4gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfJythbGdvcml0aG0sIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgY29uc3RydWN0b3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycy5hZGQoY29uc3RydWN0b3IpCisKKyAgICAgICAgX21kNSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19tZDUnKQorICAgICAgICBpZiBfbWQ1OgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnbWQ1J10uYWRkKF9tZDUubmV3KQorICAgICAgICBfc2hhID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYScpCisgICAgICAgIGlmIF9zaGE6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGExJ10uYWRkKF9zaGEubmV3KQorICAgICAgICBfc2hhMjU2ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTI1NicpCisgICAgICAgIGlmIF9zaGEyNTY6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyMjQnXS5hZGQoX3NoYTI1Ni5zaGEyMjQpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyNTYnXS5hZGQoX3NoYTI1Ni5zaGEyNTYpCisgICAgICAgIF9zaGE1MTIgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhNTEyJykKKyAgICAgICAgaWYgX3NoYTUxMjoKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTM4NCddLmFkZChfc2hhNTEyLnNoYTM4NCkKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTUxMiddLmFkZChfc2hhNTEyLnNoYTUxMikKKworICAgICAgICBzdXBlcihIYXNoTGliVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0X2hhc2hfYXJyYXkoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheSgiYiIsIHJhbmdlKDEwKSkKKyAgICAgICAgY29uc3RydWN0b3JzID0gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVydmFsdWVzKCkKKyAgICAgICAgZm9yIGNvbnMgaW4gaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUoY29uc3RydWN0b3JzKToKKyAgICAgICAgICAgIGMgPSBjb25zKGEpCisgICAgICAgICAgICBjLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgdGVzdF9hbGdvcml0aG1zX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNobGliLmFsZ29yaXRobXMsCisgICAgICAgICAgICB0dXBsZShbX2FsZ28gZm9yIF9hbGdvIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hbGdvLmlzbG93ZXIoKV0pKQorCiAgICAgZGVmIHRlc3RfdW5rbm93bl9oYXNoKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoYXNobGliLm5ldygnc3BhbSBzcGFtIHNwYW0gc3BhbSBzcGFtJykKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMCA9PSAiaGFzaGxpYiBkaWRuJ3QgcmVqZWN0IGJvZ3VzIGhhc2ggbmFtZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA9PSAiaGFzaGxpYiBkaWRuJ3QgcmVqZWN0IGJvZ3VzIGhhc2ggbmFtZSIpCiAKICAgICBkZWYgdGVzdF9oZXhkaWdlc3Qoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXM6CiAgICAgICAgICAgICBoID0gaGFzaGxpYi5uZXcobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoZXhzdHIoaC5kaWdlc3QoKSkgPT0gaC5oZXhkaWdlc3QoKSkKLQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhleHN0cihoLmRpZ2VzdCgpKSA9PSBoLmhleGRpZ2VzdCgpKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfdXBkYXRlKHNlbGYpOgogICAgICAgICBhYXMgPSAnYScgKiAxMjgKICAgICAgICAgYmVlcyA9ICdiJyAqIDEyNwogICAgICAgICBjZWVzID0gJ2MnICogMTI2CisgICAgICAgIGFiY3MgPSBhYXMgKyBiZWVzICsgY2VlcwogCiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXM6CiAgICAgICAgICAgICBtMSA9IGhhc2hsaWIubmV3KG5hbWUpCkBAIC01MiwxNyArMTMzLDM5IEBACiAgICAgICAgICAgICBtMS51cGRhdGUoY2VlcykKIAogICAgICAgICAgICAgbTIgPSBoYXNobGliLm5ldyhuYW1lKQotICAgICAgICAgICAgbTIudXBkYXRlKGFhcyArIGJlZXMgKyBjZWVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5kaWdlc3QoKSwgbTIuZGlnZXN0KCkpCisgICAgICAgICAgICBtMi51cGRhdGUoYWJjcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEuZGlnZXN0KCksIG0yLmRpZ2VzdCgpLCBuYW1lKycgdXBkYXRlIHByb2JsZW0uJykKKworICAgICAgICAgICAgbTMgPSBoYXNobGliLm5ldyhuYW1lLCBhYmNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5kaWdlc3QoKSwgbTMuZGlnZXN0KCksIG5hbWUrJyBuZXcgcHJvYmxlbS4nKQogCiAgICAgZGVmIGNoZWNrKHNlbGYsIG5hbWUsIGRhdGEsIGRpZ2VzdCk6Ci0gICAgICAgICMgdGVzdCB0aGUgZGlyZWN0IGNvbnN0cnVjdG9ycwotICAgICAgICBjb21wdXRlZCA9IGdldGF0dHIoaGFzaGxpYiwgbmFtZSkoZGF0YSkuaGV4ZGlnZXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGRpZ2VzdCkKLSAgICAgICAgIyB0ZXN0IHRoZSBnZW5lcmFsIG5ldygpIGludGVyZmFjZQotICAgICAgICBjb21wdXRlZCA9IGhhc2hsaWIubmV3KG5hbWUsIGRhdGEpLmhleGRpZ2VzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21wdXRlZCA9PSBkaWdlc3QpCisgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbbmFtZV0KKyAgICAgICAgIyAyIGlzIGZvciBoYXNobGliLm5hbWUoLi4uKSBhbmQgaGFzaGxpYi5uZXcobmFtZSwgLi4uKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oY29uc3RydWN0b3JzKSwgMikKKyAgICAgICAgZm9yIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGNvbXB1dGVkID0gaGFzaF9vYmplY3RfY29uc3RydWN0b3IoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICJIYXNoIGFsZ29yaXRobSAlcyBjb25zdHJ1Y3RlZCB1c2luZyAlcyByZXR1cm5lZCBoZXhkaWdlc3QiCisgICAgICAgICAgICAgICAgICAgICIgJXIgZm9yICVkIGJ5dGUgaW5wdXQgZGF0YSB0aGF0IHNob3VsZCBoYXZlIGhhc2hlZCB0byAlci4iCisgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCwgbGVuKGRhdGEpLCBkaWdlc3QpKQogCisgICAgZGVmIGNoZWNrX3VuaWNvZGUoc2VsZiwgYWxnb3JpdGhtX25hbWUpOgorICAgICAgICAjIFVuaWNvZGUgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQgYXMgaW5wdXQuCisgICAgICAgIGV4cGVjdGVkID0gaGFzaGxpYi5uZXcoYWxnb3JpdGhtX25hbWUsIHN0cih1J3NwYW0nKSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5jaGVjayhhbGdvcml0aG1fbmFtZSwgdSdzcGFtJywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAjIEluIHB5dGhvbiAyLnggdW5pY29kZSBpcyBhdXRvLWVuY29kZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nCisgICAgICAgICMgd2hlbiBwYXNzZWQgdG8gaGFzaGxpYiBmdW5jdGlvbnMuCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnbWQ1JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGExJykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGEyMjQnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTI1NicpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhMzg0JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGE1MTInKQogCiAgICAgZGVmIHRlc3RfY2FzZV9tZDVfMChzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnbWQ1JywgJycsICdkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZScpCkBAIC0xOTYsMTAgKzI5OSw0NSBAQAogICAgICAgICAgICJlNzE4NDgzZDBjZTc2OTY0NGUyZTQyYzdiYzE1YjQ2MzhlMWY5OGIxM2IyMDQ0Mjg1NjMyYTgwM2FmYTk3M2ViIisKICAgICAgICAgICAiZGUwZmYyNDQ4NzdlYTYwYTRjYjA0MzJjZTU3N2MzMWJlYjAwOWM1YzJjNDlhYTJlNGVhZGIyMTdhZDhjYzA5YiIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfdGhyZWFkZWRfaGFzaGluZyhzZWxmKToKKyAgICAgICAgIyBVcGRhdGluZyB0aGUgc2FtZSBoYXNoIG9iamVjdCBmcm9tIHNldmVyYWwgdGhyZWFkcyBhdCBvbmNlCisgICAgICAgICMgdXNpbmcgZGF0YSBjaHVuayBzaXplcyBjb250YWluaW5nIHRoZSBzYW1lIGJ5dGUgc2VxdWVuY2VzLgorICAgICAgICAjCisgICAgICAgICMgSWYgdGhlIGludGVybmFsIGxvY2tzIGFyZSB3b3JraW5nIHRvIHByZXZlbnQgbXVsdGlwbGUKKyAgICAgICAgIyB1cGRhdGVzIG9uIHRoZSBzYW1lIG9iamVjdCBmcm9tIHJ1bm5pbmcgYXQgb25jZSwgdGhlIHJlc3VsdGluZworICAgICAgICAjIGhhc2ggd2lsbCBiZSB0aGUgc2FtZSBhcyBkb2luZyBpdCBzaW5nbGUgdGhyZWFkZWQgdXBmcm9udC4KKyAgICAgICAgaGFzaGVyID0gaGFzaGxpYi5zaGExKCkKKyAgICAgICAgbnVtX3RocmVhZHMgPSA1CisgICAgICAgIHNtYWxsZXN0X2RhdGEgPSAnc3dpbmVmbHUnCisgICAgICAgIGRhdGEgPSBzbWFsbGVzdF9kYXRhKjIwMDAwMAorICAgICAgICBleHBlY3RlZF9oYXNoID0gaGFzaGxpYi5zaGExKGRhdGEqbnVtX3RocmVhZHMpLmhleGRpZ2VzdCgpCisKKyAgICAgICAgZGVmIGhhc2hfaW5fY2h1bmtzKGNodW5rX3NpemUsIGV2ZW50KToKKyAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgd2hpbGUgaW5kZXggPCBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgaGFzaGVyLnVwZGF0ZShkYXRhW2luZGV4OmluZGV4K2NodW5rX3NpemVdKQorICAgICAgICAgICAgICAgIGluZGV4ICs9IGNodW5rX3NpemUKKyAgICAgICAgICAgIGV2ZW50LnNldCgpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgZm9yIHRocmVhZG51bSBpbiB4cmFuZ2UobnVtX3RocmVhZHMpOgorICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IGxlbihkYXRhKSAvLyAoMTAqKnRocmVhZG51bSkKKyAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplID4gMAorICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSkgPT0gMAorICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWhhc2hfaW5fY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjaHVua19zaXplLCBldmVudCkpLnN0YXJ0KCkKKworICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgorICAgICAgICAgICAgZXZlbnQud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oYXNoLCBoYXNoZXIuaGV4ZGlnZXN0KCkpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hMaWJUZXN0Q2FzZSkKIAotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2hlYXBxLnB5IGIvTGliL3Rlc3QvdGVzdF9oZWFwcS5weQppbmRleCBlZmQxMDgwLi5lNGQyY2M4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hlYXBxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkKQEAgLTcsMjMgKzcsOCBAQAogCiAjIFdlIGRvIGEgYml0IG9mIHRyaWNrZXJ5IGhlcmUgdG8gYmUgYWJsZSB0byB0ZXN0IGJvdGggdGhlIEMgaW1wbGVtZW50YXRpb24KICMgYW5kIHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZHVsZS4KLQotIyBNYWtlIGl0IGltcG9zc2libGUgdG8gaW1wb3J0IHRoZSBDIGltcGxlbWVudGF0aW9uIGFueW1vcmUuCi1zeXMubW9kdWxlc1snX2hlYXBxJ10gPSAwCi0jIFdlIG11c3QgYWxzbyBoYW5kbGUgdGhlIGNhc2UgdGhhdCBoZWFwcSB3YXMgaW1wb3J0ZWQgYmVmb3JlLgotaWYgJ2hlYXBxJyBpbiBzeXMubW9kdWxlczoKLSAgICBkZWwgc3lzLm1vZHVsZXNbJ2hlYXBxJ10KLQotIyBOb3cgd2UgY2FuIGltcG9ydCB0aGUgbW9kdWxlIGFuZCBnZXQgdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgotaW1wb3J0IGhlYXBxIGFzIHB5X2hlYXBxCi0KLSMgUmVzdG9yZSBldmVyeXRoaW5nIHRvIG5vcm1hbC4KLWRlbCBzeXMubW9kdWxlc1snX2hlYXBxJ10KLWRlbCBzeXMubW9kdWxlc1snaGVhcHEnXQotCi0jIFRoaXMgaXMgbm93IHRoZSBtb2R1bGUgd2l0aCB0aGUgQyBpbXBsZW1lbnRhdGlvbi4KIGltcG9ydCBoZWFwcSBhcyBjX2hlYXBxCi0KK3B5X2hlYXBxID0gdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2hlYXBxJywgYmxvY2tlZD1bJ19oZWFwcSddKQogCiBjbGFzcyBUZXN0SGVhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgbW9kdWxlID0gTm9uZQpAQCAtNjEsNyArNDYsNyBAQAogICAgICAgICBmb3IgcG9zLCBpdGVtIGluIGVudW1lcmF0ZShoZWFwKToKICAgICAgICAgICAgIGlmIHBvczogIyBwb3MgMCBoYXMgbm8gcGFyZW50CiAgICAgICAgICAgICAgICAgcGFyZW50cG9zID0gKHBvcy0xKSA+PiAxCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhlYXBbcGFyZW50cG9zXSA8PSBpdGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoZWFwW3BhcmVudHBvc10gPD0gaXRlbSkKIAogICAgIGRlZiB0ZXN0X2hlYXBpZnkoc2VsZik6CiAgICAgICAgIGZvciBzaXplIGluIHJhbmdlKDMwKToKQEAgLTE5Myw2ICsxNzgsMTMgQEAKIGNsYXNzIFRlc3RIZWFwUHl0aG9uKFRlc3RIZWFwKToKICAgICBtb2R1bGUgPSBweV9oZWFwcQogCisgICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCisgICAgIyB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfcHVyZV9weXRob24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3lzLm1vZHVsZXNbJ2hlYXBxJ10gaXMgc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLmhlYXBpZnksICdmdW5jX2NvZGUnKSkKKworCiBjbGFzcyBUZXN0SGVhcEMoVGVzdEhlYXApOgogICAgIG1vZHVsZSA9IGNfaGVhcHEKIApAQCAtMjE3LDYgKzIwOSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhzb3J0KGRhdGEsIExUKSwgdGFyZ2V0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhzb3J0KGRhdGEsIExFKSwgdGFyZ2V0KQogCisgICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCisgICAgIyB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubW9kdWxlc1snaGVhcHEnXSBpcyBzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHNlbGYubW9kdWxlLmhlYXBpZnksICdmdW5jX2NvZGUnKSkKKwogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTMzMiwxNCArMzMwLDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMiwgTGVuT25seSgpKQogCiAgICAgZGVmIHRlc3RfZ2V0X29ubHkoc2VsZik6Ci0gICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgR2V0T25seSgpKQotICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcHB1c2gsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgR2V0T25seSgpLCAxMCkKLSAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLm5sYXJnZXN0LCBzZWxmLm1vZHVsZS5uc21hbGxlc3QpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAyLCBHZXRPbmx5KCkpCi0KLSAgICBkZWYgdGVzdF9nZXRfb25seShzZWxmKToKICAgICAgICAgc2VxID0gW0NtcEVycigpLCBDbXBFcnIoKSwgQ21wRXJyKCldCiAgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCBzZXEpCkBAIC0zNTgsNyArMzQ4LDcgQEAKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLm5sYXJnZXN0LCBzZWxmLm1vZHVsZS5uc21hbGxlc3QpOgogICAgICAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKICAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIEwsIFIpOgotICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNvbXBhcmluZyB1bmVxdWFsIHR5cGVzIG5vdCBzdXBwb3J0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1UcnVlKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigyLCBnKHMpKSwgZigyLHMpKQpAQCAtMzcyLDggKzM2Miw2IEBACiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGZyb20gdHlwZXMgaW1wb3J0IEJ1aWx0aW5GdW5jdGlvblR5cGUKLQogICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0SGVhcFB5dGhvbiwgVGVzdEhlYXBDLCBUZXN0RXJyb3JIYW5kbGluZ10KICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQppbmRleCBkOTc1ODNmLi5jZDE0OGU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2htYWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CkBAIC0yMTMsMTkgKzIxMywxMyBAQAogCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZVdhcm5pbmcpOgogICAgICAgICAgICAgICAgIGhtYWMuSE1BQygnYScsICdiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCi0gICAgICAgICAgICBleGNlcHQgUnVudGltZVdhcm5pbmc6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIHdhcm5pbmcgYWJvdXQgbWlzc2luZyBibG9ja19zaXplJykKIAogICAgICAgICAgICAgTW9ja0NyYXp5SGFzaC5ibG9ja19zaXplID0gMQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lV2FybmluZyk6CiAgICAgICAgICAgICAgICAgaG1hYy5ITUFDKCdhJywgJ2InLCBkaWdlc3Rtb2Q9TW9ja0NyYXp5SGFzaCkKLSAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lV2FybmluZzoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBzbWFsbCBibG9ja19zaXplJykKIAogCkBAIC0yNjAsNyArMjU0LDcgQEAKICAgICAgICAgIyBUZXN0aW5nIGlmIEhNQUMgZGVmYXVsdHMgdG8gTUQ1IGFsZ29yaXRobS4KICAgICAgICAgIyBOT1RFOiB0aGlzIHdoaXRlYm94IHRlc3QgZGVwZW5kcyBvbiB0aGUgaG1hYyBjbGFzcyBpbnRlcm5hbHMKICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGguZGlnZXN0X2NvbnMgPT0gaGFzaGxpYi5tZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLmRpZ2VzdF9jb25zID09IGhhc2hsaWIubWQ1KQogCiAgICAgZGVmIHRlc3RfZXhlcmNpc2VfYWxsX21ldGhvZHMoc2VsZik6CiAgICAgICAgICMgRXhlcmNpc2luZyBhbGwgbWV0aG9kcyBvbmNlLgpAQCAtMjgwLDExICsyNzQsMTEgQEAKICAgICAgICAgIyBUZXN0aW5nIGlmIGF0dHJpYnV0ZXMgYXJlIG9mIHNhbWUgdHlwZS4KICAgICAgICAgaDEgPSBobWFjLkhNQUMoImtleSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoMS5kaWdlc3RfY29ucyA9PSBoMi5kaWdlc3RfY29ucywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAogICAgICAgICAgICAgImRpZ2VzdCBjb25zdHJ1Y3RvcnMgZG9uJ3QgbWF0Y2guIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoaDEuaW5uZXIpID09IHR5cGUoaDIuaW5uZXIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShoMS5pbm5lcikgPT0gdHlwZShoMi5pbm5lciksCiAgICAgICAgICAgICAiVHlwZXMgb2YgaW5uZXIgZG9uJ3QgbWF0Y2guIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoaDEub3V0ZXIpID09IHR5cGUoaDIub3V0ZXIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShoMS5vdXRlcikgPT0gdHlwZShoMi5vdXRlciksCiAgICAgICAgICAgICAiVHlwZXMgb2Ygb3V0ZXIgZG9uJ3QgbWF0Y2guIikKIAogICAgIGRlZiB0ZXN0X3JlYWxjb3B5KHNlbGYpOgpAQCAtMjkyLDEwICsyODYsMTAgQEAKICAgICAgICAgaDEgPSBobWFjLkhNQUMoImtleSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgICMgVXNpbmcgaWQoKSBpbiBjYXNlIHNvbWVib2R5IGhhcyBvdmVycmlkZGVuIF9fY21wX18uCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpZChoMSkgIT0gaWQoaDIpLCAiTm8gcmVhbCBjb3B5IG9mIHRoZSBITUFDIGluc3RhbmNlLiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpZChoMS5pbm5lcikgIT0gaWQoaDIuaW5uZXIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEpICE9IGlkKGgyKSwgIk5vIHJlYWwgY29weSBvZiB0aGUgSE1BQyBpbnN0YW5jZS4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEuaW5uZXIpICE9IGlkKGgyLmlubmVyKSwKICAgICAgICAgICAgICJObyByZWFsIGNvcHkgb2YgdGhlIGF0dHJpYnV0ZSAnaW5uZXInLiIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpZChoMS5vdXRlcikgIT0gaWQoaDIub3V0ZXIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEub3V0ZXIpICE9IGlkKGgyLm91dGVyKSwKICAgICAgICAgICAgICJObyByZWFsIGNvcHkgb2YgdGhlIGF0dHJpYnV0ZSAnb3V0ZXInLiIpCiAKICAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKQEAgLTMwMyw5ICsyOTcsOSBAQAogICAgICAgICBoMSA9IGhtYWMuSE1BQygia2V5IikKICAgICAgICAgaDEudXBkYXRlKCJzb21lIHJhbmRvbSB0ZXh0IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGgxLmRpZ2VzdCgpID09IGgyLmRpZ2VzdCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuZGlnZXN0KCkgPT0gaDIuZGlnZXN0KCksCiAgICAgICAgICAgICAiRGlnZXN0IG9mIGNvcHkgZG9lc24ndCBtYXRjaCBvcmlnaW5hbCBkaWdlc3QuIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGgxLmhleGRpZ2VzdCgpID09IGgyLmhleGRpZ2VzdCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuaGV4ZGlnZXN0KCkgPT0gaDIuaGV4ZGlnZXN0KCksCiAgICAgICAgICAgICAiSGV4ZGlnZXN0IG9mIGNvcHkgZG9lc24ndCBtYXRjaCBvcmlnaW5hbCBoZXhkaWdlc3QuIikKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ob3RzaG90LnB5IGIvTGliL3Rlc3QvdGVzdF9ob3RzaG90LnB5CmluZGV4IDhhODliMzcuLjdkYTk3NDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaG90c2hvdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hvdHNob3QucHkKQEAgLTY1LDExICs2NSwxMSBAQAogICAgIGRlZiBydW5fdGVzdChzZWxmLCBjYWxsYWJsZSwgZXZlbnRzLCBwcm9maWxlcj1Ob25lKToKICAgICAgICAgaWYgcHJvZmlsZXIgaXMgTm9uZToKICAgICAgICAgICAgIHByb2ZpbGVyID0gc2VsZi5uZXdfcHJvZmlsZXIoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHByb2ZpbGVyLl9wcm9mLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm9maWxlci5fcHJvZi5jbG9zZWQpCiAgICAgICAgIHByb2ZpbGVyLnJ1bmNhbGwoY2FsbGFibGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3QgcHJvZmlsZXIuX3Byb2YuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHByb2ZpbGVyLl9wcm9mLmNsb3NlZCkKICAgICAgICAgcHJvZmlsZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocHJvZmlsZXIuX3Byb2YuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZmlsZXIuX3Byb2YuY2xvc2VkKQogICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhldmVudHMpCiAKICAgICBkZWYgdGVzdF9hZGRpbmZvKHNlbGYpOgpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBsb2cgPSBzZWxmLmdldF9sb2dyZWFkZXIoKQogICAgICAgICBpbmZvID0gbG9nLl9pbmZvCiAgICAgICAgIGxpc3QobG9nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5mb1sidGVzdC1rZXkiXSA9PSBbInRlc3QtdmFsdWUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm9bInRlc3Qta2V5Il0gPT0gWyJ0ZXN0LXZhbHVlIl0pCiAKICAgICBkZWYgdGVzdF9saW5lX251bWJlcnMoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWxsaWIucHkKaW5kZXggZTFmNDMzNC4uMDM4MTNiMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1sbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbGxpYi5weQpAQCAtMzgsMTEgKzM4LDExIEBACiAgICAgICAgICAgICA8YSBuYW1lPSdmcm9iJz4gPC9hPgogICAgICAgICAgICAgIiIiKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuZ2V0X2FuY2hvcl9pbmZvKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2h0dHA6Ly9mb28ub3JnLycsICdzcGxhdCcsICcnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3d3dy5weXRob24ub3JnLycsICcnLCAnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICdmcm9iJywgJycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X2FuY2hvcl9pbmZvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnaHR0cDovL2Zvby5vcmcvJywgJ3NwbGF0JywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nLCAnJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICdmcm9iJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogCiAgICAgZGVmIHRlc3RfZGVjbF9jb2xsZWN0aW9uKHNlbGYpOgogICAgICAgICAjIFNlZSBTRiBwYXRjaCAjNTQ1MzAwCkBAIC01NiwxMCArNTYsMTAgQEAKICAgICAgICAgICAgIDwvaHRtbD4KICAgICAgICAgICAgICIiIikKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmdldF9kZWNsX2luZm8oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyJpZiAhc3VwcG9ydEVtcHR5UGFyYXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X2RlY2xfaW5mbygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiaWYgIXN1cHBvcnRFbXB0eVBhcmFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlmIgorICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChIVE1MUGFyc2VyVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBjNDVjZjAwLi43MTc1ODVjCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKQEAgLTMyMCw2ICszMjAsMTEgQEAKICAgICAgICAgICAgICgiZW5kdGFnIiwgInAiKSwKICAgICAgICAgXSkKIAorICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBIVE1MUGFyc2VyLkhUTUxQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci51bmVzY2FwZSgnJiNiYWQ7JyksJyYjYmFkOycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnVuZXNjYXBlKCcmIzAwMzg7JyksJyYnKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhUTUxQYXJzZXJUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQppbmRleCA3MzBlODg1Li4yNzA4NzI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0xLDkgKzEsMTIgQEAKK2ltcG9ydCBodHRwbGliCiBpbXBvcnQgYXJyYXkKIGltcG9ydCBodHRwbGliCiBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzb2NrZXQKK2ltcG9ydCBlcnJubwogCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoraW1wb3J0IHVuaXR0ZXN0CitUZXN0Q2FzZSA9IHVuaXR0ZXN0LlRlc3RDYXNlCiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKQEAgLTIzLDYgKzI2LDIxIEBACiAgICAgICAgICAgICByYWlzZSBodHRwbGliLlVuaW1wbGVtZW50ZWRGaWxlTW9kZSgpCiAgICAgICAgIHJldHVybiBzZWxmLmZpbGVjbGFzcyhzZWxmLnRleHQpCiAKK2NsYXNzIEVQaXBlU29ja2V0KEZha2VTb2NrZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIHBpcGVfdHJpZ2dlcik6CisgICAgICAgICMgV2hlbiBzZW5kYWxsKCkgaXMgY2FsbGVkIHdpdGggcGlwZV90cmlnZ2VyLCByYWlzZSBFUElQRS4KKyAgICAgICAgRmFrZVNvY2tldC5fX2luaXRfXyhzZWxmLCB0ZXh0KQorICAgICAgICBzZWxmLnBpcGVfdHJpZ2dlciA9IHBpcGVfdHJpZ2dlcgorCisgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYucGlwZV90cmlnZ2VyIGluIGRhdGE6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQorICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKIGNsYXNzIE5vRU9GU3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgogICAgICIiIkxpa2UgU3RyaW5nSU8sIGJ1dCByYWlzZXMgQXNzZXJ0aW9uRXJyb3Igb24gRU9GLgogCkBAIC00Nyw4ICs2NSw2IEBACiAgICAgICAgICMgU29tZSBoZWFkZXJzIGFyZSBhZGRlZCBhdXRvbWF0aWNhbGx5LCBidXQgc2hvdWxkIG5vdCBiZSBhZGRlZCBieQogICAgICAgICAjIC5yZXF1ZXN0KCkgaWYgdGhleSBhcmUgZXhwbGljaXRseSBzZXQuCiAKLSAgICAgICAgaW1wb3J0IGh0dHBsaWIKLQogICAgICAgICBjbGFzcyBIZWFkZXJDb3VudGluZ0J1ZmZlcihsaXN0KToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ID0ge30KQEAgLTc0LDYgKzkwLDMzIEBACiAgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5LCBoZWFkZXJzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvdW50W2hlYWRlci5sb3dlcigpXSwgMSkKIAorICAgIGRlZiB0ZXN0X3B1dGhlYWRlcihzZWxmKToKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnB1dHJlcXVlc3QoJ0dFVCcsJy8nKQorICAgICAgICBjb25uLnB1dGhlYWRlcignQ29udGVudC1sZW5ndGgnLDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0NvbnRlbnQtbGVuZ3RoOiA0MicgaW4gY29ubi5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfaXB2Nmhvc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgaG9zdCBoZWFkZXIgb24gSVB2NiB0cmFuc2FjdGlvbiBzaG91bGQgd3JhcHBlZCBieSBbXSBpZgorICAgICAgICAjIGl0cyBhY3R1YWwgSVB2NiBhZGRyZXNzCisgICAgICAgIGV4cGVjdGVkID0gJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IFsyMDAxOjpdOjgxXHJcbicgXAorICAgICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5XHJcblxyXG4nCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdbMjAwMTo6XTo4MScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCcnKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5kYXRhLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisgICAgICAgIGV4cGVjdGVkID0gJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IFsyMDAxOjEwMkE6Ol1cclxuJyBcCisgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuXHJcbicKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ1syMDAxOjEwMkE6Ol0nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgnJykKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworCiBjbGFzcyBCYXNpY1Rlc3QoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3N0YXR1c19saW5lcyhzZWxmKToKICAgICAgICAgIyBUZXN0IEhUVFAgc3RhdHVzIGxpbmVzCkBAIC05MCw2ICsxMzMsMTAgQEAKICAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuQmFkU3RhdHVzTGluZSwgcmVzcC5iZWdpbikKIAorICAgIGRlZiB0ZXN0X2JhZF9zdGF0dXNfcmVwcihzZWxmKToKKyAgICAgICAgZXhjID0gaHR0cGxpYi5CYWRTdGF0dXNMaW5lKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZXhjKSwgJycnQmFkU3RhdHVzTGluZSgiXCdcJyIsKScnJykKKwogICAgIGRlZiB0ZXN0X3BhcnRpYWxfcmVhZHMoc2VsZik6CiAgICAgICAgICMgaWYgd2UgaGF2ZSBhIGxlbmdodCwgdGhlIHN5c3RlbSBrbm93cyB3aGVuIHRvIGNsb3NlIGl0c2VsZgogICAgICAgICAjIHNhbWUgYmVoYXZpb3VyIHRoYW4gd2hlbiB3ZSByZWFkIHRoZSB3aG9sZSB0aGluZyB3aXRoIHJlYWQoKQpAQCAtMTY5LDEzICsyMTYsMTMgQEAKICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKICAgICAgICAgY29ubi5zb2NrID0gc29jawogICAgICAgICBjb25uLnNlbmQoZXhwZWN0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzb2NrLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHNvY2suZGF0YSkKICAgICAgICAgc29jay5kYXRhID0gJycKICAgICAgICAgY29ubi5zZW5kKGFycmF5LmFycmF5KCdjJywgZXhwZWN0ZWQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgc29jay5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBzb2NrLmRhdGEpCiAgICAgICAgIHNvY2suZGF0YSA9ICcnCiAgICAgICAgIGNvbm4uc2VuZChTdHJpbmdJTy5TdHJpbmdJTyhleHBlY3RlZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBzb2NrLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHNvY2suZGF0YSkKIAogICAgIGRlZiB0ZXN0X2NodW5rZWQoc2VsZik6CiAgICAgICAgIGNodW5rZWRfc3RhcnQgPSAoCkBAIC0xODksNyArMjM2LDcgQEAKICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCiAgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCiAgICAgICAgIHJlc3AuYmVnaW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJ2hlbGxvIHdvcmxkJykKICAgICAgICAgcmVzcC5jbG9zZSgpCiAKICAgICAgICAgZm9yIHggaW4gKCcnLCAnZm9vXHJcbicpOgpAQCAtMTk5LDcgKzI0Niw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVzcC5yZWFkKCkKICAgICAgICAgICAgIGV4Y2VwdCBodHRwbGliLkluY29tcGxldGVSZWFkLCBpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGkucGFydGlhbCwgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkucGFydGlhbCwgJ2hlbGxvIHdvcmxkJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaSksJ0luY29tcGxldGVSZWFkKDExIGJ5dGVzIHJlYWQpJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpKSwnSW5jb21wbGV0ZVJlYWQoMTEgYnl0ZXMgcmVhZCknKQogICAgICAgICAgICAgZWxzZToKQEAgLTIxOSw5ICsyNjYsOSBAQAogICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgJzBcclxuJykKICAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iSEVBRCIpCiAgICAgICAgIHJlc3AuYmVnaW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNwLnJlYWQoKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3Auc3RhdHVzLCAyMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3AucmVhc29uLCAnT0snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnN0YXR1cywgMjAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhc29uLCAnT0snKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQogCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfY29udGVudF9sZW5ndGgoc2VsZik6CkBAIC0yMjksNyArMjc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiAtMVxyXG5cclxuSGVsbG9cclxuJykKICAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKICAgICAgICAgcmVzcC5iZWdpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3AucmVhZCgpLCAnSGVsbG9cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJ0hlbGxvXHJcbicpCiAgICAgICAgIHJlc3AuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9yZWFkKHNlbGYpOgpAQCAtMjM5LDcgKzI4Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3AucmVhZCgpCiAgICAgICAgIGV4Y2VwdCBodHRwbGliLkluY29tcGxldGVSZWFkIGFzIGk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpLnBhcnRpYWwsICdIZWxsb1xyXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLnBhcnRpYWwsICdIZWxsb1xyXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb21wbGV0ZVJlYWQoNyBieXRlcyByZWFkLCAzIG1vcmUgZXhwZWN0ZWQpIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGkpLApAQCAtMjQ5LDEwICsyOTYsOTMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3AuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZXBpcGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBFUGlwZVNvY2tldCgKKyAgICAgICAgICAgICJIVFRQLzEuMCA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZFxyXG4iCisgICAgICAgICAgICAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcclxuIgorICAgICAgICAgICAgIldXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPVwiZXhhbXBsZVwiXHJcbiIsCisgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oImV4YW1wbGUuY29tIikKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsICJib2R5IikpCisgICAgICAgIHJlc3AgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MDEsIHJlc3Auc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJCYXNpYyByZWFsbT1cImV4YW1wbGVcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5nZXRoZWFkZXIoInd3dy1hdXRoZW50aWNhdGUiKSkKKworICAgIGRlZiB0ZXN0X2ZpbGVub2F0dHIoc2VsZik6CisgICAgICAgICMgSnVzdCB0ZXN0IHRoZSBmaWxlbm8gYXR0cmlidXRlIGluIHRoZSBIVFRQUmVzcG9uc2UgT2JqZWN0LgorICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3AsJ2ZpbGVubycpLAorICAgICAgICAgICAgICAgICdIVFRQUmVzcG9uc2Ugc2hvdWxkIGV4cG9zZSBhIGZpbGVubyBhdHRyaWJ1dGUnKQorCisgICAgIyBUZXN0IGxpbmVzIG92ZXJmbG93aW5nIHRoZSBtYXggbGluZSBzaXplIChfTUFYTElORSBpbiBodHRwLmNsaWVudCkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX3N0YXR1c19saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBUZXN0KCJkaXNhYmxlZCBmb3IgSFRUUCAwLjkgc3VwcG9ydCIpCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rIiArICJrIiAqIDY1NTM2ICsgIlxyXG4iCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoaHR0cGxpYi5MaW5lVG9vTG9uZywgaHR0cGxpYi5CYWRTdGF0dXNMaW5lKSwgcmVzcC5iZWdpbikKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX2hlYWRlcl9saW5lKHNlbGYpOgorICAgICAgICBib2R5ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnWC1Gb286IGJhcicgKyAncicgKiA2NTUzNiArICdcclxuXHJcbicKKyAgICAgICAgKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2UoRmFrZVNvY2tldChib2R5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5MaW5lVG9vTG9uZywgcmVzcC5iZWdpbikKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX2NodW5rZWRfbGluZShzZWxmKToKKyAgICAgICAgYm9keSA9ICgKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgJ1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXHJcblxyXG4nCisgICAgICAgICAgICArICcwJyAqIDY1NTM2ICsgJ2FcclxuJworICAgICAgICAgICAgJ2hlbGxvIHdvcmxkXHJcbicKKyAgICAgICAgICAgICcwXHJcbicKKyAgICAgICAgKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2UoRmFrZVNvY2tldChib2R5KSkKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuTGluZVRvb0xvbmcsIHJlc3AucmVhZCkKKwogCiBjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhodHRwbGliLnJlc3BvbnNlc1todHRwbGliLk5PVF9GT1VORF0sICJOb3QgRm91bmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBsaWIucmVzcG9uc2VzW2h0dHBsaWIuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCisKKworY2xhc3MgU291cmNlQWRkcmVzc1Rlc3QoVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc2VydikKKyAgICAgICAgc2VsZi5zb3VyY2VfcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgc2VsZi5zZXJ2Lmxpc3Rlbig1KQorICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29ubjoKKyAgICAgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydiA9IE5vbmUKKworICAgIGRlZiB0ZXN0SFRUUENvbm5lY3Rpb25Tb3VyY2VBZGRyZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICBzZWxmLmNvbm4uY29ubmVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLnNvY2suZ2V0c29ja25hbWUoKVsxXSwgc2VsZi5zb3VyY2VfcG9ydCkKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaHR0cGxpYiwgJ0hUVFBTQ29ubmVjdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgJ2h0dHBsaWIuSFRUUFNDb25uZWN0aW9uIG5vdCBkZWZpbmVkJykKKyAgICBkZWYgdGVzdEhUVFBTQ29ubmVjdGlvblNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICAjIFdlIGRvbid0IHRlc3QgYW55dGhpbmcgaGVyZSBvdGhlciB0aGUgY29uc3RydWN0b3Igbm90IGJhcmZpbmcgYXMKKyAgICAgICAgIyB0aGlzIGNvZGUgZG9lc24ndCBkZWFsIHdpdGggc2V0dGluZyB1cCBhbiBhY3RpdmUgcnVubmluZyBTU0wgc2VydmVyCisgICAgICAgICMgZm9yIGFuIHNzbF93cmFwcGVkIGNvbm5lY3QoKSB0byBhY3R1YWxseSByZXR1cm4gZnJvbS4KKwogCiBjbGFzcyBUaW1lb3V0VGVzdChUZXN0Q2FzZSk6CiAgICAgUE9SVCA9IE5vbmUKQEAgLTI3MSw3ICs0MDEsNyBAQAogICAgICAgICBIVFRQQ29ubmVjdGlvbiBhbmQgaW50byB0aGUgc29ja2V0LgogICAgICAgICAnJycKICAgICAgICAgIyBkZWZhdWx0IC0tIHVzZSBnbG9iYWwgc29ja2V0IHRpbWVvdXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGh0dHBDb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihIT1NULCBUaW1lb3V0VGVzdC5QT1JUKQpAQCAtMjgyLDcgKzQxMiw3IEBACiAgICAgICAgIGh0dHBDb25uLmNsb3NlKCkKIAogICAgICAgICAjIG5vIHRpbWVvdXQgLS0gZG8gbm90IHVzZSBnbG9iYWwgc29ja2V0IGRlZmF1bHQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGh0dHBDb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihIT1NULCBUaW1lb3V0VGVzdC5QT1JULApAQCAtMzExLDcgKzQ0MSw3IEBACiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0LCBUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGltZW91dFRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1RpbWVvdXRUZXN0LCBTb3VyY2VBZGRyZXNzVGVzdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggNWM0ODY3MS4uY2M5YjkzYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC03LDE4ICs3LDIzIEBACiBmcm9tIEJhc2VIVFRQU2VydmVyIGltcG9ydCBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCBIVFRQU2VydmVyCiBmcm9tIFNpbXBsZUhUVFBTZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgogZnJvbSBDR0lIVFRQU2VydmVyIGltcG9ydCBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCBDR0lIVFRQU2VydmVyCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IHJlCiBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdXJsbGliCiBpbXBvcnQgaHR0cGxpYgogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGhyZWFkaW5nCiAKIGltcG9ydCB1bml0dGVzdAorCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKIAogY2xhc3MgTm9Mb2dSZXF1ZXN0SGFuZGxlcjoKQEAgLTI2LDYgKzMxLDIxIEBACiAgICAgICAgICMgZG9uJ3Qgd3JpdGUgbG9nIG1lc3NhZ2VzIHRvIHN0ZGVycgogICAgICAgICBwYXNzCiAKK2NsYXNzIFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcm90b2NvbF92ZXJzaW9uID0gIkhUVFAvMS4xIgorCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfY2FsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKKyAgICAgICAgcGFzcworCiAKIGNsYXNzIFRlc3RTZXJ2ZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rfb2JqZWN0LCByZXF1ZXN0X2hhbmRsZXIpOgpAQCAtNDksNiArNjksOCBAQAogCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBvcy5lbnZpcm9uID0gdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQogICAgICAgICBzZWxmLnNlcnZlcl9zdGFydGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi50aHJlYWQgPSBUZXN0U2VydmVyVGhyZWFkKHNlbGYsIHNlbGYucmVxdWVzdF9oYW5kbGVyKQogICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCkBAIC01NiwxMiArNzgsNzggQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi50aHJlYWQuc3RvcCgpCisgICAgICAgIG9zLmVudmlyb24uX19leGl0X18oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAKICAgICBkZWYgcmVxdWVzdChzZWxmLCB1cmksIG1ldGhvZD0nR0VUJywgYm9keT1Ob25lLCBoZWFkZXJzPXt9KToKICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VsZi5QT1JUKQogICAgICAgICBzZWxmLmNvbm5lY3Rpb24ucmVxdWVzdChtZXRob2QsIHVyaSwgYm9keSwgaGVhZGVycykKICAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbi5nZXRyZXNwb25zZSgpCiAKK2NsYXNzIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgZnVuY3Rpb25haWxpdHkgb2YgdGhlIEJhc2VIVFRQU2VydmVyIGZvY3Vzc2luZyBvbgorICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuCisgICAgIiIiCisKKyAgICBIVFRQUmVzcG9uc2VNYXRjaCA9IHJlLmNvbXBpbGUoJ0hUVFAvMS5bMC05XSsgMjAwIE9LJykKKworICAgIGRlZiBzZXRVcCAoc2VsZik6CisgICAgICAgIHNlbGYuaGFuZGxlciA9IFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcigpCisKKyAgICBkZWYgc2VuZF90eXBpY2FsX3JlcXVlc3Qoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8obWVzc2FnZSkKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmhhbmRsZXIucmZpbGUgPSBpbnB1dAorICAgICAgICBzZWxmLmhhbmRsZXIud2ZpbGUgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCgpCisgICAgICAgIG91dHB1dC5zZWVrKDApCisgICAgICAgIHJldHVybiBvdXRwdXQucmVhZGxpbmVzKCkKKworICAgIGRlZiB2ZXJpZnlfZ2V0X2NhbGxlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCisgICAgZGVmIHZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBmb3IgZmllbGROYW1lIGluICdTZXJ2ZXI6ICcsICdEYXRlOiAnLCAnQ29udGVudC1UeXBlOiAnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oaC5zdGFydHN3aXRoKGZpZWxkTmFtZSkgZm9yIGggaW4gaGVhZGVycyksIDEpCisKKyAgICBkZWYgdmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLkhUVFBSZXNwb25zZU1hdGNoLnNlYXJjaChyZXNwb25zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3RfaHR0cF8xXzEoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoJ0dFVCAvIEhUVFAvMS4xXHJcblxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9odHRwX3NlcnZlcl9yZXNwb25zZShyZXN1bHRbMF0pCisgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCAnPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisKKyAgICBkZWYgdGVzdF9odHRwXzFfMChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X2h0dHBfMF85KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzAuOVxyXG5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisKKyAgICBkZWYgdGVzdF93aXRoX2NvbnRpbnVlXzFfMChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjBcclxuRXhwZWN0OiAxMDAtY29udGludWVcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDcxNDogaHVnZSByZXF1ZXN0IGxpbmVzIGFyZSBkaXNjYXJkZWQsIHRvIGF2b2lkIERlbmlhbAorICAgICAgICAjIG9mIFNlcnZpY2UgYXR0YWNrcy4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAnICsgYid4JyAqIDY1NTM3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSA0MTQgUmVxdWVzdC1VUkkgVG9vIExvbmdcclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmhhbmRsZXIuZ2V0X2NhbGxlZCkKKwogCiBjbGFzcyBCYXNlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgpAQCAtOTcsNDIgKzE4NSw0MiBAQAogICAgIGRlZiB0ZXN0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQogCiAgICAgZGVmIHRlc3RfcmVxdWVzdF9saW5lX3RyaW1taW5nKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvMS4xXG4nCiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fYm9ndXMoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnRlVCQVInCiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fZGlnaXRzKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvOS45LjknCiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZV9nZXQoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDUwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX25vbmUoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdQVVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDQwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2ludmFsaWQoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3ZzbiA9IDk5CkBAIC0xNDAsMjEgKzIyOCwyMSBAQAogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDUwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDUpCiAKICAgICBkZWYgdGVzdF9zZW5kX2JsYW5rKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnJywgJycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDQwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24ucHV0aGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X2hlYWRfa2VlcF9hbGl2ZShzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzEuMScKQEAgLTE2MiwyOCArMjUwLDI5IEBACiAgICAgICAgIHNlbGYuY29uLnB1dGhlYWRlcignQ29ubmVjdGlvbicsICdrZWVwLWFsaXZlJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgNTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ1RFU1QnLCAnLycpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLnN0YXR1cywgMjA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDIwNCkKIAogICAgIGRlZiB0ZXN0X3JldHVybl9oZWFkZXJfa2VlcF9hbGl2ZShzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnS0VFUCcsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuZ2V0aGVhZGVyKCdDb25uZWN0aW9uJyksICdrZWVwLWFsaXZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdDb25uZWN0aW9uJyksICdrZWVwLWFsaXZlJykKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnVEVTVCcsICcvJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY29uLmNsb3NlKQogCiAgICAgZGVmIHRlc3RfaW50ZXJuYWxfa2V5X2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdLRVlFUlJPUicsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2N1c3RvbV9zdGF0dXMoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0NVU1RPTScsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQogCiAKIGNsYXNzIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgpAQCAtMjE0LDkgKzMwMyw5IEBACiAKICAgICBkZWYgY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24oc2VsZiwgcmVzcG9uc2UsIHN0YXR1cywgZGF0YT1Ob25lKToKICAgICAgICAgYm9keSA9IHJlc3BvbnNlLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVzcG9uc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVzcG9uc2UucmVhc29uICE9IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXMsIHN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVzcG9uc2UucmVhc29uKQogICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBib2R5KQogCkBAIC0yNzcsOCArMzY2LDggQEAKIHByaW50CiAKIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKLXByaW50ICIlJXMsICUlcywgJSVzIiAlJSAoZm9ybS5nZXRmaXJzdCgic3BhbSIpLCBmb3JtLmdldGZpcnN0KCJlZ2dzIiksXAotICAgICAgICAgICAgICBmb3JtLmdldGZpcnN0KCJiYWNvbiIpKQorcHJpbnQgIiUlcywgJSVzLCAlJXMiICUlIChmb3JtLmdldGZpcnN0KCJzcGFtIiksIGZvcm0uZ2V0Zmlyc3QoImVnZ3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXRmaXJzdCgiYmFjb24iKSkKICIiIgogCiBjbGFzcyBDR0lIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKQEAgLTMyNCw0MyArNDEzLDExNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgQmFzZVRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKKyAgICBkZWYgdGVzdF91cmxfY29sbGFwc2VfcGF0aF9zcGxpdChzZWxmKToKKyAgICAgICAgdGVzdF92ZWN0b3JzID0geworICAgICAgICAgICAgJyc6ICgnLycsICcnKSwKKyAgICAgICAgICAgICcuLic6IEluZGV4RXJyb3IsCisgICAgICAgICAgICAnLy4vLy4uJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvJzogKCcvJywgJycpLAorICAgICAgICAgICAgJy8vJzogKCcvJywgJycpLAorICAgICAgICAgICAgJy9cXCc6ICgnLycsICdcXCcpLAorICAgICAgICAgICAgJy8uLy8nOiAoJy8nLCAnJyksCisgICAgICAgICAgICAnY2dpLWJpbi9maWxlMS5weSc6ICgnL2NnaS1iaW4nLCAnZmlsZTEucHknKSwKKyAgICAgICAgICAgICcvY2dpLWJpbi9maWxlMS5weSc6ICgnL2NnaS1iaW4nLCAnZmlsZTEucHknKSwKKyAgICAgICAgICAgICdhJzogKCcvJywgJ2EnKSwKKyAgICAgICAgICAgICcvYSc6ICgnLycsICdhJyksCisgICAgICAgICAgICAnLy9hJzogKCcvJywgJ2EnKSwKKyAgICAgICAgICAgICcuL2EnOiAoJy8nLCAnYScpLAorICAgICAgICAgICAgJy4vQzovJzogKCcvQzonLCAnJyksCisgICAgICAgICAgICAnL2EvYic6ICgnL2EnLCAnYicpLAorICAgICAgICAgICAgJy9hL2IvJzogKCcvYS9iJywgJycpLAorICAgICAgICAgICAgJy9hL2IvYy8uLic6ICgnL2EvYicsICcnKSwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZCc6ICgnL2EvYicsICdkJyksCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi9mJzogKCcvYS9iL2QnLCAnZicpLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vZic6ICgnL2EvYicsICdmJyksCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLy4vLi8uLi8vZic6ICgnL2EvYicsICdmJyksCisgICAgICAgICAgICAnLi4vYS9iL2MvLi4vZC9lLy4uLy4vLi8uLy4uLy9mJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uL2YnOiAoJy9hJywgJ2YnKSwKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uLy4uL2YnOiAoJy8nLCAnZicpLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vLi4vLi4vZic6IEluZGV4RXJyb3IsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi8uLi8uLi9mLy4uJzogKCcvJywgJycpLAorICAgICAgICB9CisgICAgICAgIGZvciBwYXRoLCBleHBlY3RlZCBpbiB0ZXN0X3ZlY3RvcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhleHBlY3RlZCwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0lIVFRQU2VydmVyLl91cmxfY29sbGFwc2VfcGF0aF9zcGxpdCwgcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0dWFsID0gQ0dJSFRUUFNlcnZlci5fdXJsX2NvbGxhcHNlX3BhdGhfc3BsaXQocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3BhdGggPSAlclxuR290OiAgICAlclxuV2FudGVkOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQpKQorCiAgICAgZGVmIHRlc3RfaGVhZGVyc19hbmRfY29udGVudChzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgnSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLCBcCi0gICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCiAKICAgICBkZWYgdGVzdF9wb3N0KHNlbGYpOgogICAgICAgICBwYXJhbXMgPSB1cmxsaWIudXJsZW5jb2RlKHsnc3BhbScgOiAxLCAnZWdncycgOiAncHl0aG9uJywgJ2JhY29uJyA6IDEyMzQ1Nn0pCiAgICAgICAgIGhlYWRlcnMgPSB7J0NvbnRlbnQtdHlwZScgOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30KICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMi5weScsICdQT1NUJywgcGFyYW1zLCBoZWFkZXJzKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5yZWFkKCksICcxLCBweXRob24sIDEyMzQ1NlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMucmVhZCgpLCAnMSwgcHl0aG9uLCAxMjM0NTZcbicpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkdXJpKHNlbGYpOgogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ludmFsaWQnKQogICAgICAgICByZXMucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDQpCiAKICAgICBkZWYgdGVzdF9hdXRob3JpemF0aW9uKHNlbGYpOgotICAgICAgICBoZWFkZXJzID0geydBdXRob3JpemF0aW9uJyA6ICdCYXNpYyAlcycgJSBcCi0gICAgICAgICAgICAgICAgYmFzZTY0LmI2NGVuY29kZSgndXNlcm5hbWU6cGFzcycpfQorICAgICAgICBoZWFkZXJzID0geydBdXRob3JpemF0aW9uJyA6ICdCYXNpYyAlcycgJQorICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iNjRlbmNvZGUoJ3VzZXJuYW1lOnBhc3MnKX0KICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScsICdHRVQnLCBoZWFkZXJzPWhlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgnSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLCBcCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKworICAgIGRlZiB0ZXN0X25vX2xlYWRpbmdfc2xhc2goc2VsZik6CisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyNTQKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCdjZ2ktYmluL2ZpbGUxLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCisgICAgZGVmIHRlc3Rfb3NfZW52aXJvbl9pc19ub3RfYWx0ZXJlZChzZWxmKToKKyAgICAgICAgc2lnbmF0dXJlID0gIlRlc3QgQ0dJIFNlcnZlciIKKyAgICAgICAgb3MuZW52aXJvblsnU0VSVkVSX1NPRlRXQVJFJ10gPSBzaWduYXR1cmUKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZW52aXJvblsnU0VSVkVSX1NPRlRXQVJFJ10sIHNpZ25hdHVyZSkKKworCitjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3QgdXJsIHBhcnNpbmcgIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5wYXRoLmpvaW4oc2VsZi50cmFuc2xhdGVkLCAnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoKQorCisgICAgZGVmIHRlc3RfcXVlcnlfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnL2ZpbGVuYW1lP2E9YiZzcGFtPWVnZ3Mjem90JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisKKyAgICBkZWYgdGVzdF9zdGFydF93aXRoX2RvdWJsZV9zbGFzaChzZWxmKToKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnLy9maWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgIHRyeToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCYXNlSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlSFRUUFNlcnZlclRlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0lIVFRQU2VydmVyVGVzdENhc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgZmluYWxseToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQotICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKLSAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoZW52KQogICAgICAgICBvcy5jaGRpcihjd2QpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkgYi9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkKaW5kZXggOTA2M2IyMi4uNTYzMjBmYiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFnZW9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hZ2VvcC5weQpAQCAtMTgwLDYgKzE4MCw3IEBACiAgICAgIiIicmV0dXJuIGEgdHVwbGUgY29uc2lzdGluZyBvZgogICAgICAgIGltYWdlIChpbiAnaW1nZmlsZScgZm9ybWF0KSB3aWR0aCBhbmQgaGVpZ2h0CiAgICAgIiIiCisgICAgaW1wb3J0IGltZ2ZpbGUKICAgICB0cnk6CiAgICAgICAgIHNpemVzID0gaW1nZmlsZS5nZXRzaXplcyhuYW1lKQogICAgIGV4Y2VwdCBpbWdmaWxlLmVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CmluZGV4IGYyODhlZjAuLjE1YjBlYTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKQEAgLTcsMTMgKzcsMTAgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIGltcG9ydCBpbWFwbGliCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHNlbGVjdAotaW1wb3J0IHNvY2tldAogaW1wb3J0IFNvY2tldFNlcnZlcgotaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCByZWFwX3RocmVhZHMsIHZlcmJvc2UsIHRyYW5zaWVudF9pbnRlcm5ldAogaW1wb3J0IHVuaXR0ZXN0CiAKIHRyeToKQEAgLTU3LDIwICs1NCwxMSBAQAogCiAgICAgSU1BUDRfU1NMID0gTm9uZQogCi1jbGFzcyBUaW1lb3V0U3RyZWFtUmVxdWVzdEhhbmRsZXIoU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKToKKworY2xhc3MgU2ltcGxlSU1BUEhhbmRsZXIoU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKToKIAogICAgIHRpbWVvdXQgPSAxCiAKLSAgICBkZWYgc2V0dXAoc2VsZik6Ci0gICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNlbGYucmVxdWVzdAotICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2V0dGltZW91dChzZWxmLnRpbWVvdXQpCi0gICAgICAgIHNlbGYucmZpbGUgPSBzZWxmLmNvbm5lY3Rpb24ubWFrZWZpbGUoJ3JiJywgc2VsZi5yYnVmc2l6ZSkKLSAgICAgICAgc2VsZi53ZmlsZSA9IHNlbGYuY29ubmVjdGlvbi5tYWtlZmlsZSgnd2InLCBzZWxmLndidWZzaXplKQotCi0KLWNsYXNzIFNpbXBsZUlNQVBIYW5kbGVyKFRpbWVvdXRTdHJlYW1SZXF1ZXN0SGFuZGxlcik6Ci0KICAgICBkZWYgX3NlbmQoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJTRU5UOiIsIG1lc3NhZ2Uuc3RyaXAoKQogICAgICAgICBzZWxmLndmaWxlLndyaXRlKG1lc3NhZ2UpCkBAIC0xMTEsNiArOTksNyBAQAogICAgICAgICBzZWxmLl9zZW5kKCcqIENBUEFCSUxJVFkgSU1BUDRyZXYxXHJcbicpCiAgICAgICAgIHNlbGYuX3NlbmQoJyVzIE9LIENBUEFCSUxJVFkgY29tcGxldGVkXHJcbicgJSAodGFnLCkpCiAKKwogY2xhc3MgQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGFkZHIsIGhkbHIpOgpAQCAtMTIzLDcgKzExMiw3IEBACiAKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgImNyZWF0aW5nIHNlcnZlciIKICAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoYWRkciwgaGRscikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkpCiAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICJzZXJ2ZXIgY3JlYXRlZCIKQEAgLTE1NywzNyArMTQ2LDc3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnJlYXBfc2VydmVyKHNlcnZlciwgdGhyZWFkKQogCisgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmltYXBfY2xhc3MoKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKICAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCiAKKyAgICBAcmVhcF90aHJlYWRzCiAgICAgZGVmIHRlc3RfaXNzdWU1OTQ5KHNlbGYpOgogCi0gICAgICAgIGNsYXNzIEVPRkhhbmRsZXIoVGltZW91dFN0cmVhbVJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgY2xhc3MgRU9GSGFuZGxlcihTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAgICAgZGVmIGhhbmRsZShzZWxmKToKICAgICAgICAgICAgICAgICAjIEVPRiB3aXRob3V0IHNlbmRpbmcgYSBjb21wbGV0ZSB3ZWxjb21lIG1lc3NhZ2UuCiAgICAgICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnKiBPSycpCi0gICAgICAgICAgICAgICAgIyBleHBsaWNpdGx5IHNodXRkb3duLiAgc29ja2V0LmNsb3NlKCkgbWVyZWx5IHJlbGVhc2VzCi0gICAgICAgICAgICAgICAgIyB0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgotICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKIAogICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3NlcnZlcihFT0ZIYW5kbGVyKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmFib3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFwX2NsYXNzLCAqc2VydmVyLnNlcnZlcl9hZGRyZXNzKQogCisKIGNsYXNzIFRocmVhZGVkTmV0d29ya2VkVGVzdHMoQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHMpOgogCiAgICAgc2VydmVyX2NsYXNzID0gU29ja2V0U2VydmVyLlRDUFNlcnZlcgogICAgIGltYXBfY2xhc3MgPSBpbWFwbGliLklNQVA0CiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAiU1NMIG5vdCBhdmFpbGFibGUiKQogY2xhc3MgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTChCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyk6CiAKICAgICBzZXJ2ZXJfY2xhc3MgPSBTZWN1cmVUQ1BTZXJ2ZXIKICAgICBpbWFwX2NsYXNzID0gSU1BUDRfU1NMCiAKIAorY2xhc3MgUmVtb3RlSU1BUFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGhvc3QgPSAnY3lydXMuYW5kcmV3LmNtdS5lZHUnCisgICAgcG9ydCA9IDE0MworICAgIHVzZXJuYW1lID0gJ2Fub255bW91cycKKyAgICBwYXNzd29yZCA9ICdwYXNzJworICAgIGltYXBfY2xhc3MgPSBpbWFwbGliLklNQVA0CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHdpdGggdHJhbnNpZW50X2ludGVybmV0KHNlbGYuaG9zdCk6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuaW1hcF9jbGFzcyhzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5sb2dvdXQoKQorCisgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0xPR0lORElTQUJMRUQnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKworICAgIGRlZiB0ZXN0X2Fub25sb2dpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdBVVRIPUFOT05ZTU9VUycgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorICAgICAgICBycyA9IHNlbGYuc2VydmVyLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdPSycpCisKKyAgICBkZWYgdGVzdF9sb2dvdXQoc2VsZik6CisgICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9nb3V0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdCWUUnKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgIlNTTCBub3QgYXZhaWxhYmxlIikKK2NsYXNzIFJlbW90ZUlNQVBfU1NMVGVzdChSZW1vdGVJTUFQVGVzdCk6CisgICAgcG9ydCA9IDk5MworICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKKworICAgIGRlZiB0ZXN0X2xvZ2luY2FwYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnTE9HSU5ESVNBQkxFRCcgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0FVVEg9UExBSU4nIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdHMgPSBbVGVzdEltYXBsaWJdCiAKQEAgLTE5OCwxNCArMjI3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydC5wZW0iKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKENFUlRGSUxFKToKICAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZXMhIikKLSAgICAgICAgICAgIHRlc3RzLmFwcGVuZChUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMKQotICAgICAgICB0ZXN0cy5hcHBlbmQoVGhyZWFkZWROZXR3b3JrZWRUZXN0cykKLQotICAgIHRocmVhZGluZm8gPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHRlc3RzLmV4dGVuZChbCisgICAgICAgICAgICBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzLCBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMLAorICAgICAgICAgICAgUmVtb3RlSU1BUFRlc3QsIFJlbW90ZUlNQVBfU1NMVGVzdCwKKyAgICAgICAgXSkKIAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKIAotICAgIHN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZGluZm8pCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWyduZXR3b3JrJ10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKaW5kZXggYzk2ODJhYi4uNzdlNDRiZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKQEAgLTgsNyArOCw3IEBACiAgICAgIiIiVmVyeSBiYXNpYyB0ZXN0IG9mIGltcG9ydCBsb2NrIGZ1bmN0aW9ucy4iIiIKIAogICAgIGRlZiB2ZXJpZnlfbG9ja19zdGF0ZShzZWxmLCBleHBlY3RlZCk6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGltcC5sb2NrX2hlbGQoKSwgZXhwZWN0ZWQsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmxvY2tfaGVsZCgpLCBleHBlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGltcC5sb2NrX2hlbGQoKSB0byBiZSAlciIgJSBleHBlY3RlZCkKICAgICBkZWYgdGVzdExvY2soc2VsZik6CiAgICAgICAgIExPT1BTID0gNTAKQEAgLTQzLDE2ICs0MywyNiBAQAogICAgIHJlbG9hZCgpLiIiIgogCiAgICAgZGVmIHRlc3Rfc291cmNlKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaW1wLnJlbG9hZChvcykKKyAgICAgICAgIyBYWFggKG5jb2dobGFuKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgdGVzdF9zdXBwb3J0LkNsZWFuSW1wb3J0CisgICAgICAgICMgaGVyZSwgYnV0IHRoYXQgYnJlYWtzIGJlY2F1c2UgdGhlIG9zIG1vZHVsZSByZWdpc3RlcnMgc29tZQorICAgICAgICAjIGhhbmRsZXJzIGluIGNvcHlfcmVnIG9uIGltcG9ydC4gU2luY2UgQ2xlYW5JbXBvcnQgZG9lc24ndAorICAgICAgICAjIHJldmVydCB0aGF0IHJlZ2lzdHJhdGlvbiwgdGhlIG1vZHVsZSBpcyBsZWZ0IGluIGEgYnJva2VuCisgICAgICAgICMgc3RhdGUgYWZ0ZXIgcmV2ZXJzaW9uLiBSZWluaXRpYWxpc2luZyB0aGUgbW9kdWxlIGNvbnRlbnRzCisgICAgICAgICMgYW5kIGp1c3QgcmV2ZXJ0aW5nIG9zLmVudmlyb24gdG8gaXRzIHByZXZpb3VzIHN0YXRlIGlzIGFuIE9LCisgICAgICAgICMgd29ya2Fyb3VuZAorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCk6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcC5yZWxvYWQob3MpCiAKICAgICBkZWYgdGVzdF9leHRlbnNpb24oc2VsZik6Ci0gICAgICAgIGltcG9ydCB0aW1lCi0gICAgICAgIGltcC5yZWxvYWQodGltZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ3RpbWUnKToKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXAucmVsb2FkKHRpbWUpCiAKICAgICBkZWYgdGVzdF9idWlsdGluKHNlbGYpOgotICAgICAgICBpbXBvcnQgbWFyc2hhbAotICAgICAgICBpbXAucmVsb2FkKG1hcnNoYWwpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkNsZWFuSW1wb3J0KCdtYXJzaGFsJyk6CisgICAgICAgICAgICBpbXBvcnQgbWFyc2hhbAorICAgICAgICAgICAgaW1wLnJlbG9hZChtYXJzaGFsKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKaW5kZXggNjAzNDZhYi4uNTc1MTkwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKQEAgLTEsMTYgKzEsMTUgQEAKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN5cwotaW1wb3J0IHB5X2NvbXBpbGUKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBpbXAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICh1bmxpbmssIFRFU1RGTiwgdW5sb2FkLCBydW5fdW5pdHRlc3QsCi0gICAgY2hlY2tfd2FybmluZ3MsIFRlc3RGYWlsZWQpCi0KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAodW5saW5rLCBURVNURk4sIHVubG9hZCwgcnVuX3VuaXR0ZXN0LCBybXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfanl0aG9uLCBjaGVja193YXJuaW5ncywgRW52aXJvbm1lbnRWYXJHdWFyZCkKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIGRlZiByZW1vdmVfZmlsZXMobmFtZSk6CiAgICAgZm9yIGYgaW4gKG5hbWUgKyBvcy5leHRzZXAgKyAicHkiLApAQCAtMTgsMTUgKzE3LDE4IEBACiAgICAgICAgICAgICAgIG5hbWUgKyBvcy5leHRzZXAgKyAicHlvIiwKICAgICAgICAgICAgICAgbmFtZSArIG9zLmV4dHNlcCArICJweXciLAogICAgICAgICAgICAgICBuYW1lICsgIiRweS5jbGFzcyIpOgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShmKQorICAgICAgICB1bmxpbmsoZikKIAogCi1jbGFzcyBJbXBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0Q2FzZVNlbnNpdGl2aXR5KHNlbGYpOgotICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdCB0aGlzCi0gICAgICAgICMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICBzZXRVcCA9IHRlYXJEb3duCisKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdAorICAgICAgICAjIHRoaXMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgUkFuRG9NCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTM0LDE2MyArMzYsMTYyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBvZiBSQW5Eb00gc2hvdWxkIGhhdmUgZmFpbGVkIChjYXNlIG1pc21hdGNoKSIpCiAKLSAgICBkZWYgdGVzdERvdWJsZUNvbnN0KHNlbGYpOgotICAgICAgICAjIEFub3RoZXIgYnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoZSBhY2N1cmFjeSBvZiBtYW5pZmVzdCBmbG9hdCBjb25zdGFudHMuCisgICAgZGVmIHRlc3RfZG91YmxlX2NvbnN0KHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgYnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoZSBhY2N1cmFjeSBvZiBtYW5pZmVzdCBmbG9hdAorICAgICAgICAjIGNvbnN0YW50cy4KICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBkb3VibGVfY29uc3QgICMgZG9uJ3QgYmxpbmsgLS0gdGhhdCAqd2FzKiB0aGUgdGVzdAogCi0gICAgZGVmIHRlc3RJbXBvcnQoc2VsZik6CisgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgogICAgICAgICBkZWYgdGVzdF93aXRoX2V4dGVuc2lvbihleHQpOgotICAgICAgICAgICAgIyBleHQgbm9ybWFsbHkgIi5weSI7IHBlcmhhcHMgIi5weXciCisgICAgICAgICAgICAjIFRoZSBleHRlbnNpb24gaXMgbm9ybWFsbHkgIi5weSIsIHBlcmhhcHMgIi5weXciLgogICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgZXh0CiAgICAgICAgICAgICBweW8gPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHlvIgotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgIGlmIGlzX2p5dGhvbjoKICAgICAgICAgICAgICAgICBweWMgPSBURVNURk4gKyAiJHB5LmNsYXNzIgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBweWMgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHljIgogCi0gICAgICAgICAgICBmID0gb3Blbihzb3VyY2UsICJ3IikKLSAgICAgICAgICAgIHByaW50ID4+IGYsICIjIFRoaXMgdGVzdHMgUHl0aG9uJ3MgYWJpbGl0eSB0byBpbXBvcnQgYSIsIGV4dCwgImZpbGUuIgotICAgICAgICAgICAgYSA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKLSAgICAgICAgICAgIGIgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCi0gICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IiwgYQotICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSIsIGIKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICgiIyBUaGlzIHRlc3RzIFB5dGhvbidzIGFiaWxpdHkgdG8gaW1wb3J0IGEiLCBleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlLiIpCisgICAgICAgICAgICAgICAgYSA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgICAgICBiID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJhID0iLCBhCisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSIsIGIKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgZnJvbSAlcyBmYWlsZWQ6ICVzIiAlIChleHQsIGVycikpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCBhLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmEsIGEsCiAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgbG9hZGVkICglcykgYnV0IGNvbnRlbnRzIGludmFsaWQiICUgbW9kKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5iLCBiLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIGIsCiAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgbG9hZGVkICglcykgYnV0IGNvbnRlbnRzIGludmFsaWQiICUgbW9kKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy51bmxpbmsoc291cmNlKQorICAgICAgICAgICAgICAgIHVubGluayhzb3VyY2UpCiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbXAucmVsb2FkKG1vZCkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IGZyb20gLnB5Yy8ucHlvIGZhaWxlZDogJXMiICUgZXJyKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhweWMpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhweW8pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbVEVTVEZOXQorICAgICAgICAgICAgICAgIHVubGluayhweWMpCisgICAgICAgICAgICAgICAgdW5saW5rKHB5bykKKyAgICAgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQogCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3Rfd2l0aF9leHRlbnNpb24ob3MuZXh0c2VwICsgInB5IikKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKLSAgICAgICAgICAgICAgICBmb3IgZXh0IGluICIuUFkiLCAiLlB5IiwgIi5wWSIsICIucHl3IiwgIi5QWVciLCAiLnBZdyI6CisgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiBbIi5QWSIsICIuUHkiLCAiLnBZIiwgIi5weXciLCAiLlBZVyIsICIucFl3Il06CiAgICAgICAgICAgICAgICAgICAgIHRlc3Rfd2l0aF9leHRlbnNpb24oZXh0KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKLSAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgICAgIGRlZiB0ZXN0X2V4ZWN1dGVfYml0X25vdF9jb3BpZWQoc2VsZik6Ci0gICAgICAgICAgICAjIElzc3VlIDYwNzA6IHVuZGVyIHBvc2l4IC5weWMgZmlsZXMgZ290IHRoZWlyIGV4ZWN1dGUgYml0IHNldCBpZgotICAgICAgICAgICAgIyB0aGUgLnB5IGZpbGUgaGFkIHRoZSBleGVjdXRlIGJpdCBzZXQsIGJ1dCB0aGV5IGFyZW4ndCBleGVjdXRhYmxlLgotICAgICAgICAgICAgb2xkbWFzayA9IG9zLnVtYXNrKDAyMikKLSAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm5hbWUgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCi0gICAgICAgICAgICAgICAgZiA9IG9wZW4oZm5hbWUsICd3JykuY2xvc2UoKQotICAgICAgICAgICAgICAgIG9zLmNobW9kKGZuYW1lLCAoc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JWFVTUiB8IHN0YXQuU19JWEdSUCB8IHN0YXQuU19JWE9USCkpCi0gICAgICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgICAgICAgICAgZm4gPSBmbmFtZSArICdjJworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgInRlc3QgbWVhbmluZ2Z1bCBvbmx5IG9uIHBvc2l4IHN5c3RlbXMiKQorICAgIGRlZiB0ZXN0X2V4ZWN1dGVfYml0X25vdF9jb3BpZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgNjA3MDogdW5kZXIgcG9zaXggLnB5YyBmaWxlcyBnb3QgdGhlaXIgZXhlY3V0ZSBiaXQgc2V0IGlmCisgICAgICAgICMgdGhlIC5weSBmaWxlIGhhZCB0aGUgZXhlY3V0ZSBiaXQgc2V0LCBidXQgdGhleSBhcmVuJ3QgZXhlY3V0YWJsZS4KKyAgICAgICAgb2xkbWFzayA9IG9zLnVtYXNrKDAyMikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm5hbWUgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgICAgICBmID0gb3BlbihmbmFtZSwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgKHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JWFVTUiB8IHN0YXQuU19JWEdSUCB8IHN0YXQuU19JWE9USCkpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgIGZuID0gZm5hbWUgKyAnYycKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgICAgICAgICAgZm4gPSBmbmFtZSArICdvJwogICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5hbWUgKyAnbycKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKTogcmFpc2UgVGVzdEZhaWxlZCgiX19pbXBvcnRfXyBkaWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgZWl0aGVyIGEgLnB5YyBvciAucHlvIGZpbGUiKQotICAgICAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZuKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0YXQuU19JTU9ERShzLnN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MudW1hc2sob2xkbWFzaykKLSAgICAgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQotICAgICAgICAgICAgICAgIGlmIFRFU1RGTiBpbiBzeXMubW9kdWxlczogZGVsIHN5cy5tb2R1bGVzW1RFU1RGTl0KLSAgICAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2ltcG9ydF9fIGRpZCBub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaXRoZXIgYSAucHljIG9yIC5weW8gZmlsZSIpCisgICAgICAgICAgICBzID0gb3Muc3RhdChmbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHMuc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVtYXNrKG9sZG1hc2spCisgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCi0gICAgZGVmIHRlc3RJbXBNb2R1bGUoc2VsZik6CisgICAgZGVmIHRlc3RfaW1wX21vZHVsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgaW1wIG1vZHVsZSBjYW4gY29ycmVjdGx5IGxvYWQgYW5kIGZpbmQgLnB5IGZpbGVzCi0gICAgICAgIGltcG9ydCBpbXAKLSAgICAgICAgeCA9IGltcC5maW5kX21vZHVsZSgib3MiKQotICAgICAgICBvcyA9IGltcC5sb2FkX21vZHVsZSgib3MiLCAqeCkKKworICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQKKyAgICAgICAgIyBoZXJlLCBidXQgdGhhdCBicmVha3MgYmVjYXVzZSB0aGUgb3MgbW9kdWxlIHJlZ2lzdGVycyBzb21lCisgICAgICAgICMgaGFuZGxlcnMgaW4gY29weV9yZWcgb24gaW1wb3J0LiBTaW5jZSBDbGVhbkltcG9ydCBkb2Vzbid0CisgICAgICAgICMgcmV2ZXJ0IHRoYXQgcmVnaXN0cmF0aW9uLCB0aGUgbW9kdWxlIGlzIGxlZnQgaW4gYSBicm9rZW4KKyAgICAgICAgIyBzdGF0ZSBhZnRlciByZXZlcnNpb24uIFJlaW5pdGlhbGlzaW5nIHRoZSBtb2R1bGUgY29udGVudHMKKyAgICAgICAgIyBhbmQganVzdCByZXZlcnRpbmcgb3MuZW52aXJvbiB0byBpdHMgcHJldmlvdXMgc3RhdGUgaXMgYW4gT0sKKyAgICAgICAgIyB3b3JrYXJvdW5kCisgICAgICAgIG9yaWdfcGF0aCA9IG9zLnBhdGgKKyAgICAgICAgb3JpZ19nZXRlbnYgPSBvcy5nZXRlbnYKKyAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCk6CisgICAgICAgICAgICB4ID0gaW1wLmZpbmRfbW9kdWxlKCJvcyIpCisgICAgICAgICAgICBuZXdfb3MgPSBpbXAubG9hZF9tb2R1bGUoIm9zIiwgKngpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9zLCBuZXdfb3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfbGFyZ2Vfc3RhY2soc2VsZiwgbW9kdWxlPSdsb25nbGlzdCcpOgotICAgICAgICAjIGNyZWF0ZSBtb2R1bGUgdy9saXN0IG9mIDY1MDAwIGVsZW1lbnRzIHRvIHRlc3QgYnVnICM1NjE4NTgKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1NjE4NTguCiAgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlICsgb3MuZXh0c2VwICsgJ3B5JwogCi0gICAgICAgICMgY3JlYXRlIGEgZmlsZSB3aXRoIGEgbGlzdCBvZiA2NTAwMCBlbGVtZW50cwotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3crJykKLSAgICAgICAgZi53cml0ZSgnZCA9IFtcbicpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDY1MDAwKToKLSAgICAgICAgICAgIGYud3JpdGUoJyIiLFxuJykKLSAgICAgICAgZi53cml0ZSgnXScpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICAjIENyZWF0ZSBhIGZpbGUgd2l0aCBhIGxpc3Qgb2YgNjUwMDAgZWxlbWVudHMuCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3crJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2QgPSBbXG4nKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjUwMDApOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyIiLFxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ10nKQogCi0gICAgICAgICMgY29tcGlsZSAmIHJlbW92ZSAucHkgZmlsZSwgd2Ugb25seSBuZWVkIC5weWMgKG9yIC5weW8pCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlbmFtZSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgIyBDb21waWxlICYgcmVtb3ZlIC5weSBmaWxlLCB3ZSBvbmx5IG5lZWQgLnB5YyAob3IgLnB5bykuCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVuYW1lKQorICAgICAgICB1bmxpbmsoZmlsZW5hbWUpCiAKLSAgICAgICAgIyBuZWVkIHRvIGJlIGFibGUgdG8gbG9hZCBmcm9tIGN1cnJlbnQgZGlyCisgICAgICAgICMgTmVlZCB0byBiZSBhYmxlIHRvIGxvYWQgZnJvbSBjdXJyZW50IGRpci4KICAgICAgICAgc3lzLnBhdGguYXBwZW5kKCcnKQogCi0gICAgICAgICMgdGhpcyB1c2VkIHRvIGNyYXNoCisgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLgogICAgICAgICBleGVjICdpbXBvcnQgJyArIG1vZHVsZQogCi0gICAgICAgICMgY2xlYW51cAorICAgICAgICAjIENsZWFudXAuCiAgICAgICAgIGRlbCBzeXMucGF0aFstMV0KLSAgICAgICAgZm9yIGV4dCBpbiAncHljJywgJ3B5byc6Ci0gICAgICAgICAgICBmbmFtZSA9IG1vZHVsZSArIG9zLmV4dHNlcCArIGV4dAotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm5hbWUpOgotICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKKyAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ2MnKQorICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnbycpCiAKICAgICBkZWYgdGVzdF9mYWlsaW5nX2ltcG9ydF9zdGlja3Moc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKLSAgICAgICAgZiA9IG9wZW4oc291cmNlLCAidyIpCi0gICAgICAgIHByaW50ID4+IGYsICJhID0gMSAvLyAwIgotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxIC8vIDAiCiAKICAgICAgICAgIyBOZXcgaW4gMi40LCB3ZSBzaG91bGRuJ3QgYmUgYWJsZSB0byBpbXBvcnQgdGhhdCBubyBtYXR0ZXIgaG93IG9mdGVuCiAgICAgICAgICMgd2UgdHJ5LgogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImRhbWFnZWQgbW9kdWxlIGluIHN5cy5tb2R1bGVzIG9uICVpLiB0cnkiICUgaSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndhcyBhYmxlIHRvIGltcG9ydCBhIGRhbWFnZWQgbW9kdWxlIG9uICVpLiB0cnkiICUgaSkKKyAgICAgICAgICAgIGZvciBpIGluIFsxLCAyLCAzXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgX19pbXBvcnRfXywgVEVTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oVEVTVEZOLCBzeXMubW9kdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYW1hZ2VkIG1vZHVsZSBpbiBzeXMubW9kdWxlcyBvbiAlaSB0cnkiICUgaSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZmFpbGluZ19yZWxvYWQoc2VsZik6CiAgICAgICAgICMgQSBmYWlsaW5nIHJlbG9hZCBzaG91bGQgbGVhdmUgdGhlIG1vZHVsZSBvYmplY3QgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKLSAgICAgICAgZiA9IG9wZW4oc291cmNlLCAidyIpCi0gICAgICAgIHByaW50ID4+IGYsICJhID0gMSIKLSAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyIgotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxIgorICAgICAgICAgICAgcHJpbnQgPj4gZiwgImIgPSAyIgogCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKFRFU1RGTiBpbiBzeXMubW9kdWxlcywgImV4cGVjdGVkIG1vZHVsZSBpbiBzeXMubW9kdWxlcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtb2QuYSwgMSwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtb2QuYiwgMiwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCAxLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIDIsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQogCiAgICAgICAgICAgICAjIE9uIFdpblhQLCBqdXN0IHJlcGxhY2luZyB0aGUgLnB5IGZpbGUgd2Fzbid0IGVub3VnaCB0bwogICAgICAgICAgICAgIyBjb252aW5jZSByZWxvYWQoKSB0byByZXBhcnNlIGl0LiAgTWF5YmUgdGhlIHRpbWVzdGFtcCBkaWRuJ3QKQEAgLTE5OSw2OCArMjAwLDczIEBACiAgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQogCiAgICAgICAgICAgICAjIE5vdyBkYW1hZ2UgdGhlIG1vZHVsZS4KLSAgICAgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgInciKQotICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxMCIKLSAgICAgICAgICAgIHByaW50ID4+IGYsICJiID0gMjAvLzAiCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEwIgorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJiID0gMjAvLzAiCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpbXAucmVsb2FkLCBtb2QpCiAKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKG1vZCBpcyBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIHN0aWxsIGJlIGluIHN5cy5tb2R1bGVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKIAogICAgICAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSByZXBsYWNlZCBhIHcvIDEwLCBidXQgdGhlIG9sZCBiIHZhbHVlIHNob3VsZAogICAgICAgICAgICAgIyBzdGljay4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZC5hLCAxMCwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtb2QuYiwgMiwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCAxMCwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iLCAyLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKIAogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnBhdGgucG9wKDApCisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KICAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCi0gICAgICAgICAgICBpZiBURVNURk4gaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW1RFU1RGTl0KKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCiAKICAgICBkZWYgdGVzdF9pbmZpbml0ZV9yZWxvYWQoc2VsZik6Ci0gICAgICAgICMgQnVnICM3NDIzNDIgcmVwb3J0cyB0aGF0IFB5dGhvbiBzZWdmYXVsdHMgKGluZmluaXRlIHJlY3Vyc2lvbiBpbiBDKQotICAgICAgICAjICB3aGVuIGZhY2VkIHdpdGggc2VsZi1yZWN1cnNpdmUgcmVsb2FkKClpbmcuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0MjM0MiByZXBvcnRzIHRoYXQgUHl0aG9uIHNlZ2ZhdWx0cworICAgICAgICAjIChpbmZpbml0ZSByZWN1cnNpb24gaW4gQykgd2hlbiBmYWNlZCB3aXRoIHNlbGYtcmVjdXJzaXZlIHJlbG9hZCgpaW5nLgogCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgaW5maW5pdGVfcmVsb2FkCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMucGF0aC5wb3AoMCkKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCiAgICAgZGVmIHRlc3RfaW1wb3J0X25hbWVfYmluZGluZyhzZWxmKToKLSAgICAgICAgIyBpbXBvcnQgeC55LnogYmluZHMgeCBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2UKKyAgICAgICAgIyBpbXBvcnQgeC55LnogYmluZHMgeCBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2UuCiAgICAgICAgIGltcG9ydCB0ZXN0IGFzIHgKICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh4IGlzIHRlc3QsIHguX19uYW1lX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKHRlc3QudGVzdF9zdXBwb3J0LCAiX19maWxlX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4LCB0ZXN0LCB4Ll9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih0ZXN0LnRlc3Rfc3VwcG9ydCwgIl9fZmlsZV9fIikpCiAKLSAgICAgICAgIyBpbXBvcnQgeC55LnogYXMgdyBiaW5kcyB6IGFzIHcKKyAgICAgICAgIyBpbXBvcnQgeC55LnogYXMgdyBiaW5kcyB6IGFzIHcuCiAgICAgICAgIGltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB5Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh5IGlzIHRlc3QudGVzdF9zdXBwb3J0LCB5Ll9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydElzKHksIHRlc3QudGVzdF9zdXBwb3J0LCB5Ll9fbmFtZV9fKQogCiAgICAgZGVmIHRlc3RfaW1wb3J0X2luaXRsZXNzX2RpcmVjdG9yeV93YXJuaW5nKHNlbGYpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBJbXBvcnRXYXJuaW5nKSk6CiAgICAgICAgICAgICAjIEp1c3QgYSByYW5kb20gbm9uLXBhY2thZ2UgZGlyZWN0b3J5IHdlIGFsd2F5cyBleHBlY3QgdG8gYmUKICAgICAgICAgICAgICMgc29tZXdoZXJlIGluIHN5cy5wYXRoLi4uCi0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgSW1wb3J0V2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydFdhcm5pbmcsIF9faW1wb3J0X18sICJzaXRlLXBhY2thZ2VzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCAic2l0ZS1wYWNrYWdlcyIpCiAKLSAgICBkZWYgdGVzdF9pbXBvcnRieWZpbGVuYW1lKHNlbGYpOgorICAgIGRlZiB0ZXN0X2ltcG9ydF9ieV9maWxlbmFtZShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgYzoKICAgICAgICAgICAgIF9faW1wb3J0X18ocGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJJbXBvcnQgYnkgZmlsZW5hbWUgaXMgbm90IHN1cHBvcnRlZC4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmFyZ3NbMF0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBieSBwYXRoIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJJbXBvcnQgYnkgZmlsZW5hbWUgaXMgbm90IHN1cHBvcnRlZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfaW5fZGVsX2RvZXNfbm90X2NyYXNoKHNlbGYpOgorICAgICAgICAjIElzc3VlIDQyMzYKKyAgICAgICAgdGVzdGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdCgnJywgVEVTVEZOLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcAorICAgICAgICAgICAgc3lzLmFyZ3YuaW5zZXJ0KDAsIEMoKSkKKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayh0ZXN0Zm4pCiAKIAotY2xhc3MgVGVzdFB5Y1Jld3JpdGluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQeWNSZXdyaXRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUZXN0IHRoYXQgdGhlIGBjb19maWxlbmFtZWAgYXR0cmlidXRlIG9uIGNvZGUgb2JqZWN0cyBhbHdheXMgcG9pbnRzCiAgICAgIyB0byB0aGUgcmlnaHQgZmlsZSwgZXZlbiB3aGVuIHZhcmlvdXMgdGhpbmdzIGhhcHBlbiAoZS5nLiBib3RoIHRoZSAucHkKICAgICAjIGFuZCB0aGUgLnB5YyBmaWxlIGFyZSByZW5hbWVkKS4KQEAgLTI5MiwxMiArMjk4LDEwIEBACiAgICAgICAgIGlmIHNlbGYub3JpZ19tb2R1bGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSA9IHNlbGYub3JpZ19tb2R1bGUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXQotICAgICAgICBmb3IgZmlsZV9uYW1lIGluIHNlbGYuZmlsZV9uYW1lLCBzZWxmLmNvbXBpbGVkX25hbWU6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlX25hbWUpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX25hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZGlyX25hbWUpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9uYW1lKQorICAgICAgICAgICAgdW5sb2FkKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIHVubGluayhzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgdW5saW5rKHNlbGYuY29tcGlsZWRfbmFtZSkKKyAgICAgICAgcm10cmVlKHNlbGYuZGlyX25hbWUpCiAKICAgICBkZWYgaW1wb3J0X21vZHVsZShzZWxmKToKICAgICAgICAgbnMgPSBnbG9iYWxzKCkKQEAgLTM1MSw2ICszNTUsNyBAQAogICAgICAgICBtb2QgPSBzZWxmLmltcG9ydF9tb2R1bGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5jb25zdGFudC5jb19maWxlbmFtZSwgZm9yZWlnbl9jb2RlLmNvX2ZpbGVuYW1lKQogCisKIGNsYXNzIFBhdGhzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGggPSBURVNURk4KIApAQCAtMzU5LDU4ICszNjQsNzggQEAKICAgICAgICAgc2VsZi5zeXNwYXRoID0gc3lzLnBhdGhbOl0KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnBhdGgpCi0gICAgICAgIHN5cy5wYXRoID0gc2VsZi5zeXNwYXRoCisgICAgICAgIHJtdHJlZShzZWxmLnBhdGgpCisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNwYXRoCiAKLSAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjkzCisgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjkzLgogICAgIGRlZiB0ZXN0X3RyYWlsaW5nX3NsYXNoKHNlbGYpOgotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAndGVzdF90cmFpbGluZ19zbGFzaC5weScpLCAndycpCi0gICAgICAgIGYud3JpdGUoInRlc3RkYXRhID0gJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnIikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAndGVzdF90cmFpbGluZ19zbGFzaC5weScpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJ0ZXN0ZGF0YSA9ICd0ZXN0X3RyYWlsaW5nX3NsYXNoJyIpCiAgICAgICAgIHN5cy5wYXRoLmFwcGVuZChzZWxmLnBhdGgrJy8nKQogICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QudGVzdGRhdGEsICd0ZXN0X3RyYWlsaW5nX3NsYXNoJykKICAgICAgICAgdW5sb2FkKCJ0ZXN0X3RyYWlsaW5nX3NsYXNoIikKIAotY2xhc3MgUmVsYXRpdmVJbXBvcnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzY3Ny4KKyAgICBkZWYgX3Rlc3RfVU5DX3BhdGgoc2VsZik6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCAndGVzdF90cmFpbGluZ19zbGFzaC5weScpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJ0ZXN0ZGF0YSA9ICd0ZXN0X3RyYWlsaW5nX3NsYXNoJyIpCisgICAgICAgICMgQ3JlYXRlIHRoZSBVTkMgcGF0aCwgbGlrZSBcXG15aG9zdFxjJFxmb29cYmFyLgorICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHNlbGYucGF0aCkKKyAgICAgICAgaW1wb3J0IHNvY2tldAorICAgICAgICBobiA9IHNvY2tldC5nZXRob3N0bmFtZSgpCisgICAgICAgIGRyaXZlID0gcGF0aFswXQorICAgICAgICB1bmMgPSAiXFxcXCVzXFwlcyQiJShobiwgZHJpdmUpCisgICAgICAgIHVuYyArPSBwYXRoWzI6XQorICAgICAgICBzeXMucGF0aC5hcHBlbmQocGF0aCkKKyAgICAgICAgbW9kID0gX19pbXBvcnRfXygidGVzdF90cmFpbGluZ19zbGFzaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnRlc3RkYXRhLCAndGVzdF90cmFpbGluZ19zbGFzaCcpCisgICAgICAgIHVubG9hZCgidGVzdF90cmFpbGluZ19zbGFzaCIpCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgdGVzdF9VTkNfcGF0aCA9IF90ZXN0X1VOQ19wYXRoCisKKworY2xhc3MgUmVsYXRpdmVJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1sidGVzdC5yZWxpbXBvcnQiXQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIHVubG9hZCgidGVzdC5yZWxpbXBvcnQiKQorICAgIHNldFVwID0gdGVhckRvd24KIAogICAgIGRlZiB0ZXN0X3JlbGltcG9ydF9zdGFyKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBpbXBvcnQgKiBmcm9tIC50ZXN0X2ltcG9ydC4KICAgICAgICAgZnJvbSAuIGltcG9ydCByZWxpbXBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVsaW1wb3J0LCAiUmVsYXRpdmVJbXBvcnQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVsaW1wb3J0LCAiUmVsYXRpdmVJbXBvcnRUZXN0cyIpKQogCiAgICAgZGVmIHRlc3RfaXNzdWUzMjIxKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMyMjEuCiAgICAgICAgIGRlZiBjaGVja19hYnNvbHV0ZSgpOgogICAgICAgICAgICAgZXhlYyAiZnJvbSBvcyBpbXBvcnQgcGF0aCIgaW4gbnMKICAgICAgICAgZGVmIGNoZWNrX3JlbGF0aXZlKCk6CiAgICAgICAgICAgICBleGVjICJmcm9tIC4gaW1wb3J0IHJlbGltcG9ydCIgaW4gbnMKKwogICAgICAgICAjIENoZWNrIGJvdGggT0sgd2l0aCBfX3BhY2thZ2VfXyBhbmQgX19uYW1lX18gY29ycmVjdAogICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J3Rlc3QnLCBfX25hbWVfXz0ndGVzdC5ub3RhcmVhbG1vZHVsZScpCiAgICAgICAgIGNoZWNrX2Fic29sdXRlKCkKICAgICAgICAgY2hlY2tfcmVsYXRpdmUoKQorCiAgICAgICAgICMgQ2hlY2sgYm90aCBPSyB3aXRoIG9ubHkgX19uYW1lX18gd3JvbmcKICAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSd0ZXN0JywgX19uYW1lX189J25vdGFyZWFscGtnLm5vdGFyZWFsbW9kdWxlJykKICAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQogICAgICAgICBjaGVja19yZWxhdGl2ZSgpCisKICAgICAgICAgIyBDaGVjayByZWxhdGl2ZSBmYWlscyB3aXRoIG9ubHkgX19wYWNrYWdlX18gd3JvbmcKICAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSdmb28nLCBfX25hbWVfXz0ndGVzdC5ub3RhcmVhbG1vZHVsZScpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnLitmb28nLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdmb28nIGluIHN0cih3Lm1lc3NhZ2UpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmNhdGVnb3J5LCBSdW50aW1lV2FybmluZykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGNoZWNrX3JlbGF0aXZlKQorCiAgICAgICAgICMgQ2hlY2sgcmVsYXRpdmUgZmFpbHMgd2l0aCBfX3BhY2thZ2VfXyBhbmQgX19uYW1lX18gd3JvbmcKICAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSdmb28nLCBfX25hbWVfXz0nbm90YXJlYWxwa2cubm90YXJlYWxtb2R1bGUnKQotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJy4rZm9vJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIGNoZWNrX2Fic29sdXRlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnZm9vJyBpbiBzdHIody5tZXNzYWdlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5jYXRlZ29yeSwgUnVudGltZVdhcm5pbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yLCBjaGVja19yZWxhdGl2ZSkKKwogICAgICAgICAjIENoZWNrIGJvdGggZmFpbCB3aXRoIHBhY2thZ2Ugc2V0IHRvIGEgbm9uLXN0cmluZwogICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189b2JqZWN0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNoZWNrX2Fic29sdXRlKQpAQCAtNDIwLDE5ICs0NDUsMTYgQEAKICAgICAgICAgIyBJZiBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnQgc3ludGF4IGlzIHVzZWQsIHRoZW4gZG8gbm90IHRyeQogICAgICAgICAjIHRvIHBlcmZvcm0gYW4gYWJzb2x1dGUgaW1wb3J0IGluIHRoZSBmYWNlIG9mIGZhaWx1cmUuCiAgICAgICAgICMgSXNzdWUgIzc5MDIuCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CiAgICAgICAgICAgICBmcm9tIC5vcyBpbXBvcnQgc2VwCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0IHRyaWdnZXJlZCBhbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImltcGxpY2l0IGFic29sdXRlIGltcG9ydCIpCiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0LCBUZXN0UHljUmV3cml0aW5nLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydCkKKyAgICBydW5fdW5pdHRlc3QoSW1wb3J0VGVzdHMsIFB5Y1Jld3JpdGluZ1Rlc3RzLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgdGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnQKKyAgICAjIFRlc3QgbmVlZHMgdG8gYmUgYSBwYWNrYWdlLCBzbyB3ZSBjYW4gZG8gcmVsYXRpdmUgaW1wb3J0cy4KICAgICBmcm9tIHRlc3QudGVzdF9pbXBvcnQgaW1wb3J0IHRlc3RfbWFpbgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQppbmRleCBjNGY3Mzk5Li5jZmFiMWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKQEAgLTE3NywxMSArMTc3LDExIEBACiAKICAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCB0ZXN0X2NvKQogICAgICAgICBpbXBvcnQgcmVsb2FkbW9kdWxlCi0gICAgICAgIHNlbGYuZmFpbElmKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQogCiAgICAgICAgIFRlc3RJbXBvcnRlci5tb2R1bGVzWydyZWxvYWRtb2R1bGUnXSA9IChGYWxzZSwgcmVsb2FkX2NvKQogICAgICAgICBpbXAucmVsb2FkKHJlbG9hZG1vZHVsZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCiAKICAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLmdldF9uYW1lKCksCkBAIC0yMjcsMTUgKzIyNyw5IEBACiAKICAgICBkZWYgdGVzdEJsb2NrZXIoc2VsZik6CiAgICAgICAgIG1uYW1lID0gImV4Y2VwdGlvbnMiICAjIGFuIGFyYml0cmFyeSBoYXJtbGVzcyBidWlsdGluIG1vZHVsZQotICAgICAgICBpZiBtbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttbmFtZV0KKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZChtbmFtZSkKICAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoSW1wb3J0QmxvY2tlcihtbmFtZSkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9faW1wb3J0X18obW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiJyVzJyB3YXMgbm90IHN1cHBvc2VkIHRvIGJlIGltcG9ydGFibGUiICUgbW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBtbmFtZSkKIAogICAgIGRlZiB0ZXN0SW1wV3JhcHBlcihzZWxmKToKICAgICAgICAgaSA9IEltcFdyYXBwZXIoKQpAQCAtMjQ3LDcgKzI0MSw4IEBACiAgICAgICAgICAgICBmb3IgbiBpbiBzeXMubW9kdWxlcy5rZXlzKCk6CiAgICAgICAgICAgICAgICAgaWYgbi5zdGFydHN3aXRoKHBhcmVudCk6CiAgICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuXQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoIlRoZSBjb21waWxlciBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgogICAgICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG1uYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbIl9fZHVtbXlfXyJdKQogICAgICAgICAgICAgICAgIG0uX19sb2FkZXJfXyAgIyB0byBtYWtlIHN1cmUgd2UgYWN0dWFsbHkgaGFuZGxlZCB0aGUgaW1wb3J0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZDhkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi5weQpAQCAtMCwwICsxLDE3NiBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdW5jYWNoZSgqbmFtZXMpOgorICAgICIiIlVuY2FjaGUgYSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcy4KKworICAgIEEgYmFzaWMgc2FuaXR5IGNoZWNrIGlzIHBlcmZvcm1lZCB0byBwcmV2ZW50IHVuY2FjaGluZyBtb2R1bGVzIHRoYXQgZWl0aGVyCisgICAgY2Fubm90L3Nob3VsZG4ndCBiZSB1bmNhY2hlZC4KKworICAgICIiIgorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBpZiBuYW1lIGluICgnc3lzJywgJ21hcnNoYWwnLCAnaW1wJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJjYW5ub3QgdW5jYWNoZSB7MH0gYXMgaXQgd2lsbCBicmVhayBfaW1wb3J0bGliIi5mb3JtYXQobmFtZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGltcG9ydF9zdGF0ZSgqKmt3YXJncyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBpbXBvcnRlcnMgYW5kIHN0b3JlZCBzdGF0ZSBpbiB0aGUKKyAgICBzeXMgbW9kdWxlLgorCisgICAgVGhlICdtb2R1bGVzJyBhdHRyaWJ1dGUgaXMgbm90IHN1cHBvcnRlZCBhcyB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUgc3RvcmVzIGEKKyAgICBwb2ludGVyIHRvIHRoZSBkaWN0IHRoYXQgdGhlIGludGVycHJldGVyIHVzZXMgaW50ZXJuYWxseTsKKyAgICByZWFzc2lnbmluZyB0byBzeXMubW9kdWxlcyBkb2VzIG5vdCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4KKworICAgICIiIgorICAgIG9yaWdpbmFscyA9IHt9CisgICAgdHJ5OgorICAgICAgICBmb3IgYXR0ciwgZGVmYXVsdCBpbiAoKCdtZXRhX3BhdGgnLCBbXSksICgncGF0aCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGF0aF9ob29rcycsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGF0aF9pbXBvcnRlcl9jYWNoZScsIHt9KSk6CisgICAgICAgICAgICBvcmlnaW5hbHNbYXR0cl0gPSBnZXRhdHRyKHN5cywgYXR0cikKKyAgICAgICAgICAgIGlmIGF0dHIgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGt3YXJnc1thdHRyXQorICAgICAgICAgICAgICAgIGRlbCBrd2FyZ3NbYXR0cl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gZGVmYXVsdAorICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIG5ld192YWx1ZSkKKyAgICAgICAgaWYgbGVuKGt3YXJncyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAndW5yZWNvZ25pemVkIGFyZ3VtZW50czogezB9Jy5mb3JtYXQoa3dhcmdzLmtleXMoKSkpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIG9yaWdpbmFscy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIHZhbHVlKQorCisKK2NsYXNzIG1vY2tfbW9kdWxlcyhvYmplY3QpOgorCisgICAgIiIiQSBtb2NrIGltcG9ydGVyL2xvYWRlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXMpOgorICAgICAgICBzZWxmLm1vZHVsZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCcuX19pbml0X18nKToKKyAgICAgICAgICAgICAgICBpbXBvcnRfbmFtZSA9IG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1wb3J0X25hbWUgPSBuYW1lWzotbGVuKCcuX19pbml0X18nKV0KKyAgICAgICAgICAgIGlmICcuJyBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gTm9uZQorICAgICAgICAgICAgZWxpZiBpbXBvcnRfbmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBuYW1lLnJzcGxpdCgnLicsIDEpWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBpbXBvcnRfbmFtZQorICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoaW1wb3J0X25hbWUpCisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCisgICAgICAgICAgICBtb2R1bGUuYXR0ciA9IG5hbWUKKyAgICAgICAgICAgIGlmIGltcG9ydF9uYW1lICE9IG5hbWU6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gWyc8bW9jayBfX3BhdGhfXz4nXQorICAgICAgICAgICAgc2VsZi5tb2R1bGVzW2ltcG9ydF9uYW1lXSA9IG1vZHVsZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorCisKKworY2xhc3MgSW1wb3J0TW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSB0b3AtbGV2ZWwgbW9kdWxlLgorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKKworICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHdpdGggYW4gYWJzb2x1dGUgbmFtZS4KKyAgICAgICAgcGtnX25hbWUgPSAncGtnJworICAgICAgICBwa2dfbG9uZ19uYW1lID0gJ3swfS5fX2luaXRfXycuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYi5fX2luaXRfXycsICdhLmIuYy5fX2luaXRfXycsICdhLmIuYy5kJ10KKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMoKm1vZHVsZXMpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLmQnLCAnYS5iLmMnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5iLmMuZCcpCisKKyAgICBkZWYgdGVzdF9kZWVwX3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHRocm91Z2ggYSByZWxhdHZlIGltcG9ydC4KKyAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMoKm1vZHVsZXMpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLi5jJywgJ2EuYicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdhLmMnKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfaW1wb3J0X3dpdGhfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIG1vZHVsZSBmcm9tIGEgcGFja2FnZSB3aXRoIGFuIGFic29sdXRlIG5hbWUgd2l0aAorICAgICAgICAjIHRoZSAncGFja2FnZScgYXJndW1lbnQgZ2l2ZW4uCisgICAgICAgIHBrZ19uYW1lID0gJ3BrZycKKyAgICAgICAgcGtnX2xvbmdfbmFtZSA9ICd7MH0uX19pbml0X18nLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCisgICAgICAgIHdpdGggbW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIG5hbWUpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF93b19wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFJlbGF0aXZlIGltcG9ydHMgY2Fubm90IGhhcHBlbiB3aXRob3V0IHRoZSAncGFja2FnZScgYXJndW1lbnQgYmVpbmcKKyAgICAgICAgIyBzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUsICcuc3VwcG9ydCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorICAgIHJ1bl91bml0dGVzdChJbXBvcnRNb2R1bGVUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9pbmRleC5weQppbmRleCBjOTg1NTY5Li5hOTJiNDQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKQEAgLTQ5LDYgKzQ5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtN0wuX19pbmRleF9fKCksIC03KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuby5fX2luZGV4X18oKSwgNCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4uX19pbmRleF9fKCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZS5fX2luZGV4X18oKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZS5fX2luZGV4X18oKSwgMCkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CiAgICAgICAgIHIgPSByYW5nZSgxMCkKQEAgLTYwLDEwICs2MiwxMCBAQAogICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLm8uaW5kID0gJ2R1bWInCiAgICAgICAgIHNlbGYubi5pbmQgPSAnYmFkJwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleCwgc2VsZi5vKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleCwgc2VsZi5uKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBzbGljZShzZWxmLm8pLmluZGljZXMsIDApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKHNlbGYubikuaW5kaWNlcywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleCwgc2VsZi5vKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2Uoc2VsZi5vKS5pbmRpY2VzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKHNlbGYubikuaW5kaWNlcywgMCkKIAogCiBjbGFzcyBTZXFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04OSw2ICs5MSwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubzpzZWxmLm8yXSwgc2VsZi5zZXFbMTozXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm46c2VsZi5uMl0sIHNlbGYuc2VxWzI6NF0pCiAKKyAgICBkZWYgdGVzdF9zbGljZV9idWc3NTMyKHNlbGYpOgorICAgICAgICBzZXFsZW4gPSBsZW4oc2VsZi5zZXEpCisgICAgICAgIHNlbGYuby5pbmQgPSBpbnQoc2VxbGVuICogMS41KQorICAgICAgICBzZWxmLm4uaW5kID0gc2VxbGVuICsgMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubzpdLCBzZWxmLnNlcVswOjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxWzpzZWxmLm9dLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm46XSwgc2VsZi5zZXFbMDowXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5uXSwgc2VsZi5zZXEpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zZXEsIENsYXNzaWNTZXEpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgVGhlc2UgdGVzdHMgZmFpbCBmb3IgQ2xhc3NpY1NlcSAoc2VlIGJ1ZyAjNzUzMikKKyAgICAgICAgc2VsZi5vMi5pbmQgPSAtc2VxbGVuIC0gMgorICAgICAgICBzZWxmLm4yLmluZCA9IC1pbnQoc2VxbGVuICogMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubzI6XSwgc2VsZi5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYubzJdLCBzZWxmLnNlcVswOjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubjI6XSwgc2VsZi5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYubjJdLCBzZWxmLnNlcVswOjBdKQorCiAgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgogICAgICAgICBzZWxmLm8uaW5kID0gMwogICAgICAgICBzZWxmLm4uaW5kID0gMgpAQCAtMTE1LDExICsxMzUsMTEgQEAKICAgICAgICAgc2VsZi5vLmluZCA9ICdkdW1iJwogICAgICAgICBzZWxmLm4uaW5kID0gJ2JhZCcKICAgICAgICAgaW5kZXhvYmogPSBsYW1iZGEgeCwgb2JqOiBvYmouc2VxW3hdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIGluZGV4b2JqLCBzZWxmLm8sIHNlbGYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIGluZGV4b2JqLCBzZWxmLm4sIHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5kZXhvYmosIHNlbGYubywgc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbmRleG9iaiwgc2VsZi5uLCBzZWxmKQogICAgICAgICBzbGljZW9iaiA9IGxhbWJkYSB4LCBvYmo6IG9iai5zZXFbeDpdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIHNsaWNlb2JqLCBzZWxmLm8sIHNlbGYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIHNsaWNlb2JqLCBzZWxmLm4sIHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2VvYmosIHNlbGYubywgc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZW9iaiwgc2VsZi5uLCBzZWxmKQogCiAKIGNsYXNzIExpc3RUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CkBAIC0xNTIsMTkgKzE3Miw2OCBAQAogCiAgICAgICAgIGxzdCA9IFs1LCA2LCA3LCA4LCA5LCAxMV0KICAgICAgICAgbDIgPSBsc3QuX19pbXVsX18oc2VsZi5uKQotICAgICAgICBzZWxmLmFzc2VydF8obDIgaXMgbHN0KQorICAgICAgICBzZWxmLmFzc2VydElzKGwyLCBsc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbNSwgNiwgNywgOCwgOSwgMTFdICogMykKIAogCitjbGFzcyBfQmFzZVNlcToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIHNlbGYuX2xpc3QgPSBsaXN0KGl0ZXJhYmxlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcihzZWxmLl9saXN0KQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9saXN0ID09IG90aGVyCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9saXN0KQorCisgICAgZGVmIF9fbXVsX18oc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLl9saXN0Km4pCisgICAgX19ybXVsX18gPSBfX211bF9fCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdFtpbmRleF0KKworCitjbGFzcyBfR2V0U2xpY2VNaXhpbjoKKworICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgIHJldHVybiBzZWxmLl9saXN0Ll9fZ2V0c2xpY2VfXyhpLCBqKQorCisKK2NsYXNzIENsYXNzaWNTZXEoX0Jhc2VTZXEpOiBwYXNzCitjbGFzcyBOZXdTZXEoX0Jhc2VTZXEsIG9iamVjdCk6IHBhc3MKK2NsYXNzIENsYXNzaWNTZXFEZXByZWNhdGVkKF9HZXRTbGljZU1peGluLCBDbGFzc2ljU2VxKTogcGFzcworY2xhc3MgTmV3U2VxRGVwcmVjYXRlZChfR2V0U2xpY2VNaXhpbiwgTmV3U2VxKTogcGFzcworCisKIGNsYXNzIFR1cGxlVGVzdENhc2UoU2VxVGVzdENhc2UpOgogICAgIHNlcSA9ICgwLDEwLDIwLDMwLDQwLDUwKQogCiBjbGFzcyBTdHJpbmdUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CiAgICAgc2VxID0gInRoaXMgaXMgYSB0ZXN0IgogCitjbGFzcyBCeXRlQXJyYXlUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gYnl0ZWFycmF5KCJ0aGlzIGlzIGEgdGVzdCIpCisKIGNsYXNzIFVuaWNvZGVUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CiAgICAgc2VxID0gdSJ0aGlzIGlzIGEgdGVzdCIKIAorY2xhc3MgQ2xhc3NpY1NlcVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBDbGFzc2ljU2VxKCgwLDEwLDIwLDMwLDQwLDUwKSkKKworY2xhc3MgTmV3U2VxVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IE5ld1NlcSgoMCwxMCwyMCwzMCw0MCw1MCkpCisKK2NsYXNzIENsYXNzaWNTZXFEZXByZWNhdGVkVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IENsYXNzaWNTZXFEZXByZWNhdGVkKCgwLDEwLDIwLDMwLDQwLDUwKSkKKworY2xhc3MgTmV3U2VxRGVwcmVjYXRlZFRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBOZXdTZXFEZXByZWNhdGVkKCgwLDEwLDIwLDMwLDQwLDUwKSkKKwogCiBjbGFzcyBYUmFuZ2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE4Nyw3ICsyNTYsMjEgQEAKICAgICBkZWYgX2dldGl0ZW1faGVscGVyKHNlbGYsIGJhc2UpOgogICAgICAgICBjbGFzcyBHZXRJdGVtKGJhc2UpOgogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1heGludCAjY2Fubm90IHJldHVybiBsb25nIGhlcmUKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW50ICMgY2Fubm90IHJldHVybiBsb25nIGhlcmUKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBrZXkKKyAgICAgICAgeCA9IEdldEl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5wb3NdLCBzZWxmLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYubmVnXSwgc2VsZi5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvc10uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvczoxXS5pbmRpY2VzKG1heHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBtYXhzaXplLCAxKSkKKworICAgIGRlZiBfZ2V0c2xpY2VfaGVscGVyX2RlcHJlY2F0ZWQoc2VsZiwgYmFzZSk6CisgICAgICAgIGNsYXNzIEdldEl0ZW0oYmFzZSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4aW50ICMgY2Fubm90IHJldHVybiBsb25nIGhlcmUKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJldHVybiBrZXkKICAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CkBAIC0xOTUsMjAgKzI3OCwyNSBAQAogICAgICAgICB4ID0gR2V0SXRlbSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLnBvc10sIHNlbGYucG9zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWddLCBzZWxmLm5lZykKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZzpzZWxmLnBvc10sIChtYXhpbnQrbWluc2l6ZSwgbWF4c2l6ZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3M6MV0uaW5kaWNlcyhtYXhzaXplKSwgKDAsIG1heHNpemUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3NdLCAobWF4aW50K21pbnNpemUsIG1heHNpemUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3M6MV0uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgogICAgICAgICBzZWxmLl9nZXRpdGVtX2hlbHBlcihvYmplY3QpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuX2dldHNsaWNlX2hlbHBlcl9kZXByZWNhdGVkKG9iamVjdCkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW1fY2xhc3NpYyhzZWxmKToKICAgICAgICAgY2xhc3MgRW1wdHk6IHBhc3MKLSAgICAgICAgc2VsZi5fZ2V0aXRlbV9oZWxwZXIoRW1wdHkpCisgICAgICAgICMgWFhYIFRoaXMgdGVzdCBmYWlscyAoc2VlIGJ1ZyAjNzUzMikKKyAgICAgICAgI3NlbGYuX2dldGl0ZW1faGVscGVyKEVtcHR5KQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLl9nZXRzbGljZV9oZWxwZXJfZGVwcmVjYXRlZChFbXB0eSkKIAogICAgIGRlZiB0ZXN0X3NlcXVlbmNlX3JlcGVhdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5wb3MpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6ICJhIiAqIHNlbGYubmVnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6ICJhIiAqIHNlbGYucG9zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6ICJhIiAqIHNlbGYubmVnKQogCiAKIGRlZiB0ZXN0X21haW4oKToKQEAgLTIxNiwxMSArMzA0LDIwIEBACiAgICAgICAgIEJhc2VUZXN0Q2FzZSwKICAgICAgICAgTGlzdFRlc3RDYXNlLAogICAgICAgICBUdXBsZVRlc3RDYXNlLAorICAgICAgICBCeXRlQXJyYXlUZXN0Q2FzZSwKICAgICAgICAgU3RyaW5nVGVzdENhc2UsCiAgICAgICAgIFVuaWNvZGVUZXN0Q2FzZSwKKyAgICAgICAgQ2xhc3NpY1NlcVRlc3RDYXNlLAorICAgICAgICBOZXdTZXFUZXN0Q2FzZSwKICAgICAgICAgWFJhbmdlVGVzdENhc2UsCiAgICAgICAgIE92ZXJmbG93VGVzdENhc2UsCiAgICAgKQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgIENsYXNzaWNTZXFEZXByZWNhdGVkVGVzdENhc2UsCisgICAgICAgICAgICBOZXdTZXFEZXByZWNhdGVkVGVzdENhc2UsCisgICAgICAgICkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggZGM5NzY1Zi4uZmNkZmQ5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtMSwxNyArMSwyNCBAQAoraW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBkYXRldGltZQorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKK2Zyb20gVXNlckRpY3QgaW1wb3J0IFVzZXJEaWN0CiAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgX2NoZWNrX3B5M2tfd2FybmluZ3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncwogCi13aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKAord2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAogICAgICAgICBxdWlldD1UcnVlKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAogICAgIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIyIGFzIG1vZDIKIAorIyBDIG1vZHVsZSBmb3IgdGVzdF9maW5kc291cmNlX2JpbmFyeQoraW1wb3J0IHVuaWNvZGVkYXRhCisKICMgRnVuY3Rpb25zIHRlc3RlZCBpbiB0aGlzIHN1aXRlOgogIyBpc21vZHVsZSwgaXNjbGFzcywgaXNtZXRob2QsIGlzZnVuY3Rpb24sIGlzdHJhY2ViYWNrLCBpc2ZyYW1lLCBpc2NvZGUsCiAjIGlzYnVpbHRpbiwgaXNyb3V0aW5lLCBpc2dlbmVyYXRvciwgaXNnZW5lcmF0b3JmdW5jdGlvbiwgZ2V0bWVtYmVycywKQEAgLTQzLDEzICs1MCwxMyBAQAogCiAgICAgZGVmIGlzdGVzdChzZWxmLCBwcmVkaWNhdGUsIGV4cCk6CiAgICAgICAgIG9iaiA9IGV2YWwoZXhwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocHJlZGljYXRlKG9iaiksICclcyglcyknICUgKHByZWRpY2F0ZS5fX25hbWVfXywgZXhwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByZWRpY2F0ZShvYmopLCAnJXMoJXMpJyAlIChwcmVkaWNhdGUuX19uYW1lX18sIGV4cCkpCiAKICAgICAgICAgZm9yIG90aGVyIGluIHNlbGYucHJlZGljYXRlcyAtIHNldChbcHJlZGljYXRlXSk6CiAgICAgICAgICAgICBpZiBwcmVkaWNhdGUgPT0gaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uIGFuZFwKICAgICAgICAgICAgICAgIG90aGVyID09IGluc3BlY3QuaXNmdW5jdGlvbjoKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5mYWlsSWYob3RoZXIob2JqKSwgJ25vdCAlcyglcyknICUgKG90aGVyLl9fbmFtZV9fLCBleHApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdGhlcihvYmopLCAnbm90ICVzKCVzKScgJSAob3RoZXIuX19uYW1lX18sIGV4cCkpCiAKIGRlZiBnZW5lcmF0b3JfZnVuY3Rpb25fZXhhbXBsZShzZWxmKToKICAgICBmb3IgaSBpbiB4cmFuZ2UoMik6CkBAIC02OCw3ICs3NSw2IEBACiAgICAgZGVmIHRlc3RfZXhjbHVkaW5nX3ByZWRpY2F0ZXMoc2VsZik6CiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNidWlsdGluLCAnc3lzLmV4aXQnKQogICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzYnVpbHRpbiwgJ1tdLmFwcGVuZCcpCi0gICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNjbGFzcywgJ21vZC5TdHVwaWRHaXQnKQogICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzY29kZSwgJ21vZC5zcGFtLmZ1bmNfY29kZScpCiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNmcmFtZSwgJ3RiLnRiX2ZyYW1lJykKICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2Z1bmN0aW9uLCAnbW9kLnNwYW0nKQpAQCAtODQsMTUgKzkwLDYxIEBACiAgICAgICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlKHRiLnRiX2ZyYW1lKS5mX2xvY2FscycpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihpbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvcih0eXBlKHRiLnRiX2ZyYW1lKS5mX2xvY2FscykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9yKHR5cGUodGIudGJfZnJhbWUpLmZfbG9jYWxzKSkKICAgICAgICAgaWYgaGFzYXR0cih0eXBlcywgJ01lbWJlckRlc2NyaXB0b3JUeXBlJyk6CiAgICAgICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvciwgJ2RhdGV0aW1lLnRpbWVkZWx0YS5kYXlzJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9yKGRhdGV0aW1lLnRpbWVkZWx0YS5kYXlzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc21lbWJlcmRlc2NyaXB0b3IoZGF0ZXRpbWUudGltZWRlbHRhLmRheXMpKQogCiAgICAgZGVmIHRlc3RfaXNyb3V0aW5lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaW5zcGVjdC5pc3JvdXRpbmUobW9kLnNwYW0pKQotICAgICAgICBzZWxmLmFzc2VydF8oaW5zcGVjdC5pc3JvdXRpbmUoW10uY291bnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc3JvdXRpbmUobW9kLnNwYW0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc3JvdXRpbmUoW10uY291bnQpKQorCisgICAgZGVmIHRlc3RfaXNjbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2NsYXNzLCAnbW9kLlN0dXBpZEdpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzY2xhc3MobGlzdCkpCisKKyAgICAgICAgY2xhc3MgbmV3c3R5bGUob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2NsYXNzKG5ld3N0eWxlKSkKKworICAgICAgICBjbGFzcyBDdXN0b21HZXRhdHRyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzY2xhc3MoQ3VzdG9tR2V0YXR0cigpKSkKKworICAgIGRlZiB0ZXN0X2dldF9zbG90X21lbWJlcnMoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgiYSIsICJiIikKKworICAgICAgICB4ID0gQygpCisgICAgICAgIHguYSA9IDQyCisgICAgICAgIG1lbWJlcnMgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyh4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIG1lbWJlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2InLCBtZW1iZXJzKQorCisgICAgZGVmIHRlc3RfaXNhYnN0cmFjdChzZWxmKToKKyAgICAgICAgZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKKyAgICAgICAgY2xhc3MgQWJzdHJhY3RDbGFzc0V4YW1wbGUob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICAgICAgICAgIEBhYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQ2xhc3NFeGFtcGxlKEFic3RyYWN0Q2xhc3NFeGFtcGxlKToKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBDbGFzc0V4YW1wbGUoKQorCisgICAgICAgICMgVGVzdCBnZW5lcmFsIGJlaGF2aW91ci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNhYnN0cmFjdChBYnN0cmFjdENsYXNzRXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KENsYXNzRXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KGEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNhYnN0cmFjdChpbnQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNhYnN0cmFjdCg1KSkKKwogCiBjbGFzcyBUZXN0SW50ZXJwcmV0ZXJTdGFjayhJc1Rlc3RCYXNlKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTEwNSw3ICsxNTcsNyBAQAogICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZnJhbWUsICdtb2QuZnInKQogCiAgICAgZGVmIHRlc3Rfc3RhY2soc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4obW9kLnN0KSA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1vZC5zdCkgPj0gNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Quc3RbMF1bMTpdLAogICAgICAgICAgICAgIChtb2RmaWxlLCAxNiwgJ2VnZ3MnLCBbJyAgICBzdCA9IGluc3BlY3Quc3RhY2soKVxuJ10sIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5zdFsxXVsxOl0sCkBAIC0xNDgsNyArMjAwLDggQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgICAgIHNlbGYuc291cmNlID0gZmlsZShpbnNwZWN0LmdldHNvdXJjZWZpbGUoc2VsZi5mb2RkZXJGaWxlKSkucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihpbnNwZWN0LmdldHNvdXJjZWZpbGUoc2VsZi5mb2RkZXJGaWxlKSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGZwLnJlYWQoKQogCiAgICAgZGVmIHNvdXJjZXJhbmdlKHNlbGYsIHRvcCwgYm90dG9tKToKICAgICAgICAgbGluZXMgPSBzZWxmLnNvdXJjZS5zcGxpdCgiXG4iKQpAQCAtMTg0LDYgKzIzNyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb25zLCBbKCdlZ2dzJywgbW9kLmVnZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3BhbScsIG1vZC5zcGFtKV0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9nZXRkb2Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MobW9kKSwgJ0EgbW9kdWxlIGRvY3N0cmluZy4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZC5TdHVwaWRHaXQpLApAQCAtMjIwLDYgKzI3NSwxMSBAQAogICAgIGRlZiB0ZXN0X2dldHNvdXJjZWZpbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKG1vZC5zcGFtKSwgbW9kZmlsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUoZ2l0LmFidXNlKSwgbW9kZmlsZSkKKyAgICAgICAgZm4gPSAiX25vbl9leGlzdGluZ19maWxlbmFtZV91c2VkX2Zvcl9zb3VyY2VmaWxlX3Rlc3QucHkiCisgICAgICAgIGNvID0gY29tcGlsZSgiTm9uZSIsIGZuLCAiZXhlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKGNvKSwgTm9uZSkKKyAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCAiTm9uZSIsIGNvLmNvX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShjbyksIGZuKQogCiAgICAgZGVmIHRlc3RfZ2V0ZmlsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGZpbGUobW9kLlN0dXBpZEdpdCksIG1vZC5fX2ZpbGVfXykKQEAgLTMxMCw2ICszNzAsMjMgQEAKICAgICBkZWYgdGVzdF9tZXRob2RfaW5fZHluYW1pY19jbGFzcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLm1ldGhvZF9pbl9keW5hbWljX2NsYXNzLCA5NSwgOTcpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKAorICAgICAgICBub3QgaGFzYXR0cih1bmljb2RlZGF0YSwgJ19fZmlsZV9fJykgb3IKKyAgICAgICAgICAgIHVuaWNvZGVkYXRhLl9fZmlsZV9fWy00Ol0gaW4gKCIucHljIiwgIi5weW8iKSwKKyAgICAgICAgInVuaWNvZGVkYXRhIGlzIG5vdCBhbiBleHRlcm5hbCBiaW5hcnkgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9maW5kc291cmNlX2JpbmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQorCisgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9jb2RlX2luX2xpbmVjYWNoZShzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIng9MSJdCisgICAgICAgIGNvID0gY29tcGlsZShsaW5lc1swXSwgIl9keW5hbWljYWxseV9jcmVhdGVkX2ZpbGUiLCAiZXhlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKyAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgY28uY29fZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5maW5kc291cmNlKGNvKSwgKGxpbmVzLDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlKGNvKSwgbGluZXNbMF0pCisKICMgSGVscGVyIGZvciB0ZXN0aW5nIGNsYXNzaWZ5X2NsYXNzX2F0dHJzLgogZGVmIGF0dHJzX3dvX29ianMoY2xzKToKICAgICByZXR1cm4gW3RbOjNdIGZvciB0IGluIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoY2xzKV0KQEAgLTM2NCw3ICs0NDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoQS5tLCBbJ3NlbGYnXSkKIAogICAgIGRlZiB0ZXN0X2dldGFyZ3NwZWNfc3VibGlzdG9mb25lKHNlbGYpOgotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKICAgICAgICAgICAgICAgICAoInBhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQiLCBTeW50YXhXYXJuaW5nKSk6CiAgICAgICAgICAgICBleGVjICdkZWYgc3VibGlzdE9mT25lKChmb28sKSk6IHJldHVybiAxJwpAQCAtMzczLDEzNSArNDUwLDI4OSBAQAogICAgICAgICAgICAgZXhlYyAnZGVmIGZha2VTdWJsaXN0T2ZPbmUoKGZvbykpOiByZXR1cm4gMScKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhmYWtlU3VibGlzdE9mT25lLCBbJ2ZvbyddKQogCisKKyAgICBkZWYgX2NsYXNzaWZ5X3Rlc3Qoc2VsZiwgbmV3c3R5bGUpOgorICAgICAgICAiIiJIZWxwZXIgZm9yIHRlc3RpbmcgdGhhdCBjbGFzc2lmeV9jbGFzc19hdHRycyBmaW5kcyBhIGJ1bmNoIG9mCisgICAgICAgIGRpZmZlcmVudCBraW5kcyBvZiBhdHRyaWJ1dGVzIG9uIGEgZ2l2ZW4gY2xhc3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBuZXdzdHlsZToKKyAgICAgICAgICAgIGJhc2UgPSBvYmplY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIGJhc2U6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEEoYmFzZSk6CisgICAgICAgICAgICBkZWYgcygpOiBwYXNzCisgICAgICAgICAgICBzID0gc3RhdGljbWV0aG9kKHMpCisKKyAgICAgICAgICAgIGRlZiBjKGNscyk6IHBhc3MKKyAgICAgICAgICAgIGMgPSBjbGFzc21ldGhvZChjKQorCisgICAgICAgICAgICBkZWYgZ2V0cChzZWxmKTogcGFzcworICAgICAgICAgICAgcCA9IHByb3BlcnR5KGdldHApCisKKyAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCisKKyAgICAgICAgICAgIGRlZiBtMShzZWxmKTogcGFzcworCisgICAgICAgICAgICBkYXRhYmxvYiA9ICcxJworCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20nLCAnbWV0aG9kJywgQiksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbTEnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YScpCisKKworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBjKHNlbGYpOiBwYXNzCisKKyAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEMpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoRCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIGlmIG5ld3N0eWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnbWV0aG9kJywgQyksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBCKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBEKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKworCiAgICAgZGVmIHRlc3RfY2xhc3NpZnlfb2xkc3R5bGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICBkZWYgcygpOiBwYXNzCi0gICAgICAgICAgICBzID0gc3RhdGljbWV0aG9kKHMpCi0KLSAgICAgICAgICAgIGRlZiBjKGNscyk6IHBhc3MKLSAgICAgICAgICAgIGMgPSBjbGFzc21ldGhvZChjKQotCi0gICAgICAgICAgICBkZWYgZ2V0cChzZWxmKTogcGFzcwotICAgICAgICAgICAgcCA9IHByb3BlcnR5KGdldHApCi0KLSAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgICAgIGRlZiBtMShzZWxmKTogcGFzcwotCi0gICAgICAgICAgICBkYXRhYmxvYiA9ICcxJwotCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKLQotICAgICAgICBjbGFzcyBCKEEpOgotICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKLQotICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbScsICdtZXRob2QnLCBCKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbTEnLCAnbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgICAgICIiImNsYXNzaWZ5X2NsYXNzX2F0dHJzIGZpbmRzIHN0YXRpYyBtZXRob2RzLCBjbGFzcyBtZXRob2RzLAorICAgICAgICBwcm9wZXJ0aWVzLCBub3JtYWwgbWV0aG9kcywgYW5kIGRhdGEgYXR0cmlidXRlcyBvbiBhbiBvbGQtc3R5bGUKKyAgICAgICAgY2xhc3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbGFzc2lmeV90ZXN0KEZhbHNlKQogCiAKLSAgICAgICAgY2xhc3MgQyhBKToKLSAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgYyhzZWxmKTogcGFzcwotCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhDKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnbWV0aG9kJywgQykgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEMpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKLQotICAgICAgICBjbGFzcyBEKEIsIEMpOgotICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQikgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEQpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQotCi0gICAgIyBSZXBlYXQgYWxsIHRoYXQsIGJ1dCB3LyBuZXctc3R5bGUgY2xhc3Nlcy4KICAgICBkZWYgdGVzdF9jbGFzc2lmeV9uZXdzdHlsZShzZWxmKToKLSAgICAgICAgY2xhc3MgQShvYmplY3QpOgotCi0gICAgICAgICAgICBkZWYgcygpOiBwYXNzCi0gICAgICAgICAgICBzID0gc3RhdGljbWV0aG9kKHMpCi0KLSAgICAgICAgICAgIGRlZiBjKGNscyk6IHBhc3MKLSAgICAgICAgICAgIGMgPSBjbGFzc21ldGhvZChjKQotCi0gICAgICAgICAgICBkZWYgZ2V0cChzZWxmKTogcGFzcwotICAgICAgICAgICAgcCA9IHByb3BlcnR5KGdldHApCi0KLSAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgICAgIGRlZiBtMShzZWxmKTogcGFzcwotCi0gICAgICAgICAgICBkYXRhYmxvYiA9ICcxJwotCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKLQotICAgICAgICBjbGFzcyBCKEEpOgotCi0gICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcwotCi0gICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhCKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGNsYXNzIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3AnLCAncHJvcGVydHknLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtJywgJ21ldGhvZCcsIEIpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdtMScsICdtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICAgICAgIiIiSnVzdCBsaWtlIHRlc3RfY2xhc3NpZnlfb2xkc3R5bGUsIGJ1dCBmb3IgYSBuZXctc3R5bGUgY2xhc3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbGFzc2lmeV90ZXN0KFRydWUpCiAKIAotICAgICAgICBjbGFzcyBDKEEpOgogCi0gICAgICAgICAgICBkZWYgbShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGMoc2VsZik6IHBhc3MKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnYycsICdtZXRob2QnLCBDKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20nLCAnbWV0aG9kJywgQykgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICMgdHVwbGUgcGFyYW1ldGVycyBhcmUgbmFtZWQgJy4xJywgJy4yJywgZXRjLgorICAgIGlzX3R1cGxlbmFtZSA9IHJlLmNvbXBpbGUocideXC5cZCskJykubWF0Y2gKIAotICAgICAgICBjbGFzcyBEKEIsIEMpOgorICAgIGRlZiBhc3NlcnRFcXVhbENhbGxBcmdzKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgbG9jcyA9IGRpY3QobG9jcyBvciB7fSwgZnVuYz1mdW5jKQorICAgICAgICByMSA9IGV2YWwoJ2Z1bmMoJXMpJyAlIGNhbGxfcGFyYW1zX3N0cmluZywgTm9uZSwgbG9jcykKKyAgICAgICAgcjIgPSBldmFsKCdpbnNwZWN0LmdldGNhbGxhcmdzKGZ1bmMsICVzKScgJSBjYWxsX3BhcmFtc19zdHJpbmcsIE5vbmUsCisgICAgICAgICAgICAgICAgICBsb2NzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKIAotICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1fc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2YWwoJ2Z1bmMoJXMpJyAlIGNhbGxfcGFyYW1fc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZhbCgnaW5zcGVjdC5nZXRjYWxsYXJncyhmdW5jLCAlcyknICUgY2FsbF9wYXJhbV9zdHJpbmcsIE5vbmUsCisgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4MjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhjZXB0aW9uIG5vdCByYWlzZWQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXgxKSwgdHlwZShleDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleDEpLCBzdHIoZXgyKSkKIAotICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoRCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdjJywgJ21ldGhvZCcsIEMpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbScsICdtZXRob2QnLCBCKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCgnbTEnLCAnbWV0aG9kJywgRCkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgZGVmIG1ha2VDYWxsYWJsZShzZWxmLCBzaWduYXR1cmUpOgorICAgICAgICAiIiJDcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgaXRzIGxvY2FscygpLCBleGNsdWRpbmcgdGhlCisgICAgICAgIGF1dG9nZW5lcmF0ZWQgJy4xJywgJy4yJywgZXRjLiB0dXBsZSBwYXJhbSBuYW1lcyAoaWYgYW55KS4iIiIKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgIHF1aWV0PVRydWUpOgorICAgICAgICAgICAgY29kZSA9ICgibGFtYmRhICVzOiBkaWN0KGkgZm9yIGkgaW4gbG9jYWxzKCkuaXRlbXMoKSAiCisgICAgICAgICAgICAgICAgICAgICJpZiBub3QgaXNfdHVwbGVuYW1lKGlbMF0pKSIpCisgICAgICAgICAgICByZXR1cm4gZXZhbChjb2RlICUgc2lnbmF0dXJlLCB7J2lzX3R1cGxlbmFtZScgOiBzZWxmLmlzX3R1cGxlbmFtZX0pCisKKyAgICBkZWYgdGVzdF9wbGFpbihzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2E9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0zLCBhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGI9MycpCisgICAgICAgICMgZXhwYW5kICppdGVyYWJsZSAvICoqbWFwcGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyooMiwpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqWzJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKDIsIDMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqWzIsIDNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnsiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgKip7ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqKnsiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqeyJiIjozLCAiYSI6Mn0nKQorICAgICAgICAjIGV4cGFuZCBVc2VyTGlzdCAvIFVzZXJEaWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlVzZXJMaXN0KFsyXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypVc2VyTGlzdChbMiwgM10pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKlVzZXJEaWN0KGE9MiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICoqVXNlckRpY3QoYj0zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0yLCAqKlVzZXJEaWN0KGE9MyknKQorICAgICAgICAjIHVuaWNvZGUga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7dSJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0zLCAqKnt1ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqKnt1ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnt1ImIiOjMsIHUiYSI6Mn0nKQorCisgICAgZGVmIHRlc3RfdmFyYXJncyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiPTEsICpjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKDIsMyw0KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKlszLDRdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCAqVXNlckxpc3QoWzRdKScpCisKKyAgICBkZWYgdGVzdF92YXJrdyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiPTEsICoqYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBiPTMsIGM9NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0zLCBhPTIsIGM9NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYz00LCAqKnsiYSI6MiwgImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBjPTQsICoqeyJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0yLCAqKnsiYSI6MywgImMiOjR9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKlVzZXJEaWN0KGE9MiwgYj0zLCBjPTQpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBjPTQsICoqVXNlckRpY3QoYj0zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0yLCAqKlVzZXJEaWN0KGE9MywgYz00KScpCisgICAgICAgICMgdW5pY29kZSBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTQsICoqe3UiYSI6MiwgdSJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYz00LCAqKnt1ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqe3UiYSI6MywgdSJjIjo0fScpCisKKyAgICBkZWYgdGVzdF90dXBsZWFyZ3Moc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnKGIsYyksIChkLChlLGYpKT0oMCxbMSwyXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdbMiwzXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnVXNlckxpc3QoWzIsM10pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcoMiwzKSwgKDQsKDUsNikpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcoMiwzKSwgKDQsWzUsNl0pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcoMiwzKSwgWzQsVXNlckxpc3QoWzUsNl0pXScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9mZWF0dXJlcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiPTIsIChjLChkLGUpKT0oMyxbNCw1XSksICpmLCAqKmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsICg0LFs1LDZdKSwgNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgKlsoNCxbNSw2XSksIDddLCB4PTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsIHg9OCwgKlsoNCxbNSw2XSksIDddJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCB4PTgsICpbMywgKDQsWzUsNl0pLCA3XSwgeT05JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICd4PTgsICpbMiwgMywgKDQsWzUsNl0pXSwgeT05JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICd4PTgsICpVc2VyTGlzdChbMiwgMywgKDQsWzUsNl0pXSksICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKnsieSI6OSwgInoiOjEwfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgeD04LCAqVXNlckxpc3QoWzMsICg0LFs1LDZdKV0pLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKipVc2VyRGljdCh5PTksIHo9MTApJykKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgZjAgPSBzZWxmLm1ha2VDYWxsYWJsZSgnJykKKyAgICAgICAgZjEgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYicpCisgICAgICAgIGYyID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MScpCisgICAgICAgICMgZjAgdGFrZXMgbm8gYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjAsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJ3g9MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjAsICcxLHg9MScpCisgICAgICAgICMgZjEgdGFrZXMgZXhhY3RseSAyIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMSwgJ2I9MycpCisgICAgICAgICMgZjIgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYyLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMiwgJ2I9MycpCisgICAgICAgIGZvciBmIGluIGYxLCBmMjoKKyAgICAgICAgICAgICMgZjEvZjIgdGFrZXMgZXhhY3RseS9hdCBtb3N0IDIgYXJndW1lbnRzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCA0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsIDIsIDMsIGE9MScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCA0LCBjPTUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgMywgNCwgYT0xLCBjPTUnKQorICAgICAgICAgICAgIyBmIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJ2M9MicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCBjPTMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgMywgYz00JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIGM9NCwgYj0zJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJyoqe3UiXHUwM2MwXHUwM2I5IjogNH0nKQorICAgICAgICAgICAgIyBmIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsIGE9MicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCAqKnsiYSI6Mn0nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgMiwgYj0zJykKKyAgICAgICAgICAgICMgWFhYOiBQeXRob24gaW5jb25zaXN0ZW5jeQorICAgICAgICAgICAgIyAtIGZvciBmdW5jdGlvbnMgYW5kIGJvdW5kIG1ldGhvZHM6IHVuZXhwZWN0ZWQga2V5d29yZCAnYycKKyAgICAgICAgICAgICMgLSBmb3IgdW5ib3VuZCBtZXRob2RzOiBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgJ2EnCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgYz0zLCBhPTInKQorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJyhhLGIpPSgwLDEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJ1sxXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJygxLDIsMyknKQorCitjbGFzcyBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzKFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNscyA9IEZvbworICAgICAgICBzZWxmLmluc3QgPSBGb28oKQorCisgICAgZGVmIG1ha2VDYWxsYWJsZShzZWxmLCBzaWduYXR1cmUpOgorICAgICAgICBhc3NlcnQgJ3NlbGYnIG5vdCBpbiBzaWduYXR1cmUKKyAgICAgICAgbWsgPSBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLCBzZWxmKS5tYWtlQ2FsbGFibGUKKyAgICAgICAgc2VsZi5jbHMubWV0aG9kID0gbWsoJ3NlbGYsICcgKyBzaWduYXR1cmUpCisgICAgICAgIHJldHVybiBzZWxmLmluc3QubWV0aG9kCisKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzKFRlc3RHZXRjYWxsYXJnc01ldGhvZHMpOgorCisgICAgZGVmIG1ha2VDYWxsYWJsZShzZWxmLCBzaWduYXR1cmUpOgorICAgICAgICBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikubWFrZUNhbGxhYmxlKHNpZ25hdHVyZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2xzLm1ldGhvZAorCisgICAgZGVmIGFzc2VydEVxdWFsQ2FsbEFyZ3Moc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICByZXR1cm4gc3VwZXIoVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIHNlbGYpLmFzc2VydEVxdWFsQ2FsbEFyZ3MoCisgICAgICAgICAgICAqc2VsZi5fZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKSkKKworICAgIGRlZiBhc3NlcnRFcXVhbEV4Y2VwdGlvbihzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikuYXNzZXJ0RXF1YWxFeGNlcHRpb24oCisgICAgICAgICAgICAqc2VsZi5fZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKSkKKworICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBhc3NlcnQgJ2luc3QnIG5vdCBpbiBjYWxsX3BhcmFtc19zdHJpbmcKKyAgICAgICAgbG9jcyA9IGRpY3QobG9jcyBvciB7fSwgaW5zdD1zZWxmLmluc3QpCisgICAgICAgIHJldHVybiAoZnVuYywgJ2luc3QsJyArIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcykKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChUZXN0RGVjb3JhdG9ycywgVGVzdFJldHJpZXZpbmdTb3VyY2VDb2RlLCBUZXN0T25lbGluZXJzLAotICAgICAgICAgICAgICAgICBUZXN0QnVnZ3lDYXNlcywKLSAgICAgICAgICAgICAgICAgVGVzdEludGVycHJldGVyU3RhY2ssIFRlc3RDbGFzc2VzQW5kRnVuY3Rpb25zLCBUZXN0UHJlZGljYXRlcykKKyAgICBydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3REZWNvcmF0b3JzLCBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUsIFRlc3RPbmVsaW5lcnMsIFRlc3RCdWdneUNhc2VzLAorICAgICAgICBUZXN0SW50ZXJwcmV0ZXJTdGFjaywgVGVzdENsYXNzZXNBbmRGdW5jdGlvbnMsIFRlc3RQcmVkaWNhdGVzLAorICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnMsIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsCisgICAgICAgIFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ludC5weSBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CmluZGV4IDUxZmQxOTUuLmZhNDYyMTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CkBAIC0yLDYgKzIsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaGF2ZV91bmljb2RlCitpbXBvcnQgbWF0aAogCiBMID0gWwogICAgICAgICAoJzAnLCAwKSwKQEAgLTc1LDE1ICs3NiwxNSBAQAogICAgICAgICBzID0gcmVwcigtMS1zeXMubWF4aW50KQogICAgICAgICB4ID0gaW50KHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCsxLCAtc3lzLm1heGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGludCkKICAgICAgICAgIyBzaG91bGQgcmV0dXJuIGxvbmcKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc1sxOl0pLCBzeXMubWF4aW50KzEpCiAKICAgICAgICAgIyBzaG91bGQgcmV0dXJuIGxvbmcKICAgICAgICAgeCA9IGludCgxZTEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsb25nKQogICAgICAgICB4ID0gaW50KC0xZTEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsb25nKQogCiAKICAgICAgICAgIyBTRiBidWcgNDM0MTg2OiAgMHg4MDAwMDAwMC8yICE9IDB4ODAwMDAwMDA+PjEuCkBAIC0xMDEsMTEgKzEwMiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxMjNceDAwIDI0NScsIDIwKQogCiAgICAgICAgIHggPSBpbnQoJzEnICogNjAwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh4LCBsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCiAKICAgICAgICAgaWYgaGF2ZV91bmljb2RlOgogICAgICAgICAgICAgeCA9IGludCh1bmljaHIoMHg2NjEpICogNjAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeCwgbG9uZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgMSwgMTIpCiAKQEAgLTI0Niw2ICsyNDcsNzQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJicjQ1cWMnLCAzNSksIDQyOTQ5NjcyOTdMKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMXoxNDF6NScsIDM2KSwgNDI5NDk2NzI5N0wpCiAKKyAgICBkZWYgdGVzdF9iaXRfbGVuZ3RoKHNlbGYpOgorICAgICAgICB0aW55ID0gMWUtMTAKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKC02NTAwMCwgNjUwMDApOgorICAgICAgICAgICAgayA9IHguYml0X2xlbmd0aCgpCisgICAgICAgICAgICAjIENoZWNrIGVxdWl2YWxlbmNlIHdpdGggUHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbGVuKGJpbih4KS5sc3RyaXAoJy0wYicpKSkKKyAgICAgICAgICAgICMgQmVoYXZpb3VyIGFzIHNwZWNpZmllZCBpbiB0aGUgZG9jcworICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiooay0xKSA8PSBhYnMoeCkgPCAyKiprKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIDApCisgICAgICAgICAgICAjIEFsdGVybmF0aXZlIGRlZmluaXRpb246IHguYml0X2xlbmd0aCgpID09IDEgKyBmbG9vcihsb2dfMih4KSkKKyAgICAgICAgICAgIGlmIHggIT0gMDoKKyAgICAgICAgICAgICAgICAjIFdoZW4geCBpcyBhbiBleGFjdCBwb3dlciBvZiAyLCBudW1lcmljIGVycm9ycyBjYW4KKyAgICAgICAgICAgICAgICAjIGNhdXNlIGZsb29yKGxvZyh4KS9sb2coMikpIHRvIGJlIG9uZSB0b28gc21hbGw7IGZvcgorICAgICAgICAgICAgICAgICMgc21hbGwgeCB0aGlzIGNhbiBiZSBmaXhlZCBieSBhZGRpbmcgYSBzbWFsbCBxdWFudGl0eQorICAgICAgICAgICAgICAgICMgdG8gdGhlIHF1b3RpZW50IGJlZm9yZSB0YWtpbmcgdGhlIGZsb29yLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMSArIG1hdGguZmxvb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmxvZyhhYnMoeCkpL21hdGgubG9nKDIpICsgdGlueSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkuYml0X2xlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDIpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTIpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgZm9yIGkgaW4gWzIsIDMsIDE1LCAxNiwgMTcsIDMxLCAzMiwgMzMsIDYzLCA2NF06CisgICAgICAgICAgICBhID0gMioqaQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS0xKS5iaXRfbGVuZ3RoKCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLWEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSsxKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC1hLTEpLmJpdF9sZW5ndGgoKSwgaSsxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIGRlZiB0ZXN0X2Zsb2F0X2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgdmFsdWVzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBmbG9hdHMKKyAgICAgICAgZXhhY3RfdmFsdWVzID0gWy0yLCAtMSwgMCwgMSwgMiwgMioqNTIsIDIqKjUzLTEsIDIqKjUzLCAyKio1MysyLAorICAgICAgICAgICAgICAgICAgICAgICAgIDIqKjUzKzQsIDIqKjU0LTQsIDIqKjU0LTIsIDIqKjYzLCAtMioqNjMsIDIqKjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgIC0yKio2NCwgMTAqKjIwLCAxMCoqMjEsIDEwKioyMl0KKyAgICAgICAgZm9yIHZhbHVlIGluIGV4YWN0X3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KGludCh2YWx1ZSkpKSwgdmFsdWUpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtdG8tZXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1MysxKSksIDIqKjUzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1MysyKSksIDIqKjUzKzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzMpKSwgMioqNTMrNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrNSkpLCAyKio1Mys0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1Mys2KSksIDIqKjUzKzYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzcpKSwgMioqNTMrOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtMSkpLCAtMioqNTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0yKSksIC0yKio1My0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtMykpLCAtMioqNTMtNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTUpKSwgLTIqKjUzLTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My02KSksIC0yKio1My02KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtNykpLCAtMioqNTMtOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NC0yKSksIDIqKjU0LTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0LTEpKSwgMioqNTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzIpKSwgMioqNTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzMpKSwgMioqNTQrNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrNSkpLCAyKio1NCs0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NCs2KSksIDIqKjU0KzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzEwKSksIDIqKjU0KzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzExKSksIDIqKjU0KzEyKQorCiAgICAgZGVmIHRlc3RfaW50Y29udmVyc2lvbihzZWxmKToKICAgICAgICAgIyBUZXN0IF9faW50X18oKQogICAgICAgICBjbGFzcyBDbGFzc2ljTWlzc2luZ01ldGhvZHM6CkBAIC0zMjMsNyArMzkyLDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGludChUcnVuY1JldHVybnNOb25JbnRlZ3JhbCgpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdHJ1bmNfXyByZXR1cm5lZCBub24tSW50ZWdyYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHR5cGUgTm9uSW50ZWdyYWwpIikKICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pby5weSBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKaW5kZXggZTc1Nzk5Mi4uMGJhZDU2ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CkBAIC0xLDQgKzEsMjQgQEAKLSIiIlVuaXQgdGVzdHMgZm9yIGlvLnB5LiIiIgorIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGlvIG1vZHVsZS4iIiIKKworIyBUZXN0cyBvZiBpbyBhcmUgc2NhdHRlcmVkIG92ZXIgdGhlIHRlc3Qgc3VpdGU6CisjICogdGVzdF9idWZpbyAtIHRlc3RzIGZpbGUgYnVmZmVyaW5nCisjICogdGVzdF9tZW1vcnlpbyAtIHRlc3RzIEJ5dGVzSU8gYW5kIFN0cmluZ0lPCisjICogdGVzdF9maWxlaW8gLSB0ZXN0cyBGaWxlSU8KKyMgKiB0ZXN0X2ZpbGUgLSB0ZXN0cyB0aGUgZmlsZSBpbnRlcmZhY2UKKyMgKiB0ZXN0X2lvIC0gdGVzdHMgZXZlcnl0aGluZyBlbHNlIGluIHRoZSBpbyBtb2R1bGUKKyMgKiB0ZXN0X3VuaXZuZXdsaW5lcyAtIHRlc3RzIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyMgKiB0ZXN0X2xhcmdlZmlsZSAtIHRlc3RzIG9wZXJhdGlvbnMgb24gYSBmaWxlIGdyZWF0ZXIgdGhhbiAyKiozMiBieXRlcworIyAgICAgKG9ubHkgZW5hYmxlZCB3aXRoIC11bGFyZ2VmaWxlKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBVFRFTlRJT04gVEVTVCBXUklURVJTISEhCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaGVuIHdyaXRpbmcgdGVzdHMgZm9yIGlvLCBpdCdzIGltcG9ydGFudCB0byB0ZXN0IGJvdGggdGhlIEMgYW5kIFB5dGhvbgorIyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgdXN1YWxseSBkb25lIGJ5IHdyaXRpbmcgYSBiYXNlIHRlc3QgdGhhdCByZWZlcnMgdG8KKyMgdGhlIHR5cGUgaXQgaXMgdGVzdGluZyBhcyBhIGF0dHJpYnV0ZS4gVGhlbiBpdCBwcm92aWRlcyBjdXN0b20gc3ViY2xhc3NlcyB0bworIyB0ZXN0IGJvdGggaW1wbGVtZW50YXRpb25zLiBUaGlzIGZpbGUgaGFzIGxvdHMgb2YgZXhhbXBsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKIApAQCAtNiwzMCArMjYsNDUgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgYXJyYXkKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCByYW5kb20KIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBhYmMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBlcnJubwogZnJvbSBpdGVydG9vbHMgaW1wb3J0IGN5Y2xlLCBjb3VudAotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CiAKIGltcG9ydCBjb2RlY3MKLWltcG9ydCBpbyAgIyBUaGUgbW9kdWxlIHVuZGVyIHRlc3QKK2ltcG9ydCBpbyAgIyBDIGltcGxlbWVudGF0aW9uIG9mIGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpbwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK19fbWV0YWNsYXNzX18gPSB0eXBlCitieXRlcyA9IHN1cHBvcnQucHkza19ieXRlcworCitkZWYgX2RlZmF1bHRfY2h1bmtfc2l6ZSgpOgorICAgICIiIkdldCB0aGUgZGVmYXVsdCBUZXh0SU9XcmFwcGVyIGNodW5rIHNpemUiIiIKKyAgICB3aXRoIGlvLm9wZW4oX19maWxlX18sICJyIiwgZW5jb2Rpbmc9ImxhdGluMSIpIGFzIGY6CisgICAgICAgIHJldHVybiBmLl9DSFVOS19TSVpFCiAKIAotY2xhc3MgTW9ja1Jhd0lPKGlvLlJhd0lPQmFzZSk6CitjbGFzcyBNb2NrUmF3SU9XaXRob3V0UmVhZDoKKyAgICAiIiJBIFJhd0lPIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVhZCgpLCBzbyBhcyB0byBleGVyY2lzZSB0aGUgZGVmYXVsdAorICAgIFJhd0lPLnJlYWQoKSB3aGljaCBjYWxscyByZWFkaW50bygpLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRfc3RhY2s9KCkpOgogICAgICAgICBzZWxmLl9yZWFkX3N0YWNrID0gbGlzdChyZWFkX3N0YWNrKQogICAgICAgICBzZWxmLl93cml0ZV9zdGFjayA9IFtdCi0KLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9zdGFjay5wb3AoMCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIGIiIgorICAgICAgICBzZWxmLl9yZWFkcyA9IDAKKyAgICAgICAgc2VsZi5fZXh0cmFuZW91c19yZWFkcyA9IDAKIAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJbOl0pCisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrLmFwcGVuZChieXRlcyhiKSkKICAgICAgICAgcmV0dXJuIGxlbihiKQogCiAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgpAQCAtNDUsNDkgKzgwLDE3NiBAQAogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2UpOgotICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiAwICAgIyB3cm9uZyBidXQgd2UgZ290dGEgcmV0dXJuIHNvbWV0aGluZwogCiAgICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiA0MgorICAgICAgICByZXR1cm4gMCAgICMgc2FtZSBjb21tZW50IGFzIGFib3ZlCisKKyAgICBkZWYgcmVhZGludG8oc2VsZiwgYnVmKToKKyAgICAgICAgc2VsZi5fcmVhZHMgKz0gMQorICAgICAgICBtYXhfbGVuID0gbGVuKGJ1ZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3JlYWRfc3RhY2tbMF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9leHRyYW5lb3VzX3JlYWRzICs9IDEKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9yZWFkX3N0YWNrWzBdCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIGlmIGxlbihkYXRhKSA8PSBtYXhfbGVuOgorICAgICAgICAgICAgZGVsIHNlbGYuX3JlYWRfc3RhY2tbMF0KKyAgICAgICAgICAgIGJ1Zls6bl0gPSBkYXRhCisgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYnVmWzpdID0gZGF0YVs6bWF4X2xlbl0KKyAgICAgICAgICAgIHNlbGYuX3JlYWRfc3RhY2tbMF0gPSBkYXRhW21heF9sZW46XQorICAgICAgICAgICAgcmV0dXJuIG1heF9sZW4KKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBwb3MKKworY2xhc3MgQ01vY2tSYXdJT1dpdGhvdXRSZWFkKE1vY2tSYXdJT1dpdGhvdXRSZWFkLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlNb2NrUmF3SU9XaXRob3V0UmVhZChNb2NrUmF3SU9XaXRob3V0UmVhZCwgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKIAogCi1jbGFzcyBNb2NrRmlsZUlPKGlvLkJ5dGVzSU8pOgorY2xhc3MgTW9ja1Jhd0lPKE1vY2tSYXdJT1dpdGhvdXRSZWFkKToKKworICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6CisgICAgICAgIHNlbGYuX3JlYWRzICs9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfc3RhY2sucG9wKDApCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhbmVvdXNfcmVhZHMgKz0gMQorICAgICAgICAgICAgcmV0dXJuIGIiIgorCitjbGFzcyBDTW9ja1Jhd0lPKE1vY2tSYXdJTywgaW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFB5TW9ja1Jhd0lPKE1vY2tSYXdJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBNaXNiZWhhdmVkUmF3SU8oTW9ja1Jhd0lPKToKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIHJldHVybiBNb2NrUmF3SU8ud3JpdGUoc2VsZiwgYikgKiAyCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICByZXR1cm4gTW9ja1Jhd0lPLnJlYWQoc2VsZiwgbikgKiAyCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZSk6CisgICAgICAgIHJldHVybiAtMTIzCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIC00NTYKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICBNb2NrUmF3SU8ucmVhZGludG8oc2VsZiwgYnVmKQorICAgICAgICByZXR1cm4gbGVuKGJ1ZikgKiA1CisKK2NsYXNzIENNaXNiZWhhdmVkUmF3SU8oTWlzYmVoYXZlZFJhd0lPLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlNaXNiZWhhdmVkUmF3SU8oTWlzYmVoYXZlZFJhd0lPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIENsb3NlRmFpbHVyZUlPKE1vY2tSYXdJTyk6CisgICAgY2xvc2VkID0gMAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IDEKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKworY2xhc3MgQ0Nsb3NlRmFpbHVyZUlPKENsb3NlRmFpbHVyZUlPLCBpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworY2xhc3MgUHlDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBNb2NrRmlsZUlPOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLnJlYWRfaGlzdG9yeSA9IFtdCi0gICAgICAgIGlvLkJ5dGVzSU8uX19pbml0X18oc2VsZiwgZGF0YSkKKyAgICAgICAgc3VwZXIoTW9ja0ZpbGVJTywgc2VsZikuX19pbml0X18oZGF0YSkKIAogICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIHJlcyA9IGlvLkJ5dGVzSU8ucmVhZChzZWxmLCBuKQorICAgICAgICByZXMgPSBzdXBlcihNb2NrRmlsZUlPLCBzZWxmKS5yZWFkKG4pCiAgICAgICAgIHNlbGYucmVhZF9oaXN0b3J5LmFwcGVuZChOb25lIGlmIHJlcyBpcyBOb25lIGVsc2UgbGVuKHJlcykpCiAgICAgICAgIHJldHVybiByZXMKIAorICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgcmVzID0gc3VwZXIoTW9ja0ZpbGVJTywgc2VsZikucmVhZGludG8oYikKKyAgICAgICAgc2VsZi5yZWFkX2hpc3RvcnkuYXBwZW5kKHJlcykKKyAgICAgICAgcmV0dXJuIHJlcwogCi1jbGFzcyBNb2NrTm9uQmxvY2tXcml0ZXJJTyhpby5SYXdJT0Jhc2UpOgorY2xhc3MgQ01vY2tGaWxlSU8oTW9ja0ZpbGVJTywgaW8uQnl0ZXNJTyk6CisgICAgcGFzcwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJsb2NraW5nX3NjcmlwdCk6Ci0gICAgICAgIHNlbGYuX2Jsb2NraW5nX3NjcmlwdCA9IGxpc3QoYmxvY2tpbmdfc2NyaXB0KQorY2xhc3MgUHlNb2NrRmlsZUlPKE1vY2tGaWxlSU8sIHB5aW8uQnl0ZXNJTyk6CisgICAgcGFzcworCisKK2NsYXNzIE1vY2tOb25CbG9ja1dyaXRlcklPOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl93cml0ZV9zdGFjayA9IFtdCisgICAgICAgIHNlbGYuX2Jsb2NrZXJfY2hhciA9IE5vbmUKIAotICAgIGRlZiB3cml0ZShzZWxmLCBiKToKLSAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJbOl0pCi0gICAgICAgIG4gPSBzZWxmLl9ibG9ja2luZ19zY3JpcHQucG9wKDApCi0gICAgICAgIGlmIChuIDwgMCk6Ci0gICAgICAgICAgICByYWlzZSBpby5CbG9ja2luZ0lPRXJyb3IoMCwgInRlc3QgYmxvY2tpbmciLCAtbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBuCisgICAgZGVmIHBvcF93cml0dGVuKHNlbGYpOgorICAgICAgICBzID0gYiIiLmpvaW4oc2VsZi5fd3JpdGVfc3RhY2spCisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrWzpdID0gW10KKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBibG9ja19vbihzZWxmLCBjaGFyKToKKyAgICAgICAgIiIiQmxvY2sgd2hlbiBhIGdpdmVuIGNoYXIgaXMgZW5jb3VudGVyZWQuIiIiCisgICAgICAgIHNlbGYuX2Jsb2NrZXJfY2hhciA9IGNoYXIKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgYiA9IGJ5dGVzKGIpCisgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBzZWxmLl9ibG9ja2VyX2NoYXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IGIuaW5kZXgoc2VsZi5fYmxvY2tlcl9jaGFyKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9ibG9ja2VyX2NoYXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGJbOm5dKQorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuQmxvY2tpbmdJT0Vycm9yKDAsICJ0ZXN0IGJsb2NraW5nIiwgbikKKyAgICAgICAgc2VsZi5fd3JpdGVfc3RhY2suYXBwZW5kKGIpCisgICAgICAgIHJldHVybiBsZW4oYikKKworY2xhc3MgQ01vY2tOb25CbG9ja1dyaXRlcklPKE1vY2tOb25CbG9ja1dyaXRlcklPLCBpby5SYXdJT0Jhc2UpOgorICAgIEJsb2NraW5nSU9FcnJvciA9IGlvLkJsb2NraW5nSU9FcnJvcgorCitjbGFzcyBQeU1vY2tOb25CbG9ja1dyaXRlcklPKE1vY2tOb25CbG9ja1dyaXRlcklPLCBweWlvLlJhd0lPQmFzZSk6CisgICAgQmxvY2tpbmdJT0Vycm9yID0gcHlpby5CbG9ja2luZ0lPRXJyb3IKKwogCiBjbGFzcyBJT1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB3cml0ZV9vcHMoc2VsZiwgZik6Ci0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiYmxhaC4iKSwgNSkKICAgICAgICAgZi50cnVuY2F0ZSgwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1KQpAQCAtMTA3LDEwICsyNjksNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50cnVuY2F0ZSgxMiksIDEyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiaGlqIiksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsMSksIDE2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxNikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRydW5jYXRlKDEyKSwgMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5zZWVrLCAwLjApCiAKICAgICBkZWYgcmVhZF9vcHMoc2VsZiwgZiwgYnVmZmVyZWQ9RmFsc2UpOgpAQCAtMTMzLDEwICsyOTEsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtNiwgMSksIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDUpLCBiIiB3b3JsIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTApCi0gICAgICAgIGYuc2VlaygwKQotICAgICAgICBmLnJlYWQoMikKLSAgICAgICAgZi5zZWVrKDAsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5zZWVrLCAwLjApCiAgICAgICAgIGlmIGJ1ZmZlcmVkOgogICAgICAgICAgICAgZi5zZWVrKDApCkBAIC0xNjQsNjcgKzMxOCw3MSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtMSwgMiksIHNlbGYuTEFSR0UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCBiIngiKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRyeSB3cml0aW5nIG9uIGEgZmlsZSBvcGVuZWQgaW4gcmVhZCBtb2RlIGFuZCB2aWNlLXZlcnNhLgorICAgICAgICBmb3IgbW9kZSBpbiAoInciLCAid2IiKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC5yZWFkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLnJlYWRsaW5lKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZSwgYiJibGFoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlbGluZXMsIFtiImJsYWhcbiJdKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlLCAiYmxhaCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZWxpbmVzLCBbImJsYWhcbiJdKQorCiAgICAgZGVmIHRlc3RfcmF3X2ZpbGVfaW8oc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIsIGJ1ZmZlcmluZz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5yZWFkX29wcyhmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVfb3BzKGYpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLnJlYWRfb3BzKGYpCiAKICAgICBkZWYgdGVzdF9idWZmZXJlZF9maWxlX2lvKHNlbGYpOgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLnJlYWRfb3BzKGYsIFRydWUpCi0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyK2IiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQotICAgICAgICBzZWxmLndyaXRlX29wcyhmKQotICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgc2VsZi5yZWFkX29wcyhmLCBUcnVlKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5yZWFkX29wcyhmLCBUcnVlKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGYud3JpdGUoYiJhYmNcbmRlZlxueHl6enlcbmZvbyIpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYiJhYmNcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxMCksIGIiZGVmXG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMiksIGIieHkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoNCksIGIienp5XG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYiJmb28iKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIiYWJjXG5kZWZcbnh5enp5XG5mb29ceDAwYmFyXG5hbm90aGVyIGxpbmUiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCBiImFiY1xuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxMCksIGIiZGVmXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKDIpLCBiInh5IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSg0KSwgYiJ6enlcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYiJmb29ceDAwYmFyXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKE5vbmUpLCBiImFub3RoZXIgbGluZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmUsIDUuMykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZSwgNS4zKQogCiAgICAgZGVmIHRlc3RfcmF3X2J5dGVzX2lvKHNlbGYpOgotICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGYgPSBzZWxmLkJ5dGVzSU8oKQogICAgICAgICBzZWxmLndyaXRlX29wcyhmKQogICAgICAgICBkYXRhID0gZi5nZXR2YWx1ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJoZWxsbyB3b3JsZFxuIikKLSAgICAgICAgZiA9IGlvLkJ5dGVzSU8oZGF0YSkKKyAgICAgICAgZiA9IHNlbGYuQnl0ZXNJTyhkYXRhKQogICAgICAgICBzZWxmLnJlYWRfb3BzKGYsIFRydWUpCiAKICAgICBkZWYgdGVzdF9sYXJnZV9maWxlX29wcyhzZWxmKToKICAgICAgICAgIyBPbiBXaW5kb3dzIGFuZCBNYWMgT1NYIHRoaXMgdGVzdCBjb21zdW1lcyBsYXJnZSByZXNvdXJjZXM7IEl0IHRha2VzCiAgICAgICAgICMgYSBsb25nIHRpbWUgdG8gYnVpbGQgdGhlID4yR0IgZmlsZSBhbmQgdGFrZXMgPjJHQiBvZiBkaXNrIHNwYWNlCiAgICAgICAgICMgdGhlcmVmb3JlIHRoZSByZXNvdXJjZSBtdXN0IGJlIGVuYWJsZWQgdG8gcnVuIHRoaXMgdGVzdC4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICBpZiBub3QgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImxhcmdlZmlsZSIpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIGlmIG5vdCBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImxhcmdlZmlsZSIpOgogICAgICAgICAgICAgICAgIHByaW50KCJcblRlc3RpbmcgbGFyZ2UgZmlsZSBvcHMgc2tpcHBlZCBvbiAlcy4iICUgc3lzLnBsYXRmb3JtLAogICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICBwcmludCgiSXQgcmVxdWlyZXMgJWQgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lLiIgJSBzZWxmLkxBUkdFLApAQCAtMjMyLDIyICszOTAsMjAgQEAKICAgICAgICAgICAgICAgICBwcmludCgiVXNlICdyZWdydGVzdC5weSAtdSBsYXJnZWZpbGUgdGVzdF9pbycgdG8gcnVuIGl0LiIsCiAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidytiIiwgMCkKLSAgICAgICAgc2VsZi5sYXJnZV9maWxlX29wcyhmKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIncrYiIpCi0gICAgICAgIHNlbGYubGFyZ2VfZmlsZV9vcHMoZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidytiIiwgMCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9vcHMoZikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3K2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX29wcyhmKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9vcGVuKHNlbGYpOgogICAgICAgICBmb3IgYnVmc2l6ZSBpbiAoMCwgMSwgMTAwKToKICAgICAgICAgICAgIGYgPSBOb25lCi0gICAgICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmc2l6ZSkgYXMgZjoKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZzaXplKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoYiJ4eHgiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgVHJ1ZSkKICAgICAgICAgICAgIGYgPSBOb25lCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZnNpemUpIGFzIGY6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZnNpemUpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIDEgLy8gMAogICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZWQsIFRydWUpCkBAIC0yNTYsNjAgKzQxMiwxMDUgQEAKIAogICAgICMgaXNzdWUgNTAwOAogICAgIGRlZiB0ZXN0X2FwcGVuZF9tb2RlX3RlbGwoc2VsZik6Ci0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoYiJ4eHgiKQotICAgICAgICB3aXRoIGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgImFiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYWIiLCBidWZmZXJpbmc9MCkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDMpCi0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiYWIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgImFiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDMpCi0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiYSIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZi50ZWxsKCkgPiAwKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgImEiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYudGVsbCgpID4gMCkKIAogICAgIGRlZiB0ZXN0X2Rlc3RydWN0b3Ioc2VsZik6CiAgICAgICAgIHJlY29yZCA9IFtdCi0gICAgICAgIGNsYXNzIE15RmlsZUlPKGlvLkZpbGVJTyk6CisgICAgICAgIGNsYXNzIE15RmlsZUlPKHNlbGYuRmlsZUlPKToKICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKLSAgICAgICAgICAgICAgICBpby5GaWxlSU8uX19kZWxfXyhzZWxmKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHN1cGVyKE15RmlsZUlPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCiAgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQotICAgICAgICAgICAgICAgIGlvLkZpbGVJTy5jbG9zZShzZWxmKQorICAgICAgICAgICAgICAgIHN1cGVyKE15RmlsZUlPLCBzZWxmKS5jbG9zZSgpCiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQotICAgICAgICAgICAgICAgIGlvLkZpbGVJTy5mbHVzaChzZWxmKQotICAgICAgICBmID0gTXlGaWxlSU8odGVzdF9zdXBwb3J0LlRFU1RGTiwgInciKQotICAgICAgICBmLndyaXRlKCJ4eHgiKQorICAgICAgICAgICAgICAgIHN1cGVyKE15RmlsZUlPLCBzZWxmKS5mbHVzaCgpCisgICAgICAgIGYgPSBNeUZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShiInh4eCIpCiAgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJ4eHgiKQorCisgICAgZGVmIF9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZiwgYmFzZSk6CisgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgIGNsYXNzIE15SU8oYmFzZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBUaGlzIGV4ZXJjaXNlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGF0dHJpYnV0ZXMgb24gb2JqZWN0CisgICAgICAgICAgICAgICAgIyBkZXN0cnVjdGlvbi4KKyAgICAgICAgICAgICAgICAjIChpbiB0aGUgQyB2ZXJzaW9uLCBjbG9zZSgpIGlzIGNhbGxlZCBieSB0aGUgdHBfZGVhbGxvYworICAgICAgICAgICAgICAgICMgZnVuY3Rpb24sIG5vdCBieSBfX2RlbF9fKQorICAgICAgICAgICAgICAgIHNlbGYub25fZGVsID0gMQorICAgICAgICAgICAgICAgIHNlbGYub25fY2xvc2UgPSAyCisgICAgICAgICAgICAgICAgc2VsZi5vbl9mbHVzaCA9IDMKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoc2VsZi5vbl9kZWwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlJTywgc2VsZikuX19kZWxfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoc2VsZi5vbl9jbG9zZSkKKyAgICAgICAgICAgICAgICBzdXBlcihNeUlPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2ZsdXNoKQorICAgICAgICAgICAgICAgIHN1cGVyKE15SU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgZiA9IE15SU8oKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQogCi0gICAgZGVmIHRlc3RfY2xvc2VfZmx1c2hlcyhzZWxmKToKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgZi53cml0ZShiInh4eCIpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiInh4eCIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgIGRlZiB0ZXN0X0lPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5JT0Jhc2UpCiAKLSAgICBkZWYgWFhYdGVzdF9hcnJheV93cml0ZXMoc2VsZik6Ci0gICAgICAgICMgWFhYIG1lbW9yeSB2aWV3IG5vdCBhdmFpbGFibGUgeWV0Ci0gICAgICAgIGEgPSBhcnJheS5hcnJheSgnaScsIHJhbmdlKDEwKSkKLSAgICAgICAgbiA9IGxlbihtZW1vcnl2aWV3KGEpKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCi0gICAgICAgIGYuY2xvc2UoKQorICAgIGRlZiB0ZXN0X1Jhd0lPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5SYXdJT0Jhc2UpCisKKyAgICBkZWYgdGVzdF9CdWZmZXJlZElPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5CdWZmZXJlZElPQmFzZSkKKworICAgIGRlZiB0ZXN0X1RleHRJT0Jhc2VfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzZV9kZXN0cnVjdG9yKHNlbGYuVGV4dElPQmFzZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZsdXNoZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJ4eHgiKQorCisgICAgZGVmIHRlc3RfYXJyYXlfd3JpdGVzKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidpJywgcmFuZ2UoMTApKQorICAgICAgICBuID0gbGVuKGEudG9zdHJpbmcoKSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIDApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGEpLCBuKQogCiAgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW8ub3BlbiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm9wZW4sIHN1cHBvcnQuVEVTVEZOLCAndycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZmQ9RmFsc2UpCiAKLSAgICBkZWYgdGVzdFJlYWRDbG9zZWQoc2VsZik6Ci0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgZGVmIHRlc3RfcmVhZF9jbG9zZWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKCJlZ2dcbiIpCi0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlID0gaW8ub3BlbihmLmZpbGVubygpLCAiciIsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5vcGVuKGYuZmlsZW5vKCksICJyIiwgY2xvc2VmZD1GYWxzZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5yZWFkKCksICJlZ2dcbiIpCiAgICAgICAgICAgICBmaWxlLnNlZWsoMCkKICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQpAQCAtMzE3LDEwMCArNTE4LDI2MyBAQAogCiAgICAgZGVmIHRlc3Rfbm9fY2xvc2VmZF93aXRoX2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICAjIGNhbid0IHVzZSBjbG9zZWZkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBmaWxlIG5hbWUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW8ub3BlbiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgInIiLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm9wZW4sIHN1cHBvcnQuVEVTVEZOLCAiciIsIGNsb3NlZmQ9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9jbG9zZWZkX2F0dHIoc2VsZik6Ci0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoYiJlZ2dcbiIpCi0gICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5jbG9zZWZkLCBUcnVlKQotICAgICAgICAgICAgZmlsZSA9IGlvLm9wZW4oZi5maWxlbm8oKSwgInIiLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYub3BlbihmLmZpbGVubygpLCAiciIsIGNsb3NlZmQ9RmFsc2UpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUuYnVmZmVyLnJhdy5jbG9zZWZkLCBGYWxzZSkKIAorICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBGaWxlSU8gb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKKyAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgorICAgICAgICBmID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGYud3JpdGUoYiJhYmN4eHgiKQorICAgICAgICBmLmYgPSBmCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmN4eHgiKQorCisgICAgZGVmIHRlc3RfdW5ib3VuZGVkX2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNzQ2MDY6IHJlYWRpbmcgZnJvbSBhbiB1bmJvdW5kZWQgc3RyZWFtIHN1Y2ggYXMgL2Rldi96ZXJvLgorICAgICAgICB6ZXJvID0gIi9kZXYvemVybyIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHplcm8pOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiezB9IGRvZXMgbm90IGV4aXN0Ii5mb3JtYXQoemVybykpCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgY2FuIG9ubHkgcnVuIGluIGEgMzItYml0IGFkZHJlc3Mgc3BhY2UiKQorICAgICAgICBpZiBzdXBwb3J0LnJlYWxfbWF4X21lbXVzZSA8IHN1cHBvcnQuXzJHOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCByZXF1aXJlcyBhdCBsZWFzdCAyR0Igb2YgbWVtb3J5IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInJiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHplcm8sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHplcm8sICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKwogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQogICAgICAgICBmLmZsdXNoID0gYmFkX2ZsdXNoCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuZmx1c2gpCiAKKyAgICBkZWYgdGVzdF9SYXdJT0Jhc2VfcmVhZChzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgZGVmYXVsdCBSYXdJT0Jhc2UucmVhZCgpIGltcGxlbWVudGF0aW9uICh3aGljaCBjYWxscworICAgICAgICAjIHJlYWRpbnRvKCkgaW50ZXJuYWxseSkuCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU9XaXRob3V0UmVhZCgoYiJhYmMiLCBiImQiLCBOb25lLCBiImVmZyIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiYWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBiIiIpCiAKLWNsYXNzIE1lbW9yeVNlZWtUZXN0TWl4aW46CitjbGFzcyBDSU9UZXN0KElPVGVzdCk6CisgICAgcGFzcwogCi0gICAgZGVmIHRlc3RJbml0KHNlbGYpOgotICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQotICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKLQotICAgIGRlZiB0ZXN0UmVhZChzZWxmKToKLSAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKLSAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmWzoxXSwgYnl0ZXNJby5yZWFkKDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWZbMTo1XSwgYnl0ZXNJby5yZWFkKDQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWZbNTpdLCBieXRlc0lvLnJlYWQoOTAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5FT0YsIGJ5dGVzSW8ucmVhZCgpKQotCi0gICAgZGVmIHRlc3RSZWFkTm9BcmdzKHNlbGYpOgotICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQotICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYsIGJ5dGVzSW8ucmVhZCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCi0KLSAgICBkZWYgdGVzdFNlZWsoc2VsZik6Ci0gICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCi0gICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQotCi0gICAgICAgIGJ5dGVzSW8ucmVhZCg1KQotICAgICAgICBieXRlc0lvLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLCBieXRlc0lvLnJlYWQoKSkKLQotICAgICAgICBieXRlc0lvLnNlZWsoMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmWzM6XSwgYnl0ZXNJby5yZWFkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnl0ZXNJby5zZWVrLCAwLjApCi0KLSAgICBkZWYgdGVzdFRlbGwoc2VsZik6Ci0gICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCi0gICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGJ5dGVzSW8udGVsbCgpKQotICAgICAgICBieXRlc0lvLnNlZWsoNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNSwgYnl0ZXNJby50ZWxsKCkpCi0gICAgICAgIGJ5dGVzSW8uc2VlaygxMDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMTAwMDAsIGJ5dGVzSW8udGVsbCgpKQorY2xhc3MgUHlJT1Rlc3QoSU9UZXN0KToKKyAgICB0ZXN0X2FycmF5X3dyaXRlcyA9IHVuaXR0ZXN0LnNraXAoCisgICAgICAgICJsZW4oYXJyYXkuYXJyYXkpIHJldHVybnMgbnVtYmVyIG9mIGVsZW1lbnRzIHJhdGhlciB0aGFuIGJ5dGVsZW5ndGgiCisgICAgKShJT1Rlc3QudGVzdF9hcnJheV93cml0ZXMpCiAKIAotY2xhc3MgQnl0ZXNJT1Rlc3QoTWVtb3J5U2Vla1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYnVmdHlwZShzKToKLSAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIpCi0gICAgaW9jbGFzcyA9IGlvLkJ5dGVzSU8KLSAgICBFT0YgPSBiIiIKK2NsYXNzIENvbW1vbkJ1ZmZlcmVkVGVzdHM6CisgICAgIyBUZXN0cyBjb21tb24gdG8gQnVmZmVyZWRSZWFkZXIsIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbQorCisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZiA9IHNlbGYudHAocmF3KQorICAgICAgICBzZWxmLmFzc2VydElzKGJ1Zi5kZXRhY2goKSwgcmF3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWYuZGV0YWNoKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGJ1ZmlvLmZpbGVubygpKQorCisgICAgZGVmIHRlc3Rfbm9fZmlsZW5vKHNlbGYpOgorICAgICAgICAjIFhYWCB3aWxsIHdlIGFsd2F5cyBoYXZlIGZpbGVubygpIGZ1bmN0aW9uPyBJZiBzbywga2lsbAorICAgICAgICAjIHRoaXMgdGVzdC4gRWxzZSwgd3JpdGUgaXQuCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgIyBJbnZhbGlkIHdoZW5jZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5zZWVrLCAwLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uc2VlaywgMCwgMykKKworICAgIGRlZiB0ZXN0X292ZXJyaWRlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHRwID0gc2VsZi50cAorICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICBjbGFzcyBNeUJ1ZmZlcmVkSU8odHApOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHN1cGVyKE15QnVmZmVyZWRJTywgc2VsZikuX19kZWxfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBzdXBlcihNeUJ1ZmZlcmVkSU8sIHNlbGYpLmNsb3NlKCkKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgc3VwZXIoTXlCdWZmZXJlZElPLCBzZWxmKS5mbHVzaCgpCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IE15QnVmZmVyZWRJTyhyYXdpbykKKyAgICAgICAgd3JpdGFibGUgPSBidWZpby53cml0YWJsZSgpCisgICAgICAgIGRlbCBidWZpbworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBpZiB3cml0YWJsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDJdKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdXNhYmlsaXR5IGFzIGEgY29udGV4dCBtYW5hZ2VyCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIGRlZiBfd2l0aCgpOgorICAgICAgICAgICAgd2l0aCBidWZpbzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIF93aXRoKCkKKyAgICAgICAgIyBidWZpbyBzaG91bGQgbm93IGJlIGNsb3NlZCwgYW5kIHVzaW5nIGl0IGEgc2Vjb25kIHRpbWUgc2hvdWxkIHJhaXNlCisgICAgICAgICMgYSBWYWx1ZUVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfd2l0aCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX3Rocm91Z2hfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4Y2VwdGlvbiBzdGF0ZSBpcyBub3QgbW9kaWZpZWQgYnkgYSBkZXN0cnVjdG9yLAorICAgICAgICAjIGV2ZW4gaWYgY2xvc2UoKSBmYWlscy4KKyAgICAgICAgcmF3aW8gPSBzZWxmLkNsb3NlRmFpbHVyZUlPKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYudHAocmF3aW8pLnh5enp5CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZikKKyAgICAgICAgcyA9IHMuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgY2xzbmFtZSA9ICIlcy4lcyIgJSAoc2VsZi50cC5fX21vZHVsZV9fLCBzZWxmLnRwLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYiksICI8JXM+IiAlIGNsc25hbWUpCisgICAgICAgIHJhdy5uYW1lID0gImR1bW15IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYiksICI8JXMgbmFtZT11J2R1bW15Jz4iICUgY2xzbmFtZSkKKyAgICAgICAgcmF3Lm5hbWUgPSBiImR1bW15IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYiksICI8JXMgbmFtZT0nZHVtbXknPiIgJSBjbHNuYW1lKQorCisgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgIHJhdy5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICBiID0gc2VsZi50cChyYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKworICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIGIuY2xvc2UoKQorICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5mbHVzaCkKKworICAgIGRlZiB0ZXN0X3JlYWRvbmx5X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmID0gc2VsZi50cChyYXcpCisgICAgICAgIHggPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpKToKKyAgICAgICAgICAgIGJ1Zi5yYXcgPSB4CiAKIAotY2xhc3MgU3RyaW5nSU9UZXN0KE1lbW9yeVNlZWtUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBidWZ0eXBlID0gc3RyCi0gICAgaW9jbGFzcyA9IGlvLlN0cmluZ0lPCi0gICAgRU9GID0gIiIKK2NsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CisgICAgcmVhZF9tb2RlID0gInJiIgogCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xMDI0KQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbywgYnVmZmVyX3NpemU9MTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgYnVmaW8ucmVhZCgpKQogCi1jbGFzcyBCdWZmZXJlZFJlYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIGZvciBhcmcgaW4gKE5vbmUsIDcpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKGFyZykpCisgICAgICAgICMgSW52YWxpZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWQsIC0yKQogCi0gICAgZGVmIHRlc3RSZWFkKHNlbGYpOgotICAgICAgICByYXdpbyA9IE1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkUmVhZGVyKHJhd2lvKQorICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImEiLCBidWZpby5yZWFkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYiIsIGJ1ZmlvLnJlYWQxKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImMiLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImQiLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImVmZyIsIGJ1ZmlvLnJlYWQxKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucmVhZDEoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDQpCisgICAgICAgICMgSW52YWxpZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWQxLCAtMSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFiY2RlZiIsIGJ1ZmlvLnJlYWQoNikpCisgICAgZGVmIHRlc3RfcmVhZGludG8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBiID0gYnl0ZWFycmF5KDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJnZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJnZiIpCiAKLSAgICBkZWYgdGVzdEJ1ZmZlcmluZyhzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGRlZiBidWZpbygpOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmNcbiIsIGIiZFxuIiwgYiJlZiIpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudHAocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8oKS5yZWFkbGluZXMoKSwgW2IiYWJjXG4iLCBiImRcbiIsIGIiZWYiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpbygpLnJlYWRsaW5lcyg1KSwgW2IiYWJjXG4iLCBiImRcbiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvKCkucmVhZGxpbmVzKE5vbmUpLCBbYiJhYmNcbiIsIGIiZFxuIiwgYiJlZiJdKQorCisgICAgZGVmIHRlc3RfYnVmZmVyaW5nKHNlbGYpOgogICAgICAgICBkYXRhID0gYiJhYmNkZWZnaGkiCiAgICAgICAgIGRsZW4gPSBsZW4oZGF0YSkKIApAQCAtNDIxLDYxICs3ODUsNTQgQEAKICAgICAgICAgXQogCiAgICAgICAgIGZvciBidWZzaXplLCBidWZfcmVhZF9zaXplcywgcmF3X3JlYWRfc2l6ZXMgaW4gdGVzdHM6Ci0gICAgICAgICAgICByYXdpbyA9IE1vY2tGaWxlSU8oZGF0YSkKLSAgICAgICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja0ZpbGVJTyhkYXRhKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCBidWZmZXJfc2l6ZT1idWZzaXplKQogICAgICAgICAgICAgcG9zID0gMAogICAgICAgICAgICAgZm9yIG5ieXRlcyBpbiBidWZfcmVhZF9zaXplczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWZpby5yZWFkKG5ieXRlcyksIGRhdGFbcG9zOnBvcytuYnl0ZXNdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuYnl0ZXMpLCBkYXRhW3Bvczpwb3MrbmJ5dGVzXSkKICAgICAgICAgICAgICAgICBwb3MgKz0gbmJ5dGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyYXdpby5yZWFkX2hpc3RvcnksIHJhd19yZWFkX3NpemVzKQorICAgICAgICAgICAgIyB0aGlzIGlzIG1pbGRseSBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZF9oaXN0b3J5LCByYXdfcmVhZF9zaXplcykKIAotICAgIGRlZiB0ZXN0UmVhZE5vbkJsb2NraW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X3JlYWRfbm9uX2Jsb2NraW5nKHNlbGYpOgogICAgICAgICAjIEluamVjdCBzb21lIE5vbmUncyBpbiB0aGVyZSB0byBzaW11bGF0ZSBFV09VTERCTE9DSwotICAgICAgICByYXdpbyA9IE1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBOb25lLCBiImVmZyIsIE5vbmUsIE5vbmUpKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkUmVhZGVyKHJhd2lvKQorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIE5vbmUsIGIiZWZnIiwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFiY2QiLCBidWZpby5yZWFkKDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImUiLCBidWZpby5yZWFkKDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImZnIiwgYnVmaW8ucmVhZCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oTm9uZSBpcyBidWZpby5yZWFkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiIiwgYnVmaW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZCIsIGJ1ZmlvLnJlYWQoNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJlIiwgYnVmaW8ucmVhZCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImZnIiwgYnVmaW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucGVlaygxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5vbmUgaXMgYnVmaW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucmVhZCgpKQogCi0gICAgZGVmIHRlc3RSZWFkVG9Fb2Yoc2VsZik6Ci0gICAgICAgIHJhd2lvID0gTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8pCisgICAgZGVmIHRlc3RfcmVhZF9wYXN0X2VvZihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhYmNkZWZnIiwgYnVmaW8ucmVhZCg5MDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKDkwMDApKQogCi0gICAgZGVmIHRlc3RSZWFkTm9BcmdzKHNlbGYpOgotICAgICAgICByYXdpbyA9IE1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQotICAgICAgICBidWZpbyA9IGlvLkJ1ZmZlcmVkUmVhZGVyKHJhd2lvKQorICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFiY2RlZmciLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmNkZWZnIiwgYnVmaW8ucmVhZCgpKQogCi0gICAgZGVmIHRlc3RGaWxlbm8oc2VsZik6Ci0gICAgICAgIHJhd2lvID0gTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3aW8pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDIsIGJ1ZmlvLmZpbGVubygpKQotCi0gICAgZGVmIHRlc3RGaWxlbm9Ob0ZpbGVubyhzZWxmKToKLSAgICAgICAgIyBYWFggd2lsbCB3ZSBhbHdheXMgaGF2ZSBmaWxlbm8oKSBmdW5jdGlvbj8gSWYgc28sIGtpbGwKLSAgICAgICAgIyB0aGlzIHRlc3QuIEVsc2UsIHdyaXRlIGl0LgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdFRocmVhZHMoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnY3B1JykKKyAgICBkZWYgdGVzdF90aHJlYWRzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFdyaXRlIG91dCBtYW55IGJ5dGVzIHdpdGggZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgMCdzLAogICAgICAgICAgICAgIyAxJ3MuLi4gMjU1J3MuIFRoaXMgd2lsbCBoZWxwIHVzIGNoZWNrIHRoYXQgY29uY3VycmVudCByZWFkaW5nCiAgICAgICAgICAgICAjIGRvZXNuJ3QgZHVwbGljYXRlIG9yIGZvcmdldCBjb250ZW50cy4KICAgICAgICAgICAgIE4gPSAxMDAwCi0gICAgICAgICAgICBsID0gcmFuZ2UoMjU2KSAqIE4KKyAgICAgICAgICAgIGwgPSBsaXN0KHJhbmdlKDI1NikpICogTgogICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUobCkKICAgICAgICAgICAgIHMgPSBieXRlcyhieXRlYXJyYXkobCkpCi0gICAgICAgICAgICB3aXRoIGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUocykKLSAgICAgICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgcmF3OgotICAgICAgICAgICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3LCA4KQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYucmVhZF9tb2RlLCBidWZmZXJpbmc9MCkgYXMgcmF3OgorICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCiAgICAgICAgICAgICAgICAgZXJyb3JzID0gW10KICAgICAgICAgICAgICAgICByZXN1bHRzID0gW10KICAgICAgICAgICAgICAgICBkZWYgZigpOgpAQCAtNTAzLDgyICs4NjAsMjY1IEBACiAgICAgICAgICAgICAgICAgICAgIGMgPSBieXRlcyhieXRlYXJyYXkoW2ldKSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGMpLCBOKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKworICAgIGRlZiB0ZXN0X25vX2V4dHJhbmVvdXNfcmVhZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTU1MDsgd2hlbiB0aGUgcmF3IElPIG9iamVjdCBoYXMgc2F0aXNmaWVkIHRoZSByZWFkIHJlcXVlc3QsCisgICAgICAgICMgd2Ugc2hvdWxkIG5vdCBpc3N1ZSBhbnkgYWRkaXRpb25hbCByZWFkcywgb3RoZXJ3aXNlIGl0IG1heSBibG9jaworICAgICAgICAjIChlLmcuIHNvY2tldCkuCisgICAgICAgIGJ1ZnNpemUgPSAxNgorICAgICAgICBmb3IgbiBpbiAoMiwgYnVmc2l6ZSAtIDEsIGJ1ZnNpemUsIGJ1ZnNpemUgKyAxLCBidWZzaXplICogMik6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKFtiIngiICogbl0pCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZnNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQobiksIGIieCIgKiBuKQorICAgICAgICAgICAgIyBTaW1wbGUgY2FzZTogb25lIHJhdyByZWFkIGlzIGVub3VnaCB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fZXh0cmFuZW91c19yZWFkcywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBmb3Ige306IHt9ICE9IDAiLmZvcm1hdChuLCByYXdpby5fZXh0cmFuZW91c19yZWFkcykpCisgICAgICAgICAgICAjIEEgbW9yZSBjb21wbGV4IGNhc2Ugd2hlcmUgdHdvIHJhdyByZWFkcyBhcmUgbmVlZGVkIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICMgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKFtiIngiICogKG4gLSAxKSwgYiJ4Il0pCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZnNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQobiksIGIieCIgKiBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fZXh0cmFuZW91c19yZWFkcywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBmb3Ige306IHt9ICE9IDAiLmZvcm1hdChuLCByYXdpby5fZXh0cmFuZW91c19yZWFkcykpCiAKIAorY2xhc3MgQ0J1ZmZlcmVkUmVhZGVyVGVzdChCdWZmZXJlZFJlYWRlclRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRSZWFkZXIKIAotY2xhc3MgQnVmZmVyZWRXcml0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgIyBUaGUgYWxsb2NhdGlvbiBjYW4gc3VjY2VlZCBvbiAzMi1iaXQgYnVpbGRzLCBlLmcuIHdpdGggbW9yZQorICAgICAgICAjIHRoYW4gMkdCIFJBTSBhbmQgYSA2NC1iaXQga2VybmVsLgorICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDB4N0ZGRkZGRkY6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgYnVmaW8uX19pbml0X18sIHJhd2lvLCBzeXMubWF4c2l6ZSkKIAotICAgIGRlZiB0ZXN0V3JpdGUoc2VsZik6CisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCkKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW9fcmVhZChzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICMgX3B5aW8uQnVmZmVyZWRSZWFkZXIgc2VlbXMgdG8gaW1wbGVtZW50IHJlYWRpbmcgZGlmZmVyZW50LCBzbyB0aGF0CisgICAgICAgICMgY2hlY2tpbmcgdGhpcyBpcyBub3Qgc28gZWFzeS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ucmVhZCwgMTApCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCisgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZi5mID0gZgorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorCitjbGFzcyBQeUJ1ZmZlcmVkUmVhZGVyVGVzdChCdWZmZXJlZFJlYWRlclRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFJlYWRlcgorCisKK2NsYXNzIEJ1ZmZlcmVkV3JpdGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CisgICAgd3JpdGVfbW9kZSA9ICJ3YiIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8sIGJ1ZmZlcl9zaXplPTEwMjQpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBidWZpby53cml0ZShiImFiYyIpKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGJ1ZmlvLndyaXRlKGIiZ2hpIikpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIuam9pbihyYXdpby5fd3JpdGVfc3RhY2spLCBiImFiY2doaSIpCisKKyAgICBkZWYgdGVzdF9kZXRhY2hfZmx1c2goc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmID0gc2VsZi50cChyYXcpCisgICAgICAgIGJ1Zi53cml0ZShiImhvd2R5ISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmF3Ll93cml0ZV9zdGFjaykKKyAgICAgICAgYnVmLmRldGFjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3Ll93cml0ZV9zdGFjaywgW2IiaG93ZHkhIl0pCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgIyBXcml0ZSB0byB0aGUgYnVmZmVyZWQgSU8gYnV0IGRvbid0IG92ZXJmbG93IHRoZSBidWZmZXIuCi0gICAgICAgIHdyaXRlciA9IE1vY2tSYXdJTygpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRXcml0ZXIod3JpdGVyLCA4KQotCisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKICAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmMiKQotCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3JpdGVyLl93cml0ZV9zdGFjaykKIAotICAgIGRlZiB0ZXN0V3JpdGVPdmVyZmxvdyhzZWxmKToKLSAgICAgICAgd3JpdGVyID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcih3cml0ZXIsIDgpCisgICAgZGVmIHRlc3Rfd3JpdGVfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKKyAgICAgICAgY29udGVudHMgPSBiImFiY2RlZmdoaWprbG1ub3AiCisgICAgICAgIGZvciBuIGluIHJhbmdlKDAsIGxlbihjb250ZW50cyksIDMpOgorICAgICAgICAgICAgYnVmaW8ud3JpdGUoY29udGVudHNbbjpuKzNdKQorICAgICAgICBmbHVzaGVkID0gYiIiLmpvaW4od3JpdGVyLl93cml0ZV9zdGFjaykKKyAgICAgICAgIyBBdCBsZWFzdCAodG90YWwgLSA4KSBieXRlcyB3ZXJlIGltcGxpY2l0bHkgZmx1c2hlZCwgcGVyaGFwcyBtb3JlCisgICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsdXNoZWQuc3RhcnRzd2l0aChjb250ZW50c1s6LThdKSwgZmx1c2hlZCkKIAotICAgICAgICBidWZpby53cml0ZShiImFiYyIpCi0gICAgICAgIGJ1ZmlvLndyaXRlKGIiZGVmZ2hpamtsIikKKyAgICBkZWYgY2hlY2tfd3JpdGVzKHNlbGYsIGludGVybWVkaWF0ZV9mdW5jKToKKyAgICAgICAgIyBMb3RzIG9mIHdyaXRlcywgdGVzdCB0aGUgZmx1c2hlZCBvdXRwdXQgaXMgYXMgZXhwZWN0ZWQuCisgICAgICAgIGNvbnRlbnRzID0gYnl0ZXMocmFuZ2UoMjU2KSkgKiAxMDAwCisgICAgICAgIG4gPSAwCisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgMTMpCisgICAgICAgICMgR2VuZXJhdG9yIG9mIHdyaXRlIHNpemVzOiByZXBlYXQgZWFjaCBOIDE1IHRpbWVzIHRoZW4gcHJvY2VlZCB0byBOKzEKKyAgICAgICAgZGVmIGdlbl9zaXplcygpOgorICAgICAgICAgICAgZm9yIHNpemUgaW4gY291bnQoMSk6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzaXplCisgICAgICAgIHNpemVzID0gZ2VuX3NpemVzKCkKKyAgICAgICAgd2hpbGUgbiA8IGxlbihjb250ZW50cyk6CisgICAgICAgICAgICBzaXplID0gbWluKG5leHQoc2l6ZXMpLCBsZW4oY29udGVudHMpIC0gbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoY29udGVudHNbbjpuK3NpemVdKSwgc2l6ZSkKKyAgICAgICAgICAgIGludGVybWVkaWF0ZV9mdW5jKGJ1ZmlvKQorICAgICAgICAgICAgbiArPSBzaXplCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywKKyAgICAgICAgICAgIGIiIi5qb2luKHdyaXRlci5fd3JpdGVfc3RhY2spKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiYWJjZGVmZ2hpamtsIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKKyAgICBkZWYgdGVzdF93cml0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKGxhbWJkYSBidWZpbzogTm9uZSkKIAotICAgIGRlZiB0ZXN0V3JpdGVOb25CbG9ja2luZyhzZWxmKToKLSAgICAgICAgcmF3ID0gTW9ja05vbkJsb2NrV3JpdGVySU8oKDksIDIsIDEwLCAtNiwgMTAsIDgsIDEyKSkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcihyYXcsIDgsIDE2KQorICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfZmx1c2hlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMobGFtYmRhIGJ1ZmlvOiBidWZpby5mbHVzaCgpKQogCi0gICAgICAgIGJ1ZmlvLndyaXRlKGIiYXNkZiIpCi0gICAgICAgIGJ1ZmlvLndyaXRlKGIiYXNkZmEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzZGZhc2RmYSIsIHJhdy5fd3JpdGVfc3RhY2tbMF0pCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9zZWVrcyhzZWxmKToKKyAgICAgICAgZGVmIF9zZWVrYWJzKGJ1ZmlvKToKKyAgICAgICAgICAgIHBvcyA9IGJ1ZmlvLnRlbGwoKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MgKyAxLCAwKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MgLSAxLCAwKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MsIDApCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9zZWVrYWJzKQorICAgICAgICBkZWYgX3NlZWtyZWwoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8uc2VlaygwLCAxKQorICAgICAgICAgICAgYnVmaW8uc2VlaygrMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3NlZWtyZWwpCiAKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJhc2RmYXNkZmFzZGYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFzZGZhc2RmYXNkZiIsIHJhdy5fd3JpdGVfc3RhY2tbMV0pCi0gICAgICAgIGJ1ZmlvLndyaXRlKGIiYXNkZmFzZGZhc2RmIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJkZmFzZGZhc2RmIiwgcmF3Ll93cml0ZV9zdGFja1syXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhc2RmYXNkZmFzZGYiLCByYXcuX3dyaXRlX3N0YWNrWzNdKQorICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfdHJ1bmNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyaXRlcyhsYW1iZGEgYnVmaW86IGJ1ZmlvLnRydW5jYXRlKGJ1ZmlvLnRlbGwoKSkpCiAKLSAgICAgICAgYnVmaW8ud3JpdGUoYiJhc2RmYXNkZmFzZGYiKQorICAgIGRlZiB0ZXN0X3dyaXRlX25vbl9ibG9ja2luZyhzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrTm9uQmxvY2tXcml0ZXJJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCiAKLSAgICAgICAgIyBYWFggSSBkb24ndCBsaWtlIHRoaXMgdGVzdC4gSXQgcmVsaWVzIHRvbyBoZWF2aWx5IG9uIGhvdyB0aGUKLSAgICAgICAgIyBhbGdvcml0aG0gYWN0dWFsbHkgd29ya3MsIHdoaWNoIHdlIG1pZ2h0IGNoYW5nZS4gUmVmYWN0b3IKLSAgICAgICAgIyBsYXRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiImFiY2QiKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiImVmZ2hpIiksIDUpCisgICAgICAgICMgMSBieXRlIHdpbGwgYmUgd3JpdHRlbiwgdGhlIHJlc3Qgd2lsbCBiZSBidWZmZXJlZAorICAgICAgICByYXcuYmxvY2tfb24oYiJrIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiImprbG1uIiksIDUpCiAKLSAgICBkZWYgdGVzdEZpbGVubyhzZWxmKToKLSAgICAgICAgcmF3aW8gPSBNb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKLSAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgIyA4IGJ5dGVzIHdpbGwgYmUgd3JpdHRlbiwgOCB3aWxsIGJlIGJ1ZmZlcmVkIGFuZCB0aGUgcmVzdCB3aWxsIGJlIGxvc3QKKyAgICAgICAgcmF3LmJsb2NrX29uKGIiMCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGIib3Bxcnd4eXowMTIzNDU2Nzg5IikKKyAgICAgICAgZXhjZXB0IHNlbGYuQmxvY2tpbmdJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICB3cml0dGVuID0gZS5jaGFyYWN0ZXJzX3dyaXR0ZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQmxvY2tpbmdJT0Vycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0dGVuLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcucG9wX3dyaXR0ZW4oKSwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyd3h5eiIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNDIsIGJ1ZmlvLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiQUJDREVGR0hJIiksIDkpCisgICAgICAgIHMgPSByYXcucG9wX3dyaXR0ZW4oKQorICAgICAgICAjIFByZXZpb3VzbHkgYnVmZmVyZWQgYnl0ZXMgd2VyZSBmbHVzaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoYiIwMTIzNDU2N0EiKSwgcykKIAotICAgIGRlZiB0ZXN0Rmx1c2goc2VsZik6Ci0gICAgICAgIHdyaXRlciA9IE1vY2tSYXdJTygpCi0gICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRXcml0ZXIod3JpdGVyLCA4KQorICAgIGRlZiB0ZXN0X3dyaXRlX2FuZF9yZXdpbmQoc2VsZik6CisgICAgICAgIHJhdyA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiYWJjZGVmIiksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCA2KQorICAgICAgICBidWZpby5zZWVrKDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJYWSIpLCAyKQorICAgICAgICBidWZpby5zZWVrKDYsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGIiWFljZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIjEyMzQ1NiIpLCA2KQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGIiWFljZGVmMTIzNDU2IikKIAorICAgIGRlZiB0ZXN0X2ZsdXNoKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCiAgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKICAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImFiYyIsIHdyaXRlci5fd3JpdGVfc3RhY2tbMF0pCisgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBidWZpby53cml0ZShiImFiYyIpCisgICAgICAgIGRlbCBidWZpbworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKIAotICAgIGRlZiB0ZXN0VGhyZWFkcyhzZWxmKToKLSAgICAgICAgIyBCdWZmZXJlZFdyaXRlciBzaG91bGQgbm90IHJhaXNlIGV4Y2VwdGlvbnMgb3IgY3Jhc2gKLSAgICAgICAgIyB3aGVuIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisgICAgZGVmIHRlc3RfdHJ1bmNhdGUoc2VsZik6CisgICAgICAgICMgVHJ1bmNhdGUgaW1wbGljaXRseSBmbHVzaGVzIHRoZSBidWZmZXIuCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLndyaXRlX21vZGUsIGJ1ZmZlcmluZz0wKSBhcyByYXc6CisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA4KQorICAgICAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmNkZWYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby50cnVuY2F0ZSgzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCA2KQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCdjcHUnKQorICAgIGRlZiB0ZXN0X3RocmVhZHMoc2VsZik6CiAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV3JpdGUgb3V0IG1hbnkgYnl0ZXMgZnJvbSBtYW55IHRocmVhZHMgYW5kIHRlc3QgdGhleSB3ZXJlCisgICAgICAgICAgICAjIGFsbCBmbHVzaGVkLgorICAgICAgICAgICAgTiA9IDEwMDAKKyAgICAgICAgICAgIGNvbnRlbnRzID0gYnl0ZXMocmFuZ2UoMjU2KSkgKiBOCisgICAgICAgICAgICBzaXplcyA9IGN5Y2xlKFsxLCAxOV0pCisgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgcXVldWUgPSBkZXF1ZSgpCisgICAgICAgICAgICB3aGlsZSBuIDwgbGVuKGNvbnRlbnRzKToKKyAgICAgICAgICAgICAgICBzaXplID0gbmV4dChzaXplcykKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQoY29udGVudHNbbjpuK3NpemVdKQorICAgICAgICAgICAgICAgIG4gKz0gc2l6ZQorICAgICAgICAgICAgZGVsIGNvbnRlbnRzCiAgICAgICAgICAgICAjIFdlIHVzZSBhIHJlYWwgZmlsZSBvYmplY3QgYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8KICAgICAgICAgICAgICMgZXhlcmNpc2Ugc2l0dWF0aW9ucyB3aGVyZSB0aGUgR0lMIGlzIHJlbGVhc2VkIGJlZm9yZQogICAgICAgICAgICAgIyB3cml0aW5nIHRoZSBidWZmZXIgdG8gdGhlIHJhdyBzdHJlYW1zLiBUaGlzIGlzIGluIGFkZGl0aW9uCiAgICAgICAgICAgICAjIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBkdWUgdG8gc3dpdGNoaW5nIHRocmVhZHMgaW4gdGhlIG1pZGRsZQogICAgICAgICAgICAgIyBvZiBQeXRob24gY29kZS4KLSAgICAgICAgICAgIHdpdGggaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgcmF3OgotICAgICAgICAgICAgICAgIGJ1ZmlvID0gaW8uQnVmZmVyZWRXcml0ZXIocmF3LCA4KQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYud3JpdGVfbW9kZSwgYnVmZmVyaW5nPTApIGFzIHJhdzoKKyAgICAgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA4KQogICAgICAgICAgICAgICAgIGVycm9ycyA9IFtdCiAgICAgICAgICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgIyBXcml0ZSBlbm91Z2ggYnl0ZXMgdG8gZmx1c2ggdGhlIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGIiYSIgKiAxOQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTApOgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBxdWV1ZS5wb3BsZWZ0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW8ud3JpdGUocykKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChlKQpAQCAtNTkxLDcwICsxMTMxLDM3MCBAQAogICAgICAgICAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAidGhlIGZvbGxvd2luZyBleGNlcHRpb25zIHdlcmUgY2F1Z2h0OiAlciIgJSBlcnJvcnMpCisgICAgICAgICAgICAgICAgYnVmaW8uY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChieXRlcyhbaV0pKSwgTikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCi0gICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6Ci0gICAgICAgIHJhdyA9IE1vY2tSYXdJTygpCi0gICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQotICAgICAgICByYXcuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgYiA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHJhdykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCiAKLSAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKLSAgICAgICAgcmF3ID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgYiA9IGlvLkJ1ZmZlcmVkV3JpdGVyKHJhdykKLSAgICAgICAgYi5jbG9zZSgpCi0gICAgICAgIGIuY2xvc2UoKQotICAgICAgICBiLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5mbHVzaCkKKyAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgOCwgMTIpCiAKIAorY2xhc3MgQ0J1ZmZlcmVkV3JpdGVyVGVzdChCdWZmZXJlZFdyaXRlclRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRXcml0ZXIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorICAgICAgICAjIFRoZSBhbGxvY2F0aW9uIGNhbiBzdWNjZWVkIG9uIDMyLWJpdCBidWlsZHMsIGUuZy4gd2l0aCBtb3JlCisgICAgICAgICMgdGhhbiAyR0IgUkFNIGFuZCBhIDY0LWJpdCBrZXJuZWwuCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBidWZpby5fX2luaXRfXywgcmF3aW8sIHN5cy5tYXhzaXplKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ud3JpdGUsIGIiZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImRlZiIpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgQyBCdWZmZXJlZFdyaXRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcworICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCisgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgIGYueCA9IGYKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjEyM3h4eCIpCisKKworY2xhc3MgUHlCdWZmZXJlZFdyaXRlclRlc3QoQnVmZmVyZWRXcml0ZXJUZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRXcml0ZXIKKwogY2xhc3MgQnVmZmVyZWRSV1BhaXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0UldQYWlyKHNlbGYpOgotICAgICAgICByID0gTW9ja1Jhd0lPKCgpKQotICAgICAgICB3ID0gTW9ja1Jhd0lPKCkKLSAgICAgICAgcGFpciA9IGlvLkJ1ZmZlcmVkUldQYWlyKHIsIHcpCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5jbG9zZWQpCiAKLSAgICAgICAgIyBYWFggTW9yZSBUZXN0cworICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5VbnN1cHBvcnRlZE9wZXJhdGlvbiwgcGFpci5kZXRhY2gpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9tYXhfYnVmZmVyX3NpemVfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSwgOCwgMTIpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF9yZWFkYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTm90UmVhZGFibGUoTW9ja1Jhd0lPKToKKyAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3Rfd3JpdGVhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBOb3RXcml0ZWFibGUoTW9ja1Jhd0lPKToKKyAgICAgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKDMpLCBiImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKDEpLCBiImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZCgpLCBiImVmIikKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKE5vbmUpLCBiImFiYyIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHBhaXIgPSBsYW1iZGE6IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjXG5kZWZcbmgiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyKCkucmVhZGxpbmVzKCksIFtiImFiY1xuIiwgYiJkZWZcbiIsIGIiaCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIoKS5yZWFkbGluZXMoKSwgW2IiYWJjXG4iLCBiImRlZlxuIiwgYiJoIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpcigpLnJlYWRsaW5lcyg1KSwgW2IiYWJjXG4iLCBiImRlZlxuIl0pCisKKyAgICBkZWYgdGVzdF9yZWFkMShzZWxmKToKKyAgICAgICAgIyAucmVhZDEoKSBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgcmVhZGVyIG9iamVjdCwgc28gdGhpcyB0ZXN0CisgICAgICAgICMgY2FuIGJlIHNoYWxsb3cuCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkMSgzKSwgYiJhYmMiKQorCisgICAgZGVmIHRlc3RfcmVhZGludG8oc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWRpbnRvKGRhdGEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiYWJjZGUiKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHcpCisKKyAgICAgICAgcGFpci53cml0ZShiImFiYyIpCisgICAgICAgIHBhaXIuZmx1c2goKQorICAgICAgICBwYWlyLndyaXRlKGIiZGVmIikKKyAgICAgICAgcGFpci5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5fd3JpdGVfc3RhY2ssIFtiImFiYyIsIGIiZGVmIl0pCisKKyAgICBkZWYgdGVzdF9wZWVrKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5wZWVrKDMpLnN0YXJ0c3dpdGgoYiJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoMyksIGIiYWJjIikKKworICAgIGRlZiB0ZXN0X3JlYWRhYmxlKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5yZWFkYWJsZSgpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVhYmxlKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci53cml0YWJsZSgpKQorCisgICAgZGVmIHRlc3Rfc2Vla2FibGUoc2VsZik6CisgICAgICAgICMgQnVmZmVyZWRSV1BhaXJzIGFyZSBuZXZlciBzZWVrYWJsZSwgZXZlbiBpZiB0aGVpciByZWFkZXJzIGFuZCB3cml0ZXJzCisgICAgICAgICMgYXJlLgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuc2Vla2FibGUoKSkKKworICAgICMgLmZsdXNoKCkgaXMgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIHdyaXRlciBvYmplY3QgYW5kIGhhcyBiZWVuCisgICAgIyB0ZXN0ZWQgaW4gdGhlIHRlc3Rfd3JpdGUgbWV0aG9kLgorCisgICAgZGVmIHRlc3RfY2xvc2VfYW5kX2Nsb3NlZChzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLmNsb3NlZCkKKyAgICAgICAgcGFpci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X2lzYXR0eShzZWxmKToKKyAgICAgICAgY2xhc3MgU2VsZWN0YWJsZUlzQXR0eShNb2NrUmF3SU8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlzYXR0eSk6CisgICAgICAgICAgICAgICAgTW9ja1Jhd0lPLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5faXNhdHR5ID0gaXNhdHR5CisKKyAgICAgICAgICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lzYXR0eQorCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpLCBTZWxlY3RhYmxlSXNBdHR5KEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLmlzYXR0eSgpKQorCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKFNlbGVjdGFibGVJc0F0dHkoVHJ1ZSksIFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5pc2F0dHkoKSkKKworICAgICAgICBwYWlyID0gc2VsZi50cChTZWxlY3RhYmxlSXNBdHR5KEZhbHNlKSwgU2VsZWN0YWJsZUlzQXR0eShUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuaXNhdHR5KCkpCisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShUcnVlKSwgU2VsZWN0YWJsZUlzQXR0eShUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuaXNhdHR5KCkpCisKK2NsYXNzIENCdWZmZXJlZFJXUGFpclRlc3QoQnVmZmVyZWRSV1BhaXJUZXN0KToKKyAgICB0cCA9IGlvLkJ1ZmZlcmVkUldQYWlyCisKK2NsYXNzIFB5QnVmZmVyZWRSV1BhaXJUZXN0KEJ1ZmZlcmVkUldQYWlyVGVzdCk6CisgICAgdHAgPSBweWlvLkJ1ZmZlcmVkUldQYWlyCiAKIAotY2xhc3MgQnVmZmVyZWRSYW5kb21UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJ1ZmZlcmVkUmFuZG9tVGVzdChCdWZmZXJlZFJlYWRlclRlc3QsIEJ1ZmZlcmVkV3JpdGVyVGVzdCk6CisgICAgcmVhZF9tb2RlID0gInJiKyIKKyAgICB3cml0ZV9tb2RlID0gIndiKyIKIAotICAgIGRlZiB0ZXN0UmVhZEFuZFdyaXRlKHNlbGYpOgotICAgICAgICByYXcgPSBNb2NrUmF3SU8oKGIiYXNkZiIsIGIiZ2hqayIpKQotICAgICAgICBydyA9IGlvLkJ1ZmZlcmVkUmFuZG9tKHJhdywgOCwgMTIpCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FuZF93cml0ZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKGIiYXNkZiIsIGIiZ2hqayIpKQorICAgICAgICBydyA9IHNlbGYudHAocmF3LCA4KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhcyIsIHJ3LnJlYWQoMikpCiAgICAgICAgIHJ3LndyaXRlKGIiZGRkIikKICAgICAgICAgcncud3JpdGUoYiJlZWUiKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJhdy5fd3JpdGVfc3RhY2spICMgQnVmZmVyIHdyaXRlcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZ2hqayIsIHJ3LnJlYWQoKSkgIyBUaGlzIHJlYWQgZm9yY2VzIHdyaXRlIGZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIiZGRkZWVlIiwgcmF3Ll93cml0ZV9zdGFja1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImdoamsiLCBydy5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJkZGRlZWUiLCByYXcuX3dyaXRlX3N0YWNrWzBdKQogCi0gICAgZGVmIHRlc3RTZWVrQW5kVGVsbChzZWxmKToKLSAgICAgICAgcmF3ID0gaW8uQnl0ZXNJTyhiImFzZGZnaGprbCIpCi0gICAgICAgIHJ3ID0gaW8uQnVmZmVyZWRSYW5kb20ocmF3KQorICAgIGRlZiB0ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiImFzZGZnaGprbCIpCisgICAgICAgIHJ3ID0gc2VsZi50cChyYXcpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhcyIsIHJ3LnJlYWQoMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIHJ3LnRlbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzIiwgcncucmVhZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydy50ZWxsKCkpCiAgICAgICAgIHJ3LnNlZWsoMCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhc2RmIiwgcncucmVhZCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzZGYiLCBydy5yZWFkKDQpKQogCiAgICAgICAgIHJ3LndyaXRlKGIiYXNkZiIpCiAgICAgICAgIHJ3LnNlZWsoMCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYiJhc2RmYXNkZmwiLCBydy5yZWFkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDksIHJ3LnRlbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzZGZhc2RmbCIsIHJ3LnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCBydy50ZWxsKCkpCiAgICAgICAgIHJ3LnNlZWsoLTQsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDUsIHJ3LnRlbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBydy50ZWxsKCkpCiAgICAgICAgIHJ3LnNlZWsoMiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNywgcncudGVsbCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiImZsIiwgcncucmVhZCgxMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcncudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZmwiLCBydy5yZWFkKDExKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBydy5zZWVrLCAwLjApCiAKKyAgICBkZWYgY2hlY2tfZmx1c2hfYW5kX3JlYWQoc2VsZiwgcmVhZF9mdW5jKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYWJjZGVmZ2hpIikKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWIiLCByZWFkX2Z1bmMoYnVmaW8sIDIpKQorICAgICAgICBidWZpby53cml0ZShiIjEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImVmIiwgcmVhZF9mdW5jKGJ1ZmlvLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBidWZpby50ZWxsKCkpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBidWZpby50ZWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJnaGkiLCByZWFkX2Z1bmMoYnVmaW8pKQorICAgICAgICByYXcuc2VlaygwLCAwKQorICAgICAgICByYXcud3JpdGUoYiJYWVoiKQorICAgICAgICAjIGZsdXNoKCkgcmVzZXRzIHRoZSByZWFkIGJ1ZmZlcgorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIlhZWiIsIHJlYWRfZnVuYyhidWZpbywgMykpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9hbmRfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9hbmRfcmVhZChsYW1iZGEgYnVmaW8sICphcmdzOiBidWZpby5yZWFkKCphcmdzKSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkaW50byhidWZpbywgbj0tMSk6CisgICAgICAgICAgICBiID0gYnl0ZWFycmF5KG4gaWYgbiA+PSAwIGVsc2UgOTk5OSkKKyAgICAgICAgICAgIG4gPSBidWZpby5yZWFkaW50byhiKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzKGJbOm5dKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2FuZF9yZWFkKF9yZWFkaW50bykKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9wZWVrKHNlbGYpOgorICAgICAgICBkZWYgX3BlZWsoYnVmaW8sIG49LTEpOgorICAgICAgICAgICAgIyBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBidWZmZXIgY2FuIGNvbnRhaW4gdGhlIHdob2xlCisgICAgICAgICAgICAjIHJhdyBzdHJlYW0sIG90aGVyd2lzZSBwZWVrKCkgY2FuIHJldHVybiBsZXNzLgorICAgICAgICAgICAgYiA9IGJ1ZmlvLnBlZWsobikKKyAgICAgICAgICAgIGlmIG4gIT0gLTE6CisgICAgICAgICAgICAgICAgYiA9IGJbOm5dCisgICAgICAgICAgICBidWZpby5zZWVrKGxlbihiKSwgMSkKKyAgICAgICAgICAgIHJldHVybiBiCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfYW5kX3JlYWQoX3BlZWspCisKKyAgICBkZWYgdGVzdF9mbHVzaF9hbmRfd3JpdGUoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiImFiY2RlZmdoaSIpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcpCisKKyAgICAgICAgYnVmaW8ud3JpdGUoYiIxMjMiKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiNDUiKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMzQ1ZmdoaSIsIHJhdy5nZXR2YWx1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDVmZ2hpIiwgYnVmaW8ucmVhZCgpKQorCisgICAgZGVmIHRlc3RfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfdGhyZWFkcyhzZWxmKQorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF90aHJlYWRzKHNlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3BlZWsoc2VsZik6CisgICAgICAgIGRlZiBfcGVlayhidWZpbyk6CisgICAgICAgICAgICBidWZpby5wZWVrKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9wZWVrKQorICAgICAgICBkZWYgX3BlZWsoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8udGVsbCgpCisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucGVlaygxKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MsIDApCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9wZWVrKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkcyhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkKGJ1ZmlvKToKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5yZWFkKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9yZWFkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkMXMoc2VsZik6CisgICAgICAgIGRlZiBfcmVhZDEoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWQxKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9yZWFkMSkKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfcmVhZGludG9zKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWQoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWRpbnRvKGJ5dGVhcnJheSgxKSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9hZnRlcl9yZWFkYWhlYWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzY2Mjk6IHdyaXRpbmcgYWZ0ZXIgdGhlIGJ1ZmZlciB3YXMgZmlsbGVkIGJ5IHJlYWRhaGVhZCBzaG91bGQKKyAgICAgICAgIyBmaXJzdCByZXdpbmQgdGhlIHJhdyBzdHJlYW0uCisgICAgICAgIGZvciBvdmVyd3JpdGVfc2l6ZSBpbiBbMSwgNV06CisgICAgICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJBIiAqIDEwKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgNCkKKyAgICAgICAgICAgICMgVHJpZ2dlciByZWFkYWhlYWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZCgxKSwgYiJBIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCAxKQorICAgICAgICAgICAgIyBPdmVyd3JpdGluZyBzaG91bGQgcmV3aW5kIHRoZSByYXcgc3RyZWFtIGlmIGl0IG5lZWRzIHNvCisgICAgICAgICAgICBidWZpby53cml0ZShiIkIiICogb3ZlcndyaXRlX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRlbGwoKSwgb3ZlcndyaXRlX3NpemUgKyAxKQorICAgICAgICAgICAgIyBJZiB0aGUgd3JpdGUgc2l6ZSB3YXMgc21hbGxlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSwgZmx1c2goKSBhbmQKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCByZXdpbmQgaGFwcGVucy4KKyAgICAgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCBvdmVyd3JpdGVfc2l6ZSArIDEpCisgICAgICAgICAgICBzID0gcmF3LmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICAgICBiIkEiICsgYiJCIiAqIG92ZXJ3cml0ZV9zaXplICsgYiJBIiAqICg5IC0gb3ZlcndyaXRlX3NpemUpKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGVfYWZ0ZXJfcmVhZF9vcl93cml0ZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiQSIgKiAxMCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQoMiksIGIiQUEiKSAjIHRoZSByZWFkIGJ1ZmZlciBnZXRzIGZpbGxlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRydW5jYXRlKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJCQiIpLCAyKSAjIHRoZSB3cml0ZSBidWZmZXIgaW5jcmVhc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udHJ1bmNhdGUoKSwgNCkKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZikKKyAgICAgICAgQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKQorCitjbGFzcyBDQnVmZmVyZWRSYW5kb21UZXN0KENCdWZmZXJlZFJlYWRlclRlc3QsIENCdWZmZXJlZFdyaXRlclRlc3QsIEJ1ZmZlcmVkUmFuZG9tVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFJhbmRvbQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmFuZG9tVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgICMgVGhlIGFsbG9jYXRpb24gY2FuIHN1Y2NlZWQgb24gMzItYml0IGJ1aWxkcywgZS5nLiB3aXRoIG1vcmUKKyAgICAgICAgIyB0aGFuIDJHQiBSQU0gYW5kIGEgNjQtYml0IGtlcm5lbC4KKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgc3lzLm1heHNpemUpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgIENCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZikKKyAgICAgICAgQ0J1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKQorCitjbGFzcyBQeUJ1ZmZlcmVkUmFuZG9tVGVzdChCdWZmZXJlZFJhbmRvbVRlc3QpOgorICAgIHRwID0gcHlpby5CdWZmZXJlZFJhbmRvbQorCisKICMgVG8gZnVsbHkgZXhlcmNpc2Ugc2Vlay90ZWxsLCB0aGUgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIgaGFzIHRoZXNlCiAjIHByb3BlcnRpZXM6CiAjICAgLSBBIHNpbmdsZSBvdXRwdXQgY2hhcmFjdGVyIGNhbiBjb3JyZXNwb25kIHRvIG1hbnkgYnl0ZXMgb2YgaW5wdXQuCkBAIC03ODgsMTQ1ICsxNjI4LDEzMSBAQAogICAgICAgICAgJ20tLS0tLS0tLS0tLS0tLS4nKQogICAgIF0KIAotICAgIGRlZiB0ZXN0RGVjb2RlcihzZWxmKToKKyAgICBkZWYgdGVzdF9kZWNvZGVyKHNlbGYpOgogICAgICAgICAjIFRyeSBhIGZldyBvbmUtc2hvdCB0ZXN0IGNhc2VzLgogICAgICAgICBmb3IgaW5wdXQsIGVvZiwgb3V0cHV0IGluIHNlbGYudGVzdF9jYXNlczoKICAgICAgICAgICAgIGQgPSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlcigpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkLmRlY29kZShpbnB1dCwgZW9mKSwgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRlY29kZShpbnB1dCwgZW9mKSwgb3V0cHV0KQogCiAgICAgICAgICMgQWxzbyB0ZXN0IGFuIHVuZmluaXNoZWQgZGVjb2RlLCBmb2xsb3dlZCBieSBmb3JjaW5nIEVPRi4KICAgICAgICAgZCA9IFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZC5kZWNvZGUoYidvaWFiY2QnKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGQuZGVjb2RlKGInJywgMSksICdhYmNkLicpCi0KLSAgICBkZWYgdGVzdF9hcHBlbmRfYm9tKHNlbGYpOgotICAgICAgICAjIFRoZSBCT00gaXMgbm90IHdyaXR0ZW4gYWdhaW4gd2hlbiBhcHBlbmRpbmcgdG8gYSBub24tZW1wdHkgZmlsZQotICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KLSAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAndycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnYWFhJykKLSAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCAnYWFhJy5lbmNvZGUoY2hhcnNldCkpCi0KLSAgICAgICAgICAgIHdpdGggaW8ub3BlbihmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJ3h4eCcpCi0gICAgICAgICAgICB3aXRoIGlvLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksICdhYWF4eHgnLmVuY29kZShjaGFyc2V0KSkKLQotICAgIGRlZiB0ZXN0X3NlZWtfYm9tKHNlbGYpOgotICAgICAgICAjIFNhbWUgdGVzdCwgYnV0IHdoZW4gc2Vla2luZyBtYW51YWxseQotICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KLSAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAndycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgnYWFhJykKLSAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAncisnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgotICAgICAgICAgICAgICAgIGYuc2Vlayhwb3MpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgnenp6JykKLSAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBmLndyaXRlKCdiYmInKQotICAgICAgICAgICAgd2l0aCBpby5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCAnYmJienp6Jy5lbmNvZGUoY2hhcnNldCkpCi0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRlY29kZShiJ29pYWJjZCcpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRlY29kZShiJycsIDEpLCAnYWJjZC4nKQogCiBjbGFzcyBUZXh0SU9XcmFwcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdGRhdGEgPSBiIkFBQVxyXG5CQkJcckNDQ1xyXG5ERERcbkVFRVxyXG4iCiAgICAgICAgIHNlbGYubm9ybWFsaXplZCA9IGIiQUFBXG5CQkJcbkNDQ1xuREREXG5FRUVcbiIuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCi0gICAgZGVmIHRlc3RMaW5lQnVmZmVyaW5nKHNlbGYpOgotICAgICAgICByID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIGIgPSBpby5CdWZmZXJlZFdyaXRlcihyLCAxMDAwKQotICAgICAgICB0ID0gaW8uVGV4dElPV3JhcHBlcihiLCBuZXdsaW5lPSJcbiIsIGxpbmVfYnVmZmVyaW5nPVRydWUpCi0gICAgICAgIHQud3JpdGUodSJYIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoci5nZXR2YWx1ZSgpLCBiIiIpICAjIE5vIGZsdXNoIGhhcHBlbmVkCi0gICAgICAgIHQud3JpdGUodSJZXG5aIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoci5nZXR2YWx1ZSgpLCBiIlhZXG5aIikgICMgQWxsIGdvdCBmbHVzaGVkCi0gICAgICAgIHQud3JpdGUodSJBXHJCIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoci5nZXR2YWx1ZSgpLCBiIlhZXG5aQVxyQiIpCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyLCAxMDAwKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHQuX19pbml0X18oYiwgZW5jb2Rpbmc9ImxhdGluMSIsIG5ld2xpbmU9IlxyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJsYXRpbjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubGluZV9idWZmZXJpbmcsIEZhbHNlKQorICAgICAgICB0Ll9faW5pdF9fKGIsIGVuY29kaW5nPSJ1dGY4IiwgbGluZV9idWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmVuY29kaW5nLCAidXRmOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5saW5lX2J1ZmZlcmluZywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhlOVxuIiwgdC5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKIAotICAgIGRlZiB0ZXN0RW5jb2RpbmdFcnJvcnNSZWFkaW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0LmRldGFjaCgpLCBiKQorCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdC53cml0ZSgiaG93ZHkiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIuZ2V0dmFsdWUoKSkKKyAgICAgICAgdC5kZXRhY2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiJob3dkeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuZGV0YWNoKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKCJoZWxsbyIuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyYXcpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgbW9kbmFtZSA9IHNlbGYuVGV4dElPV3JhcHBlci5fX21vZHVsZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKKyAgICAgICAgcmF3Lm5hbWUgPSAiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT11J2R1bW15JyBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQorICAgICAgICByYXcubmFtZSA9IGIiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT0nZHVtbXknIGVuY29kaW5nPSd1dGYtOCc+IiAlIG1vZG5hbWUpCisKKyAgICBkZWYgdGVzdF9saW5lX2J1ZmZlcmluZyhzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgbmV3bGluZT0iXG4iLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgICAgICB0LndyaXRlKCJYIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHZhbHVlKCksIGIiIikgICMgTm8gZmx1c2ggaGFwcGVuZWQKKyAgICAgICAgdC53cml0ZSgiWVxuWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiIlhZXG5aIikgICMgQWxsIGdvdCBmbHVzaGVkCisgICAgICAgIHQud3JpdGUoIkFcckIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiJYWVxuWkFcckIiKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhlIGVuY29kaW5nIGF0dHJpYnV0ZSBpcyBhbHdheXMgc2V0LCBhbmQgdmFsaWQKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9InV0ZjgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJ1dGY4IikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5lbmNvZGluZyBpcyBub3QgTm9uZSkKKyAgICAgICAgY29kZWNzLmxvb2t1cCh0LmVuY29kaW5nKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfZXJyb3JzX3JlYWRpbmcoc2VsZik6CiAgICAgICAgICMgKDEpIGRlZmF1bHQKLSAgICAgICAgYiA9IGlvLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LnJlYWQpCiAgICAgICAgICMgKDIpIGV4cGxpY2l0IHN0cmljdAotICAgICAgICBiID0gaW8uQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LnJlYWQpCiAgICAgICAgICMgKDMpIGlnbm9yZQotICAgICAgICBiID0gaW8uQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKLSAgICAgICAgdCA9IGlvLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0LnJlYWQoKSwgImFiY1xuXG4iKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWQoKSwgImFiY1xuXG4iKQogICAgICAgICAjICg0KSByZXBsYWNlCi0gICAgICAgIGIgPSBpby5CeXRlc0lPKGIiYWJjXG5ceGZmXG4iKQotICAgICAgICB0ID0gaW8uVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InJlcGxhY2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0LnJlYWQoKSwgdSJhYmNcblx1ZmZmZFxuIikKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZCgpLCAiYWJjXG5cdWZmZmRcbiIpCiAKLSAgICBkZWYgdGVzdEVuY29kaW5nRXJyb3JzV3JpdGluZyhzZWxmKToKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcnNfd3JpdGluZyhzZWxmKToKICAgICAgICAgIyAoMSkgZGVmYXVsdAotICAgICAgICBiID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdC53cml0ZSwgdSJceGZmIikKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LndyaXRlLCAiXHhmZiIpCiAgICAgICAgICMgKDIpIGV4cGxpY2l0IHN0cmljdAotICAgICAgICBiID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LndyaXRlLCB1Ilx4ZmYiKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdC53cml0ZSwgIlx4ZmYiKQogICAgICAgICAjICgzKSBpZ25vcmUKLSAgICAgICAgYiA9IGlvLkJ5dGVzSU8oKQotICAgICAgICB0ID0gaW8uVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIsCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT0iXG4iKQotICAgICAgICB0LndyaXRlKHUiYWJjXHhmZmRlZlxuIikKKyAgICAgICAgdC53cml0ZSgiYWJjXHhmZmRlZlxuIikKICAgICAgICAgdC5mbHVzaCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGIuZ2V0dmFsdWUoKSwgYiJhYmNkZWZcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5nZXR2YWx1ZSgpLCBiImFiY2RlZlxuIikKICAgICAgICAgIyAoNCkgcmVwbGFjZQotICAgICAgICBiID0gaW8uQnl0ZXNJTygpCi0gICAgICAgIHQgPSBpby5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIsCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0icmVwbGFjZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9IlxuIikKLSAgICAgICAgdC53cml0ZSh1ImFiY1x4ZmZkZWZcbiIpCisgICAgICAgIHQud3JpdGUoImFiY1x4ZmZkZWZcbiIpCiAgICAgICAgIHQuZmx1c2goKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhiLmdldHZhbHVlKCksIGIiYWJjP2RlZlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdldHZhbHVlKCksIGIiYWJjP2RlZlxuIikKIAotICAgIGRlZiB0ZXN0TmV3bGluZXNJbnB1dChzZWxmKToKLSAgICAgICAgdGVzdGRhdGEgPSBiIkFBQVxuQkJCXG5DQ0NcckRERFxyRUVFXHJcbkZGRlxyXG5HR0ciCi0gICAgICAgIG5vcm1hbGl6ZWQgPSB0ZXN0ZGF0YS5yZXBsYWNlKGIiXHJcbiIsIGIiXG4iKS5yZXBsYWNlKGIiXHIiLCBiIlxuIikKLSAgICAgICAgZm9yIG5ld2xpbmUsIGV4cGVjdGVkIGluIFsKLSAgICAgICAgICAgIChOb25lLCBub3JtYWxpemVkLmRlY29kZSgiYXNjaWkiKS5zcGxpdGxpbmVzKFRydWUpKSwKLSAgICAgICAgICAgICgiIiwgdGVzdGRhdGEuZGVjb2RlKCJhc2NpaSIpLnNwbGl0bGluZXMoVHJ1ZSkpLAotICAgICAgICAgICAgKCJcbiIsIFsiQUFBXG4iLCAiQkJCXG4iLCAiQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCi0gICAgICAgICAgICAoIlxyXG4iLCBbIkFBQVxuQkJCXG5DQ0NcckRERFxyRUVFXHJcbiIsICJGRkZcclxuIiwgIkdHRyJdKSwKLSAgICAgICAgICAgICgiXHIiLCAgWyJBQUFcbkJCQlxuQ0NDXHIiLCAiREREXHIiLCAiRUVFXHIiLCAiXG5GRkZcciIsICJcbkdHRyJdKSwKLSAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBidWYgPSBpby5CeXRlc0lPKHRlc3RkYXRhKQotICAgICAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR4dC5yZWFkbGluZXMoKSwgZXhwZWN0ZWQpCi0gICAgICAgICAgICB0eHQuc2VlaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHh0LnJlYWQoKSwgIiIuam9pbihleHBlY3RlZCkpCi0KLSAgICBkZWYgdGVzdE5ld2xpbmVzT3V0cHV0KHNlbGYpOgotICAgICAgICB0ZXN0ZGljdCA9IHsKLSAgICAgICAgICAgICIiOiBiIkFBQVxuQkJCXG5DQ0NcblhccllcclxuWiIsCi0gICAgICAgICAgICAiXG4iOiBiIkFBQVxuQkJCXG5DQ0NcblhccllcclxuWiIsCi0gICAgICAgICAgICAiXHIiOiBiIkFBQVxyQkJCXHJDQ0NcclhccllcclxyWiIsCi0gICAgICAgICAgICAiXHJcbiI6IGIiQUFBXHJcbkJCQlxyXG5DQ0NcclxuWFxyWVxyXHJcbloiLAotICAgICAgICAgICAgfQotICAgICAgICB0ZXN0cyA9IFsoTm9uZSwgdGVzdGRpY3Rbb3MubGluZXNlcF0pXSArIHNvcnRlZCh0ZXN0ZGljdC5pdGVtcygpKQotICAgICAgICBmb3IgbmV3bGluZSwgZXhwZWN0ZWQgaW4gdGVzdHM6Ci0gICAgICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz0iYXNjaWkiLCBuZXdsaW5lPW5ld2xpbmUpCi0gICAgICAgICAgICB0eHQud3JpdGUoIkFBQVxuQiIpCi0gICAgICAgICAgICB0eHQud3JpdGUoIkJCXG5DQ0NcbiIpCi0gICAgICAgICAgICB0eHQud3JpdGUoIlhccllcclxuWiIpCi0gICAgICAgICAgICB0eHQuZmx1c2goKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLmNsb3NlZCwgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdE5ld2xpbmVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X25ld2xpbmVzKHNlbGYpOgogICAgICAgICBpbnB1dF9saW5lcyA9IFsgInVuaXhcbiIsICJ3aW5kb3dzXHJcbiIsICJvczlcciIsICJsYXN0XG4iLCAibm9ubCIgXQogCiAgICAgICAgIHRlc3RzID0gWwpAQCAtOTUwLDggKzE3NzYsOCBAQAogICAgICAgICAgICAgZm9yIGRvX3JlYWRzIGluIChGYWxzZSwgVHJ1ZSk6CiAgICAgICAgICAgICAgICAgZm9yIGJ1ZnNpemUgaW4gcmFuZ2UoMSwgMTApOgogICAgICAgICAgICAgICAgICAgICBmb3IgbmV3bGluZSwgZXhwX2xpbmVzIGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW8gPSBpby5CdWZmZXJlZFJlYWRlcihpby5CeXRlc0lPKGRhdGEpLCBidWZzaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGlvID0gaW8uVGV4dElPV3JhcHBlcihidWZpbywgbmV3bGluZT1uZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmaW8gPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHNlbGYuQnl0ZXNJTyhkYXRhKSwgYnVmc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRpbyA9IHNlbGYuVGV4dElPV3JhcHBlcihidWZpbywgbmV3bGluZT1uZXdsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvX3JlYWRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9saW5lcyA9IFtdCkBAIC05NTksODQgKzE3ODUsMTI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gdGV4dGlvLnJlYWQoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYzIgPT0gJyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYzIpLCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjMiksIDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9saW5lcy5hcHBlbmQoYzIgKyB0ZXh0aW8ucmVhZGxpbmUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X2xpbmVzID0gbGlzdCh0ZXh0aW8pCiAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnb3RfbGluZSwgZXhwX2xpbmUgaW4gemlwKGdvdF9saW5lcywgZXhwX2xpbmVzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnb3RfbGluZSwgZXhwX2xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oZ290X2xpbmVzKSwgbGVuKGV4cF9saW5lcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3RfbGluZSwgZXhwX2xpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnb3RfbGluZXMpLCBsZW4oZXhwX2xpbmVzKSkKIAotICAgIGRlZiB0ZXN0TmV3bGluZXNJbnB1dChzZWxmKToKLSAgICAgICAgdGVzdGRhdGEgPSBiIkFBQVxuQkJCXG5DQ0NcckRERFxyRUVFXHJcbkZGRlxyXG5HR0ciCisgICAgZGVmIHRlc3RfbmV3bGluZXNfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RkYXRhID0gYiJBQUFcbkJCXHgwMEJcbkNDQ1xyREREXHJFRUVcclxuRkZGXHJcbkdHRyIKICAgICAgICAgbm9ybWFsaXplZCA9IHRlc3RkYXRhLnJlcGxhY2UoYiJcclxuIiwgYiJcbiIpLnJlcGxhY2UoYiJcciIsIGIiXG4iKQogICAgICAgICBmb3IgbmV3bGluZSwgZXhwZWN0ZWQgaW4gWwogICAgICAgICAgICAgKE5vbmUsIG5vcm1hbGl6ZWQuZGVjb2RlKCJhc2NpaSIpLnNwbGl0bGluZXMoVHJ1ZSkpLAogICAgICAgICAgICAgKCIiLCB0ZXN0ZGF0YS5kZWNvZGUoImFzY2lpIikuc3BsaXRsaW5lcyhUcnVlKSksCi0gICAgICAgICAgICAoIlxuIiwgWyJBQUFcbiIsICJCQkJcbiIsICJDQ0NcckRERFxyRUVFXHJcbiIsICJGRkZcclxuIiwgIkdHRyJdKSwKLSAgICAgICAgICAgICgiXHJcbiIsIFsiQUFBXG5CQkJcbkNDQ1xyREREXHJFRUVcclxuIiwgIkZGRlxyXG4iLCAiR0dHIl0pLAotICAgICAgICAgICAgKCJcciIsICBbIkFBQVxuQkJCXG5DQ0NcciIsICJERERcciIsICJFRUVcciIsICJcbkZGRlxyIiwgIlxuR0dHIl0pLAorICAgICAgICAgICAgKCJcbiIsIFsiQUFBXG4iLCAiQkJceDAwQlxuIiwgIkNDQ1xyREREXHJFRUVcclxuIiwgIkZGRlxyXG4iLCAiR0dHIl0pLAorICAgICAgICAgICAgKCJcclxuIiwgWyJBQUFcbkJCXHgwMEJcbkNDQ1xyREREXHJFRUVcclxuIiwgIkZGRlxyXG4iLCAiR0dHIl0pLAorICAgICAgICAgICAgKCJcciIsICBbIkFBQVxuQkJceDAwQlxuQ0NDXHIiLCAiREREXHIiLCAiRUVFXHIiLCAiXG5GRkZcciIsICJcbkdHRyJdKSwKICAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBidWYgPSBpby5CeXRlc0lPKHRlc3RkYXRhKQotICAgICAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR4dC5yZWFkbGluZXMoKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8odGVzdGRhdGEpCisgICAgICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz0iYXNjaWkiLCBuZXdsaW5lPW5ld2xpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkbGluZXMoKSwgZXhwZWN0ZWQpCiAgICAgICAgICAgICB0eHQuc2VlaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHh0LnJlYWQoKSwgIiIuam9pbihleHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkKCksICIiLmpvaW4oZXhwZWN0ZWQpKQogCi0gICAgZGVmIHRlc3ROZXdsaW5lc091dHB1dChzZWxmKToKLSAgICAgICAgZGF0YSA9IHUiQUFBXG5CQkJcckNDQ1xuIgotICAgICAgICBkYXRhX2xmID0gYiJBQUFcbkJCQlxyQ0NDXG4iCi0gICAgICAgIGRhdGFfY3IgPSBiIkFBQVxyQkJCXHJDQ0NcciIKLSAgICAgICAgZGF0YV9jcmxmID0gYiJBQUFcclxuQkJCXHJDQ0NcclxuIgotICAgICAgICBzYXZlX2xpbmVzZXAgPSBvcy5saW5lc2VwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBvcy5saW5lc2VwLCBuZXdsaW5lLCBleHBlY3RlZCBpbiBbCi0gICAgICAgICAgICAgICAgKCJcbiIsIE5vbmUsIGRhdGFfbGYpLAotICAgICAgICAgICAgICAgICgiXHJcbiIsIE5vbmUsIGRhdGFfY3JsZiksCi0gICAgICAgICAgICAgICAgKCJcbiIsICIiLCBkYXRhX2xmKSwKLSAgICAgICAgICAgICAgICAoIlxyXG4iLCAiIiwgZGF0YV9sZiksCi0gICAgICAgICAgICAgICAgKCJcbiIsICJcbiIsIGRhdGFfbGYpLAotICAgICAgICAgICAgICAgICgiXHJcbiIsICJcbiIsIGRhdGFfbGYpLAotICAgICAgICAgICAgICAgICgiXG4iLCAiXHIiLCBkYXRhX2NyKSwKLSAgICAgICAgICAgICAgICAoIlxyXG4iLCAiXHIiLCBkYXRhX2NyKSwKLSAgICAgICAgICAgICAgICAoIlxuIiwgIlxyXG4iLCBkYXRhX2NybGYpLAotICAgICAgICAgICAgICAgICgiXHJcbiIsICJcclxuIiwgZGF0YV9jcmxmKSwKLSAgICAgICAgICAgICAgICBdOgotICAgICAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz0iYXNjaWkiLCBuZXdsaW5lPW5ld2xpbmUpCi0gICAgICAgICAgICAgICAgdHh0LndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgdHh0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhidWYuY2xvc2VkLCBUcnVlKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1Zi5nZXR2YWx1ZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmxpbmVzZXAgPSBzYXZlX2xpbmVzZXAKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19vdXRwdXQoc2VsZik6CisgICAgICAgIHRlc3RkaWN0ID0geworICAgICAgICAgICAgIiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKKyAgICAgICAgICAgICJcbiI6IGIiQUFBXG5CQkJcbkNDQ1xuWFxyWVxyXG5aIiwKKyAgICAgICAgICAgICJcciI6IGIiQUFBXHJCQkJcckNDQ1xyWFxyWVxyXHJaIiwKKyAgICAgICAgICAgICJcclxuIjogYiJBQUFcclxuQkJCXHJcbkNDQ1xyXG5YXHJZXHJcclxuWiIsCisgICAgICAgICAgICB9CisgICAgICAgIHRlc3RzID0gWyhOb25lLCB0ZXN0ZGljdFtvcy5saW5lc2VwXSldICsgc29ydGVkKHRlc3RkaWN0Lml0ZW1zKCkpCisgICAgICAgIGZvciBuZXdsaW5lLCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz0iYXNjaWkiLCBuZXdsaW5lPW5ld2xpbmUpCisgICAgICAgICAgICB0eHQud3JpdGUoIkFBQVxuQiIpCisgICAgICAgICAgICB0eHQud3JpdGUoIkJCXG5DQ0NcbiIpCisgICAgICAgICAgICB0eHQud3JpdGUoIlhccllcclxuWiIpCisgICAgICAgICAgICB0eHQuZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGJhc2UgPSBzZWxmLkJ5dGVzSU8KKyAgICAgICAgY2xhc3MgTXlCeXRlc0lPKGJhc2UpOgorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIGwuYXBwZW5kKHNlbGYuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBiYXNlLmNsb3NlKHNlbGYpCisgICAgICAgIGIgPSBNeUJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHQud3JpdGUoImFiYyIpCisgICAgICAgIGRlbCB0CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IiYWJjIl0sIGwpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICBjbGFzcyBNeVRleHRJTyhzZWxmLlRleHRJT1dyYXBwZXIpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHN1cGVyKE15VGV4dElPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIHN1cGVyKE15VGV4dElPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIHN1cGVyKE15VGV4dElPLCBzZWxmKS5mbHVzaCgpCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gTXlUZXh0SU8oYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgZGVsIHQKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX3Rocm91Z2hfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4Y2VwdGlvbiBzdGF0ZSBpcyBub3QgbW9kaWZpZWQgYnkgYSBkZXN0cnVjdG9yLAorICAgICAgICAjIGV2ZW4gaWYgY2xvc2UoKSBmYWlscy4KKyAgICAgICAgcmF3aW8gPSBzZWxmLkNsb3NlRmFpbHVyZUlPKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihyYXdpbykueHl6enkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmKQorICAgICAgICBzID0gcy5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgICMgU3lzdGVtYXRpYyB0ZXN0cyBvZiB0aGUgdGV4dCBJL08gQVBJCiAKLSAgICBkZWYgdGVzdEJhc2ljSU8oc2VsZik6CisgICAgZGVmIHRlc3RfYmFzaWNfaW8oc2VsZik6CiAgICAgICAgIGZvciBjaHVua3NpemUgaW4gKDEsIDIsIDMsIDQsIDUsIDE1LCAxNiwgMTcsIDMxLCAzMiwgMzMsIDYzLCA2NCwgNjUpOgogICAgICAgICAgICAgZm9yIGVuYyBpbiAiYXNjaWkiLCAibGF0aW4xIiwgInV0ZjgiIDojICwgInV0Zi0xNi1iZSIsICJ1dGYtMTYtbGUiOgotICAgICAgICAgICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3KyIsIGVuY29kaW5nPWVuYykKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidysiLCBlbmNvZGluZz1lbmMpCiAgICAgICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IGNodW5rc2l6ZQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYud3JpdGUodSJhYmMiKSwgMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoImFiYyIpLCAzKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyKyIsIGVuY29kaW5nPWVuYykKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicisiLCBlbmNvZGluZz1lbmMpCiAgICAgICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IGNodW5rc2l6ZQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCB1ImFiYyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiYWJjIikKICAgICAgICAgICAgICAgICBjb29raWUgPSBmLnRlbGwoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2VlaygwKSwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoMiksIHUiYWIiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgxKSwgdSJjIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoMSksIHUiIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnJlYWQoKSwgdSIiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBjb29raWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5zZWVrKDApLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuc2VlaygwLCAyKSwgY29va2llKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYud3JpdGUodSJkZWYiKSwgMykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnNlZWsoY29va2llKSwgY29va2llKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZCgpLCB1ImRlZiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoTm9uZSksICJhYmMiKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCAiYWIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCAiYyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIGNvb2tpZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwLCAyKSwgY29va2llKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZSgiZGVmIiksIDMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoY29va2llKSwgY29va2llKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJkZWYiKQogICAgICAgICAgICAgICAgIGlmIGVuYy5zdGFydHN3aXRoKCJ1dGYiKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5tdWx0aV9saW5lX3Rlc3QoZiwgZW5jKQogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQpAQCAtMTA0NCwxMyArMTkxNCwxMyBAQAogICAgIGRlZiBtdWx0aV9saW5lX3Rlc3Qoc2VsZiwgZiwgZW5jKToKICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgIGYudHJ1bmNhdGUoKQotICAgICAgICBzYW1wbGUgPSB1InNceGZmXHUwZmZmXHVmZmZmIgorICAgICAgICBzYW1wbGUgPSAic1x4ZmZcdTBmZmZcdWZmZmYiCiAgICAgICAgIHdsaW5lcyA9IFtdCiAgICAgICAgIGZvciBzaXplIGluICgwLCAxLCAyLCAzLCA0LCA1LCAzMCwgMzEsIDMyLCAzMywgNjIsIDYzLCA2NCwgNjUsIDEwMDApOgogICAgICAgICAgICAgY2hhcnMgPSBbXQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSk6CiAgICAgICAgICAgICAgICAgY2hhcnMuYXBwZW5kKHNhbXBsZVtpICUgbGVuKHNhbXBsZSldKQotICAgICAgICAgICAgbGluZSA9IHUiIi5qb2luKGNoYXJzKSArIHUiXG4iCisgICAgICAgICAgICBsaW5lID0gIiIuam9pbihjaGFycykgKyAiXG4iCiAgICAgICAgICAgICB3bGluZXMuYXBwZW5kKChmLnRlbGwoKSwgbGluZSkpCiAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCiAgICAgICAgIGYuc2VlaygwKQpAQCAtMTA2MSw3OSArMTkzMSw4MiBAQAogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHJsaW5lcy5hcHBlbmQoKHBvcywgbGluZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJsaW5lcywgd2xpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJsaW5lcywgd2xpbmVzKQogCi0gICAgZGVmIHRlc3RUZWxsaW5nKHNlbGYpOgotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidysiLCBlbmNvZGluZz0idXRmOCIpCisgICAgZGVmIHRlc3RfdGVsbGluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIncrIiwgZW5jb2Rpbmc9InV0ZjgiKQogICAgICAgICBwMCA9IGYudGVsbCgpCi0gICAgICAgIGYud3JpdGUodSJceGZmXG4iKQorICAgICAgICBmLndyaXRlKCJceGZmXG4iKQogICAgICAgICBwMSA9IGYudGVsbCgpCi0gICAgICAgIGYud3JpdGUodSJceGZmXG4iKQorICAgICAgICBmLndyaXRlKCJceGZmXG4iKQogICAgICAgICBwMiA9IGYudGVsbCgpCiAgICAgICAgIGYuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnRlbGwoKSwgcDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGxpbmUoKSwgdSJceGZmXG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnRlbGwoKSwgcDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGxpbmUoKSwgdSJceGZmXG4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnRlbGwoKSwgcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgIlx4ZmZcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgIlx4ZmZcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxpbmUsIHUiXHhmZlxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIlx4ZmZcbiIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRlbGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYudGVsbCgpLCBwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDIpCiAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgZGVmIHRlc3RTZWVraW5nKHNlbGYpOgotICAgICAgICBjaHVua19zaXplID0gaW8uVGV4dElPV3JhcHBlci5fQ0hVTktfU0laRQorICAgIGRlZiB0ZXN0X3NlZWtpbmcoc2VsZik6CisgICAgICAgIGNodW5rX3NpemUgPSBfZGVmYXVsdF9jaHVua19zaXplKCkKICAgICAgICAgcHJlZml4X3NpemUgPSBjaHVua19zaXplIC0gMgogICAgICAgICB1X3ByZWZpeCA9ICJhIiAqIHByZWZpeF9zaXplCiAgICAgICAgIHByZWZpeCA9IGJ5dGVzKHVfcHJlZml4LmVuY29kZSgidXRmLTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHVfcHJlZml4KSwgbGVuKHByZWZpeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHVfcHJlZml4KSwgbGVuKHByZWZpeCkpCiAgICAgICAgIHVfc3VmZml4ID0gIlx1ODg4OFxuIgogICAgICAgICBzdWZmaXggPSBieXRlcyh1X3N1ZmZpeC5lbmNvZGUoInV0Zi04IikpCiAgICAgICAgIGxpbmUgPSBwcmVmaXggKyBzdWZmaXgKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKICAgICAgICAgZi53cml0ZShsaW5lKjIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgcyA9IGYucmVhZChwcmVmaXhfc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocywgdW5pY29kZShwcmVmaXgsICJhc2NpaSIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLnRlbGwoKSwgcHJlZml4X3NpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYucmVhZGxpbmUoKSwgdV9zdWZmaXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcHJlZml4LmRlY29kZSgiYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcHJlZml4X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCB1X3N1ZmZpeCkKIAotICAgIGRlZiB0ZXN0U2Vla2luZ1RvbyhzZWxmKToKKyAgICBkZWYgdGVzdF9zZWVraW5nX3RvbyhzZWxmKToKICAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGEgc3BlY2lmaWMgYnVnCiAgICAgICAgIGRhdGEgPSBiJ1x4ZTBceGJmXHhiZlxuJwotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQogICAgICAgICBmLndyaXRlKGRhdGEpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgZi5fQ0hVTktfU0laRSAgIyBKdXN0IHRlc3QgdGhhdCBpdCBleGlzdHMKICAgICAgICAgZi5fQ0hVTktfU0laRSA9IDIKICAgICAgICAgZi5yZWFkbGluZSgpCiAgICAgICAgIGYudGVsbCgpCiAKLSAgICBkZWYgdGVzdFNlZWtBbmRUZWxsKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHNlZWsvdGVsbCB1c2luZyB0aGUgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIuIiIiCisgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbChzZWxmKToKKyAgICAgICAgI1Rlc3Qgc2Vlay90ZWxsIHVzaW5nIHRoZSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlci4KKyAgICAgICAgIyBNYWtlIHRlc3QgZmFzdGVyIGJ5IGRvaW5nIHNtYWxsZXIgc2Vla3MKKyAgICAgICAgQ0hVTktfU0laRSA9IDEyOAogCi0gICAgICAgIGRlZiB0ZXN0U2Vla0FuZFRlbGxXaXRoRGF0YShkYXRhLCBtaW5fcG9zPTApOgorICAgICAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsX3dpdGhfZGF0YShkYXRhLCBtaW5fcG9zPTApOgogICAgICAgICAgICAgIiIiVGVsbC9zZWVrIHRvIHZhcmlvdXMgcG9pbnRzIHdpdGhpbiBhIGRhdGEgc3RyZWFtIGFuZCBlbnN1cmUKICAgICAgICAgICAgIHRoYXQgdGhlIGRlY29kZWQgZGF0YSByZXR1cm5lZCBieSByZWFkKCkgaXMgY29uc2lzdGVudC4iIiIKLSAgICAgICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQogICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBlbmNvZGluZz0ndGVzdF9kZWNvZGVyJykKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIGVuY29kaW5nPSd0ZXN0X2RlY29kZXInKQorICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IENIVU5LX1NJWkUKICAgICAgICAgICAgIGRlY29kZWQgPSBmLnJlYWQoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbl9wb3MsIGxlbihkZWNvZGVkKSArIDEpOiAjIHNlZWsgcG9zaXRpb25zCiAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzEsIDUsIGxlbihkZWNvZGVkKSAtIGldOiAjIHJlYWQgbGVuZ3RocwotICAgICAgICAgICAgICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBlbmNvZGluZz0ndGVzdF9kZWNvZGVyJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKGkpLCBkZWNvZGVkWzppXSkKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgZW5jb2Rpbmc9J3Rlc3RfZGVjb2RlcicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGkpLCBkZWNvZGVkWzppXSkKICAgICAgICAgICAgICAgICAgICAgY29va2llID0gZi50ZWxsKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKGopLCBkZWNvZGVkW2k6aSArIGpdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChqKSwgZGVjb2RlZFtpOmkgKyBqXSkKICAgICAgICAgICAgICAgICAgICAgZi5zZWVrKGNvb2tpZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRlY29kZWRbaTpdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkZWNvZGVkW2k6XSkKICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgIyBFbmFibGUgdGhlIHRlc3QgZGVjb2Rlci4KQEAgLTExNDMsMjMgKzIwMTYsMjIgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBUcnkgZWFjaCB0ZXN0IGNhc2UuCiAgICAgICAgICAgICBmb3IgaW5wdXQsIF8sIF8gaW4gU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0LnRlc3RfY2FzZXM6Ci0gICAgICAgICAgICAgICAgdGVzdFNlZWtBbmRUZWxsV2l0aERhdGEoaW5wdXQpCisgICAgICAgICAgICAgICAgdGVzdF9zZWVrX2FuZF90ZWxsX3dpdGhfZGF0YShpbnB1dCkKIAogICAgICAgICAgICAgIyBQb3NpdGlvbiBlYWNoIHRlc3QgY2FzZSBzbyB0aGF0IGl0IGNyb3NzZXMgYSBjaHVuayBib3VuZGFyeS4KLSAgICAgICAgICAgIENIVU5LX1NJWkUgPSBpby5UZXh0SU9XcmFwcGVyLl9DSFVOS19TSVpFCiAgICAgICAgICAgICBmb3IgaW5wdXQsIF8sIF8gaW4gU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXJUZXN0LnRlc3RfY2FzZXM6CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gQ0hVTktfU0laRSAtIGxlbihpbnB1dCkvLzIKICAgICAgICAgICAgICAgICBwcmVmaXggPSBiJy4nKm9mZnNldAogICAgICAgICAgICAgICAgICMgRG9uJ3QgYm90aGVyIHNlZWtpbmcgaW50byB0aGUgcHJlZml4ICh0YWtlcyB0b28gbG9uZykuCiAgICAgICAgICAgICAgICAgbWluX3BvcyA9IG9mZnNldCoyCi0gICAgICAgICAgICAgICAgdGVzdFNlZWtBbmRUZWxsV2l0aERhdGEocHJlZml4ICsgaW5wdXQsIG1pbl9wb3MpCisgICAgICAgICAgICAgICAgdGVzdF9zZWVrX2FuZF90ZWxsX3dpdGhfZGF0YShwcmVmaXggKyBpbnB1dCwgbWluX3BvcykKIAogICAgICAgICAjIEVuc3VyZSBvdXIgdGVzdCBkZWNvZGVyIHdvbid0IGludGVyZmVyZSB3aXRoIHN1YnNlcXVlbnQgdGVzdHMuCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlci5jb2RlY0VuYWJsZWQgPSAwCiAKLSAgICBkZWYgdGVzdEVuY29kZWRXcml0ZXMoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB1IjEyMzQ1Njc4OTAiCisgICAgZGVmIHRlc3RfZW5jb2RlZF93cml0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSAiMTIzNDU2Nzg5MCIKICAgICAgICAgdGVzdHMgPSAoInV0Zi0xNiIsCiAgICAgICAgICAgICAgICAgICJ1dGYtMTYtbGUiLAogICAgICAgICAgICAgICAgICAidXRmLTE2LWJlIiwKQEAgLTExNjcsNzYgKzIwMzksNTYgQEAKICAgICAgICAgICAgICAgICAgInV0Zi0zMi1sZSIsCiAgICAgICAgICAgICAgICAgICJ1dGYtMzItYmUiKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gdGVzdHM6Ci0gICAgICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGYgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICAgICAgZiA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPWVuY29kaW5nKQogICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgQk9NIGlzIHdyaXR0ZW4gb25seSBvbmNlIChzZWUgaXNzdWUxNzUzKS4KICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5yZWFkKCksIGRhdGEgKiAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLmdldHZhbHVlKCksIChkYXRhICogMikuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIChkYXRhICogMikuZW5jb2RlKGVuY29kaW5nKSkKIAotICAgIGRlZiB0aW1pbmdUZXN0KHNlbGYpOgotICAgICAgICB0aW1lciA9IHRpbWUudGltZQotICAgICAgICBlbmMgPSAidXRmOCIKLSAgICAgICAgbGluZSA9ICJcMFx4MGZceGZmXHUwZmZmXHVmZmZmXFUwMDBmZmZmZlxVMDAxMGZmZmYiKjMgKyAiXG4iCi0gICAgICAgIG5saW5lcyA9IDEwMDAwCi0gICAgICAgIG5jaGFycyA9IGxlbihsaW5lKQotICAgICAgICBuYnl0ZXMgPSBsZW4obGluZS5lbmNvZGUoZW5jKSkKLSAgICAgICAgZm9yIGNodW5rX3NpemUgaW4gKDMyLCA2NCwgMTI4LCAyNTYpOgotICAgICAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIncrIiwgZW5jb2Rpbmc9ZW5jKQotICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IGNodW5rX3NpemUKLSAgICAgICAgICAgIHQwID0gdGltZXIoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmxpbmVzKToKLSAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCi0gICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgICAgIHQxID0gdGltZXIoKQotICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHQyID0gdGltZXIoKQotICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICB3aGlsZSBmLnJlYWRsaW5lKCk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdDMgPSB0aW1lcigpCi0gICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgIHdoaWxlIGYucmVhZGxpbmUoKToKLSAgICAgICAgICAgICAgICBmLnRlbGwoKQotICAgICAgICAgICAgdDQgPSB0aW1lcigpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCJcblRpbWluZyB0ZXN0OiAlZCBsaW5lcyBvZiAlZCBjaGFyYWN0ZXJzICglZCBieXRlcykiICUKLSAgICAgICAgICAgICAgICAgICAgICAobmxpbmVzLCBuY2hhcnMsIG5ieXRlcykpCi0gICAgICAgICAgICAgICAgcHJpbnQoIkZpbGUgY2h1bmsgc2l6ZTogICAgICAgICAgJTZzIiAlIGYuX0NIVU5LX1NJWkUpCi0gICAgICAgICAgICAgICAgcHJpbnQoIldyaXRpbmc6ICAgICAgICAgICAgICAgICAgJTYuM2Ygc2Vjb25kcyIgJSAodDEtdDApKQotICAgICAgICAgICAgICAgIHByaW50KCJSZWFkaW5nIHVzaW5nIGl0ZXJhdGlvbjogICU2LjNmIHNlY29uZHMiICUgKHQyLXQxKSkKLSAgICAgICAgICAgICAgICBwcmludCgiUmVhZGluZyB1c2luZyByZWFkbGluZSgpOiAlNi4zZiBzZWNvbmRzIiAlICh0My10MikpCi0gICAgICAgICAgICAgICAgcHJpbnQoIlVzaW5nIHJlYWRsaW5lKCkrdGVsbCgpOiAgJTYuM2Ygc2Vjb25kcyIgJSAodDQtdDMpKQorICAgIGRlZiB0ZXN0X3VucmVhZGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIFVuUmVhZGFibGUoc2VsZi5CeXRlc0lPKToKKyAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKFVuUmVhZGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LnJlYWQpCiAKLSAgICBkZWYgdGVzdFJlYWRPbmVCeU9uZShzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKGIiQUFcclxuQkIiKSkKKyAgICBkZWYgdGVzdF9yZWFkX29uZV9ieV9vbmUoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQogICAgICAgICByZWFkcyA9ICIiCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBjID0gdHh0LnJlYWQoMSkKICAgICAgICAgICAgIGlmIG5vdCBjOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICByZWFkcyArPSBjCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRzLCAiQUFcbkJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgIkFBXG5CQiIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxuQkJcbkNDIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcygpLCBbIkFBXG4iLCAiQkJcbiIsICJDQyJdKQorICAgICAgICB0eHQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkbGluZXMoTm9uZSksIFsiQUFcbiIsICJCQlxuIiwgIkNDIl0pCisgICAgICAgIHR4dC5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcyg1KSwgWyJBQVxuIiwgIkJCXG4iXSkKIAogICAgICMgcmVhZCBpbiBhbW91bnRzIGVxdWFsIHRvIFRleHRJT1dyYXBwZXIuX0NIVU5LX1NJWkUgd2hpY2ggaXMgMTI4LgotICAgIGRlZiB0ZXN0UmVhZEJ5Q2h1bmsoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZF9ieV9jaHVuayhzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgIlxyXG4iIHN0cmFkZGxlcyAxMjggY2hhciBib3VuZGFyeS4KLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKGIiQSIgKiAxMjcgKyBiIlxyXG5CIikpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBIiAqIDEyNyArIGIiXHJcbkIiKSkKICAgICAgICAgcmVhZHMgPSAiIgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgYyA9IHR4dC5yZWFkKDEyOCkKICAgICAgICAgICAgIGlmIG5vdCBjOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICByZWFkcyArPSBjCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRzLCAiQSIqMTI3KyJcbkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCAiQSIqMTI3KyJcbkIiKQogCiAgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzEoc2VsZik6Ci0gICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKIAogICAgICAgICAjIHJlYWQgb25lIGNoYXIgYXQgYSB0aW1lCiAgICAgICAgIHJlYWRzID0gIiIKQEAgLTEyNDUsMTAgKzIwOTcsMTAgQEAKICAgICAgICAgICAgIGlmIG5vdCBjOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICByZWFkcyArPSBjCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKIAogICAgIGRlZiB0ZXN0X2lzc3VlMTM5NV8yKHNlbGYpOgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKIAogICAgICAgICByZWFkcyA9ICIiCkBAIC0xMjU3LDEwICsyMTA5LDEwIEBACiAgICAgICAgICAgICBpZiBub3QgYzoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcmVhZHMgKz0gYwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfMyhzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICB0eHQuX0NIVU5LX1NJWkUgPSA0CiAKICAgICAgICAgcmVhZHMgPSB0eHQucmVhZCg0KQpAQCAtMTI2OCw0MCArMjEyMCwxNTEgQEAKICAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKICAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKICAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgc2VsZi5ub3JtYWxpemVkKQogCiAgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzQoc2VsZik6Ci0gICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKICAgICAgICAgdHh0Ll9DSFVOS19TSVpFID0gNAogCiAgICAgICAgIHJlYWRzID0gdHh0LnJlYWQoNCkKICAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfNShzZWxmKToKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQogICAgICAgICB0eHQuX0NIVU5LX1NJWkUgPSA0CiAKICAgICAgICAgcmVhZHMgPSB0eHQucmVhZCg0KQogICAgICAgICBwb3MgPSB0eHQudGVsbCgpCiAgICAgICAgIHR4dC5zZWVrKDApCiAgICAgICAgIHR4dC5zZWVrKHBvcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHh0LnJlYWQoNCksICJCQkJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWQoNCksICJCQkJcbiIpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTIyODIoc2VsZik6Ci0gICAgICAgIGJ1ZmZlciA9IGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKLSAgICAgICAgdHh0ID0gaW8uVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIGJ1ZmZlciA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmZmVyLnNlZWthYmxlKCksIHR4dC5zZWVrYWJsZSgpKQogCi0gICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2Rlcl91dGY4KHNlbGYsIGRlY29kZXIpOgorICAgIGRlZiB0ZXN0X2FwcGVuZF9ib20oc2VsZik6CisgICAgICAgICMgVGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZ2FpbiB3aGVuIGFwcGVuZGluZyB0byBhIG5vbi1lbXB0eSBmaWxlCisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQorICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnYWFhJy5lbmNvZGUoY2hhcnNldCkpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAnYScsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgneHh4JykKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdhYWF4eHgnLmVuY29kZShjaGFyc2V0KSkKKworICAgIGRlZiB0ZXN0X3NlZWtfYm9tKHNlbGYpOgorICAgICAgICAjIFNhbWUgdGVzdCwgYnV0IHdoZW4gc2Vla2luZyBtYW51YWxseQorICAgICAgICBmaWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIGZvciBjaGFyc2V0IGluICgndXRmLTgtc2lnJywgJ3V0Zi0xNicsICd1dGYtMzInKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAndycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnYWFhJykKKyAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyKycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZWVrKHBvcykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd6enonKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2JiYicpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnYmJienp6Jy5lbmNvZGUoY2hhcnNldCkpCisKKyAgICBkZWYgdGVzdF9lcnJvcnNfcHJvcGVydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXJyb3JzLCAic3RyaWN0IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IiwgZXJyb3JzPSJyZXBsYWNlIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lcnJvcnMsICJyZXBsYWNlIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfdGhyZWFkc193cml0ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTY3NTA6IGNvbmN1cnJlbnQgd3JpdGVzIGNvdWxkIGR1cGxpY2F0ZSBkYXRhCisgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IiwgYnVmZmVyaW5nPTEpIGFzIGY6CisgICAgICAgICAgICBkZWYgcnVuKG4pOgorICAgICAgICAgICAgICAgIHRleHQgPSAiVGhyZWFkJTAzZFxuIiAlIG4KKyAgICAgICAgICAgICAgICBldmVudC53YWl0KCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYSBuPXg6IHJ1bihuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMjApXQorICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKKyAgICAgICAgICAgIGV2ZW50LnNldCgpCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LmNvdW50KCJUaHJlYWQlMDNkXG4iICUgbiksIDEpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKworICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0eHQuZmx1c2gpCisKKyAgICBkZWYgdGVzdF9yZWFkb25seV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcikpOgorICAgICAgICAgICAgdHh0LmJ1ZmZlciA9IGJ1ZgorCitjbGFzcyBDVGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyLCAxMDAwKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPSd4eXp6eScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucmVhZCkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBDIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKKyAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgorICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbiBnYy5nYXJiYWdlIGluc3RlYWQuCisgICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQorICAgICAgICB0LnggPSB0CisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKKyAgICAgICAgZGVsIHQKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiI0NTZkZWYiKQorCitjbGFzcyBQeVRleHRJT1dyYXBwZXJUZXN0KFRleHRJT1dyYXBwZXJUZXN0KToKKyAgICBwYXNzCisKKworY2xhc3MgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2RpbmdfdXRmOChzZWxmLCBkZWNvZGVyKToKICAgICAgICAgIyBVVEYtOCBzcGVjaWZpYyB0ZXN0cyBmb3IgYSBuZXdsaW5lIGRlY29kZXIKICAgICAgICAgZGVmIF9jaGVja19kZWNvZGUoYiwgcywgKiprd2FyZ3MpOgogICAgICAgICAgICAgIyBXZSBleGVyY2lzZSBnZXRzdGF0ZSgpIC8gc2V0c3RhdGUoKSBhcyB3ZWxsIGFzIGRlY29kZSgpCiAgICAgICAgICAgICBzdGF0ZSA9IGRlY29kZXIuZ2V0c3RhdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoYiwgKiprd2FyZ3MpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCiAgICAgICAgICAgICBkZWNvZGVyLnNldHN0YXRlKHN0YXRlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoYiwgKiprd2FyZ3MpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCiAKICAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZThceGEyXHg4OCcsICJcdTg4ODgiKQogCkBAIC0xMzM2LDU0ICsyMjk5LDczIEBACiAgICAgICAgIF9jaGVja19kZWNvZGUoYidceGU4XHhhMlx4ODhccicsICJcdTg4ODgiKQogICAgICAgICBfY2hlY2tfZGVjb2RlKGInXG4nLCAiXG4iKQogCi0gICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2RlcihzZWxmLCBkZWNvZGVyLCBlbmNvZGluZyk6CisgICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2Rpbmcoc2VsZiwgZGVjb2RlciwgZW5jb2RpbmcpOgogICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoKQotICAgICAgICBkZWYgX2RlY29kZV9ieXRld2lzZShzKToKLSAgICAgICAgICAgIGZvciBiIGluIGVuY29kZXIuZW5jb2RlKHMpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2Rlci5kZWNvZGUoYikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIubmV3bGluZXMsIE5vbmUpCisgICAgICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcpKCkKKyAgICAgICAgICAgIGRlZiBfZGVjb2RlX2J5dGV3aXNlKHMpOgorICAgICAgICAgICAgICAgICMgRGVjb2RlIG9uZSBieXRlIGF0IGEgdGltZQorICAgICAgICAgICAgICAgIGZvciBiIGluIGVuY29kZXIuZW5jb2RlKHMpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZXIuZGVjb2RlKGIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW5jb2RlciA9IE5vbmUKKyAgICAgICAgICAgIGRlZiBfZGVjb2RlX2J5dGV3aXNlKHMpOgorICAgICAgICAgICAgICAgICMgRGVjb2RlIG9uZSBjaGFyIGF0IGEgdGltZQorICAgICAgICAgICAgICAgIGZvciBjIGluIHM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2Rlci5kZWNvZGUoYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5uZXdsaW5lcywgTm9uZSkKICAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjXG5cciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRlY29kZXIubmV3bGluZXMsICdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5uZXdsaW5lcywgJ1xuJykKICAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiXG5hYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKICAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjXHIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKICAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5uZXdsaW5lcywgKCdccicsICdcbicsICdcclxuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5uZXdsaW5lcywgKCdccicsICdcbicsICdcclxuJykpCiAgICAgICAgIF9kZWNvZGVfYnl0ZXdpc2UoImFiY1xyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoIiIuam9pbihyZXN1bHQpLCAiYWJjXG5cbmFiY2FiY1xuYWJjYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIi5qb2luKHJlc3VsdCksICJhYmNcblxuYWJjYWJjXG5hYmNhYmMiKQogICAgICAgICBkZWNvZGVyLnJlc2V0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVjb2Rlci5kZWNvZGUoImFiYyIuZW5jb2RlKGVuY29kaW5nKSksICJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkZWNvZGVyLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBpbnB1dCA9ICJhYmMiCisgICAgICAgIGlmIGVuY29kZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKKyAgICAgICAgICAgIGlucHV0ID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoaW5wdXQpLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCBOb25lKQogCiAgICAgZGVmIHRlc3RfbmV3bGluZV9kZWNvZGVyKHNlbGYpOgogICAgICAgICBlbmNvZGluZ3MgPSAoCi0gICAgICAgICAgICAndXRmLTgnLCAnbGF0aW4tMScsCisgICAgICAgICAgICAjIE5vbmUgbWVhbmluZyB0aGUgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciB0YWtlcyB1bmljb2RlIGlucHV0CisgICAgICAgICAgICAjIHJhdGhlciB0aGFuIGJ5dGVzIGlucHV0CisgICAgICAgICAgICBOb25lLCAndXRmLTgnLCAnbGF0aW4tMScsCiAgICAgICAgICAgICAndXRmLTE2JywgJ3V0Zi0xNi1sZScsICd1dGYtMTYtYmUnLAogICAgICAgICAgICAgJ3V0Zi0zMicsICd1dGYtMzItbGUnLCAndXRmLTMyLWJlJywKICAgICAgICAgKQogICAgICAgICBmb3IgZW5jIGluIGVuY29kaW5nczoKLSAgICAgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKGVuYykoKQotICAgICAgICAgICAgZGVjb2RlciA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2RlciwgdHJhbnNsYXRlPVRydWUpCi0gICAgICAgICAgICBzZWxmLmNoZWNrX25ld2xpbmVfZGVjb2RlcihkZWNvZGVyLCBlbmMpCisgICAgICAgICAgICBkZWNvZGVyID0gZW5jIGFuZCBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKGVuYykoKQorICAgICAgICAgICAgZGVjb2RlciA9IHNlbGYuSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCB0cmFuc2xhdGU9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbmV3bGluZV9kZWNvZGluZyhkZWNvZGVyLCBlbmMpCiAgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKCJ1dGYtOCIpKCkKLSAgICAgICAgZGVjb2RlciA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoZGVjb2RlciwgdHJhbnNsYXRlPVRydWUpCi0gICAgICAgIHNlbGYuY2hlY2tfbmV3bGluZV9kZWNvZGVyX3V0ZjgoZGVjb2RlcikKKyAgICAgICAgZGVjb2RlciA9IHNlbGYuSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCB0cmFuc2xhdGU9VHJ1ZSkKKyAgICAgICAgc2VsZi5jaGVja19uZXdsaW5lX2RlY29kaW5nX3V0ZjgoZGVjb2RlcikKIAotICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgotICAgICAgICB0eHQgPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCi0gICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQotICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgZGVmIHRlc3RfbmV3bGluZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1NDMzOiBFeGNlc3NpdmUgb3B0aW1pemF0aW9uIGluIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIKKyAgICAgICAgZGVmIF9jaGVjayhkZWMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMubmV3bGluZXMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5kZWNvZGUoIlx1MEQwMCIpLCAiXHUwRDAwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLm5ld2xpbmVzLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMuZGVjb2RlKCJcdTBBMDAiKSwgIlx1MEEwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgZGVjID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIHRyYW5zbGF0ZT1GYWxzZSkKKyAgICAgICAgX2NoZWNrKGRlYykKKyAgICAgICAgZGVjID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICBfY2hlY2soZGVjKQogCi0gICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6Ci0gICAgICAgIHR4dCA9IGlvLlRleHRJT1dyYXBwZXIoaW8uQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgdHh0LmNsb3NlKCkKLSAgICAgICAgdHh0LmNsb3NlKCkKLSAgICAgICAgdHh0LmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHh0LmZsdXNoKQorY2xhc3MgQ0luY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KEluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KToKKyAgICBwYXNzCisKK2NsYXNzIFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QoSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QpOgorICAgIHBhc3MKIAogCiAjIFhYWCBUZXN0cyBmb3Igb3BlbigpCkBAIC0xMzkxLDU0ICsyMzczLDM3OSBAQAogY2xhc3MgTWlzY0lPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKLSAgICBkZWYgdGVzdEltcG9ydF9fYWxsX18oc2VsZik6Ci0gICAgICAgIGZvciBuYW1lIGluIGlvLl9fYWxsX186Ci0gICAgICAgICAgICBvYmogPSBnZXRhdHRyKGlvLCBuYW1lLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG9iaiBpcyBub3QgTm9uZSwgbmFtZSkKKyAgICBkZWYgdGVzdF9fX2FsbF9fKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmlvLl9fYWxsX186CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKHNlbGYuaW8sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqIGlzIG5vdCBOb25lLCBuYW1lKQogICAgICAgICAgICAgaWYgbmFtZSA9PSAib3BlbiI6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVsaWYgImVycm9yIiBpbiBuYW1lLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3Mob2JqLCBFeGNlcHRpb24pLCBuYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhvYmosIGlvLklPQmFzZSkpCi0KKyAgICAgICAgICAgIGVsaWYgImVycm9yIiBpbiBuYW1lLmxvd2VyKCkgb3IgbmFtZSA9PSAiVW5zdXBwb3J0ZWRPcGVyYXRpb24iOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG9iaiwgRXhjZXB0aW9uKSwgbmFtZSkKKyAgICAgICAgICAgIGVsaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgiU0VFS18iKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhvYmosIHNlbGYuSU9CYXNlKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgICAgIGYgPSBpby5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLm1vZGUsICJ3YiIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgZiA9IGlvLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIlUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLm5hbWUsICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5idWZmZXIubmFtZSwgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuYnVmZmVyLnJhdy5uYW1lLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLm1vZGUsICAgICAgICAgICAgIlUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLmJ1ZmZlci5tb2RlLCAgICAgInJiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5idWZmZXIucmF3Lm1vZGUsICJyYiIpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsICAgICAgICAgICAgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubmFtZSwgICAgIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5uYW1lLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICAgICAgICAgICAgIlUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm1vZGUsICAgICAicmIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5tb2RlLCAicmIiKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBmID0gaW8ub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidysiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLm1vZGUsICAgICAgICAgICAgIncrIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5idWZmZXIubW9kZSwgICAgICJyYisiKSAjIERvZXMgaXQgcmVhbGx5IG1hdHRlcj8KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5idWZmZXIucmF3Lm1vZGUsICJyYisiKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidysiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgICAgICAgICAgICAidysiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm1vZGUsICAgICAicmIrIikgIyBEb2VzIGl0IHJlYWxseSBtYXR0ZXI/CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm1vZGUsICJyYisiKQogCi0gICAgICAgIGcgPSBpby5vcGVuKGYuZmlsZW5vKCksICJ3YiIsIGNsb3NlZmQ9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGcubW9kZSwgICAgICJ3YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGcucmF3Lm1vZGUsICJ3YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGcubmFtZSwgICAgIGYuZmlsZW5vKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGcucmF3Lm5hbWUsIGYuZmlsZW5vKCkpCisgICAgICAgIGcgPSBzZWxmLm9wZW4oZi5maWxlbm8oKSwgIndiIiwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm1vZGUsICAgICAid2IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcucmF3Lm1vZGUsICJ3YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5uYW1lLCAgICAgZi5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLnJhdy5uYW1lLCBmLmZpbGVubygpKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZy5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9pb19hZnRlcl9jbG9zZShzZWxmKToKKyAgICAgICAgZm9yIGt3YXJncyBpbiBbCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAid2IifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAid2IiLCAiYnVmZmVyaW5nIjogMH0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogInIifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAicmIifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAicmIiLCAiYnVmZmVyaW5nIjogMH0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrIn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrYiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3KyIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidysiLCAiYnVmZmVyaW5nIjogMn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAqKmt3YXJncykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5mbHVzaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5pc2F0dHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLl9faXRlcl9fKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicGVlayIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucGVlaywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWQxIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkMSwgMTAyNCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkaW50bywgYnl0ZWFycmF5KDEwMjQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5zZWVrLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi50ZWxsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi50cnVuY2F0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYud3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIiIgaWYgImIiIGluIGt3YXJnc1snbW9kZSddIGVsc2UgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLndyaXRlbGluZXMsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgZikKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5naW9lcnJvcihzZWxmKToKKyAgICAgICAgIyBWYXJpb3VzIEJsb2NraW5nSU9FcnJvciBpc3N1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkJsb2NraW5nSU9FcnJvciwgMSwgIiIsIE5vbmUpCisgICAgICAgIGIgPSBzZWxmLkJsb2NraW5nSU9FcnJvcigxLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmNoYXJhY3RlcnNfd3JpdHRlbiwgMCkKKyAgICAgICAgY2xhc3MgQyh1bmljb2RlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IEMoIiIpCisgICAgICAgIGIgPSBzZWxmLkJsb2NraW5nSU9FcnJvcigxLCBjKQorICAgICAgICBjLmIgPSBiCisgICAgICAgIGIuYyA9IGMKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjKQorICAgICAgICBkZWwgYywgYgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKworICAgIGRlZiB0ZXN0X2FiY3Moc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgdmlzaWJsZSBiYXNlIGNsYXNzZXMgYXJlIEFCQ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLklPQmFzZSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLlJhd0lPQmFzZSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLkJ1ZmZlcmVkSU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuVGV4dElPQmFzZSwgYWJjLkFCQ01ldGEpCisKKyAgICBkZWYgX2NoZWNrX2FiY19pbmhlcml0YW5jZShzZWxmLCBhYmNtb2R1bGUpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5SYXdJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLkJ1ZmZlcmVkSU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5UZXh0SU9CYXNlKQorCisgICAgZGVmIHRlc3RfYWJjX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wbGVtZW50YXRpb25zIGluaGVyaXQgZnJvbSB0aGVpciByZXNwZWN0aXZlIEFCQ3MKKyAgICAgICAgc2VsZi5fY2hlY2tfYWJjX2luaGVyaXRhbmNlKHNlbGYpCisKKyAgICBkZWYgdGVzdF9hYmNfaW5oZXJpdGFuY2Vfb2ZmaWNpYWwoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBsZW1lbnRhdGlvbnMgaW5oZXJpdCBmcm9tIHRoZSBvZmZpY2lhbCBBQkNzIG9mIHRoZQorICAgICAgICAjIGJhc2VsaW5lICJpbyIgbW9kdWxlLgorICAgICAgICBzZWxmLl9jaGVja19hYmNfaW5oZXJpdGFuY2UoaW8pCisKK2NsYXNzIENNaXNjSU9UZXN0KE1pc2NJT1Rlc3QpOgorICAgIGlvID0gaW8KKworY2xhc3MgUHlNaXNjSU9UZXN0KE1pc2NJT1Rlc3QpOgorICAgIGlvID0gcHlpbworCisKK0B1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAnUE9TSVggc2lnbmFscyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTaWduYWxzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub2xkYWxybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuYWxhcm1faW50ZXJydXB0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLm9sZGFscm0pCisKKyAgICBkZWYgYWxhcm1faW50ZXJydXB0KHNlbGYsIHNpZywgZnJhbWUpOgorICAgICAgICAxIC8vIDAKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIGNoZWNrX2ludGVycnVwdGVkX3dyaXRlKHNlbGYsIGl0ZW0sIGJ5dGVzLCAqKmZkb3Blbl9rd2FyZ3MpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGEgcGFydGlhbCB3cml0ZSwgd2hlbiBpdCBnZXRzIGludGVycnVwdGVkLCBwcm9wZXJseQorICAgICAgICBpbnZva2VzIHRoZSBzaWduYWwgaGFuZGxlciwgYW5kIGJ1YmJsZXMgdXAgdGhlIGV4Y2VwdGlvbiByYWlzZWQKKyAgICAgICAgaW4gdGhlIGxhdHRlci4iIiIKKyAgICAgICAgcmVhZF9yZXN1bHRzID0gW10KKyAgICAgICAgZGVmIF9yZWFkKCk6CisgICAgICAgICAgICBzID0gb3MucmVhZChyLCAxKQorICAgICAgICAgICAgcmVhZF9yZXN1bHRzLmFwcGVuZChzKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3JlYWQpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgIyBGaWxsIHRoZSBwaXBlIGVub3VnaCB0aGF0IHRoZSB3cml0ZSB3aWxsIGJlIGJsb2NraW5nLgorICAgICAgICAgICAgIyBJdCB3aWxsIGJlIGludGVycnVwdGVkIGJ5IHRoZSB0aW1lciBhcm1lZCBhYm92ZS4gIFNpbmNlIHRoZQorICAgICAgICAgICAgIyBvdGhlciB0aHJlYWQgaGFzIHJlYWQgb25lIGJ5dGUsIHRoZSBsb3ctbGV2ZWwgd3JpdGUgd2lsbAorICAgICAgICAgICAgIyByZXR1cm4gd2l0aCBhIHN1Y2Nlc3NmdWwgKHBhcnRpYWwpIHJlc3VsdCByYXRoZXIgdGhhbiBhbiBFSU5UUi4KKyAgICAgICAgICAgICMgVGhlIGJ1ZmZlcmVkIElPIGxheWVyIG11c3QgY2hlY2sgZm9yIHBlbmRpbmcgc2lnbmFsCisgICAgICAgICAgICAjIGhhbmRsZXJzLCB3aGljaCBpbiB0aGlzIGNhc2Ugd2lsbCBpbnZva2UgYWxhcm1faW50ZXJydXB0KCkuCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqICgxMDI0ICogMTAyNCkpCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgIyBXZSBnb3Qgb25lIGJ5dGUsIGdldCBhbm90aGVyIG9uZSBhbmQgY2hlY2sgdGhhdCBpdCBpc24ndCBhCisgICAgICAgICAgICAjIHJlcGVhdCBvZiB0aGUgZmlyc3Qgb25lLgorICAgICAgICAgICAgcmVhZF9yZXN1bHRzLmFwcGVuZChvcy5yZWFkKHIsIDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3Jlc3VsdHMsIFtieXRlc1swOjFdLCBieXRlc1sxOjJdXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgIyBUaGlzIGlzIGRlbGliZXJhdGUuIElmIHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAjIGJlZm9yZSBjbG9zaW5nIHdpbywgd2lvIHdvdWxkIHRyeSB0byBmbHVzaCBpdHMgaW50ZXJuYWwKKyAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgYmxvY2sgYWdhaW4uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX3VuYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoYiJ4eSIsIGIieHkiLCBtb2RlPSJ3YiIsIGJ1ZmZlcmluZz0wKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoYiJ4eSIsIGIieHkiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF93cml0ZV90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKCJ4eSIsIGIieHkiLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9ImFzY2lpIikKKworICAgIGRlZiBjaGVja19yZWVudHJhbnRfd3JpdGUoc2VsZiwgZGF0YSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgZGVmIG9uX2FsYXJtKCphcmdzKToKKyAgICAgICAgICAgICMgV2lsbCBiZSBjYWxsZWQgcmVlbnRyYW50bHkgZnJvbSB0aGUgc2FtZSB0aHJlYWQKKyAgICAgICAgICAgIHdpby53cml0ZShkYXRhKQorICAgICAgICAgICAgMS8wCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9uX2FsYXJtKQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgIyBFaXRoZXIgdGhlIHJlZW50cmFudCBjYWxsIHRvIHdpby53cml0ZSgpIGZhaWxzIHdpdGggUnVudGltZUVycm9yLAorICAgICAgICAgICAgIyBvciB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIFJ1bnRpbWVFcnJvcikpIGFzIGNtOgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpby5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBidWZmZXIgZG9lc24ndCBmaWxsIHVwIGFuZCBibG9jayBmdXJ0aGVyIHdyaXRlcworICAgICAgICAgICAgICAgICAgICBvcy5yZWFkKHIsIGxlbihkYXRhKSAqIDEwMCkKKyAgICAgICAgICAgIGV4YyA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihleGMpLnN0YXJ0c3dpdGgoInJlZW50cmFudCBjYWxsIiksIHN0cihleGMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgdGVzdF9yZWVudHJhbnRfd3JpdGVfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVlbnRyYW50X3dyaXRlKGIieHkiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9yZWVudHJhbnRfd3JpdGVfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfd3JpdGUoInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCisKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShzZWxmLCBkZWNvZGUsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBidWZmZXJlZCByZWFkLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZywgZnJhbWUpOgorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJiYXIiKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybV9oYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByaW8gPSBzZWxmLmlvLm9wZW4ociwgKipmZG9wZW5fa3dhcmdzKQorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJmb28iKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEV4cGVjdGVkIGJlaGF2aW91cjoKKyAgICAgICAgICAgICMgLSBmaXJzdCByYXcgcmVhZCgpIHJldHVybnMgcGFydGlhbCBiImZvbyIKKyAgICAgICAgICAgICMgLSBzZWNvbmQgcmF3IHJlYWQoKSByZXR1cm5zIEVJTlRSCisgICAgICAgICAgICAjIC0gdGhpcmQgcmF3IHJlYWQoKSByZXR1cm5zIGIiYmFyIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUocmlvLnJlYWQoNikpLCAiZm9vYmFyIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJpby5jbG9zZSgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3JlYWRfcmV0cnkobGFtYmRhIHg6IHguZGVjb2RlKCdsYXRpbjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InJiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShsYW1iZGEgeDogeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGVfcmV0cnkoc2VsZiwgaXRlbSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGJ1ZmZlcmVkIHdyaXRlLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICBzZWxlY3QgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNlbGVjdCIpCisgICAgICAgICMgQSBxdWFudGl0eSB0aGF0IGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplIG9mIGFuIGFub255bW91cyBwaXBlJ3MKKyAgICAgICAgIyB3cml0ZSBlbmQuCisgICAgICAgIE4gPSAxMDI0ICogMTAyNAorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgICMgV2UgbmVlZCBhIHNlcGFyYXRlIHRocmVhZCB0byByZWFkIGZyb20gdGhlIHBpcGUgYW5kIGFsbG93IHRoZQorICAgICAgICAjIHdyaXRlKCkgdG8gZmluaXNoLiAgVGhpcyB0aHJlYWQgaXMgc3RhcnRlZCBhZnRlciB0aGUgU0lHQUxSTSBpcworICAgICAgICAjIHJlY2VpdmVkIChmb3JjaW5nIGEgZmlyc3QgRUlOVFIgaW4gd3JpdGUoKSkuCisgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCisgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgZGVmIF9yZWFkKCk6CisgICAgICAgICAgICB3aGlsZSBub3Qgd3JpdGVfZmluaXNoZWQ6CisgICAgICAgICAgICAgICAgd2hpbGUgciBpbiBzZWxlY3Quc2VsZWN0KFtyXSwgW10sIFtdLCAxLjApWzBdOgorICAgICAgICAgICAgICAgICAgICBzID0gb3MucmVhZChyLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIGRlZiBhbGFybTEoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgZGVmIGFsYXJtMihzaWcsIGZyYW1lKToKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgIyAtIGZpcnN0IHJhdyB3cml0ZSgpIGlzIHBhcnRpYWwgKGJlY2F1c2Ugb2YgdGhlIGxpbWl0ZWQgcGlwZSBidWZmZXIKKyAgICAgICAgICAgICMgICBhbmQgdGhlIGZpcnN0IGFsYXJtKQorICAgICAgICAgICAgIyAtIHNlY29uZCByYXcgd3JpdGUoKSByZXR1cm5zIEVJTlRSIChiZWNhdXNlIG9mIHRoZSBzZWNvbmQgYWxhcm0pCisgICAgICAgICAgICAjIC0gc3Vic2VxdWVudCB3cml0ZSgpcyBhcmUgc3VjY2Vzc2Z1bCAoZWl0aGVyIHBhcnRpYWwgb3IgY29tcGxldGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIHdpby53cml0ZShpdGVtICogTikpCisgICAgICAgICAgICB3aW8uZmx1c2goKQorICAgICAgICAgICAgd3JpdGVfZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCBzdW0obGVuKHgpIGZvciB4IGluIHJlYWRfcmVzdWx0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgIyBUaGlzIGlzIGRlbGliZXJhdGUuIElmIHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAjIGJlZm9yZSBjbG9zaW5nIHdpbywgd2lvIHdvdWxkIHRyeSB0byBmbHVzaCBpdHMgaW50ZXJuYWwKKyAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgY291bGQgYmxvY2sgKGluIGNhc2Ugb2YgZmFpbHVyZSkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF93cml0ZV9yZXRyeV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeShiIngiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlcmRfd3JpdGVfcmV0cnlfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeSgieCIsIG1vZGU9InciLCBlbmNvZGluZz0ibGF0aW4xIikKKworCitjbGFzcyBDU2lnbmFsc1Rlc3QoU2lnbmFsc1Rlc3QpOgorICAgIGlvID0gaW8KKworY2xhc3MgUHlTaWduYWxzVGVzdChTaWduYWxzVGVzdCk6CisgICAgaW8gPSBweWlvCisKKyAgICAjIEhhbmRsaW5nIHJlZW50cmFuY3kgaXNzdWVzIHdvdWxkIHNsb3cgZG93biBfcHlpbyBldmVuIG1vcmUsIHNvIHRoZQorICAgICMgdGVzdHMgYXJlIGRpc2FibGVkLgorICAgIHRlc3RfcmVlbnRyYW50X3dyaXRlX2J1ZmZlcmVkID0gTm9uZQorICAgIHRlc3RfcmVlbnRyYW50X3dyaXRlX3RleHQgPSBOb25lCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSU9UZXN0LCBCeXRlc0lPVGVzdCwgU3RyaW5nSU9UZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LCBCdWZmZXJlZFdyaXRlclRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJlZFJXUGFpclRlc3QsIEJ1ZmZlcmVkUmFuZG9tVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRJT1dyYXBwZXJUZXN0LCBNaXNjSU9UZXN0KQorICAgIHRlc3RzID0gKENJT1Rlc3QsIFB5SU9UZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJlYWRlclRlc3QsIFB5QnVmZmVyZWRSZWFkZXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFdyaXRlclRlc3QsIFB5QnVmZmVyZWRXcml0ZXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJXUGFpclRlc3QsIFB5QnVmZmVyZWRSV1BhaXJUZXN0LAorICAgICAgICAgICAgIENCdWZmZXJlZFJhbmRvbVRlc3QsIFB5QnVmZmVyZWRSYW5kb21UZXN0LAorICAgICAgICAgICAgIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdCwKKyAgICAgICAgICAgICBDSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QsIFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QsCisgICAgICAgICAgICAgQ1RleHRJT1dyYXBwZXJUZXN0LCBQeVRleHRJT1dyYXBwZXJUZXN0LAorICAgICAgICAgICAgIENNaXNjSU9UZXN0LCBQeU1pc2NJT1Rlc3QsCisgICAgICAgICAgICAgQ1NpZ25hbHNUZXN0LCBQeVNpZ25hbHNUZXN0LAorICAgICAgICAgICAgICkKKworICAgICMgUHV0IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSBJTyBtb2R1bGUgd2UgYXJlIHRlc3RpbmcgYW5kIHNvbWUgdXNlZnVsIG1vY2sKKyAgICAjIGNsYXNzZXMgaW4gdGhlIF9fZGljdF9fIG9mIGVhY2ggdGVzdC4KKyAgICBtb2NrcyA9IChNb2NrUmF3SU8sIE1pc2JlaGF2ZWRSYXdJTywgTW9ja0ZpbGVJTywgQ2xvc2VGYWlsdXJlSU8sCisgICAgICAgICAgICAgTW9ja05vbkJsb2NrV3JpdGVySU8sIE1vY2tSYXdJT1dpdGhvdXRSZWFkKQorICAgIGFsbF9tZW1iZXJzID0gaW8uX19hbGxfXyArIFsiSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciJdCisgICAgY19pb19ucyA9IGRpY3QoKG5hbWUsIGdldGF0dHIoaW8sIG5hbWUpKSBmb3IgbmFtZSBpbiBhbGxfbWVtYmVycykKKyAgICBweV9pb19ucyA9IGRpY3QoKG5hbWUsIGdldGF0dHIocHlpbywgbmFtZSkpIGZvciBuYW1lIGluIGFsbF9tZW1iZXJzKQorICAgIGdsb2JzID0gZ2xvYmFscygpCisgICAgY19pb19ucy51cGRhdGUoKHguX19uYW1lX18sIGdsb2JzWyJDIiArIHguX19uYW1lX19dKSBmb3IgeCBpbiBtb2NrcykKKyAgICBweV9pb19ucy51cGRhdGUoKHguX19uYW1lX18sIGdsb2JzWyJQeSIgKyB4Ll9fbmFtZV9fXSkgZm9yIHggaW4gbW9ja3MpCisgICAgIyBBdm9pZCB0dXJuaW5nIG9wZW4gaW50byBhIGJvdW5kIG1ldGhvZC4KKyAgICBweV9pb19uc1sib3BlbiJdID0gcHlpby5PcGVuV3JhcHBlcgorICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICBpZiB0ZXN0Ll9fbmFtZV9fLnN0YXJ0c3dpdGgoIkMiKToKKyAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4gY19pb19ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdCwgbmFtZSwgb2JqKQorICAgICAgICBlbGlmIHRlc3QuX19uYW1lX18uc3RhcnRzd2l0aCgiUHkiKToKKyAgICAgICAgICAgIGZvciBuYW1lLCBvYmogaW4gcHlfaW9fbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHRlc3QsIG5hbWUsIG9iaikKKworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weSBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKaW5kZXggZDQ2YjEwZC4uYWU5NjVkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CkBAIC0xLDE4ICsxLDI0IEBACitpbXBvcnQgYXJyYXkKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCBnZXRfYXR0cmlidXRlCiBpbXBvcnQgb3MsIHN0cnVjdAotdHJ5OgotICAgIGltcG9ydCBmY250bCwgdGVybWlvcwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJObyBmY250bCBvciB0ZXJtaW9zIG1vZHVsZSIpCi1pZiBub3QgaGFzYXR0cih0ZXJtaW9zLCdUSU9DR1BHUlAnKToKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgidGVybWlvcyBtb2R1bGUgZG9lc24ndCBoYXZlIFRJT0NHUEdSUCIpCitmY250bCA9IGltcG9ydF9tb2R1bGUoJ2ZjbnRsJykKK3Rlcm1pb3MgPSBpbXBvcnRfbW9kdWxlKCd0ZXJtaW9zJykKK2dldF9hdHRyaWJ1dGUodGVybWlvcywgJ1RJT0NHUEdSUCcpICNDYW4ndCBydW4gdGVzdHMgd2l0aG91dCB0aGlzIGZlYXR1cmUKIAogdHJ5OgogICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInIiKQotICAgIHR0eS5jbG9zZSgpCiBleGNlcHQgSU9FcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgiVW5hYmxlIHRvIG9wZW4gL2Rldi90dHkiKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCitlbHNlOgorICAgICMgU2tpcCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgaW4gZm9yZWdyb3VuZAorICAgIHIgPSBmY250bC5pb2N0bCh0dHksIHRlcm1pb3MuVElPQ0dQR1JQLCAiICAgICIpCisgICAgdHR5LmNsb3NlKCkKKyAgICBycGdycCA9IHN0cnVjdC51bnBhY2soImkiLCByKVswXQorICAgIGlmIHJwZ3JwIG5vdCBpbiAob3MuZ2V0cGdycCgpLCBvcy5nZXRzaWQoMCkpOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTmVpdGhlciB0aGUgcHJvY2VzcyBncm91cCBub3IgdGhlIHNlc3Npb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJlIGF0dGFjaGVkIHRvIC9kZXYvdHR5IikKKyAgICBkZWwgdHR5LCByLCBycGdycAogCiB0cnk6CiAgICAgaW1wb3J0IHB0eQpAQCAtMjcsMjEgKzMzLDQxIEBACiAgICAgICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInIiKQogICAgICAgICByID0gZmNudGwuaW9jdGwodHR5LCB0ZXJtaW9zLlRJT0NHUEdSUCwgIiAgICAiKQogICAgICAgICBycGdycCA9IHN0cnVjdC51bnBhY2soImkiLCByKVswXQotICAgICAgICBzZWxmLmFzc2VydF8ocnBncnAgaW4gaWRzLCAiJXMgbm90IGluICVzIiAlIChycGdycCwgaWRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihycGdycCwgaWRzKQorCisgICAgZGVmIF9jaGVja19pb2N0bF9tdXRhdGVfbGVuKHNlbGYsIG5ieXRlcz1Ob25lKToKKyAgICAgICAgYnVmID0gYXJyYXkuYXJyYXkoJ2knKQorICAgICAgICBpbnRzaXplID0gYnVmLml0ZW1zaXplCisgICAgICAgIGlkcyA9IChvcy5nZXRwZ3JwKCksIG9zLmdldHNpZCgwKSkKKyAgICAgICAgIyBBIGZpbGwgdmFsdWUgdW5saWtlbHkgdG8gYmUgaW4gYGlkc2AKKyAgICAgICAgZmlsbCA9IC0xMjM0NQorICAgICAgICBpZiBuYnl0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEV4dGVuZCB0aGUgYnVmZmVyIHNvIHRoYXQgaXQgaXMgZXhhY3RseSBgbmJ5dGVzYCBieXRlcyBsb25nCisgICAgICAgICAgICBidWYuZXh0ZW5kKFtmaWxsXSAqIChuYnl0ZXMgLy8gaW50c2l6ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpICogaW50c2l6ZSwgbmJ5dGVzKSAgICMgc2FuaXR5IGNoZWNrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWYuYXBwZW5kKGZpbGwpCisgICAgICAgIHdpdGggb3BlbigiL2Rldi90dHkiLCAiciIpIGFzIHR0eToKKyAgICAgICAgICAgIHIgPSBmY250bC5pb2N0bCh0dHksIHRlcm1pb3MuVElPQ0dQR1JQLCBidWYsIDEpCisgICAgICAgIHJwZ3JwID0gYnVmWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihycGdycCwgaWRzKQogCiAgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlKHNlbGYpOgotICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgYnVmID0gYXJyYXkuYXJyYXkoJ2knLCBbMF0pCi0gICAgICAgIGlkcyA9IChvcy5nZXRwZ3JwKCksIG9zLmdldHNpZCgwKSkKLSAgICAgICAgdHR5ID0gb3BlbigiL2Rldi90dHkiLCAiciIpCi0gICAgICAgIHIgPSBmY250bC5pb2N0bCh0dHksIHRlcm1pb3MuVElPQ0dQR1JQLCBidWYsIDEpCi0gICAgICAgIHJwZ3JwID0gYnVmWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhycGdycCBpbiBpZHMsICIlcyBub3QgaW4gJXMiICUgKHJwZ3JwLCBpZHMpKQorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKCkKKworICAgIGRlZiB0ZXN0X2lvY3RsX211dGF0ZV8xMDI0KHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NzU4OiBhIG11dGFibGUgYnVmZmVyIG9mIGV4YWN0bHkgMTAyNCBieXRlcyB3b3VsZG4ndCBiZQorICAgICAgICAjIGNvcGllZCBiYWNrIGFmdGVyIHRoZSBzeXN0ZW0gY2FsbC4KKyAgICAgICAgc2VsZi5fY2hlY2tfaW9jdGxfbXV0YXRlX2xlbigxMDI0KQorCisgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlXzIwNDgoc2VsZik6CisgICAgICAgICMgVGVzdCB3aXRoIGEgbGFyZ2VyIGJ1ZmZlciwganVzdCBmb3IgdGhlIHJlY29yZC4KKyAgICAgICAgc2VsZi5fY2hlY2tfaW9jdGxfbXV0YXRlX2xlbigyMDQ4KQogCiAgICAgZGVmIHRlc3RfaW9jdGxfc2lnbmVkX3Vuc2lnbmVkX2NvZGVfcGFyYW0oc2VsZik6CiAgICAgICAgIGlmIG5vdCBwdHk6Ci0gICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCgncHR5IG1vZHVsZSByZXF1aXJlZCcpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncHR5IG1vZHVsZSByZXF1aXJlZCcpCiAgICAgICAgIG1mZCwgc2ZkID0gcHR5Lm9wZW5wdHkoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiB0ZXJtaW9zLlRJT0NTV0lOU1ogPCAwOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CmluZGV4IDYxMzIwNDEuLjY0OTg0Y2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKQEAgLTIsNyArMiw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHVubGluaywgaGF2ZV91bmljb2RlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tfcHkza193YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncywgY3B5dGhvbl9vbmx5CiAKICMgVGVzdCByZXN1bHQgb2YgdHJpcGxlIGxvb3AgKHRvbyBiaWcgdG8gaW5saW5lKQogVFJJUExFVFMgPSBbKDAsIDAsIDApLCAoMCwgMCwgMSksICgwLCAwLCAyKSwKQEAgLTc2LDcgKzc2LDcgQEAKICAgICAgICAgc2VxID0gcmFuZ2UoMTApCiAgICAgICAgIGl0ID0gaXRlcihzZXEpCiAgICAgICAgIGl0MiA9IGl0ZXIoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpdCBpcyBpdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpdCBpcyBpdDIpCiAKICAgICAjIFRlc3QgdGhhdCBmb3IgbG9vcHMgb3ZlciBpdGVyYXRvcnMgd29yawogICAgIGRlZiB0ZXN0X2l0ZXJfZm9yX2xvb3Aoc2VsZik6CkBAIC0xMjEsNiArMTIxLDEzIEBACiAgICAgZGVmIHRlc3Rfc2VxX2NsYXNzX2l0ZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfaXRlcmF0b3IoaXRlcihTZXF1ZW5jZUNsYXNzKDEwKSksIHJhbmdlKDEwKSkKIAorICAgICMgVGVzdCBhIG5ld19zdHlsZSBjbGFzcyB3aXRoIF9faXRlcl9fIGJ1dCBubyBuZXh0KCkgbWV0aG9kCisgICAgZGVmIHRlc3RfbmV3X3N0eWxlX2l0ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEl0ZXJDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXRlciwgSXRlckNsYXNzKCkpCisKICAgICAjIFRlc3QgdHdvLWFyZ3VtZW50IGl0ZXIoKSB3aXRoIGNhbGxhYmxlIGluc3RhbmNlCiAgICAgZGVmIHRlc3RfaXRlcl9jYWxsYWJsZShzZWxmKToKICAgICAgICAgY2xhc3MgQzoKQEAgLTQwMSw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KV0KIAogICAgICAgICAjIERlcHJlY2F0ZWQgbWFwKE5vbmUsIC4uLikKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIFNlcXVlbmNlQ2xhc3MoNSkpLCByYW5nZSg1KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIGQpLCBkLmtleXMoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIGQsCkBAIC01MDQsNyArNTExLDcgQEAKIAogICAgICMgVGVzdCByZWR1Y2VzKCkncyB1c2Ugb2YgaXRlcmF0b3JzLgogICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfYnVpbHRpbl9yZWR1Y2Uoc2VsZik6Ci0gICAgICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzZWxmLl90ZXN0X2J1aWx0aW5fcmVkdWNlKCkKIAogICAgIGRlZiBfdGVzdF9idWlsdGluX3JlZHVjZShzZWxmKToKQEAgLTU2NywyMyArNTc0LDIzIEBACiAgICAgZGVmIHRlc3RfaW5fYW5kX25vdF9pbihzZWxmKToKICAgICAgICAgZm9yIHNjNSBpbiBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDUpLCBTZXF1ZW5jZUNsYXNzKDUpOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGkgaW4gc2M1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgc2M1KQogICAgICAgICAgICAgZm9yIGkgaW4gImFiYyIsIC0xLCA1LCA0Mi40MiwgKDMsIDQpLCBbXSwgezE6IDF9LCAzLTEyaiwgc2M1OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpIG5vdCBpbiBzYzUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihpLCBzYzUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDMgaW4gMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAzIG5vdCBpbiBtYXApCiAKICAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDMsIDFqOiAyan0KICAgICAgICAgZm9yIGsgaW4gZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhrIGluIGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oayBub3QgaW4gZC5pdGVydmFsdWVzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGQuaXRlcnZhbHVlcygpKQogICAgICAgICBmb3IgdiBpbiBkLnZhbHVlcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaW4gZC5pdGVydmFsdWVzKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odiBub3QgaW4gZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgZC5pdGVydmFsdWVzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHYsIGQpCiAgICAgICAgIGZvciBrLCB2IGluIGQuaXRlcml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oKGssIHYpIGluIGQuaXRlcml0ZW1zKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oKHYsIGspIG5vdCBpbiBkLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoaywgdiksIGQuaXRlcml0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCh2LCBrKSwgZC5pdGVyaXRlbXMoKSkKIAogICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKICAgICAgICAgdHJ5OgpAQCAtNTk0LDkgKzYwMSw5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBjaHVuayBpbiAiYWJjIjoKICAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oY2h1bmsgbm90IGluIGYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjaHVuaywgZikKICAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oKGNodW5rICsgIlxuIikgaW4gZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKChjaHVuayArICJcbiIpLCBmKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICB0cnk6CkBAIC03ODYsOCArNzkzLDkgQEAKICAgICAgICAgKGEsIGIpLCAoYywpID0gSXRlcmF0aW5nU2VxdWVuY2VDbGFzcygyKSwgezQyOiAyNH0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgYiwgYyksICgwLCAxLCA0MikpCiAKLSAgICAgICAgIyBUZXN0IHJlZmVyZW5jZSBjb3VudCBiZWhhdmlvcgogCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3JlZl9jb3VudGluZ19iZWhhdmlvcihzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgY291bnQgPSAwCiAgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgpAQCAtODg1LDYgKzg5MywyMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHppcChyYW5nZSg1KSwgcmFuZ2UoNSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQogCisgICAgZGVmIHRlc3RfMzcyMChzZWxmKToKKyAgICAgICAgIyBBdm9pZCBhIGNyYXNoLCB3aGVuIGFuIGl0ZXJhdG9yIGRlbGV0ZXMgaXRzIG5leHQoKSBtZXRob2QuCisgICAgICAgIGNsYXNzIEJhZEl0ZXJhdG9yKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBCYWRJdGVyYXRvci5uZXh0CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBCYWRJdGVyYXRvcigpIDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKaW5kZXggZGU3MWZkYS4uZTQxNjc1NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKQEAgLTIsNiArMiw4IEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogZnJvbSBpdGVydG9vbHMgaW1wb3J0ICoKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCByYW5kb20KQEAgLTEwOSw2ICsxMTEsMTQgQEAKICAgICAgICAgICAgICAgICBpZiBzb3J0ZWQoaW5kaWNlcykgPT0gbGlzdChpbmRpY2VzKToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQogCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnMzKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIGZyb20gY3dyKCknCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBmb3IgaW5kaWNlcyBpbiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChyYW5nZShuKSwgcik6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNldChpbmRpY2VzKSkgPT0gcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCiAgICAgICAgIGZvciBuIGluIHJhbmdlKDcpOgogICAgICAgICAgICAgdmFsdWVzID0gWzUqeC0xMiBmb3IgeCBpbiByYW5nZShuKV0KICAgICAgICAgICAgIGZvciByIGluIHJhbmdlKG4rMik6CkBAIC0xMjAsMTYgKzEzMCw4NyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgcikgICAgICAgICAgICAgICAgICAgICAgICAgIyByLWxlbmd0aCBjb21iaW5hdGlvbnMKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KGMpKSwgcikgICAgICAgICAgICAgICAgICAgICMgbm8gZHVwbGljYXRlIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwgc29ydGVkKGMpKSAgICAgICAgICAgICAgICAjIGtlZXAgb3JpZ2luYWwgb3JkZXJpbmcKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGFsbChlIGluIHZhbHVlcyBmb3IgZSBpbiBjKSkgICAgICAgICAgICMgZWxlbWVudHMgdGFrZW4gZnJvbSBpbnB1dCBpdGVyYWJsZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIGMpKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZSBmb3IgZSBpbiB2YWx1ZXMgaWYgZSBpbiBjXSkgICAgICAjIGNvbWIgaXMgYSBzdWJzZXF1ZW5jZSBvZiB0aGUgaW5wdXQgaXRlcmFibGUKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjb21iaW5hdGlvbnMxKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgZmlyc3QgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczIodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczModmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgogCiAgICAgICAgICMgVGVzdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6ICB0dXBsZSByZS11c2UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgY29tYmluYXRpb25zKCdhYmNkZScsIDMpKSkpLCAxKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KGNvbWJpbmF0aW9ucygnYWJjZGUnLCAzKSkpKSksIDEpCiAKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgY3dyID0gY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjd3IsICdhYmMnKSAgICAgICAjIG1pc3NpbmcgciBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN3ciwgJ2FiYycsIDIsIDEpICMgdG9vIG1hbnkgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3dyLCBOb25lKSAgICAgICAgIyBwb29sIGlzIG5vdCBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjd3IsICdhYmMnLCAtMikgICMgciBpcyBuZWdhdGl2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY3dyKCdBQkMnLCAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnQScsJ0EnKSwgKCdBJywnQicpLCAoJ0EnLCdDJyksICgnQicsJ0InKSwgKCdCJywnQycpLCAoJ0MnLCdDJyldKQorCisgICAgICAgIGRlZiBjd3IxKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgIyBudW1iZXIgaXRlbXMgcmV0dXJuZWQ6ICAobityLTEpISAvIHIhIC8gKG4tMSkhIHdoZW4gbj4wCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBpZiBub3QgbiBhbmQgcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGluZGljZXMgPSBbMF0gKiByCisgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kaWNlc1tpXSAhPSBuIC0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgaW5kaWNlc1tpOl0gPSBbaW5kaWNlc1tpXSArIDFdICogKHIgLSBpKQorICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBkZWYgY3dyMihpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBzaG93biBpbiB0aGUgZG9jcycKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGZvciBpbmRpY2VzIGluIHByb2R1Y3QocmFuZ2UobiksIHJlcGVhdD1yKToKKyAgICAgICAgICAgICAgICBpZiBzb3J0ZWQoaW5kaWNlcykgPT0gbGlzdChpbmRpY2VzKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBudW1jb21icyhuLCByKToKKyAgICAgICAgICAgIGlmIG5vdCBuOgorICAgICAgICAgICAgICAgIHJldHVybiAwIGlmIHIgZWxzZSAxCisgICAgICAgICAgICByZXR1cm4gZmFjdChuK3ItMSkgLy8gZmFjdChyKSAvLyBmYWN0KG4tMSkKKworICAgICAgICBmb3IgbiBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIHZhbHVlcyA9IFs1KngtMTIgZm9yIHggaW4gcmFuZ2UobildCisgICAgICAgICAgICBmb3IgciBpbiByYW5nZShuKzIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxpc3QoY3dyKHZhbHVlcywgcikpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCBudW1jb21icyhuLCByKSkgICAgICAgICAgICMgcmlnaHQgbnVtYmVyIG9mIGNvbWJzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbGVuKHNldChyZXN1bHQpKSkgICAgICAgICAjIG5vIHJlcGVhdHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc29ydGVkKHJlc3VsdCkpICAgICAgICAgICAgICAgICMgbGV4aWNvZ3JhcGhpYyBvcmRlcgorCisgICAgICAgICAgICAgICAgcmVndWxhcl9jb21icyA9IGxpc3QoY29tYmluYXRpb25zKHZhbHVlcywgcikpICAgICAgICAgICAjIGNvbXBhcmUgdG8gY29tYnMgd2l0aG91dCByZXBsYWNlbWVudAorICAgICAgICAgICAgICAgIGlmIG4gPT0gMCBvciByIDw9IDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCByZWd1bGFyX2NvbWJzKSAgICAgICAgICAgICMgY2FzZXMgdGhhdCBzaG91bGQgYmUgaWRlbnRpY2FsCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldChyZXN1bHQpID49IHNldChyZWd1bGFyX2NvbWJzKSkgICAgICMgcmVzdCBzaG91bGQgYmUgc3VwZXJzZXRzIG9mIHJlZ3VsYXIgY29tYnMKKworICAgICAgICAgICAgICAgIGZvciBjIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIHIpICAgICAgICAgICAgICAgICAgICAgICAgICMgci1sZW5ndGggY29tYmluYXRpb25zCisgICAgICAgICAgICAgICAgICAgIG5vcnVucyA9IFtrIGZvciBrLHYgaW4gZ3JvdXBieShjKV0gICAgICAgICAgICAgICAgICAjIGNvbWJvIHdpdGhvdXQgY29uc2VjdXRpdmUgcmVwZWF0cworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihub3J1bnMpLCBsZW4oc2V0KG5vcnVucykpKSAgICAgIyBubyByZXBlYXRzIG90aGVyIHRoYW4gY29uc2VjdXRpdmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLCBzb3J0ZWQoYykpICAgICAgICAgICAgICAgICMga2VlcCBvcmlnaW5hbCBvcmRlcmluZworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIGMpKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ydW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlIGZvciBlIGluIHZhbHVlcyBpZiBlIGluIGNdKSAgICAgIyBjb21iIGlzIGEgc3Vic2VxdWVuY2Ugb2YgdGhlIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY3dyMSh2YWx1ZXMsIHIpKSkgICAgICAgICAjIG1hdGNoZXMgZmlyc3QgcHVyZSBweXRob24gdmVyc2lvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGN3cjIodmFsdWVzLCByKSkpICAgICAgICAgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisKKyAgICAgICAgIyBUZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbDogIHR1cGxlIHJlLXVzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBjd3IoJ2FiY2RlJywgMykpKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QoY3dyKCdhYmNkZScsIDMpKSkpKSwgMSkKKwogICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwZXJtdXRhdGlvbnMpICAgICAgICAgICAgICAjIHRvbyBmZXcgYXJndW1lbnRzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGVybXV0YXRpb25zLCAnYWJjJywgMiwgMSkgIyB0b28gbWFueSBhcmd1bWVudHMKQEAgLTE4Myw3ICsyNjQsNyBAQAogICAgICAgICAgICAgICAgIGZvciBwIGluIHJlc3VsdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocCksIHIpICAgICAgICAgICAgICAgICAgICAgICAgICMgci1sZW5ndGggcGVybXV0YXRpb25zCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChwKSksIHIpICAgICAgICAgICAgICAgICAgICAjIG5vIGR1cGxpY2F0ZSBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIHApKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gcCkpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnMxKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgZmlyc3QgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KHBlcm11dGF0aW9uczIodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICAgICAgICAgIGlmIHIgPT0gbjoKQEAgLTE5NCwxMyArMjc1LDYyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSkpKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMykpKSkpLCAxKQogCisgICAgZGVmIHRlc3RfY29tYmluYXRvcmljcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBwcm9kdWN0KCksIHBlcm11dGF0aW9ucygpLAorICAgICAgICAjIGNvbWJpbmF0aW9ucygpIGFuZCBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgpLgorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDYpOgorICAgICAgICAgICAgcyA9ICdBQkNERUZHJ1s6bl0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKDgpOgorICAgICAgICAgICAgICAgIHByb2QgPSBsaXN0KHByb2R1Y3QocywgcmVwZWF0PXIpKQorICAgICAgICAgICAgICAgIGN3ciA9IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQocywgcikpCisgICAgICAgICAgICAgICAgcGVybSA9IGxpc3QocGVybXV0YXRpb25zKHMsIHIpKQorICAgICAgICAgICAgICAgIGNvbWIgPSBsaXN0KGNvbWJpbmF0aW9ucyhzLCByKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgc2l6ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHByb2QpLCBuKipyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN3ciksIChmYWN0KG4rci0xKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi0xKSkgaWYgbiBlbHNlIChub3QgcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGVybSksIDAgaWYgcj5uIGVsc2UgZmFjdChuKSAvLyBmYWN0KG4tcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29tYiksIDAgaWYgcj5uIGVsc2UgZmFjdChuKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi1yKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgbGV4aWNvZ3JhcGhpYyBvcmRlciB3aXRob3V0IHJlcGVhdGVkIHR1cGxlcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZCwgc29ydGVkKHNldChwcm9kKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjd3IsIHNvcnRlZChzZXQoY3dyKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZXJtLCBzb3J0ZWQoc2V0KHBlcm0pKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIHNvcnRlZChzZXQoY29tYikpKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpbnRlcnJlbGF0aW9uc2hpcHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN3ciwgW3QgZm9yIHQgaW4gcHJvZCBpZiBzb3J0ZWQodCk9PWxpc3QodCldKSAjIGN3cjogcHJvZHMgd2hpY2ggYXJlIHNvcnRlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVybSwgW3QgZm9yIHQgaW4gcHJvZCBpZiBsZW4oc2V0KHQpKT09cl0pICAgICMgcGVybTogcHJvZHMgd2l0aCBubyBkdXBzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBbdCBmb3IgdCBpbiBwZXJtIGlmIHNvcnRlZCh0KT09bGlzdCh0KV0pICMgY29tYjogcGVybXMgdGhhdCBhcmUgc29ydGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBbdCBmb3IgdCBpbiBjd3IgaWYgbGVuKHNldCh0KSk9PXJdKSAgICAgICMgY29tYjogY3dycyB3aXRob3V0IGR1cHMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIGZpbHRlcihzZXQoY3dyKS5fX2NvbnRhaW5zX18sIHBlcm0pKSAgICAgIyBjb21iOiBwZXJtIHRoYXQgaXMgYSBjd3IKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIGZpbHRlcihzZXQocGVybSkuX19jb250YWluc19fLCBjd3IpKSAgICAgIyBjb21iOiBjd3IgdGhhdCBpcyBhIHBlcm0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWIsIHNvcnRlZChzZXQoY3dyKSAmIHNldChwZXJtKSkpICAgICAgICAgICAgIyBjb21iOiBib3RoIGEgY3dyIGFuZCBhIHBlcm0KKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoZGF0YT0nQUJDREVGJywgc2VsZWN0b3JzPVsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFswLDAsMCwwLDAsMF0pKSwgbGlzdCgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzEsMSwxLDEsMSwxXSkpLCBsaXN0KCdBQkNERUYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDFdKSksIGxpc3QoJ0FDJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDJywgWzAsMSwxLDEsMSwxXSkpLCBsaXN0KCdCQycpKQorICAgICAgICBuID0gMTAwMDAKKyAgICAgICAgZGF0YSA9IGNoYWluLmZyb21faXRlcmFibGUocmVwZWF0KHJhbmdlKDYpLCBuKSkKKyAgICAgICAgc2VsZWN0b3JzID0gY2hhaW4uZnJvbV9pdGVyYWJsZShyZXBlYXQoKDAsIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycykpLCBbMSwzLDVdICogbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgTm9uZSwgcmFuZ2UoNikpICAgICAgIyAxc3QgYXJnIG5vdCBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCByYW5nZSg2KSwgTm9uZSkgICAgICAjIDJuZCBhcmcgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpKSAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpLCBOb25lKSAgICAgICMgdG9vIG1hbnkgYXJncworCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KCkpLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KDMpKSwgWygnYScsIDMpLCAoJ2InLCA0KSwgKCdjJywgNSldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgemlwKCdhYmMnLGNvdW50KDMpKSksIFsoJ2EnLCAzKSwgKCdiJywgNCldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgemlwKCdhYmMnLGNvdW50KC0xKSkpLCBbKCdhJywgLTEpLCAoJ2InLCAwKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyLCB6aXAoJ2FiYycsY291bnQoLTMpKSksIFsoJ2EnLCAtMyksICgnYicsIC0yKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnQsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnQsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnQsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShjb3VudChtYXhzaXplLTUpLCAxMCkpLCByYW5nZShtYXhzaXplLTUsIG1heHNpemUrNSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY291bnQoLW1heHNpemUtNSksIDEwKSksIHJhbmdlKC1tYXhzaXplLTUsIC1tYXhzaXplKzUpKQpAQCAtMjExLDYgKzM0MSw3IEBACiAgICAgICAgIGMgPSBjb3VudCgtOSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoLTkpJykKICAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjI1KSksICdjb3VudCgxMC4yNSknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dCgpLCAtOCkKICAgICAgICAgZm9yIGkgaW4gKC1zeXMubWF4aW50LTUsIC1zeXMubWF4aW50KzUgLC0xMCwgLTEsIDAsIDEwLCBzeXMubWF4aW50LTUsIHN5cy5tYXhpbnQrNSk6CiAgICAgICAgICAgICAjIFRlc3QgcmVwciAoaWdub3JpbmcgdGhlIEwgaW4gbG9uZ3MpCkBAIC0yMjUsNiArMzU2LDQ4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoY29weS5kZWVwY29weShjKSksIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYykpKSwgdmFsdWUpCiAKKyAgICBkZWYgdGVzdF9jb3VudF93aXRoX3N0cmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwzKSksIFsoJ2EnLCAyKSwgKCdiJywgNSksICgnYycsIDgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoc3RhcnQ9MixzdGVwPTMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMiksICgnYicsIDUpLCAoJ2MnLCA4KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KHN0ZXA9LTEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMCksICgnYicsIC0xKSwgKCdjJywgLTIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwwKSksIFsoJ2EnLCAyKSwgKCdiJywgMiksICgnYycsIDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwxKSksIFsoJ2EnLCAyKSwgKCdiJywgMyksICgnYycsIDQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIwLCBjb3VudChtYXhzaXplLTE1LCAzKSksIHRha2UoMjAsIHJhbmdlKG1heHNpemUtMTUsIG1heHNpemUrMTAwLCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyMCwgY291bnQoLW1heHNpemUtMTUsIDMpKSwgdGFrZSgyMCwgcmFuZ2UoLW1heHNpemUtMTUsLW1heHNpemUrMTAwLCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudCgyLCAzLjI1LTRqKSksIFsyLCA1LjI1LTRqLCA4LjUtOGpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMywgY291bnQoRGVjaW1hbCgnMS4xJyksIERlY2ltYWwoJy4xJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbRGVjaW1hbCgnMS4xJyksIERlY2ltYWwoJzEuMicpLCBEZWNpbWFsKCcxLjMnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudChGcmFjdGlvbigyLDMpLCBGcmFjdGlvbigxLDcpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW0ZyYWN0aW9uKDIsMyksIEZyYWN0aW9uKDE3LDIxKSwgRnJhY3Rpb24oMjAsMjEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHRha2UoMywgY291bnQoMTAsIDIuNSkpKSwgcmVwcihbMTAsIDEyLjUsIDE1LjBdKSkKKyAgICAgICAgYyA9IGNvdW50KDMsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KDMsIDUpJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoOCwgNSknKQorICAgICAgICBjID0gY291bnQoLTksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAwKScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAwKScpCisgICAgICAgIGMgPSBjb3VudCgtOSwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAtMyknKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCgtMTIsIC0zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC0xMiwgLTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEuMjUpKSwgJ2NvdW50KDEwLjUsIDEuMjUpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEpKSwgJ2NvdW50KDEwLjUpJykgICAgICAgICAgICMgc3VwcHJlc3Mgc3RlcD0xIHdoZW4gaXQncyBhbiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEuMDApKSwgJ2NvdW50KDEwLjUsIDEuMCknKSAgICMgZG8gc2hvdyBmbG9hdCB2YWx1ZXMgbGlsa2UgMS4wCisgICAgICAgIGZvciBpIGluICgtc3lzLm1heGludC01LCAtc3lzLm1heGludCs1ICwtMTAsIC0xLCAwLCAxMCwgc3lzLm1heGludC01LCBzeXMubWF4aW50KzUpOgorICAgICAgICAgICAgZm9yIGogaW4gICgtc3lzLm1heGludC01LCAtc3lzLm1heGludCs1ICwtMTAsIC0xLCAwLCAxLCAxMCwgc3lzLm1heGludC01LCBzeXMubWF4aW50KzUpOgorICAgICAgICAgICAgICAgICMgVGVzdCByZXByIChpZ25vcmluZyB0aGUgTCBpbiBsb25ncykKKyAgICAgICAgICAgICAgICByMSA9IHJlcHIoY291bnQoaSwgaikpLnJlcGxhY2UoJ0wnLCAnJykKKyAgICAgICAgICAgICAgICBpZiBqID09IDE6CisgICAgICAgICAgICAgICAgICAgIHIyID0gKCdjb3VudCglciknICUgaSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIyID0gKCdjb3VudCglciwgJXIpJyAlIChpLCBqKSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorCiAgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgY3ljbGUoJ2FiYycpKSwgbGlzdCgnYWJjYWJjYWJjYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY3ljbGUoJycpKSwgW10pCkBAIC01MTUsNiArNjg4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChwcm9kdWN0KCdhYmMnLCAnZGVmJykpKSkpLCAxKQogCiAgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KG9iamVjdD0nYScsIHRpbWVzPTMpKSwgWydhJywgJ2EnLCAnYSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCh4cmFuZ2UoMykscmVwZWF0KCdhJykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwgJ2EnKSwgKDEsICdhJyksICgyLCAnYScpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlcGVhdCgnYScsIDMpKSwgWydhJywgJ2EnLCAnYSddKQpAQCAtNjA0LDYgKzc3OCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIDEsICdhJywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChpc2xpY2UoY291bnQoKSwgMSwgMTAsIG1heHNpemUpKSksIDEpCiAKKyAgICAgICAgIyBJc3N1ZSAjMTAzMjM6ICBMZXNzIGlzbGljZSBpbiBhIHByZWRpY3RhYmxlIHN0YXRlCisgICAgICAgIGMgPSBjb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoYywgMSwgMywgNTApKSwgWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYyksIDMpCisKICAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBbMSwgMywgNSwgMjAsIDIsIDQsIDYsIDhdCiAgICAgICAgIHVuZGVydGVuID0gbGFtYmRhIHg6IHg8MTAKQEAgLTcwMSw3ICs4ODAsNyBAQAogICAgICAgICAjIHRlZSBwYXNzLXRocm91Z2ggdG8gY29weWFibGUgaXRlcmF0b3IKICAgICAgICAgYSwgYiA9IHRlZSgnYWJjJykKICAgICAgICAgYywgZCA9IHRlZShhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBjKQogCiAgICAgICAgICMgdGVzdCB0ZWVfbmV3CiAgICAgICAgIHQxLCB0MiA9IHRlZSgnYWJjJykKQEAgLTcwOSw3ICs4ODgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRuZXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdG5ldywgMTApCiAgICAgICAgIHQzID0gdG5ldyh0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxpc3QodDEpID09IGxpc3QodDIpID09IGxpc3QodDMpID09IGxpc3QoJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGlzdCh0MSkgPT0gbGlzdCh0MikgPT0gbGlzdCh0MykgPT0gbGlzdCgnYWJjJykpCiAKICAgICAgICAgIyB0ZXN0IHRoYXQgdGVlIG9iamVjdHMgYXJlIHdlYWsgcmVmZXJlbmNhYmxlCiAgICAgICAgIGEsIGIgPSB0ZWUoeHJhbmdlKDEwKSkKQEAgLTc1NSw2ICs5MzQsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbWJpbmF0aW9ucyhyYW5nZSg0KSwgMykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwxLDIpLCAoMCwxLDMpLCAoMCwyLDMpLCAoMSwyLDMpXSkKIAorICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywnQScpLCAoJ0EnLCdCJyksICgnQScsJ0MnKSwgKCdCJywnQicpLCAoJ0InLCdDJyksICgnQycsJ0MnKV0pCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdKSksIGxpc3QoJ0FDRUYnKSkKKwogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKGNvdW50KDEwKSwgNSkpLCBbMTAsIDExLCAxMiwgMTMsIDE0XSkKIApAQCAtODM1LDYgKzEwMjEsMTkgQEAKICAgICAgICAgYSA9IFtdCiAgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvbWJpbmF0aW9ucyhbMSwyLGEsM10sIDMpLCBhKQogCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChbMSwyLGEsM10sIDMpLCBhKQorCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwwXSksIGEpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIEludCA9IHR5cGUoJ0ludCcsIChpbnQsKSwgZGljdCh4PWEpKQorICAgICAgICBzZWxmLm1ha2VjeWNsZShjb3VudChJbnQoMCksIEludCgxKSksIGEpCisKICAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKICAgICAgICAgYSA9IFtdCiAgICAgICAgIHNlbGYubWFrZWN5Y2xlKGN5Y2xlKFthXSoyKSwgYSkKQEAgLTk4OCw2ICsxMTg3LDE1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGNoYWluKE4ocykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGNoYWluKEUocykpKQogCisgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBuID0gbGVuKHMpCisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcyhnKHMpLCByZXBlYXQoMSkpKSwgbGlzdChnKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIFgocyksIHJlcGVhdCgxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgY29tcHJlc3MoTihzKSwgcmVwZWF0KDEpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBjb21wcmVzcyhFKHMpLCByZXBlYXQoMSkpKQorCiAgICAgZGVmIHRlc3RfcHJvZHVjdChzZWxmKToKICAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJvZHVjdCwgWChzKSkKQEAgLTExNzksNyArMTM4Nyw3IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZHNfaW5fc3ViY2xhc3Moc2VsZik6CiAgICAgICAgICMgY291bnQgaXMgbm90IHN1YmNsYXNzYWJsZS4uLgogICAgICAgICBmb3IgY2xzIGluIChyZXBlYXQsIGl6aXAsIGlmaWx0ZXIsIGlmaWx0ZXJmYWxzZSwgY2hhaW4sIGltYXAsCi0gICAgICAgICAgICAgICAgICAgIHN0YXJtYXAsIGlzbGljZSwgdGFrZXdoaWxlLCBkcm9wd2hpbGUsIGN5Y2xlKToKKyAgICAgICAgICAgICAgICAgICAgc3Rhcm1hcCwgaXNsaWNlLCB0YWtld2hpbGUsIGRyb3B3aGlsZSwgY3ljbGUsIGNvbXByZXNzKToKICAgICAgICAgICAgIGNsYXNzIFN1YmNsYXNzKGNscyk6CiAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld2FyZz1Ob25lLCAqYXJncyk6CiAgICAgICAgICAgICAgICAgICAgIGNscy5fX2luaXRfXyhzZWxmLCAqYXJncykKQEAgLTExODcsNyArMTM5NSw3IEBACiAgICAgICAgICAgICAgICAgU3ViY2xhc3MobmV3YXJnPTEpCiAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CiAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdHlwZSBlcnJvcnMgYmVjYXVzZSBvZiB3cm9uZyBhcmd1bWVudCBjb3VudAotICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKCJkb2VzIG5vdCB0YWtlIGtleXdvcmQgYXJndW1lbnRzIiBpbiBlcnIuYXJnc1swXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJkb2VzIG5vdCB0YWtlIGtleXdvcmQgYXJndW1lbnRzIiwgZXJyLmFyZ3NbMF0pCiAKIAogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IGxpYml0ZXJ0b29scy50ZXgKQEAgLTEzMTQsMjcgKzE1MjIsNiBAQAogLi4uICAgICBzID0gbGlzdChpdGVyYWJsZSkKIC4uLiAgICAgcmV0dXJuIGNoYWluLmZyb21faXRlcmFibGUoY29tYmluYXRpb25zKHMsIHIpIGZvciByIGluIHJhbmdlKGxlbihzKSsxKSkKIAotPj4+IGRlZiBjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpOgotLi4uICAgICAiY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pIC0tPiBBIEMgRSBGIgotLi4uICAgICByZXR1cm4gKGQgZm9yIGQsIHMgaW4gaXppcChkYXRhLCBzZWxlY3RvcnMpIGlmIHMpCi0KLT4+PiBkZWYgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlcmFibGUsIHIpOgotLi4uICAgICAiY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDMpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQyIKLS4uLiAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQotLi4uICAgICBuID0gbGVuKHBvb2wpCi0uLi4gICAgIGlmIG5vdCBuIGFuZCByOgotLi4uICAgICAgICAgcmV0dXJuCi0uLi4gICAgIGluZGljZXMgPSBbMF0gKiByCi0uLi4gICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKLS4uLiAgICAgd2hpbGUgMToKLS4uLiAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKHIpKToKLS4uLiAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldICE9IG4gLSAxOgotLi4uICAgICAgICAgICAgICAgICBicmVhawotLi4uICAgICAgICAgZWxzZToKLS4uLiAgICAgICAgICAgICByZXR1cm4KLS4uLiAgICAgICAgIGluZGljZXNbaTpdID0gW2luZGljZXNbaV0gKyAxXSAqIChyIC0gaSkKLS4uLiAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKLQogPj4+IGRlZiB1bmlxdWVfZXZlcnNlZW4oaXRlcmFibGUsIGtleT1Ob25lKToKIC4uLiAgICAgIkxpc3QgdW5pcXVlIGVsZW1lbnRzLCBwcmVzZXJ2aW5nIG9yZGVyLiBSZW1lbWJlciBhbGwgZWxlbWVudHMgZXZlciBzZWVuLiIKIC4uLiAgICAgIyB1bmlxdWVfZXZlcnNlZW4oJ0FBQUFCQkJDQ0RBQUJCQicpIC0tPiBBIEIgQyBECkBAIC0xNDE4LDMwICsxNjA1LDEwIEBACiA+Pj4gbGlzdChwb3dlcnNldChbMSwyLDNdKSkKIFsoKSwgKDEsKSwgKDIsKSwgKDMsKSwgKDEsIDIpLCAoMSwgMyksICgyLCAzKSwgKDEsIDIsIDMpXQogCi0+Pj4gbGlzdChjb21wcmVzcygnYWJjZGVmJywgWzEsMCwxLDAsMSwxXSkpCi1bJ2EnLCAnYycsICdlJywgJ2YnXQotCi0+Pj4gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnYWJjJywgMikpCi1bKCdhJywgJ2EnKSwgKCdhJywgJ2InKSwgKCdhJywgJ2MnKSwgKCdiJywgJ2InKSwgKCdiJywgJ2MnKSwgKCdjJywgJ2MnKV0KLQotPj4+IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJzAxJywgMykpCi1bKCcwJywgJzAnLCAnMCcpLCAoJzAnLCAnMCcsICcxJyksICgnMCcsICcxJywgJzEnKSwgKCcxJywgJzEnLCAnMScpXQotCi0+Pj4gZGVmIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50MihpdGVyYWJsZSwgcik6Ci0uLi4gICAgICdBbHRlcm5hdGUgdmVyc2lvbiB0aGF0IGZpbHRlcnMgZnJvbSBwcm9kdWN0KCknCi0uLi4gICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKLS4uLiAgICAgbiA9IGxlbihwb29sKQotLi4uICAgICBmb3IgaW5kaWNlcyBpbiBwcm9kdWN0KHJhbmdlKG4pLCByZXBlYXQ9cik6Ci0uLi4gICAgICAgICBpZiBzb3J0ZWQoaW5kaWNlcykgPT0gbGlzdChpbmRpY2VzKToKLS4uLiAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCi0KLT4+PiBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdhYmMnLCAyKSkgPT0gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudDIoJ2FiYycsIDIpKQorPj4+IGFsbChsZW4obGlzdChwb3dlcnNldChyYW5nZShuKSkpKSA9PSAyKipuIGZvciBuIGluIHJhbmdlKDE4KSkKIFRydWUKIAotPj4+IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJzAxJywgMykpID09IGxpc3QoY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQyKCcwMScsIDMpKQotVHJ1ZQotCi0+Pj4gbGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnMjMxMCcsIDYpKSA9PSBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50MignMjMxMCcsIDYpKQorPj4+IGxpc3QocG93ZXJzZXQoJ2FiY2RlJykpID09IHNvcnRlZChzb3J0ZWQoc2V0KHBvd2Vyc2V0KCdhYmNkZScpKSksIGtleT1sZW4pCiBUcnVlCiAKID4+PiBsaXN0KHVuaXF1ZV9ldmVyc2VlbignQUFBQUJCQkNDREFBQkJCJykpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CmluZGV4IGI4ODdkYzAuLmU1ZWVjZmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC0xMCwxNSArMTAsMTUgQEAKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGlmIG5vdCBoYXNhdHRyKHNlbGVjdCwgImtxdWV1ZSIpOgotICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgidGVzdCB3b3JrcyBvbmx5IG9uIEJTRCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInRlc3Qgd29ya3Mgb25seSBvbiBCU0QiKQogCiBjbGFzcyBUZXN0S1F1ZXVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jcmVhdGVfcXVldWUoc2VsZik6CiAgICAgICAgIGtxID0gc2VsZWN0LmtxdWV1ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrcS5maWxlbm8oKSA+IDAsIGtxLmZpbGVubygpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGtxLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxLmZpbGVubygpID4gMCwga3EuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qga3EuY2xvc2VkKQogICAgICAgICBrcS5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrcS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrcS5jbG9zZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxLmZpbGVubykKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9ldmVudChzZWxmKToKQEAgLTM0LDggKzM0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChldiwgb3RoZXIpLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV2IDwgb3RoZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvdGhlciA+PSBldikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2IDwgb3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdGhlciA+PSBldikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGV2LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgZXYsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBldiwgImV2IikKQEAgLTcwLDYgKzcwLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKIAorICAgICAgICBiaWdudW0gPSBzeXMubWF4c2l6ZSAqIDIgKyAxCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChiaWdudW0sIDEsIDIsIDMsIHN5cy5tYXhzaXplLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5maWx0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIHN5cy5tYXhzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKwogICAgIGRlZiB0ZXN0X3F1ZXVlX2V2ZW50KHNlbGYpOgogICAgICAgICBzZXJ2ZXJTb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgc2VydmVyU29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKQEAgLTc5LDcgKzkwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCiAgICAgICAgICAgICBwYXNzICMgRnJlZUJTRCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlCkBAIC0xMTMsNyArMTI0LDcgQEAKICAgICAgICAgZXZlbnRzID0ga3EuY29udHJvbChOb25lLCA0LCAxKQogICAgICAgICBldmVudHMgPSBbKGUuaWRlbnQsIGUuZmlsdGVyLCBlLmZsYWdzKSBmb3IgZSBpbiBldmVudHNdCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzLCBbCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbCiAgICAgICAgICAgICAoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLCBmbGFncyksCiAgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLCBmbGFncyldKQogCkBAIC0xMzIsNyArMTQzLDcgQEAKICAgICAgICAgZXZlbnRzID0gWyhlLmlkZW50LCBlLmZpbHRlciwgZS5mbGFncykgZm9yIGUgaW4gZXZlbnRzXQogICAgICAgICBldmVudHMuc29ydCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzLCBbCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbCiAgICAgICAgICAgICAoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLCBmbGFncyksCiAgICAgICAgICAgICAoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsIGZsYWdzKSwKICAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsIGZsYWdzKSwKQEAgLTE1NSw3ICsxNjYsNyBAQAogICAgICAgICBldmVudHMgPSBrcS5jb250cm9sKFtdLCA0LCAwLjk5KQogICAgICAgICBldmVudHMgPSBbKGUuaWRlbnQsIGUuZmlsdGVyLCBlLmZsYWdzKSBmb3IgZSBpbiBldmVudHNdCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZlbnRzLCBbCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbCiAgICAgICAgICAgICAoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLCBmbGFncyldKQogCiAgICAgICAgIGNsaWVudC5jbG9zZSgpCkBAIC0xNzIsNyArMTgzLDcgQEAKICAgICAgICAgciA9IGtxLmNvbnRyb2woW2V2ZW50MSwgZXZlbnQyXSwgMSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoclswXS5mbGFncyAmIHNlbGVjdC5LUV9FVl9FUlJPUikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYi5yZWN2KHJbMF0uZGF0YSksIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlY3YoclswXS5kYXRhKSwgYidmb28nKQogCiAgICAgICAgIGEuY2xvc2UoKQogICAgICAgICBiLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKaW5kZXggMWRhMGU3ZC4uMTZkYThkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKQEAgLTEsMTIgKzEsMTYgQEAKICIiIlRlc3QgbGFyZ2VmaWxlIHN1cHBvcnQgb24gc3lzdGVtIHdoZXJlIHRoaXMgbWFrZXMgc2Vuc2UuCiAiIiIKIAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCiBpbXBvcnQgb3MKIGltcG9ydCBzdGF0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB2ZXJib3NlLCByZXF1aXJlcywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFNraXBwZWQsIHVubGluaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rCitpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW8KIAogdHJ5OgogICAgIGltcG9ydCBzaWduYWwKQEAgLTE4LDEwICsyMiwxMCBAQAogICAgIHBhc3MKIAogIyBjcmVhdGUgPjJHQiBmaWxlICgyR0IgPSAyMTQ3NDgzNjQ4IGJ5dGVzKQotc2l6ZSA9IDI1MDAwMDAwMDBMCitzaXplID0gMjUwMDAwMDAwMAogCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIExhcmdlRmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhhdCBlYWNoIGZpbGUgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQgZm9yIGEgbGFyZ2UKICAgICAoaS5lLiA+IDJHQiwgZG8gIHdlIGhhdmUgdG8gY2hlY2sgPiA0R0IpIGZpbGVzLgogCkBAIC0zMywyOCArMzcsMjggQEAKIAogICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAnY3JlYXRlIGxhcmdlIGZpbGUgdmlhIHNlZWsgKG1heSBiZSBzcGFyc2UgZmlsZSkgLi4uJwotICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgneicpCisgICAgICAgICAgICBwcmludCgnY3JlYXRlIGxhcmdlIGZpbGUgdmlhIHNlZWsgKG1heSBiZSBzcGFyc2UgZmlsZSkgLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ3onKQogICAgICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgICAgICBmLnNlZWsoc2l6ZSkKLSAgICAgICAgICAgIGYud3JpdGUoJ2EnKQorICAgICAgICAgICAgZi53cml0ZShiJ2EnKQogICAgICAgICAgICAgZi5mbHVzaCgpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICdjaGVjayBmaWxlIHNpemUgd2l0aCBvcy5mc3RhdCcKKyAgICAgICAgICAgICAgICBwcmludCgnY2hlY2sgZmlsZSBzaXplIHdpdGggb3MuZnN0YXQnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5mc3RhdChmLmZpbGVubygpKVtzdGF0LlNUX1NJWkVdLCBzaXplKzEpCiAKICAgICBkZWYgdGVzdF9vc3N0YXQoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAnY2hlY2sgZmlsZSBzaXplIHdpdGggb3Muc3RhdCcKKyAgICAgICAgICAgIHByaW50KCdjaGVjayBmaWxlIHNpemUgd2l0aCBvcy5zdGF0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KFRFU1RGTilbc3RhdC5TVF9TSVpFXSwgc2l6ZSsxKQogCiAgICAgZGVmIHRlc3Rfc2Vla19yZWFkKHNlbGYpOgogICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgJ3BsYXkgYXJvdW5kIHdpdGggc2VlaygpIGFuZCByZWFkKCkgd2l0aCB0aGUgYnVpbHQgbGFyZ2VmaWxlJwotICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQoJ3BsYXkgYXJvdW5kIHdpdGggc2VlaygpIGFuZCByZWFkKCkgd2l0aCB0aGUgYnVpbHQgbGFyZ2VmaWxlJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCAneicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYid6JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEpCiAgICAgICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCkBAIC03NywxNSArODEsMTUgQEAKICAgICAgICAgICAgIGYuc2VlayhzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSkKICAgICAgICAgICAgICMgdGhlICdhJyB0aGF0IHdhcyB3cml0dGVuIGF0IHRoZSBlbmQgb2YgZmlsZSBhYm92ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2EnKQogICAgICAgICAgICAgZi5zZWVrKC1zaXplLTEsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgJ3onKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGIneicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxKQogCiAgICAgZGVmIHRlc3RfbHNlZWsoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAncGxheSBhcm91bmQgd2l0aCBvcy5sc2VlaygpIHdpdGggdGhlIGJ1aWx0IGxhcmdlZmlsZScKLSAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHByaW50KCdwbGF5IGFyb3VuZCB3aXRoIG9zLmxzZWVrKCkgd2l0aCB0aGUgYnVpbHQgbGFyZ2VmaWxlJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAwLCAwKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgNDIsIDApLCA0MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgNDIsIDEpLCA4NCkKQEAgLTk1LDE2ICs5OSwxNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAtc2l6ZS0xLCAyKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgc2l6ZSwgMCksIHNpemUpCiAgICAgICAgICAgICAjIHRoZSAnYScgdGhhdCB3YXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIGZpbGUgYWJvdmUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCAnYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYidhJykKIAogICAgIGRlZiB0ZXN0X3RydW5jYXRlKHNlbGYpOgogICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQgJ3RyeSB0cnVuY2F0ZScKLSAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3IrYicpIGFzIGY6CisgICAgICAgICAgICBwcmludCgndHJ5IHRydW5jYXRlJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncitiJykgYXMgZjoKICAgICAgICAgICAgICMgdGhpcyBpcyBhbHJlYWR5IGRlY2lkZWQgYmVmb3JlIHN0YXJ0IHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUKICAgICAgICAgICAgICMgYnV0IHdlIGRvIGl0IGFueXdheSBmb3IgZXh0cmEgcHJvdGVjdGlvbgogICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZiwgJ3RydW5jYXRlJyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQsICJvcGVuKCkudHJ1bmNhdGUoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcGVuKCkudHJ1bmNhdGUoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKICAgICAgICAgICAgIGYuc2VlaygwLCAyKQogICAgICAgICAgICAgIyBlbHNlIHdlJ3ZlIGxvc3QgdHJhY2sgb2YgdGhlIHRydWUgc2l6ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSsxKQpAQCAtMTIwLDE3ICsxMjQsMjkgQEAKICAgICAgICAgICAgIG5ld3NpemUgLT0gMQogICAgICAgICAgICAgZi5zZWVrKDQyKQogICAgICAgICAgICAgZi50cnVuY2F0ZShuZXdzaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNDIpICAgICAgICMgZWxzZSBwb2ludGVyIG1vdmVkCisgICAgICAgICAgICBpZiBzZWxmLm5ld19pbzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA0MikKICAgICAgICAgICAgIGYuc2VlaygwLCAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbmV3c2l6ZSkgICMgZWxzZSB3YXNuJ3QgdHJ1bmNhdGVkCi0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIG5ld3NpemUpCiAgICAgICAgICAgICAjIFhYWCB0cnVuY2F0ZShsYXJnZXIgdGhhbiB0cnVlIHNpemUpIGlzIGlsbC1kZWZpbmVkCiAgICAgICAgICAgICAjIGFjcm9zcyBwbGF0Zm9ybTsgY3V0IGl0IHdhYWFhYXkgYmFjawogICAgICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgICAgICBmLnRydW5jYXRlKDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKSAgICAgICAjIGVsc2UgcG9pbnRlciBtb3ZlZAorICAgICAgICAgICAgaWYgc2VsZi5uZXdfaW86CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkgICAgICAgIyBlbHNlIHBvaW50ZXIgbW92ZWQKKyAgICAgICAgICAgIGYuc2VlaygwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZi5yZWFkKCkpLCAxKSAgIyBlbHNlIHdhc24ndCB0cnVuY2F0ZWQKIAorICAgIGRlZiB0ZXN0X3NlZWthYmxlKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1MDE2OyBzZWVrYWJsZSgpIGNhbiByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbgorICAgICAgICAjIGlzIG5lZ2F0aXZlIHdoZW4gdHJ1bmNhdGVkIHRvIGFuIGludC4KKyAgICAgICAgaWYgbm90IHNlbGYubmV3X2lvOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYnVpbHRpbiBmaWxlIGRvZXNuJ3QgaGF2ZSBzZWVrYWJsZSgpIikKKyAgICAgICAgZm9yIHBvcyBpbiAoMioqMzEtMSwgMioqMzEsIDIqKjMxKzEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuc2Vla2FibGUoKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBPbiBXaW5kb3dzIGFuZCBNYWMgT1NYIHRoaXMgdGVzdCBjb21zdW1lcyBsYXJnZSByZXNvdXJjZXM7IEl0CkBAIC0xNDQsMzQgKzE2MCw0MSBAQAogICAgICAgICAjIE9ubHkgcnVuIGlmIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbGFyZ2UgZmlsZXMuCiAgICAgICAgICMgKFNraXAgdGhpcyB0ZXN0IG9uIFdpbmRvd3MsIHNpbmNlIHdlIG5vdyBhbHdheXMgc3VwcG9ydAogICAgICAgICAjIGxhcmdlIGZpbGVzLikKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicsIGJ1ZmZlcmluZz0wKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIDIqKjMxID09IDIxNDc0ODM2NDgKLSAgICAgICAgICAgIGYuc2VlaygyMTQ3NDgzNjQ5TCkKKyAgICAgICAgICAgIGYuc2VlaygyMTQ3NDgzNjQ5KQogICAgICAgICAgICAgIyBTZWVraW5nIGlzIG5vdCBlbm91Z2ggb2YgYSB0ZXN0OiB5b3UgbXVzdCB3cml0ZSBhbmQKICAgICAgICAgICAgICMgZmx1c2gsIHRvbyEKLSAgICAgICAgICAgIGYud3JpdGUoIngiKQorICAgICAgICAgICAgZi53cml0ZShiJ3gnKQogICAgICAgICAgICAgZi5mbHVzaCgpCiAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHVubGluayhURVNURk4pCi0gICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCwgImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsYXJnZWZpbGUgc3VwcG9ydCIKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgbGFyZ2VmaWxlIHN1cHBvcnQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2VlaycpKQotICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfb3NzdGF0JykpCi0gICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF9zZWVrX3JlYWQnKSkKLSAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X2xzZWVrJykpCi0gICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgotICAgICAgICBpZiBoYXNhdHRyKGYsICd0cnVuY2F0ZScpOgotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q2FzZSgndGVzdF90cnVuY2F0ZScpKQotICAgIHVubGluayhURVNURk4pCisgICAgZm9yIF9vcGVuLCBwcmVmaXggaW4gWyhpby5vcGVuLCAnQycpLCAocHlpby5vcGVuLCAnUHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4sICdCdWlsdGluJyldOgorICAgICAgICBjbGFzcyBUZXN0Q2FzZShMYXJnZUZpbGVUZXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdENhc2Uub3BlbiA9IHN0YXRpY21ldGhvZChfb3BlbikKKyAgICAgICAgVGVzdENhc2UubmV3X2lvID0gX29wZW4gaXMgbm90IG9wZW4KKyAgICAgICAgVGVzdENhc2UuX19uYW1lX18gPSBwcmVmaXggKyBMYXJnZUZpbGVUZXN0Ll9fbmFtZV9fCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2VlaycpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X29zc3RhdCcpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3NlZWtfcmVhZCcpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X2xzZWVrJykpCisgICAgICAgIHdpdGggX29wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAndHJ1bmNhdGUnKToKKyAgICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3RydW5jYXRlJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2Vla2FibGUnKSkKKyAgICAgICAgdW5saW5rKFRFU1RGTikKICAgICB0cnk6CiAgICAgICAgIHJ1bl91bml0dGVzdChzdWl0ZSkKICAgICBmaW5hbGx5OgogICAgICAgICB1bmxpbmsoVEVTVEZOKQogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weSBiL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weQppbmRleCBlMzMyMDYyLi4xMDlhMjZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpYjJ0bzMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5CkBAIC0xLDEzICsxLDE1IEBACiAjIFNraXBwaW5nIHRlc3RfcGFyc2VyIGFuZCB0ZXN0X2FsbF9maXhlcnMKICMgYmVjYXVzZSBvZiBydW5uaW5nCi1mcm9tIGxpYjJ0bzMudGVzdHMgaW1wb3J0IHRlc3RfZml4ZXJzLCB0ZXN0X3B5dHJlZSwgdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yCitmcm9tIGxpYjJ0bzMudGVzdHMgaW1wb3J0ICh0ZXN0X2ZpeGVycywgdGVzdF9weXRyZWUsIHRlc3RfdXRpbCwgdGVzdF9yZWZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFyc2VyLCB0ZXN0X21haW4gYXMgdGVzdF9tYWluXykKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGRlZiBzdWl0ZSgpOgogICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICBmb3IgbSBpbiAodGVzdF9maXhlcnMsdGVzdF9weXRyZWUsdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yKToKKyAgICBmb3IgbSBpbiAodGVzdF9maXhlcnMsIHRlc3RfcHl0cmVlLHRlc3RfdXRpbCwgdGVzdF9yZWZhY3RvciwgdGVzdF9wYXJzZXIsCisgICAgICAgICAgICAgIHRlc3RfbWFpbl8pOgogICAgICAgICB0ZXN0cy5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSkKICAgICByZXR1cm4gdGVzdHMKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkgYi9MaWIvdGVzdC90ZXN0X2xpbmVjYWNoZS5weQppbmRleCA5NDVkNzY4Li40MDdiZWJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpbmVjYWNoZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xpbmVjYWNoZS5weQpAQCAtMTIsNyArMTIsNyBAQAogVEVTVFMgPSAnY2prZW5jb2RpbmdzX3Rlc3QgaW5zcGVjdF9mb2RkZXIgaW5zcGVjdF9mb2RkZXIyIG1hcHBpbmdfdGVzdHMnCiBURVNUUyA9IFRFU1RTLnNwbGl0KCkKIFRFU1RfUEFUSCA9IG9zLnBhdGguZGlybmFtZShzdXBwb3J0Ll9fZmlsZV9fKQotTU9EVUxFUyA9ICJsaW5lY2FjaGUgdW5pdHRlc3QiLnNwbGl0KCkKK01PRFVMRVMgPSAibGluZWNhY2hlIGFiYyIuc3BsaXQoKQogTU9EVUxFX1BBVEggPSBvcy5wYXRoLmRpcm5hbWUoRklMRU5BTUUpCiAKIFNPVVJDRV8xID0gJycnCkBAIC00Miw0MCArNDIsMzggQEAKICAgICAgICAgZ2V0bGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lCiAKICAgICAgICAgIyBCYWQgdmFsdWVzIGZvciBsaW5lIG51bWJlciBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRsaW5lKEZJTEVOQU1FLCAyKioxNSksIEVNUFRZKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRsaW5lKEZJTEVOQU1FLCAtMSksIEVNUFRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoRklMRU5BTUUsIDIqKjE1KSwgRU1QVFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0bGluZShGSUxFTkFNRSwgLTEpLCBFTVBUWSkKIAogICAgICAgICAjIEZsb2F0IHZhbHVlcyBjdXJyZW50bHkgcmFpc2UgVHlwZUVycm9yLCBzaG91bGQgaXQ/CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0bGluZSwgRklMRU5BTUUsIDEuMSkKIAogICAgICAgICAjIEJhZCBmaWxlbmFtZXMgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2V0bGluZShFTVBUWSwgMSksIEVNUFRZKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRsaW5lKElOVkFMSURfTkFNRSwgMSksIEVNUFRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoRU1QVFksIDEpLCBFTVBUWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRsaW5lKElOVkFMSURfTkFNRSwgMSksIEVNUFRZKQogCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBsaW5lcyBjb3JyZXNwb25kIHRvIHRob3NlIGZyb20gZmlsZSBpdGVyYXRpb24KICAgICAgICAgZm9yIGVudHJ5IGluIFRFU1RTOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVTVF9QQVRILCBlbnRyeSkgKyAnLnB5JwogICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShvcGVuKGZpbGVuYW1lKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoZmlsZW5hbWUsIGluZGV4ICsgMSkpCiAKICAgICAgICAgIyBDaGVjayBtb2R1bGUgbG9hZGluZwogICAgICAgICBmb3IgZW50cnkgaW4gTU9EVUxFUzoKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKE1PRFVMRV9QQVRILCBlbnRyeSkgKyAnLnB5JwogICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShvcGVuKGZpbGVuYW1lKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoZmlsZW5hbWUsIGluZGV4ICsgMSkpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IGJvZ3VzIGRhdGEgaXNuJ3QgcmV0dXJuZWQgKGlzc3VlICMxMzA5NTY3KQogICAgICAgICBlbXB0eSA9IGxpbmVjYWNoZS5nZXRsaW5lcygnYS9iL2MvX19pbml0X18ucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlbXB0eSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksIFtdKQogCiAgICAgZGVmIHRlc3Rfbm9fZW5kaW5nX25ld2xpbmUoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgInciKSBhcyBmcDoKLSAgICAgICAgICAgICAgICBmcC53cml0ZShTT1VSQ0VfMykKLSAgICAgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJcbiIsICJkZWYgZigpOlxuIiwgIiAgICByZXR1cm4gM1xuIl0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoU09VUkNFXzMpCisgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIlxuIiwgImRlZiBmKCk6XG4iLCAiICAgIHJldHVybiAzXG4iXSkKIAogICAgIGRlZiB0ZXN0X2NsZWFyY2FjaGUoc2VsZik6CiAgICAgICAgIGNhY2hlZCA9IFtdCkBAIC04Niw1MSArODQsNDUgQEAKIAogICAgICAgICAjIEFyZSBhbGwgZmlsZXMgY2FjaGVkPwogICAgICAgICBjYWNoZWRfZW1wdHkgPSBbZm4gZm9yIGZuIGluIGNhY2hlZCBpZiBmbiBub3QgaW4gbGluZWNhY2hlLmNhY2hlXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjYWNoZWRfZW1wdHksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlZF9lbXB0eSwgW10pCiAKICAgICAgICAgIyBDYW4gd2UgY2xlYXIgdGhlIGNhY2hlPwogICAgICAgICBsaW5lY2FjaGUuY2xlYXJjYWNoZSgpCiAgICAgICAgIGNhY2hlZF9lbXB0eSA9IFtmbiBmb3IgZm4gaW4gY2FjaGVkIGlmIGZuIGluIGxpbmVjYWNoZS5jYWNoZV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY2FjaGVkX2VtcHR5LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZWRfZW1wdHksIFtdKQogCiAgICAgZGVmIHRlc3RfY2hlY2tjYWNoZShzZWxmKToKICAgICAgICAgZ2V0bGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgQ3JlYXRlIGEgc291cmNlIGZpbGUgYW5kIGNhY2hlIGl0cyBjb250ZW50cwotICAgICAgICAgICAgc291cmNlX25hbWUgPSBzdXBwb3J0LlRFU1RGTiArICcucHknCi0gICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUsICd3JykgYXMgc291cmNlOgotICAgICAgICAgICAgICAgIHNvdXJjZS53cml0ZShTT1VSQ0VfMSkKLSAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQotICAgICAgICAgICAgICAgIGdldGxpbmUoc291cmNlX25hbWUsIDEpCisgICAgICAgICMgQ3JlYXRlIGEgc291cmNlIGZpbGUgYW5kIGNhY2hlIGl0cyBjb250ZW50cworICAgICAgICBzb3VyY2VfbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzb3VyY2VfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lLCAndycpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZS53cml0ZShTT1VSQ0VfMSkKKyAgICAgICAgZ2V0bGluZShzb3VyY2VfbmFtZSwgMSkKIAotICAgICAgICAgICAgICAgICMgS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBjb250ZW50cwotICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0ID0gW10KLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZV9uYW1lKQotICAgICAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCi0gICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKKyAgICAgICAgIyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGNvbnRlbnRzCisgICAgICAgIHNvdXJjZV9saXN0ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0LmFwcGVuZChsaW5lKQogCi0gICAgICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2VfbmFtZSwgJ3cnKQotICAgICAgICAgICAgICAgIHNvdXJjZS53cml0ZShTT1VSQ0VfMikKLSAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUsICd3JykgYXMgc291cmNlOgorICAgICAgICAgICAgc291cmNlLndyaXRlKFNPVVJDRV8yKQogCi0gICAgICAgICAgICAgICAgIyBUcnkgdG8gdXBkYXRlIGEgYm9ndXMgY2FjaGUgZW50cnkKLSAgICAgICAgICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZSgnZHVtbXknKQorICAgICAgICAjIFRyeSB0byB1cGRhdGUgYSBib2d1cyBjYWNoZSBlbnRyeQorICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZSgnZHVtbXknKQogCi0gICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjYWNoZSBtYXRjaGVzIHRoZSBvbGQgY29udGVudHMKLSAgICAgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZV9saXN0KToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjYWNoZSBtYXRjaGVzIHRoZSBvbGQgY29udGVudHMKKyAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShzb3VyY2VfbGlzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCiAKLSAgICAgICAgICAgICAgICAjIFVwZGF0ZSB0aGUgY2FjaGUgYW5kIGNoZWNrIHdoZXRoZXIgaXQgbWF0Y2hlcyB0aGUgbmV3IHNvdXJjZSBmaWxlCi0gICAgICAgICAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoc291cmNlX25hbWUpCi0gICAgICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0LmFwcGVuZChsaW5lKQotCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzdXBwb3J0LnVubGluayhzb3VyY2VfbmFtZSkKKyAgICAgICAgIyBVcGRhdGUgdGhlIGNhY2hlIGFuZCBjaGVjayB3aGV0aGVyIGl0IG1hdGNoZXMgdGhlIG5ldyBzb3VyY2UgZmlsZQorICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShzb3VyY2VfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0LmFwcGVuZChsaW5lKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTGluZUNhY2hlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkgYi9MaWIvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkKaW5kZXggZTQwNmJlNi4uZmVmNDZiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saW51eGF1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weQpAQCAtMSw3ICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ2F1ZGlvJykKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgc3lzCkBAIC02MSwzNiArNjEsMzYgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycygtMSwgc2l6ZSwgbmNoYW5uZWxzLCBmbXQpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuYXJnc1swXSwgImV4cGVjdGVkIHJhdGUgPj0gMCwgbm90IC0xIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJleHBlY3RlZCByYXRlID49IDAsIG5vdCAtMSIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgLTIsIG5jaGFubmVscywgZm10KQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmFyZ3NbMF0sICJleHBlY3RlZCBzYW1wbGUgc2l6ZSA+PSAwLCBub3QgLTIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImV4cGVjdGVkIHNhbXBsZSBzaXplID49IDAsIG5vdCAtMiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZGV2LnNldHBhcmFtZXRlcnMocmF0ZSwgc2l6ZSwgMywgZm10KQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXJyLmFyZ3NbMF0sICJuY2hhbm5lbHMgbXVzdCBiZSAxIG9yIDIsIG5vdCAzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJuY2hhbm5lbHMgbXVzdCBiZSAxIG9yIDIsIG5vdCAzIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCBzaXplLCBuY2hhbm5lbHMsIDE3NykKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5hcmdzWzBdLCAidW5rbm93biBhdWRpbyBlbmNvZGluZzogMTc3IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJ1bmtub3duIGF1ZGlvIGVuY29kaW5nOiAxNzciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIHNpemUsIG5jaGFubmVscywgbGludXhhdWRpb2Rldi5BRk1UX1UxNl9MRSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVyci5hcmdzWzBdLCAiZm9yIGxpbmVhciB1bnNpZ25lZCAxNi1iaXQgbGl0dGxlLWVuZGlhbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXVkaW8sIGV4cGVjdGVkIHNhbXBsZSBzaXplIDE2LCBub3QgOCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzWzBdLCAiZm9yIGxpbmVhciB1bnNpZ25lZCAxNi1iaXQgbGl0dGxlLWVuZGlhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdWRpbywgZXhwZWN0ZWQgc2FtcGxlIHNpemUgMTYsIG5vdCA4IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCAxNiwgbmNoYW5uZWxzLCBmbXQpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnIuYXJnc1swXSwgImZvciBsaW5lYXIgdW5zaWduZWQgOC1iaXQgYXVkaW8sIGV4cGVjdGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGUgc2l6ZSA4LCBub3QgMTYiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgImZvciBsaW5lYXIgdW5zaWduZWQgOC1iaXQgYXVkaW8sIGV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZSBzaXplIDgsIG5vdCAxNiIpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CiAgICAgICAgIGRzcCA9IGxpbnV4YXVkaW9kZXYub3BlbigndycpCiAgICAgZXhjZXB0IGxpbnV4YXVkaW9kZXYuZXJyb3IsIG1zZzoKICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULCBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKG1zZykKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKICAgICAgICAgcmFpc2UKICAgICBkc3AuY2xvc2UoKQogICAgIHJ1bl91bml0dGVzdChMaW51eEF1ZGlvRGV2VGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xpc3QucHkgYi9MaWIvdGVzdC90ZXN0X2xpc3QucHkKaW5kZXggMTY3MjkzYS4uNmUwODBkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGlzdC5weQpAQCAtOSw3ICs5LDcgQEAKICAgICAgICAgbDBfMyA9IFswLCAxLCAyLCAzXQogICAgICAgICBsMF8zX2JpcyA9IGxpc3QobDBfMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMF8zLCBsMF8zX2JpcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGwwXzMgaXMgbm90IGwwXzNfYmlzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobDBfMyBpcyBub3QgbDBfM19iaXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoKSksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKDAsIDEsIDIsIDMpKSwgWzAsIDEsIDIsIDNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoJycpLCBbXSkKQEAgLTM5LDExICszOSwxMSBAQAogCiAgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CiAgICAgICAgIHN1cGVyKExpc3RUZXN0LCBzZWxmKS50ZXN0X3RydXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKFs0Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShbNDJdKQogCiAgICAgZGVmIHRlc3RfaWRlbnRpdHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhbXSBpcyBub3QgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShbXSBpcyBub3QgW10pCiAKICAgICBkZWYgdGVzdF9sZW4oc2VsZik6CiAgICAgICAgIHN1cGVyKExpc3RUZXN0LCBzZWxmKS50ZXN0X2xlbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvY2FsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CmluZGV4IDNmNjExYmUuLjhiYjk5Y2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCB2ZXJib3NlLCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCB2ZXJib3NlCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKQEAgLTE2LDcgKzE2LDcgQEAKICAgICAgICAgICAgICMgVGhlIGxvY2FsZSB0ZXN0IHdvcmsgZmluZSBvbiBPU1ggMTAuNiwgSSAocm9uYWxkb3Vzc29yZW4pCiAgICAgICAgICAgICAjIGhhdmVuJ3QgaGFkIHRpbWUgeWV0IHRvIHZlcmlmeSBpZiB0ZXN0cyB3b3JrIG9uIE9TWCAxMC41CiAgICAgICAgICAgICAjICgxMC40IGlzIGtub3duIHRvIGJlIGJhZCkKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJMb2NhbGUgc3VwcG9ydCBvbiBNYWNPU1ggaXMgbWluaW1hbCIpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTG9jYWxlIHN1cHBvcnQgb24gTWFjT1NYIGlzIG1pbmltYWwiKQogICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKICAgICAgICAgdGxvY3MgPSAoIkVuIiwgIkVuZ2xpc2giKQogICAgIGVsc2U6CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBicmVhawogICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKAorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKICAgICAgICAgICAgICJUZXN0IGxvY2FsZSBub3Qgc3VwcG9ydGVkICh0cmllZCAlcykiICUgKCcsICcuam9pbih0bG9jcykpKQogICAgIGVuVVNfbG9jYWxlID0gdGxvYwogICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX05VTUVSSUMsIG9sZGxvY2FsZSkKQEAgLTIyNyw2ICsyMjcsMzggQEAKICAgICAgICAgICAgICAgICAoc2VsZi5zZXAsIHNlbGYuc2VwKSkKIAogCitjbGFzcyBUZXN0Rm9ybWF0UGF0dGVybkFyZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGhhbmRsaW5nIG9mIHBhdHRlcm4gYXJndW1lbnQgb2YgZm9ybWF0CisKKyAgICBkZWYgdGVzdF9vbmx5T25lUGF0dGVybihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNTIyOiBhY2NlcHQgZXhhY3RseSBvbmUgJSBwYXR0ZXJuLCBhbmQgbm8gZXh0cmEgY2hhcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxuIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxyIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxyXG4iLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiAlZiIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiJWZnIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlXmciLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmJSUiLCAnZm9vJykKKworCitjbGFzcyBUZXN0TG9jYWxlRm9ybWF0U3RyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJHZW5lcmFsIHRlc3RzIG9uIGxvY2FsZS5mb3JtYXRfc3RyaW5nIiIiCisKKyAgICBkZWYgdGVzdF9wZXJjZW50X2VzY2FwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJWYlJScsIDEuMCksICclZiUlJyAlIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJWQgJWYlJWQnLCAoMSwgMS4wKSksCisgICAgICAgICAgICAnJWQgJWYlJWQnICUgKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdF9zdHJpbmcoJyUoZm9vKXMgJSVkJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzICUlZCcgJSB7J2Zvbyc6ICdiYXInfSkpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclKGZvbylzIGJpbmcuJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzIGJpbmcuJyAlIHsnZm9vJzogJ2Jhcid9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJShmb28pcycsIHsnZm9vJzogJ2Jhcid9KSwKKyAgICAgICAgICAgICgnJShmb28pcycgJSB7J2Zvbyc6ICdiYXInfSkpCisKKworCiBjbGFzcyBUZXN0TnVtYmVyRm9ybWF0dGluZyhCYXNlTG9jYWxpemVkVGVzdCwgRW5VU051bWJlckZvcm1hdHRpbmcpOgogICAgICMgVGVzdCBudW1iZXIgZm9ybWF0dGluZyB3aXRoIGEgcmVhbCBFbmdsaXNoIGxvY2FsZS4KIApAQCAtMzUzLDE4ICszODUsMzEgQEAKICAgICAgICAgICAgICMgdGVzdCBjcmFzaGVyIGZyb20gYnVnICMzMzAzCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvY2FsZS5zdHJjb2xsLCB1ImEiLCBOb25lKQogCisgICAgZGVmIHRlc3Rfc2V0bG9jYWxlX2NhdGVnb3J5KHNlbGYpOgorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DT0xMQVRFKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19NT05FVEFSWSkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQykKKworICAgICAgICAjIGNyYXNoZXIgZnJvbSBidWcgIzc0MTkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobG9jYWxlLkVycm9yLCBsb2NhbGUuc2V0bG9jYWxlLCAxMjM0NSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdHMgPSBbCiAgICAgICAgIFRlc3RNaXNjZWxsYW5lb3VzLAorICAgICAgICBUZXN0Rm9ybWF0UGF0dGVybkFyZywKKyAgICAgICAgVGVzdExvY2FsZUZvcm1hdFN0cmluZywKICAgICAgICAgVGVzdEVuVVNOdW1iZXJGb3JtYXR0aW5nLAogICAgICAgICBUZXN0Q051bWJlckZvcm1hdHRpbmcsCiAgICAgICAgIFRlc3RGckZSTnVtYmVyRm9ybWF0dGluZywKICAgICBdCi0gICAgIyBUZXN0U2tpcHBlZCBjYW4ndCBiZSByYWlzZWQgaW5zaWRlIHVuaXR0ZXN0cywgaGFuZGxlIGl0IG1hbnVhbGx5IGluc3RlYWQKKyAgICAjIFNraXBUZXN0IGNhbid0IGJlIHJhaXNlZCBpbnNpZGUgdW5pdHRlc3RzLCBoYW5kbGUgaXQgbWFudWFsbHkgaW5zdGVhZAogICAgIHRyeToKICAgICAgICAgZ2V0X2VuVVNfbG9jYWxlKCkKLSAgICBleGNlcHQgVGVzdFNraXBwZWQgYXMgZToKKyAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QgYXMgZToKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICJTb21lIHRlc3RzIHdpbGwgYmUgZGlzYWJsZWQ6ICVzIiAlIGUKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CmluZGV4IDI3ZWViMjcuLjlmODM3NGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKQEAgLTI2LDI3ICsyNiwyNyBAQAogaW1wb3J0IGxvZ2dpbmcuY29uZmlnCiAKIGltcG9ydCBjb2RlY3MKLWltcG9ydCBjb3B5CiBpbXBvcnQgY1BpY2tsZQogaW1wb3J0IGNTdHJpbmdJTwogaW1wb3J0IGdjCitpbXBvcnQganNvbgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBzb2NrZXQKIGZyb20gU29ja2V0U2VydmVyIGltcG9ydCBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyCi1pbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3dpdGhfbG9jYWxlLCBydW5fdW5pdHRlc3QKIGltcG9ydCB0ZXh0d3JhcAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLWltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB3ZWFrcmVmCi0KK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTcxLDcgKzcxLDcgQEAKIAogICAgICAgICAjIFNldCB0d28gdW51c2VkIGxvZ2dlcnM6IG9uZSBub24tQVNDSUkgYW5kIG9uZSBVbmljb2RlLgogICAgICAgICAjIFRoaXMgaXMgdG8gdGVzdCBjb3JyZWN0IG9wZXJhdGlvbiB3aGVuIHNvcnRpbmcgZXhpc3RpbmcKLSAgICAgICAgIyBsb2dnZXJzIGluIHRoZSBjb25maWd1cmF0aW9uIGNvZGUuIFNlZSBpc3N1ZXMgODIwMSwgOTMxMC4KKyAgICAgICAgIyBsb2dnZXJzIGluIHRoZSBjb25maWd1cmF0aW9uIGNvZGUuIFNlZSBpc3N1ZSA4MjAxLgogICAgICAgICBsb2dnaW5nLmdldExvZ2dlcigiXHhhYlx4ZDdceGJiIikKICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIodSJcdTAxM2ZcdTAwZDZcdTAwNDciKQogCkBAIC05MCw2ICs5MCwxMCBAQAogICAgICAgICBsZXZlbC4iIiIKICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2hkbHIpCisgICAgICAgIHdoaWxlIHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBoID0gc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXQorICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgdHJ5OgpAQCAtMTE2LDEzICsxMjAsMTMgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgIyBTdHJpbmdJTy5TdHJpbmdJTyBsYWNrcyBhIHJlc2V0KCkgbWV0aG9kLgogICAgICAgICAgICAgYWN0dWFsX2xpbmVzID0gc3RyZWFtLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsX2xpbmVzKSwgbGVuKGV4cGVjdGVkX3ZhbHVlcykpCiAgICAgICAgIGZvciBhY3R1YWwsIGV4cGVjdGVkIGluIHppcChhY3R1YWxfbGluZXMsIGV4cGVjdGVkX3ZhbHVlcyk6CiAgICAgICAgICAgICBtYXRjaCA9IHBhdC5zZWFyY2goYWN0dWFsKQogICAgICAgICAgICAgaWYgbm90IG1hdGNoOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTG9nIGxpbmUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGF0dGVybjpcbiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHR1cGxlKG1hdGNoLmdyb3VwcygpKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKG1hdGNoLmdyb3VwcygpKSwgZXhwZWN0ZWQpCiAgICAgICAgIHMgPSBzdHJlYW0ucmVhZCgpCiAgICAgICAgIGlmIHM6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlbWFpbmluZyBvdXRwdXQgYXQgZW5kIG9mIGxvZyBzdHJlYW06XG4iICsgcykKQEAgLTYzNywxNCArNjQxLDggQEAKICAgICAiIiIKIAogICAgIGRlZiBhcHBseV9jb25maWcoc2VsZiwgY29uZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZuID0gdGVtcGZpbGUubWt0ZW1wKCIuaW5pIikKLSAgICAgICAgICAgIGYgPSBvcGVuKGZuLCAidyIpCi0gICAgICAgICAgICBmLndyaXRlKHRleHR3cmFwLmRlZGVudChjb25mKSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhmbikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgZmlsZSA9IGNTdHJpbmdJTy5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoY29uZikpCisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoZmlsZSkKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CiAgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgpAQCAtNjk0LDcgKzY5Miw3IEBACiAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJqdXN0IHRlc3RpbmciKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCiAgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQpAQCAtNzY4LDYgKzc2Niw3IEBACiAgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgU29ja2V0SGFuZGxlclRlc3QoQmFzZVRlc3QpOgogCiAgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciBvYmplY3RzLiIiIgpAQCAtODEyLDcgKzgxMSw3IEBACiAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0Y3AiKQogICAgICAgICBsb2dnZXIuZXJyb3IoInNwYW0iKQogICAgICAgICBsb2dnZXIuZGVidWcoImVnZ3MiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmdldF9vdXRwdXQoKSwgInNwYW1cbmVnZ3NcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfb3V0cHV0KCksICJzcGFtXG5lZ2dzXG4iKQogCiAKIGNsYXNzIE1lbW9yeVRlc3QoQmFzZVRlc3QpOgpAQCAtODMxLDcgKzgzMCw3IEBACiAgICAgICAgICAgICBrZXkgPSBpZChvYmopLCByZXByKG9iaikKICAgICAgICAgICAgIHNlbGYuX3N1cnZpdm9yc1trZXldID0gd2Vha3JlZi5yZWYob2JqKQogCi0gICAgZGVmIF9hc3NlcnRfc3Vydml2YWwoc2VsZik6CisgICAgZGVmIF9hc3NlcnRUcnVlc3Vydml2YWwoc2VsZik6CiAgICAgICAgICIiIkFzc2VydCB0aGF0IGFsbCBvYmplY3RzIHdhdGNoZWQgZm9yIHN1cnZpdmFsIGhhdmUgc3Vydml2ZWQuIiIiCiAgICAgICAgICMgVHJpZ2dlciBjeWNsZSBicmVha2luZy4KICAgICAgICAgZ2MuY29sbGVjdCgpCkBAIC04NTcsNyArODU2LDcgQEAKICAgICAgICAgXSkKICAgICAgICAgZGVsIGZvbwogICAgICAgICAjIGZvbyBoYXMgc3Vydml2ZWQuCi0gICAgICAgIHNlbGYuX2Fzc2VydF9zdXJ2aXZhbCgpCisgICAgICAgIHNlbGYuX2Fzc2VydFRydWVzdXJ2aXZhbCgpCiAgICAgICAgICMgZm9vIGhhcyByZXRhaW5lZCBpdHMgc2V0dGluZ3MuCiAgICAgICAgIGJhciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJmb28iKQogICAgICAgICBiYXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKQEAgLTg4Niw3ICs4ODUsNyBAQAogICAgICAgICAgICAgIyBjaGVjayB3ZSB3cm90ZSBleGFjdGx5IHRob3NlIGJ5dGVzLCBpZ25vcmluZyB0cmFpbGluZyBcbiBldGMKICAgICAgICAgICAgIGYgPSBvcGVuKGZuKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGYucmVhZCgpLnJzdHJpcCgpLCBkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkucnN0cmlwKCksIGRhdGEpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgpAQCAtOTE1LDE1ICs5MTQsODYwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgJ1x4ZTRceGVlIFx4ZjFceGUyXHhlOFx4ZTRceGUwXHhlZFx4ZThceGZmXG4nKQogCiAKK2NsYXNzIFdhcm5pbmdzVGVzdChCYXNlVGVzdCk6CisKKyAgICBkZWYgdGVzdF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgbG9nZ2luZy5jYXB0dXJlV2FybmluZ3MoVHJ1ZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICAgICAgZmlsZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihmaWxlKQorICAgICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJweS53YXJuaW5ncyIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaCkKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJJJ20gd2FybmluZyB5b3UuLi4iKQorICAgICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICAgICAgcyA9IGZpbGUuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmZpbmQoIlVzZXJXYXJuaW5nOiBJJ20gd2FybmluZyB5b3UuLi5cbiIpID4gMCkKKworICAgICAgICAgICAgICAgICNTZWUgaWYgYW4gZXhwbGljaXQgZmlsZSB1c2VzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgIGZpbGUgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nKCJFeHBsaWNpdCIsIFVzZXJXYXJuaW5nLCAiZHVtbXkucHkiLCA0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLCAiRHVtbXkgbGluZSIpCisgICAgICAgICAgICAgICAgcyA9IGZpbGUuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICAgICAgICAgICAgICJkdW1teS5weTo0MjogVXNlcldhcm5pbmc6IEV4cGxpY2l0XG4gIER1bW15IGxpbmVcbiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuY2FwdHVyZVdhcm5pbmdzKEZhbHNlKQorCisKK2RlZiBmb3JtYXRGdW5jKGZvcm1hdCwgZGF0ZWZtdD1Ob25lKToKKyAgICByZXR1cm4gbG9nZ2luZy5Gb3JtYXR0ZXIoZm9ybWF0LCBkYXRlZm10KQorCitkZWYgaGFuZGxlckZ1bmMoKToKKyAgICByZXR1cm4gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKworY2xhc3MgQ3VzdG9tSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorICAgIHBhc3MKKworY2xhc3MgQ29uZmlnRGljdFRlc3QoQmFzZVRlc3QpOgorCisgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKworICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisKKyAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgorICAgIGNvbmZpZzAgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWcxIGFkZHMgYSBsaXR0bGUgdG8gdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCisgICAgY29uZmlnMSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzIgaGFzIGEgc3VidGxlIGNvbmZpZ3VyYXRpb24gZXJyb3IgdGhhdCBzaG91bGQgYmUgcmVwb3J0ZWQKKyAgICBjb25maWcyID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3RkYm91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMSBidXQgd2l0aCBhIG1pc3NwZWx0IGxldmVsIG9uIGEgaGFuZGxlcgorICAgIGNvbmZpZzJhID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOVE9TRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworCisgICAgI0FzIGNvbmZpZzEgYnV0IHdpdGggYSBtaXNzcGVsdCBsZXZlbCBvbiBhIGxvZ2dlcgorICAgIGNvbmZpZzJiID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dSQU5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnMyBoYXMgYSBsZXNzIHN1YnRsZSBjb25maWd1cmF0aW9uIGVycm9yCisgICAgY29uZmlnMyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnbWlzc3BlbGxlZF9uYW1lJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc0IHNwZWNpZmllcyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgY29uZmlnNCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IF9fbmFtZV9fICsgJy5FeGNlcHRpb25Gb3JtYXR0ZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBBcyBjb25maWc0IGJ1dCB1c2luZyBhbiBhY3R1YWwgY2FsbGFibGUgcmF0aGVyIHRoYW4gYSBzdHJpbmcKKyAgICBjb25maWc0YSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IEV4Y2VwdGlvbkZvcm1hdHRlciwKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZm9ybTInIDogeworICAgICAgICAgICAgICAgICcoKScgOiBfX25hbWVfXyArICcuZm9ybWF0RnVuYycsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2Zvcm0zJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogZm9ybWF0RnVuYywKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnaGFuZDInIDogeworICAgICAgICAgICAgICAgICcoKScgOiBoYW5kbGVyRnVuYywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnNSBzcGVjaWZpZXMgYSBjdXN0b20gaGFuZGxlciBjbGFzcyB0byBiZSBsb2FkZWQKKyAgICBjb25maWc1ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiBfX25hbWVfXyArICcuQ3VzdG9tSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzYgc3BlY2lmaWVzIGEgY3VzdG9tIGhhbmRsZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgIyBidXQgaGFzIGJhZCBhcmd1bWVudHMKKyAgICBjb25maWc2ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiBfX25hbWVfXyArICcuQ3VzdG9tSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICAgICAgJzknIDogJ2ludmFsaWQgcGFyYW1ldGVyIG5hbWUnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI2NvbmZpZyA3IGRvZXMgbm90IGRlZmluZSBjb21waWxlci5wYXJzZXIgYnV0IGRlZmluZXMgY29tcGlsZXIubGV4ZXIKKyAgICAjc28gY29tcGlsZXIucGFyc2VyIHNob3VsZCBiZSBkaXNhYmxlZCBhZnRlciBhcHBseWluZyBpdAorICAgIGNvbmZpZzcgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLmxleGVyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc4ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnMnIDogRmFsc2UsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnY29tcGlsZXIubGV4ZXInIDogeworICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgIH0sCisgICAgfQorCisgICAgY29uZmlnOWEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2luY3JlbWVudGFsJyA6IFRydWUsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0lORk8nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5YiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnaW5jcmVtZW50YWwnIDogVHJ1ZSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdJTkZPJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnSU5GTycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgZmlsdGVyIGFkZGVkCisgICAgY29uZmlnMTAgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2ZpbHRlcnMnIDogeworICAgICAgICAgICAgJ2ZpbHQxJyA6IHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiAnY29tcGlsZXIucGFyc2VyJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnZmlsdGVycycgOiBbJ2ZpbHQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnZmlsdGVycycgOiBbJ2ZpbHQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMSBidXQgdXNpbmcgY2ZnOi8vIHJlZmVyZW5jZXMKKyAgICBjb25maWcxMSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzExIGJ1dCBtaXNzaW5nIHRoZSB2ZXJzaW9uIGtleQorICAgIGNvbmZpZzEyID0geworICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzExIGJ1dCB1c2luZyBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uCisgICAgY29uZmlnMTMgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMiwKKyAgICAgICAgJ3RydWVfZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcl9jb25maWdzJzogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZm9ybWF0dGVycycgOiAnY2ZnOi8vdHJ1ZV9mb3JtYXR0ZXJzJywKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiAnY2ZnOi8vaGFuZGxlcl9jb25maWdzW2hhbmQxXScsCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGRlZiBhcHBseV9jb25maWcoc2VsZiwgY29uZik6CisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoY29uZikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKKyAgICAgICAgIyBBIGNvbmZpZyBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhjb25maWcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzJhX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMmEpCisKKyAgICBkZWYgdGVzdF9jb25maWcyYl9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzJiKQorCisgICAgZGVmIHRlc3RfY29uZmlnM19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzMpCisKKyAgICBkZWYgdGVzdF9jb25maWc0X29rKHNlbGYpOgorICAgICAgICAjIEEgY29uZmlnIHNwZWNpZnlpbmcgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNCkKKyAgICAgICAgICAgICNsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnNGFfb2soc2VsZik6CisgICAgICAgICMgQSBjb25maWcgc3BlY2lmeWluZyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc0YSkKKyAgICAgICAgICAgICNsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnNV9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soY29uZmlnPXNlbGYuY29uZmlnNSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzZfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzdfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNykKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgI1NhbWUgYXMgdGVzdF9jb25maWdfN19vayBidXQgZG9uJ3QgZGlzYWJsZSBvbGQgbG9nZ2Vycy4KKyAgICBkZWYgdGVzdF9jb25maWdfOF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc4KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzUnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWdfOV9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICNOb3RoaW5nIHdpbGwgYmUgb3V0cHV0IHNpbmNlIGJvdGggaGFuZGxlciBhbmQgbG9nZ2VyIGFyZSBzZXQgdG8gV0FSTklORworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnOWEpCisgICAgICAgICAgICAjTm90aGluZyB3aWxsIGJlIG91dHB1dCBzaW5jZSBib3RoIGhhbmRsZXIgaXMgc3RpbGwgc2V0IHRvIFdBUk5JTkcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzliKQorICAgICAgICAgICAgI01lc3NhZ2Ugc2hvdWxkIG5vdyBiZSBvdXRwdXQKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfY29uZmlnXzEwX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMTApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXIubGV4ZXInKQorICAgICAgICAgICAgI05vdCBvdXRwdXQsIGJlY2F1c2UgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyLmNvZGVnZW4iKQorICAgICAgICAgICAgI091dHB1dCwgYXMgbm90IGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdXQVJOSU5HJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jb25maWcxMV9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soc2VsZi5jb25maWcxMSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzEyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEyKQorCisgICAgZGVmIHRlc3RfY29uZmlnMTNfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdsaXN0ZW4oKSBuZWVkcyB0aHJlYWRpbmcgdG8gd29yaycpCisgICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0KToKKyAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQorICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LnJlYWR5LndhaXQoKQorICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCisgICAgICAgIHBvcnQgPSB0LnBvcnQKKyAgICAgICAgdC5yZWFkeS5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMi4wKQorICAgICAgICAgICAgc29jay5jb25uZWN0KCgnbG9jYWxob3N0JywgcG9ydCkpCisKKyAgICAgICAgICAgIHNsZW4gPSBzdHJ1Y3QucGFjaygnPkwnLCBsZW4odGV4dCkpCisgICAgICAgICAgICBzID0gc2xlbiArIHRleHQKKyAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKKyAgICAgICAgICAgIGxlZnQgPSBsZW4ocykKKyAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgorICAgICAgICAgICAgICAgIHNlbnQgPSBzb2NrLnNlbmQoc1tzZW50c29mYXI6XSkKKyAgICAgICAgICAgICAgICBzZW50c29mYXIgKz0gc2VudAorICAgICAgICAgICAgICAgIGxlZnQgLT0gc2VudAorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LnJlYWR5LndhaXQoMi4wKQorICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZygpCisgICAgICAgICAgICB0LmpvaW4oMi4wKQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xMF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcihqc29uLmR1bXBzKHNlbGYuY29uZmlnMTApKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyLmxleGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlci5jb2RlZ2VuIikKKyAgICAgICAgICAgICNPdXRwdXQsIGFzIG5vdCBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnV0FSTklORycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRleHR3cmFwLmRlZGVudChDb25maWdGaWxlVGVzdC5jb25maWcxKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworCitjbGFzcyBNYW5hZ2VyVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfbWFuYWdlcl9sb2dnZXJjbGFzcyhzZWxmKToKKyAgICAgICAgbG9nZ2VkID0gW10KKworICAgICAgICBjbGFzcyBNeUxvZ2dlcihsb2dnaW5nLkxvZ2dlcik6CisgICAgICAgICAgICBkZWYgX2xvZyhzZWxmLCBsZXZlbCwgbXNnLCBhcmdzLCBleGNfaW5mbz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgICAgICAgICBsb2dnZWQuYXBwZW5kKG1zZykKKworICAgICAgICBtYW4gPSBsb2dnaW5nLk1hbmFnZXIoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYW4uc2V0TG9nZ2VyQ2xhc3MsIGludCkKKyAgICAgICAgbWFuLnNldExvZ2dlckNsYXNzKE15TG9nZ2VyKQorICAgICAgICBsb2dnZXIgPSBtYW4uZ2V0TG9nZ2VyKCd0ZXN0JykKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3Nob3VsZCBhcHBlYXIgaW4gbG9nZ2VkJykKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdzaG91bGQgbm90IGFwcGVhciBpbiBsb2dnZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2VkLCBbJ3Nob3VsZCBhcHBlYXIgaW4gbG9nZ2VkJ10pCisKKworY2xhc3MgQ2hpbGRMb2dnZXJUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9jaGlsZF9sb2dnZXJzKHNlbGYpOgorICAgICAgICByID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBsMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMnKQorICAgICAgICBsMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZWYuZ2hpJykKKyAgICAgICAgYzEgPSByLmdldENoaWxkKCd4eXonKQorICAgICAgICBjMiA9IHIuZ2V0Q2hpbGQoJ3V2dy54eXonKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKKyAgICAgICAgYzEgPSBsMS5nZXRDaGlsZCgnZGVmJykKKyAgICAgICAgYzIgPSBjMS5nZXRDaGlsZCgnZ2hpJykKKyAgICAgICAgYzMgPSBsMS5nZXRDaGlsZCgnZGVmLmdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBjMykKKworCiAjIFNldCB0aGUgbG9jYWxlIHRvIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgZGVmYXVsdC4gIEkgaGF2ZSBubyBpZGVhCiAjIHdoeSB0aGUgdGVzdCBkb2VzIHRoaXMsIGJ1dCBpbiBhbnkgY2FzZSB3ZSBzYXZlIHRoZSBjdXJyZW50IGxvY2FsZQogIyBmaXJzdCBhbmQgcmVzdG9yZSBpdCBhdCB0aGUgZW5kLgogQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJycpCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEJ1aWx0aW5MZXZlbHNUZXN0LCBCYXNpY0ZpbHRlclRlc3QsCi0gICAgICAgICAgICAgICAgICAgIEN1c3RvbUxldmVsc0FuZEZpbHRlcnNUZXN0LCBNZW1vcnlIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ29uZmlnRmlsZVRlc3QsIFNvY2tldEhhbmRsZXJUZXN0LCBNZW1vcnlUZXN0LAotICAgICAgICAgICAgICAgICAgICBFbmNvZGluZ1Rlc3QpCisgICAgICAgICAgICAgICAgIEN1c3RvbUxldmVsc0FuZEZpbHRlcnNUZXN0LCBNZW1vcnlIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgQ29uZmlnRmlsZVRlc3QsIFNvY2tldEhhbmRsZXJUZXN0LCBNZW1vcnlUZXN0LAorICAgICAgICAgICAgICAgICBFbmNvZGluZ1Rlc3QsIFdhcm5pbmdzVGVzdCwgQ29uZmlnRGljdFRlc3QsIE1hbmFnZXJUZXN0LAorICAgICAgICAgICAgICAgICBDaGlsZExvZ2dlclRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQppbmRleCBhNmVkMWNiLi41OGNmYzNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IHN5cwogCiBpbXBvcnQgcmFuZG9tCitpbXBvcnQgbWF0aAogCiAjIFVzZWQgZm9yIGxhenkgZm9ybWF0dGluZyBvZiBmYWlsdXJlIG1lc3NhZ2VzCiBjbGFzcyBGcm0ob2JqZWN0KToKQEAgLTE0LDcgKzE1LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0ICUgc2VsZi5hcmdzCiAKICMgU0hJRlQgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBsb25naW50cmVwci5oIGZvciBiZXN0IHRlc3RpbmcuCi1TSElGVCA9IDE1CitTSElGVCA9IHN5cy5sb25nX2luZm8uYml0c19wZXJfZGlnaXQKIEJBU0UgPSAyICoqIFNISUZUCiBNQVNLID0gQkFTRSAtIDEKIEtBUkFUU1VCQV9DVVRPRkYgPSA3MCAgICMgZnJvbSBsb25nb2JqZWN0LmMKQEAgLTg3LDcgKzg4LDcgQEAKICAgICAjIFRoZSBzaWduIG9mIHRoZSBudW1iZXIgaXMgYWxzbyByYW5kb20uCiAKICAgICBkZWYgZ2V0cmFuKHNlbGYsIG5kaWdpdHMpOgotICAgICAgICBzZWxmLmFzc2VydF8obmRpZ2l0cyA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZGlnaXRzID4gMCkKICAgICAgICAgbmJpdHNfaGkgPSBuZGlnaXRzICogU0hJRlQKICAgICAgICAgbmJpdHNfbG8gPSBuYml0c19oaSAtIFNISUZUICsgMQogICAgICAgICBhbnN3ZXIgPSAwTApAQCAtOTYsMTMgKzk3LDEzIEBACiAgICAgICAgIHdoaWxlIG5iaXRzIDwgbmJpdHNfbG86CiAgICAgICAgICAgICBiaXRzID0gKHIgPj4gMSkgKyAxCiAgICAgICAgICAgICBiaXRzID0gbWluKGJpdHMsIG5iaXRzX2hpIC0gbmJpdHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMSA8PSBiaXRzIDw9IFNISUZUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEgPD0gYml0cyA8PSBTSElGVCkKICAgICAgICAgICAgIG5iaXRzID0gbmJpdHMgKyBiaXRzCiAgICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgPDwgYml0cwogICAgICAgICAgICAgaWYgciAmIDE6CiAgICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2VyIHwgKCgxIDw8IGJpdHMpIC0gMSkKICAgICAgICAgICAgIHIgPSBpbnQocmFuZG9tLnJhbmRvbSgpICogKFNISUZUICogMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhuYml0c19sbyA8PSBuYml0cyA8PSBuYml0c19oaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5iaXRzX2xvIDw9IG5iaXRzIDw9IG5iaXRzX2hpKQogICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjU6CiAgICAgICAgICAgICBhbnN3ZXIgPSAtYW5zd2VyCiAgICAgICAgIHJldHVybiBhbnN3ZXIKQEAgLTEyOCw5ICsxMjksOSBAQAogICAgICAgICBlcShyLCByMiwgRnJtKCJkaXZtb2QgcmV0dXJucyBkaWZmZXJlbnQgbW9kIHRoYW4gJSUgZm9yICVyIGFuZCAlciIsIHgsIHkpKQogICAgICAgICBlcSh4LCBxKnkgKyByLCBGcm0oInggIT0gcSp5ICsgciBhZnRlciBkaXZtb2Qgb24geD0lciwgeT0lciIsIHgsIHkpKQogICAgICAgICBpZiB5ID4gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwIDw9IHIgPCB5LCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSByIDwgeSwgRnJtKCJiYWQgbW9kIGZyb20gZGl2bW9kIG9uICVyIGFuZCAlciIsIHgsIHkpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHkgPCByIDw9IDAsIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgciA8PSAwLCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCiAKICAgICBkZWYgdGVzdF9kaXZpc2lvbihzZWxmKToKICAgICAgICAgZGlnaXRzID0gcmFuZ2UoMSwgTUFYRElHSVRTKzEpICsgcmFuZ2UoS0FSQVRTVUJBX0NVVE9GRiwKQEAgLTE0Miw2ICsxNDMsMzUgQEAKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5nZXRyYW4obGVueSkgb3IgMUwKICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKHgsIHkpCiAKKyAgICAgICAgIyBzcGVjaWZpYyBudW1iZXJzIGNob3NlbiB0byBleGVyY2lzZSBjb3JuZXIgY2FzZXMgb2YgdGhlCisgICAgICAgICMgY3VycmVudCBsb25nIGRpdmlzaW9uIGltcGxlbWVudGF0aW9uCisKKyAgICAgICAgIyAzMC1iaXQgY2FzZXMgaW52b2x2aW5nIGEgcXVvdGllbnQgZGlnaXQgZXN0aW1hdGUgb2YgQkFTRSsxCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMTIzMTk0ODQxMjI5MDg3OTM5NTk2NjcwMjg4MUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0NzM0MTM2NzEzMTQyODY5OEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oODE1NDI3NzU2NDgxMjc1NDMwMzQyMzEyMDIxNTE1NTg3ODgzTCwKKyAgICAgICAgICAgICAgICAgICAgICAgNzA3MjcwODM2MDY5MDI3NzQ1TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig2Mjc5NzYwNzM2OTcwMTI4MjA4NDk0NDMzNjM1NjM1OTkwNDFMLAorICAgICAgICAgICAgICAgICAgICAgICA2NDM1ODg3OTg0OTYwNTcwMjBMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDExMTUxNDEzNzM2NTM3NTIzMDM3MTA5MzI3NTYzMjU1NzgwNjVMLAorICAgICAgICAgICAgICAgICAgICAgICAxMDM4NTU2MzM1MTcxNDUzOTM3NzI2ODgyNjI3TCkKKyAgICAgICAgIyAzMC1iaXQgY2FzZXMgdGhhdCByZXF1aXJlIHRoZSBwb3N0LXN1YnRyYWN0aW9uIGNvcnJlY3Rpb24gc3RlcAorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDkyMjQ5ODkwNTQwNTQzNjc1MTk0MDk4OTMyMDkzMDM2ODQ5NEwsCisgICAgICAgICAgICAgICAgICAgICAgIDk0OTk4NTg3MDY4Njc4NjEzNTYyNjk0MzM5NkwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNzY4MjM1ODUzMzI4MDkxMTY3MjA0MDA5NjUyMTc0MDMxODQ0TCwKKyAgICAgICAgICAgICAgICAgICAgICAgMTA5MTU1NTU0MTE4MDM3MTU1NDQyNjU0NTI2NkwpCisKKyAgICAgICAgIyAxNS1iaXQgY2FzZXMgaW52b2x2aW5nIGEgcXVvdGllbnQgZGlnaXQgZXN0aW1hdGUgb2YgQkFTRSsxCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oMjAxNzIxODg5NDc0NDNMLCA2MTU2MTEzOTdMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDEwMjA5MDg1MzAyNzAxNTUwMjVMLCA5NTA3OTU3MTBMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDEyODU4OTU2NTcyMzExMjQwOEwsIDczNjM5MzcxOEwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNjA5OTE5NzgwMjg1NzYxNTc1TCwgMTg2MTMyNzQ1NDY3ODRMKQorICAgICAgICAjIDE1LWJpdCBjYXNlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3Qtc3VidHJhY3Rpb24gY29ycmVjdGlvbiBzdGVwCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNzEwMDMxNjgxNTc2Mzg4MDMyTCwgMjY3Njk0MDQzOTEzMDhMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDE5MzM2MjI2MTQyNjgyMjFMLCAzMDIxMjg1MzM0ODgzNkwpCisKKworCiAgICAgZGVmIHRlc3Rfa2FyYXRzdWJhKHNlbGYpOgogICAgICAgICBkaWdpdHMgPSByYW5nZSgxLCA1KSArIHJhbmdlKEtBUkFUU1VCQV9DVVRPRkYsIEtBUkFUU1VCQV9DVVRPRkYgKyAxMCkKICAgICAgICAgZGlnaXRzLmV4dGVuZChbS0FSQVRTVUJBX0NVVE9GRiAqIDEwLCBLQVJBVFNVQkFfQ1VUT0ZGICogMTAwXSkKQEAgLTI5MCw2ICszMjAsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoMy41KSwgM0wpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygtMy41KSwgLTNMKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIi0zIiksIC0zTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCIwYjEwIiwgMiksIDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIjBvMTAiLCA4KSwgOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiMHgxMCIsIDE2KSwgMTZMKQogICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKHVuaWNvZGUoIi0zIikpLCAtM0wpCiAgICAgICAgICMgRGlmZmVyZW50IGJhc2U6CkBAIC00OTcsOSArNTMwLDkgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGxvbmcoVHJ1bmNSZXR1cm5zTm9uSW50ZWdyYWwoKSkKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cihlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdHJ1bmNfXyByZXR1cm5lZCBub24tSW50ZWdyYWwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHR5cGUgTm9uSW50ZWdyYWwpIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdHJ1bmNfXyByZXR1cm5lZCBub24tSW50ZWdyYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAodHlwZSBOb25JbnRlZ3JhbCkiKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciB3aXRoICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJhc2UsIHRydW5jX3Jlc3VsdF9iYXNlKSwpKQpAQCAtNTM4LDcgKzU3MSw3IEBACiAgICAgICAgICAgICB5ID0gaW50KHgpCiAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4aW50KSArIDEpIG11c3RuJ3Qgb3ZlcmZsb3ciKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh5LCBsb25nKSwKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIGxvbmcsCiAgICAgICAgICAgICAiaW50KGxvbmcoc3lzLm1heGludCkgKyAxKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBsb25nIikKIAogICAgICAgICB4ID0gaHVnZW5lZ19hc2xvbmcgLSAxCkBAIC01NDYsMTQgKzU3OSwxNCBAQAogICAgICAgICAgICAgeSA9IGludCh4KQogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkgLSAxKSBtdXN0bid0IG92ZXJmbG93IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoeSwgbG9uZyksCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh5LCBsb25nLAogICAgICAgICAgICAgICAgImludChsb25nKC1zeXMubWF4aW50LTEpIC0gMSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgbG9uZyIpCiAKICAgICAgICAgY2xhc3MgbG9uZzIobG9uZyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHggPSBsb25nMigxTDw8MTAwKQogICAgICAgICB5ID0gaW50KHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHkpIGlzIGxvbmcsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHkpIGlzIGxvbmcsCiAgICAgICAgICAgICAib3ZlcmZsb3dpbmcgaW50IGNvbnZlcnNpb24gbXVzdCByZXR1cm4gbG9uZyBub3QgbG9uZyBzdWJ0eXBlIikKIAogICAgICAgICAjIGxvbmcgLT4gUHlfc3NpemVfdCBjb252ZXJzaW9uCkBAIC01NjEsMTggKzU5NCwzMiBAQAogICAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKICAgICAgICAgICAgICAgICByZXR1cm4gaSwgagogCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpWy01TDo3TF0sICgtNSwgNykpCiAgICAgICAgICAgICAjIHVzZSB0aGUgY2xhbXBpbmcgZWZmZWN0IHRvIHRlc3QgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGxvbmdzCiAgICAgICAgICAgICAjIHRoYXQgZml0IGEgUHlfc3NpemVfdAogICAgICAgICAgICAgc2xpY2VtaW4sIHNsaWNlbWF4ID0gWCgpWy0yTCoqMTAwOjJMKioxMDBdCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKVtzbGljZW1pbjpzbGljZW1heF0sIChzbGljZW1pbiwgc2xpY2VtYXgpKQogCisgICAgZGVmIHRlc3RfaXNzdWU5ODY5KHNlbGYpOgorICAgICAgICAjIElzc3VlIDk4Njk6IEludGVycHJldGVyIGNyYXNoIHdoZW4gaW5pdGlhbGl6aW5nIGFuIGluc3RhbmNlCisgICAgICAgICMgb2YgYSBsb25nIHN1YmNsYXNzIGZyb20gYW4gb2JqZWN0IHdob3NlIF9fbG9uZ19fIG1ldGhvZCByZXR1cm5zCisgICAgICAgICMgYSBwbGFpbiBpbnQuCisgICAgICAgIGNsYXNzIEJhZExvbmcob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMAorCisgICAgICAgIGNsYXNzIE15TG9uZyhsb25nKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB4ID0gTXlMb25nKEJhZExvbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMTAwMDAwMCkKKworCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRlc3RzIG9mIGF1dG8gaW50LT5sb25nIGNvbnZlcnNpb24KIAogICAgIGRlZiB0ZXN0X2F1dG9fb3ZlcmZsb3coc2VsZik6Ci0gICAgICAgIGltcG9ydCBtYXRoLCBzeXMKLQogICAgICAgICBzcGVjaWFsID0gWzAsIDEsIDIsIDMsIHN5cy5tYXhpbnQtMSwgc3lzLm1heGludCwgc3lzLm1heGludCsxXQogICAgICAgICBzcXJ0ID0gaW50KG1hdGguc3FydChzeXMubWF4aW50KSkKICAgICAgICAgc3BlY2lhbC5leHRlbmQoW3NxcnQtMSwgc3FydCwgc3FydCsxXSkKQEAgLTYwNiw3ICs2NTMsNyBAQAogICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJyonLCB5KQogCiAgICAgICAgICAgICAgICAgaWYgeToKLSAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAvIGxvbmd5CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSB4IC8geQogICAgICAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcvJywgeSkKQEAgLTYzMyw5ICs2ODAsNjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdyxsb25neCwgbG9uZ3ksIGxvbmcoeikpCiAKLSAgICBkZWYgdGVzdF9mbG9hdF9vdmVyZmxvdyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hdGgKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfZmxvYXRfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBEQkxfTUFYID0gc3lzLmZsb2F0X2luZm8ubWF4CisgICAgICAgIERCTF9NQVhfRVhQID0gc3lzLmZsb2F0X2luZm8ubWF4X2V4cAorICAgICAgICBEQkxfTUFOVF9ESUcgPSBzeXMuZmxvYXRfaW5mby5tYW50X2RpZwogCisgICAgICAgIGV4YWN0X3ZhbHVlcyA9IFswTCwgMUwsIDJMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMtMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1My0yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjUzLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMrMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NC00KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjU0LTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQrNCldCisgICAgICAgIGZvciB4IGluIGV4YWN0X3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCh4KSksIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoLXgpKSwgLXgpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtZXZlbgorICAgICAgICBmb3IgeCwgeSBpbiBbKDEsIDApLCAoMiwgMiksICgzLCA0KSwgKDQsIDQpLCAoNSwgNCksICg2LCA2KSwgKDcsIDgpXToKKyAgICAgICAgICAgIGZvciBwIGluIHhyYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KDJMKipwKigyKio1Myt4KSkpLCAyTCoqcCooMioqNTMreSkpCisKKyAgICAgICAgZm9yIHgsIHkgaW4gWygwLCAwKSwgKDEsIDApLCAoMiwgMCksICgzLCA0KSwgKDQsIDQpLCAoNSwgNCksICg2LCA4KSwKKyAgICAgICAgICAgICAgICAgICAgICg3LCA4KSwgKDgsIDgpLCAoOSwgOCksICgxMCwgOCksICgxMSwgMTIpLCAoMTIsIDEyKSwKKyAgICAgICAgICAgICAgICAgICAgICgxMywgMTIpLCAoMTQsIDE2KSwgKDE1LCAxNildOgorICAgICAgICAgICAgZm9yIHAgaW4geHJhbmdlKDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoMkwqKnAqKDIqKjU0K3gpKSksIDJMKipwKigyKio1NCt5KSkKKworICAgICAgICAjIGJlaGF2aW91ciBuZWFyIGV4dHJlbWVzIG9mIGZsb2F0aW5nLXBvaW50IHJhbmdlCisgICAgICAgIGxvbmdfZGJsX21heCA9IGxvbmcoREJMX01BWCkKKyAgICAgICAgdG9wX3Bvd2VyID0gMioqREJMX01BWF9FWFAKKyAgICAgICAgaGFsZndheSA9IChsb25nX2RibF9tYXggKyB0b3BfcG93ZXIpLy8yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobG9uZ19kYmxfbWF4KSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nX2RibF9tYXgrMSksIERCTF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoaGFsZndheS0xKSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIGhhbGZ3YXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMS1oYWxmd2F5KSwgLURCTF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAtaGFsZndheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIHRvcF9wb3dlci0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAyKnRvcF9wb3dlci0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgMip0b3BfcG93ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIqdG9wX3Bvd2VyKQorCisgICAgICAgIGZvciBwIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgeCA9IGxvbmcoMioqcCAqICgyKio1MyArIDEpICsgMSkKKyAgICAgICAgICAgIHkgPSBsb25nKDIqKnAgKiAoMioqNTMrIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeSkKKworICAgICAgICAgICAgeCA9IGxvbmcoMioqcCAqICgyKio1MyArIDEpKQorICAgICAgICAgICAgeSA9IGxvbmcoMioqcCAqIDIqKjUzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X292ZXJmbG93KHNlbGYpOgogICAgICAgICBmb3IgeCBpbiAtMi4wLCAtMS4wLCAwLjAsIDEuMCwgMi4wOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nKHgpKSwgeCkKIApAQCAtNjY1LDggKzc2OSw2IEBACiAgICAgICAgICAgICAgICAgImZsb2F0KHNodWdlKSBzaG91bGQgbm90IGVxdWFsIGludChzaHVnZSkiKQogCiAgICAgZGVmIHRlc3RfbG9ncyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hdGgKLQogICAgICAgICBMT0cxMEUgPSBtYXRoLmxvZzEwKG1hdGguZSkKIAogICAgICAgICBmb3IgZXhwIGluIHJhbmdlKDEwKSArIFsxMDAsIDEwMDAsIDEwMDAwXToKQEAgLTY4Niw3ICs3ODgsNiBAQAogCiAgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBpbXBvcnQgbWF0aAogCiAgICAgICAgICMgV2UncmUgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIHRoYXQgbWl4aW5nIGZsb2F0cyBhbmQgbG9uZ3MgZG9lcyB0aGUKICAgICAgICAgIyByaWdodCBzdHVmZiwgZXZlbiB3aGVuIGxvbmdzIGFyZSB0b28gbGFyZ2UgdG8gZml0IGluIGEgZmxvYXQuCkBAIC03NzAsNiArODcxLDQyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxvbmcsIGZsb2F0KCctaW5mJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsIGZsb2F0KCduYW4nKSkKIAorICAgIGRlZiB0ZXN0X2JpdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHRpbnkgPSAxZS0xMAorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoLTY1MDAwLCA2NTAwMCk6CisgICAgICAgICAgICB4ID0gbG9uZyh4KQorICAgICAgICAgICAgayA9IHguYml0X2xlbmd0aCgpCisgICAgICAgICAgICAjIENoZWNrIGVxdWl2YWxlbmNlIHdpdGggUHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbGVuKGJpbih4KS5sc3RyaXAoJy0wYicpKSkKKyAgICAgICAgICAgICMgQmVoYXZpb3VyIGFzIHNwZWNpZmllZCBpbiB0aGUgZG9jcworICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiooay0xKSA8PSBhYnMoeCkgPCAyKiprKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIDApCisgICAgICAgICAgICAjIEFsdGVybmF0aXZlIGRlZmluaXRpb246IHguYml0X2xlbmd0aCgpID09IDEgKyBmbG9vcihsb2dfMih4KSkKKyAgICAgICAgICAgIGlmIHggIT0gMDoKKyAgICAgICAgICAgICAgICAjIFdoZW4geCBpcyBhbiBleGFjdCBwb3dlciBvZiAyLCBudW1lcmljIGVycm9ycyBjYW4KKyAgICAgICAgICAgICAgICAjIGNhdXNlIGZsb29yKGxvZyh4KS9sb2coMikpIHRvIGJlIG9uZSB0b28gc21hbGw7IGZvcgorICAgICAgICAgICAgICAgICMgc21hbGwgeCB0aGlzIGNhbiBiZSBmaXhlZCBieSBhZGRpbmcgYSBzbWFsbCBxdWFudGl0eQorICAgICAgICAgICAgICAgICMgdG8gdGhlIHF1b3RpZW50IGJlZm9yZSB0YWtpbmcgdGhlIGZsb29yLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMSArIG1hdGguZmxvb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmxvZyhhYnMoeCkpL21hdGgubG9nKDIpICsgdGlueSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMEwpLmJpdF9sZW5ndGgoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMUwpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTFMKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDJMKS5iaXRfbGVuZ3RoKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0yTCkuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBmb3IgaSBpbiBbMiwgMywgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0LCAyMzRdOgorICAgICAgICAgICAgYSA9IDJMKippCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLTEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEtYSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKzEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEtMSkuYml0X2xlbmd0aCgpLCBpKzEpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9uZ1Rlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmdfZnV0dXJlLnB5CmluZGV4IDI1YmQ3YTcuLjc2YzNiZmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nX2Z1dHVyZS5weQpAQCAtMyw4ICszLDUyIEBACiAjIHRlc3RfbG9uZy5weSBpbnN0ZWFkLiAgSW4gdGhlIG1lYW50aW1lLCBpdCdzIHRvbyBvYnNjdXJlIHRvIHRyeSB0bwogIyB0cmljayBqdXN0IHBhcnQgb2YgdGVzdF9sb25nIGludG8gdXNpbmcgZnV0dXJlIGRpdmlzaW9uLgogCitpbXBvcnQgc3lzCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgbWF0aAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworIyBkZWNvcmF0b3IgZm9yIHNraXBwaW5nIHRlc3RzIG9uIG5vbi1JRUVFIDc1NCBwbGF0Zm9ybXMKK3JlcXVpcmVzX0lFRUVfNzU0ID0gdW5pdHRlc3Quc2tpcFVubGVzcygKKyAgICBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisKK0RCTF9NQVggPSBzeXMuZmxvYXRfaW5mby5tYXgKK0RCTF9NQVhfRVhQID0gc3lzLmZsb2F0X2luZm8ubWF4X2V4cAorREJMX01JTl9FWFAgPSBzeXMuZmxvYXRfaW5mby5taW5fZXhwCitEQkxfTUFOVF9ESUcgPSBzeXMuZmxvYXRfaW5mby5tYW50X2RpZworREJMX01JTl9PVkVSRkxPVyA9IDIqKkRCTF9NQVhfRVhQIC0gMioqKERCTF9NQVhfRVhQIC0gREJMX01BTlRfRElHIC0gMSkKKworIyBwdXJlIFB5dGhvbiB2ZXJzaW9uIG9mIGNvcnJlY3RseS1yb3VuZGVkIHRydWUgZGl2aXNpb24KK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICIiIkNvcnJlY3RseS1yb3VuZGVkIHRydWUgZGl2aXNpb24gZm9yIGludGVnZXJzLiIiIgorICAgIG5lZ2F0aXZlID0gYV5iIDwgMAorICAgIGEsIGIgPSBhYnMoYSksIGFicyhiKQorCisgICAgIyBleGNlcHRpb25zOiAgZGl2aXNpb24gYnkgemVybywgb3ZlcmZsb3cKKyAgICBpZiBub3QgYjoKKyAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoImRpdmlzaW9uIGJ5IHplcm8iKQorICAgIGlmIGEgPj0gREJMX01JTl9PVkVSRkxPVyAqIGI6CisgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoImludC9pbnQgdG9vIGxhcmdlIHRvIHJlcHJlc2VudCBhcyBhIGZsb2F0IikKKworICAgIyBmaW5kIGludGVnZXIgZCBzYXRpc2Z5aW5nIDIqKihkIC0gMSkgPD0gYS9iIDwgMioqZAorICAgIGQgPSBhLmJpdF9sZW5ndGgoKSAtIGIuYml0X2xlbmd0aCgpCisgICAgaWYgZCA+PSAwIGFuZCBhID49IDIqKmQgKiBiIG9yIGQgPCAwIGFuZCBhICogMioqLWQgPj0gYjoKKyAgICAgICAgZCArPSAxCisKKyAgICAjIGNvbXB1dGUgMioqLWV4cCAqIGEgLyBiIGZvciBzdWl0YWJsZSBleHAKKyAgICBleHAgPSBtYXgoZCwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHCisgICAgYSwgYiA9IGEgPDwgbWF4KC1leHAsIDApLCBiIDw8IG1heChleHAsIDApCisgICAgcSwgciA9IGRpdm1vZChhLCBiKQorCisgICAgIyByb3VuZC1oYWxmLXRvLWV2ZW46IGZyYWN0aW9uYWwgcGFydCBpcyByL2IsIHdoaWNoIGlzID4gMC41IGlmZgorICAgICMgMipyID4gYiwgYW5kID09IDAuNSBpZmYgMipyID09IGIuCisgICAgaWYgMipyID4gYiBvciAyKnIgPT0gYiBhbmQgcSAlIDIgPT0gMToKKyAgICAgICAgcSArPSAxCisKKyAgICByZXN1bHQgPSBtYXRoLmxkZXhwKGZsb2F0KHEpLCBleHApCisgICAgcmV0dXJuIC1yZXN1bHQgaWYgbmVnYXRpdmUgZWxzZSByZXN1bHQKIAogY2xhc3MgVHJ1ZURpdmlzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpAQCAtMzAsMjMgKzc0LDE0NCBAQAogICAgICAgICBmb3Igb3ZlcmZsb3cgaW4gWyJmbG9hdChodWdlKSIsICJmbG9hdChtaHVnZSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJodWdlIC8gMSIsICJodWdlIC8gMkwiLCAiaHVnZSAvIC0xIiwgImh1Z2UgLyAtMkwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJtaHVnZSAvIDEwMCIsICJtaHVnZSAvIDEwMEwiXToKLSAgICAgICAgICAgICMgWFhYKGN3aW50ZXIpIHRoaXMgdGVzdCBkb2Vzbid0IHBhc3Mgd2hlbiBjb252ZXJ0ZWQgdG8KLSAgICAgICAgICAgICMgdXNlIGFzc2VydFJhaXNlcy4KLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSWYgdGhlICJldmFsIiBkb2VzIG5vdCBoYXBwZW4gaW4gdGhpcyBtb2R1bGUsCisgICAgICAgICAgICAjIHRydWUgZGl2aXNpb24gaXMgbm90IGVuYWJsZWQKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CiAgICAgICAgICAgICAgICAgZXZhbChvdmVyZmxvdywgbmFtZXNwYWNlKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgT3ZlcmZsb3dFcnJvciBmcm9tICVyIiAlIG92ZXJmbG93KQotICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGZvciB1bmRlcmZsb3cgaW4gWyIxIC8gaHVnZSIsICIyTCAvIGh1Z2UiLCAiLTEgLyBodWdlIiwgIi0yTCAvIGh1Z2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICIxMDAgLyBtaHVnZSIsICIxMDBMIC8gbWh1Z2UiXToKICAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwodW5kZXJmbG93LCBuYW1lc3BhY2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMC4wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdW5kZXJmbG93IHRvIDAgZnJvbSAlciIgJSB1bmRlcmZsb3cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMC4wLCAnZXhwZWN0ZWQgdW5kZXJmbG93IHRvIDAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSB7IXJ9Jy5mb3JtYXQodW5kZXJmbG93KSkKIAotICAgICAgICB3aXRoIF9jaGVja19weTNrX3dhcm5pbmdzKCgnY2xhc3NpYyBsb25nIGRpdmlzaW9uJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6Ci0gICAgICAgICAgICBmb3IgemVybyBpbiBbImh1Z2UgLyAwIiwgImh1Z2UgLyAwTCIsICJtaHVnZSAvIDAiLCAibWh1Z2UgLyAwTCJdOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBldmFsLCB6ZXJvLCBuYW1lc3BhY2UpCisgICAgICAgIGZvciB6ZXJvIGluIFsiaHVnZSAvIDAiLCAiaHVnZSAvIDBMIiwgIm1odWdlIC8gMCIsICJtaHVnZSAvIDBMIl06CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICBldmFsKHplcm8sIG5hbWVzcGFjZSkKKworICAgIGRlZiBjaGVja190cnVlZGl2KHNlbGYsIGEsIGIsIHNraXBfc21hbGw9VHJ1ZSk6CisgICAgICAgICIiIlZlcmlmeSB0aGF0IHRoZSByZXN1bHQgb2YgYS9iIGlzIGNvcnJlY3RseSByb3VuZGVkLCBieQorICAgICAgICBjb21wYXJpbmcgaXQgd2l0aCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGNvcnJlY3RseQorICAgICAgICByb3VuZGVkIGRpdmlzaW9uLiAgYiBzaG91bGQgYmUgbm9uemVyby4iIiIKKworICAgICAgICBhLCBiID0gbG9uZyhhKSwgbG9uZyhiKQorCisgICAgICAgICMgc2tpcCBjaGVjayBmb3Igc21hbGwgYSBhbmQgYjogaW4gdGhpcyBjYXNlLCB0aGUgY3VycmVudAorICAgICAgICAjIGltcGxlbWVudGF0aW9uIGNvbnZlcnRzIHRoZSBhcmd1bWVudHMgdG8gZmxvYXQgZGlyZWN0bHkgYW5kCisgICAgICAgICMgdGhlbiBhcHBsaWVzIGEgZmxvYXQgZGl2aXNpb24uICBUaGlzIGNhbiBnaXZlIGRvdWJseS1yb3VuZGVkCisgICAgICAgICMgcmVzdWx0cyBvbiB4ODctdXNpbmcgbWFjaGluZXMgKHBhcnRpY3VsYXJseSAzMi1iaXQgTGludXgpLgorICAgICAgICBpZiBza2lwX3NtYWxsIGFuZCBtYXgoYWJzKGEpLCBhYnMoYikpIDwgMioqREJMX01BTlRfRElHOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB1c2UgcmVwciBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIC0wLjAgYW5kIDAuMAorICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXByKHRydWVkaXYoYSwgYikpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAnb3ZlcmZsb3cnCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ3plcm9kaXZpc2lvbicKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBnb3QgPSByZXByKGEgLyBiKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIGdvdCA9ICdvdmVyZmxvdycKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgZ290ID0gJ3plcm9kaXZpc2lvbicKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QsICJJbmNvcnJlY3RseSByb3VuZGVkIGRpdmlzaW9uIHt9L3t9OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHt9LCBnb3Qge30iLmZvcm1hdChhLCBiLCBleHBlY3RlZCwgZ290KSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9yb3VuZGVkX3RydWVfZGl2aXNpb24oc2VsZik6CisgICAgICAgICMgbW9yZSBzdHJpbmdlbnQgdGVzdHMgdGhhbiB0aG9zZSBhYm92ZSwgY2hlY2tpbmcgdGhhdCB0aGUKKyAgICAgICAgIyByZXN1bHQgb2YgdHJ1ZSBkaXZpc2lvbiBvZiBpbnRzIGlzIGFsd2F5cyBjb3JyZWN0bHkgcm91bmRlZC4KKyAgICAgICAgIyBUaGlzIHRlc3Qgc2hvdWxkIHByb2JhYmx5IGJlIGNvbnNpZGVyZWQgQ1B5dGhvbi1zcGVjaWZpYy4KKworICAgICAgICAjIEV4ZXJjaXNlIGFsbCB0aGUgY29kZSBwYXRocyBub3QgaW52b2x2aW5nIEdiLXNpemVkIGludHMuCisgICAgICAgICMgLi4uIGRpdmlzaW9ucyBpbnZvbHZpbmcgemVybworICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLTQ1NiwgMCkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDAsIDMpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigwLCAtMykKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDAsIDApCisgICAgICAgICMgLi4uIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBieSBsYXJnZSBtYXJnaW4KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDY3MSAqIDEyMzQ1ICogMioqREJMX01BWF9FWFAsIDEyMzQ1KQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzNDUsIDM0NTY3OCAqIDIqKihEQkxfTUFOVF9ESUcgLSBEQkxfTUlOX0VYUCkpCisgICAgICAgICMgLi4uIGEgbXVjaCBsYXJnZXIgb3Igc21hbGxlciB0aGFuIGIKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMzQ1KjIqKjEwMCwgOTg3NjUpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjM0NSoyKiozMCwgOTg3NjUqNyoqODEpCisgICAgICAgICMgLi4uIGEgLyBiIG5lYXIgYSBib3VuZGFyeTogb25lIG9mIDEsIDIqKkRCTF9NQU5UX0RJRywgMioqREJMX01JTl9FWFAsCisgICAgICAgICMgICAgICAgICAgICAgICAgIDIqKkRCTF9NQVhfRVhQLCAyKiooREJMX01JTl9FWFAtREJMX01BTlRfRElHKQorICAgICAgICBiYXNlcyA9ICgwLCBEQkxfTUFOVF9ESUcsIERCTF9NSU5fRVhQLAorICAgICAgICAgICAgICAgICBEQkxfTUFYX0VYUCwgREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcpCisgICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgorICAgICAgICAgICAgZm9yIGV4cCBpbiByYW5nZShiYXNlIC0gMTUsIGJhc2UgKyAxNSk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDc1MzEyKjIqKm1heChleHAsIDApLCA2OTE4NyoyKiptYXgoLWV4cCwgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDY5MTg3KjIqKm1heChleHAsIDApLCA3NTMxMioyKiptYXgoLWV4cCwgMCkpCisKKyAgICAgICAgIyBvdmVyZmxvdyBjb3JuZXIgY2FzZQorICAgICAgICBmb3IgbSBpbiBbMSwgMiwgNywgMTcsIDEyMzQ1LCA3KioxMDAsCisgICAgICAgICAgICAgICAgICAtMSwgLTIsIC01LCAtMjMsIC02Nzg5MSwgLTQxKio1MF06CisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgtMTAsIDEwKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYobSpEQkxfTUlOX09WRVJGTE9XICsgbiwgbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYobSpEQkxfTUlOX09WRVJGTE9XICsgbiwgLW0pCisKKyAgICAgICAgIyBjaGVjayBkZXRlY3Rpb24gb2YgaW5leGFjdG5lc3MgaW4gc2hpZnRpbmcgc3RhZ2UKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMjUwKToKKyAgICAgICAgICAgICMgKDIqKkRCTF9NQU5UX0RJRysxKS8oMioqREJMX01BTlRfRElHKSBsaWVzIGhhbGZ3YXkKKyAgICAgICAgICAgICMgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZSBmbG9hdHMsIGFuZCB3b3VsZCB1c3VhbGx5IGJlCisgICAgICAgICAgICAjIHJvdW5kZWQgZG93biB1bmRlciByb3VuZC1oYWxmLXRvLWV2ZW4uICBUaGUgdGluaWVzdCBvZgorICAgICAgICAgICAgIyBhZGRpdGlvbnMgdG8gdGhlIG51bWVyYXRvciBzaG91bGQgY2F1c2UgaXQgdG8gYmUgcm91bmRlZAorICAgICAgICAgICAgIyB1cCBpbnN0ZWFkLgorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KCgyKipEQkxfTUFOVF9ESUcgKyAxKSoxMjM0NSoyKioyMDAgKyAyKipuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMioqREJMX01BTlRfRElHKjEyMzQ1KQorCisgICAgICAgICMgMS8yNzMxIGlzIG9uZSBvZiB0aGUgc21hbGxlc3QgZGl2aXNpb24gY2FzZXMgdGhhdCdzIHN1YmplY3QKKyAgICAgICAgIyB0byBkb3VibGUgcm91bmRpbmcgb24gSUVFRSA3NTQgbWFjaGluZXMgd29ya2luZyBpbnRlcm5hbGx5IHdpdGgKKyAgICAgICAgIyA2NC1iaXQgcHJlY2lzaW9uLiAgT24gc3VjaCBtYWNoaW5lcywgdGhlIG5leHQgY2hlY2sgd291bGQgZmFpbCwKKyAgICAgICAgIyB3ZXJlIGl0IG5vdCBleHBsaWNpdGx5IHNraXBwZWQgaW4gY2hlY2tfdHJ1ZWRpdi4KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEsIDI3MzEpCisKKyAgICAgICAgIyBhIHBhcnRpY3VsYXJseSBiYWQgY2FzZSBmb3IgdGhlIG9sZCBhbGdvcml0aG06ICBnaXZlcyBhbgorICAgICAgICAjIGVycm9yIG9mIGNsb3NlIHRvIDMuNSB1bHBzLgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMjk1MTQ3OTMxMzcyNTgyMjczMDIzLCAyOTUxNDc5MzIyNjUxMTYzMDMzNjApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEwKiooaSsxKSwgMTAqKmkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTAqKmksIDEwKiooaSsxKSkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi10by1ldmVuIGJlaGF2aW91ciwgbm9ybWFsIHJlc3VsdAorICAgICAgICBmb3IgbSBpbiBbMSwgMiwgNCwgNywgOCwgMTYsIDE3LCAzMiwgMTIzNDUsIDcqKjEwMCwKKyAgICAgICAgICAgICAgICAgIC0xLCAtMiwgLTUsIC0yMywgLTY3ODkxLCAtNDEqKjUwXToKKyAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKC0xMCwgMTApOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigyKipEQkxfTUFOVF9ESUcqbSArIG4sIG0pCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtdG8tZXZlbiwgc3Vibm9ybWFsIHJlc3VsdAorICAgICAgICBmb3IgbiBpbiByYW5nZSgtMjAsIDIwKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihuLCAyKioxMDc2KQorCisgICAgICAgICMgbGFyZ2Vpc2ggcmFuZG9tIGRpdmlzaW9uczogYS9iIHdoZXJlIHxhfCA8PSB8YnwgPD0KKyAgICAgICAgIyAyKnxhfDsgfGFuc3wgaXMgYmV0d2VlbiAwLjUgYW5kIDEuMCwgc28gZXJyb3Igc2hvdWxkCisgICAgICAgICMgYWx3YXlzIGJlIGJvdW5kZWQgYnkgMioqLTU0IHdpdGggZXF1YWxpdHkgcG9zc2libGUgb25seQorICAgICAgICAjIGlmIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgcT1hbnMqMioqNTMgaXMgemVyby4KKyAgICAgICAgZm9yIE0gaW4gWzEwKioxMCwgMTAqKjEwMCwgMTAqKjEwMDBdOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAgICAgYSA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgTSkKKyAgICAgICAgICAgICAgICBiID0gcmFuZG9tLnJhbmRyYW5nZShhLCAyKmErMSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoYSwgYikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLWEsIGIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KGEsIC1iKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigtYSwgLWIpCisKKyAgICAgICAgIyBhbmQgc29tZSAoZ2VudWluZWx5KSByYW5kb20gdGVzdHMKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwMDApOgorICAgICAgICAgICAgYV9iaXRzID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwKQorICAgICAgICAgICAgYl9iaXRzID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAxMDAwKQorICAgICAgICAgICAgeCA9IHJhbmRvbS5yYW5kcmFuZ2UoMioqYV9iaXRzKQorICAgICAgICAgICAgeSA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMioqYl9iaXRzKQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KHgsIHkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoeCwgLXkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLXgsIHkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLXgsIC15KQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFjb3MucHkgYi9MaWIvdGVzdC90ZXN0X21hY29zLnB5CmluZGV4IGU2NWIxNzQuLjVhZjUxMDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFjb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWNvcy5weQpAQCAtMSwxMyArMSw2OCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgTWFjT1MKLWltcG9ydCBDYXJib24uRmlsZQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIGltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKKworTWFjT1MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnTWFjT1MnKQogCiBURVNURk4yID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICcyJwogCiBjbGFzcyBUZXN0TWFjT1ModW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RHZXRDcmVhdG9yQW5kVHlwZShzZWxmKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCcvRGV2ZWxvcGVyL1Rvb2xzL1NldEZpbGUnKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgICAgICBmcC53cml0ZSgnXG4nKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoCisgICAgICAgICAgICAgICAgICAgIFsnL0RldmVsb3Blci9Ub29scy9TZXRGaWxlJywgJy10JywgJ0FCQ0QnLCAnLWMnLCAnRUZHSCcsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOXSkKKworICAgICAgICAgICAgY3IsIHRwID0gTWFjT1MuR2V0Q3JlYXRvckFuZFR5cGUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsICdBQkNEJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3IsICdFRkdIJykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdFNldENyZWF0b3JBbmRUeXBlKHNlbGYpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9EZXZlbG9wZXIvVG9vbHMvR2V0RmlsZUluZm8nKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgICAgICBmcC53cml0ZSgnXG4nKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICBNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAnQUJDRCcsICdFRkdIJykKKworICAgICAgICAgICAgY3IsIHRwID0gTWFjT1MuR2V0Q3JlYXRvckFuZFR5cGUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3IsICdBQkNEJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsICdFRkdIJykKKworICAgICAgICAgICAgZGF0YSA9IHN1YnByb2Nlc3MuUG9wZW4oWyIvRGV2ZWxvcGVyL1Rvb2xzL0dldEZpbGVJbmZvIiwgdGVzdF9zdXBwb3J0LlRFU1RGTl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKworICAgICAgICAgICAgdHAgPSBOb25lCisgICAgICAgICAgICBjciA9IE5vbmUKKyAgICAgICAgICAgIGZvciAgbG4gaW4gZGF0YS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgndHlwZTonKToKKyAgICAgICAgICAgICAgICAgICAgdHAgPSBsbi5zcGxpdCgpWy0xXVsxOi0xXQorICAgICAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ2NyZWF0b3I6Jyk6CisgICAgICAgICAgICAgICAgICAgIGNyID0gbG4uc3BsaXQoKVstMV1bMTotMV0KKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjciwgJ0FCQ0QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cCwgJ0VGR0gnKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworCiAgICAgZGVmIHRlc3RPcGVuUkYoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCkBAIC0yMiwxNCArNzcsMTQgQEAKICAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAncicpCiAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkYXRhLCAnaGVsbG8gd29ybGRcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICdoZWxsbyB3b3JsZFxuJykKIAogICAgICAgICAgICAgcmZwID0gTWFjT1Mub3BlbnJmKHRlc3Rfc3VwcG9ydC5URVNURk4sICcqcmInKQogICAgICAgICAgICAgZGF0YSA9IHJmcC5yZWFkKDEwMCkKICAgICAgICAgICAgIGRhdGEyID0gcmZwLnJlYWQoMTAwKQogICAgICAgICAgICAgcmZwLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEsICdnb29kYnllIHdvcmxkXG4nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YTIsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnZ29vZGJ5ZSB3b3JsZFxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcnKQogCiAKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFjb3N0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfbWFjb3N0b29scy5weQppbmRleCBhYTY1OTE5Li40ZjE1OTgyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hY29zdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWNvc3Rvb2xzLnB5CkBAIC0xLDEzICsxLDE1IEBACiAjIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgogCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBtYWNvc3Rvb2xzCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCBNYWNPUwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCitNYWNPUyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdNYWNPUycpCisjVGhlIGZvbGxvd2luZyBtb2R1bGVzIHNob3VsZCBleGlzdCBpZiBNYWNPUyBleGlzdHMuCitpbXBvcnQgQ2FyYm9uLkZpbGUKK2ltcG9ydCBtYWNvc3Rvb2xzCisKIFRFU1RGTjIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJzInCiAKIGNsYXNzIFRlc3RNYWNvc3Rvb2xzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTc4LDcgKzgwLDcgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFNraXAgb24gd2lkZSB1bmljb2RlCiAgICAgaWYgbGVuKHUnXDAnLmVuY29kZSgndW5pY29kZS1pbnRlcm5hbCcpKSA9PSA0OgotICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQoInRlc3RfbWFjb3N0b29scyBpcyBicm9rZW4gaW4gVVNDNCIpCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0X21hY29zdG9vbHMgaXMgYnJva2VuIGluIFVTQzQiKQogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE1hY29zdG9vbHMpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CmluZGV4IDI0ZDhiYjIuLjJjODZjNTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKQEAgLTEsODYgKzEsNTYgQEAKLWltcG9ydCBvcwotaW1wb3J0IHN5cwogaW1wb3J0IG1hY3BhdGgKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9nZW5lcmljcGF0aAogaW1wb3J0IHVuaXR0ZXN0CiAKIAogY2xhc3MgTWFjUGF0aFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWNwYXRoLmFic3BhdGgoInh4Onl5IikgPT0gInh4Onl5IikKLQotICAgICAgICAjIElzc3VlIDM0MjY6IGNoZWNrIHRoYXQgYWJzcGF0aCByZXR1bnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMgdW5pY29kZQotICAgICAgICAjIGFuZCBzdHIgd2hlbiBpdCdzIHN0ciwgd2l0aCBib3RoIEFTQ0lJIGFuZCBub24tQVNDSUkgY3dkcwotICAgICAgICBzYXZlZF9jd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICBjd2RzID0gWydjd2QnXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjd2RzLmFwcGVuZCh1J1x4ZTd3XHhmMCcuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciAnYXNjaWknKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MgIyB0aGUgY3dkIGNhbid0IGJlIGVuY29kZWQgLS0gdGVzdCB3aXRoIGFzY2lpIGN3ZCBvbmx5Ci0gICAgICAgIGZvciBjd2QgaW4gY3dkczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ta2Rpcihjd2QpCi0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICgnJywgJ2ZvbycsICdmXHhmMlx4ZjInLCAnL2ZvbycsICdDOlxcJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1hY3BhdGguYWJzcGF0aChwYXRoKSwgc3RyKSkKLSAgICAgICAgICAgICAgICBmb3IgdXBhdGggaW4gKHUnJywgdSdmdXUnLCB1J2ZceGY5XHhmOScsIHUnL2Z1dScsIHUnVTpcXCcpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtYWNwYXRoLmFic3BhdGgodXBhdGgpLCB1bmljb2RlKSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZWRfY3dkKQotICAgICAgICAgICAgICAgIG9zLnJtZGlyKGN3ZCkKLQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY3BhdGguYWJzcGF0aCgieHg6eXkiKSwgInh4Onl5IikKIAogICAgIGRlZiB0ZXN0X2lzYWJzKHNlbGYpOgogICAgICAgICBpc2FicyA9IG1hY3BhdGguaXNhYnMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzYWJzKCJ4eDp5eSIpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNhYnMoInh4Onl5OiIpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNhYnMoInh4OiIpKQotICAgICAgICBzZWxmLmZhaWxJZihpc2FicygiZm9vIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzYWJzKCI6Zm9vIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGlzYWJzKCI6Zm9vOmJhciIpKQotICAgICAgICBzZWxmLmZhaWxJZihpc2FicygiOmZvbzpiYXI6IikpCi0KLQotICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKLSAgICAgICAgY29tbW9ucHJlZml4ID0gbWFjcGF0aC5jb21tb25wcmVmaXgKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbW1vbnByZWZpeChbImhvbWU6c3dlbnNvbjpzcGFtIiwgImhvbWU6c3dlbjpzcGFtIl0pCi0gICAgICAgICAgICAgICAgICAgICA9PSAiaG9tZTpzd2VuIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbW1vbnByZWZpeChbIjpob21lOnN3ZW46c3BhbSIsICI6aG9tZTpzd2VuOmVnZ3MiXSkKLSAgICAgICAgICAgICAgICAgICAgID09ICI6aG9tZTpzd2VuOiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21tb25wcmVmaXgoWyI6aG9tZTpzd2VuOnNwYW0iLCAiOmhvbWU6c3dlbjpzcGFtIl0pCi0gICAgICAgICAgICAgICAgICAgICA9PSAiOmhvbWU6c3dlbjpzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzKCJ4eDp5eSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnMoInh4Onl5OiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNhYnMoInh4OiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicygiOmZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCI6Zm9vOmJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzYWJzKCI6Zm9vOmJhcjoiKSkKIAogICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgogICAgICAgICBzcGxpdCA9IG1hY3BhdGguc3BsaXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXQoImZvbzpiYXIiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiZm9vOmJhciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ZvbzonLCAnYmFyJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0KCJjb25reTptb3VudHBvaW50OmZvbzpiYXIiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiY29ua3k6bW91bnRwb2ludDpmb286YmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY29ua3k6bW91bnRwb2ludDpmb28nLCAnYmFyJykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXQoIjoiKSwgKCcnLCAnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0KCI6Y29ua3k6bW91bnRwb2ludDoiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiOiIpLCAoJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiOmNvbmt5Om1vdW50cG9pbnQ6IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgnOmNvbmt5Om1vdW50cG9pbnQnLCAnJykpCiAKLSAgICBkZWYgdGVzdF9zcGxpdGRyaXZlKHNlbGYpOgotICAgICAgICBzcGxpdGRyaXZlID0gbWFjcGF0aC5zcGxpdGRyaXZlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZHJpdmUoImZvbzpiYXIiKSwgKCcnLCAnZm9vOmJhcicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdGRyaXZlKCI6Zm9vOmJhciIpLCAoJycsICc6Zm9vOmJhcicpKQotCiAgICAgZGVmIHRlc3Rfc3BsaXRleHQoc2VsZik6CiAgICAgICAgIHNwbGl0ZXh0ID0gbWFjcGF0aC5zcGxpdGV4dAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzcGxpdGV4dCgiOmZvby5leHQiKSwgKCc6Zm9vJywgJy5leHQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoImZvbzpmb28uZXh0IiksICgnZm9vOmZvbycsICcuZXh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZXh0KCIuZXh0IiksICgnLmV4dCcsICcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3BsaXRleHQoImZvby5leHQ6Zm9vIiksICgnZm9vLmV4dDpmb28nLCAnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZXh0KCI6Zm9vLmV4dDoiKSwgKCc6Zm9vLmV4dDonLCAnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZXh0KCIiKSwgKCcnLCAnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNwbGl0ZXh0KCJmb28uYmFyLmV4dCIpLCAoJ2Zvby5iYXInLCAnLmV4dCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCI6Zm9vLmV4dCIpLCAoJzpmb28nLCAnLmV4dCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCJmb286Zm9vLmV4dCIpLCAoJ2Zvbzpmb28nLCAnLmV4dCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCIuZXh0IiksICgnLmV4dCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiZm9vLmV4dDpmb28iKSwgKCdmb28uZXh0OmZvbycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiOmZvby5leHQ6IiksICgnOmZvby5leHQ6JywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCIiKSwgKCcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoImZvby5iYXIuZXh0IiksICgnZm9vLmJhcicsICcuZXh0JykpCisKKyAgICBkZWYgdGVzdF9ub3JtcGF0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1ODI3OiBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKKyAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdScuJywgdScvJywgdSdcXCcsIHUnOicsIHUnLy8vZm9vLy4vL2Jhci8vJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWFjcGF0aC5ub3JtcGF0aChwYXRoKSwgdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9ybXBhdGgoKSByZXR1cm5lZCBzdHIgaW5zdGVhZCBvZiB1bmljb2RlJykKKworY2xhc3MgTWFjQ29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QpOgorICAgIHBhdGhtb2R1bGUgPSBtYWNwYXRoCiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWFjUGF0aFRlc3RDYXNlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWFjUGF0aFRlc3RDYXNlLCBNYWNDb21tb25UZXN0KQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggNDRlM2NhOC4uODNlMzEzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtMjMsMTcgKzIzLDE3IEBACiAKICAgICBkZWYgX2NoZWNrX3NhbXBsZShzZWxmLCBtc2cpOgogICAgICAgICAjIEluc3BlY3QgYSBtYWlsYm94Lk1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbXBsZSBtZXNzYWdlCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG1zZywgZW1haWwubWVzc2FnZS5NZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnLCBtYWlsYm94Lk1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIG1haWxib3guTWVzc2FnZSkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gX3NhbXBsZV9oZWFkZXJzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlIGluIG1zZy5nZXRfYWxsKGtleSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuaXNfbXVsdGlwYXJ0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4obXNnLmdldF9wYXlsb2FkKCkpID09IGxlbihfc2FtcGxlX3BheWxvYWRzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFsdWUsIG1zZy5nZXRfYWxsKGtleSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgbGVuKF9zYW1wbGVfcGF5bG9hZHMpKQogICAgICAgICBmb3IgaSwgcGF5bG9hZCBpbiBlbnVtZXJhdGUoX3NhbXBsZV9wYXlsb2Fkcyk6CiAgICAgICAgICAgICBwYXJ0ID0gbXNnLmdldF9wYXlsb2FkKGkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShwYXJ0LCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBpc2luc3RhbmNlKHBhcnQsIG1haWxib3guTWVzc2FnZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocGFydC5nZXRfcGF5bG9hZCgpID09IHBheWxvYWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFydCwgZW1haWwubWVzc2FnZS5NZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHBhcnQsIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQogCiAgICAgZGVmIF9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZiwgdGFyZ2V0KToKICAgICAgICAgIyBEZWxldGUgYSBmaWxlIG9yIGRlbGV0ZSBhIGRpcmVjdG9yeSByZWN1cnNpdmVseQpAQCAtNjYsMTYgKzY2LDE2IEBACiAgICAgICAgICMgQWRkIGNvcGllcyBvZiBhIHNhbXBsZSBtZXNzYWdlCiAgICAgICAgIGtleXMgPSBbXQogICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQogICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKG1haWxib3guTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhfc2FtcGxlX21lc3NhZ2UpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDMpCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoU3RyaW5nSU8uU3RyaW5nSU8oX3NhbXBsZV9tZXNzYWdlKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCA0KQogICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSA1KQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5c1swXSkgPT0gc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleXNbMF0pLCBzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGZvciBpIGluICgxLCAyLCAzLCA0KToKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5c1tpXV0pCiAKQEAgLTkxLDIzICs5MSwyMyBAQAogICAgICAgICAjIChVc2VkIGJ5IHRlc3RfcmVtb3ZlKCkgYW5kIHRlc3RfZGVsaXRlbSgpLikKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQogICAgICAgICBtZXRob2Qoa2V5MCkKICAgICAgICAgbCA9IGxlbihzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsID09IDEsICJhY3R1YWwgbDogJXMiICUgbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IG1ldGhvZChrZXkwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09IHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwgc2VsZi5fdGVtcGxhdGUgJSAxKQogICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQogICAgICAgICBtZXRob2Qoa2V5MikKICAgICAgICAgbCA9IGxlbihzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsID09IDEsICJhY3R1YWwgbDogJXMiICUgbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5Ml0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IG1ldGhvZChrZXkyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpID09IHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwgc2VsZi5fdGVtcGxhdGUgJSAxKQogICAgICAgICBtZXRob2Qoa2V5MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkxXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTEpKQogCkBAIC0xMTUsMzUgKzExNSwzNSBAQAogICAgICAgICAjIERpc2NhcmQgbWVzc2FnZXMKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQogICAgICAgICBzZWxmLl9ib3guZGlzY2FyZChrZXkwKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQogICAgICAgICBzZWxmLl9ib3guZGlzY2FyZChrZXkwKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICAjIFJldHJpZXZlIG1lc3NhZ2VzIHVzaW5nIGdldCgpCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAgbXNnID0gc2VsZi5fYm94LmdldChrZXkwKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnWydmcm9tJ10gPT0gJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3BheWxvYWQoKSA9PSAnMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0KCdmb28nKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldCgnZm9vJywgRmFsc2UpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgJzAnKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuX2JveC5nZXQoJ2ZvbycpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuX2JveC5nZXQoJ2ZvbycsIEZhbHNlKSkKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKICAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoLCBmYWN0b3J5PXJmYzgyMi5NZXNzYWdlKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCiAgICAgICAgIG1zZyA9IHNlbGYuX2JveC5nZXQoa2V5MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ1snZnJvbSddID09ICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmZwLnJlYWQoKSA9PSAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5mcC5yZWFkKCksICcxJykKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CiAgICAgICAgICMgUmV0cmlldmUgbWVzc2FnZSB1c2luZyBfX2dldGl0ZW1fXygpCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAgbXNnID0gc2VsZi5fYm94W2tleTBdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dbJ2Zyb20nXSA9PSAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfcGF5bG9hZCgpID09ICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2Zyb20nXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksICcwJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94Wydmb28nXSkKICAgICAgICAgc2VsZi5fYm94LmRpc2NhcmQoa2V5MCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQpAQCAtMTUzLDI2ICsxNTMsMjYgQEAKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIG1zZzAgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnMCwgbWFpbGJveC5NZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZzBbJ2Zyb20nXSA9PSAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZzAuZ2V0X3BheWxvYWQoKSA9PSAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cwLCBtYWlsYm94Lk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMFsnZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cwLmdldF9wYXlsb2FkKCksICcwJykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkxKSkKIAogICAgIGRlZiB0ZXN0X2dldF9zdHJpbmcoc2VsZik6CiAgICAgICAgICMgR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSA9PSBzZWxmLl90ZW1wbGF0ZSAlIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PSBfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksIHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwgX3NhbXBsZV9tZXNzYWdlKQogCiAgICAgZGVmIHRlc3RfZ2V0X2ZpbGUoc2VsZik6CiAgICAgICAgICMgR2V0IGZpbGUgcmVwcmVzZW50YXRpb25zIG9mIG1lc3NhZ2VzCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9maWxlKGtleTApLnJlYWQoKS5yZXBsYWNlKG9zLmxpbmVzZXAsICdcbicpCi0gICAgICAgICAgICAgICAgICAgICA9PSBzZWxmLl90ZW1wbGF0ZSAlIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5MSkucmVhZCgpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgID09IF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5MCkucmVhZCgpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfZmlsZShrZXkxKS5yZWFkKCkucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2UpCiAKICAgICBkZWYgdGVzdF9pdGVya2V5cyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyB1c2luZyBpdGVya2V5cygpCkBAIC0yMjIsMTUgKzIyMiwxNiBAQAogICAgICAgICAgICAgICAgIHJldHVybmVkX2tleXMuYXBwZW5kKGtleSkKICAgICAgICAgICAgICAgICByZXR1cm5lZF92YWx1ZXMuYXBwZW5kKHZhbHVlKQogICAgICAgICBpZiBkb19rZXlzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihrZXlzKSA9PSBsZW4ocmV0dXJuZWRfa2V5cykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc2V0KGtleXMpID09IHNldChyZXR1cm5lZF9rZXlzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCBsZW4ocmV0dXJuZWRfa2V5cykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChrZXlzKSwgc2V0KHJldHVybmVkX2tleXMpKQogICAgICAgICBpZiBkb192YWx1ZXM6CiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiByZXR1cm5lZF92YWx1ZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlWydmcm9tJ10gPT0gJ2ZvbycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGludCh2YWx1ZS5nZXRfcGF5bG9hZCgpKSA8IHJlcGV0aXRpb25zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ2Zyb20nXSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCh2YWx1ZS5nZXRfcGF5bG9hZCgpKSA8IHJlcGV0aXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUuZ2V0X3BheWxvYWQoKSwgcmVwZXRpdGlvbnMpKQogICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4odmFsdWVzKSA9PSBjb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIGNvdW50KQogCiAgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKICAgICAgICAgIyBDaGVjayBleGlzdGVuY2Ugb2Yga2V5cyB1c2luZyBoYXNfa2V5KCkKQEAgLTI0Miw2MSArMjQzLDYxIEBACiAKICAgICBkZWYgX3Rlc3RfaGFzX2tleV9vcl9jb250YWlucyhzZWxmLCBtZXRob2QpOgogICAgICAgICAjIChVc2VkIGJ5IHRlc3RfaGFzX2tleSgpIGFuZCB0ZXN0X2NvbnRhaW5zKCkuKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQotICAgICAgICBzZWxmLmFzc2VydF8obWV0aG9kKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQotICAgICAgICBzZWxmLmFzc2VydF8obWV0aG9kKGtleTEpKQotICAgICAgICBzZWxmLmFzc2VydF8obWV0aG9kKGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2Qoa2V5MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKICAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkwKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZChrZXkwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1ldGhvZChrZXkxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBtZXRob2QoJ2ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbWV0aG9kKGtleTEpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG1ldGhvZChrZXkwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBtZXRob2QoJ2ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZChrZXkxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2Qoa2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKIAogICAgIGRlZiB0ZXN0X2xlbihzZWxmLCByZXBldGl0aW9ucz0xMCk6CiAgICAgICAgICMgR2V0IG1lc3NhZ2UgY291bnQKICAgICAgICAga2V5cyA9IFtdCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShyZXBldGl0aW9ucyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIGkpCiAgICAgICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gaSArIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAgaSArIDEpCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShyZXBldGl0aW9ucyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gcmVwZXRpdGlvbnMgLSBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgcmVwZXRpdGlvbnMgLSBpKQogICAgICAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXlzW2ldKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IHJlcGV0aXRpb25zIC0gaSAtIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCByZXBldGl0aW9ucyAtIGkgLSAxKQogCiAgICAgZGVmIHRlc3Rfc2V0X2l0ZW0oc2VsZik6CiAgICAgICAgICMgTW9kaWZ5IG1lc3NhZ2VzIHVzaW5nIF9fc2V0aXRlbV9fKCkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAxJykKICAgICAgICAgc2VsZi5fYm94W2tleTBdID0gc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAwJwotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnKQogICAgICAgICBzZWxmLl9ib3hba2V5MV0gPSBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScpCiAgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IF9zYW1wbGVfbWVzc2FnZQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTBdKQogICAgICAgICBzZWxmLl9ib3hba2V5MV0gPSBzZWxmLl9ib3hba2V5MF0KICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXkxXSkKICAgICAgICAgc2VsZi5fYm94W2tleTBdID0gc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKHNlbGYuX2JveFtrZXkxXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogc2VsZi5fYm94Ll9fc2V0aXRlbV9fKCdmb28nLCAnYmFyJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFsnZm9vJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94KSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAyKQogCiAgICAgZGVmIHRlc3RfY2xlYXIoc2VsZiwgaXRlcmF0aW9ucz0xMCk6CiAgICAgICAgICMgUmVtb3ZlIGFsbCBtZXNzYWdlcyB1c2luZyBjbGVhcigpCkBAIC0zMDQsMjkgKzMwNSwyOSBAQAogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoaXRlcmF0aW9ucyk6CiAgICAgICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkKICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSA9PSBzZWxmLl90ZW1wbGF0ZSAlIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIHNlbGYuX3RlbXBsYXRlICUgaSkKICAgICAgICAgc2VsZi5fYm94LmNsZWFyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSkKIAogICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKICAgICAgICAgIyBHZXQgYW5kIHJlbW92ZSBhIG1lc3NhZ2UgdXNpbmcgcG9wKCkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oa2V5MCBpbiBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MCwgc2VsZi5fYm94KQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkxIGluIHNlbGYuX2JveCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5wb3Aoa2V5MCkuZ2V0X3BheWxvYWQoKSA9PSAnMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkwIG5vdCBpbiBzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhrZXkxIGluIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkxLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LnBvcChrZXkwKS5nZXRfcGF5bG9hZCgpLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5MCwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTEsIHNlbGYuX2JveCkKICAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oa2V5MiBpbiBzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3gucG9wKGtleTIpLmdldF9wYXlsb2FkKCkgPT0gJzInKQotICAgICAgICBzZWxmLmFzc2VydF8oa2V5MiBub3QgaW4gc2VsZi5fYm94KQotICAgICAgICBzZWxmLmFzc2VydF8oa2V5MSBpbiBzZWxmLl9ib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3gucG9wKGtleTEpLmdldF9wYXlsb2FkKCkgPT0gJzEnKQotICAgICAgICBzZWxmLmFzc2VydF8oa2V5MSBub3QgaW4gc2VsZi5fYm94KQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkyLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LnBvcChrZXkyKS5nZXRfcGF5bG9hZCgpLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5Miwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTEsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gucG9wKGtleTEpLmdldF9wYXlsb2FkKCksICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXkxLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCiAKICAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYsIGl0ZXJhdGlvbnM9MTApOgogICAgICAgICAjIEdldCBhbmQgcmVtb3ZlIGFuIGFyYml0cmFyeSAoa2V5LCBtZXNzYWdlKSB1c2luZyBwb3BpdGVtKCkKQEAgLTMzNiwxMSArMzM3LDExIEBACiAgICAgICAgIHNlZW4gPSBbXQogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgogICAgICAgICAgICAga2V5LCBtc2cgPSBzZWxmLl9ib3gucG9waXRlbSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oa2V5IGluIGtleXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oa2V5IG5vdCBpbiBzZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGtleXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleSwgc2VlbikKICAgICAgICAgICAgIHNlZW4uYXBwZW5kKGtleSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpbnQobXNnLmdldF9wYXlsb2FkKCkpID09IGtleXMuaW5kZXgoa2V5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChtc2cuZ2V0X3BheWxvYWQoKSksIGtleXMuaW5kZXgoa2V5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKICAgICAgICAgZm9yIGtleSBpbiBrZXlzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleV0pCiAKQEAgLTM1MSwzMiArMzUyLDMyIEBACiAgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDInKQogICAgICAgICBzZWxmLl9ib3gudXBkYXRlKHtrZXkwOiBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyOiBfc2FtcGxlX21lc3NhZ2V9KQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5Ml0pCiAgICAgICAgIHNlbGYuX2JveC51cGRhdGUoWyhrZXkyLCBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDInKSwKICAgICAgICAgICAgICAgICAgICAgKGtleTEsIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScpLAogICAgICAgICAgICAgICAgICAgICAoa2V5MCwgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gpID09IDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTIpID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogc2VsZi5fYm94LnVwZGF0ZSh7J2Zvbyc6ICdiYXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MDogc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAwIn0pKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApID09Ci0gICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDAiKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkyKSA9PQotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAyIikKIAogICAgIGRlZiB0ZXN0X2ZsdXNoKHNlbGYpOgogICAgICAgICAjIFdyaXRlIGNoYW5nZXMgdG8gZGlzawpAQCAtMzg0LDExICszODUsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2xvY2tfdW5sb2NrKHNlbGYpOgogICAgICAgICAjIExvY2sgYW5kIHVubG9jayB0aGUgbWFpbGJveAotICAgICAgICBzZWxmLmFzc2VydF8obm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKICAgICAgICAgc2VsZi5fYm94LmxvY2soKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCiAgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX2dldF9sb2NrX3BhdGgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5fZ2V0X2xvY2tfcGF0aCgpKSkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgogICAgICAgICAjIENsb3NlIG1haWxib3ggYW5kIGZsdXNoIGNoYW5nZXMgdG8gZGlzawpAQCAtNDA0LDkgKzQwNSw5IEBACiAgICAgICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQogICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCiAgICAgICAgIGtleXMgPSBzZWxmLl9ib3gua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oa2V5cykgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDMpCiAgICAgICAgIGZvciBrZXkgaW4ga2V5czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCBjb250ZW50cykKIAogICAgIGRlZiB0ZXN0X2R1bXBfbWVzc2FnZShzZWxmKToKICAgICAgICAgIyBXcml0ZSBtZXNzYWdlIHJlcHJlc2VudGF0aW9ucyB0byBkaXNrCkBAIC00MTQsOCArNDE1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2UsIFN0cmluZ0lPLlN0cmluZ0lPKF9zYW1wbGVfbWVzc2FnZSkpOgogICAgICAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQogICAgICAgICAgICAgc2VsZi5fYm94Ll9kdW1wX21lc3NhZ2UoaW5wdXQsIG91dHB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvdXRwdXQuZ2V0dmFsdWUoKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZS5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlLnJlcGxhY2UoJ1xuJywgb3MubGluZXNlcCkpCiAgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2JveC5fZHVtcF9tZXNzYWdlKE5vbmUsIG91dHB1dCkpCkBAIC00NzUsNyArNDc2LDcgQEAKICAgICAgICAgbXNnLnNldF9zdWJkaXIoJ2N1cicpCiAgICAgICAgIG1zZy5zZXRfaW5mbygnZm9vJykKICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2N1cicsICclcyVzZm9vJyAlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2N1cicsICclcyVzZm9vJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgc2VsZi5fYm94LmNvbG9uKSkpKQogCiAgICAgZGVmIHRlc3RfZ2V0X01NKHNlbGYpOgpAQCAtNDg1LDkgKzQ4Niw5IEBACiAgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1JGJykKICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cpCiAgICAgICAgIG1zZ19yZXR1cm5lZCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG1zZ19yZXR1cm5lZCwgbWFpbGJveC5NYWlsZGlyTWVzc2FnZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpID09ICdjdXInKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9mbGFncygpID09ICdGUicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2dfcmV0dXJuZWQsIG1haWxib3guTWFpbGRpck1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9zdWJkaXIoKSwgJ2N1cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9mbGFncygpLCAnRlInKQogCiAgICAgZGVmIHRlc3Rfc2V0X01NKHNlbGYpOgogICAgICAgICAjIFNldCB3aXRoIGEgTWFpbGRpck1lc3NhZ2UgaW5zdGFuY2UKQEAgLTQ5NSwyMiArNDk2LDIyIEBACiAgICAgICAgIG1zZzAuc2V0X2ZsYWdzKCdUUCcpCiAgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnMCkKICAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCkgPT0gJ1BUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCksICdQVCcpCiAgICAgICAgIG1zZzEgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMSkKICAgICAgICAgc2VsZi5fYm94W2tleV0gPSBtc2cxCiAgICAgICAgIG1zZ19yZXR1cm5lZCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpID09ICduZXcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9mbGFncygpID09ICcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9wYXlsb2FkKCkgPT0gJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnX3JldHVybmVkLmdldF9wYXlsb2FkKCksICcxJykKICAgICAgICAgbXNnMiA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAyKQogICAgICAgICBtc2cyLnNldF9pbmZvKCcyLFMnKQogICAgICAgICBzZWxmLl9ib3hba2V5XSA9IG1zZzIKICAgICAgICAgc2VsZi5fYm94W2tleV0gPSBzZWxmLl90ZW1wbGF0ZSAlIDMKICAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCkgPT0gJ1MnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnX3JldHVybmVkLmdldF9wYXlsb2FkKCkgPT0gJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJ1MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfcGF5bG9hZCgpLCAnMycpCiAKICAgICBkZWYgdGVzdF9jb25zaXN0ZW50X2ZhY3Rvcnkoc2VsZik6CiAgICAgICAgICMgQWRkIGEgbWVzc2FnZS4KQEAgLTUyNSw3ICs1MjYsNyBAQAogICAgICAgICBib3ggPSBtYWlsYm94Lk1haWxkaXIoc2VsZi5fcGF0aCwgZmFjdG9yeT1GYWtlTWVzc2FnZSkKICAgICAgICAgYm94LmNvbG9uID0gc2VsZi5fYm94LmNvbG9uCiAgICAgICAgIG1zZzIgPSBib3guZ2V0X21lc3NhZ2Uoa2V5KQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShtc2cyLCBGYWtlTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cyLCBGYWtlTWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfbmV3KHNlbGYpOgogICAgICAgICAjIEluaXRpYWxpemUgYSBub24tZXhpc3RlbnQgbWFpbGJveApAQCAtNTUzLDY1ICs1NTQsNjMgQEAKICAgICAgICAgZm9yIHN1YmRpciBpbiAnJywgJ3RtcCcsICduZXcnLCAnY3VyJzoKICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3ViZGlyKQogICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQocGF0aClbc3RhdC5TVF9NT0RFXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHN0YXQuU19JU0RJUihtb2RlKSwgIk5vdCBhIGRpcmVjdG9yeTogJyVzJyIgJSBwYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXQuU19JU0RJUihtb2RlKSwgIk5vdCBhIGRpcmVjdG9yeTogJyVzJyIgJSBwYXRoKQogCiAgICAgZGVmIHRlc3RfbGlzdF9mb2xkZXJzKHNlbGYpOgogICAgICAgICAjIExpc3QgZm9sZGVycwogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8oc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNldCgoJ29uZScsICd0d28nLCAndGhyZWUnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCgnb25lJywgJ3R3bycsICd0aHJlZScpKSkKIAogICAgIGRlZiB0ZXN0X2dldF9mb2xkZXIoc2VsZik6CiAgICAgICAgICMgT3BlbiBmb2xkZXJzCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMCA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcuZm9vLmJhcicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcuZm9vLmJhcicpKSkKICAgICAgICAgZm9sZGVyMSA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvbGRlcjEuZ2V0X3N0cmluZyhmb2xkZXIxLmtleXMoKVswXSkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb2xkZXIxLmdldF9zdHJpbmcoZm9sZGVyMS5rZXlzKClbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2JhcicpCiAKICAgICBkZWYgdGVzdF9hZGRfYW5kX3JlbW92ZV9mb2xkZXJzKHNlbGYpOgogICAgICAgICAjIERlbGV0ZSBmb2xkZXJzCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndHdvJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSBzZXQoKCdvbmUnLCAndHdvJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCdvbmUnLCAndHdvJykpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcignb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSA9PSBzZXQoKCd0d28nLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCd0d28nLCkpKQogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndGhyZWUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsICd0aHJlZScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgJ3RocmVlJykpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndGhyZWUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCd0d28nKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCksIFtdKQogCiAgICAgZGVmIHRlc3RfY2xlYW4oc2VsZik6CiAgICAgICAgICMgUmVtb3ZlIG9sZCBmaWxlcyBmcm9tICd0bXAnCiAgICAgICAgIGZvb19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICd0bXAnLCAnZm9vJykKICAgICAgICAgYmFyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsICdiYXInKQotICAgICAgICBmID0gb3Blbihmb29fcGF0aCwgJ3cnKQotICAgICAgICBmLndyaXRlKCJAIikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBvcGVuKGJhcl9wYXRoLCAndycpCi0gICAgICAgIGYud3JpdGUoIkAiKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZvb19wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJAIikKKyAgICAgICAgd2l0aCBvcGVuKGJhcl9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJAIikKICAgICAgICAgc2VsZi5fYm94LmNsZWFuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKGZvb19wYXRoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguZXhpc3RzKGJhcl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZvb19wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGJhcl9wYXRoKSkKICAgICAgICAgZm9vX3N0YXQgPSBvcy5zdGF0KGZvb19wYXRoKQogICAgICAgICBvcy51dGltZShmb29fcGF0aCwgKHRpbWUudGltZSgpIC0gMTI5NjAwIC0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb29fc3RhdC5zdF9tdGltZSkpCiAgICAgICAgIHNlbGYuX2JveC5jbGVhbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgb3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZvb19wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGJhcl9wYXRoKSkKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV90bXAoc2VsZiwgcmVwZXRpdGlvbnM9MTApOgogICAgICAgICAjIENyZWF0ZSBmaWxlcyBpbiB0bXAgZGlyZWN0b3J5CkBAIC02MzEsNjEgKzYzMCw2NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0bXAiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlIGluIHdyb25nIGxvY2F0aW9uOiAnJXMnIiAlIGhlYWQpCiAgICAgICAgICAgICBtYXRjaCA9IHBhdHRlcm4ubWF0Y2godGFpbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRjaCBpcyBub3QgTm9uZSwgIkludmFsaWQgZmlsZSBuYW1lOiAnJXMnIiAlIHRhaWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2ggaXMgbm90IE5vbmUsICJJbnZhbGlkIGZpbGUgbmFtZTogJyVzJyIgJSB0YWlsKQogICAgICAgICAgICAgZ3JvdXBzID0gbWF0Y2guZ3JvdXBzKCkKICAgICAgICAgICAgIGlmIHByZXZpb3VzX2dyb3VwcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KGdyb3Vwc1swXSA+PSBwcmV2aW91c19ncm91cHNbMF0pLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoZ3JvdXBzWzBdID49IHByZXZpb3VzX2dyb3Vwc1swXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb24tbW9ub3RvbmljIHNlY29uZHM6ICclcycgYmVmb3JlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzX2dyb3Vwc1swXSwgZ3JvdXBzWzBdKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KGdyb3Vwc1sxXSA+PSBwcmV2aW91c19ncm91cHNbMV0pIG9yCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChncm91cHNbMV0gPj0gcHJldmlvdXNfZ3JvdXBzWzFdKSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbMF0gIT0gZ3JvdXBzWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLW1vbm90b25pYyBtaWxsaXNlY29uZHM6ICclcycgYmVmb3JlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzX2dyb3Vwc1sxXSwgZ3JvdXBzWzFdKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaW50KGdyb3Vwc1syXSkgPT0gcGlkLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoZ3JvdXBzWzJdKSA9PSBwaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIElEIG1pc21hdGNoOiAnJXMnIHNob3VsZCBiZSAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cHNbMl0sIHBpZCkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGludChncm91cHNbM10pID09IGludChwcmV2aW91c19ncm91cHNbM10pICsgMSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KGdyb3Vwc1szXSkgPT0gaW50KHByZXZpb3VzX2dyb3Vwc1szXSkgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLXNlcXVlbnRpYWwgY291bnRlcjogJyVzJyBiZWZvcmUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzNdLCBncm91cHNbM10pKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhncm91cHNbNF0gPT0gaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyb3Vwc1s0XSA9PSBob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhvc3QgbmFtZSBtaXNtYXRjaDogJyVzJyBzaG91bGQgYmUgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXBzWzRdLCBob3N0bmFtZSkpCiAgICAgICAgICAgICBwcmV2aW91c19ncm91cHMgPSBncm91cHMKICAgICAgICAgICAgIHRtcF9maWxlLndyaXRlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgIHRtcF9maWxlLnNlZWsoMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0bXBfZmlsZS5yZWFkKCkgPT0gX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRtcF9maWxlLnJlYWQoKSA9PSBfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgICAgICB0bXBfZmlsZS5jbG9zZSgpCiAgICAgICAgIGZpbGVfY291bnQgPSBsZW4ob3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgInRtcCIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZpbGVfY291bnQgPT0gcmVwZXRpdGlvbnMsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX2NvdW50ID09IHJlcGV0aXRpb25zLAogICAgICAgICAgICAgICAgICAgICAgIldyb25nIGZpbGUgY291bnQ6ICclcycgc2hvdWxkIGJlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgIChmaWxlX2NvdW50LCByZXBldGl0aW9ucykpCiAKICAgICBkZWYgdGVzdF9yZWZyZXNoKHNlbGYpOgogICAgICAgICAjIFVwZGF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fdG9jID09IHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX3RvYyA9PSB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge30pCiAgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX3RvYyA9PSB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpfSkKICAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll90b2MgPT0ge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKX0pCiAgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guX3RvYyA9PSB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkxOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTI6IG9zLnBhdGguam9pbignbmV3Jywga2V5Mil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTE6IG9zLnBhdGguam9pbignbmV3Jywga2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTIpfSkKIAogICAgIGRlZiB0ZXN0X2xvb2t1cChzZWxmKToKICAgICAgICAgIyBMb29rIHVwIG1lc3NhZ2Ugc3VicGF0aHMgaW4gdGhlIFRPQwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guX2xvb2t1cCgnZm9vJykpCiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fbG9va3VwKGtleTApID09IG9zLnBhdGguam9pbignbmV3Jywga2V5MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll9sb29rdXAoa2V5MCksIG9zLnBhdGguam9pbignbmV3Jywga2V5MCkpCiAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ25ldycsIGtleTApKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll90b2MgPT0ge2tleTA6IG9zLnBhdGguam9pbignbmV3Jywga2V5MCl9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKX0pCisgICAgICAgICMgQmUgc3VyZSB0aGF0IHRoZSBUT0MgaXMgcmVhZCBiYWNrIGZyb20gZGlzayAoc2VlIGlzc3VlICM2ODk2CisgICAgICAgICMgYWJvdXQgYmFkIG10aW1lIGJlaGF2aW91ciBvbiBzb21lIHN5c3RlbXMpLgorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guX2xvb2t1cChrZXkwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5fdG9jID09IHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKIAogICAgIGRlZiB0ZXN0X2xvY2tfdW5sb2NrKHNlbGYpOgogICAgICAgICAjIExvY2sgYW5kIHVubG9jayB0aGUgbWFpbGJveC4gRm9yIE1haWxkaXIsIHRoaXMgZG9lcyBub3RoaW5nLgpAQCAtNjk5LDEwICs3MDEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGJveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCwgZmFjdG9yeT1kdW1teV9mYWN0b3J5KQogICAgICAgICBmb2xkZXIgPSBib3guYWRkX2ZvbGRlcignZm9sZGVyMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2xkZXIuX2ZhY3RvcnkgaXMgZHVtbXlfZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb2xkZXIuX2ZhY3RvcnksIGR1bW15X2ZhY3RvcnkpCiAKICAgICAgICAgZm9sZGVyMV9hbGlhcyA9IGJveC5nZXRfZm9sZGVyKCdmb2xkZXIxJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvbGRlcjFfYWxpYXMuX2ZhY3RvcnkgaXMgZHVtbXlfZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb2xkZXIxX2FsaWFzLl9mYWN0b3J5LCBkdW1teV9mYWN0b3J5KQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2luX2ZvbGRlciAoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IG1haWxib3hlcyBzdGlsbCB3b3JrIGlmIHRoZXJlJ3MgYSBzdHJheSBleHRyYSBkaXJlY3RvcnkKQEAgLTcyOSw3ICs3MzEsNyBAQAogICAgICAgICAgICAgb3MudW1hc2sob3JpZ191bWFzaykKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9ib3guX2xvb2t1cChrZXkpKQogICAgICAgICBtb2RlID0gb3Muc3RhdChwYXRoKS5zdF9tb2RlCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtb2RlICYgMDExMSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGUgJiAwMTExLCAwKQogCiAgICAgZGVmIHRlc3RfZm9sZGVyX2ZpbGVfcGVybXMoc2VsZik6CiAgICAgICAgICMgRnJvbSBidWcgIzMyMjgsIHdlIHdhbnQgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGUgY3JlYXRlZCBpbnNpZGUgYSBNYWlsZGlyCkBAIC03NDgsNiArNzUwLDM3IEBACiAgICAgICAgIHBlcm1zID0gc3Quc3RfbW9kZQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChwZXJtcyAmIDAxMTEpKSAjIEV4ZWN1dGUgYml0cyBzaG91bGQgYWxsIGJlIG9mZi4KIAorICAgIGRlZiB0ZXN0X3JlcmVhZChzZWxmKToKKyAgICAgICAgIyBXYWl0IGZvciAyIHNlY29uZHMKKyAgICAgICAgdGltZS5zbGVlcCgyKQorCisgICAgICAgICMgSW5pdGlhbGx5LCB0aGUgbWFpbGJveCBoYXMgbm90IGJlZW4gcmVhZCBhbmQgdGhlIHRpbWUgaXMgbnVsbC4KKyAgICAgICAgYXNzZXJ0IGdldGF0dHIoc2VsZi5fYm94LCAnX2xhc3RfcmVhZCcsIE5vbmUpIGlzIE5vbmUKKworICAgICAgICAjIFJlZnJlc2ggbWFpbGJveDsgdGhlIHRpbWVzIHNob3VsZCBub3cgYmUgc2V0IHRvIHNvbWV0aGluZy4KKyAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKKyAgICAgICAgYXNzZXJ0IGdldGF0dHIoc2VsZi5fYm94LCAnX2xhc3RfcmVhZCcsIE5vbmUpIGlzIG5vdCBOb25lCisKKyAgICAgICAgIyBUcnkgY2FsbGluZyBfcmVmcmVzaCgpIGFnYWluOyB0aGUgbW9kaWZpY2F0aW9uIHRpbWVzIHNob3VsZG4ndCBoYXZlCisgICAgICAgICMgY2hhbmdlZCwgc28gdGhlIG1haWxib3ggc2hvdWxkIG5vdCBiZSByZS1yZWFkaW5nLiAgUmUtcmVhZGluZyBjYXVzZXMKKyAgICAgICAgIyB0aGUgLl90b2MgYXR0cmlidXRlIHRvIGJlIGFzc2lnbmVkIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LCBzbworICAgICAgICAjIHdlJ2xsIGNoZWNrIHRoYXQgdGhlIC5fdG9jIGF0dHJpYnV0ZSBpc24ndCBhIGRpZmZlcmVudCBvYmplY3QuCisgICAgICAgIG9yaWdfdG9jID0gc2VsZi5fYm94Ll90b2MKKyAgICAgICAgZGVmIHJlZnJlc2hlZCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2JveC5fdG9jIGlzIG5vdCBvcmlnX3RvYworCisgICAgICAgIHRpbWUuc2xlZXAoMSkgICAgICAgICAjIFdhaXQgMXNlYyB0byBlbnN1cmUgdGltZS50aW1lKCkncyB2YWx1ZSBjaGFuZ2VzCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIGFzc2VydCBub3QgcmVmcmVzaGVkKCkKKworICAgICAgICAjIE5vdywgd3JpdGUgc29tZXRoaW5nIGludG8gY3VyIGFuZCByZW1vdmUgaXQuICBUaGlzIGNoYW5nZXMKKyAgICAgICAgIyB0aGUgbXRpbWUgYW5kIHNob3VsZCBjYXVzZSBhIHJlLXJlYWQuCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdjdXInLCAnc3RyYXktZmlsZScpCisgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAndycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIGFzc2VydCByZWZyZXNoZWQoKQogCiBjbGFzcyBfVGVzdE1ib3hNTURGKFRlc3RNYWlsYm94KToKIApAQCAtNzYwLDggKzc5Myw4IEBACiAgICAgZGVmIHRlc3RfYWRkX2Zyb21fc3RyaW5nKHNlbGYpOgogICAgICAgICAjIEFkZCBhIHN0cmluZyBzdGFydGluZyB3aXRoICdGcm9tICcgdG8gdGhlIG1haWxib3gKICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZCgnRnJvbSBmb29AYmFyIGJsYWhcbkZyb206IGZvb1xuXG4wJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveFtrZXldLmdldF9mcm9tKCkgPT0gJ2Zvb0BiYXIgYmxhaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3hba2V5XS5nZXRfcGF5bG9hZCgpID09ICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3hba2V5XS5nZXRfZnJvbSgpLCAnZm9vQGJhciBibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3hba2V5XS5nZXRfcGF5bG9hZCgpLCAnMCcpCiAKICAgICBkZWYgdGVzdF9hZGRfbWJveF9vcl9tbWRmX21lc3NhZ2Uoc2VsZik6CiAgICAgICAgICMgQWRkIGFuIG1ib3hNZXNzYWdlIG9yIE1NREZNZXNzYWdlCkBAIC03NzcsMTEgKzgxMCwxMSBAQAogICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQogICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveCkgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9ib3guaXRlcmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpIGluIHZhbHVlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwgdmFsdWVzKQogICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8obXRpbWUgPT0gb3MucGF0aC5nZXRtdGltZShzZWxmLl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZSwgb3MucGF0aC5nZXRtdGltZShzZWxmLl9wYXRoKSkKIAogICAgIGRlZiB0ZXN0X2FkZF9hbmRfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5aW5nIHRoYXQgY2xvc2luZyBhIG1haWxib3ggZG9lc24ndCBjaGFuZ2UgYWRkZWQgaXRlbXMKQEAgLTc5Myw3ICs4MjYsOCBAQAogICAgICAgICBzZWxmLl9ib3guX2ZpbGUuc2VlaygwKQogICAgICAgICBjb250ZW50cyA9IHNlbGYuX2JveC5fZmlsZS5yZWFkKCkKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbnRlbnRzID09IG9wZW4oc2VsZi5fcGF0aCwgJ3JiJykucmVhZCgpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIGYucmVhZCgpKQogICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgpCiAKICAgICBkZWYgdGVzdF9sb2NrX2NvbmZsaWN0KHNlbGYpOgpAQCAtODM0LDcgKzg2OCw3IEBACiAgICAgICAgIHNlbGYuX2JveC5sb2NrKCkKICAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQobXNnKQogICAgICAgICBzZWxmLl9ib3guZmx1c2goKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94Ll9sb2NrZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9ib3guX2xvY2tlZCkKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKIAogCkBAIC04NzUsOSArOTA5LDkgQEAKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndGhyZWUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09Ci0gICAgICAgICAgICAgICAgICAgICBzZXQoKCdvbmUnLCAndHdvJywgJ3RocmVlJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNldCgoJ29uZScsICd0d28nLCAndGhyZWUnKSkpCiAKICAgICBkZWYgdGVzdF9nZXRfZm9sZGVyKHNlbGYpOgogICAgICAgICAjIE9wZW4gZm9sZGVycwpAQCAtODg4LDU0ICs5MjIsNTQgQEAKICAgICAgICAgbmV3X2ZvbGRlciA9IHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMCA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKICAgICAgICAgZm9sZGVyMC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdmb28uYmFyJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2Zvby5iYXInKSkpCiAgICAgICAgIGZvbGRlcjEgPSBzZWxmLl9ib3guZ2V0X2ZvbGRlcignZm9vLmJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2xkZXIxLmdldF9zdHJpbmcoZm9sZGVyMS5rZXlzKClbMF0pID09IFwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9sZGVyMS5nZXRfc3RyaW5nKGZvbGRlcjEua2V5cygpWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdiYXInKQogCiAgICAgICAgICMgVGVzdCBmb3IgYnVnICMxNTY5NzkwOiB2ZXJpZnkgdGhhdCBmb2xkZXJzIHJldHVybmVkIGJ5IC5nZXRfZm9sZGVyKCkKICAgICAgICAgIyB1c2UgdGhlIHNhbWUgZmFjdG9yeSBmdW5jdGlvbi4KLSAgICAgICAgc2VsZi5hc3NlcnRfKG5ld19mb2xkZXIuX2ZhY3RvcnkgaXMgc2VsZi5fYm94Ll9mYWN0b3J5KQotICAgICAgICBzZWxmLmFzc2VydF8oZm9sZGVyMC5fZmFjdG9yeSBpcyBzZWxmLl9ib3guX2ZhY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobmV3X2ZvbGRlci5fZmFjdG9yeSwgc2VsZi5fYm94Ll9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlcjAuX2ZhY3RvcnksIHNlbGYuX2JveC5fZmFjdG9yeSkKIAogICAgIGRlZiB0ZXN0X2FkZF9hbmRfcmVtb3ZlX2ZvbGRlcnMoc2VsZik6CiAgICAgICAgICMgRGVsZXRlIGZvbGRlcnMKICAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ29uZScsICd0d28nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ29uZScsICd0d28nKSkpCiAgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCdvbmUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsICkpKQogICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndGhyZWUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsICd0aHJlZScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgJ3RocmVlJykpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndGhyZWUnKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IHNldCgoJ3R3bycsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsICkpKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcigndHdvJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpLCBbXSkKIAogICAgIGRlZiB0ZXN0X3NlcXVlbmNlcyhzZWxmKToKICAgICAgICAgIyBHZXQgYW5kIHNldCBzZXF1ZW5jZXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0ge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwge30pCiAgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIG1zZzAuYWRkX3NlcXVlbmNlKCdmb28nKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSA9PSB7J2Zvbyc6W2tleTBdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLCB7J2Zvbyc6W2tleTBdfSkKICAgICAgICAgbXNnMSA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMSkKICAgICAgICAgbXNnMS5zZXRfc2VxdWVuY2VzKFsnYmFyJywgJ3JlcGxpZWQnLCAnZm9vJ10pCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKG1zZzEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09Ci0gICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsIGtleTFdLCAnYmFyJzpba2V5MV0sICdyZXBsaWVkJzpba2V5MV19KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLCBrZXkxXSwgJ2Jhcic6W2tleTFdLCAncmVwbGllZCc6W2tleTFdfSkKICAgICAgICAgbXNnMC5zZXRfc2VxdWVuY2VzKFsnZmxhZ2dlZCddKQogICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBtc2cwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09Ci0gICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTFdLCAnYmFyJzpba2V5MV0sICdyZXBsaWVkJzpba2V5MV0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdnZWQnOltrZXkwXX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTFdLCAnYmFyJzpba2V5MV0sICdyZXBsaWVkJzpba2V5MV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmbGFnZ2VkJzpba2V5MF19KQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09IHsnZmxhZ2dlZCc6W2tleTBdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLCB7J2ZsYWdnZWQnOltrZXkwXX0pCiAKICAgICBkZWYgdGVzdF9pc3N1ZTI2MjUoc2VsZik6CiAgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCkBAIC05NDMsNiArOTc3LDEzIEBACiAgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzApCiAgICAgICAgIHJlZm1zZzAgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MCkKIAorICAgIGRlZiB0ZXN0X2lzc3VlNzYyNyhzZWxmKToKKyAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTApCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorCiAgICAgZGVmIHRlc3RfcGFjayhzZWxmKToKICAgICAgICAgIyBQYWNrIHRoZSBjb250ZW50cyBvZiB0aGUgbWFpbGJveAogICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQpAQCAtOTU3LDE5ICs5OTgsMTkgQEAKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKICAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQobXNnMikKICAgICAgICAga2V5MyA9IHNlbGYuX2JveC5hZGQobXNnMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCxrZXkxLGtleTIsa2V5M10sICd1bnNlZW4nOltrZXkwXSwKLSAgICAgICAgICAgICAgICAgICAgICAnZmxhZ2dlZCc6W2tleTJdLCAnYmFyJzpba2V5M10sICdyZXBsaWVkJzpba2V5M119KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLGtleTEsa2V5MixrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ2dlZCc6W2tleTJdLCAnYmFyJzpba2V5M10sICdyZXBsaWVkJzpba2V5M119KQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09Ci0gICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsa2V5MSxrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLCAnYmFyJzpba2V5M10sCi0gICAgICAgICAgICAgICAgICAgICAgJ3JlcGxpZWQnOltrZXkzXX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6W2tleTAsa2V5MSxrZXkzXSwgJ3Vuc2Vlbic6W2tleTBdLCAnYmFyJzpba2V5M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBsaWVkJzpba2V5M119KQogICAgICAgICBzZWxmLl9ib3gucGFjaygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3gua2V5cygpID09IFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gua2V5cygpLCBbMSwgMiwgM10pCiAgICAgICAgIGtleTAgPSBrZXkwCiAgICAgICAgIGtleTEgPSBrZXkwICsgMQogICAgICAgICBrZXkyID0ga2V5MSArIDEKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCkgPT0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAogICAgICAgICAgICAgICAgICAgICAgeydmb28nOlsxLCAyLCAzXSwgJ3Vuc2Vlbic6WzFdLCAnYmFyJzpbM10sICdyZXBsaWVkJzpbM119KQogCiAgICAgICAgICMgVGVzdCBjYXNlIGZvciBwYWNraW5nIHdoaWxlIGhvbGRpbmcgdGhlIG1haWxib3ggbG9ja2VkLgpAQCAtOTgzLDkgKzEwMjQsOSBAQAogICAgICAgICBzZWxmLl9ib3gubG9jaygpCiAgICAgICAgIHNlbGYuX2JveC5wYWNrKCkKICAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpID09Ci0gICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6WzEsIDIsIDMsIDQsIDVdLAotICAgICAgICAgICAgICAgICAgICAgICd1bnNlZW4nOlsxXSwgJ2Jhcic6WzNdLCAncmVwbGllZCc6WzNdfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpbMSwgMiwgMywgNCwgNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnNlZW4nOlsxXSwgJ2Jhcic6WzNdLCAncmVwbGllZCc6WzNdfSkKIAogICAgIGRlZiBfZ2V0X2xvY2tfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnLm1oX3NlcXVlbmNlcy5sb2NrJykKQEAgLTEwMDMsMjEgKzEwNDQsMjEgQEAKIAogICAgIGRlZiB0ZXN0X2xhYmVscyhzZWxmKToKICAgICAgICAgIyBHZXQgbGFiZWxzIGZyb20gdGhlIG1haWxib3gKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2JveC5nZXRfbGFiZWxzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9sYWJlbHMoKSwgW10pCiAgICAgICAgIG1zZzAgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIG1zZzAuYWRkX2xhYmVsKCdmb28nKQogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fYm94LmdldF9sYWJlbHMoKSA9PSBbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfbGFiZWxzKCksIFsnZm9vJ10pCiAgICAgICAgIG1zZzEgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDEpCiAgICAgICAgIG1zZzEuc2V0X2xhYmVscyhbJ2JhcicsICdhbnN3ZXJlZCcsICdmb28nXSkKICAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSA9PSBzZXQoWydmb28nLCAnYmFyJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3guZ2V0X2xhYmVscygpKSwgc2V0KFsnZm9vJywgJ2JhciddKSkKICAgICAgICAgbXNnMC5zZXRfbGFiZWxzKFsnYmxhaCcsICdmaWxlZCddKQogICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBtc2cwCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSkgPT0KLSAgICAgICAgICAgICAgICAgICAgIHNldChbJ2ZvbycsICdiYXInLCAnYmxhaCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFsnZm9vJywgJ2JhcicsICdibGFoJ10pKQogICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSkgPT0gc2V0KFsnYmxhaCddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSksIHNldChbJ2JsYWgnXSkpCiAKIAogY2xhc3MgVGVzdE1lc3NhZ2UoVGVzdEJhc2UpOgpAQCAtMTA0NSwyNCArMTA4NiwyMyBAQAogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX2ZpbGUoc2VsZik6CiAgICAgICAgICMgSW5pdGlhbGl6ZSBiYXNlZCBvbiBjb250ZW50cyBvZiBmaWxlCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICd3KycpCi0gICAgICAgIGYud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQotICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCi0gICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3crJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCisgICAgICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX25vdGhpbmcoc2VsZik6CiAgICAgICAgICMgSW5pdGlhbGl6ZSB3aXRob3V0IGFyZ3VtZW50cwogICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKICAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobXNnLCBzZWxmLl9mYWN0b3J5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5rZXlzKCkgPT0gW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgbXNnLmlzX211bHRpcGFydCgpKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9wYXlsb2FkKCkgPT0gTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgZW1haWwubWVzc2FnZS5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBtYWlsYm94Lk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIHNlbGYuX2ZhY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCBOb25lKQogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV9pbmNvcnJlY3RseShzZWxmKToKICAgICAgICAgIyBJbml0aWFsaXplIHdpdGggaW52YWxpZCBhcmd1bWVudApAQCAtMTA5Nyw3MiArMTEzNyw3MyBAQAogICAgIF9mYWN0b3J5ID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZQogCiAgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLmFzc2VydF8obXNnLl9zdWJkaXIgPT0gJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuX2luZm8gPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9zdWJkaXIsICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5faW5mbywnJykKIAogICAgIGRlZiB0ZXN0X3N1YmRpcihzZWxmKToKICAgICAgICAgIyBVc2UgZ2V0X3N1YmRpcigpIGFuZCBzZXRfc3ViZGlyKCkKICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQogICAgICAgICBtc2cuc2V0X3N1YmRpcignY3VyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ2N1cicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ2N1cicpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKCduZXcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBtc2cuc2V0X3N1YmRpcigndG1wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQogICAgICAgICBtc2cuc2V0X3N1YmRpcignbmV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCiAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgIyBVc2UgZ2V0X2ZsYWdzKCksIHNldF9mbGFncygpLCBhZGRfZmxhZygpLCByZW1vdmVfZmxhZygpCiAgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQogICAgICAgICBtc2cuc2V0X2ZsYWdzKCdGJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc3ViZGlyKCkgPT0gJ25ldycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0YnKQogICAgICAgICBtc2cuc2V0X2ZsYWdzKCdTRFRQJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnRFBTVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRFBTVCcpCiAgICAgICAgIG1zZy5hZGRfZmxhZygnRlQnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdERlBTVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnREZQU1QnKQogICAgICAgICBtc2cucmVtb3ZlX2ZsYWcoJ1REUlAnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdGUycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3N1YmRpcigpID09ICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0ZTJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKIAogICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6CiAgICAgICAgICMgVXNlIGdldF9kYXRlKCkgYW5kIHNldF9kYXRlKCkKICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhYnMobXNnLmdldF9kYXRlKCkgLSB0aW1lLnRpbWUoKSkgPCA2MCkKKyAgICAgICAgZGlmZiA9IG1zZy5nZXRfZGF0ZSgpIC0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhkaWZmKSA8IDYwLCBkaWZmKQogICAgICAgICBtc2cuc2V0X2RhdGUoMC4wKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9kYXRlKCkgPT0gMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCAwLjApCiAKICAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgogICAgICAgICAjIFVzZSBnZXRfaW5mbygpIGFuZCBzZXRfaW5mbygpCiAgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9pbmZvKCkgPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcnKQogICAgICAgICBtc2cuc2V0X2luZm8oJzEsZm9vPWJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnMSxmb289YmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzEsZm9vPWJhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtc2cuc2V0X2luZm8oTm9uZSkpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCiAKICAgICBkZWYgdGVzdF9pbmZvX2FuZF9mbGFncyhzZWxmKToKICAgICAgICAgIyBUZXN0IGludGVyYWN0aW9uIG9mIGluZm8gYW5kIGZsYWcgbWV0aG9kcwogICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfaW5mbygpID09ICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnJykKICAgICAgICAgbXNnLnNldF9mbGFncygnU0YnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdGUycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnMixGUycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRlMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMixGUycpCiAgICAgICAgIG1zZy5zZXRfaW5mbygnMSwnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICcnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9pbmZvKCkgPT0gJzEsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMSwnKQogICAgICAgICBtc2cucmVtb3ZlX2ZsYWcoJ1JQVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2luZm8oKSA9PSAnMSwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcxLCcpCiAgICAgICAgIG1zZy5hZGRfZmxhZygnRCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0QnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9pbmZvKCkgPT0gJzIsRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9pbmZvKCksICcyLEQnKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQogCiAKQEAgLTExNzgsMTQgKzEyMTksMTQgQEAKICAgICAgICAgbXNnID0gbWFpbGJveC5NZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnLnNldF91bml4ZnJvbSgnRnJvbSBmb29AYmFyIGJsYWgnKQogICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKG1zZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZnJvbSgpID09ICdmb29AYmFyIGJsYWgnLCBtc2cuZ2V0X2Zyb20oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2Zyb20oKSwgJ2Zvb0BiYXIgYmxhaCcpCiAKICAgICBkZWYgdGVzdF9mcm9tKHNlbGYpOgogICAgICAgICAjIEdldCBhbmQgc2V0ICJGcm9tICIgbGluZQogICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgc2VsZi5fY2hlY2tfZnJvbShtc2cpCiAgICAgICAgIG1zZy5zZXRfZnJvbSgnZm9vIGJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2Zyb20oKSA9PSAnZm9vIGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mcm9tKCksICdmb28gYmFyJykKICAgICAgICAgbXNnLnNldF9mcm9tKCdmb29AYmFyJywgVHJ1ZSkKICAgICAgICAgc2VsZi5fY2hlY2tfZnJvbShtc2csICdmb29AYmFyJykKICAgICAgICAgbXNnLnNldF9mcm9tKCdibGFoQHRlbXAnLCB0aW1lLmxvY2FsdGltZSgpKQpAQCAtMTE5NCwyMyArMTIzNSwyMyBAQAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICAjIFVzZSBnZXRfZmxhZ3MoKSwgc2V0X2ZsYWdzKCksIGFkZF9mbGFnKCksIHJlbW92ZV9mbGFnKCkKICAgICAgICAgbXNnID0gbWFpbGJveC5tYm94TWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnJykKICAgICAgICAgbXNnLnNldF9mbGFncygnRicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0YnKQogICAgICAgICBtc2cuc2V0X2ZsYWdzKCdYT0RSJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZmxhZ3MoKSA9PSAnUk9EWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnUk9EWCcpCiAgICAgICAgIG1zZy5hZGRfZmxhZygnRkEnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdST0RGQVgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ1JPREZBWCcpCiAgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnRkRYQScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gJ1JPJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdSTycpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCiAKICAgICBkZWYgX2NoZWNrX2Zyb20oc2VsZiwgbXNnLCBzZW5kZXI9Tm9uZSk6CiAgICAgICAgICMgQ2hlY2sgY29udGVudHMgb2YgIkZyb20gIiBsaW5lCiAgICAgICAgIGlmIHNlbmRlciBpcyBOb25lOgogICAgICAgICAgICAgc2VuZGVyID0gIk1BSUxFUi1EQUVNT04iCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5tYXRjaChzZW5kZXIgKyByIiBcd3szfSBcd3szfSBbXGQgXVxkIFtcZCBdXGQ6XGR7Mn06IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcZHsyfSBcZHs0fSIsIG1zZy5nZXRfZnJvbSgpKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHNlbmRlciArIHIiIFx3ezN9IFx3ezN9IFtcZCBdXGQgW1xkIF1cZDpcZHsyfToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlxkezJ9IFxkezR9IiwgbXNnLmdldF9mcm9tKCkpKQogCiAKIGNsYXNzIFRlc3RNYm94TWVzc2FnZShfVGVzdE1ib3hNTURGTWVzc2FnZSk6CkBAIC0xMjIzLDMwICsxMjY0LDMwIEBACiAgICAgX2ZhY3RvcnkgPSBtYWlsYm94Lk1ITWVzc2FnZQogCiAgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLmFzc2VydF8obXNnLl9zZXF1ZW5jZXMgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9zZXF1ZW5jZXMsIFtdKQogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2VzKHNlbGYpOgogICAgICAgICAjIEdldCwgc2V0LCBqb2luLCBhbmQgbGVhdmUgc2VxdWVuY2VzCiAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgW10pCiAgICAgICAgIG1zZy5zZXRfc2VxdWVuY2VzKFsnZm9vYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWydmb29iYXInXSkKICAgICAgICAgbXNnLnNldF9zZXF1ZW5jZXMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFtdKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCd1bnNlZW4nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbJ3Vuc2VlbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsndW5zZWVuJ10pCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbJ3Vuc2VlbicsICdmbGFnZ2VkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWyd1bnNlZW4nLCAnZmxhZ2dlZCddKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gWyd1bnNlZW4nLCAnZmxhZ2dlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsndW5zZWVuJywgJ2ZsYWdnZWQnXSkKICAgICAgICAgbXNnLnJlbW92ZV9zZXF1ZW5jZSgndW5zZWVuJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfc2VxdWVuY2VzKCkgPT0gWydmbGFnZ2VkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWydmbGFnZ2VkJ10pCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2Zvb2JhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsnZmxhZ2dlZCcsICdmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2ZsYWdnZWQnLCAnZm9vYmFyJ10pCiAgICAgICAgIG1zZy5yZW1vdmVfc2VxdWVuY2UoJ3JlcGxpZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zZXF1ZW5jZXMoKSA9PSBbJ2ZsYWdnZWQnLCAnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zZXF1ZW5jZXMoKSwgWydmbGFnZ2VkJywgJ2Zvb2JhciddKQogICAgICAgICBtc2cuc2V0X3NlcXVlbmNlcyhbJ2Zvb2JhcicsICdyZXBsaWVkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3NlcXVlbmNlcygpID09IFsnZm9vYmFyJywgJ3JlcGxpZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2Zvb2JhcicsICdyZXBsaWVkJ10pCiAKIAogY2xhc3MgVGVzdEJhYnlsTWVzc2FnZShUZXN0TWVzc2FnZSk6CkBAIC0xMjU0LDU0ICsxMjk1LDU0IEBACiAgICAgX2ZhY3RvcnkgPSBtYWlsYm94LkJhYnlsTWVzc2FnZQogCiAgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLmFzc2VydF8obXNnLl9sYWJlbHMgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9sYWJlbHMsIFtdKQogCiAgICAgZGVmIHRlc3RfbGFiZWxzKHNlbGYpOgogICAgICAgICAjIEdldCwgc2V0LCBqb2luLCBhbmQgbGVhdmUgbGFiZWxzCiAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgW10pCiAgICAgICAgIG1zZy5zZXRfbGFiZWxzKFsnZm9vYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmb29iYXInXSkKICAgICAgICAgbXNnLnNldF9sYWJlbHMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFtdKQogICAgICAgICBtc2cuYWRkX2xhYmVsKCdmaWxlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsnZmlsZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2ZpbGVkJ10pCiAgICAgICAgIG1zZy5hZGRfbGFiZWwoJ3Jlc2VudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsnZmlsZWQnLCAncmVzZW50J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydmaWxlZCcsICdyZXNlbnQnXSkKICAgICAgICAgbXNnLmFkZF9sYWJlbCgncmVzZW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydmaWxlZCcsICdyZXNlbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2ZpbGVkJywgJ3Jlc2VudCddKQogICAgICAgICBtc2cucmVtb3ZlX2xhYmVsKCdmaWxlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsncmVzZW50J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydyZXNlbnQnXSkKICAgICAgICAgbXNnLmFkZF9sYWJlbCgnZm9vYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfbGFiZWxzKCkgPT0gWydyZXNlbnQnLCAnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9sYWJlbHMoKSwgWydyZXNlbnQnLCAnZm9vYmFyJ10pCiAgICAgICAgIG1zZy5yZW1vdmVfbGFiZWwoJ3Vuc2VlbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2xhYmVscygpID09IFsncmVzZW50JywgJ2Zvb2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsncmVzZW50JywgJ2Zvb2JhciddKQogICAgICAgICBtc2cuc2V0X2xhYmVscyhbJ2Zvb2JhcicsICdhbnN3ZXJlZCddKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9sYWJlbHMoKSA9PSBbJ2Zvb2JhcicsICdhbnN3ZXJlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZm9vYmFyJywgJ2Fuc3dlcmVkJ10pCiAKICAgICBkZWYgdGVzdF92aXNpYmxlKHNlbGYpOgogICAgICAgICAjIEdldCwgc2V0LCBhbmQgdXBkYXRlIHZpc2libGUgaGVhZGVycwogICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIHZpc2libGUgPSBtc2cuZ2V0X3Zpc2libGUoKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZS5rZXlzKCkgPT0gW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmdldF9wYXlsb2FkKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmlzaWJsZS5nZXRfcGF5bG9hZCgpLCBOb25lKQogICAgICAgICB2aXNpYmxlWydVc2VyLUFnZW50J10gPSAnRm9vQmFyIDEuMCcKICAgICAgICAgdmlzaWJsZVsnWC1XaGF0ZXZlciddID0gJ0JsYWgnCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF92aXNpYmxlKCkua2V5cygpLCBbXSkKICAgICAgICAgbXNnLnNldF92aXNpYmxlKHZpc2libGUpCiAgICAgICAgIHZpc2libGUgPSBtc2cuZ2V0X3Zpc2libGUoKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZS5rZXlzKCkgPT0gWydVc2VyLUFnZW50JywgJ1gtV2hhdGV2ZXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpc2libGVbJ1VzZXItQWdlbnQnXSA9PSAnRm9vQmFyIDEuMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlWydYLVdoYXRldmVyJ10gPT0gJ0JsYWgnKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZS5nZXRfcGF5bG9hZCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdYLVdoYXRldmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZVsnVXNlci1BZ2VudCddLCAnRm9vQmFyIDEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZVsnWC1XaGF0ZXZlciddLCAnQmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmlzaWJsZS5nZXRfcGF5bG9hZCgpLCBOb25lKQogICAgICAgICBtc2cudXBkYXRlX3Zpc2libGUoKQotICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZS5rZXlzKCkgPT0gWydVc2VyLUFnZW50JywgJ1gtV2hhdGV2ZXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZpc2libGUuZ2V0X3BheWxvYWQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGUua2V5cygpLCBbJ1VzZXItQWdlbnQnLCAnWC1XaGF0ZXZlciddKQorICAgICAgICBzZWxmLmFzc2VydElzKHZpc2libGUuZ2V0X3BheWxvYWQoKSwgTm9uZSkKICAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aXNpYmxlLmtleXMoKSA9PSBbJ1VzZXItQWdlbnQnLCAnRGF0ZScsICdGcm9tJywgJ1RvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3ViamVjdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGUua2V5cygpLCBbJ1VzZXItQWdlbnQnLCAnRGF0ZScsICdGcm9tJywgJ1RvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTdWJqZWN0J10pCiAgICAgICAgIGZvciBoZWFkZXIgaW4gKCdVc2VyLUFnZW50JywgJ0RhdGUnLCAnRnJvbScsICdUbycsICdTdWJqZWN0Jyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmlzaWJsZVtoZWFkZXJdID09IG1zZ1toZWFkZXJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aXNpYmxlW2hlYWRlcl0sIG1zZ1toZWFkZXJdKQogCiAKIGNsYXNzIFRlc3RNTURGTWVzc2FnZShfVGVzdE1ib3hNTURGTWVzc2FnZSk6CkBAIC0xMzQ0LDkgKzEzODUsOSBAQAogICAgICAgICBkYXRlID0gbXNnX21haWxkaXIuZ2V0X2RhdGUoKQogICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZ19tYWlsZGlyKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9mbGFncygpID09ICdERlBSU1QnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldF9zdWJkaXIoKSA9PSAnY3VyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfZGF0ZSgpID09IGRhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnREZQUlNUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2RhdGUoKSwgZGF0ZSkKIAogICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fbWJveG1tZGYoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBtYm94bWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKQEAgLTEzNTgsMTEgKzEzOTksMTEgQEAKICAgICAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X2ZsYWdzKHNldHRpbmcpCiAgICAgICAgICAgICAgICAgbXNnID0gY2xhc3NfKG1zZ19tYWlsZGlyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gcmVzdWx0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2Zyb20oKSA9PSAnTUFJTEVSLURBRU1PTiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmFzY3RpbWUodGltZS5nbXRpbWUoMC4wKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZnJvbSgpLCAnTUFJTEVSLURBRU1PTiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKDAuMCkpKQogICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X3N1YmRpcignY3VyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbGFzc18obXNnX21haWxkaXIpLmdldF9mbGFncygpID09ICdST0RGQScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2dfbWFpbGRpcikuZ2V0X2ZsYWdzKCksICdST0RGQScpCiAKICAgICBkZWYgdGVzdF9tYWlsZGlyX3RvX21oKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTWFpbGRpck1lc3NhZ2UgdG8gTUhNZXNzYWdlCkBAIC0xMzcyLDggKzE0MTMsOCBAQAogICAgICAgICAgICAgICAgICAoJ1QnLCBbJ3Vuc2VlbiddKSwgKCdERlBSU1QnLCBbJ3JlcGxpZWQnLCAnZmxhZ2dlZCddKSkKICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgIG1zZ19tYWlsZGlyLnNldF9mbGFncyhzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTUhNZXNzYWdlKG1zZ19tYWlsZGlyKS5nZXRfc2VxdWVuY2VzKCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnX21haWxkaXIpLmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfbWFpbGRpcl90b19iYWJ5bChzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IE1haWxkaXJNZXNzYWdlIHRvIEJhYnlsCkBAIC0xMzg0LDggKzE0MjUsOCBAQAogICAgICAgICAgICAgICAgICAoJ0RGUFJTVCcsIFsnZGVsZXRlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnXSkpCiAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3Moc2V0dGluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94LkJhYnlsTWVzc2FnZShtc2dfbWFpbGRpcikuZ2V0X2xhYmVscygpID09IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZ19tYWlsZGlyKS5nZXRfbGFiZWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX21haWxkaXIoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UgdG8gTWFpbGRpck1lc3NhZ2UKQEAgLTEzOTcsMTEgKzE0MzgsMTEgQEAKICAgICAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mbGFncyhzZXR0aW5nKQogICAgICAgICAgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnX21ib3hNTURGKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2ZsYWdzKCkgPT0gcmVzdWx0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0X2RhdGUoKSA9PSAwLjAsIG1zZy5nZXRfZGF0ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2RhdGUoKSwgMC4wKQogICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mbGFncygnTycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWJveE1NREYpLmdldF9zdWJkaXIoKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnX21ib3hNTURGKS5nZXRfc3ViZGlyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXInKQogCiAgICAgZGVmIHRlc3RfbWJveG1tZGZfdG9fbWJveG1tZGYoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UgdG8gbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlCkBAIC0xNDExLDggKzE0NTIsOCBAQAogICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mcm9tKCdmb29AYmFyJykKICAgICAgICAgICAgIGZvciBjbGFzczJfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKICAgICAgICAgICAgICAgICBtc2cyID0gY2xhc3MyXyhtc2dfbWJveE1NREYpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZzIuZ2V0X2ZsYWdzKCkgPT0gJ1JPREZBJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8obXNnMi5nZXRfZnJvbSgpID09ICdmb29AYmFyJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuZ2V0X2ZsYWdzKCksICdST0RGQScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmdldF9mcm9tKCksICdmb29AYmFyJykKIAogICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX21oKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlIHRvIE1ITWVzc2FnZQpAQCAtMTQyNCw4ICsxNDY1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICgnUk9ERkEnLCBbJ3JlcGxpZWQnLCAnZmxhZ2dlZCddKSkKICAgICAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mbGFncyhzZXR0aW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1ITWVzc2FnZShtc2dfbWJveE1NREYpLmdldF9zZXF1ZW5jZXMoKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTUhNZXNzYWdlKG1zZ19tYm94TU1ERikuZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfbWJveG1tZGZfdG9fYmFieWwoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UgdG8gQmFieWxNZXNzYWdlCkBAIC0xNDM3LDcgKzE0NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKCdST0RGQScsIFsnZGVsZXRlZCcsICdhbnN3ZXJlZCddKSkKICAgICAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CiAgICAgICAgICAgICAgICAgbXNnLnNldF9mbGFncyhzZXR0aW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSA9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfbWhfdG9fbWFpbGRpcihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IE1ITWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQpAQCAtMTQ0NSwxNCArMTQ4NiwxNCBAQAogICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgogICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSA9PSByZXN1bHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSA9PSAnY3VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfc3ViZGlyKCksICdjdXInKQogICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3Vuc2VlbicpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3JlcGxpZWQnKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSA9PSAnRlInKQotICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSA9PSAnY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksICdGUicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCiAKICAgICBkZWYgdGVzdF9taF90b19tYm94bW1kZihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IE1ITWVzc2FnZSB0byBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKQEAgLTE0NjEsMTMgKzE1MDIsMTMgQEAKICAgICAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2Uoc2V0dGluZykKICAgICAgICAgICAgIGZvciBjbGFzc18gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSA9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSwgcmVzdWx0KQogICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3Vuc2VlbicpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3JlcGxpZWQnKQogICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCkgPT0gJ09GQScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCAnT0ZBJykKIAogICAgIGRlZiB0ZXN0X21oX3RvX21oKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIE1ITWVzc2FnZQpAQCAtMTQ3NSw4ICsxNTE2LDggQEAKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAncmVwbGllZCcsICdmbGFnZ2VkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAncmVwbGllZCcsICdmbGFnZ2VkJ10pCiAKICAgICBkZWYgdGVzdF9taF90b19iYWJ5bChzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IE1ITWVzc2FnZSB0byBCYWJ5bE1lc3NhZ2UKQEAgLTE0ODUsMTMgKzE1MjYsMTMgQEAKICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKICAgICAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2Uoc2V0dGluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSA9PSByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLCByZXN1bHQpCiAgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCiAgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQotICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnKS5nZXRfbGFiZWxzKCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAnYW5zd2VyZWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdhbnN3ZXJlZCddKQogCiAgICAgZGVmIHRlc3RfYmFieWxfdG9fbWFpbGRpcihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IEJhYnlsTWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQpAQCAtMTUwMSwxNCArMTU0MiwxNCBAQAogICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgogICAgICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSA9PSByZXN1bHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSA9PSAnY3VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9mbGFncygpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfc3ViZGlyKCksICdjdXInKQogICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIGZvciBsYWJlbCBpbiAoJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKICAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCkgPT0gJ1BSVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpID09ICdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgJ1BSVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCiAKICAgICBkZWYgdGVzdF9iYWJ5bF90b19tYm94bW1kZihzZWxmKToKICAgICAgICAgIyBDb252ZXJ0IEJhYnlsTWVzc2FnZSB0byBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKQEAgLTE1MTksMTMgKzE1NjAsMTMgQEAKICAgICAgICAgICAgIGZvciBjbGFzc18gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgogICAgICAgICAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKHNldHRpbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGNsYXNzXyhtc2cpLmdldF9mbGFncygpID09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCByZXN1bHQpCiAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgZm9yIGxhYmVsIGluICgndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywKICAgICAgICAgICAgICAgICAgICAgICAnZWRpdGVkJywgJ3Jlc2VudCcpOgogICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChsYWJlbCkKICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCkgPT0gJ09EQScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCAnT0RBJykKIAogICAgIGRlZiB0ZXN0X2JhYnlsX3RvX21oKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIE1ITWVzc2FnZQpAQCAtMTUzNSwxMyArMTU3NiwxMyBAQAogICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgogICAgICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChzZXR0aW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1haWxib3guTUhNZXNzYWdlKG1zZykuZ2V0X3NlcXVlbmNlcygpID09IHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCksIHJlc3VsdCkKICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQogICAgICAgICBmb3IgbGFiZWwgaW4gKCd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLAogICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CiAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQotICAgICAgICBzZWxmLmFzc2VydF8obWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCkgPT0gXAotICAgICAgICAgICAgICAgICAgICAgWyd1bnNlZW4nLCAncmVwbGllZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTUhNZXNzYWdlKG1zZykuZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5zZWVuJywgJ3JlcGxpZWQnXSkKIAogICAgIGRlZiB0ZXN0X2JhYnlsX3RvX2JhYnlsKHNlbGYpOgogICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIEJhYnlsTWVzc2FnZQpAQCAtMTU1MSwxMiArMTU5MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CiAgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQogICAgICAgICBtc2cyID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UobXNnKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnMi5nZXRfbGFiZWxzKCkgPT0gWyd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsICdlZGl0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNlbnQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKSA9PSBtc2cyLmdldF92aXNpYmxlKCkua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuZ2V0X2xhYmVscygpLCBbJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLCAnZWRpdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNlbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCksIG1zZzIuZ2V0X3Zpc2libGUoKS5rZXlzKCkpCiAgICAgICAgIGZvciBrZXkgaW4gbXNnLmdldF92aXNpYmxlKCkua2V5cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXRfdmlzaWJsZSgpW2tleV0gPT0gbXNnMi5nZXRfdmlzaWJsZSgpW2tleV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfdmlzaWJsZSgpW2tleV0sIG1zZzIuZ2V0X3Zpc2libGUoKVtrZXldKQogCiAKIGNsYXNzIFRlc3RQcm94eUZpbGVCYXNlKFRlc3RCYXNlKToKQEAgLTE1NjQsNjkgKzE2MDUsNjYgQEAKICAgICBkZWYgX3Rlc3RfcmVhZChzZWxmLCBwcm94eSk6CiAgICAgICAgICMgUmVhZCBieSBieXRlCiAgICAgICAgIHByb3h5LnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoKSA9PSAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKCksICdiYXInKQogICAgICAgICBwcm94eS5zZWVrKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKCkgPT0gJ2FyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKCksICdhcicpCiAgICAgICAgIHByb3h5LnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWQoMikgPT0gJ2JhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKDIpLCAnYmEnKQogICAgICAgICBwcm94eS5zZWVrKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKC0xKSA9PSAnYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoLTEpLCAnYXInKQogICAgICAgICBwcm94eS5zZWVrKDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKDEwMDApID09ICdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKDEwMDApLCAncicpCiAKICAgICBkZWYgX3Rlc3RfcmVhZGxpbmUoc2VsZiwgcHJveHkpOgogICAgICAgICAjIFJlYWQgYnkgbGluZQogICAgICAgICBwcm94eS5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgpID09ICdmb28nICsgb3MubGluZXNlcCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lKCkgPT0gJ2JhcicgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoKSA9PSAnZnJlZCcgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoKSA9PSAnYm9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnZm9vJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2JhcicgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdmcmVkJyArIG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2JvYicpCiAgICAgICAgIHByb3h5LnNlZWsoMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lKCkgPT0gJ28nICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnbycgKyBvcy5saW5lc2VwKQogICAgICAgICBwcm94eS5zZWVrKDYgKyAyICogbGVuKG9zLmxpbmVzZXApKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoKSA9PSAnZnJlZCcgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdmcmVkJyArIG9zLmxpbmVzZXApCiAgICAgICAgIHByb3h5LnNlZWsoNiArIDIgKiBsZW4ob3MubGluZXNlcCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZSgyKSA9PSAnZnInKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmUoLTEwKSA9PSAnZWQnICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgyKSwgJ2ZyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgtMTApLCAnZWQnICsgb3MubGluZXNlcCkKIAogICAgIGRlZiBfdGVzdF9yZWFkbGluZXMoc2VsZiwgcHJveHkpOgogICAgICAgICAjIFJlYWQgbXVsdGlwbGUgbGluZXMKICAgICAgICAgcHJveHkuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmVzKCkgPT0gWydmb28nICsgb3MubGluZXNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFyJyArIG9zLmxpbmVzZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lcygpLCBbJ2ZvbycgKyBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFyJyArIG9zLmxpbmVzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcmVkJyArIG9zLmxpbmVzZXAsICdib2InXSkKICAgICAgICAgcHJveHkuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZGxpbmVzKDIpID09IFsnZm9vJyArIG9zLmxpbmVzZXBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lcygyKSwgWydmb28nICsgb3MubGluZXNlcF0pCiAgICAgICAgIHByb3h5LnNlZWsoMyArIGxlbihvcy5saW5lc2VwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnJlYWRsaW5lcyg0ICsgbGVuKG9zLmxpbmVzZXApKSA9PQotICAgICAgICAgICAgICAgICAgICAgWydiYXInICsgb3MubGluZXNlcCwgJ2ZyZWQnICsgb3MubGluZXNlcF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDQgKyBsZW4ob3MubGluZXNlcCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYmFyJyArIG9zLmxpbmVzZXAsICdmcmVkJyArIG9zLmxpbmVzZXBdKQogICAgICAgICBwcm94eS5zZWVrKDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkbGluZXMoMTAwMCkgPT0gW29zLmxpbmVzZXAsICdiYXInICsgb3MubGluZXNlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lcygxMDAwKSwgW29zLmxpbmVzZXAsICdiYXInICsgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCiAKICAgICBkZWYgX3Rlc3RfaXRlcmF0aW9uKHNlbGYsIHByb3h5KToKICAgICAgICAgIyBJdGVyYXRlIGJ5IGxpbmUKICAgICAgICAgcHJveHkuc2VlaygwKQogICAgICAgICBpdGVyYXRvciA9IGl0ZXIocHJveHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpdGVyYXRvci5uZXh0KCkgPT0gJ2ZvbycgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXRlcmF0b3IubmV4dCgpID09ICdiYXInICsgb3MubGluZXNlcCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGl0ZXJhdG9yLm5leHQoKSA9PSAnZnJlZCcgKyBvcy5saW5lc2VwKQotICAgICAgICBzZWxmLmFzc2VydF8oaXRlcmF0b3IubmV4dCgpID09ICdib2InKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBsYW1iZGE6IGl0ZXJhdG9yLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0ZXJhdG9yKSwKKyAgICAgICAgICAgIFsnZm9vJyArIG9zLmxpbmVzZXAsICdiYXInICsgb3MubGluZXNlcCwgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQogCiAgICAgZGVmIF90ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZiwgcHJveHkpOgogICAgICAgICAjIFNlZWsgYW5kIHVzZSB0ZWxsIHRvIGNoZWNrIHBvc2l0aW9uCiAgICAgICAgIHByb3h5LnNlZWsoMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LnRlbGwoKSA9PSAzKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZChsZW4ob3MubGluZXNlcCkpID09IG9zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkudGVsbCgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQobGVuKG9zLmxpbmVzZXApKSwgb3MubGluZXNlcCkKICAgICAgICAgcHJveHkuc2VlaygyLCAxKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZCgxICsgbGVuKG9zLmxpbmVzZXApKSA9PSAncicgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMSArIGxlbihvcy5saW5lc2VwKSksICdyJyArIG9zLmxpbmVzZXApCiAgICAgICAgIHByb3h5LnNlZWsoLTMgLSBsZW4ob3MubGluZXNlcCksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKDMpID09ICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMyksICdiYXInKQogICAgICAgICBwcm94eS5zZWVrKDIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhwcm94eS5yZWFkKCkgPT0gJ28nICsgb3MubGluZXNlcCArICdiYXInICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKCksICdvJyArIG9zLmxpbmVzZXAgKyAnYmFyJyArIG9zLmxpbmVzZXApCiAgICAgICAgIHByb3h5LnNlZWsoMTAwKQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkucmVhZCgpID09ICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJycpCiAKICAgICBkZWYgX3Rlc3RfY2xvc2Uoc2VsZiwgcHJveHkpOgogICAgICAgICAjIENsb3NlIGEgZmlsZQpAQCAtMTY0OSwxMSArMTY4NywxMSBAQAogICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28nKQogICAgICAgICBwb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICBwcm94eTAgPSBtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5MC50ZWxsKCkgPT0gcG9zKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5fZmlsZS50ZWxsKCkgPT0gcG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5MC50ZWxsKCksIHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9maWxlLnRlbGwoKSwgcG9zKQogICAgICAgICBwcm94eTEgPSBtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5MS50ZWxsKCkgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuX2ZpbGUudGVsbCgpID09IHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eTEudGVsbCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2ZpbGUudGVsbCgpLCBwb3MpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdiYXInKQpAQCAtMTY5OCw4ICsxNzM2LDggQEAKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnZm9vJyArIG9zLmxpbmVzZXAgKyAnYmFyJykKICAgICAgICAgcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKICAgICAgICAgcHJveHkgPSBtYWlsYm94Ll9QYXJ0aWFsRmlsZShzZWxmLl9maWxlLCAyLCA1KQotICAgICAgICBzZWxmLmFzc2VydF8ocHJveHkudGVsbCgpID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLl9maWxlLnRlbGwoKSA9PSBwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkudGVsbCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2ZpbGUudGVsbCgpLCBwb3MpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBzZWxmLl9maWxlLndyaXRlKCcqKipiYXIqKionKQpAQCAtMTc3MSwxOCArMTgwOSwxNiBAQAogICAgICAgICBmaWxlbmFtZSA9IG9zLmV4dHNlcC5qb2luKChzdHIodCksIHN0cihwaWQpLCAibXlob3N0bmFtZSIsICJteWRvbWFpbiIpKQogICAgICAgICB0bXBuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX2RpciwgInRtcCIsIGZpbGVuYW1lKQogICAgICAgICBuZXduYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX2RpciwgZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgZnAgPSBvcGVuKHRtcG5hbWUsICJ3IikKLSAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKHRtcG5hbWUpCi0gICAgICAgIGlmIG1ib3g6Ci0gICAgICAgICAgICBmcC53cml0ZShGUk9NXykKLSAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZCh0bXBuYW1lKQorICAgICAgICAgICAgaWYgbWJveDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShGUk9NXykKKyAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCiAgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CiAgICAgICAgICAgICBvcy5saW5rKHRtcG5hbWUsIG5ld25hbWUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcCA9IG9wZW4obmV3bmFtZSwgInciKQotICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihuZXduYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCiAgICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZChuZXduYW1lKQogICAgICAgICByZXR1cm4gdG1wbmFtZQogCkBAIC0xNzkxLDM2ICsxODI3LDM2IEBACiAgICAgICAgICMgVGVzdCBmb3IgcmVncmVzc2lvbiBvbiBidWcgIzExNzQ5MDoKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGJveGVzIGF0dHJpYnV0ZSBhY3R1YWxseSBnZXRzIHNldC4KICAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICNzZWxmLmFzc2VydF8oaGFzYXR0cihzZWxmLm1ib3gsICJib3hlcyIpKQotICAgICAgICAjc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgICNzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1ib3gsICJib3hlcyIpKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9jdXIoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKICAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICNzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfbmV3KHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAjc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCiAKICAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2JvdGgoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgI3NlbGYuYXNzZXJ0XyhsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAyKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQogCiAgICAgZGVmIHRlc3RfdW5peF9tYm94KHNlbGYpOgogICAgICAgICAjIyMgc2hvdWxkIGJlIGJldHRlciEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQppbmRleCAxMzY1ODUxLi4xMGE1MTYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CkBAIC0xMjksNyArMTI5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKICAgICAgICAgZm9yIHMgaW4gWyIiLCAiQW5kcuggUHJldmluIiwgImFiYyIsICIgIioxMDAwMF06Ci0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgICAgICBiID0gYnVmZmVyKHMpCiAgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoYikpCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICAgIHQgPSBjb25zdHJ1Y3RvcihzZWxmLmQua2V5cygpKQogICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBuZXcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShuZXcsIGNvbnN0cnVjdG9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG5ldywgY29uc3RydWN0b3IpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZCh0KSwgaWQobmV3KSkKICAgICAgICAgICAgIG1hcnNoYWwuZHVtcCh0LCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQogICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCkBAIC0yMTAsOCArMjEwLDggQEAKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fYXJndW1lbnQoc2VsZik6CiAgICAgICAgICMgUHl0aG9uIDIuNC4wIGNyYXNoZXMgZm9yIGFueSBjYWxsIHRvIG1hcnNoYWwuZHVtcHMoeCwgeSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKDUsIDApKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKDUsIDEpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoNSwgMCkpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyg1LCAxKSksIDUpCiAKICAgICBkZWYgdGVzdF9mdXp6KHNlbGYpOgogICAgICAgICAjIHNpbXBsZSB0ZXN0IHRoYXQgaXQncyBhdCBsZWFzdCBub3QgKnRvdGFsbHkqIHRyaXZpYWwgdG8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbWF0aC5weQppbmRleCA5MDg5MDEzLi45NzNkMWFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYXRoLnB5CkBAIC03LDIwICs3LDEwMyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CiAKIGVwcyA9IDFFLTA1CiBOQU4gPSBmbG9hdCgnbmFuJykKIElORiA9IGZsb2F0KCdpbmYnKQogTklORiA9IGZsb2F0KCctaW5mJykKIAorIyBkZWNvcmF0b3IgZm9yIHNraXBwaW5nIHRlc3RzIG9uIG5vbi1JRUVFIDc1NCBwbGF0Zm9ybXMKK3JlcXVpcmVzX0lFRUVfNzU0ID0gdW5pdHRlc3Quc2tpcFVubGVzcygKKyAgICBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisKKyMgZGV0ZWN0IGV2aWRlbmNlIG9mIGRvdWJsZS1yb3VuZGluZzogZnN1bSBpcyBub3QgYWx3YXlzIGNvcnJlY3RseQorIyByb3VuZGVkIG9uIG1hY2hpbmVzIHRoYXQgc3VmZmVyIGZyb20gZG91YmxlIHJvdW5kaW5nLgoreCwgeSA9IDFlMTYsIDIuOTk5OSAjIHVzZSB0ZW1wb3JhcnkgdmFsdWVzIHRvIGRlZmVhdCBwZWVwaG9sZSBvcHRpbWl6ZXIKK0hBVkVfRE9VQkxFX1JPVU5ESU5HID0gKHggKyB5ID09IDFlMTYgKyA0KQorCiAjIGxvY2F0ZSBmaWxlIHdpdGggdGVzdCB2YWx1ZXMKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgZmlsZSA9IHN5cy5hcmd2WzBdCiBlbHNlOgogICAgIGZpbGUgPSBfX2ZpbGVfXwogdGVzdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZSkgb3Igb3MuY3VyZGlyCittYXRoX3Rlc3RjYXNlcyA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ21hdGhfdGVzdGNhc2VzLnR4dCcpCiB0ZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdjbWF0aF90ZXN0Y2FzZXMudHh0JykKIAorZGVmIHRvX3VscHMoeCk6CisgICAgIiIiQ29udmVydCBhIG5vbi1OYU4gZmxvYXQgeCB0byBhbiBpbnRlZ2VyLCBpbiBzdWNoIGEgd2F5IHRoYXQKKyAgICBhZGphY2VudCBmbG9hdHMgYXJlIGNvbnZlcnRlZCB0byBhZGphY2VudCBpbnRlZ2Vycy4gIFRoZW4KKyAgICBhYnModWxwcyh4KSAtIHVscHMoeSkpIGdpdmVzIHRoZSBkaWZmZXJlbmNlIGluIHVscHMgYmV0d2VlbiB0d28KKyAgICBmbG9hdHMuCisKKyAgICBUaGUgcmVzdWx0cyBmcm9tIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IG1ha2Ugc2Vuc2Ugb24gcGxhdGZvcm1zCisgICAgd2hlcmUgQyBkb3VibGVzIGFyZSByZXByZXNlbnRlZCBpbiBJRUVFIDc1NCBiaW5hcnk2NCBmb3JtYXQuCisKKyAgICAiIiIKKyAgICBuID0gc3RydWN0LnVucGFjaygnPHEnLCBzdHJ1Y3QucGFjaygnPGQnLCB4KSlbMF0KKyAgICBpZiBuIDwgMDoKKyAgICAgICAgbiA9IH4obisyKio2MykKKyAgICByZXR1cm4gbgorCitkZWYgdWxwc19jaGVjayhleHBlY3RlZCwgZ290LCB1bHBzPTIwKToKKyAgICAiIiJHaXZlbiBub24tTmFOIGZsb2F0cyBgZXhwZWN0ZWRgIGFuZCBgZ290YCwKKyAgICBjaGVjayB0aGF0IHRoZXkncmUgZXF1YWwgdG8gd2l0aGluIHRoZSBnaXZlbiBudW1iZXIgb2YgdWxwcy4KKworICAgIFJldHVybnMgTm9uZSBvbiBzdWNjZXNzIGFuZCBhbiBlcnJvciBtZXNzYWdlIG9uIGZhaWx1cmUuIiIiCisKKyAgICB1bHBzX2Vycm9yID0gdG9fdWxwcyhnb3QpIC0gdG9fdWxwcyhleHBlY3RlZCkKKyAgICBpZiBhYnModWxwc19lcnJvcikgPD0gdWxwczoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gImVycm9yID0ge30gdWxwczsgcGVybWl0dGVkIGVycm9yID0ge30gdWxwcyIuZm9ybWF0KHVscHNfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bHBzKQorCitkZWYgYWNjX2NoZWNrKGV4cGVjdGVkLCBnb3QsIHJlbF9lcnI9MmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgorICAgICIiIkRldGVybWluZSB3aGV0aGVyIG5vbi1OYU4gZmxvYXRzIGEgYW5kIGIgYXJlIGVxdWFsIHRvIHdpdGhpbiBhCisgICAgKHNtYWxsKSByb3VuZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcmVsX2VyciBhbmQKKyAgICBhYnNfZXJyIGFyZSBjaG9zZW4gdG8gYmUgc3VpdGFibGUgZm9yIHBsYXRmb3JtcyB3aGVyZSBhIGZsb2F0IGlzCisgICAgcmVwcmVzZW50ZWQgYnkgYW4gSUVFRSA3NTQgZG91YmxlLiAgVGhleSBhbGxvdyBhbiBlcnJvciBvZiBiZXR3ZWVuCisgICAgOSBhbmQgMTkgdWxwcy4iIiIKKworICAgICMgbmVlZCB0byBzcGVjaWFsIGNhc2UgaW5maW5pdGllcywgc2luY2UgaW5mIC0gaW5mIGdpdmVzIG5hbgorICAgIGlmIG1hdGguaXNpbmYoZXhwZWN0ZWQpIGFuZCBnb3QgPT0gZXhwZWN0ZWQ6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBlcnJvciA9IGdvdCAtIGV4cGVjdGVkCisKKyAgICBwZXJtaXR0ZWRfZXJyb3IgPSBtYXgoYWJzX2VyciwgcmVsX2VyciAqIGFicyhleHBlY3RlZCkpCisgICAgaWYgYWJzKGVycm9yKSA8IHBlcm1pdHRlZF9lcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gImVycm9yID0ge307IHBlcm1pdHRlZCBlcnJvciA9IHt9Ii5mb3JtYXQoZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZF9lcnJvcikKKworZGVmIHBhcnNlX210ZXN0ZmlsZShmbmFtZSk6CisgICAgIiIiUGFyc2UgYSBmaWxlIHdpdGggdGVzdCB2YWx1ZXMKKworICAgIC0tIHN0YXJ0cyBhIGNvbW1lbnQKKyAgICBibGFuayBsaW5lcywgb3IgbGluZXMgY29udGFpbmluZyBvbmx5IGEgY29tbWVudCwgYXJlIGlnbm9yZWQKKyAgICBvdGhlciBsaW5lcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgZm9ybQorICAgICAgaWQgZm4gYXJnIC0+IGV4cGVjdGVkIFtmbGFnXSoKKworICAgICIiIgorICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZnA6CisgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgIyBzdHJpcCBjb21tZW50cywgYW5kIHNraXAgYmxhbmsgbGluZXMKKyAgICAgICAgICAgIGlmICctLScgaW4gbGluZToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6bGluZS5pbmRleCgnLS0nKV0KKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGhzLCByaHMgPSBsaW5lLnNwbGl0KCctPicpCisgICAgICAgICAgICBpZCwgZm4sIGFyZyA9IGxocy5zcGxpdCgpCisgICAgICAgICAgICByaHNfcGllY2VzID0gcmhzLnNwbGl0KCkKKyAgICAgICAgICAgIGV4cCA9IHJoc19waWVjZXNbMF0KKyAgICAgICAgICAgIGZsYWdzID0gcmhzX3BpZWNlc1sxOl0KKworICAgICAgICAgICAgeWllbGQgKGlkLCBmbiwgZmxvYXQoYXJnKSwgZmxvYXQoZXhwKSwgZmxhZ3MpCisKIGRlZiBwYXJzZV90ZXN0ZmlsZShmbmFtZSk6CiAgICAgIiIiUGFyc2UgYSBmaWxlIHdpdGggdGVzdCB2YWx1ZXMKIApAQCAtNjcsNyArMTUwLDcgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnYWNvcygxKScsIG1hdGguYWNvcygxKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvcywgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hY29zKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFjb3MoTkFOKSkpCiAKICAgICBkZWYgdGVzdEFjb3NoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYWNvc2gpCkBAIC03NSw5ICsxNTgsOSBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zaCgyKScsIG1hdGguYWNvc2goMiksIDEuMzE2OTU3ODk2OTI0ODE2OCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguYWNvc2goSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYWNvc2goSU5GKSwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmFjb3NoKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFjb3NoKE5BTikpKQogCiAgICAgZGVmIHRlc3RBc2luKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXNpbikKQEAgLTg2LDE2ICsxNjksMTYgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnYXNpbigxKScsIG1hdGguYXNpbigxKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFzaW4sIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hc2luLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmFzaW4oTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXNpbihOQU4pKSkKIAogICAgIGRlZiB0ZXN0QXNpbmgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hc2luaCkKICAgICAgICAgc2VsZi5mdGVzdCgnYXNpbmgoMCknLCBtYXRoLmFzaW5oKDApLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luaCgxKScsIG1hdGguYXNpbmgoMSksIDAuODgxMzczNTg3MDE5NTQzMDUpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2FzaW5oKC0xKScsIG1hdGguYXNpbmgoLTEpLCAtMC44ODEzNzM1ODcwMTk1NDMwNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5hc2luaChJTkYpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguYXNpbmgoTklORiksIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXNpbmgoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hc2luaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hc2luaChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hc2luaChOQU4pKSkKIAogICAgIGRlZiB0ZXN0QXRhbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmF0YW4pCkBAIC0xMDQsNyArMTg3LDcgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbigxKScsIG1hdGguYXRhbigxKSwgbWF0aC5waS80KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKGluZiknLCBtYXRoLmF0YW4oSU5GKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKC1pbmYpJywgbWF0aC5hdGFuKE5JTkYpLCAtbWF0aC5waS8yKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4oTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbihOQU4pKSkKIAogICAgIGRlZiB0ZXN0QXRhbmgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hdGFuKQpAQCAtMTE1LDcgKzE5OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmF0YW5oLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYXRhbmgsIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbmgoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbmgoTkFOKSkpCiAKICAgICBkZWYgdGVzdEF0YW4yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbjIpCkBAIC0xMzIsNyArMjE1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKDAuLCAwLiksIDAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIDIuMyksIDAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIElORiksIDAuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKDAuLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMigwLiwgTkFOKSkpCiAgICAgICAgICMgbWF0aC5hdGFuMigtMCwgeCkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTAuLCAtaW5mKScsIG1hdGguYXRhbjIoLTAuLCBOSU5GKSwgLW1hdGgucGkpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0wLiwgLTIuMyknLCBtYXRoLmF0YW4yKC0wLiwgLTIuMyksIC1tYXRoLnBpKQpAQCAtMTQwLDcgKzIyMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMC4sIDAuKSwgLTAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTAuLCAyLjMpLCAtMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMC4sIElORiksIC0wLikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMigtMC4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKC0wLiwgTkFOKSkpCiAgICAgICAgICMgbWF0aC5hdGFuMihJTkYsIHgpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgLWluZiknLCBtYXRoLmF0YW4yKElORiwgTklORiksIG1hdGgucGkqMy80KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIC0yLjMpJywgbWF0aC5hdGFuMihJTkYsIC0yLjMpLCBtYXRoLnBpLzIpCkBAIC0xNDgsNyArMjMxLDcgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoaW5mLCAwLiknLCBtYXRoLmF0YW4yKElORiwgMC4wKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIDIuMyknLCBtYXRoLmF0YW4yKElORiwgMi4zKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIGluZiknLCBtYXRoLmF0YW4yKElORiwgSU5GKSwgbWF0aC5waS80KQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKElORiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoSU5GLCBOQU4pKSkKICAgICAgICAgIyBtYXRoLmF0YW4yKE5JTkYsIHgpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIC1pbmYpJywgbWF0aC5hdGFuMihOSU5GLCBOSU5GKSwgLW1hdGgucGkqMy80KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtaW5mLCAtMi4zKScsIG1hdGguYXRhbjIoTklORiwgLTIuMyksIC1tYXRoLnBpLzIpCkBAIC0xNTYsNDMgKzIzOSw0MyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtaW5mLCAwLiknLCBtYXRoLmF0YW4yKE5JTkYsIDAuMCksIC1tYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIDIuMyknLCBtYXRoLmF0YW4yKE5JTkYsIDIuMyksIC1tYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIGluZiknLCBtYXRoLmF0YW4yKE5JTkYsIElORiksIC1tYXRoLnBpLzQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTklORiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTklORiwgTkFOKSkpCiAgICAgICAgICMgbWF0aC5hdGFuMigrZmluaXRlLCB4KQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIC1pbmYpJywgbWF0aC5hdGFuMigyLjMsIE5JTkYpLCBtYXRoLnBpKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIC0wLiknLCBtYXRoLmF0YW4yKDIuMywgLTAuKSwgbWF0aC5waS8yKQogICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIDAuKScsIG1hdGguYXRhbjIoMi4zLCAwLiksIG1hdGgucGkvMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKDIuMywgSU5GKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoMi4zLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMigyLjMsIE5BTikpKQogICAgICAgICAjIG1hdGguYXRhbjIoLWZpbml0ZSwgeCkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgLWluZiknLCBtYXRoLmF0YW4yKC0yLjMsIE5JTkYpLCAtbWF0aC5waSkKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgLTAuKScsIG1hdGguYXRhbjIoLTIuMywgLTAuKSwgLW1hdGgucGkvMikKICAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTIuMywgMC4pJywgbWF0aC5hdGFuMigtMi4zLCAwLiksIC1tYXRoLnBpLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMi4zLCBJTkYpLCAtMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoLTIuMywgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoLTIuMywgTkFOKSkpCiAgICAgICAgICMgbWF0aC5hdGFuMihOQU4sIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBOSU5GKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMi4zKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMC4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIDAuKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAyLjMpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIElORikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBOSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMi4zKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAtMC4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIDAuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAyLjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgTkFOKSkpCiAKICAgICBkZWYgdGVzdENlaWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsKQogICAgICAgICAjIFRoZXNlIHR5cGVzIHdpbGwgYmUgaW50IGluIHB5M2suCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxTCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmbG9hdCwgdHlwZShtYXRoLmNlaWwoMS4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmNlaWwoMUwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmNlaWwoMS4wKSkpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoMC41KScsIG1hdGguY2VpbCgwLjUpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKDEuMCknLCBtYXRoLmNlaWwoMS4wKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgxLjUpJywgbWF0aC5jZWlsKDEuNSksIDIpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTAuNSknLCBtYXRoLmNlaWwoLTAuNSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoLTEuMCknLCBtYXRoLmNlaWwoLTEuMCksIC0xKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKC0xLjUpJywgbWF0aC5jZWlsKC0xLjUpLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jZWlsKElORiksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jZWlsKE5JTkYpLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmNlaWwoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jZWlsKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY2VpbChOQU4pKSkKIAogICAgICAgICBjbGFzcyBUZXN0Q2VpbChvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKQEAgLTIwNywzOSArMjkwLDM5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsLCB0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCwgdCwgMCkKIAotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgZGVmIHRlc3RDb3B5c2lnbihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLCA0MiksIDEuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigwLiwgNDIpLCAwLjApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIC00MiksIC0xLjApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMywgMC4pLCAzLjApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oNC4sIC0wLiksIC00LjApCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RDb3B5c2lnbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEsIDQyKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMC4sIDQyKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIC00MiksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigzLCAwLiksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDQuLCAtMC4pLCAtNC4wKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29weXNpZ24pCi0gICAgICAgICAgICAjIGNvcHlzaWduIHNob3VsZCBsZXQgdXMgZGlzdGluZ3Vpc2ggc2lnbnMgb2YgemVyb3MKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oMS4sIDAuKSwgMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKDEuLCAtMC4pLCAtMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKElORiwgMC4pLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKElORiwgLTAuKSwgTklORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oTklORiwgMC4pLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKE5JTkYsIC0wLiksIE5JTkYpCi0gICAgICAgICAgICAjIGFuZCBvZiBpbmZpbml0aWVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKDEuLCBJTkYpLCAxLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29weXNpZ24oMS4sIE5JTkYpLCAtMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKElORiwgSU5GKSwgSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3B5c2lnbihJTkYsIE5JTkYpLCBOSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5jb3B5c2lnbihOSU5GLCBJTkYpLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNvcHlzaWduKE5JTkYsIE5JTkYpLCBOSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIDEuKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgSU5GKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgTklORikpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIE5BTikpKQotICAgICAgICAgICAgIyBjb3B5c2lnbihJTkYsIE5BTikgbWF5IGJlIElORiBvciBpdCBtYXkgYmUgTklORiwgc2luY2UKLSAgICAgICAgICAgICMgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBzaWduIGJpdCBvZiBOQU4gaXMgc2V0IG9uIGFueQotICAgICAgICAgICAgIyBnaXZlbiBwbGF0Zm9ybS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKG1hdGguY29weXNpZ24oSU5GLCBOQU4pKSkKLSAgICAgICAgICAgICMgc2ltaWxhcmx5LCBjb3B5c2lnbigyLiwgTkFOKSBjb3VsZCBiZSAyLiBvciAtMi4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFicyhtYXRoLmNvcHlzaWduKDIuLCBOQU4pKSwgMi4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3B5c2lnbikKKyAgICAgICAgIyBjb3B5c2lnbiBzaG91bGQgbGV0IHVzIGRpc3Rpbmd1aXNoIHNpZ25zIG9mIHplcm9zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAtMC4pLCAtMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIDAuKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCAtMC4pLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgMC4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCAtMC4pLCBOSU5GKQorICAgICAgICAjIGFuZCBvZiBpbmZpbml0aWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgSU5GKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgTklORiksIC0xLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCBOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgMS4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgTklORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgTkFOKSkpCisgICAgICAgICMgY29weXNpZ24oSU5GLCBOQU4pIG1heSBiZSBJTkYgb3IgaXQgbWF5IGJlIE5JTkYsIHNpbmNlCisgICAgICAgICMgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBzaWduIGJpdCBvZiBOQU4gaXMgc2V0IG9uIGFueQorICAgICAgICAjIGdpdmVuIHBsYXRmb3JtLgorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihtYXRoLmNvcHlzaWduKElORiwgTkFOKSkpCisgICAgICAgICMgc2ltaWxhcmx5LCBjb3B5c2lnbigyLiwgTkFOKSBjb3VsZCBiZSAyLiBvciAtMi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMobWF0aC5jb3B5c2lnbigyLiwgTkFOKSksIDIuKQogCiAgICAgZGVmIHRlc3RDb3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3MpCkBAIC0yNDgsMjAgKzMzMSwyMCBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MocGkvMiknLCBtYXRoLmNvcyhtYXRoLnBpLzIpLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MocGkpJywgbWF0aC5jb3MobWF0aC5waSksIC0xKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmNvcyhJTkYpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguY29zKE5JTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29zKElORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3MoTklORikpKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguY29zLCBJTkYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmNvcywgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5jb3MoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29zKE5BTikpKQogCiAgICAgZGVmIHRlc3RDb3NoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29zaCkKICAgICAgICAgc2VsZi5mdGVzdCgnY29zaCgwKScsIG1hdGguY29zaCgwKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnY29zaCgyKS0yKmNvc2goMSkqKjInLCBtYXRoLmNvc2goMiktMiptYXRoLmNvc2goMSkqKjIsIC0xKSAjIFRoYW5rcyB0byBMYW1iZXJ0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29zaChJTkYpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguY29zaChOSU5GKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmNvc2goTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3NoKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvc2goTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3NoKE5BTikpKQogCiAgICAgZGVmIHRlc3REZWdyZWVzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZGVncmVlcykKQEAgLTI3NCw5ICszNTcsOSBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdleHAoLTEpJywgbWF0aC5leHAoLTEpLCAxL21hdGguZSkKICAgICAgICAgc2VsZi5mdGVzdCgnZXhwKDApJywgbWF0aC5leHAoMCksIDEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ2V4cCgxKScsIG1hdGguZXhwKDEpLCBtYXRoLmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZXhwKElORiksIElORikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5leHAoTklORiksIDAuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmV4cChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmV4cChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5leHAoTklORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmV4cChOQU4pKSkKIAogICAgIGRlZiB0ZXN0RmFicyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZhYnMpCkBAIC0zMDEsOSArMzg0LDkgQEAKICAgICBkZWYgdGVzdEZsb29yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IpCiAgICAgICAgICMgVGhlc2UgdHlwZXMgd2lsbCBiZSBpbnQgaW4gcHkzay4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQsIHR5cGUobWF0aC5mbG9vcigxKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZsb2F0LCB0eXBlKG1hdGguZmxvb3IoMUwpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmxvYXQsIHR5cGUobWF0aC5mbG9vcigxLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDFMKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5mbG9vcigxLjApKSkKICAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMC41KScsIG1hdGguZmxvb3IoMC41KSwgMCkKICAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS4wKScsIG1hdGguZmxvb3IoMS4wKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS41KScsIG1hdGguZmxvb3IoMS41KSwgMSkKQEAgLTMxNCw5ICszOTcsOSBAQAogICAgICAgICAjIFRoaXMgZmFpbHMgb24gc29tZSBwbGF0Zm9ybXMgLSBzbyBjaGVjayBpdCBoZXJlCiAgICAgICAgIHNlbGYuZnRlc3QoJ2Zsb29yKDEuMjNlMTY3KScsIG1hdGguZmxvb3IoMS4yM2UxNjcpLCAxLjIzZTE2NykKICAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuMjNlMTY3KScsIG1hdGguZmxvb3IoLTEuMjNlMTY3KSwgLTEuMjNlMTY3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNlaWwoSU5GKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmNlaWwoTklORiksIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguZmxvb3IoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jZWlsKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZmxvb3IoTkFOKSkpCiAKICAgICAgICAgY2xhc3MgVGVzdEZsb29yKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgpAQCAtMzM5LDE5ICs0MjIsMTkgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgtMTAsMSknLCBtYXRoLmZtb2QoLTEwLDEpLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwwLjUpJywgbWF0aC5mbW9kKC0xMCwwLjUpLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKC0xMCwxLjUpJywgbWF0aC5mbW9kKC0xMCwxLjUpLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgMS4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5mbW9kKDEuLCBOQU4pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5mbW9kKE5BTiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZChOQU4sIDEuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZCgxLiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZChOQU4sIE5BTikpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIDEuLCAwLikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mbW9kLCBJTkYsIDEuKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIE5JTkYsIDEuKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIElORiwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZm1vZCgzLjAsIElORiksIDMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mbW9kKC0zLjAsIElORiksIC0zLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZm1vZCgzLjAsIE5JTkYpLCAzLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZm1vZCgtMy4wLCBOSU5GKSwgLTMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5mbW9kKDAuMCwgMy4wKSwgMC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmZtb2QoMC4wLCBOSU5GKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgzLjAsIElORiksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoLTMuMCwgSU5GKSwgLTMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoMy4wLCBOSU5GKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgtMy4wLCBOSU5GKSwgLTMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoMC4wLCAzLjApLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKDAuMCwgTklORiksIDAuMCkKIAogICAgIGRlZiB0ZXN0RnJleHAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mcmV4cCkKQEAgLTM2NywxMCArNDUwLDEzIEBACiAgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMSknLCBtYXRoLmZyZXhwKDEpLCAoMC41LCAxKSkKICAgICAgICAgdGVzdGZyZXhwKCdmcmV4cCgyKScsIG1hdGguZnJleHAoMiksICgwLjUsIDIpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguZnJleHAoSU5GKVswXSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmZyZXhwKE5JTkYpWzBdLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmZyZXhwKE5BTilbMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZnJleHAoSU5GKVswXSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZnJleHAoTklORilbMF0sIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZnJleHAoTkFOKVswXSkpCiAKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBAdW5pdHRlc3Quc2tpcElmKEhBVkVfRE9VQkxFX1JPVU5ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmc3VtIGlzIG5vdCBleGFjdCBvbiBtYWNoaW5lcyB3aXRoIGRvdWJsZSByb3VuZGluZyIpCiAgICAgZGVmIHRlc3RGc3VtKHNlbGYpOgogICAgICAgICAjIG1hdGguZnN1bSByZWxpZXMgb24gZXhhY3Qgcm91bmRpbmcgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLgogICAgICAgICAjIFRoZXJlJ3MgYSBrbm93biBwcm9ibGVtIHdpdGggSUEzMiBmbG9hdGluZy1wb2ludCB0aGF0IGNhdXNlcwpAQCAtMzgwLDE0ICs0NjYsNiBAQAogICAgICAgICAjIHByb2JsZW0gZGVzY3JpYmVkIGluIGlzc3VlICMyOTM3LCB3ZSBzaW1wbHkgc2tpcCB0aGUgd2hvbGUKICAgICAgICAgIyB0ZXN0LgogCi0gICAgICAgIGlmIG5vdCBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIG9uIElFRUUgNzU0IGNvbXBsaWFudCBtYWNoaW5lcywgYm90aCBvZiB0aGUgZXhwcmVzc2lvbnMKLSAgICAgICAgIyBiZWxvdyBzaG91bGQgcm91bmQgdG8gMTAwMDAwMDAwMDAwMDAwMDIuMC4KLSAgICAgICAgaWYgMWUxNisyLjAgIT0gMWUxNisyLjk5OTk6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICAjIFB5dGhvbiB2ZXJzaW9uIG9mIG1hdGguZnN1bSwgZm9yIGNvbXBhcmlzb24uICBVc2VzIGEKICAgICAgICAgIyBkaWZmZXJlbnQgYWxnb3JpdGhtIGJhc2VkIG9uIGZyZXhwLCBsZGV4cCBhbmQgaW50ZWdlcgogICAgICAgICAjIGFyaXRobWV0aWMuCkBAIC00NzUsOCArNTUzLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmh5cG90KElORiwgTkFOKSwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoTkFOLCBOSU5GKSwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoTklORiwgTkFOKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmh5cG90KDEuMCwgTkFOKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguaHlwb3QoTkFOLCAtMi4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguaHlwb3QoMS4wLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5oeXBvdChOQU4sIC0yLjApKSkKIAogICAgIGRlZiB0ZXN0TGRleHAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5sZGV4cCkKQEAgLTQ4NiwyOSArNTY0LDI5IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2xkZXhwKC0xLDEpJywgbWF0aC5sZGV4cCgtMSwxKSwgLTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGgubGRleHAsIDEuLCAxMDAwMDAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmxkZXhwLCAtMS4sIDEwMDAwMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoMS4sIC0xMDAwMDAwKSwgMC4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoLTEuLCAtMTAwMDAwMCksIC0wLikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cChJTkYsIDMwKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKE5JTkYsIC0yMTMpLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMS4sIC0xMDAwMDAwKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMS4sIC0xMDAwMDAwKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoSU5GLCAzMCksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIC0yMTMpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgMCkpKQogCiAgICAgICAgICMgbGFyZ2Ugc2Vjb25kIGFyZ3VtZW50CiAgICAgICAgIGZvciBuIGluIFsxMCoqNSwgMTBMKio1LCAxMCoqMTAsIDEwTCoqMTAsIDEwKioyMCwgMTAqKjQwXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoSU5GLCAtbiksIElORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoTklORiwgLW4pLCBOSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cCgxLiwgLW4pLCAwLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoLTEuLCAtbiksIC0wLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoMC4sIC1uKSwgMC4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKC0wLiwgLW4pLCAtMC4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgLW4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChJTkYsIC1uKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIC1uKSwgTklORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgxLiwgLW4pLCAwLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMS4sIC1uKSwgLTAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKDAuLCAtbiksIDAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKC0wLiwgLW4pLCAtMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxkZXhwKE5BTiwgLW4pKSkKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgMS4sIG4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmxkZXhwLCAtMS4sIG4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKDAuLCBuKSwgMC4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLmxkZXhwKC0wLiwgbiksIC0wLikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubGRleHAoSU5GLCBuKSwgSU5GKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sZGV4cChOSU5GLCBuKSwgTklORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCBuKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMC4sIG4pLCAwLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMC4sIG4pLCAtMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoSU5GLCBuKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKE5JTkYsIG4pLCBOSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sZGV4cChOQU4sIG4pKSkKIAogICAgIGRlZiB0ZXN0TG9nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nKQpAQCAtNTE4LDkgKzU5Niw5IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygzMiwyKScsIG1hdGgubG9nKDMyLDIpLCA1KQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMTAqKjQwLCAxMCknLCBtYXRoLmxvZygxMCoqNDAsIDEwKSwgNDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygxMCoqNDAsIDEwKioyMCknLCBtYXRoLmxvZygxMCoqNDAsIDEwKioyMCksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubG9nKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxvZyhJTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgubG9nLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLmxvZyhOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2coTkFOKSkpCiAKICAgICBkZWYgdGVzdExvZzFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nMXApCkBAIC01MjgsMjEgKzYwNiwyMSBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgwKScsIG1hdGgubG9nMXAoMCksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzFwKGUtMSknLCBtYXRoLmxvZzFwKG1hdGguZS0xKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoMSknLCBtYXRoLmxvZzFwKDEpLCBtYXRoLmxvZygyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sb2cxcChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sb2cxcChJTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgubG9nMXAsIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgubG9nMXAoTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubG9nMXAoTkFOKSkpCiAgICAgICAgIG49IDIqKjkwCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWxzKG1hdGgubG9nMXAobiksIDYyLjM4MzI0NjI1MDM5NTA3NSkKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMobWF0aC5sb2cxcChuKSwgbWF0aC5sb2cxcChmbG9hdChuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5sb2cxcChuKSwgNjIuMzgzMjQ2MjUwMzk1MDc1KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGgubG9nMXAobiksIG1hdGgubG9nMXAoZmxvYXQobikpKQogCiAgICAgZGVmIHRlc3RMb2cxMChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxvZzEwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgwLjEpJywgbWF0aC5sb2cxMCgwLjEpLCAtMSkKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nMTAoMSknLCBtYXRoLmxvZzEwKDEpLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgxMCknLCBtYXRoLmxvZzEwKDEwKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5sb2coSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxMCwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5sb2cxMChOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2cxMChOQU4pKSkKIAogICAgIGRlZiB0ZXN0TW9kZihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLm1vZGYpCkBAIC01NTYsMTIgKzYzNCwxMiBAQAogICAgICAgICB0ZXN0bW9kZignbW9kZigxLjUpJywgbWF0aC5tb2RmKDEuNSksICgwLjUsIDEuMCkpCiAgICAgICAgIHRlc3Rtb2RmKCdtb2RmKC0xLjUpJywgbWF0aC5tb2RmKC0xLjUpLCAoLTAuNSwgLTEuMCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWF0aC5tb2RmKElORiksICgwLjAsIElORikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGgubW9kZihOSU5GKSwgKC0wLjAsIE5JTkYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubW9kZihJTkYpLCAoMC4wLCBJTkYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubW9kZihOSU5GKSwgKC0wLjAsIE5JTkYpKQogCiAgICAgICAgIG1vZGZfbmFuID0gbWF0aC5tb2RmKE5BTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obW9kZl9uYW5bMF0pKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtb2RmX25hblsxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1vZGZfbmFuWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obW9kZl9uYW5bMV0pKQogCiAgICAgZGVmIHRlc3RQb3coc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5wb3cpCkBAIC01NzMsOSArNjUxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAxKSwgTklORikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobWF0aC5wb3coMSwgSU5GKSksIDEuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtYXRoLnBvdygxLCBOSU5GKSksIDEuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdyhOQU4sIDEpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5wb3coMiwgTkFOKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgucG93KDAsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdyhOQU4sIDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coMiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KDAsIE5BTikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEsIE5BTiksIDEpCiAKICAgICAgICAgIyBwb3coMC4sIHgpCkBAIC01ODksNyArNjY3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCAtMi4zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgMC4sIC0zLikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdygwLiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KDAuLCBOQU4pKSkKIAogICAgICAgICAjIHBvdyhJTkYsIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCBJTkYpLCBJTkYpCkBAIC02MDIsNyArNjgwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIC0yLjMpLCAwLikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIC0zLiksIDAuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgTklORiksIDAuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdyhJTkYsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdyhJTkYsIE5BTikpKQogCiAgICAgICAgICMgcG93KC0wLiwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4sIElORiksIDAuKQpAQCAtNjE1LDcgKzY5Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMC4sIC0yLjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMC4sIC0zLikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5wb3coLTAuLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coLTAuLCBOQU4pKSkKIAogICAgICAgICAjIHBvdyhOSU5GLCB4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIElORiksIElORikKQEAgLTYyOCw3ICs3MDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIC0yLjMpLCAwLikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAtMy4pLCAtMC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgTklORiksIDAuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdyhOSU5GLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coTklORiwgTkFOKSkpCiAKICAgICAgICAgIyBwb3coLTEsIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCBJTkYpLCAxLikKQEAgLTY0MSw3ICs3MTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTEuLCAtMi4zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgLTMuKSwgLTEuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgTklORiksIDEuKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnBvdygtMS4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygtMS4sIE5BTikpKQogCiAgICAgICAgICMgcG93KDEsIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIElORiksIDEuKQpAQCAtNzI0LDMwICs4MDIsMzAgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnc2luKHBpLzIpJywgbWF0aC5zaW4obWF0aC5waS8yKSwgMSkKICAgICAgICAgc2VsZi5mdGVzdCgnc2luKC1waS8yKScsIG1hdGguc2luKC1tYXRoLnBpLzIpLCAtMSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5zaW4oSU5GKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc25hbihtYXRoLnNpbihOSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNpbihJTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKE5JTkYpKSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnNpbiwgSU5GKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5zaW4sIE5JTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGguc2luKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNpbihOQU4pKSkKIAogICAgIGRlZiB0ZXN0U2luaChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnNpbmgpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NpbmgoMCknLCBtYXRoLnNpbmgoMCksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ3NpbmgoMSkqKjItY29zaCgxKSoqMicsIG1hdGguc2luaCgxKSoqMi1tYXRoLmNvc2goMSkqKjIsIC0xKQogICAgICAgICBzZWxmLmZ0ZXN0KCdzaW5oKDEpK3NpbmgoLTEpJywgbWF0aC5zaW5oKDEpK21hdGguc2luaCgtMSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguc2luaChJTkYpLCBJTkYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1hdGguc2luaChOSU5GKSwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5zaW5oKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguc2luaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5zaW5oKE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNpbmgoTkFOKSkpCiAKICAgICBkZWYgdGVzdFNxcnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5zcXJ0KQogICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDApJywgbWF0aC5zcXJ0KDApLCAwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDEpJywgbWF0aC5zcXJ0KDEpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCdzcXJ0KDQpJywgbWF0aC5zcXJ0KDQpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtYXRoLnNxcnQoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguc3FydChJTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguc3FydCwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC5zcXJ0KE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNxcnQoTkFOKSkpCiAKICAgICBkZWYgdGVzdFRhbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRhbikKQEAgLTc1NSwxMiArODMzLDEyIEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbihwaS80KScsIG1hdGgudGFuKG1hdGgucGkvNCksIDEpCiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbigtcGkvNCknLCBtYXRoLnRhbigtbWF0aC5waS80KSwgLTEpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtYXRoLmlzbmFuKG1hdGgudGFuKElORikpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC50YW4oTklORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW4oSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbihOSU5GKSkpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgudGFuLCBJTkYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnRhbiwgTklORikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC50YW4oTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgudGFuKE5BTikpKQogCiAgICAgZGVmIHRlc3RUYW5oKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudGFuaCkKQEAgLTc2OCw3ICs4NDYsNyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKDEpK3RhbmgoLTEpJywgbWF0aC50YW5oKDEpK21hdGgudGFuaCgtMSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoaW5mKScsIG1hdGgudGFuaChJTkYpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKC1pbmYpJywgbWF0aC50YW5oKE5JTkYpLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4obWF0aC50YW5oKE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbmgoTkFOKSkpCiAgICAgICAgICMgY2hlY2sgdGhhdCB0YW5oKC0wLikgPT0gLTAuIG9uIElFRUUgNzU0IHN5c3RlbXMKICAgICAgICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRhbmgoLTAuKSwgLTAuKQpAQCAtNzk4LDI5ICs4NzYsMjQgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudHJ1bmMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50cnVuYywgMSwgMikKLSAgICAgICAgIyBYWFg6IFRoaXMgaXMgbm90IGlkZWFsLCBidXQgc2VlIHRoZSBjb21tZW50IGluIG1hdGhfdHJ1bmMoKS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIG1hdGgudHJ1bmMsIFRlc3ROb1RydW5jKCkpCi0KLSAgICAgICAgdCA9IFRlc3ROb1RydW5jKCkKLSAgICAgICAgdC5fX3RydW5jX18gPSBsYW1iZGEgKmFyZ3M6IGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKCksIG1hdGgudHJ1bmModCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50cnVuYywgdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLCBtYXRoLnRydW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0Tm9UcnVuYygpKQogCiAgICAgZGVmIHRlc3RJc25hbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oZmxvYXQoIm5hbiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNuYW4oZmxvYXQoImluZiIpKiAwLikpCi0gICAgICAgIHNlbGYuZmFpbElmKG1hdGguaXNuYW4oZmxvYXQoImluZiIpKSkKLSAgICAgICAgc2VsZi5mYWlsSWYobWF0aC5pc25hbigwLikpCi0gICAgICAgIHNlbGYuZmFpbElmKG1hdGguaXNuYW4oMS4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihmbG9hdCgibmFuIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihmbG9hdCgiaW5mIikqIDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzbmFuKGZsb2F0KCJpbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc25hbigwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc25hbigxLikpCiAKICAgICBkZWYgdGVzdElzaW5mKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc2luZihmbG9hdCgiaW5mIikpKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc2luZihmbG9hdCgiLWluZiIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1hdGguaXNpbmYoMUU0MDApKQotICAgICAgICBzZWxmLmFzc2VydF8obWF0aC5pc2luZigtMUU0MDApKQotICAgICAgICBzZWxmLmZhaWxJZihtYXRoLmlzaW5mKGZsb2F0KCJuYW4iKSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG1hdGguaXNpbmYoMC4pKQotICAgICAgICBzZWxmLmZhaWxJZihtYXRoLmlzaW5mKDEuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoZmxvYXQoIi1pbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKDFFNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoLTFFNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2luZigwLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2luZigxLikpCiAKICAgICAjIFJFRF9GTEFHIDE2LU9jdC0yMDAwIFRpbQogICAgICMgV2hpbGUgMi4wIGlzIG1vcmUgY29uc2lzdGVudCBhYm91dCBleGNlcHRpb25zIHRoYW4gcHJldmlvdXMgcmVsZWFzZXMsIGl0CkBAIC04NjAsOSArOTMzLDggQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzcXJ0KC0xKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCiAKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKICAgICBkZWYgdGVzdF90ZXN0ZmlsZShzZWxmKToKLSAgICAgICAgaWYgbm90IGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBmb3IgaWQsIGZuLCBhciwgYWksIGVyLCBlaSwgZmxhZ3MgaW4gcGFyc2VfdGVzdGZpbGUodGVzdF9maWxlKToKICAgICAgICAgICAgICMgU2tpcCBpZiBlaXRoZXIgdGhlIGlucHV0IG9yIHJlc3VsdCBpcyBjb21wbGV4LCBvciBpZgogICAgICAgICAgICAgIyBmbGFncyBpcyBub25lbXB0eQpAQCAtODg0LDYgKzk1Niw2OSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtZXNzYWdlKQogICAgICAgICAgICAgc2VsZi5mdGVzdCgiJXM6JXMoJXIpIiAlIChpZCwgZm4sIGFyKSwgcmVzdWx0LCBlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9tdGVzdGZpbGUoc2VsZik6CisgICAgICAgIEFMTE9XRURfRVJST1IgPSAyMCAgIyBwZXJtaXR0ZWQgZXJyb3IsIGluIHVscHMKKyAgICAgICAgZmFpbF9mbXQgPSAie306e30oeyFyfSk6IGV4cGVjdGVkIHshcn0sIGdvdCB7IXJ9IgorCisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAgZm9yIGlkLCBmbiwgYXJnLCBleHBlY3RlZCwgZmxhZ3MgaW4gcGFyc2VfbXRlc3RmaWxlKG1hdGhfdGVzdGNhc2VzKToKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKG1hdGgsIGZuKQorCisgICAgICAgICAgICBpZiAnaW52YWxpZCcgaW4gZmxhZ3Mgb3IgJ2RpdmlkZS1ieS16ZXJvJyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICdWYWx1ZUVycm9yJworICAgICAgICAgICAgZWxpZiAnb3ZlcmZsb3cnIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gJ092ZXJmbG93RXJyb3InCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnb3QgPSBmdW5jKGFyZykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGdvdCA9ICdWYWx1ZUVycm9yJworICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgZ290ID0gJ092ZXJmbG93RXJyb3InCisKKyAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSBOb25lCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGdvdCwgZmxvYXQpIGFuZCBpc2luc3RhbmNlKGV4cGVjdGVkLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgaWYgbWF0aC5pc25hbihleHBlY3RlZCkgYW5kIG1hdGguaXNuYW4oZ290KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgbWF0aC5pc25hbihleHBlY3RlZCkgYW5kIG5vdCBtYXRoLmlzbmFuKGdvdCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZuID09ICdsZ2FtbWEnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSB1c2UgYSB3ZWFrZXIgYWNjdXJhY3kgdGVzdCBmb3IgbGdhbW1hOworICAgICAgICAgICAgICAgICAgICAgICAgIyBsZ2FtbWEgb25seSBhY2hpZXZlcyBhbiBhYnNvbHV0ZSBlcnJvciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIGZldyBtdWx0aXBsZXMgb2YgdGhlIG1hY2hpbmUgYWNjdXJhY3ksIGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIGdlbmVyYWwuCisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gYWNjX2NoZWNrKGV4cGVjdGVkLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbF9lcnIgPSA1ZS0xNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2VyciA9IDVlLTE1KQorICAgICAgICAgICAgICAgICAgICBlbGlmIGZuID09ICdlcmZjJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZXJmYyBoYXMgbGVzcy10aGFuLWlkZWFsIGFjY3VyYWN5IGZvciBsYXJnZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmd1bWVudHMgKHggfiAyNSBvciBzbyksIG1haW5seSBkdWUgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGVycm9yIGludm9sdmVkIGluIGNvbXB1dGluZyBleHAoLXgqeCkuCisgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAjIFhYWCBXb3VsZCBiZSBiZXR0ZXIgdG8gd2Vha2VuIHRoaXMgdGVzdCBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAjIGZvciBsYXJnZSB4LCBpbnN0ZWFkIG9mIGZvciBhbGwgeC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIDIwMDApCisKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5X2ZhaWx1cmUgPSB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIDIwKQorICAgICAgICAgICAgICAgICAgICBpZiBhY2N1cmFjeV9mYWlsdXJlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGdvdCwgc3RyKSBhbmQgaXNpbnN0YW5jZShleHBlY3RlZCwgc3RyKToKKyAgICAgICAgICAgICAgICBpZiBnb3QgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZhaWxfbXNnID0gZmFpbF9mbXQuZm9ybWF0KGlkLCBmbiwgYXJnLCBleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgaWYgYWNjdXJhY3lfZmFpbHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmYWlsX21zZyArPSAnICh7fSknLmZvcm1hdChhY2N1cmFjeV9mYWlsdXJlKQorICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKGZhaWxfbXNnKQorCisgICAgICAgIGlmIGZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdGYWlsdXJlcyBpbiB0ZXN0X210ZXN0ZmlsZTpcbiAgJyArCisgICAgICAgICAgICAgICAgICAgICAgJ1xuICAnLmpvaW4oZmFpbHVyZXMpKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIGRvY3Rlc3QgaW1wb3J0IERvY0ZpbGVTdWl0ZQogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CmluZGV4IDg1YjVlMTMuLmM0OTQ3NTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpAQCAtNCwyMyArNCw2NiBAQAogIiIiCiAKIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CiAKIGltcG9ydCBpbwotaW1wb3J0IHN5cwotaW1wb3J0IGFycmF5CitpbXBvcnQgX3B5aW8gYXMgcHlpbworaW1wb3J0IHBpY2tsZQogCi10cnk6Ci0gICAgaW1wb3J0IF9ieXRlc2lvCi0gICAgaGFzX2NfaW1wbGVtZW50YXRpb24gPSBUcnVlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaGFzX2NfaW1wbGVtZW50YXRpb24gPSBGYWxzZQorY2xhc3MgTWVtb3J5U2Vla1Rlc3RNaXhpbjoKKworICAgIGRlZiB0ZXN0SW5pdChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICBkZWYgdGVzdFJlYWQoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzoxXSwgYnl0ZXNJby5yZWFkKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZlsxOjVdLCBieXRlc0lvLnJlYWQoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzU6XSwgYnl0ZXNJby5yZWFkKDkwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5FT0YsIGJ5dGVzSW8ucmVhZCgpKQorCisgICAgZGVmIHRlc3RSZWFkTm9BcmdzKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYnl0ZXNJby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5FT0YsIGJ5dGVzSW8ucmVhZCgpKQorCisgICAgZGVmIHRlc3RTZWVrKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBieXRlc0lvLnJlYWQoNSkKKyAgICAgICAgYnl0ZXNJby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBieXRlc0lvLnJlYWQoKSkKKworICAgICAgICBieXRlc0lvLnNlZWsoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbMzpdLCBieXRlc0lvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBieXRlc0lvLnNlZWssIDAuMCkKKworICAgIGRlZiB0ZXN0VGVsbChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBieXRlc0lvLnRlbGwoKSkKKyAgICAgICAgYnl0ZXNJby5zZWVrKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgYnl0ZXNJby50ZWxsKCkpCisgICAgICAgIGJ5dGVzSW8uc2VlaygxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMDAwMCwgYnl0ZXNJby50ZWxsKCkpCiAKIAogY2xhc3MgTWVtb3J5VGVzdE1peGluOgogCisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLlVuc3VwcG9ydGVkT3BlcmF0aW9uLCBidWYuZGV0YWNoKQorCiAgICAgZGVmIHdyaXRlX29wcyhzZWxmLCBmLCB0KToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKHQoImJsYWguIikpLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKQEAgLTE1Nyw3ICsyMDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKCksIHNlbGYuRU9GKQogICAgICAgICBtZW1pby5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZW1pby5yZWFkbGluZSgpKSwgdHlwZShidWYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKE5vbmUpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgYnVmKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWRsaW5lLCAnJykKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAgbWVtaW8ucmVhZGxpbmUpCkBAIC0xODksOCArMjMyLDggQEAKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMTApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKG1lbWlvKSwgbWVtaW8pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKG1lbWlvLCAnX19pdGVyX18nKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIobWVtaW8sICduZXh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1lbWlvLCAnX19pdGVyX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobWVtaW8sICduZXh0JykpCiAgICAgICAgIGkgPSAwCiAgICAgICAgIGZvciBsaW5lIGluIG1lbWlvOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBidWYpCkBAIC0yMDQsNyArMjQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCAxMCkKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMikKICAgICAgICAgbWVtaW8uY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBtZW1pbykKIAogICAgIGRlZiB0ZXN0X2dldHZhbHVlKHNlbGYpOgogICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQpAQCAtMzA3LDEyICszNTAsNTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSgpLCBidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIoKSwgYnVmKQogCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZGljdF9sZWFrKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZSBmb3IgaXNzdWUgIzYyNDIuCisgICAgICAgICMgVGhpcyB3aWxsIGJlIGNhdWdodCBieSByZWdydGVzdC5weSAtUiBpZiB0aGlzIGxlYWsuCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgICAgICBtZW1pby5mb28gPSAxCiAKLWNsYXNzIFB5Qnl0ZXNJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKyAgICAgICAgbWVtaW8uZm9vID0gNDIKKyAgICAgICAgbWVtaW8uc2VlaygyKQorCisgICAgICAgIGNsYXNzIFBpY2tsZVRlc3RNZW1JTyhzZWxmLmlvY2xhc3MpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKG1lLCBpbml0dmFsdWUsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5pb2NsYXNzLl9faW5pdF9fKG1lLCBpbml0dmFsdWUpCisgICAgICAgICAgICAgICAgbWUuZm9vID0gZm9vCisgICAgICAgICAgICAjIF9fZ2V0bmV3YXJnc19fIGlzIHVuZGVmaW5lZCBvbiBwdXJwb3NlLiBUaGlzIGNoZWNrcyB0aGF0IFBFUCAzMDcKKyAgICAgICAgICAgICMgaXMgdXNlZCB0byBwcm92aWRlIHBpY2tsaW5nIHN1cHBvcnQuCisKKyAgICAgICAgIyBQaWNrbGUgZXhwZWN0cyB0aGUgY2xhc3MgdG8gYmUgb24gdGhlIG1vZHVsZSBsZXZlbC4gSGVyZSB3ZSB1c2UgYQorICAgICAgICAjIGxpdHRsZSBoYWNrIHRvIGFsbG93IHRoZSBQaWNrbGVUZXN0TWVtSU8gY2xhc3MgdG8gZGVyaXZlIGZyb20KKyAgICAgICAgIyBzZWxmLmlvY2xhc3Mgd2l0aG91dCBoYXZpbmcgdG8gZGVmaW5lIGFsbCBjb21iaW5hdGlvbnMgZXhwbGljdGx5IG9uCisgICAgICAgICMgdGhlIG1vZHVsZS1sZXZlbC4KKyAgICAgICAgaW1wb3J0IF9fbWFpbl9fCisgICAgICAgIFBpY2tsZVRlc3RNZW1JTy5fX21vZHVsZV9fID0gJ19fbWFpbl9fJworICAgICAgICBfX21haW5fXy5QaWNrbGVUZXN0TWVtSU8gPSBQaWNrbGVUZXN0TWVtSU8KKyAgICAgICAgc3VibWVtaW8gPSBQaWNrbGVUZXN0TWVtSU8oYnVmLCA4MCkKKyAgICAgICAgc3VibWVtaW8uc2VlaygyKQorCisgICAgICAgICMgV2Ugb25seSBzdXBwb3J0IHBpY2tsZSBwcm90b2NvbCAyIGFuZCBvbndhcmQgc2luY2Ugd2UgdXNlIGV4dGVuZGVkCisgICAgICAgICMgX19yZWR1Y2VfXyBBUEkgb2YgUEVQIDMwNyB0byBwcm92aWRlIHBpY2tsaW5nIHN1cHBvcnQuCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgyLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCk6CisgICAgICAgICAgICBmb3Igb2JqIGluIChtZW1pbywgc3VibWVtaW8pOgorICAgICAgICAgICAgICAgIG9iajIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9iaiwgcHJvdG9jb2w9cHJvdG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmdldHZhbHVlKCksIG9iajIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2NsYXNzX18sIG9iajIuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmZvbywgb2JqMi5mb28pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoudGVsbCgpLCBvYmoyLnRlbGwoKSkKKyAgICAgICAgICAgICAgICBvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBpY2tsZS5kdW1wcywgb2JqLCBwcm90bykKKyAgICAgICAgZGVsIF9fbWFpbl9fLlBpY2tsZVRlc3RNZW1JTworCisKK2NsYXNzIFB5Qnl0ZXNJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCBNZW1vcnlTZWVrVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgYnVmdHlwZShzKToKICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJhc2NpaSIpCi0gICAgaW9jbGFzcyA9IGlvLl9CeXRlc0lPCisgICAgaW9jbGFzcyA9IHB5aW8uQnl0ZXNJTwogICAgIEVPRiA9IGIiIgogCiAgICAgZGVmIHRlc3RfcmVhZDEoc2VsZik6CkBAIC0zNDIsMTIgKzQzMSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5yZWFkaW50bywgJycpCi0gICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2InLCBtYXAob3JkLCBiImhlbGxvIHdvcmxkIikpCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidiJywgYiJoZWxsbyB3b3JsZCIpCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKICAgICAgICAgbWVtaW8ucmVhZGludG8oYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnRvc3RyaW5nKCksIGIiMTIzNDU2Nzg5MGQiKQogICAgICAgICBtZW1pby5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWRpbnRvLCBiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhiIjEyMyIpCisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBtZW1pby5zZWVrKDQyKQorICAgICAgICBtZW1pby5yZWFkaW50byhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKIAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3NlZWsoc2VsZik6CiAgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCkBAIC0zNzQsMTggKzQ2OSwzOSBAQAogCiAgICAgZGVmIHRlc3RfYnl0ZXNfYXJyYXkoc2VsZik6CiAgICAgICAgIGJ1ZiA9IGIiMTIzNDU2Nzg5MCIKLQotICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidiJywgbWFwKG9yZCwgYnVmKSkKKyAgICAgICAgaW1wb3J0IGFycmF5CisgICAgICAgIGEgPSBhcnJheS5hcnJheShiJ2InLCBidWYpCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlKGEpLCAxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCiAKKyAgICBkZWYgdGVzdF9pc3N1ZTU0NDkoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIHNlbGYuaW9jbGFzcyhpbml0aWFsX2J5dGVzPWJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmlvY2xhc3MsIGJ1ZiwgZm9vPU5vbmUpCiAKLWNsYXNzIFB5U3RyaW5nSU9UZXN0KE1lbW9yeVRlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJ1ZnR5cGUgPSB1bmljb2RlCi0gICAgaW9jbGFzcyA9IGlvLlN0cmluZ0lPCi0gICAgRU9GID0gIiIKKworY2xhc3MgVGV4dElPVGVzdE1peGluOgorCisgICAgZGVmIHRlc3RfbmV3bGluZXNfcHJvcGVydHkoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgIyBUaGUgQyBTdHJpbmdJTyBkZWNvZGVzIG5ld2xpbmVzIGluIHdyaXRlKCkgY2FsbHMsIGJ1dCB0aGUgUHl0aG9uCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gb25seSBkb2VzIHdoZW4gcmVhZGluZy4gIFRoaXMgZnVuY3Rpb24gZm9yY2VzIHRoZW0gdG8KKyAgICAgICAgIyBiZSBkZWNvZGVkIGZvciB0ZXN0aW5nLgorICAgICAgICBkZWYgZm9yY2VfZGVjb2RlKCk6CisgICAgICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgICAgICBtZW1pby5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgbWVtaW8ud3JpdGUoImFcbiIpCisgICAgICAgIGZvcmNlX2RlY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ubmV3bGluZXMsICJcbiIpCisgICAgICAgIG1lbWlvLndyaXRlKCJiXHJcbiIpCisgICAgICAgIGZvcmNlX2RlY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ubmV3bGluZXMsICgiXG4iLCAiXHJcbiIpKQorICAgICAgICBtZW1pby53cml0ZSgiY1xyZCIpCisgICAgICAgIGZvcmNlX2RlY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ubmV3bGluZXMsICgiXHIiLCAiXG4iLCAiXHJcbiIpKQogCiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfc2VlayhzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQpAQCAtMzk3LDI5ICs1MTMsMTk1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDIpCiAKKyAgICBkZWYgdGVzdF90ZXh0aW9fcHJvcGVydGllcyhzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorCisgICAgICAgICMgVGhlc2UgYXJlIGp1c3QgZHVtbXkgdmFsdWVzIGJ1dCB3ZSBuZXZlcnRoZWxlc3MgY2hlY2sgdGhlbSBmb3IgZmVhcgorICAgICAgICAjIG9mIHVuZXhwZWN0ZWQgYnJlYWthZ2UuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1lbWlvLmVuY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZW1pby5lcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVtaW8ubGluZV9idWZmZXJpbmcpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX25vbmUoc2VsZik6CisgICAgICAgICMgbmV3bGluZT1Ob25lCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxuIiwgImJcbiIsICJjXG4iLCAiZCJdKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMiksICJcbmIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMiksICJcbmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMSksICJcbiIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiYVxuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbWVtaW8ud3JpdGUoImJcclxuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgbWVtaW8ud3JpdGUoImNccmQiKSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFcbmJcbmNcbmQiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxyXG5iIiwgbmV3bGluZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMyksICJhXG5iIikKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfZW1wdHkoc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iIgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIiwgbmV3bGluZT0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxyXG4iLCAiY1xyIiwgImQiXSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoNCksICJhXG5iXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMiksICJcbmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMSksICJcciIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKG5ld2xpbmU9IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoImFcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJiXHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiXG5jIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoIlxyZCIpKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxuIiwgImJcclxuIiwgImNcciIsICJkIl0pCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2xmKHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9IlxuIgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxyXG4iLCAiY1xyZCJdKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9jcihzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPSJcciIKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9IlxyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksICJhXHJiXHJccmNccmQiKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxyIiwgImJcciIsICJcciIsICJjXHIiLCAiZCJdKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9jcmxmKHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9IlxyXG4iCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSJcclxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksICJhXHJcbmJcclxyXG5jXHJkIikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcclxuIiwgImJcclxyXG4iLCAiY1xyZCJdKQorCisgICAgZGVmIHRlc3RfaXNzdWU1MjY1KHNlbGYpOgorICAgICAgICAjIFN0cmluZ0lPIGNhbiBkdXBsaWNhdGUgbmV3bGluZXMgaW4gdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcclxuYlxyXG4iLCBuZXdsaW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCg1KSwgImFcbmJcbiIpCisKKworY2xhc3MgUHlTdHJpbmdJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCBNZW1vcnlTZWVrVGVzdE1peGluLAorICAgICAgICAgICAgICAgICAgICAgVGV4dElPVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYnVmdHlwZSA9IHVuaWNvZGUKKyAgICBpb2NsYXNzID0gcHlpby5TdHJpbmdJTworICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gcHlpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorICAgIEVPRiA9ICIiCisKKworY2xhc3MgUHlTdHJpbmdJT1BpY2tsZVRlc3QoVGV4dElPVGVzdE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBpZiBwaWNrbGUgcmVzdG9yZXMgcHJvcGVybHkgdGhlIGludGVybmFsIHN0YXRlIG9mIFN0cmluZ0lPLgorICAgICIiIgorICAgIGJ1ZnR5cGUgPSB1bmljb2RlCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisgICAgRU9GID0gIiIKKworICAgIGNsYXNzIGlvY2xhc3MocHlpby5TdHJpbmdJTyk6CisgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHB5aW8uU3RyaW5nSU8oKmFyZ3MsICoqa3dhcmdzKSkpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIENCeXRlc0lPVGVzdChQeUJ5dGVzSU9UZXN0KToKKyAgICBpb2NsYXNzID0gaW8uQnl0ZXNJTworICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworICAgIHRlc3RfYnl0ZXNfYXJyYXkgPSB1bml0dGVzdC5za2lwKAorICAgICAgICAiYXJyYXkuYXJyYXkoKSBkb2VzIG5vdCBoYXZlIHRoZSBuZXcgYnVmZmVyIEFQSSIKKyAgICApKFB5Qnl0ZXNJT1Rlc3QudGVzdF9ieXRlc19hcnJheSkKKworCisgICAgZGVmIHRlc3RfZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc3RhdGUgPSBtZW1pby5fX2dldHN0YXRlX18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0ZSksIDMpCisgICAgICAgIGJ5dGVhcnJheShzdGF0ZVswXSkgIyBDaGVjayBpZiBzdGF0ZVswXSBzdXBwb3J0cyB0aGUgYnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0YXRlWzJdLCBkaWN0KSBvciBzdGF0ZVsyXSBpcyBOb25lKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fZ2V0c3RhdGVfXykKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2hlY2tzIHdoZXRoZXIgX19zZXRzdGF0ZV9fIGRvZXMgcHJvcGVyIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKChiIm5vIGVycm9yIiwgMCwgTm9uZSkpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoYnl0ZWFycmF5KGIibm8gZXJyb3IiKSwgMCwgTm9uZSkpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoYiJubyBlcnJvciIsIDAsIHsnc3BhbSc6IDN9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAtMSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoInVuaWNvZGUiLCAwLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsIDAuMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiImxlbi10ZXN0IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgMCkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiImNsb3NlZCIsIDAsIE5vbmUpKQorCisKK2NsYXNzIENTdHJpbmdJT1Rlc3QoUHlTdHJpbmdJT1Rlc3QpOgorICAgIGlvY2xhc3MgPSBpby5TdHJpbmdJTworICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKwogICAgICMgWFhYOiBGb3IgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIGlvLlN0cmluZ0lPLCB0aGlzIGlzIGhpZ2hseQogICAgICMgZGVwZW5kZW50IG9uIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgdW5kZXJseWluZyBidWZmZXIuCi0gICAgIyBkZWYgdGVzdF93aWRlY2hhcihzZWxmKToKLSAgICAjICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIlxVMDAwMjAzMGFcVTAwMDIwMzQ3IikKLSAgICAjICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCi0gICAgIwotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYnVmKSwgbGVuKGJ1ZikpCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIGxlbihidWYpKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYnVmKSwgbGVuKGJ1ZikpCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIGxlbihidWYpICogMikKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiArIGJ1ZikKKyAgICBkZWYgdGVzdF93aWRlY2hhcihzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCJcVTAwMDIwMzBhXFUwMDAyMDM0NyIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKIAotaWYgaGFzX2NfaW1wbGVtZW50YXRpb246Ci0gICAgY2xhc3MgQ0J5dGVzSU9UZXN0KFB5Qnl0ZXNJT1Rlc3QpOgotICAgICAgICBpb2NsYXNzID0gaW8uQnl0ZXNJTworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZShidWYpLCBsZW4oYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZShidWYpLCBsZW4oYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIGxlbihidWYpICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYgKyBidWYpCisKKyAgICBkZWYgdGVzdF9nZXRzdGF0ZShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBzdGF0ZSA9IG1lbWlvLl9fZ2V0c3RhdGVfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRlKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzBdLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMV0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0YXRlWzNdLCBkaWN0KSBvciBzdGF0ZVszXSBpcyBOb25lKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fZ2V0c3RhdGVfXykKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2hlY2tzIHdoZXRoZXIgX19zZXRzdGF0ZV9fIGRvZXMgcHJvcGVyIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKCgibm8gZXJyb3IiLCAiXG4iLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKCgibm8gZXJyb3IiLCAiIiwgMCwgeydzcGFtJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgImYiLCAwLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAtMSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAiIiwgMCwgTm9uZSkpCisgICAgICAgICMgdHJ1bmsgaXMgbW9yZSB0b2xlcmFudCB0aGFuIHB5M2sgb24gdGhlIHR5cGUgb2YgdGhlIG5ld2xpbmUgcGFyYW0KKyAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsIGIiIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAwLjAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiIiwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoImxlbi10ZXN0IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgMCkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiY2xvc2VkIiwgIiIsIDAsIE5vbmUpKQorCisKK2NsYXNzIENTdHJpbmdJT1BpY2tsZVRlc3QoUHlTdHJpbmdJT1BpY2tsZVRlc3QpOgorICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworICAgIGNsYXNzIGlvY2xhc3MoaW8uU3RyaW5nSU8pOgorICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhpby5TdHJpbmdJTygqYXJncywgKiprd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w9MikpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFtQeUJ5dGVzSU9UZXN0LCBQeVN0cmluZ0lPVGVzdF0KLSAgICBpZiBoYXNfY19pbXBsZW1lbnRhdGlvbjoKLSAgICAgICAgdGVzdHMuZXh0ZW5kKFtDQnl0ZXNJT1Rlc3RdKQotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIHRlc3RzID0gW1B5Qnl0ZXNJT1Rlc3QsIFB5U3RyaW5nSU9UZXN0LCBDQnl0ZXNJT1Rlc3QsIENTdHJpbmdJT1Rlc3QsCisgICAgICAgICAgICAgUHlTdHJpbmdJT1BpY2tsZVRlc3QsIENTdHJpbmdJT1BpY2tsZVRlc3RdCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1ZGRlYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMCwwICsxLDM2MSBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIG1lbW9yeXZpZXcKKworWFhYIFdlIG5lZWQgbW9yZSB0ZXN0cyEgU29tZSB0ZXN0cyBhcmUgaW4gdGVzdF9ieXRlcworIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IGdjCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGFycmF5Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGlvCisKKworY2xhc3MgQWJzdHJhY3RNZW1vcnlUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiImFiY2RlZiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfc291cmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfYnl0ZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfdHlwZXMoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoTm9uZSwgW3NlbGYucm9fdHlwZSwgc2VsZi5yd190eXBlXSkKKworICAgIGRlZiBjaGVja19nZXRpdGVtX3dpdGhfdHlwZShzZWxmLCB0cCk6CisgICAgICAgIGl0ZW0gPSBzZWxmLmdldGl0ZW1fdHlwZQorICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sIGl0ZW0oYiJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtWzBdLCBieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzVdLCBpdGVtKGIiZiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bLTFdLCBpdGVtKGIiZiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bLTZdLCBpdGVtKGIiYSIpKQorICAgICAgICAjIEJvdW5kcyBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IG1bNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVstN10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVtzeXMubWF4c2l6ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVstc3lzLm1heHNpemVdKQorICAgICAgICAjIFR5cGUgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtWzAuMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtWyJhIl0pCisgICAgICAgIG0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGIpLCBvbGRyZWZjb3VudCkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZ2V0aXRlbV93aXRoX3R5cGUodHApCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtKSwgW21baV0gZm9yIGkgaW4gcmFuZ2UobGVuKG0pKV0pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtLl9fcmVwcl9fKCksIHN0cikKKworICAgIGRlZiB0ZXN0X3NldGl0ZW1fcmVhZG9ubHkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJvX3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYiA9IHNlbGYucm9fdHlwZShzZWxmLl9zb3VyY2UpCisgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIGRlZiBzZXRpdGVtKHZhbHVlKToKKyAgICAgICAgICAgIG1bMF0gPSB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgbWVtb3J5dmlldyhiImEiKSkKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbV93cml0YWJsZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucndfdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cCA9IHNlbGYucndfdHlwZQorICAgICAgICBiID0gc2VsZi5yd190eXBlKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgb2xkcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYikKKyAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgbVswXSA9IHRwKGIiMCIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjBiY2RlZiIpCisgICAgICAgIG1bMTozXSA9IHRwKGIiMTIiKQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiIwMTJkZWYiKQorICAgICAgICBtWzE6MV0gPSB0cChiIiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjAxMmRlZiIpCisgICAgICAgIG1bOl0gPSB0cChiImFiY2RlZiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiImFiY2RlZiIpCisKKyAgICAgICAgIyBPdmVybGFwcGluZyBjb3BpZXMgb2YgYSB2aWV3IGludG8gaXRzZWxmCisgICAgICAgIG1bMDozXSA9IG1bMjo1XQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiJjZGVkZWYiKQorICAgICAgICBtWzpdID0gdHAoYiJhYmNkZWYiKQorICAgICAgICBtWzI6NV0gPSBtWzA6M10KKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiYWJhYmNmIikKKworICAgICAgICBkZWYgc2V0aXRlbShrZXksIHZhbHVlKToKKyAgICAgICAgICAgIG1ba2V5XSA9IHRwKHZhbHVlKQorICAgICAgICAjIEJvdW5kcyBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCA2LCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCAtNywgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2V0aXRlbSwgc3lzLm1heHNpemUsIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIC1zeXMubWF4c2l6ZSwgYiJhIikKKyAgICAgICAgIyBXcm9uZyBpbmRleC9zbGljZSB0eXBlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sIDAuMCwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCAoMCwpLCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sICJhIiwgYiJhIikKKyAgICAgICAgIyBUcnlpbmcgdG8gcmVzaXplIHRoZSBtZW1vcnkgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIDAsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgMCwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIHNsaWNlKDEsMSksIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIHNsaWNlKDAsMiksIGIiYSIpCisKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgZGVsIG1bMV0KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBkZWwgbVsxOjRdCisKKyAgICBkZWYgdGVzdF90b2J5dGVzKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICAgICAgYiA9IG0udG9ieXRlcygpCisgICAgICAgICAgICAjIFRoaXMgY2FsbHMgc2VsZi5nZXRpdGVtX3R5cGUoKSBvbiBlYWNoIHNlcGFyYXRlIGJ5dGUgb2YgYiJhYmNkZWYiCisgICAgICAgICAgICBleHBlY3RlZCA9IGIiIi5qb2luKAorICAgICAgICAgICAgICAgIHNlbGYuZ2V0aXRlbV90eXBlKGMpIGZvciBjIGluIGIiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF90b2xpc3Qoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBsID0gbS50b2xpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBtYXAob3JkLCBiImFiY2RlZiIpKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBtZW1vcnl2aWV3cyBjYW4gY29tcGFyZSBmb3IgZXF1YWxpdHkgd2l0aCBvdGhlciBvYmplY3RzCisgICAgICAgICMgaGF2aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICAgICAgZm9yIHRwX2NvbXAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gdHBfY29tcChiImFiY2RlZiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSAhPSB0cF9jb21wKGIiYWJjZGVmIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHRwX2NvbXAoYiJhYmNkZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtICE9IHRwX2NvbXAoYiJhYmNkZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSA9PSB0cF9jb21wKGIiYWJjZGUxIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gIT0gdHBfY29tcChiImFiY2RlMSIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtID09IG1bOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobVswOjZdID09IG1bOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1bMDo1XSA9PSBtKQorCisgICAgICAgICAgICAjIENvbXBhcmlzb24gd2l0aCBvYmplY3RzIHdoaWNoIGRvbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSA9PSB1ImFiY2RlZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSAhPSB1ImFiY2RlZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUiYWJjZGVmIiA9PSBtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiYWJjZGVmIiAhPSBtKQorCisgICAgICAgICAgICAjIFVub3JkZXJlZCBjb21wYXJpc29ucyBhcmUgdW5pbXBsZW1lbnRlZCwgYW5kIHRoZXJlZm9yZSBnaXZlCisgICAgICAgICAgICAjIGFyYml0cmFyeSByZXN1bHRzICh0aGV5IHJhaXNlIGEgVHlwZUVycm9yIGluIHB5M2spCisKKyAgICBkZWYgY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZiwgdHApOgorICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9ybWF0LCBzZWxmLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZm9ybWF0LCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtc2l6ZSwgc2VsZi5pdGVtc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5kaW0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zaGFwZSwgKDYsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zdHJpZGVzLCAoc2VsZi5pdGVtc2l6ZSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc3Vib2Zmc2V0cywgTm9uZSkKKyAgICAgICAgcmV0dXJuIG0KKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfcmVhZG9ubHkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJvX3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbSA9IHNlbGYuY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZi5yb190eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVhZG9ubHksIFRydWUpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5yd190eXBlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG0gPSBzZWxmLmNoZWNrX2F0dHJpYnV0ZXNfd2l0aF90eXBlKHNlbGYucndfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWRvbmx5LCBGYWxzZSkKKworICAgICMgRGlzYWJsZWQ6IHVuaWNvZGUgdXNlcyB0aGUgb2xkIGJ1ZmZlciBBUEkgaW4gMi54CisKKyAgICAjZGVmIHRlc3RfZ2V0YnVmZmVyKHNlbGYpOgorICAgICAgICAjIyBUZXN0IFB5T2JqZWN0X0dldEJ1ZmZlcigpIG9uIGEgbWVtb3J5dmlldyBvYmplY3QuCisgICAgICAgICNmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICAjYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgICNvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICAgICAgI20gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICAjb2xkdmlld3JlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KG0pCisgICAgICAgICAgICAjcyA9IHVuaWNvZGUobSwgInV0Zi04IikKKyAgICAgICAgICAgICNzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgcy5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQobSksIG9sZHZpZXdyZWZjb3VudCkKKyAgICAgICAgICAgICNtID0gTm9uZQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGIpLCBvbGRyZWZjb3VudCkKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0cCwgdHlwZSk6CisgICAgICAgICAgICAgICAgIyBJZiB0cCBpcyBhIGZhY3RvcnkgcmF0aGVyIHRoYW4gYSBwbGFpbiB0eXBlLCBza2lwCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY2xhc3MgTXlTb3VyY2UodHApOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNsYXNzIE15T2JqZWN0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCBhIG1lbW9yeXZpZXcgb2JqZWN0CisgICAgICAgICAgICBiID0gTXlTb3VyY2UodHAoYidhYmMnKSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICBvID0gTXlPYmplY3QoKQorICAgICAgICAgICAgYi5tID0gbQorICAgICAgICAgICAgYi5vID0gbworICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICAgICAgYiA9IG0gPSBvID0gTm9uZQorICAgICAgICAgICAgIyBUaGUgY3ljbGUgbXVzdCBiZSBicm9rZW4KKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRhYmxlX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDQ1MTogbWVtb3J5dmlldyBpbmNvcnJlY3RseSBleHBvc2VzIGEgcmVhZG9ubHkKKyAgICAgICAgIyBidWZmZXIgYXMgd3JpdGFibGUgY2F1c2luZyBhIHNlZ2ZhdWx0IGlmIHVzaW5nIG1tYXAKKyAgICAgICAgdHAgPSBzZWxmLnJvX3R5cGUKKyAgICAgICAgaWYgdHAgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBpID0gaW8uQnl0ZXNJTyhiJ1paWlonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGkucmVhZGludG8sIG0pCisKKyMgVmFyaWF0aW9ucyBvbiBzb3VyY2Ugb2JqZWN0cyBmb3IgdGhlIGJ1ZmZlcjogYnl0ZXMtbGlrZSBvYmplY3RzLCB0aGVuIGFycmF5cworIyB3aXRoIGl0ZW1zaXplID4gMS4KKyMgTk9URTogc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgb2JqZWN0cyBpcyB1bmltcGxlbWVudGVkLgorCitjbGFzcyBCYXNlQnl0ZXNNZW1vcnlUZXN0cyhBYnN0cmFjdE1lbW9yeVRlc3RzKToKKyAgICByb190eXBlID0gYnl0ZXMKKyAgICByd190eXBlID0gYnl0ZWFycmF5CisgICAgZ2V0aXRlbV90eXBlID0gYnl0ZXMKKyAgICBpdGVtc2l6ZSA9IDEKKyAgICBmb3JtYXQgPSAnQicKKworIyBEaXNhYmxlZDogYXJyYXkuYXJyYXkoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBuZXcgYnVmZmVyIEFQSSBpbiAyLngKKworI2NsYXNzIEJhc2VBcnJheU1lbW9yeVRlc3RzKEFic3RyYWN0TWVtb3J5VGVzdHMpOgorICAgICNyb190eXBlID0gTm9uZQorICAgICNyd190eXBlID0gbGFtYmRhIHNlbGYsIGI6IGFycmF5LmFycmF5KCdpJywgbWFwKG9yZCwgYikpCisgICAgI2dldGl0ZW1fdHlwZSA9IGxhbWJkYSBzZWxmLCBiOiBhcnJheS5hcnJheSgnaScsIG1hcChvcmQsIGIpKS50b3N0cmluZygpCisgICAgI2l0ZW1zaXplID0gYXJyYXkuYXJyYXkoJ2knKS5pdGVtc2l6ZQorICAgICNmb3JtYXQgPSAnaScKKworICAgICNkZWYgdGVzdF9nZXRidWZmZXIoc2VsZik6CisgICAgICAgICMjIFhYWCBUZXN0IHNob3VsZCBiZSBhZGFwdGVkIGZvciBub24tYnl0ZSBidWZmZXJzCisgICAgICAgICNwYXNzCisKKyAgICAjZGVmIHRlc3RfdG9saXN0KHNlbGYpOgorICAgICAgICAjIyBYWFggTm90SW1wbGVtZW50ZWRFcnJvcjogdG9saXN0KCkgb25seSBzdXBwb3J0cyBieXRlIHZpZXdzCisgICAgICAgICNwYXNzCisKKworIyBWYXJpYXRpb25zIG9uIGluZGlyZWN0aW9uIGxldmVsczogbWVtb3J5dmlldywgc2xpY2Ugb2YgbWVtb3J5dmlldywKKyMgc2xpY2Ugb2Ygc2xpY2Ugb2YgbWVtb3J5dmlldy4KKyMgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdGVzdCBhbGxvY2F0aW9uIHN1YnRsZXRpZXMuCisKK2NsYXNzIEJhc2VNZW1vcnl2aWV3VGVzdHM6CisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KG9iaikKKworICAgIGRlZiBfY2hlY2tfY29udGVudHMoc2VsZiwgdHAsIG9iaiwgY29udGVudHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdHAoY29udGVudHMpKQorCitjbGFzcyBCYXNlTWVtb3J5U2xpY2VUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiIlhhYmNkZWZZIgorCisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KG9iaikKKyAgICAgICAgcmV0dXJuIG1bMTo3XQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqWzE6N10sIHRwKGNvbnRlbnRzKSkKKworICAgIGRlZiB0ZXN0X3JlZnMoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBtZW1vcnl2aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChtKQorICAgICAgICAgICAgbVsxOjJdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChtKSwgb2xkcmVmY291bnQpCisKK2NsYXNzIEJhc2VNZW1vcnlTbGljZVNsaWNlVGVzdHM6CisgICAgc291cmNlX2J5dGVzID0gYiJYYWJjZGVmWSIKKworICAgIGRlZiBfdmlldyhzZWxmLCBvYmopOgorICAgICAgICBtID0gbWVtb3J5dmlldyhvYmopCisgICAgICAgIHJldHVybiBtWzo3XVsxOl0KKworICAgIGRlZiBfY2hlY2tfY29udGVudHMoc2VsZiwgdHAsIG9iaiwgY29udGVudHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ialsxOjddLCB0cChjb250ZW50cykpCisKKworIyBDb25jcmV0ZSB0ZXN0IGNsYXNzZXMKKworY2xhc3MgQnl0ZXNNZW1vcnl2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5dmlld1Rlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgb2IgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWVtb3J5dmlldyhvYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWVtb3J5dmlldyhvYmplY3Q9b2IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3LCBvYiwgb2IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIGFyZ3VtZW50PW9iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3LCBvYiwgYXJndW1lbnQ9VHJ1ZSkKKworI2NsYXNzIEFycmF5TWVtb3J5dmlld1Rlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnl2aWV3VGVzdHMsIEJhc2VBcnJheU1lbW9yeVRlc3RzKToKKworICAgICNkZWYgdGVzdF9hcnJheV9hc3NpZ24oc2VsZik6CisgICAgICAgICMjIElzc3VlICM0NTY5OiBzZWdmYXVsdCB3aGVuIG11dGF0aW5nIGEgbWVtb3J5dmlldyB3aXRoIGl0ZW1zaXplICE9IDEKKyAgICAgICAgI2EgPSBhcnJheS5hcnJheSgnaScsIHJhbmdlKDEwKSkKKyAgICAgICAgI20gPSBtZW1vcnl2aWV3KGEpCisgICAgICAgICNuZXdfYSA9IGFycmF5LmFycmF5KCdpJywgcmFuZ2UoOSwgLTEsIC0xKSkKKyAgICAgICAgI21bOl0gPSBuZXdfYQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKKworCitjbGFzcyBCeXRlc01lbW9yeVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5U2xpY2VUZXN0cywgQmFzZUJ5dGVzTWVtb3J5VGVzdHMpOgorICAgIHBhc3MKKworI2NsYXNzIEFycmF5TWVtb3J5U2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgICNCYXNlTWVtb3J5U2xpY2VUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorICAgICNwYXNzCisKK2NsYXNzIEJ5dGVzTWVtb3J5U2xpY2VTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0cywgQmFzZUJ5dGVzTWVtb3J5VGVzdHMpOgorICAgIHBhc3MKKworI2NsYXNzIEFycmF5TWVtb3J5U2xpY2VTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnlTbGljZVNsaWNlVGVzdHMsIEJhc2VBcnJheU1lbW9yeVRlc3RzKToKKyAgICAjcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21obGliLnB5IGIvTGliL3Rlc3QvdGVzdF9taGxpYi5weQppbmRleCAwNDU3MWVhLi45OTZkZjQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21obGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWhsaWIucHkKQEAgLTcsNyArNyw3IEBACiAjIyMgICAgICBtaGxpYi4gIEl0IHNob3VsZC4KIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgVGVzdFNraXBwZWQsIGltcG9ydF9tb2R1bGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBpbXBvcnRfbW9kdWxlCiBpbXBvcnQgb3MsIFN0cmluZ0lPCiBpbXBvcnQgc3lzCiBtaGxpYiA9IGltcG9ydF9tb2R1bGUoJ21obGliJywgZGVwcmVjYXRlZD1UcnVlKQpAQCAtMjEsOCArMjEsOCBAQAogICAgICMgbGluayBjb3VudHMsIGFuZCB0aGF0IGNhdXNlcyB0ZXN0X2xpc3Rmb2xkZXJzKCkgaGVyZSB0byBnZXQgYmFjawogICAgICMgYW4gZW1wdHkgbGlzdCBmcm9tIGl0cyBjYWxsIG9mIGxpc3RhbGxmb2xkZXJzKCkuCiAgICAgIyBUaGUgb3RoZXIgdGVzdHMgaGVyZSBwYXNzIG9uIFdpbmRvd3MuCi0gICAgcmFpc2UgVGVzdFNraXBwZWQoInNraXBwZWQgb24gJXMgLS0gIiAlIHN5cy5wbGF0Zm9ybSArCi0gICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IFVuaXggYXNzdW1wdGlvbnMiKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJza2lwcGVkIG9uICVzIC0tICIgJSBzeXMucGxhdGZvcm0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbWFueSBVbml4IGFzc3VtcHRpb25zIikKIAogX21ocm9vdCA9IFRFU1RGTisiX01IIgogX21ocGF0aCA9IG9zLnBhdGguam9pbihfbWhyb290LCAiTUgiKQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHdyaXRlQ3VyTWVzc2FnZSgnaW5ib3gnLCAyKQogICAgICAgICBtaCA9IGdldE1IKCkKIAotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShtaC5nZXRwcm9maWxlKCdFZGl0b3InKSwgJ2VtYWNzJykKICAgICAgICAgZXEobWguZ2V0cHJvZmlsZSgnbm90LXNldCcpLCBOb25lKQogICAgICAgICBlcShtaC5nZXRwYXRoKCksIG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSkKQEAgLTE3MSw3ICsxNzEsNyBAQAogCiAgICAgZGVmIHRlc3RfbGlzdGZvbGRlcnMoc2VsZik6CiAgICAgICAgIG1oID0gZ2V0TUgoKQotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogCiAgICAgICAgIGZvbGRlcnMgPSBtaC5saXN0Zm9sZGVycygpCiAgICAgICAgIGZvbGRlcnMuc29ydCgpCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogICAgIGRlZiB0ZXN0X3NlcXVlbmNlKHNlbGYpOgogICAgICAgICBtaCA9IGdldE1IKCkKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgd3JpdGVDdXJNZXNzYWdlKCd3aWRlJywgNTUpCiAKICAgICAgICAgZiA9IG1oLm9wZW5mb2xkZXIoJ3dpZGUnKQpAQCAtMjUzLDEyICsyNTMsMTIgQEAKIAogICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKICAgICAgICAgbWggPSBnZXRNSCgpCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAKICAgICAgICAgbWgubWFrZWZvbGRlcigiZHVtbXkxIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJkdW1teTEiIGluIG1oLmxpc3Rmb2xkZXJzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImR1bW15MSIsIG1oLmxpc3Rmb2xkZXJzKCkpCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oX21ocGF0aCwgImR1bW15MSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgICAgIGYgPSBtaC5vcGVuZm9sZGVyKCdkdW1teTEnKQogICAgICAgICBkZWYgY3JlYXRlKG4pOgpAQCAtMzEwLDEyICszMTAsMTIgQEAKIAogICAgICAgICBtaC5kZWxldGVmb2xkZXIoJ2R1bW15MScpCiAgICAgICAgIG1oLmRlbGV0ZWZvbGRlcignZHVtbXkyJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdkdW1teTEnIG5vdCBpbiBtaC5saXN0Zm9sZGVycygpKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IG9zLnBhdGguZXhpc3RzKHBhdGgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkdW1teTEnLCBtaC5saXN0Zm9sZGVycygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgbWggPSBnZXRNSCgpCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAKICAgICAgICAgZiA9IG1oLm9wZW5mb2xkZXIoJ2luYm94JykKICAgICAgICAgbXNnID0gZi5vcGVubWVzc2FnZSgxKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9taW1ldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X21pbWV0b29scy5weQppbmRleCBlZDAxZWRlLi44NmEyNmRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21pbWV0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21pbWV0b29scy5weQpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBzID0gc2V0KFsiIl0pCiAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgogICAgICAgICAgICAgbmIgPSBtaW1ldG9vbHMuY2hvb3NlX2JvdW5kYXJ5KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuYiBub3QgaW4gcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmIsIHMpCiAgICAgICAgICAgICBzLmFkZChuYikKIAogICAgIGRlZiB0ZXN0X21lc3NhZ2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbWV0eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CmluZGV4IDAxOTBjMmYuLjM1MDhiNTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IG1pbWV0eXBlcwogaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIApAQCAtNDcsNyArNDgsNyBAQAogCiAgICAgZGVmIHRlc3RfZ3Vlc3NfYWxsX3R5cGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgdW5sZXNzID0gc2VsZi5mYWlsVW5sZXNzCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQogICAgICAgICAjIEZpcnN0IHRyeSBzdHJpY3QuICBVc2UgYSBzZXQgaGVyZSBmb3IgdGVzdGluZyB0aGUgcmVzdWx0cyBiZWNhdXNlIGlmCiAgICAgICAgICMgdGVzdF91cmxsaWIyIGlzIHJ1biBiZWZvcmUgdGVzdF9taW1ldHlwZXMsIGdsb2JhbCBzdGF0ZSBpcyBtb2RpZmllZAogICAgICAgICAjIHN1Y2ggdGhhdCB0aGUgJ2FsbCcgc2V0IHdpbGwgaGF2ZSBtb3JlIGl0ZW1zIGluIGl0LgpAQCAtNjIsOCArNjMsMzEgQEAKICAgICAgICAgZXEoYWxsLCBbXSkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIiksICJXaW5kb3dzIG9ubHkiKQorY2xhc3MgV2luMzJNaW1lVHlwZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSBhbGwgZW50cmllcyBhY3R1YWxseSBjb21lIGZyb20gdGhlIFdpbmRvd3MgcmVnaXN0cnkKKyAgICAgICAgc2VsZi5vcmlnaW5hbF90eXBlc19tYXAgPSBtaW1ldHlwZXMudHlwZXNfbWFwLmNvcHkoKQorICAgICAgICBtaW1ldHlwZXMudHlwZXNfbWFwLmNsZWFyKCkKKyAgICAgICAgbWltZXR5cGVzLmluaXQoKQorICAgICAgICBzZWxmLmRiID0gbWltZXR5cGVzLk1pbWVUeXBlcygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgcmVzdG9yZSBkZWZhdWx0IHNldHRpbmdzCisgICAgICAgIG1pbWV0eXBlcy50eXBlc19tYXAuY2xlYXIoKQorICAgICAgICBtaW1ldHlwZXMudHlwZXNfbWFwLnVwZGF0ZShzZWxmLm9yaWdpbmFsX3R5cGVzX21hcCkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X3BhcnNpbmcoc2VsZik6CisgICAgICAgICMgdGhlIG9yaWdpbmFsLCBtaW5pbXVtIGNvbnRlbnRzIG9mIHRoZSBNSU1FIGRhdGFiYXNlIGluIHRoZQorICAgICAgICAjIFdpbmRvd3MgcmVnaXN0cnkgaXMgdW5kb2N1bWVudGVkIEFGQUlLLgorICAgICAgICAjIFVzZSBmaWxlIHR5cGVzIHRoYXQgc2hvdWxkICphbHdheXMqIGV4aXN0OgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJmb28udHh0IiksICgidGV4dC9wbGFpbiIsIE5vbmUpKQorCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNaW1lVHlwZXNUZXN0Q2FzZSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1pbWVUeXBlc1Rlc3RDYXNlLAorICAgICAgICBXaW4zMk1pbWVUeXBlc1Rlc3RDYXNlCisgICAgICAgICkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CmluZGV4IDEyMGMzN2MuLmVmYjkyNDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKQEAgLTEsMTAgKzEsOCBAQAogIyB0ZXN0IGZvciB4bWwuZG9tLm1pbmlkb20KIAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCB4bWwuZG9tCkBAIC0xNSwxMiArMTMsOCBAQAogZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IGdldERPTUltcGxlbWVudGF0aW9uCiAKIAotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBiYXNlID0gc3lzLmFyZ3ZbMF0KLWVsc2U6Ci0gICAgYmFzZSA9IF9fZmlsZV9fCi10c3RmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShiYXNlKSwgInRlc3QiK29zLmV4dHNlcCsieG1sIikKLWRlbCBiYXNlCit0c3RmaWxlID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCisKIAogIyBUaGUgdGVzdHMgb2YgRG9jdW1lbnRUeXBlIGltcG9ydGluZyB1c2UgdGhlc2UgaGVscGVycyB0byBjb25zdHJ1Y3QKICMgdGhlIGRvY3VtZW50cyB0byB3b3JrIHdpdGgsIHNpbmNlIG5vdCBhbGwgRE9NIGJ1aWxkZXJzIGFjdHVhbGx5CkBAIC03MzQsNyArNzI4LDcgQEAKICAgICBkZWYgY2hlY2tfY2xvbmVfYXR0cmlidXRlKHNlbGYsIGRlZXAsIHRlc3ROYW1lKToKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MgYXR0cj0ndmFsdWUnLz4iKQogICAgICAgICBhdHRyID0gZG9jLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJhdHRyIikKLSAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChhdHRyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGF0dHIsIE5vbmUpCiAgICAgICAgIGNsb25lID0gYXR0ci5jbG9uZU5vZGUoZGVlcCkKICAgICAgICAgc2VsZi5jb25maXJtKG5vdCBjbG9uZS5pc1NhbWVOb2RlKGF0dHIpKQogICAgICAgICBzZWxmLmNvbmZpcm0obm90IGF0dHIuaXNTYW1lTm9kZShjbG9uZSkpCkBAIC03NTQsNyArNzQ4LDcgQEAKICAgICBkZWYgY2hlY2tfY2xvbmVfcGkoc2VsZiwgZGVlcCwgdGVzdE5hbWUpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD90YXJnZXQgZGF0YT8+PGRvYy8+IikKICAgICAgICAgcGkgPSBkb2MuZmlyc3RDaGlsZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwaS5ub2RlVHlwZSwgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGkubm9kZVR5cGUsIE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQogICAgICAgICBjbG9uZSA9IHBpLmNsb25lTm9kZShkZWVwKQogICAgICAgICBzZWxmLmNvbmZpcm0oY2xvbmUudGFyZ2V0ID09IHBpLnRhcmdldAogICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5kYXRhID09IHBpLmRhdGEpCkBAIC03OTAsMTIgKzc4NCwxODEgQEAKICAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZSAtLSBzaW5nbGUgZW1wdHkgbm9kZSByZW1vdmVkIikKICAgICAgICAgZG9jLnVubGluaygpCiAKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZUNvbWJpbmVBbmROZXh0U2libGluZyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJmaXJzdCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgic2Vjb25kIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoImkiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplQ29tYmluZUFuZE5leHRTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAiZmlyc3RzZWNvbmQiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyBub3Qgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgcm9vdC5maXJzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplQ29tYmluZWRBbmROZXh0U2libGluZyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImZpcnN0IikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAiZmlyc3QiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFByZXZTaWJsaW5nIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVEZWxldGVXaXRoTmV4dFNpYmxpbmcoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyLAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aE5leHRTaWJsaW5nIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAic2Vjb25kIgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhOZXh0U2libGluZyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFR3b05vblRleHRTaWJsaW5ncyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZUVsZW1lbnQoImkiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCJpIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMywKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhUd29TaWJsaW5ncyAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIG5vdCByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyByb290LmZpcnN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoVHdvU2libGluZ3MgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZURlbGV0ZUFuZENvbWJpbmUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJzZWNvbmQiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiZm91cnRoIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSA1LAorICAgICAgICAgICAgICAgICJ0ZXN0Tm9ybWFsaXplRGVsZXRlQW5kQ29tYmluZSAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJzZWNvbmRmb3VydGgiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVBbmRDb21iaW5lIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxpLz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvbz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0MiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3gyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9vPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0MyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L28+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvZG9jPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1swXS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJ4IikpCisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgieDIiKSkKKyAgICAgICAgcm9vdC5jaGlsZE5vZGVzWzFdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgieDMiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDMKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKSA9PSA0CisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSA0CisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMworICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZTIgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIGNoaWxkTm9kZXMgbGVuZ3RocyIpCisgICAgICAgIHNlbGYuY29uZmlybShyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5kYXRhID09ICJ0eCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5kYXRhID09ICJ0MngyIgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1sxXS5kYXRhID09ICJ0M3gzIgorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIGpvaW5lZCB0ZXh0IGZpZWxkcyIpCisgICAgICAgIHNlbGYuY29uZmlybShyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdLnByZXZpb3VzU2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzFdCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0ucHJldmlvdXNTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5uZXh0U2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0KKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplMiAtLSBzaWJsaW5nIHBvaW50ZXJzIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKworICAgIGRlZiB0ZXN0QnVnMDc3Nzg4NChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxvPnRleHQ8L28+IikKKyAgICAgICAgdGV4dCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQubm9kZVR5cGUsIE5vZGUuVEVYVF9OT0RFKQorICAgICAgICAjIFNob3VsZCBydW4gcXVpZXRseSwgZG9pbmcgbm90aGluZy4KKyAgICAgICAgdGV4dC5ub3JtYWxpemUoKQorICAgICAgICBkb2MudW5saW5rKCkKKwogICAgIGRlZiB0ZXN0QnVnMTQzMzY5NChzZWxmKToKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxvPjxpLz50PC9vPiIpCiAgICAgICAgIG5vZGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CiAgICAgICAgIG5vZGUuY2hpbGROb2Rlc1sxXS5ub2RlVmFsdWUgPSAiIgogICAgICAgICBub2RlLm5vcm1hbGl6ZSgpCi0gICAgICAgIHNlbGYuY29uZmlybShub2RlLmNoaWxkTm9kZXNbLTFdLm5leHRTaWJsaW5nID09IE5vbmUsCisgICAgICAgIHNlbGYuY29uZmlybShub2RlLmNoaWxkTm9kZXNbLTFdLm5leHRTaWJsaW5nIGlzIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAiRmluYWwgY2hpbGQncyAubmV4dFNpYmxpbmcgc2hvdWxkIGJlIE5vbmUiKQogCiAgICAgZGVmIHRlc3RTaWJsaW5ncyhzZWxmKToKQEAgLTEwNjMsNyArMTIyNiw3IEBACiAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPmE8L2RvYz4iKQogICAgICAgICBlbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudAogICAgICAgICB0ZXh0ID0gZWxlbS5jaGlsZE5vZGVzWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRleHQubm9kZVR5cGUsIE5vZGUuVEVYVF9OT0RFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQubm9kZVR5cGUsIE5vZGUuVEVYVF9OT0RFKQogCiAgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dCwgImEiKQogICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiYiIpKQpAQCAtMTMyMCw2ICsxNDgzLDEzIEBACiAgICAgICAgIGRvYy5hcHBlbmRDaGlsZChkb2MuY3JlYXRlQ29tbWVudCgiZm9vLS1iYXIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZG9jLnRveG1sKQogCisgICAgZGVmIHRlc3RFbXB0eVhNTE5TVmFsdWUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZWxlbWVudCB4bWxucz0nJz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjxmb28vPlxuPC9lbGVtZW50PiIpCisgICAgICAgIGRvYzIgPSBwYXJzZVN0cmluZyhkb2MudG94bWwoKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYzIubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoTWluaWRvbVRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weSBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQppbmRleCA1NTA2OTU2Li4wNDdkNzAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21tYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CkBAIC0xLDcgKzEsOCBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKLWltcG9ydCBtbWFwCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLCByZXF1aXJlcwogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MsIHJlLCBpdGVydG9vbHMKK2ltcG9ydCBvcywgcmUsIGl0ZXJ0b29scywgc29ja2V0LCBzeXMKKworbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQogCiBQQUdFU0laRSA9IG1tYXAuUEFHRVNJWkUKIApAQCAtMzI1LDYgKzMyNiwzNiBAQAogICAgICAgICAgICAgbWYuY2xvc2UoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9sZW5ndGhfMF9vZmZzZXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwOTE2OiB0ZXN0IG1hcHBpbmcgb2YgcmVtYWluZGVyIG9mIGZpbGUgYnkgcGFzc2luZyAwIGZvcgorICAgICAgICAjIG1hcCBsZW5ndGggd2l0aCBhbiBvZmZzZXQgZG9lc24ndCBjYXVzZSBhIHNlZ2ZhdWx0LgorICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInN0YXQiKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWRzIG9zLnN0YXQiKQorICAgICAgICAjIE5PVEU6IGFsbG9jYXRpb24gZ3JhbnVsYXJpdHkgaXMgY3VycmVudGx5IDY1NTM2IHVuZGVyIFdpbjY0LAorICAgICAgICAjIGFuZCB0aGVyZWZvcmUgdGhlIG1pbmltdW0gb2Zmc2V0IGFsaWdubWVudC4KKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoKDY1NTM2ICogMikgKiBiJ20nKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgbWYgPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgb2Zmc2V0PTY1NTM2LCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBtZi5fX2dldGl0ZW1fXywgODAwMDApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG1mLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF8wX2xhcmdlX29mZnNldChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA5NTk6IHRlc3QgbWFwcGluZyBvZiBhIGZpbGUgYnkgcGFzc2luZyAwIGZvcgorICAgICAgICAjIG1hcCBsZW5ndGggd2l0aCBhIGxhcmdlIG9mZnNldCBkb2Vzbid0IGNhdXNlIGEgc2VnZmF1bHQuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmVlZHMgb3Muc3RhdCIpCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoMTE1Njk5ICogYidtJykgIyBBcmJpdHJhcnkgY2hhcmFjdGVyCisKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIncrYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtbWFwLm1tYXAsIGYuZmlsZW5vKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9MjE0NzQxODExMikKKwogICAgIGRlZiB0ZXN0X21vdmUoc2VsZik6CiAgICAgICAgICMgbWFrZSBtb3ZlIHdvcmtzIGV2ZXJ5d2hlcmUgKDY0LWJpdCBmb3JtYXQgcHJvYmxlbSBlYXJsaWVyKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3KycpCkBAIC0zNTgsMTUgKzM4OSwyMiBAQAogICAgICAgICAgICAgICAgIG0ubW92ZShzb3VyY2UsIGRlc3QsIHNpemUpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgLTEsIC0xLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAtMSwgLTEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgLTEsIDAsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDAsIC0xLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAtMSwgMCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAwLCAtMSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAwLCAwLCAtMSkKKworICAgICAgICBvZmZzZXRzID0gWygtMSwgLTEsIC0xKSwgKC0xLCAtMSwgMCksICgtMSwgMCwgLTEpLCAoMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAoLTEsIDAsIDApLCAoMCwgLTEsIDApLCAoMCwgMCwgLTEpXQorICAgICAgICBmb3Igc291cmNlLCBkZXN0LCBzaXplIGluIG9mZnNldHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIHNvdXJjZSwgZGVzdCwgc2l6ZSkKKwogICAgICAgICBtLmNsb3NlKCkKIAorICAgICAgICBtID0gbW1hcC5tbWFwKC0xLCAxKSAjIHNpbmdsZSBieXRlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgMCwgMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAxLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDAsIDEsIDEpCisgICAgICAgIG0ubW92ZSgwLCAwLCAxKQorICAgICAgICBtLm1vdmUoMCwgMCwgMCkKKworCiAgICAgZGVmIHRlc3RfYW5vbnltb3VzKHNlbGYpOgogICAgICAgICAjIGFub255bW91cyBtbWFwLm1tYXAoLTEsIFBBR0UpCiAgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIFBBR0VTSVpFKQpAQCAtNDA5LDcgKzQ0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAiIi5qb2luKHJldmVyc2VkKGRhdGEpKQogICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCiAgICAgICAgICAgICAgICAgICAgIG1bc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobVs6XSwgIiIuam9pbihMKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCAiIi5qb2luKEwpKQogCiAgICAgZGVmIG1ha2VfbW1hcF9maWxlIChzZWxmLCBmLCBoYWxmc2l6ZSk6CiAgICAgICAgICMgV3JpdGUgMiBwYWdlcyB3b3J0aCBvZiBkYXRhIHRvIHRoZSBmaWxlCkBAIC00OTMsOCArNTMxLDggQEAKICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3MobW1hcC5lcnJvciwgRW52aXJvbm1lbnRFcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygibW1hcC5lcnJvciIgaW4gc3RyKG1tYXAuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhtbWFwLmVycm9yLCBFbnZpcm9ubWVudEVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibW1hcC5lcnJvciIsIHN0cihtbWFwLmVycm9yKSkKIAogICAgIGRlZiB0ZXN0X2lvX21ldGhvZHMoc2VsZik6CiAgICAgICAgIGRhdGEgPSAiMDEyMzQ1Njc4OSIKQEAgLTUwNCwyNyArNTQyLDI3IEBACiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAjIFRlc3Qgd3JpdGVfYnl0ZSgpCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZGF0YSkpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS50ZWxsKCksIGkpCi0gICAgICAgICAgICBtLndyaXRlX2J5dGUoZGF0YVtpOmkrMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnRlbGwoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSkKKyAgICAgICAgICAgIG0ud3JpdGVfYnl0ZShkYXRhW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSsxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLndyaXRlX2J5dGUsICJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobVs6XSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBkYXRhKQogICAgICAgICAjIFRlc3QgcmVhZF9ieXRlKCkKICAgICAgICAgbS5zZWVrKDApCiAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZGF0YSkpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS50ZWxsKCksIGkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLnJlYWRfYnl0ZSgpLCBkYXRhW2k6aSsxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0udGVsbCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udGVsbCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWRfYnl0ZSgpLCBkYXRhW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSsxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnJlYWRfYnl0ZSkKICAgICAgICAgIyBUZXN0IHJlYWQoKQogICAgICAgICBtLnNlZWsoMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS5yZWFkKDMpLCAiMzQ1IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobS50ZWxsKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZWFkKDMpLCAiMzQ1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgNikKICAgICAgICAgIyBUZXN0IHdyaXRlKCkKICAgICAgICAgbS5zZWVrKDMpCiAgICAgICAgIG0ud3JpdGUoImJhciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG0udGVsbCgpLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtWzpdLCAiMDEyYmFyNjc4OSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgIjAxMmJhcjY3ODkiKQogICAgICAgICBtLnNlZWsoOCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS53cml0ZSwgImJhciIpCiAKQEAgLTUzOSw4ICs1NzcsOCBAQAogICAgICAgICAgICAgbTFbOl0gPSBkYXRhMQogICAgICAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhMiksIHRhZ25hbWU9ImZvbyIpCiAgICAgICAgICAgICBtMls6XSA9IGRhdGEyCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtMVs6XSwgZGF0YTIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtMls6XSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xWzpdLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTJbOl0sIGRhdGEyKQogICAgICAgICAgICAgbTIuY2xvc2UoKQogICAgICAgICAgICAgbTEuY2xvc2UoKQogCkBAIC01NDksOCArNTg3LDggQEAKICAgICAgICAgICAgIG0xWzpdID0gZGF0YTEKICAgICAgICAgICAgIG0yID0gbW1hcC5tbWFwKC0xLCBsZW4oZGF0YTIpLCB0YWduYW1lPSJib28iKQogICAgICAgICAgICAgbTJbOl0gPSBkYXRhMgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobTFbOl0sIGRhdGExKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobTJbOl0sIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMVs6XSwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yWzpdLCBkYXRhMikKICAgICAgICAgICAgIG0yLmNsb3NlKCkKICAgICAgICAgICAgIG0xLmNsb3NlKCkKIApAQCAtNTc4LDkgKzYxNiw3NCBAQAogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIG0uY2xvc2UoKQogCisgICAgICAgIGRlZiB0ZXN0X2ludmFsaWRfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgICAgICMgc29ja2V0IGZpbGUgZGVzY3JpcHRvcnMgYXJlIHZhbGlkLCBidXQgb3V0IG9mIHJhbmdlCisgICAgICAgICAgICAjIGZvciBfZ2V0X29zZmhhbmRsZSwgY2F1c2luZyBhIGNyYXNoIHdoZW4gdmFsaWRhdGluZyB0aGUKKyAgICAgICAgICAgICMgcGFyYW1ldGVycyB0byBfZ2V0X29zZmhhbmRsZS4KKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBtID0gbW1hcC5tbWFwKHMuZmlsZW5vKCksIDEwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworCitjbGFzcyBMYXJnZU1tYXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICBkZWYgX3dvcmtpbmdfbGFyZ2VmaWxlKHNlbGYpOgorICAgICAgICAjIE9ubHkgcnVuIGlmIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbGFyZ2UgZmlsZXMuCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJywgYnVmZmVyaW5nPTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuc2VlaygweDgwMDAwMDAxKQorICAgICAgICAgICAgZi53cml0ZShiJ3gnKQorICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xhcmdlX29mZnNldChzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJyBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICByZXF1aXJlcygnbGFyZ2VmaWxlJywKKyAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyAlcyBieXRlcyBhbmQgYSBsb25nIHRpbWUgdG8gcnVuJyAlIHN0cigweDE4MDAwMDAwMCkpCisgICAgICAgIHNlbGYuX3dvcmtpbmdfbGFyZ2VmaWxlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYuc2VlaygweDE0RkZGRkZGRikKKyAgICAgICAgICAgIGYud3JpdGUoYiIgIikKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9MHgxNDAwMDAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsweEZGRkZGRkZdLCBiIiAiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVzaXplKHNlbGYpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHJlcXVpcmVzKCdsYXJnZWZpbGUnLAorICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzICVzIGJ5dGVzIGFuZCBhIGxvbmcgdGltZSB0byBydW4nICUgc3RyKDB4MTgwMDAwMDAwKSkKKyAgICAgICAgc2VsZi5fd29ya2luZ19sYXJnZWZpbGUoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi5zZWVrKDB4MTdGRkZGRkZGKQorICAgICAgICAgICAgZi53cml0ZShiIiAiKQorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDB4MTAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zaXplKCksIDB4MTgwMDAwMDAwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtLmNsb3NlKCkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KE1tYXBUZXN0cykKKyAgICBydW5fdW5pdHRlc3QoTW1hcFRlc3RzLCBMYXJnZU1tYXBUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkgYi9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQppbmRleCBhYzk5NzczLi41NjA1ZTNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21vZHVsZS5weQpAQCAtMSw2ICsxLDYgQEAKICMgVGVzdCB0aGUgbW9kdWxlIHR5cGUKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGdjX2NvbGxlY3QKIAogaW1wb3J0IHN5cwogTW9kdWxlVHlwZSA9IHR5cGUoc3lzKQpAQCAtMTAsNyArMTAsNyBAQAogICAgICAgICAjIEFuIHVuaW5pdGlhbGl6ZWQgbW9kdWxlIGhhcyBubyBfX2RpY3RfXyBvciBfX25hbWVfXywKICAgICAgICAgIyBhbmQgX19kb2NfXyBpcyBOb25lCiAgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUuX19uZXdfXyhNb2R1bGVUeXBlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm9vLl9fZGljdF9fIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19kaWN0X18gaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGRpciwgZm9vKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gZm9vLl9fbmFtZV9fCkBAIC01Myw3ICs1MywzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5iYXIsIDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDJ9KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm9vLl9fZGljdF9fIGlzIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19kaWN0X18gaXMgZCkKKworICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICBkZWYgdGVzdF9kb250X2NsZWFyX2RpY3Qoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDcxNDAuCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICAgICAgZm9vLmJhciA9IDQKKyAgICAgICAgICAgIHJldHVybiBmb28KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLl9fZGljdF9fWyJiYXIiXSwgNCkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2RpY3RfaW5fcmVmX2N5Y2xlKHNlbGYpOgorICAgICAgICBkZXN0cm95ZWQgPSBbXQorICAgICAgICBtID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgbS5kZXN0cm95ZWQgPSBkZXN0cm95ZWQKKyAgICAgICAgcyA9ICIiImNsYXNzIEE6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGRlc3Ryb3llZC5hcHBlbmQoMSkKK2EgPSBBKCkiIiIKKyAgICAgICAgZXhlYyhzLCBtLl9fZGljdF9fKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0cm95ZWQsIFsxXSkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChNb2R1bGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKaW5kZXggOWQ3Zjc2YS4uZTcxZDFlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKQEAgLTIxMSwxMSArMjExLDE3IEBACiAKIGRlZiBjcmVhdGVfcGFja2FnZShzb3VyY2UpOgogICAgIG9maSA9IE5vbmUKLSAgICBmb3IgbGluZSBpbiBzb3VyY2Uuc3BsaXRsaW5lcygpOgotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiAiKSBvciBsaW5lLnN0YXJ0c3dpdGgoIlx0Iik6Ci0gICAgICAgICAgICBvZmkud3JpdGUobGluZS5zdHJpcCgpICsgIlxuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9maSA9IG9wZW5fZmlsZShvcy5wYXRoLmpvaW4oVEVTVF9ESVIsIGxpbmUuc3RyaXAoKSkpCisgICAgdHJ5OgorICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2Uuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIgIikgb3IgbGluZS5zdGFydHN3aXRoKCJcdCIpOgorICAgICAgICAgICAgICAgIG9maS53cml0ZShsaW5lLnN0cmlwKCkgKyAiXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvZmk6CisgICAgICAgICAgICAgICAgICAgIG9maS5jbG9zZSgpCisgICAgICAgICAgICAgICAgb2ZpID0gb3Blbl9maWxlKG9zLnBhdGguam9pbihURVNUX0RJUiwgbGluZS5zdHJpcCgpKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvZmk6CisgICAgICAgICAgICBvZmkuY2xvc2UoKQogCiBjbGFzcyBNb2R1bGVGaW5kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgX2RvX3Rlc3Qoc2VsZiwgaW5mbywgcmVwb3J0PUZhbHNlKToKQEAgLTI0MCwxMiArMjQ2LDEyIEBACiAgICAgICAgICAgICBtb3JlID0gbGlzdChmb3VuZCAtIG1vZHVsZXMpCiAgICAgICAgICAgICBsZXNzID0gbGlzdChtb2R1bGVzIC0gZm91bmQpCiAgICAgICAgICAgICAjIGNoZWNrIGlmIHdlIGZvdW5kIHdoYXQgd2UgZXhwZWN0ZWQsIG5vdCBtb3JlLCBub3QgbGVzcwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoKG1vcmUsIGxlc3MpLCAoW10sIFtdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1vcmUsIGxlc3MpLCAoW10sIFtdKSkKIAogICAgICAgICAgICAgIyBjaGVjayBmb3IgbWlzc2luZyBhbmQgbWF5YmUgbWlzc2luZyBtb2R1bGVzCiAgICAgICAgICAgICBiYWQsIG1heWJlID0gbWYuYW55X21pc3NpbmdfbWF5YmUoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYmFkLCBtaXNzaW5nKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobWF5YmUsIG1heWJlX21pc3NpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZCwgbWlzc2luZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF5YmUsIG1heWJlX21pc3NpbmcpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkaXN0dXRpbHMuZGlyX3V0aWwucmVtb3ZlX3RyZWUoVEVTVF9ESVIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CmluZGV4IDg1MzZmMGEuLjYzYzFlNjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQpAQCAtNSw3ICs1LDYgQEAKICMKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4KIGltcG9ydCB1bml0dGVzdCwgU3RyaW5nSU8sIGNvZGVjcywgc3lzLCBvcwogaW1wb3J0IF9tdWx0aWJ5dGVjb2RlYwpAQCAtNDcsMTIgKzQ2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxlXHg5MmhhbVx4OTNzcGFtJywgJ3Rlc3QuY2prdGVzdCcpCiAKICAgICBkZWYgdGVzdF9jb2RpbmdzcGVjKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgZW5jIGluIEFMTF9DSktFTkNPRElOR1M6Ci0gICAgICAgICAgICAgICAgcHJpbnQgPj4gb3BlbihURVNURk4sICd3JyksICcjIGNvZGluZzonLCBlbmMKLSAgICAgICAgICAgICAgICBleGVjIG9wZW4oVEVTVEZOKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKyAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgorICAgICAgICAgICAgY29kZSA9ICcjIGNvZGluZzoge31cbicuZm9ybWF0KGVuYykKKyAgICAgICAgICAgIGV4ZWMgY29kZQogCiAgICAgZGVmIHRlc3RfaW5pdF9zZWdmYXVsdChzZWxmKToKICAgICAgICAgIyBidWcgIzMzMDU6IHRoaXMgdXNlZCB0byBzZWdmYXVsdApAQCAtMjI2LDEwICsyMjIsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc28yMDIyanAyLmRlY29kZSgnaXNvMjAyMi1qcC0yJyksIHVuaSkKIAogICAgIGRlZiB0ZXN0X2lzbzIwMjJfanBfZzAoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbElmKCdceDBlJyBpbiB1J1xOe1NPRlQgSFlQSEVOfScuZW5jb2RlKCdpc28tMjAyMi1qcC0yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1x4MGUnLCB1J1xOe1NPRlQgSFlQSEVOfScuZW5jb2RlKCdpc28tMjAyMi1qcC0yJykpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2lzby0yMDIyLWpwLTIwMDQnLCAnaXNvLTIwMjItanAtMycpOgogICAgICAgICAgICAgZSA9IHUnXHUzNDA2Jy5lbmNvZGUoZW5jb2RpbmcpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihmaWx0ZXIobGFtYmRhIHg6IHggPj0gJ1x4ODAnLCBlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyKGxhbWJkYSB4OiB4ID49ICdceDgwJywgZSkpCiAKICAgICBkZWYgdGVzdF9idWcxNTcyODMyKHNlbGYpOgogICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+PSAweDEwMDAwOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CmluZGV4IDgyZTQ2ZDYuLjA2MzkwMzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKQEAgLTYsNiArNiw3IEBACiAKIGltcG9ydCBzeXMsIGNvZGVjcwogaW1wb3J0IHVuaXR0ZXN0LCByZQorZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIApAQCAtMjUxLDkgKzI1Miw5IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0U2tpcHBlZCgiQ291bGQgbm90IHJldHJpZXZlICIrc2VsZi5tYXBmaWxldXJsKQorICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLmNsb3NlKCkgIyB0ZXN0IGl0IHRvIHJlcG9ydCB0aGUgZXJyb3IgZWFybHkKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKIAogICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHRlc3Rfc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHNlbGYubWFwZmlsZXVybCkKQEAgLTI2OSwzNiArMjcwLDM4IEBACiAgICAgICAgIHVuaWNocnMgPSBsYW1iZGEgczogdScnLmpvaW4oX3VuaWNocihjKSBmb3IgYyBpbiBzLnNwbGl0KCcrJykpCiAgICAgICAgIHVydF93YSA9IHt9CiAKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpOgotICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGRhdGEgPSBsaW5lLnNwbGl0KCcjJylbMF0uc3RyaXAoKS5zcGxpdCgpCi0gICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aXRoIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBkYXRhID0gbGluZS5zcGxpdCgnIycpWzBdLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSAyOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBjc2V0dmFsID0gZXZhbChkYXRhWzBdKQotICAgICAgICAgICAgaWYgY3NldHZhbCA8PSAweDdGOgotICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsICYgMHhmZikKLSAgICAgICAgICAgIGVsaWYgY3NldHZhbCA+PSAweDEwMDAwMDA6Ci0gICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMjQpICsgY2hyKChjc2V0dmFsID4+IDE2KSAmIDB4ZmYpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGNocigoY3NldHZhbCA+PiA4KSAmIDB4ZmYpICsgY2hyKGNzZXR2YWwgJiAweGZmKQotICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwMDA6Ci0gICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMTYpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgIGNocigoY3NldHZhbCA+PiA4KSAmIDB4ZmYpICsgY2hyKGNzZXR2YWwgJiAweGZmKQotICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwOgotICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsID4+IDgpICsgY2hyKGNzZXR2YWwgJiAweGZmKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNzZXR2YWwgPSBldmFsKGRhdGFbMF0pCisgICAgICAgICAgICAgICAgaWYgY3NldHZhbCA8PSAweDdGOgorICAgICAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMjQpICsgY2hyKChjc2V0dmFsID4+IDE2KSAmIDB4ZmYpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHIoKGNzZXR2YWwgPj4gOCkgJiAweGZmKSArIGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgPj4gMTYpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHIoKGNzZXR2YWwgPj4gOCkgJiAweGZmKSArIGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbGlmIGNzZXR2YWwgPj0gMHgxMDA6CisgICAgICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsID4+IDgpICsgY2hyKGNzZXR2YWwgJiAweGZmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIHVuaWNoID0gdW5pY2hycyhkYXRhWzFdKQotICAgICAgICAgICAgaWYgdW5pY2ggPT0gdSdcdWZmZmQnIG9yIHVuaWNoIGluIHVydF93YToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgdXJ0X3dhW3VuaWNoXSA9IGNzZXRjaAorICAgICAgICAgICAgICAgIHVuaWNoID0gdW5pY2hycyhkYXRhWzFdKQorICAgICAgICAgICAgICAgIGlmIHVuaWNoID09IHUnXHVmZmZkJyBvciB1bmljaCBpbiB1cnRfd2E6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdXJ0X3dhW3VuaWNoXSA9IGNzZXRjaAogCi0gICAgICAgICAgICBzZWxmLl90ZXN0cG9pbnQoY3NldGNoLCB1bmljaCkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0cG9pbnQoY3NldGNoLCB1bmljaCkKIAogICAgIGRlZiBfdGVzdF9tYXBwaW5nX2ZpbGVfdWNtKHNlbGYpOgotICAgICAgICB1Y21kYXRhID0gc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLnJlYWQoKQorICAgICAgICB3aXRoIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKSBhcyBmOgorICAgICAgICAgICAgdWNtZGF0YSA9IGYucmVhZCgpCiAgICAgICAgIHVjID0gcmUuZmluZGFsbCgnPGEgdT0iKFtBLUYwLTldezR9KSIgYj0iKFswLTlBLUYgXSspIi8+JywgdWNtZGF0YSkKICAgICAgICAgZm9yIHVuaSwgY29kZWQgaW4gdWM6CiAgICAgICAgICAgICB1bmljaCA9IHVuaWNocihpbnQodW5pLCAxNikpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CmluZGV4IDc1ODJjYzMuLjc4YjAwMmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CkBAIC01LDcgKzUsNiBAQAogIwogCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBRdWV1ZQogaW1wb3J0IHRpbWUKIGltcG9ydCBzeXMKQEAgLTEzLDMwICsxMiwzNCBAQAogaW1wb3J0IGdjCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgYXJyYXkKLWltcG9ydCBjb3B5CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgbG9nZ2luZwotZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci0KK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitfbXVsdGlwcm9jZXNzaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ19tdWx0aXByb2Nlc3NpbmcnKQorIyBpbXBvcnQgdGhyZWFkaW5nIGFmdGVyIF9tdWx0aXByb2Nlc3NpbmcgdG8gcmFpc2UgYSBtb3JlIHJldmVsYW50IGVycm9yCisjIG1lc3NhZ2U6ICJObyBtb2R1bGUgbmFtZWQgX211bHRpcHJvY2Vzc2luZyIuIF9tdWx0aXByb2Nlc3NpbmcgaXMgbm90IGNvbXBpbGVkCisjIHdpdGhvdXQgdGhyZWFkIHN1cHBvcnQuCitpbXBvcnQgdGhyZWFkaW5nCiAKICMgV29yayBhcm91bmQgYnJva2VuIHNlbV9vcGVuIGltcGxlbWVudGF0aW9ucwotdHJ5OgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUKLWV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZAotICAgIHJhaXNlIFRlc3RTa2lwcGVkKGUpCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJykKIAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teQogaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmhlYXAKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucG9vbAotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKIAogZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHV0aWwKIAordHJ5OgorICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyBpbXBvcnQgVmFsdWUsIGNvcHkKKyAgICBIQVNfU0hBUkVEQ1RZUEVTID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBU19TSEFSRURDVFlQRVMgPSBGYWxzZQorCiAjCiAjCiAjCkBAIC00OCw3ICs1MSw3IEBACiAjCiAKIExPR19MRVZFTCA9IHV0aWwuU1VCV0FSTklORwotI0xPR19MRVZFTCA9IGxvZ2dpbmcuV0FSTklORworI0xPR19MRVZFTCA9IGxvZ2dpbmcuREVCVUcKIAogREVMVEEgPSAwLjEKIENIRUNLX1RJTUlOR1MgPSBGYWxzZSAgICAgIyBtYWtpbmcgdHJ1ZSBtYWtlcyB0ZXN0cyB0YWtlIGEgbG90IGxvbmdlcgpAQCAtNjYsNiArNjksMTYgQEAKIFdJTjMyID0gKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiKQogCiAjCisjIFNvbWUgdGVzdHMgcmVxdWlyZSBjdHlwZXMKKyMKKwordHJ5OgorICAgIGZyb20gY3R5cGVzIGltcG9ydCBTdHJ1Y3R1cmUsIGNfaW50LCBjX2RvdWJsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFN0cnVjdHVyZSA9IG9iamVjdAorICAgIGNfaW50ID0gY19kb3VibGUgPSBOb25lCisKKyMKICMgQ3JlYXRlcyBhIHdyYXBwZXIgZm9yIGEgZnVuY3Rpb24gd2hpY2ggcmVjb3JkcyB0aGUgdGltZSBpdCB0YWtlcyB0byBmaW5pc2gKICMKIApAQCAtMTAyLDYgKzExNSwxMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIHJlcykKIAorICAgICMgRm9yIHRoZSBzYW5pdHkgb2YgV2luZG93cyB1c2VycywgcmF0aGVyIHRoYW4gY3Jhc2hpbmcgb3IgZnJlZXppbmcgaW4KKyAgICAjIG11bHRpcGxlIHdheXMuCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzaG91bGRuJ3QgdHJ5IHRvIHBpY2tsZSBhIHRlc3QgY2FzZSIpCisKKyAgICBfX3JlZHVjZV9leF9fID0gX19yZWR1Y2VfXworCiAjCiAjIFJldHVybiB0aGUgdmFsdWUgb2YgYSBzZW1hcGhvcmUKICMKQEAgLTEzNSwxNyArMTU1LDE4IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN1cnJlbnQuaXNfYWxpdmUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjdXJyZW50LmRhZW1vbikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYXV0aGtleSkgPiAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJlbnQuaWRlbnQsIG9zLmdldHBpZCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJlbnQuZXhpdGNvZGUsIE5vbmUpCiAKLSAgICBkZWYgX3Rlc3Qoc2VsZiwgcSwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnRfcHJvY2VzcygpCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0KGNscywgcSwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGN1cnJlbnQgPSBjbHMuY3VycmVudF9wcm9jZXNzKCkKICAgICAgICAgcS5wdXQoYXJncykKICAgICAgICAgcS5wdXQoa3dkcykKICAgICAgICAgcS5wdXQoY3VycmVudC5uYW1lKQotICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3RocmVhZHMnOgorICAgICAgICBpZiBjbHMuVFlQRSAhPSAndGhyZWFkcyc6CiAgICAgICAgICAgICBxLnB1dChieXRlcyhjdXJyZW50LmF1dGhrZXkpKQogICAgICAgICAgICAgcS5wdXQoY3VycmVudC5waWQpCiAKQEAgLTE2MiwzMyArMTgzLDM0IEBACiAgICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnRfcHJvY2VzcygpCiAKICAgICAgICAgaWYgc2VsZi5UWVBFICE9ICd0aHJlYWRzJzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuYXV0aGtleSwgY3VycmVudC5hdXRoa2V5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwLmlzX2FsaXZlKCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwLmRhZW1vbiwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXV0aGtleSwgY3VycmVudC5hdXRoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5kYWVtb24sIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkgaXMgbGlzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCBOb25lKQogCiAgICAgICAgIHAuc3RhcnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuZXhpdGNvZGUsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHAuaXNfYWxpdmUoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHEuZ2V0KCksIGFyZ3NbMTpdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhxLmdldCgpLCBrd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHEuZ2V0KCksIHAubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBhcmdzWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXQoKSwgcC5uYW1lKQogICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3RocmVhZHMnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocS5nZXQoKSwgY3VycmVudC5hdXRoa2V5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocS5nZXQoKSwgcC5waWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGN1cnJlbnQuYXV0aGtleSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXQoKSwgcC5waWQpCiAKICAgICAgICAgcC5qb2luKCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwLmV4aXRjb2RlLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwLmlzX2FsaXZlKCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAotICAgIGRlZiBfdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3Rlcm1pbmF0ZShjbHMpOgogICAgICAgICB0aW1lLnNsZWVwKDEwMDApCiAKICAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CkBAIC0yMDAsNyArMjIyLDcgQEAKICAgICAgICAgcC5zdGFydCgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCBOb25lKQogCiAgICAgICAgIHAudGVybWluYXRlKCkKQEAgLTIxMCw3ICsyMzIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGpvaW4uZWxhcHNlZCwgMC4wKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAogICAgICAgICBwLmpvaW4oKQogCkBAIC0yMjksMjEgKzI1MSwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSksIGxpc3QpCiAKICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oREVMVEEsKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAogICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCiAgICAgICAgIHAuam9pbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIG5vdCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAKLSAgICBkZWYgX3Rlc3RfcmVjdXJzaW9uKHNlbGYsIHdjb25uLCBpZCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6CiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6Ci0gICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PXNlbGYuX3Rlc3RfcmVjdXJzaW9uLCBhcmdzPSh3Y29ubiwgaWQrW2ldKQorICAgICAgICAgICAgICAgIHAgPSBjbHMuUHJvY2VzcygKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PWNscy5fdGVzdF9yZWN1cnNpb24sIGFyZ3M9KHdjb25uLCBpZCtbaV0pCiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICBwLnN0YXJ0KCkKICAgICAgICAgICAgICAgICBwLmpvaW4oKQpAQCAtMzI2LDcgKzM0OSw4IEBACiBjbGFzcyBfVGVzdFF1ZXVlKEJhc2VUZXN0Q2FzZSk6CiAKIAotICAgIGRlZiBfdGVzdF9wdXQoc2VsZiwgcXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3B1dChjbHMsIHF1ZXVlLCBjaGlsZF9jYW5fc3RhcnQsIHBhcmVudF9jYW5fY29udGludWUpOgogICAgICAgICBjaGlsZF9jYW5fc3RhcnQud2FpdCgpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDYpOgogICAgICAgICAgICAgcXVldWUuZ2V0KCkKQEAgLTM5MCw3ICs0MTQsOCBAQAogCiAgICAgICAgIHByb2Muam9pbigpCiAKLSAgICBkZWYgX3Rlc3RfZ2V0KHNlbGYsIHF1ZXVlLCBjaGlsZF9jYW5fc3RhcnQsIHBhcmVudF9jYW5fY29udGludWUpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9nZXQoY2xzLCBxdWV1ZSwgY2hpbGRfY2FuX3N0YXJ0LCBwYXJlbnRfY2FuX2NvbnRpbnVlKToKICAgICAgICAgY2hpbGRfY2FuX3N0YXJ0LndhaXQoKQogICAgICAgICAjcXVldWUucHV0KDEpCiAgICAgICAgIHF1ZXVlLnB1dCgyKQpAQCAtNDUxLDcgKzQ3Niw4IEBACiAKICAgICAgICAgcHJvYy5qb2luKCkKIAotICAgIGRlZiBfdGVzdF9mb3JrKHNlbGYsIHF1ZXVlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfZm9yayhjbHMsIHF1ZXVlKToKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAsIDIwKToKICAgICAgICAgICAgIHF1ZXVlLnB1dChpKQogICAgICAgICAjIG5vdGUgdGhhdCBhdCB0aGlzIHBvaW50IHRoZSBpdGVtcyBtYXkgb25seSBiZSBidWZmZXJlZCwgc28gdGhlCkBAIC00OTksNyArNTI1LDggQEAKICAgICAgICAgcS5nZXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMCkKIAotICAgIGRlZiBfdGVzdF90YXNrX2RvbmUoc2VsZiwgcSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3Rhc2tfZG9uZShjbHMsIHEpOgogICAgICAgICBmb3Igb2JqIGluIGl0ZXIocS5nZXQsIE5vbmUpOgogICAgICAgICAgICAgdGltZS5zbGVlcChERUxUQSkKICAgICAgICAgICAgIHEudGFza19kb25lKCkKQEAgLTUwOCw3ICs1MzUsNyBAQAogICAgICAgICBxdWV1ZSA9IHNlbGYuSm9pbmFibGVRdWV1ZSgpCiAKICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA1KSBhbmQgbm90IGhhc2F0dHIocXVldWUsICd0YXNrX2RvbmUnKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVxdWlyZXMgJ3F1ZXVlLnRhc2tfZG9uZSgpJyBtZXRob2QiKQogCiAgICAgICAgIHdvcmtlcnMgPSBbc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3Rhc2tfZG9uZSwgYXJncz0ocXVldWUsKSkKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNCldCkBAIC02MTEsNyArNjM4LDggQEAKIAogY2xhc3MgX1Rlc3RDb25kaXRpb24oQmFzZVRlc3RDYXNlKToKIAotICAgIGRlZiBmKHNlbGYsIGNvbmQsIHNsZWVwaW5nLCB3b2tlbiwgdGltZW91dD1Ob25lKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZihjbHMsIGNvbmQsIHNsZWVwaW5nLCB3b2tlbiwgdGltZW91dD1Ob25lKToKICAgICAgICAgY29uZC5hY3F1aXJlKCkKICAgICAgICAgc2xlZXBpbmcucmVsZWFzZSgpCiAgICAgICAgIGNvbmQud2FpdCh0aW1lb3V0KQpAQCAtNzQzLDcgKzc3MSw4IEBACiAKIGNsYXNzIF9UZXN0RXZlbnQoQmFzZVRlc3RDYXNlKToKIAotICAgIGRlZiBfdGVzdF9ldmVudChzZWxmLCBldmVudCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2V2ZW50KGNscywgZXZlbnQpOgogICAgICAgICB0aW1lLnNsZWVwKFRJTUVPVVQyKQogICAgICAgICBldmVudC5zZXQoKQogCkBAIC03NTMsMjAgKzc4MiwyMiBAQAogCiAgICAgICAgICMgUmVtb3ZlZCB0ZW1wb3JhaWx5LCBkdWUgdG8gQVBJIHNoZWFyLCB0aGlzIGRvZXMgbm90CiAgICAgICAgICMgd29yayB3aXRoIHRocmVhZGluZy5fRXZlbnQgb2JqZWN0cy4gaXNfc2V0ID09IGlzU2V0Ci0gICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGV2ZW50LmlzX3NldCgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgRmFsc2UpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KDAuMCksIE5vbmUpCisgICAgICAgICMgUmVtb3ZlZCwgdGhyZWFkaW5nLkV2ZW50LndhaXQoKSB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIF9fZmxhZworICAgICAgICAjIGluc3RlYWQgb2YgTm9uZS4gQVBJIFNoZWFyIHdpdGggdGhlIHNlbWFwaG9yZSBiYWNrZWQgbXAuRXZlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KDAuMCksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBGYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbCh3YWl0LmVsYXBzZWQsIFRJTUVPVVQxKQogCiAgICAgICAgIGV2ZW50LnNldCgpCiAKICAgICAgICAgIyBTZWUgbm90ZSBhYm92ZSBvbiB0aGUgQVBJIGRpZmZlcmVuY2VzCi0gICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdCgpLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQogICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIFRydWUpCiAKQEAgLTc3NSw3ICs4MDYsNyBAQAogICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChldmVudC5pc19zZXQoKSwgRmFsc2UpCiAKICAgICAgICAgc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2V2ZW50LCBhcmdzPShldmVudCwpKS5zdGFydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoKSwgVHJ1ZSkKIAogIwogIwpAQCAtNzgzLDYgKzgxNCw4IEBACiAKIGNsYXNzIF9UZXN0VmFsdWUoQmFzZVRlc3RDYXNlKToKIAorICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCiAgICAgY29kZXNfdmFsdWVzID0gWwogICAgICAgICAoJ2knLCA0MzQzLCAyNDIzNCksCiAgICAgICAgICgnZCcsIDMuNjI1LCAtNC4yNSksCkBAIC03OTAsMTUgKzgyMywxNyBAQAogICAgICAgICAoJ2MnLCBsYXRpbigneCcpLCBsYXRpbigneScpKQogICAgICAgICBdCiAKLSAgICBkZWYgX3Rlc3Qoc2VsZiwgdmFsdWVzKToKLSAgICAgICAgZm9yIHN2LCBjdiBpbiB6aXAodmFsdWVzLCBzZWxmLmNvZGVzX3ZhbHVlcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX1NIQVJFRENUWVBFUzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlcXVpcmVzIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0KGNscywgdmFsdWVzKToKKyAgICAgICAgZm9yIHN2LCBjdiBpbiB6aXAodmFsdWVzLCBjbHMuY29kZXNfdmFsdWVzKToKICAgICAgICAgICAgIHN2LnZhbHVlID0gY3ZbMl0KIAogCiAgICAgZGVmIHRlc3RfdmFsdWUoc2VsZiwgcmF3PUZhbHNlKToKLSAgICAgICAgaWYgc2VsZi5UWVBFICE9ICdwcm9jZXNzZXMnOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgaWYgcmF3OgogICAgICAgICAgICAgdmFsdWVzID0gW3NlbGYuUmF3VmFsdWUoY29kZSwgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUsIHZhbHVlLCBfIGluIHNlbGYuY29kZXNfdmFsdWVzXQpAQCAtODIwLDkgKzg1NSw2IEBACiAgICAgICAgIHNlbGYudGVzdF92YWx1ZShyYXc9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2dldG9ial9nZXRsb2NrKHNlbGYpOgotICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICB2YWwxID0gc2VsZi5WYWx1ZSgnaScsIDUpCiAgICAgICAgIGxvY2sxID0gdmFsMS5nZXRfbG9jaygpCiAgICAgICAgIG9iajEgPSB2YWwxLmdldF9vYmooKQpAQCAtODUwLDE0ICs4ODIsMTUgQEAKIAogY2xhc3MgX1Rlc3RBcnJheShCYXNlVGVzdENhc2UpOgogCi0gICAgZGVmIGYoc2VsZiwgc2VxKToKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmKGNscywgc2VxKToKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHNlcSkpOgogICAgICAgICAgICAgc2VxW2ldICs9IHNlcVtpLTFdCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKGNfaW50IGlzIE5vbmUsICJyZXF1aXJlcyBfY3R5cGVzIikKICAgICBkZWYgdGVzdF9hcnJheShzZWxmLCByYXc9RmFsc2UpOgotICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBzZXEgPSBbNjgwLCA2MjYsIDkzNCwgODIxLCAxNTAsIDIzMywgNTQ4LCA5ODIsIDcxNCwgODMxXQogICAgICAgICBpZiByYXc6CiAgICAgICAgICAgICBhcnIgPSBzZWxmLlJhd0FycmF5KCdpJywgc2VxKQpAQCAtODgwLDEzICs5MTMsMTIgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXJyWzpdKSwgc2VxKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCiAgICAgZGVmIHRlc3RfcmF3YXJyYXkoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF9hcnJheShyYXc9VHJ1ZSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoY19pbnQgaXMgTm9uZSwgInJlcXVpcmVzIF9jdHlwZXMiKQogICAgIGRlZiB0ZXN0X2dldG9ial9nZXRsb2NrX29iaihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5UWVBFICE9ICdwcm9jZXNzZXMnOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgYXJyMSA9IHNlbGYuQXJyYXkoJ2knLCByYW5nZSgxMCkpCiAgICAgICAgIGxvY2sxID0gYXJyMS5nZXRfbG9jaygpCiAgICAgICAgIG9iajEgPSBhcnIxLmdldF9vYmooKQpAQCAtOTkxLDYgKzEwMjMsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbWFwKHNxciwgcmFuZ2UoMTAwKSwgY2h1bmtzaXplPTIwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoc3FyLCByYW5nZSgxMDApKSkKIAorICAgIGRlZiB0ZXN0X21hcF9jaHVua3NpemUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9vbC5tYXBfYXN5bmMoc3FyLCBbXSwgY2h1bmtzaXplPTEpLmdldCh0aW1lb3V0PVRJTUVPVVQxKQorICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicG9vbC5tYXBfYXN5bmMgd2l0aCBjaHVua3NpemUgc3RhbGxlZCBvbiBudWxsIGxpc3QiKQorCiAgICAgZGVmIHRlc3RfYXN5bmMoc2VsZik6CiAgICAgICAgIHJlcyA9IHNlbGYucG9vbC5hcHBseV9hc3luYyhzcXIsICg3LCBUSU1FT1VUMSwpKQogICAgICAgICBnZXQgPSBUaW1pbmdXcmFwcGVyKHJlcy5nZXQpCkBAIC0xMDQ3LDYgKzEwODUsMzggQEAKICAgICAgICAgam9pbiA9IFRpbWluZ1dyYXBwZXIoc2VsZi5wb29sLmpvaW4pCiAgICAgICAgIGpvaW4oKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoam9pbi5lbGFwc2VkIDwgMC4yKQorCitjbGFzcyBfVGVzdFBvb2xXb3JrZXJMaWZldGltZShCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgKQorICAgIGRlZiB0ZXN0X3Bvb2xfd29ya2VyX2xpZmV0aW1lKHNlbGYpOgorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMywgbWF4dGFza3NwZXJjaGlsZD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocC5fcG9vbCkpCisgICAgICAgIG9yaWd3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgUnVuIG1hbnkgdGFza3Mgc28gZWFjaCB3b3JrZXIgZ2V0cyByZXBsYWNlZCAoaG9wZWZ1bGx5KQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHAuYXBwbHlfYXN5bmMoc3FyLCAoaSwgKSkpCisgICAgICAgICMgRmV0Y2ggdGhlIHJlc3VsdHMgYW5kIHZlcmlmeSB3ZSBnb3QgdGhlIHJpZ2h0IGFuc3dlcnMsCisgICAgICAgICMgYWxzbyBlbnN1cmluZyBhbGwgdGhlIHRhc2tzIGhhdmUgY29tcGxldGVkLgorICAgICAgICBmb3IgKGosIHJlcykgaW4gZW51bWVyYXRlKHJlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0KCksIHNxcihqKSkKKyAgICAgICAgIyBSZWZpbGwgdGhlIHBvb2wKKyAgICAgICAgcC5fcmVwb3B1bGF0ZV9wb29sKCkKKyAgICAgICAgIyBXYWl0IHVudGlsIGFsbCB3b3JrZXJzIGFyZSBhbGl2ZQorICAgICAgICBjb3VudGRvd24gPSA1CisgICAgICAgIHdoaWxlIGNvdW50ZG93biBhbmQgbm90IGFsbCh3LmlzX2FsaXZlKCkgZm9yIHcgaW4gcC5fcG9vbCk6CisgICAgICAgICAgICBjb3VudGRvd24gLT0gMQorICAgICAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgZmluYWx3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgQWxsIHBpZHMgc2hvdWxkIGJlIGFzc2lnbmVkLiAgU2VlIGlzc3VlICM3ODA1LgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIG9yaWd3b3JrZXJwaWRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIGZpbmFsd29ya2VycGlkcykKKyAgICAgICAgIyBGaW5hbGx5LCBjaGVjayB0aGF0IHRoZSB3b3JrZXIgcGlkcyBoYXZlIGNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3J0ZWQob3JpZ3dvcmtlcnBpZHMpLCBzb3J0ZWQoZmluYWx3b3JrZXJwaWRzKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKICMKICMgVGVzdCB0aGF0IG1hbmFnZXIgaGFzIGV4cGVjdGVkIG51bWJlciBvZiBzaGFyZWQgb2JqZWN0cyBsZWZ0CiAjCkBAIC0xMDYzLDggKzExMzMsMTAgQEAKICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpICAjIGRpc2NhcmQgZGVhZCBwcm9jZXNzIG9ianMKICAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgICByZWZzID0gc2VsZi5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpCisgICAgICAgIGRlYnVnX2luZm8gPSBzZWxmLm1hbmFnZXIuX2RlYnVnX2luZm8oKQogICAgICAgICBpZiByZWZzICE9IEVYUEVDVEVEX05VTUJFUjoKICAgICAgICAgICAgIHByaW50IHNlbGYubWFuYWdlci5fZGVidWdfaW5mbygpCisgICAgICAgICAgICBwcmludCBkZWJ1Z19pbmZvCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWZzLCBFWFBFQ1RFRF9OVU1CRVIpCiAKQEAgLTExNTgsNyArMTIzMCw4IEBACiAKICAgICBBTExPV0VEX1RZUEVTID0gKCdtYW5hZ2VyJywpCiAKLSAgICBkZWYgX3B1dHRlcihzZWxmLCBhZGRyZXNzLCBhdXRoa2V5KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3B1dHRlcihjbHMsIGFkZHJlc3MsIGF1dGhrZXkpOgogICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyMigKICAgICAgICAgICAgIGFkZHJlc3M9YWRkcmVzcywgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIKICAgICAgICAgICAgICkKQEAgLTExOTYsNyArMTI2OSw4IEBACiAKIGNsYXNzIF9UZXN0TWFuYWdlclJlc3RhcnQoQmFzZVRlc3RDYXNlKToKIAotICAgIGRlZiBfcHV0dGVyKHNlbGYsIGFkZHJlc3MsIGF1dGhrZXkpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcHV0dGVyKGNscywgYWRkcmVzcywgYXV0aGtleSk6CiAgICAgICAgIG1hbmFnZXIgPSBRdWV1ZU1hbmFnZXIoCiAgICAgICAgICAgICBhZGRyZXNzPWFkZHJlc3MsIGF1dGhrZXk9YXV0aGtleSwgc2VyaWFsaXplcj1TRVJJQUxJWkVSKQogICAgICAgICBtYW5hZ2VyLmNvbm5lY3QoKQpAQCAtMTIwNyw3ICsxMjgxLDExIEBACiAgICAgICAgIGF1dGhrZXkgPSBvcy51cmFuZG9tKDMyKQogICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyKAogICAgICAgICAgICAgYWRkcmVzcz0oJ2xvY2FsaG9zdCcsIDApLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUikKLSAgICAgICAgYWRkciA9IG1hbmFnZXIuZ2V0X3NlcnZlcigpLmFkZHJlc3MKKyAgICAgICAgc3J2ciA9IG1hbmFnZXIuZ2V0X3NlcnZlcigpCisgICAgICAgIGFkZHIgPSBzcnZyLmFkZHJlc3MKKyAgICAgICAgIyBDbG9zZSB0aGUgY29ubmVjdGlvbi5MaXN0ZW5lciBzb2NrZXQgd2hpY2ggZ2V0cyBvcGVuZWQgYXMgYSBwYXJ0CisgICAgICAgICMgb2YgbWFuYWdlci5nZXRfc2VydmVyKCkuIEl0J3Mgbm90IG5lZWRlZCBmb3IgdGhlIHRlc3QuCisgICAgICAgIHNydnIubGlzdGVuZXIuY2xvc2UoKQogICAgICAgICBtYW5hZ2VyLnN0YXJ0KCkKIAogICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9wdXR0ZXIsIGFyZ3M9KG1hbmFnZXIuYWRkcmVzcywgYXV0aGtleSkpCkBAIC0xMjMxLDcgKzEzMDksOCBAQAogCiAgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgJ3RocmVhZHMnKQogCi0gICAgZGVmIF9lY2hvKHNlbGYsIGNvbm4pOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZWNobyhjbHMsIGNvbm4pOgogICAgICAgICBmb3IgbXNnIGluIGl0ZXIoY29ubi5yZWN2X2J5dGVzLCBTRU5USU5FTCk6CiAgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMobXNnKQogICAgICAgICBjb25uLmNsb3NlKCkKQEAgLTEzODAsOCArMTQ1OSw5IEBACiAKICAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCAndGhyZWFkcycpCiAKLSAgICBkZWYgX3Rlc3Qoc2VsZiwgYWRkcmVzcyk6Ci0gICAgICAgIGNvbm4gPSBzZWxmLmNvbm5lY3Rpb24uQ2xpZW50KGFkZHJlc3MpCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0KGNscywgYWRkcmVzcyk6CisgICAgICAgIGNvbm4gPSBjbHMuY29ubmVjdGlvbi5DbGllbnQoYWRkcmVzcykKICAgICAgICAgY29ubi5zZW5kKCdoZWxsbycpCiAgICAgICAgIGNvbm4uY2xvc2UoKQogCkBAIC0xNTMwLDEyICsxNjEwLDYgQEAKICMKICMKIAotdHJ5OgotICAgIGZyb20gY3R5cGVzIGltcG9ydCBTdHJ1Y3R1cmUsIFZhbHVlLCBjb3B5LCBjX2ludCwgY19kb3VibGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBTdHJ1Y3R1cmUgPSBvYmplY3QKLSAgICBjX2ludCA9IGNfZG91YmxlID0gTm9uZQotCiBjbGFzcyBfRm9vKFN0cnVjdHVyZSk6CiAgICAgX2ZpZWxkc18gPSBbCiAgICAgICAgICgneCcsIGNfaW50KSwKQEAgLTE1NDYsNyArMTYyMCwxMiBAQAogCiAgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCiAKLSAgICBkZWYgX2RvdWJsZShzZWxmLCB4LCB5LCBmb28sIGFyciwgc3RyaW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBIQVNfU0hBUkVEQ1RZUEVTOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVxdWlyZXMgbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2RvdWJsZShjbHMsIHgsIHksIGZvbywgYXJyLCBzdHJpbmcpOgogICAgICAgICB4LnZhbHVlICo9IDIKICAgICAgICAgeS52YWx1ZSAqPSAyCiAgICAgICAgIGZvby54ICo9IDIKQEAgLTE1NTYsMTUgKzE2MzUsMTIgQEAKICAgICAgICAgICAgIGFycltpXSAqPSAyCiAKICAgICBkZWYgdGVzdF9zaGFyZWRjdHlwZXMoc2VsZiwgbG9jaz1GYWxzZSk6Ci0gICAgICAgIGlmIGNfaW50IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICB4ID0gVmFsdWUoJ2knLCA3LCBsb2NrPWxvY2spCiAgICAgICAgIHkgPSBWYWx1ZShjX2RvdWJsZSwgMS4wLzMuMCwgbG9jaz1sb2NrKQogICAgICAgICBmb28gPSBWYWx1ZShfRm9vLCAzLCAyLCBsb2NrPWxvY2spCiAgICAgICAgIGFyciA9IHNlbGYuQXJyYXkoJ2QnLCByYW5nZSgxMCksIGxvY2s9bG9jaykKICAgICAgICAgc3RyaW5nID0gc2VsZi5BcnJheSgnYycsIDIwLCBsb2NrPWxvY2spCi0gICAgICAgIHN0cmluZy52YWx1ZSA9ICdoZWxsbycKKyAgICAgICAgc3RyaW5nLnZhbHVlID0gbGF0aW4oJ2hlbGxvJykKIAogICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9kb3VibGUsIGFyZ3M9KHgsIHksIGZvbywgYXJyLCBzdHJpbmcpKQogICAgICAgICBwLnN0YXJ0KCkKQEAgLTE1ODIsOSArMTY1OCw2IEBACiAgICAgICAgIHNlbGYudGVzdF9zaGFyZWRjdHlwZXMobG9jaz1UcnVlKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKLSAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGZvbyA9IF9Gb28oMiwgNS4wKQogICAgICAgICBiYXIgPSBjb3B5KGZvbykKICAgICAgICAgZm9vLnggPSAwCkBAIC0xNjAwLDcgKzE2NzMsOCBAQAogCiAgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCiAKLSAgICBkZWYgX3Rlc3RfZmluYWxpemUoc2VsZiwgY29ubik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2ZpbmFsaXplKGNscywgY29ubik6CiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogCkBAIC0xNjU2LDEzICsxNzMwLDE3IEBACiAgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG1vZHVsZXMgPSAoCisgICAgICAgIG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKICAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAogICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJywgJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnLAorICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24nLAogICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZScsICdtdWx0aXByb2Nlc3NpbmcudXRpbCcKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgIF0KKworICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcworICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQogCiAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCkBAIC0xNjkwLDcgKzE3NjgsOCBAQAogICAgICAgICBsb2dnZXIuaW5mbygnbm9yIHdpbGwgdGhpcycpCiAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChMT0dfTEVWRUwpCiAKLSAgICBkZWYgX3Rlc3RfbGV2ZWwoc2VsZiwgY29ubik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2xldmVsKGNscywgY29ubik6CiAgICAgICAgIGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkKICAgICAgICAgY29ubi5zZW5kKGxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpKQogCkBAIC0xNzE2LDE4ICsxNzk1LDM4IEBACiAgICAgICAgIHJvb3RfbG9nZ2VyLnNldExldmVsKHJvb3RfbGV2ZWwpCiAgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsZXZlbD1MT0dfTEVWRUwpCiAKKworIyBjbGFzcyBfVGVzdExvZ2dpbmdQcm9jZXNzTmFtZShCYXNlVGVzdENhc2UpOgorIworIyAgICAgZGVmIGhhbmRsZShzZWxmLCByZWNvcmQpOgorIyAgICAgICAgIGFzc2VydCByZWNvcmQucHJvY2Vzc05hbWUgPT0gbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyMgICAgICAgICBzZWxmLl9faGFuZGxlZCA9IFRydWUKKyMKKyMgICAgIGRlZiB0ZXN0X2xvZ2dpbmcoc2VsZik6CisjICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuSGFuZGxlcigpCisjICAgICAgICAgaGFuZGxlci5oYW5kbGUgPSBzZWxmLmhhbmRsZQorIyAgICAgICAgIHNlbGYuX19oYW5kbGVkID0gRmFsc2UKKyMgICAgICAgICAjIEJ5cGFzcyBnZXRMb2dnZXIoKSBhbmQgc2lkZS1lZmZlY3RzCisjICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpKAorIyAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy50ZXN0LlRlc3RMb2dnaW5nUHJvY2Vzc05hbWUnKQorIyAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisjICAgICAgICAgbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCisjCisjICAgICAgICAgbG9nZ2VyLndhcm4oJ2ZvbycpCisjICAgICAgICAgYXNzZXJ0IHNlbGYuX19oYW5kbGVkCisKICMKICMgVGVzdCB0byB2ZXJpZnkgaGFuZGxlIHZlcmlmaWNhdGlvbiwgc2VlIGlzc3VlIDMzMjEKICMKIAogY2xhc3MgVGVzdEludmFsaWRIYW5kbGUodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgotICAgICAgICBpZiBXSU4zMjoKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBjb25uID0gX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uKDQ0OTc3NjA4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBjb25uLnBvbGwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIF9tdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbiwgLTEpCisKICMKICMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCiAjCkBAIC0xNzQ0LDcgKzE4NDMsNyBAQAogZGVmIGNyZWF0ZV90ZXN0X2Nhc2VzKE1peGluLCB0eXBlKToKICAgICByZXN1bHQgPSB7fQogICAgIGdsb2IgPSBnbG9iYWxzKCkKLSAgICBUeXBlID0gdHlwZVswXS51cHBlcigpICsgdHlwZVsxOl0KKyAgICBUeXBlID0gdHlwZS5jYXBpdGFsaXplKCkKIAogICAgIGZvciBuYW1lIGluIGdsb2Iua2V5cygpOgogICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19UZXN0Jyk6CkBAIC0xODMzLDYgKzE5MzIsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zha2VDb25uZWN0aW9uKCksIGInYWJjJykKIAogIworIyBUZXN0IE1hbmFnZXIuc3RhcnQoKS9Qb29sLl9faW5pdF9fKCkgaW5pdGlhbGl6ZXIgZmVhdHVyZSAtIHNlZSBpc3N1ZSA1NTg1CisjCisKK2RlZiBpbml0aWFsaXplcihucyk6CisgICAgbnMudGVzdCArPSAxCisKK2NsYXNzIFRlc3RJbml0aWFsaXplcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tZ3IgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCisgICAgICAgIHNlbGYubnMgPSBzZWxmLm1nci5OYW1lc3BhY2UoKQorICAgICAgICBzZWxmLm5zLnRlc3QgPSAwCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubWdyLnNodXRkb3duKCkKKworICAgIGRlZiB0ZXN0X21hbmFnZXJfaW5pdGlhbGl6ZXIoc2VsZik6CisgICAgICAgIG0gPSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0uc3RhcnQsIDEpCisgICAgICAgIG0uc3RhcnQoaW5pdGlhbGl6ZXIsIChzZWxmLm5zLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucy50ZXN0LCAxKQorICAgICAgICBtLnNodXRkb3duKCkKKworICAgIGRlZiB0ZXN0X3Bvb2xfaW5pdGlhbGl6ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbXVsdGlwcm9jZXNzaW5nLlBvb2wsIGluaXRpYWxpemVyPTEpCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgxLCBpbml0aWFsaXplciwgKHNlbGYubnMsKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucy50ZXN0LCAxKQorCisjCiAjIElzc3VlIDUxNTUsIDUzMTMsIDUzMzE6IFRlc3QgcHJvY2VzcyBpbiBwcm9jZXNzZXMKICMgVmVyaWZpZXMgb3MuY2xvc2Uoc3lzLnN0ZGluLmZpbGVubykgdnMuIHN5cy5zdGRpbi5jbG9zZSgpIGJlaGF2aW9yCiAjCkBAIC0xODk4LDcgKzIwMjcsOCBAQAogICAgICAgICBmbGlrZS5mbHVzaCgpCiAgICAgICAgIGFzc2VydCBzaW8uZ2V0dmFsdWUoKSA9PSAnZm9vJwogCi10ZXN0Y2FzZXNfb3RoZXIgPSBbT3RoZXJUZXN0LCBUZXN0SW52YWxpZEhhbmRsZSwgVGVzdFN0ZGluQmFkZmlsZWRlc2NyaXB0b3JdCit0ZXN0Y2FzZXNfb3RoZXIgPSBbT3RoZXJUZXN0LCBUZXN0SW52YWxpZEhhbmRsZSwgVGVzdEluaXRpYWxpemVycywKKyAgICAgICAgICAgICAgICAgICBUZXN0U3RkaW5CYWRmaWxlZGVzY3JpcHRvcl0KIAogIwogIwpAQCAtMTkwOSw4ICsyMDM5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgc2VlIGlzc3VlIDMxMTEhIikKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgc2VlIGlzc3VlIDMxMTEhIikKIAogICAgIGlmIHJ1biBpcyBOb25lOgogICAgICAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QgYXMgcnVuCkBAIC0xOTM0LDggKzIwNjMsMTQgQEAKIAogICAgIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSh0YykgZm9yIHRjIGluIHRlc3RjYXNlcykKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKLSAgICAgICAgICAgICgiLitfXyhnZXR8c2V0KXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICMgKG5jb2dobGFuKTogV2hldGhlciBvciBub3Qgc3lzLmV4Y19jbGVhciBpcyBleGVjdXRlZCBieSB0aGUgdGhyZWFkaW5nCisgICAgIyBtb2R1bGUgZHVyaW5nIHRoZXNlIHRlc3RzIGlzIGF0IGxlYXN0IHBsYXRmb3JtIGRlcGVuZGVudCBhbmQgcG9zc2libHkKKyAgICAjIG5vbi1kZXRlcm1pbmlzdGljIG9uIGFueSBnaXZlbiBwbGF0Zm9ybS4gU28gd2UgZG9uJ3QgbWluZCBpZiB0aGUgbGlzdGVkCisgICAgIyB3YXJuaW5ncyBhcmVuJ3QgYWN0dWFsbHkgcmFpc2VkLgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoIi4rX18oZ2V0fHNldClzbGljZV9fIGhhcyBiZWVuIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKHIic3lzLmV4Y19jbGVhclwoXCkgbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICBxdWlldD1UcnVlKToKICAgICAgICAgcnVuKHN1aXRlKQogCiAgICAgVGhyZWFkc01peGluLnBvb2wudGVybWluYXRlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXV0ZXgucHkgYi9MaWIvdGVzdC90ZXN0X211dGV4LnB5CmluZGV4IDRlM2Y3Y2QuLjI4ODIyMTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXV0ZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdXRleC5weQpAQCAtOSwxNCArOSwxNCBAQAogCiAgICAgICAgIGRlZiBjYWxsZWRfYnlfbXV0ZXgoc29tZV9kYXRhKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29tZV9kYXRhLCAic3BhbSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obS50ZXN0KCksICJtdXRleCBub3QgaGVsZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobS50ZXN0KCksICJtdXRleCBub3QgaGVsZCIpCiAgICAgICAgICAgICAjIE5lc3RlZCBsb2NraW5nCiAgICAgICAgICAgICBtLmxvY2soY2FsbGVkX2J5X211dGV4MiwgImVnZ3MiKQogCiAgICAgICAgIGRlZiBjYWxsZWRfYnlfbXV0ZXgyKHNvbWVfZGF0YSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzb21lX2RhdGEsICJlZ2dzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtLnRlc3QoKSwgIm11dGV4IG5vdCBoZWxkIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZWFkeV9mb3JfMiwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLnRlc3QoKSwgIm11dGV4IG5vdCBoZWxkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkeV9mb3JfMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGVkX2J5X211dGV4MiBjYWxsZWQgdG9vIHNvb24iKQogCiAgICAgICAgIG0gPSBtdXRleC5tdXRleCgpCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgICMgdW5sb2NrIGJvdGggbG9ja3MKICAgICAgICAgbS51bmxvY2soKQogICAgICAgICBtLnVubG9jaygpCi0gICAgICAgIHNlbGYuZmFpbElmKG0udGVzdCgpLCAibXV0ZXggc3RpbGwgaGVsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS50ZXN0KCksICJtdXRleCBzdGlsbCBoZWxkIikKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNdXRleFRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25ldHJjLnB5IGIvTGliL3Rlc3QvdGVzdF9uZXRyYy5weQppbmRleCBiNTM2MjU1Li5hOTg4NDMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25ldHJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbmV0cmMucHkKQEAgLTMsNyArMywxMyBAQAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogVEVTVF9ORVRSQyA9ICIiIgorCisgI3RoaXMgaXMgYSBjb21tZW50CisjdGhpcyBpcyBhIGNvbW1lbnQKKyMgdGhpcyBpcyBhIGNvbW1lbnQKKwogbWFjaGluZSBmb28gbG9naW4gbG9nMSBwYXNzd29yZCBwYXNzMSBhY2NvdW50IGFjY3QxCittYWNoaW5lIGJhciBsb2dpbiBsb2cxIHBhc3N3b3JkIHBhc3MjIGFjY291bnQgYWNjdDEKIAogbWFjZGVmIG1hY3JvMQogbGluZTEKQEAgLTI4LDE4ICszNCwyMSBAQAogICAgICAgICBmcCA9IG9wZW4odGVtcF9maWxlbmFtZSwgbW9kZSkKICAgICAgICAgZnAud3JpdGUoVEVTVF9ORVRSQykKICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBzZWxmLm5ldHJjID0gbmV0cmMubmV0cmModGVtcF9maWxlbmFtZSkKKyAgICAgICAgc2VsZi5ucmMgPSBuZXRyYy5uZXRyYyh0ZW1wX2ZpbGVuYW1lKQogCiAgICAgZGVmIHRlYXJEb3duIChzZWxmKToKLSAgICAgICAgZGVsIHNlbGYubmV0cmMKICAgICAgICAgb3MudW5saW5rKHRlbXBfZmlsZW5hbWUpCiAKICAgICBkZWYgdGVzdF9jYXNlXzEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm5ldHJjLm1hY3JvcyA9PSB7J21hY3JvMSc6WydsaW5lMVxuJywgJ2xpbmUyXG4nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjcm8yJzpbJ2xpbmUzXG4nLCAnbGluZTRcbiddfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubmV0cmMuaG9zdHNbJ2ZvbyddID09ICgnbG9nMScsICdhY2N0MScsICdwYXNzMScpKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5uZXRyYy5ob3N0c1snZGVmYXVsdCddID09ICgnbG9nMicsIE5vbmUsICdwYXNzMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnJjLmhvc3RzWydmb28nXSwgKCdsb2cxJywgJ2FjY3QxJywgJ3Bhc3MxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucmMuaG9zdHNbJ2RlZmF1bHQnXSwgKCdsb2cyJywgTm9uZSwgJ3Bhc3MyJykpCisKKyAgICBkZWYgdGVzdF9tYWNyb3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5ucmMubWFjcm9zLCB7J21hY3JvMSc6WydsaW5lMVxuJywgJ2xpbmUyXG4nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFjcm8yJzpbJ2xpbmUzXG4nLCAnbGluZTRcbiddfSkKKworICAgIGRlZiB0ZXN0X3BhcnNlc19wYXNzd29yZHNfd2l0aF9oYXNoX2NoYXJhY3RlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5yYy5ob3N0c1snYmFyJ10sICgnbG9nMScsICdhY2N0MScsICdwYXNzIycpKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOZXRyY1Rlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uZXcucHkgYi9MaWIvdGVzdC90ZXN0X25ldy5weQppbmRleCAyMzFmNGJiLi5hODRiM2QxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25ldy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25ldy5weQpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICBkID0gbmV3LmNvZGUoYXJnY291bnQsIG5sb2NhbHMsIHN0YWNrc2l6ZSwgZmxhZ3MsIGNvZGVzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzLCB0LCB2YXJuYW1lcywgZmlsZW5hbWUsIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sIGxub3RhYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHRbMF0pIGlzIFMsICJlZWssIHR1cGxlIGNoYW5nZWQgdW5kZXIgdXMhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHRbMF0pIGlzIFMsICJlZWssIHR1cGxlIGNoYW5nZWQgdW5kZXIgdXMhIikKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTmV3VGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmlzLnB5IGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKaW5kZXggYzk1OGQ0Yi4uOGQ0OTU1MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgbmlzCisKK25pcyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCduaXMnKQogCiBjbGFzcyBOaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbWFwcyhzZWxmKToKQEAgLTEwLDcgKzExLDcgQEAKICAgICAgICAgICAgICMgTklTIGlzIHByb2JhYmx5IG5vdCBhY3RpdmUsIHNvIHRoaXMgdGVzdCBpc24ndCB1c2VmdWwKICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJUZXN0IFNraXBwZWQ6IiwgbXNnCi0gICAgICAgICAgICAjIENhbid0IHJhaXNlIFRlc3RTa2lwcGVkIGFzIHJlZ3J0ZXN0IG9ubHkgcmVjb2duaXplcyB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAjIENhbid0IHJhaXNlIFNraXBUZXN0IGFzIHJlZ3J0ZXN0IG9ubHkgcmVjb2duaXplcyB0aGUgZXhjZXB0aW9uCiAgICAgICAgICAgICAjICAgaW1wb3J0IHRpbWUuCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CmluZGV4IDRhMGYxYzUuLjMwNDBhMDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTEsMTkgKzEsMTcgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgb3Blbl91cmxyZXNvdXJjZSwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgb3Blbl91cmxyZXNvdXJjZQogaW1wb3J0IHVuaXR0ZXN0CiAKK2Zyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUsIHVuaWRhdGFfdmVyc2lvbgogCi1URVNUREFUQUZJTEUgPSAiTm9ybWFsaXphdGlvblRlc3QiICsgb3MuZXh0c2VwICsgInR4dCIKK1RFU1REQVRBRklMRSA9ICJOb3JtYWxpemF0aW9uVGVzdC50eHQiCiBURVNUREFUQVVSTCA9ICJodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8iICsgdW5pZGF0YV92ZXJzaW9uICsgIi91Y2QvIiArIFRFU1REQVRBRklMRQogCi1pZiBvcy5wYXRoLmV4aXN0cyhURVNUREFUQUZJTEUpOgotICAgIGYgPSBvcGVuKFRFU1REQVRBRklMRSkKLSAgICBsID0gZi5yZWFkbGluZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgaWYgbm90IHVuaWRhdGFfdmVyc2lvbiBpbiBsOgotICAgICAgICBvcy51bmxpbmsoVEVTVERBVEFGSUxFKQorZGVmIGNoZWNrX3ZlcnNpb24odGVzdGZpbGUpOgorICAgIGhkciA9IHRlc3RmaWxlLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gdW5pZGF0YV92ZXJzaW9uIGluIGhkcgogCiBjbGFzcyBSYW5nZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMzksOCArMzcsMTQgQEAKIAogY2xhc3MgTm9ybWFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21haW4oc2VsZik6CisgICAgICAgIHBhcnQgPSBOb25lCiAgICAgICAgIHBhcnQxX2RhdGEgPSB7fQotICAgICAgICBmb3IgbGluZSBpbiBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMKToKKyAgICAgICAgIyBIaXQgdGhlIGV4Y2VwdGlvbiBlYXJseQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0ZGF0YSA9IG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwsIGNoZWNrX3ZlcnNpb24pCisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQorICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKICAgICAgICAgICAgIGlmICcjJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCcjJylbMF0KICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKQEAgLTY0LDE0ICs2OCwxNCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICMgUGVyZm9ybSB0ZXN0cwotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGMyID09ICBORkMoYzEpID09ICBORkMoYzIpID09ICBORkMoYzMpLCBsaW5lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGM0ID09ICBORkMoYzQpID09ICBORkMoYzUpLCBsaW5lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGMzID09ICBORkQoYzEpID09ICBORkQoYzIpID09ICBORkQoYzMpLCBsaW5lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGM1ID09ICBORkQoYzQpID09ICBORkQoYzUpLCBsaW5lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGM0ID09IE5GS0MoYzEpID09IE5GS0MoYzIpID09IFwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiA9PSAgTkZDKGMxKSA9PSAgTkZDKGMyKSA9PSAgTkZDKGMzKSwgbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjNCA9PSAgTkZDKGM0KSA9PSAgTkZDKGM1KSwgbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMyA9PSAgTkZEKGMxKSA9PSAgTkZEKGMyKSA9PSAgTkZEKGMzKSwgbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjNSA9PSAgTkZEKGM0KSA9PSAgTkZEKGM1KSwgbGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjNCA9PSBORktDKGMxKSA9PSBORktDKGMyKSA9PSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkZLQyhjMykgPT0gTkZLQyhjNCkgPT0gTkZLQyhjNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhjNSA9PSBORktEKGMxKSA9PSBORktEKGMyKSA9PSBcCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYzUgPT0gTkZLRChjMSkgPT0gTkZLRChjMikgPT0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5GS0QoYzMpID09IE5GS0QoYzQpID09IE5GS0QoYzUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpCiAKQEAgLTg0LDcgKzg4LDcgQEAKICAgICAgICAgICAgIFggPSB1bmljaHIoYykKICAgICAgICAgICAgIGlmIFggaW4gcGFydDFfZGF0YToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKFggPT0gTkZDKFgpID09IE5GRChYKSA9PSBORktDKFgpID09IE5GS0QoWCksIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoWCA9PSBORkMoWCkgPT0gTkZEKFgpID09IE5GS0MoWCkgPT0gTkZLRChYKSwgYykKIAogICAgIGRlZiB0ZXN0X2J1Z184MzQ2NzYoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgZm9yIGJ1ZyA4MzQ2NzYKQEAgLTkyLDExICs5Niw2IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgICMgSGl0IHRoZSBleGNlcHRpb24gZWFybHkKLSAgICB0cnk6Ci0gICAgICAgIG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwpCi0gICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJjb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQogICAgIHJ1bl91bml0dGVzdChOb3JtYWxpemF0aW9uVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKaW5kZXggYTQyMTkwNy4uZTE4NTJjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgbnRwYXRoCiBpbXBvcnQgb3MKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQKLWltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0xMjMsMjEgKzEyMywxNSBAQAogICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQzovLy8vYS9iJykiLCByJ0M6XGFcYicpCiAgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcvL21hY2hpbmUvc2hhcmUvL2EvYicpIiwgcidcXG1hY2hpbmVcc2hhcmVcYVxiJykKIAotICAgICAgICAjIElzc3VlIDU4Mjc6IE1ha2Ugc3VyZSBub3JtcGF0aCBwcmVzZXJ2ZXMgdW5pY29kZQotICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1Jy4nLCB1Jy8nLCB1J1xcJywgdScvLy9mb28vLi8vYmFyLy8nKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG50cGF0aC5ub3JtcGF0aChwYXRoKSwgdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vcm1wYXRoKCkgcmV0dXJuZWQgc3RyIGluc3RlYWQgb2YgdW5pY29kZScpCi0KICAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ1xcXFwuXFxOVUwnKSIsIHInXFwuXE5VTCcpCiAgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdcXFxcP1xcRDovWFlcXFonKSIsIHInXFw/XEQ6L1hZXFonKQogCiAgICAgZGVmIHRlc3RfZXhwYW5kdmFycyhzZWxmKToKLSAgICAgICAgb2xkZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJmb28iXSA9ICJiYXIiCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJ7Zm9vIl0gPSAiYmF6MSIKLSAgICAgICAgICAgIG9zLmVudmlyb25bIntmb299Il0gPSAiYmF6MiIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbImZvbyJdID0gImJhciIKKyAgICAgICAgICAgIGVudlsie2ZvbyJdID0gImJhejEiCisgICAgICAgICAgICBlbnZbIntmb299Il0gPSAiYmF6MiIKICAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoImZvbyIpJywgImZvbyIpCiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIkZm9vIGJhciIpJywgImJhciBiYXIiKQogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJHtmb299YmFyIiknLCAiYmFyYmFyIikKQEAgLTE1Nyw5ICsxNTEsNiBAQAogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJT9iYXIlIiknLCAiJT9iYXIlIikKICAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lJWJhciIpJywgImJhciViYXIiKQogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiXCclZm9vJVwnJWJhciIpJywgIlwnJWZvbyVcJyViYXIiKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCi0gICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRlbnYpCiAKICAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgogICAgICAgICAjIG50cGF0aC5hYnNwYXRoKCkgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHN5c3RlbSB3aXRoIHRoZSAibnQiIG1vZHVsZQpAQCAtMTc2LDIzICsxNjcsNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguYWJzcGF0aCgiQzpcXCIpJywgIkM6XFwiKQogCi0gICAgICAgICAgICAjIElzc3VlIDM0MjY6IGNoZWNrIHRoYXQgYWJzcGF0aCByZXR1bnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMKLSAgICAgICAgICAgICMgdW5pY29kZSBhbmQgc3RyIHdoZW4gaXQncyBzdHIsIHdpdGggYm90aCBBU0NJSSBhbmQgbm9uLUFTQ0lJIGN3ZHMKLSAgICAgICAgICAgIHNhdmVkX2N3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBmb3IgY3dkIGluICh1J2N3ZCcsIHUnXHhlN3dceGYwJyk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBvcy5ta2Rpcihjd2QpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKLSAgICAgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gKCcnLCAnZm9vJywgJ2ZceGYyXHhmMicsICcvZm9vJywgJ0M6XFwnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG50cGF0aC5hYnNwYXRoKHBhdGgpLCBzdHIpKQotICAgICAgICAgICAgICAgICAgICBmb3IgdXBhdGggaW4gKHUnJywgdSdmdXUnLCB1J2ZceGY5XHhmOScsIHUnL2Z1dScsIHUnVTpcXCcpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobnRwYXRoLmFic3BhdGgodXBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSkpCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoc2F2ZWRfY3dkKQotICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihjd2QpCi0KLQogICAgIGRlZiB0ZXN0X3JlbHBhdGgoc2VsZik6CiAgICAgICAgIGN1cnJlbnRkaXIgPSBvcy5wYXRoLnNwbGl0KG9zLmdldGN3ZCgpKVstMV0KICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYSIpJywgJ2EnKQpAQCAtMjA0LDEwICsxNzgsMjUgQEAKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYSIsICJiL2MiKScsICcuLlxcLi5cXGEnKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvL2Nvbmt5L21vdW50cG9pbnQvYSIsICIvL2Nvbmt5L21vdW50cG9pbnQvYi9jIiknLCAnLi5cXC4uXFxhJykKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYSIsICJhIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveC95L3oiKScsICcuLlxcLi5cXC4uXFxmb29cXGJhclxcYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi9mb28vYmFyIiknLCAnYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi8iKScsICdmb29cXGJhclxcYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLyIsICIvZm9vL2Jhci9iYXQiKScsICcuLlxcLi5cXC4uJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2Zvby9iYXIvYmF0IiwgIi94IiknLCAnLi5cXGZvb1xcYmFyXFxiYXQnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIveCIsICIvZm9vL2Jhci9iYXQiKScsICcuLlxcLi5cXC4uXFx4JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLyIsICIvIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9hIiwgIi9hIiknLCAnLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9hL2IiLCAiL2EvYiIpJywgJy4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJjOi9mb28iLCAiQzovRk9PIiknLCAnLicpCisKKworY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCk6CisgICAgcGF0aG1vZHVsZSA9IG50cGF0aAorICAgIGF0dHJpYnV0ZXMgPSBbJ3JlbHBhdGgnLCAnc3BsaXR1bmMnXQogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3ROdHBhdGgpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TnRwYXRoLCBOdENvbW1vblRlc3QpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X29sZF9tYWlsYm94LnB5CmluZGV4IGFkZDk0MDYuLmU4ZGZmNTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vbGRfbWFpbGJveC5weQpAQCAtNDgsMTggKzQ4LDE2IEBACiAgICAgICAgIGZpbGVuYW1lID0gb3MuZXh0c2VwLmpvaW4oKHN0cih0KSwgc3RyKHBpZCksICJteWhvc3RuYW1lIiwgIm15ZG9tYWluIikpCiAgICAgICAgIHRtcG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIiwgZmlsZW5hbWUpCiAgICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCBkaXIsIGZpbGVuYW1lKQotICAgICAgICBmcCA9IG9wZW4odG1wbmFtZSwgInciKQotICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQodG1wbmFtZSkKLSAgICAgICAgaWYgbWJveDoKLSAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQotICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKHRtcG5hbWUpCisgICAgICAgICAgICBpZiBtYm94OgorICAgICAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQorICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKICAgICAgICAgICAgIG9zLmxpbmsodG1wbmFtZSwgbmV3bmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihuZXduYW1lLCAidyIpCi0gICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5ld25hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKG5ld25hbWUpCiAgICAgICAgIHJldHVybiB0bXBuYW1lCiAKQEAgLTY3LDQ2ICs2NSw0NyBAQAogICAgICAgICAiIiJUZXN0IGFuIGVtcHR5IG1haWxkaXIgbWFpbGJveCIiIgogICAgICAgICAjIFRlc3QgZm9yIHJlZ3Jlc3Npb24gb24gYnVnICMxMTc0OTA6CiAgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHNlbGYubWJveCkgPT0gMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3gpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2N1cihzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3gpID09IDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX25ldyhzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3gpID09IDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgbm90IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCiAKICAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2JvdGgoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKICAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQogICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihzZWxmLm1ib3gpID09IDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3gpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIG5vdCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBub3QgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3VuaXhfbWJveChzZWxmKToKICAgICAgICAgIyMjIHNob3VsZCBiZSBiZXR0ZXIhCiAgICAgICAgIGltcG9ydCBlbWFpbC5wYXJzZXIKICAgICAgICAgZm5hbWUgPSBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIsIFRydWUpCiAgICAgICAgIG4gPSAwCi0gICAgICAgIGZvciBtc2cgaW4gbWFpbGJveC5Qb3J0YWJsZVVuaXhNYWlsYm94KG9wZW4oZm5hbWUpLAorICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbXNnIGluIG1haWxib3guUG9ydGFibGVVbml4TWFpbGJveChmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UpOgotICAgICAgICAgICAgbiArPSAxCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1sic3ViamVjdCJdLCAiU2ltcGxlIFRlc3QiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RyKG1zZykpLCBsZW4oRlJPTV8pK2xlbihEVU1NWV9NRVNTQUdFKSkKKyAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1sic3ViamVjdCJdLCAiU2ltcGxlIFRlc3QiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0cihtc2cpKSwgbGVuKEZST01fKStsZW4oRFVNTVlfTUVTU0FHRSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogY2xhc3MgTWJveFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTExOSw4ICsxMTgsOCBAQAogCiAgICAgZGVmIHRlc3RfZnJvbV9yZWdleCAoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBuZXcgcmVnZXggZnJvbSBidWcgIzE2MzM2NzgKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3cnKQotICAgICAgICBmLndyaXRlKCIiIkZyb20gZnJlZEBleGFtcGxlLmNvbSBNb24gTWF5IDMxIDEzOjI0OjUwIDIwMDQgKzAyMDAKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiIiRnJvbSBmcmVkQGV4YW1wbGUuY29tIE1vbiBNYXkgMzEgMTM6MjQ6NTAgMjAwNCArMDIwMAogU3ViamVjdDogbWVzc2FnZSAxCiAKIGJvZHkxCkBAIC0xMzcsOSArMTM2LDkgQEAKIAogYm9keTQKICIiIikKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGJveCA9IG1haWxib3guVW5peE1haWxib3gob3BlbihzZWxmLl9wYXRoLCAncicpKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGxpc3QoaXRlcihib3gpKSkgPT0gNCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGJveCA9IG1haWxib3guVW5peE1haWxib3goZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obGlzdChpdGVyKGJveCkpKSA9PSA0KQogCiAKICAgICAjIFhYWCBXZSBzdGlsbCBuZWVkIG1vcmUgdGVzdHMhCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkgYi9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKaW5kZXggMzZiZDNmZi4uNmQxMTdkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpAQCAtMSw2ICsxLDYgQEAKICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMiwgb3Bjb2RlcwogCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIF9jaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBPcGNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICB0cnk6ICByYWlzZSBEQ2xhc3MsIGEKICAgICAgICAgZXhjZXB0IERDbGFzcywgdjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHYsIERDbGFzcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodiwgRENsYXNzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQogCkBAIC03MiwzOSArNzIsNDUgQEAKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKICAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogTm9uZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IGEnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE6IGEnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhmLCBnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCiAKICAgICAgICAgZiA9IGV2YWwoJ2xhbWJkYSBhPTE6IGEnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9MTogYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiAwJykKICAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKICAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQogCiAgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCiAgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYjogTm9uZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IE5vbmUnKQogICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9Tm9uZTogTm9uZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWxzKGYsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKIAogICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE9MDogTm9uZScpCiAgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT0xOiBOb25lJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZiwgZykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgZGVmIHRlc3RfbW9kdWxvX29mX3N0cmluZ19zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVN0cmluZyhzdHIpOgorICAgICAgICAgICAgZGVmIF9fbW9kX18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE15U3RyaW5nKCkgJSAzLCA0MikKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygoImV4Y2VwdGlvbnMgbXVzdCBkZXJpdmUgZnJvbSBCYXNlRXhjZXB0aW9uIiwKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJleGNlcHRpb25zIG11c3QgZGVyaXZlIGZyb20gQmFzZUV4Y2VwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNhdGNoaW5nIGNsYXNzZXMgdGhhdCBkb24ndCBpbmhlcml0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIEJhc2VFeGNlcHRpb24gaXMgbm90IGFsbG93ZWQiLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CmluZGV4IDY0NzFmNTguLjIwYzRmZTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTEsMTAgKzEsMTAgQEAKICMgVGVzdCB0byBzZWUgaWYgb3BlbnB0eSB3b3Jrcy4gKEJ1dCBkb24ndCB3b3JyeSBpZiBpdCBpc24ndCBhdmFpbGFibGUuKQogCiBpbXBvcnQgb3MsIHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogaWYgbm90IGhhc2F0dHIob3MsICJvcGVucHR5Iik6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIk5vIG9wZW5wdHkoKSBhdmFpbGFibGUuIgogCiAKIGNsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IDRlOWIzYzQuLjgxYTgwMjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMzQsMTY2ICszNCwxNjYgQEAKIAogY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbHQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sdCwgMWosIDJqKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5sdCgxLCAwKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubHQoMSwgMC4wKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubHQoMSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmx0KDEsIDEuMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sdCgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmx0KDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmx0KDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9sZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmxlKDEsIDApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5sZSgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubGUoMSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sZSgxLCAxLjApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubGUoMSwgMikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sZSgxLCAyLjApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxlKDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxlKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgogICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZXEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuZXEsIEMoKSwgQygpKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5lcSgxLCAwKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZXEoMSwgMC4wKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmVxKDEsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZXEoMSwgMS4wKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZXEoMSwgMikpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmVxKDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5lcSwgQygpLCBDKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmVxKDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZXEoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbmUoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLm5lLCBDKCksIEMoKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lKDEsIDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmUoMSwgMC4wKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IubmUoMSwgMSkpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLm5lKDEsIDEuMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5uZSgxLCAyKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lKDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci5uZSwgQygpLCBDKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubmUoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubmUoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2dlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2UsIDFqLCAyaikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmdlKDEsIDApKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2UoMSwgMC4wKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmdlKDEsIDEpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2UoMSwgMS4wKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZ2UoMSwgMikpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmdlKDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2UsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdlKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdlKDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmd0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ3QoMSwgMCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5ndCgxLCAwLjApKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5ndCgxLCAxKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZ3QoMSwgMS4wKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuZ3QoMSwgMikpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmd0KDEsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuYWJzKC0xKSA9PSAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuYWJzKDEpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFicygtMSkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFicygxKSA9PSAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hZGQoMywgNCkgPT0gNykKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfYW5kKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFuZF8oMHhmLCAweGEpID09IDB4YSkKIAogICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5jb25jYXQoJ3B5JywgJ3Rob24nKSA9PSAncHl0aG9uJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmNvbmNhdChbMSwgMl0sIFszLCA0XSkgPT0gWzEsIDIsIDMsIDRdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuY29uY2F0KFNlcTEoWzUsIDZdKSwgU2VxMShbN10pKSA9PSBbNSwgNiwgN10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5jb25jYXQoU2VxMihbNSwgNl0pLCBTZXEyKFs3XSkpID09IFs1LCA2LCA3XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCAxMywgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KFsxLCAyXSwgWzMsIDRdKSA9PSBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb25jYXQoU2VxMShbNSwgNl0pLCBTZXExKFs3XSkpID09IFs1LCA2LCA3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdChTZXEyKFs1LCA2XSksIFNlcTIoWzddKSkgPT0gWzUsIDYsIDddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQogCiAgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZiwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCAzKSA9PSAxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDUpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDMpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgNSkgPT0gMCkKIAogICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CiAgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmRlbGl0ZW0oYSwgMSkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gWzQsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmRlbGl0ZW0oYSwgMSkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQogCiAgICAgZGVmIHRlc3RfZGVsc2xpY2Uoc2VsZik6CiAgICAgICAgIGEgPSByYW5nZSgxMCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbHNsaWNlLCBhLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZGVsc2xpY2UoYSwgMiwgOCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gWzAsIDEsIDgsIDldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbHNsaWNlLCBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbHNsaWNlLCBhLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZGVsc2xpY2UoYSwgMiwgOCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzAsIDEsIDgsIDldKQogICAgICAgICBvcGVyYXRvci5kZWxzbGljZShhLCAwLCB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbXSkKIAogICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGl2LCA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kaXYsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5mbG9vcmRpdig1LCAyKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRpdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kaXYsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5mbG9vcmRpdig1LCAyKSA9PSAyKQogCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZmxvb3JkaXYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZmxvb3JkaXYsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5mbG9vcmRpdig1LCAyKSA9PSAyKQogCiAgICAgZGVmIHRlc3RfdHJ1ZWRpdihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnRydWVkaXYoNSwgMikgPT0gMi41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnRydWVkaXYoNSwgMikgPT0gMi41KQogCiAgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKICAgICAgICAgYSA9IHJhbmdlKDEwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBhLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuZ2V0aXRlbShhLCAyKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X2dldHNsaWNlKHNlbGYpOgogICAgICAgICBhID0gcmFuZ2UoMTApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldHNsaWNlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRzbGljZSwgYSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmdldHNsaWNlKGEsIDQsIDYpID09IFs0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRzbGljZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRzbGljZSwgYSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldHNsaWNlKGEsIDQsIDYpID09IFs0LCA1XSkKICAgICAgICAgYiA9IG9wZXJhdG9yLmdldHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIgPT0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgPT0gYSkKIAogICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgWzQsIDMsIDIsIDFdLCAwKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmludig0KSA9PSAtNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW52KDQpID09IC01KQogCiAgICAgZGVmIHRlc3RfaXNDYWxsYWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNDYWxsYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc0NhbGxhYmxlKQogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBkZWYgY2hlY2soc2VsZiwgbywgdik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlzQ2FsbGFibGUobyksIHYpCi0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXNDYWxsYWJsZShvKSwgdikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxhYmxlKG8pLCB2KQogICAgICAgICBjaGVjayhzZWxmLCA0LCAwKQogICAgICAgICBjaGVjayhzZWxmLCBvcGVyYXRvci5pc0NhbGxhYmxlLCAxKQpAQCAtMjAxLDEwNiArMjAxLDEwNiBAQAogICAgICAgICBjaGVjayhzZWxmLCBDKCksIDApCiAKICAgICBkZWYgdGVzdF9pc01hcHBpbmdUeXBlKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc01hcHBpbmdUeXBlKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5pc01hcHBpbmdUeXBlKDEpKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci5pc01hcHBpbmdUeXBlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvcGVyYXRvci5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc01hcHBpbmdUeXBlKHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc01hcHBpbmdUeXBlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUob3BlcmF0b3IuX19kaWN0X18pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSh7fSkpCiAKICAgICBkZWYgdGVzdF9pc051bWJlclR5cGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzTnVtYmVyVHlwZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4KSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4aikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc051bWJlclR5cGUoOEwpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDguMykpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzTnVtYmVyVHlwZShkaXIoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNOdW1iZXJUeXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDhqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4TCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOC4zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc051bWJlclR5cGUoZGlyKCkpKQogCiAgICAgZGVmIHRlc3RfaXNTZXF1ZW5jZVR5cGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoZGlyKCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoKCkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoeHJhbmdlKDEwKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgneWVhaGJ1ZGR5JykpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKDMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoZGlyKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoeHJhbmdlKDEwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSgneWVhaGJ1ZGR5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoMykpCiAgICAgICAgIGNsYXNzIERpY3QoZGljdCk6IHBhc3MKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoRGljdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShEaWN0KCkpKQogCiAgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgTm9uZSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sc2hpZnQoNSwgMSkgPT0gMTApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5sc2hpZnQoNSwgMCkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCBOb25lLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxzaGlmdCg1LCAxKSA9PSAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxzaGlmdCg1LCAwKSA9PSA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kLCBOb25lLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm1vZCg1LCAyKSA9PSAxKQogCiAgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm11bCg1LCAyKSA9PSAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lZyg1KSA9PSAtNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lZygtNSkgPT0gNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLm5lZygwKSA9PSAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IubmVnKC0wKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoNSkgPT0gLTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoLTUpID09IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoMCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lZygtMCkgPT0gMCkKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2Vfb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3Iub3JfKDB4YSwgMHg1KSA9PSAweGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQogCiAgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnBvcyg1KSA9PSA1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucG9zKC01KSA9PSAtNSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnBvcygwKSA9PSAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucG9zKC0wKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoNSkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcygtNSkgPT0gLTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoMCkgPT0gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvcygtMCkgPT0gMCkKIAogICAgIGRlZiB0ZXN0X3BvdyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5wb3coMyw1KSA9PSAzKio1KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IuX19wb3dfXygzLDUpID09IDMqKjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvdygzLDUpID09IDMqKjUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5fX3Bvd19fKDMsNSkgPT0gMyoqNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQogCiAgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgogICAgICAgICBhID0gcmFuZ2UoMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQsIGEsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJlcGVhdCwgYSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBhK2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKICAgICAgICAgYSA9ICgxLCAyLCAzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDApID09ICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09ICgpKQogICAgICAgICBhID0gJzEyMycKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBhK2EpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBhK2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSAnJykKICAgICAgICAgYSA9IFNlcTEoWzQsIDUsIDZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IFs0LCA1LCA2LCA0LCA1LCA2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBbNCwgNSwgNl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gWzQsIDUsIDYsIDQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IFs0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKICAgICAgICAgYSA9IFNlcTIoWzQsIDUsIDZdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IFs0LCA1LCA2LCA0LCA1LCA2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBbNCwgNSwgNl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJlcGVhdCwgNiwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAyKSA9PSBbNCwgNSwgNiwgNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMSkgPT0gWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJlcGVhdCwgNiwgNykKIAogICAgIGRlZiB0ZXN0X3JzaGlmdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5yc2hpZnQoNSwgMCkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0LCBOb25lLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJzaGlmdCg1LCAxKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDApID09IDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKQEAgLTMwOCw2MCArMzA4LDYxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29udGFpbnMsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcyhyYW5nZSg0KSwgMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcyhyYW5nZSg0KSwgNSkpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDQpLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcyhyYW5nZSg0KSwgNSkpCiAKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgogICAgICAgICBhID0gcmFuZ2UoMykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLnNldGl0ZW0oYSwgMCwgMikgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPT0gWzIsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnNldGl0ZW0oYSwgMCwgMikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzIsIDEsIDJdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCA0LCAyKQogCiAgICAgZGVmIHRlc3Rfc2V0c2xpY2Uoc2VsZik6CiAgICAgICAgIGEgPSByYW5nZSg0KQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwgYSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0c2xpY2UsIGEsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5zZXRzbGljZShhLCAxLCAzLCBbMiwgMV0pIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhID09IFswLCAyLCAxLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwgYSwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnNldHNsaWNlKGEsIDEsIDMsIFsyLCAxXSkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzAsIDIsIDEsIDNdKQogICAgICAgICBvcGVyYXRvci5zZXRzbGljZShhLCAwLCB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QsIFtdKQotICAgICAgICBzZWxmLmFzc2VydF8oYSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gW10pCiAKICAgICBkZWYgdGVzdF9zdWIoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnN1Yig1LCAyKSA9PSAzKQogCiAgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnV0aCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFN5bnRheEVycm9yLCBvcGVyYXRvci50cnV0aCwgQygpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3BlcmF0b3IudHJ1dGgoNSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci50cnV0aChbMF0pKQotICAgICAgICBzZWxmLmZhaWxJZihvcGVyYXRvci50cnV0aCgwKSkKLSAgICAgICAgc2VsZi5mYWlsSWYob3BlcmF0b3IudHJ1dGgoW10pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydXRoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IudHJ1dGgsIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnRydXRoKDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1dGgoWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCiAKICAgICBkZWYgdGVzdF9pcyhzZWxmKToKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcGVyYXRvci5pc18oYSwgYikpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzXyhhLGMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzXyhhLCBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKIAogICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc19ub3QpCi0gICAgICAgIHNlbGYuZmFpbElmKG9wZXJhdG9yLmlzX25vdChhLCBiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9wZXJhdG9yLmlzX25vdChhLGMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc19ub3QoYSwgYikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CiAgICAgICAgIGNsYXNzIEE6CkBAIC0zODcsNyArMzg4LDcgQEAKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlcignZm9vJyksIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2ZvbycpLCBDKCkpCiAKICAgICAgICAgIyByZWN1cnNpdmUgZ2V0cwogICAgICAgICBhID0gQSgpCkBAIC00MTksNyArNDIwLDcgQEAKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuaXRlbWdldHRlcig0MiksIEMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoNDIpLCBDKCkpCiAKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoJ25hbWUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEpCkBAIC00NTQsMTIgKzQ1NSwxMiBAQAogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nLCAxLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmKGEpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDMpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYoYSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDQyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZihhKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKaW5kZXggNGFiNGQ4OS4uZjg2ZWEwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CkBAIC0xLDUgKzEsMyBAQAotIyEvdXNyL2Jpbi9weXRob24KLQogIwogIyBUZXN0IHN1aXRlIGZvciBPcHRpay4gIFN1cHBsaWVkIGJ5IEpvaGFubmVzIEdpanNiZXJzCiAjICh0YXJhZGlub0Bzb2Z0aG9tZS5uZXQpIC0tIHRyYW5zbGF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgT3B0aWsKQEAgLTE5LDkgKzE3LDkgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24sIE9wdGlvbiwgSW5kZW50ZWRIZWxwRm9ybWF0dGVyLCBcCi0gICAgIFRpdGxlZEhlbHBGb3JtYXR0ZXIsIE9wdGlvblBhcnNlciwgT3B0aW9uQ29udGFpbmVyLCBPcHRpb25Hcm91cCwgXAotICAgICBTVVBQUkVTU19IRUxQLCBTVVBQUkVTU19VU0FHRSwgT3B0aW9uRXJyb3IsIE9wdGlvbkNvbmZsaWN0RXJyb3IsIFwKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uLCBPcHRpb24sIFwKKyAgICAgVGl0bGVkSGVscEZvcm1hdHRlciwgT3B0aW9uUGFyc2VyLCBPcHRpb25Hcm91cCwgXAorICAgICBTVVBQUkVTU19VU0FHRSwgT3B0aW9uRXJyb3IsIE9wdGlvbkNvbmZsaWN0RXJyb3IsIFwKICAgICAgQmFkT3B0aW9uRXJyb3IsIE9wdGlvblZhbHVlRXJyb3IsIFZhbHVlcwogZnJvbSBvcHRwYXJzZSBpbXBvcnQgX21hdGNoX2FiYnJldgogZnJvbSBvcHRwYXJzZSBpbXBvcnQgX3BhcnNlX251bQpAQCAtMTEwLDcgKzEwOCw3IEBACiAgICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb24sIGVycjoKICAgICAgICAgICAgIGFjdHVhbF9tZXNzYWdlID0gc3RyKGVycikKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfbWVzc2FnZSwgcmV0eXBlKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oZXhwZWN0ZWRfbWVzc2FnZS5zZWFyY2goYWN0dWFsX21lc3NhZ2UpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZF9tZXNzYWdlLnNlYXJjaChhY3R1YWxfbWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIlwKIGV4cGVjdGVkIGV4Y2VwdGlvbiBtZXNzYWdlIHBhdHRlcm46CiAvJXMvCkBAIC0xNjksNyArMTY3LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKIAogICAgICAgICBleGNlcHQgSW50ZXJjZXB0ZWRFcnJvciwgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgIHR5cGUob3V0cHV0KSBpcyB0eXBlcy5TdHJpbmdUeXBlLAogICAgICAgICAgICAgICAgICJleHBlY3RlZCBvdXRwdXQgdG8gYmUgYW4gb3JkaW5hcnkgc3RyaW5nLCBub3QgJXIiCiAgICAgICAgICAgICAgICAgJSB0eXBlKG91dHB1dCkpCkBAIC0zNDIsNyArMzQwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldF9vcHRpb24oc2VsZik6CiAgICAgICAgIG9wdDEgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG9wdDEsIE9wdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHQxLCBPcHRpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5fc2hvcnRfb3B0cywgWyItdiIsICItbiJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuX2xvbmdfb3B0cywgWyItLXZlcmJvc2UiLCAiLS1ub2lzeSJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuYWN0aW9uLCAic3RvcmVfdHJ1ZSIpCkBAIC0zNTMsMzMgKzM1MSwzMyBAQAogICAgICAgICBvcHQyID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikKICAgICAgICAgb3B0MyA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1uIikKICAgICAgICAgb3B0NCA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tbm9pc3kiKQotICAgICAgICBzZWxmLmFzc2VydF8ob3B0MSBpcyBvcHQyIGlzIG9wdDMgaXMgb3B0NCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdDEgaXMgb3B0MiBpcyBvcHQzIGlzIG9wdDQpCiAKICAgICBkZWYgdGVzdF9oYXNfb3B0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLXYiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tdmVyYm9zZSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLXYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tdmVyYm9zZSIpKQogCi0gICAgZGVmIGFzc2VydF9yZW1vdmVkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXYiKSBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1uIikgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tbm9pc3kiKSBpcyBOb25lKQorICAgIGRlZiBhc3NlcnRUcnVlcmVtb3ZlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi12IikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tdmVyYm9zZSIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItbiIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLW5vaXN5IikgaXMgTm9uZSkKIAotICAgICAgICBzZWxmLmZhaWxJZihzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItdiIpKQotICAgICAgICBzZWxmLmZhaWxJZihzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLXZlcmJvc2UiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLW4iKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS1ub2lzeSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi12IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS12ZXJib3NlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLW4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLW5vaXN5IikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi1xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItLXNpbGVudCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLXEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tc2lsZW50IikpCiAKICAgICBkZWYgdGVzdF9yZW1vdmVfc2hvcnRfb3B0KHNlbGYpOgogICAgICAgICBzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uKCItbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0X3JlbW92ZWQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWVyZW1vdmVkKCkKIAogICAgIGRlZiB0ZXN0X3JlbW92ZV9sb25nX29wdChzZWxmKToKICAgICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlX29wdGlvbigiLS12ZXJib3NlIikKLSAgICAgICAgc2VsZi5hc3NlcnRfcmVtb3ZlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZXJlbW92ZWQoKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlX25vbmV4aXN0ZW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uLCAoJ2ZvbycsKSwgTm9uZSwKQEAgLTQyOSwxOSArNDI3LDE5IEBACiAKICAgICBkZWYgdGVzdF9zdHJfYWxpYXNlc19zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgdHlwZT0ic3RyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQogCiAgICAgZGVmIHRlc3RfbmV3X3R5cGVfb2JqZWN0KHNlbGYpOgogICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcyIsIHR5cGU9c3RyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCiAgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi14IiwgdHlwZT1pbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi14IikudHlwZSwgImludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKIAogICAgIGRlZiB0ZXN0X29sZF90eXBlX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXMiLCB0eXBlPXR5cGVzLlN0cmluZ1R5cGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKICAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXgiLCB0eXBlPXR5cGVzLkludFR5cGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi14IikudHlwZSwgImludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXgiKS50eXBlLCAiaW50IikKIAogCiAjIEN1c3RvbSB0eXBlIGZvciB0ZXN0aW5nIHByb2Nlc3Npbmcgb2YgZGVmYXVsdCB2YWx1ZXMuCkBAIC0xMDA1LDcgKzEwMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249IlNvbWUgbW9yZSBvcHRpb25zIikKICAgICAgICAgZ3JvdXAuc2V0X3RpdGxlKCJCYWNvbiIpCiAgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oIi0tYmFjb24iLCB0eXBlPSJpbnQiKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5wYXJzZXIuZ2V0X29wdGlvbl9ncm91cCgiLS1iYWNvbiIpLCBncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb25fZ3JvdXAoIi0tYmFjb24iKSwgZ3JvdXApCiAKICMgLS0gVGVzdCBleHRlbmRpbmcgYW5kIHBhcnNlci5wYXJzZV9hcmdzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTAxLDE1ICsxMDk5LDE1IEBACiAgICAgICAgIGlmIG9wdCA9PSAiLXgiOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX3Nob3J0X29wdHMsIFsiLXgiXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLl9sb25nX29wdHMsIFtdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBhcnNlcl8gaXMgc2VsZi5wYXJzZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odmFsdWUgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXJfIGlzIHNlbGYucGFyc2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMocGFyc2VyXy52YWx1ZXMpLCB7J2ZpbGVuYW1lJzogTm9uZX0pCiAKICAgICAgICAgICAgIHBhcnNlcl8udmFsdWVzLnggPSA0MgogICAgICAgICBlbGlmIG9wdCA9PSAiLS1maWxlIjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLl9zaG9ydF9vcHRzLCBbIi1mIl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbi5fbG9uZ19vcHRzLCBbIi0tZmlsZSJdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBhcnNlcl8gaXMgc2VsZi5wYXJzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyc2VyXyBpcyBzZWxmLnBhcnNlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICJmb28iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHBhcnNlcl8udmFsdWVzKSwgeydmaWxlbmFtZSc6IE5vbmUsICd4JzogNDJ9KQogCkBAIC0xMTQ3LDcgKzExNDUsNyBAQAogCiAgICAgZGVmIHByb2Nlc3NfdHVwbGUoc2VsZiwgb3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXJfLCBsZW4sIHR5cGUpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbiwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUgaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSBpcyBpbnQpCiAKICAgICAgICAgaWYgb3B0ID09ICItcCI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAiMSwyLDMiKQpAQCAtMTIzOCw4ICsxMjM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uX2xpc3Q9b3B0aW9ucykKIAogICAgIGRlZiB2YXJpYWJsZV9hcmdzKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlIGlzIE5vbmUpCi0gICAgICAgIGRvbmUgPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSBpcyBOb25lKQogICAgICAgICB2YWx1ZSA9IFtdCiAgICAgICAgIHJhcmdzID0gcGFyc2VyLnJhcmdzCiAgICAgICAgIHdoaWxlIHJhcmdzOgpAQCAtMTI5NCw3ICsxMjkxLDcgQEAKIAogY2xhc3MgVGVzdENvbmZsaWN0KENvbmZsaWN0QmFzZSk6CiAgICAgIiIiVXNlIHRoZSBkZWZhdWx0IGNvbmZsaWN0IHJlc29sdXRpb24gZm9yIE9wdGlrIDEuMjogZXJyb3IuIiIiCi0gICAgZGVmIGFzc2VydF9jb25mbGljdF9lcnJvcihzZWxmLCBmdW5jKToKKyAgICBkZWYgYXNzZXJ0VHJ1ZWNvbmZsaWN0X2Vycm9yKHNlbGYsIGZ1bmMpOgogICAgICAgICBlcnIgPSBzZWxmLmFzc2VydFJhaXNlcygKICAgICAgICAgICAgIGZ1bmMsICgiLXYiLCAiLS12ZXJzaW9uIiksIHsnYWN0aW9uJyA6ICJjYWxsYmFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJyA6IHNlbGYuc2hvd192ZXJzaW9uLApAQCAtMTMwNiwxMSArMTMwMywxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5vcHRpb25faWQsICItdi8tLXZlcnNpb24iKQogCiAgICAgZGVmIHRlc3RfY29uZmxpY3RfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NvbmZsaWN0X2Vycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZWNvbmZsaWN0X2Vycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb24pCiAKICAgICBkZWYgdGVzdF9jb25mbGljdF9lcnJvcl9ncm91cChzZWxmKToKICAgICAgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChzZWxmLnBhcnNlciwgIkdyb3VwIDEiKQotICAgICAgICBzZWxmLmFzc2VydF9jb25mbGljdF9lcnJvcihncm91cC5hZGRfb3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWVjb25mbGljdF9lcnJvcihncm91cC5hZGRfb3B0aW9uKQogCiAgICAgZGVmIHRlc3Rfbm9fc3VjaF9jb25mbGljdF9oYW5kbGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKQEAgLTEzMzAsOCArMTMyNyw4IEBACiAgICAgICAgIHZlcmJvc2Vfb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikKICAgICAgICAgdmVyc2lvbl9vcHQgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcnNpb24iKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2X29wdCBpcyB2ZXJzaW9uX29wdCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHZfb3B0IGlzIG5vdCB2ZXJib3NlX29wdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZfb3B0IGlzIHZlcnNpb25fb3B0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodl9vcHQgaXMgbm90IHZlcmJvc2Vfb3B0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZfb3B0Ll9sb25nX29wdHMsIFsiLS12ZXJzaW9uIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyc2lvbl9vcHQuX3Nob3J0X29wdHMsIFsiLXYiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uX29wdC5fbG9uZ19vcHRzLCBbIi0tdmVyc2lvbiJdKQpAQCAtMTQ2Miw3ICsxNDU5LDcgQEAKICAgICAgICAgIyBzY3Jld3MgdGhpbmdzIHVwIGZvciBvdGhlciB0ZXN0cyB3aGVuIGl0J3MgcGFydCBvZiB0aGUgUHl0aG9uCiAgICAgICAgICMgdGVzdCBzdWl0ZS4KICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudi5zZXQoJ0NPTFVNTlMnLCBzdHIoY29sdW1ucykpCisgICAgICAgICAgICBlbnZbJ0NPTFVNTlMnXSA9IHN0cihjb2x1bW5zKQogICAgICAgICAgICAgcmV0dXJuIEludGVyY2VwdGluZ09wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25zKQogCiAgICAgZGVmIGFzc2VydEhlbHBFcXVhbHMoc2VsZiwgZXhwZWN0ZWRfb3V0cHV0KToKQEAgLTE0OTEsNyArMTQ4OCw3IEBACiAKICAgICBkZWYgdGVzdF9oZWxwX3RpdGxlX2Zvcm1hdHRlcihzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudi5zZXQoIkNPTFVNTlMiLCAiODAiKQorICAgICAgICAgICAgZW52WyJDT0xVTU5TIl0gPSAiODAiCiAgICAgICAgICAgICBzZWxmLnBhcnNlci5mb3JtYXR0ZXIgPSBUaXRsZWRIZWxwRm9ybWF0dGVyKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGVscEVxdWFscyhfZXhwZWN0ZWRfaGVscF90aXRsZV9mb3JtYXR0ZXIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IGRiN2U5YjQuLjZmNjg2MjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMywxMCArMywxNiBAQAogIyBwb3J0YWJsZSB0aGFuIHRoZXkgaGFkIGJlZW4gdGhvdWdodCB0byBiZS4KIAogaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgbW1hcAoraW1wb3J0IHV1aWQKIAogd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgUnVudGltZVdhcm5pbmcsIF9fbmFtZV9fKQogd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBSdW50aW1lV2FybmluZywgX19uYW1lX18pCkBAIC0yMSw3ICsyNyw3IEBACiAgICAgZGVmIHRlc3RfYWNjZXNzKHNlbGYpOgogICAgICAgICBmID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5PX0NSRUFUfG9zLk9fUkRXUikKICAgICAgICAgb3MuY2xvc2UoZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLmFjY2Vzcyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5XX09LKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmFjY2Vzcyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5XX09LKSkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlcmFuZ2Uoc2VsZik6CiAgICAgICAgIGZpcnN0ID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5PX0NSRUFUfG9zLk9fUkRXUikKQEAgLTM2LDEwICs0Miw3IEBACiAgICAgICAgICAgICAgICAgcmV0cmllcyArPSAxCiAgICAgICAgICAgICAgICAgaWYgcmV0cmllcyA+IDEwOgogICAgICAgICAgICAgICAgICAgICAjIFhYWCB0ZXN0IHNraXBwZWQKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgKAotICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGFsbG9jYXRlIHR3byBjb25zZWN1dGl2ZSBmZHMsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyB0ZXN0X2Nsb3NlcmFuZ2UiKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYWxsb2NhdGUgdHdvIGNvbnNlY3V0aXZlIGZkcyIpCiAgICAgICAgICAgICAgICAgZmlyc3QsIHNlY29uZCA9IHNlY29uZCwgb3MuZHVwKHNlY29uZCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmNsb3NlKHNlY29uZCkKQEAgLTQ3LDYgKzUwLDcgQEAKICAgICAgICAgb3MuY2xvc2VyYW5nZShmaXJzdCwgZmlyc3QgKyAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy53cml0ZSwgZmlyc3QsICJhIikKIAorICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgogICAgICAgICBwYXRoID0gdW5pY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogICAgICAgICBvbGQgPSBzeXMuZ2V0cmVmY291bnQocGF0aCkKQEAgLTY3LDcgKzcxLDcgQEAKIAogICAgIGRlZiBjaGVja190ZW1wZmlsZShzZWxmLCBuYW1lKToKICAgICAgICAgIyBtYWtlIHN1cmUgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0OgotICAgICAgICBzZWxmLmZhaWxJZihvcy5wYXRoLmV4aXN0cyhuYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgImZpbGUgYWxyZWFkeSBleGlzdHMgZm9yIHRlbXBvcmFyeSBmaWxlIikKICAgICAgICAgIyBtYWtlIHN1cmUgd2UgY2FuIGNyZWF0ZSB0aGUgZmlsZQogICAgICAgICBvcGVuKG5hbWUsICJ3IikKQEAgLTc2LDE2ICs4MCwxOCBAQAogICAgIGRlZiB0ZXN0X3RlbXBuYW0oc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAidGVtcG5hbSIpOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByInRlc3Rfb3MkIikKLSAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShvcy50ZW1wbmFtKCkpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJ0ZXN0X29zJCIpCisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRlbXBuYW0iLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG9zLnRlbXBuYW0oKSkKIAotICAgICAgICBuYW1lID0gb3MudGVtcG5hbSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCisgICAgICAgICAgICBuYW1lID0gb3MudGVtcG5hbSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQogCi0gICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4sICJwZngiKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5iYXNlbmFtZShuYW1lKVs6M10gPT0gInBmeCIpCi0gICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKKyAgICAgICAgICAgIG5hbWUgPSBvcy50ZW1wbmFtKHRlc3Rfc3VwcG9ydC5URVNURk4sICJwZngiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguYmFzZW5hbWUobmFtZSlbOjNdID09ICJwZngiKQorICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQogCiAgICAgZGVmIHRlc3RfdG1wZmlsZShzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0bXBmaWxlIik6CkBAIC0xMDQsNjQgKzExMCw2OSBAQAogICAgICAgICAjIHRlc3QgdGhhdCBhIHN1YnNlcXVlbnQgY2FsbCB0byBvcy50bXBmaWxlKCkgcmFpc2VzIHRoZSBzYW1lIGVycm9yLiBJZgogICAgICAgICAjIGl0IGRvZXNuJ3QsIGFzc3VtZSB3ZSdyZSBvbiBYUCBvciBiZWxvdyBhbmQgdGhlIHVzZXIgcnVubmluZyB0aGUgdGVzdAogICAgICAgICAjIGhhcyBhZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzLCBhbmQgcHJvY2VlZCB3aXRoIHRoZSB0ZXN0IGFzIG5vcm1hbC4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICBuYW1lID0gJ1xccHl0aG9uX3Rlc3Rfb3NfdGVzdF90bXBmaWxlLnR4dCcKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG5hbWUpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZwID0gb3BlbihuYW1lLCAndycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZmlyc3Q6Ci0gICAgICAgICAgICAgICAgIyBvcGVuKCkgZmFpbGVkLCBhc3NlcnQgdG1wZmlsZSgpIGZhaWxzIGluIHRoZSBzYW1lIHdheS4KLSAgICAgICAgICAgICAgICAjIEFsdGhvdWdoIG9wZW4oKSByYWlzZXMgYW4gSU9FcnJvciBhbmQgb3MudG1wZmlsZSgpIHJhaXNlcyBhbgotICAgICAgICAgICAgICAgICMgT1NFcnJvcigpLCAnYXJncycgd2lsbCBiZSAoMTMsICdQZXJtaXNzaW9uIGRlbmllZCcpIGluIGJvdGgKLSAgICAgICAgICAgICAgICAjIGNhc2VzLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgc2Vjb25kOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0LmFyZ3MsIHNlY29uZC5hcmdzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgb3MudG1wZmlsZSgpIHRvIHJhaXNlIE9TRXJyb3IiKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIG9wZW4oKSB3b3JrZWQsIHRoZXJlZm9yZSwgdG1wZmlsZSgpIHNob3VsZCB3b3JrLiAgQ2xvc2Ugb3VyCi0gICAgICAgICAgICAgICAgIyBkdW1teSBmaWxlIGFuZCBwcm9jZWVkIHdpdGggdGhlIHRlc3QgYXMgbm9ybWFsLgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUobmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBmaWxlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQogCi0gICAgICAgIGZwID0gb3MudG1wZmlsZSgpCi0gICAgICAgIGZwLndyaXRlKCJmb29iYXIiKQotICAgICAgICBmcC5zZWVrKDAsMCkKLSAgICAgICAgcyA9IGZwLnJlYWQoKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzID09ICJmb29iYXIiKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdcXHB5dGhvbl90ZXN0X29zX3Rlc3RfdG1wZmlsZS50eHQnCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKG5hbWUsICd3JykKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgICMgb3BlbigpIGZhaWxlZCwgYXNzZXJ0IHRtcGZpbGUoKSBmYWlscyBpbiB0aGUgc2FtZSB3YXkuCisgICAgICAgICAgICAgICAgICAgICMgQWx0aG91Z2ggb3BlbigpIHJhaXNlcyBhbiBJT0Vycm9yIGFuZCBvcy50bXBmaWxlKCkgcmFpc2VzIGFuCisgICAgICAgICAgICAgICAgICAgICMgT1NFcnJvcigpLCAnYXJncycgd2lsbCBiZSAoMTMsICdQZXJtaXNzaW9uIGRlbmllZCcpIGluIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgIyBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIHNlY29uZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QuYXJncywgc2Vjb25kLmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIG9zLnRtcGZpbGUoKSB0byByYWlzZSBPU0Vycm9yIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBvcGVuKCkgd29ya2VkLCB0aGVyZWZvcmUsIHRtcGZpbGUoKSBzaG91bGQgd29yay4gIENsb3NlIG91cgorICAgICAgICAgICAgICAgICAgICAjIGR1bW15IGZpbGUgYW5kIHByb2NlZWQgd2l0aCB0aGUgdGVzdCBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCisKKyAgICAgICAgICAgIGZwID0gb3MudG1wZmlsZSgpCisgICAgICAgICAgICBmcC53cml0ZSgiZm9vYmFyIikKKyAgICAgICAgICAgIGZwLnNlZWsoMCwwKQorICAgICAgICAgICAgcyA9IGZwLnJlYWQoKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gImZvb2JhciIpCiAKICAgICBkZWYgdGVzdF90bXBuYW0oc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0bXBuYW0iKToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInRtcG5hbSIsIFJ1bnRpbWVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByInRlc3Rfb3MkIikKLSAgICAgICAgbmFtZSA9IG9zLnRtcG5hbSgpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwpOgotICAgICAgICAgICAgIyBUaGUgV2luZG93cyB0bXBuYW0oKSBzZWVtcyB1c2VsZXNzLiAgRnJvbSB0aGUgTVMgZG9jczoKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgICAgIFRoZSBjaGFyYWN0ZXIgc3RyaW5nIHRoYXQgdG1wbmFtIGNyZWF0ZXMgY29uc2lzdHMgb2YKLSAgICAgICAgICAgICMgICAgIHRoZSBwYXRoIHByZWZpeCwgZGVmaW5lZCBieSB0aGUgZW50cnkgUF90bXBkaXIgaW4gdGhlCi0gICAgICAgICAgICAjICAgICBmaWxlIFNURElPLkgsIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUKLSAgICAgICAgICAgICMgICAgIGRpZ2l0IGNoYXJhY3RlcnMgJzAnIHRocm91Z2ggJzknOyB0aGUgbnVtZXJpY2FsIHZhbHVlCi0gICAgICAgICAgICAjICAgICBvZiB0aGlzIHN0cmluZyBpcyBpbiB0aGUgcmFuZ2UgMSAtIDY1LDUzNS4gIENoYW5naW5nIHRoZQotICAgICAgICAgICAgIyAgICAgZGVmaW5pdGlvbnMgb2YgTF90bXBuYW0gb3IgUF90bXBkaXIgaW4gU1RESU8uSCBkb2VzIG5vdAotICAgICAgICAgICAgIyAgICAgY2hhbmdlIHRoZSBvcGVyYXRpb24gb2YgdG1wbmFtLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGUgcmVhbGx5IGJpemFycmUgcGFydCBpcyB0aGF0LCBhdCBsZWFzdCB1bmRlciBNU1ZDNiwKLSAgICAgICAgICAgICMgUF90bXBkaXIgaXMgIlxcIi4gIFRoYXQgaXMsIHRoZSBwYXRoIHJldHVybmVkIHJlZmVycyB0bwotICAgICAgICAgICAgIyB0aGUgcm9vdCBvZiB0aGUgY3VycmVudCBkcml2ZS4gIFRoYXQncyBhIHRlcnJpYmxlIHBsYWNlIHRvCi0gICAgICAgICAgICAjIHB1dCB0ZW1wIGZpbGVzLCBhbmQsIGRlcGVuZGluZyBvbiBwcml2aWxlZ2VzLCB0aGUgdXNlcgotICAgICAgICAgICAgIyBtYXkgbm90IGV2ZW4gYmUgYWJsZSB0byBvcGVuIGEgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihvcy5wYXRoLmV4aXN0cyhuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIGFscmVhZHkgZXhpc3RzIGZvciB0ZW1wb3JhcnkgZmlsZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidG1wbmFtIiwgUnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByInRlc3Rfb3MkIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidG1wbmFtIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgICAgICBuYW1lID0gb3MudG1wbmFtKCkKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwpOgorICAgICAgICAgICAgICAgICMgVGhlIFdpbmRvd3MgdG1wbmFtKCkgc2VlbXMgdXNlbGVzcy4gIEZyb20gdGhlIE1TIGRvY3M6CisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgICAgIFRoZSBjaGFyYWN0ZXIgc3RyaW5nIHRoYXQgdG1wbmFtIGNyZWF0ZXMgY29uc2lzdHMgb2YKKyAgICAgICAgICAgICAgICAjICAgICB0aGUgcGF0aCBwcmVmaXgsIGRlZmluZWQgYnkgdGhlIGVudHJ5IFBfdG1wZGlyIGluIHRoZQorICAgICAgICAgICAgICAgICMgICAgIGZpbGUgU1RESU8uSCwgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZQorICAgICAgICAgICAgICAgICMgICAgIGRpZ2l0IGNoYXJhY3RlcnMgJzAnIHRocm91Z2ggJzknOyB0aGUgbnVtZXJpY2FsIHZhbHVlCisgICAgICAgICAgICAgICAgIyAgICAgb2YgdGhpcyBzdHJpbmcgaXMgaW4gdGhlIHJhbmdlIDEgLSA2NSw1MzUuICBDaGFuZ2luZyB0aGUKKyAgICAgICAgICAgICAgICAjICAgICBkZWZpbml0aW9ucyBvZiBMX3RtcG5hbSBvciBQX3RtcGRpciBpbiBTVERJTy5IIGRvZXMgbm90CisgICAgICAgICAgICAgICAgIyAgICAgY2hhbmdlIHRoZSBvcGVyYXRpb24gb2YgdG1wbmFtLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoZSByZWFsbHkgYml6YXJyZSBwYXJ0IGlzIHRoYXQsIGF0IGxlYXN0IHVuZGVyIE1TVkM2LAorICAgICAgICAgICAgICAgICMgUF90bXBkaXIgaXMgIlxcIi4gIFRoYXQgaXMsIHRoZSBwYXRoIHJldHVybmVkIHJlZmVycyB0bworICAgICAgICAgICAgICAgICMgdGhlIHJvb3Qgb2YgdGhlIGN1cnJlbnQgZHJpdmUuICBUaGF0J3MgYSB0ZXJyaWJsZSBwbGFjZSB0bworICAgICAgICAgICAgICAgICMgcHV0IHRlbXAgZmlsZXMsIGFuZCwgZGVwZW5kaW5nIG9uIHByaXZpbGVnZXMsIHRoZSB1c2VyCisgICAgICAgICAgICAgICAgIyBtYXkgbm90IGV2ZW4gYmUgYWJsZSB0byBvcGVuIGEgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGVtcG9yYXJ5IGZpbGUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RlbXBmaWxlKG5hbWUpCiAKICMgVGVzdCBhdHRyaWJ1dGVzIG9uIHJldHVybiB2YWx1ZXMgZnJvbSBvcy4qc3RhdCogZmFtaWx5LgogY2xhc3MgU3RhdEF0dHJpYnV0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE4NCwxMCArMTk1LDggQEAKICAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0W3N0YXQuU1RfU0laRV0sIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5zdF9zaXplLCAzKQotCi0gICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbc3RhdC5TVF9TSVpFXSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3Rfc2l6ZSwgMykKIAogICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlIHRoZXJlCiAgICAgICAgIG1lbWJlcnMgPSBkaXIocmVzdWx0KQpAQCAtMTk4LDkgKzIwNyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGRlZiB0cnVuYyh4KTogcmV0dXJuIGludCh4KQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGRlZiB0cnVuYyh4KTogcmV0dXJuIHgKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cnVuYyhnZXRhdHRyKHJlc3VsdCwgYXR0cikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtnZXRhdHRyKHN0YXQsIG5hbWUpXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYXR0ciBpbiBtZW1iZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJ1bmMoZ2V0YXR0cihyZXN1bHQsIGF0dHIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtnZXRhdHRyKHN0YXQsIG5hbWUpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGF0dHIsIG1lbWJlcnMpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0WzIwMF0KQEAgLTIxMiw3ICsyMjEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQuc3RfbW9kZSA9IDEKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHRocm93biIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgdHJ5OgpAQCAtMjQ5LDE4ICsyNTgsMTcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IG9zLnN0YXR2ZnMoc2VsZi5mbmFtZSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CiAgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCi0gICAgICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmZfYmZyZWUsIHJlc3VsdFszXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUgdGhlcmUuCiAgICAgICAgIG1lbWJlcnMgPSAoJ2JzaXplJywgJ2Zyc2l6ZScsICdibG9ja3MnLCAnYmZyZWUnLCAnYmF2YWlsJywgJ2ZpbGVzJywKICAgICAgICAgICAgICAgICAgICAgJ2ZmcmVlJywgJ2ZhdmFpbCcsICdmbGFnJywgJ25hbWVtYXgnKQogICAgICAgICBmb3IgdmFsdWUsIG1lbWJlciBpbiBlbnVtZXJhdGUobWVtYmVycyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhnZXRhdHRyKHJlc3VsdCwgJ2ZfJyArIG1lbWJlciksIHJlc3VsdFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocmVzdWx0LCAnZl8nICsgbWVtYmVyKSwgcmVzdWx0W3ZhbHVlXSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGFzc2lnbm1lbnQgcmVhbGx5IGZhaWxzCiAgICAgICAgIHRyeToKQEAgLTI5NSw3ICszMDMsNyBAQAogICAgICAgICAjIHRpbWUgc3RhbXBzIGluIHN0YXQsIGJ1dCBub3QgaW4gdXRpbWUuCiAgICAgICAgIG9zLnV0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4sIChzdC5zdF9hdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkpCiAgICAgICAgIHN0MiA9IG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3QyLnN0X210aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0Mi5zdF9tdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkKIAogICAgICMgUmVzdHJpY3QgdGVzdCB0byBXaW4zMiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIG90aGVyCiAgICAgIyBzeXN0ZW1zIHN1cHBvcnQgY2VudGlzZWNvbmRzCkBAIC0zMTIsNyArMzIwLDEyIEBACiAgICAgICAgICAgICBkZWYgdGVzdF8xNTY1MTUwKHNlbGYpOgogICAgICAgICAgICAgICAgIHQxID0gMTE1OTE5NTAzOS4yNQogICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQoc2VsZi5mbmFtZSkuc3RfbXRpbWUsIHQxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgdDEpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2xhcmdlX3RpbWUoc2VsZik6CisgICAgICAgICAgICAgICAgdDEgPSA1MDAwMDAwMDAwICMgc29tZSBkYXkgaW4gMjEyOAorICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgdDEpCiAKICAgICAgICAgZGVmIHRlc3RfMTY4NjQ3NShzZWxmKToKICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgYW4gb3BlbiBmaWxlIGNhbiBiZSBzdGF0J2VkCkBAIC0zNDQsOCArMzU3LDkgQEAKICAgICBkZWYgdGVzdF91cGRhdGUyKHNlbGYpOgogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL2Jpbi9zaCIpOgogICAgICAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoSEVMTE89IldvcmxkIikKLSAgICAgICAgICAgIHZhbHVlID0gb3MucG9wZW4oIi9iaW4vc2ggLWMgJ2VjaG8gJEhFTExPJyIpLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh2YWx1ZSwgIldvcmxkIikKKyAgICAgICAgICAgIHdpdGggb3MucG9wZW4oIi9iaW4vc2ggLWMgJ2VjaG8gJEhFTExPJyIpIGFzIHBvcGVuOgorICAgICAgICAgICAgICAgIHZhbHVlID0gcG9wZW4ucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAiV29ybGQiKQogCiBjbGFzcyBXYWxrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBvcy53YWxrKCkuIiIiCkBAIC00NjcsNyArNDgxLDcgQEAKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKIAogICAgICAgICAjIFRyeSBwYXRocyB3aXRoIGEgJy4nIGluIHRoZW0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKE9TRXJyb3IsIG9zLm1ha2VkaXJzLCBvcy5jdXJkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLm1ha2VkaXJzLCBvcy5jdXJkaXIpCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZSwgJ2RpcjEnLCAnZGlyMicsICdkaXIzJywgJ2RpcjQnLCAnZGlyNScsIG9zLmN1cmRpcikKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlLCAnZGlyMScsIG9zLmN1cmRpciwgJ2RpcjInLCAnZGlyMycsICdkaXI0JywKQEAgLTUwMCwxOCArNTE0LDIwIEBACiBjbGFzcyBVUmFuZG9tVGVzdHMgKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF91cmFuZG9tKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMSkpLCAxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTApKSwgMTApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxMDApKSwgMTAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTAwMCkpLCAxMDAwKQotICAgICAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNzA4Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgwLjkpKSwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEuMSkpLCAxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMi4wKSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTApKSwgMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEwMCkpLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDEwMDApKSwgMTAwMCkKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNzA4CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLnVyYW5kb20sIDAuOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MudXJhbmRvbSwgMS4xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy51cmFuZG9tLCAyLjApCiAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfZXhlY3ZwZV93aXRoX2JhZF9hcmdsaXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcy5leGVjdnBlLCAnbm90ZXBhZCcsIFtdLCBOb25lKQorCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW5hbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIHRlc3Rfc3VwcG9ydC5URVNURk4rIi5iYWsiKQpAQCAtNTIzLDE2ICs1MzksMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaGRpciwgdGVzdF9zdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X21rZGlyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNoZGlyLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MubWtkaXIsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfdXRpbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MudXRpbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIE5vbmUpCiAKLSAgICBkZWYgdGVzdF9hY2Nlc3Moc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MudXRpbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIDApCi0KICAgICBkZWYgdGVzdF9jaG1vZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaG1vZCwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgMCkKIAogY2xhc3MgVGVzdEludmFsaWRGRCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc2luZ2xlcyA9IFsiZmNoZGlyIiwgImZkb3BlbiIsICJkdXAiLCAiZmRhdGFzeW5jIiwgImZzdGF0IiwKQEAgLTU0OCw3ICs1NjYsMTMgQEAKICAgICAgICAgbG9jYWxzKClbInRlc3RfIitmXSA9IGdldF9zaW5nbGUoZikKIAogICAgIGRlZiBjaGVjayhzZWxmLCBmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYsIHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpLCAqYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZih0ZXN0X3N1cHBvcnQubWFrZV9iYWRfZmQoKSwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIlciBkaWRuJ3QgcmFpc2UgYSBPU0Vycm9yIHdpdGggYSBiYWQgZmlsZSBkZXNjcmlwdG9yIgorICAgICAgICAgICAgICAgICAgICAgICUgZikKIAogICAgIGRlZiB0ZXN0X2lzYXR0eShzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihvcywgImlzYXR0eSIpOgpAQCAtNTY2LDkgKzU5MCw4IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGkgPCAyOgotICAgICAgICAgICAgICAgICMgVW5hYmxlIHRvIGFjcXVpcmUgYSByYW5nZSBvZiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMsCi0gICAgICAgICAgICAgICAgIyBzbyBza2lwIHRoZSB0ZXN0IChpbiAyLjYrIHRoaXMgaXMgYSB1bml0dGVzdC5Ta2lwVGVzdCkuCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gYWNxdWlyZSBhIHJhbmdlIG9mIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmNsb3NlcmFuZ2UoZmQsIGZkICsgaS0xKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2R1cDIoc2VsZik6CkBAIC01ODcsMTEgKzYxMCw5IEBACiAgICAgICAgIGlmIGhhc2F0dHIob3MsICJmcGF0aGNvbmYiKToKICAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZnBhdGhjb25mLCAiUENfTkFNRV9NQVgiKQogCi0gICAgI3RoaXMgaXMgYSB3ZWlyZCBvbmUsIGl0IHJhaXNlcyBJT0Vycm9yIHVubGlrZSB0aGUgb3RoZXJzCiAgICAgZGVmIHRlc3RfZnRydW5jYXRlKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKG9zLCAiZnRydW5jYXRlIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBvcy5mdHJ1bmNhdGUsIHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZnRydW5jYXRlLCAwKQogCiAgICAgZGVmIHRlc3RfbHNlZWsoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIob3MsICJsc2VlayIpOgpAQCAtNjQ4LDcgKzY2OSw2IEBACiAgICAgICAgICAgICBkZWYgdGVzdF9zZXRyZXVpZF9uZWcxKHNlbGYpOgogICAgICAgICAgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCiAgICAgICAgICAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgotICAgICAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBvcyxzeXM7b3Muc2V0cmV1aWQoLTEsLTEpO3N5cy5leGl0KDApJ10pCkBAIC02NjMsNyArNjgzLDYgQEAKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJlZ2lkX25lZzEoc2VsZik6CiAgICAgICAgICAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKICAgICAgICAgICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCi0gICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWwogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKQEAgLTY3MSw2ICs2OTAsMTIwIEBACiAgICAgY2xhc3MgUG9zaXhVaWRHaWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBhc3MKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCitjbGFzcyBXaW4zMktpbGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9raWxsKHNlbGYsIHNpZyk6CisgICAgICAgICMgU3RhcnQgc3lzLmV4ZWN1dGFibGUgYXMgYSBzdWJwcm9jZXNzIGFuZCBjb21tdW5pY2F0ZSBmcm9tIHRoZQorICAgICAgICAjIHN1YnByb2Nlc3MgdG8gdGhlIHBhcmVudCB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyByZWFkeS4gV2hlbiBpdAorICAgICAgICAjIGJlY29tZXMgcmVhZHksIHNlbmQgKnNpZyogdmlhIG9zLmtpbGwgdG8gdGhlIHN1YnByb2Nlc3MgYW5kIGNoZWNrCisgICAgICAgICMgdGhhdCB0aGUgcmV0dXJuIGNvZGUgaXMgZXF1YWwgdG8gKnNpZyouCisgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIGltcG9ydCBtc3ZjcnQKKworICAgICAgICAjIFNpbmNlIHdlIGNhbid0IGFjY2VzcyB0aGUgY29udGVudHMgb2YgdGhlIHByb2Nlc3MnIHN0ZG91dCB1bnRpbCB0aGUKKyAgICAgICAgIyBwcm9jZXNzIGhhcyBleGl0ZWQsIHVzZSBQZWVrTmFtZWRQaXBlIHRvIHNlZSB3aGF0J3MgaW5zaWRlIHN0ZG91dAorICAgICAgICAjIHdpdGhvdXQgd2FpdGluZy4gVGhpcyBpcyBkb25lIHNvIHdlIGNhbiB0ZWxsIHRoYXQgdGhlIGludGVycHJldGVyCisgICAgICAgICMgaXMgc3RhcnRlZCBhbmQgcnVubmluZyBhdCBhIHBvaW50IHdoZXJlIGl0IGNvdWxkIGhhbmRsZSBhIHNpZ25hbC4KKyAgICAgICAgUGVla05hbWVkUGlwZSA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuUGVla05hbWVkUGlwZQorICAgICAgICBQZWVrTmFtZWRQaXBlLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisgICAgICAgIFBlZWtOYW1lZFBpcGUuYXJndHlwZXMgPSAod2ludHlwZXMuSEFORExFLCAjIFBpcGUgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfY2hhciksICMgc3Rkb3V0IGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbnR5cGVzLkRXT1JELCAjIEJ1ZmZlciBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIod2ludHlwZXMuRFdPUkQpLCAjIGJ5dGVzIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCksICMgYnl0ZXMgYXZhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCkpICMgYnl0ZXMgbGVmdAorICAgICAgICBtc2cgPSAicnVubmluZyIKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJ3t9Jyk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQoKSIuZm9ybWF0KG1zZyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvYy5zdGRpbi5jbG9zZSkKKworICAgICAgICBjb3VudCwgbWF4ID0gMCwgMTAwCisgICAgICAgIHdoaWxlIGNvdW50IDwgbWF4IGFuZCBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgIyBDcmVhdGUgYSBzdHJpbmcgYnVmZmVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2Ygc3Rkb3V0IGZyb20gdGhlIHBpcGUKKyAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihsZW4obXNnKSkKKyAgICAgICAgICAgICMgT2J0YWluIHRoZSB0ZXh0IGN1cnJlbnRseSBpbiBwcm9jLnN0ZG91dAorICAgICAgICAgICAgIyBCeXRlcyByZWFkL2F2YWlsL2xlZnQgYXJlIGxlZnQgYXMgTlVMTCBhbmQgdW51c2VkCisgICAgICAgICAgICByc2x0ID0gUGVla05hbWVkUGlwZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShwcm9jLnN0ZG91dC5maWxlbm8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGN0eXBlcy5zaXplb2YoYnVmKSwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnNsdCwgMCwgIlBlZWtOYW1lZFBpcGUgZmFpbGVkIikKKyAgICAgICAgICAgIGlmIGJ1Zi52YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYnVmLnZhbHVlKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCByZWNlaXZlIGNvbW11bmljYXRpb24gZnJvbSB0aGUgc3VicHJvY2VzcyIpCisKKyAgICAgICAgb3Mua2lsbChwcm9jLnBpZCwgc2lnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Mud2FpdCgpLCBzaWcpCisKKyAgICBkZWYgdGVzdF9raWxsX3NpZ3Rlcm0oc2VsZik6CisgICAgICAgICMgU0lHVEVSTSBkb2Vzbid0IG1lYW4gYW55dGhpbmcgc3BlY2lhbCwgYnV0IG1ha2Ugc3VyZSBpdCB3b3JrcworICAgICAgICBzZWxmLl9raWxsKHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfa2lsbF9pbnQoc2VsZik6CisgICAgICAgICMgb3Mua2lsbCBvbiBXaW5kb3dzIGNhbiB0YWtlIGFuIGludCB3aGljaCBnZXRzIHNldCBhcyB0aGUgZXhpdCBjb2RlCisgICAgICAgIHNlbGYuX2tpbGwoMTAwKQorCisgICAgZGVmIF9raWxsX3dpdGhfZXZlbnQoc2VsZiwgZXZlbnQsIG5hbWUpOgorICAgICAgICB0YWduYW1lID0gInRlc3Rfb3NfJXMiICUgdXVpZC51dWlkMSgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEsIHRhZ25hbWUpCisgICAgICAgIG1bMF0gPSAnMCcKKyAgICAgICAgIyBSdW4gYSBzY3JpcHQgd2hpY2ggaGFzIGNvbnNvbGUgY29udHJvbCBoYW5kbGluZyBlbmFibGVkLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aW5fY29uc29sZV9oYW5kbGVyLnB5IiksIHRhZ25hbWVdLAorICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9c3VicHJvY2Vzcy5DUkVBVEVfTkVXX1BST0NFU1NfR1JPVVApCisgICAgICAgICMgTGV0IHRoZSBpbnRlcnByZXRlciBzdGFydHVwIGJlZm9yZSB3ZSBzZW5kIHNpZ25hbHMuIFNlZSAjMzEzNy4KKyAgICAgICAgY291bnQsIG1heCA9IDAsIDIwCisgICAgICAgIHdoaWxlIGNvdW50IDwgbWF4IGFuZCBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbVswXSA9PSAnMSc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTdWJwcm9jZXNzIGRpZG4ndCBmaW5pc2ggaW5pdGlhbGl6YXRpb24iKQorICAgICAgICBvcy5raWxsKHByb2MucGlkLCBldmVudCkKKyAgICAgICAgIyBwcm9jLnNlbmRfc2lnbmFsKGV2ZW50KSBjb3VsZCBhbHNvIGJlIGRvbmUgaGVyZS4KKyAgICAgICAgIyBBbGxvdyB0aW1lIGZvciB0aGUgc2lnbmFsIHRvIGJlIHBhc3NlZCBhbmQgdGhlIHByb2Nlc3MgdG8gZXhpdC4KKyAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIGlmIG5vdCBwcm9jLnBvbGwoKToKKyAgICAgICAgICAgICMgRm9yY2VmdWxseSBraWxsIHRoZSBwcm9jZXNzIGlmIHdlIHdlcmVuJ3QgYWJsZSB0byBzaWduYWwgaXQuCisgICAgICAgICAgICBvcy5raWxsKHByb2MucGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzdWJwcm9jZXNzIGRpZCBub3Qgc3RvcCBvbiB7fSIuZm9ybWF0KG5hbWUpKQorCisgICAgQHVuaXR0ZXN0LnNraXAoInN1YnByb2Nlc3NlcyBhcmVuJ3QgaW5oZXJpdGluZyBDVFJMK0MgcHJvcGVydHkiKQorICAgIGRlZiB0ZXN0X0NUUkxfQ19FVkVOVChzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIGltcG9ydCBjdHlwZXMKKworICAgICAgICAjIE1ha2UgYSBOVUxMIHZhbHVlIGJ5IGNyZWF0aW5nIGEgcG9pbnRlciB3aXRoIG5vIGFyZ3VtZW50LgorICAgICAgICBOVUxMID0gY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfaW50KSgpCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlciA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuU2V0Q29uc29sZUN0cmxIYW5kbGVyCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlci5hcmd0eXBlcyA9IChjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuQk9PTCkKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisKKyAgICAgICAgIyBDYWxsaW5nIHRoaXMgd2l0aCBOVUxMIGFuZCBGQUxTRSBjYXVzZXMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0bworICAgICAgICAjIGhhbmRsZSBDVFJMK0MsIHJhdGhlciB0aGFuIGlnbm9yZSBpdC4gVGhpcyBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQKKyAgICAgICAgIyBieSBzdWJwcm9jZXNzZXMuCisgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlcihOVUxMLCAwKQorCisgICAgICAgIHNlbGYuX2tpbGxfd2l0aF9ldmVudChzaWduYWwuQ1RSTF9DX0VWRU5ULCAiQ1RSTF9DX0VWRU5UIikKKworICAgIGRlZiB0ZXN0X0NUUkxfQlJFQUtfRVZFTlQoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfd2l0aF9ldmVudChzaWduYWwuQ1RSTF9CUkVBS19FVkVOVCwgIkNUUkxfQlJFQUtfRVZFTlQiKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBGaWxlVGVzdHMsCkBAIC02ODMsNyArODE2LDggQEAKICAgICAgICAgVVJhbmRvbVRlc3RzLAogICAgICAgICBXaW4zMkVycm9yVGVzdHMsCiAgICAgICAgIFRlc3RJbnZhbGlkRkQsCi0gICAgICAgIFBvc2l4VWlkR2lkVGVzdHMKKyAgICAgICAgUG9zaXhVaWRHaWRUZXN0cywKKyAgICAgICAgV2luMzJLaWxsVGVzdHMKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQppbmRleCAyZmE5OTYyLi43YTM1N2EwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTEsMTAgKzEsMTEgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ2F1ZGlvJykKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZQorCitvc3NhdWRpb2RldiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdvc3NhdWRpb2RldicpCiAKIGltcG9ydCBlcnJubwotaW1wb3J0IG9zc2F1ZGlvZGV2CiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VuYXUKIGltcG9ydCB0aW1lCkBAIC00Niw3ICs0Nyw3IEBACiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVGVzdFNraXBwZWQobXNnKQorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgIyBhdCBsZWFzdCBjaGVjayB0aGF0IHRoZXNlIG1ldGhvZHMgY2FuIGJlIGludm9rZWQKQEAgLTU3LDcgKzU4LDcgQEAKICAgICAgICAgZHNwLmZpbGVubygpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJlYWQtb25seSBhdHRyaWJ1dGVzIHdvcmsuCi0gICAgICAgIHNlbGYuZmFpbElmKGRzcC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZHNwLmNsb3NlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3AubmFtZSwgIi9kZXYvZHNwIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkc3AubW9kZSwgInciLCAiYmFkIGRzcC5tb2RlOiAlciIgJSBkc3AubW9kZSkKIApAQCAtODMsNyArODQsNyBAQAogICAgICAgICBlbGFwc2VkX3RpbWUgPSB0MiAtIHQxCiAKICAgICAgICAgcGVyY2VudF9kaWZmID0gKGFicyhlbGFwc2VkX3RpbWUgLSBleHBlY3RlZF90aW1lKSAvIGV4cGVjdGVkX3RpbWUpICogMTAwCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwZXJjZW50X2RpZmYgPD0gMTAuMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBlcmNlbnRfZGlmZiA8PSAxMC4wLAogICAgICAgICAgICAgICAgICAgICAgICAgImVsYXBzZWQgdGltZSA+IDEwJSBvZmYgb2YgZXhwZWN0ZWQgdGltZSIpCiAKICAgICBkZWYgc2V0X3BhcmFtZXRlcnMoc2VsZiwgZHNwKToKQEAgLTEzMSw3ICsxMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIF06CiAgICAgICAgICAgICAoZm10LCBjaGFubmVscywgcmF0ZSkgPSBjb25maWcKICAgICAgICAgICAgIHJlc3VsdCA9IGRzcC5zZXRwYXJhbWV0ZXJzKGZtdCwgY2hhbm5lbHMsIHJhdGUsIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChyZXN1bHQsIGNvbmZpZywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LCBjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkbHkgZ290IHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIikKIAogICAgICAgICAgICAgdHJ5OgpAQCAtMTU1LDcgKzE1Niw3IEBACiAgICAgICAgICAgICAjc2VsZi5zZXRfYmFkX3BhcmFtZXRlcnMoZHNwKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZHNwLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkc3AuY2xvc2VkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRzcC5jbG9zZWQpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpAQCAtMTY0LDcgKzE2NSw3IEBACiAgICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgSU9FcnJvciksIG1zZzoKICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6Ci0gICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZChtc2cpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCiAgICAgICAgIHJhaXNlCiAgICAgZHNwLmNsb3NlKCkKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQppbmRleCA2YWNkMWU3Li4zM2I5MWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQpAQCAtMSw1ICsxLDQgQEAKIGltcG9ydCBwYXJzZXIKLWltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydApAQCAtMjAsOCArMTksOCBAQAogICAgICAgICBleGNlcHQgcGFyc2VyLlBhcnNlckVycm9yLCB3aHk6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNvdWxkIG5vdCByb3VuZHRyaXAgJXI6ICVzIiAlIChzLCB3aHkpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHQsIHN0Mi50b3R1cGxlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcmUtZ2VuZXJhdGUgc3ludGF4IHRyZWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHN0Mi50b3R1cGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZS1nZW5lcmF0ZSBzeW50YXggdHJlZSIpCiAKICAgICBkZWYgY2hlY2tfZXhwcihzZWxmLCBzKToKICAgICAgICAgc2VsZi5yb3VuZHRyaXAocGFyc2VyLmV4cHIsIHMpCkBAIC0zMyw3ICszMiw3IEBACiAgICAgICAgIGNvZGUgPSBzdWl0ZS5jb21waWxlKCkKICAgICAgICAgc2NvcGUgPSB7fQogICAgICAgICBleGVjIGNvZGUgaW4gc2NvcGUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2NvcGVbIngiXSwgdW5pY29kZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzY29wZVsieCJdLCB1bmljb2RlKQogCiAgICAgZGVmIGNoZWNrX3N1aXRlKHNlbGYsIHMpOgogICAgICAgICBzZWxmLnJvdW5kdHJpcChwYXJzZXIuc3VpdGUsIHMpCkBAIC01OSwxMyArNTgsMzcgQEAKIAogICAgIGRlZiB0ZXN0X2V4cHJlc3Npb25zKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbygxKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezE6MX0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxOjEsIDI6MiwgMzozfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezE6MSwgMjoyLCAzOjMsfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezF9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MSwgMiwgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxLCAyLCAzLH0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIltdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbMV0iKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlsxLCAyLCAzXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiWzEsIDIsIDMsXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKCkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIigxLCkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIigxLCAyLCAzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiKDEsIDIsIDMsKSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW3gqKjMgZm9yIHggaW4gcmFuZ2UoMjApXSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW3gqKjMgZm9yIHggaW4gcmFuZ2UoMjApIGlmIHggJSAzXSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW3gqKjMgZm9yIHggaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHggJSAzXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiW3greSBmb3IgeCBpbiByYW5nZSgzMCkgZm9yIHkgaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHkgJSAzXSIpCisgICAgICAgICNzZWxmLmNoZWNrX2V4cHIoIlt4IGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCldIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJsaXN0KHgqKjMgZm9yIHggaW4gcmFuZ2UoMjApKSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGlzdCh4KiozIGZvciB4IGluIHJhbmdlKDIwKSBpZiB4ICUgMykiKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDIgaWYgeCAlIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsaXN0KHgreSBmb3IgeCBpbiByYW5nZSgzMCkgZm9yIHkgaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHkgJSAzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjMgZm9yIHggaW4gcmFuZ2UoMzApfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjMgZm9yIHggaW4gcmFuZ2UoMzApIGlmIHggJSAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjMgZm9yIHggaW4gcmFuZ2UoMzApIGlmIHggJSAyIGlmIHggJSAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3greSBmb3IgeCBpbiByYW5nZSgzMCkgZm9yIHkgaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHkgJSAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjM6IHkqKjIgZm9yIHgsIHkgaW4gemlwKHJhbmdlKDMwKSwgcmFuZ2UoMzApKX0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozOiB5KioyIGZvciB4LCB5IGluIHppcChyYW5nZSgzMCksIHJhbmdlKDMwKSkgaWYgeCAlIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMzogeSoqMiBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoMzApLCByYW5nZSgzMCkpIGlmIHggJSAzIGlmIHkgJSAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3g6eSBmb3IgeCBpbiByYW5nZSgzMCkgZm9yIHkgaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHkgJSAzfSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKCphcmdzKSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKCphcmdzLCAqKmt3KSIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKCoqa3cpIikKQEAgLTk0LDYgKzExNyw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXIsIGJsYXo9YmxhdCsyLCAqKno6IDAiKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSBmb289YmFyLCBibGF6PWJsYXQrMiwgKnksICoqejogMCIpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIHgsICp5LCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSB4OiA1IGlmIHggZWxzZSAyIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCIoeCBmb3IgeCBpbiByYW5nZSgxMCkpIikKICAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oeCBmb3IgeCBpbiByYW5nZSgxMCkpIikKIApAQCAtMjEzLDYgKzIzNyw3IEBACiAgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgid2l0aCBvcGVuKCd4Jyk6IHBhc3NcbiIpCiAgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIndpdGggb3BlbigneCcpIGFzIGY6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIndpdGggb3BlbigneCcpIGFzIGYsIG9wZW4oJ3knKSBhcyBnOiBwYXNzXG4iKQogCiAgICAgZGVmIHRlc3RfdHJ5X3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0OiBwYXNzXG4iKQpAQCAtMjMzLDcgKzI1OCw3IEBACiAgICAgZGVmIHRlc3RfcG9zaXRpb24oc2VsZik6CiAgICAgICAgICMgQW4gYWJzb2x1dGVseSBtaW5pbWFsIHRlc3Qgb2YgcG9zaXRpb24gaW5mb3JtYXRpb24uICBCZXR0ZXIKICAgICAgICAgIyB0ZXN0cyB3b3VsZCBiZSBhIGJpZyBwcm9qZWN0LgotICAgICAgICBjb2RlID0gImRlZiBmKHgpOlxuICAgIHJldHVybiB4ICsgMVxuIgorICAgICAgICBjb2RlID0gImRlZiBmKHgpOlxuICAgIHJldHVybiB4ICsgMSIKICAgICAgICAgc3QxID0gcGFyc2VyLnN1aXRlKGNvZGUpCiAgICAgICAgIHN0MiA9IHN0MS50b3R1cGxlKGxpbmVfaW5mbz0xLCBjb2xfaW5mbz0xKQogCkBAIC01MjIsMTQgKzU0NywxNCBAQAogICAgIGRlZiB0ZXN0X2NvbXBpbGVfZXhwcihzZWxmKToKICAgICAgICAgc3QgPSBwYXJzZXIuZXhwcignMiArIDMnKQogICAgICAgICBjb2RlID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXZhbChjb2RlKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCA1KQogCiAgICAgZGVmIHRlc3RfY29tcGlsZV9zdWl0ZShzZWxmKToKICAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJ3ggPSAyOyB5ID0geCArIDMnKQogICAgICAgICBjb2RlID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKICAgICAgICAgZ2xvYnMgPSB7fQogICAgICAgICBleGVjIGNvZGUgaW4gZ2xvYnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ2xvYnNbJ3knXSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9ic1sneSddLCA1KQogCiAgICAgZGVmIHRlc3RfY29tcGlsZV9lcnJvcihzZWxmKToKICAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJzEgPSAzICsgNCcpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwM2MyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQpAQCAtMCwwICsxLDI4NyBAQAorIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgYXQgdGhlIG1vbWVudCwgdGhpcyBvbmx5IHZhbGlkYXRlcyBza2lwcGluZyBvZgorIyBzcGVjaWZpZWQgdGVzdCBtb2R1bGVzIChSRkUgIzUxNDIpLgorCitpbXBvcnQgaW1wCitpbXBvcnQgc3lzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisjIFRoaXMgbGl0dGxlIGhlbHBlciBjbGFzcyBpcyBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgcGRiIHVuZGVyIGRvY3Rlc3QuCitmcm9tIHRlc3RfZG9jdGVzdCBpbXBvcnQgX0Zha2VJbnB1dAorCisKK2NsYXNzIFBkYlRlc3RJbnB1dChvYmplY3QpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0aGF0IG1ha2VzIHRlc3RpbmcgUGRiIGluIGRvY3Rlc3RzIGVhc2llci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dCk6CisgICAgICAgIHNlbGYuaW5wdXQgPSBpbnB1dAorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZWFsX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoc2VsZi5pbnB1dCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKKyAgICAgICAgc3lzLnN0ZGluID0gc2VsZi5yZWFsX3N0ZGluCisKKworZGVmIHdyaXRlKHgpOgorICAgIHByaW50IHgKKworZGVmIHRlc3RfcGRiX2Rpc3BsYXlob29rKCk6CisgICAgIiIiVGhpcyB0ZXN0cyB0aGUgY3VzdG9tIGRpc3BsYXlob29rIGZvciBwZGIuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oZm9vLCBiYXIpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYigpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBwYXNzCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWworICAgIC4uLiAgICAgJ2ZvbycsCisgICAgLi4uICAgICAnYmFyJywKKyAgICAuLi4gICAgICdmb3IgaSBpbiByYW5nZSg1KTogd3JpdGUoaSknLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKDEsIE5vbmUpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Rpc3BsYXlob29rWzBdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHBhc3MKKyAgICAoUGRiKSBmb28KKyAgICAxCisgICAgKFBkYikgYmFyCisgICAgKFBkYikgZm9yIGkgaW4gcmFuZ2UoNSk6IHdyaXRlKGkpCisgICAgMAorICAgIDEKKyAgICAyCisgICAgMworICAgIDQKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCitkZWYgdGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kcygpOgorICAgICIiIlRlc3QgYmFzaWMgY29tbWFuZHMgcmVsYXRlZCB0byBicmVha3BvaW50cy4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYigpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBwcmludCgxKQorICAgIC4uLiAgICAgcHJpbnQoMikKKyAgICAuLi4gICAgIHByaW50KDMpCisgICAgLi4uICAgICBwcmludCg0KQorCisgICAgRmlyc3QsIG5lZWQgdG8gY2xlYXIgYmRiIHN0YXRlIHRoYXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgdGVzdHMuCisgICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KKworICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAorICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCisgICAgPj4+IEJyZWFrcG9pbnQuYnBsaXN0ID0ge30KKyAgICA+Pj4gQnJlYWtwb2ludC5icGJ5bnVtYmVyID0gW05vbmVdCisKKyAgICBOb3cgdGVzdCB0aGUgYnJlYWtwb2ludCBjb21tYW5kcy4gIE5PUk1BTElaRV9XSElURVNQQUNFIGlzIG5lZWRlZCBiZWNhdXNlCisgICAgdGhlIGJyZWFrcG9pbnQgbGlzdCBvdXRwdXRzIGEgdGFiIGZvciB0aGUgInN0b3Agb25seSIgYW5kICJpZ25vcmUgbmV4dCIKKyAgICBsaW5lcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBwdXQgaW4gaGVyZS4KKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgJ2JyZWFrIDMnLAorICAgIC4uLiAgICAgJ2Rpc2FibGUgMScsCisgICAgLi4uICAgICAnaWdub3JlIDEgMTAnLAorICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxIDEgPCAyJywKKyAgICAuLi4gICAgICdicmVhayA0JywKKyAgICAuLi4gICAgICdicmVhayA0JywKKyAgICAuLi4gICAgICdicmVhaycsCisgICAgLi4uICAgICAnY2xlYXIgMycsCisgICAgLi4uICAgICAnYnJlYWsnLAorICAgIC4uLiAgICAgJ2NvbmRpdGlvbiAxJywKKyAgICAuLi4gICAgICdlbmFibGUgMScsCisgICAgLi4uICAgICAnY2xlYXIgMScsCisgICAgLi4uICAgICAnY29tbWFuZHMgMicsCisgICAgLi4uICAgICAncHJpbnQgNDInLAorICAgIC4uLiAgICAgJ2VuZCcsCisgICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgYnJlYWtwb2ludCAyIChsaW5lIDQpCisgICAgLi4uICAgICAnY2xlYXInLCAgICAgIyBjbGVhciBhbGwhCisgICAgLi4uICAgICAneScsCisgICAgLi4uICAgICAndGJyZWFrIDUnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IHRlbXBvcmFyeSBicmVha3BvaW50CisgICAgLi4uICAgICAnYnJlYWsnLCAgICAgIyBtYWtlIHN1cmUgYnJlYWtwb2ludCBpcyBnb25lCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMSkKKyAgICAoUGRiKSBicmVhayAzCisgICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgIChQZGIpIGRpc2FibGUgMQorICAgIChQZGIpIGlnbm9yZSAxIDEwCisgICAgV2lsbCBpZ25vcmUgbmV4dCAxMCBjcm9zc2luZ3Mgb2YgYnJlYWtwb2ludCAxLgorICAgIChQZGIpIGNvbmRpdGlvbiAxIDEgPCAyCisgICAgKFBkYikgYnJlYWsgNAorICAgIEJyZWFrcG9pbnQgMiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBicmVhayA0CisgICAgQnJlYWtwb2ludCAzIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGJyZWFrCisgICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCisgICAgMSAgIGJyZWFrcG9pbnQgICBrZWVwIG5vICAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgICAgICAgICAgc3RvcCBvbmx5IGlmIDEgPCAyCisgICAgICAgICAgICBpZ25vcmUgbmV4dCAxMCBoaXRzCisgICAgMiAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIDMgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBjbGVhciAzCisgICAgRGVsZXRlZCBicmVha3BvaW50IDMKKyAgICAoUGRiKSBicmVhaworICAgIE51bSBUeXBlICAgICAgICAgRGlzcCBFbmIgICBXaGVyZQorICAgIDEgICBicmVha3BvaW50ICAga2VlcCBubyAgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKKyAgICAgICAgICAgIHN0b3Agb25seSBpZiAxIDwgMgorICAgICAgICAgICAgaWdub3JlIG5leHQgMTAgaGl0cworICAgIDIgICBicmVha3BvaW50ICAga2VlcCB5ZXMgICBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKKyAgICAoUGRiKSBjb25kaXRpb24gMQorICAgIEJyZWFrcG9pbnQgMSBpcyBub3cgdW5jb25kaXRpb25hbC4KKyAgICAoUGRiKSBlbmFibGUgMQorICAgIChQZGIpIGNsZWFyIDEKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMQorICAgIChQZGIpIGNvbW1hbmRzIDIKKyAgICAoY29tKSBwcmludCA0MgorICAgIChjb20pIGVuZAorICAgIChQZGIpIGNvbnRpbnVlCisgICAgMQorICAgIDQyCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMikKKyAgICAoUGRiKSBjbGVhcgorICAgIENsZWFyIGFsbCBicmVha3M/IHkKKyAgICAoUGRiKSB0YnJlYWsgNQorICAgIEJyZWFrcG9pbnQgNCBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjUKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDIKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgNAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KDMpCisgICAgKFBkYikgYnJlYWsKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDMKKyAgICA0CisgICAgIiIiCisKKworZGVmIHRlc3RfcGRiX3NraXBfbW9kdWxlcygpOgorICAgICIiIlRoaXMgaWxsdXN0cmF0ZXMgdGhlIHNpbXBsZSBjYXNlIG9mIG1vZHVsZSBza2lwcGluZy4KKworICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKKyAgICAuLi4gICAgIGltcG9ydCBzdHJpbmcKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ3N0cmluZyonXSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHN0cmluZy5sb3dlcignRk9PJykKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHNraXBfbW9kdWxlKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzWzBdPig0KXNraXBfbW9kdWxlKCkKKyAgICAtPiBzdHJpbmcubG93ZXIoJ0ZPTycpCisgICAgKFBkYikgc3RlcAorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzWzBdPig0KXNraXBfbW9kdWxlKCktPk5vbmUKKyAgICAtPiBzdHJpbmcubG93ZXIoJ0ZPTycpCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworCisjIE1vZHVsZSBmb3IgdGVzdGluZyBza2lwcGluZyBvZiBtb2R1bGUgdGhhdCBtYWtlcyBhIGNhbGxiYWNrCittb2QgPSBpbXAubmV3X21vZHVsZSgnbW9kdWxlX3RvX3NraXAnKQorZXhlYyAnZGVmIGZvb19wb255KGNhbGxiYWNrKTogeCA9IDE7IGNhbGxiYWNrKCk7IHJldHVybiBOb25lJyBpbiBtb2QuX19kaWN0X18KKworCitkZWYgdGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2soKToKKyAgICAiIiJUaGlzIGlsbHVzdHJhdGVzIHNraXBwaW5nIG9mIG1vZHVsZXMgdGhhdCBjYWxsIGludG8gb3RoZXIgY29kZS4KKworICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKKyAgICAuLi4gICAgIGRlZiBjYWxsYmFjaygpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBOb25lCisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9Wydtb2R1bGVfdG9fc2tpcConXSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIG1vZC5mb29fcG9ueShjYWxsYmFjaykKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnc3RlcCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHNraXBfbW9kdWxlKCkKKyAgICAuLi4gICAgIHBhc3MgICMgcHJvdmlkZXMgc29tZXRoaW5nIHRvICJzdGVwIiB0bworICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oNSlza2lwX21vZHVsZSgpCisgICAgLT4gbW9kLmZvb19wb255KGNhbGxiYWNrKQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMiljYWxsYmFjaygpCisgICAgLT4gZGVmIGNhbGxiYWNrKCk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMyljYWxsYmFjaygpCisgICAgLT4gcmV0dXJuIE5vbmUKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oMyljYWxsYmFjaygpLT5Ob25lCisgICAgLT4gcmV0dXJuIE5vbmUKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1swXT4oNSlza2lwX21vZHVsZSgpLT5Ob25lCisgICAgLT4gbW9kLmZvb19wb255KGNhbGxiYWNrKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfc2tpcF9tb2R1bGVzX3dpdGhfY2FsbGJhY2tbMV0+KDEwKTxtb2R1bGU+KCkKKyAgICAtPiBwYXNzICAjIHByb3ZpZGVzIHNvbWV0aGluZyB0byAic3RlcCIgdG8KKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKK2RlZiB0ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZSgpOgorICAgICIiIlRlc3QgdGhhdCAiY29udGludWUiIGFuZCAibmV4dCIgd29yayBwcm9wZXJseSBpbiBib3R0b20gZnJhbWUgKGlzc3VlICM1Mjk0KS4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYiwgc3lzOyBpbnN0ID0gcGRiLlBkYigpCisgICAgLi4uICAgICBpbnN0LnNldF90cmFjZSgpCisgICAgLi4uICAgICBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQorICAgIC4uLiAgICAgcHJpbnQoMSkKKyAgICAuLi4gICAgIHByaW50KDIpCisgICAgLi4uICAgICBwcmludCgzKQorICAgIC4uLiAgICAgcHJpbnQoNCkKKworICAgIEZpcnN0LCBuZWVkIHRvIGNsZWFyIGJkYiBzdGF0ZSB0aGF0IG1pZ2h0IGJlIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIHRlc3RzLgorICAgIE90aGVyd2lzZSwgdGhlIG5ldyBicmVha3BvaW50cyBtaWdodCBnZXQgYXNzaWduZWQgZGlmZmVyZW50IG51bWJlcnMuCisKKyAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKKyAgICA+Pj4gQnJlYWtwb2ludC5uZXh0ID0gMQorICAgID4+PiBCcmVha3BvaW50LmJwbGlzdCA9IHt9CisgICAgPj4+IEJyZWFrcG9pbnQuYnBieW51bWJlciA9IFtOb25lXQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICduZXh0JywKKyAgICAuLi4gICAgICdicmVhayA3JywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAnbmV4dCcsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMSkKKyAgICAoUGRiKSBicmVhayA3CisgICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+OjcKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDEKKyAgICAyCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig3KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KDMpCisgICAgKFBkYikgbmV4dAorICAgIDMKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDgpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoNCkKKyAgICAoUGRiKSBjb250aW51ZQorICAgIDQKKyAgICAiIiIKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3BkYgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3BkYiwgdmVyYm9zaXR5PVRydWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQppbmRleCAyOTg1Y2MyLi5kMDVmZWE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQpAQCAtMTksMTUgKzE5LDE0IEBACiBjbGFzcyBUZXN0VHJhbmZvcm1zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Vub3Qoc2VsZik6Ci0gICAgICAgICMgVU5BUllfTk9UIEpVTVBfSUZfRkFMU0UgUE9QX1RPUCAgLS0+ICBKVU1QX0lGX1RSVUUgUE9QX1RPUCcKKyAgICAgICAgIyBVTkFSWV9OT1QgUE9QX0pVTVBfSUZfRkFMU0UgIC0tPiAgUE9QX0pVTVBfSUZfVFJVRQogICAgICAgICBkZWYgdW5vdCh4KToKICAgICAgICAgICAgIGlmIG5vdCB4ID09IDI6CiAgICAgICAgICAgICAgICAgZGVsIHgKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUodW5vdCkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdVTkFSWV9OT1QnLCAnSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gbm90IGluIGFzbSkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0lGX1RSVUUnLCAnUE9QX1RPUCcpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtKQorICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1BPUF9KVU1QX0lGX1RSVUUnLCBhc20pCiAKICAgICBkZWYgdGVzdF9lbGltX2ludmVyc2lvbl9vZl9pc19vcl9pbihzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtMzcsNyArMzYsNyBAQAogICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICcoaW4pJywpLAogICAgICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQogCiAgICAgZGVmIHRlc3Rfbm9uZV9hc19jb25zdGFudChzZWxmKToKICAgICAgICAgIyBMT0FEX0dMT0JBTCBOb25lICAtLT4gIExPQURfQ09OU1QgTm9uZQpAQCAtNDYsMjYgKzQ1LDI2IEBACiAgICAgICAgICAgICByZXR1cm4geAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfR0xPQkFMJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnKE5vbmUpJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oZWxlbSBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICdBZGRpbmcgYSBkb2NzdHJpbmcgbWFkZSB0aGlzIHRlc3QgZmFpbCBpbiBQeTIuNS4wJwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdMT0FEX0NPTlNUJyBpbiBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdMT0FEX0dMT0JBTCcgbm90IGluIGRpc2Fzc2VtYmxlKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdMT0FEX0NPTlNUJywgZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfR0xPQkFMJywgZGlzYXNzZW1ibGUoZikpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6Ci0gICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIEpVTVBfSUZfRkFMU0UgeHggIFBPUF9UT1AKKyAgICAgICAgIyBTa2lwIG92ZXI6ICBMT0FEX0NPTlNUIHRydWVjb25zdCAgUE9QX0pVTVBfSUZfRkFMU0UgeHgKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGxpc3QKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIG5vdCBpbiBhc20pCisgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCiAgICAgICAgIGZvciBlbGVtIGluICgnSlVNUF9BQlNPTFVURScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQogCiAgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTc0LDkgKzczLDkgQEAKICAgICAgICAgICAgICgnYSwgYiwgYyA9IGEsIGIsIGMnLCAnUk9UX1RIUkVFJywpLAogICAgICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnQlVJTERfVFVQTEUnIG5vdCBpbiBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ1VOUEFDS19UVVBMRScgbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTlBBQ0tfVFVQTEUnLCBhc20pCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3R1cGxlc19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTg3LDggKzg2LDggQEAKICAgICAgICAgICAgICgnKCgxLCAyKSwgMywgNCknLCAnKCgoMSwgMiksIDMsIDQpKScpLAogICAgICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnQlVJTERfVFVQTEUnIG5vdCBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQogCiAgICAgICAgICMgQnVnIDEwNTM4MTk6ICBUdXBsZSBvZiBjb25zdGFudHMgbWlzaWRlbnRpZmllZCB3aGVuIHByZXNlbnRlZCB3aXRoOgogICAgICAgICAjIC4gLiAuIG9wY29kZV93aXRoX2FyZyAxMDAgICB1bmFyeV9vcGNvZGUgICBCVUlMRF9UVVBMRSAxICAuIC4gLgpAQCAtMTI2LDE3ICsxMjUsMTcgQEAKICAgICAgICAgICAgICgnYSA9IDEzIHwgNycsICcoMTUpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgogICAgICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdCSU5BUllfJyBub3QgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAogICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPTIrImIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcoMiknIGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCIoJ2InKSIgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCiAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydF8oJygxMDAwKScgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3VuYXJ5b3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtMTQ1LDggKzE0NCw4IEBACiAgICAgICAgICAgICAoJ34tMicsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbGVtIGluIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdVTkFSWV8nIG5vdCBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtMTU0LDE2ICsxNTMsMTYgQEAKICAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAogICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gaW4gYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ1VOQVJZXycgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fZXh0cmFfcmV0dXJuKHNlbGYpOgogICAgICAgICAjIFJFVFVSTiBMT0FEX0NPTlNUIE5vbmUgUkVUVVJOICAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZih4KToKICAgICAgICAgICAgIHJldHVybiB4CiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnTE9BRF9DT05TVCcgbm90IGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcoTm9uZSknIG5vdCBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfQ09OU1QnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJyhOb25lKScsIGFzbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDEpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfdG9fcmV0dXJuKHNlbGYpOgpAQCAtMTcxLDggKzE3MCw4IEBACiAgICAgICAgIGRlZiBmKGNvbmQsIHRydWVfdmFsdWUsIGZhbHNlX3ZhbHVlKToKICAgICAgICAgICAgIHJldHVybiB0cnVlX3ZhbHVlIGlmIGNvbmQgZWxzZSBmYWxzZV92YWx1ZQogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdKVU1QX0FCU09MVVRFJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CkBAIC0xODcsOCArMTg2LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gNQogICAgICAgICAgICAgcmV0dXJuIDYKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdKVU1QX0ZPUldBUkQnIG5vdCBpbiBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnSlVNUF9BQlNPTFVURScgbm90IGluIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgNikKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4yKHNlbGYpOgpAQCAtMTk3LDcgKzE5Niw3IEBACiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydF8oJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCkBAIC0yMDgsNyArMjA3LDcgQEAKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogICAgIHRlc3RfY2xhc3NlcyA9IChUZXN0VHJhbmZvcm1zLCkKIAotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCiAgICAgICAgICAgICAoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwgU3ludGF4V2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKaW5kZXggNjkxYzg1YS4uNDIzZDMzMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKQEAgLTE5LDggKzE5LDggQEAKIGNsYXNzIFBlcDI0N1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGNoZWNrX21vZHVsZShzZWxmLCBtb2R1bGUsIGtleT1Ob25lKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIobW9kdWxlLCAnZGlnZXN0X3NpemUnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1vZHVsZS5kaWdlc3Rfc2l6ZSBpcyBOb25lIG9yIG1vZHVsZS5kaWdlc3Rfc2l6ZSA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2RpZ2VzdF9zaXplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZSBvciBtb2R1bGUuZGlnZXN0X3NpemUgPiAwKQogCiAgICAgICAgIGlmIG5vdCBrZXkgaXMgTm9uZToKICAgICAgICAgICAgIG9iajEgPSBtb2R1bGUubmV3KGtleSkKQEAgLTM5LDI0ICszOSwyNCBAQAogICAgICAgICAgICAgb2JqMy51cGRhdGUoJ3N0cmluZycpCiAgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoMSwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgyKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKG9iajEsICdkaWdlc3Rfc2l6ZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvYmoxLCAnZGlnZXN0X3NpemUnKSkKIAogICAgICAgICBpZiBub3QgbW9kdWxlLmRpZ2VzdF9zaXplIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvYmoxLmRpZ2VzdF9zaXplLCBtb2R1bGUuZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuZGlnZXN0X3NpemUsIG1vZHVsZS5kaWdlc3Rfc2l6ZSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvYmoxLmRpZ2VzdF9zaXplLCBsZW4oaDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iajEuZGlnZXN0X3NpemUsIGxlbihoMSkpCiAgICAgICAgIG9iajEudXBkYXRlKCdzdHJpbmcnKQogICAgICAgICBvYmpfY29weSA9IG9iajEuY29weSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9iajEuZGlnZXN0KCksIG9ial9jb3B5LmRpZ2VzdCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvYmoxLmhleGRpZ2VzdCgpLCBvYmpfY29weS5oZXhkaWdlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoxLmRpZ2VzdCgpLCBvYmpfY29weS5kaWdlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoxLmhleGRpZ2VzdCgpLCBvYmpfY29weS5oZXhkaWdlc3QoKSkKIAogICAgICAgICBkaWdlc3QsIGhleGRpZ2VzdCA9IG9iajEuZGlnZXN0KCksIG9iajEuaGV4ZGlnZXN0KCkKICAgICAgICAgaGQyID0gIiIKICAgICAgICAgZm9yIGJ5dGUgaW4gZGlnZXN0OgogICAgICAgICAgICAgaGQyICs9ICclMDJ4JyAlIG9yZChieXRlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoZDIsIGhleGRpZ2VzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZDIsIGhleGRpZ2VzdCkKIAogICAgIGRlZiB0ZXN0X21kNShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19tb2R1bGUobWQ1KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCBjYjYyMTBiLi42YzhhMjVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtMSwyMiArMSw1OCBAQAogIyBUZXN0IHRoZSBVbmljb2RlIHZlcnNpb25zIG9mIG5vcm1hbCBmaWxlIGZ1bmN0aW9ucwogIyBvcGVuLCBvcy5vcGVuLCBvcy5zdGF0LiBvcy5saXN0ZGlyLCBvcy5yZW5hbWUsIG9zLnJlbW92ZSwgb3MubWtkaXIsIG9zLmNoZGlyLCBvcy5ybWRpcgogaW1wb3J0IHN5cywgb3MsIHVuaXR0ZXN0Citmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKLSAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQsICJ0ZXN0IHdvcmtzIG9ubHkgb24gTlQrIgogCiBmaWxlbmFtZXMgPSBbCi0gICAgJ2FiYycsCi0gICAgdSdhc2NpaScsCi0gICAgdSdHclx4ZmNceGRmLUdvdHQnLAotICAgIHUnXHUwMzkzXHUwM2I1XHUwM2I5XHUwM2FjLVx1MDNjM1x1MDNiMVx1MDNjMicsCi0gICAgdSdcdTA0MTdcdTA0MzRcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NDFcdTA0NDJcdTA0MzJcdTA0NDNcdTA0MzlcdTA0NDJcdTA0MzUnLAotICAgIHUnXHUzMDZiXHUzMDdkXHUzMDkzJywKLSAgICB1J1x1MDVkNFx1MDVlOVx1MDVlN1x1MDVlNlx1MDVlNVx1MDVlMScsCi0gICAgdSdcdTY2ZThcdTY2ZTlcdTY2ZWInLAotICAgIHUnXHU2NmU4XHUwNWU5XHUzMDkzXHUwNDM0XHUwMzkzXHhkZicsCisgICAgJzFfYWJjJywKKyAgICB1JzJfYXNjaWknLAorICAgIHUnM19Hclx4ZmNceGRmLUdvdHQnLAorICAgIHUnNF9cdTAzOTNcdTAzYjVcdTAzYjlcdTAzYWMtXHUwM2MzXHUwM2IxXHUwM2MyJywKKyAgICB1JzVfXHUwNDE3XHUwNDM0XHUwNDQwXHUwNDMwXHUwNDMyXHUwNDQxXHUwNDQyXHUwNDMyXHUwNDQzXHUwNDM5XHUwNDQyXHUwNDM1JywKKyAgICB1JzZfXHUzMDZiXHUzMDdkXHUzMDkzJywKKyAgICB1JzdfXHUwNWQ0XHUwNWU5XHUwNWU3XHUwNWU2XHUwNWU1XHUwNWUxJywKKyAgICB1JzhfXHU2NmU4XHU2NmU5XHU2NmViJywKKyAgICB1JzlfXHU2NmU4XHUwNWU5XHUzMDkzXHUwNDM0XHUwMzkzXHhkZicsCisgICAgIyBTcGVjaWZpYyBjb2RlIHBvaW50czogZm4sIE5GQyhmbikgYW5kIE5GS0MoZm4pIGFsbCBkaWZmZXJlbnRzCisgICAgdScxMF9cdTFmZWVcdTFmZmQnLAogICAgIF0KIAorIyBNYWMgT1MgWCBkZWNvbXBvc2VzIFVuaWNvZGUgbmFtZXMsIHVzaW5nIE5vcm1hbCBGb3JtIEQuCisjIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL21hYy9saWJyYXJ5L3FhL3FhMjAwMS9xYTExNzMuaHRtbAorIyAiSG93ZXZlciwgbW9zdCB2b2x1bWUgZm9ybWF0cyBkbyBub3QgZm9sbG93IHRoZSBleGFjdCBzcGVjaWZpY2F0aW9uIGZvcgorIyB0aGVzZSBub3JtYWwgZm9ybXMuICBGb3IgZXhhbXBsZSwgSEZTIFBsdXMgdXNlcyBhIHZhcmlhbnQgb2YgTm9ybWFsIEZvcm0gRAorIyBpbiB3aGljaCBVKzIwMDAgdGhyb3VnaCBVKzJGRkYsIFUrRjkwMCB0aHJvdWdoIFUrRkFGRiwgYW5kIFUrMkY4MDAgdGhyb3VnaAorIyBVKzJGQUZGIGFyZSBub3QgZGVjb21wb3NlZC4iCitpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6CisgICAgZmlsZW5hbWVzLmV4dGVuZChbCisgICAgICAgICMgU3BlY2lmaWMgY29kZSBwb2ludHM6IE5GQyhmbiksIE5GRChmbiksIE5GS0MoZm4pIGFuZCBORktEKGZuKSBhbGwgZGlmZmVyZW50cworICAgICAgICB1JzExX1x1MDM4NVx1MDNkM1x1MDNkNCcsCisgICAgICAgIHUnMTJfXHUwMGE4XHUwMzAxXHUwM2QyXHUwMzAxXHUwM2QyXHUwMzA4JywgICAgIyA9PSBORkQodSdcdTAzODVcdTAzZDNcdTAzZDQnKQorICAgICAgICB1JzEzX1x1MDAyMFx1MDMwOFx1MDMwMVx1MDM4ZVx1MDNhYicsICAgICAgICAgICMgPT0gTkZLQyh1J1x1MDM4NVx1MDNkM1x1MDNkNCcpCisgICAgICAgIHUnMTRfXHUxZTliXHUxZmMxXHUxZmNkXHUxZmNlXHUxZmNmXHUxZmRkXHUxZmRlXHUxZmRmXHUxZmVkJywKKworICAgICAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBmbiwgTkZDKGZuKSBhbmQgTkZLQyhmbikgYWxsIGRpZmZlcmVudHMKKyAgICAgICAgdScxNV9cdTFmZWVcdTFmZmRcdWZhZDEnLAorICAgICAgICB1JzE2X1x1MjAwMFx1MjAwMFx1MjAwMEEnLAorICAgICAgICB1JzE3X1x1MjAwMVx1MjAwMVx1MjAwMUEnLAorICAgICAgICB1JzE4X1x1MjAwM1x1MjAwM1x1MjAwM0EnLCAjID09IE5GQyh1J1x1MjAwMVx1MjAwMVx1MjAwMUEnKQorICAgICAgICB1JzE5X1x1MDAyMFx1MDAyMFx1MDAyMEEnLCAjIHUnXHUwMDIwJyA9PSB1JyAnID09IE5GS0ModSdcdTIwMDAnKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgTkZLQyh1J1x1MjAwMScpID09IE5GS0ModSdcdTIwMDMnKQorXSkKKworCisjIElzIGl0IFVuaWNvZGUtZnJpZW5kbHk/CitpZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKKyAgICBmc2VuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIG9yIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKQorICAgIHRyeToKKyAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgbmFtZS5lbmNvZGUoZnNlbmNvZGluZykKKyAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib25seSBOVCsgYW5kIHN5c3RlbXMgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmljb2RlLWZyaWVuZGx5IGZpbGVzeXN0ZW0gZW5jb2RpbmciKQorCisKICMgRGVzdHJveSBkaXJlY3RvcnkgZGlybmFtZSBhbmQgYWxsIGZpbGVzIHVuZGVyIGl0LCB0byBvbmUgbGV2ZWwuCiBkZWYgZGVsdHJlZShkaXJuYW1lKToKICAgICAjIERvbid0IGhpZGUgbGVnaXRpbWF0ZSBlcnJvcnM6ICBpZiBvbmUgb2YgdGhlc2Ugc3Vja2VycyBleGlzdHMsIGl0J3MKQEAgLTI3LDM1ICs2Myw0NSBAQAogICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihkaXJuYW1lLCBmbmFtZSkpCiAgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCiAKKwogY2xhc3MgVW5pY29kZUZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZmlsZXMgPSBbb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sIGYpIGZvciBmIGluIGZpbGVuYW1lc10KKyAgICBmaWxlcyA9IHNldChmaWxlbmFtZXMpCisgICAgbm9ybWFsX2Zvcm0gPSBOb25lCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcworICAgICAgICBmaWxlcyA9IHNldCgpCiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6Ci0gICAgICAgICAgICBmID0gb3BlbihuYW1lLCAndycpCi0gICAgICAgICAgICBmLndyaXRlKChuYW1lKydcbicpLmVuY29kZSgidXRmLTgiKSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLm5vcm0obmFtZSkpCisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoKG5hbWUrJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQogICAgICAgICAgICAgb3Muc3RhdChuYW1lKQorICAgICAgICAgICAgZmlsZXMuYWRkKG5hbWUpCisgICAgICAgIHNlbGYuZmlsZXMgPSBmaWxlcwogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBkZWx0cmVlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKKyAgICBkZWYgbm9ybShzZWxmLCBzKToKKyAgICAgICAgaWYgc2VsZi5ub3JtYWxfZm9ybSBhbmQgaXNpbnN0YW5jZShzLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoc2VsZi5ub3JtYWxfZm9ybSwgcykKKyAgICAgICAgcmV0dXJuIHMKKwogICAgIGRlZiBfYXBwbHlfZmFpbHVyZShzZWxmLCBmbiwgZmlsZW5hbWUsIGV4cGVjdGVkX2V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZm5faW5fZXhjZXB0aW9uID0gVHJ1ZSk6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RlZF9leGNlcHRpb24pIGFzIGM6CiAgICAgICAgICAgICBmbihmaWxlbmFtZSkKLSAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCJFeHBlY3RlZCB0byBmYWlsIGNhbGxpbmcgJyVzKCVyKSciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSkpCi0gICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb24sIGRldGFpbHM6Ci0gICAgICAgICAgICBpZiBjaGVja19mbl9pbl9leGNlcHRpb24gYW5kIGRldGFpbHMuZmlsZW5hbWUgIT0gZmlsZW5hbWU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoIkZ1bmN0aW9uICclcyglcikgZmFpbGVkIHdpdGggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuZmlsZW5hbWUpKQorICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQorICAgICAgICAjIHRoZSAiZmlsZW5hbWUiIGV4Y2VwdGlvbiBhdHRyaWJ1dGUgbWF5IGJlIGVuY29kZWQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGNfZmlsZW5hbWUsIHN0cik6CisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIGlmIGNoZWNrX2ZuX2luX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2ZpbGVuYW1lLCBmaWxlbmFtZSwgIkZ1bmN0aW9uICclcyglcikgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbi5fX25hbWVfXywgZmlsZW5hbWUsIGV4Y19maWxlbmFtZSkpCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlcyhzZWxmKToKICAgICAgICAgIyBQYXNzIG5vbi1leGlzdGluZyBVbmljb2RlIGZpbGVuYW1lcyBhbGwgb3ZlciB0aGUgcGxhY2UuCkBAIC03NiwzOSArMTIyLDg5IEBACiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIG9zLnN0YXQobmFtZSkKIAorICAgICMgU2tpcCB0aGUgdGVzdCBvbiBkYXJ3aW4sIGJlY2F1c2UgZGFyd2luIGRvZXMgbm9ybWFsaXplIHRoZSBmaWxlbmFtZSB0bworICAgICMgTkZEIChhIHZhcmlhbnQgb2YgVW5pY29kZSBORkQgZm9ybSkuIE5vcm1hbGl6ZSB0aGUgZmlsZW5hbWUgdG8gTkZDLCBORktDLAorICAgICMgTkZLRCBpbiBQeXRob24gaXMgdXNlbGVzcywgYmVjYXVzZSBkYXJ3aW4gd2lsbCBub3JtYWxpemUgaXQgbGF0ZXIgYW5kIHNvCisgICAgIyBvcGVuKCksIG9zLnN0YXQoKSwgZXRjLiBkb24ndCByYWlzZSBhbnkgZXhjZXB0aW9uLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAnaXJyZXZlbGFudCB0ZXN0IG9uIE1hYyBPUyBYJykKKyAgICBkZWYgdGVzdF9ub3JtYWxpemUoc2VsZik6CisgICAgICAgIGZpbGVzID0gc2V0KGYgZm9yIGYgaW4gc2VsZi5maWxlcyBpZiBpc2luc3RhbmNlKGYsIHVuaWNvZGUpKQorICAgICAgICBvdGhlcnMgPSBzZXQoKQorICAgICAgICBmb3IgbmYgaW4gc2V0KFsnTkZDJywgJ05GRCcsICdORktDJywgJ05GS0QnXSk6CisgICAgICAgICAgICBvdGhlcnMgfD0gc2V0KG5vcm1hbGl6ZShuZiwgZmlsZSkgZm9yIGZpbGUgaW4gZmlsZXMpCisgICAgICAgIG90aGVycyAtPSBmaWxlcworICAgICAgICBmb3IgbmFtZSBpbiBvdGhlcnM6CisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9wZW4sIG5hbWUsIElPRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnN0YXQsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmNoZGlyLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5ybWRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MucmVtb3ZlLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgIyBsaXN0ZGlyIG1heSBhcHBlbmQgYSB3aWxkY2FyZCB0byB0aGUgZmlsZW5hbWUsIHNvIGRvbnQgY2hlY2sKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MubGlzdGRpciwgbmFtZSwgT1NFcnJvciwgRmFsc2UpCisKKyAgICAjIFNraXAgdGhlIHRlc3Qgb24gZGFyd2luLCBiZWNhdXNlIGRhcndpbiB1c2VzIGEgbm9ybWFsaXphdGlvbiBkaWZmZXJlbnQKKyAgICAjIHRoYW4gUHl0aG9uIE5GRCBub3JtYWxpemF0aW9uOiBmaWxlbmFtZXMgYXJlIGRpZmZlcmVudCBldmVuIGlmIHdlIHVzZQorICAgICMgUHl0aG9uIE5GRCBub3JtYWxpemF0aW9uLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAnaXJyZXZlbGFudCB0ZXN0IG9uIE1hYyBPUyBYJykKICAgICBkZWYgdGVzdF9saXN0ZGlyKHNlbGYpOgorICAgICAgICBzZjAgPSBzZXQoc2VsZi5maWxlcykKICAgICAgICAgZjEgPSBvcy5saXN0ZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGYyID0gb3MubGlzdGRpcih1bmljb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkpCi0gICAgICAgIHNmMiA9IHNldCh1IlxcIi5qb2luKCh1bmljb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBmKSkKLSAgICAgICAgICAgICAgICAgIGZvciBmIGluIGYyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChsZW4oZjEpLCBsZW4oc2VsZi5maWxlcykpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNmMiwgc2V0KHNlbGYuZmlsZXMpKQorICAgICAgICBzZjIgPSBzZXQob3MucGF0aC5qb2luKHVuaWNvZGUodGVzdF9zdXBwb3J0LlRFU1RGTiksIGYpIGZvciBmIGluIGYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNmMCwgc2YyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmMSksIGxlbihmMikpCiAKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6Ci0gICAgICAgICAgICBvcy5yZW5hbWUobmFtZSwidG1wIikKLSAgICAgICAgICAgIG9zLnJlbmFtZSgidG1wIixuYW1lKQorICAgICAgICAgICAgb3MucmVuYW1lKG5hbWUsICJ0bXAiKQorICAgICAgICAgICAgb3MucmVuYW1lKCJ0bXAiLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sdSdHclx4ZmNceGRmLVx1NjZlOFx1NjZlOVx1NjZlYicpCisgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0dyXHhmY1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJykKICAgICAgICAgZmlsZW5hbWUgPSB1J1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJwogICAgICAgICBvbGR3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCiAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAndycpCi0gICAgICAgIGYud3JpdGUoKGZpbGVuYW1lICsgJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgb3MuYWNjZXNzKGZpbGVuYW1lLG9zLlJfT0spCi0gICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKLSAgICAgICAgb3MuY2hkaXIob2xkd2QpCi0gICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoKGZpbGVuYW1lICsgJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICAgICAgb3MuYWNjZXNzKGZpbGVuYW1lLG9zLlJfT0spCisgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGR3ZCkKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisKKworY2xhc3MgVW5pY29kZU5GQ0ZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORkMnCisKKworY2xhc3MgVW5pY29kZU5GREZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORkQnCisKKworY2xhc3MgVW5pY29kZU5GS0NGaWxlVGVzdHMoVW5pY29kZUZpbGVUZXN0cyk6CisgICAgbm9ybWFsX2Zvcm0gPSAnTkZLQycKKworCitjbGFzcyBVbmljb2RlTkZLREZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORktEJworCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6Ci0gICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVW5pY29kZUZpbGVUZXN0cykKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgIFVuaWNvZGVGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GREZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORktDRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCisgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICBkZWx0cmVlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCAzZjIzYWY1Li44OGIzMTM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMzEsNyArMzEsNyBAQAogICAgIGluaGVyaXRhbmNlIGhpZXJhcmNoeSkiIiIKIAogICAgIGRlZiB0ZXN0X2J1aWx0aW5zX25ld19zdHlsZShzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoRXhjZXB0aW9uLCBvYmplY3QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCkpCiAKICAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCiAgICAgZGVmIHZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2Uoc2VsZiwgaW5zKToKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgICAgICAgICBsYXN0X2V4YyA9IGdldGF0dHIoX19idWlsdGluX18sIHN1cGVyY2xhc3NfbmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhc2UgY2xhc3MgJXMgbm90IGEgYnVpbHQtaW4iICUgc3VwZXJjbGFzc19uYW1lKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN1cGVyY2xhc3NfbmFtZSBpbiBleGNfc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdXBlcmNsYXNzX25hbWUsIGV4Y19zZXQpCiAgICAgICAgICAgICBleGNfc2V0LmRpc2NhcmQoc3VwZXJjbGFzc19uYW1lKQogICAgICAgICAgICAgc3VwZXJjbGFzc2VzID0gW10gICMgTG9vcCB3aWxsIGluc2VydCBiYXNlIGV4Y2VwdGlvbgogICAgICAgICAgICAgbGFzdF9kZXB0aCA9IDAKQEAgLTc4LDI3ICs3OCwyNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgbGFzdF9kZXB0aCA+IGRlcHRoOgogICAgICAgICAgICAgICAgICAgICB3aGlsZSBzdXBlcmNsYXNzZXNbLTFdWzBdID49IGRlcHRoOgogICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJjbGFzc2VzLnBvcCgpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzc3ViY2xhc3MoZXhjLCBzdXBlcmNsYXNzZXNbLTFdWzFdKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhleGMsIHN1cGVyY2xhc3Nlc1stMV1bMV0pLAogICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYSBzdWJjbGFzcyBvZiAlcyIgJSAoZXhjLl9fbmFtZV9fLAogICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzZXNbLTFdWzFdLl9fbmFtZV9fKSkKICAgICAgICAgICAgICAgICB0cnk6ICAjIFNvbWUgZXhjZXB0aW9ucyByZXF1aXJlIGFyZ3VtZW50czsganVzdCBza2lwIHRoZW0KICAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJpZnlfaW5zdGFuY2VfaW50ZXJmYWNlKGV4YygpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZXhjX25hbWUgaW4gZXhjX3NldCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4Y19uYW1lLCBleGNfc2V0KQogICAgICAgICAgICAgICAgIGV4Y19zZXQuZGlzY2FyZChleGNfbmFtZSkKICAgICAgICAgICAgICAgICBsYXN0X2V4YyA9IGV4YwogICAgICAgICAgICAgICAgIGxhc3RfZGVwdGggPSBkZXB0aAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaW5oZXJpdGFuY2VfdHJlZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbihleGNfc2V0KSwgMCwgIiVzIG5vdCBhY2NvdW50ZWQgZm9yIiAlIGV4Y19zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4Y19zZXQpLCAwLCAiJXMgbm90IGFjY291bnRlZCBmb3IiICUgZXhjX3NldCkKIAogICAgIGludGVyZmFjZV90ZXN0cyA9ICgibGVuZ3RoIiwgImFyZ3MiLCAibWVzc2FnZSIsICJzdHIiLCAidW5pY29kZSIsICJyZXByIiwKICAgICAgICAgICAgICJpbmRleGluZyIpCiAKICAgICBkZWYgaW50ZXJmYWNlX3Rlc3RfZHJpdmVyKHNlbGYsIHJlc3VsdHMpOgogICAgICAgICBmb3IgdGVzdF9uYW1lLCAoZ2l2ZW4sIGV4cGVjdGVkKSBpbiB6aXAoc2VsZi5pbnRlcmZhY2VfdGVzdHMsIHJlc3VsdHMpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZ2l2ZW4sIGV4cGVjdGVkLCAiJXM6ICVzICE9ICVzIiAlICh0ZXN0X25hbWUsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3RlZCwgIiVzOiAlcyAhPSAlcyIgJSAodGVzdF9uYW1lLAogICAgICAgICAgICAgICAgIGdpdmVuLCBleHBlY3RlZCkpCiAKICAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCkBAIC0yMTUsMjggKzIxNSwxOSBAQAogICAgICAgICAgICAgd2FybmluZ3MucmVzZXR3YXJuaW5ncygpCiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiKQogICAgICAgICAgICAgc3RyX2V4YyA9ICJzcGFtIgotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RhbmRhcmRFcnJvcgogICAgICAgICAgICAgICAgIGV4Y2VwdCBzdHJfZXhjOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F0Y2hpbmcgYSBzdHJpbmcgZXhjZXB0aW9uIGRpZCBub3QgcmFpc2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXByZWNhdGlvbldhcm5pbmciKQorCiAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGV2ZW4gaWYgdGhlIHN0cmluZyBleGNlcHRpb24gaXMgbGlzdGVkIGluIGEgdHVwbGUKICAgICAgICAgICAgICMgdGhhdCBhIHdhcm5pbmcgaXMgcmFpc2VkLgotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RhbmRhcmRFcnJvcgogICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXNzZXJ0aW9uRXJyb3IsIHN0cl9leGMpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBTdGFuZGFyZEVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F0Y2hpbmcgYSBzdHJpbmcgZXhjZXB0aW9uIHNwZWNpZmllZCBpbiBhIHR1cGxlIGRpZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCByYWlzZSBEZXByZWNhdGlvbldhcm5pbmciKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZmIxMGZmZS4uNmM4MzgxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTYsNiArNiw3IEBACiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZVRlc3RzCiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzCiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBlcnNpc3RlbnRQaWNrbGVyVGVzdHMKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzCiAKIGNsYXNzIFBpY2tsZVRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMsIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMpOgogCkBAIC02MCwxMSArNjEsMTggQEAKICAgICAgICAgdSA9IFBlcnNVbnBpY2tsZXIoZikKICAgICAgICAgcmV0dXJuIHUubG9hZCgpCiAKK2NsYXNzIFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyhBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyk6CisKKyAgICBwaWNrbGVyX2NsYXNzID0gcGlja2xlLlBpY2tsZXIKKyAgICB1bnBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuVW5waWNrbGVyCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIFBpY2tsZVRlc3RzLAogICAgICAgICBQaWNrbGVyVGVzdHMsCi0gICAgICAgIFBlcnNQaWNrbGVyVGVzdHMKKyAgICAgICAgUGVyc1BpY2tsZXJUZXN0cywKKyAgICAgICAgUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAogICAgICkKICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QocGlja2xlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9waXBlcy5weQppbmRleCAwNzJkMDIzLi5jOGI4YmUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGlwZXMucHkKQEAgLTIsMTAgKzIsMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluaywgcmVhcF9jaGlsZHJlbgogCiBpZiBvcy5uYW1lICE9ICdwb3NpeCc6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoJ3BpcGVzIG1vZHVsZSBvbmx5IHdvcmtzIG9uIHBvc2l4JykKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncGlwZXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gcG9zaXgnKQogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiAKQEAgLTIzLDQzICsyMyw1NSBAQAogICAgICAgICBmID0gdC5vcGVuKFRFU1RGTiwgJ3cnKQogICAgICAgICBmLndyaXRlKCdoZWxsbyB3b3JsZCAjMScpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOKS5yZWFkKCksICdIRUxMTyBXT1JMRCAjMScpCisgICAgICAgIHdpdGggb3BlbihURVNURk4pIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnSEVMTE8gV09STEQgIzEnKQogCiAgICAgZGVmIHRlc3RTaW1wbGVQaXBlMihzZWxmKToKLSAgICAgICAgZmlsZShURVNURk4sICd3Jykud3JpdGUoJ2hlbGxvIHdvcmxkICMyJykKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnaGVsbG8gd29ybGQgIzInKQogICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQogICAgICAgICB0LmFwcGVuZChzX2NvbW1hbmQgKyAnIDwgJElOID4gJE9VVCcsIHBpcGVzLkZJTEVJTl9GSUxFT1VUKQogICAgICAgICB0LmNvcHkoVEVTVEZOLCBURVNURk4yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOMikucmVhZCgpLCAnSEVMTE8gV09STEQgIzInKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCiAKICAgICBkZWYgdGVzdFNpbXBsZVBpcGUzKHNlbGYpOgotICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZSgnaGVsbG8gd29ybGQgIzInKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdoZWxsbyB3b3JsZCAjMicpCiAgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCiAgICAgICAgIHQuYXBwZW5kKHNfY29tbWFuZCArICcgPCAkSU4nLCBwaXBlcy5GSUxFSU5fU1RET1VUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQub3BlbihURVNURk4sICdyJykucmVhZCgpLCAnSEVMTE8gV09STEQgIzInKQorICAgICAgICB3aXRoIHQub3BlbihURVNURk4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCiAKICAgICBkZWYgdGVzdEVtcHR5UGlwZWxpbmUxKHNlbGYpOgogICAgICAgICAjIGNvcHkgdGhyb3VnaCBlbXB0eSBwaXBlCiAgICAgICAgIGQgPSAnZW1wdHkgcGlwZWxpbmUgdGVzdCBDT1BZJwotICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZShkKQotICAgICAgICBmaWxlKFRFU1RGTjIsICd3Jykud3JpdGUoJycpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJycpCiAgICAgICAgIHQ9cGlwZXMuVGVtcGxhdGUoKQogICAgICAgICB0LmNvcHkoVEVTVEZOLCBURVNURk4yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOMikucmVhZCgpLCBkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCiAKICAgICBkZWYgdGVzdEVtcHR5UGlwZWxpbmUyKHNlbGYpOgogICAgICAgICAjIHJlYWQgdGhyb3VnaCBlbXB0eSBwaXBlCiAgICAgICAgIGQgPSAnZW1wdHkgcGlwZWxpbmUgdGVzdCBSRUFEJwotICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZShkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGQpCiAgICAgICAgIHQ9cGlwZXMuVGVtcGxhdGUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQub3BlbihURVNURk4sICdyJykucmVhZCgpLCBkKQorICAgICAgICB3aXRoIHQub3BlbihURVNURk4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCiAKICAgICBkZWYgdGVzdEVtcHR5UGlwZWxpbmUzKHNlbGYpOgogICAgICAgICAjIHdyaXRlIHRocm91Z2ggZW1wdHkgcGlwZQogICAgICAgICBkID0gJ2VtcHR5IHBpcGVsaW5lIHRlc3QgV1JJVEUnCiAgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCi0gICAgICAgIHQub3BlbihURVNURk4sICd3Jykud3JpdGUoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTikucmVhZCgpLCBkKQorICAgICAgICB3aXRoIHQub3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCiAKICAgICBkZWYgdGVzdFF1b3Rpbmcoc2VsZik6CiAgICAgICAgIHNhZmV1bnF1b3RlZCA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICdAJV8tKz06LC4vJwpAQCAtMTg2LDYgKzE5OCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2ltcGxlUGlwZVRlc3RzKQorICAgIHJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZy5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CmluZGV4IDNhOTU0Y2EuLjZmYjNmM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CkBAIC01MSw3ICs1MSw4IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNwYXRoCi0gICAgICAgIGNsZWFub3V0KHNlbGYucm9vdCkKKyAgICAgICAgaWYgc2VsZi5yb290OiAjIE9ubHkgY2xlYW4gaWYgdGhlIHRlc3Qgd2FzIGFjdHVhbGx5IHJ1bgorICAgICAgICAgICAgY2xlYW5vdXQoc2VsZi5yb290KQogCiAgICAgICAgICMgZGVsZXRlIGFsbCBtb2R1bGVzIGNvbmNlcm5pbmcgdGhlIHRlc3RlZCBoaWVhcmNoeQogICAgICAgICBpZiBzZWxmLnBrZ25hbWU6CkBAIC0xMDEsOSArMTAyLDYgQEAKICAgICAgICAgXQogICAgICAgICBzZWxmLm1raGllcihoaWVyKQogCi0gICAgICAgIGltcG9ydCB0MgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLl9fZG9jX18sICJkb2MgZm9yIHQyIikKLQogICAgICAgICBpbXBvcnQgdDIuc3ViCiAgICAgICAgIGltcG9ydCB0Mi5zdWIuc3Vic3ViCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuX19uYW1lX18sICJ0MiIpCkBAIC0xMjYsNyArMTI0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJzdWIuX19uYW1lX18sICJ0Mi5zdWIuc3Vic3ViIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuc3Vic3ViLl9fbmFtZV9fLCAidDIuc3ViLnN1YnN1YiIpCiAgICAgICAgIGZvciBuYW1lIGluIFsnc3BhbScsICdzdWInLCAnc3Vic3ViJywgJ3QyJ106Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobG9jYWxzKClbIm5hbWUiXSwgIkZhaWxlZCB0byBpbXBvcnQgJXMiICUgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NhbHMoKVsibmFtZSJdLCAiRmFpbGVkIHRvIGltcG9ydCAlcyIgJSBuYW1lKQogCiAgICAgICAgIGltcG9ydCB0Mi5zdWIKICAgICAgICAgaW1wb3J0IHQyLnN1Yi5zdWJzdWIKQEAgLTEzNiw3ICsxMzQsNyBAQAogCiAgICAgICAgIHMgPSAiIiIKICAgICAgICAgICAgIGZyb20gdDIgaW1wb3J0ICoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkaXIoKSwgWydzZWxmJywgJ3N1YiddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcigpLCBbJ3NlbGYnLCAnc3ViJ10pCiAgICAgICAgICAgICAiIiIKICAgICAgICAgc2VsZi5ydW5fY29kZShzKQogCkBAIC0yNTQsMjYgKzI1MiwzNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodGFzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCi0gICAgICAgIHNlbGYuZmFpbElmKHQ3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBmcm9tIHQ3IGltcG9ydCBzdWIgYXMgc3VicGFyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJwYXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKLSAgICAgICAgc2VsZi5mYWlsSWYodDcpCi0gICAgICAgIHNlbGYuZmFpbElmKHN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCiAgICAgICAgIGZyb20gdDcuc3ViIGltcG9ydCBzdWJzdWIgYXMgc3Vic3Vic3ViCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJzdWJzdWIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdzcGFtJ10pCi0gICAgICAgIHNlbGYuZmFpbElmKHQ3KQotICAgICAgICBzZWxmLmZhaWxJZihzdWIpCi0gICAgICAgIHNlbGYuZmFpbElmKHN1YnN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQogICAgICAgICBmcm9tIHQ3LnN1Yi5zdWJzdWIgaW1wb3J0IHNwYW0gYXMgaGFtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFtLCAxKQotICAgICAgICBzZWxmLmZhaWxJZih0NykKLSAgICAgICAgc2VsZi5mYWlsSWYoc3ViKQotICAgICAgICBzZWxmLmZhaWxJZihzdWJzdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnN1YikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0Xzgoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICAgICAgICAgKCJ0OCIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDggX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiJ2RvYyBmb3IgdDgnIiksCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisKKyAgICAgICAgaW1wb3J0IHQ4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDguX19kb2NfXywgImRvYyBmb3IgdDgiKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKaW5kZXggNWUwMmIxYi4uMzBkNDhjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTIyLDcgKzIyLDggQEAKICAgICAgICAgc2VsZi5wYWNrYWdlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lKQogICAgICAgICBvcy5ta2RpcihzZWxmLnBhY2thZ2VfZGlyKQotICAgICAgICBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2VfZGlyLCAnX19pbml0X18nK29zLmV4dHNlcCsncHknKSwgJ3cnKQorICAgICAgICBvcGVuKG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGlyLCAnX19pbml0X18nK29zLmV4dHNlcCsncHknKSwgJ3cnKS5jbG9zZSgpCiAgICAgICAgIHNlbGYubW9kdWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlX2RpciwgJ2Zvbycrb3MuZXh0c2VwKydweScpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC01Miw3ICs1Myw3IEBACiAgICAgICAgIHRyeTogX19pbXBvcnRfXyhzZWxmLm1vZHVsZV9uYW1lKQogICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6IHBhc3MKICAgICAgICAgZWxzZTogcmFpc2UgUnVudGltZUVycm9yLCAnRmFpbGVkIHRvIGluZHVjZSBTeW50YXhFcnJvcicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubW9kdWxlX25hbWUgbm90IGluIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYubW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc3lzLm1vZHVsZXNbc2VsZi5wYWNrYWdlX25hbWVdLCAnZm9vJykpCiAKICAgICAgICAgIyAuLi5tYWtlIHVwIGEgdmFyaWFibGUgbmFtZSB0aGF0IGlzbid0IGJvdW5kIGluIF9fYnVpbHRpbnNfXwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weSBiL0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkKaW5kZXggOThkNjkxMS4uMWFlNTg4OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsYXRmb3JtLnB5CkBAIC00OCwyNSArNDgsNzMgQEAKICAgICBkZWYgdGVzdF9wcm9jZXNzb3Ioc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLnByb2Nlc3NvcigpCiAKLSAgICBkZWYgdGVzdF9weXRob25faW1wbGVtZW50YXRpb24oc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNhdmVfdmVyc2lvbiA9IHN5cy52ZXJzaW9uCisgICAgICAgIHNlbGYuc2F2ZV9zdWJ2ZXJzaW9uID0gc3lzLnN1YnZlcnNpb24KKyAgICAgICAgc2VsZi5zYXZlX3BsYXRmb3JtID0gc3lzLnBsYXRmb3JtCiAKLSAgICBkZWYgdGVzdF9weXRob25fdmVyc2lvbihzZWxmKToKLSAgICAgICAgcmVzMSA9IHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkKLSAgICAgICAgcmVzMiA9IHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uX3R1cGxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMxLCAiLiIuam9pbihyZXMyKSkKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy52ZXJzaW9uID0gc2VsZi5zYXZlX3ZlcnNpb24KKyAgICAgICAgc3lzLnN1YnZlcnNpb24gPSBzZWxmLnNhdmVfc3VidmVyc2lvbgorICAgICAgICBzeXMucGxhdGZvcm0gPSBzZWxmLnNhdmVfcGxhdGZvcm0KIAotICAgIGRlZiB0ZXN0X3B5dGhvbl9icmFuY2goc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLnB5dGhvbl9icmFuY2goKQorICAgIGRlZiB0ZXN0X3N5c192ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIE9sZCB0ZXN0LgorICAgICAgICBmb3IgaW5wdXQsIG91dHB1dCBpbiAoCisgICAgICAgICAgICAoJzIuNC4zICgjMSwgSnVuIDIxIDIwMDYsIDEzOjU0OjIxKSBcbltHQ0MgMy4zLjQgKHByZSAzLjMuNSAyMDA0MDgwOSldJywKKyAgICAgICAgICAgICAoJ0NQeXRob24nLCAnMi40LjMnLCAnJywgJycsICcxJywgJ0p1biAyMSAyMDA2IDEzOjU0OjIxJywgJ0dDQyAzLjMuNCAocHJlIDMuMy41IDIwMDQwODA5KScpKSwKKyAgICAgICAgICAgICgnSXJvblB5dGhvbiAxLjAuNjA4MTYgb24gLk5FVCAyLjAuNTA3MjcuNDInLAorICAgICAgICAgICAgICgnSXJvblB5dGhvbicsICcxLjAuNjA4MTYnLCAnJywgJycsICcnLCAnJywgJy5ORVQgMi4wLjUwNzI3LjQyJykpLAorICAgICAgICAgICAgKCdJcm9uUHl0aG9uIDEuMCAoMS4wLjYxMDA1LjE5NzcpIG9uIC5ORVQgMi4wLjUwNzI3LjQyJywKKyAgICAgICAgICAgICAoJ0lyb25QeXRob24nLCAnMS4wLjAnLCAnJywgJycsICcnLCAnJywgJy5ORVQgMi4wLjUwNzI3LjQyJykpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgYnJhbmNoIGFuZCByZXZpc2lvbiBhcmUgbm90ICJwYXJzZWQiLCBidXQgZmV0Y2hlZAorICAgICAgICAgICAgIyBmcm9tIHN5cy5zdWJ2ZXJzaW9uLiAgSWdub3JlIHRoZW0KKyAgICAgICAgICAgIChuYW1lLCB2ZXJzaW9uLCBicmFuY2gsIHJldmlzaW9uLCBidWlsZG5vLCBidWlsZGRhdGUsIGNvbXBpbGVyKSBcCisgICAgICAgICAgICAgICAgICAgPSBwbGF0Zm9ybS5fc3lzX3ZlcnNpb24oaW5wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIChuYW1lLCB2ZXJzaW9uLCAnJywgJycsIGJ1aWxkbm8sIGJ1aWxkZGF0ZSwgY29tcGlsZXIpLCBvdXRwdXQpCiAKLSAgICBkZWYgdGVzdF9weXRob25fcmV2aXNpb24oc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLnB5dGhvbl9yZXZpc2lvbigpCi0KLSAgICBkZWYgdGVzdF9weXRob25fYnVpbGQoc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLnB5dGhvbl9idWlsZCgpCi0KLSAgICBkZWYgdGVzdF9weXRob25fY29tcGlsZXIoc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLnB5dGhvbl9jb21waWxlcigpCisgICAgICAgICMgVGVzdHMgZm9yIHB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCBweXRob25fdmVyc2lvbigpLCBweXRob25fYnJhbmNoKCksCisgICAgICAgICMgcHl0aG9uX3JldmlzaW9uKCksIHB5dGhvbl9idWlsZCgpLCBhbmQgcHl0aG9uX2NvbXBpbGVyKCkuCisgICAgICAgIHN5c192ZXJzaW9ucyA9IHsKKyAgICAgICAgICAgICgiMi42LjEgKHIyNjE6Njc1MTUsIERlYyAgNiAyMDA4LCAxNToyNjowMCkgXG5bR0NDIDQuMC4xIChBcHBsZSBDb21wdXRlciwgSW5jLiBidWlsZCA1MzcwKV0iLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICd0YWdzL3IyNjEnLCAnNjc1MTUnKSwgc2VsZi5zYXZlX3BsYXRmb3JtKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiQ1B5dGhvbiIsICIyLjYuMSIsICJ0YWdzL3IyNjEiLCAiNjc1MTUiLAorICAgICAgICAgICAgICAgICAoJ3IyNjE6Njc1MTUnLCAnRGVjICA2IDIwMDggMTU6MjY6MDAnKSwKKyAgICAgICAgICAgICAgICAgJ0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM3MCknKSwKKyAgICAgICAgICAgICgiSXJvblB5dGhvbiAyLjAgKDIuMC4wLjApIG9uIC5ORVQgMi4wLjUwNzI3LjMwNTMiLCBOb25lLCAiY2xpIikKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAoIklyb25QeXRob24iLCAiMi4wLjAiLCAiIiwgIiIsICgiIiwgIiIpLAorICAgICAgICAgICAgICAgICAiLk5FVCAyLjAuNTA3MjcuMzA1MyIpLAorICAgICAgICAgICAgKCIyLjUgKHRydW5rOjYxMDcsIE1hciAyNiAyMDA5LCAxMzowMjoxOCkgXG5bSmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0gKFwiQXBwbGUgQ29tcHV0ZXIsIEluYy5cIildIiwKKyAgICAgICAgICAgICgnSnl0aG9uJywgJ3RydW5rJywgJzYxMDcnKSwgImphdmExLjUuMF8xNiIpCisgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKCJKeXRob24iLCAiMi41LjAiLCAidHJ1bmsiLCAiNjEwNyIsCisgICAgICAgICAgICAgICAgICgndHJ1bms6NjEwNycsICdNYXIgMjYgMjAwOScpLCAiamF2YTEuNS4wXzE2IiksCisgICAgICAgICAgICAoIjIuNS4yICg2MzM3OCwgTWFyIDI2IDIwMDksIDE4OjAzOjI5KVxuW1B5UHkgMS4wLjBdIiwKKyAgICAgICAgICAgICAoJ1B5UHknLCAndHJ1bmsnLCAnNjMzNzgnKSwgc2VsZi5zYXZlX3BsYXRmb3JtKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiUHlQeSIsICIyLjUuMiIsICJ0cnVuayIsICI2MzM3OCIsICgnNjMzNzgnLCAnTWFyIDI2IDIwMDknKSwKKyAgICAgICAgICAgICAgICAgIiIpCisgICAgICAgICAgICB9CisgICAgICAgIGZvciAodmVyc2lvbl90YWcsIHN1YnZlcnNpb24sIHN5c19wbGF0Zm9ybSksIGluZm8gaW4gXAorICAgICAgICAgICAgICAgIHN5c192ZXJzaW9ucy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHN5cy52ZXJzaW9uID0gdmVyc2lvbl90YWcKKyAgICAgICAgICAgIGlmIHN1YnZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHN5cywgInN1YnZlcnNpb24iKToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5zdWJ2ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5zdWJ2ZXJzaW9uID0gc3VidmVyc2lvbgorICAgICAgICAgICAgaWYgc3lzX3BsYXRmb3JtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHN5c19wbGF0Zm9ybQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgaW5mb1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSwgaW5mb1sxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2JyYW5jaCgpLCBpbmZvWzJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fcmV2aXNpb24oKSwgaW5mb1szXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2J1aWxkKCksIGluZm9bNF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9jb21waWxlcigpLCBpbmZvWzVdKQogCiAgICAgZGVmIHRlc3Rfc3lzdGVtX2FsaWFzKHNlbGYpOgogICAgICAgICByZXMgPSBwbGF0Zm9ybS5zeXN0ZW1fYWxpYXMoCkBAIC03NywxMiArMTI1LDMzIEBACiAKICAgICBkZWYgdGVzdF91bmFtZShzZWxmKToKICAgICAgICAgcmVzID0gcGxhdGZvcm0udW5hbWUoKQotICAgICAgICBzZWxmLmFzc2VydF8oYW55KHJlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwgIndpbmRvd3Mgb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF91bmFtZV93aW4zMl9BUkNISVRFVzY0MzIoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzg2MDogbWFrZSBzdXJlIHdlIGdldCBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgY29ycmVjdCB2YXJpYWJsZQorICAgICAgICAjIG9uIDY0IGJpdCBXaW5kb3dzOiBpZiBQUk9DRVNTT1JfQVJDSElURVc2NDMyIGV4aXN0cyB3ZSBzaG91bGQgYmUKKyAgICAgICAgIyB1c2luZyBpdCwgcGVyCisgICAgICAgICMgaHR0cDovL2Jsb2dzLm1zZG4uY29tL2RhdmlkLndhbmcvYXJjaGl2ZS8yMDA2LzAzLzI2L0hPV1RPLURldGVjdC1Qcm9jZXNzLUJpdG5lc3MuYXNweAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52aXJvbjoKKyAgICAgICAgICAgICAgICBpZiAnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMicgaW4gZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInXQorICAgICAgICAgICAgICAgIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnXSA9ICdmb28nCisgICAgICAgICAgICAgICAgcGxhdGZvcm0uX3VuYW1lX2NhY2hlID0gTm9uZQorICAgICAgICAgICAgICAgIHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSwgcHJvY2Vzc29yID0gcGxhdGZvcm0udW5hbWUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjaGluZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiddID0gJ2JhcicKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5fdW5hbWVfY2FjaGUgPSBOb25lCisgICAgICAgICAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNoaW5lLCAnYmFyJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHBsYXRmb3JtLl91bmFtZV9jYWNoZSA9IE5vbmUKIAogICAgIGRlZiB0ZXN0X2phdmFfdmVyKHNlbGYpOgogICAgICAgICByZXMgPSBwbGF0Zm9ybS5qYXZhX3ZlcigpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnamF2YSc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oYWxsKHJlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKHJlcykpCiAKICAgICBkZWYgdGVzdF93aW4zMl92ZXIoc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLndpbjMyX3ZlcigpCkBAIC0xMDcsMzcgKzE3Niw0MyBAQAogICAgICAgICAgICAgICAgICAgICByZWFsX3ZlciA9IGxuLnN0cmlwKCkuc3BsaXQoKVstMV0KICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGZkLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHJlYWxfdmVyIGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNbMF0sIHJlYWxfdmVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWFsX3ZlciBpcyBOb25lKQorICAgICAgICAgICAgcmVzdWx0X2xpc3QgPSByZXNbMF0uc3BsaXQoJy4nKQorICAgICAgICAgICAgZXhwZWN0X2xpc3QgPSByZWFsX3Zlci5zcGxpdCgnLicpCisgICAgICAgICAgICBsZW5fZGlmZiA9IGxlbihyZXN1bHRfbGlzdCkgLSBsZW4oZXhwZWN0X2xpc3QpCisgICAgICAgICAgICAjIE9uIFNub3cgTGVvcGFyZCwgc3dfdmVycyByZXBvcnRzIDEwLjYuMCBhcyAxMC42CisgICAgICAgICAgICBpZiBsZW5fZGlmZiA+IDA6CisgICAgICAgICAgICAgICAgZXhwZWN0X2xpc3QuZXh0ZW5kKFsnMCddICogbGVuX2RpZmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdF9saXN0LCBleHBlY3RfbGlzdCkKIAogICAgICAgICAgICAgIyByZXNbMV0gY2xhaW1zIHRvIGNvbnRhaW4KICAgICAgICAgICAgICMgKHZlcnNpb24sIGRldl9zdGFnZSwgbm9uX3JlbGVhc2VfdmVyc2lvbikKICAgICAgICAgICAgICMgVGhhdCBpbmZvcm1hdGlvbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNbMV0sICgnJywgJycsICcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzFdLCAoJycsICcnLCAnJykpCiAKICAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzWzJdLCAnaTM4NicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdpMzg2JykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzWzJdLCAnUG93ZXJQQycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdQb3dlclBDJykKIAogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICBkZWYgdGVzdF9tYWNfdmVyX3dpdGhfZm9yayhzZWxmKToKLSAgICAgICAgICAgICMgSXNzdWU3ODk1OiBwbGF0Zm9ybS5tYWNfdmVyKCkgY3Jhc2hlcyB3aGVuIHVzaW5nIGZvcmsgd2l0aG91dCBleGVjCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgZml4IGZvciB0aGF0IGlzc3VlIHdvcmtzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBwaWQgPT0gMDoKLSAgICAgICAgICAgICAgICAjIGNoaWxkCi0gICAgICAgICAgICAgICAgaW5mbyA9IHBsYXRmb3JtLm1hY192ZXIoKQotICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAiT1NYIG9ubHkgdGVzdCIpCisgICAgZGVmIHRlc3RfbWFjX3Zlcl93aXRoX2Zvcmsoc2VsZik6CisgICAgICAgICMgSXNzdWU3ODk1OiBwbGF0Zm9ybS5tYWNfdmVyKCkgY3Jhc2hlcyB3aGVuIHVzaW5nIGZvcmsgd2l0aG91dCBleGVjCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIGZpeCBmb3IgdGhhdCBpc3N1ZSB3b3Jrcy4KKyAgICAgICAgIworICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICBpbmZvID0gcGxhdGZvcm0ubWFjX3ZlcigpCisgICAgICAgICAgICBvcy5fZXhpdCgwKQogCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgcGFyZW50Ci0gICAgICAgICAgICAgICAgY3BpZCwgc3RzID0gb3Mud2FpdHBpZChwaWQsIDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BpZCwgcGlkKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cywgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcGFyZW50CisgICAgICAgICAgICBjcGlkLCBzdHMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3BpZCwgcGlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHMsIDApCiAKICAgICBkZWYgdGVzdF9kaXN0KHNlbGYpOgogICAgICAgICByZXMgPSBwbGF0Zm9ybS5kaXN0KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CmluZGV4IDQ3NjMwZGMuLmU2ZTBmODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQpAQCAtOSw3ICs5LDcgQEAKIAogIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKIFRFU1REQVRBID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgXAorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiBcCiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CiA8cGxpc3QgdmVyc2lvbj0iMS4wIj4KIDxkaWN0PgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CmluZGV4IGZiNmNkMzAuLmQzM2FmOTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKQEAgLTEsMTIgKzEsMTIgQEAKICMgVGVzdCBjYXNlIGZvciB0aGUgb3MucG9sbCgpIGZ1bmN0aW9uCiAKIGltcG9ydCBvcywgc2VsZWN0LCByYW5kb20sIHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CiAKIHRyeToKICAgICBzZWxlY3QucG9sbAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIFRlc3RTa2lwcGVkLCAic2VsZWN0LnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9wb2xsIgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAic2VsZWN0LnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9wb2xsIgogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CmluZGV4IDA2OWYzNzAuLjkyYjVlOTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQpAQCAtMTQsMTMgKzE0LDExIEBACiAjIFRoaXMgcmVzdWx0cyBpbiBQeXRob24gYmVpbmcgc3Bhd25lZCBhbmQgcHJpbnRpbmcgdGhlIHN5cy5hcmd2IGxpc3QuCiAjIFdlIGNhbiB0aGVuIGV2YWwoKSB0aGUgcmVzdWx0IG9mIHRoaXMsIGFuZCBzZWUgd2hhdCBlYWNoIGFyZ3Ygd2FzLgogcHl0aG9uID0gc3lzLmV4ZWN1dGFibGUKLWlmICcgJyBpbiBweXRob246Ci0gICAgcHl0aG9uID0gJyInICsgcHl0aG9uICsgJyInICAgICAjIHF1b3RlIGVtYmVkZGVkIHNwYWNlIGZvciBjbWRsaW5lCiAKIGNsYXNzIFBvcGVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIF9kb190ZXN0X2NvbW1hbmRsaW5lKHNlbGYsIGNtZGxpbmUsIGV4cGVjdGVkKToKICAgICAgICAgY21kID0gJyVzIC1jICJpbXBvcnQgc3lzO3ByaW50IHN5cy5hcmd2IiAlcycgJSAocHl0aG9uLCBjbWRsaW5lKQotICAgICAgICBkYXRhID0gb3MucG9wZW4oY21kKS5yZWFkKCkKKyAgICAgICAgZGF0YSA9IG9zLnBvcGVuKGNtZCkucmVhZCgpICsgJ1xuJwogICAgICAgICBnb3QgPSBldmFsKGRhdGEpWzE6XSAjIHN0cmlwIG9mZiBhcmd2WzBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIApAQCAtNDAsNiArMzgsMTMgQEAKICAgICAgICAgKQogICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCAwIikuY2xvc2UoKSwgTm9uZSkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCA0MiIpLmNsb3NlKCksIDQyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCA0MiIpLmNsb3NlKCksIDQyIDw8IDgpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvcGVuVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BlbjIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weQppbmRleCAyYjdjMzBkLi5lYTQxMDc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGVuMi5weQpAQCAtMTIsMTMgKzEyLDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwb3BlbjIKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCiAKIGlmIHN5cy5wbGF0Zm9ybVs6NF0gPT0gJ2Jlb3MnIG9yIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2F0aGVvcyc6CiAgICAgIyAgTG9ja3MgZ2V0IG1lc3NlZCB1cCBvciBzb21ldGhpbmcuICBHZW5lcmFsbHkgd2UncmUgc3VwcG9zZWQKICAgICAjICB0byBhdm9pZCBtaXhpbmcgInBvc2l4IiBmb3JrICYgZXhlYyB3aXRoIG5hdGl2ZSB0aHJlYWRzLCBhbmQKICAgICAjICB0aGV5IG1heSBiZSByaWdodCBhYm91dCB0aGF0IGFmdGVyIGFsbC4KLSAgICByYWlzZSBUZXN0U2tpcHBlZCgicG9wZW4yKCkgZG9lc24ndCB3b3JrIG9uICIgKyBzeXMucGxhdGZvcm0pCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInBvcGVuMigpIGRvZXNuJ3Qgd29yayBvbiAiICsgc3lzLnBsYXRmb3JtKQogCiAjIGlmIHdlIGRvbid0IGhhdmUgb3MucG9wZW4sIGNoZWNrIHRoYXQKICMgd2UgaGF2ZSBvcy5mb3JrLiAgaWYgbm90LCBza2lwIHRoZSB0ZXN0CkBAIC01MCwxNSArNTAsMjEgQEAKICAgICAgICAgZm9yIGluc3QgaW4gcG9wZW4yLl9hY3RpdmU6CiAgICAgICAgICAgICBpbnN0LndhaXQoKQogICAgICAgICBwb3BlbjIuX2NsZWFudXAoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcGVuMi5fYWN0aXZlLCAiX2FjdGl2ZSBub3QgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcGVuMi5fYWN0aXZlLCAicG9wZW4yLl9hY3RpdmUgbm90IGVtcHR5IikKKyAgICAgICAgIyBUaGUgb3MucG9wZW4qKCkgQVBJIGRlbGVnYXRlcyB0byB0aGUgc3VicHJvY2VzcyBtb2R1bGUgKG9uIFVuaXgpCisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGZvciBpbnN0IGluIHN1YnByb2Nlc3MuX2FjdGl2ZToKKyAgICAgICAgICAgIGluc3Qud2FpdCgpCisgICAgICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnByb2Nlc3MuX2FjdGl2ZSwgInN1YnByb2Nlc3MuX2FjdGl2ZSBub3QgZW1wdHkiKQogICAgICAgICByZWFwX2NoaWxkcmVuKCkKIAogICAgIGRlZiB2YWxpZGF0ZV9vdXRwdXQoc2VsZiwgdGVzdHN0ciwgZXhwZWN0ZWRfb3V0LCByLCB3LCBlPU5vbmUpOgogICAgICAgICB3LndyaXRlKHRlc3RzdHIpCiAgICAgICAgIHcuY2xvc2UoKQogICAgICAgICBnb3QgPSByLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZF9vdXQsIGdvdC5zdHJpcCgpLCAid3JvdGUgJXIgcmVhZCAlciIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdHN0ciwgZ290KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9vdXQsIGdvdC5zdHJpcCgpLCAid3JvdGUgJXIgcmVhZCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0c3RyLCBnb3QpKQogCiAgICAgICAgIGlmIGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBnb3QgPSBlLnJlYWQoKQpAQCAtODQsNyArOTAsNyBAQAogCiAgICAgICAgICAgICB3LCByID0gb3MucG9wZW4yKFsiZWNobyIsIHNlbGYudGVzdHN0cl0pCiAgICAgICAgICAgICBnb3QgPSByLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCiAKICAgICAgICAgdywgciA9IG9zLnBvcGVuMihzZWxmLmNtZCkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3KQpAQCAtOTcsNyArMTAzLDcgQEAKIAogICAgICAgICAgICAgdywgciwgZSA9IG9zLnBvcGVuMyhbImVjaG8iLCBzZWxmLnRlc3RzdHJdKQogICAgICAgICAgICAgZ290ID0gci5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdvdCwgc2VsZi50ZXN0c3RyICsgIlxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQogICAgICAgICAgICAgZ290ID0gZS5yZWFkKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ290LCAidW5leHBlY3RlZCAlciBvbiBzdGRlcnIiICUgZ290KQogCkBAIC0xMTEsNyArMTE3LDcgQEAKIAogICAgICAgICAgICAgdywgciA9IG9zLnBvcGVuNChbImVjaG8iLCBzZWxmLnRlc3RzdHJdKQogICAgICAgICAgICAgZ290ID0gci5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGdvdCwgc2VsZi50ZXN0c3RyICsgIlxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQogCiAgICAgICAgIHcsIHIgPSBvcy5wb3BlbjQoc2VsZi5jbWQpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKaW5kZXggMThlZDIyNC4uNDM3NWY3MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTEsNDMgKzEsMzA2IEBACi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQgdGhyZWFkaW5nCisiIiJUZXN0IHNjcmlwdCBmb3IgcG9wbGliIG1vZHVsZS4iIiIKKworIyBNb2RpZmllZCBieSBHaWFtcGFvbG8gUm9kb2xhJyB0byBnaXZlIHBvcGxpYi5QT1AzIGFuZCBwb3BsaWIuUE9QM19TU0wKKyMgYSByZWFsIHRlc3Qgc3VpdGUKKwogaW1wb3J0IHBvcGxpYgoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgYXN5bmNoYXQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCBlcnJubwogCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhPU1QKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCi1IT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIAotZGVmIHNlcnZlcihldnQsIHNlcnYpOgotICAgIHNlcnYubGlzdGVuKDUpCi0gICAgdHJ5OgotICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQotICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGNvbm4uc2VuZCgiKyBIb2xhIG11bmRvXG4iKQotICAgICAgICBjb25uLmNsb3NlKCkKLSAgICBmaW5hbGx5OgotICAgICAgICBzZXJ2LmNsb3NlKCkKLSAgICAgICAgZXZ0LnNldCgpCisjIHRoZSBkdW1teSBkYXRhIHJldHVybmVkIGJ5IHNlcnZlciB3aGVuIExJU1QgYW5kIFJFVFIgY29tbWFuZHMgYXJlIGlzc3VlZAorTElTVF9SRVNQID0gJzEgMVxyXG4yIDJcclxuMyAzXHJcbjQgNFxyXG41IDVcclxuLlxyXG4nCitSRVRSX1JFU1AgPSAiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCitcclxuQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXHJcblwKK01JTUUtVmVyc2lvbjogMS4wXHJcblwKK1N1YmplY3Q6IER1bW15XHJcblwKK1xyXG5cCitsaW5lMVxyXG5cCitsaW5lMlxyXG5cCitsaW5lM1xyXG5cCisuXHJcbiIiIgogCi1jbGFzcyBHZW5lcmFsVGVzdHMoVGVzdENhc2UpOgorCitjbGFzcyBEdW1teVBPUDNIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoIlxyXG4iKQorICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LicpCisKKyAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICBsaW5lID0gJycuam9pbihzZWxmLmluX2J1ZmZlcikKKyAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICBjbWQgPSBsaW5lLnNwbGl0KCcgJylbMF0ubG93ZXIoKQorICAgICAgICBzcGFjZSA9IGxpbmUuZmluZCgnICcpCisgICAgICAgIGlmIHNwYWNlICE9IC0xOgorICAgICAgICAgICAgYXJnID0gbGluZVtzcGFjZSArIDE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnID0gIiIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnY21kXycgKyBjbWQpOgorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnY21kXycgKyBjbWQpCisgICAgICAgICAgICBtZXRob2QoYXJnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoKCctRVJSIHVucmVjb2duaXplZCBQT1AzIGNvbW1hbmQgIiVzIi4nICVjbWQpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisgICAgZGVmIHB1c2goc2VsZiwgZGF0YSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBkYXRhICsgJ1xyXG4nKQorCisgICAgZGVmIGNtZF9lY2hvKHNlbGYsIGFyZyk6CisgICAgICAgICMgc2VuZHMgYmFjayB0aGUgcmVjZWl2ZWQgc3RyaW5nICh1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlKQorICAgICAgICBzZWxmLnB1c2goYXJnKQorCisgICAgZGVmIGNtZF91c2VyKHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZyAhPSAiZ3VpZG8iOgorICAgICAgICAgICAgc2VsZi5wdXNoKCItRVJSIG5vIHN1Y2ggdXNlciIpCisgICAgICAgIHNlbGYucHVzaCgnK09LIHBhc3N3b3JkIHJlcXVpcmVkJykKKworICAgIGRlZiBjbWRfcGFzcyhzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmcgIT0gInB5dGhvbiI6CisgICAgICAgICAgICBzZWxmLnB1c2goIi1FUlIgd3JvbmcgcGFzc3dvcmQiKQorICAgICAgICBzZWxmLnB1c2goJytPSyAxMCBtZXNzYWdlcycpCisKKyAgICBkZWYgY21kX3N0YXQoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgMTAgMTAwJykKKworICAgIGRlZiBjbWRfbGlzdChzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmc6CisgICAgICAgICAgICBzZWxmLnB1c2goJytPSyAlcyAlcycgJShhcmcsIGFyZykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJytPSycpCisgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LnB1c2goc2VsZiwgTElTVF9SRVNQKQorCisgICAgY21kX3VpZGwgPSBjbWRfbGlzdAorCisgICAgZGVmIGNtZF9yZXRyKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LICVzIGJ5dGVzJyAlbGVuKFJFVFJfUkVTUCkpCisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBSRVRSX1JFU1ApCisKKyAgICBjbWRfdG9wID0gY21kX3JldHIKKworICAgIGRlZiBjbWRfZGVsZShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBtZXNzYWdlIG1hcmtlZCBmb3IgZGVsZXRpb24uJykKKworICAgIGRlZiBjbWRfbm9vcChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBkb25lIG5vdGhpbmcuJykKKworICAgIGRlZiBjbWRfcnBvcChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBkb25lIG5vdGhpbmcuJykKKworCitjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CisKKyAgICBoYW5kbGVyID0gRHVtbXlQT1AzSGFuZGxlcgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIGFmPXNvY2tldC5BRl9JTkVUKToKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChhZiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmJpbmQoYWRkcmVzcykKKyAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5hY3RpdmUKKyAgICAgICAgc2VsZi5fX2ZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYpCisgICAgICAgIHNlbGYuX19mbGFnLndhaXQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5hY3RpdmUgPSBUcnVlCisgICAgICAgIHNlbGYuX19mbGFnLnNldCgpCisgICAgICAgIHdoaWxlIHNlbGYuYWN0aXZlIGFuZCBhc3luY29yZS5zb2NrZXRfbWFwOgorICAgICAgICAgICAgc2VsZi5hY3RpdmVfbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjEsIGNvdW50PTEpCisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrLnJlbGVhc2UoKQorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoaWdub3JlX2FsbD1UcnVlKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmFjdGl2ZQorICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuam9pbigpCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gc2VsZi5oYW5kbGVyKGNvbm4pCisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICBoYW5kbGVfcmVhZCA9IGhhbmRsZV9jb25uZWN0CisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIFRlc3RQT1AzQ2xhc3MoVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydE9LKHNlbGYsIHJlc3ApOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIrT0siKSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0d2VsY29tZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5nZXR3ZWxjb21lKCksICcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuX3Nob3J0Y21kLCAnZWNobyAtZXJyJykKKworICAgIGRlZiB0ZXN0X3VzZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T0soc2VsZi5jbGllbnQudXNlcignZ3VpZG8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC51c2VyLCAnaW52YWxpZCcpCisKKyAgICBkZWYgdGVzdF9wYXNzXyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5wYXNzXygncHl0aG9uJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQudXNlciwgJ2ludmFsaWQnKQorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zdGF0KCksICgxMCwgMTAwKSkKKworICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQubGlzdCgpWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWycxIDEnLCAnMiAyJywgJzMgMycsICc0IDQnLCAnNSA1J10sIDI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpZW50Lmxpc3QoJzEnKS5lbmRzd2l0aCgiT0sgMSAxIikpCisKKyAgICBkZWYgdGVzdF9yZXRyKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICgnK09LIDExNiBieXRlcycsCisgICAgICAgICAgICAgICAgICAgIFsnRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnJywgJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicsCisgICAgICAgICAgICAgICAgICAgICAnTUlNRS1WZXJzaW9uOiAxLjAnLCAnU3ViamVjdDogRHVtbXknLAorICAgICAgICAgICAgICAgICAgICAgJycsICdsaW5lMScsICdsaW5lMicsICdsaW5lMyddLAorICAgICAgICAgICAgICAgICAgICAxMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQucmV0cignZm9vJyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5kZWxlKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T0soc2VsZi5jbGllbnQubm9vcCgpKQorCisgICAgZGVmIHRlc3RfcnBvcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5ycG9wKCdmb28nKSkKKworICAgIGRlZiB0ZXN0X3RvcChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAgKCcrT0sgMTE2IGJ5dGVzJywKKyAgICAgICAgICAgICAgICAgICAgIFsnRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnJywgJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicsCisgICAgICAgICAgICAgICAgICAgICAgJ01JTUUtVmVyc2lvbjogMS4wJywgJ1N1YmplY3Q6IER1bW15JywgJycsCisgICAgICAgICAgICAgICAgICAgICAgJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10sCisgICAgICAgICAgICAgICAgICAgICAxMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudG9wKDEsIDEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3VpZGwoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQorICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQorCisKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorCisgICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorCisgICAgY2xhc3MgRHVtbXlQT1AzX1NTTEhhbmRsZXIoRHVtbXlQT1AzSGFuZGxlcik6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQorICAgICAgICAgICAgIyBNdXN0IHRyeSBoYW5kc2hha2UgYmVmb3JlIGNhbGxpbmcgcHVzaCgpCisgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKCJcclxuIikKKyAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LicpCisKKyAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBEdW1teVBPUDNIYW5kbGVyLmhhbmRsZV9yZWFkKHNlbGYpCisKKyAgICBjbGFzcyBUZXN0UE9QM19TU0xDbGFzcyhUZXN0UE9QM0NsYXNzKToKKyAgICAgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDNfU1NMCisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlciA9IER1bW15UE9QM19TU0xIYW5kbGVyCisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzX1NTTChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgICAgIGRlZiB0ZXN0X19hbGxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1BPUDNfU1NMJywgcG9wbGliLl9fYWxsX18pCisKKworY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDMpCiAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaykpLnN0YXJ0KCkKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaykpLnN0YXJ0KCkKICAgICAgICAgdGltZS5zbGVlcCguMSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCiAKLSAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgotICAgICAgICAjIGNvbm5lY3RzCi0gICAgICAgIHBvcCA9IHBvcGxpYi5QT1AzKEhPU1QsIHNlbGYucG9ydCkKLSAgICAgICAgcG9wLnNvY2suY2xvc2UoKQorICAgIGRlZiBzZXJ2ZXIoc2VsZiwgZXZ0LCBzZXJ2KToKKyAgICAgICAgc2Vydi5saXN0ZW4oNSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubi5zZW5kKCIrIEhvbGEgbXVuZG9cbiIpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlcnYuY2xvc2UoKQorICAgICAgICAgICAgZXZ0LnNldCgpCiAKICAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKQEAgLTY1LDggKzMyOCwxNiBAQAogICAgICAgICBwb3Auc29jay5jbG9zZSgpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzKQorZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW1Rlc3RQT1AzQ2xhc3MsIFRlc3RUaW1lb3V0c10KKyAgICBpZiBTVVBQT1JUU19TU0w6CisgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0UE9QM19TU0xDbGFzcykKKyAgICB0aHJlYWRfaW5mbyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgIHRyeToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCp0aHJlYWRfaW5mbykKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5IGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQppbmRleCBmYjgzMGFlLi5hNWRiMjFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKQEAgLTIsMTAgKzIsOCBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCi10cnk6Ci0gICAgaW1wb3J0IHBvc2l4Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkLCAicG9zaXggaXMgbm90IGF2YWlsYWJsZSIKKyMgU2tpcCB0aGVzZSB0ZXN0cyBpZiB0aGVyZSBpcyBubyBwb3NpeCBtb2R1bGUuCitwb3NpeCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdwb3NpeCcpCiAKIGltcG9ydCBlcnJubwogaW1wb3J0IHN5cwpAQCAtMTYsNiArMTQsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKKworCiB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgJy4qIHBvdGVudGlhbCBzZWN1cml0eSByaXNrIC4qJywKICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQogCkBAIC0zOCwyMSArMzgsODYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldHBpZCIsICJnZXRwZ3JwIiwgImdldHBwaWQiLCAiZ2V0dWlkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KIAotICAgICAgICBmb3IgbmFtZSBpbiBOT19BUkdfRlVOQ1RJT05TOgotICAgICAgICAgICAgcG9zaXhfZnVuYyA9IGdldGF0dHIocG9zaXgsIG5hbWUsIE5vbmUpCi0gICAgICAgICAgICBpZiBwb3NpeF9mdW5jIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHBvc2l4X2Z1bmMoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhfZnVuYywgMSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBOT19BUkdfRlVOQ1RJT05TOgorICAgICAgICAgICAgICAgIHBvc2l4X2Z1bmMgPSBnZXRhdHRyKHBvc2l4LCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHBvc2l4X2Z1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBvc2l4X2Z1bmMoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4X2Z1bmMsIDEpCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0cmVzdWlkJyk6CisgICAgICAgIGRlZiB0ZXN0X2dldHJlc3VpZChzZWxmKToKKyAgICAgICAgICAgIHVzZXJfaWRzID0gcG9zaXguZ2V0cmVzdWlkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHVzZXJfaWRzKSwgMykKKyAgICAgICAgICAgIGZvciB2YWwgaW4gdXNlcl9pZHM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodmFsLCAwKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2dldHJlc2dpZCcpOgorICAgICAgICBkZWYgdGVzdF9nZXRyZXNnaWQoc2VsZik6CisgICAgICAgICAgICBncm91cF9pZHMgPSBwb3NpeC5nZXRyZXNnaWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ3JvdXBfaWRzKSwgMykKKyAgICAgICAgICAgIGZvciB2YWwgaW4gZ3JvdXBfaWRzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHZhbCwgMCkKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdzZXRyZXN1aWQnKToKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzdWlkKHNlbGYpOgorICAgICAgICAgICAgY3VycmVudF91c2VyX2lkcyA9IHBvc2l4LmdldHJlc3VpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXN1aWQoKmN1cnJlbnRfdXNlcl9pZHMpKQorICAgICAgICAgICAgIyAtMSBtZWFucyBkb24ndCBjaGFuZ2UgdGhhdCB2YWx1ZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc3VpZCgtMSwgLTEsIC0xKSkKKworICAgICAgICBkZWYgdGVzdF9zZXRyZXN1aWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAgICAgIyBEb24ndCBkbyB0aGlzIHRlc3QgaWYgc29tZW9uZSBpcyBzaWxseSBlbm91Z2ggdG8gcnVuIHVzIGFzIHJvb3QuCisgICAgICAgICAgICBjdXJyZW50X3VzZXJfaWRzID0gcG9zaXguZ2V0cmVzdWlkKCkKKyAgICAgICAgICAgIGlmIDAgbm90IGluIGN1cnJlbnRfdXNlcl9pZHM6CisgICAgICAgICAgICAgICAgbmV3X3VzZXJfaWRzID0gKGN1cnJlbnRfdXNlcl9pZHNbMF0rMSwgLTEsIC0xKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHBvc2l4LnNldHJlc3VpZCwgKm5ld191c2VyX2lkcykKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdzZXRyZXNnaWQnKToKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzZ2lkKHNlbGYpOgorICAgICAgICAgICAgY3VycmVudF9ncm91cF9pZHMgPSBwb3NpeC5nZXRyZXNnaWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzZ2lkKCpjdXJyZW50X2dyb3VwX2lkcykpCisgICAgICAgICAgICAjIC0xIG1lYW5zIGRvbid0IGNoYW5nZSB0aGF0IHZhbHVlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzZ2lkKC0xLCAtMSwgLTEpKQorCisgICAgICAgIGRlZiB0ZXN0X3NldHJlc2dpZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICAgICAjIERvbid0IGRvIHRoaXMgdGVzdCBpZiBzb21lb25lIGlzIHNpbGx5IGVub3VnaCB0byBydW4gdXMgYXMgcm9vdC4KKyAgICAgICAgICAgIGN1cnJlbnRfZ3JvdXBfaWRzID0gcG9zaXguZ2V0cmVzZ2lkKCkKKyAgICAgICAgICAgIGlmIDAgbm90IGluIGN1cnJlbnRfZ3JvdXBfaWRzOgorICAgICAgICAgICAgICAgIG5ld19ncm91cF9pZHMgPSAoY3VycmVudF9ncm91cF9pZHNbMF0rMSwgLTEsIC0xKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHBvc2l4LnNldHJlc2dpZCwgKm5ld19ncm91cF9pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG5lZWRzIG9zLmluaXRncm91cHMoKSIpCisgICAgZGVmIHRlc3RfaW5pdGdyb3VwcyhzZWxmKToKKyAgICAgICAgIyBJdCB0YWtlcyBhIHN0cmluZyBhbmQgYW4gaW50ZWdlcjsgY2hlY2sgdGhhdCBpdCByYWlzZXMgYSBUeXBlRXJyb3IKKyAgICAgICAgIyBmb3Igb3RoZXIgYXJndW1lbnQgbGlzdHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMsIDMsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMsICJmb28iLCAzLCBvYmplY3QoKSkKKworICAgICAgICAjIElmIGEgbm9uLXByaXZpbGVnZWQgdXNlciBpbnZva2VzIGl0LCBpdCBzaG91bGQgZmFpbCB3aXRoIE9TRXJyb3IKKyAgICAgICAgIyBFUEVSTS4KKyAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIDEzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIE9TRXJyb3IgdG8gYmUgcmFpc2VkIGJ5IGluaXRncm91cHMiKQogCiAgICAgZGVmIHRlc3Rfc3RhdHZmcyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3N0YXR2ZnMnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC5zdGF0dmZzKG9zLmN1cmRpcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguc3RhdHZmcyhvcy5jdXJkaXIpKQogCiAgICAgZGVmIHRlc3RfZnN0YXR2ZnMoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdmc3RhdHZmcycpOgogICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBvc2l4LmZzdGF0dmZzKGZwLmZpbGVubygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguZnN0YXR2ZnMoZnAuZmlsZW5vKCkpKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAKQEAgLTcyLDcgKzEzNyw3IEBACiAgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IHBvc2l4LmR1cChmcC5maWxlbm8oKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShmZCwgaW50KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmQsIGludCkKICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQpAQCAtMTM4LDEzICsyMDMsMTMgQEAKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2ZzdGF0Jyk6CiAgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXguZnN0YXQoZnAuZmlsZW5vKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5mc3RhdChmcC5maWxlbm8oKSkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3N0YXQoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdGF0Jyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXguc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pKQogCiAgICAgZGVmIF90ZXN0X2FsbF9jaG93bl9jb21tb24oc2VsZiwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0pOgogICAgICAgICAiIiJDb21tb24gY29kZSBmb3IgY2hvd24sIGZjaG93biBhbmQgbGNob3duIHRlc3RzLiIiIgpAQCAtMTY3LDcgKzIzMiw4IEBACiAgICAgICAgICMgdGVzdCBhIHN1Y2Nlc3NmdWwgY2hvd24gY2FsbAogICAgICAgICBjaG93bl9mdW5jKGZpcnN0X3BhcmFtLCBvcy5nZXR1aWQoKSwgb3MuZ2V0Z2lkKCkpCiAKLSAgICBkZWYgX3Rlc3RfY2hvd24oc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2Nob3duJyksICJ0ZXN0IG5lZWRzIG9zLmNob3duKCkiKQorICAgIGRlZiB0ZXN0X2Nob3duKHNlbGYpOgogICAgICAgICAjIHJhaXNlIGFuIE9TRXJyb3IgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QKICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHBvc2l4LmNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAtMSwgLTEpCkBAIC0xNzYsMTAgKzI0Miw4IEBACiAgICAgICAgIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKS5jbG9zZSgpCiAgICAgICAgIHNlbGYuX3Rlc3RfYWxsX2Nob3duX2NvbW1vbihwb3NpeC5jaG93biwgdGVzdF9zdXBwb3J0LlRFU1RGTikKIAotICAgIGlmIGhhc2F0dHIocG9zaXgsICdjaG93bicpOgotICAgICAgICB0ZXN0X2Nob3duID0gX3Rlc3RfY2hvd24KLQotICAgIGRlZiBfdGVzdF9mY2hvd24oc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2ZjaG93bicpLCAidGVzdCBuZWVkcyBvcy5mY2hvd24oKSIpCisgICAgZGVmIHRlc3RfZmNob3duKHNlbGYpOgogICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKIAogICAgICAgICAjIHJlLWNyZWF0ZSB0aGUgZmlsZQpAQCAtMTkwLDE4ICsyNTQsMTMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRlc3RfZmlsZS5jbG9zZSgpCiAKLSAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZmNob3duJyk6Ci0gICAgICAgIHRlc3RfZmNob3duID0gX3Rlc3RfZmNob3duCi0KLSAgICBkZWYgX3Rlc3RfbGNob3duKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdsY2hvd24nKSwgInRlc3QgbmVlZHMgb3MubGNob3duKCkiKQorICAgIGRlZiB0ZXN0X2xjaG93bihzZWxmKToKICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgICMgY3JlYXRlIGEgc3ltbGluawogICAgICAgICBvcy5zeW1saW5rKCcvdG1wL2R1bW15LXN5bWxpbmstdGFyZ2V0JywgdGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5fdGVzdF9hbGxfY2hvd25fY29tbW9uKHBvc2l4LmxjaG93biwgdGVzdF9zdXBwb3J0LlRFU1RGTikKIAotICAgIGlmIGhhc2F0dHIocG9zaXgsICdsY2hvd24nKToKLSAgICAgICAgdGVzdF9sY2hvd24gPSBfdGVzdF9sY2hvd24KLQogICAgIGRlZiB0ZXN0X2NoZGlyKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnY2hkaXInKToKICAgICAgICAgICAgIHBvc2l4LmNoZGlyKG9zLmN1cmRpcikKQEAgLTIwOSwyMSArMjY4LDIxIEBACiAKICAgICBkZWYgdGVzdF9sc2RpcihzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2xzZGlyJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odGVzdF9zdXBwb3J0LlRFU1RGTiBpbiBwb3NpeC5sc2Rpcihvcy5jdXJkaXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBwb3NpeC5sc2Rpcihvcy5jdXJkaXIpKQogCiAgICAgZGVmIHRlc3RfYWNjZXNzKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnYWNjZXNzJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXguYWNjZXNzKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLlJfT0spKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LmFjY2Vzcyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5SX09LKSkKIAogICAgIGRlZiB0ZXN0X3VtYXNrKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndW1hc2snKToKICAgICAgICAgICAgIG9sZF9tYXNrID0gcG9zaXgudW1hc2soMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG9sZF9tYXNrLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9sZF9tYXNrLCBpbnQpCiAgICAgICAgICAgICBwb3NpeC51bWFzayhvbGRfbWFzaykKIAogICAgIGRlZiB0ZXN0X3N0cmVycm9yKHNlbGYpOgogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc3RyZXJyb3InKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC5zdHJlcnJvcigwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5zdHJlcnJvcigwKSkKIAogICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdwaXBlJyk6CkBAIC0yMzMsMTQgKzI5MiwxOCBAQAogCiAgICAgZGVmIHRlc3RfdGVtcG5hbShzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3RlbXBuYW0nKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwb3NpeC50ZW1wbmFtKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocG9zaXgudGVtcG5hbShvcy5jdXJkaXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHBvc2l4LnRlbXBuYW0ob3MuY3VyZGlyLCAnYmxhaCcpKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXgudGVtcG5hbSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC50ZW1wbmFtKG9zLmN1cmRpcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnRlbXBuYW0ob3MuY3VyZGlyLCAnYmxhaCcpKQogCiAgICAgZGVmIHRlc3RfdG1wZmlsZShzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3RtcGZpbGUnKToKLSAgICAgICAgICAgIGZwID0gcG9zaXgudG1wZmlsZSgpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBmaWxlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZwID0gcG9zaXgudG1wZmlsZSgpCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfdXRpbWUoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICd1dGltZScpOgpAQCAtMjc0LDEwICszMzcsMTAgQEAKICAgICAgICAgICAgICAgICBvcy5ta2RpcihiYXNlX3BhdGgpCiAgICAgICAgICAgICAgICAgb3MuY2hkaXIoYmFzZV9wYXRoKQogICAgICAgICAgICAgZXhjZXB0OgotIyAgICAgICAgICAgICAgIEp1c3QgcmV0dXJuaW5nIG5vdGhpbmcgaW5zdGVhZCBvZiB0aGUgVGVzdFNraXBwZWQgZXhjZXB0aW9uLAorIyAgICAgICAgICAgICAgIEp1c3QgcmV0dXJuaW5nIG5vdGhpbmcgaW5zdGVhZCBvZiB0aGUgU2tpcFRlc3QgZXhjZXB0aW9uLAogIyAgICAgICAgICAgICAgIGJlY2F1c2UgdGhlIHRlc3QgcmVzdWx0cyBpbiBFcnJvciBpbiB0aGF0IGNhc2UuCiAjICAgICAgICAgICAgICAgSXMgdGhhdCBvaz8KLSMgICAgICAgICAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkLCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHRlc3RpbmciCisjICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHRlc3RpbmciCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIHRyeToKQEAgLTI4NSw3ICszNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQsICJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIm1rZGlyIGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IHN1ZmZpY2llbnRseSBkZWVwIGZvciBnZXRjd2QgdGVzdCIKIAogICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQogICAgICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zMDcsNTMgKzM3MCw1NiBAQAogICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJhc2VfcGF0aCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdnZXRlZ2lkJyksICJ0ZXN0IG5lZWRzIG9zLmdldGVnaWQoKSIpCiAgICAgZGVmIHRlc3RfZ2V0Z3JvdXBzKHNlbGYpOgotICAgICAgICB3aXRoIG9zLnBvcGVuKCdpZCAtRyAyPi9kZXYvbnVsbCcpIGFzIGlkZzoKKyAgICAgICAgd2l0aCBvcy5wb3BlbignaWQgLUcnKSBhcyBpZGc6CiAgICAgICAgICAgICBncm91cHMgPSBpZGcucmVhZCgpLnN0cmlwKCkKIAogICAgICAgICBpZiBub3QgZ3JvdXBzOgotICAgICAgICAgICAgIyBUaGlzIHRlc3QgbmVlZHMgJ2lkIC1HJwotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibmVlZCB3b3JraW5nICdpZCAtRyciKQogCiAgICAgICAgICMgJ2lkIC1HJyBhbmQgJ29zLmdldGdyb3VwcygpJyBzaG91bGQgcmV0dXJuIHRoZSBzYW1lCiAgICAgICAgICMgZ3JvdXBzLCBpZ25vcmluZyBvcmRlciBhbmQgZHVwbGljYXRlcy4KKyAgICAgICAgIyAjMTA4MjIgLSBpdCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHdoZXRoZXIgcG9zaXguZ2V0Z3JvdXBzKCkKKyAgICAgICAgIyBpbmNsdWRlcyB0aGUgZWZmZWN0aXZlIGdpZCBzbyB3ZSBpbmNsdWRlIGl0IGFueXdheSwgc2luY2UgaWQgLUcgZG9lcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIHNldChbaW50KHgpIGZvciB4IGluIGdyb3Vwcy5zcGxpdCgpXSksCi0gICAgICAgICAgICAgICAgc2V0KHBvc2l4LmdldGdyb3VwcygpKSkKKyAgICAgICAgICAgICAgICBzZXQocG9zaXguZ2V0Z3JvdXBzKCkgKyBbcG9zaXguZ2V0ZWdpZCgpXSkpCiAKIGNsYXNzIFBvc2l4R3JvdXBzVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBwb3NpeC5nZXR1aWQoKSA9PSAwIGFuZCBoYXNhdHRyKHBvc2l4LCAnZ2V0Z3JvdXBzJykgYW5kIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKIAotICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLnNhdmVkX2dyb3VwcyA9IHBvc2l4LmdldGdyb3VwcygpCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBwb3NpeC5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5vdCBlbm91Z2ggcHJpdmlsZWdlcyIpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBvc2l4LCAnZ2V0Z3JvdXBzJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibmVlZCBwb3NpeC5nZXRncm91cHMiKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2V0Z3JvdXBzKDIpIGlzIGJyb2tlbiBvbiBPU1giKQorICAgICAgICBzZWxmLnNhdmVkX2dyb3VwcyA9IHBvc2l4LmdldGdyb3VwcygpCiAKLSAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldGdyb3VwcycpOgotICAgICAgICAgICAgICAgIHBvc2l4LnNldGdyb3VwcyhzZWxmLnNhdmVkX2dyb3VwcykKLSAgICAgICAgICAgIGVsaWYgaGFzYXR0cihwb3NpeCwgJ2luaXRncm91cHMnKToKLSAgICAgICAgICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHBvc2l4LmdldHVpZCgpKS5wd19uYW1lCi0gICAgICAgICAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCBzZWxmLnNhdmVkX2dyb3Vwc1swXSkKLQotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpOgotICAgICAgICAgICAgZGVmIHRlc3RfaW5pdGdyb3VwcyhzZWxmKToKLSAgICAgICAgICAgICAgICAjIGZpbmQgbWlzc2luZyBncm91cAotCi0gICAgICAgICAgICAgICAgZ3JvdXBzID0gc29ydGVkKHNlbGYuc2F2ZWRfZ3JvdXBzKQotICAgICAgICAgICAgICAgIGZvciBnMSxnMiBpbiB6aXAoZ3JvdXBzWzotMV0sIGdyb3Vwc1sxOl0pOgotICAgICAgICAgICAgICAgICAgICBnID0gZzEgKyAxCi0gICAgICAgICAgICAgICAgICAgIGlmIGcgPCBnMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZyA9IGcyICsgMQotICAgICAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQocG9zaXguZ2V0dWlkKCkpLnB3X25hbWUKLSAgICAgICAgICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIGcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihnLCBwb3NpeC5nZXRncm91cHMoKSkKLQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3NldGdyb3VwcycpOgotICAgICAgICAgICAgZGVmIHRlc3Rfc2V0Z3JvdXBzKHNlbGYpOgotICAgICAgICAgICAgICAgIGZvciBncm91cHMgaW4gW1swXSwgcmFuZ2UoMTYpXToKLSAgICAgICAgICAgICAgICAgICAgcG9zaXguc2V0Z3JvdXBzKGdyb3VwcykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZ3JvdXBzLCBwb3NpeC5nZXRncm91cHMoKSkKKyAgICAgICAgICAgIHBvc2l4LnNldGdyb3VwcyhzZWxmLnNhdmVkX2dyb3VwcykKKyAgICAgICAgZWxpZiBoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpOgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQorICAgICAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCBzZWxmLnNhdmVkX2dyb3Vwc1swXSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgcG9zaXguaW5pdGdyb3VwcygpIikKKyAgICBkZWYgdGVzdF9pbml0Z3JvdXBzKHNlbGYpOgorICAgICAgICAjIGZpbmQgbWlzc2luZyBncm91cAorCisgICAgICAgIGcgPSBtYXgoc2VsZi5zYXZlZF9ncm91cHMpICsgMQorICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHBvc2l4LmdldHVpZCgpKS5wd19uYW1lCisgICAgICAgIHBvc2l4LmluaXRncm91cHMobmFtZSwgZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihnLCBwb3NpeC5nZXRncm91cHMoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdzZXRncm91cHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBuZWVkcyBwb3NpeC5zZXRncm91cHMoKSIpCisgICAgZGVmIHRlc3Rfc2V0Z3JvdXBzKHNlbGYpOgorICAgICAgICBmb3IgZ3JvdXBzIGluIFtbMF0sIHJhbmdlKDE2KV06CisgICAgICAgICAgICBwb3NpeC5zZXRncm91cHMoZ3JvdXBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZ3JvdXBzLCBwb3NpeC5nZXRncm91cHMoKSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CmluZGV4IDRjZGY1NTEuLjhiYjc4ZDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZ2VuZXJpY3BhdGgKIAotaW1wb3J0IHBvc2l4cGF0aCwgb3MsIHN5cworaW1wb3J0IHBvc2l4cGF0aCwgb3MKIGZyb20gcG9zaXhwYXRoIGltcG9ydCByZWFscGF0aCwgYWJzcGF0aCwgZGlybmFtZSwgYmFzZW5hbWUKIAogIyBBbiBhYnNvbHV0ZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGZpbGVuYW1lIGZvciB0ZXN0aW5nLiBXZSBjYW4ndCByZWx5IG9uIFRFU1RGTgpAQCAtMjUsMjkgKzI1LDExIEBACiAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyBzdWZmaXgpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4gKyBzdWZmaXgpCiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCi0KLSAgICBkZWYgdGVzdF9ub3JtY2FzZShzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IG5vcm1jYXNlKCkgaXMgaWRlbXBvdGVudAotICAgICAgICBwID0gIkZvTy8uL0JhUiIKLSAgICAgICAgcCA9IHBvc2l4cGF0aC5ub3JtY2FzZShwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHBvc2l4cGF0aC5ub3JtY2FzZShwKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5ub3JtY2FzZSkKLQogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmpvaW4oIi9mb28iLCAiYmFyIiwgIi9iYXIiLCAiYmF6IiksICIvYmFyL2JheiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmpvaW4oIi9mb28iLCAiYmFyIiwgImJheiIpLCAiL2Zvby9iYXIvYmF6IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbigiL2Zvby8iLCAiYmFyLyIsICJiYXovIiksICIvZm9vL2Jhci9iYXovIikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5qb2luKQotCi0gICAgZGVmIHRlc3Rfc3BsaXRkcml2ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRkcml2ZSgiL2Zvby9iYXIiKSwgKCIiLCAiL2Zvby9iYXIiKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zcGxpdGRyaXZlKQotCiAgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvZm9vL2JhciIpLCAoIi9mb28iLCAiYmFyIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvIiksICgiLyIsICIiKSkKQEAgLTU1LDggKzM3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8vLy9mb28iKSwgKCIvLy8vIiwgImZvbyIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdCgiLy9mb28vL2JhciIpLCAoIi8vZm9vIiwgImJhciIpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNwbGl0KQotCiAgICAgZGVmIHNwbGl0ZXh0VGVzdChzZWxmLCBwYXRoLCBmaWxlbmFtZSwgZXh0KToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQocGF0aCksIChmaWxlbmFtZSwgZXh0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXRleHQoIi8iICsgcGF0aCksICgiLyIgKyBmaWxlbmFtZSwgZXh0KSkKQEAgLTc4LDcgKzU4LDYgQEAKICAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIi4uIiwgIi4uIiwgIiIpCiAgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIuLi4uLi4uLiIsICIuLi4uLi4uLiIsICIiKQogICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiIiwgIiIsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zcGxpdGV4dCkKIAogICAgIGRlZiB0ZXN0X2lzYWJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiIiksIEZhbHNlKQpAQCAtODcsOCArNjYsNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiL2Zvby9iYXIiKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoImZvby9iYXIiKSwgRmFsc2UpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNhYnMpCi0KICAgICBkZWYgdGVzdF9iYXNlbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi9mb28vYmFyIiksICJiYXIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiLyIpLCAiIikKQEAgLTk2LDggKzczLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi8vLy9mb28iKSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvL2Zvby8vYmFyIiksICJiYXIiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmJhc2VuYW1lKQotCiAgICAgZGVmIHRlc3RfZGlybmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiL2Zvby9iYXIiKSwgIi9mb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvIiksICIvIikKQEAgLTEwNSw2NyArODAsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvLy8vZm9vIiksICIvLy8vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiLy9mb28vL2JhciIpLCAiLy9mb28iKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmRpcm5hbWUpCi0KLSAgICBkZWYgdGVzdF9jb21tb25wcmVmaXgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwb3NpeHBhdGguY29tbW9ucHJlZml4KFtdKSwKLSAgICAgICAgICAgICIiCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2Vuc29uL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAotICAgICAgICAgICAgIi9ob21lL3N3ZW4iCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9lZ2dzIl0pLAotICAgICAgICAgICAgIi9ob21lL3N3ZW4vIgotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwb3NpeHBhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKLSAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iCi0gICAgICAgICkKLQotICAgICAgICB0ZXN0bGlzdCA9IFsnJywgJ2FiYycsICdYYmNkJywgJ1hiJywgJ1hZJywgJ2FiY2QnLCAnYVhjJywgJ2FiZCcsICdhYicsICdhWCcsICdhYmNYJ10KLSAgICAgICAgZm9yIHMxIGluIHRlc3RsaXN0OgotICAgICAgICAgICAgZm9yIHMyIGluIHRlc3RsaXN0OgotICAgICAgICAgICAgICAgIHAgPSBwb3NpeHBhdGguY29tbW9ucHJlZml4KFtzMSwgczJdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzMS5zdGFydHN3aXRoKHApKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzMi5zdGFydHN3aXRoKHApKQotICAgICAgICAgICAgICAgIGlmIHMxICE9IHMyOgotICAgICAgICAgICAgICAgICAgICBuID0gbGVuKHApCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoczFbbjpuKzFdLCBzMltuOm4rMV0pCi0KLSAgICBkZWYgdGVzdF9nZXRzaXplKHNlbGYpOgotICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5nZXRzaXplKHRlc3Rfc3VwcG9ydC5URVNURk4pLCAzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgZGVmIHRlc3RfdGltZShzZWxmKToKLSAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgImFiIikKLSAgICAgICAgICAgIGYud3JpdGUoImJhciIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCi0gICAgICAgICAgICBkID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAiZm9vYmFyIikKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKAotICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5nZXRjdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSA8PQotICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5nZXRtdGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCiAgICAgZGVmIHRlc3RfaXNsaW5rKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksIEZhbHNlKQogICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQpAQCAtMTg0LDU2ICs5OCw2IEBACiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmlzbGluaykKLQotICAgIGRlZiB0ZXN0X2V4aXN0cyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKLSAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguZXhpc3RzKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGgubGV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguZXhpc3RzKQotCi0gICAgZGVmIHRlc3RfaXNkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKLSAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCi0gICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5pc2RpcikKLQotICAgIGRlZiB0ZXN0X2lzZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKLSAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQotICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKLSAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmlzZGlyKQotCiAgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsICJ3YiIpCiAgICAgICAgIHRyeToKQEAgLTI3NSw4ICsxMzksNiBAQAogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lZmlsZSkKLQogICAgIGRlZiB0ZXN0X3NhbWVzdGF0KHNlbGYpOgogICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQogICAgICAgICB0cnk6CkBAIC0zMTYsMTMgKzE3OCw5IEBACiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVzdGF0KQotCiAgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudCgiLyIpLCBUcnVlKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmlzbW91bnQpCi0KICAgICBkZWYgdGVzdF9leHBhbmR1c2VyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJmb28iKSwgImZvbyIpCiAgICAgICAgIHRyeToKQEAgLTMzMCw0NyArMTg4LDIwIEBACiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+LyIpLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifi8iKSwgYmFzZXN0cmluZykKICAgICAgICAgICAgICMgaWYgaG9tZSBkaXJlY3RvcnkgPT0gcm9vdCBkaXJlY3RvcnksIHRoaXMgdGVzdCBtYWtlcyBubyBzZW5zZQogICAgICAgICAgICAgaWYgcG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSAhPSAnLyc6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSArICIvIiwKICAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vIikKICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifnJvb3QvIiksIGJhc2VzdHJpbmcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn5mb28vIiksIGJhc2VzdHJpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+cm9vdC8iKSwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifmZvby8iKSwgYmFzZXN0cmluZykKIAogICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgICAgICBlbnYuc2V0KCdIT01FJywgJy8nKQorICAgICAgICAgICAgICAgIGVudlsnSE9NRSddID0gJy8nCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpLCAiLyIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguZXhwYW5kdXNlcikKLQotICAgIGRlZiB0ZXN0X2V4cGFuZHZhcnMoc2VsZik6Ci0gICAgICAgIG9sZGVudiA9IG9zLmVudmlyb24uY29weSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQotICAgICAgICAgICAgb3MuZW52aXJvblsiZm9vIl0gPSAiYmFyIgotICAgICAgICAgICAgb3MuZW52aXJvblsie2ZvbyJdID0gImJhejEiCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJ7Zm9vfSJdID0gImJhejIiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCJmb28iKSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkZm9vIGJhciIpLCAiYmFyIGJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIke2Zvb31iYXIiKSwgImJhcmJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkW2Zvb11iYXIiKSwgIiRbZm9vXWJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkYmFyIGJhciIpLCAiJGJhciBiYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJD9iYXIiKSwgIiQ/YmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRmb299YmFyIiksICJiYXJ9YmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7Zm9vIiksICIke2ZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIke3tmb299fSIpLCAiYmF6MX0iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJGZvbyRmb28iKSwgImJhcmJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkYmFyJGJhciIpLCAiJGJhciRiYXIiKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCi0gICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRlbnYpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguZXhwYW5kdmFycykKLQogICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiIiksICIuIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8iKSwgIi8iKQpAQCAtMzgwLDQzICsyMTEsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiLy8vZm9vLy4vL2Jhci8vLi8vLi4vLy4vL2JheiIpLCAiL2Zvby9iYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiLy8vLi4vLy4vZm9vLy4vL2JhciIpLCAiL2Zvby9iYXIiKQogCi0gICAgICAgICMgSXNzdWUgNTgyNzogTWFrZSBzdXJlIG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlCi0gICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnLicsIHUnLycsIHUnXFwnLCB1Jy8vL2Zvby8uLy9iYXIvLycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocG9zaXhwYXRoLm5vcm1wYXRoKHBhdGgpLCB1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9ybXBhdGgoKSByZXR1cm5lZCBzdHIgaW5zdGVhZCBvZiB1bmljb2RlJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5ub3JtcGF0aCkKLQotICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygiZm9vIiBpbiBwb3NpeHBhdGguYWJzcGF0aCgiZm9vIikpCi0KLSAgICAgICAgIyBJc3N1ZSAzNDI2OiBjaGVjayB0aGF0IGFic3BhdGggcmV0dW5zIHVuaWNvZGUgd2hlbiB0aGUgYXJnIGlzIHVuaWNvZGUKLSAgICAgICAgIyBhbmQgc3RyIHdoZW4gaXQncyBzdHIsIHdpdGggYm90aCBBU0NJSSBhbmQgbm9uLUFTQ0lJIGN3ZHMKLSAgICAgICAgc2F2ZWRfY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgY3dkcyA9IFsnY3dkJ10KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY3dkcy5hcHBlbmQodSdceGU3d1x4ZjAnLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgJ2FzY2lpJykpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzICMgdGhlIGN3ZCBjYW4ndCBiZSBlbmNvZGVkIC0tIHRlc3Qgd2l0aCBhc2NpaSBjd2Qgb25seQotICAgICAgICBmb3IgY3dkIGluIGN3ZHM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoY3dkKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKLSAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiAoJycsICdmb28nLCAnZlx4ZjJceGYyJywgJy9mb28nLCAnQzpcXCcpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3NpeHBhdGguYWJzcGF0aChwYXRoKSwgc3RyKSkKLSAgICAgICAgICAgICAgICBmb3IgdXBhdGggaW4gKHUnJywgdSdmdXUnLCB1J2ZceGY5XHhmOScsIHUnL2Z1dScsIHUnVTpcXCcpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3NpeHBhdGguYWJzcGF0aCh1cGF0aCksIHVuaWNvZGUpKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihzYXZlZF9jd2QpCi0gICAgICAgICAgICAgICAgb3Mucm1kaXIoY3dkKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmFic3BhdGgpCi0KLSAgICBkZWYgdGVzdF9yZWFscGF0aChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJmb28iIGluIHJlYWxwYXRoKCJmb28iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGgucmVhbHBhdGgpCi0KICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgogICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9iYXNpYyhzZWxmKToKICAgICAgICAgICAgICMgQmFzaWMgb3BlcmF0aW9uLgpAQCAtNDg2LDcgKzI4MCw4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4gKyAiL2xpbmsteS8uLiIpLCBBQlNURk4gKyAiL2siKQogICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgcGF0aC4KICAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKEFCU1RGTikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlbmFtZShBQlNURk4pICsgIi9saW5rLXkvLi4iKSwgQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2VuYW1lKEFCU1RGTikgKyAiL2xpbmsteS8uLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTVEZOICsgIi9rIikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCiAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2xpbmsteSIpCkBAIC01MjcsMTEgKzMyMiwyNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYS9iIiwgIi4uL2MiKSwgIi4uLyIrY3VyZGlyKyIvYS9iIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiLCAiYi9jIiksICIuLi8uLi9hIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiLCAiYSIpLCAiLiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL3gveS96IiksICcuLi8uLi8uLi9mb28vYmFyL2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL2Zvby9iYXIiKSwgJ2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiLyIpLCAnZm9vL2Jhci9iYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiLyIsICIvZm9vL2Jhci9iYXQiKSwgJy4uLy4uLy4uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveCIpLCAnLi4vZm9vL2Jhci9iYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL3giLCAiL2Zvby9iYXIvYmF0IiksICcuLi8uLi8uLi94JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi8iLCAiLyIpLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvYSIsICIvYSIpLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvYS9iIiwgIi9hL2IiKSwgJy4nKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZ2V0Y3dkID0gcmVhbF9nZXRjd2QKIAorCitjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0KToKKyAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCisgICAgYXR0cmlidXRlcyA9IFsncmVscGF0aCcsICdzYW1lZmlsZScsICdzYW1lb3BlbmZpbGUnLCAnc2FtZXN0YXQnXQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvc2l4UGF0aFRlc3QpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQb3NpeFBhdGhUZXN0LCBQb3NpeENvbW1vblRlc3QpCisKIAogaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG93LnB5IGIvTGliL3Rlc3QvdGVzdF9wb3cucHkKaW5kZXggMzYxYTQ3NS4uMWVlNjdiYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3cucHkKQEAgLTUsMTcgKzUsMTcgQEAKICAgICBkZWYgcG93dGVzdChzZWxmLCB0eXBlKToKICAgICAgICAgaWYgdHlwZSAhPSBmbG9hdDoKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMDAwLCAxMDAwKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3codHlwZShpKSwgMCksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KHR5cGUoaSksIDEpLCB0eXBlKGkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdyh0eXBlKDApLCAxKSwgdHlwZSgwKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3codHlwZSgxKSwgMSksIHR5cGUoMSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZShpKSwgMCksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZShpKSwgMSksIHR5cGUoaSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZSgwKSwgMSksIHR5cGUoMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3codHlwZSgxKSwgMSksIHR5cGUoMSkpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMDAsIDEwMCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KHR5cGUoaSksIDMpLCBpKmkqaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAzKSwgaSppKmkpCiAKICAgICAgICAgICAgIHBvdzIgPSAxCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLDMxKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coMiwgaSksIHBvdzIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMiwgaSksIHBvdzIpCiAgICAgICAgICAgICAgICAgaWYgaSAhPSAzMCA6IHBvdzIgPSBwb3cyKjIKIAogICAgICAgICAgICAgZm9yIG90aGVydHlwZSBpbiBpbnQsIGxvbmc6CkBAIC02NywzMCArNjcsMzAgQEAKIAogICAgIGRlZiB0ZXN0X290aGVyKHNlbGYpOgogICAgICAgICAjIE90aGVyIHRlc3RzLS0gbm90IHZlcnkgc3lzdGVtYXRpYwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coMywzKSAlIDgsIHBvdygzLDMsOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygzLDMpICUgLTgsIHBvdygzLDMsLTgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coMywyKSAlIC0yLCBwb3coMywyLC0yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KC0zLDMpICUgOCwgcG93KC0zLDMsOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygtMywzKSAlIC04LCBwb3coLTMsMywtOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdyg1LDIpICUgLTgsIHBvdyg1LDIsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDMpICUgOCwgcG93KDMsMyw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMywzKSAlIC04LCBwb3coMywzLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMywyKSAlIC0yLCBwb3coMywyLC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTMsMykgJSA4LCBwb3coLTMsMyw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTMsMykgJSAtOCwgcG93KC0zLDMsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyg1LDIpICUgLTgsIHBvdyg1LDIsLTgpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygzTCwzTCkgJSA4LCBwb3coM0wsM0wsOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvdygzTCwzTCkgJSAtOCwgcG93KDNMLDNMLC04KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDNMLDIpICUgLTIsIHBvdygzTCwyLC0yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KC0zTCwzTCkgJSA4LCBwb3coLTNMLDNMLDgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3coLTNMLDNMKSAlIC04LCBwb3coLTNMLDNMLC04KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG93KDVMLDIpICUgLTgsIHBvdyg1TCwyLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coM0wsM0wpICUgOCwgcG93KDNMLDNMLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzTCwzTCkgJSAtOCwgcG93KDNMLDNMLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coM0wsMikgJSAtMiwgcG93KDNMLDIsLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtM0wsM0wpICUgOCwgcG93KC0zTCwzTCw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTNMLDNMKSAlIC04LCBwb3coLTNMLDNMLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coNUwsMikgJSAtOCwgcG93KDVMLDIsLTgpKQogCiAgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMCwgMTEpOgogICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCwgNik6CiAgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoLTcsIDExKToKICAgICAgICAgICAgICAgICAgICAgaWYgaiA+PSAwIGFuZCBrICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGksaikgJSBrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdyhpLGosaykKICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgaWYgaiA+PSAwIGFuZCBrICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGxvbmcoaSksaikgJSBrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdyhsb25nKGkpLGosaykKICAgICAgICAgICAgICAgICAgICAgICAgICkKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIGRlZiB0ZXN0X2J1ZzcwNTIzMShzZWxmKToKICAgICAgICAgIyAtMS4wIHJhaXNlZCB0byBhbiBpbnRlZ2VyIHNob3VsZCBuZXZlciBibG93IHVwLiAgSXQgZGlkIGlmIHRoZQogICAgICAgICAjIHBsYXRmb3JtIHBvdygpIHdhcyBidWdneSwgYW5kIFB5dGhvbiBkaWRuJ3Qgd29ybSBhcm91bmQgaXQuCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGEgPSAtMS4wCiAgICAgICAgICMgVGhlIG5leHQgdHdvIHRlc3RzIGNhbiBzdGlsbCBmYWlsIGlmIHRoZSBwbGF0Zm9ybSBmbG9vcigpCiAgICAgICAgICMgZnVuY3Rpb24gZG9lc24ndCB0cmVhdCBhbGwgbGFyZ2UgaW5wdXRzIGFzIGludGVnZXJzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CmluZGV4IGY2ZGNjOGMuLmUwMTM3ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0xMTcsMTAgKzExNywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICB7fSwgZGljdDIoKSwgZGljdDMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlLCBwcHJpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIC02LCAtNkwsIC02LTZqLCAtMS41LCAieCIsIHVuaSgieCIpLCAoMywpLCBbM10sIHszOiA2fSwKLSAgICAgICAgICAgICAgICAgICAgICAgKDEsMiksIFszLDRdLCB7NTogNiwgNzogOH0sCisgICAgICAgICAgICAgICAgICAgICAgICgxLDIpLCBbMyw0XSwgezU6IDZ9LAogICAgICAgICAgICAgICAgICAgICAgICB0dXBsZTIoKDEsMikpLCB0dXBsZTMoKDEsMikpLCB0dXBsZTMocmFuZ2UoMTAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgIFszLDRdLCBsaXN0MihbMyw0XSksIGxpc3QzKFszLDRdKSwgbGlzdDMocmFuZ2UoMTAwKSksCi0gICAgICAgICAgICAgICAgICAgICAgIHs1OiA2LCA3OiA4fSwgZGljdDIoezU6IDZ9KSwgZGljdDMoezU6IDZ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGljdDIoezU6IDZ9KSwgZGljdDMoezU6IDZ9KSwKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMTAsIC0xMSwgLTEpCiAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICAgICAgICAgIG5hdGl2ZSA9IHJlcHIoc2ltcGxlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKaW5kZXggMzk0YTJmMS4uNzU3ZjkwZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CkBAIC04LDcgKzgsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCi1pbXBvcnQgc3lzCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogCiBOb3REZWZpbmVkID0gb2JqZWN0KCkKQEAgLTEyOCwxMSArMTI3LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmpvaW4oYnVmLmJ1ZiksICdoaSBub3RoaW5nXG4nKQogICAgICAgICBidWYgPSBSZWNvcmRlcihGYWxzZSkKICAgICAgICAgcHJpbnQoJ2hpJywgJ2J5ZScsIGVuZD11J1xuJywgZmlsZT1idWYpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJ1Zi5idWZbMV0sIHVuaWNvZGUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShidWYuYnVmWzNdLCB1bmljb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJ1Zi5idWZbMV0sIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShidWYuYnVmWzNdLCB1bmljb2RlKQogICAgICAgICBkZWwgYnVmLmJ1Zls6XQogICAgICAgICBwcmludChzZXA9dSd4JywgZmlsZT1idWYpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJ1Zi5idWZbLTFdLCB1bmljb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJ1Zi5idWZbLTFdLCB1bmljb2RlKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDAwMTZkNTEuLmFhOTNkMzkKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQpAQCAtMSw2ICsxLDUgQEAKICIiIlRlc3Qgc3VpdGUgZm9yIHRoZSBwcm9maWxlIG1vZHVsZS4iIiIKIAotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgcHN0YXRzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTU3LDcgKzU2LDcgQEAKICAgICAgICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHByb2YsIHN0cmVhbT1zKQogICAgICAgICAgICAgc3RhdHMucHJpbnRfc3RhdHMoKQogICAgICAgICAgICAgcmVzID0gcy5nZXR2YWx1ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5leHBlY3RlZF9saXN0X3NvcnRfb3V0cHV0IGluIHJlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9saXN0X3NvcnRfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IGxpc3Quc29ydDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKIApAQCAtOTQsNyArOTMsNyBAQAogIyBEb24ndCByZW1vdmUgdGhpcyBjb21tZW50LiBFdmVyeXRoaW5nIGJlbG93IGl0IGlzIGF1dG8tZ2VuZXJhdGVkLgogIy0tY3V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFByb2ZpbGVUZXN0LmV4cGVjdGVkX291dHB1dFsncHJpbnRfc3RhdHMnXSA9ICIiIlwKLSAgICAgICAgIDEyNyBmdW5jdGlvbiBjYWxscyAoMTA3IHByaW1pdGl2ZSBjYWxscykgaW4gOTk5Ljc0OSBDUFUgc2Vjb25kcworICAgICAgICAgMTI3IGZ1bmN0aW9uIGNhbGxzICgxMDcgcHJpbWl0aXZlIGNhbGxzKSBpbiA5OTkuNzQ5IHNlY29uZHMKIAogICAgT3JkZXJlZCBieTogc3RhbmRhcmQgbmFtZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQppbmRleCA3YTgwMDNmLi5lNWZjMTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKQEAgLTEsNiArMSw3IEBACiAjIFRlc3QgY2FzZSBmb3IgcHJvcGVydHkKICMgbW9yZSB0ZXN0cyBhcmUgaW4gdGVzdF9kZXNjcgogCitpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCkBAIC04NiwxMiArODcsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQogICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKICAgICAgICAgYmFzZS5zcGFtID0gMjAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQogCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgogICAgICAgICAjIHNlZSAjMTYyMApAQCAtOTksMTQgKzk5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKICAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCiAgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgogICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCkBAIC0xMjYsMTYgKzEzOSw2IEBACiAKIGNsYXNzIFByb3BlcnR5U3ViY2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF9kb2NzdHJpbmdfY29weShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBAUHJvcGVydHlTdWIKLSAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgotICAgICAgICAgICAgICAgICIiInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIiIgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBGb28uc3BhbS5fX2RvY19fLAotICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIpCi0KICAgICBkZWYgdGVzdF9zbG90c19kb2NzdHJpbmdfY29weV9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgpAQCAtMTQ4LDYgKzE1MSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBdHRyaWJ1dGVFcnJvciBub3QgcmFpc2VkIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19jb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5zcGFtLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplIDw9IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3Byb3BlcnR5X3NldHRlcl9jb3BpZXNfZ2V0dGVyX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuX3NwYW0gPSAxCkBAIC0xNzksNiArMTk2LDggQEAKICAgICAgICAgICAgIEZvb1N1Yi5zcGFtLl9fZG9jX18sCiAgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplIDw9IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3Byb3BlcnR5X25ld19nZXR0ZXJfbmV3X2RvY3N0cmluZyhzZWxmKToKIAogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKaW5kZXggYzAwMjQ0Zi4uMDVhYjU5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKQEAgLTEsMTAgKzEsMTQgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorCisjU2tpcCB0aGVzZSB0ZXN0cyBpZiBlaXRoZXIgZmNudGwgb3IgdGVybWlvcyBpcyBub3QgYXZhaWxhYmxlCitmY250bCA9IGltcG9ydF9tb2R1bGUoJ2ZjbnRsJykKK2ltcG9ydF9tb2R1bGUoJ3Rlcm1pb3MnKQorCiBpbXBvcnQgZXJybm8KLWltcG9ydCBmY250bAogaW1wb3J0IHB0eQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc2lnbmFsCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKIAogVEVTVF9TVFJJTkdfMSA9ICJJIHdpc2ggdG8gYnV5IGEgZmlzaCBsaWNlbnNlLlxuIgpAQCAtNjksNyArNzMsNyBAQAogICAgICAgICAgICAgZGVidWcoIkdvdCBzbGF2ZV9mZCAnJWQnIiAlIHNsYXZlX2ZkKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgIiBBbiBvcHRpb25hbCBmZWF0dXJlIGNvdWxkIG5vdCBiZSBpbXBvcnRlZCAiIC4uLiA/Ci0gICAgICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCwgIlBzZXVkby10ZXJtaW5hbHMgKHNlZW1pbmdseSkgbm90IGZ1bmN0aW9uYWwuIgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJQc2V1ZG8tdGVybWluYWxzIChzZWVtaW5nbHkpIG5vdCBmdW5jdGlvbmFsLiIKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuaXNhdHR5KHNsYXZlX2ZkKSwgJ3NsYXZlX2ZkIGlzIG5vdCBhIHR0eScpCiAKQEAgLTgyLDcgKzg2LDcgQEAKICAgICAgICAgZmNudGwuZmNudGwobWFzdGVyX2ZkLCBmY250bC5GX1NFVEZMLCBvcmlnX2ZsYWdzIHwgb3MuT19OT05CTE9DSykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcnLCBzMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHMxKQogICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOOgogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC05MiwxNCArOTYsMTQgQEAKICAgICAgICAgZGVidWcoIldyaXRpbmcgdG8gc2xhdmVfZmQiKQogICAgICAgICBvcy53cml0ZShzbGF2ZV9mZCwgVEVTVF9TVFJJTkdfMSkKICAgICAgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ0kgd2lzaCB0byBidXkgYSBmaXNoIGxpY2Vuc2UuXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVfb3V0cHV0KHMxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSSB3aXNoIHRvIGJ1eSBhIGZpc2ggbGljZW5zZS5cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplX291dHB1dChzMSkpCiAKICAgICAgICAgZGVidWcoIldyaXRpbmcgY2h1bmtlZCBvdXRwdXQiKQogICAgICAgICBvcy53cml0ZShzbGF2ZV9mZCwgVEVTVF9TVFJJTkdfMls6NV0pCiAgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18yWzU6XSkKICAgICAgICAgczIgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ0ZvciBteSBwZXQgZmlzaCwgRXJpYy5cbicsIG5vcm1hbGl6ZV9vdXRwdXQoczIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3IgbXkgcGV0IGZpc2gsIEVyaWMuXG4nLCBub3JtYWxpemVfb3V0cHV0KHMyKSkKIAogICAgICAgICBvcy5jbG9zZShzbGF2ZV9mZCkKICAgICAgICAgb3MuY2xvc2UobWFzdGVyX2ZkKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wd2QucHkgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQppbmRleCAyNTVhMzRjLi42N2UxMWI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B3ZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQpAQCAtMSw3ICsxLDggQEAKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAotaW1wb3J0IHB3ZAorcHdkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3B3ZCcpCiAKIGNsYXNzIFB3ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMywxOSArMTQsMTkgQEAKICAgICAgICAgZm9yIGUgaW4gZW50cmllczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGUpLCA3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzBdLCBlLnB3X25hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X25hbWUsIGJhc2VzdHJpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfbmFtZSwgYmFzZXN0cmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsxXSwgZS5wd19wYXNzd2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X3Bhc3N3ZCwgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19wYXNzd2QsIGJhc2VzdHJpbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbMl0sIGUucHdfdWlkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZS5wd191aWQsIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd191aWQsIGludCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVszXSwgZS5wd19naWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X2dpZCwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X2dpZCwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzRdLCBlLnB3X2dlY29zKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoZS5wd19nZWNvcywgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19nZWNvcywgYmFzZXN0cmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVs1XSwgZS5wd19kaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X2RpciwgYmFzZXN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19kaXIsIGJhc2VzdHJpbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNl0sIGUucHdfc2hlbGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShlLnB3X3NoZWxsLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X3NoZWxsLCBiYXNlc3RyaW5nKQogCiAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yaywgYmVjYXVzZSBvZiBkdXBsaWNhdGUgZW50cmllcwogICAgICAgICAgICAgIyBmb3Igb25lIHVpZApAQCAtNDMsOCArNDQsOCBAQAogICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgogICAgICAgICAgICAgaWYgbm90IGVbMF0gb3IgZVswXSA9PSAnKyc6CiAgICAgICAgICAgICAgICAgY29udGludWUgIyBza2lwIE5JUyBlbnRyaWVzIGV0Yy4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhwd2QuZ2V0cHduYW0oZS5wd19uYW1lKSBpbiBlbnRyaWVzYnluYW1lW2UucHdfbmFtZV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocHdkLmdldHB3dWlkKGUucHdfdWlkKSBpbiBlbnRyaWVzYnl1aWRbZS5wd191aWRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwd2QuZ2V0cHduYW0oZS5wd19uYW1lKSwgZW50cmllc2J5bmFtZVtlLnB3X25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwd2QuZ2V0cHd1aWQoZS5wd191aWQpLCBlbnRyaWVzYnl1aWRbZS5wd191aWRdKQogCiAgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHB3ZC5nZXRwd3VpZCkKQEAgLTgzLDExICs4NCwxMyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHduYW0sIGZha2VuYW1lKQogCi0gICAgICAgICMgQ2hvb3NlIGEgbm9uLWV4aXN0ZW50IHVpZC4KLSAgICAgICAgZmFrZXVpZCA9IDQxMjcKLSAgICAgICAgd2hpbGUgZmFrZXVpZCBpbiBieXVpZHM6Ci0gICAgICAgICAgICBmYWtldWlkID0gKGZha2V1aWQgKiAzKSAlIDB4MTAwMDAKLQorICAgICAgICAjIEluIHNvbWUgY2FzZXMsIGJ5dWlkcyBpc24ndCBhIGNvbXBsZXRlIGxpc3Qgb2YgYWxsIHVzZXJzIGluIHRoZQorICAgICAgICAjIHN5c3RlbSwgc28gaWYgd2UgdHJ5IHRvIHBpY2sgYSB2YWx1ZSBub3QgaW4gYnl1aWRzICh2aWEgYSBwZXJ0dXJiaW5nCisgICAgICAgICMgbG9vcCwgc2F5KSwgcHdkLmdldHB3dWlkKCkgbWlnaHQgc3RpbGwgYmUgYWJsZSB0byBmaW5kIGRhdGEgZm9yIHRoYXQKKyAgICAgICAgIyB1aWQuIFVzaW5nIHN5cy5tYXhpbnQgbWF5IHByb3Zva2UgdGhlIHNhbWUgcHJvYmxlbXMsIGJ1dCBob3BlZnVsbHkKKyAgICAgICAgIyBpdCB3aWxsIGJlIGEgbW9yZSByZXBlYXRhYmxlIGZhaWx1cmUuCisgICAgICAgIGZha2V1aWQgPSBzeXMubWF4aW50CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZmFrZXVpZCwgYnl1aWRzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcHdkLmdldHB3dWlkLCBmYWtldWlkKQogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5M2t3YXJuLnB5IGIvTGliL3Rlc3QvdGVzdF9weTNrd2Fybi5weQppbmRleCAzYTEyMjUxLi4yYWZkOGExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5M2t3YXJuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHkza3dhcm4ucHkKQEAgLTEsMTMgKzEsMTAgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKGNoZWNrX3dhcm5pbmdzLCBDbGVhbkltcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0KQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfcHkza193YXJuaW5ncywgQ2xlYW5JbXBvcnQsIHJ1bl91bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiAKLWZyb20gY29udGV4dGxpYiBpbXBvcnQgbmVzdGVkCi0KIGlmIG5vdCBzeXMucHkza3dhcm5pbmc6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoJyVzIG11c3QgYmUgcnVuIHdpdGggdGhlIC0zIGZsYWcnICUgX19uYW1lX18pCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJyVzIG11c3QgYmUgcnVuIHdpdGggdGhlIC0zIGZsYWcnICUgX19uYW1lX18pCiAKIHRyeToKICAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBfX3dhcm5pbmdyZWdpc3RyeV9fIGFzIF9yZWdpc3RyeQpAQCAtNDQsODggKzQxLDY4IEBACiAKICAgICBkZWYgdGVzdF9iYWNrcXVvdGUoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ2JhY2txdW90ZSBub3Qgc3VwcG9ydGVkIGluIDMueDsgdXNlIHJlcHIoKScKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgICAgIGV4ZWMgImAyYCIgaW4ge30KLSAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfcGFyZW5fYXJnX25hbWVzKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICdwYXJlbnRoZXNpemVkIGFyZ3VtZW50IG5hbWVzIGFyZSBpbnZhbGlkIGluIDMueCcKICAgICAgICAgZGVmIGNoZWNrKHMpOgotICAgICAgICAgICAgZXhlYyBzIGluIHt9Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgY2hlY2soImRlZiBmKCh4KSk6IHBhc3MiKQotICAgICAgICAgICAgY2hlY2soImRlZiBmKCgoKHgpKSksICh5KSk6IHBhc3MiKQotICAgICAgICAgICAgY2hlY2soImRlZiBmKCh4KSwgKCgoeSkpKSwgbT0zMik6IHBhc3MiKQotICAgICAgICAgICAgIyBTb21ldGhpbmcgbGlrZSBkZWYgZigoYSwgKGIpKSk6IHBhc3Mgd2lsbCByYWlzZSB0aGUgdHVwbGUKLSAgICAgICAgICAgICMgdW5wYWNraW5nIHdhcm5pbmcuCisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKGV4cGVjdGVkLCBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgZXhlYyBzIGluIHt9CisgICAgICAgIGNoZWNrKCJkZWYgZigoeCkpOiBwYXNzIikKKyAgICAgICAgY2hlY2soImRlZiBmKCgoKHgpKSksICh5KSk6IHBhc3MiKQorICAgICAgICBjaGVjaygiZGVmIGYoKHgpLCAoKCh5KSkpLCBtPTMyKTogcGFzcyIpCisgICAgICAgICMgU29tZXRoaW5nIGxpa2UgZGVmIGYoKGEsIChiKSkpOiBwYXNzIHdpbGwgcmFpc2UgdGhlIHR1cGxlCisgICAgICAgICMgdW5wYWNraW5nIHdhcm5pbmcuCiAKLSAgICBkZWYgdGVzdF9ib29sX2Fzc2lnbihzZWxmKToKKyAgICBkZWYgdGVzdF9mb3JiaWRkZW5fbmFtZXMoc2VsZik6CiAgICAgICAgICMgU28gd2UgZG9uJ3Qgc2NyZXcgdXAgb3VyIGdsb2JhbHMKICAgICAgICAgZGVmIHNhZmVfZXhlYyhleHByKToKICAgICAgICAgICAgIGRlZiBmKCoqa3dhcmdzKTogcGFzcwogICAgICAgICAgICAgZXhlYyBleHByIGluIHsnZicgOiBmfQogCi0gICAgICAgIGV4cGVjdGVkID0gImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IgotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKLSAgICAgICAgICAgIHNhZmVfZXhlYygiVHJ1ZSA9IEZhbHNlIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2FmZV9leGVjKCJGYWxzZSA9IFRydWUiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2FmZV9leGVjKCJvYmouRmFsc2UgPSBUcnVlIikKLSAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6IHBhc3MKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNhZmVfZXhlYygib2JqLlRydWUgPSBGYWxzZSIpCi0gICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOiBwYXNzCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiZGVmIEZhbHNlKCk6IHBhc3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiBUcnVlKCk6IHBhc3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImNsYXNzIEZhbHNlOiBwYXNzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2FmZV9leGVjKCJjbGFzcyBUcnVlOiBwYXNzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgZihUcnVlPTQzKTogcGFzcyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCi0gICAgICAgICAgICB3LnJlc2V0KCkKLSAgICAgICAgICAgIHNhZmVfZXhlYygiZGVmIGYoRmFsc2U9Tm9uZSk6IHBhc3MiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImYoRmFsc2U9VHJ1ZSkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQotICAgICAgICAgICAgdy5yZXNldCgpCi0gICAgICAgICAgICBzYWZlX2V4ZWMoImYoVHJ1ZT0xKSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgIHRlc3RzID0gWygiVHJ1ZSIsICJhc3NpZ25tZW50IHRvIFRydWUgb3IgRmFsc2UgaXMgZm9yYmlkZGVuIGluIDMueCIpLAorICAgICAgICAgICAgICAgICAoIkZhbHNlIiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IiksCisgICAgICAgICAgICAgICAgICgibm9ubG9jYWwiLCAibm9ubG9jYWwgaXMgYSBrZXl3b3JkIGluIDMueCIpXQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCcnLCBTeW50YXhXYXJuaW5nKSkgYXMgdzoKKyAgICAgICAgICAgIGZvciBrZXl3b3JkLCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoInswfSA9IEZhbHNlIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJvYmouezB9ID0gVHJ1ZSIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgezB9KCk6IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJjbGFzcyB7MH06IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2FmZV9leGVjKCJkZWYgZih7MH09NDMpOiBwYXNzIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKE5vbmUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHcucmVzZXQoKQogCiAKICAgICBkZWYgdGVzdF90eXBlX2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ3R5cGUgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoaW50IDwgc3RyLCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHR5cGUgPCBvYmplY3QsIHcsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb2JqZWN0X2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ2NvbXBhcmluZyB1bmVxdWFsIHR5cGVzIG5vdCBzdXBwb3J0ZWQgaW4gMy54JwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzdHIgPCBbXSwgdywgZXhwZWN0ZWQpCiAgICAgICAgICAgICB3LnJlc2V0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhvYmplY3QoKSA8ICgxLCAyKSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9kaWN0X2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ2RpY3QgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoe30gPCB7MjozfSwgdywgZXhwZWN0ZWQpCiAgICAgICAgICAgICB3LnJlc2V0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh7fSA8PSB7fSwgdywgZXhwZWN0ZWQpCkBAIC0xNDIsNyArMTE5LDcgQEAKICAgICAgICAgICAgIHJldHVybiBnCiAgICAgICAgIGNlbGwwLCA9IGYoMCkuZnVuY19jbG9zdXJlCiAgICAgICAgIGNlbGwxLCA9IGYoMSkuZnVuY19jbG9zdXJlCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGNlbGwwID09IGNlbGwxLCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGNlbGwwIDwgY2VsbDEsIHcsIGV4cGVjdGVkKQpAQCAtMTUzLDcgKzEzMCw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGRlZiBnKHgpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLmZ1bmNfY29kZSA8IGcuZnVuY19jb2RlLCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlIDw9IGcuZnVuY19jb2RlLCB3LCBleHBlY3RlZCkKQEAgLTE2Nyw3ICsxNDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAnb3JkZXIgY29tcGFyaXNvbnMgbm90IHN1cHBvcnRlZCBpbiAzLngnKQogICAgICAgICBmdW5jID0gZXZhbAogICAgICAgICBtZXRoID0ge30uZ2V0Ci0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGZ1bmMgPCBtZXRoLCB3LCBleHBlY3RlZCkKICAgICAgICAgICAgIHcucmVzZXQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGZ1bmMgPiBtZXRoLCB3LCBleHBlY3RlZCkKQEAgLTE4MiwxMiArMTU5LDIyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZyhsYW0gPT0gZnVuYywgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5nKGxhbSAhPSBmdW5jLCB3KQogCisgICAgZGVmIHRlc3RfZnJhbWVfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgdGVtcGxhdGUgPSAiJXMgaGFzIGJlZW4gcmVtb3ZlZCBpbiAzLngiCisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKDApCisgICAgICAgIGZvciBhdHRyIGluICgiZl9leGNfdHJhY2ViYWNrIiwgImZfZXhjX3ZhbHVlIiwgImZfZXhjX3R5cGUiKToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gdGVtcGxhdGUgJSBhdHRyCisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhnZXRhdHRyKGYsIGF0dHIpLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc2V0YXR0cihmLCBhdHRyLCBOb25lKSwgdywgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9zb3J0X2NtcF9hcmcoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gInRoZSBjbXAgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZCBpbiAzLngiCiAgICAgICAgIGxzdCA9IHJhbmdlKDUpCiAgICAgICAgIGNtcCA9IGxhbWJkYSB4LHk6IC0xCiAKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcobHN0LnNvcnQoY21wPWNtcCksIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc29ydGVkKGxzdCwgY21wPWNtcCksIHcsIGV4cGVjdGVkKQpAQCAtMTk4LDcgKzE4NSw3IEBACiAKICAgICBkZWYgdGVzdF9zeXNfZXhjX2NsZWFyKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICdzeXMuZXhjX2NsZWFyKCkgbm90IHN1cHBvcnRlZCBpbiAzLng7IHVzZSBleGNlcHQgY2xhdXNlcycKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc3lzLmV4Y19jbGVhcigpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X21ldGhvZHNfbWVtYmVycyhzZWxmKToKQEAgLTIwNywxNyArMTk0LDE3IEBACiAgICAgICAgICAgICBfX21ldGhvZHNfXyA9IFsnYSddCiAgICAgICAgICAgICBfX21lbWJlcnNfXyA9IFsnYiddCiAgICAgICAgIGMgPSBDKCkKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZGlyKGMpLCB3LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3NvZnRzcGFjZShzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAnZmlsZS5zb2Z0c3BhY2Ugbm90IHN1cHBvcnRlZCBpbiAzLngnCiAgICAgICAgIHdpdGggZmlsZShfX2ZpbGVfXykgYXMgZjoKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5zb2Z0c3BhY2UsIHcsIGV4cGVjdGVkKQogICAgICAgICAgICAgZGVmIHNldCgpOgogICAgICAgICAgICAgICAgIGYuc29mdHNwYWNlID0gMAotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXQoKSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9zbGljZV9tZXRob2RzKHNlbGYpOgpAQCAtMjMzLDcgKzIyMCw3IEBACiAgICAgICAgIGV4cGVjdGVkID0gImluIDMueCwgX197MH1zbGljZV9fIGhhcyBiZWVuIHJlbW92ZWQ7IHVzZSBfX3swfWl0ZW1fXyIKIAogICAgICAgICBmb3Igb2JqIGluIChTcGFtKCksIEVnZygpKToKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcob2JqWzE6Ml0sIHcsIGV4cGVjdGVkLmZvcm1hdCgnZ2V0JykpCiAgICAgICAgICAgICAgICAgdy5yZXNldCgpCiAgICAgICAgICAgICAgICAgZGVsIG9ialszOjRdCkBAIC0yNDQsMjQgKzIzMSwyMyBAQAogCiAgICAgZGVmIHRlc3RfdHVwbGVfcGFyYW1ldGVyX3VucGFja2luZyhzZWxmKToKICAgICAgICAgZXhwZWN0ZWQgPSAidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIKLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKICAgICAgICAgICAgIGV4ZWMgImRlZiBmKChhLCBiKSk6IHBhc3MiCi0gICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9idWZmZXIoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJ2J1ZmZlcigpIG5vdCBzdXBwb3J0ZWQgaW4gMy54JwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhidWZmZXIoJ2EnKSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9maWxlX3hyZWFkbGluZXMoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gKCJmLnhyZWFkbGluZXMoKSBub3Qgc3VwcG9ydGVkIGluIDMueCwgIgogICAgICAgICAgICAgICAgICAgICAidHJ5ICdmb3IgbGluZSBpbiBmJyBpbnN0ZWFkIikKICAgICAgICAgd2l0aCBmaWxlKF9fZmlsZV9fKSBhcyBmOgotICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLnhyZWFkbGluZXMoKSwgdywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9oYXNoX2luaGVyaXRhbmNlKHNlbGYpOgotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgICMgV2l0aCBvYmplY3QgYXMgdGhlIGJhc2UgY2xhc3MKICAgICAgICAgICAgIGNsYXNzIFdhcm5Pbmx5Q21wKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiBwYXNzCkBAIC0zMDksNiArMjk1LDE4IEBACiAgICAgICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOiBwYXNzCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKIAorICAgIGRlZiB0ZXN0X29wZXJhdG9yKHNlbGYpOgorICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBpc0NhbGxhYmxlLCBzZXF1ZW5jZUluY2x1ZGVzCisKKyAgICAgICAgY2FsbGFibGVfd2FybiA9ICgib3BlcmF0b3IuaXNDYWxsYWJsZSgpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMy54LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykuIikKKyAgICAgICAgc2VxX3dhcm4gPSAoIm9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMoKSBpcyBub3Qgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAgICAgImluIDMueC4gVXNlIG9wZXJhdG9yLmNvbnRhaW5zKCkuIikKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhpc0NhbGxhYmxlKHNlbGYpLCB3LCBjYWxsYWJsZV93YXJuKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc2VxdWVuY2VJbmNsdWRlcyhyYW5nZSgzKSwgMiksIHcsIHNlcV93YXJuKQorCiAKIGNsYXNzIFRlc3RTdGRsaWJSZW1vdmFscyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTMyNSw3ICszMjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU9DVEwnLCAnanBlZycsICdwYW5lbCcsICdwYW5lbHBhcnNlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlYWRjZCcsICdTVicsICd0b3JnYicsICdXQUlUJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXJ3aW4nIDogKCdhdXRvR0lMJywgJ0NhcmJvbicsICdPU0FUZXJtaW5vbG9neScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY2dsdWUnLCAnTmF2JywgJ01hY09TJywgJ2FlcGFjaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY2dsdWUnLCAnTmF2JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWNPUyBzaG91bGQgKGFuZCBkb2VzKSBnaXZlIGEgUHkza1dhcm5pbmcsIGJ1dCBvbmUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZWFybGllciB0ZXN0cyBhbHJlYWR5IGltcG9ydHMgdGhlIE1hY09TIGV4dGVuc2lvbiB3aGljaCBjYXVzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIHRlc3QgdG8gZmFpbC4gRGlzYWJsaW5nIHRoZSB0ZXN0IGZvciAnTWFjT1MnIGF2b2lkcyB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3B1cmlvdXMgdGVzdCBmYWlsdXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjJ01hY09TJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FlcGFjaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZXRvb2xzJywgJ2FldHlwZXMnLCAnYXBwbGVzaW5nbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGV0cmF3bWFpbicsICdhcHBsZXRydW5uZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJndmVtdWxhdG9yJywgJ2JnZW5sb2NhdGlvbnMnLApAQCAtMzQ3LDcgKzM1MSw3IEBACiAgICAgZGVmIGNoZWNrX3JlbW92YWwoc2VsZiwgbW9kdWxlX25hbWUsIG9wdGlvbmFsPUZhbHNlKToKICAgICAgICAgIiIiTWFrZSBzdXJlIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCB3aGVuIGltcG9ydGVkLCByYWlzZXMgYQogICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcgYW5kIHNwZWNpZmllcyBpdHNlbGYgaW4gdGhlIG1lc3NhZ2UuIiIiCi0gICAgICAgIHdpdGggbmVzdGVkKENsZWFuSW1wb3J0KG1vZHVsZV9uYW1lKSwgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKSk6CisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQobW9kdWxlX25hbWUpLCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIi4rIChtb2R1bGV8cGFja2FnZSkgLisgcmVtb3ZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIF9fbmFtZV9fKQogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIi4rIHJlbW92ZWQgLisgKG1vZHVsZXxwYWNrYWdlKSIsCkBAIC0zNTUsOSArMzU5LDkgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBsZXZlbD0wKQogICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZyBhcyBleGM6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1vZHVsZV9uYW1lIGluIGV4Yy5hcmdzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgd2FybmluZyBkaWRuJ3QgY29udGFpbiBtb2R1bGUgbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBleGMuYXJnc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyB3YXJuaW5nIGRpZG4ndCBjb250YWluIG1vZHVsZSBuYW1lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBtb2R1bGVfbmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm9uLW9wdGlvbmFsIG1vZHVsZSB7MH0gcmFpc2VkIGFuICIKQEAgLTM2Nyw3ICszNzEsNyBAQAogICAgICAgICAgICAgICAgICMgVGhleSB3b24ndCByZXJ1biB0aGVpciBpbml0IGNvZGUgZXZlbiB3aXRoIENsZWFuSW1wb3J0LgogICAgICAgICAgICAgICAgIGlmIG5vdCBjaGVja19kZXByZWNhdGVkX21vZHVsZShtb2R1bGVfbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGVwcmVjYXRpb25XYXJuaW5nIG5vdCByYWlzZWQgZm9yIHswfSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG1vZHVsZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobW9kdWxlX25hbWUpKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1faW5kZXBlbmRlbnRfcmVtb3ZhbHMoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIG1vZHVsZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgcmFpc2UKQEAgLTM5MSwyNSArMzk1LDE0IEBACiAgICAgICAgIGZvciBwYXRoX21vZCBpbiAoIm50cGF0aCIsICJtYWNwYXRoIiwgIm9zMmVteHBhdGgiLCAicG9zaXhwYXRoIik6CiAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKHBhdGhfbW9kKQogICAgICAgICAgICAgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KG1vZCkKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKICAgICAgICAgICAgICAgICBtb2Qud2FsaygiY3Jhc2hlcnMiLCBkdW1ibywgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHN0cih3Lm1lc3NhZ2UpLCBtc2cpCi0KLSAgICBkZWYgdGVzdF9jb21tYW5kc19tZW1iZXJzKHNlbGYpOgotICAgICAgICBpbXBvcnQgY29tbWFuZHMKLSAgICAgICAgIyBjb21tYW5kcyBtb2R1bGUgdGVzdHMgbWF5IGhhdmUgYWxyZWFkeSB0cmlnZ2VyZWQgdGhpcyB3YXJuaW5nCi0gICAgICAgIHJlc2V0X21vZHVsZV9yZWdpc3RyeShjb21tYW5kcykKLSAgICAgICAgbWVtYmVycyA9IHsibWsyYXJnIiA6IDIsICJta2FyZyIgOiAxLCAiZ2V0c3RhdHVzIiA6IDF9Ci0gICAgICAgIGZvciBuYW1lLCBhcmdfY291bnQgaW4gbWVtYmVycy5pdGVtcygpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIpCi0gICAgICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoY29tbWFuZHMsIG5hbWUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nLCBmdW5jLCAqKFtOb25lXSphcmdfY291bnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgbXNnKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX21vdmUoc2VsZik6CiAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGFkZAogICAgICAgICAjIHJlZHVjZSB0ZXN0cyBtYXkgaGF2ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGlzIHdhcm5pbmcKLSAgICAgICAgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KHVuaXR0ZXN0KQorICAgICAgICByZXNldF9tb2R1bGVfcmVnaXN0cnkodW5pdHRlc3QuY2FzZSkKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgInJlZHVjZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcsIHJlZHVjZSwgYWRkLCByYW5nZSgxMCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weSBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CmluZGV4IDZhOTcxMzcuLjZhYTk2ZDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICcnJyBzdWNjZWVkIGlmZiBoYXNhdHRyKG9iaixhdHRyKSBvciBhdHRyIGluIGlnbm9yZS4gJycnCiAgICAgICAgIGlmIGF0dHIgaW4gaWdub3JlOiByZXR1cm4KICAgICAgICAgaWYgbm90IGhhc2F0dHIob2JqLCBhdHRyKTogcHJpbnQgIj8/PyIsIGF0dHIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIob2JqLCBhdHRyKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob2JqLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCBoYXNhdHRyKCVyLCAlciknICUgKG9iaiwgYXR0cikpCiAKIApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBpZiBrZXkgaW4gaWdub3JlOiByZXR1cm4KICAgICAgICAgaWYga2V5IG5vdCBpbiBvYmo6CiAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIqKioiLCBrZXkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtleSBpbiBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBvYmopCiAKICAgICBkZWYgYXNzZXJ0RXF1YWxzT3JJZ25vcmVkKHNlbGYsIGEsIGIsIGlnbm9yZSk6CiAgICAgICAgICcnJyBzdWNjZWVkIGlmZiBhID09IGIgb3IgYSBpbiBpZ25vcmUgb3IgYiBpbiBpZ25vcmUgJycnCkBAIC05NCwxMiArOTQsMTIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGFzYXR0cihtb2R1bGUsIG5hbWUsIGlnbm9yZSkKICAgICAgICAgICAgIHB5X2l0ZW0gPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHB5Y2xici5GdW5jdGlvbik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UocHlfaXRlbSwgKEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweV9pdGVtLCAoRnVuY3Rpb25UeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlKSkKICAgICAgICAgICAgICAgICBpZiBweV9pdGVtLl9fbW9kdWxlX18gIT0gbW9kdWxlTmFtZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIHNraXAgZnVuY3Rpb25zIHRoYXQgY2FtZSBmcm9tIHNvbWV3aGVyZSBlbHNlCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocHlfaXRlbS5fX21vZHVsZV9fLCB2YWx1ZS5tb2R1bGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweV9pdGVtLl9fbW9kdWxlX18sIHZhbHVlLm1vZHVsZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UocHlfaXRlbSwgKENsYXNzVHlwZSwgdHlwZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweV9pdGVtLCAoQ2xhc3NUeXBlLCB0eXBlKSkKICAgICAgICAgICAgICAgICBpZiBweV9pdGVtLl9fbW9kdWxlX18gIT0gbW9kdWxlTmFtZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIHNraXAgY2xhc3NlcyB0aGF0IGNhbWUgZnJvbSBzb21ld2hlcmUgZWxzZQogCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXEoZm91bmRNZXRob2RzLCBhY3R1YWxNZXRob2RzLCBpZ25vcmUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQogCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzT3JJZ25vcmVkKHB5X2l0ZW0uX19uYW1lX18sIHZhbHVlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZSkKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiAgICAgZGVmIHRlc3RfZWFzeShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgncHljbGJyJykKLSAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZG9jdGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJEb2NUZXN0Q2FzZSIsKSkKICAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZwogICAgICAgICByZmM4MjIgPSBpbXBvcnRfbW9kdWxlKCdyZmM4MjInLCBkZXByZWNhdGVkPVRydWUpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3JmYzgyMicsIHJmYzgyMikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IGQyM2RlNzQuLjA2ODU0ODggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMTAsNyArMTAsOCBAQAogaW1wb3J0IHhtbC5ldHJlZQogaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGZvcmdldCwgcm10cmVlLCBFbnZpcm9ubWVudFZhckd1YXJkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoCisgICAgVEVTVEZOLCBmb3JnZXQsIHJtdHJlZSwgRW52aXJvbm1lbnRWYXJHdWFyZCwgcmVhcF9jaGlsZHJlbikKIAogZnJvbSB0ZXN0IGltcG9ydCBweWRvY19tb2QKIApAQCAtMTc5LDggKzE4MCwxMSBAQAogICAgIG91dHB1dCBvZiBweWRvYy4KICAgICAiIiIKICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsIHB5ZG9jLl9fZmlsZV9fLCAiICIuam9pbihhcmdzKSwgbW9kdWxlX25hbWVdCi0gICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKLSAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCkKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHJlYXBfY2hpbGRyZW4oKQogCiBkZWYgZ2V0X3B5ZG9jX2h0bWwobW9kdWxlKToKICAgICAiUmV0dXJucyBweWRvYyBnZW5lcmF0ZWQgb3V0cHV0IGFzIGh0bWwiCkBAIC0yMTYsNiArMjIwLDggQEAKIAogY2xhc3MgUHlEb2NEb2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X2h0bWxfZG9jKHNlbGYpOgogICAgICAgICByZXN1bHQsIGRvY19sb2MgPSBnZXRfcHlkb2NfaHRtbChweWRvY19tb2QpCiAgICAgICAgIG1vZF9maWxlID0gaW5zcGVjdC5nZXRhYnNmaWxlKHB5ZG9jX21vZCkKQEAgLTIyOSw2ICsyMzUsOCBAQAogICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfaHRtbCwgcmVzdWx0KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3RleHRfZG9jKHNlbGYpOgogICAgICAgICByZXN1bHQsIGRvY19sb2MgPSBnZXRfcHlkb2NfdGV4dChweWRvY19tb2QpCiAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF90ZXh0X3BhdHRlcm4gJSBcCkBAIC0yNTgsOCArMjY2LDggQEAKICAgICAgICAgICAgICgnaV9hbV9ub3RfaGVyZScsICdpX2FtX25vdF9oZXJlJyksCiAgICAgICAgICAgICAoJ3Rlc3QuaV9hbV9ub3RfaGVyZV9laXRoZXInLCAnaV9hbV9ub3RfaGVyZV9laXRoZXInKSwKICAgICAgICAgICAgICgndGVzdC5pX2FtX25vdF9oZXJlLm5laXRoZXJfYW1faScsICdpX2FtX25vdF9oZXJlLm5laXRoZXJfYW1faScpLAotICAgICAgICAgICAgKCdpX2FtX25vdF9oZXJlLnswfScuZm9ybWF0KG1vZG5hbWUpLCAnaV9hbV9ub3RfaGVyZS57MH0nLmZvcm1hdChtb2RuYW1lKSksCi0gICAgICAgICAgICAoJ3Rlc3QuezB9Jy5mb3JtYXQobW9kbmFtZSksIG1vZG5hbWUpLAorICAgICAgICAgICAgKCdpX2FtX25vdF9oZXJlLnt9Jy5mb3JtYXQobW9kbmFtZSksICdpX2FtX25vdF9oZXJlLnt9Jy5mb3JtYXQobW9kbmFtZSkpLAorICAgICAgICAgICAgKCd0ZXN0Lnt9Jy5mb3JtYXQobW9kbmFtZSksIG1vZG5hbWUpLAogICAgICAgICAgICAgKQogCiAgICAgICAgIEBjb250ZXh0bWFuYWdlcgpAQCAtMjcwLDIxICsyNzgsMjAgQEAKICAgICAgICAgICAgIHN5cy5wYXRoLnBvcCgwKQogICAgICAgICAgICAgcm10cmVlKGRpcikKIAotICAgICAgICB3aXRoIG5ld2RpcmlucGF0aChURVNURk4pOgotICAgICAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTlBBVEgnLCBURVNURk4pCi0gICAgICAgICAgICAgICAgZnVsbG1vZG5hbWUgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBtb2RuYW1lKQotICAgICAgICAgICAgICAgIHNvdXJjZWZuID0gZnVsbG1vZG5hbWUgKyBvcy5leHRzZXAgKyAicHkiCi0gICAgICAgICAgICAgICAgZm9yIGltcG9ydHN0cmluZywgZXhwZWN0ZWRpbm1zZyBpbiB0ZXN0cGFpcnM6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNvdXJjZWZuLCAndycpCi0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB7MH1cbiIuZm9ybWF0KGltcG9ydHN0cmluZykpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5fcHlkb2MobW9kbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcmdldChtb2RuYW1lKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGJhZGltcG9ydF9wYXR0ZXJuICUgKG1vZG5hbWUsIGV4cGVjdGVkaW5tc2cpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKyAgICAgICAgd2l0aCBuZXdkaXJpbnBhdGgoVEVTVEZOKSwgRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gVEVTVEZOCisgICAgICAgICAgICBmdWxsbW9kbmFtZSA9IG9zLnBhdGguam9pbihURVNURk4sIG1vZG5hbWUpCisgICAgICAgICAgICBzb3VyY2VmbiA9IGZ1bGxtb2RuYW1lICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICAgICAgZm9yIGltcG9ydHN0cmluZywgZXhwZWN0ZWRpbm1zZyBpbiB0ZXN0cGFpcnM6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oc291cmNlZm4sICd3JykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJpbXBvcnQge31cbiIuZm9ybWF0KGltcG9ydHN0cmluZykpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5fcHlkb2MobW9kbmFtZSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmb3JnZXQobW9kbmFtZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGJhZGltcG9ydF9wYXR0ZXJuICUgKG1vZG5hbWUsIGV4cGVjdGVkaW5tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfaW5wdXRfc3RyaXAoc2VsZik6CiAgICAgICAgIG1pc3NpbmdfbW9kdWxlID0gIiB0ZXN0LmlfYW1fbm90X2hlcmUgIgpAQCAtMzE0LDcgKzMyMSw3IEBACiAgICAgICAgICMgQ2hlY2sgdGhhdCBweWRvY2ZvZGRlciBtb2R1bGUgY2FuIGJlIGRlc2NyaWJlZAogICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHB5ZG9jZm9kZGVyCiAgICAgICAgIGRvYyA9IHB5ZG9jLnJlbmRlcl9kb2MocHlkb2Nmb2RkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygicHlkb2Nmb2RkZXIiIGluIGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigicHlkb2Nmb2RkZXIiLCBkb2MpCiAKICAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBDOiAiQ2xhc3NpYyBjbGFzcyIKQEAgLTMyMiw3ICszMjksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKEMpLCAnY2xhc3MgQycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoYyksICdpbnN0YW5jZSBvZiBDJykKICAgICAgICAgZXhwZWN0ZWQgPSAnaW5zdGFuY2Ugb2YgQyBpbiBtb2R1bGUgJXMnICUgX19uYW1lX18KLSAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkIGluIHB5ZG9jLnJlbmRlcl9kb2MoYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHB5ZG9jLnJlbmRlcl9kb2MoYykpCiAKICAgICBkZWYgdGVzdF9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOiAiTmV3LXN0eWxlIGNsYXNzIgpAQCAtMzMxLDcgKzMzOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoQyksICdjbGFzcyBDJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShjKSwgJ0MnKQogICAgICAgICBleHBlY3RlZCA9ICdDIGluIG1vZHVsZSAlcyBvYmplY3QnICUgX19uYW1lX18KLSAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkIGluIHB5ZG9jLnJlbmRlcl9kb2MoYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHB5ZG9jLnJlbmRlcl9kb2MoYykpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CmluZGV4IDA2MjhhNTcuLjg0MGE3YTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKQEAgLTQsNyArNCw2IEBACiBpbXBvcnQgU3RyaW5nSU8sIHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBweWV4cGF0CiBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAogCiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBzb3J0ZGljdCwgcnVuX3VuaXR0ZXN0CkBAIC0yMywxNyArMjIsMTcgQEAKICAgICBkZWYgdGVzdF9yZXR1cm5zX3VuaWNvZGUoc2VsZik6CiAgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnJldHVybnNfdW5pY29kZSA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLnJldHVybnNfdW5pY29kZSwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlLCB5KQogCiAgICAgZGVmIHRlc3Rfb3JkZXJlZF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSB4Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcywgeSkKIAogICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzLCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgeSkKIAogCiBkYXRhID0gJycnXApAQCAtMTQxLDIzICsxNDAsMjMgQEAKIAogICAgICAgICAjIFZlcmlmeSBvdXRwdXQKICAgICAgICAgb3AgPSBvdXQub3V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzBdLCAnUEk6IFwneG1sLXN0eWxlc2hlZXRcJyBcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMV0sICJDb21tZW50OiAnIGNvbW1lbnQgZGF0YSAnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKCdub3RhdGlvbicsIE5vbmUsICdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAoJ3VucGFyc2VkX2VudGl0eScsIE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUsICdub3RhdGlvbicpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNF0sICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXFx4ZTFcXHhiZFxceDgwJ30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs1XSwgIk5TIGRlY2w6ICdteW5zJyAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogJ0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzhdLCAiRW5kIGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogJ215bnMnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogJ3N1YjInIHt9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiAnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE0XSwgIkVuZCBlbGVtZW50OiAnc3ViMiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxNl0sICJFbmQgZWxlbWVudDogJ3Jvb3QnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFswXSwgJ1BJOiBcJ3htbC1zdHlsZXNoZWV0XCcgXCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMV0sICJDb21tZW50OiAnIGNvbW1lbnQgZGF0YSAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAoJ25vdGF0aW9uJywgTm9uZSwgJ25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKCd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCAnZW50aXR5LmZpbGUnLCBOb25lLCAnbm90YXRpb24nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNF0sICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXFx4ZTFcXHhiZFxceDgwJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzVdLCAiTlMgZGVjbDogJ215bnMnICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNl0sICJTdGFydCBlbGVtZW50OiAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogJ0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOF0sICJFbmQgZWxlbWVudDogJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzldLCAiRW5kIG9mIE5TIGRlY2w6ICdteW5zJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogJ3N1YjInIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogJ2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb24nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTRdLCAiRW5kIGVsZW1lbnQ6ICdzdWIyJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNl0sICJFbmQgZWxlbWVudDogJ3Jvb3QnIikKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CiAgICAgICAgICMgVHJ5IHRoZSBwYXJzZSBhZ2FpbiwgdGhpcyB0aW1lIHByb2R1Y2luZyBVbmljb2RlIG91dHB1dApAQCAtMTcwLDIzICsxNjksMjMgQEAKICAgICAgICAgcGFyc2VyLlBhcnNlKGRhdGEsIDEpCiAKICAgICAgICAgb3AgPSBvdXQub3V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzBdLCAnUEk6IHVcJ3htbC1zdHlsZXNoZWV0XCcgdVwnaHJlZj0ic3R5bGVzaGVldC5jc3MiXCcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxXSwgIkNvbW1lbnQ6IHUnIGNvbW1lbnQgZGF0YSAnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKHUnbm90YXRpb24nLCBOb25lLCB1J25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzNdLCAiVW5wYXJzZWQgZW50aXR5IGRlY2w6ICh1J3VucGFyc2VkX2VudGl0eScsIE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lLCB1J25vdGF0aW9uJykiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6IHUncm9vdCcge3UnYXR0cjEnOiB1J3ZhbHVlMScsIHUnYXR0cjInOiB1J3ZhbHVlMlxcdTFmNDAnfSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzVdLCAiTlMgZGVjbDogdSdteW5zJyB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNl0sICJTdGFydCBlbGVtZW50OiB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCcge30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiB1J0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzhdLCAiRW5kIGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzldLCAiRW5kIG9mIE5TIGRlY2w6IHUnbXlucyciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMF0sICJTdGFydCBlbGVtZW50OiB1J3N1YjInIHt9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEyXSwgIkNoYXJhY3RlciBkYXRhOiB1J2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb24nIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTNdLCAnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxNF0sICJFbmQgZWxlbWVudDogdSdzdWIyJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE1XSwgIkV4dGVybmFsIGVudGl0eSByZWY6IChOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxNl0sICJFbmQgZWxlbWVudDogdSdyb290JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMF0sICdQSTogdVwneG1sLXN0eWxlc2hlZXRcJyB1XCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMV0sICJDb21tZW50OiB1JyBjb21tZW50IGRhdGEgJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKHUnbm90YXRpb24nLCBOb25lLCB1J25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKHUndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUsIHUnbm90YXRpb24nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNF0sICJTdGFydCBlbGVtZW50OiB1J3Jvb3QnIHt1J2F0dHIxJzogdSd2YWx1ZTEnLCB1J2F0dHIyJzogdSd2YWx1ZTJcXHUxZjQwJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzVdLCAiTlMgZGVjbDogdSdteW5zJyB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogdSdDb250ZW50cyBvZiBzdWJlbGVtZW50cyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzhdLCAiRW5kIGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogdSdteW5zJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogdSdzdWIyJyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6IHUnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNF0sICJFbmQgZWxlbWVudDogdSdzdWIyJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTZdLCAiRW5kIGVsZW1lbnQ6IHUncm9vdCciKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfZmlsZShzZWxmKToKICAgICAgICAgIyBUcnkgcGFyc2luZyBhIGZpbGUKQEAgLTIwMCwyMyArMTk5LDIzIEBACiAgICAgICAgIHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKIAogICAgICAgICBvcCA9IG91dC5vdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMF0sICdQSTogdVwneG1sLXN0eWxlc2hlZXRcJyB1XCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzFdLCAiQ29tbWVudDogdScgY29tbWVudCBkYXRhICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAodSdub3RhdGlvbicsIE5vbmUsIHUnbm90YXRpb24uanBlZycsIE5vbmUpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKHUndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUsIHUnbm90YXRpb24nKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzRdLCAiU3RhcnQgZWxlbWVudDogdSdyb290JyB7dSdhdHRyMSc6IHUndmFsdWUxJywgdSdhdHRyMic6IHUndmFsdWUyXFx1MWY0MCd9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNV0sICJOUyBkZWNsOiB1J215bnMnIHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzddLCAiQ2hhcmFjdGVyIGRhdGE6IHUnQ29udGVudHMgb2Ygc3ViZWxlbWVudHMnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOF0sICJFbmQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogdSdteW5zJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzEwXSwgIlN0YXJ0IGVsZW1lbnQ6IHUnc3ViMicge30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6IHUnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE0XSwgIkVuZCBlbGVtZW50OiB1J3N1YjInIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wWzE2XSwgIkVuZCBlbGVtZW50OiB1J3Jvb3QnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFswXSwgJ1BJOiB1XCd4bWwtc3R5bGVzaGVldFwnIHVcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxXSwgIkNvbW1lbnQ6IHUnIGNvbW1lbnQgZGF0YSAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAodSdub3RhdGlvbicsIE5vbmUsIHUnbm90YXRpb24uanBlZycsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAodSd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSwgdSdub3RhdGlvbicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6IHUncm9vdCcge3UnYXR0cjEnOiB1J3ZhbHVlMScsIHUnYXR0cjInOiB1J3ZhbHVlMlxcdTFmNDAnfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNV0sICJOUyBkZWNsOiB1J215bnMnIHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiB1J0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOF0sICJFbmQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiB1J215bnMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMF0sICJTdGFydCBlbGVtZW50OiB1J3N1YjInIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogdSdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTNdLCAnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE0XSwgIkVuZCBlbGVtZW50OiB1J3N1YjInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNl0sICJFbmQgZWxlbWVudDogdSdyb290JyIpCiAKIAogY2xhc3MgTmFtZXNwYWNlU2VwYXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMzIsMTQgKzIzMSwxNCBAQAogICAgICAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9NDIpCiAgICAgICAgICAgICBzZWxmLmZhaWwoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCiAgICAgICAgICAgICAgICAgJ1BhcnNlckNyZWF0ZSgpIGFyZ3VtZW50IDIgbXVzdCBiZSBzdHJpbmcgb3IgTm9uZSwgbm90IGludCcpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9J3RvbyBsb25nJykKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCiAgICAgICAgICAgICAgICAgJ25hbWVzcGFjZV9zZXBhcmF0b3IgbXVzdCBiZSBhdCBtb3N0IG9uZSBjaGFyYWN0ZXIsIG9taXR0ZWQsIG9yIE5vbmUnKQogCiAgICAgZGVmIHRlc3RfemVyb19sZW5ndGgoc2VsZik6CkBAIC0yNjUsNyArMjY0LDcgQEAKICAgICAgICAgcC5FbmRFbGVtZW50SGFuZGxlciA9IGNvbGxlY3RvcgogICAgICAgICBwLlBhcnNlKCI8ZT4gPGUvPiA8ZT48L2U+IDwvZT4iLCAxKQogICAgICAgICB0YWcgPSBMWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihMKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTCksIDYpCiAgICAgICAgIGZvciBlbnRyeSBpbiBMOgogICAgICAgICAgICAgIyBMIHNob3VsZCBoYXZlIHRoZSBzYW1lIHN0cmluZyByZXBlYXRlZCBvdmVyIGFuZCBvdmVyLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhZyBpcyBlbnRyeSkKQEAgLTI3OSw3ICsyNzgsNyBAQAogICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuQ2hhcmFjdGVyRGF0YUhhbmRsZXIKIAogICAgIGRlZiBjaGVjayhzZWxmLCBleHBlY3RlZCwgbGFiZWwpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnN0dWZmLCBleHBlY3RlZCwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLCBleHBlY3RlZCwKICAgICAgICAgICAgICAgICAiJXNcbnN0dWZmICAgID0gJXJcbmV4cGVjdGVkID0gJXIiCiAgICAgICAgICAgICAgICAgJSAobGFiZWwsIHNlbGYuc3R1ZmYsIG1hcCh1bmljb2RlLCBleHBlY3RlZCkpKQogCkBAIC0zMTIsNDcgKzMxMSw0NyBAQAogICAgICAgICAjIE1ha2Ugc3VyZSBidWZmZXJpbmcgaXMgdHVybmVkIG9uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5idWZmZXJfdGV4dCkKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjLz4zPC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsIFsnMTIzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBjb2xsYXBzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIFsnMTIzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCiAKICAgICBkZWYgdGVzdDEoc2VsZik6CiAgICAgICAgICMgWFhYIFRoaXMgdGVzdCBleHBvc2VzIG1vcmUgZGV0YWlsIG9mIEV4cGF0J3MgdGV4dCBjaHVua2luZyB0aGFuIHdlCiAgICAgICAgICMgWFhYIGxpa2UsIGJ1dCBpdCB0ZXN0cyB3aGF0IHdlIG5lZWQgdG8gY29uY2lzZWx5LgogICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciJdKQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiIGJ1ZmZlci10ZXh0PSdubycvPjJcbjM8YyBidWZmZXItdGV4dD0neWVzJy8+NFxuNTwvYT4iLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnN0dWZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbIjxhPiIsICIxIiwgIjxiPiIsICIyIiwgIlxuIiwgIjMiLCAiPGM+IiwgIjRcbjUiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmluZyBjb250cm9sIG5vdCByZWFjdGluZyBhcyBleHBlY3RlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIjxhPiIsICIxIiwgIjxiPiIsICIyIiwgIlxuIiwgIjMiLCAiPGM+IiwgIjRcbjUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyaW5nIGNvbnRyb2wgbm90IHJlYWN0aW5nIGFzIGV4cGVjdGVkIikKIAogICAgIGRlZiB0ZXN0MihzZWxmKToKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+Jmx0OzImZ3Q7PGMvPiYjMzI7XG4mI3gyMDszPC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsIFsiMTwyPiBcbiAzIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXJlZCB0ZXh0IG5vdCBwcm9wZXJseSBjb2xsYXBzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIFsiMTwyPiBcbiAzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCiAKICAgICBkZWYgdGVzdDMoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0SGFuZGxlcnMoWyJTdGFydEVsZW1lbnRIYW5kbGVyIl0pCiAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIvPjI8Yy8+MzwvYT4iLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnN0dWZmLCBbIjxhPiIsICIxIiwgIjxiPiIsICIyIiwgIjxjPiIsICIzIl0sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwgWyI8YT4iLCAiMSIsICI8Yj4iLCAiMiIsICI8Yz4iLCAiMyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgc3BsaXQiKQogCiAgICAgZGVmIHRlc3Q0KHNlbGYpOgogICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciIsICJFbmRFbGVtZW50SGFuZGxlciJdKQogICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IE5vbmUKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjLz4zPC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjxiPiIsICI8L2I+IiwgIjxjPiIsICI8L2M+IiwgIjwvYT4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsiPGE+IiwgIjxiPiIsICI8L2I+IiwgIjxjPiIsICI8L2M+IiwgIjwvYT4iXSkKIAogICAgIGRlZiB0ZXN0NShzZWxmKToKICAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIlN0YXJ0RWxlbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiXSkKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yj48L2I+MjxjLz4zPC9hPiIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjwvYj4iLCAiMiIsICI8Yz4iLCAiPC9jPiIsICIzIiwgIjwvYT4iXSkKIAogICAgIGRlZiB0ZXN0NihzZWxmKToKICAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIkNvbW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIiwKICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjPjwvYz4zNDU8L2E+ICIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc3R1ZmYsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdHVmZiwKICAgICAgICAgICAgIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjwvYj4iLCAiMiIsICI8Yz4iLCAiPC9jPiIsICIzNDUiLCAiPC9hPiJdLAogICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IHNwbGl0IikKIApAQCAtMzYwLDEwICszNTksMTAgQEAKICAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIkNvbW1lbnRIYW5kbGVyIiwgIkVuZEVsZW1lbnRIYW5kbGVyIiwKICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0RWxlbWVudEhhbmRsZXIiXSkKICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIjxhPjE8Yi8+MjxjPjwvYz4zPCEtLWFiYy0tPjQ8IS0tZGVmLS0+NTwvYT4gIiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5zdHVmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwhLS1hYmMtLT4iLCAiNCIsICI8IS0tZGVmLS0+IiwgIjUiLCAiPC9hPiJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgc3BsaXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiPCEtLWFiYy0tPiIsICI0IiwgIjwhLS1kZWYtLT4iLCAiNSIsICI8L2E+Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IHNwbGl0IikKIAogCiAjIFRlc3QgaGFuZGxpbmcgb2YgZXhjZXB0aW9uIGZyb20gY2FsbGJhY2s6CkBAIC0zNzgsOSArMzc3LDkgQEAKICAgICAgICAgICAgIHBhcnNlci5QYXJzZSgiPGE+PGI+PGMvPjwvYj48L2E+IiwgMSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlLmFyZ3NbMF0sICdhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBSdW50aW1lRXJyb3IgZm9yIGVsZW1lbnQgJ2EnLCBidXQiICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3VuZCAlciIgJSBlLmFyZ3NbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgJ2EnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgUnVudGltZUVycm9yIGZvciBlbGVtZW50ICdhJywgYnV0IiArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3VuZCAlciIgJSBlLmFyZ3NbMF0pCiAKIAogIyBUZXN0IEN1cnJlbnQqIG1lbWJlcnM6CkBAIC0zOTksNyArMzk4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXB0byA8IGxlbihzZWxmLmV4cGVjdGVkX2xpc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3RvbyBtYW55IHBhcnNlciBldmVudHMnKQogICAgICAgICBleHBlY3RlZCA9IHNlbGYuZXhwZWN0ZWRfbGlzdFtzZWxmLnVwdG9dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcywgZXhwZWN0ZWQsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zLCBleHBlY3RlZCwKICAgICAgICAgICAgICAgICAnRXhwZWN0ZWQgcG9zaXRpb24gJXMsIGdvdCBwb3NpdGlvbiAlcycgJShwb3MsIGV4cGVjdGVkKSkKICAgICAgICAgc2VsZi51cHRvICs9IDEKIApAQCAtNDQwLDEwICs0MzksMTAgQEAKICAgICAiIiIKIAogICAgIGRlZiB0ZXN0XzEwMjVfYnl0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc21hbGxfYnVmZmVyX3Rlc3QoMTAyNSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDI1KSwgMikKIAogICAgIGRlZiB0ZXN0XzEwMDBfYnl0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuc21hbGxfYnVmZmVyX3Rlc3QoMTAwMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zbWFsbF9idWZmZXJfdGVzdCgxMDAwKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dyb25nX3NpemUoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCkBAIC00NjcsMTUgKzQ2NiwxNSBAQAogICAgICAgICAjIG9uY2UuCiAgICAgICAgIHNlbGYubiA9IDAKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEpCiAKICAgICAgICAgIyBSZWFzc2lnbiB0byBidWZmZXJfc2l6ZSwgYnV0IGFzc2lnbiB0aGUgc2FtZSBzaXplLgogICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBwYXJzZXIuYnVmZmVyX3NpemUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMSkKIAogICAgICAgICAjIFRyeSBwYXJzaW5nIHJlc3Qgb2YgdGhlIGRvY3VtZW50CiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAyKQogCiAKICAgICBkZWYgdGVzdF9kaXNhYmxpbmdfYnVmZmVyKHNlbGYpOgpAQCAtNDg2LDI3ICs0ODUsMjcgQEAKICAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5jb3VudGluZ19oYW5kbGVyCiAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMTAyNAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQogCiAgICAgICAgICMgUGFyc2Ugb25lIGNodW5rIG9mIFhNTAogICAgICAgICBzZWxmLm4gPSAwCiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwxLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxKQogCiAgICAgICAgICMgVHVybiBvZmYgYnVmZmVyaW5nIGFuZCBwYXJzZSB0aGUgbmV4dCBjaHVuay4KICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhcnNlci5idWZmZXJfdGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAxMSkKIAogICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXIuYnVmZmVyX3RleHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwzLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLm4sIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMTIpCiAKIAogCkBAIC01MzQsMTQgKzUzMywxNCBAQAogICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQogICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAxMDI0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCiAKICAgICAgICAgc2VsZi5uID0gMAogICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSwgMCkKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplICo9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmJ1ZmZlcl9zaXplLCAyMDQ4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMjA0OCkKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDIpCiAKICAgICBkZWYgdGVzdF9jaGFuZ2Vfc2l6ZV8yKHNlbGYpOgogICAgICAgICB4bWwxID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzbzg4NTknPz48YT5hPHM+JXMiICUgKCdhJyAqIDEwMjMpCkBAIC01NTAsMTQgKzU0OSwxNCBAQAogICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQogICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAyMDQ4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5idWZmZXJfc2l6ZSwgMjA0OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDIwNDgpCiAKICAgICAgICAgc2VsZi5uPTAKICAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDEsIDApCiAgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSAvLz0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQogICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5uLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgNCkKIAogY2xhc3MgTWFsZm9ybWVkSW5wdXRUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdDEoc2VsZik6CkBAIC01NjcsNyArNTY2LDcgQEAKICAgICAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwsIFRydWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoKQogICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLCAndW5jbG9zZWQgdG9rZW46IGxpbmUgMiwgY29sdW1uIDAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICd1bmNsb3NlZCB0b2tlbjogbGluZSAyLCBjb2x1bW4gMCcpCiAKICAgICBkZWYgdGVzdDIoc2VsZik6CiAgICAgICAgIHhtbCA9ICI8P3htbCB2ZXJzaW9uXHhjMlx4ODU9JzEuMCc/PlxyXG4iCkBAIC01NzYsNyArNTc1LDcgQEAKICAgICAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwsIFRydWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoKQogICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKGUpLCAnWE1MIGRlY2xhcmF0aW9uIG5vdCB3ZWxsLWZvcm1lZDogbGluZSAxLCBjb2x1bW4gMTQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkOiBsaW5lIDEsIGNvbHVtbiAxNCcpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2V0QXR0cmlidXRlVGVzdCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVldWUucHkgYi9MaWIvdGVzdC90ZXN0X3F1ZXVlLnB5CmluZGV4IGNlY2IwYTEuLjBiMzhlN2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weQpAQCAtMSwxMSArMSwxMCBAQAogIyBTb21lIHNpbXBsZSBxdWV1ZSBtb2R1bGUgdGVzdHMsIHBsdXMgc29tZSBmYWlsdXJlIGNvbmRpdGlvbnMKICMgdG8gZW5zdXJlIHRoZSBRdWV1ZSBsb2NrcyByZW1haW4gc3RhYmxlLgogaW1wb3J0IFF1ZXVlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKIFFVRVVFX1NJWkUgPSA1CiAKQEAgLTk2LDE2ICs5NSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpZm9RdWV1ZSA9IFsyMjIsIDMzMywgMTExXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eVF1ZXVlID0gWzExMSwgMjIyLCAzMzNdKQogICAgICAgICBhY3R1YWxfb3JkZXIgPSBbcS5nZXQoKSwgcS5nZXQoKSwgcS5nZXQoKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX29yZGVyLCB0YXJnZXRfb3JkZXJbcS5fX2NsYXNzX18uX19uYW1lX19dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHNlZW0gdG8gcXVldWUgdGhlIGNvcnJlY3QgZGF0YSEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9vcmRlciwgdGFyZ2V0X29yZGVyW3EuX19jbGFzc19fLl9fbmFtZV9fXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHNlZW0gdG8gcXVldWUgdGhlIGNvcnJlY3QgZGF0YSEiKQogICAgICAgICBmb3IgaSBpbiByYW5nZShRVUVVRV9TSVpFLTEpOgogICAgICAgICAgICAgcS5wdXQoaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcS5mdWxsKCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGZ1bGwiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZnVsbCIpCiAgICAgICAgIGxhc3QgPSAyICogUVVFVUVfU0laRQogICAgICAgICBmdWxsID0gMyAqIDIgKiBRVUVVRV9TSVpFCiAgICAgICAgIHEucHV0KGxhc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBxLnB1dChmdWxsLCBibG9jaz0wKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgYXBwZWFyIHRvIGJsb2NrIHdpdGggYSBmdWxsIHF1ZXVlIikKQEAgLTEyMiw3ICsxMjEsNyBAQAogICAgICAgICAjIEVtcHR5IGl0CiAgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUpOgogICAgICAgICAgICAgcS5nZXQoKQotICAgICAgICBzZWxmLmFzc2VydF8ocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHEuZ2V0KGJsb2NrPTApCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBhcHBlYXIgdG8gYmxvY2sgd2l0aCBhbiBlbXB0eSBxdWV1ZSIpCkBAIC0xNTUsOCArMTU0LDggQEAKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CiAgICAgICAgICAgICBxLnB1dChpKQogICAgICAgICBxLmpvaW4oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmN1bSwgc3VtKHJhbmdlKDEwMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAicS5qb2luKCkgZGlkIG5vdCBibG9jayB1bnRpbCBhbGwgdGFza3Mgd2VyZSBkb25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1bSwgc3VtKHJhbmdlKDEwMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJxLmpvaW4oKSBkaWQgbm90IGJsb2NrIHVudGlsIGFsbCB0YXNrcyB3ZXJlIGRvbmUiKQogICAgICAgICBmb3IgaSBpbiAoMCwxKToKICAgICAgICAgICAgIHEucHV0KE5vbmUpICAgICAgICAgIyBpbnN0cnVjdCB0aGUgdGhyZWFkcyB0byBjbG9zZQogICAgICAgICBxLmpvaW4oKSAgICAgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHlvdSBjYW4gam9pbiB0d2ljZQpAQCAtMjQ0LDcgKzI0Myw3IEBACiAgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHEucHV0KCJsYXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCiAgICAgICAgICMgVGVzdCBhIGZhaWxpbmcgYmxvY2tpbmcgcHV0CiAgICAgICAgIHEuZmFpbF9uZXh0X3B1dCA9IFRydWUKICAgICAgICAgdHJ5OgpAQCAtMjY2LDE3ICsyNjUsMTcgQEAKICAgICAgICAgIyBDaGVjayB0aGUgUXVldWUgaXNuJ3QgZGFtYWdlZC4KICAgICAgICAgIyBwdXQgZmFpbGVkLCBidXQgZ2V0IHN1Y2NlZWRlZCAtIHJlLWFkZAogICAgICAgICBxLnB1dCgibGFzdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQogICAgICAgICBxLmdldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcS5mdWxsKCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGZ1bGwiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBmdWxsIikKICAgICAgICAgcS5wdXQoImxhc3QiKQotICAgICAgICBzZWxmLmFzc2VydF8ocS5mdWxsKCksICJRdWV1ZSBzaG91bGQgYmUgZnVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKICAgICAgICAgIyBUZXN0IGEgYmxvY2tpbmcgcHV0CiAgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLnB1dCwgKCJmdWxsIiwpLCBxLmdldCwgKCkpCiAgICAgICAgICMgRW1wdHkgaXQKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRSk6CiAgICAgICAgICAgICBxLmdldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKICAgICAgICAgcS5wdXQoImZpcnN0IikKICAgICAgICAgcS5mYWlsX25leHRfZ2V0ID0gVHJ1ZQogICAgICAgICB0cnk6CkBAIC0yODQsMTYgKzI4MywxNiBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCiAgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgcS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpCiAgICAgICAgIHEuZmFpbF9uZXh0X2dldCA9IFRydWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcS5nZXQodGltZW91dD0wLjEpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKICAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKICAgICAgICAgcS5nZXQoKQotICAgICAgICBzZWxmLmFzc2VydF8ocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCiAgICAgICAgIHEuZmFpbF9uZXh0X2dldCA9IFRydWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5kb19leGNlcHRpb25hbF9ibG9ja2luZ190ZXN0KHEuZ2V0LCAoKSwgcS5wdXQsICgnZW1wdHknLCksCkBAIC0zMDIsOSArMzAxLDkgQEAKICAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBwdXQgc3VjY2VlZGVkLCBidXQgZ2V0IGZhaWxlZC4KLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGVtcHR5IikKICAgICAgICAgcS5nZXQoKQotICAgICAgICBzZWxmLmFzc2VydF8ocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCiAKICAgICBkZWYgdGVzdF9mYWlsaW5nX3F1ZXVlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdG8gbWFrZSBzdXJlIGEgcXVldWUgaXMgZnVuY3Rpb25pbmcgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkgYi9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQppbmRleCA1NmE3OTNjLi5jM2M0ZDE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQpAQCAtMTMwLDE3ICsxMzAsMTcgQEAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfZW5jb2Rlc3RyaW5nKHNlbGYpOgogICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocXVvcHJpLmVuY29kZXN0cmluZyhwKSA9PSBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5lbmNvZGVzdHJpbmcocCkgPT0gZSkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9kZWNvZGVzdHJpbmcoc2VsZik6CiAgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhlKSA9PSBwKQogCiAgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgogICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnRfc3RyaW5nKHNlbGYpOgogICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocXVvcHJpLmRlY29kZXN0cmluZyhxdW9wcmkuZW5jb2Rlc3RyaW5nKGUpKSA9PSBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5kZWNvZGVzdHJpbmcocXVvcHJpLmVuY29kZXN0cmluZyhlKSkgPT0gZSkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgICAgIGluZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8ocCkKICAgICAgICAgICAgIG91dGZwID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgICAgIHF1b3ByaS5lbmNvZGUoaW5mcCwgb3V0ZnAsIHF1b3RldGFicz1GYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvdXRmcC5nZXR2YWx1ZSgpID09IGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZnAuZ2V0dmFsdWUoKSA9PSBlKQogCiAgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgogICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKQEAgLTE1NiwyOCArMTU2LDI5IEBACiAgICAgICAgICAgICBpbmZwID0gY1N0cmluZ0lPLlN0cmluZ0lPKGUpCiAgICAgICAgICAgICBvdXRmcCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgICBxdW9wcmkuZGVjb2RlKGluZnAsIG91dGZwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG91dGZwLmdldHZhbHVlKCkgPT0gcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRmcC5nZXR2YWx1ZSgpID09IHApCiAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfZW1iZWRkZWRfd3Moc2VsZik6CiAgICAgICAgIGZvciBwLCBlIGluIHNlbGYuRVNUUklOR1M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocXVvcHJpLmVuY29kZXN0cmluZyhwLCBxdW90ZXRhYnM9VHJ1ZSkgPT0gZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmVuY29kZXN0cmluZyhwLCBxdW90ZXRhYnM9VHJ1ZSkgPT0gZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCiAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfZW5jb2RlX2hlYWRlcihzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5IU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZW5jb2Rlc3RyaW5nKHAsIGhlYWRlcj1UcnVlKSA9PSBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5lbmNvZGVzdHJpbmcocCwgaGVhZGVyPVRydWUpID09IGUpCiAKICAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfZGVjb2RlX2hlYWRlcihzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5IU1RSSU5HUzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhxdW9wcmkuZGVjb2Rlc3RyaW5nKGUsIGhlYWRlcj1UcnVlKSA9PSBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5kZWNvZGVzdHJpbmcoZSwgaGVhZGVyPVRydWUpID09IHApCiAKICAgICBkZWYgdGVzdF9zY3JpcHRlbmNvZGUoc2VsZik6CiAgICAgICAgIChwLCBlKSA9IHNlbGYuU1RSSU5HU1stMV0KICAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLW1xdW9wcmkiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvY2Vzcy5zdGRvdXQuY2xvc2UpCiAgICAgICAgIGNvdXQsIGNlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHApCiAgICAgICAgICMgT24gV2luZG93cywgUHl0aG9uIHdpbGwgb3V0cHV0IHRoZSByZXN1bHQgdG8gc3Rkb3V0IHVzaW5nCiAgICAgICAgICMgQ1JMRiwgYXMgdGhlIG1vZGUgb2Ygc3Rkb3V0IGlzIHRleHQgbW9kZS4gVG8gY29tcGFyZSB0aGlzCkBAIC0xODgsNiArMTg5LDcgQEAKICAgICAgICAgKHAsIGUpID0gc2VsZi5TVFJJTkdTWy0xXQogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItbXF1b3ByaSIsICItZCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jZXNzLnN0ZG91dC5jbG9zZSkKICAgICAgICAgY291dCwgY2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3V0LnNwbGl0bGluZXMoKSwgcC5zcGxpdGxpbmVzKCkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggNTBkNDVmMi4uZGY4Mjk5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCi1mcm9tIG1hdGggaW1wb3J0IGxvZywgZXhwLCBzcXJ0LCBwaSwgZnN1bSBhcyBtc3VtCitmcm9tIG1hdGggaW1wb3J0IGxvZywgZXhwLCBwaSwgZnN1bSwgc2luCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCkBAIC01MywxMCArNTMsOCBAQAogICAgICAgICBzdGF0ZTMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpICAgICMgcy9iIGRpc3RpbmN0IGZyb20gc3RhdGUyCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdGUyLCBzdGF0ZTMpCiAKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmp1bXBhaGVhZCkgICMgbmVlZHMgYW4gYXJnCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmp1bXBhaGVhZCwgImljayIpICAjIHdyb25nIHR5cGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uanVtcGFoZWFkLCAyLjMpICAjIHdyb25nIHR5cGUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uanVtcGFoZWFkLCAyLCAzKSAgIyB0b28gbWFueQogCiAgICAgZGVmIHRlc3Rfc2FtcGxlKHNlbGYpOgpAQCAtNjksNyArNjcsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIGspCiAgICAgICAgICAgICB1bmlxID0gc2V0KHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1bmlxKSwgaykKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5zYW1wbGUoW10sIDApLCBbXSkgICMgdGVzdCBlZGdlIGNhc2UgTj09az09MAogCiAgICAgZGVmIHRlc3Rfc2FtcGxlX2Rpc3RyaWJ1dGlvbihzZWxmKToKQEAgLTExNCw3ICsxMTIsNyBAQAogICAgICAgICAgICAgc2FtcCA9IHNlbGYuZ2VuLnNhbXBsZShkLCBrKQogICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB3ZSBnb3QgaW50cyBiYWNrIChrZXlzKTsgdGhlIHZhbHVlcyBhcmUgY29tcGxleC4KICAgICAgICAgICAgIGZvciB4IGluIHNhbXA6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoeCkgaXMgaW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHgpIGlzIGludCkKICAgICAgICAgc2FtcC5zb3J0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wLCByYW5nZShOKSkKIApAQCAtMjM5LDcgKzIzNyw3IEBACiAgICAgICAgIGN1bSA9IDAKICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CiAgICAgICAgICAgICByID0gc2VsZi5nZW4ucmFuZHJhbmdlKHNwYW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMCA8PSByIDwgc3BhbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCBzcGFuKQogICAgICAgICAgICAgY3VtIHw9IHIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdW0sIHNwYW4tMSkKIApAQCAtMjQ5LDcgKzI0Nyw3IEBACiAgICAgICAgICAgICBzdG9wID0gc2VsZi5nZW4ucmFuZHJhbmdlKDIgKiogKGktMikpCiAgICAgICAgICAgICBpZiBzdG9wIDw9IHN0YXJ0OgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHN0YXJ0IDw9IHNlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCwgc3RvcCkgPCBzdG9wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXJ0IDw9IHNlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCwgc3RvcCkgPCBzdG9wKQogCiAgICAgZGVmIHRlc3RfcmFuZ2VsaW1pdHMoc2VsZik6CiAgICAgICAgIGZvciBzdGFydCwgc3RvcCBpbiBbKC0yLDApLCAoLSgyKio2MCktMiwtKDIqKjYwKSksICgyKio2MCwyKio2MCsyKV06CkBAIC0yNTksNyArMjU3LDcgQEAKICAgICBkZWYgdGVzdF9nZW5yYW5kYml0cyhzZWxmKToKICAgICAgICAgIyBWZXJpZnkgcmFuZ2VzCiAgICAgICAgIGZvciBrIGluIHhyYW5nZSgxLCAxMDAwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwIDw9IHNlbGYuZ2VuLmdldHJhbmRiaXRzKGspIDwgMioqaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHNlbGYuZ2VuLmdldHJhbmRiaXRzKGspIDwgMioqaykKIAogICAgICAgICAjIFZlcmlmeSBhbGwgYml0cyBhY3RpdmUKICAgICAgICAgZ2V0Yml0cyA9IHNlbGYuZ2VuLmdldHJhbmRiaXRzCkBAIC0yODUsMTcgKzI4MywxNyBAQAogICAgICAgICAgICAgbnVtYml0cyA9IGkrMQogICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuID09IDIqKihrLTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4gPT0gMioqKGstMSkpCiAKICAgICAgICAgICAgIG4gKz0gbiAtIDEgICAgICAjIGNoZWNrIDEgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCiAgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGsgaW4gW251bWJpdHMsIG51bWJpdHMrMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMioqayA+IG4gPiAyKiooay0yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgW251bWJpdHMsIG51bWJpdHMrMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0yKSkKIAogICAgICAgICAgICAgbiAtPSBuID4+IDE1ICAgICAjIGNoZWNrIGEgbGl0dGxlIGZhcnRoZXIgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCiAgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0xKSkgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgogCiAKIGNsYXNzIE1lcnNlbm5lVHdpc3Rlcl9UZXN0QmFzaWNPcHMoVGVzdEJhc2ljT3BzKToKQEAgLTM5MSw3ICszODksNyBAQAogICAgICAgICBjdW0gPSAwCiAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgogICAgICAgICAgICAgciA9IHNlbGYuZ2VuLnJhbmRyYW5nZShzcGFuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAgPD0gciA8IHNwYW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSByIDwgc3BhbikKICAgICAgICAgICAgIGN1bSB8PSByCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VtLCBzcGFuLTEpCiAKQEAgLTQwMSw3ICszOTksNyBAQAogICAgICAgICAgICAgc3RvcCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgyICoqIChpLTIpKQogICAgICAgICAgICAgaWYgc3RvcCA8PSBzdGFydDoKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzdGFydCA8PSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsIHN0b3ApIDwgc3RvcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFydCA8PSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsIHN0b3ApIDwgc3RvcCkKIAogICAgIGRlZiB0ZXN0X3JhbmdlbGltaXRzKHNlbGYpOgogICAgICAgICBmb3Igc3RhcnQsIHN0b3AgaW4gWygtMiwwKSwgKC0oMioqNjApLTIsLSgyKio2MCkpLCAoMioqNjAsMioqNjArMildOgpAQCAtNDE1LDcgKzQxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgOTc5MDQ4NDU3NzczNDM1MTA0MDQ3MTg5NTYxMTVMKQogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4geHJhbmdlKDEsIDEwMDApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMoaykgPCAyKiprKQogCiAgICAgICAgICMgVmVyaWZ5IGFsbCBiaXRzIGFjdGl2ZQogICAgICAgICBnZXRiaXRzID0gc2VsZi5nZW4uZ2V0cmFuZGJpdHMKQEAgLTQ0MSwzNSArNDM5LDQzIEBACiAgICAgICAgICAgICBudW1iaXRzID0gaSsxCiAgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG4gPT0gMioqKGstMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobiA9PSAyKiooay0xKSkKIAogICAgICAgICAgICAgbiArPSBuIC0gMSAgICAgICMgY2hlY2sgMSBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oayBpbiBbbnVtYml0cywgbnVtYml0cysxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygyKiprID4gbiA+IDIqKihrLTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBbbnVtYml0cywgbnVtYml0cysxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTIpKQogCiAgICAgICAgICAgICBuIC09IG4gPj4gMTUgICAgICMgY2hlY2sgYSBsaXR0bGUgZmFydGhlciBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpICAgICAgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKICAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAogICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgICAgICBzdGVwID0gLTIwMAogICAgICAgICB4ID0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKQotICAgICAgICBzZWxmLmFzc2VydF8oc3RvcCA8IHggPD0gc3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdG9wIDwgeCA8PSBzdGFydCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeCtzdG9wKSVzdGVwLCAwKQogCi1fZ2FtbWFjb2VmZiA9ICgwLjk5OTk5OTk5OTk5OTUxODMsIDY3Ni41MjAzNjgxMjE4ODM1LCAtMTI1OS4xMzkyMTY3MjIyODksCi0gICAgICAgICAgICAgIDc3MS4zMjM0Mjg3NzU3Njc0LCAgLTE3Ni42MTUwMjkxNDk4Mzg2LCAxMi41MDczNDMyNDAwOTA1NiwKLSAgICAgICAgICAgICAgLTAuMTM4NTcxMDMzMTI5NjUyNiwgMC45OTM0OTM3MTEzOTMwNzQ4ZS0wNSwgMC4xNjU5NDcwMTg3NDA4NDYyZS0wNikKLQotZGVmIGdhbW1hKHosIGNvZj1fZ2FtbWFjb2VmZiwgZz03KToKLSAgICB6IC09IDEuMAotICAgIHMgPSBtc3VtKFtjb2ZbMF1dICsgW2NvZltpXSAvICh6K2kpIGZvciBpIGluIHJhbmdlKDEsbGVuKGNvZikpXSkKLSAgICB6ICs9IDAuNQotICAgIHJldHVybiAoeitnKSoqeiAvIGV4cCh6K2cpICogc3FydCgyLjAqcGkpICogcworZGVmIGdhbW1hKHosIHNxcnQycGk9KDIuMCpwaSkqKjAuNSk6CisgICAgIyBSZWZsZWN0aW9uIHRvIHJpZ2h0IGhhbGYgb2YgY29tcGxleCBwbGFuZQorICAgIGlmIHogPCAwLjU6CisgICAgICAgIHJldHVybiBwaSAvIHNpbihwaSp6KSAvIGdhbW1hKDEuMC16KQorICAgICMgTGFuY3pvcyBhcHByb3hpbWF0aW9uIHdpdGggZz03CisgICAgYXogPSB6ICsgKDcuMCAtIDAuNSkKKyAgICByZXR1cm4gYXogKiogKHotMC41KSAvIGV4cChheikgKiBzcXJ0MnBpICogZnN1bShbCisgICAgICAgIDAuOTk5OTk5OTk5OTk5NTE4MywKKyAgICAgICAgNjc2LjUyMDM2ODEyMTg4MzUgLyB6LAorICAgICAgICAtMTI1OS4xMzkyMTY3MjIyODkgLyAoeisxLjApLAorICAgICAgICA3NzEuMzIzNDI4Nzc1NzY3NCAvICh6KzIuMCksCisgICAgICAgIC0xNzYuNjE1MDI5MTQ5ODM4NiAvICh6KzMuMCksCisgICAgICAgIDEyLjUwNzM0MzI0MDA5MDU2IC8gKHorNC4wKSwKKyAgICAgICAgLTAuMTM4NTcxMDMzMTI5NjUyNiAvICh6KzUuMCksCisgICAgICAgIDAuOTkzNDkzNzExMzkzMDc0OGUtMDUgLyAoeis2LjApLAorICAgICAgICAwLjE2NTk0NzAxODc0MDg0NjJlLTA2IC8gKHorNy4wKSwKKyAgICBdKQogCiBjbGFzcyBUZXN0RGlzdHJpYnV0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfemVyb2lucHV0cyhzZWxmKToKQEAgLTUyOCw3ICs1MzQsNyBAQAogCiAgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgogICAgICAgICAjIHRlc3RzIHZhbGlkaXR5IGJ1dCBub3QgY29tcGxldGVuZXNzIG9mIHRoZSBfX2FsbF9fIGxpc3QKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNldChyYW5kb20uX19hbGxfXykgPD0gc2V0KGRpcihyYW5kb20pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldChyYW5kb20uX19hbGxfXykgPD0gc2V0KGRpcihyYW5kb20pKSkKIAogICAgIGRlZiB0ZXN0X3JhbmRvbV9zdWJjbGFzc193aXRoX2t3YXJncyhzZWxmKToKICAgICAgICAgIyBTRiBidWcgIzE0ODY2NjMgLS0gdGhpcyB1c2VkIHRvIGVycm9uZW91c2x5IHJhaXNlIGEgVHlwZUVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZS5weQppbmRleCBmOGE1NjQ3Li5mOTc4MDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKQEAgLTEsNyArMSw3IEBACiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgotaW1wb3J0IHN5cywgb3MsIHRyYWNlYmFjaworaW1wb3J0IHN5cywgdHJhY2ViYWNrCiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICAgICAgICB1bmljb2RlCiAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gIyBubyBwcm9ibGVtIGlmIHdlIGhhdmUgbm8gdW5pY29kZQotICAgICAgICBzZWxmLmFzc2VydF8ocmUuY29tcGlsZSgnYnVnXzkyNjA3NScpIGlzIG5vdAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuY29tcGlsZSgnYnVnXzkyNjA3NScpIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgcmUuY29tcGlsZShldmFsKCJ1J2J1Z185MjYwNzUnIikpKQogCiAgICAgZGVmIHRlc3RfYnVnXzkzMTg0OChzZWxmKToKQEAgLTYzMCw2ICs2MzAsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyLm5leHQoKS5zcGFuKCksICg0LCA0KSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXRlci5uZXh0KQogCisgICAgZGVmIHRlc3RfYnVnXzY1NjEoc2VsZik6CisgICAgICAgICMgJ1xkJyBzaG91bGQgbWF0Y2ggY2hhcmFjdGVycyBpbiBVbmljb2RlIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgIyAoTnVtYmVyLCBEZWNpbWFsIERpZ2l0KSwgYnV0IG5vdCB0aG9zZSBpbiAnTmwnIChOdW1iZXIsCisgICAgICAgICMgTGV0dGVyKSBvciAnTm8nIChOdW1iZXIsIE90aGVyKS4KKyAgICAgICAgZGVjaW1hbF9kaWdpdHMgPSBbCisgICAgICAgICAgICB1J1x1MDAzNycsICMgJ1xOe0RJR0lUIFNFVkVOfScsIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgICAgIHUnXHUwZTU4JywgIyAnXE57VEhBSSBESUdJVCBTSVh9JywgY2F0ZWdvcnkgJ05kJworICAgICAgICAgICAgdSdcdWZmMTAnLCAjICdcTntGVUxMV0lEVEggRElHSVQgWkVST30nLCBjYXRlZ29yeSAnTmQnCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIGRlY2ltYWxfZGlnaXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXlxkJCcsIHgsIHJlLlVOSUNPREUpLmdyb3VwKDApLCB4KQorCisgICAgICAgIG5vdF9kZWNpbWFsX2RpZ2l0cyA9IFsKKyAgICAgICAgICAgIHUnXHUyMTY1JywgIyAnXE57Uk9NQU4gTlVNRVJBTCBTSVh9JywgY2F0ZWdvcnkgJ05sJworICAgICAgICAgICAgdSdcdTMwMzknLCAjICdcTntIQU5HWkhPVSBOVU1FUkFMIFRXRU5UWX0nLCBjYXRlZ29yeSAnTmwnCisgICAgICAgICAgICB1J1x1MjA4MicsICMgJ1xOe1NVQlNDUklQVCBUV099JywgY2F0ZWdvcnkgJ05vJworICAgICAgICAgICAgdSdcdTMyYjQnLCAjICdcTntDSVJDTEVEIE5VTUJFUiBUSElSVFkgTklORX0nLCBjYXRlZ29yeSAnTm8nCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vdF9kZWNpbWFsX2RpZ2l0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeXGQkJywgeCwgcmUuVU5JQ09ERSkpCisKICAgICBkZWYgdGVzdF9lbXB0eV9hcnJheShzZWxmKToKICAgICAgICAgIyBTRiBidWYgMTY0NzU0MQogICAgICAgICBpbXBvcnQgYXJyYXkKQEAgLTY5MSw3ICs3MTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBfc3JlLmNvbXBpbGUsICJhYmMiLCAwLCBbbG9uZ19vdmVyZmxvd10pCiAKIGRlZiBydW5fcmVfdGVzdHMoKToKLSAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IGJlbmNobWFya3MsIHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKKyAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKICAgICBpZiB2ZXJib3NlOgogICAgICAgICBwcmludCAnUnVubmluZyByZV90ZXN0cyB0ZXN0IHN1aXRlJwogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQppbmRleCBhMjIxMGQ0Li4xMTA0NWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKQEAgLTYsOSArNiwxMCBAQAogd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAiIiIKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKIAotaW1wb3J0IHJlYWRsaW5lCisjIFNraXAgdGVzdHMgaWYgdGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlCityZWFkbGluZSA9IGltcG9ydF9tb2R1bGUoJ3JlYWRsaW5lJykKIAogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdEhpc3RvcnlVcGRhdGVzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXByLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXByLnB5CmluZGV4IDhjNjgzZmIuLjhiMjBhY2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmVwci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlcHIucHkKQEAgLTgsNyArOCw3IEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBfY2hlY2tfcHkza193YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCiBmcm9tIHJlcHIgaW1wb3J0IHJlcHIgYXMgciAjIERvbid0IHNoYWRvdyBidWlsdGluIHJlcHIKIGZyb20gcmVwciBpbXBvcnQgUmVwcgogCkBAIC0yMiw3ICsyMiw3IEBACiBjbGFzcyBSZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShyKCJhYmMiKSwgIidhYmMnIikKICAgICAgICAgZXEocigiYWJjZGVmZ2hpamtsbW5vcCIpLCInYWJjZGVmZ2hpamtsbW5vcCciKQogCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIGVxKHIocyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKHIoKDEsKSksICIoMSwpIikKIAogICAgICAgICB0MyA9ICgxLCAyLCAzKQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQogICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICMgVHVwbGVzIGdpdmUgdXAgYWZ0ZXIgNiBlbGVtZW50cwogICAgICAgICBlcShyKCgpKSwgIigpIikKICAgICAgICAgZXEocigoMSwpKSwgIigxLCkiKQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgImFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDUsIC4uLl0pIikKIAogICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKHIoMTIzKSwgcmVwcigxMjMpKQogICAgICAgICBlcShyKDEyM0wpLCByZXByKDEyM0wpKQogICAgICAgICBlcShyKDEuMC8zKSwgcmVwcigxLjAvMykpCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgZXEocihuKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgaTEgPSBDbGFzc1dpdGhSZXByKCJhIikKICAgICAgICAgZXEocihpMSksIHJlcHIoaTEpKQogCkBAIC0xMjMsMzkgKzEyMywzOSBAQAogICAgICAgICBlcShyKGkzKSwgKCI8Q2xhc3NXaXRoRmFpbGluZ1JlcHIgaW5zdGFuY2UgYXQgJXg+IiVpZChpMykpKQogCiAgICAgICAgIHMgPSByKENsYXNzV2l0aEZhaWxpbmdSZXByKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mocy5zdGFydHN3aXRoKCI8Y2xhc3MgIikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmVuZHN3aXRoKCI+IikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzLmZpbmQoIi4uLiIpID09IDgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIjxjbGFzcyAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIj4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiLi4uIikgPT0gOCkKIAogICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6CiAgICAgICAgIGZwID0gb3Blbih1bml0dGVzdC5fX2ZpbGVfXykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoZnApLnN0YXJ0c3dpdGgoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGZwKS5zdGFydHN3aXRoKAogICAgICAgICAgICAgIjxvcGVuIGZpbGUgJyVzJywgbW9kZSAncicgYXQgMHgiICUgdW5pdHRlc3QuX19maWxlX18pKQogICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXByKGZwKS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihmcCkuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICI8Y2xvc2VkIGZpbGUgJyVzJywgbW9kZSAncicgYXQgMHgiICUgdW5pdHRlc3QuX19maWxlX18pKQogCiAgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVwcihsYW1iZGEgeDogeCkuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobGFtYmRhIHg6IHgpLnN0YXJ0c3dpdGgoCiAgICAgICAgICAgICAiPGZ1bmN0aW9uIDxsYW1iZGEiKSkKICAgICAgICAgIyBYWFggYW5vbnltb3VzIGZ1bmN0aW9ucz8gIHNlZSBmdW5jX3JlcHIKIAogICAgIGRlZiB0ZXN0X2J1aWx0aW5fZnVuY3Rpb24oc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICMgRnVuY3Rpb25zCiAgICAgICAgIGVxKHJlcHIoaGFzaCksICc8YnVpbHQtaW4gZnVuY3Rpb24gaGFzaD4nKQogICAgICAgICAjIE1ldGhvZHMKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoJycuc3BsaXQpLnN0YXJ0c3dpdGgoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKCcnLnNwbGl0KS5zdGFydHN3aXRoKAogICAgICAgICAgICAgJzxidWlsdC1pbiBtZXRob2Qgc3BsaXQgb2Ygc3RyIG9iamVjdCBhdCAweCcpKQogCiAgICAgZGVmIHRlc3RfeHJhbmdlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShyZXByKHhyYW5nZSgxKSksICd4cmFuZ2UoMSknKQogICAgICAgICBlcShyZXByKHhyYW5nZSgxLCAyKSksICd4cmFuZ2UoMSwgMiknKQogICAgICAgICBlcShyZXByKHhyYW5nZSgxLCAyLCAzKSksICd4cmFuZ2UoMSwgNCwgMyknKQogCiAgICAgZGVmIHRlc3RfbmVzdGluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBldmVyeXRoaW5nIGlzIG1lYW50IHRvIGdpdmUgdXAgYWZ0ZXIgNiBsZXZlbHMuCiAgICAgICAgIGVxKHIoW1tbW1tbW11dXV1dXV0pLCAiW1tbW1tbW11dXV1dXV0iKQogICAgICAgICBlcShyKFtbW1tbW1tbXV1dXV1dXV0pLCAiW1tbW1tbWy4uLl1dXV1dXV0iKQpAQCAtMTc0LDE2ICsxNzQsMTYgQEAKICAgICBkZWYgdGVzdF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgWFhYIGRvZXNuJ3QgdGVzdCBidWZmZXJzIHdpdGggbm8gYl9iYXNlIG9yIHJlYWQtd3JpdGUgYnVmZmVycyAoc2VlCiAgICAgICAgICMgYnVmZmVyb2JqZWN0LmMpLiAgVGhlIHRlc3QgaXMgZmFpcmx5IGluY29tcGxldGUgdG9vLiAgU2lnaC4KLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHggPSBidWZmZXIoJ2ZvbycpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXByKHgpLnN0YXJ0c3dpdGgoJzxyZWFkLW9ubHkgYnVmZmVyIGZvciAweCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcih4KS5zdGFydHN3aXRoKCc8cmVhZC1vbmx5IGJ1ZmZlciBmb3IgMHgnKSkKIAogICAgIGRlZiB0ZXN0X2NlbGwoc2VsZik6CiAgICAgICAgICMgWFhYIEhtbT8gSG93IHRvIGdldCBhdCBhIGNlbGwgb2JqZWN0PwogICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9kZXNjcmlwdG9ycyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBtZXRob2QgZGVzY3JpcHRvcnMKICAgICAgICAgZXEocmVwcihkaWN0Lml0ZW1zKSwgIjxtZXRob2QgJ2l0ZW1zJyBvZiAnZGljdCcgb2JqZWN0cz4iKQogICAgICAgICAjIFhYWCBtZW1iZXIgZGVzY3JpcHRvcnMKQEAgLTE5Myw5ICsxOTMsOSBAQAogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgZGVmIGZvbyhjbHMpOiBwYXNzCiAgICAgICAgIHggPSBzdGF0aWNtZXRob2QoQy5mb28pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXByKHgpLnN0YXJ0c3dpdGgoJzxzdGF0aWNtZXRob2Qgb2JqZWN0IGF0IDB4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHgpLnN0YXJ0c3dpdGgoJzxzdGF0aWNtZXRob2Qgb2JqZWN0IGF0IDB4JykpCiAgICAgICAgIHggPSBjbGFzc21ldGhvZChDLmZvbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoeCkuc3RhcnRzd2l0aCgnPGNsYXNzbWV0aG9kIG9iamVjdCBhdCAweCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcih4KS5zdGFydHN3aXRoKCc8Y2xhc3NtZXRob2Qgb2JqZWN0IGF0IDB4JykpCiAKICAgICBkZWYgdGVzdF91bnNvcnRhYmxlKHNlbGYpOgogICAgICAgICAjIFJlcHIucmVwcigpIHVzZWQgdG8gY2FsbCBzb3J0ZWQoKSBvbiBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0cwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCBzZWxmLnBrZ25hbWUgKyBvcy5leHRzZXAgKyAncHknKSkKICAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24KICAgICAgICAgZXEocmVwcihhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24pLApAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgICAgIGVxKHJlcHIoc3lzKSwgIjxtb2R1bGUgJ3N5cycgKGJ1aWx0LWluKT4iKQogCiAgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFscworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgJ2Zvbycrb3MuZXh0c2VwKydweScpLCAnJydcCiBjbGFzcyBmb28ob2JqZWN0KToKICAgICBwYXNzCkBAIC0yNzMsNyArMjczLDcgQEAKICcnJykKICAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBiYXIKICAgICAgICAgIyBNb2R1bGUgbmFtZSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAidGVzdC4iLCBkZXBlbmRpbmcgb24gaG93IHJ1bi4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoYmFyLmJhcikuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoYmFyLmJhcikuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICI8Y2xhc3MgJXMuYmFyIGF0IDB4IiAlIGJhci5fX25hbWVfXykpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKQEAgLTI4MywxMSArMjgzLDExIEBACiAnJycpCiAgICAgICAgIGZyb20gYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLmFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiBpbXBvcnQgYmF6CiAgICAgICAgIGliYXogPSBiYXouYmF6KCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoaWJheikuc3RhcnRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoaWJheikuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICI8JXMuYmF6IGluc3RhbmNlIGF0IDB4IiAlIGJhei5fX25hbWVfXykpCiAKICAgICBkZWYgdGVzdF9tZXRob2Qoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbHMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsICdxdXgnK29zLmV4dHNlcCsncHknKSwgJycnXAogY2xhc3MgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE6CiAgICAgZGVmIGFtZXRob2Qoc2VsZik6IHBhc3MKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAgICAnPHVuYm91bmQgbWV0aG9kIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhLmFtZXRob2Q+JykKICAgICAgICAgIyBCb3VuZCBtZXRob2QgbmV4dAogICAgICAgICBpcXV4ID0gcXV4LmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlcHIoaXF1eC5hbWV0aG9kKS5zdGFydHN3aXRoKAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihpcXV4LmFtZXRob2QpLnN0YXJ0c3dpdGgoCiAgICAgICAgICAgICAnPGJvdW5kIG1ldGhvZCBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS5hbWV0aG9kIG9mIDwlcy5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBpbnN0YW5jZSBhdCAweCcgXAogICAgICAgICAgICAgJSAocXV4Ll9fbmFtZV9fLCkgKSkKIApAQCAtMzIwLDggKzMyMCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoUmVwclRlc3RzKQotICAgIGlmIG9zLm5hbWUgIT0gJ21hYyc6Ci0gICAgICAgIHJ1bl91bml0dGVzdChMb25nUmVwclRlc3QpCisgICAgcnVuX3VuaXR0ZXN0KExvbmdSZXByVGVzdCkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKaW5kZXggZjM1NGExYi4uNTI2OTJhNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CkBAIC0xLDkgKzEsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotCi1pbXBvcnQgcmVzb3VyY2UKIGltcG9ydCB0aW1lCiAKK3Jlc291cmNlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Jlc291cmNlJykKKwogIyBUaGlzIHRlc3QgaXMgY2hlY2tpbmcgYSBmZXcgc3BlY2lmaWMgcHJvYmxlbSBzcG90cyB3aXRoIHRoZSByZXNvdXJjZSBtb2R1bGUuCiAKIGNsYXNzIFJlc291cmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JmYzgyMi5weSBiL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CmluZGV4IGEwNTMyNWQuLmQ4YTAyODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CkBAIC0xNiwyMyArMTYsMjMgQEAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIG1zZyA9IHNlbGYuY3JlYXRlX21lc3NhZ2UoCiAgICAgICAgICAgICAnVG86ICJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PlxuXG50ZXN0XG4nKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLmdldCgidG8iKSA9PSAnImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+JykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5nZXQoIlRPIikgPT0gJyJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIsICJOby1TdWNoLVZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5nZXQoInRvIikgPT0gJyJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJUTyIpID09ICcibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgiTm8tU3VjaC1IZWFkZXIiKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgiTm8tU3VjaC1IZWFkZXIiLCAiTm8tU3VjaC1WYWx1ZSIpCiAgICAgICAgICAgICAgICAgICAgICA9PSAiTm8tU3VjaC1WYWx1ZSIpCiAKICAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgogICAgICAgICBtc2cgPSBzZWxmLmNyZWF0ZV9tZXNzYWdlKAogICAgICAgICAgICAgJ1RvOiAibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD5cblxudGVzdFxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBtc2cuaGFzX2tleSgiTmV3LUhlYWRlciIpKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnLnNldGRlZmF1bHQoIk5ldy1IZWFkZXIiLCAiTmV3LVZhbHVlIikgPT0gIk5ldy1WYWx1ZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhtc2cuc2V0ZGVmYXVsdCgiTmV3LUhlYWRlciIsICJEaWZmZXJlbnQtVmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG1zZy5oYXNfa2V5KCJOZXctSGVhZGVyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuc2V0ZGVmYXVsdCgiTmV3LUhlYWRlciIsICJOZXctVmFsdWUiKSA9PSAiTmV3LVZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5zZXRkZWZhdWx0KCJOZXctSGVhZGVyIiwgIkRpZmZlcmVudC1WYWx1ZSIpCiAgICAgICAgICAgICAgICAgICAgICA9PSAiTmV3LVZhbHVlIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZ1sibmV3LWhlYWRlciJdID09ICJOZXctVmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnWyJuZXctaGVhZGVyIl0gPT0gIk5ldy1WYWx1ZSIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1zZy5zZXRkZWZhdWx0KCJBbm90aGVyLUhlYWRlciIpID09ICIiKQotICAgICAgICBzZWxmLmFzc2VydF8obXNnWyJhbm90aGVyLWhlYWRlciJdID09ICIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLnNldGRlZmF1bHQoIkFub3RoZXItSGVhZGVyIikgPT0gIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2dbImFub3RoZXItaGVhZGVyIl0gPT0gIiIpCiAKICAgICBkZWYgY2hlY2soc2VsZiwgbXNnLCByZXN1bHRzKToKICAgICAgICAgIiIiQ2hlY2sgYWRkcmVzc2VzIGFuZCB0aGUgZGF0ZS4iIiIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weSBiL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQppbmRleCA3ZTQ0MTJhLi43MGZhMGQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JpY2hjbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlYWxyZXMpLCBsZW4oZXhwcmVzKSkKICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4ocmVhbHJlcykpOgogICAgICAgICAgICAgICAgICMgcmVzdWx0cyBhcmUgYm9vbCwgc28gd2UgY2FuIHVzZSAiaXMiIGhlcmUKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ocmVhbHJlc1tpXSBpcyBleHByZXNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWxyZXNbaV0gaXMgZXhwcmVzW2ldKQogCiAgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CiAgICAgICAgICMgY2hlY2sgdGhhdCBjb21wYXJpc29ucyBpbnZvbHZpbmcgVmVjdG9yIG9iamVjdHMKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcG1hcFtvcG5hbWVdOgogICAgICAgICAgICAgICAgICAgICByZWFscmVzID0gb3AodGEsIHRiKQogICAgICAgICAgICAgICAgICAgICByZWFscmVzID0gZ2V0YXR0cihyZWFscmVzLCAieCIsIHJlYWxyZXMpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZWFscmVzIGlzIGV4cHJlcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWxyZXMgaXMgZXhwcmVzKQogCiAgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgogICAgICAgICAjIGNoZWNrIGFsbCBvcGVyYXRvcnMgYW5kIGFsbCBjb21wYXJpc29uIHJlc3VsdHMKQEAgLTE5MiwxMyArMTkyLDEzIEBACiAKICAgICBkZWYgdGVzdF9taXNiZWhhdmluKHNlbGYpOgogICAgICAgICBjbGFzcyBNaXNiOgotICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6IHJldHVybiAwCi0gICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIDAKLSAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gMAotICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6IHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIgotICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6IHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIgotICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6IHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCAiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIgotICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiByYWlzZSBSdW50aW1lRXJyb3IsICJleHBlY3RlZCIKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZl8sIG90aGVyKTogc2VsZi5mYWlsKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmXywgb3RoZXIpOiBzZWxmLmZhaWwoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCisgICAgICAgICAgICBkZWYgX19uZV9fKHNlbGZfLCBvdGhlcik6IHNlbGYuZmFpbCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGZfLCBvdGhlcik6IHJhaXNlIFJ1bnRpbWVFcnJvciwgImV4cGVjdGVkIgogICAgICAgICBhID0gTWlzYigpCiAgICAgICAgIGIgPSBNaXNiKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhPGIsIDApCkBAIC0yMzksOCArMjM5LDggQEAKICAgICAgICAgYi5hcHBlbmQoMTcpCiAgICAgICAgICMgRXZlbiByZWN1cnNpdmUgbGlzdHMgb2YgZGlmZmVyZW50IGxlbmd0aHMgYXJlIGRpZmZlcmVudCwKICAgICAgICAgIyBidXQgdGhleSBjYW5ub3QgYmUgb3JkZXJlZAotICAgICAgICBzZWxmLmFzc2VydF8obm90IChhID09IGIpKQotICAgICAgICBzZWxmLmFzc2VydF8oYSAhPSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IChhID09IGIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmx0LCBhLCBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmxlLCBhLCBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmd0LCBhLCBiKQpAQCAtMjUwLDkgKzI1MCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubmUsIGEsIGIpCiAgICAgICAgIGEuaW5zZXJ0KDAsIDExKQogICAgICAgICBiLmluc2VydCgwLCAxMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoYSA9PSBiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgIT0gYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgPCBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IChhID09IGIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA8IGIpCiAKIGNsYXNzIERpY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjcxLDE5ICsyNzEsMTYgQEAKICAgICAgICAgICAgIGltYWcxYltrXSA9IHYKICAgICAgICAgaW1hZzIgPSBpbWFnMWIuY29weSgpCiAgICAgICAgIGltYWcyW2tdID0gdiArIDEuMAotICAgICAgICBzZWxmLmFzc2VydF8oaW1hZzFhID09IGltYWcxYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGltYWcxYSA9PSBpbWFnMWIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpbWFnMiA9PSBpbWFnMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGltYWcxYSAhPSBpbWFnMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSA9PSBpbWFnMWEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMWEgPT0gaW1hZzFiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZzIgPT0gaW1hZzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMWEgIT0gaW1hZzIpCiAgICAgICAgIGZvciBvcG5hbWUgaW4gKCJsdCIsICJsZSIsICJndCIsICJnZSIpOgogICAgICAgICAgICAgZm9yIG9wIGluIG9wbWFwW29wbmFtZV06CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgaW1hZzFhLCBpbWFnMikKIAogY2xhc3MgTGlzdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIGFzc2VydElzKHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQotCiAgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CiAgICAgICAgICMgZXhlcmNpc2UgYWxsIGNvbXBhcmlzb25zIGZvciBsaXN0cwogICAgICAgICB4ID0gWzQyXQpAQCAtMzMxLDcgKzMyOCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFZlY3RvclRlc3QsIE51bWJlclRlc3QsIE1pc2NUZXN0LCBMaXN0VGVzdCkKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygoImRpY3QgaW5lcXVhbGl0eSBjb21wYXJpc29ucyAiCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImRpY3QgaW5lcXVhbGl0eSBjb21wYXJpc29ucyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiAzLngiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBlNzBkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQpAQCAtMCwwICsxLDczIEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBfX2J1aWx0aW5fXyBhcyBidWlsdGlucworaW1wb3J0IHJsY29tcGxldGVyCisKK2NsYXNzIENvbXBsZXRlTWUob2JqZWN0KToKKyAgICAiIiIgVHJpdmlhbCBjbGFzcyB1c2VkIGluIHRlc3Rpbmcgcmxjb21wbGV0ZXIuQ29tcGxldGVyLiAiIiIKKyAgICBzcGFtID0gMQorCisKK2NsYXNzIFRlc3RSbGNvbXBsZXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0ZGNvbXBsZXRlciA9IHJsY29tcGxldGVyLkNvbXBsZXRlcigpCisgICAgICAgIHNlbGYuY29tcGxldGVyID0gcmxjb21wbGV0ZXIuQ29tcGxldGVyKGRpY3Qoc3BhbT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdnPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0ZU1lPUNvbXBsZXRlTWUpKQorCisgICAgICAgICMgZm9yY2VzIHN0ZGNvbXBsZXRlciB0byBiaW5kIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLnN0ZGNvbXBsZXRlci5jb21wbGV0ZSgnJywgMCkKKworICAgIGRlZiB0ZXN0X25hbWVzcGFjZShzZWxmKToKKyAgICAgICAgY2xhc3MgQShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdGRjb21wbGV0ZXIudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5jb21wbGV0ZXIudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocmxjb21wbGV0ZXIuQ29tcGxldGVyKEEoKSkudXNlX21haW5fbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmxjb21wbGV0ZXIuQ29tcGxldGVyLCBCKCgxLCkpKQorCisgICAgZGVmIHRlc3RfZ2xvYmFsX21hdGNoZXMoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnZGknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3grJygnIGZvciB4IGluIGRpcihidWlsdGlucykgaWYgeC5zdGFydHN3aXRoKCdkaScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2VsZi5zdGRjb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ3N0JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt4KycoJyBmb3IgeCBpbiBkaXIoYnVpbHRpbnMpIGlmIHguc3RhcnRzd2l0aCgnc3QnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGRjb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ2FrYWtzYWphZGhhaycpLCBbXSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBhIGN1c3RvbWl6ZWQgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuZ2xvYmFsX21hdGNoZXMoJ0NvbXBsZXRlTScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnQ29tcGxldGVNZSgnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnZWcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2VnZygnXSkKKyAgICAgICAgIyBYWFg6IHNlZSBpc3N1ZTUyNTYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnQ29tcGxldGVNJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lKCddKQorCisgICAgZGVmIHRlc3RfYXR0cl9tYXRjaGVzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2l0aCBidWlsdGlucyBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0ZGNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ3N0ci5zJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdHIue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RkY29tcGxldGVyLmF0dHJfbWF0Y2hlcygndHVwbGUuZm9vc3BhbWVnZycpLCBbXSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBhIGN1c3RvbWl6ZWQgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCdDb21wbGV0ZU1lLnNwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lLnNwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlbWUuZWdnJyksIFtdKQorCisgICAgICAgIENvbXBsZXRlTWUubWUgPSBDb21wbGV0ZU1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCdDb21wbGV0ZU1lLm1lLm1lLnNwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lLm1lLm1lLnNwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ2VnZy5zJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydlZ2cue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFJsY29tcGxldGVyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CmluZGV4IDY1MGI2MDMuLjMzNzZhOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQpAQCAtMjAsOSArMjAsOSBAQAogICAgICAgICAgICAgdXJsID0gc2VsZi51cmwKICAgICAgICAgICAgIGFnZW50ID0gc2VsZi5hZ2VudAogICAgICAgICBpZiBzZWxmLmdvb2Q6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmNhbl9mZXRjaChhZ2VudCwgdXJsKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKHNlbGYucGFyc2VyLmNhbl9mZXRjaChhZ2VudCwgdXJsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnN0cgpAQCAtMjAyLDcgKzIwMiwxOCBAQAogUm9ib3RUZXN0KDEzLCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Imdvb2dsZWJvdCIpCiAKIAotIyAxNC4gRm9yIGlzc3VlICM0MTA4IChvYmV5IGZpcnN0ICogZW50cnkpCisjIDE0LiBGb3IgaXNzdWUgIzYzMjUgKHF1ZXJ5IHN0cmluZyBzdXBwb3J0KQorZG9jID0gIiIiCitVc2VyLWFnZW50OiAqCitEaXNhbGxvdzogL3NvbWUvcGF0aD9uYW1lPXZhbHVlCisiIiIKKworZ29vZCA9IFsnL3NvbWUvcGF0aCddCitiYWQgPSBbJy9zb21lL3BhdGg/bmFtZT12YWx1ZSddCisKK1JvYm90VGVzdCgxNCwgZG9jLCBnb29kLCBiYWQpCisKKyMgMTUuIEZvciBpc3N1ZSAjNDEwOCAob2JleSBmaXJzdCAqIGVudHJ5KQogZG9jID0gIiIiCiBVc2VyLWFnZW50OiAqCiBEaXNhbGxvdzogL3NvbWUvcGF0aApAQCAtMjE0LDIyICsyMjUsMzYgQEAKIGdvb2QgPSBbJy9hbm90aGVyL3BhdGgnXQogYmFkID0gWycvc29tZS9wYXRoJ10KIAotUm9ib3RUZXN0KDE0LCBkb2MsIGdvb2QsIGJhZCkKK1JvYm90VGVzdCgxNSwgZG9jLCBnb29kLCBiYWQpCiAKIAotY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBydW5UZXN0KHNlbGYpOgorY2xhc3MgTmV0d29ya1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0UGFzc3dvcmRQcm90ZWN0ZWRTaXRlKHNlbGYpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICAjIHdob2xlIHNpdGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkLgotICAgICAgICB1cmwgPSAnaHR0cDovL211ZWJsZXNtb3JhbGVkYS5jb20nCi0gICAgICAgIHBhcnNlciA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCi0gICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKLSAgICAgICAgcGFyc2VyLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCB1cmwrIi9yb2JvdHMudHh0IiksIEZhbHNlKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ211ZWJsZXNtb3JhbGVkYS5jb20nKToKKyAgICAgICAgICAgIHVybCA9ICdodHRwOi8vbXVlYmxlc21vcmFsZWRhLmNvbScKKyAgICAgICAgICAgIHBhcnNlciA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCisgICAgICAgICAgICBwYXJzZXIuc2V0X3VybCh1cmwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnJXMgaXMgdW5hdmFpbGFibGUnICUgdXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuY2FuX2ZldGNoKCIqIiwgdXJsKyIvcm9ib3RzLnR4dCIpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0UHl0aG9uT3JnKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3d3dy5weXRob24ub3JnJyk6CisgICAgICAgICAgICBwYXJzZXIgPSByb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIoCisgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9yb2JvdHMudHh0IikKKyAgICAgICAgICAgIHBhcnNlci5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBwYXJzZXIuY2FuX2ZldGNoKCIqIiwgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9yb2JvdHMudHh0IikpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QodGVzdHMpCi0gICAgVGVzdENhc2UoKS5ydW4oKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTmV0d29ya1Rlc3RDYXNlKQogCiBpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKICAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IDEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDE2NWNiNjMuLmRiY2IyM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtMywxMCArMywxNCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cworaW1wb3J0IHJlCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgZm9yZ2V0Ci1mcm9tIHJ1bnB5IGltcG9ydCBfcnVuX2NvZGUsIF9ydW5fbW9kdWxlX2NvZGUsIHJ1bl9tb2R1bGUKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAodGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBjb21waWxlX3NjcmlwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9wa2csIG1ha2VfemlwX3NjcmlwdCwgbWFrZV96aXBfcGtnKQogCisKK2Zyb20gcnVucHkgaW1wb3J0IF9ydW5fY29kZSwgX3J1bl9tb2R1bGVfY29kZSwgcnVuX21vZHVsZSwgcnVuX3BhdGgKICMgTm90ZTogVGhpcyBtb2R1bGUgY2FuJ3Qgc2FmZWx5IHRlc3QgX3J1bl9tb2R1bGVfYXNfbWFpbiBhcyBpdAogIyBydW5zIGl0cyB0ZXN0cyBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB3aGljaCB3b3VsZCBtZXNzIHdpdGggdGhlCiAjIHJlYWwgX19tYWluX18gbW9kdWxlICh1c3VhbGx5IHRlc3QucmVncnRlc3QpCkBAIC0xNSw2ICsxOSw3IEBACiAjIFNldCB1cCB0aGUgdGVzdCBjb2RlIGFuZCBleHBlY3RlZCByZXN1bHRzCiAKIGNsYXNzIFJ1bk1vZHVsZUNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5fcnVuX2NvZGUgYW5kIHJ1bnB5Ll9ydW5fbW9kdWxlX2NvZGUiIiIKIAogICAgIGV4cGVjdGVkX3Jlc3VsdCA9IFsiVG9wIGxldmVsIGFzc2lnbm1lbnQiLCAiTG93ZXIgbGV2ZWwgcmVmZXJlbmNlIl0KICAgICB0ZXN0X3NvdXJjZSA9ICgKQEAgLTM3LDE0ICs0MiwxNCBAQAogICAgIGRlZiB0ZXN0X3J1bl9jb2RlKHNlbGYpOgogICAgICAgICBzYXZlZF9hcmd2MCA9IHN5cy5hcmd2WzBdCiAgICAgICAgIGQgPSBfcnVuX2NvZGUoc2VsZi50ZXN0X3NvdXJjZSwge30pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkWyJyZXN1bHQiXSA9PSBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRbIl9fbmFtZV9fIl0gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRbIl9fZmlsZV9fIl0gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRbIl9fbG9hZGVyX18iXSBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZFsiX19wYWNrYWdlX18iXSBpcyBOb25lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZFsicnVuX2FyZ3YwIl0gaXMgc2F2ZWRfYXJndjApCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygicnVuX25hbWUiIG5vdCBpbiBkKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3lzLmFyZ3ZbMF0gaXMgc2F2ZWRfYXJndjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsicmVzdWx0Il0sIHNlbGYuZXhwZWN0ZWRfcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fbmFtZV9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19maWxlX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX2xvYWRlcl9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19wYWNrYWdlX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJydW5fYXJndjAiXSwgc2F2ZWRfYXJndjApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInJ1bl9uYW1lIiwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuYXJndlswXSwgc2F2ZWRfYXJndjApCiAKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2NvZGUoc2VsZik6CiAgICAgICAgIGluaXRpYWwgPSBvYmplY3QoKQpAQCAtNjAsMjIgKzY1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJyZXN1bHQiIG5vdCBpbiBkMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJpbml0aWFsIl0gaXMgaW5pdGlhbCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJyZXN1bHQiXSA9PSBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJuZXN0ZWQiXVsieCJdID09IDEpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsiX19uYW1lX18iXSBpcyBuYW1lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsibW9kdWxlX2luX3N5c19tb2R1bGVzIl0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsiX19maWxlX18iXSBpcyBmaWxlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDJbInJ1bl9hcmd2MCJdIGlzIGZpbGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsiX19sb2FkZXJfXyJdIGlzIGxvYWRlcikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGQyWyJfX3BhY2thZ2VfXyJdIGlzIHBhY2thZ2UpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzeXMuYXJndlswXSBpcyBzYXZlZF9hcmd2MCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5hbWUgbm90IGluIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJyZXN1bHQiLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiaW5pdGlhbCJdLCBpbml0aWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJyZXN1bHQiXSwgc2VsZi5leHBlY3RlZF9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbIm5lc3RlZCJdWyJ4Il0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fbmFtZV9fIl0sIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsicnVuX25hbWVfaW5fc3lzX21vZHVsZXMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJtb2R1bGVfaW5fc3lzX21vZHVsZXMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19maWxlX18iXSwgZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsicnVuX2FyZ3YwIl0sIGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fbG9hZGVyX18iXSwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX3BhY2thZ2VfXyJdLCBwYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5hcmd2WzBdLCBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKIAogCiBjbGFzcyBSdW5Nb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fbW9kdWxlIiIiCiAKICAgICBkZWYgZXhwZWN0X2ltcG9ydF9lcnJvcihzZWxmLCBtb2RfbmFtZSk6CiAgICAgICAgIHRyeToKQEAgLTk0LDggKzEwMCw4IEBACiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiYS5iZWUiKQogICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoIi5ob3dhcmQiKQogICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoIi4uZWF0ZW4iKQotICAgICAgICAjIFBhY2thZ2UKLSAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJsb2dnaW5nIikKKyAgICAgICAgIyBQYWNrYWdlIHdpdGhvdXQgX19tYWluX18ucHkKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJtdWx0aXByb2Nlc3NpbmciKQogCiAgICAgZGVmIHRlc3RfbGlicmFyeV9tb2R1bGUoc2VsZik6CiAgICAgICAgIHJ1bl9tb2R1bGUoInJ1bnB5IikKQEAgLTEwNyw5ICsxMTMsOSBAQAogICAgICAgICBwa2dfZmlsZS5jbG9zZSgpCiAgICAgICAgIHJldHVybiBwa2dfZm5hbWUKIAotICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCk6CisgICAgZGVmIF9tYWtlX3BrZyhzZWxmLCBzb3VyY2UsIGRlcHRoLCBtb2RfYmFzZT0icnVucHlfdGVzdCIpOgogICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgotICAgICAgICB0ZXN0X2ZuYW1lID0gInJ1bnB5X3Rlc3QiK29zLmV4dHNlcCsicHkiCisgICAgICAgIHRlc3RfZm5hbWUgPSBtb2RfYmFzZStvcy5leHRzZXArInB5IgogICAgICAgICBwa2dfZGlyID0gc3ViX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBQYWNrYWdlIHRyZWUgaW46Iiwgc3ViX2RpcgogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGtnX2RpcikKQEAgLTEyNCw3ICsxMzAsNyBAQAogICAgICAgICBtb2RfZmlsZS53cml0ZShzb3VyY2UpCiAgICAgICAgIG1vZF9maWxlLmNsb3NlKCkKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgQ3JlYXRlZDoiLCBtb2RfZm5hbWUKLSAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArICJydW5weV90ZXN0IgorICAgICAgICBtb2RfbmFtZSA9IChwa2dfbmFtZSsiLiIpKmRlcHRoICsgbW9kX2Jhc2UKICAgICAgICAgcmV0dXJuIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUKIAogICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CkBAIC0xNTksMjAgKzE2NSw0MiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZQogICAgICAgICAgICAgZDEgPSBydW5fbW9kdWxlKG1vZF9uYW1lKSAjIFJlYWQgZnJvbSBzb3VyY2UKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygieCIgaW4gZDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZDFbIngiXSA9PSAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJ4Il0gPT0gMSkKICAgICAgICAgICAgIGRlbCBkMSAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KICAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUobW9kX2ZuYW1lKQogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBtb2RfbmFtZQogICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKG1vZF9uYW1lKSAjIFJlYWQgZnJvbSBieXRlY29kZQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKCJ4IiBpbiBkMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsieCJdID09IDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIngiXSA9PSAxKQogICAgICAgICAgICAgZGVsIGQyICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJNb2R1bGUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IgogCisgICAgZGVmIF9jaGVja19wYWNrYWdlKHNlbGYsIGRlcHRoKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKCJ4PTFcbiIsIGRlcHRoLCAiX19tYWluX18iKSkKKyAgICAgICAgcGtnX25hbWUsIF8sIF8gPSBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIikKKyAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIHNvdXJjZToiLCBwa2dfbmFtZQorICAgICAgICAgICAgZDEgPSBydW5fbW9kdWxlKHBrZ19uYW1lKSAjIFJlYWQgZnJvbSBzb3VyY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIngiLCBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsieCJdID09IDEpCisgICAgICAgICAgICBkZWwgZDEgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKG1vZF9mbmFtZSkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gY29tcGlsZWQ6IiwgcGtnX25hbWUKKyAgICAgICAgICAgIGQyID0gcnVuX21vZHVsZShwa2dfbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIngiLCBkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsieCJdID09IDEpCisgICAgICAgICAgICBkZWwgZDIgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9kZWxfcGtnKHBrZ19kaXIsIGRlcHRoLCBwa2dfbmFtZSkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlBhY2thZ2UgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IgorCiAgICAgZGVmIF9hZGRfcmVsYXRpdmVfbW9kdWxlcyhzZWxmLCBiYXNlX2Rpciwgc291cmNlLCBkZXB0aCk6CiAgICAgICAgIGlmIGRlcHRoIDw9IDE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWxhdGl2ZSBtb2R1bGUgdGVzdCBuZWVkcyBkZXB0aCA+IDEiKQpAQCAtMjExLDE5ICsyMzksMTkgQEAKICAgICAgICAgICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZQogICAgICAgICAgICAgZDEgPSBydW5fbW9kdWxlKG1vZF9uYW1lLCBydW5fbmFtZT1ydW5fbmFtZSkgIyBSZWFkIGZyb20gc291cmNlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIl9fcGFja2FnZV9fIiBpbiBkMSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMVsiX19wYWNrYWdlX18iXSA9PSBwa2dfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygic2libGluZyIgaW4gZDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIm5lcGhldyIgaW4gZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic2libGluZyIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibmVwaGV3IiwgZDEpCiAgICAgICAgICAgICBkZWwgZDEgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgb3MucmVtb3ZlKG1vZF9mbmFtZSkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJSdW5uaW5nIGZyb20gY29tcGlsZWQ6IiwgbW9kX25hbWUKICAgICAgICAgICAgIGQyID0gcnVuX21vZHVsZShtb2RfbmFtZSwgcnVuX25hbWU9cnVuX25hbWUpICMgUmVhZCBmcm9tIGJ5dGVjb2RlCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIl9fcGFja2FnZV9fIiBpbiBkMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkMlsiX19wYWNrYWdlX18iXSA9PSBwa2dfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcygic2libGluZyIgaW4gZDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoIm5lcGhldyIgaW4gZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic2libGluZyIsIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibmVwaGV3IiwgZDIpCiAgICAgICAgICAgICBkZWwgZDIgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9kZWxfcGtnKHBrZ19kaXIsIGRlcHRoLCBtb2RfbmFtZSkKQEAgLTIzNCw2ICsyNjIsMTEgQEAKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCkKIAorICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoKQorCiAgICAgZGVmIHRlc3RfZXhwbGljaXRfcmVsYXRpdmVfaW1wb3J0KHNlbGYpOgogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMiwgNSk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiVGVzdGluZyByZWxhdGl2ZSBpbXBvcnRzIGF0IGRlcHRoOiIsIGRlcHRoCkBAIC0yNDUsOSArMjc4LDEyNSBAQAogICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVsYXRpdmVfaW1wb3J0cyhkZXB0aCwgIl9fbWFpbl9fIikKIAogCitjbGFzcyBSdW5QYXRoVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkucnVuX3BhdGgiIiIKKyAgICAjIEJhc2VkIG9uIGNvcnJlc3BvbmRpbmcgdGVzdHMgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQKKworICAgIHRlc3Rfc291cmNlID0gIiIiXAorIyBTY3JpcHQgbWF5IGJlIHJ1biB3aXRoIG9wdGltaXNhdGlvbiBlbmFibGVkLCBzbyBkb24ndCByZWx5IG9uIGFzc2VydAorIyBzdGF0ZW1lbnRzIGJlaW5nIGV4ZWN1dGVkCitkZWYgYXNzZXJ0RXF1YWwobGhzLCByaHMpOgorICAgIGlmIGxocyAhPSByaHM6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCclciAhPSAlcicgJSAobGhzLCByaHMpKQorZGVmIGFzc2VydElzKGxocywgcmhzKToKKyAgICBpZiBsaHMgaXMgbm90IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyIGlzIG5vdCAlcicgJSAobGhzLCByaHMpKQorIyBDaGVjayBiYXNpYyBjb2RlIGV4ZWN1dGlvbgorcmVzdWx0ID0gWydUb3AgbGV2ZWwgYXNzaWdubWVudCddCitkZWYgZigpOgorICAgIHJlc3VsdC5hcHBlbmQoJ0xvd2VyIGxldmVsIHJlZmVyZW5jZScpCitmKCkKK2Fzc2VydEVxdWFsKHJlc3VsdCwgWydUb3AgbGV2ZWwgYXNzaWdubWVudCcsICdMb3dlciBsZXZlbCByZWZlcmVuY2UnXSkKKyMgQ2hlY2sgdGhlIHN5cyBtb2R1bGUKK2ltcG9ydCBzeXMKK2Fzc2VydElzKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fKQorYXJndjAgPSBzeXMuYXJndlswXQorIiIiCisKKyAgICBkZWYgX21ha2VfdGVzdF9zY3JpcHQoc2VsZiwgc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2U9Tm9uZSk6CisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgc291cmNlID0gc2VsZi50ZXN0X3NvdXJjZQorICAgICAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisKKyAgICBkZWYgX2NoZWNrX3NjcmlwdChzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfbmFtZSwgZXhwZWN0ZWRfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGFja2FnZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bl9wYXRoKHNjcmlwdF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiX19uYW1lX18iXSwgZXhwZWN0ZWRfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fZmlsZV9fIl0sIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFyZ3YwIiwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiYXJndjAiXSwgZXhwZWN0ZWRfYXJndjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJfX3BhY2thZ2VfXyJdLCBleHBlY3RlZF9wYWNrYWdlKQorCisgICAgZGVmIF9jaGVja19pbXBvcnRfZXJyb3Ioc2VsZiwgc2NyaXB0X25hbWUsIG1zZyk6CisgICAgICAgIG1zZyA9IHJlLmVzY2FwZShtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEltcG9ydEVycm9yLCBtc2csIHJ1bl9wYXRoLCBzY3JpcHRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnc2NyaXB0JworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsICI8cnVuX3BhdGg+IiwgY29tcGlsZWRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgIjxydW5fcGF0aD4iLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsICcnKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ25vdF9tYWluJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc2NyaXB0X2RpcgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHNjcmlwdF9kaXIsIG1zZykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lLCAnJykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdub3RfbWFpbicKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X21haW5fcmVjdXJzaW9uX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpciwgdGVtcF9kaXIoKSBhcyBkdW1teV9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNvdXJjZSA9ICgiaW1wb3J0IHJ1bnB5XG4iCisgICAgICAgICAgICAgICAgICAgICAgInJ1bnB5LnJ1bl9wYXRoKCVyKVxuIikgJSBkdW1teV9kaXIKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSwgc291cmNlKQorICAgICAgICAgICAgemlwX25hbWUsIGZuYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbXNnID0gInJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFJ1bnRpbWVFcnJvciwgbXNnLCBydW5fcGF0aCwgemlwX25hbWUpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJ1bk1vZHVsZUNvZGVUZXN0KQotICAgIHJ1bl91bml0dGVzdChSdW5Nb2R1bGVUZXN0KQorICAgIHJ1bl91bml0dGVzdChSdW5Nb2R1bGVDb2RlVGVzdCwgUnVuTW9kdWxlVGVzdCwgUnVuUGF0aFRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5IGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKaW5kZXggYzU4Mjk4NS4uYWRiOTMwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zYXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKQEAgLTEsNCArMSw0IEBACi0jIHJlZ3Jlc3Npb24gdGVzdCBmb3IgU0FYIDIuMCAgICAgICAgICAgIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCisjIHJlZ3Jlc3Npb24gdGVzdCBmb3IgU0FYIDIuMCAgICAgICAgICAgIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogIyAkSWQkCiAKIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIsIENvbnRlbnRIYW5kbGVyLCBcCkBAIC0xMSwxMSArMTEsMTQgQEAKIGZyb20geG1sLnNheC5zYXh1dGlscyBpbXBvcnQgWE1MR2VuZXJhdG9yLCBlc2NhcGUsIHVuZXNjYXBlLCBxdW90ZWF0dHIsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MRmlsdGVyQmFzZQogZnJvbSB4bWwuc2F4LmV4cGF0cmVhZGVyIGltcG9ydCBjcmVhdGVfcGFyc2VyCitmcm9tIHhtbC5zYXguaGFuZGxlciBpbXBvcnQgZmVhdHVyZV9uYW1lc3BhY2VzCiBmcm9tIHhtbC5zYXgueG1scmVhZGVyIGltcG9ydCBJbnB1dFNvdXJjZSwgQXR0cmlidXRlc0ltcGwsIEF0dHJpYnV0ZXNOU0ltcGwKIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKKworVEVTVF9YTUxGSUxFID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCitURVNUX1hNTEZJTEVfT1VUID0gZmluZGZpbGUoInRlc3QueG1sLm91dCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQogCiBuc191cmkgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL3htbC1ucy9zYXh0ZXN0LyIKIApAQCAtMjYsMTYgKzI5LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXROYW1lQnlRTmFtZSwgImF0dHIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0UU5hbWVCeU5hbWUsICJhdHRyIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLl9fZ2V0aXRlbV9fLCAiYXR0ciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldExlbmd0aCgpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXROYW1lcygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYXR0cnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGF0dHJzLmhhc19rZXkoImF0dHIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMua2V5cygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0KCJhdHRycyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoImF0dHJzIiwgMjUpLCAyNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuaXRlbXMoKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLnZhbHVlcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0cnMiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoImF0dHJzIiwgMjUpLCAyNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5pdGVtcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy52YWx1ZXMoKSwgW10pCiAKICAgICBkZWYgdmVyaWZ5X2VtcHR5X25zYXR0cnMoc2VsZiwgYXR0cnMpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0VmFsdWUsIChuc191cmksICJhdHRyIikpCkBAIC00MywzMyArNDYsMzMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldE5hbWVCeVFOYW1lLCAibnM6YXR0ciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRRTmFtZUJ5TmFtZSwgKG5zX3VyaSwgImF0dHIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLl9fZ2V0aXRlbV9fLCAobnNfdXJpLCAiYXR0ciIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRMZW5ndGgoKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFFOYW1lcygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGF0dHJzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhdHRycy5oYXNfa2V5KChuc191cmksICJhdHRyIikpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5rZXlzKCksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksIDI1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5pdGVtcygpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMudmFsdWVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksIDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbXSkKIAogICAgIGRlZiB2ZXJpZnlfYXR0cnNfd2F0dHIoc2VsZiwgYXR0cnMpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRMZW5ndGgoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZXMoKSwgWyJhdHRyIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFFOYW1lcygpLCBbImF0dHIiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGF0dHJzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbImF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgWyJhdHRyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGF0dHJzLmhhc19rZXkoImF0dHIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMua2V5cygpLCBbImF0dHIiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0KCJhdHRyIiksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoImF0dHIiLCAyNSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5pdGVtcygpLCBbKCJhdHRyIiwgInZhbCIpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFZhbHVlKCJhdHRyIiksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRWYWx1ZUJ5UU5hbWUoImF0dHIiKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJhdHRyIiksICJhdHRyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnNbImF0dHIiXSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFFOYW1lQnlOYW1lKCJhdHRyIiksICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFsiYXR0ciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0ciIpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoImF0dHIiLCAyNSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFsoImF0dHIiLCAidmFsIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlKCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlQnlRTmFtZSgiYXR0ciIpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lQnlRTmFtZSgiYXR0ciIpLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbImF0dHIiXSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoImF0dHIiKSwgImF0dHIiKQogCiBjbGFzcyBNYWtlUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbWFrZV9wYXJzZXIyKHNlbGYpOgpAQCAtOTksNDcgKzEwMiw0NyBAQAogY2xhc3MgU2F4dXRpbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjID09PT09IGVzY2FwZQogICAgIGRlZiB0ZXN0X2VzY2FwZV9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXNjYXBlKCJEb25hbGQgRHVjayAmIENvIiksICJEb25hbGQgRHVjayAmYW1wOyBDbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCJEb25hbGQgRHVjayAmIENvIiksICJEb25hbGQgRHVjayAmYW1wOyBDbyIpCiAKICAgICBkZWYgdGVzdF9lc2NhcGVfYWxsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlc2NhcGUoIjxEb25hbGQgRHVjayAmIENvPiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiJmx0O0RvbmFsZCBEdWNrICZhbXA7IENvJmd0OyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCI8RG9uYWxkIER1Y2sgJiBDbz4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJmx0O0RvbmFsZCBEdWNrICZhbXA7IENvJmd0OyIpCiAKICAgICBkZWYgdGVzdF9lc2NhcGVfZXh0cmEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGVzY2FwZSgiSGVpIHDlIGRlZyIsIHsi5SIgOiAiJmFyaW5nOyJ9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlaSBwJmFyaW5nOyBkZWciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVzY2FwZSgiSGVpIHDDpSBkZWciLCB7IsOlIiA6ICImYXJpbmc7In0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJIZWkgcCZhcmluZzsgZGVnIikKIAogICAgICMgPT09PT0gdW5lc2NhcGUKICAgICBkZWYgdGVzdF91bmVzY2FwZV9iYXNpYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5lc2NhcGUoIkRvbmFsZCBEdWNrICZhbXA7IENvIiksICJEb25hbGQgRHVjayAmIENvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiRG9uYWxkIER1Y2sgJmFtcDsgQ28iKSwgIkRvbmFsZCBEdWNrICYgQ28iKQogCiAgICAgZGVmIHRlc3RfdW5lc2NhcGVfYWxsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh1bmVzY2FwZSgiJmx0O0RvbmFsZCBEdWNrICZhbXA7IENvJmd0OyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiPERvbmFsZCBEdWNrICYgQ28+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmVzY2FwZSgiJmx0O0RvbmFsZCBEdWNrICZhbXA7IENvJmd0OyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8RG9uYWxkIER1Y2sgJiBDbz4iKQogCiAgICAgZGVmIHRlc3RfdW5lc2NhcGVfZXh0cmEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKCJIZWkgcOUgZGVnIiwgeyLlIiA6ICImYXJpbmc7In0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVpIHAmYXJpbmc7IGRlZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5lc2NhcGUoIkhlaSBww6UgZGVnIiwgeyLDpSIgOiAiJmFyaW5nOyJ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSGVpIHAmYXJpbmc7IGRlZyIpCiAKICAgICBkZWYgdGVzdF91bmVzY2FwZV9hbXBfZXh0cmEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHVuZXNjYXBlKCImYW1wO2ZvbzsiLCB7IiZmb287IjogInNwbGF0In0pLCAiJmZvbzsiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCImYW1wO2ZvbzsiLCB7IiZmb287IjogInNwbGF0In0pLCAiJmZvbzsiKQogCiAgICAgIyA9PT09PSBxdW90ZWF0dHIKICAgICBkZWYgdGVzdF9xdW90ZWF0dHJfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHF1b3RlYXR0cigiRG9uYWxkIER1Y2sgJiBDbyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnIkRvbmFsZCBEdWNrICZhbXA7IENvIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJEb25hbGQgRHVjayAmIENvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJEb25hbGQgRHVjayAmYW1wOyBDbyInKQogCiAgICAgZGVmIHRlc3Rfc2luZ2xlX3F1b3RlYXR0cihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocXVvdGVhdHRyKCdJbmNsdWRlcyAiZG91YmxlIiBxdW90ZXMnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wnSW5jbHVkZXMgImRvdWJsZSIgcXVvdGVzXCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cignSW5jbHVkZXMgImRvdWJsZSIgcXVvdGVzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1wnSW5jbHVkZXMgImRvdWJsZSIgcXVvdGVzXCcnKQogCiAgICAgZGVmIHRlc3RfZG91YmxlX3F1b3RlYXR0cihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiSW5jbHVkZXMgJ3NpbmdsZScgcXVvdGVzXCIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cigiSW5jbHVkZXMgJ3NpbmdsZScgcXVvdGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlwiSW5jbHVkZXMgJ3NpbmdsZScgcXVvdGVzXCIiKQogCiAgICAgZGVmIHRlc3Rfc2luZ2xlX2RvdWJsZV9xdW90ZWF0dHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHF1b3RlYXR0cigiSW5jbHVkZXMgJ3NpbmdsZScgYW5kIFwiZG91YmxlXCIgcXVvdGVzIiksCi0gICAgICAgICAgICAgICAgICAgICJcIkluY2x1ZGVzICdzaW5nbGUnIGFuZCAmcXVvdDtkb3VibGUmcXVvdDsgcXVvdGVzXCIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cigiSW5jbHVkZXMgJ3NpbmdsZScgYW5kIFwiZG91YmxlXCIgcXVvdGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlwiSW5jbHVkZXMgJ3NpbmdsZScgYW5kICZxdW90O2RvdWJsZSZxdW90OyBxdW90ZXNcIiIpCiAKICAgICAjID09PT09IG1ha2VfcGFyc2VyCiAgICAgZGVmIHRlc3RfbWFrZV9wYXJzZXIoc2VsZik6CkBAIC0xNjEsNyArMTY0LDcgQEAKICAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+PC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz48L2RvYz4iKQogCiAgICAgZGVmIHRlc3RfeG1sZ2VuX2NvbnRlbnQoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKQEAgLTE3Myw3ICsxNzYsNyBAQAogICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz5odWhlaTwvZG9jPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+aHVoZWk8L2RvYz4iKQogCiAgICAgZGVmIHRlc3RfeG1sZ2VuX3BpKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCkBAIC0xODUsNyArMTg4LDcgQEAKICAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCiAgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjw/dGVzdCBkYXRhPz48ZG9jPjwvZG9jPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjw/dGVzdCBkYXRhPz48ZG9jPjwvZG9jPiIpCiAKICAgICBkZWYgdGVzdF94bWxnZW5fY29udGVudF9lc2NhcGUoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKQEAgLTE5Nyw3ICsyMDAsNyBAQAogICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgIHN0YXJ0ICsgIjxkb2M+Jmx0O2h1aGVpJmFtcDs8L2RvYz4iKQogCiAgICAgZGVmIHRlc3RfeG1sZ2VuX2F0dHJfZXNjYXBlKHNlbGYpOgpAQCAtMjE1LDcgKzIxOCw3IEBACiAgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKICAgICAgICAgICAgICgiPGRvYyBhPSdcIic+PGUgYT1cIidcIj48L2U+IgogICAgICAgICAgICAgICI8ZSBhPVwiJyZxdW90O1wiPjwvZT4iCiAgICAgICAgICAgICAgIjxlIGE9XCImIzEwOyYjMTM7JiM5O1wiPjwvZT48L2RvYz4iKSkKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz4gPC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz4gPC9kb2M+IikKIAogICAgIGRlZiB0ZXN0X3htbGdlbl9ucyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtMjQ2LDcgKzI0OSw3IEBACiAgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCJuczEiKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArIFwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyBcCiAgICAgICAgICAgICgnPG5zMTpkb2MgeG1sbnM6bnMxPSIlcyI+PHVkb2M+PC91ZG9jPjwvbnMxOmRvYz4nICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNfdXJpKSkKIApAQCAtMjU5LDcgKzI2Miw3IEBACiAgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKE5vbmUsICdhJyksICdhJykKICAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQrJzxhIGI9ImMiPjwvYT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgYj0iYyI+PC9hPicpCiAKICAgICBkZWYgdGVzdF8xNDYzMDI2XzIoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKQEAgLTI3Miw3ICsyNzUsNyBAQAogICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZyhOb25lKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgeG1sbnM9InF1eCI+PC9hPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0Kyc8YSB4bWxucz0icXV4Ij48L2E+JykKIAogICAgIGRlZiB0ZXN0XzE0NjMwMjZfMyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQpAQCAtMjg1LDkgKzI4OCw2MyBAQAogICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygnbXknKQogICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAogICAgICAgICAgICAgc3RhcnQrJzxteTphIHhtbG5zOm15PSJxdXgiIGI9ImMiPjwvbXk6YT4nKQogCisgICAgZGVmIHRlc3RfNTAyN18xKHNlbGYpOgorICAgICAgICAjIFRoZSB4bWwgcHJlZml4IChhcyBpbiB4bWw6bGFuZyBiZWxvdykgaXMgcmVzZXJ2ZWQgYW5kIGJvdW5kIGJ5CisgICAgICAgICMgZGVmaW5pdGlvbiB0byBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuICBYTUxHZW5lcmF0b3IgaGFkCisgICAgICAgICMgYSBidWcgd2hlcmVieSBhIEtleUVycm9yIGlzIHRocm93biBiZWNhdXNlIHRoaXMgbmFtZXNwYWNlIGlzIG1pc3NpbmcKKyAgICAgICAgIyBmcm9tIGEgZGljdGlvbmFyeS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIGJ1ZyBieSBwYXJzaW5nIGEgZG9jdW1lbnQuCisgICAgICAgIHRlc3RfeG1sID0gU3RyaW5nSU8oCisgICAgICAgICAgICAnPD94bWwgdmVyc2lvbj0iMS4wIj8+JworICAgICAgICAgICAgJzxhOmcxIHhtbG5zOmE9Imh0dHA6Ly9leGFtcGxlLmNvbS9ucyI+JworICAgICAgICAgICAgICc8YTpnMiB4bWw6bGFuZz0iZW4iPkhlbGxvPC9hOmcyPicKKyAgICAgICAgICAgICc8L2E6ZzE+JykKKworICAgICAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRGZWF0dXJlKGZlYXR1cmVfbmFtZXNwYWNlcywgVHJ1ZSkKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2UodGVzdF94bWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMiB4bWw6bGFuZz0iZW4iPkhlbGxvPC9hOmcyPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hOmcxPicpKQorCisgICAgZGVmIHRlc3RfNTAyN18yKHNlbGYpOgorICAgICAgICAjIFRoZSB4bWwgcHJlZml4IChhcyBpbiB4bWw6bGFuZyBiZWxvdykgaXMgcmVzZXJ2ZWQgYW5kIGJvdW5kIGJ5CisgICAgICAgICMgZGVmaW5pdGlvbiB0byBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuICBYTUxHZW5lcmF0b3IgaGFkCisgICAgICAgICMgYSBidWcgd2hlcmVieSBhIEtleUVycm9yIGlzIHRocm93biBiZWNhdXNlIHRoaXMgbmFtZXNwYWNlIGlzIG1pc3NpbmcKKyAgICAgICAgIyBmcm9tIGEgZGljdGlvbmFyeS4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgdGVzdCBkZW1vbnN0cmF0ZXMgdGhlIGJ1ZyBieSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHRoZQorICAgICAgICAjIFhNTEdlbmVyYXRvci4KKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0UHJlZml4TWFwcGluZygnYScsICdodHRwOi8vZXhhbXBsZS5jb20vbnMnKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzEnKSwgJ2cxJywge30pCisgICAgICAgIGxhbmdfYXR0ciA9IHsoJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsICdsYW5nJyk6ICdlbid9CisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMicpLCAnZzInLCBsYW5nX2F0dHIpCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKCdIZWxsbycpCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzInKSwgJ2cyJykKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMScpLCAnZzEnKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygnYScpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMiB4bWw6bGFuZz0iZW4iPkhlbGxvPC9hOmcyPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hOmcxPicpKQorCiAKIGNsYXNzIFhNTEZpbHRlckJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9maWx0ZXJfYmFzaWMoc2VsZik6CkBAIC0zMDMsNyArMzYwLDcgQEAKICAgICAgICAgZmlsdGVyLmVuZEVsZW1lbnQoImRvYyIpCiAgICAgICAgIGZpbHRlci5lbmREb2N1bWVudCgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+Y29udGVudCA8L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPmNvbnRlbnQgPC9kb2M+IikKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMKQEAgLTMxMSw3ICszNjgsNyBAQAogIwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAoteG1sX3Rlc3Rfb3V0ID0gb3BlbihmaW5kZmlsZSgidGVzdCIrb3MuZXh0c2VwKyJ4bWwiK29zLmV4dHNlcCsib3V0IikpLnJlYWQoKQoreG1sX3Rlc3Rfb3V0ID0gb3BlbihURVNUX1hNTEZJTEVfT1VUKS5yZWFkKCkKIAogY2xhc3MgRXhwYXRSZWFkZXJUZXN0KFhtbFRlc3RCYXNlKToKIApAQCAtMzIzLDkgKzM4MCw5IEBACiAgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCiAKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKLSAgICAgICAgcGFyc2VyLnBhcnNlKG9wZW4oZmluZGZpbGUoInRlc3QiK29zLmV4dHNlcCsieG1sIikpKQorICAgICAgICBwYXJzZXIucGFyc2Uob3BlbihURVNUX1hNTEZJTEUpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIAogICAgICMgPT09PT0gRFRESGFuZGxlciBzdXBwb3J0CiAKQEAgLTM1Myw5ICs0MTAsOSBAQAogICAgICAgICBwYXJzZXIuZmVlZCgnPGRvYz48L2RvYz4nKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhbmRsZXIuX25vdGF0aW9ucywKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLl9ub3RhdGlvbnMsCiAgICAgICAgICAgICBbKCJHSUYiLCAiLS8vQ29tcHVTZXJ2ZS8vTk9UQVRJT04gR3JhcGhpY3MgSW50ZXJjaGFuZ2UgRm9ybWF0IDg5YS8vRU4iLCBOb25lKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhbmRsZXIuX2VudGl0aWVzLCBbKCJpbWciLCBOb25lLCAiZXhwYXQuZ2lmIiwgIkdJRiIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLl9lbnRpdGllcywgWygiaW1nIiwgTm9uZSwgImV4cGF0LmdpZiIsICJHSUYiKV0pCiAKICAgICAjID09PT09IEVudGl0eVJlc29sdmVyIHN1cHBvcnQKIApAQCAtMzc4LDggKzQzNSw4IEBACiAgICAgICAgIHBhcnNlci5mZWVkKCc8ZG9jPiZ0ZXN0OzwvZG9jPicpCiAgICAgICAgIHBhcnNlci5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIjxkb2M+PGVudGl0eT48L2VudGl0eT48L2RvYz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxkb2M+PGVudGl0eT48L2VudGl0eT48L2RvYz4iKQogCiAgICAgIyA9PT09PSBBdHRyaWJ1dGVzIHN1cHBvcnQKIApAQCAtNDMxLDE4ICs0ODgsMTggQEAKIAogICAgICAgICBhdHRycyA9IGdhdGhlci5fYXR0cnMKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRMZW5ndGgoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TmFtZXMoKSwgWyhuc191cmksICJhdHRyIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhdHRycy5nZXRRTmFtZXMoKSA9PSBbXSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmdldFFOYW1lcygpID09IFsibnM6YXR0ciJdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGF0dHJzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgobnNfdXJpLCAiYXR0ciIpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLml0ZW1zKCksIFsoKG5zX3VyaSwgImF0dHIiKSwgInZhbCIpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldFZhbHVlKChuc191cmksICJhdHRyIikpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnNbKG5zX3VyaSwgImF0dHIiKV0sICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlKChuc191cmksICJhdHRyIikpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyc1sobnNfdXJpLCAiYXR0ciIpXSwgInZhbCIpCiAKICAgICAjID09PT09IElucHV0U291cmNlIHN1cHBvcnQKIApAQCAtNDUyLDkgKzUwOSw5IEBACiAgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCiAKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKLSAgICAgICAgcGFyc2VyLnBhcnNlKGZpbmRmaWxlKCJ0ZXN0Iitvcy5leHRzZXArInhtbCIpKQorICAgICAgICBwYXJzZXIucGFyc2UoVEVTVF9YTUxGSUxFKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIAogICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9zeXNpZChzZWxmKToKICAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCkBAIC00NjIsOSArNTE5LDkgQEAKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQotICAgICAgICBwYXJzZXIucGFyc2UoSW5wdXRTb3VyY2UoZmluZGZpbGUoInRlc3QiK29zLmV4dHNlcCsieG1sIikpKQorICAgICAgICBwYXJzZXIucGFyc2UoSW5wdXRTb3VyY2UoVEVTVF9YTUxGSUxFKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKICAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2Vfc3RyZWFtKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKQEAgLTQ3MywxMCArNTMwLDEwIEBACiAKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKICAgICAgICAgaW5wc3JjID0gSW5wdXRTb3VyY2UoKQotICAgICAgICBpbnBzcmMuc2V0Qnl0ZVN0cmVhbShvcGVuKGZpbmRmaWxlKCJ0ZXN0Iitvcy5leHRzZXArInhtbCIpKSkKKyAgICAgICAgaW5wc3JjLnNldEJ5dGVTdHJlYW0ob3BlbihURVNUX1hNTEZJTEUpKQogICAgICAgICBwYXJzZXIucGFyc2UoaW5wc3JjKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIAogICAgICMgPT09PT0gSW5jcmVtZW50YWxQYXJzZXIgc3VwcG9ydAogCkBAIC00OTAsNyArNTQ3LDcgQEAKICAgICAgICAgcGFyc2VyLmZlZWQoIjwvZG9jPiIpCiAgICAgICAgIHBhcnNlci5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+PC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz48L2RvYz4iKQogCiAgICAgZGVmIHRlc3RfZXhwYXRfaW5jcmVtZW50YWxfcmVzZXQoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKQEAgLTUxMSw3ICs1NjgsNyBAQAogICAgICAgICBwYXJzZXIuZmVlZCgiPC9kb2M+IikKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz50ZXh0PC9kb2M+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz50ZXh0PC9kb2M+IikKIAogICAgICMgPT09PT0gTG9jYXRvciBzdXBwb3J0CiAKQEAgLTUyNSwxOSArNTgyLDE5IEBACiAgICAgICAgIHBhcnNlci5mZWVkKCI8L2RvYz4iKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmdldExpbmVOdW1iZXIoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0U3lzdGVtSWQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0TGluZU51bWJlcigpLCAxKQogCiAgICAgZGVmIHRlc3RfZXhwYXRfbG9jYXRvcl93aXRoaW5mbyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKLSAgICAgICAgcGFyc2VyLnBhcnNlKGZpbmRmaWxlKCJ0ZXN0LnhtbCIpKQorICAgICAgICBwYXJzZXIucGFyc2UoVEVTVF9YTUxGSUxFKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBmaW5kZmlsZSgidGVzdC54bWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyc2VyLmdldFB1YmxpY0lkKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldFN5c3RlbUlkKCksIFRFU1RfWE1MRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0UHVibGljSWQoKSwgTm9uZSkKIAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNTU4LDcgKzYxNSw3IEBACiAgICAgICAgICAgICBwYXJzZXIucGFyc2Uoc291cmNlKQogICAgICAgICAgICAgc2VsZi5mYWlsKCkKICAgICAgICAgZXhjZXB0IFNBWEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGUuZ2V0U3lzdGVtSWQoKSwgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5nZXRTeXN0ZW1JZCgpLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfZXhwYXRfaW5jb21wbGV0ZShzZWxmKToKICAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCkBAIC02MjIsMjEgKzY3OSwyMSBAQAogICAgICAgICBhdHRycyA9IEF0dHJpYnV0ZXNOU0ltcGwoeyhuc191cmksICJhdHRyIikgOiAidmFsIn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KG5zX3VyaSwgImF0dHIiKSA6ICJuczphdHRyIn0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0TGVuZ3RoKCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldE5hbWVzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVzKCksIFsibnM6YXR0ciJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgWyJuczphdHRyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGF0dHJzLmhhc19rZXkoKG5zX3VyaSwgImF0dHIiKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmtleXMoKSwgWyhuc191cmksICJhdHRyIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuaXRlbXMoKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0VmFsdWUoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhdHRycy5nZXRWYWx1ZUJ5UU5hbWUoIm5zOmF0dHIiKSwgInZhbCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJuczphdHRyIiksIChuc191cmksICJhdHRyIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGF0dHJzWyhuc191cmksICJhdHRyIildLCAidmFsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoKG5zX3VyaSwgImF0dHIiKSksICJuczphdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5rZXlzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFsoKG5zX3VyaSwgImF0dHIiKSwgInZhbCIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRWYWx1ZSgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWVCeVFOYW1lKCJuczphdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJuczphdHRyIiksIChuc191cmksICJhdHRyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbKG5zX3VyaSwgImF0dHIiKV0sICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lQnlOYW1lKChuc191cmksICJhdHRyIikpLCAibnM6YXR0ciIpCiAKIAogICAgICMgRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiBQeXRob24gMi41LCBhbiBhdHRlbXB0IHRvIG1vdmUgdGhlICJ4bWwiCkBAIC02NzIsNyArNzI5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IHhtbC5zYXguZXhwYXRyZWFkZXIKICAgICAgICAgICAgIG1vZHVsZSA9IHhtbC5zYXguZXhwYXRyZWFkZXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1vZHVsZS5fX25hbWVfXywgInhtbC5zYXguZXhwYXRyZWFkZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICJ4bWwuc2F4LmV4cGF0cmVhZGVyIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzLnVwZGF0ZShvbGRfbW9kdWxlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKaW5kZXggMTY5YTcyNy4uOTQ1ODNlMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoY2hlY2tfc3ludGF4X2Vycm9yLCBfY2hlY2tfcHkza193YXJuaW5ncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0KQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfc3ludGF4X2Vycm9yLCBjaGVja19weTNrX3dhcm5pbmdzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0CiAKIAogY2xhc3MgU2NvcGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yODcsMTkgKzI4Nyw4IEBACiAgICAgICAgICAgICBpbm5lcigpCiAgICAgICAgICAgICB5ID0gMQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVycm9ySW5PdXRlcigpCi0gICAgICAgIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXJyb3JJbklubmVyKCkKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuYm91bmRMb2NhbEVycm9yLCBlcnJvckluT3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvciwgZXJyb3JJbklubmVyKQogCiAgICAgICAgICMgdGVzdCBmb3IgYnVnICMxNTAxOTM0OiBpbmNvcnJlY3QgTE9BRC9TVE9SRV9HTE9CQUwgZ2VuZXJhdGlvbgogICAgICAgICBleGVjICIiIgpAQCAtMzMwLDcgKzMxOSw3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlUmV0dXJuZXIyKGE9MTEpKClbJ2EnXSwgMTEpCiAKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4V2FybmluZykpOgogICAgICAgICAgICAgZXhlYyAiIiJcCiBkZWYgbWFrZUFkZFBhaXIoKGEsIGIpKToKQEAgLTQ2OCw3ICs0NTcsNyBAQAogICAgIGxvY2FscygpWydsb29rZWRfdXBfYnlfbG9hZF9uYW1lJ10gPSBUcnVlCiAgICAgcGFzc2VkID0gbG9va2VkX3VwX2J5X2xvYWRfbmFtZQogCi1zZWxmLmFzc2VydF8oWC5wYXNzZWQpCitzZWxmLmFzc2VydFRydWUoWC5wYXNzZWQpCiAiIiIKIAogICAgIGRlZiB0ZXN0TG9jYWxzRnVuY3Rpb24oc2VsZik6CkBAIC00ODMsNyArNDcyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBnCiAKICAgICAgICAgZCA9IGYoMikoNCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdoJyBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdoJywgZCkKICAgICAgICAgZGVsIGRbJ2gnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsneCc6IDIsICd5JzogNywgJ3cnOiA2fSkKIApAQCAtNTE3LDggKzUwNiw4IEBACiAgICAgICAgICAgICByZXR1cm4gQwogCiAgICAgICAgIHZhcm5hbWVzID0gZigxKS56Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygieCIgbm90IGluIHZhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oInkiIGluIHZhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ4IiwgdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInkiLCB2YXJuYW1lcykKIAogICAgIGRlZiB0ZXN0TG9jYWxzQ2xhc3NfV2l0aFRyYWNlKHNlbGYpOgogICAgICAgICAjIElzc3VlMjM3Mjg6IGFmdGVyIHRoZSB0cmFjZSBmdW5jdGlvbiByZXR1cm5zLCB0aGUgbG9jYWxzKCkKQEAgLTUzNCw3ICs1MjMsNyBAQAogICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4geAogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCAxMikgIyBVc2VkIHRvIHJhaXNlIFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDEyKSAjIFVzZWQgdG8gcmFpc2UgVW5ib3VuZExvY2FsRXJyb3IKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQogCkBAIC02NTgsNiArNjQ3LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgZ2xvYmFsX25zWyJyZXN1bHQyIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOSwgZ2xvYmFsX25zWyJyZXN1bHQ5Il0pCiAKKyAgICBkZWYgdGVzdFRvcElzTm90U2lnbmlmaWNhbnQoc2VsZik6CisgICAgICAgICMgU2VlICM5OTk3LgorICAgICAgICBkZWYgdG9wKGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgYigpOgorICAgICAgICAgICAgZ2xvYmFsIGEKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgd2l0aCBjaGVja193YXJuaW5ncygoImltcG9ydCBcKiBvbmx5IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIiwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0cGFja2FnZXMucHkgYi9MaWIvdGVzdC90ZXN0X3NjcmlwdHBhY2thZ2VzLnB5CmluZGV4IGVlMTRiZTIuLjdlMDJmYTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0cGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY3JpcHRwYWNrYWdlcy5weQpAQCAtMiw3ICsyLDkgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotaW1wb3J0IGFldG9vbHMKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBhZXRvb2xzIGRvZXMgbm90IGV4aXN0LgordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FldG9vbHMnKQogCiBjbGFzcyBUZXN0U2NyaXB0cGFja2FnZXModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IDZjZmI5NmEuLjc5YjI0OWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC00LDYgKzQsOCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInLCAncmlzY29zJyksCisgICAgICAgICAgICAgICAgICJjYW4ndCBlYXNpbHkgdGVzdCBvbiB0aGlzIHN5c3RlbSIpCiBjbGFzcyBTZWxlY3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBjbGFzcyBOb3BlOgpAQCAtMjAsMjEgKzIyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LnNlbGVjdCwgW10sIFtdLCBbXSwgIm5vdCBhIG51bWJlciIpCiAKICAgICBkZWYgdGVzdF9yZXR1cm5lZF9saXN0X2lkZW50aXR5KHNlbGYpOgotICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ21hYycsICdvczInKToKLSAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICJjYW4ndCBlYXNpbHkgdGVzdCBvbiB0aGlzIHN5c3RlbSIKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFNlZSBpc3N1ZSAjODMyOQogICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChbXSwgW10sIFtdLCAxKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIgaXMgdykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyIGlzIHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodyBpcyB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHIsIHcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QociwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3LCB4KQogCiAgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgotICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ21hYycsICdvczInKToKLSAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICJjYW4ndCBlYXNpbHkgdGVzdCBvbiB0aGlzIHN5c3RlbSIKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJwogICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCiAgICAgICAgIGZvciB0b3V0IGluICgwLCAxLCAyLCA0LCA4LCAxNikgKyAoTm9uZSwpKjEwOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NldC5weQppbmRleCAzNTM5YTE0Li5lOGNjZWRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NldC5weQpAQCAtNiw3ICs2LDYgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IGNvcHkKIGltcG9ydCBwaWNrbGUKLWltcG9ydCBvcwogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQogaW1wb3J0IHN5cwogaW1wb3J0IGNvbGxlY3Rpb25zCkBAIC02Niw3ICs2NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gc2VsZi5zLCBjIGluIHNlbGYuZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuX19jb250YWluc19fLCBbW11dKQogICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi5sZXR0ZXJzKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZXR5cGUoc2VsZi5sZXR0ZXJzKSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYudGhldHlwZShzZWxmLmxldHRlcnMpLCBzKQogCiAgICAgZGVmIHRlc3RfdW5pb24oc2VsZik6CiAgICAgICAgIHUgPSBzZWxmLnMudW5pb24oc2VsZi5vdGhlcndvcmQpCkBAIC0xMzAsNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gczEuaXNkaXNqb2ludChzMikKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBmKHMxLCBzMikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYWN0dWFsIGlzIFRydWUgb3IgYWN0dWFsIGlzIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWN0dWFsIGlzIFRydWUgb3IgYWN0dWFsIGlzIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfYW5kKHNlbGYpOgogICAgICAgICBpID0gc2VsZi5zLmludGVyc2VjdGlvbihzZWxmLm90aGVyd29yZCkKQEAgLTIxMywxOSArMjEyLDE5IEBACiAKICAgICBkZWYgdGVzdF9zdWJfYW5kX3N1cGVyKHNlbGYpOgogICAgICAgICBwLCBxLCByID0gbWFwKHNlbGYudGhldHlwZSwgWydhYicsICdhYmNkZScsICdkZWYnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHAgPCBxKQotICAgICAgICBzZWxmLmFzc2VydF8ocCA8PSBxKQotICAgICAgICBzZWxmLmFzc2VydF8ocSA8PSBxKQotICAgICAgICBzZWxmLmFzc2VydF8ocSA+IHApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhxID49IHApCi0gICAgICAgIHNlbGYuZmFpbElmKHEgPCByKQotICAgICAgICBzZWxmLmZhaWxJZihxIDw9IHIpCi0gICAgICAgIHNlbGYuZmFpbElmKHEgPiByKQotICAgICAgICBzZWxmLmZhaWxJZihxID49IHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoJ2EnKS5pc3N1YnNldCgnYWJjJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZXQoJ2FiYycpLmlzc3VwZXJzZXQoJ2EnKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoc2V0KCdhJykuaXNzdWJzZXQoJ2NicycpKQotICAgICAgICBzZWxmLmZhaWxJZihzZXQoJ2NicycpLmlzc3VwZXJzZXQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA8PSBxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA+IHApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxID49IHApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA8PSByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPiByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPj0gcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYScpLmlzc3Vic2V0KCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldCgnYWJjJykuaXNzdXBlcnNldCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnYScpLmlzc3Vic2V0KCdjYnMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2NicycpLmlzc3VwZXJzZXQoJ2EnKSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgpAQCAtMjczLDcgKzI3Miw3IEBACiAgICAgICAgIHM9SCgpCiAgICAgICAgIGY9c2V0KCkKICAgICAgICAgZi5hZGQocykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMgaW4gZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzLCBmKQogICAgICAgICBmLnJlbW92ZShzKQogICAgICAgICBmLmFkZChzKQogICAgICAgICBmLmRpc2NhcmQocykKQEAgLTMzOSw3ICszMzgsNyBAQAogICAgICAgICBvYmoueCA9IGl0ZXIoY29udGFpbmVyKQogICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKIAogY2xhc3MgVGVzdFNldChUZXN0Sm9pbnRPcHMpOgogICAgIHRoZXR5cGUgPSBzZXQKQEAgLTM3Myw3ICszNzIsNyBAQAogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgogICAgICAgICBzZWxmLnMuYWRkKCdRJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdRJyBpbiBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1EnLCBzZWxmLnMpCiAgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKICAgICAgICAgc2VsZi5zLmFkZCgnUScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCkBAIC0zODEsMTMgKzM4MCwxMyBAQAogCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgICBzZWxmLnMucmVtb3ZlKCdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBub3QgaW4gc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgJ1EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5yZW1vdmUsIFtdKQogICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi53b3JkKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQogICAgICAgICBzLnJlbW92ZShzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGhldHlwZShzZWxmLndvcmQpIG5vdCBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnJlbW92ZSwgc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCiAKICAgICBkZWYgdGVzdF9yZW1vdmVfa2V5ZXJyb3JfdW5wYWNraW5nKHNlbGYpOgpAQCAtNDA2LDcgKzQwNSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5yZW1vdmUoa2V5KQogICAgICAgICBleGNlcHQgS2V5RXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlLmFyZ3NbMF0gaXMga2V5LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuYXJnc1swXSBpcyBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIktleUVycm9yIHNob3VsZCBiZSB7MH0sIG5vdCB7MX0iLmZvcm1hdChrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFyZ3NbMF0pKQogICAgICAgICBlbHNlOgpAQCAtNDE0LDI2ICs0MTMsMjYgQEAKIAogICAgIGRlZiB0ZXN0X2Rpc2NhcmQoc2VsZik6CiAgICAgICAgIHNlbGYucy5kaXNjYXJkKCdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBub3QgaW4gc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgc2VsZi5zKQogICAgICAgICBzZWxmLnMuZGlzY2FyZCgnUScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpc2NhcmQsIFtdKQogICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi53b3JkKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQogICAgICAgICBzLmRpc2NhcmQoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSBub3QgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSwgcykKICAgICAgICAgcy5kaXNjYXJkKHNlbGYudGhldHlwZShzZWxmLndvcmQpKQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHNlbGYucykpOgogICAgICAgICAgICAgZWxlbSA9IHNlbGYucy5wb3AoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVsZW0gbm90IGluIHNlbGYucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnBvcCkKIAogICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLnVwZGF0ZShzZWxmLm90aGVyd29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy51cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy51cGRhdGUsIFtbXV0pCiAgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdhYmNkJyksICgnZWZnZmUnLCAnYWJjZWZnJyksICgnY2NiJywgJ2FiYycpLCAoJ2VmJywgJ2FiY2VmJykpOgpAQCAtNDUxLDE2ICs0NTAsMTYgQEAKICAgICBkZWYgdGVzdF9pb3Ioc2VsZik6CiAgICAgICAgIHNlbGYucyB8PSBzZXQoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBpbiBzZWxmLnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGUoc2VsZik6CiAgICAgICAgIHJldHZhbCA9IHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5vdGhlcndvcmQgYW5kIGMgaW4gc2VsZi53b3JkOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZSwgW1tdXSkKICAgICAgICAgZm9yIHAsIHEgaW4gKCgnY2RjJywgJ2MnKSwgKCdlZmdmZScsICcnKSwgKCdjY2InLCAnYmMnKSwgKCdlZicsICcnKSk6CkBAIC00NzgsMTggKzQ3NywxOCBAQAogICAgICAgICBzZWxmLnMgJj0gc2V0KHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgYyBpbiBzZWxmLm90aGVyd29yZCBhbmQgYyBpbiBzZWxmLndvcmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CiAgICAgICAgIHJldHZhbCA9IHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyd29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYud29yZCBhbmQgYyBub3QgaW4gc2VsZi5vdGhlcndvcmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKQEAgLTUxNSwxOCArNTE0LDE4IEBACiAgICAgICAgIHNlbGYucyAtPSBzZXQoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYud29yZCBhbmQgYyBub3QgaW4gc2VsZi5vdGhlcndvcmQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3Rfc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgogICAgICAgICByZXR2YWwgPSBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIChjIGluIHNlbGYud29yZCkgXiAoYyBpbiBzZWxmLm90aGVyd29yZCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgY2hlY2tfcGFzc190aHJ1KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKICAgICAgICAgZm9yIHAsIHEgaW4gKCgnY2RjJywgJ2FiZCcpLCAoJ2VmZ2ZlJywgJ2FiY2VmZycpLCAoJ2NjYicsICdhJyksICgnZWYnLCAnYWJjZWYnKSk6CkBAIC01MzksOSArNTM4LDkgQEAKICAgICAgICAgc2VsZi5zIF49IHNldChzZWxmLm90aGVyd29yZCkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIChjIGluIHNlbGYud29yZCkgXiAoYyBpbiBzZWxmLm90aGVyd29yZCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZV9vbl9zZWxmKHNlbGYpOgogICAgICAgICB0ID0gc2VsZi5zLmNvcHkoKQpAQCAtNTY1LDcgKzU2NCw3IEBACiAgICAgIyBDIEFQSSB0ZXN0IG9ubHkgYXZhaWxhYmxlIGluIGEgZGVidWcgYnVpbGQKICAgICBpZiBoYXNhdHRyKHNldCwgInRlc3RfY19hcGkiKToKICAgICAgICAgZGVmIHRlc3RfY19hcGkoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgnYWJjJykudGVzdF9jX2FwaSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoKS50ZXN0X2NfYXBpKCksIFRydWUpCiAKIGNsYXNzIFNldFN1YmNsYXNzKHNldCk6CiAgICAgcGFzcwpAQCAtNzY5LDcgKzc2OCw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CiAgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaW4gc2VsZi52YWx1ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogICAgICAgICBzZXRpdGVyID0gaXRlcihzZWxmLnNldCkKICAgICAgICAgIyBub3RlOiBfX2xlbmd0aF9oaW50X18gaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKICAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCkBAIC04MDQsMTAgKzgwMywxMCBAQAogICAgICAgICBzZWxmLnJlcHIgICA9ICJzZXQoWzNdKSIKIAogICAgIGRlZiB0ZXN0X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoMyBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigzLCBzZWxmLnNldCkKIAogICAgIGRlZiB0ZXN0X25vdF9pbihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDIgbm90IGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIHNlbGYuc2V0KQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTgyMSwxMCArODIwLDEwIEBACiAgICAgICAgIHNlbGYucmVwciAgID0gInNldChbKDAsICd6ZXJvJyldKSIKIAogICAgIGRlZiB0ZXN0X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoKDAsICJ6ZXJvIikgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKDAsICJ6ZXJvIiksIHNlbGYuc2V0KQogCiAgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoOSBub3QgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oOSwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTExNiw3ICsxMTE1LDcgQEAKICAgICAgICAgICAgIHBvcHBlZFtzZWxmLnNldC5wb3AoKV0gPSBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvcHBlZCksIGxlbihzZWxmLnZhbHVlcykpCiAgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHYgaW4gcG9wcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBwb3BwZWQpCiAKICAgICBkZWYgdGVzdF91cGRhdGVfZW1wdHlfdHVwbGUoc2VsZik6CiAgICAgICAgIHNlbGYuc2V0LnVwZGF0ZSgoKSkKQEAgLTEzNDksNyArMTM0OCw3IEBACiAgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gRmFsc2UKIAogICAgIGRlZiB0ZXN0X2dlX2d0X2xlX2x0KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzdXBlcihUZXN0T25seVNldHNPcGVyYXRvciwgc2VsZikudGVzdF9nZV9ndF9sZV9sdCgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzODQsMjMgKzEzODMsMTcgQEAKIGNsYXNzIFRlc3RDb3B5aW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6Ci0gICAgICAgIGR1cCA9IHNlbGYuc2V0LmNvcHkoKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgZHVwX2xpc3QgPSBzb3J0ZWQoZHVwKQotICAgICAgICAgICAgc2V0X2xpc3QgPSBzb3J0ZWQoc2VsZi5zZXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cF9saXN0KSwgbGVuKHNldF9saXN0KSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGR1cF9saXN0KSk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZHVwX2xpc3RbaV0gaXMgc2V0X2xpc3RbaV0pCisgICAgICAgIGR1cCA9IGxpc3Qoc2VsZi5zZXQuY29weSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4oc2VsZi5zZXQpKQorICAgICAgICBmb3IgZWwgaW4gc2VsZi5zZXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsLCBkdXApCisgICAgICAgICAgICBwb3MgPSBkdXAuaW5kZXgoZWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVsLCBkdXAucG9wKHBvcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZHVwKQogCiAgICAgZGVmIHRlc3RfZGVlcF9jb3B5KHNlbGYpOgogICAgICAgICBkdXAgPSBjb3B5LmRlZXBjb3B5KHNlbGYuc2V0KQotICAgICAgICAjI3ByaW50IHR5cGUoZHVwKSwgcmVwcihkdXApCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBkdXBfbGlzdCA9IHNvcnRlZChkdXApCi0gICAgICAgICAgICBzZXRfbGlzdCA9IHNvcnRlZChzZWxmLnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwX2xpc3QpLCBsZW4oc2V0X2xpc3QpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZHVwX2xpc3QpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwX2xpc3RbaV0sIHNldF9saXN0W2ldKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGR1cCwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQ0MSwxMyArMTQzNCwxMyBAQAogCiAgICAgZGVmIHRlc3RfYmlub3BzVnNTdWJzZXRzKHNlbGYpOgogICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgLSBiIDwgYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIgLSBhIDwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgJiBiIDwgYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgJiBiIDwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgfCBiID4gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgfCBiID4gYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgXiBiIDwgYSB8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIC0gYiA8IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIC0gYSA8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIHwgYiA+IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIF4gYiA8IGEgfCBiKQogCiAgICAgZGVmIHRlc3RfY29tbXV0YXRpdml0eShzZWxmKToKICAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCkBAIC0xNTU5LDkgKzE1NTIsOCBAQAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICBmb3IgY29ucyBpbiAoc2V0LCBmcm96ZW5zZXQpOgogICAgICAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKLSAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoY29ucyhnKHMpKSksIHNvcnRlZChnKHMpKSkKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGNvbnMoZyhzKSksIHNldChnKHMpKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbnMgLCBYKHMpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29ucyAsIE4ocykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGNvbnMgLCBFKHMpKQpAQCAtMTU3Niw4ICsxNTY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgYm9vbCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGFjdHVhbCksIHNvcnRlZChleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCBYKHMpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgTihzKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbWV0aCwgRShzKSkKQEAgLTE1OTEsOCArMTU4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHQgPSBzLmNvcHkoKQogICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHMsIG1ldGhuYW1lKShsaXN0KGcoZGF0YSkpKQogICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHQsIG1ldGhuYW1lKShnKGRhdGEpKQotICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocyksIHNvcnRlZCh0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzLCB0KQogCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyKHNldCgnamFudWFyeScpLCBtZXRobmFtZSksIFgoZGF0YSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyKHNldCgnamFudWFyeScpLCBtZXRobmFtZSksIE4oZGF0YSkpCkBAIC0xNjk5LDEzICsxNjg5LDEyIEBACiAgICAgICAgICAgICBlZGdlID0gdmVydGV4ICAgICAgICAgICAgICAgICAgICAgICAjIEN1Ym9jdGFoZWRyb24gdmVydGljZXMgYXJlIGVkZ2VzIGluIEN1YmUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVkZ2UpLCAyKSAgICAgICMgVHdvIGN1YmUgdmVydGljZXMgZGVmaW5lIGFuIGVkZ2UKICAgICAgICAgICAgIGZvciBjdWJldmVydCBpbiBlZGdlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhjdWJldmVydCBpbiBnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3ViZXZlcnQsIGcpCiAKIAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3NldHMKICAgICB0ZXN0X2NsYXNzZXMgPSAoCiAgICAgICAgIFRlc3RTZXQsCiAgICAgICAgIFRlc3RTZXRTdWJjbGFzcywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0Y29tcHMucHkgYi9MaWIvdGVzdC90ZXN0X3NldGNvbXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWU2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NldGNvbXBzLnB5CkBAIC0wLDAgKzEsMTUxIEBACitkb2N0ZXN0cyA9ICIiIgorIyMjIyMjIyMjIyMgVGVzdHMgbW9zdGx5IGNvcGllZCBmcm9tIHRlc3RfbGlzdGNvbXBzLnB5ICMjIyMjIyMjIyMjIworCitUZXN0IHNpbXBsZSBsb29wIHdpdGggY29uZGl0aW9uYWwKKworICAgID4+PiBzdW0oe2kqaSBmb3IgaSBpbiByYW5nZSgxMDApIGlmIGkmMSA9PSAxfSkKKyAgICAxNjY2NTAKKworVGVzdCBzaW1wbGUgY2FzZQorCisgICAgPj4+IHsyKnkgKyB4ICsgMSBmb3IgeCBpbiAoMCwpIGZvciB5IGluICgxLCl9CisgICAgc2V0KFszXSkKKworVGVzdCBzaW1wbGUgbmVzdGluZworCisgICAgPj4+IGxpc3Qoc29ydGVkKHsoaSxqKSBmb3IgaSBpbiByYW5nZSgzKSBmb3IgaiBpbiByYW5nZSg0KX0pKQorICAgIFsoMCwgMCksICgwLCAxKSwgKDAsIDIpLCAoMCwgMyksICgxLCAwKSwgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDIsIDApLCAoMiwgMSksICgyLCAyKSwgKDIsIDMpXQorCitUZXN0IG5lc3Rpbmcgd2l0aCB0aGUgaW5uZXIgZXhwcmVzc2lvbiBkZXBlbmRlbnQgb24gdGhlIG91dGVyCisKKyAgICA+Pj4gbGlzdChzb3J0ZWQoeyhpLGopIGZvciBpIGluIHJhbmdlKDQpIGZvciBqIGluIHJhbmdlKGkpfSkpCisgICAgWygxLCAwKSwgKDIsIDApLCAoMiwgMSksICgzLCAwKSwgKDMsIDEpLCAoMywgMildCisKK01ha2Ugc3VyZSB0aGUgaW5kdWN0aW9uIHZhcmlhYmxlIGlzIG5vdCBleHBvc2VkCisKKyAgICA+Pj4gaSA9IDIwCisgICAgPj4+IHN1bSh7aSppIGZvciBpIGluIHJhbmdlKDEwMCl9KQorICAgIDMyODM1MAorCisgICAgPj4+IGkKKyAgICAyMAorCitWZXJpZnkgdGhhdCBzeW50YXggZXJyb3IncyBhcmUgcmFpc2VkIGZvciBzZXRjb21wcyB1c2VkIGFzIGx2YWx1ZXMKKworICAgID4+PiB7eSBmb3IgeSBpbiAoMSwyKX0gPSAxMCAgICAgICAgICAjIGRvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogLi4uCisKKyAgICA+Pj4ge3kgZm9yIHkgaW4gKDEsMil9ICs9IDEwICAgICAgICAgIyBkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IC4uLgorCisKK01ha2UgYSBuZXN0ZWQgc2V0IGNvbXByZWhlbnNpb24gdGhhdCBhY3RzIGxpa2Ugc2V0KHJhbmdlKCkpCisKKyAgICA+Pj4gZGVmIHNyYW5nZShuKToKKyAgICAuLi4gICAgIHJldHVybiB7aSBmb3IgaSBpbiByYW5nZShuKX0KKyAgICA+Pj4gbGlzdChzb3J0ZWQoc3JhbmdlKDEwKSkpCisgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKK1NhbWUgYWdhaW4sIG9ubHkgYXMgYSBsYW1iZGEgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbgorCisgICAgPj4+IGxyYW5nZSA9IGxhbWJkYSBuOiAge2kgZm9yIGkgaW4gcmFuZ2Uobil9CisgICAgPj4+IGxpc3Qoc29ydGVkKGxyYW5nZSgxMCkpKQorICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorCitHZW5lcmF0b3JzIGNhbiBjYWxsIG90aGVyIGdlbmVyYXRvcnM6CisKKyAgICA+Pj4gZGVmIGdyYW5nZShuKToKKyAgICAuLi4gICAgIGZvciB4IGluIHtpIGZvciBpIGluIHJhbmdlKG4pfToKKyAgICAuLi4gICAgICAgICB5aWVsZCB4CisgICAgPj4+IGxpc3Qoc29ydGVkKGdyYW5nZSg1KSkpCisgICAgWzAsIDEsIDIsIDMsIDRdCisKKworTWFrZSBzdXJlIHRoYXQgTm9uZSBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZQorCisgICAgPj4+IHtOb25lIGZvciBpIGluIHJhbmdlKDEwKX0KKyAgICBzZXQoW05vbmVdKQorCisjIyMjIyMjIyMjIyBUZXN0cyBmb3IgdmFyaW91cyBzY29waW5nIGNvcm5lciBjYXNlcyAjIyMjIyMjIyMjIyMKKworUmV0dXJuIGxhbWJkYXMgdGhhdCB1c2UgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBhcyBhIGRlZmF1bHQgYXJndW1lbnQKKworICAgID4+PiBpdGVtcyA9IHsobGFtYmRhIGk9aTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgPj4+IHt4KCkgZm9yIHggaW4gaXRlbXN9ID09IHNldChyYW5nZSg1KSkKKyAgICBUcnVlCisKK1NhbWUgYWdhaW4sIG9ubHkgdGhpcyB0aW1lIGFzIGEgY2xvc3VyZSB2YXJpYWJsZQorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgID4+PiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgIHNldChbNF0pCisKK0Fub3RoZXIgd2F5IHRvIHRlc3QgdGhhdCB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGxvY2FsIHRvIHRoZSBsaXN0IGNvbXAKKworICAgID4+PiBpdGVtcyA9IHsobGFtYmRhOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4gaSA9IDIwCisgICAgPj4+IHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgc2V0KFs0XSkKKworQW5kIGNvbmZpcm0gdGhhdCBhIGNsb3N1cmUgY2FuIGp1bXAgb3ZlciB0aGUgbGlzdCBjb21wIHNjb3BlCisKKyAgICA+Pj4gaXRlbXMgPSB7KGxhbWJkYTogeSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgPj4+IHkgPSAyCisgICAgPj4+IHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgc2V0KFsyXSkKKworV2UgYWxzbyByZXBlYXQgZWFjaCBvZiB0aGUgYWJvdmUgc2NvcGluZyB0ZXN0cyBpbnNpZGUgYSBmdW5jdGlvbgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGEgaT1pOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICAuLi4gICAgIHJldHVybiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgID4+PiB0ZXN0X2Z1bmMoKSA9PSBzZXQocmFuZ2UoNSkpCisgICAgVHJ1ZQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmMoKToKKyAgICAuLi4gICAgIGl0ZW1zID0geyhsYW1iZGE6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgIC4uLiAgICAgcmV0dXJuIHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgPj4+IHRlc3RfZnVuYygpCisgICAgc2V0KFs0XSkKKworICAgID4+PiBkZWYgdGVzdF9mdW5jKCk6CisgICAgLi4uICAgICBpdGVtcyA9IHsobGFtYmRhOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICAuLi4gICAgIGkgPSAyMAorICAgIC4uLiAgICAgcmV0dXJuIHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgPj4+IHRlc3RfZnVuYygpCisgICAgc2V0KFs0XSkKKworICAgID4+PiBkZWYgdGVzdF9mdW5jKCk6CisgICAgLi4uICAgICBpdGVtcyA9IHsobGFtYmRhOiB5KSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICAuLi4gICAgIHkgPSAyCisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkKKyAgICBzZXQoWzJdKQorCisiIiIKKworCitfX3Rlc3RfXyA9IHsnZG9jdGVzdHMnIDogZG9jdGVzdHN9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc2V0Y29tcHMKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9zZXRjb21wcywgdmVyYm9zZSkKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9zZXRjb21wcywgdmVyYm9zZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludChjb3VudHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0cy5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0cy5weQppbmRleCA5OTA1ZDEzLi4wNzU0ZWQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXRzLnB5CkBAIC03NCw3ICs3NCw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CiAgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaW4gc2VsZi52YWx1ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CiAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zZXQpCkBAIC0xMDUsMTAgKzEwNSwxMCBAQAogICAgICAgICBzZWxmLnJlcHIgICA9ICJTZXQoWzNdKSIKIAogICAgIGRlZiB0ZXN0X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoMyBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDMgaW4gc2VsZi5zZXQpCiAKICAgICBkZWYgdGVzdF9ub3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcygyIG5vdCBpbiBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgbm90IGluIHNlbGYuc2V0KQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyMiwxMCArMTIyLDEwIEBACiAgICAgICAgIHNlbGYucmVwciAgID0gIlNldChbKDAsICd6ZXJvJyldKSIKIAogICAgIGRlZiB0ZXN0X2luKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoKDAsICJ6ZXJvIikgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMCwgInplcm8iKSBpbiBzZWxmLnNldCkKIAogICAgIGRlZiB0ZXN0X25vdF9pbihzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKDkgbm90IGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoOSBub3QgaW4gc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICAgICAgICBwb3BwZWRbc2VsZi5zZXQucG9wKCldID0gTm9uZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3BwZWQpLCBsZW4oc2VsZi52YWx1ZXMpKQogICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh2IGluIHBvcHBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgcG9wcGVkKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlX2VtcHR5X3R1cGxlKHNlbGYpOgogICAgICAgICBzZWxmLnNldC51bmlvbl91cGRhdGUoKCkpCkBAIC02MzcsNyArNjM3LDcgQEAKICAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBGYWxzZQogCiAgICAgZGVmIHRlc3RfZ2VfZ3RfbGVfbHQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHN1cGVyKFRlc3RPbmx5U2V0c09wZXJhdG9yLCBzZWxmKS50ZXN0X2dlX2d0X2xlX2x0KCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjg2LDE4ICs2ODYsMTEgQEAKICAgICAgICAgc2V0X2xpc3QgPSBzb3J0ZWQoc2VsZi5zZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cF9saXN0KSwgbGVuKHNldF9saXN0KSkKICAgICAgICAgZm9yIGksIGVsIGluIGVudW1lcmF0ZShkdXBfbGlzdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWwgaXMgc2V0X2xpc3RbaV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVsLCBzZXRfbGlzdFtpXSkKIAogICAgIGRlZiB0ZXN0X2RlZXBfY29weShzZWxmKToKICAgICAgICAgZHVwID0gY29weS5kZWVwY29weShzZWxmLnNldCkKLSAgICAgICAgIyNwcmludCB0eXBlKGR1cCksIHJlcHIoZHVwKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgotICAgICAgICAgICAgZHVwX2xpc3QgPSBzb3J0ZWQoZHVwKQotICAgICAgICAgICAgc2V0X2xpc3QgPSBzb3J0ZWQoc2VsZi5zZXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cF9saXN0KSwgbGVuKHNldF9saXN0KSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGR1cF9saXN0KSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cF9saXN0W2ldLCBzZXRfbGlzdFtpXSkKLQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGR1cCwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzE4LDcgKzcxMSw3IEBACiAgICAgICAgIHNlbGYuc2V0ID0gU2V0KFsiemVybyIsIDAsIE5vbmVdKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgc3VwZXIoVGVzdENvcHlpbmdUcmlwbGUsIHNlbGYpLnRlc3RfY29weSgpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0MiwxMyArNzM1LDEzIEBACiAKICAgICBkZWYgdGVzdF9iaW5vcHNWc1N1YnNldHMoc2VsZik6CiAgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgotICAgICAgICBzZWxmLmFzc2VydF8oYSAtIGIgPD0gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIgLSBhIDw9IGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhICYgYiA8PSBhKQotICAgICAgICBzZWxmLmFzc2VydF8oYSAmIGIgPD0gYikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgfCBiID49IGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIHwgYiA+PSBiKQotICAgICAgICBzZWxmLmFzc2VydF8oYSBeIGIgPD0gYSB8IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIC0gYiA8PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiAtIGEgPD0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDw9IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8PSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSB8IGIgPj0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID49IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIF4gYiA8PSBhIHwgYikKIAogICAgIGRlZiB0ZXN0X2NvbW11dGF0aXZpdHkoc2VsZik6CiAgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgpAQCAtNzY0LDkgKzc1Nyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIGEsIHplcm8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSB8IGEsIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAmIGEsIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIDw9IGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhID49IGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhID09IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIDw9IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID49IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IGEpCiAKICAgICBkZWYgdGVzdF9zdW1tYXRpb25zKHNlbGYpOgogICAgICAgICAjIGNoZWNrIHRoYXQgc3VtcyBvZiBwYXJ0cyBlcXVhbCB0aGUgd2hvbGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hhLnB5IGIvTGliL3Rlc3QvdGVzdF9zaGEucHkKaW5kZXggMDY0N2RiMy4uNmIzODQzNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaGEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGEucHkKQEAgLTE4LDE5ICsxOCwxOSBAQAogICAgICAgICAjIENoZWNrIGRpZ2VzdCBtYXRjaGVzIHRoZSBleHBlY3RlZCB2YWx1ZQogICAgICAgICBvYmogPSBzaGEubmV3KGRhdGEpCiAgICAgICAgIGNvbXB1dGVkID0gb2JqLmhleGRpZ2VzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21wdXRlZCA9PSBkaWdlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wdXRlZCA9PSBkaWdlc3QpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgdmFsdWUgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUKICAgICAgICAgIyBkaWdlc3Qgb3BlcmF0aW9ucy4KICAgICAgICAgY29tcHV0ZWRfYWdhaW4gPSBvYmouaGV4ZGlnZXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvbXB1dGVkID09IGNvbXB1dGVkX2FnYWluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcHV0ZWQgPT0gY29tcHV0ZWRfYWdhaW4pCiAKICAgICAgICAgIyBDaGVjayBoZXhkaWdlc3QoKSBvdXRwdXQgbWF0Y2hlcyBkaWdlc3QoKSdzIG91dHB1dAogICAgICAgICBkaWdlc3QgPSBvYmouZGlnZXN0KCkKICAgICAgICAgaGV4ZCA9ICIiCiAgICAgICAgIGZvciBjIGluIGRpZ2VzdDoKICAgICAgICAgICAgIGhleGQgKz0gJyUwMngnICUgb3JkKGMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb21wdXRlZCA9PSBoZXhkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcHV0ZWQgPT0gaGV4ZCkKIAogICAgIGRlZiB0ZXN0X2Nhc2VfMShzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygiYWJjIiwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKaW5kZXggMjUzMmE0OS4uZmRjMGJjMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTcsMTAgKzcsNzEgQEAKIGltcG9ydCBzdGF0CiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCitmcm9tIG9zLnBhdGggaW1wb3J0IHNwbGl0ZHJpdmUKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUsIHNwYXduCitmcm9tIHNodXRpbCBpbXBvcnQgKF9tYWtlX3RhcmJhbGwsIF9tYWtlX3ppcGZpbGUsIG1ha2VfYXJjaGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMpCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IHdhcm5pbmdzCisKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4KK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIGNhcHR1cmVkX3N0ZG91dAorCitURVNURk4yID0gVEVTVEZOICsgIjIiCisKK3RyeToKKyAgICBpbXBvcnQgZ3JwCisgICAgaW1wb3J0IHB3ZAorICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQorCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCit0cnk6CisgICAgaW1wb3J0IHppcGZpbGUKKyAgICBaSVBfU1VQUE9SVCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBaSVBfU1VQUE9SVCA9IGZpbmRfZXhlY3V0YWJsZSgnemlwJykKIAogY2xhc3MgVGVzdFNodXRpbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RTaHV0aWwsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi50ZW1wZGlycyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RTaHV0aWwsIHNlbGYpLnRlYXJEb3duKCkKKyAgICAgICAgd2hpbGUgc2VsZi50ZW1wZGlyczoKKyAgICAgICAgICAgIGQgPSBzZWxmLnRlbXBkaXJzLnBvcCgpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGQsIG9zLm5hbWUgaW4gKCdudCcsICdjeWd3aW4nKSkKKworICAgIGRlZiB3cml0ZV9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnQ9J3h4eCcpOgorICAgICAgICAiIiJXcml0ZXMgYSBmaWxlIGluIHRoZSBnaXZlbiBwYXRoLgorCisKKyAgICAgICAgcGF0aCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBzZXF1ZW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCpwYXRoKQorICAgICAgICBmID0gb3BlbihwYXRoLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIG1rZHRlbXAoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAuCisKKyAgICAgICAgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgZCA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLnRlbXBkaXJzLmFwcGVuZChkKQorICAgICAgICByZXR1cm4gZAogICAgIGRlZiB0ZXN0X3JtdHJlZV9lcnJvcnMoc2VsZik6CiAgICAgICAgICMgZmlsZW5hbWUgaXMgZ3VhcmFudGVlZCBub3QgdG8gZXhpc3QKICAgICAgICAgZmlsZW5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQpAQCAtNDUsMTUgKzEwNiwyOSBAQAogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4pCiAKICAgICBkZWYgY2hlY2tfYXJnc190b19vbmVycm9yKHNlbGYsIGZ1bmMsIGFyZywgZXhjKToKKyAgICAgICAgIyB0ZXN0X3JtdHJlZV9lcnJvcnMgZGVsaWJlcmF0ZWx5IHJ1bnMgcm10cmVlCisgICAgICAgICMgb24gYSBkaXJlY3RvcnkgdGhhdCBpcyBjaG1vZCA0MDAsIHdoaWNoIHdpbGwgZmFpbC4KKyAgICAgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIHJ1biB3aGVuIHNodXRpbC5ybXRyZWUgZmFpbHMuCisgICAgICAgICMgOTkuOSUgb2YgdGhlIHRpbWUgaXQgaW5pdGlhbGx5IGZhaWxzIHRvIHJlbW92ZQorICAgICAgICAjIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LCBzbyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoCisgICAgICAgICMgZnVuYyBpcyBvcy5yZW1vdmUuCisgICAgICAgICMgSG93ZXZlciwgc29tZSBMaW51eCBtYWNoaW5lcyBydW5uaW5nIFpGUyBvbgorICAgICAgICAjIEZVU0UgZXhwZXJpZW5jZWQgYSBmYWlsdXJlIGVhcmxpZXIgaW4gdGhlIHByb2Nlc3MKKyAgICAgICAgIyBhdCBvcy5saXN0ZGlyLiAgVGhlIGZpcnN0IGZhaWx1cmUgbWF5IGxlZ2FsbHkKKyAgICAgICAgIyBiZSBlaXRoZXIuCiAgICAgICAgIGlmIHNlbGYuZXJyb3JTdGF0ZSA9PSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLCBvcy5yZW1vdmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZywgc2VsZi5jaGlsZHBhdGgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNzdWJjbGFzcyhleGNbMF0sIE9TRXJyb3IpKQorICAgICAgICAgICAgaWYgZnVuYyBpcyBvcy5yZW1vdmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmcsIHNlbGYuY2hpbGRwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGZ1bmMsIG9zLmxpc3RkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnVuYyBtdXN0IGJlIGVpdGhlciBvcy5yZW1vdmUgb3Igb3MubGlzdGRpciIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmcsIFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGV4Y1swXSwgT1NFcnJvcikpCiAgICAgICAgICAgICBzZWxmLmVycm9yU3RhdGUgPSAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMsIG9zLnJtZGlyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmcsIFRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc3N1YmNsYXNzKGV4Y1swXSwgT1NFcnJvcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhleGNbMF0sIE9TRXJyb3IpKQogICAgICAgICAgICAgc2VsZi5lcnJvclN0YXRlID0gMgogCiAgICAgZGVmIHRlc3Rfcm10cmVlX2RvbnRfZGVsZXRlX2ZpbGUoc2VsZik6CkBAIC0xMzgsNiArMjEzLDcgQEAKICAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKICAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcjInLCAndGVzdC5weScpLCAnNDU2JykKIAorCiAgICAgICAgICAgICAjIHRlc3RpbmcgZ2xvYi1saWtlIHBhdHRlcm5zCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGF0dGVybnMgPSBzaHV0aWwuaWdub3JlX3BhdHRlcm5zKCcqLnRtcCcsICd0ZXN0X2RpcjInKQpAQCAtMjAxLDcgKzI3Nyw4IEBACiAKICAgICAgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc3JjLCdyJykucmVhZCgpLCAnY2hlZGRhcicpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKIAogICAgICAgICAgICAgICAgICMgVXNpbmcgYHNyY2AgaGVyZSB3b3VsZCBtZWFuIHdlIGVuZCB1cCB3aXRoIGEgc3ltbGluayBwb2ludGluZwpAQCAtMjA5LDcgKzI4Niw4IEBACiAgICAgICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgogICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2NoZWVzZScsIGRzdCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKHNyYywncicpLnJlYWQoKSwgJ2NoZWRkYXInKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRyeToKQEAgLTIyOSw2ICszMDcsMjYwIEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAKKyAgICBpZiBoYXNhdHRyKG9zLCAibWtmaWZvIik6CisgICAgICAgICMgSXNzdWUgIzMwMDI6IGNvcHlmaWxlIGFuZCBjb3B5dHJlZSBibG9jayBpbmRlZmluaXRlbHkgb24gbmFtZWQgcGlwZXMKKyAgICAgICAgZGVmIHRlc3RfY29weWZpbGVfbmFtZWRfcGlwZShzZWxmKToKKyAgICAgICAgICAgIG9zLm1rZmlmbyhURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNwZWNpYWxGaWxlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCBURVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNwZWNpYWxGaWxlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCBfX2ZpbGVfXywgVEVTVEZOKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgICAgIGRlZiB0ZXN0X2NvcHl0cmVlX25hbWVkX3BpcGUoc2VsZik6CisgICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5qb2luKFRFU1RGTiwgInN1YmRpciIpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoc3ViZGlyKQorICAgICAgICAgICAgICAgIHBpcGUgPSBvcy5wYXRoLmpvaW4oc3ViZGlyLCAibXlwaXBlIikKKyAgICAgICAgICAgICAgICBvcy5ta2ZpZm8ocGlwZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShURVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNodXRpbC5FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlLmFyZ3NbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKyAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIGVycm9yX21zZyA9IGVycm9yc1swXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJgJXNgIGlzIGEgbmFtZWQgcGlwZSIgJSBwaXBlLCBlcnJvcl9tc2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaHV0aWwuRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbChzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbih0bXBkaXIsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdzdWInLCAnZmlsZTMnXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHVuaXR0ZXN0LnNraXBVbmxlc3Moc3BsaXRkcml2ZSh0bXBkaXIpWzBdID09IHNwbGl0ZHJpdmUodG1wZGlyMilbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKKworICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorCisgICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzIHRvIGF2b2lkIHRhciB3YXJuaW5ncworICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nLCBjb21wcmVzcz1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICBkZWYgX3RhcmluZm8oc2VsZiwgcGF0aCk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IHRhci5nZXRuYW1lcygpCisgICAgICAgICAgICBuYW1lcy5zb3J0KCkKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShuYW1lcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGRpc3QgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlzdCcpCisgICAgICAgIG9zLm1rZGlyKGRpc3QpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMiddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YjInKSkKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIHJldHVybiB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgYW5kIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHRoZSB0YXIgY29tbWFuZCB0byBydW4nKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfdnNfdGFyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyBub3cgY3JlYXRlIGFub3RoZXIgdGFyYmFsbCB1c2luZyBgdGFyYAorICAgICAgICB0YXJiYWxsMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhcmNoaXZlMi50YXIuZ3onKQorICAgICAgICB0YXJfY21kID0gWyd0YXInLCAnLWNmJywgJ2FyY2hpdmUyLnRhcicsICdkaXN0J10KKyAgICAgICAgZ3ppcF9jbWQgPSBbJ2d6aXAnLCAnLWY5JywgJ2FyY2hpdmUyLnRhciddCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgICAgICBzcGF3bih0YXJfY21kKQorICAgICAgICAgICAgICAgIHNwYXduKGd6aXBfY21kKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbDIpKQorICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCB0YXJiYWxscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX3RhcmluZm8odGFyYmFsbDIpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgbm93IGZvciBhIGRyeV9ydW4KKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwgZHJ5X3J1bj1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWklQX1NVUFBPUlQsICdOZWVkIHppcCBzdXBwb3J0IHRvIHJ1bicpCisgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMiddLCAneHh4JykKKworICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgX21ha2VfemlwZmlsZShiYXNlX25hbWUsIHRtcGRpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcuemlwJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYWtlX2FyY2hpdmUsIGJhc2VfbmFtZSwgJ3h4eCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydAorICAgICAgICBpZiBVSURfR0lEX1NVUFBPUlQ6CisgICAgICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyb3VwID0gb3duZXIgPSAncm9vdCcKKworICAgICAgICBiYXNlX2Rpciwgcm9vdF9kaXIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9jd2Qoc2VsZik6CisgICAgICAgIGN1cnJlbnRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZGVmIF9icmVha3MoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JywgX2JyZWFrcywgW10sICd4eHggZmlsZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYWtlX2FyY2hpdmUoJ3h4eCcsICd4eHgnLCByb290X2Rpcj1zZWxmLm1rZHRlbXAoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRjd2QoKSwgY3VycmVudF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgJ3h4eCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgMiksICgxLCAyLCAzKV0pCisKKyAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcsIGxhbWJkYTogeCwgWygxLCAyKV0sICd4eHggZmlsZScpCisgICAgICAgIGZvcm1hdHMgPSBbbmFtZSBmb3IgbmFtZSwgcGFyYW1zIGluIGdldF9hcmNoaXZlX2Zvcm1hdHMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbigneHh4JywgZm9ybWF0cykKKworICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorICAgICAgICBmb3JtYXRzID0gW25hbWUgZm9yIG5hbWUsIHBhcmFtcyBpbiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIGZvcm1hdHMpCisKIAogY2xhc3MgVGVzdE1vdmUodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yNTksOSArNTkxLDExIEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9jaGVja19tb3ZlX2ZpbGUoc2VsZiwgc3JjLCBkc3QsIHJlYWxfZHN0KToKLSAgICAgICAgY29udGVudHMgPSBvcGVuKHNyYywgInJiIikucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihzcmMsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZCgpCiAgICAgICAgIHNodXRpbC5tb3ZlKHNyYywgZHN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBvcGVuKHJlYWxfZHN0LCAicmIiKS5yZWFkKCkpCisgICAgICAgIHdpdGggb3BlbihyZWFsX2RzdCwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIGYucmVhZCgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNyYykpCiAKICAgICBkZWYgX2NoZWNrX21vdmVfZGlyKHNlbGYsIHNyYywgZHN0LCByZWFsX2RzdCk6CkBAIC0zNDksOCArNjgzLDggQEAKICAgICAgICAgICAgIGZvciBzcmMsIGRzdCBpbiBbKCdzcmNkaXInLCAnc3JjZGlyL2Rlc3QnKV06CiAgICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKFRFU1RGTiwgc3JjKQogICAgICAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihURVNURk4sIGRzdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oc2h1dGlsLmRlc3RpbnNyYyhzcmMsIGRzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZGVzdGluc3JjKCkgd3JvbmdseSBjb25jbHVkZWQgdGhhdCAnCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNodXRpbC5fZGVzdGluc3JjKHNyYywgZHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdfZGVzdGluc3JjKCkgd3JvbmdseSBjb25jbHVkZWQgdGhhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkc3QgKCVzKSBpcyBub3QgaW4gc3JjICglcyknICUgKGRzdCwgc3JjKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCkBAIC0zNjEsOCArNjk1LDggQEAKICAgICAgICAgICAgIGZvciBzcmMsIGRzdCBpbiBbKCdzcmNkaXInLCAnc3JjL2Rlc3QnKSwgKCdzcmNkaXInLCAnc3JjZGlyLm5ldycpXToKICAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBzcmMpCiAgICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgZHN0KQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKHNodXRpbC5kZXN0aW5zcmMoc3JjLCBkc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZGVzdGluc3JjKCkgd3JvbmdseSBjb25jbHVkZWQgdGhhdCAnCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzaHV0aWwuX2Rlc3RpbnNyYyhzcmMsIGRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdfZGVzdGluc3JjKCkgd3JvbmdseSBjb25jbHVkZWQgdGhhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RzdCAoJXMpIGlzIGluIHNyYyAoJXMpJyAlIChkc3QsIHNyYykpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQppbmRleCBhZTViNTg2Li44ZmViMTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gY29udGV4dGxpYiBpbXBvcnQgY2xvc2luZywgbmVzdGVkCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNsb3NpbmcKIGltcG9ydCBnYwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHNlbGVjdApAQCAtOSw5ICs5LDggQEAKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBzeXMsIG9zLCB0aW1lLCBlcnJubwogCi1pZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAncmlzY29zJzoKLSAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtKQoraWYgc3lzLnBsYXRmb3JtIGluICgnb3MyJywgJ3Jpc2NvcycpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCiAKIAogY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKQEAgLTM3LDYgKzM2LDcgQEAKICAgICAgICAgcmV0dXJuIE5vbmUKIAogCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQogY2xhc3MgSW50ZXJQcm9jZXNzU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIE1BWF9EVVJBVElPTiA9IDIwICAgIyBFbnRpcmUgdGVzdCBzaG91bGQgbGFzdCBhdCBtb3N0IDIwIHNlYy4KIApAQCAtMTM5LDIxICsxMzksMTkgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgicGF1c2UgcmV0dXJuZWQgb2YgaXRzIG93biBhY2NvcmQsIGFuZCB0aGUgc2lnbmFsIgogICAgICAgICAgICAgICAgICAgICAgICIgZGlkbid0IGFycml2ZSBhZnRlciBhbm90aGVyIHNlY29uZC4iKQogCisgICAgIyBJc3N1ZSAzODY0LiBVbmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzby4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybT09J2ZyZWVic2Q2JywKKyAgICAgICAgJ2ludGVyIHByb2Nlc3Mgc2lnbmFscyBub3QgcmVsaWFibGUgKGRvIG5vdCBtaXggd2VsbCB3aXRoIHRocmVhZGluZykgJworICAgICAgICAnb24gZnJlZWJzZDYnKQogICAgIGRlZiB0ZXN0X21haW4oc2VsZik6Ci0gICAgICAgICMgSXNzdWUgMzg2NCwgdW5rbm93biBpZiB0aGlzIGFmZmVjdHMgZWFybGllciB2ZXJzaW9ucyBvZiBmcmVlYnNkIGFsc28KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnOgotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc2tpcHBpbmcgLS0gaW50ZXIgcHJvY2VzcyBzaWduYWxzIG5vdCAnCi0gICAgICAgICAgICAgICAgICAgICdyZWxpYWJsZSAoZG8gbm90IG1peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSBvbiBmcmVlYnNkNlxuJykKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFRoaXMgZnVuY3Rpb24gc3Bhd25zIGEgY2hpbGQgcHJvY2VzcyB0byBpbnN1bGF0ZSB0aGUgbWFpbgogICAgICAgICAjIHRlc3QtcnVubmluZyBwcm9jZXNzIGZyb20gYWxsIHRoZSBzaWduYWxzLiBJdCB0aGVuCiAgICAgICAgICMgY29tbXVuaWNhdGVzIHdpdGggdGhhdCBjaGlsZCBwcm9jZXNzIG92ZXIgYSBwaXBlIGFuZAogICAgICAgICAjIHJlLXJhaXNlcyBpbmZvcm1hdGlvbiBhYm91dCBhbnkgZXhjZXB0aW9ucyB0aGUgY2hpbGQKICAgICAgICAgIyB0aHJvd3MuIFRoZSByZWFsIHdvcmsgaGFwcGVucyBpbiBzZWxmLnJ1bl90ZXN0KCkuCiAgICAgICAgIG9zX2RvbmVfciwgb3NfZG9uZV93ID0gb3MucGlwZSgpCi0gICAgICAgIHdpdGggbmVzdGVkKGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfcikpLAotICAgICAgICAgICAgICAgICAgICBjbG9zaW5nKG9zLmZkb3Blbihvc19kb25lX3csICd3JykpKSBhcyAoZG9uZV9yLCBkb25lX3cpOgorICAgICAgICB3aXRoIGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfcikpIGFzIGRvbmVfciwgXAorICAgICAgICAgICAgIGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfdywgJ3cnKSkgYXMgZG9uZV93OgogICAgICAgICAgICAgY2hpbGQgPSBvcy5mb3JrKCkKICAgICAgICAgICAgIGlmIGNoaWxkID09IDA6CiAgICAgICAgICAgICAgICAgIyBJbiB0aGUgY2hpbGQgcHJvY2VzczsgcnVuIHRoZSB0ZXN0IGFuZCByZXBvcnQgcmVzdWx0cwpAQCAtMTg4LDYgKzE4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuTUFYX0RVUkFUSU9OKQogCiAKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCiBjbGFzcyBCYXNpY1NpZ25hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdHJpdmlhbF9zaWduYWxfaGFuZGxlcihzZWxmLCAqYXJncyk6CiAgICAgICAgIHBhc3MKQEAgLTIwNCwxMiArMjAzLDMxIEBACiAKICAgICBkZWYgdGVzdF9nZXRzaWduYWwoc2VsZik6CiAgICAgICAgIGh1cCA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgc2VsZi50cml2aWFsX3NpZ25hbF9oYW5kbGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSFVQKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgaHVwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLCBodXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSFVQKSwgaHVwKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCitjbGFzcyBXaW5kb3dzU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lzc3VlOTMyNChzZWxmKToKKyAgICAgICAgIyBVcGRhdGVkIGZvciBpc3N1ZSAjMTAwMDMsIGFkZGluZyBTSUdCUkVBSworICAgICAgICBoYW5kbGVyID0gbGFtYmRhIHgsIHk6IE5vbmUKKyAgICAgICAgZm9yIHNpZyBpbiAoc2lnbmFsLlNJR0FCUlQsIHNpZ25hbC5TSUdCUkVBSywgc2lnbmFsLlNJR0ZQRSwKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0lMTCwgc2lnbmFsLlNJR0lOVCwgc2lnbmFsLlNJR1NFR1YsCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdURVJNKToKKyAgICAgICAgICAgICMgU2V0IGFuZCB0aGVuIHJlc2V0IGEgaGFuZGxlciBmb3Igc2lnbmFscyB0aGF0IHdvcmsgb24gd2luZG93cworICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWcsIHNpZ25hbC5zaWduYWwoc2lnLCBoYW5kbGVyKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbCgtMSwgaGFuZGxlcikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbCg3LCBoYW5kbGVyKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCiBjbGFzcyBXYWtldXBTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgVElNRU9VVF9GVUxMID0gMTAKICAgICBUSU1FT1VUX0hBTEYgPSA1CkBAIC0yMjMsMTAgKzI0MSwxMCBAQAogICAgICAgICAjIGJlZm9yZSBzZWxlY3QgaXMgY2FsbGVkCiAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5USU1FT1VUX0ZVTEwpCiAgICAgICAgIG1pZF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1pZF90aW1lIC0gYmVmb3JlX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1pZF90aW1lIC0gYmVmb3JlX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKICAgICAgICAgc2VsZWN0LnNlbGVjdChbc2VsZi5yZWFkXSwgW10sIFtdLCBzZWxmLlRJTUVPVVRfRlVMTCkKICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhZnRlcl90aW1lIC0gbWlkX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFmdGVyX3RpbWUgLSBtaWRfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQogCiAgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2R1cmluZyhzZWxmKToKICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMjM3LDcgKzI1NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGVjdC5lcnJvciwgc2VsZWN0LnNlbGVjdCwKICAgICAgICAgICAgIFtzZWxmLnJlYWRdLCBbXSwgW10sIHNlbGYuVElNRU9VVF9GVUxMKQogICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGFmdGVyX3RpbWUgLSBiZWZvcmVfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lIDwgc2VsZi5USU1FT1VUX0hBTEYpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGltcG9ydCBmY250bApAQCAtMjU1LDMzICsyNzMsMTggQEAKICAgICAgICAgb3MuY2xvc2Uoc2VsZi53cml0ZSkKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5hbHJtKQogCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQogY2xhc3MgU2lnaW50ZXJydXB0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgc2lnbnVtID0gc2lnbmFsLlNJR1VTUjEKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiSW5zdGFsbCBhIG5vLW9wIHNpZ25hbCBoYW5kbGVyIHRoYXQgY2FuIGJlIHNldCB0byBhbGxvdwogICAgICAgICBpbnRlcnJ1cHRzIG9yIG5vdCwgYW5kIGFycmFuZ2UgZm9yIHRoZSBvcmlnaW5hbCBzaWduYWwgaGFuZGxlciB0byBiZQogICAgICAgICByZS1pbnN0YWxsZWQgd2hlbiB0aGUgdGVzdCBpcyBmaW5pc2hlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NsZWFudXBzID0gW10KKyAgICAgICAgc2VsZi5zaWdudW0gPSBzaWduYWwuU0lHVVNSMQogICAgICAgICBvbGRoYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzZWxmLnNpZ251bSwgbGFtYmRhIHgseTogTm9uZSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNlbGYuc2lnbnVtLCBvbGRoYW5kbGVyKQogCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICIiIlJ1biBhbnkgY2xlYW51cCBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuCi0gICAgICAgICIiIgotICAgICAgICBmb3IgKGYsIGEpIGluIHNlbGYuX2NsZWFudXBzOgotICAgICAgICAgICAgZigqYSkKLQotCi0gICAgZGVmIGFkZENsZWFudXAoc2VsZiwgZiwgKmEpOgotICAgICAgICAiIiJSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IG1ldGhvZAotICAgICAgICBydW4uCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9jbGVhbnVwcy5hcHBlbmQoKGYsIGEpKQotCi0KICAgICBkZWYgcmVhZHBpcGVfaW50ZXJydXB0ZWQoc2VsZik6CiAgICAgICAgICIiIlBlcmZvcm0gYSByZWFkIGR1cmluZyB3aGljaCBhIHNpZ25hbCB3aWxsIGFycml2ZS4gIFJldHVybiBUcnVlIGlmIHRoZQogICAgICAgICByZWFkIGlzIGludGVycnVwdGVkIGJ5IHRoZSBzaWduYWwgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24uICBSZXR1cm4gRmFsc2UKQEAgLTM3Miw3ICszNzUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGkpCiAKIAotCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQogY2xhc3MgSXRpbWVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmhuZGxfY2FsbGVkID0gRmFsc2UKQEAgLTQzNCwxMyArNDM3LDEwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhuZGxfY2FsbGVkLCBUcnVlKQogCisgICAgIyBJc3N1ZSAzODY0LiBVbmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzby4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q2JywgJ25ldGJzZDUnKSwKKyAgICAgICAgJ2l0aW1lciBub3QgcmVsaWFibGUgKGRvZXMgbm90IG1peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSBvbiBzb21lIEJTRHMuJykKICAgICBkZWYgdGVzdF9pdGltZXJfdmlydHVhbChzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAzODY0LCB1bmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzbwotICAgICAgICBpZiBzeXMucGxhdGZvcm09PSdmcmVlYnNkNic6Ci0gICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdza2lwcGluZyAtLSBpdGltZXIgbm90IHJlbGlhYmxlIChkb2VzIG5vdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWl4IHdlbGwgd2l0aCB0aHJlYWRpbmcpIG9uIGZyZWVic2Q2XG4nKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuaXRpbWVyID0gc2lnbmFsLklUSU1FUl9WSVJUVUFMCiAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1ZUQUxSTSwgc2VsZi5zaWdfdnRhbHJtKQogICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNlbGYuaXRpbWVyLCAwLjMsIDAuMikKQEAgLTQ1MiwyMiArNDUyLDE4IEBACiAgICAgICAgICAgICBpZiBzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSA9PSAoMC4wLCAwLjApOgogICAgICAgICAgICAgICAgIGJyZWFrICMgc2lnX3Z0YWxybSBoYW5kbGVyIHN0b3BwZWQgdGhpcyBpdGltZXIKICAgICAgICAgZWxzZTogIyBJc3N1ZSA4NDI0Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ0ZXN0X2l0aW1lcl92aXJ0dWFsOiB0aW1lb3V0OiBsaWtlbHkgY2F1c2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hY2hpbmUgdG9vIHNsb3cgb3IgbG9hZCB0b28gaGlnaC5cbiIpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWVvdXQ6IGxpa2VseSBjYXVzZTogbWFjaGluZSB0b28gc2xvdyBvciBsb2FkIHRvbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWdoIikKIAogICAgICAgICAjIHZpcnR1YWwgaXRpbWVyIHNob3VsZCBiZSAoMC4wLCAwLjApIG5vdwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSwgKDAuMCwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSwgKDAuMCwgMC4wKSkKICAgICAgICAgIyBhbmQgdGhlIGhhbmRsZXIgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5obmRsX2NhbGxlZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhuZGxfY2FsbGVkLCBUcnVlKQogCisgICAgIyBJc3N1ZSAzODY0LiBVbmtub3duIGlmIHRoaXMgYWZmZWN0cyBlYXJsaWVyIHZlcnNpb25zIG9mIGZyZWVic2QgYWxzby4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybT09J2ZyZWVic2Q2JywKKyAgICAgICAgJ2l0aW1lciBub3QgcmVsaWFibGUgKGRvZXMgbm90IG1peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSBvbiBmcmVlYnNkNicpCiAgICAgZGVmIHRlc3RfaXRpbWVyX3Byb2Yoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgMzg2NCwgdW5rbm93biBpZiB0aGlzIGFmZmVjdHMgZWFybGllciB2ZXJzaW9ucyBvZiBmcmVlYnNkIGFsc28KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnOgotICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc2tpcHBpbmcgLS0gaXRpbWVyIG5vdCByZWxpYWJsZSAoZG9lcyBub3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSBvbiBmcmVlYnNkNlxuJykKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLml0aW1lciA9IHNpZ25hbC5JVElNRVJfUFJPRgogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdQUk9GLCBzZWxmLnNpZ19wcm9mKQogICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNlbGYuaXRpbWVyLCAwLjIsIDAuMikKQEAgLTQ3OSwxOCArNDc1LDE4IEBACiAgICAgICAgICAgICBpZiBzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSA9PSAoMC4wLCAwLjApOgogICAgICAgICAgICAgICAgIGJyZWFrICMgc2lnX3Byb2YgaGFuZGxlciBzdG9wcGVkIHRoaXMgaXRpbWVyCiAgICAgICAgIGVsc2U6ICMgSXNzdWUgODQyNAotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgidGVzdF9pdGltZXJfcHJvZjogdGltZW91dDogbGlrZWx5IGNhdXNlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWNoaW5lIHRvbyBzbG93IG9yIGxvYWQgdG9vIGhpZ2guXG4iKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0aW1lb3V0OiBsaWtlbHkgY2F1c2U6IG1hY2hpbmUgdG9vIHNsb3cgb3IgbG9hZCB0b28gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlnaCIpCiAKICAgICAgICAgIyBwcm9maWxpbmcgaXRpbWVyIHNob3VsZCBiZSAoMC4wLCAwLjApIG5vdwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSwgKDAuMCwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSwgKDAuMCwgMC4wKSkKICAgICAgICAgIyBhbmQgdGhlIGhhbmRsZXIgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhuZGxfY2FsbGVkLCBUcnVlKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCYXNpY1NpZ25hbFRlc3RzLCBJbnRlclByb2Nlc3NTaWduYWxUZXN0cywKLSAgICAgICAgV2FrZXVwU2lnbmFsVGVzdHMsIFNpZ2ludGVycnVwdFRlc3QsIEl0aW1lclRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWtldXBTaWduYWxUZXN0cywgU2lnaW50ZXJydXB0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0aW1lclRlc3QsIFdpbmRvd3NTaWduYWxUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CmluZGV4IDRhMDUxOTYuLjE5ODhlZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTUsMTkgKzUsMjQgQEAKIAogIiIiCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRW52aXJvbm1lbnRWYXJHdWFyZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIEVudmlyb25tZW50VmFyR3VhcmQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX291dHB1dAogaW1wb3J0IF9fYnVpbHRpbl9fCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCByZQogaW1wb3J0IGVuY29kaW5ncwogaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXNjb25maWcKK2Zyb20gY29weSBpbXBvcnQgY29weQorCiAjIE5lZWQgdG8gbWFrZSBzdXJlIHRvIG5vdCBpbXBvcnQgJ3NpdGUnIGlmIHNvbWVvbmUgc3BlY2lmaWVkIGBgLVNgYCBhdCB0aGUKICMgY29tbWFuZC1saW5lLiAgRGV0ZWN0IHRoaXMgYnkganVzdCBtYWtpbmcgc3VyZSAnc2l0ZScgaGFzIG5vdCBiZWVuIGltcG9ydGVkCiAjIGFscmVhZHkuCiBpZiAic2l0ZSIgaW4gc3lzLm1vZHVsZXM6CiAgICAgaW1wb3J0IHNpdGUKIGVsc2U6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoImltcG9ydGF0aW9uIG9mIHNpdGUucHkgc3VwcHJlc3NlZCIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImltcG9ydGF0aW9uIG9mIHNpdGUucHkgc3VwcHJlc3NlZCIpCiAKIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNpdGUuVVNFUl9TSVRFKToKICAgICAjIG5lZWQgdG8gYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgZm9yIHRlc3RzCkBAIC0zNSwxMCArNDAsMTggQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNhdmUgYSBjb3B5IG9mIHN5cy5wYXRoIiIiCiAgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm9sZF9iYXNlID0gc2l0ZS5VU0VSX0JBU0UKKyAgICAgICAgc2VsZi5vbGRfc2l0ZSA9IHNpdGUuVVNFUl9TSVRFCisgICAgICAgIHNlbGYub2xkX3ByZWZpeGVzID0gc2l0ZS5QUkVGSVhFUworICAgICAgICBzZWxmLm9sZF92YXJzID0gY29weShzeXNjb25maWcuX0NPTkZJR19WQVJTKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZXN0b3JlIHN5cy5wYXRoIiIiCi0gICAgICAgIHN5cy5wYXRoID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLm9sZF9iYXNlCisgICAgICAgIHNpdGUuVVNFUl9TSVRFID0gc2VsZi5vbGRfc2l0ZQorICAgICAgICBzaXRlLlBSRUZJWEVTID0gc2VsZi5vbGRfcHJlZml4ZXMKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IHNlbGYub2xkX3ZhcnMKIAogICAgIGRlZiB0ZXN0X21ha2VwYXRoKHNlbGYpOgogICAgICAgICAjIFRlc3QgbWFrZXBhdGgoKSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIGl0cyBmaXJzdCByZXR1cm4gdmFsdWUKQEAgLTQ3LDI2ICs2MCwyNiBAQAogICAgICAgICBwYXRoX3BhcnRzID0gKCJCZWdpbm5pbmciLCAiRW5kIikKICAgICAgICAgb3JpZ2luYWxfZGlyID0gb3MucGF0aC5qb2luKCpwYXRoX3BhcnRzKQogICAgICAgICBhYnNfZGlyLCBub3JtX2RpciA9IHNpdGUubWFrZXBhdGgoKnBhdGhfcGFydHMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9zLnBhdGguYWJzcGF0aChvcmlnaW5hbF9kaXIpLCBhYnNfZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aChvcmlnaW5hbF9kaXIpLCBhYnNfZGlyKQogICAgICAgICBpZiBvcmlnaW5hbF9kaXIgPT0gb3MucGF0aC5ub3JtY2FzZShvcmlnaW5hbF9kaXIpOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoYWJzX2Rpciwgbm9ybV9kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFic19kaXIsIG5vcm1fZGlyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3MucGF0aC5ub3JtY2FzZShhYnNfZGlyKSwgbm9ybV9kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGgubm9ybWNhc2UoYWJzX2RpciksIG5vcm1fZGlyKQogCiAgICAgZGVmIHRlc3RfaW5pdF9wYXRoaW5mbyhzZWxmKToKICAgICAgICAgZGlyX3NldCA9IHNpdGUuX2luaXRfcGF0aGluZm8oKQogICAgICAgICBmb3IgZW50cnkgaW4gW3NpdGUubWFrZXBhdGgocGF0aClbMV0gZm9yIHBhdGggaW4gc3lzLnBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIG9zLnBhdGguaXNkaXIocGF0aCldOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGVudHJ5IGluIGRpcl9zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGZyb20gc3lzLnBhdGggbm90IGZvdW5kIGluIHNldCByZXR1cm5lZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IF9pbml0X3BhdGhpbmZvKCk6ICVzIiAlIChlbnRyeSwgZGlyX3NldCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVudHJ5LCBkaXJfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZnJvbSBzeXMucGF0aCBub3QgZm91bmQgaW4gc2V0IHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IF9pbml0X3BhdGhpbmZvKCk6ICVzIiAlIChlbnRyeSwgZGlyX3NldCkpCiAKICAgICBkZWYgcHRoX2ZpbGVfdGVzdHMoc2VsZiwgcHRoX2ZpbGUpOgogICAgICAgICAiIiJDb250YWluIGNvbW1vbiBjb2RlIGZvciB0ZXN0aW5nIHJlc3VsdHMgb2YgcmVhZGluZyBhIC5wdGggZmlsZSIiIgotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocHRoX2ZpbGUuaW1wb3J0ZWQgaW4gc3lzLm1vZHVsZXMsCi0gICAgICAgICAgICAgICAgIiVzIG5vdCBpbiBzeXMucGF0aCIgJSBwdGhfZmlsZS5pbXBvcnRlZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHNpdGUubWFrZXBhdGgocHRoX2ZpbGUuZ29vZF9kaXJfcGF0aClbMF0gaW4gc3lzLnBhdGgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhub3Qgb3MucGF0aC5leGlzdHMocHRoX2ZpbGUuYmFkX2Rpcl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwdGhfZmlsZS5pbXBvcnRlZCwgc3lzLm1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBpbiBzeXMubW9kdWxlcyIgJSBwdGhfZmlsZS5pbXBvcnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaXRlLm1ha2VwYXRoKHB0aF9maWxlLmdvb2RfZGlyX3BhdGgpWzBdLCBzeXMucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhwdGhfZmlsZS5iYWRfZGlyX3BhdGgpKQogCiAgICAgZGVmIHRlc3RfYWRkcGFja2FnZShzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgYWRkcGFja2FnZSgpIGltcG9ydHMgaWYgdGhlIGxpbmUgc3RhcnRzIHdpdGggJ2ltcG9ydCcsCkBAIC04Myw2ICs5Niw1OCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcHRoX2ZpbGUuY2xlYW51cCgpCiAKKyAgICBkZWYgbWFrZV9wdGgoc2VsZiwgY29udGVudHMsIHB0aF9kaXI9Jy4nLCBwdGhfbmFtZT1URVNURk4pOgorICAgICAgICAjIENyZWF0ZSBhIC5wdGggZmlsZSBhbmQgcmV0dXJuIGl0cyAoYWJzcGF0aCwgYmFzZW5hbWUpLgorICAgICAgICBwdGhfZGlyID0gb3MucGF0aC5hYnNwYXRoKHB0aF9kaXIpCisgICAgICAgIHB0aF9iYXNlbmFtZSA9IHB0aF9uYW1lICsgJy5wdGgnCisgICAgICAgIHB0aF9mbiA9IG9zLnBhdGguam9pbihwdGhfZGlyLCBwdGhfYmFzZW5hbWUpCisgICAgICAgIHB0aF9maWxlID0gb3BlbihwdGhfZm4sICd3JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogb3MucmVtb3ZlKHB0aF9mbikpCisgICAgICAgIHB0aF9maWxlLndyaXRlKGNvbnRlbnRzKQorICAgICAgICBwdGhfZmlsZS5jbG9zZSgpCisgICAgICAgIHJldHVybiBwdGhfZGlyLCBwdGhfYmFzZW5hbWUKKworICAgIGRlZiB0ZXN0X2FkZHBhY2thZ2VfaW1wb3J0X2JhZF9zeW50YXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTA2NDIKKyAgICAgICAgcHRoX2RpciwgcHRoX2ZuID0gc2VsZi5tYWtlX3B0aCgiaW1wb3J0IGJhZClzeW50YXhcbiIpCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBlcnJfb3V0OgorICAgICAgICAgICAgc2l0ZS5hZGRwYWNrYWdlKHB0aF9kaXIsIHB0aF9mbiwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICJsaW5lIDEiKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgcmUuZXNjYXBlKG9zLnBhdGguam9pbihwdGhfZGlyLCBwdGhfZm4pKSkKKyAgICAgICAgIyBYWFg6IHRoZSBwcmV2aW91cyB0d28gc2hvdWxkIGJlIGluZGVwZW5kZW50IGNoZWNrcyBzbyB0aGF0IHRoZQorICAgICAgICAjIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLiAgVGhlIG5leHQgdGhyZWUgY291bGQgYmUgYSBzaW5nbGUgY2hlY2sKKyAgICAgICAgIyBidXQgbXkgcmVnZXggZm9vIGlzbid0IGdvb2QgZW5vdWdoIHRvIHdyaXRlIGl0LgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgcidpbXBvcnQgYmFkXClzeW50YXgnKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnU3ludGF4RXJyb3InKQorCisgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX2V4ZWMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTA2NDIKKyAgICAgICAgcHRoX2RpciwgcHRoX2ZuID0gc2VsZi5tYWtlX3B0aCgicmFuZG9tcGF0aFxuaW1wb3J0IG5vc3VjaG1vZHVsZVxuIikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2RpciwgcHRoX2ZuLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgImxpbmUgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQorICAgICAgICAjIFhYWDogZGl0dG8gcHJldmlvdXMgWFhYIGNvbW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnSW1wb3J0RXJyb3InKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3MgZG9lcyBub3QgcmFpc2UgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBmb3IgZmlsZSBwYXRocyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVycyIpCisgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX3B0aF9maWxlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDUyNTgKKyAgICAgICAgcHRoX2RpciwgcHRoX2ZuID0gc2VsZi5tYWtlX3B0aCgiYWJjXHgwMGRlZlxuIikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2RpciwgcHRoX2ZuLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgImxpbmUgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQorICAgICAgICAjIFhYWDogZGl0dG8gcHJldmlvdXMgWFhYIGNvbW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHlwZUVycm9yJykKKwogICAgIGRlZiB0ZXN0X2FkZHNpdGVkaXIoc2VsZik6CiAgICAgICAgICMgU2FtZSB0ZXN0cyBmb3IgdGVzdF9hZGRwYWNrYWdlIHNpbmNlIGFkZHNpdGVkaXIoKSBlc3NlbnRpYWxseSBqdXN0CiAgICAgICAgICMgY2FsbHMgYWRkcGFja2FnZSgpIGZvciBldmVyeSAucHRoIGZpbGUgaW4gdGhlIGRpcmVjdG9yeQpAQCAtOTgsMTQgKzE2MywxOSBAQAogCiAgICAgZGVmIHRlc3Rfc19vcHRpb24oc2VsZik6CiAgICAgICAgIHVzZXJzaXRlID0gc2l0ZS5VU0VSX1NJVEUKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJzaXRlIGluIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEluKHVzZXJzaXRlLCBzeXMucGF0aCkKIAorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKyAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdCglciBpbiBzeXMucGF0aCknICUgdXNlcnNpdGVdLAorICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSwgIiVyIGlzIG5vdCBpbiBzeXMucGF0aCAoc3lzLmV4aXQgcmV0dXJuZWQgJXIpIgorICAgICAgICAgICAgICAgICUgKHVzZXJzaXRlLCByYykpCiAKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLXMnLCAnLWMnLAotICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KCVyIGluIHN5cy5wYXRoKScgJSB1c2Vyc2l0ZV0pCisgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSwKKyAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCiAKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKQEAgLTEyMiw2ICsxOTIsNjUgQEAKICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCiAKKyAgICBkZWYgdGVzdF9nZXR1c2VyYmFzZShzZWxmKToKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBOb25lCisgICAgICAgIHVzZXJfYmFzZSA9IHNpdGUuZ2V0dXNlcmJhc2UoKQorCisgICAgICAgICMgdGhlIGNhbGwgc2V0cyBzaXRlLlVTRVJfQkFTRQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpdGUuVVNFUl9CQVNFLCB1c2VyX2Jhc2UpCisKKyAgICAgICAgIyBsZXQncyBzZXQgUFlUSE9OVVNFUkJBU0UgYW5kIHNlZSBpZiBpdCB1c2VzIGl0CisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gTm9uZQorICAgICAgICBpbXBvcnQgc3lzY29uZmlnCisgICAgICAgIHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMgPSBOb25lCisKKyAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52aXJvbjoKKyAgICAgICAgICAgIGVudmlyb25bJ1BZVEhPTlVTRVJCQVNFJ10gPSAneG94bycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXRlLmdldHVzZXJiYXNlKCkuc3RhcnRzd2l0aCgneG94bycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUuZ2V0dXNlcmJhc2UoKSkKKworICAgIGRlZiB0ZXN0X2dldHVzZXJzaXRlcGFja2FnZXMoc2VsZik6CisgICAgICAgIHNpdGUuVVNFUl9TSVRFID0gTm9uZQorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IE5vbmUKKyAgICAgICAgdXNlcl9zaXRlID0gc2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzKCkKKworICAgICAgICAjIHRoZSBjYWxsIHNldHMgVVNFUl9CQVNFICphbmQqIFVTRVJfU0lURQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpdGUuVVNFUl9TSVRFLCB1c2VyX3NpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX3NpdGUuc3RhcnRzd2l0aChzaXRlLlVTRVJfQkFTRSksIHVzZXJfc2l0ZSkKKworICAgIGRlZiB0ZXN0X2dldHNpdGVwYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsneG94byddCisgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnTGliJywgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdweXRob24nICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQorICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ2xpYicsICdzaXRlLXB5dGhvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCAneG94bycpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCisKKyAgICAgICAgIyBsZXQncyB0cnkgdGhlIHNwZWNpZmljIEFwcGxlIGxvY2F0aW9uCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKKyAgICAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ1B5dGhvbi5mcmFtZXdvcmsnXQorICAgICAgICAgICAgZGlycyA9IHNpdGUuZ2V0c2l0ZXBhY2thZ2VzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCA0KQorICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd+JywgJ0xpYnJhcnknLCAnUHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMudmVyc2lvbls6M10sICdzaXRlLXBhY2thZ2VzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgb3MucGF0aC5leHBhbmR1c2VyKHdhbnRlZCkpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJy9MaWJyYXJ5JywgJ1B5dGhvbicsIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbM10sIHdhbnRlZCkKIAogY2xhc3MgUHRoRmlsZShvYmplY3QpOgogICAgICIiIkhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgdGVzdGluZyBvZiAucHRoIGZpbGVzIiIiCkBAIC0xODcsNyArMzE2LDcgQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgIiIiUmVzdG9yZSBzeXMucGF0aCIiIgotICAgICAgICBzeXMucGF0aCA9IHNlbGYuc3lzX3BhdGgKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCiAKICAgICBkZWYgdGVzdF9hYnNfX2ZpbGVfXyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIGltcG9ydGVkIG1vZHVsZXMgaGF2ZSB0aGVpciBfX2ZpbGVfXyBhdHRyaWJ1dGUKQEAgLTIwOSw3ICszMzgsNyBAQAogICAgICAgICBzaXRlLnJlbW92ZWR1cHBhdGhzKCkKICAgICAgICAgc2Vlbl9wYXRocyA9IHNldCgpCiAgICAgICAgIGZvciBwYXRoIGluIHN5cy5wYXRoOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHBhdGggbm90IGluIHNlZW5fcGF0aHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHBhdGgsIHNlZW5fcGF0aHMpCiAgICAgICAgICAgICBzZWVuX3BhdGhzLmFkZChwYXRoKQogCiAgICAgZGVmIHRlc3RfYWRkX2J1aWxkX2RpcihzZWxmKToKQEAgLTIyMCwxNyArMzQ5LDE3IEBACiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX3F1aXQoc2VsZik6CiAgICAgICAgICMgJ3F1aXQnIGFuZCAnZXhpdCcgc2hvdWxkIGJlIGluamVjdGVkIGludG8gX19idWlsdGluX18KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIoX19idWlsdGluX18sICJxdWl0IikpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhoYXNhdHRyKF9fYnVpbHRpbl9fLCAiZXhpdCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgInF1aXQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX19idWlsdGluX18sICJleGl0IikpCiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX2NvcHlyaWdodChzZWxmKToKICAgICAgICAgIyAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIHNob3VsZCBiZSBpbiBfX2J1aWx0aW5fXwotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihfX2J1aWx0aW5fXywgImNvcHlyaWdodCIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaGFzYXR0cihfX2J1aWx0aW5fXywgImNyZWRpdHMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX19idWlsdGluX18sICJjb3B5cmlnaHQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX19idWlsdGluX18sICJjcmVkaXRzIikpCiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX2hlbHAoc2VsZik6CiAgICAgICAgICMgJ2hlbHAnIHNob3VsZCBiZSBzZXQgaW4gX19idWlsdGluX18KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGhhc2F0dHIoX19idWlsdGluX18sICJoZWxwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAiaGVscCIpKQogCiAgICAgZGVmIHRlc3RfYWxpYXNpbmdfbWJjcyhzZWxmKToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CkBAIC0yNDQsNyArMzczLDcgQEAKIAogICAgIGRlZiB0ZXN0X3NldGRlZmF1bHRlbmNvZGluZ19yZW1vdmVkKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nIGlzIGdvbmUKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBoYXNhdHRyKHN5cywgInNldGRlZmF1bHRlbmNvZGluZyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoc3lzLCAic2V0ZGVmYXVsdGVuY29kaW5nIikpCiAKICAgICBkZWYgdGVzdF9zaXRlY3VzdG9taXplX2V4ZWN1dGVkKHNlbGYpOgogICAgICAgICAjIElmIHNpdGVjdXN0b21pemUgaXMgYXZhaWxhYmxlLCBpdCBzaG91bGQgaGF2ZSBiZWVuIGltcG9ydGVkLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKaW5kZXggMmY2NTMwOC4uMzMwNGQ2YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CkBAIC03MSw3ICs3MSw3IEBACiAKICAgICAgICAgb2JqID0gQW55Q2xhc3MoKQogICAgICAgICBzID0gc2xpY2Uob2JqKQotICAgICAgICBzZWxmLmFzc2VydF8ocy5zdG9wIGlzIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RvcCBpcyBvYmopCiAKICAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQpAQCAtMTE1LDkgKzExNSw5IEBACiAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCgoaSwgaiwgaykpCiAKICAgICAgICAgeCA9IFgoKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB4WzE6Ml0gPSA0MgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0bXAsIFsoMSwgMiwgNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXAsIFsoMSwgMiwgNDIpXSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgcyA9IHNsaWNlKDEwLCAyMCwgMykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQppbmRleCA2NDRjYmY3Li40MmExMGJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CkBAIC0xLDcgKzEsNiBAQAogaW1wb3J0IGFzeW5jb3JlCiBpbXBvcnQgZW1haWwudXRpbHMKIGltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzbXRwZAogaW1wb3J0IHNtdHBsaWIKIGltcG9ydCBTdHJpbmdJTwpAQCAtOSw5ICs4LDE0IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHNlbGVjdAogCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoraW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwogSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCiAKIGRlZiBzZXJ2ZXIoZXZ0LCBidWYsIHNlcnYpOgpAQCAtMzYsMjAgKzQwLDI1IEBACiAgICAgICAgIHNlcnYuY2xvc2UoKQogICAgICAgICBldnQuc2V0KCkKIAotY2xhc3MgR2VuZXJhbFRlc3RzKFRlc3RDYXNlKToKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBHZW5lcmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxNSkKICAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCiAgICAgICAgIHNlcnZhcmdzID0gKHNlbGYuZXZ0LCAiMjIwIEhvbGEgbXVuZG9cbiIsIHNlbGYuc29jaykKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPXNlcnZhcmdzKS5zdGFydCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPXNlcnZhcmdzKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQogICAgICAgICBzZWxmLmV2dC5jbGVhcigpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIHRlc3RCYXNpYzEoc2VsZik6CiAgICAgICAgICMgY29ubmVjdHMKQEAgLTEzNCw3ICsxNDMsOCBAQAogIyB0ZXN0IHNlcnZlciB0aW1lcyBvdXQsIGNhdXNpbmcgdGhlIHRlc3QgdG8gZmFpbC4KIAogIyBUZXN0IGJlaGF2aW9yIG9mIHNtdHBkLkRlYnVnZ2luZ1NlcnZlcgotY2xhc3MgRGVidWdnaW5nU2VydmVyVGVzdHMoVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIERlYnVnZ2luZ1NlcnZlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyB0ZW1wb3JhcmlseSByZXBsYWNlIHN5cy5zdGRvdXQgdG8gY2FwdHVyZSBEZWJ1Z2dpbmdTZXJ2ZXIgb3V0cHV0CkBAIC0xNDIsNiArMTUyLDcgQEAKICAgICAgICAgc2VsZi5vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm91dHB1dAogCisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICAgICAgc2VsZi5zZXJ2X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIHNlbGYuY2xpZW50X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgICMgUGljayBhIHJhbmRvbSB1bnVzZWQgcG9ydCBieSBwYXNzaW5nIDAgZm9yIHRoZSBwb3J0IG51bWJlcgpAQCAtMTQ5LDcgKzE2MCw4IEBACiAgICAgICAgICMgS2VlcCBhIG5vdGUgb2Ygd2hhdCBwb3J0IHdhcyBhc3NpZ25lZAogICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNlcnYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgc2Vydl9hcmdzID0gKHNlbGYuc2Vydiwgc2VsZi5zZXJ2X2V2dCwgc2VsZi5jbGllbnRfZXZ0KQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRlYnVnZ2luZ19zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCiAKICAgICAgICAgIyB3YWl0IHVudGlsIHNlcnZlciB0aHJlYWQgaGFzIGFzc2lnbmVkIGEgcG9ydCBudW1iZXIKICAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKQEAgLTE2MCw2ICsxNzIsOCBAQAogICAgICAgICBzZWxmLmNsaWVudF9ldnQuc2V0KCkKICAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRocmVhZCB0byB0ZXJtaW5hdGUKICAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKICAgICAgICAgIyByZXN0b3JlIHN5cy5zdGRvdXQKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dAogCkBAIC0yMjcsNyArMjQxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm91dHB1dC5nZXR2YWx1ZSgpLCBtZXhwZWN0KQogCiAKLWNsYXNzIE5vbkNvbm5lY3RpbmdUZXN0cyhUZXN0Q2FzZSk6CitjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3ROb3RDb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB2YXJpb3VzIG9wZXJhdGlvbnMgb24gYW4gdW5jb25uZWN0ZWQgU01UUCBvYmplY3QgdGhhdApAQCAtMjQ4LDI0ICsyNjIsMjkgQEAKIAogCiAjIHRlc3QgcmVzcG9uc2Ugb2YgY2xpZW50IHRvIGEgbm9uLXN1Y2Nlc3NmdWwgSEVMTyBtZXNzYWdlCi1jbGFzcyBCYWRIRUxPU2VydmVyVGVzdHMoVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEJhZEhFTE9TZXJ2ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYub2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgc2VsZi5vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm91dHB1dAogCisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDE1KQogICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKICAgICAgICAgc2VydmFyZ3MgPSAoc2VsZi5ldnQsICIxOTkgbm8gaGVsbG8gZm9yIHlvdSFcbiIsIHNlbGYuc29jaykKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPXNlcnZhcmdzKS5zdGFydCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPXNlcnZhcmdzKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQogICAgICAgICBzZWxmLmV2dC5jbGVhcigpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vbGRfc3Rkb3V0CiAKICAgICBkZWYgdGVzdEZhaWxpbmdIRUxPKHNlbGYpOgpAQCAtMzQ3LDYgKzM2Niw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBObyBhY2Nlc3MgZm9yIHlvdSEnKQogCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKwogCiBjbGFzcyBTaW1TTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgogCkBAIC0zNjUsMTIgKzM4NywxNyBAQAogICAgIGRlZiBhZGRfZmVhdHVyZShzZWxmLCBmZWF0dXJlKToKICAgICAgICAgc2VsZi5fZXh0cmFfZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpCiAKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCiAKICMgVGVzdCB2YXJpb3VzIFNNVFAgJiBFU01UUCBjb21tYW5kcy9iZWhhdmlvcnMgdGhhdCByZXF1aXJlIGEgc2ltdWxhdGVkIHNlcnZlcgogIyAoaS5lLiwgc29tZXRoaW5nIHdpdGggbW9yZSBmZWF0dXJlcyB0aGFuIERlYnVnZ2luZ1NlcnZlcikKLWNsYXNzIFNNVFBTaW1UZXN0cyhUZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgU01UUFNpbVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCkBAIC0zNzgsNyArNDA1LDggQEAKICAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCiAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRlYnVnZ2luZ19zZXJ2ZXIsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKIAogICAgICAgICAjIHdhaXQgdW50aWwgc2VydmVyIHRocmVhZCBoYXMgYXNzaWduZWQgYSBwb3J0IG51bWJlcgogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQpAQCAtMzg5LDYgKzQxNyw4IEBACiAgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQogICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKICAgICAgICAgIyBzbW9rZSB0ZXN0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKaW5kZXggNWIyZTkxYS4uZjI1MzQzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQpAQCAtMTEsOSArMTEsOSBAQAogICAgIHJlbW90ZVBvcnQgPSA0NjUKIAogICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6Ci0gICAgICAgICNTaWxlbnRseSBza2lwIHRlc3QgaWYgbm8gU1NMOyBpbiAyLjcgd2UgdXNlIFNraXBUZXN0IGluc3RlYWQuCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNtdHBsaWIsICdTTVRQX1NTTCcpOiByZXR1cm4KLSAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0KQogICAgICAgICBzZXJ2ZXIuZWhsbygpCiAgICAgICAgIHNlcnZlci5xdWl0KCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQppbmRleCAzODc0YTBmLi5kNDFiY2E1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpAQCAtNiwxNSArNiwzOSBAQAogaW1wb3J0IGVycm5vCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0Ci1pbXBvcnQgdGhyZWFkLCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgUXVldWUKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IGFycmF5CitpbXBvcnQgY29udGV4dGxpYgogZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQogaW1wb3J0IHNpZ25hbAoraW1wb3J0IG1hdGgKKworZGVmIHRyeV9hZGRyZXNzKGhvc3QsIHBvcnQ9MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKToKKyAgICAiIiJUcnkgdG8gYmluZCBhIHNvY2tldCBvbiB0aGUgZ2l2ZW4gaG9zdDpwb3J0IGFuZCByZXR1cm4gVHJ1ZQorICAgIGlmIHRoYXQgaGFzIGJlZW4gcG9zc2libGUuIiIiCisgICAgdHJ5OgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29jay5iaW5kKChob3N0LCBwb3J0KSkKKyAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorTVNHID0gYidNaWNoYWVsIEdpbGZpeCB3YXMgaGVyZVxuJworU1VQUE9SVFNfSVBWNiA9IHNvY2tldC5oYXNfaXB2NiBhbmQgdHJ5X2FkZHJlc3MoJzo6MScsIGZhbWlseT1zb2NrZXQuQUZfSU5FVDYpCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkCisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZCA9IE5vbmUKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXG4nCkBAIC0xMjMsNyArMTQ3LDcgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXJfcmVhZHkud2FpdCgpCiAgICAgICAgIHNlbGYuY2xpZW50X3JlYWR5LnNldCgpCiAgICAgICAgIHNlbGYuY2xpZW50U2V0VXAoKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBpZiBub3QgY2FsbGFibGUodGVzdF9mdW5jKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRlc3RfZnVuYyBtdXN0IGJlIGEgY2FsbGFibGUgZnVuY3Rpb24uIikKICAgICAgICAgdHJ5OgpAQCAtMTYyLDYgKzE4NiwxMSBAQAogICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKIAorICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQorICAgICAgICBzZWxmLmNsaSA9IE5vbmUKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKKwogY2xhc3MgU29ja2V0Q29ubmVjdGVkVGVzdChUaHJlYWRlZFRDUFNvY2tldFRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKQEAgLTIzOCwxMSArMjY3LDExIEBACiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCiAgICAgICAgIGRlZiByYWlzZV9nYWllcnJvcigqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmdhaWVycm9yCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2Vycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJhaXNpbmcgc29ja2V0IGV4Y2VwdGlvbi4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9oZXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcmFpc2VfaGVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJhaXNpbmcgc29ja2V0IGV4Y2VwdGlvbi4iKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9nYWllcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9nYWllcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByYWlzaW5nIHNvY2tldCBleGNlcHRpb24uIikKIAogICAgIGRlZiB0ZXN0Q3J1Y2lhbENvbnN0YW50cyhzZWxmKToKQEAgLTI2NCw3ICsyOTMsNyBAQAogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhpcC5maW5kKCcuJykgPj0gMCwgIkVycm9yIHJlc29sdmluZyBob3N0IHRvIGlwLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcC5maW5kKCcuJykgPj0gMCwgIkVycm9yIHJlc29sdmluZyBob3N0IHRvIGlwLiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhuYW1lLCBhbGlhc2VzLCBpcGFkZHJzID0gc29ja2V0LmdldGhvc3RieWFkZHIoaXApCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CkBAIC0zMjcsOCArMzU2LDEwIEBACiAgICAgICAgICMgRmluZCBvbmUgc2VydmljZSB0aGF0IGV4aXN0cywgdGhlbiBjaGVjayBhbGwgdGhlIHJlbGF0ZWQgaW50ZXJmYWNlcy4KICAgICAgICAgIyBJJ3ZlIG9yZGVyZWQgdGhpcyBieSBwcm90b2NvbHMgdGhhdCBoYXZlIGJvdGggYSB0Y3AgYW5kIHVkcAogICAgICAgICAjIHByb3RvY29sLCBhdCBsZWFzdCBmb3IgbW9kZXJuIExpbnV4ZXMuCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2xpbnV4MicsICdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWVic2Q3JywgJ2ZyZWVic2Q4JywgJ2RhcndpbicpOgorICAgICAgICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xpbnV4Jykgb3IKKyAgICAgICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdmcmVlYnNkJykgb3IKKyAgICAgICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCduZXRic2QnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nKToKICAgICAgICAgICAgICMgYXZvaWQgdGhlICdlY2hvJyBzZXJ2aWNlIG9uIHRoaXMgcGxhdGZvcm0sIGFzIHRoZXJlIGlzIGFuCiAgICAgICAgICAgICAjIGFzc3VtcHRpb24gYnJlYWtpbmcgbm9uLXN0YW5kYXJkIHBvcnQvcHJvdG9jb2wgZW50cnkKICAgICAgICAgICAgIHNlcnZpY2VzID0gKCdkYXl0aW1lJywgJ3FvdGQnLCAnZG9tYWluJykKQEAgLTM1Nyw2ICszODgsOSBAQAogICAgICAgICBlcShzb2NrZXQuZ2V0c2VydmJ5cG9ydChwb3J0LCAndGNwJyksIHNlcnZpY2UpCiAgICAgICAgIGlmIHVkcHBvcnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBlcShzb2NrZXQuZ2V0c2VydmJ5cG9ydCh1ZHBwb3J0LCAndWRwJyksIHNlcnZpY2UpCisgICAgICAgICMgTWFrZSBzdXJlIGdldHNlcnZieXBvcnQgZG9lcyBub3QgYWNjZXB0IG91dCBvZiByYW5nZSBwb3J0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldHNlcnZieXBvcnQsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuZ2V0c2VydmJ5cG9ydCwgNjU1MzYpCiAKICAgICBkZWYgdGVzdERlZmF1bHRUaW1lb3V0KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgZGVmYXVsdCB0aW1lb3V0CkBAIC0zOTEsOCArNDI1LDggQEAKICAgICAgICAgICAgIHJldHVybiAgIyBObyBpbmV0X2F0b24sIG5vdGhpbmcgdG8gY2hlY2sKICAgICAgICAgIyBUZXN0IHRoYXQgaXNzdWUxMDA4MDg2IGFuZCBpc3N1ZTc2NzE1MCBhcmUgZml4ZWQuCiAgICAgICAgICMgSXQgbXVzdCByZXR1cm4gNCBieXRlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4MDAnKjQsIHNvY2tldC5pbmV0X2F0b24oJzAuMC4wLjAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4ZmYnKjQsIHNvY2tldC5pbmV0X2F0b24oJzI1NS4yNTUuMjU1LjI1NScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyo0LCBzb2NrZXQuaW5ldF9hdG9uKCcwLjAuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmYnKjQsIHNvY2tldC5pbmV0X2F0b24oJzI1NS4yNTUuMjU1LjI1NScpKQogCiAgICAgZGVmIHRlc3RJUHY0dG9TdHJpbmcoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfcHRvbicpOgpAQCAtNDAwLDE2ICs0MzQsMTYgQEAKICAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfYXRvbiBhcyBmLCBpbmV0X3B0b24sIEFGX0lORVQKICAgICAgICAgZyA9IGxhbWJkYSBhOiBpbmV0X3B0b24oQUZfSU5FVCwgYSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHgwMFx4MDBceDAwXHgwMCcsIGYoJzAuMC4wLjAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4ZmZceDAwXHhmZlx4MDAnLCBmKCcyNTUuMC4yNTUuMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHhhYVx4YWFceGFhXHhhYScsIGYoJzE3MC4xNzAuMTcwLjE3MCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHgwMVx4MDJceDAzXHgwNCcsIGYoJzEuMi4zLjQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBmKCcyNTUuMjU1LjI1NS4yNTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4MDBceDAwXHgwMCcsIGYoJzAuMC4wLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4MDBceGZmXHgwMCcsIGYoJzI1NS4wLjI1NS4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YWFceGFhXHhhYVx4YWEnLCBmKCcxNzAuMTcwLjE3MC4xNzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMVx4MDJceDAzXHgwNCcsIGYoJzEuMi4zLjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4ZmZceGZmXHhmZicsIGYoJzI1NS4yNTUuMjU1LjI1NScpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceDAwXHgwMFx4MDBceDAwJywgZygnMC4wLjAuMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnXHhmZlx4MDBceGZmXHgwMCcsIGcoJzI1NS4wLjI1NS4wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceGFhXHhhYVx4YWFceGFhJywgZygnMTcwLjE3MC4xNzAuMTcwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceGZmXHhmZlx4ZmZceGZmJywgZygnMjU1LjI1NS4yNTUuMjU1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceDAwXHgwMFx4MDAnLCBnKCcwLjAuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceDAwXHhmZlx4MDAnLCBnKCcyNTUuMC4yNTUuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGFhXHhhYVx4YWFceGFhJywgZygnMTcwLjE3MC4xNzAuMTcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBnKCcyNTUuMjU1LjI1NS4yNTUnKSkKIAogICAgIGRlZiB0ZXN0SVB2NnRvU3RyaW5nKHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdpbmV0X3B0b24nKToKQEAgLTQyMiwxMCArNDU2LDEwIEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGxhbWJkYSBhOiBpbmV0X3B0b24oQUZfSU5FVDYsIGEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1x4MDAnICogMTYsIGYoJzo6JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceDAwJyAqIDE2LCBmKCcwOjowJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdceDAwXHgwMScgKyAnXHgwMCcgKiAxNCwgZignMTo6JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyAqIDE2LCBmKCc6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyAqIDE2LCBmKCcwOjowJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceDAxJyArICdceDAwJyAqIDE0LCBmKCcxOjonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICdceDQ1XHhlZlx4NzZceGNiXHgwMFx4MWFceDU2XHhlZlx4YWZceGViXHgwYlx4YWNceDE5XHgyNFx4YWVceGFlJywKICAgICAgICAgICAgIGYoJzQ1ZWY6NzZjYjoxYTo1NmVmOmFmZWI6YmFjOjE5MjQ6YWVhZScpCiAgICAgICAgICkKQEAgLTQzNiwxNCArNDcwLDE0IEBACiAgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X250b2EgYXMgZiwgaW5ldF9udG9wLCBBRl9JTkVUCiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQsIGEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzEuMC4xLjAnLCBmKCdceDAxXHgwMFx4MDFceDAwJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxNzAuODUuMTcwLjg1JywgZignXHhhYVx4NTVceGFhXHg1NScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnMjU1LjI1NS4yNTUuMjU1JywgZignXHhmZlx4ZmZceGZmXHhmZicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnMS4yLjMuNCcsIGYoJ1x4MDFceDAyXHgwM1x4MDQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjEuMCcsIGYoJ1x4MDFceDAwXHgwMVx4MDAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTcwLjg1LjE3MC44NScsIGYoJ1x4YWFceDU1XHhhYVx4NTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMjU1LjI1NS4yNTUuMjU1JywgZignXHhmZlx4ZmZceGZmXHhmZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjIuMy40JywgZignXHgwMVx4MDJceDAzXHgwNCcpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCcxLjAuMS4wJywgZygnXHgwMVx4MDBceDAxXHgwMCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnMTcwLjg1LjE3MC44NScsIGcoJ1x4YWFceDU1XHhhYVx4NTUnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzI1NS4yNTUuMjU1LjI1NScsIGcoJ1x4ZmZceGZmXHhmZlx4ZmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjEuMCcsIGcoJ1x4MDFceDAwXHgwMVx4MDAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTcwLjg1LjE3MC44NScsIGcoJ1x4YWFceDU1XHhhYVx4NTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMjU1LjI1NS4yNTUuMjU1JywgZygnXHhmZlx4ZmZceGZmXHhmZicpKQogCiAgICAgZGVmIHRlc3RTdHJpbmdUb0lQdjYoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfbnRvcCcpOgpAQCAtNDU2LDQ3ICs0OTAsNjIgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVUNiwgYSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnOjonLCBmKCdceDAwJyAqIDE2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJzo6MScsIGYoJ1x4MDAnICogMTUgKyAnXHgwMScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnOjonLCBmKCdceDAwJyAqIDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnOjoxJywgZignXHgwMCcgKiAxNSArICdceDAxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAnYWVmOmIwMTo1MDY6MTAwMTpmZmZmOjk5OTc6NTU6MTcwJywKICAgICAgICAgICAgIGYoJ1x4MGFceGVmXHgwYlx4MDFceDA1XHgwNlx4MTBceDAxXHhmZlx4ZmZceDk5XHg5N1x4MDBceDU1XHgwMVx4NzAnKQogICAgICAgICApCiAKICAgICAjIFhYWCBUaGUgZm9sbG93aW5nIGRvbid0IHRlc3QgbW9kdWxlLWxldmVsIGZ1bmN0aW9uYWxpdHkuLi4KIAotICAgIGRlZiB0ZXN0U29ja05hbWUoc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBnZXRzb2NrbmFtZSgpLiAgVXNlIGEgdGVtcG9yYXJ5IHNvY2tldCB0byBlbGljaXQgYW4gdW51c2VkCi0gICAgICAgICMgZXBoZW1lcmFsIHBvcnQgdGhhdCB3ZSBjYW4gdXNlIGxhdGVyIGluIHRoZSB0ZXN0LgotICAgICAgICB0ZW1wc29jayA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICB0ZW1wc29jay5iaW5kKCgiMC4wLjAuMCIsIDApKQotICAgICAgICAoaG9zdCwgcG9ydCkgPSB0ZW1wc29jay5nZXRzb2NrbmFtZSgpCi0gICAgICAgIHRlbXBzb2NrLmNsb3NlKCkKLSAgICAgICAgZGVsIHRlbXBzb2NrCisgICAgZGVmIF9nZXRfdW51c2VkX3BvcnQoc2VsZiwgYmluZF9hZGRyZXNzPScwLjAuMC4wJyk6CisgICAgICAgICIiIlVzZSBhIHRlbXBvcmFyeSBzb2NrZXQgdG8gZWxpY2l0IGFuIHVudXNlZCBlcGhlbWVyYWwgcG9ydC4KIAorICAgICAgICBBcmdzOgorICAgICAgICAgICAgYmluZF9hZGRyZXNzOiBIb3N0bmFtZSBvciBJUCBhZGRyZXNzIHRvIHNlYXJjaCBmb3IgYSBwb3J0IG9uLgorCisgICAgICAgIFJldHVybnM6IEEgbW9zdCBsaWtlbHkgdG8gYmUgdW51c2VkIHBvcnQuCisgICAgICAgICIiIgorICAgICAgICB0ZW1wc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0ZW1wc29jay5iaW5kKChiaW5kX2FkZHJlc3MsIDApKQorICAgICAgICBob3N0LCBwb3J0ID0gdGVtcHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICB0ZW1wc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiBwb3J0CisKKyAgICBkZWYgdGVzdFNvY2tOYW1lKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZ2V0c29ja25hbWUoKQorICAgICAgICBwb3J0ID0gc2VsZi5fZ2V0X3VudXNlZF9wb3J0KCkKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHNvY2suYmluZCgoIjAuMC4wLjAiLCBwb3J0KSkKICAgICAgICAgbmFtZSA9IHNvY2suZ2V0c29ja25hbWUoKQogICAgICAgICAjIFhYWChubm9yd2l0eik6IGh0dHA6Ly90aW55dXJsLmNvbS9vczVqeiBzZWVtcyB0byBpbmRpY2F0ZQogICAgICAgICAjIGl0IHJlYXNvbmFibGUgdG8gZ2V0IHRoZSBob3N0J3MgYWRkciBpbiBhZGRpdGlvbiB0byAwLjAuMC4wLgogICAgICAgICAjIEF0IGxlYXN0IGZvciBlQ29zLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIFMvMzkwIHRvIHBhc3MuCi0gICAgICAgIG15X2lwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5hbWVbMF0gaW4gKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG15X2lwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWVbMF0sICgiMC4wLjAuMCIsIG15X2lwX2FkZHIpLCAnJXMgaW52YWxpZCcgJSBuYW1lWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVbMV0sIHBvcnQpCiAKICAgICBkZWYgdGVzdEdldFNvY2tPcHQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBnZXRzb2Nrb3B0KCkKICAgICAgICAgIyBXZSBrbm93IGEgc29ja2V0IHNob3VsZCBzdGFydCB3aXRob3V0IHJldXNlPT0wCiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQogICAgICAgICByZXVzZSA9IHNvY2suZ2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikKLSAgICAgICAgc2VsZi5mYWlsSWYocmV1c2UgIT0gMCwgImluaXRpYWwgbW9kZSBpcyByZXVzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV1c2UgIT0gMCwgImluaXRpYWwgbW9kZSBpcyByZXVzZSIpCiAKICAgICBkZWYgdGVzdFNldFNvY2tPcHQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzZXRzb2Nrb3B0KCkKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKICAgICAgICAgcmV1c2UgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpCi0gICAgICAgIHNlbGYuZmFpbElmKHJldXNlID09IDAsICJmYWlsZWQgdG8gc2V0IHJldXNlIG1vZGUiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldXNlID09IDAsICJmYWlsZWQgdG8gc2V0IHJldXNlIG1vZGUiKQogCiAgICAgZGVmIHRlc3RTZW5kQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgIyB0ZXN0aW5nIHNlbmQoKSBhZnRlciBjbG9zZSgpIHdpdGggdGltZW91dApAQCAtNTEzLDE1ICs1NjIsMTA3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5wcm90bywgMCkKICAgICAgICAgc29jay5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9nZXRzb2NrYWRkcmFyZyhzZWxmKToKKyAgICAgICAgaG9zdCA9ICcwLjAuMC4wJworICAgICAgICBwb3J0ID0gc2VsZi5fZ2V0X3VudXNlZF9wb3J0KGJpbmRfYWRkcmVzcz1ob3N0KQorICAgICAgICBiaWdfcG9ydCA9IHBvcnQgKyA2NTUzNgorICAgICAgICBuZWdfcG9ydCA9IHBvcnQgLSA2NTUzNgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKGhvc3QsIGJpZ19wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKGhvc3QsIG5lZ19wb3J0KSkKKyAgICAgICAgICAgIHNvY2suYmluZCgoaG9zdCwgcG9ydCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgIldpbmRvd3Mgc3BlY2lmaWMiKQogICAgIGRlZiB0ZXN0X3NvY2tfaW9jdGwoc2VsZik6Ci0gICAgICAgIGlmIG9zLm5hbWUgIT0gIm50IjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzb2NrZXQuc29ja2V0LCAnaW9jdGwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoc29ja2V0LCAnU0lPX1JDVkFMTCcpKQotICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzb2NrZXQsICdSQ1ZBTExfT04nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoc29ja2V0LCAnUkNWQUxMX09GRicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQuc29ja2V0LCAnaW9jdGwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnU0lPX1JDVkFMTCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdSQ1ZBTExfT04nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnUkNWQUxMX09GRicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdTSU9fS0VFUEFMSVZFX1ZBTFMnKSkKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5pb2N0bCwgLTEsIE5vbmUpCisgICAgICAgIHMuaW9jdGwoc29ja2V0LlNJT19LRUVQQUxJVkVfVkFMUywgKDEsIDEwMCwgMTAwKSkKKworICAgIGRlZiB0ZXN0R2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbygnbG9jYWxob3N0JywgODApCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IHNvY2tldC5FQUlfU0VSVklDRToKKyAgICAgICAgICAgICAgICAjIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTI4MjY0NworICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJ1Z2d5IGxpYmMgdmVyc2lvbiIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICAjIGxlbiBvZiBldmVyeSBzZXF1ZW5jZSBpcyBzdXBwb3NlZCB0byBiZSA9PSA1CisgICAgICAgIGZvciBpbmZvIGluIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCA1KQorICAgICAgICAjIGhvc3QgY2FuIGJlIGEgZG9tYWluIG5hbWUsIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuCisgICAgICAgICMgSVB2NC92NiBhZGRyZXNzIG9yIE5vbmUKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCdsb2NhbGhvc3QnLCA4MCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCcxMjcuMC4wLjEnLCA4MCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKE5vbmUsIDgwKQorICAgICAgICBpZiBTVVBQT1JUU19JUFY2OgorICAgICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCc6OjEnLCA4MCkKKyAgICAgICAgIyBwb3J0IGNhbiBiZSBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAiaHR0cCIsIGEgbnVtZXJpYworICAgICAgICAjIHBvcnQgbnVtYmVyIG9yIE5vbmUKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsICJodHRwIikKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKKyAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycworICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICMgdGVzdCBwcm90byBhbmQgZmxhZ3MgYXJndW1lbnRzCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCAwLCAwLCBzb2NrZXQuU09MX1RDUCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIDAsIDAsIHNvY2tldC5BSV9QQVNTSVZFKQorICAgICAgICAjIGEgc2VydmVyIHdpbGxpbmcgdG8gc3VwcG9ydCBib3RoIElQdjQgYW5kIElQdjYgd2lsbAorICAgICAgICAjIHVzdWFsbHkgZG8gdGhpcworICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oTm9uZSwgMCwgc29ja2V0LkFGX1VOU1BFQywgc29ja2V0LlNPQ0tfU1RSRUFNLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LkFJX1BBU1NJVkUpCiAKIAorICAgIGRlZiBjaGVja19zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYsIHdpdGhfdGltZW91dCk6CisgICAgICAgICMgc29ja2V0cGFpcigpIGlzIG5vdCBzdHJpY2x5IHJlcXVpcmVkLCBidXQgaXQgbWFrZXMgdGhpbmdzIGVhc2llci4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKSBvciBub3QgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzaWduYWwuYWxhcm0gYW5kIHNvY2tldC5zb2NrZXRwYWlyIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgICAgICAjIE91ciBzaWduYWwgaGFuZGxlcnMgY2xvYmJlciB0aGUgQyBlcnJubyBieSBjYWxsaW5nIGEgbWF0aCBmdW5jdGlvbgorICAgICAgICAjIHdpdGggYW4gaW52YWxpZCBkb21haW4gdmFsdWUuCisgICAgICAgIGRlZiBva19oYW5kbGVyKCphcmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIDApCisgICAgICAgIGRlZiByYWlzaW5nX2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgMCkKKyAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBjLCBzID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBvbGRfYWxhcm0gPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCByYWlzaW5nX2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHdpdGhfdGltZW91dDoKKyAgICAgICAgICAgICAgICAjIEp1c3QgYWJvdmUgdGhlIG9uZSBzZWNvbmQgbWluaW11bSBmb3Igc2lnbmFsLmFsYXJtCisgICAgICAgICAgICAgICAgYy5zZXR0aW1lb3V0KDEuNSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIGMuc2VuZGFsbChiIngiICogKDEwMjQqKjIpKQorICAgICAgICAgICAgaWYgd2l0aF90aW1lb3V0OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9rX2hhbmRsZXIpCisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIGMuc2VuZGFsbCwgYiJ4IiAqICgxMDI0KioyKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZF9hbGFybSkKKyAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NlbmRhbGxfaW50ZXJydXB0ZWQoRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZW5kYWxsX2ludGVycnVwdGVkX3dpdGhfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zZW5kYWxsX2ludGVycnVwdGVkKFRydWUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljVENQVGVzdChTb2NrZXRDb25uZWN0ZWRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC01ODMsMTIgKzcyNCwyMyBAQAogICAgICAgICAgICAgcmV0dXJuICMgT24gV2luZG93cywgdGhpcyBkb2Vzbid0IGV4aXN0CiAgICAgICAgIGZkID0gc2VsZi5jbGlfY29ubi5maWxlbm8oKQogICAgICAgICBzb2NrID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIG1zZyA9IHNvY2sucmVjdigxMDI0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCiAgICAgZGVmIF90ZXN0RnJvbUZkKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKIAorICAgIGRlZiB0ZXN0RHVwKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZHVwKCkKKyAgICAgICAgc29jayA9IHNlbGYuY2xpX2Nvbm4uZHVwKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIG1zZyA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0RHVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKKwogICAgIGRlZiB0ZXN0U2h1dGRvd24oc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzaHV0ZG93bigpCiAgICAgICAgIG1zZyA9IHNlbGYuY2xpX2Nvbm4ucmVjdigxMDI0KQpAQCAtNjAyLDYgKzc1NCw3IEBACiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQogICAgICAgICBzZWxmLnNlcnZfY29ubi5zaHV0ZG93bigyKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNVRFBUZXN0KFRocmVhZGVkVURQU29ja2V0VGVzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgpAQCAtNjMwLDYgKzc4Myw3IEBACiAgICAgZGVmIF90ZXN0UmVjdkZyb21OZWdhdGl2ZShzZWxmKToKICAgICAgICAgc2VsZi5jbGkuc2VuZHRvKE1TRywgMCwgKEhPU1QsIHNlbGYucG9ydCkpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBUQ1BDbG9zZXJUZXN0KFRocmVhZGVkVENQU29ja2V0VGVzdCk6CiAKICAgICBkZWYgdGVzdENsb3NlKHNlbGYpOgpAQCAtNjQ1LDYgKzc5OSw3IEBACiAgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoKEhPU1QsIHNlbGYucG9ydCkpCiAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNTb2NrZXRQYWlyVGVzdChTb2NrZXRQYWlyVGVzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgpAQCAtNjY0LDYgKzgxOSw3IEBACiAgICAgICAgIG1zZyA9IHNlbGYuY2xpLnJlY3YoMTAyNCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIE5vbkJsb2NraW5nVENQVGVzdHMoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC02NzgsNyArODM0LDcgQEAKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBzZXR0aW5nIG5vbi1ibG9ja2luZyBtb2RlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kIC0gc3RhcnQpIDwgMS4wLCAiRXJyb3Igc2V0dGluZyBub24tYmxvY2tpbmcgbW9kZS4iKQogCiAgICAgZGVmIF90ZXN0U2V0QmxvY2tpbmcoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTY5NSw2ICs4NTEsNyBAQAogICAgICAgICByZWFkLCB3cml0ZSwgZXJyID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2XSwgW10sIFtdKQogICAgICAgICBpZiBzZWxmLnNlcnYgaW4gcmVhZDoKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gYWNjZXB0IGFmdGVyIHNlbGVjdC4iKQogCkBAIC03MDUsNiArODYyLDcgQEAKICAgICBkZWYgdGVzdENvbm5lY3Qoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBub24tYmxvY2tpbmcgY29ubmVjdAogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uY2xvc2UoKQogCiAgICAgZGVmIF90ZXN0Q29ubmVjdChzZWxmKToKICAgICAgICAgc2VsZi5jbGkuc2V0dGltZW91dCgxMCkKQEAgLTcyMyw2ICs4ODEsNyBAQAogICAgICAgICByZWFkLCB3cml0ZSwgZXJyID0gc2VsZWN0LnNlbGVjdChbY29ubl0sIFtdLCBbXSkKICAgICAgICAgaWYgY29ubiBpbiByZWFkOgogICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KGxlbihNU0cpKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciBkdXJpbmcgc2VsZWN0IGNhbGwgdG8gbm9uLWJsb2NraW5nIHNvY2tldC4iKQpAQCAtNzMyLDYgKzg5MSw3IEBACiAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICBzZWxmLmNsaS5zZW5kKE1TRykKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlKFNvY2tldENvbm5lY3RlZFRlc3QpOgogCiAgICAgYnVmc2l6ZSA9IC0xICMgVXNlIGRlZmF1bHQgYnVmZmVyIHNpemUKQEAgLTc0NSw3ICs5MDUsNyBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZfZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLnNlcnZfZmlsZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNlcnZfZmlsZS5jbG9zZWQpCiAgICAgICAgIHNlbGYuc2Vydl9maWxlID0gTm9uZQogICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0LnRlYXJEb3duKHNlbGYpCiAKQEAgLTc1NSw3ICs5MTUsNyBAQAogCiAgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmNsaV9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuY2xpX2ZpbGUuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfZmlsZS5jbG9zZWQpCiAgICAgICAgIHNlbGYuY2xpX2ZpbGUgPSBOb25lCiAgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKIApAQCAtODMwLDEwICs5OTAsMTAgQEAKICAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZSgiRW5kIE9mIExpbmUiKQogCiAgICAgZGVmIHRlc3RDbG9zZWRBdHRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuc2Vydl9maWxlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLnNlcnZfZmlsZS5jbG9zZWQpCiAKICAgICBkZWYgX3Rlc3RDbG9zZWRBdHRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHNlbGYuY2xpX2ZpbGUuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuY2xpX2ZpbGUuY2xvc2VkKQogCiAKIGNsYXNzIEZpbGVPYmplY3RJbnRlcnJ1cHRlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg2MCw4ICsxMDIwLDggQEAKICAgICAgICAgICAgICAgICBsYW1iZGEgOiAiIiwKICAgICAgICAgICAgIF0pCiAgICAgICAgIGZvID0gc29ja2V0Ll9maWxlb2JqZWN0KG1vY2tfc29jaywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZvLnJlYWRsaW5lKHNpemUpLCAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZm8ucmVhZGxpbmUoc2l6ZSksICJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiQW5kIHRoZSBzZWNvbmQgbGluZSBpcyBoZXJlXG4iKQogCiAgICAgZGVmIF90ZXN0X3JlYWQoc2VsZiwgc2l6ZT0tMSwgKiprd2FyZ3MpOgogICAgICAgICBtb2NrX3NvY2sgPSBzZWxmLk1vY2tTb2NrZXQocmVjdl9mdW5jcz1bCkBAIC04NzEsNyArMTAzMSw3IEBACiAgICAgICAgICAgICAgICAgbGFtYmRhIDogIiIsCiAgICAgICAgICAgICBdKQogICAgICAgICBmbyA9IHNvY2tldC5fZmlsZW9iamVjdChtb2NrX3NvY2ssICoqa3dhcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmby5yZWFkKHNpemUpLCAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgpAQCAtODk2LDggKzEwNTYsOCBAQAogICAgICAgICAgICAgICAgIGxhbWJkYSA6ICIiLAogICAgICAgICAgICAgXSkKICAgICAgICAgZm8gPSBzb2NrZXQuX2ZpbGVvYmplY3QobW9ja19zb2NrLCBidWZzaXplPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZvLnJlYWRsaW5lKHNpemUpLCAiYWFcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZvLnJlYWRsaW5lKHNpemUpLCAiQkJiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJhYVxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgIkJCYmIiKQogCiAgICAgZGVmIHRlc3Rfbm9fYnVmZmVyKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcigpCkBAIC05NTQsMTMgKzExMTQsNDUgQEAKICAgICAiIiIKIAogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25Ob1NlcnZlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RXaXRob3V0U2VydmVyKHNlbGYpOgotICAgICAgICBwb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoCi0gICAgICAgICAgICBzb2NrZXQuZXJyb3IsCi0gICAgICAgICAgICBsYW1iZGE6IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgcG9ydCkpCi0gICAgICAgICkKKyAgICBjbGFzcyBNb2NrU29ja2V0KHNvY2tldC5zb2NrZXQpOgorICAgICAgICBkZWYgY29ubmVjdChzZWxmLCAqYXJncyk6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQudGltZW91dCgndGltZWQgb3V0JykKIAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIG1vY2tlZF9zb2NrZXRfbW9kdWxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBzb2NrZXQgd2hpY2ggdGltZXMgb3V0IG9uIGNvbm5lY3QiIiIKKyAgICAgICAgb2xkX3NvY2tldCA9IHNvY2tldC5zb2NrZXQKKyAgICAgICAgc29ja2V0LnNvY2tldCA9IHNlbGYuTW9ja1NvY2tldAorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNvY2tldCA9IG9sZF9zb2NrZXQKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgIGNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsaS5jbG9zZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgY2xpLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3OTI6IGVycm9ycyByYWlzZWQgYnkgY3JlYXRlX2Nvbm5lY3Rpb24oKSBzaG91bGQgaGF2ZQorICAgICAgICAjIGEgcHJvcGVyIGVycm5vIGF0dHJpYnV0ZS4KKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3OTI6IGNyZWF0ZV9jb25uZWN0aW9uKCkgc2hvdWxkIG5vdCByZWNhc3QgdGltZW91dCBlcnJvcnMKKyAgICAgICAgIyBhcyBnZW5lcmljIHNvY2tldCBlcnJvcnMuCisgICAgICAgIHdpdGggc2VsZi5tb2NrZWRfc29ja2V0X21vZHVsZSgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCk6CisgICAgICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCAxMjM0KSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdChTb2NrZXRUQ1BUZXN0LCBUaHJlYWRhYmxlVGVzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgpAQCAtOTY4LDcgKzExNjAsNyBAQAogICAgICAgICBUaHJlYWRhYmxlVGVzdC5fX2luaXRfXyhzZWxmKQogCiAgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc291cmNlX3BvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCiAKICAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY2xpLmNsb3NlKCkKQEAgLTk3NywzMCArMTE2OSw0MyBAQAogCiAgICAgZGVmIF9qdXN0QWNjZXB0KHNlbGYpOgogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uY2xvc2UoKQogCiAgICAgdGVzdEZhbWlseSA9IF9qdXN0QWNjZXB0CiAgICAgZGVmIF90ZXN0RmFtaWx5KHNlbGYpOgogICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0zMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmZhbWlseSwgMikKIAorICAgIHRlc3RTb3VyY2VBZGRyZXNzID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RTb3VyY2VBZGRyZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0zMCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0c29ja25hbWUoKVsxXSwgc2VsZi5zb3VyY2VfcG9ydCkKKyAgICAgICAgIyBUaGUgcG9ydCBudW1iZXIgYmVpbmcgdXNlZCBpcyBzdWZmaWNpZW50IHRvIHNob3cgdGhhdCB0aGUgYmluZCgpCisgICAgICAgICMgY2FsbCBoYXBwZW5lZC4KKwogICAgIHRlc3RUaW1lb3V0RGVmYXVsdCA9IF9qdXN0QWNjZXB0CiAgICAgZGVmIF90ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CiAgICAgICAgICMgcGFzc2luZyBubyBleHBsaWNpdCB0aW1lb3V0IHVzZXMgc29ja2V0J3MgZ2xvYmFsIGRlZmF1bHQKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNDIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCA0MikKIAogICAgIHRlc3RUaW1lb3V0Tm9uZSA9IF9qdXN0QWNjZXB0CiAgICAgZGVmIF90ZXN0VGltZW91dE5vbmUoc2VsZik6CiAgICAgICAgICMgTm9uZSB0aW1lb3V0IG1lYW5zIHRoZSBzYW1lIGFzIHNvY2suc2V0dGltZW91dChOb25lKQotICAgICAgICBzZWxmLmFzc2VydF8oc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgTm9uZSkKQEAgLTEwMTMsOCArMTIxOCwxMCBAQAogICAgIHRlc3RUaW1lb3V0VmFsdWVOb25hbWVkID0gX2p1c3RBY2NlcHQKICAgICBkZWYgX3Rlc3RUaW1lb3V0VmFsdWVOb25hbWVkKHNlbGYpOgogICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgMzApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXR0aW1lb3V0KCksIDMwKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25CZWhhdmlvdXJUZXN0KFNvY2tldFRDUFRlc3QsIFRocmVhZGFibGVUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC0xMDMxLDYgKzEyMzgsNyBAQAogCiAgICAgZGVmIHRlc3RJbnNpZGVUaW1lb3V0KHNlbGYpOgogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjb25uLmNsb3NlKQogICAgICAgICB0aW1lLnNsZWVwKDMpCiAgICAgICAgIGNvbm4uc2VuZCgiZG9uZSEiKQogICAgIHRlc3RPdXRzaWRlVGltZW91dCA9IHRlc3RJbnNpZGVUaW1lb3V0CkBAIC0xMDQyLDMxICsxMjUwLDcgQEAKIAogICAgIGRlZiBfdGVzdE91dHNpZGVUaW1lb3V0KHNlbGYpOgogICAgICAgICBzZWxmLmNsaSA9IHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9MSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC50aW1lb3V0LCBsYW1iZGE6IHNvY2sucmVjdig1KSkKLQotY2xhc3MgVGVzdElzc3VlOTU0MyhTb2NrZXRUQ1BUZXN0LCBOZXR3b3JrQ29ubmVjdGlvblRlc3QpOgotICAgICIiIgotICAgIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhlIGNvZGUgaW4gdGhlIF9maWxlb2JqZWN0LmZsdXNoKCkgbWV0aG9kIHdoZW4gdGhlCi0gICAgd2hvbGUgd3JpdGUgYnVmZmVyIGhhc24ndCBiZWVuIGZsdXNoZWQuCi0gICAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NTQzCi0gICAgIiIiCi0gICAgIyBYWFg6IHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaywgcHJvcGVyIHRlc3RzIGZvciBmbHVzaCgpIHNob3VsZCBzdGlsbAotICAgICMgICAgICBiZSBhZGRlZAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgU29ja2V0VENQVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBOZXR3b3JrQ29ubmVjdGlvblRlc3QuY2xpZW50U2V0VXAoc2VsZikKLQotICAgIGRlZiB0ZXN0X2lzc3VlOTU0MyhzZWxmKToKLSAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQotICAgICAgICBmaWxlX2EgPSBzZWxmLnNlcnYubWFrZWZpbGUoJ3cnKQotICAgICAgICBmaWxlX2Eud3JpdGUoJ3gnKQotICAgICAgICAjIGZsdXNoKCkgd2lsbCB0cnkgdG8gc2VuZCBkYXRhIHRvIHNlbGYuY2xpIGFuZCByYWlzZSBhbiBlcnJvciBiZWNhdXNlCi0gICAgICAgICMgaXQncyBjbG9zZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBmaWxlX2EuZmx1c2gpCi0gICAgICAgICMgY2xvc2UoKSB3aWxsIHJhaXNlIGFuIGVycm9yIHRvbywgYmVjYXVzZSBpdCBjYWxscyBmbHVzaCgpIGJlZm9yZQotICAgICAgICAjIGNsb3NpbmcgdGhlIGZpbGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBmaWxlX2EuY2xvc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX2EuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgbGFtYmRhOiBzb2NrLnJlY3YoNSkpCiAKIAogY2xhc3MgVXJsbGliMkZpbGVvYmplY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEwODYsMTIgKzEyNzAsMTIgQEAKICAgICAgICAgcyA9IE1vY2tTb2NrZXQoKQogICAgICAgICBmID0gc29ja2V0Ll9maWxlb2JqZWN0KHMpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IHMuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHMuY2xvc2VkKQogCiAgICAgICAgIHMgPSBNb2NrU29ja2V0KCkKICAgICAgICAgZiA9IHNvY2tldC5fZmlsZW9iamVjdChzLCBjbG9zZT1UcnVlKQogICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHMuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5jbG9zZWQpCiAKIGNsYXNzIFRDUFRpbWVvdXRUZXN0KFNvY2tldFRDUFRlc3QpOgogCkBAIC0xMDk5LDcgKzEyODMsNyBAQAogICAgICAgICBkZWYgcmFpc2VfdGltZW91dCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMS4wKQogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQudGltZW91dCwgcmFpc2VfdGltZW91dCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHJhaXNlX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZ2VuZXJhdGluZyBhIHRpbWVvdXQgZXhjZXB0aW9uIChUQ1ApIikKIAogICAgIGRlZiB0ZXN0VGltZW91dFplcm8oc2VsZik6CkBAIC0xMTU2LDcgKzEzNDAsNyBAQAogICAgICAgICBkZWYgcmFpc2VfdGltZW91dCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMS4wKQogICAgICAgICAgICAgc2VsZi5zZXJ2LnJlY3YoMTAyNCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC50aW1lb3V0LCByYWlzZV90aW1lb3V0LAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgcmFpc2VfdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEgdGltZW91dCBleGNlcHRpb24gKFVEUCkiKQogCiAgICAgZGVmIHRlc3RUaW1lb3V0WmVybyhzZWxmKToKQEAgLTExNzYsMTAgKzEzNjAsMTAgQEAKIGNsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgc29ja2V0LmVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIHNvY2tldC5lcnJvcikpCiAKIGNsYXNzIFRlc3RMaW51eEFic3RyYWN0TmFtZXNwYWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTIwOCw2ICsxMzkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzLmJpbmQsIGFkZHJlc3MpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJ1ZmZlcklPVGVzdChTb2NrZXRDb25uZWN0ZWRUZXN0KToKICAgICAiIiIKICAgICBUZXN0IHRoZSBidWZmZXIgdmVyc2lvbnMgb2Ygc29ja2V0LnJlY3YoKSBhbmQgc29ja2V0LnNlbmQoKS4KQEAgLTEyMTUsMzAgKzE0MDAsNjYgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgogICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIAotICAgIGRlZiB0ZXN0UmVjdkludG8oc2VsZik6CisgICAgZGVmIHRlc3RSZWN2SW50b0FycmF5KHNlbGYpOgogICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnYycsICcgJyoxMDI0KQogICAgICAgICBuYnl0ZXMgPSBzZWxmLmNsaV9jb25uLnJlY3ZfaW50byhidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKICAgICAgICAgbXNnID0gYnVmLnRvc3RyaW5nKClbOmxlbihNU0cpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCi0gICAgZGVmIF90ZXN0UmVjdkludG8oc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgZGVmIF90ZXN0UmVjdkludG9BcnJheShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgYnVmID0gYnVmZmVyKE1TRykKICAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChidWYpCiAKLSAgICBkZWYgdGVzdFJlY3ZGcm9tSW50byhzZWxmKToKKyAgICBkZWYgdGVzdFJlY3ZJbnRvQnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzID0gc2VsZi5jbGlfY29ubi5yZWN2X2ludG8oYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZJbnRvQnl0ZWFycmF5ID0gX3Rlc3RSZWN2SW50b0FycmF5CisKKyAgICBkZWYgdGVzdFJlY3ZJbnRvTWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcyA9IHNlbGYuY2xpX2Nvbm4ucmVjdl9pbnRvKG1lbW9yeXZpZXcoYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgX3Rlc3RSZWN2SW50b01lbW9yeXZpZXcgPSBfdGVzdFJlY3ZJbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvQXJyYXkoc2VsZik6CiAgICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMjQpCiAgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKICAgICAgICAgbXNnID0gYnVmLnRvc3RyaW5nKClbOmxlbihNU0cpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCi0gICAgZGVmIF90ZXN0UmVjdkZyb21JbnRvKHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgIGRlZiBfdGVzdFJlY3ZGcm9tSW50b0FycmF5KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBidWYgPSBidWZmZXIoTVNHKQogICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKGJ1ZikKIAorICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvQnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbV9pbnRvKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgX3Rlc3RSZWN2RnJvbUludG9CeXRlYXJyYXkgPSBfdGVzdFJlY3ZGcm9tSW50b0FycmF5CisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tSW50b01lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMsIGFkZHIgPSBzZWxmLmNsaV9jb25uLnJlY3Zmcm9tX2ludG8obWVtb3J5dmlldyhidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZGcm9tSW50b01lbW9yeXZpZXcgPSBfdGVzdFJlY3ZGcm9tSW50b0FycmF5CisKIAogVElQQ19TVFlQRSA9IDIwMDAKIFRJUENfTE9XRVIgPSAyMDAKQEAgLTEzMjAsOSArMTU0MSw4IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtHZW5lcmFsTW9kdWxlVGVzdHMsIEJhc2ljVENQVGVzdCwgVENQQ2xvc2VyVGVzdCwgVENQVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbnMsIEJ1ZmZlcklPVGVzdCwgQmFzaWNUQ1BUZXN0Ml0KLSAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ21hYyc6Ci0gICAgICAgIHRlc3RzLmV4dGVuZChbIEJhc2ljVURQVGVzdCwgVURQVGltZW91dFRlc3QgXSkKKyAgICAgICAgICAgICBUZXN0RXhjZXB0aW9ucywgQnVmZmVySU9UZXN0LCBCYXNpY1RDUFRlc3QyLCBCYXNpY1VEUFRlc3QsCisgICAgICAgICAgICAgVURQVGltZW91dFRlc3QgXQogCiAgICAgdGVzdHMuZXh0ZW5kKFsKICAgICAgICAgTm9uQmxvY2tpbmdUQ1BUZXN0cywKQEAgLTEzMzUsNyArMTU1NSw2IEBACiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uTm9TZXJ2ZXIsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKLSAgICAgICAgVGVzdElzc3VlOTU0MywKICAgICBdKQogICAgIGlmIGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpOgogICAgICAgICB0ZXN0cy5hcHBlbmQoQmFzaWNTb2NrZXRQYWlyVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggMjdlMWQzZi4uNDgyNWE0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKQEAgLTMsMjEgKzMsMjEgQEAKICIiIgogCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGVycm5vCiBpbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzb2NrZXQKIGltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IFNvY2tldFNlcnZlcgogCiBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlYXBfY2hpbGRyZW4sIHZlcmJvc2UsIFRlc3RTa2lwcGVkCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4gYXMgVEVTVF9GSUxFCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZWFwX2NoaWxkcmVuLCByZWFwX3RocmVhZHMsIHZlcmJvc2UKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiB0ZXN0LnRlc3Rfc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAKQEAgLTU3LDEwICs1NywxMSBAQAogICAgICAgICBvcy5fZXhpdCg3MikKICAgICB5aWVsZCBOb25lCiAgICAgcGlkMiwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCi0gICAgdGVzdGNhc2UuYXNzZXJ0RXF1YWxzKHBpZDIsIHBpZCkKLSAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbHMoNzIgPDwgOCwgc3RhdHVzKQorICAgIHRlc3RjYXNlLmFzc2VydEVxdWFsKHBpZDIsIHBpZCkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbCg3MiA8PCA4LCBzdGF0dXMpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFNvY2tldFNlcnZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgYWxsIHNvY2tldCBzZXJ2ZXJzLiIiIgogCkBAIC0xMTksOSArMTIwLDExIEBACiAKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgImNyZWF0aW5nIHNlcnZlciIKICAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoYWRkciwgTXlIYW5kbGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKICAgICAgICAgcmV0dXJuIHNlcnZlcgogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAcmVhcF90aHJlYWRzCiAgICAgZGVmIHJ1bl9zZXJ2ZXIoc2VsZiwgc3ZyY2xzLCBoZGxyYmFzZSwgdGVzdGZ1bmMpOgogICAgICAgICBzZXJ2ZXIgPSBzZWxmLm1ha2Vfc2VydmVyKHNlbGYucGlja2FkZHIoc3ZyY2xzLmFkZHJlc3NfZmFtaWx5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnJjbHMsIGhkbHJiYXNlKQpAQCAtMTU4LDcgKzE2MSw3IEBACiAgICAgICAgIHdoaWxlIGRhdGEgYW5kICdcbicgbm90IGluIGJ1ZjoKICAgICAgICAgICAgIGRhdGEgPSByZWNlaXZlKHMsIDEwMCkKICAgICAgICAgICAgIGJ1ZiArPSBkYXRhCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGJ1ZiwgVEVTVF9TVFIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBURVNUX1NUUikKICAgICAgICAgcy5jbG9zZSgpCiAKICAgICBkZWYgZGdyYW1fZXhhbWluZShzZWxmLCBwcm90bywgYWRkcik6CkBAIC0xNjgsNyArMTcxLDcgQEAKICAgICAgICAgd2hpbGUgZGF0YSBhbmQgJ1xuJyBub3QgaW4gYnVmOgogICAgICAgICAgICAgZGF0YSA9IHJlY2VpdmUocywgMTAwKQogICAgICAgICAgICAgYnVmICs9IGRhdGEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYnVmLCBURVNUX1NUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIFRFU1RfU1RSKQogICAgICAgICBzLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X1RDUFNlcnZlcihzZWxmKToKQEAgLTI0Myw2ICsyNDYsNyBAQAogICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAogICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKIAorICAgIEByZWFwX3RocmVhZHMKICAgICBkZWYgdGVzdF9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMjMwMjogc2h1dGRvd24oKSBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaW4gbWFraW5nIGFuCiAgICAgICAgICMgb3RoZXIgdGhyZWFkIGxlYXZlIHNlcnZlX2ZvcmV2ZXIoKS4KQEAgLTI3MSw3ICsyNzUsNyBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIGlmIGltcC5sb2NrX2hlbGQoKToKICAgICAgICAgIyBJZiB0aGUgaW1wb3J0IGxvY2sgaXMgaGVsZCwgdGhlIHRocmVhZHMgd2lsbCBoYW5nCi0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJjYW4ndCBydW4gd2hlbiBpbXBvcnQgbG9jayBpcyBoZWxkIikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbid0IHJ1biB3aGVuIGltcG9ydCBsb2NrIGlzIGhlbGQiKQogCiAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNvY2tldFNlcnZlclRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ydC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ydC5weQppbmRleCBkZTE3NWM1Li5kNzVhYmM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb3J0LnB5CkBAIC0yNzQsNyArMjc0LDcgQEAKICAgICAgICAgVGVzdEJ1Z3MsCiAgICAgKQogCi0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICgidGhlIGNtcCBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zcWxpdGUucHkgYi9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQppbmRleCBkNjNiYjFkLi5kYjI3MzMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQpAQCAtMSw5ICsxLDggQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQogCi10cnk6Ci0gICAgaW1wb3J0IF9zcWxpdGUzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoJ25vIHNxbGl0ZSBhdmFpbGFibGUnKQorIyBTa2lwIHRlc3QgaWYgX3NxbGl0ZTMgbW9kdWxlIHdhcyBub3QgYnVpbHQuCitpbXBvcnRfbW9kdWxlKCdfc3FsaXRlMycpCisKIGZyb20gc3FsaXRlMy50ZXN0IGltcG9ydCAoZGJhcGksIHR5cGVzLCB1c2VyZnVuY3Rpb25zLCBweTI1dGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnksIHRyYW5zYWN0aW9ucywgaG9va3MsIHJlZ3Jlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NzbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CmluZGV4IGMxZTUzZWMuLjI1NjcyMTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CkBAIC02LDE3ICs2LDE2IEBACiBpbXBvcnQgYXN5bmNvcmUKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKLWltcG9ydCBlcnJubwotaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgZ2MKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgdXJsbGliLCB1cmxwYXJzZQotaW1wb3J0IHNodXRpbAogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBwbGF0Zm9ybQogCiBmcm9tIEJhc2VIVFRQU2VydmVyIGltcG9ydCBIVFRQU2VydmVyCiBmcm9tIFNpbXBsZUhUVFBTZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgpAQCAtNTcsNiArNTYsMzIgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKIAorIyBJc3N1ZSAjOTQxNTogVWJ1bnR1IGhpamFja3MgdGhlaXIgT3BlblNTTCBhbmQgZm9yY2VmdWxseSBkaXNhYmxlcyBTU0x2MgorZGVmIHNraXBfaWZfYnJva2VuX3VidW50dV9zc2woZnVuYyk6CisgICAgIyBXZSBuZWVkIHRvIGFjY2VzcyB0aGUgbG93ZXItbGV2ZWwgd3JhcHBlciBpbiBvcmRlciB0byBjcmVhdGUgYW4KKyAgICAjIGltcGxpY2l0IFNTTCBjb250ZXh0IHdpdGhvdXQgdHJ5aW5nIHRvIGNvbm5lY3Qgb3IgbGlzdGVuLgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IF9zc2wKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICMgVGhlIHJldHVybmVkIGZ1bmN0aW9uIHdvbid0IGdldCBleGVjdXRlZCwganVzdCBpZ25vcmUgdGhlIGVycm9yCisgICAgICAgIHBhc3MKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBfc3NsLnNzbHdyYXAocy5fc29jaywgMCwgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuQ0VSVF9OT05FLCBzc2wuUFJPVE9DT0xfU1NMdjIsIE5vbmUsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIChzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPT0gKDAsIDksIDgsIDE1LCAxNSkgYW5kCisgICAgICAgICAgICAgICAgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgPT0gKCdkZWJpYW4nLCAnc3F1ZWV6ZS9zaWQnLCAnJykKKyAgICAgICAgICAgICAgICBhbmQgJ0ludmFsaWQgU1NMIHByb3RvY29sIHZhcmlhbnQgc3BlY2lmaWVkJyBpbiBzdHIoZSkpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJQYXRjaGVkIFVidW50dSBPcGVuU1NMIGJyZWFrcyBiZWhhdmlvdXIiKQorICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBCYXNpY1NvY2tldFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyCiAgICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMKQEAgLTEwMCw2ICsxMjUsNTIgQEAKICAgICAgICAgaWYgbm90IHAyLmVuZHN3aXRoKCdcbicgKyBzc2wuUEVNX0ZPT1RFUiArICdcbicpOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJERVItdG8tUEVNIGRpZG4ndCBpbmNsdWRlIGNvcnJlY3QgZm9vdGVyOlxuJXJcbiIgJSBwMikKIAorICAgIGRlZiB0ZXN0X29wZW5zc2xfdmVyc2lvbihzZWxmKToKKyAgICAgICAgbiA9IHNzbC5PUEVOU1NMX1ZFUlNJT05fTlVNQkVSCisgICAgICAgIHQgPSBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8KKyAgICAgICAgcyA9IHNzbC5PUEVOU1NMX1ZFUlNJT04KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG4sIChpbnQsIGxvbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodCwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzdHIpCisgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzIGZvbGxvdworICAgICAgICAjID49IDAuOQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuLCAweDkwMDAwMCkKKyAgICAgICAgIyA8IDIuMAorICAgICAgICBzZWxmLmFzc2VydExlc3MobiwgMHgyMDAwMDAwMCkKKyAgICAgICAgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXMgPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1ham9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1pbm9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWlub3IsIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZml4LCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZml4LCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhdGNoLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwYXRjaCwgMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RhdHVzLCAxNSkKKyAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSBPcGVuU1NMLCB0aGUgZm9ybWF0IG1pZ2h0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJPcGVuU1NMIHs6ZH0uezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yLCBmaXgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKworICAgIGRlZiB0ZXN0X2NpcGhlcnMoc2VsZik6CisgICAgICAgIGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJlbW90ZSA9ICgic3ZuLnB5dGhvbi5vcmciLCA0NDMpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZW1vdGVbMF0pOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsIGNpcGhlcnM9IkFMTCIpCisgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsIGNpcGhlcnM9IkRFRkFVTFQiKQorICAgICAgICAgICAgcy5jb25uZWN0KHJlbW90ZSkKKyAgICAgICAgICAgICMgRXJyb3IgY2hlY2tpbmcgb2NjdXJzIHdoZW4gY29ubmVjdGluZywgYmVjYXVzZSB0aGUgU1NMIGNvbnRleHQKKyAgICAgICAgICAgICMgaXNuJ3QgY3JlYXRlZCBiZWZvcmUuCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iXiQ6LDs/Kidkb3JvdGh5eCIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNzbC5TU0xFcnJvciwgIk5vIGNpcGhlciBjYW4gYmUgc2VsZWN0ZWQiKToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzk0MzogYW4gU1NMIG9iamVjdCBkb2Vzbid0IGNyZWF0ZSByZWZlcmVuY2UgY3ljbGVzIHdpdGgKICAgICAgICAgIyBpdHNlbGYuCkBAIC0xMDksMTIwICsxODAsMTczIEBACiAgICAgICAgIGRlbCBzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyKCksIE5vbmUpCiAKKyAgICBkZWYgdGVzdF93cmFwcGVkX3VuY29ubmVjdGVkKHNlbGYpOgorICAgICAgICAjIFRoZSBfZGVsZWdhdGVfbWV0aG9kcyBpbiBzb2NrZXQucHkgYXJlIGNvcnJlY3RseSBkZWxlZ2F0ZWQgdG8gYnkgYW4KKyAgICAgICAgIyB1bmNvbm5lY3RlZCBTU0xTb2NrZXQsIHNvIHRoZXkgd2lsbCByYWlzZSBhIHNvY2tldC5lcnJvciByYXRoZXIgdGhhbgorICAgICAgICAjIHNvbWV0aGluZyB1bmV4cGVjdGVkIGxpa2UgVHlwZUVycm9yLgorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc3MgPSBzc2wud3JhcF9zb2NrZXQocykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCisKIAogY2xhc3MgTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKLSAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSkKLSAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICBjID0gcy5nZXRwZWVyY2VydCgpCi0gICAgICAgIGlmIGM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlBlZXIgY2VydCAlcyBzaG91bGRuJ3QgYmUgaGVyZSEiKQotICAgICAgICBzLmNsb3NlKCkKLQotICAgICAgICAjIHRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB3ZSBoYXZlIG5vIHZlcmlmaWNhdGlvbiBjZXJ0cwotICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSkKICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKLSAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGMgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgIGlmIGM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQZWVyIGNlcnQgJXMgc2hvdWxkbid0IGJlIGhlcmUhIikKICAgICAgICAgICAgIHMuY2xvc2UoKQogCi0gICAgICAgICMgdGhpcyBzaG91bGQgc3VjY2VlZCBiZWNhdXNlIHdlIHNwZWNpZnkgdGhlIHJvb3QgY2VydAotICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBmYWlsIGJlY2F1c2Ugd2UgaGF2ZSBubyB2ZXJpZmljYXRpb24gY2VydHMKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgc3VjY2VlZCBiZWNhdXNlIHdlIHNwZWNpZnkgdGhlIHJvb3QgY2VydAorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzI2OiBjaGVjayBjb25uZWN0X2V4KCkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzLmNvbm5lY3RfZXgoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfbm9uX2Jsb2NraW5nX2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzI2OiBub24tYmxvY2tpbmcgY29ubmVjdF9leCgpIHNob3VsZCBhbGxvdyBoYW5kc2hha2UKKyAgICAgICAgIyB0byBwcm9jZWVkIGFmdGVyIHRoZSBzb2NrZXQgZ2V0cyByZWFkeS4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgcmMgPSBzLmNvbm5lY3RfZXgoKCdzdm4ucHl0aG9uLm9yZycsIDQ0MykpCisgICAgICAgICAgICAgICAgIyBFV09VTERCTE9DSyB1bmRlciBXaW5kb3dzLCBFSU5QUk9HUkVTUyBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJjLCAoMCwgZXJybm8uRUlOUFJPR1JFU1MsIGVycm5vLkVXT1VMREJMT0NLKSkKKyAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIGNvbm5lY3QgdG8gZmluaXNoCisgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW3NdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICMgTm9uLWJsb2NraW5nIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc10sIFtdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW3NdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICMgU1NMIGVzdGFibGlzaGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0cGVlcmNlcnQoKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gIm50IiwgIkNhbid0IHVzZSBhIHNvY2tldCBhcyBhIGZpbGUgdW5kZXIgV2luZG93cyIpCiAgICAgZGVmIHRlc3RfbWFrZWZpbGVfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzUyMzg6IGNyZWF0aW5nIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIG1ha2VmaWxlKCkgc2hvdWxkbid0CiAgICAgICAgICMgZGVsYXkgY2xvc2luZyB0aGUgdW5kZXJseWluZyAicmVhbCBzb2NrZXQiIChoZXJlIHRlc3RlZCB3aXRoIGl0cwogICAgICAgICAjIGZpbGUgZGVzY3JpcHRvciwgaGVuY2Ugc2tpcHBpbmcgdGhlIHRlc3QgdW5kZXIgV2luZG93cykuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICJTa2lwcGVkOiBjYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc3MgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCi0gICAgICAgIHNzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCi0gICAgICAgIGZkID0gc3MuZmlsZW5vKCkKLSAgICAgICAgZiA9IHNzLm1ha2VmaWxlKCkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICMgVGhlIGZkIGlzIHN0aWxsIG9wZW4KLSAgICAgICAgb3MucmVhZChmZCwgMCkKLSAgICAgICAgIyBDbG9zaW5nIHRoZSBTU0wgc29ja2V0IHNob3VsZCBjbG9zZSB0aGUgZmQgdG9vCi0gICAgICAgIHNzLmNsb3NlKCkKLSAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgc3MgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgZmQgPSBzcy5maWxlbm8oKQorICAgICAgICAgICAgZiA9IHNzLm1ha2VmaWxlKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgIyBUaGUgZmQgaXMgc3RpbGwgb3BlbgogICAgICAgICAgICAgb3MucmVhZChmZCwgMCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJPU0Vycm9yIHdhc24ndCByYWlzZWQiKQorICAgICAgICAgICAgIyBDbG9zaW5nIHRoZSBTU0wgc29ja2V0IHNob3VsZCBjbG9zZSB0aGUgZmQgdG9vCisgICAgICAgICAgICBzcy5jbG9zZSgpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICBvcy5yZWFkKGZkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUJBREYpCiAKICAgICBkZWYgdGVzdF9ub25fYmxvY2tpbmdfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQotICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCi0gICAgICAgIGNvdW50ID0gMAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgICAgICAgICBzLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc10sIFtdLCBbXSkKLSAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW3NdLCBbXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbk5lZWRlZCAlZCBjYWxscyB0byBkb19oYW5kc2hha2UoKSB0byBlc3RhYmxpc2ggc2Vzc2lvbi5cbiIgJSBjb3VudCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc10sIFtdLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtdLCBbc10sIFtdKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5OZWVkZWQgJWQgY2FsbHMgdG8gZG9faGFuZHNoYWtlKCkgdG8gZXN0YWJsaXNoIHNlc3Npb24uXG4iICUgY291bnQpCiAKICAgICBkZWYgdGVzdF9nZXRfc2VydmVyX2NlcnRpZmljYXRlKHNlbGYpOgotICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKLSAgICAgICAgaWYgbm90IHBlbToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gc2VydmVyIGNlcnRpZmljYXRlIG9uIHN2bi5weXRob24ub3JnOjQ0MyEiKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIGlmIG5vdCBwZW06CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gc3ZuLnB5dGhvbi5vcmc6NDQzISIpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGVtID0gc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MyksIGNhX2NlcnRzPUNFUlRGSUxFKQotICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgotICAgICAgICAgICAgI3Nob3VsZCBmYWlsCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBzZXJ2ZXIgY2VydGlmaWNhdGUgJXMgZm9yIHN2bi5weXRob24ub3JnISIgJSBwZW0pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGVtID0gc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MyksIGNhX2NlcnRzPUNFUlRGSUxFKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKKyAgICAgICAgICAgICAgICAjc2hvdWxkIGZhaWwKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiR290IHNlcnZlciBjZXJ0aWZpY2F0ZSAlcyBmb3Igc3ZuLnB5dGhvbi5vcmchIiAlIHBlbSkKIAotICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoInN2bi5weXRob24ub3JnIiwgNDQzKSwgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQotICAgICAgICBpZiBub3QgcGVtOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gc3ZuLnB5dGhvbi5vcmc6NDQzISIpCi0gICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5WZXJpZmllZCBjZXJ0aWZpY2F0ZSBmb3Igc3ZuLnB5dGhvbi5vcmc6NDQzIGlzXG4lc1xuIiAlIHBlbSkKKyAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpLCBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICBpZiBub3QgcGVtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gc2VydmVyIGNlcnRpZmljYXRlIG9uIHN2bi5weXRob24ub3JnOjQ0MyEiKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5WZXJpZmllZCBjZXJ0aWZpY2F0ZSBmb3Igc3ZuLnB5dGhvbi5vcmc6NDQzIGlzXG4lc1xuIiAlIHBlbSkKIAotICAgICMgVGVzdCBkaXNhYmxlZDogT1BFTlNTTF9WRVJTSU9OKiBub3QgYXZhaWxhYmxlIGluIFB5dGhvbiAyLjYKICAgICBkZWYgdGVzdF9hbGdvcml0aG1zKHNlbGYpOgotICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoInRlc3RfYWxnb3JpdGhtcyBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gc29tZSBvbGQgT3BlblNTTCB2ZXJzaW9ucyIpCi0gICAgICAgIHJldHVybgogICAgICAgICAjIElzc3VlICM4NDg0OiBhbGwgYWxnb3JpdGhtcyBzaG91bGQgYmUgYXZhaWxhYmxlIHdoZW4gdmVyaWZ5aW5nIGEKICAgICAgICAgIyBjZXJ0aWZpY2F0ZS4KKyAgICAgICAgIyBTSEEyNTYgd2FzIGFkZGVkIGluIE9wZW5TU0wgMC45LjgKKyAgICAgICAgaWYgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPIDwgKDAsIDksIDgsIDAsIDE1KToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNIQTI1NiBub3QgYXZhaWxhYmxlIG9uICVyIiAlIHNzbC5PUEVOU1NMX1ZFUlNJT04pCiAgICAgICAgICMgTk9URTogaHR0cHM6Ly9zaGEyNTYudGJzLWludGVybmV0LmNvbSBpcyBhbm90aGVyIHBvc3NpYmxlIHRlc3QgaG9zdAotICAgICAgICByZW1vdGUgPSAoInNoYTIuaGJvZWNrLmRlIiwgNDQzKQorICAgICAgICByZW1vdGUgPSAoInNoYTI1Ni50YnMtaW50ZXJuZXQuY29tIiwgNDQzKQogICAgICAgICBzaGEyNTZfY2VydCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAic2hhMjU2LnBlbSIpCi0gICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPXNoYTI1Nl9jZXJ0LCkKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCk6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic2hhMjU2LnRicy1pbnRlcm5ldC5jb20iKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2hhMjU2X2NlcnQsKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCiAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CkBAIC0yNzYsNyArNDAwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuc2VydmVyLmNlcnRpZmljYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zZXJ2ZXIucHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1zZWxmLnNlcnZlci5jYWNlcnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNlbGYuc2VydmVyLmNlcnRyZXFzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNlbGYuc2VydmVyLmNlcnRyZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1zZWxmLnNlcnZlci5jaXBoZXJzKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgWFhYIFZhcmlvdXMgZXJyb3JzIGNhbiBoYXZlIGhhcHBlbmVkIGhlcmUsIGZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAgICAgICMgYSBtaXNtYXRjaGluZyBwcm90b2NvbCB2ZXJzaW9uLCBhbiBpbnZhbGlkIGNlcnRpZmljYXRlLApAQCAtMzYyLDcgKzQ4Nyw3IEBACiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZXJ0aWZpY2F0ZSwgc3NsX3ZlcnNpb249Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgIGNlcnRyZXFzPU5vbmUsIGNhY2VydHM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzdGFydHRsc19zZXJ2ZXI9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PUZhbHNlLCBjaXBoZXJzPU5vbmUpOgogCiAgICAgICAgICAgICBpZiBzc2xfdmVyc2lvbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1RMU3YxCkBAIC0zNzIsNiArNDk3LDcgQEAKICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wgPSBzc2xfdmVyc2lvbgogICAgICAgICAgICAgc2VsZi5jZXJ0cmVxcyA9IGNlcnRyZXFzCiAgICAgICAgICAgICBzZWxmLmNhY2VydHMgPSBjYWNlcnRzCisgICAgICAgICAgICBzZWxmLmNpcGhlcnMgPSBjaXBoZXJzCiAgICAgICAgICAgICBzZWxmLmNoYXR0eSA9IGNoYXR0eQogICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uY2hhdHR5ID0gY29ubmVjdGlvbmNoYXR0eQogICAgICAgICAgICAgc2VsZi5zdGFydHRsc19zZXJ2ZXIgPSBzdGFydHRsc19zZXJ2ZXIKQEAgLTM4Miw3ICs1MDgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1zZWxmLmNlcnRpZmljYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXMgPSBzZWxmLmNlcnRyZXFzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cyA9IHNlbGYuY2FjZXJ0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb24gPSBzZWxmLnByb3RvY29sKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbiA9IHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMgPSBzZWxmLmNpcGhlcnMpCiAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuY2hhdHR5OgogICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcgc2VydmVyOiAgd3JhcHBlZCBzZXJ2ZXIgc29ja2V0IGFzICVzXG4nICUgc3RyKHNlbGYuc29jaykpCiAgICAgICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKQEAgLTYyOCwxNCArNzU1LDE0IEBACiAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuc29ja2V0LmVycm9yIGlzICVzXG4iICUgeFsxXSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VydmVyLnN0b3AoKQogICAgICAgICAgICAgc2VydmVyLmpvaW4oKQogCiAgICAgZGVmIHNlcnZlcl9wYXJhbXNfdGVzdChjZXJ0ZmlsZSwgcHJvdG9jb2wsIGNlcnRyZXFzLCBjYWNlcnRzZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9jZXJ0ZmlsZSwgY2xpZW50X3Byb3RvY29sPU5vbmUsIGluZGF0YT0iRk9PXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPU5vbmUsIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PUZhbHNlKToKICAgICAgICAgIiIiCiAgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKQEAgLTY0NSw2ICs3NzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9Y2VydHJlcXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHM9Y2FjZXJ0c2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPWNpcGhlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1jb25uZWN0aW9uY2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PXdyYXBfYWNjZXB0aW5nX3NvY2tldCkKQEAgLTY1OSwyMyArNzg3LDI1IEBACiAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2xpZW50X2NlcnRmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1jYWNlcnRzZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1jaXBoZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9Y2VydHJlcXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPWNsaWVudF9wcm90b2NvbCkKICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQotICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlcy4uLlxuIiAlIChyZXByKGluZGF0YSkpKQotICAgICAgICAgICAgcy53cml0ZShpbmRhdGEpCi0gICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKLSAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6Ci0gICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICByZWFkICVzXG4iICUgcmVwcihvdXRkYXRhKSkKLSAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICAgICAiYmFkIGRhdGEgPDwlcz4+ICglZCkgcmVjZWl2ZWQ7IGV4cGVjdGVkIDw8JXM+PiAoJWQpXG4iCi0gICAgICAgICAgICAgICAgICAgICUgKG91dGRhdGFbOm1pbihsZW4ob3V0ZGF0YSksMjApXSwgbGVuKG91dGRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOm1pbihsZW4oaW5kYXRhKSwyMCldLmxvd2VyKCksIGxlbihpbmRhdGEpKSkKKyAgICAgICAgICAgIGZvciBhcmcgaW4gW2luZGF0YSwgYnl0ZWFycmF5KGluZGF0YSksIG1lbW9yeXZpZXcoaW5kYXRhKV06CisgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlcy4uLlxuIiAlIChyZXByKGFyZykpKQorICAgICAgICAgICAgICAgIHMud3JpdGUoYXJnKQorICAgICAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudDogIHJlYWQgJXNcbiIgJSByZXByKG91dGRhdGEpKQorICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBkYXRhIDw8JXM+PiAoJWQpIHJlY2VpdmVkOyBleHBlY3RlZCA8PCVzPj4gKCVkKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAob3V0ZGF0YVs6bWluKGxlbihvdXRkYXRhKSwyMCldLCBsZW4ob3V0ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOm1pbihsZW4oaW5kYXRhKSwyMCldLmxvd2VyKCksIGxlbihpbmRhdGEpKSkKICAgICAgICAgICAgIHMud3JpdGUoIm92ZXJcbiIpCiAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgogICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgpAQCAtNzAzLDkgKzgzMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLmdldF9wcm90b2NvbF9uYW1lKHNlcnZlcl9wcm90b2NvbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0dHlwZSkpCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycywgb3RoZXJ3aXNlIGFuIFNTTHYyMyBjbGllbnQKKyAgICAgICAgICAgICMgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2Mikgc3RhcnRpbmcgZnJvbQorICAgICAgICAgICAgIyBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgogICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KENFUlRGSUxFLCBzZXJ2ZXJfcHJvdG9jb2wsIGNlcnRzcmVxcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJURklMRSwgQ0VSVEZJTEUsIGNsaWVudF9wcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz0iQUxMIiwgY2hhdHR5PUZhbHNlKQogICAgICAgICAjIFByb3RvY29sIG1pc21hdGNoIGNhbiByZXN1bHQgaW4gZWl0aGVyIGFuIFNTTEVycm9yLCBvciBhCiAgICAgICAgICMgIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIgZXJyb3IuCiAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CkBAIC03NjQsNiArODk3LDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdC5qb2luKCkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9lY2hvKHNlbGYpOgogICAgICAgICAgICAgIiIiQmFzaWMgdGVzdCBvZiBhbiBTU0wgY2xpZW50IGNvbm5lY3RpbmcgdG8gYSBzZXJ2ZXIiIiIKICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgpAQCAtODI5LDEyICs5NjMsMTEgQEAKICAgICAgICAgICAgIGJhZF9jZXJ0X3Rlc3Qob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZGtleS5wZW0iKSkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MihzZWxmKToKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYW4gU1NMdjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3NzbHYyIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gT3BlblNTTCAxLjAuMCsiKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCkBAIC04NDIsMTIgKzk3NSwxMSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfc3NsdjIzKHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MjMgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3NzbHYyMyBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGl0IGZhaWxzIG9uIE9wZW5TU0wgMS4wLjArIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlKQogICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvciksIHg6CkBAIC04NjgsMTIgKzEwMDAsMTEgQEAKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYzKHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnRlc3RfcHJvdG9jb2xfc3NsdjMgZGlzYWJsZWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBpdCBmYWlscyBvbiBPcGVuU1NMIDEuMC4wKyIpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKQEAgLTg4MSwxMiArMTAxMiwxMSBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3Rsc3YxKHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxudGVzdF9wcm90b2NvbF90bHN2MSBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGl0IGZhaWxzIG9uIE9wZW5TU0wgMS4wLjArIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQpAQCAtOTc1LDcgKzExMDUsNyBAQAogICAgICAgICAgICAgICAgICMgbm93IGZldGNoIHRoZSBzYW1lIGRhdGEgZnJvbSB0aGUgSFRUUFMgc2VydmVyCiAgICAgICAgICAgICAgICAgdXJsID0gJ2h0dHBzOi8vMTI3LjAuMC4xOiVkLyVzJyAlICgKICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQsIG9zLnBhdGguc3BsaXQoQ0VSVEZJTEUpWzFdKQotICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgICAgICAgICBmID0gdXJsbGliLnVybG9wZW4odXJsKQogICAgICAgICAgICAgICAgIGRsZW4gPSBmLmluZm8oKS5nZXRoZWFkZXIoImNvbnRlbnQtbGVuZ3RoIikKICAgICAgICAgICAgICAgICBpZiBkbGVuIGFuZCAoaW50KGRsZW4pID4gMCk6CkBAIC0xMDkxLDcgKzEyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHMucmVhZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gb3V0ZGF0YS5kZWNvZGUoJ0FTQ0lJJywgJ3N0cmljdCcpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGlsZSBzZW5kaW5nIHdpdGggPDwlcz4+IGJhZCBkYXRhICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8JXI+PiAoJWQpIHJlY2VpdmVkOyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCA8PCVyPj4gKCVkKVxuIiAlICgKQEAgLTExMDEsMTIgKzEyMzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHNlbmQgd2l0aCBtZXRob2QgPDwlcz4+OyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB0byBzdWNjZWVkLlxuIiAlIChtZXRoX25hbWUsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIoZSkuc3RhcnRzd2l0aChtZXRoX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDwlcz4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6ICVzXG4iICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aF9uYW1lLCBlCkBAIC0xMTIwLDcgKzEyNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHJlY3ZfbWV0aCgqYXJncykKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBvdXRkYXRhLmRlY29kZSgnQVNDSUknLCAnc3RyaWN0JykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaWxlIHJlY2VpdmluZyB3aXRoIDw8JXM+PiBiYWQgZGF0YSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PCVyPj4gKCVkKSByZWNlaXZlZDsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgPDwlcj4+ICglZClcbiIgJSAoCkBAIC0xMTMwLDEyICsxMjYwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZWNlaXZlIHdpdGggbWV0aG9kIDw8JXM+PjsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdG8gc3VjY2VlZC5cbiIgJSAobWV0aF9uYW1lLCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RyKGUpLnN0YXJ0c3dpdGgobWV0aF9uYW1lKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWV0aG9kIDw8JXM+PiBmYWlsZWQgd2l0aCB1bmV4cGVjdGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBtZXNzYWdlOiAlc1xuIiAlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhfbmFtZSwgZQpAQCAtMTE3OSwxMiArMTMwOSw4IEBACiAgICAgICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgwLjIpCiAgICAgICAgICAgICAgICAgICAgIGMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgICMgV2lsbCBhdHRlbXB0IGhhbmRzaGFrZSBhbmQgdGltZSBvdXQKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoInRpbWVkIG91dCIgaW4gc3RyKGUpLCBzdHIoZSkpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNTTEVycm9yIHdhc24ndCByYWlzZWQiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzc2wuU1NMRXJyb3IsICJ0aW1lZCBvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQsIGMpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMTE5MiwxMiArMTMxOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgwLjIpCiAgICAgICAgICAgICAgICAgICAgIGMgPSBzc2wud3JhcF9zb2NrZXQoYykKICAgICAgICAgICAgICAgICAgICAgIyBXaWxsIGF0dGVtcHQgaGFuZHNoYWtlIGFuZCB0aW1lIG91dAotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ0aW1lZCBvdXQiIGluIHN0cihlKSwgc3RyKGUpKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTU0xFcnJvciB3YXNuJ3QgcmFpc2VkIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAidGltZWQgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5jb25uZWN0LCAoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCiAgICAgICAgICAgICBmaW5hbGx5OgpAQCAtMTIwOCw3ICsxMzMwLDcgQEAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKICAgICBpZiBza2lwX2V4cGVjdGVkOgotICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQoIk5vIFNTTCBzdXBwb3J0IikKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk5vIFNTTCBzdXBwb3J0IikKIAogICAgIGdsb2JhbCBDRVJURklMRSwgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUCiAgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCkBAIC0xMjIxLDcgKzEzNDMsNyBAQAogICAgICAgICBub3Qgb3MucGF0aC5leGlzdHMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKSk6CiAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGVzISIpCiAKLSAgICB0ZXN0cyA9IFtCYXNpY1Rlc3RzXQorICAgIHRlc3RzID0gW0Jhc2ljVGVzdHMsIEJhc2ljU29ja2V0VGVzdHNdCiAKICAgICBpZiB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgogICAgICAgICB0ZXN0cy5hcHBlbmQoTmV0d29ya2VkVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0YXJ0ZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5CmluZGV4IGM0ZDEyZDcuLjhlZWFlNzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5CkBAIC05LDkgKzksMTEgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG9zCitmcm9tIG9zIGltcG9ydCBwYXRoCiAKLSMgdXNlIHRoaXMgZm9ybSBzbyB0aGF0IHRoZSB0ZXN0IGlzIHNraXBwZWQgd2hlbiBzdGFydGZpbGUgaXMgbm90IGF2YWlsYWJsZToKLWZyb20gb3MgaW1wb3J0IHN0YXJ0ZmlsZSwgcGF0aAorc3RhcnRmaWxlID0gdGVzdF9zdXBwb3J0LmdldF9hdHRyaWJ1dGUob3MsICdzdGFydGZpbGUnKQorCiAKIGNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9ub25leGlzdGluZyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHIucHkKaW5kZXggZGU5ODhhOC4uNGY4OGIyOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHIucHkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCB1bmljb2RlIgogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHIoRm9vMCgpKS5zdGFydHN3aXRoKCI8IikpICMgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBfX3VuaWNvZGVfXworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKEZvbzAoKSkuc3RhcnRzd2l0aCgiPCIpKSAjIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gX191bmljb2RlX18KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMSgpKSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzIoKSksICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28zKCkpLCAiZm9vIikKQEAgLTI3Niw3ICsyNzYsNyBAQAogICAgICAgICAjIGZvcm1hdCBzcGVjaWZpZXJzIGZvciB1c2VyIGRlZmluZWQgdHlwZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDphYmN9Jy5mb3JtYXQoQygpKSwgJ2FiYycpCiAKLSAgICAgICAgIyAhciBhbmQgIXMgY29lcnNpb25zCisgICAgICAgICMgIXIgYW5kICFzIGNvZXJjaW9ucwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzfScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzOn0nLmZvcm1hdCgnSGVsbG8nKSwgJ0hlbGxvJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhczoxNX0nLmZvcm1hdCgnSGVsbG8nKSwgJ0hlbGxvICAgICAgICAgICcpCkBAIC0yOTAsMTIgKzI5MCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdChbXSksICdbXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KFsxXSksICdbMV0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdChFKCdkYXRhJykpLCAnRShkYXRhKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpkfScuZm9ybWF0KEcoJ2RhdGEnKSksICdHKGRhdGEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhc30nLmZvcm1hdChHKCdkYXRhJykpLCAnc3RyaW5nIGlzIGRhdGEnKQogCisgICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheT0yNykpLApAQCAtMzQ3LDkgKzM1MCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCF9Ii5mb3JtYXQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCFyc30iLmZvcm1hdCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInshfSIuZm9ybWF0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezp9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7OnN9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7fSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezp9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7OnN9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7fSIuZm9ybWF0KQogCiAgICAgICAgICMgaXNzdWUgNjA4OQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbMF14fSIuZm9ybWF0LCBbTm9uZV0pCkBAIC0zNjgsOSArMzcxLDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgIiIsICItIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswOj1zfSIuZm9ybWF0LCAnJykKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdF9hdXRvX251bWJlcmluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30nLmZvcm1hdCgxMCksICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6NX0nLmZvcm1hdCgncycpLCAncyAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7IXJ9Jy5mb3JtYXQoJ3MnKSwgIidzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3suX3h9Jy5mb3JtYXQoQygxMCkpLCAnMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7WzFdfScuZm9ybWF0KFsxLCAyXSksICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne1thXX0nLmZvcm1hdCh7J2EnOjQsICdiJzoyfSksICc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXt9Ynt9YycuZm9ybWF0KDAsIDEpLCAnYTBiMWMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7Ont9fWInLmZvcm1hdCgneCcsICdeMTAnKSwgJ2EgICAgeCAgICAgYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7Ont9eH1iJy5mb3JtYXQoMjAsICcjJyksICdhMHgxNGInKQorCisgICAgICAgICMgY2FuJ3QgbWl4IGFuZCBtYXRjaCBudW1iZXJpbmcgYW5kIGF1dG8tbnVtYmVyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7fXsxfScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezF9e30nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3s6ezF9fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezA6e319Jy5mb3JtYXQsIDEsIDIpCisKKyAgICAgICAgIyBjYW4gbWl4IGFuZCBtYXRjaCBhdXRvLW51bWJlcmluZyBhbmQgbmFtZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2Z9e30nLmZvcm1hdCg0LCBmPSd0ZXN0JyksICd0ZXN0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9e2Z9Jy5mb3JtYXQoNCwgZj0ndGVzdCcpLCAnNHRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7OntmfX17Z317fScuZm9ybWF0KDEsIDMsIGc9J2cnLCBmPTIpLCAnIDFnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tmOnt9fXt9e2d9Jy5mb3JtYXQoMiwgNCwgZj0xLCBnPSdnJyksICcgMTRnJykKKwogICAgIGRlZiB0ZXN0X2J1ZmZlcl9pc19yZWFkb25seShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc3RkaW4ucmVhZGludG8sIGIiIikKIAorICAgIGRlZiB0ZXN0X2VuY29kZV9hbmRfZGVjb2RlX2t3YXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjZGUnLmVuY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNkZScuZW5jb2RlKCdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmNkZScuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJjZGUnLmVuY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgZXJyb3JzPSdpZ25vcmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5kclwyMDIgeCcuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJcMjAyIHgnLmRlY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKKworCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0clRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDkzMjhkYjAuLmIyNmViZWMKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CkBAIC00LDcgKzQsNiBAQAogCiBpbXBvcnQgY2FsZW5kYXIKIGltcG9ydCBzeXMKLWltcG9ydCBvcwogaW1wb3J0IHJlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IHRpbWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKaW5kZXggNDg2NzdlMC4uNzk0N2U0MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKQEAgLTIwMiwxMyArMjAyLDEzIEBACiBjbGFzcyBCeXRlc0FsaWFzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9idWlsdGluKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3RyIGlzIGJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyIGlzIGJ5dGVzKQogCiAgICAgZGVmIHRlc3Rfc3ludGF4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIic3BhbSIsICJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiciJlZ2dcZm9vIiwgImVnZ1xcZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoYiIiKSwgc3RyKQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShiciIiKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiIiIpLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJyIiIpLCBzdHIpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmluZ1Rlc3QsIE1vZHVsZVRlc3QsIEJ5dGVzQWxpYXNUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CmluZGV4IDYwNDI1ZGQuLjE1YmRmODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKQEAgLTgsNjYgKzgsNjYgQEAKIAogY2xhc3MgU3RyaW5ncHJlcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2ExKHUiXHUwMjIxIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2ExKHUiXHUwMjIyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9hMSh1Ilx1MDIyMSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2ExKHUiXHUwMjIyIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2IxKHUiXHUwMGFkIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2IxKHUiXHUwMGFlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9iMSh1Ilx1MDBhZCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2IxKHUiXHUwMGFlIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1hcF90YWJsZV9iMih1Ilx1MDA0MSIpLCB1Ilx1MDA2MSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtYXBfdGFibGVfYjIodSJcdTAwNjEiKSwgdSJcdTAwNjEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IyKHUiXHUwMDQxIiksIHUiXHUwMDYxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hcF90YWJsZV9iMih1Ilx1MDA2MSIpLCB1Ilx1MDA2MSIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1hcF90YWJsZV9iMyh1Ilx1MDA0MSIpLCB1Ilx1MDA2MSIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhtYXBfdGFibGVfYjModSJcdTAwNjEiKSwgdSJcdTAwNjEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IzKHUiXHUwMDQxIiksIHUiXHUwMDYxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hcF90YWJsZV9iMyh1Ilx1MDA2MSIpLCB1Ilx1MDA2MSIpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MxMSh1Ilx1MDAyMCIpKQotICAgICAgICBzZWxmLmZhaWxJZihpbl90YWJsZV9jMTEodSJcdTAwMjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MxMSh1Ilx1MDAyMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMSh1Ilx1MDAyMSIpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpbl90YWJsZV9jMTIodSJcdTAwYTAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzEyKHUiXHUwMGExIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTIodSJcdTAwYTAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMTIodSJcdTAwYTEiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzEyKHUiXHUwMGEwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MxMih1Ilx1MDBhMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzEyKHUiXHUwMGEwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzEyKHUiXHUwMGExIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MxMV9jMTIodSJcdTAwYTAiKSkKLSAgICAgICAgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMV9jMTIodSJcdTAwYTEiKSkKIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzIxKHUiXHUwMDFmIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MyMSh1Ilx1MDAyMCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzIxKHUiXHUwMDFmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzIxKHUiXHUwMDIwIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MyMih1Ilx1MDA5ZiIpKQotICAgICAgICBzZWxmLmZhaWxJZihpbl90YWJsZV9jMjIodSJcdTAwYTAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MyMih1Ilx1MDA5ZiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MyMih1Ilx1MDBhMCIpKQogCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpbl90YWJsZV9jMjFfYzIyKHUiXHUwMDlmIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MyMV9jMjIodSJcdTAwYTAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MyMV9jMjIodSJcdTAwOWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMjFfYzIyKHUiXHUwMGEwIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2MzKHUiXHVlMDAwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2MzKHUiXHVmOTAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMyh1Ilx1ZTAwMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MzKHUiXHVmOTAwIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2M0KHUiXHVmZmZmIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2M0KHUiXHUwMDAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNCh1Ilx1ZmZmZiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M0KHUiXHUwMDAwIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2M1KHUiXHVkODAwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2M1KHUiXHVkN2ZmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNSh1Ilx1ZDgwMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M1KHUiXHVkN2ZmIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2M2KHUiXHVmZmY5IikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2M2KHUiXHVmZmZlIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNih1Ilx1ZmZmOSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M2KHUiXHVmZmZlIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2M3KHUiXHUyZmYwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2M3KHUiXHUyZmZjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNyh1Ilx1MmZmMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M3KHUiXHUyZmZjIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2M4KHUiXHUwMzQwIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2M4KHUiXHUwMzQyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jOCh1Ilx1MDM0MCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M4KHUiXHUwMzQyIikpCiAKICAgICAgICAgIyBDLjkgaXMgbm90IGluIHRoZSBibXAKLSAgICAgICAgIyBzZWxmLmZhaWxVbmxlc3MoaW5fdGFibGVfYzkodSJcVTAwMEUwMDAxIikpCi0gICAgICAgICMgc2VsZi5mYWlsSWYoaW5fdGFibGVfYzgodSJcVTAwMEUwMDAyIikpCisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M5KHUiXFUwMDBFMDAwMSIpKQorICAgICAgICAjIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzgodSJcVTAwMEUwMDAyIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2QxKHUiXHUwNWJlIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2QxKHUiXHUwNWJmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9kMSh1Ilx1MDViZSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2QxKHUiXHUwNWJmIikpCiAKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGluX3RhYmxlX2QyKHUiXHUwMDQxIikpCi0gICAgICAgIHNlbGYuZmFpbElmKGluX3RhYmxlX2QyKHUiXHUwMDQwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9kMih1Ilx1MDA0MSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2QyKHUiXHUwMDQwIikpCiAKICAgICAgICAgIyBUaGlzIHdvdWxkIGdlbmVyYXRlIGEgaGFzaCBvZiBhbGwgcHJlZGljYXRlcy4gSG93ZXZlciwgcnVubmluZwogICAgICAgICAjIGl0IGlzIHF1aXRlIGV4cGVuc2l2ZSwgYW5kIG9ubHkgc2VydmVzIHRvIGRldGVjdCBjaGFuZ2VzIGluIHRoZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJvcC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3Ryb3AucHkKaW5kZXggN2NkYTgzZi4uOGNlMjllZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJvcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cm9wLnB5CkBAIC0xMCwxMDQgKzEwLDEwNCBAQAogY2xhc3MgU3Ryb3BGdW5jdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2F0b2koc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5hdG9pKCIgMSAiKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvaSgiIDEgIikgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvaSwgIiAxeCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2ksICIgeDEgIikKIAogICAgIGRlZiB0ZXN0X2F0b2woc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5hdG9sKCIgMSAiKSA9PSAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmF0b2woIiAxICIpID09IDFMKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9sLCAiIDF4IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvbCwgIiB4MSAiKQogCiAgICAgZGVmIHRlc3RfYXRvZihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmF0b2YoIiAxICIpID09IDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmF0b2YoIiAxICIpID09IDEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvZiwgIiAxeCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2YsICIgeDEgIikKIAogICAgIGRlZiB0ZXN0X2NhcGl0YWxpemUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5jYXBpdGFsaXplKCIgaGVsbG8gIikgPT0gIiBoZWxsbyAiKQotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AuY2FwaXRhbGl6ZSgiaGVsbG8gIikgPT0gIkhlbGxvICIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5jYXBpdGFsaXplKCIgaGVsbG8gIikgPT0gIiBoZWxsbyAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuY2FwaXRhbGl6ZSgiaGVsbG8gIikgPT0gIkhlbGxvICIpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImFiYyIpID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIiwgMSkgPT0gOSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJkZWYiLCA0KSA9PSAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImFiYyIsIDEpID09IDkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiZGVmIiwgNCkgPT0gLTEpCiAKICAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnJmaW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIikgPT0gOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnJmaW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIikgPT0gOSkKIAogICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AubG93ZXIoIkhlTExvIikgPT0gImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmxvd2VyKCJIZUxMbyIpID09ICJoZWxsbyIpCiAKICAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnVwcGVyKCJIZUxMbyIpID09ICJIRUxMTyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC51cHBlcigiSGVMTG8iKSA9PSAiSEVMTE8iKQogCiAgICAgZGVmIHRlc3Rfc3dhcGNhc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5zd2FwY2FzZSgiSGVMTG8gY09tcFV0ZVJzIikgPT0gImhFbGxPIENvTVB1VEVyUyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5zd2FwY2FzZSgiSGVMTG8gY09tcFV0ZVJzIikgPT0gImhFbGxPIENvTVB1VEVyUyIpCiAKICAgICBkZWYgdGVzdF9zdHJpcChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5zdHJpcCgiIFx0XG4gaGVsbG8gXHRcbiAiKSA9PSAiaGVsbG8iKQogCiAgICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AubHN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICJoZWxsbyBcdFxuICIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5sc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gImhlbGxvIFx0XG4gIikKIAogICAgIGRlZiB0ZXN0X3JzdHJpcChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnJzdHJpcCgiIFx0XG4gaGVsbG8gXHRcbiAiKSA9PSAiIFx0XG4gaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AucnN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICIgXHRcbiBoZWxsbyIpCiAKICAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgogICAgICAgICByZXBsYWNlID0gc3Ryb3AucmVwbGFjZQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDEpCiAgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3byF0aHJlZSEiKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDIpCiAgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZSEiKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDMpCiAgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZUAiKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDQpCiAgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZUAiKQogCiAgICAgICAgICMgQ0FVVElPTjogYSByZXBsYWNlIGNvdW50IG9mIDAgbWVhbnMgaW5maW5pdHkgb25seSB0byBzdHJvcCwKICAgICAgICAgIyBub3QgdG8gdGhlIHN0cmluZyAucmVwbGFjZSgpIG1ldGhvZCBvciB0byB0aGUKICAgICAgICAgIyBzdHJpbmcucmVwbGFjZSgpIGZ1bmN0aW9uLgogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMCkKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJykKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICd4JywgJ0AnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAneCcsICdAJykKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmUhdHdvIXRocmVlISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICd4JywgJ0AnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAneCcsICdAJywgMikKICAgICAgICAgICAgICAgICAgICAgID09ICJvbmUhdHdvIXRocmVlISIpCiAKICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc3BsaXQgPSBzdHJvcC5zcGxpdAotICAgICAgICBzZWxmLmFzc2VydF8oc3BsaXQoInRoaXMgaXMgdGhlIHNwbGl0IGZ1bmN0aW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJ0aGlzIGlzIHRoZSBzcGxpdCBmdW5jdGlvbiIpCiAgICAgICAgICAgICAgICAgICAgICA9PSBbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3NwbGl0JywgJ2Z1bmN0aW9uJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYXxifGN8ZCIsICd8JykgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYXxifGN8ZCIsICd8JywgMikgPT0gWydhJywgJ2InLCAnY3xkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDEpID09IFsnYScsICdiIGMgZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oc3BsaXQoImEgYiBjIGQiLCBOb25lLCAyKSA9PSBbJ2EnLCAnYicsICdjIGQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMykgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDQpID09IFsnYScsICdiJywgJ2MnLCAnZCddKQotICAgICAgICBzZWxmLmFzc2VydF8oc3BsaXQoImEgYiBjIGQiLCBOb25lLCAwKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNwbGl0KCJhICBiICBjICBkIiwgTm9uZSwgMikgPT0gIFsnYScsICdiJywgJ2MgIGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnLCAyKSA9PSBbJ2EnLCAnYicsICdjfGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMSkgPT0gWydhJywgJ2IgYyBkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDIpID09IFsnYScsICdiJywgJ2MgZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCAzKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgNCkgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDApID09IFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgIGIgIGMgIGQiLCBOb25lLCAyKSA9PSAgWydhJywgJ2InLCAnYyAgZCddKQogCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmpvaW4oWydhJywgJ2InLCAnYycsICdkJ10pID09ICdhIGIgYyBkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmpvaW4oKCdhJywgJ2InLCAnYycsICdkJyksICcnKSA9PSAnYWJjZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzdHJvcC5qb2luKFNlcXVlbmNlKCkpID09ICd3IHggeSB6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oWydhJywgJ2InLCAnYycsICdkJ10pID09ICdhIGIgYyBkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oKCdhJywgJ2InLCAnYycsICdkJyksICcnKSA9PSAnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKFNlcXVlbmNlKCkpID09ICd3IHggeSB6JykKIAogICAgICAgICAjIHRyeSBhIGZldyBsb25nIG9uZXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmpvaW4oWyd4JyAqIDEwMF0gKiAxMDAsICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oWyd4JyAqIDEwMF0gKiAxMDAsICc6JykKICAgICAgICAgICAgICAgICAgICAgID09ICgoJ3gnICogMTAwKSArICI6IikgKiA5OSArICJ4IiAqIDEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLmpvaW4oKCd4JyAqIDEwMCwpICogMTAwLCAnOicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKCgneCcgKiAxMDAsKSAqIDEwMCwgJzonKQogICAgICAgICAgICAgICAgICAgICAgPT0gKCgneCcgKiAxMDApICsgIjoiKSAqIDk5ICsgIngiICogMTAwKQogCiAgICAgZGVmIHRlc3RfbWFrZXRyYW5zKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oc3Ryb3AubWFrZXRyYW5zKCJhYmMiLCAieHl6IikgPT0gdHJhbnN0YWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLm1ha2V0cmFucygiYWJjIiwgInh5eiIpID09IHRyYW5zdGFibGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLm1ha2V0cmFucywgImFiYyIsICJ4eXpxIikKIAogICAgIGRlZiB0ZXN0X3RyYW5zbGF0ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHN0cm9wLnRyYW5zbGF0ZSgieHl6YWJjZGVmIiwgdHJhbnN0YWJsZSwgImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC50cmFuc2xhdGUoInh5emFiY2RlZiIsIHRyYW5zdGFibGUsICJkZWYiKQogICAgICAgICAgICAgICAgICAgICAgPT0gInh5enh5eiIpCiAKICAgICBkZWYgdGVzdF9kYXRhX2F0dHJpYnV0ZXMoc2VsZik6CkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ociksIGxlbihhKSAqIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgbGVuKGEpICogMykKIAogICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPXRlc3Rfc3VwcG9ydC5fMkcgLSAxLCBtZW11c2U9MSkKICAgICBkZWYgdGVzdF9zdHJvcGpvaW5faHVnZV90dXAoc2VsZiwgc2l6ZSk6CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihyKSwgbGVuKGEpICogMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCBsZW4oYSkgKiAzKQogCiB0cmFuc3RhYmxlID0gJ1wwMDBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3ICEiIyQlJlwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYHh5emRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3NycKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKaW5kZXggZGYwZGM4Ni4uYTIzM2IxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CkBAIC0xMyw3ICsxMyw3IEBACiBjbGFzcyBnZXRsYW5nX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IF9nZXRsYW5nIiIiCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKF9zdHJwdGltZS5fZ2V0bGFuZygpLCBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3RycHRpbWUuX2dldGxhbmcoKSwgbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfVElNRSkpCiAKIGNsYXNzIExvY2FsZVRpbWVfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBfc3RycHRpbWUuTG9jYWxlVGltZS4KQEAgLTM2LDkgKzM2LDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoZGlyZWN0aXZlLCBzZWxmLnRpbWVfdHVwbGUpLmxvd2VyKCkKICAgICAgICAgY29tcGFyaXNvbiA9IHRlc3Rpbmdbc2VsZi50aW1lX3R1cGxlW3R1cGxlX3Bvc2l0aW9uXV0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cmZ0aW1lX291dHB1dCBpbiB0ZXN0aW5nLCAiJXM6IG5vdCBmb3VuZCBpbiB0dXBsZSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvbXBhcmlzb24gPT0gc3RyZnRpbWVfb3V0cHV0LAorICAgICAgICBzZWxmLmFzc2VydEluKHN0cmZ0aW1lX291dHB1dCwgdGVzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAiJXM6IG5vdCBmb3VuZCBpbiB0dXBsZSIgJSBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wYXJpc29uID09IHN0cmZ0aW1lX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICIlczogcG9zaXRpb24gd2l0aGluIHR1cGxlIGluY29ycmVjdDsgJXMgIT0gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcl9tc2csIGNvbXBhcmlzb24sIHN0cmZ0aW1lX291dHB1dCkpCiAKQEAgLTYxLDE4ICs2MSwxOCBAQAogICAgIGRlZiB0ZXN0X2FtX3BtKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBBTS9QTSByZXByZXNlbnRhdGlvbiBkb25lIHByb3Blcmx5CiAgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVwIiwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJmdGltZV9vdXRwdXQgaW4gc2VsZi5MVF9pbnMuYW1fcG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAiQU0vUE0gcmVwcmVzZW50YXRpb24gbm90IGluIHR1cGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzdHJmdGltZV9vdXRwdXQsIHNlbGYuTFRfaW5zLmFtX3BtLAorICAgICAgICAgICAgICAgICAgICAgICJBTS9QTSByZXByZXNlbnRhdGlvbiBub3QgaW4gdHVwbGUiKQogICAgICAgICBpZiBzZWxmLnRpbWVfdHVwbGVbM10gPCAxMjogcG9zaXRpb24gPSAwCiAgICAgICAgIGVsc2U6IHBvc2l0aW9uID0gMQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyZnRpbWVfb3V0cHV0ID09IHNlbGYuTFRfaW5zLmFtX3BtW3Bvc2l0aW9uXSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmZ0aW1lX291dHB1dCA9PSBzZWxmLkxUX2lucy5hbV9wbVtwb3NpdGlvbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAiQU0vUE0gcmVwcmVzZW50YXRpb24gaW4gdGhlIHdyb25nIHBvc2l0aW9uIHdpdGhpbiB0aGUgdHVwbGUiKQogCiAgICAgZGVmIHRlc3RfdGltZXpvbmUoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRpbWV6b25lIGlzIGNvcnJlY3QKICAgICAgICAgdGltZXpvbmUgPSB0aW1lLnN0cmZ0aW1lKCIlWiIsIHNlbGYudGltZV90dXBsZSkubG93ZXIoKQogICAgICAgICBpZiB0aW1lem9uZToKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVswXSBvciBcCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZXpvbmUgaW4gc2VsZi5MVF9pbnMudGltZXpvbmVbMF0gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXpvbmUgJXMgbm90IGZvdW5kIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWV6b25lLCBzZWxmLkxUX2lucy50aW1lem9uZSkpCkBAIC04NiwyNiArODYsMjYgQEAKICAgICAgICAgIyAgb3V0cHV0LgogICAgICAgICBtYWdpY19kYXRlID0gKDE5OTksIDMsIDE3LCAyMiwgNDQsIDU1LCAyLCA3NiwgMCkKICAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJWMiLCBtYWdpY19kYXRlKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RyZnRpbWVfb3V0cHV0ID09IHRpbWUuc3RyZnRpbWUoc2VsZi5MVF9pbnMuTENfZGF0ZV90aW1lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZnRpbWVfb3V0cHV0ID09IHRpbWUuc3RyZnRpbWUoc2VsZi5MVF9pbnMuTENfZGF0ZV90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNfZGF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTENfZGF0ZV90aW1lIGluY29ycmVjdCIpCiAgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiV4IiwgbWFnaWNfZGF0ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cmZ0aW1lX291dHB1dCA9PSB0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX2RhdGUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJmdGltZV9vdXRwdXQgPT0gdGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ19kYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNfZGF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTENfZGF0ZSBpbmNvcnJlY3QiKQogICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlWCIsIG1hZ2ljX2RhdGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJmdGltZV9vdXRwdXQgPT0gdGltZS5zdHJmdGltZShzZWxmLkxUX2lucy5MQ190aW1lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZnRpbWVfb3V0cHV0ID09IHRpbWUuc3RyZnRpbWUoc2VsZi5MVF9pbnMuTENfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljX2RhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxDX3RpbWUgaW5jb3JyZWN0IikKICAgICAgICAgTFQgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCiAgICAgICAgIExULmFtX3BtID0gKCcnLCAnJykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKExULkxDX3RpbWUsICJMb2NhbGVUaW1lJ3MgTEMgZGlyZWN0aXZlcyBjYW5ub3QgaGFuZGxlICIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKExULkxDX3RpbWUsICJMb2NhbGVUaW1lJ3MgTEMgZGlyZWN0aXZlcyBjYW5ub3QgaGFuZGxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbXB0eSBzdHJpbmdzIikKIAogICAgIGRlZiB0ZXN0X2xhbmcoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIGxhbmcgaXMgc2V0IHRvIHdoYXQgX2dldGxhbmcoKSByZXR1cm5zCiAgICAgICAgICMgQXNzdW1pbmcgbG9jYWxlIGhhcyBub3QgY2hhbmdlZCBiZXR3ZWVuIG5vdyBhbmQgd2hlbiBzZWxmLkxUX2lucyB3YXMgY3JlYXRlZAotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWxmLkxUX2lucy5sYW5nLCBfc3RycHRpbWUuX2dldGxhbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkxUX2lucy5sYW5nLCBfc3RycHRpbWUuX2dldGxhbmcoKSkKIAogCiBjbGFzcyBUaW1lUkVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMTksMTMgKzExOSwxMyBAQAogICAgIGRlZiB0ZXN0X3BhdHRlcm4oc2VsZik6CiAgICAgICAgICMgVGVzdCBUaW1lUkUucGF0dGVybgogICAgICAgICBwYXR0ZXJuX3N0cmluZyA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKHIiJWEgJUEgJWQiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocGF0dGVybl9zdHJpbmcuZmluZChzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVsyXSkgIT0gLTEsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzJdKSAhPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGZpbmQgYWJicmV2aWF0ZWQgd2Vla2RheSBpbiBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYubG9jYWxlX3RpbWUuZl93ZWVrZGF5WzRdKSAhPSAtMSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdHRlcm5fc3RyaW5nLmZpbmQoc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXlbNF0pICE9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZmluZCBmdWxsIHdlZWtkYXkgaW4gcGF0dGVybiBzdHJpbmcgJyVzJyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5fc3RyaW5nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocGF0dGVybl9zdHJpbmcuZmluZChzZWxmLnRpbWVfcmVbJ2QnXSkgIT0gLTEsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYudGltZV9yZVsnZCddKSAhPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGZpbmQgJ2QnIGRpcmVjdGl2ZSBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCiAKQEAgLTEzMywyMyArMTMzLDIzIEBACiAgICAgICAgICMgTWFrZSBzdXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHRoYXQgbWlnaHQgYmUgdGFrZW4gYXMKICAgICAgICAgIyByZWdleCBzeW50YXggaXMgZXNjYXBlZC4KICAgICAgICAgcGF0dGVybl9zdHJpbmcgPSBzZWxmLnRpbWVfcmUucGF0dGVybigiXGQrIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHIiXFxkXCsiIGluIHBhdHRlcm5fc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGRvZXMgbm90IGhhdmUgcmUgY2hhcmFjdGVycyBlc2NhcGVkIHByb3Blcmx5IiAlCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyIlxcZFwrIiwgcGF0dGVybl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIiVzIGRvZXMgbm90IGhhdmUgcmUgY2hhcmFjdGVycyBlc2NhcGVkIHByb3Blcmx5IiAlCisgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCiAKICAgICBkZWYgdGVzdF9jb21waWxlKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgY29tcGlsZWQgcmVnZXggaXMgY29ycmVjdAogICAgICAgICBmb3VuZCA9IHNlbGYudGltZV9yZS5jb21waWxlKHIiJUEiKS5tYXRjaChzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs2XSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZvdW5kIGFuZCBmb3VuZC5ncm91cCgnQScpID09IHNlbGYubG9jYWxlX3RpbWUuZl93ZWVrZGF5WzZdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQgYW5kIGZvdW5kLmdyb3VwKCdBJykgPT0gc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXlbNl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAicmUgb2JqZWN0IGZvciAnJUEnIGZhaWxlZCIpCiAgICAgICAgIGNvbXBpbGVkID0gc2VsZi50aW1lX3JlLmNvbXBpbGUociIlYSAlYiIpCiAgICAgICAgIGZvdW5kID0gY29tcGlsZWQubWF0Y2goIiVzICVzIiAlIChzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVs0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FsZV90aW1lLmFfbW9udGhbNF0pKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm91bmQsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwKICAgICAgICAgICAgICJNYXRjaCBmYWlsZWQgd2l0aCAnJXMnIHJlZ2V4IGFuZCAnJXMnIHN0cmluZyIgJQogICAgICAgICAgICAgIChjb21waWxlZC5wYXR0ZXJuLCAiJXMgJXMiICUgKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9jYWxlX3RpbWUuYV9tb250aFs0XSkpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm91bmQuZ3JvdXAoJ2EnKSA9PSBzZWxmLmxvY2FsZV90aW1lLmFfd2Vla2RheVs0XSBhbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLmdyb3VwKCdhJykgPT0gc2VsZi5sb2NhbGVfdGltZS5hX3dlZWtkYXlbNF0gYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuZ3JvdXAoJ2InKSA9PSBzZWxmLmxvY2FsZV90aW1lLmFfbW9udGhbNF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAicmUgb2JqZWN0IGNvdWxkbid0IGZpbmQgdGhlIGFiYnJldmlhdGVkIHdlZWtkYXkgbW9udGggaW4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIHVzaW5nICclcyc7IGdyb3VwICdhJyA9ICclcycsIGdyb3VwICdiJyA9ICVzJyIgJQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICdVJywndycsJ1cnLCd4JywnWCcsJ3knLCdZJywnWicsJyUnKToKICAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi50aW1lX3JlLmNvbXBpbGUoIiUiICsgZGlyZWN0aXZlKQogICAgICAgICAgICAgZm91bmQgPSBjb21waWxlZC5tYXRjaCh0aW1lLnN0cmZ0aW1lKCIlIiArIGRpcmVjdGl2ZSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZm91bmQsICJNYXRjaGluZyBmYWlsZWQgb24gJyVzJyB1c2luZyAnJXMnIHJlZ2V4IiAlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQsICJNYXRjaGluZyBmYWlsZWQgb24gJyVzJyB1c2luZyAnJXMnIHJlZ2V4IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGltZS5zdHJmdGltZSgiJSIgKyBkaXJlY3RpdmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkLnBhdHRlcm4pKQogCkBAIC0xNjgsMTQgKzE2OCwxNCBAQAogICAgICAgICAjIEZpeGVzIGJ1ZyAjNjYxMzU0CiAgICAgICAgIHRlc3RfbG9jYWxlID0gX3N0cnB0aW1lLkxvY2FsZVRpbWUoKQogICAgICAgICB0ZXN0X2xvY2FsZS50aW1lem9uZSA9IChmcm96ZW5zZXQoKSwgZnJvemVuc2V0KCkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhfc3RycHRpbWUuVGltZVJFKHRlc3RfbG9jYWxlKS5wYXR0ZXJuKCIlWiIpID09ICcnLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLlRpbWVSRSh0ZXN0X2xvY2FsZSkucGF0dGVybigiJVoiKSA9PSAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIHRpbWV6b25lID09ICgnJywnJyksIFRpbWVSRSgpLnBhdHRlcm4oJyVaJykgIT0gJyciKQogCiAgICAgZGVmIHRlc3RfbWF0Y2hpbmdfd2l0aF9lc2NhcGVzKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBhIGZvcm1hdCB0aGF0IHJlcXVpcmVzIGVzY2FwaW5nIG9mIGNoYXJhY3RlcnMgd29ya3MKICAgICAgICAgY29tcGlsZWRfcmUgPSBzZWxmLnRpbWVfcmUuY29tcGlsZSgiXHcrICVtIikKICAgICAgICAgZm91bmQgPSBjb21waWxlZF9yZS5tYXRjaCgiXHcrIDEwIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGZvdW5kLCAiRXNjYXBpbmcgZmFpbGVkIG9mIGZvcm1hdCAnXHcrIDEwJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgIkVzY2FwaW5nIGZhaWxlZCBvZiBmb3JtYXQgJ1x3KyAxMCciKQogCiAgICAgZGVmIHRlc3RfbG9jYWxlX2RhdGFfd19yZWdleF9tZXRhY2hhcmFjdGVycyhzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGlmIGxvY2FsZSBkYXRhIGNvbnRhaW5zIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzIHRoZXkgYXJlCkBAIC0xODYsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRva3lvIChzdGFuZGFyZCB0aW1lKSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KCJUb2t5byAoZGF5bGlnaHQgdGltZSkiKSkKICAgICAgICAgdGltZV9yZSA9IF9zdHJwdGltZS5UaW1lUkUobG9jYWxlX3RpbWUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lX3JlLmNvbXBpbGUoIiVaIikubWF0Y2goIlRva3lvIChzdGFuZGFyZCB0aW1lKSIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZV9yZS5jb21waWxlKCIlWiIpLm1hdGNoKCJUb2t5byAoc3RhbmRhcmQgdGltZSkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGUgZGF0YSB0aGF0IGNvbnRhaW5zIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzIGlzIG5vdCIKICAgICAgICAgICAgICAgICAgICAgICAgICIgcHJvcGVybHkgZXNjYXBlZCIpCiAKQEAgLTE5NSw4ICsxOTUsOCBAQAogICAgICAgICAjIHNvIGFzIHRvIG5vdCBhbGxvdyB0byBzdWJwYXR0ZXJucyB0byBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGFuZAogICAgICAgICAjICJzdGVhbCIgY2hhcmFjdGVycyBmcm9tIGVhY2ggb3RoZXIuCiAgICAgICAgIHBhdHRlcm4gPSBzZWxmLnRpbWVfcmUucGF0dGVybignJWogJUgnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IHJlLm1hdGNoKHBhdHRlcm4sICIxODAiKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlLm1hdGNoKHBhdHRlcm4sICIxOCAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcmUubWF0Y2gocGF0dGVybiwgIjE4MCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocGF0dGVybiwgIjE4IDAiKSkKIAogCiBjbGFzcyBTdHJwdGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICAgICAiIiJIZWxwZXIgZnhuIGluIHRlc3RpbmcuIiIiCiAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJSIgKyBkaXJlY3RpdmUsIHNlbGYudGltZV90dXBsZSkKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQsICIlIiArIGRpcmVjdGl2ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0W3Bvc2l0aW9uXSA9PSBzZWxmLnRpbWVfdHVwbGVbcG9zaXRpb25dLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbcG9zaXRpb25dID09IHNlbGYudGltZV90dXBsZVtwb3NpdGlvbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyBvZiAnJXMnIGRpcmVjdGl2ZSBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlyZWN0aXZlLCBzdHJmX291dHB1dCwgc3RycF9vdXRwdXRbcG9zaXRpb25dLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVfdHVwbGVbcG9zaXRpb25dKSkKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgZm9yIGJvdW5kIGluIGJvdW5kczoKICAgICAgICAgICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShib3VuZCwgJyV5JykKICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSBjZW50dXJ5ICsgaW50KGJvdW5kKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJwX291dHB1dFswXSA9PSBleHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzBdID09IGV4cGVjdGVkX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIid5JyB0ZXN0IGZhaWxlZDsgcGFzc2VkIGluICclcycgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHJldHVybmVkICclcyciICUgKGJvdW5kLCBzdHJwX291dHB1dFswXSkpCiAKQEAgLTI2MSw3ICsyNjEsNyBAQAogICAgICAgICBzZWxmLmhlbHBlcignSCcsIDMpCiAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJUkgJXAiLCBzZWxmLnRpbWVfdHVwbGUpCiAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJUkgJXAiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXRbM10gPT0gc2VsZi50aW1lX3R1cGxlWzNdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbM10gPT0gc2VsZi50aW1lX3R1cGxlWzNdLAogICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rpbmcgb2YgJyUlSSAlJXAnIGRpcmVjdGl2ZSBmYWlsZWQ7ICclcycgLT4gJXMgIT0gJXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZl9vdXRwdXQsIHN0cnBfb3V0cHV0WzNdLCBzZWxmLnRpbWVfdHVwbGVbM10pKQogCkBAIC0yOTUsMzAgKzI5NSwyNSBAQAogICAgICAgICAjIENoZWNrIGZvciBlcXVhbCB0aW1lem9uZSBuYW1lcyBkZWFscyB3aXRoIGJhZCBsb2NhbGUgaW5mbyB3aGVuIHRoaXMKICAgICAgICAgIyBvY2N1cnM7IGZpcnN0IGZvdW5kIGluIEZyZWVCU0QgNC40LgogICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiVVRDIiwgIiVaIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoc3RycF9vdXRwdXQudG1faXNkc3QsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RycF9vdXRwdXQudG1faXNkc3QsIDApCiAgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCJHTVQiLCAiJVoiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJtYWMiOgotICAgICAgICAgICAgIyBUaW1lem9uZXMgZG9uJ3QgcmVhbGx5IHdvcmsgb24gTWFjT1M5Ci0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKICAgICAgICAgdGltZV90dXBsZSA9IHRpbWUubG9jYWx0aW1lKCkKICAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlWiIpICAjVVRDIGRvZXMgbm90IGhhdmUgYSB0aW1lem9uZQogICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiVaIikKICAgICAgICAgbG9jYWxlX3RpbWUgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCiAgICAgICAgIGlmIHRpbWUudHpuYW1lWzBdICE9IHRpbWUudHpuYW1lWzFdIG9yIG5vdCB0aW1lLmRheWxpZ2h0OgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0WzhdID09IHRpbWVfdHVwbGVbOF0sCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbOF0gPT0gdGltZV90dXBsZVs4XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXpvbmUgY2hlY2sgZmFpbGVkOyAnJXMnIC0+ICVzICE9ICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJmX291dHB1dCwgc3RycF9vdXRwdXRbOF0sIHRpbWVfdHVwbGVbOF0pKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0WzhdID09IC0xLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzhdID09IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb2NhbGVUaW1lKCkudGltZXpvbmUgaGFzIGR1cGxpY2F0ZSB2YWx1ZXMgYW5kICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWUuZGF5bGlnaHQgYnV0IHRpbWV6b25lIHZhbHVlIG5vdCBzZXQgdG8gLTEiKQogCiAgICAgZGVmIHRlc3RfYmFkX3RpbWV6b25lKHNlbGYpOgogICAgICAgICAjIEV4cGxpY2l0bHkgdGVzdCBwb3NzaWJpbGl0eSBvZiBiYWQgdGltZXpvbmU7CiAgICAgICAgICMgd2hlbiB0aW1lLnR6bmFtZVswXSA9PSB0aW1lLnR6bmFtZVsxXSBhbmQgdGltZS5kYXlsaWdodAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIm1hYyI6Ci0gICAgICAgICAgICByZXR1cm4gI01hY09TOSBoYXMgc2V2ZXJlbHkgYnJva2VuIHRpbWV6b25lIHN1cHBvcnQuCiAgICAgICAgIHR6X25hbWUgPSB0aW1lLnR6bmFtZVswXQogICAgICAgICBpZiB0el9uYW1lLnVwcGVyKCkgaW4gKCJVVEMiLCAiR01UIik6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTMyOCw3ICszMjMsNyBAQAogICAgICAgICAgICAgdGltZS50em5hbWUgPSAodHpfbmFtZSwgdHpfbmFtZSkKICAgICAgICAgICAgIHRpbWUuZGF5bGlnaHQgPSAxCiAgICAgICAgICAgICB0el92YWx1ZSA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0el9uYW1lLCAiJVoiKVs4XQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodHpfdmFsdWUsIC0xLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0el92YWx1ZSwgLTEsCiAgICAgICAgICAgICAgICAgICAgICIlcyBsZWFkIHRvIGEgdGltZXpvbmUgdmFsdWUgb2YgJXMgaW5zdGVhZCBvZiAtMSB3aGVuICIKICAgICAgICAgICAgICAgICAgICAgInRpbWUuZGF5bGlnaHQgc2V0IHRvICVzIGFuZCBwYXNzaW5nIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICh0aW1lLnR6bmFtZSwgdHpfdmFsdWUsIHRpbWUuZGF5bGlnaHQsIHR6X25hbWUpKQpAQCAtMzU1LDI1ICszNTAsMjUgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgJSBzaWducyBhcmUgaGFuZGxlZCBwcm9wZXJseQogICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVtICUlICVZIiwgc2VsZi50aW1lX3R1cGxlKQogICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiVtICUlICVZIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cnBfb3V0cHV0WzBdID09IHNlbGYudGltZV90dXBsZVswXSBhbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzBdID09IHNlbGYudGltZV90dXBsZVswXSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwX291dHB1dFsxXSA9PSBzZWxmLnRpbWVfdHVwbGVbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZGxpbmcgb2YgcGVyY2VudCBzaWduIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9jYXNlaW5zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgICMgU2hvdWxkIGhhbmRsZSBuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkuCiAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJUIiLCBzZWxmLnRpbWVfdHVwbGUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQudXBwZXIoKSwgIiVCIiksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQudXBwZXIoKSwgIiVCIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RycHRpbWUgZG9lcyBub3QgaGFuZGxlIEFMTC1DQVBTIG5hbWVzIHByb3Blcmx5IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC5sb3dlcigpLCAiJUIiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC5sb3dlcigpLCAiJUIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJwdGltZSBkb2VzIG5vdCBoYW5kbGUgbG93ZXJjYXNlIG5hbWVzIHByb3Blcmx5IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC5jYXBpdGFsaXplKCksICIlQiIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LmNhcGl0YWxpemUoKSwgIiVCIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RycHRpbWUgZG9lcyBub3QgaGFuZGxlIGNhcHdvcmQgbmFtZXMgcHJvcGVybHkiKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdHMoc2VsZik6CiAgICAgICAgICMgRGVmYXVsdCByZXR1cm4gdmFsdWUgc2hvdWxkIGJlICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwKQogICAgICAgICBkZWZhdWx0cyA9ICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEnLCAnJW0nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Moc3RycF9vdXRwdXQgPT0gZGVmYXVsdHMsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dCA9PSBkZWZhdWx0cywKICAgICAgICAgICAgICAgICAgICAgICAgICJEZWZhdWx0IHZhbHVlcyBmb3Igc3RycHRpbWUoKSBhcmUgaW5jb3JyZWN0OyIKICAgICAgICAgICAgICAgICAgICAgICAgICIgJXMgIT0gJXMiICUgKHN0cnBfb3V0cHV0LCBkZWZhdWx0cykpCiAKQEAgLTM4NCw3ICszNzksNyBAQAogICAgICAgICAjIGVzY2FwZWQuCiAgICAgICAgICMgVGVzdCBpbnN0aWdhdGVkIGJ5IGJ1ZyAjNzk2MTQ5IC4KICAgICAgICAgbmVlZF9lc2NhcGluZyA9ICIuXiQqKz97fVxbXXwpKCIKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShuZWVkX2VzY2FwaW5nLCBuZWVkX2VzY2FwaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShuZWVkX2VzY2FwaW5nLCBuZWVkX2VzY2FwaW5nKSkKIAogY2xhc3MgU3RycHRpbWUxMkFNUE1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBhIF9zdHJwdGltZSByZWdyZXNzaW9uIGluICclSSAlcCcgYXQgMTIgbm9vbiAoMTIgUE0pIiIiCkBAIC00MTcsNyArNDEyLDcgQEAKICAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlbSAlZCAlSCAlTSAlUyAldyAlWiIKICAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQudG1feWRheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1feWRheSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC50bV95ZGF5ID09IHNlbGYudGltZV90dXBsZS50bV95ZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGN1bGF0aW9uIG9mIHRtX3lkYXkgZmFpbGVkOyAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQudG1feWRheSwgc2VsZi50aW1lX3R1cGxlLnRtX3lkYXkpKQogCkBAIC00MjYsNyArNDIxLDcgQEAKICAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlSCAlTSAlUyAldyAlaiAlWiIKICAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQudG1feWVhciA9PSBzZWxmLnRpbWVfdHVwbGUudG1feWVhciBhbmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC50bV95ZWFyID09IHNlbGYudGltZV90dXBsZS50bV95ZWFyIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50bV9tb24gPT0gc2VsZi50aW1lX3R1cGxlLnRtX21vbiBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudG1fbWRheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1fbWRheSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYWxjdWxhdGlvbiBvZiBHcmVnb3JpYW4gZGF0ZSBmYWlsZWQ7IgpAQCAtNDQwLDcgKzQzNSw3IEBACiAgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAiJVkgJW0gJWQgJUggJVMgJWogJVoiCiAgICAgICAgIHJlc3VsdCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0aW1lLnN0cmZ0aW1lKGZvcm1hdF9zdHJpbmcsIHNlbGYudGltZV90dXBsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0LnRtX3dkYXkgPT0gc2VsZi50aW1lX3R1cGxlLnRtX3dkYXksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQudG1fd2RheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1fd2RheSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYWxjdWxhdGlvbiBvZiBkYXkgb2YgdGhlIHdlZWsgZmFpbGVkOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIT0gJXMiICUgKHJlc3VsdC50bV93ZGF5LCBzZWxmLnRpbWVfdHVwbGUudG1fd2RheSkpCiAKQEAgLTQ1Myw3ICs0NDgsNyBAQAogICAgICAgICAgICAgICAgIGR0X2RhdGUgPSBkYXRldGltZV9kYXRlKCp5bWRfdHVwbGUpCiAgICAgICAgICAgICAgICAgc3RycF9pbnB1dCA9IGR0X2RhdGUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZykKICAgICAgICAgICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJwX2lucHV0LCBmb3JtYXRfc3RyaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHJwX291dHB1dFs6M10gPT0geW1kX3R1cGxlLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFs6M10gPT0geW1kX3R1cGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCVzKSB0ZXN0IGZhaWxlZCB3LyAnJXMnOiAlcyAhPSAlcyAoJXMgIT0gJXMpIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfcmVhc29uLCBkaXJlY3RpdmUsIHN0cnBfaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0WzozXSwgeW1kX3R1cGxlLApAQCAtNDk0LDEwICs0ODksMTAgQEAKICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIxMCIsICIlZCIpCiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMjAwNSIsICIlWSIpCiAgICAgICAgIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lLmxhbmcgPSAiTmkiCi0gICAgICAgIG9yaWdpbmFsX3RpbWVfcmUgPSBpZChfc3RycHRpbWUuX1RpbWVSRV9jYWNoZSkKKyAgICAgICAgb3JpZ2luYWxfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKG9yaWdpbmFsX3RpbWVfcmUsIGlkKF9zdHJwdGltZS5fVGltZVJFX2NhY2hlKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdpbmFsX3RpbWVfcmUsIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihfc3RycHRpbWUuX3JlZ2V4X2NhY2hlKSwgMSkKIAogICAgIGRlZiB0ZXN0X3JlZ2V4X2NsZWFudXAoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIGNhY2hlZCByZWdleGVzIGFyZSBkaXNjYXJkZWQgd2hlbiBjYWNoZSBiZWNvbWVzICJmdWxsIi4KQEAgLTUxMCwxNiArNTA1LDE1IEBACiAgICAgICAgICAgICBfc3RycHRpbWUuX3JlZ2V4X2NhY2hlW2JvZ3VzX2tleV0gPSBOb25lCiAgICAgICAgICAgICBib2d1c19rZXkgKz0gMQogICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjEwIiwgIiVkIikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihfc3RycHRpbWUuX3JlZ2V4X2NhY2hlKSwgMSkKIAogICAgIGRlZiB0ZXN0X25ld19sb2NhbGV0aW1lKHNlbGYpOgogICAgICAgICAjIEEgbmV3IExvY2FsZVRpbWUgaW5zdGFuY2Ugc2hvdWxkIGJlIGNyZWF0ZWQgd2hlbiBhIG5ldyBUaW1lUkUgb2JqZWN0CiAgICAgICAgICMgaXMgY3JlYXRlZC4KLSAgICAgICAgbG9jYWxlX3RpbWVfaWQgPSBpZChfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZSkKKyAgICAgICAgbG9jYWxlX3RpbWVfaWQgPSBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZQogICAgICAgICBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZS5sYW5nID0gIk5pIgogICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjEwIiwgIiVkIikKLSAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChsb2NhbGVfdGltZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpZChfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9jYWxlX3RpbWVfaWQsIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lKQogCiAgICAgZGVmIHRlc3RfVGltZVJFX3JlY3JlYXRpb24oc2VsZik6CiAgICAgICAgICMgVGhlIFRpbWVSRSBpbnN0YW5jZSBzaG91bGQgYmUgcmVjcmVhdGVkIHVwb24gY2hhbmdpbmcgdGhlIGxvY2FsZS4KQEAgLTUzMSwxNSArNTI1LDE1IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgnMTAnLCAnJWQnKQogICAgICAgICAgICAgIyBHZXQgaWQgb2YgY3VycmVudCBjYWNoZSBvYmplY3QuCi0gICAgICAgICAgICBmaXJzdF90aW1lX3JlX2lkID0gaWQoX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUpCisgICAgICAgICAgICBmaXJzdF90aW1lX3JlID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIENoYW5nZSB0aGUgbG9jYWxlIGFuZCBmb3JjZSBhIHJlY3JlYXRpb24gb2YgdGhlIGNhY2hlLgogICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsICgnZGVfREUnLCAnVVRGOCcpKQogICAgICAgICAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgnMTAnLCAnJWQnKQogICAgICAgICAgICAgICAgICMgR2V0IHRoZSBuZXcgY2FjaGUgb2JqZWN0J3MgaWQuCi0gICAgICAgICAgICAgICAgc2Vjb25kX3RpbWVfcmVfaWQgPSBpZChfc3RycHRpbWUuX1RpbWVSRV9jYWNoZSkKKyAgICAgICAgICAgICAgICBzZWNvbmRfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCiAgICAgICAgICAgICAgICAgIyBUaGV5IHNob3VsZCBub3QgYmUgZXF1YWwuCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChmaXJzdF90aW1lX3JlX2lkLCBzZWNvbmRfdGltZV9yZV9pZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGZpcnN0X3RpbWVfcmUsIHNlY29uZF90aW1lX3JlKQogICAgICAgICAgICAgIyBQb3NzaWJsZSB0ZXN0IGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIHdoaWxlIGluaXRpYWwgbG9jYWxlIGlzLgogICAgICAgICAgICAgIyBJZiB0aGlzIGlzIHRoZSBjYXNlIGp1c3Qgc3VwcHJlc3MgdGhlIGV4Y2VwdGlvbiBhbmQgZmFsbC10aHJvdWdoCiAgICAgICAgICAgICAjIHRvIHRoZSByZXNldGluZyB0byB0aGUgb3JpZ2luYWwgbG9jYWxlLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM1OTVkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkKQEAgLTAsMCArMSwzOTkgQEAKKyMgVGVzdHMgZm9yIHRoZSBjb3JyZWN0bHktcm91bmRlZCBzdHJpbmcgLT4gZmxvYXQgY29udmVyc2lvbnMKKyMgaW50cm9kdWNlZCBpbiBQeXRob24gMi43IGFuZCAzLjEuCisKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpZiBnZXRhdHRyKHN5cywgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnJykgIT0gJ3Nob3J0JzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nLT5mbG9hdCBjb252ZXJzaW9ucyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0nKQorCisjIENvcnJlY3RseSByb3VuZGVkIHN0ciAtPiBmbG9hdCBpbiBwdXJlIFB5dGhvbiwgZm9yIGNvbXBhcmlzb24uCisKK3N0cnRvZF9wYXJzZXIgPSByZS5jb21waWxlKHIiIiIgICAgIyBBIG51bWVyaWMgc3RyaW5nIGNvbnNpc3RzIG9mOgorICAgICg/UDxzaWduPlstK10pPyAgICAgICAgICAjIGFuIG9wdGlvbmFsIHNpZ24sIGZvbGxvd2VkIGJ5CisgICAgKD89XGR8XC5cZCkgICAgICAgICAgICAgICMgYSBudW1iZXIgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQKKyAgICAoP1A8aW50PlxkKikgICAgICAgICAgICAgIyBoYXZpbmcgYSAocG9zc2libHkgZW1wdHkpIGludGVnZXIgcGFydAorICAgICg/OlwuKD9QPGZyYWM+XGQqKSk/ICAgICAjIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGZyYWN0aW9uYWwgcGFydAorICAgICg/OkUoP1A8ZXhwPlstK10/XGQrKSk/ICAjIGFuZCBhbiBvcHRpb25hbCBleHBvbmVudAorICAgIFxaCisiIiIsIHJlLlZFUkJPU0UgfCByZS5JR05PUkVDQVNFKS5tYXRjaAorCisjIFB1cmUgUHl0aG9uIHZlcnNpb24gb2YgY29ycmVjdGx5IHJvdW5kZWQgc3RyaW5nLT5mbG9hdCBjb252ZXJzaW9uLgorIyBBdm9pZHMgYW55IHVzZSBvZiBmbG9hdGluZy1wb2ludCBieSByZXR1cm5pbmcgdGhlIHJlc3VsdCBhcyBhIGhleCBzdHJpbmcuCitkZWYgc3RydG9kKHMsIG1hbnRfZGlnPTUzLCBtaW5fZXhwID0gLTEwMjEsIG1heF9leHAgPSAxMDI0KToKKyAgICAiIiJDb252ZXJ0IGEgZmluaXRlIGRlY2ltYWwgc3RyaW5nIHRvIGEgaGV4IHN0cmluZyByZXByZXNlbnRpbmcgYW4KKyAgICBJRUVFIDc1NCBiaW5hcnk2NCBmbG9hdC4gIFJldHVybiAnaW5mJyBvciAnLWluZicgb24gb3ZlcmZsb3cuCisgICAgVGhpcyBmdW5jdGlvbiBtYWtlcyBubyB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBhdCBhbnkKKyAgICBzdGFnZS4iIiIKKworICAgICMgcGFyc2Ugc3RyaW5nIGludG8gYSBwYWlyIG9mIGludGVnZXJzICdhJyBhbmQgJ2InIHN1Y2ggdGhhdAorICAgICMgYWJzKGRlY2ltYWwgdmFsdWUpID0gYS9iLCBhbG9uZyB3aXRoIGEgYm9vbGVhbiAnbmVnYXRpdmUnLgorICAgIG0gPSBzdHJ0b2RfcGFyc2VyKHMpCisgICAgaWYgbSBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIG51bWVyaWMgc3RyaW5nJykKKyAgICBmcmFjdGlvbiA9IG0uZ3JvdXAoJ2ZyYWMnKSBvciAnJworICAgIGludHBhcnQgPSBpbnQobS5ncm91cCgnaW50JykgKyBmcmFjdGlvbikKKyAgICBleHAgPSBpbnQobS5ncm91cCgnZXhwJykgb3IgJzAnKSAtIGxlbihmcmFjdGlvbikKKyAgICBuZWdhdGl2ZSA9IG0uZ3JvdXAoJ3NpZ24nKSA9PSAnLScKKyAgICBhLCBiID0gaW50cGFydCoxMCoqbWF4KGV4cCwgMCksIDEwKiptYXgoMCwgLWV4cCkKKworICAgICMgcXVpY2sgcmV0dXJuIGZvciB6ZXJvcworICAgIGlmIG5vdCBhOgorICAgICAgICByZXR1cm4gJy0weDAuMHArMCcgaWYgbmVnYXRpdmUgZWxzZSAnMHgwLjBwKzAnCisKKyAgICAjIGNvbXB1dGUgZXhwb25lbnQgZSBmb3IgcmVzdWx0OyBtYXkgYmUgb25lIHRvbyBzbWFsbCBpbiB0aGUgY2FzZQorICAgICMgdGhhdCB0aGUgcm91bmRlZCB2YWx1ZSBvZiBhL2IgbGllcyBpbiBhIGRpZmZlcmVudCBiaW5hZGUgZnJvbSBhL2IKKyAgICBkID0gYS5iaXRfbGVuZ3RoKCkgLSBiLmJpdF9sZW5ndGgoKQorICAgIGQgKz0gKGEgPj4gZCBpZiBkID49IDAgZWxzZSBhIDw8IC1kKSA+PSBiCisgICAgZSA9IG1heChkLCBtaW5fZXhwKSAtIG1hbnRfZGlnCisKKyAgICAjIGFwcHJveGltYXRlIGEvYiBieSBudW1iZXIgb2YgdGhlIGZvcm0gcSAqIDIqKmU7IGFkanVzdCBlIGlmIG5lY2Vzc2FyeQorICAgIGEsIGIgPSBhIDw8IG1heCgtZSwgMCksIGIgPDwgbWF4KGUsIDApCisgICAgcSwgciA9IGRpdm1vZChhLCBiKQorICAgIGlmIDIqciA+IGIgb3IgMipyID09IGIgYW5kIHEgJiAxOgorICAgICAgICBxICs9IDEKKyAgICAgICAgaWYgcS5iaXRfbGVuZ3RoKCkgPT0gbWFudF9kaWcrMToKKyAgICAgICAgICAgIHEgLy89IDIKKyAgICAgICAgICAgIGUgKz0gMQorCisgICAgIyBkb3VibGUgY2hlY2sgdGhhdCAocSwgZSkgaGFzIHRoZSByaWdodCBmb3JtCisgICAgYXNzZXJ0IHEuYml0X2xlbmd0aCgpIDw9IG1hbnRfZGlnIGFuZCBlID49IG1pbl9leHAgLSBtYW50X2RpZworICAgIGFzc2VydCBxLmJpdF9sZW5ndGgoKSA9PSBtYW50X2RpZyBvciBlID09IG1pbl9leHAgLSBtYW50X2RpZworCisgICAgIyBjaGVjayBmb3Igb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdworICAgIGlmIGUgKyBxLmJpdF9sZW5ndGgoKSA+IG1heF9leHA6CisgICAgICAgIHJldHVybiAnLWluZicgaWYgbmVnYXRpdmUgZWxzZSAnaW5mJworICAgIGlmIG5vdCBxOgorICAgICAgICByZXR1cm4gJy0weDAuMHArMCcgaWYgbmVnYXRpdmUgZWxzZSAnMHgwLjBwKzAnCisKKyAgICAjIGZvciBoZXggcmVwcmVzZW50YXRpb24sIHNoaWZ0IHNvICMgYml0cyBhZnRlciBwb2ludCBpcyBhIG11bHRpcGxlIG9mIDQKKyAgICBoZXhkaWdzID0gMSArIChtYW50X2RpZy0yKS8vNAorICAgIHNoaWZ0ID0gMyAtIChtYW50X2RpZy0yKSU0CisgICAgcSwgZSA9IHEgPDwgc2hpZnQsIGUgLSBzaGlmdAorICAgIHJldHVybiAne30weHs6eH0uezowe314fXB7OitkfScuZm9ybWF0KAorICAgICAgICAnLScgaWYgbmVnYXRpdmUgZWxzZSAnJywKKyAgICAgICAgcSAvLyAxNioqaGV4ZGlncywKKyAgICAgICAgcSAlIDE2KipoZXhkaWdzLAorICAgICAgICBoZXhkaWdzLAorICAgICAgICBlICsgNCpoZXhkaWdzKQorCitURVNUX1NJWkUgPSAxMAorCitjbGFzcyBTdHJ0b2RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrX3N0cnRvZChzZWxmLCBzKToKKyAgICAgICAgIiIiQ29tcGFyZSB0aGUgcmVzdWx0IG9mIFB5dGhvbidzIGJ1aWx0aW4gY29ycmVjdGx5IHJvdW5kZWQKKyAgICAgICAgc3RyaW5nLT5mbG9hdCBjb252ZXJzaW9uICh1c2luZyBmbG9hdCkgdG8gYSBwdXJlIFB5dGhvbgorICAgICAgICBjb3JyZWN0bHkgcm91bmRlZCBzdHJpbmctPmZsb2F0IGltcGxlbWVudGF0aW9uLiAgRmFpbCBpZiB0aGUKKyAgICAgICAgdHdvIG1ldGhvZHMgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cy4iIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmcyA9IGZsb2F0KHMpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgZ290ID0gJy1pbmYnIGlmIHNbMF0gPT0gJy0nIGVsc2UgJ2luZicKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgZ290ID0gJ21lbW9yeSBlcnJvcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdvdCA9IGZzLmhleCgpCisgICAgICAgIGV4cGVjdGVkID0gc3RydG9kKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb3JyZWN0bHkgcm91bmRlZCBzdHItPmZsb2F0IGNvbnZlcnNpb24gZm9yIHt9OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHt9LCBnb3Qge30iLmZvcm1hdChzLCBleHBlY3RlZCwgZ290KSkKKworICAgIGRlZiB0ZXN0X3Nob3J0X2hhbGZ3YXlfY2FzZXMoc2VsZik6CisgICAgICAgICMgZXhhY3QgaGFsZndheSBjYXNlcyB3aXRoIGEgc21hbGwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cworICAgICAgICBmb3IgayBpbiAwLCA1LCAxMCwgMTUsIDIwOgorICAgICAgICAgICAgIyB1cHBlciA9IHNtYWxsZXN0IGludGVnZXIgPj0gMioqNTQvNSoqaworICAgICAgICAgICAgdXBwZXIgPSAtKC0yKio1NC8vNSoqaykKKyAgICAgICAgICAgICMgbG93ZXIgPSBzbWFsbGVzdCBvZGQgbnVtYmVyID49IDIqKjUzLzUqKmsKKyAgICAgICAgICAgIGxvd2VyID0gLSgtMioqNTMvLzUqKmspCisgICAgICAgICAgICBpZiBsb3dlciAlIDIgPT0gMDoKKyAgICAgICAgICAgICAgICBsb3dlciArPSAxCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICAjIFNlbGVjdCBhIHJhbmRvbSBvZGQgbiBpbiBbMioqNTMvNSoqaywKKyAgICAgICAgICAgICAgICAjIDIqKjU0LzUqKmspLiBUaGVuIG4gKiAxMCoqayBnaXZlcyBhIGhhbGZ3YXkgY2FzZQorICAgICAgICAgICAgICAgICMgd2l0aCBzbWFsbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzLgorICAgICAgICAgICAgICAgIG4sIGUgPSByYW5kb20ucmFuZHJhbmdlKGxvd2VyLCB1cHBlciwgMiksIGsKKworICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBvd2VycyBvZiA1LgorICAgICAgICAgICAgICAgIHdoaWxlIG4gJSA1ID09IDA6CisgICAgICAgICAgICAgICAgICAgIG4sIGUgPSBuIC8vIDUsIGUgKyAxCisgICAgICAgICAgICAgICAgYXNzZXJ0IG4gJSAxMCBpbiAoMSwgMywgNywgOSkKKworICAgICAgICAgICAgICAgICMgVHJ5IG51bWJlcnMgb2YgdGhlIGZvcm0gbiAqIDIqKnAyICogMTAqKmUsIHAyID49IDAsCisgICAgICAgICAgICAgICAgIyB1bnRpbCBuICogMioqcDIgaGFzIG1vcmUgdGhhbiAyMCBzaWduaWZpY2FudCBkaWdpdHMuCisgICAgICAgICAgICAgICAgZGlnaXRzLCBleHBvbmVudCA9IG4sIGUKKyAgICAgICAgICAgICAgICB3aGlsZSBkaWdpdHMgPCAxMCoqMjA6CisgICAgICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgICAgICAjIFNhbWUgYWdhaW4sIGJ1dCB3aXRoIGV4dHJhIHRyYWlsaW5nIHplcm9zLgorICAgICAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzICogMTAqKjQwLCBleHBvbmVudCAtIDQwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgICAgICBkaWdpdHMgKj0gMgorCisgICAgICAgICAgICAgICAgIyBUcnkgbnVtYmVycyBvZiB0aGUgZm9ybSBuICogNSoqcDIgKiAxMCoqKGUgLSBwNSksIHA1CisgICAgICAgICAgICAgICAgIyA+PSAwLCB3aXRoIG4gKiA1KipwNSA8IDEwKioyMC4KKyAgICAgICAgICAgICAgICBkaWdpdHMsIGV4cG9uZW50ID0gbiwgZQorICAgICAgICAgICAgICAgIHdoaWxlIGRpZ2l0cyA8IDEwKioyMDoKKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgICMgU2FtZSBhZ2FpbiwgYnV0IHdpdGggZXh0cmEgdHJhaWxpbmcgemVyb3MuCisgICAgICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMgKiAxMCoqNDAsIGV4cG9uZW50IC0gNDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyAqPSA1CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50IC09IDEKKworICAgIGRlZiB0ZXN0X2hhbGZ3YXlfY2FzZXMoc2VsZik6CisgICAgICAgICMgdGVzdCBoYWxmd2F5IGNhc2VzIGZvciB0aGUgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCAqIFRFU1RfU0laRSk6CisgICAgICAgICAgICAjIGJpdCBwYXR0ZXJuIGZvciBhIHJhbmRvbSBmaW5pdGUgcG9zaXRpdmUgKG9yICswLjApIGZsb2F0CisgICAgICAgICAgICBiaXRzID0gcmFuZG9tLnJhbmRyYW5nZSgyMDQ3KjIqKjUyKQorCisgICAgICAgICAgICAjIGNvbnZlcnQgYml0IHBhdHRlcm4gdG8gYSBudW1iZXIgb2YgdGhlIGZvcm0gbSAqIDIqKmUKKyAgICAgICAgICAgIGUsIG0gPSBkaXZtb2QoYml0cywgMioqNTIpCisgICAgICAgICAgICBpZiBlOgorICAgICAgICAgICAgICAgIG0sIGUgPSBtICsgMioqNTIsIGUgLSAxCisgICAgICAgICAgICBlIC09IDEwNzQKKworICAgICAgICAgICAgIyBhZGQgMC41IHVscHMKKyAgICAgICAgICAgIG0sIGUgPSAyKm0gKyAxLCBlIC0gMQorCisgICAgICAgICAgICAjIGNvbnZlcnQgdG8gYSBkZWNpbWFsIHN0cmluZworICAgICAgICAgICAgaWYgZSA+PSAwOgorICAgICAgICAgICAgICAgIGRpZ2l0cyA9IG0gPDwgZQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIG0gKiAyKiplID0gKG0gKiA1KiotZSkgKiAxMCoqZQorICAgICAgICAgICAgICAgIGRpZ2l0cyA9IG0gKiA1KiotZQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gZQorICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cywgZXhwb25lbnQpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorCisgICAgZGVmIHRlc3RfYm91bmRhcmllcyhzZWxmKToKKyAgICAgICAgIyBib3VuZGFyaWVzIGV4cHJlc3NlZCBhcyB0cmlwbGVzIChuLCBlLCB1KSwgd2hlcmUKKyAgICAgICAgIyBuKjEwKiplIGlzIGFuIGFwcHJveGltYXRpb24gdG8gdGhlIGJvdW5kYXJ5IHZhbHVlIGFuZAorICAgICAgICAjIHUqMTAqKmUgaXMgMXVscAorICAgICAgICBib3VuZGFyaWVzID0gWworICAgICAgICAgICAgKDEwMDAwMDAwMDAwMDAwMDAwMDAwLCAtMTksIDExMTApLCAgICMgYSBwb3dlciBvZiAyIGJvdW5kYXJ5ICgxLjApCisgICAgICAgICAgICAoMTc5NzY5MzEzNDg2MjMxNTkwNzcsIDI4OSwgMTk5NSksICAgIyBvdmVyZmxvdyBib3VuZGFyeSAoMi4qKjEwMjQpCisgICAgICAgICAgICAoMjIyNTA3Mzg1ODUwNzIwMTM4MzEsIC0zMjcsIDQ5NDEpLCAgIyBub3JtYWwvc3Vibm9ybWFsICgyLioqLTEwMjIpCisgICAgICAgICAgICAoMCwgLTMyNywgNDk0MSksICAgICAgICAgICAgICAgICAgICAgIyB6ZXJvCisgICAgICAgICAgICBdCisgICAgICAgIGZvciBuLCBlLCB1IGluIGJvdW5kYXJpZXM6CisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gbiArIHJhbmRvbS5yYW5kcmFuZ2UoLTMqdSwgMyp1KQorICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gZQorICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisgICAgICAgICAgICAgICAgbiAqPSAxMAorICAgICAgICAgICAgICAgIHUgKj0gMTAKKyAgICAgICAgICAgICAgICBlIC09IDEKKworICAgIGRlZiB0ZXN0X3VuZGVyZmxvd19ib3VuZGFyeShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHZhbHVlcyBjbG9zZSB0byAyKiotMTA3NSwgdGhlIHVuZGVyZmxvdyBib3VuZGFyeTsgc2ltaWxhcgorICAgICAgICAjIHRvIGJvdW5kYXJ5X3Rlc3RzLCBleGNlcHQgdGhhdCB0aGUgcmFuZG9tIGVycm9yIGRvZXNuJ3Qgc2NhbGUKKyAgICAgICAgIyB3aXRoIG4KKyAgICAgICAgZm9yIGV4cG9uZW50IGluIHhyYW5nZSgtNDAwLCAtMzIwKToKKyAgICAgICAgICAgIGJhc2UgPSAxMCoqLWV4cG9uZW50IC8vIDIqKjEwNzUKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZShURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgIGRpZ2l0cyA9IGJhc2UgKyByYW5kb20ucmFuZHJhbmdlKC0xMDAwLCAxMDAwKQorICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKKyAgICBkZWYgdGVzdF9iaWdjb21wKHNlbGYpOgorICAgICAgICBmb3IgbmRpZ3MgaW4gNSwgMTAsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCA0MCwgNDEsIDUwOgorICAgICAgICAgICAgZGlnMTAgPSAxMCoqbmRpZ3MKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCAqIFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgZGlnaXRzID0gcmFuZG9tLnJhbmRyYW5nZShkaWcxMCkKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IHJhbmRvbS5yYW5kcmFuZ2UoLTQwMCwgNDAwKQorICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RydG9kKHMpCisKKyAgICBkZWYgdGVzdF9wYXJzaW5nKHNlbGYpOgorICAgICAgICAjIG1ha2UgJzAnIG1vcmUgbGlrZWx5IHRvIGJlIGNob3NlbiB0aGFuIG90aGVyIGRpZ2l0cworICAgICAgICBkaWdpdHMgPSAnMDAwMDAwMTIzNDU2Nzg5JworICAgICAgICBzaWducyA9ICgnKycsICctJywgJycpCisKKyAgICAgICAgIyBwdXQgdG9nZXRoZXIgcmFuZG9tIHNob3J0IHZhbGlkIHN0cmluZ3MKKyAgICAgICAgIyBcZCpbLlxkKl0/ZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICBzID0gcmFuZG9tLmNob2ljZShzaWducykKKyAgICAgICAgICAgICAgICBpbnRwYXJ0X2xlbiA9IHJhbmRvbS5yYW5kcmFuZ2UoNSkKKyAgICAgICAgICAgICAgICBzICs9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShkaWdpdHMpIGZvciBfIGluIHhyYW5nZShpbnRwYXJ0X2xlbikpCisgICAgICAgICAgICAgICAgaWYgcmFuZG9tLmNob2ljZShbVHJ1ZSwgRmFsc2VdKToKKyAgICAgICAgICAgICAgICAgICAgcyArPSAnLicKKyAgICAgICAgICAgICAgICAgICAgZnJhY3BhcnRfbGVuID0gcmFuZG9tLnJhbmRyYW5nZSg1KQorICAgICAgICAgICAgICAgICAgICBzICs9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShkaWdpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoZnJhY3BhcnRfbGVuKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmcmFjcGFydF9sZW4gPSAwCisgICAgICAgICAgICAgICAgaWYgcmFuZG9tLmNob2ljZShbVHJ1ZSwgRmFsc2VdKToKKyAgICAgICAgICAgICAgICAgICAgcyArPSByYW5kb20uY2hvaWNlKFsnZScsICdFJ10pCisgICAgICAgICAgICAgICAgICAgIHMgKz0gcmFuZG9tLmNob2ljZShzaWducykKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnRfbGVuID0gcmFuZG9tLnJhbmRyYW5nZSgxLCA0KQorICAgICAgICAgICAgICAgICAgICBzICs9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShkaWdpdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoZXhwb25lbnRfbGVuKSkKKworICAgICAgICAgICAgICAgIGlmIGludHBhcnRfbGVuICsgZnJhY3BhcnRfbGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHMpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiZXhwZWN0ZWQgVmFsdWVFcnJvciIKKworICAgIGRlZiB0ZXN0X3BhcnRpY3VsYXIoc2VsZik6CisgICAgICAgICMgaW5wdXRzIHRoYXQgcHJvZHVjZWQgY3Jhc2hlcyBvciBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdHMgd2l0aAorICAgICAgICAjIHByZXZpb3VzIHZlcnNpb25zIG9mIGR0b2EuYywgZm9yIHZhcmlvdXMgcmVhc29ucworICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbCisgICAgICAgICAgICAjIGlzc3VlIDc2MzIgYnVnIDEsIG9yaWdpbmFsbHkgcmVwb3J0ZWQgZmFpbGluZyBjYXNlCisgICAgICAgICAgICAnMjE4MzE2NzAxMjMxMjExMjMxMjMxMi4yMzUzODAyMDM3NDQyMDQ0NjE5MmUtMzcwJywKKyAgICAgICAgICAgICMgNSBpbnN0YW5jZXMgb2YgaXNzdWUgNzYzMiBidWcgMgorICAgICAgICAgICAgJzEyNTc5ODE2MDQ5MDA4MzA1NTQ2OTc0MzkxNzY4OTk2MzY5NDY0OTYzMDI0NjYzMTA0ZS0zNTcnLAorICAgICAgICAgICAgJzE3NDg5NjI4NTY1MjAyMTE3MjYzMTQ1MzY3NTk2MDI4Mzg5MzQ4OTIyOTgxODU3MDEzZS0zNTcnLAorICAgICAgICAgICAgJzE4NDg3Mzk4Nzg1OTkxOTk0NjM0MTgyOTE2NjM4NTQyNjgwNzU5NjEzNTkwNDgyMjczZS0zNTcnLAorICAgICAgICAgICAgJzMyMDAyODY0MjAwNTgxMDMzMTM0MzU4NzI0Njc1MTk4MDQ0NTI3NDY5MzY2NzczOTI4ZS0zNTgnLAorICAgICAgICAgICAgJzk0MzkzNDMxMTkzMTgwNjk2OTQyODQxODM3MDg1MDMzNjQ3OTEzMjI0MTQ4NTM5ODU0ZS0zNTgnLAorICAgICAgICAgICAgJzczNjA4Mjc4OTk4OTY2OTY5MzQ1ODI0NjUzNTAwMTM2Nzg3ODc2NDM2MDA1OTU3OTUzZS0zNTgnLAorICAgICAgICAgICAgJzY0Nzc0NDc4ODM2NDE3Mjk5NDkxNzE4NDM1MjM0NjExMjk5MzM2Mjg4MDgyMTM2MDU0ZS0zNTgnLAorICAgICAgICAgICAgJzEzNzA0OTQwMTM0MTI2NTc0NTM0ODc4NjQxODc2OTQ3OTgwODc4ODI0Njg4NDUxMTY5ZS0zNTcnLAorICAgICAgICAgICAgJzQ2Njk3NDQ1Nzc0MDQ3MDYwOTYwNjI0NDk3OTY0NDI1NDE2NjEwNDgwNTI0NzYwNDcxZS0zNTgnLAorICAgICAgICAgICAgIyBmYWlsaW5nIGNhc2UgZm9yIGJ1ZyBpbnRyb2R1Y2VkIGJ5IE1FVEQgaW4gcjc3NDUxIChhdHRlbXB0ZWQKKyAgICAgICAgICAgICMgZml4IGZvciBpc3N1ZSA3NjMyLCBidWcgMiksIGFuZCBmaXhlZCBpbiByNzc0ODIuCisgICAgICAgICAgICAnMjg2MzkwOTcxNzgyNjE3NjMxNzg0ODk3NTkxMDczMjEzOTI3NDUxMDg0OTE4MjUzMDNlLTMxMScsCisgICAgICAgICAgICAjIHR3byBudW1iZXJzIGRlbW9uc3RyYXRpbmcgYSBmbGF3IGluIHRoZSBiaWdjb21wICdkaWcgPT0gMCcKKyAgICAgICAgICAgICMgY29ycmVjdGlvbiBibG9jayAoaXNzdWUgNzYzMiwgYnVnIDMpCisgICAgICAgICAgICAnMS4wMDAwMDAwMDAwMDAwMDAwMWU0NCcsCisgICAgICAgICAgICAnMS4wMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZTQ0JywKKyAgICAgICAgICAgICMgZHRvYS5jIGJ1ZyBmb3IgbnVtYmVycyBqdXN0IHNtYWxsZXIgdGhhbiBhIHBvd2VyIG9mIDIgKGlzc3VlCisgICAgICAgICAgICAjIDc2MzIsIGJ1ZyA0KQorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDg3NjY1NDY1NTU0NzYwNzE3MDM5NTMyNTc4NTQ2ZS00NycsCisgICAgICAgICAgICAjIGZhaWxpbmcgY2FzZSBmb3Igb2ZmLWJ5LW9uZSBlcnJvciBpbnRyb2R1Y2VkIGJ5IE1FVEQgaW4KKyAgICAgICAgICAgICMgcjc3NDgzIChkdG9hLmMgY2xlYW51cCksIGZpeGVkIGluIHI3NzQ5MAorICAgICAgICAgICAgJzk2NTQzNzE3NjMzMzY1NDkzMTc5OTAzNTUxMzY3MTk5NzExODM0NTU3MDA0NTkxNDQ2OScgIy4uLgorICAgICAgICAgICAgJzYyMTM0MTMzNTA4MjE0MTYzMTIxOTQ0MjAwMDc5OTEzMDY5MDg0NzAxNDczMjIwMjAxMjEwMTgzNjhlMCcsCisgICAgICAgICAgICAjIGluY29ycmVjdCBsc2IgZGV0ZWN0aW9uIGZvciByb3VuZC1oYWxmLXRvLWV2ZW4gd2hlbgorICAgICAgICAgICAgIyBiYy0+c2NhbGUgIT0gMCAoaXNzdWUgNzYzMiwgYnVnIDYpLgorICAgICAgICAgICAgJzEwNDMwODQ4NTI0MTk4Mzk5MDY2NjcxMzQwMTcwODA3MjE3NTc3MzE2NTAzNDI3ODY4NScgIy4uLgorICAgICAgICAgICAgJzY4MjY0NjExMTc2MjI5MjQwOTMzMDkyODczOTc1MTcwMjQwNDY1ODE5Nzg3MjMxOTEyOScgIy4uLgorICAgICAgICAgICAgJzAzNjUxOTk0NzQzNTMxOTQxODM4NzgzOTc1ODk5MDQ3ODU0OTQ3Nzc3NzU4NjY3MzA3NScgIy4uLgorICAgICAgICAgICAgJzk0NTg0NDg5NTk4MTAxMjAyNDM4Nzk5MjEzNTYxNzA2NDUzMjE0MTQ4OTI3ODgxNTIzOScgIy4uLgorICAgICAgICAgICAgJzg0OTEwODEwNTk1MTYxOTk5NzgyOTE1MzYzMzUzNTMxNDg0OTk5OTY3NDI2NjE2OTI1OCcgIy4uLgorICAgICAgICAgICAgJzkyODk0MDY5MjIzOTY4NDc3MTU5MDA2NTAyNzAyNTgzNTgwNDg2MzU4NTQ1NDg3MjQ5OScgIy4uLgorICAgICAgICAgICAgJzMyMDUwMDAyMzEyNjE0MjU1MzkzMjY1NDM3MDM2MjAyNDEwNDQ2MjI1NTI0NDAzNDA1MycgIy4uLgorICAgICAgICAgICAgJzIwMzk5ODk2NDM2MDg4MjQ4NzM3ODMzNDg2MDE5NzcyNTEzOTE1MTI2NTU5MDgzMjg4NycgIy4uLgorICAgICAgICAgICAgJzQzMzczNjE4OTQ2ODg1ODYxNDUyMTcwODU2NzY0Njc0MzQ1NTYwMTkwNTkzNTU5NTM4MScgIy4uLgorICAgICAgICAgICAgJzg1MjcyMzcyMzY0NTc5OTg2NjY3MjU1ODU3Njk5Mzk3ODAyNTAzMzU5MDcyODY4NzIwNicgIy4uLgorICAgICAgICAgICAgJzI5NjM3OTgwMTM2MzAyNDA5NDA0ODMyNzI3MzkxMzA3OTYxMjQ2OTk4MjU4NTY3NDgyNCcgIy4uLgorICAgICAgICAgICAgJzE1NjAwMDc4MzE2Nzk2MzA4MTYxNjIxNDcxMDY5MTc1OTg2NDMzMjMzOTIzOTY4ODczNCcgIy4uLgorICAgICAgICAgICAgJzY1NjU0ODc5MDY1NjQ4NjY0NjEwNjk4MzQ1MDgwOTA3Mzc1MDUzNTYyNDg5NDI5NjI0MicgIy4uLgorICAgICAgICAgICAgJzA3MjAxMDE5NTcxMDI3NjA3MzA0MjAzNjQyNTU3OTg1MjQ1OTU1NjE4MzU0MTE5OTAxMicgIy4uLgorICAgICAgICAgICAgJzY1MjU3MTEyMzg5ODk5NjU3NDU2MzgyNDQyNDMzMDk2MDAyNzg3MzUxNjA4Mjc2MzY3MTg3NWUtMTA3NScsCisgICAgICAgICAgICAjIGRlbW9uc3RyYXRpb24gdGhhdCBvcmlnaW5hbCBmaXggZm9yIGlzc3VlIDc2MzIgYnVnIDEgd2FzCisgICAgICAgICAgICAjIGJ1Z2d5OyB0aGUgZXhpdCBjb25kaXRpb24gd2FzIHRvbyBzdHJvbmcKKyAgICAgICAgICAgICcyNDcwMzI4MjI5MjA2MjMyOTVlLTM0MScsCisgICAgICAgICAgICAjIGRlbW9uc3RyYXRlIHNpbWlsYXIgcHJvYmxlbSB0byBpc3N1ZSA3NjMyIGJ1ZzE6IGNyYXNoCisgICAgICAgICAgICAjIHdpdGggJ292ZXJzaXplZCBxdW90aWVudCBpbiBxdW9yZW0nIG1lc3NhZ2UuCisgICAgICAgICAgICAnOTkwMzc0ODU3MDAyNDU2ODMxMDI4MDUwNDM0MzczNDY5NjUyNDgwMjk2MDEyODY0MzFlLTM3MycsCisgICAgICAgICAgICAnOTk2MTc2Mzk4MzM3NDM4NjMxNjExMDk5NjExNjI4ODEwMjc0MDY3Njk1MTA1NTg0NTdlLTM3MycsCisgICAgICAgICAgICAnOTg4NTI5MTUwMjU3NjkzNDUyOTU3NDkyNzgzNTE1NjMxNzk4NDAxMzA1NjU1OTE0NjJlLTM3MicsCisgICAgICAgICAgICAnOTkwNTk5NDQ4Mjc2OTM1Njk2NTkxNTMwNDI3Njk2OTA5MzA5MDUxNDgwMTU4NzY3ODhlLTM3MycsCisgICAgICAgICAgICAnOTg5MTQ5NzkyMDUwNjkzNjgyNzA0MjE4Mjk4ODkwNzgzNTYyNTQwNTk3NjAzMjcxMDFlLTM3MicsCisgICAgICAgICAgICAjIGlzc3VlIDc2MzIgYnVnIDU6IHRoZSBmb2xsb3dpbmcgMiBzdHJpbmdzIGNvbnZlcnQgZGlmZmVyZW50bHkKKyAgICAgICAgICAgICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZS0xNicsCisgICAgICAgICAgICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTE3JywKKyAgICAgICAgICAgICMgaXNzdWUgNzYzMiBidWcgNworICAgICAgICAgICAgJzk5MTYzMzc5MzE4OTE1MDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUtMzMnLAorICAgICAgICAgICAgIyBBbmQgYW5vdGhlciwgc2ltaWxhciwgZmFpbGluZyBoYWxmd2F5IGNhc2UKKyAgICAgICAgICAgICc0MTA2MjUwMTk4MDM5NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZS0zOCcsCisgICAgICAgICAgICAjIGlzc3VlIDc2MzIgYnVnIDg6ICB0aGUgZm9sbG93aW5nIHByb2R1Y2VkIDEwLjAKKyAgICAgICAgICAgICcxMC45MDAwMDAwMDAwMDAwMDAwMTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDUnLAorCisgICAgICAgICAgICAjIHR3byBodW1vbmdvdXMgdmFsdWVzIGZyb20gaXNzdWUgNzc0MworICAgICAgICAgICAgJzExNjUxMjg3NDk0MDU5NDE5NTYzODYxNzkwNzA5MjU2OTg4MTUxOTAzNDc5MzIyOTM4NScgIy4uLgorICAgICAgICAgICAgJzIyODU2OTE2NTE5MTU0MTg5MDg0NjU2NDY2OTc3MTcxNDg5NjkxNjA4NDg4Mzk4NzkyMCcgIy4uLgorICAgICAgICAgICAgJzQ3MzMyMTI2ODEwMDI5Njg1NzYzNjIwMDkyNjA2NTM0MDc2OTY4Mjg2MzM0OTIwNTM2MycgIy4uLgorICAgICAgICAgICAgJzM0OTI0NzYzNzY2MDY3MTc4MzIwOTkwNzk0OTI3MzY4MzA0MDM5Nzk3OTk4NDEwNzgwNicgIy4uLgorICAgICAgICAgICAgJzQ2MTgyMjY5MzMzMjcxMjgyODM5NzYxNzk0NjAzNjIzOTU4MTYzMjk3NjU4NTEwMDYzMycgIy4uLgorICAgICAgICAgICAgJzUyMDI2MDc3MDc2MTA2MDcyNTQwMzkwNDEyMzE0NDM4NDU3MTYxMjA3MzczMjc1NDc3NCcgIy4uLgorICAgICAgICAgICAgJzU4ODIxMTk0NDQwNjQ2NTU3MjU5MTAyMjA4MTk3MzgyODQ0ODkyNzMzODYwMjU1NjI4NycgIy4uLgorICAgICAgICAgICAgJzg1MTgzMTc0NTQxOTM5NzQzMzAxMjQ5MTg4NDg2OTQ1NDQ2MjQ0MDUzNjg5NTA0NzQ5OScgIy4uLgorICAgICAgICAgICAgJzQzNjU1MTk3NDY0OTczMTkxNzE3MDA5OTM4Nzc2Mjg3MTAyMDQwMzU4Mjk5NDE5MzQzOScgIy4uLgorICAgICAgICAgICAgJzc2MTkzMzQxMjE2NjgyMTQ4NDAxNTg4MzYzMTYyMjUzOTMxNDIwMzc5OTAzNDQ5Nzk4MicgIy4uLgorICAgICAgICAgICAgJzEzMDAzODc0MTc0MTcyNzkwNzQyOTU3NTY3MzMwMjQ2MTM4MDM4NjU5NjUwMTE4NzQ4MicgIy4uLgorICAgICAgICAgICAgJzAwNjI1NzUyNzcwOTg0MjE3OTMzNjQ4ODM4MTY3MjgxODc5ODQ1MDIyOTMzOTEyMzUyNycgIy4uLgorICAgICAgICAgICAgJzg1ODg0NDQ0ODMzNjgxNTkxMjAyMDQ1MjI5NDYyNDkxNjk5MzU0NjM4ODk1NjU2MTUyMicgIy4uLgorICAgICAgICAgICAgJzE2MTg3NTM1MjU3MjU5MDQyMDgyMzYwNzQ3ODc4ODM5OTQ2MDE2MjIyODMwODY5Mzc0MicgIy4uLgorICAgICAgICAgICAgJzA1Mjg3NjYzNDQxNDAzNTMzOTQ4MjA0MDg1MzkwODk4Mzk5MDU1MDA0MTE5ODczMDQ2ODc1ZS0xMDc1JywKKworICAgICAgICAgICAgJzUyNTQ0MDY1MzM1Mjk1NTI2NjEwOTY2MTA2MDM1ODIwMjgxOTU2MTI1ODk4NDk2NDkxMycgIy4uLgorICAgICAgICAgICAgJzg5MjI1NjUyNzg0OTc1ODk1NjA0NTIxODI1NzA1OTcxMzc2NTg3NDI1MTQzNjE5MzYxOScgIy4uLgorICAgICAgICAgICAgJzQ0MzI0ODIwNTk5ODg3MDAwMTYzMzg2NTY1NzUxNzQ0NzM1NTk5MjIyNTg1Mjk0NTkxMicgIy4uLgorICAgICAgICAgICAgJzAxNjY2ODY2MDAwMDIxMDI4MzgwNzIwOTg1MDY2MjIyNDQxNzUwNDc1MjI2NDk5NTM2MCcgIy4uLgorICAgICAgICAgICAgJzYzMTUxMjAwNzc1Mzg1NTgwMTA3NTM3MzA1NzYzMjE1NzczODc1MjgwMDg0MDMwMjU5NicgIy4uLgorICAgICAgICAgICAgJzIzNzA1MDI0NzkxMDUzMDUzODI1MDAwODY4MjI3Mjc4MzY2MDc3ODE4MTYyODA0MDczMycgIy4uLgorICAgICAgICAgICAgJzY1MzEyMTQ5MjQzNjQwODgxMjY2ODAyMzQ3ODAwMTIwODUyOTE5MDM1OTI1NDMyMjM0MCcgIy4uLgorICAgICAgICAgICAgJzM5NzU3NTE4NTI0ODg0NDc4ODUxNTQxMDcyMjk1ODc4NDY0MDkyNjUyODU0NDA0MzA5MCcgIy4uLgorICAgICAgICAgICAgJzExNTM1MjUxMzY0MDg4NDk4ODAxNzM0MjQ2OTI3NTAwNjk5OTEwNDUxOTYyMDk0NjQzMCcgIy4uLgorICAgICAgICAgICAgJzgxODc2NzE0Nzk2NjQ5NTQ4NTQwNjU3NzcwMzk3MjY4NzgzODE3Njc3ODk5MzQ3Mjk4OScgIy4uLgorICAgICAgICAgICAgJzU2MTk1OTAwMDA0NzAzNjYzODkzODM5NjMzMzE0NjY4NTEzNzkwMzAxODM3NjQ5NjQwOCcgIy4uLgorICAgICAgICAgICAgJzMxOTcwNTMzMzg2ODQ3NjkyNTI5NzMxNzEzNjUxMzk3MDE4OTA3MzY5MzMxNDcxMDMxOCcgIy4uLgorICAgICAgICAgICAgJzk5MTI1MjgxMTA1MDUwMTQ0ODMyNjg3NTIzMjg1MDYwMDQ1MTc3NjA5MTMwMzA0MzcxNScgIy4uLgorICAgICAgICAgICAgJzE1NzE5MTI5MjgyNzYxNDA0Njg3Njk1MDIyNTcxNDc0MzExODI5MTAzNDc4MDQ2NjMyNScgIy4uLgorICAgICAgICAgICAgJzA4NTE0MTM0MzczNDU2NDkxNTE5MzQyNjk5NDU4NzIwNjQzMjY5NzMzNzExODIxMTUyNycgIy4uLgorICAgICAgICAgICAgJzI3ODk2ODczMTI5NDYzOTM1MzM1NDc3NDc4ODYwMjQ2Nzc5NTE2Nzg3NTExNzQ4MTY2MCcgIy4uLgorICAgICAgICAgICAgJzQ3Mzg3OTEyNTY4NTM2NzU2OTA1NDM2NjMyODM3ODIyMTU4NjY4MjVlLTExODAnLAorCisgICAgICAgICAgICAjIGV4ZXJjaXNlIGV4aXQgY29uZGl0aW9ucyBpbiBiaWdjb21wIGNvbXBhcmlzb24gbG9vcAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODhlMicsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODk2ZTAnLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg5NjAxZS0yJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTVlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODk3ZTAnLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODk5NmUwJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4NjZlMCcsCisgICAgICAgICAgICAjIDIqKjUzCisgICAgICAgICAgICAnOTAwNzE5OTI1NDc0MDk5Mi4wMCcsCisgICAgICAgICAgICAjIDIqKjEwMjQgLSAyKio5NzA6ICBleGFjdCBvdmVyZmxvdyBib3VuZGFyeS4gIEFsbCB2YWx1ZXMKKyAgICAgICAgICAgICMgc21hbGxlciB0aGFuIHRoaXMgc2hvdWxkIHJvdW5kIHRvIHNvbWV0aGluZyBmaW5pdGU7ICBhbnkgdmFsdWUKKyAgICAgICAgICAgICMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgb25lIG92ZXJmbG93cy4KKyAgICAgICAgICAgICcxNzk3NjkzMTM0ODYyMzE1ODA3OTM3Mjg5NzE0MDUzMDM0MTUwNzk5MzQxMzI3MTAwMzcnICMuLi4KKyAgICAgICAgICAgICc4MjY5MzYxNzM3Nzg5ODA0NDQ5NjgyOTI3NjQ3NTA5NDY2NDkwMTc5Nzc1ODcyMDcwOTYnICMuLi4KKyAgICAgICAgICAgICczMzAyODY0MTY2OTI4ODc5MTA5NDY1NTU1NDc4NTE5NDA0MDI2MzA2NTc0ODg2NzE1MDUnICMuLi4KKyAgICAgICAgICAgICc4MjA2ODE5MDg5MDIwMDA3MDgzODM2NzYyNzM4NTQ4NDU4MTc3MTE1MzE3NjQ0NzU3MzAnICMuLi4KKyAgICAgICAgICAgICcyNzAwNjk4NTU1NzEzNjY5NTk2MjI4NDI5MTQ4MTk4NjA4MzQ5MzY0NzUyOTI3MTkwNzQnICMuLi4KKyAgICAgICAgICAgICcxNjg0NDQzNjU1MTA3MDQzNDI3MTE1NTk2OTk1MDgwOTMwNDI4ODAxNzc5MDQxNzQ0OTc3OTInLAorICAgICAgICAgICAgIyAyKioxMDI0IC0gMioqOTcwIC0gdGlueQorICAgICAgICAgICAgJzE3OTc2OTMxMzQ4NjIzMTU4MDc5MzcyODk3MTQwNTMwMzQxNTA3OTkzNDEzMjcxMDAzNycgIy4uLgorICAgICAgICAgICAgJzgyNjkzNjE3Mzc3ODk4MDQ0NDk2ODI5Mjc2NDc1MDk0NjY0OTAxNzk3NzU4NzIwNzA5NicgIy4uLgorICAgICAgICAgICAgJzMzMDI4NjQxNjY5Mjg4NzkxMDk0NjU1NTU0Nzg1MTk0MDQwMjYzMDY1NzQ4ODY3MTUwNScgIy4uLgorICAgICAgICAgICAgJzgyMDY4MTkwODkwMjAwMDcwODM4MzY3NjI3Mzg1NDg0NTgxNzcxMTUzMTc2NDQ3NTczMCcgIy4uLgorICAgICAgICAgICAgJzI3MDA2OTg1NTU3MTM2Njk1OTYyMjg0MjkxNDgxOTg2MDgzNDkzNjQ3NTI5MjcxOTA3NCcgIy4uLgorICAgICAgICAgICAgJzE2ODQ0NDM2NTUxMDcwNDM0MjcxMTU1OTY5OTUwODA5MzA0Mjg4MDE3NzkwNDE3NDQ5Nzc5MS45OTknLAorICAgICAgICAgICAgIyAyKioxMDI0IC0gMioqOTcwICsgdGlueQorICAgICAgICAgICAgJzE3OTc2OTMxMzQ4NjIzMTU4MDc5MzcyODk3MTQwNTMwMzQxNTA3OTkzNDEzMjcxMDAzNycgIy4uLgorICAgICAgICAgICAgJzgyNjkzNjE3Mzc3ODk4MDQ0NDk2ODI5Mjc2NDc1MDk0NjY0OTAxNzk3NzU4NzIwNzA5NicgIy4uLgorICAgICAgICAgICAgJzMzMDI4NjQxNjY5Mjg4NzkxMDk0NjU1NTU0Nzg1MTk0MDQwMjYzMDY1NzQ4ODY3MTUwNScgIy4uLgorICAgICAgICAgICAgJzgyMDY4MTkwODkwMjAwMDcwODM4MzY3NjI3Mzg1NDg0NTgxNzcxMTUzMTc2NDQ3NTczMCcgIy4uLgorICAgICAgICAgICAgJzI3MDA2OTg1NTU3MTM2Njk1OTYyMjg0MjkxNDgxOTg2MDgzNDkzNjQ3NTI5MjcxOTA3NCcgIy4uLgorICAgICAgICAgICAgJzE2ODQ0NDM2NTUxMDcwNDM0MjcxMTU1OTY5OTUwODA5MzA0Mjg4MDE3NzkwNDE3NDQ5Nzc5Mi4wMDEnLAorICAgICAgICAgICAgIyAxIC0gMioqLTU0LCArLXRpbnkKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTk5NDQ0ODg4NDg3Njg3NDIxNzI5Nzg4MTg0MTY1OTU0NTg5ODQzNzVlLTU0JywKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTk5NDQ0ODg4NDg3Njg3NDIxNzI5Nzg4MTg0MTY1OTU0NTg5ODQzNzQ5OTk5OTk5ZS01NCcsCisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0NDg4ODQ4NzY4NzQyMTcyOTc4ODE4NDE2NTk1NDU4OTg0Mzc1MDAwMDAwMWUtNTQnLAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJ0b2RUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCBiN2MyMTI3Li41YTYzMTM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMywyOCArMywyMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgaW5zcGVjdAotaW1wb3J0IHdhcm5pbmdzCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzLCBfY2hlY2tfcHkza193YXJuaW5ncwotCi0KLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZCwgdmVyYm9zZSwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzLCBjaGVja19weTNrX3dhcm5pbmdzCiAKIGltcG9ydCBzeXMKIElTQklHRU5ESUFOID0gc3lzLmJ5dGVvcmRlciA9PSAiYmlnIgogSVMzMkJJVCA9IHN5cy5tYXhzaXplID09IDB4N2ZmZmZmZmYKIAoraW50ZWdlcl9jb2RlcyA9ICdiJywgJ0InLCAnaCcsICdIJywgJ2knLCAnSScsICdsJywgJ0wnLCAncScsICdRJworCiB0ZXN0bW9kX2ZpbGVuYW1lID0gb3MucGF0aC5zcGxpdGV4dChfX2ZpbGVfXylbMF0gKyAnLnB5JworIyBOYXRpdmUgJ3EnIHBhY2tpbmcgaXNuJ3QgYXZhaWxhYmxlIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoZSBDCisjIGxvbmcgbG9uZyB0eXBlLgogdHJ5OgotICAgIGltcG9ydCBfc3RydWN0Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HID0gMAotICAgIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HID0gMQotICAgIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UgPSAyCisgICAgc3RydWN0LnBhY2soJ3EnLCA1KQorZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICBIQVZFX0xPTkdfTE9ORyA9IEZhbHNlCiBlbHNlOgotICAgIFBZX1NUUlVDVF9SQU5HRV9DSEVDS0lORyA9IGdldGF0dHIoX3N0cnVjdCwgJ19QWV9TVFJVQ1RfUkFOR0VfQ0hFQ0tJTkcnLCAwKQotICAgIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HID0gZ2V0YXR0cihfc3RydWN0LCAnX1BZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HJywgMCkKLSAgICBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFID0gZ2V0YXR0cihfc3RydWN0LCAnX1BZX1NUUlVDVF9GTE9BVF9DT0VSQ0UnLCAwKQorICAgIEhBVkVfTE9OR19MT05HID0gVHJ1ZQogCiBkZWYgc3RyaW5nX3JldmVyc2Uocyk6CiAgICAgcmV0dXJuICIiLmpvaW4ocmV2ZXJzZWQocykpCkBAIC0zNSw1NiArMzAsMjAgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gc3RyaW5nX3JldmVyc2UodmFsdWUpCiAKLWRlZiB3aXRoX3dhcm5pbmdfcmVzdG9yZShmdW5jKToKLSAgICBAd3JhcHMoZnVuYykKLSAgICBkZWYgZGVjb3JhdG9yKCphcmdzLCAqKmt3KToKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgIyBXZSBuZWVkIHRoaXMgZnVuY3Rpb24gdG8gd2FybiBldmVyeSB0aW1lLCBzbyBzdGljayBhbgotICAgICAgICAgICAgIyB1bnF1YWxpZmVkICdhbHdheXMnIGF0IHRoZSBoZWFkIG9mIHRoZSBmaWx0ZXIgbGlzdAotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgcmV0dXJuIGRlY29yYXRvcgotCi1Ad2l0aF93YXJuaW5nX3Jlc3RvcmUKLWRlZiBkZXByZWNhdGVkX2VycihmdW5jLCAqYXJncyk6Ci0gICAgdHJ5OgotICAgICAgICBmdW5jKCphcmdzKQotICAgIGV4Y2VwdCAoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpOgotICAgICAgICBwYXNzCi0gICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZzoKLSAgICAgICAgaWYgbm90IFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HOgotICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIiVzJXMgZXhwZWN0ZWQgdG8gcmFpc2UgRGVwcmVjYXRpb25XYXJuaW5nIiAlICgKLSAgICAgICAgICAgICAgICBmdW5jLl9fbmFtZV9fLCBhcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFRlc3RGYWlsZWQsICIlcyVzIGRpZCBub3QgcmFpc2UgZXJyb3IiICUgKAotICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgYXJncykKLQotCiBjbGFzcyBTdHJ1Y3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEB3aXRoX3dhcm5pbmdfcmVzdG9yZQogICAgIGRlZiBjaGVja19mbG9hdF9jb2VyY2Uoc2VsZiwgZm9ybWF0LCBudW1iZXIpOgotICAgICAgICAjIFNGIGJ1ZyAxNTMwNTU5LiBzdHJ1Y3QucGFjayByYWlzZXMgVHlwZUVycm9yIHdoZXJlIGl0IHVzZWQgdG8gY29udmVydC4KLSAgICAgICAgaWYgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRSA9PSAyOgotICAgICAgICAgICAgIyBUZXN0IGZvciBwcmUtMi41IHN0cnVjdCBtb2R1bGUKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpIGFzIHc6Ci0gICAgICAgICAgICAgICAgcGFja2VkID0gc3RydWN0LnBhY2soZm9ybWF0LCBudW1iZXIpCi0gICAgICAgICAgICAgICAgZmxvb3JlZCA9IHN0cnVjdC51bnBhY2soZm9ybWF0LCBwYWNrZWQpWzBdCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb29yZWQsIGludChudW1iZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBjb3JyZWNseSBjb2VyY2UgZmxvYXQgdG8gaW50IikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdHJ1Y3QucGFjayhmb3JtYXQsIG51bWJlcikKLSAgICAgICAgZXhjZXB0IChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpZiBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgRGVwcmVjYXRpb25XYXJuaW5nIGZvciBmbG9hdCBjb2VyY2UiKQotICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgotICAgICAgICAgICAgaWYgbm90IFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0byByYWlzZSBzdHJ1Y3QuZXJyb3IgZm9yIGZsb2F0IGNvZXJjZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImRpZCBub3QgcmFpc2UgZXJyb3IgZm9yIGZsb2F0IGNvZXJjZSIpCisgICAgICAgICMgU0YgYnVnIDE1MzA1NTkuIHN0cnVjdC5wYWNrIHJhaXNlcyBUeXBlRXJyb3Igd2hlcmUgaXQgdXNlZAorICAgICAgICAjIHRvIGNvbnZlcnQuCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpIGFzIHc6CisgICAgICAgICAgICBnb3QgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIG51bWJlcikKKyAgICAgICAgbGluZW5vID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCB0ZXN0bW9kX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcubGluZW5vLCBsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICBleHBlY3RlZCA9IHN0cnVjdC5wYWNrKGZvcm1hdCwgaW50KG51bWJlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2lzYmlnZW5kaWFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzdHJ1Y3QucGFjaygnPWknLCAxKVswXSA9PSBjaHIoMCkpLCBJU0JJR0VORElBTikKQEAgLTEwMywzNiArNjIsMTMgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaWlpJywgMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJ2knLCAzLCAzLCAzKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaScsICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnUCcsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFjaywgJ2knLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwgc3RydWN0LnBhY2ssICdQJywgJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2QnLCAnZmxhcCcpCiAgICAgICAgIHMgPSBzdHJ1Y3QucGFjaygnaWknLCAxLCAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICdpaWknLCBzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICdpJywgcykKIAotICAgIGRlZiB0ZXN0X3dhcm5pbmdzX3N0YWNrbGV2ZWwoc2VsZik6Ci0gICAgICAgICMgUHl0aG9uIHZlcnNpb25zIGJldHdlZW4gMi42IGFuZCAyLjYuNSB3ZXJlIHByb2R1Y2luZwotICAgICAgICAjIHdhcm5pbmcgbWVzc2FnZXMgYXQgdGhlIHdyb25nIHN0YWNrbGV2ZWwuCi0gICAgICAgIGRlZiBpbm5lcihmbiwgKmFyZ3MpOgotICAgICAgICAgICAgcmV0dXJuIGluc3BlY3QuY3VycmVudGZyYW1lKCkuZl9saW5lbm8sIGZuKCphcmdzKQotCi0gICAgICAgIGRlZiBjaGVja193YXJuaW5nX3N0YWNrbGV2ZWwoZm4sICphcmdzKToKLSAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICAgICAgIyAiYWx3YXlzIiB0byBtYWtlIHN1cmUgX193YXJuaW5ncmVnaXN0cnlfXyBpc24ndCBhZmZlY3RlZAotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgICAgICBsaW5lbm8sIHJlc3VsdCA9IGlubmVyKGZuLCAqYXJncykKLSAgICAgICAgICAgIGZvciB3YXJuIGluIHc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YXJuLmxpbmVubywgbGluZW5vKQotCi0gICAgICAgICMgb3V0IG9mIHJhbmdlIHdhcm5pbmdzCi0gICAgICAgIGNoZWNrX3dhcm5pbmdfc3RhY2tsZXZlbChzdHJ1Y3QucGFjaywgJzxMJywgLTEpCi0gICAgICAgIGNoZWNrX3dhcm5pbmdfc3RhY2tsZXZlbChzdHJ1Y3QucGFjaywgJ0wnLCAtMSkKLSAgICAgICAgY2hlY2tfd2FybmluZ19zdGFja2xldmVsKHN0cnVjdC5wYWNrLCAnPGgnLCA2NTUzNikKLSAgICAgICAgY2hlY2tfd2FybmluZ19zdGFja2xldmVsKHN0cnVjdC5wYWNrLCAnPGwnLCAyKioxMDApCi0KLSAgICAgICAgIyBmbG9hdCB3YXJuaW5ncwotICAgICAgICBjaGVja193YXJuaW5nX3N0YWNrbGV2ZWwoc3RydWN0LnBhY2ssICdMJywgMy4xKQotCiAgICAgZGVmIHRlc3RfdHJhbnNpdGl2ZW5lc3Moc2VsZik6CiAgICAgICAgIGMgPSAnYScKICAgICAgICAgYiA9IDEKQEAgLTIwOCw5OCArMTQ0LDkxIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoeGZtdCksIGxlbihyZXMpKQogICAgICAgICAgICAgICAgIHJldiA9IHN0cnVjdC51bnBhY2soeGZtdCwgcmVzKVswXQogICAgICAgICAgICAgICAgIGlmIHJldiAhPSBhcmc6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhhc3kpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3kpCiAKLSAgICBkZWYgdGVzdF9uYXRpdmVfcVEoc2VsZik6Ci0gICAgICAgICMgY2FuJ3QgcGFjayAtMSBhcyB1bnNpZ25lZCByZWdhcmRsZXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksIHN0cnVjdC5wYWNrLCAiUSIsIC0xKQotICAgICAgICAjIGNhbid0IHBhY2sgc3RyaW5nIGFzICdxJyByZWdhcmRsZXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICJxIiwgImEiKQotICAgICAgICAjIGRpdHRvLCBidXQgJ1EnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICJRIiwgImEiKQorICAgIGRlZiB0ZXN0X2NhbGNzaXplKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9zaXplID0geworICAgICAgICAgICAgJ2InOiAxLCAnQic6IDEsCisgICAgICAgICAgICAnaCc6IDIsICdIJzogMiwKKyAgICAgICAgICAgICdpJzogNCwgJ0knOiA0LAorICAgICAgICAgICAgJ2wnOiA0LCAnTCc6IDQsCisgICAgICAgICAgICAncSc6IDgsICdRJzogOCwKKyAgICAgICAgICAgIH0KIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdHJ1Y3QucGFjaygicSIsIDUpCi0gICAgICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3I6Ci0gICAgICAgICAgICAjIGRvZXMgbm90IGhhdmUgbmF0aXZlIHEvUQotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnl0ZXMgPSBzdHJ1Y3QuY2FsY3NpemUoJ3EnKQotICAgICAgICAgICAgIyBUaGUgZXhwZWN0ZWQgdmFsdWVzIGhlcmUgYXJlIGluIGJpZy1lbmRpYW4gZm9ybWF0LCBwcmltYXJpbHkKLSAgICAgICAgICAgICMgYmVjYXVzZSBJJ20gb24gYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgYW5kIHNvIHRoaXMgaXMgdGhlCi0gICAgICAgICAgICAjIGNsZWFyZXN0IHdheSAoZm9yIG1lKSB0byBmb3JjZSB0aGUgY29kZSB0byBnZXQgZXhlcmNpc2VkLgotICAgICAgICAgICAgZm9yIGZvcm1hdCwgaW5wdXQsIGV4cGVjdGVkIGluICgKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgLTEsICdceGZmJyAqIGJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgMCwgJ1x4MDAnICogYnl0ZXMpLAotICAgICAgICAgICAgICAgICAgICAoJ1EnLCAwLCAnXHgwMCcgKiBieXRlcyksCi0gICAgICAgICAgICAgICAgICAgICgncScsIDFMLCAnXHgwMCcgKiAoYnl0ZXMtMSkgKyAnXHgwMScpLAotICAgICAgICAgICAgICAgICAgICAoJ1EnLCAoMUwgPDwgKDgqYnl0ZXMpKS0xLCAnXHhmZicgKiBieXRlcyksCi0gICAgICAgICAgICAgICAgICAgICgncScsICgxTCA8PCAoOCpieXRlcy0xKSktMSwgJ1x4N2YnICsgJ1x4ZmYnICogKGJ5dGVzIC0gMSkpKToKLSAgICAgICAgICAgICAgICBnb3QgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIGlucHV0KQotICAgICAgICAgICAgICAgIG5hdGl2ZV9leHBlY3RlZCA9IGJpZ2VuZGlhbl90b19uYXRpdmUoZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIG5hdGl2ZV9leHBlY3RlZCkKLSAgICAgICAgICAgICAgICByZXRyaWV2ZWQgPSBzdHJ1Y3QudW5wYWNrKGZvcm1hdCwgZ290KVswXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0cmlldmVkLCBpbnB1dCkKKyAgICAgICAgIyBzdGFuZGFyZCBpbnRlZ2VyIHNpemVzCisgICAgICAgIGZvciBjb2RlIGluIGludGVnZXJfY29kZXM6CisgICAgICAgICAgICBmb3IgYnl0ZW9yZGVyIGluICgnPScsICc8JywgJz4nLCAnIScpOgorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlcitjb2RlCisgICAgICAgICAgICAgICAgc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBleHBlY3RlZF9zaXplW2NvZGVdKQogCi0gICAgZGVmIHRlc3Rfc3RhbmRhcmRfaW50ZWdlcnMoc2VsZik6Ci0gICAgICAgICMgU3RhbmRhcmQgaW50ZWdlciB0ZXN0cyAoYkJoSGlJbExxUSkuCisgICAgICAgICMgbmF0aXZlIGludGVnZXIgc2l6ZXMsIGV4Y2VwdCAncScgYW5kICdRJworICAgICAgICBmb3IgZm9ybWF0X3BhaXIgaW4gKCdiQicsICdoSCcsICdpSScsICdsTCcpOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiBbJycsICdAJ106CisgICAgICAgICAgICAgICAgc2lnbmVkX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoYnl0ZW9yZGVyICsgZm9ybWF0X3BhaXJbMF0pCisgICAgICAgICAgICAgICAgdW5zaWduZWRfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShieXRlb3JkZXIgKyBmb3JtYXRfcGFpclsxXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25lZF9zaXplLCB1bnNpZ25lZF9zaXplKQorCisgICAgICAgICMgYm91bmRzIGZvciBuYXRpdmUgaW50ZWdlciBzaXplcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnYicpLCAxKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgyLCBzdHJ1Y3QuY2FsY3NpemUoJ2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoNCwgc3RydWN0LmNhbGNzaXplKCdsJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnaCcpLCBzdHJ1Y3QuY2FsY3NpemUoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RydWN0LmNhbGNzaXplKCdpJyksIHN0cnVjdC5jYWxjc2l6ZSgnbCcpKQorCisgICAgICAgICMgdGVzdHMgZm9yIG5hdGl2ZSAncScgYW5kICdRJyB3aGVuIGFwcGxpY2FibGUKKyAgICAgICAgaWYgSEFWRV9MT05HX0xPTkc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZSgncScpLCBzdHJ1Y3QuY2FsY3NpemUoJ1EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDgsIHN0cnVjdC5jYWxjc2l6ZSgncScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RydWN0LmNhbGNzaXplKCdsJyksIHN0cnVjdC5jYWxjc2l6ZSgncScpKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgSW50ZWdlciB0ZXN0cyAoYkJoSGlJbExxUSkuCiAgICAgICAgIGltcG9ydCBiaW5hc2NpaQogCiAgICAgICAgIGNsYXNzIEludFRlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAgICAgICAgICMgWFhYIE1vc3Qgc3RkIGludGVnZXIgbW9kZXMgZmFpbCB0byB0ZXN0IGZvciBvdXQtb2YtcmFuZ2UuCi0gICAgICAgICAgICAjIFRoZSAiaSIgYW5kICJsIiBjb2RlcyBhcHBlYXIgdG8gcmFuZ2UtY2hlY2sgT0sgb24gMzItYml0IGJveGVzLCBidXQKLSAgICAgICAgICAgICMgZmFpbCB0byBjaGVjayBjb3JyZWN0bHkgb24gc29tZSA2NC1iaXQgb25lcyAoVHJ1NjQgVW5peCArIENvbXBhcSBDCi0gICAgICAgICAgICAjIHJlcG9ydGVkIGJ5IE1hcmsgRmF2YXMpLgotICAgICAgICAgICAgQlVHR1lfUkFOR0VfQ0hFQ0sgPSAiYkJoSGlJbEwiCi0KLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtYXRwYWlyLCBieXRlc2l6ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZm9ybWF0cGFpciksIDIpCi0gICAgICAgICAgICAgICAgc2VsZi5mb3JtYXRwYWlyID0gZm9ybWF0cGFpcgotICAgICAgICAgICAgICAgIGZvciBkaXJlY3Rpb24gaW4gIjw+IT0iOgotICAgICAgICAgICAgICAgICAgICBmb3IgY29kZSBpbiBmb3JtYXRwYWlyOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gZGlyZWN0aW9uICsgY29kZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KSwgYnl0ZXNpemUpCi0gICAgICAgICAgICAgICAgc2VsZi5ieXRlc2l6ZSA9IGJ5dGVzaXplCi0gICAgICAgICAgICAgICAgc2VsZi5iaXRzaXplID0gYnl0ZXNpemUgKiA4Ci0gICAgICAgICAgICAgICAgc2VsZi5zaWduZWRfY29kZSwgc2VsZi51bnNpZ25lZF9jb2RlID0gZm9ybWF0cGFpcgotICAgICAgICAgICAgICAgIHNlbGYudW5zaWduZWRfbWluID0gMAotICAgICAgICAgICAgICAgIHNlbGYudW5zaWduZWRfbWF4ID0gMkwqKnNlbGYuYml0c2l6ZSAtIDEKLSAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZF9taW4gPSAtKDJMKiooc2VsZi5iaXRzaXplLTEpKQotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkX21heCA9IDJMKiooc2VsZi5iaXRzaXplLTEpIC0gMQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdCk6CisgICAgICAgICAgICAgICAgc3VwZXIoSW50VGVzdGVyLCBzZWxmKS5fX2luaXRfXyhtZXRob2ROYW1lPSd0ZXN0X29uZScpCisgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKKyAgICAgICAgICAgICAgICBzZWxmLmNvZGUgPSBmb3JtYXRbLTFdCisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3Rpb24gPSBmb3JtYXRbOi0xXQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRpcmVjdGlvbiBpbiAoJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIHBhY2tpbmcgZGlyZWN0aW9uOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlyZWN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYnl0ZXNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYuYml0c2l6ZSA9IHNlbGYuYnl0ZXNpemUgKiA4CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb2RlIGluIHR1cGxlKCdiaGlscScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5fdmFsdWUgPSAtKDJMKiooc2VsZi5iaXRzaXplLTEpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IDJMKiooc2VsZi5iaXRzaXplLTEpIC0gMQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb2RlIGluIHR1cGxlKCdCSElMUScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWluX3ZhbHVlID0gMAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heF92YWx1ZSA9IDJMKipzZWxmLmJpdHNpemUgLSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIGZvcm1hdCBjb2RlOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZSkKIAogICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYsIHgsIHBhY2s9c3RydWN0LnBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNrPXN0cnVjdC51bnBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oZXhsaWZ5PWJpbmFzY2lpLnVuaGV4bGlmeSk6Ci0gICAgICAgICAgICAgICAgIyBUcnkgc2lnbmVkLgotICAgICAgICAgICAgICAgIGNvZGUgPSBzZWxmLnNpZ25lZF9jb2RlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zaWduZWRfbWluIDw9IHggPD0gc2VsZi5zaWduZWRfbWF4OgotICAgICAgICAgICAgICAgICAgICAjIFRyeSBiaWctZW5kaWFuLgorCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5mb3JtYXQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1pbl92YWx1ZSA8PSB4IDw9IHNlbGYubWF4X3ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmcoeCkKLSAgICAgICAgICAgICAgICAgICAgaWYgeCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2lnbmVkIGFuZCB4IDwgMDoKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDFMIDw8IHNlbGYuYml0c2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBoZXgoZXhwZWN0ZWQpWzI6LTFdICMgY2hvcCAiMHgiIGFuZCB0cmFpbGluZyAnTCcKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZXhwZWN0ZWQsIDApCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gJyV4JyAlIGV4cGVjdGVkCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihleHBlY3RlZCkgJiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiMCIgKyBleHBlY3RlZAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHVuaGV4bGlmeShleHBlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAiXHgwMCIgKiAoc2VsZi5ieXRlc2l6ZSAtIGxlbihleHBlY3RlZCkpICsgZXhwZWN0ZWQKLQotICAgICAgICAgICAgICAgICAgICAjIFBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gIj4iICsgY29kZQotICAgICAgICAgICAgICAgICAgICBnb3QgPSBwYWNrKGZvcm1hdCwgeCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgVW5wYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHVucGFjayhmb3JtYXQsIGdvdClbMF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDEnICsgZ290KQotICAgICAgICAgICAgICAgICAgICAjIFRyeSBsaXR0bGUtZW5kaWFuLgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiPCIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyaW5nX3JldmVyc2UoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKCJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZGlyZWN0aW9uID09ICc8JyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3Rpb24gaW4gKCcnLCAnQCcsICc9JykgYW5kIG5vdCBJU0JJR0VORElBTik6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHN0cmluZ19yZXZlcnNlKGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3RlZCksIHNlbGYuYnl0ZXNpemUpCiAKICAgICAgICAgICAgICAgICAgICAgIyBQYWNrIHdvcms/CiAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQpAQCAtMzEyLDY0ICsyNDEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDEnICsgZ290KQotCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgIyB4IGlzIG91dCBvZiByYW5nZSAtLSB2ZXJpZnkgcGFjayByZWFsaXplcyB0aGF0LgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgUFlfU1RSVUNUX1JBTkdFX0NIRUNLSU5HIGFuZCBjb2RlIGluIHNlbGYuQlVHR1lfUkFOR0VfQ0hFQ0s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJTa2lwcGluZyBidWdneSByYW5nZSBjaGVjayBmb3IgY29kZSIsIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHBhY2ssICI+IiArIGNvZGUsIHgpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihwYWNrLCAiPCIgKyBjb2RlLCB4KQotCi0gICAgICAgICAgICAgICAgIyBNdWNoIHRoZSBzYW1lIGZvciB1bnNpZ25lZC4KLSAgICAgICAgICAgICAgICBjb2RlID0gc2VsZi51bnNpZ25lZF9jb2RlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi51bnNpZ25lZF9taW4gPD0geCA8PSBzZWxmLnVuc2lnbmVkX21heDoKLSAgICAgICAgICAgICAgICAgICAgIyBUcnkgYmlnLWVuZGlhbi4KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gIj4iICsgY29kZQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmcoeCkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBoZXgoZXhwZWN0ZWQpWzI6LTFdICMgY2hvcCAiMHgiIGFuZCB0cmFpbGluZyAnTCcKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGV4cGVjdGVkKSAmIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICIwIiArIGV4cGVjdGVkCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdW5oZXhsaWZ5KGV4cGVjdGVkKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKyBleHBlY3RlZAotCi0gICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICBnb3QgPSBwYWNrKGZvcm1hdCwgeCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgVW5wYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHVucGFjayhmb3JtYXQsIGdvdClbMF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDEnICsgZ290KQotCi0gICAgICAgICAgICAgICAgICAgICMgVHJ5IGxpdHRsZS1lbmRpYW4uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICI8IiArIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHJpbmdfcmV2ZXJzZShleHBlY3RlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIFBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgZ290ID0gcGFjayhmb3JtYXQsIHgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIFVucGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICByZXRyaWV2ZWQgPSB1bnBhY2soZm9ybWF0LCBnb3QpWzBdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgcmV0cmlldmVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgQWRkaW5nIGFueSBieXRlIHNob3VsZCBjYXVzZSBhICJ0b28gYmlnIiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHN0cnVjdC5lcnJvciwgVHlwZUVycm9yKSwgdW5wYWNrLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdceDAxJyArIGdvdCkKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgeCBpcyBvdXQgb2YgcmFuZ2UgLS0gdmVyaWZ5IHBhY2sgcmVhbGl6ZXMgdGhhdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IFBZX1NUUlVDVF9SQU5HRV9DSEVDS0lORyBhbmQgY29kZSBpbiBzZWxmLkJVR0dZX1JBTkdFX0NIRUNLOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiU2tpcHBpbmcgYnVnZ3kgcmFuZ2UgY2hlY2sgZm9yIGNvZGUiLCBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihwYWNrLCAiPiIgKyBjb2RlLCB4KQotICAgICAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIocGFjaywgIjwiICsgY29kZSwgeCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2ssIGZvcm1hdCwgeCkKIAogICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCkBAIC0zODYsMzQgKzI2MSwxMDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgOCkgfCByYW5kcmFuZ2UoMjU2KQogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbCkKIAotICAgICAgICAgICAgICAgICMgVHJ5IGFsbCB0aG9zZSwgYW5kIHRoZWlyIG5lZ2F0aW9ucywgYW5kICstMSBmcm9tIHRoZW0uICBOb3RlCi0gICAgICAgICAgICAgICAgIyB0aGF0IHRoaXMgdGVzdHMgYWxsIHBvd2VyLW9mLTIgYm91bmRhcmllcyBpbiByYW5nZSwgYW5kIGEgZmV3IG91dAotICAgICAgICAgICAgICAgICMgb2YgcmFuZ2UsIHBsdXMgKy0oMioqbiArLSAxKS4KKyAgICAgICAgICAgICAgICAjIFZhbHVlcyBhYnNvcmJlZCBmcm9tIG90aGVyIHRlc3RzCisgICAgICAgICAgICAgICAgdmFsdWVzLmV4dGVuZChbMzAwLCA3MDAwMDAsIHN5cy5tYXhpbnQqNF0pCisKKyAgICAgICAgICAgICAgICAjIFRyeSBhbGwgdGhvc2UsIGFuZCB0aGVpciBuZWdhdGlvbnMsIGFuZCArLTEgZnJvbQorICAgICAgICAgICAgICAgICMgdGhlbS4gIE5vdGUgdGhhdCB0aGlzIHRlc3RzIGFsbCBwb3dlci1vZi0yCisgICAgICAgICAgICAgICAgIyBib3VuZGFyaWVzIGluIHJhbmdlLCBhbmQgYSBmZXcgb3V0IG9mIHJhbmdlLCBwbHVzCisgICAgICAgICAgICAgICAgIyArLSgyKipuICstIDEpLgogICAgICAgICAgICAgICAgIGZvciBiYXNlIGluIHZhbHVlczoKICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiAtYmFzZSwgYmFzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmNyIGluIC0xLCAwLCAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB2YWwgKyBpbmNyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gaW50KHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X29uZShpbnQoeCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X29uZShsb25nKHgpKQogCiAgICAgICAgICAgICAgICAgIyBTb21lIGVycm9yIGNhc2VzLgotICAgICAgICAgICAgICAgIGZvciBkaXJlY3Rpb24gaW4gIjw+IjoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGNvZGUgaW4gc2VsZi5mb3JtYXRwYWlyOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJhZG9iamVjdCBpbiAiYSBzdHJpbmciLCAzKzQyaiwgcmFuZHJhbmdlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBkaXJlY3Rpb24gKyBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRvYmplY3QpCisgICAgICAgICAgICAgICAgY2xhc3MgTm90QW5JbnROUyhvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgogCi0gICAgICAgIGZvciBhcmdzIGluIFsoImJCIiwgMSksCi0gICAgICAgICAgICAgICAgICAgICAoImhIIiwgMiksCi0gICAgICAgICAgICAgICAgICAgICAoImlJIiwgNCksCi0gICAgICAgICAgICAgICAgICAgICAoImxMIiwgNCksCi0gICAgICAgICAgICAgICAgICAgICAoInFRIiwgOCldOgotICAgICAgICAgICAgdCA9IEludFRlc3RlcigqYXJncykKLSAgICAgICAgICAgIHQucnVuKCkKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE3MjlMCisKKyAgICAgICAgICAgICAgICBjbGFzcyBOb3RBbkludE9TOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4NQorCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTYzTAorCisgICAgICAgICAgICAgICAgIyBPYmplY3RzIHdpdGggYW4gJ19faW5kZXhfXycgbWV0aG9kIHNob3VsZCBiZSBhbGxvd2VkCisgICAgICAgICAgICAgICAgIyB0byBwYWNrIGFzIGludGVnZXJzLiAgVGhhdCBpcyBhc3N1bWluZyB0aGUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAjICdfX2luZGV4X18nIG1ldGhvZCByZXR1cm5zIGFuZCAnaW50JyBvciAnbG9uZycuCisgICAgICAgICAgICAgICAgY2xhc3MgSW5kZXhhYmxlKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgICAgICAgICAgICAgIyBJZiB0aGUgJ19faW5kZXhfXycgbWV0aG9kIHJhaXNlcyBhIHR5cGUgZXJyb3IsIHRoZW4KKyAgICAgICAgICAgICAgICAjICdfX2ludF9fJyBzaG91bGQgYmUgdXNlZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICAgICAgICAgICAgICBjbGFzcyBCYWRJbmRleChvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZHJhbmdlKQorICAgICAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCBub24taW50ZWdlciIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soc2VsZi5mb3JtYXQsIDMrNDJqKQorCisgICAgICAgICAgICAgICAgIyBhbiBhdHRlbXB0IHRvIGNvbnZlcnQgYSBub24taW50ZWdlciAod2l0aCBhbgorICAgICAgICAgICAgICAgICMgaW1wbGljaXQgY29udmVyc2lvbiB2aWEgX19pbnRfXykgc2hvdWxkIHN1Y2NlZWQsCisgICAgICAgICAgICAgICAgIyB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nCisgICAgICAgICAgICAgICAgZm9yIG5vbmludCBpbiBOb3RBbkludE5TKCksIE5vdEFuSW50T1MoKSwgQmFkSW5kZXgoKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoIi4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IG5vbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1pbnRlZ2VyIiwgRGVwcmVjYXRpb25XYXJuaW5nKSkgYXMgdzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHN0cnVjdC5wYWNrKHNlbGYuZm9ybWF0LCBub25pbnQpCisgICAgICAgICAgICAgICAgICAgIGxpbmVubyA9IGluc3BlY3QuY3VycmVudGZyYW1lKCkuZl9saW5lbm8gLSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZSwgdGVzdG1vZF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmxpbmVubywgbGluZW5vKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHJ1Y3QucGFjayhzZWxmLmZvcm1hdCwgaW50KG5vbmludCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGxlZ2l0aW1hdGUgdmFsdWVzIGZyb20gJ19faW5kZXhfXycuCisgICAgICAgICAgICAgICAgZm9yIG9iaiBpbiAoSW5kZXhhYmxlKDApLCBJbmRleGFibGUoMTApLCBJbmRleGFibGUoMTcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4YWJsZSg0MiksIEluZGV4YWJsZSgxMDApLCBJbmRleGFibGUoMTI3KSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKGZvcm1hdCwgb2JqKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImludGVnZXIgY29kZSBwYWNrIGZhaWxlZCBvbiBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICdfX2luZGV4X18nIG1ldGhvZCIpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBib2d1cyB2YWx1ZXMgZnJvbSAnX19pbmRleF9fJy4KKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIChJbmRleGFibGUoJ2EnKSwgSW5kZXhhYmxlKHUnYicpLCBJbmRleGFibGUoTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhhYmxlKHsnYSc6IDF9KSwgSW5kZXhhYmxlKFsxLCAyLCAzXSkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaikKKworICAgICAgICBieXRlb3JkZXJzID0gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnCisgICAgICAgIGZvciBjb2RlIGluIGludGVnZXJfY29kZXM6CisgICAgICAgICAgICBmb3IgYnl0ZW9yZGVyIGluIGJ5dGVvcmRlcnM6CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVvcmRlciBpbiAoJycsICdAJykgYW5kIGNvZGUgaW4gKCdxJywgJ1EnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IEhBVkVfTE9OR19MT05HKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBieXRlb3JkZXIrY29kZQorICAgICAgICAgICAgICAgIHQgPSBJbnRUZXN0ZXIoZm9ybWF0KQorICAgICAgICAgICAgICAgIHQucnVuKCkKIAogICAgIGRlZiB0ZXN0X3BfY29kZShzZWxmKToKICAgICAgICAgIyBUZXN0IHAgKCJQYXNjYWwgc3RyaW5nIikgY29kZS4KQEAgLTQ2NiwzNiArNDExLDEzIEBACiAgICAgICAgIGJpZyA9IG1hdGgubGRleHAoYmlnLCAxMjcgLSAyNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc3RydWN0LnBhY2ssICI+ZiIsIGJpZykKIAotICAgIGlmIFBZX1NUUlVDVF9SQU5HRV9DSEVDS0lORzoKLSAgICAgICAgZGVmIHRlc3RfMTIyOTM4MChzZWxmKToKLSAgICAgICAgICAgICMgU0YgYnVnIDEyMjkzODAuIE5vIHN0cnVjdC5wYWNrIGV4Y2VwdGlvbiBmb3Igc29tZSBvdXQgb2YKLSAgICAgICAgICAgICMgcmFuZ2UgaW50ZWdlcnMKLSAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgIGZvciBlbmRpYW4gaW4gKCcnLCAnPicsICc8Jyk6Ci0gICAgICAgICAgICAgICAgZm9yIGNscyBpbiAoaW50LCBsb25nKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGZtdCBpbiAoJ0InLCAnSCcsICdJJywgJ0wnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHN0cnVjdC5wYWNrLCBlbmRpYW4gKyBmbXQsIGNscygtMSkpCi0KLSAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIoc3RydWN0LnBhY2ssIGVuZGlhbiArICdCJywgY2xzKDMwMCkpCi0gICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWRfZXJyKHN0cnVjdC5wYWNrLCBlbmRpYW4gKyAnSCcsIGNscyg3MDAwMCkpCi0KLSAgICAgICAgICAgICAgICBkZXByZWNhdGVkX2VycihzdHJ1Y3QucGFjaywgZW5kaWFuICsgJ0knLCBzeXMubWF4aW50ICogNEwpCi0gICAgICAgICAgICAgICAgZGVwcmVjYXRlZF9lcnIoc3RydWN0LnBhY2ssIGVuZGlhbiArICdMJywgc3lzLm1heGludCAqIDRMKQotCi0gICAgZGVmIFhYWHRlc3RfMTUzMDU1OShzZWxmKToKLSAgICAgICAgIyBYWFggVGhpcyBpcyBicm9rZW46IHNlZSB0aGUgYnVnIHJlcG9ydAorICAgIGRlZiB0ZXN0XzE1MzA1NTkoc2VsZik6CiAgICAgICAgICMgU0YgYnVnIDE1MzA1NTkuIHN0cnVjdC5wYWNrIHJhaXNlcyBUeXBlRXJyb3Igd2hlcmUgaXQgdXNlZCB0byBjb252ZXJ0LgogICAgICAgICBmb3IgZW5kaWFuIGluICgnJywgJz4nLCAnPCcpOgotICAgICAgICAgICAgZm9yIGZtdCBpbiAoJ0InLCAnSCcsICdJJywgJ0wnLCAnYicsICdoJywgJ2knLCAnbCcpOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBpbnRlZ2VyX2NvZGVzOgogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmxvYXRfY29lcmNlKGVuZGlhbiArIGZtdCwgMS4wKQogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmxvYXRfY29lcmNlKGVuZGlhbiArIGZtdCwgMS41KQogCi0gICAgZGVmIHRlc3RfaXNzdWU0MjI4KHNlbGYpOgotICAgICAgICAjIFBhY2tpbmcgYSBsb25nIG1heSB5aWVsZCBlaXRoZXIgMzIgb3IgNjQgYml0cwotICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgotICAgICAgICAgICAgeCA9IHN0cnVjdC5wYWNrKCdMJywgLTEpWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsICdceGZmJyo0KQotCiAgICAgZGVmIHRlc3RfdW5wYWNrX2Zyb20oc2VsZiwgY2xzPXN0cik6CiAgICAgICAgIGRhdGEgPSBjbHMoJ2FiY2QwMTIzNCcpCiAgICAgICAgIGZtdCA9ICc0cycKQEAgLTUyOCwxMiArNDUwLDE1IEBACiAKICAgICAgICAgIyBHbyBiZXlvbmQgYm91bmRhcmllcy4KICAgICAgICAgc21hbGxfYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcy5wYWNrX2ludG8sIHNtYWxsX2J1ZiwgMCwgdGVzdF9zdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcy5wYWNrX2ludG8sIHNtYWxsX2J1ZiwgMiwgdGVzdF9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzLnBhY2tfaW50bywgc21hbGxfYnVmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHMucGFja19pbnRvLCBzbWFsbF9idWYsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQogCiAgICAgICAgICMgVGVzdCBib2d1cyBvZmZzZXQgKGlzc3VlIDM2OTQpCiAgICAgICAgIHNiID0gc21hbGxfYnVmCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RydWN0LnBhY2tfaW50bywgYicxJywgc2IsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksIHN0cnVjdC5wYWNrX2ludG8sIGInJywgc2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCiAKICAgICBkZWYgdGVzdF9wYWNrX2ludG9fZm4oc2VsZik6CiAgICAgICAgIHRlc3Rfc3RyaW5nID0gJ1JleWtqYXZpayByb2NrcywgZW93IScKQEAgLTU1MywxMSArNDc4LDEzIEBACiAKICAgICAgICAgIyBHbyBiZXlvbmQgYm91bmRhcmllcy4KICAgICAgICAgc21hbGxfYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcGFja19pbnRvLCBzbWFsbF9idWYsIDAsIHRlc3Rfc3RyaW5nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHBhY2tfaW50bywgc21hbGxfYnVmLCAyLCB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHBhY2tfaW50bywgc21hbGxfYnVmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHBhY2tfaW50bywgc21hbGxfYnVmLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKIAogICAgIGRlZiB0ZXN0X3VucGFja193aXRoX2J1ZmZlcihzZWxmKToKLSAgICAgICAgd2l0aCBfY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQgaW4gMy54IiwKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCBpbiAzLngiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgIyBTRiBidWcgMTU2Mzc1OTogc3RydWN0LnVucGFjayBkb2Vzbid0IHN1cHBvcnQgYnVmZmVyIHByb3RvY29sIG9iamVjdHMKICAgICAgICAgICAgIGRhdGExID0gYXJyYXkuYXJyYXkoJ0InLCAnXHgxMlx4MzRceDU2XHg3OCcpCkBAIC01NjksNiArNDk2LDkgQEAKICAgICAgICAgICAgIHNlbGYudGVzdF91bnBhY2tfZnJvbShjbHM9YnVmZmVyKQogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgY2xhc3MgRXhwbG9kaW5nQm9vbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgogICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAogICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZkwrMSwgMHhmZmZmZmZmZi8vMgpAQCAtNTk3LDE4ICs1MjcsMjEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByZWZpeCwgbXNnPSdlbmNvZGVkIGJvb2wgaXMgbm90IG9uZSBieXRlOiAlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwYWNrZWQpCiAKLSAgICAgICAgICAgIGZvciBjIGluICdceDAxXHg3Zlx4ZmZceDBmXHhmMCc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnVjdC51bnBhY2soJz4/JywgYylbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzdHJ1Y3QucGFjaywgcHJlZml4ICsgJz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbG9kaW5nQm9vbCgpKQogCi0gICAgaWYgSVMzMkJJVDoKLSAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWMiLCAiYSIpCisgICAgICAgIGZvciBjIGluIFtiJ1x4MDEnLCBiJ1x4N2YnLCBiJ1x4ZmYnLCBiJ1x4MGYnLCBiJ1x4ZjAnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJ1Y3QudW5wYWNrKCc+PycsIGMpWzBdKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSVMzMkJJVCwgIlNwZWNpZmljIHRvIDMyYml0IG1hY2hpbmVzIikKKyAgICBkZWYgdGVzdF9jcmFzaGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgc3RydWN0LnBhY2ssICIzNTc5MTM5NDFjIiwgImEiKQogCiAgICAgZGVmIHRlc3RfY291bnRfb3ZlcmZsb3coc2VsZik6Ci0gICAgICAgIGh1Z2Vjb3VudCA9ICd7MH1iJy5mb3JtYXQoc3lzLm1heHNpemUrMSkKKyAgICAgICAgaHVnZWNvdW50ID0gJ3t9YicuZm9ybWF0KHN5cy5tYXhzaXplKzEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQpCiAKLSAgICAgICAgaHVnZWNvdW50MiA9ICd7MH1iezF9SCcuZm9ybWF0KHN5cy5tYXhzaXplLy8yLCBzeXMubWF4c2l6ZS8vMikKKyAgICAgICAgaHVnZWNvdW50MiA9ICd7fWJ7fUgnLmZvcm1hdChzeXMubWF4c2l6ZS8vMiwgc3lzLm1heHNpemUvLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQyKQogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKaW5kZXggMWYyMDkyMy4uMGNjNThjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weQpAQCAtNSw3ICs1LDcgQEAKICAgICBMT05HX01BWCwgTE9OR19NSU4sIFVMT05HX01BWCwgXAogICAgIExMT05HX01BWCwgTExPTkdfTUlOLCBVTExPTkdfTUFYCiAKLWltcG9ydCB3YXJuaW5ncywgZXhjZXB0aW9ucywgdW5pdHRlc3QsIHN5cworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiB0cz1fdGVzdF9zdHJ1Y3RtZW1iZXJzVHlwZShGYWxzZSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwKQEAgLTE1LDk5ICsxNSw5MCBAQAogCiAgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKICAgICAgICAgdHMuVF9CT09MID0gVHJ1ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0JPT0wsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CT09MLCBUcnVlKQogICAgICAgICB0cy5UX0JPT0wgPSBGYWxzZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0JPT0wsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfQk9PTCwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgdHMsICdUX0JPT0wnLCAxKQogCiAgICAgZGVmIHRlc3RfYnl0ZShzZWxmKToKICAgICAgICAgdHMuVF9CWVRFID0gQ0hBUl9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9CWVRFLCBDSEFSX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0JZVEUsIENIQVJfTUFYKQogICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01JTgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0JZVEUsIENIQVJfTUlOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfQllURSwgQ0hBUl9NSU4pCiAgICAgICAgIHRzLlRfVUJZVEUgPSBVQ0hBUl9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VQllURSwgVUNIQVJfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUJZVEUsIFVDSEFSX01BWCkKIAogICAgIGRlZiB0ZXN0X3Nob3J0KHNlbGYpOgogICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9TSE9SVCwgU0hSVF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9TSE9SVCwgU0hSVF9NQVgpCiAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01JTgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX1NIT1JULCBTSFJUX01JTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NIT1JULCBTSFJUX01JTikKICAgICAgICAgdHMuVF9VU0hPUlQgPSBVU0hSVF9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VU0hPUlQsIFVTSFJUX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1VTSE9SVCwgVVNIUlRfTUFYKQogCiAgICAgZGVmIHRlc3RfaW50KHNlbGYpOgogICAgICAgICB0cy5UX0lOVCA9IElOVF9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9JTlQsIElOVF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9JTlQsIElOVF9NQVgpCiAgICAgICAgIHRzLlRfSU5UID0gSU5UX01JTgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0lOVCwgSU5UX01JTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0lOVCwgSU5UX01JTikKICAgICAgICAgdHMuVF9VSU5UID0gVUlOVF9NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VSU5ULCBVSU5UX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1VJTlQsIFVJTlRfTUFYKQogCiAgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKICAgICAgICAgdHMuVF9MT05HID0gTE9OR19NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9MT05HLCBMT05HX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkcsIExPTkdfTUFYKQogICAgICAgICB0cy5UX0xPTkcgPSBMT05HX01JTgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0cy5UX0xPTkcsIExPTkdfTUlOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfTE9ORywgTE9OR19NSU4pCiAgICAgICAgIHRzLlRfVUxPTkcgPSBVTE9OR19NQVgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VTE9ORywgVUxPTkdfTUFYKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkcsIFVMT05HX01BWCkKIAotICAgIGlmIGhhc2F0dHIodHMsICJUX0xPTkdMT05HIik6Ci0gICAgICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgotICAgICAgICAgICAgdHMuVF9MT05HTE9ORyA9IExMT05HX01BWAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9MT05HTE9ORywgTExPTkdfTUFYKQotICAgICAgICAgICAgdHMuVF9MT05HTE9ORyA9IExMT05HX01JTgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9MT05HTE9ORywgTExPTkdfTUlOKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIodHMsICJUX0xPTkdMT05HIiksICJsb25nIGxvbmcgbm90IHByZXNlbnQiKQorICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgorICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgTExPTkdfTUFYKQorICAgICAgICB0cy5UX0xPTkdMT05HID0gTExPTkdfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgTExPTkdfTUlOKQogCi0gICAgICAgICAgICB0cy5UX1VMT05HTE9ORyA9IFVMTE9OR19NQVgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfVUxPTkdMT05HLCBVTExPTkdfTUFYKQorICAgICAgICB0cy5UX1VMT05HTE9ORyA9IFVMTE9OR19NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1VMT05HTE9ORywgVUxMT05HX01BWCkKIAotICAgICAgICAgICAgIyMgbWFrZSBzdXJlIHRoZXNlIHdpbGwgYWNjZXB0IGEgcGxhaW4gaW50IGFzIHdlbGwgYXMgYSBsb25nCi0gICAgICAgICAgICB0cy5UX0xPTkdMT05HID0gMwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9MT05HTE9ORywgMykKLSAgICAgICAgICAgIHRzLlRfVUxPTkdMT05HID0gNAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModHMuVF9VTE9OR0xPTkcsIDQpCisgICAgICAgICMjIG1ha2Ugc3VyZSB0aGVzZSB3aWxsIGFjY2VwdCBhIHBsYWluIGludCBhcyB3ZWxsIGFzIGEgbG9uZworICAgICAgICB0cy5UX0xPTkdMT05HID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfTE9OR0xPTkcsIDMpCisgICAgICAgIHRzLlRfVUxPTkdMT05HID0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfVUxPTkdMT05HLCA0KQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZV9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRzLlRfU1RSSU5HX0lOUExBQ0UsICJoaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9TVFJJTkdfSU5QTEFDRSwgImhpIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCB0cywgIlRfU1RSSU5HX0lOUExBQ0UiLCAicyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVsYXR0ciwgdHMsICJUX1NUUklOR19JTlBMQUNFIikKIAogCiBjbGFzcyBUZXN0V2FybmluZ3ModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBoYXNfd2FybmVkKHNlbGYsIHcpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuY2F0ZWdvcnksIFJ1bnRpbWVXYXJuaW5nKQogCiAgICAgZGVmIHRlc3RfYnl0ZV9tYXgoc2VsZik6Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgdHMuVF9CWVRFID0gQ0hBUl9NQVgrMQotICAgICAgICAgICAgc2VsZi5oYXNfd2FybmVkKHcpCiAKICAgICBkZWYgdGVzdF9ieXRlX21pbihzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICB0cy5UX0JZVEUgPSBDSEFSX01JTi0xCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3VieXRlX21heChzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICB0cy5UX1VCWVRFID0gVUNIQVJfTUFYKzEKLSAgICAgICAgICAgIHNlbGYuaGFzX3dhcm5lZCh3KQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfbWF4KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01BWCsxCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3Nob3J0X21pbihzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NSU4tMQotICAgICAgICAgICAgc2VsZi5oYXNfd2FybmVkKHcpCiAKICAgICBkZWYgdGVzdF91c2hvcnRfbWF4KHNlbGYpOgotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfVVNIT1JUID0gVVNIUlRfTUFYKzEKLSAgICAgICAgICAgIHNlbGYuaGFzX3dhcm5lZCh3KQotCiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQppbmRleCA4M2M3Y2NmLi5kYWExMmFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpAQCAtMjgsNyArMjgsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHJlcHIodCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHQpKQogICAgICAgICB0ID0gdGltZS5nbXRpbWUoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAogICAgICAgICAgICAgInRpbWUuc3RydWN0X3RpbWUodG1feWVhcj0xOTcwLCB0bV9tb249MSwgdG1fbWRheT0xLCB0bV9ob3VyPTAsICIKQEAgLTUwLDggKzUwLDggQEAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKICAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCiAgICAgICAgIGZvciBpdGVtIGluIHQxOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGl0ZW0gaW4gdDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtNDIgbm90IGluIHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpdGVtLCB0MSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtNDIsIHQxKQogCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCkBAIC02MSwxMSArNjEsMTEgQEAKICAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCiAgICAgICAgIHQyID0gdHlwZSh0MSkodDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICh0MSA8IHQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICh0MSA+IHQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHQxID49IHQyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90ICh0MSAhPSB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHQxIDwgdDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHQxID4gdDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHQxICE9IHQyKSkKIAogICAgIGRlZiB0ZXN0X2ZpZWxkcyhzZWxmKToKICAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCA3ZGRlMDEzLi4zN2RjMjQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC04LDYgKzgsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc3lzY29uZmlnCiAKIG1zd2luZG93cyA9IChzeXMucGxhdGZvcm0gPT0gIndpbjMyIikKIApAQCAtMjEsMzYgKzIyLDM5IEBACiBlbHNlOgogICAgIFNFVEJJTkFSWSA9ICcnCiAKLSMgSW4gYSBkZWJ1ZyBidWlsZCwgc3R1ZmYgbGlrZSAiWzY1ODAgcmVmc10iIGlzIHByaW50ZWQgdG8gc3RkZXJyIGF0Ci0jIHNodXRkb3duIHRpbWUuICBUaGF0IGZydXN0cmF0ZXMgdGVzdHMgdHJ5aW5nIHRvIGNoZWNrIHN0ZGVyciBwcm9kdWNlZAotIyBmcm9tIGEgc3Bhd25lZCBQeXRob24gcHJvY2Vzcy4KLWRlZiByZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHN0ZGVycik6Ci0gICAgcmV0dXJuIHJlLnN1YihyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCAiIiwgc3RkZXJyKQogCi1jbGFzcyBQcm9jZXNzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgordHJ5OgorICAgIG1rc3RlbXAgPSB0ZW1wZmlsZS5ta3N0ZW1wCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIGlzIG5vdCBhdmFpbGFibGUKKyAgICBkZWYgbWtzdGVtcCgpOgorICAgICAgICAiIiJSZXBsYWNlbWVudCBmb3IgbWtzdGVtcCwgY2FsbGluZyBta3RlbXAuIiIiCisgICAgICAgIGZuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKKworCitjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB3ZSBoYXZlIHNvIHRoaXMgdGVzdAogICAgICAgICAjIGRvZXNuJ3QgY3Jhc2ggb24gc29tZSBidWlsZGJvdHMgKEFscGhhcyBpbiBwYXJ0aWN1bGFyKS4KLSAgICAgICAgaWYgaGFzYXR0cih0ZXN0X3N1cHBvcnQsICJyZWFwX2NoaWxkcmVuIik6Ci0gICAgICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIyBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB3ZSBoYXZlIHNvIHRoaXMgdGVzdAotICAgICAgICAjIGRvZXNuJ3QgY3Jhc2ggb24gc29tZSBidWlsZGJvdHMgKEFscGhhcyBpbiBwYXJ0aWN1bGFyKS4KLSAgICAgICAgaWYgaGFzYXR0cih0ZXN0X3N1cHBvcnQsICJyZWFwX2NoaWxkcmVuIik6Ci0gICAgICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisgICAgICAgIGZvciBpbnN0IGluIHN1YnByb2Nlc3MuX2FjdGl2ZToKKyAgICAgICAgICAgIGluc3Qud2FpdCgpCisgICAgICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnByb2Nlc3MuX2FjdGl2ZSwgInN1YnByb2Nlc3MuX2FjdGl2ZSBub3QgZW1wdHkiKQogCi0gICAgZGVmIG1rc3RlbXAoc2VsZik6Ci0gICAgICAgICIiIndyYXBwZXIgZm9yIG1rc3RlbXAsIGNhbGxpbmcgbWt0ZW1wIGlmIG1rc3RlbXAgaXMgbm90IGF2YWlsYWJsZSIiIgotICAgICAgICBpZiBoYXNhdHRyKHRlbXBmaWxlLCAibWtzdGVtcCIpOgotICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rc3RlbXAoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQotICAgICAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKKyAgICBkZWYgYXNzZXJ0U3RkZXJyRXF1YWwoc2VsZiwgc3RkZXJyLCBleHBlY3RlZCwgbXNnPU5vbmUpOgorICAgICAgICAjIEluIGEgZGVidWcgYnVpbGQsIHN0dWZmIGxpa2UgIls2NTgwIHJlZnNdIiBpcyBwcmludGVkIHRvIHN0ZGVyciBhdAorICAgICAgICAjIHNodXRkb3duIHRpbWUuICBUaGF0IGZydXN0cmF0ZXMgdGVzdHMgdHJ5aW5nIHRvIGNoZWNrIHN0ZGVyciBwcm9kdWNlZAorICAgICAgICAjIGZyb20gYSBzcGF3bmVkIFB5dGhvbiBwcm9jZXNzLgorICAgICAgICBhY3R1YWwgPSByZS5zdWIociJcW1xkKyByZWZzXF1ccj9cbj8kIiwgIiIsIHN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtc2cpCiAKLSAgICAjCi0gICAgIyBHZW5lcmljIHRlc3RzCi0gICAgIworCitjbGFzcyBQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X2NhbGxfc2VxKHNlbGYpOgogICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHNlcXVlbmNlIGFyZ3VtZW50CiAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKQEAgLTY1LDI4ICs2OSw1NiBAQAogCiAgICAgZGVmIHRlc3RfY2hlY2tfY2FsbF9ub256ZXJvKHNlbGYpOgogICAgICAgICAjIGNoZWNrX2NhbGwoKSBmdW5jdGlvbiB3aXRoIG5vbi16ZXJvIHJldHVybiBjb2RlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgYzoKICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSkKLSAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnJldHVybmNvZGUsIDQ3KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBDYWxsZWRQcm9jZXNzRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLnJldHVybmNvZGUsIDQ3KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0KHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHdpdGggemVybyByZXR1cm4gY29kZQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCAnQkRGTCciXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQkRGTCcsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9ub256ZXJvKHNlbGYpOgorICAgICAgICAjIGNoZWNrX2NhbGwoKSBmdW5jdGlvbiB3aXRoIG5vbi16ZXJvIHJldHVybiBjb2RlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNSkiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5yZXR1cm5jb2RlLCA1KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGVycihzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgnQkRGTCcpIl0sCisgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCREZMJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZG91dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gc3RkZXJyIHJlZGlyZWN0ZWQgdG8gc3Rkb3V0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCAnd2lsbCBub3QgYmUgcnVuJyJdLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3lzLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZG91dCBhcmcgc3VwcGxpZWQuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3Rkb3V0JywgYy5leGNlcHRpb24uYXJnc1swXSkKIAogICAgIGRlZiB0ZXN0X2NhbGxfa3dhcmdzKHNlbGYpOgogICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIGtleXdvcmQgYXJncwogICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYmFuYW5hIgogICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLCBvczsnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5leGl0KG9zLmdldGVudigiRlJVSVQiKT09ImJhbmFuYSIpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsIG9zOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuZXhpdChvcy5nZXRlbnYoIkZSVUlUIik9PSJiYW5hbmEiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQogCiAgICAgZGVmIHRlc3Rfc3RkaW5fbm9uZShzZWxmKToKICAgICAgICAgIyAuc3RkaW4gaXMgTm9uZSB3aGVuIG5vdCByZWRpcmVjdGVkCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50ICJiYW5hbmEiJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRpbiwgTm9uZSkKIApAQCAtOTcsNiArMTI5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgb2Ygc3Rkb3V0IGluIGEgZGlmZmVyZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2Nlc3MgLi4uIiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQsIE5vbmUpCiAKQEAgLTEwNCwxMiArMTM4LDI2IEBACiAgICAgICAgICMgLnN0ZGVyciBpcyBOb25lIHdoZW4gbm90IHJlZGlyZWN0ZWQKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQgImJhbmFuYSInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRlcnIsIE5vbmUpCiAKLSAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgotICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNvbWV0aGluZ3lvdWRvbnRoYXZlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICBkZWYgdGVzdF9leGVjdXRhYmxlX3dpdGhfY3dkKHNlbGYpOgorICAgICAgICBweXRob25fZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNvbWV0aGluZ3lvdWRvbnRoYXZlIiwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSwgY3dkPXB5dGhvbl9kaXIpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpLAorICAgICAgICAgICAgICAgICAgICAgIm5lZWQgYW4gaW5zdGFsbGVkIFB5dGhvbi4gU2VlICM3Nzc0IikKKyAgICBkZWYgdGVzdF9leGVjdXRhYmxlX3dpdGhvdXRfY3dkKHNlbGYpOgorICAgICAgICAjIEZvciBhIG5vcm1hbCBpbnN0YWxsYXRpb24sIGl0IHNob3VsZCB3b3JrIHdpdGhvdXQgJ2N3ZCcKKyAgICAgICAgIyBhcmd1bWVudC4gIEZvciB0ZXN0IHJ1bnMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgc2VlICM3Nzc0LgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNvbWV0aGluZ3lvdWRvbnRoYXZlIiwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSkKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDQ3KQpAQCAtMTUyLDYgKzIwMCw3IEBACiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoIm9yYW5nZSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgIm9yYW5nZSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZWRlcyhzZWxmKToKQEAgLTE4MCw4ICsyMjksOCBAQAogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCJzdHJhd2JlcnJ5IiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMocC5zdGRlcnIucmVhZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYXdiZXJyeSIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChwLnN0ZGVyci5yZWFkKCksICJzdHJhd2JlcnJ5IikKIAogICAgIGRlZiB0ZXN0X3N0ZGVycl9maWxlZGVzKHNlbGYpOgogICAgICAgICAjIHN0ZGVyciBpcyBzZXQgdG8gb3BlbiBmaWxlIGRlc2NyaXB0b3IKQEAgLTE5Miw4ICsyNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1kKQogICAgICAgICBwLndhaXQoKQogICAgICAgICBvcy5sc2VlayhkLCAwLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMob3MucmVhZChkLCAxMDI0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInN0cmF3YmVycnkiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKG9zLnJlYWQoZCwgMTAyNCksICJzdHJhd2JlcnJ5IikKIAogICAgIGRlZiB0ZXN0X3N0ZGVycl9maWxlb2JqKHNlbGYpOgogICAgICAgICAjIHN0ZGVyciBpcyBzZXQgdG8gb3BlbiBmaWxlIG9iamVjdApAQCAtMjAzLDQzICsyNTEsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGYpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHRmLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHRmLnJlYWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInN0cmF3YmVycnkiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHRmLnJlYWQoKSwgInN0cmF3YmVycnkiKQogCiAgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGVycl9waXBlKHNlbGYpOgogICAgICAgICAjIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNhbWUgcGlwZQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgib3JhbmdlIiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgb3V0cHV0ID0gcC5zdGRvdXQucmVhZCgpCi0gICAgICAgIHN0cmlwcGVkID0gcmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBwZWQsICJhcHBsZW9yYW5nZSIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChwLnN0ZG91dC5yZWFkKCksICJhcHBsZW9yYW5nZSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkZXJyX2ZpbGUoc2VsZik6CiAgICAgICAgICMgY2FwdHVyZSBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc2FtZSBvcGVuIGZpbGUKICAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIm9yYW5nZSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXRmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj10ZikKICAgICAgICAgcC53YWl0KCkKICAgICAgICAgdGYuc2VlaygwKQotICAgICAgICBvdXRwdXQgPSB0Zi5yZWFkKCkKLSAgICAgICAgc3RyaXBwZWQgPSByZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKG91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpcHBlZCwgImFwcGxlb3JhbmdlIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbCh0Zi5yZWFkKCksICJhcHBsZW9yYW5nZSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZWRlc19vZl9zdGRvdXQoc2VsZik6CiAgICAgICAgICMgc3Rkb3V0IGlzIHNldCB0byAxICgjMTUzMTg2MikuCiAgICAgICAgIGNtZCA9IHIiaW1wb3J0IHN5cywgb3M7IHN5cy5leGl0KG9zLndyaXRlKHN5cy5zdGRvdXQuZmlsZW5vKCksICcuXG4nKSkiCiAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY21kXSwgc3Rkb3V0PTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJjLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAyKQogCiAgICAgZGVmIHRlc3RfY3dkKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKQEAgLTI1MCwxMCArMjk0LDExIEBACiAgICAgICAgIHRtcGRpciA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLmNoZGlyKGN3ZCkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShvcy5nZXRjd2QoKSknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10bXBkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKICAgICAgICAgbm9ybWNhc2UgPSBvcy5wYXRoLm5vcm1jYXNlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybWNhc2UocC5zdGRvdXQucmVhZCgpKSwgbm9ybWNhc2UodG1wZGlyKSkKIApAQCAtMjYxLDE1ICszMDYsMTcgQEAKICAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gIm9yYW5nZSIKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShvcy5nZXRlbnYoIkZSVUlUIikpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAib3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3N0ZGluKHNlbGYpOgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAicGVhciIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAicGVhciIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgcC5jb21tdW5pY2F0ZSgicGVhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAxKQpAQCAtMjg4LDcgKzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCiAgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhzdGRlcnIpLCAicGluZWFwcGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICJwaW5lYXBwbGUiKQogCiAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGUoc2VsZik6CiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKQEAgLTI5OCwyNiArMzQ1LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgiYmFuYW5hIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJiYW5hbmEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMoc3RkZXJyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAicGluZWFwcGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICJwaW5lYXBwbGUiKQogCiAgICAgIyBUaGlzIHRlc3QgaXMgTGludXggc3BlY2lmaWMgZm9yIHNpbXBsaWNpdHkgdG8gYXQgbGVhc3QgaGF2ZQogICAgICMgc29tZSBjb3ZlcmFnZS4gIEl0IGlzIG5vdCBhIHBsYXRmb3JtIHNwZWNpZmljIGJ1Zy4KLSAgICBpZiBvcy5wYXRoLmlzZGlyKCcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKSk6Ci0gICAgICAgICMgVGVzdCBmb3IgdGhlIGZkIGxlYWsgcmVwb3J0ZWQgaW4gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI3OTEuCi0gICAgICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3BpcGVfZmRfbGVhayhzZWxmKToKLSAgICAgICAgICAgIGZkX2RpcmVjdG9yeSA9ICcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKQotICAgICAgICAgICAgbnVtX2Zkc19iZWZvcmVfcG9wZW4gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncHJpbnQoKSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgbnVtX2Zkc19hZnRlcl9jb21tdW5pY2F0ZSA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCi0gICAgICAgICAgICBkZWwgcAotICAgICAgICAgICAgbnVtX2Zkc19hZnRlcl9kZXN0cnVjdGlvbiA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2Rlc3RydWN0aW9uKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fZmRzX2JlZm9yZV9wb3BlbiwgbnVtX2Zkc19hZnRlcl9jb21tdW5pY2F0ZSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5wYXRoLmlzZGlyKCcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbnV4IHNwZWNpZmljIikKKyAgICAjIFRlc3QgZm9yIHRoZSBmZCBsZWFrIHJlcG9ydGVkIGluIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNzkxLgorICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX3BpcGVfZmRfbGVhayhzZWxmKToKKyAgICAgICAgZmRfZGlyZWN0b3J5ID0gJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpCisgICAgICAgIG51bV9mZHNfYmVmb3JlX3BvcGVuID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgbnVtX2Zkc19hZnRlcl9jb21tdW5pY2F0ZSA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCisgICAgICAgIGRlbCBwCisgICAgICAgIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2Rlc3RydWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9mZHNfYmVmb3JlX3BvcGVuLCBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlKQogCiAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcmV0dXJucyhzZWxmKToKICAgICAgICAgIyBjb21tdW5pY2F0ZSgpIHNob3VsZCByZXR1cm4gTm9uZSBpZiBubyByZWRpcmVjdGlvbiBpcyBhY3RpdmUKQEAgLTM0MCwxMiArMzkwLDE1IEBACiAgICAgICAgIG9zLmNsb3NlKHkpCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JwotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCg0NykpOycgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgieHl6IiolZCk7JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKDQ3KSk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgieHl6IiolZCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKScgJSBwaXBlX2J1Zl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICBzdHJpbmdfdG9fd3JpdGUgPSAiYWJjIipwaXBlX2J1ZgogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZShzdHJpbmdfdG9fd3JpdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBzdHJpbmdfdG9fd3JpdGUpCkBAIC0zNTMsMTUgKzQwNiwxOCBAQAogICAgIGRlZiB0ZXN0X3dyaXRlc19iZWZvcmVfY29tbXVuaWNhdGUoc2VsZik6CiAgICAgICAgICMgc3RkaW4ud3JpdGUgYmVmb3JlIGNvbW11bmljYXRlKCkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKICAgICAgICAgcC5zdGRpbi53cml0ZSgiYmFuYW5hIikKICAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoInNwbGl0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJiYW5hbmFzcGxpdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhzdGRlcnIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICIiKQogCiAgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCkBAIC0zNzksNiArNDM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU2Iik7J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQogICAgICAgICBzdGRvdXQgPSBwLnN0ZG91dC5yZWFkKCkKICAgICAgICAgaWYgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKICAgICAgICAgICAgICMgSW50ZXJwcmV0ZXIgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CkBAIC00MDYsNiArNDYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIlxcbmxpbmU2Iik7J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCiAgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgaWYgaGFzYXR0cihmaWxlLCAnbmV3bGluZXMnKToKICAgICAgICAgICAgICMgSW50ZXJwcmV0ZXIgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CkBAIC00MTMsMjQgKzQ3Miw0NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXG5saW5lM1xubGluZTRcbmxpbmU1XG5saW5lNiIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIEludGVycHJldGVyIHdpdGhvdXQgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJsaW5lMVxubGluZTJccmxpbmUzXHJcbmxpbmU0XHJcbmxpbmU1XG5saW5lNiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUxXG5saW5lMlxybGluZTNcclxubGluZTRcclxubGluZTVcbmxpbmU2IikKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHdlIGxlYWsgbm8gcmVzb3VyY2VzCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHRlc3Rfc3VwcG9ydCwgImlzX3Jlc291cmNlX2VuYWJsZWQiKSBcCi0gICAgICAgICAgICAgICBvciB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgic3VicHJvY2VzcyIpIGFuZCBub3QgbXN3aW5kb3dzOgorICAgICAgICBpZiBub3QgbXN3aW5kb3dzOgogICAgICAgICAgICAgbWF4X2hhbmRsZXMgPSAxMDI2ICMgdG9vIG11Y2ggZm9yIG1vc3QgVU5JWCBzeXN0ZW1zCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXhfaGFuZGxlcyA9IDY1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKG1heF9oYW5kbGVzKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7c3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSJdLAotICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICBkYXRhID0gcC5jb21tdW5pY2F0ZSgibGltZSIpWzBdCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJsaW1lIikKLQorICAgICAgICAgICAgbWF4X2hhbmRsZXMgPSAyMDUwICMgdG9vIG11Y2ggZm9yIChhdCBsZWFzdCBzb21lKSBXaW5kb3dzIHNldHVwcworICAgICAgICBoYW5kbGVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWF4X2hhbmRsZXMpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQob3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZIHwgb3MuT19DUkVBVCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTUZJTEU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJmYWlsZWQgdG8gcmVhY2ggdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCAiCisgICAgICAgICAgICAgICAgICAgICIodHJpZWQgJWQpIiAlIG1heF9oYW5kbGVzKQorICAgICAgICAgICAgIyBDbG9zZSBhIGNvdXBsZSBvZiB0aGVtIChzaG91bGQgYmUgZW5vdWdoIGZvciBhIHN1YnByb2Nlc3MpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoaGFuZGxlcy5wb3AoKSkKKyAgICAgICAgICAgICMgTG9vcCBjcmVhdGluZyBzb21lIHN1YnByb2Nlc3Nlcy4gSWYgb25lIG9mIHRoZW0gbGVha3Mgc29tZSBmZHMsCisgICAgICAgICAgICAjIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIHdpbGwgZmFpbCBieSByZWFjaGluZyB0aGUgbWF4IGZkIGxpbWl0LgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTUpOgorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAgICAgZGF0YSA9IHAuY29tbXVuaWNhdGUoYiJsaW1lIilbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIibGltZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgaCBpbiBoYW5kbGVzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGgpCiAKICAgICBkZWYgdGVzdF9saXN0MmNtZGxpbmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhIGIgYycsICdkJywgJ2UnXSksCkBAIC00NjIsNyArNTQyLDcgQEAKICAgICAgICAgIyBidXQsIGJhc2VkIG9uIHN5c3RlbSBzY2hlZHVsaW5nIHdlIGNhbid0IGNvbnRyb2wsIGl0J3MgcG9zc2libGUKICAgICAgICAgIyBwb2xsKCkgbmV2ZXIgcmV0dXJuZWQgTm9uZS4gIEl0ICJzaG91bGQgYmUiIHZlcnkgcmFyZSB0aGF0IGl0CiAgICAgICAgICMgZGlkbid0IGdvIGFyb3VuZCBhdCBsZWFzdCB0d2ljZS4KLSAgICAgICAgc2VsZi5hc3NlcnRfKGNvdW50ID49IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGNvdW50LCAyKQogICAgICAgICAjIFN1YnNlcXVlbnQgaW52b2NhdGlvbnMgc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSByZXR1cm5jb2RlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb2xsKCksIDApCiAKQEAgLTQ3OCwxMiArNTU4LDggQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2J1ZnNpemUoc2VsZik6CiAgICAgICAgICMgYW4gaW52YWxpZCB0eXBlIG9mIHRoZSBidWZzaXplIGFyZ3VtZW50IHNob3VsZCByYWlzZQogICAgICAgICAjIFR5cGVFcnJvci4KLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwgIm9yYW5nZSIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFR5cGVFcnJvciIpCiAKICAgICBkZWYgdGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvcihzZWxmKToKICAgICAgICAgIyBzZWUgYnVnICM1MTc5OiBQb3BlbiBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzIHRvIFBJUEVzIGlmCkBAIC00OTIsMjgwICs1NjgsMzk4IEBACiAgICAgICAgICMgdmFsdWUgZm9yIHRoYXQgbGltaXQsIGJ1dCBXaW5kb3dzIGhhcyAyMDQ4LCBzbyB3ZSBsb29wCiAgICAgICAgICMgMTAyNCB0aW1lcyAoZWFjaCBjYWxsIGxlYWtlZCB0d28gZmRzKS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdpbmRvd3MgcmFpc2VzIElPRXJyb3IuICBPdGhlcnMgcmFpc2UgT1NFcnJvci4KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvcgotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSwgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyAhPSAyOiAgIyBpZ25vcmUgIm5vIHN1Y2ggZmlsZSIKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGlmIGMuZXhjZXB0aW9uLmVycm5vICE9IGVycm5vLkVOT0VOVDogICMgaWdub3JlICJubyBzdWNoIGZpbGUiCisgICAgICAgICAgICAgICAgcmFpc2UgYy5leGNlcHRpb24KIAotICAgICMKLSAgICAjIFBPU0lYIHRlc3RzCi0gICAgIwotICAgIGlmIG5vdCBtc3dpbmRvd3M6Ci0gICAgICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6Ci0gICAgICAgICAgICAjIGNhdGNoZWQgJiByZS1yYWlzZWQgZXhjZXB0aW9ucwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPSIvdGhpcy9wYXRoL2RvZXMvbm90L2V4aXN0IikKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSBjaGlsZF90cmFjZWJhY2sgc2hvdWxkIGNvbnRhaW4gIm9zLmNoZGlyIgotICAgICAgICAgICAgICAgICMgc29tZXdoZXJlLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5jaGlsZF90cmFjZWJhY2suZmluZCgib3MuY2hkaXIiKSwgLTEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgT1NFcnJvciIpCisgICAgZGVmIHRlc3RfaGFuZGxlc19jbG9zZWRfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIElmIENyZWF0ZVByb2Nlc3MgZXhpdHMgd2l0aCBhbiBlcnJvciwgZW5zdXJlIHRoZQorICAgICAgICAjIGR1cGxpY2F0ZSBvdXRwdXQgaGFuZGxlcyBhcmUgcmVsZWFzZWQKKyAgICAgICAgaWZoYW5kbGUsIGlmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBvZmhhbmRsZSwgb2ZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIGVmaGFuZGxlLCBlZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbiAoWyIqIl0sIHN0ZGluPWlmaGFuZGxlLCBzdGRvdXQ9b2ZoYW5kbGUsCisgICAgICAgICAgICAgIHN0ZGVycj1lZmhhbmRsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBvcy5jbG9zZShpZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShpZm5hbWUpCisgICAgICAgICAgICBvcy5jbG9zZShvZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShvZm5hbWUpCisgICAgICAgICAgICBvcy5jbG9zZShlZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShlZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaWZuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvZm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGVmbmFtZSkpCiAKLSAgICAgICAgZGVmIF9zdXBwcmVzc19jb3JlX2ZpbGVzKHNlbGYpOgotICAgICAgICAgICAgIiIiVHJ5IHRvIHByZXZlbnQgY29yZSBmaWxlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuCi0gICAgICAgICAgICBSZXR1cm5zIHByZXZpb3VzIHVsaW1pdCBpZiBzdWNjZXNzZnVsLCBlbHNlIE5vbmUuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAotICAgICAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKworIyBjb250ZXh0IG1hbmFnZXIKK2NsYXNzIF9TdXBwcmVzc0NvcmVGaWxlcyhvYmplY3QpOgorICAgICIiIlRyeSB0byBwcmV2ZW50IGNvcmUgZmlsZXMgZnJvbSBiZWluZyBjcmVhdGVkLiIiIgorICAgIG9sZF9saW1pdCA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIlRyeSB0byBzYXZlIHByZXZpb3VzIHVsaW1pdCwgdGhlbiBzZXQgaXQgdG8gKDAsIDApLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgcmVzb3VyY2UKKyAgICAgICAgICAgIHNlbGYub2xkX2xpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCisgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAorICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCisgICAgICAgICAgICAjIHdoZW4gaXQgaXMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKKyAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCisgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKICAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgotICAgICAgICAgICAgICAgICAgICBwcmludCAidGhpcyB0ZXN0cyB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsIHRoYXQgaXMgaW50ZW50aW9uYWwiCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6CisgICAgICAgICAgICAgICAgcHJpbnQgInRoaXMgdGVzdHMgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCB0aGF0IGlzIGludGVudGlvbmFsIgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHJlc291cmNlCi0gICAgICAgICAgICAgICAgb2xkX2xpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgKDAsMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9sZF9saW1pdAotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgorICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZXNvdXJjZQorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF9saW1pdCkKKyAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgorICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlZiBfdW5zdXBwcmVzc19jb3JlX2ZpbGVzKHNlbGYsIG9sZF9saW1pdCk6Ci0gICAgICAgICAgICAiIiJSZXR1cm4gY29yZSBmaWxlIGJlaGF2aW9yIHRvIGRlZmF1bHQuIiIiCi0gICAgICAgICAgICBpZiBvbGRfbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgcmVzb3VyY2UKLSAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIG9sZF9saW1pdCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBkZWYgdGVzdF9ydW5fYWJvcnQoc2VsZik6Ci0gICAgICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KLSAgICAgICAgICAgIG9sZF9saW1pdCA9IHNlbGYuX3N1cHByZXNzX2NvcmVfZmlsZXMoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBvczsgb3MuYWJvcnQoKSJdKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl91bnN1cHByZXNzX2NvcmVfZmlsZXMob2xkX2xpbWl0KQotICAgICAgICAgICAgcC53YWl0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXAucmV0dXJuY29kZSwgc2lnbmFsLlNJR0FCUlQpCitAdW5pdHRlc3Quc2tpcElmKG1zd2luZG93cywgIlBPU0lYIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFBPU0lYUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAKLSAgICAgICAgZGVmIHRlc3RfcHJlZXhlYyhzZWxmKToKLSAgICAgICAgICAgICMgcHJlZXhlYyBmdW5jdGlvbgorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgY2F1Z2h0ICYgcmUtcmFpc2VkIGV4Y2VwdGlvbnMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Ii90aGlzL3BhdGgvZG9lcy9ub3QvZXhpc3QiKQorICAgICAgICAjIFRoZSBhdHRyaWJ1dGUgY2hpbGRfdHJhY2ViYWNrIHNob3VsZCBjb250YWluICJvcy5jaGRpciIgc29tZXdoZXJlLgorICAgICAgICBzZWxmLmFzc2VydEluKCJvcy5jaGRpciIsIGMuZXhjZXB0aW9uLmNoaWxkX3RyYWNlYmFjaykKKworICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKKyAgICAgICAgIyByZXR1cm5jb2RlIGhhbmRsZXMgc2lnbmFsIHRlcm1pbmF0aW9uCisgICAgICAgIHdpdGggX1N1cHByZXNzQ29yZUZpbGVzKCk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudigiRlJVSVQiKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IG9zOyBvcy5hYm9ydCgpIl0pCisgICAgICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1wLnJldHVybmNvZGUsIHNpZ25hbC5TSUdBQlJUKQorCisgICAgZGVmIHRlc3RfcHJlZXhlYyhzZWxmKToKKyAgICAgICAgIyBwcmVleGVjIGZ1bmN0aW9uCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzLCBvczsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZShvcy5nZXRlbnYoJ0ZSVUlUJykpIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiBvcy5wdXRlbnYoIkZSVUlUIiwgImFwcGxlIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgImFwcGxlIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgImFwcGxlIikKIAotICAgICAgICBkZWYgdGVzdF9hcmdzX3N0cmluZyhzZWxmKToKLSAgICAgICAgICAgICMgYXJncyBpcyBhIHN0cmluZwotICAgICAgICAgICAgZiwgZm5hbWUgPSBzZWxmLm1rc3RlbXAoKQotICAgICAgICAgICAgb3Mud3JpdGUoZiwgIiMhL2Jpbi9zaFxuIikKLSAgICAgICAgICAgIG9zLndyaXRlKGYsICJleGVjICclcycgLWMgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSdcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBvcy5jbG9zZShmKQotICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIDA3MDApCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihmbmFtZSkKLSAgICAgICAgICAgIHAud2FpdCgpCi0gICAgICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCisgICAgZGVmIHRlc3RfYXJnc19zdHJpbmcoc2VsZik6CisgICAgICAgICMgYXJncyBpcyBhIHN0cmluZworICAgICAgICBmLCBmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBvcy53cml0ZShmLCAiIyEvYmluL3NoXG4iKQorICAgICAgICBvcy53cml0ZShmLCAiZXhlYyAnJXMnIC1jICdpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NyknXG4iICUKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIG9zLmNsb3NlKGYpCisgICAgICAgIG9zLmNobW9kKGZuYW1lLCAwbzcwMCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oZm5hbWUpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDQ3KQogCi0gICAgICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKLSAgICAgICAgICAgICMgaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz00NykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPTQ3KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPTQ3KQogCi0gICAgICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgotICAgICAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc2VxdWVuY2UpCi0gICAgICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJlY2hvICRGUlVJVCJdLCBzaGVsbD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCAiYXBwbGUiKQorICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImVjaG8gJEZSVUlUIl0sIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgImFwcGxlIikKIAotICAgICAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCi0gICAgICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oImVjaG8gJEZSVUlUIiwgc2hlbGw9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgImFwcGxlIikKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHN0cmluZykKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkRlJVSVQiLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKCksICJhcHBsZSIpCiAKLSAgICAgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCBvbiBVTklYCi0gICAgICAgICAgICBmLCBmbmFtZSA9IHNlbGYubWtzdGVtcCgpCi0gICAgICAgICAgICBvcy53cml0ZShmLCAiIyEvYmluL3NoXG4iKQotICAgICAgICAgICAgb3Mud3JpdGUoZiwgImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIG9zLmNsb3NlKGYpCi0gICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDcwMCkKLSAgICAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKGZuYW1lKQotICAgICAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFVOSVgKKyAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgb3Mud3JpdGUoZiwgIiMhL2Jpbi9zaFxuIikKKyAgICAgICAgb3Mud3JpdGUoZiwgImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlKQorICAgICAgICBvcy5jbG9zZShmKQorICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDcwMCkKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoZm5hbWUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCiAKLSAgICAgICAgZGVmIHRlc3Rfc3BlY2lmaWNfc2hlbGwoc2VsZik6Ci0gICAgICAgICAgICAjIElzc3VlICM5MjY1OiBJbmNvcnJlY3QgbmFtZSBwYXNzZWQgYXMgYXJnWzBdLgotICAgICAgICAgICAgc2hlbGxzID0gW10KLSAgICAgICAgICAgIGZvciBwcmVmaXggaW4gWycvYmluJywgJy91c3IvYmluLycsICcvdXNyL2xvY2FsL2JpbiddOgotICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIFsnYmFzaCcsICdrc2gnXToKLSAgICAgICAgICAgICAgICAgICAgc2ggPSBvcy5wYXRoLmpvaW4ocHJlZml4LCBuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGVsbHMuYXBwZW5kKHNoKQotICAgICAgICAgICAgaWYgbm90IHNoZWxsczogICMgV2lsbCBwcm9iYWJseSB3b3JrIGZvciBhbnkgc2hlbGwgYnV0IGNzaC4KLSAgICAgICAgICAgICAgICByZXR1cm4gICMgc2tpcCB0ZXN0Ci0gICAgICAgICAgICBzaCA9ICcvYmluL3NoJwotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2gpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoc2gpOgotICAgICAgICAgICAgICAgICMgVGVzdCB3aWxsIGZhaWwgaWYgL2Jpbi9zaCBpcyBhIHN5bWxpbmsgdG8gY3NoLgotICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCi0gICAgICAgICAgICBmb3Igc2ggaW4gc2hlbGxzOgotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJlY2hvICQwIiwgZXhlY3V0YWJsZT1zaCwgc2hlbGw9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKCksIHNoKQorICAgIGRlZiB0ZXN0X3NwZWNpZmljX3NoZWxsKHNlbGYpOgorICAgICAgICAjIElzc3VlICM5MjY1OiBJbmNvcnJlY3QgbmFtZSBwYXNzZWQgYXMgYXJnWzBdLgorICAgICAgICBzaGVsbHMgPSBbXQorICAgICAgICBmb3IgcHJlZml4IGluIFsnL2JpbicsICcvdXNyL2Jpbi8nLCAnL3Vzci9sb2NhbC9iaW4nXToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIFsnYmFzaCcsICdrc2gnXToKKyAgICAgICAgICAgICAgICBzaCA9IG9zLnBhdGguam9pbihwcmVmaXgsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2gpOgorICAgICAgICAgICAgICAgICAgICBzaGVsbHMuYXBwZW5kKHNoKQorICAgICAgICBpZiBub3Qgc2hlbGxzOiAjIFdpbGwgcHJvYmFibHkgd29yayBmb3IgYW55IHNoZWxsIGJ1dCBjc2guCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJiYXNoIG9yIGtzaCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICAgICAgc2ggPSAnL2Jpbi9zaCcKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2gpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoc2gpOgorICAgICAgICAgICAgIyBUZXN0IHdpbGwgZmFpbCBpZiAvYmluL3NoIGlzIGEgc3ltbGluayB0byBjc2guCisgICAgICAgICAgICBzaGVsbHMuYXBwZW5kKHNoKQorICAgICAgICBmb3Igc2ggaW4gc2hlbGxzOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oImVjaG8gJDAiLCBleGVjdXRhYmxlPXNoLCBzaGVsbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKCksIHNoKQogCi0gICAgICAgIGRlZiBESVNBQkxFRF90ZXN0X3NlbmRfc2lnbmFsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImlucHV0KCkiXSkKKyAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgIyBEbyBub3QgaW5oZXJpdCBmaWxlIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50LgorICAgICAgICAjIEl0IHNob3VsZCBmaXggZmFpbHVyZXMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd4XFxuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMzApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIGludGVycHJldGVyIHRvIGJlIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgYmVmb3JlCisgICAgICAgICMgc2VuZGluZyBhbnkgc2lnbmFsLgorICAgICAgICBwLnN0ZG91dC5yZWFkKDEpCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgcmV0dXJuIHAKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC5zZW5kX3NpZ25hbChzaWduYWwuU0lHSU5UKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLndhaXQoKSwgMCkKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignS2V5Ym9hcmRJbnRlcnJ1cHQnLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC53YWl0KCksIDApCiAKLSAgICAgICAgZGVmIERJU0FCTEVEX3Rlc3Rfa2lsbChzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQorICAgIGRlZiB0ZXN0X2tpbGwoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLl9raWxsX3Byb2Nlc3MoJ2tpbGwnKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR0tJTEwpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAua2lsbCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR0tJTEwpCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5fa2lsbF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR1RFUk0pCiAKLSAgICAgICAgZGVmIERJU0FCTEVEX3Rlc3RfdGVybWluYXRlKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIGNoZWNrX2Nsb3NlX3N0ZF9mZHMoc2VsZiwgZmRzKToKKyAgICAgICAgIyBJc3N1ZSAjOTkwNTogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCisgICAgICAgICMgc29tZSBzdGFuZGFyZCBmZHMgY2xvc2VkCisgICAgICAgIHN0ZGluID0gMAorICAgICAgICBuZXdmZHMgPSBbXQorICAgICAgICBmb3IgYSBpbiBmZHM6CisgICAgICAgICAgICBiID0gb3MuZHVwKGEpCisgICAgICAgICAgICBuZXdmZHMuYXBwZW5kKGIpCisgICAgICAgICAgICBpZiBhID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBvdXQsIGVyciA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW4sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIGVyciA9IHRlc3Rfc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG91dCwgZXJyKSwgKGInYXBwbGUnLCBiJ29yYW5nZScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGIsIGEgaW4gemlwKG5ld2ZkcywgZmRzKToKKyAgICAgICAgICAgICAgICBvcy5kdXAyKGIsIGEpCisgICAgICAgICAgICBmb3IgYiBpbiBuZXdmZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoYikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgLXNpZ25hbC5TSUdURVJNKQorICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMF0pCiAKLSAgICAjCi0gICAgIyBXaW5kb3dzIHRlc3RzCi0gICAgIwotICAgIGlmIG1zd2luZG93czoKLSAgICAgICAgZGVmIHRlc3Rfc3RhcnR1cGluZm8oc2VsZik6Ci0gICAgICAgICAgICAjIHN0YXJ0dXBpbmZvIGFyZ3VtZW50Ci0gICAgICAgICAgICAjIFdlIHVzZXMgaGFyZGNvZGVkIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bwotICAgICAgICAgICAgIyBkZXBlbmQgb24gd2luMzJhbGwuCi0gICAgICAgICAgICBTVEFSVEZfVVNFU0hPV1dJTkRPVyA9IDEKLSAgICAgICAgICAgIFNXX01BWElNSVpFID0gMwotICAgICAgICAgICAgc3RhcnR1cGluZm8gPSBzdWJwcm9jZXNzLlNUQVJUVVBJTkZPKCkKLSAgICAgICAgICAgIHN0YXJ0dXBpbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVwotICAgICAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBTV19NQVhJTUlaRQotICAgICAgICAgICAgIyBTaW5jZSBQeXRob24gaXMgYSBjb25zb2xlIHByb2Nlc3MsIGl0IHdvbid0IGJlIGFmZmVjdGVkCi0gICAgICAgICAgICAjIGJ5IHdTaG93V2luZG93LCBidXQgdGhlIGFyZ3VtZW50IHNob3VsZCBiZSBzaWxlbnRseQotICAgICAgICAgICAgIyBpZ25vcmVkCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKKyAgICBkZWYgdGVzdF9jbG9zZV9mZF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzFdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFsyXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMV0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzAsIDJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzFfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFsxLCAyXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzFfMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA4MDY6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAorICAgICAgICAjIGFsbCBzdGFuZGFyZCBmZHMgY2xvc2VkLgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzAsIDEsIDJdKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aGVuX3NpZ2NoaWxkX2lnbm9yZWQoc2VsZik6CisgICAgICAgICMgTk9URTogc2lnY2hpbGRfaWdub3JlLnB5IG1heSBub3QgYmUgYW4gZWZmZWN0aXZlIHRlc3Qgb24gYWxsIE9TZXMuCisgICAgICAgIHNpZ2NoaWxkX2lnbm9yZSA9IHRlc3Rfc3VwcG9ydC5maW5kZmlsZSgic2lnY2hpbGRfaWdub3JlLnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIHNpZ2NoaWxkX2lnbm9yZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5yZXR1cm5jb2RlLCAic2lnY2hpbGRfaWdub3JlLnB5IGV4aXRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vbi16ZXJvIHdpdGggdGhpcyBlcnJvcjpcbiVzIiAlIHN0ZGVycikKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJXaW5kb3dzIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwaW5mbyhzZWxmKToKKyAgICAgICAgIyBzdGFydHVwaW5mbyBhcmd1bWVudAorICAgICAgICAjIFdlIHVzZXMgaGFyZGNvZGVkIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bworICAgICAgICAjIGRlcGVuZCBvbiB3aW4zMmFsbC4KKyAgICAgICAgU1RBUlRGX1VTRVNIT1dXSU5ET1cgPSAxCisgICAgICAgIFNXX01BWElNSVpFID0gMworICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQorICAgICAgICBzdGFydHVwaW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNIT1dXSU5ET1cKKyAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBTV19NQVhJTUlaRQorICAgICAgICAjIFNpbmNlIFB5dGhvbiBpcyBhIGNvbnNvbGUgcHJvY2VzcywgaXQgd29uJ3QgYmUgYWZmZWN0ZWQKKyAgICAgICAgIyBieSB3U2hvd1dpbmRvdywgYnV0IHRoZSBhcmd1bWVudCBzaG91bGQgYmUgc2lsZW50bHkKKyAgICAgICAgIyBpZ25vcmVkCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89c3RhcnR1cGluZm8pCiAKLSAgICAgICAgZGVmIHRlc3RfY3JlYXRpb25mbGFncyhzZWxmKToKLSAgICAgICAgICAgICMgY3JlYXRpb25mbGFncyBhcmd1bWVudAotICAgICAgICAgICAgQ1JFQVRFX05FV19DT05TT0xFID0gMTYKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiAgICBhIERPUyBib3ggc2hvdWxkIGZsYXNoIGJyaWVmbHkgLi4uXG4iKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtYyAiaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMC4yNSkiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPUNSRUFURV9ORVdfQ09OU09MRSkKKyAgICBkZWYgdGVzdF9jcmVhdGlvbmZsYWdzKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW9uZmxhZ3MgYXJndW1lbnQKKyAgICAgICAgQ1JFQVRFX05FV19DT05TT0xFID0gMTYKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiICAgIGEgRE9TIGJveCBzaG91bGQgZmxhc2ggYnJpZWZseSAuLi5cbiIpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgwLjI1KSInLAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz1DUkVBVEVfTkVXX0NPTlNPTEUpCiAKLSAgICAgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzKHNlbGYpOgorICAgICAgICAjIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQogCi0gICAgICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkcyhzZWxmKToKLSAgICAgICAgICAgICMgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycwotICAgICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNldCJdLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInBoeXNhbGlzIiwgcC5zdGRvdXQucmVhZCgpKQogCi0gICAgICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgotICAgICAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc2VxdWVuY2UpCi0gICAgICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzZXQiXSwgc2hlbGw9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLnN0ZG91dC5yZWFkKCkuZmluZCgicGh5c2FsaXMiKSwgLTEpCisgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oInNldCIsIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigicGh5c2FsaXMiLCBwLnN0ZG91dC5yZWFkKCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nKHNlbGYpOgotICAgICAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc3RyaW5nKQotICAgICAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJzZXQiLCBzaGVsbD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5maW5kKCJwaHlzYWxpcyIpLCAtMSkKKyAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gV2luZG93cworICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLWMgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKIAotICAgICAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKLSAgICAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLWMgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgbWV0aG9kLCAqYXJncyk6CisgICAgICAgICMgU29tZSB3aW4zMiBidWlsZGJvdCByYWlzZXMgRU9GRXJyb3IgaWYgc3RkaW4gaXMgaW5oZXJpdGVkCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd4XFxuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMzApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICAjIFdhaXQgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJlZm9yZQorICAgICAgICAjIHNlbmRpbmcgYW55IHNpZ25hbC4KKyAgICAgICAgcC5zdGRvdXQucmVhZCgxKQorICAgICAgICBnZXRhdHRyKHAsIG1ldGhvZCkoKmFyZ3MpCisgICAgICAgIF8sIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgJycpCisgICAgICAgIHJldHVybmNvZGUgPSBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJldHVybmNvZGUsIDApCiAKLSAgICAgICAgZGVmIERJU0FCTEVEX3Rlc3Rfc2VuZF9zaWduYWwoc2VsZik6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQorICAgIGRlZiB0ZXN0X3NlbmRfc2lnbmFsKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX3Byb2Nlc3MoJ3NlbmRfc2lnbmFsJywgc2lnbmFsLlNJR1RFUk0pCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAuc2VuZF9zaWduYWwoc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQorICAgIGRlZiB0ZXN0X2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vzcygna2lsbCcpCiAKLSAgICAgICAgZGVmIERJU0FCTEVEX3Rlc3Rfa2lsbChzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQorICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLmtpbGwoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLndhaXQoKSwgMCkKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF90ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImlucHV0KCkiXSkKK0B1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3VicHJvY2VzcywgJ19oYXNfcG9sbCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICJwb2xsIHN5c3RlbSBjYWxsIG5vdCBzdXBwb3J0ZWQiKQorY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsKFByb2Nlc3NUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBUcnVlCisgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQorCiAKIGNsYXNzIEhlbHBlckZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBfdGVzdF9laW50cl9yZXRyeV9jYWxsKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiZXJybm8gYW5kIEVJTlRSIG1ha2Ugbm8gc2Vuc2Ugb24gd2luZG93cyIpCisgICAgZGVmIHRlc3RfZWludHJfcmV0cnlfY2FsbChzZWxmKToKICAgICAgICAgcmVjb3JkX2NhbGxzID0gW10KICAgICAgICAgZGVmIGZha2Vfb3NfZnVuYygqYXJncyk6CiAgICAgICAgICAgICByZWNvcmRfY2FsbHMuYXBwZW5kKGFyZ3MpCkBAIC03ODEsMTUgKzk3NSw2MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX2VpbnRyX3JldHJ5X2NhbGwoZmFrZV9vc19mdW5jLCA2NjYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoMjU2LCA5OTkpLCAoNjY2LCksICg2NjYsKV0sIHJlY29yZF9jYWxscykKIAotICAgIGlmIG5vdCBtc3dpbmRvd3M6Ci0gICAgICAgIHRlc3RfZWludHJfcmV0cnlfY2FsbCA9IF90ZXN0X2VpbnRyX3JldHJ5X2NhbGwKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MobXN3aW5kb3dzLCAibXN3aW5kb3dzIG9ubHkiKQorY2xhc3MgQ29tbWFuZHNXaXRoU3BhY2VzIChCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihDb21tYW5kc1dpdGhTcGFjZXMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCIucHkiLCAidGUgc3QiKQorICAgICAgICBzZWxmLmZuYW1lID0gZm5hbWUubG93ZXIgKCkKKyAgICAgICAgb3Mud3JpdGUoZiwgYiJpbXBvcnQgc3lzOyIKKyAgICAgICAgICAgICAgICAgICAgYiJzeXMuc3Rkb3V0LndyaXRlKCclZCAlcycgJSAobGVuKHN5cy5hcmd2KSwgW2EubG93ZXIgKCkgZm9yIGEgaW4gc3lzLmFyZ3ZdKSkiCisgICAgICAgICkKKyAgICAgICAgb3MuY2xvc2UoZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuZm5hbWUpCisgICAgICAgIHN1cGVyKENvbW1hbmRzV2l0aFNwYWNlcywgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHdpdGhfc3BhY2VzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGt3YXJnc1snc3Rkb3V0J10gPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgcC5zdGRvdXQucmVhZCAoKS5kZWNvZGUoIm1iY3MiKSwKKyAgICAgICAgICAiMiBbJXIsICdhYiBjZCddIiAlIHNlbGYuZm5hbWUKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoJyIlcyIgIiVzIiAiJXMiJyAlIChzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYiBjZCIpLCBzaGVsbD0xKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Vfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwgImFiIGNkIl0sIHNoZWxsPTEpCisKKyAgICBkZWYgdGVzdF9ub3NoZWxsX3N0cmluZ193aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKCciJXMiICIlcyIgIiVzIicgJSAoc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYiBjZCIpKQorCisgICAgZGVmIHRlc3Rfbm9zaGVsbF9zZXF1ZW5jZV93aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoW3N5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLCAiYWIgY2QiXSkKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHJvY2Vzc1Rlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVscGVyRnVuY3Rpb25UZXN0cykKLSAgICBpZiBoYXNhdHRyKHRlc3Rfc3VwcG9ydCwgInJlYXBfY2hpbGRyZW4iKToKLSAgICAgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorICAgIHVuaXRfdGVzdHMgPSAoUHJvY2Vzc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgUE9TSVhQcm9jZXNzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICBXaW4zMlByb2Nlc3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbCwKKyAgICAgICAgICAgICAgICAgIEhlbHBlckZ1bmN0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICBDb21tYW5kc1dpdGhTcGFjZXMpCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp1bml0X3Rlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkKaW5kZXggMmM1ZTdkNC4uYzk2ZjcxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5CkBAIC0xLDQgKzEsNSBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkLCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVGVzdEZhaWxlZCwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHVuaXR0ZXN0CiBzdW5hdWRpb2RldiA9IGltcG9ydF9tb2R1bGUoJ3N1bmF1ZGlvZGV2JywgZGVwcmVjYXRlZD1UcnVlKQogaW1wb3J0IG9zCiAKQEAgLTgsNyArOSw3IEBACiAgICAgYXVkaW9kZXYgPSAiL2Rldi9hdWRpbyIKIAogaWYgbm90IG9zLnBhdGguZXhpc3RzKGF1ZGlvZGV2KToKLSAgICByYWlzZSBUZXN0U2tpcHBlZCgibm8gYXVkaW8gZGV2aWNlIGZvdW5kISIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5vIGF1ZGlvIGRldmljZSBmb3VuZCEiKQogCiBkZWYgcGxheV9zb3VuZF9maWxlKHBhdGgpOgogICAgIGZwID0gb3BlbihwYXRoLCAncicpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IDlmZmQzOWIuLjZlMmI3OTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC0yMiw3ICsyMiw2IEBACiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmZpbGVsaXN0CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5tc3ZjY29tcGlsZXIKLSAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXdlcmtzY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMudGV4dF9maWxlCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIKIApAQCAtNjYsNyArNjUsNiBAQAogICAgICAgICAgICAgaW1wb3J0IHBzdGF0cwogICAgICAgICAgICAgaW1wb3J0IHB5X2NvbXBpbGUKICAgICAgICAgICAgIGltcG9ydCByZXhlYwotICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCiAgICAgICAgICAgICBpbXBvcnQgc2NoZWQKICAgICAgICAgICAgIGltcG9ydCBzbmRoZHIKICAgICAgICAgICAgIGltcG9ydCBzdGF0dmZzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggMjIxMmZjZS4uY2IyZTAzYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtNSwyNiArNSwzOCBAQAogCiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGVycm5vCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgZ2MKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKIGltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IFVzZXJEaWN0CiBpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCit0cnk6CisgICAgaW1wb3J0IHRocmVhZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZCA9IE5vbmUKIAotX19hbGxfXyA9IFsiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJUZXN0U2tpcHBlZCIsICJSZXNvdXJjZURlbmllZCIsICJpbXBvcnRfbW9kdWxlIiwKK19fYWxsX18gPSBbIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLCAiaW1wb3J0X21vZHVsZSIsCiAgICAgICAgICAgICJ2ZXJib3NlIiwgInVzZV9yZXNvdXJjZXMiLCAibWF4X21lbXVzZSIsICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwKICAgICAgICAgICAgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAidW5sb2FkIiwgInVubGluayIsICJybXRyZWUiLCAiZm9yZ2V0IiwKICAgICAgICAgICAgImlzX3Jlc291cmNlX2VuYWJsZWQiLCAicmVxdWlyZXMiLCAiZmluZF91bnVzZWRfcG9ydCIsICJiaW5kX3BvcnQiLAogICAgICAgICAgICAiZmNtcCIsICJoYXZlX3VuaWNvZGUiLCAiaXNfanl0aG9uIiwgIlRFU1RGTiIsICJIT1NUIiwgIkZVWloiLAotICAgICAgICAgICAiZmluZGZpbGUiLCAidmVyaWZ5IiwgInZlcmVxIiwgInNvcnRkaWN0IiwgImNoZWNrX3N5bnRheF9lcnJvciIsCi0gICAgICAgICAgICJvcGVuX3VybHJlc291cmNlIiwgImNoZWNrX3dhcm5pbmdzIiwgIl9jaGVja19weTNrX3dhcm5pbmdzIiwKKyAgICAgICAgICAgIlNBVkVEQ1dEIiwgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwgInNvcnRkaWN0IiwgImNoZWNrX3N5bnRheF9lcnJvciIsCisgICAgICAgICAgICJvcGVuX3VybHJlc291cmNlIiwgImNoZWNrX3dhcm5pbmdzIiwgImNoZWNrX3B5M2tfd2FybmluZ3MiLAogICAgICAgICAgICAiQ2xlYW5JbXBvcnQiLCAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJjYXB0dXJlZF9vdXRwdXQiLAogICAgICAgICAgICAiY2FwdHVyZWRfc3Rkb3V0IiwgIlRyYW5zaWVudFJlc291cmNlIiwgInRyYW5zaWVudF9pbnRlcm5ldCIsCiAgICAgICAgICAgICJydW5fd2l0aF9sb2NhbGUiLCAic2V0X21lbWxpbWl0IiwgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsCiAgICAgICAgICAgICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwgInRocmVhZGluZ19zZXR1cCIsCi0gICAgICAgICAgICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIl0KKyAgICAgICAgICAgInRocmVhZGluZ19jbGVhbnVwIiwgInJlYXBfY2hpbGRyZW4iLCAiY3B5dGhvbl9vbmx5IiwKKyAgICAgICAgICAgImNoZWNrX2ltcGxfZGV0YWlsIiwgImdldF9hdHRyaWJ1dGUiLCAicHkza19ieXRlcyJdCisKIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciByZWdyZXNzaW9uIHRlc3QgZXhjZXB0aW9ucy4iIiIKQEAgLTMyLDM3ICs0NCwxMTYgQEAKIGNsYXNzIFRlc3RGYWlsZWQoRXJyb3IpOgogICAgICIiIlRlc3QgZmFpbGVkLiIiIgogCi1jbGFzcyBUZXN0U2tpcHBlZChFcnJvcik6Ci0gICAgIiIiVGVzdCBza2lwcGVkLgotCi0gICAgVGhpcyBjYW4gYmUgcmFpc2VkIHRvIGluZGljYXRlIHRoYXQgYSB0ZXN0IHdhcyBkZWxpYmVyYXRseQotICAgIHNraXBwZWQsIGJ1dCBub3QgYmVjYXVzZSBhIGZlYXR1cmUgd2Fzbid0IGF2YWlsYWJsZS4gIEZvcgotICAgIGV4YW1wbGUsIGlmIHNvbWUgcmVzb3VyY2UgY2FuJ3QgYmUgdXNlZCwgc3VjaCBhcyB0aGUgbmV0d29yawotICAgIGFwcGVhcnMgdG8gYmUgdW5hdmFpbGFibGUsIHRoaXMgc2hvdWxkIGJlIHJhaXNlZCBpbnN0ZWFkIG9mCi0gICAgVGVzdEZhaWxlZC4KLSAgICAiIiIKLQotY2xhc3MgUmVzb3VyY2VEZW5pZWQoVGVzdFNraXBwZWQpOgorY2xhc3MgUmVzb3VyY2VEZW5pZWQodW5pdHRlc3QuU2tpcFRlc3QpOgogICAgICIiIlRlc3Qgc2tpcHBlZCBiZWNhdXNlIGl0IHJlcXVlc3RlZCBhIGRpc2FsbG93ZWQgcmVzb3VyY2UuCiAKICAgICBUaGlzIGlzIHJhaXNlZCB3aGVuIGEgdGVzdCBjYWxscyByZXF1aXJlcygpIGZvciBhIHJlc291cmNlIHRoYXQKLSAgICBoYXMgbm90IGJlIGVuYWJsZWQuICBJdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZXhwZWN0ZWQKKyAgICBoYXMgbm90IGJlZW4gZW5hYmxlZC4gIEl0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHBlY3RlZAogICAgIGFuZCB1bmV4cGVjdGVkIHNraXBzLgogICAgICIiIgogCi1kZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKToKLSAgICAiIiJJbXBvcnQgdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgVGVzdFNraXBwZWQgaWYgaXQgaXMgbm90Ci0gICAgYXZhaWxhYmxlLiIiIgotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgaWYgZGVwcmVjYXRlZDoKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoaWdub3JlPVRydWUpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzdXBwcmVzcyBwYWNrYWdlIGFuZCBtb2R1bGUgZGVwcmVjYXRpb24KKyAgICB3YXJuaW5ncyB3aGVuIGltcG9ydGluZyB0aGVtLgorCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LiIiIgorICAgIGlmIGlnbm9yZToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHlpZWxkCisgICAgZWxzZToKKyAgICAgICAgeWllbGQKKworCitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKToKKyAgICAiIiJJbXBvcnQgYW5kIHJldHVybiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZCwgcmFpc2luZyBTa2lwVGVzdCBpZgorICAgIGl0IGlzIG5vdCBhdmFpbGFibGUuCisKKyAgICBJZiBkZXByZWNhdGVkIGlzIFRydWUsIGFueSBtb2R1bGUgb3IgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcworICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4iIiIKKyAgICB3aXRoIF9pZ25vcmVfZGVwcmVjYXRlZF9pbXBvcnRzKGRlcHJlY2F0ZWQpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG5hbWUsIGxldmVsPTApCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJObyBtb2R1bGUgbmFtZWQgIiArIG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBtc2c6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKKworCitkZWYgX3NhdmVfYW5kX3JlbW92ZV9tb2R1bGUobmFtZSwgb3JpZ19tb2R1bGVzKToKKyAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSBhbmQgcmVtb3ZlIGEgbW9kdWxlIGZyb20gc3lzLm1vZHVsZXMKKworICAgICAgIFJldHVybiB2YWx1ZSBpcyBUcnVlIGlmIHRoZSBtb2R1bGUgd2FzIGluIHN5cy5tb2R1bGVzIGFuZAorICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICBzYXZlZCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIG9yaWdfbW9kdWxlc1tuYW1lXSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzYXZlZCA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgcmV0dXJuIHNhdmVkCisKKworZGVmIF9zYXZlX2FuZF9ibG9ja19tb2R1bGUobmFtZSwgb3JpZ19tb2R1bGVzKToKKyAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSBhbmQgYmxvY2sgYSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKKworICAgICAgIFJldHVybiB2YWx1ZSBpcyBUcnVlIGlmIHRoZSBtb2R1bGUgd2FzIGluIHN5cy5tb2R1bGVzIGFuZAorICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICBzYXZlZCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIG9yaWdfbW9kdWxlc1tuYW1lXSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBzYXZlZCA9IEZhbHNlCisgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCisgICAgcmV0dXJuIHNhdmVkCisKKworZGVmIGltcG9ydF9mcmVzaF9tb2R1bGUobmFtZSwgZnJlc2g9KCksIGJsb2NrZWQ9KCksIGRlcHJlY2F0ZWQ9RmFsc2UpOgorICAgICIiIkltcG9ydHMgYW5kIHJldHVybnMgYSBtb2R1bGUsIGRlbGliZXJhdGVseSBieXBhc3NpbmcgdGhlIHN5cy5tb2R1bGVzIGNhY2hlCisgICAgYW5kIGltcG9ydGluZyBhIGZyZXNoIGNvcHkgb2YgdGhlIG1vZHVsZS4gT25jZSB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLAorICAgIHRoZSBzeXMubW9kdWxlcyBjYWNoZSBpcyByZXN0b3JlZCB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCisKKyAgICBNb2R1bGVzIG5hbWVkIGluIGZyZXNoIGFyZSBhbHNvIGltcG9ydGVkIGFuZXcgaWYgbmVlZGVkIGJ5IHRoZSBpbXBvcnQuCisKKyAgICBJbXBvcnRpbmcgb2YgbW9kdWxlcyBuYW1lZCBpbiBibG9ja2VkIGlzIHByZXZlbnRlZCB3aGlsZSB0aGUgZnJlc2ggaW1wb3J0CisgICAgdGFrZXMgcGxhY2UuCisKKyAgICBJZiBkZXByZWNhdGVkIGlzIFRydWUsIGFueSBtb2R1bGUgb3IgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcworICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4iIiIKKyAgICAjIE5PVEU6IHRlc3RfaGVhcHEgYW5kIHRlc3Rfd2FybmluZ3MgaW5jbHVkZSBleHRyYSBzYW5pdHkgY2hlY2tzIHRvIG1ha2UKKyAgICAjIHN1cmUgdGhhdCB0aGlzIHV0aWxpdHkgZnVuY3Rpb24gaXMgd29ya2luZyBhcyBleHBlY3RlZAorICAgIHdpdGggX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoZGVwcmVjYXRlZCk6CisgICAgICAgICMgS2VlcCB0cmFjayBvZiBtb2R1bGVzIHNhdmVkIGZvciBsYXRlciByZXN0b3JhdGlvbiBhcyB3ZWxsCisgICAgICAgICMgYXMgdGhvc2Ugd2hpY2gganVzdCBuZWVkIGEgYmxvY2tpbmcgZW50cnkgcmVtb3ZlZAorICAgICAgICBvcmlnX21vZHVsZXMgPSB7fQorICAgICAgICBuYW1lc190b19yZW1vdmUgPSBbXQorICAgICAgICBfc2F2ZV9hbmRfcmVtb3ZlX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBmcmVzaF9uYW1lIGluIGZyZXNoOgorICAgICAgICAgICAgICAgIF9zYXZlX2FuZF9yZW1vdmVfbW9kdWxlKGZyZXNoX25hbWUsIG9yaWdfbW9kdWxlcykKKyAgICAgICAgICAgIGZvciBibG9ja2VkX25hbWUgaW4gYmxvY2tlZDoKKyAgICAgICAgICAgICAgICBpZiBub3QgX3NhdmVfYW5kX2Jsb2NrX21vZHVsZShibG9ja2VkX25hbWUsIG9yaWdfbW9kdWxlcyk6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvX3JlbW92ZS5hcHBlbmQoYmxvY2tlZF9uYW1lKQorICAgICAgICAgICAgZnJlc2hfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBvcmlnX25hbWUsIG1vZHVsZSBpbiBvcmlnX21vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tvcmlnX25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3IgbmFtZV90b19yZW1vdmUgaW4gbmFtZXNfdG9fcmVtb3ZlOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lX3RvX3JlbW92ZV0KKyAgICAgICAgcmV0dXJuIGZyZXNoX21vZHVsZQorCisKK2RlZiBnZXRfYXR0cmlidXRlKG9iaiwgbmFtZSk6CisgICAgIiIiR2V0IGFuIGF0dHJpYnV0ZSwgcmFpc2luZyBTa2lwVGVzdCBpZiBBdHRyaWJ1dGVFcnJvciBpcyByYWlzZWQuIiIiCisgICAgdHJ5OgorICAgICAgICBhdHRyaWJ1dGUgPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJtb2R1bGUgJXMgaGFzIG5vIGF0dHJpYnV0ZSAlcyIgJSAoCisgICAgICAgICAgICBvYmouX19uYW1lX18sIG5hbWUpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGUKKwogCiB2ZXJib3NlID0gMSAgICAgICAgICAgICAgIyBGbGFnIHNldCB0byAwIGJ5IHJlZ3J0ZXN0LnB5CiB1c2VfcmVzb3VyY2VzID0gTm9uZSAgICAgIyBGbGFnIHNldCB0byBbXSBieSByZWdydGVzdC5weQpAQCAtMTI0LDcgKzIxNSw3IEBACiAgICAgcG9zc2liaWxpdHkgb2YgRmFsc2UgYmVpbmcgcmV0dXJuZWQgb2NjdXJzIHdoZW4gcmVncnRlc3QucHkgaXMgZXhlY3V0aW5nLiIiIgogICAgICMgc2VlIGlmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gLSBpZiBzbywgdHJlYXQgYXMgaWYKICAgICAjIHRoZSByZXNvdXJjZSB3YXMgc2V0Ci0gICAgaWYgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6CisgICAgaWYgc3lzLl9nZXRmcmFtZSgxKS5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6CiAgICAgICAgIHJldHVybgogICAgIGlmIG5vdCBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKICAgICAgICAgaWYgbXNnIGlzIE5vbmU6CkBAIC0yNzAsNTUgKzM2MSw4MyBAQAogICAgICAgICAgICAgIyAyIGxhdGluIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBURVNURk5fVU5JQ09ERSA9IHVuaWNvZGUoIkB0ZXN0LVx4ZTBceGYyIiwgImxhdGluLTEiKQogICAgICAgICBURVNURk5fRU5DT0RJTkcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKLSAgICAgICAgIyBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUgaXMgYSBmaWxlbmFtZSB0aGF0IHNob3VsZCAqbm90KiBiZQorICAgICAgICAjIFRFU1RGTl9VTkVOQ09EQUJMRSBpcyBhIGZpbGVuYW1lIHRoYXQgc2hvdWxkICpub3QqIGJlCiAgICAgICAgICMgYWJsZSB0byBiZSBlbmNvZGVkIGJ5ICplaXRoZXIqIHRoZSBkZWZhdWx0IG9yIGZpbGVzeXN0ZW0gZW5jb2RpbmcuCiAgICAgICAgICMgVGhpcyB0ZXN0IHJlYWxseSBvbmx5IG1ha2VzIHNlbnNlIG9uIFdpbmRvd3MgTlQgcGxhdGZvcm1zCiAgICAgICAgICMgd2hpY2ggaGF2ZSBzcGVjaWFsIFVuaWNvZGUgc3VwcG9ydCBpbiBwb3NpeG1vZHVsZS4KICAgICAgICAgaWYgKG5vdCBoYXNhdHRyKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIikgb3IKICAgICAgICAgICAgICAgICBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKVszXSA8IDIpOiAjICAwPXdpbjMycyBvciAxPTl4L01FCi0gICAgICAgICAgICBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUgPSBOb25lCisgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIEphcGFuZXNlIGNoYXJhY3RlcnMgKEkgdGhpbmsgLSBmcm9tIGJ1ZyA4NDYxMzMpCi0gICAgICAgICAgICBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUgPSBldmFsKCd1IkB0ZXN0LVx1NTE3MVx1NjcwOVx1MzA1NVx1MzA4Y1x1MzA4YiInKQorICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gZXZhbCgndSJAdGVzdC1cdTUxNzFcdTY3MDlcdTMwNTVcdTMwOGNcdTMwOGIiJykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIFhYWCAtIE5vdGUgLSBzaG91bGQgYmUgdXNpbmcgVEVTVEZOX0VOQ09ESU5HIGhlcmUgLSBidXQgZm9yCiAgICAgICAgICAgICAgICAgIyBXaW5kb3dzLCAibWJjcyIgY3VycmVudGx5IGFsd2F5cyBvcGVyYXRlcyBhcyBpZiBpbgogICAgICAgICAgICAgICAgICMgZXJyb3JzPWlnbm9yZScgbW9kZSAtIGhlbmNlIHdlIGdldCAnPycgY2hhcmFjdGVycyByYXRoZXIgdGhhbgogICAgICAgICAgICAgICAgICMgdGhlIGV4Y2VwdGlvbi4gICdMYXRpbjEnIG9wZXJhdGVzIGFzIHdlIGV4cGVjdCAtIGllLCBmYWlscy4KICAgICAgICAgICAgICAgICAjIFNlZSBbIDg1MDk5NyBdIG1iY3MgZW5jb2RpbmcgaWdub3JlcyBlcnJvcnMKLSAgICAgICAgICAgICAgICBURVNURk5fVU5JQ09ERV9VTkVOQ09ERUFCTEUuZW5jb2RlKCJMYXRpbjEiKQorICAgICAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRS5lbmNvZGUoIkxhdGluMSIpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgXAogICAgICAgICAgICAgICAgICdXQVJOSU5HOiBUaGUgZmlsZW5hbWUgJXIgQ0FOIGJlIGVuY29kZWQgYnkgdGhlIGZpbGVzeXN0ZW0uICAnIFwKICAgICAgICAgICAgICAgICAnVW5pY29kZSBmaWxlbmFtZSB0ZXN0cyBtYXkgbm90IGJlIGVmZmVjdGl2ZScgXAotICAgICAgICAgICAgICAgICUgVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFCisgICAgICAgICAgICAgICAgJSBURVNURk5fVU5FTkNPREFCTEUKIAotIyBNYWtlIHN1cmUgd2UgY2FuIHdyaXRlIHRvIFRFU1RGTiwgdHJ5IGluIC90bXAgaWYgd2UgY2FuJ3QKLWZwID0gTm9uZQotdHJ5OgotICAgIGZwID0gb3BlbihURVNURk4sICd3KycpCi1leGNlcHQgSU9FcnJvcjoKLSAgICBUTVBfVEVTVEZOID0gb3MucGF0aC5qb2luKCcvdG1wJywgVEVTVEZOKQorCisjIERpc2FtYmlndWF0ZSBURVNURk4gZm9yIHBhcmFsbGVsIHRlc3RpbmcsIHdoaWxlIGxldHRpbmcgaXQgcmVtYWluIGEgdmFsaWQKKyMgbW9kdWxlIG5hbWUuCitURVNURk4gPSAie31fe31fdG1wIi5mb3JtYXQoVEVTVEZOLCBvcy5nZXRwaWQoKSkKKworIyBTYXZlIHRoZSBpbml0aWFsIGN3ZAorU0FWRURDV0QgPSBvcy5nZXRjd2QoKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfY3dkKG5hbWU9J3RlbXBjd2QnLCBxdWlldD1GYWxzZSk6CisgICAgIiIiCisgICAgQ29udGV4dCBtYW5hZ2VyIHRoYXQgY3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHNldCBpdCBhcyBDV0QuCisKKyAgICBUaGUgbmV3IENXRCBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXQncyBuYW1lZCAqbmFtZSouCisgICAgSWYgKnF1aWV0KiBpcyBGYWxzZSAoZGVmYXVsdCkgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvciBjaGFuZ2UKKyAgICB0aGUgQ1dELCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCdzIFRydWUsIG9ubHkgYSB3YXJuaW5nIGlzIHJhaXNlZAorICAgIGFuZCB0aGUgb3JpZ2luYWwgQ1dEIGlzIHVzZWQuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShuYW1lLCB1bmljb2RlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IG5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSBvciAnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd1bmFibGUgdG8gZW5jb2RlIHRoZSBjd2QgbmFtZSB3aXRoICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcuJykKKyAgICBzYXZlZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgIGlzX3RlbXBvcmFyeSA9IEZhbHNlCiAgICAgdHJ5OgotICAgICAgICBmcCA9IG9wZW4oVE1QX1RFU1RGTiwgJ3crJykKLSAgICAgICAgVEVTVEZOID0gVE1QX1RFU1RGTgotICAgICAgICBkZWwgVE1QX1RFU1RGTgotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBwcmludCAoJ1dBUk5JTkc6IHRlc3RzIHdpbGwgZmFpbCwgdW5hYmxlIHRvIHdyaXRlIHRvOiAlcyBvciAlcycgJQotICAgICAgICAgICAgICAgIChURVNURk4sIFRNUF9URVNURk4pKQotaWYgZnAgaXMgbm90IE5vbmU6Ci0gICAgZnAuY2xvc2UoKQotICAgIHVubGluayhURVNURk4pCi1kZWwgZnAKKyAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgb3MuY2hkaXIobmFtZSkKKyAgICAgICAgaXNfdGVtcG9yYXJ5ID0gVHJ1ZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICB3YXJuaW5ncy53YXJuKCd0ZXN0cyBtYXkgZmFpbCwgdW5hYmxlIHRvIGNoYW5nZSB0aGUgQ1dEIHRvICcgKyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCBzdGFja2xldmVsPTMpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBvcy5nZXRjd2QoKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKHNhdmVkX2RpcikKKyAgICAgICAgaWYgaXNfdGVtcG9yYXJ5OgorICAgICAgICAgICAgcm10cmVlKG5hbWUpCiAKLWRlZiBmaW5kZmlsZShmaWxlLCBoZXJlPV9fZmlsZV9fKToKKworZGVmIGZpbmRmaWxlKGZpbGUsIGhlcmU9X19maWxlX18sIHN1YmRpcj1Ob25lKToKICAgICAiIiJUcnkgdG8gZmluZCBhIGZpbGUgb24gc3lzLnBhdGggYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIElmIGl0IGlzIG5vdAogICAgIGZvdW5kIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGlzIHJldHVybmVkICh0aGlzIGRvZXMgbm90CiAgICAgbmVjZXNzYXJpbHkgc2lnbmFsIGZhaWx1cmU7IGNvdWxkIHN0aWxsIGJlIHRoZSBsZWdpdGltYXRlIHBhdGgpLiIiIgogICAgIGlmIG9zLnBhdGguaXNhYnMoZmlsZSk6CiAgICAgICAgIHJldHVybiBmaWxlCisgICAgaWYgc3ViZGlyIGlzIG5vdCBOb25lOgorICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHN1YmRpciwgZmlsZSkKICAgICBwYXRoID0gc3lzLnBhdGgKICAgICBwYXRoID0gW29zLnBhdGguZGlybmFtZShoZXJlKV0gKyBwYXRoCiAgICAgZm9yIGRuIGluIHBhdGg6CkBAIC0zMjYsMzAgKzQ0NSw2IEBACiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKTogcmV0dXJuIGZuCiAgICAgcmV0dXJuIGZpbGUKIAotZGVmIHZlcmlmeShjb25kaXRpb24sIHJlYXNvbj0ndGVzdCBmYWlsZWQnKToKLSAgICAiIiJWZXJpZnkgdGhhdCBjb25kaXRpb24gaXMgdHJ1ZS4gSWYgbm90LCByYWlzZSBUZXN0RmFpbGVkLgotCi0gICAgICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IHJlYXNvbiBjYW4gYmUgZ2l2ZW4gdG8gcHJvdmlkZQotICAgICAgIGEgYmV0dGVyIGVycm9yIHRleHQuCi0gICAgIiIiCi0KLSAgICBpZiBub3QgY29uZGl0aW9uOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKHJlYXNvbikKLQotZGVmIHZlcmVxKGEsIGIpOgotICAgICIiIlJhaXNlIFRlc3RGYWlsZWQgaWYgYSA9PSBiIGlzIGZhbHNlLgotCi0gICAgVGhpcyBpcyBiZXR0ZXIgdGhhbiB2ZXJpZnkoYSA9PSBiKSBiZWNhdXNlLCBpbiBjYXNlIG9mIGZhaWx1cmUsIHRoZQotICAgIGVycm9yIG1lc3NhZ2UgaW5jb3Jwb3JhdGVzIHJlcHIoYSkgYW5kIHJlcHIoYikgc28geW91IGNhbiBzZWUgdGhlCi0gICAgaW5wdXRzLgotCi0gICAgTm90ZSB0aGF0ICJub3QgKGEgPT0gYikiIGlzbid0IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzICJhICE9IGIiOyB0aGUKLSAgICBmb3JtZXIgaXMgdGVzdGVkLgotICAgICIiIgotCi0gICAgaWYgbm90IChhID09IGIpOgotICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCIlciA9PSAlciIgJSAoYSwgYikpCi0KIGRlZiBzb3J0ZGljdChkaWN0KToKICAgICAiTGlrZSByZXByKGRpY3QpLCBidXQgaW4gc29ydGVkIG9yZGVyLiIKICAgICBpdGVtcyA9IGRpY3QuaXRlbXMoKQpAQCAtMzcxLDM1ICs0NjYsNDkgQEAKICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogZGVmIGNoZWNrX3N5bnRheF9lcnJvcih0ZXN0Y2FzZSwgc3RhdGVtZW50KToKLSAgICB0cnk6Ci0gICAgICAgIGNvbXBpbGUoc3RhdGVtZW50LCAnPHRlc3Qgc3RyaW5nPicsICdleGVjJykKLSAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICB0ZXN0Y2FzZS5mYWlsKCdNaXNzaW5nIFN5bnRheEVycm9yOiAiJXMiJyAlIHN0YXRlbWVudCkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIHN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZXN0IHN0cmluZz4nLCAnZXhlYycpCiAKLWRlZiBvcGVuX3VybHJlc291cmNlKHVybCk6CitkZWYgb3Blbl91cmxyZXNvdXJjZSh1cmwsIGNoZWNrPU5vbmUpOgogICAgIGltcG9ydCB1cmxwYXJzZSwgdXJsbGliMgogCi0gICAgcmVxdWlyZXMoJ3VybGZldGNoJykKICAgICBmaWxlbmFtZSA9IHVybHBhcnNlLnVybHBhcnNlKHVybClbMl0uc3BsaXQoJy8nKVstMV0gIyAnLyc6IGl0J3MgVVJMIQogCi0gICAgZm9yIHBhdGggaW4gW29zLnBhdGguY3VyZGlyLCBvcy5wYXRoLnBhcmRpcl06Ci0gICAgICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGZpbGVuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6Ci0gICAgICAgICAgICByZXR1cm4gb3BlbihmbikKKyAgICBmbiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIsIGZpbGVuYW1lKQorCisgICAgZGVmIGNoZWNrX3ZhbGlkX2ZpbGUoZm4pOgorICAgICAgICBmID0gb3BlbihmbikKKyAgICAgICAgaWYgY2hlY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGVsaWYgY2hlY2soZik6CisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICBmID0gY2hlY2tfdmFsaWRfZmlsZShmbikKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIHVubGluayhmbikKKworICAgICMgVmVyaWZ5IHRoZSByZXF1aXJlbWVudCBiZWZvcmUgZG93bmxvYWRpbmcgdGhlIGZpbGUKKyAgICByZXF1aXJlcygndXJsZmV0Y2gnKQogCiAgICAgcHJpbnQgPj4gZ2V0X29yaWdpbmFsX3N0ZG91dCgpLCAnXHRmZXRjaGluZyAlcyAuLi4nICUgdXJsCiAgICAgZiA9IHVybGxpYjIudXJsb3Blbih1cmwsIHRpbWVvdXQ9MTUpCiAgICAgdHJ5OgotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIG91dDoKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAid2IiKSBhcyBvdXQ6CiAgICAgICAgICAgICBzID0gZi5yZWFkKCkKICAgICAgICAgICAgIHdoaWxlIHM6CiAgICAgICAgICAgICAgICAgb3V0LndyaXRlKHMpCiAgICAgICAgICAgICAgICAgcyA9IGYucmVhZCgpCiAgICAgZmluYWxseToKICAgICAgICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIG9wZW4oZmlsZW5hbWUpCisKKyAgICBmID0gY2hlY2tfdmFsaWRfZmlsZShmbikKKyAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gZgorICAgIHJhaXNlIFRlc3RGYWlsZWQoJ2ludmFsaWQgcmVzb3VyY2UgIiVzIicgJSBmbikKIAogCiBjbGFzcyBXYXJuaW5nc1JlY29yZGVyKG9iamVjdCk6CkBAIC00ODksNyArNTk4LDcgQEAKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIF9jaGVja19weTNrX3dhcm5pbmdzKCpmaWx0ZXJzLCAqKmt3YXJncyk6CitkZWYgY2hlY2tfcHkza193YXJuaW5ncygqZmlsdGVycywgKiprd2FyZ3MpOgogICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzaWxlbmNlIHB5M2sgd2FybmluZ3MuCiAKICAgICBBY2NlcHQgMi10dXBsZXMgYXMgcG9zaXRpb25hbCBhcmd1bWVudHM6CkBAIC01MDAsNyArNjA5LDcgQEAKICAgICAgICAgKGRlZmF1bHQgRmFsc2UpCiAKICAgICBXaXRob3V0IGFyZ3VtZW50LCBpdCBkZWZhdWx0cyB0bzoKLSAgICAgICAgX2NoZWNrX3B5M2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWlldD1GYWxzZSkKKyAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PUZhbHNlKQogICAgICIiIgogICAgIGlmIHN5cy5weTNrd2FybmluZzoKICAgICAgICAgaWYgbm90IGZpbHRlcnM6CkBAIC01MjAsNyArNjI5LDcgQEAKICAgICBVc2UgbGlrZSB0aGlzOgogCiAgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoImZvbyIpOgotICAgICAgICAgICAgX19pbXBvcnRfXygiZm9vIikgIyBuZXcgcmVmZXJlbmNlCisgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgiZm9vIikgIyBuZXcgcmVmZXJlbmNlCiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKm1vZHVsZV9uYW1lcyk6CkBAIC01NDMsMjYgKzY1MiwzOSBAQAogICAgICAgICBzeXMubW9kdWxlcy51cGRhdGUoc2VsZi5vcmlnaW5hbF9tb2R1bGVzKQogCiAKLWNsYXNzIEVudmlyb25tZW50VmFyR3VhcmQob2JqZWN0KToKK2NsYXNzIEVudmlyb25tZW50VmFyR3VhcmQoVXNlckRpY3QuRGljdE1peGluKToKIAogICAgICIiIkNsYXNzIHRvIGhlbHAgcHJvdGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgcHJvcGVybHkuICBDYW4gYmUgdXNlZCBhcwogICAgIGEgY29udGV4dCBtYW5hZ2VyLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9lbnZpcm9uID0gb3MuZW52aXJvbgogICAgICAgICBzZWxmLl9jaGFuZ2VkID0ge30KIAotICAgIGRlZiBzZXQoc2VsZiwgZW52dmFyLCB2YWx1ZSk6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGVudnZhcik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZpcm9uW2VudnZhcl0KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBlbnZ2YXIsIHZhbHVlKToKICAgICAgICAgIyBSZW1lbWJlciB0aGUgaW5pdGlhbCB2YWx1ZSBvbiB0aGUgZmlyc3QgYWNjZXNzCiAgICAgICAgIGlmIGVudnZhciBub3QgaW4gc2VsZi5fY2hhbmdlZDoKLSAgICAgICAgICAgIHNlbGYuX2NoYW5nZWRbZW52dmFyXSA9IG9zLmVudmlyb24uZ2V0KGVudnZhcikKLSAgICAgICAgb3MuZW52aXJvbltlbnZ2YXJdID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuX2NoYW5nZWRbZW52dmFyXSA9IHNlbGYuX2Vudmlyb24uZ2V0KGVudnZhcikKKyAgICAgICAgc2VsZi5fZW52aXJvbltlbnZ2YXJdID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBlbnZ2YXIpOgorICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbml0aWFsIHZhbHVlIG9uIHRoZSBmaXJzdCBhY2Nlc3MKKyAgICAgICAgaWYgZW52dmFyIG5vdCBpbiBzZWxmLl9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gc2VsZi5fZW52aXJvbi5nZXQoZW52dmFyKQorICAgICAgICBpZiBlbnZ2YXIgaW4gc2VsZi5fZW52aXJvbjoKKyAgICAgICAgICAgIGRlbCBzZWxmLl9lbnZpcm9uW2VudnZhcl0KKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52aXJvbi5rZXlzKCkKKworICAgIGRlZiBzZXQoc2VsZiwgZW52dmFyLCB2YWx1ZSk6CisgICAgICAgIHNlbGZbZW52dmFyXSA9IHZhbHVlCiAKICAgICBkZWYgdW5zZXQoc2VsZiwgZW52dmFyKToKLSAgICAgICAgIyBSZW1lbWJlciB0aGUgaW5pdGlhbCB2YWx1ZSBvbiB0aGUgZmlyc3QgYWNjZXNzCi0gICAgICAgIGlmIGVudnZhciBub3QgaW4gc2VsZi5fY2hhbmdlZDoKLSAgICAgICAgICAgIHNlbGYuX2NoYW5nZWRbZW52dmFyXSA9IG9zLmVudmlyb24uZ2V0KGVudnZhcikKLSAgICAgICAgaWYgZW52dmFyIGluIG9zLmVudmlyb246Ci0gICAgICAgICAgICBkZWwgb3MuZW52aXJvbltlbnZ2YXJdCisgICAgICAgIGRlbCBzZWxmW2VudnZhcl0KIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC01NzAsMTAgKzY5MiwzNiBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CiAgICAgICAgIGZvciAoaywgdikgaW4gc2VsZi5fY2hhbmdlZC5pdGVtcygpOgogICAgICAgICAgICAgaWYgdiBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIGsgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba10KKyAgICAgICAgICAgICAgICBpZiBrIGluIHNlbGYuX2Vudmlyb246CisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9lbnZpcm9uW2tdCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9zLmVudmlyb25ba10gPSB2CisgICAgICAgICAgICAgICAgc2VsZi5fZW52aXJvbltrXSA9IHYKKyAgICAgICAgb3MuZW52aXJvbiA9IHNlbGYuX2Vudmlyb24KKworCitjbGFzcyBEaXJzT25TeXNQYXRoKG9iamVjdCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHRlbXBvcmFyaWx5IGFkZCBkaXJlY3RvcmllcyB0byBzeXMucGF0aC4KKworICAgIFRoaXMgbWFrZXMgYSBjb3B5IG9mIHN5cy5wYXRoLCBhcHBlbmRzIGFueSBkaXJlY3RvcmllcyBnaXZlbgorICAgIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB0aGVuIHJldmVydHMgc3lzLnBhdGggdG8gdGhlIGNvcGllZAorICAgIHNldHRpbmdzIHdoZW4gdGhlIGNvbnRleHQgZW5kcy4KKworICAgIE5vdGUgdGhhdCAqYWxsKiBzeXMucGF0aCBtb2RpZmljYXRpb25zIGluIHRoZSBib2R5IG9mIHRoZQorICAgIGNvbnRleHQgbWFuYWdlciwgaW5jbHVkaW5nIHJlcGxhY2VtZW50IG9mIHRoZSBvYmplY3QsCisgICAgd2lsbCBiZSByZXZlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqcGF0aHMpOgorICAgICAgICBzZWxmLm9yaWdpbmFsX3ZhbHVlID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vcmlnaW5hbF9vYmplY3QgPSBzeXMucGF0aAorICAgICAgICBzeXMucGF0aC5leHRlbmQocGF0aHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgc3lzLnBhdGggPSBzZWxmLm9yaWdpbmFsX29iamVjdAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYub3JpZ2luYWxfdmFsdWUKIAogCiBjbGFzcyBUcmFuc2llbnRSZXNvdXJjZShvYmplY3QpOgpAQCAtNjAyLDEzICs3NTAsNjUgQEAKICAgICAgICAgICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZCgiYW4gb3B0aW9uYWwgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSIpCiAKIAotZGVmIHRyYW5zaWVudF9pbnRlcm5ldCgpOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiB0cmFuc2llbnRfaW50ZXJuZXQocmVzb3VyY2VfbmFtZSwgdGltZW91dD0zMC4wLCBlcnJub3M9KCkpOgogICAgICIiIlJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHJhaXNlcyBSZXNvdXJjZURlbmllZCB3aGVuIHZhcmlvdXMgaXNzdWVzCiAgICAgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuIiIiCi0gICAgdGltZV9vdXQgPSBUcmFuc2llbnRSZXNvdXJjZShJT0Vycm9yLCBlcnJubz1lcnJuby5FVElNRURPVVQpCi0gICAgc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShzb2NrZXQuZXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCi0gICAgaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKLSAgICByZXR1cm4gY29udGV4dGxpYi5uZXN0ZWQodGltZV9vdXQsIHNvY2tldF9wZWVyX3Jlc2V0LCBpb2Vycm9yX3BlZXJfcmVzZXQpCisgICAgZGVmYXVsdF9lcnJub3MgPSBbCisgICAgICAgICgnRUNPTk5SRUZVU0VEJywgMTExKSwKKyAgICAgICAgKCdFQ09OTlJFU0VUJywgMTA0KSwKKyAgICAgICAgKCdFSE9TVFVOUkVBQ0gnLCAxMTMpLAorICAgICAgICAoJ0VORVRVTlJFQUNIJywgMTAxKSwKKyAgICAgICAgKCdFVElNRURPVVQnLCAxMTApLAorICAgIF0KKyAgICBkZWZhdWx0X2dhaV9lcnJub3MgPSBbCisgICAgICAgICgnRUFJX05PTkFNRScsIC0yKSwKKyAgICAgICAgKCdFQUlfTk9EQVRBJywgLTUpLAorICAgIF0KKworICAgIGRlbmllZCA9IFJlc291cmNlRGVuaWVkKCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhdmFpbGFibGUiICUgcmVzb3VyY2VfbmFtZSkKKyAgICBjYXB0dXJlZF9lcnJub3MgPSBlcnJub3MKKyAgICBnYWlfZXJybm9zID0gW10KKyAgICBpZiBub3QgY2FwdHVyZWRfZXJybm9zOgorICAgICAgICBjYXB0dXJlZF9lcnJub3MgPSBbZ2V0YXR0cihlcnJubywgbmFtZSwgbnVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuYW1lLCBudW0pIGluIGRlZmF1bHRfZXJybm9zXQorICAgICAgICBnYWlfZXJybm9zID0gW2dldGF0dHIoc29ja2V0LCBuYW1lLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgZm9yIChuYW1lLCBudW0pIGluIGRlZmF1bHRfZ2FpX2Vycm5vc10KKworICAgIGRlZiBmaWx0ZXJfZXJyb3IoZXJyKToKKyAgICAgICAgbiA9IGdldGF0dHIoZXJyLCAnZXJybm8nLCBOb25lKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShlcnIsIHNvY2tldC50aW1lb3V0KSBvcgorICAgICAgICAgICAgKGlzaW5zdGFuY2UoZXJyLCBzb2NrZXQuZ2FpZXJyb3IpIGFuZCBuIGluIGdhaV9lcnJub3MpIG9yCisgICAgICAgICAgICBuIGluIGNhcHR1cmVkX2Vycm5vcyk6CisgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKKyAgICAgICAgICAgIHJhaXNlIGRlbmllZAorCisgICAgb2xkX3RpbWVvdXQgPSBzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKQorICAgIHRyeToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCh0aW1lb3V0KQorICAgICAgICB5aWVsZAorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKKyAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGEgPSBlcnIuYXJncworICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXJyID0gYVswXQorICAgICAgICAgICAgIyBUaGUgZXJyb3IgY2FuIGFsc28gYmUgd3JhcHBlZCBhcyBhcmdzWzFdOgorICAgICAgICAgICAgIyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICMgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgICAgICBlbGlmIGxlbihhKSA+PSAyIGFuZCBpc2luc3RhbmNlKGFbMV0sIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGVyciA9IGFbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmlsdGVyX2Vycm9yKGVycikKKyAgICAgICAgcmFpc2UKKyAgICAjIFhYWCBzaG91bGQgd2UgY2F0Y2ggZ2VuZXJpYyBleGNlcHRpb25zIGFuZCBsb29rIGZvciB0aGVpcgorICAgICMgX19jYXVzZV9fIG9yIF9fY29udGV4dF9fPworICAgIGZpbmFsbHk6CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChvbGRfdGltZW91dCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtNjMyLDYgKzgzMiwyNSBAQAogZGVmIGNhcHR1cmVkX3N0ZG91dCgpOgogICAgIHJldHVybiBjYXB0dXJlZF9vdXRwdXQoInN0ZG91dCIpCiAKK2RlZiBjYXB0dXJlZF9zdGRpbigpOgorICAgIHJldHVybiBjYXB0dXJlZF9vdXRwdXQoInN0ZGluIikKKworZGVmIGdjX2NvbGxlY3QoKToKKyAgICAiIiJGb3JjZSBhcyBtYW55IG9iamVjdHMgYXMgcG9zc2libGUgdG8gYmUgY29sbGVjdGVkLgorCisgICAgSW4gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiwgdGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aW1lbHkKKyAgICBkZWFsbG9jYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiAgKEV2ZW4gaW4gQ1B5dGhvbgorICAgIHRoaXMgY2FuIGJlIHRoZSBjYXNlIGluIGNhc2Ugb2YgcmVmZXJlbmNlIGN5Y2xlcy4pICBUaGlzIG1lYW5zIHRoYXQgX19kZWxfXworICAgIG1ldGhvZHMgbWF5IGJlIGNhbGxlZCBsYXRlciB0aGFuIGV4cGVjdGVkIGFuZCB3ZWFrcmVmcyBtYXkgcmVtYWluIGFsaXZlIGZvcgorICAgIGxvbmdlciB0aGFuIGV4cGVjdGVkLiAgVGhpcyBmdW5jdGlvbiB0cmllcyBpdHMgYmVzdCB0byBmb3JjZSBhbGwgZ2FyYmFnZQorICAgIG9iamVjdHMgdG8gZGlzYXBwZWFyLgorICAgICIiIgorICAgIGdjLmNvbGxlY3QoKQorICAgIGlmIGlzX2p5dGhvbjoKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgZ2MuY29sbGVjdCgpCisgICAgZ2MuY29sbGVjdCgpCisKIAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIERlY29yYXRvciBmb3IgcnVubmluZyBhIGZ1bmN0aW9uIGluIGEgZGlmZmVyZW50IGxvY2FsZSwgY29ycmVjdGx5IHJlc2V0dGluZwpAQCAtNzIzLDcgKzk0Miw3IEBACiAgICAgICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhleSB3b3JrLiBXZSBzdGlsbCB3YW50IHRvIGF2b2lkIHVzaW5nCiAgICAgICAgICAgICAgICAgIyB0b28gbXVjaCBtZW1vcnksIHRob3VnaCwgYnV0IHdlIGRvIHRoYXQgbm9pc2lseS4KICAgICAgICAgICAgICAgICBtYXhzaXplID0gNTE0NwotICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmKG1heHNpemUgKiBtZW11c2UgKyBvdmVyaGVhZCA+IDIwICogXzFNKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF4c2l6ZSAqIG1lbXVzZSArIG92ZXJoZWFkID4gMjAgKiBfMU0pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1heHNpemUgPSBpbnQoKG1heF9tZW11c2UgLSBvdmVyaGVhZCkgLyBtZW11c2UpCiAgICAgICAgICAgICAgICAgaWYgbWF4c2l6ZSA8IG1pbnNpemU6CkBAIC03ODIsNiArMTAwMSw1NSBAQAogICAgICAgICB0ZXN0KHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCitkZWYgX2lkKG9iaik6CisgICAgcmV0dXJuIG9iagorCitkZWYgcmVxdWlyZXNfcmVzb3VyY2UocmVzb3VyY2UpOgorICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgorICAgICAgICByZXR1cm4gX2lkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoInJlc291cmNlIHswIXJ9IGlzIG5vdCBlbmFibGVkIi5mb3JtYXQocmVzb3VyY2UpKQorCitkZWYgY3B5dGhvbl9vbmx5KHRlc3QpOgorICAgICIiIgorICAgIERlY29yYXRvciBmb3IgdGVzdHMgb25seSBhcHBsaWNhYmxlIG9uIENQeXRob24uCisgICAgIiIiCisgICAgcmV0dXJuIGltcGxfZGV0YWlsKGNweXRob249VHJ1ZSkodGVzdCkKKworZGVmIGltcGxfZGV0YWlsKG1zZz1Ob25lLCAqKmd1YXJkcyk6CisgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoKipndWFyZHMpOgorICAgICAgICByZXR1cm4gX2lkCisgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgIGd1YXJkbmFtZXMsIGRlZmF1bHQgPSBfcGFyc2VfZ3VhcmRzKGd1YXJkcykKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIG1zZyA9ICJpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbm90IGF2YWlsYWJsZSBvbiB7MH0iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiaW1wbGVtZW50YXRpb24gZGV0YWlsIHNwZWNpZmljIHRvIHswfSIKKyAgICAgICAgZ3VhcmRuYW1lcyA9IHNvcnRlZChndWFyZG5hbWVzLmtleXMoKSkKKyAgICAgICAgbXNnID0gbXNnLmZvcm1hdCgnIG9yICcuam9pbihndWFyZG5hbWVzKSkKKyAgICByZXR1cm4gdW5pdHRlc3Quc2tpcChtc2cpCisKK2RlZiBfcGFyc2VfZ3VhcmRzKGd1YXJkcyk6CisgICAgIyBSZXR1cm5zIGEgdHVwbGUgKHtwbGF0Zm9ybV9uYW1lOiBydW5fbWV9LCBkZWZhdWx0X3ZhbHVlKQorICAgIGlmIG5vdCBndWFyZHM6CisgICAgICAgIHJldHVybiAoeydjcHl0aG9uJzogVHJ1ZX0sIEZhbHNlKQorICAgIGlzX3RydWUgPSBndWFyZHMudmFsdWVzKClbMF0KKyAgICBhc3NlcnQgZ3VhcmRzLnZhbHVlcygpID09IFtpc190cnVlXSAqIGxlbihndWFyZHMpICAgIyBhbGwgVHJ1ZSBvciBhbGwgRmFsc2UKKyAgICByZXR1cm4gKGd1YXJkcywgbm90IGlzX3RydWUpCisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgY2hlY2sgdG8gZ3VhcmQgQ1B5dGhvbidzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHRlc3RzIC0tCisjIG9yIHRvIHJ1biB0aGVtIG9ubHkgb24gdGhlIGltcGxlbWVudGF0aW9uKHMpIGd1YXJkZWQgYnkgdGhlIGFyZ3VtZW50cy4KK2RlZiBjaGVja19pbXBsX2RldGFpbCgqKmd1YXJkcyk6CisgICAgIiIiVGhpcyBmdW5jdGlvbiByZXR1cm5zIFRydWUgb3IgRmFsc2UgZGVwZW5kaW5nIG9uIHRoZSBob3N0IHBsYXRmb3JtLgorICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgIGlmIGNoZWNrX2ltcGxfZGV0YWlsKCk6ICAgICAgICAgICAgICAgIyBvbmx5IG9uIENQeXRob24gKGRlZmF1bHQpCisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoanl0aG9uPVRydWUpOiAgICAjIG9ubHkgb24gSnl0aG9uCisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoY3B5dGhvbj1GYWxzZSk6ICAjIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIENQeXRob24KKyAgICAiIiIKKyAgICBndWFyZHMsIGRlZmF1bHQgPSBfcGFyc2VfZ3VhcmRzKGd1YXJkcykKKyAgICByZXR1cm4gZ3VhcmRzLmdldChwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKS5sb3dlcigpLCBkZWZhdWx0KQorCisKIAogZGVmIF9ydW5fc3VpdGUoc3VpdGUpOgogICAgICIiIlJ1biB0ZXN0cyBmcm9tIGEgdW5pdHRlc3QuVGVzdFN1aXRlLWRlcml2ZWQgY2xhc3MuIiIiCkBAIC04NTUsMjQgKzExMjMsNDggQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBUaHJlYWRpbmcgc3VwcG9ydCB0byBwcmV2ZW50IHJlcG9ydGluZyByZWZsZWFrcyB3aGVuIHJ1bm5pbmcgcmVncnRlc3QucHkgLVIKIAotZGVmIHRocmVhZGluZ19zZXR1cCgpOgotICAgIGltcG9ydCB0aHJlYWRpbmcKLSAgICByZXR1cm4gbGVuKHRocmVhZGluZy5fYWN0aXZlKSwgbGVuKHRocmVhZGluZy5fbGltYm8pCisjIE5PVEU6IHdlIHVzZSB0aHJlYWQuX2NvdW50KCkgcmF0aGVyIHRoYW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpIChvciB0aGUKKyMgbW9yYWwgZXF1aXZhbGVudCB0aGVyZW9mKSBiZWNhdXNlIGEgdGhyZWFkaW5nLlRocmVhZCBvYmplY3QgaXMgc3RpbGwgYWxpdmUKKyMgdW50aWwgaXRzIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgZXZlbiBhZnRlciBpdCBoYXMgYmVlbgorIyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZS4KKyMgdGhyZWFkLl9jb3VudCgpLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBnZXRzIGRlY3JlbWVudGVkICphZnRlciogdGhlCisjIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgd2hpY2ggZ2l2ZXMgdXMgcmVsaWFibGUgcmVmZXJlbmNlIGNvdW50cworIyBhdCB0aGUgZW5kIG9mIGEgdGVzdCBydW4uCiAKLWRlZiB0aHJlYWRpbmdfY2xlYW51cChudW1fYWN0aXZlLCBudW1fbGltYm8pOgotICAgIGltcG9ydCB0aHJlYWRpbmcKLSAgICBpbXBvcnQgdGltZQorZGVmIHRocmVhZGluZ19zZXR1cCgpOgorICAgIGlmIHRocmVhZDoKKyAgICAgICAgcmV0dXJuIHRocmVhZC5fY291bnQoKSwKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gMSwKKworZGVmIHRocmVhZGluZ19jbGVhbnVwKG5iX3RocmVhZHMpOgorICAgIGlmIG5vdCB0aHJlYWQ6CisgICAgICAgIHJldHVybgogCiAgICAgX01BWF9DT1VOVCA9IDEwCi0gICAgY291bnQgPSAwCi0gICAgd2hpbGUgbGVuKHRocmVhZGluZy5fYWN0aXZlKSAhPSBudW1fYWN0aXZlIGFuZCBjb3VudCA8IF9NQVhfQ09VTlQ6Ci0gICAgICAgIGNvdW50ICs9IDEKKyAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CisgICAgICAgIG4gPSB0aHJlYWQuX2NvdW50KCkKKyAgICAgICAgaWYgbiA9PSBuYl90aHJlYWRzOgorICAgICAgICAgICAgYnJlYWsKICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgIyBYWFggcHJpbnQgYSB3YXJuaW5nIGluIGNhc2Ugb2YgZmFpbHVyZT8KIAotICAgIGNvdW50ID0gMAotICAgIHdoaWxlIGxlbih0aHJlYWRpbmcuX2xpbWJvKSAhPSBudW1fbGltYm8gYW5kIGNvdW50IDwgX01BWF9DT1VOVDoKLSAgICAgICAgY291bnQgKz0gMQotICAgICAgICB0aW1lLnNsZWVwKDAuMSkKK2RlZiByZWFwX3RocmVhZHMoZnVuYyk6CisgICAgIiIiVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB0aHJlYWRzIGFyZSBiZWluZyB1c2VkLiAgVGhpcyB3aWxsCisgICAgZW5zdXJlIHRoYXQgdGhlIHRocmVhZHMgYXJlIGNsZWFuZWQgdXAgZXZlbiB3aGVuIHRoZSB0ZXN0IGZhaWxzLgorICAgIElmIHRocmVhZGluZyBpcyB1bmF2YWlsYWJsZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KKyAgICAiIiIKKyAgICBpZiBub3QgdGhyZWFkOgorICAgICAgICByZXR1cm4gZnVuYworCisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiBkZWNvcmF0b3IoKmFyZ3MpOgorICAgICAgICBrZXkgPSB0aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRocmVhZGluZ19jbGVhbnVwKCprZXkpCisgICAgcmV0dXJuIGRlY29yYXRvcgogCiBkZWYgcmVhcF9jaGlsZHJlbigpOgogICAgICIiIlVzZSB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmQgb2YgdGVzdF9tYWluKCkgd2hlbmV2ZXIgc3ViLXByb2Nlc3NlcwpAQCAtODkzLDMgKzExODUsNDggQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBicmVhaworCitkZWYgcHkza19ieXRlcyhiKToKKyAgICAiIiJFbXVsYXRlIHRoZSBweTNrIGJ5dGVzKCkgY29uc3RydWN0b3IuCisKKyAgICBOT1RFOiBUaGlzIGlzIG9ubHkgYSBiZXN0IGVmZm9ydCBmdW5jdGlvbi4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgbWVtb3J5dmlldz8KKyAgICAgICAgcmV0dXJuIGIudG9ieXRlcygpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGl0ZXJhYmxlIG9mIGludHM/CisgICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oY2hyKHgpIGZvciB4IGluIGIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gYnl0ZXMoYikKKworZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyByZXByb2R1Y2luZyB0aGUgY3VycmVudAorICAgIHNldHRpbmdzIGluIHN5cy5mbGFncy4iIiIKKyAgICBmbGFnX29wdF9tYXAgPSB7CisgICAgICAgICdieXRlc193YXJuaW5nJzogJ2InLAorICAgICAgICAnZG9udF93cml0ZV9ieXRlY29kZSc6ICdCJywKKyAgICAgICAgJ2lnbm9yZV9lbnZpcm9ubWVudCc6ICdFJywKKyAgICAgICAgJ25vX3VzZXJfc2l0ZSc6ICdzJywKKyAgICAgICAgJ25vX3NpdGUnOiAnUycsCisgICAgICAgICdvcHRpbWl6ZSc6ICdPJywKKyAgICAgICAgJ3B5M2tfd2FybmluZyc6ICczJywKKyAgICAgICAgJ3ZlcmJvc2UnOiAndicsCisgICAgfQorICAgIGFyZ3MgPSBbXQorICAgIGZvciBmbGFnLCBvcHQgaW4gZmxhZ19vcHRfbWFwLml0ZW1zKCk6CisgICAgICAgIHYgPSBnZXRhdHRyKHN5cy5mbGFncywgZmxhZykKKyAgICAgICAgaWYgdiA+IDA6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLScgKyBvcHQgKiB2KQorICAgIHJldHVybiBhcmdzCisKK2RlZiBzdHJpcF9weXRob25fc3RkZXJyKHN0ZGVycik6CisgICAgIiIiU3RyaXAgdGhlIHN0ZGVyciBvZiBhIFB5dGhvbiBwcm9jZXNzIGZyb20gcG90ZW50aWFsIGRlYnVnIG91dHB1dAorICAgIGVtaXR0ZWQgYnkgdGhlIGludGVycHJldGVyLgorCisgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKKyAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgorICAgICIiIgorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8kIiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKKyAgICByZXR1cm4gc3RkZXJyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5IGIvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weQppbmRleCAwYjQxOTBkLi43MTk5NGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKQEAgLTMsNyArMyw2IEBACiAiIiIKIGltcG9ydCBzeW10YWJsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIApAQCAtNTQsMjIgKzUzLDYgQEAKICAgICBpbnRlcm5hbCA9IGZpbmRfYmxvY2soc3BhbSwgImludGVybmFsIikKICAgICBmb28gPSBmaW5kX2Jsb2NrKHRvcCwgImZvbyIpCiAKLSAgICBkZWYgdGVzdF9ub29wcyhzZWxmKToKLSAgICAgICAgIyBDaGVjayBtZXRob2RzIHRoYXQgZG9uJ3Qgd29yay4gVGhleSBzaG91bGQgd2FybiBhbmQgcmV0dXJuIEZhbHNlLgotICAgICAgICBkZWYgY2hlY2sodywgbXNnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcubWVzc2FnZSksIG1zZykKLSAgICAgICAgc3ltID0gc2VsZi50b3AubG9va3VwKCJnbG9iIikKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN5bS5pc192YXJhcmcoKSkKLSAgICAgICAgICAgIGNoZWNrKHcsICJpc192YXJhcmcoKSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSByZW1vdmVkIikKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzeW0uaXNfa2V5d29yZGFyZygpKQotICAgICAgICAgICAgY2hlY2sodywgImlzX2tleXdvcmRhcmcoKSBpcyBvYnNvbGV0ZSBhbmQgd2lsbCBiZSByZW1vdmVkIikKLSAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzeW0uaXNfaW5fdHVwbGUoKSkKLSAgICAgICAgICAgIGNoZWNrKHcsICJpc19pbl90dXBsZSgpIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQiKQotCiAgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRvcC5nZXRfdHlwZSgpLCAibW9kdWxlIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLk1pbmUuZ2V0X3R5cGUoKSwgImNsYXNzIikKQEAgLTEwNyw3ICs5MCw3IEBACiAgICAgICAgIGZ1bmMgPSBzZWxmLnNwYW0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmdldF9wYXJhbWV0ZXJzKCksICgiYSIsICJiIiwgImt3IiwgInZhciIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMuZ2V0X2xvY2FscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgiYSIsICJiIiwgImJhciIsICJpbnRlcm5hbCIsICJrdyIsICJ2YXIiLCAieCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICgiYSIsICJiIiwgImludGVybmFsIiwgImt3IiwgInZhciIsICJ4IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYy5nZXRfZ2xvYmFscygpLCAoImJhciIsICJnbG9iIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbnRlcm5hbC5nZXRfZnJlZXMoKSwgKCJ4IiwpKQogCkBAIC0xNDcsNyArMTMwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudG9wLmxvb2t1cCgibmFtZXNwYWNlX3Rlc3QiKS5pc19uYW1lc3BhY2UoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNwYW0ubG9va3VwKCJ4IikuaXNfbmFtZXNwYWNlKCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudG9wLmxvb2t1cCgic3BhbSIpLmdldF9uYW1lc3BhY2UoKSBpcyBzZWxmLnNwYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoInNwYW0iKS5nZXRfbmFtZXNwYWNlKCkgaXMgc2VsZi5zcGFtKQogICAgICAgICBuc190ZXN0ID0gc2VsZi50b3AubG9va3VwKCJuYW1lc3BhY2VfdGVzdCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5zX3Rlc3QuZ2V0X25hbWVzcGFjZXMoKSksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5zX3Rlc3QuZ2V0X25hbWVzcGFjZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKaW5kZXggMmMyN2JmMS4uZWQ0ODM3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTI3LDE1ICsyNywxNSBAQAogCiBFcnJvcnMgZnJvbSBzZXRfY29udGV4dCgpOgogCi1UT0RPKGpoeWx0b24pOiAiYXNzaWdubWVudCB0byBOb25lIiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBvdGhlciBtZXNzYWdlcwotCiA+Pj4gb2JqLk5vbmUgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogYXNzaWdubWVudCB0byBOb25lICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzFdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMl0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCiAKIEl0J3MgYSBzeW50YXggZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSB0dXBsZS4gIFdoeSBpc24ndCBpdCBhbgogZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSBsaXN0PyAgSXQgd2lsbCBhbHdheXMgcmFpc2Ugc29tZSBlcnJvciBhdApAQCAtNDMsMzUgKzQzLDQzIEBACiAKID4+PiAoKSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gKCkgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbM10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbM10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvICgpCiAKID4+PiBmKCkgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNF0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKIAogPj4+IGRlbCBmKCkKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBkZWxldGUgZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs1XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBkZWxldGUgZnVuY3Rpb24gY2FsbAogCiA+Pj4gYSArIDEgPSAyCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIG9wZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzZdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzZdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBvcGVyYXRvcgogCiA+Pj4gKHggZm9yIHggaW4geCkgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzddPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogCiA+Pj4gMSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs4XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbAogCiA+Pj4gImFiYyIgPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbOV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbOF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKIAogPj4+IGAxYCA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gcmVwciAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMF0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byByZXByCiAKIElmIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IGlzIGEgbGlzdCBvciB0dXBsZSwgYW4gaWxsZWdhbAogZXhwcmVzc2lvbiBpbnNpZGUgdGhhdCBjb250YWluIHNob3VsZCBzdGlsbCBjYXVzZSBhIHN5bnRheCBlcnJvci4KQEAgLTgwLDIyICs4OCwyNiBAQAogCiA+Pj4gKGEsICJiIiwgYykgPSAoMSwgMiwgMykKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMV0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCiAKID4+PiBbYSwgYiwgYyArIDFdID0gWzEsIDIsIDNdCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIG9wZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEyXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIG9wZXJhdG9yCiAKID4+PiBhIGlmIDEgZWxzZSBiID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBjb25kaXRpb25hbCBleHByZXNzaW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzEzXT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxM10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KIAogRnJvbSBjb21waWxlcl9jb21wbGV4X2FyZ3MoKToKIAogPj4+IGRlZiBmKE5vbmU9MSk6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTRdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE0XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogCiBGcm9tIGFzdF9mb3JfYXJndW1lbnRzKCk6CkBAIC0xMDMsMjIgKzExNSwyNiBAQAogPj4+IGRlZiBmKHgsIHk9MSwgeik6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTVdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQKIAogPj4+IGRlZiBmKHgsIE5vbmUpOgogLi4uICAgICBwYXNzCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogYXNzaWdubWVudCB0byBOb25lICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE2XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxNl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCiAKID4+PiBkZWYgZigqTm9uZSk6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTddPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE3XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogPj4+IGRlZiBmKCoqTm9uZSk6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMThdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogCiBGcm9tIGFzdF9mb3JfZnVuY2RlZigpOgpAQCAtMTI2LDcgKzE0Miw4IEBACiA+Pj4gZGVmIE5vbmUoeCk6CiAuLi4gICAgIHBhc3MKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTldPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKIAogCiBGcm9tIGFzdF9mb3JfY2FsbCgpOgpAQCAtMTM4LDcgKzE1NSw4IEBACiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KID4+PiBmKHggZm9yIHggaW4gTCwgMSkKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBHZW5lcmF0b3IgZXhwcmVzc2lvbiBtdXN0IGJlIHBhcmVudGhlc2l6ZWQgaWYgbm90IHNvbGUgYXJndW1lbnQgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjNdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzIzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBHZW5lcmF0b3IgZXhwcmVzc2lvbiBtdXN0IGJlIHBhcmVudGhlc2l6ZWQgaWYgbm90IHNvbGUgYXJndW1lbnQKID4+PiBmKCh4IGZvciB4IGluIEwpLCAxKQogWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCiAKQEAgLTE3MCw3ICsxODgsOCBAQAogLi4uICAgaTI0NCwgIGkyNDUsICBpMjQ2LCAgaTI0NywgIGkyNDgsICBpMjQ5LCAgaTI1MCwgIGkyNTEsICBpMjUyLAogLi4uICAgaTI1MywgIGkyNTQsICBpMjU1KQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IG1vcmUgdGhhbiAyNTUgYXJndW1lbnRzICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI1XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyNV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogbW9yZSB0aGFuIDI1NSBhcmd1bWVudHMKIAogVGhlIGFjdHVhbCBlcnJvciBjYXNlcyBjb3VudHMgcG9zaXRpb25hbCBhcmd1bWVudHMsIGtleXdvcmQgYXJndW1lbnRzLAogYW5kIGdlbmVyYXRvciBleHByZXNzaW9uIGFyZ3VtZW50cyBzZXBhcmF0ZWx5LiAgVGhpcyB0ZXN0IGNvbWJpbmVzIHRoZQpAQCAtMjA0LDM3ICsyMjMsNDUgQEAKIC4uLiAgICh4IGZvciB4IGluIGkyNDQpLCAgaTI0NSwgIGkyNDYsICBpMjQ3LCAgaTI0OCwgIGkyNDksICBpMjUwLCAgaTI1MSwKIC4uLiAgICBpMjUyPTEsIGkyNTM9MSwgIGkyNTQ9MSwgIGkyNTU9MSkKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBtb3JlIHRoYW4gMjU1IGFyZ3VtZW50cyAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyNl0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjZdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IG1vcmUgdGhhbiAyNTUgYXJndW1lbnRzCiAKID4+PiBmKGxhbWJkYSB4OiB4WzBdID0gMykKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBsYW1iZGEgY2Fubm90IGNvbnRhaW4gYXNzaWdubWVudCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyN10+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGxhbWJkYSBjYW5ub3QgY29udGFpbiBhc3NpZ25tZW50CiAKIFRoZSBncmFtbWFyIGFjY2VwdHMgYW55IHRlc3QgKGJhc2ljYWxseSwgYW55IGV4cHJlc3Npb24pIGluIHRoZQoga2V5d29yZCBzbG90IG9mIGEgY2FsbCBzaXRlLiAgVGVzdCBhIGZldyBkaWZmZXJlbnQgb3B0aW9ucy4KIAogPj4+IGYoeCgpPTIpCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjoga2V5d29yZCBjYW4ndCBiZSBhbiBleHByZXNzaW9uICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI4XT4sIGxpbmUgMSkKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyOF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjoga2V5d29yZCBjYW4ndCBiZSBhbiBleHByZXNzaW9uCiA+Pj4gZihhIG9yIGI9MSkKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24gKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMjldPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24KID4+PiBmKHgueT0xKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbiAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszMF0+LCBsaW5lIDEpCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGtleXdvcmQgY2FuJ3QgYmUgYW4gZXhwcmVzc2lvbgogCiAKLUZyb20gYXN0X2Zvcl9leHByX3N0bXQoKToKK01vcmUgc2V0X2NvbnRleHQoKToKIAogPj4+ICh4IGZvciB4IGluIHgpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhdWdtZW50ZWQgYXNzaWdubWVudCB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbiBub3QgcG9zc2libGUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzFdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMxXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZ2VuZXJhdG9yIGV4cHJlc3Npb24KID4+PiBOb25lICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIE5vbmUgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzJdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMyXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKID4+PiBmKCkgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGlsbGVnYWwgZXhwcmVzc2lvbiBmb3IgYXVnbWVudGVkIGFzc2lnbm1lbnQgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzNdPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAogCiAKIFRlc3QgY29udGludWUgaW4gZmluYWxseSBpbiB3ZWlyZCBjb21iaW5hdGlvbnMuCkBAIC0yNjEsNyArMjg4LDggQEAKICAgICAuLi4gICAgICAgICAgICBjb250aW51ZQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzZdPiwgbGluZSA2KQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszNl0+IiwgbGluZSA2CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQogCiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgY29udGludWUgaW4gYSBmaW5hbGx5IHdoaWNoIHNob3VsZCBub3QgYmUgYWxsb3dlZC4KIApAQCAtMjc2LDcgKzMwNCw4IEBACiAgICAgLi4uICAgICAgICAgICAgICAgIHBhc3MKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KLSAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM3XT4sIGxpbmUgNykKKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzddPiIsIGxpbmUgNgorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKIAogICAgID4+PiBkZWYgZm9vKCk6CiAgICAgLi4uICAgICB0cnk6CkBAIC0yODUsNyArMzE0LDggQEAKICAgICAuLi4gICAgICAgICBjb250aW51ZQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzhdPiwgbGluZSA1KQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOF0+IiwgbGluZSA1CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQogCiAgICAgPj4+IGRlZiBmb28oKToKICAgICAuLi4gICAgIGZvciBhIGluICgpOgpAQCAtMjk1LDcgKzMyNSw4IEBACiAgICAgLi4uICAgICAgICAgICBjb250aW51ZQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzldPiwgbGluZSA2KQorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszOV0+IiwgbGluZSA2CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQogCiAgICAgPj4+IGRlZiBmb28oKToKICAgICAuLi4gICAgIGZvciBhIGluICgpOgpAQCAtMzA4LDcgKzMzOSw4IEBACiAgICAgLi4uICAgICAgICAgICAgICAgICBwYXNzCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0MF0+LCBsaW5lIDcpCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQwXT4iLCBsaW5lIDcKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCiAKICAgICA+Pj4gZGVmIGZvbygpOgogICAgIC4uLiAgZm9yIGEgaW4gKCk6CkBAIC0zMjAsNyArMzUyLDggQEAKICAgICAuLi4gICAgIGNvbnRpbnVlCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0MV0+LCBsaW5lIDgpCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQxXT4iLCBsaW5lIDgKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCiAKIFRoZXJlIGlzIG9uZSB0ZXN0IGZvciBhIGJyZWFrIHRoYXQgaXMgbm90IGluIGEgbG9vcC4gIFRoZSBjb21waWxlcgogdXNlcyBhIHNpbmdsZSBkYXRhIHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHRyeS1maW5hbGx5IGFuZCBsb29wcywKQEAgLTMzNSw3ICszNjgsOCBAQAogICAgLi4uICAgICBwcmludCAzCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIC4uLgotICAgU3ludGF4RXJyb3I6ICdicmVhaycgb3V0c2lkZSBsb29wICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQyXT4sIGxpbmUgMykKKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0Ml0+IiwgbGluZSAzCisgICBTeW50YXhFcnJvcjogJ2JyZWFrJyBvdXRzaWRlIGxvb3AKIAogVGhpcyBzaG91bGQgcHJvYmFibHkgcmFpc2UgYSBiZXR0ZXIgZXJyb3IgdGhhbiBhIFN5c3RlbUVycm9yIChvciBub25lIGF0IGFsbCkuCiBJbiAyLjUgdGhlcmUgd2FzIGEgbWlzc2luZyBleGNlcHRpb24gYW5kIGFuIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGluIGEgZGVidWcKQEAgLTM3Nyw3ICs0MTEsOCBAQAogICAgLi4uICAgcGFzcwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KLSAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0NF0+LCBsaW5lIDIpCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDRdPiIsIGxpbmUgMgorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCiAKICAgID4+PiBpZiAxOgogICAgLi4uICAgcGFzcwpAQCAtMzg1LDcgKzQyMCw4IEBACiAgICAuLi4gICB4KCkgPSAxCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIC4uLgotICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ1XT4sIGxpbmUgNCkKKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0NV0+IiwgbGluZSA0CisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKIAogICAgPj4+IGlmIDE6CiAgICAuLi4gICB4KCkgPSAxCkBAIC0zOTUsNyArNDMxLDggQEAKICAgIC4uLiAgIHBhc3MKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgLi4uCi0gICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDZdPiwgbGluZSAyKQorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ2XT4iLCBsaW5lIDIKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAogCiAgICA+Pj4gaWYgMToKICAgIC4uLiAgIHBhc3MKQEAgLTQwNSw3ICs0NDIsOCBAQAogICAgLi4uICAgcGFzcwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KLSAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbCAoPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0N10+LCBsaW5lIDQpCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDddPiIsIGxpbmUgNAorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCiAKICAgID4+PiBpZiAxOgogICAgLi4uICAgcGFzcwpAQCAtNDE1LDEyICs0NTMsMzIgQEAKICAgIC4uLiAgIHgoKSA9IDEKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgLi4uCi0gICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDhdPiwgbGluZSA2KQorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ4XT4iLCBsaW5lIDYKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAogCiA+Pj4gZihhPTIzLCBhPTIzNCkKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgIC4uLgotU3ludGF4RXJyb3I6IGtleXdvcmQgYXJndW1lbnQgcmVwZWF0ZWQgKDxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDldPiwgbGluZSAxKQorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGFyZ3VtZW50IHJlcGVhdGVkCisKKz4+PiBkZWwgKCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzUwXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBkZWxldGUgKCkKKworPj4+IHsxLCAyLCAzfSA9IDQyCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAuLi4KKyAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNTBdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCisKK0Nvcm5lci1jYXNlIHRoYXQgdXNlZCB0byBjcmFzaDoKKworICAgID4+PiBkZWYgZigqeHgsICoqX19kZWJ1Z19fKTogcGFzcworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBfX2RlYnVnX18KIAogIiIiCiAKQEAgLTUwNiw3ICs1NjQsNyBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3ludGF4VGVzdENhc2UpCiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N5bnRheAotICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLAorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhXYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3N5bnRheCwgdmVyYm9zaXR5PVRydWUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXMucHkKaW5kZXggZmQ2ZmIyYi4uNDlmNTM4OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXMucHkKQEAgLTEsMTAgKzEsMTQgQEAKICMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KIGltcG9ydCB1bml0dGVzdCwgdGVzdC50ZXN0X3N1cHBvcnQKLWltcG9ydCBzeXMsIGNTdHJpbmdJTywgb3MKK2ltcG9ydCBzeXMsIG9zLCBjU3RyaW5nSU8KIGltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBvcGVyYXRvcgogCiBjbGFzcyBTeXNNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKICAgICBkZWYgdGVzdF9vcmlnaW5hbF9kaXNwbGF5aG9vayhzZWxmKToKICAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCiAgICAgICAgIHNhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CkBAIC0xOSw3ICsyMyw3IEBACiAKICAgICAgICAgZGgoTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihfX2J1aWx0aW5fXywgIl8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKF9fYnVpbHRpbl9fLCAiXyIpKQogICAgICAgICBkaCg0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgIjQyXG4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fYnVpbHRpbl9fLl8sIDQyKQpAQCAtNTksNyArNjMsNyBAQAogICAgICAgICAgICAgZWgoKnN5cy5leGNfaW5mbygpKQogCiAgICAgICAgIHN5cy5zdGRlcnIgPSBzYXZlc3RkZXJyCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcnIuZ2V0dmFsdWUoKS5lbmRzd2l0aCgiVmFsdWVFcnJvcjogNDJcbiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLmdldHZhbHVlKCkuZW5kc3dpdGgoIlZhbHVlRXJyb3I6IDQyXG4iKSkKIAogICAgICMgRklYTUU6IHRlc3RpbmcgdGhlIGNvZGUgZm9yIGEgbG9zdCBvciByZXBsYWNlZCBleGNlcHRob29rIGluCiAgICAgIyBQeXRob24vcHl0aG9ucnVuLmM6OlB5RXJyX1ByaW50RXgoKSBpcyB0cmlja3kuCkBAIC03MSwxNyArNzUsMTcgQEAKICAgICAgICAgIyBjaGVjayB0aGF0IGl0IHdvcmtlZC4KICAgICAgICAgZGVmIGNsZWFyX2NoZWNrKGV4Yyk6CiAgICAgICAgICAgICB0eXAsIHZhbHVlLCB0cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cCBpcyBub3QgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWx1ZSBpcyBleGMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHJhY2ViYWNrIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cCBpcyBub3QgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSBpcyBleGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2ViYWNrIGlzIG5vdCBOb25lKQogCi0gICAgICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgICAgICAgICBzeXMuZXhjX2NsZWFyKCkKIAogICAgICAgICAgICAgdHlwLCB2YWx1ZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXAgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWx1ZSBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHRyYWNlYmFjayBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cCBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2ViYWNrIGlzIE5vbmUpCiAKICAgICAgICAgZGVmIGNsZWFyKCk6CiAgICAgICAgICAgICB0cnk6CkBAIC0xMDEsMTAgKzEwNSwxMCBAQAogICAgICAgICAgICAgY2xlYXIoKQogICAgICAgICAgICAgdHlwMiwgdmFsdWUyLCB0cmFjZWJhY2syID0gc3lzLmV4Y19pbmZvKCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cDEgaXMgdHlwMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2YWx1ZTEgaXMgZXhjKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHZhbHVlMSBpcyB2YWx1ZTIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odHJhY2ViYWNrMSBpcyB0cmFjZWJhY2syKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cDEgaXMgdHlwMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZTEgaXMgZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlMSBpcyB2YWx1ZTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2ViYWNrMSBpcyB0cmFjZWJhY2syKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBleGNlcHRpb24gY2FuIGJlIGNsZWFyZWQgb3V0c2lkZSBvZiBhbiBleGNlcHQgYmxvY2sKICAgICAgICAgY2xlYXJfY2hlY2soZXhjKQpAQCAtMTE2LDcgKzEyMCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuY29kZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsIDApCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKICAgICAgICAgZWxzZToKQEAgLTEyNyw3ICsxMzEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzeXMuZXhpdCg0MikKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsIDQyKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCiAgICAgICAgIGVsc2U6CkBAIC0xMzcsNyArMTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLmV4aXQoKDQyLCkpCiAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleGMuY29kZSwgNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCA0MikKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24iKQogICAgICAgICBlbHNlOgpAQCAtMTQ3LDcgKzE1MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5leGl0KCJleGl0IikKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCAiZXhpdCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCAiZXhpdCIpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKICAgICAgICAgZWxzZToKQEAgLTE1Nyw3ICsxNjEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzeXMuZXhpdCgoMTcsIDIzKSkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4Yy5jb2RlLCAoMTcsIDIzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsICgxNywgMjMpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCiAgICAgICAgIGVsc2U6CkBAIC0xOTksMTcgKzIwMywxNyBAQAogICAgICAgICBpZiB0ZXN0LnRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcsIDQyKQogICAgICAgICAgICAgIyBjYW4ndCBjaGVjayBtb3JlIHRoYW4gdGhlIHR5cGUsIGFzIHRoZSB1c2VyIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpLCBzdHIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSwgc3RyKQogCi0gICAgIyB0ZXN0aW5nIHN5cy5zZXR0cmFjZSgpIGlzIGRvbmUgaW4gdGVzdF90cmFjZS5weQotICAgICMgdGVzdGluZyBzeXMuc2V0cHJvZmlsZSgpIGlzIGRvbmUgaW4gdGVzdF9wcm9maWxlLnB5CisgICAgIyB0ZXN0aW5nIHN5cy5zZXR0cmFjZSgpIGlzIGRvbmUgaW4gdGVzdF9zeXNfc2V0dHJhY2UucHkKKyAgICAjIHRlc3Rpbmcgc3lzLnNldHByb2ZpbGUoKSBpcyBkb25lIGluIHRlc3Rfc3lzX3NldHByb2ZpbGUucHkKIAogICAgIGRlZiB0ZXN0X3NldGNoZWNraW50ZXJ2YWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldGNoZWNraW50ZXJ2YWwpCiAgICAgICAgIG9yaWcgPSBzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpCiAgICAgICAgIGZvciBuIGluIDAsIDEwMCwgMTIwLCBvcmlnOiAjIG9yaWcgbGFzdCB0byByZXN0b3JlIHN0YXJ0aW5nIHN0YXRlCiAgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3lzLmdldGNoZWNraW50ZXJ2YWwoKSwgbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldGNoZWNraW50ZXJ2YWwoKSwgbikKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbmxpbWl0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRyZWN1cnNpb25saW1pdCwgNDIpCkBAIC0yMjEsMTkgKzIyNSwzOCBAQAogICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQob2xkbGltaXQpCiAKICAgICBkZWYgdGVzdF9nZXR3aW5kb3dzdmVyc2lvbihzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICJnZXR3aW5kb3dzdmVyc2lvbiIpOgotICAgICAgICAgICAgdiA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2LCB0dXBsZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgNSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZbMF0sIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2WzFdLCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodlsyXSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZbM10sIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2WzRdLCBzdHIpKQorICAgICAgICAjIFJhaXNlIFNraXBUZXN0IGlmIHN5cyBkb2Vzbid0IGhhdmUgZ2V0d2luZG93c3ZlcnNpb24gYXR0cmlidXRlCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LmdldF9hdHRyaWJ1dGUoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKQorICAgICAgICB2ID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzNdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzRdLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1pbm9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LmJ1aWxkLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnBsYXRmb3JtLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnNlcnZpY2VfcGFjaywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5zZXJ2aWNlX3BhY2tfbWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc2VydmljZV9wYWNrX21ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnN1aXRlX21hc2ssIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYucHJvZHVjdF90eXBlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlswXSwgdi5tYWpvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzFdLCB2Lm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMl0sIHYuYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlszXSwgdi5wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzRdLCB2LnNlcnZpY2VfcGFjaykKKworICAgICAgICAjIFRoaXMgaXMgaG93IHBsYXRmb3JtLnB5IGNhbGxzIGl0LiBNYWtlIHN1cmUgdHVwbGUKKyAgICAgICAgIyAgc3RpbGwgaGFzIDUgZWxlbWVudHMKKyAgICAgICAgbWFqLCBtaW4sIGJ1aWxkbm8sIHBsYXQsIGNzZCA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCiAKICAgICBkZWYgdGVzdF9kbG9wZW5mbGFncyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihzeXMsICJzZXRkbG9wZW5mbGFncyIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGhhc2F0dHIoc3lzLCAiZ2V0ZGxvcGVuZmxhZ3MiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN5cywgImdldGRsb3BlbmZsYWdzIikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRkbG9wZW5mbGFncywgNDIpCiAgICAgICAgICAgICBvbGRmbGFncyA9IHN5cy5nZXRkbG9wZW5mbGFncygpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXRkbG9wZW5mbGFncykKQEAgLTI1NCwxMiArMjc3LDEyIEBACiAgICAgICAgIGRlbCBuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KE5vbmUpLCBjKQogICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5nZXR0b3RhbHJlZmNvdW50KCksIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmdldHRvdGFscmVmY291bnQoKSwgaW50KQogCiAgICAgZGVmIHRlc3RfZ2V0ZnJhbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLl9nZXRmcmFtZSwgNDIsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzeXMuX2dldGZyYW1lLCAyMDAwMDAwMDAwKQotICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIFN5c01vZHVsZVRlc3QudGVzdF9nZXRmcmFtZS5pbV9mdW5jLmZ1bmNfY29kZSBcCiAgICAgICAgICAgICBpcyBzeXMuX2dldGZyYW1lKCkuZl9jb2RlCiAgICAgICAgICkKQEAgLTI3OCw2ICszMDEsNyBAQAogICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lc193aXRob3V0X3RocmVhZHMoKQogCiAgICAgIyBUZXN0IHN5cy5fY3VycmVudF9mcmFtZXMoKSBpbiBhIFdJVEhfVEhSRUFEUyBidWlsZC4KKyAgICBAdGVzdC50ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCiAgICAgZGVmIGN1cnJlbnRfZnJhbWVzX3dpdGhfdGhyZWFkcyhzZWxmKToKICAgICAgICAgaW1wb3J0IHRocmVhZGluZywgdGhyZWFkCiAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKQEAgLTMxMCwxMiArMzM0LDEyIEBACiAgICAgICAgIGQgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkKIAogICAgICAgICBtYWluX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhtYWluX2lkIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0aHJlYWRfaWQgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtYWluX2lkLCBkKQorICAgICAgICBzZWxmLmFzc2VydEluKHRocmVhZF9pZCwgZCkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBjYXB0dXJlZCBtYWluLXRocmVhZCBmcmFtZSBpcyBfdGhpc18gZnJhbWUuCiAgICAgICAgIGZyYW1lID0gZC5wb3AobWFpbl9pZCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZyYW1lIGlzIHN5cy5fZ2V0ZnJhbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZyYW1lIGlzIHN5cy5fZ2V0ZnJhbWUoKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBjYXB0dXJlZCB0aHJlYWQgZnJhbWUgaXMgYmxvY2tlZCBpbiBnNDU2LCBjYWxsZWQKICAgICAgICAgIyBmcm9tIGYxMjMuICBUaGlzIGlzIGEgbGl0dGUgdHJpY2t5LCBzaW5jZSB2YXJpb3VzIGJpdHMgb2YKQEAgLTMzMyw3ICszNTcsNyBAQAogICAgICAgICAjIEFuZCB0aGUgbmV4dCByZWNvcmQgbXVzdCBiZSBmb3IgZzQ1NigpLgogICAgICAgICBmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgc291cmNlbGluZSA9IHN0YWNrW2krMV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jbmFtZSwgImc0NTYiKQotICAgICAgICBzZWxmLmFzc2VydF8oc291cmNlbGluZSBpbiBbImxlYXZlX2cud2FpdCgpIiwgImVudGVyZWRfZy5zZXQoKSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKHNvdXJjZWxpbmUsIFsibGVhdmVfZy53YWl0KCkiLCAiZW50ZXJlZF9nLnNldCgpIl0pCiAKICAgICAgICAgIyBSZWFwIHRoZSBzcGF3bmVkIHRocmVhZC4KICAgICAgICAgbGVhdmVfZy5zZXQoKQpAQCAtMzQ1LDU2ICszNjksNzQgQEAKICAgICAgICAgIyAidGhyZWFkIGlkIiAwLgogICAgICAgICBkID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQotICAgICAgICBzZWxmLmFzc2VydF8oMCBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydF8oZFswXSBpcyBzeXMuX2dldGZyYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMCwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRbMF0gaXMgc3lzLl9nZXRmcmFtZSgpKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmFwaV92ZXJzaW9uLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuYXJndiwgbGlzdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzeXMuYnl0ZW9yZGVyIGluICgibGl0dGxlIiwgImJpZyIpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMsIHR1cGxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLmNvcHlyaWdodCwgYmFzZXN0cmluZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5leGVjX3ByZWZpeCwgYmFzZXN0cmluZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5leGVjdXRhYmxlLCBiYXNlc3RyaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5hcGlfdmVyc2lvbiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmFyZ3YsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmJ5dGVvcmRlciwgKCJsaXR0bGUiLCAiYmlnIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmNvcHlyaWdodCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5leGVjX3ByZWZpeCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5leGVjdXRhYmxlLCBiYXNlc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuZmxvYXRfaW5mbyksIDExKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5mbG9hdF9pbmZvLnJhZGl4LCAyKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMuaGV4dmVyc2lvbiwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLm1heGludCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmxvbmdfaW5mbyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubG9uZ19pbmZvLmJpdHNfcGVyX2RpZ2l0ICUgNSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLmxvbmdfaW5mby5zaXplb2ZfZGlnaXQgPj0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN5cy5sb25nX2luZm8uYml0c19wZXJfZGlnaXQpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzeXMubG9uZ19pbmZvLnNpemVvZl9kaWdpdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4aW50LCBpbnQpCiAgICAgICAgIGlmIHRlc3QudGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMucGxhdGZvcm0sIGJhc2VzdHJpbmcpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzeXMucHJlZml4LCBiYXNlc3RyaW5nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc3lzLnZlcnNpb24sIGJhc2VzdHJpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMucGxhdGZvcm0sIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMucHJlZml4LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnZlcnNpb24sIGJhc2VzdHJpbmcpCiAgICAgICAgIHZpID0gc3lzLnZlcnNpb25faW5mbwotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2aSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbOl0sIHR1cGxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2aSksIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZpWzBdLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZSh2aVsxXSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodmlbMl0sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2aVszXSBpbiAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHZpWzRdLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbMF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVsyXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEluKHZpWzNdLCAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVs0XSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmkubWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLm1pbm9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5taWNybywgaW50KQorICAgICAgICBzZWxmLmFzc2VydEluKHZpLnJlbGVhc2VsZXZlbCwgKCJhbHBoYSIsICJiZXRhIiwgImNhbmRpZGF0ZSIsICJmaW5hbCIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodmkuc2VyaWFsLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbMF0sIHZpLm1ham9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzFdLCB2aS5taW5vcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVsyXSwgdmkubWljcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbM10sIHZpLnJlbGVhc2VsZXZlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVs0XSwgdmkuc2VyaWFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodmkgPiAoMSwwLDApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmZsb2F0X3JlcHJfc3R5bGUsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuZmxvYXRfcmVwcl9zdHlsZSwgKCdzaG9ydCcsICdsZWdhY3knKSkKIAogICAgIGRlZiB0ZXN0XzQzNTgxKHNlbGYpOgogICAgICAgICAjIENhbid0IHVzZSBzeXMuc3Rkb3V0LCBhcyB0aGlzIGlzIGEgY1N0cmluZ0lPIG9iamVjdCB3aGVuCiAgICAgICAgICMgdGhlIHRlc3QgcnVucyB1bmRlciByZWdydGVzdC4KLSAgICAgICAgc2VsZi5hc3NlcnRfKHN5cy5fX3N0ZG91dF9fLmVuY29kaW5nID09IHN5cy5fX3N0ZGVycl9fLmVuY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLl9fc3Rkb3V0X18uZW5jb2RpbmcgPT0gc3lzLl9fc3RkZXJyX18uZW5jb2RpbmcpCiAKICAgICBkZWYgdGVzdF9zeXNfZmxhZ3Moc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhzeXMuZmxhZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMuZmxhZ3MpCiAgICAgICAgIGF0dHJzID0gKCJkZWJ1ZyIsICJweTNrX3dhcm5pbmciLCAiZGl2aXNpb25fd2FybmluZyIsICJkaXZpc2lvbl9uZXciLAogICAgICAgICAgICAgICAgICAiaW5zcGVjdCIsICJpbnRlcmFjdGl2ZSIsICJvcHRpbWl6ZSIsICJkb250X3dyaXRlX2J5dGVjb2RlIiwKICAgICAgICAgICAgICAgICAgIm5vX3NpdGUiLCAiaWdub3JlX2Vudmlyb25tZW50IiwgInRhYmNoZWNrIiwgInZlcmJvc2UiLAogICAgICAgICAgICAgICAgICAidW5pY29kZSIsICJieXRlc193YXJuaW5nIikKICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzeXMuZmxhZ3MsIGF0dHIpLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZXByKHN5cy5mbGFncykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHN5cy5mbGFncykpCiAKICAgICBkZWYgdGVzdF9jbGVhcl90eXBlX2NhY2hlKHNlbGYpOgogICAgICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQogCiAgICAgZGVmIHRlc3RfaW9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3Msb3MKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKQogCiAgICAgICAgICMgVGVzdCBjaGFyYWN0ZXI6IGNlbnQgc2lnbiwgZW5jb2RlZCBhcyAweDRBIChBU0NJSSBKKSBpbiBDUDQyNCwKQEAgLTQwMywxMyArNDQ1LDEzIEBACiAgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImNwNDI0IgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCB1bmljaHIoMHhhMiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQotICAgICAgICBvdXQgPSBwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgdW5pY2hyKDB4YTIpLmVuY29kZSgiY3A0MjQiKSkKIAogICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaTpyZXBsYWNlIgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCB1bmljaHIoMHhhMiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQotICAgICAgICBvdXQgPSBwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgJz8nKQogCiAgICAgZGVmIHRlc3RfY2FsbF90cmFjaW5nKHNlbGYpOgpAQCAtNDI5LDcgKzQ3MSw3IEBACiAgICAgICAgICAgICBleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjd2Q9cHl0aG9uX2RpcikKICAgICAgICAgZXhlY3V0YWJsZSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHAud2FpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhleGVjdXRhYmxlIGluIFsiJyciLCByZXByKHN5cy5leGVjdXRhYmxlKV0sIGV4ZWN1dGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhlY3V0YWJsZSwgWyInJyIsIHJlcHIoc3lzLmV4ZWN1dGFibGUpXSkKIAogY2xhc3MgU2l6ZW9mVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQ0OSw2ICs0OTEsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKICAgICAgICAgICAgIHNlbGYuaGVhZGVyICs9ICcyUCcKICAgICAgICAgICAgIHNlbGYudmhlYWRlciArPSAnMlAnCisgICAgICAgIHNlbGYubG9uZ2RpZ2l0ID0gc3lzLmxvbmdfaW5mby5zaXplb2ZfZGlnaXQKICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgICAgICBzZWxmLmdjX2hlYWRzaXplID0gX3Rlc3RjYXBpLlNJWkVPRl9QWUdDX0hFQUQKICAgICAgICAgc2VsZi5maWxlID0gb3Blbih0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCkBAIC00OTksNyArNTQyLDcgQEAKICAgICAgICAgIyBib29sCiAgICAgICAgIGNoZWNrKFRydWUsIHNpemUoaCArICdsJykpCiAgICAgICAgICMgYnVmZmVyCi0gICAgICAgIHdpdGggdGVzdC50ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBjaGVjayhidWZmZXIoJycpLCBzaXplKGggKyAnMlAyUGlsJykpCiAgICAgICAgICMgYnVpbHRpbl9mdW5jdGlvbl9vcl9tZXRob2QKICAgICAgICAgY2hlY2sobGVuLCBzaXplKGggKyAnM1AnKSkKQEAgLTUyMSw3ICs1NjQsNyBAQAogICAgICAgICBjbGFzcyBjbGFzc19vbGRzdHlsZSgpOgogICAgICAgICAgICAgZGVmIG1ldGhvZCgpOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgY2hlY2soY2xhc3Nfb2xkc3R5bGUsIHNpemUoaCArICc2UCcpKQorICAgICAgICBjaGVjayhjbGFzc19vbGRzdHlsZSwgc2l6ZShoICsgJzdQJykpCiAgICAgICAgICMgaW5zdGFuY2UgKG9sZC1zdHlsZSBjbGFzcykKICAgICAgICAgY2hlY2soY2xhc3Nfb2xkc3R5bGUoKSwgc2l6ZShoICsgJzNQJykpCiAgICAgICAgICMgaW5zdGFuY2VtZXRob2QgKG9sZC1zdHlsZSBjbGFzcykKQEAgLTUyOSw3ICs1NzIsNyBAQAogICAgICAgICAjIGNvbXBsZXgKICAgICAgICAgY2hlY2soY29tcGxleCgwLDEpLCBzaXplKGggKyAnMmQnKSkKICAgICAgICAgIyBjb2RlCi0gICAgICAgIGNoZWNrKGdldF9jZWxsKCkuZnVuY19jb2RlLCBzaXplKGggKyAnNGk4UGkyUCcpKQorICAgICAgICBjaGVjayhnZXRfY2VsbCgpLmZ1bmNfY29kZSwgc2l6ZShoICsgJzRpOFBpM1AnKSkKICAgICAgICAgIyBCYXNlRXhjZXB0aW9uCiAgICAgICAgIGNoZWNrKEJhc2VFeGNlcHRpb24oKSwgc2l6ZShoICsgJzNQJykpCiAgICAgICAgICMgVW5pY29kZUVuY29kZUVycm9yCkBAIC02MjYsMTIgKzY2OSwxMyBAQAogICAgICAgICAjIGxpc3RyZXZlcnNlaXRlcmF0b3IgKGxpc3QpCiAgICAgICAgIGNoZWNrKHJldmVyc2VkKFtdKSwgc2l6ZShoICsgJ2xQJykpCiAgICAgICAgICMgbG9uZwotICAgICAgICBjaGVjaygwTCwgc2l6ZSh2aCArICdIJykgLSBzZWxmLkgpCi0gICAgICAgIGNoZWNrKDFMLCBzaXplKHZoICsgJ0gnKSkKLSAgICAgICAgY2hlY2soLTFMLCBzaXplKHZoICsgJ0gnKSkKLSAgICAgICAgY2hlY2soMzI3NjhMLCBzaXplKHZoICsgJ0gnKSArIHNlbGYuSCkKLSAgICAgICAgY2hlY2soMzI3NjhMKjMyNzY4TC0xLCBzaXplKHZoICsgJ0gnKSArIHNlbGYuSCkKLSAgICAgICAgY2hlY2soMzI3NjhMKjMyNzY4TCwgc2l6ZSh2aCArICdIJykgKyAyKnNlbGYuSCkKKyAgICAgICAgY2hlY2soMEwsIHNpemUodmgpKQorICAgICAgICBjaGVjaygxTCwgc2l6ZSh2aCkgKyBzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgY2hlY2soLTFMLCBzaXplKHZoKSArIHNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBQeUxvbmdfQkFTRSA9IDIqKnN5cy5sb25nX2luZm8uYml0c19wZXJfZGlnaXQKKyAgICAgICAgY2hlY2sobG9uZyhQeUxvbmdfQkFTRSksIHNpemUodmgpICsgMipzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgY2hlY2sobG9uZyhQeUxvbmdfQkFTRSoqMi0xKSwgc2l6ZSh2aCkgKyAyKnNlbGYubG9uZ2RpZ2l0KQorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKioyKSwgc2l6ZSh2aCkgKyAzKnNlbGYubG9uZ2RpZ2l0KQogICAgICAgICAjIG1vZHVsZQogICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZShoICsgJ1AnKSkKICAgICAgICAgIyBOb25lCkBAIC02NDYsNiArNjkwLDcgQEAKICAgICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4LCBkZWx4LCAiIikKICAgICAgICAgICAgIGNoZWNrKHgsIHNpemUoaCArICc0UGknKSkKICAgICAgICAgIyBQeUNPYmplY3QKKyAgICAgICAgIyBQeUNhcHN1bGUKICAgICAgICAgIyBYWFgKICAgICAgICAgIyByYW5nZWl0ZXJhdG9yCiAgICAgICAgIGNoZWNrKGl0ZXIoeHJhbmdlKDEpKSwgc2l6ZShoICsgJzRsJykpCkBAIC02NzYsOCArNzIxLDggQEAKICAgICAgICAgIyBzbGljZQogICAgICAgICBjaGVjayhzbGljZSgxKSwgc2l6ZShoICsgJzNQJykpCiAgICAgICAgICMgc3RyCi0gICAgICAgIGNoZWNrKCcnLCBzaXplKHZoICsgJ2xpYycpKQotICAgICAgICBjaGVjaygnYWJjJywgc2l6ZSh2aCArICdsaWMnKSArIDMqc2VsZi5jKQorICAgICAgICBjaGVjaygnJywgc3RydWN0LmNhbGNzaXplKHZoICsgJ2xpJykgKyAxKQorICAgICAgICBjaGVjaygnYWJjJywgc3RydWN0LmNhbGNzaXplKHZoICsgJ2xpJykgKyAxICsgMypzZWxmLmMpCiAgICAgICAgICMgc3VwZXIKICAgICAgICAgY2hlY2soc3VwZXIoaW50KSwgc2l6ZShoICsgJzNQJykpCiAgICAgICAgICMgdHVwbGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZWhvb2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNfc2V0cHJvZmlsZS5weQpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0X3Byb2ZpbGVob29rcy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9zeXNfc2V0cHJvZmlsZS5weQppbmRleCAzZTAyODMwLi5lODI1NTlmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGVob29rcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5CkBAIC0xLDMgKzEsNCBAQAoraW1wb3J0IGdjCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEyLDE0ICsxMywxNCBAQAogICAgICAgICBzeXMuc2V0cHJvZmlsZShOb25lKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6Ci0gICAgICAgIGFzc2VydCBzeXMuZ2V0cHJvZmlsZSgpID09IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmdldHByb2ZpbGUoKSkKIAogICAgIGRlZiB0ZXN0X3NldGdldChzZWxmKToKICAgICAgICAgZGVmIGZuKCphcmdzKToKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBzeXMuc2V0cHJvZmlsZShmbikKLSAgICAgICAgYXNzZXJ0IHN5cy5nZXRwcm9maWxlKCkgPT0gZm4KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuZ2V0cHJvZmlsZSgpLCBmbikKIAogY2xhc3MgSG9va1dhdGNoZXI6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMzUyLDE5ICszNTMsMTkgQEAKIAogCiBkZWYgY2FwdHVyZV9ldmVudHMoY2FsbGFibGUsIHA9Tm9uZSk6Ci0gICAgdHJ5OgotICAgICAgICBzeXMuc2V0cHJvZmlsZSgpCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKAotICAgICAgICAgICAgJ3N5cy5zZXRwcm9maWxlKCkgZGlkIG5vdCByYWlzZSBUeXBlRXJyb3InKQotCiAgICAgaWYgcCBpcyBOb25lOgogICAgICAgICBwID0gSG9va1dhdGNoZXIoKQotICAgIHN5cy5zZXRwcm9maWxlKHAuY2FsbGJhY2spCi0gICAgcHJvdGVjdChjYWxsYWJsZSwgcCkKLSAgICBzeXMuc2V0cHJvZmlsZShOb25lKQorICAgICMgRGlzYWJsZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFRoaXMgcHJldmVudHMgX19kZWxfX3MgZnJvbSBzaG93aW5nIHVwIGluCisgICAgIyB0cmFjZXMuCisgICAgb2xkX2djID0gZ2MuaXNlbmFibGVkKCkKKyAgICBnYy5kaXNhYmxlKCkKKyAgICB0cnk6CisgICAgICAgIHN5cy5zZXRwcm9maWxlKHAuY2FsbGJhY2spCisgICAgICAgIHByb3RlY3QoY2FsbGFibGUsIHApCisgICAgICAgIHN5cy5zZXRwcm9maWxlKE5vbmUpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb2xkX2djOgorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKICAgICByZXR1cm4gcC5nZXRfZXZlbnRzKClbMTotMV0KIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c19zZXR0cmFjZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOGM1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N5c19zZXR0cmFjZS5weQpAQCAtMCwwICsxLDc4OSBAQAorIyBUZXN0aW5nIHRoZSBsaW5lIHRyYWNlIGZhY2lsaXR5LgorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGdjCisKKyMgQSB2ZXJ5IGJhc2ljIGV4YW1wbGUuICBJZiB0aGlzIGZhaWxzLCB3ZSdyZSBpbiBkZWVwIHRyb3VibGUuCitkZWYgYmFzaWMoKToKKyAgICByZXR1cm4gMQorCitiYXNpYy5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0KKworIyBNYW55IG9mIHRoZSB0ZXN0cyBiZWxvdyBhcmUgdHJpY2t5IGJlY2F1c2UgdGhleSBpbnZvbHZlIHBhc3Mgc3RhdGVtZW50cy4KKyMgSWYgdGhlcmUgaXMgaW1wbGljaXQgY29udHJvbCBmbG93IGFyb3VuZCBhIHBhc3Mgc3RhdGVtZW50IChpbiBhbiBleGNlcHQKKyMgY2xhdXNlIG9yIGVsc2UgY2FsdXNlKSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgZG8geW91IHNldCBhIGxpbmUgbnVtYmVyCisjIGZvbGxvd2luZyB0aGF0IGNsYXVzZT8KKworCisjIFRoZSBlbnRpcmUgIndoaWxlIDA6IiBzdGF0ZW1lbnQgaXMgb3B0aW1pemVkIGF3YXkuICBObyBjb2RlCisjIGV4aXN0cyBmb3IgaXQsIHNvIHRoZSBsaW5lIG51bWJlcnMgc2tpcCBkaXJlY3RseSBmcm9tICJkZWwgeCIKKyMgdG8gInggPSAxIi4KK2RlZiBhcmlnb19leGFtcGxlKCk6CisgICAgeCA9IDEKKyAgICBkZWwgeAorICAgIHdoaWxlIDA6CisgICAgICAgIHBhc3MKKyAgICB4ID0gMQorCithcmlnb19leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg1LCAncmV0dXJuJyldCisKKyMgY2hlY2sgdGhhdCBsaW5lcyBjb25zaXN0aW5nIG9mIGp1c3Qgb25lIGluc3RydWN0aW9uIGdldCB0cmFjZWQ6CitkZWYgb25lX2luc3RyX2xpbmUoKToKKyAgICB4ID0gMQorICAgIGRlbCB4CisgICAgeCA9IDEKKworb25lX2luc3RyX2xpbmUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJyldCisKK2RlZiBub19wb3BfdG9wcygpOiAgICAgICMgMAorICAgIHggPSAxICAgICAgICAgICAgICAgIyAxCisgICAgZm9yIGEgaW4gcmFuZ2UoMik6ICAjIDIKKyAgICAgICAgaWYgYTogICAgICAgICAgICMgMworICAgICAgICAgICAgeCA9IDEgICAgICAgIyA0CisgICAgICAgIGVsc2U6ICAgICAgICAgICAjIDUKKyAgICAgICAgICAgIHggPSAxICAgICAgICMgNgorCitub19wb3BfdG9wcy5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nKV0KKworZGVmIG5vX3BvcF9ibG9ja3MoKToKKyAgICB5ID0gMQorICAgIHdoaWxlIG5vdCB5OgorICAgICAgICBibGEKKyAgICB4ID0gMQorCitub19wb3BfYmxvY2tzLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCisKK2RlZiBjYWxsZWQoKTogIyBsaW5lIC0zCisgICAgeCA9IDEKKworZGVmIGNhbGwoKTogICAjIGxpbmUgMAorICAgIGNhbGxlZCgpCisKK2NhbGwuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCisgICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCisgICAgICAgICAgICAgICAoLTIsICdyZXR1cm4nKSwKKyAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyldCisKK2RlZiByYWlzZXMoKToKKyAgICByYWlzZSBFeGNlcHRpb24KKworZGVmIHRlc3RfcmFpc2UoKToKKyAgICB0cnk6CisgICAgICAgIHJhaXNlcygpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjOgorICAgICAgICB4ID0gMQorCit0ZXN0X3JhaXNlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoLTIsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICgtMiwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgICAgKDIsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicpXQorCitkZWYgX3NldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKKyAgICBzeXMuc2V0dHJhY2UodHJhY2VmdW5jKQorICAgIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl90cmFjZSA9IHRyYWNlZnVuYworZGVmIHNldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKToKKyAgICBfc2V0dHJhY2VfYW5kX3JldHVybih0cmFjZWZ1bmMpCisKK3NldHRyYWNlX2FuZF9yZXR1cm4uZXZlbnRzID0gWygxLCAncmV0dXJuJyldCisKK2RlZiBfc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYyk6CisgICAgc3lzLnNldHRyYWNlKHRyYWNlZnVuYykKKyAgICBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfdHJhY2UgPSB0cmFjZWZ1bmMKKyAgICByYWlzZSBSdW50aW1lRXJyb3IKK2RlZiBzZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKToKKyAgICB0cnk6CisgICAgICAgIF9zZXR0cmFjZV9hbmRfcmFpc2UodHJhY2VmdW5jKQorICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIGV4YzoKKyAgICAgICAgcGFzcworCitzZXR0cmFjZV9hbmRfcmFpc2UuZXZlbnRzID0gWygyLCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KKworIyBpbXBsaWNpdCByZXR1cm4gZXhhbXBsZQorIyBUaGlzIHRlc3QgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBvZiB0aGUgZWxzZTogcGFzcworIyBwYXJ0IG9mIHRoZSBjb2RlLiAgVGhlIGNvZGUgZ2VuZXJhdGUgZm9yIHRoZSB0cnVlCisjIHBhcnQgb2YgdGhlIGlmIGNvbnRhaW5zIGEganVtcCBwYXN0IHRoZSBlbHNlIGJyYW5jaC4KKyMgVGhlIGNvbXBpbGVyIHRoZW4gZ2VuZXJhdGVzIGFuIGltcGxpY2l0ICJyZXR1cm4gTm9uZSIKKyMgSW50ZXJuYWxseSwgdGhlIGNvbXBpbGVyIHZpc2l0cyB0aGUgcGFzcyBzdGF0ZW1lbnQKKyMgYW5kIHN0b3JlcyBpdHMgbGluZSBudW1iZXIgZm9yIHVzZSBvbiB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKyMgVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgdGhlIGltcGxpY2l0IHJldHVybiBOb25lLgorZGVmIGlyZXR1cm5fZXhhbXBsZSgpOgorICAgIGEgPSA1CisgICAgYiA9IDUKKyAgICBpZiBhID09IGI6CisgICAgICAgIGIgPSBhKzEKKyAgICBlbHNlOgorICAgICAgICBwYXNzCisKK2lyZXR1cm5fZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KKworIyBUaWdodCBsb29wIHdpdGggd2hpbGUoMSkgZXhhbXBsZSAoU0YgIzc2NTYyNCkKK2RlZiB0aWdodGxvb3BfZXhhbXBsZSgpOgorICAgIGl0ZW1zID0gcmFuZ2UoMCwgMykKKyAgICB0cnk6CisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBiID0gaXRlbXNbaV07IGkrPTEKKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgcGFzcworCit0aWdodGxvb3BfZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNywgJ3JldHVybicpXQorCitkZWYgdGlnaHRlcmxvb3BfZXhhbXBsZSgpOgorICAgIGl0ZW1zID0gcmFuZ2UoMSwgNCkKKyAgICB0cnk6CisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIDE6IGkgPSBpdGVtc1tpXQorICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICBwYXNzCisKK3RpZ2h0ZXJsb29wX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdyZXR1cm4nKV0KKworZGVmIGdlbmVyYXRvcl9mdW5jdGlvbigpOgorICAgIHRyeToKKyAgICAgICAgeWllbGQgVHJ1ZQorICAgICAgICAiY29udGludWVkIgorICAgIGZpbmFsbHk6CisgICAgICAgICJmaW5hbGx5IgorZGVmIGdlbmVyYXRvcl9leGFtcGxlKCk6CisgICAgIyBhbnkoKSB3aWxsIGxlYXZlIHRoZSBnZW5lcmF0b3IgYmVmb3JlIGl0cyBlbmQKKyAgICB4ID0gYW55KGdlbmVyYXRvcl9mdW5jdGlvbigpKQorCisgICAgIyB0aGUgZm9sbG93aW5nIGxpbmVzIHdlcmUgbm90IHRyYWNlZAorICAgIGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAgICAgeSA9IHgKKworZ2VuZXJhdG9yX2V4YW1wbGUuZXZlbnRzID0gKFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNiwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC01LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNCwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgJ3JldHVybicpXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNiwgJ2xpbmUnKV0gKiAxMCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyg1LCAnbGluZScpLCAoNSwgJ3JldHVybicpXSkKKworCitjbGFzcyBUcmFjZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCisgICAgZGVmIHRyYWNlKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKChmcmFtZS5mX2xpbmVubywgZXZlbnQpKQorICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorICAgIGRlZiB0cmFjZVdpdGhHZW5leHAoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICAobyBmb3IgbyBpbiBbMV0pCisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgoZnJhbWUuZl9saW5lbm8sIGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKKworY2xhc3MgVHJhY2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIERpc2FibGUgZ2MgY29sbGVjdGlvbiB3aGVuIHRyYWNpbmcsIG90aGVyd2lzZSB0aGUKKyAgICAjIGRlYWxsb2NhdG9ycyBtYXkgYmUgdHJhY2VkIGFzIHdlbGwuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnVzaW5nX2djID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNpbmdfZ2M6CisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgZGVmIGNvbXBhcmVfZXZlbnRzKHNlbGYsIGxpbmVfb2Zmc2V0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGV2ZW50cyA9IFsobCAtIGxpbmVfb2Zmc2V0LCBlKSBmb3IgKGwsIGUpIGluIGV2ZW50c10KKyAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkX2V2ZW50czoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb246XG4iICsKKyAgICAgICAgICAgICAgICAiXG4iLmpvaW4oZGlmZmxpYi5uZGlmZihbc3RyKHgpIGZvciB4IGluIGV4cGVjdGVkX2V2ZW50c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cih4KSBmb3IgeCBpbiBldmVudHNdKSkpCisKKyAgICBkZWYgcnVuX2FuZF9jb21wYXJlKHNlbGYsIGZ1bmMsIGV2ZW50cyk6CisgICAgICAgIHRyYWNlciA9IFRyYWNlcigpCisgICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2UpCisgICAgICAgIGZ1bmMoKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBldmVudHMpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZnVuYyk6CisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKGZ1bmMsIGZ1bmMuZXZlbnRzKQorCisgICAgZGVmIHJ1bl90ZXN0MihzZWxmLCBmdW5jKToKKyAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKKyAgICAgICAgZnVuYyh0cmFjZXIudHJhY2UpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfZXZlbnRzKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlci5ldmVudHMsIGZ1bmMuZXZlbnRzKQorCisgICAgZGVmIHNldF9hbmRfcmV0cmlldmVfbm9uZShzZWxmKToKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIGFzc2VydCBzeXMuZ2V0dHJhY2UoKSBpcyBOb25lCisKKyAgICBkZWYgc2V0X2FuZF9yZXRyaWV2ZV9mdW5jKHNlbGYpOgorICAgICAgICBkZWYgZm4oKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHN5cy5zZXR0cmFjZShmbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IHN5cy5nZXR0cmFjZSgpIGlzIGZuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKworICAgIGRlZiB0ZXN0XzAxX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGJhc2ljKQorICAgIGRlZiB0ZXN0XzAyX2FyaWdvKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGFyaWdvX2V4YW1wbGUpCisgICAgZGVmIHRlc3RfMDNfb25lX2luc3RyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG9uZV9pbnN0cl9saW5lKQorICAgIGRlZiB0ZXN0XzA0X25vX3BvcF9ibG9ja3Moc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fcG9wX2Jsb2NrcykKKyAgICBkZWYgdGVzdF8wNV9ub19wb3BfdG9wcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19wb3BfdG9wcykKKyAgICBkZWYgdGVzdF8wNl9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGNhbGwpCisgICAgZGVmIHRlc3RfMDdfcmFpc2Uoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QodGVzdF9yYWlzZSkKKworICAgIGRlZiB0ZXN0XzA4X3NldHRyYWNlX2FuZF9yZXR1cm4oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QyKHNldHRyYWNlX2FuZF9yZXR1cm4pCisgICAgZGVmIHRlc3RfMDlfc2V0dHJhY2VfYW5kX3JhaXNlKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0MihzZXR0cmFjZV9hbmRfcmFpc2UpCisgICAgZGVmIHRlc3RfMTBfaXJldHVybihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChpcmV0dXJuX2V4YW1wbGUpCisgICAgZGVmIHRlc3RfMTFfdGlnaHRsb29wKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KHRpZ2h0bG9vcF9leGFtcGxlKQorICAgIGRlZiB0ZXN0XzEyX3RpZ2h0ZXJsb29wKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KHRpZ2h0ZXJsb29wX2V4YW1wbGUpCisKKyAgICBkZWYgdGVzdF8xM19nZW5leHAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoZ2VuZXJhdG9yX2V4YW1wbGUpCisgICAgICAgICMgaXNzdWUxMjY1OiBpZiB0aGUgdHJhY2UgZnVuY3Rpb24gY29udGFpbnMgYSBnZW5lcmF0b3IsCisgICAgICAgICMgYW5kIGlmIHRoZSB0cmFjZWQgZnVuY3Rpb24gY29udGFpbnMgYW5vdGhlciBnZW5lcmF0b3IKKyAgICAgICAgIyB0aGF0IGlzIG5vdCBjb21wbGV0ZWx5IGV4aGF1c3RlZCwgdGhlIHRyYWNlIHN0b3BwZWQuCisgICAgICAgICMgV29yc2U6IHRoZSAnZmluYWxseScgY2xhdXNlIHdhcyBub3QgaW52b2tlZC4KKyAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZVdpdGhHZW5leHApCisgICAgICAgIGdlbmVyYXRvcl9leGFtcGxlKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZ2VuZXJhdG9yX2V4YW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZ2VuZXJhdG9yX2V4YW1wbGUuZXZlbnRzKQorCisgICAgZGVmIHRlc3RfMTRfb25saW5lcl9pZihzZWxmKToKKyAgICAgICAgZGVmIG9ubGluZXJzKCk6CisgICAgICAgICAgICBpZiBUcnVlOiBGYWxzZQorICAgICAgICAgICAgZWxzZTogVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICBvbmxpbmVycywKKyAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMywgJ3JldHVybicpXSkKKworICAgIGRlZiB0ZXN0XzE1X2xvb3BzKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTc1MDA3NjogIndoaWxlIiBleHByZXNzaW9uIGlzIHNraXBwZWQgYnkgZGVidWdnZXIKKyAgICAgICAgZGVmIGZvcl9leGFtcGxlKCk6CisgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAorICAgICAgICAgICAgZm9yX2V4YW1wbGUsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgKDEsICdsaW5lJyksCisgICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0pCisKKyAgICAgICAgZGVmIHdoaWxlX2V4YW1wbGUoKToKKyAgICAgICAgICAgICMgV2hpbGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHJhY2VkIG9uIGV2ZXJ5IGxvb3AKKyAgICAgICAgICAgIHggPSAyCisgICAgICAgICAgICB3aGlsZSB4ID4gMDoKKyAgICAgICAgICAgICAgICB4IC09IDEKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICB3aGlsZV9leGFtcGxlLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAncmV0dXJuJyldKQorCisgICAgZGVmIHRlc3RfMTZfYmxhbmtfbGluZXMoc2VsZik6CisgICAgICAgIGV4ZWMoImRlZiBmKCk6XG4iICsgIlxuIiAqIDI1NiArICIgICAgcGFzcyIpCisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAorICAgICAgICAgICAgZiwKKyAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAoMjU3LCAnbGluZScpLAorICAgICAgICAgICAgICgyNTcsICdyZXR1cm4nKV0pCisKKworY2xhc3MgUmFpc2luZ1RyYWNlRnVuY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICAiIiJBIHRyYWNlIGZ1bmN0aW9uIHRoYXQgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiByZXNwb25zZSB0byBhCisgICAgICAgIHNwZWNpZmljIHRyYWNlIGV2ZW50LiIiIgorICAgICAgICBpZiBldmVudCA9PSBzZWxmLnJhaXNlT25FdmVudDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IgIyBqdXN0IHNvbWV0aGluZyB0aGF0IGlzbid0IFJ1bnRpbWVFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKKworICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAiIiJUaGUgZnVuY3Rpb24gdG8gdHJhY2U7IHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhhdCdzIHRoZSBjYXNlCisgICAgICAgIHdlJ3JlIHRlc3RpbmcsIHNvIHRoYXQgdGhlICdleGNlcHRpb24nIHRyYWNlIGV2ZW50IGZpcmVzLiIiIgorICAgICAgICBpZiBzZWxmLnJhaXNlT25FdmVudCA9PSAnZXhjZXB0aW9uJzoKKyAgICAgICAgICAgIHggPSAwCisgICAgICAgICAgICB5ID0gMSAvLyB4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgZGVmIHJ1bl90ZXN0X2Zvcl9ldmVudChzZWxmLCBldmVudCk6CisgICAgICAgICIiIlRlc3RzIHRoYXQgYW4gZXhjZXB0aW9uIHJhaXNlZCBpbiByZXNwb25zZSB0byB0aGUgZ2l2ZW4gZXZlbnQgaXMKKyAgICAgICAgaGFuZGxlZCBPSy4iIiIKKyAgICAgICAgc2VsZi5yYWlzZU9uRXZlbnQgPSBldmVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkgKyAxKToKKyAgICAgICAgICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi50cmFjZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZigpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgdGhyb3duISIpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY3Vyc2lvbiBjb3VudGVyIG5vdCByZXNldCIpCisKKyAgICAjIFRlc3QgdGhlIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGVhY2gga2luZCBvZiB0cmFjZSBldmVudC4KKyAgICBkZWYgdGVzdF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnY2FsbCcpCisgICAgZGVmIHRlc3RfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ2xpbmUnKQorICAgIGRlZiB0ZXN0X3JldHVybihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ3JldHVybicpCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnZXhjZXB0aW9uJykKKworICAgIGRlZiB0ZXN0X3RyYXNoX3N0YWNrKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgcHJpbnQgaSAgIyBsaW5lIHRyYWNpbmcgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gYXQgdGhpcyBsaW5lCisKKyAgICAgICAgZGVmIGcoZnJhbWUsIHdoeSwgZXh0cmEpOgorICAgICAgICAgICAgaWYgKHdoeSA9PSAnbGluZScgYW5kCisgICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPT0gZi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAyKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJpIGFtIGNyYXNoaW5nIgorICAgICAgICAgICAgcmV0dXJuIGcKKworICAgICAgICBzeXMuc2V0dHJhY2UoZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZigpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIHRoZSB0ZXN0IGlzIHJlYWxseSB0aGF0IHRoaXMgZG9lc24ndCBzZWdmYXVsdDoKKyAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcHJvcGFnYXRlZCIpCisKKworIyAnSnVtcCcgdGVzdHM6IGFzc2lnbmluZyB0byBmcmFtZS5mX2xpbmVubyB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbgorIyBtb3ZlcyB0aGUgZXhlY3V0aW9uIHBvc2l0aW9uIC0gaXQncyBob3cgZGVidWdnZXJzIGltcGxlbWVudCBhIEp1bXAKKyMgY29tbWFuZCAoYWthLiAiU2V0IG5leHQgc3RhdGVtZW50IikuCisKK2NsYXNzIEp1bXBUcmFjZXI6CisgICAgIiIiRGVmaW5lcyBhIHRyYWNlIGZ1bmN0aW9uIHRoYXQganVtcHMgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciwKKyAgICB3aXRoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpbmVzIG9mIHRoZSBqdW1wIGJlaW5nIGRlZmluZWQgYnkKKyAgICB0aGUgJ2p1bXAnIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbiB1bmRlciB0ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uKToKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuanVtcEZyb20gPSBmdW5jdGlvbi5qdW1wWzBdCisgICAgICAgIHNlbGYuanVtcFRvID0gZnVuY3Rpb24uanVtcFsxXQorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorCisgICAgZGVmIHRyYWNlKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgaWYgbm90IHNlbGYuZG9uZSBhbmQgZnJhbWUuZl9jb2RlID09IHNlbGYuZnVuY3Rpb24uZnVuY19jb2RlOgorICAgICAgICAgICAgZmlyc3RMaW5lID0gZnJhbWUuZl9jb2RlLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBpZiBldmVudCA9PSAnbGluZScgYW5kIGZyYW1lLmZfbGluZW5vID09IGZpcnN0TGluZSArIHNlbGYuanVtcEZyb206CisgICAgICAgICAgICAgICAgIyBDb3BlIHdpdGggbm9uLWludGVnZXIgc2VsZi5qdW1wVG8gKGJlY2F1c2Ugb2YKKyAgICAgICAgICAgICAgICAjIG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzIGJlbG93KS4KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLmZfbGluZW5vID0gZmlyc3RMaW5lICsgc2VsZi5qdW1wVG8KKyAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9IHNlbGYuanVtcFRvCisgICAgICAgICAgICAgICAgc2VsZi5kb25lID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorCisjIFRoZSBmaXJzdCBzZXQgb2YgJ2p1bXAnIHRlc3RzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIGFsbG93ZWQ6CisKK2RlZiBqdW1wX3NpbXBsZV9mb3J3YXJkcyhvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgb3V0cHV0LmFwcGVuZCgzKQorCitqdW1wX3NpbXBsZV9mb3J3YXJkcy5qdW1wID0gKDEsIDMpCitqdW1wX3NpbXBsZV9mb3J3YXJkcy5vdXRwdXQgPSBbM10KKworZGVmIGp1bXBfc2ltcGxlX2JhY2t3YXJkcyhvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICBvdXRwdXQuYXBwZW5kKDIpCisKK2p1bXBfc2ltcGxlX2JhY2t3YXJkcy5qdW1wID0gKDIsIDEpCitqdW1wX3NpbXBsZV9iYWNrd2FyZHMub3V0cHV0ID0gWzEsIDEsIDJdCisKK2RlZiBqdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcyhvdXRwdXQpOgorICAgIGZvciBpIGluIDEsIDI6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICAgICAgZm9yIGogaW4gWzNdOiAgIyBBbHNvIHRlc3RzIGp1bXBpbmcgb3ZlciBhIGJsb2NrCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCisgICAgb3V0cHV0LmFwcGVuZCg1KQorCitqdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcy5qdW1wID0gKDMsIDUpCitqdW1wX291dF9vZl9ibG9ja19mb3J3YXJkcy5vdXRwdXQgPSBbMiwgNV0KKworZGVmIGp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcyhvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICBmb3IgaSBpbiBbMV06CisgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICAgICAgZm9yIGogaW4gWzJdOiAgIyBBbHNvIHRlc3RzIGp1bXBpbmcgb3ZlciBhIGJsb2NrCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDUpCisgICAgICAgIG91dHB1dC5hcHBlbmQoNikKKyAgICBvdXRwdXQuYXBwZW5kKDcpCisKK2p1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcy5qdW1wID0gKDYsIDEpCitqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMub3V0cHV0ID0gWzEsIDMsIDUsIDEsIDMsIDUsIDYsIDddCisKK2RlZiBqdW1wX3RvX2NvZGVsZXNzX2xpbmUob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgIyBKdW1waW5nIHRvIHRoaXMgbGluZSBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBvbmUuCisgICAgb3V0cHV0LmFwcGVuZCgzKQorCitqdW1wX3RvX2NvZGVsZXNzX2xpbmUuanVtcCA9ICgxLCAyKQoranVtcF90b19jb2RlbGVzc19saW5lLm91dHB1dCA9IFszXQorCitkZWYganVtcF90b19zYW1lX2xpbmUob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIG91dHB1dC5hcHBlbmQoMykKKworanVtcF90b19zYW1lX2xpbmUuanVtcCA9ICgyLCAyKQoranVtcF90b19zYW1lX2xpbmUub3V0cHV0ID0gWzEsIDIsIDNdCisKKyMgVGVzdHMganVtcGluZyB3aXRoaW4gYSBmaW5hbGx5IGJsb2NrLCBhbmQgb3ZlciBvbmUuCitkZWYganVtcF9pbl9uZXN0ZWRfZmluYWxseShvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGZpbmFsbHk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg4KQorICAgICAgICBvdXRwdXQuYXBwZW5kKDkpCisKK2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkuanVtcCA9ICg0LCA5KQoranVtcF9pbl9uZXN0ZWRfZmluYWxseS5vdXRwdXQgPSBbMiwgOV0KKworIyBUaGUgc2Vjb25kIHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IGFsbG93ZWQ6CisKK2RlZiBub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdhZnRlcicgaW4gc3RyKGUpKQorCitub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMuanVtcCA9ICgzLCA2KQorbm9fanVtcF90b29fZmFyX2ZvcndhcmRzLm91dHB1dCA9IFsyLCBUcnVlXQorCitkZWYgbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcyhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2JlZm9yZScgaW4gc3RyKGUpKQorCitub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzLmp1bXAgPSAoMywgLTEpCitub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzLm91dHB1dCA9IFsyLCBUcnVlXQorCisjIFRlc3QgZWFjaCBraW5kIG9mICdleGNlcHQnIGxpbmUuCitkZWYgbm9fanVtcF90b19leGNlcHRfMShvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGV4Y2VwdDoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF8xLmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzEub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX3RvX2V4Y2VwdF8yKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKKworbm9fanVtcF90b19leGNlcHRfMi5qdW1wID0gKDIsIDMpCitub19qdW1wX3RvX2V4Y2VwdF8yLm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF90b19leGNlcHRfMyhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKKworbm9fanVtcF90b19leGNlcHRfMy5qdW1wID0gKDIsIDMpCitub19qdW1wX3RvX2V4Y2VwdF8zLm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF90b19leGNlcHRfNChvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgUnVudGltZUVycm9yKSwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fZXhjZXB0XzQuanVtcCA9ICgyLCAzKQorbm9fanVtcF90b19leGNlcHRfNC5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jayhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBmb3IgaSBpbiAxLCAyOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRvJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDIsIDQpCitub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2sub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBmb3IgaSBpbiAxLCAyOgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludG8nIGluIHN0cihlKSkKKworbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jay5qdW1wID0gKDQsIDMpCitub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrLm91dHB1dCA9IFszLCAzLCBUcnVlXQorCitkZWYgbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2sob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICAgICAgICAgIHggPSAxCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ZpbmFsbHknIGluIHN0cihlKSkKKworbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2suanVtcCA9ICg0LCA2KQorbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2sub3V0cHV0ID0gWzMsIDYsIFRydWVdICAjIFRoZSAnZmluYWxseScgc3RpbGwgcnVucworCitkZWYgbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jayhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg1KQorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdmaW5hbGx5JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2suanVtcCA9ICg1LCAxKQorbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jay5vdXRwdXQgPSBbMywgVHJ1ZV0KKworIyBUaGlzIHZlcmlmaWVzIHRoZSBsaW5lLW51bWJlcnMtbXVzdC1iZS1pbnRlZ2VycyBydWxlLgorZGVmIG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludGVnZXInIGluIHN0cihlKSkKKworbm9fanVtcF90b19ub25faW50ZWdlcnMuanVtcCA9ICgyLCAiU3BhbSIpCitub19qdW1wX3RvX25vbl9pbnRlZ2Vycy5vdXRwdXQgPSBbVHJ1ZV0KKworIyBUaGlzIHZlcmlmaWVzIHRoYXQgeW91IGNhbid0IHNldCBmX2xpbmVubyB2aWEgX2dldGZyYW1lIG9yIHNpbWlsYXIKKyMgdHJpY2tlcnkuCitkZWYgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCk6CisgICAgdHJ5OgorICAgICAgICBwcmV2aW91c19mcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2sKKyAgICAgICAgcHJldmlvdXNfZnJhbWUuZl9saW5lbm8gPSBwcmV2aW91c19mcmFtZS5mX2xpbmVubworICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAjIFRoaXMgaXMgdGhlIGV4Y2VwdGlvbiB3ZSB3YW50ZWQ7IG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICAjIHRhbGtzIGFib3V0IHRyYWNlIGZ1bmN0aW9ucy4KKyAgICAgICAgaWYgJ3RyYWNlJyBub3QgaW4gc3RyKGUpOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICAjIFNvbWV0aGluZydzIHdyb25nIC0gdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiB3YXNuJ3QgcmFpc2VkLgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJUcmFjZS1mdW5jdGlvbi1sZXNzIGp1bXAgZmFpbGVkIHRvIGZhaWwiCisKKworY2xhc3MgSnVtcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY29tcGFyZV9qdW1wX291dHB1dChzZWxmLCBleHBlY3RlZCwgcmVjZWl2ZWQpOgorICAgICAgICBpZiByZWNlaXZlZCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCggIk91dHB1dHMgZG9uJ3QgbWF0Y2g6XG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOiAiICsgcmVwcihleHBlY3RlZCkgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkOiAiICsgcmVwcihyZWNlaXZlZCkpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyYWNlciA9IEp1bXBUcmFjZXIoZnVuYykKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKKyAgICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgZnVuYyhvdXRwdXQpCisgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLmNvbXBhcmVfanVtcF9vdXRwdXQoZnVuYy5vdXRwdXQsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0XzAxX2p1bXBfc2ltcGxlX2ZvcndhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfc2ltcGxlX2ZvcndhcmRzKQorICAgIGRlZiB0ZXN0XzAyX2p1bXBfc2ltcGxlX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3NpbXBsZV9iYWNrd2FyZHMpCisgICAgZGVmIHRlc3RfMDNfanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMpCisgICAgZGVmIHRlc3RfMDRfanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcykKKyAgICBkZWYgdGVzdF8wNV9qdW1wX3RvX2NvZGVsZXNzX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF90b19jb2RlbGVzc19saW5lKQorICAgIGRlZiB0ZXN0XzA2X2p1bXBfdG9fc2FtZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fc2FtZV9saW5lKQorICAgIGRlZiB0ZXN0XzA3X2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbl9uZXN0ZWRfZmluYWxseSkKKyAgICBkZWYgdGVzdF8wOF9ub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2ZvcndhcmRzKQorICAgIGRlZiB0ZXN0XzA5X25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b29fZmFyX2JhY2t3YXJkcykKKyAgICBkZWYgdGVzdF8xMF9ub19qdW1wX3RvX2V4Y2VwdF8xKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzEpCisgICAgZGVmIHRlc3RfMTFfbm9fanVtcF90b19leGNlcHRfMihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8yKQorICAgIGRlZiB0ZXN0XzEyX25vX2p1bXBfdG9fZXhjZXB0XzMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMykKKyAgICBkZWYgdGVzdF8xM19ub19qdW1wX3RvX2V4Y2VwdF80KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzQpCisgICAgZGVmIHRlc3RfMTRfbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jaykKKyAgICBkZWYgdGVzdF8xNV9ub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2spCisgICAgZGVmIHRlc3RfMTZfbm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2soc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9pbnRvX2ZpbmFsbHlfYmxvY2spCisgICAgZGVmIHRlc3RfMTdfbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKQorICAgIGRlZiB0ZXN0XzE4X25vX2p1bXBfdG9fbm9uX2ludGVnZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fbm9uX2ludGVnZXJzKQorICAgIGRlZiB0ZXN0XzE5X25vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgbm9fanVtcF93aXRob3V0X3RyYWNlX2Z1bmN0aW9uKCkKKworICAgIGRlZiB0ZXN0XzIwX2xhcmdlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYygiIiJkZWYgZihvdXRwdXQpOiAgICAgICAgIyBsaW5lIDAKKyAgICAgICAgICAgIHggPSAwICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEKKyAgICAgICAgICAgIHkgPSAxICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDIKKyAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDMKKyAgICAgICAgICAgICVzICAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lcyA0LTEwMDQKKyAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDUKKyAgICAgICAgICAgIHggKz0gMSAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDYKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoeCkgICAgICAgICAgIyBsaW5lIDEwMDcKKyAgICAgICAgICAgIHJldHVybiIiIiAlICgnXG4nICogMTAwMCwpLCBkKQorICAgICAgICBmID0gZFsnZiddCisKKyAgICAgICAgZi5qdW1wID0gKDIsIDEwMDcpCisgICAgICAgIGYub3V0cHV0ID0gWzBdCisgICAgICAgIHNlbGYucnVuX3Rlc3QoZikKKworICAgIGRlZiB0ZXN0X2p1bXBfdG9fZmlyc3RsaW5lbm8oc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyB0aGF0IFBEQiBjYW4ganVtcCBiYWNrIHRvIHRoZSBmaXJzdCBsaW5lIGluIGEKKyAgICAgICAgIyBmaWxlLiAgU2VlIGlzc3VlICMxNjg5NDU4LiAgSXQgY2FuIG9ubHkgYmUgdHJpZ2dlcmVkIGluIGEKKyAgICAgICAgIyBmdW5jdGlvbiBjYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIG9uIGEgc2luZ2xlIGxpbmUuCisgICAgICAgIGNvZGUgPSBjb21waWxlKCIiIgorIyBDb21tZW50cyBkb24ndCBjb3VudC4KK291dHB1dC5hcHBlbmQoMikgICMgZmlyc3RsaW5lbm8gaXMgaGVyZS4KK291dHB1dC5hcHBlbmQoMykKK291dHB1dC5hcHBlbmQoNCkKKyIiIiwgIjxmYWtlIG1vZHVsZT4iLCAiZXhlYyIpCisgICAgICAgIGNsYXNzIGZha2VfZnVuY3Rpb246CisgICAgICAgICAgICBmdW5jX2NvZGUgPSBjb2RlCisgICAgICAgICAgICBqdW1wID0gKDIsIDApCisgICAgICAgIHRyYWNlciA9IEp1bXBUcmFjZXIoZmFrZV9mdW5jdGlvbikKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKKyAgICAgICAgbmFtZXNwYWNlID0geyJvdXRwdXQiOiBbXX0KKyAgICAgICAgZXhlYyBjb2RlIGluIG5hbWVzcGFjZQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2p1bXBfb3V0cHV0KFsyLCAzLCAyLCAzLCA0XSwgbmFtZXNwYWNlWyJvdXRwdXQiXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVHJhY2VUZXN0Q2FzZSwKKyAgICAgICAgUmFpc2luZ1RyYWNlRnVuY1Rlc3RDYXNlLAorICAgICAgICBKdW1wVGVzdENhc2UKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyZWIyZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0wLDAgKzEsMjcyIEBACisiIiJUZXN0cyBmb3IgJ3NpdGUnLgorCitUZXN0cyBhc3N1bWUgdGhlIGluaXRpYWwgcGF0aHMgaW4gc3lzLnBhdGggb25jZSB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZ3VuCitleGVjdXRpbmcgaGF2ZSBub3QgYmVlbiByZW1vdmVkLgorCisiIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBjb3B5IGltcG9ydCBjb3B5LCBkZWVwY29weQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBnZXRfYXR0cmlidXRlCisKK2ltcG9ydCBzeXNjb25maWcKK2Zyb20gc3lzY29uZmlnIGltcG9ydCAoZ2V0X3BhdGhzLCBnZXRfcGxhdGZvcm0sIGdldF9jb25maWdfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3BhdGgsIGdldF9wYXRoX25hbWVzLCBfSU5TVEFMTF9TQ0hFTUVTLAorICAgICAgICAgICAgICAgICAgICAgICBfZ2V0X2RlZmF1bHRfc2NoZW1lLCBfZXhwYW5kX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGdldF9zY2hlbWVfbmFtZXMsIGdldF9jb25maWdfdmFyKQorCitjbGFzcyBUZXN0U3lzQ29uZmlnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiTWFrZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKKyAgICAgICAgc3VwZXIoVGVzdFN5c0NvbmZpZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKKyAgICAgICAgIyBwYXRjaGluZyBvcy51bmFtZQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAndW5hbWUnKToKKyAgICAgICAgICAgIHNlbGYudW5hbWUgPSBvcy51bmFtZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBvcy51bmFtZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnVuYW1lID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBOb25lCisgICAgICAgIG9zLnVuYW1lID0gc2VsZi5fZ2V0X3VuYW1lCisgICAgICAgICMgc2F2aW5nIHRoZSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLm5hbWUgPSBvcy5uYW1lCisgICAgICAgIHNlbGYucGxhdGZvcm0gPSBzeXMucGxhdGZvcm0KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc3lzLnZlcnNpb24KKyAgICAgICAgc2VsZi5zZXAgPSBvcy5zZXAKKyAgICAgICAgc2VsZi5qb2luID0gb3MucGF0aC5qb2luCisgICAgICAgIHNlbGYuaXNhYnMgPSBvcy5wYXRoLmlzYWJzCisgICAgICAgIHNlbGYuc3BsaXRkcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZQorICAgICAgICBzZWxmLl9jb25maWdfdmFycyA9IGNvcHkoc3lzY29uZmlnLl9DT05GSUdfVkFSUykKKyAgICAgICAgc2VsZi5vbGRfZW52aXJvbiA9IGRlZXBjb3B5KG9zLmVudmlyb24pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIGlmIHNlbGYubWFrZWZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5tYWtlZmlsZSkKKyAgICAgICAgc2VsZi5fY2xlYW51cF90ZXN0Zm4oKQorICAgICAgICBpZiBzZWxmLnVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MudW5hbWUgPSBzZWxmLnVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgb3MudW5hbWUKKyAgICAgICAgb3MubmFtZSA9IHNlbGYubmFtZQorICAgICAgICBzeXMucGxhdGZvcm0gPSBzZWxmLnBsYXRmb3JtCisgICAgICAgIHN5cy52ZXJzaW9uID0gc2VsZi52ZXJzaW9uCisgICAgICAgIG9zLnNlcCA9IHNlbGYuc2VwCisgICAgICAgIG9zLnBhdGguam9pbiA9IHNlbGYuam9pbgorICAgICAgICBvcy5wYXRoLmlzYWJzID0gc2VsZi5pc2FicworICAgICAgICBvcy5wYXRoLnNwbGl0ZHJpdmUgPSBzZWxmLnNwbGl0ZHJpdmUKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IGNvcHkoc2VsZi5fY29uZmlnX3ZhcnMpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYub2xkX2Vudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KGtleSkgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKworICAgICAgICBmb3Iga2V5IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLm9sZF9lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgICAgICBzdXBlcihUZXN0U3lzQ29uZmlnLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgX3NldF91bmFtZShzZWxmLCB1bmFtZSk6CisgICAgICAgIHNlbGYuX3VuYW1lID0gdW5hbWUKKworICAgIGRlZiBfZ2V0X3VuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdW5hbWUKKworICAgIGRlZiBfY2xlYW51cF90ZXN0Zm4oc2VsZik6CisgICAgICAgIHBhdGggPSBURVNURk4KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhdGhfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BhdGhfbmFtZXMoKSwgc3lzY29uZmlnLl9TQ0hFTUVfS0VZUykKKworICAgIGRlZiB0ZXN0X2dldF9wYXRocyhzZWxmKToKKyAgICAgICAgc2NoZW1lID0gZ2V0X3BhdGhzKCkKKyAgICAgICAgZGVmYXVsdF9zY2hlbWUgPSBfZ2V0X2RlZmF1bHRfc2NoZW1lKCkKKyAgICAgICAgd2FudGVkID0gX2V4cGFuZF92YXJzKGRlZmF1bHRfc2NoZW1lLCBOb25lKQorICAgICAgICB3YW50ZWQgPSB3YW50ZWQuaXRlbXMoKQorICAgICAgICB3YW50ZWQuc29ydCgpCisgICAgICAgIHNjaGVtZSA9IHNjaGVtZS5pdGVtcygpCisgICAgICAgIHNjaGVtZS5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2hlbWUsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2dldF9wYXRoKHNlbGYpOgorICAgICAgICAjIHh4eCBtYWtlIHJlYWwgdGVzdHMgaGVyZQorICAgICAgICBmb3Igc2NoZW1lIGluIF9JTlNUQUxMX1NDSEVNRVM6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV06CisgICAgICAgICAgICAgICAgcmVzID0gZ2V0X3BhdGgobmFtZSwgc2NoZW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgorICAgICAgICBjdmFycyA9IGdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjdmFycywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN2YXJzKQorCisgICAgZGVmIHRlc3RfZ2V0X3BsYXRmb3JtKHNlbGYpOgorICAgICAgICAjIHdpbmRvd3MgWFAsIDMyYml0cworICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEludGVsKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4zMicpCisKKyAgICAgICAgIyB3aW5kb3dzIFhQLCBhbWQ2NAorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEFtZDY0KV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4tYW1kNjQnKQorCisgICAgICAgICMgd2luZG93cyBYUCwgaXRhbml1bQorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEl0YW5pdW0pXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICd3aW4zMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ3dpbi1pYTY0JykKKworICAgICAgICAjIG1hY2Jvb2sKKyAgICAgICAgb3MubmFtZSA9ICdwb3NpeCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNSAocjI1OjUxOTE4LCBTZXAgMTkgMjAwNiwgMDg6NDk6MTMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1xuW0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM0MSldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ2RhcndpbicKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnRGFyd2luJywgJ21hY3ppYWRlJywgJzguMTEuMScsCisgICAgICAgICAgICAgICAgICAgKCdEYXJ3aW4gS2VybmVsIFZlcnNpb24gOC4xMS4xOiAnCisgICAgICAgICAgICAgICAgICAgICdXZWQgT2N0IDEwIDE4OjIzOjI4IFBEVCAyMDA3OyAnCisgICAgICAgICAgICAgICAgICAgICdyb290OnhudS03OTIuMjUuMjB+MS9SRUxFQVNFX0kzODYnKSwgJ1Bvd2VyUEMnKSkKKyAgICAgICAgb3MuZW52aXJvblsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1ETkRFQlVHIC1nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJykKKworICAgICAgICBtYXhpbnQgPSBzeXMubWF4aW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSAyMTQ3NDgzNjQ3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtcHBjJykKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtcHBjNjQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1heGludCA9IG1heGludAorCisKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnRGFyd2luJywgJ21hY3ppYWRlJywgJzguMTEuMScsCisgICAgICAgICAgICAgICAgICAgKCdEYXJ3aW4gS2VybmVsIFZlcnNpb24gOC4xMS4xOiAnCisgICAgICAgICAgICAgICAgICAgICdXZWQgT2N0IDEwIDE4OjIzOjI4IFBEVCAyMDA3OyAnCisgICAgICAgICAgICAgICAgICAgICdyb290OnhudS03OTIuMjUuMjB+MS9SRUxFQVNFX0kzODYnKSwgJ2kzODYnKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjMnCisgICAgICAgIG9zLmVudmlyb25bJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjMnCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctZm5vLXN0cmljdC1hbGlhc2luZyAtRE5ERUJVRyAtZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcycpCisKKyAgICAgICAgbWF4aW50ID0gc3lzLm1heGludAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gMjE0NzQ4MzY0NworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLWkzODYnKQorICAgICAgICAgICAgc3lzLm1heGludCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy14ODZfNjQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1heGludCA9IG1heGludAorCisgICAgICAgICMgbWFjYm9vayB3aXRoIGZhdCBiaW5hcmllcyAoZmF0LCB1bml2ZXJzYWwgb3IgZmF0NjQpCisgICAgICAgIG9zLmVudmlyb25bJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjQnCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdCcpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtaW50ZWwnKQorCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0MycpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC11bml2ZXJzYWwnKQorCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIHBwYzY0IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC1mYXQ2NCcpCisKKyAgICAgICAgZm9yIGFyY2ggaW4gKCdwcGMnLCAnaTM4NicsICd4ODZfNjQnLCAncHBjNjQnKToKKyAgICAgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggJXMgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMyclKGFyY2gsKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LSVzJyUoYXJjaCwpKQorCisgICAgICAgICMgbGludXggZGViaWFuIHNhcmdlCisgICAgICAgIG9zLm5hbWUgPSAncG9zaXgnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjMuNSAoIzEsIEp1bCAgNCAyMDA3LCAxNzoyODo1OSkgJworICAgICAgICAgICAgICAgICAgICAgICAnXG5bR0NDIDQuMS4yIDIwMDYxMTE1IChwcmVyZWxlYXNlKSAoRGViaWFuIDQuMS4xLTIxKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnbGludXgyJworICAgICAgICBzZWxmLl9zZXRfdW5hbWUoKCdMaW51eCcsICdhZ2xhZScsICcyLjYuMjEuMWRlZGlib3gtcjcnLAorICAgICAgICAgICAgICAgICAgICAnIzEgTW9uIEFwciAzMCAxNzoyNTozOCBDRVNUIDIwMDcnLCAnaTY4NicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdsaW51eC1pNjg2JykKKworICAgICAgICAjIFhYWCBtb3JlIHBsYXRmb3JtcyB0byB0ZXN0cyBoZXJlCisKKyAgICBkZWYgdGVzdF9nZXRfY29uZmlnX2hfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGNvbmZpZ19oID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjb25maWdfaCksIGNvbmZpZ19oKQorCisgICAgZGVmIHRlc3RfZ2V0X3NjaGVtZV9uYW1lcyhzZWxmKToKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zMicsICdvczJfaG9tZScsICdvc3hfZnJhbWV3b3JrX3VzZXInLAorICAgICAgICAgICAgICAgICAgJ3Bvc2l4X2hvbWUnLCAncG9zaXhfcHJlZml4JywgJ3Bvc2l4X3VzZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9zY2hlbWVfbmFtZXMoKSwgd2FudGVkKQorCisgICAgZGVmIHRlc3Rfc3ltbGluayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3ODgwCisgICAgICAgIHN5bWxpbmsgPSBnZXRfYXR0cmlidXRlKG9zLCAic3ltbGluayIpCisgICAgICAgIGRlZiBnZXQocHl0aG9uKToKKyAgICAgICAgICAgIGNtZCA9IFtweXRob24sICctYycsCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50IHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSddCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICByZXR1cm4gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJlYWwgPSBvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKQorICAgICAgICBsaW5rID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKKyAgICAgICAgc3ltbGluayhyZWFsLCBsaW5rKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldChyZWFsKSwgZ2V0KGxpbmspKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdW5saW5rKGxpbmspCisKKyAgICBkZWYgdGVzdF91c2VyX3NpbWlsYXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgODc1OSA6IG1ha2Ugc3VyZSB0aGUgcG9zaXggc2NoZW1lIGZvciB0aGUgdXNlcnMKKyAgICAgICAgIyBpcyBzaW1pbGFyIHRvIHRoZSBnbG9iYWwgcG9zaXhfcHJlZml4IG9uZQorICAgICAgICBiYXNlID0gZ2V0X2NvbmZpZ192YXIoJ2Jhc2UnKQorICAgICAgICB1c2VyID0gZ2V0X2NvbmZpZ192YXIoJ3VzZXJiYXNlJykKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdzdGRsaWInLCAncGxhdHN0ZGxpYicsICdwdXJlbGliJywgJ3BsYXRsaWInKToKKyAgICAgICAgICAgIGdsb2JhbF9wYXRoID0gZ2V0X3BhdGgobmFtZSwgJ3Bvc2l4X3ByZWZpeCcpCisgICAgICAgICAgICB1c2VyX3BhdGggPSBnZXRfcGF0aChuYW1lLCAncG9zaXhfdXNlcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXJfcGF0aCwgZ2xvYmFsX3BhdGgucmVwbGFjZShiYXNlLCB1c2VyKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0U3lzQ29uZmlnKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKaW5kZXggOTA5YjA4Yy4uY2RhNTI2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQpAQCAtMyw3ICszLDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgU3RyaW5nSU8KIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CiBpbXBvcnQgZXJybm8KQEAgLTU1LDcgKzU0LDcgQEAKICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCiAgICAgICAgIGZvYmogPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQogICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKChsZW4oZGF0YSksIG1kNXN1bShkYXRhKSkgPT0gKHRhcmluZm8uc2l6ZSwgbWQ1X3JlZ3R5cGUpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGxlbihkYXRhKSwgbWQ1c3VtKGRhdGEpKSA9PSAodGFyaW5mby5zaXplLCBtZDVfcmVndHlwZSksCiAgICAgICAgICAgICAgICAgInJlZ3VsYXIgZmlsZSBleHRyYWN0aW9uIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9maWxlb2JqX3JlYWRsaW5lcyhzZWxmKToKQEAgLTY2LDExICs2NSwxMSBAQAogCiAgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCiAgICAgICAgIGxpbmVzMiA9IGZvYmoyLnJlYWRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsaW5lczEgPT0gbGluZXMyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMxID09IGxpbmVzMiwKICAgICAgICAgICAgICAgICAiZmlsZW9iai5yZWFkbGluZXMoKSBmYWlsZWQiKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGxpbmVzMikgPT0gMTE0LAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGxpbmVzMikgPT0gMTE0LAogICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsaW5lczJbODNdID09IFwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMls4M10gPT0KICAgICAgICAgICAgICAgICAiSSB3aWxsIGdsYWRseSBhZG1pdCB0aGF0IFB5dGhvbiBpcyBub3QgdGhlIGZhc3Rlc3QgcnVubmluZyBzY3JpcHRpbmcgbGFuZ3VhZ2UuXG4iLAogICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCiAKQEAgLTgxLDcgKzgwLDcgQEAKICAgICAgICAgZm9iajIgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQogICAgICAgICBsaW5lczEgPSBmb2JqMS5yZWFkbGluZXMoKQogICAgICAgICBsaW5lczIgPSBbbGluZSBmb3IgbGluZSBpbiBmb2JqMl0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxpbmVzMSA9PSBsaW5lczIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lczEgPT0gbGluZXMyLAogICAgICAgICAgICAgICAgICAgICAgImZpbGVvYmouX19pdGVyX18oKSBmYWlsZWQiKQogCiAgICAgZGVmIHRlc3RfZmlsZW9ial9zZWVrKHNlbGYpOgpAQCAtOTUsNDggKzk0LDExNCBAQAogCiAgICAgICAgIHRleHQgPSBmb2JqLnJlYWQoKQogICAgICAgICBmb2JqLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDAgPT0gZm9iai50ZWxsKCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwID09IGZvYmoudGVsbCgpLAogICAgICAgICAgICAgICAgICAgICAgInNlZWsoKSB0byBmaWxlJ3Mgc3RhcnQgZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDIwNDgsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyMDQ4ID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMjA0OCA9PSBmb2JqLnRlbGwoKSwKICAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gYWJzb2x1dGUgcG9zaXRpb24gZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKC0xMDI0LCAxKQotICAgICAgICBzZWxmLmFzc2VydF8oMTAyNCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEwMjQgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIG5lZ2F0aXZlIHJlbGF0aXZlIHBvc2l0aW9uIGZhaWxlZCIpCiAgICAgICAgIGZvYmouc2VlaygxMDI0LCAxKQotICAgICAgICBzZWxmLmFzc2VydF8oMjA0OCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIwNDggPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIHBvc2l0aXZlIHJlbGF0aXZlIHBvc2l0aW9uIGZhaWxlZCIpCiAgICAgICAgIHMgPSBmb2JqLnJlYWQoMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzID09IGRhdGFbMjA0ODoyMDU4XSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gZGF0YVsyMDQ4OjIwNThdLAogICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSBhZnRlciBzZWVrIGZhaWxlZCIpCiAgICAgICAgIGZvYmouc2VlaygwLCAyKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby5zaXplID09IGZvYmoudGVsbCgpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby5zaXplID09IGZvYmoudGVsbCgpLAogICAgICAgICAgICAgICAgICAgICAgInNlZWsoKSB0byBmaWxlJ3MgZW5kIGZhaWxlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2JqLnJlYWQoKSA9PSAiIiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoucmVhZCgpID09ICIiLAogICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSBhdCBmaWxlJ3MgZW5kIGRpZCBub3QgcmV0dXJuIGVtcHR5IHN0cmluZyIpCiAgICAgICAgIGZvYmouc2VlaygtdGFyaW5mby5zaXplLCAyKQotICAgICAgICBzZWxmLmFzc2VydF8oMCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPT0gZm9iai50ZWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAicmVsYXRpdmUgc2VlaygpIHRvIGZpbGUncyBzdGFydCBmYWlsZWQiKQogICAgICAgICBmb2JqLnNlZWsoNTEyKQogICAgICAgICBzMSA9IGZvYmoucmVhZGxpbmVzKCkKICAgICAgICAgZm9iai5zZWVrKDUxMikKICAgICAgICAgczIgPSBmb2JqLnJlYWRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzMSA9PSBzMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxID09IHMyLAogICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lcygpIGFmdGVyIHNlZWsgZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZm9iai5yZWFkbGluZSgpKSA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmb2JqLnJlYWRsaW5lKCkpID09IGZvYmoudGVsbCgpLAogICAgICAgICAgICAgICAgICAgICAgInRlbGwoKSBhZnRlciByZWFkbGluZSgpIGZhaWxlZCIpCiAgICAgICAgIGZvYmouc2Vlayg1MTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZm9iai5yZWFkbGluZSgpKSArIDUxMiA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmb2JqLnJlYWRsaW5lKCkpICsgNTEyID09IGZvYmoudGVsbCgpLAogICAgICAgICAgICAgICAgICAgICAgInRlbGwoKSBhZnRlciBzZWVrKCkgYW5kIHJlYWRsaW5lKCkgZmFpbGVkIikKICAgICAgICAgZm9iai5zZWVrKDApCiAgICAgICAgIGxpbmUgPSBmb2JqLnJlYWRsaW5lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZvYmoucmVhZCgpID09IGRhdGFbbGVuKGxpbmUpOl0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb2JqLnJlYWQoKSA9PSBkYXRhW2xlbihsaW5lKTpdLAogICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSBhZnRlciByZWFkbGluZSgpIGZhaWxlZCIpCiAgICAgICAgIGZvYmouY2xvc2UoKQogCisgICAgIyBUZXN0IGlmIHN5bWJvbGljIGFuZCBoYXJkIGxpbmtzIGFyZSByZXNvbHZlZCBieSBleHRyYWN0ZmlsZSgpLiAgVGhlCisgICAgIyB0ZXN0IGxpbmsgbWVtYmVycyBlYWNoIHBvaW50IHRvIGEgcmVndWxhciBtZW1iZXIgd2hvc2UgZGF0YSBpcworICAgICMgc3VwcG9zZWQgdG8gYmUgZXhwb3J0ZWQuCisgICAgZGVmIF90ZXN0X2ZpbGVvYmpfbGluayhzZWxmLCBsbmt0eXBlLCByZWd0eXBlKToKKyAgICAgICAgYSA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKGxua3R5cGUpCisgICAgICAgIGIgPSBzZWxmLnRhci5leHRyYWN0ZmlsZShyZWd0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubmFtZSwgYi5uYW1lKQogCi1jbGFzcyBNaXNjUmVhZFRlc3QoUmVhZFRlc3QpOgorICAgIGRlZiB0ZXN0X2ZpbGVvYmpfbGluazEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCJ1c3Rhci9sbmt0eXBlIiwgInVzdGFyL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9saW5rMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoIi4vdXN0YXIvbGlua3Rlc3QyL2xua3R5cGUiLCAidXN0YXIvbGlua3Rlc3QxL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9zeW1saW5rMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoInVzdGFyL3N5bXR5cGUiLCAidXN0YXIvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3N5bWxpbmsyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygiLi91c3Rhci9saW5rdGVzdDIvc3ltdHlwZSIsICJ1c3Rhci9saW5rdGVzdDEvcmVndHlwZSIpCisKKworY2xhc3MgQ29tbW9uUmVhZFRlc3QoUmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3RfZW1wdHlfdGFyZmlsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTYxMjM6IEFsbG93IG9wZW5pbmcgZW1wdHkgYXJjaGl2ZXMuCisgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyBpZiB0YXJmaWxlLm9wZW4oKSBpcyBhYmxlIHRvIG9wZW4gYW4gZW1wdHkgdGFyCisgICAgICAgICMgYXJjaGl2ZSBzdWNjZXNzZnVsbHkuIE5vdGUgdGhhdCBhbiBlbXB0eSB0YXIgYXJjaGl2ZSBpcyBub3QgdGhlCisgICAgICAgICMgc2FtZSBhcyBhbiBlbXB0eSBmaWxlIQorICAgICAgICB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlLnJlcGxhY2UoInIiLCAidyIpKS5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuZ2V0bmFtZXMoKQorICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoInRhcmZpbGUub3BlbigpIGZhaWxlZCBvbiBlbXB0eSBhcmNoaXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwodGFyLmdldG1lbWJlcnMoKSwgW10pCisKKyAgICBkZWYgdGVzdF9udWxsX3RhcmZpbGUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWU2MTIzOiBBbGxvdyBvcGVuaW5nIGVtcHR5IGFyY2hpdmVzLgorICAgICAgICAjIFRoaXMgdGVzdCBndWFyYW50ZWVzIHRoYXQgdGFyZmlsZS5vcGVuKCkgZG9lcyBub3QgdHJlYXQgYW4gZW1wdHkKKyAgICAgICAgIyBmaWxlIGFzIGFuIGVtcHR5IHRhciBhcmNoaXZlLgorICAgICAgICBvcGVuKHRtcG5hbWUsICJ3YiIpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX3plcm9zKHNlbGYpOgorICAgICAgICAjIFRlc3QgVGFyRmlsZSdzIGlnbm9yZV96ZXJvcyBvcHRpb24uCisgICAgICAgIGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmd6Iik6CisgICAgICAgICAgICBfb3BlbiA9IGd6aXAuR3ppcEZpbGUKKyAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpiejIiKToKKyAgICAgICAgICAgIF9vcGVuID0gYnoyLkJaMkZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9vcGVuID0gb3BlbgorCisgICAgICAgIGZvciBjaGFyIGluICgnXDAnLCAnYScpOgorICAgICAgICAgICAgIyBUZXN0IGlmIEVPRkhlYWRlckVycm9yICgnXDAnKSBhbmQgSW52YWxpZEhlYWRlckVycm9yICgnYScpCisgICAgICAgICAgICAjIGFyZSBpZ25vcmVkIGNvcnJlY3RseS4KKyAgICAgICAgICAgIGZvYmogPSBfb3Blbih0bXBuYW1lLCAid2IiKQorICAgICAgICAgICAgZm9iai53cml0ZShjaGFyICogMTAyNCkKKyAgICAgICAgICAgIGZvYmoud3JpdGUodGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpKQorICAgICAgICAgICAgZm9iai5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBtb2RlPSJyIiwgaWdub3JlX3plcm9zPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCh0YXIuZ2V0bmFtZXMoKSwgWyJmb28iXSwKKyAgICAgICAgICAgICAgICAgICAgImlnbm9yZV96ZXJvcz1UcnVlIHNob3VsZCBoYXZlIHNraXBwZWQgdGhlICVyLWJsb2NrcyIgJSBjaGFyKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworCitjbGFzcyBNaXNjUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgogCiAgICAgZGVmIHRlc3Rfbm9fbmFtZV9hcmd1bWVudChzZWxmKToKICAgICAgICAgZm9iaiA9IG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKQpAQCAtMjAyLDcgKzI2Nyw3IEBACiAgICAgICAgICMgT2xkIFY3IHRhcnMgY3JlYXRlIGRpcmVjdG9yeSBtZW1iZXJzIHVzaW5nIGFuIEFSRUdUWVBFCiAgICAgICAgICMgaGVhZGVyIHdpdGggYSAiLyIgYXBwZW5kZWQgdG8gdGhlIGZpbGVuYW1lIGZpZWxkLgogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJtaXNjL2RpcnR5cGUtb2xkLXY3IikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkRJUlRZUEUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5ESVJUWVBFLAogICAgICAgICAgICAgICAgICJ2NyBkaXJ0eXBlIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF94c3Rhcl90eXBlKHNlbGYpOgpAQCAtMjE2LDE1ICsyODEsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2NoZWNrX21lbWJlcnMoc2VsZik6CiAgICAgICAgIGZvciB0YXJpbmZvIGluIHNlbGYudGFyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGludCh0YXJpbmZvLm10aW1lKSA9PSAwNzYwNjEzNjYxNywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQodGFyaW5mby5tdGltZSkgPT0gMDc2MDYxMzY2MTcsCiAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBtdGltZSBmb3IgJXMiICUgdGFyaW5mby5uYW1lKQogICAgICAgICAgICAgaWYgbm90IHRhcmluZm8ubmFtZS5zdGFydHN3aXRoKCJ1c3Rhci8iKToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udW5hbWUgPT0gInRhcmZpbGUiLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udW5hbWUgPT0gInRhcmZpbGUiLAogICAgICAgICAgICAgICAgICAgICAid3JvbmcgdW5hbWUgZm9yICVzIiAlIHRhcmluZm8ubmFtZSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfbWVtYmVycyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYudGFyLmdldG1lbWJlcnMoKVstMV0ubmFtZSA9PSAibWlzYy9lb2YiLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXIuZ2V0bWVtYmVycygpWy0xXS5uYW1lID09ICJtaXNjL2VvZiIsCiAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBmaW5kIGFsbCBtZW1iZXJzIikKIAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFyZGxpbmsoc2VsZik6CkBAIC0yNjcsMjMgKzMzMiwyMyBAQAogICAgIGRlZiB0ZXN0X2luaXRfY2xvc2VfZm9iaihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzM0MTogQ2xvc2UgdGhlIGludGVybmFsIGZpbGUgb2JqZWN0IGluIHRoZSBUYXJGaWxlCiAgICAgICAgICMgY29uc3RydWN0b3IgaW4gY2FzZSBvZiBhbiBlcnJvci4gRm9yIHRoZSB0ZXN0IHdlIHJlbHkgb24KLSAgICAgICAgIyB0aGUgZmFjdCB0aGF0IG9wZW5pbmcgYW4gaW52YWxpZCBmaWxlIHJhaXNlcyBhIFJlYWRFcnJvci4KLSAgICAgICAgaW52YWxpZCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiaW52YWxpZCIpCi0gICAgICAgIG9wZW4oaW52YWxpZCwgIndiIikud3JpdGUoImZvbyIpCisgICAgICAgICMgdGhlIGZhY3QgdGhhdCBvcGVuaW5nIGFuIGVtcHR5IGZpbGUgcmFpc2VzIGEgUmVhZEVycm9yLgorICAgICAgICBlbXB0eSA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZW1wdHkiKQorICAgICAgICBvcGVuKGVtcHR5LCAid2IiKS53cml0ZSgiIikKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXIgPSBvYmplY3QuX19uZXdfXyh0YXJmaWxlLlRhckZpbGUpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGFyLl9faW5pdF9fKGludmFsaWQpCisgICAgICAgICAgICAgICAgdGFyLl9faW5pdF9fKGVtcHR5KQogICAgICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZmlsZW9iai5jbG9zZWQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZEVycm9yIG5vdCByYWlzZWQiKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKGludmFsaWQpCisgICAgICAgICAgICBvcy5yZW1vdmUoZW1wdHkpCiAKIAotY2xhc3MgU3RyZWFtUmVhZFRlc3QoUmVhZFRlc3QpOgorY2xhc3MgU3RyZWFtUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgogCiAgICAgbW9kZT0icnwiCiAKQEAgLTI5MSw3ICszNTYsNyBAQAogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIubmV4dCgpICMgZ2V0ICJyZWd0eXBlIiAoY2FuJ3QgdXNlIGdldG1lbWJlcikKICAgICAgICAgZm9iaiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCiAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydF8oKGxlbihkYXRhKSwgbWQ1c3VtKGRhdGEpKSA9PSAodGFyaW5mby5zaXplLCBtZDVfcmVndHlwZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKICAgICAgICAgICAgICAgICAicmVndWxhciBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X3Byb3Zva2Vfc3RyZWFtX2Vycm9yKHNlbGYpOgpAQCAtMzA4LDcgKzM3Myw3IEBACiAgICAgICAgICAgICB0MiA9IHRhcjIubmV4dCgpCiAgICAgICAgICAgICBpZiB0MSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odDIgaXMgbm90IE5vbmUsICJzdHJlYW0ubmV4dCgpIGZhaWxlZC4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyIGlzIG5vdCBOb25lLCAic3RyZWFtLm5leHQoKSBmYWlsZWQuIikKIAogICAgICAgICAgICAgaWYgdDIuaXNsbmsoKSBvciB0Mi5pc3N5bSgpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuU3RyZWFtRXJyb3IsIHRhcjIuZXh0cmFjdGZpbGUsIHQyKQpAQCAtMzE4LDggKzM4Myw4IEBACiAgICAgICAgICAgICB2MiA9IHRhcjIuZXh0cmFjdGZpbGUodDIpCiAgICAgICAgICAgICBpZiB2MSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8odjIgaXMgbm90IE5vbmUsICJzdHJlYW0uZXh0cmFjdGZpbGUoKSBmYWlsZWQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYxLnJlYWQoKSA9PSB2Mi5yZWFkKCksICJzdHJlYW0gZXh0cmFjdGlvbiBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYyIGlzIG5vdCBOb25lLCAic3RyZWFtLmV4dHJhY3RmaWxlKCkgZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MS5yZWFkKCkgPT0gdjIucmVhZCgpLCAic3RyZWFtIGV4dHJhY3Rpb24gZmFpbGVkIikKIAogICAgICAgICB0YXIxLmNsb3NlKCkKIApAQCAtMzgwLDcgKzQ0NSw3IEBACiAKICAgICBkZWYgX3Rlc3RfbWVtYmVyKHNlbGYsIHRhcmluZm8sIGNoa3N1bT1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlmIGNoa3N1bSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhtZDVzdW0oc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykucmVhZCgpKSA9PSBjaGtzdW0sCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWQ1c3VtKHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pLnJlYWQoKSkgPT0gY2hrc3VtLAogICAgICAgICAgICAgICAgICAgICAid3JvbmcgbWQ1c3VtIGZvciAlcyIgJSB0YXJpbmZvLm5hbWUpCiAKICAgICAgICAga3dhcmdzWyJtdGltZSJdID0gMDc2MDYxMzY2MTcKQEAgLTM5MSw3ICs0NTYsNyBAQAogICAgICAgICAgICAga3dhcmdzWyJ1bmFtZSJdID0gInRhcmZpbGUiCiAgICAgICAgICAgICBrd2FyZ3NbImduYW1lIl0gPSAidGFyZmlsZSIKICAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGdldGF0dHIodGFyaW5mbywgaykgPT0gdiwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHRhcmluZm8sIGspID09IHYsCiAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1ZSBpbiAlcyBmaWVsZCBvZiAlcyIgJSAoaywgdGFyaW5mby5uYW1lKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfcmVndHlwZShzZWxmKToKQEAgLTQ0MCw3ICs1MDUsNyBAQAogCiAgICAgZGVmIHRlc3RfZmluZF91c3Rhcl9sb25nbmFtZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ1c3Rhci8iICsgIjEyMzQ1LyIgKiAzOSArICIxMjM0NTY3L2xvbmduYW1lIgotICAgICAgICBzZWxmLmFzc2VydF8obmFtZSBpbiBzZWxmLnRhci5nZXRuYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYudGFyLmdldG5hbWVzKCkpCiAKICAgICBkZWYgdGVzdF9maW5kX3JlZ3R5cGVfb2xkdjcoc2VsZik6CiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvcmVndHlwZS1vbGQtdjciKQpAQCAtNDYxLDcgKzUyNiw3IEBACiAgICAgICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKGxvbmduYW1lKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImxvbmduYW1lIG5vdCBmb3VuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXJpbmZvLnR5cGUgIT0gdGFyZmlsZS5ESVJUWVBFLCAicmVhZCBsb25nbmFtZSBhcyBkaXJ0eXBlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSAhPSB0YXJmaWxlLkRJUlRZUEUsICJyZWFkIGxvbmduYW1lIGFzIGRpcnR5cGUiKQogCiAgICAgZGVmIHRlc3RfcmVhZF9sb25nbGluayhzZWxmKToKICAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKQEAgLTQ3MCw3ICs1MzUsNyBAQAogICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbGluaykKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJsb25nbGluayBub3QgZm91bmQiKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby5saW5rbmFtZSA9PSBsb25nbmFtZSwgImxpbmtuYW1lIHdyb25nIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8ubGlua25hbWUgPT0gbG9uZ25hbWUsICJsaW5rbmFtZSB3cm9uZyIpCiAKICAgICBkZWYgdGVzdF90cnVuY2F0ZWRfbG9uZ25hbWUoc2VsZik6CiAgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCkBAIC01MDEsNyArNTY2LDcgQEAKICAgICAgICAgZm9iajEgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvMSkKICAgICAgICAgdGFyaW5mbzIgPSBzZWxmLnRhci5nZXRtZW1iZXIoImdudS9zcGFyc2UiKQogICAgICAgICBmb2JqMiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8yKQotICAgICAgICBzZWxmLmFzc2VydF8oZm9iajEucmVhZCgpID09IGZvYmoyLnJlYWQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoxLnJlYWQoKSA9PSBmb2JqMi5yZWFkKCksCiAgICAgICAgICAgICAgICAgInNwYXJzZSBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKIAogCkBAIC01NTAsNyArNjE1LDcgQEAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCiAgICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbygiZm9vIikpCiAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhmb2JqLmNsb3NlZCBpcyBGYWxzZSwgImV4dGVybmFsIGZpbGVvYmpzIG11c3QgbmV2ZXIgY2xvc2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmouY2xvc2VkIGlzIEZhbHNlLCAiZXh0ZXJuYWwgZmlsZW9ianMgbXVzdCBuZXZlciBjbG9zZWQiKQogCiAKIGNsYXNzIFdyaXRlVGVzdChXcml0ZVRlc3RCYXNlKToKQEAgLTU2OSw3ICs2MzQsNyBAQAogICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydF8odGFyLmdldG5hbWVzKClbMF0gPT0gbmFtZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpWzBdID09IG5hbWUsCiAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBzdG9yZSAxMDAgY2hhciBmaWxlbmFtZSIpCiAgICAgICAgIHRhci5jbG9zZSgpCiAKQEAgLTU4Miw3ICs2NDcsNyBAQAogICAgICAgICBmb2JqLmNsb3NlKCkKICAgICAgICAgdGFyLmFkZChwYXRoKQogICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5nZXRzaXplKHRtcG5hbWUpID4gMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSA+IDAsCiAgICAgICAgICAgICAgICAgInRhcmZpbGUgaXMgZW1wdHkiKQogCiAgICAgIyBUaGUgdGVzdF8qX3NpemUgdGVzdHMgdGVzdCBmb3IgYnVnICMxMTY3MTI4LgpAQCAtNjQ3LDE2ICs3MTIsMTYgQEAKICAgICAgICAgZHN0bmFtZSA9IG9zLnBhdGguYWJzcGF0aCh0bXBuYW1lKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXIubmFtZSA9PSBkc3RuYW1lLCAiYXJjaGl2ZSBuYW1lIG11c3QgYmUgYWJzb2x1dGUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLm5hbWUgPT0gZHN0bmFtZSwgImFyY2hpdmUgbmFtZSBtdXN0IGJlIGFic29sdXRlIikKIAogICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCiAKICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKICAgICAgICAgdGFyLmFkZChkc3RuYW1lKQogICAgICAgICBvcy5jaGRpcihjd2QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCiAKICAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgogICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJleGNsdWRlIikKQEAgLTY2NiwxMSArNzMxLDEyIEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCBuYW1lKQogICAgICAgICAgICAgICAgIG9wZW4obmFtZSwgIndiIikuY2xvc2UoKQogCi0gICAgICAgICAgICBkZWYgZXhjbHVkZShuYW1lKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5pc2ZpbGUobmFtZSkKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSBvcy5wYXRoLmlzZmlsZQogCiAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlLCBlbmNvZGluZz0iaXNvODg1OS0xIikKLSAgICAgICAgICAgIHRhci5hZGQodGVtcGRpciwgYXJjbmFtZT0iZW1wdHlfZGlyIiwgZXhjbHVkZT1leGNsdWRlKQorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJ1c2UgdGhlIGZpbHRlciBhcmd1bWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgdGFyLmFkZCh0ZW1wZGlyLCBhcmNuYW1lPSJlbXB0eV9kaXIiLCBleGNsdWRlPWV4Y2x1ZGUpCiAgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQpAQCAtNjc5LDYgKzc0NSwxMDQgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKIAorICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsdGVyIikKKyAgICAgICAgb3MubWtkaXIodGVtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gKCJmb28iLCAiYmFyIiwgImJheiIpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbmFtZSkKKyAgICAgICAgICAgICAgICBvcGVuKG5hbWUsICJ3YiIpLmNsb3NlKCkKKworICAgICAgICAgICAgZGVmIGZpbHRlcih0YXJpbmZvKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHRhcmluZm8ubmFtZSkgPT0gImJhciI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHRhcmluZm8udWlkID0gMTIzCisgICAgICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9ICJmb28iCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmluZm8KKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsIGFyY25hbWU9ImVtcHR5X2RpciIsIGZpbHRlcj1maWx0ZXIpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQorICAgICAgICAgICAgZm9yIHRhcmluZm8gaW4gdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51aWQsIDEyMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFyLmdldG1lbWJlcnMoKSksIDMpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgIyBHdWFyYW50ZWUgdGhhdCBzdG9yZWQgcGF0aG5hbWVzIGFyZSBub3QgbW9kaWZpZWQuIERvbid0CisgICAgIyByZW1vdmUgLi8gb3IgLi4vIG9yIGRvdWJsZSBzbGFzaGVzLiBTdGlsbCBtYWtlIGFic29sdXRlCisgICAgIyBwYXRobmFtZXMgcmVsYXRpdmUuCisgICAgIyBGb3IgZGV0YWlscyBzZWUgYnVnICM2MDU0LgorICAgIGRlZiBfdGVzdF9wYXRobmFtZShzZWxmLCBwYXRoLCBjbXBfcGF0aD1Ob25lLCBkaXI9RmFsc2UpOgorICAgICAgICAjIENyZWF0ZSBhIHRhcmZpbGUgd2l0aCBhbiBlbXB0eSBtZW1iZXIgbmFtZWQgcGF0aAorICAgICAgICAjIGFuZCBjb21wYXJlIHRoZSBzdG9yZWQgbmFtZSB3aXRoIHRoZSBvcmlnaW5hbC4KKyAgICAgICAgZm9vID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmb28iKQorICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgb3Blbihmb28sICJ3IikuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MubWtkaXIoZm9vKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHRhci5hZGQoZm9vLCBhcmNuYW1lPXBhdGgpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKKyAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZvbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJtZGlyKGZvbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgY21wX3BhdGggb3IgcGF0aC5yZXBsYWNlKG9zLnNlcCwgIi8iKSkKKworICAgIGRlZiB0ZXN0X3BhdGhuYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIikKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oImZvbyIsICIuIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIsICIuLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iLCAiLi4iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIsICIuIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoImZvbyIgKyBvcy5zZXAgKyBvcy5zZXAgKyAiYmFyIikKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIiArIG9zLnNlcCArIG9zLnNlcCwgImZvbyIsIGRpcj1UcnVlKQorCisgICAgZGVmIHRlc3RfYWJzX3BhdGhuYW1lcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJDOlxcZm9vIiwgImZvbyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCIvZm9vIiwgImZvbyIpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCIvLy9mb28iLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3BlbigiZm9vIiwgInciKS5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuYWRkKCIuIikKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICBmb3IgdCBpbiB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHQubmFtZSA9PSAiLiIgb3IgdC5uYW1lLnN0YXJ0c3dpdGgoIi4vIikpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQorCiAKIGNsYXNzIFN0cmVhbVdyaXRlVGVzdChXcml0ZVRlc3RCYXNlKToKIApAQCAtNjk3LDE0ICs4NjEsMTQgQEAKICAgICAgICAgICAgIGRlYyA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQogICAgICAgICAgICAgZGF0YSA9IG9wZW4odG1wbmFtZSwgInJiIikucmVhZCgpCiAgICAgICAgICAgICBkYXRhID0gZGVjLmRlY29tcHJlc3MoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZGVjLnVudXNlZF9kYXRhKSA9PSAwLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkZWMudW51c2VkX2RhdGEpID09IDAsCiAgICAgICAgICAgICAgICAgICAgICJmb3VuZCB0cmFpbGluZyBkYXRhIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvYmogPSBvcGVuKHRtcG5hbWUsICJyYiIpCiAgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKICAgICAgICAgICAgIGZvYmouY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkYXRhLmNvdW50KCJcMCIpID09IHRhcmZpbGUuUkVDT1JEU0laRSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuY291bnQoIlwwIikgPT0gdGFyZmlsZS5SRUNPUkRTSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvcnJlY3QgemVybyBwYWRkaW5nIikKIAogICAgIGRlZiB0ZXN0X2ZpbGVfbW9kZShzZWxmKToKQEAgLTc2MiwxNiArOTI2LDE4IEBACiAKICAgICAgICAgdjEgPSBzZWxmLl9jYWxjX3NpemUobmFtZSwgbGluaykKICAgICAgICAgdjIgPSB0YXIub2Zmc2V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0Xyh2MSA9PSB2MiwgIkdOVSBsb25nbmFtZS9sb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodjEgPT0gdjIsICJHTlUgbG9uZ25hbWUvbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKIAogICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQogICAgICAgICBtZW1iZXIgPSB0YXIubmV4dCgpCi0gICAgICAgIHNlbGYuZmFpbElmKG1lbWJlciBpcyBOb25lLCAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8ubmFtZSA9PSBtZW1iZXIubmFtZSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9PSBtZW1iZXIubGlua25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtZW1iZXIsCisgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5uYW1lLCBtZW1iZXIubmFtZSwKKyAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmxpbmtuYW1lLCBtZW1iZXIubGlua25hbWUsCisgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCiAKICAgICBkZWYgdGVzdF9sb25nbmFtZV8xMDIzKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtIikKQEAgLTgyOSwxOCArOTk1LDE4IEBACiAgICAgICAgICMgVGhlIHNhbWUgbmFtZSB3aWxsIGJlIGFkZGVkIGFzIGEgUkVHVFlQRSBldmVyeQogICAgICAgICAjIHRpbWUgcmVnYXJkbGVzcyBvZiBzdF9ubGluay4KICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldHRhcmluZm8oc2VsZi5mb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5SRUdUWVBFLAorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby50eXBlID09IHRhcmZpbGUuUkVHVFlQRSwKICAgICAgICAgICAgICAgICAiYWRkIGZpbGUgYXMgcmVndWxhciBmYWlsZWQiKQogCiAgICAgZGVmIHRlc3RfYWRkX2hhcmRsaW5rKHNlbGYpOgogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmJhcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkxOS1RZUEUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5MTktUWVBFLAogICAgICAgICAgICAgICAgICJhZGQgZmlsZSBhcyBoYXJkbGluayBmYWlsZWQiKQogCiAgICAgZGVmIHRlc3RfZGVyZWZlcmVuY2VfaGFyZGxpbmsoc2VsZik6CiAgICAgICAgIHNlbGYudGFyLmRlcmVmZXJlbmNlID0gVHJ1ZQogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmJhcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLlJFR1RZUEUsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5SRUdUWVBFLAogICAgICAgICAgICAgICAgICJkZXJlZmVyZW5jaW5nIGhhcmRsaW5rIGZhaWxlZCIpCiAKIApAQCAtODYwLDEwICsxMDI2LDEwIEBACiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQogICAgICAgICBpZiBsaW5rOgogICAgICAgICAgICAgbCA9IHRhci5nZXRtZW1iZXJzKClbMF0ubGlua25hbWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhsaW5rID09IGwsICJQQVggbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5rID09IGwsICJQQVggbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG4gPSB0YXIuZ2V0bWVtYmVycygpWzBdLm5hbWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhuYW1lID09IG4sICJQQVggbG9uZ25hbWUgY3JlYXRpb24gZmFpbGVkIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lID09IG4sICJQQVggbG9uZ25hbWUgY3JlYXRpb24gZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X3BheF9nbG9iYWxfaGVhZGVyKHNlbGYpOgogICAgICAgICBwYXhfaGVhZGVycyA9IHsKQEAgLTg3Myw3ICsxMDM5LDcgQEAKICAgICAgICAgICAgICAgICB1InRlc3QiOiB1IuT2/CIsCiAgICAgICAgICAgICAgICAgdSLk9vwiOiB1InRlc3QifQogCi0gICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD10YXJmaWxlLlBBWF9GT1JNQVQsIFwKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwKICAgICAgICAgICAgICAgICBwYXhfaGVhZGVycz1wYXhfaGVhZGVycykKICAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKCJ0ZXN0IikpCiAgICAgICAgIHRhci5jbG9zZSgpCkBAIC04ODUsOCArMTA1MSw4IEBACiAKICAgICAgICAgIyBUZXN0IGlmIGFsbCB0aGUgZmllbGRzIGFyZSB1bmljb2RlLgogICAgICAgICBmb3Iga2V5LCB2YWwgaW4gdGFyLnBheF9oZWFkZXJzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUoa2V5KSBpcyB1bmljb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodmFsKSBpcyB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoa2V5KSBpcyB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodmFsKSBpcyB1bmljb2RlKQogICAgICAgICAgICAgaWYga2V5IGluIHRhcmZpbGUuUEFYX05VTUJFUl9GSUVMRFM6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB0YXJmaWxlLlBBWF9OVU1CRVJfRklFTERTW2tleV0odmFsKQpAQCAtOTM0LDcgKzExMDAsNyBAQAogICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodGFyLmdldG5hbWVzKClbMF0pIGlzIG5vdCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0YXIuZ2V0bmFtZXMoKVswXSkgaXMgbm90IHVuaWNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG1lbWJlcnMoKVswXS5uYW1lLCBuYW1lLmVuY29kZShlbmNvZGluZykpCiAgICAgICAgIHRhci5jbG9zZSgpCiAKQEAgLTk1OCwxMCArMTEyNCwxMCBAQAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfYXJndW1lbnQoc2VsZik6CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAiciIsIGVuY29kaW5nPSJpc284ODU5LTEiLCBlcnJvcnM9InN0cmljdCIpCiAgICAgICAgIGZvciB0IGluIHRhcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHQubmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC5saW5rbmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC51bmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC5nbmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5uYW1lKSBpcyBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0LmxpbmtuYW1lKSBpcyBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0LnVuYW1lKSBpcyBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0LmduYW1lKSBpcyBzdHIpCiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF91bmFtZV91bmljb2RlKHNlbGYpOgpAQCAtMTA1MywxMiArMTIxOSwxMiBAQAogICAgICAgICBzZWxmLl90ZXN0KCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgotICAgICAgICBvcGVuKHNlbGYudGFybmFtZSwgInciKS5jbG9zZSgpCisgICAgICAgIHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsICJ3OiIpLmNsb3NlKCkKICAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKCkKICAgICAgICAgc2VsZi5fdGVzdCgpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlb2JqKHNlbGYpOgotICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oIlwwIiAqIDEwMjQpCiAgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZShmb2JqKQogICAgICAgICBmb2JqLnNlZWsoMCkKICAgICAgICAgc2VsZi5fdGVzdChmaWxlb2JqPWZvYmopCkBAIC0xMDg4LDYgKzEyNTQsMjkgQEAKICAgICAgICAgc2VsZi5fY3JlYXRlX3Rlc3R0YXIoInc6YnoyIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgImEiKQogCisgICAgIyBBcHBlbmQgbW9kZSBpcyBzdXBwb3NlZCB0byBmYWlsIGlmIHRoZSB0YXJmaWxlIHRvIGFwcGVuZCB0bworICAgICMgZG9lcyBub3QgZW5kIHdpdGggYSB6ZXJvIGJsb2NrLgorICAgIGRlZiBfdGVzdF9lcnJvcihzZWxmLCBkYXRhKToKKyAgICAgICAgb3BlbihzZWxmLnRhcm5hbWUsICJ3YiIpLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCBzZWxmLl9hZGRfdGVzdGZpbGUpCisKKyAgICBkZWYgdGVzdF9udWxsKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKCIiKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcigiXDAiICogMTMpCisKKyAgICBkZWYgdGVzdF9wcmVtYXR1cmVfZW9mKHNlbGYpOgorICAgICAgICBkYXRhID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpCisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoZGF0YSkKKworICAgIGRlZiB0ZXN0X3RyYWlsaW5nX2dhcmJhZ2Uoc2VsZik6CisgICAgICAgIGRhdGEgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcihkYXRhICsgIlwwIiAqIDEzKQorCisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcigiYSIgKiA1MTIpCisKIAogY2xhc3MgTGltaXRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTExNDgsNiArMTMzNyw4OCBAQAogICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuUEFYX0ZPUk1BVCkKIAogCitjbGFzcyBDb250ZXh0TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFyLmNsb3NlZCwgImNsb3NlZCBpbnNpZGUgcnVudGltZSBjb250ZXh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIElPRXJyb3IKKyAgICAgICAgIyBpZiB0aGUgVGFyRmlsZSBvYmplY3QgaXMgYWxyZWFkeSBjbG9zZWQuCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lKQorICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgd2l0aCB0YXI6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgdGhlIElPRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorCisgICAgZGVmIHRlc3Rfbm9fZW9mKHNlbGYpOgorICAgICAgICAjIF9fZXhpdF9fKCkgbXVzdCBub3Qgd3JpdGUgZW5kLW9mLWFyY2hpdmUgYmxvY2tzIGlmIGFuCisgICAgICAgICMgZXhjZXB0aW9uIHdhcyByYWlzZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IikgYXMgdGFyOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5nZXRzaXplKHRtcG5hbWUpLCAwLAorICAgICAgICAgICAgICAgICJjb250ZXh0IG1hbmFnZXIgd3JvdGUgYW4gZW5kLW9mLWFyY2hpdmUgYmxvY2siKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfZW9mKHNlbGYpOgorICAgICAgICAjIF9fZXhpdF9fKCkgbXVzdCB3cml0ZSBlbmQtb2YtYXJjaGl2ZSBibG9ja3MsIGkuZS4gY2FsbAorICAgICAgICAjIFRhckZpbGUuY2xvc2UoKSBpZiB0aGVyZSB3YXMgbm8gZXJyb3IuCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3Iik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob3MucGF0aC5nZXRzaXplKHRtcG5hbWUpLCAwLAorICAgICAgICAgICAgICAgICJjb250ZXh0IG1hbmFnZXIgd3JvdGUgbm8gZW5kLW9mLWFyY2hpdmUgYmxvY2siKQorCisgICAgZGVmIHRlc3RfZmlsZW9iaihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgX19leGl0X18oKSBkaWQgbm90IGNsb3NlIHRoZSBleHRlcm5hbCBmaWxlCisgICAgICAgICMgb2JqZWN0LgorICAgICAgICBmb2JqID0gb3Blbih0bXBuYW1lLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9InciKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmb2JqLmNsb3NlZCwgImV4dGVybmFsIGZpbGUgb2JqZWN0IHdhcyBjbG9zZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorICAgICAgICBmb2JqLmNsb3NlKCkKKworCitjbGFzcyBMaW5rRW11bGF0aW9uVGVzdChSZWFkVGVzdCk6CisKKyAgICAjIFRlc3QgZm9yIGlzc3VlICM4NzQxIHJlZ3Jlc3Npb24uIE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisgICAgIyBzeW1ib2xpYyBvciBoYXJkIGxpbmtzIHRhcmZpbGUgdHJpZXMgdG8gZXh0cmFjdCB0aGVzZSB0eXBlcyBvZiBtZW1iZXJzIGFzCisgICAgIyB0aGUgcmVndWxhciBmaWxlcyB0aGV5IHBvaW50IHRvLgorICAgIGRlZiBfdGVzdF9saW5rX2V4dHJhY3Rpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYudGFyLmV4dHJhY3QobmFtZSwgVEVNUERJUikKKyAgICAgICAgZGF0YSA9IG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsIG5hbWUpLCAicmIiKS5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfaGFyZGxpbmtfZXh0cmFjdGlvbjEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCJ1c3Rhci9sbmt0eXBlIikKKworICAgIGRlZiB0ZXN0X2hhcmRsaW5rX2V4dHJhY3Rpb24yKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmtfZXh0cmFjdGlvbigiLi91c3Rhci9saW5rdGVzdDIvbG5rdHlwZSIpCisKKyAgICBkZWYgdGVzdF9zeW1saW5rX2V4dHJhY3Rpb24xKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmtfZXh0cmFjdGlvbigidXN0YXIvc3ltdHlwZSIpCisKKyAgICBkZWYgdGVzdF9zeW1saW5rX2V4dHJhY3Rpb24yKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmtfZXh0cmFjdGlvbigiLi91c3Rhci9saW5rdGVzdDIvc3ltdHlwZSIpCisKKwogY2xhc3MgR3ppcE1pc2NSZWFkVGVzdChNaXNjUmVhZFRlc3QpOgogICAgIHRhcm5hbWUgPSBnemlwbmFtZQogICAgIG1vZGUgPSAicjpneiIKQEAgLTExODksMTAgKzE0NjAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImluZmluaXRlIGxvb3AgZGV0ZWN0ZWQgaW4gdGFyZmlsZS5vcGVuKCkiKQogICAgICAgICAgICAgICAgIHNlbGYuaGl0X2VvZiA9IHNlbGYucG9zID09IHNlbGYubGVuCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPLnJlYWQoc2VsZiwgbikKKyAgICAgICAgICAgIGRlZiBzZWVrKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLmhpdF9lb2YgPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTy5zZWVrKHNlbGYsICphcmdzKQogCiAgICAgICAgIGRhdGEgPSBiejIuY29tcHJlc3ModGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpKQogICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZGF0YSkgKyAxKToKLSAgICAgICAgICAgIHRhcmZpbGUub3BlbihmaWxlb2JqPU15U3RyaW5nSU8oZGF0YVs6eF0pLCBtb2RlPW1vZGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZmlsZS5vcGVuKGZpbGVvYmo9TXlTdHJpbmdJTyhkYXRhWzp4XSksIG1vZGU9bW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgd2UgaGF2ZSBubyBpbnRlcmVzdCBpbiBSZWFkRXJyb3JzCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsX2lucHV0KHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3BhcnRpYWxfaW5wdXQoInIiKQpAQCAtMTIyMSwxMCArMTQ5OCwxMyBAQAogICAgICAgICBQYXhVbmljb2RlVGVzdCwKICAgICAgICAgQXBwZW5kVGVzdCwKICAgICAgICAgTGltaXRzVGVzdCwKKyAgICAgICAgQ29udGV4dE1hbmFnZXJUZXN0LAogICAgIF0KIAogICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CiAgICAgICAgIHRlc3RzLmFwcGVuZChIYXJkbGlua1Rlc3QpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMuYXBwZW5kKExpbmtFbXVsYXRpb25UZXN0KQogCiAgICAgZm9iaiA9IG9wZW4odGFybmFtZSwgInJiIikKICAgICBkYXRhID0gZm9iai5yZWFkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5IGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKaW5kZXggNmE4N2NlMi4uZThiYTU4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90Y2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKQEAgLTMsOSArMywyMSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0aGlzIHRlc3QgaWYgdGhlIF90a2ludGVyIG1vZHVsZSB3YXNuJ3QgYnVpbHQuCitfdGtpbnRlciA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKIGZyb20gVGtpbnRlciBpbXBvcnQgVGNsCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgogCisKK2NsYXNzIFRraW50ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RmxhdHRlbkxlbihzZWxmKToKKyAgICAgICAgIyBmbGF0dGVuKDxvYmplY3Qgd2l0aCBubyBsZW5ndGg+KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF90a2ludGVyLl9mbGF0dGVuLCBUcnVlKQorCisKIGNsYXNzIFRjbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTE1LDQxICsxMjcsNiBAQAogICAgICAgICB0Y2wgPSBzZWxmLmludGVycAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wuZXZhbCwncGFja2FnZSByZXF1aXJlIERORScpCiAKLSAgICBkZWYgdGVzdExvYWRUayhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIGlmICdESVNQTEFZJyBub3QgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgICAgICMgc2tpcHBpbmcgdGVzdCBvZiBjbGVhbiB1cGdyYWRlYWJpbGl0eQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRjbCA9IFRjbCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC53aW5mb19nZW9tZXRyeSkKLSAgICAgICAgdGNsLmxvYWR0aygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzF4MSswKzAnLCB0Y2wud2luZm9fZ2VvbWV0cnkoKSkKLSAgICAgICAgdGNsLmRlc3Ryb3koKQotCi0gICAgZGVmIHRlc3RMb2FkVGtGYWlsdXJlKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgb2xkX2Rpc3BsYXkgPSBOb25lCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCd3aW4nLCAnZGFyd2luJywgJ2N5Z3dpbicpKToKLSAgICAgICAgICAgIHJldHVybiAgIyBubyBmYWlsdXJlIHBvc3NpYmxlIG9uIHdpbmRvd3M/Ci0gICAgICAgIGlmICdESVNQTEFZJyBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgb2xkX2Rpc3BsYXkgPSBvcy5lbnZpcm9uWydESVNQTEFZJ10KLSAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWydESVNQTEFZJ10KLSAgICAgICAgICAgICMgb24gc29tZSBwbGF0Zm9ybXMsIGRlbGV0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgICAgICAgIyBkb2Vzbid0IGFjdHVhbGx5IGNhcnJ5IHRocm91Z2ggdG8gdGhlIHByb2Nlc3MgbGV2ZWwKLSAgICAgICAgICAgICMgYmVjYXVzZSB0aGV5IGRvbid0IHN1cHBvcnQgdW5zZXRlbnYKLSAgICAgICAgICAgICMgSWYgdGhhdCdzIHRoZSBjYXNlLCBhYm9ydC4KLSAgICAgICAgICAgIGRpc3BsYXkgPSBvcy5wb3BlbignZWNobyAkRElTUExBWScpLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICBpZiBkaXNwbGF5OgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0Y2wgPSBUY2woKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC53aW5mb19nZW9tZXRyeSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wubG9hZHRrKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgb2xkX2Rpc3BsYXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnRElTUExBWSddID0gb2xkX2Rpc3BsYXkKLQogICAgIGRlZiB0ZXN0TG9hZFdpdGhVTkMoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CkBAIC0xNzAsMTMgKzE0NywxNCBAQAogICAgICAgICAgICAgZW52LnVuc2V0KCJUQ0xfTElCUkFSWSIpCiAgICAgICAgICAgICBmID0gb3MucG9wZW4oJyVzIC1jICJpbXBvcnQgVGtpbnRlcjsgcHJpbnQgVGtpbnRlciInICUgKHVuY19uYW1lLCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdUa2ludGVyLnB5JyBpbiBmLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUa2ludGVyLnB5JyBpbiBmLnJlYWQoKSkKICAgICAgICAgIyBleGl0IGNvZGUgbXVzdCBiZSB6ZXJvCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZSgpLCBOb25lKQogCiAKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGNsVGVzdCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRjbFRlc3QsIFRraW50ZXJUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CmluZGV4IDgzOGY2ZmIuLmU0MGMxZmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0xLDIwICsxLDQzIEBACiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGVsbmV0bGliCiBpbXBvcnQgdGltZQoraW1wb3J0IFF1ZXVlCiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKIEhPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorRU9GX3NpZ2lsID0gb2JqZWN0KCkKIAotZGVmIHNlcnZlcihldnQsIHNlcnYpOgorZGVmIHNlcnZlcihldnQsIHNlcnYsIGRhdGFxPU5vbmUpOgorICAgICIiIiBPcGVuIGEgdGNwIHNlcnZlciBpbiB0aHJlZSBzdGVwcworICAgICAgICAxKSBzZXQgZXZ0IHRvIHRydWUgdG8gbGV0IHRoZSBwYXJlbnQga25vdyB3ZSBhcmUgcmVhZHkKKyAgICAgICAgMikgW29wdGlvbmFsXSBpZiBpcyBub3QgRmFsc2UsIHdyaXRlIHRoZSBsaXN0IG9mIGRhdGEgZnJvbSBkYXRhcS5nZXQoKQorICAgICAgICAgICB0byB0aGUgc29ja2V0LgorICAgICAgICAzKSBzZXQgZXZ0IHRvIHRydWUgdG8gbGV0IHRoZSBwYXJlbnQga25vdyB3ZSdyZSBkb25lCisgICAgIiIiCiAgICAgc2Vydi5saXN0ZW4oNSkKICAgICBldnQuc2V0KCkKICAgICB0cnk6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCisgICAgICAgIGlmIGRhdGFxOgorICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgICAgICBuZXdfZGF0YSA9IGRhdGFxLmdldChUcnVlLCAwLjUpCisgICAgICAgICAgICBkYXRhcS50YXNrX2RvbmUoKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbmV3X2RhdGE6CisgICAgICAgICAgICAgICAgaWYgaXRlbSA9PSBFT0Zfc2lnaWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgdHlwZShpdGVtKSBpbiBbaW50LCBmbG9hdF06CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoaXRlbSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGl0ZW0KKyAgICAgICAgICAgICAgICB3cml0dGVuID0gY29ubi5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbd3JpdHRlbjpdCiAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgZmluYWxseToKICAgICAgICAgc2Vydi5jbG9zZSgpCiAgICAgICAgIGV2dC5zZXQoKQpAQCAtMjYsMTMgKzQ5LDE1IEBACiAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMykKICAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrKSkuc3RhcnQoKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrKSkKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQogICAgICAgICBzZWxmLmV2dC53YWl0KCkKICAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQogICAgICAgICB0aW1lLnNsZWVwKC4xKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCiAKICAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgogICAgICAgICAjIGNvbm5lY3RzCkBAIC03MSw5ICs5NiwyNzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZWxuZXQuc29jay5nZXR0aW1lb3V0KCksIDMwKQogICAgICAgICB0ZWxuZXQuc29jay5jbG9zZSgpCiAKK2RlZiBfcmVhZF9zZXRVcChzZWxmKToKKyAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgc2VsZi5kYXRhcSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMykKKyAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrLCBzZWxmLmRhdGFxKSkKKyAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgc2VsZi5ldnQud2FpdCgpCisgICAgc2VsZi5ldnQuY2xlYXIoKQorICAgIHRpbWUuc2xlZXAoLjEpCisKK2RlZiBfcmVhZF90ZWFyRG93bihzZWxmKToKKyAgICBzZWxmLmV2dC53YWl0KCkKKyAgICBzZWxmLnRocmVhZC5qb2luKCkKKworY2xhc3MgUmVhZFRlc3RzKFRlc3RDYXNlKToKKyAgICBzZXRVcCA9IF9yZWFkX3NldFVwCisgICAgdGVhckRvd24gPSBfcmVhZF90ZWFyRG93bgorCisgICAgIyB1c2UgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIHRlc3RpbmcgdGltZW91dHMgYXMgdGVzdF90aW1lb3V0LnB5CisgICAgIyB0aGVzZSB3aWxsIG5ldmVyIHBhc3MgMTAwJSBidXQgbWFrZSB0aGUgZnV6eiBiaWcgZW5vdWdoIHRoYXQgaXQgaXMgcmFyZQorICAgIGJsb2NrX2xvbmcgPSAwLjYKKyAgICBibG9ja19zaG9ydCA9IDAuMworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfQShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWRfdW50aWwoZXhwZWN0ZWQsIFt0aW1lb3V0XSkKKyAgICAgICAgICBSZWFkIHVudGlsIHRoZSBleHBlY3RlZCBzdHJpbmcgaGFzIGJlZW4gc2Vlbiwgb3IgYSB0aW1lb3V0IGlzCisgICAgICAgICAgaGl0IChkZWZhdWx0IGlzIG5vIHRpbWVvdXQpOyBtYXkgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwLCAnbWF0Y2gnLCAneScgKiAxMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKCdtYXRjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMl0pKQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9CKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhlIHRpbWVvdXQgLSBpdCBkb2VzIE5PVCByYWlzZSBzb2NrZXQudGltZW91dAorICAgICAgICB3YW50ID0gWydoZWxsbycsIHNlbGYuYmxvY2tfbG9uZywgJ25vdCBzZWVuJywgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKCdub3Qgc2VlbicsIHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgd2FudFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZWxuZXQucmVhZF9hbGwoKSwgJ25vdCBzZWVuJykKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Eoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZWFkX2FsbCgpCisgICAgICAgICAgUmVhZCBhbGwgZGF0YSB1bnRpbCBFT0Y7IG1heSBibG9jay4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogNTAwLCAneScgKiA1MDAsICd6JyAqIDUwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMV0pKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBfdGVzdF9ibG9ja2luZyhzZWxmLCBmdW5jKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW3NlbGYuYmxvY2tfbG9uZywgRU9GX3NpZ2lsXSkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBkYXRhID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJsb2NrX3Nob3J0IDw9IHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FsbF9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Jsb2NraW5nKHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KS5yZWFkX2FsbCkKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Moc2VsZik6CisgICAgICAgIHNlbGYuZGF0YXEucHV0KFtFT0Zfc2lnaWxdKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgdGVsbmV0LnJlYWRfYWxsKCkgIyBzaG91bGRuJ3QgcmFpc2UKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9BKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF9zb21lKCkKKyAgICAgICAgICBSZWFkIGF0IGxlYXN0IG9uZSBieXRlIG9yIEVPRjsgbWF5IGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgIyB0ZXN0ICdhdCBsZWFzdCBvbmUgYnl0ZScKKyAgICAgICAgd2FudCA9IFsneCcgKiA1MDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRhdGEpID49IDEpCisKKyAgICBkZWYgdGVzdF9yZWFkX3NvbWVfQihzZWxmKToKKyAgICAgICAgIyB0ZXN0IEVPRgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NvbWUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9DKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Jsb2NraW5nKHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KS5yZWFkX3NvbWUpCisKKyAgICBkZWYgX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQShzZWxmLCBmdW5jX25hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF92ZXJ5X2VhZ2VyKCkKKyAgICAgICAgICBSZWFkIGFsbCBkYXRhIGF2YWlsYWJsZSBhbHJlYWR5IHF1ZXVlZCBvciBvbiB0aGUgc29ja2V0LAorICAgICAgICAgIHdpdGhvdXQgYmxvY2tpbmcuCisgICAgICAgICIiIgorICAgICAgICB3YW50ID0gW3NlbGYuYmxvY2tfbG9uZywgJ3gnICogMTAwLCAneScgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgZXhwZWN0cyA9IHdhbnRbMV0gKyB3YW50WzJdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBmdW5jID0gZ2V0YXR0cih0ZWxuZXQsIGZ1bmNfbmFtZSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSArPSBmdW5jKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0cy5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0cywgZGF0YSkKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9lYWdlcl9CKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICMgdGVzdCBFT0YKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0aW1lLnNsZWVwKHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZnVuYykKKworICAgICMgcmVhZF9lYWdlciBhbmQgcmVhZF92ZXJ5X2VhZ2VyIG1ha2UgdGhlIHNhbWUgZ2F1cmFudGVlcworICAgICMgKHRoZXkgYmVoYXZlIGRpZmZlcmVudGx5IGJ1dCB3ZSBvbmx5IHRlc3QgdGhlIGdhdXJhbnRlZXMpCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2VhZ2VyX0Eoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQSgncmVhZF92ZXJ5X2VhZ2VyJykKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfZWFnZXJfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9CKCdyZWFkX3ZlcnlfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfZWFnZXJfQShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9BKCdyZWFkX2VhZ2VyJykKKyAgICBkZWYgdGVzdF9yZWFkX2VhZ2VyX0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQigncmVhZF9lYWdlcicpCisgICAgIyBOQiAtLSB3ZSBuZWVkIHRvIHRlc3QgdGhlIElBQyBibG9jayB3aGljaCBpcyBtZW50aW9uZWQgaW4gdGhlIGRvY3N0cmluZworICAgICMgYnV0IG5vdCBpbiB0aGUgbW9kdWxlIGRvY3MKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9sYXp5X0Ioc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBmdW5jID0gZ2V0YXR0cih0ZWxuZXQsIGZ1bmNfbmFtZSkKKyAgICAgICAgdGVsbmV0LmZpbGxfcmF3cSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmdW5jKQorCisgICAgZGVmIHRlc3RfcmVhZF9sYXp5X0Eoc2VsZik6CisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0aW1lLnNsZWVwKHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX2xhenkoKSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gdGVsbmV0LnJlYWRfbGF6eSgpCisgICAgICAgICAgICAgICAgZGF0YSArPSByZWFkX2RhdGEKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICB0ZWxuZXQuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRbMF0uc3RhcnRzd2l0aChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9sYXp5X0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfbGF6eV9CKCdyZWFkX2xhenknKQorCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2xhenlfQShzZWxmKToKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfdmVyeV9sYXp5KCkpCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHRlbG5ldC5yZWFkX3ZlcnlfbGF6eSgpCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgKz0gcmVhZF9kYXRhCisgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgIHRlbG5ldC5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5jb29rZWRxKQorICAgICAgICAgICAgICAgIHRlbG5ldC5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRbMF0uc3RhcnRzd2l0aChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2xhenlfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9sYXp5X0IoJ3JlYWRfdmVyeV9sYXp5JykKKworY2xhc3MgbmVnb19jb2xsZWN0b3Iob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2JfZ2V0dGVyPU5vbmUpOgorICAgICAgICBzZWxmLnNlZW4gPSAnJworICAgICAgICBzZWxmLnNiX2dldHRlciA9IHNiX2dldHRlcgorICAgICAgICBzZWxmLnNiX3NlZW4gPSAnJworCisgICAgZGVmIGRvX25lZ28oc2VsZiwgc29jaywgY21kLCBvcHQpOgorICAgICAgICBzZWxmLnNlZW4gKz0gY21kICsgb3B0CisgICAgICAgIGlmIGNtZCA9PSB0bC5TRSBhbmQgc2VsZi5zYl9nZXR0ZXI6CisgICAgICAgICAgICBzYl9kYXRhID0gc2VsZi5zYl9nZXR0ZXIoKQorICAgICAgICAgICAgc2VsZi5zYl9zZWVuICs9IHNiX2RhdGEKKwordGwgPSB0ZWxuZXRsaWIKK2NsYXNzIE9wdGlvblRlc3RzKFRlc3RDYXNlKToKKyAgICBzZXRVcCA9IF9yZWFkX3NldFVwCisgICAgdGVhckRvd24gPSBfcmVhZF90ZWFyRG93bgorICAgICMgUkZDIDg1NCBjb21tYW5kcworICAgIGNtZHMgPSBbdGwuQU8sIHRsLkFZVCwgdGwuQlJLLCB0bC5FQywgdGwuRUwsIHRsLkdBLCB0bC5JUCwgdGwuTk9QXQorCisgICAgZGVmIF90ZXN0X2NvbW1hbmQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIiBoZWxwZXIgZm9yIHRlc3RpbmcgSUFDICsgY21kICIiIgorICAgICAgICBzZWxmLnNldFVwKCkKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoZGF0YSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIG5lZ28gPSBuZWdvX2NvbGxlY3RvcigpCisgICAgICAgIHRlbG5ldC5zZXRfb3B0aW9uX25lZ290aWF0aW9uX2NhbGxiYWNrKG5lZ28uZG9fbmVnbykKKyAgICAgICAgdHh0ID0gdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgY21kID0gbmVnby5zZWVuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY21kKSA+IDApICMgd2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBjb21tYW5kCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY21kWzBdLCBzZWxmLmNtZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kWzFdLCB0bC5OT09QVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oJycuam9pbihkYXRhWzotMV0pKSwgbGVuKHR4dCArIGNtZCkpCisgICAgICAgIG5lZ28uc2JfZ2V0dGVyID0gTm9uZSAjIGJyZWFrIHRoZSBuZWdvID0+IHRlbG5ldCBjeWNsZQorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X0lBQ19jb21tYW5kcyhzZWxmKToKKyAgICAgICAgIyByZXNldCBvdXIgc2V0dXAKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKworICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbJ3gnICogMTAwLCB0bC5JQUMgKyBjbWQsICd5JyoxMDAsIEVPRl9zaWdpbF0pCisgICAgICAgICAgICBzZWxmLl90ZXN0X2NvbW1hbmQoWyd4JyAqIDEwLCB0bC5JQUMgKyBjbWQsICd5JyoxMCwgRU9GX3NpZ2lsXSkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbdGwuSUFDICsgY21kLCBFT0Zfc2lnaWxdKQorICAgICAgICAjIGFsbCBhdCBvbmNlCisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbdGwuSUFDICsgY21kIGZvciAoY21kKSBpbiBzZWxmLmNtZHNdICsgW0VPRl9zaWdpbF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NiX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X1NCX2NvbW1hbmRzKHNlbGYpOgorICAgICAgICAjIFJGQyA4NTUsIHN1Ym5lZ290aWF0aW9ucyBwb3J0aW9uCisgICAgICAgIHNlbmQgPSBbdGwuSUFDICsgdGwuU0IgKyB0bC5JQUMgKyB0bC5TRSwKKyAgICAgICAgICAgICAgICB0bC5JQUMgKyB0bC5TQiArIHRsLklBQyArIHRsLklBQyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgdGwuSUFDICsgdGwuSUFDICsgJ2FhJyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgJ2JiJyArIHRsLklBQyArIHRsLklBQyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgJ2NjJyArIHRsLklBQyArIHRsLklBQyArICdkZCcgKyB0bC5JQUMgKyB0bC5TRSwKKyAgICAgICAgICAgICAgICBFT0Zfc2lnaWwsCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHNlbmQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBuZWdvID0gbmVnb19jb2xsZWN0b3IodGVsbmV0LnJlYWRfc2JfZGF0YSkKKyAgICAgICAgdGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2sobmVnby5kb19uZWdvKQorICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dCwgJycpCisgICAgICAgIHdhbnRfc2JfZGF0YSA9IHRsLklBQyArIHRsLklBQyArICdhYWJiJyArIHRsLklBQyArICdjYycgKyB0bC5JQUMgKyAnZGQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVnby5zYl9zZWVuLCB3YW50X3NiX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NiX2RhdGEoKSkKKyAgICAgICAgbmVnby5zYl9nZXR0ZXIgPSBOb25lICMgYnJlYWsgdGhlIG5lZ28gPT4gdGVsbmV0IGN5Y2xlCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEdlbmVyYWxUZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEdlbmVyYWxUZXN0cywgUmVhZFRlc3RzLCBPcHRpb25UZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNjEwMTQzMS4uMjcwNjhlMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0zLDcgKzMsNiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKLWltcG9ydCBlcnJubwogaW1wb3J0IHdhcm5pbmdzCiAKIGltcG9ydCB1bml0dGVzdApAQCAtMjQsOSArMjMsNyBAQAogCiAjIFRFU1RfRklMRVMgbWF5IG5lZWQgdG8gYmUgdHdlYWtlZCBmb3Igc3lzdGVtcyBkZXBlbmRpbmcgb24gdGhlIG1heGltdW0KICMgbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW5lZCBhdCBvbmUgdGltZSAoc2VlIHVsaW1pdCAtbikKLWlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKLSAgICBURVNUX0ZJTEVTID0gMzIKLWVsaWYgc3lzLnBsYXRmb3JtIGluICgnb3BlbmJzZDMnLCAnb3BlbmJzZDQnKToKK2lmIHN5cy5wbGF0Zm9ybSBpbiAoJ29wZW5ic2QzJywgJ29wZW5ic2Q0Jyk6CiAgICAgVEVTVF9GSUxFUyA9IDQ4CiBlbHNlOgogICAgIFRFU1RfRklMRVMgPSAxMDAKQEAgLTU5LDcgKzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICclcyciICUgKG5iYXNlLCBzdWYpKQogCiAgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KLSAgICAgICAgc2VsZi5hc3NlcnRfKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKICAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCiAgICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQogCkBAIC04OCw3ICs4NSw3IEBACiAgICAgICAgIGZvciBrZXkgaW4gZGljdDoKICAgICAgICAgICAgIGlmIGtleVswXSAhPSAnXycgYW5kIGtleSBub3QgaW4gZXhwZWN0ZWQ6CiAgICAgICAgICAgICAgICAgdW5leHAuYXBwZW5kKGtleSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxlbih1bmV4cCkgPT0gMCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih1bmV4cCkgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGtleXM6ICVzIiAlIHVuZXhwKQogCiB0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfZXhwb3J0cykKQEAgLTExMyw3ICsxMTAsNyBAQAogICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoVEVTVF9GSUxFUyk6CiAgICAgICAgICAgICBzID0gci5uZXh0KCkKICAgICAgICAgICAgIHNlbGYubmFtZUNoZWNrKHMsICcnLCAnJywgJycpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihzIGluIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHMsIGRpY3QpCiAgICAgICAgICAgICBkaWN0W3NdID0gMQogCiAgICAgZGVmIHRlc3Rfc3VwcG9ydHNfaXRlcihzZWxmKToKQEAgLTE0MCwxMCArMTM3LDkgQEAKIAogICAgICAgICBjYW5kID0gdGVtcGZpbGUuX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKQogCi0gICAgICAgIHNlbGYuZmFpbElmKGxlbihjYW5kKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihjYW5kKSA9PSAwKQogICAgICAgICBmb3IgYyBpbiBjYW5kOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoYywgYmFzZXN0cmluZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhIHN0cmluZyIgJSBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIGJhc2VzdHJpbmcpCiAKICAgICBkZWYgdGVzdF93YW50ZWRfZGlycyhzZWxmKToKICAgICAgICAgIyBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGlyZWN0b3JpZXMKQEAgLTE1MywyMSArMTQ5LDIxIEBACiAgICAgICAgICAgICBmb3IgZW52bmFtZSBpbiAnVE1QRElSJywgJ1RFTVAnLCAnVE1QJzoKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0ZW52KGVudm5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIGVudi5zZXQoZW52bmFtZSwgb3MucGF0aC5hYnNwYXRoKGVudm5hbWUpKQorICAgICAgICAgICAgICAgICAgICBlbnZbZW52bmFtZV0gPSBvcy5wYXRoLmFic3BhdGgoZW52bmFtZSkKIAogICAgICAgICAgICAgY2FuZCA9IHRlbXBmaWxlLl9jYW5kaWRhdGVfdGVtcGRpcl9saXN0KCkKIAogICAgICAgICAgICAgZm9yIGVudm5hbWUgaW4gJ1RNUERJUicsICdURU1QJywgJ1RNUCc6CiAgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGVudihlbnZuYW1lKQogICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJuYW1lOiByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGRpcm5hbWUgaW4gY2FuZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRpcm5hbWUsIGNhbmQpCiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhkaXJuYW1lIGluIGNhbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRpcm5hbWUsIGNhbmQpCiAKICAgICAgICAgICAgICMgTm90IHByYWN0aWNhbCB0byB0cnkgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBPUy1zcGVjaWZpYwogICAgICAgICAgICAgIyBwYXRocyBpbiB0aGlzIGxpc3QuCkBAIC0xODQsMTQgKzE4MCwxNCBAQAogICAgIGRlZiB0ZXN0X3JldHZhbChzZWxmKToKICAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyByZXR1cm5zIGEgX1JhbmRvbU5hbWVTZXF1ZW5jZSBvYmplY3QKICAgICAgICAgb2JqID0gdGVtcGZpbGUuX2dldF9jYW5kaWRhdGVfbmFtZXMoKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShvYmosIHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLCB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKQogCiAgICAgZGVmIHRlc3Rfc2FtZV90aGluZyhzZWxmKToKICAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QKICAgICAgICAgYSA9IHRlbXBmaWxlLl9nZXRfY2FuZGlkYXRlX25hbWVzKCkKICAgICAgICAgYiA9IHRlbXBmaWxlLl9nZXRfY2FuZGlkYXRlX25hbWVzKCkKIAotICAgICAgICBzZWxmLmFzc2VydF8oYSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQogCiB0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfX2dldF9jYW5kaWRhdGVfbmFtZXMpCiAKQEAgLTI1NCwxMiArMjUwLDEyIEBACiAgICAgZGVmIHRlc3RfZmlsZV9tb2RlKHNlbGYpOgogICAgICAgICAjIF9ta3N0ZW1wX2lubmVyIGNyZWF0ZXMgZmlsZXMgd2l0aCB0aGUgcHJvcGVyIG1vZGUKICAgICAgICAgaWYgbm90IGhhc19zdGF0OgotICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBUZXN0U2tpcHBlZC4KKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCiAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGZpbGUubmFtZSkuc3RfbW9kZSkKICAgICAgICAgZXhwZWN0ZWQgPSAwNjAwCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcsICdtYWMnKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CiAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOwogICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTI2OSw3ICsyNjUsNyBAQAogICAgIGRlZiB0ZXN0X25vaW5oZXJpdChzZWxmKToKICAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBmaWxlIGhhbmRsZXMgYXJlIG5vdCBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzCiAgICAgICAgIGlmIG5vdCBoYXNfc3Bhd25sOgotICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgIyB1Z2gsIGNhbid0IHVzZSBUZXN0U2tpcHBlZC4KKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCiAKICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICB2PSJ2IgpAQCAtMzAwLDE0ICsyOTYsMTQgQEAKICAgICAgICAgICAgIGRlY29yYXRlZCA9IHN5cy5leGVjdXRhYmxlCiAKICAgICAgICAgcmV0dmFsID0gb3Muc3Bhd25sKG9zLlBfV0FJVCwgc3lzLmV4ZWN1dGFibGUsIGRlY29yYXRlZCwgdGVzdGVyLCB2LCBmZCkKLSAgICAgICAgc2VsZi5mYWlsSWYocmV0dmFsIDwgMCwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXR2YWwgPCAwLAogICAgICAgICAgICAgICAgICAgICAiY2hpbGQgcHJvY2VzcyBjYXVnaHQgZmF0YWwgc2lnbmFsICVkIiAlIC1yZXR2YWwpCi0gICAgICAgIHNlbGYuZmFpbElmKHJldHZhbCA+IDAsICJjaGlsZCBwcm9jZXNzIHJlcG9ydHMgZmFpbHVyZSAlZCIlcmV0dmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldHZhbCA+IDAsICJjaGlsZCBwcm9jZXNzIHJlcG9ydHMgZmFpbHVyZSAlZCIlcmV0dmFsKQogCiAgICAgZGVmIHRlc3RfdGV4dG1vZGUoc2VsZik6CiAgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBmaWxlcyBpbiB0ZXh0IG1vZGUKICAgICAgICAgaWYgbm90IGhhc190ZXh0bW9kZToKLSAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgVGVzdFNraXBwZWQuCisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFNraXBUZXN0LgogCiAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGJpbj0wKS53cml0ZSgiYmxhdFxuIikKICAgICAgICAgIyBYWFggc2hvdWxkIHRlc3QgdGhhdCB0aGUgZmlsZSByZWFsbHkgaXMgYSB0ZXh0IGZpbGUKQEAgLTMyMiw4ICszMTgsOCBAQAogICAgICAgICAjIGdldHRlbXBwcmVmaXggcmV0dXJucyBhIG5vbmVtcHR5IHByZWZpeCBzdHJpbmcKICAgICAgICAgcCA9IHRlbXBmaWxlLmdldHRlbXBwcmVmaXgoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHAsIGJhc2VzdHJpbmcpKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHApID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocCkgPiAwKQogCiAgICAgZGVmIHRlc3RfdXNhYmxlX3RlbXBsYXRlKHNlbGYpOgogICAgICAgICAjIGdldHRlbXBwcmVmaXggcmV0dXJucyBhIHVzYWJsZSBwcmVmaXggc3RyaW5nCkBAIC0zNTQsOSArMzUwLDkgQEAKICAgICAgICAgIyBnZXR0ZW1wZGlyIHJldHVybnMgYSBkaXJlY3Rvcnkgd2hpY2ggZXhpc3RzCiAKICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmlzYWJzKGRpcikgb3IgZGlyID09IG9zLmN1cmRpciwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMoZGlyKSBvciBkaXIgPT0gb3MuY3VyZGlyLAogICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIiAlIGRpcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG9zLnBhdGguaXNkaXIoZGlyKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZGlyKSwKICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYSBkaXJlY3RvcnkiICUgZGlyKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X3dyaXRhYmxlKHNlbGYpOgpAQCAtMzc3LDcgKzM3Myw3IEBACiAgICAgICAgIGEgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgYiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAKIHRlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9nZXR0ZW1wZGlyKQogCkBAIC00NzEsMTQgKzQ2NywxNCBAQAogICAgIGRlZiB0ZXN0X21vZGUoc2VsZik6CiAgICAgICAgICMgbWtkdGVtcCBjcmVhdGVzIGRpcmVjdG9yaWVzIHdpdGggdGhlIHByb3BlciBtb2RlCiAgICAgICAgIGlmIG5vdCBoYXNfc3RhdDoKLSAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgVGVzdFNraXBwZWQuCisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFNraXBUZXN0LgogCiAgICAgICAgIGRpciA9IHNlbGYuZG9fY3JlYXRlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGRpcikuc3RfbW9kZSkKICAgICAgICAgICAgIG1vZGUgJj0gMDc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMDcwMAotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14JywgJ21hYycpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTU4MCw3ICs1NzYsNyBAQAogICAgIGRlZiB0ZXN0X2NyZWF0ZXNfbmFtZWQoc2VsZik6CiAgICAgICAgICMgTmFtZWRUZW1wb3JhcnlGaWxlIGNyZWF0ZXMgZmlsZXMgd2l0aCBuYW1lcwogICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBmLm5hbWUpCiAKICAgICBkZWYgdGVzdF9kZWxfb25fY2xvc2Uoc2VsZik6CkBAIC01OTAsNyArNTg2LDcgQEAKICAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGlyPWRpcikKICAgICAgICAgICAgIGYud3JpdGUoJ2JsYXQnKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxJZihvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSAlcyBleGlzdHMgYWZ0ZXIgY2xvc2UiICUgZi5uYW1lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQpAQCAtNjA0LDcgKzYwMCw3IEBACiAgICAgICAgICAgICB0bXAgPSBmLm5hbWUKICAgICAgICAgICAgIGYud3JpdGUoJ2JsYXQnKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5leGlzdHMoZi5uYW1lKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSAlcyBtaXNzaW5nIGFmdGVyIGNsb3NlIiAlIGYubmFtZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHRtcCBpcyBub3QgTm9uZToKQEAgLTYyNSwxMiArNjIxLDEyIEBACiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICAjIEEgTmFtZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCiAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmV4aXN0cyhmLm5hbWUpKQotICAgICAgICBzZWxmLmZhaWxJZihvcy5wYXRoLmV4aXN0cyhmLm5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYubmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZi5uYW1lKSkKICAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKICAgICAgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQogCiAgICAgIyBIb3cgdG8gdGVzdCB0aGUgbW9kZSBhbmQgYnVmc2l6ZSBwYXJhbWV0ZXJzPwogCkBAIC02NTMsMjEgKzY0OSwyMSBAQAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBjcmVhdGUgZmlsZXMKICAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKCkKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKICAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTEwMCwgcHJlPSJhIiwgc3VmPSIudHh0IikKLSAgICAgICAgc2VsZi5mYWlsSWYoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKIAogICAgIGRlZiB0ZXN0X2RlbF9vbl9jbG9zZShzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGlzIGRlbGV0ZWQgd2hlbiBjbG9zZWQKICAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xMCwgZGlyPWRpcikKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICAgICAgZi53cml0ZSgnYmxhdCAnICogNSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQogICAgICAgICAgICAgZmlsZW5hbWUgPSBmLm5hbWUKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYob3MucGF0aC5leGlzdHMoZmlsZW5hbWUpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAiU3Bvb2xlZFRlbXBvcmFyeUZpbGUgJXMgZXhpc3RzIGFmdGVyIGNsb3NlIiAlIGZpbGVuYW1lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQpAQCAtNjc1LDQ2ICs2NzEsNDYgQEAKICAgICBkZWYgdGVzdF9yZXdyaXRlX3NtYWxsKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHdyaXR0ZW4gdG8gbXVsdGlwbGUgd2l0aGluIHRoZSBtYXhfc2l6ZQogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgZi5zZWVrKDAsIDApCiAgICAgICAgICAgICBmLndyaXRlKCd4JyAqIDIwKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfc2VxdWVudGlhbChzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIHNob3VsZCBob2xkIGV4YWN0bHkgbWF4X3NpemUgYnl0ZXMsIGFuZCByb2xsCiAgICAgICAgICMgb3ZlciBhZnRlcndhcmQKICAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTMwKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICBmLndyaXRlKCd4JyAqIDIwKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICBmLndyaXRlKCd4JyAqIDEwKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICBmLndyaXRlKCd4JykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKIAogICAgIGRlZiB0ZXN0X3NwYXJzZShzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIHRoYXQgaXMgd3JpdHRlbiBsYXRlIGluIHRoZSBmaWxlIHdpbGwgZXh0ZW5kCiAgICAgICAgICMgd2hlbiB0aGF0IG9jY3VycwogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYuc2VlaygxMDAsIDApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCiAgICAgICAgIGYud3JpdGUoJ3gnKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQogCiAgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgc2hvdWxkIHJvbGwgb3ZlciB0byBhIHJlYWwgZmlsZSBvbiBmaWxlbm8oKQogICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCi0gICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuZmlsZW5vKCkgPiAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZmlsZW5vKCkgPiAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2xvc2VfYmVmb3JlX3JvbGxvdmVyKHNlbGYpOgogICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIGNsb3NlZCBtYW55IHRpbWVzIHdpdGhvdXQgZXJyb3IKICAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKCkKICAgICAgICAgZi53cml0ZSgnYWJjXG4nKQotICAgICAgICBzZWxmLmZhaWxJZihmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi5jbG9zZSgpCkBAIC03MjYsNyArNzIyLDcgQEAKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSBjbG9zZWQgbWFueSB0aW1lcyB3aXRob3V0IGVycm9yCiAgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xKQogICAgICAgICBmLndyaXRlKCdhYmNcbicpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLl9yb2xsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKQEAgLTc0Niw0NiArNzQyLDQ2IEBACiAgICAgICAgIHdyaXRlKCJhIiAqIDM1KQogICAgICAgICB3cml0ZSgiYiIgKiAzNSkKICAgICAgICAgc2VlaygwLCAwKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVhZCg3MCkgPT0gJ2EnKjM1ICsgJ2InKjM1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZCg3MCkgPT0gJ2EnKjM1ICsgJ2InKjM1KQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2JlZm9yZV9yb2xsb3ZlcihzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCiAgICAgICAgIHdpdGggdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MSkgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuY2xvc2VkKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5jbG9zZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKICAgICAgICAgICAgIHdpdGggZjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2R1cmluZ19yb2xsb3ZlcihzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCiAgICAgICAgIHdpdGggdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MSkgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQogICAgICAgICAgICAgZi53cml0ZSgnYWJjXG4nKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5fcm9sbGVkKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYoZi5jbG9zZWQpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhmLmNsb3NlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAgICAgICAgIGRlZiB1c2VfY2xvc2VkKCk6CiAgICAgICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmZhaWxVbmxlc3NSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9hZnRlcl9yb2xsb3ZlcihzZWxmKToKICAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyCiAgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xKQogICAgICAgICBmLndyaXRlKCdhYmNcbicpCiAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQogICAgICAgICB3aXRoIGY6Ci0gICAgICAgICAgICBzZWxmLmZhaWxJZihmLmNsb3NlZCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGYuY2xvc2VkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgogICAgICAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCiAKIAogdGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X1Nwb29sZWRUZW1wb3JhcnlGaWxlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weSBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKaW5kZXggYzkxZTI0Mi4uNjNhNTRkOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAKIAogICAgIGRlZiBjaGVjayhzZWxmLCByZXN1bHQsIGV4cGVjdCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3VsdCwgZXhwZWN0LAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0LAogICAgICAgICAgICAgJ2V4cGVjdGVkOlxuJXNcbmJ1dCBnb3Q6XG4lcycgJSAoCiAgICAgICAgICAgICAgICAgc2VsZi5zaG93KGV4cGVjdCksIHNlbGYuc2hvdyhyZXN1bHQpKSkKIApAQCAtMzksOSArMzksOSBAQAogCiAgICAgZGVmIGNoZWNrX3NwbGl0KHNlbGYsIHRleHQsIGV4cGVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYud3JhcHBlci5fc3BsaXQodGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0LCBleHBlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJcbmV4cGVjdGVkICVyXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgZ290ICAlciIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJcbmV4cGVjdGVkICVyXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCBnb3QgICVyIiAlIChleHBlY3QsIHJlc3VsdCkpCiAKIAogY2xhc3MgV3JhcFRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CkBAIC0zNDksOSArMzQ5LDEwIEBACiAgICAgICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNTAsIFt1IkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0b2RheT8iXSkKICAgICAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyMCwgW3UiSGVsbG8gdGhlcmUsIGhvdyBhcmUiLCAieW91IHRvZGF5PyJdKQogICAgICAgICAgICAgb2xpbmVzID0gc2VsZi53cmFwcGVyLndyYXAodGV4dCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9saW5lcywgbGlzdCkgYW5kIGlzaW5zdGFuY2Uob2xpbmVzWzBdLCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9saW5lcywgbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvbGluZXNbMF0sIHVuaWNvZGUpCiAgICAgICAgICAgICBvdGV4dCA9IHNlbGYud3JhcHBlci5maWxsKHRleHQpCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdGV4dCwgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvdGV4dCwgdW5pY29kZSkKIAogICAgICAgICBkZWYgdGVzdF9ub19zcGxpdF9hdF91bWxhdXQoc2VsZik6CiAgICAgICAgICAgICB0ZXh0ID0gdSJEaWUgRW1wZlx4ZTRuZ2VyLUF1c3dhaGwiCkBAIC01MDMsNyArNTA0LDcgQEAKIAogICAgIGRlZiBhc3NlcnRVbmNoYW5nZWQoc2VsZiwgdGV4dCk6CiAgICAgICAgICIiImFzc2VydCB0aGF0IGRlZGVudCgpIGhhcyBubyBlZmZlY3Qgb24gJ3RleHQnIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRleHQsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBkZWRlbnQodGV4dCkpCiAKICAgICBkZWYgdGVzdF9kZWRlbnRfbm9tYXJnaW4oc2VsZik6CiAgICAgICAgICMgTm8gbGluZXMgaW5kZW50ZWQuCkBAIC01MjYsMTcgKzUyNywxNyBAQAogICAgICAgICAjIEFsbCBsaW5lcyBpbmRlbnRlZCBieSB0d28gc3BhY2VzLgogICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG4gIEhvdyBhcmUgeWE/XG4gIE9oIGdvb2QuIgogICAgICAgICBleHBlY3QgPSAiSGVsbG8gdGhlcmUuXG5Ib3cgYXJlIHlhP1xuT2ggZ29vZC4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgICAgICMgU2FtZSwgd2l0aCBibGFuayBsaW5lcy4KICAgICAgICAgdGV4dCA9ICIgIEhlbGxvIHRoZXJlLlxuXG4gIEhvdyBhcmUgeWE/XG4gIE9oIGdvb2QuXG4iCiAgICAgICAgIGV4cGVjdCA9ICJIZWxsbyB0aGVyZS5cblxuSG93IGFyZSB5YT9cbk9oIGdvb2QuXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgICAgICMgTm93IGluZGVudCBvbmUgb2YgdGhlIGJsYW5rIGxpbmVzLgogICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG4gIFxuICBIb3cgYXJlIHlhP1xuICBPaCBnb29kLlxuIgogICAgICAgICBleHBlY3QgPSAiSGVsbG8gdGhlcmUuXG5cbkhvdyBhcmUgeWE/XG5PaCBnb29kLlxuIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgIGRlZiB0ZXN0X2RlZGVudF91bmV2ZW4oc2VsZik6CiAgICAgICAgICMgTGluZXMgaW5kZW50ZWQgdW5ldmVubHkuCkBAIC01NTAsMjcgKzU1MSwyNyBAQAogICAgIHdoaWxlIDE6CiAgICAgICAgIHJldHVybiBmb28KICcnJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgICAgICAjIFVuZXZlbiBpbmRlbnRhdGlvbiB3aXRoIGEgYmxhbmsgbGluZS4KICAgICAgICAgdGV4dCA9ICIgIEZvb1xuICAgIEJhclxuXG4gICBCYXpcbiIKICAgICAgICAgZXhwZWN0ID0gIkZvb1xuICBCYXJcblxuIEJhelxuIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudCh0ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAogICAgICAgICAjIFVuZXZlbiBpbmRlbnRhdGlvbiB3aXRoIGEgd2hpdGVzcGFjZS1vbmx5IGxpbmUuCiAgICAgICAgIHRleHQgPSAiICBGb29cbiAgICBCYXJcbiBcbiAgIEJhelxuIgogICAgICAgICBleHBlY3QgPSAiRm9vXG4gIEJhclxuXG4gQmF6XG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgIyBkZWRlbnQoKSBzaG91bGQgbm90IG1hbmdsZSBpbnRlcm5hbCB0YWJzCiAgICAgZGVmIHRlc3RfZGVkZW50X3ByZXNlcnZlX2ludGVybmFsX3RhYnMoc2VsZik6CiAgICAgICAgIHRleHQgPSAiICBoZWxsb1x0dGhlcmVcbiAgaG93IGFyZVx0eW91PyIKICAgICAgICAgZXhwZWN0ID0gImhlbGxvXHR0aGVyZVxuaG93IGFyZVx0eW91PyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBpdCBwcmVzZXJ2ZXMgdGFicyB3aGVuIGl0J3Mgbm90IG1ha2luZyBhbnkKICAgICAgICAgIyBjaGFuZ2VzIGF0IGFsbAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3QsIGRlZGVudChleHBlY3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KGV4cGVjdCkpCiAKICAgICAjIGRlZGVudCgpIHNob3VsZCBub3QgbWFuZ2xlIHRhYnMgaW4gdGhlIG1hcmdpbiAoaS5lLgogICAgICMgdGFicyBhbmQgc3BhY2VzIGJvdGggY291bnQgYXMgbWFyZ2luLCBidXQgYXJlICpub3QqCkBAIC01ODYsMTcgKzU4NywxNyBAQAogICAgICAgICAjIGRlZGVudCgpIG9ubHkgcmVtb3ZlcyB3aGl0ZXNwYWNlIHRoYXQgY2FuIGJlIHVuaWZvcm1seSByZW1vdmVkIQogICAgICAgICB0ZXh0ID0gIlx0aGVsbG8gdGhlcmVcblx0aG93IGFyZSB5b3U/IgogICAgICAgICBleHBlY3QgPSAiaGVsbG8gdGhlcmVcbmhvdyBhcmUgeW91PyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgdGV4dCA9ICIgIFx0aGVsbG8gdGhlcmVcbiAgXHRob3cgYXJlIHlvdT8iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdCwgZGVkZW50KHRleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQogCiAgICAgICAgIHRleHQgPSAiICBcdCAgaGVsbG8gdGhlcmVcbiAgXHQgIGhvdyBhcmUgeW91PyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKICAgICAgICAgdGV4dCA9ICIgIFx0aGVsbG8gdGhlcmVcbiAgXHQgIGhvdyBhcmUgeW91PyIKICAgICAgICAgZXhwZWN0ID0gImhlbGxvIHRoZXJlXG4gIGhvdyBhcmUgeW91PyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCA0ZDJjMDZlLi41NDRlNzBkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtMiw5ICsyLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCByYW5kb20KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1pbXBvcnQgdGhyZWFkCit0aHJlYWQgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkJykKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgogCiBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIApAQCAtNjQsMTAgKzY1LDEwIEBACiAKICAgICBkZWYgdGVzdF9zdGFja19zaXplKHNlbGYpOgogICAgICAgICAjIFZhcmlvdXMgc3RhY2sgc2l6ZSB0ZXN0cy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgImludGlhbCBzdGFjayBzaXplIGlzIG5vdCAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAiaW5pdGlhbCBzdGFjayBzaXplIGlzIG5vdCAwIikKIAogICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAic3RhY2tfc2l6ZSBub3QgcmVzZXQgdG8gZGVmYXVsdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgInN0YWNrX3NpemUgbm90IHJlc2V0IHRvIGRlZmF1bHQiKQogCiAgICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4Iik6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTg3LDcgKzg4LDcgQEAKICAgICAgICAgICAgIGZhaWxfbXNnID0gInN0YWNrX3NpemUoJWQpIGZhaWxlZCAtIHNob3VsZCBzdWNjZWVkIgogICAgICAgICAgICAgZm9yIHRzcyBpbiAoMjYyMTQ0LCAweDEwMDAwMCwgMCk6CiAgICAgICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUodHNzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHRocmVhZC5zdGFja19zaXplKCksIHRzcywgZmFpbF9tc2cgJSB0c3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCB0c3MsIGZhaWxfbXNnICUgdHNzKQogICAgICAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoInN1Y2Nlc3NmdWxseSBzZXQgc3RhY2tfc2l6ZSglZCkiICUgdHNzKQogCiAgICAgICAgICAgICBmb3IgdHNzIGluICgyNjIxNDQsIDB4MTAwMDAwKToKQEAgLTEwMyw2ICsxMDQsMzIgQEAKIAogICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoMCkKIAorICAgIGRlZiB0ZXN0X19jb3VudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBfY291bnQoKSBmdW5jdGlvbi4KKyAgICAgICAgb3JpZyA9IHRocmVhZC5fY291bnQoKQorICAgICAgICBtdXQgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIG11dC5hY3F1aXJlKCkKKyAgICAgICAgc3RhcnRlZCA9IFtdCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBzdGFydGVkLmFwcGVuZChOb25lKQorICAgICAgICAgICAgbXV0LmFjcXVpcmUoKQorICAgICAgICAgICAgbXV0LnJlbGVhc2UoKQorICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKyAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLl9jb3VudCgpLCBvcmlnICsgMSkKKyAgICAgICAgIyBBbGxvdyB0aGUgdGFzayB0byBmaW5pc2guCisgICAgICAgIG11dC5yZWxlYXNlKCkKKyAgICAgICAgIyBUaGUgb25seSByZWxpYWJsZSB3YXkgdG8gYmUgc3VyZSB0aGF0IHRoZSB0aHJlYWQgZW5kZWQgZnJvbSB0aGUKKyAgICAgICAgIyBpbnRlcnByZXRlcidzIHBvaW50IG9mIHZpZXcgaXMgdG8gd2FpdCBmb3IgdGhlIGZ1bmN0aW9uIG9iamVjdCB0byBiZQorICAgICAgICAjIGRlc3Ryb3llZC4KKyAgICAgICAgZG9uZSA9IFtdCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodGFzaywgbGFtYmRhIF86IGRvbmUuYXBwZW5kKE5vbmUpKQorICAgICAgICBkZWwgdGFzaworICAgICAgICB3aGlsZSBub3QgZG9uZToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuX2NvdW50KCksIG9yaWcpCisKIAogY2xhc3MgQmFycmllcjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3RocmVhZHMpOgpAQCAtMTc0LDcgKzIwMSwxMCBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5yZWFkX2ZkLCBzZWxmLndyaXRlX2ZkID0gb3MucGlwZSgpCiAKLSAgICBkZWYgX3Rlc3RfZm9ya2ludGhyZWFkKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAorICAgICAgICAgICAgICAgICAgICAgIlRoaXMgdGVzdCBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciBQT1NJWC1saWtlIHN5c3RlbXMuIikKKyAgICBAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2ZvcmtpbnRocmVhZChzZWxmKToKICAgICAgICAgZGVmIHRocmVhZDEoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkgIyBmb3JrIGluIGEgdGhyZWFkCkBAIC0xOTIsOSArMjIyLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKHNlbGYucmVhZF9mZCwgMiksICJPSyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmb3JrKCkgaW4gdGhyZWFkIikKIAotICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgIHRlc3RfZm9ya2ludGhyZWFkID0gX3Rlc3RfZm9ya2ludGhyZWFkCi0KICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYucmVhZF9mZCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKaW5kZXggNjAyYWQyYS4uYjMxZmRmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKQEAgLTUsOCArNSw5IEBACiAjIGNvbXBsYWlucyBzZXZlcmFsIHRpbWVzIGFib3V0IG1vZHVsZSByYW5kb20gaGF2aW5nIG5vIGF0dHJpYnV0ZQogIyByYW5kcmFuZ2UsIGFuZCB0aGVuIFB5dGhvbiBoYW5ncy4KIAotaW1wb3J0IHRocmVhZAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdFNraXBwZWQsIFRlc3RGYWlsZWQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdEZhaWxlZCwgaW1wb3J0X21vZHVsZQordGhyZWFkID0gaW1wb3J0X21vZHVsZSgndGhyZWFkJykKIAogY3JpdGljYWxfc2VjdGlvbiA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKIGRvbmUgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgaW1wb3J0IGltcAogICAgIGlmIGltcC5sb2NrX2hlbGQoKToKICAgICAgICAgIyBUaGlzIHRyaWdnZXJzIG9uLCBlLmcuLCBmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0LgotICAgICAgICByYWlzZSBUZXN0U2tpcHBlZCgiY2FuJ3QgcnVuIHdoZW4gaW1wb3J0IGxvY2sgaXMgaGVsZCIpCisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW4ndCBydW4gd2hlbiBpbXBvcnQgbG9jayBpcyBoZWxkIikKIAogICAgIGRvbmUuYWNxdWlyZSgpCiAgICAgZm9yIE4gaW4gKDIwLCA1MCkgKiAzOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CmluZGV4IDc1M2YzODguLjgxZDk2ODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKQEAgLTE2LDExICsxNiwxMCBAQAogTlVNX1RIUkVBRFMgPSAyMAogRklMRVNfUEVSX1RIUkVBRCA9IDUwCiAKLWltcG9ydCB0aHJlYWQgIyBJZiB0aGlzIGZhaWxzLCB3ZSBjYW4ndCB0ZXN0IHRoaXMgbW9kdWxlCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGVtcGZpbGUKIAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdGhyZWFkaW5nX3NldHVwLCB0aHJlYWRpbmdfY2xlYW51cCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB0aHJlYWRpbmdfc2V0dXAsIHRocmVhZGluZ19jbGVhbnVwLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK3RocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBTdHJpbmdJTwogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IHByaW50X2V4YwpAQCAtNjksOCArNjgsOCBAQAogCiAgICAgICAgIG1zZyA9ICJFcnJvcnM6IGVycm9ycyAlZCBvayAlZFxuJXMiICUgKGxlbihlcnJvcnMpLCBvaywKICAgICAgICAgICAgICdcbicuam9pbihlcnJvcnMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhlcnJvcnMsIFtdLCBtc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9rLCBOVU1fVEhSRUFEUyAqIEZJTEVTX1BFUl9USFJFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JzLCBbXSwgbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9rLCBOVU1fVEhSRUFEUyAqIEZJTEVTX1BFUl9USFJFQUQpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGhyZWFkZWRUZW1wRmlsZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CmluZGV4IDA1NGRmN2IuLjZmMTc0YTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CkBAIC01LDExICs1LDEzIEBACiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB0aHJlYWQKK3RocmVhZCA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCit0aHJlYWRpbmcgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKQEAgLTQzLDcgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLm5ydW5uaW5nLmluYygpCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgc2VsZi5ucnVubmluZy5nZXQoKSwgJ3Rhc2tzIGFyZSBydW5uaW5nJwotICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0XyhzZWxmLm5ydW5uaW5nLmdldCgpIDw9IDMpCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRUcnVlKHNlbGYubnJ1bm5pbmcuZ2V0KCkgPD0gMykKIAogICAgICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC01MSwxMiArNTMsMjEgQEAKIAogICAgICAgICAgICAgd2l0aCBzZWxmLm11dGV4OgogICAgICAgICAgICAgICAgIHNlbGYubnJ1bm5pbmcuZGVjKCkKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlLmFzc2VydF8oc2VsZi5ucnVubmluZy5nZXQoKSA+PSAwKQorICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0VHJ1ZShzZWxmLm5ydW5uaW5nLmdldCgpID49IDApCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyVzIGlzIGZpbmlzaGVkLiAlZCB0YXNrcyBhcmUgcnVubmluZycgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIHNlbGYubnJ1bm5pbmcuZ2V0KCkpCiAKLWNsYXNzIFRocmVhZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdC50ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2NsYXNzIFRocmVhZFRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAKICAgICAjIENyZWF0ZSBhIGJ1bmNoIG9mIHRocmVhZHMsIGxldCBlYWNoIGRvIHNvbWUgd29yaywgd2FpdCB1bnRpbCBhbGwgYXJlCiAgICAgIyBkb25lLgpAQCAtNzUsMTggKzg2LDE4IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTVRBU0tTKToKICAgICAgICAgICAgIHQgPSBUZXN0VGhyZWFkKCI8dGhyZWFkICVkPiIlaSwgc2VsZiwgc2VtYSwgbXV0ZXgsIG51bXJ1bm5pbmcpCiAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodC5pZGVudCwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhyZS5tYXRjaCgnPFRlc3RUaHJlYWRcKC4qLCBpbml0aWFsXCk+JywgcmVwcih0KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaWRlbnQsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxUZXN0VGhyZWFkXCguKiwgaW5pdGlhbFwpPicsIHJlcHIodCkpKQogICAgICAgICAgICAgdC5zdGFydCgpCiAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnCiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oTlVNVEFTS1MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obm90IHQuaXNfYWxpdmUoKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmRXF1YWwodC5pZGVudCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5pc19hbGl2ZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0LmlkZW50LCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlkZW50IGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocmUubWF0Y2goJzxUZXN0VGhyZWFkXCguKiwgXHcrIC0/XGQrXCk+JywgcmVwcih0KSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxUZXN0VGhyZWFkXCguKiwgXHcrIC0/XGQrXCk+JywgcmVwcih0KSkpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAnYWxsIHRhc2tzIGRvbmUnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtcnVubmluZy5nZXQoKSwgMCkKQEAgLTE0NCw5ICsxNTUsOCBAQAogICAgICAgICB0aWQgPSB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChmLCAobXV0ZXgsKSkKICAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGZpbmlzaC4KICAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0aWQgaW4gdGhyZWFkaW5nLl9hY3RpdmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHRocmVhZGluZy5fYWN0aXZlW3RpZF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fRHVtbXlUaHJlYWQpKQorICAgICAgICBzZWxmLmFzc2VydEluKHRpZCwgdGhyZWFkaW5nLl9hY3RpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aHJlYWRpbmcuX2FjdGl2ZVt0aWRdLCB0aHJlYWRpbmcuX0R1bW15VGhyZWFkKQogICAgICAgICBkZWwgdGhyZWFkaW5nLl9hY3RpdmVbdGlkXQogCiAgICAgIyBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKCkgaXMgYSBDUHl0aG9uLW9ubHkgZ2ltbWljaywgbm90IChjdXJyZW50bHkpCkBAIC0xNjYsNiArMTc2LDI3IEBACiAKICAgICAgICAgZXhjZXB0aW9uID0gY3R5cGVzLnB5X29iamVjdChBc3luY0V4YykKIAorICAgICAgICAjIEZpcnN0IGNoZWNrIGl0IHdvcmtzIHdoZW4gc2V0dGluZyB0aGUgZXhjZXB0aW9uIGZyb20gdGhlIHNhbWUgdGhyZWFkLgorICAgICAgICB0aWQgPSB0aHJlYWQuZ2V0X2lkZW50KCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBzZXRfYXN5bmNfZXhjKGN0eXBlcy5jX2xvbmcodGlkKSwgZXhjZXB0aW9uKQorICAgICAgICAgICAgIyBUaGUgZXhjZXB0aW9uIGlzIGFzeW5jLCBzbyB3ZSBtaWdodCBoYXZlIHRvIGtlZXAgdGhlIFZNIGJ1c3kgdW50aWwKKyAgICAgICAgICAgICMgaXQgbm90aWNlcy4KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgQXN5bmNFeGM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBidXQgaXQgcmVmbGVjdHMgdGhlIGludGVudC4gSWYgd2Ugd2FudGVkCisgICAgICAgICAgICAjIHRvIGJlIHNtYXJ0ZXIgdGhlIGFib3ZlIGxvb3Agd291bGRuJ3QgYmUgaW5maW5pdGUuCisgICAgICAgICAgICBzZWxmLmZhaWwoIkFzeW5jRXhjIG5vdCByYWlzZWQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkgIyBvbmUgdGhyZWFkIHN0YXRlIG1vZGlmaWVkCisgICAgICAgIGV4Y2VwdCBVbmJvdW5kTG9jYWxFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHRvbyBxdWlja2x5IGZvciB1cyB0byBnZXQgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAjIGB3b3JrZXJfc3RhcnRlZGAgaXMgc2V0IGJ5IHRoZSB0aHJlYWQgd2hlbiBpdCdzIGluc2lkZSBhIHRyeS9leGNlcHQKICAgICAgICAgIyBibG9jayB3YWl0aW5nIHRvIGNhdGNoIHRoZSBhc3luY2hyb25vdXNseSBzZXQgQXN5bmNFeGMgZXhjZXB0aW9uLgogICAgICAgICAjIGB3b3JrZXJfc2F3X2V4Y2VwdGlvbmAgaXMgc2V0IGJ5IHRoZSB0aHJlYWQgdXBvbiBjYXRjaGluZyB0aGF0CkBAIC0yMDEsMTAgKzIzMiwxMSBAQAogICAgICAgICAjIE5vdyByYWlzZSBhbiBleGNlcHRpb24gaW4gdGhlIHdvcmtlciB0aHJlYWQuCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAiICAgIHdhaXRpbmcgZm9yIHdvcmtlciB0aHJlYWQgdG8gZ2V0IHN0YXJ0ZWQiCi0gICAgICAgIHdvcmtlcl9zdGFydGVkLndhaXQoKQorICAgICAgICByZXQgPSB3b3JrZXJfc3RhcnRlZC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIgICAgdmVyaWZ5aW5nIHdvcmtlciBoYXNuJ3QgZXhpdGVkIgotICAgICAgICBzZWxmLmFzc2VydF8obm90IHQuZmluaXNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdC5maW5pc2hlZCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIgICAgYXR0ZW1wdGluZyB0byByYWlzZSBhc3luY2ggZXhjZXB0aW9uIGluIHdvcmtlciIKICAgICAgICAgcmVzdWx0ID0gc2V0X2FzeW5jX2V4YyhjdHlwZXMuY19sb25nKHQuaWQpLCBleGNlcHRpb24pCkBAIC0yMTIsNyArMjQ0LDcgQEAKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50ICIgICAgd2FpdGluZyBmb3Igd29ya2VyIHRvIHNheSBpdCBjYXVnaHQgdGhlIGV4Y2VwdGlvbiIKICAgICAgICAgd29ya2VyX3Nhd19leGNlcHRpb24ud2FpdCh0aW1lb3V0PTEwKQotICAgICAgICBzZWxmLmFzc2VydF8odC5maW5pc2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZmluaXNoZWQpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCAiICAgIGFsbCBPSyAtLSBqb2luaW5nIHdvcmtlciIKICAgICAgICAgaWYgdC5maW5pc2hlZDoKQEAgLTI0NSw3ICsyNzcsNiBAQAogICAgICAgICAgICAgICAgIHByaW50KCJ0ZXN0X2ZpbmFsaXplX3dpdGhfcnVubm5pbmdfdGhyZWFkIGNhbid0IGltcG9ydCBjdHlwZXMiKQogICAgICAgICAgICAgcmV0dXJuICAjIGNhbid0IGRvIGFueXRoaW5nCiAKLSAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgogICAgICAgICAgICAgaW1wb3J0IGN0eXBlcywgc3lzLCB0aW1lLCB0aHJlYWQKIApAQCAtMjc2LDggKzMwNyw3IEBACiAgICAgZGVmIHRlc3RfZmluYWxpemVfd2l0aF90cmFjZShzZWxmKToKICAgICAgICAgIyBJc3N1ZTE3MzM3NTcKICAgICAgICAgIyBBdm9pZCBhIGRlYWRsb2NrIHdoZW4gc3lzLnNldHRyYWNlIHN0ZXBzIGludG8gdGhyZWFkaW5nLl9zaHV0ZG93bgotICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwotICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgMToKICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRocmVhZGluZwogCiAgICAgICAgICAgICAjIEEgZGVhZGxvY2sta2lsbGVyLCB0byBwcmV2ZW50IHRoZQpAQCAtMjk3LDE0ICszMjcsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYwogCiAgICAgICAgICAgICBzeXMuc2V0dHJhY2UoZnVuYykKLSAgICAgICAgICAgICIiIl0pCi0gICAgICAgIHNlbGYuZmFpbElmKHJjID09IDIsICJpbnRlcnByZXRlZCB3YXMgYmxvY2tlZCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyYyA9PSAwLCAiVW5leHBlY3RlZCBlcnJvciIpCisgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICByYyA9IHAucmV0dXJuY29kZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJjID09IDIsICJpbnRlcnByZXRlZCB3YXMgYmxvY2tlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYyA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZXJyb3I6ICIgKyByZXByKHN0ZGVycikpCiAKICAgICBkZWYgdGVzdF9qb2luX25vbmRhZW1vbl9vbl9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzIyMzQ0CiAgICAgICAgICMgUmFpc2luZyBTeXN0ZW1FeGl0IHNraXBwZWQgdGhyZWFkaW5nLl9zaHV0ZG93bgotICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CiAgICAgICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZwogICAgICAgICAgICAgICAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKQEAgLTMyMCw2ICszNTYsOCBAQAogICAgICAgICAgICAgIiIiXSwKICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuc3RyaXAoKSwKICAgICAgICAgICAgICJXb2tlIHVwLCBzbGVlcCBmdW5jdGlvbiBpczogPGJ1aWx0LWluIGZ1bmN0aW9uIHNsZWVwPiIpCkBAIC0zNDAsNyArMzc4LDcgQEAKICAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgICAgIGwgPSBlbnVtKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQgaW4gbCwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHQsIGwsCiAgICAgICAgICAgICAgICAgICAgICIjMTcwMzQ0OCB0cmlnZ2VyZWQgYWZ0ZXIgJWQgdHJpYWxzOiAlcyIgJSAoaSwgbCkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChvbGRfaW50ZXJ2YWwpCkBAIC0zNjQsMjAgKzQwMiwyMCBAQAogICAgICAgICB3ZWFrX2N5Y2xpY19vYmplY3QgPSB3ZWFrcmVmLnJlZihjeWNsaWNfb2JqZWN0KQogICAgICAgICBjeWNsaWNfb2JqZWN0LnRocmVhZC5qb2luKCkKICAgICAgICAgZGVsIGN5Y2xpY19vYmplY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgd2Vha19jeWNsaWNfb2JqZWN0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oJyVkIHJlZmVyZW5jZXMgc3RpbGwgYXJvdW5kJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHJlZmNvdW50KHdlYWtfY3ljbGljX29iamVjdCgpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgd2Vha19jeWNsaWNfb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRyZWZjb3VudCh3ZWFrX2N5Y2xpY19vYmplY3QoKSkpKQogCiAgICAgICAgIHJhaXNpbmdfY3ljbGljX29iamVjdCA9IFJ1blNlbGZGdW5jdGlvbihzaG91bGRfcmFpc2U9VHJ1ZSkKICAgICAgICAgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QgPSB3ZWFrcmVmLnJlZihyYWlzaW5nX2N5Y2xpY19vYmplY3QpCiAgICAgICAgIHJhaXNpbmdfY3ljbGljX29iamVjdC50aHJlYWQuam9pbigpCiAgICAgICAgIGRlbCByYWlzaW5nX2N5Y2xpY19vYmplY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoTm9uZSwgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0cmVmY291bnQod2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHdlYWtfcmFpc2luZ19jeWNsaWNfb2JqZWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRyZWZjb3VudCh3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpKSkpCiAKIAotY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24oQmFzZVRlc3RDYXNlKToKIAogICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CiAgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CkBAIC0zODksMTMgKzQyNywxMyBAQAogICAgICAgICAgICAgICAgIHByaW50ICdlbmQgb2YgdGhyZWFkJwogICAgICAgICBcbiIiIiArIHNjcmlwdAogCi0gICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgcmMgPSBwLndhaXQoKQogICAgICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiZW5kIG9mIG1haW5cbmVuZCBvZiB0aHJlYWRcbiIpCi0gICAgICAgIHNlbGYuZmFpbElmKHJjID09IDIsICJpbnRlcnByZXRlciB3YXMgYmxvY2tlZCIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyYyA9PSAwLCAiVW5leHBlY3RlZCBlcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmMgPT0gMiwgImludGVycHJldGVyIHdhcyBibG9ja2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJjID09IDAsICJVbmV4cGVjdGVkIGVycm9yIikKIAogICAgIGRlZiB0ZXN0XzFfam9pbl9vbl9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBUaGUgdXN1YWwgY2FzZTogb24gZXhpdCwgd2FpdCBmb3IgYSBub24tZGFlbW9uIHRocmVhZApAQCAtNDM2LDcgKzQ3NCw4IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBTa2lwIHBsYXRmb3JtcyB3aXRoIGtub3duIHByb2JsZW1zIGZvcmtpbmcgZnJvbSBhIHdvcmtlciB0aHJlYWQuCiAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzODYzLgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICdvczJlbXgnKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnbmV0YnNkNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14Jyk6CiAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICgnU2tpcHBpbmcgdGVzdF8zX2pvaW5faW5fZm9ya2VkX2Zyb21fdGhyZWFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBkdWUgdG8ga25vd24gT1MgYnVncyBvbicpLCBzeXMucGxhdGZvcm0KICAgICAgICAgICAgIHJldHVybgpAQCAtNDU5LDggKzQ5OCwxNTQgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQogCisgICAgZGVmIGFzc2VydFNjcmlwdEhhc091dHB1dChzZWxmLCBzY3JpcHQsIGV4cGVjdGVkX291dHB1dCk6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcmMgPSBwLndhaXQoKQorICAgICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpLmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDAsICJVbmV4cGVjdGVkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9vdXRwdXQpCiAKLWNsYXNzIFRocmVhZGluZ0V4Y2VwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBkZWYgdGVzdF80X2pvaW5pbmdfYWNyb3NzX2ZvcmtfaW5fd29ya2VyX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlIGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiBmb3JraW5nIGZyb20gYSBjaGlsZAorICAgICAgICAjIHRocmVhZC4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjY0My4KKworICAgICAgICAjIFNraXAgcGxhdGZvcm1zIHdpdGgga25vd24gcHJvYmxlbXMgZm9ya2luZyBmcm9tIGEgd29ya2VyIHRocmVhZC4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4NjMuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ29zMmVteCcpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2R1ZSB0byBrbm93biBPUyBidWdzIG9uICcgKyBzeXMucGxhdGZvcm0pCisKKyAgICAgICAgIyBUaGUgc2NyaXB0IHRha2VzIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4KKyAgICAgICAgIyAgIHRyaWVzIHRvIGpvaW4gaXQuCisgICAgICAgICMgLSBUaGUgam9pbiBvcGVyYXRpb24gYWNxdWlyZXMgdGhlIExvY2sgaW5zaWRlIHRoZSB0aHJlYWQncyBfYmxvY2sKKyAgICAgICAgIyAgIENvbmRpdGlvbi4gIChTZWUgdGhyZWFkaW5nLnB5OlRocmVhZC5qb2luKCkuKQorICAgICAgICAjIC0gV2Ugc3R1YiBvdXQgdGhlIGFjcXVpcmUgbWV0aG9kIG9uIHRoZSBjb25kaXRpb24gdG8gZm9yY2UgaXQgdG8gd2FpdAorICAgICAgICAjICAgdW50aWwgdGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBBQ1FVSVJFRCBIRVJFKQorICAgICAgICAjIC0gVGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBIRUxEIGFuZCBXT1JLRVIgVEhSRUFEIEZPUktTCisgICAgICAgICMgICBIRVJFKQorICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBlbnRlcnMgQ29uZGl0aW9uLndhaXQoKSwKKyAgICAgICAgIyAgIHdoaWNoIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBjaGlsZCB0aHJlYWQuCisgICAgICAgICMgLSBUaGUgY2hpbGQgcHJvY2VzcyByZXR1cm5zLiAgV2l0aG91dCB0aGUgbmVjZXNzYXJ5IGZpeCwgd2hlbiB0aGUKKyAgICAgICAgIyAgIG1haW4gdGhyZWFkIG9mIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCB1c2VkIHRvIGJlIHRoZSBjaGlsZCB0aHJlYWQKKyAgICAgICAgIyAgIGluIHRoZSBwYXJlbnQgcHJvY2VzcykgYXR0ZW1wdHMgdG8gZXhpdCwgaXQgd2lsbCB0cnkgdG8gYWNxdWlyZSB0aGUKKyAgICAgICAgIyAgIGxvY2sgaW4gdGhlIFRocmVhZC5fYmxvY2sgQ29uZGl0aW9uIG9iamVjdCBhbmQgaGFuZywgYmVjYXVzZSB0aGUKKyAgICAgICAgIyAgIGxvY2sgd2FzIGhlbGQgYWNyb3NzIHRoZSBmb3JrLgorCisgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZworCisgICAgICAgICAgICBmaW5pc2hfam9pbiA9IEZhbHNlCisgICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgZGVhZGxvY2suCisgICAgICAgICAgICAgICAgZ2xvYmFsIGZpbmlzaF9qb2luCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgICAgICAjIExPQ0sgSEVMRDogTWFpbiB0aHJlYWQgaG9sZHMgbG9jayBhY3Jvc3MgdGhpcyBjYWxsLgorICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKKyAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgorCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQorCisgICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCisgICAgICAgICAgICAjIFRoaXMgYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNoaWxkIGhhcyBmb3JrZWQKKyAgICAgICAgICAgICMgYmVmb3JlIHJldHVybmluZywgd2hpY2ggd2lsbCByZWxlYXNlIHRoZSBsb2NrIHNvb24gYWZ0ZXIuICBJZgorICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKKyAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcgaW5zdGVhZCBvZiByZXNldGluZyBpdCwgdGhlIHRlc3QgY2FzZSB3aWxsCisgICAgICAgICAgICAjIGRlYWRsb2NrIHdoZW4gaXQgc2hvdWxkbid0LgorICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKKyAgICAgICAgICAgIG9yaWdfYWNxdWlyZSA9IGNvbmRpdGlvbi5hY3F1aXJlCisgICAgICAgICAgICBjYWxsX2NvdW50X2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgICAgICBjYWxsX2NvdW50ID0gMAorICAgICAgICAgICAgZGVmIG15X2FjcXVpcmUoKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgY2FsbF9jb3VudAorICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCisgICAgICAgICAgICAgICAgb3JpZ19hY3F1aXJlKCkgICMgTE9DSyBBQ1FVSVJFRCBIRVJFCisgICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBjYWxsX2NvdW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2hfam9pbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgICMgV09SS0VSIFRIUkVBRCBGT1JLUyBIRVJFCisgICAgICAgICAgICAgICAgd2l0aCBjYWxsX2NvdW50X2xvY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxfY291bnQgKz0gMQorICAgICAgICAgICAgY29uZGl0aW9uLmFjcXVpcmUgPSBteV9hY3F1aXJlCisKKyAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICAgICAgdy5qb2luKCkKKyAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbicpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCAiZW5kIG9mIG1haW5cbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBkZWYgdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgc3Bhd25lZCB0aHJlYWQgdGhhdCBmb3JrcyBkb2Vzbid0IHNlZ2ZhdWx0IG9uIGNlcnRhaW4KKyAgICAgICAgIyBwbGF0Zm9ybXMsIG5hbWVseSBPUyBYLiAgVGhpcyB1c2VkIHRvIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB3YWl0ZXIKKyAgICAgICAgIyBsb2NrIGluIHRoZSB0aHJlYWQncyBjb25kaXRpb24gdmFyaWFibGUncyB3YWl0ZXJzIGxpc3QuICBFdmVuIHRob3VnaAorICAgICAgICAjIHdlIGtub3cgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIGFjcm9zcyB0aGUgZm9yaywgaXQgaXMgbm90IHNhZmUgdG8KKyAgICAgICAgIyByZWxlYXNlIGxvY2tzIGhlbGQgYWNyb3NzIGZvcmtzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHJlbGVhc2luZyB0aGUKKyAgICAgICAgIyB3YWl0ZXIgbG9jayBjYXVzZWQgYSBzZWdmYXVsdCBvbiBPUyBYLiAgRnVydGhlcm1vcmUsIHNpbmNlIGxvY2tzIG9uCisgICAgICAgICMgT1MgWCBhcmUgKGFzIG9mIHRoaXMgd3JpdGluZykgaW1wbGVtZW50ZWQgd2l0aCBhIG11dGV4ICsgY29uZGl0aW9uCisgICAgICAgICMgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHNlbWFwaG9yZSwgd2hpbGUgd2Uga25vdyB0aGF0IHRoZSBQeXRob24tbGV2ZWwKKyAgICAgICAgIyBsb2NrIHdpbGwgYmUgYWNxdWlyZWQsIHdlIGNhbid0IGtub3cgaWYgdGhlIGludGVybmFsIG11dGV4IHdpbGwgYmUKKyAgICAgICAgIyBhY3F1aXJlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yay4KKworICAgICAgICAjIFNraXAgcGxhdGZvcm1zIHdpdGgga25vd24gcHJvYmxlbXMgZm9ya2luZyBmcm9tIGEgd29ya2VyIHRocmVhZC4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4NjMuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ29zMmVteCcpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2R1ZSB0byBrbm93biBPUyBidWdzIG9uICcgKyBzeXMucGxhdGZvcm0pCisgICAgICAgIHNjcmlwdCA9ICIiImlmIFRydWU6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZworCisgICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaGFzIGF0dGVtcHRlZCB0byBqb2luIHRoaXMgdGhyZWFkCisgICAgICAgICAgICAgICAgIyBiZWZvcmUgY29udGludWluZy4KKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KKyAgICAgICAgICAgICAgICAgICAgKGNwaWQsIHJjKSA9IG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjcGlkID09IGNoaWxkcGlkCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCByYyA9PSAwCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdlbmQgb2Ygd29ya2VyIHRocmVhZCcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQorCisgICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIF9yZWxlYXNlX3NhdmUgbWV0aG9kLgorICAgICAgICAgICAgIyBUaGlzIHJlbGVhc2VzIHRoZSBjb25kaXRpb24ncyBsb2NrIGFuZCBmbGlwcyB0aGUgZ2xvYmFsIHRoYXQKKyAgICAgICAgICAgICMgY2F1c2VzIHRoZSB3b3JrZXIgdG8gZm9yay4gIEF0IHRoaXMgcG9pbnQsIHRoZSBwcm9ibGVtYXRpYyB3YWl0ZXIKKyAgICAgICAgICAgICMgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvbmNlIGJ5IHRoZSB3YWl0ZXIgYW5kIGhhcyBiZWVuIHB1dCBvbnRvCisgICAgICAgICAgICAjIHRoZSB3YWl0ZXJzIGxpc3QuCisgICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jaworICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUgPSBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZQorICAgICAgICAgICAgZGVmIG15X3JlbGVhc2Vfc2F2ZSgpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBzdGFydF9mb3JrCisgICAgICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUoKQorICAgICAgICAgICAgICAgICMgV2FpdGVyIGxvY2sgaGVsZCBoZXJlLCBjb25kaXRpb24gbG9jayByZWxlYXNlZC4KKyAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQorICAgICAgICAgICAgY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUgPSBteV9yZWxlYXNlX3NhdmUKKworICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICB3LmpvaW4oKQorICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluIHRocmVhZCcpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgb3V0cHV0ID0gImVuZCBvZiB3b3JrZXIgdGhyZWFkXG5lbmQgb2YgbWFpbiB0aHJlYWRcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2NyaXB0LCBvdXRwdXQpCisKKworY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKICAgICAjIEEgUnVudGltZUVycm9yIHNob3VsZCBiZSByYWlzZWQgaWYgVGhyZWFkLnN0YXJ0KCkgaXMgY2FsbGVkCiAgICAgIyBtdWx0aXBsZSB0aW1lcy4KICAgICBkZWYgdGVzdF9zdGFydF90aHJlYWRfYWdhaW4oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CmluZGV4IDk2YzAyNjcuLjRjOWYyOTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CkBAIC0xLDEwICsxLDE1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gZG9jdGVzdCBpbXBvcnQgRG9jVGVzdFN1aXRlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBnYwogCisjIE1vZHVsZXMgdW5kZXIgdGVzdAorX3RocmVhZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgX3RocmVhZGluZ19sb2NhbAorCisKIGNsYXNzIFdlYWsob2JqZWN0KToKICAgICBwYXNzCiAKQEAgLTEzLDcgKzE4LDcgQEAKICAgICBsb2NhbC53ZWFrID0gd2VhawogICAgIHdlYWtsaXN0LmFwcGVuZCh3ZWFrcmVmLnJlZih3ZWFrKSkKIAotY2xhc3MgVGhyZWFkaW5nTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhc2VMb2NhbFRlc3Q6CiAKICAgICBkZWYgdGVzdF9sb2NhbF9yZWZzKHNlbGYpOgogICAgICAgICBzZWxmLl9sb2NhbF9yZWZzKDIwKQpAQCAtMjEsNyArMjYsNyBAQAogICAgICAgICBzZWxmLl9sb2NhbF9yZWZzKDEwMCkKIAogICAgIGRlZiBfbG9jYWxfcmVmcyhzZWxmLCBuKToKLSAgICAgICAgbG9jYWwgPSB0aHJlYWRpbmcubG9jYWwoKQorICAgICAgICBsb2NhbCA9IHNlbGYuX2xvY2FsKCkKICAgICAgICAgd2Vha2xpc3QgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10YXJnZXQsIGFyZ3M9KGxvY2FsLCB3ZWFrbGlzdCkpCkBAIC0zMiwxNSArMzcsMTUgQEAKICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdlYWtsaXN0KSwgbikKIAotICAgICAgICAjIFhYWCB0aHJlYWRpbmcubG9jYWwga2VlcHMgdGhlIGxvY2FsIG9mIHRoZSBsYXN0IHN0b3BwZWQgdGhyZWFkIGFsaXZlLgorICAgICAgICAjIFhYWCBfdGhyZWFkaW5nX2xvY2FsIGtlZXBzIHRoZSBsb2NhbCBvZiB0aGUgbGFzdCBzdG9wcGVkIHRocmVhZCBhbGl2ZS4KICAgICAgICAgZGVhZGxpc3QgPSBbd2VhayBmb3Igd2VhayBpbiB3ZWFrbGlzdCBpZiB3ZWFrKCkgaXMgTm9uZV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGVhZGxpc3QpLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGRlYWRsaXN0KSwgKG4tMSwgbikpCiAKICAgICAgICAgIyBBc3NpZ25tZW50IHRvIHRoZSBzYW1lIHRocmVhZCBsb2NhbCBmcmVlcyBpdCBzb21ldGltZXMgKCEpCiAgICAgICAgIGxvY2FsLnNvbWVvdGhlcnZhciA9IE5vbmUKICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgIGRlYWRsaXN0ID0gW3dlYWsgZm9yIHdlYWsgaW4gd2Vha2xpc3QgaWYgd2VhaygpIGlzIE5vbmVdCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZGVhZGxpc3QpIGluIChuLTEsIG4pLCAobiwgbGVuKGRlYWRsaXN0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGRlYWRsaXN0KSwgKG4tMSwgbiksIChuLCBsZW4oZGVhZGxpc3QpKSkKIAogICAgIGRlZiB0ZXN0X2Rlcml2ZWQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMzA4ODogaWYgdGhlcmUgaXMgYSB0aHJlYWRzIHN3aXRjaCBpbnNpZGUgdGhlIF9faW5pdF9fCkBAIC00OCw3ICs1Myw3IEBACiAgICAgICAgICMgaXMgY3JlYXRlZCBidXQgbm90IGNvcnJlY3RseSBzZXQgb24gdGhlIG9iamVjdC4KICAgICAgICAgIyBUaGUgZmlyc3QgbWVtYmVyIHNldCBtYXkgYmUgYm9ndXMuCiAgICAgICAgIGltcG9ydCB0aW1lCi0gICAgICAgIGNsYXNzIExvY2FsKHRocmVhZGluZy5sb2NhbCk6CisgICAgICAgIGNsYXNzIExvY2FsKHNlbGYuX2xvY2FsKToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgIGxvY2FsID0gTG9jYWwoKQpAQCAtNjksNyArNzQsNyBAQAogCiAgICAgZGVmIHRlc3RfZGVyaXZlZF9jeWNsZV9kZWFsbG9jKHNlbGYpOgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2OTkwCi0gICAgICAgIGNsYXNzIExvY2FsKHRocmVhZGluZy5sb2NhbCk6CisgICAgICAgIGNsYXNzIExvY2FsKHNlbGYuX2xvY2FsKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgbG9jYWxzID0gTm9uZQogICAgICAgICBwYXNzZWQgPSBbRmFsc2VdCkBAIC0xMDUsMTEgKzExMCwxMDggQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2VkWzBdKQogCisgICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE1MjIyMzcKKyAgICAgICAgZnJvbSB0aHJlYWQgaW1wb3J0IF9sb2NhbCBhcyBsb2NhbAorICAgICAgICBmcm9tIF90aHJlYWRpbmdfbG9jYWwgaW1wb3J0IGxvY2FsIGFzIHB5X2xvY2FsCisKKyAgICAgICAgZm9yIGNscyBpbiAobG9jYWwsIHB5X2xvY2FsKToKKyAgICAgICAgICAgIGNsYXNzIE15TG9jYWwoY2xzKToKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBNeUxvY2FsKGE9MSkKKyAgICAgICAgICAgIE15TG9jYWwoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCBhPTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgMSkKKworICAgIGRlZiBfdGVzdF9vbmVfY2xhc3Moc2VsZiwgYyk6CisgICAgICAgIHNlbGYuX2ZhaWxlZCA9ICJObyBlcnJvciBtZXNzYWdlIHNldCBvciBjbGVhcmVkLiIKKyAgICAgICAgb2JqID0gYygpCisgICAgICAgIGUxID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgZTIgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIGRlZiBmMSgpOgorICAgICAgICAgICAgb2JqLnggPSAnZm9vJworICAgICAgICAgICAgb2JqLnkgPSAnYmFyJworICAgICAgICAgICAgZGVsIG9iai55CisgICAgICAgICAgICBlMS5zZXQoKQorICAgICAgICAgICAgZTIud2FpdCgpCisKKyAgICAgICAgZGVmIGYyKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9vID0gb2JqLngKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgaXMgZXhwZWN0ZWQgLS0gd2UgaGF2ZW4ndCBzZXQgb2JqLnggaW4gdGhpcyB0aHJlYWQgeWV0IQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhaWxlZCA9ICIiICAjIHBhc3NlZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWlsZWQgPSAoJ0luY29ycmVjdGx5IGdvdCB2YWx1ZSAlciBmcm9tIGNsYXNzICVyXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvbywgYykpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzZWxmLl9mYWlsZWQpCisKKyAgICAgICAgdDEgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mMSkKKyAgICAgICAgdDEuc3RhcnQoKQorICAgICAgICBlMS53YWl0KCkKKyAgICAgICAgdDIgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mMikKKyAgICAgICAgdDIuc3RhcnQoKQorICAgICAgICB0Mi5qb2luKCkKKyAgICAgICAgIyBUaGUgdGVzdCBpcyBkb25lOyBqdXN0IGxldCB0MSBrbm93IGl0IGNhbiBleGl0LCBhbmQgd2FpdCBmb3IgaXQuCisgICAgICAgIGUyLnNldCgpCisgICAgICAgIHQxLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fZmFpbGVkLCBzZWxmLl9mYWlsZWQpCisKKyAgICBkZWYgdGVzdF90aHJlYWRpbmdfbG9jYWwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfb25lX2NsYXNzKHNlbGYuX2xvY2FsKQorCisgICAgZGVmIHRlc3RfdGhyZWFkaW5nX2xvY2FsX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2NhbFN1YmNsYXNzKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgICIiIlRvIHRlc3QgdGhhdCBzdWJjbGFzc2VzIGJlaGF2ZSBwcm9wZXJseS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9vbmVfY2xhc3MoTG9jYWxTdWJjbGFzcykKKworICAgIGRlZiBfdGVzdF9kaWN0X2F0dHJpYnV0ZShzZWxmLCBjbHMpOgorICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICBvYmoueCA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kaWN0X18sIHsneCc6IDV9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIG9iai5fX2RpY3RfXyA9IHt9CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIG9iai5fX2RpY3RfXworCisgICAgZGVmIHRlc3RfZGljdF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZGljdF9hdHRyaWJ1dGUoc2VsZi5fbG9jYWwpCisKKyAgICBkZWYgdGVzdF9kaWN0X2F0dHJpYnV0ZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTG9jYWxTdWJjbGFzcyhzZWxmLl9sb2NhbCk6CisgICAgICAgICAgICAiIiJUbyB0ZXN0IHRoYXQgc3ViY2xhc3NlcyBiZWhhdmUgcHJvcGVybHkuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfZGljdF9hdHRyaWJ1dGUoTG9jYWxTdWJjbGFzcykKKworCitjbGFzcyBUaHJlYWRMb2NhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UsIEJhc2VMb2NhbFRlc3QpOgorICAgIF9sb2NhbCA9IF90aHJlYWQuX2xvY2FsCisKKyAgICAjIEZhaWxzIGZvciB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9jeWNsZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC5sb2NhbCA9IHNlbGYuX2xvY2FsKCkKKyAgICAgICAgeC5sb2NhbC54ID0geAorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIGRlbCB4CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKK2NsYXNzIFB5VGhyZWFkaW5nTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBCYXNlTG9jYWxUZXN0KToKKyAgICBfbG9jYWwgPSBfdGhyZWFkaW5nX2xvY2FsLmxvY2FsCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICBzdWl0ZS5hZGRUZXN0KERvY1Rlc3RTdWl0ZSgnX3RocmVhZGluZ19sb2NhbCcpKQotICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFRocmVhZGluZ0xvY2FsVGVzdCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkTG9jYWxUZXN0KSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShQeVRocmVhZGluZ0xvY2FsVGVzdCkpCiAKICAgICB0cnk6CiAgICAgICAgIGZyb20gdGhyZWFkIGltcG9ydCBfbG9jYWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQppbmRleCAyODZjMmU0Li4yZjdlYjYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CkBAIC0xLDE0ICsxLDE0IEBACiAiIiJQeVVuaXQgdGVzdGluZyB0aGF0IHRocmVhZHMgaG9ub3Igb3VyIHNpZ25hbCBzZW1hbnRpY3MiIiIKIAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGhyZWFkCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgcmVhcF90aHJlYWRzCit0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQogCiBpZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybT09J3Jpc2Nvcyc6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybQogCiBwcm9jZXNzX3BpZCA9IG9zLmdldHBpZCgpCiBzaWduYWxsZWRfYWxsPXRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKQEAgLTM5LDYgKzM5LDcgQEAKICAgICAgICB3YWl0IGZvciBpdCB0byBmaW5pc2guIENoZWNrIHRoYXQgd2UgZ290IGJvdGggc2lnbmFscwogICAgICAgIGFuZCB0aGF0IHRoZXkgd2VyZSBydW4gYnkgdGhlIG1haW4gdGhyZWFkLgogICAgICIiIgorICAgIEByZWFwX3RocmVhZHMKICAgICBkZWYgdGVzdF9zaWduYWxzKHNlbGYpOgogICAgICAgICBzaWduYWxsZWRfYWxsLmFjcXVpcmUoKQogICAgICAgICBzZWxmLnNwYXduU2lnbmFsbGluZ1RocmVhZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3RpbWUucHkKaW5kZXggZDE3M2FlMS4uYjRkMTJiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQpAQCAtMTgsOSArMTgsOSBAQAogICAgICAgICB0aW1lLmNsb2NrKCkKIAogICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8odGltZS5jdGltZShzZWxmLnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLmN0aW1lKHNlbGYudCkKICAgICAgICAgICAgICAgICAgICAgID09IHRpbWUuYXNjdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxvbmcodGltZS5ta3RpbWUodGltZS5sb2NhbHRpbWUoc2VsZi50KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb25nKHRpbWUubWt0aW1lKHRpbWUubG9jYWx0aW1lKHNlbGYudCkpKQogICAgICAgICAgICAgICAgICAgICAgPT0gbG9uZyhzZWxmLnQpKQogCiAgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CkBAIC04NywxMSArODcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAtMSwgLTEpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMzY3LCAtMSkpCi0gICAgICAgICMgQ2hlY2sgZGF5bGlnaHQgc2F2aW5ncyBmbGFnIFstMSwgMV0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIC0yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDIpKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF92YWx1ZXNfZm9yX3plcm8oc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdXNpbmcgYWxsIHplcm9zIHVzZXMgdGhlIHByb3BlciBkZWZhdWx0IHZhbHVlcy4KQEAgLTk5LDcgKzk0LDcgQEAKICAgICAgICAgIyBiYXNlZCBvbiBpdHMgdmFsdWUuCiAgICAgICAgIGV4cGVjdGVkID0gIjIwMDAgMDEgMDEgMDAgMDAgMDAgMSAwMDEiCiAgICAgICAgIHJlc3VsdCA9IHRpbWUuc3RyZnRpbWUoIiVZICVtICVkICVIICVNICVTICV3ICVqIiwgKDAsKSo5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9zdHJwdGltZShzZWxmKToKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBnbyByb3VuZC10cmlwIGZyb20gc3RyZnRpbWUgdG8gc3RycHRpbWUgd2l0aG91dApAQCAtMTI2LDEzICsxMjEsMTMgQEAKICAgICAgICAgIyAgICAgICAgICAgICAgICAgICgxMjM0NSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCiAgICAgICAgICMgWFhYOiBGb3Igbm93LCBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgY3Jhc2g6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRpbWUuYXNjdGltZSgoMTIzNDUsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgICAgdGltZS5hc2N0aW1lKCgxMjM0NSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCkpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cih0aW1lLCAidHpzZXQiKSwKKyAgICAgICAgInRpbWUgbW9kdWxlIGhhcyBubyBhdHRyaWJ1dGUgdHpzZXQiKQogICAgIGRlZiB0ZXN0X3R6c2V0KHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzYXR0cih0aW1lLCAidHpzZXQiKToKLSAgICAgICAgICAgIHJldHVybiAjIENhbid0IHRlc3QgdGhpczsgZG9uJ3Qgd2FudCB0aGUgdGVzdCBzdWl0ZSB0byBmYWlsCiAKICAgICAgICAgZnJvbSBvcyBpbXBvcnQgZW52aXJvbgogCkBAIC0xNTgsMzYgKzE1MywzNiBAQAogICAgICAgICAgICAgdGltZS50enNldCgpCiAgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gdXRjCiAgICAgICAgICAgICB0aW1lLnR6c2V0KCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgICAgICB0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUuZGF5bGlnaHQsIDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLnRpbWV6b25lLCAwKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmRheWxpZ2h0LCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnRpbWV6b25lLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDApCiAKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGNhbiBzd2l0Y2ggdG8gVVMvRWFzdGVybgogICAgICAgICAgICAgZW52aXJvblsnVFonXSA9IGVhc3Rlcm4KICAgICAgICAgICAgIHRpbWUudHpzZXQoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbCh0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUudHpuYW1lLCAoJ0VTVCcsICdFRFQnKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGxlbih0aW1lLnR6bmFtZSksIDIpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLmRheWxpZ2h0LCAxKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS50aW1lem9uZSwgMTgwMDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLmFsdHpvbmUsIDE0NDAwKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAwKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGltZS5nbXRpbWUoeG1hczIwMDIpLCB0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUudHpuYW1lLCAoJ0VTVCcsICdFRFQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5kYXlsaWdodCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50aW1lem9uZSwgMTgwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuYWx0em9uZSwgMTQ0MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKS50bV9pc2RzdCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKIAogICAgICAgICAgICAgIyBOb3cgZ28gdG8gdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUuCiAgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gdmljdG9yaWEKICAgICAgICAgICAgIHRpbWUudHpzZXQoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbCh0aW1lLmdtdGltZSh4bWFzMjAwMiksIHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0aW1lLnR6bmFtZVswXSA9PSAnQUVTVCcsIHN0cih0aW1lLnR6bmFtZVswXSkpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGltZS50em5hbWVbMV0gPT0gJ0FFRFQnLCBzdHIodGltZS50em5hbWVbMV0pKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUuZGF5bGlnaHQsIDEpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLnRpbWV6b25lLCAtMzYwMDApCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0aW1lLmFsdHpvbmUsIC0zOTYwMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKS50bV9pc2RzdCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGltZS5nbXRpbWUoeG1hczIwMDIpLCB0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50em5hbWVbMF0gPT0gJ0FFU1QnLCBzdHIodGltZS50em5hbWVbMF0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudHpuYW1lWzFdID09ICdBRURUJywgc3RyKHRpbWUudHpuYW1lWzFdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5kYXlsaWdodCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50aW1lem9uZSwgLTM2MDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmFsdHpvbmUsIC0zOTYwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAxKQogCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIFJlcGFpciBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBjYXNlIGFueSBvdGhlciB0ZXN0cwpAQCAtMjE5LDE0ICsyMTQsMjUgQEAKICAgICAgICAgZ3QxID0gdGltZS5nbXRpbWUoTm9uZSkKICAgICAgICAgdDAgPSB0aW1lLm1rdGltZShndDApCiAgICAgICAgIHQxID0gdGltZS5ta3RpbWUoZ3QxKQotICAgICAgICBzZWxmLmFzc2VydF8oMCA8PSAodDEtdDApIDwgMC4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSAodDEtdDApIDwgMC4yKQogCiAgICAgZGVmIHRlc3RfbG9jYWx0aW1lX3dpdGhvdXRfYXJnKHNlbGYpOgogICAgICAgICBsdDAgPSB0aW1lLmxvY2FsdGltZSgpCiAgICAgICAgIGx0MSA9IHRpbWUubG9jYWx0aW1lKE5vbmUpCiAgICAgICAgIHQwID0gdGltZS5ta3RpbWUobHQwKQogICAgICAgICB0MSA9IHRpbWUubWt0aW1lKGx0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKDAgPD0gKHQxLXQwKSA8IDAuMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gKHQxLXQwKSA8IDAuMikKKworICAgIGRlZiB0ZXN0X21rdGltZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcyNjY4NworICAgICAgICBmb3IgdCBpbiAoLTIsIC0xLCAwLCAxKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0dCA9IHRpbWUubG9jYWx0aW1lKHQpCisgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLm1rdGltZSh0dCksIHQpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGltZVRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5IGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CmluZGV4IDQ2MGUwZDYuLjRiYzEyNWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKQEAgLTExOSwyOCArMTE5LDMwIEBACiAgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQogCiAgICAgICAgIF90MSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5jb25uZWN0LCBhZGRyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5jb25uZWN0LCBhZGRyKQogICAgICAgICBfdDIgPSB0aW1lLnRpbWUoKQogCiAgICAgICAgIF9kZWx0YSA9IGFicyhfdDEgLSBfdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAogICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyBtb3JlIHRoYW4gJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKICAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKIAogICAgIGRlZiB0ZXN0UmVjdlRpbWVvdXQoc2VsZik6CiAgICAgICAgICMgVGVzdCByZWN2KCkgdGltZW91dAogICAgICAgICBfdGltZW91dCA9IDAuMDIKLSAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2VsZi5hZGRyX3JlbW90ZSkKLSAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoX3RpbWVvdXQpCiAKLSAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLnJlY3YsIDEwMjQpCi0gICAgICAgIF90MiA9IHRpbWUudGltZSgpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLmFkZHJfcmVtb3RlWzBdKToKKyAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNlbGYuYWRkcl9yZW1vdGUpCisgICAgICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKIAotICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQotICAgICAgICBzZWxmLmFzc2VydF8oX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCi0gICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCi0gICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCisgICAgICAgICAgICBfdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHNlbGYuc29jay5yZWN2LCAxMDI0KQorICAgICAgICAgICAgX3QyID0gdGltZS50aW1lKCkKKworICAgICAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCisgICAgICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQogCiAgICAgZGVmIHRlc3RBY2NlcHRUaW1lb3V0KHNlbGYpOgogICAgICAgICAjIFRlc3QgYWNjZXB0KCkgdGltZW91dApAQCAtMTUxLDExICsxNTMsMTEgQEAKICAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQogCiAgICAgICAgIF90MSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5hY2NlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmFjY2VwdCkKICAgICAgICAgX3QyID0gdGltZS50aW1lKCkKIAogICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQotICAgICAgICBzZWxmLmFzc2VydF8oX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfZGVsdGEgPCBfdGltZW91dCArIHNlbGYuZnV6eiwKICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0ICglZykgaXMgJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKICAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKIApAQCAtMTY4LDExICsxNzAsMTEgQEAKICAgICAgICAgdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2ssIHNlbGYubG9jYWxob3N0KQogCiAgICAgICAgIF90MSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5yZWN2ZnJvbSwgODE5MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2sucmVjdmZyb20sIDgxOTIpCiAgICAgICAgIF90MiA9IHRpbWUudGltZSgpCiAKICAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKLSAgICAgICAgc2VsZi5hc3NlcnRfKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCiAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCiAgICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGsucHkgYi9MaWIvdGVzdC90ZXN0X3RrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2E1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3RrLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCitpbXBvcnQgVGtpbnRlcgorCit0cnk6CisgICAgVGtpbnRlci5CdXR0b24oKQorZXhjZXB0IFRraW50ZXIuVGNsRXJyb3IsIG1zZzoKKyAgICAjIGFzc3VtaW5nIHRrIGlzIG5vdCBhdmFpbGFibGUKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnKQorCit0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorbGliX3RrX3Rlc3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHRoaXNfZGlyLCBvcy5wYXRoLnBhcmRpciwKKyAgICAnbGliLXRrJywgJ3Rlc3QnKSkKKword2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgaW1wb3J0IHJ1bnRrdGVzdHMKKworZGVmIHRlc3RfbWFpbihlbmFibGVfZ3VpPUZhbHNlKToKKyAgICBpZiBlbmFibGVfZ3VpOgorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCisgICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMuYXBwZW5kKCdndWknKQorCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHModGV4dD1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3RraW50ZXInXSkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKGVuYWJsZV9ndWk9VHJ1ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkgYi9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CmluZGV4IGFlNWY0MTAuLjM4ZGExMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQpAQCAtNTYsNyArNTYsNyBAQAogICAgIC4uLiAgICAgcmV0dXJuIHRva2VuczEgPT0gdG9rZW5zMgogICAgIC4uLgogCi1UaGVyZSBhcmUgc29tZSBzdGFuZGFyZCBmb3JtYXR0aWcgcHJhY3Rpc2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgorVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgZm9ybWF0dGluZyBwcmFjdGljZXMgdGhhdCBhcmUgZWFzeSB0byBnZXQgcmlnaHQuCiAKICAgICA+Pj4gcm91bmR0cmlwKCJpZiB4ID09IDE6XFxuIgogICAgIC4uLiAgICAgICAgICAgIiAgICBwcmludCB4XFxuIikKQEAgLTQ5MywxMyArNDkzLDEzIEBACiAgICAgVHJ1ZQogCiBUZXN0IHJvdW5kdHJpcCBvbiByYW5kb20gcHl0aG9uIG1vZHVsZXMuCi1wYXNzIHRoZSAnLXVjb21waWxlcicgb3B0aW9uIHRvIHByb2Nlc3MgdGhlIGZ1bGwgZGlyZWN0b3J5LgorcGFzcyB0aGUgJy11Y3B1JyBvcHRpb24gdG8gcHJvY2VzcyB0aGUgZnVsbCBkaXJlY3RvcnkuCiAKICAgICA+Pj4KICAgICA+Pj4gdGVtcGRpciA9IG9zLnBhdGguZGlybmFtZShmKSBvciBvcy5jdXJkaXIKICAgICA+Pj4gdGVzdGZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih0ZW1wZGlyLCAidGVzdCoucHkiKSkKIAotICAgID4+PiBpZiBub3QgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImNvbXBpbGVyIik6CisgICAgPj4+IGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1Iik6CiAgICAgLi4uICAgICB0ZXN0ZmlsZXMgPSByYW5kb20uc2FtcGxlKHRlc3RmaWxlcywgMTApCiAgICAgLi4uCiAgICAgPj4+IGZvciB0ZXN0ZmlsZSBpbiB0ZXN0ZmlsZXM6CkBAIC01MDgsMTEgKzUwOCwyOCBAQAogICAgIC4uLiAgICAgICAgIGJyZWFrCiAgICAgLi4uIGVsc2U6IFRydWUKICAgICBUcnVlCisKK0V2aWwgdGFicworICAgID4+PiBkdW1wX3Rva2VucygiZGVmIGYoKTpcXG5cXHRpZiB4XFxuICAgICAgICBcXHRwYXNzIikKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDEsIDApICgxLCAzKQorICAgIE5BTUUgICAgICAgJ2YnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDYpICgxLCA3KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgSU5ERU5UICAgICAnXFx0JyAgICAgICAgICAoMiwgMCkgKDIsIDEpCisgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgyLCAxKSAoMiwgMykKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDIsIDQpICgyLCA1KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDIsIDUpICgyLCA2KQorICAgIElOREVOVCAgICAgJyAgICAgICAgXFx0JyAgKDMsIDApICgzLCA5KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMywgOSkgKDMsIDEzKQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNCwgMCkgKDQsIDApCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKICIiIgogCiAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci1mcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIHVudG9rZW5pemUsIGdlbmVyYXRlX3Rva2VucywgTlVNQkVSLCBOQU1FLCBPUCwKK2Zyb20gdG9rZW5pemUgaW1wb3J0ICh1bnRva2VuaXplLCBnZW5lcmF0ZV90b2tlbnMsIE5VTUJFUiwgTkFNRSwgT1AsCiAgICAgICAgICAgICAgICAgICAgICBTVFJJTkcsIEVORE1BUktFUiwgdG9rX25hbWUpCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IG9zCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQppbmRleCA4ZTNkNDgzLi43YTk4MmYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKQEAgLTEsNzY4ICsxLDM0MSBAQAotIyBUZXN0aW5nIHRoZSBsaW5lIHRyYWNlIGZhY2lsaXR5LgotCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBkaWZmbGliCi1pbXBvcnQgZ2MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgcm10cmVlLCB1bmxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KQoraW1wb3J0IHVuaXR0ZXN0CiAKLSMgQSB2ZXJ5IGJhc2ljIGV4YW1wbGUuICBJZiB0aGlzIGZhaWxzLCB3ZSdyZSBpbiBkZWVwIHRyb3VibGUuCi1kZWYgYmFzaWMoKToKLSAgICByZXR1cm4gMQoraW1wb3J0IHRyYWNlCitmcm9tIHRyYWNlIGltcG9ydCBDb3ZlcmFnZVJlc3VsdHMsIFRyYWNlCiAKLWJhc2ljLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicpXQotCi0jIE1hbnkgb2YgdGhlIHRlc3RzIGJlbG93IGFyZSB0cmlja3kgYmVjYXVzZSB0aGV5IGludm9sdmUgcGFzcyBzdGF0ZW1lbnRzLgotIyBJZiB0aGVyZSBpcyBpbXBsaWNpdCBjb250cm9sIGZsb3cgYXJvdW5kIGEgcGFzcyBzdGF0ZW1lbnQgKGluIGFuIGV4Y2VwdAotIyBjbGF1c2Ugb3IgZWxzZSBjYWx1c2UpIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBkbyB5b3Ugc2V0IGEgbGluZSBudW1iZXIKLSMgZm9sbG93aW5nIHRoYXQgY2xhdXNlPworZnJvbSB0ZXN0LnRyYWNlZG1vZHVsZXMgaW1wb3J0IHRlc3Rtb2QKIAogCi0jIFRoZSBlbnRpcmUgIndoaWxlIDA6IiBzdGF0ZW1lbnQgaXMgb3B0aW1pemVkIGF3YXkuICBObyBjb2RlCi0jIGV4aXN0cyBmb3IgaXQsIHNvIHRoZSBsaW5lIG51bWJlcnMgc2tpcCBkaXJlY3RseSBmcm9tICJkZWwgeCIKLSMgdG8gInggPSAxIi4KLWRlZiBhcmlnb19leGFtcGxlKCk6Ci0gICAgeCA9IDEKLSAgICBkZWwgeAotICAgIHdoaWxlIDA6Ci0gICAgICAgIHBhc3MKLSAgICB4ID0gMQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogCi1hcmlnb19leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICg1LCAncmV0dXJuJyldCitkZWYgZml4X2V4dF9weShmaWxlbmFtZSk6CisgICAgIiIiR2l2ZW4gYSAucHljLy5weW8gZmlsZW5hbWUgY29udmVydHMgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIC5weSIiIgorICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCgnLnB5YycsICcucHlvJykpOgorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KKyAgICByZXR1cm4gZmlsZW5hbWUKIAotIyBjaGVjayB0aGF0IGxpbmVzIGNvbnNpc3Rpbmcgb2YganVzdCBvbmUgaW5zdHJ1Y3Rpb24gZ2V0IHRyYWNlZDoKLWRlZiBvbmVfaW5zdHJfbGluZSgpOgotICAgIHggPSAxCi0gICAgZGVsIHgKLSAgICB4ID0gMQorZGVmIG15X2ZpbGVfYW5kX21vZG5hbWUoKToKKyAgICAiIiJUaGUgLnB5IGZpbGUgYW5kIG1vZHVsZSBuYW1lIG9mIHRoaXMgZmlsZSAoX19maWxlX18pIiIiCisgICAgbW9kbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykpWzBdCisgICAgcmV0dXJuIGZpeF9leHRfcHkoX19maWxlX18pLCBtb2RuYW1lCiAKLW9uZV9pbnN0cl9saW5lLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ3JldHVybicpXQorZGVmIGdldF9maXJzdGxpbmVubyhmdW5jKToKKyAgICByZXR1cm4gZnVuYy5fX2NvZGVfXy5jb19maXJzdGxpbmVubwogCi1kZWYgbm9fcG9wX3RvcHMoKTogICAgICAjIDAKLSAgICB4ID0gMSAgICAgICAgICAgICAgICMgMQotICAgIGZvciBhIGluIHJhbmdlKDIpOiAgIyAyCi0gICAgICAgIGlmIGE6ICAgICAgICAgICAjIDMKLSAgICAgICAgICAgIHggPSAxICAgICAgICMgNAotICAgICAgICBlbHNlOiAgICAgICAgICAgIyA1Ci0gICAgICAgICAgICB4ID0gMSAgICAgICAjIDYKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLSBUYXJnZXQgZnVuY3Rpb25zIGZvciB0cmFjaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKyMKKyMgVGhlIHJlbGF0aXZlIGxpbmUgbnVtYmVycyBvZiBsaW5lcyBpbiB0aGVzZSBmdW5jdGlvbnMgbWF0dGVyIGZvciB2ZXJpZnlpbmcKKyMgdHJhY2luZy4gUGxlYXNlIG1vZGlmeSB0aGUgYXBwcm9wcmlhdGUgdGVzdHMgaWYgeW91IGNoYW5nZSBvbmUgb2YgdGhlCisjIGZ1bmN0aW9ucy4gQWJzb2x1dGUgbGluZSBudW1iZXJzIGRvbid0IG1hdHRlci4KKyMKIAotbm9fcG9wX3RvcHMuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJyldCitkZWYgdHJhY2VkX2Z1bmNfbGluZWFyKHgsIHkpOgorICAgIGEgPSB4CisgICAgYiA9IHkKKyAgICBjID0gYSArIGIKKyAgICByZXR1cm4gYwogCi1kZWYgbm9fcG9wX2Jsb2NrcygpOgotICAgIHkgPSAxCi0gICAgd2hpbGUgbm90IHk6Ci0gICAgICAgIGJsYQotICAgIHggPSAxCitkZWYgdHJhY2VkX2Z1bmNfbG9vcCh4LCB5KToKKyAgICBjID0geAorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICBjICs9IHkKKyAgICByZXR1cm4gYwogCi1ub19wb3BfYmxvY2tzLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCitkZWYgdHJhY2VkX2Z1bmNfaW1wb3J0aW5nKHgsIHkpOgorICAgIHJldHVybiB4ICsgeSArIHRlc3Rtb2QuZnVuYygxKQogCi1kZWYgY2FsbGVkKCk6ICMgbGluZSAtMwotICAgIHggPSAxCitkZWYgdHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcih4KToKKyAgICBjID0gdHJhY2VkX2Z1bmNfbGluZWFyKHgsIHgpCisgICAgcmV0dXJuIGMgKyB4CiAKLWRlZiBjYWxsKCk6ICAgIyBsaW5lIDAKLSAgICBjYWxsZWQoKQorZGVmIHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIoeCk6CisgICAgayA9IHRyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXIoeCkKKyAgICBrICs9IHRyYWNlZF9mdW5jX2ltcG9ydGluZyhrLCB4KQorICAgIHJldHVybiBrCiAKLWNhbGwuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgICAoLTMsICdjYWxsJyksCi0gICAgICAgICAgICAgICAoLTIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAoLTIsICdyZXR1cm4nKSwKLSAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyldCitkZWYgdHJhY2VkX2Z1bmNfZ2VuZXJhdG9yKG51bSk6CisgICAgYyA9IDUgICAgICAgIyBleGVjdXRlZCBvbmNlCisgICAgZm9yIGkgaW4gcmFuZ2UobnVtKToKKyAgICAgICAgeWllbGQgaSArIGMKIAotZGVmIHJhaXNlcygpOgotICAgIHJhaXNlIEV4Y2VwdGlvbgorZGVmIHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKCk6CisgICAgayA9IDAKKyAgICBmb3IgaSBpbiB0cmFjZWRfZnVuY19nZW5lcmF0b3IoMTApOgorICAgICAgICBrICs9IGkKIAotZGVmIHRlc3RfcmFpc2UoKToKLSAgICB0cnk6Ci0gICAgICAgIHJhaXNlcygpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXhjOgotICAgICAgICB4ID0gMQorZGVmIHRyYWNlZF9kb3VibGVyKG51bSk6CisgICAgcmV0dXJuIG51bSAqIDIKIAotdGVzdF9yYWlzZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgKC0zLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgKC0yLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgKC0yLCAnZXhjZXB0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgICAoLTIsICdyZXR1cm4nKSwKLSAgICAgICAgICAgICAgICAgICAgICgyLCAnZXhjZXB0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KLQotZGVmIF9zZXR0cmFjZV9hbmRfcmV0dXJuKHRyYWNlZnVuYyk6Ci0gICAgc3lzLnNldHRyYWNlKHRyYWNlZnVuYykKLSAgICBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfdHJhY2UgPSB0cmFjZWZ1bmMKLWRlZiBzZXR0cmFjZV9hbmRfcmV0dXJuKHRyYWNlZnVuYyk6Ci0gICAgX3NldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKQotCi1zZXR0cmFjZV9hbmRfcmV0dXJuLmV2ZW50cyA9IFsoMSwgJ3JldHVybicpXQotCi1kZWYgX3NldHRyYWNlX2FuZF9yYWlzZSh0cmFjZWZ1bmMpOgotICAgIHN5cy5zZXR0cmFjZSh0cmFjZWZ1bmMpCi0gICAgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX3RyYWNlID0gdHJhY2VmdW5jCi0gICAgcmFpc2UgUnVudGltZUVycm9yCi1kZWYgc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYyk6Ci0gICAgdHJ5OgotICAgICAgICBfc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYykKLSAgICBleGNlcHQgUnVudGltZUVycm9yLCBleGM6Ci0gICAgICAgIHBhc3MKLQotc2V0dHJhY2VfYW5kX3JhaXNlLmV2ZW50cyA9IFsoMiwgJ2V4Y2VwdGlvbicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCi0KLSMgaW1wbGljaXQgcmV0dXJuIGV4YW1wbGUKLSMgVGhpcyB0ZXN0IGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugb2YgdGhlIGVsc2U6IHBhc3MKLSMgcGFydCBvZiB0aGUgY29kZS4gIFRoZSBjb2RlIGdlbmVyYXRlIGZvciB0aGUgdHJ1ZQotIyBwYXJ0IG9mIHRoZSBpZiBjb250YWlucyBhIGp1bXAgcGFzdCB0aGUgZWxzZSBicmFuY2guCi0jIFRoZSBjb21waWxlciB0aGVuIGdlbmVyYXRlcyBhbiBpbXBsaWNpdCAicmV0dXJuIE5vbmUiCi0jIEludGVybmFsbHksIHRoZSBjb21waWxlciB2aXNpdHMgdGhlIHBhc3Mgc3RhdGVtZW50Ci0jIGFuZCBzdG9yZXMgaXRzIGxpbmUgbnVtYmVyIGZvciB1c2Ugb24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCi0jIFRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHRoZSBpbXBsaWNpdCByZXR1cm4gTm9uZS4KLWRlZiBpcmV0dXJuX2V4YW1wbGUoKToKLSAgICBhID0gNQotICAgIGIgPSA1Ci0gICAgaWYgYSA9PSBiOgotICAgICAgICBiID0gYSsxCi0gICAgZWxzZToKLSAgICAgICAgcGFzcwotCi1pcmV0dXJuX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAncmV0dXJuJyldCi0KLSMgVGlnaHQgbG9vcCB3aXRoIHdoaWxlKDEpIGV4YW1wbGUgKFNGICM3NjU2MjQpCi1kZWYgdGlnaHRsb29wX2V4YW1wbGUoKToKLSAgICBpdGVtcyA9IHJhbmdlKDAsIDMpCi0gICAgdHJ5OgotICAgICAgICBpID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgYiA9IGl0ZW1zW2ldOyBpKz0xCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHBhc3MKLQotdGlnaHRsb29wX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnZXhjZXB0aW9uJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcsICdsaW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcsICdyZXR1cm4nKV0KLQotZGVmIHRpZ2h0ZXJsb29wX2V4YW1wbGUoKToKLSAgICBpdGVtcyA9IHJhbmdlKDEsIDQpCi0gICAgdHJ5OgotICAgICAgICBpID0gMAotICAgICAgICB3aGlsZSAxOiBpID0gaXRlbXNbaV0KLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcGFzcwotCi10aWdodGVybG9vcF9leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2V4Y2VwdGlvbicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAncmV0dXJuJyldCi0KLWRlZiBnZW5lcmF0b3JfZnVuY3Rpb24oKToKLSAgICB0cnk6Ci0gICAgICAgIHlpZWxkIFRydWUKLSAgICAgICAgImNvbnRpbnVlZCIKLSAgICBmaW5hbGx5OgotICAgICAgICAiZmluYWxseSIKLWRlZiBnZW5lcmF0b3JfZXhhbXBsZSgpOgotICAgICMgYW55KCkgd2lsbCBsZWF2ZSB0aGUgZ2VuZXJhdG9yIGJlZm9yZSBpdHMgZW5kCi0gICAgeCA9IGFueShnZW5lcmF0b3JfZnVuY3Rpb24oKSkKLQotICAgICMgdGhlIGZvbGxvd2luZyBsaW5lcyB3ZXJlIG5vdCB0cmFjZWQKLSAgICBmb3IgeCBpbiByYW5nZSgxMCk6Ci0gICAgICAgIHkgPSB4Ci0KLWdlbmVyYXRvcl9leGFtcGxlLmV2ZW50cyA9IChbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTYsICdjYWxsJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdyZXR1cm4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAnY2FsbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdleGNlcHRpb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xLCAnbGluZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsICdyZXR1cm4nKV0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoNSwgJ2xpbmUnKSwgKDYsICdsaW5lJyldICogMTAgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoNSwgJ2xpbmUnKSwgKDUsICdyZXR1cm4nKV0pCitkZWYgdHJhY2VkX2NhbGxlcl9saXN0X2NvbXByZWhlbnNpb24oKToKKyAgICBrID0gMTAKKyAgICBteWxpc3QgPSBbdHJhY2VkX2RvdWJsZXIoaSkgZm9yIGkgaW4gcmFuZ2UoayldCisgICAgcmV0dXJuIG15bGlzdAogCiAKLWNsYXNzIFRyYWNlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuZXZlbnRzID0gW10KLSAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgotICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoKGZyYW1lLmZfbGluZW5vLCBldmVudCkpCi0gICAgICAgIHJldHVybiBzZWxmLnRyYWNlCi0gICAgZGVmIHRyYWNlV2l0aEdlbmV4cChzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6Ci0gICAgICAgIChvIGZvciBvIGluIFsxXSkKLSAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKChmcmFtZS5mX2xpbmVubywgZXZlbnQpKQotICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorY2xhc3MgVHJhY2VkQ2xhc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYuYSA9IHgKIAotY2xhc3MgVHJhY2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGluc3RfbWV0aG9kX2xpbmVhcihzZWxmLCB5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuYSArIHkKIAotICAgICMgRGlzYWJsZSBnYyBjb2xsZWN0aW9uIHdoZW4gdHJhY2luZywgb3RoZXJ3aXNlIHRoZQotICAgICMgZGVhbGxvY2F0b3JzIG1heSBiZSB0cmFjZWQgYXMgd2VsbC4KKyAgICBkZWYgaW5zdF9tZXRob2RfY2FsbGluZyhzZWxmLCB4KToKKyAgICAgICAgYyA9IHNlbGYuaW5zdF9tZXRob2RfbGluZWFyKHgpCisgICAgICAgIHJldHVybiBjICsgdHJhY2VkX2Z1bmNfbGluZWFyKHgsIGMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY2xhc3NfbWV0aG9kX2xpbmVhcihjbHMsIHkpOgorICAgICAgICByZXR1cm4geSAqIDIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3RhdGljX21ldGhvZF9saW5lYXIoeSk6CisgICAgICAgIHJldHVybiB5ICogMgorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBjYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKworCitjbGFzcyBUZXN0TGluZUNvdW50cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiV2hpdGUtYm94IHRlc3Rpbmcgb2YgbGluZS1jb3VudGluZywgdmlhIHJ1bmZ1bmMiIiIKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYudXNpbmdfZ2MgPSBnYy5pc2VuYWJsZWQoKQotICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0xLCB0cmFjZT0wLCBjb3VudGZ1bmNzPTAsIGNvdW50Y2FsbGVycz0wKQorICAgICAgICBzZWxmLm15X3B5X2ZpbGVuYW1lID0gZml4X2V4dF9weShfX2ZpbGVfXykKIAorICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2xpbmVhcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19saW5lYXIsIDIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA3KQorCisgICAgICAgICMgYWxsIGxpbmVzIGFyZSBleGVjdXRlZCBvbmNlCisgICAgICAgIGV4cGVjdGVkID0ge30KKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfbGluZWFyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKKyAgICAgICAgICAgIGV4cGVjdGVkWyhzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArICBpKV0gPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfbG9vcCwgMiwgMykKKworICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19sb29wKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMik6IDYsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAzKTogNSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDQpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF90cmFjZWRfZnVuY19pbXBvcnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfaW1wb3J0aW5nLCAyLCA1KQorCisgICAgICAgIGZpcnN0bGluZW5vID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2ltcG9ydGluZykKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAyKTogMSwKKyAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAzKTogMSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF90cmFjZV9mdW5jX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19jYWxsaW5nX2dlbmVyYXRvcikKKworICAgICAgICBmaXJzdGxpbmVub19jYWxsaW5nID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKQorICAgICAgICBmaXJzdGxpbmVub19nZW4gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfZ2VuZXJhdG9yKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDIpOiAxMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMyk6IDEwLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDIpOiAxMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19nZW4gKyAzKTogMTAsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2xpc3RfY29tcHJlaGVuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfY2FsbGVyX2xpc3RfY29tcHJlaGVuc2lvbikKKworICAgICAgICBmaXJzdGxpbmVub19jYWxsaW5nID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKQorICAgICAgICBmaXJzdGxpbmVub19jYWxsZWQgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2RvdWJsZXIpCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAzKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsZWQgKyAxKTogMTAsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworCisgICAgZGVmIHRlc3RfbGluZWFyX21ldGhvZHMoc2VsZik6CisgICAgICAgICMgWFhYIHRvZG86IGxhdGVyIGFkZCAnc3RhdGljX21ldGhvZF9saW5lYXInIGFuZCAnY2xhc3NfbWV0aG9kX2xpbmVhcicKKyAgICAgICAgIyBoZXJlLCBvbmNlIGlzc3VlMTc2NDI4NiBpcyByZXNvbHZlZAorICAgICAgICAjCisgICAgICAgIGZvciBtZXRobmFtZSBpbiBbJ2luc3RfbWV0aG9kX2xpbmVhcicsXToKKyAgICAgICAgICAgIHRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgICAgICB0cmFjZWRfb2JqID0gVHJhY2VkQ2xhc3MoMjUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRyYWNlZF9vYmosIG1ldGhuYW1lKQorICAgICAgICAgICAgdHJhY2VyLnJ1bmZ1bmMobWV0aG9kLCAyMCkKKworICAgICAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8obWV0aG9kKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMSk6IDEsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworY2xhc3MgVGVzdFJ1bkV4ZWNDb3VudHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgc2ltcGxlIHNhbml0eSB0ZXN0IG9mIGxpbmUtY291bnRpbmcsIHZpYSBydW5jdHggKGV4ZWMpIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm15X3B5X2ZpbGVuYW1lID0gZml4X2V4dF9weShfX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X2V4ZWNfY291bnRzKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgIGNvZGUgPSByJycndHJhY2VkX2Z1bmNfbG9vcCgyLCA1KScnJworICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgJ2V4ZWMnKQorICAgICAgICBzZWxmLnRyYWNlci5ydW5jdHgoY29kZSwgZ2xvYmFscygpLCB2YXJzKCkpCisKKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfbG9vcCkKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDIpOiA2LAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMyk6IDUsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyA0KTogMSwKKyAgICAgICAgfQorCisgICAgICAgICMgV2hlbiB1c2VkIHRocm91Z2ggJ3J1bicsIHNvbWUgb3RoZXIgc3B1cmlvcyBjb3VudHMgYXJlIHByb2R1Y2VkLCBsaWtlCisgICAgICAgICMgdGhlIHNldHRyYWNlIG9mIHRocmVhZGluZywgd2hpY2ggd2UgaWdub3JlLCBqdXN0IG1ha2luZyBzdXJlIHRoYXQgdGhlCisgICAgICAgICMgY291bnRzIGZvIHRyYWNlZF9mdW5jX2xvb3Agd2VyZSByaWdodC4KKyAgICAgICAgIworICAgICAgICBmb3IgayBpbiBleHBlY3RlZC5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jb3VudHNba10sIGV4cGVjdGVkW2tdKQorCisKK2NsYXNzIFRlc3RGdW5jcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiV2hpdGUtYm94IHRlc3Rpbmcgb2YgZnVuY3MgdHJhY2luZyIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0wLCB0cmFjZT0wLCBjb3VudGZ1bmNzPTEpCisgICAgICAgIHNlbGYuZmlsZW1vZCA9IG15X2ZpbGVfYW5kX21vZG5hbWUoKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2NhbGxlcihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyLCAxKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVkZnVuY3MsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9jYWxsZXJfaW1wb3J0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nJywpOiAxLAorICAgICAgICAgICAgKGZpeF9leHRfcHkodGVzdG1vZC5fX2ZpbGVfXyksICd0ZXN0bW9kJywgJ2Z1bmMnKTogMSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jYWxsZWRmdW5jcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnN0X21ldGhvZF9jYWxsaW5nKHNlbGYpOgorICAgICAgICBvYmogPSBUcmFjZWRDbGFzcygyMCkKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyhvYmouaW5zdF9tZXRob2RfY2FsbGluZywgMSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgnVHJhY2VkQ2xhc3MuaW5zdF9tZXRob2RfY2FsbGluZycsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgnVHJhY2VkQ2xhc3MuaW5zdF9tZXRob2RfbGluZWFyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVkZnVuY3MsIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RDYWxsZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGl0ZS1ib3ggdGVzdGluZyBvZiBjYWxsZXJzIHRyYWNpbmciIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyID0gVHJhY2UoY291bnQ9MCwgdHJhY2U9MCwgY291bnRjYWxsZXJzPTEpCisgICAgICAgIHNlbGYuZmlsZW1vZCA9IG15X2ZpbGVfYW5kX21vZG5hbWUoKQorCisgICAgZGVmIHRlc3RfbG9vcF9jYWxsZXJfaW1wb3J0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlci5ydW5mdW5jKHRyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXIsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoKG9zLnBhdGguc3BsaXRleHQodHJhY2UuX19maWxlX18pWzBdICsgJy5weScsICd0cmFjZScsICdUcmFjZS5ydW5mdW5jJyksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCkpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2xpbmVhcicsKSkpOiAxLAorICAgICAgICAgICAgKChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXInLCkpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX3NpbXBsZV9jYWxsZXInLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyJywpKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmcnLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmcnLCkpLAorICAgICAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAndGVzdG1vZCcsICdmdW5jJykpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNhbGxlcnMsIGV4cGVjdGVkKQorCisKKyMgQ3JlYXRlZCBzZXBhcmF0ZWx5IGZvciBpc3N1ZSAjMzgyMQorY2xhc3MgVGVzdENvdmVyYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudXNpbmdfZ2M6Ci0gICAgICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICBybXRyZWUoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQogCi0gICAgZGVmIGNvbXBhcmVfZXZlbnRzKHNlbGYsIGxpbmVfb2Zmc2V0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6Ci0gICAgICAgIGV2ZW50cyA9IFsobCAtIGxpbmVfb2Zmc2V0LCBlKSBmb3IgKGwsIGUpIGluIGV2ZW50c10KLSAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkX2V2ZW50czoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgKLSAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb246XG4iICsKLSAgICAgICAgICAgICAgICAiXG4iLmpvaW4oZGlmZmxpYi5uZGlmZihbc3RyKHgpIGZvciB4IGluIGV4cGVjdGVkX2V2ZW50c10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cih4KSBmb3IgeCBpbiBldmVudHNdKSkpCisgICAgZGVmIF9jb3ZlcmFnZShzZWxmLCB0cmFjZXIsCisgICAgICAgICAgICAgICAgICBjbWQ9J2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9wcHJpbnQ7IHRlc3RfcHByaW50LnRlc3RfbWFpbigpJyk6CisgICAgICAgIHRyYWNlci5ydW4oY21kKQorICAgICAgICByID0gdHJhY2VyLnJlc3VsdHMoKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9VEVTVEZOKQogCi0gICAgZGVmIHJ1bl9hbmRfY29tcGFyZShzZWxmLCBmdW5jLCBldmVudHMpOgotICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQotICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlKQotICAgICAgICBmdW5jKCkKLSAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCi0gICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZXZlbnRzKQorICAgIGRlZiB0ZXN0X2NvdmVyYWdlKHNlbGYpOgorICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZSh0cmFjZT0wLCBjb3VudD0xKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHNlbGYuX2NvdmVyYWdlKHRyYWNlcikKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwcHJpbnQucHkiIGluIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjYXNlLnB5IiBpbiBzdGRvdXQpICAgIyBmcm9tIHVuaXR0ZXN0CisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHByaW50LmNvdmVyIiBpbiBmaWxlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ1bml0dGVzdC5jYXNlLmNvdmVyIiBpbiBmaWxlcykKIAotICAgIGRlZiBydW5fdGVzdChzZWxmLCBmdW5jKToKLSAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoZnVuYywgZnVuYy5ldmVudHMpCisgICAgZGVmIHRlc3RfY292ZXJhZ2VfaWdub3JlKHNlbGYpOgorICAgICAgICAjIElnbm9yZSBhbGwgZmlsZXMsIG5vdGhpbmcgc2hvdWxkIGJlIHRyYWNlZCBub3IgcHJpbnRlZAorICAgICAgICBsaWJwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pKQorICAgICAgICAjIHN5cy5wcmVmaXggZG9lcyBub3Qgd29yayB3aGVuIHJ1bm5pbmcgZnJvbSBhIGNoZWNrb3V0CisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeCwgbGlicGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPTAsIGNvdW50PTEpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fY292ZXJhZ2UodHJhY2VyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMsIFtdKQogCi0gICAgZGVmIHJ1bl90ZXN0MihzZWxmLCBmdW5jKToKLSAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKLSAgICAgICAgZnVuYyh0cmFjZXIudHJhY2UpCi0gICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQotICAgICAgICBzZWxmLmNvbXBhcmVfZXZlbnRzKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlci5ldmVudHMsIGZ1bmMuZXZlbnRzKQotCi0gICAgZGVmIHNldF9hbmRfcmV0cmlldmVfbm9uZShzZWxmKToKLSAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCi0gICAgICAgIGFzc2VydCBzeXMuZ2V0dHJhY2UoKSBpcyBOb25lCi0KLSAgICBkZWYgc2V0X2FuZF9yZXRyaWV2ZV9mdW5jKHNlbGYpOgotICAgICAgICBkZWYgZm4oKmFyZ3MpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHN5cy5zZXR0cmFjZShmbikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXNzZXJ0IHN5cy5nZXR0cmFjZSgpIGlzIGZuCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLQotICAgIGRlZiB0ZXN0XzAxX2Jhc2ljKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGJhc2ljKQotICAgIGRlZiB0ZXN0XzAyX2FyaWdvKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGFyaWdvX2V4YW1wbGUpCi0gICAgZGVmIHRlc3RfMDNfb25lX2luc3RyKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG9uZV9pbnN0cl9saW5lKQotICAgIGRlZiB0ZXN0XzA0X25vX3BvcF9ibG9ja3Moc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fcG9wX2Jsb2NrcykKLSAgICBkZWYgdGVzdF8wNV9ub19wb3BfdG9wcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19wb3BfdG9wcykKLSAgICBkZWYgdGVzdF8wNl9jYWxsKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGNhbGwpCi0gICAgZGVmIHRlc3RfMDdfcmFpc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QodGVzdF9yYWlzZSkKLQotICAgIGRlZiB0ZXN0XzA4X3NldHRyYWNlX2FuZF9yZXR1cm4oc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QyKHNldHRyYWNlX2FuZF9yZXR1cm4pCi0gICAgZGVmIHRlc3RfMDlfc2V0dHJhY2VfYW5kX3JhaXNlKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0MihzZXR0cmFjZV9hbmRfcmFpc2UpCi0gICAgZGVmIHRlc3RfMTBfaXJldHVybihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChpcmV0dXJuX2V4YW1wbGUpCi0gICAgZGVmIHRlc3RfMTFfdGlnaHRsb29wKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KHRpZ2h0bG9vcF9leGFtcGxlKQotICAgIGRlZiB0ZXN0XzEyX3RpZ2h0ZXJsb29wKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KHRpZ2h0ZXJsb29wX2V4YW1wbGUpCi0KLSAgICBkZWYgdGVzdF8xM19nZW5leHAoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoZ2VuZXJhdG9yX2V4YW1wbGUpCi0gICAgICAgICMgaXNzdWUxMjY1OiBpZiB0aGUgdHJhY2UgZnVuY3Rpb24gY29udGFpbnMgYSBnZW5lcmF0b3IsCi0gICAgICAgICMgYW5kIGlmIHRoZSB0cmFjZWQgZnVuY3Rpb24gY29udGFpbnMgYW5vdGhlciBnZW5lcmF0b3IKLSAgICAgICAgIyB0aGF0IGlzIG5vdCBjb21wbGV0ZWx5IGV4aGF1c3RlZCwgdGhlIHRyYWNlIHN0b3BwZWQuCi0gICAgICAgICMgV29yc2U6IHRoZSAnZmluYWxseScgY2xhdXNlIHdhcyBub3QgaW52b2tlZC4KLSAgICAgICAgdHJhY2VyID0gVHJhY2VyKCkKLSAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZVdpdGhHZW5leHApCi0gICAgICAgIGdlbmVyYXRvcl9leGFtcGxlKCkKLSAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCi0gICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZ2VuZXJhdG9yX2V4YW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZ2VuZXJhdG9yX2V4YW1wbGUuZXZlbnRzKQotCi0gICAgZGVmIHRlc3RfMTRfb25saW5lcl9pZihzZWxmKToKLSAgICAgICAgZGVmIG9ubGluZXJzKCk6Ci0gICAgICAgICAgICBpZiBUcnVlOiBGYWxzZQotICAgICAgICAgICAgZWxzZTogVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCi0gICAgICAgICAgICBvbmxpbmVycywKLSAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKLSAgICAgICAgICAgICAoMywgJ3JldHVybicpXSkKLQotICAgIGRlZiB0ZXN0XzE1X2xvb3BzKHNlbGYpOgotICAgICAgICAjIGlzc3VlMTc1MDA3NjogIndoaWxlIiBleHByZXNzaW9uIGlzIHNraXBwZWQgYnkgZGVidWdnZXIKLSAgICAgICAgZGVmIGZvcl9leGFtcGxlKCk6Ci0gICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAotICAgICAgICAgICAgZm9yX2V4YW1wbGUsCi0gICAgICAgICAgICBbKDAsICdjYWxsJyksCi0gICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgKDIsICdsaW5lJyksCi0gICAgICAgICAgICAgKDEsICdsaW5lJyksCi0gICAgICAgICAgICAgKDEsICdyZXR1cm4nKV0pCi0KLSAgICAgICAgZGVmIHdoaWxlX2V4YW1wbGUoKToKLSAgICAgICAgICAgICMgV2hpbGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHJhY2VkIG9uIGV2ZXJ5IGxvb3AKLSAgICAgICAgICAgIHggPSAyCi0gICAgICAgICAgICB3aGlsZSB4ID4gMDoKLSAgICAgICAgICAgICAgICB4IC09IDEKLSAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCi0gICAgICAgICAgICB3aGlsZV9leGFtcGxlLAotICAgICAgICAgICAgWygwLCAnY2FsbCcpLAotICAgICAgICAgICAgICgyLCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICg0LCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAnbGluZScpLAotICAgICAgICAgICAgICgzLCAncmV0dXJuJyldKQotCi0gICAgZGVmIHRlc3RfMTZfYmxhbmtfbGluZXMoc2VsZik6Ci0gICAgICAgIGV4ZWMoImRlZiBmKCk6XG4iICsgIlxuIiAqIDI1NiArICIgICAgcGFzcyIpCi0gICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKAotICAgICAgICAgICAgZiwKLSAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKLSAgICAgICAgICAgICAoMjU3LCAnbGluZScpLAotICAgICAgICAgICAgICgyNTcsICdyZXR1cm4nKV0pCi0KLQotY2xhc3MgUmFpc2luZ1RyYWNlRnVuY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgotICAgICAgICAiIiJBIHRyYWNlIGZ1bmN0aW9uIHRoYXQgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiByZXNwb25zZSB0byBhCi0gICAgICAgIHNwZWNpZmljIHRyYWNlIGV2ZW50LiIiIgotICAgICAgICBpZiBldmVudCA9PSBzZWxmLnJhaXNlT25FdmVudDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IgIyBqdXN0IHNvbWV0aGluZyB0aGF0IGlzbid0IFJ1bnRpbWVFcnJvcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKLQotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICAiIiJUaGUgZnVuY3Rpb24gdG8gdHJhY2U7IHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhhdCdzIHRoZSBjYXNlCi0gICAgICAgIHdlJ3JlIHRlc3RpbmcsIHNvIHRoYXQgdGhlICdleGNlcHRpb24nIHRyYWNlIGV2ZW50IGZpcmVzLiIiIgotICAgICAgICBpZiBzZWxmLnJhaXNlT25FdmVudCA9PSAnZXhjZXB0aW9uJzoKLSAgICAgICAgICAgIHggPSAwCi0gICAgICAgICAgICB5ID0gMSAvLyB4Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHJ1bl90ZXN0X2Zvcl9ldmVudChzZWxmLCBldmVudCk6Ci0gICAgICAgICIiIlRlc3RzIHRoYXQgYW4gZXhjZXB0aW9uIHJhaXNlZCBpbiByZXNwb25zZSB0byB0aGUgZ2l2ZW4gZXZlbnQgaXMKLSAgICAgICAgaGFuZGxlZCBPSy4iIiIKLSAgICAgICAgc2VsZi5yYWlzZU9uRXZlbnQgPSBldmVudAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkgKyAxKToKLSAgICAgICAgICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi50cmFjZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgdGhyb3duISIpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJlY3Vyc2lvbiBjb3VudGVyIG5vdCByZXNldCIpCi0KLSAgICAjIFRlc3QgdGhlIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGVhY2gga2luZCBvZiB0cmFjZSBldmVudC4KLSAgICBkZWYgdGVzdF9jYWxsKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnY2FsbCcpCi0gICAgZGVmIHRlc3RfbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ2xpbmUnKQotICAgIGRlZiB0ZXN0X3JldHVybihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdF9mb3JfZXZlbnQoJ3JldHVybicpCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnZXhjZXB0aW9uJykKLQotICAgIGRlZiB0ZXN0X3RyYXNoX3N0YWNrKHNlbGYpOgotICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQgaSAgIyBsaW5lIHRyYWNpbmcgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gYXQgdGhpcyBsaW5lCi0KLSAgICAgICAgZGVmIGcoZnJhbWUsIHdoeSwgZXh0cmEpOgotICAgICAgICAgICAgaWYgKHdoeSA9PSAnbGluZScgYW5kCi0gICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPT0gZi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAyKToKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJpIGFtIGNyYXNoaW5nIgotICAgICAgICAgICAgcmV0dXJuIGcKLQotICAgICAgICBzeXMuc2V0dHJhY2UoZykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZigpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICAjIHRoZSB0ZXN0IGlzIHJlYWxseSB0aGF0IHRoaXMgZG9lc24ndCBzZWdmYXVsdDoKLSAgICAgICAgICAgIGltcG9ydCBnYwotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcHJvcGFnYXRlZCIpCi0KLQotIyAnSnVtcCcgdGVzdHM6IGFzc2lnbmluZyB0byBmcmFtZS5mX2xpbmVubyB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbgotIyBtb3ZlcyB0aGUgZXhlY3V0aW9uIHBvc2l0aW9uIC0gaXQncyBob3cgZGVidWdnZXJzIGltcGxlbWVudCBhIEp1bXAKLSMgY29tbWFuZCAoYWthLiAiU2V0IG5leHQgc3RhdGVtZW50IikuCi0KLWNsYXNzIEp1bXBUcmFjZXI6Ci0gICAgIiIiRGVmaW5lcyBhIHRyYWNlIGZ1bmN0aW9uIHRoYXQganVtcHMgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciwKLSAgICB3aXRoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpbmVzIG9mIHRoZSBqdW1wIGJlaW5nIGRlZmluZWQgYnkKLSAgICB0aGUgJ2p1bXAnIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbiB1bmRlciB0ZXN0LiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uKToKLSAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCi0gICAgICAgIHNlbGYuanVtcEZyb20gPSBmdW5jdGlvbi5qdW1wWzBdCi0gICAgICAgIHNlbGYuanVtcFRvID0gZnVuY3Rpb24uanVtcFsxXQotICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQotCi0gICAgZGVmIHRyYWNlKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKLSAgICAgICAgaWYgbm90IHNlbGYuZG9uZSBhbmQgZnJhbWUuZl9jb2RlID09IHNlbGYuZnVuY3Rpb24uZnVuY19jb2RlOgotICAgICAgICAgICAgZmlyc3RMaW5lID0gZnJhbWUuZl9jb2RlLmNvX2ZpcnN0bGluZW5vCi0gICAgICAgICAgICBpZiBmcmFtZS5mX2xpbmVubyA9PSBmaXJzdExpbmUgKyBzZWxmLmp1bXBGcm9tOgotICAgICAgICAgICAgICAgICMgQ29wZSB3aXRoIG5vbi1pbnRlZ2VyIHNlbGYuanVtcFRvIChiZWNhdXNlIG9mCi0gICAgICAgICAgICAgICAgIyBub19qdW1wX3RvX25vbl9pbnRlZ2VycyBiZWxvdykuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9IGZpcnN0TGluZSArIHNlbGYuanVtcFRvCi0gICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPSBzZWxmLmp1bXBUbwotICAgICAgICAgICAgICAgIHNlbGYuZG9uZSA9IFRydWUKLSAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKLQotIyBUaGUgZmlyc3Qgc2V0IG9mICdqdW1wJyB0ZXN0cyBhcmUgZm9yIHRoaW5ncyB0aGF0IGFyZSBhbGxvd2VkOgotCi1kZWYganVtcF9zaW1wbGVfZm9yd2FyZHMob3V0cHV0KToKLSAgICBvdXRwdXQuYXBwZW5kKDEpCi0gICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIG91dHB1dC5hcHBlbmQoMykKLQotanVtcF9zaW1wbGVfZm9yd2FyZHMuanVtcCA9ICgxLCAzKQotanVtcF9zaW1wbGVfZm9yd2FyZHMub3V0cHV0ID0gWzNdCi0KLWRlZiBqdW1wX3NpbXBsZV9iYWNrd2FyZHMob3V0cHV0KToKLSAgICBvdXRwdXQuYXBwZW5kKDEpCi0gICAgb3V0cHV0LmFwcGVuZCgyKQotCi1qdW1wX3NpbXBsZV9iYWNrd2FyZHMuanVtcCA9ICgyLCAxKQotanVtcF9zaW1wbGVfYmFja3dhcmRzLm91dHB1dCA9IFsxLCAxLCAyXQotCi1kZWYganVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMob3V0cHV0KToKLSAgICBmb3IgaSBpbiAxLCAyOgotICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgICAgIGZvciBqIGluIFszXTogICMgQWxzbyB0ZXN0cyBqdW1waW5nIG92ZXIgYSBibG9jawotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQotICAgIG91dHB1dC5hcHBlbmQoNSkKLQotanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMuanVtcCA9ICgzLCA1KQotanVtcF9vdXRfb2ZfYmxvY2tfZm9yd2FyZHMub3V0cHV0ID0gWzIsIDVdCi0KLWRlZiBqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMob3V0cHV0KToKLSAgICBvdXRwdXQuYXBwZW5kKDEpCi0gICAgZm9yIGkgaW4gWzFdOgotICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCi0gICAgICAgIGZvciBqIGluIFsyXTogICMgQWxzbyB0ZXN0cyBqdW1waW5nIG92ZXIgYSBibG9jawotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg1KQotICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCi0gICAgb3V0cHV0LmFwcGVuZCg3KQotCi1qdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMuanVtcCA9ICg2LCAxKQotanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzLm91dHB1dCA9IFsxLCAzLCA1LCAxLCAzLCA1LCA2LCA3XQotCi1kZWYganVtcF90b19jb2RlbGVzc19saW5lKG91dHB1dCk6Ci0gICAgb3V0cHV0LmFwcGVuZCgxKQotICAgICMgSnVtcGluZyB0byB0aGlzIGxpbmUgc2hvdWxkIHNraXAgdG8gdGhlIG5leHQgb25lLgotICAgIG91dHB1dC5hcHBlbmQoMykKLQotanVtcF90b19jb2RlbGVzc19saW5lLmp1bXAgPSAoMSwgMikKLWp1bXBfdG9fY29kZWxlc3NfbGluZS5vdXRwdXQgPSBbM10KLQotZGVmIGp1bXBfdG9fc2FtZV9saW5lKG91dHB1dCk6Ci0gICAgb3V0cHV0LmFwcGVuZCgxKQotICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBvdXRwdXQuYXBwZW5kKDMpCi0KLWp1bXBfdG9fc2FtZV9saW5lLmp1bXAgPSAoMiwgMikKLWp1bXBfdG9fc2FtZV9saW5lLm91dHB1dCA9IFsxLCAyLCAzXQotCi0jIFRlc3RzIGp1bXBpbmcgd2l0aGluIGEgZmluYWxseSBibG9jaywgYW5kIG92ZXIgb25lLgotZGVmIGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBmaW5hbGx5OgotICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoOCkKLSAgICAgICAgb3V0cHV0LmFwcGVuZCg5KQotCi1qdW1wX2luX25lc3RlZF9maW5hbGx5Lmp1bXAgPSAoNCwgOSkKLWp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkub3V0cHV0ID0gWzIsIDldCi0KLSMgVGhlIHNlY29uZCBzZXQgb2YgJ2p1bXAnIHRlc3RzIGFyZSBmb3IgdGhpbmdzIHRoYXQgYXJlIG5vdCBhbGxvd2VkOgotCi1kZWYgbm9fanVtcF90b29fZmFyX2ZvcndhcmRzKG91dHB1dCk6Ci0gICAgdHJ5OgotICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoMykKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnYWZ0ZXInIGluIHN0cihlKSkKLQotbm9fanVtcF90b29fZmFyX2ZvcndhcmRzLmp1bXAgPSAoMywgNikKLW5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcy5vdXRwdXQgPSBbMiwgVHJ1ZV0KLQotZGVmIG5vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdiZWZvcmUnIGluIHN0cihlKSkKLQotbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcy5qdW1wID0gKDMsIC0xKQotbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcy5vdXRwdXQgPSBbMiwgVHJ1ZV0KLQotIyBUZXN0IGVhY2gga2luZCBvZiAnZXhjZXB0JyBsaW5lLgotZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzEob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBleGNlcHQ6Ci0gICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQotICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKLQotbm9fanVtcF90b19leGNlcHRfMS5qdW1wID0gKDIsIDMpCi1ub19qdW1wX3RvX2V4Y2VwdF8xLm91dHB1dCA9IFtUcnVlXQotCi1kZWYgbm9fanVtcF90b19leGNlcHRfMihvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfdG9fZXhjZXB0XzIuanVtcCA9ICgyLCAzKQotbm9fanVtcF90b19leGNlcHRfMi5vdXRwdXQgPSBbVHJ1ZV0KLQotZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzMob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfdG9fZXhjZXB0XzMuanVtcCA9ICgyLCAzKQotbm9fanVtcF90b19leGNlcHRfMy5vdXRwdXQgPSBbVHJ1ZV0KLQotZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzQob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFJ1bnRpbWVFcnJvciksIGU6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQotCi1ub19qdW1wX3RvX2V4Y2VwdF80Lmp1bXAgPSAoMiwgMykKLW5vX2p1bXBfdG9fZXhjZXB0XzQub3V0cHV0ID0gW1RydWVdCi0KLWRlZiBub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2sob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIG91dHB1dC5hcHBlbmQoMikKLSAgICAgICAgZm9yIGkgaW4gMSwgMjoKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50bycgaW4gc3RyKGUpKQotCi1ub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2suanVtcCA9ICgyLCA0KQotbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrLm91dHB1dCA9IFtUcnVlXQotCi1kZWYgbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jayhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgZm9yIGkgaW4gMSwgMjoKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKLSAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRvJyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2suanVtcCA9ICg0LCAzKQotbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jay5vdXRwdXQgPSBbMywgMywgVHJ1ZV0KLQotZGVmIG5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKG91dHB1dCk6Ci0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCi0gICAgICAgICAgICB4ID0gMQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdmaW5hbGx5JyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrLmp1bXAgPSAoNCwgNikKLW5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrLm91dHB1dCA9IFszLCA2LCBUcnVlXSAgIyBUaGUgJ2ZpbmFsbHknIHN0aWxsIHJ1bnMKLQotZGVmIG5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2sob3V0cHV0KToKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoMykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNSkKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgnZmluYWxseScgaW4gc3RyKGUpKQotCi1ub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrLmp1bXAgPSAoNSwgMSkKLW5vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2sub3V0cHV0ID0gWzMsIFRydWVdCi0KLSMgVGhpcyB2ZXJpZmllcyB0aGUgbGluZS1udW1iZXJzLW11c3QtYmUtaW50ZWdlcnMgcnVsZS4KLWRlZiBub19qdW1wX3RvX25vbl9pbnRlZ2VycyhvdXRwdXQpOgotICAgIHRyeToKLSAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICBvdXRwdXQuYXBwZW5kKCdpbnRlZ2VyJyBpbiBzdHIoZSkpCi0KLW5vX2p1bXBfdG9fbm9uX2ludGVnZXJzLmp1bXAgPSAoMiwgIlNwYW0iKQotbm9fanVtcF90b19ub25faW50ZWdlcnMub3V0cHV0ID0gW1RydWVdCi0KLSMgVGhpcyB2ZXJpZmllcyB0aGF0IHlvdSBjYW4ndCBzZXQgZl9saW5lbm8gdmlhIF9nZXRmcmFtZSBvciBzaW1pbGFyCi0jIHRyaWNrZXJ5LgotZGVmIG5vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbigpOgotICAgIHRyeToKLSAgICAgICAgcHJldmlvdXNfZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrCi0gICAgICAgIHByZXZpb3VzX2ZyYW1lLmZfbGluZW5vID0gcHJldmlvdXNfZnJhbWUuZl9saW5lbm8KLSAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgIyBUaGlzIGlzIHRoZSBleGNlcHRpb24gd2Ugd2FudGVkOyBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgIyB0YWxrcyBhYm91dCB0cmFjZSBmdW5jdGlvbnMuCi0gICAgICAgIGlmICd0cmFjZScgbm90IGluIHN0cihlKToKLSAgICAgICAgICAgIHJhaXNlCi0gICAgZWxzZToKLSAgICAgICAgIyBTb21ldGhpbmcncyB3cm9uZyAtIHRoZSBleHBlY3RlZCBleGNlcHRpb24gd2Fzbid0IHJhaXNlZC4KLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiVHJhY2UtZnVuY3Rpb24tbGVzcyBqdW1wIGZhaWxlZCB0byBmYWlsIgotCi0KLWNsYXNzIEp1bXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGNvbXBhcmVfanVtcF9vdXRwdXQoc2VsZiwgZXhwZWN0ZWQsIHJlY2VpdmVkKToKLSAgICAgICAgaWYgcmVjZWl2ZWQgIT0gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoICJPdXRwdXRzIGRvbid0IG1hdGNoOlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDogIiArIHJlcHIoZXhwZWN0ZWQpICsgIlxuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICJSZWNlaXZlZDogIiArIHJlcHIocmVjZWl2ZWQpKQotCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGZ1bmMpOgotICAgICAgICB0cmFjZXIgPSBKdW1wVHJhY2VyKGZ1bmMpCi0gICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2UpCi0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIGZ1bmMob3V0cHV0KQotICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKLSAgICAgICAgc2VsZi5jb21wYXJlX2p1bXBfb3V0cHV0KGZ1bmMub3V0cHV0LCBvdXRwdXQpCi0KLSAgICBkZWYgdGVzdF8wMV9qdW1wX3NpbXBsZV9mb3J3YXJkcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3NpbXBsZV9mb3J3YXJkcykKLSAgICBkZWYgdGVzdF8wMl9qdW1wX3NpbXBsZV9iYWNrd2FyZHMoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9zaW1wbGVfYmFja3dhcmRzKQotICAgIGRlZiB0ZXN0XzAzX2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKQotICAgIGRlZiB0ZXN0XzA0X2p1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMpCi0gICAgZGVmIHRlc3RfMDVfanVtcF90b19jb2RlbGVzc19saW5lKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fY29kZWxlc3NfbGluZSkKLSAgICBkZWYgdGVzdF8wNl9qdW1wX3RvX3NhbWVfbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3RvX3NhbWVfbGluZSkKLSAgICBkZWYgdGVzdF8wN19qdW1wX2luX25lc3RlZF9maW5hbGx5KHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkpCi0gICAgZGVmIHRlc3RfMDhfbm9fanVtcF90b29fZmFyX2ZvcndhcmRzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcykKLSAgICBkZWYgdGVzdF8wOV9ub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMpCi0gICAgZGVmIHRlc3RfMTBfbm9fanVtcF90b19leGNlcHRfMShzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8xKQotICAgIGRlZiB0ZXN0XzExX25vX2p1bXBfdG9fZXhjZXB0XzIoc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMikKLSAgICBkZWYgdGVzdF8xMl9ub19qdW1wX3RvX2V4Y2VwdF8zKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzMpCi0gICAgZGVmIHRlc3RfMTNfbm9fanVtcF90b19leGNlcHRfNChzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF80KQotICAgIGRlZiB0ZXN0XzE0X25vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jayhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2spCi0gICAgZGVmIHRlc3RfMTVfbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jayhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKQotICAgIGRlZiB0ZXN0XzE2X25vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKQotICAgIGRlZiB0ZXN0XzE3X25vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2soc2VsZik6Ci0gICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jaykKLSAgICBkZWYgdGVzdF8xOF9ub19qdW1wX3RvX25vbl9pbnRlZ2VycyhzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX25vbl9pbnRlZ2VycykKLSAgICBkZWYgdGVzdF8xOV9ub19qdW1wX3dpdGhvdXRfdHJhY2VfZnVuY3Rpb24oc2VsZik6Ci0gICAgICAgIG5vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbigpCi0KLSAgICBkZWYgdGVzdF8yMF9sYXJnZV9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoIiIiZGVmIGYob3V0cHV0KTogICAgICAgICMgbGluZSAwCi0gICAgICAgICAgICB4ID0gMCAgICAgICAgICAgICAgICAgICAgICMgbGluZSAxCi0gICAgICAgICAgICB5ID0gMSAgICAgICAgICAgICAgICAgICAgICMgbGluZSAyCi0gICAgICAgICAgICAnJycgICAgICAgICAgICAgICAgICAgICAgICMgbGluZSAzCi0gICAgICAgICAgICAlcyAgICAgICAgICAgICAgICAgICAgICAgICMgbGluZXMgNC0xMDA0Ci0gICAgICAgICAgICAnJycgICAgICAgICAgICAgICAgICAgICAgICMgbGluZSAxMDA1Ci0gICAgICAgICAgICB4ICs9IDEgICAgICAgICAgICAgICAgICAgICMgbGluZSAxMDA2Ci0gICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHgpICAgICAgICAgICMgbGluZSAxMDA3Ci0gICAgICAgICAgICByZXR1cm4iIiIgJSAoJ1xuJyAqIDEwMDAsKSwgZCkKLSAgICAgICAgZiA9IGRbJ2YnXQorICAgIGRlZiB0ZXN0X2lzc3VlOTkzNihzZWxmKToKKyAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UodHJhY2U9MCwgY291bnQ9MSkKKyAgICAgICAgbW9kbmFtZSA9ICd0ZXN0LnRyYWNlZG1vZHVsZXMudGVzdG1vZCcKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgbW9kdWxlIGlzIGV4ZWN1dGVkIGluIGltcG9ydAorICAgICAgICBpZiBtb2RuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZG5hbWVdCisgICAgICAgIGNtZCA9ICgiaW1wb3J0IHRlc3QudHJhY2VkbW9kdWxlcy50ZXN0bW9kIGFzIHQ7IgorICAgICAgICAgICAgICAgInQuZnVuYygwKTsgdC5mdW5jMigpOyIpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fY292ZXJhZ2UodHJhY2VyLCBjbWQpCisgICAgICAgIHN0ZG91dC5zZWVrKDApCisgICAgICAgIHN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgIGNvdmVyYWdlID0ge30KKyAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0OgorICAgICAgICAgICAgbGluZXMsIGNvdiwgbW9kdWxlID0gbGluZS5zcGxpdCgpWzozXQorICAgICAgICAgICAgY292ZXJhZ2VbbW9kdWxlXSA9IChpbnQobGluZXMpLCBpbnQoY292WzotMV0pKQorICAgICAgICAjIFhYWCBUaGlzIGlzIG5lZWRlZCB0byBydW4gcmVncnRlc3QucHkgYXMgYSBzY3JpcHQKKyAgICAgICAgbW9kbmFtZSA9IHRyYWNlLmZ1bGxtb2RuYW1lKHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZG5hbWUsIGNvdmVyYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdmVyYWdlW21vZG5hbWVdLCAoNSwgMTAwKSkKIAotICAgICAgICBmLmp1bXAgPSAoMiwgMTAwNykKLSAgICAgICAgZi5vdXRwdXQgPSBbMF0KLSAgICAgICAgc2VsZi5ydW5fdGVzdChmKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgVHJhY2VUZXN0Q2FzZSwKLSAgICAgICAgUmFpc2luZ1RyYWNlRnVuY1Rlc3RDYXNlLAotICAgICAgICBKdW1wVGVzdENhc2UKLSAgICApCisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IDhiOTM4NDQuLjgwNzZiZTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC05LDE2ICs5LDYgQEAKIAogaW1wb3J0IHRyYWNlYmFjawogCi10cnk6Ci0gICAgcmFpc2UgS2V5RXJyb3IKLWV4Y2VwdCBLZXlFcnJvcjoKLSAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICBmaWxlXyA9IFN0cmluZ0lPKCkKLSAgICB0cmFjZWJhY2tfcHJpbnQodGIsIGZpbGVfKQotICAgIGV4YW1wbGVfdHJhY2ViYWNrID0gZmlsZV8uZ2V0dmFsdWUoKQotZWxzZToKLSAgICByYWlzZSBFcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB0ZXN0IHRyYWNlYmFjayBzdHJpbmciKQotCiAKIGNsYXNzIFRyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIEZvciBub3csIGEgdmVyeSBtaW5pbWFsIHNldCBvZiB0ZXN0cy4gIEkgd2FudCB0byBiZSBzdXJlIHRoYXQKQEAgLTQ4LDE2ICszOCwxNiBAQAogICAgIGRlZiB0ZXN0X2NhcmV0KHNlbGYpOgogICAgICAgICBlcnIgPSBzZWxmLmdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYuc3ludGF4X2Vycm9yX3dpdGhfY2FyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZXJyKSA9PSA0KQotICAgICAgICBzZWxmLmFzc2VydF8oZXJyWzFdLnN0cmlwKCkgPT0gInJldHVybiB4ISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiXiIgaW4gZXJyWzJdKSAjIHRoaXJkIGxpbmUgaGFzIGNhcmV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcnJbMV0uZmluZCgiISIpID09IGVyclsyXS5maW5kKCJeIikpICMgaW4gdGhlIHJpZ2h0IHBsYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXJyKSA9PSA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLnN0cmlwKCkgPT0gInJldHVybiB4ISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl4iLCBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5maW5kKCIhIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkgIyBpbiB0aGUgcmlnaHQgcGxhY2UKIAogICAgICAgICBlcnIgPSBzZWxmLmdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYuc3ludGF4X2Vycm9yX3dpdGhfY2FyZXRfMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJeIiBpbiBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsyXS5jb3VudCgnXG4nKSA9PSAxKSAjIGFuZCBubyBhZGRpdGlvbmFsIG5ld2xpbmUKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsxXS5maW5kKCIrIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkgIyBpbiB0aGUgcmlnaHQgcGxhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiXiIsIGVyclsyXSkgIyB0aGlyZCBsaW5lIGhhcyBjYXJldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzJdLmNvdW50KCdcbicpID09IDEpICMgYW5kIG5vIGFkZGl0aW9uYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLmZpbmQoIisiKSA9PSBlcnJbMl0uZmluZCgiXiIpKSAjIGluIHRoZSByaWdodCBwbGFjZQogCiAgICAgZGVmIHRlc3Rfbm9jYXJldChzZWxmKToKICAgICAgICAgaWYgaXNfanl0aG9uOgpAQCAtNjUsMTkgKzU1LDE5IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZXJyID0gc2VsZi5nZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLnN5bnRheF9lcnJvcl93aXRob3V0X2NhcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheEVycm9yKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGVycikgPT0gMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsxXS5zdHJpcCgpID09ICJbeCBmb3IgeCBpbiB4XSA9IHgiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGVycikgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5zdHJpcCgpID09ICJbeCBmb3IgeCBpbiB4XSA9IHgiKQogCiAgICAgZGVmIHRlc3RfYmFkX2luZGVudGF0aW9uKHNlbGYpOgogICAgICAgICBlcnIgPSBzZWxmLmdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYuc3ludGF4X2Vycm9yX2JhZF9pbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRhdGlvbkVycm9yKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGVycikgPT0gNCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGVyclsxXS5zdHJpcCgpID09ICJwcmludCAyIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJeIiBpbiBlcnJbMl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhlcnJbMV0uZmluZCgiMiIpID09IGVyclsyXS5maW5kKCJeIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXJyKSA9PSA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLnN0cmlwKCkgPT0gInByaW50IDIiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLmZpbmQoIjIiKSA9PSBlcnJbMl0uZmluZCgiXiIpKQogCiAgICAgZGVmIHRlc3RfYnVnNzM3NDczKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzLCBvcywgdGVtcGZpbGUsIHRpbWUKKyAgICAgICAgaW1wb3J0IG9zLCB0ZW1wZmlsZSwgdGltZQogCiAgICAgICAgIHNhdmVkcGF0aCA9IHN5cy5wYXRoWzpdCiAgICAgICAgIHRlc3RkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKQEAgLTExNCw3ICsxMDQsNyBAQAogICAgICAgICAgICAgICAgIHRlc3RfYnVnNzM3NDczLnRlc3QoKQogICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICAgICAgc3JjID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoc3lzLmV4Y190cmFjZWJhY2spWy0xXVstMV0KLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzcmMsICdyYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyYywgJ3JhaXNlIE5vdEltcGxlbWVudGVkRXJyb3InKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBzYXZlZHBhdGgKICAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIodGVzdGRpcik6CkBAIC0xODEsMTQgKzE3MSwyOSBAQAogCiBjbGFzcyBUcmFjZWJhY2tGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF90cmFjZWJhY2tfaW5kZW50YXRpb24oc2VsZik6CisgICAgZGVmIHRlc3RfdHJhY2ViYWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHRyYWNlYmFja19mbXQgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJyArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfdGIodGIpKQorICAgICAgICAgICAgZmlsZV8gPSBTdHJpbmdJTygpCisgICAgICAgICAgICB0cmFjZWJhY2tfcHJpbnQodGIsIGZpbGVfKQorICAgICAgICAgICAgcHl0aG9uX2ZtdCAgPSBmaWxlXy5nZXR2YWx1ZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB0ZXN0IHRyYWNlYmFjayBzdHJpbmciKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgUHl0aG9uIGFuZCB0aGUgdHJhY2ViYWNrIG1vZHVsZSBmb3JtYXQgdGhlIHNhbWUgdGhpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2tfZm10LCBweXRob25fZm10KQorCiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHRyYWNlYmFjayBpcyBwcm9wZXJseSBpbmRlbnRlZC4KLSAgICAgICAgdGJfbGluZXMgPSBleGFtcGxlX3RyYWNlYmFjay5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHRiX2xpbmVzKSwgMykKKyAgICAgICAgdGJfbGluZXMgPSBweXRob25fZm10LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0Yl9saW5lcyksIDMpCiAgICAgICAgIGJhbm5lciwgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXMKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJhbm5lci5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxvY2F0aW9uLnN0YXJ0c3dpdGgoJyAgRmlsZScpKQotICAgICAgICBzZWxmLmFzc2VydF8oc291cmNlX2xpbmUuc3RhcnRzd2l0aCgnICAgIHJhaXNlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYW5uZXIuc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NhdGlvbi5zdGFydHN3aXRoKCcgIEZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXJjZV9saW5lLnN0YXJ0c3dpdGgoJyAgICByYWlzZScpKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhbnNmb3JtZXIucHkgYi9MaWIvdGVzdC90ZXN0X3RyYW5zZm9ybWVyLnB5CmluZGV4IDY1OTA5MzcuLjE4OTFhYzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhbnNmb3JtZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFuc2Zvcm1lci5weQpAQCAtMTcsMTEgKzE3LDExIEBACiAKICAgICAgICAgZm9yIHMgaW4gc25pcHBldHM6CiAgICAgICAgICAgICBhID0gdHJhbnNmb3JtZXIucGFyc2UocykKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGEsIGFzdC5Nb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgYXN0Lk1vZHVsZSkKICAgICAgICAgICAgIGNoaWxkMSA9IGEuZ2V0Q2hpbGROb2RlcygpWzBdCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjaGlsZDEsIGFzdC5TdG10KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNoaWxkMSwgYXN0LlN0bXQpCiAgICAgICAgICAgICBjaGlsZDIgPSBjaGlsZDEuZ2V0Q2hpbGROb2RlcygpWzBdCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjaGlsZDIsIGFzdC5Bc3NpZ24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2hpbGQyLCBhc3QuQXNzaWduKQogCiAgICAgICAgICAgICAjIFRoaXMgYWN0dWFsbHkgdGVzdHMgdGhlIGNvbXBpbGVyLCBidXQgaXQncyBhIHdheSB0byBhc3N1cmUgdGhlIGFzdAogICAgICAgICAgICAgIyBpcyBjb3JyZWN0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5IGIvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGE1N2YwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQpAQCAtMCwwICsxLDQwIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCitpbXBvcnQgdHRrCitmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgorCit0cnk6CisgICAgdHRrLkJ1dHRvbigpCitleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAjIGFzc3VtaW5nIHR0ayBpcyBub3QgYXZhaWxhYmxlCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInR0ayBub3QgYXZhaWxhYmxlOiAlcyIgJSBtc2cpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsIG9zLnBhdGgucGFyZGlyLAorICAgICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCitkZWYgdGVzdF9tYWluKGVuYWJsZV9ndWk9RmFsc2UpOgorICAgIGlmIGVuYWJsZV9ndWk6CisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KKyAgICAgICAgZWxpZiAnZ3VpJyBub3QgaW4gdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCisKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICAgICAgZnJvbSB0ZXN0X3R0ay5zdXBwb3J0IGltcG9ydCBnZXRfdGtfcm9vdAorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZ2V0X3RrX3Jvb3QoKS5kZXN0cm95KCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90dGtfdGV4dG9ubHkucHkgYi9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkyMDQzZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBvcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciBkb2VzIG5vdCBleGlzdC4KK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKK3RoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCitsaWJfdGtfdGVzdCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4odGhpc19kaXIsICcuLicsICdsaWItdGsnLCAndGVzdCcpKQorCit3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICBpbXBvcnQgcnVudGt0ZXN0cworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHMoZ3VpPUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5IGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQppbmRleCAxNWJjMjk1Li4wYzMwOGYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKQEAgLTEsMTUgKzEsMTcgQEAKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzZXFfdGVzdHMKIAoraW1wb3J0IGdjCisKIGNsYXNzIFR1cGxlVGVzdChzZXFfdGVzdHMuQ29tbW9uVGVzdCk6CiAgICAgdHlwZTJ0ZXN0ID0gdHVwbGUKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9ycyhzZWxmKToKLSAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2xlbigpCisgICAgICAgIHN1cGVyKFR1cGxlVGVzdCwgc2VsZikudGVzdF9jb25zdHJ1Y3RvcnMoKQogICAgICAgICAjIGNhbGxpbmcgYnVpbHQtaW4gdHlwZXMgd2l0aG91dCBhcmd1bWVudCBtdXN0IHJldHVybiBlbXB0eQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKCksICgpKQogICAgICAgICB0MF8zID0gKDAsIDEsIDIsIDMpCiAgICAgICAgIHQwXzNfYmlzID0gdHVwbGUodDBfMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHQwXzMgaXMgdDBfM19iaXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MF8zIGlzIHQwXzNfYmlzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFtdKSwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoWzAsIDEsIDIsIDNdKSwgKDAsIDEsIDIsIDMpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKCcnKSwgKCkpCkBAIC0xNyw4ICsxOSw4IEBACiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKICAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X3RydXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCg0MiwgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCg0MiwgKSkKIAogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKICAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2xlbigpCkBAIC0zMSwxNCArMzMsMTQgQEAKICAgICAgICAgdSA9ICgwLCAxKQogICAgICAgICB1MiA9IHUKICAgICAgICAgdSArPSAoMiwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUgaXMgbm90IHUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSBpcyBub3QgdTIpCiAKICAgICBkZWYgdGVzdF9pbXVsKHNlbGYpOgogICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfaW11bCgpCiAgICAgICAgIHUgPSAoMCwgMSkKICAgICAgICAgdTIgPSB1CiAgICAgICAgIHUgKj0gMwotICAgICAgICBzZWxmLmFzc2VydF8odSBpcyBub3QgdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1IGlzIG5vdCB1MikKIAogICAgIGRlZiB0ZXN0X3R1cGxlcmVzaXplYnVnKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYSBzcGVjaWZpYyBidWcgaW4gX1B5VHVwbGVfUmVzaXplKCkgaXMgc3F1YXNoZWQuCkBAIC02OSw3ICs3MSw3IEBACiAgICAgICAgIGlucHMgPSBiYXNlICsgWyhpLCBqKSBmb3IgaSBpbiBiYXNlIGZvciBqIGluIHhwXSArIFwKICAgICAgICAgICAgICAgICAgICAgIFsoaSwgaikgZm9yIGkgaW4geHAgZm9yIGogaW4gYmFzZV0gKyB4cCArIHppcChiYXNlKQogICAgICAgICBjb2xsaXNpb25zID0gbGVuKGlucHMpIC0gbGVuKHNldChtYXAoaGFzaCwgaW5wcykpKQotICAgICAgICBzZWxmLmFzc2VydF8oY29sbGlzaW9ucyA8PSAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxpc2lvbnMgPD0gMTUpCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICBsMCA9IHR1cGxlKCkKQEAgLTgyLDYgKzg0LDc2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhMCksICIoKSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhMiksICIoMCwgMSwgMikiKQogCisgICAgZGVmIF9ub3RfdHJhY2tlZChzZWxmLCB0KToKKyAgICAgICAgIyBOZXN0ZWQgdHVwbGVzIGNhbiB0YWtlIHNldmVyYWwgY29sbGVjdGlvbnMgdG8gdW50cmFjaworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKworICAgIGRlZiBfdHJhY2tlZChzZWxmLCB0KToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQodCksIHQpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQodCksIHQpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3RyYWNrX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgR0Mtb3B0aW1pemF0aW9uIG9mIHR1cGxlIGxpdGVyYWxzCisgICAgICAgIHgsIHksIHogPSAxLjUsICJhIiwgW10KKworICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoKSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKDEsKSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKDEsIDIpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwgMiwgImEiKSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKDEsIDIsIChOb25lLCBUcnVlLCBGYWxzZSwgKCkpLCBpbnQpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgob2JqZWN0KCksKSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoKCgxLCB4KSwgeSwgKDIsIDMpKSkKKworICAgICAgICAjIFR1cGxlcyB3aXRoIG11dGFibGUgZWxlbWVudHMgYXJlIGFsd2F5cyB0cmFja2VkLCBldmVuIGlmIHRob3NlCisgICAgICAgICMgZWxlbWVudHMgYXJlIG5vdCB0cmFja2VkIHJpZ2h0IG5vdy4KKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoW10sKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoWzFdLCkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoKHt9LCkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoKHNldCgpLCkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQoKHgsIHksIHopKQorCisgICAgZGVmIGNoZWNrX3RyYWNrX2R5bmFtaWMoc2VsZiwgdHAsIGFsd2F5c190cmFjayk6CisgICAgICAgIHgsIHksIHogPSAxLjUsICJhIiwgW10KKworICAgICAgICBjaGVjayA9IHNlbGYuX3RyYWNrZWQgaWYgYWx3YXlzX3RyYWNrIGVsc2Ugc2VsZi5fbm90X3RyYWNrZWQKKyAgICAgICAgY2hlY2sodHAoKSkKKyAgICAgICAgY2hlY2sodHAoW10pKQorICAgICAgICBjaGVjayh0cChzZXQoKSkpCisgICAgICAgIGNoZWNrKHRwKFsxLCB4LCB5XSkpCisgICAgICAgIGNoZWNrKHRwKG9iaiBmb3Igb2JqIGluIFsxLCB4LCB5XSkpCisgICAgICAgIGNoZWNrKHRwKHNldChbMSwgeCwgeV0pKSkKKyAgICAgICAgY2hlY2sodHAodHVwbGUoW29ial0pIGZvciBvYmogaW4gWzEsIHgsIHldKSkKKyAgICAgICAgY2hlY2sodHVwbGUodHAoW29ial0pIGZvciBvYmogaW4gWzEsIHgsIHldKSkKKworICAgICAgICBzZWxmLl90cmFja2VkKHRwKFt6XSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAoW1t4LCB5XV0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHRwKFt7eDogeX1dKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cChvYmogZm9yIG9iaiBpbiBbeCwgeSwgel0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHRwKHR1cGxlKFtvYmpdKSBmb3Igb2JqIGluIFt4LCB5LCB6XSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHVwbGUodHAoW29ial0pIGZvciBvYmogaW4gW3gsIHksIHpdKSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfZHluYW1pYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkeW5hbWljYWxseSBjb25zdHJ1Y3RlZCB0dXBsZXMuCisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2tfZHluYW1pYyh0dXBsZSwgRmFsc2UpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3RyYWNrX3N1YnR5cGVzKHNlbGYpOgorICAgICAgICAjIFR1cGxlIHN1YnR5cGVzIG11c3QgYWx3YXlzIGJlIHRyYWNrZWQKKyAgICAgICAgY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2tfZHluYW1pYyhNeVR1cGxlLCBUcnVlKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9idWc3NDY2KHNlbGYpOgorICAgICAgICAjIFRyeWluZyB0byB1bnRyYWNrIGFuIHVuZmluaXNoZWQgdHVwbGUgY291bGQgY3Jhc2ggUHl0aG9uCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHR1cGxlKGdjLmNvbGxlY3QoKSBmb3IgaSBpbiByYW5nZSgxMDEpKSkKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVHVwbGVUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R5cGVjaGVja3MucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVjaGVja3MucHkKaW5kZXggMzJhYTY2MC4uODNmMDExNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weQpAQCAtMjksMTAgKzI5LDYgQEAKICAgICBwYXNzCiAKIAotY2xhc3MgRXZpbDoKLSAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdCk6IHJldHVybiBGYWxzZQotCi0KIGNsYXNzIFR5cGVDaGVja3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0SXNTdWJjbGFzc0ludGVybmFsKHNlbGYpOgpAQCAtNzUsMTEgKzcxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgU3ViSW50KSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgKFN1YkludCwpKSwgRmFsc2UpCiAKLSAgICBkZWYgdGVzdEluZmluaXRlUmVjdXJzaW9uQ2F1Z2h0UHJvcGVybHkoc2VsZik6Ci0gICAgICAgIGUgPSBFdmlsKCkKLSAgICAgICAgIyBUaGlzIGludm9rZXMgaXNpbnN0YW5jZSgpIHJlY3Vyc2l2ZWx5LCB1bnRpbCB0aGUgc3RhY2sgaXMgZXhoYXVzdGVkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlzaW5zdGFuY2UsIGUsIEV2aWwpCi0gICAgICAgICMgWFhYIEhvdyB0byBjaGVjayB0aGUgc2FtZSBzaXR1YXRpb24gZm9yIGlzc3ViY2xhc3MoKT8KKyAgICBkZWYgdGVzdF9vbGRzdHlsZShzZWxmKToKKyAgICAgICAgIyBUaGVzZSBzaG91bGQganVzdCBiZSBpZ25vcmVkLgorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3QpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBjbGFzcyBTdWIoWCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDMsIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShYKCksIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhpbnQsIFgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhTdWIsIFgpKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IGRlZTFjYTcuLjYwZjZkMmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMSw3ICsxLDcgQEAKICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgNiwgYnVpbHQtaW4gdHlwZXMKIAogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBoYXZlX3VuaWNvZGUsIHJ1bl93aXRoX2xvY2FsZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX3B5M2tfd2FybmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3B5M2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogaW1wb3J0IGxvY2FsZQpAQCAtMjEsNyArMjEsNiBAQAogICAgICAgICBpZiBub3Qgeyd4JzogMX06IHNlbGYuZmFpbCgne1wneFwnOiAxfSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQogICAgICAgICBkZWYgZigpOiBwYXNzCiAgICAgICAgIGNsYXNzIEM6IHBhc3MKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICB4ID0gQygpCiAgICAgICAgIGlmIG5vdCBmOiBzZWxmLmZhaWwoJ2YgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKICAgICAgICAgaWYgbm90IEM6IHNlbGYuZmFpbCgnQyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQpAQCAtMTE0LDYgKzExMyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMS41ZS0xMDEuX19mb3JtYXRfXygnZScpLCAnMS41MDAwMDBlLTEwMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVlJyAlIDEuNWUtMTAxLCAnMS41MDAwMDBlLTEwMScpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWcnICUgMS4wLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUjZycgJSAxLjAsICcxLjAwMDAwJykKKwogICAgIGRlZiB0ZXN0X25vcm1hbF9pbnRlZ2VycyhzZWxmKToKICAgICAgICAgIyBFbnN1cmUgdGhlIGZpcnN0IDI1NiBpbnRlZ2VycyBhcmUgc2hhcmVkCiAgICAgICAgIGEgPSAyNTYKQEAgLTQwMyw2ICs0MDUsOSBAQAogICAgICAgICB0ZXN0KDEyMzQ1NiwgIiMwMTJYIiwgJzBYMDAwMDAxRTI0MCcpCiAgICAgICAgIHRlc3QoLTEyMzQ1NiwgIiMwMTJYIiwgJy0wWDAwMDAxRTI0MCcpCiAKKyAgICAgICAgIyBpc3N1ZSA1NzgyLCBjb21tYXMgd2l0aCBubyBzcGVjaWZpZXIgdHlwZQorICAgICAgICB0ZXN0KDEyMzQsICcwMTAsJywgJzAwLDAwMSwyMzQnKQorCiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXNlIGFyZSBlcnJvcnMKIAogICAgICAgICAjIHByZWNpc2lvbiBkaXNhbGxvd2VkCkBAIC00MTMsNiArNDE4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMgLl9fZm9ybWF0X18sIDApCiAKKyAgICAgICAgIyBjYW4ndCBoYXZlICcsJyB3aXRoICdjJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCAiLGMiKQorCiAgICAgICAgICMgZW5zdXJlIHRoYXQgb25seSBpbnQgYW5kIGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrCiAgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSsxKV0pOgpAQCAtNDI4LDYgKzQzNiwxNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCh2YWx1ZSkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYykpCiAKKyAgICAgICAgIyBJc3N1ZSA2OTAyCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMDwyMCIsICcxMjM0NTYwMDAwMDAwMDAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMTwyMCIsICcxMjM0NTYxMTExMTExMTExMTExMScpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiKjwyMCIsICcxMjM0NTYqKioqKioqKioqKioqKicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMD4yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMT4yMCIsICcxMTExMTExMTExMTExMTEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiKj4yMCIsICcqKioqKioqKioqKioqKjEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMD0yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiMT0yMCIsICcxMTExMTExMTExMTExMTEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2LCAiKj0yMCIsICcqKioqKioqKioqKioqKjEyMzQ1NicpCisKICAgICBkZWYgdGVzdF9sb25nX19mb3JtYXRfXyhzZWxmKToKICAgICAgICAgZGVmIHRlc3QoaSwgZm9ybWF0X3NwZWMsIHJlc3VsdCk6CiAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSdyZSBub3QgYWNjaWRlbnRhbGx5IGNoZWNraW5nIGludHMKQEAgLTUyNSw2ICs1NDQsMTYgQEAKICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBbMEwsIDFMLCAtMUwsIDEwMEwsIC0xMDBMLCAxMjM0NTY3ODkwTCwgLTEyMzQ1Njc4OTBMXToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQodmFsdWUpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpKQorICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMDwyMCIsICcxMjM0NTYwMDAwMDAwMDAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE8MjAiLCAnMTIzNDU2MTExMTExMTExMTExMTEnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPDIwIiwgJzEyMzQ1NioqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMD4yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE+MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPjIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiMD0yMCIsICcwMDAwMDAwMDAwMDAwMDEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjE9MjAiLCAnMTExMTExMTExMTExMTExMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIqPTIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX05VTUVSSUMnLCAnZW5fVVMuVVRGOCcpCiAgICAgZGVmIHRlc3RfZmxvYXRfX2Zvcm1hdF9fbG9jYWxlKHNlbGYpOgpAQCAtNTkzLDEwICs2MjIsMjUgQEAKICAgICAgICAgdGVzdCgtMS4wLCAnIGYnLCAnLTEuMDAwMDAwJykKICAgICAgICAgdGVzdCggMS4wLCAnK2YnLCAnKzEuMDAwMDAwJykKICAgICAgICAgdGVzdCgtMS4wLCAnK2YnLCAnLTEuMDAwMDAwJykKLSAgICAgICAgdGVzdCgxLjEyMzRlOTAsICdmJywgJzEuMTIzNGUrOTAnKQotICAgICAgICB0ZXN0KDEuMTIzNGU5MCwgJ0YnLCAnMS4xMjM0ZSs5MCcpCi0gICAgICAgIHRlc3QoMS4xMjM0ZTIwMCwgJ2YnLCAnMS4xMjM0ZSsyMDAnKQotICAgICAgICB0ZXN0KDEuMTIzNGUyMDAsICdGJywgJzEuMTIzNGUrMjAwJykKKworICAgICAgICAjIFB5dGhvbiB2ZXJzaW9ucyA8PSAyLjYgc3dpdGNoZWQgZnJvbSAnZicgdG8gJ2cnIGZvcm1hdHRpbmcgZm9yCisgICAgICAgICMgdmFsdWVzIGxhcmdlciB0aGFuIDFlNTAuICBObyBsb25nZXIuCisgICAgICAgIGYgPSAxLjEyMzRlOTAKKyAgICAgICAgZm9yIGZtdCBpbiAnZicsICdGJzoKKyAgICAgICAgICAgICMgZG9uJ3QgZG8gYSBkaXJlY3QgZXF1YWxpdHkgY2hlY2ssIHNpbmNlIG9uIHNvbWUKKyAgICAgICAgICAgICMgcGxhdGZvcm1zIG9ubHkgdGhlIGZpcnN0IGZldyBkaWdpdHMgb2YgZHRvYQorICAgICAgICAgICAgIyB3aWxsIGJlIHJlbGlhYmxlCisgICAgICAgICAgICByZXN1bHQgPSBmLl9fZm9ybWF0X18oZm10KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgOTgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstN10sICcuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0WzoxMl0sICgnMTEyMzQwMDAwMDAwJywgJzExMjMzOTk5OTk5OScpKQorICAgICAgICBmID0gMS4xMjM0ZTIwMAorICAgICAgICBmb3IgZm10IGluICdmJywgJ0YnOgorICAgICAgICAgICAgcmVzdWx0ID0gZi5fX2Zvcm1hdF9fKGZtdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIDIwOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy03XSwgJy4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHRbOjEyXSwgKCcxMTIzNDAwMDAwMDAnLCAnMTEyMzM5OTk5OTk5JykpCisKIAogICAgICAgICB0ZXN0KCAxLjAsICdlJywgJzEuMDAwMDAwZSswMCcpCiAgICAgICAgIHRlc3QoLTEuMCwgJ2UnLCAnLTEuMDAwMDAwZSswMCcpCkBAIC02MTAsMTEgKzY1NCw0MCBAQAogICAgICAgICAjIGEgdG90YWx5IGVtcHR5IGZvcm1hdCBzcGVjaWZpZXIgbWVhbnMgc29tZXRoaW5nIGVsc2UuCiAgICAgICAgICMgU28sIGp1c3QgdXNlIGEgc2lnbiBmbGFnCiAgICAgICAgIHRlc3QoMWUyMDAsICcrZycsICcrMWUrMjAwJykKLSAgICAgICAgdGVzdCgxZTIwMCwgJysnLCAnKzEuMGUrMjAwJykKKyAgICAgICAgdGVzdCgxZTIwMCwgJysnLCAnKzFlKzIwMCcpCiAgICAgICAgIHRlc3QoMS4xZTIwMCwgJytnJywgJysxLjFlKzIwMCcpCiAgICAgICAgIHRlc3QoMS4xZTIwMCwgJysnLCAnKzEuMWUrMjAwJykKIAotICAgICAgICAjICUgZm9ybWF0dGluZworICAgICAgICB0ZXN0KDEuMWUyMDAsICcrZycsICcrMS4xZSsyMDAnKQorICAgICAgICB0ZXN0KDEuMWUyMDAsICcrJywgJysxLjFlKzIwMCcpCisKKyAgICAgICAgIyAwIHBhZGRpbmcKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMGYnLCAnMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQuLCAnMDExZicsICcxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTJmJywgJzAxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDExZicsICctMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMmYnLCAnLTEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTNmJywgJy0wMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LjEyMzQxMjM0LCAnMDEzZicsICctMDEyMzQuMTIzNDEyJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LjEyMzQxMjM0LCAnMDExLjJmJywgJy0wMTIzNDU2LjEyJykKKworICAgICAgICAjIGlzc3VlIDU3ODIsIGNvbW1hcyB3aXRoIG5vIHNwZWNpZmllciB0eXBlCisgICAgICAgIHRlc3QoMS4yLCAnMDEwLC4yJywgJzAsMDAwLDAwMS4yJykKKworICAgICAgICAjIDAgcGFkZGluZyB3aXRoIGNvbW1hcworICAgICAgICB0ZXN0KDEyMzQuLCAnMDExLGYnLCAnMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMixmJywgJzEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTMsZicsICcwMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTIsZicsICctMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTMsZicsICctMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTQsZicsICctMDEsMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQ1LiwgJzAxNSxmJywgJy0wMTIsMzQ1LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQ1Ni4sICcwMTYsZicsICctMCwxMjMsNDU2LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQ1Ni4sICcwMTcsZicsICctMCwxMjMsNDU2LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQ1Ni4xMjM0MTIzNCwgJzAxNyxmJywgJy0wLDEyMyw0NTYuMTIzNDEyJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LjEyMzQxMjM0LCAnMDEzLC4yZicsICctMCwxMjMsNDU2LjEyJykKKworICAgICAgICAgIyAlIGZvcm1hdHRpbmcKICAgICAgICAgdGVzdCgtMS4wLCAnJScsICctMTAwLjAwMDAwMCUnKQogCiAgICAgICAgICMgZm9ybWF0IHNwZWMgbXVzdCBiZSBzdHJpbmcKQEAgLTYzOCw5ICs3MTEsNDMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjMjBmJykKIAorICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMDwyMCIsICcxMjM0NS42MDAwMDAwMDAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE8MjAiLCAnMTIzNDUuNjExMTExMTExMTExMTEnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPDIwIiwgJzEyMzQ1LjYqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMD4yMCIsICcwMDAwMDAwMDAwMDAwMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE+MjAiLCAnMTExMTExMTExMTExMTEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPjIwIiwgJyoqKioqKioqKioqKioxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMD0yMCIsICcwMDAwMDAwMDAwMDAwMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE9MjAiLCAnMTExMTExMTExMTExMTEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPTIwIiwgJyoqKioqKioqKioqKioxMjM0NS42JykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9zcGVjX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBpbnQsIGZsb2F0LCBhbmQgc3RyaW5nIGFsbCBzaGFyZSB0aGUgc2FtZSBmb3JtYXQgc3BlYworICAgICAgICAjIG1pbmktbGFuZ3VhZ2UgcGFyc2VyLgorCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4ndCBhc2sgZm9yIHRvbyBtYW55IGRpZ2l0cy4gVGhpcyBpcworICAgICAgICAjIHByb2JhYmx5IGEgQ1B5dGhvbiBzcGVjaWZpYyB0ZXN0LiBJdCB0cmllcyB0byBwdXQgdGhlIHdpZHRoCisgICAgICAgICMgaW50byBhIEMgbG9uZy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBTaW1pbGFyIHdpdGggdGhlIHByZWNpc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnLicgKyAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBBbmQgbWF5IGFzIHdlbGwgdGVzdCBib3RoLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcxJyoxMDAwICsgJy4nICsgJzEnKjEwMDAwICsgJ2QnKQorCisgICAgICAgICMgTWFrZSBzdXJlIGNvbW1hcyBhcmVuJ3QgYWxsb3dlZCB3aXRoIHZhcmlvdXMgdHlwZSBjb2RlcworICAgICAgICBmb3IgY29kZSBpbiAneFhvYm5zJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMCwgJywnICsgY29kZSkKKworICAgIGRlZiB0ZXN0X2ludGVybmFsX3NpemVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIob2JqZWN0Ll9fYmFzaWNzaXplX18sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0dXBsZS5fX2l0ZW1zaXplX18sIDApCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKICAgICAgICAgICAgICgiY2xhc3NpYyBsb25nIGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHJ1bl91bml0dGVzdChUeXBlc1Rlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmFyeS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5hcnkucHkKaW5kZXggOTg1NGY2NC4uNTk4ZmNhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmFyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5CkBAIC02LDMyICs2LDMyIEBACiBjbGFzcyBVbmFyeU9wVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbmVnYXRpdmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0XygtMiA9PSAwIC0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0wID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtLTIgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKC0yTCA9PSAwIC0gMkwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMi4wID09IDAgLSAyLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMmogPT0gMCAtIDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIgPT0gMCAtIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMCA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLS0yID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMkwgPT0gMCAtIDJMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIuMCA9PSAwIC0gMi4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTJqID09IDAgLSAyaikKIAogICAgIGRlZiB0ZXN0X3Bvc2l0aXZlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oKzIgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCswID09IDApCi0gICAgICAgIHNlbGYuYXNzZXJ0XygrKzIgPT0gMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKCsyTCA9PSAyTCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCsyLjAgPT0gMi4wKQotICAgICAgICBzZWxmLmFzc2VydF8oKzJqID09IDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCswID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrKzIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsyTCA9PSAyTCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsyLjAgPT0gMi4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzJqID09IDJqKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oLTIgPT0gMCAtIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMCA9PSAwKQotICAgICAgICBzZWxmLmFzc2VydF8oLS0yID09IDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygtMkwgPT0gMCAtIDJMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIgPT0gMCAtIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMCA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLS0yID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMkwgPT0gMCAtIDJMKQogCiAgICAgZGVmIHRlc3Rfbm9fb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIG5pbmVzID0gIjkiICogMzIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV2YWwoIisiICsgbmluZXMpID09IGV2YWwoIisiICsgbmluZXMgKyAiTCIpKQotICAgICAgICBzZWxmLmFzc2VydF8oZXZhbCgiLSIgKyBuaW5lcykgPT0gZXZhbCgiLSIgKyBuaW5lcyArICJMIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhldmFsKCJ+IiArIG5pbmVzKSA9PSBldmFsKCJ+IiArIG5pbmVzICsgIkwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoIisiICsgbmluZXMpID09IGV2YWwoIisiICsgbmluZXMgKyAiTCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiLSIgKyBuaW5lcykgPT0gZXZhbCgiLSIgKyBuaW5lcyArICJMIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJ+IiArIG5pbmVzKSA9PSBldmFsKCJ+IiArIG5pbmVzICsgIkwiKSkKIAogICAgIGRlZiB0ZXN0X25lZ2F0aW9uX29mX2V4cG9uZW50aWF0aW9uKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSAnKionIGRvZXMgdGhlIHJpZ2h0IHRoaW5nOyB0aGVzZSBmb3JtIGEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5kb2N1bWVudGVkX2RldGFpbHMucHkgYi9MaWIvdGVzdC90ZXN0X3VuZG9jdW1lbnRlZF9kZXRhaWxzLnB5CmluZGV4IGJjOTAwN2IuLmE4ZmMyODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5kb2N1bWVudGVkX2RldGFpbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weQpAQCAtMSw2ICsxLDUgQEAKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgX2NoZWNrX3B5M2tfd2FybmluZ3MKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCiAKIGNsYXNzIFRlc3RJbXBsZW1lbnRhdGlvbkNvbXBhcmlzb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzMsNyArMzIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZ19jZWxsICE9IGhfY2VsbCkKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKICAgICAgICAgcnVuX3VuaXR0ZXN0KFRlc3RJbXBsZW1lbnRhdGlvbkNvbXBhcmlzb25zKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IDM1MTM0ZWMuLmFlNGMzNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTEsNCArMSwzIEBACi0jIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCiAiIiIgVGVzdCBzY3JpcHQgZm9yIHRoZSBVbmljb2RlIGltcGxlbWVudGF0aW9uLgogCiBXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KQEAgLTM0LDExICszMywyMSBAQAogICAgICk6CiAgICAgdHlwZTJ0ZXN0ID0gdW5pY29kZQogCisgICAgZGVmIGFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAgICAgIyBzdHJpY3QgYXNzZXJ0RXF1YWwgbWV0aG9kOiByZWplY3QgaW1wbGljaXQgYnl0ZXMvdW5pY29kZSBlcXVhbGl0eQorICAgICAgICBzdXBlcihVbmljb2RlVGVzdCwgc2VsZikuYXNzZXJ0RXF1YWwoZmlyc3QsIHNlY29uZCwgbXNnKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZpcnN0LCB1bmljb2RlKSBvciBpc2luc3RhbmNlKHNlY29uZCwgdW5pY29kZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlyc3QsIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2Vjb25kLCB1bmljb2RlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZmlyc3QsIHN0cikgb3IgaXNpbnN0YW5jZShzZWNvbmQsIHN0cik6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlyc3QsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWNvbmQsIHN0cikKKwogICAgIGRlZiBjaGVja2VxdWFsbm9maXgoc2VsZiwgcmVzdWx0LCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpCiAgICAgICAgIHJlYWxyZXN1bHQgPSBtZXRob2QoKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHJlc3VsdCwgcmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydF8odHlwZShyZWFscmVzdWx0KSBpcyB0eXBlKHJlc3VsdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJlYWxyZXN1bHQpIGlzIHR5cGUocmVzdWx0KSkKIAogICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBpcyByZXR1cm5lZCBtYWtlIHN1cmUgdGhhdAogICAgICAgICAjIHRoaXMgZG9lc24ndCBoYXBwZW4gd2l0aCBzdWJjbGFzc2VzCkBAIC01MCw3ICs1OSw3IEBACiAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkKICAgICAgICAgICAgIHJlYWxyZXN1bHQgPSBtZXRob2QoKmFyZ3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxyZXN1bHQsIHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqZWN0IGlzIG5vdCByZWFscmVzdWx0KQogCiAgICAgZGVmIHRlc3RfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdceGZmJywgdSdcdTAwZmYnKQpAQCAtMTk3LDI4ICsyMDYsMjggQEAKIAogICAgIGRlZiB0ZXN0X2NvbXBhcmlzb24oc2VsZik6CiAgICAgICAgICMgQ29tcGFyaXNvbnM6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmMnLCAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjJywgdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYmNkJyA+ICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2FiY2QnID4gdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhYmNkJyA+IHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWJjJyA8ICdhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhYmMnIDwgdSdhYmNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWJjJyA8IHUnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiYycgPT0gJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjJyA9PSB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiYycgPT0gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmNkJyA+ICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiY2QnID4gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmNkJyA+IHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA8ICdhYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmMnIDwgdSdhYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA8IHUnYWJjZCcpCiAKICAgICAgICAgaWYgMDoKICAgICAgICAgICAgICMgTW92ZSB0aGVzZSB0ZXN0cyB0byBhIFVuaWNvZGUgY29sbGF0aW9uIG1vZHVsZSB0ZXN0Li4uCiAgICAgICAgICAgICAjIFRlc3RpbmcgVVRGLTE2IGNvZGUgcG9pbnQgb3JkZXIgY29tcGFyaXNvbnMuLi4KIAogICAgICAgICAgICAgIyBObyBzdXJyb2dhdGVzLCBubyBmaXh1cCByZXF1aXJlZC4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1x1MDA2MScgPCB1J1x1MjBhYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdTAwNjEnIDwgdSdcdTIwYWMnKQogICAgICAgICAgICAgIyBOb24gc3Vycm9nYXRlIGJlbG93IHN1cnJvZ2F0ZSB2YWx1ZSwgbm8gZml4dXAgcmVxdWlyZWQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1x1MDA2MScgPCB1J1x1ZDgwMFx1ZGMwMicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdTAwNjEnIDwgdSdcdWQ4MDBcdWRjMDInKQogCiAgICAgICAgICAgICAjIE5vbiBzdXJyb2dhdGUgYWJvdmUgc3Vycm9nYXRlIHZhbHVlLCBmaXh1cCByZXF1aXJlZAogICAgICAgICAgICAgZGVmIHRlc3RfbGVjbXAocywgczIpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhzIDwgczIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPCBzMikKIAogICAgICAgICAgICAgZGVmIHRlc3RfZml4dXAocyk6CiAgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDgwMFx1ZGMwMScKQEAgLTI1OCw3ICsyNjcsNyBAQAogICAgICAgICAgICAgICAgIHRlc3RfZml4dXAodSdcdWZmNjEnKQogCiAgICAgICAgICMgU3Vycm9nYXRlcyBvbiBib3RoIHNpZGVzLCBubyBmaXh1cCByZXF1aXJlZAotICAgICAgICBzZWxmLmFzc2VydF8odSdcdWQ4MDBcdWRjMDInIDwgdSdcdWQ4NGRcdWRjNTYnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdWQ4MDBcdWRjMDInIDwgdSdcdWQ4NGRcdWRjNTYnKQogCiAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNsb3dlcihzZWxmKQpAQCAtMzE2LDY1ICszMjUsNjcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBjb250YWlucyBtZXRob2QKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiB1J2FiZGInKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluIHUnYmRhYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gdSdiZGFiYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gdSdiZGJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiB1J2JkYmEnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhJyBpbiB1J2JkYmEnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhJyBub3QgaW4gdSdiZGInKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhJyBub3QgaW4gJ2JkYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluICdiZGJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYScgaW4gKCdhJywxLE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhJyBpbiAoMSxOb25lLCdhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluICgxLE5vbmUsdSdhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gKCdhJywxLE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluICgxLE5vbmUsJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhJyBpbiAoMSxOb25lLHUnYScpKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIG5vdCBpbiAoJ3gnLDEsdSd5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgbm90IGluICgneCcsMSxOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWJjZCcgbm90IGluIHUnYWJjeHh4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FiJyBpbiB1J2FiY2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2FiJyBpbiB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FiJyBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYWInIGluICgxLE5vbmUsdSdhYicpKQotICAgICAgICBzZWxmLmFzc2VydF8odScnIGluIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYWJkYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYWInKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdiZGFiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdiZGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYScsIHUnYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2EnLCAnYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgKCdhJywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICgxLE5vbmUsJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAoMSxOb25lLHUnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKCdhJywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKDEsTm9uZSwnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKDEsTm9uZSx1J2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsICgneCcsMSx1J3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsICgneCcsMSxOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FiY2QnLCB1J2FiY3h4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYWInLCB1J2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhYicsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FiJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhYicsICgxLE5vbmUsdSdhYicpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1J2FiYycpCiAKICAgICAgICAgIyBJZiB0aGUgZm9sbG93aW5nIGZhaWxzIGVpdGhlcgogICAgICAgICAjIHRoZSBjb250YWlucyBvcGVyYXRvciBkb2VzIG5vdCBwcm9wYWdhdGUgVW5pY29kZUVycm9ycyBvcgogICAgICAgICAjIHNvbWVvbmUgaGFzIGNoYW5nZWQgdGhlIGRlZmF1bHQgZW5jb2RpbmcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCAnZ1x4ZTJ0ZWF1Jy5fX2NvbnRhaW5zX18sIHUnXHhlMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgJ2dceGUydGVhdScuX19jb250YWluc19fLCB1J1x4ZTInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHUnZ1x4ZTJ0ZWF1Jy5fX2NvbnRhaW5zX18sICdceGUyJykKIAotICAgICAgICBzZWxmLmFzc2VydF8odScnIGluICcnKQotICAgICAgICBzZWxmLmFzc2VydF8oJycgaW4gdScnKQotICAgICAgICBzZWxmLmFzc2VydF8odScnIGluIHUnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnJyBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCcnIGluIHUnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnJyBpbiB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1wwJyBub3QgaW4gJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnXDAnIG5vdCBpbiB1J2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1wwJyBub3QgaW4gdSdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdcMCcgaW4gJ1wwYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdcMCcgaW4gdSdcMGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J1wwJyBpbiB1J1wwYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnXDAnIGluICdhYmNcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnXDAnIGluIHUnYWJjXDAnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdcMCcgaW4gdSdhYmNcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluICdcMGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYScgaW4gdSdcMGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2EnIGluIHUnXDBhYmMnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhc2RmJyBpbiAnYXNkZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnYXNkZicgaW4gdSdhc2RmJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYXNkZicgaW4gdSdhc2RmJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUnYXNkZicgbm90IGluICdhc2QnKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2FzZGYnIG5vdCBpbiB1J2FzZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FzZGYnIG5vdCBpbiB1J2FzZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1J2FzZGYnIG5vdCBpbiAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdhc2RmJyBub3QgaW4gdScnKQotICAgICAgICBzZWxmLmFzc2VydF8odSdhc2RmJyBub3QgaW4gdScnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1JycsIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1JycsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdcMCcsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdcMCcsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J1wwJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCAnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdcMCcsIHUnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCB1J1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J1wwJywgJ2FiY1wwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignXDAnLCB1J2FiY1wwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J1wwJywgdSdhYmNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgJ1wwYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsIHUnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYXNkZicsICdhc2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYXNkZicsIHUnYXNkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhc2RmJywgdSdhc2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCAnYXNkJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYXNkZicsIHUnYXNkJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCB1J2FzZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhc2RmJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2FzZGYnLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSdhc2RmJywgdScnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJhYmMiLl9fY29udGFpbnNfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuX19jb250YWluc19fLCBvYmplY3QoKSkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmcoc2VsZik6CiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2Zvcm1hdHRpbmcoc2VsZikKQEAgLTM5Niw4ICs0MDcsMTAgQEAKIAogICAgICAgICBmb3IgbnVtIGluIHJhbmdlKDB4MDAsMHg4MCk6CiAgICAgICAgICAgICBjaGFyID0gY2hyKG51bSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSBjaGFyLCBjaGFyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVjIiAlIG51bSwgY2hhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSBjaGFyLCB1bmljb2RlKGNoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVjIiAlIG51bSwgdW5pY29kZShjaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGFyID09IHUiJWMiICUgY2hhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGFyID09IHUiJWMiICUgbnVtKQogICAgICAgICAjIElzc3VlIDc2NDkKICAgICAgICAgZm9yIG51bSBpbiByYW5nZSgweDgwLDB4MTAwKToKICAgICAgICAgICAgIHVjaGFyID0gdW5pY2hyKG51bSkKQEAgLTUxMSw3ICs1MjQsNyBAQAogICAgICAgICApCiAKICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6Ci0gICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcignY2hhcmFjdGVyIGJ1ZmZlcnMgYXJlIGRlY29kZWQgdG8gdW5pY29kZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIHVuaWNvZGUoCkBAIC01MzcsMTkgKzU1MCwzMCBAQAogICAgICAgICAgICAgKHUnKz8nLCAnKy0/JyksCiAgICAgICAgICAgICAodXInXFw/JywgJytBRndBWEE/JyksCiAgICAgICAgICAgICAodXInXFxcPycsICcrQUZ3QVhBQmM/JyksCi0gICAgICAgICAgICAodXInKystLScsICcrLSstLS0nKQorICAgICAgICAgICAgKHVyJysrLS0nLCAnKy0rLS0tJyksCisgICAgICAgICAgICAodSdcVTAwMGFiY2RlJywgJysybS9jM2ctJyksICAgICAgICAgICAgICAgICAgIyBzdXJyb2dhdGUgcGFpcnMKKyAgICAgICAgICAgICh1Jy8nLCAnLycpLAogICAgICAgICBdCiAKICAgICAgICAgZm9yICh4LCB5KSBpbiB1dGZUZXN0czoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5lbmNvZGUoJ3V0Zi03JyksIHkpCiAKLSAgICAgICAgIyBzdXJyb2dhdGVzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgIyBVbnBhaXJlZCBzdXJyb2dhdGVzIG5vdCBzdXBwb3J0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1bmljb2RlLCAnKzNBRFlBQS0nLCAndXRmLTcnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnKzNBRFlBQS0nLCAndXRmLTcnLCAncmVwbGFjZScpLCB1J1x1ZmZmZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnKzNBRFlBQS0nLCAndXRmLTcnLCAncmVwbGFjZScpLCB1J1x1ZmZmZFx1ZmZmZCcpCiAKLSAgICAgICAgIyBJc3N1ZSAjMjI0MjogY3Jhc2ggb24gc29tZSBXaW5kb3dzL01TVkMgdmVyc2lvbnMKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCAnK1x4YzEnLmRlY29kZSwgJ3V0Zi03JykKKyAgICAgICAgIyBEaXJlY3QgZW5jb2RlZCBjaGFyYWN0ZXJzCisgICAgICAgIHNldF9kID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JygpLC0uLzo/IgorICAgICAgICAjIE9wdGlvbmFsIGRpcmVjdCBjaGFyYWN0ZXJzCisgICAgICAgIHNldF9vID0gJyEiIyQlJio7PD0+QFtdXl9ge3x9JworICAgICAgICBmb3IgYyBpbiBzZXRfZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5lbmNvZGUoJ3V0ZjcnKSwgYy5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpLCB1bmljb2RlKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgPT0gYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JykpCisgICAgICAgIGZvciBjIGluIHNldF9vOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3V0ZjcnKSwgdW5pY29kZShjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjID09IGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpKQogCiAgICAgZGVmIHRlc3RfY29kZWNzX3V0Zjgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmVuY29kZSgndXRmLTgnKSwgJycpCkBAIC01ODIsOSArNjA2LDkgQEAKICAgICAgICAgKQogCiAgICAgICAgICMgVVRGLTggc3BlY2lmaWMgZGVjb2RpbmcgdGVzdHMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGYwXHhhM1x4OTFceDk2JywgJ3V0Zi04JyksIHUnXFUwMDAyMzQ1NicgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZjBceDkwXHg4MFx4ODInLCAndXRmLTgnKSwgdSdcVTAwMDEwMDAyJyApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhlMlx4ODJceGFjJywgJ3V0Zi04JyksIHUnXHUyMGFjJyApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhmMFx4YTNceDkxXHg5NicsICd1dGYtOCcpLCB1J1xVMDAwMjM0NTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZjBceDkwXHg4MFx4ODInLCAndXRmLTgnKSwgdSdcVTAwMDEwMDAyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGUyXHg4Mlx4YWMnLCAndXRmLTgnKSwgdSdcdTIwYWMnKQogCiAgICAgICAgICMgT3RoZXIgcG9zc2libGUgdXRmLTggdGVzdCBjYXNlczoKICAgICAgICAgIyAqIHN0cmljdCBkZWNvZGluZyB0ZXN0aW5nIGZvciBhbGwgb2YgdGhlCkBAIC02NDMsMTEgKzY2NywxNyBAQAogICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zL1VuaWNvZGU1LjIuMC9jaDAzLnBkZgogICAgICAgICAjICh0YWJsZSAzLTcpIGFuZCBodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNjI5LnR4dAogICAgICAgICAjZm9yIGNiIGluIG1hcChjaHIsIHJhbmdlKDB4QTAsIDB4QzApKToKLSAgICAgICAgICAgICNzeXMuX19zdGRvdXRfXy53cml0ZSgnXFx4RURcXHglMDJ4XFx4ODBcbicgJSBvcmQoY2IpKQogICAgICAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMoJ1x4RUQnK2NiKydceDgwJykuZGVjb2RlLCAndXRmLTgnKQogICAgICAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMoJ1x4RUQnK2NiKydceEJGJykuZGVjb2RlLCAndXRmLTgnKQorICAgICAgICAjIGJ1dCBzaW5jZSB0aGV5IGFyZSB2YWxpZCBvbiBQeXRob24gMiBhZGQgYSB0ZXN0IGZvciB0aGF0OgorICAgICAgICBmb3IgY2IsIHN1cnJvZ2F0ZSBpbiB6aXAobWFwKGNociwgcmFuZ2UoMHhBMCwgMHhDMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHVuaWNociwgcmFuZ2UoMHhkODAwLCAweGUwMDAsIDY0KSkpOgorICAgICAgICAgICAgZW5jb2RlZCA9ICdceEVEJytjYisnXHg4MCcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZC5kZWNvZGUoJ3V0Zi04JyksIHN1cnJvZ2F0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Vycm9nYXRlLmVuY29kZSgndXRmLTgnKSwgZW5jb2RlZCkKKwogICAgICAgICBmb3IgY2IgaW4gbWFwKGNociwgcmFuZ2UoMHg4MCwgMHg5MCkpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdceEYwJytjYisnXHg4MFx4ODAnKS5kZWNvZGUsICd1dGYtOCcpCkBAIC03NTgsMTIgKzc4OCwyMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHUnQW5kclwyMDIgeCcuZW5jb2RlLCAnYXNjaWknLCdzdHJpY3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpLCAiQW5kciB4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCdyZXBsYWNlJyksICJBbmRyPyB4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J0FuZHJcMjAyIHgnLmVuY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQogCiAgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKGRlY29kaW5nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICdBbmRyXDIwMiB4JywgJ2FzY2lpJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1bmljb2RlLCAnQW5kclwyMDIgeCcsICdhc2NpaScsJ3N0cmljdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnQW5kclwyMDIgeCcsJ2FzY2lpJywnaWdub3JlJyksIHUiQW5kciB4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdyZXBsYWNlJyksIHUnQW5kclx1RkZGRCB4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiY2RlJy5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnYWJjZGUnLmRlY29kZSgnYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjZGUnLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnYWJjZGUnLmRlY29kZShlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKIAogICAgICAgICAjIEVycm9yIGhhbmRsaW5nICh1bmtub3duIGNoYXJhY3RlciBuYW1lcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXFxOe2Zvb314eCIuZGVjb2RlKCJ1bmljb2RlLWVzY2FwZSIsICJpZ25vcmUiKSwgdSJ4eCIpCkBAIC04NDAsOCArODc4LDggQEAKICAgICAgICAgcyA9ICcnLmpvaW4obWFwKGNociwgeHJhbmdlKDEyOCkpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAogICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCi0gICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAotICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKKyAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCisgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAogICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV8zJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLCAnaXNvODg1OV82JywKQEAgLTg2OCw4ICs5MDYsOCBAQAogICAgICAgICBzID0gJycuam9pbihtYXAoY2hyLCB4cmFuZ2UoMTI4LCAyNTYpKSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKICAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAotICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKLSAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCisgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAorICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKICAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLApAQCAtMTE5MCw3ICsxMjI4LDcgQEAKICAgICAgICAgIyBmb3JtYXQgc3BlY2lmaWVycyBmb3IgdXNlciBkZWZpbmVkIHR5cGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOmFiY30nLmZvcm1hdChDKCkpLCB1J2FiYycpCiAKLSAgICAgICAgIyAhciBhbmQgIXMgY29lcnNpb25zCisgICAgICAgICMgIXIgYW5kICFzIGNvZXJjaW9ucwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhc30nLmZvcm1hdCh1J0hlbGxvJyksIHUnSGVsbG8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhczp9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXM6MTV9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvICAgICAgICAgICcpCkBAIC0xMjA0LDEyICsxMjQyLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdChbXSksIHUnW10nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQoWzFdKSwgdSdbMV0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQoRSh1J2RhdGEnKSksIHUnRShkYXRhKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTB9Jy5mb3JtYXQoRSh1J2RhdGEnKSksIHUnIEUoZGF0YSkgICcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTBzfScuZm9ybWF0KEUodSdkYXRhJykpLCB1JyBFKGRhdGEpICAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6ZH0nLmZvcm1hdChHKHUnZGF0YScpKSwgdSdHKGRhdGEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOj4xNXN9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnIHN0cmluZyBpcyBkYXRhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXN9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnc3RyaW5nIGlzIGRhdGEnKQogCisgICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOl4xMH0nLmZvcm1hdChFKHUnZGF0YScpKSwgdScgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTBzfScuZm9ybWF0KEUodSdkYXRhJykpLCB1JyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOj4xNXN9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnIHN0cmluZyBpcyBkYXRhJykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6ZGF0ZTogJVktJW0tJWR9Ii5mb3JtYXQoSSh5ZWFyPTIwMDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheT0yNykpLApAQCAtMTI2MSw5ICsxMzAyLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MCF9Ii5mb3JtYXQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAhcnN9Ii5mb3JtYXQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUieyF9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezp9Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezpzfSIuZm9ybWF0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1Int9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezp9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezpzfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1Int9Ii5mb3JtYXQpCiAgICAgICAgIGJpZyA9IHUiMjMwOTg0NzUwMjkzODQ3MDI5ODM0NzYwOTgyMzA3NTQ5NzMyMDk0ODI1NzMiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICh1InsiICsgYmlnICsgdSJ9IikuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAodSJ7WyIgKyBiaWcgKyB1Il19IikuZm9ybWF0LCBbMF0pCkBAIC0xMjk0LDYgKzEzMzUsMzYgQEAKICAgICAgICAgIyAgd2lsbCBmYWlsCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgImZvb3swfSIuZm9ybWF0LCB1J1x1MTAwMGJhcicpCiAKKyAgICBkZWYgdGVzdF9mb3JtYXRfYXV0b19udW1iZXJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeD0xMDApOgorICAgICAgICAgICAgICAgIHNlbGYuX3ggPSB4CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7fScuZm9ybWF0KDEwKSwgdScxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7OjV9Jy5mb3JtYXQoJ3MnKSwgdSdzICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7IXJ9Jy5mb3JtYXQoJ3MnKSwgdSIncyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUney5feH0nLmZvcm1hdChDKDEwKSksIHUnMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne1sxXX0nLmZvcm1hdChbMSwgMl0pLCB1JzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne1thXX0nLmZvcm1hdCh7J2EnOjQsICdiJzoyfSksIHUnNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhe31ie31jJy5mb3JtYXQoMCwgMSksIHUnYTBiMWMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhezp7fX1iJy5mb3JtYXQoJ3gnLCAnXjEwJyksIHUnYSAgICB4ICAgICBiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7Ont9eH1iJy5mb3JtYXQoMjAsICcjJyksIHUnYTB4MTRiJykKKworICAgICAgICAjIGNhbid0IG1peCBhbmQgbWF0Y2ggbnVtYmVyaW5nIGFuZCBhdXRvLW51bWJlcmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3t9ezF9Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnezF9e30nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7OnsxfX0nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7MDp7fX0nLmZvcm1hdCwgMSwgMikKKworICAgICAgICAjIGNhbiBtaXggYW5kIG1hdGNoIGF1dG8tbnVtYmVyaW5nIGFuZCBuYW1lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne2Z9e30nLmZvcm1hdCg0LCBmPSd0ZXN0JyksIHUndGVzdDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne317Zn0nLmZvcm1hdCg0LCBmPSd0ZXN0JyksIHUnNHRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezp7Zn19e2d9e30nLmZvcm1hdCgxLCAzLCBnPSdnJywgZj0yKSwgdScgMWczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3tmOnt9fXt9e2d9Jy5mb3JtYXQoMiwgNCwgZj0xLCBnPSdnJyksIHUnIDE0ZycpCisKICAgICBkZWYgdGVzdF9yYWlzZU1lbUVycm9yKHNlbGYpOgogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBmcmVlbGlzdCBjb250YWlucyBhIGNvbnNpc3RlbnQgb2JqZWN0LCBldmVuCiAgICAgICAgICMgd2hlbiBhIHN0cmluZyBhbGxvY2F0aW9uIGZhaWxzIHdpdGggYSBNZW1vcnlFcnJvci4KQEAgLTEzMTEsOCArMTM4Miw4IEBACiAgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHUnX191bmljb2RlX18gb3ZlcnJpZGRlbicKICAgICAgICAgdSA9IFUodSd4eHgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygiJXMiICUgdSwgdSdfX3VuaWNvZGVfXyBvdmVycmlkZGVuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoInswfSIuZm9ybWF0KHUpLCB1J19fdW5pY29kZV9fIG92ZXJyaWRkZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcyIgJSB1LCB1J19fdW5pY29kZV9fIG92ZXJyaWRkZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7fSIuZm9ybWF0KHUpLCAnX191bmljb2RlX18gb3ZlcnJpZGRlbicpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQppbmRleCAzMDVmOThiLi5mMDRiYWQzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQpAQCAtNSwxNCArNSwxNCBAQAogaW1wb3J0IHVuaWNvZGVkYXRhCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBUZXN0U2tpcHBlZCwgVEVTVEZOX1VOSUNPREUKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTl9FTkNPRElORywgVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTl9VTklDT0RFCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk5fRU5DT0RJTkcsIFRFU1RGTl9VTkVOQ09EQUJMRQogdHJ5OgogICAgIFRFU1RGTl9FTkNPREVEID0gVEVTVEZOX1VOSUNPREUuZW5jb2RlKFRFU1RGTl9FTkNPRElORykKIGV4Y2VwdCAoVW5pY29kZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICMgRWl0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyBOb25lLCBvciB0aGUgZmlsZSBuYW1lCiAgICAgIyBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcuCi0gICAgcmFpc2UgVGVzdFNraXBwZWQoIk5vIFVuaWNvZGUgZmlsZXN5c3RlbSBzZW1hbnRpY3Mgb24gdGhpcyBwbGF0Zm9ybS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBVbmljb2RlIGZpbGVzeXN0ZW0gc2VtYW50aWNzIG9uIHRoaXMgcGxhdGZvcm0uIikKIAogaWYgVEVTVEZOX0VOQ09ERUQuZGVjb2RlKFRFU1RGTl9FTkNPRElORykgIT0gVEVTVEZOX1VOSUNPREU6CiAgICAgIyBUaGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgZG9lcyBub3Qgc3VwcG9ydCBMYXRpbi0xCkBAIC0yNiwxMCArMjYsMTAgQEAKICAgICAgICAgICAgICMgTUJDUyB3aWxsIG5vdCByZXBvcnQgdGhlIGVycm9yIHByb3Blcmx5CiAgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJtYmNzIGVuY29kaW5nIHByb2JsZW0iCiAgICAgZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6Ci0gICAgICAgIHJhaXNlIFRlc3RTa2lwcGVkKCJDYW5ub3QgZmluZCBhIHN1aXRlYWJsZSBmaWxlbmFtZS4iKQorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IGZpbmQgYSBzdWl0ZWFibGUgZmlsZW5hbWUuIikKIAogaWYgVEVTVEZOX0VOQ09ERUQuZGVjb2RlKFRFU1RGTl9FTkNPRElORykgIT0gVEVTVEZOX1VOSUNPREU6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQoIkNhbm5vdCBmaW5kIGEgc3VpdGFibGUgZmlsZW5hbWUuIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IGZpbmQgYSBzdWl0YWJsZSBmaWxlbmFtZS4iKQogCiBkZWYgcmVtb3ZlX2lmX2V4aXN0cyhmaWxlbmFtZSk6CiAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgpAQCAtNDIsMTkgKzQyLDE5IEBACiAgICAgIyBEbyBhbGwgdGhlIHRlc3RzIHdlIGNhbiBnaXZlbiBvbmx5IGEgc2luZ2xlIGZpbGVuYW1lLiAgVGhlIGZpbGUgc2hvdWxkCiAgICAgIyBleGlzdC4KICAgICBkZWYgX2RvX3NpbmdsZShzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5hY2Nlc3MoZmlsZW5hbWUsIG9zLlJfT0spKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5leGlzdHMob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLmFjY2Vzcyhvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpLCBvcy5SX09LKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmFjY2VzcyhmaWxlbmFtZSwgb3MuUl9PSykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSksIG9zLlJfT0spKQogICAgICAgICBvcy5jaG1vZChmaWxlbmFtZSwgMDc3NykKICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIE5vbmUpCiAgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAodGltZS50aW1lKCksIHRpbWUudGltZSgpKSkKICAgICAgICAgIyBDb3B5L3JlbmFtZSBldGMgdGVzdHMgdXNpbmcgdGhlIHNhbWUgZmlsZW5hbWUKICAgICAgICAgc2VsZi5fZG9fY29weWlzaChmaWxlbmFtZSwgZmlsZW5hbWUpCiAgICAgICAgICMgRmlsZW5hbWUgc2hvdWxkIGFwcGVhciBpbiBnbG9iIG91dHB1dAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSk9PW9zLnBhdGguYWJzcGF0aChnbG9iLmdsb2IoZmlsZW5hbWUpWzBdKSkKICAgICAgICAgIyBiYXNlbmFtZSBzaG91bGQgYXBwZWFyIGluIGxpc3RkaXIuCiAgICAgICAgIHBhdGgsIGJhc2UgPSBvcy5wYXRoLnNwbGl0KG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpCkBAIC03MSw3ICs3MSw3IEBACiAgICAgICAgIGJhc2UgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIGJhc2UpCiAgICAgICAgIGZpbGVfbGlzdCA9IFt1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIGYpIGZvciBmIGluIGZpbGVfbGlzdF0KIAotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoYmFzZSBpbiBmaWxlX2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYmFzZSwgZmlsZV9saXN0KQogCiAgICAgIyBEbyBhcyBtYW55ICJlcXVpdmFsYW5jeScgdGVzdHMgYXMgd2UgY2FuIC0gaWUsIGNoZWNrIHRoYXQgYWx0aG91Z2ggd2UKICAgICAjIGhhdmUgZGlmZmVyZW50IHR5cGVzIGZvciB0aGUgZmlsZW5hbWUsIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZS4KQEAgLTc5LDEyICs3OSwxMiBAQAogICAgICAgICAjIE5vdGUgd2Ugb25seSBjaGVjayAiZmlsZW5hbWUxIGFnYWluc3QgZmlsZW5hbWUyIiAtIHdlIGRvbid0IGJvdGhlcgogICAgICAgICAjIGNoZWNraW5nICJmaWxlbmFtZTIgYWdhaW5zdCAxIiwgYXMgd2UgYXNzdW1lIHdlIGFyZSBjYWxsZWQgYWdhaW4gd2l0aAogICAgICAgICAjIHRoZSBhcmdzIHJldmVyc2VkLgotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShmaWxlbmFtZTEpIT10eXBlKGZpbGVuYW1lMiksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGZpbGVuYW1lMSkhPXR5cGUoZmlsZW5hbWUyKSwKICAgICAgICAgICAgICAgICAgICAgIk5vIHBvaW50IGNoZWNraW5nIGVxdWl2YWxlbnQgZmlsZW5hbWVzIG9mIHRoZSBzYW1lIHR5cGUiKQogICAgICAgICAjIHN0YXQgYW5kIGxzdGF0IHNob3VsZCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cy4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwob3Muc3RhdChmaWxlbmFtZTEpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoZmlsZW5hbWUxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChmaWxlbmFtZTIpKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChvcy5sc3RhdChmaWxlbmFtZTEpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzdGF0KGZpbGVuYW1lMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxzdGF0KGZpbGVuYW1lMikpCiAgICAgICAgICMgQ29weS9yZW5hbWUgZXRjIHRlc3RzIHVzaW5nIGVxdWl2YWxlbnQgZmlsZW5hbWUKICAgICAgICAgc2VsZi5fZG9fY29weWlzaChmaWxlbmFtZTEsIGZpbGVuYW1lMikKQEAgLTkyLDE5ICs5MiwxOSBAQAogICAgICMgVGVzdHMgdGhhdCBjb3B5LCBtb3ZlLCBldGMgb25lIGZpbGUgdG8gYW5vdGhlci4KICAgICBkZWYgX2RvX2NvcHlpc2goc2VsZiwgZmlsZW5hbWUxLCBmaWxlbmFtZTIpOgogICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIHJlbmFtZSB0aGUgZmlsZSB1c2luZyBlaXRoZXIgbmFtZS4KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lMSkpICMgbXVzdCBleGlzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lMSkpICMgbXVzdCBleGlzdC4KICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lMSwgZmlsZW5hbWUyICsgIi5uZXciKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUxKyIubmV3IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTErIi5uZXciKSkKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lMSArICIubmV3IiwgZmlsZW5hbWUyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lMikpCiAKICAgICAgICAgc2h1dGlsLmNvcHkoZmlsZW5hbWUxLCBmaWxlbmFtZTIgKyAiLm5ldyIpCiAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZTEgKyAiLm5ldyIpICMgcmVtb3ZlIHVzaW5nIGVxdWl2IG5hbWUuCiAgICAgICAgICMgQW5kIGEgY291cGxlIG9mIG1vdmVzLCBvbmUgdXNpbmcgZWFjaCBuYW1lLgogICAgICAgICBzaHV0aWwubW92ZShmaWxlbmFtZTEsIGZpbGVuYW1lMiArICIubmV3IikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lMikpCiAgICAgICAgIHNodXRpbC5tb3ZlKGZpbGVuYW1lMSArICIubmV3IiwgZmlsZW5hbWUyKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mob3MucGF0aC5leGlzdHMoZmlsZW5hbWUxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lMSkpCiAgICAgICAgICMgTm90ZSAtIGR1ZSB0byB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc2h1dGlsLm1vdmUsCiAgICAgICAgICMgaXQgdHJpZXMgYSByZW5hbWUgZmlyc3QuICBUaGlzIG9ubHkgZmFpbHMgb24gV2luZG93cyB3aGVuIG9uCiAgICAgICAgICMgZGlmZmVyZW50IGZpbGUgc3lzdGVtcyAtIGFuZCB0aGlzIHRlc3QgY2FuJ3QgZW5zdXJlIHRoYXQuCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBjd2RfcmVzdWx0KQogICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBuYW1lX3Jlc3VsdCkKIAotICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKG9zLnBhdGguYmFzZW5hbWUoY3dkX3Jlc3VsdCksbmFtZV9yZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKGN3ZF9yZXN1bHQpLG5hbWVfcmVzdWx0KQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2RvX3NpbmdsZShmaWxlbmFtZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpKQogICAgICAgICAjIGFuZCBhZ2FpbiB3aXRoIG9zLm9wZW4uCiAgICAgICAgIGYgPSBvcy5vcGVuKGZpbGVuYW1lLCBvcy5PX0NSRUFUKQogICAgICAgICBvcy5jbG9zZShmKQpAQCAtMTU4LDcgKzE1OCw3IEBACiAKICAgICBkZWYgX3Rlc3RfZXF1aXZhbGVudChzZWxmLCBmaWxlbmFtZTEsIGZpbGVuYW1lMik6CiAgICAgICAgIHJlbW92ZV9pZl9leGlzdHMoZmlsZW5hbWUxKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3Mobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKICAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUxLCAidyIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICB0cnk6CkBAIC0xNzEsOCArMTcxLDggQEAKICAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3Rfc2luZ2xlKFRFU1RGTl9FTkNPREVEKQogICAgICAgICBzZWxmLl90ZXN0X3NpbmdsZShURVNURk5fVU5JQ09ERSkKLSAgICAgICAgaWYgVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fdGVzdF9zaW5nbGUoVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFKQorICAgICAgICBpZiBURVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3NpbmdsZShURVNURk5fVU5FTkNPREFCTEUpCiAKICAgICBkZWYgdGVzdF9lcXVpdmFsZW50X2ZpbGVzKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X2VxdWl2YWxlbnQoVEVTVEZOX0VOQ09ERUQsIFRFU1RGTl9VTklDT0RFKQpAQCAtMTg4LDkgKzE4OCw5IEBACiAgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fVU5JQ09ERStleHQsIFRFU1RGTl9FTkNPREVEK2V4dCwgRmFsc2UpCiAgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fVU5JQ09ERStleHQsIFRFU1RGTl9VTklDT0RFK2V4dCwgRmFsc2UpCiAgICAgICAgICMgT3VyIGRpcmVjdG9yeSBuYW1lIHRoYXQgY2FuJ3QgdXNlIGEgbm9uLXVuaWNvZGUgbmFtZS4KLSAgICAgICAgaWYgVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTklDT0RFX1VORU5DT0RFQUJMRStleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVEZOX1VOSUNPREVfVU5FTkNPREVBQkxFK2V4dCwKKyAgICAgICAgaWYgVEVTVEZOX1VORU5DT0RBQkxFIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTkVOQ09EQUJMRStleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFK2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKaW5kZXggNTA5NjI4Yi4uYzMwZWNmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CkBAIC0yMCwxMSArMjAsMTEgQEAKIGNsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNmVjNjViNjU4MzU2MTRlYzAwNjM0YzY3NGJiYTBlNTBjZDMyYzE4OScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJzQ1MDRkZmZkMDM1YmFlYTAyYzViOWRlODJiZWJjM2Q2NWUwZTBiYWYnCiAKICAgICBkZWYgdGVzdF9tZXRob2RfY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQotICAgICAgICBmb3IgaSBpbiByYW5nZSg2NTUzNik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDB4MTAwMDApOgogICAgICAgICAgICAgY2hhciA9IHVuaWNocihpKQogICAgICAgICAgICAgZGF0YSA9IFsKICAgICAgICAgICAgICAgICAjIFByZWRpY2F0ZXMgKHNpbmdsZSBjaGFyKQpAQCAtNzksNyArNzksNyBAQAogY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CiAKICAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcwotICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMzEzNmQ1YWZkNzg3ZGMyYmNiMWJkY2FjOTVlMzg1MzQ5ZmJlYmJjYScKKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJzZjY2YxYjFhMzY0NjBkMjY5NGY5YjBiMGYwMzI0OTQyZmU3MGVkZTYnCiAKICAgICBkZWYgdGVzdF9mdW5jdGlvbl9jaGVja3N1bShzZWxmKToKICAgICAgICAgZGF0YSA9IFtdCkBAIC0xMTgsNiArMTE4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSc5JyksIDkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXHUyMTViJyksIDAuMTI1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1J1x1MjQ2OCcpLCA5LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXHVhNjI3JyksIDcuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdcVTAwMDIwMDAwJywgTm9uZSksIE5vbmUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLm51bWVyaWMpCkBAIC0yMzUsNyArMjM2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3Blbi5yZXR1cm5jb2RlLCAxKQogICAgICAgICBlcnJvciA9ICJTeW50YXhFcnJvcjogKHVuaWNvZGUgZXJyb3IpIFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAiIFwKICAgICAgICAgICAgICIoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyb3IgaW4gcG9wZW4uc3RkZXJyLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvciwgcG9wZW4uc3RkZXJyLnJlYWQoKSkKIAogICAgIGRlZiB0ZXN0X2RlY2ltYWxfbnVtZXJpY19jb25zaXN0ZW50KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBkZWNpbWFsIGFuZCBudW1lcmljIGFyZSBjb25zaXN0ZW50LApAQCAtMjQ4LDcgKzI0OSw3IEBACiAgICAgICAgICAgICBpZiBkZWMgIT0gLTE6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMsIHNlbGYuZGIubnVtZXJpYyhjKSkKICAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhjb3VudCA+PSAxMCkgIyBzaG91bGQgaGF2ZSB0ZXN0ZWQgYXQgbGVhc3QgdGhlIEFTQ0lJIGRpZ2l0cworICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPj0gMTApICMgc2hvdWxkIGhhdmUgdGVzdGVkIGF0IGxlYXN0IHRoZSBBU0NJSSBkaWdpdHMKIAogICAgIGRlZiB0ZXN0X2RpZ2l0X251bWVyaWNfY29uc2lzdGVudChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgZGlnaXQgYW5kIG51bWVyaWMgYXJlIGNvbnNpc3RlbnQsCkBAIC0yNjEsMjEgKzI2MiwyMSBAQAogICAgICAgICAgICAgaWYgZGVjICE9IC0xOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLCBzZWxmLmRiLm51bWVyaWMoYykpCiAgICAgICAgICAgICAgICAgY291bnQgKz0gMQotICAgICAgICBzZWxmLmFzc2VydF8oY291bnQgPj0gMTApICMgc2hvdWxkIGhhdmUgdGVzdGVkIGF0IGxlYXN0IHRoZSBBU0NJSSBkaWdpdHMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvdW50ID49IDEwKSAjIHNob3VsZCBoYXZlIHRlc3RlZCBhdCBsZWFzdCB0aGUgQVNDSUkgZGlnaXRzCiAKICAgICBkZWYgdGVzdF9idWdfMTcwNDc5MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5kYi5sb29rdXAoIkdPVEhJQyBMRVRURVIgRkFJSFUiKSwgdSdcVTAwMDEwMzQ2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmxvb2t1cCgiR09USElDIExFVFRFUiBGQUlIVSIpLCB1J1xVMDAwMTAzNDYnKQogCiAgICAgZGVmIHRlc3RfdWNkXzUxMChzZWxmKToKICAgICAgICAgaW1wb3J0IHVuaWNvZGVkYXRhCiAgICAgICAgICMgSW4gVUNEIDUuMS4wLCBhIG1pcnJvcmVkIHByb3BlcnR5IGNoYW5nZWQgd3J0LiBVQ0QgMy4yLjAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVuaWNvZGVkYXRhLm1pcnJvcmVkKHUiXHUwZjNhIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgdW5pY29kZWRhdGEudWNkXzNfMl8wLm1pcnJvcmVkKHUiXHUwZjNhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmljb2RlZGF0YS5taXJyb3JlZCh1Ilx1MGYzYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVuaWNvZGVkYXRhLnVjZF8zXzJfMC5taXJyb3JlZCh1Ilx1MGYzYSIpKQogICAgICAgICAjIEFsc28sIHdlIG5vdyBoYXZlIHR3byB3YXlzIG9mIHJlcHJlc2VudGluZwogICAgICAgICAjIHRoZSB1cHBlci1jYXNlIG1hcHBpbmc6IGFzIGRlbHRhLCBvciBhcyBhYnNvbHV0ZSB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydF8odSJhIi51cHBlcigpPT11J0EnKQotICAgICAgICBzZWxmLmFzc2VydF8odSJcdTFkNzkiLnVwcGVyKCk9PXUnXHVhNzdkJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHUiLiIudXBwZXIoKT09dSIuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiYSIudXBwZXIoKT09dSdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiXHUxZDc5Ii51cHBlcigpPT11J1x1YTc3ZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ii4iLnVwcGVyKCk9PXUiLiIpCiAKICAgICBkZWYgdGVzdF9idWdfNTgyOChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx1MWQ3OSIubG93ZXIoKSwgdSJcdTFkNzkiKQpAQCAtMjk0LDYgKzI5NSwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHUwMWM1Ii50aXRsZSgpLCB1Ilx1MDFjNSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcdTAxYzYiLnRpdGxlKCksIHUiXHUwMWM1IikKIAorICAgIGRlZiB0ZXN0X2xpbmVicmVha183NjQzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgweDEwMDAwKToKKyAgICAgICAgICAgIGxpbmVzID0gKHVuaWNocihpKSArIHUnQScpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgaWYgaSBpbiAoMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHg4NSwKKyAgICAgICAgICAgICAgICAgICAgIDB4MWMsIDB4MWQsIDB4MWUsIDB4MjAyOCwgMHgyMDI5KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlx1JS40eCBzaG91bGQgYmUgYSBsaW5lYnJlYWsiICUgaSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcdSUuNHggc2hvdWxkIG5vdCBiZSBhIGxpbmVicmVhayIgJSBpKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBVbmljb2RlTWlzY1Rlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF91bml0dGVzdC5weQppbmRleCA1NjI2NTQyLi44NmE5OThiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkKQEAgLTEsMjMwMCArMSwxMiBAQAotIiIiVGVzdCBzY3JpcHQgZm9yIHVuaXR0ZXN0LgoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKIAotQnkgQ29sbGluIFdpbnRlciA8Y29sbGludyBhdCBnbWFpbC5jb20+Ci0KLVN0aWxsIG5lZWQgdGVzdGluZzoKLSAgICBUZXN0Q2FzZS57YXNzZXJ0LGZhaWx9KiBtZXRob2RzIChzb21lIGFyZSB0ZXN0ZWQgaW1wbGljaXRseSkKLSIiIgotCi1pbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQotaW1wb3J0IHR5cGVzCi0KLSMjIyBTdXBwb3J0IGNvZGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2xhc3MgTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nKToKLSAgICAgICAgc2VsZi5fZXZlbnRzID0gbG9nCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLl9faW5pdF9fKCkKLQotICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdCcpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQotCi0gICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdCcpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0KHRlc3QpCi0KLSAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRGYWlsdXJlKCphcmdzKQotCi0gICAgZGVmIGFkZEVycm9yKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXJyb3InKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRFcnJvcigqYXJncykKLQotY2xhc3MgVGVzdEVxdWFsaXR5KG9iamVjdCk6Ci0gICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX2VxX18gaW1wbGVtZW50YXRpb24KLSAgICBkZWYgdGVzdF9lcShzZWxmKToKLSAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLmVxX3BhaXJzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpfMSwgb2JqXzIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ial8yLCBvYmpfMSkKLQotICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19uZV9fIGltcGxlbWVudGF0aW9uCi0gICAgZGVmIHRlc3RfbmUoc2VsZik6Ci0gICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5uZV9wYWlyczoKLSAgICAgICAgICAgIHNlbGYuZmFpbElmRXF1YWwob2JqXzEsIG9ial8yKQotICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbChvYmpfMiwgb2JqXzEpCi0KLWNsYXNzIFRlc3RIYXNoaW5nKG9iamVjdCk6Ci0gICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX2hhc2hfXyBpbXBsZW1lbnRhdGlvbgotICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6Ci0gICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5lcV9wYWlyczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBhc3NlcnQgaGFzaChvYmpfMSkgPT0gaGFzaChvYmpfMikKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXMgYW5kICVzIGRvIG5vdCBoYXNoIGVxdWFsIiAlIChvYmpfMSwgb2JqXzIpKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQotCi0gICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5uZV9wYWlyczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBhc3NlcnQgaGFzaChvYmpfMSkgIT0gaGFzaChvYmpfMikKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXMgYW5kICVzIGhhc2ggZXF1YWwsIGJ1dCBzaG91bGRuJ3QiICUgKG9ial8xLCBvYmpfMikpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIC9TdXBwb3J0IGNvZGUKLQotY2xhc3MgVGVzdF9UZXN0TG9hZGVyKFRlc3RDYXNlKToKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBpdCBkb2VzIHRoZSByaWdodCB0aGluZyBldmVuIGlmIG5vIHRlc3RzIHdlcmUgZm91bmQKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX25vX21hdGNoZXMoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIGVtcHR5X3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIGVtcHR5X3N1aXRlKQotCi0gICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAotICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKCkgaXMgZ2l2ZW4gYW4gb2JqZWN0Ci0gICAgIyB0aGF0IGlzbid0IGEgc3ViY2xhc3Mgb2YgVGVzdENhc2U/IFNwZWNpZmljYWxseSwgd2hhdCBoYXBwZW5zCi0gICAgIyBpZiB0ZXN0Q2FzZUNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgVGVzdFN1aXRlPwotICAgICMKLSAgICAjIFRoaXMgaXMgY2hlY2tlZCBmb3Igc3BlY2lmaWNhbGx5IGluIHRoZSBjb2RlLCBzbyB3ZSBiZXR0ZXIgYWRkIGEKLSAgICAjIHRlc3QgZm9yIGl0LgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fVGVzdFN1aXRlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBjbGFzcyBOb3RBVGVzdENhc2UodW5pdHRlc3QuVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShOb3RBVGVzdENhc2UpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ1Nob3VsZCByYWlzZSBUeXBlRXJyb3InKQotCi0gICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAotICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKCkgcGlja3MgdXAgdGhlIGRlZmF1bHQgdGVzdCBtZXRob2QKLSAgICAjIG5hbWUgKGFzIHNwZWNpZmllZCBieSBUZXN0Q2FzZSksIGV2ZW4gdGhvdWdoIHRoZSBtZXRob2QgbmFtZSBkb2VzCi0gICAgIyBub3QgbWF0Y2ggdGhlIGRlZmF1bHQgVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4IHN0cmluZwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fZGVmYXVsdF9tZXRob2RfbmFtZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgIyBUaGlzIGhhcyB0byBiZSBmYWxzZSBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZAotICAgICAgICBzZWxmLmZhaWxJZigncnVuVGVzdCcuc3RhcnRzd2l0aChsb2FkZXIudGVzdE1ldGhvZFByZWZpeCkpCi0KLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbykKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW0ZvbygncnVuVGVzdCcpXSkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fVGVzdENhc2Vfc3ViY2xhc3Moc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIGV4cGVjdGVkID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgZXhwZWN0ZWQpCi0KLSAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIG5vIHRlc3RzIGFyZSBmb3VuZCAobm8gVGVzdENhc2UgaW5zdGFuY2VzKT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub19UZXN0Q2FzZV9pbnN0YW5jZXMoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKLQotICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgbm8gdGVzdHMgYXJlIGZvdW5kIChUZXN0Q2FzZXMgaW5zdGFuY2VzLCBidXQgbm8gdGVzdHMpPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vX1Rlc3RDYXNlX3Rlc3RzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbG9hZGVyLnN1aXRlQ2xhc3MoKV0pCi0KLSAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UicwotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tTW9kdWxlKCkgaXMgZ2l2ZW4gc29tZXRoaW5nIG90aGVyCi0gICAgIyB0aGFuIGEgbW9kdWxlPwotICAgICMKLSAgICAjIFhYWCBDdXJyZW50bHksIGl0IHN1Y2NlZWRzIGFueXdheS4gVGhpcyBmbGV4aWJpbGl0eQotICAgICMgc2hvdWxkIGVpdGhlciBiZSBkb2N1bWVudGVkIG9yIGxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBzaG91bGQKLSAgICAjIHJhaXNlIGEgVHlwZUVycm9yCi0gICAgIwotICAgICMgWFhYIENlcnRhaW4gcGVvcGxlIGFyZSB1c2luZyB0aGlzIGJlaGF2aW91ci4gV2UnbGwgYWRkIGEgdGVzdCBmb3IgaXQKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub3RfYV9tb2R1bGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNsYXNzIE5vdEFNb2R1bGUob2JqZWN0KToKLSAgICAgICAgICAgIHRlc3RfMiA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShOb3RBTW9kdWxlKQotCi0gICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKCkKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBJcyBWYWx1ZUVycm9yIHJhaXNlZCBpbiByZXNwb25zZSB0byBhbiBlbXB0eSBuYW1lPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19lbXB0eV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJycpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJFbXB0eSBtb2R1bGUgbmFtZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX21hbGZvcm1lZF9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ2FiYyAoKSAvLycpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIGEKLSAgICAjIG1vZHVsZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBhIG1vZHVsZSBieSB0aGF0IG5hbWUgY2FuJ3QgYmUgZm91bmQ/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3Vua25vd25fbW9kdWxlX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnc2Rhc2Zhc2Zhc2RmJykKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgSW1wb3J0RXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbW9kdWxlIGlzIGZvdW5kLCBidXQgdGhlIGF0dHJpYnV0ZSBjYW4ndD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9hdHRyX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJykKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gd2UgcHJvdmlkZSB0aGUgbW9kdWxlLCBidXQgdGhlIGF0dHJpYnV0ZSBjYW4ndCBiZQotICAgICMgZm91bmQ/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX3Vua25vd25fbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHBhc3NlZCBhbiBlbXB0eQotICAgICMgbmFtZSByZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZT8KLSAgICAjCi0gICAgIyBYWFggU2hvdWxkIHByb2JhYmx5IHJhaXNlIGEgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFuIEF0dHJpYnV0ZUVycm9yCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX2VtcHR5X25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJywgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGFuIGltcG9zc2libGUgbmFtZSBpcyBnaXZlbiwgcmVsYXRpdmUgdG8gdGhlIHByb3ZpZGVkCi0gICAgIyBgbW9kdWxlYD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbWFsZm9ybWVkX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIEF0dHJpYnV0ZUVycm9yIG9yIFZhbHVlRXJyb3I/Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnYWJjICgpIC8vJywgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lIHJhaXNlIFR5cGVFcnJvciB3aGVuIHRoZSBgbW9kdWxlYCBhcmd1bWVudAotICAgICMgaXNuJ3QgYSBtb2R1bGUgb2JqZWN0PwotICAgICMKLSAgICAjIFhYWCBBY2NlcHRzIHRoZSBub3QtYS1tb2R1bGUgb2JqZWN0LCBpZ25vcm5pbmcgdGhlIG9iamVjdCdzIHR5cGUKLSAgICAjIFRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciB0aGUgbWV0aG9kIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQKLSAgICAjCi0gICAgIyBYWFggU29tZSBwZW9wbGUgYXJlIHJlbHlpbmcgb24gdGhpcywgc28ga2VlcCBpdCBmb3Igbm93Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX25vdF9hX21vZHVsZShzZWxmKToKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY2xhc3MgTm90QU1vZHVsZShvYmplY3QpOgotICAgICAgICAgICAgdGVzdF8yID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdF8yJywgTm90QU1vZHVsZSkKLQotICAgICAgICByZWZlcmVuY2UgPSBbTXlUZXN0Q2FzZSgndGVzdCcpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKLSAgICAjIG9iamVjdD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfYmFkX29iamVjdChzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBtLnRlc3RjYXNlXzEgPSBvYmplY3QoKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEnLCBtKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgVHlwZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heQotICAgICMgcmVzb2x2ZSBlaXRoZXIgdG8gLi4uIGEgdGVzdCBjYXNlIGNsYXNzIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0Q2FzZV9zdWJjbGFzcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfVGVzdFN1aXRlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RzdWl0ZScsIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdGVzdG1ldGhvZChzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0JywgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSgpIHJhaXNlIHRoZSBwcm9wZXIgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvCi0gICAgIyByZXNvbHZlICJhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIgdGhhdCBkb2Vzbid0IGV4aXN0Ci0gICAgIyBmb3IgdGhlIGdpdmVuIG5hbWUgKHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlKT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfaW52YWxpZF90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0Zm9vJywgbSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJ0eXBlIG9iamVjdCAnTXlUZXN0Q2FzZScgaGFzIG5vIGF0dHJpYnV0ZSAndGVzdGZvbyciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIC4uLiBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2NhbGxhYmxlX19UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICB0ZXN0Y2FzZV8yID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIGRlZiByZXR1cm5fVGVzdFN1aXRlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKLSAgICAgICAgbS5yZXR1cm5fVGVzdFN1aXRlID0gcmV0dXJuX1Rlc3RTdWl0ZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RTdWl0ZScsIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSAuLi4gaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2NhbGxhYmxlX19UZXN0Q2FzZV9pbnN0YW5jZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIGRlZiByZXR1cm5fVGVzdENhc2UoKToKLSAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCi0gICAgICAgIG0ucmV0dXJuX1Rlc3RDYXNlID0gcmV0dXJuX1Rlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdENhc2UnLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdGNhc2VfMV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGUgY2FsbGFibGUgcmV0dXJucyBzb21ldGhpbmcgZWxzZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX3dyb25nX3R5cGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgZGVmIHJldHVybl93cm9uZygpOgotICAgICAgICAgICAgcmV0dXJuIDYKLSAgICAgICAgbS5yZXR1cm5fd3JvbmcgPSByZXR1cm5fd3JvbmcKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl93cm9uZycsIG0pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuCi0gICAgIyBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgotICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0Ci0gICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KLSAgICAgICAgIwotICAgICAgICAjIFdoeSBwaWNrIGF1ZGlvb3A/IEdvb2dsZSBzaG93cyBpdCBpc24ndCB1c2VkIHZlcnkgb2Z0ZW4sIHNvIHRoZXJlJ3MKLSAgICAgICAgIyBhIGdvb2QgY2hhbmNlIHRoYXQgaXQgd29uJ3QgYmUgaW1wb3J0ZWQgd2hlbiB0aGlzIHRlc3QgaXMgcnVuCi0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2F1ZGlvb3AnCi0KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobW9kdWxlX25hbWUpCi0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKLQotICAgICAgICAgICAgIyBhdWRpb29wIHNob3VsZCBub3cgYmUgbG9hZGVkLCB0aGFua3MgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgpCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKCkKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJTaW1pbGFyIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCksIGJ1dCB0YWtlcyBhIHNlcXVlbmNlIG9mIG5hbWVzIHJhdGhlcgotICAgICMgdGhhbiBhIHNpbmdsZSBuYW1lLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgdGhhdCBzZXF1ZW5jZSBvZiBuYW1lcyBpcyBlbXB0eT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2VtcHR5X25hbWVfbGlzdChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFtdKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKLQotICAgICMgIlNpbWlsYXIgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKSwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyCi0gICAgIyB0aGFuIGEgc2luZ2xlIG5hbWUuIgotICAgICMgLi4uCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgdGhhdCBzZXF1ZW5jZSBvZiBuYW1lcyBpcyBlbXB0eT8KLSAgICAjCi0gICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgYSBWYWx1ZUVycm9yIG9yIGp1c3QgcmV0dXJuIGFuIGVtcHR5IFRlc3RTdWl0ZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2VtcHR5X25hbWVfbGlzdChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFtdLCB1bml0dGVzdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIElzIFZhbHVlRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGVtcHR5IG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19lbXB0eV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJFbXB0eSBtb2R1bGUgbmFtZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gcHJlc2VudGVkIHdpdGggYW4gaW1wb3NzaWJsZSBtb2R1bGUgbmFtZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21hbGZvcm1lZF9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gbm8gbW9kdWxlIGNhbiBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnc2Rhc2Zhc2Zhc2RmJ10pCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiTm8gbW9kdWxlIG5hbWVkIHNkYXNmYXNmYXNkZiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgY2FuIGJlIGZvdW5kLCBidXQgbm90IHRoZSBhdHRyaWJ1dGU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3VuaXR0ZXN0LnNkYXNmYXNmYXNkZicsICd1bml0dGVzdCddKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGdpdmVuIGFuIHVua25vd24gYXR0cmlidXRlIG9uIGEgc3BlY2lmaWVkIGBtb2R1bGVgCi0gICAgIyBhcmd1bWVudD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbmFtZV9yZWxhdGl2ZV8xKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnc2Rhc2Zhc2Zhc2RmJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgRG8gdW5rbm93biBhdHRyaWJ1dGVzIChyZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZSkgc3RpbGwgcmFpc2UgYW4KLSAgICAjIGV4Y2VwdGlvbiBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB2YWxpZCBhdHRyaWJ1dGUgbmFtZXM/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMihzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ1Rlc3RDYXNlJywgJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGZhY2VkIHdpdGggdGhlIGVtcHR5IHN0cmluZz8KLSAgICAjCi0gICAgIyBYWFggVGhpcyBjdXJyZW50bHkgcmFpc2VzIEF0dHJpYnV0ZUVycm9yLCB0aG91Z2ggVmFsdWVFcnJvciBpcyBwcm9iYWJseQotICAgICMgbW9yZSBhcHByb3ByaWF0ZQotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfZW1wdHlfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJyddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMgLi4uCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiBpbXBvc3NpYmxlIGF0dHJpYnV0ZSBuYW1lPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbWFsZm9ybWVkX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIEF0dHJpYnV0ZUVycm9yIG9yIFZhbHVlRXJyb3I/Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydhYmMgKCkgLy8nXSwgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZXMoKSBtYWtlIHN1cmUgdGhlIHByb3ZpZGVkIGBtb2R1bGVgIGlzIGluIGZhY3QKLSAgICAjIGEgbW9kdWxlPwotICAgICMKLSAgICAjIFhYWCBUaGlzIHZhbGlkYXRpb24gaXMgY3VycmVudGx5IG5vdCBkb25lLiBUaGlzIGZsZXhpYmlsaXR5IHNob3VsZAotICAgICMgZWl0aGVyIGJlIGRvY3VtZW50ZWQgb3IgYSBUeXBlRXJyb3Igc2hvdWxkIGJlIHJhaXNlZC4KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX25vdF9hX21vZHVsZShzZWxmKToKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY2xhc3MgTm90QU1vZHVsZShvYmplY3QpOgotICAgICAgICAgICAgdGVzdF8yID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0XzInXSwgTm90QU1vZHVsZSkKLQotICAgICAgICByZWZlcmVuY2UgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgcmVmZXJlbmNlKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBEb2VzIGl0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbmFtZSByZXNvbHZlcyB0byBhbiBpbnZhbGlkCi0gICAgIyBvYmplY3Q/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9iYWRfb2JqZWN0KHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IG9iamVjdCgpCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0Y2FzZV8xJ10sIG0pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0Q2FzZV9zdWJjbGFzcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0Y2FzZV8xJ10sIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBsb2FkZXIuc3VpdGVDbGFzcyhbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW2V4cGVjdGVkXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgVGVzdFN1aXRlIGluc3RhbmNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfVGVzdFN1aXRlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndGVzdHN1aXRlJ10sIG0pCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW20udGVzdHN1aXRlXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0byAuLi4gYQotICAgICMgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfdGVzdG1ldGhvZChzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0Y2FzZV8xLnRlc3QnXSwgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICByZWZfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtyZWZfc3VpdGVdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCi0gICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgIwotICAgICMgRG9lcyB0aGUgbWV0aG9kIGdyYWNlZnVsbHkgaGFuZGxlIG5hbWVzIHRoYXQgaW5pdGlhbGx5IGxvb2sgbGlrZSB0aGV5Ci0gICAgIyByZXNvbHZlIHRvICJhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIgYnV0IGRvbid0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfaW52YWxpZF90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0Y2FzZV8xLnRlc3Rmb28nXSwgbSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJ0eXBlIG9iamVjdCAnTXlUZXN0Q2FzZScgaGFzIG5vIGF0dHJpYnV0ZSAndGVzdGZvbyciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIC4uLiBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fVGVzdFN1aXRlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgdGVzdGNhc2VfMiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBkZWYgcmV0dXJuX1Rlc3RTdWl0ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCi0gICAgICAgIG0ucmV0dXJuX1Rlc3RTdWl0ZSA9IHJldHVybl9UZXN0U3VpdGUKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX1Rlc3RTdWl0ZSddLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIGV4cGVjdGVkID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW2V4cGVjdGVkXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSAuLi4gaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2Uoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQotICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fVGVzdENhc2UnXSwgbSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICByZWZfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbcmVmX3N1aXRlXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgIwotICAgICMgQXJlIHN0YXRpY21ldGhvZHMgaGFuZGxlZCBjb3JyZWN0bHk/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fY2FsbF9zdGF0aWNtZXRob2Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3RjYXNlXzEgPSBUZXN0MSgndGVzdCcpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vLmZvbyddLCBtKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtyZWZfc3VpdGVdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgY2FsbGFibGUgcmV0dXJucyBzb21ldGhpbmcgZWxzZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX193cm9uZ190eXBlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGRlZiByZXR1cm5fd3JvbmcoKToKLSAgICAgICAgICAgIHJldHVybiA2Ci0gICAgICAgIG0ucmV0dXJuX3dyb25nID0gcmV0dXJuX3dyb25nCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl93cm9uZyddLCBtKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KLSAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgotICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0Ci0gICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KLSAgICAgICAgIwotICAgICAgICAjIFdoeSBwaWNrIGF1ZGlvb3A/IEdvb2dsZSBzaG93cyBpdCBpc24ndCB1c2VkIHZlcnkgb2Z0ZW4sIHNvIHRoZXJlJ3MKLSAgICAgICAgIyBhIGdvb2QgY2hhbmNlIHRoYXQgaXQgd29uJ3QgYmUgaW1wb3J0ZWQgd2hlbiB0aGlzIHRlc3QgaXMgcnVuCi0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2F1ZGlvb3AnCi0KLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFttb2R1bGVfbmFtZV0pCi0KLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdW5pdHRlc3QuVGVzdFN1aXRlKCldKQotCi0gICAgICAgICAgICAjIGF1ZGlvb3Agc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MobW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoKQotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoKQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgVGVzdC5mb29iYXIgaXMgZGVmaW5lZCB0byBtYWtlIHN1cmUgZ2V0VGVzdENhc2VOYW1lcygpIHJlc3BlY3RzCi0gICAgIyBsb2FkZXIudGVzdE1ldGhvZFByZWZpeAotICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdCksIFsndGVzdF8xJywgJ3Rlc3RfMiddKQotCi0gICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBEb2VzIGdldFRlc3RDYXNlTmFtZXMoKSBiZWhhdmUgYXBwcm9wcmlhdGVseSBpZiBubyB0ZXN0cyBhcmUgZm91bmQ/Ci0gICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19fbm9fdGVzdHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdCksIFtdKQotCi0gICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKLSAgICAjCi0gICAgIyBBcmUgbm90LVRlc3RDYXNlcyBoYW5kbGVkIGdyYWNlZnVsbHk/Ci0gICAgIwotICAgICMgWFhYIFRoaXMgc2hvdWxkIHJhaXNlIGEgVHlwZUVycm9yLCBub3QgcmV0dXJuIGEgbGlzdAotICAgICMKLSAgICAjIFhYWCBJdCdzIHRvbyBsYXRlIGluIHRoZSAyLjUgcmVsZWFzZSBjeWNsZSB0byBmaXggdGhpcywgYnV0IGl0IHNob3VsZAotICAgICMgcHJvYmFibHkgYmUgcmV2aXNpdGVkIGZvciAyLjYKLSAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19ub3RfYV9UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgY2xhc3MgQmFkQ2FzZShpbnQpOgotICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbmFtZXMgPSBsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhCYWRDYXNlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXMsIFsndGVzdF9mb28nXSkKLQotICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgTWFrZSBzdXJlIGluaGVyaXRlZCBuYW1lcyBhcmUgaGFuZGxlZC4KLSAgICAjCi0gICAgIyBUZXN0UC5mb29iYXIgaXMgZGVmaW5lZCB0byBtYWtlIHN1cmUgZ2V0VGVzdENhc2VOYW1lcygpIHJlc3BlY3RzCi0gICAgIyBsb2FkZXIudGVzdE1ldGhvZFByZWZpeAotICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX2luaGVyaXRhbmNlKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0UCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgY2xhc3MgVGVzdEMoVGVzdFApOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMyhzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIG5hbWVzID0gWyd0ZXN0XzEnLCAndGVzdF8yJywgJ3Rlc3RfMyddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdEMpLCBuYW1lcykKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoKQotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKLSAgICAjIHRlc3QgbWV0aG9kcyIKLSAgICAjCi0gICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5Ci0gICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KLSAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSkKLSAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzXzEpCi0KLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzXzIpCi0KLSAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKLSAgICAjIHRlc3QgbWV0aG9kcyIKLSAgICAjCi0gICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5Ci0gICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KLSAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzXzEgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pXQotICAgICAgICB0ZXN0c18yID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzXzEpCi0KLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHNfMikKLQotICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcwotICAgICMgdGVzdCBtZXRob2RzIgotICAgICMKLSAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKLSAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgotICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSkKLSAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0c18xKQotCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHNfMikKLQotICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcwotICAgICMgdGVzdCBtZXRob2RzIgotICAgICMKLSAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKLSAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgotICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSldKQotICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKLSAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdHNfMl0pCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0c18xKQotCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHNfMikKLQotICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzICd0ZXN0JyIKLSAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19kZWZhdWx0X3ZhbHVlKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID09ICd0ZXN0JykKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCi0KLSAgICAgICAgdGVzdHMgPSBsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6Ci0gICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6Ci0gICAgICAgICAgICByZXR1cm4gLWNtcCh4LCB5KQotCi0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCi0KLSAgICAgICAgdGVzdHMgPSBbbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHMpCi0KLSAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCi0gICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkgYW5kIGFsbCB0aGUgbG9hZFRlc3RzRnJvbVgoKSBtZXRob2RzIgotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19sb2FkVGVzdHNGcm9tTmFtZShzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCi0KLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IGxvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCi0KLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSksIHRlc3RzKQotCi0gICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgotICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIgotICAgICMKLSAgICAjIERvZXMgaXQgYWN0dWFsbHkgYWZmZWN0IGdldFRlc3RDYXNlTmFtZXMoKT8KLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fZ2V0VGVzdENhc2VOYW1lcyhzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCi0KLSAgICAgICAgdGVzdF9uYW1lcyA9IFsndGVzdF8yJywgJ3Rlc3RfMSddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoRm9vKSwgdGVzdF9uYW1lcykKLQotICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBidWlsdC1pbiBjbXAoKSBmdW5jdGlvbiIKLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fZGVmYXVsdF92YWx1ZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgaXMgY21wKQotCi0gICAgIyAiaXQgY2FuIGJlIHNldCB0byBOb25lIHRvIGRpc2FibGUgdGhlIHNvcnQuIgotICAgICMKLSAgICAjIFhYWCBIb3cgaXMgdGhpcyBkaWZmZXJlbnQgZnJvbSByZWFzc2lnbmluZyBjbXA/IEFyZSB0aGUgdGVzdHMgcmV0dXJuZWQKLSAgICAjIGluIGEgcmFuZG9tIG9yZGVyIG9yIHNvbWV0aGluZz8gVGhpcyBiZWhhdmlvdXIgc2hvdWxkIGRpZQotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19Ob25lKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCi0KLSAgICAgICAgdGVzdF9uYW1lcyA9IFsndGVzdF8yJywgJ3Rlc3RfMSddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEZvbykpLCBzZXQodGVzdF9uYW1lcykpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZwotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJDYWxsYWJsZSBvYmplY3QgdGhhdCBjb25zdHJ1Y3RzIGEgdGVzdCBzdWl0ZSBmcm9tIGEgbGlzdCBvZiB0ZXN0cy4iCi0gICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0cyA9IFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQotCi0gICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKLSAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCi0gICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0cyA9IFtbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV1dCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pLCB0ZXN0cykKLQotICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0Ci0gICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQotICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzID0gW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQotCi0gICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKLSAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCi0gICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIHRlc3RzID0gW1tGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHMpCi0KLSAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgVGVzdFN1aXRlIGNsYXNzIgotICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2RlZmF1bHRfdmFsdWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MobG9hZGVyLnN1aXRlQ2xhc3MgaXMgdW5pdHRlc3QuVGVzdFN1aXRlKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcwotCi0jIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RTdWl0ZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0gICAgZGVmIHRlc3RfMyhzZWxmKTogcGFzcwotICAgIGRlZiBydW5UZXN0KHNlbGYpOiBwYXNzCi0KLWRlZiBfbWtfVGVzdFN1aXRlKCpuYW1lcyk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShGb28obikgZm9yIG4gaW4gbmFtZXMpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIyAvU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RTdWl0ZQotCi1jbGFzcyBUZXN0X1Rlc3RTdWl0ZShUZXN0Q2FzZSwgVGVzdEVxdWFsaXR5KToKLQotICAgICMjIyBTZXQgdXAgYXR0cmlidXRlcyBuZWVkZWQgYnkgaW5oZXJpdGVkIHRlc3RzCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X2VxCi0gICAgZXFfcGFpcnMgPSBbKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCB1bml0dGVzdC5UZXN0U3VpdGUoKSkKLSAgICAgICAgICAgICAgICwodW5pdHRlc3QuVGVzdFN1aXRlKCksIHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkpCi0gICAgICAgICAgICAgICAsKF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSldCi0KLSAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfbmUKLSAgICBuZV9wYWlycyA9IFsodW5pdHRlc3QuVGVzdFN1aXRlKCksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKQotICAgICAgICAgICAgICAgLCh1bml0dGVzdC5UZXN0U3VpdGUoW10pLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSkKLSAgICAgICAgICAgICAgICwoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJywgJ3Rlc3RfMicpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnLCAndGVzdF8zJykpCi0gICAgICAgICAgICAgICAsKF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzInKSldCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9TZXQgdXAgYXR0cmlidXRlcyBuZWVkZWQgYnkgaW5oZXJpdGVkIHRlc3RzCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKLSAgICAjCi0gICAgIyBUaGUgdGVzdHMgaXRlcmFibGUgc2hvdWxkIGJlIG9wdGlvbmFsCi0gICAgZGVmIHRlc3RfaW5pdF9fdGVzdHNfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCi0KLSAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCi0gICAgIyAuLi4KLSAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKLSAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCi0gICAgIwotICAgICMgVGVzdFN1aXRlIHNob3VsZCBkZWFsIHdpdGggZW1wdHkgdGVzdHMgaXRlcmFibGVzIGJ5IGFsbG93aW5nIHRoZQotICAgICMgY3JlYXRpb24gb2YgYW4gZW1wdHkgc3VpdGUKLSAgICBkZWYgdGVzdF9pbml0X19lbXB0eV90ZXN0cyhzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW10pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQotCi0gICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgotICAgICMgLi4uCi0gICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCi0gICAgIyBvciBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5IgotICAgICMKLSAgICAjIFRlc3RTdWl0ZSBzaG91bGQgYWxsb3cgYW55IGl0ZXJhYmxlIHRvIHByb3ZpZGUgdGVzdHMKLSAgICBkZWYgdGVzdF9pbml0X190ZXN0c19mcm9tX2FueV9pdGVyYWJsZShzZWxmKToKLSAgICAgICAgZGVmIHRlc3RzKCk6Ci0gICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotCi0gICAgICAgIHN1aXRlXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8xLmNvdW50VGVzdENhc2VzKCksIDIpCi0KLSAgICAgICAgc3VpdGVfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZV8xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzIuY291bnRUZXN0Q2FzZXMoKSwgMikKLQotICAgICAgICBzdWl0ZV8zID0gdW5pdHRlc3QuVGVzdFN1aXRlKHNldChzdWl0ZV8xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8zLmNvdW50VGVzdENhc2VzKCksIDIpCi0KLSAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCi0gICAgIyAuLi4KLSAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKLSAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCi0gICAgIwotICAgICMgRG9lcyBUZXN0U3VpdGUoKSBhbHNvIGFsbG93IG90aGVyIFRlc3RTdWl0ZSgpIGluc3RhbmNlcyB0byBiZSBwcmVzZW50Ci0gICAgIyBpbiB0aGUgdGVzdHMgaXRlcmFibGU/Ci0gICAgZGVmIHRlc3RfaW5pdF9fVGVzdFN1aXRlX2luc3RhbmNlc19pbl90ZXN0cyhzZWxmKToKLSAgICAgICAgZGVmIHRlc3RzKCk6Ci0gICAgICAgICAgICBmdGMgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LlRlc3RTdWl0ZShbZnRjXSkKLSAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0U3VpdGUuX19pbml0X18KLQotICAgICMgQ29udGFpbmVyIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRoZSBpdGVyIHByb3RvY29sCi0gICAgZGVmIHRlc3RfaXRlcihzZWxmKToKLSAgICAgICAgdGVzdDEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3QxLCB0ZXN0Ml0pCi0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KLSAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCi0gICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgotICAgICMKLSAgICAjIFByZXN1bWFibHkgYW4gZW1wdHkgVGVzdFN1aXRlIHJldHVybnMgMD8KLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlc196ZXJvX3NpbXBsZShzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgotICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KLSAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCi0gICAgIwotICAgICMgUHJlc3VtYWJseSBhbiBlbXB0eSBUZXN0U3VpdGUgKGV2ZW4gaWYgaXQgY29udGFpbnMgb3RoZXIgZW1wdHkKLSAgICAjIFRlc3RTdWl0ZSBpbnN0YW5jZXMpIHJldHVybnMgMD8KLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlc196ZXJvX25lc3RlZChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt1bml0dGVzdC5UZXN0U3VpdGUoKV0pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCi0gICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgotICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlc19zaW1wbGUoc2VsZik6Ci0gICAgICAgIHRlc3QxID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHRlc3QyID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MSwgdGVzdDIpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgotICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KLSAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoaXMgaG9sZHMgZm9yIG5lc3RlZCBUZXN0U3VpdGUgaW5zdGFuY2VzLCB0b28KLSAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlc19uZXN0ZWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0MShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgdGVzdDMgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgY2hpbGQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QxKCd0ZXN0MicpLCB0ZXN0MikpCi0gICAgICAgIHBhcmVudCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDMsIGNoaWxkLCBUZXN0MSgndGVzdDEnKSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQuY291bnRUZXN0Q2FzZXMoKSwgNCkKLQotICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCi0gICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgotICAgICMKLSAgICAjIEFuZCBpZiB0aGVyZSBhcmUgbm8gdGVzdHM/IFdoYXQgdGhlbj8KLSAgICBkZWYgdGVzdF9ydW5fX2VtcHR5X3N1aXRlKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgW10pCi0KLSAgICAjICJOb3RlIHRoYXQgdW5saWtlIFRlc3RDYXNlLnJ1bigpLCBUZXN0U3VpdGUucnVuKCkgcmVxdWlyZXMgdGhlCi0gICAgIyAicmVzdWx0IG9iamVjdCB0byBiZSBwYXNzZWQgaW4uIgotICAgIGRlZiB0ZXN0X3J1bl9fcmVxdWlyZXNfcmVzdWx0KHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUucnVuKCkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCi0KLSAgICAjICJSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlLCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50bwotICAgICMgdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMgcmVzdWx0LiIKLSAgICBkZWYgdGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIExvZ2dpbmdDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdydW4gJXMnICUgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCi0KLSAgICAgICAgICAgIGRlZiB0ZXN0MShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdHMgPSBbTG9nZ2luZ0Nhc2UoJ3Rlc3QxJyksIExvZ2dpbmdDYXNlKCd0ZXN0MicpXQotCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cykucnVuKHJlc3VsdCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydydW4gdGVzdDEnLCAncnVuIHRlc3QyJ10pCi0KLSAgICAjICJBZGQgYSBUZXN0Q2FzZSAuLi4gdG8gdGhlIHN1aXRlIgotICAgIGRlZiB0ZXN0X2FkZFRlc3RfX1Rlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0JykKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHN1aXRlLmFkZFRlc3QodGVzdCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0XSkKLQotICAgICMgIkFkZCBhIC4uLiBUZXN0U3VpdGUgdG8gdGhlIHN1aXRlIgotICAgIGRlZiB0ZXN0X2FkZFRlc3RfX1Rlc3RTdWl0ZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgc3VpdGVfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0JyldKQotCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc3VpdGUuYWRkVGVzdChzdWl0ZV8yKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3N1aXRlXzJdKQotCi0gICAgIyAiQWRkIGFsbCB0aGUgdGVzdHMgZnJvbSBhbiBpdGVyYWJsZSBvZiBUZXN0Q2FzZSBhbmQgVGVzdFN1aXRlCi0gICAgIyBpbnN0YW5jZXMgdG8gdGhpcyB0ZXN0IHN1aXRlLiIKLSAgICAjCi0gICAgIyAiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGl0ZXJhdGluZyBvdmVyIHRlc3RzLCBjYWxsaW5nIGFkZFRlc3QoKSBmb3IKLSAgICAjIGVhY2ggZWxlbWVudCIKLSAgICBkZWYgdGVzdF9hZGRUZXN0cyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0XzEgPSBGb28oJ3Rlc3RfMScpCi0gICAgICAgIHRlc3RfMiA9IEZvbygndGVzdF8yJykKLSAgICAgICAgaW5uZXJfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RfMl0pCi0KLSAgICAgICAgZGVmIGdlbigpOgotICAgICAgICAgICAgeWllbGQgdGVzdF8xCi0gICAgICAgICAgICB5aWVsZCB0ZXN0XzIKLSAgICAgICAgICAgIHlpZWxkIGlubmVyX3N1aXRlCi0KLSAgICAgICAgc3VpdGVfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlXzEuYWRkVGVzdHMoZ2VuKCkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlXzEpLCBsaXN0KGdlbigpKSkKLQotICAgICAgICAjICJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgdGVzdHMsIGNhbGxpbmcgYWRkVGVzdCgpIGZvcgotICAgICAgICAjIGVhY2ggZWxlbWVudCIKLSAgICAgICAgc3VpdGVfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIGZvciB0IGluIGdlbigpOgotICAgICAgICAgICAgc3VpdGVfMi5hZGRUZXN0KHQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8xLCBzdWl0ZV8yKQotCi0gICAgIyAiQWRkIGFsbCB0aGUgdGVzdHMgZnJvbSBhbiBpdGVyYWJsZSBvZiBUZXN0Q2FzZSBhbmQgVGVzdFN1aXRlCi0gICAgIyBpbnN0YW5jZXMgdG8gdGhpcyB0ZXN0IHN1aXRlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgaXQgZG9lc24ndCBnZXQgYW4gaXRlcmFibGU/Ci0gICAgZGVmIHRlc3RfYWRkVGVzdF9fbm9uaXRlcmFibGUoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyg1KQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKLQotICAgIGRlZiB0ZXN0X2FkZFRlc3RfX25vbmNhbGxhYmxlKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdCwgNSkKLQotICAgIGRlZiB0ZXN0X2FkZFRlc3RfX2Nhc2VzdWl0ZWNsYXNzKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdCwgVGVzdF9UZXN0U3VpdGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdCwgdW5pdHRlc3QuVGVzdFN1aXRlKQotCi0gICAgZGVmIHRlc3RfYWRkVGVzdHNfX3N0cmluZyhzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3RzLCAiZm9vIikKLQotCi1jbGFzcyBUZXN0X0Z1bmN0aW9uVGVzdENhc2UoVGVzdENhc2UpOgotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuIEZvcgotICAgICMgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIDEiCi0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuY291bnRUZXN0Q2FzZXMoKSwgMSkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgc2V0VXAoKSByYWlzZXMKLSAgICAjIGFuIGV4Y2VwdGlvbi4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXAoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGRlZiBzZXRVcCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgc2V0VXAnKQotCi0gICAgICAgIGRlZiB0ZXN0KCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLQotICAgICAgICBkZWYgdGVhckRvd24oKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KLSAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3QgcmFpc2VzCi0gICAgIyBhbiBlcnJvciAoYXMgb3Bwb3NlZCB0byBhIGZhaWx1cmUpLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBkZWYgc2V0VXAoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICBkZWYgdGVzdCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSB0ZXN0JykKLQotICAgICAgICBkZWYgdGVhckRvd24oKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRXJyb3InLCAndGVhckRvd24nLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCBzaWduYWxzCi0gICAgIyBhIGZhaWx1cmUgKGFzIG9wcG9zZWQgdG8gYW4gZXJyb3IpLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGRlZiBzZXRVcCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgICAgIGRlZiB0ZXN0KCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLSAgICAgICAgICAgIHNlbGYuZmFpbCgncmFpc2VkIGJ5IHRlc3QnKQotCi0gICAgICAgIGRlZiB0ZWFyRG93bigpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRGYWlsdXJlJywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGVhckRvd24oKSByYWlzZXMKLSAgICAjIGFuIGV4Y2VwdGlvbi4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGRlZiBzZXRVcCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgICAgIGRlZiB0ZXN0KCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLQotICAgICAgICBkZWYgdGVhckRvd24oKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHRlYXJEb3duJykKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnYWRkRXJyb3InLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuIgotICAgICMKLSAgICAjIEJlY2F1c2Ugb2YgdGhlIHZhZ3VlIG5hdHVyZSBvZiB0aGUgZG9jcywgSSdtIG5vdCBnb2luZyB0byBsb2NrIHRoaXMKLSAgICAjIHRlc3QgZG93biB0b28gbXVjaC4gUmVhbGx5IGFsbCB0aGF0IGNhbiBiZSBhc3NlcnRlZCBpcyB0aGF0IHRoZSBpZCgpCi0gICAgIyB3aWxsIGJlIGEgc3RyaW5nIChlaXRoZXIgOC1ieXRlIG9yIHVuaWNvZGUgLS0gYWdhaW4sIGJlY2F1c2UgdGhlIGRvY3MKLSAgICAjIGp1c3Qgc2F5ICJzdHJpbmciKQotICAgIGRlZiB0ZXN0X2lkKHNlbGYpOgotICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UodGVzdC5pZCgpLCBiYXNlc3RyaW5nKSkKLQotICAgICMgIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubyBkZXNjcmlwdGlvbgotICAgICMgaGFzIGJlZW4gcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMKLSAgICAjIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciBOb25lLiIKLSAgICBkZWYgdGVzdF9zaG9ydERlc2NyaXB0aW9uX19ub19kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCBOb25lKQotCi0gICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCi0gICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucwotICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgotICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX3NpbmdsZWxpbmVfZG9jc3RyaW5nKHNlbGYpOgotICAgICAgICBkZXNjID0gInRoaXMgdGVzdHMgZm9vIgotICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUsIGRlc2NyaXB0aW9uPWRlc2MpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKLQotY2xhc3MgVGVzdF9UZXN0UmVzdWx0KFRlc3RDYXNlKToKLSAgICAjIE5vdGU6IHRoZXJlIGFyZSBub3Qgc2VwYXJhdGUgdGVzdHMgZm9yIFRlc3RSZXN1bHQud2FzU3VjY2Vzc2Z1bCgpLAotICAgICMgVGVzdFJlc3VsdC5lcnJvcnMsIFRlc3RSZXN1bHQuZmFpbHVyZXMsIFRlc3RSZXN1bHQudGVzdHNSdW4gb3IKLSAgICAjIFRlc3RSZXN1bHQuc2hvdWxkU3RvcCBiZWNhdXNlIHRoZXNlIG9ubHkgaGF2ZSBtZWFuaW5nIGluIHRlcm1zIG9mCi0gICAgIyBvdGhlciBUZXN0UmVzdWx0IG1ldGhvZHMuCi0gICAgIwotICAgICMgQWNjb3JkaW5nbHksIHRlc3RzIGZvciB0aGUgYWZvcmVuYW1lZCBhdHRyaWJ1dGVzIGFyZSBpbmNvcnBvcmF0ZWQKLSAgICAjIGluIHdpdGggdGhlIHRlc3RzIGZvciB0aGUgZGVmaW5pbmcgbWV0aG9kcy4KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICMgIlRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZwotICAgICMgcnVuIHNob3VsZCBiZSBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIFRlc3RSZXN1bHQncyBzaG91bGRTdG9wCi0gICAgIyBhdHRyaWJ1dGUgdG8gVHJ1ZS4iCi0gICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0b3AoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIFRydWUpCi0KLSAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuLiBUaGUgZGVmYXVsdAotICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGluY3JlbWVudHMgdGhlIGluc3RhbmNlJ3MgdGVzdHNSdW4gY291bnRlci4iCi0gICAgZGVmIHRlc3Rfc3RhcnRUZXN0KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAjICJDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSB0ZXN0IGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mCi0gICAgIyB0aGUgb3V0Y29tZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKLSAgICBkZWYgdGVzdF9zdG9wVGVzdChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0KLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQotCi0gICAgICAgICMgU2FtZSB0ZXN0cyBhcyBhYm92ZTsgbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAjICJhZGRTdWNjZXNzKHRlc3QpIgotICAgICMgLi4uCi0gICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHN1Y2NlZWRzIgotICAgICMgLi4uCi0gICAgIyAid2FzU3VjY2Vzc2Z1bCgpIC0gUmV0dXJucyBUcnVlIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLAotICAgICMgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UiCi0gICAgIyAuLi4KLSAgICAjICJ0ZXN0c1J1biAtIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4iCi0gICAgIyAuLi4KLSAgICAjICJlcnJvcnMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGljaCByYWlzZWQgYW4KLSAgICAjIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBDb250YWlucyBmb3JtYXR0ZWQKLSAgICAjIHRyYWNlYmFja3MgaW5zdGVhZCBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKLSAgICAjIC4uLgotICAgICMgImZhaWx1cmVzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAotICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlIHdhcwotICAgICMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIFRlc3RDYXNlLmZhaWwqKCkgb3IgVGVzdENhc2UuYXNzZXJ0KigpCi0gICAgIyBtZXRob2RzLiBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkCi0gICAgIyBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKLSAgICBkZWYgdGVzdF9hZGRTdWNjZXNzKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0gICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHRlc3QpCi0gICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgIyAiYWRkRmFpbHVyZSh0ZXN0LCBlcnIpIgotICAgICMgLi4uCi0gICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHNpZ25hbHMgYSBmYWlsdXJlLiBlcnIgaXMgYSB0dXBsZSBvZgotICAgICMgdGhlIGZvcm0gcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCk6ICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSIKLSAgICAjIC4uLgotICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKLSAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgotICAgICMgLi4uCi0gICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgotICAgICMgLi4uCi0gICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAotICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCi0gICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCi0gICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgIyAuLi4KLSAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKLSAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQotICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAotICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgZGVmIHRlc3RfYWRkRmFpbHVyZShzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXN0LmZhaWwoImZvbyIpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0gICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQotICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKLQotICAgICAgICBzZWxmLmZhaWxJZihyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModGVzdF9jYXNlIGlzIHRlc3QpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhpc2luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikpCi0KLSAgICAjICJhZGRFcnJvcih0ZXN0LCBlcnIpIgotICAgICMgLi4uCi0gICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHJhaXNlcyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBlcnIKLSAgICAjIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCk6Ci0gICAgIyAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCi0gICAgIyAuLi4KLSAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCi0gICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKLSAgICAjIC4uLgotICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKLSAgICAjIC4uLgotICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgotICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAotICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgICMgLi4uCi0gICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCi0gICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKLSAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKLSAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgIGRlZiB0ZXN0X2FkZEVycm9yKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0gICAgICAgIHJlc3VsdC5hZGRFcnJvcih0ZXN0LCBleGNfaW5mb190dXBsZSkKLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5mYWlsSWYocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXN0X2Nhc2UgaXMgdGVzdCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKSkKLQotIyMjIFN1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0Q2FzZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBydW5UZXN0KHNlbGYpOiBwYXNzCi0gICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCi0KLWNsYXNzIEJhcihGb28pOgotICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgL1N1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0Q2FzZQotCi1jbGFzcyBUZXN0X1Rlc3RDYXNlKFRlc3RDYXNlLCBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nKToKLQotICAgICMjIyBTZXQgdXAgYXR0cmlidXRlcyB1c2VkIGJ5IGluaGVyaXRlZCB0ZXN0cwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgVXNlZCBieSBUZXN0SGFzaGluZy50ZXN0X2hhc2ggYW5kIFRlc3RFcXVhbGl0eS50ZXN0X2VxCi0gICAgZXFfcGFpcnMgPSBbKEZvbygndGVzdDEnKSwgRm9vKCd0ZXN0MScpKV0KLQotICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQotICAgIG5lX3BhaXJzID0gWyhGb28oJ3Rlc3QxJyksIEZvbygncnVuVGVzdCcpKQotICAgICAgICAgICAgICAgLChGb28oJ3Rlc3QxJyksIEJhcigndGVzdDEnKSkKLSAgICAgICAgICAgICAgICwoRm9vKCd0ZXN0MScpLCBCYXIoJ3Rlc3QyJykpXQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvU2V0IHVwIGF0dHJpYnV0ZXMgdXNlZCBieSBpbmhlcml0ZWQgdGVzdHMKLQotCi0gICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKLSAgICAjIC4uLgotICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQotICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgotICAgICMgLi4uCi0gICAgIyAibWV0aG9kTmFtZSBkZWZhdWx0cyB0byAicnVuVGVzdCIuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb3B0aW9uYWwsIGFuZCB0aGF0IGl0IGRlZmF1bHRzIHRvIHRoZSBwcm9wZXIKLSAgICAjIHRoaW5nLgotICAgIGRlZiB0ZXN0X2luaXRfX25vX3Rlc3RfbmFtZShzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgTXlFeGNlcHRpb24oKQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoKS5pZCgpWy0xMzpdLCAnLlRlc3QucnVuVGVzdCcpCi0KLSAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgotICAgICMgLi4uCi0gICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCi0gICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCi0gICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX192YWxpZChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgTXlFeGNlcHRpb24oKQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoJ3Rlc3QnKS5pZCgpWy0xMDpdLCAnLlRlc3QudGVzdCcpCi0KLSAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgotICAgICMgLi4uCi0gICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCi0gICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCi0gICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX19pbnZhbGlkKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBNeUV4Y2VwdGlvbigpCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIFRlc3QoJ3Rlc3Rmb28nKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuIEZvcgotICAgICMgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIDEiCi0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vKCd0ZXN0JykuY291bnRUZXN0Q2FzZXMoKSwgMSkKLQotICAgICMgIlJldHVybiB0aGUgZGVmYXVsdCB0eXBlIG9mIHRlc3QgcmVzdWx0IG9iamVjdCB0byBiZSB1c2VkIHRvIHJ1biB0aGlzCi0gICAgIyB0ZXN0LiBGb3IgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlCi0gICAgIyB1bml0dGVzdC5UZXN0UmVzdWx0OyAgc3ViY2xhc3NlcyBvZiBUZXN0Q2FzZSBzaG91bGQKLSAgICAjIG92ZXJyaWRlIHRoaXMgYXMgbmVjZXNzYXJ5LiIKLSAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICByZXN1bHQgPSBGb28oKS5kZWZhdWx0VGVzdFJlc3VsdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCB1bml0dGVzdC5UZXN0UmVzdWx0KQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcwotICAgICMgYW4gZXhjZXB0aW9uLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnNldFVwJykKLQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3QgcmFpc2VzCi0gICAgIyBhbiBlcnJvciAoYXMgb3Bwb3NlZCB0byBhIGZhaWx1cmUpLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQotCi0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsICd0ZWFyRG93bicsCi0gICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCi0gICAgICAgIEZvbygndGVzdCcpLnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3Qgc2lnbmFscwotICAgICMgYSBmYWlsdXJlIChhcyBvcHBvc2VkIHRvIGFuIGVycm9yKS4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQotCi0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRGYWlsdXJlJywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcwotICAgICMgYW4gZXhjZXB0aW9uLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0KLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotCi0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZWFyRG93bicpCi0KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2FkZEVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCi0gICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KLSAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KLSAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiAgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcwotICAgICMgYXR0cmlidXRlIGlzIEFzc2VydGlvbkVycm9yIgotICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgQXNzZXJ0aW9uRXJyb3IpCi0KLSAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KLSAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwotICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgotICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBUZXN0Q2FzZS5ydW4oKSByZXNwZWN0cyB0aGUgZGVzaWduYXRlZCBmYWlsdXJlRXhjZXB0aW9uCi0gICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fc3ViY2xhc3NpbmdfX2V4cGxpY2l0X3JhaXNlKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKLQotICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IFJ1bnRpbWVFcnJvcgotCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIFJ1bnRpbWVFcnJvcikKLQotCi0gICAgICAgIEZvbygndGVzdCcpLnJ1bihyZXN1bHQpCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgotICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCi0gICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCi0gICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIFRlc3RDYXNlLnJ1bigpIHJlc3BlY3RzIHRoZSBkZXNpZ25hdGVkIGZhaWx1cmVFeGNlcHRpb24KLSAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19zdWJjbGFzc2luZ19faW1wbGljaXRfcmFpc2Uoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImZvbyIpCi0KLSAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBSdW50aW1lRXJyb3IKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBSdW50aW1lRXJyb3IpCi0KLQotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgotICAgIGRlZiB0ZXN0X3NldFVwKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICMgLi4uIGFuZCBub3RoaW5nIHNob3VsZCBoYXBwZW4KLSAgICAgICAgRm9vKCkuc2V0VXAoKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKLSAgICBkZWYgdGVzdF90ZWFyRG93bihzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAjIC4uLiBhbmQgbm90aGluZyBzaG91bGQgaGFwcGVuCi0gICAgICAgIEZvbygpLnRlYXJEb3duKCkKLQotICAgICMgIlJldHVybiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgdGVzdCBjYXNlLiIKLSAgICAjCi0gICAgIyBCZWNhdXNlIG9mIHRoZSB2YWd1ZSBuYXR1cmUgb2YgdGhlIGRvY3MsIEknbSBub3QgZ29pbmcgdG8gbG9jayB0aGlzCi0gICAgIyB0ZXN0IGRvd24gdG9vIG11Y2guIFJlYWxseSBhbGwgdGhhdCBjYW4gYmUgYXNzZXJ0ZWQgaXMgdGhhdCB0aGUgaWQoKQotICAgICMgd2lsbCBiZSBhIHN0cmluZyAoZWl0aGVyIDgtYnl0ZSBvciB1bmljb2RlIC0tIGFnYWluLCBiZWNhdXNlIHRoZSBkb2NzCi0gICAgIyBqdXN0IHNheSAic3RyaW5nIikKLSAgICBkZWYgdGVzdF9pZChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoaXNpbnN0YW5jZShGb28oKS5pZCgpLCBiYXNlc3RyaW5nKSkKLQotICAgICMgIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubyBkZXNjcmlwdGlvbgotICAgICMgaGFzIGJlZW4gcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMKLSAgICAjIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciBOb25lLiIKLSAgICBkZWYgdGVzdF9zaG9ydERlc2NyaXB0aW9uX19ub19kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28oKS5zaG9ydERlc2NyaXB0aW9uKCksIE5vbmUpCi0KLSAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KLSAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCi0gICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCi0gICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fc2luZ2xlbGluZV9kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICAidGhpcyB0ZXN0cyBmb28iCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vKCkuc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQotCi0gICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCi0gICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucwotICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgotICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX211bHRpbGluZV9kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICAiIiJ0aGlzIHRlc3RzIGZvbwotICAgICAgICAgICAgICAgIGJsYWgsIGJhciBhbmQgYmF6IGFyZSBhbHNvIHRlc3RlZCIiIgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZvbygpLnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKLQotICAgICMgIklmIHJlc3VsdCBpcyBvbWl0dGVkIG9yIE5vbmUsIGEgdGVtcG9yYXJ5IHJlc3VsdCBvYmplY3QgaXMgY3JlYXRlZAotICAgICMgYW5kIHVzZWQsIGJ1dCBpcyBub3QgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNhbGxlciIKLSAgICBkZWYgdGVzdF9ydW5fX3VzZXNfZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotCi0gICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgICMgTWFrZSBydW4oKSBmaW5kIGEgcmVzdWx0IG9iamVjdCBvbiBpdHMgb3duCi0gICAgICAgIEZvbygndGVzdCcpLnJ1bigpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICd0ZXN0JywgJ3N0b3BUZXN0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi1jbGFzcyBUZXN0X0Fzc2VydGlvbnMoVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X0FsbW9zdEVxdWFsKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgxLjAwMDAwMDAxLCAxLjApCi0gICAgICAgIHNlbGYuZmFpbElmQWxtb3N0RXF1YWwoMS4wMDAwMDAxLCAxLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCwgMS4wMDAwMDAxLCAxLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxJZkFsbW9zdEVxdWFsLCAxLjAwMDAwMDAxLCAxLjApCi0KLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwoMS4xLCAxLjAsIHBsYWNlcz0wKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwsIDEuMSwgMS4wLCBwbGFjZXM9MSkKLQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgwLCAuMSsuMWosIHBsYWNlcz0wKQotICAgICAgICBzZWxmLmZhaWxJZkFsbW9zdEVxdWFsKDAsIC4xKy4xaiwgcGxhY2VzPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCwgMCwgLjErLjFqLCBwbGFjZXM9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbElmQWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTApCi0KLQogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyBNYWluCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RfVGVzdENhc2UsIFRlc3RfVGVzdExvYWRlciwKLSAgICAgICAgVGVzdF9UZXN0U3VpdGUsIFRlc3RfVGVzdFJlc3VsdCwgVGVzdF9GdW5jdGlvblRlc3RDYXNlLAotICAgICAgICBUZXN0X0Fzc2VydGlvbnMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh1bml0dGVzdC50ZXN0LnN1aXRlKCkpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pdm5ld2xpbmVzLnB5IGIvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkKaW5kZXggNTAyMTg4NC4uYTBhOTA5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkKQEAgLTEsMjAgKzEsMjggQEAKICMgVGVzdHMgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCBmb3IgYm90aCByZWFkaW5nIGFuZCBwYXJzaW5nIGZpbGVzLgorCisjIE5PVEU6IHRoaXMgZmlsZSB0ZXN0cyB0aGUgbmV3IGBpb2AgbGlicmFyeSBiYWNrcG9ydGVkIGZyb20gUHl0aG9uIDMueC4KKyMgU2ltaWxhciB0ZXN0cyBmb3IgdGhlIGJ1aWx0aW4gZmlsZSBvYmplY3QgY2FuIGJlIGZvdW5kIGluIHRlc3RfdW5pdm5ld2xpbmVzMmsucHkuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBvcnQgaW8KK2ltcG9ydCBfcHlpbyBhcyBweWlvCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKIAogaWYgbm90IGhhc2F0dHIoc3lzLnN0ZGluLCAnbmV3bGluZXMnKToKLSAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdFNraXBwZWQsIFwKLSAgICAgICAgIlRoaXMgUHl0aG9uIGRvZXMgbm90IGhhdmUgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCIKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgIlRoaXMgUHl0aG9uIGRvZXMgbm90IGhhdmUgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCIpCiAKIEZBVFggPSAneCcgKiAoMioqMTQpCiAKIERBVEFfVEVNUExBVEUgPSBbCiAgICAgImxpbmUxPTEiLAotICAgICJsaW5lMj0ndGhpcyBpcyBhIHZlcnkgbG9uZyBsaW5lIGRlc2lnbmVkIHRvIGdvIHBhc3QgdGhlIG1hZ2ljICIgKwotICAgICAgICAiaHVuZHJlZCBjaGFyYWN0ZXIgbGltaXQgdGhhdCBpcyBpbnNpZGUgZmlsZW9iamVjdC5jIGFuZCB3aGljaCAiICsKLSAgICAgICAgImlzIG1lYW50IHRvIHNwZWVkIHVwIHRoZSBjb21tb24gY2FzZSwgYnV0IHdlIGFsc28gd2FudCB0byB0ZXN0ICIgKworICAgICJsaW5lMj0ndGhpcyBpcyBhIHZlcnkgbG9uZyBsaW5lIGRlc2lnbmVkIHRvIGdvIHBhc3QgYW55IGRlZmF1bHQgIiArCisgICAgICAgICJidWZmZXIgbGltaXRzIHRoYXQgZXhpc3QgaW4gaW8ucHkgYnV0IHdlIGFsc28gd2FudCB0byB0ZXN0ICIgKwogICAgICAgICAidGhlIHVuY29tbW9uIGNhc2UsIG5hdHVyYWxseS4nIiwKICAgICAiZGVmIGxpbmUzKCk6cGFzcyIsCiAgICAgImxpbmU0ID0gJyVzJyIgJSBGQVRYLApAQCAtMjgsNzEgKzM2LDU4IEBACiAjIGJlZm9yZSBlbmQtb2YtZmlsZS4KIERBVEFfTUlYRUQgPSAiXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHIiCiBEQVRBX1NQTElUID0gW3ggKyAiXG4iIGZvciB4IGluIERBVEFfVEVNUExBVEVdCi1kZWwgeAogCiBjbGFzcyBUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyB1c2UgYSBjbGFzcyB2YXJpYWJsZSBEQVRBIHRvIGRlZmluZSB0aGUgZGF0YSB0byB3cml0ZSB0byB0aGUgZmlsZQogICAgICMgYW5kIGEgY2xhc3MgdmFyaWFibGUgTkVXTElORSB0byBzZXQgdGhlIGV4cGVjdGVkIG5ld2xpbmVzIHZhbHVlCi0gICAgUkVBRE1PREUgPSAnVScKKyAgICBSRUFETU9ERSA9ICdyJwogICAgIFdSSVRFTU9ERSA9ICd3YicKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuV1JJVEVNT0RFKQotICAgICAgICBmcC53cml0ZShzZWxmLkRBVEEpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZGF0YSA9IHNlbGYuREFUQQorICAgICAgICBpZiAiYiIgaW4gc2VsZi5XUklURU1PREU6CisgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuV1JJVEVNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGRhdGEpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkKLSAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9MRikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmcC5uZXdsaW5lcyksIHNldChzZWxmLk5FV0xJTkUpKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkKLSAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZnAubmV3bGluZXMpLCBzZXQoc2VsZi5ORVdMSU5FKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkKLSAgICAgICAgZGF0YSA9IFtdCi0gICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgIHdoaWxlIGQ6Ci0gICAgICAgICAgICBkYXRhLmFwcGVuZChkKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gW10KICAgICAgICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICB3aGlsZSBkOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGQpCisgICAgICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGZwLm5ld2xpbmVzKSwgc2V0KHNlbGYuTkVXTElORSkpCiAKICAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkKLSAgICAgICAgZnAucmVhZGxpbmUoKQotICAgICAgICBwb3MgPSBmcC50ZWxsKCkKLSAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCi0gICAgICAgIGZwLnNlZWsocG9zKQotICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgcG9zID0gZnAudGVsbCgpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisgICAgICAgICAgICBmcC5zZWVrKHBvcykKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVRbMTpdKQogCi0gICAgZGVmIHRlc3RfZXhlY2ZpbGUoc2VsZik6Ci0gICAgICAgIG5hbWVzcGFjZSA9IHt9Ci0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICBleGVjZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBuYW1lc3BhY2UpCi0gICAgICAgIGZ1bmMgPSBuYW1lc3BhY2VbJ2xpbmUzJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2VbJ2xpbmU0J10sIEZBVFgpCi0KLQotY2xhc3MgVGVzdE5hdGl2ZU5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKLSAgICBORVdMSU5FID0gTm9uZQotICAgIERBVEEgPSBEQVRBX0xGCi0gICAgUkVBRE1PREUgPSAncicKLSAgICBXUklURU1PREUgPSAndycKIAogY2xhc3MgVGVzdENSTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgogICAgIE5FV0xJTkUgPSAnXHInCkBAIC0xMDcsMTAgKzEwMiwxMCBAQAogICAgIERBVEEgPSBEQVRBX0NSTEYKIAogICAgIGRlZiB0ZXN0X3RlbGwoc2VsZik6Ci0gICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKE5vbmUpKQotICAgICAgICBkYXRhID0gZnAucmVhZGxpbmUoKQotICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihOb25lKSkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQogCiBjbGFzcyBUZXN0TWl4ZWROZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CkBAIC0xMTksMTMgKzExNCwyMiBAQAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBUZXN0TmF0aXZlTmV3bGluZXMsCi0gICAgICAgIFRlc3RDUk5ld2xpbmVzLAotICAgICAgICBUZXN0TEZOZXdsaW5lcywKLSAgICAgICAgVGVzdENSTEZOZXdsaW5lcywKLSAgICAgICAgVGVzdE1peGVkTmV3bGluZXMKLSAgICAgKQorICAgIGJhc2VfdGVzdHMgPSAoVGVzdENSTmV3bGluZXMsCisgICAgICAgICAgICAgICAgICBUZXN0TEZOZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgIFRlc3RDUkxGTmV3bGluZXMsCisgICAgICAgICAgICAgICAgICBUZXN0TWl4ZWROZXdsaW5lcykKKyAgICB0ZXN0cyA9IFtdCisgICAgIyBUZXN0IHRoZSBDIGFuZCBQeXRob24gaW1wbGVtZW50YXRpb25zLgorICAgIGZvciB0ZXN0IGluIGJhc2VfdGVzdHM6CisgICAgICAgIGNsYXNzIENUZXN0KHRlc3QpOgorICAgICAgICAgICAgb3BlbiA9IGlvLm9wZW4KKyAgICAgICAgQ1Rlc3QuX19uYW1lX18gPSBzdHIoIkMiICsgdGVzdC5fX25hbWVfXykKKyAgICAgICAgY2xhc3MgUHlUZXN0KHRlc3QpOgorICAgICAgICAgICAgb3BlbiA9IHN0YXRpY21ldGhvZChweWlvLm9wZW4pCisgICAgICAgIFB5VGVzdC5fX25hbWVfXyA9IHN0cigiUHkiICsgdGVzdC5fX25hbWVfXykKKyAgICAgICAgdGVzdHMuYXBwZW5kKENUZXN0KQorICAgICAgICB0ZXN0cy5hcHBlbmQoUHlUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bml2bmV3bGluZXMyay5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pdm5ld2xpbmVzMmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjYTMxZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pdm5ld2xpbmVzMmsucHkKQEAgLTAsMCArMSwxMzAgQEAKKyMgVGVzdHMgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCBmb3IgYm90aCByZWFkaW5nIGFuZCBwYXJzaW5nIGZpbGVzLgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2lmIG5vdCBoYXNhdHRyKHN5cy5zdGRpbiwgJ25ld2xpbmVzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsIFwKKyAgICAgICAgIlRoaXMgUHl0aG9uIGRvZXMgbm90IGhhdmUgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydCIKKworRkFUWCA9ICd4JyAqICgyKioxNCkKKworREFUQV9URU1QTEFURSA9IFsKKyAgICAibGluZTE9MSIsCisgICAgImxpbmUyPSd0aGlzIGlzIGEgdmVyeSBsb25nIGxpbmUgZGVzaWduZWQgdG8gZ28gcGFzdCB0aGUgbWFnaWMgIiArCisgICAgICAgICJodW5kcmVkIGNoYXJhY3RlciBsaW1pdCB0aGF0IGlzIGluc2lkZSBmaWxlb2JqZWN0LmMgYW5kIHdoaWNoICIgKworICAgICAgICAiaXMgbWVhbnQgdG8gc3BlZWQgdXAgdGhlIGNvbW1vbiBjYXNlLCBidXQgd2UgYWxzbyB3YW50IHRvIHRlc3QgIiArCisgICAgICAgICJ0aGUgdW5jb21tb24gY2FzZSwgbmF0dXJhbGx5LiciLAorICAgICJkZWYgbGluZTMoKTpwYXNzIiwKKyAgICAibGluZTQgPSAnJXMnIiAlIEZBVFgsCisgICAgXQorCitEQVRBX0xGID0gIlxuIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxuIgorREFUQV9DUiA9ICJcciIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcciIKK0RBVEFfQ1JMRiA9ICJcclxuIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyXG4iCisKKyMgTm90ZSB0aGF0IERBVEFfTUlYRUQgYWxzbyB0ZXN0cyB0aGUgYWJpbGl0eSB0byByZWNvZ25pemUgYSBsb25lIFxyCisjIGJlZm9yZSBlbmQtb2YtZmlsZS4KK0RBVEFfTUlYRUQgPSAiXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHIiCitEQVRBX1NQTElUID0gW3ggKyAiXG4iIGZvciB4IGluIERBVEFfVEVNUExBVEVdCitkZWwgeAorCitjbGFzcyBUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyB1c2UgYSBjbGFzcyB2YXJpYWJsZSBEQVRBIHRvIGRlZmluZSB0aGUgZGF0YSB0byB3cml0ZSB0byB0aGUgZmlsZQorICAgICMgYW5kIGEgY2xhc3MgdmFyaWFibGUgTkVXTElORSB0byBzZXQgdGhlIGV4cGVjdGVkIG5ld2xpbmVzIHZhbHVlCisgICAgUkVBRE1PREUgPSAnVScKKyAgICBXUklURU1PREUgPSAnd2InCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLldSSVRFTU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLkRBVEEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9MRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IFtdCisgICAgICAgICAgICBkID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgd2hpbGUgZDoKKyAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChkKQorICAgICAgICAgICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3Rfc2VlayhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgcG9zID0gZnAudGVsbCgpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisgICAgICAgICAgICBmcC5zZWVrKHBvcykKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVRbMTpdKQorCisgICAgZGVmIHRlc3RfZXhlY2ZpbGUoc2VsZik6CisgICAgICAgIG5hbWVzcGFjZSA9IHt9CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIGV4ZWNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sIG5hbWVzcGFjZSkKKyAgICAgICAgZnVuYyA9IG5hbWVzcGFjZVsnbGluZTMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzcGFjZVsnbGluZTQnXSwgRkFUWCkKKworCitjbGFzcyBUZXN0TmF0aXZlTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSBOb25lCisgICAgREFUQSA9IERBVEFfTEYKKyAgICBSRUFETU9ERSA9ICdyJworICAgIFdSSVRFTU9ERSA9ICd3JworCitjbGFzcyBUZXN0Q1JOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9ICdccicKKyAgICBEQVRBID0gREFUQV9DUgorCitjbGFzcyBUZXN0TEZOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9ICdcbicKKyAgICBEQVRBID0gREFUQV9MRgorCitjbGFzcyBUZXN0Q1JMRk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xyXG4nCisgICAgREFUQSA9IERBVEFfQ1JMRgorCisgICAgZGVmIHRlc3RfdGVsbChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihOb25lKSkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZwLm5ld2xpbmVzKSwgcmVwcihzZWxmLk5FV0xJTkUpKQorCitjbGFzcyBUZXN0TWl4ZWROZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9ICgnXHInLCAnXG4nKQorICAgIERBVEEgPSBEQVRBX01JWEVECisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3ROYXRpdmVOZXdsaW5lcywKKyAgICAgICAgVGVzdENSTmV3bGluZXMsCisgICAgICAgIFRlc3RMRk5ld2xpbmVzLAorICAgICAgICBUZXN0Q1JMRk5ld2xpbmVzLAorICAgICAgICBUZXN0TWl4ZWROZXdsaW5lcworICAgICApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggNDAyMzA5Yy4uYzZlMjRkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCiAgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLCAiZmlsZW5vIiwKICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSIsICJpbmZvIiwgImdldHVybCIsICJnZXRjb2RlIiwgIl9faXRlcl9fIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaGFzYXR0cihzZWxmLnJldHVybmVkX29iaiwgYXR0ciksCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnJldHVybmVkX29iaiwgYXR0ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKIApAQCAtNjYsOCArNjYsNyBAQAogCiAgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgogICAgICAgICBmaWxlX251bSA9IHNlbGYucmV0dXJuZWRfb2JqLmZpbGVubygpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGZpbGVfbnVtLCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgImZpbGVubygpIGRpZCBub3QgcmV0dXJuIGFuIGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaWxlX251bSwgaW50LCAiZmlsZW5vKCkgZGlkIG5vdCByZXR1cm4gYW4gaW50IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKGZpbGVfbnVtLCBsZW4oc2VsZi50ZXh0KSksIHNlbGYudGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhZGluZyBvbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGZpbGVubygpICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCByZXR1cm4gdGhlIGV4cGVjdGVkIHRleHQiKQpAQCAtNzgsNyArNzcsNyBAQAogICAgICAgICBzZWxmLnJldHVybmVkX29iai5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzZWxmLnJldHVybmVkX29iai5pbmZvKCksIG1pbWV0b29scy5NZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucmV0dXJuZWRfb2JqLmluZm8oKSwgbWltZXRvb2xzLk1lc3NhZ2UpCiAKICAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZXR1cm5lZF9vYmouZ2V0dXJsKCksIHNlbGYucGF0aG5hbWUpCkBAIC0xMTMsNyArMTEyLDcgQEAKICAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsICdsb2NhbGhvc3QnKQogICAgICAgICBwcm94aWVzID0gdXJsbGliLmdldHByb3hpZXNfZW52aXJvbm1lbnQoKQogICAgICAgICAjIGdldHByb3hpZXNfZW52aXJvbm1lbnQgdXNlIGxvd2VyZWQgY2FzZSB0cnVuY2F0ZWQgKG5vICdfcHJveHknKSBrZXlzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdsb2NhbGhvc3QnLCBwcm94aWVzWydubyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdsb2NhbGhvc3QnLCBwcm94aWVzWydubyddKQogCiAKIGNsYXNzIHVybG9wZW5fSHR0cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIyOCw5ICsyMjcsOSBAQAogICAgICAgICAjIGEgaGVhZGVycyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybHJldHJpZXZlKCJmaWxlOiVzIiAlIHRlc3Rfc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShyZXN1bHRbMV0sIG1pbWV0b29scy5NZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGdldCBhIG1pbWV0b29scy5NZXNzYWdlIGluc3RhbmNlIGFzIHNlY29uZCAiCi0gICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgdmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0WzFdLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGdldCBhIG1pbWV0b29scy5NZXNzYWdlIGluc3RhbmNlIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgcmV0dXJuZWQgdmFsdWUiKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc2V0dGluZyB0aGUgZmlsZW5hbWUgYXJndW1lbnQgd29ya3MuCkBAIC0yMzksNyArMjM4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybHJldHJpZXZlKHNlbGYuY29uc3RydWN0TG9jYWxGaWxlVXJsKAogICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiksIHNlY29uZF90ZW1wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZF90ZW1wLCByZXN1bHRbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhzZWNvbmRfdGVtcCksICJjb3B5IG9mIHRoZSBmaWxlIHdhcyBub3QgIgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2Vjb25kX3RlbXApLCAiY29weSBvZiB0aGUgZmlsZSB3YXMgbm90ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hZGUiKQogICAgICAgICBGSUxFID0gZmlsZShzZWNvbmRfdGVtcCwgJ3JiJykKICAgICAgICAgdHJ5OgpAQCAtMjUzLDkgKzI1Miw5IEBACiAgICAgZGVmIHRlc3RfcmVwb3J0aG9vayhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVwb3J0aG9vayB3b3Jrcy4KICAgICAgICAgZGVmIGhvb2t0ZXN0ZXIoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUsIGNvdW50X2hvbGRlcj1bMF0pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoY291bnQsIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShibG9ja19zaXplLCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodG90YWxfc2l6ZSwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjb3VudCwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJsb2NrX3NpemUsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0b3RhbF9zaXplLCBpbnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBjb3VudF9ob2xkZXJbMF0pCiAgICAgICAgICAgICBjb3VudF9ob2xkZXJbMF0gPSBjb3VudF9ob2xkZXJbMF0gKyAxCiAgICAgICAgIHNlY29uZF90ZW1wID0gIiVzLjIiICUgdGVzdF9zdXBwb3J0LlRFU1RGTgpAQCAtMzgyLDYgKzM4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlKCk6ICVzICE9ICVzIiAlIChleHBlY3RlZCwgcmVzdWx0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZV9wbHVzKCk6ICVzICE9ICVzIiAlIChleHBlY3RlZCwgcmVzdWx0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1cmxsaWIucXVvdGUsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9xdW90aW5nX3NwYWNlKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBxdW90ZSgpIGFuZCBxdW90ZV9wbHVzKCkgaGFuZGxlIHNwYWNlcyBhcyBzcGVjaWZpZWQgaW4KQEAgLTUxMiw3ICs1MTIsNyBAQAogICAgICAgICBleHBlY3Rfc29tZXdoZXJlID0gWyIxc3Q9MSIsICIybmQ9MiIsICIzcmQ9MyJdCiAgICAgICAgIHJlc3VsdCA9IHVybGxpYi51cmxlbmNvZGUoZ2l2ZW4pCiAgICAgICAgIGZvciBleHBlY3RlZCBpbiBleHBlY3Rfc29tZXdoZXJlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkIGluIHJlc3VsdCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyAlczogJXMgbm90IGZvdW5kIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgZXhwZWN0ZWQsIHJlc3VsdCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvdW50KCcmJyksIDIsCkBAIC01MjEsNyArNTIxLDcgQEAKICAgICAgICAgYW1wX2xvY2F0aW9uID0gcmVzdWx0LmluZGV4KCcmJykKICAgICAgICAgb25fYW1wX2xlZnQgPSByZXN1bHRbYW1wX2xvY2F0aW9uIC0gMV0KICAgICAgICAgb25fYW1wX3JpZ2h0ID0gcmVzdWx0W2FtcF9sb2NhdGlvbiArIDFdCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvbl9hbXBfbGVmdC5pc2RpZ2l0KCkgYW5kIG9uX2FtcF9yaWdodC5pc2RpZ2l0KCksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvbl9hbXBfbGVmdC5pc2RpZ2l0KCkgYW5kIG9uX2FtcF9yaWdodC5pc2RpZ2l0KCksCiAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyAlczogJyYnIG5vdCBsb2NhdGVkIGluIHByb3BlciBwbGFjZSBpbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgcmVzdWx0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgKDUgKiAzKSArIDIsICM1IGNoYXJzIHBlciB0aGluZyBhbmQgYW1wcwpAQCAtNTU5LDggKzU1OSw3IEBACiAgICAgICAgIHJlc3VsdCA9IHVybGxpYi51cmxlbmNvZGUoZ2l2ZW4sIFRydWUpCiAgICAgICAgIGZvciB2YWx1ZSBpbiBnaXZlblsic2VxdWVuY2UiXToKICAgICAgICAgICAgIGV4cGVjdCA9ICJzZXF1ZW5jZT0lcyIgJSB2YWx1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdCBpbiByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBmb3VuZCBpbiAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3QsIHJlc3VsdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY291bnQoJyYnKSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgMiAnJidzLCBnb3QgJXMiICUgcmVzdWx0LmNvdW50KCcmJykpCiAKQEAgLTYwNyw4ICs2MDYsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAidXJsMnBhdGhuYW1lKCkgZmFpbGVkOyAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCiAKK2NsYXNzIFV0aWxpdHlfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RjYXNlIHRvIHRlc3QgdGhlIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgaW4gdGhlIHVybGxpYi4iIiIKKworICAgIGRlZiB0ZXN0X3NwbGl0cGFzc3dkKHNlbGYpOgorICAgICAgICAiIiJTb21lIG9mIHRoZSBwYXNzd29yZCBleGFtcGxlcyBhcmUgbm90IHNlbnNpYmxlLCBidXQgaXQgaXMgYWRkZWQgdG8KKyAgICAgICAgY29uZmlybWluZyB0byBSRkMyNjE3IGFuZCBhZGRyZXNzaW5nIGlzc3VlNDY3NS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcbmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVxuYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHRiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFcdGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxyYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXHJiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcZmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVxmYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHZiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFcdmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYTpiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmE6YicpKQorCisKIGNsYXNzIFVSTG9wZW5lcl9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdGNhc2UgdG8gdGVzdCB0aGUgb3BlbiBtZXRob2Qgb2YgVVJMb3BlbmVyIGNsYXNzLiIiIgorCiAgICAgZGVmIHRlc3RfcXVvdGVkX29wZW4oc2VsZik6CiAgICAgICAgIGNsYXNzIER1bW15VVJMb3BlbmVyKHVybGxpYi5VUkxvcGVuZXIpOgogICAgICAgICAgICAgZGVmIG9wZW5fc3BhbShzZWxmLCB1cmwpOgpAQCAtNjc0LDcgKzY5MCw3IEBACiAjICAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgogIyAgICAgICAgICMgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBpcyBpZ25vcmVkCiAjICAgICAgICAgaW1wb3J0IHNvY2tldAotIyAgICAgICAgIHNlbGYuYXNzZXJ0Xyhzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorIyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogIyAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICMgICAgICAgICB0cnk6CiAjICAgICAgICAgICAgIGZ0cCA9IHVybGxpYi5mdHB3cmFwcGVyKCJteXVzZXIiLCAibXlwYXNzIiwgImxvY2FsaG9zdCIsIDkwOTMsIFtdKQpAQCAtNjg2LDcgKzcwMiw3IEBACiAjICAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgogIyAgICAgICAgICMgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBpcyB1c2VkCiAjICAgICAgICAgaW1wb3J0IHNvY2tldAotIyAgICAgICAgIHNlbGYuYXNzZXJ0Xyhzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorIyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQogIyAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKICMgICAgICAgICB0cnk6CiAjICAgICAgICAgICAgIGZ0cCA9IHVybGxpYi5mdHB3cmFwcGVyKCJteXVzZXIiLCAibXlwYXNzIiwgImxvY2FsaG9zdCIsIDkwOTMsIFtdKQpAQCAtNzE3LDYgKzczMyw3IEBACiAgICAgICAgICAgICBVbnF1b3RpbmdUZXN0cywKICAgICAgICAgICAgIHVybGVuY29kZV9UZXN0cywKICAgICAgICAgICAgIFBhdGhuYW1lX1Rlc3RzLAorICAgICAgICAgICAgVXRpbGl0eV9UZXN0cywKICAgICAgICAgICAgIFVSTG9wZW5lcl9UZXN0cywKICAgICAgICAgICAgICNGVFBXcmFwcGVyVGVzdHMsCiAgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCA2NWFkOGUzLi43ODlkY2QzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0yNCw5ICsyNCw3IEBACiAKICAgICAgICAgIyBBbmQgbW9yZSBoYWNraW5nIHRvIGdldCBpdCB0byB3b3JrIG9uIE1hY09TLiBUaGlzIGFzc3VtZXMKICAgICAgICAgIyB1cmxsaWIucGF0aG5hbWUydXJsIHdvcmtzLCB1bmZvcnR1bmF0ZWx5Li4uCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICBmbmFtZSA9ICcvJyArIGZuYW1lLnJlcGxhY2UoJzonLCAnLycpCi0gICAgICAgIGVsaWYgb3MubmFtZSA9PSAncmlzY29zJzoKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncmlzY29zJzoKICAgICAgICAgICAgIGltcG9ydCBzdHJpbmcKICAgICAgICAgICAgIGZuYW1lID0gb3MuZXhwYW5kKGZuYW1lKQogICAgICAgICAgICAgZm5hbWUgPSBmbmFtZS50cmFuc2xhdGUoc3RyaW5nLm1ha2V0cmFucygiLy4iLCAiLi8iKSkKQEAgLTQ3LDcgKzQ1LDcgQEAKICAgICAgICAgICAgICAgICAgKCdhLCBiLCAiYyIsICJkIiwgImUsZiIsIGcsIGgnLCBbJ2EnLCAnYicsICciYyInLCAnImQiJywgJyJlLGYiJywgJ2cnLCAnaCddKSwKICAgICAgICAgICAgICAgICAgKCdhPSJiXFwiYyIsIGQ9ImVcXCxmIiwgZz0iaFxcXFxpIicsIFsnYT0iYiJjIicsICdkPSJlLGYiJywgJ2c9ImhcXGkiJ10pXQogICAgICAgICBmb3Igc3RyaW5nLCBsaXN0IGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModXJsbGliMi5wYXJzZV9odHRwX2xpc3Qoc3RyaW5nKSwgbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliMi5wYXJzZV9odHRwX2xpc3Qoc3RyaW5nKSwgbGlzdCkKIAogCiBkZWYgdGVzdF9yZXF1ZXN0X2hlYWRlcnNfZGljdCgpOgpAQCAtMjg4LDcgKzI4Niw3IEBACiAgICAgZGVmIHNldF9kZWJ1Z2xldmVsKHNlbGYsIGxldmVsKToKICAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCiAKLSAgICBkZWYgX3NldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIGRlZiBzZXRfdHVubmVsKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKToKICAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYuX3R1bm5lbF9wb3J0ID0gcG9ydAogICAgICAgICBpZiBoZWFkZXJzOgpAQCAtNTgwLDE1ICs1NzgsMTUgQEAKICAgICAgICAgICAgICAgICAjICpfcmVxdWVzdAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGhhbmRsZXIsIG5hbWUpLCBjYWxsc1tpXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcmdzKSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1swXSwgUmVxdWVzdCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyAqX3Jlc3BvbnNlCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaGFuZGxlciwgbmFtZSksIGNhbGxzW2ldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KQogICAgICAgICAgICAgICAgICMgcmVzcG9uc2UgZnJvbSBvcGVuZXIub3BlbiBpcyBOb25lLCBiZWNhdXNlIHRoZXJlJ3Mgbm8KICAgICAgICAgICAgICAgICAjIGhhbmRsZXIgdGhhdCBkZWZpbmVzIGh0dHBfb3BlbiB0byBoYW5kbGUgaXQKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oYXJnc1sxXSBpcyBOb25lIG9yCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3NbMV0gaXMgTm9uZSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkpCiAKIApAQCAtNjI0LDIyICs2MjIsMzIgQEAKICAgICAgICAgaCA9IE51bGxGVFBIYW5kbGVyKGRhdGEpCiAgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQogCi0gICAgICAgIGZvciB1cmwsIGhvc3QsIHBvcnQsIHR5cGVfLCBkaXJzLCBmaWxlbmFtZSwgbWltZXR5cGUgaW4gWworICAgICAgICBmb3IgdXJsLCBob3N0LCBwb3J0LCB1c2VyLCBwYXNzd2QsIHR5cGVfLCBkaXJzLCBmaWxlbmFtZSwgbWltZXR5cGUgaW4gWwogICAgICAgICAgICAgKCJmdHA6Ly9sb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCi0gICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgIkkiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIiLCAiIiwgIkkiLAorICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiYmF6Lmh0bWwiLCAidGV4dC9odG1sIiksCisgICAgICAgICAgICAoImZ0cDovL3BhcnJvdEBsb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgInBhcnJvdCIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vJTI1cGFycm90QGxvY2FsaG9zdC9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAiJXBhcnJvdCIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vJTI1NDJwYXJyb3RAbG9jYWxob3N0L2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIlNDJwYXJyb3QiLCAiIiwgIkkiLAogICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiYmF6Lmh0bWwiLCAidGV4dC9odG1sIiksCiAgICAgICAgICAgICAoImZ0cDovL2xvY2FsaG9zdDo4MC9mb28vYmFyLyIsCi0gICAgICAgICAgICAgImxvY2FsaG9zdCIsIDgwLCAiRCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIDgwLCAiIiwgIiIsICJEIiwKICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgIiIsIE5vbmUpLAogICAgICAgICAgICAgKCJmdHA6Ly9sb2NhbGhvc3QvYmF6LmdpZjt0eXBlPWEiLAotICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICJBIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAiIiwgIiIsICJBIiwKICAgICAgICAgICAgICBbXSwgImJhei5naWYiLCBOb25lKSwgICMgWFhYIHJlYWxseSB0aGlzIHNob3VsZCBndWVzcyBpbWFnZS9naWYKICAgICAgICAgICAgIF06CiAgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKICAgICAgICAgICAgIHJlcS50aW1lb3V0ID0gTm9uZQogICAgICAgICAgICAgciA9IGguZnRwX29wZW4ocmVxKQogICAgICAgICAgICAgIyBmdHAgYXV0aGVudGljYXRpb24gbm90IHlldCBpbXBsZW1lbnRlZCBieSBGVFBIYW5kbGVyCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaC51c2VyID09IGgucGFzc3dkID09ICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnVzZXIsIHVzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgucGFzc3dkLCBwYXNzd2QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaG9zdCwgc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgucG9ydCwgcG9ydCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaXJzLCBkaXJzKQpAQCAtNzM2LDExICs3NDQsMTEgQEAKICAgICAgICAgICAgICAgICBoLmZpbGVfb3BlbihyZXEpCiAgICAgICAgICAgICAjIFhYWFggcmVtb3ZlIE9TRXJyb3Igd2hlbiBidWcgZml4ZWQKICAgICAgICAgICAgIGV4Y2VwdCAodXJsbGliMi5VUkxFcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBmdHApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmdHApCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvLnJlcSBpcyByZXEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8ucmVxIGlzIHJlcSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS50eXBlLCAiZnRwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnR5cGUgaXMgImZ0cCIsIGZ0cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnR5cGUgPT0gImZ0cCIsIGZ0cCkKIAogICAgIGRlZiB0ZXN0X2h0dHAoc2VsZik6CiAKQEAgLTc4Myw4ICs3OTEsOCBAQAogICAgICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIikKICAgICAgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQogICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOiAgIyBHRVQKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oIkNvbnRlbnQtbGVuZ3RoIiBub3QgaW4gcmVxLnVucmVkaXJlY3RlZF9oZHJzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiQ29udGVudC10eXBlIiBub3QgaW4gcmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgcmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtdHlwZSIsIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKICAgICAgICAgICAgIGVsc2U6ICAjIFBPU1QKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSwgIjAiKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LXR5cGUiXSwKQEAgLTgzMCw2ICs4MzgsMjUgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgorICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CisgICAgICAgICMgc3RhcnQgd2l0aCcvJworCisgICAgICAgIGggPSB1cmxsaWIyLkFic3RyYWN0SFRUUEhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICB3ZWlyZF91cmwgPSAnaHR0cDovL3d3dy5weXRob24ub3JnP2dldHNwYW0nCisgICAgICAgIHJlcSA9IFJlcXVlc3Qod2VpcmRfdXJsKQorICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuZ2V0X2hvc3QoKSwnd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfc2VsZWN0b3IoKSwnLz9nZXRzcGFtJykKKworICAgICAgICB1cmxfd2l0aG91dF9wYXRoID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycKKyAgICAgICAgcmVxID0gUmVxdWVzdCh1cmxfd2l0aG91dF9wYXRoKQorICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuZ2V0X2hvc3QoKSwnd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfc2VsZWN0b3IoKSwnJykKKwogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKICAgICAgICAgaCA9IHVybGxpYjIuSFRUUEVycm9yUHJvY2Vzc29yKCkKICAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCkBAIC04MzksMTkgKzg2NiwxOSBAQAogICAgICAgICAjIGFsbCAyeHggYXJlIHBhc3NlZCB0aHJvdWdoCiAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIsIHVybCkKICAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyIGlzIG5ld3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCiAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAyLCAiQWNjZXB0ZWQiLCB7fSwgIiIsIHVybCkKICAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyIGlzIG5ld3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCiAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjA2LCAiUGFydGlhbCBjb250ZW50Iiwge30sICIiLCB1cmwpCiAgICAgICAgIG5ld3IgPSBoLmh0dHBfcmVzcG9uc2UocmVxLCByKQotICAgICAgICBzZWxmLmFzc2VydF8ociBpcyBuZXdyKQotICAgICAgICBzZWxmLmFzc2VydF8obm90IGhhc2F0dHIobywgInByb3RvIikpICAjIG8uZXJyb3Igbm90IGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUociBpcyBuZXdyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobywgInByb3RvIikpICAjIG8uZXJyb3Igbm90IGNhbGxlZAogICAgICAgICAjIGFueXRoaW5nIGVsc2UgY2FsbHMgby5lcnJvciAoYW5kIE1vY2tPcGVuZXIgcmV0dXJucyBOb25lLCBoZXJlKQogICAgICAgICByID0gTW9ja1Jlc3BvbnNlKDUwMiwgIkJhZCBnYXRld2F5Iiwge30sICIiLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoLmh0dHBfcmVzcG9uc2UocmVxLCByKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5odHRwX3Jlc3BvbnNlKHJlcSwgcikgaXMgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnByb3RvLCAiaHR0cCIpICAjIG8uZXJyb3IgY2FsbGVkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5hcmdzLCAocmVxLCByLCA1MDIsICJCYWQgZ2F0ZXdheSIsIHt9KSkKIApAQCAtODYzLDEyICs4OTAsMTIgQEAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCiAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIpCiAgICAgICAgIG5ld3JlcSA9IGguaHR0cF9yZXF1ZXN0KHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNqLmFjaF9yZXEgaXMgcmVxIGlzIG5ld3JlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKSwgImV4YW1wbGUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCByZXEuaXNfdW52ZXJpZmlhYmxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjai5hY2hfcmVxIGlzIHJlcSBpcyBuZXdyZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9vcmlnaW5fcmVxX2hvc3QoKSwgImV4YW1wbGUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXEuaXNfdW52ZXJpZmlhYmxlKCkpCiAgICAgICAgIG5ld3IgPSBoLmh0dHBfcmVzcG9uc2UocmVxLCByKQotICAgICAgICBzZWxmLmFzc2VydF8oY2ouZWNfcmVxIGlzIHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGNqLmVjX3IgaXMgciBpcyBuZXdyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2ouZWNfcmVxIGlzIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNqLmVjX3IgaXMgciBpcyBuZXdyKQogCiAgICAgZGVmIHRlc3RfcmVkaXJlY3Qoc2VsZik6CiAgICAgICAgIGZyb21fdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9hLmh0bWwiCkBAIC04OTEsMjMgKzkxOCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9ja0hlYWRlcnMoeyJsb2NhdGlvbiI6IHRvX3VybH0pKQogICAgICAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyAzMDcgaW4gcmVzcG9uc2UgdG8gUE9TVCByZXF1aXJlcyB1c2VyIE9LCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhjb2RlID09IDMwNyBhbmQgZGF0YSBpcyBub3QgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvZGUgPT0gMzA3IGFuZCBkYXRhIGlzIG5vdCBOb25lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5yZXEuZ2V0X2Z1bGxfdXJsKCksIHRvX3VybCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5yZXEuZ2V0X21ldGhvZCgpLCAiR0VUIikKICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhub3Qgby5yZXEuaGFzX2RhdGEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvLnJlcS5oYXNfZGF0YSgpKQogCiAgICAgICAgICAgICAgICAgIyBub3cgaXQncyBhIEdFVCwgdGhlcmUgc2hvdWxkIG5vdCBiZSBoZWFkZXJzIHJlZ2FyZGluZyBjb250ZW50CiAgICAgICAgICAgICAgICAgIyAocG9zc2libHkgZHJhZ2dlZCBmcm9tIGJlZm9yZSBiZWluZyBhIFBPU1QpCiAgICAgICAgICAgICAgICAgaGVhZGVycyA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gby5yZXEuaGVhZGVyc10KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImNvbnRlbnQtbGVuZ3RoIiBub3QgaW4gaGVhZGVycykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoImNvbnRlbnQtdHlwZSIgbm90IGluIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiY29udGVudC1sZW5ndGgiLCBoZWFkZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImNvbnRlbnQtdHlwZSIsIGhlYWRlcnMpCiAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucmVxLmhlYWRlcnNbIk5vbnNlbnNlIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlraW5nPXdpdGhob2xkIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8oIlNwYW0iIG5vdCBpbiBvLnJlcS5oZWFkZXJzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygiU3BhbSIgbm90IGluIG8ucmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNwYW0iLCBvLnJlcS5oZWFkZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNwYW0iLCBvLnJlcS51bnJlZGlyZWN0ZWRfaGRycykKIAogICAgICAgICAjIGxvb3AgZGV0ZWN0aW9uCiAgICAgICAgIHJlcSA9IFJlcXVlc3QoZnJvbV91cmwpCkBAIC05NTYsNyArOTgzLDcgQEAKICAgICAgICAgY3AgPSB1cmxsaWIyLkhUVFBDb29raWVQcm9jZXNzb3IoY2opCiAgICAgICAgIG8gPSBidWlsZF90ZXN0X29wZW5lcihoaCwgaGRlaCwgaHJoLCBjcCkKICAgICAgICAgby5vcGVuKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGgucmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhoLnJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKIAogICAgIGRlZiB0ZXN0X3Byb3h5KHNlbGYpOgogICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQpAQCAtMTAxNiwxNiArMTA0MywxNiBAQAogICAgICAgICByZXEuYWRkX2hlYWRlcigiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpCiAgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJVc2VyLUFnZW50IiwiR3JhaWwiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAid3d3LmV4YW1wbGUuY29tIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcS5fdHVubmVsX2hvc3QgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLl90dW5uZWxfaG9zdCkKICAgICAgICAgciA9IG8ub3BlbihyZXEpCiAgICAgICAgICMgVmVyaWZ5IFByb3h5LUF1dGhvcml6YXRpb24gZ2V0cyB0dW5uZWxlZCB0byByZXF1ZXN0LgogICAgICAgICAjIGh0dHBzY29ubiByZXFfaGVhZGVycyBkbyBub3QgaGF2ZSB0aGUgUHJveHktQXV0aG9yaXphdGlvbiBoZWFkZXIgYnV0CiAgICAgICAgICMgdGhlIHJlcSB3aWxsIGhhdmUuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKCJQcm94eS1BdXRob3JpemF0aW9uIiwiRm9vQmFyIikgaW4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoIlByb3h5LUF1dGhvcml6YXRpb24iLCJGb29CYXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCJVc2VyLUFnZW50IiwiR3JhaWwiKSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHNfaGFuZGxlci5odHRwY29ubi5yZXFfaGVhZGVycykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXEuX3R1bm5lbF9ob3N0IGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCJVc2VyLUFnZW50IiwiR3JhaWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZXEuX3R1bm5lbF9ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAicHJveHkuZXhhbXBsZS5jb206MzEyOCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIlByb3h5LWF1dGhvcml6YXRpb24iKSwiRm9vQmFyIikKIApAQCAtMTE5Miw3ICsxMjE5LDcgQEAKICAgICAgICAgICAgIGlmIGguX19jbGFzc19fID09IGhhbmRsZXJfY2xhc3M6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKIAogY2xhc3MgUmVxdWVzdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTIwNywxMCArMTIzNCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJHRVQiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCiAKICAgICBkZWYgdGVzdF9hZGRfZGF0YShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLmdldC5oYXNfZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuZ2V0Lmhhc19kYXRhKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKICAgICAgICAgc2VsZi5nZXQuYWRkX2RhdGEoInNwYW0iKQotICAgICAgICBzZWxmLmFzc2VydF8oc2VsZi5nZXQuaGFzX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0Lmhhc19kYXRhKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCiAKICAgICBkZWYgdGVzdF9nZXRfZnVsbF91cmwoc2VsZik6CkBAIC0xMjMzLDEyICsxMjYwLDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5weXRob24ub3JnIiwgcmVxLmdldF9ob3N0KCkpCiAKICAgICBkZWYgdGVzdF9wcm94eShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzZWxmLmdldC5oYXNfcHJveHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmdldC5oYXNfcHJveHkoKSkKICAgICAgICAgc2VsZi5nZXQuc2V0X3Byb3h5KCJ3d3cucGVybC5vcmciLCAiaHR0cCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmdldC5oYXNfcHJveHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0Lmhhc19wcm94eSgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucHl0aG9uLm9yZyIsIHNlbGYuZ2V0LmdldF9vcmlnaW5fcmVxX2hvc3QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnBlcmwub3JnIiwgc2VsZi5nZXQuZ2V0X2hvc3QoKSkKIAorICAgIGRlZiB0ZXN0X3dyYXBwZWRfdXJsKHNlbGYpOgorICAgICAgICByZXEgPSBSZXF1ZXN0KCI8VVJMOmh0dHA6Ly93d3cucHl0aG9uLm9yZz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucHl0aG9uLm9yZyIsIHJlcS5nZXRfaG9zdCgpKQorCisgICAgZGVmIHRlc3RfdXJsd2l0aF9mcmFnbWVudChzZWxmKToKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnLz9xcz1xdWVyeSNmcmFnbWVudD10cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLz9xcz1xdWVyeSIsIHJlcS5nZXRfc2VsZWN0b3IoKSkKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnLyNmdW49dHJ1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi8iLCByZXEuZ2V0X3NlbGVjdG9yKCkpCisKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggNTY0MzQzYS4uMGZkYTc3MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtMSw2ICsxLDUgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdXJscGFyc2UKIGltcG9ydCB1cmxsaWIyCiBpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKQEAgLTgsNiArNyw3IEBACiBpbXBvcnQgaGFzaGxpYgogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIG1pbWV0b29scyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdtaW1ldG9vbHMnLCBkZXByZWNhdGVkPVRydWUpCit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAogIyBMb29wYmFjayBodHRwIHNlcnZlciBpbmZyYXN0cnVjdHVyZQogCkBAIC0xOTUsNyArMTk1LDExIEBACiAgICAgdGVzdGluZy4KICAgICAiIiIKIAotICAgIGRpZ2VzdF9hdXRoX2hhbmRsZXIgPSBEaWdlc3RBdXRoSGFuZGxlcigpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpZ2VzdF9hdXRoX2hhbmRsZXIsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgVGhpcyBoYXMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIG91ciBwYXJlbnQncyBfX2luaXRfXygpLCB3aGljaCB3aWxsCisgICAgICAgICMgdHJ5IHRvIGNhbGwgZG9fR0VUKCkuCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciA9IGRpZ2VzdF9hdXRoX2hhbmRsZXIKKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CiAgICAgICAgICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgZm9yIGRlYnVnZ2luZy4KQEAgLTIxNiw3ICsyMjAsMTUgQEAKIAogIyBUZXN0IGNhc2VzCiAKLWNsYXNzIFByb3h5QXV0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworCitjbGFzcyBQcm94eUF1dGhUZXN0cyhCYXNlVGVzdENhc2UpOgogICAgIFVSTCA9ICJodHRwOi8vbG9jYWxob3N0IgogCiAgICAgVVNFUiA9ICJ0ZXN0ZXIiCkBAIC0yMjQsNDkgKzIzNiw1MiBAQAogICAgIFJFQUxNID0gIlRlc3RSZWFsbSIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgRmFrZVByb3h5SGFuZGxlci5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF91c2Vycyh7Ci0gICAgICAgICAgICBzZWxmLlVTRVIgOiBzZWxmLlBBU1NXRAotICAgICAgICAgICAgfSkKLSAgICAgICAgRmFrZVByb3h5SGFuZGxlci5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9yZWFsbShzZWxmLlJFQUxNKQorICAgICAgICBzdXBlcihQcm94eUF1dGhUZXN0cywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIgPSBEaWdlc3RBdXRoSGFuZGxlcigpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfdXNlcnMoe3NlbGYuVVNFUjogc2VsZi5QQVNTV0R9KQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3JlYWxtKHNlbGYuUkVBTE0pCisgICAgICAgIGRlZiBjcmVhdGVfZmFrZV9wcm94eV9oYW5kbGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gRmFrZVByb3h5SGFuZGxlcihzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIsICphcmdzLCAqKmt3YXJncykKIAotICAgICAgICBzZWxmLnNlcnZlciA9IExvb3BiYWNrSHR0cFNlcnZlclRocmVhZChGYWtlUHJveHlIYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlciA9IExvb3BiYWNrSHR0cFNlcnZlclRocmVhZChjcmVhdGVfZmFrZV9wcm94eV9oYW5kbGVyKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LndhaXQoKQogICAgICAgICBwcm94eV91cmwgPSAiaHR0cDovLzEyNy4wLjAuMTolZCIgJSBzZWxmLnNlcnZlci5wb3J0CiAgICAgICAgIGhhbmRsZXIgPSB1cmxsaWIyLlByb3h5SGFuZGxlcih7Imh0dHAiIDogcHJveHlfdXJsfSkKLSAgICAgICAgc2VsZi5fZGlnZXN0X2F1dGhfaGFuZGxlciA9IHVybGxpYjIuUHJveHlEaWdlc3RBdXRoSGFuZGxlcigpCi0gICAgICAgIHNlbGYub3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoaGFuZGxlciwgc2VsZi5fZGlnZXN0X2F1dGhfaGFuZGxlcikKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlciA9IHVybGxpYjIuUHJveHlEaWdlc3RBdXRoSGFuZGxlcigpCisgICAgICAgIHNlbGYub3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoaGFuZGxlciwgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlcikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIHN1cGVyKFByb3h5QXV0aFRlc3RzLCBzZWxmKS50ZWFyRG93bigpCiAKICAgICBkZWYgdGVzdF9wcm94eV93aXRoX2JhZF9wYXNzd29yZF9yYWlzZXNfaHR0cGVycm9yKHNlbGYpOgotICAgICAgICBzZWxmLl9kaWdlc3RfYXV0aF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVNFUiwgc2VsZi5QQVNTV0QrImJhZCIpCi0gICAgICAgIEZha2VQcm94eUhhbmRsZXIuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuZXIub3BlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VUkwpCiAKICAgICBkZWYgdGVzdF9wcm94eV93aXRoX25vX3Bhc3N3b3JkX3JhaXNlc19odHRwZXJyb3Ioc2VsZik6Ci0gICAgICAgIEZha2VQcm94eUhhbmRsZXIuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIyLkhUVFBFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuZXIub3BlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VUkwpCiAKICAgICBkZWYgdGVzdF9wcm94eV9xb3BfYXV0aF93b3JrcyhzZWxmKToKLSAgICAgICAgc2VsZi5fZGlnZXN0X2F1dGhfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCisgICAgICAgIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVTRVIsIHNlbGYuUEFTU1dEKQotICAgICAgICBGYWtlUHJveHlIYW5kbGVyLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aCIpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKICAgICAgICAgcmVzdWx0ID0gc2VsZi5vcGVuZXIub3BlbihzZWxmLlVSTCkKICAgICAgICAgd2hpbGUgcmVzdWx0LnJlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmVzdWx0LmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3FvcF9hdXRoX2ludF93b3Jrc19vcl90aHJvd3NfdXJsZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpZ2VzdF9hdXRoX2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLAorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCkKLSAgICAgICAgRmFrZVByb3h5SGFuZGxlci5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgtaW50IikKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgtaW50IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5vcGVuZXIub3BlbihzZWxmLlVSTCkKICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3I6CkBAIC0zMjIsNyArMzM3LDcgQEAKICAgICByZXR1cm4gRmFrZUhUVFBSZXF1ZXN0SGFuZGxlcgogCiAKLWNsYXNzIFRlc3RVcmxvcGVuKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRlc3RVcmxvcGVuKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdXJsbGliMi51cmxvcGVuIHVzaW5nIHRoZSBuZXR3b3JrLgogCiAgICAgVGhlc2UgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgQXNzdW1pbmcgdGhhdCB0ZXN0aW5nIHVzaW5nIGZpbGVzIGRvZXMgYQpAQCAtMzU2LDggKzM3MSw4IEBACiAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGhhbmRsZXIucmVxdWVzdHMsIFsnLycsICcvc29tZXdoZXJlX2Vsc2UnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnLycsICcvc29tZXdoZXJlX2Vsc2UnXSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQogCkBAIC0zNzcsOCArMzkyLDggQEAKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFuZGxlci5yZXF1ZXN0cywgWycvd2VlYmxlJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnJlcXVlc3RzLCBbJy93ZWVibGUnXSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQogCkBAIC0zOTIsOCArNDA3LDggQEAKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaGFuZGxlci5yZXF1ZXN0cywgWycvYml6YXJyZSddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvYml6YXJyZSddKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCiAKQEAgLTQwNiw4ICs0MjEsOCBAQAogICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhoYW5kbGVyLnJlcXVlc3RzLCBbJy9iaXphcnJlJywgJ2dldD13aXRoX2ZlZWxpbmcnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnL2JpemFycmUnLCAnZ2V0PXdpdGhfZmVlbGluZyddKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCiAKQEAgLTQyOSwxMCArNDQ0LDEwIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKICAgICAgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJjbG9zZSIsICJpbmZvIiwgImdldHVybCIpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvcGVuX3VybCwgYXR0ciksICJvYmplY3QgcmV0dXJuZWQgZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxvcGVuIGxhY2tzIHRoZSAlcyBhdHRyaWJ1dGUiICUgYXR0cikKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8ob3Blbl91cmwucmVhZCgpLCAiY2FsbGluZyAncmVhZCcgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Blbl91cmwucmVhZCgpLCAiY2FsbGluZyAncmVhZCcgZmFpbGVkIikKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDQ0LDkgKzQ1OSw5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKICAgICAgICAgICAgIGluZm9fb2JqID0gb3Blbl91cmwuaW5mbygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShpbmZvX29iaiwgbWltZXRvb2xzLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm1pbWV0b29scy5NZXNzYWdlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvX29iaiwgbWltZXRvb2xzLk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2Ugb2YgbWltZXRvb2xzLk1lc3NhZ2UiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvX29iai5nZXRzdWJ0eXBlKCksICJwbGFpbiIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKQEAgLTQ4Niw2ICs1MDEsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJpemUgdGhlIGZyYW1ld29yayB3aXRoIGEgbW9jayByZXNvbHZlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuLCAiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC4vIikKIAorICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSAicHljb24gMjAwOC4uLiIKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoMjAwLCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB6dGVzdF9saW5lX2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgbGluZXMgPSBbIldlXG4iLCAiZ290XG4iLCAiaGVyZVxuIiwgInZlcnlsb25nICIgKiA4MTkyICsgIlxuIl0KKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSAiIi5qb2luKGxpbmVzKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gdXJsbGliMi51cmxvcGVuKCJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoZGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBsaW5lc1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmV0Y2hlZCBsaW5lIG51bWJlciAlcyBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBFeHBlY3RlZCBsZW5ndGggd2FzICVzLCBnb3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCwgbGVuKGxpbmVzW2luZGV4XSksIGxlbihsaW5lKSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleCArIDEsIGxlbihsaW5lcykpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFdlIHdpbGwgTk9UIGRlcGVuZCBvbiB0aGUgbmV0d29yayByZXNvdXJjZSBmbGFnCkBAIC00OTQsOCArNTMzLDcgQEAKICAgICAjIHRoZSBuZXh0IGxpbmUuCiAgICAgI3Rlc3Rfc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFByb3h5QXV0aFRlc3RzKQotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFVybG9wZW4pCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQcm94eUF1dGhUZXN0cywgVGVzdFVybG9wZW4pCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCAxNjJiODE2Li4xYTc0NzdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC02LDcgKzYsNiBAQAogCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgdXJsbGliMgotaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKQEAgLTc1LDcgKzc0LDcgQEAKIGNsYXNzIENsb3NlU29ja2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKLSAgICAgICAgaW1wb3J0IHNvY2tldCwgaHR0cGxpYiwgZ2MKKyAgICAgICAgaW1wb3J0IGh0dHBsaWIKIAogICAgICAgICAjIGNhbGxpbmcgLmNsb3NlKCkgb24gdXJsbGliMidzIHJlc3BvbnNlIG9iamVjdHMgc2hvdWxkIGNsb3NlIHRoZQogICAgICAgICAjIHVuZGVybHlpbmcgc29ja2V0CkBAIC04MywxNSArODIsMTUgQEAKICAgICAgICAgIyBkZWx2ZSBkZWVwIGludG8gcmVzcG9uc2UgdG8gZmV0Y2ggc29ja2V0Ll9zb2NrZXRvYmplY3QKICAgICAgICAgcmVzcG9uc2UgPSBfdXJsb3Blbl93aXRoX3JldHJ5KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKICAgICAgICAgYWJ1c2VkX2ZpbGVvYmplY3QgPSByZXNwb25zZS5mcAotICAgICAgICBzZWxmLmFzc2VydF8oYWJ1c2VkX2ZpbGVvYmplY3QuX19jbGFzc19fIGlzIHNvY2tldC5fZmlsZW9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFidXNlZF9maWxlb2JqZWN0Ll9fY2xhc3NfXyBpcyBzb2NrZXQuX2ZpbGVvYmplY3QpCiAgICAgICAgIGh0dHByZXNwb25zZSA9IGFidXNlZF9maWxlb2JqZWN0Ll9zb2NrCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhodHRwcmVzcG9uc2UuX19jbGFzc19fIGlzIGh0dHBsaWIuSFRUUFJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaHR0cHJlc3BvbnNlLl9fY2xhc3NfXyBpcyBodHRwbGliLkhUVFBSZXNwb25zZSkKICAgICAgICAgZmlsZW9iamVjdCA9IGh0dHByZXNwb25zZS5mcAotICAgICAgICBzZWxmLmFzc2VydF8oZmlsZW9iamVjdC5fX2NsYXNzX18gaXMgc29ja2V0Ll9maWxlb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW9iamVjdC5fX2NsYXNzX18gaXMgc29ja2V0Ll9maWxlb2JqZWN0KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgZmlsZW9iamVjdC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmlsZW9iamVjdC5jbG9zZWQpCiAgICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGZpbGVvYmplY3QuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW9iamVjdC5jbG9zZWQpCiAKIGNsYXNzIE90aGVyTmV0d29ya1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNTUsOCArMTU0LDM5IEBACiAKICMjICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdXJscyh1cmxzLCBzZWxmLl9leHRyYV9oYW5kbGVycygpK1tiYXV0aCwgZGF1dGhdKQogCisgICAgZGVmIHRlc3RfdXJsd2l0aGZyYWcoc2VsZik6CisgICAgICAgIHVybHdpdGhfZnJhZyA9ICJodHRwOi8vZG9jcy5weXRob24ub3JnL2dsb3NzYXJ5Lmh0bWwjZ2xvc3NhcnkiCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmx3aXRoX2ZyYWcpOgorICAgICAgICAgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KHVybHdpdGhfZnJhZykKKyAgICAgICAgICAgIHJlcyA9IHVybGxpYjIudXJsb3BlbihyZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKKyAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZ2xvc3NhcnkuaHRtbCIpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHJlcSA9IHVybGxpYjIuUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnIikKKyAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoKQorICAgICAgICByZXMgPSBvcGVuZXIub3BlbihyZXEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcy5maWxlbm8oKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkhUVFBSZXNwb25zZSBvYmplY3Qgc2hvdWxkIHJldHVybiBhIHZhbGlkIGZpbGVubyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZXMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXF1ZXN0LmhlYWRlcl9pdGVtcygpKQorICAgICAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXF1ZXN0LmhlYWRlcl9pdGVtcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcXVlc3QuaGFzX2hlYWRlcignVXNlci1hZ2VudCcpKQorICAgICAgICAgICAgcmVxdWVzdC5hZGRfaGVhZGVyKCdVc2VyLUFnZW50JywnVGVzdC1BZ2VudCcpCisgICAgICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0LmdldF9oZWFkZXIoJ1VzZXItYWdlbnQnKSwnVGVzdC1BZ2VudCcpCisKICAgICBkZWYgX3Rlc3RfdXJscyhzZWxmLCB1cmxzLCBoYW5kbGVycywgcmV0cnk9VHJ1ZSk6Ci0gICAgICAgIGltcG9ydCBzb2NrZXQKICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgaW1wb3J0IGxvZ2dpbmcKICAgICAgICAgZGVidWcgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdF91cmxsaWIyIikuZGVidWcKQEAgLTE3MCwyOSArMjAwLDMwIEBACiAgICAgICAgICAgICAgICAgdXJsLCByZXEsIGV4cGVjdGVkX2VyciA9IHVybAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXEgPSBleHBlY3RlZF9lcnIgPSBOb25lCi0gICAgICAgICAgICBkZWJ1Zyh1cmwpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciwgZXJyOgotICAgICAgICAgICAgICAgIGRlYnVnKGVycikKLSAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9lcnIsIHVybCwgcmVxLCB0eXBlKGVyciksIGVycikpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyKSwgbXNnKQotICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIjx0aW1lb3V0OiAlcz4iICUgdXJsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgICAgICBkZWJ1Zyh1cmwpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIjx0aW1lb3V0OiAlcz4iICUgdXJsCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxvcGVuKHVybCwgcmVxLCBUSU1FT1VUKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoZXJyKQorICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgZXJyb3IocykgJXMgZm9yICVzICVzLCBnb3QgJXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX2VyciwgdXJsLCByZXEsIHR5cGUoZXJyKSwgZXJyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlcnIsIGV4cGVjdGVkX2VyciwgbXNnKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlcnJbMF0sIHNvY2tldC50aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIjx0aW1lb3V0OiAlcz4iICUgdXJsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJyZWFkICVkIGJ5dGVzIiAlIGxlbihidWYpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICI8dGltZW91dDogJXM+IiAlIHVybAorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIGRlYnVnKCIqKioqKioqKiBuZXh0IHVybCBjb21pbmcgdXAuLi4iKQogICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAKQEAgLTIwOSw1OSArMjQwLDcxIEBACiBjbGFzcyBUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaHR0cF9iYXNpYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfaHR0cF9kZWZhdWx0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQotICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeSh1cmwpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKICAgICBkZWYgdGVzdF9odHRwX25vX3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQotICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KCJodHRwOi8vd3d3LnB5dGhvbi5vcmciLCB0aW1lb3V0PU5vbmUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQogCiAgICAgZGVmIHRlc3RfaHR0cF90aW1lb3V0KHNlbGYpOgotICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeSgiaHR0cDovL3d3dy5weXRob24ub3JnIiwgdGltZW91dD0xMjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5fc29jay5mcC5fc29jay5nZXR0aW1lb3V0KCksIDEyMCkKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeSh1cmwsIHRpbWVvdXQ9MTIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgMTIwKQogCi0gICAgRlRQX0hPU1QgPSAiZnRwOi8vZnRwLm1pcnJvci5ubC9wdWIvbWlycm9yL2dudS8iCisgICAgRlRQX0hPU1QgPSAiZnRwOi8vZnRwLm1pcnJvci5ubC9wdWIvZ251LyIKIAogICAgIGRlZiB0ZXN0X2Z0cF9iYXNpYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCi0gICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5GVFBfSE9TVCwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2Z0cF9kZWZhdWx0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQotICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLkZUUF9IT1NUKToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NUKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQogCiAgICAgZGVmIHRlc3RfZnRwX25vX3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQotICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QsIHRpbWVvdXQ9Tm9uZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QsIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2Z0cF90aW1lb3V0KHNlbGYpOgotICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NULCB0aW1lb3V0PTYwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCwgdGltZW91dD02MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKaW5kZXggMWU5Y2YwZC4uOGNiYTJkYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKQEAgLTcsOSArNywxMCBAQAogaW1wb3J0IHVybGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1taW1ldG9vbHMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgibWltZXRvb2xzIiwgZGVwcmVjYXRlZD1UcnVlKQogaW1wb3J0IHRpbWUKIAorbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoIm1pbWV0b29scyIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKwogCiBkZWYgX29wZW5fd2l0aF9yZXRyeShmdW5jLCBob3N0LCAqYXJncywgKiprd2FyZ3MpOgogICAgICMgQ29ubmVjdGluZyB0byByZW1vdGUgaG9zdHMgaXMgZmxha3kuICBNYWtlIGl0IG1vcmUgcm9idXN0CkBAIC02MSwxMCArNjIsMTAgQEAKICAgICAgICAgb3Blbl91cmwgPSBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQogICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsICJjbG9zZSIsCiAgICAgICAgICAgICAgICAgICAgICAiaW5mbyIsICJnZXR1cmwiKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJsb3BlbiBsYWNrcyB0aGUgJXMgYXR0cmlidXRlIiAlIGF0dHIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvcGVuX3VybC5yZWFkKCksICJjYWxsaW5nICdyZWFkJyBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZW5fdXJsLnJlYWQoKSwgImNhbGxpbmcgJ3JlYWQnIGZhaWxlZCIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCiAKQEAgLTcyLDEwICs3MywxMCBAQAogICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgogICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lKCksIGJhc2VzdHJpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZSBkaWQgbm90IHJldHVybiBhIHN0cmluZyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZXMoKSwgbGlzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lcyBkaWQgbm90IHJldHVybiBhIGxpc3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lKCksIGJhc2VzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lIGRpZCBub3QgcmV0dXJuIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZXMoKSwgbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzIGRpZCBub3QgcmV0dXJuIGEgbGlzdCIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCiAKQEAgLTg2LDkgKzg3LDkgQEAKICAgICAgICAgICAgIGluZm9fb2JqID0gb3Blbl91cmwuaW5mbygpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcGVuX3VybC5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShpbmZvX29iaiwgbWltZXRvb2xzLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm1pbWV0b29scy5NZXNzYWdlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvX29iaiwgbWltZXRvb2xzLk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2Ugb2YgbWltZXRvb2xzLk1lc3NhZ2UiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvX29iai5nZXRzdWJ0eXBlKCksICJodG1sIikKIAogICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKQEAgLTEyMiw3ICsxMjMsNyBAQAogICAgICAgICBmZCA9IG9wZW5fdXJsLmZpbGVubygpCiAgICAgICAgIEZJTEUgPSBvcy5mZG9wZW4oZmQpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhGSUxFLnJlYWQoKSwgInJlYWRpbmcgZnJvbSBmaWxlIGNyZWF0ZWQgdXNpbmcgZmQgIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIGZpbGUgY3JlYXRlZCB1c2luZyBmZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBmaWxlbm8gZmFpbGVkIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIEZJTEUuY2xvc2UoKQpAQCAtMTQ5LDExICsxNTAsMTEgQEAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgIyBUZXN0IGJhc2ljIGZ1bmN0aW9uYWxpdHkuCiAgICAgICAgIGZpbGVfbG9jYXRpb24saW5mbyA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbiksICJmaWxlIGxvY2F0aW9uIHJldHVybmVkIGJ5IgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbiksICJmaWxlIGxvY2F0aW9uIHJldHVybmVkIGJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgIiB1cmxyZXRyaWV2ZSBpcyBub3QgYSB2YWxpZCBwYXRoIikKICAgICAgICAgRklMRSA9IGZpbGUoZmlsZV9sb2NhdGlvbikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIHRoZSBmaWxlIGxvY2F0aW9uIHJldHVybmVkIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIHRoZSBmaWxlIGxvY2F0aW9uIHJldHVybmVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICIgYnkgdXJscmV0cmlldmUgZmFpbGVkIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIEZJTEUuY2xvc2UoKQpAQCAtMTY0LDEwICsxNjUsMTAgQEAKICAgICAgICAgZmlsZV9sb2NhdGlvbixpbmZvID0gc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xvY2F0aW9uLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydF8ob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlX2xvY2F0aW9uKSkKICAgICAgICAgRklMRSA9IGZpbGUoZmlsZV9sb2NhdGlvbikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKEZJTEUucmVhZCgpLCAicmVhZGluZyBmcm9tIHRlbXBvcmFyeSBmaWxlIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIEZJTEUuY2xvc2UoKQogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbG9jYXRpb24pCkBAIC0xNzYsOCArMTc3LDggQEAKICAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCiAgICAgICAgIGZpbGVfbG9jYXRpb24sIGhlYWRlciA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQogICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoaGVhZGVyLCBtaW1ldG9vbHMuTWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoZWFkZXIsIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgbWltZXRvb2xzLk1lc3NhZ2UiKQogCiAgICAgZGVmIHRlc3RfZGF0YV9oZWFkZXIoc2VsZik6CiAgICAgICAgIGxvZ28gPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9sb2dvcy9weXRob24tbG9nby1tYXN0ZXItdjMtVE0ucG5nIgpAQCAtMTkxLDkgKzE5MiwxMCBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCdEYXRlIHZhbHVlIG5vdCBpbiAlciBmb3JtYXQnLCBkYXRlZm9ybWF0KQogCiAKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKICAgICAgICAgICAgICgidXJsbGliLnVybG9wZW4uLiBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVVJMVGltZW91dFRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsb3Blbk5ldHdvcmtUZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CmluZGV4IGM0MzdlZTAuLmM1NzY0YzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtOTcsNiArOTcsOSBAQAogICAgICAgICAgICAgICAnJywgJycsICcnKSwKICAgICAgICAgICAgICAoJ21tcycsICd3bXMuc3lzLmhpbmV0Lm5ldCcsICcvY3RzL0RyYW1hLzA5MDA2MjUxMTAwLmFzZicsCiAgICAgICAgICAgICAgICcnLCAnJykpLAorICAgICAgICAgICAgKCduZnM6Ly9zZXJ2ZXIvcGF0aC90by9maWxlLnR4dCcsCisgICAgICAgICAgICAgKCduZnMnLCAnc2VydmVyJywgJy9wYXRoL3RvL2ZpbGUudHh0JywgICcnLCAnJywgJycpLAorICAgICAgICAgICAgICgnbmZzJywgJ3NlcnZlcicsICcvcGF0aC90by9maWxlLnR4dCcsICcnLCAnJykpLAogICAgICAgICAgICAgKCdzdm4rc3NoOi8vc3ZuLnpvcGUub3JnL3JlcG9zL21haW4vWkNvbmZpZy90cnVuay8nLAogICAgICAgICAgICAgICgnc3ZuK3NzaCcsICdzdm4uem9wZS5vcmcnLCAnL3JlcG9zL21haW4vWkNvbmZpZy90cnVuay8nLAogICAgICAgICAgICAgICAnJywgJycsICcnKSwKQEAgLTI5MCw3ICsyOTMsMTAgQEAKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZyNzLy4veCcsJ2h0dHA6Ly9hL2IvYy9nI3MvLi94JykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZyNzLy4uL3gnLCdodHRwOi8vYS9iL2MvZyNzLy4uL3gnKQogICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnaHR0cDpnJywnaHR0cDpnJykgIyBzdHJpY3QgcGFyc2VyCi0gICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2h0dHA6ZycsJ2h0dHA6Ly9hL2IvYy9nJykgI3JlbGF4ZWQgcGFyc2VyCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2h0dHA6ZycsJ2h0dHA6Ly9hL2IvYy9nJykgIyByZWxheGVkIHBhcnNlcgorCisgICAgICAgICMgVGVzdCBmb3IgaXNzdWU5NzIxCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdodHRwOi8vYS9iL2MvZGUnLCAnO3gnLCdodHRwOi8vYS9iL2MvO3gnKQogCiAgICAgZGVmIHRlc3RfdXJsam9pbnMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZzpoJywnZzpoJykKQEAgLTMyMyw2ICszMjksNDAgQEAKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmc/eScsJ2h0dHA6Ly9hL2IvYy9nP3knKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6Zz95Ly4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKIAorICAgIGRlZiB0ZXN0X1JGQzI3MzIoc2VsZik6CisgICAgICAgIGZvciB1cmwsIGhvc3RuYW1lLCBwb3J0IGluIFsKKyAgICAgICAgICAgICgnaHR0cDovL1Rlc3QucHl0aG9uLm9yZzo1NDMyL2Zvby8nLCAndGVzdC5weXRob24ub3JnJywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly8xMi4zNC41Ni43ODo1NDMyL2Zvby8nLCAnMTIuMzQuNTYuNzgnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdOjU0MzIvZm9vLycsICc6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6OjFdOjU0MzIvZm9vLycsICdkZWFkOmJlZWY6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Ol06NTQzMi9mb28vJywgJ2RlYWQ6YmVlZjo6JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXTo1NDMyL2Zvby8nLAorICAgICAgICAgICAgICdkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OGZhMzpkZWFmOmZlZWQnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjEyLjM0LjU2Ljc4XTo1NDMyL2Zvby8nLCAnOjoxMi4zNC41Ni43OCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6ZmZmZjoxMi4zNC41Ni43OF06NTQzMi9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9UZXN0LnB5dGhvbi5vcmcvZm9vLycsICd0ZXN0LnB5dGhvbi5vcmcnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovLzEyLjM0LjU2Ljc4L2Zvby8nLCAnMTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdL2Zvby8nLCAnOjoxJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOjoxXS9mb28vJywgJ2RlYWQ6YmVlZjo6MScsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6XS9mb28vJywgJ2RlYWQ6YmVlZjo6JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJywKKyAgICAgICAgICAgICAnZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhmYTM6ZGVhZjpmZWVkJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjoxMi4zNC41Ni43OF0vZm9vLycsICc6OjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4XS9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgdXJscGFyc2VkID0gdXJscGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodXJscGFyc2VkLmhvc3RuYW1lLCB1cmxwYXJzZWQucG9ydCkgLCAoaG9zdG5hbWUsIHBvcnQpKQorCisgICAgICAgIGZvciBpbnZhbGlkX3VybCBpbiBbCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly86OjEyLjM0LjU2Ljc4XS8nLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6MS9mb28vJywKKyAgICAgICAgICAgICAgICAnZnRwOi8vWzo6MS9mb28vYmFkXS9iYWQnLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6MS9mb28vYmFkXS9iYWQnLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6ZmZmZjoxMi4zNC41Ni43OCddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXJscGFyc2UudXJscGFyc2UsIGludmFsaWRfdXJsKQorCiAgICAgZGVmIHRlc3RfdXJsZGVmcmFnKHNlbGYpOgogICAgICAgICBmb3IgdXJsLCBkZWZyYWcsIGZyYWcgaW4gWwogICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZyNmcmFnJywgJ2h0dHA6Ly9weXRob24ub3JnJywgJ2ZyYWcnKSwKQEAgLTQ0MSw2ICs0ODEsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgieC1uZXdzY2hlbWU6Ly9mb28uY29tL3N0dWZmIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCd4LW5ld3NjaGVtZScsJ2Zvby5jb20nLCcvc3R1ZmYnLCcnLCcnLCcnKSkKIAorICAgIGRlZiB0ZXN0X3dpdGhvdXRzY2hlbWUoc2VsZik6CisgICAgICAgICMgVGVzdCB1cmxwYXJzZSB3aXRob3V0IHNjaGVtZQorICAgICAgICAjIElzc3VlIDc1NDAxNjogdXJscGFyc2UgZ29lcyB3cm9uZyB3aXRoIElQOnBvcnQgd2l0aG91dCBzY2hlbWUKKyAgICAgICAgIyBSRkMgMTgwOCBzcGVjaWZpZXMgdGhhdCBuZXRsb2Mgc2hvdWxkIHN0YXJ0IHdpdGggLy8sIHVybHBhcnNlIGV4cGVjdHMKKyAgICAgICAgIyB0aGUgc2FtZSwgb3RoZXJ3aXNlIGl0IGNsYXNzaWZpZXMgdGhlIHBvcnRpb24gb2YgdXJsIGFzIHBhdGguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoInBhdGgiKSwKKyAgICAgICAgICAgICAgICAoJycsJycsJ3BhdGgnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiLy93d3cucHl0aG9uLm9yZzo4MCIpLAorICAgICAgICAgICAgICAgICgnJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cDovL3d3dy5weXRob24ub3JnOjgwIiksCisgICAgICAgICAgICAgICAgKCdodHRwJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKKworICAgIGRlZiB0ZXN0X3BvcnRzZXBhcmF0b3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgNzU0MDE2IG1ha2VzIGNoYW5nZXMgZm9yIHBvcnQgc2VwYXJhdG9yICc6JyBmcm9tIHNjaGVtZSBzZXBhcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgicGF0aDo4MCIpLAorICAgICAgICAgICAgICAgICgnJywnJywncGF0aDo4MCcsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwOiIpLCgnaHR0cCcsJycsJycsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwczoiKSwoJ2h0dHBzJywnJywnJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly93d3cucHl0aG9uLm9yZzo4MCIpLAorICAgICAgICAgICAgICAgICgnaHR0cCcsJ3d3dy5weXRob24ub3JnOjgwJywnJywnJywnJywnJykpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggZGY5NTg4Yy4uZDVjZWNkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC0zOCw5ICszOCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoKS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIGQ0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVzZXJEaWN0LlVzZXJEaWN0LmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpLCAxKSwgZDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoKS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSwgMSksIGQ1KQotICAgICAgICBzZWxmLmFzc2VydF8odTEuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpIGlzIG5vdCB1MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UodTEuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBVc2VyRGljdC5Vc2VyRGljdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHUyLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1MS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSkgaXMgbm90IHUxKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodTEuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpLCBVc2VyRGljdC5Vc2VyRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHUyLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdCkKIAogICAgICAgICAjIFRlc3QgX19yZXByX18KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodTApLCBzdHIoZDApKQpAQCAtOTUsMTAgKzk1LDEwIEBACiAKICAgICAgICAgIyBUZXN0IGhhc19rZXkgYW5kICJpbiIuCiAgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpIGluIHUyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCB1MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MSwgaSBpbiBkMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MCwgaSBpbiBkMCkKLSAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0Ll9jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUyLmhhc19rZXkoaSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MS5oYXNfa2V5KGkpLCBkMS5oYXNfa2V5KGkpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTAuaGFzX2tleShpKSwgZDAuaGFzX2tleShpKSkKQEAgLTEzMiw3ICsxMzIsNyBAQAogICAgICAgICAjIFRlc3Qgc2V0ZGVmYXVsdAogICAgICAgICB0ID0gVXNlckRpY3QuVXNlckRpY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2V0ZGVmYXVsdCgieCIsIDQyKSwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0Lmhhc19rZXkoIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaGFzX2tleSgieCIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2V0ZGVmYXVsdCgieCIsIDIzKSwgNDIpCiAKICAgICAgICAgIyBUZXN0IHBvcApAQCAtMTYyLDggKzE2Miw4IEBACiAgICAgICAgIGQgPSBEKHsxOiAyLCAzOiA0fSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbM10sIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygyIG5vdCBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydF8oMiBub3QgaW4gZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBkLmtleXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzJdLCA0MikKICAgICAgICAgY2xhc3MgRShVc2VyRGljdC5Vc2VyRGljdCk6CiAgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKQEAgLTI3MCwxMiArMjcwLDEyIEBACiAKICAgICAgICAgIyMgTm93LCB0ZXN0IHRoZSBEaWN0TWl4aW4gbWV0aG9kcyBvbmUgYnkgb25lCiAgICAgICAgICMgaGFzX2tleQotICAgICAgICBzZWxmLmFzc2VydF8ocy5oYXNfa2V5KDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCBzLmhhc19rZXkoMjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5oYXNfa2V5KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzLmhhc19rZXkoMjApKQogCiAgICAgICAgICMgX19jb250YWluc19fCi0gICAgICAgIHNlbGYuYXNzZXJ0XygxMCBpbiBzKQotICAgICAgICBzZWxmLmFzc2VydF8oMjAgbm90IGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMTAsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMjAsIHMpCiAKICAgICAgICAgIyBfX2l0ZXJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtrIGZvciBrIGluIHNdLCBbMTAsIDMwXSkKQEAgLTMxMCw3ICszMTAsNyBAQAogCiAgICAgICAgICMgcG9wCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5wb3AoMTApLCAndGVuJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKDEwIG5vdCBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBzKQogICAgICAgICBzWzEwXSA9ICd0ZW4nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5wb3AoIngiLCAxKSwgMSkKICAgICAgICAgc1sieCJdID0gNDIKQEAgLTMxOCw3ICszMTgsNyBAQAogCiAgICAgICAgICMgcG9waXRlbQogICAgICAgICBrLCB2ID0gcy5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGsgbm90IGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgcykKICAgICAgICAgc1trXSA9IHYKIAogICAgICAgICAjIGNsZWFyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5IGIvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weQppbmRleCBmZmU0YWExNy4uM2I2MDFiYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlcihUKCgxLDIpKSkubmV4dCgpLCAiMCEhISIpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAogICAgICAgICAgICAgKCIuK19fKGdldHxzZXR8ZGVsKXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFVzZXJMaXN0VGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CmluZGV4IGVlN2ExZjQuLjI2MjU5ODUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKQEAgLTEwNCwxNyArMTA0LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIGRhdGEucmV2ZXJzZSgpCiAgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKICAgICAgICAgICAgICAgICAgICAgc1tzdGFydDpzdG9wOnN0ZXBdID0gIiIuam9pbihkYXRhKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzLCAiIi5qb2luKEwpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIiLmpvaW4oTCkpCiAKICAgICAgICAgICAgICAgICAgICAgZGVsIExbc3RhcnQ6c3RvcDpzdGVwXQogICAgICAgICAgICAgICAgICAgICBkZWwgc1tzdGFydDpzdG9wOnN0ZXBdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMsICIiLmpvaW4oTCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIuam9pbihMKSkKIAogICAgIGRlZiB0ZXN0X2ltbXV0YWJsZShzZWxmKToKICAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb29iYXIiKQogICAgICAgICBzMiA9IHMuaW1tdXRhYmxlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzMikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoczIsIFVzZXJTdHJpbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoczIsIFVzZXJTdHJpbmcpCiAKICAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgogICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvbyIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3V1LnB5IGIvTGliL3Rlc3QvdGVzdF91dS5weQppbmRleCAyNWQ5YjYwLi45NWM5NTUyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3V1LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXUucHkKQEAgLTE2MSw2ICsxNjEsMjMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuX2tpbGwoZikKIAorICAgIGRlZiB0ZXN0X2RlY29kZV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLnRtcGluKQorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBpbiwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZShlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgc2VsZi50bXBvdXQpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHV1LmRlY29kZShzZWxmLnRtcGluKQorCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcG91dCwgJ3InKQorICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcGxhaW50ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbChmKQorCiAgICAgZGVmIHRlc3RfZGVjb2RldHdpY2Uoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgZGVjb2RlKCkgd2lsbCByZWZ1c2UgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUKICAgICAgICAgZiA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CmluZGV4IDlkZTY0YjIuLjE1MDc4M2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YWl0My5weQpAQCAtMywxOCArMywxOSBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZCwgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4KIAogdHJ5OgogICAgIG9zLmZvcmsKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSBUZXN0U2tpcHBlZCwgIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIKIAogdHJ5OgogICAgIG9zLndhaXQzCiBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0NC5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDQucHkKaW5kZXggOWY3ZmMxNC4uZDA0YTExYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQ0LnB5CkBAIC00LDE3ICs0LDEyIEBACiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBnZXRfYXR0cmlidXRlCiAKLXRyeToKLSAgICBvcy5mb3JrCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDQiCisjIElmIGVpdGhlciBvZiB0aGVzZSBkbyBub3QgZXhpc3QsIHNraXAgdGhpcyB0ZXN0LgorZ2V0X2F0dHJpYnV0ZShvcywgJ2ZvcmsnKQorZ2V0X2F0dHJpYnV0ZShvcywgJ3dhaXQ0JykKIAotdHJ5OgotICAgIG9zLndhaXQ0Ci1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQsICJvcy53YWl0NCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQ0IgogCiBjbGFzcyBXYWl0NFRlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQppbmRleCBmNTU1MDJhLi4xYzJjMGMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKQEAgLTQsMjQgKzQsMTYgQEAKIGltcG9ydCBTdHJpbmdJTwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcwogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKIGltcG9ydCB3YXJuaW5nX3Rlc3RzCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBvcmlnaW5hbF93YXJuaW5ncwogCi1zeXMubW9kdWxlc1snX3dhcm5pbmdzJ10gPSAwCi1kZWwgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10KLQotaW1wb3J0IHdhcm5pbmdzIGFzIHB5X3dhcm5pbmdzCi0KLWRlbCBzeXMubW9kdWxlc1snX3dhcm5pbmdzJ10KLWRlbCBzeXMubW9kdWxlc1snd2FybmluZ3MnXQotCi1pbXBvcnQgd2FybmluZ3MgYXMgY193YXJuaW5ncwotCi1zeXMubW9kdWxlc1snd2FybmluZ3MnXSA9IG9yaWdpbmFsX3dhcm5pbmdzCi0KK3B5X3dhcm5pbmdzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3dhcm5pbmdzJywgYmxvY2tlZD1bJ193YXJuaW5ncyddKQorY193YXJuaW5ncyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd3YXJuaW5ncycsIGZyZXNoPVsnX3dhcm5pbmdzJ10pCiAKIEBjb250ZXh0bWFuYWdlcgogZGVmIHdhcm5pbmdzX3N0YXRlKG1vZHVsZSk6CkBAIC04OCw3ICs4MCw3IEBACiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oIkZpbHRlclRlc3RzLnRlc3RfaWdub3JlIiwgVXNlcldhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKIAogICAgIGRlZiB0ZXN0X2Fsd2F5cyhzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKQEAgLTk3LDkgKzg5LDkgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKICAgICAgICAgICAgIG1lc3NhZ2UgPSAiRmlsdGVyVGVzdHMudGVzdF9hbHdheXMiCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG1lc3NhZ2UsIHdbLTFdLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZSwgd1stMV0ubWVzc2FnZSkKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKQEAgLTExMCwxMCArMTAyLDEwIEBACiAgICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMik6CiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKICAgICAgICAgICAgICAgICBpZiB4ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKICAgICAgICAgICAgICAgICAgICAgZGVsIHdbOl0KICAgICAgICAgICAgICAgICBlbGlmIHggPT0gMToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsb29wIHZhcmlhbnQgdW5oYW5kbGVkIikKIApAQCAtMTI0LDEwICsxMTYsMTAgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJtb2R1bGUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKICAgICAgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiRmlsdGVyVGVzdHMudGVzdF9tb2R1bGUiKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogCiAgICAgZGVmIHRlc3Rfb25jZShzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKQEAgLTEzNywxNCArMTI5LDE0IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gVXNlcldhcm5pbmcoIkZpbHRlclRlc3RzLnRlc3Rfb25jZSIpCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAidGVzdF93YXJuaW5ncy5weSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgInRlc3Rfd2FybmluZ3MucHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4odyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJ0ZXN0X3dhcm5pbmdzMi5weSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogCiAgICAgZGVmIHRlc3RfaW5oZXJpdGFuY2Uoc2VsZik6CiAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgpAQCAtMTY1LDcgKzE1Nyw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybigiRmlsdGVyVGVzdHMudGVzdF9vcmRlcmluZyIsIFVzZXJXYXJuaW5nKQogICAgICAgICAgICAgZXhjZXB0IFVzZXJXYXJuaW5nOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib3JkZXIgaGFuZGxpbmcgZm9yIGFjdGlvbnMgZmFpbGVkIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogCiAgICAgZGVmIHRlc3RfZmlsdGVyd2FybmluZ3Moc2VsZik6CiAgICAgICAgICMgVGVzdCBmaWx0ZXJ3YXJuaW5ncygpLgpAQCAtMTc5LDcgKzE3MSw3IEBACiAgICAgICAgICAgICB0ZXh0ID0gJ2hhbmRsZSBub3JtYWxseScKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQogCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsIFdhcm5pbmcsICIiLCAwKQogICAgICAgICAgICAgdGV4dCA9ICdmaWx0ZXJlZCBvdXQnCkBAIC0xOTIsNyArMTg0LDcgQEAKICAgICAgICAgICAgIHRleHQgPSAnbm9ubWF0Y2hpbmcgdGV4dCcKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQogCiBjbGFzcyBDRmlsdGVyVGVzdHMoQmFzZVRlc3QsIEZpbHRlclRlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCkBAIC0yMTMsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAgICB0ZXh0ID0gJ211bHRpICVkJyAlaSAgIyBEaWZmZXJlbnQgdGV4dCBvbiBlYWNoIGNhbGwuCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3Wy0xXS5jYXRlZ29yeSBpcyBVc2VyV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod1stMV0uY2F0ZWdvcnkgaXMgVXNlcldhcm5pbmcpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKICAgICAgICAgd2l0aCB3YXJuaW5nc19zdGF0ZShzZWxmLm1vZHVsZSk6CkBAIC0zNTIsMTUgKzM0NCwyOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiAoIkEgYmFkIGZvcm1hdHRlZCBzdHJpbmcgJShlcnIpIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICB7ImVyciIgOiAidGhlcmUgaXMgbm8gJShlcnIpcyJ9KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubW9kdWxlLndhcm4sIEJhZFN0cldhcm5pbmcoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oQmFkU3RyV2FybmluZygpKQogCiAKIGNsYXNzIENXYXJuVGVzdHMoQmFzZVRlc3QsIFdhcm5UZXN0cyk6CiAgICAgbW9kdWxlID0gY193YXJuaW5ncwogCisgICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCisgICAgIyB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3JpZ2luYWxfd2FybmluZ3MgaXMgc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLm1vZHVsZS53YXJuLCAnZnVuY19jb2RlJykpCisKIGNsYXNzIFB5V2FyblRlc3RzKEJhc2VUZXN0LCBXYXJuVGVzdHMpOgogICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCiAKKyAgICAjIEFzIGFuIGVhcmx5IGFkb3B0ZXIsIHdlIHNhbml0eSBjaGVjayB0aGUKKyAgICAjIHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlIHV0aWxpdHkgZnVuY3Rpb24KKyAgICBkZWYgdGVzdF9wdXJlX3B5dGhvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcmlnaW5hbF93YXJuaW5ncyBpcyBzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5tb2R1bGUud2FybiwgJ2Z1bmNfY29kZScpKQorCiAKIGNsYXNzIFdDbWRMaW5lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNzcsNiArMzgyLDIyIEBACiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5fc2V0b3B0aW9uKCdlcnJvcjo6V2FybmluZzo6MCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwgJ2NvbnZlcnQgdG8gZXJyb3InKQogCisgICAgZGVmIHRlc3RfaW1wcm9wZXJfb3B0aW9uKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayB0aGF0IHRoZSBtZXNzYWdlIGlzIHByaW50ZWQgb3V0IHdoZW4KKyAgICAgICAgIyB0aGUgaW50ZXJwcmV0ZXIgaXMgZXhlY3V0ZWQuIFRoaXMgYWxzbyBjaGVja3MgdGhhdCBvcHRpb25zIGFyZQorICAgICAgICAjIGFjdHVhbGx5IHBhcnNlZCBhdCBhbGwuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1XeHh4IiwgIi1jIiwgInBhc3MiKQorICAgICAgICBzZWxmLmFzc2VydEluKGIiSW52YWxpZCAtVyBvcHRpb24gaWdub3JlZDogaW52YWxpZCBhY3Rpb246ICd4eHgnIiwgZXJyKQorCisgICAgZGVmIHRlc3Rfd2FybmluZ3NfYm9vdHN0cmFwKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHdhcm5pbmdzIG1vZHVsZSBkb2VzIGdldCBsb2FkZWQgd2hlbiAtVzxzb21lIG9wdGlvbj4KKyAgICAgICAgIyBpcyB1c2VkIChzZWUgaXNzdWUgIzEwMzcyIGZvciBhbiBleGFtcGxlIG9mIHNpbGVudCBib290c3RyYXAgZmFpbHVyZSkuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1XaSIsICItYyIsCisgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10ud2FybignZm9vJywgUnVudGltZVdhcm5pbmcpIikKKyAgICAgICAgIyAnLVdpJyB3YXMgb2JzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ1J1bnRpbWVXYXJuaW5nJywgZXJyKQorCiBjbGFzcyBDV0NtZExpbmVUZXN0cyhCYXNlVGVzdCwgV0NtZExpbmVUZXN0cyk6CiAgICAgbW9kdWxlID0gY193YXJuaW5ncwogCkBAIC00MTIsMjQgKzQzMyw1OSBAQAogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJvbmNlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgImZpbGUiLCA0MikKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKICAgICAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJmaWxlIiwgNDIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogICAgICAgICAgICAgICAgICMgVGVzdCB0aGUgcmVzZXR0aW5nIG9mIG9uY2VyZWdpc3RyeS4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5vbmNlcmVnaXN0cnkgPSB7fQogICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oJ29uY2VyZWdpc3RyeSB0ZXN0JykKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh3Wy0xXS5tZXNzYWdlLmFyZ3MsIG1lc3NhZ2UuYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UuYXJncywgbWVzc2FnZS5hcmdzKQogICAgICAgICAgICAgICAgICMgUmVtb3ZhbCBvZiBvbmNlcmVnaXN0cnkgaXMgb2theS4KICAgICAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgICAgIGRlbCBzZWxmLm1vZHVsZS5vbmNlcmVnaXN0cnkKICAgICAgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiZmlsZSIsIDQyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeSA9IG9yaWdpbmFsX3JlZ2lzdHJ5CiAKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2FjdGlvbihzZWxmKToKKyAgICAgICAgIyBSZXBsYWNpbmcgb3IgcmVtb3ZpbmcgZGVmYXVsdGFjdGlvbiBzaG91bGQgYmUgb2theS4KKyAgICAgICAgbWVzc2FnZSA9IFVzZXJXYXJuaW5nKCJkZWZhdWx0YWN0aW9uIHRlc3QiKQorICAgICAgICBvcmlnaW5hbCA9IHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiPHRlc3Q+IiwgNDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDEpCisgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICAjIFRlc3QgcmVtb3ZhbC4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbgorICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQorICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiPHRlc3Q+IiwgNDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDEpCisgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICAjIFRlc3Qgc2V0dGluZy4KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5kZWZhdWx0YWN0aW9uID0gImlnbm9yZSIKKyAgICAgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgICAgICAgICByZWdpc3RyeSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgIjx0ZXN0PiIsIDQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24gPSBvcmlnaW5hbAorCiAgICAgZGVmIHRlc3Rfc2hvd3dhcm5pbmdfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc2hvd3dhcm5pbmcoKSBtaXNzaW5nIGlzIG9rYXkuCiAgICAgICAgIHRleHQgPSAnZGVsIHNob3d3YXJuaW5nIHRlc3QnCkBAIC00MzksMTcgKzQ5NSwxNyBAQAogICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRlcnInKSBhcyBzdHJlYW06CiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5nZXR2YWx1ZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyh0ZXh0IGluIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXh0LCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9zaG93d2FybmluZ19ub3RfY2FsbGFibGUoc2VsZik6Ci0gICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKLSAgICAgICAgb2xkX3Nob3d3YXJuaW5nID0gc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcKLSAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcgPSAyMwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubW9kdWxlLndhcm4sICJXYXJuaW5nISIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyA9IG9sZF9zaG93d2FybmluZwotICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIG9sZF9zaG93d2FybmluZyA9IHNlbGYubW9kdWxlLnNob3d3YXJuaW5nCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyA9IDIzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS53YXJuLCAiV2FybmluZyEiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyA9IG9sZF9zaG93d2FybmluZwogCiAgICAgZGVmIHRlc3Rfc2hvd193YXJuaW5nX291dHB1dChzZWxmKToKICAgICAgICAgIyBXaXRoIHNob3dhcm5pbmcoKSBtaXNzaW5nLCBtYWtlIHN1cmUgdGhhdCBvdXRwdXQgaXMgb2theS4KQEAgLTQ2MCwxOSArNTE2LDE5IEBACiAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoJ3N0ZGVycicpIGFzIHN0cmVhbToKICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKHRleHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyZWFtLmdldHZhbHVlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocmVzdWx0LmNvdW50KCdcbicpLCAyLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnXG4nKSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvbyBtYW55IG5ld2xpbmVzIGluICVyIiAlIHJlc3VsdCkKICAgICAgICAgZmlyc3RfbGluZSwgc2Vjb25kX2xpbmUgPSByZXN1bHQuc3BsaXQoJ1xuJywgMSkKICAgICAgICAgZXhwZWN0ZWRfZmlsZSA9IG9zLnBhdGguc3BsaXRleHQod2FybmluZ190ZXN0cy5fX2ZpbGVfXylbMF0gKyAnLnB5JwogICAgICAgICBmaXJzdF9saW5lX3BhcnRzID0gZmlyc3RfbGluZS5yc3BsaXQoJzonLCAzKQogICAgICAgICBwYXRoLCBsaW5lLCB3YXJuaW5nX2NsYXNzLCBtZXNzYWdlID0gZmlyc3RfbGluZV9wYXJ0cwogICAgICAgICBsaW5lID0gaW50KGxpbmUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGV4cGVjdGVkX2ZpbGUsIHBhdGgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHdhcm5pbmdfY2xhc3MsICcgJyArIFVzZXJXYXJuaW5nLl9fbmFtZV9fKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChtZXNzYWdlLCAnICcgKyB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2ZpbGUsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FybmluZ19jbGFzcywgJyAnICsgVXNlcldhcm5pbmcuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJyAnICsgdGV4dCkKICAgICAgICAgZXhwZWN0ZWRfbGluZSA9ICcgICcgKyBsaW5lY2FjaGUuZ2V0bGluZShwYXRoLCBsaW5lKS5zdHJpcCgpICsgJ1xuJwogICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbGluZQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChzZWNvbmRfbGluZSwgZXhwZWN0ZWRfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRfbGluZSwgZXhwZWN0ZWRfbGluZSkKIAogCiBjbGFzcyBXYXJuaW5nc0Rpc3BsYXlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00ODksMTMgKzU0NSwxMyBAQAogICAgICAgICBmb3JtYXQgPSAiJXM6JXM6ICVzOiAlc1xuICAlc1xuIgogICAgICAgICBleHBlY3QgPSBmb3JtYXQgJSAoZmlsZV9uYW1lLCBsaW5lX251bSwgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9saW5lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtKSkKICAgICAgICAgIyBUZXN0IHRoZSAnbGluZScgYXJndW1lbnQuCiAgICAgICAgIGZpbGVfbGluZSArPSAiIGZvciB0aGUgd2luISIKICAgICAgICAgZXhwZWN0ID0gZm9ybWF0ICUgKGZpbGVfbmFtZSwgbGluZV9udW0sIGNhdGVnb3J5Ll9fbmFtZV9fLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGluZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoZXhwZWN0LCBzZWxmLm1vZHVsZS5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBzZWxmLm1vZHVsZS5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSwgZmlsZV9uYW1lLCBsaW5lX251bSwgZmlsZV9saW5lKSkKIAogICAgIGRlZiB0ZXN0X3Nob3d3YXJuaW5nKHNlbGYpOgpAQCAtNTA5LDcgKzU2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtKQogICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZV9uYW1lLCBsaW5lX251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vYmplY3QpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKGZpbGVfb2JqZWN0LmdldHZhbHVlKCksIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX29iamVjdC5nZXR2YWx1ZSgpLCBleHBlY3QpCiAgICAgICAgICMgVGVzdCAnbGluZScgYXJndW1lbnQuCiAgICAgICAgIGV4cGVjdGVkX2ZpbGVfbGluZSArPSAiZm9yIHRoZSB3aW4hIgogICAgICAgICBleHBlY3QgPSBzZWxmLm1vZHVsZS5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsCkBAIC01MTcsNyArNTczLDcgQEAKICAgICAgICAgZmlsZV9vYmplY3QgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX29iamVjdCwgZXhwZWN0ZWRfZmlsZV9saW5lKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChleHBlY3QsIGZpbGVfb2JqZWN0LmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBmaWxlX29iamVjdC5nZXR2YWx1ZSgpKQogCiBjbGFzcyBDV2FybmluZ3NEaXNwbGF5VGVzdHMoQmFzZVRlc3QsIFdhcm5pbmdzRGlzcGxheVRlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCkBAIC01MzcsMjAgKzU5MywyMCBAQAogICAgICAgICAjIEVuc3VyZSBib3RoIHNob3d3YXJuaW5nIGFuZCBmaWx0ZXJzIGFyZSByZXN0b3JlZCB3aGVuIHJlY29yZGluZwogICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1UcnVlKToKICAgICAgICAgICAgIHdtb2QuZmlsdGVycyA9IHdtb2Quc2hvd3dhcm5pbmcgPSBvYmplY3QoKQotICAgICAgICBzZWxmLmFzc2VydF8od21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCiAgICAgICAgICMgU2FtZSB0ZXN0LCBidXQgd2l0aCByZWNvcmRpbmcgZGlzYWJsZWQKICAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9RmFsc2UpOgogICAgICAgICAgICAgd21vZC5maWx0ZXJzID0gd21vZC5zaG93d2FybmluZyA9IG9iamVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQotICAgICAgICBzZWxmLmFzc2VydF8od21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKIAogICAgIGRlZiB0ZXN0X2NhdGNoX3dhcm5pbmdzX3JlY29yZGluZyhzZWxmKToKICAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCiAgICAgICAgICMgRW5zdXJlIHdhcm5pbmdzIGFyZSByZWNvcmRlZCB3aGVuIHJlcXVlc3RlZAogICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LCBbXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHcpIGlzIGxpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh3KSBpcyBsaXN0KQogICAgICAgICAgICAgd21vZC5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCiAgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgImZvbyIpCkBAIC01NjMsOCArNjE5LDggQEAKICAgICAgICAgIyBFbnN1cmUgd2FybmluZ3MgYXJlIG5vdCByZWNvcmRlZCB3aGVuIG5vdCByZXF1ZXN0ZWQKICAgICAgICAgb3JpZ19zaG93d2FybmluZyA9IHdtb2Quc2hvd3dhcm5pbmcKICAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9RmFsc2UpIGFzIHc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8odyBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2Quc2hvd3dhcm5pbmcgaXMgb3JpZ19zaG93d2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3IGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQogCiAgICAgZGVmIHRlc3RfY2F0Y2hfd2FybmluZ3NfcmVlbnRyeV9ndWFyZChzZWxmKToKICAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCkBAIC01ODUsMTcgKzY0MSwxNyBAQAogICAgICAgICBvcmlnX3Nob3d3YXJuaW5nID0gd21vZC5zaG93d2FybmluZwogICAgICAgICAjIEVuc3VyZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3QgdG8gcmVjb3JkIHdhcm5pbmdzCiAgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCkgYXMgdzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3IGlzIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8od21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQotICAgICAgICBzZWxmLmFzc2VydF8od21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3IGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKICAgICAgICAgaWYgd21vZCBpcyBzeXMubW9kdWxlc1snd2FybmluZ3MnXToKICAgICAgICAgICAgICMgRW5zdXJlIHRoZSBkZWZhdWx0IG1vZHVsZSBpcyB0aGlzIG9uZQogICAgICAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKCkgYXMgdzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF8odyBpcyBOb25lKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHcgaXMgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgbm90IG9yaWdfZmlsdGVycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQogCiAgICAgZGVmIHRlc3RfY2hlY2tfd2FybmluZ3Moc2VsZik6CiAgICAgICAgICMgRXhwbGljaXQgdGVzdHMgZm9yIHRoZSB0ZXN0X3N1cHBvcnQgY29udmVuaWVuY2Ugd3JhcHBlcgpAQCAtNjIwLDIxICs2NzYsMTQgQEAKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdmb28nLCBVc2VyV2FybmluZykpOgogICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQogCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICAgICAgIyBkZWZhdWx0cyB0byBxdWlldD1GYWxzZSB3aXRoIGFyZ3VtZW50CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkRpbmQndCByYWlzZSBBc3NlcnRpb25FcnJvciIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ2ZvbycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQotICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkRpbmQndCByYWlzZSBBc3NlcnRpb25FcnJvciIpCisKIAogY2xhc3MgQ0NhdGNoV2FybmluZ1Rlc3RzKENhdGNoV2FybmluZ1Rlc3RzKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCkBAIC02NDMsMzggKzY5Miw0MiBAQAogICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCiAKIAotY2xhc3MgU2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzKEJhc2VUZXN0KToKK2NsYXNzIEVudmlyb25tZW50VmFyaWFibGVUZXN0cyhCYXNlVGVzdCk6CiAKLSAgICAiIiJUZXN0IHRoZSBkZXByZWNhdGlvbiBvZiB0aGUgb2xkIHdhcm5pbmdzLnNob3d3YXJuaW5nKCkgQVBJIHdvcmtzLiIiIgorICAgIGRlZiB0ZXN0X3NpbmdsZV93YXJuaW5nKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmciCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwgIlsnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGJhZF9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1Ob25lKToKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X2NvbW1hX3NlcGFyYXRlZF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJQWVRIT05XQVJOSU5HUyJdID0gKCJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWdub3JlOjpVbmljb2RlV2FybmluZyIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwKKyAgICAgICAgICAgICAgICAiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZycsICdpZ25vcmU6OlVuaWNvZGVXYXJuaW5nJ10iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBva19zaG93d2FybmluZygqYXJncyk6Ci0gICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF9lbnZ2YXJfYW5kX2NvbW1hbmRfbGluZShzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJQWVRIT05XQVJOSU5HUyJdID0gImlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItVyIgImlnbm9yZTo6VW5pY29kZVdhcm5pbmciLAorICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN0cihzeXMud2Fybm9wdGlvbnMpKSJdLAorICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5jb21tdW5pY2F0ZSgpWzBdLAorICAgICAgICAgICAgICAgICJbJ2lnbm9yZTo6VW5pY29kZVdhcm5pbmcnLCAnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCiAKLSAgICBkZWYgdGVzdF9kZXByZWNhdGlvbihzZWxmKToKLSAgICAgICAgIyBtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVub1ssIGZpbGVbLCBsaW5lXV0KLSAgICAgICAgYXJncyA9ICgibWVzc2FnZSIsIFVzZXJXYXJuaW5nLCAiZmlsZSBuYW1lIiwgNDIpCi0gICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gc2VsZi5iYWRfc2hvd3dhcm5pbmcKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZywgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MpCi0gICAgICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyA9IHNlbGYub2tfc2hvd3dhcm5pbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KCphcmdzKQotICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZyBhcyBleGM6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG93d2FybmluZygqYXJncykgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXByZWNhdGlvbldhcm5pbmcnKQotCi1jbGFzcyBDU2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzKFNob3d3YXJuaW5nRGVwcmVjYXRpb25UZXN0cyk6CitjbGFzcyBDRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEVudmlyb25tZW50VmFyaWFibGVUZXN0cyk6CiAgICAgbW9kdWxlID0gY193YXJuaW5ncwogCi0KLWNsYXNzIFB5U2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzKFNob3d3YXJuaW5nRGVwcmVjYXRpb25UZXN0cyk6CitjbGFzcyBQeUVudmlyb25tZW50VmFyaWFibGVUZXN0cyhFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMpOgogICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCiAKIApAQCAtNjg3LDggKzc0MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9XYXJuaW5nc1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV2FybmluZ3NEaXNwbGF5VGVzdHMsIFB5V2FybmluZ3NEaXNwbGF5VGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYXRjaFdhcm5pbmdUZXN0cywgUHlDYXRjaFdhcm5pbmdUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1Nob3d3YXJuaW5nRGVwcmVjYXRpb25UZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U2hvd3dhcm5pbmdEZXByZWNhdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVudmlyb25tZW50VmFyaWFibGVUZXN0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5IGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CmluZGV4IDliY2IwOTAuLmJjMjk4MmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKQEAgLTcwLDExICs3MCwxMSBAQAogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIGRlbCBvCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYxKCkgaXMgTm9uZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjEoKSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHJlZmVyZW5jZSB0byBiZSBpbnZhbGlkYXRlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYyKCkgaXMgTm9uZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjIoKSBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHJlZmVyZW5jZSB0byBiZSBpbnZhbGlkYXRlZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmNiY2FsbGVkID09IDIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNiY2FsbGVkID09IDIsCiAgICAgICAgICAgICAgICAgICAgICAiY2FsbGJhY2sgbm90IGNhbGxlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzIikKIAogICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGZyZWZfY2FsbGJhY2tzKHNlbGYpOgpAQCAtMTA4LDE1ICsxMDgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMod2Vha3JlZi5SZWZlcmVuY2VFcnJvciwgY2hlY2ssIHJlZjEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHdlYWtyZWYuUmVmZXJlbmNlRXJyb3IsIGNoZWNrLCByZWYyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh3ZWFrcmVmLlJlZmVyZW5jZUVycm9yLCBib29sLCB3ZWFrcmVmLnByb3h5KEMoKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmNiY2FsbGVkID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNiY2FsbGVkID09IDIpCiAKICAgICBkZWYgY2hlY2tfYmFzaWNfcmVmKHNlbGYsIGZhY3RvcnkpOgogICAgICAgICBvID0gZmFjdG9yeSgpCiAgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYoKSBpcyBub3QgTm9uZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIG5vdCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgIndlYWsgcmVmZXJlbmNlIHRvIGxpdmUgb2JqZWN0IHNob3VsZCBiZSBsaXZlIikKICAgICAgICAgbzIgPSByZWYoKQotICAgICAgICBzZWxmLmFzc2VydF8obyBpcyBvMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaXMgbzIsCiAgICAgICAgICAgICAgICAgICAgICAiPHJlZj4oKSBzaG91bGQgcmV0dXJuIG9yaWdpbmFsIG9iamVjdCBpZiBsaXZlIikKIAogICAgIGRlZiBjaGVja19iYXNpY19jYWxsYmFjayhzZWxmLCBmYWN0b3J5KToKQEAgLTEyNCw5ICsxMjQsOSBAQAogICAgICAgICBvID0gZmFjdG9yeSgpCiAgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIGRlbCBvCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhzZWxmLmNiY2FsbGVkID09IDEsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNiY2FsbGVkID09IDEsCiAgICAgICAgICAgICAgICAgICAgICAiY2FsbGJhY2sgZGlkIG5vdCBwcm9wZXJseSBzZXQgJ2NiY2FsbGVkJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYoKSBpcyBOb25lLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJyZWYyIHNob3VsZCBiZSBkZWFkIGFmdGVyIGRlbGV0aW5nIG9iamVjdCByZWZlcmVuY2UiKQogCiAgICAgZGVmIHRlc3RfcmVmX3JldXNlKHNlbGYpOgpAQCAtMTM2LDE5ICsxMzYsMTkgQEAKICAgICAgICAgIyBiZXR3ZWVuIHRoZXNlIHR3bzsgaXQgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZQogICAgICAgICBwcm94eSA9IHdlYWtyZWYucHJveHkobykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyZWYxIGlzIHJlZjIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYxIGlzIHJlZjIsCiAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIG9iamVjdCB3L291dCBjYWxsYmFjayBzaG91bGQgYmUgcmUtdXNlZCIpCiAKICAgICAgICAgbyA9IEMoKQogICAgICAgICBwcm94eSA9IHdlYWtyZWYucHJveHkobykKICAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8pCiAgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvKQotICAgICAgICBzZWxmLmFzc2VydF8ocmVmMSBpcyByZWYyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMSBpcyByZWYyLAogICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSBvYmplY3Qgdy9vdXQgY2FsbGJhY2sgc2hvdWxkIGJlIHJlLXVzZWQiKQotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDIsCiAgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgd2VhayByZWYgY291bnQgZm9yIG9iamVjdCIpCiAgICAgICAgIGRlbCBwcm94eQotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCiAgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgd2VhayByZWYgY291bnQgZm9yIG9iamVjdCBhZnRlciBkZWxldGluZyBwcm94eSIpCiAKICAgICBkZWYgdGVzdF9wcm94eV9yZXVzZShzZWxmKToKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICBwcm94eTEgPSB3ZWFrcmVmLnByb3h5KG8pCiAgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG8pCiAgICAgICAgIHByb3h5MiA9IHdlYWtyZWYucHJveHkobykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5MSBpcyBwcm94eTIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm94eTEgaXMgcHJveHkyLAogICAgICAgICAgICAgICAgICAgICAgInByb3h5IG9iamVjdCB3L291dCBjYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIHJlLXVzZWQiKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfcHJveHkoc2VsZik6CkBAIC0xNjUsMTYgKzE2NSwxNSBAQAogCiAgICAgICAgIEwgPSBVc2VyTGlzdC5Vc2VyTGlzdCgpCiAgICAgICAgIHAgPSB3ZWFrcmVmLnByb3h5KEwpCi0gICAgICAgIHNlbGYuZmFpbElmKHAsICJwcm94eSBmb3IgZW1wdHkgVXNlckxpc3Qgc2hvdWxkIGJlIGZhbHNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLCAicHJveHkgZm9yIGVtcHR5IFVzZXJMaXN0IHNob3VsZCBiZSBmYWxzZSIpCiAgICAgICAgIHAuYXBwZW5kKDEyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgMSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHAsICJwcm94eSBmb3Igbm9uLWVtcHR5IFVzZXJMaXN0IHNob3VsZCBiZSB0cnVlIikKLSAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuX2NoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAsICJwcm94eSBmb3Igbm9uLWVtcHR5IFVzZXJMaXN0IHNob3VsZCBiZSB0cnVlIikKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgogICAgICAgICAgICAgcFs6XSA9IFsyLCAzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocCksIDIpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcygzIGluIHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJveHkgZGlkbid0IHN1cHBvcnQgX19jb250YWluc19fKCkgcHJvcGVybHkiKQorICAgICAgICBzZWxmLmFzc2VydEluKDMsIHAsICJwcm94eSBkaWRuJ3Qgc3VwcG9ydCBfX2NvbnRhaW5zX18oKSBwcm9wZXJseSIpCiAgICAgICAgIHBbMV0gPSA1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTFsxXSwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzFdLCA1KQpAQCAtMTg0LDcgKzE4Myw3IEBACiAgICAgICAgICMjIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihMMiksIHJlcHIocDIpKQogICAgICAgICBMMyA9IFVzZXJMaXN0LlVzZXJMaXN0KHJhbmdlKDEwKSkKICAgICAgICAgcDMgPSB3ZWFrcmVmLnByb3h5KEwzKQotICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5fY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwzWzpdLCBwM1s6XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTDNbNTpdLCBwM1s1Ol0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwzWzo1XSwgcDNbOjVdKQpAQCAtMTk4LDcgKzE5Nyw3IEBACiAgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHUidW5pY29kZSIKICAgICAgICAgaW5zdGFuY2UgPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfX3VuaWNvZGVfXyIgaW4gZGlyKHdlYWtyZWYucHJveHkoaW5zdGFuY2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX191bmljb2RlX18iLCBkaXIod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpLCB1InVuaWNvZGUiKQogCiAgICAgZGVmIHRlc3RfcHJveHlfaW5kZXgoc2VsZik6CkBAIC0yMzksMTkgKzIzOCwxOSBAQAogICAgICAgICBvID0gT2JqZWN0KDEpCiAgICAgICAgIHAxID0gbWFrZXJlZihvLCBOb25lKQogICAgICAgICBwMiA9IG1ha2VyZWYobywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHAxIGlzIHAyLCAiYm90aCBjYWxsYmFja3Mgd2VyZSBOb25lIGluIHRoZSBDIEFQSSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMSBpcyBwMiwgImJvdGggY2FsbGJhY2tzIHdlcmUgTm9uZSBpbiB0aGUgQyBBUEkiKQogICAgICAgICBkZWwgcDEsIHAyCiAgICAgICAgIHAxID0gbWFrZXJlZihvKQogICAgICAgICBwMiA9IG1ha2VyZWYobywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHAxIGlzIHAyLCAiY2FsbGJhY2tzIHdlcmUgTlVMTCwgTm9uZSBpbiB0aGUgQyBBUEkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocDEgaXMgcDIsICJjYWxsYmFja3Mgd2VyZSBOVUxMLCBOb25lIGluIHRoZSBDIEFQSSIpCiAgICAgICAgIGRlbCBwMSwgcDIKICAgICAgICAgcDEgPSBtYWtlcmVmKG8pCiAgICAgICAgIHAyID0gbWFrZXJlZihvKQotICAgICAgICBzZWxmLmFzc2VydF8ocDEgaXMgcDIsICJib3RoIGNhbGxiYWNrcyB3ZXJlIE5VTEwgaW4gdGhlIEMgQVBJIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiYm90aCBjYWxsYmFja3Mgd2VyZSBOVUxMIGluIHRoZSBDIEFQSSIpCiAgICAgICAgIGRlbCBwMSwgcDIKICAgICAgICAgcDEgPSBtYWtlcmVmKG8sIE5vbmUpCiAgICAgICAgIHAyID0gbWFrZXJlZihvKQotICAgICAgICBzZWxmLmFzc2VydF8ocDEgaXMgcDIsICJjYWxsYmFja3Mgd2VyZSBOb25lLCBOVUxMIGluIHRoZSBDIEFQSSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMSBpcyBwMiwgImNhbGxiYWNrcyB3ZXJlIE5vbmUsIE5VTEwgaW4gdGhlIEMgQVBJIikKIAogICAgIGRlZiB0ZXN0X2NhbGxhYmxlX3Byb3h5KHNlbGYpOgogICAgICAgICBvID0gQ2FsbGFibGUoKQpAQCAtMjU5LDEzICsyNTgsMTMgQEAKIAogICAgICAgICBzZWxmLmNoZWNrX3Byb3h5KG8sIHJlZjEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUocmVmMSkgaXMgd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVmMSkgaXMgd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICJwcm94eSBpcyBub3Qgb2YgY2FsbGFibGUgdHlwZSIpCiAgICAgICAgIHJlZjEoJ3R3aW5raWVzIScpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvLmJhciA9PSAndHdpbmtpZXMhJywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8uYmFyID09ICd0d2lua2llcyEnLAogICAgICAgICAgICAgICAgICAgICAgImNhbGwgdGhyb3VnaCBwcm94eSBub3QgcGFzc2VkIHRocm91Z2ggdG8gb3JpZ2luYWwiKQogICAgICAgICByZWYxKHg9J1NwbGF0LicpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvLmJhciA9PSAnU3BsYXQuJywKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8uYmFyID09ICdTcGxhdC4nLAogICAgICAgICAgICAgICAgICAgICAgImNhbGwgdGhyb3VnaCBwcm94eSBub3QgcGFzc2VkIHRocm91Z2ggdG8gb3JpZ2luYWwiKQogCiAgICAgICAgICMgZXhwZWN0IGR1ZSB0byB0b28gZmV3IGFyZ3MKQEAgLTI3NiwyNCArMjc1LDI0IEBACiAKICAgICBkZWYgY2hlY2tfcHJveHkoc2VsZiwgbywgcHJveHkpOgogICAgICAgICBvLmZvbyA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LmZvbyA9PSAxLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJveHkuZm9vID09IDEsCiAgICAgICAgICAgICAgICAgICAgICAicHJveHkgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgYWRkaXRpb24iKQogICAgICAgICBvLmZvbyA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRfKHByb3h5LmZvbyA9PSAyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJveHkuZm9vID09IDIsCiAgICAgICAgICAgICAgICAgICAgICAicHJveHkgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIikKICAgICAgICAgZGVsIG8uZm9vCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihwcm94eSwgJ2ZvbycpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIocHJveHksICdmb28nKSwKICAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSByZW1vdmFsIikKIAogICAgICAgICBwcm94eS5mb28gPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhvLmZvbyA9PSAxLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoby5mb28gPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgYWRkaXRpb24gdmlhIHByb3h5IikKICAgICAgICAgcHJveHkuZm9vID0gMgotICAgICAgICBzZWxmLmFzc2VydF8oCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgIG8uZm9vID09IDIsCiAgICAgICAgICAgICAib2JqZWN0IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIG1vZGlmaWNhdGlvbiB2aWEgcHJveHkiKQogICAgICAgICBkZWwgcHJveHkuZm9vCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhub3QgaGFzYXR0cihvLCAnZm9vJyksCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAnZm9vJyksCiAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIHJlbW92YWwgdmlhIHByb3h5IikKIAogICAgIGRlZiB0ZXN0X3Byb3h5X2RlbGV0aW9uKHNlbGYpOgpAQCAtMzE3LDIxICszMTYsMjEgQEAKICAgICAgICAgbyA9IEMoKQogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobykKICAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAyLAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMiwKICAgICAgICAgICAgICAgICAgICAgICJnb3Qgd3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlIG9iamVjdHMiKQogCiAgICAgICAgIHByb3h5MSA9IHdlYWtyZWYucHJveHkobykKICAgICAgICAgcHJveHkyID0gd2Vha3JlZi5wcm94eShvLCBzZWxmLmNhbGxiYWNrKQotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gNCwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDQsCiAgICAgICAgICAgICAgICAgICAgICAiZ290IHdyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZSBvYmplY3RzIikKIAogICAgICAgICBkZWwgcmVmMSwgcmVmMiwgcHJveHkxLCBwcm94eTIKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgIndlYWsgcmVmZXJlbmNlIG9iamVjdHMgbm90IHVubGlua2VkIGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAiIHJlZmVyZW50IHdoZW4gZGlzY2FyZGVkLiIpCiAKICAgICAgICAgIyBhc3N1bWVzIGludHMgZG8gbm90IHN1cHBvcnQgd2Vha3JlZnMKLSAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KDEpID09IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudCgxKSA9PSAwLAogICAgICAgICAgICAgICAgICAgICAgImdvdCB3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2Ugb2JqZWN0cyBmb3IgaW50IikKIAogICAgIGRlZiB0ZXN0X2dldHdlYWtyZWZzKHNlbGYpOgpAQCAtMzM5LDIyICszMzgsMjIgQEAKICAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQogICAgICAgICBkZWwgcmVmMQotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmcyhvKSA9PSBbcmVmMl0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtyZWYyXSwKICAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgZG9lcyBub3QgbWF0Y2giKQogCiAgICAgICAgIG8gPSBDKCkKICAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCiAgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQogICAgICAgICBkZWwgcmVmMgotICAgICAgICBzZWxmLmFzc2VydF8od2Vha3JlZi5nZXR3ZWFrcmVmcyhvKSA9PSBbcmVmMV0sCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtyZWYxXSwKICAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgZG9lcyBub3QgbWF0Y2giKQogCiAgICAgICAgIGRlbCByZWYxCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmcyhvKSA9PSBbXSwKICAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgbm90IGNsZWFyZWQiKQogCiAgICAgICAgICMgYXNzdW1lcyBpbnRzIGRvIG5vdCBzdXBwb3J0IHdlYWtyZWZzCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZzKDEpID09IFtdLAorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmcygxKSA9PSBbXSwKICAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgZG9lcyBub3QgbWF0Y2ggZm9yIGludCIpCiAKICAgICBkZWYgdGVzdF9uZXdzdHlsZV9udW1iZXJfb3BzKHNlbGYpOgpAQCAtMzYyLDggKzM2MSw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYgPSBGKDIuMCkKICAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoZikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHAgKyAxLjAgPT0gMy4wKQotICAgICAgICBzZWxmLmFzc2VydF8oMS4wICsgcCA9PSAzLjApICAjIHRoaXMgdXNlZCB0byBTRUdWCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwICsgMS4wID09IDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEuMCArIHAgPT0gMy4wKSAgIyB0aGlzIHVzZWQgdG8gU0VHVgogCiAgICAgZGVmIHRlc3RfY2FsbGJhY2tzX3Byb3RlY3RlZChzZWxmKToKICAgICAgICAgIyBDYWxsYmFja3MgcHJvdGVjdGVkIGZyb20gYWxyZWFkeS1zZXQgZXhjZXB0aW9ucz8KQEAgLTYxNiw3ICs2MTUsNyBAQAogICAgICAgICBjLndyID0gd2Vha3JlZi5yZWYoZCwgY2FsbGJhY2spICAgICAjIHRoaXMgd29uJ3QgdHJpZ2dlcgogICAgICAgICBkLndyID0gd2Vha3JlZi5yZWYoY2FsbGJhY2ssIGQuY2IpICAjIGRpdHRvCiAgICAgICAgIGV4dGVybmFsX3dyID0gd2Vha3JlZi5yZWYoY2FsbGJhY2ssIHNhZmVfY2FsbGJhY2spICAjIGJ1dCB0aGlzIHdpbGwKLSAgICAgICAgc2VsZi5hc3NlcnRfKGV4dGVybmFsX3dyKCkgaXMgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHRlcm5hbF93cigpIGlzIGNhbGxiYWNrKQogCiAgICAgICAgICMgVGhlIHdlYWtyZWZzIGF0dGFjaGVkIHRvIGMgYW5kIGQgc2hvdWxkIGdldCBjbGVhcmVkLCBzbyB0aGF0CiAgICAgICAgICMgQy5jYiBpcyBuZXZlciBjYWxsZWQuICBCdXQgZXh0ZXJuYWxfd3IgaXNuJ3QgcGFydCBvZiB0aGUgY3ljbGljCkBAIC02ODYsNiArNjg1LDI2IEBACiAgICAgICAgICMgTm8gZXhjZXB0aW9uIHNob3VsZCBiZSByYWlzZWQgaGVyZQogICAgICAgICBnYy5jb2xsZWN0KCkKIAorICAgIGRlZiB0ZXN0X2NsYXNzZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBib3RoIG9sZC1zdHlsZSBjbGFzc2VzIGFuZCBuZXctc3R5bGUgY2xhc3NlcworICAgICAgICAjIGFyZSB3ZWFrcmVmYWJsZS4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsID0gW10KKyAgICAgICAgd2Vha3JlZi5yZWYoaW50KQorICAgICAgICBhID0gd2Vha3JlZi5yZWYoQSwgbC5hcHBlbmQpCisgICAgICAgIEEgPSBOb25lCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBbYV0pCisgICAgICAgIGIgPSB3ZWFrcmVmLnJlZihCLCBsLmFwcGVuZCkKKyAgICAgICAgQiA9IE5vbmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFthLCBiXSkKKwogCiBjbGFzcyBTdWJjbGFzc2FibGVXZWFrcmVmVGVzdENhc2UoVGVzdEJhc2UpOgogCkBAIC02OTksMTIgKzcxOCwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihNeVJlZiwgc2VsZikuX19jYWxsX18oKQogICAgICAgICBvID0gT2JqZWN0KCJmb28iKQogICAgICAgICBtciA9IE15UmVmKG8sIHZhbHVlPTI0KQotICAgICAgICBzZWxmLmFzc2VydF8obXIoKSBpcyBvKQotICAgICAgICBzZWxmLmFzc2VydF8obXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXIoKSBpcyBvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXIuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1yLnZhbHVlLCAyNCkKICAgICAgICAgZGVsIG8KLSAgICAgICAgc2VsZi5hc3NlcnRfKG1yKCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKG1yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1yKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1yLmNhbGxlZCkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfZG9udF9yZXBsYWNlX3N0YW5kYXJkX3JlZnMoc2VsZik6CiAgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKQEAgLTcxMiwxNiArNzMxLDE2IEBACiAgICAgICAgIG8gPSBPYmplY3QoNDIpCiAgICAgICAgIHIxID0gTXlSZWYobykKICAgICAgICAgcjIgPSB3ZWFrcmVmLnJlZihvKQotICAgICAgICBzZWxmLmFzc2VydF8ocjEgaXMgbm90IHIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgaXMgbm90IHIyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlYWtyZWYuZ2V0d2Vha3JlZnMobyksIFtyMiwgcjFdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pLCAyKQogICAgICAgICByMyA9IE15UmVmKG8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobyksIDMpCiAgICAgICAgIHJlZnMgPSB3ZWFrcmVmLmdldHdlYWtyZWZzKG8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZnMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8ocjIgaXMgcmVmc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIxIGluIHJlZnNbMTpdKQotICAgICAgICBzZWxmLmFzc2VydF8ocjMgaW4gcmVmc1sxOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMiBpcyByZWZzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEluKHIxLCByZWZzWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMywgcmVmc1sxOl0pCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX2RvbnRfY29uZmxhdGVfY2FsbGJhY2tzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeVJlZih3ZWFrcmVmLnJlZik6CkBAIC03MjksMTAgKzc0OCwxMCBAQAogICAgICAgICBvID0gT2JqZWN0KDQyKQogICAgICAgICByMSA9IE15UmVmKG8sIGlkKQogICAgICAgICByMiA9IE15UmVmKG8sIHN0cikKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIxIGlzIG5vdCByMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIGlzIG5vdCByMikKICAgICAgICAgcmVmcyA9IHdlYWtyZWYuZ2V0d2Vha3JlZnMobykKLSAgICAgICAgc2VsZi5hc3NlcnRfKHIxIGluIHJlZnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhyMiBpbiByZWZzKQorICAgICAgICBzZWxmLmFzc2VydEluKHIxLCByZWZzKQorICAgICAgICBzZWxmLmFzc2VydEluKHIyLCByZWZzKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmc193aXRoX3Nsb3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeVJlZih3ZWFrcmVmLnJlZik6CkBAIC03NDksNyArNzY4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNsb3QxLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNsb3QyLCAiZGVmIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLm1ldGgoKSwgImFiY2RlZiIpCi0gICAgICAgIHNlbGYuZmFpbElmKGhhc2F0dHIociwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyLCAiX19kaWN0X18iKSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfd2l0aF9jeWNsZShzZWxmKToKICAgICAgICAgIyBCdWcgIzMxMTAKQEAgLTgwNywyMyArODI2LDIzIEBACiAgICAgICAgICMKICAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX3ZhbHVlZF9kaWN0KCkKICAgICAgICAgZm9yIG8gaW4gb2JqZWN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAxLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJXIhIiAlIG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8obyBpcyBkaWN0W28uYXJnXSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvIGlzIGRpY3Rbby5hcmddLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBvYmplY3QgcmV0dXJuZWQgYnkgd2VhayBkaWN0ISIpCiAgICAgICAgIGl0ZW1zMSA9IGRpY3QuaXRlbXMoKQogICAgICAgICBpdGVtczIgPSBkaWN0LmNvcHkoKS5pdGVtcygpCiAgICAgICAgIGl0ZW1zMS5zb3J0KCkKICAgICAgICAgaXRlbXMyLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydF8oaXRlbXMxID09IGl0ZW1zMiwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGl0ZW1zMSA9PSBpdGVtczIsCiAgICAgICAgICAgICAgICAgICAgICAiY2xvbmluZyBvZiB3ZWFrLXZhbHVlZCBkaWN0aW9uYXJ5IGRpZCBub3Qgd29yayEiKQogICAgICAgICBkZWwgaXRlbXMxLCBpdGVtczIKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkaWN0KSA9PSBzZWxmLkNPVU5UKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IHNlbGYuQ09VTlQpCiAgICAgICAgIGRlbCBvYmplY3RzWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZGljdCkgPT0gKHNlbGYuQ09VTlQgLSAxKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSAoc2VsZi5DT1VOVCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgImRlbGV0aW5nIG9iamVjdCBkaWQgbm90IGNhdXNlIGRpY3Rpb25hcnkgdXBkYXRlIikKICAgICAgICAgZGVsIG9iamVjdHMsIG8KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkaWN0KSA9PSAwLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IDAsCiAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgdGhlIHZhbHVlcyBkaWQgbm90IGNsZWFyIHRoZSBkaWN0aW9uYXJ5IikKICAgICAgICAgIyByZWdyZXNzaW9uIG9uIFNGIGJ1ZyAjNDQ3MTUyOgogICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKQEAgLTgzOCwyNiArODU3LDI2IEBACiAgICAgICAgICMKICAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQogICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAlciEiICUgbykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhvLmFyZyBpcyBkaWN0W29dLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8uYXJnIGlzIGRpY3Rbb10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIG9iamVjdCByZXR1cm5lZCBieSB3ZWFrIGRpY3QhIikKICAgICAgICAgaXRlbXMxID0gZGljdC5pdGVtcygpCiAgICAgICAgIGl0ZW1zMiA9IGRpY3QuY29weSgpLml0ZW1zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHNldChpdGVtczEpID09IHNldChpdGVtczIpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KGl0ZW1zMSkgPT0gc2V0KGl0ZW1zMiksCiAgICAgICAgICAgICAgICAgICAgICAiY2xvbmluZyBvZiB3ZWFrLWtleWVkIGRpY3Rpb25hcnkgZGlkIG5vdCB3b3JrISIpCiAgICAgICAgIGRlbCBpdGVtczEsIGl0ZW1zMgotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGRpY3QpID09IHNlbGYuQ09VTlQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gc2VsZi5DT1VOVCkKICAgICAgICAgZGVsIG9iamVjdHNbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihkaWN0KSA9PSAoc2VsZi5DT1VOVCAtIDEpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IChzZWxmLkNPVU5UIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgb2JqZWN0IGRpZCBub3QgY2F1c2UgZGljdGlvbmFyeSB1cGRhdGUiKQogICAgICAgICBkZWwgb2JqZWN0cywgbwotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGRpY3QpID09IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyB0aGUga2V5cyBkaWQgbm90IGNsZWFyIHRoZSBkaWN0aW9uYXJ5IikKICAgICAgICAgbyA9IE9iamVjdCg0MikKICAgICAgICAgZGljdFtvXSA9ICJXaGF0IGlzIHRoZSBtZWFuaW5nIG9mIHRoZSB1bml2ZXJzZT8iCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvIGluIGRpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgzNCBub3QgaW4gZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDM0LCBkaWN0KQogCiAgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9pdGVycyhzZWxmKToKICAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQpAQCAtODY5LDcgKzg4OCw3IEBACiAgICAgICAgIG9iamVjdHMyID0gbGlzdChvYmplY3RzKQogICAgICAgICBmb3Igd3IgaW4gcmVmczoKICAgICAgICAgICAgIG9iID0gd3IoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iIGluIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9iLCBkaWN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYi5hcmcsIGRpY3Rbb2JdKQogICAgICAgICAgICAgb2JqZWN0czIucmVtb3ZlKG9iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvYmplY3RzMiksIDApCkBAIC04NzksNyArODk4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChkaWN0Lml0ZXJrZXlyZWZzKCkpKSwgbGVuKG9iamVjdHMpKQogICAgICAgICBmb3Igd3IgaW4gZGljdC5pdGVya2V5cmVmcygpOgogICAgICAgICAgICAgb2IgPSB3cigpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2IgaW4gZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob2IsIGRpY3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLmFyZywgZGljdFtvYl0pCiAgICAgICAgICAgICBvYmplY3RzMi5yZW1vdmUob2IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9iamVjdHMyKSwgMCkKQEAgLTkxNCwzNyArOTMzLDM3IEBACiAgICAgICAgIGl0ZW1zID0gZGljdC5pdGVtcygpCiAgICAgICAgIGZvciBpdGVtIGluIGRpY3QuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihpdGVtcykgPT0gMCwgIml0ZXJpdGVtcygpIGRpZCBub3QgdG91Y2ggYWxsIGl0ZW1zIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihpdGVtcykgPT0gMCwgIml0ZXJpdGVtcygpIGRpZCBub3QgdG91Y2ggYWxsIGl0ZW1zIikKIAogICAgICAgICAjIGtleSBpdGVyYXRvciwgdmlhIF9faXRlcl9fKCk6CiAgICAgICAgIGtleXMgPSBkaWN0LmtleXMoKQogICAgICAgICBmb3IgayBpbiBkaWN0OgogICAgICAgICAgICAga2V5cy5yZW1vdmUoaykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbihrZXlzKSA9PSAwLCAiX19pdGVyX18oKSBkaWQgbm90IHRvdWNoIGFsbCBrZXlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihrZXlzKSA9PSAwLCAiX19pdGVyX18oKSBkaWQgbm90IHRvdWNoIGFsbCBrZXlzIikKIAogICAgICAgICAjIGtleSBpdGVyYXRvciwgdmlhIGl0ZXJrZXlzKCk6CiAgICAgICAgIGtleXMgPSBkaWN0LmtleXMoKQogICAgICAgICBmb3IgayBpbiBkaWN0Lml0ZXJrZXlzKCk6CiAgICAgICAgICAgICBrZXlzLnJlbW92ZShrKQotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGtleXMpID09IDAsICJpdGVya2V5cygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGtleXMpID09IDAsICJpdGVya2V5cygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQogCiAgICAgICAgICMgdmFsdWUgaXRlcmF0b3I6CiAgICAgICAgIHZhbHVlcyA9IGRpY3QudmFsdWVzKCkKICAgICAgICAgZm9yIHYgaW4gZGljdC5pdGVydmFsdWVzKCk6CiAgICAgICAgICAgICB2YWx1ZXMucmVtb3ZlKHYpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4odmFsdWVzKSA9PSAwLAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHZhbHVlcykgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgICJpdGVydmFsdWVzKCkgZGlkIG5vdCB0b3VjaCBhbGwgdmFsdWVzIikKIAogICAgIGRlZiB0ZXN0X21ha2Vfd2Vha19rZXllZF9kaWN0X2Zyb21fZGljdChzZWxmKToKICAgICAgICAgbyA9IE9iamVjdCgzKQogICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSh7bzozNjR9KQotICAgICAgICBzZWxmLmFzc2VydF8oZGljdFtvXSA9PSAzNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0W29dID09IDM2NCkKIAogICAgIGRlZiB0ZXN0X21ha2Vfd2Vha19rZXllZF9kaWN0X2Zyb21fd2Vha19rZXllZF9kaWN0KHNlbGYpOgogICAgICAgICBvID0gT2JqZWN0KDMpCiAgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KHtvOjM2NH0pCiAgICAgICAgIGRpY3QyID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeShkaWN0KQotICAgICAgICBzZWxmLmFzc2VydF8oZGljdFtvXSA9PSAzNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0W29dID09IDM2NCkKIAogICAgIGRlZiBtYWtlX3dlYWtfa2V5ZWRfZGljdChzZWxmKToKICAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQpAQCAtOTY0LDE5ICs5ODMsMTkgQEAKICAgICAgICAgd2Vha2RpY3QgPSBrbGFzcygpCiAgICAgICAgIHdlYWtkaWN0W2tleTFdID0gdmFsdWUxCiAgICAgICAgIHdlYWtkaWN0W2tleTJdID0gdmFsdWUyCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4od2Vha2RpY3QpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4od2Vha2RpY3QpID09IDIpCiAgICAgICAgIGssIHYgPSB3ZWFrZGljdC5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih3ZWFrZGljdCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih3ZWFrZGljdCkgPT0gMSkKICAgICAgICAgaWYgayBpcyBrZXkxOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaXMgdmFsdWUxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUxKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHYgaXMgdmFsdWUyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUyKQogICAgICAgICBrLCB2ID0gd2Vha2RpY3QucG9waXRlbSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4od2Vha2RpY3QpID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4od2Vha2RpY3QpID09IDApCiAgICAgICAgIGlmIGsgaXMga2V5MToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2IGlzIHZhbHVlMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHZhbHVlMSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh2IGlzIHZhbHVlMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHZhbHVlMikKIAogICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3RfcG9waXRlbShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wb3BpdGVtKHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwKQEAgLTk4NywyMSArMTAwNiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQygpLCAidmFsdWUgMSIsIEMoKSwgInZhbHVlIDIiKQogCiAgICAgZGVmIGNoZWNrX3NldGRlZmF1bHQoc2VsZiwga2xhc3MsIGtleSwgdmFsdWUxLCB2YWx1ZTIpOgotICAgICAgICBzZWxmLmFzc2VydF8odmFsdWUxIGlzIG5vdCB2YWx1ZTIsCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZTEgaXMgbm90IHZhbHVlMiwKICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHRlc3QiCiAgICAgICAgICAgICAgICAgICAgICAiIC0tIHZhbHVlIHBhcmFtZXRlcnMgbXVzdCBiZSBkaXN0aW5jdCBvYmplY3RzIikKICAgICAgICAgd2Vha2RpY3QgPSBrbGFzcygpCiAgICAgICAgIG8gPSB3ZWFrZGljdC5zZXRkZWZhdWx0KGtleSwgdmFsdWUxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpcyB2YWx1ZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrZXkgaW4gd2Vha2RpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdC5nZXQoa2V5KSBpcyB2YWx1ZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdFtrZXldIGlzIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCB3ZWFrZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3ZWFrZGljdC5nZXQoa2V5KSwgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0W2tleV0sIHZhbHVlMSkKIAogICAgICAgICBvID0gd2Vha2RpY3Quc2V0ZGVmYXVsdChrZXksIHZhbHVlMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaXMgdmFsdWUxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIHdlYWtkaWN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha2RpY3QuZ2V0KGtleSkgaXMgdmFsdWUxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha2RpY3Rba2V5XSBpcyB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobywgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgd2Vha2RpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2Vha2RpY3QuZ2V0KGtleSksIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3ZWFrZGljdFtrZXldLCB2YWx1ZTEpCiAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kaWN0X3NldGRlZmF1bHQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfc2V0ZGVmYXVsdCh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksCkBAIC0xMDIwLDE3ICsxMDM5LDE3IEBACiAgICAgICAgIHdlYWtkaWN0LnVwZGF0ZShkaWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3ZWFrZGljdCksIGxlbihkaWN0KSkKICAgICAgICAgZm9yIGsgaW4gd2Vha2RpY3Qua2V5cygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGsgaW4gZGljdCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAibXlzdGVyaW91cyBuZXcga2V5IGFwcGVhcmVkIGluIHdlYWsgZGljdCIpCiAgICAgICAgICAgICB2ID0gZGljdC5nZXQoaykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHdlYWtkaWN0W2tdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgd2Vha2RpY3QuZ2V0KGspKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdFtrXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModiwgd2Vha2RpY3QuZ2V0KGspKQogICAgICAgICBmb3IgayBpbiBkaWN0LmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIHdlYWtkaWN0LAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCB3ZWFrZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAib3JpZ2luYWwga2V5IGRpc2FwcGVhcmVkIGluIHdlYWsgZGljdCIpCiAgICAgICAgICAgICB2ID0gZGljdFtrXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgd2Vha2RpY3Rba10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB3ZWFrZGljdC5nZXQoaykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHYsIHdlYWtkaWN0W2tdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdC5nZXQoaykpCiAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kaWN0X3VwZGF0ZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja191cGRhdGUod2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LApAQCAtMTA0NiwxMCArMTA2NSwxMCBAQAogICAgICAgICBvMiA9IE9iamVjdCgnMicpCiAgICAgICAgIGRbbzFdID0gJ3NvbWV0aGluZycKICAgICAgICAgZFtvMl0gPSAnc29tZXRoaW5nJwotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGQpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMikKICAgICAgICAgZGVsIGRbbzFdCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZCkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQua2V5cygpID09IFtvMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQua2V5cygpID09IFtvMl0pCiAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kZWxpdGVtKHNlbGYpOgogICAgICAgICBkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKQEAgLTEwNTcsMTAgKzEwNzYsMTAgQEAKICAgICAgICAgbzIgPSBPYmplY3QoJzInKQogICAgICAgICBkWydzb21ldGhpbmcnXSA9IG8xCiAgICAgICAgIGRbJ3NvbWV0aGluZyBlbHNlJ10gPSBvMgotICAgICAgICBzZWxmLmFzc2VydF8obGVuKGQpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMikKICAgICAgICAgZGVsIGRbJ3NvbWV0aGluZyddCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oZCkgPT0gMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGQuaXRlbXMoKSA9PSBbKCdzb21ldGhpbmcgZWxzZScsIG8yKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZCkgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaXRlbXMoKSA9PSBbKCdzb21ldGhpbmcgZWxzZScsIG8yKV0pCiAKICAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2JhZF9kZWxpdGVtKHNlbGYpOgogICAgICAgICBkID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dlYWtzZXQucHkgYi9MaWIvdGVzdC90ZXN0X3dlYWtzZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljMjgyMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQpAQCAtMCwwICsxLDM3NyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSwgcmVmLCBXZWFrU2V0CitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBjb3B5CitpbXBvcnQgc3RyaW5nCitpbXBvcnQgb3MKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UsIHNodWZmbGUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZ2MKK2ltcG9ydCBjb250ZXh0bGliCisKKworY2xhc3MgRm9vOgorICAgIHBhc3MKKworY2xhc3MgU29tZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHR5cGUob3RoZXIpICE9IHR5cGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG90aGVyLnZhbHVlID09IHNlbGYudmFsdWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoU29tZUNsYXNzLCBzZWxmLnZhbHVlKSkKKworY2xhc3MgVGVzdFdlYWtTZXQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG5lZWQgdG8ga2VlcCByZWZlcmVuY2VzIHRvIHRoZW0KKyAgICAgICAgc2VsZi5pdGVtcyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gKCdhJywgJ2InLCAnYycpXQorICAgICAgICBzZWxmLml0ZW1zMiA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gKCd4JywgJ3knLCAneicpXQorICAgICAgICBzZWxmLmxldHRlcnMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzXQorICAgICAgICBzZWxmLnMgPSBXZWFrU2V0KHNlbGYuaXRlbXMpCisgICAgICAgIHNlbGYuZCA9IGRpY3QuZnJvbWtleXMoc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5vYmogPSBTb21lQ2xhc3MoJ0YnKQorICAgICAgICBzZWxmLmZzID0gV2Vha1NldChbc2VsZi5vYmpdKQorCisgICAgZGVmIHRlc3RfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgd2Vha3NldG1ldGhvZHMgPSBkaXIoV2Vha1NldCkKKyAgICAgICAgZm9yIG1ldGhvZCBpbiBkaXIoc2V0KToKKyAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAndGVzdF9jX2FwaScgb3IgbWV0aG9kLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtZXRob2QsIHdlYWtzZXRtZXRob2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJXZWFrU2V0IG1pc3NpbmcgbWV0aG9kICIgKyBtZXRob2QpCisKKyAgICBkZWYgdGVzdF9uZXdfb3JfaW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBXZWFrU2V0LCBbXSwgMikKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zKSwgbGVuKHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZnMpLCAxKQorICAgICAgICBkZWwgc2VsZi5vYmoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mcyksIDApCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHNlbGYucywgYyBpbiBzZWxmLmQpCisgICAgICAgICMgMSBpcyBub3Qgd2Vha3JlZidhYmxlLCBidXQgdGhhdCBUeXBlRXJyb3IgaXMgY2F1Z2h0IGJ5IF9fY29udGFpbnNfXworICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm9iaiwgc2VsZi5mcykKKyAgICAgICAgZGVsIHNlbGYub2JqCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oU29tZUNsYXNzKCdGJyksIHNlbGYuZnMpCisKKyAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKKyAgICAgICAgdSA9IHNlbGYucy51bmlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHUsIGMgaW4gc2VsZi5kIG9yIGMgaW4gc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodSksIFdlYWtTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnVuaW9uLCBbW11dKQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICB4ID0gV2Vha1NldChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpCisgICAgICAgICAgICBjID0gQyhzZWxmLml0ZW1zMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLnVuaW9uKGMpLCB4KQorCisgICAgZGVmIHRlc3Rfb3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMudW5pb24oc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIHwgc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgfCBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmludGVyc2VjdGlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5kIGFuZCBjIGluIHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgV2Vha1NldChzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGkpLCBXZWFrU2V0KQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICB4ID0gV2Vha1NldChbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLmludGVyc2VjdGlvbihDKHNlbGYuaXRlbXMyKSksIHgpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zLmlzZGlzam9pbnQoV2Vha1NldChzZWxmLml0ZW1zMikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYucy5pc2Rpc2pvaW50KFdlYWtTZXQoc2VsZi5sZXR0ZXJzKSkpCisKKyAgICBkZWYgdGVzdF9hbmQoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuaW50ZXJzZWN0aW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAmIHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zICYgZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuZGlmZmVyZW5jZShzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5kIGFuZCBjIG5vdCBpbiBzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAtIHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIC0gZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gaSwgKGMgaW4gc2VsZi5kKSBeIChjIGluIHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIFdlYWtTZXQoc2VsZi5pdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgV2Vha1NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2UsIFtbXV0pCisKKyAgICBkZWYgdGVzdF94b3Ioc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIF4gc2V0KHNlbGYuaXRlbXMyKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgXiBmcm96ZW5zZXQoc2VsZi5pdGVtczIpLCBpKQorCisgICAgZGVmIHRlc3Rfc3ViX2FuZF9zdXBlcihzZWxmKToKKyAgICAgICAgcGwsIHFsLCBybCA9IG1hcChsYW1iZGEgczogW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiBzXSwgWydhYicsICdhYmNkZScsICdkZWYnXSkKKyAgICAgICAgcCwgcSwgciA9IG1hcChXZWFrU2V0LCAocGwsIHFsLCBybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIDwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgPD0gcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEgPD0gcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEgPiBwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSA+PSBwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPCByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEgPD0gcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxID4gcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxID49IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoJ2EnKS5pc3N1YnNldCgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoJ2FiYycpLmlzc3VwZXJzZXQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2EnKS5pc3N1YnNldCgnY2JzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2V0KCdjYnMnKS5pc3N1cGVyc2V0KCdhJykpCisKKyAgICBkZWYgdGVzdF9nYyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBuZXN0IG9mIGN5Y2xlcyB0byBleGVyY2lzZSBvdmVyYWxsIHJlZiBjb3VudCBjaGVjaworICAgICAgICBzID0gV2Vha1NldChGb28oKSBmb3IgaSBpbiByYW5nZSgxMDAwKSkKKyAgICAgICAgZm9yIGVsZW0gaW4gczoKKyAgICAgICAgICAgIGVsZW0uY3ljbGUgPSBzCisgICAgICAgICAgICBlbGVtLnN1YiA9IGVsZW0KKyAgICAgICAgICAgIGVsZW0uc2V0ID0gV2Vha1NldChbZWxlbV0pCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc193aXRoX2N1c3RvbV9oYXNoKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTI1NzczMQorICAgICAgICBjbGFzcyBIKFdlYWtTZXQpOgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoaWQoc2VsZikgJiAweDdmZmZmZmZmKQorICAgICAgICBzPUgoKQorICAgICAgICBmPXNldCgpCisgICAgICAgIGYuYWRkKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocywgZikKKyAgICAgICAgZi5yZW1vdmUocykKKyAgICAgICAgZi5hZGQocykKKyAgICAgICAgZi5kaXNjYXJkKHMpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzID0gV2Vha1NldCgpCisgICAgICAgIHMuX19pbml0X18oc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnMpCisgICAgICAgIHMuX19pbml0X18oc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgV2Vha1NldChzZWxmLml0ZW1zMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgcywgMik7CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgMSk7CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9pZGVudGl0eShzZWxmKToKKyAgICAgICAgcyA9IFdlYWtTZXQoc2VsZi5pdGVtcykKKyAgICAgICAgdCA9IFdlYWtTZXQocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgV2Vha1NldChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYucyksIDApCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoc2VsZi5zKSwgaWQoZHVwKSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgeCA9IFNvbWVDbGFzcygnUScpCisgICAgICAgIHNlbGYucy5hZGQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih4LCBzZWxmLnMpCisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5zLmFkZCh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgZHVwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5hZGQsIFtdKQorICAgICAgICBzZWxmLmZzLmFkZChGb28oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmZzKSA9PSAxKQorICAgICAgICBzZWxmLmZzLmFkZChzZWxmLm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmZzKSA9PSAxKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICB4ID0gU29tZUNsYXNzKCdhJykKKyAgICAgICAgc2VsZi5zLnJlbW92ZSh4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHgsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5yZW1vdmUsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCisKKyAgICBkZWYgdGVzdF9kaXNjYXJkKHNlbGYpOgorICAgICAgICBhLCBxID0gU29tZUNsYXNzKCdhJyksIFNvbWVDbGFzcygnUScpCisgICAgICAgIHNlbGYucy5kaXNjYXJkKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VsZi5zKQorICAgICAgICBzZWxmLnMuZGlzY2FyZChxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaXNjYXJkLCBbXSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYucykpOgorICAgICAgICAgICAgZWxlbSA9IHNlbGYucy5wb3AoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucG9wKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMudXBkYXRlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3NldChzZWxmKToKKyAgICAgICAgc2VsZi5zLnVwZGF0ZShzZXQoc2VsZi5pdGVtczIpKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW9yKHNlbGYpOgorICAgICAgICBzZWxmLnMgfD0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9pYW5kKHNlbGYpOgorICAgICAgICBzZWxmLnMgJj0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X2lzdWIoc2VsZik6CisgICAgICAgIHNlbGYucyAtPSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zIGFuZCBjIG5vdCBpbiBzZWxmLml0ZW1zMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIChjIGluIHNlbGYuaXRlbXMpIF4gKGMgaW4gc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfaXhvcihzZWxmKToKKyAgICAgICAgc2VsZi5zIF49IHNldChzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiAoYyBpbiBzZWxmLml0ZW1zKSBeIChjIGluIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX29uX3NlbGYoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgfD0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYucykKKyAgICAgICAgdCAmPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zKQorICAgICAgICB0IC09IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBXZWFrU2V0KCkpCisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgXj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIFdlYWtTZXQoKSkKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDU5NjQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucyA9PSBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnMgPT0gV2Vha1NldChzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnMgPT0gc2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSBsaXN0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSB0dXBsZShzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnMgPT0gMSkKKworICAgIGRlZiB0ZXN0X3dlYWtfZGVzdHJveV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKKyAgICAgICAgIyBDcmVhdGUgbmV3IGl0ZW1zIHRvIGJlIHN1cmUgbm8tb25lIGVsc2UgaG9sZHMgYSByZWZlcmVuY2UKKyAgICAgICAgaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICgnYScsICdiJywgJ2MnKV0KKyAgICAgICAgcyA9IFdlYWtTZXQoaXRlbXMpCisgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICBuZXh0KGl0KSAgICAgICAgICAgICAjIFRyaWdnZXIgaW50ZXJuYWwgaXRlcmF0aW9uCisgICAgICAgICMgRGVzdHJveSBhbiBpdGVtCisgICAgICAgIGRlbCBpdGVtc1stMV0KKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICMganVzdCBpbiBjYXNlCisgICAgICAgICMgV2UgaGF2ZSByZW1vdmVkIGVpdGhlciB0aGUgZmlyc3QgY29uc3VtZWQgaXRlbXMsIG9yIGFub3RoZXIgb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGxpc3QoaXQpKSwgW2xlbihpdGVtcyksIGxlbihpdGVtcykgLSAxXSkKKyAgICAgICAgZGVsIGl0CisgICAgICAgICMgVGhlIHJlbW92YWwgaGFzIGJlZW4gY29tbWl0dGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBsZW4oaXRlbXMpKQorCisgICAgZGVmIHRlc3Rfd2Vha19kZXN0cm95X2FuZF9tdXRhdGVfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3MTA1OiBpdGVyYXRvcnMgc2hvdWxkbid0IGNyYXNoIHdoZW4gYSBrZXkgaXMgaW1wbGljaXRseSByZW1vdmVkCisgICAgICAgIGl0ZW1zID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyc10KKyAgICAgICAgcyA9IFdlYWtTZXQoaXRlbXMpCisgICAgICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB0ZXN0Y29udGV4dCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICAgICAgIyBTY2hlZHVsZSBhbiBpdGVtIGZvciByZW1vdmFsIGFuZCByZWNyZWF0ZSBpdAorICAgICAgICAgICAgICAgIHUgPSBTb21lQ2xhc3Moc3RyKGl0ZW1zLnBvcCgpKSkKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAjIGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgICAgIHlpZWxkIHUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaXQgPSBOb25lICAgICAgICAgICAjIHNob3VsZCBjb21taXQgYWxsIHJlbW92YWxzCisKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUsIHMpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVtb3ZlLCB1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUsIHMpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgcy5hZGQodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1LCBzKQorICAgICAgICB0ID0gcy5jb3B5KCkKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzLnVwZGF0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgbGVuKHQpKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMCkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0V2Vha1NldCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aGljaGRiLnB5IGIvTGliL3Rlc3QvdGVzdF93aGljaGRiLnB5CmluZGV4IDVhOGQ2MzAuLjQyN2UzMjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2hpY2hkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3doaWNoZGIucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICB0cnk6CiAgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKICAgICAgICAgbW9kID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPVRydWUpCi0gICAgZXhjZXB0IHRlc3QudGVzdF9zdXBwb3J0LlRlc3RTa2lwcGVkOgorICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKICAgICAgICAgY29udGludWUKIAogICAgIGRlZiB0ZXN0X3doaWNoZGJfbmFtZShzZWxmLCBuYW1lPW5hbWUsIG1vZD1tb2QpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQppbmRleCA5MDIzMDlhLi4xMmFiM2JhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQpAQCAtMSwxNSArMSwzNiBAQAogIyBUZXN0IHRoZSB3aW5kb3dzIHNwZWNpZmljIHdpbjMycmVnIG1vZHVsZS4KICMgT25seSB3aW4zMnJlZyBmdW5jdGlvbnMgbm90IGhpdCBoZXJlOiBGbHVzaEtleSwgTG9hZEtleSBhbmQgU2F2ZUtleQogCi1mcm9tIF93aW5yZWcgaW1wb3J0ICoKIGltcG9ydCBvcywgc3lzCiBpbXBvcnQgdW5pdHRlc3QKLQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIHRocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJ0aHJlYWRpbmciKQogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCisjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfd2lucmVnJykKKyMgTm93IGltcG9ydCBldmVyeXRoaW5nCitmcm9tIF93aW5yZWcgaW1wb3J0ICoKKwordHJ5OgorICAgIFJFTU9URV9OQU1FID0gc3lzLmFyZ3Zbc3lzLmFyZ3YuaW5kZXgoIi0tcmVtb3RlIikrMV0KK2V4Y2VwdCAoSW5kZXhFcnJvciwgVmFsdWVFcnJvcik6CisgICAgUkVNT1RFX05BTUUgPSBOb25lCisKKyMgdHVwbGUgb2YgKG1ham9yLCBtaW5vcikKK1dJTl9WRVIgPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKVs6Ml0KKyMgU29tZSB0ZXN0cyBzaG91bGQgb25seSBydW4gb24gNjQtYml0IGFyY2hpdGVjdHVyZXMgd2hlcmUgV09XNjQgd2lsbCBiZS4KK1dJTjY0X01BQ0hJTkUgPSBUcnVlIGlmIG1hY2hpbmUoKSA9PSAiQU1ENjQiIGVsc2UgRmFsc2UKKworIyBTdGFydGluZyB3aXRoIFdpbmRvd3MgNyBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOCBSMiwgV09XNjQgbm8gbG9uZ2VyIHVzZXMKKyMgcmVnaXN0cnkgcmVmbGVjdGlvbiBhbmQgZm9ybWVybHkgcmVmbGVjdGVkIGtleXMgYXJlIHNoYXJlZCBpbnN0ZWFkLgorIyBXaW5kb3dzIDcgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDggUjIgYXJlIHZlcnNpb24gNi4xLiBEdWUgdG8gdGhpcywgc29tZQorIyB0ZXN0cyBhcmUgb25seSB2YWxpZCB1cCB1bnRpbCA2LjEKK0hBU19SRUZMRUNUSU9OID0gVHJ1ZSBpZiBXSU5fVkVSIDwgKDYsIDEpIGVsc2UgRmFsc2UKKwogdGVzdF9rZXlfbmFtZSA9ICJTT0ZUV0FSRVxcUHl0aG9uIFJlZ2lzdHJ5IFRlc3QgS2V5IC0gRGVsZXRlIE1lIgorIyBPbiBPUydlcyB0aGF0IHN1cHBvcnQgcmVmbGVjdGlvbiB3ZSBzaG91bGQgdGVzdCB3aXRoIGEgcmVmbGVjdGVkIGtleQordGVzdF9yZWZsZWN0X2tleV9uYW1lID0gIlNPRlRXQVJFXFxDbGFzc2VzXFxQeXRob24gVGVzdCBLZXkgLSBEZWxldGUgTWUiCiAKIHRlc3RfZGF0YSA9IFsKICAgICAoIkludCBWYWx1ZSIsICAgICA0NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19EV09SRCksCkBAIC0zMSwxMCArNTIsMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZXMiXSwgUkVHX01VTFRJX1NaKSwKICAgICBdCiAKLWNsYXNzIFdpbnJlZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICByZW1vdGVfbmFtZSA9IE5vbmUKK2NsYXNzIEJhc2VXaW5yZWdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgV3JpdGVUZXN0RGF0YShzZWxmLCByb290X2tleSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGtleSBpcyBhYnNlbnQgd2hlbiB0aGUgdGVzdAorICAgICAgICAjIHN0YXJ0cy4KKyAgICAgICAgc2VsZi5kZWxldGVfdHJlZShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworICAgIGRlZiBkZWxldGVfdHJlZShzZWxmLCByb290LCBzdWJrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoa2V5ID0gT3BlbktleShyb290LCBzdWJrZXksIEtFWV9BTExfQUNDRVNTKQorICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgIyBzdWJrZXkgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1YnN1YmtleSA9IEVudW1LZXkoaGtleSwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgIyBubyBtb3JlIHN1YmtleXMKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5kZWxldGVfdHJlZShoa2V5LCBzdWJzdWJrZXkpCisgICAgICAgIENsb3NlS2V5KGhrZXkpCisgICAgICAgIERlbGV0ZUtleShyb290LCBzdWJrZXkpCisKKyAgICBkZWYgX3dyaXRlX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgQ3JlYXRlS2V5PUNyZWF0ZUtleSk6CiAgICAgICAgICMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KICAgICAgICAgU2V0VmFsdWUocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUsIFJFR19TWiwgIkRlZmF1bHQgdmFsdWUiKQogICAgICAgICBrZXkgPSBDcmVhdGVLZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCkBAIC00NywxMSArODgsMTEgQEAKIAogICAgICAgICAjIENoZWNrIHdlIHdyb3RlIGFzIG1hbnkgaXRlbXMgYXMgd2UgdGhvdWdodC4KICAgICAgICAgbmtleXMsIG52YWx1ZXMsIHNpbmNlX21vZCA9IFF1ZXJ5SW5mb0tleShrZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5rZXlzLCAxLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG52YWx1ZXMsIDEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudmFsdWVzLCAxLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMiKQogICAgICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KHN1Yl9rZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5rZXlzLCAwLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG52YWx1ZXMsIGxlbih0ZXN0X2RhdGEpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5rZXlzLCAwLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnZhbHVlcywgbGVuKHRlc3RfZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyIpCiAgICAgICAgICMgQ2xvc2UgdGhpcyBrZXkgdGhpcyB3YXkuLi4KICAgICAgICAgIyAoYnV0IGJlZm9yZSB3ZSBkbywgY29weSB0aGUga2V5IGFzIGFuIGludGVnZXIgLSB0aGlzIGFsbG93cwpAQCAtNzQsMTEgKzExNSwxMSBAQAogICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBSZWFkVGVzdERhdGEoc2VsZiwgcm9vdF9rZXkpOgorICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIE9wZW5LZXk9T3BlbktleSk6CiAgICAgICAgICMgQ2hlY2sgd2UgY2FuIGdldCBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KICAgICAgICAgdmFsID0gUXVlcnlWYWx1ZShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModmFsLCAiRGVmYXVsdCB2YWx1ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdpc3RyeSBkaWRuJ3QgZ2l2ZSBiYWNrIHRoZSBjb3JyZWN0IHZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJEZWZhdWx0IHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnaXN0cnkgZGlkbid0IGdpdmUgYmFjayB0aGUgY29ycmVjdCB2YWx1ZSIpCiAKICAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKICAgICAgICAgIyBSZWFkIHRoZSBzdWIta2V5cwpAQCAtOTAsMjIgKzEzMSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGRhdGEgaW4gdGVzdF9kYXRhLCBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCBiYWNrIHRoZSBjb3JyZWN0IHRlc3QgZGF0YSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkYXRhLCB0ZXN0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQogICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbmRleCwgbGVuKHRlc3RfZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXgsIGxlbih0ZXN0X2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIikKICAgICAgICAgICAgICMgQ2hlY2sgSSBjYW4gZGlyZWN0bHkgYWNjZXNzIGVhY2ggaXRlbQogICAgICAgICAgICAgZm9yIHZhbHVlX25hbWUsIHZhbHVlX2RhdGEsIHZhbHVlX3R5cGUgaW4gdGVzdF9kYXRhOgogICAgICAgICAgICAgICAgIHJlYWRfdmFsLCByZWFkX3R5cCA9IFF1ZXJ5VmFsdWVFeChzdWJfa2V5LCB2YWx1ZV9uYW1lKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRfdmFsLCB2YWx1ZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRfdHlwLCB2YWx1ZV90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF92YWwsIHZhbHVlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGRpcmVjdGx5IHJlYWQgdGhlIHZhbHVlIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfdHlwLCB2YWx1ZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkaXJlY3RseSByZWFkIHRoZSB2YWx1ZSIpCiAgICAgICAgIHN1Yl9rZXkuQ2xvc2UoKQogICAgICAgICAjIEVudW1lcmF0ZSBvdXIgbWFpbiBrZXkuCiAgICAgICAgIHJlYWRfdmFsID0gRW51bUtleShrZXksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlYWRfdmFsLCAic3ViX2tleSIsICJSZWFkIHN1YmtleSB2YWx1ZSB3cm9uZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF92YWwsICJzdWJfa2V5IiwgIlJlYWQgc3Via2V5IHZhbHVlIHdyb25nIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgRW51bUtleShrZXksIDEpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIldhcyBhYmxlIHRvIGdldCBhIHNlY29uZCBrZXkgd2hlbiBJIG9ubHkgaGF2ZSBvbmUhIikKQEAgLTExNCw3ICsxNTUsNyBAQAogCiAgICAgICAgIGtleS5DbG9zZSgpCiAKLSAgICBkZWYgRGVsZXRlVGVzdERhdGEoc2VsZiwgcm9vdF9rZXkpOgorICAgIGRlZiBfZGVsZXRlX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSk6CiAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUsIDAsIEtFWV9BTExfQUNDRVNTKQogICAgICAgICBzdWJfa2V5ID0gT3BlbktleShrZXksICJzdWJfa2V5IiwgMCwgS0VZX0FMTF9BQ0NFU1MpCiAgICAgICAgICMgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWxldGUgdGhlIHZhbHVlcyBiZWZvcmUgZGVsZXRpbmcKQEAgLTEyNCw4ICsxNjUsOCBAQAogICAgICAgICAgICAgRGVsZXRlVmFsdWUoc3ViX2tleSwgdmFsdWVfbmFtZSkKIAogICAgICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KHN1Yl9rZXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5rZXlzLCAwLCAic3Via2V5IG5vdCBlbXB0eSBiZWZvcmUgZGVsZXRlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobnZhbHVlcywgMCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDAsICJzdWJrZXkgbm90IGVtcHR5IGJlZm9yZSBkZWxldGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG52YWx1ZXMsIDAsICJzdWJrZXkgbm90IGVtcHR5IGJlZm9yZSBkZWxldGUiKQogICAgICAgICBzdWJfa2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KGtleSwgInN1Yl9rZXkiKQogCkBAIC0xNDQsMzAgKzE4NSw1MyBAQAogICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgVGVzdEFsbChzZWxmLCByb290X2tleSk6Ci0gICAgICAgIHNlbGYuV3JpdGVUZXN0RGF0YShyb290X2tleSkKLSAgICAgICAgc2VsZi5SZWFkVGVzdERhdGEocm9vdF9rZXkpCi0gICAgICAgIHNlbGYuRGVsZXRlVGVzdERhdGEocm9vdF9rZXkpCisgICAgZGVmIF90ZXN0X2FsbChzZWxmLCByb290X2tleSk6CisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3RfZGF0YShyb290X2tleSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0X2RhdGEocm9vdF9rZXkpCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEocm9vdF9rZXkpCiAKLSAgICBkZWYgdGVzdExvY2FsTWFjaGluZVJlZ2lzdHJ5V29ya3Moc2VsZik6Ci0gICAgICAgIHNlbGYuVGVzdEFsbChIS0VZX0NVUlJFTlRfVVNFUikKK2NsYXNzIExvY2FsV2lucmVnVGVzdHMoQmFzZVdpbnJlZ1Rlc3RzKToKIAotICAgIGRlZiB0ZXN0Q29ubmVjdFJlZ2lzdHJ5VG9Mb2NhbE1hY2hpbmVXb3JrcyhzZWxmKToKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3JrcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hbGwoSEtFWV9DVVJSRU5UX1VTRVIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3Jrc19leHRlbmRlZF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgU3Vic3RpdHV0ZSB0aGUgcmVndWxhciBDcmVhdGVLZXkgYW5kIE9wZW5LZXkgY2FsbHMgd2l0aCB0aGVpcgorICAgICAgICAjIGV4dGVuZGVkIGNvdW50ZXJwYXJ0cy4KKyAgICAgICAgIyBOb3RlOiBEZWxldGVLZXlFeCBpcyBub3QgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXMgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNrZSA9IGxhbWJkYSBrZXksIHN1Yl9rZXk6IENyZWF0ZUtleUV4KGtleSwgc3ViX2tleSwgMCwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUiwgY2tlKQorCisgICAgICAgIG9rZSA9IGxhbWJkYSBrZXksIHN1Yl9rZXk6IE9wZW5LZXlFeChrZXksIHN1Yl9rZXksIDAsIEtFWV9SRUFEKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUiwgb2tlKQorCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEoSEtFWV9DVVJSRU5UX1VTRVIpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3JlZ2lzdHJ5X3RvX2xvY2FsX21hY2hpbmVfd29ya3Moc2VsZik6CiAgICAgICAgICMgcGVyZm9ybSBtaW5pbWFsIENvbm5lY3RSZWdpc3RyeSB0ZXN0IHdoaWNoIGp1c3QgaW52b2tlcyBpdAogICAgICAgICBoID0gQ29ubmVjdFJlZ2lzdHJ5KE5vbmUsIEhLRVlfTE9DQUxfTUFDSElORSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKICAgICAgICAgaC5DbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKLSAgICBkZWYgdGVzdFJlbW90ZU1hY2hpbmVSZWdpc3RyeVdvcmtzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5yZW1vdGVfbmFtZToKLSAgICAgICAgICAgIHJldHVybiAjIHJlbW90ZSBtYWNoaW5lIG5hbWUgbm90IHNwZWNpZmllZAotICAgICAgICByZW1vdGVfa2V5ID0gQ29ubmVjdFJlZ2lzdHJ5KHNlbGYucmVtb3RlX25hbWUsIEhLRVlfQ1VSUkVOVF9VU0VSKQotICAgICAgICBzZWxmLlRlc3RBbGwocmVtb3RlX2tleSkKKyAgICBkZWYgdGVzdF9pbmV4aXN0YW50X3JlbW90ZV9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IGxhbWJkYTogQ29ubmVjdFJlZ2lzdHJ5KCJhYmNkZWZnaGlqa2wiLCBIS0VZX0NVUlJFTlRfVVNFUikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb25uZWN0KQogCi0gICAgZGVmIHRlc3RFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3Moc2VsZik6CisgICAgZGVmIHRlc3RfZXhwYW5kX2Vudmlyb25tZW50X3N0cmluZ3Moc2VsZik6CiAgICAgICAgIHIgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3ModSIld2luZGlyJVxcdGVzdCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgdW5pY29kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBvcy5lbnZpcm9uWyJ3aW5kaXIiXSArICJcXHRlc3QiKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBoYW5kbGUgaXMgY2xvc2VkIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGFuZGxlLCAwKQorCiAgICAgZGVmIHRlc3RfY2hhbmdpbmdfdmFsdWUoc2VsZik6CiAgICAgICAgICMgSXNzdWUyODEwOiBBIHJhY2UgY29uZGl0aW9uIGluIDIuNiBhbmQgMy4xIG1heSBjYXVzZQogICAgICAgICAjIEVudW1WYWx1ZSBvciBRdWVyeVZhbHVlIHRvIHRocm93ICJXaW5kb3dzRXJyb3I6IE1vcmUgZGF0YSBpcwpAQCAtMTk3LDcgKzI2MSw4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkb25lID0gVHJ1ZQogICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQotICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKydcXGNoYW5naW5nX3ZhbHVlJykKKyAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSwgMCwgS0VZX0FMTF9BQ0NFU1MpIGFzIGtleToKKyAgICAgICAgICAgICAgICBEZWxldGVLZXkoa2V5LCAnY2hhbmdpbmdfdmFsdWUnKQogICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQogCiAgICAgZGVmIHRlc3RfbG9uZ19rZXkoc2VsZik6CkBAIC0yMTEsNyArMjc2LDggQEAKICAgICAgICAgICAgICAgICBudW1fc3Via2V5cywgbnVtX3ZhbHVlcywgdCA9IFF1ZXJ5SW5mb0tleShrZXkpCiAgICAgICAgICAgICAgICAgRW51bUtleShrZXksIDApCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsICdcXCcuam9pbigodGVzdF9rZXlfbmFtZSwgbmFtZSkpKQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lLCAwLCBLRVlfQUxMX0FDQ0VTUykgYXMga2V5OgorICAgICAgICAgICAgICAgIERlbGV0ZUtleShrZXksIG5hbWUpCiAgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCiAKICAgICBkZWYgdGVzdF9keW5hbWljX2tleShzZWxmKToKQEAgLTIyMCwxNCArMjg2LDEzMSBAQAogICAgICAgICBFbnVtVmFsdWUoSEtFWV9QRVJGT1JNQU5DRV9EQVRBLCAwKQogICAgICAgICBRdWVyeVZhbHVlRXgoSEtFWV9QRVJGT1JNQU5DRV9EQVRBLCBOb25lKQogCisgICAgIyBSZWZsZWN0aW9uIHJlcXVpcmVzIFhQIHg2NC9WaXN0YSBhdCBhIG1pbmltdW0uIFhQIGRvZXNuJ3QgaGF2ZSB0aGlzIHN0dWZmCisgICAgIyBvciBEZWxldGVLZXlFeCBzbyBtYWtlIHN1cmUgdGhlaXIgdXNlIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoV0lOX1ZFUiA8ICg1LCAyKSwgIlJlcXVpcmVzIFdpbmRvd3MgWFAiKQorICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb25fdW5zdXBwb3J0ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKSBhcyBjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNrLmhhbmRsZSwgMCkKKworICAgICAgICAgICAga2V5ID0gT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBEaXNhYmxlUmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIEVuYWJsZVJlZmxlY3Rpb25LZXkoa2V5KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBRdWVyeVJlZmxlY3Rpb25LZXkoa2V5KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBEZWxldGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhSRU1PVEVfTkFNRSwgIlNraXBwaW5nIHJlbW90ZSByZWdpc3RyeSB0ZXN0cyIpCitjbGFzcyBSZW1vdGVXaW5yZWdUZXN0cyhCYXNlV2lucmVnVGVzdHMpOgorCisgICAgZGVmIHRlc3RfcmVtb3RlX3JlZ2lzdHJ5X3dvcmtzKHNlbGYpOgorICAgICAgICByZW1vdGVfa2V5ID0gQ29ubmVjdFJlZ2lzdHJ5KFJFTU9URV9OQU1FLCBIS0VZX0NVUlJFTlRfVVNFUikKKyAgICAgICAgc2VsZi5fdGVzdF9hbGwocmVtb3RlX2tleSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhXSU42NF9NQUNISU5FLCAieDY0IHNwZWNpZmljIHJlZ2lzdHJ5IHRlc3RzIikKK2NsYXNzIFdpbjY0V2lucmVnVGVzdHMoQmFzZVdpbnJlZ1Rlc3RzKToKKworICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb25fZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gY2FsbCB0aGUgcXVlcnksIGVuYWJsZSwgYW5kIGRpc2FibGUgZnVuY3Rpb25zCisgICAgICAgICMgb24gYSBrZXkgd2hpY2ggaXNuJ3Qgb24gdGhlIHJlZmxlY3Rpb24gbGlzdCB3aXRoIG5vIGNvbnNlcXVlbmNlcy4KKyAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlIikgYXMga2V5OgorICAgICAgICAgICAgIyBIS0xNXFNvZnR3YXJlIGlzIHJlZGlyZWN0ZWQgYnV0IG5vdCByZWZsZWN0ZWQgaW4gYWxsIE9TZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShRdWVyeVJlZmxlY3Rpb25LZXkoa2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgRW5hYmxlUmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBEaXNhYmxlUmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1JFRkxFQ1RJT04sICJPUyBkb2Vzbid0IHN1cHBvcnQgcmVmbGVjdGlvbiIpCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIGNyZWF0ZSwgb3BlbiwgYW5kIGRlbGV0ZSBrZXlzIGluIHRoZSAzMi1iaXQKKyAgICAgICAgIyBhcmVhLiBCZWNhdXNlIHdlIGFyZSBkb2luZyB0aGlzIGluIGEga2V5IHdoaWNoIGdldHMgcmVmbGVjdGVkLAorICAgICAgICAjIHRlc3QgdGhlIGRpZmZlcmVuY2VzIG9mIDMyIGFuZCA2NC1iaXQga2V5cyBiZWZvcmUgYW5kIGFmdGVyIHRoZQorICAgICAgICAjIHJlZmxlY3Rpb24gb2NjdXJzIChpZS4gd2hlbiB0aGUgY3JlYXRlZCBrZXkgaXMgY2xvc2VkKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF8zMktFWSkgYXMgY3JlYXRlZF9rZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjcmVhdGVkX2tleS5oYW5kbGUsIDApCisKKyAgICAgICAgICAgICAgICAjIFRoZSBrZXkgc2hvdWxkIG5vdyBiZSBhdmFpbGFibGUgaW4gdGhlIDMyLWJpdCBhcmVhCisgICAgICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKworICAgICAgICAgICAgICAgICMgV3JpdGUgYSB2YWx1ZSB0byB3aGF0IGN1cnJlbnRseSBpcyBvbmx5IGluIHRoZSAzMi1iaXQgYXJlYQorICAgICAgICAgICAgICAgIFNldFZhbHVlRXgoY3JlYXRlZF9rZXksICIiLCAwLCBSRUdfU1osICIzMktFWSIpCisKKyAgICAgICAgICAgICAgICAjIFRoZSBrZXkgaXMgbm90IHJlZmxlY3RlZCB1bnRpbCBjcmVhdGVkX2tleSBpcyBjbG9zZWQuCisgICAgICAgICAgICAgICAgIyBUaGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleSBzaG91bGQgbm90IGJlIGF2YWlsYWJsZSB5ZXQuCisgICAgICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorCisgICAgICAgICAgICAjIE5vdyBleHBsaWNpdGx5IG9wZW4gdGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBrZXkKKyAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzY0S0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBvcmlnaW5hbCB2YWx1ZSB3ZSBzZXQgaXMgdGhlcmUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIzMktFWSIsIFF1ZXJ5VmFsdWUoa2V5LCAiIikpCisgICAgICAgICAgICAgICAgIyBTZXQgYSBuZXcgdmFsdWUsIHdoaWNoIHdpbGwgZ2V0IHJlZmxlY3RlZCB0byAzMi1iaXQKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZUV4KGtleSwgIiIsIDAsIFJFR19TWiwgIjY0S0VZIikKKworICAgICAgICAgICAgIyBSZWZsZWN0aW9uIHVzZXMgYSAibGFzdC13cml0ZXIgd2lucyBwb2xpY3ksIHNvIHRoZSB2YWx1ZSB3ZSBzZXQKKyAgICAgICAgICAgICMgb24gdGhlIDY0LWJpdCBrZXkgc2hvdWxkIGJlIHRoZSBzYW1lIG9uIDMyLWJpdAorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI2NEtFWSIsIFF1ZXJ5VmFsdWUoa2V5LCAiIikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBEZWxldGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1dPVzY0XzMyS0VZLCAwKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1JFRkxFQ1RJT04sICJPUyBkb2Vzbid0IHN1cHBvcnQgcmVmbGVjdGlvbiIpCisgICAgZGVmIHRlc3RfZGlzYWJsZV9yZWZsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIE1ha2UgdXNlIG9mIGEga2V5IHdoaWNoIGdldHMgcmVkaXJlY3RlZCBhbmQgcmVmbGVjdGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGNyZWF0ZWRfa2V5OgorICAgICAgICAgICAgICAgICMgUXVlcnlSZWZsZWN0aW9uS2V5IHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGtleSBpcyBkaXNhYmxlZAorICAgICAgICAgICAgICAgIGRpc2FibGVkID0gUXVlcnlSZWZsZWN0aW9uS2V5KGNyZWF0ZWRfa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkaXNhYmxlZCksIGJvb2wpCisgICAgICAgICAgICAgICAgIyBIS0NVXFNvZnR3YXJlXENsYXNzZXMgaXMgcmVmbGVjdGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRpc2FibGVkKQorCisgICAgICAgICAgICAgICAgRGlzYWJsZVJlZmxlY3Rpb25LZXkoY3JlYXRlZF9rZXkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFF1ZXJ5UmVmbGVjdGlvbktleShjcmVhdGVkX2tleSkpCisKKyAgICAgICAgICAgICMgVGhlIGtleSBpcyBub3cgY2xvc2VkIGFuZCB3b3VsZCBub3JtYWxseSBiZSByZWZsZWN0ZWQgdG8gdGhlCisgICAgICAgICAgICAjIDY0LWJpdCBhcmVhLCBidXQgbGV0J3MgbWFrZSBzdXJlIHRoYXQgZGlkbid0IGhhcHBlbi4KKyAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKKyAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF8zMktFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBLRVlfV09XNjRfMzJLRVksIDApCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoV2lucmVnVGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NhbFdpbnJlZ1Rlc3RzLCBSZW1vdGVXaW5yZWdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbjY0V2lucmVnVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdHJ5OgotICAgICAgICBXaW5yZWdUZXN0cy5yZW1vdGVfbmFtZSA9IHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCItLXJlbW90ZSIpKzFdCi0gICAgZXhjZXB0IChJbmRleEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICBpZiBub3QgUkVNT1RFX05BTUU6CiAgICAgICAgIHByaW50ICJSZW1vdGUgcmVnaXN0cnkgY2FsbHMgY2FuIGJlIHRlc3RlZCB1c2luZyIsCiAgICAgICAgIHByaW50ICIndGVzdF93aW5yZWcucHkgLS1yZW1vdGUgXFxcXG1hY2hpbmVfbmFtZSciCi0gICAgICAgIFdpbnJlZ1Rlc3RzLnJlbW90ZV9uYW1lID0gTm9uZQogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCBkZTQ0NDIyLi44MjFkNjg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTUsMTIgKzUsMTEgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgb3MKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgY3R5cGVzCiAKIHdpbnNvdW5kID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3dpbnNvdW5kJykKK2N0eXBlcyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQogaW1wb3J0IF93aW5yZWcKIAotCiBkZWYgaGFzX3NvdW5kKHNvdW5kKToKICAgICAiIiJGaW5kIG91dCBpZiBhIHBhcnRpY3VsYXIgZXZlbnQgaXMgY29uZmlndXJlZCB3aXRoIGEgZGVmYXVsdCBzb3VuZCIiIgogICAgIHRyeToKQEAgLTEwMyw5ICsxMDIsOCBAQAogICAgICAgICAgICAgIm5vbmUiLCB3aW5zb3VuZC5TTkRfQVNZTkMgfCB3aW5zb3VuZC5TTkRfTUVNT1JZCiAgICAgICAgICkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc19zb3VuZCgiU3lzdGVtQXN0ZXJpc2siKSwgIk5vIGRlZmF1bHQgU3lzdGVtQXN0ZXJpc2siKQogICAgIGRlZiB0ZXN0X2FsaWFzX2FzdGVyaXNrKHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzX3NvdW5kKCJTeXN0ZW1Bc3RlcmlzayIpOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgogICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1Bc3RlcmlzaycsIHdpbnNvdW5kLlNORF9BTElBUykKICAgICAgICAgZWxzZToKQEAgLTExNSw5ICsxMTMsOCBAQAogICAgICAgICAgICAgICAgICdTeXN0ZW1Bc3RlcmlzaycsIHdpbnNvdW5kLlNORF9BTElBUwogICAgICAgICAgICAgKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1FeGNsYW1hdGlvbiIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1FeGNsYW1hdGlvbiIpCiAgICAgZGVmIHRlc3RfYWxpYXNfZXhjbGFtYXRpb24oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNfc291bmQoIlN5c3RlbUV4Y2xhbWF0aW9uIik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CiAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUV4Y2xhbWF0aW9uJywgd2luc291bmQuU05EX0FMSUFTKQogICAgICAgICBlbHNlOgpAQCAtMTI3LDkgKzEyNCw4IEBACiAgICAgICAgICAgICAgICAgJ1N5c3RlbUV4Y2xhbWF0aW9uJywgd2luc291bmQuU05EX0FMSUFTCiAgICAgICAgICAgICApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbUV4aXQiKSwgIk5vIGRlZmF1bHQgU3lzdGVtRXhpdCIpCiAgICAgZGVmIHRlc3RfYWxpYXNfZXhpdChzZWxmKToKLSAgICAgICAgaWYgbm90IGhhc19zb3VuZCgiU3lzdGVtRXhpdCIpOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgogICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1FeGl0Jywgd2luc291bmQuU05EX0FMSUFTKQogICAgICAgICBlbHNlOgpAQCAtMTM5LDkgKzEzNSw4IEBACiAgICAgICAgICAgICAgICAgJ1N5c3RlbUV4aXQnLCB3aW5zb3VuZC5TTkRfQUxJQVMKICAgICAgICAgICAgICkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc19zb3VuZCgiU3lzdGVtSGFuZCIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1IYW5kIikKICAgICBkZWYgdGVzdF9hbGlhc19oYW5kKHNlbGYpOgotICAgICAgICBpZiBub3QgaGFzX3NvdW5kKCJTeXN0ZW1IYW5kIik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CiAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUhhbmQnLCB3aW5zb3VuZC5TTkRfQUxJQVMpCiAgICAgICAgIGVsc2U6CkBAIC0xNTEsOSArMTQ2LDggQEAKICAgICAgICAgICAgICAgICAnU3lzdGVtSGFuZCcsIHdpbnNvdW5kLlNORF9BTElBUwogICAgICAgICAgICAgKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1RdWVzdGlvbiIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1RdWVzdGlvbiIpCiAgICAgZGVmIHRlc3RfYWxpYXNfcXVlc3Rpb24oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBoYXNfc291bmQoIlN5c3RlbVF1ZXN0aW9uIik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CiAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbVF1ZXN0aW9uJywgd2luc291bmQuU05EX0FMSUFTKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aXRoLnB5IGIvTGliL3Rlc3QvdGVzdF93aXRoLnB5CmluZGV4IDEzNjRiZWYuLjQ5NjQ1MTgzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aXRoLnB5CkBAIC0yMTMsMTEgKzIxMywxNyBAQAogICAgIGRlZiByYWlzZVRlc3RFeGNlcHRpb24oc2VsZik6CiAgICAgICAgIHJhaXNlIHNlbGYuVEVTVF9FWENFUFRJT04KIAotICAgIGRlZiBhc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLCBtb2NrX21hbmFnZXIpOgorICAgIGRlZiBhc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLCBtb2NrX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y190eXBlPU5vbmUpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmVudGVyX2NhbGxlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfbWFuYWdlci5leGl0X2NhbGxlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzBdLCBSdW50aW1lRXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1sxXSwgc2VsZi5URVNUX0VYQ0VQVElPTikKKyAgICAgICAgaWYgZXhjX3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1sxXSwgc2VsZi5URVNUX0VYQ0VQVElPTikKKyAgICAgICAgICAgIGV4Y190eXBlID0gdHlwZShzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMF0sIGV4Y190eXBlKQorICAgICAgICAjIFRlc3QgdGhlIF9fZXhpdF9fIGFyZ3VtZW50cy4gSXNzdWUgIzc4NTMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMV0sIGV4Y190eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMl0sIE5vbmUpCiAKICAgICBkZWYgYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLCBtb2NrX2dlbmVyYXRvcik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX2dlbmVyYXRvci55aWVsZGVkKQpAQCAtMjgzLDE1ICsyODksNiBAQAogICAgICAgICB3aXRoIE5lc3RlZChtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpKToKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0U2luZ2xlQXJnVW5ib3VuZChzZWxmKToKLSAgICAgICAgbW9ja19jb250ZXh0bWFuYWdlciA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKLSAgICAgICAgbW9ja19uZXN0ZWQgPSBNb2NrTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXIpCi0gICAgICAgIHdpdGggbW9ja19uZXN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfY29udGV4dG1hbmFnZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfbmVzdGVkKQotICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX2NvbnRleHRtYW5hZ2VyKQotICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX25lc3RlZCkKLQogICAgIGRlZiB0ZXN0U2luZ2xlQXJnQm91bmRUb05vblR1cGxlKHNlbGYpOgogICAgICAgICBtID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQogICAgICAgICAjIFRoaXMgd2lsbCBiaW5kIGFsbCB0aGUgYXJndW1lbnRzIHRvIG5lc3RlZCgpIGludG8gYSBzaW5nbGUgbGlzdApAQCAtMzY0LDYgKzM2MSwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKGNtKQogICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5yZXNvdXJjZSkKIAorICAgIGRlZiB0ZXN0RXhjZXB0aW9uTm9ybWFsaXplZChzZWxmKToKKyAgICAgICAgY20gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSBhcyBzZWxmLnJlc291cmNlOgorICAgICAgICAgICAgICAgICMgTm90ZSB0aGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IDEgLy8gMCBwcm9kdWNlcyBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAjIHRoYXQgaXMgbm90IG5vcm1hbGl6ZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzaG91bGRUaHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihjbSwgWmVyb0RpdmlzaW9uRXJyb3IpCisKICAgICBkZWYgdGVzdE5lc3RlZFNpbmdsZVN0YXRlbWVudHMoc2VsZik6CiAgICAgICAgIG1vY2tfYSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKICAgICAgICAgbW9ja19iID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQpAQCAtNjU0LDEyICs2NjEsODkgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiWmVyb0RpdmlzaW9uRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQogCiAKK2NsYXNzIE5lc3RlZFdpdGgodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgRHVtbXkob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPU5vbmUsIGdvYmJsZT1GYWxzZSk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZgorICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBzZWxmLmdvYmJsZSA9IGdvYmJsZQorICAgICAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KKyAgICAgICAgICAgIGlmIHNlbGYuZ29iYmxlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBjbGFzcyBJbml0UmFpc2VzKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGNsYXNzIEVudGVyUmFpc2VzKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOiBwYXNzCisKKyAgICBjbGFzcyBFeGl0UmFpc2VzKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6IHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICBkZWYgdGVzdE5vRXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLkR1bW15KCkgYXMgYSwgc2VsZi5EdW1teSgpIGFzIGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbnRlcl9jYWxsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmV4aXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5leGl0X2NhbGxlZCkKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uSW5FeHByTGlzdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLkR1bW15KCkgYXMgYSwgc2VsZi5Jbml0UmFpc2VzKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisKKyAgICBkZWYgdGVzdEV4Y2VwdGlvbkluRW50ZXIoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5EdW1teSgpIGFzIGEsIHNlbGYuRW50ZXJSYWlzZXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2JvZHkgb2YgYmFkIHdpdGggZXhlY3V0ZWQnKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdSdW50aW1lRXJyb3Igbm90IHJlcmFpc2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uSW5FeGl0KHNlbGYpOgorICAgICAgICBib2R5X2V4ZWN1dGVkID0gRmFsc2UKKyAgICAgICAgd2l0aCBzZWxmLkR1bW15KGdvYmJsZT1UcnVlKSBhcyBhLCBzZWxmLkV4aXRSYWlzZXMoKToKKyAgICAgICAgICAgIGJvZHlfZXhlY3V0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib2R5X2V4ZWN1dGVkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEuZXhjX2luZm9bMF0sIE5vbmUpCisKKyAgICBkZWYgdGVzdEVudGVyUmV0dXJuc1R1cGxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuRHVtbXkodmFsdWU9KDEsMikpIGFzIChhMSwgYTIpLCBcCisgICAgICAgICAgICAgc2VsZi5EdW1teSh2YWx1ZT0oMTAsIDIwKSkgYXMgKGIxLCBiMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAsIGIxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMCwgYjIpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoRmFpbHVyZVRlc3RDYXNlLCBOb25leGNlcHRpb25hbFRlc3RDYXNlLAogICAgICAgICAgICAgICAgICBOZXN0ZWROb25leGNlcHRpb25hbFRlc3RDYXNlLCBFeGNlcHRpb25hbFRlc3RDYXNlLAogICAgICAgICAgICAgICAgICBOb25Mb2NhbEZsb3dDb250cm9sVGVzdENhc2UsCiAgICAgICAgICAgICAgICAgIEFzc2lnbm1lbnRUYXJnZXRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgRXhpdFN3YWxsb3dzRXhjZXB0aW9uVGVzdENhc2UpCisgICAgICAgICAgICAgICAgIEV4aXRTd2FsbG93c0V4Y2VwdGlvblRlc3RDYXNlLAorICAgICAgICAgICAgICAgICBOZXN0ZWRXaXRoKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkgYi9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCAwZDc2NTk1Li40NWNhNjIwCi0tLSBhL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgc3RhcnRfcmVzcG9uc2UoIjIwMCBPSyIsICgnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpKQogICAgICAgICAgICAgcmV0dXJuIFsiSGVsbG8sIHdvcmxkISJdCiAgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKHZhbGlkYXRvcihiYWRfYXBwKSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKG91dC5lbmRzd2l0aCgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5lbmRzd2l0aCgKICAgICAgICAgICAgICJBIHNlcnZlciBlcnJvciBvY2N1cnJlZC4gIFBsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLiIKICAgICAgICAgKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTE3OSwxNSArMTc5LDE1IEBACiAgICAgICAgICMgQ2hlY2sgZGVmYXVsdGluZyB3aGVuIGVtcHR5CiAgICAgICAgIGVudiA9IHt9CiAgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhlbnYpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsU3RyaW5nSU8pOgotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGlzaW5zdGFuY2UoZW52W2tleV0sU3RyaW5nSU8pKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBTdHJpbmdJTyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW52W2tleV0sIFN0cmluZ0lPKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZba2V5XSx2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52W2tleV0sIHZhbHVlKQogCiAgICAgICAgICMgQ2hlY2sgZXhpc3RpbmcgdmFsdWUKICAgICAgICAgZW52ID0ge2tleTphbHR9CiAgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhlbnYpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzcyhlbnZba2V5XSBpcyBhbHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnZba2V5XSBpcyBhbHQpCiAKICAgICBkZWYgY2hlY2tDcm9zc0RlZmF1bHQoc2VsZixrZXksdmFsdWUsKiprdyk6CiAgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhrdykKQEAgLTIxNCwxNSArMjE0LDE1IEBACiAgICAgICAgIGNvbXBhcmVfZ2VuZXJpY19pdGVyKG1ha2VfaXQsbWF0Y2gpCiAKICAgICAgICAgaXQgPSBtYWtlX2l0KCkKLSAgICAgICAgc2VsZi5mYWlsSWYoaXQuZmlsZWxpa2UuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGl0LmZpbGVsaWtlLmNsb3NlZCkKIAogICAgICAgICBmb3IgaXRlbSBpbiBpdDoKICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBzZWxmLmZhaWxJZihpdC5maWxlbGlrZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXQuZmlsZWxpa2UuY2xvc2VkKQogCiAgICAgICAgIGl0LmNsb3NlKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGl0LmZpbGVsaWtlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGl0LmZpbGVsaWtlLmNsb3NlZCkKIAogCiAgICAgZGVmIHRlc3RTaW1wbGVTaGlmdHMoc2VsZik6CkBAIC0zMDYsNiArMzA2LDEwIEBACiAgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbSIsIFNDUklQVF9OQU1FPSIvc3BhbSIpCiAgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbSIsCiAgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbSIpCisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbTtoYW0iLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW07aGFtIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtO2Nvb2tpZT0xMjM0LDU2NzgiLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW07Y29va2llPTEyMzQsNTY3OCIpCiAgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbT9zYXk9bmkiLAogICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW0iLFFVRVJZX1NUUklORz0ic2F5PW5pIikKICAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtIiwgMCwKQEAgLTMyMCwxNCArMzI0LDE0IEBACiAgICAgICAgICAgICAiVEUgVHJhaWxlcnMgVHJhbnNmZXItRW5jb2RpbmcgVXBncmFkZSIKICAgICAgICAgKS5zcGxpdCgpOgogICAgICAgICAgICAgZm9yIGFsdCBpbiBob3AsIGhvcC50aXRsZSgpLCBob3AudXBwZXIoKSwgaG9wLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHV0aWwuaXNfaG9wX2J5X2hvcChhbHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1dGlsLmlzX2hvcF9ieV9ob3AoYWx0KSkKIAogICAgICAgICAjIE5vdCBjb21wcmVoZW5zaXZlLCBqdXN0IGEgZmV3IHJhbmRvbSBoZWFkZXIgbmFtZXMKICAgICAgICAgZm9yIGhvcCBpbiAoCiAgICAgICAgICAgICAiQWNjZXB0IENhY2hlLUNvbnRyb2wgRGF0ZSBQcmFnbWEgVHJhaWxlciBWaWEgV2FybmluZyIKICAgICAgICAgKS5zcGxpdCgpOgogICAgICAgICAgICAgZm9yIGFsdCBpbiBob3AsIGhvcC50aXRsZSgpLCBob3AudXBwZXIoKSwgaG9wLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYodXRpbC5pc19ob3BfYnlfaG9wKGFsdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1dGlsLmlzX2hvcF9ieV9ob3AoYWx0KSkKIAogY2xhc3MgSGVhZGVyVGVzdHMoVGVzdENhc2UpOgogCkBAIC0zMzgsMTcgKzM0MiwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhlYWRlcnModGVzdFs6XSkua2V5cygpLCBbJ3gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLnZhbHVlcygpLCBbJ3knXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLml0ZW1zKCksIHRlc3QpCi0gICAgICAgIHNlbGYuZmFpbElmKEhlYWRlcnModGVzdCkuaXRlbXMoKSBpcyB0ZXN0KSAgIyBtdXN0IGJlIGNvcHkhCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoSGVhZGVycyh0ZXN0KS5pdGVtcygpIGlzIHRlc3QpICAjIG11c3QgYmUgY29weSEKIAogICAgICAgICBoPUhlYWRlcnMoW10pCiAgICAgICAgIGRlbCBoWydmb28nXSAgICMgc2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvcgogCiAgICAgICAgIGhbJ0ZvbyddID0gJ2JhcicKICAgICAgICAgZm9yIG0gaW4gaC5oYXNfa2V5LCBoLl9fY29udGFpbnNfXywgaC5nZXQsIGguZ2V0X2FsbCwgaC5fX2dldGl0ZW1fXzoKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhtKCdmb28nKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhtKCdGb28nKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhtKCdGT08nKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbElmKG0oJ2JhcicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0oJ2ZvbycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0oJ0ZvbycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0oJ0ZPTycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtKCdiYXInKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhbJ2ZvbyddLCdiYXInKQogICAgICAgICBoWydmb28nXSA9ICdiYXonCkBAIC00MzUsNyArNDM5LDcgQEAKICAgICAgICAgICAgIGlmIGsgbm90IGluIGVtcHR5OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52W2tdLHYpCiAgICAgICAgIGZvciBrLHYgaW4gZW1wdHkuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIGVudikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZW52KQogCiAgICAgZGVmIHRlc3RFbnZpcm9uKHNlbGYpOgogICAgICAgICBoID0gVGVzdEhhbmRsZXIoWD0iWSIpCkBAIC00NDgsNyArNDUyLDcgQEAKICAgICAgICAgaCA9IEJhc2VDR0lIYW5kbGVyKE5vbmUsTm9uZSxOb25lLHt9KQogICAgICAgICBoLnNldHVwX2Vudmlyb24oKQogICAgICAgICBmb3Iga2V5IGluICd3c2dpLnVybF9zY2hlbWUnLCAnd3NnaS5pbnB1dCcsICd3c2dpLmVycm9ycyc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIGguZW52aXJvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBoLmVudmlyb24pCiAKICAgICBkZWYgdGVzdFNjaGVtZShzZWxmKToKICAgICAgICAgaD1UZXN0SGFuZGxlcihIVFRQUz0ib24iKTsgaC5zZXR1cF9lbnZpcm9uKCkKQEAgLTQ3Nyw2ICs0ODEsMTEgQEAKICAgICAgICAgICAgIHMoJzIwMCBPSycsW10pKGVbJ3dzZ2kudXJsX3NjaGVtZSddKQogICAgICAgICAgICAgcmV0dXJuIFtdCiAKKyAgICAgICAgZGVmIHRyaXZpYWxfYXBwNChlLHMpOgorICAgICAgICAgICAgIyBTaW11bGF0ZSBhIHJlc3BvbnNlIHRvIGEgSEVBRCByZXF1ZXN0CisgICAgICAgICAgICBzKCcyMDAgT0snLFsoJ0NvbnRlbnQtTGVuZ3RoJywgJzEyMzQ1JyldKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKICAgICAgICAgaCA9IFRlc3RIYW5kbGVyKCkKICAgICAgICAgaC5ydW4odHJpdmlhbF9hcHAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCkBAIC00OTMsMTAgKzUwMiwxMiBAQAogICAgICAgICAgICAgImh0dHAiKQogCiAKLQotCi0KLQorICAgICAgICBoID0gVGVzdEhhbmRsZXIoKQorICAgICAgICBoLnJ1bih0cml2aWFsX2FwcDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGInU3RhdHVzOiAyMDAgT0tcclxuJworICAgICAgICAgICAgYidDb250ZW50LUxlbmd0aDogMTIzNDVcclxuJworICAgICAgICAgICAgYidcclxuJykKIAogICAgIGRlZiB0ZXN0QmFzaWNFcnJvck91dHB1dChzZWxmKToKIApAQCAtNTIzLDggKzUzNCw3IEBACiAgICAgICAgICAgICAiQ29udGVudC1MZW5ndGg6ICVkXHJcbiIKICAgICAgICAgICAgICJcclxuJXMiICUgKGguZXJyb3Jfc3RhdHVzLGxlbihoLmVycm9yX2JvZHkpLGguZXJyb3JfYm9keSkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJBc3NlcnRpb25FcnJvciIgaW4gaC5zdGRlcnIuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBc3NlcnRpb25FcnJvciBub3QgaW4gc3RkZXJyIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLnN0ZGVyci5nZXR2YWx1ZSgpLmZpbmQoIkFzc2VydGlvbkVycm9yIiksIC0xKQogCiAgICAgZGVmIHRlc3RFcnJvckFmdGVyT3V0cHV0KHNlbGYpOgogICAgICAgICBNU0cgPSAiU29tZSBvdXRwdXQgaGFzIGJlZW4gc2VudCIKQEAgLTUzNyw4ICs1NDcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCiAgICAgICAgICAgICAiU3RhdHVzOiAyMDAgT0tcclxuIgogICAgICAgICAgICAgIlxyXG4iK01TRykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJBc3NlcnRpb25FcnJvciIgaW4gaC5zdGRlcnIuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBc3NlcnRpb25FcnJvciBub3QgaW4gc3RkZXJyIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLnN0ZGVyci5nZXR2YWx1ZSgpLmZpbmQoIkFzc2VydGlvbkVycm9yIiksIC0xKQogCiAKICAgICBkZWYgdGVzdEhlYWRlckZvcm1hdHMoc2VsZik6CkBAIC01NzcsNyArNTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG89PSJIVFRQLzAuOSI6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksIiIpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUubWF0Y2goc3RkcGF0JSh2ZXJzaW9uLHN3KSwgaC5zdGRvdXQuZ2V0dmFsdWUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZHBhdCUodmVyc2lvbixzdyksIGguc3Rkb3V0LmdldHZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CmluZGV4IDhmYzg4YTUuLmFiNmU0NjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CkBAIC0zMCwxNSArMzAsMTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja19pbnQoKSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX3VpbnQoKSwgOSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKHVwLnVucGFja19ib29sKCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVwLnVucGFja19ib29sKCkgaXMgVHJ1ZSkKIAogICAgICAgICAjIHJlbWVtYmVyIHBvc2l0aW9uCiAgICAgICAgIHBvcyA9IHVwLmdldF9wb3NpdGlvbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXAudW5wYWNrX2Jvb2woKSBpcyBGYWxzZSkKIAogICAgICAgICAjIHJld2luZCBhbmQgdW5wYWNrIGFnYWluCiAgICAgICAgIHVwLnNldF9wb3NpdGlvbihwb3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXAudW5wYWNrX2Jvb2woKSBpcyBGYWxzZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja191aHlwZXIoKSwgNDVMKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHVwLnVucGFja19mbG9hdCgpLCAxLjkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CmluZGV4IDJlMjRlZDEuLjI2ZThlYWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CkBAIC0xLDIyICsxLDQ3IEBACiAjIHhtbC5ldHJlZSB0ZXN0LiAgVGhpcyBmaWxlIGNvbnRhaW5zIGVub3VnaCB0ZXN0cyB0byBtYWtlIHN1cmUgdGhhdAotIyBhbGwgaW5jbHVkZWQgY29tcG9uZW50cyB3b3JrIGFzIHRoZXkgc2hvdWxkLiAgRm9yIGEgbW9yZSBleHRlbnNpdmUKLSMgdGVzdCBzdWl0ZSwgc2VlIHRoZSBzZWxmdGVzdCBzY3JpcHQgaW4gdGhlIEVsZW1lbnRUcmVlIGRpc3RyaWJ1dGlvbi4KKyMgYWxsIGluY2x1ZGVkIGNvbXBvbmVudHMgd29yayBhcyB0aGV5IHNob3VsZC4KKyMgTGFyZ2UgcGFydHMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSB1cHN0cmVhbSB0ZXN0IHN1aXRlLgogCi1pbXBvcnQgZG9jdGVzdAorIyBJTVBPUlRBTlQ6IHRoZSBzYW1lIGRvY3Rlc3RzIGFyZSBydW4gZnJvbSAidGVzdF94bWxfZXRyZWVfYyIgaW4KKyMgb3JkZXIgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIEMgaW1wbGVtZW50YXRpb24gYW5kIHRoZQorIyBQeXRob24gaW1wbGVtZW50YXRpb24uCisjCisjIEZvciB0aGlzIHB1cnBvc2UsIHRoZSBtb2R1bGUtbGV2ZWwgIkVUIiBzeW1ib2wgaXMgdGVtcG9yYXJpbHkKKyMgbW9ua2V5LXBhdGNoZWQgd2hlbiBydW5uaW5nIHRoZSAidGVzdF94bWxfZXRyZWVfYyIgdGVzdCBzdWl0ZS4KKyMgRG9uJ3QgcmUtaW1wb3J0ICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUiIG1vZHVsZSBpbiB0aGUgZG9jc3RyaW5nLAorIyBleGNlcHQgaWYgdGhlIHRlc3QgaXMgc3BlY2lmaWMgdG8gdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKwogaW1wb3J0IHN5cworaW1wb3J0IGNnaQogCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUKIAotU0FNUExFX1hNTCA9ICIiIgorZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIEVUCisKK1NJTVBMRV9YTUxGSUxFID0gZmluZGZpbGUoInNpbXBsZS54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKK1NJTVBMRV9OU19YTUxGSUxFID0gZmluZGZpbGUoInNpbXBsZS1ucy54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKKworU0FNUExFX1hNTCA9ICIiIlwKIDxib2R5PgotICA8dGFnPnRleHQ8L3RhZz4KLSAgPHRhZyAvPgorICA8dGFnIGNsYXNzPSdhJz50ZXh0PC90YWc+CisgIDx0YWcgY2xhc3M9J2InIC8+CiAgIDxzZWN0aW9uPgotICAgIDx0YWc+c3VidGV4dDwvdGFnPgorICAgIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogICA8L3NlY3Rpb24+CiA8L2JvZHk+CiAiIiIKIAorU0FNUExFX1NFQ1RJT04gPSAiIiJcCis8c2VjdGlvbj4KKyAgPHRhZyBjbGFzcz0nYicgaWQ9J2lubmVyJz5zdWJ0ZXh0PC90YWc+CisgIDxuZXh0dGFnIC8+CisgIDxuZXh0c2VjdGlvbj4KKyAgICA8dGFnIC8+CisgIDwvbmV4dHNlY3Rpb24+Cis8L3NlY3Rpb24+CisiIiIKKwogU0FNUExFX1hNTF9OUyA9ICIiIgogPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICAgPHRhZz50ZXh0PC90YWc+CkBAIC0yNyw2ICs1Miw3IEBACiA8L2JvZHk+CiAiIiIKIAorCiBkZWYgc2FuaXR5KCk6CiAgICAgIiIiCiAgICAgSW1wb3J0IHNhbml0eS4KQEAgLTQwLDM4ICs2Niw5OSBAQAogICAgIGlmIG5vdCBoYXNhdHRyKG1ldGhvZCwgJ19fY2FsbF9fJyk6CiAgICAgICAgIHByaW50IG1ldGhvZCwgIm5vdCBjYWxsYWJsZSIKIAotZGVmIHNlcmlhbGl6ZShFVCwgZWxlbSwgZW5jb2Rpbmc9Tm9uZSk6CitkZWYgc2VyaWFsaXplKGVsZW0sIHRvX3N0cmluZz1UcnVlLCAqKm9wdGlvbnMpOgogICAgIGltcG9ydCBTdHJpbmdJTwogICAgIGZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCi0gICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgIHRyZWUud3JpdGUoZmlsZSwgZW5jb2RpbmcpCisgICAgdHJlZS53cml0ZShmaWxlLCAqKm9wdGlvbnMpCisgICAgaWYgdG9fc3RyaW5nOgorICAgICAgICByZXR1cm4gZmlsZS5nZXR2YWx1ZSgpCiAgICAgZWxzZToKLSAgICAgICAgdHJlZS53cml0ZShmaWxlKQotICAgIHJldHVybiBmaWxlLmdldHZhbHVlKCkKKyAgICAgICAgZmlsZS5zZWVrKDApCisgICAgICAgIHJldHVybiBmaWxlCiAKIGRlZiBzdW1tYXJpemUoZWxlbSk6CisgICAgaWYgZWxlbS50YWcgPT0gRVQuQ29tbWVudDoKKyAgICAgICAgcmV0dXJuICI8Q29tbWVudD4iCiAgICAgcmV0dXJuIGVsZW0udGFnCiAKIGRlZiBzdW1tYXJpemVfbGlzdChzZXEpOgotICAgIHJldHVybiBtYXAoc3VtbWFyaXplLCBzZXEpCisgICAgcmV0dXJuIFtzdW1tYXJpemUoZWxlbSkgZm9yIGVsZW0gaW4gc2VxXQorCitkZWYgbm9ybWFsaXplX2NybGYodHJlZSk6CisgICAgZm9yIGVsZW0gaW4gdHJlZS5pdGVyKCk6CisgICAgICAgIGlmIGVsZW0udGV4dDoKKyAgICAgICAgICAgIGVsZW0udGV4dCA9IGVsZW0udGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikKKyAgICAgICAgaWYgZWxlbS50YWlsOgorICAgICAgICAgICAgZWxlbS50YWlsID0gZWxlbS50YWlsLnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorCitkZWYgY2hlY2tfc3RyaW5nKHN0cmluZyk6CisgICAgbGVuKHN0cmluZykKKyAgICBmb3IgY2hhciBpbiBzdHJpbmc6CisgICAgICAgIGlmIGxlbihjaGFyKSAhPSAxOgorICAgICAgICAgICAgcHJpbnQgImV4cGVjdGVkIG9uZS1jaGFyYWN0ZXIgc3RyaW5nLCBnb3QgJXIiICUgY2hhcgorICAgIG5ld19zdHJpbmcgPSBzdHJpbmcgKyAiIgorICAgIG5ld19zdHJpbmcgPSBzdHJpbmcgKyAiICIKKyAgICBzdHJpbmdbOjBdCisKK2RlZiBjaGVja19tYXBwaW5nKG1hcHBpbmcpOgorICAgIGxlbihtYXBwaW5nKQorICAgIGtleXMgPSBtYXBwaW5nLmtleXMoKQorICAgIGl0ZW1zID0gbWFwcGluZy5pdGVtcygpCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICBpdGVtID0gbWFwcGluZ1trZXldCisgICAgbWFwcGluZ1sia2V5Il0gPSAidmFsdWUiCisgICAgaWYgbWFwcGluZ1sia2V5Il0gIT0gInZhbHVlIjoKKyAgICAgICAgcHJpbnQgImV4cGVjdGVkIHZhbHVlIHN0cmluZywgZ290ICVyIiAlIG1hcHBpbmdbImtleSJdCisKK2RlZiBjaGVja19lbGVtZW50KGVsZW1lbnQpOgorICAgIGlmIG5vdCBFVC5pc2VsZW1lbnQoZWxlbWVudCk6CisgICAgICAgIHByaW50ICJub3QgYW4gZWxlbWVudCIKKyAgICBpZiBub3QgaGFzYXR0cihlbGVtZW50LCAidGFnIik6CisgICAgICAgIHByaW50ICJubyB0YWcgbWVtYmVyIgorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJhdHRyaWIiKToKKyAgICAgICAgcHJpbnQgIm5vIGF0dHJpYiBtZW1iZXIiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgInRleHQiKToKKyAgICAgICAgcHJpbnQgIm5vIHRleHQgbWVtYmVyIgorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0YWlsIik6CisgICAgICAgIHByaW50ICJubyB0YWlsIG1lbWJlciIKKworICAgIGNoZWNrX3N0cmluZyhlbGVtZW50LnRhZykKKyAgICBjaGVja19tYXBwaW5nKGVsZW1lbnQuYXR0cmliKQorICAgIGlmIGVsZW1lbnQudGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGV4dCkKKyAgICBpZiBlbGVtZW50LnRhaWwgaXMgbm90IE5vbmU6CisgICAgICAgIGNoZWNrX3N0cmluZyhlbGVtZW50LnRhaWwpCisgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKKyAgICAgICAgY2hlY2tfZWxlbWVudChlbGVtKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVsZW1lbnQgdHJlZSB0ZXN0cwogCiBkZWYgaW50ZXJmYWNlKCk6Ci0gICAgIiIiCisgICAgciIiIgogICAgIFRlc3QgZWxlbWVudCB0cmVlIGludGVyZmFjZS4KIAotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKLQotICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBjaGVja19lbGVtZW50KGVsZW1lbnQpCiAgICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtZW50KQorICAgID4+PiBjaGVja19lbGVtZW50KHRyZWUuZ2V0cm9vdCgpKQorCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0XHhlNGciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IHJlcHIoZWxlbWVudCkgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICI8RWxlbWVudCAndFxceGU0ZycgYXQgMHguLi4+IgorICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCiAKICAgICBNYWtlIHN1cmUgYWxsIHN0YW5kYXJkIGVsZW1lbnQgbWV0aG9kcyBleGlzdC4KIAogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5hcHBlbmQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmV4dGVuZCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaW5zZXJ0KQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5yZW1vdmUpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGNoaWxkcmVuKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZGFsbCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmNsZWFyKQpAQCAtNzksMzggKzE2NiwxMzQgQEAKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuc2V0KQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5rZXlzKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVtcykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcikKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcnRleHQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGl0ZXJhdG9yKQogCisgICAgVGhlc2UgbWV0aG9kcyByZXR1cm4gYW4gaXRlcmFibGUuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcmZpbmQoIioiKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyKCJ0YWciKS5uZXh0KQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcmZpbmQoIioiKS5uZXh0KQorCisgICAgVGhlc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQ6CisKKyAgICA+Pj4gYXNzZXJ0IEVULlhNTCA9PSBFVC5mcm9tc3RyaW5nCisgICAgPj4+IGFzc2VydCBFVC5QSSA9PSBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAgICA+Pj4gYXNzZXJ0IEVULlhNTFBhcnNlciA9PSBFVC5YTUxUcmVlQnVpbGRlcgorICAgICIiIgorCitkZWYgc2ltcGxlb3BzKCk6CisgICAgIiIiCiAgICAgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCiAKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDEKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoInRhZzIiKQorICAgID4+PiBlbGVtLmFwcGVuZChlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JworICAgID4+PiBlbGVtLmluc2VydCgwLCBlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZzIgLz48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gZWxlbS5leHRlbmQoW2VdKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKworICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDEKICAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKICAgICA+Pj4gc3ViZWxlbWVudCA9IEVULkVsZW1lbnQoInN1YnRhZyIpCiAgICAgPj4+IGVsZW1lbnQuYXBwZW5kKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAgMgorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAyCiAgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKICAgICA+Pj4gZWxlbWVudC5pbnNlcnQoMCwgc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMwogICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JwogICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNAorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA0CiAgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKICAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgNQogICAgICc8dGFnIGtleT0idmFsdWUiIC8+JwogICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICBWYWx1ZUVycm9yOiBsaXN0LnJlbW92ZSh4KTogeCBub3QgaW4gbGlzdAotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNgorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA2CiAgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCisgICAgPj4+IGVsZW1lbnRbMDowXSA9IFtzdWJlbGVtZW50LCBzdWJlbGVtZW50LCBzdWJlbGVtZW50XQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudFsxXSkKKyAgICAnPHN1YnRhZyAvPicKKyAgICA+Pj4gZWxlbWVudFsxOjldID09IFtlbGVtZW50WzFdLCBlbGVtZW50WzJdXQorICAgIFRydWUKKyAgICA+Pj4gZWxlbWVudFs6OToyXSA9PSBbZWxlbWVudFswXSwgZWxlbWVudFsyXV0KKyAgICBUcnVlCisgICAgPj4+IGRlbCBlbGVtZW50WzE6Ml0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpCisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCisgICAgIiIiCisKK2RlZiBjZGF0YSgpOgorICAgICIiIgorICAgIFRlc3QgQ0RBVEEgaGFuZGxpbmcgKGV0YykuCisKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz5oZWxsbzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPiYjMTA0OyYjMTAxOyYjMTA4OyYjMTA4OyYjMTExOzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPjwhW0NEQVRBW2hlbGxvXV0+PC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgIiIiCisKKyMgT25seSB3aXRoIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorZGVmIHNpbXBsZWZpbmQoKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmQgbWV0aG9kcyB1c2luZyB0aGUgZWxlbWVudHBhdGggZmFsbGJhY2suCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisKKyAgICA+Pj4gQ3VycmVudEVsZW1lbnRQYXRoID0gRWxlbWVudFRyZWUuRWxlbWVudFBhdGgKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5fU2ltcGxlRWxlbWVudFBhdGgoKQorICAgID4+PiBlbGVtID0gRWxlbWVudFRyZWUuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorCisgICAgUGF0aCBzeW50YXggZG9lc24ndCB3b3JrIGluIHRoaXMgY2FzZS4KKworICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCisgICAgW10KKworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEN1cnJlbnRFbGVtZW50UGF0aAogICAgICIiIgogCiBkZWYgZmluZCgpOgogICAgICIiIgogICAgIFRlc3QgZmluZCBtZXRob2RzIChpbmNsdWRpbmcgeHBhdGggc3ludGF4KS4KIAotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKLQogICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCiAgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCiAgICAgJ3RhZycKQEAgLTExOCwzOSArMzAxLDY3IEBACiAgICAgJ3RhZycKICAgICA+Pj4gZWxlbS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwogICAgICd0YWcnCisgICAgPj4+IGVsZW0uZmluZCgiLi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCIuL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQorICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vbmV4dHRhZyIpLnRhZworICAgICduZXh0dGFnJwogICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwogICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZy9mb28iKQogICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQogICAgICd0ZXh0JworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL25leHR0YWciKQorICAgICcnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vbmV4dHRhZyIsICJkZWZhdWx0IikKKyAgICAnJwogICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQogICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCiAgICAgJ2RlZmF1bHQnCiAgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQogICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidG9nL2ZvbyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiLi90YWciKQorICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiL3RhZyIpCisgICAgJ3RleHQnCiAgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgICAnc3VidGV4dCcKICAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInNlY3Rpb24vdGFnIikKICAgICAnc3VidGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuIikpCisgICAgWydib2R5J10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRvZyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidG9nL2ZvbyIpKQorICAgIFtdCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKiIpKQogICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnLCAndGFnJ10KKyAgICBbJ3RhZycsICd0YWcnLCAndGFnJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKICAgICBbJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vdGFnIikpCi0gICAgWyd0YWcnXQorICAgIFsndGFnJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8qIikpCi0gICAgWyd0YWcnXQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKSkKLSAgICBbJ3RhZyddCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi8vKiIpKQotICAgIFsndGFnJ10KKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJywgJ3RhZyddCiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8qIikpCi0gICAgWyd0YWcnXQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLyoiKSkKLSAgICBbJ3RhZyddCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovdGFnIikpCiAgICAgWyd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLi90YWciKSkKQEAgLTE1OCwxMyArMzY5LDQwIEBACiAgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi90YWciKSkKICAgICBbJ3RhZycsICd0YWcnXQogICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy4vdGFnIikpCiAgICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiL3RhZyIpKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3NdIikpCisgICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BjbGFzcz0nYSddIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3M9J2InXSIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnW0BpZF0iKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvblt0YWddIikpCisgICAgWydzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy9zZWN0aW9uW2VsZW1lbnRdIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLi90YWciKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi4vdGFnIikpCiAgICAgWyd0YWcnLCAndGFnJ10KICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiLi90YWciKSkKICAgICBbJ3RhZycsICd0YWcnXQorCisgICAgRm9sbG93aW5nIGV4YW1wbGUgaXMgaW52YWxpZCBpbiAxLjIuCisgICAgQSBsZWFkaW5nICcqJyBpcyBhc3N1bWVkIGluIDEuMy4KKworICAgID4+PiBlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyIpID09IGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpCisgICAgVHJ1ZQorCisgICAgRVQncyBQYXRoIG1vZHVsZSBoYW5kbGVzIHRoaXMgY2FzZSBpbmNvcnJlY3RseTsgdGhpcyBnaXZlcworICAgIGEgd2FybmluZyBpbiAxLjMsIGFuZCB0aGUgYmVoYXZpb3VyIHdpbGwgYmUgbW9kaWZpZWQgaW4gMS40LgorCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorCiAgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKICAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKICAgICBbXQpAQCAtMTc0LDIyICs0MTIsMjMwIEBACiAgICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCiAgICAgIiIiCiAKK2RlZiBmaWxlX2luaXQoKToKKyAgICAiIiIKKyAgICA+Pj4gaW1wb3J0IFN0cmluZ0lPCisKKyAgICA+Pj4gc3RyaW5nZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKFNBTVBMRV9YTUwpCisgICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShmaWxlPXN0cmluZ2ZpbGUpCisgICAgPj4+IHRyZWUuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gdHJlZS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZworICAgICd0YWcnCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9U0lNUExFX1hNTEZJTEUpCisgICAgPj4+IHRyZWUuZmluZCgiZWxlbWVudCIpLnRhZworICAgICdlbGVtZW50JworICAgID4+PiB0cmVlLmZpbmQoImVsZW1lbnQvLi4vZW1wdHktZWxlbWVudCIpLnRhZworICAgICdlbXB0eS1lbGVtZW50JworICAgICIiIgorCitkZWYgYmFkX2ZpbmQoKToKKyAgICAiIiIKKyAgICBDaGVjayBiYWQgb3IgdW5zdXBwb3J0ZWQgcGF0aCBleHByZXNzaW9ucy4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZGFsbCgiL3RhZyIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFN5bnRheEVycm9yOiBjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudAorICAgICIiIgorCitkZWYgcGF0aF9jYWNoZSgpOgorICAgICIiIgorICAgIENoZWNrIHRoYXQgdGhlIHBhdGggY2FjaGUgYmVoYXZlcyBzYW5lbHkuCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGNhY2hlX2xlbl8xMCA9IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPT0gY2FjaGVfbGVuXzEwCisgICAgVHJ1ZQorICAgID4+PiBmb3IgaSBpbiByYW5nZSgyMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpID4gY2FjaGVfbGVuXzEwCisgICAgVHJ1ZQorICAgID4+PiBmb3IgaSBpbiByYW5nZSg2MDApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA8IDUwMAorICAgIFRydWUKKyAgICAiIiIKKworZGVmIGNvcHkoKToKKyAgICAiIiIKKyAgICBUZXN0IGNvcHkgaGFuZGxpbmcgKGV0YykuCisKKyAgICA+Pj4gaW1wb3J0IGNvcHkKKyAgICA+Pj4gZTEgPSBFVC5YTUwoIjx0YWc+aGVsbG88Zm9vLz48L3RhZz4iKQorICAgID4+PiBlMiA9IGNvcHkuY29weShlMSkKKyAgICA+Pj4gZTMgPSBjb3B5LmRlZXBjb3B5KGUxKQorICAgID4+PiBlMS5maW5kKCJmb28iKS50YWcgPSAiYmFyIgorICAgID4+PiBzZXJpYWxpemUoZTEpCisgICAgJzx0YWc+aGVsbG88YmFyIC8+PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZTIpCisgICAgJzx0YWc+aGVsbG88YmFyIC8+PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZTMpCisgICAgJzx0YWc+aGVsbG88Zm9vIC8+PC90YWc+JworCisgICAgIiIiCisKK2RlZiBhdHRyaWIoKToKKyAgICAiIiIKKyAgICBUZXN0IGF0dHJpYnV0ZSBoYW5kbGluZy4KKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMS4xCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiLCAiZGVmYXVsdCIpICMgMS4yCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IGVsZW0uc2V0KCJrZXkiLCAidmFsdWUiKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjMKKyAgICAndmFsdWUnCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIGtleT0idmFsdWUiKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAyLjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgMi4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIGF0dHJpYikKKyAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDMuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyAzLjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgKiphdHRyaWIpCisgICAgPj4+IGF0dHJpYi5jbGVhcigpICMgY2hlY2sgZm9yIGFsaWFzaW5nIGlzc3VlcworICAgID4+PiBlbGVtLmdldCgia2V5IikgIyA0LjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgNC4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCB7ImtleSI6ICJvdGhlciJ9LCBrZXk9InZhbHVlIikKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgNS4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDUuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgndGVzdCcpCisgICAgPj4+IGVsZW0udGV4dCA9ICJhYSIKKyAgICA+Pj4gZWxlbS5zZXQoJ3Rlc3RhJywgJ3Rlc3R2YWwnKQorICAgID4+PiBlbGVtLnNldCgndGVzdGInLCAndGVzdDInKQorICAgID4+PiBFVC50b3N0cmluZyhlbGVtKQorICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QyIj5hYTwvdGVzdD4nCisgICAgPj4+IHNvcnRlZChlbGVtLmtleXMoKSkKKyAgICBbJ3Rlc3RhJywgJ3Rlc3RiJ10KKyAgICA+Pj4gc29ydGVkKGVsZW0uaXRlbXMoKSkKKyAgICBbKCd0ZXN0YScsICd0ZXN0dmFsJyksICgndGVzdGInLCAndGVzdDInKV0KKyAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10KKyAgICAndGVzdDInCisgICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YiddID0gJ3Rlc3QxJworICAgID4+PiBlbGVtLmF0dHJpYlsndGVzdGMnXSA9ICd0ZXN0MicKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICAnPHRlc3QgdGVzdGE9InRlc3R2YWwiIHRlc3RiPSJ0ZXN0MSIgdGVzdGM9InRlc3QyIj5hYTwvdGVzdD4nCisgICAgIiIiCisKK2RlZiBtYWtlZWxlbWVudCgpOgorICAgICIiIgorICAgIFRlc3QgbWFrZWVsZW1lbnQgaGFuZGxpbmcuCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGF0dHJpYiA9IHsia2V5IjogInZhbHVlIn0KKyAgICA+Pj4gc3ViZWxlbSA9IGVsZW0ubWFrZWVsZW1lbnQoInN1YnRhZyIsIGF0dHJpYikKKyAgICA+Pj4gaWYgc3ViZWxlbS5hdHRyaWIgaXMgYXR0cmliOgorICAgIC4uLiAgICAgcHJpbnQgImF0dHJpYiBhbGlhc2luZyIKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWcgLz4nCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisgICAgPj4+IGVsZW0uZXh0ZW5kKFtzdWJlbGVtLCBzdWJlbGVtXSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworICAgID4+PiBlbGVtWzpdID0gW3N1YmVsZW1dCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisgICAgPj4+IGVsZW1bOl0gPSB0dXBsZShbc3ViZWxlbV0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisKKyAgICAiIiIKKworZGVmIHBhcnNlZmlsZSgpOgorICAgICIiIgorICAgIFRlc3QgcGFyc2luZyBmcm9tIGZpbGUuCisKKyAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKFNJTVBMRV9YTUxGSUxFKQorICAgID4+PiBub3JtYWxpemVfY3JsZih0cmVlKQorICAgID4+PiB0cmVlLndyaXRlKHN5cy5zdGRvdXQpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKyAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKFNJTVBMRV9OU19YTUxGSUxFKQorICAgID4+PiBub3JtYWxpemVfY3JsZih0cmVlKQorICAgID4+PiB0cmVlLndyaXRlKHN5cy5zdGRvdXQpCisgICAgPG5zMDpyb290IHhtbG5zOm5zMD0ibmFtZXNwYWNlIj4KKyAgICAgICA8bnMwOmVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvbnMwOmVsZW1lbnQ+CisgICAgICAgPG5zMDplbGVtZW50PnRleHQ8L25zMDplbGVtZW50PnRhaWwKKyAgICAgICA8bnMwOmVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L25zMDpyb290PgorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpCisgICAgPj4+IHBhcnNlci52ZXJzaW9uICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICdFeHBhdCAuLi4nCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkgIyAxLjIgY29tcGF0aWJpbGl0eQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKworICAgID4+PiB0YXJnZXQgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9dGFyZ2V0KQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgID4+PiBwcmludCBzZXJpYWxpemUocGFyc2VyLmNsb3NlKCkpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKyAgICAiIiIKKwogZGVmIHBhcnNlbGl0ZXJhbCgpOgotICAgIHIiIiIKLQotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKLQorICAgICIiIgogICAgID4+PiBlbGVtZW50ID0gRVQuWE1MKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQogICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQogICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgogICAgID4+PiBlbGVtZW50ID0gRVQuZnJvbXN0cmluZygiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKICAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKICAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KKyAgICA+Pj4gc2VxdWVuY2UgPSBbIjxodG1sPjxib2R5PiIsICJ0ZXh0PC9ibyIsICJkeT48L2h0bWw+Il0KKyAgICA+Pj4gZWxlbWVudCA9IEVULmZyb21zdHJpbmdsaXN0KHNlcXVlbmNlKQogICAgID4+PiBwcmludCBFVC50b3N0cmluZyhlbGVtZW50KQogICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgotICAgID4+PiBwcmludCBFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKQotICAgIDw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+CisgICAgPj4+IHByaW50ICIiLmpvaW4oRVQudG9zdHJpbmdsaXN0KGVsZW1lbnQpKQogICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgorICAgID4+PiBFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/PlxcbjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIKICAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCiAgICAgPj4+IGxlbihpZHMpCiAgICAgMApAQCAtMjAwLDIwICs2NDYsNjAwIEBACiAgICAgJ2JvZHknCiAgICAgIiIiCiAKLQotZGVmIGNoZWNrX2VuY29kaW5nKEVULCBlbmNvZGluZyk6CitkZWYgaXRlcnBhcnNlKCk6CiAgICAgIiIiCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorICAgIFRlc3QgaXRlcnBhcnNlIGludGVyZmFjZS4KIAotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgImFzY2lpIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJ1cy1hc2NpaSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAiaXNvLTg4NTktMSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAiaXNvLTg4NTktMTUiKQotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgImNwNDM3IikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJtYWMtcm9tYW4iKQorICAgID4+PiBpdGVycGFyc2UgPSBFVC5pdGVycGFyc2UKKworICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFKQorICAgID4+PiBhY3Rpb24sIGVsZW0gPSBuZXh0KGNvbnRleHQpCisgICAgPj4+IHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBlbmQgZWxlbWVudAorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCBlbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorICAgID4+PiBjb250ZXh0LnJvb3QudGFnCisgICAgJ3Jvb3QnCisKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisKKyAgICA+Pj4gZXZlbnRzID0gKCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworCisgICAgPj4+IGV2ZW50cyA9ICgpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cz1ldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgc3RhcnQgcm9vdAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiLCAiZW5kLW5zIikKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSwgZXZlbnRzKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgaWYgYWN0aW9uIGluICgic3RhcnQiLCAiZW5kIik6CisgICAgLi4uICAgICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgLi4uICAgZWxzZToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbQorICAgIHN0YXJ0LW5zICgnJywgJ25hbWVzcGFjZScpCisgICAgc3RhcnQge25hbWVzcGFjZX1yb290CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorICAgIGVuZC1ucyBOb25lCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAiYm9ndXMiKQorICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyYiIpIGFzIGY6CisgICAgLi4uICAgICBpdGVycGFyc2UoZiwgZXZlbnRzKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiB1bmtub3duIGV2ZW50ICdib2d1cycKKworICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KKworICAgID4+PiBzb3VyY2UgPSBTdHJpbmdJTy5TdHJpbmdJTygKKyAgICAuLi4gICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XFxuIgorICAgIC4uLiAgICAgIjxib2R5IHhtbG5zPSdodHRwOi8vJiMyMzM7ZmZib3Qub3JnL25zJ1xcbiIKKyAgICAuLi4gICAgICIgICAgICB4bWxuczpjbFxceGU5PSdodHRwOi8vZWZmYm90Lm9yZy9ucyc+dGV4dDwvYm9keT5cXG4iKQorICAgID4+PiBldmVudHMgPSAoInN0YXJ0LW5zIiwpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2Uoc291cmNlLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbQorICAgIHN0YXJ0LW5zICgnJywgdSdodHRwOi8vXFx4ZTlmZmJvdC5vcmcvbnMnKQorICAgIHN0YXJ0LW5zICh1J2NsXFx4ZTknLCAnaHR0cDovL2VmZmJvdC5vcmcvbnMnKQorCisgICAgPj4+IHNvdXJjZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCI8ZG9jdW1lbnQgLz5qdW5rIikKKyAgICA+Pj4gdHJ5OgorICAgIC4uLiAgIGZvciBhY3Rpb24sIGVsZW0gaW4gaXRlcnBhcnNlKHNvdXJjZSk6CisgICAgLi4uICAgICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgLi4uIGV4Y2VwdCBFVC5QYXJzZUVycm9yLCB2OgorICAgIC4uLiAgIHByaW50IHYKKyAgICBqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQ6IGxpbmUgMSwgY29sdW1uIDEyCisgICAgIiIiCisKK2RlZiB3cml0ZWZpbGUoKToKKyAgICAiIiIKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0udGV4dCA9ICJ0ZXh0IgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz50ZXh0PC90YWc+JworICAgID4+PiBFVC5TdWJFbGVtZW50KGVsZW0sICJzdWJ0YWciKS50ZXh0ID0gInN1YnRleHQiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPnRleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz48L3RhZz4nCisKKyAgICBUZXN0IHRhZyBzdXBwcmVzc2lvbgorICAgID4+PiBlbGVtLnRhZyA9IE5vbmUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJ3RleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCisgICAgPj4+IGVsZW0uaW5zZXJ0KDAsIEVULkNvbW1lbnQoImNvbW1lbnQiKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICAgICAjIGFzc3VtZXMgMS4zCisgICAgJ3RleHQ8IS0tY29tbWVudC0tPjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICA+Pj4gZWxlbVswXSA9IEVULlBJKCJrZXkiLCAidmFsdWUiKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAndGV4dDw/a2V5IHZhbHVlPz48c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCisgICAgIiIiCisKK2RlZiBjdXN0b21fYnVpbGRlcigpOgorICAgICIiIgorICAgIFRlc3QgcGFyc2VyIHcuIGN1c3RvbSBidWlsZGVyLgorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorICAgID4+PiBjbGFzcyBCdWlsZGVyOgorICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAuLi4gICAgICAgICBwcmludCAic3RhcnQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCisgICAgLi4uICAgICBkZWYgZGF0YShzZWxmLCB0ZXh0KToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1idWlsZGVyKQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgIHN0YXJ0IHJvb3QKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbXB0eS1lbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfTlNfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorICAgID4+PiBjbGFzcyBCdWlsZGVyOgorICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAuLi4gICAgICAgICBwcmludCAic3RhcnQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCisgICAgLi4uICAgICBkZWYgZGF0YShzZWxmLCB0ZXh0KToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgLi4uICAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKKyAgICAuLi4gICAgICAgICBwcmludCAicGkiLCB0YXJnZXQsIHJlcHIoZGF0YSkKKyAgICAuLi4gICAgIGRlZiBjb21tZW50KHNlbGYsIGRhdGEpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJjb21tZW50IiwgcmVwcihkYXRhKQorICAgID4+PiBidWlsZGVyID0gQnVpbGRlcigpCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9YnVpbGRlcikKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICBwaSBwaSAnZGF0YScKKyAgICBjb21tZW50ICcgY29tbWVudCAnCisgICAgc3RhcnQge25hbWVzcGFjZX1yb290CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorCisgICAgIiIiCisKK2RlZiBnZXRjaGlsZHJlbigpOgorICAgICIiIgorICAgIFRlc3QgRWxlbWVudC5nZXRjaGlsZHJlbigpCisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAiciIpIGFzIGY6CisgICAgLi4uICAgICB0cmVlID0gRVQucGFyc2UoZikKKyAgICA+Pj4gZm9yIGVsZW0gaW4gdHJlZS5nZXRyb290KCkuaXRlcigpOgorICAgIC4uLiAgICAgc3VtbWFyaXplX2xpc3QoZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIFsnZWxlbWVudCcsICdlbGVtZW50JywgJ2VtcHR5LWVsZW1lbnQnXQorICAgIFtdCisgICAgW10KKyAgICBbXQorICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldGl0ZXJhdG9yKCk6CisgICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCisgICAgW10KKyAgICBbXQorICAgIFtdCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDMKKyAgICA+Pj4gbGVuKGVsZW1bMl0uZ2V0Y2hpbGRyZW4oKSkKKyAgICAxCisgICAgPj4+IGVsZW1bOl0gPT0gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPSBlbGVtWzBdCisgICAgPj4+IGNoaWxkMiA9IGVsZW1bMl0KKyAgICA+Pj4gZGVsIGVsZW1bMToyXQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDIKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzFdCisgICAgVHJ1ZQorICAgID4+PiBlbGVtWzA6Ml0gPSBbY2hpbGQyLCBjaGlsZDFdCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzBdCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPT0gZWxlbVsxXQorICAgIFRydWUKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBGYWxzZQorICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgW10KKyAgICAiIiIKKworZGVmIHdyaXRlc3RyaW5nKCk6CisgICAgIiIiCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPicKKyAgICA+Pj4gZWxlbSA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPicKKyAgICAiIiIKKworZGVmIGNoZWNrX2VuY29kaW5nKGVuY29kaW5nKToKKyAgICAiIiIKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImFzY2lpIikKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoInVzLWFzY2lpIikKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTEiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMTUiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiY3A0MzciKQorICAgID4+PiBjaGVja19lbmNvZGluZygibWFjLXJvbWFuIikKICAgICAiIiIKICAgICBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+PHhtbCAvPiIgJSBlbmNvZGluZykKIAorZGVmIGVuY29kaW5nKCk6CisgICAgciIiIgorICAgIFRlc3QgZW5jb2RpbmcgaXNzdWVzLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBlbGVtLnRleHQgPSB1ImFiYyIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+YWJjPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZz5hYmM8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5hYmM8L3RhZz4iCisKKyAgICA+Pj4gZWxlbS50ZXh0ID0gIjwmXCJcJz4iCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKSAjIGNkYXRhIGNoYXJhY3RlcnMKKyAgICAnPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworCisgICAgPj4+IGVsZW0uYXR0cmliWyJrZXkiXSA9ICI8JlwiXCc+IgorICAgID4+PiBlbGVtLnRleHQgPSBOb25lCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKKyAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKworICAgID4+PiBlbGVtLnRleHQgPSB1J1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLmF0dHJpYi5jbGVhcigpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZz5ceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbjx0YWc+XHhlNVx4ZjZceGY2Jmx0OyZndDs8L3RhZz4iCisKKyAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gdSdceGU1XHhmNlx4ZjY8PicKKyAgICA+Pj4gZWxlbS50ZXh0ID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyBrZXk9IiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWcga2V5PSJceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnIGtleT0iJiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZyBrZXk9Ilx4ZTVceGY2XHhmNiZsdDsmZ3Q7IiAvPicKKyAgICAiIiIKKworZGVmIG1ldGhvZHMoKToKKyAgICByIiIiCisgICAgVGVzdCBzZXJpYWxpemF0aW9uIG1ldGhvZHMuCisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPGh0bWw+PGxpbmsvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+IikKKyAgICA+Pj4gZS50YWlsID0gIlxuIgorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPU5vbmUpCisgICAgJzxodG1sPjxsaW5rIC8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD5cbicKKyAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0ieG1sIikKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJodG1sIikKKyAgICAnPGh0bWw+PGxpbms+PHNjcmlwdD4xIDwgMjwvc2NyaXB0PjwvaHRtbD5cbicKKyAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0idGV4dCIpCisgICAgJzEgPCAyXG4nCisgICAgIiIiCisKK2RlZiBpdGVyYXRvcnMoKToKKyAgICAiIiIKKyAgICBUZXN0IGl0ZXJhdG9ycy4KKworICAgID4+PiBlID0gRVQuWE1MKCI8aHRtbD48Ym9keT50aGlzIGlzIGEgPGk+cGFyYWdyYXBoPC9pPi48L2JvZHk+Li48L2h0bWw+IikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5pdGVyKCkpCisgICAgWydodG1sJywgJ2JvZHknLCAnaSddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGUuZmluZCgiYm9keSIpLml0ZXIoKSkKKyAgICBbJ2JvZHknLCAnaSddCisgICAgPj4+IHN1bW1hcml6ZShuZXh0KGUuaXRlcigpKSkKKyAgICAnaHRtbCcKKyAgICA+Pj4gIiIuam9pbihlLml0ZXJ0ZXh0KCkpCisgICAgJ3RoaXMgaXMgYSBwYXJhZ3JhcGguLi4nCisgICAgPj4+ICIiLmpvaW4oZS5maW5kKCJib2R5IikuaXRlcnRleHQoKSkKKyAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4nCisgICAgPj4+IG5leHQoZS5pdGVydGV4dCgpKQorICAgICd0aGlzIGlzIGEgJworCisgICAgTWV0aG9kIGl0ZXJwYXJzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLiBTZWUgYnVnIDY0NzIuCisKKyAgICA+Pj4gc291cmNlZmlsZSA9IHNlcmlhbGl6ZShlLCB0b19zdHJpbmc9RmFsc2UpCisgICAgPj4+IG5leHQoRVQuaXRlcnBhcnNlKHNvdXJjZWZpbGUpKSAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAoJ2VuZCcsIDxFbGVtZW50ICdpJyBhdCAweC4uLj4pCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKE5vbmUpCisgICAgPj4+IHRyZWUuaXRlcigpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIEF0dHJpYnV0ZUVycm9yOiAnTm9uZVR5cGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdpdGVyJworICAgICIiIgorCitFTlRJVFlfWE1MID0gIiIiXAorPCFET0NUWVBFIHBvaW50cyBbCis8IUVOVElUWSAlIHVzZXItZW50aXRpZXMgU1lTVEVNICd1c2VyLWVudGl0aWVzLnhtbCc+CisldXNlci1lbnRpdGllczsKK10+Cis8ZG9jdW1lbnQ+JmVudGl0eTs8L2RvY3VtZW50PgorIiIiCisKK2RlZiBlbnRpdHkoKToKKyAgICAiIiIKKyAgICBUZXN0IGVudGl0eSBoYW5kbGluZy4KKworICAgIDEpIGdvb2QgZW50aXRpZXMKKworICAgID4+PiBlID0gRVQuWE1MKCI8ZG9jdW1lbnQgdGl0bGU9JyYjeDgyMzA7Jz50ZXN0PC9kb2N1bWVudD4iKQorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvY3VtZW50IHRpdGxlPSImIzMzMzI4OyI+dGVzdDwvZG9jdW1lbnQ+JworCisgICAgMikgYmFkIGVudGl0aWVzCisKKyAgICA+Pj4gRVQuWE1MKCI8ZG9jdW1lbnQ+JmVudGl0eTs8L2RvY3VtZW50PiIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHk6IGxpbmUgMSwgY29sdW1uIDEwCisKKyAgICA+Pj4gRVQuWE1MKEVOVElUWV9YTUwpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmVudGl0eTs6IGxpbmUgNSwgY29sdW1uIDEwCisKKyAgICAzKSBjdXN0b20gZW50aXR5CisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmVudGl0eVsiZW50aXR5Il0gPSAidGV4dCIKKyAgICA+Pj4gcGFyc2VyLmZlZWQoRU5USVRZX1hNTCkKKyAgICA+Pj4gcm9vdCA9IHBhcnNlci5jbG9zZSgpCisgICAgPj4+IHNlcmlhbGl6ZShyb290KQorICAgICc8ZG9jdW1lbnQ+dGV4dDwvZG9jdW1lbnQ+JworICAgICIiIgorCitkZWYgZXJyb3IoeG1sKToKKyAgICAiIiIKKworICAgIFRlc3QgZXJyb3IgaGFuZGxpbmcuCisKKyAgICA+Pj4gaXNzdWJjbGFzcyhFVC5QYXJzZUVycm9yLCBTeW50YXhFcnJvcikKKyAgICBUcnVlCisgICAgPj4+IGVycm9yKCJmb28iKS5wb3NpdGlvbgorICAgICgxLCAwKQorICAgID4+PiBlcnJvcigiPHRhZz4mZm9vOzwvdGFnPiIpLnBvc2l0aW9uCisgICAgKDEsIDUpCisgICAgPj4+IGVycm9yKCJmb29iYXI8IikucG9zaXRpb24KKyAgICAoMSwgNikKKworICAgICIiIgorICAgIHRyeToKKyAgICAgICAgRVQuWE1MKHhtbCkKKyAgICBleGNlcHQgRVQuUGFyc2VFcnJvcjoKKyAgICAgICAgcmV0dXJuIHN5cy5leGNfdmFsdWUKKworZGVmIG5hbWVzcGFjZSgpOgorICAgICIiIgorICAgIFRlc3QgbmFtZXNwYWNlIGlzc3Vlcy4KKworICAgIDEpIHhtbCBuYW1lc3BhY2UKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8dGFnIHhtbDpsYW5nPSdlbicgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKKyAgICAnPHRhZyB4bWw6bGFuZz0iZW4iIC8+JworCisgICAgMikgb3RoZXIgIndlbGwta25vd24iIG5hbWVzcGFjZXMKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4xCisgICAgJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgLz4nCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGh0bWw6aHRtbCB4bWxuczpodG1sPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyAvPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDIuMgorICAgICc8aHRtbDpodG1sIHhtbG5zOmh0bWw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIC8+JworCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9J2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4zCisgICAgJzxuczA6RW52ZWxvcGUgeG1sbnM6bnMwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlIiAvPicKKworICAgIDMpIHVua25vd24gbmFtZXNwYWNlcworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShlbGVtKQorICAgIDxuczA6Ym9keSB4bWxuczpuczA9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KKyAgICAgIDxuczA6dGFnPnRleHQ8L25zMDp0YWc+CisgICAgICA8bnMwOnRhZyAvPgorICAgICAgPG5zMDpzZWN0aW9uPgorICAgICAgICA8bnMwOnRhZz5zdWJ0ZXh0PC9uczA6dGFnPgorICAgICAgPC9uczA6c2VjdGlvbj4KKyAgICA8L25zMDpib2R5PgorICAgICIiIgorCitkZWYgcW5hbWUoKToKKyAgICAiIiIKKyAgICBUZXN0IFFOYW1lIGhhbmRsaW5nLgorCisgICAgMSkgZGVjb3JhdGVkIHRhZ3MKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgie3VyaX10YWciKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgie3VyaX10YWciKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiAvPicKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4zCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiAvPicKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcxIikpCisgICAgPj4+IHN1YmVsZW0gPSBFVC5TdWJFbGVtZW50KGVsZW0sIEVULlFOYW1lKCJ1cmkiLCAidGFnMiIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjQKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiPjxuczA6dGFnMSAvPjxuczA6dGFnMiAvPjwvbnMwOnRhZz4nCisKKyAgICAyKSBkZWNvcmF0ZWQgYXR0cmlidXRlcworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ2YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4xCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ2YWx1ZSIgLz4nCisKKyAgICA+Pj4gZWxlbS5jbGVhcigpCisgICAgPj4+IGVsZW0uYXR0cmliW0VULlFOYW1lKCJ7dXJpfWtleSIpXSA9ICJ2YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ2YWx1ZSIgLz4nCisKKyAgICAzKSBkZWNvcmF0ZWQgdmFsdWVzIGFyZSBub3QgY29udmVydGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGUKKyAgICAgICBRTmFtZSB3cmFwcGVyIGNhbiBiZSB1c2VkIGZvciB2YWx1ZXMKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSAie3VyaX12YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4xCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ7dXJpfXZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSBFVC5RTmFtZSgie3VyaX12YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMgorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgbnMwOmtleT0ibnMwOnZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IHN1YmVsZW0uYXR0cmliWyJ7dXJpMX1rZXkiXSA9IEVULlFOYW1lKCJ7dXJpMn12YWx1ZSIpCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMworICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgeG1sbnM6bnMxPSJ1cmkxIiB4bWxuczpuczI9InVyaTIiPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjwvbnMwOnRhZz4nCisKKyAgICA0KSBEaXJlY3QgUU5hbWUgdGVzdHMKKworICAgID4+PiBzdHIoRVQuUU5hbWUoJ25zJywgJ3RhZycpKQorICAgICd7bnN9dGFnJworICAgID4+PiBzdHIoRVQuUU5hbWUoJ3tuc310YWcnKSkKKyAgICAne25zfXRhZycKKyAgICA+Pj4gcTEgPSBFVC5RTmFtZSgnbnMnLCAndGFnJykKKyAgICA+Pj4gcTIgPSBFVC5RTmFtZSgnbnMnLCAndGFnJykKKyAgICA+Pj4gcTEgPT0gcTIKKyAgICBUcnVlCisgICAgPj4+IHEyID0gRVQuUU5hbWUoJ25zJywgJ290aGVyLXRhZycpCisgICAgPj4+IHExID09IHEyCisgICAgRmFsc2UKKyAgICA+Pj4gcTEgPT0gJ25zOnRhZycKKyAgICBGYWxzZQorICAgID4+PiBxMSA9PSAne25zfXRhZycKKyAgICBUcnVlCisgICAgIiIiCisKK2RlZiBkb2N0eXBlX3B1YmxpYygpOgorICAgICIiIgorICAgIFRlc3QgUFVCTElDIGRvY3R5cGUuCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgnPCFET0NUWVBFIGh0bWwgUFVCTElDJworICAgIC4uLiAgICcgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIicKKyAgICAuLi4gICAnICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nCisgICAgLi4uICAgJzxodG1sPnRleHQ8L2h0bWw+JykKKworICAgICIiIgorCitkZWYgeHBhdGhfdG9rZW5pemVyKHApOgorICAgICIiIgorICAgIFRlc3QgdGhlIFhQYXRoIHRva2VuaXplci4KKworICAgID4+PiAjIHRlc3RzIGZyb20gdGhlIHhtbCBzcGVjaWZpY2F0aW9uCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiKiIpCisgICAgWycqJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJ0ZXh0KCkiKQorICAgIFsndGV4dCcsICcoKSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiQG5hbWUiKQorICAgIFsnQCcsICduYW1lJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJAKiIpCisgICAgWydAJywgJyonXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInBhcmFbMV0iKQorICAgIFsncGFyYScsICdbJywgJzEnLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVtsYXN0KCldIikKKyAgICBbJ3BhcmEnLCAnWycsICdsYXN0JywgJygpJywgJ10nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIiovcGFyYSIpCisgICAgWycqJywgJy8nLCAncGFyYSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiL2RvYy9jaGFwdGVyWzVdL3NlY3Rpb25bMl0iKQorICAgIFsnLycsICdkb2MnLCAnLycsICdjaGFwdGVyJywgJ1snLCAnNScsICddJywgJy8nLCAnc2VjdGlvbicsICdbJywgJzInLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlci8vcGFyYSIpCisgICAgWydjaGFwdGVyJywgJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vcGFyYSIpCisgICAgWycvLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvL29saXN0L2l0ZW0iKQorICAgIFsnLy8nLCAnb2xpc3QnLCAnLycsICdpdGVtJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuIikKKyAgICBbJy4nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3BhcmEiKQorICAgIFsnLicsICcvLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLiIpCisgICAgWycuLiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi4vQGxhbmciKQorICAgIFsnLi4nLCAnLycsICdAJywgJ2xhbmcnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImNoYXB0ZXJbdGl0bGVdIikKKyAgICBbJ2NoYXB0ZXInLCAnWycsICd0aXRsZScsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJlbXBsb3llZVtAc2VjcmV0YXJ5IGFuZCBAYXNzaXN0YW50XSIpCisgICAgWydlbXBsb3llZScsICdbJywgJ0AnLCAnc2VjcmV0YXJ5JywgJycsICdhbmQnLCAnJywgJ0AnLCAnYXNzaXN0YW50JywgJ10nXQorCisgICAgPj4+ICMgYWRkaXRpb25hbCB0ZXN0cworICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIntodHRwOi8vc3BhbX1lZ2ciKQorICAgIFsne2h0dHA6Ly9zcGFtfWVnZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi9zcGFtLmVnZyIpCisgICAgWycuJywgJy8nLCAnc3BhbS5lZ2cnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3todHRwOi8vc3BhbX1lZ2ciKQorICAgIFsnLicsICcvLycsICd7aHR0cDovL3NwYW19ZWdnJ10KKyAgICAiIiIKKyAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKKyAgICBvdXQgPSBbXQorICAgIGZvciBvcCwgdGFnIGluIEVsZW1lbnRQYXRoLnhwYXRoX3Rva2VuaXplcihwKToKKyAgICAgICAgb3V0LmFwcGVuZChvcCBvciB0YWcpCisgICAgcmV0dXJuIG91dAorCitkZWYgcHJvY2Vzc2luZ2luc3RydWN0aW9uKCk6CisgICAgIiIiCisgICAgVGVzdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZGlyZWN0bHkKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKKyAgICAnPD90ZXN0IGluc3RydWN0aW9uPz4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJ2luc3RydWN0aW9uJykpCisgICAgJzw/dGVzdCBpbnN0cnVjdGlvbj8+JworCisgICAgSXNzdWUgIzI3NDYKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsICc8dGVzdGluZyY+JykpCisgICAgJzw/dGVzdCA8dGVzdGluZyY+Pz4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgdSc8dGVzdGluZyY+XHhlMycpLCAnbGF0aW4xJykKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nbGF0aW4xJz8+XFxuPD90ZXN0IDx0ZXN0aW5nJj5cXHhlMz8+IgorICAgICIiIgogCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKQEAgLTI0Nyw2ICsxMjczLDE0IEBACiAKIFhJTkNMVURFWyJjb3VudC50eHQiXSA9ICIzMjQzODciCiAKK1hJTkNMVURFWyJDMmIueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPlRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gPGVtPmFjY2Vzc2VkPC9lbT4KKyAgPHhpOmluY2x1ZGUgaHJlZj0iY291bnQudHh0IiBwYXJzZT0idGV4dCIvPiB0aW1lcy48L3A+Cis8L2RvY3VtZW50PgorIiIiCisKIFhJTkNMVURFWyJDMy54bWwiXSA9ICIiIlwKIDw/eG1sIHZlcnNpb249JzEuMCc/PgogPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KQEAgLTI3OSw5ICsxMzEzLDkgQEAKIDw/eG1sIHZlcnNpb249JzEuMCc/PgogPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KICAgPHA+RXhhbXBsZS48L3A+Ci0gIDx4aTppbmNsdWRlIGhyZWY9InNhbXBsZXMvc2ltcGxlLnhtbCIvPgorICA8eGk6aW5jbHVkZSBocmVmPSJ7fSIvPgogPC9kb2N1bWVudD4KLSIiIgorIiIiLmZvcm1hdChjZ2kuZXNjYXBlKFNJTVBMRV9YTUxGSUxFLCBUcnVlKSkKIAogZGVmIHhpbmNsdWRlX2xvYWRlcihocmVmLCBwYXJzZT0ieG1sIiwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgdHJ5OgpAQCAtMzAyLDcgKzEzMzYsNyBAQAogCiAgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMS54bWwiKQogICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCi0gICAgPj4+IHByaW50IHNlcmlhbGl6ZShFVCwgZG9jdW1lbnQpICMgQzEKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMxCiAgICAgPGRvY3VtZW50PgogICAgICAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CiAgICAgICA8ZGlzY2xhaW1lcj4KQEAgLTMxNiwxNyArMTM1MCwyNyBAQAogCiAgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMi54bWwiKQogICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCi0gICAgPj4+IHByaW50IHNlcmlhbGl6ZShFVCwgZG9jdW1lbnQpICMgQzIKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMyCiAgICAgPGRvY3VtZW50PgogICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiBhY2Nlc3NlZAogICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KICAgICA8L2RvY3VtZW50PgogCisgICAgVGV4dHVhbCBpbmNsdXNpb24gYWZ0ZXIgc2libGluZyBlbGVtZW50IChiYXNlZCBvbiBtb2RpZmllZCBYSW5jbHVkZSBDLjIpCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMyYi54bWwiKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShkb2N1bWVudCkpICMgQzJiCisgICAgPGRvY3VtZW50PgorICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgorICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KKyAgICA8L2RvY3VtZW50PgorCiAgICAgVGV4dHVhbCBpbmNsdXNpb24gb2YgWE1MIGV4YW1wbGUgKFhJbmNsdWRlIEMuMykKIAogICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzMueG1sIikKICAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQotICAgID4+PiBwcmludCBzZXJpYWxpemUoRVQsIGRvY3VtZW50KSAjIEMzCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBDMwogICAgIDxkb2N1bWVudD4KICAgICAgIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CiAgICAgICA8ZXhhbXBsZT4mbHQ7P3htbCB2ZXJzaW9uPScxLjAnPyZndDsKQEAgLTM0MywxMyArMTM4Nyw1MDAgQEAKICAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICBJT0Vycm9yOiByZXNvdXJjZSBub3QgZm91bmQKLSAgICA+Pj4gIyBwcmludCBzZXJpYWxpemUoRVQsIGRvY3VtZW50KSAjIEM1CisgICAgPj4+ICMgcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEM1CisgICAgIiIiCisKK2RlZiB4aW5jbHVkZV9kZWZhdWx0KCk6CisgICAgIiIiCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJkZWZhdWx0LnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBkZWZhdWx0CisgICAgPGRvY3VtZW50PgorICAgICAgPHA+RXhhbXBsZS48L3A+CisgICAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgIDwvZG9jdW1lbnQ+CisgICAgIiIiCisKKyMKKyMgYmFkbHkgZm9ybWF0dGVkIHhpOmluY2x1ZGUgdGFncworCitYSU5DTFVERV9CQUQgPSB7fQorCitYSU5DTFVERV9CQURbIkIxLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD4xMjAgTXogaXMgYWRlcXVhdGUgZm9yIGFuIGF2ZXJhZ2UgaG9tZSB1c2VyLjwvcD4KKyAgPHhpOmluY2x1ZGUgaHJlZj0iZGlzY2xhaW1lci54bWwiIHBhcnNlPSJCQURfVFlQRSIvPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERV9CQURbIkIyLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZGl2IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgICA8eGk6ZmFsbGJhY2s+PC94aTpmYWxsYmFjaz4KKzwvZGl2PgorIiIiCisKK2RlZiB4aW5jbHVkZV9mYWlsdXJlcygpOgorICAgIHIiIiIKKyAgICBUZXN0IGZhaWx1cmUgdG8gbG9jYXRlIGluY2x1ZGVkIFhNTCBmaWxlLgorCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRlZiBub25lX2xvYWRlcihocmVmLCBwYXJzZXIsIGVuY29kaW5nPU5vbmUpOgorICAgIC4uLiAgICAgcmV0dXJuIE5vbmUKKworICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERVsiQzEueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IGNhbm5vdCBsb2FkICdkaXNjbGFpbWVyLnhtbCcgYXMgJ3htbCcKKworICAgIFRlc3QgZmFpbHVyZSB0byBsb2NhdGUgaW5jbHVkZWQgdGV4dCBmaWxlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFWyJDMi54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2NvdW50LnR4dCcgYXMgJ3RleHQnCisKKyAgICBUZXN0IGJhZCBwYXJzZSB0eXBlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjEueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IHVua25vd24gcGFyc2UgdHlwZSBpbiB4aTppbmNsdWRlIHRhZyAoJ0JBRF9UWVBFJykKKworICAgIFRlc3QgeGk6ZmFsbGJhY2sgb3V0c2lkZSB4aTppbmNsdWRlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjIueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IHhpOmZhbGxiYWNrIHRhZyBtdXN0IGJlIGNoaWxkIG9mIHhpOmluY2x1ZGUgKCd7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZX1mYWxsYmFjaycpCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmVwb3J0ZWQgYnVncworCitkZWYgYnVnX3htbHRvb2xraXQyMSgpOgorICAgICIiIgorCisgICAgbWFyc2hhbGxlciBnaXZlcyBvYnNjdXJlIGVycm9ycyBmb3Igbm9uLXN0cmluZyB2YWx1ZXMKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgxMjMpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIHRhZworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnRleHQgPSAxMjMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGV4dAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnRhaWwgPSAxMjMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFpbAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnNldCgxMjMsICIxMjMiKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyBhdHRyaWJ1dGUga2V5CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0uc2V0KCIxMjMiLCAxMjMpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSB2YWx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKIAogICAgICIiIgogCi1kZWYgdGVzdF9tYWluKCk6CitkZWYgYnVnX3htbHRvb2xraXQyNSgpOgorICAgICIiIgorCisgICAgdHlwbyBpbiBFbGVtZW50VHJlZS5maW5kdGV4dAorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCisgICAgPj4+IHRyZWUuZmluZHRleHQoInRhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IHRyZWUuZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQyOCgpOgorICAgICIiIgorCisgICAgLi8vdGFnIGNhdXNlcyBleGNlcHRpb25zCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPGRvYz48dGFibGU+PHRib2R5Lz48L3RhYmxlPjwvZG9jPiIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGhlYWQiKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdCh0cmVlLmZpbmRhbGwoIi4vL3Rib2R5IikpCisgICAgWyd0Ym9keSddCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0WDEoKToKKyAgICAiIiIKKworICAgIGR1bXAoKSBkb2Vzbid0IGZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPGRvYz48dGFibGU+PHRib2R5Lz48L3RhYmxlPjwvZG9jPiIpCisgICAgPj4+IEVULmR1bXAodHJlZSk7IHN5cy5zdGRvdXQud3JpdGUoInRhaWwiKQorICAgIDxkb2M+PHRhYmxlPjx0Ym9keSAvPjwvdGFibGU+PC9kb2M+CisgICAgdGFpbAorCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDM5KCk6CisgICAgIiIiCisKKyAgICBub24tYXNjaWkgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzIGRvZXNuJ3Qgd29yaworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dFx4ZTRnIC8+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PHRhZyBceGU0dHRyPSd2JiMyMjg7bHVlJyAvPiIpCisgICAgPj4+IHRyZWUuYXR0cmliCisgICAge3UnXFx4ZTR0dHInOiB1J3ZcXHhlNGx1ZSd9CisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0YWcgXFx4YzNcXHhhNHR0cj0idlxceGMzXFx4YTRsdWUiIC8+JworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dFx4ZTRnPnRleHQ8L3RceGU0Zz4iKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dFxceGMzXFx4YTRnPnRleHQ8L3RcXHhjM1xceGE0Zz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnQodSJ0XHUwMGU0ZyIpCisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0XFx4YzNcXHhhNGcgLz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IHRyZWUuc2V0KHUiXHUwMGU0dHRyIiwgdSJ2XHUwMGU0bHVlIikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRhZyBcXHhjM1xceGE0dHRyPSJ2XFx4YzNcXHhhNGx1ZSIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0NTQoKToKKyAgICAiIiIKKworICAgIHByb2JsZW1zIGhhbmRsaW5nIGludGVybmFsbHkgZGVmaW5lZCBlbnRpdGllcworCisgICAgPj4+IGUgPSBFVC5YTUwoIjwhRE9DVFlQRSBkb2MgWzwhRU5USVRZIGxkb3RzICcmI3g4MjMwOyc+XT48ZG9jPiZsZG90czs8L2RvYz4iKQorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvYz4mIzMzMzI4OzwvZG9jPicKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQ1NSgpOgorICAgICIiIgorCisgICAgbWFrZSBzdXJlIHdlJ3JlIHJlcG9ydGluZyB0aGUgZmlyc3QgZXJyb3IsIG5vdCB0aGUgbGFzdAorCisgICAgPj4+IGUgPSBFVC5YTUwoIjwhRE9DVFlQRSBkb2MgU1lTVEVNICdkb2MuZHRkJz48ZG9jPiZsZG90czsmbmRvdHM7JnJkb3RzOzwvZG9jPiIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmxkb3RzOzogbGluZSAxLCBjb2x1bW4gMzYKKworICAgICIiIgorCitjbGFzcyBFeGNlcHRpb25GaWxlOgorICAgIGRlZiByZWFkKHNlbGYsIHgpOgorICAgICAgICByYWlzZSBJT0Vycm9yCisKK2RlZiB4bWx0b29sa2l0NjAoKToKKyAgICAiIiIKKworICAgIEhhbmRsZSBjcmFzaCBpbiBzdHJlYW0gc291cmNlLgorICAgID4+PiB0cmVlID0gRVQucGFyc2UoRXhjZXB0aW9uRmlsZSgpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBJT0Vycm9yCisKKyAgICAiIiIKKworWE1MVE9PTEtJVDYyX0RPQyA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+Cis8cGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uPgorPHN1YmRvYy1hYnN0cmFjdD4KKzxwYXJhZ3JhcGggaWQ9IkEtMDAwMSIgbHZsPSIwIj5BIG5ldyBjdWx0aXZhciBvZiBCZWdvbmlhIHBsYW50IG5hbWVkICZsc3F1bztCQ1Q5ODAxQkVHJnJzcXVvOy48L3BhcmFncmFwaD4KKzwvc3ViZG9jLWFic3RyYWN0PgorPC9wYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24+IiIiCisKKworZGVmIHhtbHRvb2xraXQ2MigpOgorICAgICIiIgorCisgICAgRG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBjdXN0b20gZW50aXRpZXMuCisKKyAgICA+Pj4geG1sdG9vbGtpdDYyKCkKKyAgICB1J0EgbmV3IGN1bHRpdmFyIG9mIEJlZ29uaWEgcGxhbnQgbmFtZWQgXHUyMDE4QkNUOTgwMUJFR1x1MjAxOS4nCisKKyAgICAiIiIKKyAgICBFTlRJVElFUyA9IHt1J3JzcXVvJzogdSdcdTIwMTknLCB1J2xzcXVvJzogdSdcdTIwMTgnfQorICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICBwYXJzZXIuZW50aXR5LnVwZGF0ZShFTlRJVElFUykKKyAgICBwYXJzZXIuZmVlZChYTUxUT09MS0lUNjJfRE9DKQorICAgIHQgPSBwYXJzZXIuY2xvc2UoKQorICAgIHJldHVybiB0LmZpbmQoJy4vL3BhcmFncmFwaCcpLnRleHQKKworZGVmIHhtbHRvb2xraXQ2MygpOgorICAgICIiIgorCisgICAgQ2hlY2sgcmVmZXJlbmNlIGxlYWsuCisgICAgPj4+IHhtbHRvb2xraXQ2MygpCisgICAgPj4+IGNvdW50ID0gc3lzLmdldHJlZmNvdW50KE5vbmUpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgIC4uLiAgICAgeG1sdG9vbGtpdDYzKCkKKyAgICA+Pj4gc3lzLmdldHJlZmNvdW50KE5vbmUpIC0gY291bnQKKyAgICAwCisKKyAgICAiIiIKKyAgICB0cmVlID0gRVQuVHJlZUJ1aWxkZXIoKQorICAgIHRyZWUuc3RhcnQoInRhZyIsIHt9KQorICAgIHRyZWUuZGF0YSgidGV4dCIpCisgICAgdHJlZS5lbmQoInRhZyIpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitkZWYgYnVnXzIwMDcwOF9uZXdsaW5lKCk6CisgICAgciIiIgorCisgICAgUHJlc2VydmUgbmV3bGluZXMgaW4gYXR0cmlidXRlcy4KKworICAgID4+PiBlID0gRVQuRWxlbWVudCgnU29tZVRhZycsIHRleHQ9ImRlZiBfZigpOlxuICByZXR1cm4gM1xuIikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSkKKyAgICAnPFNvbWVUYWcgdGV4dD0iZGVmIF9mKCk6JiMxMDsgIHJldHVybiAzJiMxMDsiIC8+JworICAgID4+PiBFVC5YTUwoRVQudG9zdHJpbmcoZSkpLmdldCgidGV4dCIpCisgICAgJ2RlZiBfZigpOlxuICByZXR1cm4gM1xuJworICAgID4+PiBFVC50b3N0cmluZyhFVC5YTUwoRVQudG9zdHJpbmcoZSkpKQorICAgICc8U29tZVRhZyB0ZXh0PSJkZWYgX2YoKTomIzEwOyAgcmV0dXJuIDMmIzEwOyIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDhfY2xvc2UoKToKKyAgICAiIiIKKworICAgIFRlc3QgZGVmYXVsdCBidWlsZGVyLgorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKSAjIGRlZmF1bHQKKyAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQorICAgID4+PiBzdW1tYXJpemUocGFyc2VyLmNsb3NlKCkpCisgICAgJ2VsZW1lbnQnCisKKyAgICBUZXN0IGN1c3RvbSBidWlsZGVyLgorICAgID4+PiBjbGFzcyBFY2hvVGFyZ2V0OgorICAgIC4uLiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBFVC5FbGVtZW50KCJlbGVtZW50IikgIyBzaW11bGF0ZSByb290CisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcihFY2hvVGFyZ2V0KCkpCisgICAgPj4+IHBhcnNlci5mZWVkKCI8ZWxlbWVudD5zb21lIHRleHQ8L2VsZW1lbnQ+IikKKyAgICA+Pj4gc3VtbWFyaXplKHBhcnNlci5jbG9zZSgpKQorICAgICdlbGVtZW50JworCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X2RlZmF1bHRfbmFtZXNwYWNlKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMQorICAgICc8ZWxlbSB4bWxucz0iZGVmYXVsdCI+PGVsZW0gLz48L2VsZW0+JworCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie25vdC1kZWZhdWx0fWVsZW0iKQorICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDIKKyAgICAnPGVsZW0geG1sbnM9ImRlZmF1bHQiIHhtbG5zOm5zMT0ibm90LWRlZmF1bHQiPjxlbGVtIC8+PG5zMTplbGVtIC8+PC9lbGVtPicKKworICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgImVsZW0iKSAjIHVucHJlZml4ZWQgbmFtZQorICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogY2Fubm90IHVzZSBub24tcXVhbGlmaWVkIG5hbWVzIHdpdGggZGVmYXVsdF9uYW1lc3BhY2Ugb3B0aW9uCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfcmVnaXN0ZXJfbmFtZXNwYWNlKCk6CisgICAgIiIiCisKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKKyAgICAnPG5zMDp0aXRsZSB4bWxuczpuczA9Imh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iIC8+JworICAgID4+PiBFVC5yZWdpc3Rlcl9uYW1lc3BhY2UoImZvbyIsICJodHRwOi8vbmFtZXNwYWNlLmludmFsaWQvZG9lcy9ub3QvZXhpc3QvIikKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKKyAgICAnPGZvbzp0aXRsZSB4bWxuczpmb289Imh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iIC8+JworCisgICAgQW5kIHRoZSBEdWJsaW4gQ29yZSBuYW1lc3BhY2UgaXMgaW4gdGhlIGRlZmF1bHQgbGlzdDoKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS99dGl0bGUiKSkKKyAgICAnPGRjOnRpdGxlIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZWxlbWVudF9jb21tZW50KCk6CisgICAgIiIiCisKKyAgICBOb3Qgc3VyZSBpZiB0aGlzIGNhbiBiZSBmaXhlZCwgcmVhbGx5IChzaW5jZSB0aGUgc2VyaWFsaXplciBuZWVkcworICAgIEVULkNvbW1lbnQsIG5vdCBjRVQuY29tbWVudCkuCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBhLmFwcGVuZChFVC5Db21tZW50KCdmb28nKSkKKyAgICA+Pj4gYVswXS50YWcgPT0gRVQuQ29tbWVudAorICAgIFRydWUKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGEuYXBwZW5kKEVULlBJKCdmb28nKSkKKyAgICA+Pj4gYVswXS50YWcgPT0gRVQuUEkKKyAgICBUcnVlCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZWxlbWVudF9pbnNlcnQoKToKKyAgICAiIiIKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGIgPSBFVC5TdWJFbGVtZW50KGEsICdiJykKKyAgICA+Pj4gYyA9IEVULlN1YkVsZW1lbnQoYSwgJ2MnKQorICAgID4+PiBkID0gRVQuRWxlbWVudCgnZCcpCisgICAgPj4+IGEuaW5zZXJ0KDAsIGQpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGEpCisgICAgWydkJywgJ2InLCAnYyddCisgICAgPj4+IGEuaW5zZXJ0KC0xLCBkKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChhKQorICAgIFsnZCcsICdiJywgJ2QnLCAnYyddCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfaXRlcl9jb21tZW50KCk6CisgICAgIiIiCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBiID0gRVQuU3ViRWxlbWVudChhLCAnYicpCisgICAgPj4+IGNvbW1lbnRfYiA9IEVULkNvbW1lbnQoIlRFU1QtYiIpCisgICAgPj4+IGIuYXBwZW5kKGNvbW1lbnRfYikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYS5pdGVyKEVULkNvbW1lbnQpKQorICAgIFsnPENvbW1lbnQ+J10KKworICAgICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJlcG9ydGVkIG9uIGJ1Z3MucHl0aG9uLm9yZworCitkZWYgYnVnXzE1MzQ2MzAoKToKKyAgICAiIiIKKworICAgID4+PiBib2IgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgPj4+IGUgPSBib2IuZGF0YSgiZGF0YSIpCisgICAgPj4+IGUgPSBib2Iuc3RhcnQoInRhZyIsIHt9KQorICAgID4+PiBlID0gYm9iLmVuZCgidGFnIikKKyAgICA+Pj4gZSA9IGJvYi5jbG9zZSgpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8dGFnIC8+JworCisgICAgIiIiCisKK2RlZiBjaGVja19pc3N1ZTYyMzMoKToKKyAgICAiIiIKKworICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCc/Pjxib2R5PnRcXHhjM1xceGEzZzwvYm9keT4iKQorICAgID4+PiBFVC50b3N0cmluZyhlLCAnYXNjaWknKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKyAgICA+Pj4gZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjxib2R5PnRcXHhlM2c8L2JvZHk+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSwgJ2FzY2lpJykKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cXG48Ym9keT50JiMyMjc7ZzwvYm9keT4iCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlMzE1MSgpOgorICAgICIiIgorCisgICAgPj4+IGUgPSBFVC5YTUwoJzxwcmVmaXg6bG9jYWxuYW1lIHhtbG5zOnByZWZpeD0iJHtzdHVmZn0iLz4nKQorICAgID4+PiBlLnRhZworICAgICd7JHtzdHVmZn19bG9jYWxuYW1lJworICAgID4+PiB0ID0gRVQuRWxlbWVudFRyZWUoZSkKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSkKKyAgICAnPG5zMDpsb2NhbG5hbWUgeG1sbnM6bnMwPSIke3N0dWZmfSIgLz4nCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlNjU2NSgpOgorICAgICIiIgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJ10KKyAgICA+Pj4gbmV3ZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBlbGVtWzpdID0gbmV3ZWxlbVs6XQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KKworICAgICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworY2xhc3MgQ2xlYW5Db250ZXh0KG9iamVjdCk6CisgICAgIiIiUHJvdmlkZSBkZWZhdWx0IG5hbWVzcGFjZSBtYXBwaW5nIGFuZCBwYXRoIGNhY2hlLiIiIgorICAgIGNoZWNrd2FybmluZ3MgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcXVpZXQ9RmFsc2UpOgorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMjoKKyAgICAgICAgICAgICMgdW5kZXIgLU9PLCBkb2N0ZXN0cyBjYW5ub3QgYmUgcnVuIGFuZCB0aGVyZWZvcmUgbm90IGFsbCB3YXJuaW5ncworICAgICAgICAgICAgIyB3aWxsIGJlIGVtaXR0ZWQKKyAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZQorICAgICAgICBkZXByZWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFNlYXJjaCBiZWhhdmlvdXIgaXMgYnJva2VuIGlmIHNlYXJjaCBwYXRoIHN0YXJ0cyB3aXRoICIvIi4KKyAgICAgICAgICAgICgiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgZml4ZWQgIgorICAgICAgICAgICAgICJpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3VyLCAiCisgICAgICAgICAgICAgImNoYW5nZSBpdCB0byAnLisnIiwgRnV0dXJlV2FybmluZyksCisgICAgICAgICAgICAjIEVsZW1lbnQuZ2V0Y2hpbGRyZW4oKSBhbmQgRWxlbWVudC5nZXRpdGVyYXRvcigpIGFyZSBkZXByZWNhdGVkLgorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgICJVc2UgLisgaW5zdGVhZC4iLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgICJVc2UgLisgaW5zdGVhZC4iLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICMgWE1MUGFyc2VyLmRvY3R5cGUoKSBpcyBkZXByZWNhdGVkLgorICAgICAgICAgICAgKCJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlLi4gIgorICAgICAgICAgICAgICJtZXRob2Qgb24gdGhlIFRyZWVCdWlsZGVyIHRhcmdldC4iLCBEZXByZWNhdGlvbldhcm5pbmcpKQorICAgICAgICBzZWxmLmNoZWNrd2FybmluZ3MgPSB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKmRlcHJlY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0PXF1aWV0KQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgICAgICAgIHNlbGYuX25zbWFwID0gRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAKKyAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoLl9jYWNoZQorICAgICAgICAjIENvcHkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG1hcHBpbmcKKyAgICAgICAgRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAgPSBzZWxmLl9uc21hcC5jb3B5KCkKKyAgICAgICAgIyBDb3B5IHRoZSBwYXRoIGNhY2hlIChzaG91bGQgYmUgZW1wdHkpCisgICAgICAgIEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoLl9jYWNoZSA9IHNlbGYuX3BhdGhfY2FjaGUuY29weSgpCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncy5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgICAgICAgICMgUmVzdG9yZSBtYXBwaW5nIGFuZCBwYXRoIGNhY2hlCisgICAgICAgIEVsZW1lbnRUcmVlLl9uYW1lc3BhY2VfbWFwID0gc2VsZi5fbnNtYXAKKyAgICAgICAgRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlID0gc2VsZi5fcGF0aF9jYWNoZQorICAgICAgICBzZWxmLmNoZWNrd2FybmluZ3MuX19leGl0X18oKmFyZ3MpCisKKworZGVmIHRlc3RfbWFpbihtb2R1bGVfbmFtZT0neG1sLmV0cmVlLkVsZW1lbnRUcmVlJyk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZQotICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZSwgdmVyYm9zaXR5PVRydWUpCisKKyAgICB1c2VfcHlfbW9kdWxlID0gKG1vZHVsZV9uYW1lID09ICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQorCisgICAgIyBUaGUgc2FtZSBkb2N0ZXN0cyBhcmUgdXNlZCBmb3IgYm90aCB0aGUgUHl0aG9uIGFuZCB0aGUgQyBpbXBsZW1lbnRhdGlvbnMKKyAgICBhc3NlcnQgdGVzdF94bWxfZXRyZWUuRVQuX19uYW1lX18gPT0gbW9kdWxlX25hbWUKKworICAgICMgWFhYIHRoZSBDIG1vZHVsZSBzaG91bGQgZ2l2ZSB0aGUgc2FtZSB3YXJuaW5ncyBhcyB0aGUgUHl0aG9uIG1vZHVsZQorICAgIHdpdGggQ2xlYW5Db250ZXh0KHF1aWV0PW5vdCB1c2VfcHlfbW9kdWxlKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfeG1sX2V0cmVlLCB2ZXJib3NpdHk9VHJ1ZSkKKworICAgICMgVGhlIG1vZHVsZSBzaG91bGQgbm90IGJlIGNoYW5nZWQgYnkgdGhlIHRlc3RzCisgICAgYXNzZXJ0IHRlc3RfeG1sX2V0cmVlLkVULl9fbmFtZV9fID09IG1vZHVsZV9uYW1lCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CmluZGV4IDdjNTcwMDAuLjc4YTZhOTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQpAQCAtMSwzMSArMSwxMSBAQAogIyB4bWwuZXRyZWUgdGVzdCBmb3IgY0VsZW1lbnRUcmVlCiAKLWltcG9ydCBkb2N0ZXN0Ci1pbXBvcnQgc3lzCi0KIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiAKLWZyb20geG1sLmV0cmVlIGltcG9ydCBjRWxlbWVudFRyZWUgYXMgRVQKK2NFVCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd4bWwuZXRyZWUuY0VsZW1lbnRUcmVlJykKIAotU0FNUExFX1hNTCA9ICIiIgotPGJvZHk+Ci0gIDx0YWc+dGV4dDwvdGFnPgotICA8dGFnIC8+Ci0gIDxzZWN0aW9uPgotICAgIDx0YWc+c3VidGV4dDwvdGFnPgotICA8L3NlY3Rpb24+Ci08L2JvZHk+Ci0iIiIKIAotU0FNUExFX1hNTF9OUyA9ICIiIgotPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KLSAgPHRhZz50ZXh0PC90YWc+Ci0gIDx0YWcgLz4KLSAgPHNlY3Rpb24+Ci0gICAgPHRhZz5zdWJ0ZXh0PC90YWc+Ci0gIDwvc2VjdGlvbj4KLTwvYm9keT4KLSIiIgorIyBjRWxlbWVudFRyZWUgc3BlY2lmaWMgdGVzdHMKIAogZGVmIHNhbml0eSgpOgogICAgICIiIgpAQCAtMzQsMTkxICsxNCwyNiBAQAogICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgY0VsZW1lbnRUcmVlCiAgICAgIiIiCiAKLWRlZiBjaGVja19tZXRob2QobWV0aG9kKToKLSAgICBpZiBub3QgaGFzYXR0cihtZXRob2QsICdfX2NhbGxfXycpOgotICAgICAgICBwcmludCBtZXRob2QsICJub3QgY2FsbGFibGUiCi0KLWRlZiBzZXJpYWxpemUoRVQsIGVsZW0sIGVuY29kaW5nPU5vbmUpOgotICAgIGltcG9ydCBTdHJpbmdJTwotICAgIGZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCi0gICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgIHRyZWUud3JpdGUoZmlsZSwgZW5jb2RpbmcpCi0gICAgZWxzZToKLSAgICAgICAgdHJlZS53cml0ZShmaWxlKQotICAgIHJldHVybiBmaWxlLmdldHZhbHVlKCkKLQotZGVmIHN1bW1hcml6ZShlbGVtKToKLSAgICByZXR1cm4gZWxlbS50YWcKLQotZGVmIHN1bW1hcml6ZV9saXN0KHNlcSk6Ci0gICAgcmV0dXJuIG1hcChzdW1tYXJpemUsIHNlcSkKLQotZGVmIGludGVyZmFjZSgpOgotICAgICIiIgotICAgIFRlc3QgZWxlbWVudCB0cmVlIGludGVyZmFjZS4KLQotICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCi0gICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtZW50KQotCi0gICAgTWFrZSBzdXJlIGFsbCBzdGFuZGFyZCBlbGVtZW50IG1ldGhvZHMgZXhpc3QuCi0KLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuYXBwZW5kKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pbnNlcnQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0Y2hpbGRyZW4pCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmRhbGwpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmR0ZXh0KQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5jbGVhcikKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0KQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5zZXQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmtleXMpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZW1zKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRpdGVyYXRvcikKLQotICAgIEJhc2ljIG1ldGhvZCBzYW5pdHkgY2hlY2tzLgotCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAxCi0gICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCi0gICAgPj4+IHN1YmVsZW1lbnQgPSBFVC5FbGVtZW50KCJzdWJ0YWciKQotICAgID4+PiBlbGVtZW50LmFwcGVuZChzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgIDIKLSAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwotICAgID4+PiBlbGVtZW50Lmluc2VydCgwLCBzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgMwotICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JwotICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNAotICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48L3RhZz4nCi0gICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA1Ci0gICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCi0gICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCi0gICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgIFZhbHVlRXJyb3I6IGxpc3QucmVtb3ZlKHgpOiB4IG5vdCBpbiBsaXN0Ci0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA2Ci0gICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCi0gICAgIiIiCi0KLWRlZiBmaW5kKCk6Ci0gICAgIiIiCi0gICAgVGVzdCBmaW5kIG1ldGhvZHMgKGluY2x1ZGluZyB4cGF0aCBzeW50YXgpLgotCi0gICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKLSAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCi0gICAgJ3RhZycKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgic2VjdGlvbi90YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQotICAgICd0ZXh0JwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCi0gICAgJ2RlZmF1bHQnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQotICAgICd0ZXh0JwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCi0gICAgJ3N1YnRleHQnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCi0gICAgJ3N1YnRleHQnCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy4vLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi90YWciKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8uL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8uL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIuL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKLSAgICBbXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIntodHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKLSAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8ve2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQotICAgIFsne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQotICAgICIiIgotCi1kZWYgcGFyc2VsaXRlcmFsKCk6Ci0gICAgciIiIgotCi0gICAgPj4+IGVsZW1lbnQgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCi0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQotICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgotICAgID4+PiBwcmludCBFVC50b3N0cmluZyhlbGVtZW50KQotICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgotICAgID4+PiBwcmludCBFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKQotICAgIDw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+Ci0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQotICAgID4+PiBsZW4oaWRzKQotICAgIDAKLSAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5IGlkPSdib2R5Jz50ZXh0PC9ib2R5PjwvaHRtbD4iKQotICAgID4+PiBsZW4oaWRzKQotICAgIDEKLSAgICA+Pj4gaWRzWyJib2R5Il0udGFnCi0gICAgJ2JvZHknCi0gICAgIiIiCi0KLWRlZiBjaGVja19lbmNvZGluZyhlbmNvZGluZyk6Ci0gICAgIiIiCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJhc2NpaSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJ1cy1hc2NpaSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xIikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTE1IikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImNwNDM3IikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoIm1hYy1yb21hbiIpCi0gICAgIiIiCi0gICAgRVQuWE1MKAotICAgICAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+IiAlIGVuY29kaW5nCi0gICAgICAgICkKLQotZGVmIGJ1Z18xNTM0NjMwKCk6Ci0gICAgIiIiCi0gICAgPj4+IGJvYiA9IEVULlRyZWVCdWlsZGVyKCkKLSAgICA+Pj4gZSA9IGJvYi5kYXRhKCJkYXRhIikKLSAgICA+Pj4gZSA9IGJvYi5zdGFydCgidGFnIiwge30pCi0gICAgPj4+IGUgPSBib2IuZW5kKCJ0YWciKQotICAgID4+PiBlID0gYm9iLmNsb3NlKCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlKQotICAgICc8dGFnIC8+JwotICAgICIiIgogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZV9jCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZSwgdGVzdF94bWxfZXRyZWVfYworCisgICAgIyBSdW4gdGhlIHRlc3RzIHNwZWNpZmljIHRvIHRoZSBDIGltcGxlbWVudGF0aW9uCiAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfeG1sX2V0cmVlX2MsIHZlcmJvc2l0eT1UcnVlKQogCisgICAgIyBBc3NpZ24gdGhlIEMgaW1wbGVtZW50YXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGRvY3Rlc3RzCisgICAgIyBQYXRjaCB0aGUgX19uYW1lX18sIHRvIHByZXZlbnQgY29uZnVzaW9uIHdpdGggdGhlIHB1cmUgUHl0aG9uIHRlc3QKKyAgICBweUVUID0gdGVzdF94bWxfZXRyZWUuRVQKKyAgICBweV9fbmFtZV9fID0gdGVzdF94bWxfZXRyZWUuX19uYW1lX18KKyAgICB0ZXN0X3htbF9ldHJlZS5FVCA9IGNFVAorICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CisgICAgICAgIHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fID0gX19uYW1lX18KKyAgICB0cnk6CisgICAgICAgICMgUnVuIHRoZSBzYW1lIHRlc3Qgc3VpdGUgYXMgeG1sLmV0cmVlLkVsZW1lbnRUcmVlCisgICAgICAgIHRlc3RfeG1sX2V0cmVlLnRlc3RfbWFpbihtb2R1bGVfbmFtZT0neG1sLmV0cmVlLmNFbGVtZW50VHJlZScpCisgICAgZmluYWxseToKKyAgICAgICAgdGVzdF94bWxfZXRyZWUuRVQgPSBweUVUCisgICAgICAgIHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fID0gcHlfX25hbWVfXworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sbGliLnB5CmluZGV4IDY4Yjg4M2EuLjk2Njk3OGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sbGliLnB5CkBAIC0zNiw5ICszNiw5IEBACiAgICAgICAgIGguZmVlZChuc2RvYykKICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICMgVGhlIGRlZmF1bHQgbmFtZXNwYWNlIGFwcGxpZXMgdG8gZWxlbWVudHMuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaC5uYW1lLCAiVVJJIGZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiVVJJIGZvbyIpCiAgICAgICAgICMgYnV0IG5vdCB0byBhdHRyaWJ1dGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGguYXR0ciwgeydhdHRyJzondmFsJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5hdHRyLCB7J2F0dHInOid2YWwnfSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CmluZGV4IGI5YWMyZTcuLjYzMTBjOTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CkBAIC01LDE2ICs1LDIwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB4bWxycGNsaWIKIGltcG9ydCBTaW1wbGVYTUxSUENTZXJ2ZXIKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBtaW1ldG9vbHMKIGltcG9ydCBodHRwbGliCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBvcwotZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAoraW1wb3J0IHJlCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiB0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwordHJ5OgogICAgIHVuaWNvZGUKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgaGF2ZV91bmljb2RlID0gRmFsc2UKQEAgLTQwLDggKzQ0LDggQEAKIGNsYXNzIFhNTFJQQ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2R1bXBfbG9hZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKGFsaXN0LCkpKVswXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNsaWIubG9hZHMoeG1scnBjbGliLmR1bXBzKChhbGlzdCwpKSlbMF1bMF0pCiAKICAgICBkZWYgdGVzdF9kdW1wX2JhcmVfZGF0ZXRpbWUoc2VsZik6CiAgICAgICAgICMgVGhpcyBjaGVja3MgdGhhdCBhbiB1bndyYXBwZWQgZGF0ZXRpbWUuZGF0ZSBvYmplY3QgY2FuIGJlIGhhbmRsZWQKQEAgLTUxLDQxICs1NSw0MSBAQAogICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDUsIDAyLCAxMCwgMTEsIDQxLCAyMykKICAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygoZHQsKSkKICAgICAgICAgKG5ld2R0LCksIG0gPSB4bWxycGNsaWIubG9hZHMocywgdXNlX2RhdGV0aW1lPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG5ld2R0LCBkdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdkdCwgZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgTm9uZSkKIAogICAgICAgICAobmV3ZHQsKSwgbSA9IHhtbHJwY2xpYi5sb2FkcyhzLCB1c2VfZGF0ZXRpbWU9MCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3ZHQsIHhtbHJwY2xpYi5EYXRlVGltZSgnMjAwNTAyMTBUMTE6NDE6MjMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdkdCwgeG1scnBjbGliLkRhdGVUaW1lKCcyMDA1MDIxMFQxMTo0MToyMycpKQogCiAgICAgZGVmIHRlc3RfZGF0ZXRpbWVfYmVmb3JlXzE5MDAoc2VsZik6CiAgICAgICAgICMgc2FtZSBhcyBiZWZvcmUgYnV0IHdpdGggYSBkYXRlIGJlZm9yZSAxOTAwCiAgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMSwgMDIsIDEwLCAxMSwgNDEsIDIzKQogICAgICAgICBzID0geG1scnBjbGliLmR1bXBzKChkdCwpKQogICAgICAgICAobmV3ZHQsKSwgbSA9IHhtbHJwY2xpYi5sb2FkcyhzLCB1c2VfZGF0ZXRpbWU9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3ZHQsIGR0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBOb25lKQogCiAgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhuZXdkdCwgeG1scnBjbGliLkRhdGVUaW1lKCcwMDAxMDIxMFQxMTo0MToyMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCB4bWxycGNsaWIuRGF0ZVRpbWUoJzAwMDEwMjEwVDExOjQxOjIzJykpCiAKICAgICBkZWYgdGVzdF9jbXBfZGF0ZXRpbWVfRGF0ZVRpbWUoc2VsZik6CiAgICAgICAgIG5vdyA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCiAgICAgICAgIGR0ID0geG1scnBjbGliLkRhdGVUaW1lKG5vdy50aW1ldHVwbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGR0ID09IG5vdykKLSAgICAgICAgc2VsZi5hc3NlcnRfKG5vdyA9PSBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0ID09IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdyA9PSBkdCkKICAgICAgICAgdGhlbiA9IG5vdyArIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh0aGVuID49IGR0KQotICAgICAgICBzZWxmLmFzc2VydF8oZHQgPCB0aGVuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGhlbiA+PSBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0IDwgdGhlbikKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTY0OTEyIChzZWxmKToKICAgICAgICAgZCA9IHhtbHJwY2xpYi5EYXRlVGltZSgpCiAgICAgICAgICgobmV3X2QsKSwgZHVtbXkpID0geG1scnBjbGliLmxvYWRzKHhtbHJwY2xpYi5kdW1wcygoZCwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RyZXNwb25zZT1UcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UobmV3X2QudmFsdWUsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShuZXdfZC52YWx1ZSwgc3RyKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IG9mIGR1bXBzKCkgaXMgc3RpbGwgYW4gOC1iaXQgc3RyaW5nCiAgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKG5ld19kLCksIG1ldGhvZHJlc3BvbnNlPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHMsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzdHIpCiAKICAgICBkZWYgdGVzdF9uZXdzdHlsZV9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgVChvYmplY3QpOgpAQCAtOTQsNyArOTgsNyBAQAogICAgICAgICB0LnggPSAxMDAKICAgICAgICAgdC55ID0gIkhlbGxvIgogICAgICAgICAoKHQyLCksIGR1bW15KSA9IHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKHQsKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHQyLCB0Ll9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0Ll9fZGljdF9fKQogCiAgICAgZGVmIHRlc3RfZHVtcF9iaWdfbG9uZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeG1scnBjbGliLmR1bXBzLCAoMkwqKjk5LCkpCkBAIC0xMzcsOCArMTQxLDggQEAKICAgICAgICAgdmFsdWUgPSBhbGlzdCArIFtOb25lXQogICAgICAgICBhcmcxID0gKGFsaXN0ICsgW05vbmVdLCkKICAgICAgICAgc3RyZyA9IHhtbHJwY2xpYi5kdW1wcyhhcmcxLCBhbGxvd19ub25lPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgeG1scnBjbGliLmxvYWRzKHN0cmcpWzBdWzBdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKGFyZzEsKSkKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2RpbmdfaXNzdWVzKHNlbGYpOgpAQCAtMTYwLDI4ICsxNjQsMjggQEAKICAgICAgICAgICAgICAgICAgICIiIgogCiAgICAgICAgICMgc3lzLnNldGRlZmF1bHRlbmNvZGluZygpIG5vcm1hbGx5IGRvZXNuJ3QgZXhpc3QgYWZ0ZXIgc2l0ZS5weSBpcwotICAgICAgICAjIGxvYWRlZC4gIHJlbG9hZChzeXMpIGlzIHRoZSB3YXkgdG8gZ2V0IGl0IGJhY2suCisgICAgICAgICMgbG9hZGVkLiAgSW1wb3J0IGEgdGVtcG9yYXJ5IGZyZXNoIGNvcHkgdG8gZ2V0IGFjY2VzcyB0byBpdAorICAgICAgICAjIGJ1dCB0aGVuIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvcHkgdG8gYXZvaWQgbWVzc2luZyB3aXRoCisgICAgICAgICMgb3RoZXIgcG90ZW50aWFsbHkgbW9kaWZpZWQgc3lzIG1vZHVsZSBhdHRyaWJ1dGVzCiAgICAgICAgIG9sZF9lbmNvZGluZyA9IHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKQotICAgICAgICBzZXRkZWZhdWx0ZW5jb2RpbmdfZXhpc3RlZCA9IGhhc2F0dHIoc3lzLCAic2V0ZGVmYXVsdGVuY29kaW5nIikKLSAgICAgICAgcmVsb2FkKHN5cykgIyB1Z2ghCi0gICAgICAgIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoImlzby04ODU5LTEiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAocywgZCksIG0gPSB4bWxycGNsaWIubG9hZHModXRmOCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXRkZWZhdWx0ZW5jb2Rpbmcob2xkX2VuY29kaW5nKQotICAgICAgICAgICAgaWYgbm90IHNldGRlZmF1bHRlbmNvZGluZ19leGlzdGVkOgotICAgICAgICAgICAgICAgIGRlbCBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkNsZWFuSW1wb3J0KCdzeXMnKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMgYXMgdGVtcF9zeXMKKyAgICAgICAgICAgIHRlbXBfc3lzLnNldGRlZmF1bHRlbmNvZGluZygiaXNvLTg4NTktMSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHMsIGQpLCBtID0geG1scnBjbGliLmxvYWRzKHV0ZjgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRlbXBfc3lzLnNldGRlZmF1bHRlbmNvZGluZyhvbGRfZW5jb2RpbmcpCiAKICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKICAgICAgICAgaWYgaGF2ZV91bmljb2RlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocywgdSJhYmMgXHg5NSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShzLCB1bmljb2RlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGl0ZW1zLCBbKHUiZGVmIFx4OTYiLCB1ImdoaSBceDk3IildKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoaXRlbXNbMF1bMF0sIHVuaWNvZGUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2UoaXRlbXNbMF1bMV0sIHVuaWNvZGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB1ImFiYyBceDk1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtcywgWyh1ImRlZiBceDk2IiwgdSJnaGkgXHg5NyIpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtc1swXVswXSwgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtc1swXVsxXSwgdW5pY29kZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHMsICJhYmMgXHhjMlx4OTUiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaXRlbXMsIFsoImRlZiBceGMyXHg5NiIsICJnaGkgXHhjMlx4OTciKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJhYmMgXHhjMlx4OTUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtcywgWygiZGVmIFx4YzJceDk2IiwgImdoaSBceGMyXHg5NyIpXSkKIAogCiBjbGFzcyBIZWxwZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMDAsOCArMjA0LDggQEAKICAgICAgICAgZiA9IHhtbHJwY2xpYi5GYXVsdCg0MiwgJ1Rlc3QgRmF1bHQnKQogICAgICAgICBzID0geG1scnBjbGliLmR1bXBzKChmLCkpCiAgICAgICAgIChuZXdmLCksIG0gPSB4bWxycGNsaWIubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmV3ZiwgeydmYXVsdENvZGUnOiA0MiwgJ2ZhdWx0U3RyaW5nJzogJ1Rlc3QgRmF1bHQnfSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdmLCB7J2ZhdWx0Q29kZSc6IDQyLCAnZmF1bHRTdHJpbmcnOiAnVGVzdCBGYXVsdCd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIE5vbmUpCiAKICAgICAgICAgcyA9IHhtbHJwY2xpYi5NYXJzaGFsbGVyKCkuZHVtcHMoZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1scnBjbGliLkZhdWx0LCB4bWxycGNsaWIubG9hZHMsIHMpCkBAIC0yNjgsMTIgKzI3MiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MiksIGQpCiAKIAotUE9SVCA9IE5vbmUKK0FERFIgPSBQT1JUID0gVVJMID0gTm9uZQogCiAjIFRoZSBldnQgaXMgc2V0IHR3aWNlLiAgRmlyc3Qgd2hlbiB0aGUgc2VydmVyIGlzIHJlYWR5IHRvIHNlcnZlLgogIyBTZWNvbmQgd2hlbiB0aGUgc2VydmVyIGhhcyBiZWVuIHNodXRkb3duLiAgVGhlIHVzZXIgbXVzdCBjbGVhcgogIyB0aGUgZXZlbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gc2V0IHRoZSBmaXJzdCB0aW1lIHRvIGNhdGNoIHRoZSBzZWNvbmQgc2V0LgotZGVmIGh0dHBfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMpOgorZGVmIGh0dHBfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUpOgogICAgIGNsYXNzIFRlc3RJbnN0YW5jZUNsYXNzOgogICAgICAgICBkZWYgZGl2KHNlbGYsIHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHggLy8geQpAQCAtMjk0LDEzICsyOTgsMjAgQEAKICAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBzLCBwb3J0CiAKKyAgICBpZiBub3QgcmVxdWVzdEhhbmRsZXI6CisgICAgICAgIHJlcXVlc3RIYW5kbGVyID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgc2VydiA9IE15WE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIHJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYmluZF9hbmRfYWN0aXZhdGU9RmFsc2UpCiAgICAgdHJ5OgotICAgICAgICBzZXJ2ID0gTXlYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKICAgICAgICAgc2Vydi5zb2NrZXQuc2V0dGltZW91dCgzKQogICAgICAgICBzZXJ2LnNlcnZlcl9iaW5kKCkKLSAgICAgICAgZ2xvYmFsIFBPUlQKLSAgICAgICAgUE9SVCA9IHNlcnYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKyAgICAgICAgZ2xvYmFsIEFERFIsIFBPUlQsIFVSTAorICAgICAgICBBRERSLCBQT1JUID0gc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICAjY29ubmVjdCB0byBJUCBhZGRyZXNzIGRpcmVjdGx5LiAgVGhpcyBhdm9pZHMgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICAgICAgI3RyeWluZyB0byBjb25uZWN0IHRvIHRvICJsb2NhbGhvc3QiIHVzaW5nIGFsbCBhZGRyZXNzIGZhbWlsaWVzLCB3aGljaAorICAgICAgICAjY2F1c2VzIHNsb3dkb3duIGUuZy4gb24gdmlzdGEgd2hpY2ggc3VwcG9ydHMgQUZfSU5FVDYuICBUaGUgc2VydmVyIGxpc3RlbnMKKyAgICAgICAgI29uIEFGX0lORVQgb25seS4KKyAgICAgICAgVVJMID0gImh0dHA6Ly8lczolZCIlKEFERFIsIFBPUlQpCiAgICAgICAgIHNlcnYuc2VydmVyX2FjdGl2YXRlKCkKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9ucygpCkBAIC0zMjIsNiArMzMzLDY2IEBACiAgICAgICAgIFBPUlQgPSBOb25lCiAgICAgICAgIGV2dC5zZXQoKQogCitkZWYgaHR0cF9tdWx0aV9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cywgcmVxdWVzdEhhbmRsZXI9Tm9uZSk6CisgICAgY2xhc3MgVGVzdEluc3RhbmNlQ2xhc3M6CisgICAgICAgIGRlZiBkaXYoc2VsZiwgeCwgeSk6CisgICAgICAgICAgICByZXR1cm4geCAvLyB5CisKKyAgICAgICAgZGVmIF9tZXRob2RIZWxwKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAnZGl2JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1RoaXMgaXMgdGhlIGRpdiBmdW5jdGlvbicKKworICAgIGRlZiBteV9mdW5jdGlvbigpOgorICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBjbGFzcyBNeVhNTFJQQ1NlcnZlcihTaW1wbGVYTUxSUENTZXJ2ZXIuTXVsdGlQYXRoWE1MUlBDU2VydmVyKToKKyAgICAgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhlIHNvY2tldCBpcyBhbHdheXMgbm9uLWJsb2NraW5nLiAgT24gTGludXgsIHNvY2tldAorICAgICAgICAgICAgIyBhdHRyaWJ1dGVzIGFyZSBub3QgaW5oZXJpdGVkIGxpa2UgdGhleSBhcmUgb24gKkJTRCBhbmQgV2luZG93cy4KKyAgICAgICAgICAgIHMsIHBvcnQgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgcy5zZXRibG9ja2luZyhUcnVlKQorICAgICAgICAgICAgcmV0dXJuIHMsIHBvcnQKKworICAgIGlmIG5vdCByZXF1ZXN0SGFuZGxlcjoKKyAgICAgICAgcmVxdWVzdEhhbmRsZXIgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICBjbGFzcyBNeVJlcXVlc3RIYW5kbGVyKHJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcnBjX3BhdGhzID0gW10KKworICAgIHNlcnYgPSBNeVhNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDApLCBNeVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYmluZF9hbmRfYWN0aXZhdGU9RmFsc2UpCisgICAgc2Vydi5zb2NrZXQuc2V0dGltZW91dCgzKQorICAgIHNlcnYuc2VydmVyX2JpbmQoKQorICAgIHRyeToKKyAgICAgICAgZ2xvYmFsIEFERFIsIFBPUlQsIFVSTAorICAgICAgICBBRERSLCBQT1JUID0gc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICAjY29ubmVjdCB0byBJUCBhZGRyZXNzIGRpcmVjdGx5LiAgVGhpcyBhdm9pZHMgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICAgICAgI3RyeWluZyB0byBjb25uZWN0IHRvIHRvICJsb2NhbGhvc3QiIHVzaW5nIGFsbCBhZGRyZXNzIGZhbWlsaWVzLCB3aGljaAorICAgICAgICAjY2F1c2VzIHNsb3dkb3duIGUuZy4gb24gdmlzdGEgd2hpY2ggc3VwcG9ydHMgQUZfSU5FVDYuICBUaGUgc2VydmVyIGxpc3RlbnMKKyAgICAgICAgI29uIEFGX0lORVQgb25seS4KKyAgICAgICAgVVJMID0gImh0dHA6Ly8lczolZCIlKEFERFIsIFBPUlQpCisgICAgICAgIHNlcnYuc2VydmVyX2FjdGl2YXRlKCkKKyAgICAgICAgcGF0aHMgPSBbIi9mb28iLCAiL2Zvby9iYXIiXQorICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIGQgPSBzZXJ2LmFkZF9kaXNwYXRjaGVyKHBhdGgsIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENEaXNwYXRjaGVyKCkpCisgICAgICAgICAgICBkLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKyAgICAgICAgICAgIGQucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9ucygpCisgICAgICAgIHNlcnYuZ2V0X2Rpc3BhdGNoZXIocGF0aHNbMF0pLnJlZ2lzdGVyX2Z1bmN0aW9uKHBvdykKKyAgICAgICAgc2Vydi5nZXRfZGlzcGF0Y2hlcihwYXRoc1sxXSkucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKKyAgICAgICAgZXZ0LnNldCgpCisKKyAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cworICAgICAgICB3aGlsZSBudW1yZXF1ZXN0cyA+IDA6CisgICAgICAgICAgICBzZXJ2LmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIG51bXJlcXVlc3RzIC09IDEKKworICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgUE9SVCA9IE5vbmUKKyAgICAgICAgZXZ0LnNldCgpCisKICMgVGhpcyBmdW5jdGlvbiBwcmV2ZW50cyBlcnJvcnMgbGlrZToKICMgICAgPFByb3RvY29sRXJyb3IgZm9yIGxvY2FsaG9zdDo1NzUyNy9SUEMyOiA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yPgogZGVmIGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKQEAgLTM0MywzNyArNDE0LDQzIEBACiAKICAgICByZXR1cm4gRmFsc2UKIAotIyBOT1RFOiBUaGUgdGVzdHMgaW4gU2ltcGxlU2VydmVyVGVzdENhc2Ugd2lsbCBpZ25vcmUgZmFpbHVyZXMgY2F1c2VkIGJ5Ci0jICJ0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSIgZXhjZXB0aW9ucyByYWlzZWQgaW4gU2ltcGxlWE1MUlBDU2VydmVyLiAgVGhpcwotIyBjb25kaXRpb24gb2NjdXJzIGluZnJlcXVlbnRseSBvbiBzb21lIHBsYXRmb3JtcywgZnJlcXVlbnRseSBvbiBvdGhlcnMsIGFuZAotIyBpcyBhcHBhcmVudGx5IGNhdXNlZCBieSB1c2luZyBTaW1wbGVYTUxSUENTZXJ2ZXIgd2l0aCBhIG5vbi1ibG9ja2luZyBzb2NrZXQuCi0jIElmIHRoZSBzZXJ2ZXIgY2xhc3MgaXMgdXBkYXRlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgdG8gaGFuZGxlIHRoaXMKLSMgc2l0dWF0aW9uIG1vcmUgZ3JhY2VmdWxseSwgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIG1vZGlmaWVkIGFwcHJvcHJpYXRlbHkuCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQmFzZVNlcnZlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICByZXF1ZXN0SGFuZGxlciA9IE5vbmUKKyAgICByZXF1ZXN0X2NvdW50ID0gMQorICAgIHRocmVhZEZ1bmMgPSBzdGF0aWNtZXRob2QoaHR0cF9zZXJ2ZXIpCiAKLWNsYXNzIFNpbXBsZVNlcnZlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICMgZW5hYmxlIHRyYWNlYmFjayByZXBvcnRpbmcKICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQogCiAgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgIyBzdGFydCBzZXJ2ZXIgdGhyZWFkIHRvIGhhbmRsZSByZXF1ZXN0cwotICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5ldnQsIDEpCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBfc2VydmVyLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQorICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5ldnQsIHNlbGYucmVxdWVzdF9jb3VudCwgc2VsZi5yZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi50aHJlYWRGdW5jLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQogCiAgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0byBiZSByZWFkeQotICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgxMCkKICAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAjIHdhaXQgb24gdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCi0gICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KDEwKQogCiAgICAgICAgICMgZGlzYWJsZSB0cmFjZWJhY2sgcmVwb3J0aW5nCiAgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IEZhbHNlCiAKKyMgTk9URTogVGhlIHRlc3RzIGluIFNpbXBsZVNlcnZlclRlc3RDYXNlIHdpbGwgaWdub3JlIGZhaWx1cmVzIGNhdXNlZCBieQorIyAidGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiIGV4Y2VwdGlvbnMgcmFpc2VkIGluIFNpbXBsZVhNTFJQQ1NlcnZlci4gIFRoaXMKKyMgY29uZGl0aW9uIG9jY3VycyBpbmZyZXF1ZW50bHkgb24gc29tZSBwbGF0Zm9ybXMsIGZyZXF1ZW50bHkgb24gb3RoZXJzLCBhbmQKKyMgaXMgYXBwYXJlbnRseSBjYXVzZWQgYnkgdXNpbmcgU2ltcGxlWE1MUlBDU2VydmVyIHdpdGggYSBub24tYmxvY2tpbmcgc29ja2V0CisjIElmIHRoZSBzZXJ2ZXIgY2xhc3MgaXMgdXBkYXRlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgdG8gaGFuZGxlIHRoaXMKKyMgc2l0dWF0aW9uIG1vcmUgZ3JhY2VmdWxseSwgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIG1vZGlmaWVkIGFwcHJvcHJpYXRlbHkuCisKK2NsYXNzIFNpbXBsZVNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2ltcGxlMShzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCiAgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwpAQCAtMzgxLDExICs0NTgsMjYgQEAKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCiAKKyAgICBkZWYgdGVzdF9ub25hc2NpaShzZWxmKToKKyAgICAgICAgc3RhcnRfc3RyaW5nID0gJ1BcTntMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIENJUkNVTUZMRVh9dCcKKyAgICAgICAgZW5kX3N0cmluZyA9ICdoXE57TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOfW4nCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKHN0YXJ0X3N0cmluZywgZW5kX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N0cmluZyArIGVuZF9zdHJpbmcpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0IHVuYXZhaWxhYmxlIGVycm9ycy4KKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisKICAgICAjIFtjaF0gVGhlIHRlc3QgNDA0IGlzIGNhdXNpbmcgbG90cyBvZiBmYWxzZSBhbGFybXMuCiAgICAgZGVmIFhYWHRlc3RfNDA0KHNlbGYpOgogICAgICAgICAjIHNlbmQgUE9TVCB3aXRoIGh0dHBsaWIsIGl0IHNob3VsZCByZXR1cm4gNDA0IGhlYWRlciBhbmQKICAgICAgICAgIyAnTm90IEZvdW5kJyBtZXNzYWdlLgotICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignbG9jYWxob3N0JywgUE9SVCkKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oQUREUiwgUE9SVCkKICAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy90aGlzLWlzLW5vdC12YWxpZCcpCiAgICAgICAgIHJlc3BvbnNlID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICAgICAgIGNvbm4uY2xvc2UoKQpAQCAtMzk1LDcgKzQ4Nyw3IEBACiAKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMShzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgZXhwZWN0ZWRfbWV0aG9kcyA9IHNldChbJ3BvdycsICdkaXYnLCAnbXlfZnVuY3Rpb24nLCAnYWRkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubGlzdE1ldGhvZHMnLCAnc3lzdGVtLm1ldGhvZEhlbHAnLApAQCAtNDEwLDcgKzUwMiw3IEBACiAgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjIoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVzdCBfbWV0aG9kSGVscCgpCi0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKQEAgLTQxOSwxMCArNTExLDEyIEBACiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjMoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVzdCBuYXRpdmUgZG9jCi0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG15ZnVuY3Rpb24gPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdteV9mdW5jdGlvbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZnVuY3Rpb24sICdUaGlzIGlzIG15IGZ1bmN0aW9uJykKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKQEAgLTQzNSw3ICs1MjksNyBAQAogICAgICAgICAjIHRoZSBTaW1wbGVYTUxSUENTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHNpZ25hdHVyZXMsIGJ1dAogICAgICAgICAjIGF0IGxlYXN0IGNoZWNrIHRoYXQgd2UgY2FuIHRyeSBtYWtpbmcgdGhlIGNhbGwKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CkBAIC00NDYsNyArNTQwLDcgQEAKIAogICAgIGRlZiB0ZXN0X211bHRpY2FsbChzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtdWx0aWNhbGwgPSB4bWxycGNsaWIuTXVsdGlDYWxsKHApCiAgICAgICAgICAgICBtdWx0aWNhbGwuYWRkKDIsMykKICAgICAgICAgICAgIG11bHRpY2FsbC5wb3coNiw4KQpAQCAtNDYzLDcgKzU1Nyw3IEBACiAKICAgICBkZWYgdGVzdF9ub25fZXhpc3RpbmdfbXVsdGljYWxsKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG11bHRpY2FsbCA9IHhtbHJwY2xpYi5NdWx0aUNhbGwocCkKICAgICAgICAgICAgIG11bHRpY2FsbC50aGlzX2lzX25vdF9leGlzdHMoKQogICAgICAgICAgICAgcmVzdWx0ID0gbXVsdGljYWxsKCkKQEAgLTQ4NywxMSArNTgxLDE4MSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLnJlc29sdmVfZG90dGVkX2F0dHJpYnV0ZSwgc3RyLCAnX19hZGQnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlKHN0ciwgJ3RpdGxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlKHN0ciwgJ3RpdGxlJykpCiAgICAgICAgICMgR2V0IHRoZSB0ZXN0IHRvIHJ1biBmYXN0ZXIgYnkgc2VuZGluZyBhIHJlcXVlc3Qgd2l0aCB0ZXN0X3NpbXBsZTEuCiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKK2NsYXNzIE11bHRpUGF0aFNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgdGhyZWFkRnVuYyA9IHN0YXRpY21ldGhvZChodHRwX211bHRpX3NlcnZlcikKKyAgICByZXF1ZXN0X2NvdW50ID0gMgorICAgIGRlZiB0ZXN0X3BhdGgxKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCsiL2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1scnBjbGliLkZhdWx0LCBwLmFkZCwgNiwgOCkKKyAgICBkZWYgdGVzdF9wYXRoMihzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwrIi9mb28vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFkZCg2LDgpLCA2KzgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgcC5wb3csIDYsIDgpCisKKyNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAvMS4xIGtlZXAtYWxpdmUgbWVjaGFuaXNtCisjZG9lcyBpbmRlZWQgc2VydmUgc3Vic2VxdWVudCByZXF1ZXN0cyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uCitjbGFzcyBCYXNlS2VlcGFsaXZlU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICAjYSByZXF1ZXN0IGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBrZWVwLWFsaXZlIGFuZCBsb2dzIHJlcXVlc3RzIGludG8gYQorICAgICNjbGFzcyB2YXJpYWJsZQorICAgIGNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHBhcmVudENsYXNzID0gU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgICAgIHByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisgICAgICAgIG15UmVxdWVzdHMgPSBbXQorICAgICAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5teVJlcXVlc3RzLmFwcGVuZChbXSkKKyAgICAgICAgICAgIHNlbGYucmVxaWR4ID0gbGVuKHNlbGYubXlSZXF1ZXN0cyktMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Q2xhc3MuaGFuZGxlKHNlbGYpCisgICAgICAgIGRlZiBoYW5kbGVfb25lX3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnBhcmVudENsYXNzLmhhbmRsZV9vbmVfcmVxdWVzdChzZWxmKQorICAgICAgICAgICAgc2VsZi5teVJlcXVlc3RzW3NlbGYucmVxaWR4XS5hcHBlbmQoc2VsZi5yYXdfcmVxdWVzdGxpbmUpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICByZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjY2xlYXIgcmVxdWVzdCBsb2cKKyAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzID0gW10KKyAgICAgICAgcmV0dXJuIEJhc2VTZXJ2ZXJUZXN0Q2FzZS5zZXRVcChzZWxmKQorCisjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQLzEuMSBrZWVwLWFsaXZlIG1lY2hhbmlzbQorI2RvZXMgaW5kZWVkIHNlcnZlIHN1YnNlcXVlbnQgcmVxdWVzdHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorY2xhc3MgS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKEJhc2VLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgI2RvIHRocmVlIHJlcXVlc3RzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorCisgICAgICAgICN0aGV5IHNob3VsZCBoYXZlIGFsbCBiZWVuIGhhbmRsZWQgYnkgYSBzaW5nbGUgcmVxdWVzdCBoYW5kbGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyksIDEpCisKKyAgICAgICAgI2NoZWNrIHRoYXQgd2UgZGlkIGF0IGxlYXN0IHR3byAodGhlIHRoaXJkIG1heSBiZSBwZW5kaW5nIGFwcGVuZAorICAgICAgICAjZHVlIHRvIHRocmVhZCBzY2hlZHVsaW5nKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzWy0xXSksIDIpCisKKyN0ZXN0IHNwZWNpYWwgYXR0cmlidXRlIGFjY2VzcyBvbiB0aGUgc2VydmVycHJveHksIHRocm91Z2ggdGhlIF9fY2FsbF9fCisjZnVuY3Rpb24uCitjbGFzcyBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIoQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKToKKyAgICAjYXNrIGZvciB0d28ga2VlcGFsaXZlIHJlcXVlc3RzIHRvIGJlIGhhbmRsZWQuCisgICAgcmVxdWVzdF9jb3VudD0yCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICNkbyBzb21lIHJlcXVlc3RzIHdpdGggY2xvc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHAoImNsb3NlIikoKSAjdGhpcyBzaG91bGQgdHJpZ2dlciBhIG5ldyBrZWVwLWFsaXZlIHJlcXVlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKworICAgICAgICAjdGhleSBzaG91bGQgaGF2ZSBhbGwgYmVlbiB0d28gcmVxdWVzdCBoYW5kbGVycywgZWFjaCBoYXZpbmcgbG9nZ2VkIGF0IGxlYXN0CisgICAgICAgICN0d28gY29tcGxldGUgcmVxdWVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0c1stMV0pLCAyKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzWy0yXSksIDIpCisKKyAgICBkZWYgdGVzdF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAjZG8gc29tZSByZXF1ZXN0cyB3aXRoIGNsb3NlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHAoInRyYW5zcG9ydCIpLmNsb3NlKCkgI3NhbWUgYXMgYWJvdmUsIHJlYWxseS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMpLCAyKQorCisjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGd6aXAgZW5jb2Rpbmcgd29ya3MgaW4gYm90aCBkaXJlY3Rpb25zCisjKGZvciBhIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSkKK2NsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgorICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCisgICAgI2NsYXNzIHZhcmlhYmxlCisgICAgY2xhc3MgUmVxdWVzdEhhbmRsZXIoU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcGFyZW50Q2xhc3MgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9ICdIVFRQLzEuMScKKworICAgICAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgICAgICNzdG9yZSBjb250ZW50IG9mIGxhc3QgcmVxdWVzdCBpbiBjbGFzcworICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uY29udGVudF9sZW5ndGggPSBpbnQoc2VsZi5oZWFkZXJzWyJjb250ZW50LWxlbmd0aCJdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Q2xhc3MuZG9fUE9TVChzZWxmKQorICAgIHJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXIKKworICAgIGNsYXNzIFRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKKyAgICAgICAgI2N1c3RvbSB0cmFuc3BvcnQsIHN0b3JlcyB0aGUgcmVzcG9uc2UgbGVuZ3RoIGZvciBvdXIgcGVydXNhbAorICAgICAgICBmYWtlX2d6aXAgPSBGYWxzZQorICAgICAgICBkZWYgcGFyc2VfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAgICAgc2VsZi5yZXNwb25zZV9sZW5ndGg9aW50KHJlc3BvbnNlLmdldGhlYWRlcigiY29udGVudC1sZW5ndGgiLCAwKSkKKyAgICAgICAgICAgIHJldHVybiB4bWxycGNsaWIuVHJhbnNwb3J0LnBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKQorCisgICAgICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgYm9keSk6CisgICAgICAgICAgICBpZiBzZWxmLmZha2VfZ3ppcDoKKyAgICAgICAgICAgICAgICAjYWRkIGEgbG9uZSBnemlwIGhlYWRlciB0byBpbmR1Y2UgZGVjb2RlIGVycm9yIHJlbW90ZWx5CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgICAgICByZXR1cm4geG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgYm9keSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZVNlcnZlclRlc3RDYXNlLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVzdF9nemlwX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIHRyYW5zcG9ydD10KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGEgPSBzZWxmLlJlcXVlc3RIYW5kbGVyLmNvbnRlbnRfbGVuZ3RoCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IDAgI3R1cm4gb24gcmVxdWVzdCBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGIgPSBzZWxmLlJlcXVlc3RIYW5kbGVyLmNvbnRlbnRfbGVuZ3RoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhPmIpCisKKyAgICBkZWYgdGVzdF9iYWRfZ3ppcF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5UcmFuc3BvcnQoKQorICAgICAgICB0LmVuY29kZV90aHJlc2hvbGQgPSBOb25lCisgICAgICAgIHQuZmFrZV9nemlwID0gVHJ1ZQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCwgdHJhbnNwb3J0PXQpCisgICAgICAgIGNtID0gc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuY29tcGlsZShyIlxiNDAwXGIiKSkKKyAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgIHAucG93KDYsIDgpCisKKyAgICBkZWYgdGVzdF9nc2lwX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5UcmFuc3BvcnQoKQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCwgdHJhbnNwb3J0PXQpCisgICAgICAgIG9sZCA9IHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSBOb25lICNubyBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGEgPSB0LnJlc3BvbnNlX2xlbmd0aAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSAwICNhbHdheXMgZW5jb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYiA9IHQucmVzcG9uc2VfbGVuZ3RoCisgICAgICAgIHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZCA9IG9sZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYT5iKQorCisjVGVzdCBzcGVjaWFsIGF0dHJpYnV0ZXMgb2YgdGhlIFNlcnZlclByb3h5IG9iamVjdAorY2xhc3MgU2VydmVyUHJveHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcChzZWxmKQorICAgICAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgICAgICBzZWxmLnVybCA9IFVSTAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXaXRob3V0IHRocmVhZGluZywgaHR0cF9zZXJ2ZXIoKSBhbmQgaHR0cF9tdWx0aV9zZXJ2ZXIoKSB3aWxsIG5vdAorICAgICAgICAgICAgIyBiZSBleGVjdXRlZCBhbmQgVVJMIGlzIHN0aWxsIGVxdWFsIHRvIE5vbmUuICdodHRwOi8vJyBpcyBhIGp1c3QKKyAgICAgICAgICAgICMgZW5vdWdoIHRvIGNob29zZSB0aGUgc2NoZW1lIChIVFRQKQorICAgICAgICAgICAgc2VsZi51cmwgPSAnaHR0cDovLycKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KHNlbGYudXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2Nsb3NlJykoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgdCA9IHhtbHJwY2xpYi5UcmFuc3BvcnQoKQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KHNlbGYudXJsLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCd0cmFuc3BvcnQnKSwgdCkKKwogIyBUaGlzIGlzIGEgY29udHJpdmVkIHdheSB0byBtYWtlIGEgZmFpbHVyZSBvY2N1ciBvbiB0aGUgc2VydmVyIHNpZGUKICMgaW4gb3JkZXIgdG8gdGVzdCB0aGUgX3NlbmRfdHJhY2ViYWNrX2hlYWRlciBmbGFnIG9uIHRoZSBzZXJ2ZXIKIGNsYXNzIEZhaWxpbmdNZXNzYWdlQ2xhc3MobWltZXRvb2xzLk1lc3NhZ2UpOgpAQCAtNTAyLDYgKzc2Niw3IEBACiAgICAgICAgIHJldHVybiBtaW1ldG9vbHMuTWVzc2FnZS5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCkBAIC01MzEsNyArNzk2LDcgQEAKIAogICAgICAgICAjIHRlc3QgYSBjYWxsIHRoYXQgc2hvdWxkbid0IGZhaWwganVzdCBhcyBhIHNtb2tlIHRlc3QKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCiAgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwpAQCAtNTQ0LDcgKzgwOSw3IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3MgPSBGYWlsaW5nTWVzc2FnZUNsYXNzCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCiAgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwpAQCAtNTY0LDcgKzgyOSw3IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KCdodHRwOi8vbG9jYWxob3N0OiVkJyAlIFBPUlQpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHAucG93KDYsOCkKICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCkBAIC01ODUsNjMgKzg1MCw2MyBAQAogCiAgICAgZGVmIHRlc3RfY2dpX2dldChzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudi5zZXQoJ1JFUVVFU1RfTUVUSE9EJywgJ0dFVCcpCisgICAgICAgICAgICBlbnZbJ1JFUVVFU1RfTUVUSE9EJ10gPSAnR0VUJwogICAgICAgICAgICAgIyBpZiB0aGUgbWV0aG9kIGlzIEdFVCBhbmQgbm8gcmVxdWVzdF90ZXh0IGlzIGdpdmVuLCBpdCBydW5zIGhhbmRsZV9nZXQKICAgICAgICAgICAgICMgZ2V0IHN5c291dCBvdXRwdXQKLSAgICAgICAgICAgIHRtcCA9IHN5cy5zdGRvdXQKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3IikKLSAgICAgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHRtcAorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgZGF0YV9vdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5jZ2kuaGFuZGxlX3JlcXVlc3QoKQogCiAgICAgICAgICAgICAjIHBhcnNlIFN0YXR1cyBoZWFkZXIKLSAgICAgICAgICAgIGhhbmRsZSA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInIiKS5yZWFkKCkKKyAgICAgICAgICAgIGRhdGFfb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIGhhbmRsZSA9IGRhdGFfb3V0LnJlYWQoKQogICAgICAgICAgICAgc3RhdHVzID0gaGFuZGxlLnNwbGl0KClbMV0KICAgICAgICAgICAgIG1lc3NhZ2UgPSAnICcuam9pbihoYW5kbGUuc3BsaXQoKVsyOjRdKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgJzQwMCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICdCYWQgUmVxdWVzdCcpCiAKLSAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2dpX3htbHJwY19yZXNwb25zZShzZWxmKToKICAgICAgICAgZGF0YSA9ICIiIjw/eG1sIHZlcnNpb249JzEuMCc/PgotPG1ldGhvZENhbGw+Ci0gICAgPG1ldGhvZE5hbWU+dGVzdF9tZXRob2Q8L21ldGhvZE5hbWU+Ci0gICAgPHBhcmFtcz4KLSAgICAgICAgPHBhcmFtPgotICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+Zm9vPC9zdHJpbmc+PC92YWx1ZT4KLSAgICAgICAgPC9wYXJhbT4KLSAgICAgICAgPHBhcmFtPgotICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+YmFyPC9zdHJpbmc+PC92YWx1ZT4KLSAgICAgICAgPC9wYXJhbT4KLSAgICAgPC9wYXJhbXM+Ci08L21ldGhvZENhbGw+Ci0iIiIKLSAgICAgICAgb3BlbigieG1sZGF0YS50eHQiLCAidyIpLndyaXRlKGRhdGEpCi0gICAgICAgIHRtcDEgPSBzeXMuc3RkaW4KLSAgICAgICAgdG1wMiA9IHN5cy5zdGRvdXQKKyAgICAgICAgPG1ldGhvZENhbGw+CisgICAgICAgICAgICA8bWV0aG9kTmFtZT50ZXN0X21ldGhvZDwvbWV0aG9kTmFtZT4KKyAgICAgICAgICAgIDxwYXJhbXM+CisgICAgICAgICAgICAgICAgPHBhcmFtPgorICAgICAgICAgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5mb288L3N0cmluZz48L3ZhbHVlPgorICAgICAgICAgICAgICAgIDwvcGFyYW0+CisgICAgICAgICAgICAgICAgPHBhcmFtPgorICAgICAgICAgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5iYXI8L3N0cmluZz48L3ZhbHVlPgorICAgICAgICAgICAgICAgIDwvcGFyYW0+CisgICAgICAgICAgICA8L3BhcmFtcz4KKyAgICAgICAgPC9tZXRob2RDYWxsPgorICAgICAgICAiIiIKIAotICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKCJ4bWxkYXRhLnR4dCIsICJyIikKLSAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInciKQotCi0gICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6Ci0gICAgICAgICAgICBlbnYuc2V0KCdDT05URU5UX0xFTkdUSCcsIHN0cihsZW4oZGF0YSkpKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52LCBcCisgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIGRhdGFfb3V0LCBcCisgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZGluKCkgYXMgZGF0YV9pbjoKKyAgICAgICAgICAgIGRhdGFfaW4ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGRhdGFfaW4uc2VlaygwKQorICAgICAgICAgICAgZW52WydDT05URU5UX0xFTkdUSCddID0gc3RyKGxlbihkYXRhKSkKICAgICAgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKLQotICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQotICAgICAgICBzeXMuc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgc3lzLnN0ZGluID0gdG1wMQotICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wMgorICAgICAgICBkYXRhX291dC5zZWVrKDApCiAKICAgICAgICAgIyB3aWxsIHJlc3BvbmQgZXhjZXB0aW9uLCBpZiBzbywgb3VyIGdvYWwgaXMgYWNoaWV2ZWQgOykKLSAgICAgICAgaGFuZGxlID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpLnJlYWQoKQorICAgICAgICBoYW5kbGUgPSBkYXRhX291dC5yZWFkKCkKIAogICAgICAgICAjIHN0YXJ0IHdpdGggNDR0aCBjaGFyIHNvIGFzIG5vdCB0byBnZXQgaHR0cCBoZWFkZXIsIHdlIGp1c3QgbmVlZCBvbmx5IHhtbAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHhtbHJwY2xpYi5sb2FkcywgaGFuZGxlWzQ0Ol0pCiAKLSAgICAgICAgb3MucmVtb3ZlKCJ4bWxkYXRhLnR4dCIpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjIEFsc28gdGVzdCB0aGUgY29udGVudC1sZW5ndGggcmV0dXJuZWQgIGJ5IGhhbmRsZV9yZXF1ZXN0CisgICAgICAgICMgVXNpbmcgdGhlIHNhbWUgdGVzdCBtZXRob2QgaW5vcmRlciB0byBhdm9pZCBhbGwgdGhlIGRhdGFwYXNzaW5nCisgICAgICAgICMgYm9pbGVycGxhdGUgY29kZS4KKyAgICAgICAgIyBUZXN0IGZvciBidWc6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1MDQwCisKKyAgICAgICAgY29udGVudCA9IGhhbmRsZVtoYW5kbGUuZmluZCgiPD94bWwiKTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGludChyZS5zZWFyY2goJ0NvbnRlbnQtTGVuZ3RoOiAoXGQrKScsIGhhbmRsZSkuZ3JvdXAoMSkpLAorICAgICAgICAgICAgbGVuKGNvbnRlbnQpKQorCiAKIGNsYXNzIEZha2VTb2NrZXQ6CiAKQEAgLTY1OCw5ICs5MjMsMTIgQEAKICAgICBkZWYgZ2V0dmFsdWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGEuZ2V0dmFsdWUoKQogCi0gICAgZGVmIG1ha2VmaWxlKHNlbGYsIHgsIHkpOgorICAgIGRlZiBtYWtlZmlsZShzZWxmLCB4PSdyJywgeT0tMSk6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKIGNsYXNzIEZha2VUcmFuc3BvcnQoeG1scnBjbGliLlRyYW5zcG9ydCk6CiAgICAgIiIiQSBUcmFuc3BvcnQgaW5zdGFuY2UgdGhhdCByZWNvcmRzIGluc3RlYWQgb2Ygc2VuZGluZyBhIHJlcXVlc3QuCiAKQEAgLTY3MSw3ICs5MzksNyBAQAogCiAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKICAgICAgICAgY29ubiA9IHhtbHJwY2xpYi5UcmFuc3BvcnQubWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpCi0gICAgICAgIGNvbm4uX2Nvbm4uc29jayA9IHNlbGYuZmFrZV9zb2NrZXQgPSBGYWtlU29ja2V0KCkKKyAgICAgICAgY29ubi5zb2NrID0gc2VsZi5mYWtlX3NvY2tldCA9IEZha2VTb2NrZXQoKQogICAgICAgICByZXR1cm4gY29ubgogCiBjbGFzcyBUcmFuc3BvcnRTdWJjbGFzc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTY5NSw3ICs5NjMsNyBAQAogICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCJYLVRlc3QiLCAidGVzdF9jdXN0b21fdXNlcl9hZ2VudCIpCiAKICAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiWC1UZXN0OiB0ZXN0X2N1c3RvbV91c2VyX2FnZW50XHJcbiIgaW4gcmVxKQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3RfY3VzdG9tX3VzZXJfYWdlbnRcclxuIiwgcmVxKQogCiAgICAgZGVmIHRlc3Rfc2VuZF9ob3N0KHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0VHJhbnNwb3J0KEZha2VUcmFuc3BvcnQpOgpAQCAtNzA1LDcgKzk3Myw3IEBACiAgICAgICAgICAgICAgICAgY29ubi5wdXRoZWFkZXIoIlgtVGVzdCIsICJ0ZXN0X3NlbmRfaG9zdCIpCiAKICAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiWC1UZXN0OiB0ZXN0X3NlbmRfaG9zdFxyXG4iIGluIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiWC1UZXN0OiB0ZXN0X3NlbmRfaG9zdFxyXG4iLCByZXEpCiAKICAgICBkZWYgdGVzdF9zZW5kX3JlcXVlc3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3RUcmFuc3BvcnQoRmFrZVRyYW5zcG9ydCk6CkBAIC03MTUsNyArOTgzLDcgQEAKICAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcigiWC1UZXN0IiwgInRlc3Rfc2VuZF9yZXF1ZXN0IikKIAogICAgICAgICByZXEgPSBzZWxmLmlzc3VlX3JlcXVlc3QoVGVzdFRyYW5zcG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJYLVRlc3Q6IHRlc3Rfc2VuZF9yZXF1ZXN0XHJcbiIgaW4gcmVxKQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3Rfc2VuZF9yZXF1ZXN0XHJcbiIsIHJlcSkKIAogICAgIGRlZiB0ZXN0X3NlbmRfY29udGVudChzZWxmKToKICAgICAgICAgY2xhc3MgVGVzdFRyYW5zcG9ydChGYWtlVHJhbnNwb3J0KToKQEAgLTcyNSwyMCArOTkzLDI0IEBACiAgICAgICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX2NvbnRlbnQoc2VsZiwgY29ubiwgYm9keSkKIAogICAgICAgICByZXEgPSBzZWxmLmlzc3VlX3JlcXVlc3QoVGVzdFRyYW5zcG9ydCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJYLVRlc3Q6IHRlc3Rfc2VuZF9jb250ZW50XHJcbiIgaW4gcmVxKQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3Rfc2VuZF9jb250ZW50XHJcbiIsIHJlcSkKIAorQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB4bWxycGNfdGVzdHMgPSBbWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAogICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFRyYW5zcG9ydFN1YmNsYXNzVGVzdENhc2VdCi0KLSAgICAjIFRoZSB0ZXN0IGNhc2VzIGFnYWluc3QgYSBTaW1wbGVYTUxSUENTZXJ2ZXIgcmFpc2UgYSBzb2NrZXQgZXJyb3IKLSAgICAjIDEwMDM1IChXU0FFV09VTERCTE9DSykgaW4gdGhlIHNlcnZlciB0aHJlYWQgaGFuZGxlX3JlcXVlc3QgY2FsbCB3aGVuCi0gICAgIyBydW4gb24gV2luZG93cy4gVGhpcyBvbmx5IGhhcHBlbnMgb24gdGhlIGZpcnN0IHRlc3QgdG8gcnVuLCBidXQgaXQKLSAgICAjIGZhaWxzIGV2ZXJ5IHRpbWUgYW5kIHNvIHRoZXNlIHRlc3RzIGFyZSBza2lwcGVkIG9uIHdpbjMyIHBsYXRmb3Jtcy4KLSAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTaW1wbGVTZXJ2ZXJUZXN0Q2FzZSkKLSAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoQ0dJSGFuZGxlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgZ3ppcAorICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCiAKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeHBpY2tsZS5weSBiL0xpYi90ZXN0L3Rlc3RfeHBpY2tsZS5weQppbmRleCAzZmZiNzQ0Li4yY2UxZGNiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3hwaWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94cGlja2xlLnB5CkBAIC0xLDE5ICsxLDQyIEBACiAjIHRlc3RfcGlja2xlIGR1bXBzIGFuZCBsb2FkcyBwaWNrbGVzIHZpYSBwaWNrbGUucHkuCiAjIHRlc3RfY3BpY2tsZSBkb2VzIHRoZSBzYW1lLCBidXQgdmlhIHRoZSBjUGlja2xlIG1vZHVsZS4KICMgVGhpcyB0ZXN0IGNvdmVycyB0aGUgb3RoZXIgdHdvIGNhc2VzLCBtYWtpbmcgcGlja2xlcyB3aXRoIG9uZSBtb2R1bGUgYW5kCi0jIGxvYWRpbmcgdGhlbSB2aWEgdGhlIG90aGVyLgorIyBsb2FkaW5nIHRoZW0gdmlhIHRoZSBvdGhlci4gSXQgYWxzbyB0ZXN0cyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisjIHByZXZpb3VzIHZlcnNpb24gb2YgUHl0aG9uIGJ5IGJvdW5jaW5nIHBpY2tsZWQgb2JqZWN0cyB0aHJvdWdoIFB5dGhvbiAyLjQKKyMgYW5kIFB5dGhvbiAyLjUgcnVubmluZyB0aGlzIGZpbGUuCiAKLWltcG9ydCBwaWNrbGUKIGltcG9ydCBjUGlja2xlCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlVGVzdHMKKworIyBNb3N0IGRpc3Ryby1zdXBwbGllZCBQeXRob25zIGRvbid0IGluY2x1ZGUgdGhlIHRlc3RzCisjIG9yIHRlc3Qgc3VwcG9ydCBmaWxlcywgYW5kIHNvbWUgZG9uJ3QgaW5jbHVkZSBhIHdheSB0byBnZXQgdGhlc2UgYmFjayBldmVuIGlmCisjIHlvdSdyZSB3aWxsIHRvIGluc3RhbGwgZXh0cmEgcGFja2FnZXMgKGxpa2UgVWJ1bnR1KS4gRG9pbmcgdGhpbmdzIGxpa2UgdGhpcworIyAicHJvdmlkZXMiIGEgcGlja2xldGVzdGVyIG1vZHVsZSBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHRoYXQgbWF5IGJlCisjIGluc3RhbGxlZCB3aXRob3V0IGl0LiBOb3RlIHRoYXQgb25lIG90aGVyIGRlc2lnbiBmb3IgdGhpcyBpbnZvbHZlcyBtZXNzaW5nCisjIHdpdGggc3lzLnBhdGgsIHdoaWNoIGlzIGxlc3MgcHJlY2lzZS4KK21vZF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGV0ZXN0ZXIucHkiKSkKK3BpY2tsZXRlc3RlciA9IHR5cGVzLk1vZHVsZVR5cGUoInRlc3QucGlja2xldGVzdGVyIikKK2V4ZWMgY29tcGlsZShvcGVuKG1vZF9wYXRoKS5yZWFkKCksIG1vZF9wYXRoLCAnZXhlYycpIGluIHBpY2tsZXRlc3Rlci5fX2RpY3RfXworQWJzdHJhY3RQaWNrbGVUZXN0cyA9IHBpY2tsZXRlc3Rlci5BYnN0cmFjdFBpY2tsZVRlc3RzCitpZiBwaWNrbGV0ZXN0ZXIuX19uYW1lX18gaW4gc3lzLm1vZHVsZXM6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJEaWQgbm90IGV4cGVjdCB0byBmaW5kIHRlc3QucGlja2xldGVzdGVyIGxvYWRlZCIpCitzeXMubW9kdWxlc1twaWNrbGV0ZXN0ZXIuX19uYW1lX19dID0gcGlja2xldGVzdGVyCisKIAogY2xhc3MgRHVtcENQaWNrbGVfTG9hZFBpY2tsZShBYnN0cmFjdFBpY2tsZVRlc3RzKToKIAogICAgIGVycm9yID0gS2V5RXJyb3IKIAotICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9MCk6CisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD1GYWxzZSk6CiAgICAgICAgICMgSWdub3JlIGZhc3QKICAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKIApAQCAtMjUsNyArNDgsNyBAQAogCiAgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAogCi0gICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD0wKToKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PUZhbHNlKToKICAgICAgICAgIyBJZ25vcmUgZmFzdAogICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCiAKQEAgLTMzLDExICs1NiwyMDUgQEAKICAgICAgICAgIyBJZ25vcmUgZmFzdAogICAgICAgICByZXR1cm4gY1BpY2tsZS5sb2FkcyhidWYpCiAKK2RlZiBoYXZlX3B5dGhvbl92ZXJzaW9uKG5hbWUpOgorICAgICIiIkNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgaXMgYSB2YWxpZCBQeXRob24gYmluYXJ5IGFuZCBoYXMKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC4KKworICAgIFRoaXMgcmVzcGVjdHMgeW91ciBQQVRILgorCisgICAgQXJnczoKKyAgICAgICAgbmFtZTogc2hvcnQgc3RyaW5nIG5hbWUgb2YgYSBQeXRob24gYmluYXJ5IHN1Y2ggYXMgInB5dGhvbjIuNCIuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUcnVlIGlmIHRoZSBuYW1lIGlzIHZhbGlkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgcmV0dXJuIG9zLnN5c3RlbShuYW1lICsgIiAtYyAnaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0JyIpID09IDAKKworCitjbGFzcyBBYnN0cmFjdENvbXBhdFRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgorCisgICAgbW9kdWxlID0gTm9uZQorICAgIHB5dGhvbiA9IE5vbmUKKyAgICBlcnJvciA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHl0aG9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVycm9yKQorCisgICAgZGVmIHNlbmRfdG9fd29ya2VyKHNlbGYsIHB5dGhvbiwgb2JqLCBwcm90byk6CisgICAgICAgICIiIkJvdW5jZSBhIHBpY2tsZWQgb2JqZWN0IHRocm91Z2ggYW5vdGhlciB2ZXJzaW9uIG9mIFB5dGhvbi4KKworICAgICAgICBUaGlzIHdpbGwgcGlja2xlIHRoZSBvYmplY3QsIHNlbmQgaXQgdG8gYSBjaGlsZCBwcm9jZXNzIHdoZXJlIGl0IHdpbGwgYmUKKyAgICAgICAgdW5waWNrbGVkLCB0aGVuIHJlcGlja2xlZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcHl0aG9uOiB0aGUgbmFtZSBvZiB0aGUgUHl0aG9uIGJpbmFyeSB0byBzdGFydC4KKyAgICAgICAgICAgIG9iajogb2JqZWN0IHRvIHBpY2tsZS4KKyAgICAgICAgICAgIHByb3RvOiBwaWNrbGUgcHJvdG9jb2wgbnVtYmVyIHRvIHVzZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIHBpY2tsZWQgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBQcmV2ZW50IHRoZSBzdWJwcm9jZXNzIGZyb20gcGlja2luZyB1cCBpbnZhbGlkIC5weWMgZmlsZXMuCisgICAgICAgIHRhcmdldCA9IF9fZmlsZV9fCisgICAgICAgIGlmIHRhcmdldFstMV0gaW4gKCJjIiwgIm8iKToKKyAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFs6LTFdCisKKyAgICAgICAgZGF0YSA9IHNlbGYubW9kdWxlLmR1bXBzKChwcm90bywgb2JqKSwgcHJvdG8pCisgICAgICAgIHdvcmtlciA9IHN1YnByb2Nlc3MuUG9wZW4oW3B5dGhvbiwgdGFyZ2V0LCAid29ya2VyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB3b3JrZXIuY29tbXVuaWNhdGUoZGF0YSkKKyAgICAgICAgaWYgd29ya2VyLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzdGRlcnIpCisgICAgICAgIHJldHVybiBzdGRvdXQKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9RmFsc2UpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3RvX3dvcmtlcihzZWxmLnB5dGhvbiwgYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBpbnB1dCk6CisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZS5sb2FkcyhpbnB1dCkKKworICAgICMgVGhlc2UgdGVzdHMgYXJlIGRpc2FibGVkIGJlY2F1c2UgdGhleSByZXF1aXJlIHNvbWUgc3BlY2lhbCBzZXR1cAorICAgICMgb24gdGhlIHdvcmtlciB0aGF0J3MgaGFyZCB0byBrZWVwIGluIHN5bmMuCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDEoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0NChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIGlzIGEgY3V0LWRvd24gdmVyc2lvbiBvZiBwaWNrbGV0ZXN0ZXIncyB0ZXN0X2Zsb2F0LiBCYWNrd2FyZHMKKyAgICAjIGNvbXBhdGliaWxpdHkgZm9yIHRoZSB2YWx1ZXMgaW4gZm9yX2Jpbl9wcm90b3Mgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluCisgICAgIyByNjg5MDMgdG8gZml4IGEgYnVnLgorICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBmb3JfYmluX3Byb3RvcyA9IFs0Ljk0ZS0zMjQsIDFlLTMxMF0KKyAgICAgICAgbmVnX2Zvcl9iaW5fcHJvdG9zID0gWy14IGZvciB4IGluIGZvcl9iaW5fcHJvdG9zXQorICAgICAgICB0ZXN0X3ZhbHVlcyA9IFswLjAsIDdlLTMwOCwgNi42MjZlLTM0LCAwLjEsIDAuNSwKKyAgICAgICAgICAgICAgICAgICAgICAgMy4xNCwgMjYzLjQ0NTgyMDYyMzc0MDUzLCA2LjAyMmUyMywgMWUzMF0KKyAgICAgICAgdGVzdF9wcm90bzBfdmFsdWVzID0gdGVzdF92YWx1ZXMgKyBbLXggZm9yIHggaW4gdGVzdF92YWx1ZXNdCisgICAgICAgIHRlc3RfdmFsdWVzID0gdGVzdF9wcm90bzBfdmFsdWVzICsgZm9yX2Jpbl9wcm90b3MgKyBuZWdfZm9yX2Jpbl9wcm90b3MKKworICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF9wcm90bzBfdmFsdWVzOgorICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgMCkKKyAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorCisgICAgICAgIGZvciBwcm90byBpbiBwaWNrbGV0ZXN0ZXIucHJvdG9jb2xzWzE6XToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCBwcm90bykKKyAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisKKyAgICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdhcyBleHBsaWNpdGx5IGJyb2tlbiBpbiByNjc5MzQgdG8gZml4IGEgYnVnLgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfaGlnaF9wbGFuZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgIyBUaGlzIGlzIGEgY3V0LWRvd24gdmVyc2lvbiBvZiBwaWNrbGV0ZXN0ZXIncyB0ZXN0X3VuaWNvZGUuIEJhY2t3YXJkcworICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluIHI2NzkzNCB0byBmaXggYSBidWcuCisgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICAgICBlbmRjYXNlcyA9IFt1JycsIHUnPFxcdT4nLCB1JzxcXFx1MTIzND4nLCB1Jzxcbj4nLCB1JzxcXD4nXQorICAgICAgICAgICAgZm9yIHByb3RvIGluIHBpY2tsZXRlc3Rlci5wcm90b2NvbHM6CisgICAgICAgICAgICAgICAgZm9yIHUgaW4gZW5kY2FzZXM6CisgICAgICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHUsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICB1MiA9IHNlbGYubG9hZHMocCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgdSkKKworCitkZWYgcnVuX2NvbXBhdF90ZXN0KHB5dGhvbl9uYW1lKToKKyAgICByZXR1cm4gKHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJ4cGlja2xlIikgYW5kCisgICAgICAgICAgICBoYXZlX3B5dGhvbl92ZXJzaW9uKHB5dGhvbl9uYW1lKSkKKworCisjIFRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LgoraWYgbm90IHJ1bl9jb21wYXRfdGVzdCgicHl0aG9uMi40Iik6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI0Q29tcGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworZWxzZToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjRDb21wYXQoQWJzdHJhY3RDb21wYXRUZXN0cyk6CisKKyAgICAgICAgbW9kdWxlID0gY1BpY2tsZQorICAgICAgICBweXRob24gPSAicHl0aG9uMi40IgorICAgICAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKKyAgICAgICAgIyBEaXNhYmxlIHRoZXNlIHRlc3RzIGZvciBQeXRob24gMi40LiBNYWtpbmcgdGhlbSBwYXNzIHdvdWxkIHJlcXVpcmUKKyAgICAgICAgIyBub250cml2aWFsbHkgbW9ua2V5cGF0Y2hpbmcgdGhlIHBpY2tsZXRlc3RlciBtb2R1bGUgaW4gdGhlIHdvcmtlci4KKyAgICAgICAgZGVmIHRlc3RfcmVkdWNlX2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIHRlc3RfcmVkdWNlX2V4X2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIFBpY2tsZVB5dGhvbjI0Q29tcGF0KENQaWNrbGVQeXRob24yNENvbXBhdCk6CisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKKworIyBUZXN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNS4KK2lmIG5vdCBydW5fY29tcGF0X3Rlc3QoInB5dGhvbjIuNSIpOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNUNvbXBhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI1Q29tcGF0KEFic3RyYWN0Q29tcGF0VGVzdHMpOgorCisgICAgICAgIG1vZHVsZSA9IGNQaWNrbGUKKyAgICAgICAgcHl0aG9uID0gInB5dGhvbjIuNSIKKyAgICAgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCitjbGFzcyBQaWNrbGVQeXRob24yNUNvbXBhdChDUGlja2xlUHl0aG9uMjVDb21wYXQpOgorCisgICAgbW9kdWxlID0gcGlja2xlCisgICAgZXJyb3IgPSBLZXlFcnJvcgorCisKKyMgVGVzdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjYuCitpZiBub3QgcnVuX2NvbXBhdF90ZXN0KCJweXRob24yLjYiKToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjZDb21wYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNkNvbXBhdChBYnN0cmFjdENvbXBhdFRlc3RzKToKKworICAgICAgICBtb2R1bGUgPSBjUGlja2xlCisgICAgICAgIHB5dGhvbiA9ICJweXRob24yLjYiCisgICAgICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworY2xhc3MgUGlja2xlUHl0aG9uMjZDb21wYXQoQ1BpY2tsZVB5dGhvbjI2Q29tcGF0KToKKworICAgIG1vZHVsZSA9IHBpY2tsZQorICAgIGVycm9yID0gS2V5RXJyb3IKKworCitkZWYgd29ya2VyX21haW4oaW5fc3RyZWFtLCBvdXRfc3RyZWFtKToKKyAgICBtZXNzYWdlID0gY1BpY2tsZS5sb2FkKGluX3N0cmVhbSkKKyAgICBwcm90b2NvbCwgb2JqID0gbWVzc2FnZQorICAgIGNQaWNrbGUuZHVtcChvYmosIG91dF9zdHJlYW0sIHByb3RvY29sKQorCisKIGRlZiB0ZXN0X21haW4oKToKKyAgICBpZiBub3QgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoInhwaWNrbGUiKToKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAidGVzdF94cGlja2xlIC0tIHNraXBwaW5nIGJhY2t3YXJkcyBjb21wYXQgdGVzdHMuIgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJVc2UgJ3JlZ3J0ZXN0LnB5IC11IHhwaWNrbGUnIHRvIHJ1biB0aGVtLiIKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisKICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBEdW1wQ1BpY2tsZV9Mb2FkUGlja2xlLAotICAgICAgICBEdW1wUGlja2xlX0xvYWRDUGlja2xlCisgICAgICAgIER1bXBQaWNrbGVfTG9hZENQaWNrbGUsCisgICAgICAgIENQaWNrbGVQeXRob24yNENvbXBhdCwKKyAgICAgICAgQ1BpY2tsZVB5dGhvbjI1Q29tcGF0LAorICAgICAgICBDUGlja2xlUHl0aG9uMjZDb21wYXQsCisgICAgICAgIFBpY2tsZVB5dGhvbjI0Q29tcGF0LAorICAgICAgICBQaWNrbGVQeXRob24yNUNvbXBhdCwKKyAgICAgICAgUGlja2xlUHl0aG9uMjZDb21wYXQsCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgaWYgIndvcmtlciIgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHdvcmtlcl9tYWluKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94cmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3hyYW5nZS5weQppbmRleCBkYmZlYjQzLi5lM2M3OTllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3hyYW5nZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3hyYW5nZS5weQpAQCAtMzcsMTQgKzM3LDE0IEBACiAgICAgICAgICAgICBpZiB4ID09IHk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsaWYgeCA9PSBzZW50aW5lbDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3swfTogaXRlcmF0b3IgZW5kZWQgdW5leHBlY3RlZGx5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0IHBvc2l0aW9uIHsxfTsgZXhwZWN0ZWQgezJ9Jy5mb3JtYXQodGVzdF9pZCwgaSwgeSkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fTogaXRlcmF0b3IgZW5kZWQgdW5leHBlY3RlZGx5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0IHBvc2l0aW9uIHt9OyBleHBlY3RlZCB7fScuZm9ybWF0KHRlc3RfaWQsIGksIHkpKQogICAgICAgICAgICAgZWxpZiB5ID09IHNlbnRpbmVsOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnezB9OiB1bmV4cGVjdGVkIGV4Y2VzcyBlbGVtZW50IHsxfSBhdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbiB7Mn0nLmZvcm1hdCh0ZXN0X2lkLCB4LCBpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9OiB1bmV4cGVjdGVkIGV4Y2VzcyBlbGVtZW50IHt9IGF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uIHt9Jy5mb3JtYXQodGVzdF9pZCwgeCwgaSkpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnezB9OiB3cm9uZyBlbGVtZW50IGF0IHBvc2l0aW9uIHsxfTsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCB7Mn0sIGdvdCB7M30nLmZvcm1hdCh0ZXN0X2lkLCBpLCB5LCB4KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9OiB3cm9uZyBlbGVtZW50IGF0IHBvc2l0aW9uIHt9OycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIHt9LCBnb3Qge30nLmZvcm1hdCh0ZXN0X2lkLCBpLCB5LCB4KSkKIAogICAgIGRlZiB0ZXN0X3hyYW5nZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgzKSksIFswLCAxLCAyXSkKQEAgLTYzLDI1ICs2MywyNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeHJhbmdlKGErNCwgYSwgLTIpKSwgW2ErNCwgYSsyXSkKIAogICAgICAgICBzZXEgPSBsaXN0KHhyYW5nZShhLCBiLCBjKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydF8oYiBub3QgaW4gc2VxKQorICAgICAgICBzZWxmLmFzc2VydEluKGEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiLCBzZXEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCiAKICAgICAgICAgc2VxID0gbGlzdCh4cmFuZ2UoYiwgYSwgLWMpKQotICAgICAgICBzZWxmLmFzc2VydF8oYiBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhhIG5vdCBpbiBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIHNlcSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKIAogICAgICAgICBzZXEgPSBsaXN0KHhyYW5nZSgtYSwgLWIsIC1jKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC1hIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKC1iIG5vdCBpbiBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oLWEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtYiwgc2VxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhyYW5nZSwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeHJhbmdlLCAxLCAyLCAwKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhyYW5nZSwgMWUxMDAsIDFlMTAxLCAxZTEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAxMCoqMTAwLCAxMCoqMTAxLCAxMCoqMTAxKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAwLCAic3BhbSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlLCAwLCA0MiwgInNwYW0iKQpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgZm9yIHQgaW4gdGVzdGNhc2VzOgogICAgICAgICAgICAgICAgIHIgPSB4cmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQogCiAgICAgZGVmIHRlc3RfcmFuZ2VfaXRlcmF0b3JzKHNlbGYpOgogICAgICAgICAjIHNlZSBpc3N1ZSA3Mjk4CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGl0ZXIyID0gcHlyYW5nZShzdGFydCwgZW5kLCBzdGVwKQotICAgICAgICAgICAgICAgIHRlc3RfaWQgPSAieHJhbmdlKHswfSwgezF9LCB7Mn0pIi5mb3JtYXQoc3RhcnQsIGVuZCwgc3RlcCkKKyAgICAgICAgICAgICAgICB0ZXN0X2lkID0gInhyYW5nZSh7fSwge30sIHt9KSIuZm9ybWF0KHN0YXJ0LCBlbmQsIHN0ZXApCiAgICAgICAgICAgICAgICAgIyBjaGVjayBmaXJzdCAxMDAgZW50cmllcwogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2l0ZXJhdG9yc19lcXVhbChpdGVyMSwgaXRlcjIsIHRlc3RfaWQsIGxpbWl0PTEwMCkKIApAQCAtMTMyLDggKzEzMiw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpdGVyMiA9IHB5cmFuZ2VfcmV2ZXJzZWQoc3RhcnQsIGVuZCwgc3RlcCkKLSAgICAgICAgICAgICAgICB0ZXN0X2lkID0gInJldmVyc2VkKHhyYW5nZSh7MH0sIHsxfSwgezJ9KSkiLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgc3RlcCkKKyAgICAgICAgICAgICAgICB0ZXN0X2lkID0gInJldmVyc2VkKHhyYW5nZSh7fSwge30sIHt9KSkiLmZvcm1hdChzdGFydCwgZW5kLCBzdGVwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2l0ZXJhdG9yc19lcXVhbChpdGVyMSwgaXRlcjIsIHRlc3RfaWQsIGxpbWl0PTEwMCkKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKaW5kZXggYTJjM2EyYy4uN2M4YzBjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQpAQCAtNCwxNCArNCwyMSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHpsaWIgPSBOb25lCiAKLWltcG9ydCB6aXBmaWxlLCBvcywgdW5pdHRlc3QsIHN5cywgc2h1dGlsLCBzdHJ1Y3QKK2ltcG9ydCBvcworaW1wb3J0IGlvCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHppcGZpbGUKK2ltcG9ydCB1bml0dGVzdAogCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwogZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5RmlsZQogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQsIHJhbmRvbQorZnJvbSB1bml0dGVzdCBpbXBvcnQgc2tpcFVubGVzcwogCi1pbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgZmluZGZpbGUsIHVubGluawogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiBURVNURk5ESVIgPSBURVNURk4gKyAiZCIKQEAgLTIyLDM3MyArMjksNDQyIEBACiAgICAgICAgICAgICAgICAgICAgKCcvemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvX3ppcHRlc3QzJywgJ2F6c3hkY2Z2Z2InKSwKICAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL3ppcHRlc3QzZGlyL3ppcHRlc3Q0ZGlyL196aXB0ZXN0MycsICc2eTd1OGk5bzBwJyldCiAKKwogY2xhc3MgVGVzdHNXaXRoU291cmNlRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmxpbmVfZ2VuID0gWyJaaXBmaWxlIHRlc3QgbGluZSAlZC4gcmFuZG9tIGZsb2F0OiAlZiIgJSAoaSwgcmFuZG9tKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShGSVhFRFRFU1RfU0laRSldCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKV0KICAgICAgICAgc2VsZi5kYXRhID0gJ1xuJy5qb2luKHNlbGYubGluZV9nZW4pICsgJ1xuJwogCiAgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcwotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAid2IiKQotICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCiAKLSAgICBkZWYgbWFrZVRlc3RBcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCi0gICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCiAKLSAgICBkZWYgemlwVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIpLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCiAKLSAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQotICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIFpJUCBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogCi0gICAgICAgICAgICB6aXBmcC5wcmludGRpcigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgICAgICBkaXJlY3RvcnkgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICBsaW5lcyA9IGRpcmVjdG9yeS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgNCkgIyBOdW1iZXIgb2YgZmlsZXMgKyBoZWFkZXIKIAotICAgICAgICBkaXJlY3RvcnkgPSBmcC5nZXR2YWx1ZSgpCi0gICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRmlsZSBOYW1lJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNb2RpZmllZCcsIGxpbmVzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignU2l6ZScsIGxpbmVzWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnRmlsZSBOYW1lJyBpbiBsaW5lc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdNb2RpZmllZCcgaW4gbGluZXNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0XygnU2l6ZScgaW4gbGluZXNbMF0pCisgICAgICAgICAgICBmbiwgZGF0ZSwgdGltZV8sIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZuLCAnYW5vdGhlci5uYW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKGRhdGUsICclWS0lbS0lZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUodGltZV8sICclSDolTTolUycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQogCi0gICAgICAgIGZuLCBkYXRlLCB0aW1lLCBzaXplID0gbGluZXNbMV0uc3BsaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmbiwgJ2Fub3RoZXIubmFtZScpCi0gICAgICAgICMgWFhYOiB0aW1lc3RhbXAgaXMgbm90IHRlc3RlZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQorICAgICAgICAgICAgIyBDaGVjayB0aGUgbmFtZWxpc3QKKyAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCiAKLSAgICAgICAgIyBDaGVjayB0aGUgbmFtZWxpc3QKLSAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihuYW1lcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhURVNURk4gaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJzdHJmaWxlIiBpbiBuYW1lcykKKyAgICAgICAgICAgICMgQ2hlY2sgaW5mb2xpc3QKKyAgICAgICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQorICAgICAgICAgICAgbmFtZXMgPSBbaS5maWxlbmFtZSBmb3IgaSBpbiBpbmZvc10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQorICAgICAgICAgICAgZm9yIGkgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCiAKLSAgICAgICAgIyBDaGVjayBpbmZvbGlzdAotICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKLSAgICAgICAgbmFtZXMgPSBbIGkuZmlsZW5hbWUgZm9yIGkgaW4gaW5mb3MgXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4obmFtZXMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydF8oVEVTVEZOIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIgaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xygic3RyZmlsZSIgaW4gbmFtZXMpCi0gICAgICAgIGZvciBpIGluIGluZm9zOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaS5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgIyBjaGVjayBnZXRpbmZvCisgICAgICAgICAgICBmb3Igbm0gaW4gKFRFU1RGTiwgImFub3RoZXIubmFtZSIsICJzdHJmaWxlIik6CisgICAgICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8obm0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVuYW1lLCBubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKIAotICAgICAgICAjIGNoZWNrIGdldGluZm8KLSAgICAgICAgZm9yIG5tIGluIChURVNURk4sICJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiLCAic3RyZmlsZSIpOgotICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8obm0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbmZvLmZpbGVuYW1lLCBubSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGluZm8uZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0ZXN0emlwIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICB6aXBmcC50ZXN0emlwKCkKIAotICAgICAgICAjIENoZWNrIHRoYXQgdGVzdHppcCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbgotICAgICAgICB6aXBmcC50ZXN0emlwKCkKLSAgICAgICAgemlwZnAuY2xvc2UoKQotCi0gICAgZGVmIHRlc3RTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBPcGVuVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGRhdGExID0gW10KLSAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCiAKLSAgICAgICAgemlwZGF0YTIgPSBbXQotICAgICAgICB6aXBvcGVuMiA9IHppcGZwLm9wZW4oImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgICAgICB6aXBkYXRhMiA9IFtdCisgICAgICAgICAgICB6aXBvcGVuMiA9IHppcGZwLm9wZW4oImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4yLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgemlwZGF0YTIuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbih6aXBkYXRhMiksIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHppcGRhdGExKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHppcGRhdGEyKSwgc2VsZi5kYXRhKQogCi0gICAgZGVmIHRlc3RPcGVuU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB0ZXN0T3BlblZpYVppcEluZm8oc2VsZik6CisgICAgZGVmIHRlc3Rfb3Blbl92aWFfemlwX2luZm8oc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgemlwZnAud3JpdGVzdHIoIm5hbWUiLCAiZm9vIikKLSAgICAgICAgemlwZnAud3JpdGVzdHIoIm5hbWUiLCAiYmFyIikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJmb28iKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoIm5hbWUiLCAiYmFyIikKIAotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpCi0gICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQotICAgICAgICBkYXRhID0gIiIKLSAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6Ci0gICAgICAgICAgICBkYXRhICs9IHppcGZwLm9wZW4oaW5mbykucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhkYXRhID09ICJmb29iYXIiIG9yIGRhdGEgPT0gImJhcmZvbyIpCi0gICAgICAgIGRhdGEgPSAiIgotICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKLSAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQotICAgICAgICBzZWxmLmFzc2VydF8oZGF0YSA9PSAiZm9vYmFyIiBvciBkYXRhID09ICJiYXJmb28iKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKKyAgICAgICAgICAgIGRhdGEgPSAiIgorICAgICAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgZGF0YSArPSB6aXBmcC5vcGVuKGluZm8pLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEgPT0gImZvb2JhciIgb3IgZGF0YSA9PSAiYmFyZm9vIikKKyAgICAgICAgICAgIGRhdGEgPSAiIgorICAgICAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgZGF0YSArPSB6aXBmcC5yZWFkKGluZm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSAiZm9vYmFyIiBvciBkYXRhID09ICJiYXJmb28iKQogCi0gICAgZGVmIHppcFJhbmRvbU9wZW5UZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF9yYW5kb21fb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGRhdGExID0gW10KLSAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZChyYW5kaW50KDEsIDEwMjQpKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF91bml2ZXJhbF9yZWFkYWhlYWRzKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8oKQorCisgICAgICAgIGRhdGEgPSAnYVxyXG4nICogMTYgKiAxMDI0CisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICd3JywgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICB6aXBmcC53cml0ZXN0cihURVNURk4sIGRhdGEpCiAgICAgICAgIHppcGZwLmNsb3NlKCkKIAotICAgIGRlZiB0ZXN0UmFuZG9tT3BlblN0b3JlZChzZWxmKToKLSAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFJhbmRvbU9wZW5UZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgZGF0YTIgPSAnJworICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAncicpCisgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKFRFU1RGTiwgJ3JVJykKKyAgICAgICAgZm9yIGxpbmUgaW4gemlwb3BlbjoKKyAgICAgICAgICAgIGRhdGEyICs9IGxpbmUKKyAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgZGVmIHppcFJlYWRsaW5lVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyLnJlcGxhY2UoJ1xuJywgJ1xyXG4nKSkKKworICAgIGRlZiB6aXBfcmVhZGxpbmVfcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKICAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oVEVTVEZOKQotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgotICAgICAgICAgICAgbGluZWRhdGEgPSB6aXBvcGVuLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQogCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkKDEwMCkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuZGF0YSkKICAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgZGVmIHppcFJlYWRsaW5lc1Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgemlwX3JlYWRsaW5lX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICB6aXBsaW5lcyA9IHppcGZwLm9wZW4oVEVTVEZOKS5yZWFkbGluZXMoKQotICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKFRFU1RGTikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CisgICAgICAgICAgICAgICAgbGluZWRhdGEgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgJ1xuJykKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgemlwSXRlcmxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfcmVhZGxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwZnAub3BlbihURVNURk4pKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBsaW5lcyA9IHppcGZwLm9wZW4oVEVTVEZOKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgemlwX2l0ZXJsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAotICAgIGRlZiB0ZXN0UmVhZGxpbmVTdG9yZWQoc2VsZik6CisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKFRFU1RGTikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX3N0b3JlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFJlYWRsaW5lVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RSZWFkbGluZXNTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmVhZGxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB0ZXN0SXRlcmxpbmVzU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBJdGVybGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0RGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9pdGVybGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICAgICAgZGVmIHRlc3RPcGVuRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcE9wZW5UZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgICAgIGRlZiB0ZXN0UmFuZG9tT3BlbkRlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBSYW5kb21PcGVuVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RSZWFkbGluZURlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBSZWFkbGluZVRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JhbmRvbV9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RSZWFkbGluZXNEZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwUmVhZGxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RJdGVybGluZXNEZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwSXRlcmxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdExvd0NvbXByZXNzaW9uKHNlbGYpOgotICAgICAgICAgICAgIyBDaGVja3MgZm9yIGNhc2VzIHdoZXJlIGNvbXByZXNzZWQgZGF0YSBpcyBsYXJnZXIgdGhhbiBvcmlnaW5hbAotICAgICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX2l0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2xvd19jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgZm9yIGNhc2VzIHdoZXJlIGNvbXByZXNzZWQgZGF0YSBpcyBsYXJnZXIgdGhhbiBvcmlnaW5hbC4iIiIKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCAnMTInKQotICAgICAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgICAgICAgICAjIEdldCBhbiBvcGVuIG9iamVjdCBmb3Igc3RyZmlsZQotICAgICAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgIyBHZXQgYW4gb3BlbiBvYmplY3QgZm9yIHN0cmZpbGUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CiAgICAgICAgICAgICBvcGVub2JqID0gemlwZnAub3Blbigic3RyZmlsZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5vYmoucmVhZCgxKSwgJzEnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVub2JqLnJlYWQoMSksICcyJykKIAotICAgIGRlZiB0ZXN0QWJzb2x1dGVBcmNuYW1lcyhzZWxmKToKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9hcmNuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiL2Fic29sdXRlIikKIAotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCiAKLSAgICBkZWYgdGVzdEFwcGVuZFRvWmlwRmlsZShzZWxmKToKLSAgICAgICAgIyBUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyB6aXBmaWxlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAuY2xvc2UoKQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTiwgInN0cmZpbGUiXSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2FwcGVuZF90b196aXBfZmlsZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcgemlwZmlsZS4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCiAKLSAgICBkZWYgdGVzdEFwcGVuZFRvTm9uWmlwRmlsZShzZWxmKToKLSAgICAgICAgIyBUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyBmaWxlIHRoYXQgaXMgbm90IGEgemlwZmlsZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTiwgInN0cmZpbGUiXSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF90b19ub25femlwX2ZpbGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBub3QgYSB6aXBmaWxlLiIiIgogICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBmYWlscyBpZiBsZW4oZCkgPCAyMiBiZWNhdXNlIG9mIHRoZSBmaXJzdAogICAgICAgICAjIGxpbmUgImZwaW4uc2VlaygtMjIsIDIpIiBpbiBfRW5kUmVjRGF0YQotICAgICAgICBkID0gJ0kgYW0gbm90IGEgWmlwRmlsZSEnKjEwCi0gICAgICAgIGYgPSBmaWxlKFRFU1RGTjIsICd3YicpCi0gICAgICAgIGYud3JpdGUoZCkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICBkYXRhID0gJ0kgYW0gbm90IGEgWmlwRmlsZSEnKjEwCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQogCi0gICAgICAgIGYgPSBmaWxlKFRFU1RGTjIsICdyYicpCi0gICAgICAgIGYuc2VlayhsZW4oZCkpCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbVEVTVEZOXSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgImEiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCiAKLSAgICBkZWYgdGVzdF9Xcml0ZURlZmF1bHROYW1lKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgY2FsbGluZyBaaXBGaWxlLndyaXRlIHdpdGhvdXQgYXJjbmFtZSBzcGVjaWZpZWQgcHJvZHVjZXMgdGhlIGV4cGVjdGVkIHJlc3VsdAotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIGZpbGUoVEVTVEZOKS5yZWFkKCkpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsobGVuKGRhdGEpKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFtURVNURk5dKQogCi0gICAgZGVmIHRlc3RfUGVyRmlsZUNvbXByZXNzaW9uKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgZmlsZXMgd2l0aGluIGEgWmlwIGFyY2hpdmUgY2FuIGhhdmUgZGlmZmVyZW50IGNvbXByZXNzaW9uIG9wdGlvbnMKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdzdG9yZW1lJywgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdkZWZsYXRlbWUnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgICAgICAgc2luZm8gPSB6aXBmcC5nZXRpbmZvKCdzdG9yZW1lJykKLSAgICAgICAgZGluZm8gPSB6aXBmcC5nZXRpbmZvKCdkZWZsYXRlbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X3dyaXRlX2RlZmF1bHRfbmFtZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjYWxsaW5nIFppcEZpbGUud3JpdGUgd2l0aG91dCBhcmNuYW1lIHNwZWNpZmllZAorICAgICAgICBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgcmVzdWx0LiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIG9wZW4oVEVTVEZOKS5yZWFkKCkpCiAKLSAgICBkZWYgdGVzdF9Xcml0ZVRvUmVhZG9ubHkoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCB0cnlpbmcgdG8gY2FsbCB3cml0ZSgpIG9uIGEgcmVhZG9ubHkgWmlwRmlsZSBvYmplY3QKLSAgICAgICAgIyByYWlzZXMgYSBSdW50aW1lRXJyb3IKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigic29tZWZpbGUudHh0IiwgImJvZ3VzIikKLSAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi53cml0ZSwgVEVTVEZOKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcGVyX2ZpbGVfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgZmlsZXMgd2l0aGluIGEgWmlwIGFyY2hpdmUgY2FuIGhhdmUgZGlmZmVyZW50CisgICAgICAgIGNvbXByZXNzaW9uIG9wdGlvbnMuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdzdG9yZW1lJywgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAnZGVmbGF0ZW1lJywgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgICAgICAgICBzaW5mbyA9IHppcGZwLmdldGluZm8oJ3N0b3JlbWUnKQorICAgICAgICAgICAgZGluZm8gPSB6aXBmcC5nZXRpbmZvKCdkZWZsYXRlbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgZGVmIHRlc3RFeHRyYWN0KHNlbGYpOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgdGVzdF93cml0ZV90b19yZWFkb25seShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0cnlpbmcgdG8gY2FsbCB3cml0ZSgpIG9uIGEgcmVhZG9ubHkgWmlwRmlsZSBvYmplY3QKKyAgICAgICAgcmFpc2VzIGEgUnVudGltZUVycm9yLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic29tZWZpbGUudHh0IiwgImJvZ3VzIikKIAotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpCi0gICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgotICAgICAgICAgICAgd3JpdHRlbmZpbGUgPSB6aXBmcC5leHRyYWN0KGZwYXRoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlLCBURVNURk4pCiAKLSAgICAgICAgICAgICMgbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuIHRvIHRoZSByaWdodCBwbGFjZQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhmcGF0aCk6Ci0gICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoWzE6XSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQotICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGNvcnJlY3RmaWxlKQorICAgIGRlZiB0ZXN0X2V4dHJhY3Qoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoZnBhdGgpCiAKLSAgICAgICAgICAgICMgbWFrZSBzdXJlIGNvcnJlY3QgZGF0YSBpcyBpbiBjb3JyZWN0IGZpbGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEsIGZpbGUod3JpdHRlbmZpbGUsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSBpdCB3YXMgd3JpdHRlbiB0byB0aGUgcmlnaHQgcGxhY2UKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoWzE6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGgpCisgICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGNvcnJlY3RmaWxlKQogCi0gICAgICAgICAgICBvcy5yZW1vdmUod3JpdHRlbmZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUpCiAKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGNvcnJlY3QgZGF0YSBpcyBpbiBjb3JyZWN0IGZpbGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLCBvcGVuKHdyaXR0ZW5maWxlLCAicmIiKS5yZWFkKCkpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHdyaXR0ZW5maWxlKQogCiAgICAgICAgICMgcmVtb3ZlIHRoZSB0ZXN0IGZpbGUgc3ViZGlyZWN0b3JpZXMKICAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQogCi0gICAgZGVmIHRlc3RFeHRyYWN0QWxsKHNlbGYpOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgdGVzdF9leHRyYWN0X2FsbChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKLSAgICAgICAgemlwZnAuZXh0cmFjdGFsbCgpCi0gICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhmcGF0aCk6Ci0gICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLmV4dHJhY3RhbGwoKQorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2FicyhmcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoWzE6XSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YSwgZmlsZShvdXRmaWxlLCAicmIiKS5yZWFkKCkpCi0KLSAgICAgICAgICAgIG9zLnJlbW92ZShvdXRmaWxlKQotCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLCBvcGVuKG91dGZpbGUsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3V0ZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCiAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKIAorICAgIGRlZiB0ZXN0X3dyaXRlc3RyX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpCisgICAgICAgIHppcGZwLndyaXRlc3RyKCJhLnR4dCIsICJoZWxsbyB3b3JsZCIsIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICBpZiB6bGliOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoImIudHh0IiwgImhlbGxvIHdvcmxkIiwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbygnYS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgICAgIGlmIHpsaWI6CisgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbygnYi50eHQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisKICAgICBkZWYgemlwX3Rlc3Rfd3JpdGVzdHJfcGVybWlzc2lvbnMoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdyaXRlc3RyIGNyZWF0ZXMgZmlsZXMgd2l0aCBtb2RlIDA2MDAsCiAgICAgICAgICMgd2hlbiBpdCBpcyBwYXNzZWQgYSBuYW1lIHJhdGhlciB0aGFuIGEgWmlwSW5mbyBpbnN0YW5jZS4KIAotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICB6aW5mbyA9IHppcGZwLmdldGluZm8oJ3N0cmZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIDA2MDAgPDwgMTYpCisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB6aW5mbyA9IHppcGZwLmdldGluZm8oJ3N0cmZpbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAwNjAwIDw8IDE2KQogCiAgICAgZGVmIHRlc3Rfd3JpdGVzdHJfcGVybWlzc2lvbnMoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgogICAgICAgICAgICAgc2VsZi56aXBfdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgemlwZmlsZSBpcyBjbG9zZWQgYWZ0ZXIgdGhlICd3aXRoJyBibG9jay4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAuZnAgaXMgbm90IE5vbmUsICd6aXBmcCBpcyBub3Qgb3BlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBOb25lLCAnemlwZnAgaXMgbm90IGNsb3NlZCcpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBub3QgTm9uZSwgJ3ppcGZwIGlzIG5vdCBvcGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgemlwZmlsZSBpcyBjbG9zZWQgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiB0aGUKKyAgICAgICAgJ3dpdGgnIGJsb2NrLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnAyOgorICAgICAgICAgICAgICAgIHJhaXNlIHppcGZpbGUuQmFkWmlwZmlsZSgpCisgICAgICAgIGV4Y2VwdCB6aXBmaWxlLkJhZFppcGZpbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAyLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQorCiAKIGNsYXNzIFRlc3RaaXA2NEluU21hbGxGaWxlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUaGVzZSB0ZXN0cyB0ZXN0IHRoZSBaSVA2NCBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgdXNpbmcgbGFyZ2UgZmlsZXMsCkBAIC0zOTgsMjA2ICs0NzQsMjE4IEBACiAgICAgICAgIHNlbGYuX2xpbWl0ID0gemlwZmlsZS5aSVA2NF9MSU1JVAogICAgICAgICB6aXBmaWxlLlpJUDY0X0xJTUlUID0gNQogCi0gICAgICAgIGxpbmVfZ2VuID0gKCJUZXN0IG9mIHppcGZpbGUgbGluZSAlZC4iICUgaSBmb3IgaSBpbiByYW5nZSgwLCBGSVhFRFRFU1RfU0laRSkpCisgICAgICAgIGxpbmVfZ2VuID0gKCJUZXN0IG9mIHppcGZpbGUgbGluZSAlZC4iICUgaQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBGSVhFRFRFU1RfU0laRSkpCiAgICAgICAgIHNlbGYuZGF0YSA9ICdcbicuam9pbihsaW5lX2dlbikKIAogICAgICAgICAjIE1ha2UgYSBzb3VyY2UgZmlsZSB3aXRoIHNvbWUgbGluZXMKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgIndiIikKLSAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQogCi0gICAgZGVmIGxhcmdlRmlsZUV4Y2VwdGlvblRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKLSAgICAgICAgICAgICAgICB6aXBmcC53cml0ZSwgVEVTVEZOLCAiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlLCBURVNURk4sICJhbm90aGVyLm5hbWUiKQogCi0gICAgZGVmIGxhcmdlRmlsZUV4Y2VwdGlvblRlc3QyKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCi0gICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCiAKLSAgICBkZWYgdGVzdExhcmdlRmlsZUV4Y2VwdGlvbihzZWxmKToKKyAgICBkZWYgdGVzdF9sYXJnZV9maWxlX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLmxhcmdlRmlsZUV4Y2VwdGlvblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICAgICAgc2VsZi5sYXJnZUZpbGVFeGNlcHRpb25UZXN0MihmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgemlwVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCi0gICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiksIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKIAotICAgICAgICAjIFByaW50IHRoZSBaSVAgZGlyZWN0b3J5Ci0gICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQorICAgICAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgICAgICAgICAgemlwZnAucHJpbnRkaXIoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CiAKLSAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgogCi0gICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKLSAgICAgICAgbGluZXMgPSBkaXJlY3Rvcnkuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihsaW5lcyksIDQpICMgTnVtYmVyIG9mIGZpbGVzICsgaGVhZGVyCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdGaWxlIE5hbWUnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01vZGlmaWVkJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdTaXplJywgbGluZXNbMF0pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdGaWxlIE5hbWUnIGluIGxpbmVzWzBdKQotICAgICAgICBzZWxmLmFzc2VydF8oJ01vZGlmaWVkJyBpbiBsaW5lc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdTaXplJyBpbiBsaW5lc1swXSkKKyAgICAgICAgICAgIGZuLCBkYXRlLCB0aW1lXywgc2l6ZSA9IGxpbmVzWzFdLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm4sICdhbm90aGVyLm5hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUoZGF0ZSwgJyVZLSVtLSVkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZSh0aW1lXywgJyVIOiVNOiVTJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCiAKLSAgICAgICAgZm4sIGRhdGUsIHRpbWUsIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZuLCAnYW5vdGhlci5uYW1lJykKLSAgICAgICAgIyBYWFg6IHRpbWVzdGFtcCBpcyBub3QgdGVzdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpemUsIHN0cihsZW4oc2VsZi5kYXRhKSkpCisgICAgICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKIAotICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAotICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKG5hbWVzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRfKFRFU1RGTiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJhbm90aGVyIitvcy5leHRzZXArIm5hbWUiIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oInN0cmZpbGUiIGluIG5hbWVzKQorICAgICAgICAgICAgIyBDaGVjayBpbmZvbGlzdAorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBuYW1lcyA9IFtpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKIAotICAgICAgICAjIENoZWNrIGluZm9saXN0Ci0gICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQotICAgICAgICBuYW1lcyA9IFsgaS5maWxlbmFtZSBmb3IgaSBpbiBpbmZvcyBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihuYW1lcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhURVNURk4gaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0XygiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRfKCJzdHJmaWxlIiBpbiBuYW1lcykKLSAgICAgICAgZm9yIGkgaW4gaW5mb3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICAjIGNoZWNrIGdldGluZm8KKyAgICAgICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKKyAgICAgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQogCi0gICAgICAgICMgY2hlY2sgZ2V0aW5mbwotICAgICAgICBmb3Igbm0gaW4gKFRFU1RGTiwgImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIsICJzdHJmaWxlIik6Ci0gICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGluZm8uZmlsZW5hbWUsIG5tKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQogCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0ZXN0emlwIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uCi0gICAgICAgIHppcGZwLnRlc3R6aXAoKQotCi0KLSAgICAgICAgemlwZnAuY2xvc2UoKQotCi0gICAgZGVmIHRlc3RTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgaWYgemxpYjoKLSAgICAgICAgZGVmIHRlc3REZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9hcmNuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICIvYWJzb2x1dGUiKQogCi0gICAgZGVmIHRlc3RBYnNvbHV0ZUFyY25hbWVzKHNlbGYpOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICIvYWJzb2x1dGUiKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgWyJhYnNvbHV0ZSJdKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgWyJhYnNvbHV0ZSJdKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB6aXBmaWxlLlpJUDY0X0xJTUlUID0gc2VsZi5fbGltaXQKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQorCiAKIGNsYXNzIFB5WmlwRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdFdyaXRlUHlmaWxlKHNlbGYpOgotICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKLSAgICAgICAgZm4gPSBfX2ZpbGVfXwotICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICBmbiA9IGZuWzotMV0KKyAgICBkZWYgdGVzdF93cml0ZV9weWZpbGUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm4gPSBfX2ZpbGVfXworICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5weWMnKSBvciBmbi5lbmRzd2l0aCgnLnB5bycpOgorICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCi0gICAgICAgIHppcGZwLndyaXRlcHkoZm4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXB5KGZuKQogCi0gICAgICAgIGJuID0gb3MucGF0aC5iYXNlbmFtZShmbikKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJuIG5vdCBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICBzZWxmLmFzc2VydF8oYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvciBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICBibiA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGJuLCB6aXBmcC5uYW1lbGlzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuICsgJ28nIGluIHppcGZwLm5hbWVsaXN0KCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQogCisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm4gPSBfX2ZpbGVfXworICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFdCiAKLSAgICAgICAgemlwZnAgID0gemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpCi0gICAgICAgIGZuID0gX19maWxlX18KLSAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5weWMnKSBvciBmbi5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgZm4gPSBmbls6LTFdCisgICAgICAgICAgICB6aXBmcC53cml0ZXB5KGZuLCAidGVzdHBhY2thZ2UiKQogCi0gICAgICAgIHppcGZwLndyaXRlcHkoZm4sICJ0ZXN0cGFja2FnZSIpCisgICAgICAgICAgICBibiA9ICIlcy8lcyIgJSAoInRlc3RwYWNrYWdlIiwgb3MucGF0aC5iYXNlbmFtZShmbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGJuLCB6aXBmcC5uYW1lbGlzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuICsgJ28nIGluIHppcGZwLm5hbWVsaXN0KCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQogCi0gICAgICAgIGJuID0gIiVzLyVzIiUoInRlc3RwYWNrYWdlIiwgb3MucGF0aC5iYXNlbmFtZShmbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhibiBub3QgaW4gemlwZnAubmFtZWxpc3QoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRfKGJuICsgJ28nIGluIHppcGZwLm5hbWVsaXN0KCkgb3IgYm4gKyAnYycgaW4gemlwZnAubmFtZWxpc3QoKSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQotCi0gICAgZGVmIHRlc3RXcml0ZVB5dGhvblBhY2thZ2Uoc2VsZik6CisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIGltcG9ydCBlbWFpbAogICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQogCi0gICAgICAgIHppcGZwICA9IHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKQotICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQogCi0gICAgICAgICMgQ2hlY2sgZm9yIGEgY291cGxlIG9mIG1vZHVsZXMgYXQgZGlmZmVyZW50IGxldmVscyBvZiB0aGUgaGllYXJhcmNoeQotICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRfKCdlbWFpbC9fX2luaXRfXy5weW8nIGluIG5hbWVzIG9yICdlbWFpbC9fX2luaXRfXy5weWMnIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydF8oJ2VtYWlsL21pbWUvdGV4dC5weW8nIGluIG5hbWVzIG9yICdlbWFpbC9taW1lL3RleHQucHljJyBpbiBuYW1lcykKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgY291cGxlIG9mIG1vZHVsZXMgYXQgZGlmZmVyZW50IGxldmVscyBvZiB0aGUKKyAgICAgICAgICAgICMgaGllcmFyY2h5CisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZW1haWwvX19pbml0X18ucHlvJyBpbiBuYW1lcyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbC9fX2luaXRfXy5weWMnIGluIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdlbWFpbC9taW1lL3RleHQucHlvJyBpbiBuYW1lcyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbC9taW1lL3RleHQucHljJyBpbiBuYW1lcykKIAotICAgIGRlZiB0ZXN0V3JpdGVQeXRob25EaXJlY3Rvcnkoc2VsZik6CisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMS5weSIpLCAidyIpCi0gICAgICAgICAgICBmcC53cml0ZSgicHJpbnQgNDJcbiIpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKIAotICAgICAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpCi0gICAgICAgICAgICBmcC53cml0ZSgicHJpbnQgNDIgKiA0MlxuIikKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIgKiA0MilcbiIpCiAKLSAgICAgICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIudHh0IiksICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKCJibGEgYmxhIGJsYVxuIikKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIudHh0IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoImJsYSBibGEgYmxhXG4iKQogCiAgICAgICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKICAgICAgICAgICAgIHppcGZwLndyaXRlcHkoVEVTVEZOMikKIAogICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ21vZDEucHljJyBpbiBuYW1lcyBvciAnbW9kMS5weW8nIGluIG5hbWVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKCdtb2QyLnB5YycgaW4gbmFtZXMgb3IgJ21vZDIucHlvJyBpbiBuYW1lcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygnbW9kMi50eHQnIG5vdCBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbW9kMS5weWMnIGluIG5hbWVzIG9yICdtb2QxLnB5bycgaW4gbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21vZDIucHljJyBpbiBuYW1lcyBvciAnbW9kMi5weW8nIGluIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi50eHQnLCBuYW1lcykKIAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQogCi0gICAgZGVmIHRlc3RXcml0ZU5vblB5ZmlsZShzZWxmKToKLSAgICAgICAgemlwZnAgID0gemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpCi0gICAgICAgIGZpbGUoVEVTVEZOLCAndycpLndyaXRlKCdtb3N0IGRlZmluaXRlbHkgbm90IGEgcHl0aG9uIGZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKyAgICBkZWYgdGVzdF93cml0ZV9ub25fcHlmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIG9wZW4oVEVTVEZOLCAndycpLndyaXRlKCdtb3N0IGRlZmluaXRlbHkgbm90IGEgcHl0aG9uIGZpbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmcC53cml0ZXB5LCBURVNURk4pCisgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQogCiAKIGNsYXNzIE90aGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0VW5pY29kZUZpbGVuYW1lcyhzZWxmKToKLSAgICAgICAgemYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpCi0gICAgICAgIHpmLndyaXRlc3RyKHUiZm9vLnR4dCIsICJUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lIikKLSAgICAgICAgemYud3JpdGVzdHIodSJceGY2LnR4dCIsICJUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoemYuaW5mb2xpc3QoKVswXS5maWxlbmFtZSwgdW5pY29kZSkpCi0gICAgICAgIHpmLmNsb3NlKCkKLSAgICAgICAgemYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMF0uZmlsZW5hbWUsICJmb28udHh0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFsxXS5maWxlbmFtZSwgdSJceGY2LnR4dCIpCi0gICAgICAgIHpmLmNsb3NlKCkKKyAgICB6aXBzX3dpdGhfYmFkX2NyYyA9IHsKKyAgICAgICAgemlwZmlsZS5aSVBfU1RPUkVEOiAoCisgICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKKyAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCisgICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKKyAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCisgICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKKyAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJyksCisgICAgICAgIHppcGZpbGUuWklQX0RFRkxBVEVEOiAoCisgICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCisgICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCisgICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCisgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCisgICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpLAorICAgIH0KIAotICAgIGRlZiB0ZXN0Q3JlYXRlTm9uRXhpc3RlbnRGaWxlRm9yQXBwZW5kKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikgYXMgemY6CisgICAgICAgICAgICB6Zi53cml0ZXN0cih1ImZvby50eHQiLCAiVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZSIpCisgICAgICAgICAgICB6Zi53cml0ZXN0cih1Ilx4ZjYudHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHpmLmluZm9saXN0KClbMF0uZmlsZW5hbWUsIHVuaWNvZGUpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpIGFzIHpmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFswXS5maWxlbmFtZSwgImZvby50eHQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5maWxlbGlzdFsxXS5maWxlbmFtZSwgdSJceGY2LnR4dCIpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfbm9uX2V4aXN0ZW50X2ZpbGVfZm9yX2FwcGVuZChzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCiAKQEAgLTYwNSw1MiArNjkzLDc0IEBACiAgICAgICAgIGNvbnRlbnQgPSAnaGVsbG8sIHdvcmxkLiB0aGlzIGlzIHNvbWUgY29udGVudC4nCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgemYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAnYScpCi0gICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKLSAgICAgICAgICAgIHpmLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIChlcnJubywgZXJybXNnKToKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKKyAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ0NvdWxkIG5vdCBhcHBlbmQgZGF0YSB0byBhIG5vbi1leGlzdGVudCB6aXAgZmlsZS4nKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyhvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKIAotICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICdyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5yZWFkKGZpbGVuYW1lKSwgY29udGVudCkKLSAgICAgICAgemYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdyJykgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLnJlYWQoZmlsZW5hbWUpLCBjb250ZW50KQogCi0gICAgZGVmIHRlc3RDbG9zZUVycm9uZW91c0ZpbGUoc2VsZik6CisgICAgZGVmIHRlc3RfY2xvc2VfZXJyb25lb3VzX2ZpbGUoc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBaaXBGaWxlIGNvbnN0cnVjdG9yIGNsb3NlcyB0aGUgZmlsZSBvYmplY3QKLSAgICAgICAgIyBpdCBvcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBmaWxlLiAgSWYgaXQgZG9lc24ndCwgdGhlIHRyYWNlYmFjawotICAgICAgICAjIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBaaXBGaWxlIG9iamVjdCBhbmQsIGluZGlyZWN0bHksIHRoZSBmaWxlIG9iamVjdC4KKyAgICAgICAgIyBpdCBvcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBmaWxlLiAgSWYgaXQgZG9lc24ndCwgdGhlCisgICAgICAgICMgdHJhY2ViYWNrIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBaaXBGaWxlIG9iamVjdCBhbmQsIGluZGlyZWN0bHksCisgICAgICAgICMgdGhlIGZpbGUgb2JqZWN0LgogICAgICAgICAjIE9uIFdpbmRvd3MsIHRoaXMgY2F1c2VzIHRoZSBvcy51bmxpbmsoKSBjYWxsIHRvIGZhaWwgYmVjYXVzZSB0aGUKICAgICAgICAgIyB1bmRlcmx5aW5nIGZpbGUgaXMgc3RpbGwgb3Blbi4gIFRoaXMgaXMgU0YgYnVnICM0MTIyMTQuCiAgICAgICAgICMKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgInciKQotICAgICAgICBmcC53cml0ZSgidGhpcyBpcyBub3QgYSBsZWdhbCB6aXAgZmlsZVxuIikKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTikKICAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0SXNaaXBFcnJvbmVvdXNGaWxlKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgaXNfemlwZmlsZSBmdW5jdGlvbiBjb3JyZWN0bHkgaWRlbnRpZmllcwotICAgICAgICAjIGEgZmlsZSB0aGF0IGlzIG5vdCBhIHppcCBmaWxlCi0gICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3IikKKyAgICBkZWYgdGVzdF9pc196aXBfZXJyb25lb3VzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgaXNfemlwZmlsZSgpIGNvcnJlY3RseSBpZGVudGlmaWVzIG5vbi16aXAgZmlsZXMuIiIiCisgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZW5hbWUKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaykKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlIG9iamVjdAorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCiAgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQotICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjaGsgaXMgRmFsc2UpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCisgICAgICAgIGZwLnNlZWsoMCwgMCkKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNoaykKIAotICAgIGRlZiB0ZXN0SXNaaXBWYWxpZEZpbGUoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBpc196aXBmaWxlIGZ1bmN0aW9uIGNvcnJlY3RseSBpZGVudGlmaWVzCi0gICAgICAgICMgYSBmaWxlIHRoYXQgaXMgYSB6aXAgZmlsZQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2lzX3ppcF92YWxpZF9maWxlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGlzX3ppcGZpbGUoKSBjb3JyZWN0bHkgaWRlbnRpZmllcyB6aXAgZmlsZXMuIiIiCisgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZW5hbWUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCiAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhjaGsgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlIG9iamVjdAorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGspCisgICAgICAgICAgICBmcC5zZWVrKDAsIDApCisgICAgICAgICAgICB6aXBfY29udGVudHMgPSBmcC5yZWFkKCkKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlLWxpa2Ugb2JqZWN0CisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBmcC53cml0ZSh6aXBfY29udGVudHMpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgZnAuc2VlaygwLCAwKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoZnApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGspCiAKLSAgICBkZWYgdGVzdE5vbkV4aXN0ZW50RmlsZVJhaXNlc0lPRXJyb3Ioc2VsZik6CisgICAgZGVmIHRlc3Rfbm9uX2V4aXN0ZW50X2ZpbGVfcmFpc2VzX0lPRXJyb3Ioc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHdlIGRvbid0IHJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yIHdoZW4gYSBwYXJ0aWFsbHktY29uc3RydWN0ZWQKICAgICAgICAgIyBaaXBGaWxlIGluc3RhbmNlIGlzIGZpbmFsaXplZDsgdGhpcyB0ZXN0cyBmb3IgcmVncmVzc2lvbiBvbiBTRiB0cmFja2VyCiAgICAgICAgICMgYnVnICM0MDM4NzEuCkBAIC02NjksMTcgKzc3OSwxNSBAQAogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKIAotICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgZi53cml0ZSgic2hvcnQgZmlsZSIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInNob3J0IGZpbGUiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQogCi0gICAgZGVmIHRlc3RDbG9zZWRaaXBSYWlzZXNSdW50aW1lRXJyb3Ioc2VsZik6Ci0gICAgICAgICMgVmVyaWZ5IHRoYXQgdGVzdHppcCgpIGRvZXNuJ3Qgc3dhbGxvdyBpbmFwcHJvcHJpYXRlIGV4Y2VwdGlvbnMuCisgICAgZGVmIHRlc3RfY2xvc2VkX3ppcF9yYWlzZXNfUnVudGltZUVycm9yKHNlbGYpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0ZXN0emlwKCkgZG9lc24ndCBzd2FsbG93IGluYXBwcm9wcmlhdGUgZXhjZXB0aW9ucy4iIiIKICAgICAgICAgZGF0YSA9IFN0cmluZ0lPKCkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShkYXRhLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGRhdGEsIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKIAogICAgICAgICAjIFRoaXMgaXMgY29ycmVjdDsgY2FsbGluZyAucmVhZCBvbiBhIGNsb3NlZCBaaXBGaWxlIHNob3VsZCB0aHJvdwogICAgICAgICAjIGEgUnVudGltZUVycm9yLCBhbmQgc28gc2hvdWxkIGNhbGxpbmcgLnRlc3R6aXAuICBBbiBlYXJsaWVyCkBAIC02ODksMTA5ICs3OTcsMTkyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi50ZXN0emlwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYud3JpdGVzdHIsICJib2d1cy50eHQiLCAiYm9ndXMiKQotICAgICAgICBmaWxlKFRFU1RGTiwgJ3cnKS53cml0ZSgnemlwZmlsZSB0ZXN0IGRhdGEnKQorICAgICAgICBvcGVuKFRFU1RGTiwgJ3cnKS53cml0ZSgnemlwZmlsZSB0ZXN0IGRhdGEnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYud3JpdGUsIFRFU1RGTikKIAotICAgIGRlZiB0ZXN0X0JhZENvbnN0cnVjdG9yTW9kZShzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGJhZCBtb2RlcyBwYXNzZWQgdG8gWmlwRmlsZSBjb25zdHJ1Y3RvciBhcmUgY2F1Z2h0CisgICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX21vZGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYmFkIG1vZGVzIHBhc3NlZCB0byBaaXBGaWxlIGNvbnN0cnVjdG9yIGFyZSBjYXVnaHQuIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICJxIikKIAotICAgIGRlZiB0ZXN0X0JhZE9wZW5Nb2RlKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYmFkIG1vZGVzIHBhc3NlZCB0byBaaXBGaWxlLm9wZW4gYXJlIGNhdWdodAotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCisgICAgZGVmIHRlc3RfYmFkX29wZW5fbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUgY2F1Z2h0LiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgogICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCi0gICAgICAgIHppcGYucmVhZCgiZm9vLnR4dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIsICJxIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgICAgICB6aXBmLnJlYWQoImZvby50eHQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInEiKQogCi0gICAgZGVmIHRlc3RfUmVhZDAoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBjYWxsaW5nIHJlYWQoMCkgb24gYSBaaXBFeHRGaWxlIG9iamVjdCByZXR1cm5zIGFuIGVtcHR5Ci0gICAgICAgICMgc3RyaW5nIGFuZCBkb2Vzbid0IGFkdmFuY2UgZmlsZSBwb2ludGVyCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgIyByZWFkIHRoZSBkYXRhIHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB0aGVyZQotICAgICAgICBmID0gemlwZi5vcGVuKCJmb28udHh0IikKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCAnJykKKyAgICBkZWYgdGVzdF9yZWFkMChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjYWxsaW5nIHJlYWQoMCkgb24gYSBaaXBFeHRGaWxlIG9iamVjdCByZXR1cm5zIGFuIGVtcHR5CisgICAgICAgIHN0cmluZyBhbmQgZG9lc24ndCBhZHZhbmNlIGZpbGUgcG9pbnRlci4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCisgICAgICAgICAgICBmID0gemlwZi5vcGVuKCJmb28udHh0IikKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShGSVhFRFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMCksICcnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCiAKLSAgICBkZWYgdGVzdF9PcGVuTm9uZXhpc3RlbnRJdGVtKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYXR0ZW1wdGluZyB0byBjYWxsIG9wZW4oKSBmb3IgYW4gaXRlbSB0aGF0IGRvZXNuJ3QKLSAgICAgICAgIyBleGlzdCBpbiB0aGUgYXJjaGl2ZSByYWlzZXMgYSBSdW50aW1lRXJyb3IKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIsICJyIikKKyAgICBkZWYgdGVzdF9vcGVuX25vbl9leGlzdGVudF9pdGVtKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGF0dGVtcHRpbmcgdG8gY2FsbCBvcGVuKCkgZm9yIGFuIGl0ZW0gdGhhdCBkb2Vzbid0CisgICAgICAgIGV4aXN0IGluIHRoZSBhcmNoaXZlIHJhaXNlcyBhIFJ1bnRpbWVFcnJvci4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInIiKQogCi0gICAgZGVmIHRlc3RfQmFkQ29tcHJlc3Npb25Nb2RlKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYmFkIGNvbXByZXNzaW9uIG1ldGhvZHMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUgY2F1Z2h0CisgICAgZGVmIHRlc3RfYmFkX2NvbXByZXNzaW9uX21vZGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYmFkIGNvbXByZXNzaW9uIG1ldGhvZHMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUKKyAgICAgICAgY2F1Z2h0LiIiIgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAidyIsIC0xKQogCi0gICAgZGVmIHRlc3RfTnVsbEJ5dGVJbkZpbGVuYW1lKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYSBmaWxlbmFtZSBjb250YWluaW5nIGEgbnVsbCBieXRlIGlzIHByb3Blcmx5IHRlcm1pbmF0ZWQKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0XHgwMHFxcSIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLm5hbWVsaXN0KCksIFsnZm9vLnR4dCddKQorICAgIGRlZiB0ZXN0X251bGxfYnl0ZV9pbl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgYSBudWxsIGJ5dGUgaXMgcHJvcGVybHkKKyAgICAgICAgdGVybWluYXRlZC4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHRceDAwcXFxIiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLm5hbWVsaXN0KCksIFsnZm9vLnR4dCddKQogCi0gICAgZGVmIHRlc3RfU3RydWN0U2l6ZXMoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBaSVAgaW50ZXJuYWwgc3RydWN0dXJlIHNpemVzIGFyZSBjYWxjdWxhdGVkIGNvcnJlY3RseQorICAgIGRlZiB0ZXN0X3N0cnVjdF9zaXplcyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBaSVAgaW50ZXJuYWwgc3RydWN0dXJlIHNpemVzIGFyZSBjYWxjdWxhdGVkIGNvcnJlY3RseS4iIiIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyLCAyMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVDZW50cmFsRGlyLCA0NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyNjQsIDU2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZpbGUuc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIwKQogCi0gICAgZGVmIHRlc3RDb21tZW50cyhzZWxmKToKLSAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgY29tbWVudHMgb24gdGhlIGFyY2hpdmUgYXJlIGhhbmRsZWQgcHJvcGVybHkKKyAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBjb21tZW50cyBvbiB0aGUgYXJjaGl2ZSBhcmUgaGFuZGxlZCBwcm9wZXJseS4iIiIKIAogICAgICAgICAjIGNoZWNrIGRlZmF1bHQgY29tbWVudCBpcyBlbXB0eQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCAnJykKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGZyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnIuY29tbWVudCwgJycpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCAnJykKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCAnJykKIAogICAgICAgICAjIGNoZWNrIGEgc2ltcGxlIHNob3J0IGNvbW1lbnQKICAgICAgICAgY29tbWVudCA9ICdCcmF2ZWx5IHRha2luZyB0byBoaXMgZmVldCwgaGUgYmVhdCBhIHZlcnkgYnJhdmUgcmV0cmVhdC4nCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi5jb21tZW50ID0gY29tbWVudAotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZnIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmci5jb21tZW50LCBjb21tZW50KQotICAgICAgICB6aXBmci5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQpCiAKICAgICAgICAgIyBjaGVjayBhIGNvbW1lbnQgb2YgbWF4IGxlbmd0aAogICAgICAgICBjb21tZW50MiA9ICcnLmpvaW4oWyclZCcgJSAoaSoqMyAlIDEwKSBmb3IgaSBpbiB4cmFuZ2UoKDEgPDwgMTYpLTEpXSkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MgotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZnIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmci5jb21tZW50LCBjb21tZW50MikKLSAgICAgICAgemlwZnIuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi5jb21tZW50ID0gY29tbWVudDIKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBjb21tZW50MikKIAogICAgICAgICAjIGNoZWNrIGEgY29tbWVudCB0aGF0IGlzIHRvbyBsb25nIGlzIHRydW5jYXRlZAorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi5jb21tZW50ID0gY29tbWVudDIgKyAnb29wcycKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgY29tbWVudDIpCisKKyAgICBkZWYgY2hlY2tfdGVzdHppcF93aXRoX2JhZF9jcmMoc2VsZiwgY29tcHJlc3Npb24pOgorICAgICAgICAiIiJUZXN0cyB0aGF0IGZpbGVzIHdpdGggYmFkIENSQ3MgcmV0dXJuIHRoZWlyIG5hbWUgZnJvbSB0ZXN0emlwLiIiIgorICAgICAgICB6aXBkYXRhID0gc2VsZi56aXBzX3dpdGhfYmFkX2NyY1tjb21wcmVzc2lvbl0KKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgICMgdGVzdHppcCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBjb3JydXB0IGZpbGUsIG9yIE5vbmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FmaWxlJywgemlwZi50ZXN0emlwKCkpCisKKyAgICBkZWYgdGVzdF90ZXN0emlwX3dpdGhfYmFkX2NyY19zdG9yZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdGVzdHppcF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3Rlc3R6aXBfd2l0aF9iYWRfY3JjX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Rlc3R6aXBfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIGNoZWNrX3JlYWRfd2l0aF9iYWRfY3JjKHNlbGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCBmaWxlcyB3aXRoIGJhZCBDUkNzIHJhaXNlIGEgQmFkWmlwZmlsZSBleGNlcHRpb24gd2hlbiByZWFkLiIiIgorICAgICAgICB6aXBkYXRhID0gc2VsZi56aXBzX3dpdGhfYmFkX2NyY1tjb21wcmVzc2lvbl0KKworICAgICAgICAjIFVzaW5nIFppcEZpbGUucmVhZCgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCB6aXBmLnJlYWQsICdhZmlsZScpCisKKyAgICAgICAgIyBVc2luZyBaaXBFeHRGaWxlLnJlYWQoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdhZmlsZScsICdyJykgYXMgY29ycnVwdF9maWxlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgY29ycnVwdF9maWxlLnJlYWQpCisKKyAgICAgICAgIyBTYW1lIHdpdGggc21hbGwgcmVhZHMgKGluIG9yZGVyIHRvIGV4ZXJjaXNlIHRoZSBidWZmZXJpbmcgbG9naWMpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2FmaWxlJywgJ3InKSBhcyBjb3JydXB0X2ZpbGU6CisgICAgICAgICAgICAgICAgY29ycnVwdF9maWxlLk1JTl9SRUFEX1NJWkUgPSAyCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUpOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjb3JydXB0X2ZpbGUucmVhZCgyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlYWRfd2l0aF9iYWRfY3JjX3N0b3JlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JhZF9jcmNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgY2hlY2tfcmVhZF9yZXR1cm5fc2l6ZShzZWxmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgSXNzdWUgIzk4Mzc6IFppcEV4dEZpbGUucmVhZCgpIHNob3VsZG4ndCByZXR1cm4gbW9yZSBieXRlcworICAgICAgICAjIHRoYW4gcmVxdWVzdGVkLgorICAgICAgICBmb3IgdGVzdF9zaXplIGluICgxLCA0MDk1LCA0MDk2LCA0MDk3LCAxNjM4NCk6CisgICAgICAgICAgICBmaWxlX3NpemUgPSB0ZXN0X3NpemUgKyAxCisgICAgICAgICAgICBqdW5rID0gYicnLmpvaW4oc3RydWN0LnBhY2soJ0InLCByYW5kaW50KDAsIDI1NSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoZmlsZV9zaXplKSkKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oKSwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZjoKKyAgICAgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCdmb28nLCBqdW5rKQorICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdmb28nLCAncicpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKHRlc3Rfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgdGVzdF9zaXplKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZXR1cm5fc2l6ZV9zdG9yZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF9yZXR1cm5fc2l6ZSh6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZF9yZXR1cm5fc2l6ZV9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3JldHVybl9zaXplKHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIHRlc3RfZW1wdHlfemlwZmlsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNyZWF0aW5nIGEgZmlsZSBpbiAndycgb3IgJ2EnIG1vZGUgYW5kIGNsb3Npbmcgd2l0aG91dAorICAgICAgICAjIGFkZGluZyBhbnkgZmlsZXMgdG8gdGhlIGFyY2hpdmVzIGNyZWF0ZXMgYSB2YWxpZCBlbXB0eSBaSVAgZmlsZQogICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyICsgJ29vcHMnCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCiAgICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmciA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQyKQotICAgICAgICB6aXBmci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBaSVAgZmlsZSBpbiAndycgbW9kZSIpCisKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9ImEiKQorICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlVuYWJsZSB0byBjcmVhdGUgZW1wdHkgWklQIGZpbGUgaW4gJ2EnIG1vZGUiKQorCisgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKKyAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBmaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCisgICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgRGVjcnlwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBaSVAgZGVjcnlwdGlvbiB3b3Jrcy4gU2luY2UgdGhlIGxpYnJhcnkgZG9lcyBub3QKLSAgICAjIHN1cHBvcnQgZW5jcnlwdGlvbiBhdCB0aGUgbW9tZW50LCB3ZSB1c2UgYSBwcmUtZ2VuZXJhdGVkIGVuY3J5cHRlZAotICAgICMgWklQIGZpbGUKKyAgICAiIiJDaGVjayB0aGF0IFpJUCBkZWNyeXB0aW9uIHdvcmtzLiBTaW5jZSB0aGUgbGlicmFyeSBkb2VzIG5vdAorICAgIHN1cHBvcnQgZW5jcnlwdGlvbiBhdCB0aGUgbW9tZW50LCB3ZSB1c2UgYSBwcmUtZ2VuZXJhdGVkIGVuY3J5cHRlZAorICAgIFpJUCBmaWxlLiIiIgogCiAgICAgZGF0YSA9ICgKICAgICAnUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJwpAQCAtODE1LDEzICsxMDA2LDExIEBACiAgICAgcGxhaW4yID0gJ1x4MDAnKjUxMgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAid2IiKQotICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEpCiAgICAgICAgIHNlbGYuemlwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKQotICAgICAgICBmcCA9IG9wZW4oVEVTVEZOMiwgIndiIikKLSAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhMikKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzZWxmLmRhdGEyKQogICAgICAgICBzZWxmLnppcDIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtODMwLDE3NiArMTAxOSwxODcgQEAKICAgICAgICAgc2VsZi56aXAyLmNsb3NlKCkKICAgICAgICAgb3MudW5saW5rKFRFU1RGTjIpCiAKLSAgICBkZWYgdGVzdE5vUGFzc3dvcmQoc2VsZik6CisgICAgZGVmIHRlc3Rfbm9fcGFzc3dvcmQoc2VsZik6CiAgICAgICAgICMgUmVhZGluZyB0aGUgZW5jcnlwdGVkIGZpbGUgd2l0aG91dCBwYXNzd29yZAogICAgICAgICAjIG11c3QgZ2VuZXJhdGUgYSBSdW5UaW1lIGV4Y2VwdGlvbgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuemlwLnJlYWQsICJ0ZXN0LnR4dCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAyLnJlYWQsICJ6ZXJvIikKIAotICAgIGRlZiB0ZXN0QmFkUGFzc3dvcmQoc2VsZik6CisgICAgZGVmIHRlc3RfYmFkX3Bhc3N3b3JkKHNlbGYpOgogICAgICAgICBzZWxmLnppcC5zZXRwYXNzd29yZCgicGVybCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKICAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKCJwZXJsIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcDIucmVhZCwgInplcm8iKQogCi0gICAgZGVmIHRlc3RHb29kUGFzc3dvcmQoc2VsZik6CisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2dvb2RfcGFzc3dvcmQoc2VsZik6CiAgICAgICAgIHNlbGYuemlwLnNldHBhc3N3b3JkKCJweXRob24iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnppcC5yZWFkKCJ0ZXN0LnR4dCIpLCBzZWxmLnBsYWluKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuemlwLnJlYWQoInRlc3QudHh0IiksIHNlbGYucGxhaW4pCiAgICAgICAgIHNlbGYuemlwMi5zZXRwYXNzd29yZCgiMTIzNDUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnppcDIucmVhZCgiemVybyIpLCBzZWxmLnBsYWluMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnppcDIucmVhZCgiemVybyIpLCBzZWxmLnBsYWluMikKIAogCiBjbGFzcyBUZXN0c1dpdGhSYW5kb21CaW5hcnlGaWxlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBkYXRhY291bnQgPSByYW5kaW50KDE2LCA2NCkqMTAyNCArIHJhbmRpbnQoMSwgMTAyNCkKLSAgICAgICAgc2VsZi5kYXRhID0gJycuam9pbigoc3RydWN0LnBhY2soJzxmJywgcmFuZG9tKCkqcmFuZGludCgtMTAwMCwgMTAwMCkpIGZvciBpIGluIHhyYW5nZShkYXRhY291bnQpKSkKKyAgICAgICAgc2VsZi5kYXRhID0gJycuam9pbihzdHJ1Y3QucGFjaygnPGYnLCByYW5kb20oKSpyYW5kaW50KC0xMDAwLCAxMDAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoZGF0YWNvdW50KSkKIAogICAgICAgICAjIE1ha2UgYSBzb3VyY2UgZmlsZSB3aXRoIHNvbWUgbGluZXMKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgIndiIikKLSAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCi0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQogCi0gICAgZGVmIG1ha2VUZXN0QXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgZGVmIG1ha2VfdGVzdF9hcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQogCi0gICAgZGVmIHppcFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgemlwX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgdGVzdGRhdGEgPSB6aXBmcC5yZWFkKFRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGEpLCBsZW4oc2VsZi5kYXRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YSwgc2VsZi5kYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoImFub3RoZXIiK29zLmV4dHNlcCsibmFtZSIpLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB0ZXN0ZGF0YSA9IHppcGZwLnJlYWQoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGEpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKIAotICAgIGRlZiB0ZXN0U3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgemlwT3BlblRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIHppcF9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZGF0YTEgPSBbXQotICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZCgyNTYpCi0gICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICB6aXBkYXRhMiA9IFtdCi0gICAgICAgIHppcG9wZW4yID0gemlwZnAub3BlbigiYW5vdGhlciIrb3MuZXh0c2VwKyJuYW1lIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4yLnJlYWQoMjU2KQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTIuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgICAgIHppcGRhdGEyID0gW10KKyAgICAgICAgICAgIHppcG9wZW4yID0gemlwZnAub3BlbigiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjIucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB6aXBkYXRhMi5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHRlc3RkYXRhMSA9ICcnLmpvaW4oemlwZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgdGVzdGRhdGExID0gJycuam9pbih6aXBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTEsIHNlbGYuZGF0YSkKIAotICAgICAgICB0ZXN0ZGF0YTIgPSAnJy5qb2luKHppcGRhdGEyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YTEpLCBsZW4oc2VsZi5kYXRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTEsIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgdGVzdGRhdGEyID0gJycuam9pbih6aXBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMiksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTIsIHNlbGYuZGF0YSkKIAotICAgIGRlZiB0ZXN0T3BlblN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9vcGVuX3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcE9wZW5UZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgemlwUmFuZG9tT3BlblRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiB6aXBfcmFuZG9tX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBkYXRhMSA9IFtdCi0gICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKHJhbmRpbnQoMSwgMTAyNCkpCi0gICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCiAKLSAgICAgICAgdGVzdGRhdGEgPSAnJy5qb2luKHppcGRhdGExKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3RkYXRhID0gJycuam9pbih6aXBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCiAKLSAgICBkZWYgdGVzdFJhbmRvbU9wZW5TdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmFuZG9tT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yYW5kb21fb3Blbl90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisKK0Bza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKIGNsYXNzIFRlc3RzV2l0aE11bHRpcGxlT3BlbnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpCi0gICAgICAgIHppcGZwLndyaXRlc3RyKCdvbmVzJywgJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICB6aXBmcC53cml0ZXN0cigndHdvcycsICcyJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCdvbmVzJywgJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCAnMicqRklYRURURVNUX1NJWkUpCiAKLSAgICBkZWYgdGVzdFNhbWVGaWxlKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NhbWVfZmlsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpCi0gICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCi0gICAgICAgIHpvcGVuMiA9IHppcGYub3Blbignb25lcycpCi0gICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIGRhdGEyKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQorICAgICAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCdvbmVzJykKKyAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBkYXRhMikKIAotICAgIGRlZiB0ZXN0RGlmZmVyZW50RmlsZShzZWxmKToKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmlsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpCi0gICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCi0gICAgICAgIHpvcGVuMiA9IHppcGYub3BlbigndHdvcycpCi0gICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsICcxJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgJzInKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQorICAgICAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCd0d29zJykKKyAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCAnMScqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCAnMicqRklYRURURVNUX1NJWkUpCiAKLSAgICBkZWYgdGVzdEludGVybGVhdmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0ICh3aGVuIHRoZSBaaXBGaWxlIGlzIGluIGNvbnRyb2wgb2YgY3JlYXRpbmcgZmlsZSBvYmplY3RzKQogICAgICAgICAjIG11bHRpcGxlIG9wZW4oKSBjYWxscyBjYW4gYmUgbWFkZSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlci4KLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikKLSAgICAgICAgem9wZW4xID0gemlwZi5vcGVuKCdvbmVzJykKLSAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIHpvcGVuMiA9IHppcGYub3BlbigndHdvcycpCi0gICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCAnMicqRklYRURURVNUX1NJWkUpCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCisgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIHpvcGVuMiA9IHppcGYub3BlbigndHdvcycpCisgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsICcxJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcyJypGSVhFRFRFU1RfU0laRSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4yKQorCiAKIGNsYXNzIFRlc3RXaXRoRGlyZWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3REaXIoc2VsZik6Ci0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoZmluZGZpbGUoInppcGRpci56aXAiKSkKLSAgICAgICAgemlwZi5leHRyYWN0YWxsKFRFU1RGTjIpCisgICAgZGVmIHRlc3RfZXh0cmFjdF9kaXIoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGZpbmRmaWxlKCJ6aXBkaXIuemlwIikpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmV4dHJhY3RhbGwoVEVTVEZOMikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJhIikpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiLCAiYiIpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIsICJiIiwgImMiKSkpCkBAIC0xMDA3LDkgKzEyMDcsOSBAQAogICAgIGRlZiB0ZXN0X2J1Z182MDUwKHNlbGYpOgogICAgICAgICAjIEV4dHJhY3Rpb24gc2hvdWxkIHN1Y2NlZWQgaWYgZGlyZWN0b3JpZXMgYWxyZWFkeSBleGlzdAogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkKLSAgICAgICAgc2VsZi50ZXN0RXh0cmFjdERpcigpCisgICAgICAgIHNlbGYudGVzdF9leHRyYWN0X2RpcigpCiAKLSAgICBkZWYgdGVzdFN0b3JlRGlyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3N0b3JlX2RpcihzZWxmKToKICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IikpCiAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpCiAgICAgICAgIHppcGYud3JpdGUob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IiksICJ4IikKQEAgLTEwMTgsMTIgKzEyMTgsMTMgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAKIGNsYXNzIFVuaXZlcnNhbE5ld2xpbmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmxpbmVfZ2VuID0gWyJUZXN0IG9mIHppcGZpbGUgbGluZSAlZC4iICUgaSBmb3IgaSBpbiB4cmFuZ2UoRklYRURURVNUX1NJWkUpXQorICAgICAgICBzZWxmLmxpbmVfZ2VuID0gWyJUZXN0IG9mIHppcGZpbGUgbGluZSAlZC4iICUgaQorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShGSVhFRFRFU1RfU0laRSldCiAgICAgICAgIHNlbGYuc2VwcyA9ICgnXHInLCAnXHJcbicsICdcbicpCiAgICAgICAgIHNlbGYuYXJjZGF0YSwgc2VsZi5hcmNmaWxlcyA9IHt9LCB7fQogICAgICAgICBmb3IgbiwgcyBpbiBlbnVtZXJhdGUoc2VsZi5zZXBzKToKQEAgLTEwMzEsMTA1ICsxMjMyLDEzMyBAQAogICAgICAgICAgICAgc2VsZi5hcmNmaWxlc1tzXSA9ICclcy0lZCcgJSAoVEVTVEZOLCBuKQogICAgICAgICAgICAgb3BlbihzZWxmLmFyY2ZpbGVzW3NdLCAid2IiKS53cml0ZShzZWxmLmFyY2RhdGFbc10pCiAKLSAgICBkZWYgbWFrZVRlc3RBcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKLSAgICAgICAgZm9yIGZuIGluIHNlbGYuYXJjZmlsZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICB6aXBmcC53cml0ZShmbiwgZm4pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5hcmNmaWxlcy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZShmbiwgZm4pCiAKLSAgICBkZWYgcmVhZFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgemlwZGF0YSA9IHppcGZwLm9wZW4oZm4sICJyVSIpLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB6aXBkYXRhID0gemlwZnAub3BlbihmbiwgInJVIikucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgcmVhZGxpbmVUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHJlYWRsaW5lX3JlYWRfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCiAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKGZuLCAiclUiKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKLSAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQorICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWQoNSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLmFyY2RhdGFbJ1xuJ10pCiAKICAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgZGVmIHJlYWRsaW5lc1Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgcmVhZGxpbmVfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIHppcGxpbmVzID0gemlwZnAub3BlbihmbiwgInJVIikucmVhZGxpbmVzKCkKLSAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB6aXBvcGVuID0gemlwZnAub3BlbihmbiwgInJVIikKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgorICAgICAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgJ1xuJykKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgaXRlcmxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiByZWFkbGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKGZuLCAiclUiKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB6aXBsaW5lcyA9IHppcGZwLm9wZW4oZm4sICJyVSIpLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgZGVmIGl0ZXJsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAotICAgIGRlZiB0ZXN0UmVhZFN0b3JlZChzZWxmKToKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKGZuLCAiclUiKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisKKyAgICBkZWYgdGVzdF9yZWFkX3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnJlYWRUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYucmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB0ZXN0UmVhZGxpbmVTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9zdG9yZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgc2VsZi5yZWFkbGluZVRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RSZWFkbGluZXNTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RJdGVybGluZXNTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLml0ZXJsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBpZiB6bGliOgotICAgICAgICBkZWYgdGVzdFJlYWREZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYucmVhZFRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnJlYWRsaW5lVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVfcmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgICAgIGRlZiB0ZXN0SXRlcmxpbmVzRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5pdGVybGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCi0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGVzdHNXaXRoU291cmNlRmlsZSwgVGVzdFppcDY0SW5TbWFsbEZpbGVzLCBPdGhlclRlc3RzLAogICAgICAgICAgICAgICAgICBQeVppcEZpbGVUZXN0cywgRGVjcnlwdGlvblRlc3RzLCBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zLAotICAgICAgICAgICAgICAgICBUZXN0V2l0aERpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgVW5pdmVyc2FsTmV3bGluZVRlc3RzLCBUZXN0c1dpdGhSYW5kb21CaW5hcnlGaWxlcykKKyAgICAgICAgICAgICAgICAgVGVzdFdpdGhEaXJlY3RvcnksIFVuaXZlcnNhbE5ld2xpbmVUZXN0cywKKyAgICAgICAgICAgICAgICAgVGVzdHNXaXRoUmFuZG9tQmluYXJ5RmlsZXMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKaW5kZXggODc4NjlhZS4uNTk3NGM4YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTYsMTEgKzYsMTcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IHpsaWIgIyBpbXBsaWVkIHByZXJlcXVpc2l0ZQotZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlLCBaaXBJbmZvLCBaSVBfU1RPUkVELCBaSVBfREVGTEFURUQKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CiBmcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCiAKKyMgc29tZSB0ZXN0cyBjYW4gYmUgcmFuIGV2ZW4gd2l0aG91dCB6bGliCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCitmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUsIFppcEluZm8sIFpJUF9TVE9SRUQsIFpJUF9ERUZMQVRFRAorCiBpbXBvcnQgemlwaW1wb3J0CiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgZG9jdGVzdApAQCAtNTMsNiArNTksNyBAQAogVEVTVFBBQ0syID0gInppcHRlc3RwYWNrYWdlMiIKIFRFTVBfWklQID0gb3MucGF0aC5hYnNwYXRoKCJqdW5rOTUxNDIiICsgb3MuZXh0c2VwICsgInppcCIpCiAKKwogY2xhc3MgVW5jb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgogCiAgICAgY29tcHJlc3Npb24gPSBaSVBfU1RPUkVECkBAIC05Niw4ICsxMDMsOCBAQAogCiAgICAgICAgICAgICBpZiBleHBlY3RlZF9leHQ6CiAgICAgICAgICAgICAgICAgZmlsZSA9IG1vZC5nZXRfZmlsZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsZSwgb3MucGF0aC5qb2luKFRFTVBfWklQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGVzKSArIGV4cGVjdGVkX2V4dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUsIG9zLnBhdGguam9pbihURU1QX1pJUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptb2R1bGVzKSArIGV4cGVjdGVkX2V4dCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHouY2xvc2UoKQogICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQpAQCAtMjEyLDMxICsyMTksMzEgQEAKICAgICAgICAgICAgIHouY2xvc2UoKQogCiAgICAgICAgICAgICB6aSA9IHppcGltcG9ydC56aXBpbXBvcnRlcihURU1QX1pJUCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmFyY2hpdmUsIFRFTVBfWklQKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuaXNfcGFja2FnZShURVNUUEFDSyksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLKSwgVHJ1ZSkKICAgICAgICAgICAgIG1vZCA9IHppLmxvYWRfbW9kdWxlKFRFU1RQQUNLKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuX2dldF9maWxlbmFtZShURVNUUEFDSyksIG1vZC5fX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKFRFU1RQQUNLKSwgbW9kLl9fZmlsZV9fKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKHBhY2tkaXIgKyAnX19pbml0X18nKSwgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKHBhY2tkaXIgKyBURVNUUEFDSzIpLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuaXNfcGFja2FnZShwYWNrZGlyMiArIFRFU1RNT0QpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShwYWNrZGlyICsgJ19faW5pdF9fJyksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKHBhY2tkaXIgKyBURVNUUEFDSzIpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKHBhY2tkaXIyICsgVEVTVE1PRCksIEZhbHNlKQogCiAgICAgICAgICAgICBtb2RfcGF0aCA9IHBhY2tkaXIyICsgVEVTVE1PRAogICAgICAgICAgICAgbW9kX25hbWUgPSBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShtb2RfcGF0aCkKLSAgICAgICAgICAgIHBrZyA9IF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5nZXRfc291cmNlKFRFU1RQQUNLKSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuX2dldF9maWxlbmFtZShtb2RfcGF0aCksIG1vZC5fX2ZpbGVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSyksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCiAgICAgICAgICAgICAjIFRvIHBhc3MgaW4gdGhlIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgdGhlIHBhdGgsIHdlIG11c3QgdXNlIHRoZSByaWdodCBpbXBvcnRlcgogICAgICAgICAgICAgbG9hZGVyID0gbW9kLl9fbG9hZGVyX18KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxvYWRlci5fZ2V0X2ZpbGVuYW1lKG1vZF9uYW1lKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X3NvdXJjZShtb2RfbmFtZSksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfZmlsZW5hbWUobW9kX25hbWUpLCBtb2QuX19maWxlX18pCiAKICAgICAgICAgICAgICMgdGVzdCBwcmVmaXggYW5kIGFyY2hpdmVwYXRoIG1lbWJlcnMKICAgICAgICAgICAgIHppMiA9IHppcGltcG9ydC56aXBpbXBvcnRlcihURU1QX1pJUCArIG9zLnNlcCArIFRFU1RQQUNLKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkyLmFyY2hpdmUsIFRFTVBfWklQKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkyLnByZWZpeCwgVEVTVFBBQ0sgKyBvcy5zZXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppMi5hcmNoaXZlLCBURU1QX1pJUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkyLnByZWZpeCwgVEVTVFBBQ0sgKyBvcy5zZXApCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB6LmNsb3NlKCkKICAgICAgICAgICAgIG9zLnJlbW92ZShURU1QX1pJUCkKQEAgLTI1NiwyNiArMjYzLDI2IEBACiAgICAgICAgICAgICB6LmNsb3NlKCkKIAogICAgICAgICAgICAgemkgPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVNUF9aSVAgKyBvcy5zZXAgKyBwYWNrZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoemkuYXJjaGl2ZSwgVEVNUF9aSVApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5wcmVmaXgsIHBhY2tkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5wcmVmaXgsIHBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syKSwgVHJ1ZSkKICAgICAgICAgICAgIG1vZCA9IHppLmxvYWRfbW9kdWxlKFRFU1RQQUNLMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLl9nZXRfZmlsZW5hbWUoVEVTVFBBQ0syKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUoVEVTVFBBQ0syKSwgbW9kLl9fZmlsZV9fKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArICdfX2luaXRfXycpLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syICsgb3Muc2VwICsgVEVTVE1PRCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArICdfX2luaXRfXycpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9EKSwgRmFsc2UpCiAKICAgICAgICAgICAgIG1vZF9wYXRoID0gVEVTVFBBQ0syICsgb3Muc2VwICsgVEVTVE1PRAogICAgICAgICAgICAgbW9kX25hbWUgPSBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShtb2RfcGF0aCkKLSAgICAgICAgICAgIHBrZyA9IF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5nZXRfc291cmNlKFRFU1RQQUNLMiksIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh6aS5nZXRfc291cmNlKG1vZF9wYXRoKSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHppLl9nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UoVEVTVFBBQ0syKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShtb2RfcGF0aCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9maWxlbmFtZShtb2RfcGF0aCksIG1vZC5fX2ZpbGVfXykKICAgICAgICAgICAgICMgVG8gcGFzcyBpbiB0aGUgbW9kdWxlIG5hbWUgaW5zdGVhZCBvZiB0aGUgcGF0aCwgd2UgbXVzdCB1c2UgdGhlIHJpZ2h0IGltcG9ydGVyCiAgICAgICAgICAgICBsb2FkZXIgPSBtb2QuX19sb2FkZXJfXwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobG9hZGVyLl9nZXRfZmlsZW5hbWUobW9kX25hbWUpLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHouY2xvc2UoKQogICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQpAQCAtMjg5LDggKzI5Niw4IEBACiAgICAgICAgICAgICB6LndyaXRlc3RyKG5hbWUsIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKICAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGF0YSwgemkuZ2V0X2RhdGEobmFtZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oJ3ppcGltcG9ydGVyIG9iamVjdCcgaW4gcmVwcih6aSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHppLmdldF9kYXRhKG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignemlwaW1wb3J0ZXIgb2JqZWN0JywgcmVwcih6aSkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB6LmNsb3NlKCkKICAgICAgICAgICAgIG9zLnJlbW92ZShURU1QX1pJUCkKQEAgLTM1Nyw3ICszNjQsNiBAQAogICAgIGRlZiB0ZXN0RG9jdGVzdFN1aXRlKHNlbGYpOgogICAgICAgICBzZWxmLnJ1bkRvY3Rlc3Qoc2VsZi5kb0RvY3Rlc3RTdWl0ZSkKIAotCiAgICAgZGVmIGRvVHJhY2ViYWNrKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZHVsZS5kb19yYWlzZSgpCkBAIC0zNzIsNyArMzc4LDcgQEAKIAogICAgICAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKICAgICAgICAgICAgIHByaW50X3RiKHRiLCAxLCBzKQotICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHMuZ2V0dmFsdWUoKS5lbmRzd2l0aChyYWlzZV9zcmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0dmFsdWUoKS5lbmRzd2l0aChyYWlzZV9zcmMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgb3VnaHQgdG8gYmUgaW1wb3NzaWJsZSIpCiAKQEAgLTM4MSw2ICszODcsNyBAQAogICAgICAgICBzZWxmLmRvVGVzdChOb25lLCBmaWxlcywgVEVTVE1PRCwgY2FsbD1zZWxmLmRvVHJhY2ViYWNrKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKIGNsYXNzIENvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSBaSVBfREVGTEFURUQKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggYjJjZjZiNy4uNGY0MTUxOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0yLDcgKzIsNiBAQAogIyBmb3Igd29ya2luZyB3aXRoIG1vZHVsZXMgbG9jYXRlZCBpbnNpZGUgemlwZmlsZXMKICMgVGhlIHRlc3RzIGFyZSBjZW50cmFsaXNlZCBpbiB0aGlzIGZhc2hpb24gdG8gbWFrZSBpdCBlYXN5IHRvIGRyb3AgdGhlbQogIyBpZiBhIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydCB6aXBpbXBvcnQKLWltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCkBAIC0xNSw2ICsxNCw4IEBACiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgcGRiCiBpbXBvcnQgd2FybmluZ3MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgcnVuX3B5dGhvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9zY3JpcHQpCiAKIHZlcmJvc2UgPSB0ZXN0LnRlc3Rfc3VwcG9ydC52ZXJib3NlCiAKQEAgLTMwLDExICszMSw2IEBACiAjIFJldHJpZXZlIHNvbWUgaGVscGVycyBmcm9tIG90aGVyIHRlc3QgY2FzZXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9kb2N0ZXN0LCBzYW1wbGVfZG9jdGVzdAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlCi1mcm9tIHRlc3QudGVzdF9jbWRfbGluZV9zY3JpcHQgaW1wb3J0IHRlbXBfZGlyLCBfcnVuX3B5dGhvbiwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NwYXduX3B5dGhvbiwgX2tpbGxfcHl0aG9uLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWFrZV90ZXN0X3NjcmlwdCwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21waWxlX3Rlc3Rfc2NyaXB0LCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21ha2VfdGVzdF96aXAsIF9tYWtlX3Rlc3RfcGtnCiAKIAogZGVmIF9ydW5fb2JqZWN0X2RvY3Rlc3Qob2JqLCBtb2R1bGUpOgpAQCAtNzksMTAgKzc1LDEwIEBACiAgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRzb3VyY2VfaXNzdWU0MjIzKHNlbGYpOgogICAgICAgICB0ZXN0X3NyYyA9ICJkZWYgZm9vKCk6IHBhc3NcbiIKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBpbml0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChkLCAnX19pbml0X18nLCB0ZXN0X3NyYykKKyAgICAgICAgICAgIGluaXRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdfX2luaXRfXycsIHRlc3Rfc3JjKQogICAgICAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4oJ3ppcF9wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShpbml0X25hbWUpKQotICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXAoZCwgJ3Rlc3RfemlwJywKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAndGVzdF96aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9uYW1lLCBuYW1lX2luX3ppcCkKICAgICAgICAgICAgIG9zLnJlbW92ZShpbml0X25hbWUpCiAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgemlwX25hbWUpCkBAIC0xMDcsOSArMTAzLDkgQEAKICAgICAgICAgc2FtcGxlX3NyYyA9IHNhbXBsZV9zcmMucmVwbGFjZSgidGVzdC50ZXN0X2RvY3Rlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3ppcHBlZF9kb2N0ZXN0IikKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICd0ZXN0X3ppcHBlZF9kb2N0ZXN0JywKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3Rlc3RfemlwcGVkX2RvY3Rlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NyYykKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKGQsICd0ZXN0X3ppcCcsCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgJ3Rlc3RfemlwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgeiA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ2EnKQogICAgICAgICAgICAgei53cml0ZXN0cigic2FtcGxlX3ppcHBlZF9kb2N0ZXN0LnB5Iiwgc2FtcGxlX3NyYykKQEAgLTE5NCwyMyArMTkwLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICIiIikKICAgICAgICAgcGF0dGVybiA9ICdGaWxlICIlcyIsIGxpbmUgMiwgaW4gJXMnCiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgotICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCi0gICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBfcnVuX3B5dGhvbihzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3NjcmlwdCcsIHRlc3Rfc3JjKQorICAgICAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gcnVuX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIGV4cGVjdGVkID0gcGF0dGVybiAlIChzY3JpcHRfbmFtZSwgIl9fbWFpbl9fLlRlc3QiKQogICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICBwcmludCAiRXhwZWN0ZWQgbGluZSIsIGV4cGVjdGVkCiAgICAgICAgICAgICAgICAgcHJpbnQgIkdvdCBzdGRvdXQ6IgogICAgICAgICAgICAgICAgIHByaW50IGRhdGEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhleHBlY3RlZCBpbiBkYXRhKQotICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXAoZCwgInRlc3RfemlwIiwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIGRhdGEpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQotICAgICAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gX3J1bl9weXRob24oemlwX25hbWUpCisgICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBydW5fcHl0aG9uKHppcF9uYW1lKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBwYXR0ZXJuICUgKHJ1bl9uYW1lLCAiX19tYWluX18uVGVzdCIpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICJFeHBlY3RlZCBsaW5lIiwgZXhwZWN0ZWQKICAgICAgICAgICAgICAgICBwcmludCAiR290IHN0ZG91dDoiCiAgICAgICAgICAgICAgICAgcHJpbnQgZGF0YQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGV4cGVjdGVkIGluIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfcGRiX2lzc3VlNDIwMShzZWxmKToKICAgICAgICAgdGVzdF9zcmMgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXApAQCAtMjIxLDE3ICsyMTcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgcGRiLnJ1bmNhbGwoZikKICAgICAgICAgICAgICAgICAgICAgIiIiKQogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKLSAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoZCwgJ3NjcmlwdCcsIHRlc3Rfc3JjKQotICAgICAgICAgICAgcCA9IF9zcGF3bl9weXRob24oc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKCdsXG4nKQotICAgICAgICAgICAgZGF0YSA9IF9raWxsX3B5dGhvbihwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHNjcmlwdF9uYW1lIGluIGRhdGEpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChkLCAidGVzdF96aXAiLAorICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLCBkYXRhKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICJ0ZXN0X3ppcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ19fbWFpbl9fLnB5JykKLSAgICAgICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKHppcF9uYW1lKQorICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoJ2xcbicpCi0gICAgICAgICAgICBkYXRhID0gX2tpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8ocnVuX25hbWUgaW4gZGF0YSkKKyAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihydW5fbmFtZSwgZGF0YSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3psaWIucHkgYi9MaWIvdGVzdC90ZXN0X3psaWIucHkKaW5kZXggMWI4MDJiOC4uY2JjM2VkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemxpYi5weQpAQCAtMSwxNiArMSwxNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotaW1wb3J0IHpsaWIKIGltcG9ydCBiaW5hc2NpaQogaW1wb3J0IHJhbmRvbQogZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcHJlY2lzaW9uYmlnbWVtdGVzdCwgXzFHCiAKK3psaWIgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnemxpYicpCisKIAogY2xhc3MgQ2hlY2tzdW1UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBjaGVja3N1bSB0ZXN0IGNhc2VzCiAgICAgZGVmIHRlc3RfY3JjMzJzdGFydChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCIiKSwgemxpYi5jcmMzMigiIiwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Xyh6bGliLmNyYzMyKCJhYmMiLCAweGZmZmZmZmZmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHpsaWIuY3JjMzIoImFiYyIsIDB4ZmZmZmZmZmYpKQogCiAgICAgZGVmIHRlc3RfY3JjMzJlbXB0eShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCIiLCAwKSwgMCkKQEAgLTE5LDcgKzIwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2FkbGVyMzJzdGFydChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoIiIpLCB6bGliLmFkbGVyMzIoIiIsIDEpKQotICAgICAgICBzZWxmLmFzc2VydF8oemxpYi5hZGxlcjMyKCJhYmMiLCAweGZmZmZmZmZmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHpsaWIuYWRsZXIzMigiYWJjIiwgMHhmZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9hZGxlcjMyZW1wdHkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKCIiLCAwKSwgMCkKQEAgLTEzNywxNCArMTM4LDkgQEAKICAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3N0cmVhbShzZWxmKToKICAgICAgICAgIyBBbiB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpcyBnaXZlbgogICAgICAgICB4ID0gemxpYi5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHpsaWIuZGVjb21wcmVzcyh4WzotMV0pCi0gICAgICAgIGV4Y2VwdCB6bGliLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCi0gICAgICAgICAgICAgICAgIkVycm9yIC01IHdoaWxlIGRlY29tcHJlc3NpbmcgZGF0YTogaW5jb21wbGV0ZSBvciB0cnVuY2F0ZWQgc3RyZWFtIgotICAgICAgICAgICAgICAgIGluIHN0cihlKSwgc3RyKGUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ6bGliLmVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCh6bGliLmVycm9yLAorICAgICAgICAgICAgIkVycm9yIC01IHdoaWxlIGRlY29tcHJlc3NpbmcgZGF0YTogaW5jb21wbGV0ZSBvciB0cnVuY2F0ZWQgc3RyZWFtIiwKKyAgICAgICAgICAgIHpsaWIuZGVjb21wcmVzcywgeFs6LTFdKQogCiAgICAgIyBNZW1vcnkgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRha2VzIGludG8gYWNjb3VudCBvdmVyYWxsb2NhdGlvbgogCkBAIC0yNjAsNyArMjU2LDcgQEAKICAgICAgICAgd2hpbGUgY2I6CiAgICAgICAgICAgICAjbWF4X2xlbmd0aCA9IDEgKyBsZW4oY2IpLy8xMAogICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcyhjYiwgZGN4KQotICAgICAgICAgICAgc2VsZi5mYWlsSWYobGVuKGNodW5rKSA+IGRjeCwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNodW5rKSA+IGRjeCwKICAgICAgICAgICAgICAgICAgICAgJ2NodW5rIHRvbyBiaWcgKCVkPiVkKScgJSAobGVuKGNodW5rKSwgZGN4KSkKICAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNodW5rKQogICAgICAgICAgICAgY2IgPSBkY28udW5jb25zdW1lZF90YWlsCkBAIC0yODUsNyArMjgxLDcgQEAKICAgICAgICAgd2hpbGUgY2I6CiAgICAgICAgICAgICBtYXhfbGVuZ3RoID0gMSArIGxlbihjYikvLzEwCiAgICAgICAgICAgICBjaHVuayA9IGRjby5kZWNvbXByZXNzKGNiLCBtYXhfbGVuZ3RoKQotICAgICAgICAgICAgc2VsZi5mYWlsSWYobGVuKGNodW5rKSA+IG1heF9sZW5ndGgsCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxlbihjaHVuaykgPiBtYXhfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2NodW5rIHRvbyBiaWcgKCVkPiVkKScgJSAobGVuKGNodW5rKSxtYXhfbGVuZ3RoKSkKICAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNodW5rKQogICAgICAgICAgICAgY2IgPSBkY28udW5jb25zdW1lZF90YWlsCkBAIC0yOTQsNyArMjkwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdoaWxlIGNodW5rOgogICAgICAgICAgICAgICAgIGNodW5rID0gZGNvLmRlY29tcHJlc3MoJycsIG1heF9sZW5ndGgpCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsSWYobGVuKGNodW5rKSA+IG1heF9sZW5ndGgsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2h1bmspID4gbWF4X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLG1heF9sZW5ndGgpKQogICAgICAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNodW5rKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4oYnVmcyksICdXcm9uZyBkYXRhIHJldHJpZXZlZCcpCkBAIC0zNjgsNyArMzY0LDcgQEAKICAgICAgICAgIyBjYXVzZWQgYSBjb3JlIGR1bXAuKQogCiAgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfQkVTVF9DT01QUkVTU0lPTikKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGNvLmZsdXNoKCkpICAjIFJldHVybnMgYSB6bGliIGhlYWRlcgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY28uZmx1c2goKSkgICMgUmV0dXJucyBhIHpsaWIgaGVhZGVyCiAgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmZsdXNoKCksICIiKSAjIFJldHVybnMgbm90aGluZwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0dGFyLnRhciBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCmluZGV4IGI1YmI0NmIuLmJhYzBlMjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3R0YXIudGFyCisrKyBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3RyYWNlZG1vZHVsZXMvX19pbml0X18ucHkgYi9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZmE0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNCBAQAorIiIiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIG1vZHVsZXMgdGhhdCBoZWxwIHRlc3RpbmcgdGhlIHRyYWNlLnB5IG1vZHVsZS4gTm90ZQordGhhdCB0aGUgZXhhY3QgbG9jYXRpb24gb2YgZnVuY3Rpb25zIGluIHRoZXNlIG1vZHVsZXMgaXMgaW1wb3J0YW50LCBhcyB0cmFjZS5weQordGFrZXMgdGhlIHJlYWwgbGluZSBudW1iZXJzIGludG8gYWNjb3VudC4KKyIiIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy90ZXN0bW9kLnB5IGIvTGliL3Rlc3QvdHJhY2VkbW9kdWxlcy90ZXN0bW9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Mjc3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90cmFjZWRtb2R1bGVzL3Rlc3Rtb2QucHkKQEAgLTAsMCArMSw5IEBACitkZWYgZnVuYyh4KToKKyAgICBiID0geCArIDEKKyAgICByZXR1cm4gYiArIDIKKworZGVmIGZ1bmMyKCk6CisgICAgIiIiVGVzdCBmdW5jdGlvbiBmb3IgaXNzdWUgOTkzNiAiIiIKKyAgICByZXR1cm4gKDEsCisgICAgICAgICAgICAyLAorICAgICAgICAgICAgMykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3dpbl9jb25zb2xlX2hhbmRsZXIucHkgYi9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmNlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyIiIlNjcmlwdCB1c2VkIHRvIHRlc3Qgb3Mua2lsbCBvbiBXaW5kb3dzLCBmb3IgaXNzdWUgIzEyMjAyMTIKKworVGhpcyBzY3JpcHQgaXMgc3RhcnRlZCBhcyBhIHN1YnByb2Nlc3MgaW4gdGVzdF9vcyBhbmQgaXMgdXNlZCB0byB0ZXN0IHRoZQorQ1RSTF9DX0VWRU5UIGFuZCBDVFJMX0JSRUFLX0VWRU5UIHNpZ25hbHMsIHdoaWNoIHJlcXVpcmVzIGEgY3VzdG9tIGhhbmRsZXIKK3RvIGJlIHdyaXR0ZW4gaW50byB0aGUga2lsbCB0YXJnZXQuCisKK1NlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2ODUwNDklMjh2PVZTLjg1JTI5LmFzcHggZm9yIGEKK3NpbWlsYXIgZXhhbXBsZSBpbiBDLgorIiIiCisKK2Zyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcywgV0lORlVOQ1RZUEUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBtbWFwCitpbXBvcnQgc3lzCisKKyMgRnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBmdW5jdGlvbi4gUmV0dXJucyBCT09MLCB0YWtlcyBhIERXT1JELgorSGFuZGxlclJvdXRpbmUgPSBXSU5GVU5DVFlQRSh3aW50eXBlcy5CT09MLCB3aW50eXBlcy5EV09SRCkKKworZGVmIF9jdHJsX2hhbmRsZXIoc2lnKToKKyAgICAiIiJIYW5kbGUgYSBzaWcgZXZlbnQgYW5kIHJldHVybiAwIHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyIiIgorICAgIGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9DX0VWRU5UOgorICAgICAgICBwYXNzCisgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiVU5LTk9XTiBFVkVOVCIpCisgICAgcmV0dXJuIDAKKworY3RybF9oYW5kbGVyID0gSGFuZGxlclJvdXRpbmUoX2N0cmxfaGFuZGxlcikKKworCitTZXRDb25zb2xlQ3RybEhhbmRsZXIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLlNldENvbnNvbGVDdHJsSGFuZGxlcgorU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKEhhbmRsZXJSb3V0aW5lLCB3aW50eXBlcy5CT09MKQorU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIyBBZGQgb3VyIGNvbnNvbGUgY29udHJvbCBoYW5kbGluZyBmdW5jdGlvbiB3aXRoIHZhbHVlIDEKKyAgICBpZiBub3QgU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaGFuZGxlciwgMSk6CisgICAgICAgIHByaW50KCJVbmFibGUgdG8gYWRkIFNldENvbnNvbGVDdHJsSGFuZGxlciIpCisgICAgICAgIGV4aXQoLTEpCisKKyAgICAjIEF3YWtlbiBtYWlsIHByb2Nlc3MKKyAgICBtID0gbW1hcC5tbWFwKC0xLCAxLCBzeXMuYXJndlsxXSkKKyAgICBtWzBdID0gJzEnCisKKyAgICAjIERvIG5vdGhpbmcgYnV0IHdhaXQgZm9yIHRoZSBzaWduYWwKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYzNGIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLW5zLnhtbApAQCAtMCwwICsxLDcgQEAKKzw/cGkgZGF0YT8+Cis8IS0tIGNvbW1lbnQgLS0+Cis8cm9vdCB4bWxucz0nbmFtZXNwYWNlJz4KKyAgIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQ+CisgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgIDxlbXB0eS1lbGVtZW50Lz4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGMyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUueG1sCkBAIC0wLDAgKzEsNiBAQAorPCEtLSBjb21tZW50IC0tPgorPHJvb3Q+CisgICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PgorICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICA8ZW1wdHktZWxlbWVudC8+Cis8L3Jvb3Q+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0LnhtbCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0LnhtbApyZW5hbWUgdG8gTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3QueG1sLm91dCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdC54bWwub3V0CnJlbmFtZSB0byBMaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKZGlmZiAtLWdpdCBhL0xpYi90ZXh0d3JhcC5weSBiL0xpYi90ZXh0d3JhcC5weQppbmRleCA2NGE1Yjk3Li45NTgyYTFjIDEwMDY0NAotLS0gYS9MaWIvdGV4dHdyYXAucHkKKysrIGIvTGliL3RleHR3cmFwLnB5CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgICAgICAgIiIiX3NwbGl0KHRleHQgOiBzdHJpbmcpIC0+IFtzdHJpbmddCiAKICAgICAgICAgU3BsaXQgdGhlIHRleHQgdG8gd3JhcCBpbnRvIGluZGl2aXNpYmxlIGNodW5rcy4gIENodW5rcyBhcmUKLSAgICAgICAgbm90IHF1aXRlIHRoZSBzYW1lIGFzIHdvcmRzOyBzZWUgd3JhcF9jaHVua3MoKSBmb3IgZnVsbAorICAgICAgICBub3QgcXVpdGUgdGhlIHNhbWUgYXMgd29yZHM7IHNlZSBfd3JhcF9jaHVua3MoKSBmb3IgZnVsbAogICAgICAgICBkZXRhaWxzLiAgQXMgYW4gZXhhbXBsZSwgdGhlIHRleHQKICAgICAgICAgICBMb29rLCBnb29mLWJhbGwgLS0gdXNlIHRoZSAtYiBvcHRpb24hCiAgICAgICAgIGJyZWFrcyBpbnRvIHRoZSBmb2xsb3dpbmcgY2h1bmtzOgpAQCAtMTkxLDkgKzE5MSw5IEBACiAgICAgICAgIHNwYWNlIHRvIHR3by4KICAgICAgICAgIiIiCiAgICAgICAgIGkgPSAwCi0gICAgICAgIHBhdCA9IHNlbGYuc2VudGVuY2VfZW5kX3JlCisgICAgICAgIHBhdHNlYXJjaCA9IHNlbGYuc2VudGVuY2VfZW5kX3JlLnNlYXJjaAogICAgICAgICB3aGlsZSBpIDwgbGVuKGNodW5rcyktMToKLSAgICAgICAgICAgIGlmIGNodW5rc1tpKzFdID09ICIgIiBhbmQgcGF0LnNlYXJjaChjaHVua3NbaV0pOgorICAgICAgICAgICAgaWYgY2h1bmtzW2krMV0gPT0gIiAiIGFuZCBwYXRzZWFyY2goY2h1bmtzW2ldKToKICAgICAgICAgICAgICAgICBjaHVua3NbaSsxXSA9ICIgICIKICAgICAgICAgICAgICAgICBpICs9IDIKICAgICAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGhyZWFkaW5nLnB5IGIvTGliL3RocmVhZGluZy5weQppbmRleCBlZTcwY2Q4Li42YTA2ZmViIDEwMDY0NAotLS0gYS9MaWIvdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90aHJlYWRpbmcucHkKQEAgLTEwLDcgKzEwLDYgQEAKIAogaW1wb3J0IHdhcm5pbmdzCiAKLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lLCBzbGVlcCBhcyBfc2xlZXAKIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjIGFzIF9mb3JtYXRfZXhjCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQpAQCAtNjQsOCArNjMsMTQgQEAKICAgICAgICAgZGVmIF9ub3RlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgogICAgICAgICAgICAgaWYgc2VsZi5fX3ZlcmJvc2U6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0ICUgYXJncwotICAgICAgICAgICAgICAgIGZvcm1hdCA9ICIlczogJXNcbiIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGhyZWFkKCkubmFtZSwgZm9ybWF0KQorICAgICAgICAgICAgICAgICMgSXNzdWUgIzQxODg6IGNhbGxpbmcgY3VycmVudF90aHJlYWQoKSBjYW4gaW5jdXIgYW4gaW5maW5pdGUKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2lvbiBpZiBpdCBoYXMgdG8gY3JlYXRlIGEgRHVtbXlUaHJlYWQgb24gdGhlIGZseS4KKyAgICAgICAgICAgICAgICBpZGVudCA9IF9nZXRfaWRlbnQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF9hY3RpdmVbaWRlbnRdLm5hbWUKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiPE9TIHRocmVhZCAlZD4iICUgaWRlbnQKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSAiJXM6ICVzXG4iICUgKG5hbWUsIGZvcm1hdCkKICAgICAgICAgICAgICAgICBfc3lzLnN0ZGVyci53cml0ZShmb3JtYXQpCiAKIGVsc2U6CkBAIC0zNjgsNiArMzczLDEwIEBACiAgICAgICAgIHNlbGYuX19jb25kID0gQ29uZGl0aW9uKExvY2soKSkKICAgICAgICAgc2VsZi5fX2ZsYWcgPSBGYWxzZQogCisgICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmKToKKyAgICAgICAgIyBwcml2YXRlISAgY2FsbGVkIGJ5IFRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MgYnkgX2FmdGVyX2ZvcmsoKQorICAgICAgICBzZWxmLl9fY29uZC5fX2luaXRfXygpCisKICAgICBkZWYgaXNTZXQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9fZmxhZwogCkBAIC0zOTMsNiArNDAyLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX19mbGFnOgogICAgICAgICAgICAgICAgIHNlbGYuX19jb25kLndhaXQodGltZW91dCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZmxhZwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fX2NvbmQucmVsZWFzZSgpCiAKQEAgLTQ0Myw2ICs0NTMsMTggQEAKICAgICAgICAgIyBzeXMuZXhjX2luZm8gc2luY2UgaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiBpbnN0YW5jZXMKICAgICAgICAgc2VsZi5fX3N0ZGVyciA9IF9zeXMuc3RkZXJyCiAKKyAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgICAgICAjIHByaXZhdGUhICBDYWxsZWQgYnkgX2FmdGVyX2ZvcmsoKSB0byByZXNldCBvdXIgaW50ZXJuYWwgbG9ja3MgYXMKKyAgICAgICAgIyB0aGV5IG1heSBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGxlYWRpbmcgdG8gYSBkZWFkbG9jayBvciBjcmFzaC4KKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX1RocmVhZF9fYmxvY2snKTogICMgRHVtbXlUaHJlYWQgZGVsZXRlcyBzZWxmLl9fYmxvY2sKKyAgICAgICAgICAgIHNlbGYuX19ibG9jay5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX19zdGFydGVkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX2Jsb2NrKHNlbGYpOgorICAgICAgICAjIHVzZWQgYnkgYSB1bml0dGVzdAorICAgICAgICByZXR1cm4gc2VsZi5fX2Jsb2NrCisKICAgICBkZWYgX3NldF9kYWVtb24oc2VsZik6CiAgICAgICAgICMgT3ZlcnJpZGRlbiBpbiBfTWFpblRocmVhZCBhbmQgX0R1bW15VGhyZWFkCiAgICAgICAgIHJldHVybiBjdXJyZW50X3RocmVhZCgpLmRhZW1vbgpAQCAtNDY0LDEyICs0ODYsMTEgQEAKICAgICAgICAgaWYgbm90IHNlbGYuX19pbml0aWFsaXplZDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIpCiAgICAgICAgIGlmIHNlbGYuX19zdGFydGVkLmlzX3NldCgpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aHJlYWQgYWxyZWFkeSBzdGFydGVkIikKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidGhyZWFkcyBjYW4gb25seSBiZSBzdGFydGVkIG9uY2UiKQogICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgICBzZWxmLl9ub3RlKCIlcy5zdGFydCgpOiBzdGFydGluZyB0aHJlYWQiLCBzZWxmKQotICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIF9saW1ib1tzZWxmXSA9IHNlbGYKLSAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLnJlbGVhc2UoKQorICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgICAgIF9saW1ib1tzZWxmXSA9IHNlbGYKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX3N0YXJ0X25ld190aHJlYWQoc2VsZi5fX2Jvb3RzdHJhcCwgKCkpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CkBAIC01MTQsMTAgKzUzNSw5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCiAgICAgICAgICAgICBzZWxmLl9fc3RhcnRlZC5zZXQoKQotICAgICAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9faWRlbnRdID0gc2VsZgotICAgICAgICAgICAgZGVsIF9saW1ib1tzZWxmXQotICAgICAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CisgICAgICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9faWRlbnRdID0gc2VsZgorICAgICAgICAgICAgICAgIGRlbCBfbGltYm9bc2VsZl0KICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgICAgICBzZWxmLl9ub3RlKCIlcy5fX2Jvb3RzdHJhcCgpOiB0aHJlYWQgc3RhcnRlZCIsIHNlbGYpCiAKQEAgLTc0NSw5ICs3NjUsOCBAQAogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIpCiAgICAgICAgIHNlbGYuX1RocmVhZF9fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQotICAgICAgICBfYWN0aXZlX2xpbWJvX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIF9hY3RpdmVbX2dldF9pZGVudCgpXSA9IHNlbGYKLSAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLnJlbGVhc2UoKQorICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgICAgIF9hY3RpdmVbX2dldF9pZGVudCgpXSA9IHNlbGYKIAogICAgIGRlZiBfc2V0X2RhZW1vbihzZWxmKToKICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC03OTIsOSArODExLDggQEAKIAogICAgICAgICBzZWxmLl9UaHJlYWRfX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgc2VsZi5fc2V0X2lkZW50KCkKLSAgICAgICAgX2FjdGl2ZV9saW1ib19sb2NrLmFjcXVpcmUoKQotICAgICAgICBfYWN0aXZlW19nZXRfaWRlbnQoKV0gPSBzZWxmCi0gICAgICAgIF9hY3RpdmVfbGltYm9fbG9jay5yZWxlYXNlKCkKKyAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CisgICAgICAgICAgICBfYWN0aXZlW19nZXRfaWRlbnQoKV0gPSBzZWxmCiAKICAgICBkZWYgX3NldF9kYWVtb24oc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCkBAIC04MTUsMTAgKzgzMyw4IEBACiBjdXJyZW50X3RocmVhZCA9IGN1cnJlbnRUaHJlYWQKIAogZGVmIGFjdGl2ZUNvdW50KCk6Ci0gICAgX2FjdGl2ZV9saW1ib19sb2NrLmFjcXVpcmUoKQotICAgIGNvdW50ID0gbGVuKF9hY3RpdmUpICsgbGVuKF9saW1ibykKLSAgICBfYWN0aXZlX2xpbWJvX2xvY2sucmVsZWFzZSgpCi0gICAgcmV0dXJuIGNvdW50CisgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CisgICAgICAgIHJldHVybiBsZW4oX2FjdGl2ZSkgKyBsZW4oX2xpbWJvKQogCiBhY3RpdmVfY291bnQgPSBhY3RpdmVDb3VudAogCkBAIC04MjcsMTAgKzg0Myw4IEBACiAgICAgcmV0dXJuIF9hY3RpdmUudmFsdWVzKCkgKyBfbGltYm8udmFsdWVzKCkKIAogZGVmIGVudW1lcmF0ZSgpOgotICAgIF9hY3RpdmVfbGltYm9fbG9jay5hY3F1aXJlKCkKLSAgICBhY3RpdmUgPSBfYWN0aXZlLnZhbHVlcygpICsgX2xpbWJvLnZhbHVlcygpCi0gICAgX2FjdGl2ZV9saW1ib19sb2NrLnJlbGVhc2UoKQotICAgIHJldHVybiBhY3RpdmUKKyAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKKyAgICAgICAgcmV0dXJuIF9hY3RpdmUudmFsdWVzKCkgKyBfbGltYm8udmFsdWVzKCkKIAogZnJvbSB0aHJlYWQgaW1wb3J0IHN0YWNrX3NpemUKIApAQCAtODY5LDYgKzg4MywxMCBAQAogICAgICAgICAgICAgICAgICMgaXRzIG5ldyB2YWx1ZSBzaW5jZSBpdCBjYW4gaGF2ZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgIGlkZW50ID0gX2dldF9pZGVudCgpCiAgICAgICAgICAgICAgICAgdGhyZWFkLl9UaHJlYWRfX2lkZW50ID0gaWRlbnQKKyAgICAgICAgICAgICAgICAjIEFueSBjb25kaXRpb24gdmFyaWFibGVzIGhhbmdpbmcgb2ZmIG9mIHRoZSBhY3RpdmUgdGhyZWFkIG1heQorICAgICAgICAgICAgICAgICMgYmUgaW4gYW4gaW52YWxpZCBzdGF0ZSwgc28gd2UgcmVpbml0aWFsaXplIHRoZW0uCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cih0aHJlYWQsICdfcmVzZXRfaW50ZXJuYWxfbG9ja3MnKToKKyAgICAgICAgICAgICAgICAgICAgdGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCiAgICAgICAgICAgICAgICAgbmV3X2FjdGl2ZVtpZGVudF0gPSB0aHJlYWQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBbGwgdGhlIG90aGVycyBhcmUgYWxyZWFkeSBzdG9wcGVkLgpkaWZmIC0tZ2l0IGEvTGliL3RpbWVpdC5weSBiL0xpYi90aW1laXQucHkKaW5kZXggMDlmMzdjNC4uYTA5NTMxMyAxMDA2NDQKLS0tIGEvTGliL3RpbWVpdC5weQorKysgYi9MaWIvdGltZWl0LnB5CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0dXAsIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgICAgIHNldHVwID0gcmVpbmRlbnQoc2V0dXAsIDQpCiAgICAgICAgICAgICAgICAgc3JjID0gdGVtcGxhdGUgJSB7J3N0bXQnOiBzdG10LCAnc2V0dXAnOiBzZXR1cH0KLSAgICAgICAgICAgIGVsaWYgY2FsbGFibGUoc2V0dXApOgorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHNldHVwLCAnX19jYWxsX18nKToKICAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZSAlIHsnc3RtdCc6IHN0bXQsICdzZXR1cCc6ICdfc2V0dXAoKSd9CiAgICAgICAgICAgICAgICAgbnNbJ19zZXR1cCddID0gc2V0dXAKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoc3JjLCBkdW1teV9zcmNfbmFtZSwgImV4ZWMiKQogICAgICAgICAgICAgZXhlYyBjb2RlIGluIGdsb2JhbHMoKSwgbnMKICAgICAgICAgICAgIHNlbGYuaW5uZXIgPSBuc1siaW5uZXIiXQotICAgICAgICBlbGlmIGNhbGxhYmxlKHN0bXQpOgorICAgICAgICBlbGlmIGhhc2F0dHIoc3RtdCwgJ19fY2FsbF9fJyk6CiAgICAgICAgICAgICBzZWxmLnNyYyA9IE5vbmUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0dXAsIGJhc2VzdHJpbmcpOgogICAgICAgICAgICAgICAgIF9zZXR1cCA9IHNldHVwCiAgICAgICAgICAgICAgICAgZGVmIHNldHVwKCk6CiAgICAgICAgICAgICAgICAgICAgIGV4ZWMgX3NldHVwIGluIGdsb2JhbHMoKSwgbnMKLSAgICAgICAgICAgIGVsaWYgbm90IGNhbGxhYmxlKHNldHVwKToKKyAgICAgICAgICAgIGVsaWYgbm90IGhhc2F0dHIoc2V0dXAsICdfX2NhbGxfXycpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNldHVwIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGNhbGxhYmxlIikKICAgICAgICAgICAgIHNlbGYuaW5uZXIgPSBfdGVtcGxhdGVfZnVuYyhzZXR1cCwgc3RtdCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90b2tlbml6ZS5weSBiL0xpYi90b2tlbml6ZS5weQppbmRleCBmZjU3YjEyLi5hZTNkZTU0IDEwMDY0NAotLS0gYS9MaWIvdG9rZW5pemUucHkKKysrIGIvTGliL3Rva2VuaXplLnB5CkBAIC0yMywxNSArMjMsMTUgQEAKIGVhY2ggdGltZSBhIG5ldyB0b2tlbiBpcyBmb3VuZC4iIiIKIAogX19hdXRob3JfXyA9ICdLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPicKLV9fY3JlZGl0c19fID0gXAotICAgICdHdlIsIEVTUiwgVGltIFBldGVycywgVGhvbWFzIFdvdXRlcnMsIEZyZWQgRHJha2UsIFNraXAgTW9udGFuYXJvLCBSYXltb25kIEhldHRpbmdlcicKK19fY3JlZGl0c19fID0gKCdHdlIsIEVTUiwgVGltIFBldGVycywgVGhvbWFzIFdvdXRlcnMsIEZyZWQgRHJha2UsICcKKyAgICAgICAgICAgICAgICdTa2lwIE1vbnRhbmFybywgUmF5bW9uZCBIZXR0aW5nZXInKQogCiBpbXBvcnQgc3RyaW5nLCByZQogZnJvbSB0b2tlbiBpbXBvcnQgKgogCiBpbXBvcnQgdG9rZW4KLV9fYWxsX18gPSBbeCBmb3IgeCBpbiBkaXIodG9rZW4pIGlmIHhbMF0gIT0gJ18nXSArIFsiQ09NTUVOVCIsICJ0b2tlbml6ZSIsCi0gICAgICAgICAgICJnZW5lcmF0ZV90b2tlbnMiLCAiTkwiLCAidW50b2tlbml6ZSJdCitfX2FsbF9fID0gW3ggZm9yIHggaW4gZGlyKHRva2VuKSBpZiBub3QgeC5zdGFydHN3aXRoKCJfIildCitfX2FsbF9fICs9IFsiQ09NTUVOVCIsICJ0b2tlbml6ZSIsICJnZW5lcmF0ZV90b2tlbnMiLCAiTkwiLCAidW50b2tlbml6ZSJdCiBkZWwgeAogZGVsIHRva2VuCiAKQEAgLTI4OCw3ICsyODgsNyBAQAogICAgICAgICAgICAgbGluZSA9IHJlYWRsaW5lKCkKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICBsaW5lID0gJycKLSAgICAgICAgbG51bSA9IGxudW0gKyAxCisgICAgICAgIGxudW0gKz0gMQogICAgICAgICBwb3MsIG1heCA9IDAsIGxlbihsaW5lKQogCiAgICAgICAgIGlmIGNvbnRzdHI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVkIHN0cmluZwpAQCAtMzE2LDEyICszMTYsMTcgQEAKICAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawogICAgICAgICAgICAgY29sdW1uID0gMAogICAgICAgICAgICAgd2hpbGUgcG9zIDwgbWF4OiAgICAgICAgICAgICAgICAgICAjIG1lYXN1cmUgbGVhZGluZyB3aGl0ZXNwYWNlCi0gICAgICAgICAgICAgICAgaWYgbGluZVtwb3NdID09ICcgJzogY29sdW1uID0gY29sdW1uICsgMQotICAgICAgICAgICAgICAgIGVsaWYgbGluZVtwb3NdID09ICdcdCc6IGNvbHVtbiA9IChjb2x1bW4vdGFic2l6ZSArIDEpKnRhYnNpemUKLSAgICAgICAgICAgICAgICBlbGlmIGxpbmVbcG9zXSA9PSAnXGYnOiBjb2x1bW4gPSAwCi0gICAgICAgICAgICAgICAgZWxzZTogYnJlYWsKLSAgICAgICAgICAgICAgICBwb3MgPSBwb3MgKyAxCi0gICAgICAgICAgICBpZiBwb3MgPT0gbWF4OiBicmVhaworICAgICAgICAgICAgICAgIGlmIGxpbmVbcG9zXSA9PSAnICc6CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbiArPSAxCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lW3Bvc10gPT0gJ1x0JzoKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gKGNvbHVtbi8vdGFic2l6ZSArIDEpKnRhYnNpemUKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmVbcG9zXSA9PSAnXGYnOgorICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICAgICAgaWYgcG9zID09IG1heDoKKyAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiBsaW5lW3Bvc10gaW4gJyNcclxuJzogICAgICAgICAgICMgc2tpcCBjb21tZW50cyBvciBibGFuayBsaW5lcwogICAgICAgICAgICAgICAgIGlmIGxpbmVbcG9zXSA9PSAnIyc6CkBAIC0zOTcsMTMgKzQwMiwxNSBAQAogICAgICAgICAgICAgICAgIGVsaWYgaW5pdGlhbCA9PSAnXFwnOiAgICAgICAgICAgICAgICAgICAgICAjIGNvbnRpbnVlZCBzdG10CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlZCA9IDEKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBpbml0aWFsIGluICcoW3snOiBwYXJlbmxldiA9IHBhcmVubGV2ICsgMQotICAgICAgICAgICAgICAgICAgICBlbGlmIGluaXRpYWwgaW4gJyldfSc6IHBhcmVubGV2ID0gcGFyZW5sZXYgLSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGluaXRpYWwgaW4gJyhbeyc6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbmxldiArPSAxCisgICAgICAgICAgICAgICAgICAgIGVsaWYgaW5pdGlhbCBpbiAnKV19JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVubGV2IC09IDEKICAgICAgICAgICAgICAgICAgICAgeWllbGQgKE9QLCB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgKEVSUk9SVE9LRU4sIGxpbmVbcG9zXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsbnVtLCBwb3MpLCAobG51bSwgcG9zKzEpLCBsaW5lKQotICAgICAgICAgICAgICAgIHBvcyA9IHBvcyArIDEKKyAgICAgICAgICAgICAgICBwb3MgKz0gMQogCiAgICAgZm9yIGluZGVudCBpbiBpbmRlbnRzWzE6XTogICAgICAgICAgICAgICAgICMgcG9wIHJlbWFpbmluZyBpbmRlbnQgbGV2ZWxzCiAgICAgICAgIHlpZWxkIChERURFTlQsICcnLCAobG51bSwgMCksIChsbnVtLCAwKSwgJycpCkBAIC00MTEsNSArNDE4LDcgQEAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogICAgICAgICAgICAgICAgICAgICAjIHRlc3RpbmcKICAgICBpbXBvcnQgc3lzCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6IHRva2VuaXplKG9wZW4oc3lzLmFyZ3ZbMV0pLnJlYWRsaW5lKQotICAgIGVsc2U6IHRva2VuaXplKHN5cy5zdGRpbi5yZWFkbGluZSkKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICAgICAgdG9rZW5pemUob3BlbihzeXMuYXJndlsxXSkucmVhZGxpbmUpCisgICAgZWxzZToKKyAgICAgICAgdG9rZW5pemUoc3lzLnN0ZGluLnJlYWRsaW5lKQpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlLnB5IGIvTGliL3RyYWNlLnB5CmluZGV4IDM2MTFmODguLjk3NDkxZGIgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZS5weQorKysgYi9MaWIvdHJhY2UucHkKQEAgLTUyLDE5ICs1MiwzNCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdG9rZW4KIGltcG9ydCB0b2tlbml6ZQotaW1wb3J0IHR5cGVzCitpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGdjCi0KK2ltcG9ydCBkaXMKIHRyeToKICAgICBpbXBvcnQgY1BpY2tsZQogICAgIHBpY2tsZSA9IGNQaWNrbGUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQgcGlja2xlCiAKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3NldHRyYWNlID0gc3lzLnNldHRyYWNlCisKKyAgICBkZWYgX3Vuc2V0dHJhY2UoKToKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCitlbHNlOgorICAgIGRlZiBfc2V0dHJhY2UoZnVuYyk6CisgICAgICAgIHRocmVhZGluZy5zZXR0cmFjZShmdW5jKQorICAgICAgICBzeXMuc2V0dHJhY2UoZnVuYykKKworICAgIGRlZiBfdW5zZXR0cmFjZSgpOgorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKE5vbmUpCisKIGRlZiB1c2FnZShvdXRmaWxlKToKICAgICBvdXRmaWxlLndyaXRlKCIiIlVzYWdlOiAlcyBbT1BUSU9OU10gPGZpbGU+IFtBUkdTXQogCkBAIC0xMjQsNyArMTM5LDcgQEAKICAgICAgICAgc2VsZi5faWdub3JlID0geyAnPHN0cmluZz4nOiAxIH0KIAogICAgIGRlZiBuYW1lcyhzZWxmLCBmaWxlbmFtZSwgbW9kdWxlbmFtZSk6Ci0gICAgICAgIGlmIHNlbGYuX2lnbm9yZS5oYXNfa2V5KG1vZHVsZW5hbWUpOgorICAgICAgICBpZiBtb2R1bGVuYW1lIGluIHNlbGYuX2lnbm9yZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pZ25vcmVbbW9kdWxlbmFtZV0KIAogICAgICAgICAjIGhhdmVuJ3Qgc2VlbiB0aGlzIG9uZSBiZWZvcmUsIHNvIHNlZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMKQEAgLTM3OSwxMyArMzk0LDcgQEAKICAgICAiIiJSZXR1cm4gZGljdCB3aGVyZSBrZXlzIGFyZSBsaW5lcyBpbiB0aGUgbGluZSBudW1iZXIgdGFibGUuIiIiCiAgICAgbGluZW5vcyA9IHt9CiAKLSAgICBsaW5lX2luY3JlbWVudHMgPSBbb3JkKGMpIGZvciBjIGluIGNvZGUuY29fbG5vdGFiWzE6OjJdXQotICAgIHRhYmxlX2xlbmd0aCA9IGxlbihsaW5lX2luY3JlbWVudHMpCi0gICAgZG9jc3RyaW5nID0gRmFsc2UKLQotICAgIGxpbmVubyA9IGNvZGUuY29fZmlyc3RsaW5lbm8KLSAgICBmb3IgbGkgaW4gbGluZV9pbmNyZW1lbnRzOgotICAgICAgICBsaW5lbm8gKz0gbGkKKyAgICBmb3IgXywgbGluZW5vIGluIGRpcy5maW5kbGluZXN0YXJ0cyhjb2RlKToKICAgICAgICAgaWYgbGluZW5vIG5vdCBpbiBzdHJzOgogICAgICAgICAgICAgbGluZW5vc1tsaW5lbm9dID0gMQogCkBAIC0zOTgsNyArNDA3LDcgQEAKIAogICAgICMgYW5kIGNoZWNrIHRoZSBjb25zdGFudHMgZm9yIHJlZmVyZW5jZXMgdG8gb3RoZXIgY29kZSBvYmplY3RzCiAgICAgZm9yIGMgaW4gY29kZS5jb19jb25zdHM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoYywgdHlwZXMuQ29kZVR5cGUpOgorICAgICAgICBpZiBpbnNwZWN0LmlzY29kZShjKToKICAgICAgICAgICAgICMgZmluZCBhbm90aGVyIGNvZGUgb2JqZWN0LCBzbyByZWN1cnNlIGludG8gaXQKICAgICAgICAgICAgIGxpbmVub3MudXBkYXRlKGZpbmRfbGluZXMoYywgc3RycykpCiAgICAgcmV0dXJuIGxpbmVub3MKQEAgLTQ5NCw4ICs1MDMsOCBAQAogICAgICAgICBpbXBvcnQgX19tYWluX18KICAgICAgICAgZGljdCA9IF9fbWFpbl9fLl9fZGljdF9fCiAgICAgICAgIGlmIG5vdCBzZWxmLmRvbm90aGluZzoKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLmdsb2JhbHRyYWNlKQogICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKHNlbGYuZ2xvYmFsdHJhY2UpCisgICAgICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi5nbG9iYWx0cmFjZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhlYyBjbWQgaW4gZGljdCwgZGljdAogICAgICAgICBmaW5hbGx5OgpAQCAtNTA3LDE0ICs1MTYsMTIgQEAKICAgICAgICAgaWYgZ2xvYmFscyBpcyBOb25lOiBnbG9iYWxzID0ge30KICAgICAgICAgaWYgbG9jYWxzIGlzIE5vbmU6IGxvY2FscyA9IHt9CiAgICAgICAgIGlmIG5vdCBzZWxmLmRvbm90aGluZzoKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLmdsb2JhbHRyYWNlKQotICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKHNlbGYuZ2xvYmFsdHJhY2UpCisgICAgICAgICAgICBfc2V0dHJhY2Uoc2VsZi5nbG9iYWx0cmFjZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhlYyBjbWQgaW4gZ2xvYmFscywgbG9jYWxzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kb25vdGhpbmc6Ci0gICAgICAgICAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCi0gICAgICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKE5vbmUpCisgICAgICAgICAgICAgICAgX3Vuc2V0dHJhY2UoKQogCiAgICAgZGVmIHJ1bmZ1bmMoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3cpOgogICAgICAgICByZXN1bHQgPSBOb25lCkBAIC01NDUsNyArNTUyLDcgQEAKICAgICAgICAgICAgICMjIHVzZSBvZiBnYy5nZXRfcmVmZXJyZXJzKCkgd2FzIHN1Z2dlc3RlZCBieSBNaWNoYWVsIEh1ZHNvbgogICAgICAgICAgICAgIyBhbGwgZnVuY3Rpb25zIHdoaWNoIHJlZmVyIHRvIHRoaXMgY29kZSBvYmplY3QKICAgICAgICAgICAgIGZ1bmNzID0gW2YgZm9yIGYgaW4gZ2MuZ2V0X3JlZmVycmVycyhjb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgImZ1bmNfZG9jIildCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKGYpXQogICAgICAgICAgICAgIyByZXF1aXJlIGxlbihmdW5jKSA9PSAxIHRvIGF2b2lkIGFtYmlndWl0eSBjYXVzZWQgYnkgY2FsbHMgdG8KICAgICAgICAgICAgICMgbmV3LmZ1bmN0aW9uKCk6ICJJbiB0aGUgZmFjZSBvZiBhbWJpZ3VpdHksIHJlZnVzZSB0aGUKICAgICAgICAgICAgICMgdGVtcHRhdGlvbiB0byBndWVzcy4iCkBAIC01NTcsMTcgKzU2NCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGMsICJfX2Jhc2VzX18iKV0KICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGNsYXNzZXMpID09IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpdHRvIGZvciBuZXcuY2xhc3NvYmooKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzbmFtZSA9IHN0cihjbGFzc2VzWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgY2xzbmFtZSA9IGNsYXNzZXNbMF0uX19uYW1lX18KICAgICAgICAgICAgICAgICAgICAgICAgICMgY2FjaGUgdGhlIHJlc3VsdCAtIGFzc3VtcHRpb24gaXMgdGhhdCBuZXcuKiBpcwogICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgY2FsbGVkIGxhdGVyIHRvIGRpc3R1cmIgdGhpcyByZWxhdGlvbnNoaXAKICAgICAgICAgICAgICAgICAgICAgICAgICMgX2NhbGxlcl9jYWNoZSBjb3VsZCBiZSBmbHVzaGVkIGlmIGZ1bmN0aW9ucyBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbmV3IG1vZHVsZSBnZXQgY2FsbGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGVyX2NhY2hlW2NvZGVdID0gY2xzbmFtZQogICAgICAgICBpZiBjbHNuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBmaW5hbCBoYWNrIC0gbW9kdWxlIG5hbWUgc2hvd3MgdXAgaW4gc3RyKGNscyksIGJ1dCB3ZSd2ZSBhbHJlYWR5Ci0gICAgICAgICAgICAjIGNvbXB1dGVkIG1vZHVsZSBuYW1lLCBzbyByZW1vdmUgaXQKLSAgICAgICAgICAgIGNsc25hbWUgPSBjbHNuYW1lLnNwbGl0KCIuIilbMTpdCi0gICAgICAgICAgICBjbHNuYW1lID0gIi4iLmpvaW4oY2xzbmFtZSkKICAgICAgICAgICAgIGZ1bmNuYW1lID0gIiVzLiVzIiAlIChjbHNuYW1lLCBmdW5jbmFtZSkKIAogICAgICAgICByZXR1cm4gZmlsZW5hbWUsIG1vZHVsZW5hbWUsIGZ1bmNuYW1lCmRpZmYgLS1naXQgYS9MaWIvdHJhY2ViYWNrLnB5IGIvTGliL3RyYWNlYmFjay5weQppbmRleCAyYTc3ZDJjLi44Y2I5ZTI4IDEwMDY0NAotLS0gYS9MaWIvdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90cmFjZWJhY2sucHkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQogICAgICAgICBuYW1lID0gY28uY29fbmFtZQogICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKSkKKyAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQogICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQogICAgICAgICBpZiBsaW5lOiBfcHJpbnQoZmlsZSwgJyAgICAnICsgbGluZS5zdHJpcCgpKQpAQCAtMTI0LDkgKzEyNCw4IEBACiAgICAgICAgIF9wcmludChmaWxlLCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicpCiAgICAgICAgIHByaW50X3RiKHRiLCBsaW1pdCwgZmlsZSkKICAgICBsaW5lcyA9IGZvcm1hdF9leGNlcHRpb25fb25seShldHlwZSwgdmFsdWUpCi0gICAgZm9yIGxpbmUgaW4gbGluZXNbOi0xXToKLSAgICAgICAgX3ByaW50KGZpbGUsIGxpbmUsICcgJykKLSAgICBfcHJpbnQoZmlsZSwgbGluZXNbLTFdLCAnJykKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgX3ByaW50KGZpbGUsIGxpbmUsICcnKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCA9IE5vbmUpOgogICAgICIiIkZvcm1hdCBhIHN0YWNrIHRyYWNlIGFuZCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgpAQCAtMTk1LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgY2FyZXRzcGFjZSA9ICgoYy5pc3NwYWNlKCkgYW5kIGMgb3IgJyAnKSBmb3IgYyBpbiBjYXJldHNwYWNlKQogICAgICAgICAgICAgICAgICMgb25seSB0aHJlZSBzcGFjZXMgdG8gYWNjb3VudCBmb3Igb2Zmc2V0MSA9PSBwb3MgMAogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgJXNeXG4nICUgJycuam9pbihjYXJldHNwYWNlKSkKLSAgICAgICAgICAgIHZhbHVlID0gbXNnCisgICAgICAgIHZhbHVlID0gbXNnCiAKICAgICBsaW5lcy5hcHBlbmQoX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpKQogICAgIHJldHVybiBsaW5lcwpAQCAtMjQ3LDYgKzI0Niw4IEBACiBkZWYgcHJpbnRfbGFzdChsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICIiIlRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICdwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwKICAgICBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLCBsaW1pdCwgZmlsZSknLiIiIgorICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgImxhc3RfdHlwZSIpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBsYXN0IGV4Y2VwdGlvbiIpCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHByaW50X2V4Y2VwdGlvbihzeXMubGFzdF90eXBlLCBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLApkaWZmIC0tZ2l0IGEvTGliL3R5cGVzLnB5IGIvTGliL3R5cGVzLnB5CmluZGV4IGVhMzE2ZmEuLmZmOTBlMDQgMTAwNjQ0Ci0tLSBhL0xpYi90eXBlcy5weQorKysgYi9MaWIvdHlwZXMucHkKQEAgLTQyLDExICs0Miw3IEBACiBkZWYgX2YoKTogcGFzcwogRnVuY3Rpb25UeXBlID0gdHlwZShfZikKIExhbWJkYVR5cGUgPSB0eXBlKGxhbWJkYTogTm9uZSkgICAgICAgICAjIFNhbWUgYXMgRnVuY3Rpb25UeXBlCi10cnk6Ci0gICAgQ29kZVR5cGUgPSB0eXBlKF9mLmZ1bmNfY29kZSkKLWV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgIyBFeGVjdXRpb24gaW4gcmVzdHJpY3RlZCBlbnZpcm9ubWVudAotICAgIHBhc3MKK0NvZGVUeXBlID0gdHlwZShfZi5mdW5jX2NvZGUpCiAKIGRlZiBfZygpOgogICAgIHlpZWxkIDEKQEAgLTcwLDE1ICs2NiwxMCBAQAogdHJ5OgogICAgIHJhaXNlIFR5cGVFcnJvcgogZXhjZXB0IFR5cGVFcnJvcjoKLSAgICB0cnk6Ci0gICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KLSAgICAgICAgVHJhY2ViYWNrVHlwZSA9IHR5cGUodGIpCi0gICAgICAgIEZyYW1lVHlwZSA9IHR5cGUodGIudGJfZnJhbWUpCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAjIEluIHRoZSByZXN0cmljdGVkIGVudmlyb25tZW50LCBleGNfaW5mbyByZXR1cm5zIChOb25lLCBOb25lLAotICAgICAgICAjIE5vbmUpIFRoZW4sIHRiLnRiX2ZyYW1lIGdpdmVzIGFuIGF0dHJpYnV0ZSBlcnJvcgotICAgICAgICBwYXNzCi0gICAgdGIgPSBOb25lOyBkZWwgdGIKKyAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCisgICAgVHJhY2ViYWNrVHlwZSA9IHR5cGUodGIpCisgICAgRnJhbWVUeXBlID0gdHlwZSh0Yi50Yl9mcmFtZSkKKyAgICBkZWwgdGIKIAogU2xpY2VUeXBlID0gc2xpY2UKIEVsbGlwc2lzVHlwZSA9IHR5cGUoRWxsaXBzaXMpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QucHkgYi9MaWIvdW5pdHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZjE1ZDYuLjAwMDAwMDAKLS0tIGEvTGliL3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsODc1ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotJycnCi1QeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yaywgYmFzZWQgb24gRXJpY2ggR2FtbWEncyBKVW5pdCBhbmQgS2VudCBCZWNrJ3MKLVNtYWxsdGFsayB0ZXN0aW5nIGZyYW1ld29yay4KLQotVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGNvcmUgZnJhbWV3b3JrIGNsYXNzZXMgdGhhdCBmb3JtIHRoZSBiYXNpcyBvZgotc3BlY2lmaWMgdGVzdCBjYXNlcyBhbmQgc3VpdGVzIChUZXN0Q2FzZSwgVGVzdFN1aXRlIGV0Yy4pLCBhbmQgYWxzbyBhCi10ZXh0LWJhc2VkIHV0aWxpdHkgY2xhc3MgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzIGFuZCByZXBvcnRpbmcgdGhlIHJlc3VsdHMKLSAoVGV4dFRlc3RSdW5uZXIpLgotCi1TaW1wbGUgdXNhZ2U6Ci0KLSAgICBpbXBvcnQgdW5pdHRlc3QKLQotICAgIGNsYXNzIEludGVnZXJBcml0aG1lbnRpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3RBZGQoc2VsZik6ICAjIyB0ZXN0IG1ldGhvZCBuYW1lcyBiZWdpbiAndGVzdConCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMSArIDIpLCAzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMCArIDEsIDEpCi0gICAgICAgIGRlZiB0ZXN0TXVsdGlwbHkoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscygoMCAqIDEwKSwgMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg1ICogOCksIDQwKQotCi0gICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICAgdW5pdHRlc3QubWFpbigpCi0KLUZ1cnRoZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBidW5kbGVkIGRvY3VtZW50YXRpb24sIGFuZCBmcm9tCi0KLSAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKLQotQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMgU3RldmUgUHVyY2VsbAotVGhpcyBtb2R1bGUgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFB5dGhvbiBpdHNlbGYsIHNvIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbWVzc2FnZQotYW5kIGRpc2NsYWltZXIgYXJlIHJldGFpbmVkIGluIHRoZWlyIG9yaWdpbmFsIGZvcm0uCi0KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwKLVNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GCi1USElTIENPREUsIEVWRU4gSUYgVEhFIEFVVEhPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi1EQU1BR0UuCi0KLVRIRSBBVVRIT1IgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIENPREUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsCi1BTkQgVEhFUkUgSVMgTk8gT0JMSUdBVElPTiBXSEFUU09FVkVSIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsCi1TVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCi0nJycKLQotX19hdXRob3JfXyA9ICJTdGV2ZSBQdXJjZWxsIgotX19lbWFpbF9fID0gInN0ZXBoZW5fcHVyY2VsbCBhdCB5YWhvbyBkb3QgY29tIgotX192ZXJzaW9uX18gPSAiI1JldmlzaW9uOiAxLjYzICQiWzExOi0yXQotCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwotaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IG9zCi1pbXBvcnQgdHlwZXMKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV4cG9ydGVkIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1fX2FsbF9fID0gWydUZXN0UmVzdWx0JywgJ1Rlc3RDYXNlJywgJ1Rlc3RTdWl0ZScsICdUZXh0VGVzdFJ1bm5lcicsCi0gICAgICAgICAgICdUZXN0TG9hZGVyJywgJ0Z1bmN0aW9uVGVzdENhc2UnLCAnbWFpbicsICdkZWZhdWx0VGVzdExvYWRlciddCi0KLSMgRXhwb3NlIG9ic29sZXRlIGZ1bmN0aW9ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLV9fYWxsX18uZXh0ZW5kKFsnZ2V0VGVzdENhc2VOYW1lcycsICdtYWtlU3VpdGUnLCAnZmluZFRlc3RDYXNlcyddKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWlmIHN5cy52ZXJzaW9uX2luZm9bOjJdIDwgKDIsIDIpOgotICAgIGRlZiBpc2luc3RhbmNlKG9iaiwgY2xzaW5mbyk6Ci0gICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXwotICAgICAgICBpZiB0eXBlKGNsc2luZm8pIGluICh0dXBsZSwgbGlzdCk6Ci0gICAgICAgICAgICBmb3IgY2xzIGluIGNsc2luZm86Ci0gICAgICAgICAgICAgICAgaWYgY2xzIGlzIHR5cGU6IGNscyA9IHR5cGVzLkNsYXNzVHlwZQotICAgICAgICAgICAgICAgIGlmIF9fYnVpbHRpbl9fLmlzaW5zdGFuY2Uob2JqLCBjbHMpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgZWxzZTogcmV0dXJuIF9fYnVpbHRpbl9fLmlzaW5zdGFuY2Uob2JqLCBjbHNpbmZvKQotCi1kZWYgX0NtcFRvS2V5KG15Y21wKToKLSAgICAnQ29udmVydCBhIGNtcD0gZnVuY3Rpb24gaW50byBhIGtleT0gZnVuY3Rpb24nCi0gICAgY2xhc3MgSyhvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqKToKLSAgICAgICAgICAgIHNlbGYub2JqID0gb2JqCi0gICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopID09IC0xCi0gICAgcmV0dXJuIEsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgZnJhbWV3b3JrIGNvcmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIEFsbCBjbGFzc2VzIGRlZmluZWQgaGVyZWluIGFyZSAnbmV3LXN0eWxlJyBjbGFzc2VzLCBhbGxvd2luZyB1c2Ugb2YgJ3N1cGVyKCknCi1fX21ldGFjbGFzc19fID0gdHlwZQotCi1kZWYgX3N0cmNsYXNzKGNscyk6Ci0gICAgcmV0dXJuICIlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKLQotX191bml0dGVzdCA9IDEKLQotY2xhc3MgVGVzdFJlc3VsdDoKLSAgICAiIiJIb2xkZXIgZm9yIHRlc3QgcmVzdWx0IGluZm9ybWF0aW9uLgotCi0gICAgVGVzdCByZXN1bHRzIGFyZSBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgYnkgdGhlIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKLSAgICBjbGFzc2VzLCBhbmQgZG8gbm90IG5lZWQgdG8gYmUgZXhwbGljaXRseSBtYW5pcHVsYXRlZCBieSB3cml0ZXJzIG9mIHRlc3RzLgotCi0gICAgRWFjaCBpbnN0YW5jZSBob2xkcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biwgYW5kIGNvbGxlY3Rpb25zIG9mCi0gICAgZmFpbHVyZXMgYW5kIGVycm9ycyB0aGF0IG9jY3VycmVkIGFtb25nIHRob3NlIHRlc3QgcnVucy4gVGhlIGNvbGxlY3Rpb25zCi0gICAgY29udGFpbiB0dXBsZXMgb2YgKHRlc3RjYXNlLCBleGNlcHRpb25pbmZvKSwgd2hlcmUgZXhjZXB0aW9uaW5mbyBpcyB0aGUKLSAgICBmb3JtYXR0ZWQgdHJhY2ViYWNrIG9mIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCi0gICAgICAgIHNlbGYuZXJyb3JzID0gW10KLSAgICAgICAgc2VsZi50ZXN0c1J1biA9IDAKLSAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKLQotICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgICJDYWxsZWQgd2hlbiB0aGUgZ2l2ZW4gdGVzdCBpcyBhYm91dCB0byBiZSBydW4iCi0gICAgICAgIHNlbGYudGVzdHNSdW4gPSBzZWxmLnRlc3RzUnVuICsgMQotCi0gICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICAiQ2FsbGVkIHdoZW4gdGhlIGdpdmVuIHRlc3QgaGFzIGJlZW4gcnVuIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcwotICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQotCi0gICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcwotICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4iIiIKLSAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKLQotICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgotICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgd2FzU3VjY2Vzc2Z1bChzZWxmKToKLSAgICAgICAgIlRlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgcmVzdWx0IHdhcyBhIHN1Y2Nlc3MiCi0gICAgICAgIHJldHVybiBsZW4oc2VsZi5mYWlsdXJlcykgPT0gbGVuKHNlbGYuZXJyb3JzKSA9PSAwCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgIkluZGljYXRlcyB0aGF0IHRoZSB0ZXN0cyBzaG91bGQgYmUgYWJvcnRlZCIKLSAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gVHJ1ZQotCi0gICAgZGVmIF9leGNfaW5mb190b19zdHJpbmcoc2VsZiwgZXJyLCB0ZXN0KToKLSAgICAgICAgIiIiQ29udmVydHMgYSBzeXMuZXhjX2luZm8oKS1zdHlsZSB0dXBsZSBvZiB2YWx1ZXMgaW50byBhIHN0cmluZy4iIiIKLSAgICAgICAgZXhjdHlwZSwgdmFsdWUsIHRiID0gZXJyCi0gICAgICAgICMgU2tpcCB0ZXN0IHJ1bm5lciB0cmFjZWJhY2sgbGV2ZWxzCi0gICAgICAgIHdoaWxlIHRiIGFuZCBzZWxmLl9pc19yZWxldmFudF90Yl9sZXZlbCh0Yik6Ci0gICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgaWYgZXhjdHlwZSBpcyB0ZXN0LmZhaWx1cmVFeGNlcHRpb246Ci0gICAgICAgICAgICAjIFNraXAgYXNzZXJ0KigpIHRyYWNlYmFjayBsZXZlbHMKLSAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX2NvdW50X3JlbGV2YW50X3RiX2xldmVscyh0YikKLSAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y3R5cGUsIHZhbHVlLCB0YiwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oZXhjdHlwZSwgdmFsdWUsIHRiKSkKLQotICAgIGRlZiBfaXNfcmVsZXZhbnRfdGJfbGV2ZWwoc2VsZiwgdGIpOgotICAgICAgICByZXR1cm4gJ19fdW5pdHRlc3QnIGluIHRiLnRiX2ZyYW1lLmZfZ2xvYmFscwotCi0gICAgZGVmIF9jb3VudF9yZWxldmFudF90Yl9sZXZlbHMoc2VsZiwgdGIpOgotICAgICAgICBsZW5ndGggPSAwCi0gICAgICAgIHdoaWxlIHRiIGFuZCBub3Qgc2VsZi5faXNfcmVsZXZhbnRfdGJfbGV2ZWwodGIpOgotICAgICAgICAgICAgbGVuZ3RoICs9IDEKLSAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICByZXR1cm4gbGVuZ3RoCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPCVzIHJ1bj0laSBlcnJvcnM9JWkgZmFpbHVyZXM9JWk+IiAlIFwKLSAgICAgICAgICAgICAgIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLnRlc3RzUnVuLCBsZW4oc2VsZi5lcnJvcnMpLAotICAgICAgICAgICAgICAgIGxlbihzZWxmLmZhaWx1cmVzKSkKLQotY2xhc3MgVGVzdENhc2U6Ci0gICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgotCi0gICAgQnkgZGVmYXVsdCwgdGhlIHRlc3QgY29kZSBpdHNlbGYgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIG1ldGhvZCBuYW1lZAotICAgICdydW5UZXN0Jy4KLQotICAgIElmIHRoZSBmaXh0dXJlIG1heSBiZSB1c2VkIGZvciBtYW55IHRlc3QgY2FzZXMsIGNyZWF0ZSBhcwotICAgIG1hbnkgdGVzdCBtZXRob2RzIGFzIGFyZSBuZWVkZWQuIFdoZW4gaW5zdGFudGlhdGluZyBzdWNoIGEgVGVzdENhc2UKLSAgICBzdWJjbGFzcywgc3BlY2lmeSBpbiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZAotICAgIHRoYXQgdGhlIGluc3RhbmNlIGlzIHRvIGV4ZWN1dGUuCi0KLSAgICBUZXN0IGF1dGhvcnMgc2hvdWxkIHN1YmNsYXNzIFRlc3RDYXNlIGZvciB0aGVpciBvd24gdGVzdHMuIENvbnN0cnVjdGlvbgotICAgIGFuZCBkZWNvbnN0cnVjdGlvbiBvZiB0aGUgdGVzdCdzIGVudmlyb25tZW50ICgnZml4dHVyZScpIGNhbiBiZQotICAgIGltcGxlbWVudGVkIGJ5IG92ZXJyaWRpbmcgdGhlICdzZXRVcCcgYW5kICd0ZWFyRG93bicgbWV0aG9kcyByZXNwZWN0aXZlbHkuCi0KLSAgICBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgdGhlIF9faW5pdF9fIG1ldGhvZCwgdGhlIGJhc2UgY2xhc3MKLSAgICBfX2luaXRfXyBtZXRob2QgbXVzdCBhbHdheXMgYmUgY2FsbGVkLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBzdWJjbGFzc2VzCi0gICAgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGVpciBfX2luaXRfXyBtZXRob2QsIHNpbmNlIGluc3RhbmNlcwotICAgIG9mIHRoZSBjbGFzc2VzIGFyZSBpbnN0YW50aWF0ZWQgYXV0b21hdGljYWxseSBieSBwYXJ0cyBvZiB0aGUgZnJhbWV3b3JrCi0gICAgaW4gb3JkZXIgdG8gYmUgcnVuLgotICAgICIiIgotCi0gICAgIyBUaGlzIGF0dHJpYnV0ZSBkZXRlcm1pbmVzIHdoaWNoIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuCi0gICAgIyB0aGUgaW5zdGFuY2UncyBhc3NlcnRpb24gbWV0aG9kcyBmYWlsOyB0ZXN0IG1ldGhvZHMgcmFpc2luZyB0aGlzCi0gICAgIyBleGNlcHRpb24gd2lsbCBiZSBkZWVtZWQgdG8gaGF2ZSAnZmFpbGVkJyByYXRoZXIgdGhhbiAnZXJyb3JlZCcKLQotICAgIGZhaWx1cmVFeGNlcHRpb24gPSBBc3NlcnRpb25FcnJvcgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKLSAgICAgICAgIiIiQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgdXNlIHRoZSBuYW1lZCB0ZXN0Ci0gICAgICAgICAgIG1ldGhvZCB3aGVuIGV4ZWN1dGVkLiBSYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBpbnN0YW5jZSBkb2VzCi0gICAgICAgICAgIG5vdCBoYXZlIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgotICAgICAgICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lCi0gICAgICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtZXRob2ROYW1lKQotICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAibm8gc3VjaCB0ZXN0IG1ldGhvZCBpbiAlczogJXMiICUgXAotICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLCBtZXRob2ROYW1lKQotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAiSG9vayBtZXRob2QgZm9yIHNldHRpbmcgdXAgdGhlIHRlc3QgZml4dHVyZSBiZWZvcmUgZXhlcmNpc2luZyBpdC4iCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBkZWNvbnN0cnVjdGluZyB0aGUgdGVzdCBmaXh0dXJlIGFmdGVyIHRlc3RpbmcgaXQuIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUZXN0UmVzdWx0KCkKLQotICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8KLSAgICAgICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQuCi0KLSAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgbGluZSBvZgotICAgICAgICB0aGUgc3BlY2lmaWVkIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLgotICAgICAgICAiIiIKLSAgICAgICAgZG9jID0gc2VsZi5fdGVzdE1ldGhvZERvYwotICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMuJXMiICUgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IG90aGVyLl90ZXN0TWV0aG9kTmFtZQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5fdGVzdE1ldGhvZE5hbWUsIF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXykpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKLSAgICAgICAgICAgICAgIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKLQotICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgotICAgICAgICBpZiByZXN1bHQgaXMgTm9uZTogcmVzdWx0ID0gc2VsZi5kZWZhdWx0VGVzdFJlc3VsdCgpCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKLSAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzZWxmLl9leGNfaW5mbygpKQotICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICBvayA9IEZhbHNlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGVzdE1ldGhvZCgpCi0gICAgICAgICAgICAgICAgb2sgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHNlbGYuX2V4Y19pbmZvKCkpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgc2VsZi5fZXhjX2luZm8oKSkKLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYudGVhckRvd24oKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHNlbGYuX2V4Y19pbmZvKCkpCi0gICAgICAgICAgICAgICAgb2sgPSBGYWxzZQotICAgICAgICAgICAgaWYgb2s6IHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBkZWYgZGVidWcoc2VsZik6Ci0gICAgICAgICIiIlJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgZXJyb3JzIGluIGEgVGVzdFJlc3VsdCIiIgotICAgICAgICBzZWxmLnNldFVwKCkKLSAgICAgICAgZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkoKQotICAgICAgICBzZWxmLnRlYXJEb3duKCkKLQotICAgIGRlZiBfZXhjX2luZm8oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIHZlcnNpb24gb2Ygc3lzLmV4Y19pbmZvKCkgd2l0aCB0aGUgdHJhY2ViYWNrIGZyYW1lCi0gICAgICAgICAgIG1pbmltaXNlZDsgdXN1YWxseSB0aGUgdG9wIGxldmVsIG9mIHRoZSB0cmFjZWJhY2sgZnJhbWUgaXMgbm90Ci0gICAgICAgICAgIG5lZWRlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKQotCi0gICAgZGVmIGZhaWwoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLiIiIgotICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIG1zZwotCi0gICAgZGVmIGZhaWxJZihzZWxmLCBleHByLCBtc2c9Tm9uZSk6Ci0gICAgICAgICJGYWlsIHRoZSB0ZXN0IGlmIHRoZSBleHByZXNzaW9uIGlzIHRydWUuIgotICAgICAgICBpZiBleHByOiByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIG1zZwotCi0gICAgZGVmIGZhaWxVbmxlc3Moc2VsZiwgZXhwciwgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIHRoZSB0ZXN0IHVubGVzcyB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLiIiIgotICAgICAgICBpZiBub3QgZXhwcjogcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBtc2cKLQotICAgIGRlZiBmYWlsVW5sZXNzUmFpc2VzKHNlbGYsIGV4Y0NsYXNzLCBjYWxsYWJsZU9iaiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIiIiRmFpbCB1bmxlc3MgYW4gZXhjZXB0aW9uIG9mIGNsYXNzIGV4Y0NsYXNzIGlzIHRocm93bgotICAgICAgICAgICBieSBjYWxsYWJsZU9iaiB3aGVuIGludm9rZWQgd2l0aCBhcmd1bWVudHMgYXJncyBhbmQga2V5d29yZAotICAgICAgICAgICBhcmd1bWVudHMga3dhcmdzLiBJZiBhIGRpZmZlcmVudCB0eXBlIG9mIGV4Y2VwdGlvbiBpcwotICAgICAgICAgICB0aHJvd24sIGl0IHdpbGwgbm90IGJlIGNhdWdodCwgYW5kIHRoZSB0ZXN0IGNhc2Ugd2lsbCBiZQotICAgICAgICAgICBkZWVtZWQgdG8gaGF2ZSBzdWZmZXJlZCBhbiBlcnJvciwgZXhhY3RseSBhcyBmb3IgYW4KLSAgICAgICAgICAgdW5leHBlY3RlZCBleGNlcHRpb24uCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjYWxsYWJsZU9iaigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBleGNDbGFzczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaGFzYXR0cihleGNDbGFzcywnX19uYW1lX18nKTogZXhjTmFtZSA9IGV4Y0NsYXNzLl9fbmFtZV9fCi0gICAgICAgICAgICBlbHNlOiBleGNOYW1lID0gc3RyKGV4Y0NsYXNzKQotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAiJXMgbm90IHJhaXNlZCIgJSBleGNOYW1lCi0KLSAgICBkZWYgZmFpbFVubGVzc0VxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIHVuZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgJz09JwotICAgICAgICAgICBvcGVyYXRvci4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sIFwKLSAgICAgICAgICAgICAgICAgIChtc2cgb3IgJyVyICE9ICVyJyAlIChmaXJzdCwgc2Vjb25kKSkKLQotICAgIGRlZiBmYWlsSWZFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCi0gICAgICAgICAgIG9wZXJhdG9yLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgZmlyc3QgPT0gc2Vjb25kOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBcCi0gICAgICAgICAgICAgICAgICAobXNnIG9yICclciA9PSAlcicgJSAoZmlyc3QsIHNlY29uZCkpCi0KLSAgICBkZWYgZmFpbFVubGVzc0FsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz03LCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSB1bmVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlaXIKLSAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMKLSAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmluZyB0byB6ZXJvLgotCi0gICAgICAgICAgIE5vdGUgdGhhdCBkZWNpbWFsIHBsYWNlcyAoZnJvbSB6ZXJvKSBhcmUgdXN1YWxseSBub3QgdGhlIHNhbWUKLSAgICAgICAgICAgYXMgc2lnbmlmaWNhbnQgZGlnaXRzIChtZWFzdXJlZCBmcm9tIHRoZSBtb3N0IHNpZ25maWNhbnQgZGlnaXQpLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgcm91bmQoYWJzKHNlY29uZC1maXJzdCksIHBsYWNlcykgIT0gMDoKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgXAotICAgICAgICAgICAgICAgICAgKG1zZyBvciAnJXIgIT0gJXIgd2l0aGluICVyIHBsYWNlcycgJSAoZmlyc3QsIHNlY29uZCwgcGxhY2VzKSkKLQotICAgIGRlZiBmYWlsSWZBbG1vc3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBwbGFjZXM9NywgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0aGVpcgotICAgICAgICAgICBkaWZmZXJlbmNlIHJvdW5kZWQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcwotICAgICAgICAgICAoZGVmYXVsdCA3KSBhbmQgY29tcGFyaW5nIHRvIHplcm8uCi0KLSAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChmcm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQotICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCi0gICAgICAgICIiIgotICAgICAgICBpZiByb3VuZChhYnMoc2Vjb25kLWZpcnN0KSwgcGxhY2VzKSA9PSAwOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBcCi0gICAgICAgICAgICAgICAgICAobXNnIG9yICclciA9PSAlciB3aXRoaW4gJXIgcGxhY2VzJyAlIChmaXJzdCwgc2Vjb25kLCBwbGFjZXMpKQotCi0gICAgIyBTeW5vbnltcyBmb3IgYXNzZXJ0aW9uIG1ldGhvZHMKLQotICAgIGFzc2VydEVxdWFsID0gYXNzZXJ0RXF1YWxzID0gZmFpbFVubGVzc0VxdWFsCi0KLSAgICBhc3NlcnROb3RFcXVhbCA9IGFzc2VydE5vdEVxdWFscyA9IGZhaWxJZkVxdWFsCi0KLSAgICBhc3NlcnRBbG1vc3RFcXVhbCA9IGFzc2VydEFsbW9zdEVxdWFscyA9IGZhaWxVbmxlc3NBbG1vc3RFcXVhbAotCi0gICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWwgPSBhc3NlcnROb3RBbG1vc3RFcXVhbHMgPSBmYWlsSWZBbG1vc3RFcXVhbAotCi0gICAgYXNzZXJ0UmFpc2VzID0gZmFpbFVubGVzc1JhaXNlcwotCi0gICAgYXNzZXJ0XyA9IGFzc2VydFRydWUgPSBmYWlsVW5sZXNzCi0KLSAgICBhc3NlcnRGYWxzZSA9IGZhaWxJZgotCi0KLQotY2xhc3MgVGVzdFN1aXRlOgotICAgICIiIkEgdGVzdCBzdWl0ZSBpcyBhIGNvbXBvc2l0ZSB0ZXN0IGNvbnNpc3Rpbmcgb2YgYSBudW1iZXIgb2YgVGVzdENhc2VzLgotCi0gICAgRm9yIHVzZSwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIFRlc3RTdWl0ZSwgdGhlbiBhZGQgdGVzdCBjYXNlIGluc3RhbmNlcy4KLSAgICBXaGVuIGFsbCB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQsIHRoZSBzdWl0ZSBjYW4gYmUgcGFzc2VkIHRvIGEgdGVzdAotICAgIHJ1bm5lciwgc3VjaCBhcyBUZXh0VGVzdFJ1bm5lci4gSXQgd2lsbCBydW4gdGhlIGluZGl2aWR1YWwgdGVzdCBjYXNlcwotICAgIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQsIGFnZ3JlZ2F0aW5nIHRoZSByZXN1bHRzLiBXaGVuCi0gICAgc3ViY2xhc3NpbmcsIGRvIG5vdCBmb3JnZXQgdG8gY2FsbCB0aGUgYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdHM9KCkpOgotICAgICAgICBzZWxmLl90ZXN0cyA9IFtdCi0gICAgICAgIHNlbGYuYWRkVGVzdHModGVzdHMpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPCVzIHRlc3RzPSVzPiIgJSAoX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdHMpCi0KLSAgICBfX3N0cl9fID0gX19yZXByX18KLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIG5vdCB0eXBlKG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdHMgPT0gb3RoZXIuX3Rlc3RzCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KLSAgICAjIENhbid0IGd1YXJhbnRlZSBoYXNoIGludmFyaWFudCwgc28gZmxhZyBhcyB1bmhhc2hhYmxlCi0gICAgX19oYXNoX18gPSBOb25lCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBpdGVyKHNlbGYuX3Rlc3RzKQotCi0gICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgotICAgICAgICBjYXNlcyA9IDAKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHM6Ci0gICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKLSAgICAgICAgcmV0dXJuIGNhc2VzCi0KLSAgICBkZWYgYWRkVGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgIyBzYW5pdHkgY2hlY2tzCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHRlc3QsICdfX2NhbGxfXycpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0aGUgdGVzdCB0byBhZGQgbXVzdCBiZSBjYWxsYWJsZSIpCi0gICAgICAgIGlmIChpc2luc3RhbmNlKHRlc3QsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSBhbmQKLSAgICAgICAgICAgIGlzc3ViY2xhc3ModGVzdCwgKFRlc3RDYXNlLCBUZXN0U3VpdGUpKSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3RDYXNlcyBhbmQgVGVzdFN1aXRlcyBtdXN0IGJlIGluc3RhbnRpYXRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYWRkVGVzdCgpIikKLSAgICAgICAgc2VsZi5fdGVzdHMuYXBwZW5kKHRlc3QpCi0KLSAgICBkZWYgYWRkVGVzdHMoc2VsZiwgdGVzdHMpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RzLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdHMgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiB0ZXN0cywgbm90IGEgc3RyaW5nIikKLSAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICBzZWxmLmFkZFRlc3QodGVzdCkKLQotICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHM6Ci0gICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBkZWYgZGVidWcoc2VsZik6Ci0gICAgICAgICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHM6IHRlc3QuZGVidWcoKQotCi0KLWNsYXNzIEZ1bmN0aW9uVGVzdENhc2UoVGVzdENhc2UpOgotICAgICIiIkEgdGVzdCBjYXNlIHRoYXQgd3JhcHMgYSB0ZXN0IGZ1bmN0aW9uLgotCi0gICAgVGhpcyBpcyB1c2VmdWwgZm9yIHNsaXBwaW5nIHByZS1leGlzdGluZyB0ZXN0IGZ1bmN0aW9ucyBpbnRvIHRoZQotICAgIHVuaXR0ZXN0IGZyYW1ld29yay4gT3B0aW9uYWxseSwgc2V0LXVwIGFuZCB0aWR5LXVwIGZ1bmN0aW9ucyBjYW4gYmUKLSAgICBzdXBwbGllZC4gQXMgd2l0aCBUZXN0Q2FzZSwgdGhlIHRpZHktdXAgKCd0ZWFyRG93bicpIGZ1bmN0aW9uIHdpbGwKLSAgICBhbHdheXMgYmUgY2FsbGVkIGlmIHRoZSBzZXQtdXAgKCdzZXRVcCcpIGZ1bmN0aW9uIHJhbiBzdWNjZXNzZnVsbHkuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdEZ1bmMsIHNldFVwPU5vbmUsIHRlYXJEb3duPU5vbmUsCi0gICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPU5vbmUpOgotICAgICAgICBUZXN0Q2FzZS5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9fc2V0VXBGdW5jID0gc2V0VXAKLSAgICAgICAgc2VsZi5fX3RlYXJEb3duRnVuYyA9IHRlYXJEb3duCi0gICAgICAgIHNlbGYuX190ZXN0RnVuYyA9IHRlc3RGdW5jCi0gICAgICAgIHNlbGYuX19kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX19zZXRVcEZ1bmMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9fc2V0VXBGdW5jKCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX3RlYXJEb3duRnVuYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX190ZWFyRG93bkZ1bmMoKQotCi0gICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuX190ZXN0RnVuYygpCi0KLSAgICBkZWYgaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fdGVzdEZ1bmMuX19uYW1lX18KLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIG5vdCB0eXBlKG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBzZWxmLl9fc2V0VXBGdW5jID09IG90aGVyLl9fc2V0VXBGdW5jIGFuZCBcCi0gICAgICAgICAgICAgICBzZWxmLl9fdGVhckRvd25GdW5jID09IG90aGVyLl9fdGVhckRvd25GdW5jIGFuZCBcCi0gICAgICAgICAgICAgICBzZWxmLl9fdGVzdEZ1bmMgPT0gb3RoZXIuX190ZXN0RnVuYyBhbmQgXAotICAgICAgICAgICAgICAgc2VsZi5fX2Rlc2NyaXB0aW9uID09IG90aGVyLl9fZGVzY3JpcHRpb24KLQotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX19zZXRVcEZ1bmMsIHNlbGYuX190ZWFyRG93bkZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3Rlc3RGdW5jLCBzZWxmLl9fZGVzY3JpcHRpb24pKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fX3Rlc3RGdW5jLl9fbmFtZV9fKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjwlcyB0ZXN0RnVuYz0lcz4iICUgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX190ZXN0RnVuYykKLQotICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6IHJldHVybiBzZWxmLl9fZGVzY3JpcHRpb24KLSAgICAgICAgZG9jID0gc2VsZi5fX3Rlc3RGdW5jLl9fZG9jX18KLSAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQotCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIExvY2F0aW5nIGFuZCBsb2FkaW5nIHRlc3RzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2xhc3MgVGVzdExvYWRlcjoKLSAgICAiIiJUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRlc3RzIGFjY29yZGluZyB0byB2YXJpb3VzCi0gICAgY3JpdGVyaWEgYW5kIHJldHVybmluZyB0aGVtIHdyYXBwZWQgaW4gYSBUZXN0U3VpdGUKLSAgICAiIiIKLSAgICB0ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgc29ydFRlc3RNZXRob2RzVXNpbmcgPSBjbXAKLSAgICBzdWl0ZUNsYXNzID0gVGVzdFN1aXRlCi0KLSAgICBkZWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgotICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRlc3RDYXNlQ2xhc3MiIiIKLSAgICAgICAgaWYgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBUZXN0U3VpdGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tIFRlc3RTdWl0ZS4gTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCi0gICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKLSAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKLSAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQotICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKG1hcCh0ZXN0Q2FzZUNsYXNzLCB0ZXN0Q2FzZU5hbWVzKSkKLQotICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIGdpdmVuIG1vZHVsZSIiIgotICAgICAgICB0ZXN0cyA9IFtdCi0gICAgICAgIGZvciBuYW1lIGluIGRpcihtb2R1bGUpOgotICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihtb2R1bGUsIG5hbWUpCi0gICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmosICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSBhbmQKLSAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKG9iaiwgVGVzdENhc2UpKToKLSAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2Uob2JqKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKLQotICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZShzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBnaXZlbiBhIHN0cmluZyBzcGVjaWZpZXIuCi0KLSAgICAgICAgVGhlIG5hbWUgbWF5IHJlc29sdmUgZWl0aGVyIHRvIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYQotICAgICAgICB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoCi0gICAgICAgIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuCi0KLSAgICAgICAgVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIHRoZSBuYW1lcyByZWxhdGl2ZSB0byBhIGdpdmVuIG1vZHVsZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpCi0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgcGFydHNfY29weSA9IHBhcnRzWzpdCi0gICAgICAgICAgICB3aGlsZSBwYXJ0c19jb3B5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXygnLicuam9pbihwYXJ0c19jb3B5KSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBwYXJ0c19jb3B5Wy0xXQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFydHNfY29weTogcmFpc2UKLSAgICAgICAgICAgIHBhcnRzID0gcGFydHNbMTpdCi0gICAgICAgIG9iaiA9IG1vZHVsZQotICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKLSAgICAgICAgICAgIHBhcmVudCwgb2JqID0gb2JqLCBnZXRhdHRyKG9iaiwgcGFydCkKLQotICAgICAgICBpZiB0eXBlKG9iaikgPT0gdHlwZXMuTW9kdWxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUob2JqKQotICAgICAgICBlbGlmIChpc2luc3RhbmNlKG9iaiwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpIGFuZAotICAgICAgICAgICAgICBpc3N1YmNsYXNzKG9iaiwgVGVzdENhc2UpKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShvYmopCi0gICAgICAgIGVsaWYgKHR5cGUob2JqKSA9PSB0eXBlcy5VbmJvdW5kTWV0aG9kVHlwZSBhbmQKLSAgICAgICAgICAgICAgaXNpbnN0YW5jZShwYXJlbnQsICh0eXBlLCB0eXBlcy5DbGFzc1R5cGUpKSBhbmQKLSAgICAgICAgICAgICAgaXNzdWJjbGFzcyhwYXJlbnQsIFRlc3RDYXNlKSk6Ci0gICAgICAgICAgICByZXR1cm4gVGVzdFN1aXRlKFtwYXJlbnQob2JqLl9fbmFtZV9fKV0pCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIFRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICByZXR1cm4gb2JqCi0gICAgICAgIGVsaWYgaGFzYXR0cihvYmosICdfX2NhbGxfXycpOgotICAgICAgICAgICAgdGVzdCA9IG9iaigpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3QsIFRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXN0LCBUZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTdWl0ZShbdGVzdF0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FsbGluZyAlcyByZXR1cm5lZCAlcywgbm90IGEgdGVzdCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqLCB0ZXN0KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gbWFrZSB0ZXN0IGZyb206ICVzIiAlIG9iaikKLQotICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZT1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGZvdW5kIHVzaW5nIHRoZSBnaXZlbiBzZXF1ZW5jZQotICAgICAgICBvZiBzdHJpbmcgc3BlY2lmaWVycy4gU2VlICdsb2FkVGVzdHNGcm9tTmFtZSgpJy4KLSAgICAgICAgIiIiCi0gICAgICAgIHN1aXRlcyA9IFtzZWxmLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIG1vZHVsZSkgZm9yIG5hbWUgaW4gbmFtZXNdCi0gICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3Moc3VpdGVzKQotCi0gICAgZGVmIGdldFRlc3RDYXNlTmFtZXMoc2VsZiwgdGVzdENhc2VDbGFzcyk6Ci0gICAgICAgICIiIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MKLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUsIHRlc3RDYXNlQ2xhc3M9dGVzdENhc2VDbGFzcywgcHJlZml4PXNlbGYudGVzdE1ldGhvZFByZWZpeCk6Ci0gICAgICAgICAgICByZXR1cm4gYXR0cm5hbWUuc3RhcnRzd2l0aChwcmVmaXgpIGFuZCBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18nKQotICAgICAgICB0ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RNZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKLSAgICAgICAgaWYgc2VsZi5zb3J0VGVzdE1ldGhvZHNVc2luZzoKLSAgICAgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoa2V5PV9DbXBUb0tleShzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nKSkKLSAgICAgICAgcmV0dXJuIHRlc3RGbk5hbWVzCi0KLQotCi1kZWZhdWx0VGVzdExvYWRlciA9IFRlc3RMb2FkZXIoKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQYXRjaGVzIGZvciBvbGQgZnVuY3Rpb25zOiB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgb2Jzb2xldGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1kZWYgX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3M9Tm9uZSk6Ci0gICAgbG9hZGVyID0gVGVzdExvYWRlcigpCi0gICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gc29ydFVzaW5nCi0gICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSBwcmVmaXgKLSAgICBpZiBzdWl0ZUNsYXNzOiBsb2FkZXIuc3VpdGVDbGFzcyA9IHN1aXRlQ2xhc3MKLSAgICByZXR1cm4gbG9hZGVyCi0KLWRlZiBnZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MsIHByZWZpeCwgc29ydFVzaW5nPWNtcCk6Ci0gICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nKS5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCi0KLWRlZiBtYWtlU3VpdGUodGVzdENhc2VDbGFzcywgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPWNtcCwgc3VpdGVDbGFzcz1UZXN0U3VpdGUpOgotICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcykubG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRlc3RDYXNlQ2xhc3MpCi0KLWRlZiBmaW5kVGVzdENhc2VzKG1vZHVsZSwgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPWNtcCwgc3VpdGVDbGFzcz1UZXN0U3VpdGUpOgotICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcykubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRleHQgVUkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBfV3JpdGVsbkRlY29yYXRvcjoKLSAgICAiIiJVc2VkIHRvIGRlY29yYXRlIGZpbGUtbGlrZSBvYmplY3RzIHdpdGggYSBoYW5keSAnd3JpdGVsbicgbWV0aG9kIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsc3RyZWFtKToKLSAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KLQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zdHJlYW0sYXR0cikKLQotICAgIGRlZiB3cml0ZWxuKHNlbGYsIGFyZz1Ob25lKToKLSAgICAgICAgaWYgYXJnOiBzZWxmLndyaXRlKGFyZykKLSAgICAgICAgc2VsZi53cml0ZSgnXG4nKSAjIHRleHQtbW9kZSBzdHJlYW1zIHRyYW5zbGF0ZSB0byBcclxuIGlmIG5lZWRlZAotCi0KLWNsYXNzIF9UZXh0VGVzdFJlc3VsdChUZXN0UmVzdWx0KToKLSAgICAiIiJBIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgY2FuIHByaW50IGZvcm1hdHRlZCB0ZXh0IHJlc3VsdHMgdG8gYSBzdHJlYW0uCi0KLSAgICBVc2VkIGJ5IFRleHRUZXN0UnVubmVyLgotICAgICIiIgotICAgIHNlcGFyYXRvcjEgPSAnPScgKiA3MAotICAgIHNlcGFyYXRvcjIgPSAnLScgKiA3MAotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpOgotICAgICAgICBUZXN0UmVzdWx0Ll9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCi0gICAgICAgIHNlbGYuc2hvd0FsbCA9IHZlcmJvc2l0eSA+IDEKLSAgICAgICAgc2VsZi5kb3RzID0gdmVyYm9zaXR5ID09IDEKLSAgICAgICAgc2VsZi5kZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnMKLQotICAgIGRlZiBnZXREZXNjcmlwdGlvbihzZWxmLCB0ZXN0KToKLSAgICAgICAgaWYgc2VsZi5kZXNjcmlwdGlvbnM6Ci0gICAgICAgICAgICByZXR1cm4gdGVzdC5zaG9ydERlc2NyaXB0aW9uKCkgb3Igc3RyKHRlc3QpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc3RyKHRlc3QpCi0KLSAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICBUZXN0UmVzdWx0LnN0YXJ0VGVzdChzZWxmLCB0ZXN0KQotICAgICAgICBpZiBzZWxmLnNob3dBbGw6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLmdldERlc2NyaXB0aW9uKHRlc3QpKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIiAuLi4gIikKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKLQotICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgotICAgICAgICBUZXN0UmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCkKLSAgICAgICAgaWYgc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigib2siKQotICAgICAgICBlbGlmIHNlbGYuZG90czoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCcuJykKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKLQotICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgotICAgICAgICBUZXN0UmVzdWx0LmFkZEVycm9yKHNlbGYsIHRlc3QsIGVycikKLSAgICAgICAgaWYgc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRVJST1IiKQotICAgICAgICBlbGlmIHNlbGYuZG90czoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdFJykKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKLQotICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6Ci0gICAgICAgIFRlc3RSZXN1bHQuYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpCi0gICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIkZBSUwiKQotICAgICAgICBlbGlmIHNlbGYuZG90czoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdGJykKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKLQotICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5kb3RzIG9yIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQotICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdFUlJPUicsIHNlbGYuZXJyb3JzKQotICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdGQUlMJywgc2VsZi5mYWlsdXJlcykKLQotICAgIGRlZiBwcmludEVycm9yTGlzdChzZWxmLCBmbGF2b3VyLCBlcnJvcnMpOgotICAgICAgICBmb3IgdGVzdCwgZXJyIGluIGVycm9yczoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oc2VsZi5zZXBhcmF0b3IxKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiJXM6ICVzIiAlIChmbGF2b3VyLHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihzZWxmLnNlcGFyYXRvcjIpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIlcyIgJSBlcnIpCi0KLQotY2xhc3MgVGV4dFRlc3RSdW5uZXI6Ci0gICAgIiIiQSB0ZXN0IHJ1bm5lciBjbGFzcyB0aGF0IGRpc3BsYXlzIHJlc3VsdHMgaW4gdGV4dHVhbCBmb3JtLgotCi0gICAgSXQgcHJpbnRzIG91dCB0aGUgbmFtZXMgb2YgdGVzdHMgYXMgdGhleSBhcmUgcnVuLCBlcnJvcnMgYXMgdGhleQotICAgIG9jY3VyLCBhbmQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgcnVuLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW09c3lzLnN0ZGVyciwgZGVzY3JpcHRpb25zPTEsIHZlcmJvc2l0eT0xKToKLSAgICAgICAgc2VsZi5zdHJlYW0gPSBfV3JpdGVsbkRlY29yYXRvcihzdHJlYW0pCi0gICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCi0gICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5Ci0KLSAgICBkZWYgX21ha2VSZXN1bHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBfVGV4dFRlc3RSZXN1bHQoc2VsZi5zdHJlYW0sIHNlbGYuZGVzY3JpcHRpb25zLCBzZWxmLnZlcmJvc2l0eSkKLQotICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6Ci0gICAgICAgICJSdW4gdGhlIGdpdmVuIHRlc3QgY2FzZSBvciB0ZXN0IHN1aXRlLiIKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZVJlc3VsdCgpCi0gICAgICAgIHN0YXJ0VGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHRlc3QocmVzdWx0KQotICAgICAgICBzdG9wVGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHRpbWVUYWtlbiA9IHN0b3BUaW1lIC0gc3RhcnRUaW1lCi0gICAgICAgIHJlc3VsdC5wcmludEVycm9ycygpCi0gICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4ocmVzdWx0LnNlcGFyYXRvcjIpCi0gICAgICAgIHJ1biA9IHJlc3VsdC50ZXN0c1J1bgotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biwgcnVuICE9IDEgYW5kICJzIiBvciAiIiwgdGltZVRha2VuKSkKLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigpCi0gICAgICAgIGlmIG5vdCByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIkZBSUxFRCAoIikKLSAgICAgICAgICAgIGZhaWxlZCwgZXJyb3JlZCA9IG1hcChsZW4sIChyZXN1bHQuZmFpbHVyZXMsIHJlc3VsdC5lcnJvcnMpKQotICAgICAgICAgICAgaWYgZmFpbGVkOgotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJmYWlsdXJlcz0lZCIgJSBmYWlsZWQpCi0gICAgICAgICAgICBpZiBlcnJvcmVkOgotICAgICAgICAgICAgICAgIGlmIGZhaWxlZDogc2VsZi5zdHJlYW0ud3JpdGUoIiwgIikKLSAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiZXJyb3JzPSVkIiAlIGVycm9yZWQpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIpIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIk9LIikKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGVzdHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2xhc3MgVGVzdFByb2dyYW06Ci0gICAgIiIiQSBjb21tYW5kLWxpbmUgcHJvZ3JhbSB0aGF0IHJ1bnMgYSBzZXQgb2YgdGVzdHM7IHRoaXMgaXMgcHJpbWFyaWx5Ci0gICAgICAgZm9yIG1ha2luZyB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuCi0gICAgIiIiCi0gICAgVVNBR0UgPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdF0gWy4uLl0KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0gIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKLQotRXhhbXBsZXM6Ci0gICUocHJvZ05hbWUpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cwotICAlKHByb2dOYW1lKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAgICAgLSBydW4gc3VpdGUgJ015VGVzdFN1aXRlJwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAgICAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlICAgICAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTXlUZXN0Q2FzZQotIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLAotICAgICAgICAgICAgICAgICBhcmd2PU5vbmUsIHRlc3RSdW5uZXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1kZWZhdWx0VGVzdExvYWRlcik6Ci0gICAgICAgIGlmIHR5cGUobW9kdWxlKSA9PSB0eXBlKCcnKToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGUpCi0gICAgICAgICAgICBmb3IgcGFydCBpbiBtb2R1bGUuc3BsaXQoJy4nKVsxOl06Ci0gICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBnZXRhdHRyKHNlbGYubW9kdWxlLCBwYXJ0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKLSAgICAgICAgaWYgYXJndiBpcyBOb25lOgotICAgICAgICAgICAgYXJndiA9IHN5cy5hcmd2Ci0gICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMQotICAgICAgICBzZWxmLmRlZmF1bHRUZXN0ID0gZGVmYXVsdFRlc3QKLSAgICAgICAgc2VsZi50ZXN0UnVubmVyID0gdGVzdFJ1bm5lcgotICAgICAgICBzZWxmLnRlc3RMb2FkZXIgPSB0ZXN0TG9hZGVyCi0gICAgICAgIHNlbGYucHJvZ05hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGFyZ3ZbMF0pCi0gICAgICAgIHNlbGYucGFyc2VBcmdzKGFyZ3YpCi0gICAgICAgIHNlbGYucnVuVGVzdHMoKQotCi0gICAgZGVmIHVzYWdlRXhpdChzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgIGlmIG1zZzogcHJpbnQgbXNnCi0gICAgICAgIHByaW50IHNlbGYuVVNBR0UgJSBzZWxmLl9fZGljdF9fCi0gICAgICAgIHN5cy5leGl0KDIpCi0KLSAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgotICAgICAgICBpbXBvcnQgZ2V0b3B0Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3ZbMTpdLCAnaEh2cScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2hlbHAnLCd2ZXJib3NlJywncXVpZXQnXSkKLSAgICAgICAgICAgIGZvciBvcHQsIHZhbHVlIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLWgnLCctSCcsJy0taGVscCcpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnVzYWdlRXhpdCgpCi0gICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLXEnLCctLXF1aWV0Jyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMAotICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy12JywnLS12ZXJib3NlJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDAgYW5kIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmLm1vZHVsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGlmIGxlbihhcmdzKSA+IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBhcmdzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQotICAgICAgICAgICAgc2VsZi5jcmVhdGVUZXN0cygpCi0gICAgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KG1zZykKLQotICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLnRlc3ROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKLQotICAgIGRlZiBydW5UZXN0cyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi50ZXN0UnVubmVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnRlc3RSdW5uZXIgPSBUZXh0VGVzdFJ1bm5lcgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi50ZXN0UnVubmVyLCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi52ZXJib3NpdHkpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgICMgZGlkbid0IGFjY2VwdCB0aGUgdmVyYm9zaXR5IGFyZ3VtZW50Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSBUZXN0UnVubmVyIGluc3RhbmNlCi0gICAgICAgICAgICB0ZXN0UnVubmVyID0gc2VsZi50ZXN0UnVubmVyCi0gICAgICAgIHJlc3VsdCA9IHRlc3RSdW5uZXIucnVuKHNlbGYudGVzdCkKLSAgICAgICAgc3lzLmV4aXQobm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0KLW1haW4gPSBUZXN0UHJvZ3JhbQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBFeGVjdXRpbmcgdGhpcyBtb2R1bGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKG1vZHVsZT1Ob25lKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L19faW5pdF9fLnB5IGIvTGliL3VuaXR0ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWEzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSw2OSBAQAorIiIiCitQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yaywgYmFzZWQgb24gRXJpY2ggR2FtbWEncyBKVW5pdCBhbmQgS2VudCBCZWNrJ3MKK1NtYWxsdGFsayB0ZXN0aW5nIGZyYW1ld29yay4KKworVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGNvcmUgZnJhbWV3b3JrIGNsYXNzZXMgdGhhdCBmb3JtIHRoZSBiYXNpcyBvZgorc3BlY2lmaWMgdGVzdCBjYXNlcyBhbmQgc3VpdGVzIChUZXN0Q2FzZSwgVGVzdFN1aXRlIGV0Yy4pLCBhbmQgYWxzbyBhCit0ZXh0LWJhc2VkIHV0aWxpdHkgY2xhc3MgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzIGFuZCByZXBvcnRpbmcgdGhlIHJlc3VsdHMKKyAoVGV4dFRlc3RSdW5uZXIpLgorCitTaW1wbGUgdXNhZ2U6CisKKyAgICBpbXBvcnQgdW5pdHRlc3QKKworICAgIGNsYXNzIEludGVnZXJBcml0aG1lbnRpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RBZGQoc2VsZik6ICAjIyB0ZXN0IG1ldGhvZCBuYW1lcyBiZWdpbiAndGVzdConCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxICsgMiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAgKyAxLCAxKQorICAgICAgICBkZWYgdGVzdE11bHRpcGx5KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCAqIDEwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUgKiA4KSwgNDApCisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICB1bml0dGVzdC5tYWluKCkKKworRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGJ1bmRsZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGZyb20KKworICBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdW5pdHRlc3QuaHRtbAorCitDb3B5cmlnaHQgKGMpIDE5OTktMjAwMyBTdGV2ZSBQdXJjZWxsCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorVGhpcyBtb2R1bGUgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFB5dGhvbiBpdHNlbGYsIHNvIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbWVzc2FnZQorYW5kIGRpc2NsYWltZXIgYXJlIHJldGFpbmVkIGluIHRoZWlyIG9yaWdpbmFsIGZvcm0uCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIENPREUsIEVWRU4gSUYgVEhFIEFVVEhPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKK1RIRSBBVVRIT1IgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIENPREUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsCitBTkQgVEhFUkUgSVMgTk8gT0JMSUdBVElPTiBXSEFUU09FVkVSIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsCitTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisiIiIKKworX19hbGxfXyA9IFsnVGVzdFJlc3VsdCcsICdUZXN0Q2FzZScsICdUZXN0U3VpdGUnLAorICAgICAgICAgICAnVGV4dFRlc3RSdW5uZXInLCAnVGVzdExvYWRlcicsICdGdW5jdGlvblRlc3RDYXNlJywgJ21haW4nLAorICAgICAgICAgICAnZGVmYXVsdFRlc3RMb2FkZXInLCAnU2tpcFRlc3QnLCAnc2tpcCcsICdza2lwSWYnLCAnc2tpcFVubGVzcycsCisgICAgICAgICAgICdleHBlY3RlZEZhaWx1cmUnLCAnVGV4dFRlc3RSZXN1bHQnLCAnaW5zdGFsbEhhbmRsZXInLAorICAgICAgICAgICAncmVnaXN0ZXJSZXN1bHQnLCAncmVtb3ZlUmVzdWx0JywgJ3JlbW92ZUhhbmRsZXInXQorCisjIEV4cG9zZSBvYnNvbGV0ZSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitfX2FsbF9fLmV4dGVuZChbJ2dldFRlc3RDYXNlTmFtZXMnLCAnbWFrZVN1aXRlJywgJ2ZpbmRUZXN0Q2FzZXMnXSkKKworX191bml0dGVzdCA9IFRydWUKKworZnJvbSAucmVzdWx0IGltcG9ydCBUZXN0UmVzdWx0Citmcm9tIC5jYXNlIGltcG9ydCAoVGVzdENhc2UsIEZ1bmN0aW9uVGVzdENhc2UsIFNraXBUZXN0LCBza2lwLCBza2lwSWYsCisgICAgICAgICAgICAgICAgICAgc2tpcFVubGVzcywgZXhwZWN0ZWRGYWlsdXJlKQorZnJvbSAuc3VpdGUgaW1wb3J0IEJhc2VUZXN0U3VpdGUsIFRlc3RTdWl0ZQorZnJvbSAubG9hZGVyIGltcG9ydCAoVGVzdExvYWRlciwgZGVmYXVsdFRlc3RMb2FkZXIsIG1ha2VTdWl0ZSwgZ2V0VGVzdENhc2VOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgIGZpbmRUZXN0Q2FzZXMpCitmcm9tIC5tYWluIGltcG9ydCBUZXN0UHJvZ3JhbSwgbWFpbgorZnJvbSAucnVubmVyIGltcG9ydCBUZXh0VGVzdFJ1bm5lciwgVGV4dFRlc3RSZXN1bHQKK2Zyb20gLnNpZ25hbHMgaW1wb3J0IGluc3RhbGxIYW5kbGVyLCByZWdpc3RlclJlc3VsdCwgcmVtb3ZlUmVzdWx0LCByZW1vdmVIYW5kbGVyCisKKyMgZGVwcmVjYXRlZAorX1RleHRUZXN0UmVzdWx0ID0gVGV4dFRlc3RSZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzIwMDUwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyIiIk1haW4gZW50cnkgcG9pbnQiIiIKKworaW1wb3J0IHN5cworaWYgc3lzLmFyZ3ZbMF0uZW5kc3dpdGgoIl9fbWFpbl9fLnB5Iik6CisgICAgc3lzLmFyZ3ZbMF0gPSAicHl0aG9uIC1tIHVuaXR0ZXN0IgorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitmcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbSwgVVNBR0VfQVNfTUFJTgorVGVzdFByb2dyYW0uVVNBR0UgPSBVU0FHRV9BU19NQUlOCisKK21haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvY2FzZS5weSBiL0xpYi91bml0dGVzdC9jYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOGY0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQpAQCAtMCwwICsxLDEwNjUgQEAKKyIiIlRlc3QgY2FzZSBpbXBsZW1lbnRhdGlvbiIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzeXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgcHByaW50CitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IHJlc3VsdAorZnJvbSAudXRpbCBpbXBvcnQgKAorICAgIHN0cmNsYXNzLCBzYWZlX3JlcHIsIHNvcnRlZF9saXN0X2RpZmZlcmVuY2UsIHVub3JkZXJhYmxlX2xpc3RfZGlmZmVyZW5jZQorKQorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK0RJRkZfT01JVFRFRCA9ICgnXG5EaWZmIGlzICVzIGNoYXJhY3RlcnMgbG9uZy4gJworICAgICAgICAgICAgICAgICAnU2V0IHNlbGYubWF4RGlmZiB0byBOb25lIHRvIHNlZSBpdC4nKQorCitjbGFzcyBTa2lwVGVzdChFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJhaXNlIHRoaXMgZXhjZXB0aW9uIGluIGEgdGVzdCB0byBza2lwIGl0LgorCisgICAgVXN1YWxseSB5b3UgY2FuIHVzZSBUZXN0UmVzdWx0LnNraXAoKSBvciBvbmUgb2YgdGhlIHNraXBwaW5nIGRlY29yYXRvcnMKKyAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBwYXNzCisKK2NsYXNzIF9FeHBlY3RlZEZhaWx1cmUoRXhjZXB0aW9uKToKKyAgICAiIiIKKyAgICBSYWlzZSB0aGlzIHdoZW4gYSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuCisKKyAgICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbyk6CisgICAgICAgIHN1cGVyKF9FeHBlY3RlZEZhaWx1cmUsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCisKK2NsYXNzIF9VbmV4cGVjdGVkU3VjY2VzcyhFeGNlcHRpb24pOgorICAgICIiIgorICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQorICAgICIiIgorICAgIHBhc3MKKworZGVmIF9pZChvYmopOgorICAgIHJldHVybiBvYmoKKworZGVmIHNraXAocmVhc29uKToKKyAgICAiIiIKKyAgICBVbmNvbmRpdGlvbmFsbHkgc2tpcCBhIHRlc3QuCisgICAgIiIiCisgICAgZGVmIGRlY29yYXRvcih0ZXN0X2l0ZW0pOgorICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UodGVzdF9pdGVtLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyh0ZXN0X2l0ZW0sIFRlc3RDYXNlKSk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHRlc3RfaXRlbSkKKyAgICAgICAgICAgIGRlZiBza2lwX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBTa2lwVGVzdChyZWFzb24pCisgICAgICAgICAgICB0ZXN0X2l0ZW0gPSBza2lwX3dyYXBwZXIKKworICAgICAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9za2lwX18gPSBUcnVlCisgICAgICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X3NraXBfd2h5X18gPSByZWFzb24KKyAgICAgICAgcmV0dXJuIHRlc3RfaXRlbQorICAgIHJldHVybiBkZWNvcmF0b3IKKworZGVmIHNraXBJZihjb25kaXRpb24sIHJlYXNvbik6CisgICAgIiIiCisgICAgU2tpcCBhIHRlc3QgaWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgICIiIgorICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIHNraXAocmVhc29uKQorICAgIHJldHVybiBfaWQKKworZGVmIHNraXBVbmxlc3MoY29uZGl0aW9uLCByZWFzb24pOgorICAgICIiIgorICAgIFNraXAgYSB0ZXN0IHVubGVzcyB0aGUgY29uZGl0aW9uIGlzIHRydWUuCisgICAgIiIiCisgICAgaWYgbm90IGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIHNraXAocmVhc29uKQorICAgIHJldHVybiBfaWQKKworCitkZWYgZXhwZWN0ZWRGYWlsdXJlKGZ1bmMpOgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIF9FeHBlY3RlZEZhaWx1cmUoc3lzLmV4Y19pbmZvKCkpCisgICAgICAgIHJhaXNlIF9VbmV4cGVjdGVkU3VjY2VzcworICAgIHJldHVybiB3cmFwcGVyCisKKworY2xhc3MgX0Fzc2VydFJhaXNlc0NvbnRleHQob2JqZWN0KToKKyAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRSYWlzZXMqIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWQsIHRlc3RfY2FzZSwgZXhwZWN0ZWRfcmVnZXhwPU5vbmUpOgorICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKKyAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uID0gdGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24KKyAgICAgICAgc2VsZi5leHBlY3RlZF9yZWdleHAgPSBleHBlY3RlZF9yZWdleHAKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdGIpOgorICAgICAgICBpZiBleGNfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gc2VsZi5leHBlY3RlZC5fX25hbWVfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gc3RyKHNlbGYuZXhwZWN0ZWQpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgInswfSBub3QgcmFpc2VkIi5mb3JtYXQoZXhjX25hbWUpKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhleGNfdHlwZSwgc2VsZi5leHBlY3RlZCk6CisgICAgICAgICAgICAjIGxldCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgcGFzcyB0aHJvdWdoCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5leGNlcHRpb24gPSBleGNfdmFsdWUgIyBzdG9yZSBmb3IgbGF0ZXIgcmV0cmlldmFsCisgICAgICAgIGlmIHNlbGYuZXhwZWN0ZWRfcmVnZXhwIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4cCA9IHNlbGYuZXhwZWN0ZWRfcmVnZXhwCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXhwLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cCA9IHJlLmNvbXBpbGUoZXhwZWN0ZWRfcmVnZXhwKQorICAgICAgICBpZiBub3QgZXhwZWN0ZWRfcmVnZXhwLnNlYXJjaChzdHIoZXhjX3ZhbHVlKSk6CisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oJyIlcyIgZG9lcyBub3QgbWF0Y2ggIiVzIicgJQorICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX3JlZ2V4cC5wYXR0ZXJuLCBzdHIoZXhjX3ZhbHVlKSkpCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgVGVzdENhc2Uob2JqZWN0KToKKyAgICAiIiJBIGNsYXNzIHdob3NlIGluc3RhbmNlcyBhcmUgc2luZ2xlIHRlc3QgY2FzZXMuCisKKyAgICBCeSBkZWZhdWx0LCB0aGUgdGVzdCBjb2RlIGl0c2VsZiBzaG91bGQgYmUgcGxhY2VkIGluIGEgbWV0aG9kIG5hbWVkCisgICAgJ3J1blRlc3QnLgorCisgICAgSWYgdGhlIGZpeHR1cmUgbWF5IGJlIHVzZWQgZm9yIG1hbnkgdGVzdCBjYXNlcywgY3JlYXRlIGFzCisgICAgbWFueSB0ZXN0IG1ldGhvZHMgYXMgYXJlIG5lZWRlZC4gV2hlbiBpbnN0YW50aWF0aW5nIHN1Y2ggYSBUZXN0Q2FzZQorICAgIHN1YmNsYXNzLCBzcGVjaWZ5IGluIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgdGhlIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kCisgICAgdGhhdCB0aGUgaW5zdGFuY2UgaXMgdG8gZXhlY3V0ZS4KKworICAgIFRlc3QgYXV0aG9ycyBzaG91bGQgc3ViY2xhc3MgVGVzdENhc2UgZm9yIHRoZWlyIG93biB0ZXN0cy4gQ29uc3RydWN0aW9uCisgICAgYW5kIGRlY29uc3RydWN0aW9uIG9mIHRoZSB0ZXN0J3MgZW52aXJvbm1lbnQgKCdmaXh0dXJlJykgY2FuIGJlCisgICAgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyB0aGUgJ3NldFVwJyBhbmQgJ3RlYXJEb3duJyBtZXRob2RzIHJlc3BlY3RpdmVseS4KKworICAgIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBvdmVycmlkZSB0aGUgX19pbml0X18gbWV0aG9kLCB0aGUgYmFzZSBjbGFzcworICAgIF9faW5pdF9fIG1ldGhvZCBtdXN0IGFsd2F5cyBiZSBjYWxsZWQuIEl0IGlzIGltcG9ydGFudCB0aGF0IHN1YmNsYXNzZXMKKyAgICBzaG91bGQgbm90IGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIHRoZWlyIF9faW5pdF9fIG1ldGhvZCwgc2luY2UgaW5zdGFuY2VzCisgICAgb2YgdGhlIGNsYXNzZXMgYXJlIGluc3RhbnRpYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHBhcnRzIG9mIHRoZSBmcmFtZXdvcmsKKyAgICBpbiBvcmRlciB0byBiZSBydW4uCisgICAgIiIiCisKKyAgICAjIFRoaXMgYXR0cmlidXRlIGRldGVybWluZXMgd2hpY2ggZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4KKyAgICAjIHRoZSBpbnN0YW5jZSdzIGFzc2VydGlvbiBtZXRob2RzIGZhaWw7IHRlc3QgbWV0aG9kcyByYWlzaW5nIHRoaXMKKyAgICAjIGV4Y2VwdGlvbiB3aWxsIGJlIGRlZW1lZCB0byBoYXZlICdmYWlsZWQnIHJhdGhlciB0aGFuICdlcnJvcmVkJworCisgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IEFzc2VydGlvbkVycm9yCisKKyAgICAjIFRoaXMgYXR0cmlidXRlIGRldGVybWluZXMgd2hldGhlciBsb25nIG1lc3NhZ2VzIChpbmNsdWRpbmcgcmVwciBvZgorICAgICMgb2JqZWN0cyB1c2VkIGluIGFzc2VydCBtZXRob2RzKSB3aWxsIGJlIHByaW50ZWQgb24gZmFpbHVyZSBpbiAqYWRkaXRpb24qCisgICAgIyB0byBhbnkgZXhwbGljaXQgbWVzc2FnZSBwYXNzZWQuCisKKyAgICBsb25nTWVzc2FnZSA9IEZhbHNlCisKKyAgICAjIFRoaXMgYXR0cmlidXRlIHNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZGlmZiBpbiBmYWlsdXJlIG1lc3NhZ2VzCisgICAgIyBieSBhc3NlcnQgbWV0aG9kcyB1c2luZyBkaWZmbGliLiBJdCBpcyBsb29rZWQgdXAgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlCisgICAgIyBzbyBjYW4gYmUgY29uZmlndXJlZCBieSBpbmRpdmlkdWFsIHRlc3RzIGlmIHJlcXVpcmVkLgorCisgICAgbWF4RGlmZiA9IDgwKjgKKworICAgICMgQXR0cmlidXRlIHVzZWQgYnkgVGVzdFN1aXRlIGZvciBjbGFzc1NldFVwCisKKyAgICBfY2xhc3NTZXR1cEZhaWxlZCA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICAiIiJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCB1c2UgdGhlIG5hbWVkIHRlc3QKKyAgICAgICAgICAgbWV0aG9kIHdoZW4gZXhlY3V0ZWQuIFJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIGluc3RhbmNlIGRvZXMKKyAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKKyAgICAgICAgc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gc3VjaCB0ZXN0IG1ldGhvZCBpbiAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXywgbWV0aG9kTmFtZSkpCisgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSB0ZXN0TWV0aG9kLl9fZG9jX18KKyAgICAgICAgc2VsZi5fY2xlYW51cHMgPSBbXQorCisgICAgICAgICMgTWFwIHR5cGVzIHRvIGN1c3RvbSBhc3NlcnRFcXVhbCBmdW5jdGlvbnMgdGhhdCB3aWxsIGNvbXBhcmUKKyAgICAgICAgIyBpbnN0YW5jZXMgb2Ygc2FpZCB0eXBlIGluIG1vcmUgZGV0YWlsIHRvIGdlbmVyYXRlIGEgbW9yZSB1c2VmdWwKKyAgICAgICAgIyBlcnJvciBtZXNzYWdlLgorICAgICAgICBzZWxmLl90eXBlX2VxdWFsaXR5X2Z1bmNzID0ge30KKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKGRpY3QsIHNlbGYuYXNzZXJ0RGljdEVxdWFsKQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMobGlzdCwgc2VsZi5hc3NlcnRMaXN0RXF1YWwpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyh0dXBsZSwgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoc2V0LCBzZWxmLmFzc2VydFNldEVxdWFsKQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoZnJvemVuc2V0LCBzZWxmLmFzc2VydFNldEVxdWFsKQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmModW5pY29kZSwgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbCkKKworICAgIGRlZiBhZGRUeXBlRXF1YWxpdHlGdW5jKHNlbGYsIHR5cGVvYmosIGZ1bmN0aW9uKToKKyAgICAgICAgIiIiQWRkIGEgdHlwZSBzcGVjaWZpYyBhc3NlcnRFcXVhbCBzdHlsZSBmdW5jdGlvbiB0byBjb21wYXJlIGEgdHlwZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBmb3IgdXNlIGJ5IFRlc3RDYXNlIHN1YmNsYXNzZXMgdGhhdCBuZWVkIHRvIHJlZ2lzdGVyCisgICAgICAgIHRoZWlyIG93biB0eXBlIGVxdWFsaXR5IGZ1bmN0aW9ucyB0byBwcm92aWRlIG5pY2VyIGVycm9yIG1lc3NhZ2VzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0eXBlb2JqOiBUaGUgZGF0YSB0eXBlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbiB3aGVuIGJvdGggdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGluIGFzc2VydEVxdWFsKCkuCisgICAgICAgICAgICBmdW5jdGlvbjogVGhlIGNhbGxhYmxlIHRha2luZyB0d28gYXJndW1lbnRzIGFuZCBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICBtc2c9IGFyZ3VtZW50IHRoYXQgcmFpc2VzIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdHdvIGFyZ3VtZW50cyBhcmUgbm90IGVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdHlwZV9lcXVhbGl0eV9mdW5jc1t0eXBlb2JqXSA9IGZ1bmN0aW9uCisKKyAgICBkZWYgYWRkQ2xlYW51cChzZWxmLCBmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQWRkIGEgZnVuY3Rpb24sIHdpdGggYXJndW1lbnRzLCB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdGVzdCBpcworICAgICAgICBjb21wbGV0ZWQuIEZ1bmN0aW9ucyBhZGRlZCBhcmUgY2FsbGVkIG9uIGEgTElGTyBiYXNpcyBhbmQgYXJlCisgICAgICAgIGNhbGxlZCBhZnRlciB0ZWFyRG93biBvbiB0ZXN0IGZhaWx1cmUgb3Igc3VjY2Vzcy4KKworICAgICAgICBDbGVhbnVwIGl0ZW1zIGFyZSBjYWxsZWQgZXZlbiBpZiBzZXRVcCBmYWlscyAodW5saWtlIHRlYXJEb3duKS4iIiIKKyAgICAgICAgc2VsZi5fY2xlYW51cHMuYXBwZW5kKChmdW5jdGlvbiwgYXJncywga3dhcmdzKSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBzZXR0aW5nIHVwIHRoZSB0ZXN0IGZpeHR1cmUgYmVmb3JlIGV4ZXJjaXNpbmcgaXQuIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICJIb29rIG1ldGhvZCBmb3IgZGVjb25zdHJ1Y3RpbmcgdGhlIHRlc3QgZml4dHVyZSBhZnRlciB0ZXN0aW5nIGl0LiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGNsYXNzIGZpeHR1cmUgYmVmb3JlIHJ1bm5pbmcgdGVzdHMgaW4gdGhlIGNsYXNzLiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICJIb29rIG1ldGhvZCBmb3IgZGVjb25zdHJ1Y3RpbmcgdGhlIGNsYXNzIGZpeHR1cmUgYWZ0ZXIgcnVubmluZyBhbGwgdGVzdHMgaW4gdGhlIGNsYXNzLiIKKworICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5UZXN0UmVzdWx0KCkKKworICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgbGluZSBvZgorICAgICAgICB0aGUgc3BlY2lmaWVkIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgZG9jID0gc2VsZi5fdGVzdE1ldGhvZERvYworICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCisKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIG5vdCB0eXBlKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBvdGhlci5fdGVzdE1ldGhvZE5hbWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYuX3Rlc3RNZXRob2ROYW1lLCBzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXykpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKKyAgICAgICAgICAgICAgIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorCisgICAgZGVmIF9hZGRTa2lwKHNlbGYsIHJlc3VsdCwgcmVhc29uKToKKyAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCisgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZFNraXAgbWV0aG9kLCBza2lwcyBub3QgcmVwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgMikKKyAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgb3JpZ19yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmRlZmF1bHRUZXN0UmVzdWx0KCkKKyAgICAgICAgICAgIHN0YXJ0VGVzdFJ1biA9IGdldGF0dHIocmVzdWx0LCAnc3RhcnRUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0YXJ0VGVzdFJ1biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydFRlc3RSdW4oKQorCisgICAgICAgIHNlbGYuX3Jlc3VsdEZvckRvQ2xlYW51cHMgPSByZXN1bHQKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorCisgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorICAgICAgICBpZiAoZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpIG9yCisgICAgICAgICAgICBnZXRhdHRyKHRlc3RNZXRob2QsICJfX3VuaXR0ZXN0X3NraXBfXyIsIEZhbHNlKSk6CisgICAgICAgICAgICAjIElmIHRoZSBjbGFzcyBvciBtZXRob2Qgd2FzIHNraXBwZWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2tpcF93aHkgPSAoZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdldGF0dHIodGVzdE1ldGhvZCwgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2tpcF93aHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VXAoKQorICAgICAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHN0cihlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmUgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gZ2V0YXR0cihyZXN1bHQsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBhZGRFeHBlY3RlZEZhaWx1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgZS5leGNfaW5mbykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAgICAgICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkVW5leHBlY3RlZFN1Y2Nlc3MgbWV0aG9kLCByZXBvcnRpbmcgYXMgZmFpbHVyZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTa2lwVGVzdCBhcyBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc3RyKGUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisKKyAgICAgICAgICAgIGNsZWFuVXBTdWNjZXNzID0gc2VsZi5kb0NsZWFudXBzKCkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzIGFuZCBjbGVhblVwU3VjY2VzcworICAgICAgICAgICAgaWYgc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisgICAgICAgICAgICBpZiBvcmlnX3Jlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuID0gZ2V0YXR0cihyZXN1bHQsICdzdG9wVGVzdFJ1bicsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgc3RvcFRlc3RSdW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuKCkKKworICAgIGRlZiBkb0NsZWFudXBzKHNlbGYpOgorICAgICAgICAiIiJFeGVjdXRlIGFsbCBjbGVhbnVwIGZ1bmN0aW9ucy4gTm9ybWFsbHkgY2FsbGVkIGZvciB5b3UgYWZ0ZXIKKyAgICAgICAgdGVhckRvd24uIiIiCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3Jlc3VsdEZvckRvQ2xlYW51cHMKKyAgICAgICAgb2sgPSBUcnVlCisgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgorICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgtMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBvayA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICByZXR1cm4gb2sKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCisKKyAgICBkZWYgZGVidWcoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgZXJyb3JzIGluIGEgVGVzdFJlc3VsdCIiIgorICAgICAgICBzZWxmLnNldFVwKCkKKyAgICAgICAgZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkoKQorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKyAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6CisgICAgICAgICAgICBmdW5jdGlvbiwgYXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKC0xKQorICAgICAgICAgICAgZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHNraXBUZXN0KHNlbGYsIHJlYXNvbik6CisgICAgICAgICIiIlNraXAgdGhpcyB0ZXN0LiIiIgorICAgICAgICByYWlzZSBTa2lwVGVzdChyZWFzb24pCisKKyAgICBkZWYgZmFpbChzZWxmLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaW1tZWRpYXRlbHksIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuIiIiCisgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0RmFsc2Uoc2VsZiwgZXhwciwgbXNnPU5vbmUpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGZhbHNlLiIiIgorICAgICAgICBpZiBleHByOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csICIlcyBpcyBub3QgZmFsc2UiICUgc2FmZV9yZXByKGV4cHIpKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLiIiIgorICAgICAgICBpZiBub3QgZXhwcjoKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAiJXMgaXMgbm90IHRydWUiICUgc2FmZV9yZXByKGV4cHIpKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIGRlZiBfZm9ybWF0TWVzc2FnZShzZWxmLCBtc2csIHN0YW5kYXJkTXNnKToKKyAgICAgICAgIiIiSG9ub3VyIHRoZSBsb25nTWVzc2FnZSBhdHRyaWJ1dGUgd2hlbiBnZW5lcmF0aW5nIGZhaWx1cmUgbWVzc2FnZXMuCisgICAgICAgIElmIGxvbmdNZXNzYWdlIGlzIEZhbHNlIHRoaXMgbWVhbnM6CisgICAgICAgICogVXNlIG9ubHkgYW4gZXhwbGljaXQgbWVzc2FnZSBpZiBpdCBpcyBwcm92aWRlZAorICAgICAgICAqIE90aGVyd2lzZSB1c2UgdGhlIHN0YW5kYXJkIG1lc3NhZ2UgZm9yIHRoZSBhc3NlcnQKKworICAgICAgICBJZiBsb25nTWVzc2FnZSBpcyBUcnVlOgorICAgICAgICAqIFVzZSB0aGUgc3RhbmRhcmQgbWVzc2FnZQorICAgICAgICAqIElmIGFuIGV4cGxpY2l0IG1lc3NhZ2UgaXMgcHJvdmlkZWQsIHBsdXMgJyA6ICcgYW5kIHRoZSBleHBsaWNpdCBtZXNzYWdlCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb25nTWVzc2FnZToKKyAgICAgICAgICAgIHJldHVybiBtc2cgb3Igc3RhbmRhcmRNc2cKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNc2cKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBkb24ndCBzd2l0Y2ggdG8gJ3t9JyBmb3JtYXR0aW5nIGluIFB5dGhvbiAyLlgKKyAgICAgICAgICAgICMgaXQgY2hhbmdlcyB0aGUgd2F5IHVuaWNvZGUgaW5wdXQgaXMgaGFuZGxlZAorICAgICAgICAgICAgcmV0dXJuICclcyA6ICVzJyAlIChzdGFuZGFyZE1zZywgbXNnKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuICAnJXMgOiAlcycgJSAoc2FmZV9yZXByKHN0YW5kYXJkTXNnKSwgc2FmZV9yZXByKG1zZykpCisKKworICAgIGRlZiBhc3NlcnRSYWlzZXMoc2VsZiwgZXhjQ2xhc3MsIGNhbGxhYmxlT2JqPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkZhaWwgdW5sZXNzIGFuIGV4Y2VwdGlvbiBvZiBjbGFzcyBleGNDbGFzcyBpcyB0aHJvd24KKyAgICAgICAgICAgYnkgY2FsbGFibGVPYmogd2hlbiBpbnZva2VkIHdpdGggYXJndW1lbnRzIGFyZ3MgYW5kIGtleXdvcmQKKyAgICAgICAgICAgYXJndW1lbnRzIGt3YXJncy4gSWYgYSBkaWZmZXJlbnQgdHlwZSBvZiBleGNlcHRpb24gaXMKKyAgICAgICAgICAgdGhyb3duLCBpdCB3aWxsIG5vdCBiZSBjYXVnaHQsIGFuZCB0aGUgdGVzdCBjYXNlIHdpbGwgYmUKKyAgICAgICAgICAgZGVlbWVkIHRvIGhhdmUgc3VmZmVyZWQgYW4gZXJyb3IsIGV4YWN0bHkgYXMgZm9yIGFuCisgICAgICAgICAgIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgorCisgICAgICAgICAgIElmIGNhbGxlZCB3aXRoIGNhbGxhYmxlT2JqIG9taXR0ZWQgb3IgTm9uZSwgd2lsbCByZXR1cm4gYQorICAgICAgICAgICBjb250ZXh0IG9iamVjdCB1c2VkIGxpa2UgdGhpczo6CisKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQorCisgICAgICAgICAgIFRoZSBjb250ZXh0IG1hbmFnZXIga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbiBhcworICAgICAgICAgICB0aGUgJ2V4Y2VwdGlvbicgYXR0cmlidXRlLiBUaGlzIGFsbG93cyB5b3UgdG8gaW5zcGVjdCB0aGUKKyAgICAgICAgICAgZXhjZXB0aW9uIGFmdGVyIHRoZSBhc3NlcnRpb246OgorCisgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisgICAgICAgICAgICAgICB0aGVfZXhjZXB0aW9uID0gY20uZXhjZXB0aW9uCisgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZV9leGNlcHRpb24uZXJyb3JfY29kZSwgMykKKyAgICAgICAgIiIiCisgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0UmFpc2VzQ29udGV4dChleGNDbGFzcywgc2VsZikKKyAgICAgICAgaWYgY2FsbGFibGVPYmogaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0CisgICAgICAgIHdpdGggY29udGV4dDoKKyAgICAgICAgICAgIGNhbGxhYmxlT2JqKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgorICAgICAgICAiIiJHZXQgYSBkZXRhaWxlZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgdHlwZXMgb2YgdGhlIHR3byBhcmdzLgorCisgICAgICAgIFJldHVybnM6IEEgY2FsbGFibGUgYWNjZXB0aW5nIChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkgdGhhdCB3aWxsCisgICAgICAgIHJhaXNlIGEgZmFpbHVyZSBleGNlcHRpb24gaWYgZmlyc3QgIT0gc2Vjb25kIHdpdGggYSB1c2VmdWwgaHVtYW4KKyAgICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhvc2UgdHlwZXMuCisgICAgICAgICIiIgorICAgICAgICAjCisgICAgICAgICMgTk9URShncmVnb3J5LnAuc21pdGgpOiBJIGNvbnNpZGVyZWQgaXNpbnN0YW5jZShmaXJzdCwgdHlwZShzZWNvbmQpKQorICAgICAgICAjIGFuZCB2aWNlIHZlcnNhLiAgSSBvcHRlZCBmb3IgdGhlIGNvbnNlcnZhdGl2ZSBhcHByb2FjaCBpbiBjYXNlCisgICAgICAgICMgc3ViY2xhc3NlcyBhcmUgbm90IGludGVuZGVkIHRvIGJlIGNvbXBhcmVkIGluIGRldGFpbCB0byB0aGVpciBzdXBlcgorICAgICAgICAjIGNsYXNzIGluc3RhbmNlcyB1c2luZyBhIHR5cGUgZXF1YWxpdHkgZnVuYy4gIFRoaXMgbWVhbnMgdGVzdGluZworICAgICAgICAjIHN1YnR5cGVzIHdvbid0IGF1dG9tYWdpY2FsbHkgdXNlIHRoZSBkZXRhaWxlZCBjb21wYXJpc29uLiAgQ2FsbGVycworICAgICAgICAjIHNob3VsZCB1c2UgdGhlaXIgdHlwZSBzcGVjaWZpYyBhc3NlcnRTcGFtRXF1YWwgbWV0aG9kIHRvIGNvbXBhcmUKKyAgICAgICAgIyBzdWJjbGFzc2VzIGlmIHRoZSBkZXRhaWxlZCBjb21wYXJpc29uIGlzIGRlc2lyZWQgYW5kIGFwcHJvcHJpYXRlLgorICAgICAgICAjIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU3OC4KKyAgICAgICAgIworICAgICAgICBpZiB0eXBlKGZpcnN0KSBpcyB0eXBlKHNlY29uZCk6CisgICAgICAgICAgICBhc3NlcnRlciA9IHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3MuZ2V0KHR5cGUoZmlyc3QpKQorICAgICAgICAgICAgaWYgYXNzZXJ0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzc2VydGVyCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2VBc3NlcnRFcXVhbAorCisgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCisgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIHVuZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgJz09JworICAgICAgICAgICBvcGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydGlvbl9mdW5jID0gc2VsZi5fZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKGZpcnN0LCBzZWNvbmQpCisgICAgICAgIGFzc2VydGlvbl9mdW5jKGZpcnN0LCBzZWNvbmQsIG1zZz1tc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgJz09JworICAgICAgICAgICBvcGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBmaXJzdCAhPSBzZWNvbmQ6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgJyVzID09ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpKSkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKworICAgIGRlZiBhc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBwbGFjZXM9Tm9uZSwgbXNnPU5vbmUsIGRlbHRhPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCisgICAgICAgICAgIGRpZmZlcmVuY2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCisgICAgICAgICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVybywgb3IgYnkgY29tcGFyaW5nIHRoYXQgdGhlCisgICAgICAgICAgIGJldHdlZW4gdGhlIHR3byBvYmplY3RzIGlzIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gZGVsdGEuCisKKyAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChmcm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQorICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCisKKyAgICAgICAgICAgSWYgdGhlIHR3byBvYmplY3RzIGNvbXBhcmUgZXF1YWwgdGhlbiB0aGV5IHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgICBjb21wYXJlIGFsbW9zdCBlcXVhbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZpcnN0ID09IHNlY29uZDoKKyAgICAgICAgICAgICMgc2hvcnRjdXQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBkZWx0YSBpcyBub3QgTm9uZSBhbmQgcGxhY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzcGVjaWZ5IGRlbHRhIG9yIHBsYWNlcyBub3QgYm90aCIpCisKKyAgICAgICAgaWYgZGVsdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBhYnMoZmlyc3QgLSBzZWNvbmQpIDw9IGRlbHRhOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcyB3aXRoaW4gJXMgZGVsdGEnICUgKHNhZmVfcmVwcihmaXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZGVsdGEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGxhY2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGxhY2VzID0gNworCisgICAgICAgICAgICBpZiByb3VuZChhYnMoc2Vjb25kLWZpcnN0KSwgcGxhY2VzKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcyB3aXRoaW4gJXIgcGxhY2VzJyAlIChzYWZlX3JlcHIoZmlyc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlcykKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydE5vdEFsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz1Ob25lLCBtc2c9Tm9uZSwgZGVsdGE9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCisgICAgICAgICAgIGRpZmZlcmVuY2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCisgICAgICAgICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVybywgb3IgYnkgY29tcGFyaW5nIHRoYXQgdGhlCisgICAgICAgICAgIGJldHdlZW4gdGhlIHR3byBvYmplY3RzIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gZGVsdGEuCisKKyAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChmcm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQorICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCisKKyAgICAgICAgICAgT2JqZWN0cyB0aGF0IGFyZSBlcXVhbCBhdXRvbWF0aWNhbGx5IGZhaWwuCisgICAgICAgICIiIgorICAgICAgICBpZiBkZWx0YSBpcyBub3QgTm9uZSBhbmQgcGxhY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzcGVjaWZ5IGRlbHRhIG9yIHBsYWNlcyBub3QgYm90aCIpCisgICAgICAgIGlmIGRlbHRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IChmaXJzdCA9PSBzZWNvbmQpIGFuZCBhYnMoZmlyc3QgLSBzZWNvbmQpID4gZGVsdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyA9PSAlcyB3aXRoaW4gJXMgZGVsdGEnICUgKHNhZmVfcmVwcihmaXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZGVsdGEpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGxhY2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGxhY2VzID0gNworICAgICAgICAgICAgaWYgbm90IChmaXJzdCA9PSBzZWNvbmQpIGFuZCByb3VuZChhYnMoc2Vjb25kLWZpcnN0KSwgcGxhY2VzKSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgPT0gJXMgd2l0aGluICVyIHBsYWNlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzKQorCisgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgICMgU3lub255bXMgZm9yIGFzc2VydGlvbiBtZXRob2RzCisKKyAgICAjIFRoZSBwbHVyYWxzIGFyZSB1bmRvY3VtZW50ZWQuICBLZWVwIHRoZW0gdGhhdCB3YXkgdG8gZGlzY291cmFnZSB1c2UuCisgICAgIyBEbyBub3QgYWRkIG1vcmUuICBEbyBub3QgcmVtb3ZlLgorICAgICMgR29pbmcgdGhyb3VnaCBhIGRlcHJlY2F0aW9uIGN5Y2xlIG9uIHRoZXNlIHdvdWxkIGFubm95IG1hbnkgcGVvcGxlLgorICAgIGFzc2VydEVxdWFscyA9IGFzc2VydEVxdWFsCisgICAgYXNzZXJ0Tm90RXF1YWxzID0gYXNzZXJ0Tm90RXF1YWwKKyAgICBhc3NlcnRBbG1vc3RFcXVhbHMgPSBhc3NlcnRBbG1vc3RFcXVhbAorICAgIGFzc2VydE5vdEFsbW9zdEVxdWFscyA9IGFzc2VydE5vdEFsbW9zdEVxdWFsCisgICAgYXNzZXJ0XyA9IGFzc2VydFRydWUKKworICAgICMgVGhlc2UgZmFpbCogYXNzZXJ0aW9uIG1ldGhvZCBuYW1lcyBhcmUgcGVuZGluZyBkZXByZWNhdGlvbiBhbmQgd2lsbAorICAgICMgYmUgYSBEZXByZWNhdGlvbldhcm5pbmcgaW4gMy4yOyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU3OAorICAgIGRlZiBfZGVwcmVjYXRlKG9yaWdpbmFsX2Z1bmMpOgorICAgICAgICBkZWYgZGVwcmVjYXRlZF9mdW5jKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICdQbGVhc2UgdXNlIHswfSBpbnN0ZWFkLicuZm9ybWF0KG9yaWdpbmFsX2Z1bmMuX19uYW1lX18pLAorICAgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxfZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBkZXByZWNhdGVkX2Z1bmMKKworICAgIGZhaWxVbmxlc3NFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0RXF1YWwpCisgICAgZmFpbElmRXF1YWwgPSBfZGVwcmVjYXRlKGFzc2VydE5vdEVxdWFsKQorICAgIGZhaWxVbmxlc3NBbG1vc3RFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0QWxtb3N0RXF1YWwpCisgICAgZmFpbElmQWxtb3N0RXF1YWwgPSBfZGVwcmVjYXRlKGFzc2VydE5vdEFsbW9zdEVxdWFsKQorICAgIGZhaWxVbmxlc3MgPSBfZGVwcmVjYXRlKGFzc2VydFRydWUpCisgICAgZmFpbFVubGVzc1JhaXNlcyA9IF9kZXByZWNhdGUoYXNzZXJ0UmFpc2VzKQorICAgIGZhaWxJZiA9IF9kZXByZWNhdGUoYXNzZXJ0RmFsc2UpCisKKyAgICBkZWYgYXNzZXJ0U2VxdWVuY2VFcXVhbChzZWxmLCBzZXExLCBzZXEyLCBtc2c9Tm9uZSwgc2VxX3R5cGU9Tm9uZSk6CisgICAgICAgICIiIkFuIGVxdWFsaXR5IGFzc2VydGlvbiBmb3Igb3JkZXJlZCBzZXF1ZW5jZXMgKGxpa2UgbGlzdHMgYW5kIHR1cGxlcykuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGZ1bmN0aW9uLCBhIHZhbGlkIG9yZGVyZWQgc2VxdWVuY2UgdHlwZSBpcyBvbmUKKyAgICAgICAgd2hpY2ggY2FuIGJlIGluZGV4ZWQsIGhhcyBhIGxlbmd0aCwgYW5kIGhhcyBhbiBlcXVhbGl0eSBvcGVyYXRvci4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgc2VxMTogVGhlIGZpcnN0IHNlcXVlbmNlIHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXEyOiBUaGUgc2Vjb25kIHNlcXVlbmNlIHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXFfdHlwZTogVGhlIGV4cGVjdGVkIGRhdGF0eXBlIG9mIHRoZSBzZXF1ZW5jZXMsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgc2hvdWxkIGJlIGVuZm9yY2VkLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VxX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZXFfdHlwZV9uYW1lID0gc2VxX3R5cGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlcTEsIHNlcV90eXBlKToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oJ0ZpcnN0IHNlcXVlbmNlIGlzIG5vdCBhICVzOiAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZXFfdHlwZV9uYW1lLCBzYWZlX3JlcHIoc2VxMSkpKQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VxMiwgc2VxX3R5cGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignU2Vjb25kIHNlcXVlbmNlIGlzIG5vdCBhICVzOiAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZXFfdHlwZV9uYW1lLCBzYWZlX3JlcHIoc2VxMikpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VxX3R5cGVfbmFtZSA9ICJzZXF1ZW5jZSIKKworICAgICAgICBkaWZmZXJpbmcgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxlbjEgPSBsZW4oc2VxMSkKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgZGlmZmVyaW5nID0gJ0ZpcnN0ICVzIGhhcyBubyBsZW5ndGguICAgIE5vbi1zZXF1ZW5jZT8nICUgKAorICAgICAgICAgICAgICAgICAgICBzZXFfdHlwZV9uYW1lKQorCisgICAgICAgIGlmIGRpZmZlcmluZyBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxlbjIgPSBsZW4oc2VxMikKKyAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBkaWZmZXJpbmcgPSAnU2Vjb25kICVzIGhhcyBubyBsZW5ndGguICAgIE5vbi1zZXF1ZW5jZT8nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VxX3R5cGVfbmFtZSkKKworICAgICAgICBpZiBkaWZmZXJpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlcTEgPT0gc2VxMjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgc2VxMV9yZXByID0gc2FmZV9yZXByKHNlcTEpCisgICAgICAgICAgICBzZXEyX3JlcHIgPSBzYWZlX3JlcHIoc2VxMikKKyAgICAgICAgICAgIGlmIGxlbihzZXExX3JlcHIpID4gMzA6CisgICAgICAgICAgICAgICAgc2VxMV9yZXByID0gc2VxMV9yZXByWzozMF0gKyAnLi4uJworICAgICAgICAgICAgaWYgbGVuKHNlcTJfcmVwcikgPiAzMDoKKyAgICAgICAgICAgICAgICBzZXEyX3JlcHIgPSBzZXEyX3JlcHJbOjMwXSArICcuLi4nCisgICAgICAgICAgICBlbGVtZW50cyA9IChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwgc2VxMV9yZXByLCBzZXEyX3JlcHIpCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSBlbGVtZW50cworCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobWluKGxlbjEsIGxlbjIpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0xID0gc2VxMVtpXQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5VbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCBvZiBmaXJzdCAlc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSwgc2VxX3R5cGVfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0yID0gc2VxMltpXQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5VbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCBvZiBzZWNvbmQgJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIHNlcV90eXBlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgaWYgaXRlbTEgIT0gaXRlbTI6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuRmlyc3QgZGlmZmVyaW5nIGVsZW1lbnQgJWQ6XG4lc1xuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIGl0ZW0xLCBpdGVtMikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIChsZW4xID09IGxlbjIgYW5kIHNlcV90eXBlIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgIHR5cGUoc2VxMSkgIT0gdHlwZShzZXEyKSk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIHNlcXVlbmNlcyBhcmUgdGhlIHNhbWUsIGJ1dCBoYXZlIGRpZmZlcmluZyB0eXBlcy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGxlbjEgPiBsZW4yOgorICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuRmlyc3QgJXMgY29udGFpbnMgJWQgYWRkaXRpb25hbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMSAtIGxlbjIpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuMiwgc2VxMVtsZW4yXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIGZpcnN0ICVzXG4nICUgKGxlbjIsIHNlcV90eXBlX25hbWUpKQorICAgICAgICAgICAgZWxpZiBsZW4xIDwgbGVuMjoKKyAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcblNlY29uZCAlcyBjb250YWlucyAlZCBhZGRpdGlvbmFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzLlxuJyAlIChzZXFfdHlwZV9uYW1lLCBsZW4yIC0gbGVuMSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdGaXJzdCBleHRyYSBlbGVtZW50ICVkOlxuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4xLCBzZXEyW2xlbjFdKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1VuYWJsZSB0byBpbmRleCBlbGVtZW50ICVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2Ygc2Vjb25kICVzXG4nICUgKGxlbjEsIHNlcV90eXBlX25hbWUpKQorICAgICAgICBzdGFuZGFyZE1zZyA9IGRpZmZlcmluZworICAgICAgICBkaWZmTXNnID0gJ1xuJyArICdcbicuam9pbigKKyAgICAgICAgICAgIGRpZmZsaWIubmRpZmYocHByaW50LnBmb3JtYXQoc2VxMSkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChzZXEyKS5zcGxpdGxpbmVzKCkpKQorICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZk1zZykKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgZGVmIF90cnVuY2F0ZU1lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZGlmZik6CisgICAgICAgIG1heF9kaWZmID0gc2VsZi5tYXhEaWZmCisgICAgICAgIGlmIG1heF9kaWZmIGlzIE5vbmUgb3IgbGVuKGRpZmYpIDw9IG1heF9kaWZmOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgKyBkaWZmCisgICAgICAgIHJldHVybiBtZXNzYWdlICsgKERJRkZfT01JVFRFRCAlIGxlbihkaWZmKSkKKworICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgbGlzdDEsIGxpc3QyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkEgbGlzdC1zcGVjaWZpYyBlcXVhbGl0eSBhc3NlcnRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGxpc3QxOiBUaGUgZmlyc3QgbGlzdCB0byBjb21wYXJlLgorICAgICAgICAgICAgbGlzdDI6IFRoZSBzZWNvbmQgbGlzdCB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwobGlzdDEsIGxpc3QyLCBtc2csIHNlcV90eXBlPWxpc3QpCisKKyAgICBkZWYgYXNzZXJ0VHVwbGVFcXVhbChzZWxmLCB0dXBsZTEsIHR1cGxlMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJBIHR1cGxlLXNwZWNpZmljIGVxdWFsaXR5IGFzc2VydGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHVwbGUxOiBUaGUgZmlyc3QgdHVwbGUgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHR1cGxlMjogVGhlIHNlY29uZCB0dXBsZSB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlMSwgdHVwbGUyLCBtc2csIHNlcV90eXBlPXR1cGxlKQorCisgICAgZGVmIGFzc2VydFNldEVxdWFsKHNlbGYsIHNldDEsIHNldDIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQSBzZXQtc3BlY2lmaWMgZXF1YWxpdHkgYXNzZXJ0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXQxOiBUaGUgZmlyc3Qgc2V0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXQyOiBUaGUgc2Vjb25kIHNldCB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorCisgICAgICAgIGFzc2VydFNldEVxdWFsIHVzZXMgZHVja3R5cGluZyB0byBzdXBwb3J0IGRpZmZlcmVudCB0eXBlcyBvZiBzZXRzLCBhbmQKKyAgICAgICAgaXMgb3B0aW1pemVkIGZvciBzZXRzIHNwZWNpZmljYWxseSAocGFyYW1ldGVycyBtdXN0IHN1cHBvcnQgYQorICAgICAgICBkaWZmZXJlbmNlIG1ldGhvZCkuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWZmZXJlbmNlMSA9IHNldDEuZGlmZmVyZW5jZShzZXQyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnZhbGlkIHR5cGUgd2hlbiBhdHRlbXB0aW5nIHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpcnN0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlmZmVyZW5jZTIgPSBzZXQyLmRpZmZlcmVuY2Uoc2V0MSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW52YWxpZCB0eXBlIHdoZW4gYXR0ZW1wdGluZyBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzZWNvbmQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKworICAgICAgICBpZiBub3QgKGRpZmZlcmVuY2UxIG9yIGRpZmZlcmVuY2UyKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZGlmZmVyZW5jZTE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0l0ZW1zIGluIHRoZSBmaXJzdCBzZXQgYnV0IG5vdCB0aGUgc2Vjb25kOicpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBkaWZmZXJlbmNlMToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQocmVwcihpdGVtKSkKKyAgICAgICAgaWYgZGlmZmVyZW5jZTI6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0l0ZW1zIGluIHRoZSBzZWNvbmQgc2V0IGJ1dCBub3QgdGhlIGZpcnN0OicpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBkaWZmZXJlbmNlMjoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQocmVwcihpdGVtKSkKKworICAgICAgICBzdGFuZGFyZE1zZyA9ICdcbicuam9pbihsaW5lcykKKyAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SW4oc2VsZiwgbWVtYmVyLCBjb250YWluZXIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbWVtYmVyIG5vdCBpbiBjb250YWluZXI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZm91bmQgaW4gJXMnICUgKHNhZmVfcmVwcihtZW1iZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoY29udGFpbmVyKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydE5vdEluKHNlbGYsIG1lbWJlciwgY29udGFpbmVyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBub3QgaW4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBtZW1iZXIgaW4gY29udGFpbmVyOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgdW5leHBlY3RlZGx5IGZvdW5kIGluICVzJyAlIChzYWZlX3JlcHIobWVtYmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKGNvbnRhaW5lcikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJcyhzZWxmLCBleHByMSwgZXhwcjIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgZXhwcjEgaXMgbm90IGV4cHIyOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgaXMgbm90ICVzJyAlIChzYWZlX3JlcHIoZXhwcjEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKGV4cHIyKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm90KHNlbGYsIGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaXMgbm90IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgZXhwcjEgaXMgZXhwcjI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICd1bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiAlcycgJSAoc2FmZV9yZXByKGV4cHIxKSwpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnREaWN0RXF1YWwoc2VsZiwgZDEsIGQyLCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkMSwgZGljdCwgJ0ZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhIGRpY3Rpb25hcnknKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCisKKyAgICAgICAgaWYgZDEgIT0gZDI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHNlbGYsIGV4cGVjdGVkLCBhY3R1YWwsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWN0dWFsIGlzIGEgc3VwZXJzZXQgb2YgZXhwZWN0ZWQuIiIiCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBtaXNtYXRjaGVkID0gW10KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZXhwZWN0ZWQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGFjdHVhbDoKKyAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChrZXkpCisgICAgICAgICAgICBlbGlmIHZhbHVlICE9IGFjdHVhbFtrZXldOgorICAgICAgICAgICAgICAgIG1pc21hdGNoZWQuYXBwZW5kKCclcywgZXhwZWN0ZWQ6ICVzLCBhY3R1YWw6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhZmVfcmVwcihrZXkpLCBzYWZlX3JlcHIodmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoYWN0dWFsW2tleV0pKSkKKworICAgICAgICBpZiBub3QgKG1pc3Npbmcgb3IgbWlzbWF0Y2hlZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdGFuZGFyZE1zZyA9ICcnCisgICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICdNaXNzaW5nOiAlcycgJSAnLCcuam9pbihzYWZlX3JlcHIobSkgZm9yIG0gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nKQorICAgICAgICBpZiBtaXNtYXRjaGVkOgorICAgICAgICAgICAgaWYgc3RhbmRhcmRNc2c6CisgICAgICAgICAgICAgICAgc3RhbmRhcmRNc2cgKz0gJzsgJworICAgICAgICAgICAgc3RhbmRhcmRNc2cgKz0gJ01pc21hdGNoZWQgdmFsdWVzOiAlcycgJSAnLCcuam9pbihtaXNtYXRjaGVkKQorCisgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydEl0ZW1zRXF1YWwoc2VsZiwgZXhwZWN0ZWRfc2VxLCBhY3R1YWxfc2VxLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkFuIHVub3JkZXJlZCBzZXF1ZW5jZSBzcGVjaWZpYyBjb21wYXJpc29uLiBJdCBhc3NlcnRzIHRoYXQKKyAgICAgICAgYWN0dWFsX3NlcSBhbmQgZXhwZWN0ZWRfc2VxIGhhdmUgdGhlIHNhbWUgZWxlbWVudCBjb3VudHMuCisgICAgICAgIEVxdWl2YWxlbnQgdG86OgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZXIoaXRlcihhY3R1YWxfc2VxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIoaXRlcihleHBlY3RlZF9zZXEpKSkKKworICAgICAgICBBc3NlcnRzIHRoYXQgZWFjaCBlbGVtZW50IGhhcyB0aGUgc2FtZSBjb3VudCBpbiBib3RoIHNlcXVlbmNlcy4KKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIC0gWzAsIDEsIDFdIGFuZCBbMSwgMCwgMV0gY29tcGFyZSBlcXVhbC4KKyAgICAgICAgICAgIC0gWzAsIDAsIDFdIGFuZCBbMCwgMV0gY29tcGFyZSB1bmVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgorICAgICAgICAgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcgcmFpc2VkIGR1cmluZyB0aGUgc29ydGluZworICAgICAgICAgICAgICAgIGZvciBfbXNnIGluIFsiKGNvZGV8ZGljdHx0eXBlKSBpbmVxdWFsaXR5IGNvbXBhcmlzb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWx0aW5fZnVuY3Rpb25fb3JfbWV0aG9kIG9yZGVyIGNvbXBhcmlzb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhcmluZyB1bmVxdWFsIHR5cGVzIl06CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBfbXNnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYWN0dWFsID0gY29sbGVjdGlvbnMuQ291bnRlcihpdGVyKGFjdHVhbF9zZXEpKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gY29sbGVjdGlvbnMuQ291bnRlcihpdGVyKGV4cGVjdGVkX3NlcSkpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICMgVW5zb3J0YWJsZSBpdGVtcyAoZXhhbXBsZTogc2V0KCksIGNvbXBsZXgoKSwgLi4uKQorICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxpc3QoYWN0dWFsX3NlcSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxpc3QoZXhwZWN0ZWRfc2VxKQorICAgICAgICAgICAgICAgIG1pc3NpbmcsIHVuZXhwZWN0ZWQgPSB1bm9yZGVyYWJsZV9saXN0X2RpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgYWN0dWFsID09IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBtaXNzaW5nID0gbGlzdChleHBlY3RlZCAtIGFjdHVhbCkKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkID0gbGlzdChhY3R1YWwgLSBleHBlY3RlZCkKKworICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICBpZiBtaXNzaW5nOgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgnRXhwZWN0ZWQsIGJ1dCBtaXNzaW5nOlxuICAgICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIobWlzc2luZykpCisgICAgICAgIGlmIHVuZXhwZWN0ZWQ6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCdVbmV4cGVjdGVkLCBidXQgcHJlc2VudDpcbiAgICAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHVuZXhwZWN0ZWQpKQorICAgICAgICBpZiBlcnJvcnM6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICdcbicuam9pbihlcnJvcnMpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkFzc2VydCB0aGF0IHR3byBtdWx0aS1saW5lIHN0cmluZ3MgYXJlIGVxdWFsLiIiIgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlyc3QsIGJhc2VzdHJpbmcsCisgICAgICAgICAgICAgICAgJ0ZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWNvbmQsIGJhc2VzdHJpbmcsCisgICAgICAgICAgICAgICAgJ1NlY29uZCBhcmd1bWVudCBpcyBub3QgYSBzdHJpbmcnKQorCisgICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKKyAgICAgICAgICAgIGZpcnN0bGluZXMgPSBmaXJzdC5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IHNlY29uZC5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKKyAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KKyAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBkaWZmID0gJ1xuJyArICcnLmpvaW4oZGlmZmxpYi5uZGlmZihmaXJzdGxpbmVzLCBzZWNvbmRsaW5lcykpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZikKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydExlc3Moc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPCBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBhIDwgYjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIG5vdCBsZXNzIHRoYW4gJXMnICUgKHNhZmVfcmVwcihhKSwgc2FmZV9yZXByKGIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0TGVzc0VxdWFsKHNlbGYsIGEsIGIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIDw9IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGEgPD0gYjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnICUgKHNhZmVfcmVwcihhKSwgc2FmZV9yZXByKGIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0R3JlYXRlcihzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA+IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGEgPiBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGdyZWF0ZXIgdGhhbiAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRHcmVhdGVyRXF1YWwoc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPj0gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA+PSBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJc05vbmUoc2VsZiwgb2JqLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlNhbWUgYXMgc2VsZi5hc3NlcnRUcnVlKG9iaiBpcyBOb25lKSwgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgaXMgbm90IE5vbmUnICUgKHNhZmVfcmVwcihvYmopLCkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm90Tm9uZShzZWxmLCBvYmosIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW5jbHVkZWQgZm9yIHN5bW1ldHJ5IHdpdGggYXNzZXJ0SXNOb25lLiIiIgorICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ3VuZXhwZWN0ZWRseSBOb25lJworICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscywgbXNnPU5vbmUpOgorICAgICAgICAiIiJTYW1lIGFzIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iaiwgY2xzKSksIHdpdGggYSBuaWNlcgorICAgICAgICBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgY2xzKToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAlcicgJSAoc2FmZV9yZXByKG9iaiksIGNscykKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZiwgb2JqLCBjbHMsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW5jbHVkZWQgZm9yIHN5bW1ldHJ5IHdpdGggYXNzZXJ0SXNJbnN0YW5jZS4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGNscyk6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBhbiBpbnN0YW5jZSBvZiAlcicgJSAoc2FmZV9yZXByKG9iaiksIGNscykKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydFJhaXNlc1JlZ2V4cChzZWxmLCBleHBlY3RlZF9leGNlcHRpb24sIGV4cGVjdGVkX3JlZ2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJBc3NlcnRzIHRoYXQgdGhlIG1lc3NhZ2UgaW4gYSByYWlzZWQgZXhjZXB0aW9uIG1hdGNoZXMgYSByZWdleHAuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV4cGVjdGVkX2V4Y2VwdGlvbjogRXhjZXB0aW9uIGNsYXNzIGV4cGVjdGVkIHRvIGJlIHJhaXNlZC4KKyAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cDogUmVnZXhwIChyZSBwYXR0ZXJuIG9iamVjdCBvciBzdHJpbmcpIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZvdW5kIGluIGVycm9yIG1lc3NhZ2UuCisgICAgICAgICAgICBjYWxsYWJsZV9vYmo6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4KKyAgICAgICAgICAgIGFyZ3M6IEV4dHJhIGFyZ3MuCisgICAgICAgICAgICBrd2FyZ3M6IEV4dHJhIGt3YXJncy4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0UmFpc2VzQ29udGV4dChleHBlY3RlZF9leGNlcHRpb24sIHNlbGYsIGV4cGVjdGVkX3JlZ2V4cCkKKyAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dAorICAgICAgICB3aXRoIGNvbnRleHQ6CisgICAgICAgICAgICBjYWxsYWJsZV9vYmooKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFJlZ2V4cE1hdGNoZXMoc2VsZiwgdGV4dCwgZXhwZWN0ZWRfcmVnZXhwLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgdGhlIHRlc3QgdW5sZXNzIHRoZSB0ZXh0IG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9yZWdleHAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXhwID0gcmUuY29tcGlsZShleHBlY3RlZF9yZWdleHApCisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleHAuc2VhcmNoKHRleHQpOgorICAgICAgICAgICAgbXNnID0gbXNnIG9yICJSZWdleHAgZGlkbid0IG1hdGNoIgorICAgICAgICAgICAgbXNnID0gJyVzOiAlciBub3QgZm91bmQgaW4gJXInICUgKG1zZywgZXhwZWN0ZWRfcmVnZXhwLnBhdHRlcm4sIHRleHQpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydE5vdFJlZ2V4cE1hdGNoZXMoc2VsZiwgdGV4dCwgdW5leHBlY3RlZF9yZWdleHAsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCB0aGUgdGVzdCBpZiB0aGUgdGV4dCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodW5leHBlY3RlZF9yZWdleHAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgdW5leHBlY3RlZF9yZWdleHAgPSByZS5jb21waWxlKHVuZXhwZWN0ZWRfcmVnZXhwKQorICAgICAgICBtYXRjaCA9IHVuZXhwZWN0ZWRfcmVnZXhwLnNlYXJjaCh0ZXh0KQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIG1zZyA9IG1zZyBvciAiUmVnZXhwIG1hdGNoZWQiCisgICAgICAgICAgICBtc2cgPSAnJXM6ICVyIG1hdGNoZXMgJXIgaW4gJXInICUgKG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFttYXRjaC5zdGFydCgpOm1hdGNoLmVuZCgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9yZWdleHAucGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKworY2xhc3MgRnVuY3Rpb25UZXN0Q2FzZShUZXN0Q2FzZSk6CisgICAgIiIiQSB0ZXN0IGNhc2UgdGhhdCB3cmFwcyBhIHRlc3QgZnVuY3Rpb24uCisKKyAgICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xpcHBpbmcgcHJlLWV4aXN0aW5nIHRlc3QgZnVuY3Rpb25zIGludG8gdGhlCisgICAgdW5pdHRlc3QgZnJhbWV3b3JrLiBPcHRpb25hbGx5LCBzZXQtdXAgYW5kIHRpZHktdXAgZnVuY3Rpb25zIGNhbiBiZQorICAgIHN1cHBsaWVkLiBBcyB3aXRoIFRlc3RDYXNlLCB0aGUgdGlkeS11cCAoJ3RlYXJEb3duJykgZnVuY3Rpb24gd2lsbAorICAgIGFsd2F5cyBiZSBjYWxsZWQgaWYgdGhlIHNldC11cCAoJ3NldFVwJykgZnVuY3Rpb24gcmFuIHN1Y2Nlc3NmdWxseS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0RnVuYywgc2V0VXA9Tm9uZSwgdGVhckRvd249Tm9uZSwgZGVzY3JpcHRpb249Tm9uZSk6CisgICAgICAgIHN1cGVyKEZ1bmN0aW9uVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fc2V0VXBGdW5jID0gc2V0VXAKKyAgICAgICAgc2VsZi5fdGVhckRvd25GdW5jID0gdGVhckRvd24KKyAgICAgICAgc2VsZi5fdGVzdEZ1bmMgPSB0ZXN0RnVuYworICAgICAgICBzZWxmLl9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3NldFVwRnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NldFVwRnVuYygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3RlYXJEb3duRnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duRnVuYygpCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdEZ1bmMoKQorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdEZ1bmMuX19uYW1lX18KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NldFVwRnVuYyA9PSBvdGhlci5fc2V0VXBGdW5jIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLl90ZWFyRG93bkZ1bmMgPT0gb3RoZXIuX3RlYXJEb3duRnVuYyBhbmQgXAorICAgICAgICAgICAgICAgc2VsZi5fdGVzdEZ1bmMgPT0gb3RoZXIuX3Rlc3RGdW5jIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLl9kZXNjcmlwdGlvbiA9PSBvdGhlci5fZGVzY3JpcHRpb24KKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX3NldFVwRnVuYywgc2VsZi5fdGVhckRvd25GdW5jLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdEZ1bmMsIHNlbGYuX2Rlc2NyaXB0aW9uKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYy5fX25hbWVfXykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMgdGVjPSVzPiIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jKQorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Rlc2NyaXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCisgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RGdW5jLl9fZG9jX18KKyAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2xvYWRlci5weSBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4ZjUzNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKQEAgLTAsMCArMSwzMTQgQEAKKyIiIkxvYWRpbmcgdW5pdHRlc3RzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCisKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBjbXBfdG9fa2V5IGFzIF9DbXBUb0tleQorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKK2Zyb20gLiBpbXBvcnQgY2FzZSwgc3VpdGUKKworX191bml0dGVzdCA9IFRydWUKKworIyB3aGF0IGFib3V0IC5weWMgb3IgLnB5byAoZXRjKQorIyB3ZSB3b3VsZCBuZWVkIHRvIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUgdGVzdHMgbXVsdGlwbGUgdGltZXMKKyMgZnJvbSAnLnB5JywgJy5weWMnICphbmQqICcucHlvJworVkFMSURfTU9EVUxFX05BTUUgPSByZS5jb21waWxlKHInW19hLXpdXHcqXC5weSQnLCByZS5JR05PUkVDQVNFKQorCisKK2RlZiBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc3VpdGVDbGFzcyk6CisgICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiAlc1xuJXMnICUgKG5hbWUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KCdNb2R1bGVJbXBvcnRGYWlsdXJlJywgbmFtZSwgSW1wb3J0RXJyb3IobWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3MpCisKK2RlZiBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdCgnTG9hZFRlc3RzRmFpbHVyZScsIG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcykKKworZGVmIF9tYWtlX2ZhaWxlZF90ZXN0KGNsYXNzbmFtZSwgbWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKKyAgICBkZWYgdGVzdEZhaWx1cmUoc2VsZik6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbgorICAgIGF0dHJzID0ge21ldGhvZG5hbWU6IHRlc3RGYWlsdXJlfQorICAgIFRlc3RDbGFzcyA9IHR5cGUoY2xhc3NuYW1lLCAoY2FzZS5UZXN0Q2FzZSwpLCBhdHRycykKKyAgICByZXR1cm4gc3VpdGVDbGFzcygoVGVzdENsYXNzKG1ldGhvZG5hbWUpLCkpCisKKworY2xhc3MgVGVzdExvYWRlcihvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGVzdHMgYWNjb3JkaW5nIHRvIHZhcmlvdXMgY3JpdGVyaWEKKyAgICBhbmQgcmV0dXJuaW5nIHRoZW0gd3JhcHBlZCBpbiBhIFRlc3RTdWl0ZQorICAgICIiIgorICAgIHRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICBzb3J0VGVzdE1ldGhvZHNVc2luZyA9IGNtcAorICAgIHN1aXRlQ2xhc3MgPSBzdWl0ZS5UZXN0U3VpdGUKKyAgICBfdG9wX2xldmVsX2RpciA9IE5vbmUKKworICAgIGRlZiBsb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGVzdENhc2VDbGFzcyIiIgorICAgICAgICBpZiBpc3N1YmNsYXNzKHRlc3RDYXNlQ2xhc3MsIHN1aXRlLlRlc3RTdWl0ZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gVGVzdFN1aXRlLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSBUZXN0Q2FzZT8iKQorICAgICAgICB0ZXN0Q2FzZU5hbWVzID0gc2VsZi5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCisgICAgICAgIGlmIG5vdCB0ZXN0Q2FzZU5hbWVzIGFuZCBoYXNhdHRyKHRlc3RDYXNlQ2xhc3MsICdydW5UZXN0Jyk6CisgICAgICAgICAgICB0ZXN0Q2FzZU5hbWVzID0gWydydW5UZXN0J10KKyAgICAgICAgbG9hZGVkX3N1aXRlID0gc2VsZi5zdWl0ZUNsYXNzKG1hcCh0ZXN0Q2FzZUNsYXNzLCB0ZXN0Q2FzZU5hbWVzKSkKKyAgICAgICAgcmV0dXJuIGxvYWRlZF9zdWl0ZQorCisgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlLCB1c2VfbG9hZF90ZXN0cz1UcnVlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlIiIiCisgICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZHVsZSk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhvYmosIGNhc2UuVGVzdENhc2UpOgorICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShvYmopKQorCisgICAgICAgIGxvYWRfdGVzdHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2xvYWRfdGVzdHMnLCBOb25lKQorICAgICAgICB0ZXN0cyA9IHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKKyAgICAgICAgaWYgdXNlX2xvYWRfdGVzdHMgYW5kIGxvYWRfdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIE5vbmUpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJldHVybiBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhtb2R1bGUuX19uYW1lX18sIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VpdGVDbGFzcykKKyAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWUoc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgZ2l2ZW4gYSBzdHJpbmcgc3BlY2lmaWVyLgorCisgICAgICAgIFRoZSBuYW1lIG1heSByZXNvbHZlIGVpdGhlciB0byBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEKKyAgICAgICAgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaAorICAgICAgICByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLgorCisgICAgICAgIFRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyB0aGUgbmFtZXMgcmVsYXRpdmUgdG8gYSBnaXZlbiBtb2R1bGUuCisgICAgICAgICIiIgorICAgICAgICBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnRzX2NvcHkgPSBwYXJ0c1s6XQorICAgICAgICAgICAgd2hpbGUgcGFydHNfY29weToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18oJy4nLmpvaW4ocGFydHNfY29weSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgICAgICBkZWwgcGFydHNfY29weVstMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnRzX2NvcHk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcGFydHMgPSBwYXJ0c1sxOl0KKyAgICAgICAgb2JqID0gbW9kdWxlCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgcGFyZW50LCBvYmogPSBvYmosIGdldGF0dHIob2JqLCBwYXJ0KQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUob2JqKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhvYmosIGNhc2UuVGVzdENhc2UpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKG9iaikKKyAgICAgICAgZWxpZiAoaXNpbnN0YW5jZShvYmosIHR5cGVzLlVuYm91bmRNZXRob2RUeXBlKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShwYXJlbnQsIHR5cGUpIGFuZAorICAgICAgICAgICAgICBpc3N1YmNsYXNzKHBhcmVudCwgY2FzZS5UZXN0Q2FzZSkpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhbcGFyZW50KG9iai5fX25hbWVfXyldKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBzdWl0ZS5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICBlbGlmIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKToKKyAgICAgICAgICAgIHRlc3QgPSBvYmooKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBzdWl0ZS5UZXN0U3VpdGUpOgorICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0CisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodGVzdCwgY2FzZS5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhbdGVzdF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FsbGluZyAlcyByZXR1cm5lZCAlcywgbm90IGEgdGVzdCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqLCB0ZXN0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gbWFrZSB0ZXN0IGZyb206ICVzIiAlIG9iaikKKworICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGZvdW5kIHVzaW5nIHRoZSBnaXZlbiBzZXF1ZW5jZQorICAgICAgICBvZiBzdHJpbmcgc3BlY2lmaWVycy4gU2VlICdsb2FkVGVzdHNGcm9tTmFtZSgpJy4KKyAgICAgICAgIiIiCisgICAgICAgIHN1aXRlcyA9IFtzZWxmLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIG1vZHVsZSkgZm9yIG5hbWUgaW4gbmFtZXNdCisgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3Moc3VpdGVzKQorCisgICAgZGVmIGdldFRlc3RDYXNlTmFtZXMoc2VsZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgICIiIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUsIHRlc3RDYXNlQ2xhc3M9dGVzdENhc2VDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9c2VsZi50ZXN0TWV0aG9kUHJlZml4KToKKyAgICAgICAgICAgIHJldHVybiBhdHRybmFtZS5zdGFydHN3aXRoKHByZWZpeCkgYW5kIFwKKyAgICAgICAgICAgICAgICBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18nKQorICAgICAgICB0ZXN0Rm5OYW1lcyA9IGZpbHRlcihpc1Rlc3RNZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKKyAgICAgICAgaWYgc2VsZi5zb3J0VGVzdE1ldGhvZHNVc2luZzoKKyAgICAgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoa2V5PV9DbXBUb0tleShzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nKSkKKyAgICAgICAgcmV0dXJuIHRlc3RGbk5hbWVzCisKKyAgICBkZWYgZGlzY292ZXIoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuPSd0ZXN0Ki5weScsIHRvcF9sZXZlbF9kaXI9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhbGwgdGVzdCBtb2R1bGVzIGZyb20gdGhlIHNwZWNpZmllZCBzdGFydAorICAgICAgICBkaXJlY3RvcnksIHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlbS4gT25seSB0ZXN0IGZpbGVzCisgICAgICAgIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gd2lsbCBiZSBsb2FkZWQuIChVc2luZyBzaGVsbCBzdHlsZSBwYXR0ZXJuCisgICAgICAgIG1hdGNoaW5nLikKKworICAgICAgICBBbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHByb2plY3QuCisgICAgICAgIElmIHRoZSBzdGFydCBkaXJlY3RvcnkgaXMgbm90IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZW4gdGhlIHRvcAorICAgICAgICBsZXZlbCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KKworICAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCAnX19pbml0X18ucHknKSBtYXRjaGVzIHRoZQorICAgICAgICBwYXR0ZXJuIHRoZW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBjaGVja2VkIGZvciBhICdsb2FkX3Rlc3RzJyBmdW5jdGlvbi4gSWYKKyAgICAgICAgdGhpcyBleGlzdHMgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGxvYWRlciwgdGVzdHMsIHBhdHRlcm4uCisKKyAgICAgICAgSWYgbG9hZF90ZXN0cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAorICAgICAgICBsb2FkX3Rlc3RzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0ZXN0cyBpbiB0aGUgcGFja2FnZS4KKworICAgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRlbHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdAorICAgICAgICBwYWNrYWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuIHRvcF9sZXZlbF9kaXIgaXMgc3RvcmVkIHNvCisgICAgICAgIGxvYWRfdGVzdHMgZG9lcyBub3QgbmVlZCB0byBwYXNzIHRoaXMgYXJndW1lbnQgaW4gdG8gbG9hZGVyLmRpc2NvdmVyKCkuCisgICAgICAgICIiIgorICAgICAgICBzZXRfaW1wbGljaXRfdG9wID0gRmFsc2UKKyAgICAgICAgaWYgdG9wX2xldmVsX2RpciBpcyBOb25lIGFuZCBzZWxmLl90b3BfbGV2ZWxfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBtYWtlIHRvcF9sZXZlbF9kaXIgb3B0aW9uYWwgaWYgY2FsbGVkIGZyb20gbG9hZF90ZXN0cyBpbiBhIHBhY2thZ2UKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzZWxmLl90b3BfbGV2ZWxfZGlyCisgICAgICAgIGVsaWYgdG9wX2xldmVsX2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2V0X2ltcGxpY2l0X3RvcCA9IFRydWUKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzdGFydF9kaXIKKworICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcF9sZXZlbF9kaXIpCisKKyAgICAgICAgaWYgbm90IHRvcF9sZXZlbF9kaXIgaW4gc3lzLnBhdGg6CisgICAgICAgICAgICAjIGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkKKyAgICAgICAgICAgICMgc2hvdWxkIHdlICp1bmNvbmRpdGlvbmFsbHkqIHB1dCB0aGUgc3RhcnQgZGlyZWN0b3J5IGluIGZpcnN0CisgICAgICAgICAgICAjIGluIHN5cy5wYXRoIHRvIG1pbmltaXNlIGxpa2VsaWhvb2Qgb2YgY29uZmxpY3RzIGJldHdlZW4gaW5zdGFsbGVkCisgICAgICAgICAgICAjIG1vZHVsZXMgYW5kIGRldmVsb3BtZW50IHZlcnNpb25zPworICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWxfZGlyCisKKyAgICAgICAgaXNfbm90X2ltcG9ydGFibGUgPSBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpKToKKyAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpCisgICAgICAgICAgICBpZiBzdGFydF9kaXIgIT0gdG9wX2xldmVsX2RpcjoKKyAgICAgICAgICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCAnX19pbml0X18ucHknKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgZGlzY292ZXJ5IGZyb20gZG90dGVkIG1vZHVsZSBuYW1lcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9faW1wb3J0X18oc3RhcnRfZGlyKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQorICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KKyAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgaWYgc2V0X2ltcGxpY2l0X3RvcDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHNlbGYuX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUodG9wX3BhcnQpCisgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorCisgICAgICAgIGlmIGlzX25vdF9pbXBvcnRhYmxlOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1N0YXJ0IGRpcmVjdG9yeSBpcyBub3QgaW1wb3J0YWJsZTogJXInICUgc3RhcnRfZGlyKQorCisgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCisKKyAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG1vZHVsZS5fX2ZpbGVfXykKKworICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGZ1bGxfcGF0aCkubG93ZXIoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgorICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoZnVsbF9wYXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaGVyZSB3ZSBoYXZlIGJlZW4gZ2l2ZW4gYSBtb2R1bGUgcmF0aGVyIHRoYW4gYSBwYWNrYWdlIC0gc28KKyAgICAgICAgICAgICMgYWxsIHdlIGNhbiBkbyBpcyBzZWFyY2ggdGhlICpzYW1lKiBkaXJlY3RvcnkgdGhlIG1vZHVsZSBpcyBpbgorICAgICAgICAgICAgIyBzaG91bGQgYW4gZXhjZXB0aW9uIGJlIHJhaXNlZCBpbnN0ZWFkCisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKGZ1bGxfcGF0aCkKKworICAgIGRlZiBfZ2V0X25hbWVfZnJvbV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKVswXQorCisgICAgICAgIF9yZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHNlbGYuX3RvcF9sZXZlbF9kaXIpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2FicyhfcmVscGF0aCksICJQYXRoIG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorICAgICAgICBhc3NlcnQgbm90IF9yZWxwYXRoLnN0YXJ0c3dpdGgoJy4uJyksICJQYXRoIG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorCisgICAgICAgIG5hbWUgPSBfcmVscGF0aC5yZXBsYWNlKG9zLnBhdGguc2VwLCAnLicpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIF9tYXRjaF9wYXRoKHNlbGYsIHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CisgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCisKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiVXNlZCBieSBkaXNjb3ZlcnkuIFlpZWxkcyB0ZXN0IHN1aXRlcyBpdCBsb2Fkcy4iIiIKKyAgICAgICAgcGF0aHMgPSBvcy5saXN0ZGlyKHN0YXJ0X2RpcikKKworICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBWQUxJRF9NT0RVTEVfTkFNRS5tYXRjaChwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMgb25seQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaF9wYXRoKHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBmaWxlIG1hdGNoZXMsIGxvYWQgaXQKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZF9maWxlID0gb3MucGF0aC5hYnNwYXRoKGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBmdWxsX3BhdGgpKQorICAgICAgICAgICAgICAgICAgICByZWFscGF0aCA9IG9zLnBhdGguc3BsaXRleHQobW9kX2ZpbGUpWzBdCisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoX25vZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmdWxsX3BhdGgpWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIHJlYWxwYXRoLmxvd2VyKCkgIT0gZnVsbHBhdGhfbm9leHQubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUocmVhbHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmdWxsX3BhdGgpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZGlyID0gb3MucGF0aC5kaXJuYW1lKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiJXIgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICVyLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklzIHRoaXMgbW9kdWxlIGdsb2JhbGx5IGluc3RhbGxlZD8iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxvYWRfdGVzdHMgPSBOb25lCisgICAgICAgICAgICAgICAgdGVzdHMgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaChwYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGNoZWNrIGxvYWRfdGVzdHMgaWYgdGhlIHBhY2thZ2UgZGlyZWN0b3J5IGl0c2VsZiBtYXRjaGVzIHRoZSBmaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBsb2FkX3Rlc3RzID0gZ2V0YXR0cihwYWNrYWdlLCAnbG9hZF90ZXN0cycsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKHBhY2thZ2UsIHVzZV9sb2FkX3Rlc3RzPUZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgbG9hZF90ZXN0cyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdHMgbG9hZGVkIGZyb20gcGFja2FnZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0cworICAgICAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9sb2FkX3Rlc3RzKHBhY2thZ2UuX19uYW1lX18sIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1aXRlQ2xhc3MpCisKK2RlZmF1bHRUZXN0TG9hZGVyID0gVGVzdExvYWRlcigpCisKKworZGVmIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzPU5vbmUpOgorICAgIGxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHNvcnRVc2luZworICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gcHJlZml4CisgICAgaWYgc3VpdGVDbGFzczoKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBzdWl0ZUNsYXNzCisgICAgcmV0dXJuIGxvYWRlcgorCitkZWYgZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzLCBwcmVmaXgsIHNvcnRVc2luZz1jbXApOgorICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZykuZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQorCitkZWYgbWFrZVN1aXRlKHRlc3RDYXNlQ2xhc3MsIHByZWZpeD0ndGVzdCcsIHNvcnRVc2luZz1jbXAsCisgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9c3VpdGUuVGVzdFN1aXRlKToKKyAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3MpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZSh0ZXN0Q2FzZUNsYXNzKQorCitkZWYgZmluZFRlc3RDYXNlcyhtb2R1bGUsIHByZWZpeD0ndGVzdCcsIHNvcnRVc2luZz1jbXAsCisgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPXN1aXRlLlRlc3RTdWl0ZSk6CisgICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzKS5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tYWluLnB5IGIvTGliL3VuaXR0ZXN0L21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5NmJiMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9tYWluLnB5CkBAIC0wLDAgKzEsMjMzIEBACisiIiJVbml0dGVzdCBtYWluIHByb2dyYW0iIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdHlwZXMKKworZnJvbSAuIGltcG9ydCBsb2FkZXIsIHJ1bm5lcgorZnJvbSAuc2lnbmFscyBpbXBvcnQgaW5zdGFsbEhhbmRsZXIKKworX191bml0dGVzdCA9IFRydWUKKworRkFJTEZBU1QgICAgID0gIiAgLWYsIC0tZmFpbGZhc3QgICBTdG9wIG9uIGZpcnN0IGZhaWx1cmVcbiIKK0NBVENIQlJFQUsgICA9ICIgIC1jLCAtLWNhdGNoICAgICAgQ2F0Y2ggY29udHJvbC1DIGFuZCBkaXNwbGF5IHJlc3VsdHNcbiIKK0JVRkZFUk9VVFBVVCA9ICIgIC1iLCAtLWJ1ZmZlciAgICAgQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0IHJ1bnNcbiIKKworVVNBR0VfQVNfTUFJTiA9ICIiIlwKK1VzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0c10KKworT3B0aW9uczoKKyAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQorICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0CisgIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKKyUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworRXhhbXBsZXM6CisgICUocHJvZ05hbWUpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nTmFtZSlzIG1vZHVsZS5UZXN0Q2xhc3MgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSBtb2R1bGUuVGVzdENsYXNzCisgICUocHJvZ05hbWUpcyBtb2R1bGUuQ2xhc3MudGVzdF9tZXRob2QgIC0gcnVuIHNwZWNpZmllZCB0ZXN0IG1ldGhvZAorCitbdGVzdHNdIGNhbiBiZSBhIGxpc3Qgb2YgYW55IG51bWJlciBvZiB0ZXN0IG1vZHVsZXMsIGNsYXNzZXMgYW5kIHRlc3QKK21ldGhvZHMuCisKK0FsdGVybmF0aXZlIFVzYWdlOiAlKHByb2dOYW1lKXMgZGlzY292ZXIgW29wdGlvbnNdCisKK09wdGlvbnM6CisgIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKKyUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcyAgLXMgZGlyZWN0b3J5ICAgICBEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkKKyAgLXAgcGF0dGVybiAgICAgICBQYXR0ZXJuIHRvIG1hdGNoIHRlc3QgZmlsZXMgKCd0ZXN0Ki5weScgZGVmYXVsdCkKKyAgLXQgZGlyZWN0b3J5ICAgICBUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHQgdG8KKyAgICAgICAgICAgICAgICAgICBzdGFydCBkaXJlY3RvcnkpCisKK0ZvciB0ZXN0IGRpc2NvdmVyeSBhbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AKK2xldmVsIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4KKyIiIgorCitVU0FHRV9GUk9NX01PRFVMRSA9ICIiIlwKK1VzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCisgIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKKyAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAorJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitFeGFtcGxlczoKKyAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCisgICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCisgICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKKyAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCisiIiIKKworCisKK2NsYXNzIFRlc3RQcm9ncmFtKG9iamVjdCk6CisgICAgIiIiQSBjb21tYW5kLWxpbmUgcHJvZ3JhbSB0aGF0IHJ1bnMgYSBzZXQgb2YgdGVzdHM7IHRoaXMgaXMgcHJpbWFyaWx5CisgICAgICAgZm9yIG1ha2luZyB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuCisgICAgIiIiCisgICAgVVNBR0UgPSBVU0FHRV9GUk9NX01PRFVMRQorCisgICAgIyBkZWZhdWx0cyBmb3IgdGVzdGluZworICAgIGZhaWxmYXN0ID0gY2F0Y2hicmVhayA9IGJ1ZmZlciA9IHByb2dOYW1lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLCBhcmd2PU5vbmUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9Tm9uZSwgdGVzdExvYWRlcj1sb2FkZXIuZGVmYXVsdFRlc3RMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgIGV4aXQ9VHJ1ZSwgdmVyYm9zaXR5PTEsIGZhaWxmYXN0PU5vbmUsIGNhdGNoYnJlYWs9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlKQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gbW9kdWxlLnNwbGl0KCcuJylbMTpdOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gZ2V0YXR0cihzZWxmLm1vZHVsZSwgcGFydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIGlmIGFyZ3YgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3YgPSBzeXMuYXJndgorCisgICAgICAgIHNlbGYuZXhpdCA9IGV4aXQKKyAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CisgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IGNhdGNoYnJlYWsKKyAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKKyAgICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIKKyAgICAgICAgc2VsZi5kZWZhdWx0VGVzdCA9IGRlZmF1bHRUZXN0CisgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHRlc3RSdW5uZXIKKyAgICAgICAgc2VsZi50ZXN0TG9hZGVyID0gdGVzdExvYWRlcgorICAgICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQorICAgICAgICBzZWxmLnBhcnNlQXJncyhhcmd2KQorICAgICAgICBzZWxmLnJ1blRlc3RzKCkKKworICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBwcmludCBtc2cKKyAgICAgICAgdXNhZ2UgPSB7J3Byb2dOYW1lJzogc2VsZi5wcm9nTmFtZSwgJ2NhdGNoYnJlYWsnOiAnJywgJ2ZhaWxmYXN0JzogJycsCisgICAgICAgICAgICAgICAgICdidWZmZXInOiAnJ30KKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKKyAgICAgICAgICAgIHVzYWdlWydmYWlsZmFzdCddID0gRkFJTEZBU1QKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgorICAgICAgICAgICAgdXNhZ2VbJ2NhdGNoYnJlYWsnXSA9IENBVENIQlJFQUsKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6CisgICAgICAgICAgICB1c2FnZVsnYnVmZmVyJ10gPSBCVUZGRVJPVVRQVVQKKyAgICAgICAgcHJpbnQgc2VsZi5VU0FHRSAlIHVzYWdlCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgorICAgICAgICBpZiBsZW4oYXJndikgPiAxIGFuZCBhcmd2WzFdLmxvd2VyKCkgPT0gJ2Rpc2NvdmVyJzoKKyAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGltcG9ydCBnZXRvcHQKKyAgICAgICAgbG9uZ19vcHRzID0gWydoZWxwJywgJ3ZlcmJvc2UnLCAncXVpZXQnLCAnZmFpbGZhc3QnLCAnY2F0Y2gnLCAnYnVmZmVyJ10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJndlsxOl0sICdoSHZxZmNiJywgbG9uZ19vcHRzKQorICAgICAgICAgICAgZm9yIG9wdCwgdmFsdWUgaW4gb3B0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctaCcsJy1IJywnLS1oZWxwJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctcScsJy0tcXVpZXQnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAwCisgICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLXYnLCctLXZlcmJvc2UnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAyCisgICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLWYnLCctLWZhaWxmYXN0Jyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgU2hvdWxkIHRoaXMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIC1mIGlzIG5vdCB2YWxpZD8KKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctYycsJy0tY2F0Y2gnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgU2hvdWxkIHRoaXMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIC1jIGlzIG5vdCB2YWxpZD8KKyAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctYicsJy0tYnVmZmVyJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBleGNlcHRpb24gaWYgLWIgaXMgbm90IHZhbGlkPworICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDAgYW5kIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCisgICAgICAgICAgICBlbGlmIGxlbihhcmdzKSA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVUZXN0cygpCisgICAgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KG1zZykKKworICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXN0TmFtZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYubW9kdWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLnRlc3ROYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUpCisKKyAgICBkZWYgX2RvX2Rpc2NvdmVyeShzZWxmLCBhcmd2LCBMb2FkZXI9bG9hZGVyLlRlc3RMb2FkZXIpOgorICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgc2VsZi5wcm9nTmFtZSA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCisgICAgICAgIGltcG9ydCBvcHRwYXJzZQorICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBkZWZhdWx0PScuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorICAgICAgICBpZiBsZW4oYXJncykgPiAzOgorICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKKyAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCisKKyAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQorICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKworICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDIKKworICAgICAgICBzdGFydF9kaXIgPSBvcHRpb25zLnN0YXJ0CisgICAgICAgIHBhdHRlcm4gPSBvcHRpb25zLnBhdHRlcm4KKyAgICAgICAgdG9wX2xldmVsX2RpciA9IG9wdGlvbnMudG9wCisKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc2VsZi50ZXN0ID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2RpcikKKworICAgIGRlZiBydW5UZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgorICAgICAgICAgICAgaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICBpZiBzZWxmLnRlc3RSdW5uZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHJ1bm5lci5UZXh0VGVzdFJ1bm5lcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYudGVzdFJ1bm5lciwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIodmVyYm9zaXR5PXNlbGYudmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGZhc3Q9c2VsZi5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1zZWxmLmJ1ZmZlcikKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgYWNjZXB0IHRoZSB2ZXJib3NpdHksIGJ1ZmZlciBvciBmYWlsZmFzdCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyID0gc2VsZi50ZXN0UnVubmVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaXQgaXMgYXNzdW1lZCB0byBiZSBhIFRlc3RSdW5uZXIgaW5zdGFuY2UKKyAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIKKyAgICAgICAgc2VsZi5yZXN1bHQgPSB0ZXN0UnVubmVyLnJ1bihzZWxmLnRlc3QpCisgICAgICAgIGlmIHNlbGYuZXhpdDoKKyAgICAgICAgICAgIHN5cy5leGl0KG5vdCBzZWxmLnJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKK21haW4gPSBUZXN0UHJvZ3JhbQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2NmYxYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKQEAgLTAsMCArMSwxODcgQEAKKyIiIlRlc3QgcmVzdWx0IG9iamVjdCIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworZnJvbSAuIGltcG9ydCB1dGlsCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKKworX191bml0dGVzdCA9IFRydWUKKworZGVmIGZhaWxmYXN0KG1ldGhvZCk6CisgICAgQHdyYXBzKG1ldGhvZCkKKyAgICBkZWYgaW5uZXIoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdmYWlsZmFzdCcsIEZhbHNlKToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHJldHVybiBtZXRob2Qoc2VsZiwgKmFyZ3MsICoqa3cpCisgICAgcmV0dXJuIGlubmVyCisKK1NURE9VVF9MSU5FID0gJ1xuU3Rkb3V0OlxuJXMnCitTVERFUlJfTElORSA9ICdcblN0ZGVycjpcbiVzJworCisKK2NsYXNzIFRlc3RSZXN1bHQob2JqZWN0KToKKyAgICAiIiJIb2xkZXIgZm9yIHRlc3QgcmVzdWx0IGluZm9ybWF0aW9uLgorCisgICAgVGVzdCByZXN1bHRzIGFyZSBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgYnkgdGhlIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICBjbGFzc2VzLCBhbmQgZG8gbm90IG5lZWQgdG8gYmUgZXhwbGljaXRseSBtYW5pcHVsYXRlZCBieSB3cml0ZXJzIG9mIHRlc3RzLgorCisgICAgRWFjaCBpbnN0YW5jZSBob2xkcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biwgYW5kIGNvbGxlY3Rpb25zIG9mCisgICAgZmFpbHVyZXMgYW5kIGVycm9ycyB0aGF0IG9jY3VycmVkIGFtb25nIHRob3NlIHRlc3QgcnVucy4gVGhlIGNvbGxlY3Rpb25zCisgICAgY29udGFpbiB0dXBsZXMgb2YgKHRlc3RjYXNlLCBleGNlcHRpb25pbmZvKSwgd2hlcmUgZXhjZXB0aW9uaW5mbyBpcyB0aGUKKyAgICBmb3JtYXR0ZWQgdHJhY2ViYWNrIG9mIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgorICAgICIiIgorICAgIF9wcmV2aW91c1Rlc3RDbGFzcyA9IE5vbmUKKyAgICBfdGVzdFJ1bkVudGVyZWQgPSBGYWxzZQorICAgIF9tb2R1bGVTZXRVcEZhaWxlZCA9IEZhbHNlCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1Ob25lLCBkZXNjcmlwdGlvbnM9Tm9uZSwgdmVyYm9zaXR5PU5vbmUpOgorICAgICAgICBzZWxmLmZhaWxmYXN0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYuZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi50ZXN0c1J1biA9IDAKKyAgICAgICAgc2VsZi5za2lwcGVkID0gW10KKyAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmVzID0gW10KKyAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzID0gW10KKyAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKKyAgICAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9vcmlnaW5hbF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gRmFsc2UKKworICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgIkNhbGxlZCBieSBUZXN0UnVubmVyIGFmdGVyIHRlc3QgcnVuIgorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIkNhbGxlZCB3aGVuIHRoZSBnaXZlbiB0ZXN0IGlzIGFib3V0IHRvIGJlIHJ1biIKKyAgICAgICAgc2VsZi50ZXN0c1J1biArPSAxCisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RkZXJyX2J1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmZlciA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9zdGRvdXRfYnVmZmVyCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5fc3RkZXJyX2J1ZmZlcgorCisgICAgZGVmIHN0YXJ0VGVzdFJ1bihzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIG9uY2UgYmVmb3JlIGFueSB0ZXN0cyBhcmUgZXhlY3V0ZWQuCisKKyAgICAgICAgU2VlIHN0YXJ0VGVzdCBmb3IgYSBtZXRob2QgY2FsbGVkIGJlZm9yZSBlYWNoIHRlc3QuCisgICAgICAgICIiIgorCisgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgZ2l2ZW4gdGVzdCBoYXMgYmVlbiBydW4iIiIKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBpZiBzZWxmLl9taXJyb3JPdXRwdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9zdGRvdXQud3JpdGUoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlcnJvci5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfc3RkZXJyLndyaXRlKFNUREVSUl9MSU5FICUgZXJyb3IpCisKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vcmlnaW5hbF9zdGRvdXQKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLl9vcmlnaW5hbF9zdGRlcnIKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmZXIuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmZlci50cnVuY2F0ZSgpCisgICAgICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZmVyLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIudHJ1bmNhdGUoKQorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBGYWxzZQorCisgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgorCisgICAgICAgIFNlZSBzdG9wVGVzdCBmb3IgYSBtZXRob2QgY2FsbGVkIGFmdGVyIGVhY2ggdGVzdC4KKyAgICAgICAgIiIiCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcworICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCisgICAgICAgIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLiIiIgorICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKKyAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIkNhbGxlZCB3aGVuIGEgdGVzdCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdCwgcmVhc29uKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0ZXN0IGlzIHNraXBwZWQuIiIiCisgICAgICAgIHNlbGYuc2tpcHBlZC5hcHBlbmQoKHRlc3QsIHJlYXNvbikpCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGFuIGV4cGVjdGVkIGZhaWx1cmUvZXJyb3Igb2NjdXJlZC4iIiIKKyAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmVzLmFwcGVuZCgKKyAgICAgICAgICAgICh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgdGVzdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHN1Y2NlZWQuIiIiCisgICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3Nlcy5hcHBlbmQodGVzdCkKKworICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgorICAgICAgICAiVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyByZXN1bHQgd2FzIGEgc3VjY2VzcyIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDAKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiSW5kaWNhdGVzIHRoYXQgdGhlIHRlc3RzIHNob3VsZCBiZSBhYm9ydGVkIgorICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBUcnVlCisKKyAgICBkZWYgX2V4Y19pbmZvX3RvX3N0cmluZyhzZWxmLCBlcnIsIHRlc3QpOgorICAgICAgICAiIiJDb252ZXJ0cyBhIHN5cy5leGNfaW5mbygpLXN0eWxlIHR1cGxlIG9mIHZhbHVlcyBpbnRvIGEgc3RyaW5nLiIiIgorICAgICAgICBleGN0eXBlLCB2YWx1ZSwgdGIgPSBlcnIKKyAgICAgICAgIyBTa2lwIHRlc3QgcnVubmVyIHRyYWNlYmFjayBsZXZlbHMKKyAgICAgICAgd2hpbGUgdGIgYW5kIHNlbGYuX2lzX3JlbGV2YW50X3RiX2xldmVsKHRiKToKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgICAgIGlmIGV4Y3R5cGUgaXMgdGVzdC5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgIyBTa2lwIGFzc2VydCooKSB0cmFjZWJhY2sgbGV2ZWxzCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLl9jb3VudF9yZWxldmFudF90Yl9sZXZlbHModGIpCisgICAgICAgICAgICBtc2dMaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y3R5cGUsIHZhbHVlLCB0YiwgbGVuZ3RoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnTGluZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIpCisKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgIGVycm9yID0gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG91dHB1dC5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcbicKKyAgICAgICAgICAgICAgICBtc2dMaW5lcy5hcHBlbmQoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJyb3IuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAgICBtc2dMaW5lcy5hcHBlbmQoU1RERVJSX0xJTkUgJSBlcnJvcikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4obXNnTGluZXMpCisKKworICAgIGRlZiBfaXNfcmVsZXZhbnRfdGJfbGV2ZWwoc2VsZiwgdGIpOgorICAgICAgICByZXR1cm4gJ19fdW5pdHRlc3QnIGluIHRiLnRiX2ZyYW1lLmZfZ2xvYmFscworCisgICAgZGVmIF9jb3VudF9yZWxldmFudF90Yl9sZXZlbHMoc2VsZiwgdGIpOgorICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIHdoaWxlIHRiIGFuZCBub3Qgc2VsZi5faXNfcmVsZXZhbnRfdGJfbGV2ZWwodGIpOgorICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gbGVuZ3RoCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoIjwlcyBydW49JWkgZXJyb3JzPSVpIGZhaWx1cmVzPSVpPiIgJQorICAgICAgICAgICAgICAgKHV0aWwuc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLnRlc3RzUnVuLCBsZW4oc2VsZi5lcnJvcnMpLAorICAgICAgICAgICAgICAgIGxlbihzZWxmLmZhaWx1cmVzKSkpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcnVubmVyLnB5IGIvTGliL3VuaXR0ZXN0L3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE2ODkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3J1bm5lci5weQpAQCAtMCwwICsxLDE5NiBAQAorIiIiUnVubmluZyB0ZXN0cyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitmcm9tIC4gaW1wb3J0IHJlc3VsdAorZnJvbSAuc2lnbmFscyBpbXBvcnQgcmVnaXN0ZXJSZXN1bHQKKworX191bml0dGVzdCA9IFRydWUKKworCitjbGFzcyBfV3JpdGVsbkRlY29yYXRvcihvYmplY3QpOgorICAgICIiIlVzZWQgdG8gZGVjb3JhdGUgZmlsZS1saWtlIG9iamVjdHMgd2l0aCBhIGhhbmR5ICd3cml0ZWxuJyBtZXRob2QiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZixzdHJlYW0pOgorICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICBpZiBhdHRyIGluICgnc3RyZWFtJywgJ19fZ2V0c3RhdGVfXycpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoYXR0cikKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zdHJlYW0sYXR0cikKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsIGFyZz1Ob25lKToKKyAgICAgICAgaWYgYXJnOgorICAgICAgICAgICAgc2VsZi53cml0ZShhcmcpCisgICAgICAgIHNlbGYud3JpdGUoJ1xuJykgIyB0ZXh0LW1vZGUgc3RyZWFtcyB0cmFuc2xhdGUgdG8gXHJcbiBpZiBuZWVkZWQKKworCitjbGFzcyBUZXh0VGVzdFJlc3VsdChyZXN1bHQuVGVzdFJlc3VsdCk6CisgICAgIiIiQSB0ZXN0IHJlc3VsdCBjbGFzcyB0aGF0IGNhbiBwcmludCBmb3JtYXR0ZWQgdGV4dCByZXN1bHRzIHRvIGEgc3RyZWFtLgorCisgICAgVXNlZCBieSBUZXh0VGVzdFJ1bm5lci4KKyAgICAiIiIKKyAgICBzZXBhcmF0b3IxID0gJz0nICogNzAKKyAgICBzZXBhcmF0b3IyID0gJy0nICogNzAKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5zaG93QWxsID0gdmVyYm9zaXR5ID4gMQorICAgICAgICBzZWxmLmRvdHMgPSB2ZXJib3NpdHkgPT0gMQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9ucworCisgICAgZGVmIGdldERlc2NyaXB0aW9uKHNlbGYsIHRlc3QpOgorICAgICAgICBkb2NfZmlyc3RfbGluZSA9IHRlc3Quc2hvcnREZXNjcmlwdGlvbigpCisgICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb25zIGFuZCBkb2NfZmlyc3RfbGluZToKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oKHN0cih0ZXN0KSwgZG9jX2ZpcnN0X2xpbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN0cih0ZXN0KQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLmdldERlc2NyaXB0aW9uKHRlc3QpKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIiAuLi4gIikKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkU3VjY2Vzcyh0ZXN0KQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJvayIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJy4nKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRFcnJvcih0ZXN0LCBlcnIpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIkVSUk9SIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnRScpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkRmFpbHVyZSh0ZXN0LCBlcnIpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIkZBSUwiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdGJykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBhZGRTa2lwKHNlbGYsIHRlc3QsIHJlYXNvbik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRTa2lwKHRlc3QsIHJlYXNvbikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigic2tpcHBlZCB7MCFyfSIuZm9ybWF0KHJlYXNvbikpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoInMiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKHRlc3QsIGVycikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiZXhwZWN0ZWQgZmFpbHVyZSIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIngiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3ModGVzdCkKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigidW5leHBlY3RlZCBzdWNjZXNzIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgidSIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgcHJpbnRFcnJvcnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG90cyBvciBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKKyAgICAgICAgc2VsZi5wcmludEVycm9yTGlzdCgnRVJST1InLCBzZWxmLmVycm9ycykKKyAgICAgICAgc2VsZi5wcmludEVycm9yTGlzdCgnRkFJTCcsIHNlbGYuZmFpbHVyZXMpCisKKyAgICBkZWYgcHJpbnRFcnJvckxpc3Qoc2VsZiwgZmxhdm91ciwgZXJyb3JzKToKKyAgICAgICAgZm9yIHRlc3QsIGVyciBpbiBlcnJvcnM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHNlbGYuc2VwYXJhdG9yMSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiVzOiAlcyIgJSAoZmxhdm91cixzZWxmLmdldERlc2NyaXB0aW9uKHRlc3QpKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oc2VsZi5zZXBhcmF0b3IyKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiJXMiICUgZXJyKQorCisKK2NsYXNzIFRleHRUZXN0UnVubmVyKG9iamVjdCk6CisgICAgIiIiQSB0ZXN0IHJ1bm5lciBjbGFzcyB0aGF0IGRpc3BsYXlzIHJlc3VsdHMgaW4gdGV4dHVhbCBmb3JtLgorCisgICAgSXQgcHJpbnRzIG91dCB0aGUgbmFtZXMgb2YgdGVzdHMgYXMgdGhleSBhcmUgcnVuLCBlcnJvcnMgYXMgdGhleQorICAgIG9jY3VyLCBhbmQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3QgcnVuLgorICAgICIiIgorICAgIHJlc3VsdGNsYXNzID0gVGV4dFRlc3RSZXN1bHQKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW09c3lzLnN0ZGVyciwgZGVzY3JpcHRpb25zPVRydWUsIHZlcmJvc2l0eT0xLAorICAgICAgICAgICAgICAgICBmYWlsZmFzdD1GYWxzZSwgYnVmZmVyPUZhbHNlLCByZXN1bHRjbGFzcz1Ob25lKToKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBfV3JpdGVsbkRlY29yYXRvcihzdHJlYW0pCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBmYWlsZmFzdAorICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBpZiByZXN1bHRjbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0Y2xhc3MgPSByZXN1bHRjbGFzcworCisgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHRjbGFzcyhzZWxmLnN0cmVhbSwgc2VsZi5kZXNjcmlwdGlvbnMsIHNlbGYudmVyYm9zaXR5KQorCisgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgIlJ1biB0aGUgZ2l2ZW4gdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUuIgorICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlUmVzdWx0KCkKKyAgICAgICAgcmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBzZWxmLmZhaWxmYXN0CisgICAgICAgIHJlc3VsdC5idWZmZXIgPSBzZWxmLmJ1ZmZlcgorICAgICAgICBzdGFydFRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzdGFydFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0YXJ0VGVzdFJ1bicsIE5vbmUpCisgICAgICAgIGlmIHN0YXJ0VGVzdFJ1biBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0VGVzdFJ1bigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3RvcFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0b3BUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgICAgIGlmIHN0b3BUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuKCkKKyAgICAgICAgc3RvcFRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICB0aW1lVGFrZW4gPSBzdG9wVGltZSAtIHN0YXJ0VGltZQorICAgICAgICByZXN1bHQucHJpbnRFcnJvcnMoKQorICAgICAgICBpZiBoYXNhdHRyKHJlc3VsdCwgJ3NlcGFyYXRvcjInKToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4ocmVzdWx0LnNlcGFyYXRvcjIpCisgICAgICAgIHJ1biA9IHJlc3VsdC50ZXN0c1J1bgorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biwgcnVuICE9IDEgYW5kICJzIiBvciAiIiwgdGltZVRha2VuKSkKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigpCisKKyAgICAgICAgZXhwZWN0ZWRGYWlscyA9IHVuZXhwZWN0ZWRTdWNjZXNzZXMgPSBza2lwcGVkID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHRzID0gbWFwKGxlbiwgKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNraXBwZWQpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHBlY3RlZEZhaWxzLCB1bmV4cGVjdGVkU3VjY2Vzc2VzLCBza2lwcGVkID0gcmVzdWx0cworCisgICAgICAgIGluZm9zID0gW10KKyAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiRkFJTEVEIikKKyAgICAgICAgICAgIGZhaWxlZCwgZXJyb3JlZCA9IG1hcChsZW4sIChyZXN1bHQuZmFpbHVyZXMsIHJlc3VsdC5lcnJvcnMpKQorICAgICAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgiZmFpbHVyZXM9JWQiICUgZmFpbGVkKQorICAgICAgICAgICAgaWYgZXJyb3JlZDoKKyAgICAgICAgICAgICAgICBpbmZvcy5hcHBlbmQoImVycm9ycz0lZCIgJSBlcnJvcmVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIk9LIikKKyAgICAgICAgaWYgc2tpcHBlZDoKKyAgICAgICAgICAgIGluZm9zLmFwcGVuZCgic2tpcHBlZD0lZCIgJSBza2lwcGVkKQorICAgICAgICBpZiBleHBlY3RlZEZhaWxzOgorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJleHBlY3RlZCBmYWlsdXJlcz0lZCIgJSBleHBlY3RlZEZhaWxzKQorICAgICAgICBpZiB1bmV4cGVjdGVkU3VjY2Vzc2VzOgorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJ1bmV4cGVjdGVkIHN1Y2Nlc3Nlcz0lZCIgJSB1bmV4cGVjdGVkU3VjY2Vzc2VzKQorICAgICAgICBpZiBpbmZvczoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiAoJXMpIiAlICgiLCAiLmpvaW4oaW5mb3MpLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3Qvc2lnbmFscy5weSBiL0xpYi91bml0dGVzdC9zaWduYWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzEwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3Qvc2lnbmFscy5weQpAQCAtMCwwICsxLDU3IEBACitpbXBvcnQgc2lnbmFsCitpbXBvcnQgd2Vha3JlZgorCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKKworX191bml0dGVzdCA9IFRydWUKKworCitjbGFzcyBfSW50ZXJydXB0SGFuZGxlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0X2hhbmRsZXIpOgorICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuZGVmYXVsdF9oYW5kbGVyID0gZGVmYXVsdF9oYW5kbGVyCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc2lnbnVtLCBmcmFtZSk6CisgICAgICAgIGluc3RhbGxlZF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICBpZiBpbnN0YWxsZWRfaGFuZGxlciBpcyBub3Qgc2VsZjoKKyAgICAgICAgICAgICMgaWYgd2UgYXJlbid0IHRoZSBpbnN0YWxsZWQgaGFuZGxlciwgdGhlbiBkZWxlZ2F0ZSBpbW1lZGlhdGVseQorICAgICAgICAgICAgIyB0byB0aGUgZGVmYXVsdCBoYW5kbGVyCisgICAgICAgICAgICBzZWxmLmRlZmF1bHRfaGFuZGxlcihzaWdudW0sIGZyYW1lKQorCisgICAgICAgIGlmIHNlbGYuY2FsbGVkOgorICAgICAgICAgICAgc2VsZi5kZWZhdWx0X2hhbmRsZXIoc2lnbnVtLCBmcmFtZSkKKyAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisgICAgICAgIGZvciByZXN1bHQgaW4gX3Jlc3VsdHMua2V5cygpOgorICAgICAgICAgICAgcmVzdWx0LnN0b3AoKQorCitfcmVzdWx0cyA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorZGVmIHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCk6CisgICAgX3Jlc3VsdHNbcmVzdWx0XSA9IDEKKworZGVmIHJlbW92ZVJlc3VsdChyZXN1bHQpOgorICAgIHJldHVybiBib29sKF9yZXN1bHRzLnBvcChyZXN1bHQsIE5vbmUpKQorCitfaW50ZXJydXB0X2hhbmRsZXIgPSBOb25lCitkZWYgaW5zdGFsbEhhbmRsZXIoKToKKyAgICBnbG9iYWwgX2ludGVycnVwdF9oYW5kbGVyCisgICAgaWYgX2ludGVycnVwdF9oYW5kbGVyIGlzIE5vbmU6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgX2ludGVycnVwdF9oYW5kbGVyID0gX0ludGVycnVwdEhhbmRsZXIoZGVmYXVsdF9oYW5kbGVyKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIF9pbnRlcnJ1cHRfaGFuZGxlcikKKworCitkZWYgcmVtb3ZlSGFuZGxlcihtZXRob2Q9Tm9uZSk6CisgICAgaWYgbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICBAd3JhcHMobWV0aG9kKQorICAgICAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGluaXRpYWwgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICByZW1vdmVIYW5kbGVyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBpbml0aWFsKQorICAgICAgICByZXR1cm4gaW5uZXIKKworICAgIGdsb2JhbCBfaW50ZXJydXB0X2hhbmRsZXIKKyAgICBpZiBfaW50ZXJydXB0X2hhbmRsZXIgaXMgbm90IE5vbmU6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgX2ludGVycnVwdF9oYW5kbGVyLmRlZmF1bHRfaGFuZGxlcikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGFlMmFlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CkBAIC0wLDAgKzEsMjg3IEBACisiIiJUZXN0U3VpdGUiIiIKKworaW1wb3J0IHN5cworCitmcm9tIC4gaW1wb3J0IGNhc2UKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK2NsYXNzIEJhc2VUZXN0U3VpdGUob2JqZWN0KToKKyAgICAiIiJBIHNpbXBsZSB0ZXN0IHN1aXRlIHRoYXQgZG9lc24ndCBwcm92aWRlIGNsYXNzIG9yIG1vZHVsZSBzaGFyZWQgZml4dHVyZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzPSgpKToKKyAgICAgICAgc2VsZi5fdGVzdHMgPSBbXQorICAgICAgICBzZWxmLmFkZFRlc3RzKHRlc3RzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyB0ZXN0cz0lcz4iICUgKHV0aWwuc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBsaXN0KHNlbGYpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikgPT0gbGlzdChvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgICMgQ2FuJ3QgZ3VhcmFudGVlIGhhc2ggaW52YXJpYW50LCBzbyBmbGFnIGFzIHVuaGFzaGFibGUKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fdGVzdHMpCisKKyAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIGNhc2VzID0gMAorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgY2FzZXMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCisgICAgICAgIHJldHVybiBjYXNlcworCisgICAgZGVmIGFkZFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICMgc2FuaXR5IGNoZWNrcworICAgICAgICBpZiBub3QgaGFzYXR0cih0ZXN0LCAnX19jYWxsX18nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigie30gaXMgbm90IGNhbGxhYmxlIi5mb3JtYXQocmVwcih0ZXN0KSkpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgdHlwZSkgYW5kIGlzc3ViY2xhc3ModGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FzZS5UZXN0Q2FzZSwgVGVzdFN1aXRlKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3RDYXNlcyBhbmQgVGVzdFN1aXRlcyBtdXN0IGJlIGluc3RhbnRpYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYWRkVGVzdCgpIikKKyAgICAgICAgc2VsZi5fdGVzdHMuYXBwZW5kKHRlc3QpCisKKyAgICBkZWYgYWRkVGVzdHMoc2VsZiwgdGVzdHMpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RzLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdHMgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiB0ZXN0cywgbm90IGEgc3RyaW5nIikKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFkZFRlc3QodGVzdCkKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKKworICAgIGRlZiBkZWJ1ZyhzZWxmKToKKyAgICAgICAgIiIiUnVuIHRoZSB0ZXN0cyB3aXRob3V0IGNvbGxlY3RpbmcgZXJyb3JzIGluIGEgVGVzdFJlc3VsdCIiIgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgdGVzdC5kZWJ1ZygpCisKKworY2xhc3MgVGVzdFN1aXRlKEJhc2VUZXN0U3VpdGUpOgorICAgICIiIkEgdGVzdCBzdWl0ZSBpcyBhIGNvbXBvc2l0ZSB0ZXN0IGNvbnNpc3Rpbmcgb2YgYSBudW1iZXIgb2YgVGVzdENhc2VzLgorCisgICAgRm9yIHVzZSwgY3JlYXRlIGFuIGluc3RhbmNlIG9mIFRlc3RTdWl0ZSwgdGhlbiBhZGQgdGVzdCBjYXNlIGluc3RhbmNlcy4KKyAgICBXaGVuIGFsbCB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQsIHRoZSBzdWl0ZSBjYW4gYmUgcGFzc2VkIHRvIGEgdGVzdAorICAgIHJ1bm5lciwgc3VjaCBhcyBUZXh0VGVzdFJ1bm5lci4gSXQgd2lsbCBydW4gdGhlIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQsIGFnZ3JlZ2F0aW5nIHRoZSByZXN1bHRzLiBXaGVuCisgICAgc3ViY2xhc3NpbmcsIGRvIG5vdCBmb3JnZXQgdG8gY2FsbCB0aGUgYmFzZSBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAiIiIKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0LCBkZWJ1Zz1GYWxzZSk6CisgICAgICAgIHRvcExldmVsID0gRmFsc2UKKyAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsICdfdGVzdFJ1bkVudGVyZWQnLCBGYWxzZSkgaXMgRmFsc2U6CisgICAgICAgICAgICByZXN1bHQuX3Rlc3RSdW5FbnRlcmVkID0gdG9wTGV2ZWwgPSBUcnVlCisKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIF9pc25vdHN1aXRlKHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duUHJldmlvdXNDbGFzcyh0ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlRml4dHVyZSh0ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlQ2xhc3NTZXRVcCh0ZXN0LCByZXN1bHQpCisgICAgICAgICAgICAgICAgcmVzdWx0Ll9wcmV2aW91c1Rlc3RDbGFzcyA9IHRlc3QuX19jbGFzc19fCisKKyAgICAgICAgICAgICAgICBpZiAoZ2V0YXR0cih0ZXN0Ll9fY2xhc3NfXywgJ19jbGFzc1NldHVwRmFpbGVkJywgRmFsc2UpIG9yCisgICAgICAgICAgICAgICAgICAgIGdldGF0dHIocmVzdWx0LCAnX21vZHVsZVNldFVwRmFpbGVkJywgRmFsc2UpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGRlYnVnOgorICAgICAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZXN0LmRlYnVnKCkKKworICAgICAgICBpZiB0b3BMZXZlbDoKKyAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duUHJldmlvdXNDbGFzcyhOb25lLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVUZWFyRG93bihyZXN1bHQpCisgICAgICAgICAgICByZXN1bHQuX3Rlc3RSdW5FbnRlcmVkID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRlYnVnKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIHRlc3RzIHdpdGhvdXQgY29sbGVjdGluZyBlcnJvcnMgaW4gYSBUZXN0UmVzdWx0IiIiCisgICAgICAgIGRlYnVnID0gX0RlYnVnUmVzdWx0KCkKKyAgICAgICAgc2VsZi5ydW4oZGVidWcsIFRydWUpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZGVmIF9oYW5kbGVDbGFzc1NldFVwKHNlbGYsIHRlc3QsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzQ2xhc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ19wcmV2aW91c1Rlc3RDbGFzcycsIE5vbmUpCisgICAgICAgIGN1cnJlbnRDbGFzcyA9IHRlc3QuX19jbGFzc19fCisgICAgICAgIGlmIGN1cnJlbnRDbGFzcyA9PSBwcmV2aW91c0NsYXNzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHJlc3VsdC5fbW9kdWxlU2V0VXBGYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZ2V0YXR0cihjdXJyZW50Q2xhc3MsICJfX3VuaXR0ZXN0X3NraXBfXyIsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnRDbGFzcy5fY2xhc3NTZXR1cEZhaWxlZCA9IEZhbHNlCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIHRlc3QgbWF5IGFjdHVhbGx5IGJlIGEgZnVuY3Rpb24KKyAgICAgICAgICAgICMgc28gaXRzIGNsYXNzIHdpbGwgYmUgYSBidWlsdGluLXR5cGUKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZXRVcENsYXNzID0gZ2V0YXR0cihjdXJyZW50Q2xhc3MsICdzZXRVcENsYXNzJywgTm9uZSkKKyAgICAgICAgaWYgc2V0VXBDbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZXRVcENsYXNzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2xhc3MuX2NsYXNzU2V0dXBGYWlsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gdXRpbC5zdHJjbGFzcyhjdXJyZW50Q2xhc3MpCisgICAgICAgICAgICAgICAgZXJyb3JOYW1lID0gJ3NldFVwQ2xhc3MgKCVzKScgJSBjbGFzc05hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisKKworICAgIGRlZiBfZ2V0X3ByZXZpb3VzX21vZHVsZShzZWxmLCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c01vZHVsZSA9IE5vbmUKKyAgICAgICAgcHJldmlvdXNDbGFzcyA9IGdldGF0dHIocmVzdWx0LCAnX3ByZXZpb3VzVGVzdENsYXNzJywgTm9uZSkKKyAgICAgICAgaWYgcHJldmlvdXNDbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByZXZpb3VzTW9kdWxlID0gcHJldmlvdXNDbGFzcy5fX21vZHVsZV9fCisgICAgICAgIHJldHVybiBwcmV2aW91c01vZHVsZQorCisKKyAgICBkZWYgX2hhbmRsZU1vZHVsZUZpeHR1cmUoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNNb2R1bGUgPSBzZWxmLl9nZXRfcHJldmlvdXNfbW9kdWxlKHJlc3VsdCkKKyAgICAgICAgY3VycmVudE1vZHVsZSA9IHRlc3QuX19jbGFzc19fLl9fbW9kdWxlX18KKyAgICAgICAgaWYgY3VycmVudE1vZHVsZSA9PSBwcmV2aW91c01vZHVsZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2hhbmRsZU1vZHVsZVRlYXJEb3duKHJlc3VsdCkKKworICAgICAgICByZXN1bHQuX21vZHVsZVNldFVwRmFpbGVkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbY3VycmVudE1vZHVsZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNldFVwTW9kdWxlID0gZ2V0YXR0cihtb2R1bGUsICdzZXRVcE1vZHVsZScsIE5vbmUpCisgICAgICAgIGlmIHNldFVwTW9kdWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldFVwTW9kdWxlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIF9EZWJ1Z1Jlc3VsdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgcmVzdWx0Ll9tb2R1bGVTZXRVcEZhaWxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAnc2V0VXBNb2R1bGUgKCVzKScgJSBjdXJyZW50TW9kdWxlCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkQ2xhc3NPck1vZHVsZUxldmVsRXhjZXB0aW9uKHJlc3VsdCwgZSwgZXJyb3JOYW1lKQorCisgICAgZGVmIF9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24oc2VsZiwgcmVzdWx0LCBleGNlcHRpb24sIGVycm9yTmFtZSk6CisgICAgICAgIGVycm9yID0gX0Vycm9ySG9sZGVyKGVycm9yTmFtZSkKKyAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCisgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBjYXNlLlNraXBUZXN0KToKKyAgICAgICAgICAgIGFkZFNraXAoZXJyb3IsIHN0cihleGNlcHRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKGVycm9yLCBzeXMuZXhjX2luZm8oKSkKKworICAgIGRlZiBfaGFuZGxlTW9kdWxlVGVhckRvd24oc2VsZiwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNNb2R1bGUgPSBzZWxmLl9nZXRfcHJldmlvdXNfbW9kdWxlKHJlc3VsdCkKKyAgICAgICAgaWYgcHJldmlvdXNNb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiByZXN1bHQuX21vZHVsZVNldFVwRmFpbGVkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbcHJldmlvdXNNb2R1bGVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRlYXJEb3duTW9kdWxlID0gZ2V0YXR0cihtb2R1bGUsICd0ZWFyRG93bk1vZHVsZScsIE5vbmUpCisgICAgICAgIGlmIHRlYXJEb3duTW9kdWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlYXJEb3duTW9kdWxlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAndGVhckRvd25Nb2R1bGUgKCVzKScgJSBwcmV2aW91c01vZHVsZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihyZXN1bHQsIGUsIGVycm9yTmFtZSkKKworICAgIGRlZiBfdGVhckRvd25QcmV2aW91c0NsYXNzKHNlbGYsIHRlc3QsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzQ2xhc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ19wcmV2aW91c1Rlc3RDbGFzcycsIE5vbmUpCisgICAgICAgIGN1cnJlbnRDbGFzcyA9IHRlc3QuX19jbGFzc19fCisgICAgICAgIGlmIGN1cnJlbnRDbGFzcyA9PSBwcmV2aW91c0NsYXNzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGdldGF0dHIocHJldmlvdXNDbGFzcywgJ19jbGFzc1NldHVwRmFpbGVkJywgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCAnX21vZHVsZVNldFVwRmFpbGVkJywgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGdldGF0dHIocHJldmlvdXNDbGFzcywgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGVhckRvd25DbGFzcyA9IGdldGF0dHIocHJldmlvdXNDbGFzcywgJ3RlYXJEb3duQ2xhc3MnLCBOb25lKQorICAgICAgICBpZiB0ZWFyRG93bkNsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSB1dGlsLnN0cmNsYXNzKHByZXZpb3VzQ2xhc3MpCisgICAgICAgICAgICAgICAgZXJyb3JOYW1lID0gJ3RlYXJEb3duQ2xhc3MgKCVzKScgJSBjbGFzc05hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisKKworY2xhc3MgX0Vycm9ySG9sZGVyKG9iamVjdCk6CisgICAgIiIiCisgICAgUGxhY2Vob2xkZXIgZm9yIGEgVGVzdENhc2UgaW5zaWRlIGEgcmVzdWx0LiBBcyBmYXIgYXMgYSBUZXN0UmVzdWx0CisgICAgaXMgY29uY2VybmVkLCB0aGlzIGxvb2tzIGV4YWN0bHkgbGlrZSBhIHVuaXQgdGVzdC4gVXNlZCB0byBpbnNlcnQKKyAgICBhcmJpdHJhcnkgZXJyb3JzIGludG8gYSB0ZXN0IHN1aXRlIHJ1bi4KKyAgICAiIiIKKyAgICAjIEluc3BpcmVkIGJ5IHRoZSBFcnJvckhvbGRlciBmcm9tIFR3aXN0ZWQ6CisgICAgIyBodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vdHJhYy9icm93c2VyL3RydW5rL3R3aXN0ZWQvdHJpYWwvcnVubmVyLnB5CisKKyAgICAjIGF0dHJpYnV0ZSB1c2VkIGJ5IFRlc3RSZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZworICAgIGZhaWx1cmVFeGNlcHRpb24gPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGVzY3JpcHRpb24KKworICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxFcnJvckhvbGRlciBkZXNjcmlwdGlvbj0lcj4iICUgKHNlbGYuZGVzY3JpcHRpb24sKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlkKCkKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0KToKKyAgICAgICAgIyBjb3VsZCBjYWxsIHJlc3VsdC5hZGRFcnJvciguLi4pIC0gYnV0IHRoaXMgdGVzdC1saWtlIG9iamVjdAorICAgICAgICAjIHNob3VsZG4ndCBiZSBydW4gYW55d2F5CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCByZXN1bHQpOgorICAgICAgICByZXR1cm4gc2VsZi5ydW4ocmVzdWx0KQorCisgICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCitkZWYgX2lzbm90c3VpdGUodGVzdCk6CisgICAgIkEgY3J1ZGUgd2F5IHRvIHRlbGwgYXBhcnQgdGVzdGNhc2VzIGFuZCBzdWl0ZXMgd2l0aCBkdWNrLXR5cGluZyIKKyAgICB0cnk6CisgICAgICAgIGl0ZXIodGVzdCkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIF9EZWJ1Z1Jlc3VsdChvYmplY3QpOgorICAgICJVc2VkIGJ5IHRoZSBUZXN0U3VpdGUgdG8gaG9sZCBwcmV2aW91cyBjbGFzcyB3aGVuIHJ1bm5pbmcgaW4gZGVidWcuIgorICAgIF9wcmV2aW91c1Rlc3RDbGFzcyA9IE5vbmUKKyAgICBfbW9kdWxlU2V0VXBGYWlsZWQgPSBGYWxzZQorICAgIHNob3VsZFN0b3AgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX19pbml0X18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI3MzBiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKKworZGVmIHN1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGhlcmUpOgorICAgICAgICBpZiBmbi5zdGFydHN3aXRoKCJ0ZXN0IikgYW5kIGZuLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIG1vZG5hbWUgPSAidW5pdHRlc3QudGVzdC4iICsgZm5bOi0zXQorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKSkKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InN1aXRlIikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L2R1bW15LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvZHVtbXkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRmMTRlNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L2R1bW15LnB5CkBAIC0wLDAgKzEgQEAKKyMgRW1wdHkgbW9kdWxlIGZvciB0ZXN0aW5nIHRoZSBsb2FkaW5nIG9mIG1vZHVsZXMKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2YwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMTE5IEBACitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0SGFzaGluZyhvYmplY3QpOgorICAgICIiIlVzZWQgYXMgYSBtaXhpbiBmb3IgVGVzdENhc2UiIiIKKworICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19oYXNoX18gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGFuZCAlciBkbyBub3QgaGFzaCBlcXVhbCIgJSAob2JqXzEsIG9ial8yKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlciBhbmQgJXI6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQorCisgICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5uZV9wYWlyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBoYXNoKG9ial8xKSA9PSBoYXNoKG9ial8yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgaGFzaCBlcXVhbCwgYnV0IHNob3VsZG4ndCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ial8xLCBvYmpfMikpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKKworCitjbGFzcyBUZXN0RXF1YWxpdHkob2JqZWN0KToKKyAgICAiIiJVc2VkIGFzIGEgbWl4aW4gZm9yIFRlc3RDYXNlIiIiCisKKyAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9fZXFfXyBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ial8xLCBvYmpfMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqXzIsIG9ial8xKQorCisgICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX25lX18gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9uZShzZWxmKToKKyAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvYmpfMSwgb2JqXzIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9ial8yLCBvYmpfMSkKKworCitjbGFzcyBMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2cpOgorICAgICAgICBzZWxmLl9ldmVudHMgPSBsb2cKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0JykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisKKyAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdGFydFRlc3RSdW4nKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdGFydFRlc3RSdW4oKQorCisgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdCcpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0KHRlc3QpCisKKyAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0UnVuJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3RSdW4oKQorCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRmFpbHVyZSgqYXJncykKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEVycm9yKCphcmdzKQorCisgICAgZGVmIGFkZFNraXAoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTa2lwJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU2tpcCgqYXJncykKKworICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFeHBlY3RlZEZhaWx1cmUnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCisKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRVbmV4cGVjdGVkU3VjY2VzcycpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorCisKK2NsYXNzIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKG9iamVjdCk6CisgICAgIiIiQW4gb2JqZWN0IGhvbm91cmluZyBUZXN0UmVzdWx0IGJlZm9yZSBzdGFydFRlc3RSdW4vc3RvcFRlc3RSdW4uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorICAgICAgICBzZWxmLmVycm9ycyA9IFtdCisgICAgICAgIHNlbGYudGVzdHNSdW4gPSAwCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCisgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3NlcyA9IFtdCisgICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IEZhbHNlCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FzU3VjY2Vzc2Z1bChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVjYTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CkBAIC0wLDAgKzEsMjkyIEBACitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgVGVzdF9Bc3NlcnRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9BbG1vc3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjAwMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4wMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwgMS4wMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwgMS4wMDAwMDAwMSwgMS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMS4xLCAxLjAsIHBsYWNlcz0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsIDEuMSwgMS4wLCBwbGFjZXM9MSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAsIC4xKy4xaiwgcGxhY2VzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLCAwLCAuMSsuMWosIHBsYWNlcz0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdCgnaW5mJyksIGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCgnaW5mJyksIGZsb2F0KCdpbmYnKSkKKworICAgIGRlZiB0ZXN0X0Ftb3N0RXF1YWxXaXRoRGVsdGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMS4xLCAxLjAsIGRlbHRhPTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjAsIDEuMSwgZGVsdGE9MC41KQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDEuMSwgMS4wLCBkZWx0YT0wLjA1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDEuMCwgMS4xLCBkZWx0YT0wLjA1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIGRlbHRhPTAuMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIGRlbHRhPTAuNSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMSwgMS4wLCBwbGFjZXM9MiwgZGVsdGE9MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgcGxhY2VzPTIsIGRlbHRhPTIpCisKKyAgICAgICAgZmlyc3QgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQorICAgICAgICBzZWNvbmQgPSBmaXJzdCArIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9ZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MjApKQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9ZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9NSkpCisKKyAgICBkZWYgdGVzdF9hc3NlcnRSYWlzZXMoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2UoZSk6CisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBfcmFpc2UsIEtleUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgX3JhaXNlLCBLZXlFcnJvcigia2V5IikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IE5vbmUpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIktleUVycm9yIG5vdCByYWlzZWQiLCBlLmFyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBmYWlsIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIF9yYWlzZSwgVmFsdWVFcnJvcikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBsZXQgZXhjZXB0aW9uIHBhc3MgdGhyb3VnaCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY20uZXhjZXB0aW9uLCBlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoImtleSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiS2V5RXJyb3Igbm90IHJhaXNlZCIsIGUuYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGZhaWwiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJhc3NlcnRSYWlzZXMoKSBkaWRuJ3QgbGV0IGV4Y2VwdGlvbiBwYXNzIHRocm91Z2giKQorCisgICAgZGVmIHRlc3RBc3NlcnROb3RSZWdleHBNYXRjaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4cE1hdGNoZXMoJ0FsYSBtYSBrb3RhJywgcidyKycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcygnQWxhIG1hIGtvdGEnLCByJ2sudCcsICdNZXNzYWdlJykKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidrb3QnIiwgZS5hcmdzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTWVzc2FnZScsIGUuYXJnc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcyBzaG91bGQgaGF2ZSBmYWlsZWQuJykKKworCitjbGFzcyBUZXN0TG9uZ01lc3NhZ2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB0aGUgaW5kaXZpZHVhbCBhc3NlcnRzIGhvbm91ciBsb25nTWVzc2FnZS4KKyAgICBUaGlzIGFjdHVhbGx5IHRlc3RzIGFsbCB0aGUgbWVzc2FnZSBiZWhhdmlvdXIgZm9yCisgICAgYXNzZXJ0cyB0aGF0IHVzZSBsb25nTWVzc2FnZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0RmFsc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBGYWxzZQorICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgICAgICAgICBkZWYgdGVzdFRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdFRydWUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gc2VsZi5mYWlsdXJlRXhjZXB0aW9uCisKKyAgICAgICAgICAgIGRlZiB0ZXN0VGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUgPSBUZXN0YWJsZVRlc3RUcnVlKCd0ZXN0VGVzdCcpCisgICAgICAgIHNlbGYudGVzdGFibGVGYWxzZSA9IFRlc3RhYmxlVGVzdEZhbHNlKCd0ZXN0VGVzdCcpCisKKyAgICBkZWYgdGVzdERlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodW5pdHRlc3QuVGVzdENhc2UubG9uZ01lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNc2coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKE5vbmUsICJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKCJmb28iLCAiYmFyIiksICJmb28iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2UoTm9uZSwgImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZSgiZm9vIiwgImJhciIpLCAiYmFyIDogZm9vIikKKworICAgICAgICAjIFRoaXMgYmxvd3MgdXAgaWYgX2Zvcm1hdE1lc3NhZ2UgdXNlcyBzdHJpbmcgY29uY2F0ZW5hdGlvbgorICAgICAgICBzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZShvYmplY3QoKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNZXNzYWdlX3VuaWNvZGVfZXJyb3Ioc2VsZik6CisgICAgICAgIG9uZSA9ICcnLmpvaW4oY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NSkpCisgICAgICAgICMgdGhpcyB1c2VkIHRvIGNhdXNlIGEgVW5pY29kZURlY29kZUVycm9yIGNvbnN0cnVjdGluZyBtc2cKKyAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2Uob25lLCB1J1x1RkZGRCcpCisKKyAgICBkZWYgYXNzZXJ0TWVzc2FnZXMoc2VsZiwgbWV0aG9kTmFtZSwgYXJncywgZXJyb3JzKToKKyAgICAgICAgZGVmIGdldE1ldGhvZChpKToKKyAgICAgICAgICAgIHVzZVRlc3RhYmxlRmFsc2UgID0gaSA8IDIKKyAgICAgICAgICAgIGlmIHVzZVRlc3RhYmxlRmFsc2U6CisgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYudGVzdGFibGVGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0YWJsZVRydWUKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHRlc3QsIG1ldGhvZE5hbWUpCisKKyAgICAgICAgZm9yIGksIGV4cGVjdGVkX3JlZ2V4cCBpbiBlbnVtZXJhdGUoZXJyb3JzKToKKyAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRNZXRob2QoaSkKKyAgICAgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgICAgICB3aXRoTXNnID0gaSAlIDIKKyAgICAgICAgICAgIGlmIHdpdGhNc2c6CisgICAgICAgICAgICAgICAga3dhcmdzID0geyJtc2ciOiAib29wcyJ9CisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleHA9ZXhwZWN0ZWRfcmVnZXhwKToKKyAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0QXNzZXJ0VHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0VHJ1ZScsIChGYWxzZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXkZhbHNlIGlzIG5vdCB0cnVlJCIsICJeb29wcyQiLCAiXkZhbHNlIGlzIG5vdCB0cnVlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeRmFsc2UgaXMgbm90IHRydWUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRGYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RmFsc2UnLCAoVHJ1ZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXlRydWUgaXMgbm90IGZhbHNlJCIsICJeb29wcyQiLCAiXlRydWUgaXMgbm90IGZhbHNlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeVHJ1ZSBpcyBub3QgZmFsc2UgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3ROb3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90RXF1YWwnLCAoMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSA9PSAxJCIsICJeb29wcyQiLCAiXjEgPT0gMSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgPT0gMSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFsbW9zdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRBbG1vc3RFcXVhbCcsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMkIiwgIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0Tm90QWxtb3N0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE5vdEFsbW9zdEVxdWFsJywgKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyQiLCAiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RfYmFzZUFzc2VydEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdfYmFzZUFzc2VydEVxdWFsJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgIT0gMiQiLCAiXm9vcHMkIiwgIl4xICE9IDIkIiwgIl4xICE9IDIgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYpOgorICAgICAgICAjIEVycm9yIG1lc3NhZ2VzIGFyZSBtdWx0aWxpbmUgc28gbm90IHRlc3Rpbmcgb24gZnVsbCBtZXNzYWdlCisgICAgICAgICMgYXNzZXJ0VHVwbGVFcXVhbCBhbmQgYXNzZXJ0TGlzdEVxdWFsIGRlbGVnYXRlIHRvIHRoaXMgbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNlcXVlbmNlRXF1YWwnLCAoW10sIFtOb25lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcKyBcW05vbmVcXSQiLCAiXm9vcHMkIiwgciJcKyBcW05vbmVcXSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlwrIFxbTm9uZVxdIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2V0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNldEVxdWFsJywgKHNldCgpLCBzZXQoW05vbmVdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJOb25lJCIsICJeb29wcyQiLCAiTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJbicsIChOb25lLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeTm9uZSBub3QgZm91bmQgaW4gXFtcXSQnLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSBub3QgZm91bmQgaW4gXFtcXSA6IG9vcHMkJ10pCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnROb3RJbicsIChOb25lLCBbTm9uZV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0gOiBvb3BzJCddKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydERpY3RFcXVhbCcsICh7fSwgeydrZXknOiAndmFsdWUnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcKyBceydrZXknOiAndmFsdWUnXH0gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydERpY3RDb250YWluc1N1YnNldCcsICh7J2tleSc6ICd2YWx1ZSd9LCB7fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeTWlzc2luZzogJ2tleSckIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTWlzc2luZzogJ2tleSckIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5NaXNzaW5nOiAna2V5JyA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEl0ZW1zRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEl0ZW1zRXF1YWwnLCAoW10sIFtOb25lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXFtOb25lXF0kIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXFtOb25lXF0kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcW05vbmVcXSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRNdWx0aUxpbmVFcXVhbCcsICgiIiwgImZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyIlwrIGZvbyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRMZXNzJywgKDIsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeMiBub3QgbGVzcyB0aGFuIDEgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMZXNzRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydExlc3NFcXVhbCcsICgyLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0R3JlYXRlcicsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiAyIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlckVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRHcmVhdGVyRXF1YWwnLCAoMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMiA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb25lJywgKCdub3QgTm9uZScsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXidub3QgTm9uZScgaXMgbm90IE5vbmUkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb3ROb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJc05vdE5vbmUnLCAoTm9uZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXnVuZXhwZWN0ZWRseSBOb25lJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IE5vbmUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXMnLCAoTm9uZSwgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXk5vbmUgaXMgbm90ICdmb28nJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk5vbmUgaXMgbm90ICdmb28nJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTm9uZSBpcyBub3QgJ2ZvbycgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb3QnLCAoTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSA6IG9vcHMkIl0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDAwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0wLDAgKzEsMjUyIEBACitpbXBvcnQgZ2MKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKworaW1wb3J0IHVuaXR0ZXN0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2tpbGwnKSwgIlRlc3QgcmVxdWlyZXMgb3Mua2lsbCIpCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSJ3aW4zMiIsICJUZXN0IGNhbm5vdCBydW4gb24gV2luZG93cyIpCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZnJlZWJzZDYnLCAiVGVzdCBraWxscyByZWdydGVzdCBvbiBmcmVlYnNkNiAiCisgICAgImlmIHRocmVhZHMgaGF2ZSBiZWVuIHVzZWQiKQorY2xhc3MgVGVzdEJyZWFrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuX2RlZmF1bHRfaGFuZGxlcikKKyAgICAgICAgdW5pdHRlc3Quc2lnbmFscy5fcmVzdWx0cyA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICB1bml0dGVzdC5zaWduYWxzLl9pbnRlcnJ1cHRfaGFuZGxlciA9IE5vbmUKKworCisgICAgZGVmIHRlc3RJbnN0YWxsSGFuZGxlcihzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJLZXlib2FyZEludGVycnVwdCBub3QgaGFuZGxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaXR0ZXN0LnNpZ25hbHMuX2ludGVycnVwdF9oYW5kbGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0UmVnaXN0ZXJSZXN1bHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgZm9yIHJlZiBpbiB1bml0dGVzdC5zaWduYWxzLl9yZXN1bHRzOgorICAgICAgICAgICAgaWYgcmVmIGlzIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiByZWYgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm9kZCBvYmplY3QgaW4gcmVzdWx0IHNldCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBub3QgZm91bmQiKQorCisKKyAgICBkZWYgdGVzdEludGVycnVwdENhdWdodChzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgcmVzdWx0LmJyZWFrQ2F1Z2h0ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIktleWJvYXJkSW50ZXJydXB0IG5vdCBoYW5kbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5icmVha0NhdWdodCkKKworCisgICAgZGVmIHRlc3RTZWNvbmRJbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgcmVzdWx0LmJyZWFrQ2F1Z2h0ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNlY29uZCBLZXlib2FyZEludGVycnVwdCBub3QgcmFpc2VkIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTZWNvbmQgS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuYnJlYWtDYXVnaHQpCisKKworICAgIGRlZiB0ZXN0VHdvUmVzdWx0cyhzZWxmKToKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisgICAgICAgIG5ld19oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgICAgIHJlc3VsdDIgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBuZXdfaGFuZGxlcikKKworICAgICAgICByZXN1bHQzID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJLZXlib2FyZEludGVycnVwdCBub3QgaGFuZGxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Mi5zaG91bGRTdG9wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdDMuc2hvdWxkU3RvcCkKKworCisgICAgZGVmIHRlc3RIYW5kbGVyUmVwbGFjZWRCdXRDYWxsZWQoc2VsZik6CisgICAgICAgICMgSWYgb3VyIGhhbmRsZXIgaGFzIGJlZW4gcmVwbGFjZWQgKGlzIG5vIGxvbmdlciBpbnN0YWxsZWQpIGJ1dCBpcworICAgICAgICAjIGNhbGxlZCBieSB0aGUgKm5ldyogaGFuZGxlciwgdGhlbiBpdCBpc24ndCBzYWZlIHRvIGRlbGF5IHRoZQorICAgICAgICAjIFNJR0lOVCBhbmQgd2Ugc2hvdWxkIGltbWVkaWF0ZWx5IGRlbGVnYXRlIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGRlZiBuZXdfaGFuZGxlcihmcmFtZSwgc2lnbnVtKToKKyAgICAgICAgICAgIGhhbmRsZXIoZnJhbWUsIHNpZ251bSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBuZXdfaGFuZGxlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVwbGFjZWQgYnV0IGRlbGVnYXRlZCBoYW5kbGVyIGRvZXNuJ3QgcmFpc2UgaW50ZXJydXB0IikKKworICAgIGRlZiB0ZXN0UnVubmVyKHNlbGYpOgorICAgICAgICAjIENyZWF0aW5nIGEgVGV4dFRlc3RSdW5uZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnQgc2hvdWxkCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIFRleHRUZXN0UmVzdWx0IGl0IGNyZWF0ZXMKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpCisKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHQsIHVuaXR0ZXN0LnNpZ25hbHMuX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdFdlYWtSZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICAjIENhbGxpbmcgcmVnaXN0ZXJSZXN1bHQgb24gYSByZXN1bHQgc2hvdWxkIG5vdCBrZWVwIGl0IGFsaXZlCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYocmVzdWx0KQorICAgICAgICBkZWwgcmVzdWx0CisKKyAgICAgICAgIyBGb3Igbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpO2djLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKKworCisgICAgZGVmIHRlc3RSZW1vdmVSZXN1bHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pdHRlc3QucmVtb3ZlUmVzdWx0KHJlc3VsdCkpCisKKyAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBlcnJvciBpbnN0ZWFkPworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVuaXR0ZXN0LnJlbW92ZVJlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KCkpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICBkZWYgdGVzdE1haW5JbnN0YWxsc0hhbmRsZXIoc2VsZik6CisgICAgICAgIGZhaWxmYXN0ID0gb2JqZWN0KCkKKyAgICAgICAgdGVzdCA9IG9iamVjdCgpCisgICAgICAgIHZlcmJvc2l0eSA9IG9iamVjdCgpCisgICAgICAgIHJlc3VsdCA9IG9iamVjdCgpCisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKworICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBpbml0QXJncyA9IFtdCisgICAgICAgICAgICBydW5BcmdzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdEFyZ3MuYXBwZW5kKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bkFyZ3MuYXBwZW5kKHRlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGNsYXNzIFByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhdGNoYnJlYWspOgorICAgICAgICAgICAgICAgIHNlbGYuZXhpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gZmFpbGZhc3QKKyAgICAgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBjYXRjaGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKworICAgICAgICBwID0gUHJvZ3JhbShGYWxzZSkKKyAgICAgICAgcC5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCBbKCgpLCB7J2J1ZmZlcic6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJib3NpdHknOiB2ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6IGZhaWxmYXN0fSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIucnVuQXJncywgW3Rlc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVzdWx0LCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IFtdCisgICAgICAgIEZha2VSdW5uZXIucnVuQXJncyA9IFtdCisgICAgICAgIHAgPSBQcm9ncmFtKFRydWUpCisgICAgICAgIHAucnVuVGVzdHMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywgWygoKSwgeydidWZmZXInOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyYm9zaXR5JzogdmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGZhc3QnOiBmYWlsZmFzdH0pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnJ1bkFyZ3MsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlc3VsdCwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3RSZW1vdmVIYW5kbGVyKHNlbGYpOgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgdW5pdHRlc3QucmVtb3ZlSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBjYWxsaW5nIHJlbW92ZUhhbmRsZXIgbXVsdGlwbGUgdGltZXMgaGFzIG5vIGlsbC1lZmZlY3QKKyAgICAgICAgdW5pdHRlc3QucmVtb3ZlSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3RSZW1vdmVIYW5kbGVyQXNEZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIEB1bml0dGVzdC5yZW1vdmVIYW5kbGVyCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICB0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwZTkwNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpAQCAtMCwwICsxLDEwNjEgQEAKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgcHByaW50CitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLnN1cHBvcnQgaW1wb3J0ICgKKyAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgorKQorCisKK2NsYXNzIFRlc3Qob2JqZWN0KToKKyAgICAiS2VlcCB0aGVzZSBUZXN0Q2FzZSBjbGFzc2VzIG91dCBvZiB0aGUgbWFpbiBuYW1lc3BhY2UiCisKKyAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcGFzcworICAgICAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKKworICAgIGNsYXNzIEJhcihGb28pOgorICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgIGNsYXNzIExvZ2dpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICIiIkEgdGVzdCBjYXNlIHdoaWNoIGxvZ3MgaXRzIGNhbGxzLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHMpOgorICAgICAgICAgICAgc3VwZXIoVGVzdC5Mb2dnaW5nVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCd0ZXN0JykKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzID0gZXZlbnRzCisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisKK2NsYXNzIFRlc3RfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcpOgorCisgICAgIyMjIFNldCB1cCBhdHRyaWJ1dGVzIHVzZWQgYnkgaW5oZXJpdGVkIHRlc3RzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBVc2VkIGJ5IFRlc3RIYXNoaW5nLnRlc3RfaGFzaCBhbmQgVGVzdEVxdWFsaXR5LnRlc3RfZXEKKyAgICBlcV9wYWlycyA9IFsoVGVzdC5Gb28oJ3Rlc3QxJyksIFRlc3QuRm9vKCd0ZXN0MScpKV0KKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQorICAgIG5lX3BhaXJzID0gWyhUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5Gb28oJ3J1blRlc3QnKSkKKyAgICAgICAgICAgICAgICwoVGVzdC5Gb28oJ3Rlc3QxJyksIFRlc3QuQmFyKCd0ZXN0MScpKQorICAgICAgICAgICAgICAgLChUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5CYXIoJ3Rlc3QyJykpXQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvU2V0IHVwIGF0dHJpYnV0ZXMgdXNlZCBieSBpbmhlcml0ZWQgdGVzdHMKKworCisgICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKKyAgICAjIC4uLgorICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQorICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgorICAgICMgLi4uCisgICAgIyAibWV0aG9kTmFtZSBkZWZhdWx0cyB0byAicnVuVGVzdCIuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb3B0aW9uYWwsIGFuZCB0aGF0IGl0IGRlZmF1bHRzIHRvIHRoZSBwcm9wZXIKKyAgICAjIHRoaW5nLgorICAgIGRlZiB0ZXN0X2luaXRfX25vX3Rlc3RfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0KCkuaWQoKVstMTM6XSwgJy5UZXN0LnJ1blRlc3QnKQorCisgICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKKyAgICAjIC4uLgorICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQorICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgorICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RfbmFtZV9fdmFsaWQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIFR5cGVFcnJvcigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdCgndGVzdCcpLmlkKClbLTEwOl0sICcuVGVzdC50ZXN0JykKKworICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCisgICAgIyAuLi4KKyAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKKyAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKKyAgICBkZWYgdGVzdF9pbml0X190ZXN0X25hbWVfX2ludmFsaWQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIFR5cGVFcnJvcigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFRlc3QoJ3Rlc3Rmb28nKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuIEZvcgorICAgICMgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIDEiCisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vKCd0ZXN0JykuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICMgIlJldHVybiB0aGUgZGVmYXVsdCB0eXBlIG9mIHRlc3QgcmVzdWx0IG9iamVjdCB0byBiZSB1c2VkIHRvIHJ1biB0aGlzCisgICAgIyB0ZXN0LiBGb3IgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlCisgICAgIyB1bml0dGVzdC5UZXN0UmVzdWx0OyAgc3ViY2xhc3NlcyBvZiBUZXN0Q2FzZSBzaG91bGQKKyAgICAjIG92ZXJyaWRlIHRoaXMgYXMgbmVjZXNzYXJ5LiIKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBGb28oKS5kZWZhdWx0VGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCB1bml0dGVzdC5UZXN0UmVzdWx0KQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQorCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaXRoIGEgdGVtcG9yYXJ5IHJlc3VsdCBzdG9wVGVzdFJ1biBpcyBjYWxsZWQgd2hlbiBzZXRVcCBlcnJvcnMuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwX2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQorCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKKyAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRXJyb3InLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaXRoIGEgZGVmYXVsdCByZXN1bHQsIGFuIGVycm9yIGluIHRoZSB0ZXN0IHN0aWxsIHJlc3VsdHMgaW4gc3RvcFRlc3RSdW4KKyAgICAjIGJlaW5nIGNhbGxlZC4iCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3RfZGVmYXVsdF9yZXN1bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChzZWxmLmV2ZW50cykKKworICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICd0ZWFyRG93bicsICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3Qgc2lnbmFscworICAgICMgYSBmYWlsdXJlIChhcyBvcHBvc2VkIHRvIGFuIGVycm9yKS4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgdGVzdCBmYWlscyB3aXRoIGEgZGVmYXVsdCByZXN1bHQgc3RvcFRlc3RSdW4gaXMgc3RpbGwgY2FsbGVkLiIKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0X2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLAorICAgICAgICAgICAgICAgICAgICAndGVhckRvd24nLCAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRlYXJEb3duKCkgcmFpc2VzCisgICAgIyBhbiBleGNlcHRpb24uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVhckRvd24oKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZWFyRG93bicpCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiB0ZWFyRG93biBlcnJvcnMgd2l0aCBhIGRlZmF1bHQgcmVzdWx0IHN0b3BUZXN0UnVuIGlzIHN0aWxsIGNhbGxlZC4iCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duX2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZEVycm9yJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiVGVzdENhc2UucnVuKCkgc3RpbGwgd29ya3Mgd2hlbiB0aGUgZGVmYXVsdFRlc3RSZXN1bHQgaXMgYSBUZXN0UmVzdWx0CisgICAgIyB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc3RhcnRUZXN0UnVuIGFuZCBzdG9wVGVzdFJ1bi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKKworICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgorICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCisgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCisgICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMKKyAgICAjIGF0dHJpYnV0ZSBpcyBBc3NlcnRpb25FcnJvciIKKyAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19kZWZhdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIEFzc2VydGlvbkVycm9yKQorCisgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCisgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KKyAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KKyAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgVGVzdENhc2UucnVuKCkgcmVzcGVjdHMgdGhlIGRlc2lnbmF0ZWQgZmFpbHVyZUV4Y2VwdGlvbgorICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX3N1YmNsYXNzaW5nX19leHBsaWNpdF9yYWlzZShzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBSdW50aW1lRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBSdW50aW1lRXJyb3IpCisKKworICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KKyAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bworICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgorICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBUZXN0Q2FzZS5ydW4oKSByZXNwZWN0cyB0aGUgZGVzaWduYXRlZCBmYWlsdXJlRXhjZXB0aW9uCisgICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fc3ViY2xhc3NpbmdfX2ltcGxpY2l0X3JhaXNlKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJmb28iKQorCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gUnVudGltZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgUnVudGltZUVycm9yKQorCisKKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIC4uLiBhbmQgbm90aGluZyBzaG91bGQgaGFwcGVuCisgICAgICAgIEZvbygpLnNldFVwKCkKKworICAgICMgIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCisgICAgZGVmIHRlc3RfdGVhckRvd24oc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyAuLi4gYW5kIG5vdGhpbmcgc2hvdWxkIGhhcHBlbgorICAgICAgICBGb28oKS50ZWFyRG93bigpCisKKyAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCisgICAgIworICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcworICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKKyAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcworICAgICMganVzdCBzYXkgInN0cmluZyIpCisgICAgZGVmIHRlc3RfaWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEZvbygpLmlkKCksIGJhc2VzdHJpbmcpCisKKyAgICAjICJJZiByZXN1bHQgaXMgb21pdHRlZCBvciBOb25lLCBhIHRlbXBvcmFyeSByZXN1bHQgb2JqZWN0IGlzIGNyZWF0ZWQKKyAgICAjIGFuZCB1c2VkLCBidXQgaXMgbm90IG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBjYWxsZXIuIEFzIFRlc3RDYXNlIG93bnMgdGhlCisgICAgIyB0ZW1wb3JhcnkgcmVzdWx0IHN0YXJ0VGVzdFJ1biBhbmQgc3RvcFRlc3RSdW4gYXJlIGNhbGxlZC4KKworICAgIGRlZiB0ZXN0X3J1bl9fdXNlc19kZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgIyBNYWtlIHJ1bigpIGZpbmQgYSByZXN1bHQgb2JqZWN0IG9uIGl0cyBvd24KKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICd0ZXN0JywgJ2FkZFN1Y2Nlc3MnLAorICAgICAgICAgICAgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RTaG9ydERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5zaG9ydERlc2NyaXB0aW9uKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNlbGYuc2hvcnREZXNjcmlwdGlvbigpLAorICAgICAgICAgICAgICAgICdUZXN0cyBzaG9ydERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCisKKyAgICAgICAgVGhpcyBtZXRob2QgZW5zdXJlcyB0aGF0IG9ubHkgdGhlIGZpcnN0IGxpbmUgb2YgYSBkb2NzdHJpbmcgaXMKKyAgICAgICAgcmV0dXJuZWQgdXNlZCBpbiB0aGUgc2hvcnQgZGVzY3JpcHRpb24sIG5vIG1hdHRlciBob3cgbG9uZyB0aGUKKyAgICAgICAgd2hvbGUgdGhpbmcgaXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNlbGYuc2hvcnREZXNjcmlwdGlvbigpLAorICAgICAgICAgICAgICAgICAnVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAgJ2RvY3N0cmluZy4nKQorCisgICAgZGVmIHRlc3RBZGRUeXBlRXF1YWxpdHlGdW5jKHNlbGYpOgorICAgICAgICBjbGFzcyBTYWRTbmFrZShvYmplY3QpOgorICAgICAgICAgICAgIiIiRHVtbXkgY2xhc3MgZm9yIHRlc3RfYWRkVHlwZUVxdWFsaXR5RnVuYy4iIiIKKyAgICAgICAgczEsIHMyID0gU2FkU25ha2UoKSwgU2FkU25ha2UoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMxLCBzMikKKyAgICAgICAgZGVmIEFsbFNuYWtlc0NyZWF0ZWRFcXVhbChhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gdHlwZShhKSBpcyB0eXBlKGIpIGlzIFNhZFNuYWtlCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhTYWRTbmFrZSwgQWxsU25ha2VzQ3JlYXRlZEVxdWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgIyBObyB0aGlzIGRvZXNuJ3QgY2xlYW4gdXAgYW5kIHJlbW92ZSB0aGUgU2FkU25ha2UgZXF1YWxpdHkgZnVuYworICAgICAgICAjIGZyb20gdGhpcyBUZXN0Q2FzZSBpbnN0YW5jZSBidXQgc2luY2UgaXRzIGEgbG9jYWwgbm90aGluZyBlbHNlCisgICAgICAgICMgd2lsbCBldmVyIG5vdGljZSB0aGF0LgorCisgICAgZGVmIHRlc3RBc3NlcnRJcyhzZWxmKToKKyAgICAgICAgdGhpbmcgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHRoaW5nLCB0aGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzLCB0aGluZywgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm90KHNlbGYpOgorICAgICAgICB0aGluZyA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodGhpbmcsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNOb3QsIHRoaW5nLCB0aGluZykKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNJbnN0YW5jZShzZWxmKToKKyAgICAgICAgdGhpbmcgPSBbXQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGhpbmcsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc0luc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluZywgZGljdCkKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmKToKKyAgICAgICAgdGhpbmcgPSBbXQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UodGhpbmcsIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluZywgbGlzdCkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SW4oc2VsZik6CisgICAgICAgIGFuaW1hbHMgPSB7J21vbmtleSc6ICdiYW5hbmEnLCAnY293JzogJ2dyYXNzJywgJ3NlYWwnOiAnZmlzaCd9CisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKDIsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbW9ua2V5JywgYW5pbWFscykKKworICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdvdHRlcicsIGFuaW1hbHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCAneCcsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SW4sIDQsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCAnZWxlcGhhbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYWxzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgJ2MnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEluLCAxLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgJ2NvdycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hbHMpCisKKyAgICBkZWYgdGVzdEFzc2VydERpY3RDb250YWluc1N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoe30sIHt9KQorICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7fSwgeydhJzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDF9LCB7J2EnOiAxfSkKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMX0sIHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDEsICdiJzogMn0sIHsnYSc6IDEsICdiJzogMn0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoezE6ICJvbmUifSwge30pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMn0sIHsnYSc6IDF9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYyc6IDF9LCB7J2EnOiAxfSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxLCAnYyc6IDF9LCB7J2EnOiAxfSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxLCAnYyc6IDF9LCB7J2EnOiAxfSkKKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIFVuaWNvZGVXYXJuaW5nKSk6CisgICAgICAgICAgICBvbmUgPSAnJy5qb2luKGNocihpKSBmb3IgaSBpbiByYW5nZSgyNTUpKQorICAgICAgICAgICAgIyB0aGlzIHVzZWQgdG8gY2F1c2UgYSBVbmljb2RlRGVjb2RlRXJyb3IgY29uc3RydWN0aW5nIHRoZSBmYWlsdXJlIG1zZworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnZm9vJzogb25lfSwgeydmb28nOiB1J1x1RkZGRCd9KQorCisgICAgZGVmIHRlc3RBc3NlcnRFcXVhbChzZWxmKToKKyAgICAgICAgZXF1YWxfcGFpcnMgPSBbCisgICAgICAgICAgICAgICAgKCgpLCAoKSksCisgICAgICAgICAgICAgICAgKHt9LCB7fSksCisgICAgICAgICAgICAgICAgKFtdLCBbXSksCisgICAgICAgICAgICAgICAgKHNldCgpLCBzZXQoKSksCisgICAgICAgICAgICAgICAgKGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSldCisgICAgICAgIGZvciBhLCBiIGluIGVxdWFsX3BhaXJzOgorICAgICAgICAgICAgIyBUaGlzIG1lc3Mgb2YgdHJ5IGV4Y2VwdHMgaXMgdG8gdGVzdCB0aGUgYXNzZXJ0RXF1YWwgYmVoYXZpb3IKKyAgICAgICAgICAgICMgaXRzZWxmLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRFcXVhbCglciwgJXIpIGZhaWxlZCcgJSAoYSwgYikpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiLCBtc2c9J2ZvbycpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwoJXIsICVyKSB3aXRoIG1zZz0gZmFpbGVkJyAlIChhLCBiKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIsICdmb28nKQorICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsKCVyLCAlcikgd2l0aCB0aGlyZCBwYXJhbWV0ZXIgZmFpbGVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChhLCBiKSkKKworICAgICAgICB1bmVxdWFsX3BhaXJzID0gWworICAgICAgICAgICAgICAgKCgpLCBbXSksCisgICAgICAgICAgICAgICAoe30sIHNldCgpKSwKKyAgICAgICAgICAgICAgIChzZXQoWzQsMV0pLCBmcm96ZW5zZXQoWzQsMl0pKSwKKyAgICAgICAgICAgICAgIChmcm96ZW5zZXQoWzQsNV0pLCBzZXQoWzIsM10pKSwKKyAgICAgICAgICAgICAgIChzZXQoWzMsNF0pLCBzZXQoWzUsNF0pKV0KKyAgICAgICAgZm9yIGEsIGIgaW4gdW5lcXVhbF9wYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEVxdWFsLCBhLCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdmb28nKQorCisgICAgZGVmIHRlc3RFcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoW10sICgpKQorCisgICAgICAgIGEgPSBbMCwgJ2EnLCBbXV0KKyAgICAgICAgYiA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCwgdHVwbGUoYSksIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsIGEsIHR1cGxlKGIpKQorCisgICAgICAgIGIuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh0dXBsZShhKSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChhLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlKGEpLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMaXN0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGEsIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUoYSksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIE5vbmUsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRUdXBsZUVxdWFsLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoe30sIHt9KQorCisgICAgICAgIGMgPSB7ICd4JzogMSB9CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCwgYywgZCkKKworICAgICAgICBkLnVwZGF0ZShjKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChjLCBkKQorCisgICAgICAgIGRbJ3gnXSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwsIGMsIGQsICdUaGVzZSBhcmUgdW5lcXVhbCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydERpY3RFcXVhbCwgTm9uZSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydERpY3RFcXVhbCwgW10sIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIDEsIDEpCisKKyAgICBkZWYgdGVzdEFzc2VydFNlcXVlbmNlRXF1YWxNYXhEaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWF4RGlmZiwgODAqOCkKKyAgICAgICAgc2VxMSA9ICdhJyArICd4JyAqIDgwKioyCisgICAgICAgIHNlcTIgPSAnYicgKyAneCcgKiA4MCoqMgorICAgICAgICBkaWZmID0gJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYocHByaW50LnBmb3JtYXQoc2VxMSkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoc2VxMikuc3BsaXRsaW5lcygpKSkKKyAgICAgICAgIyB0aGUgKzEgaXMgdGhlIGxlYWRpbmcgXG4gYWRkZWQgYnkgYXNzZXJ0U2VxdWVuY2VFcXVhbAorICAgICAgICBvbWl0dGVkID0gdW5pdHRlc3QuY2FzZS5ESUZGX09NSVRURUQgJSAobGVuKGRpZmYpICsgMSwpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gbGVuKGRpZmYpLy8yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChzZXExLCBzZXEyKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtc2cgPSBlLmFyZ3NbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0U2VxdWVuY2VFcXVhbCBkaWQgbm90IGZhaWwuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihtc2cpIDwgbGVuKGRpZmYpKQorICAgICAgICBzZWxmLmFzc2VydEluKG9taXR0ZWQsIG1zZykKKworICAgICAgICBzZWxmLm1heERpZmYgPSBsZW4oZGlmZikgKiAyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChzZXExLCBzZXEyKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtc2cgPSBlLmFyZ3NbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0U2VxdWVuY2VFcXVhbCBkaWQgbm90IGZhaWwuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihtc2cpID4gbGVuKGRpZmYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG9taXR0ZWQsIG1zZykKKworICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChzZXExLCBzZXEyKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBtc2cgPSBlLmFyZ3NbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0U2VxdWVuY2VFcXVhbCBkaWQgbm90IGZhaWwuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihtc2cpID4gbGVuKGRpZmYpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG9taXR0ZWQsIG1zZykKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGVNZXNzYWdlKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxCisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UoJ2ZvbycsICdiYXInKQorICAgICAgICBvbWl0dGVkID0gdW5pdHRlc3QuY2FzZS5ESUZGX09NSVRURUQgJSBsZW4oJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ2ZvbycgKyBvbWl0dGVkKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZSgnZm9vJywgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ2Zvb2JhcicpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gNAorICAgICAgICBtZXNzYWdlID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnZm9vYmFyJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0RGljdEVxdWFsVHJ1bmNhdGVzKHNlbGYpOgorICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuVGVzdENhc2UoJ2Fzc2VydEVxdWFsJykKKyAgICAgICAgZGVmIHRydW5jYXRlKG1zZywgZGlmZik6CisgICAgICAgICAgICByZXR1cm4gJ2ZvbycKKyAgICAgICAgdGVzdC5fdHJ1bmNhdGVNZXNzYWdlID0gdHJ1bmNhdGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdC5hc3NlcnREaWN0RXF1YWwoe30sIHsxOiAwfSkKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdmb28nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnREaWN0RXF1YWwgZGlkIG5vdCBmYWlsJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0TXVsdGlMaW5lRXF1YWxUcnVuY2F0ZXMoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5UZXN0Q2FzZSgnYXNzZXJ0RXF1YWwnKQorICAgICAgICBkZWYgdHJ1bmNhdGUobXNnLCBkaWZmKToKKyAgICAgICAgICAgIHJldHVybiAnZm9vJworICAgICAgICB0ZXN0Ll90cnVuY2F0ZU1lc3NhZ2UgPSB0cnVuY2F0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0LmFzc2VydE11bHRpTGluZUVxdWFsKCdmb28nLCAnYmFyJykKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdmb28nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRNdWx0aUxpbmVFcXVhbCBkaWQgbm90IGZhaWwnKQorCisgICAgZGVmIHRlc3RBc3NlcnRJdGVtc0VxdWFsKHNlbGYpOgorICAgICAgICBhID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAyLCAzXSwgWzMsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoWydmb28nLCAnYmFyJywgJ2JheiddLCBbJ2JhcicsICdiYXonLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChbYSwgYSwgMiwgMiwgM10sIChhLCAyLCAzLCBhLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAiMiIsICJhIiwgImEiXSwgWyJhIiwgIjIiLCBUcnVlLCAiYSJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDJdICsgWzNdICogMTAwLCBbMV0gKiAxMDAgKyBbMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgIjIiLCAiYSIsICJhIl0sIFsiYSIsICIyIiwgVHJ1ZSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBdLCBbMTAsIDExXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMCwgMTFdLCBbMTBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwLCAxMSwgMTBdLCBbMTAsIDExXSkKKworICAgICAgICAjIFRlc3QgdGhhdCBzZXF1ZW5jZXMgb2YgdW5oYXNoYWJsZSBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIHNhbWVuZXNzOgorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoW1sxLCAyXSwgWzMsIDRdLCAwXSwgW0ZhbHNlLCBbMywgNF0sIFsxLCAyXV0pCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CisgICAgICAgICAgICAjIGhhc2hhYmxlIHR5cGVzLCBidXQgbm90IG9yZGVyYWJsZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwgW2Rpdm1vZCwgJ3gnLCAxLCA1aiwgMmosIGZyb3plbnNldCgpXSkKKyAgICAgICAgICAgICMgY29tcGFyaW5nIGRpY3RzIHJhaXNlcyBhIHB5M2sgd2FybmluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFt7J2EnOiAxfSwgeydiJzogMn1dLCBbeydiJzogMn0sIHsnYSc6IDF9XSkKKyAgICAgICAgICAgICMgY29tcGFyaW5nIGhldGVyb2dlbm91cyBub24taGFzaGFibGUgc2VxdWVuY2VzIHJhaXNlcyBhIHB5M2sgd2FybmluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAneCcsIGRpdm1vZCwgW11dLCBbZGl2bW9kLCBbXSwgJ3gnLCAxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sIFtkaXZtb2QsIFtdLCAneCcsIDEsIDVqLCAyaiwgc2V0KCldKQorICAgICAgICAgICAgIyBmYWlsIHRoZSB0ZXN0IGlmIHdhcm5pbmdzIGFyZSBub3Qgc2lsZW5jZWQKKyAgICAgICAgICAgIGlmIHcud2FybmluZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRJdGVtc0VxdWFsIHJhaXNlZCBhIHdhcm5pbmc6ICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIody53YXJuaW5nc1swXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbWzFdXSwgW1syXV0pCisKKyAgICAgICAgIyBTYW1lIGVsZW1lbnRzLCBidXQgbm90IHNhbWUgc2VxdWVuY2UgbGVuZ3RoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgMSwgMl0sIFsyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAxLCAiMiIsICJhIiwgImEiXSwgWyIyIiwgIjIiLCBUcnVlLCAiYSJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIHsnYic6IDJ9LCBOb25lLCBUcnVlXSwgW3snYic6IDJ9LCBUcnVlLCBOb25lXSkKKworICAgICAgICAjIFNhbWUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgcmVsaWFibHkgY29tcGFyZSwgaW4KKyAgICAgICAgIyBkaWZmZXJlbnQgb3JkZXIsIHNlZSBpc3N1ZSAxMDI0MgorICAgICAgICBhID0gW3syLDR9LCB7MSwyfV0KKyAgICAgICAgYiA9IGFbOjotMV0KKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdEFzc2VydFNldEVxdWFsKHNlbGYpOgorICAgICAgICBzZXQxID0gc2V0KCkKKyAgICAgICAgc2V0MiA9IHNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIE5vbmUsIHNldDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgW10sIHNldDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBbXSkKKworICAgICAgICBzZXQxID0gc2V0KFsnYSddKQorICAgICAgICBzZXQyID0gc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBzZXQoWydhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MikKKworICAgICAgICBzZXQxID0gc2V0KFsnYSddKQorICAgICAgICBzZXQyID0gc2V0KFsnYScsICdiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKworICAgICAgICBzZXQxID0gc2V0KFsnYSddKQorICAgICAgICBzZXQyID0gZnJvemVuc2V0KFsnYScsICdiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKworICAgICAgICBzZXQxID0gc2V0KFsnYScsICdiJ10pCisgICAgICAgIHNldDIgPSBmcm96ZW5zZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoKQorICAgICAgICBzZXQyID0gImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDIsIHNldDEpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgYW55IHN0cmluZyBmb3JtYXR0aW5nIGlzIHR1cGxlLXNhZmUKKyAgICAgICAgc2V0MSA9IHNldChbKDAsIDEpLCAoMiwgMyldKQorICAgICAgICBzZXQyID0gc2V0KFsoNCwgNSldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisKKyAgICBkZWYgdGVzdEluZXF1YWxpdHkoc2VsZik6CisgICAgICAgICMgVHJ5IGludHMKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygxLCAyKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLCAyKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgMiwgMSkKKworICAgICAgICAjIFRyeSBGbG9hdHMKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDEuMSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgxLjEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMS4wLCAxLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMS4wLCAxLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgMS4wLCAxLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAxLjEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDEuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAxLjEsIDEuMCkKKworICAgICAgICAjIFRyeSBTdHJpbmdzCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcignYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKCdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoJ2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgJ2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAnYnVnJywgJ2FudCcpCisKKyAgICAgICAgIyBUcnkgVW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIodSdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHUnYnVnJywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh1J2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHUnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCh1J2FudCcsIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwodSdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCB1J2FudCcsIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIHUnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCB1J2FudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIHUnYnVnJywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgdSdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsIHUnYnVnJywgdSdhbnQnKQorCisgICAgICAgICMgVHJ5IE1peGVkIFN0cmluZy9Vbmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcignYnVnJywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIodSdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodSdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodSdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKCdhbnQnLCB1J2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh1J2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCh1J2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCh1J2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgJ2FudCcsIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIHUnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgdSdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgJ2FudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgdSdhbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsICdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCB1J2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIHUnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsICdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsIHUnYnVnJywgJ2FudCcpCisKKyAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYpOgorICAgICAgICBzYW1wbGVfdGV4dCA9IGIiIiJcCitodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuMy9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKK3Rlc3QgY2FzZQorICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dCisiIiIKKyAgICAgICAgcmV2aXNlZF9zYW1wbGVfdGV4dCA9IGIiIiJcCitodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuNC4xL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAordGVzdCBjYXNlCisgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0gWW91IG1heSBwcm92aWRlIHlvdXIKKyAgICBvd24gaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBzdWJjbGFzcyBmcm9tIFRlc3RDYXNlLCBvZiBjb3Vyc2UuCisiIiIKKyAgICAgICAgc2FtcGxlX3RleHRfZXJyb3IgPSBiIiIiXAorLSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuMy9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKKz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKysgaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy8yLjQuMS9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKKz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgorICB0ZXN0IGNhc2UKKy0gICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dCisrICAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXSBZb3UgbWF5IHByb3ZpZGUgeW91cgorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKysrKysrKysrKysrKysrKysrKysKKysgICAgIG93biBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHN1YmNsYXNzIGZyb20gVGVzdENhc2UsIG9mIGNvdXJzZS4KKyIiIgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIGZvciB0eXBlX2NoYW5nZXIgaW4gKGxhbWJkYSB4OiB4LCBsYW1iZGEgeDogeC5kZWNvZGUoJ3V0ZjgnKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbCh0eXBlX2NoYW5nZXIoc2FtcGxlX3RleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9jaGFuZ2VyKHJldmlzZWRfc2FtcGxlX3RleHQpKQorICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICAjIG5lZWQgdG8gcmVtb3ZlIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBlcnJvciBtZXNzYWdlCisgICAgICAgICAgICAgICAgZXJyb3IgPSBzdHIoZSkuZW5jb2RlKCd1dGY4Jykuc3BsaXQoJ1xuJywgMSlbMV0KKworICAgICAgICAgICAgICAgICMgYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaXMgaG9va2VkIHVwIGFzIHRoZSBkZWZhdWx0IGZvcgorICAgICAgICAgICAgICAgICMgdW5pY29kZSBzdHJpbmdzIC0gc28gd2UgY2FuJ3QgdXNlIGl0IGZvciB0aGlzIGNoZWNrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNhbXBsZV90ZXh0X2Vycm9yID09IGVycm9yKQorCisgICAgZGVmIHRlc3RBc2VydEVxdWFsU2luZ2xlTGluZShzZWxmKToKKyAgICAgICAgc2FtcGxlX3RleHQgPSB1ImxhZGVuIHN3YWxsb3dzIGZseSBzbG93bHkiCisgICAgICAgIHJldmlzZWRfc2FtcGxlX3RleHQgPSB1InVubGFkZW4gc3dhbGxvd3MgZmx5IHF1aWNrbHkiCisgICAgICAgIHNhbXBsZV90ZXh0X2Vycm9yID0gIiIiXAorLSBsYWRlbiBzd2FsbG93cyBmbHkgc2xvd2x5Cis/ICAgICAgICAgICAgICAgICAgICBeXl5eCisrIHVubGFkZW4gc3dhbGxvd3MgZmx5IHF1aWNrbHkKKz8gKysgICAgICAgICAgICAgICAgICAgXl5eXl4KKyIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXBsZV90ZXh0LCByZXZpc2VkX3NhbXBsZV90ZXh0KQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlcnJvciA9IHN0cihlKS5zcGxpdCgnXG4nLCAxKVsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNhbXBsZV90ZXh0X2Vycm9yID09IGVycm9yKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc05vbmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSgnRGpab1Bsb0dlYXJzIG9uIFJhaWxzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm90Tm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0UmVnZXhwTWF0Y2hlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKCdhc2RmYWJhc2RmJywgcidhYisnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhYWFzJywgcidhYWFhJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhwKHNlbGYpOgorICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIFN0dWIoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbk1vY2soJ1dlIGV4cGVjdCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uTW9jaywgcmUuY29tcGlsZSgnZXhwZWN0JCcpLCBTdHViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb25Nb2NrLCAnZXhwZWN0JCcsIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEV4Y2VwdGlvbk1vY2ssIHUnZXhwZWN0JCcsIFN0dWIpCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdFJhaXNlc1JlZ2V4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkJCcsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgcmUuY29tcGlsZSgneCcpLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkJCcsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgJ3gnLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkJCcsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgdSd4JywKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE5vbmUpCisKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4cE1pc21hdGNoKHNlbGYpOgorICAgICAgICBkZWYgU3R1YigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgciciXF5FeHBlY3RlZFwkIiBkb2VzIG5vdCBtYXRjaCAiVW5leHBlY3RlZCInLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwLCBFeGNlcHRpb24sICdeRXhwZWN0ZWQkJywKKyAgICAgICAgICAgICAgICBTdHViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgciciXF5FeHBlY3RlZFwkIiBkb2VzIG5vdCBtYXRjaCAiVW5leHBlY3RlZCInLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwLCBFeGNlcHRpb24sIHUnXkV4cGVjdGVkJCcsCisgICAgICAgICAgICAgICAgU3R1YikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIHInIlxeRXhwZWN0ZWRcJCIgZG9lcyBub3QgbWF0Y2ggIlVuZXhwZWN0ZWQiJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoJ15FeHBlY3RlZCQnKSwgU3R1YikKKworICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzRXhjVmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEV4Y2VwdGlvbk1vY2soRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgU3R1Yihmb28pOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uTW9jayhmb28pCisgICAgICAgIHYgPSAicGFydGljdWxhciB2YWx1ZSIKKworICAgICAgICBjdHggPSBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKQorICAgICAgICB3aXRoIGN0eDoKKyAgICAgICAgICAgIFN0dWIodikKKyAgICAgICAgZSA9IGN0eC5leGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIEV4Y2VwdGlvbk1vY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCB2KQorCisgICAgZGVmIHRlc3RTeW5vbnltQXNzZXJ0TWV0aG9kTmFtZXMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdW5kb2N1bWVudGVkIG1ldGhvZCBuYW1lIHN5bm9ueW1zLgorCisgICAgICAgIFBsZWFzZSBkbyBub3QgdXNlIHRoZXNlIG1ldGhvZHMgbmFtZXMgaW4geW91ciBvd24gY29kZS4KKworICAgICAgICBUaGlzIHRlc3QgY29uZmlybXMgdGhlaXIgY29udGludWVkIGV4aXN0ZW5jZSBhbmQgZnVuY3Rpb25hbGl0eQorICAgICAgICBpbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBleGlzdGluZyBjb2RlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoMywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMoMi4wLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWxzKDMuMCwgNS4wKQorICAgICAgICBzZWxmLmFzc2VydF8oVHJ1ZSkKKworICAgIGRlZiB0ZXN0UGVuZGluZ0RlcHJlY2F0aW9uTWV0aG9kTmFtZXMoc2VsZik6CisgICAgICAgICIiIlRlc3QgZmFpbCogbWV0aG9kcyBwZW5kaW5nIGRlcHJlY2F0aW9uLCB0aGV5IHdpbGwgd2FybiBpbiAzLjIuCisKKyAgICAgICAgRG8gbm90IHVzZSB0aGVzZSBtZXRob2RzLiAgVGhleSB3aWxsIGdvIGF3YXkgaW4gMy4zLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbElmRXF1YWwoMywgNSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIDMpCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgyLjAsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuZmFpbElmQWxtb3N0RXF1YWwoMy4wLCA1LjApCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYSBfOiAzLjE0ICsgdSdzcGFtJykKKyAgICAgICAgICAgIHNlbGYuZmFpbElmKEZhbHNlKQorCisgICAgZGVmIHRlc3REZWVwY29weShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTogNTY2MAorICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisKKyAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG93IHVwCisgICAgICAgIGRlZXBjb3B5KHRlc3QpCisKKyAgICBkZWYgdGVzdEtleWJvYXJkSW50ZXJydXB0KHNlbGYpOgorICAgICAgICBkZWYgX3JhaXNlKHNlbGY9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBkZWYgbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IF9yYWlzZQorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHNldFVwID0gX3JhaXNlCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKworICAgICAgICBjbGFzcyBUZXN0Myh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKyAgICAgICAgICAgIHRlYXJEb3duID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfcmFpc2UpCisKKyAgICAgICAgZm9yIGtsYXNzIGluIChUZXN0MSwgVGVzdDIsIFRlc3QzLCBUZXN0NCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAgICAgICBrbGFzcygndGVzdF9zb21ldGhpbmcnKS5ydW4oKQorCisgICAgZGVmIHRlc3RTeXN0ZW1FeGl0KHNlbGYpOgorICAgICAgICBkZWYgX3JhaXNlKHNlbGY9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisgICAgICAgIGRlZiBub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0VXAgPSBfcmFpc2UKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworICAgICAgICAgICAgdGVhckRvd24gPSBfcmFpc2UKKworICAgICAgICBjbGFzcyBUZXN0NCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF9yYWlzZSkKKworICAgICAgICBmb3Iga2xhc3MgaW4gKFRlc3QxLCBUZXN0MiwgVGVzdDMsIFRlc3Q0KToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICAgICAga2xhc3MoJ3Rlc3Rfc29tZXRoaW5nJykucnVuKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE1NWRlMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CkBAIC0wLDAgKzEsMzYyIEBACitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0RGlzY292ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgSGVhdmlseSBtb2NrZWQgdGVzdHMgc28gSSBjYW4gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c3RlbQorICAgIGRlZiB0ZXN0X2dldF9uYW1lX2Zyb21fcGF0aChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gJy9mb28nCisgICAgICAgIG5hbWUgPSBsb2FkZXIuX2dldF9uYW1lX2Zyb21fcGF0aCgnL2Zvby9iYXIvYmF6LnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCAnYmFyLmJheicpCisKKyAgICAgICAgaWYgbm90IF9fZGVidWdfXzoKKyAgICAgICAgICAgICMgYXNzZXJ0cyBhcmUgb2ZmCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5fZ2V0X25hbWVfZnJvbV9wYXRoKCcvYmFyL2Jhei5weScpCisKKyAgICBkZWYgdGVzdF9maW5kX3Rlc3RzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisKKyAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QxLnB5JywgJ3Rlc3QyLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAorICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5mb28nLCAndGVzdC1ub3QtYS1tb2R1bGUucHknLCAnYW5vdGhlcl9kaXInXSwKKyAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3QzLnB5JywgJ3Rlc3Q0LnB5JywgXV0KKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBwYXRoOiBwYXRoX2xpc3RzLnBvcCgwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQorCisgICAgICAgIGRlZiBpc2RpcihwYXRoKToKKyAgICAgICAgICAgIHJldHVybiBwYXRoLmVuZHN3aXRoKCdkaXInKQorICAgICAgICBvcy5wYXRoLmlzZGlyID0gaXNkaXIKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisKKyAgICAgICAgZGVmIGlzZmlsZShwYXRoKToKKyAgICAgICAgICAgICMgYW5vdGhlcl9kaXIgaXMgbm90IGEgcGFja2FnZSBhbmQgc28gc2hvdWxkbid0IGJlIHJlY3Vyc2VkIGludG8KKyAgICAgICAgICAgIHJldHVybiBub3QgcGF0aC5lbmRzd2l0aCgnZGlyJykgYW5kIG5vdCAnYW5vdGhlcl9kaXInIGluIHBhdGgKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNmaWxlKQorCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBsYW1iZGEgcGF0aDogcGF0aCArICcgbW9kdWxlJworICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSA9IGxhbWJkYSBtb2R1bGU6IG1vZHVsZSArICcgdGVzdHMnCisKKyAgICAgICAgdG9wX2xldmVsID0gb3MucGF0aC5hYnNwYXRoKCcvZm9vJykKKyAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsCisgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHModG9wX2xldmVsLCAndGVzdCoucHknKSkKKworICAgICAgICBleHBlY3RlZCA9IFtuYW1lICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCisgICAgICAgICAgICAgICAgICAgICgndGVzdDEnLCAndGVzdDInKV0KKyAgICAgICAgZXhwZWN0ZWQuZXh0ZW5kKFsoJ3Rlc3RfZGlyLiVzJyAlIG5hbWUpICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCisgICAgICAgICAgICAgICAgICAgICgndGVzdDMnLCAndGVzdDQnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZmluZF90ZXN0c193aXRoX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG9yaWdpbmFsX2xpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2xpc3RkaXIoKToKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBvcmlnaW5hbF9saXN0ZGlyCisgICAgICAgIG9yaWdpbmFsX2lzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIGRlZiByZXN0b3JlX2lzZmlsZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbF9pc2ZpbGUKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKKworICAgICAgICBkaXJlY3RvcmllcyA9IFsnYV9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10KKyAgICAgICAgcGF0aF9saXN0cyA9IFtkaXJlY3RvcmllcywgW10sIFtdLCBbXV0KKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBwYXRoOiBwYXRoX2xpc3RzLnBvcCgwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQorCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBsYW1iZGEgcGF0aDogVHJ1ZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKKworICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBwYXRoOiBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpIG5vdCBpbiBkaXJlY3RvcmllcworICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2ZpbGUpCisKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBwYXRocyA9IFtdCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MgPSBbXQorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICAgICAgICAgIHNlbGYucGF0aHMuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShwYXRoKSA9PSAndGVzdF9kaXJlY3RvcnknOgorICAgICAgICAgICAgICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZF90ZXN0c19hcmdzLmFwcGVuZCgobG9hZGVyLCB0ZXN0cywgcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2xvYWRfdGVzdHMnCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZF90ZXN0cyA9IGxvYWRfdGVzdHMKKworICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGF0aCA9PSBvdGhlci5wYXRoCisKKyAgICAgICAgICAgICMgU2lsZW5jZSBweTNrIHdhcm5pbmcKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBsYW1iZGEgbmFtZTogTW9kdWxlKG5hbWUpCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSwgdXNlX2xvYWRfdGVzdHMpOgorICAgICAgICAgICAgaWYgdXNlX2xvYWRfdGVzdHM6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCd1c2VfbG9hZF90ZXN0cyBzaG91bGQgYmUgRmFsc2UgZm9yIHBhY2thZ2VzJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUucGF0aCArICcgbW9kdWxlIHRlc3RzJworICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSA9IGxvYWRUZXN0c0Zyb21Nb2R1bGUKKworICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSAnL2ZvbycKKyAgICAgICAgIyB0aGlzIHRpbWUgbm8gJy5weScgb24gdGhlIHBhdHRlcm4gc28gdGhhdCBpdCBjYW4gbWF0Y2gKKyAgICAgICAgIyBhIHRlc3QgcGFja2FnZQorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKCcvZm9vJywgJ3Rlc3QqJykpCisKKyAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGVzdHMgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkgcGFja2FnZSBieSBjYWxsaW5nIGxvYWRfdGVzdHMKKyAgICAgICAgIyBhbmQgZGlyZWN0bHkgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkyIHBhY2thZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvYWRfdGVzdHMnLCAndGVzdF9kaXJlY3RvcnkyJyArICcgbW9kdWxlIHRlc3RzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLCBbJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddKQorCisgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5sb2FkX3Rlc3RzX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhsb2FkZXIsICd0ZXN0X2RpcmVjdG9yeScgKyAnIG1vZHVsZSB0ZXN0cycsICd0ZXN0KicpXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBvcmlnaW5hbF9pc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNmaWxlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IEZhbHNlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKworICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgZGVmIHJlc3RvcmVfcGF0aCgpOgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX3BhdGgpCisKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgubm9ybXBhdGgoJy9mb28nKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJy9mb28vYmFyJywgdG9wX2xldmVsX2Rpcj0nL2ZvbycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuX3RvcF9sZXZlbF9kaXIsIGZ1bGxfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmdWxsX3BhdGgsIHN5cy5wYXRoKQorCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IFRydWUKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBwYXRoOiBUcnVlCisKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKKworICAgICAgICBfZmluZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiBbJ3Rlc3RzJ10KKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBzdHIKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignL2Zvby9iYXIvYmF6JywgJ3BhdHRlcm4nLCAnL2Zvby9iYXInKQorCisgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoJy9mb28vYmFyJykKKyAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKCcvZm9vL2Jhci9iYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCAiWyd0ZXN0cyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuX3RvcF9sZXZlbF9kaXIsIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZpbmRfdGVzdHNfYXJncywgWyhzdGFydF9kaXIsICdwYXR0ZXJuJyldKQorICAgICAgICBzZWxmLmFzc2VydEluKHRvcF9sZXZlbF9kaXIsIHN5cy5wYXRoKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCisgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy4nKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICB0ZXN0ID0gbGlzdChsaXN0KHN1aXRlKVswXSlbMF0gIyBleHRyYWN0IHRlc3QgZnJvbSBzdWl0ZQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKKyAgICAgICAgIyBIYWhhIC0gdGFrZSB0aGF0IHVuaW5zdGFudGlhYmxlIGNsYXNzCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKworICAgICAgICBhcmdzID0gW10KKyAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKKyAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGFyZ3YpCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJywgJ2ZvbycsICdiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2ZvbycsICdiYXInXSkKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdG9vX21hbnlfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBjbGFzcyBTdG9wKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiB1c2FnZUV4aXQoKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3AKKworICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0udXNhZ2VFeGl0ID0gdXNhZ2VFeGl0CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ10pCisKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfY2FsbHNfbG9hZGVyKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisKKyAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGRlZiBkaXNjb3ZlcihzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2RpcikpCisgICAgICAgICAgICAgICAgcmV0dXJuICd0ZXN0cycKKworICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctdiddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnLicsICd0ZXN0Ki5weScsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLS12ZXJib3NlJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoW10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJywgJ2VnZ3MnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAnZWdncycsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnZmlzaCcsICdlZ2dzJywgJ2hhbSddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgJ2hhbScpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXMnLCAnZmlzaCddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICd0ZXN0Ki5weScsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXQnLCAnZmlzaCddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnLicsICd0ZXN0Ki5weScsICdmaXNoJyldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctcCcsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ2Zpc2gnLCBOb25lKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJvZ3JhbS5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcm9ncmFtLmNhdGNoYnJlYWspCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy1wJywgJ2VnZ3MnLCAnLXMnLCAnZmlzaCcsICctdicsICctZicsICctYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAnZWdncycsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyYW0uZmFpbGZhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9ncmFtLmNhdGNoYnJlYWspCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfbW9kdWxlX2NsYXNoKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIF9fZmlsZV9fID0gJ2Jhci9mb28ucHknCisgICAgICAgIHN5cy5tb2R1bGVzWydmb28nXSA9IE1vZHVsZQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoJ2ZvbycpCisgICAgICAgIG9yaWdpbmFsX2xpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9yaWdpbmFsX2lzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbF9pc2ZpbGUKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydmb28nXQorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHN5cy5wYXRoOgorICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZShmdWxsX3BhdGgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorCisgICAgICAgIGRlZiBsaXN0ZGlyKF8pOgorICAgICAgICAgICAgcmV0dXJuIFsnZm9vLnB5J10KKyAgICAgICAgZGVmIGlzZmlsZShfKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGRlZiBpc2RpcihfKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBpc2RpcgorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG1vZF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoJ2JhcicpCisgICAgICAgIGV4cGVjdGVkX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnZm9vJykKKyAgICAgICAgbXNnID0gcmUuZXNjYXBlKHIiJ2ZvbycgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICVyLiAiCisgICAgICAgICAgICAgICAgIklzIHRoaXMgbW9kdWxlIGdsb2JhbGx5IGluc3RhbGxlZD8iICUgKG1vZF9kaXIsIGV4cGVjdGVkX2RpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgSW1wb3J0RXJyb3IsICdeJXMkJyAlIG1zZywgbG9hZGVyLmRpc2NvdmVyLAorICAgICAgICAgICAgc3RhcnRfZGlyPSdmb28nLCBwYXR0ZXJuPSdmb28ucHknCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMucGF0aFswXSwgZnVsbF9wYXRoKQorCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfcGF0aChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdGVzdHMgPSBbc2VsZl0KKyAgICAgICAgZXhwZWN0ZWRQYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZSh1bml0dGVzdC50ZXN0Ll9fZmlsZV9fKSkKKworICAgICAgICBzZWxmLndhc1J1biA9IEZhbHNlCisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi53YXNSdW4gPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2RpciwgZXhwZWN0ZWRQYXRoKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RzCisgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCd1bml0dGVzdC50ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud2FzUnVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgdGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2RkODc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CkBAIC0wLDAgKzEsMTQ4IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorCisKK2NsYXNzIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gRm9yCisgICAgIyBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgMSIKKyAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5jb3VudFRlc3RDYXNlcygpLCAxKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKKyAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGRlZiBzZXRVcCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHRlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHNpZ25hbHMKKyAgICAjIGEgZmFpbHVyZSAoYXMgb3Bwb3NlZCB0byBhbiBlcnJvcikuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2ZhaWx1cmVfaW5fdGVzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgdGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgdGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsICdhZGRFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCisgICAgIworICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcworICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKKyAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcworICAgICMganVzdCBzYXkgInN0cmluZyIpCisgICAgZGVmIHRlc3RfaWQoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGVzdC5pZCgpLCBiYXNlc3RyaW5nKQorCisgICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCisgICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucworICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgorICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksIE5vbmUpCisKKyAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KKyAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCisgICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fc2luZ2xlbGluZV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGRlc2MgPSAidGhpcyB0ZXN0cyBmb28iCisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSwgZGVzY3JpcHRpb249ZGVzYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDRhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpAQCAtMCwwICsxLDEyODYgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdExvYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQorCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgaXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZXZlbiBpZiBubyB0ZXN0cyB3ZXJlIGZvdW5kCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19ub19tYXRjaGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBlbXB0eV9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCBlbXB0eV9zdWl0ZSkKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSgpIGlzIGdpdmVuIGFuIG9iamVjdAorICAgICMgdGhhdCBpc24ndCBhIHN1YmNsYXNzIG9mIFRlc3RDYXNlPyBTcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucworICAgICMgaWYgdGVzdENhc2VDbGFzcyBpcyBhIHN1YmNsYXNzIG9mIFRlc3RTdWl0ZT8KKyAgICAjCisgICAgIyBUaGlzIGlzIGNoZWNrZWQgZm9yIHNwZWNpZmljYWxseSBpbiB0aGUgY29kZSwgc28gd2UgYmV0dGVyIGFkZCBhCisgICAgIyB0ZXN0IGZvciBpdC4KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX1Rlc3RTdWl0ZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTm90QVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoTm90QVRlc3RDYXNlKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdTaG91bGQgcmFpc2UgVHlwZUVycm9yJykKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgTWFrZSBzdXJlIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSgpIHBpY2tzIHVwIHRoZSBkZWZhdWx0IHRlc3QgbWV0aG9kCisgICAgIyBuYW1lIChhcyBzcGVjaWZpZWQgYnkgVGVzdENhc2UpLCBldmVuIHRob3VnaCB0aGUgbWV0aG9kIG5hbWUgZG9lcworICAgICMgbm90IG1hdGNoIHRoZSBkZWZhdWx0IFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeCBzdHJpbmcKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX2RlZmF1bHRfbWV0aG9kX25hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgICMgVGhpcyBoYXMgdG8gYmUgZmFsc2UgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgncnVuVGVzdCcuc3RhcnRzd2l0aChsb2FkZXIudGVzdE1ldGhvZFByZWZpeCkpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW0ZvbygncnVuVGVzdCcpXSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fVGVzdENhc2Vfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIGV4cGVjdGVkID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgZXhwZWN0ZWQpCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIG5vIHRlc3RzIGFyZSBmb3VuZCAobm8gVGVzdENhc2UgaW5zdGFuY2VzKT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub19UZXN0Q2FzZV9pbnN0YW5jZXMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgbm8gdGVzdHMgYXJlIGZvdW5kIChUZXN0Q2FzZXMgaW5zdGFuY2VzLCBidXQgbm8gdGVzdHMpPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vX1Rlc3RDYXNlX3Rlc3RzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbG9hZGVyLnN1aXRlQ2xhc3MoKV0pCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UicworICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tTW9kdWxlKCkgaXMgZ2l2ZW4gc29tZXRoaW5nIG90aGVyCisgICAgIyB0aGFuIGEgbW9kdWxlPworICAgICMKKyAgICAjIFhYWCBDdXJyZW50bHksIGl0IHN1Y2NlZWRzIGFueXdheS4gVGhpcyBmbGV4aWJpbGl0eQorICAgICMgc2hvdWxkIGVpdGhlciBiZSBkb2N1bWVudGVkIG9yIGxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBzaG91bGQKKyAgICAjIHJhaXNlIGEgVHlwZUVycm9yCisgICAgIworICAgICMgWFhYIENlcnRhaW4gcGVvcGxlIGFyZSB1c2luZyB0aGlzIGJlaGF2aW91ci4gV2UnbGwgYWRkIGEgdGVzdCBmb3IgaXQKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub3RfYV9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE5vdEFNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHRlc3RfMiA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKworICAgICMgQ2hlY2sgdGhhdCBsb2FkVGVzdHNGcm9tTW9kdWxlIGhvbm9ycyAob3Igbm90KSBhIG1vZHVsZQorICAgICMgd2l0aCBhIGxvYWRfdGVzdHMgZnVuY3Rpb24uCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZF90ZXN0c19hcmdzLCBbbG9hZGVyLCBzdWl0ZSwgTm9uZV0pCisKKyAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtLCB1c2VfbG9hZF90ZXN0cz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkX3Rlc3RzX2FyZ3MsIFtdKQorCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fZmF1bHR5X2xvYWRfdGVzdHMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKworICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc29tZSBmYWlsdXJlJykKKyAgICAgICAgbS5sb2FkX3Rlc3RzID0gbG9hZF90ZXN0cworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgdW5pdHRlc3QuVGVzdFN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgIHRlc3QgPSBsaXN0KHN1aXRlKVswXQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgInNvbWUgZmFpbHVyZSIsIHRlc3QubSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIElzIFZhbHVlRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGVtcHR5IG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycz8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbWFsZm9ybWVkX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnYWJjICgpIC8vJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gYQorICAgICMgbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGEgbW9kdWxlIGJ5IHRoYXQgbmFtZSBjYW4ndCBiZSBmb3VuZD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9tb2R1bGVfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIG1vZHVsZSBuYW1lZCBzZGFzZmFzZmFzZGYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd1bml0dGVzdC5zZGFzZmFzZmFzZGYnKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB3ZSBwcm92aWRlIHRoZSBtb2R1bGUsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0IGJlCisgICAgIyBmb3VuZD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdW5rbm93bl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gcGFzc2VkIGFuIGVtcHR5CisgICAgIyBuYW1lIHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlPworICAgICMKKyAgICAjIFhYWCBTaG91bGQgcHJvYmFibHkgcmFpc2UgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gQXR0cmlidXRlRXJyb3IKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfZW1wdHlfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYW4gaW1wb3NzaWJsZSBuYW1lIGlzIGdpdmVuLCByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQKKyAgICAjIGBtb2R1bGVgPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVHlwZUVycm9yIHdoZW4gdGhlIGBtb2R1bGVgIGFyZ3VtZW50CisgICAgIyBpc24ndCBhIG1vZHVsZSBvYmplY3Q/CisgICAgIworICAgICMgWFhYIEFjY2VwdHMgdGhlIG5vdC1hLW1vZHVsZSBvYmplY3QsIGlnbm9ybmluZyB0aGUgb2JqZWN0J3MgdHlwZQorICAgICMgVGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIG9yIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgY2hhbmdlZAorICAgICMKKyAgICAjIFhYWCBTb21lIHBlb3BsZSBhcmUgcmVseWluZyBvbiB0aGlzLCBzbyBrZWVwIGl0IGZvciBub3cKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0XzInLCBOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFtNeVRlc3RDYXNlKCd0ZXN0JyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgRG9lcyBpdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG5hbWUgcmVzb2x2ZXMgdG8gYW4gaW52YWxpZAorICAgICMgb2JqZWN0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9iYWRfb2JqZWN0KHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIG0udGVzdGNhc2VfMSA9IG9iamVjdCgpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5CisgICAgIyByZXNvbHZlIGVpdGhlciB0byAuLi4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdHN1aXRlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3QnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lKCkgcmFpc2UgdGhlIHByb3BlciBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8KKyAgICAjIHJlc29sdmUgImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiB0aGF0IGRvZXNuJ3QgZXhpc3QKKyAgICAjIGZvciB0aGUgZ2l2ZW4gbmFtZSAocmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGUpPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3Rmb28nLCBtKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKKyAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdFN1aXRlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKKyAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0Q2FzZScsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0Y2FzZV8xXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSAuLi4gaW5zdGFuY2UiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2VfUHJvcGVyU3VpdGVDbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3ViVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6CisgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IFN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RDYXNlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzFdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kX1Byb3BlclN1aXRlQ2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFN1YlRlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzPVN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0JywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl93cm9uZycsIG0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuCisgICAgIyBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0CisgICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KKyAgICAgICAgIworICAgICAgICBtb2R1bGVfbmFtZSA9ICd1bml0dGVzdC50ZXN0LmR1bW15JworICAgICAgICBzeXMubW9kdWxlcy5wb3AobW9kdWxlX25hbWUsIE5vbmUpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG1vZHVsZV9uYW1lKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCisKKyAgICAgICAgICAgICMgbW9kdWxlIHNob3VsZCBub3cgYmUgbG9hZGVkLCB0aGFua3MgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlNpbWlsYXIgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKSwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyCisgICAgIyB0aGFuIGEgc2luZ2xlIG5hbWUuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZV9saXN0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQorCisgICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKKyAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PworICAgICMKKyAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBhIFZhbHVlRXJyb3Igb3IganVzdCByZXR1cm4gYW4gZW1wdHkgVGVzdFN1aXRlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfZW1wdHlfbmFtZV9saXN0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10sIHVuaXR0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgSXMgVmFsdWVFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gZW1wdHkgbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWycnXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiBpbXBvc3NpYmxlIG1vZHVsZSBuYW1lPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fbWFsZm9ybWVkX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydhYmMgKCkgLy8nXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBubyBtb2R1bGUgY2FuIGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbW9kdWxlX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQsIGJ1dCBub3QgdGhlIGF0dHJpYnV0ZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0J10pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZ2l2ZW4gYW4gdW5rbm93biBhdHRyaWJ1dGUgb24gYSBzcGVjaWZpZWQgYG1vZHVsZWAKKyAgICAjIGFyZ3VtZW50PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9uYW1lX3JlbGF0aXZlXzEoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEbyB1bmtub3duIGF0dHJpYnV0ZXMgKHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlKSBzdGlsbCByYWlzZSBhbgorICAgICMgZXhjZXB0aW9uIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHZhbGlkIGF0dHJpYnV0ZSBuYW1lcz8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbmFtZV9yZWxhdGl2ZV8yKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnVGVzdENhc2UnLCAnc2Rhc2Zhc2Zhc2RmJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZmFjZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nPworICAgICMKKyAgICAjIFhYWCBUaGlzIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IsIHRob3VnaCBWYWx1ZUVycm9yIGlzIHByb2JhYmx5CisgICAgIyBtb3JlIGFwcHJvcHJpYXRlCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgYXR0cmlidXRlIG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lcygpIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYG1vZHVsZWAgaXMgaW4gZmFjdAorICAgICMgYSBtb2R1bGU/CisgICAgIworICAgICMgWFhYIFRoaXMgdmFsaWRhdGlvbiBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoaXMgZmxleGliaWxpdHkgc2hvdWxkCisgICAgIyBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBhIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkLgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RfMiddLCBOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKKyAgICAjIG9iamVjdD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IGxvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0c3VpdGUnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbS50ZXN0c3VpdGVdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCisgICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdCddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKKyAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICAjCisgICAgIyBEb2VzIHRoZSBtZXRob2QgZ3JhY2VmdWxseSBoYW5kbGUgbmFtZXMgdGhhdCBpbml0aWFsbHkgbG9vayBsaWtlIHRoZXkKKyAgICAjIHJlc29sdmUgdG8gImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiBidXQgZG9uJ3Q/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0Y2FzZV8yID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGRlZiByZXR1cm5fVGVzdFN1aXRlKCk6CisgICAgICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKKyAgICAgICAgbS5yZXR1cm5fVGVzdFN1aXRlID0gcmV0dXJuX1Rlc3RTdWl0ZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fVGVzdFN1aXRlJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0Q2FzZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGRlZiByZXR1cm5fVGVzdENhc2UoKToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCisgICAgICAgIG0ucmV0dXJuX1Rlc3RDYXNlID0gcmV0dXJuX1Rlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0Q2FzZSddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtyZWZfc3VpdGVdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICAjCisgICAgIyBBcmUgc3RhdGljbWV0aG9kcyBoYW5kbGVkIGNvcnJlY3RseT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19jYWxsX3N0YXRpY21ldGhvZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdGNhc2VfMSA9IFRlc3QxKCd0ZXN0JykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28uZm9vJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX3dyb25nX3R5cGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgZGVmIHJldHVybl93cm9uZygpOgorICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgbS5yZXR1cm5fd3JvbmcgPSByZXR1cm5fd3JvbmcKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl93cm9uZyddLCBtKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KKyAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0CisgICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KKyAgICAgICAgIworICAgICAgICBtb2R1bGVfbmFtZSA9ICd1bml0dGVzdC50ZXN0LmR1bW15JworICAgICAgICBzeXMubW9kdWxlcy5wb3AobW9kdWxlX25hbWUsIE5vbmUpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbbW9kdWxlX25hbWVdKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKKworICAgICAgICAgICAgIyBtb2R1bGUgc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBUZXN0LmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKKyAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgWyd0ZXN0XzEnLCAndGVzdF8yJ10pCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIERvZXMgZ2V0VGVzdENhc2VOYW1lcygpIGJlaGF2ZSBhcHByb3ByaWF0ZWx5IGlmIG5vIHRlc3RzIGFyZSBmb3VuZD8KKyAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19ub190ZXN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgW10pCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIEFyZSBub3QtVGVzdENhc2VzIGhhbmRsZWQgZ3JhY2VmdWxseT8KKyAgICAjCisgICAgIyBYWFggVGhpcyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IsIG5vdCByZXR1cm4gYSBsaXN0CisgICAgIworICAgICMgWFhYIEl0J3MgdG9vIGxhdGUgaW4gdGhlIDIuNSByZWxlYXNlIGN5Y2xlIHRvIGZpeCB0aGlzLCBidXQgaXQgc2hvdWxkCisgICAgIyBwcm9iYWJseSBiZSByZXZpc2l0ZWQgZm9yIDIuNgorICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX25vdF9hX1Rlc3RDYXNlKHNlbGYpOgorICAgICAgICBjbGFzcyBCYWRDYXNlKGludCk6CisgICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBuYW1lcyA9IGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEJhZENhc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWyd0ZXN0X2ZvbyddKQorCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgaW5oZXJpdGVkIG5hbWVzIGFyZSBoYW5kbGVkLgorICAgICMKKyAgICAjIFRlc3RQLmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKKyAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19faW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RQKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0QyhUZXN0UCk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbmFtZXMgPSBbJ3Rlc3RfMScsICd0ZXN0XzInLCAndGVzdF8zJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0QyksIG5hbWVzKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMikKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHNfMSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSldCisgICAgICAgIHRlc3RzXzIgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSldCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0c18yKQorCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0c18yKQorCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKV0pCisgICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0c18yXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0c18yKQorCisgICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ3Rlc3QnIgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2RlZmF1bHRfdmFsdWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPT0gJ3Rlc3QnKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0cyA9IGxvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKKyAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCisKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0cykKKworICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KKyAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pKSwgdGVzdHMpCisKKyAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCisgICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkiCisgICAgIworICAgICMgRG9lcyBpdCBhY3R1YWxseSBhZmZlY3QgZ2V0VGVzdENhc2VOYW1lcygpPworICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19nZXRUZXN0Q2FzZU5hbWVzKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pLCB0ZXN0X25hbWVzKQorCisgICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIGNtcCgpIGZ1bmN0aW9uIgorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyBpcyBjbXApCisKKyAgICAjICJpdCBjYW4gYmUgc2V0IHRvIE5vbmUgdG8gZGlzYWJsZSB0aGUgc29ydC4iCisgICAgIworICAgICMgWFhYIEhvdyBpcyB0aGlzIGRpZmZlcmVudCBmcm9tIHJlYXNzaWduaW5nIGNtcD8gQXJlIHRoZSB0ZXN0cyByZXR1cm5lZAorICAgICMgaW4gYSByYW5kb20gb3JkZXIgb3Igc29tZXRoaW5nPyBUaGlzIGJlaGF2aW91ciBzaG91bGQgZGllCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX05vbmUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKworICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoRm9vKSksIHNldCh0ZXN0X25hbWVzKSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIkNhbGxhYmxlIG9iamVjdCB0aGF0IGNvbnN0cnVjdHMgYSB0ZXN0IHN1aXRlIGZyb20gYSBsaXN0IG9mIHRlc3RzLiIKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzID0gW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCisKKyAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAorICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzID0gW1tGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSksIHRlc3RzKQorCisgICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKKyAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHMgPSBbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHMpCisKKyAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAorICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHMgPSBbW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0cykKKworICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBUZXN0U3VpdGUgY2xhc3MiCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2FkZXIuc3VpdGVDbGFzcyBpcyB1bml0dGVzdC5UZXN0U3VpdGUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNhM2FiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CkBAIC0wLDAgKzEsMjU1IEBACitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X1Rlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0ZXN0cyA9IFtzZWxmXQorICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQorCisgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgICAgICBzZWxmLndhc1J1biA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfZGlyLCBleHBlY3RlZFBhdGgpCisgICAgICAgICAgICByZXR1cm4gdGVzdHMKKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3VuaXR0ZXN0LnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXNSdW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCB0ZXN0cykKKworICAgICMgSG9ycmlibGUgd2hpdGUgYm94IHRlc3QKKyAgICBkZWYgdGVzdE5vRXhpdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgdGVzdCA9IG9iamVjdCgpCisKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorCisgICAgICAgIG9sZFBhcnNlQXJncyA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnBhcnNlQXJncworICAgICAgICBkZWYgcmVzdG9yZVBhcnNlQXJncygpOgorICAgICAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzID0gb2xkUGFyc2VBcmdzCisgICAgICAgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnBhcnNlQXJncyA9IGxhbWJkYSAqYXJnczogTm9uZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZVBhcnNlQXJncykKKworICAgICAgICBkZWYgcmVtb3ZlVGVzdCgpOgorICAgICAgICAgICAgZGVsIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnRlc3QKKyAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0udGVzdCA9IHRlc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlbW92ZVRlc3QpCisKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLCB2ZXJib3NpdHk9MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0ucmVzdWx0LCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnRlc3QsIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisKKyAgICBjbGFzcyBGb29CYXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdFBhc3Moc2VsZik6CisgICAgICAgICAgICBhc3NlcnQgVHJ1ZQorICAgICAgICBkZWYgdGVzdEZhaWwoc2VsZik6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UKKworICAgIGNsYXNzIEZvb0JhckxvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAgICAgICAgIiIiVGVzdCBsb2FkZXIgdGhhdCByZXR1cm5zIGEgc3VpdGUgY29udGFpbmluZyBGb29CYXIuIiIiCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAorICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQorCisKKyAgICBkZWYgdGVzdF9Ob25FeGl0KHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QubWFpbihleGl0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2PVsiZm9vYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHByb2dyYW0sICdyZXN1bHQnKSkKKworCisgICAgZGVmIHRlc3RfRXhpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBTeXN0ZW1FeGl0LAorICAgICAgICAgICAgdW5pdHRlc3QubWFpbiwKKyAgICAgICAgICAgIGFyZ3Y9WyJmb29iYXIiXSwKKyAgICAgICAgICAgIHRlc3RSdW5uZXI9dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpLAorICAgICAgICAgICAgZXhpdD1UcnVlLAorICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorCisKKyAgICBkZWYgdGVzdF9FeGl0QXNEZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFN5c3RlbUV4aXQsCisgICAgICAgICAgICB1bml0dGVzdC5tYWluLAorICAgICAgICAgICAgYXJndj1bImZvb2JhciJdLAorICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSksCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisKKworY2xhc3MgSW5pdGlhbGlzYWJsZVByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgorICAgIGV4aXQgPSBGYWxzZQorICAgIHJlc3VsdCA9IE5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCisgICAgZGVmYXVsdFRlc3QgPSBOb25lCisgICAgdGVzdFJ1bm5lciA9IE5vbmUKKyAgICB0ZXN0TG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKKyAgICBwcm9nTmFtZSA9ICd0ZXN0JworICAgIHRlc3QgPSAndGVzdCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKK1JFU1VMVCA9IG9iamVjdCgpCisKK2NsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICBpbml0QXJncyA9IE5vbmUKKyAgICB0ZXN0ID0gTm9uZQorICAgIHJhaXNlRXJyb3IgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IGt3YXJncworICAgICAgICBpZiBGYWtlUnVubmVyLnJhaXNlRXJyb3I6CisgICAgICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBGYWxzZQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICBGYWtlUnVubmVyLnRlc3QgPSB0ZXN0CisgICAgICAgIHJldHVybiBSRVNVTFQKKworY2xhc3MgVGVzdENvbW1hbmRMaW5lQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3JhbSA9IEluaXRpYWxpc2FibGVQcm9ncmFtKCkKKyAgICAgICAgc2VsZi5wcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIEZha2VSdW5uZXIuaW5pdEFyZ3MgPSBOb25lCisgICAgICAgIEZha2VSdW5uZXIudGVzdCA9IE5vbmUKKyAgICAgICAgRmFrZVJ1bm5lci5yYWlzZUVycm9yID0gRmFsc2UKKworICAgIGRlZiB0ZXN0SGVscEFuZFVua25vd24oc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZGVmIHVzYWdlRXhpdChtc2c9Tm9uZSk6CisgICAgICAgICAgICBwcm9ncmFtLm1zZyA9IG1zZworICAgICAgICAgICAgcHJvZ3JhbS5leGl0ID0gVHJ1ZQorICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAorCisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy1IJywgJy0taGVscCc6CisgICAgICAgICAgICBwcm9ncmFtLmV4aXQgPSBGYWxzZQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvZ3JhbS5tc2cpCisKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsICctJCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm9ncmFtLm1zZykKKworICAgIGRlZiB0ZXN0VmVyYm9zaXR5KHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgZm9yIG9wdCBpbiAnLXEnLCAnLS1xdWlldCc6CisgICAgICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9IDEKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMCkKKworICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAxCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisKKyAgICBkZWYgdGVzdEJ1ZmZlckNhdGNoRmFpbGZhc3Qoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZm9yIGFyZywgYXR0ciBpbiAoKCdidWZmZXInLCAnYnVmZmVyJyksICgnZmFpbGZhc3QnLCAnZmFpbGZhc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGNoJywgJ2NhdGNoYnJlYWsnKSk6CisgICAgICAgICAgICBpZiBhdHRyID09ICdjYXRjaCcgYW5kIG5vdCBoYXNJbnN0YWxsSGFuZGxlcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQorICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKKyAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCisKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKworICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgorICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorCisgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBub3Rfbm9uZSkKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNSdW5uZXJDbGFzcyhzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAndmVyYm9zaXR5JworICAgICAgICBwcm9ncmFtLmZhaWxmYXN0ID0gJ2ZhaWxmYXN0JworICAgICAgICBwcm9ncmFtLmJ1ZmZlciA9ICdidWZmZXInCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCB7J3ZlcmJvc2l0eSc6ICd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWxmYXN0JzogJ2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWZmZXInOiAnYnVmZmVyJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci50ZXN0LCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5yZXN1bHQsIFJFU1VMVCkKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNSdW5uZXJJbnN0YW5jZShzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBGYWtlUnVubmVyLmluaXRBcmdzID0gTm9uZQorCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorCisgICAgICAgICMgQSBuZXcgRmFrZVJ1bm5lciBzaG91bGQgbm90IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoRmFrZVJ1bm5lci5pbml0QXJncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIudGVzdCwgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0ucmVzdWx0LCBSRVNVTFQpCisKKyAgICBkZWYgdGVzdFJ1blRlc3RzT2xkUnVubmVyQ2xhc3Moc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKworICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBUcnVlCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAndmVyYm9zaXR5JworICAgICAgICBwcm9ncmFtLmZhaWxmYXN0ID0gJ2ZhaWxmYXN0JworICAgICAgICBwcm9ncmFtLmJ1ZmZlciA9ICdidWZmZXInCisgICAgICAgIHByb2dyYW0udGVzdCA9ICd0ZXN0JworCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorCisgICAgICAgICMgSWYgaW5pdGlhbGlzaW5nIHJhaXNlcyBhIHR5cGUgZXJyb3IgaXQgc2hvdWxkIGJlIHJldHJpZWQKKyAgICAgICAgIyB3aXRob3V0IHRoZSBuZXcga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQorCisgICAgZGVmIHRlc3RDYXRjaEJyZWFrSW5zdGFsbHNIYW5kbGVyKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1sndW5pdHRlc3QubWFpbiddCisgICAgICAgIG9yaWdpbmFsID0gbW9kdWxlLmluc3RhbGxIYW5kbGVyCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBtb2R1bGUuaW5zdGFsbEhhbmRsZXIgPSBvcmlnaW5hbAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworICAgICAgICBzZWxmLmluc3RhbGxlZCA9IEZhbHNlCisgICAgICAgIGRlZiBmYWtlSW5zdGFsbEhhbmRsZXIoKToKKyAgICAgICAgICAgIHNlbGYuaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICBtb2R1bGUuaW5zdGFsbEhhbmRsZXIgPSBmYWtlSW5zdGFsbEhhbmRsZXIKKworICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisgICAgICAgIHByb2dyYW0uY2F0Y2hicmVhayA9IFRydWUKKworICAgICAgICBwcm9ncmFtLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmluc3RhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNmYWRkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKQEAgLTAsMCArMSw1MDAgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdFJlc3VsdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBOb3RlOiB0aGVyZSBhcmUgbm90IHNlcGFyYXRlIHRlc3RzIGZvciBUZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSwKKyAgICAjIFRlc3RSZXN1bHQuZXJyb3JzLCBUZXN0UmVzdWx0LmZhaWx1cmVzLCBUZXN0UmVzdWx0LnRlc3RzUnVuIG9yCisgICAgIyBUZXN0UmVzdWx0LnNob3VsZFN0b3AgYmVjYXVzZSB0aGVzZSBvbmx5IGhhdmUgbWVhbmluZyBpbiB0ZXJtcyBvZgorICAgICMgb3RoZXIgVGVzdFJlc3VsdCBtZXRob2RzLgorICAgICMKKyAgICAjIEFjY29yZGluZ2x5LCB0ZXN0cyBmb3IgdGhlIGFmb3JlbmFtZWQgYXR0cmlidXRlcyBhcmUgaW5jb3Jwb3JhdGVkCisgICAgIyBpbiB3aXRoIHRoZSB0ZXN0cyBmb3IgdGhlIGRlZmluaW5nIG1ldGhvZHMuCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdC5fc3Rkb3V0X2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0Ll9zdGRlcnJfYnVmZmVyKQorCisKKyAgICAjICJUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHNpZ25hbCB0aGF0IHRoZSBzZXQgb2YgdGVzdHMgYmVpbmcKKyAgICAjIHJ1biBzaG91bGQgYmUgYWJvcnRlZCBieSBzZXR0aW5nIHRoZSBUZXN0UmVzdWx0J3Mgc2hvdWxkU3RvcAorICAgICMgYXR0cmlidXRlIHRvIFRydWUuIgorICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdG9wKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBUcnVlKQorCisgICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IGlzIGFib3V0IHRvIGJlIHJ1bi4gVGhlIGRlZmF1bHQKKyAgICAjIGltcGxlbWVudGF0aW9uIHNpbXBseSBpbmNyZW1lbnRzIHRoZSBpbnN0YW5jZSdzIHRlc3RzUnVuIGNvdW50ZXIuIgorICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgIyAiQ2FsbGVkIGFmdGVyIHRoZSB0ZXN0IGNhc2UgdGVzdCBoYXMgYmVlbiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZgorICAgICMgdGhlIG91dGNvbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCisgICAgZGVmIHRlc3Rfc3RvcFRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICAjIFNhbWUgdGVzdHMgYXMgYWJvdmU7IG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgIyAiQ2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGVzdHMgYXJlIHJ1bi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zdGFydFRlc3RSdW5fc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0UnVuKCkKKworICAgICMgImFkZFN1Y2Nlc3ModGVzdCkiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc3VjY2VlZHMiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKyAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdCkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAjICJhZGRGYWlsdXJlKHRlc3QsIGVycikiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc2lnbmFscyBhIGZhaWx1cmUuIGVyciBpcyBhIHR1cGxlIG9mCisgICAgIyB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKTogKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIgorICAgICMgLi4uCisgICAgIyAid2FzU3VjY2Vzc2Z1bCgpIC0gUmV0dXJucyBUcnVlIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLAorICAgICMgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UiCisgICAgIyAuLi4KKyAgICAjICJ0ZXN0c1J1biAtIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4iCisgICAgIyAuLi4KKyAgICAjICJlcnJvcnMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGljaCByYWlzZWQgYW4KKyAgICAjIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBDb250YWlucyBmb3JtYXR0ZWQKKyAgICAjIHRyYWNlYmFja3MgaW5zdGVhZCBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKKyAgICAjIC4uLgorICAgICMgImZhaWx1cmVzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlIHdhcworICAgICMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIFRlc3RDYXNlLmZhaWwqKCkgb3IgVGVzdENhc2UuYXNzZXJ0KigpCisgICAgIyBtZXRob2RzLiBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkCisgICAgIyBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKKyAgICBkZWYgdGVzdF9hZGRGYWlsdXJlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdC5mYWlsKCJmb28iKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9jYXNlIGlzIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpCisKKyAgICAjICJhZGRFcnJvcih0ZXN0LCBlcnIpIgorICAgICMgLi4uCisgICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHJhaXNlcyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBlcnIKKyAgICAjIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCk6CisgICAgIyAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZEVycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjX2luZm9fdHVwbGUgPSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKyAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9jYXNlIGlzIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpCisKKyAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAgJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQorCisgICAgZGVmIHRlc3RTdGFja0ZyYW1lVHJpbW1pbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZyYW1lKG9iamVjdCk6CisgICAgICAgICAgICBjbGFzcyB0Yl9mcmFtZShvYmplY3QpOgorICAgICAgICAgICAgICAgIGZfZ2xvYmFscyA9IHt9CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5faXNfcmVsZXZhbnRfdGJfbGV2ZWwoRnJhbWUpKQorCisgICAgICAgIEZyYW1lLnRiX2ZyYW1lLmZfZ2xvYmFsc1snX191bml0dGVzdCddID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Ll9pc19yZWxldmFudF90Yl9sZXZlbChGcmFtZSkpCisKKyAgICBkZWYgdGVzdEZhaWxGYXN0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0Ll9leGNfaW5mb190b19zdHJpbmcgPSBsYW1iZGEgKl86ICcnCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgcmVzdWx0LmFkZEVycm9yKE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc2hvdWxkU3RvcCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0Ll9leGNfaW5mb190b19zdHJpbmcgPSBsYW1iZGEgKl86ICcnCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgZGVmIHRlc3RGYWlsRmFzdFNldEJ5UnVubmVyKHNlbGYpOgorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSwgZmFpbGZhc3Q9VHJ1ZSkKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZmFpbGZhc3QpCisgICAgICAgIHJ1bm5lci5ydW4odGVzdCkKKworCitjbGFzc0RpY3QgPSBkaWN0KHVuaXR0ZXN0LlRlc3RSZXN1bHQuX19kaWN0X18pCitmb3IgbSBpbiAoJ2FkZFNraXAnLCAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywKKyAgICAgICAgICAgJ19faW5pdF9fJyk6CisgICAgZGVsIGNsYXNzRGljdFttXQorCitkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPU5vbmUsIGRlc2NyaXB0aW9ucz1Ob25lLCB2ZXJib3NpdHk9Tm9uZSk6CisgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgIHNlbGYudGVzdHNSdW4gPSAwCisgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKKyAgICBzZWxmLmJ1ZmZlciA9IEZhbHNlCisKK2NsYXNzRGljdFsnX19pbml0X18nXSA9IF9faW5pdF9fCitPbGRSZXN1bHQgPSB0eXBlKCdPbGRSZXN1bHQnLCAob2JqZWN0LCksIGNsYXNzRGljdCkKKworY2xhc3MgVGVzdF9PbGRUZXN0UmVzdWx0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRPbGRSZXN1bHRXYXJuaW5nKHNlbGYsIHRlc3QsIGZhaWx1cmVzKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJUZXN0UmVzdWx0IGhhcyBubyBhZGQuKyBtZXRob2QsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICByZXN1bHQgPSBPbGRSZXN1bHQoKQorICAgICAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgZmFpbHVyZXMpCisKKyAgICBkZWYgdGVzdE9sZFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RTa2lwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2Zvb2JhcicpCisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdEV4cGVjdGVkRmFpbChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0VW5leHBlY3RlZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciB0ZXN0X25hbWUsIHNob3VsZF9wYXNzIGluICgoJ3Rlc3RTa2lwJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3RFeHBlY3RlZEZhaWwnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdFVuZXhwZWN0ZWRTdWNjZXNzJywgRmFsc2UpKToKKyAgICAgICAgICAgIHRlc3QgPSBUZXN0KHRlc3RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0T2xkUmVzdWx0V2FybmluZyh0ZXN0LCBpbnQobm90IHNob3VsZF9wYXNzKSkKKworICAgIGRlZiB0ZXN0T2xkVGVzdFRlc3VsdFNldHVwKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdubyByZWFzb24nKQorICAgICAgICAgICAgZGVmIHRlc3RGb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydE9sZFJlc3VsdFdhcm5pbmcoVGVzdCgndGVzdEZvbycpLCAwKQorCisgICAgZGVmIHRlc3RPbGRUZXN0UmVzdWx0Q2xhc3Moc2VsZik6CisgICAgICAgIEB1bml0dGVzdC5za2lwKCdubyByZWFzb24nKQorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRPbGRSZXN1bHRXYXJuaW5nKFRlc3QoJ3Rlc3RGb28nKSwgMCkKKworICAgIGRlZiB0ZXN0T2xkUmVzdWx0V2l0aFJ1bm5lcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHJlc3VsdGNsYXNzPU9sZFJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICAjIFRoaXMgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaWYgVGV4dFRlc3RSdW5uZXIgY2FuJ3QgaGFuZGxlIG9sZAorICAgICAgICAjIHRlc3QgcmVzdWx0IG9iamVjdHMKKyAgICAgICAgcnVubmVyLnJ1bihUZXN0KCd0ZXN0Rm9vJykpCisKKworY2xhc3MgTW9ja1RyYWNlYmFjayhvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9ybWF0X2V4Y2VwdGlvbigqXyk6CisgICAgICAgIHJldHVybiBbJ0EgdHJhY2ViYWNrJ10KKworZGVmIHJlc3RvcmVfdHJhY2ViYWNrKCk6CisgICAgdW5pdHRlc3QucmVzdWx0LnRyYWNlYmFjayA9IHRyYWNlYmFjaworCisKK2NsYXNzIFRlc3RPdXRwdXRCdWZmZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFsX291dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fcmVhbF9lcnIgPSBzeXMuc3RkZXJyCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9yZWFsX291dAorICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5fcmVhbF9lcnIKKworICAgIGRlZiB0ZXN0QnVmZmVyT3V0cHV0T2ZmKHNlbGYpOgorICAgICAgICByZWFsX291dCA9IHNlbGYuX3JlYWxfb3V0CisgICAgICAgIHJlYWxfZXJyID0gc2VsZi5fcmVhbF9lcnIKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuYnVmZmVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisKKyAgICBkZWYgdGVzdEJ1ZmZlck91dHB1dFN0YXJ0VGVzdEFkZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgIHJlYWxfb3V0ID0gc2VsZi5fcmVhbF9vdXQKKyAgICAgICAgcmVhbF9lcnIgPSBzZWxmLl9yZWFsX2VycgorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5idWZmZXIpCisKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKKworICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnN0ZG91dCwgU3RyaW5nSU8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuc3RkZXJyLCBTdHJpbmdJTykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKQorCisgICAgICAgIG91dF9zdHJlYW0gPSBzeXMuc3Rkb3V0CisgICAgICAgIGVycl9zdHJlYW0gPSBzeXMuc3RkZXJyCisKKyAgICAgICAgcmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyID0gU3RyaW5nSU8oKQorCisgICAgICAgIHByaW50ICdmb28nCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdiYXInCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRfc3RyZWFtLmdldHZhbHVlKCksICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyX3N0cmVhbS5nZXR2YWx1ZSgpLCAnYmFyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCByZXN1bHQuX29yaWdpbmFsX3N0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3RkZXJyLCByZXN1bHQuX29yaWdpbmFsX3N0ZGVycikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0LmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyLmdldHZhbHVlKCksICcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0X3N0cmVhbS5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJfc3RyZWFtLmdldHZhbHVlKCksICcnKQorCisKKyAgICBkZWYgZ2V0U3RhcnRlZFJlc3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5idWZmZXIgPSBUcnVlCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHRlc3RCdWZmZXJPdXRwdXRBZGRFcnJvck9yRmFpbHVyZShzZWxmKToKKyAgICAgICAgdW5pdHRlc3QucmVzdWx0LnRyYWNlYmFjayA9IE1vY2tUcmFjZWJhY2sKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfdHJhY2ViYWNrKQorCisgICAgICAgIGZvciBtZXNzYWdlX2F0dHIsIGFkZF9hdHRyLCBpbmNsdWRlX2Vycm9yIGluIFsKKyAgICAgICAgICAgICgnZXJyb3JzJywgJ2FkZEVycm9yJywgVHJ1ZSksCisgICAgICAgICAgICAoJ2ZhaWx1cmVzJywgJ2FkZEZhaWx1cmUnLCBGYWxzZSksCisgICAgICAgICAgICAoJ2Vycm9ycycsICdhZGRFcnJvcicsIFRydWUpLAorICAgICAgICAgICAgKCdmYWlsdXJlcycsICdhZGRGYWlsdXJlJywgRmFsc2UpCisgICAgICAgIF06CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmdldFN0YXJ0ZWRSZXN1bHQoKQorICAgICAgICAgICAgYnVmZmVyZWRfb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgYnVmZmVyZWRfZXJyID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgcmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZGVyciA9IFN0cmluZ0lPKCkKKworICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgJ2ZvbycKKyAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ2JhcicKKworCisgICAgICAgICAgICBhZGRGdW5jdGlvbiA9IGdldGF0dHIocmVzdWx0LCBhZGRfYXR0cikKKyAgICAgICAgICAgIGFkZEZ1bmN0aW9uKHNlbGYsIChOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQorCisgICAgICAgICAgICByZXN1bHRfbGlzdCA9IGdldGF0dHIocmVzdWx0LCBtZXNzYWdlX2F0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRfbGlzdCksIDEpCisKKyAgICAgICAgICAgIHRlc3QsIG1lc3NhZ2UgPSByZXN1bHRfbGlzdFswXQorICAgICAgICAgICAgZXhwZWN0ZWRPdXRNZXNzYWdlID0gdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgICAgIFN0ZG91dDoKKyAgICAgICAgICAgICAgICBmb28KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIGV4cGVjdGVkRXJyTWVzc2FnZSA9ICcnCisgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkRXJyTWVzc2FnZSA9IHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICBTdGRlcnI6CisgICAgICAgICAgICAgICAgYmFyCisgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBleHBlY3RlZEZ1bGxNZXNzYWdlID0gJ0EgdHJhY2ViYWNrJXMlcycgJSAoZXhwZWN0ZWRPdXRNZXNzYWdlLCBleHBlY3RlZEVyck1lc3NhZ2UpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdCwgc2VsZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRPdXRNZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZGVyci5nZXR2YWx1ZSgpLCBleHBlY3RlZEVyck1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG1lc3NhZ2UsIGV4cGVjdGVkRnVsbE1lc3NhZ2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjZhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtMCwwICsxLDI1MyBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHBpY2tsZQorCitmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgorCisKK2NsYXNzIFRlc3RDbGVhblVwKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0Q2xlYW5VcChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX2NsZWFudXBzLCBbXSkKKworICAgICAgICBjbGVhbnVwcyA9IFtdCisKKyAgICAgICAgZGVmIGNsZWFudXAxKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBjbGVhbnVwcy5hcHBlbmQoKDEsIGFyZ3MsIGt3YXJncykpCisKKyAgICAgICAgZGVmIGNsZWFudXAyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBjbGVhbnVwcy5hcHBlbmQoKDIsIGFyZ3MsIGt3YXJncykpCisKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxLCAxLCAyLCAzLCBmb3VyPSdoZWxsbycsIGZpdmU9J2dvb2RieWUnKQorICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9jbGVhbnVwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKGNsZWFudXAxLCAoMSwgMiwgMyksIGRpY3QoZm91cj0naGVsbG8nLCBmaXZlPSdnb29kYnllJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xlYW51cDIsICgpLCB7fSldKQorCisgICAgICAgIHJlc3VsdCA9IHRlc3QuZG9DbGVhbnVwcygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGVhbnVwcywgWygyLCAoKSwge30pLCAoMSwgKDEsIDIsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdChmb3VyPSdoZWxsbycsIGZpdmU9J2dvb2RieWUnKSldKQorCisgICAgZGVmIHRlc3RDbGVhblVwV2l0aEVycm9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTW9ja1Jlc3VsdChvYmplY3QpOgorICAgICAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBleGNfaW5mbyk6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKCh0ZXN0LCBleGNfaW5mbykpCisKKyAgICAgICAgcmVzdWx0ID0gTW9ja1Jlc3VsdCgpCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgdGVzdC5fcmVzdWx0Rm9yRG9DbGVhbnVwcyA9IHJlc3VsdAorCisgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCisgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCisgICAgICAgIGRlZiBjbGVhbnVwMSgpOgorICAgICAgICAgICAgcmFpc2UgZXhjMQorCisgICAgICAgIGRlZiBjbGVhbnVwMigpOgorICAgICAgICAgICAgcmFpc2UgZXhjMgorCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdC5kb0NsZWFudXBzKCkpCisKKyAgICAgICAgKHRlc3QxLCAoVHlwZTEsIGluc3RhbmNlMSwgXykpLCAodGVzdDIsIChUeXBlMiwgaW5zdGFuY2UyLCBfKSkgPSByZXZlcnNlZChNb2NrUmVzdWx0LmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGVzdDEsIFR5cGUxLCBpbnN0YW5jZTEpLCAodGVzdCwgRXhjZXB0aW9uLCBleGMxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGVzdDIsIFR5cGUyLCBpbnN0YW5jZTIpLCAodGVzdCwgRXhjZXB0aW9uLCBleGMyKSkKKworICAgIGRlZiB0ZXN0Q2xlYW51cEluUnVuKHNlbGYpOgorICAgICAgICBibG93VXAgPSBGYWxzZQorICAgICAgICBvcmRlcmluZyA9IFtdCisKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3NldFVwJykKKyAgICAgICAgICAgICAgICBpZiBibG93VXA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignZm9vJykKKworICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisKKyAgICAgICAgZGVmIGNsZWFudXAxKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAxJykKKyAgICAgICAgZGVmIGNsZWFudXAyKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAyJykKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxKQorICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCisKKyAgICAgICAgZGVmIHN1Y2Nlc3Moc29tZV90ZXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29tZV90ZXN0LCB0ZXN0KQorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzdWNjZXNzJykKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3MgPSBzdWNjZXNzCisKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZGVyaW5nLCBbJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsZWFudXAyJywgJ2NsZWFudXAxJywgJ3N1Y2Nlc3MnXSkKKworICAgICAgICBibG93VXAgPSBUcnVlCisgICAgICAgIG9yZGVyaW5nID0gW10KKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICdjbGVhbnVwMSddKQorCisgICAgZGVmIHRlc3RUZXN0Q2FzZURlYnVnRXhlY3V0ZXNDbGVhbnVwcyhzZWxmKToKKyAgICAgICAgb3JkZXJpbmcgPSBbXQorCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcCcpCisgICAgICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAxKQorCisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKworICAgICAgICBkZWYgY2xlYW51cDEoKToKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnY2xlYW51cDEnKQorICAgICAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorICAgICAgICBkZWYgY2xlYW51cDIoKToKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnY2xlYW51cDInKQorCisgICAgICAgIHRlc3QuZGVidWcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZGVyaW5nLCBbJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnY2xlYW51cDEnLCAnY2xlYW51cDInXSkKKworCitjbGFzcyBUZXN0X1RleHRUZXN0UnVubmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgVGV4dFRlc3RSdW5uZXIuIiIiCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocnVubmVyLmZhaWxmYXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ1bm5lci5idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnZlcmJvc2l0eSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5kZXNjcmlwdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnJlc3VsdGNsYXNzLCB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdCkKKworCisgICAgZGVmIHRlc3RCdWZmZXJBbmRGYWlsZmFzdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSwgZmFpbGZhc3Q9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI9VHJ1ZSkKKyAgICAgICAgIyBVc2Ugb3VyIHJlc3VsdCBvYmplY3QKKyAgICAgICAgcnVubmVyLl9tYWtlUmVzdWx0ID0gbGFtYmRhOiByZXN1bHQKKyAgICAgICAgcnVubmVyLnJ1bihUZXN0KCd0ZXN0Rm9vJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5idWZmZXIpCisKKyAgICBkZWYgdGVzdFJ1bm5lclJlZ2lzdGVyc1Jlc3VsdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG9yaWdpbmFsUmVnaXN0ZXJSZXN1bHQgPSB1bml0dGVzdC5ydW5uZXIucmVnaXN0ZXJSZXN1bHQKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIHVuaXR0ZXN0LnJ1bm5lci5yZWdpc3RlclJlc3VsdCA9IG9yaWdpbmFsUmVnaXN0ZXJSZXN1bHQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICAjIFVzZSBvdXIgcmVzdWx0IG9iamVjdAorICAgICAgICBydW5uZXIuX21ha2VSZXN1bHQgPSBsYW1iZGE6IHJlc3VsdAorCisgICAgICAgIHNlbGYud2FzUmVnaXN0ZXJlZCA9IDAKKyAgICAgICAgZGVmIGZha2VSZWdpc3RlclJlc3VsdCh0aGlzUmVzdWx0KToKKyAgICAgICAgICAgIHNlbGYud2FzUmVnaXN0ZXJlZCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoaXNSZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgdW5pdHRlc3QucnVubmVyLnJlZ2lzdGVyUmVzdWx0ID0gZmFrZVJlZ2lzdGVyUmVzdWx0CisKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndhc1JlZ2lzdGVyZWQsIDEpCisKKyAgICBkZWYgdGVzdF93b3Jrc193aXRoX3Jlc3VsdF93aXRob3V0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgY2xhc3MgT2xkVGV4dFJlc3VsdChSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bik6CisgICAgICAgICAgICBzZXBhcmF0b3IyID0gJycKKyAgICAgICAgICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgUnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihSdW5uZXIsIHNlbGYpLl9faW5pdF9fKFN0cmluZ0lPKCkpCisKKyAgICAgICAgICAgIGRlZiBfbWFrZVJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gT2xkVGV4dFJlc3VsdCgpCisKKyAgICAgICAgcnVubmVyID0gUnVubmVyKCkKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bl9jYWxsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIExvZ2dpbmdUZXh0UmVzdWx0KExvZ2dpbmdSZXN1bHQpOgorICAgICAgICAgICAgc2VwYXJhdG9yMiA9ICcnCisgICAgICAgICAgICBkZWYgcHJpbnRFcnJvcnMoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIExvZ2dpbmdSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50cyk6CisgICAgICAgICAgICAgICAgc3VwZXIoTG9nZ2luZ1J1bm5lciwgc2VsZikuX19pbml0X18oU3RyaW5nSU8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHMgPSBldmVudHMKKworICAgICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nVGV4dFJlc3VsdChzZWxmLl9ldmVudHMpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcnVubmVyID0gTG9nZ2luZ1J1bm5lcihldmVudHMpCisgICAgICAgIHJ1bm5lci5ydW4odW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfdW5waWNrbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxOTc6IGEgVGV4dFRlc3RSdW5uZXIgc2hvdWxkIGJlICh1bilwaWNrbGVhYmxlLiBUaGlzIGlzCisgICAgICAgICMgcmVxdWlyZWQgYnkgdGVzdF9tdWx0aXByb2Nlc3NpbmcgdW5kZXIgV2luZG93cyAoaW4gdmVyYm9zZSBtb2RlKS4KKyAgICAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8gYXMgUGlja2xlYWJsZUlPCisgICAgICAgICMgY1N0cmluZ0lPIG9iamVjdHMgYXJlIG5vdCBwaWNrbGVhYmxlLCBidXQgU3RyaW5nSU8gb2JqZWN0cyBhcmUuCisgICAgICAgIHN0cmVhbSA9IFBpY2tsZWFibGVJTygiZm9vIikKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMocnVubmVyLCBwcm90b2NvbD1wcm90b2NvbCkKKyAgICAgICAgICAgIG9iaiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgIyBTdHJpbmdJTyBvYmplY3RzIG5ldmVyIGNvbXBhcmUgZXF1YWwsIGEgY2hlYXAgdGVzdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RyZWFtLmdldHZhbHVlKCksIHN0cmVhbS5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0Y2xhc3Moc2VsZik6CisgICAgICAgIGRlZiBNb2NrUmVzdWx0Q2xhc3MoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgU1RSRUFNID0gb2JqZWN0KCkKKyAgICAgICAgREVTQ1JJUFRJT05TID0gb2JqZWN0KCkKKyAgICAgICAgVkVSQk9TSVRZID0gb2JqZWN0KCkKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoU1RSRUFNLCBERVNDUklQVElPTlMsIFZFUkJPU0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Y2xhc3M9TW9ja1Jlc3VsdENsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5yZXN1bHRjbGFzcywgTW9ja1Jlc3VsdENsYXNzKQorCisgICAgICAgIGV4cGVjdGVkcmVzdWx0ID0gKHJ1bm5lci5zdHJlYW0sIERFU0NSSVBUSU9OUywgVkVSQk9TSVRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5fbWFrZVJlc3VsdCgpLCBleHBlY3RlZHJlc3VsdCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU2ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTAsMCArMSw1MDggQEAKK2ltcG9ydCBzeXMKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiByZXN1bHRGYWN0b3J5KCpfKToKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKworY2xhc3MgVGVzdFNldHVwcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0UnVubmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIocmVzdWx0Y2xhc3M9cmVzdWx0RmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1TdHJpbmdJTygpKQorICAgIGRlZiBydW5UZXN0cyhzZWxmLCAqY2FzZXMpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIGZvciBjYXNlIGluIGNhc2VzOgorICAgICAgICAgICAgdGVzdHMgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoY2FzZSkKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKHRlc3RzKQorCisgICAgICAgIHJ1bm5lciA9IHNlbGYuZ2V0UnVubmVyKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgbmVzdGVkIHN1aXRlIGV4cG9zZXMgc29tZSBwb3RlbnRpYWwgYnVncworICAgICAgICByZWFsU3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICByZWFsU3VpdGUuYWRkVGVzdChzdWl0ZSkKKyAgICAgICAgIyBhZGRpbmcgZW1wdHkgc3VpdGVzIHRvIHRoZSBlbmQgZXhwb3NlcyBwb3RlbnRpYWwgYnVncworICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICByZWFsU3VpdGUuYWRkVGVzdCh1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgcmV0dXJuIHJ1bm5lci5ydW4ocmVhbFN1aXRlKQorCisgICAgZGVmIHRlc3Rfc2V0dXBfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0VXBDYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5zZXRVcENhbGxlZCArPSAxCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBDbGFzcygpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0LnNldFVwQ2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZWFyRG93bkNhbGxlZCA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRlYXJEb3duQ2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X3RlYXJkb3duX2NsYXNzX3R3b19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlYXJEb3duQ2FsbGVkID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudGVhckRvd25DYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVhckRvd25DYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdDIudGVhckRvd25DYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0LCBUZXN0MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdDIudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3NldHVwY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEJyb2tlblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoQnJva2VuVGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksCisgICAgICAgICAgICAgICAgICAgICdzZXRVcENsYXNzICglcy5Ccm9rZW5UZXN0KScgJSBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3RlYXJkb3duX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRvcm5Eb3duID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudG9ybkRvd24gKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRvcm5Eb3duID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QyLnRvcm5Eb3duICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdC50b3JuRG93biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0Mi50b3JuRG93biwgMSkKKworICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAndGVhckRvd25DbGFzcyAoJXMuVGVzdCknICUgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9jbGFzc19ub3RfdG9ybmRvd25fd2hlbl9zZXR1cF9mYWlscyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0b3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50b3JuRG93biA9IFRydWUKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LnRvcm5Eb3duKQorCisgICAgZGVmIHRlc3RfY2xhc3Nfbm90X3NldHVwX29yX3Rvcm5kb3duX3doZW5fc2tpcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIHRvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50b3JuRG93biA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgVGVzdCA9IHVuaXR0ZXN0LnNraXAoImhvcCIpKFRlc3QpCisgICAgICAgIHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LmNsYXNzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC50b3JuRG93bikKKworICAgIGRlZiB0ZXN0X3NldHVwX3RlYXJkb3duX29yZGVyX3dpdGhfcGF0aG9sb2dpY2FsX3N1aXRlKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBjbGFzcyBNb2R1bGUxKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMS5zZXRVcE1vZHVsZScpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMS50ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgTW9kdWxlMihvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTIuc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTIudGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMScpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDEnKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QxLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QxLnRlc3RUd28nKQorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMicpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDInKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QyLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QyLnRlc3RUd28nKQorCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMycpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDMnKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QzLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QzLnRlc3RUd28nKQorCisgICAgICAgIFRlc3QxLl9fbW9kdWxlX18gPSBUZXN0Mi5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgVGVzdDMuX19tb2R1bGVfXyA9ICdNb2R1bGUyJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUxCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUyJ10gPSBNb2R1bGUyCisKKyAgICAgICAgZmlyc3QgPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QxKCd0ZXN0T25lJyksKSkKKyAgICAgICAgc2Vjb25kID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MSgndGVzdFR3bycpLCkpCisgICAgICAgIHRoaXJkID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MigndGVzdE9uZScpLCkpCisgICAgICAgIGZvdXJ0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDIoJ3Rlc3RUd28nKSwpKQorICAgICAgICBmaWZ0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDMoJ3Rlc3RPbmUnKSwpKQorICAgICAgICBzaXh0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDMoJ3Rlc3RUd28nKSwpKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGgsIHNpeHRoKSkKKworICAgICAgICBydW5uZXIgPSBzZWxmLmdldFJ1bm5lcigpCisgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydNb2R1bGUxLnNldFVwTW9kdWxlJywgJ3NldHVwIDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdDEudGVzdE9uZScsICdUZXN0MS50ZXN0VHdvJywgJ3RlYXJkb3duIDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXAgMicsICdUZXN0Mi50ZXN0T25lJywgJ1Rlc3QyLnRlc3RUd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhcmRvd24gMicsICdNb2R1bGUxLnRlYXJEb3duTW9kdWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ01vZHVsZTIuc2V0VXBNb2R1bGUnLCAnc2V0dXAgMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0My50ZXN0T25lJywgJ1Rlc3QzLnRlc3RUd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhcmRvd24gMycsICdNb2R1bGUyLnRlYXJEb3duTW9kdWxlJ10pCisKKyAgICBkZWYgdGVzdF9zZXR1cF9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlU2V0dXAgPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlU2V0dXAgKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlU2V0dXAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3NldHVwX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVTZXR1cCA9IDAKKyAgICAgICAgICAgIG1vZHVsZVRvcm5Eb3duID0gMAorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVNldHVwICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlVG9ybkRvd24gKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3NTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICBjbGFzc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIFRlc3QyLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVTZXR1cCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlVG9ybkRvd24sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QuY2xhc3NTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LmNsYXNzVG9ybkRvd24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLCAnc2V0VXBNb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3RfdGVzdGNhc2Vfd2l0aF9taXNzaW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKCdNb2R1bGUnLCBOb25lKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bl9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlVG9ybkRvd24gPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlVG9ybkRvd24gKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlVG9ybkRvd24sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3RlYXJkb3duX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVUb3JuRG93biA9IDAKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVUb3JuRG93biArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3NTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICBjbGFzc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIFRlc3QyLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVUb3JuRG93biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUZXN0LmNsYXNzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUZXN0LmNsYXNzVG9ybkRvd24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLCAndGVhckRvd25Nb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3Rfc2tpcHRlc3RfaW5fc2V0dXBjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorICAgICAgICBza2lwcGVkID0gcmVzdWx0LnNraXBwZWRbMF1bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2tpcHBlZCksICdzZXRVcENsYXNzICglcy5UZXN0KScgJSBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X3NraXB0ZXN0X2luX3NldHVwbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2ZvbycpCisKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKyAgICAgICAgc2tpcHBlZCA9IHJlc3VsdC5za2lwcGVkWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNraXBwZWQpLCAnc2V0VXBNb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3Rfc3VpdGVfZGVidWdfZXhlY3V0ZXNfc2V0dXBzX2FuZF90ZWFyZG93bnMoc2VsZik6CisgICAgICAgIG9yZGVyaW5nID0gW10KKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcENsYXNzJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duQ2xhc3MnKQorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVzdF9zb21ldGhpbmcnKQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgIHN1aXRlLmRlYnVnKCkKKyAgICAgICAgZXhwZWN0ZWRPcmRlciA9IFsnc2V0VXBNb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZXN0X3NvbWV0aGluZycsICd0ZWFyRG93bkNsYXNzJywgJ3RlYXJEb3duTW9kdWxlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgZXhwZWN0ZWRPcmRlcikKKworICAgIGRlZiB0ZXN0X3N1aXRlX2RlYnVnX3Byb3BhZ2F0ZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NldFVwTW9kdWxlJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignc2V0VXBDbGFzcycpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZWFyRG93bkNsYXNzJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSA0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3Rlc3Rfc29tZXRoaW5nJykKKworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KF9zdWl0ZSkKKworICAgICAgICBtZXNzYWdlcyA9ICgnc2V0VXBNb2R1bGUnLCAndGVhckRvd25Nb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZWFyRG93bkNsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJykKKyAgICAgICAgZm9yIHBoYXNlLCBtc2cgaW4gZW51bWVyYXRlKG1lc3NhZ2VzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uLCBtc2cpOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTU4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0wLDAgKzEsMTM4IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorCisKK2NsYXNzIFRlc3RfVGVzdFNraXBwaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcF9tZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAic2tpcCIpXSkKKworICAgICAgICAjIFRyeSBsZXR0aW5nIHNldFVwIHNraXAgdGhlIHRlc3Qgbm93LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3RpbmciKQorICAgICAgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKTogcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9ub3RoaW5nIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CisgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKKyAgICAgICAgZm9yIGRlY28sIGRvX3NraXAsIGRvbnRfc2tpcCBpbiBvcF90YWJsZToKKyAgICAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgQGRlY28oZG9fc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3NraXAoc2VsZik6IHBhc3MKKworICAgICAgICAgICAgICAgIEBkZWNvKGRvbnRfc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X2RvbnRfc2tpcChzZWxmKTogcGFzcworICAgICAgICAgICAgdGVzdF9kb19za2lwID0gRm9vKCJ0ZXN0X3NraXAiKQorICAgICAgICAgICAgdGVzdF9kb250X3NraXAgPSBGb28oInRlc3RfZG9udF9za2lwIikKKyAgICAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0X2RvX3NraXAsIHRlc3RfZG9udF9za2lwXSkKKyAgICAgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0VGVzdCcsICdhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0X2RvX3NraXAsICJ0ZXN0aW5nIildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF9za2lwX2NsYXNzKHNlbGYpOgorICAgICAgICBAdW5pdHRlc3Quc2tpcCgidGVzdGluZyIpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFtdKQorCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhlbHAgbWUhIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCisgICAgZGVmIHRlc3Rfc2tpcF9kb2VzbnRfcnVuX3NldHVwKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIEZvby53YXNTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0b3JuRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBGb28ud2FzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBAdW5pdHRlc3Quc2tpcCgndGVzdGluZycpCisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZvby53YXNTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGb28ud2FzVG9ybkRvd24pCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0ZWRfc2tpcChzZWxmKToKKyAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgICAgIGRlZiBpbm5lcigqYSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmEpCisgICAgICAgICAgICByZXR1cm4gaW5uZXIKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGRlY29yYXRvcgorICAgICAgICAgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3RpbmcnKQorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmYjUyNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTAsMCArMSwzNjcgQEAKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgc3lzCitmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBUZXN0RXF1YWxpdHkKKworCisjIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RTdWl0ZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBUZXN0KG9iamVjdCk6CisgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiB0ZXN0XzMoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKKworZGVmIF9ta19UZXN0U3VpdGUoKm5hbWVzKToKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFRlc3QuRm9vKG4pIGZvciBuIGluIG5hbWVzKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworY2xhc3MgVGVzdF9UZXN0U3VpdGUodW5pdHRlc3QuVGVzdENhc2UsIFRlc3RFcXVhbGl0eSk6CisKKyAgICAjIyMgU2V0IHVwIGF0dHJpYnV0ZXMgbmVlZGVkIGJ5IGluaGVyaXRlZCB0ZXN0cworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9lcQorICAgIGVxX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKCkpLAorICAgICAgICAgICAgICAgICh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKFtdKSksCisgICAgICAgICAgICAgICAoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKV0KKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQorICAgIG5lX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpLAorICAgICAgICAgICAgICAgICh1bml0dGVzdC5UZXN0U3VpdGUoW10pLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSksCisgICAgICAgICAgICAgICAgKF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScsICd0ZXN0XzInKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJywgJ3Rlc3RfMycpKSwKKyAgICAgICAgICAgICAgICAoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMicpKV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgorICAgICMKKyAgICAjIFRoZSB0ZXN0cyBpdGVyYWJsZSBzaG91bGQgYmUgb3B0aW9uYWwKKyAgICBkZWYgdGVzdF9pbml0X190ZXN0c19vcHRpb25hbChzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBUZXN0U3VpdGUgc2hvdWxkIGRlYWwgd2l0aCBlbXB0eSB0ZXN0cyBpdGVyYWJsZXMgYnkgYWxsb3dpbmcgdGhlCisgICAgIyBjcmVhdGlvbiBvZiBhbiBlbXB0eSBzdWl0ZQorICAgIGRlZiB0ZXN0X2luaXRfX2VtcHR5X3Rlc3RzKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCisgICAgIyAuLi4KKyAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKKyAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCisgICAgIworICAgICMgVGVzdFN1aXRlIHNob3VsZCBhbGxvdyBhbnkgaXRlcmFibGUgdG8gcHJvdmlkZSB0ZXN0cworICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX2Zyb21fYW55X2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGVfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlXzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMi5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgICAgIHN1aXRlXzMgPSB1bml0dGVzdC5UZXN0U3VpdGUoc2V0KHN1aXRlXzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBEb2VzIFRlc3RTdWl0ZSgpIGFsc28gYWxsb3cgb3RoZXIgVGVzdFN1aXRlKCkgaW5zdGFuY2VzIHRvIGJlIHByZXNlbnQKKyAgICAjIGluIHRoZSB0ZXN0cyBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9pbml0X19UZXN0U3VpdGVfaW5zdGFuY2VzX2luX3Rlc3RzKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIGZ0YyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuVGVzdFN1aXRlKFtmdGNdKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXworCisgICAgIyBDb250YWluZXIgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdGhlIGl0ZXIgcHJvdG9jb2wKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdDEsIHRlc3QyXSkKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgorICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KKyAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCisgICAgIworICAgICMgUHJlc3VtYWJseSBhbiBlbXB0eSBUZXN0U3VpdGUgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fc2ltcGxlKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSAoZXZlbiBpZiBpdCBjb250YWlucyBvdGhlciBlbXB0eQorICAgICMgVGVzdFN1aXRlIGluc3RhbmNlcykgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fbmVzdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KKyAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCisgICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgorICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3NpbXBsZShzZWxmKToKKyAgICAgICAgdGVzdDEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhpcyBob2xkcyBmb3IgbmVzdGVkIFRlc3RTdWl0ZSBpbnN0YW5jZXMsIHRvbworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX25lc3RlZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBjaGlsZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3QyJyksIHRlc3QyKSkKKyAgICAgICAgcGFyZW50ID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MywgY2hpbGQsIFRlc3QxKCd0ZXN0MScpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQorCisgICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KKyAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCisgICAgIworICAgICMgQW5kIGlmIHRoZXJlIGFyZSBubyB0ZXN0cz8gV2hhdCB0aGVuPworICAgIGRlZiB0ZXN0X3J1bl9fZW1wdHlfc3VpdGUoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbXSkKKworICAgICMgIk5vdGUgdGhhdCB1bmxpa2UgVGVzdENhc2UucnVuKCksIFRlc3RTdWl0ZS5ydW4oKSByZXF1aXJlcyB0aGUKKyAgICAjICJyZXN1bHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbi4iCisgICAgZGVmIHRlc3RfcnVuX19yZXF1aXJlc19yZXN1bHQoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZS5ydW4oKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCisgICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgorICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgTG9nZ2luZ0Nhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3J1biAlcycgJSBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKworICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0cyA9IFtMb2dnaW5nQ2FzZSgndGVzdDEnKSwgTG9nZ2luZ0Nhc2UoJ3Rlc3QyJyldCisKKyAgICAgICAgdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3J1biB0ZXN0MScsICdydW4gdGVzdDInXSkKKworICAgICMgIkFkZCBhIFRlc3RDYXNlIC4uLiB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3QnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RdKQorCisgICAgIyAiQWRkIGEgLi4uIFRlc3RTdWl0ZSB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3QnKV0pCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHN1aXRlXzIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbc3VpdGVfMl0pCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjICJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgdGVzdHMsIGNhbGxpbmcgYWRkVGVzdCgpIGZvcgorICAgICMgZWFjaCBlbGVtZW50IgorICAgIGRlZiB0ZXN0X2FkZFRlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RfMSA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdGVzdF8yID0gRm9vKCd0ZXN0XzInKQorICAgICAgICBpbm5lcl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF8yXSkKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCB0ZXN0XzEKKyAgICAgICAgICAgIHlpZWxkIHRlc3RfMgorICAgICAgICAgICAgeWllbGQgaW5uZXJfc3VpdGUKKworICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGVfMS5hZGRUZXN0cyhnZW4oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGVfMSksIGxpc3QoZ2VuKCkpKQorCisgICAgICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCisgICAgICAgICMgZWFjaCBlbGVtZW50IgorICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgZm9yIHQgaW4gZ2VuKCk6CisgICAgICAgICAgICBzdWl0ZV8yLmFkZFRlc3QodCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEsIHN1aXRlXzIpCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBpdCBkb2Vzbid0IGdldCBhbiBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKDUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fbm9uY2FsbGFibGUoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCA1KQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fY2FzZXN1aXRlY2xhc3Moc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCBUZXN0X1Rlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCB1bml0dGVzdC5UZXN0U3VpdGUpCisKKyAgICBkZWYgdGVzdF9hZGRUZXN0c19fc3RyaW5nKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdHMsICJmb28iKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25faW5fc3VpdGUoc2VsZik6CisgICAgICAgIGRlZiBmKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoZikKKworICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKworCisKKyAgICBkZWYgdGVzdF9iYXNldGVzdHN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHdhc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIHdhc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBjbHMud2FzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgY2xzLndhc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3RQYXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0RmFpbChzZWxmKToKKyAgICAgICAgICAgICAgICBmYWlsCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1Rvcm5Eb3duID0gVHJ1ZQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3lzLm1vZHVsZXMucG9wLCAnTW9kdWxlJykKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0cyhbVGVzdCgndGVzdFBhc3MnKSwgVGVzdCgndGVzdEZhaWwnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2R1bGUud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9kdWxlLndhc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3Qud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC53YXNUb3JuRG93bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE15U3VpdGUodW5pdHRlc3QuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RTdWl0ZS5fX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgICAgICBzdWl0ZSA9IE15U3VpdGUoKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgd3JhcHBlciA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHdyYXBwZXIuYWRkVGVzdChzdWl0ZSkKKyAgICAgICAgd3JhcHBlcihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWl0ZS5jYWxsZWQpCisKKyAgICAgICAgIyByZXVzaW5nIHJlc3VsdHMgc2hvdWxkIGJlIHBlcm1pdHRlZCBldmVuIGlmIGFib21pbmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuX3Rlc3RSdW5FbnRlcmVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdXRpbC5weSBiL0xpYi91bml0dGVzdC91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDE2NTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQpAQCAtMCwwICsxLDk0IEBACisiIiJWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitfTUFYX0xFTkdUSCA9IDgwCitkZWYgc2FmZV9yZXByKG9iaiwgc2hvcnQ9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gcmVwcihvYmopCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0Ll9fcmVwcl9fKG9iaikKKyAgICBpZiBub3Qgc2hvcnQgb3IgbGVuKHJlc3VsdCkgPCBfTUFYX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIHJldHVybiByZXN1bHRbOl9NQVhfTEVOR1RIXSArICcgW3RydW5jYXRlZF0uLi4nCisKKworZGVmIHN0cmNsYXNzKGNscyk6CisgICAgcmV0dXJuICIlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKKworZGVmIHNvcnRlZF9saXN0X2RpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCk6CisgICAgIiIiRmluZHMgZWxlbWVudHMgaW4gb25seSBvbmUgb3IgdGhlIG90aGVyIG9mIHR3bywgc29ydGVkIGlucHV0IGxpc3RzLgorCisgICAgUmV0dXJucyBhIHR3by1lbGVtZW50IHR1cGxlIG9mIGxpc3RzLiAgICBUaGUgZmlyc3QgbGlzdCBjb250YWlucyB0aG9zZQorICAgIGVsZW1lbnRzIGluIHRoZSAiZXhwZWN0ZWQiIGxpc3QgYnV0IG5vdCBpbiB0aGUgImFjdHVhbCIgbGlzdCwgYW5kIHRoZQorICAgIHNlY29uZCBjb250YWlucyB0aG9zZSBlbGVtZW50cyBpbiB0aGUgImFjdHVhbCIgbGlzdCBidXQgbm90IGluIHRoZQorICAgICJleHBlY3RlZCIgbGlzdC4gICAgRHVwbGljYXRlIGVsZW1lbnRzIGluIGVpdGhlciBpbnB1dCBsaXN0IGFyZSBpZ25vcmVkLgorICAgICIiIgorICAgIGkgPSBqID0gMAorICAgIG1pc3NpbmcgPSBbXQorICAgIHVuZXhwZWN0ZWQgPSBbXQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGUgPSBleHBlY3RlZFtpXQorICAgICAgICAgICAgYSA9IGFjdHVhbFtqXQorICAgICAgICAgICAgaWYgZSA8IGE6CisgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoZSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICB3aGlsZSBleHBlY3RlZFtpXSA9PSBlOgorICAgICAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgIGVsaWYgZSA+IGE6CisgICAgICAgICAgICAgICAgdW5leHBlY3RlZC5hcHBlbmQoYSkKKyAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgICAgICB3aGlsZSBhY3R1YWxbal0gPT0gYToKKyAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgZXhwZWN0ZWRbaV0gPT0gZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGogKz0gMQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBhY3R1YWxbal0gPT0gYToKKyAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIG1pc3NpbmcuZXh0ZW5kKGV4cGVjdGVkW2k6XSkKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQuZXh0ZW5kKGFjdHVhbFtqOl0pCisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBtaXNzaW5nLCB1bmV4cGVjdGVkCisKKworZGVmIHVub3JkZXJhYmxlX2xpc3RfZGlmZmVyZW5jZShleHBlY3RlZCwgYWN0dWFsLCBpZ25vcmVfZHVwbGljYXRlPUZhbHNlKToKKyAgICAiIiJTYW1lIGJlaGF2aW9yIGFzIHNvcnRlZF9saXN0X2RpZmZlcmVuY2UgYnV0CisgICAgZm9yIGxpc3RzIG9mIHVub3JkZXJhYmxlIGl0ZW1zIChsaWtlIGRpY3RzKS4KKworICAgIEFzIGl0IGRvZXMgYSBsaW5lYXIgc2VhcmNoIHBlciBpdGVtIChyZW1vdmUpIGl0CisgICAgaGFzIE8obipuKSBwZXJmb3JtYW5jZS4KKyAgICAiIiIKKyAgICBtaXNzaW5nID0gW10KKyAgICB1bmV4cGVjdGVkID0gW10KKyAgICB3aGlsZSBleHBlY3RlZDoKKyAgICAgICAgaXRlbSA9IGV4cGVjdGVkLnBvcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbC5yZW1vdmUoaXRlbSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChpdGVtKQorICAgICAgICBpZiBpZ25vcmVfZHVwbGljYXRlOgorICAgICAgICAgICAgZm9yIGxzdCBpbiBleHBlY3RlZCwgYWN0dWFsOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxzdC5yZW1vdmUoaXRlbSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGlmIGlnbm9yZV9kdXBsaWNhdGU6CisgICAgICAgIHdoaWxlIGFjdHVhbDoKKyAgICAgICAgICAgIGl0ZW0gPSBhY3R1YWwucG9wKCkKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGl0ZW0pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsLnJlbW92ZShpdGVtKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gbWlzc2luZywgdW5leHBlY3RlZAorCisgICAgIyBhbnl0aGluZyBsZWZ0IGluIGFjdHVhbCBpcyB1bmV4cGVjdGVkCisgICAgcmV0dXJuIG1pc3NpbmcsIGFjdHVhbApkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi5weSBiL0xpYi91cmxsaWIucHkKaW5kZXggYjk0ZjU1MC4uMTU1M2Y5ZCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi5weQorKysgYi9MaWIvdXJsbGliLnB5CkBAIC00Miw5ICs0Miw3IEBACiBNQVhGVFBDQUNIRSA9IDEwICAgICAgICAjIFRyaW0gdGhlIGZ0cCBjYWNoZSBiZXlvbmQgdGhpcyBzaXplCiAKICMgSGVscGVyIGZvciBub24tdW5peCBzeXN0ZW1zCi1pZiBvcy5uYW1lID09ICdtYWMnOgotICAgIGZyb20gbWFjdXJsMnBhdGggaW1wb3J0IHVybDJwYXRobmFtZSwgcGF0aG5hbWUydXJsCi1lbGlmIG9zLm5hbWUgPT0gJ250JzoKK2lmIG9zLm5hbWUgPT0gJ250JzoKICAgICBmcm9tIG50dXJsMnBhdGggaW1wb3J0IHVybDJwYXRobmFtZSwgcGF0aG5hbWUydXJsCiBlbGlmIG9zLm5hbWUgPT0gJ3Jpc2Nvcyc6CiAgICAgZnJvbSByb3VybDJwYXRoIGltcG9ydCB1cmwycGF0aG5hbWUsIHBhdGhuYW1lMnVybApAQCAtOTQsNyArOTIsNyBAQAogZGVmIHVybGNsZWFudXAoKToKICAgICBpZiBfdXJsb3BlbmVyOgogICAgICAgICBfdXJsb3BlbmVyLmNsZWFudXAoKQotICAgIF9zYWZlbWFwcy5jbGVhcigpCisgICAgX3NhZmVfcXVvdGVycy5jbGVhcigpCiAgICAgZnRwY2FjaGUuY2xlYXIoKQogCiAjIGNoZWNrIGZvciBTU0wKQEAgLTE3Nyw4ICsxNzUsOCBAQAogICAgIGRlZiBvcGVuKHNlbGYsIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIlVzZSBVUkxvcGVuZXIoKS5vcGVuKGZpbGUpIGluc3RlYWQgb2Ygb3BlbihmaWxlLCAncicpLiIiIgogICAgICAgICBmdWxsdXJsID0gdW53cmFwKHRvQnl0ZXMoZnVsbHVybCkpCi0gICAgICAgICMgcGVyY2VudCBlbmNvZGUgdXJsLiBmaXhpbmcgbGFtZSBzZXJ2ZXIgZXJyb3JzIGxpa2Ugc3BhY2Ugd2l0aGluIHVybAotICAgICAgICAjIHBhcnRzCisgICAgICAgICMgcGVyY2VudCBlbmNvZGUgdXJsLCBmaXhpbmcgbGFtZSBzZXJ2ZXIgZXJyb3JzIGZvciBlLmcsIGxpa2Ugc3BhY2UKKyAgICAgICAgIyB3aXRoaW4gdXJsIHBhdGhzLgogICAgICAgICBmdWxsdXJsID0gcXVvdGUoZnVsbHVybCwgc2FmZT0iJS86PSY/fiMrISQsOydAKCkqW118IikKICAgICAgICAgaWYgc2VsZi50ZW1wY2FjaGUgYW5kIGZ1bGx1cmwgaW4gc2VsZi50ZW1wY2FjaGU6CiAgICAgICAgICAgICBmaWxlbmFtZSwgaGVhZGVycyA9IHNlbGYudGVtcGNhY2hlW2Z1bGx1cmxdCkBAIC0yMzIsOSArMjMwLDkgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmcCA9IHNlbGYub3Blbl9sb2NhbF9maWxlKHVybDEpCiAgICAgICAgICAgICAgICAgaGRycyA9IGZwLmluZm8oKQotICAgICAgICAgICAgICAgIGRlbCBmcAorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gdXJsMnBhdGhuYW1lKHNwbGl0aG9zdCh1cmwxKVsxXSksIGhkcnMKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBtc2c6CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZwID0gc2VsZi5vcGVuKHVybCwgZGF0YSkKICAgICAgICAgdHJ5OgpAQCAtMjc2LDggKzI3NCw2IEBACiAgICAgICAgICAgICAgICAgdGZwLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZGVsIGZwCi0gICAgICAgIGRlbCB0ZnAKIAogICAgICAgICAjIHJhaXNlIGV4Y2VwdGlvbiBpZiBhY3R1YWwgc2l6ZSBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXIKICAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCByZWFkIDwgc2l6ZToKQEAgLTM0Myw5ICszMzksNyBAQAogICAgICAgICBpZiBhdXRoOiBoLnB1dGhlYWRlcignQXV0aG9yaXphdGlvbicsICdCYXNpYyAlcycgJSBhdXRoKQogICAgICAgICBpZiByZWFsaG9zdDogaC5wdXRoZWFkZXIoJ0hvc3QnLCByZWFsaG9zdCkKICAgICAgICAgZm9yIGFyZ3MgaW4gc2VsZi5hZGRoZWFkZXJzOiBoLnB1dGhlYWRlcigqYXJncykKLSAgICAgICAgaC5lbmRoZWFkZXJzKCkKLSAgICAgICAgaWYgZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGguc2VuZChkYXRhKQorICAgICAgICBoLmVuZGhlYWRlcnMoZGF0YSkKICAgICAgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzID0gaC5nZXRyZXBseSgpCiAgICAgICAgIGZwID0gaC5nZXRmaWxlKCkKICAgICAgICAgaWYgZXJyY29kZSA9PSAtMToKQEAgLTQzOCw5ICs0MzIsNyBAQAogICAgICAgICAgICAgaWYgYXV0aDogaC5wdXRoZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJXMnICUgYXV0aCkKICAgICAgICAgICAgIGlmIHJlYWxob3N0OiBoLnB1dGhlYWRlcignSG9zdCcsIHJlYWxob3N0KQogICAgICAgICAgICAgZm9yIGFyZ3MgaW4gc2VsZi5hZGRoZWFkZXJzOiBoLnB1dGhlYWRlcigqYXJncykKLSAgICAgICAgICAgIGguZW5kaGVhZGVycygpCi0gICAgICAgICAgICBpZiBkYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGguc2VuZChkYXRhKQorICAgICAgICAgICAgaC5lbmRoZWFkZXJzKGRhdGEpCiAgICAgICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMgPSBoLmdldHJlcGx5KCkKICAgICAgICAgICAgIGZwID0gaC5nZXRmaWxlKCkKICAgICAgICAgICAgIGlmIGVycmNvZGUgPT0gLTE6CkBAIC01MTksOCArNTExLDggQEAKICAgICAgICAgaWYgdXNlcjogdXNlciwgcGFzc3dkID0gc3BsaXRwYXNzd2QodXNlcikKICAgICAgICAgZWxzZTogcGFzc3dkID0gTm9uZQogICAgICAgICBob3N0ID0gdW5xdW90ZShob3N0KQotICAgICAgICB1c2VyID0gdW5xdW90ZSh1c2VyIG9yICcnKQotICAgICAgICBwYXNzd2QgPSB1bnF1b3RlKHBhc3N3ZCBvciAnJykKKyAgICAgICAgdXNlciA9IHVzZXIgb3IgJycKKyAgICAgICAgcGFzc3dkID0gcGFzc3dkIG9yICcnCiAgICAgICAgIGhvc3QgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIGltcG9ydCBmdHBsaWIKQEAgLTc3Myw3ICs3NjUsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub3BlbihuZXd1cmwsIGRhdGEpCiAKLSAgICBkZWYgZ2V0X3VzZXJfcGFzc3dkKHNlbGYsIGhvc3QsIHJlYWxtLCBjbGVhcl9jYWNoZSA9IDApOgorICAgIGRlZiBnZXRfdXNlcl9wYXNzd2Qoc2VsZiwgaG9zdCwgcmVhbG0sIGNsZWFyX2NhY2hlPTApOgogICAgICAgICBrZXkgPSByZWFsbSArICdAJyArIGhvc3QubG93ZXIoKQogICAgICAgICBpZiBrZXkgaW4gc2VsZi5hdXRoX2NhY2hlOgogICAgICAgICAgICAgaWYgY2xlYXJfY2FjaGU6CkBAIC0xMDYwLDcgKzEwNTIsMTIgQEAKICAgICAgICAgX2hvc3Rwcm9nID0gcmUuY29tcGlsZSgnXi8vKFteLz9dKikoLiopJCcpCiAKICAgICBtYXRjaCA9IF9ob3N0cHJvZy5tYXRjaCh1cmwpCi0gICAgaWYgbWF0Y2g6IHJldHVybiBtYXRjaC5ncm91cCgxLCAyKQorICAgIGlmIG1hdGNoOgorICAgICAgICBob3N0X3BvcnQgPSBtYXRjaC5ncm91cCgxKQorICAgICAgICBwYXRoID0gbWF0Y2guZ3JvdXAoMikKKyAgICAgICAgaWYgcGF0aCBhbmQgbm90IHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICAgICAgcGF0aCA9ICcvJyArIHBhdGgKKyAgICAgICAgcmV0dXJuIGhvc3RfcG9ydCwgcGF0aAogICAgIHJldHVybiBOb25lLCB1cmwKIAogX3VzZXJwcm9nID0gTm9uZQpAQCAtMTA3Miw3ICsxMDY5LDcgQEAKICAgICAgICAgX3VzZXJwcm9nID0gcmUuY29tcGlsZSgnXiguKilAKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdXNlcnByb2cubWF0Y2goaG9zdCkKLSAgICBpZiBtYXRjaDogcmV0dXJuIG1hcCh1bnF1b3RlLCBtYXRjaC5ncm91cCgxLCAyKSkKKyAgICBpZiBtYXRjaDogcmV0dXJuIG1hdGNoLmdyb3VwKDEsIDIpCiAgICAgcmV0dXJuIE5vbmUsIGhvc3QKIAogX3Bhc3N3ZHByb2cgPSBOb25lCkBAIC0xMDgxLDcgKzEwNzgsNyBAQAogICAgIGdsb2JhbCBfcGFzc3dkcHJvZwogICAgIGlmIF9wYXNzd2Rwcm9nIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCByZQotICAgICAgICBfcGFzc3dkcHJvZyA9IHJlLmNvbXBpbGUoJ14oW146XSopOiguKikkJykKKyAgICAgICAgX3Bhc3N3ZHByb2cgPSByZS5jb21waWxlKCdeKFteOl0qKTooLiopJCcscmUuUykKIAogICAgIG1hdGNoID0gX3Bhc3N3ZHByb2cubWF0Y2godXNlcikKICAgICBpZiBtYXRjaDogcmV0dXJuIG1hdGNoLmdyb3VwKDEsIDIpCkBAIC0xMTY0LDIxICsxMTYxLDI5IEBACiAgICAgaWYgbWF0Y2g6IHJldHVybiBtYXRjaC5ncm91cCgxLCAyKQogICAgIHJldHVybiBhdHRyLCBOb25lCiAKKyMgdXJscGFyc2UgY29udGFpbnMgYSBkdXBsaWNhdGUgb2YgdGhpcyBtZXRob2QgdG8gYXZvaWQgYSBjaXJjdWxhciBpbXBvcnQuICBJZgorIyB5b3UgdXBkYXRlIHRoaXMgbWV0aG9kLCBhbHNvIHVwZGF0ZSB0aGUgY29weSBpbiB1cmxwYXJzZS4gIFRoaXMgY29kZQorIyBkdXBsaWNhdGlvbiBkb2VzIG5vdCBleGlzdCBpbiBQeXRob24zLgorCiBfaGV4ZGlnID0gJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnCi1faGV4dG9jaHIgPSBkaWN0KChhK2IsIGNocihpbnQoYStiLDE2KSkpIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZykKK19oZXh0b2NociA9IGRpY3QoKGEgKyBiLCBjaHIoaW50KGEgKyBiLCAxNikpKQorICAgICAgICAgICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWcpCiAKIGRlZiB1bnF1b3RlKHMpOgogICAgICIiInVucXVvdGUoJ2FiYyUyMGRlZicpIC0+ICdhYmMgZGVmJy4iIiIKICAgICByZXMgPSBzLnNwbGl0KCclJykKLSAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgbGVuKHJlcykpOgotICAgICAgICBpdGVtID0gcmVzW2ldCisgICAgIyBmYXN0cGF0aAorICAgIGlmIGxlbihyZXMpID09IDE6CisgICAgICAgIHJldHVybiBzCisgICAgcyA9IHJlc1swXQorICAgIGZvciBpdGVtIGluIHJlc1sxOl06CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc1tpXSA9IF9oZXh0b2NocltpdGVtWzoyXV0gKyBpdGVtWzI6XQorICAgICAgICAgICAgcyArPSBfaGV4dG9jaHJbaXRlbVs6Ml1dICsgaXRlbVsyOl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmVzW2ldID0gJyUnICsgaXRlbQorICAgICAgICAgICAgcyArPSAnJScgKyBpdGVtCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICByZXNbaV0gPSB1bmljaHIoaW50KGl0ZW1bOjJdLCAxNikpICsgaXRlbVsyOl0KLSAgICByZXR1cm4gIiIuam9pbihyZXMpCisgICAgICAgICAgICBzICs9IHVuaWNocihpbnQoaXRlbVs6Ml0sIDE2KSkgKyBpdGVtWzI6XQorICAgIHJldHVybiBzCiAKIGRlZiB1bnF1b3RlX3BsdXMocyk6CiAgICAgIiIidW5xdW90ZSgnJTdlL2FiYytkZWYnKSAtPiAnfi9hYmMgZGVmJyIiIgpAQCAtMTE4OCw5ICsxMTkzLDEyIEBACiBhbHdheXNfc2FmZSA9ICgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCiAgICAgICAgICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiAgICAgICAgICAgICAgICAnMDEyMzQ1Njc4OScgJ18uLScpCi1fc2FmZW1hcHMgPSB7fQorX3NhZmVfbWFwID0ge30KK2ZvciBpLCBjIGluIHppcCh4cmFuZ2UoMjU2KSwgc3RyKGJ5dGVhcnJheSh4cmFuZ2UoMjU2KSkpKToKKyAgICBfc2FmZV9tYXBbY10gPSBjIGlmIChpIDwgMTI4IGFuZCBjIGluIGFsd2F5c19zYWZlKSBlbHNlICclezowMlh9Jy5mb3JtYXQoaSkKK19zYWZlX3F1b3RlcnMgPSB7fQogCi1kZWYgcXVvdGUocywgc2FmZSA9ICcvJyk6CitkZWYgcXVvdGUocywgc2FmZT0nLycpOgogICAgICIiInF1b3RlKCdhYmMgZGVmJykgLT4gJ2FiYyUyMGRlZicKIAogICAgIEVhY2ggcGFydCBvZiBhIFVSTCwgZS5nLiB0aGUgcGF0aCBpbmZvLCB0aGUgcXVlcnksIGV0Yy4sIGhhcyBhCkBAIC0xMjExLDI3ICsxMjE5LDMyIEBACiAgICAgY2FsbGVkIG9uIGEgcGF0aCB3aGVyZSB0aGUgZXhpc3Rpbmcgc2xhc2ggY2hhcmFjdGVycyBhcmUgdXNlZCBhcwogICAgIHJlc2VydmVkIGNoYXJhY3RlcnMuCiAgICAgIiIiCisgICAgIyBmYXN0cGF0aAorICAgIGlmIG5vdCBzOgorICAgICAgICBpZiBzIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ05vbmUgb2JqZWN0IGNhbm5vdCBiZSBxdW90ZWQnKQorICAgICAgICByZXR1cm4gcwogICAgIGNhY2hla2V5ID0gKHNhZmUsIGFsd2F5c19zYWZlKQogICAgIHRyeToKLSAgICAgICAgc2FmZV9tYXAgPSBfc2FmZW1hcHNbY2FjaGVrZXldCisgICAgICAgIChxdW90ZXIsIHNhZmUpID0gX3NhZmVfcXVvdGVyc1tjYWNoZWtleV0KICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHNhZmUgKz0gYWx3YXlzX3NhZmUKLSAgICAgICAgc2FmZV9tYXAgPSB7fQotICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgotICAgICAgICAgICAgYyA9IGNocihpKQotICAgICAgICAgICAgc2FmZV9tYXBbY10gPSAoYyBpbiBzYWZlKSBhbmQgYyBvciAoJyUlJTAyWCcgJSBpKQotICAgICAgICBfc2FmZW1hcHNbY2FjaGVrZXldID0gc2FmZV9tYXAKLSAgICByZXMgPSBtYXAoc2FmZV9tYXAuX19nZXRpdGVtX18sIHMpCi0gICAgcmV0dXJuICcnLmpvaW4ocmVzKQorICAgICAgICBzYWZlX21hcCA9IF9zYWZlX21hcC5jb3B5KCkKKyAgICAgICAgc2FmZV9tYXAudXBkYXRlKFsoYywgYykgZm9yIGMgaW4gc2FmZV0pCisgICAgICAgIHF1b3RlciA9IHNhZmVfbWFwLl9fZ2V0aXRlbV9fCisgICAgICAgIHNhZmUgPSBhbHdheXNfc2FmZSArIHNhZmUKKyAgICAgICAgX3NhZmVfcXVvdGVyc1tjYWNoZWtleV0gPSAocXVvdGVyLCBzYWZlKQorICAgIGlmIG5vdCBzLnJzdHJpcChzYWZlKToKKyAgICAgICAgcmV0dXJuIHMKKyAgICByZXR1cm4gJycuam9pbihtYXAocXVvdGVyLCBzKSkKIAotZGVmIHF1b3RlX3BsdXMocywgc2FmZSA9ICcnKToKK2RlZiBxdW90ZV9wbHVzKHMsIHNhZmU9JycpOgogICAgICIiIlF1b3RlIHRoZSBxdWVyeSBmcmFnbWVudCBvZiBhIFVSTDsgcmVwbGFjaW5nICcgJyB3aXRoICcrJyIiIgogICAgIGlmICcgJyBpbiBzOgogICAgICAgICBzID0gcXVvdGUocywgc2FmZSArICcgJykKICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgnICcsICcrJykKICAgICByZXR1cm4gcXVvdGUocywgc2FmZSkKIAotZGVmIHVybGVuY29kZShxdWVyeSxkb3NlcT0wKToKK2RlZiB1cmxlbmNvZGUocXVlcnksIGRvc2VxPTApOgogICAgICIiIkVuY29kZSBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyBvciBkaWN0aW9uYXJ5IGludG8gYSBVUkwgcXVlcnkgc3RyaW5nLgogCiAgICAgSWYgYW55IHZhbHVlcyBpbiB0aGUgcXVlcnkgYXJnIGFyZSBzZXF1ZW5jZXMgYW5kIGRvc2VxIGlzIHRydWUsIGVhY2gKQEAgLTEyODMsNyArMTI5Niw3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBpcyB0aGlzIGEgc3VmZmljaWVudCB0ZXN0IGZvciBzZXF1ZW5jZS1uZXNzPwotICAgICAgICAgICAgICAgICAgICB4ID0gbGVuKHYpCisgICAgICAgICAgICAgICAgICAgIGxlbih2KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgbm90IGEgc2VxdWVuY2UKICAgICAgICAgICAgICAgICAgICAgdiA9IHF1b3RlX3BsdXMoc3RyKHYpKQpAQCAtMTM5Myw3ICsxNDA2LDYgQEAKIAogICAgICAgICByZXR1cm4gRmFsc2UKIAotCiAgICAgZGVmIGdldHByb3hpZXNfbWFjb3N4X3N5c2NvbmYoKToKICAgICAgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBvZiBzY2hlbWUgLT4gcHJveHkgc2VydmVyIFVSTCBtYXBwaW5ncy4KIApAQCAtMTQwMiw4ICsxNDE0LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBfZ2V0X3Byb3hpZXMoKQogCi0KLQogICAgIGRlZiBwcm94eV9ieXBhc3MoaG9zdCk6CiAgICAgICAgIGlmIGdldHByb3hpZXNfZW52aXJvbm1lbnQoKToKICAgICAgICAgICAgIHJldHVybiBwcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoaG9zdCkKQEAgLTE1MDcsMTggKzE1MTcsMTEgQEAKICAgICAgICAgIyAnPGxvY2FsPicgc3RyaW5nIGJ5IHRoZSBsb2NhbGhvc3QgZW50cnkgYW5kIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgICMgY2Fub25pY2FsIGVudHJ5LgogICAgICAgICBwcm94eU92ZXJyaWRlID0gcHJveHlPdmVycmlkZS5zcGxpdCgnOycpCi0gICAgICAgIGkgPSAwCi0gICAgICAgIHdoaWxlIGkgPCBsZW4ocHJveHlPdmVycmlkZSk6Ci0gICAgICAgICAgICBpZiBwcm94eU92ZXJyaWRlW2ldID09ICc8bG9jYWw+JzoKLSAgICAgICAgICAgICAgICBwcm94eU92ZXJyaWRlW2k6aSsxXSA9IFsnbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTI3LjAuMC4xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdG5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LmdldGhvc3RuYW1lKCkpXQotICAgICAgICAgICAgaSArPSAxCi0gICAgICAgICMgcHJpbnQgcHJveHlPdmVycmlkZQogICAgICAgICAjIG5vdyBjaGVjayBpZiB3ZSBtYXRjaCBvbmUgb2YgdGhlIHJlZ2lzdHJ5IHZhbHVlcy4KICAgICAgICAgZm9yIHRlc3QgaW4gcHJveHlPdmVycmlkZToKKyAgICAgICAgICAgIGlmIHRlc3QgPT0gJzxsb2NhbD4nOgorICAgICAgICAgICAgICAgIGlmICcuJyBub3QgaW4gcmF3SG9zdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgIHRlc3QgPSB0ZXN0LnJlcGxhY2UoIi4iLCByIlwuIikgICAgICMgbWFzayBkb3RzCiAgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCIqIiwgciIuKiIpICAgICAjIGNoYW5nZSBnbG9iIHNlcXVlbmNlCiAgICAgICAgICAgICB0ZXN0ID0gdGVzdC5yZXBsYWNlKCI/IiwgciIuIikgICAgICAjIGNoYW5nZSBnbG9iIGNoYXIKQEAgLTE1ODgsOSArMTU5MSw4IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJz09PT09PScKICAgICAgICAgICAgICAgICBmb3IgayBpbiBoLmtleXMoKTogcHJpbnQgayArICc6JywgaFtrXQogICAgICAgICAgICAgICAgIHByaW50ICc9PT09PT0nCi0gICAgICAgICAgICBmcCA9IG9wZW4oZm4sICdyYicpCi0gICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCi0gICAgICAgICAgICBkZWwgZnAKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQogICAgICAgICAgICAgaWYgJ1xyJyBpbiBkYXRhOgogICAgICAgICAgICAgICAgIHRhYmxlID0gc3RyaW5nLm1ha2V0cmFucygiIiwgIiIpCiAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEudHJhbnNsYXRlKHRhYmxlLCAiXHIiKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYjIucHkgYi9MaWIvdXJsbGliMi5weQppbmRleCBjYTc0YzlmLi5kYTAzMGY3IDEwMDY0NAotLS0gYS9MaWIvdXJsbGliMi5weQorKysgYi9MaWIvdXJsbGliMi5weQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSB1cmxsaWIgaW1wb3J0ICh1bndyYXAsIHVucXVvdGUsIHNwbGl0dHlwZSwgc3BsaXRob3N0LCBxdW90ZSwKLSAgICAgYWRkaW5mb3VybCwgc3BsaXRwb3J0LAorICAgICBhZGRpbmZvdXJsLCBzcGxpdHBvcnQsIHNwbGl0dGFnLAogICAgICBzcGxpdGF0dHIsIGZ0cHdyYXBwZXIsIHNwbGl0dXNlciwgc3BsaXRwYXNzd2QsIHNwbGl0dmFsdWUpCiAKICMgc3VwcG9ydCBmb3IgRmlsZUhhbmRsZXIsIHByb3hpZXMgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwpAQCAtMTkwLDYgKzE5MCw3IEBACiAgICAgICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdD1Ob25lLCB1bnZlcmlmaWFibGU9RmFsc2UpOgogICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKICAgICAgICAgc2VsZi5fX29yaWdpbmFsID0gdW53cmFwKHVybCkKKyAgICAgICAgc2VsZi5fX29yaWdpbmFsLCBmcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuX19vcmlnaW5hbCkKICAgICAgICAgc2VsZi50eXBlID0gTm9uZQogICAgICAgICAjIHNlbGYuX19yX3R5cGUgaXMgd2hhdCdzIGxlZnQgYWZ0ZXIgZG9pbmcgdGhlIHNwbGl0dHlwZQogICAgICAgICBzZWxmLmhvc3QgPSBOb25lCkBAIC0yOTgsOCArMjk5LDkgQEAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIGNsaWVudF92ZXJzaW9uID0gIlB5dGhvbi11cmxsaWIvJXMiICUgX192ZXJzaW9uX18KICAgICAgICAgc2VsZi5hZGRoZWFkZXJzID0gWygnVXNlci1hZ2VudCcsIGNsaWVudF92ZXJzaW9uKV0KLSAgICAgICAgIyBtYW5hZ2UgdGhlIGluZGl2aWR1YWwgaGFuZGxlcnMKKyAgICAgICAgIyBzZWxmLmhhbmRsZXJzIGlzIHJldGFpbmVkIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgICAgc2VsZi5oYW5kbGVycyA9IFtdCisgICAgICAgICMgbWFuYWdlIHRoZSBpbmRpdmlkdWFsIGhhbmRsZXJzCiAgICAgICAgIHNlbGYuaGFuZGxlX29wZW4gPSB7fQogICAgICAgICBzZWxmLmhhbmRsZV9lcnJvciA9IHt9CiAgICAgICAgIHNlbGYucHJvY2Vzc19yZXNwb25zZSA9IHt9CkBAIC0zNDksOCArMzUxLDYgQEAKICAgICAgICAgICAgIGFkZGVkID0gVHJ1ZQogCiAgICAgICAgIGlmIGFkZGVkOgotICAgICAgICAgICAgIyB0aGUgaGFuZGxlcnMgbXVzdCB3b3JrIGluIGFuIHNwZWNpZmljIG9yZGVyLCB0aGUgb3JkZXIKLSAgICAgICAgICAgICMgaXMgc3BlY2lmaWVkIGluIGEgSGFuZGxlciBhdHRyaWJ1dGUKICAgICAgICAgICAgIGJpc2VjdC5pbnNvcnQoc2VsZi5oYW5kbGVycywgaGFuZGxlcikKICAgICAgICAgICAgIGhhbmRsZXIuYWRkX3BhcmVudChzZWxmKQogCkBAIC00NDksNyArNDQ5LDcgQEAKICAgICAiIiIKICAgICBpbXBvcnQgdHlwZXMKICAgICBkZWYgaXNjbGFzcyhvYmopOgotICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvYmosIHR5cGVzLkNsYXNzVHlwZSkgb3IgaGFzYXR0cihvYmosICJfX2Jhc2VzX18iKQorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvYmosICh0eXBlcy5DbGFzc1R5cGUsIHR5cGUpKQogCiAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQogICAgIGRlZmF1bHRfY2xhc3NlcyA9IFtQcm94eUhhbmRsZXIsIFVua25vd25IYW5kbGVyLCBIVFRQSGFuZGxlciwKQEAgLTgyMSw2ICs4MjEsOSBAQAogICAgICAgICBzZWxmLmFkZF9wYXNzd29yZCA9IHNlbGYucGFzc3dkLmFkZF9wYXNzd29yZAogICAgICAgICBzZWxmLnJldHJpZWQgPSAwCiAKKyAgICBkZWYgcmVzZXRfcmV0cnlfY291bnQoc2VsZik6CisgICAgICAgIHNlbGYucmV0cmllZCA9IDAKKwogICAgIGRlZiBodHRwX2Vycm9yX2F1dGhfcmVxZWQoc2VsZiwgYXV0aHJlcSwgaG9zdCwgcmVxLCBoZWFkZXJzKToKICAgICAgICAgIyBob3N0IG1heSBiZSBhbiBhdXRob3JpdHkgKHdpdGhvdXQgdXNlcmluZm8pIG9yIGEgVVJMIHdpdGggYW4KICAgICAgICAgIyBhdXRob3JpdHkKQEAgLTgzOSw3ICs4NDIsMTAgQEAKICAgICAgICAgICAgIGlmIG1vOgogICAgICAgICAgICAgICAgIHNjaGVtZSwgcXVvdGUsIHJlYWxtID0gbW8uZ3JvdXBzKCkKICAgICAgICAgICAgICAgICBpZiBzY2hlbWUubG93ZXIoKSA9PSAnYmFzaWMnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXRyeV9odHRwX2Jhc2ljX2F1dGgoaG9zdCwgcmVxLCByZWFsbSkKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJldHJ5X2h0dHBfYmFzaWNfYXV0aChob3N0LCByZXEsIHJlYWxtKQorICAgICAgICAgICAgICAgICAgICBpZiByZXNwb25zZSBhbmQgcmVzcG9uc2UuY29kZSAhPSA0MDE6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJpZWQgPSAwCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQogCiAgICAgZGVmIHJldHJ5X2h0dHBfYmFzaWNfYXV0aChzZWxmLCBob3N0LCByZXEsIHJlYWxtKToKICAgICAgICAgdXNlciwgcHcgPSBzZWxmLnBhc3N3ZC5maW5kX3VzZXJfcGFzc3dvcmQocmVhbG0sIGhvc3QpCkBAIC04NjAsOCArODY2LDEwIEBACiAKICAgICBkZWYgaHR0cF9lcnJvcl80MDEoc2VsZiwgcmVxLCBmcCwgY29kZSwgbXNnLCBoZWFkZXJzKToKICAgICAgICAgdXJsID0gcmVxLmdldF9mdWxsX3VybCgpCi0gICAgICAgIHJldHVybiBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgnd3d3LWF1dGhlbnRpY2F0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgaGVhZGVycykKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgnd3d3LWF1dGhlbnRpY2F0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLCByZXEsIGhlYWRlcnMpCisgICAgICAgIHNlbGYucmVzZXRfcmV0cnlfY291bnQoKQorICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogCiBjbGFzcyBQcm94eUJhc2ljQXV0aEhhbmRsZXIoQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyLCBCYXNlSGFuZGxlcik6CkBAIC04NzQsOCArODgyLDEwIEBACiAgICAgICAgICMgc2hvdWxkIG5vdCwgUkZDIDM5ODYgcy4gMy4yLjEpIHN1cHBvcnQgcmVxdWVzdHMgZm9yIFVSTHMgY29udGFpbmluZwogICAgICAgICAjIHVzZXJpbmZvLgogICAgICAgICBhdXRob3JpdHkgPSByZXEuZ2V0X2hvc3QoKQotICAgICAgICByZXR1cm4gc2VsZi5odHRwX2Vycm9yX2F1dGhfcmVxZWQoJ3Byb3h5LWF1dGhlbnRpY2F0ZScsCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5odHRwX2Vycm9yX2F1dGhfcmVxZWQoJ3Byb3h5LWF1dGhlbnRpY2F0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHksIHJlcSwgaGVhZGVycykKKyAgICAgICAgc2VsZi5yZXNldF9yZXRyeV9jb3VudCgpCisgICAgICAgIHJldHVybiByZXNwb25zZQogCiAKIGRlZiByYW5kb21ieXRlcyhuKToKQEAgLTExMTYsOCArMTEyNiwxMCBAQAogICAgICAgICBoID0gaHR0cF9jbGFzcyhob3N0LCB0aW1lb3V0PXJlcS50aW1lb3V0KSAjIHdpbGwgcGFyc2UgaG9zdDpwb3J0CiAgICAgICAgIGguc2V0X2RlYnVnbGV2ZWwoc2VsZi5fZGVidWdsZXZlbCkKIAotICAgICAgICBoZWFkZXJzID0gZGljdChyZXEuaGVhZGVycykKLSAgICAgICAgaGVhZGVycy51cGRhdGUocmVxLnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBoZWFkZXJzID0gZGljdChyZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIGhlYWRlcnMudXBkYXRlKGRpY3QoKGssIHYpIGZvciBrLCB2IGluIHJlcS5oZWFkZXJzLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBoZWFkZXJzKSkKKwogICAgICAgICAjIFdlIHdhbnQgdG8gbWFrZSBhbiBIVFRQLzEuMSByZXF1ZXN0LCBidXQgdGhlIGFkZGluZm91cmwKICAgICAgICAgIyBjbGFzcyBpc24ndCBwcmVwYXJlZCB0byBkZWFsIHdpdGggYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24uCiAgICAgICAgICMgSXQgd2lsbCB0cnkgdG8gcmVhZCBhbGwgcmVtYWluaW5nIGRhdGEgZnJvbSB0aGUgc29ja2V0LApAQCAtMTEzNiwxMSArMTE0OCwxNCBAQAogICAgICAgICAgICAgICAgICMgUHJveHktQXV0aG9yaXphdGlvbiBzaG91bGQgbm90IGJlIHNlbnQgdG8gb3JpZ2luCiAgICAgICAgICAgICAgICAgIyBzZXJ2ZXIuCiAgICAgICAgICAgICAgICAgZGVsIGhlYWRlcnNbcHJveHlfYXV0aF9oZHJdCi0gICAgICAgICAgICBoLl9zZXRfdHVubmVsKHJlcS5fdHVubmVsX2hvc3QsIGhlYWRlcnM9dHVubmVsX2hlYWRlcnMpCisgICAgICAgICAgICBoLnNldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLmdldF9zZWxlY3RvcigpLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZShidWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6ICNidWZmZXJpbmcga3cgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZXJyOiAjIFhYWCB3aGF0IGVycm9yPwogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IoZXJyKQogCkBAIC0xMjU1LDYgKzEyNzAsMTIgQEAKIAogICAgIHJldHVybiBbcGFydC5zdHJpcCgpIGZvciBwYXJ0IGluIHJlc10KIAorZGVmIF9zYWZlX2dldGhvc3RieW5hbWUoaG9zdCk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKKyAgICBleGNlcHQgc29ja2V0LmdhaWVycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCiBjbGFzcyBGaWxlSGFuZGxlcihCYXNlSGFuZGxlcik6CiAgICAgIyBVc2UgbG9jYWwgZmlsZSBvciBGVFAgZGVwZW5kaW5nIG9uIGZvcm0gb2YgVVJMCiAgICAgZGVmIGZpbGVfb3BlbihzZWxmLCByZXEpOgpAQCAtMTI5Niw3ICsxMzE3LDcgQEAKICAgICAgICAgICAgIGlmIGhvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCA9IHNwbGl0cG9ydChob3N0KQogICAgICAgICAgICAgaWYgbm90IGhvc3Qgb3IgXAotICAgICAgICAgICAgICAgIChub3QgcG9ydCBhbmQgc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkgaW4gc2VsZi5nZXRfbmFtZXMoKSk6CisgICAgICAgICAgICAgICAgKG5vdCBwb3J0IGFuZCBfc2FmZV9nZXRob3N0YnluYW1lKGhvc3QpIGluIHNlbGYuZ2V0X25hbWVzKCkpOgogICAgICAgICAgICAgICAgIGlmIGhvc3Q6CiAgICAgICAgICAgICAgICAgICAgIG9yaWd1cmwgPSAnZmlsZTovLycgKyBob3N0ICsgZmlsZW5hbWUKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTMyNyw4ICsxMzQ4LDggQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhc3N3ZCA9IE5vbmUKICAgICAgICAgaG9zdCA9IHVucXVvdGUoaG9zdCkKLSAgICAgICAgdXNlciA9IHVucXVvdGUodXNlciBvciAnJykKLSAgICAgICAgcGFzc3dkID0gdW5xdW90ZShwYXNzd2Qgb3IgJycpCisgICAgICAgIHVzZXIgPSB1c2VyIG9yICcnCisgICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCBvciAnJwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhvc3QgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KQpkaWZmIC0tZ2l0IGEvTGliL3VybHBhcnNlLnB5IGIvTGliL3VybHBhcnNlLnB5CmluZGV4IDI5NDU0NWMuLmEwMTlhN2IgMTAwNjQ0Ci0tLSBhL0xpYi91cmxwYXJzZS5weQorKysgYi9MaWIvdXJscGFyc2UucHkKQEAgLTUsNiArNSw5IEBACiBSRkMgMzk4NiAoU1RENjYpOiAiVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycyIgYnkgVC4gQmVybmVycy1MZWUsIFIuIEZpZWxkaW5nCiBhbmQgTC4gIE1hc2ludGVyLCBKYW51YXJ5IDIwMDUuCiAKK1JGQyAyNzMyIDogIkZvcm1hdCBmb3IgTGl0ZXJhbCBJUHY2IEFkZHJlc3NlcyBpbiBVUkwncyBieSBSLkhpbmRlbiwgQi5DYXJwZW50ZXIKK2FuZCBMLk1hc2ludGVyLCBEZWNlbWJlciAxOTk5LgorCiBSRkMgMjM5NjogICJVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIChVUkkpIjogR2VuZXJpYyBTeW50YXggYnkgVC4KIEJlcm5lcnMtTGVlLCBSLiBGaWVsZGluZywgYW5kIEwuIE1hc2ludGVyLCBBdWd1c3QgMTk5OC4KIApAQCAtODUsMjIgKzg4LDI0IEBACiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaG9zdG5hbWUoc2VsZik6Ci0gICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jCi0gICAgICAgIGlmICJAIiBpbiBuZXRsb2M6Ci0gICAgICAgICAgICBuZXRsb2MgPSBuZXRsb2MucnNwbGl0KCJAIiwgMSlbMV0KLSAgICAgICAgaWYgIjoiIGluIG5ldGxvYzoKLSAgICAgICAgICAgIG5ldGxvYyA9IG5ldGxvYy5zcGxpdCgiOiIsIDEpWzBdCi0gICAgICAgIHJldHVybiBuZXRsb2MubG93ZXIoKSBvciBOb25lCisgICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jLnNwbGl0KCdAJylbLTFdCisgICAgICAgIGlmICdbJyBpbiBuZXRsb2MgYW5kICddJyBpbiBuZXRsb2M6CisgICAgICAgICAgICByZXR1cm4gbmV0bG9jLnNwbGl0KCddJylbMF1bMTpdLmxvd2VyKCkKKyAgICAgICAgZWxpZiAnOicgaW4gbmV0bG9jOgorICAgICAgICAgICAgcmV0dXJuIG5ldGxvYy5zcGxpdCgnOicpWzBdLmxvd2VyKCkKKyAgICAgICAgZWxpZiBuZXRsb2MgPT0gJyc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG5ldGxvYy5sb3dlcigpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgcG9ydChzZWxmKToKLSAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2MKLSAgICAgICAgaWYgIkAiIGluIG5ldGxvYzoKLSAgICAgICAgICAgIG5ldGxvYyA9IG5ldGxvYy5yc3BsaXQoIkAiLCAxKVsxXQotICAgICAgICBpZiAiOiIgaW4gbmV0bG9jOgotICAgICAgICAgICAgcG9ydCA9IG5ldGxvYy5zcGxpdCgiOiIsIDEpWzFdCisgICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jLnNwbGl0KCdAJylbLTFdLnNwbGl0KCddJylbLTFdCisgICAgICAgIGlmICc6JyBpbiBuZXRsb2M6CisgICAgICAgICAgICBwb3J0ID0gbmV0bG9jLnNwbGl0KCc6JylbMV0KICAgICAgICAgICAgIHJldHVybiBpbnQocG9ydCwgMTApCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiAKQEAgLTE3Miw2ICsxNzcsOSBAQAogICAgICAgICAgICAgdXJsID0gdXJsW2krMTpdCiAgICAgICAgICAgICBpZiB1cmxbOjJdID09ICcvLyc6CiAgICAgICAgICAgICAgICAgbmV0bG9jLCB1cmwgPSBfc3BsaXRuZXRsb2ModXJsLCAyKQorICAgICAgICAgICAgICAgIGlmICgoJ1snIGluIG5ldGxvYyBhbmQgJ10nIG5vdCBpbiBuZXRsb2MpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAoJ10nIGluIG5ldGxvYyBhbmQgJ1snIG5vdCBpbiBuZXRsb2MpKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBJUHY2IFVSTCIpCiAgICAgICAgICAgICBpZiBhbGxvd19mcmFnbWVudHMgYW5kICcjJyBpbiB1cmw6CiAgICAgICAgICAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybC5zcGxpdCgnIycsIDEpCiAgICAgICAgICAgICBpZiAnPycgaW4gdXJsOgpAQCAtMTc5LDE0ICsxODcsMTggQEAKICAgICAgICAgICAgIHYgPSBTcGxpdFJlc3VsdChzY2hlbWUsIG5ldGxvYywgdXJsLCBxdWVyeSwgZnJhZ21lbnQpCiAgICAgICAgICAgICBfcGFyc2VfY2FjaGVba2V5XSA9IHYKICAgICAgICAgICAgIHJldHVybiB2Ci0gICAgICAgIGZvciBjIGluIHVybFs6aV06Ci0gICAgICAgICAgICBpZiBjIG5vdCBpbiBzY2hlbWVfY2hhcnM6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNjaGVtZSwgdXJsID0gdXJsWzppXS5sb3dlcigpLCB1cmxbaSsxOl0KKyAgICAgICAgaWYgdXJsLmVuZHN3aXRoKCc6Jykgb3Igbm90IHVybFtpKzFdLmlzZGlnaXQoKToKKyAgICAgICAgICAgIGZvciBjIGluIHVybFs6aV06CisgICAgICAgICAgICAgICAgaWYgYyBub3QgaW4gc2NoZW1lX2NoYXJzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzY2hlbWUsIHVybCA9IHVybFs6aV0ubG93ZXIoKSwgdXJsW2krMTpdCiAKICAgICBpZiB1cmxbOjJdID09ICcvLyc6CiAgICAgICAgIG5ldGxvYywgdXJsID0gX3NwbGl0bmV0bG9jKHVybCwgMikKKyAgICAgICAgaWYgKCgnWycgaW4gbmV0bG9jIGFuZCAnXScgbm90IGluIG5ldGxvYykgb3IKKyAgICAgICAgICAgICAgICAoJ10nIGluIG5ldGxvYyBhbmQgJ1snIG5vdCBpbiBuZXRsb2MpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgSVB2NiBVUkwiKQogICAgIGlmIGFsbG93X2ZyYWdtZW50cyBhbmQgc2NoZW1lIGluIHVzZXNfZnJhZ21lbnQgYW5kICcjJyBpbiB1cmw6CiAgICAgICAgIHVybCwgZnJhZ21lbnQgPSB1cmwuc3BsaXQoJyMnLCAxKQogICAgIGlmIHNjaGVtZSBpbiB1c2VzX3F1ZXJ5IGFuZCAnPycgaW4gdXJsOgpAQCAtMjQ0LDE0ICsyNTYsOSBAQAogICAgIGlmIHBhdGhbOjFdID09ICcvJzoKICAgICAgICAgcmV0dXJuIHVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKQotICAgIGlmIG5vdCBwYXRoOgorICAgIGlmIG5vdCBwYXRoIGFuZCBub3QgcGFyYW1zOgogICAgICAgICBwYXRoID0gYnBhdGgKLSAgICAgICAgaWYgbm90IHBhcmFtczoKLSAgICAgICAgICAgIHBhcmFtcyA9IGJwYXJhbXMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoWzotMV0KLSAgICAgICAgICAgIHJldHVybiB1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKQorICAgICAgICBwYXJhbXMgPSBicGFyYW1zCiAgICAgICAgIGlmIG5vdCBxdWVyeToKICAgICAgICAgICAgIHF1ZXJ5ID0gYnF1ZXJ5CiAgICAgICAgIHJldHVybiB1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgcGF0aCwKQEAgLTI5NSwzNSArMzAyLDM5IEBACiAgICAgICAgIHJldHVybiB1cmwsICcnCiAKICMgdW5xdW90ZSBtZXRob2QgZm9yIHBhcnNlX3FzIGFuZCBwYXJzZV9xc2wKLSMgQ2Fubm90IHVzZSBkaXJlY3RseSBmcm9tIHVybGxpYiBhcyBpdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXIgcmVmZXJlbmNlLgotIyB1cmxsaWIgdXNlcyB1cmxwYXJzZSBtZXRob2RzICggdXJsam9pbikKLQorIyBDYW5ub3QgdXNlIGRpcmVjdGx5IGZyb20gdXJsbGliIGFzIGl0IHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIHJlZmVyZW5jZQorIyBiZWNhdXNlIHVybGxpYiB1c2VzIHVybHBhcnNlIG1ldGhvZHMgKHVybGpvaW4pLiAgSWYgeW91IHVwZGF0ZSB0aGlzIGZ1bmN0aW9uLAorIyB1cGRhdGUgaXQgYWxzbyBpbiB1cmxsaWIuICBUaGlzIGNvZGUgZHVwbGljYXRpb24gZG9lcyBub3QgZXhpc3RpbiBpbiBQeXRob24zLgogCiBfaGV4ZGlnID0gJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnCi1faGV4dG9jaHIgPSBkaWN0KChhK2IsIGNocihpbnQoYStiLDE2KSkpIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZykKK19oZXh0b2NociA9IGRpY3QoKGErYiwgY2hyKGludChhK2IsMTYpKSkKKyAgICAgICAgICAgICAgICAgZm9yIGEgaW4gX2hleGRpZyBmb3IgYiBpbiBfaGV4ZGlnKQogCiBkZWYgdW5xdW90ZShzKToKICAgICAiIiJ1bnF1b3RlKCdhYmMlMjBkZWYnKSAtPiAnYWJjIGRlZicuIiIiCiAgICAgcmVzID0gcy5zcGxpdCgnJScpCi0gICAgZm9yIGkgaW4geHJhbmdlKDEsIGxlbihyZXMpKToKLSAgICAgICAgaXRlbSA9IHJlc1tpXQorICAgICMgZmFzdHBhdGgKKyAgICBpZiBsZW4ocmVzKSA9PSAxOgorICAgICAgICByZXR1cm4gcworICAgIHMgPSByZXNbMF0KKyAgICBmb3IgaXRlbSBpbiByZXNbMTpdOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXNbaV0gPSBfaGV4dG9jaHJbaXRlbVs6Ml1dICsgaXRlbVsyOl0KKyAgICAgICAgICAgIHMgKz0gX2hleHRvY2hyW2l0ZW1bOjJdXSArIGl0ZW1bMjpdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJlc1tpXSA9ICclJyArIGl0ZW0KKyAgICAgICAgICAgIHMgKz0gJyUnICsgaXRlbQogICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgcmVzW2ldID0gdW5pY2hyKGludChpdGVtWzoyXSwgMTYpKSArIGl0ZW1bMjpdCi0gICAgcmV0dXJuICIiLmpvaW4ocmVzKQorICAgICAgICAgICAgcyArPSB1bmljaHIoaW50KGl0ZW1bOjJdLCAxNikpICsgaXRlbVsyOl0KKyAgICByZXR1cm4gcwogCiBkZWYgcGFyc2VfcXMocXMsIGtlZXBfYmxhbmtfdmFsdWVzPTAsIHN0cmljdF9wYXJzaW5nPTApOgogICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQuCiAKICAgICAgICAgQXJndW1lbnRzOgogCi0gICAgICAgIHFzOiBVUkwtZW5jb2RlZCBxdWVyeSBzdHJpbmcgdG8gYmUgcGFyc2VkCisgICAgICAgIHFzOiBwZXJjZW50LWVuY29kZWQgcXVlcnkgc3RyaW5nIHRvIGJlIHBhcnNlZAogCiAgICAgICAgIGtlZXBfYmxhbmtfdmFsdWVzOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBibGFuayB2YWx1ZXMgaW4KLSAgICAgICAgICAgIFVSTCBlbmNvZGVkIHF1ZXJpZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhbmsgc3RyaW5ncy4KKyAgICAgICAgICAgIHBlcmNlbnQtZW5jb2RlZCBxdWVyaWVzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYW5rIHN0cmluZ3MuCiAgICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYmxhbmtzIHNob3VsZCBiZSByZXRhaW5lZCBhcwogICAgICAgICAgICAgYmxhbmsgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlIHZhbHVlIGluZGljYXRlcyB0aGF0CiAgICAgICAgICAgICBibGFuayB2YWx1ZXMgYXJlIHRvIGJlIGlnbm9yZWQgYW5kIHRyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlCkBAIC0zNDYsMTAgKzM1NywxMCBAQAogCiAgICAgQXJndW1lbnRzOgogCi0gICAgcXM6IFVSTC1lbmNvZGVkIHF1ZXJ5IHN0cmluZyB0byBiZSBwYXJzZWQKKyAgICBxczogcGVyY2VudC1lbmNvZGVkIHF1ZXJ5IHN0cmluZyB0byBiZSBwYXJzZWQKIAogICAgIGtlZXBfYmxhbmtfdmFsdWVzOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBibGFuayB2YWx1ZXMgaW4KLSAgICAgICAgVVJMIGVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLiAgQQorICAgICAgICBwZXJjZW50LWVuY29kZWQgcXVlcmllcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFuayBzdHJpbmdzLiAgQQogICAgICAgICB0cnVlIHZhbHVlIGluZGljYXRlcyB0aGF0IGJsYW5rcyBzaG91bGQgYmUgcmV0YWluZWQgYXMgYmxhbmsKICAgICAgICAgc3RyaW5ncy4gIFRoZSBkZWZhdWx0IGZhbHNlIHZhbHVlIGluZGljYXRlcyB0aGF0IGJsYW5rIHZhbHVlcwogICAgICAgICBhcmUgdG8gYmUgaWdub3JlZCBhbmQgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgIG5vdCBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0xpYi91dS5weSBiL0xpYi91dS5weQppbmRleCBkYTg5ZjcyLi5mOGZhNGM0IDEwMDc1NQotLS0gYS9MaWIvdXUucHkKKysrIGIvTGliL3V1LnB5CkBAIC00NCw0MCArNDQsNDcgQEAKICAgICAjCiAgICAgIyBJZiBpbl9maWxlIGlzIGEgcGF0aG5hbWUgb3BlbiBpdCBhbmQgY2hhbmdlIGRlZmF1bHRzCiAgICAgIwotICAgIGlmIGluX2ZpbGUgPT0gJy0nOgotICAgICAgICBpbl9maWxlID0gc3lzLnN0ZGluCi0gICAgZWxpZiBpc2luc3RhbmNlKGluX2ZpbGUsIGJhc2VzdHJpbmcpOgorICAgIG9wZW5lZF9maWxlcyA9IFtdCisgICAgdHJ5OgorICAgICAgICBpZiBpbl9maWxlID09ICctJzoKKyAgICAgICAgICAgIGluX2ZpbGUgPSBzeXMuc3RkaW4KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGluX2ZpbGUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGluX2ZpbGUpCisgICAgICAgICAgICBpZiBtb2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gb3Muc3RhdChpbl9maWxlKS5zdF9tb2RlCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpbl9maWxlID0gb3Blbihpbl9maWxlLCAncmInKQorICAgICAgICAgICAgb3BlbmVkX2ZpbGVzLmFwcGVuZChpbl9maWxlKQorICAgICAgICAjCisgICAgICAgICMgT3BlbiBvdXRfZmlsZSBpZiBpdCBpcyBhIHBhdGhuYW1lCisgICAgICAgICMKKyAgICAgICAgaWYgb3V0X2ZpbGUgPT0gJy0nOgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBzeXMuc3Rkb3V0CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdXRfZmlsZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4ob3V0X2ZpbGUsICd3YicpCisgICAgICAgICAgICBvcGVuZWRfZmlsZXMuYXBwZW5kKG91dF9maWxlKQorICAgICAgICAjCisgICAgICAgICMgU2V0IGRlZmF1bHRzIGZvciBuYW1lIGFuZCBtb2RlCisgICAgICAgICMKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5fZmlsZSkKKyAgICAgICAgICAgIG5hbWUgPSAnLScKICAgICAgICAgaWYgbW9kZSBpcyBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGluX2ZpbGUpLnN0X21vZGUKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGluX2ZpbGUgPSBvcGVuKGluX2ZpbGUsICdyYicpCi0gICAgIwotICAgICMgT3BlbiBvdXRfZmlsZSBpZiBpdCBpcyBhIHBhdGhuYW1lCi0gICAgIwotICAgIGlmIG91dF9maWxlID09ICctJzoKLSAgICAgICAgb3V0X2ZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgZWxpZiBpc2luc3RhbmNlKG91dF9maWxlLCBiYXNlc3RyaW5nKToKLSAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKG91dF9maWxlLCAndycpCi0gICAgIwotICAgICMgU2V0IGRlZmF1bHRzIGZvciBuYW1lIGFuZCBtb2RlCi0gICAgIwotICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgbmFtZSA9ICctJwotICAgIGlmIG1vZGUgaXMgTm9uZToKLSAgICAgICAgbW9kZSA9IDA2NjYKLSAgICAjCi0gICAgIyBXcml0ZSB0aGUgZGF0YQotICAgICMKLSAgICBvdXRfZmlsZS53cml0ZSgnYmVnaW4gJW8gJXNcbicgJSAoKG1vZGUmMDc3NyksbmFtZSkpCi0gICAgZGF0YSA9IGluX2ZpbGUucmVhZCg0NSkKLSAgICB3aGlsZSBsZW4oZGF0YSkgPiAwOgotICAgICAgICBvdXRfZmlsZS53cml0ZShiaW5hc2NpaS5iMmFfdXUoZGF0YSkpCisgICAgICAgICAgICBtb2RlID0gMDY2NgorICAgICAgICAjCisgICAgICAgICMgV3JpdGUgdGhlIGRhdGEKKyAgICAgICAgIworICAgICAgICBvdXRfZmlsZS53cml0ZSgnYmVnaW4gJW8gJXNcbicgJSAoKG1vZGUmMDc3NyksbmFtZSkpCiAgICAgICAgIGRhdGEgPSBpbl9maWxlLnJlYWQoNDUpCi0gICAgb3V0X2ZpbGUud3JpdGUoJyBcbmVuZFxuJykKKyAgICAgICAgd2hpbGUgbGVuKGRhdGEpID4gMDoKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGJpbmFzY2lpLmIyYV91dShkYXRhKSkKKyAgICAgICAgICAgIGRhdGEgPSBpbl9maWxlLnJlYWQoNDUpCisgICAgICAgIG91dF9maWxlLndyaXRlKCcgXG5lbmRcbicpCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIGYgaW4gb3BlbmVkX2ZpbGVzOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKIAogZGVmIGRlY29kZShpbl9maWxlLCBvdXRfZmlsZT1Ob25lLCBtb2RlPU5vbmUsIHF1aWV0PTApOgpAQCAtODUsNjUgKzkyLDY4IEBACiAgICAgIwogICAgICMgT3BlbiB0aGUgaW5wdXQgZmlsZSwgaWYgbmVlZGVkLgogICAgICMKKyAgICBvcGVuZWRfZmlsZXMgPSBbXQogICAgIGlmIGluX2ZpbGUgPT0gJy0nOgogICAgICAgICBpbl9maWxlID0gc3lzLnN0ZGluCiAgICAgZWxpZiBpc2luc3RhbmNlKGluX2ZpbGUsIGJhc2VzdHJpbmcpOgogICAgICAgICBpbl9maWxlID0gb3Blbihpbl9maWxlKQotICAgICMKLSAgICAjIFJlYWQgdW50aWwgYSBiZWdpbiBpcyBlbmNvdW50ZXJlZCBvciB3ZSd2ZSBleGhhdXN0ZWQgdGhlIGZpbGUKLSAgICAjCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgaGRyID0gaW5fZmlsZS5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBoZHI6Ci0gICAgICAgICAgICByYWlzZSBFcnJvcignTm8gdmFsaWQgYmVnaW4gbGluZSBmb3VuZCBpbiBpbnB1dCBmaWxlJykKLSAgICAgICAgaWYgbm90IGhkci5zdGFydHN3aXRoKCdiZWdpbicpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaGRyZmllbGRzID0gaGRyLnNwbGl0KCcgJywgMikKLSAgICAgICAgaWYgbGVuKGhkcmZpZWxkcykgPT0gMyBhbmQgaGRyZmllbGRzWzBdID09ICdiZWdpbic6CisgICAgICAgIG9wZW5lZF9maWxlcy5hcHBlbmQoaW5fZmlsZSkKKyAgICB0cnk6CisgICAgICAgICMKKyAgICAgICAgIyBSZWFkIHVudGlsIGEgYmVnaW4gaXMgZW5jb3VudGVyZWQgb3Igd2UndmUgZXhoYXVzdGVkIHRoZSBmaWxlCisgICAgICAgICMKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGhkciA9IGluX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGhkcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcignTm8gdmFsaWQgYmVnaW4gbGluZSBmb3VuZCBpbiBpbnB1dCBmaWxlJykKKyAgICAgICAgICAgIGlmIG5vdCBoZHIuc3RhcnRzd2l0aCgnYmVnaW4nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaGRyZmllbGRzID0gaGRyLnNwbGl0KCcgJywgMikKKyAgICAgICAgICAgIGlmIGxlbihoZHJmaWVsZHMpID09IDMgYW5kIGhkcmZpZWxkc1swXSA9PSAnYmVnaW4nOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW50KGhkcmZpZWxkc1sxXSwgOCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBvdXRfZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBoZHJmaWVsZHNbMl0ucnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dF9maWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcignQ2Fubm90IG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlOiAlcycgJSBvdXRfZmlsZSkKKyAgICAgICAgaWYgbW9kZSBpcyBOb25lOgorICAgICAgICAgICAgbW9kZSA9IGludChoZHJmaWVsZHNbMV0sIDgpCisgICAgICAgICMKKyAgICAgICAgIyBPcGVuIHRoZSBvdXRwdXQgZmlsZQorICAgICAgICAjCisgICAgICAgIGlmIG91dF9maWxlID09ICctJzoKKyAgICAgICAgICAgIG91dF9maWxlID0gc3lzLnN0ZG91dAorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob3V0X2ZpbGUsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgZnAgPSBvcGVuKG91dF9maWxlLCAnd2InKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGludChoZHJmaWVsZHNbMV0sIDgpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG9zLnBhdGguY2htb2Qob3V0X2ZpbGUsIG1vZGUpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgIGlmIG91dF9maWxlIGlzIE5vbmU6Ci0gICAgICAgIG91dF9maWxlID0gaGRyZmllbGRzWzJdLnJzdHJpcCgpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dF9maWxlKToKLSAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGU6ICVzJyAlIG91dF9maWxlKQotICAgIGlmIG1vZGUgaXMgTm9uZToKLSAgICAgICAgbW9kZSA9IGludChoZHJmaWVsZHNbMV0sIDgpCi0gICAgIwotICAgICMgT3BlbiB0aGUgb3V0cHV0IGZpbGUKLSAgICAjCi0gICAgb3BlbmVkID0gRmFsc2UKLSAgICBpZiBvdXRfZmlsZSA9PSAnLSc6Ci0gICAgICAgIG91dF9maWxlID0gc3lzLnN0ZG91dAotICAgIGVsaWYgaXNpbnN0YW5jZShvdXRfZmlsZSwgYmFzZXN0cmluZyk6Ci0gICAgICAgIGZwID0gb3BlbihvdXRfZmlsZSwgJ3diJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MucGF0aC5jaG1vZChvdXRfZmlsZSwgbW9kZSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBvdXRfZmlsZSA9IGZwCi0gICAgICAgIG9wZW5lZCA9IFRydWUKLSAgICAjCi0gICAgIyBNYWluIGRlY29kaW5nIGxvb3AKLSAgICAjCi0gICAgcyA9IGluX2ZpbGUucmVhZGxpbmUoKQotICAgIHdoaWxlIHMgYW5kIHMuc3RyaXAoKSAhPSAnZW5kJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmEyYl91dShzKQotICAgICAgICBleGNlcHQgYmluYXNjaWkuRXJyb3IsIHY6Ci0gICAgICAgICAgICAjIFdvcmthcm91bmQgZm9yIGJyb2tlbiB1dWVuY29kZXJzIGJ5IC9GcmVkcmlrIEx1bmRoCi0gICAgICAgICAgICBuYnl0ZXMgPSAoKChvcmQoc1swXSktMzIpICYgNjMpICogNCArIDUpIC8vIDMKLSAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUoc1s6bmJ5dGVzXSkKLSAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYXJuaW5nOiAlc1xuIiAlIHYpCi0gICAgICAgIG91dF9maWxlLndyaXRlKGRhdGEpCisgICAgICAgICAgICBvdXRfZmlsZSA9IGZwCisgICAgICAgICAgICBvcGVuZWRfZmlsZXMuYXBwZW5kKG91dF9maWxlKQorICAgICAgICAjCisgICAgICAgICMgTWFpbiBkZWNvZGluZyBsb29wCisgICAgICAgICMKICAgICAgICAgcyA9IGluX2ZpbGUucmVhZGxpbmUoKQotICAgIGlmIG5vdCBzOgotICAgICAgICByYWlzZSBFcnJvcignVHJ1bmNhdGVkIGlucHV0IGZpbGUnKQotICAgIGlmIG9wZW5lZDoKLSAgICAgICAgb3V0X2ZpbGUuY2xvc2UoKQorICAgICAgICB3aGlsZSBzIGFuZCBzLnN0cmlwKCkgIT0gJ2VuZCc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmEyYl91dShzKQorICAgICAgICAgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yLCB2OgorICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgYnJva2VuIHV1ZW5jb2RlcnMgYnkgL0ZyZWRyaWsgTHVuZGgKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSAoKChvcmQoc1swXSktMzIpICYgNjMpICogNCArIDUpIC8vIDMKKyAgICAgICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHNbOm5ieXRlc10pCisgICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYXJuaW5nOiAlc1xuIiAlIHYpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShkYXRhKQorICAgICAgICAgICAgcyA9IGluX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCdUcnVuY2F0ZWQgaW5wdXQgZmlsZScpCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIGYgaW4gb3BlbmVkX2ZpbGVzOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKIGRlZiB0ZXN0KCk6CiAgICAgIiIidXVlbmNvZGUvdXVkZWNvZGUgbWFpbiBwcm9ncmFtIiIiCmRpZmYgLS1naXQgYS9MaWIvdXVpZC5weSBiL0xpYi91dWlkLnB5CmluZGV4IDI1OWYxYmIuLmZkZDBjNWMgMTAwNjQ0Ci0tLSBhL0xpYi91dWlkLnB5CisrKyBiL0xpYi91dWlkLnB5CkBAIC0zMDIsMTUgKzMwMiwxNSBAQAogICAgICAgICAgICAgIyBMQ19BTEwgdG8gZ2V0IEVuZ2xpc2ggb3V0cHV0LCAyPi9kZXYvbnVsbCB0bwogICAgICAgICAgICAgIyBwcmV2ZW50IG91dHB1dCBvbiBzdGRlcnIKICAgICAgICAgICAgIGNtZCA9ICdMQ19BTEw9QyAlcyAlcyAyPi9kZXYvbnVsbCcgJSAoZXhlY3V0YWJsZSwgYXJncykKLSAgICAgICAgICAgIHBpcGUgPSBvcy5wb3BlbihjbWQpCisgICAgICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZCkgYXMgcGlwZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUubG93ZXIoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih3b3JkcykpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgd29yZHNbaV0gaW4gaHdfaWRlbnRpZmllcnM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbZ2V0X2luZGV4KGkpXS5yZXBsYWNlKCc6JywgJycpLCAxNikKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgIGZvciBsaW5lIGluIHBpcGU6Ci0gICAgICAgICAgICB3b3JkcyA9IGxpbmUubG93ZXIoKS5zcGxpdCgpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4od29yZHMpKToKLSAgICAgICAgICAgICAgICBpZiB3b3Jkc1tpXSBpbiBod19pZGVudGlmaWVyczoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludCh3b3Jkc1tnZXRfaW5kZXgoaSldLnJlcGxhY2UoJzonLCAnJyksIDE2KQogICAgIHJldHVybiBOb25lCiAKIGRlZiBfaWZjb25maWdfZ2V0bm9kZSgpOgpAQCAtMzUzLDEwICszNTMsMTMgQEAKICAgICAgICAgICAgIHBpcGUgPSBvcy5wb3Blbihvcy5wYXRoLmpvaW4oZGlyLCAnaXBjb25maWcnKSArICcgL2FsbCcpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKLSAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpLmxvd2VyKCkKLSAgICAgICAgICAgIGlmIHJlLm1hdGNoKCcoWzAtOWEtZl1bMC05YS1mXS0pezV9WzAtOWEtZl1bMC05YS1mXScsIHZhbHVlKToKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlLnJlcGxhY2UoJy0nLCAnJyksIDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKS5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJyhbMC05YS1mXVswLTlhLWZdLSl7NX1bMC05YS1mXVswLTlhLWZdJywgdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlLnJlcGxhY2UoJy0nLCAnJyksIDE2KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcGlwZS5jbG9zZSgpCiAKIGRlZiBfbmV0Ymlvc19nZXRub2RlKCk6CiAgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFdpbmRvd3MgdXNpbmcgTmV0QklPUyBjYWxscy4KZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBhMDcxYWExLi4wOGI3MGFmIDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC00Niw3ICs0NiwxNCBAQAogICAgICAgICAgICAgICAgICAgIGFwcGVuZD0wKToKICAgICAiIiJJbnNlcnQgYW4gZW50cnkgaW50byB0aGUgbGlzdCBvZiB3YXJuaW5ncyBmaWx0ZXJzIChhdCB0aGUgZnJvbnQpLgogCi0gICAgVXNlIGFzc2VydGlvbnMgdG8gY2hlY2sgdGhhdCBhbGwgYXJndW1lbnRzIGhhdmUgdGhlIHJpZ2h0IHR5cGUuIiIiCisgICAgJ2FjdGlvbicgLS0gb25lIG9mICJlcnJvciIsICJpZ25vcmUiLCAiYWx3YXlzIiwgImRlZmF1bHQiLCAibW9kdWxlIiwKKyAgICAgICAgICAgICAgICBvciAib25jZSIKKyAgICAnbWVzc2FnZScgLS0gYSByZWdleCB0aGF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UgbXVzdCBtYXRjaAorICAgICdjYXRlZ29yeScgLS0gYSBjbGFzcyB0aGF0IHRoZSB3YXJuaW5nIG11c3QgYmUgYSBzdWJjbGFzcyBvZgorICAgICdtb2R1bGUnIC0tIGEgcmVnZXggdGhhdCB0aGUgbW9kdWxlIG5hbWUgbXVzdCBtYXRjaAorICAgICdsaW5lbm8nIC0tIGFuIGludGVnZXIgbGluZSBudW1iZXIsIDAgbWF0Y2hlcyBhbGwgd2FybmluZ3MKKyAgICAnYXBwZW5kJyAtLSBpZiB0cnVlLCBhcHBlbmQgdG8gdGhlIGxpc3Qgb2YgZmlsdGVycworICAgICIiIgogICAgIGltcG9ydCByZQogICAgIGFzc2VydCBhY3Rpb24gaW4gKCJlcnJvciIsICJpZ25vcmUiLCAiYWx3YXlzIiwgImRlZmF1bHQiLCAibW9kdWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAib25jZSIpLCAiaW52YWxpZCBhY3Rpb246ICVyIiAlIChhY3Rpb24sKQpAQCAtNjgsNiArNzUsMTEgQEAKICAgICAiIiJJbnNlcnQgYSBzaW1wbGUgZW50cnkgaW50byB0aGUgbGlzdCBvZiB3YXJuaW5ncyBmaWx0ZXJzIChhdCB0aGUgZnJvbnQpLgogCiAgICAgQSBzaW1wbGUgZmlsdGVyIG1hdGNoZXMgYWxsIG1vZHVsZXMgYW5kIG1lc3NhZ2VzLgorICAgICdhY3Rpb24nIC0tIG9uZSBvZiAiZXJyb3IiLCAiaWdub3JlIiwgImFsd2F5cyIsICJkZWZhdWx0IiwgIm1vZHVsZSIsCisgICAgICAgICAgICAgICAgb3IgIm9uY2UiCisgICAgJ2NhdGVnb3J5JyAtLSBhIGNsYXNzIHRoYXQgdGhlIHdhcm5pbmcgbXVzdCBiZSBhIHN1YmNsYXNzIG9mCisgICAgJ2xpbmVubycgLS0gYW4gaW50ZWdlciBsaW5lIG51bWJlciwgMCBtYXRjaGVzIGFsbCB3YXJuaW5ncworICAgICdhcHBlbmQnIC0tIGlmIHRydWUsIGFwcGVuZCB0byB0aGUgbGlzdCBvZiBmaWx0ZXJzCiAgICAgIiIiCiAgICAgYXNzZXJ0IGFjdGlvbiBpbiAoImVycm9yIiwgImlnbm9yZSIsICJhbHdheXMiLCAiZGVmYXVsdCIsICJtb2R1bGUiLAogICAgICAgICAgICAgICAgICAgICAgICJvbmNlIiksICJpbnZhbGlkIGFjdGlvbjogJXIiICUgKGFjdGlvbiwpCkBAIC0yNjIsMjQgKzI3NCw2IEBACiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVyKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVzIiAlCiAgICAgICAgICAgICAgIChhY3Rpb24sIGl0ZW0pKQotICAgICMgV2FybiBpZiBzaG93d2FybmluZygpIGRvZXMgbm90IHN1cHBvcnQgdGhlICdsaW5lJyBhcmd1bWVudC4KLSAgICAjIERvbid0IHVzZSAnaW5zcGVjdCcgYXMgaXQgcmVsaWVzIG9uIGFuIGV4dGVuc2lvbiBtb2R1bGUsIHdoaWNoIGJyZWFrIHRoZQotICAgICMgYnVpbGQgdGhhbmtzIHRvICd3YXJuaW5ncycgYmVpbmcgaW1wb3J0ZWQgYnkgc2V0dXAucHkuCi0gICAgZnhuX2NvZGUgPSBOb25lCi0gICAgaWYgaGFzYXR0cihzaG93d2FybmluZywgJ2Z1bmNfY29kZScpOgotICAgICAgICBmeG5fY29kZSA9IHNob3d3YXJuaW5nLmZ1bmNfY29kZQotICAgIGVsaWYgaGFzYXR0cihzaG93d2FybmluZywgJ19fZnVuY19fJyk6Ci0gICAgICAgIGZ4bl9jb2RlID0gc2hvd3dhcm5pbmcuX19mdW5jX18uZnVuY19jb2RlCi0gICAgaWYgZnhuX2NvZGU6Ci0gICAgICAgIGFyZ3MgPSBmeG5fY29kZS5jb192YXJuYW1lc1s6ZnhuX2NvZGUuY29fYXJnY291bnRdCi0gICAgICAgIENPX1ZBUkFSR1MgPSAweDQKLSAgICAgICAgaWYgJ2xpbmUnIG5vdCBpbiBhcmdzIGFuZCBub3QgZnhuX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgotICAgICAgICAgICAgc2hvd3dhcm5pbmdfbXNnID0gKCJmdW5jdGlvbnMgb3ZlcnJpZGluZyB3YXJuaW5ncy5zaG93d2FybmluZygpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qgc3VwcG9ydCB0aGUgJ2xpbmUnIGFyZ3VtZW50IikKLSAgICAgICAgICAgIGlmIG1lc3NhZ2UgPT0gc2hvd3dhcm5pbmdfbXNnOgotICAgICAgICAgICAgICAgIF9zaG93X3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdhcm4oc2hvd3dhcm5pbmdfbXNnLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgIyBQcmludCBtZXNzYWdlIGFuZCBjb250ZXh0CiAgICAgc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8pCiAKQEAgLTM4OSw4ICszODMsMTIgQEAKICMgTW9kdWxlIGluaXRpYWxpemF0aW9uCiBfcHJvY2Vzc29wdGlvbnMoc3lzLndhcm5vcHRpb25zKQogaWYgbm90IF93YXJuaW5nc19kZWZhdWx0czoKLSAgICBzaW1wbGVmaWx0ZXIoImlnbm9yZSIsIGNhdGVnb3J5PVBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIGFwcGVuZD0xKQotICAgIHNpbXBsZWZpbHRlcigiaWdub3JlIiwgY2F0ZWdvcnk9SW1wb3J0V2FybmluZywgYXBwZW5kPTEpCisgICAgc2lsZW5jZSA9IFtJbXBvcnRXYXJuaW5nLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nXQorICAgICMgRG9uJ3Qgc2lsZW5jZSBEZXByZWNhdGlvbldhcm5pbmcgaWYgLTMgb3IgLVEgd2FzIHVzZWQuCisgICAgaWYgbm90IHN5cy5weTNrd2FybmluZyBhbmQgbm90IHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nOgorICAgICAgICBzaWxlbmNlLmFwcGVuZChEZXByZWNhdGlvbldhcm5pbmcpCisgICAgZm9yIGNscyBpbiBzaWxlbmNlOgorICAgICAgICBzaW1wbGVmaWx0ZXIoImlnbm9yZSIsIGNhdGVnb3J5PWNscykKICAgICBieXRlc193YXJuaW5nID0gc3lzLmZsYWdzLmJ5dGVzX3dhcm5pbmcKICAgICBpZiBieXRlc193YXJuaW5nID4gMToKICAgICAgICAgYnl0ZXNfYWN0aW9uID0gImVycm9yIgpkaWZmIC0tZ2l0IGEvTGliL3dhdmUucHkgYi9MaWIvd2F2ZS5weQppbmRleCA3MThlMWViLi4yMDE2YTJhIDEwMDY0NAotLS0gYS9MaWIvd2F2ZS5weQorKysgYi9MaWIvd2F2ZS5weQpAQCAtMzE5LDYgKzMxOSw3IEBACiAgICAgICAgIHNlbGYuX25mcmFtZXN3cml0dGVuID0gMAogICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IDAKICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCA9IDAKKyAgICAgICAgc2VsZi5faGVhZGVyd3JpdHRlbiA9IEZhbHNlCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZSgpCkBAIC00NDksNyArNDUwLDcgQEAKICAgICAjCiAKICAgICBkZWYgX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihzZWxmLCBkYXRhc2l6ZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9kYXRhd3JpdHRlbjoKKyAgICAgICAgaWYgbm90IHNlbGYuX2hlYWRlcndyaXR0ZW46CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbmNoYW5uZWxzOgogICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAnIyBjaGFubmVscyBub3Qgc3BlY2lmaWVkJwogICAgICAgICAgICAgaWYgbm90IHNlbGYuX3NhbXB3aWR0aDoKQEAgLTQ1OSw2ICs0NjAsNyBAQAogICAgICAgICAgICAgc2VsZi5fd3JpdGVfaGVhZGVyKGRhdGFzaXplKQogCiAgICAgZGVmIF93cml0ZV9oZWFkZXIoc2VsZiwgaW5pdGxlbmd0aCk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5faGVhZGVyd3JpdHRlbgogICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdSSUZGJykKICAgICAgICAgaWYgbm90IHNlbGYuX25mcmFtZXM6CiAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzID0gaW5pdGxlbmd0aCAvIChzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgpCkBAIC00NzIsOCArNDc0LDEwIEBACiAgICAgICAgICAgICBzZWxmLl9zYW1wd2lkdGggKiA4LCAnZGF0YScpKQogICAgICAgICBzZWxmLl9kYXRhX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cnVjdC5wYWNrKCc8bCcsIHNlbGYuX2RhdGFsZW5ndGgpKQorICAgICAgICBzZWxmLl9oZWFkZXJ3cml0dGVuID0gVHJ1ZQogCiAgICAgZGVmIF9wYXRjaGhlYWRlcihzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2hlYWRlcndyaXR0ZW4KICAgICAgICAgaWYgc2VsZi5fZGF0YXdyaXR0ZW4gPT0gc2VsZi5fZGF0YWxlbmd0aDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBjdXJwb3MgPSBzZWxmLl9maWxlLnRlbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3dlYWtyZWYucHkgYi9MaWIvd2Vha3JlZi5weQppbmRleCA3OGI3NGFkLi44OGM2MGU3IDEwMDY0NAotLS0gYS9MaWIvd2Vha3JlZi5weQorKysgYi9MaWIvd2Vha3JlZi5weQpAQCAtMjAsNiArMjAsOCBAQAogICAgICBQcm94eVR5cGUsCiAgICAgIFJlZmVyZW5jZVR5cGUpCiAKK2Zyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKKwogZnJvbSBleGNlcHRpb25zIGltcG9ydCBSZWZlcmVuY2VFcnJvcgogCiAKQEAgLTI3LDcgKzI5LDcgQEAKIAogX19hbGxfXyA9IFsicmVmIiwgInByb3h5IiwgImdldHdlYWtyZWZjb3VudCIsICJnZXR3ZWFrcmVmcyIsCiAgICAgICAgICAgICJXZWFrS2V5RGljdGlvbmFyeSIsICJSZWZlcmVuY2VFcnJvciIsICJSZWZlcmVuY2VUeXBlIiwgIlByb3h5VHlwZSIsCi0gICAgICAgICAgICJDYWxsYWJsZVByb3h5VHlwZSIsICJQcm94eVR5cGVzIiwgIldlYWtWYWx1ZURpY3Rpb25hcnkiXQorICAgICAgICAgICAiQ2FsbGFibGVQcm94eVR5cGUiLCAiUHJveHlUeXBlcyIsICJXZWFrVmFsdWVEaWN0aW9uYXJ5IiwgJ1dlYWtTZXQnXQogCiAKIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoVXNlckRpY3QuVXNlckRpY3QpOgpAQCAtODUsNiArODcsMTcgQEAKICAgICAgICAgICAgICAgICBuZXdba2V5XSA9IG8KICAgICAgICAgcmV0dXJuIG5ldwogCisgICAgX19jb3B5X18gPSBjb3B5CisKKyAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgorICAgICAgICBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CisgICAgICAgIG5ldyA9IHNlbGYuX19jbGFzc19fKCkKKyAgICAgICAgZm9yIGtleSwgd3IgaW4gc2VsZi5kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBvID0gd3IoKQorICAgICAgICAgICAgaWYgbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBuZXdbZGVlcGNvcHkoa2V5LCBtZW1vKV0gPSBvCisgICAgICAgIHJldHVybiBuZXcKKwogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3ciA9IHNlbGYuZGF0YVtrZXldCkBAIC0yNTYsNiArMjY5LDE3IEBACiAgICAgICAgICAgICAgICAgbmV3W29dID0gdmFsdWUKICAgICAgICAgcmV0dXJuIG5ldwogCisgICAgX19jb3B5X18gPSBjb3B5CisKKyAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgorICAgICAgICBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CisgICAgICAgIG5ldyA9IHNlbGYuX19jbGFzc19fKCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5kYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBvID0ga2V5KCkKKyAgICAgICAgICAgIGlmIG8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbmV3W29dID0gZGVlcGNvcHkodmFsdWUsIG1lbW8pCisgICAgICAgIHJldHVybiBuZXcKKwogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmdldChyZWYoa2V5KSxkZWZhdWx0KQogCmRpZmYgLS1naXQgYS9MaWIvd2ViYnJvd3Nlci5weSBiL0xpYi93ZWJicm93c2VyLnB5CmluZGV4IDVhMDdmZmMuLjQxZmQxNzUgMTAwNjQ0Ci0tLSBhL0xpYi93ZWJicm93c2VyLnB5CisrKyBiL0xpYi93ZWJicm93c2VyLnB5CkBAIC01NSw3ICs1NSw3IEBACiAjIEl0IGlzIHJlY29tbWVuZGVkIG9uZSBkb2VzICJpbXBvcnQgd2ViYnJvd3NlciIgYW5kIHVzZXMgd2ViYnJvd3Nlci5vcGVuKHVybCkKICMgaW5zdGVhZCBvZiAiZnJvbSB3ZWJicm93c2VyIGltcG9ydCAqIi4KIAotZGVmIG9wZW4odXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgorZGVmIG9wZW4odXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgIGZvciBuYW1lIGluIF90cnlvcmRlcjoKICAgICAgICAgYnJvd3NlciA9IGdldChuYW1lKQogICAgICAgICBpZiBicm93c2VyLm9wZW4odXJsLCBuZXcsIGF1dG9yYWlzZSk6CkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLmJhc2VuYW1lID0gbmFtZQogCi0gICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgorICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAgICAgZGVmIG9wZW5fbmV3KHNlbGYsIHVybCk6CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXJncyA9IG5hbWVbMTpdCiAgICAgICAgIHNlbGYuYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYubmFtZSkKIAotICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9VHJ1ZSk6CiAgICAgICAgIGNtZGxpbmUgPSBbc2VsZi5uYW1lXSArIFthcmcucmVwbGFjZSgiJXMiLCB1cmwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuYXJnc10KICAgICAgICAgdHJ5OgpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgIiIiQ2xhc3MgZm9yIGFsbCBicm93c2VycyB3aGljaCBhcmUgdG8gYmUgc3RhcnRlZCBpbiB0aGUKICAgICAgICBiYWNrZ3JvdW5kLiIiIgogCi0gICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPTEpOgorICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgY21kbGluZSA9IFtzZWxmLm5hbWVdICsgW2FyZy5yZXBsYWNlKCIlcyIsIHVybCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gc2VsZi5hcmdzXQogICAgICAgICB0cnk6CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgcmFpc2Vfb3B0ID0gW10KICAgICAgICAgaWYgcmVtb3RlIGFuZCBzZWxmLnJhaXNlX29wdHM6CiAgICAgICAgICAgICAjIHVzZSBhdXRvcmFpc2UgYXJndW1lbnQgb25seSBmb3IgcmVtb3RlIGludm9jYXRpb24KLSAgICAgICAgICAgIGF1dG9yYWlzZSA9IGludChib29sKGF1dG9yYWlzZSkpCisgICAgICAgICAgICBhdXRvcmFpc2UgPSBpbnQoYXV0b3JhaXNlKQogICAgICAgICAgICAgb3B0ID0gc2VsZi5yYWlzZV9vcHRzW2F1dG9yYWlzZV0KICAgICAgICAgICAgIGlmIG9wdDogcmFpc2Vfb3B0ID0gW29wdF0KIApAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gbm90IHAud2FpdCgpCiAKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICBpZiBuZXcgPT0gMDoKICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYucmVtb3RlX2FjdGlvbgogICAgICAgICBlbGlmIG5ldyA9PSAxOgpAQCAtMjg1LDEyICsyODUsMTAgQEAKICAgICAiIiJMYXVuY2hlciBjbGFzcyBmb3IgTW96aWxsYS9OZXRzY2FwZSBicm93c2Vycy4iIiIKIAogICAgIHJhaXNlX29wdHMgPSBbIi1ub3JhaXNlIiwgIi1yYWlzZSJdCi0KICAgICByZW1vdGVfYXJncyA9IFsnLXJlbW90ZScsICdvcGVuVVJMKCVzJWFjdGlvbiknXQogICAgIHJlbW90ZV9hY3Rpb24gPSAiIgogICAgIHJlbW90ZV9hY3Rpb25fbmV3d2luID0gIixuZXctd2luZG93IgogICAgIHJlbW90ZV9hY3Rpb25fbmV3dGFiID0gIixuZXctdGFiIgotCiAgICAgYmFja2dyb3VuZCA9IFRydWUKIAogTmV0c2NhcGUgPSBNb3ppbGxhCkBAIC0zMDMsMTUgKzMwMSwxMyBAQAogICAgIHJlbW90ZV9hcmdzID0gWyclYWN0aW9uJywgJyVzJ10KICAgICByZW1vdGVfYWN0aW9uID0gIi1uIgogICAgIHJlbW90ZV9hY3Rpb25fbmV3d2luID0gIi13IgotCiAgICAgYmFja2dyb3VuZCA9IFRydWUKIAogCiBjbGFzcyBPcGVyYShVbml4QnJvd3Nlcik6CiAgICAgIkxhdW5jaGVyIGNsYXNzIGZvciBPcGVyYSBicm93c2VyLiIKIAotICAgIHJhaXNlX29wdHMgPSBbIiIsICItcmFpc2UiXQotCisgICAgcmFpc2Vfb3B0cyA9IFsiLW5vcmFpc2UiLCAiIl0KICAgICByZW1vdGVfYXJncyA9IFsnLXJlbW90ZScsICdvcGVuVVJMKCVzJWFjdGlvbiknXQogICAgIHJlbW90ZV9hY3Rpb24gPSAiIgogICAgIHJlbW90ZV9hY3Rpb25fbmV3d2luID0gIixuZXctd2luZG93IgpAQCAtMzQwLDcgKzMzNiw3IEBACiAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEtvbnF1ZXJvciByZW1vdGUtY29udHJvbCBpbnRlcmZhY2UuCiAgICAgIiIiCiAKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICAjIFhYWCBDdXJyZW50bHkgSSBrbm93IG5vIHdheSB0byBwcmV2ZW50IEtGTSBmcm9tIG9wZW5pbmcgYSBuZXcgd2luLgogICAgICAgICBpZiBuZXcgPT0gMjoKICAgICAgICAgICAgIGFjdGlvbiA9ICJuZXdUYWIiCkBAIC00MjgsNyArNDI0LDcgQEAKICAgICAgICAgcy5jbG9zZSgpCiAgICAgICAgIHJldHVybiAxCiAKLSAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICBpZiBuZXc6CiAgICAgICAgICAgICBvayA9IHNlbGYuX3JlbW90ZSgiTE9BRE5FVyAiICsgdXJsKQogICAgICAgICBlbHNlOgpAQCAtNTExLDcgKzUwNyw3IEBACiAKIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gIndpbiI6CiAgICAgY2xhc3MgV2luZG93c0RlZmF1bHQoQmFzZUJyb3dzZXIpOgotICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6CisgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUodXJsKQogICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKQEAgLTUzOSwxOCArNTM1LDYgQEAKICMgUGxhdGZvcm0gc3VwcG9ydCBmb3IgTWFjT1MKICMKIAotdHJ5OgotICAgIGltcG9ydCBpYwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgSW50ZXJuZXRDb25maWcoQmFzZUJyb3dzZXIpOgotICAgICAgICBkZWYgb3BlbihzZWxmLCB1cmwsIG5ldz0wLCBhdXRvcmFpc2U9MSk6Ci0gICAgICAgICAgICBpYy5sYXVuY2h1cmwodXJsKQotICAgICAgICAgICAgcmV0dXJuIFRydWUgIyBBbnkgd2F5IHRvIGdldCBzdGF0dXM/Ci0KLSAgICByZWdpc3RlcigiaW50ZXJuZXQtY29uZmlnIiwgSW50ZXJuZXRDb25maWcsIHVwZGF0ZV90cnlvcmRlcj0tMSkKLQogaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICMgQWRhcHRlZCBmcm9tIHBhdGNoIHN1Ym1pdHRlZCB0byBTb3VyY2VGb3JnZSBieSBTdGV2ZW4gSi4gQnVycgogICAgIGNsYXNzIE1hY09TWChCYXNlQnJvd3Nlcik6CkBAIC01NjYsNyArNTUwLDcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogCi0gICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT0xKToKKyAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICAgICAgYXNzZXJ0ICInIiBub3QgaW4gdXJsCiAgICAgICAgICAgICAjIGhhY2sgZm9yIGxvY2FsIHVybHMKICAgICAgICAgICAgIGlmIG5vdCAnOicgaW4gdXJsOgpAQCAtNTk5LDkgKzU4MywzNSBAQAogICAgICAgICAgICAgcmMgPSBvc2FwaXBlLmNsb3NlKCkKICAgICAgICAgICAgIHJldHVybiBub3QgcmMKIAorICAgIGNsYXNzIE1hY09TWE9TQVNjcmlwdChCYXNlQnJvd3Nlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgorICAgICAgICAgICAgaWYgc2VsZi5fbmFtZSA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgc2NyaXB0ID0gJ29wZW4gbG9jYXRpb24gIiVzIicgJSB1cmwucmVwbGFjZSgnIicsICclMjInKSAjIG9wZW5zIGluIGRlZmF1bHQgYnJvd3NlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzY3JpcHQgPSAnJycKKyAgICAgICAgICAgICAgICAgICB0ZWxsIGFwcGxpY2F0aW9uICIlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgb3BlbiBsb2NhdGlvbiAiJXMiCisgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgJycnJShzZWxmLl9uYW1lLCB1cmwucmVwbGFjZSgnIicsICclMjInKSkKKworICAgICAgICAgICAgb3NhcGlwZSA9IG9zLnBvcGVuKCJvc2FzY3JpcHQiLCAidyIpCisgICAgICAgICAgICBpZiBvc2FwaXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIG9zYXBpcGUud3JpdGUoc2NyaXB0KQorICAgICAgICAgICAgcmMgPSBvc2FwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBub3QgcmMKKworCiAgICAgIyBEb24ndCBjbGVhciBfdHJ5b3JkZXIgb3IgX2Jyb3dzZXJzIHNpbmNlIE9TIFggY2FuIHVzZSBhYm92ZSBVbml4IHN1cHBvcnQKICAgICAjIChidXQgd2UgcHJlZmVyIHVzaW5nIHRoZSBPUyBYIHNwZWNpZmljIHN0dWZmKQotICAgIHJlZ2lzdGVyKCJNYWNPU1giLCBOb25lLCBNYWNPU1goJ2RlZmF1bHQnKSwgLTEpCisgICAgcmVnaXN0ZXIoInNhZmFyaSIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnc2FmYXJpJyksIC0xKQorICAgIHJlZ2lzdGVyKCJmaXJlZm94IiwgTm9uZSwgTWFjT1NYT1NBU2NyaXB0KCdmaXJlZm94JyksIC0xKQorICAgIHJlZ2lzdGVyKCJNYWNPU1giLCBOb25lLCBNYWNPU1hPU0FTY3JpcHQoJ2RlZmF1bHQnKSwgLTEpCiAKIAogIwpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvaGFuZGxlcnMucHkgYi9MaWIvd3NnaXJlZi9oYW5kbGVycy5weQppbmRleCA1Y2ZjMjhhLi5hZTFlOGNjIDEwMDY0NAotLS0gYS9MaWIvd3NnaXJlZi9oYW5kbGVycy5weQorKysgYi9MaWIvd3NnaXJlZi9oYW5kbGVycy5weQpAQCAtMzksNyArMzksNiBAQAogICAgICkKIAogCi0KIGNsYXNzIEJhc2VIYW5kbGVyOgogICAgICIiIk1hbmFnZSB0aGUgaW52b2NhdGlvbiBvZiBhIFdTR0kgYXBwbGljYXRpb24iIiIKIApAQCAtNjQsNyArNjMsNyBAQAogCiAgICAgIyBFcnJvciBoYW5kbGluZyAoYWxzbyBwZXItc3ViY2xhc3Mgb3IgcGVyLWluc3RhbmNlKQogICAgIHRyYWNlYmFja19saW1pdCA9IE5vbmUgICMgUHJpbnQgZW50aXJlIHRyYWNlYmFjayB0byBzZWxmLmdldF9zdGRlcnIoKQotICAgIGVycm9yX3N0YXR1cyA9ICI1MDAgRHVkZSwgdGhpcyBpcyB3aGFjayEiCisgICAgZXJyb3Jfc3RhdHVzID0gIjUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiCiAgICAgZXJyb3JfaGVhZGVycyA9IFsoJ0NvbnRlbnQtVHlwZScsJ3RleHQvcGxhaW4nKV0KICAgICBlcnJvcl9ib2R5ID0gIkEgc2VydmVyIGVycm9yIG9jY3VycmVkLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuIgogCkBAIC03NCwxMyArNzMsNiBAQAogICAgIGhlYWRlcnMgPSBOb25lCiAgICAgYnl0ZXNfc2VudCA9IDAKIAotCi0KLQotCi0KLQotCiAgICAgZGVmIHJ1bihzZWxmLCBhcHBsaWNhdGlvbik6CiAgICAgICAgICIiIkludm9rZSB0aGUgYXBwbGljYXRpb24iIiIKICAgICAgICAgIyBOb3RlIHRvIHNlbGY6IGRvbid0IG1vdmUgdGhlIGNsb3NlKCkhICBBc3luY2hyb25vdXMgc2VydmVycyBzaG91bGRuJ3QKQEAgLTE2MCw3ICsxNTIsNyBAQAogCiAgICAgICAgIFN1YmNsYXNzZXMgY2FuIGV4dGVuZCB0aGlzIHRvIGFkZCBvdGhlciBkZWZhdWx0cy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLmhlYWRlcnMuaGFzX2tleSgnQ29udGVudC1MZW5ndGgnKToKKyAgICAgICAgaWYgJ0NvbnRlbnQtTGVuZ3RoJyBub3QgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICAgc2VsZi5zZXRfY29udGVudF9sZW5ndGgoKQogCiAgICAgZGVmIHN0YXJ0X3Jlc3BvbnNlKHNlbGYsIHN0YXR1cywgaGVhZGVycyxleGNfaW5mbz1Ob25lKToKQEAgLTE5NSwxMSArMTg3LDExIEBACiAgICAgICAgIGlmIHNlbGYub3JpZ2luX3NlcnZlcjoKICAgICAgICAgICAgIGlmIHNlbGYuY2xpZW50X2lzX21vZGVybigpOgogICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlKCdIVFRQLyVzICVzXHJcbicgJSAoc2VsZi5odHRwX3ZlcnNpb24sc2VsZi5zdGF0dXMpKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhlYWRlcnMuaGFzX2tleSgnRGF0ZScpOgorICAgICAgICAgICAgICAgIGlmICdEYXRlJyBub3QgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICdEYXRlOiAlc1xyXG4nICUgZm9ybWF0X2RhdGVfdGltZSh0aW1lLnRpbWUoKSkKICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyX3NvZnR3YXJlIGFuZCBub3Qgc2VsZi5oZWFkZXJzLmhhc19rZXkoJ1NlcnZlcicpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyX3NvZnR3YXJlIGFuZCAnU2VydmVyJyBub3QgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZSgnU2VydmVyOiAlc1xyXG4nICUgc2VsZi5zZXJ2ZXJfc29mdHdhcmUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl93cml0ZSgnU3RhdHVzOiAlc1xyXG4nICUgc2VsZi5zdGF0dXMpCkBAIC0yNDgsNyArMjQwLDkgQEAKICAgICBkZWYgZmluaXNoX2NvbnRlbnQoc2VsZik6CiAgICAgICAgICIiIkVuc3VyZSBoZWFkZXJzIGFuZCBjb250ZW50IGhhdmUgYm90aCBiZWVuIHNlbnQiIiIKICAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVyc19zZW50OgotICAgICAgICAgICAgc2VsZi5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gIjAiCisgICAgICAgICAgICAjIE9ubHkgemVybyBDb250ZW50LUxlbmd0aCBpZiBub3Qgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiAoc28KKyAgICAgICAgICAgICMgdGhhdCBIRUFEIHJlcXVlc3RzIGNhbiBiZSBzYXRpc2ZpZWQgcHJvcGVybHksIHNlZSAjMzgzOSkKKyAgICAgICAgICAgIHNlbGYuaGVhZGVycy5zZXRkZWZhdWx0KCdDb250ZW50LUxlbmd0aCcsICIwIikKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXJzKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhc3MgIyBYWFggY2hlY2sgaWYgY29udGVudC1sZW5ndGggd2FzIHRvbyBzaG9ydD8KQEAgLTM1OSwxNSArMzUzLDYgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKLQotCi0KLQotCi0KLQotCi0KIGNsYXNzIFNpbXBsZUhhbmRsZXIoQmFzZUhhbmRsZXIpOgogICAgICIiIkhhbmRsZXIgdGhhdCdzIGp1c3QgaW5pdGlhbGl6ZWQgd2l0aCBzdHJlYW1zLCBlbnZpcm9ubWVudCwgZXRjLgogCkBAIC00MzMsMjMgKzQxOCw2IEBACiAgICAgb3JpZ2luX3NlcnZlciA9IEZhbHNlCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KIGNsYXNzIENHSUhhbmRsZXIoQmFzZUNHSUhhbmRsZXIpOgogCiAgICAgIiIiQ0dJLWJhc2VkIGludm9jYXRpb24gdmlhIHN5cy5zdGRpbi9zdGRvdXQvc3RkZXJyIGFuZCBvcy5lbnZpcm9uCkBAIC00NzgsMjAgKzQ0NiwzIEBACiAgICAgICAgICAgICBzZWxmLCBzeXMuc3RkaW4sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIsIGRpY3Qob3MuZW52aXJvbi5pdGVtcygpKSwKICAgICAgICAgICAgIG11bHRpdGhyZWFkPUZhbHNlLCBtdWx0aXByb2Nlc3M9VHJ1ZQogICAgICAgICApCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL2hlYWRlcnMucHkgYi9MaWIvd3NnaXJlZi9oZWFkZXJzLnB5CmluZGV4IDZiZDMwNGUuLjZjOGM2MGMgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL2hlYWRlcnMucHkKKysrIGIvTGliL3dzZ2lyZWYvaGVhZGVycy5weQpAQCAtMjcsMTggKzI3LDYgQEAKICAgICAgICAgcmV0dXJuIHBhcmFtCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgSGVhZGVyczoKIAogICAgICIiIk1hbmFnZSBhIGNvbGxlY3Rpb24gb2YgSFRUUCByZXNwb25zZSBoZWFkZXJzIiIiCkBAIC03NiwxMCArNjQsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KG5hbWUpCiAKLQotCi0KLQogICAgIGRlZiBoYXNfa2V5KHNlbGYsIG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgaGVhZGVyLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5nZXQobmFtZSkgaXMgbm90IE5vbmUKQEAgLTExOCw5ICsxMDIsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIFtrIGZvciBrLCB2IGluIHNlbGYuX2hlYWRlcnNdCiAKLQotCi0KICAgICBkZWYgdmFsdWVzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCBoZWFkZXIgdmFsdWVzLgogCkBAIC0xNjEsNyArMTQyLDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAotCiAgICAgZGVmIGFkZF9oZWFkZXIoc2VsZiwgX25hbWUsIF92YWx1ZSwgKipfcGFyYW1zKToKICAgICAgICAgIiIiRXh0ZW5kZWQgaGVhZGVyIHNldHRpbmcuCiAKQEAgLTE4NywxOSArMTY3LDMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKF9mb3JtYXRwYXJhbShrLnJlcGxhY2UoJ18nLCAnLScpLCB2KSkKICAgICAgICAgc2VsZi5faGVhZGVycy5hcHBlbmQoKF9uYW1lLCAiOyAiLmpvaW4ocGFydHMpKSkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkgYi9MaWIvd3NnaXJlZi9zaW1wbGVfc2VydmVyLnB5CmluZGV4IDFiMGE0YjIuLmU2YTM4NWIgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkKKysrIGIvTGliL3dzZ2lyZWYvc2ltcGxlX3NlcnZlci5weQpAQCAtMzcsOCArMzcsNiBAQAogCiAKIAotCi0KIGNsYXNzIFdTR0lTZXJ2ZXIoSFRUUFNlcnZlcik6CiAKICAgICAiIiJCYXNlSFRUUFNlcnZlciB0aGF0IGltcGxlbWVudHMgdGhlIFB5dGhvbiBXU0dJIHByb3RvY29sIiIiCkBAIC02OCwxOCArNjYsNiBAQAogCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgV1NHSVJlcXVlc3RIYW5kbGVyKEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgogCiAgICAgc2VydmVyX3ZlcnNpb24gPSAiV1NHSVNlcnZlci8iICsgX192ZXJzaW9uX18KQEAgLTEzOSwyOSArMTI1LDYgQEAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCiBkZWYgZGVtb19hcHAoZW52aXJvbixzdGFydF9yZXNwb25zZSk6CiAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KICAgICBzdGRvdXQgPSBTdHJpbmdJTygpCkBAIC0xOTAsMTYgKzE1MywzIEBACiAgICAgaW1wb3J0IHdlYmJyb3dzZXIKICAgICB3ZWJicm93c2VyLm9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94eXo/YWJjJykKICAgICBodHRwZC5oYW5kbGVfcmVxdWVzdCgpICAjIHNlcnZlIG9uZSByZXF1ZXN0LCB0aGVuIGV4aXQKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3V0aWwucHkgYi9MaWIvd3NnaXJlZi91dGlsLnB5CmluZGV4IDQ1MGEzMmYuLjE5NGIxODcgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3V0aWwucHkKKysrIGIvTGliL3dzZ2lyZWYvdXRpbC5weQpAQCAtMzIsMTMgKzMyLDYgQEAKICAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KIAotCi0KLQotCi0KLQotCiBkZWYgZ3Vlc3Nfc2NoZW1lKGVudmlyb24pOgogICAgICIiIlJldHVybiBhIGd1ZXNzIGZvciB3aGV0aGVyICd3c2dpLnVybF9zY2hlbWUnIHNob3VsZCBiZSAnaHR0cCcgb3IgJ2h0dHBzJwogICAgICIiIgpAQCAtNzEsNyArNjQsNyBAQAogICAgICIiIlJldHVybiB0aGUgZnVsbCByZXF1ZXN0IFVSSSwgb3B0aW9uYWxseSBpbmNsdWRpbmcgdGhlIHF1ZXJ5IHN0cmluZyIiIgogICAgIHVybCA9IGFwcGxpY2F0aW9uX3VyaShlbnZpcm9uKQogICAgIGZyb20gdXJsbGliIGltcG9ydCBxdW90ZQotICAgIHBhdGhfaW5mbyA9IHF1b3RlKGVudmlyb24uZ2V0KCdQQVRIX0lORk8nLCcnKSkKKyAgICBwYXRoX2luZm8gPSBxdW90ZShlbnZpcm9uLmdldCgnUEFUSF9JTkZPJywnJyksc2FmZT0nLzs9LCcpCiAgICAgaWYgbm90IGVudmlyb24uZ2V0KCdTQ1JJUFRfTkFNRScpOgogICAgICAgICB1cmwgKz0gcGF0aF9pbmZvWzE6XQogICAgIGVsc2U6CkBAIC0xNjEsNyArMTU0LDYgQEAKIAogCiAKLQogX2hvcHBpc2ggPSB7CiAgICAgJ2Nvbm5lY3Rpb24nOjEsICdrZWVwLWFsaXZlJzoxLCAncHJveHktYXV0aGVudGljYXRlJzoxLAogICAgICdwcm94eS1hdXRob3JpemF0aW9uJzoxLCAndGUnOjEsICd0cmFpbGVycyc6MSwgJ3RyYW5zZmVyLWVuY29kaW5nJzoxLApAQCAtMTcxLDM1ICsxNjMsMyBAQAogZGVmIGlzX2hvcF9ieV9ob3AoaGVhZGVyX25hbWUpOgogICAgICIiIlJldHVybiB0cnVlIGlmICdoZWFkZXJfbmFtZScgaXMgYW4gSFRUUC8xLjEgIkhvcC1ieS1Ib3AiIGhlYWRlciIiIgogICAgIHJldHVybiBfaG9wcGlzaChoZWFkZXJfbmFtZS5sb3dlcigpKQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jCmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi92YWxpZGF0ZS5weSBiL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CmluZGV4IDIzYWI5ZjguLjQzNzg0ZjkgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CisrKyBiL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CkBAIC0zNDUsNyArMzQ1LDcgQEAKICAgICAgICAgICAgICJJbnZhbGlkIENPTlRFTlRfTEVOR1RIOiAlciIgJSBlbnZpcm9uWydDT05URU5UX0xFTkdUSCddKQogCiAgICAgaWYgbm90IGVudmlyb24uZ2V0KCdTQ1JJUFRfTkFNRScpOgotICAgICAgICBhc3NlcnRfKGVudmlyb24uaGFzX2tleSgnUEFUSF9JTkZPJyksCisgICAgICAgIGFzc2VydF8oJ1BBVEhfSU5GTycgaW4gZW52aXJvbiwKICAgICAgICAgICAgICJPbmUgb2YgU0NSSVBUX05BTUUgb3IgUEFUSF9JTkZPIGFyZSByZXF1aXJlZCAoUEFUSF9JTkZPICIKICAgICAgICAgICAgICJzaG91bGQgYXQgbGVhc3QgYmUgJy8nIGlmIFNDUklQVF9OQU1FIGlzIGVtcHR5KSIpCiAgICAgYXNzZXJ0XyhlbnZpcm9uLmdldCgnU0NSSVBUX05BTUUnKSAhPSAnLycsCmRpZmYgLS1naXQgYS9MaWIveG1sL19faW5pdF9fLnB5IGIvTGliL3htbC9fX2luaXRfXy5weQppbmRleCBmYTVlOGNkLi5kZWVkOTgzIDEwMDY0NAotLS0gYS9MaWIveG1sL19faW5pdF9fLnB5CisrKyBiL0xpYi94bWwvX19pbml0X18ucHkKQEAgLTE5LDEyICsxOSw2IEBACiAKIF9fYWxsX18gPSBbImRvbSIsICJwYXJzZXJzIiwgInNheCIsICJldHJlZSJdCiAKLSMgV2hlbiBiZWluZyBjaGVja2VkLW91dCB3aXRob3V0IG9wdGlvbnMsIHRoaXMgaGFzIHRoZSBmb3JtCi0jICI8ZG9sbGFyPlJldmlzaW9uOiB4LnkgPC9kb2xsYXI+IgotIyBXaGVuIGV4cG9ydGVkIHVzaW5nIC1rdiwgaXQgaXMgIngueSIuCi1fX3ZlcnNpb25fXyA9ICIkUmV2aXNpb24kIi5zcGxpdCgpWy0yOl1bMF0KLQotCiBfTUlOSU1VTV9YTUxQTFVTX1ZFUlNJT04gPSAoMCwgOCwgNCkKIAogCmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9kb21yZWcucHkgYi9MaWIveG1sL2RvbS9kb21yZWcucHkKaW5kZXggNjg0YzQzNi4uZWMzYWNkZiAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZG9tcmVnLnB5CisrKyBiL0xpYi94bWwvZG9tL2RvbXJlZy5weQpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICByZXR1cm4gbW9kLmdldERPTUltcGxlbWVudGF0aW9uKCkKICAgICBlbGlmIG5hbWU6CiAgICAgICAgIHJldHVybiByZWdpc3RlcmVkW25hbWVdKCkKLSAgICBlbGlmIG9zLmVudmlyb24uaGFzX2tleSgiUFlUSE9OX0RPTSIpOgorICAgIGVsaWYgIlBZVEhPTl9ET00iIGluIG9zLmVudmlyb246CiAgICAgICAgIHJldHVybiBnZXRET01JbXBsZW1lbnRhdGlvbihuYW1lID0gb3MuZW52aXJvblsiUFlUSE9OX0RPTSJdKQogCiAgICAgIyBVc2VyIGRpZCBub3Qgc3BlY2lmeSBhIG5hbWUsIHRyeSBpbXBsZW1lbnRhdGlvbnMgaW4gYXJiaXRyYXJ5CmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKaW5kZXggYTJmOGEzMy4uNGZiYTg3NSAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQpAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgICAgIGRvY3R5cGUgPSBzZWxmLmRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50VHlwZSgKICAgICAgICAgICAgIGRvY3R5cGVOYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpCiAgICAgICAgIGRvY3R5cGUub3duZXJEb2N1bWVudCA9IHNlbGYuZG9jdW1lbnQKLSAgICAgICAgc2VsZi5kb2N1bWVudC5jaGlsZE5vZGVzLmFwcGVuZChkb2N0eXBlKQorICAgICAgICBfYXBwZW5kX2NoaWxkKHNlbGYuZG9jdW1lbnQsIGRvY3R5cGUpCiAgICAgICAgIHNlbGYuZG9jdW1lbnQuZG9jdHlwZSA9IGRvY3R5cGUKICAgICAgICAgaWYgc2VsZi5fZmlsdGVyIGFuZCBzZWxmLl9maWx0ZXIuYWNjZXB0Tm9kZShkb2N0eXBlKSA9PSBGSUxURVJfUkVKRUNUOgogICAgICAgICAgICAgc2VsZi5kb2N1bWVudC5kb2N0eXBlID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vbWluaWRvbS5weSBiL0xpYi94bWwvZG9tL21pbmlkb20ucHkKaW5kZXggYWQ0Mjk0Ny4uNjkzZDE3MSAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vbWluaWRvbS5weQorKysgYi9MaWIveG1sL2RvbS9taW5pZG9tLnB5CkBAIC0xNzcsMzQgKzE3NywyNyBAQAogICAgICAgICBMID0gW10KICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGROb2RlczoKICAgICAgICAgICAgIGlmIGNoaWxkLm5vZGVUeXBlID09IE5vZGUuVEVYVF9OT0RFOgotICAgICAgICAgICAgICAgIGRhdGEgPSBjaGlsZC5kYXRhCi0gICAgICAgICAgICAgICAgaWYgZGF0YSBhbmQgTCBhbmQgTFstMV0ubm9kZVR5cGUgPT0gY2hpbGQubm9kZVR5cGU6CisgICAgICAgICAgICAgICAgaWYgbm90IGNoaWxkLmRhdGE6CisgICAgICAgICAgICAgICAgICAgICMgZW1wdHkgdGV4dCBub2RlOyBkaXNjYXJkCisgICAgICAgICAgICAgICAgICAgIGlmIEw6CisgICAgICAgICAgICAgICAgICAgICAgICBMWy0xXS5uZXh0U2libGluZyA9IGNoaWxkLm5leHRTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkLm5leHRTaWJsaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gY2hpbGQucHJldmlvdXNTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgIGNoaWxkLnVubGluaygpCisgICAgICAgICAgICAgICAgZWxpZiBMIGFuZCBMWy0xXS5ub2RlVHlwZSA9PSBjaGlsZC5ub2RlVHlwZToKICAgICAgICAgICAgICAgICAgICAgIyBjb2xsYXBzZSB0ZXh0IG5vZGUKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IExbLTFdCiAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IG5vZGUuZGF0YSArIGNoaWxkLmRhdGEKICAgICAgICAgICAgICAgICAgICAgbm9kZS5uZXh0U2libGluZyA9IGNoaWxkLm5leHRTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkLm5leHRTaWJsaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQubmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nID0gbm9kZQogICAgICAgICAgICAgICAgICAgICBjaGlsZC51bmxpbmsoKQotICAgICAgICAgICAgICAgIGVsaWYgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgaWYgTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIExbLTFdLm5leHRTaWJsaW5nID0gY2hpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZyA9IExbLTFdCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgTC5hcHBlbmQoY2hpbGQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSB0ZXh0IG5vZGU7IGRpc2NhcmQKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQudW5saW5rKCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgTDoKLSAgICAgICAgICAgICAgICAgICAgTFstMV0ubmV4dFNpYmxpbmcgPSBjaGlsZAotICAgICAgICAgICAgICAgICAgICBjaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBMWy0xXQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLnByZXZpb3VzU2libGluZyA9IE5vbmUKICAgICAgICAgICAgICAgICBMLmFwcGVuZChjaGlsZCkKICAgICAgICAgICAgICAgICBpZiBjaGlsZC5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERToKICAgICAgICAgICAgICAgICAgICAgY2hpbGQubm9ybWFsaXplKCkKLSAgICAgICAgaWYgTDoKLSAgICAgICAgICAgIExbLTFdLm5leHRTaWJsaW5nID0gTm9uZQogICAgICAgICBzZWxmLmNoaWxkTm9kZXNbOl0gPSBMCiAKICAgICBkZWYgY2xvbmVOb2RlKHNlbGYsIGRlZXApOgpAQCAtMjk4LDkgKzI5MSwxMCBAQAogCiBkZWYgX3dyaXRlX2RhdGEod3JpdGVyLCBkYXRhKToKICAgICAiV3JpdGVzIGRhdGFjaGFycyB0byB3cml0ZXIuIgotICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoIiYiLCAiJmFtcDsiKS5yZXBsYWNlKCI8IiwgIiZsdDsiKQotICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoIlwiIiwgIiZxdW90OyIpLnJlcGxhY2UoIj4iLCAiJmd0OyIpCi0gICAgd3JpdGVyLndyaXRlKGRhdGEpCisgICAgaWYgZGF0YToKKyAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgiJiIsICImYW1wOyIpLnJlcGxhY2UoIjwiLCAiJmx0OyIpLiBcCisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2UoIlwiIiwgIiZxdW90OyIpLnJlcGxhY2UoIj4iLCAiJmd0OyIpCisgICAgICAgIHdyaXRlci53cml0ZShkYXRhKQogCiBkZWYgX2dldF9lbGVtZW50c19ieV90YWdOYW1lX2hlbHBlcihwYXJlbnQsIG5hbWUsIHJjKToKICAgICBmb3Igbm9kZSBpbiBwYXJlbnQuY2hpbGROb2RlczoKQEAgLTQ5OCw5ICs0OTIsOSBAQAogCiAgICAgZGVmIGhhc19rZXkoc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIFN0cmluZ1R5cGVzKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9hdHRycy5oYXNfa2V5KGtleSkKKyAgICAgICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5fYXR0cnMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9hdHRyc05TLmhhc19rZXkoa2V5KQorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9hdHRyc05TCiAKICAgICBkZWYga2V5cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzLmtleXMoKQpAQCAtNzgyLDEwICs3NzYsMTAgQEAKICAgICByZW1vdmVBdHRyaWJ1dGVOb2RlTlMgPSByZW1vdmVBdHRyaWJ1dGVOb2RlCiAKICAgICBkZWYgaGFzQXR0cmlidXRlKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXR0cnMuaGFzX2tleShuYW1lKQorICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9hdHRycwogCiAgICAgZGVmIGhhc0F0dHJpYnV0ZU5TKHNlbGYsIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzTlMuaGFzX2tleSgobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKQorICAgICAgICByZXR1cm4gKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSBpbiBzZWxmLl9hdHRyc05TCiAKICAgICBkZWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgIHJldHVybiBfZ2V0X2VsZW1lbnRzX2J5X3RhZ05hbWVfaGVscGVyKHNlbGYsIG5hbWUsIE5vZGVMaXN0KCkpCkBAIC04OTcsNiArODkxLDEwIEBACiAgICAgICAgIHJhaXNlIHhtbC5kb20uTm90Rm91bmRFcnIoCiAgICAgICAgICAgICBzZWxmLm5vZGVOYW1lICsgIiBub2RlcyBkbyBub3QgaGF2ZSBjaGlsZHJlbiIpCiAKKyAgICBkZWYgbm9ybWFsaXplKHNlbGYpOgorICAgICAgICAjIEZvciBjaGlsZGxlc3Mgbm9kZXMsIG5vcm1hbGl6ZSgpIGhhcyBub3RoaW5nIHRvIGRvLgorICAgICAgICBwYXNzCisKICAgICBkZWYgcmVwbGFjZUNoaWxkKHNlbGYsIG5ld0NoaWxkLCBvbGRDaGlsZCk6CiAgICAgICAgIHJhaXNlIHhtbC5kb20uSGllcmFyY2h5UmVxdWVzdEVycigKICAgICAgICAgICAgIHNlbGYubm9kZU5hbWUgKyAiIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuIikKQEAgLTEzNDMsMTEgKzEzNDEsOSBAQAogY2xhc3MgRE9NSW1wbGVtZW50YXRpb24oRE9NSW1wbGVtZW50YXRpb25MUyk6CiAgICAgX2ZlYXR1cmVzID0gWygiY29yZSIsICIxLjAiKSwKICAgICAgICAgICAgICAgICAgKCJjb3JlIiwgIjIuMCIpLAotICAgICAgICAgICAgICAgICAoImNvcmUiLCAiMy4wIiksCiAgICAgICAgICAgICAgICAgICgiY29yZSIsIE5vbmUpLAogICAgICAgICAgICAgICAgICAoInhtbCIsICIxLjAiKSwKICAgICAgICAgICAgICAgICAgKCJ4bWwiLCAiMi4wIiksCi0gICAgICAgICAgICAgICAgICgieG1sIiwgIjMuMCIpLAogICAgICAgICAgICAgICAgICAoInhtbCIsIE5vbmUpLAogICAgICAgICAgICAgICAgICAoImxzLWxvYWQiLCAiMy4wIiksCiAgICAgICAgICAgICAgICAgICgibHMtbG9hZCIsIE5vbmUpLApkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20veG1sYnVpbGRlci5weSBiL0xpYi94bWwvZG9tL3htbGJ1aWxkZXIucHkKaW5kZXggYWMxZDQ0OC4uZGM3YzVkNCAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20veG1sYnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS94bWxidWlsZGVyLnB5CkBAIC05MSw3ICs5MSw3IEBACiAKICAgICBkZWYgY2FuU2V0RmVhdHVyZShzZWxmLCBuYW1lLCBzdGF0ZSk6CiAgICAgICAgIGtleSA9IChfbmFtZV94Zm9ybShuYW1lKSwgc3RhdGUgYW5kIDEgb3IgMCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NldHRpbmdzLmhhc19rZXkoa2V5KQorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX3NldHRpbmdzCiAKICAgICAjIFRoaXMgZGljdGlvbmFyeSBtYXBzIGZyb20gKGZlYXR1cmUsdmFsdWUpIHRvIGEgbGlzdCBvZgogICAgICMgKG9wdGlvbix2YWx1ZSkgcGFpcnMgdGhhdCBzaG91bGQgYmUgc2V0IG9uIHRoZSBPcHRpb25zIG9iamVjdC4KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCiAgICAgZGVmIF9ndWVzc19tZWRpYV9lbmNvZGluZyhzZWxmLCBzb3VyY2UpOgogICAgICAgICBpbmZvID0gc291cmNlLmJ5dGVTdHJlYW0uaW5mbygpCi0gICAgICAgIGlmIGluZm8uaGFzX2tleSgiQ29udGVudC1UeXBlIik6CisgICAgICAgIGlmICJDb250ZW50LVR5cGUiIGluIGluZm86CiAgICAgICAgICAgICBmb3IgcGFyYW0gaW4gaW5mby5nZXRwbGlzdCgpOgogICAgICAgICAgICAgICAgIGlmIHBhcmFtLnN0YXJ0c3dpdGgoImNoYXJzZXQ9Iik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbS5zcGxpdCgiPSIsIDEpWzFdLmxvd2VyKCkKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CmluZGV4IDk3NGNjMjEuLjg0ZmQ3NTQgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQpAQCAtMSw2ICsxLDYgQEAKICMKICMgRWxlbWVudFRyZWUKLSMgJElkOiBFbGVtZW50SW5jbHVkZS5weSAxODYyIDIwMDQtMDYtMTggMDc6MzE6MDJaIEZyZWRyaWsgJAorIyAkSWQ6IEVsZW1lbnRJbmNsdWRlLnB5IDMzNzUgMjAwOC0wMi0xMyAwODowNTowOFogZnJlZHJpayAkCiAjCiAjIGxpbWl0ZWQgeGluY2x1ZGUgc3VwcG9ydCBmb3IgZWxlbWVudCB0cmVlcwogIwpAQCAtMTYsNyArMTYsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwotIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBieSBGcmVkcmlrIEx1bmRoCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IGJ5IEZyZWRyaWsgTHVuZGgKICMKICMgQnkgb2J0YWluaW5nLCB1c2luZywgYW5kL29yIGNvcHlpbmcgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgaXRzCiAjIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgeW91IGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwKQEAgLTQyLDE0ICs0MiwxNCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogCiAjIwogIyBMaW1pdGVkIFhJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFbGVtZW50VHJlZSBwYWNrYWdlLgogIyMKIAogaW1wb3J0IGNvcHkKLWltcG9ydCBFbGVtZW50VHJlZQorZnJvbSAuIGltcG9ydCBFbGVtZW50VHJlZQogCiBYSU5DTFVERSA9ICJ7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZX0iCiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIGlmIGk6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBlbGVtW2ktMV0KLSAgICAgICAgICAgICAgICAgICAgbm9kZS50YWlsID0gKG5vZGUudGFpbCBvciAiIikgKyB0ZXh0CisgICAgICAgICAgICAgICAgICAgIG5vZGUudGFpbCA9IChub2RlLnRhaWwgb3IgIiIpICsgdGV4dCArIChlLnRhaWwgb3IgIiIpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZWxlbS50ZXh0ID0gKGVsZW0udGV4dCBvciAiIikgKyB0ZXh0ICsgKGUudGFpbCBvciAiIikKICAgICAgICAgICAgICAgICBkZWwgZWxlbVtpXQpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKaW5kZXggMDBkYmU5ZC4uNGE2MjZkNyAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CkBAIC0xLDYgKzEsNiBAQAogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRQYXRoLnB5IDE4NTggMjAwNC0wNi0xNyAyMTozMTo0MVogRnJlZHJpayAkCisjICRJZDogRWxlbWVudFBhdGgucHkgMzM3NSAyMDA4LTAyLTEzIDA4OjA1OjA4WiBmcmVkcmlrICQKICMKICMgbGltaXRlZCB4cGF0aCBzdXBwb3J0IGZvciBlbGVtZW50IHRyZWVzCiAjCkBAIC04LDggKzgsMTMgQEAKICMgMjAwMy0wNS0yMyBmbCAgIGNyZWF0ZWQKICMgMjAwMy0wNS0yOCBmbCAgIGFkZGVkIHN1cHBvcnQgZm9yIC8vIGV0YwogIyAyMDAzLTA4LTI3IGZsICAgZml4ZWQgcGFyc2luZyBvZiBwZXJpb2RzIGluIGVsZW1lbnQgbmFtZXMKKyMgMjAwNy0wOS0xMCBmbCAgIG5ldyBzZWxlY3Rpb24gZW5naW5lCisjIDIwMDctMDktMTIgZmwgICBmaXhlZCBwYXJlbnQgc2VsZWN0b3IKKyMgMjAwNy0wOS0xMyBmbCAgIGFkZGVkIGl0ZXJmaW5kOyBjaGFuZ2VkIGZpbmRhbGwgdG8gcmV0dXJuIGEgbGlzdAorIyAyMDA3LTExLTMwIGZsICAgYWRkZWQgbmFtZXNwYWNlcyBzdXBwb3J0CisjIDIwMDktMTAtMzAgZmwgICBhZGRlZCBjaGlsZCBlbGVtZW50IHZhbHVlIGZpbHRlcgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDkgYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQpAQCAtMTcsNyArMjIsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwotIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBieSBGcmVkcmlrIEx1bmRoCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGgKICMKICMgQnkgb2J0YWluaW5nLCB1c2luZywgYW5kL29yIGNvcHlpbmcgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgaXRzCiAjIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgeW91IGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwKQEAgLTQzLDcgKzQ4LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCi0jIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40L2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgorIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KIAogIyMKICMgSW1wbGVtZW50YXRpb24gbW9kdWxlIGZvciBYUGF0aCBzdXBwb3J0LiAgVGhlcmUncyB1c3VhbGx5IG5vIHJlYXNvbgpAQCAtNTMsMTQ2ICs1OCwyNDYgQEAKIAogaW1wb3J0IHJlCiAKLXhwYXRoX3Rva2VuaXplciA9IHJlLmNvbXBpbGUoCi0gICAgIig6OnxcLlwufFwoXCl8Wy8uKjpcW1xdXChcKUA9XSl8KCg/Olx7W159XStcfSk/W14vOlxbXF1cKFwpQD1cc10rKXxccysiCi0gICAgKS5maW5kYWxsCit4cGF0aF90b2tlbml6ZXJfcmUgPSByZS5jb21waWxlKAorICAgICIoIgorICAgICInW14nXSonfFwiW15cIl0qXCJ8IgorICAgICI6OnwiCisgICAgIi8vP3wiCisgICAgIlwuXC58IgorICAgICJcKFwpfCIKKyAgICAiWy8uKjpcW1xdXChcKUA9XSl8IgorICAgICIoKD86XHtbXn1dK1x9KT9bXi9cW1xdXChcKUA9XHNdKyl8IgorICAgICJccysiCisgICAgKQogCi1jbGFzcyB4cGF0aF9kZXNjZW5kYW50X29yX3NlbGY6Ci0gICAgcGFzcwotCi0jIwotIyBXcmFwcGVyIGZvciBhIGNvbXBpbGVkIFhQYXRoLgotCi1jbGFzcyBQYXRoOgotCi0gICAgIyMKLSAgICAjIENyZWF0ZSBhbiBQYXRoIGluc3RhbmNlIGZyb20gYW4gWFBhdGggZXhwcmVzc2lvbi4KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKLSAgICAgICAgdG9rZW5zID0geHBhdGhfdG9rZW5pemVyKHBhdGgpCi0gICAgICAgICMgdGhlIGN1cnJlbnQgdmVyc2lvbiBzdXBwb3J0cyAncGF0aC9wYXRoJy1zdHlsZSBleHByZXNzaW9ucyBvbmx5Ci0gICAgICAgIHNlbGYucGF0aCA9IFtdCi0gICAgICAgIHNlbGYudGFnID0gTm9uZQotICAgICAgICBpZiB0b2tlbnMgYW5kIHRva2Vuc1swXVswXSA9PSAiLyI6Ci0gICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiY2Fubm90IHVzZSBhYnNvbHV0ZSBwYXRoIG9uIGVsZW1lbnQiKQotICAgICAgICB3aGlsZSB0b2tlbnM6Ci0gICAgICAgICAgICBvcCwgdGFnID0gdG9rZW5zLnBvcCgwKQotICAgICAgICAgICAgaWYgdGFnIG9yIG9wID09ICIqIjoKLSAgICAgICAgICAgICAgICBzZWxmLnBhdGguYXBwZW5kKHRhZyBvciBvcCkKLSAgICAgICAgICAgIGVsaWYgb3AgPT0gIi4iOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsaWYgb3AgPT0gIi8iOgotICAgICAgICAgICAgICAgIHNlbGYucGF0aC5hcHBlbmQoeHBhdGhfZGVzY2VuZGFudF9vcl9zZWxmKCkpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIHBhdGggc3ludGF4ICglcykiICUgb3ApCi0gICAgICAgICAgICBpZiB0b2tlbnM6Ci0gICAgICAgICAgICAgICAgb3AsIHRhZyA9IHRva2Vucy5wb3AoMCkKLSAgICAgICAgICAgICAgICBpZiBvcCAhPSAiLyI6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHBhdGggc2VwYXJhdG9yICglcykiICUgKG9wIG9yIHRhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgaWYgc2VsZi5wYXRoIGFuZCBpc2luc3RhbmNlKHNlbGYucGF0aFstMV0sIHhwYXRoX2Rlc2NlbmRhbnRfb3Jfc2VsZik6Ci0gICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigicGF0aCBjYW5ub3QgZW5kIHdpdGggLy8iKQotICAgICAgICBpZiBsZW4oc2VsZi5wYXRoKSA9PSAxIGFuZCBpc2luc3RhbmNlKHNlbGYucGF0aFswXSwgdHlwZSgiIikpOgotICAgICAgICAgICAgc2VsZi50YWcgPSBzZWxmLnBhdGhbMF0KLQotICAgICMjCi0gICAgIyBGaW5kIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KLQotICAgIGRlZiBmaW5kKHNlbGYsIGVsZW1lbnQpOgotICAgICAgICB0YWcgPSBzZWxmLnRhZwotICAgICAgICBpZiB0YWcgaXMgTm9uZToKLSAgICAgICAgICAgIG5vZGVzZXQgPSBzZWxmLmZpbmRhbGwoZWxlbWVudCkKLSAgICAgICAgICAgIGlmIG5vdCBub2Rlc2V0OgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4gbm9kZXNldFswXQotICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgotICAgICAgICAgICAgaWYgZWxlbS50YWcgPT0gdGFnOgotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICAjIwotICAgICMgRmluZCB0ZXh0IGZvciBmaXJzdCBtYXRjaGluZyBvYmplY3QuCi0KLSAgICBkZWYgZmluZHRleHQoc2VsZiwgZWxlbWVudCwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgdGFnID0gc2VsZi50YWcKLSAgICAgICAgaWYgdGFnIGlzIE5vbmU6Ci0gICAgICAgICAgICBub2Rlc2V0ID0gc2VsZi5maW5kYWxsKGVsZW1lbnQpCi0gICAgICAgICAgICBpZiBub3Qgbm9kZXNldDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICAgICAgcmV0dXJuIG5vZGVzZXRbMF0udGV4dCBvciAiIgotICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgotICAgICAgICAgICAgaWYgZWxlbS50YWcgPT0gdGFnOgotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnRleHQgb3IgIiIKLSAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotICAgICMjCi0gICAgIyBGaW5kIGFsbCBtYXRjaGluZyBvYmplY3RzLgotCi0gICAgZGVmIGZpbmRhbGwoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIG5vZGVzZXQgPSBbZWxlbWVudF0KLSAgICAgICAgaW5kZXggPSAwCi0gICAgICAgIHdoaWxlIDE6CitkZWYgeHBhdGhfdG9rZW5pemVyKHBhdHRlcm4sIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgZm9yIHRva2VuIGluIHhwYXRoX3Rva2VuaXplcl9yZS5maW5kYWxsKHBhdHRlcm4pOgorICAgICAgICB0YWcgPSB0b2tlblsxXQorICAgICAgICBpZiB0YWcgYW5kIHRhZ1swXSAhPSAieyIgYW5kICI6IiBpbiB0YWc6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHNlbGYucGF0aFtpbmRleF0KLSAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzZXQKLSAgICAgICAgICAgIHNldCA9IFtdCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIHhwYXRoX2Rlc2NlbmRhbnRfb3Jfc2VsZik6CisgICAgICAgICAgICAgICAgcHJlZml4LCB1cmkgPSB0YWcuc3BsaXQoIjoiLCAxKQorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lc3BhY2VzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuWzBdLCAieyVzfSVzIiAlIChuYW1lc3BhY2VzW3ByZWZpeF0sIHVyaSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigicHJlZml4ICVyIG5vdCBmb3VuZCBpbiBwcmVmaXggbWFwIiAlIHByZWZpeCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIHRva2VuCisKK2RlZiBnZXRfcGFyZW50X21hcChjb250ZXh0KToKKyAgICBwYXJlbnRfbWFwID0gY29udGV4dC5wYXJlbnRfbWFwCisgICAgaWYgcGFyZW50X21hcCBpcyBOb25lOgorICAgICAgICBjb250ZXh0LnBhcmVudF9tYXAgPSBwYXJlbnRfbWFwID0ge30KKyAgICAgICAgZm9yIHAgaW4gY29udGV4dC5yb290Lml0ZXIoKToKKyAgICAgICAgICAgIGZvciBlIGluIHA6CisgICAgICAgICAgICAgICAgcGFyZW50X21hcFtlXSA9IHAKKyAgICByZXR1cm4gcGFyZW50X21hcAorCitkZWYgcHJlcGFyZV9jaGlsZChuZXh0LCB0b2tlbik6CisgICAgdGFnID0gdG9rZW5bMV0KKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgaWYgZS50YWcgPT0gdGFnOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgcmV0dXJuIHNlbGVjdAorCitkZWYgcHJlcGFyZV9zdGFyKG5leHQsIHRva2VuKToKKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgeWllbGQgZQorICAgIHJldHVybiBzZWxlY3QKKworZGVmIHByZXBhcmVfc2VsZihuZXh0LCB0b2tlbik6CisgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgcmV0dXJuIHNlbGVjdAorCitkZWYgcHJlcGFyZV9kZXNjZW5kYW50KG5leHQsIHRva2VuKToKKyAgICB0b2tlbiA9IG5leHQoKQorICAgIGlmIHRva2VuWzBdID09ICIqIjoKKyAgICAgICAgdGFnID0gIioiCisgICAgZWxpZiBub3QgdG9rZW5bMF06CisgICAgICAgIHRhZyA9IHRva2VuWzFdCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoImludmFsaWQgZGVzY2VuZGFudCIpCisgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICBmb3IgZSBpbiBlbGVtLml0ZXIodGFnKToKKyAgICAgICAgICAgICAgICBpZiBlIGlzIG5vdCBlbGVtOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgcmV0dXJuIHNlbGVjdAorCitkZWYgcHJlcGFyZV9wYXJlbnQobmV4dCwgdG9rZW4pOgorICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgIyBGSVhNRTogcmFpc2UgZXJyb3IgaWYgLi4gaXMgYXBwbGllZCBhdCB0b3BsZXZlbD8KKyAgICAgICAgcGFyZW50X21hcCA9IGdldF9wYXJlbnRfbWFwKGNvbnRleHQpCisgICAgICAgIHJlc3VsdF9tYXAgPSB7fQorICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICBpZiBlbGVtIGluIHBhcmVudF9tYXA6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X21hcFtlbGVtXQorICAgICAgICAgICAgICAgIGlmIHBhcmVudCBub3QgaW4gcmVzdWx0X21hcDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X21hcFtwYXJlbnRdID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBwYXJlbnQKKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX3ByZWRpY2F0ZShuZXh0LCB0b2tlbik6CisgICAgIyBGSVhNRTogcmVwbGFjZSB3aXRoIHJlYWwgcGFyc2VyISEhIHJlZnM6CisgICAgIyBodHRwOi8vZWZmYm90Lm9yZy96b25lL3NpbXBsZS1pdGVyYXRvci1wYXJzZXIuaHRtCisgICAgIyBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL3Rkb3AvdGRvcC5odG1sCisgICAgc2lnbmF0dXJlID0gW10KKyAgICBwcmVkaWNhdGUgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgIGlmIHRva2VuWzBdID09ICJdIjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHRva2VuWzBdIGFuZCB0b2tlblswXVs6MV0gaW4gIidcIiI6CisgICAgICAgICAgICB0b2tlbiA9ICInIiwgdG9rZW5bMF1bMTotMV0KKyAgICAgICAgc2lnbmF0dXJlLmFwcGVuZCh0b2tlblswXSBvciAiLSIpCisgICAgICAgIHByZWRpY2F0ZS5hcHBlbmQodG9rZW5bMV0pCisgICAgc2lnbmF0dXJlID0gIiIuam9pbihzaWduYXR1cmUpCisgICAgIyB1c2Ugc2lnbmF0dXJlIHRvIGRldGVybWluZSBwcmVkaWNhdGUgdHlwZQorICAgIGlmIHNpZ25hdHVyZSA9PSAiQC0iOgorICAgICAgICAjIFtAYXR0cmlidXRlXSBwcmVkaWNhdGUKKyAgICAgICAga2V5ID0gcHJlZGljYXRlWzFdCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBpZiBlbGVtLmdldChrZXkpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHJldHVybiBzZWxlY3QKKyAgICBpZiBzaWduYXR1cmUgPT0gIkAtPSciOgorICAgICAgICAjIFtAYXR0cmlidXRlPSd2YWx1ZSddCisgICAgICAgIGtleSA9IHByZWRpY2F0ZVsxXQorICAgICAgICB2YWx1ZSA9IHByZWRpY2F0ZVstMV0KKyAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgICAgICMgW3RhZ10KKyAgICAgICAgdGFnID0gcHJlZGljYXRlWzBdCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBpZiBlbGVtLmZpbmQodGFnKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICByZXR1cm4gc2VsZWN0CisgICAgaWYgc2lnbmF0dXJlID09ICItPSciIGFuZCBub3QgcmUubWF0Y2goIlxkKyQiLCBwcmVkaWNhdGVbMF0pOgorICAgICAgICAjIFt0YWc9J3ZhbHVlJ10KKyAgICAgICAgdGFnID0gcHJlZGljYXRlWzBdCisgICAgICAgIHZhbHVlID0gcHJlZGljYXRlWy0xXQorICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgZm9yIGUgaW4gZWxlbS5maW5kYWxsKHRhZyk6CisgICAgICAgICAgICAgICAgICAgIGlmICIiLmpvaW4oZS5pdGVydGV4dCgpKSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBzZWxlY3QKKyAgICBpZiBzaWduYXR1cmUgPT0gIi0iIG9yIHNpZ25hdHVyZSA9PSAiLSgpIiBvciBzaWduYXR1cmUgPT0gIi0oKS0iOgorICAgICAgICAjIFtpbmRleF0gb3IgW2xhc3QoKV0gb3IgW2xhc3QoKS1pbmRleF0KKyAgICAgICAgaWYgc2lnbmF0dXJlID09ICItIjoKKyAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVswXSkgLSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwcmVkaWNhdGVbMF0gIT0gImxhc3QiOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiIpCisgICAgICAgICAgICBpZiBzaWduYXR1cmUgPT0gIi0oKS0iOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGFnID0gc2VsZi5wYXRoW2luZGV4XQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHR5cGUoIiIpKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHRhZyA9IE5vbmUgIyBpbnZhbGlkIHBhdGgKLSAgICAgICAgICAgICAgICBmb3Igbm9kZSBpbiBub2Rlc2V0OgotICAgICAgICAgICAgICAgICAgICBuZXcgPSBsaXN0KG5vZGUuZ2V0aXRlcmF0b3IodGFnKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbmV3IGFuZCBuZXdbMF0gaXMgbm9kZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5leHRlbmQobmV3WzE6XSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldC5leHRlbmQobmV3KQorICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGludChwcmVkaWNhdGVbMl0pIC0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZXhwcmVzc2lvbiIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBub2RlIGluIG5vZGVzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBub2RlIGluIG5vZGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRoID09ICIqIiBvciBub2RlLnRhZyA9PSBwYXRoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hcHBlbmQobm9kZSkKLSAgICAgICAgICAgIGlmIG5vdCBzZXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtdCi0gICAgICAgICAgICBub2Rlc2V0ID0gc2V0CisgICAgICAgICAgICAgICAgaW5kZXggPSAtMQorICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgICAgICBwYXJlbnRfbWFwID0gZ2V0X3BhcmVudF9tYXAoY29udGV4dCkKKyAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudF9tYXBbZWxlbV0KKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogd2hhdCBpZiB0aGUgc2VsZWN0b3IgaXMgIioiID8KKyAgICAgICAgICAgICAgICAgICAgZWxlbXMgPSBsaXN0KHBhcmVudC5maW5kYWxsKGVsZW0udGFnKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxlbXNbaW5kZXhdIGlzIGVsZW06CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgICAgICAgICAgZXhjZXB0IChJbmRleEVycm9yLCBLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIHJhaXNlIFN5bnRheEVycm9yKCJpbnZhbGlkIHByZWRpY2F0ZSIpCisKK29wcyA9IHsKKyAgICAiIjogcHJlcGFyZV9jaGlsZCwKKyAgICAiKiI6IHByZXBhcmVfc3RhciwKKyAgICAiLiI6IHByZXBhcmVfc2VsZiwKKyAgICAiLi4iOiBwcmVwYXJlX3BhcmVudCwKKyAgICAiLy8iOiBwcmVwYXJlX2Rlc2NlbmRhbnQsCisgICAgIlsiOiBwcmVwYXJlX3ByZWRpY2F0ZSwKKyAgICB9CiAKIF9jYWNoZSA9IHt9CiAKLSMjCi0jIChJbnRlcm5hbCkgQ29tcGlsZSBwYXRoLgorY2xhc3MgX1NlbGVjdG9yQ29udGV4dDoKKyAgICBwYXJlbnRfbWFwID0gTm9uZQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290KToKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAogCi1kZWYgX2NvbXBpbGUocGF0aCk6Ci0gICAgcCA9IF9jYWNoZS5nZXQocGF0aCkKLSAgICBpZiBwIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gcAotICAgIHAgPSBQYXRoKHBhdGgpCi0gICAgaWYgbGVuKF9jYWNoZSkgPj0gMTAwOgotICAgICAgICBfY2FjaGUuY2xlYXIoKQotICAgIF9jYWNoZVtwYXRoXSA9IHAKLSAgICByZXR1cm4gcAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBHZW5lcmF0ZSBhbGwgbWF0Y2hpbmcgb2JqZWN0cy4KKworZGVmIGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgIyBjb21waWxlIHNlbGVjdG9yIHBhdHRlcm4KKyAgICBpZiBwYXRoWy0xOl0gPT0gIi8iOgorICAgICAgICBwYXRoID0gcGF0aCArICIqIiAjIGltcGxpY2l0IGFsbCAoRklYTUU6IGtlZXAgdGhpcz8pCisgICAgdHJ5OgorICAgICAgICBzZWxlY3RvciA9IF9jYWNoZVtwYXRoXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgaWYgbGVuKF9jYWNoZSkgPiAxMDA6CisgICAgICAgICAgICBfY2FjaGUuY2xlYXIoKQorICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CisgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiY2Fubm90IHVzZSBhYnNvbHV0ZSBwYXRoIG9uIGVsZW1lbnQiKQorICAgICAgICBuZXh0ID0gaXRlcih4cGF0aF90b2tlbml6ZXIocGF0aCwgbmFtZXNwYWNlcykpLm5leHQKKyAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgc2VsZWN0b3IgPSBbXQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLmFwcGVuZChvcHNbdG9rZW5bMF1dKG5leHQsIHRva2VuKSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJpbnZhbGlkIHBhdGgiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgICAgICAgICAgaWYgdG9rZW5bMF0gPT0gIi8iOgorICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG5leHQoKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgX2NhY2hlW3BhdGhdID0gc2VsZWN0b3IKKyAgICAjIGV4ZWN1dGUgc2VsZWN0b3IgcGF0dGVybgorICAgIHJlc3VsdCA9IFtlbGVtXQorICAgIGNvbnRleHQgPSBfU2VsZWN0b3JDb250ZXh0KGVsZW0pCisgICAgZm9yIHNlbGVjdCBpbiBzZWxlY3RvcjoKKyAgICAgICAgcmVzdWx0ID0gc2VsZWN0KGNvbnRleHQsIHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0CiAKICMjCiAjIEZpbmQgZmlyc3QgbWF0Y2hpbmcgb2JqZWN0LgogCi1kZWYgZmluZChlbGVtZW50LCBwYXRoKToKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0aCkuZmluZChlbGVtZW50KQotCi0jIwotIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KLQotZGVmIGZpbmR0ZXh0KGVsZW1lbnQsIHBhdGgsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgcmV0dXJuIF9jb21waWxlKHBhdGgpLmZpbmR0ZXh0KGVsZW1lbnQsIGRlZmF1bHQpCitkZWYgZmluZChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpLm5leHQoKQorICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICByZXR1cm4gTm9uZQogCiAjIwogIyBGaW5kIGFsbCBtYXRjaGluZyBvYmplY3RzLgogCi1kZWYgZmluZGFsbChlbGVtZW50LCBwYXRoKToKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0aCkuZmluZGFsbChlbGVtZW50KQorZGVmIGZpbmRhbGwoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICByZXR1cm4gbGlzdChpdGVyZmluZChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzKSkKKworIyMKKyMgRmluZCB0ZXh0IGZvciBmaXJzdCBtYXRjaGluZyBvYmplY3QuCisKK2RlZiBmaW5kdGV4dChlbGVtLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgdHJ5OgorICAgICAgICBlbGVtID0gaXRlcmZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcykubmV4dCgpCisgICAgICAgIHJldHVybiBlbGVtLnRleHQgb3IgIiIKKyAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CmluZGV4IDdkYmM3MmUuLmQ4OWZkM2IgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQpAQCAtMSw0MCArMSwyNCBAQAogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDIzMjYgMjAwNS0wMy0xNyAwNzo0NToyMVogZnJlZHJpayAkCisjICRJZDogRWxlbWVudFRyZWUucHkgMzQ0MCAyMDA4LTA3LTE4IDE0OjQ1OjAxWiBmcmVkcmlrICQKICMKLSMgbGlnaHQtd2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24gMS41LjIgYW5kIGxhdGVyLgorIyBsaWdodC13ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgogIwotIyBoaXN0b3J5OgotIyAyMDAxLTEwLTIwIGZsICAgY3JlYXRlZCAoZnJvbSB2YXJpb3VzIHNvdXJjZXMpCi0jIDIwMDEtMTEtMDEgZmwgICByZXR1cm4gcm9vdCBmcm9tIHBhcnNlIG1ldGhvZAotIyAyMDAyLTAyLTE2IGZsICAgc29ydCBhdHRyaWJ1dGVzIGluIGxleGljYWwgb3JkZXIKLSMgMjAwMi0wNC0wNiBmbCAgIFRyZWVCdWlsZGVyIHJlZmFjdG9yaW5nLCBhZGRlZCBQeXRob25Eb2MgbWFya3VwCi0jIDIwMDItMDUtMDEgZmwgICBmaW5pc2hlZCBUcmVlQnVpbGRlciByZWZhY3RvcmluZwotIyAyMDAyLTA3LTE0IGZsICAgYWRkZWQgYmFzaWMgbmFtZXNwYWNlIHN1cHBvcnQgdG8gRWxlbWVudFRyZWUud3JpdGUKLSMgMjAwMi0wNy0yNSBmbCAgIGFkZGVkIFFOYW1lIGF0dHJpYnV0ZSBzdXBwb3J0Ci0jIDIwMDItMTAtMjAgZmwgICBmaXhlZCBlbmNvZGluZyBpbiB3cml0ZQotIyAyMDAyLTExLTI0IGZsICAgY2hhbmdlZCBkZWZhdWx0IGVuY29kaW5nIHRvIGFzY2lpOyBmaXhlZCBhdHRyaWJ1dGUgZW5jb2RpbmcKLSMgMjAwMi0xMS0yNyBmbCAgIGFjY2VwdCBmaWxlIG9iamVjdHMgb3IgZmlsZSBuYW1lcyBmb3IgcGFyc2Uvd3JpdGUKLSMgMjAwMi0xMi0wNCBmbCAgIG1vdmVkIFhNTFRyZWVCdWlsZGVyIGJhY2sgdG8gdGhpcyBtb2R1bGUKLSMgMjAwMy0wMS0xMSBmbCAgIGZpeGVkIGVudGl0eSBlbmNvZGluZyBnbGl0Y2ggZm9yIHVzLWFzY2lpCi0jIDIwMDMtMDItMTMgZmwgICBhZGRlZCBYTUwgbGl0ZXJhbCBmYWN0b3J5Ci0jIDIwMDMtMDItMjEgZmwgICBhZGRlZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24vUEkgZmFjdG9yeQotIyAyMDAzLTA1LTExIGZsICAgYWRkZWQgdG9zdHJpbmcvZnJvbXN0cmluZyBoZWxwZXJzCi0jIDIwMDMtMDUtMjYgZmwgICBhZGRlZCBFbGVtZW50UGF0aCBzdXBwb3J0Ci0jIDIwMDMtMDctMDUgZmwgICBhZGRlZCBtYWtlZWxlbWVudCBmYWN0b3J5IG1ldGhvZAotIyAyMDAzLTA3LTI4IGZsICAgYWRkZWQgbW9yZSB3ZWxsLWtub3duIG5hbWVzcGFjZSBwcmVmaXhlcwotIyAyMDAzLTA4LTE1IGZsICAgZml4ZWQgdHlwbyBpbiBFbGVtZW50VHJlZS5maW5kdGV4dCAoVGhvbWFzIERhcnRzY2gpCi0jIDIwMDMtMDktMDQgZmwgICBmYWxsIGJhY2sgb24gZW11bGF0b3IgaWYgRWxlbWVudFBhdGggaXMgbm90IGluc3RhbGxlZAotIyAyMDAzLTEwLTMxIGZsICAgbWFya3VwIHVwZGF0ZXMKLSMgMjAwMy0xMS0xNSBmbCAgIGZpeGVkIG5lc3RlZCBuYW1lc3BhY2UgYnVnCi0jIDIwMDQtMDMtMjggZmwgICBhZGRlZCBYTUxJRCBoZWxwZXIKLSMgMjAwNC0wNi0wMiBmbCAgIGFkZGVkIGRlZmF1bHQgc3VwcG9ydCB0byBmaW5kdGV4dAotIyAyMDA0LTA2LTA4IGZsICAgZml4ZWQgZW5jb2Rpbmcgb2Ygbm9uLWFzY2lpIGVsZW1lbnQvYXR0cmlidXRlIG5hbWVzCi0jIDIwMDQtMDgtMjMgZmwgICB0YWtlIGFkdmFudGFnZSBvZiBwb3N0LTIuMSBleHBhdCBmZWF0dXJlcwotIyAyMDA1LTAyLTAxIGZsICAgYWRkZWQgaXRlcnBhcnNlIGltcGxlbWVudGF0aW9uCi0jIDIwMDUtMDMtMDIgZmwgICBmaXhlZCBpdGVycGFyc2Ugc3VwcG9ydCBmb3IgcHJlLTIuMiB2ZXJzaW9ucworIyBoaXN0b3J5IChzaW5jZSAxLjIuNik6CisjIDIwMDUtMTEtMTIgZmwgICBhZGRlZCB0b3N0cmluZ2xpc3QvZnJvbXN0cmluZ2xpc3QgaGVscGVycworIyAyMDA2LTA3LTA1IGZsICAgbWVyZ2VkIGluIHNlbGVjdGVkIGNoYW5nZXMgZnJvbSB0aGUgMS4zIHNhbmRib3gKKyMgMjAwNi0wNy0wNSBmbCAgIHJlbW92ZWQgc3VwcG9ydCBmb3IgMi4xIGFuZCBlYXJsaWVyCisjIDIwMDctMDYtMjEgZmwgICBhZGRlZCBkZXByZWNhdGlvbi9mdXR1cmUgd2FybmluZ3MKKyMgMjAwNy0wOC0yNSBmbCAgIGFkZGVkIGRvY3R5cGUgaG9vaywgYWRkZWQgcGFyc2VyIHZlcnNpb24gYXR0cmlidXRlIGV0YworIyAyMDA3LTA4LTI2IGZsICAgYWRkZWQgbmV3IHNlcmlhbGl6ZXIgY29kZSAoYmV0dGVyIG5hbWVzcGFjZSBoYW5kbGluZywgZXRjKQorIyAyMDA3LTA4LTI3IGZsICAgd2FybiBmb3IgYnJva2VuIC90YWcgc2VhcmNoZXMgb24gdHJlZSBsZXZlbAorIyAyMDA3LTA5LTAyIGZsICAgYWRkZWQgaHRtbC90ZXh0IG1ldGhvZHMgdG8gc2VyaWFsaXplciAoZXhwZXJpbWVudGFsKQorIyAyMDA3LTA5LTA1IGZsICAgYWRkZWQgbWV0aG9kIGFyZ3VtZW50IHRvIHRvc3RyaW5nL3Rvc3RyaW5nbGlzdAorIyAyMDA3LTA5LTA2IGZsICAgaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcKKyMgMjAwNy0wOS0xMyBmbCAgIGFkZGVkIGl0ZXJ0ZXh0LCBpdGVyZmluZDsgYXNzb3J0ZWQgY2xlYW51cHMKKyMgMjAwNy0xMi0xNSBmbCAgIGFkZGVkIEMxNE4gaG9va3MsIGNvcHkgbWV0aG9kIChleHBlcmltZW50YWwpCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IGJ5IEZyZWRyaWsgTHVuZGguICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCkBAIC00Miw3ICsyNiw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA1IGJ5IEZyZWRyaWsgTHVuZGgKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaAogIwogIyBCeSBvYnRhaW5pbmcsIHVzaW5nLCBhbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZC9vciBpdHMKICMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLApAQCAtNjgsMjUgKzUyLDI4IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAKIF9fYWxsX18gPSBbCiAgICAgIyBwdWJsaWMgc3ltYm9scwogICAgICJDb21tZW50IiwKICAgICAiZHVtcCIsCiAgICAgIkVsZW1lbnQiLCAiRWxlbWVudFRyZWUiLAotICAgICJmcm9tc3RyaW5nIiwKKyAgICAiZnJvbXN0cmluZyIsICJmcm9tc3RyaW5nbGlzdCIsCiAgICAgImlzZWxlbWVudCIsICJpdGVycGFyc2UiLAotICAgICJwYXJzZSIsCisgICAgInBhcnNlIiwgIlBhcnNlRXJyb3IiLAogICAgICJQSSIsICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLAogICAgICJRTmFtZSIsCiAgICAgIlN1YkVsZW1lbnQiLAotICAgICJ0b3N0cmluZyIsCisgICAgInRvc3RyaW5nIiwgInRvc3RyaW5nbGlzdCIsCiAgICAgIlRyZWVCdWlsZGVyIiwKLSAgICAiVkVSU0lPTiIsICJYTUwiLAorICAgICJWRVJTSU9OIiwKKyAgICAiWE1MIiwKICAgICAiWE1MUGFyc2VyIiwgIlhNTFRyZWVCdWlsZGVyIiwKICAgICBdCiAKK1ZFUlNJT04gPSAiMS4zLjAiCisKICMjCiAjIFRoZSA8Yj5FbGVtZW50PC9iPiB0eXBlIGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCwgZGVzaWduZWQgdG8KICMgc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuIFRoZSB0eXBlIGNhbiBiZQpAQCAtMTAyLDYxICs4OSw4NiBAQAogIyA8bGk+YSBudW1iZXIgb2YgPGk+Y2hpbGQgZWxlbWVudHM8L2k+LCBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2U8L2xpPgogIyA8L3VsPgogIwotIyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSB7QGxpbmsgI0VsZW1lbnR9IG9yIHtAbGluawotIyAjU3ViRWxlbWVudH0gZmFjdG9yeSBmdW5jdGlvbnMuCisjIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIHtAbGluayAjRWxlbWVudH0gY29uc3RydWN0b3IKKyMgb3IgdGhlIHtAbGluayAjU3ViRWxlbWVudH0gZmFjdG9yeSBmdW5jdGlvbi4KICMgPHA+CiAjIFRoZSB7QGxpbmsgI0VsZW1lbnRUcmVlfSBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGFuIGVsZW1lbnQKICMgc3RydWN0dXJlLCBhbmQgY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCiAjIwogCi1pbXBvcnQgc3RyaW5nLCBzeXMsIHJlCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncwogCi1jbGFzcyBfU2ltcGxlRWxlbWVudFBhdGg6CisKK2NsYXNzIF9TaW1wbGVFbGVtZW50UGF0aChvYmplY3QpOgogICAgICMgZW11bGF0ZSBwcmUtMS4yIGZpbmQvZmluZHRleHQvZmluZGFsbCBiZWhhdmlvdXIKLSAgICBkZWYgZmluZChzZWxmLCBlbGVtZW50LCB0YWcpOgorICAgIGRlZiBmaW5kKHNlbGYsIGVsZW1lbnQsIHRhZywgbmFtZXNwYWNlcz1Ob25lKToKICAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKICAgICAgICAgICAgIGlmIGVsZW0udGFnID09IHRhZzoKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbQogICAgICAgICByZXR1cm4gTm9uZQotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBlbGVtZW50LCB0YWcsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6Ci0gICAgICAgICAgICBpZiBlbGVtLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udGV4dCBvciAiIgotICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgIGRlZiBmaW5kYWxsKHNlbGYsIGVsZW1lbnQsIHRhZyk6CisgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIGVsZW1lbnQsIHRhZywgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICBlbGVtID0gc2VsZi5maW5kKGVsZW1lbnQsIHRhZykKKyAgICAgICAgaWYgZWxlbSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGVsZW0udGV4dCBvciAiIgorICAgIGRlZiBpdGVyZmluZChzZWxmLCBlbGVtZW50LCB0YWcsIG5hbWVzcGFjZXM9Tm9uZSk6CiAgICAgICAgIGlmIHRhZ1s6M10gPT0gIi4vLyI6Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRpdGVyYXRvcih0YWdbMzpdKQotICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudC5pdGVyKHRhZ1szOl0pOgorICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKICAgICAgICAgICAgIGlmIGVsZW0udGFnID09IHRhZzoKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVsZW0pCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgZGVmIGZpbmRhbGwoc2VsZiwgZWxlbWVudCwgdGFnLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXJmaW5kKGVsZW1lbnQsIHRhZywgbmFtZXNwYWNlcykpCiAKIHRyeToKLSAgICBpbXBvcnQgRWxlbWVudFBhdGgKKyAgICBmcm9tIC4gaW1wb3J0IEVsZW1lbnRQYXRoCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBGSVhNRTogaXNzdWUgd2FybmluZyBpbiB0aGlzIGNhc2U/CiAgICAgRWxlbWVudFBhdGggPSBfU2ltcGxlRWxlbWVudFBhdGgoKQogCi0jIFRPRE86IGFkZCBzdXBwb3J0IGZvciBjdXN0b20gbmFtZXNwYWNlIHJlc29sdmVycy9kZWZhdWx0IG5hbWVzcGFjZXMKLSMgVE9ETzogYWRkIGltcHJvdmVkIHN1cHBvcnQgZm9yIGluY3JlbWVudGFsIHBhcnNpbmcKKyMjCisjIFBhcnNlciBlcnJvci4gIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA8Yj5TeW50YXhFcnJvcjwvYj4uCisjIDxwPgorIyBJbiBhZGRpdGlvbiB0byB0aGUgZXhjZXB0aW9uIHZhbHVlLCBhbiBleGNlcHRpb24gaW5zdGFuY2UgY29udGFpbnMgYQorIyBzcGVjaWZpYyBleGNlcHRpb24gY29kZSBpbiB0aGUgPGI+Y29kZTwvYj4gYXR0cmlidXRlLCBhbmQgdGhlIGxpbmUgYW5kCisjIGNvbHVtbiBvZiB0aGUgZXJyb3IgaW4gdGhlIDxiPnBvc2l0aW9uPC9iPiBhdHRyaWJ1dGUuCiAKLVZFUlNJT04gPSAiMS4yLjYiCitjbGFzcyBQYXJzZUVycm9yKFN5bnRheEVycm9yKToKKyAgICBwYXNzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIyMKLSMgSW50ZXJuYWwgZWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsCi0jIGFuZCBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KLSMgPHA+Ci0jIFlvdSBzaG91bGQgbm90IGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBkaXJlY3RseS4gIFVzZSB0aGUKLSMgYXBwcm9wcmlhdGUgZmFjdG9yeSBmdW5jdGlvbnMgaW5zdGVhZCwgc3VjaCBhcyB7QGxpbmsgI0VsZW1lbnR9Ci0jIGFuZCB7QGxpbmsgI1N1YkVsZW1lbnR9LgorIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KICMKKyMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCisjIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCisjIEBkZWZyZXR1cm4gZmxhZworCitkZWYgaXNlbGVtZW50KGVsZW1lbnQpOgorICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7IG1pZ2h0IGJlIGEgYmV0dGVyIGlkZWEgdG8gbG9vaworICAgICMgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCisgICAgcmV0dXJuIGlzaW5zdGFuY2UoZWxlbWVudCwgRWxlbWVudCkgb3IgaGFzYXR0cihlbGVtZW50LCAidGFnIikKKworIyMKKyMgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZAorIyBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KKyMgPHA+CisjIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCisjIGVpdGhlciBBU0NJSSBzdHJpbmdzIChvcmRpbmFyeSBQeXRob24gc3RyaW5ncyBjb250YWluaW5nIG9ubHkgNy1iaXQKKyMgQVNDSUkgY2hhcmFjdGVycykgb3IgVW5pY29kZSBzdHJpbmdzLgorIworIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCisjIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCisjIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCiAjIEBzZWUgRWxlbWVudAogIyBAc2VlIFN1YkVsZW1lbnQKICMgQHNlZSBDb21tZW50CiAjIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKLWNsYXNzIF9FbGVtZW50SW50ZXJmYWNlOgorY2xhc3MgRWxlbWVudChvYmplY3QpOgogICAgICMgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAogCiAgICAgIyMKQEAgLTE2NiwzNCArMTc4LDQxIEBACiAKICAgICAjIwogICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gIFdoZXJlIHBvc3NpYmxlLCB1c2UKLSAgICAjIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2UuZ2V0fSwKLSAgICAjIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2Uuc2V0fSwKLSAgICAjIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2Uua2V5c30sIGFuZAotICAgICMge0BsaW5rICNfRWxlbWVudEludGVyZmFjZS5pdGVtc30gdG8gYWNjZXNzCisgICAgIyB7QGxpbmsgI0VsZW1lbnQuZ2V0fSwKKyAgICAjIHtAbGluayAjRWxlbWVudC5zZXR9LAorICAgICMge0BsaW5rICNFbGVtZW50LmtleXN9LCBhbmQKKyAgICAjIHtAbGluayAjRWxlbWVudC5pdGVtc30gdG8gYWNjZXNzCiAgICAgIyBlbGVtZW50IGF0dHJpYnV0ZXMuCiAKICAgICBhdHRyaWIgPSBOb25lCiAKICAgICAjIwogICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gIFRoaXMgaXMgZWl0aGVyIGEKLSAgICAjIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZSwgaWYgdGhlcmUgd2FzIG5vIHRleHQuCisgICAgIyBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMKKyAgICAjIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24KKyAgICAjIHRoZSBwYXJzZXIuCiAKICAgICB0ZXh0ID0gTm9uZQogCiAgICAgIyMKICAgICAjIChBdHRyaWJ1dGUpIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUKICAgICAjIG5leHQgc2libGluZyBlbGVtZW50J3Mgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IKLSAgICAjIHRoZSB2YWx1ZSBOb25lLCBpZiB0aGVyZSB3YXMgbm8gdGV4dC4KKyAgICAjIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZQorICAgICMgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCiAKICAgICB0YWlsID0gTm9uZSAjIHRleHQgYWZ0ZXIgZW5kIHRhZywgaWYgYW55CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgICMgY29uc3RydWN0b3IKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGF0dHJpYj17fSwgKipleHRyYSk6CisgICAgICAgIGF0dHJpYiA9IGF0dHJpYi5jb3B5KCkKKyAgICAgICAgYXR0cmliLnVwZGF0ZShleHRyYSkKICAgICAgICAgc2VsZi50YWcgPSB0YWcKICAgICAgICAgc2VsZi5hdHRyaWIgPSBhdHRyaWIKICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0ICV4PiIgJSAoc2VsZi50YWcsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0IDB4JXg+IiAlIChyZXByKHNlbGYudGFnKSwgaWQoc2VsZikpCiAKICAgICAjIwogICAgICMgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4KQEAgLTIwMywxOCArMjIyLDQxIEBACiAgICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCiAKICAgICBkZWYgbWFrZWVsZW1lbnQoc2VsZiwgdGFnLCBhdHRyaWIpOgotICAgICAgICByZXR1cm4gRWxlbWVudCh0YWcsIGF0dHJpYikKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHRhZywgYXR0cmliKQogCiAgICAgIyMKLSAgICAjIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4KKyAgICAjIChFeHBlcmltZW50YWwpIENvcGllcyB0aGUgY3VycmVudCBlbGVtZW50LiAgVGhpcyBjcmVhdGVzIGEKKyAgICAjIHNoYWxsb3cgY29weTsgc3ViZWxlbWVudHMgd2lsbCBiZSBzaGFyZWQgd2l0aCB0aGUgb3JpZ2luYWwgdHJlZS4KKyAgICAjCisgICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgZWxlbSA9IHNlbGYubWFrZWVsZW1lbnQoc2VsZi50YWcsIHNlbGYuYXR0cmliKQorICAgICAgICBlbGVtLnRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgZWxlbS50YWlsID0gc2VsZi50YWlsCisgICAgICAgIGVsZW1bOl0gPSBzZWxmCisgICAgICAgIHJldHVybiBlbGVtCisKKyAgICAjIworICAgICMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLiAgTm90ZSB0aGF0IHRoaXMgb25seSBjb3VudHMKKyAgICAjIGZ1bGwgZWxlbWVudHM7IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGNvbnRlbnQgaW4gYW4gZWxlbWVudCwgeW91CisgICAgIyBoYXZlIHRvIGNoZWNrIGJvdGggdGhlIGxlbmd0aCBhbmQgdGhlIDxiPnRleHQ8L2I+IGF0dHJpYnV0ZS4KICAgICAjCiAgICAgIyBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikKIAorICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJUaGUgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2Qgd2lsbCBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgIlVzZSBzcGVjaWZpYyAnbGVuKGVsZW0pJyBvciAnZWxlbSBpcyBub3QgTm9uZScgdGVzdCBpbnN0ZWFkLiIsCisgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikgIT0gMCAjIGVtdWxhdGUgb2xkIGJlaGF2aW91ciwgZm9yIG5vdworCiAgICAgIyMKLSAgICAjIFJldHVybnMgdGhlIGdpdmVuIHN1YmVsZW1lbnQuCisgICAgIyBSZXR1cm5zIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KICAgICAjCiAgICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJldHVybi4KICAgICAjIEByZXR1cm4gVGhlIGdpdmVuIHN1YmVsZW1lbnQuCkBAIC0yMjQsMTkgKzI2NiwyMiBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKICAgICAjIwotICAgICMgUmVwbGFjZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQuCisgICAgIyBSZXBsYWNlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCiAgICAgIwogICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXBsYWNlLgogICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIG5ldyBlbGVtZW50IHZhbHVlLgogICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotICAgICMgQGV4Y2VwdGlvbiBBc3NlcnRpb25FcnJvciBJZiBlbGVtZW50IGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgIyBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CisgICAgICAgICMgICAgIGZvciBlbHQgaW4gZWxlbWVudDoKKyAgICAgICAgIyAgICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWx0KQorICAgICAgICAjIGVsc2U6CisgICAgICAgICMgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW5baW5kZXhdID0gZWxlbWVudAogCiAgICAgIyMKLSAgICAjIERlbGV0ZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQuCisgICAgIyBEZWxldGVzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KICAgICAjCiAgICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIGRlbGV0ZS4KICAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KQEAgLTI0NSwxMTggKzI5MCwxMjEgQEAKICAgICAgICAgZGVsIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCiAgICAgIyMKLSAgICAjIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgc3ViZWxlbWVudHMgaW4gdGhlIGdpdmVuIHJhbmdlLgotICAgICMKLSAgICAjIEBwYXJhbSBzdGFydCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0byByZXR1cm4uCi0gICAgIyBAcGFyYW0gc3RvcCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0aGF0IHNob3VsZG4ndCBiZSByZXR1cm5lZC4KLSAgICAjIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyBzdWJlbGVtZW50cy4KLQotICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgc3RhcnQsIHN0b3ApOgotICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW5bc3RhcnQ6c3RvcF0KLQotICAgICMjCi0gICAgIyBSZXBsYWNlcyBhIG51bWJlciBvZiBzdWJlbGVtZW50cyB3aXRoIGVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdG8gcmVwbGFjZS4KLSAgICAjIEBwYXJhbSBzdG9wIFRoZSBmaXJzdCBzdWJlbGVtZW50IHRoYXQgc2hvdWxkbid0IGJlIHJlcGxhY2VkLgotICAgICMgQHBhcmFtIGVsZW1lbnRzIEEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgotICAgICMgQGV4Y2VwdGlvbiBBc3NlcnRpb25FcnJvciBJZiBhIHNlcXVlbmNlIG1lbWJlciBpcyBub3QgYSB2YWxpZCBvYmplY3QuCi0KLSAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wLCBlbGVtZW50cyk6Ci0gICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgotICAgICAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbltzdGFydDpzdG9wXSA9IGxpc3QoZWxlbWVudHMpCi0KLSAgICAjIwotICAgICMgRGVsZXRlcyBhIG51bWJlciBvZiBzdWJlbGVtZW50cy4KLSAgICAjCi0gICAgIyBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdG8gZGVsZXRlLgotICAgICMgQHBhcmFtIHN0b3AgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdG8gbGVhdmUgaW4gdGhlcmUuCi0KLSAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKLSAgICAgICAgZGVsIHNlbGYuX2NoaWxkcmVuW3N0YXJ0OnN0b3BdCi0KLSAgICAjIwotICAgICMgQWRkcyBhIHN1YmVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuCisgICAgIyBBZGRzIGEgc3ViZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4gIEluIGRvY3VtZW50IG9yZGVyLAorICAgICMgdGhlIG5ldyBlbGVtZW50IHdpbGwgYXBwZWFyIGFmdGVyIHRoZSBsYXN0IGV4aXN0aW5nIHN1YmVsZW1lbnQgKG9yCisgICAgIyBkaXJlY3RseSBhZnRlciB0aGUgdGV4dCwgaWYgaXQncyB0aGUgZmlyc3Qgc3ViZWxlbWVudCksIGJ1dCBiZWZvcmUKKyAgICAjIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCiAgICAgIwogICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gYWRkLgotICAgICMgQGV4Y2VwdGlvbiBBc3NlcnRpb25FcnJvciBJZiBhIHNlcXVlbmNlIG1lbWJlciBpcyBub3QgYSB2YWxpZCBvYmplY3QuCiAKICAgICBkZWYgYXBwZW5kKHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoZWxlbWVudCkKIAogICAgICMjCisgICAgIyBBcHBlbmRzIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KKyAgICAjCisgICAgIyBAcGFyYW0gZWxlbWVudHMgQSBzZXF1ZW5jZSBvYmplY3Qgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCisgICAgIyBAc2luY2UgMS4zCisKKyAgICBkZWYgZXh0ZW5kKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgIyBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKKyAgICAgICAgIyAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICBzZWxmLl9jaGlsZHJlbi5leHRlbmQoZWxlbWVudHMpCisKKyAgICAjIwogICAgICMgSW5zZXJ0cyBhIHN1YmVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMgZWxlbWVudC4KICAgICAjCiAgICAgIyBAcGFyYW0gaW5kZXggV2hlcmUgdG8gaW5zZXJ0IHRoZSBuZXcgc3ViZWxlbWVudC4KLSAgICAjIEBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IgSWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCiAgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgZWxlbWVudCkKIAogICAgICMjCiAgICAgIyBSZW1vdmVzIGEgbWF0Y2hpbmcgc3ViZWxlbWVudC4gIFVubGlrZSB0aGUgPGI+ZmluZDwvYj4gbWV0aG9kcywKICAgICAjIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uIGlkZW50aXR5LCBub3Qgb24gdGFnCi0gICAgIyB2YWx1ZSBvciBjb250ZW50cy4KKyAgICAjIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5IG90aGVyIG1lYW5zLCB0aGUKKyAgICAjIGVhc2llc3Qgd2F5IGlzIG9mdGVuIHRvIHVzZSBhIGxpc3QgY29tcHJlaGVuc2lvbiB0byBzZWxlY3Qgd2hhdAorICAgICMgZWxlbWVudHMgdG8ga2VlcCwgYW5kIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZSB0aGUgcGFyZW50CisgICAgIyBlbGVtZW50LgogICAgICMKICAgICAjIEBwYXJhbSBlbGVtZW50IFdoYXQgZWxlbWVudCB0byByZW1vdmUuCiAgICAgIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KLSAgICAjIEBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IgSWYgdGhlIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCiAgICAgZGVmIHJlbW92ZShzZWxmLCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4ucmVtb3ZlKGVsZW1lbnQpCiAKICAgICAjIwotICAgICMgUmV0dXJucyBhbGwgc3ViZWxlbWVudHMuICBUaGUgZWxlbWVudHMgYXJlIHJldHVybmVkIGluIGRvY3VtZW50Ci0gICAgIyBvcmRlci4KKyAgICAjIChEZXByZWNhdGVkKSBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQKKyAgICAjIGluIGRvY3VtZW50IG9yZGVyLgogICAgICMKICAgICAjIEByZXR1cm4gQSBsaXN0IG9mIHN1YmVsZW1lbnRzLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCiAKICAgICBkZWYgZ2V0Y2hpbGRyZW4oc2VsZik6CisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICJVc2UgJ2xpc3QoZWxlbSknIG9yIGl0ZXJhdGlvbiBvdmVyIGVsZW0gaW5zdGVhZC4iLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuCiAKICAgICAjIwogICAgICMgRmluZHMgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgogICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZChzZWxmLCBwYXRoKQorICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgRmluZHMgdGV4dCBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgogICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KKyAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgogICAgICMgQHJldHVybiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKICAgICAjICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50Ci0gICAgIyAgICAgaGFzIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgorICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgogICAgICMgICAgIGVtcHR5IHN0cmluZy4KICAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCiAKLSAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQpCisgICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgogICAgICMKICAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCisgICAgIyBAcmV0dXJuIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKICAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCiAKLSAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmRhbGwoc2VsZiwgcGF0aCkKKyAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQorCisgICAgIyMKKyAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKyAgICAjCisgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KKyAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCisgICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KKyAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKKworICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAogICAgICMjCiAgICAgIyBSZXNldHMgYW4gZWxlbWVudC4gIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycwotICAgICMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKyAgICAjIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgPGI+dGV4dDwvYj4gYW5kIDxiPnRhaWw8L2I+IGF0dHJpYnV0ZXMKKyAgICAjIHRvIE5vbmUuCiAKICAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXR0cmliLmNsZWFyKCkKQEAgLTM2NCw3ICs0MTIsOCBAQAogICAgICAgICBzZWxmLnRleHQgPSBzZWxmLnRhaWwgPSBOb25lCiAKICAgICAjIwotICAgICMgR2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4KKyAgICAjIEdldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5nZXQ8L2I+LCBidXQKKyAgICAjIHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgogICAgICMKICAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IuCiAgICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCkBAIC0zNzYsNyArNDI1LDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmdldChrZXksIGRlZmF1bHQpCiAKICAgICAjIwotICAgICMgU2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4KKyAgICAjIFNldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYltrZXldID0gdmFsdWU8L2I+LAorICAgICMgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgogICAgICMKICAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gc2V0LgogICAgICMgQHBhcmFtIHZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCkBAIC0zODcsNiArNDM3LDcgQEAKICAgICAjIwogICAgICMgR2V0cyBhIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLiAgVGhlIG5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbgogICAgICMgYXJiaXRyYXJ5IG9yZGVyIChqdXN0IGxpa2UgZm9yIGFuIG9yZGluYXJ5IFB5dGhvbiBkaWN0aW9uYXJ5KS4KKyAgICAjIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmtleXMoKTwvYj4uCiAgICAgIwogICAgICMgQHJldHVybiBBIGxpc3Qgb2YgZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMuCiAgICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2Ygc3RyaW5ncwpAQCAtMzk2LDcgKzQ0Nyw3IEBACiAKICAgICAjIwogICAgICMgR2V0cyBlbGVtZW50IGF0dHJpYnV0ZXMsIGFzIGEgc2VxdWVuY2UuICBUaGUgYXR0cmlidXRlcyBhcmUKLSAgICAjIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4KKyAgICAjIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLml0ZW1zKCk8L2I+LgogICAgICMKICAgICAjIEByZXR1cm4gQSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzIGZvciBhbGwgYXR0cmlidXRlcy4KICAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiAoc3RyaW5nLCBzdHJpbmcpIHR1cGxlcwpAQCAtNDA5LDQ1ICs0NjAsNTUgQEAKICAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgZWxlbWVudHMKICAgICAjIHdpdGggYSBtYXRjaGluZyB0YWcuCiAgICAgIyA8cD4KLSAgICAjIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCB0aGUgcmVzdWx0Ci0gICAgIyBpcyB1bmRlZmluZWQuCisgICAgIyBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKKyAgICAjIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQorICAgICMgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCiAgICAgIwogICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb3IgaXRlcmF0b3IKKyAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgorICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgogCi0gICAgZGVmIGdldGl0ZXJhdG9yKHNlbGYsIHRhZz1Ob25lKToKLSAgICAgICAgbm9kZXMgPSBbXQorICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKICAgICAgICAgaWYgdGFnID09ICIqIjoKICAgICAgICAgICAgIHRhZyA9IE5vbmUKICAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3Igc2VsZi50YWcgPT0gdGFnOgotICAgICAgICAgICAgbm9kZXMuYXBwZW5kKHNlbGYpCi0gICAgICAgIGZvciBub2RlIGluIHNlbGYuX2NoaWxkcmVuOgotICAgICAgICAgICAgbm9kZXMuZXh0ZW5kKG5vZGUuZ2V0aXRlcmF0b3IodGFnKSkKLSAgICAgICAgcmV0dXJuIG5vZGVzCisgICAgICAgICAgICB5aWVsZCBzZWxmCisgICAgICAgIGZvciBlIGluIHNlbGYuX2NoaWxkcmVuOgorICAgICAgICAgICAgZm9yIGUgaW4gZS5pdGVyKHRhZyk6CisgICAgICAgICAgICAgICAgeWllbGQgZQorCisgICAgIyBjb21wYXRpYmlsaXR5CisgICAgZGVmIGdldGl0ZXJhdG9yKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIyBDaGFuZ2UgZm9yIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIDEuNAorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlICdlbGVtLml0ZXIoKScgb3IgJ2xpc3QoZWxlbS5pdGVyKCkpJyBpbnN0ZWFkLiIsCisgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKKworICAgICMjCisgICAgIyBDcmVhdGVzIGEgdGV4dCBpdGVyYXRvci4gIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIHRoaXMgZWxlbWVudAorICAgICMgYW5kIGFsbCBzdWJlbGVtZW50cywgaW4gZG9jdW1lbnQgb3JkZXIsIGFuZCByZXR1cm5zIGFsbCBpbm5lcgorICAgICMgdGV4dC4KKyAgICAjCisgICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIGlubmVyIHRleHQuCisgICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCisKKyAgICBkZWYgaXRlcnRleHQoc2VsZik6CisgICAgICAgIHRhZyA9IHNlbGYudGFnCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgYmFzZXN0cmluZykgYW5kIHRhZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLnRleHQ6CisgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKKyAgICAgICAgZm9yIGUgaW4gc2VsZjoKKyAgICAgICAgICAgIGZvciBzIGluIGUuaXRlcnRleHQoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBzCisgICAgICAgICAgICBpZiBlLnRhaWw6CisgICAgICAgICAgICAgICAgeWllbGQgZS50YWlsCiAKICMgY29tcGF0aWJpbGl0eQotX0VsZW1lbnQgPSBfRWxlbWVudEludGVyZmFjZQotCi0jIwotIyBFbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKLSMgc3RhbmRhcmQgRWxlbWVudCBpbnRlcmZhY2UuICBUaGUgZXhhY3QgY2xhc3Mgb3IgdHlwZSBvZiB0aGF0IG9iamVjdAotIyBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQsIGJ1dCBpdCB3aWxsIGFsd2F5cyBiZSBjb21wYXRpYmxlIHdpdGgKLSMgdGhlIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2V9IGNsYXNzIGluIHRoaXMgbW9kdWxlLgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIDgtYml0IEFTQ0lJIHN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0KLWRlZiBFbGVtZW50KHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKLSAgICBhdHRyaWIgPSBhdHRyaWIuY29weSgpCi0gICAgYXR0cmliLnVwZGF0ZShleHRyYSkKLSAgICByZXR1cm4gX0VsZW1lbnRJbnRlcmZhY2UodGFnLCBhdHRyaWIpCitfRWxlbWVudCA9IF9FbGVtZW50SW50ZXJmYWNlID0gRWxlbWVudAogCiAjIwogIyBTdWJlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kCkBAIC00NzIsNyArNTMzLDggQEAKIAogIyMKICMgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKLSMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudC4KKyMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudCBieSB0aGUgc3RhbmRhcmQKKyMgc2VyaWFsaXplci4KICMgPHA+CiAjIFRoZSBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGFuIDgtYml0IEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUKICMgc3RyaW5nLgpAQCAtNDg4LDcgKzU1MCw4IEBACiAKICMjCiAjIFBJIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50Ci0jIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorIyB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBieSB0aGUgc3RhbmRhcmQKKyMgc2VyaWFsaXplci4KICMKICMgQHBhcmFtIHRhcmdldCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCiAjIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBhbnkuCkBAIC01MTQsNyArNTc3LDcgQEAKICMgICAgIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgogIyBAcmV0dXJuIEFuIG9wYXF1ZSBvYmplY3QsIHJlcHJlc2VudGluZyB0aGUgUU5hbWUuCiAKLWNsYXNzIFFOYW1lOgorY2xhc3MgUU5hbWUob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dF9vcl91cmksIHRhZz1Ob25lKToKICAgICAgICAgaWYgdGFnOgogICAgICAgICAgICAgdGV4dF9vcl91cmkgPSAieyVzfSVzIiAlICh0ZXh0X29yX3VyaSwgdGFnKQpAQCAtNTI4LDE5ICs1OTEsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi50ZXh0LCBvdGhlci50ZXh0KQogICAgICAgICByZXR1cm4gY21wKHNlbGYudGV4dCwgb3RoZXIpCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogIyMKICMgRWxlbWVudFRyZWUgd3JhcHBlciBjbGFzcy4gIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgZWxlbWVudAogIyBoaWVyYXJjaHksIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQogIyBzdGFuZGFyZCBYTUwuCiAjCiAjIEBwYXJhbSBlbGVtZW50IE9wdGlvbmFsIHJvb3QgZWxlbWVudC4KLSMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgbmFtZS4gIElmIGdpdmVuLCB0aGUKKyMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lLiAgSWYgZ2l2ZW4sIHRoZQogIyAgICAgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGlzIFhNTCBmaWxlLgogCi1jbGFzcyBFbGVtZW50VHJlZToKK2NsYXNzIEVsZW1lbnRUcmVlKG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudD1Ob25lLCBmaWxlPU5vbmUpOgotICAgICAgICBhc3NlcnQgZWxlbWVudCBpcyBOb25lIG9yIGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBlbGVtZW50IGlzIE5vbmUgb3IgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50ICMgZmlyc3Qgbm9kZQogICAgICAgICBpZiBmaWxlOgogICAgICAgICAgICAgc2VsZi5wYXJzZShmaWxlKQpAQCAtNTYyLDI1ICs2MjcsMjcgQEAKICAgICAjIEBwYXJhbSBlbGVtZW50IEFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKICAgICBkZWYgX3NldHJvb3Qoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50CiAKICAgICAjIwogICAgICMgTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIGRvY3VtZW50IGludG8gdGhpcyBlbGVtZW50IHRyZWUuCiAgICAgIwotICAgICMgQHBhcmFtIHNvdXJjZSBBIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdC4KLSAgICAjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSAgICAjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MVHJlZUJ1aWxkZXJ9IHBhcnNlciBpcyB1c2VkLgorICAgICMgQHBhcmFtIHNvdXJjZSBBIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdC4gIElmIGEgZmlsZSBvYmplY3QgaXMKKyAgICAjICAgICBnaXZlbiwgaXQgb25seSBoYXMgdG8gaW1wbGVtZW50IGEgPGI+cmVhZChuKTwvYj4gbWV0aG9kLgorICAgICMgQGtleXBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorICAgICMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogICAgICMgQHJldHVybiBUaGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50LgogICAgICMgQGRlZnJldHVybiBFbGVtZW50CisgICAgIyBAZXhjZXB0aW9uIFBhcnNlRXJyb3IgSWYgdGhlIHBhcnNlciBmYWlscyB0byBwYXJzZSB0aGUgZG9jdW1lbnQuCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICAgICAgcGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIoKQorICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDMyNzY4KQorICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQogICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCkBAIC01OTUsMjMgKzY2Miw0MCBAQAogICAgICMgQHJldHVybiBBbiBpdGVyYXRvci4KICAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKIAorICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyKHRhZykKKworICAgICMgY29tcGF0aWJpbGl0eQogICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9yb290LmdldGl0ZXJhdG9yKHRhZykKKyAgICAgICAgIyBDaGFuZ2UgZm9yIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIDEuNAorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlICd0cmVlLml0ZXIoKScgb3IgJ2xpc3QodHJlZS5pdGVyKCkpJyBpbnN0ZWFkLiIsCisgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAogICAgICMjCiAgICAgIyBGaW5kcyB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCB3aXRoIGdpdmVuIHRhZy4KICAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCkuCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgogICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoKQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgIgorICAgICAgICAgICAgICAgICJmaXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICJiZWhhdmlvdXIsIGNoYW5nZSBpdCB0byAlciIgJSBwYXRoLAorICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIEZpbmRzIHRoZSBlbGVtZW50IHRleHQgZm9yIHRoZSBmaXJzdCB0b3BsZXZlbCBlbGVtZW50IHdpdGggZ2l2ZW4KQEAgLTYxOSwxMTQgKzcwMyw0NDUgQEAKICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IHRvcGxldmVsIGVsZW1lbnQgdG8gbG9vayBmb3IuCiAgICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQogICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBoYXMgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCisgICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCiAgICAgIyAgICAgZW1wdHkgc3RyaW5nLgogICAgICMgQGRlZnJldHVybiBzdHJpbmcKIAotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZHRleHQocGF0aCwgZGVmYXVsdCkKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAiZml4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAiYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJXIiICUgcGF0aCwKKyAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmR0ZXh0KHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgRmluZHMgYWxsIHRvcGxldmVsIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIHRhZy4KICAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCkuCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKICAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCiAKLSAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKKyAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCkKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAiZml4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAiYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJXIiICUgcGF0aCwKKyAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCwgbmFtZXNwYWNlcykKKworICAgICMjCisgICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisgICAgIyBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKS4KKyAgICAjCisgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KKyAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCisgICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KKyAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKKworICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKKyAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSAiCisgICAgICAgICAgICAgICAgImZpeGVkIGluIGEgZnV0dXJlIHZlcnNpb24uICBJZiB5b3UgcmVseSBvbiB0aGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgImJlaGF2aW91ciwgY2hhbmdlIGl0IHRvICVyIiAlIHBhdGgsCisgICAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICAgICAgICAgKQorICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLgogICAgICMKKyAgICAjIEBkZWYgd3JpdGUoZmlsZSwgKipvcHRpb25zKQogICAgICMgQHBhcmFtIGZpbGUgQSBmaWxlIG5hbWUsIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLgotICAgICMgQHBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCisgICAgIyBAcGFyYW0gKipvcHRpb25zIE9wdGlvbnMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgorICAgICMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCisgICAgIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgorICAgICMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCisgICAgIyBAa2V5cGFyYW0geG1sX2RlY2xhcmF0aW9uIENvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQKKyAgICAjICAgICBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywKKyAgICAjICAgICBOb25lIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOC4gIE5vbmUgaXMgZGVmYXVsdC4KIAotICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlLCBlbmNvZGluZz0idXMtYXNjaWkiKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoZmlsZSwgIndyaXRlIik6Ci0gICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlLCAid2IiKQotICAgICAgICBpZiBub3QgZW5jb2Rpbmc6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICJ1cy1hc2NpaSIKLSAgICAgICAgZWxpZiBlbmNvZGluZyAhPSAidXRmLTgiIGFuZCBlbmNvZGluZyAhPSAidXMtYXNjaWkiOgotICAgICAgICAgICAgZmlsZS53cml0ZSgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz5cbiIgJSBlbmNvZGluZykKLSAgICAgICAgc2VsZi5fd3JpdGUoZmlsZSwgc2VsZi5fcm9vdCwgZW5jb2RpbmcsIHt9KQotCi0gICAgZGVmIF93cml0ZShzZWxmLCBmaWxlLCBub2RlLCBlbmNvZGluZywgbmFtZXNwYWNlcyk6Ci0gICAgICAgICMgd3JpdGUgWE1MIHRvIGZpbGUKLSAgICAgICAgdGFnID0gbm9kZS50YWcKLSAgICAgICAgaWYgdGFnIGlzIENvbW1lbnQ6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCI8IS0tICVzIC0tPiIgJSBfZXNjYXBlX2NkYXRhKG5vZGUudGV4dCwgZW5jb2RpbmcpKQotICAgICAgICBlbGlmIHRhZyBpcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Ci0gICAgICAgICAgICBmaWxlLndyaXRlKCI8PyVzPz4iICUgX2VzY2FwZV9jZGF0YShub2RlLnRleHQsIGVuY29kaW5nKSkKKyAgICBkZWYgd3JpdGUoc2VsZiwgZmlsZV9vcl9maWxlbmFtZSwKKyAgICAgICAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICAgICAgICBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgICB4bWxfZGVjbGFyYXRpb249Tm9uZSwKKyAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwKKyAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgICAgIGlmIG5vdCBtZXRob2Q6CisgICAgICAgICAgICBtZXRob2QgPSAieG1sIgorICAgICAgICBlbGlmIG1ldGhvZCBub3QgaW4gX3NlcmlhbGl6ZToKKyAgICAgICAgICAgICMgRklYTUU6IHJhaXNlIGFuIEltcG9ydEVycm9yIGZvciBjMTRuIGlmIEVsZW1lbnRDMTROIGlzIG1pc3Npbmc/CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1ldGhvZCAlciIgJSBtZXRob2QpCisgICAgICAgIGlmIGhhc2F0dHIoZmlsZV9vcl9maWxlbmFtZSwgIndyaXRlIik6CisgICAgICAgICAgICBmaWxlID0gZmlsZV9vcl9maWxlbmFtZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaXRlbXMgPSBub2RlLml0ZW1zKCkKLSAgICAgICAgICAgIHhtbG5zX2l0ZW1zID0gW10gIyBuZXcgbmFtZXNwYWNlcyBpbiB0aGlzIHNjb3BlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWcsIFFOYW1lKSBvciB0YWdbOjFdID09ICJ7IjoKLSAgICAgICAgICAgICAgICAgICAgdGFnLCB4bWxucyA9IGZpeHRhZyh0YWcsIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgICAgIGlmIHhtbG5zOiB4bWxuc19pdGVtcy5hcHBlbmQoeG1sbnMpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRhZykKLSAgICAgICAgICAgIGZpbGUud3JpdGUoIjwiICsgX2VuY29kZSh0YWcsIGVuY29kaW5nKSkKLSAgICAgICAgICAgIGlmIGl0ZW1zIG9yIHhtbG5zX2l0ZW1zOgotICAgICAgICAgICAgICAgIGl0ZW1zLnNvcnQoKSAjIGxleGljYWwgb3JkZXIKLSAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBpdGVtczoKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBRTmFtZSkgb3Iga1s6MV0gPT0gInsiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssIHhtbG5zID0gZml4dGFnKGssIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeG1sbnM6IHhtbG5zX2l0ZW1zLmFwcGVuZCh4bWxucykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKGspCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgUU5hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIHhtbG5zID0gZml4dGFnKHYsIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeG1sbnM6IHhtbG5zX2l0ZW1zLmFwcGVuZCh4bWxucykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHYpCi0gICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiAlcz1cIiVzXCIiICUgKF9lbmNvZGUoaywgZW5jb2RpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXNjYXBlX2F0dHJpYih2LCBlbmNvZGluZykpKQotICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHhtbG5zX2l0ZW1zOgotICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCIgJXM9XCIlc1wiIiAlIChfZW5jb2RlKGssIGVuY29kaW5nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VzY2FwZV9hdHRyaWIodiwgZW5jb2RpbmcpKSkKLSAgICAgICAgICAgIGlmIG5vZGUudGV4dCBvciBsZW4obm9kZSk6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiPiIpCi0gICAgICAgICAgICAgICAgaWYgbm9kZS50ZXh0OgotICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lc2NhcGVfY2RhdGEobm9kZS50ZXh0LCBlbmNvZGluZykpCi0gICAgICAgICAgICAgICAgZm9yIG4gaW4gbm9kZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGUoZmlsZSwgbiwgZW5jb2RpbmcsIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiPC8iICsgX2VuY29kZSh0YWcsIGVuY29kaW5nKSArICI+IikKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGVfb3JfZmlsZW5hbWUsICJ3YiIpCisgICAgICAgIHdyaXRlID0gZmlsZS53cml0ZQorICAgICAgICBpZiBub3QgZW5jb2Rpbmc6CisgICAgICAgICAgICBpZiBtZXRob2QgPT0gImMxNG4iOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gInV0Zi04IgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCIgLz4iKQotICAgICAgICAgICAgZm9yIGssIHYgaW4geG1sbnNfaXRlbXM6Ci0gICAgICAgICAgICAgICAgZGVsIG5hbWVzcGFjZXNbdl0KLSAgICAgICAgaWYgbm9kZS50YWlsOgotICAgICAgICAgICAgZmlsZS53cml0ZShfZXNjYXBlX2NkYXRhKG5vZGUudGFpbCwgZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gInVzLWFzY2lpIgorICAgICAgICBlbGlmIHhtbF9kZWNsYXJhdGlvbiBvciAoeG1sX2RlY2xhcmF0aW9uIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyBub3QgaW4gKCJ1dGYtOCIsICJ1cy1hc2NpaSIpKToKKyAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAieG1sIjoKKyAgICAgICAgICAgICAgICB3cml0ZSgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz5cbiIgJSBlbmNvZGluZykKKyAgICAgICAgaWYgbWV0aG9kID09ICJ0ZXh0IjoKKyAgICAgICAgICAgIF9zZXJpYWxpemVfdGV4dCh3cml0ZSwgc2VsZi5fcm9vdCwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBxbmFtZXMsIG5hbWVzcGFjZXMgPSBfbmFtZXNwYWNlcygKKyAgICAgICAgICAgICAgICBzZWxmLl9yb290LCBlbmNvZGluZywgZGVmYXVsdF9uYW1lc3BhY2UKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZXJpYWxpemUgPSBfc2VyaWFsaXplW21ldGhvZF0KKyAgICAgICAgICAgIHNlcmlhbGl6ZSh3cml0ZSwgc2VsZi5fcm9vdCwgZW5jb2RpbmcsIHFuYW1lcywgbmFtZXNwYWNlcykKKyAgICAgICAgaWYgZmlsZV9vcl9maWxlbmFtZSBpcyBub3QgZmlsZToKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgZGVmIHdyaXRlX2MxNG4oc2VsZiwgZmlsZSk6CisgICAgICAgICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LiAgdXNlIG91dHB1dCBtZXRob2QgaW5zdGVhZAorICAgICAgICByZXR1cm4gc2VsZi53cml0ZShmaWxlLCBtZXRob2Q9ImMxNG4iKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGhlbHBlcnMKKyMgc2VyaWFsaXphdGlvbiBzdXBwb3J0CisKK2RlZiBfbmFtZXNwYWNlcyhlbGVtLCBlbmNvZGluZywgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSk6CisgICAgIyBpZGVudGlmeSBuYW1lc3BhY2VzIHVzZWQgaW4gdGhpcyB0cmVlCisKKyAgICAjIG1hcHMgcW5hbWVzIHRvICplbmNvZGVkKiBwcmVmaXg6bG9jYWwgbmFtZXMKKyAgICBxbmFtZXMgPSB7Tm9uZTogTm9uZX0KKworICAgICMgbWFwcyB1cmk6cyB0byBwcmVmaXhlcworICAgIG5hbWVzcGFjZXMgPSB7fQorICAgIGlmIGRlZmF1bHRfbmFtZXNwYWNlOgorICAgICAgICBuYW1lc3BhY2VzW2RlZmF1bHRfbmFtZXNwYWNlXSA9ICIiCisKKyAgICBkZWYgZW5jb2RlKHRleHQpOgorICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcpCisKKyAgICBkZWYgYWRkX3FuYW1lKHFuYW1lKToKKyAgICAgICAgIyBjYWxjdWxhdGUgc2VyaWFsaXplZCBxbmFtZSByZXByZXNlbnRhdGlvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBxbmFtZVs6MV0gPT0gInsiOgorICAgICAgICAgICAgICAgIHVyaSwgdGFnID0gcW5hbWVbMTpdLnJzcGxpdCgifSIsIDEpCisgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZXNwYWNlcy5nZXQodXJpKQorICAgICAgICAgICAgICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBfbmFtZXNwYWNlX21hcC5nZXQodXJpKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICJucyVkIiAlIGxlbihuYW1lc3BhY2VzKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXggIT0gInhtbCI6CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzW3VyaV0gPSBwcmVmaXgKKyAgICAgICAgICAgICAgICBpZiBwcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIHFuYW1lc1txbmFtZV0gPSBlbmNvZGUoIiVzOiVzIiAlIChwcmVmaXgsIHRhZykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcW5hbWVzW3FuYW1lXSA9IGVuY29kZSh0YWcpICMgZGVmYXVsdCBlbGVtZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfbmFtZXNwYWNlOgorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBjYW4gdGhpcyBiZSBoYW5kbGVkIGluIFhNTCAxLjA/CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHVzZSBub24tcXVhbGlmaWVkIG5hbWVzIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHRfbmFtZXNwYWNlIG9wdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBxbmFtZXNbcW5hbWVdID0gZW5jb2RlKHFuYW1lKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IocW5hbWUpCisKKyAgICAjIHBvcHVsYXRlIHFuYW1lIGFuZCBuYW1lc3BhY2VzIHRhYmxlCisgICAgdHJ5OgorICAgICAgICBpdGVyYXRlID0gZWxlbS5pdGVyCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBpdGVyYXRlID0gZWxlbS5nZXRpdGVyYXRvciAjIGNFVCBjb21wYXRpYmlsaXR5CisgICAgZm9yIGVsZW0gaW4gaXRlcmF0ZSgpOgorICAgICAgICB0YWcgPSBlbGVtLnRhZworICAgICAgICBpZiBpc2luc3RhbmNlKHRhZywgUU5hbWUpOgorICAgICAgICAgICAgaWYgdGFnLnRleHQgbm90IGluIHFuYW1lczoKKyAgICAgICAgICAgICAgICBhZGRfcW5hbWUodGFnLnRleHQpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgdGFnIG5vdCBpbiBxbmFtZXM6CisgICAgICAgICAgICAgICAgYWRkX3FuYW1lKHRhZykKKyAgICAgICAgZWxpZiB0YWcgaXMgbm90IE5vbmUgYW5kIHRhZyBpcyBub3QgQ29tbWVudCBhbmQgdGFnIGlzIG5vdCBQSToKKyAgICAgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRhZykKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZWxlbS5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIFFOYW1lKToKKyAgICAgICAgICAgICAgICBrZXkgPSBrZXkudGV4dAorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBxbmFtZXM6CisgICAgICAgICAgICAgICAgYWRkX3FuYW1lKGtleSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIFFOYW1lKSBhbmQgdmFsdWUudGV4dCBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgICAgIGFkZF9xbmFtZSh2YWx1ZS50ZXh0KQorICAgICAgICB0ZXh0ID0gZWxlbS50ZXh0CisgICAgICAgIGlmIGlzaW5zdGFuY2UodGV4dCwgUU5hbWUpIGFuZCB0ZXh0LnRleHQgbm90IGluIHFuYW1lczoKKyAgICAgICAgICAgIGFkZF9xbmFtZSh0ZXh0LnRleHQpCisgICAgcmV0dXJuIHFuYW1lcywgbmFtZXNwYWNlcworCitkZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIGVuY29kaW5nLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorICAgIHRhZyA9IGVsZW0udGFnCisgICAgdGV4dCA9IGVsZW0udGV4dAorICAgIGlmIHRhZyBpcyBDb21tZW50OgorICAgICAgICB3cml0ZSgiPCEtLSVzLS0+IiAlIF9lbmNvZGUodGV4dCwgZW5jb2RpbmcpKQorICAgIGVsaWYgdGFnIGlzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKKyAgICAgICAgd3JpdGUoIjw/JXM/PiIgJSBfZW5jb2RlKHRleHQsIGVuY29kaW5nKSkKKyAgICBlbHNlOgorICAgICAgICB0YWcgPSBxbmFtZXNbdGFnXQorICAgICAgICBpZiB0YWcgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YSh0ZXh0LCBlbmNvZGluZykpCisgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBlbmNvZGluZywgcW5hbWVzLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JpdGUoIjwiICsgdGFnKQorICAgICAgICAgICAgaXRlbXMgPSBlbGVtLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIGl0ZW1zIG9yIG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgaWYgbmFtZXNwYWNlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHYsIGsgaW4gc29ydGVkKG5hbWVzcGFjZXMuaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgeDogeFsxXSk6ICAjIHNvcnQgb24gcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAiOiIgKyBrCisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgiIHhtbG5zJXM9XCIlc1wiIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrLmVuY29kZShlbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VzY2FwZV9hdHRyaWIodiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoaXRlbXMpOiAgIyBsZXhpY2FsIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgUU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsudGV4dAorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIFFOYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBxbmFtZXNbdi50ZXh0XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliKHYsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICB3cml0ZSgiICVzPVwiJXNcIiIgJSAocW5hbWVzW2tdLCB2KSkKKyAgICAgICAgICAgIGlmIHRleHQgb3IgbGVuKGVsZW0pOgorICAgICAgICAgICAgICAgIHdyaXRlKCI+IikKKyAgICAgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQsIGVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgZW5jb2RpbmcsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgICAgICB3cml0ZSgiPC8iICsgdGFnICsgIj4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3cml0ZSgiIC8+IikKKyAgICBpZiBlbGVtLnRhaWw6CisgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEoZWxlbS50YWlsLCBlbmNvZGluZykpCisKK0hUTUxfRU1QVFkgPSAoImFyZWEiLCAiYmFzZSIsICJiYXNlZm9udCIsICJiciIsICJjb2wiLCAiZnJhbWUiLCAiaHIiLAorICAgICAgICAgICAgICAiaW1nIiwgImlucHV0IiwgImlzaW5kZXgiLCAibGluayIsICJtZXRhIiAicGFyYW0iKQorCit0cnk6CisgICAgSFRNTF9FTVBUWSA9IHNldChIVE1MX0VNUFRZKQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCisKK2RlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIGVuY29kaW5nLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorICAgIHRhZyA9IGVsZW0udGFnCisgICAgdGV4dCA9IGVsZW0udGV4dAorICAgIGlmIHRhZyBpcyBDb21tZW50OgorICAgICAgICB3cml0ZSgiPCEtLSVzLS0+IiAlIF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpKQorICAgIGVsaWYgdGFnIGlzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKKyAgICAgICAgd3JpdGUoIjw/JXM/PiIgJSBfZXNjYXBlX2NkYXRhKHRleHQsIGVuY29kaW5nKSkKKyAgICBlbHNlOgorICAgICAgICB0YWcgPSBxbmFtZXNbdGFnXQorICAgICAgICBpZiB0YWcgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YSh0ZXh0LCBlbmNvZGluZykpCisgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZSwgZW5jb2RpbmcsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdyaXRlKCI8IiArIHRhZykKKyAgICAgICAgICAgIGl0ZW1zID0gZWxlbS5pdGVtcygpCisgICAgICAgICAgICBpZiBpdGVtcyBvciBuYW1lc3BhY2VzOgorICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgICAgIGZvciB2LCBrIGluIHNvcnRlZChuYW1lc3BhY2VzLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIHg6IHhbMV0pOiAgIyBzb3J0IG9uIHByZWZpeAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gIjoiICsgaworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoIiB4bWxucyVzPVwiJXNcIiIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgay5lbmNvZGUoZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lc2NhcGVfYXR0cmliKHYsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc29ydGVkKGl0ZW1zKTogICMgbGV4aWNhbCBvcmRlcgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGssIFFOYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBrLnRleHQKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBRTmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gcW5hbWVzW3YudGV4dF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBfZXNjYXBlX2F0dHJpYl9odG1sKHYsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBoYW5kbGUgYm9vbGVhbiBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgJXM9XCIlc1wiIiAlIChxbmFtZXNba10sIHYpKQorICAgICAgICAgICAgd3JpdGUoIj4iKQorICAgICAgICAgICAgdGFnID0gdGFnLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgaWYgdGFnID09ICJzY3JpcHQiIG9yIHRhZyA9PSAic3R5bGUiOgorICAgICAgICAgICAgICAgICAgICB3cml0ZShfZW5jb2RlKHRleHQsIGVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW06CisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlLCBlbmNvZGluZywgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgaWYgdGFnIG5vdCBpbiBIVE1MX0VNUFRZOgorICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCisgICAgaWYgZWxlbS50YWlsOgorICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKGVsZW0udGFpbCwgZW5jb2RpbmcpKQorCitkZWYgX3NlcmlhbGl6ZV90ZXh0KHdyaXRlLCBlbGVtLCBlbmNvZGluZyk6CisgICAgZm9yIHBhcnQgaW4gZWxlbS5pdGVydGV4dCgpOgorICAgICAgICB3cml0ZShwYXJ0LmVuY29kZShlbmNvZGluZykpCisgICAgaWYgZWxlbS50YWlsOgorICAgICAgICB3cml0ZShlbGVtLnRhaWwuZW5jb2RlKGVuY29kaW5nKSkKKworX3NlcmlhbGl6ZSA9IHsKKyAgICAieG1sIjogX3NlcmlhbGl6ZV94bWwsCisgICAgImh0bWwiOiBfc2VyaWFsaXplX2h0bWwsCisgICAgInRleHQiOiBfc2VyaWFsaXplX3RleHQsCisjIHRoaXMgb3B0aW9uYWwgbWV0aG9kIGlzIGltcG9ydGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1vZHVsZQorIyAgICJjMTRuIjogX3NlcmlhbGl6ZV9jMTRuLAorfQogCiAjIwotIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KKyMgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkKKyMgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkKKyMgd2lsbCBiZSByZW1vdmVkLgogIwotIyBAcGFyYW0gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQHJldHVybiBBIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KLSMgQGRlZnJldHVybiBmbGFnCisjIEBwYXJhbSBwcmVmaXggTmFtZXNwYWNlIHByZWZpeC4KKyMgQHBhcmFtIHVyaSBOYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZQorIyAgICAgd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQgYWxsIHBvc3NpYmxlLgorIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgdGhlIHByZWZpeCBpcyByZXNlcnZlZCwgb3IgaXMgb3RoZXJ3aXNlCisjICAgICBpbnZhbGlkLgogCi1kZWYgaXNlbGVtZW50KGVsZW1lbnQpOgotICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7IG1pZ2h0IGJlIGEgYmV0dGVyIGlkZWEgdG8gbG9vawotICAgICMgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCi0gICAgcmV0dXJuIGlzaW5zdGFuY2UoZWxlbWVudCwgX0VsZW1lbnRJbnRlcmZhY2UpIG9yIGhhc2F0dHIoZWxlbWVudCwgInRhZyIpCitkZWYgcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKToKKyAgICBpZiByZS5tYXRjaCgibnNcZCskIiwgcHJlZml4KToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJlZml4IGZvcm1hdCByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlIikKKyAgICBmb3IgaywgdiBpbiBfbmFtZXNwYWNlX21hcC5pdGVtcygpOgorICAgICAgICBpZiBrID09IHVyaSBvciB2ID09IHByZWZpeDoKKyAgICAgICAgICAgIGRlbCBfbmFtZXNwYWNlX21hcFtrXQorICAgIF9uYW1lc3BhY2VfbWFwW3VyaV0gPSBwcmVmaXgKKworX25hbWVzcGFjZV9tYXAgPSB7CisgICAgIyAid2VsbC1rbm93biIgbmFtZXNwYWNlIHByZWZpeGVzCisgICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI6ICJ4bWwiLAorICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjogImh0bWwiLAorICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIjogInJkZiIsCisgICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjogIndzZGwiLAorICAgICMgeG1sIHNjaGVtYQorICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI6ICJ4cyIsCisgICAgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIjogInhzaSIsCisgICAgIyBkdWJsaW4gY29yZQorICAgICJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI6ICJkYyIsCit9CisKK2RlZiBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KToKKyAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplICVyICh0eXBlICVzKSIgJSAodGV4dCwgdHlwZSh0ZXh0KS5fX25hbWVfXykKKyAgICAgICAgKQorCitkZWYgX2VuY29kZSh0ZXh0LCBlbmNvZGluZyk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcsICJ4bWxjaGFycmVmcmVwbGFjZSIpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKKworZGVmIF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpOgorICAgICMgZXNjYXBlIGNoYXJhY3RlciBkYXRhCisgICAgdHJ5OgorICAgICAgICAjIGl0J3Mgd29ydGggYXZvaWRpbmcgZG8tbm90aGluZyBjYWxscyBmb3Igc3RyaW5ncyB0aGF0IGFyZQorICAgICAgICAjIHNob3J0ZXIgdGhhbiA1MDAgY2hhcmFjdGVyLCBvciBzby4gIGFzc3VtZSB0aGF0J3MsIGJ5IGZhciwKKyAgICAgICAgIyB0aGUgbW9zdCBjb21tb24gY2FzZSBpbiBtb3N0IGFwcGxpY2F0aW9ucy4KKyAgICAgICAgaWYgIiYiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikKKyAgICAgICAgaWYgIjwiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKQorICAgICAgICBpZiAiPiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpCisgICAgICAgIHJldHVybiB0ZXh0LmVuY29kZShlbmNvZGluZywgInhtbGNoYXJyZWZyZXBsYWNlIikKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQorCitkZWYgX2VzY2FwZV9hdHRyaWIodGV4dCwgZW5jb2RpbmcpOgorICAgICMgZXNjYXBlIGF0dHJpYnV0ZSB2YWx1ZQorICAgIHRyeToKKyAgICAgICAgaWYgIiYiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikKKyAgICAgICAgaWYgIjwiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKQorICAgICAgICBpZiAiPiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpCisgICAgICAgIGlmICJcIiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlwiIiwgIiZxdW90OyIpCisgICAgICAgIGlmICJcbiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgIiYjMTA7IikKKyAgICAgICAgcmV0dXJuIHRleHQuZW5jb2RlKGVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCisKK2RlZiBfZXNjYXBlX2F0dHJpYl9odG1sKHRleHQsIGVuY29kaW5nKToKKyAgICAjIGVzY2FwZSBhdHRyaWJ1dGUgdmFsdWUKKyAgICB0cnk6CisgICAgICAgIGlmICImIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiJiIsICImYW1wOyIpCisgICAgICAgIGlmICI+IiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgaWYgIlwiIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXCIiLCAiJnF1b3Q7IikKKyAgICAgICAgcmV0dXJuIHRleHQuZW5jb2RlKGVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMKKyMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCisjIHN1YmVsZW1lbnRzLgorIworIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgorIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KKyMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKKyMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCisjIEByZXR1cm4gQW4gZW5jb2RlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCisjIEBkZWZyZXR1cm4gc3RyaW5nCisKK2RlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CisgICAgY2xhc3MgZHVtbXk6CisgICAgICAgIHBhc3MKKyAgICBkYXRhID0gW10KKyAgICBmaWxlID0gZHVtbXkoKQorICAgIGZpbGUud3JpdGUgPSBkYXRhLmFwcGVuZAorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKGZpbGUsIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIHJldHVybiAiIi5qb2luKGRhdGEpCisKKyMjCisjIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAorIyBzdWJlbGVtZW50cy4gIFRoZSBzdHJpbmcgaXMgcmV0dXJuZWQgYXMgYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgorIworIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgorIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KKyMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKKyMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCisjIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCisjIEBkZWZyZXR1cm4gc2VxdWVuY2UKKyMgQHNpbmNlIDEuMworCitkZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBjbGFzcyBkdW1teToKKyAgICAgICAgcGFzcworICAgIGRhdGEgPSBbXQorICAgIGZpbGUgPSBkdW1teSgpCisgICAgZmlsZS53cml0ZSA9IGRhdGEuYXBwZW5kCisgICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoZmlsZSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QpCisgICAgIyBGSVhNRTogbWVyZ2Ugc21hbGwgZnJhZ21lbnRzIGludG8gbGFyZ2VyIHBhcnRzCisgICAgcmV0dXJuIGRhdGEKIAogIyMKICMgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcwpAQCAtNzQ2LDExNSArMTE2MSwxNSBAQAogICAgIGlmIG5vdCB0YWlsIG9yIHRhaWxbLTFdICE9ICJcbiI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKIAotZGVmIF9lbmNvZGUocywgZW5jb2RpbmcpOgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIHMuZW5jb2RlKGVuY29kaW5nKQotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgcmV0dXJuIHMgIyAxLjUuMjogYXNzdW1lIHRoZSBzdHJpbmcgdXNlcyB0aGUgcmlnaHQgZW5jb2RpbmcKLQotaWYgc3lzLnZlcnNpb25bOjNdID09ICIxLjUiOgotICAgIF9lc2NhcGUgPSByZS5jb21waWxlKHIiWyY8PlwiXHg4MC1ceGZmXSsiKSAjIDEuNS4yCi1lbHNlOgotICAgIF9lc2NhcGUgPSByZS5jb21waWxlKGV2YWwocid1IlsmPD5cIlx1MDA4MC1cdWZmZmZdKyInKSkKLQotX2VzY2FwZV9tYXAgPSB7Ci0gICAgIiYiOiAiJmFtcDsiLAotICAgICI8IjogIiZsdDsiLAotICAgICI+IjogIiZndDsiLAotICAgICciJzogIiZxdW90OyIsCi19Ci0KLV9uYW1lc3BhY2VfbWFwID0gewotICAgICMgIndlbGwta25vd24iIG5hbWVzcGFjZSBwcmVmaXhlcwotICAgICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOiAieG1sIiwKLSAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ICJodG1sIiwKLSAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI6ICJyZGYiLAotICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI6ICJ3c2RsIiwKLX0KLQotZGVmIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpOgotICAgIHJhaXNlIFR5cGVFcnJvcigKLSAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgJXIgKHR5cGUgJXMpIiAlICh0ZXh0LCB0eXBlKHRleHQpLl9fbmFtZV9fKQotICAgICAgICApCi0KLWRlZiBfZW5jb2RlX2VudGl0eSh0ZXh0LCBwYXR0ZXJuPV9lc2NhcGUpOgotICAgICMgbWFwIHJlc2VydmVkIGFuZCBub24tYXNjaWkgY2hhcmFjdGVycyB0byBudW1lcmljYWwgZW50aXRpZXMKLSAgICBkZWYgZXNjYXBlX2VudGl0aWVzKG0sIG1hcD1fZXNjYXBlX21hcCk6Ci0gICAgICAgIG91dCA9IFtdCi0gICAgICAgIGFwcGVuZCA9IG91dC5hcHBlbmQKLSAgICAgICAgZm9yIGNoYXIgaW4gbS5ncm91cCgpOgotICAgICAgICAgICAgdGV4dCA9IG1hcC5nZXQoY2hhcikKLSAgICAgICAgICAgIGlmIHRleHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0ZXh0ID0gIiYjJWQ7IiAlIG9yZChjaGFyKQotICAgICAgICAgICAgYXBwZW5kKHRleHQpCi0gICAgICAgIHJldHVybiBzdHJpbmcuam9pbihvdXQsICIiKQotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIF9lbmNvZGUocGF0dGVybi5zdWIoZXNjYXBlX2VudGl0aWVzLCB0ZXh0KSwgImFzY2lpIikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQotCi0jCi0jIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzc3VtZSBhbiBhc2NpaS1jb21wYXRpYmxlIGVuY29kaW5nCi0jIChvciAidXRmLTE2IikKLQotZGVmIF9lc2NhcGVfY2RhdGEodGV4dCwgZW5jb2Rpbmc9Tm9uZSwgcmVwbGFjZT1zdHJpbmcucmVwbGFjZSk6Ci0gICAgIyBlc2NhcGUgY2hhcmFjdGVyIGRhdGEKLSAgICB0cnk6Ci0gICAgICAgIGlmIGVuY29kaW5nOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRleHQgPSBfZW5jb2RlKHRleHQsIGVuY29kaW5nKQotICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gX2VuY29kZV9lbnRpdHkodGV4dCkKLSAgICAgICAgdGV4dCA9IHJlcGxhY2UodGV4dCwgIiYiLCAiJmFtcDsiKQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiPCIsICImbHQ7IikKLSAgICAgICAgdGV4dCA9IHJlcGxhY2UodGV4dCwgIj4iLCAiJmd0OyIpCi0gICAgICAgIHJldHVybiB0ZXh0Ci0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKLQotZGVmIF9lc2NhcGVfYXR0cmliKHRleHQsIGVuY29kaW5nPU5vbmUsIHJlcGxhY2U9c3RyaW5nLnJlcGxhY2UpOgotICAgICMgZXNjYXBlIGF0dHJpYnV0ZSB2YWx1ZQotICAgIHRyeToKLSAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGV4dCA9IF9lbmNvZGUodGV4dCwgZW5jb2RpbmcpCi0gICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiBfZW5jb2RlX2VudGl0eSh0ZXh0KQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiJiIsICImYW1wOyIpCi0gICAgICAgIHRleHQgPSByZXBsYWNlKHRleHQsICInIiwgIiZhcG9zOyIpICMgRklYTUU6IG92ZXJraWxsCi0gICAgICAgIHRleHQgPSByZXBsYWNlKHRleHQsICJcIiIsICImcXVvdDsiKQotICAgICAgICB0ZXh0ID0gcmVwbGFjZSh0ZXh0LCAiPCIsICImbHQ7IikKLSAgICAgICAgdGV4dCA9IHJlcGxhY2UodGV4dCwgIj4iLCAiJmd0OyIpCi0gICAgICAgIHJldHVybiB0ZXh0Ci0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKLQotZGVmIGZpeHRhZyh0YWcsIG5hbWVzcGFjZXMpOgotICAgICMgZ2l2ZW4gYSBkZWNvcmF0ZWQgdGFnIChvZiB0aGUgZm9ybSB7dXJpfXRhZyksIHJldHVybiBwcmVmaXhlZAotICAgICMgdGFnIGFuZCBuYW1lc3BhY2UgZGVjbGFyYXRpb24sIGlmIGFueQotICAgIGlmIGlzaW5zdGFuY2UodGFnLCBRTmFtZSk6Ci0gICAgICAgIHRhZyA9IHRhZy50ZXh0Ci0gICAgbmFtZXNwYWNlX3VyaSwgdGFnID0gc3RyaW5nLnNwbGl0KHRhZ1sxOl0sICJ9IiwgMSkKLSAgICBwcmVmaXggPSBuYW1lc3BhY2VzLmdldChuYW1lc3BhY2VfdXJpKQotICAgIGlmIHByZWZpeCBpcyBOb25lOgotICAgICAgICBwcmVmaXggPSBfbmFtZXNwYWNlX21hcC5nZXQobmFtZXNwYWNlX3VyaSkKLSAgICAgICAgaWYgcHJlZml4IGlzIE5vbmU6Ci0gICAgICAgICAgICBwcmVmaXggPSAibnMlZCIgJSBsZW4obmFtZXNwYWNlcykKLSAgICAgICAgbmFtZXNwYWNlc1tuYW1lc3BhY2VfdXJpXSA9IHByZWZpeAotICAgICAgICBpZiBwcmVmaXggPT0gInhtbCI6Ci0gICAgICAgICAgICB4bWxucyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHhtbG5zID0gKCJ4bWxuczolcyIgJSBwcmVmaXgsIG5hbWVzcGFjZV91cmkpCi0gICAgZWxzZToKLSAgICAgICAgeG1sbnMgPSBOb25lCi0gICAgcmV0dXJuICIlczolcyIgJSAocHJlZml4LCB0YWcpLCB4bWxucworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBwYXJzaW5nCiAKICMjCiAjIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgaW50byBhbiBlbGVtZW50IHRyZWUuCiAjCiAjIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgogIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MVHJlZUJ1aWxkZXJ9IHBhcnNlciBpcyB1c2VkLgorIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCiAjIEByZXR1cm4gQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKIAogZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOgpAQCAtODY5LDE4ICsxMTg0LDI1IEBACiAjIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgogIyBAcGFyYW0gZXZlbnRzIEEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiCiAjICAgICBldmVudHMgYXJlIHJlcG9ydGVkLgorIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCisjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KICMgQHJldHVybiBBIChldmVudCwgZWxlbSkgaXRlcmF0b3IuCiAKLWNsYXNzIGl0ZXJwYXJzZToKK2RlZiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgorICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKKyAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCisgICAgaWYgbm90IHBhcnNlcjoKKyAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgIHJldHVybiBfSXRlclBhcnNlSXRlcmF0b3Ioc291cmNlLCBldmVudHMsIHBhcnNlcikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGV2ZW50cz1Ob25lKToKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgotICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCitjbGFzcyBfSXRlclBhcnNlSXRlcmF0b3Iob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGV2ZW50cywgcGFyc2VyKToKICAgICAgICAgc2VsZi5fZmlsZSA9IHNvdXJjZQogICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQogICAgICAgICBzZWxmLl9pbmRleCA9IDAKICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIoKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKICAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZwogICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIuX3BhcnNlcgogICAgICAgICBhcHBlbmQgPSBzZWxmLl9ldmVudHMuYXBwZW5kCkBAIC05MDgsMTUgKzEyMzAsMTcgQEAKICAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gInN0YXJ0LW5zIjoKICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBfZW5jb2RlKHVyaSwgImFzY2lpIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyaSA9ICh1cmkgb3IgIiIpLmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkpKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgKHByZWZpeCBvciAiIiwgdXJpIG9yICIiKSkpCiAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCiAgICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQtbnMiOgogICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgogICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKICAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnQpCiAKICAgICBkZWYgbmV4dChzZWxmKToKICAgICAgICAgd2hpbGUgMToKQEAgLTkyNSwxMCArMTI0OSw3IEBACiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQogICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMApAQCAtOTQyLDI0ICsxMjYzLDIyIEBACiAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSBzZWxmLl9pbmRleCArIDEKICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQogCi0gICAgdHJ5OgotICAgICAgICBpdGVyCi0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKIAogIyMKICMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBjYW4KICMgYmUgdXNlZCB0byBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KICMKICMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgorIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCisjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgogIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAotZGVmIFhNTCh0ZXh0KToKLSAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCitkZWYgWE1MKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICBpZiBub3QgcGFyc2VyOgorICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKICAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKIApAQCAtOTY4LDE1ICsxMjg3LDE4IEBACiAjIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgogIwogIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCisjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogIyBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCiAjIEBkZWZyZXR1cm4gKEVsZW1lbnQsIGRpY3Rpb25hcnkpCiAKLWRlZiBYTUxJRCh0ZXh0KToKLSAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCitkZWYgWE1MSUQodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgIGlmIG5vdCBwYXJzZXI6CisgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHRyZWUgPSBwYXJzZXIuY2xvc2UoKQogICAgIGlkcyA9IHt9Ci0gICAgZm9yIGVsZW0gaW4gdHJlZS5nZXRpdGVyYXRvcigpOgorICAgIGZvciBlbGVtIGluIHRyZWUuaXRlcigpOgogICAgICAgICBpZCA9IGVsZW0uZ2V0KCJpZCIpCiAgICAgICAgIGlmIGlkOgogICAgICAgICAgICAgaWRzW2lkXSA9IGVsZW0KQEAgLTk5MywyMSArMTMxNSwyMyBAQAogZnJvbXN0cmluZyA9IFhNTAogCiAjIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuCisjIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuCiAjCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEByZXR1cm4gQW4gZW5jb2RlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc3RyaW5nCisjIEBwYXJhbSBzZXF1ZW5jZSBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBYTUwgZGF0YSBmcmFnbWVudHMuCisjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgorIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCisjIEBkZWZyZXR1cm4gRWxlbWVudAorIyBAc2luY2UgMS4zCiAKLWRlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lKToKLSAgICBjbGFzcyBkdW1teToKLSAgICAgICAgcGFzcwotICAgIGRhdGEgPSBbXQotICAgIGZpbGUgPSBkdW1teSgpCi0gICAgZmlsZS53cml0ZSA9IGRhdGEuYXBwZW5kCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoZmlsZSwgZW5jb2RpbmcpCi0gICAgcmV0dXJuIHN0cmluZy5qb2luKGRhdGEsICIiKQorZGVmIGZyb21zdHJpbmdsaXN0KHNlcXVlbmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgaWYgbm90IHBhcnNlcjoKKyAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgIGZvciB0ZXh0IGluIHNlcXVlbmNlOgorICAgICAgICBwYXJzZXIuZmVlZCh0ZXh0KQorICAgIHJldHVybiBwYXJzZXIuY2xvc2UoKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMjCiAjIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlCkBAIC0xMDIwLDcgKzEzNDQsNyBAQAogIyBAcGFyYW0gZWxlbWVudF9mYWN0b3J5IE9wdGlvbmFsIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeQogIyAgICBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgogCi1jbGFzcyBUcmVlQnVpbGRlcjoKK2NsYXNzIFRyZWVCdWlsZGVyKG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF9mYWN0b3J5PU5vbmUpOgogICAgICAgICBzZWxmLl9kYXRhID0gW10gIyBkYXRhIGNvbGxlY3RvcgpAQCAtMTAyOCwxMSArMTM1MiwxMSBAQAogICAgICAgICBzZWxmLl9sYXN0ID0gTm9uZSAjIGxhc3QgZWxlbWVudAogICAgICAgICBzZWxmLl90YWlsID0gTm9uZSAjIHRydWUgaWYgd2UncmUgYWZ0ZXIgYW4gZW5kIHRhZwogICAgICAgICBpZiBlbGVtZW50X2ZhY3RvcnkgaXMgTm9uZToKLSAgICAgICAgICAgIGVsZW1lbnRfZmFjdG9yeSA9IF9FbGVtZW50SW50ZXJmYWNlCisgICAgICAgICAgICBlbGVtZW50X2ZhY3RvcnkgPSBFbGVtZW50CiAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3RvcnkKIAogICAgICMjCi0gICAgIyBGbHVzaGVzIHRoZSBwYXJzZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW4KKyAgICAjIEZsdXNoZXMgdGhlIGJ1aWxkZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50CiAgICAgIyBlbGVtZW50LgogICAgICMKICAgICAjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KQEAgLTEwNDAsMTMgKzEzNjQsMTMgQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLl9lbGVtKSA9PSAwLCAibWlzc2luZyBlbmQgdGFncyIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QgIT0gTm9uZSwgIm1pc3NpbmcgdG9wbGV2ZWwgZWxlbWVudCIKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QgaXMgbm90IE5vbmUsICJtaXNzaW5nIHRvcGxldmVsIGVsZW1lbnQiCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CiAKICAgICBkZWYgX2ZsdXNoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9kYXRhOgogICAgICAgICAgICAgaWYgc2VsZi5fbGFzdCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc3RyaW5nLmpvaW4oc2VsZi5fZGF0YSwgIiIpCisgICAgICAgICAgICAgICAgdGV4dCA9ICIiLmpvaW4oc2VsZi5fZGF0YSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLl90YWlsOgogICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fbGFzdC50YWlsIGlzIE5vbmUsICJpbnRlcm5hbCBlcnJvciAodGFpbCkiCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3QudGFpbCA9IHRleHQKQEAgLTExMDUsMjggKzE0MjksMzkgQEAKICMgICAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCB7QGxpbmsgI1RyZWVCdWlsZGVyfSBjbGFzcy4KICMgQGtleXBhcmFtIGh0bWwgUHJlZGVmaW5lIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZAogIyAgICAgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCisjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBlbmNvZGluZy4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzCisjICAgICB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KICMgQHNlZSAjRWxlbWVudFRyZWUKICMgQHNlZSAjVHJlZUJ1aWxkZXIKIAotY2xhc3MgWE1MVHJlZUJ1aWxkZXI6CitjbGFzcyBYTUxQYXJzZXIob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodG1sPTAsIHRhcmdldD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20geG1sLnBhcnNlcnMgaW1wb3J0IGV4cGF0CiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICJObyBtb2R1bGUgbmFtZWQgZXhwYXQ7IHVzZSBTaW1wbGVYTUxUcmVlQnVpbGRlciBpbnN0ZWFkIgotICAgICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKE5vbmUsICJ9IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgcHlleHBhdCBhcyBleHBhdAorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAgICAgICAgICAgICAgICAgICAiTm8gbW9kdWxlIG5hbWVkIGV4cGF0OyB1c2UgU2ltcGxlWE1MVHJlZUJ1aWxkZXIgaW5zdGVhZCIKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoZW5jb2RpbmcsICJ9IikKICAgICAgICAgaWYgdGFyZ2V0IGlzIE5vbmU6CiAgICAgICAgICAgICB0YXJnZXQgPSBUcmVlQnVpbGRlcigpCi0gICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldAorICAgICAgICAjIHVuZGVyc2NvcmVkIG5hbWVzIGFyZSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSBvbmx5CisgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5fcGFyc2VyID0gcGFyc2VyCisgICAgICAgIHNlbGYudGFyZ2V0ID0gc2VsZi5fdGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgIHNlbGYuX2Vycm9yID0gZXhwYXQuZXJyb3IKICAgICAgICAgc2VsZi5fbmFtZXMgPSB7fSAjIG5hbWUgbWVtbyBjYWNoZQogICAgICAgICAjIGNhbGxiYWNrcwogICAgICAgICBwYXJzZXIuRGVmYXVsdEhhbmRsZXJFeHBhbmQgPSBzZWxmLl9kZWZhdWx0CiAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnQKICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fZW5kCiAgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuX2RhdGEKKyAgICAgICAgIyBvcHRpb25hbCBjYWxsYmFja3MKKyAgICAgICAgcGFyc2VyLkNvbW1lbnRIYW5kbGVyID0gc2VsZi5fY29tbWVudAorICAgICAgICBwYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IHNlbGYuX3BpCiAgICAgICAgICMgbGV0IGV4cGF0IGRvIHRoZSBidWZmZXJpbmcsIGlmIHN1cHBvcnRlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuYnVmZmVyX3RleHQgPSAxCkBAIC0xMTM5LDE3ICsxNDc0LDIzIEBACiAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0X2xpc3QKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBlbmNvZGluZyA9IE5vbmUKLSAgICAgICAgaWYgbm90IHBhcnNlci5yZXR1cm5zX3VuaWNvZGU6Ci0gICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGYtOCIKLSAgICAgICAgIyB0YXJnZXQueG1sKGVuY29kaW5nLCBOb25lKQogICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogICAgICAgICBzZWxmLmVudGl0eSA9IHt9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudmVyc2lvbiA9ICJFeHBhdCAlZC4lZC4lZCIgJSBleHBhdC52ZXJzaW9uX2luZm8KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcyAjIHVua25vd24KKworICAgIGRlZiBfcmFpc2VlcnJvcihzZWxmLCB2YWx1ZSk6CisgICAgICAgIGVyciA9IFBhcnNlRXJyb3IodmFsdWUpCisgICAgICAgIGVyci5jb2RlID0gdmFsdWUuY29kZQorICAgICAgICBlcnIucG9zaXRpb24gPSB2YWx1ZS5saW5lbm8sIHZhbHVlLm9mZnNldAorICAgICAgICByYWlzZSBlcnIKIAogICAgIGRlZiBfZml4dGV4dChzZWxmLCB0ZXh0KToKICAgICAgICAgIyBjb252ZXJ0IHRleHQgc3RyaW5nIHRvIGFzY2lpLCBpZiBwb3NzaWJsZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gX2VuY29kZSh0ZXh0LCAiYXNjaWkiKQorICAgICAgICAgICAgcmV0dXJuIHRleHQuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gdGV4dAogCkBAIC0xMTY2LDQwICsxNTA3LDYyIEBACiAKICAgICBkZWYgX3N0YXJ0KHNlbGYsIHRhZywgYXR0cmliX2luKToKICAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKKyAgICAgICAgZml4dGV4dCA9IHNlbGYuX2ZpeHRleHQKICAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCiAgICAgICAgIGF0dHJpYiA9IHt9CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJpYl9pbi5pdGVtcygpOgotICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoa2V5KV0gPSBzZWxmLl9maXh0ZXh0KHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQorICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoa2V5KV0gPSBmaXh0ZXh0KHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCiAKICAgICBkZWYgX3N0YXJ0X2xpc3Qoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgogICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQorICAgICAgICBmaXh0ZXh0ID0gc2VsZi5fZml4dGV4dAogICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKICAgICAgICAgYXR0cmliID0ge30KICAgICAgICAgaWYgYXR0cmliX2luOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJpYl9pbiksIDIpOgotICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJpYl9pbltpXSldID0gc2VsZi5fZml4dGV4dChhdHRyaWJfaW5baSsxXSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKKyAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyaWJfaW5baV0pXSA9IGZpeHRleHQoYXR0cmliX2luW2krMV0pCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfZGF0YShzZWxmLCB0ZXh0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldC5kYXRhKHNlbGYuX2ZpeHRleHQodGV4dCkpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5kYXRhKHNlbGYuX2ZpeHRleHQodGV4dCkpCiAKICAgICBkZWYgX2VuZChzZWxmLCB0YWcpOgotICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0LmVuZChzZWxmLl9maXhuYW1lKHRhZykpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5lbmQoc2VsZi5fZml4bmFtZSh0YWcpKQorCisgICAgZGVmIF9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21tZW50ID0gc2VsZi50YXJnZXQuY29tbWVudAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY29tbWVudChzZWxmLl9maXh0ZXh0KGRhdGEpKQorCisgICAgZGVmIF9waShzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaSA9IHNlbGYudGFyZ2V0LnBpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwaShzZWxmLl9maXh0ZXh0KHRhcmdldCksIHNlbGYuX2ZpeHRleHQoZGF0YSkpCiAKICAgICBkZWYgX2RlZmF1bHQoc2VsZiwgdGV4dCk6CiAgICAgICAgIHByZWZpeCA9IHRleHRbOjFdCiAgICAgICAgIGlmIHByZWZpeCA9PSAiJiI6CiAgICAgICAgICAgICAjIGRlYWwgd2l0aCB1bmRlZmluZWQgZW50aXRpZXMKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl90YXJnZXQuZGF0YShzZWxmLmVudGl0eVt0ZXh0WzE6LTFdXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5kYXRhKHNlbGYuZW50aXR5W3RleHRbMTotMV1dKQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIGZyb20geG1sLnBhcnNlcnMgaW1wb3J0IGV4cGF0Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhwYXQuZXJyb3IoCisgICAgICAgICAgICAgICAgZXJyID0gZXhwYXQuZXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJ1bmRlZmluZWQgZW50aXR5ICVzOiBsaW5lICVkLCBjb2x1bW4gJWQiICUKICAgICAgICAgICAgICAgICAgICAgKHRleHQsIHNlbGYuX3BhcnNlci5FcnJvckxpbmVOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5FcnJvckNvbHVtbk51bWJlcikKICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGVyci5jb2RlID0gMTEgIyBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWQorICAgICAgICAgICAgICAgIGVyci5saW5lbm8gPSBzZWxmLl9wYXJzZXIuRXJyb3JMaW5lTnVtYmVyCisgICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHNlbGYuX3BhcnNlci5FcnJvckNvbHVtbk51bWJlcgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgogICAgICAgICBlbGlmIHByZWZpeCA9PSAiPCIgYW5kIHRleHRbOjldID09ICI8IURPQ1RZUEUiOgogICAgICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IFtdICMgaW5zaWRlIGEgZG9jdHlwZSBkZWNsYXJhdGlvbgogICAgICAgICBlbGlmIHNlbGYuX2RvY3R5cGUgaXMgbm90IE5vbmU6CkBAIC0xMjA3LDcgKzE1NzAsNyBAQAogICAgICAgICAgICAgaWYgcHJlZml4ID09ICI+IjoKICAgICAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgdGV4dCA9IHN0cmluZy5zdHJpcCh0ZXh0KQorICAgICAgICAgICAgdGV4dCA9IHRleHQuc3RyaXAoKQogICAgICAgICAgICAgaWYgbm90IHRleHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlLmFwcGVuZCh0ZXh0KQpAQCAtMTIyMywxOCArMTU4NiwzMSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBwdWJpZDoKICAgICAgICAgICAgICAgICAgICAgcHViaWQgPSBwdWJpZFsxOi0xXQotICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi50YXJnZXQsICJkb2N0eXBlIik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0LmRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbVsxOi0xXSkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuZG9jdHlwZSBpcyBub3Qgc2VsZi5fWE1MUGFyc2VyX19kb2N0eXBlOgorICAgICAgICAgICAgICAgICAgICAjIHdhcm4gYWJvdXQgZGVwcmVjYXRlZCBjYWxsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX1hNTFBhcnNlcl9fZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRvY3R5cGUobmFtZSwgcHViaWQsIHN5c3RlbVsxOi0xXSkKICAgICAgICAgICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogCiAgICAgIyMKLSAgICAjIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgorICAgICMgKERlcHJlY2F0ZWQpIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgogICAgICMKICAgICAjIEBwYXJhbSBuYW1lIERvY3R5cGUgbmFtZS4KICAgICAjIEBwYXJhbSBwdWJpZCBQdWJsaWMgaWRlbnRpZmllci4KICAgICAjIEBwYXJhbSBzeXN0ZW0gU3lzdGVtIGlkZW50aWZpZXIuCiAKICAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKLSAgICAgICAgcGFzcworICAgICAgICAiIiJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4iIiIKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlKCkgIgorICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCisgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICApCisKKyAgICAjIHNlbnRpbmVsLCBpZiBkb2N0eXBlIGlzIHJlZGVmaW5lZCBpbiBhIHN1YmNsYXNzCisgICAgX19kb2N0eXBlID0gZG9jdHlwZQogCiAgICAgIyMKICAgICAjIEZlZWRzIGRhdGEgdG8gdGhlIHBhcnNlci4KQEAgLTEyNDIsNyArMTYxOCwxMCBAQAogICAgICMgQHBhcmFtIGRhdGEgRW5jb2RlZCBkYXRhLgogCiAgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZShkYXRhLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wYXJzZXIuUGFyc2UoZGF0YSwgMCkKKyAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yLCB2OgorICAgICAgICAgICAgc2VsZi5fcmFpc2VlcnJvcih2KQogCiAgICAgIyMKICAgICAjIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLgpAQCAtMTI1MSwxMCArMTYzMCwyMCBAQAogICAgICMgQGRlZnJldHVybiBFbGVtZW50CiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQotICAgICAgICB0cmVlID0gc2VsZi5fdGFyZ2V0LmNsb3NlKCkKLSAgICAgICAgZGVsIHNlbGYuX3RhcmdldCwgc2VsZi5fcGFyc2VyICMgZ2V0IHJpZCBvZiBjaXJjdWxhciByZWZlcmVuY2VzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQorICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IsIHY6CisgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCisgICAgICAgIHRyZWUgPSBzZWxmLnRhcmdldC5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLnRhcmdldCwgc2VsZi5fcGFyc2VyICMgZ2V0IHJpZCBvZiBjaXJjdWxhciByZWZlcmVuY2VzCiAgICAgICAgIHJldHVybiB0cmVlCiAKICMgY29tcGF0aWJpbGl0eQotWE1MUGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIKK1hNTFRyZWVCdWlsZGVyID0gWE1MUGFyc2VyCisKKyMgd29ya2Fyb3VuZCBjaXJjdWxhciBpbXBvcnQuCit0cnk6CisgICAgZnJvbSBFbGVtZW50QzE0TiBpbXBvcnQgX3NlcmlhbGl6ZV9jMTRuCisgICAgX3NlcmlhbGl6ZVsiYzE0biJdID0gX3NlcmlhbGl6ZV9jMTRuCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9fX2luaXRfXy5weSBiL0xpYi94bWwvZXRyZWUvX19pbml0X18ucHkKaW5kZXggM2RkMmM5Mi4uMjdmZDhmNiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9fX2luaXRfXy5weQorKysgYi9MaWIveG1sL2V0cmVlL19faW5pdF9fLnB5CkBAIC0xLDEwICsxLDEwIEBACi0jICRJZDogX19pbml0X18ucHkgMTgyMSAyMDA0LTA2LTAzIDE2OjU3OjQ5WiBmcmVkcmlrICQKKyMgJElkOiBfX2luaXRfXy5weSAzMzc1IDIwMDgtMDItMTMgMDg6MDU6MDhaIGZyZWRyaWsgJAogIyBlbGVtZW50dHJlZSBwYWNrYWdlCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIEVsZW1lbnRUcmVlIHRvb2xraXQgaXMKICMKLSMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgYnkgRnJlZHJpayBMdW5kaAorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoCiAjCiAjIEJ5IG9idGFpbmluZywgdXNpbmcsIGFuZC9vciBjb3B5aW5nIHRoaXMgc29mdHdhcmUgYW5kL29yIGl0cwogIyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsCkBAIC0zMCw0ICszMCw0IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9fX2luaXRfXy5weSBiL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CmluZGV4IDczZWM5MjkuLjAwNWI2NmUgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CisrKyBiL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CkBAIC01OSw3ICs1OSw3IEBACiAgICAgaW1wb3J0IHhtbC5zYXguZXhwYXRyZWFkZXIKIAogaW1wb3J0IG9zLCBzeXMKLWlmIG9zLmVudmlyb24uaGFzX2tleSgiUFlfU0FYX1BBUlNFUiIpOgoraWYgIlBZX1NBWF9QQVJTRVIiIGluIG9zLmVudmlyb246CiAgICAgZGVmYXVsdF9wYXJzZXJfbGlzdCA9IG9zLmVudmlyb25bIlBZX1NBWF9QQVJTRVIiXS5zcGxpdCgiLCIpCiBkZWwgb3MKIApkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkgYi9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQppbmRleCBlNmQxOTAyLi45MmE3OWMxIDEwMDY0NAotLS0gYS9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQorKysgYi9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQpAQCAtNDA3LDggKzQwNyw4IEBACiAjIC0tLQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGltcG9ydCB4bWwuc2F4CisgICAgaW1wb3J0IHhtbC5zYXguc2F4dXRpbHMKICAgICBwID0gY3JlYXRlX3BhcnNlcigpCi0gICAgcC5zZXRDb250ZW50SGFuZGxlcih4bWwuc2F4LlhNTEdlbmVyYXRvcigpKQorICAgIHAuc2V0Q29udGVudEhhbmRsZXIoeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3IoKSkKICAgICBwLnNldEVycm9ySGFuZGxlcih4bWwuc2F4LkVycm9ySGFuZGxlcigpKQotICAgIHAucGFyc2UoIi4uLy4uLy4uL2hhbWxldC54bWwiKQorICAgIHAucGFyc2UoImh0dHA6Ly93d3cuaWJpYmxpby5vcmcveG1sL2V4YW1wbGVzL3NoYWtlc3BlYXJlL2hhbWxldC54bWwiKQpkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgvc2F4dXRpbHMucHkgYi9MaWIveG1sL3NheC9zYXh1dGlscy5weQppbmRleCA0NjgxOGYzLi45N2Q2NWQ4IDEwMDY0NAotLS0gYS9MaWIveG1sL3NheC9zYXh1dGlscy5weQorKysgYi9MaWIveG1sL3NheC9zYXh1dGlscy5weQpAQCAtMTAzLDYgKzEwMywxMiBAQAogICAgIGRlZiBfcW5hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIkJ1aWxkcyBhIHF1YWxpZmllZCBuYW1lIGZyb20gYSAobnNfdXJsLCBsb2NhbG5hbWUpIHBhaXIiIiIKICAgICAgICAgaWYgbmFtZVswXToKKyAgICAgICAgICAgICMgUGVyIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSwgVGhlICd4bWwnIHByZWZpeCBpcworICAgICAgICAgICAgIyBib3VuZCBieSBkZWZpbml0aW9uIHRvIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS4gIEl0CisgICAgICAgICAgICAjIGRvZXMgbm90IG5lZWQgdG8gYmUgZGVjbGFyZWQgYW5kIHdpbGwgbm90IHVzdWFsbHkgYmUgZm91bmQgaW4KKyAgICAgICAgICAgICMgc2VsZi5fY3VycmVudF9jb250ZXh0LgorICAgICAgICAgICAgaWYgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScgPT0gbmFtZVswXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3htbDonICsgbmFtZVsxXQogICAgICAgICAgICAgIyBUaGUgbmFtZSBpcyBpbiBhIG5vbi1lbXB0eSBuYW1lc3BhY2UKICAgICAgICAgICAgIHByZWZpeCA9IHNlbGYuX2N1cnJlbnRfY29udGV4dFtuYW1lWzBdXQogICAgICAgICAgICAgaWYgcHJlZml4OgpkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgveG1scmVhZGVyLnB5IGIvTGliL3htbC9zYXgveG1scmVhZGVyLnB5CmluZGV4IDhlMjMwODQuLjQ2ZWUwMmIgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L3htbHJlYWRlci5weQorKysgYi9MaWIveG1sL3NheC94bWxyZWFkZXIucHkKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgICAgICByZXR1cm4gbmFtZSBpbiBzZWxmLl9hdHRycwogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzLmhhc19rZXkobmFtZSkKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZi5fYXR0cnMKIAogICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgYWx0ZXJuYXRpdmU9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxmLl9hdHRycy5nZXQobmFtZSwgYWx0ZXJuYXRpdmUpCmRpZmYgLS1naXQgYS9MaWIveG1scnBjbGliLnB5IGIvTGliL3htbHJwY2xpYi5weQppbmRleCBhOTE2ZmExLi4zY2JhMzlmIDEwMDY0NAotLS0gYS9MaWIveG1scnBjbGliLnB5CisrKyBiL0xpYi94bWxycGNsaWIucHkKQEAgLTEzOSw2ICsxMzksMTMgQEAKIGltcG9ydCByZSwgc3RyaW5nLCB0aW1lLCBvcGVyYXRvcgogCiBmcm9tIHR5cGVzIGltcG9ydCAqCitpbXBvcnQgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCBodHRwbGliCit0cnk6CisgICAgaW1wb3J0IGd6aXAKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnemlwID0gTm9uZSAjcHl0aG9uIGNhbiBiZSBidWlsdCB3aXRob3V0IHpsaWIvZ3ppcCBzdXBwb3J0CiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgSW50ZXJuYWwgc3R1ZmYKQEAgLTUyNiw1NiArNTMzLDYgQEAKIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKToKICAgICBGYXN0TWFyc2hhbGxlciA9IE5vbmUKIAotIwotIyB0aGUgU0dNTE9QIHBhcnNlciBpcyBhYm91dCAxNXggZmFzdGVyIHRoYW4gUHl0aG9uJ3MgYnVpbHRpbgotIyBYTUwgcGFyc2VyLiAgU0dNTE9QIHNvdXJjZXMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKLSMKLSMgICAgIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20vcHJvZHVjdHMveG1sL3NnbWxvcC5odG0KLSMKLQotdHJ5OgotICAgIGltcG9ydCBzZ21sb3AKLSAgICBpZiBub3QgaGFzYXR0cihzZ21sb3AsICJYTUxQYXJzZXIiKToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBTZ21sb3BQYXJzZXIgPSBOb25lICMgc2dtbG9wIGFjY2VsZXJhdG9yIG5vdCBhdmFpbGFibGUKLWVsc2U6Ci0gICAgY2xhc3MgU2dtbG9wUGFyc2VyOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0KToKLQotICAgICAgICAgICAgIyBzZXR1cCBjYWxsYmFja3MKLSAgICAgICAgICAgIHNlbGYuZmluaXNoX3N0YXJ0dGFnID0gdGFyZ2V0LnN0YXJ0Ci0gICAgICAgICAgICBzZWxmLmZpbmlzaF9lbmR0YWcgPSB0YXJnZXQuZW5kCi0gICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhID0gdGFyZ2V0LmRhdGEKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX3htbCA9IHRhcmdldC54bWwKLQotICAgICAgICAgICAgIyBhY3RpdmF0ZSBwYXJzZXIKLSAgICAgICAgICAgIHNlbGYucGFyc2VyID0gc2dtbG9wLlhNTFBhcnNlcigpCi0gICAgICAgICAgICBzZWxmLnBhcnNlci5yZWdpc3RlcihzZWxmKQotICAgICAgICAgICAgc2VsZi5mZWVkID0gc2VsZi5wYXJzZXIuZmVlZAotICAgICAgICAgICAgc2VsZi5lbnRpdHkgPSB7Ci0gICAgICAgICAgICAgICAgImFtcCI6ICImIiwgImd0IjogIj4iLCAibHQiOiAiPCIsCi0gICAgICAgICAgICAgICAgImFwb3MiOiAiJyIsICJxdW90IjogJyInCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5mZWVkID0gTm9uZSAjIG51a2UgY2lyY3VsYXIgcmVmZXJlbmNlCi0KLSAgICAgICAgZGVmIGhhbmRsZV9wcm9jKHNlbGYsIHRhZywgYXR0cik6Ci0gICAgICAgICAgICBtID0gcmUuc2VhcmNoKCJlbmNvZGluZ1xzKj1ccypbJ1wiXShbXlwiJ10rKVtcIiddIiwgYXR0cikKLSAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfeG1sKG0uZ3JvdXAoMSksIDEpCi0KLSAgICAgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZW50aXR5KToKLSAgICAgICAgICAgICMgPHN0cmluZz4gZW50aXR5Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShzZWxmLmVudGl0eVtlbnRpdHldKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoIiYlczsiICUgZW50aXR5KQotCiB0cnk6CiAgICAgZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKICAgICBpZiBub3QgaGFzYXR0cihleHBhdCwgIlBhcnNlckNyZWF0ZSIpOgpAQCAtNTg0LDggKzU0MSw3IEBACiAgICAgRXhwYXRQYXJzZXIgPSBOb25lICMgZXhwYXQgbm90IGF2YWlsYWJsZQogZWxzZToKICAgICBjbGFzcyBFeHBhdFBhcnNlcjoKLSAgICAgICAgIyBmYXN0IGV4cGF0IHBhcnNlciBmb3IgUHl0aG9uIDIuMCBhbmQgbGF0ZXIuICB0aGlzIGlzIGFib3V0Ci0gICAgICAgICMgNTAlIHNsb3dlciB0aGFuIHNnbWxvcCwgb24gcm91bmR0cmlwIHRlc3RpbmcKKyAgICAgICAgIyBmYXN0IGV4cGF0IHBhcnNlciBmb3IgUHl0aG9uIDIuMCBhbmQgbGF0ZXIuCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQpOgogICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKE5vbmUsIE5vbmUpCiAgICAgICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKQEAgLTYwNiw4ICs1NjIsNyBAQAogCiBjbGFzcyBTbG93UGFyc2VyOgogICAgICIiIkRlZmF1bHQgWE1MIHBhcnNlciAoYmFzZWQgb24geG1sbGliLlhNTFBhcnNlcikuIiIiCi0gICAgIyB0aGlzIGlzIGFib3V0IDEwIHRpbWVzIHNsb3dlciB0aGFuIHNnbWxvcCwgb24gcm91bmR0cmlwCi0gICAgIyB0ZXN0aW5nLgorICAgICMgdGhpcyBpcyB0aGUgc2xvd2VzdCBwYXJzZXIuCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhcmdldCk6CiAgICAgICAgIGltcG9ydCB4bWxsaWIgIyBsYXp5IHN1YmNsYXNzaW5nICghKQogICAgICAgICBpZiB4bWxsaWIuWE1MUGFyc2VyIG5vdCBpbiBTbG93UGFyc2VyLl9fYmFzZXNfXzoKQEAgLTEwNjksOCArMTAyNCw2IEBACiAgICAgICAgIHRhcmdldCA9IFVubWFyc2hhbGxlcih1c2VfZGF0ZXRpbWU9dXNlX2RhdGV0aW1lKQogICAgICAgICBpZiBGYXN0UGFyc2VyOgogICAgICAgICAgICAgcGFyc2VyID0gRmFzdFBhcnNlcih0YXJnZXQpCi0gICAgICAgIGVsaWYgU2dtbG9wUGFyc2VyOgotICAgICAgICAgICAgcGFyc2VyID0gU2dtbG9wUGFyc2VyKHRhcmdldCkKICAgICAgICAgZWxpZiBFeHBhdFBhcnNlcjoKICAgICAgICAgICAgIHBhcnNlciA9IEV4cGF0UGFyc2VyKHRhcmdldCkKICAgICAgICAgZWxzZToKQEAgLTExODMsNiArMTEzNiw3OCBAQAogICAgIHAuY2xvc2UoKQogICAgIHJldHVybiB1LmNsb3NlKCksIHUuZ2V0bWV0aG9kbmFtZSgpCiAKKyMjCisjIEVuY29kZSBhIHN0cmluZyB1c2luZyB0aGUgZ3ppcCBjb250ZW50IGVuY29kaW5nIHN1Y2ggYXMgc3BlY2lmaWVkIGJ5IHRoZQorIyBDb250ZW50LUVuY29kaW5nOiBnemlwCisjIGluIHRoZSBIVFRQIGhlYWRlciwgYXMgZGVzY3JpYmVkIGluIFJGQyAxOTUyCisjCisjIEBwYXJhbSBkYXRhIHRoZSB1bmVuY29kZWQgZGF0YQorIyBAcmV0dXJuIHRoZSBlbmNvZGVkIGRhdGEKKworZGVmIGd6aXBfZW5jb2RlKGRhdGEpOgorICAgICIiImRhdGEgLT4gZ3ppcCBlbmNvZGVkIGRhdGEKKworICAgIEVuY29kZSBkYXRhIHVzaW5nIHRoZSBnemlwIGNvbnRlbnQgZW5jb2RpbmcgYXMgZGVzY3JpYmVkIGluIFJGQyAxOTUyCisgICAgIiIiCisgICAgaWYgbm90IGd6aXA6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0id2IiLCBmaWxlb2JqPWYsIGNvbXByZXNzbGV2ZWw9MSkKKyAgICBnemYud3JpdGUoZGF0YSkKKyAgICBnemYuY2xvc2UoKQorICAgIGVuY29kZWQgPSBmLmdldHZhbHVlKCkKKyAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gZW5jb2RlZAorCisjIworIyBEZWNvZGUgYSBzdHJpbmcgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBzdWNoIGFzIHNwZWNpZmllZCBieSB0aGUKKyMgQ29udGVudC1FbmNvZGluZzogZ3ppcAorIyBpbiB0aGUgSFRUUCBoZWFkZXIsIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1MgorIworIyBAcGFyYW0gZGF0YSBUaGUgZW5jb2RlZCBkYXRhCisjIEByZXR1cm4gdGhlIHVuZW5jb2RlZCBkYXRhCisjIEByYWlzZXMgVmFsdWVFcnJvciBpZiBkYXRhIGlzIG5vdCBjb3JyZWN0bHkgY29kZWQuCisKK2RlZiBnemlwX2RlY29kZShkYXRhKToKKyAgICAiIiJnemlwIGVuY29kZWQgZGF0YSAtPiB1bmVuY29kZWQgZGF0YQorCisgICAgRGVjb2RlIGRhdGEgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIKKyAgICAiIiIKKyAgICBpZiBub3QgZ3ppcDoKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTyhkYXRhKQorICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0icmIiLCBmaWxlb2JqPWYpCisgICAgdHJ5OgorICAgICAgICBkZWNvZGVkID0gZ3pmLnJlYWQoKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQorICAgIGYuY2xvc2UoKQorICAgIGd6Zi5jbG9zZSgpCisgICAgcmV0dXJuIGRlY29kZWQKKworIyMKKyMgUmV0dXJuIGEgZGVjb2RlZCBmaWxlLWxpa2Ugb2JqZWN0IGZvciB0aGUgZ3ppcCBlbmNvZGluZworIyBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIuCisjCisjIEBwYXJhbSByZXNwb25zZSBBIHN0cmVhbSBzdXBwb3J0aW5nIGEgcmVhZCgpIG1ldGhvZAorIyBAcmV0dXJuIGEgZmlsZS1saWtlIG9iamVjdCB0aGF0IHRoZSBkZWNvZGVkIGRhdGEgY2FuIGJlIHJlYWQoKSBmcm9tCisKK2NsYXNzIEd6aXBEZWNvZGVkUmVzcG9uc2UoZ3ppcC5HemlwRmlsZSBpZiBnemlwIGVsc2Ugb2JqZWN0KToKKyAgICAiIiJhIGZpbGUtbGlrZSBvYmplY3QgdG8gZGVjb2RlIGEgcmVzcG9uc2UgZW5jb2RlZCB3aXRoIHRoZSBnemlwCisgICAgbWV0aG9kLCBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgI3Jlc3BvbnNlIGRvZXNuJ3Qgc3VwcG9ydCB0ZWxsKCkgYW5kIHJlYWQoKSwgcmVxdWlyZWQgYnkKKyAgICAgICAgI0d6aXBGaWxlCisgICAgICAgIGlmIG5vdCBnemlwOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLnN0cmluZ2lvID0gU3RyaW5nSU8uU3RyaW5nSU8ocmVzcG9uc2UucmVhZCgpKQorICAgICAgICBnemlwLkd6aXBGaWxlLl9faW5pdF9fKHNlbGYsIG1vZGU9InJiIiwgZmlsZW9iaj1zZWxmLnN0cmluZ2lvKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBnemlwLkd6aXBGaWxlLmNsb3NlKHNlbGYpCisgICAgICAgIHNlbGYuc3RyaW5naW8uY2xvc2UoKQorCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgcmVxdWVzdCBkaXNwYXRjaGVyCkBAIC0xMjEwLDggKzEyMzUsMzkgQEAKICAgICAjIGNsaWVudCBpZGVudGlmaWVyIChtYXkgYmUgb3ZlcnJpZGRlbikKICAgICB1c2VyX2FnZW50ID0gInhtbHJwY2xpYi5weS8lcyAoYnkgd3d3LnB5dGhvbndhcmUuY29tKSIgJSBfX3ZlcnNpb25fXwogCisgICAgI2lmIHRydWUsIHdlJ2xsIHJlcXVlc3QgZ3ppcCBlbmNvZGluZworICAgIGFjY2VwdF9nemlwX2VuY29kaW5nID0gVHJ1ZQorCisgICAgIyBpZiBwb3NpdGl2ZSwgZW5jb2RlIHJlcXVlc3QgdXNpbmcgZ3ppcCBpZiBpdCBleGNlZWRzIHRoaXMgdGhyZXNob2xkCisgICAgIyBub3RlIHRoYXQgbWFueSBzZXJ2ZXIgd2lsbCBnZXQgY29uZnVzZWQsIHNvIG9ubHkgdXNlIGl0IGlmIHlvdSBrbm93CisgICAgIyB0aGF0IHRoZXkgY2FuIGRlY29kZSBzdWNoIGEgcmVxdWVzdAorICAgIGVuY29kZV90aHJlc2hvbGQgPSBOb25lICNOb25lID0gZG9uJ3QgZW5jb2RlCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2RhdGV0aW1lPTApOgogICAgICAgICBzZWxmLl91c2VfZGF0ZXRpbWUgPSB1c2VfZGF0ZXRpbWUKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IChOb25lLCBOb25lKQorICAgICAgICBzZWxmLl9leHRyYV9oZWFkZXJzID0gW10KKyAgICAjIworICAgICMgU2VuZCBhIGNvbXBsZXRlIHJlcXVlc3QsIGFuZCBwYXJzZSB0aGUgcmVzcG9uc2UuCisgICAgIyBSZXRyeSByZXF1ZXN0IGlmIGEgY2FjaGVkIGNvbm5lY3Rpb24gaGFzIGRpc2Nvbm5lY3RlZC4KKyAgICAjCisgICAgIyBAcGFyYW0gaG9zdCBUYXJnZXQgaG9zdC4KKyAgICAjIEBwYXJhbSBoYW5kbGVyIFRhcmdldCBQUkMgaGFuZGxlci4KKyAgICAjIEBwYXJhbSByZXF1ZXN0X2JvZHkgWE1MLVJQQyByZXF1ZXN0IGJvZHkuCisgICAgIyBAcGFyYW0gdmVyYm9zZSBEZWJ1Z2dpbmcgZmxhZy4KKyAgICAjIEByZXR1cm4gUGFyc2VkIHJlc3BvbnNlLgorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlPTApOgorICAgICAgICAjcmV0cnkgcmVxdWVzdCBvbmNlIGlmIGNhY2hlZCBjb25uZWN0aW9uIGhhcyBnb25lIGNvbGQKKyAgICAgICAgZm9yIGkgaW4gKDAsIDEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNpbmdsZV9yZXF1ZXN0KGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELCBlcnJuby5FUElQRSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgaHR0cGxpYi5CYWRTdGF0dXNMaW5lOiAjY2xvc2UgYWZ0ZXIgd2Ugc2VudCByZXF1ZXN0CisgICAgICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICMjCiAgICAgIyBTZW5kIGEgY29tcGxldGUgcmVxdWVzdCwgYW5kIHBhcnNlIHRoZSByZXNwb25zZS4KQEAgLTEyMjIsMzUgKzEyNzgsMzkgQEAKICAgICAjIEBwYXJhbSB2ZXJib3NlIERlYnVnZ2luZyBmbGFnLgogICAgICMgQHJldHVybiBQYXJzZWQgcmVzcG9uc2UuCiAKLSAgICBkZWYgcmVxdWVzdChzZWxmLCBob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2U9MCk6CisgICAgZGVmIHNpbmdsZV9yZXF1ZXN0KHNlbGYsIGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZT0wKToKICAgICAgICAgIyBpc3N1ZSBYTUwtUlBDIHJlcXVlc3QKIAogICAgICAgICBoID0gc2VsZi5tYWtlX2Nvbm5lY3Rpb24oaG9zdCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIGguc2V0X2RlYnVnbGV2ZWwoMSkKIAotICAgICAgICBzZWxmLnNlbmRfcmVxdWVzdChoLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpCi0gICAgICAgIHNlbGYuc2VuZF9ob3N0KGgsIGhvc3QpCi0gICAgICAgIHNlbGYuc2VuZF91c2VyX2FnZW50KGgpCi0gICAgICAgIHNlbGYuc2VuZF9jb250ZW50KGgsIHJlcXVlc3RfYm9keSkKLQotICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMgPSBoLmdldHJlcGx5KCkKLQotICAgICAgICBpZiBlcnJjb2RlICE9IDIwMDoKLSAgICAgICAgICAgIHJhaXNlIFByb3RvY29sRXJyb3IoCi0gICAgICAgICAgICAgICAgaG9zdCArIGhhbmRsZXIsCi0gICAgICAgICAgICAgICAgZXJyY29kZSwgZXJybXNnLAotICAgICAgICAgICAgICAgIGhlYWRlcnMKLSAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQotCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNvY2sgPSBoLl9jb25uLnNvY2sKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXF1ZXN0KGgsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9ob3N0KGgsIGhvc3QpCisgICAgICAgICAgICBzZWxmLnNlbmRfdXNlcl9hZ2VudChoKQorICAgICAgICAgICAgc2VsZi5zZW5kX2NvbnRlbnQoaCwgcmVxdWVzdF9ib2R5KQogCi0gICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9yZXNwb25zZShoLmdldGZpbGUoKSwgc29jaykKKyAgICAgICAgICAgIHJlc3BvbnNlID0gaC5nZXRyZXNwb25zZShidWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1cyA9PSAyMDA6CisgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3Jlc3BvbnNlKHJlc3BvbnNlKQorICAgICAgICBleGNlcHQgRmF1bHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgIyBBbGwgdW5leHBlY3RlZCBlcnJvcnMgbGVhdmUgY29ubmVjdGlvbiBpbgorICAgICAgICAgICAgIyBhIHN0cmFuZ2Ugc3RhdGUsIHNvIHdlIGNsZWFyIGl0LgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICNkaXNjYXJkIGFueSByZXNwb25zZSBkYXRhIGFuZCByYWlzZSBleGNlcHRpb24KKyAgICAgICAgaWYgKHJlc3BvbnNlLmdldGhlYWRlcigiY29udGVudC1sZW5ndGgiLCAwKSk6CisgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkKKyAgICAgICAgcmFpc2UgUHJvdG9jb2xFcnJvcigKKyAgICAgICAgICAgIGhvc3QgKyBoYW5kbGVyLAorICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZWFzb24sCisgICAgICAgICAgICByZXNwb25zZS5tc2csCisgICAgICAgICAgICApCiAKICAgICAjIwogICAgICMgQ3JlYXRlIHBhcnNlci4KQEAgLTEyOTksMTAgKzEzNTksMjUgQEAKICAgICAjIEByZXR1cm4gQSBjb25uZWN0aW9uIGhhbmRsZS4KIAogICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CisgICAgICAgICNyZXR1cm4gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpZiBwb3NzaWJsZS4gIFRoaXMgYWxsb3dzCisgICAgICAgICNIVFRQLzEuMSBrZWVwLWFsaXZlLgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQorCiAgICAgICAgICMgY3JlYXRlIGEgSFRUUCBjb25uZWN0aW9uIG9iamVjdCBmcm9tIGEgaG9zdCBkZXNjcmlwdG9yCi0gICAgICAgIGltcG9ydCBodHRwbGliCi0gICAgICAgIGhvc3QsIGV4dHJhX2hlYWRlcnMsIHg1MDkgPSBzZWxmLmdldF9ob3N0X2luZm8oaG9zdCkKLSAgICAgICAgcmV0dXJuIGh0dHBsaWIuSFRUUChob3N0KQorICAgICAgICBjaG9zdCwgc2VsZi5fZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQorICAgICAgICAjc3RvcmUgdGhlIGhvc3QgYXJndW1lbnQgYWxvbmcgd2l0aCB0aGUgY29ubmVjdGlvbiBvYmplY3QKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IGhvc3QsIGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oY2hvc3QpCisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCisKKyAgICAjIworICAgICMgQ2xlYXIgYW55IGNhY2hlZCBjb25uZWN0aW9uIG9iamVjdC4KKyAgICAjIFVzZWQgaW4gdGhlIGV2ZW50IG9mIHNvY2tldCBlcnJvcnMuCisgICAgIworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGlvblsxXToKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25bMV0uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IChOb25lLCBOb25lKQogCiAgICAgIyMKICAgICAjIFNlbmQgcmVxdWVzdCBoZWFkZXIuCkBAIC0xMzEyLDE3ICsxMzg3LDI0IEBACiAgICAgIyBAcGFyYW0gcmVxdWVzdF9ib2R5IFhNTC1SUEMgYm9keS4KIAogICAgIGRlZiBzZW5kX3JlcXVlc3Qoc2VsZiwgY29ubmVjdGlvbiwgaGFuZGxlciwgcmVxdWVzdF9ib2R5KToKLSAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgaGFuZGxlcikKKyAgICAgICAgaWYgKHNlbGYuYWNjZXB0X2d6aXBfZW5jb2RpbmcgYW5kIGd6aXApOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgaGFuZGxlciwgc2tpcF9hY2NlcHRfZW5jb2Rpbmc9VHJ1ZSkKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJBY2NlcHQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCBoYW5kbGVyKQogCiAgICAgIyMKICAgICAjIFNlbmQgaG9zdCBuYW1lLgogICAgICMKICAgICAjIEBwYXJhbSBjb25uZWN0aW9uIENvbm5lY3Rpb24gaGFuZGxlLgogICAgICMgQHBhcmFtIGhvc3QgSG9zdCBuYW1lLgorICAgICMKKyAgICAjIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBhZGQgdGhlICJIb3N0IgorICAgICMgaGVhZGVyIGFueW1vcmUsIGl0IGlzIGRvbmUgYXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCkgaW4KKyAgICAjIHNlbmRfcmVxdWVzdCgpIGFib3ZlLgogCiAgICAgZGVmIHNlbmRfaG9zdChzZWxmLCBjb25uZWN0aW9uLCBob3N0KToKLSAgICAgICAgaG9zdCwgZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQotICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiSG9zdCIsIGhvc3QpCisgICAgICAgIGV4dHJhX2hlYWRlcnMgPSBzZWxmLl9leHRyYV9oZWFkZXJzCiAgICAgICAgIGlmIGV4dHJhX2hlYWRlcnM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4dHJhX2hlYWRlcnMsIERpY3RUeXBlKToKICAgICAgICAgICAgICAgICBleHRyYV9oZWFkZXJzID0gZXh0cmFfaGVhZGVycy5pdGVtcygpCkBAIC0xMzQ1LDEwICsxNDI3LDE2IEBACiAKICAgICBkZWYgc2VuZF9jb250ZW50KHNlbGYsIGNvbm5lY3Rpb24sIHJlcXVlc3RfYm9keSk6CiAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC94bWwiKQorCisgICAgICAgICNvcHRpb25hbGx5IGVuY29kZSB0aGUgcmVxdWVzdAorICAgICAgICBpZiAoc2VsZi5lbmNvZGVfdGhyZXNob2xkIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgc2VsZi5lbmNvZGVfdGhyZXNob2xkIDwgbGVuKHJlcXVlc3RfYm9keSkgYW5kCisgICAgICAgICAgICBnemlwKToKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJDb250ZW50LUVuY29kaW5nIiwgImd6aXAiKQorICAgICAgICAgICAgcmVxdWVzdF9ib2R5ID0gZ3ppcF9lbmNvZGUocmVxdWVzdF9ib2R5KQorCiAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIHN0cihsZW4ocmVxdWVzdF9ib2R5KSkpCi0gICAgICAgIGNvbm5lY3Rpb24uZW5kaGVhZGVycygpCi0gICAgICAgIGlmIHJlcXVlc3RfYm9keToKLSAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZChyZXF1ZXN0X2JvZHkpCisgICAgICAgIGNvbm5lY3Rpb24uZW5kaGVhZGVycyhyZXF1ZXN0X2JvZHkpCiAKICAgICAjIwogICAgICMgUGFyc2UgcmVzcG9uc2UuCkBAIC0xMzU2LDM3ICsxNDQ0LDMwIEBACiAgICAgIyBAcGFyYW0gZmlsZSBTdHJlYW0uCiAgICAgIyBAcmV0dXJuIFJlc3BvbnNlIHR1cGxlIGFuZCB0YXJnZXQgbWV0aG9kLgogCi0gICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIGZpbGUpOgotICAgICAgICAjIGNvbXBhdGliaWxpdHkgaW50ZXJmYWNlCi0gICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9yZXNwb25zZShmaWxlLCBOb25lKQorICAgIGRlZiBwYXJzZV9yZXNwb25zZShzZWxmLCByZXNwb25zZSk6CisgICAgICAgICMgcmVhZCByZXNwb25zZSBkYXRhIGZyb20gaHR0cHJlc3BvbnNlLCBhbmQgcGFyc2UgaXQKIAotICAgICMjCi0gICAgIyBQYXJzZSByZXNwb25zZSAoYWx0ZXJuYXRlIGludGVyZmFjZSkuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlCi0gICAgIyBwYXJzZV9yZXNwb25zZSBtZXRob2QsIGJ1dCBhbHNvIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlCi0gICAgIyB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QgKHdoZXJlIGF2YWlsYWJsZSkuCi0gICAgIwotICAgICMgQHBhcmFtIGZpbGUgU3RyZWFtLgotICAgICMgQHBhcmFtIHNvY2sgU29ja2V0IGhhbmRsZSAob3IgTm9uZSwgaWYgdGhlIHNvY2tldCBvYmplY3QKLSAgICAjICAgIGNvdWxkIG5vdCBiZSBhY2Nlc3NlZCkuCi0gICAgIyBAcmV0dXJuIFJlc3BvbnNlIHR1cGxlIGFuZCB0YXJnZXQgbWV0aG9kLgotCi0gICAgZGVmIF9wYXJzZV9yZXNwb25zZShzZWxmLCBmaWxlLCBzb2NrKToKLSAgICAgICAgIyByZWFkIHJlc3BvbnNlIGZyb20gaW5wdXQgZmlsZS9zb2NrZXQsIGFuZCBwYXJzZSBpdAorICAgICAgICAjIENoZWNrIGZvciBuZXcgaHR0cCByZXNwb25zZSBvYmplY3QsIGVsc2UgaXQgaXMgYSBmaWxlIG9iamVjdAorICAgICAgICBpZiBoYXNhdHRyKHJlc3BvbnNlLCdnZXRoZWFkZXInKToKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLmdldGhlYWRlcigiQ29udGVudC1FbmNvZGluZyIsICIiKSA9PSAiZ3ppcCI6CisgICAgICAgICAgICAgICAgc3RyZWFtID0gR3ppcERlY29kZWRSZXNwb25zZShyZXNwb25zZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RyZWFtID0gcmVzcG9uc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmVhbSA9IHJlc3BvbnNlCiAKICAgICAgICAgcCwgdSA9IHNlbGYuZ2V0cGFyc2VyKCkKIAogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgaWYgc29jazoKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNvY2sucmVjdigxMDI0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IGZpbGUucmVhZCgxMDI0KQotICAgICAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgZGF0YSA9IHN0cmVhbS5yZWFkKDEwMjQpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50ICJib2R5OiIsIHJlcHIocmVzcG9uc2UpCi0gICAgICAgICAgICBwLmZlZWQocmVzcG9uc2UpCisgICAgICAgICAgICAgICAgcHJpbnQgImJvZHk6IiwgcmVwcihkYXRhKQorICAgICAgICAgICAgcC5mZWVkKGRhdGEpCiAKLSAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIGlmIHN0cmVhbSBpcyBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICBzdHJlYW0uY2xvc2UoKQogICAgICAgICBwLmNsb3NlKCkKIAogICAgICAgICByZXR1cm4gdS5jbG9zZSgpCkBAIC0xNDAwLDE4ICsxNDgxLDIwIEBACiAgICAgIyBGSVhNRTogbW9zdGx5IHVudGVzdGVkCiAKICAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQogICAgICAgICAjIGNyZWF0ZSBhIEhUVFBTIGNvbm5lY3Rpb24gb2JqZWN0IGZyb20gYSBob3N0IGRlc2NyaXB0b3IKICAgICAgICAgIyBob3N0IG1heSBiZSBhIHN0cmluZywgb3IgYSAoaG9zdCwgeDUwOS1kaWN0KSB0dXBsZQotICAgICAgICBpbXBvcnQgaHR0cGxpYgotICAgICAgICBob3N0LCBleHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIEhUVFBTID0gaHR0cGxpYi5IVFRQUworICAgICAgICAgICAgSFRUUFMgPSBodHRwbGliLkhUVFBTQ29ubmVjdGlvbgogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgICAgICAgICJ5b3VyIHZlcnNpb24gb2YgaHR0cGxpYiBkb2Vzbid0IHN1cHBvcnQgSFRUUFMiCiAgICAgICAgICAgICAgICAgKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEhUVFBTKGhvc3QsIE5vbmUsICoqKHg1MDkgb3Ige30pKQorICAgICAgICAgICAgY2hvc3QsIHNlbGYuX2V4dHJhX2hlYWRlcnMsIHg1MDkgPSBzZWxmLmdldF9ob3N0X2luZm8oaG9zdCkKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBIVFRQUyhjaG9zdCwgTm9uZSwgKiooeDUwOSBvciB7fSkpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQogCiAjIwogIyBTdGFuZGFyZCBzZXJ2ZXIgcHJveHkuICBUaGlzIGNsYXNzIGVzdGFibGlzaGVzIGEgdmlydHVhbCBjb25uZWN0aW9uCkBAIC0xNDc2LDYgKzE1NTksOSBAQAogICAgICAgICBzZWxmLl9fdmVyYm9zZSA9IHZlcmJvc2UKICAgICAgICAgc2VsZi5fX2FsbG93X25vbmUgPSBhbGxvd19ub25lCiAKKyAgICBkZWYgX19jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fX3RyYW5zcG9ydC5jbG9zZSgpCisKICAgICBkZWYgX19yZXF1ZXN0KHNlbGYsIG1ldGhvZG5hbWUsIHBhcmFtcyk6CiAgICAgICAgICMgY2FsbCBhIG1ldGhvZCBvbiB0aGUgcmVtb3RlIHNlcnZlcgogCkBAIC0xNTA5LDYgKzE1OTUsMTYgQEAKICAgICAjIG5vdGU6IHRvIGNhbGwgYSByZW1vdGUgb2JqZWN0IHdpdGggYW4gbm9uLXN0YW5kYXJkIG5hbWUsIHVzZQogICAgICMgcmVzdWx0IGdldGF0dHIoc2VydmVyLCAic3RyYW5nZS1weXRob24tbmFtZSIpKGFyZ3MpCiAKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiIkEgd29ya2Fyb3VuZCB0byBnZXQgc3BlY2lhbCBhdHRyaWJ1dGVzIG9uIHRoZSBTZXJ2ZXJQcm94eQorICAgICAgICAgICB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIG1hZ2ljIF9fZ2V0YXR0cl9fCisgICAgICAgICIiIgorICAgICAgICBpZiBhdHRyID09ICJjbG9zZSI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2Nsb3NlCisgICAgICAgIGVsaWYgYXR0ciA9PSAidHJhbnNwb3J0IjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fdHJhbnNwb3J0CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJBdHRyaWJ1dGUgJXIgbm90IGZvdW5kIiAlIChhdHRyLCkpCisKICMgY29tcGF0aWJpbGl0eQogCiBTZXJ2ZXIgPSBTZXJ2ZXJQcm94eQpkaWZmIC0tZ2l0IGEvTGliL3ppcGZpbGUucHkgYi9MaWIvemlwZmlsZS5weQppbmRleCAzNGIzZjFhLi43ZTNjYWYwIDEwMDY0NAotLS0gYS9MaWIvemlwZmlsZS5weQorKysgYi9MaWIvemlwZmlsZS5weQpAQCAtMyw2ICszLDggQEAKICIiIgogaW1wb3J0IHN0cnVjdCwgb3MsIHRpbWUsIHN5cywgc2h1dGlsCiBpbXBvcnQgYmluYXNjaWksIGNTdHJpbmdJTywgc3RhdAoraW1wb3J0IGlvCitpbXBvcnQgcmUKIAogdHJ5OgogICAgIGltcG9ydCB6bGliICMgV2UgbWF5IG5lZWQgaXRzIGNvbXByZXNzaW9uIG1ldGhvZApAQCAtMTI4LDIzICsxMzAsNDEgQEAKIF9DRDY0X0RJUkVDVE9SWV9TSVpFID0gOAogX0NENjRfT0ZGU0VUX1NUQVJUX0NFTlRESVIgPSA5CiAKLWRlZiBpc196aXBmaWxlKGZpbGVuYW1lKToKLSAgICAiIiJRdWlja2x5IHNlZSBpZiBmaWxlIGlzIGEgWklQIGZpbGUgYnkgY2hlY2tpbmcgdGhlIG1hZ2ljIG51bWJlci4iIiIKK2RlZiBfY2hlY2tfemlwZmlsZShmcCk6CiAgICAgdHJ5OgotICAgICAgICBmcGluID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZW5kcmVjID0gX0VuZFJlY0RhdGEoZnBpbikKLSAgICAgICAgZnBpbi5jbG9zZSgpCi0gICAgICAgIGlmIGVuZHJlYzoKLSAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgICAgICAgICAjIGZpbGUgaGFzIGNvcnJlY3QgbWFnaWMgbnVtYmVyCisgICAgICAgIGlmIF9FbmRSZWNEYXRhKGZwKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgIyBmaWxlIGhhcyBjb3JyZWN0IG1hZ2ljIG51bWJlcgogICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIEZhbHNlCiAKK2RlZiBpc196aXBmaWxlKGZpbGVuYW1lKToKKyAgICAiIiJRdWlja2x5IHNlZSBpZiBhIGZpbGUgaXMgYSBaSVAgZmlsZSBieSBjaGVja2luZyB0aGUgbWFnaWMgbnVtYmVyLgorCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IG1heSBiZSBhIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCB0b28uCisgICAgIiIiCisgICAgcmVzdWx0ID0gRmFsc2UKKyAgICB0cnk6CisgICAgICAgIGlmIGhhc2F0dHIoZmlsZW5hbWUsICJyZWFkIik6CisgICAgICAgICAgICByZXN1bHQgPSBfY2hlY2tfemlwZmlsZShmcD1maWxlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NoZWNrX3ppcGZpbGUoZnApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gcmVzdWx0CisKIGRlZiBfRW5kUmVjRGF0YTY0KGZwaW4sIG9mZnNldCwgZW5kcmVjKToKICAgICAiIiIKICAgICBSZWFkIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzIGFuZCB1c2UgdGhhdCB0byB1cGRhdGUgZW5kcmVjCiAgICAgIiIiCi0gICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyKQorICAgIHRyeToKKyAgICAgICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAjIElmIHRoZSBzZWVrIGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gYSBaSVA2NAorICAgICAgICAjIGVuZC1vZi1hcmNoaXZlIHJlY29yZCwgc28ganVzdCByZXR1cm4gdGhlIGVuZCByZWNvcmQgd2Ugd2VyZSBnaXZlbi4KKyAgICAgICAgcmV0dXJuIGVuZHJlYworCiAgICAgZGF0YSA9IGZwaW4ucmVhZChzaXplRW5kQ2VudERpcjY0TG9jYXRvcikKICAgICBzaWcsIGRpc2tubywgcmVsb2ZmLCBkaXNrcyA9IHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwgZGF0YSkKICAgICBpZiBzaWcgIT0gc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvcjoKQEAgLTQzOSwxOTggKzQ1OSwxOTQgQEAKICAgICAgICAgc2VsZi5fVXBkYXRlS2V5cyhjKQogICAgICAgICByZXR1cm4gYwogCi1jbGFzcyBaaXBFeHRGaWxlOgorY2xhc3MgWmlwRXh0RmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAgICAgIiIiRmlsZS1saWtlIG9iamVjdCBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIG1lbWJlci4KICAgICAgICBJcyByZXR1cm5lZCBieSBaaXBGaWxlLm9wZW4oKS4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlb2JqLCB6aXBpbmZvLCBkZWNyeXB0PU5vbmUpOgotICAgICAgICBzZWxmLmZpbGVvYmogPSBmaWxlb2JqCi0gICAgICAgIHNlbGYuZGVjcnlwdGVyID0gZGVjcnlwdAotICAgICAgICBzZWxmLmJ5dGVzX3JlYWQgPSAwTAotICAgICAgICBzZWxmLnJhd2J1ZmZlciA9ICcnCi0gICAgICAgIHNlbGYucmVhZGJ1ZmZlciA9ICcnCi0gICAgICAgIHNlbGYubGluZWJ1ZmZlciA9ICcnCi0gICAgICAgIHNlbGYuZW9mID0gRmFsc2UKLSAgICAgICAgc2VsZi51bml2X25ld2xpbmVzID0gRmFsc2UKLSAgICAgICAgc2VsZi5ubFNlcHMgPSAoIlxuIiwgKQotICAgICAgICBzZWxmLmxhc3RkaXNjYXJkID0gJycKKyAgICAjIE1heCBzaXplIHN1cHBvcnRlZCBieSBkZWNvbXByZXNzb3IuCisgICAgTUFYX04gPSAxIDw8IDMxIC0gMQogCi0gICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSA9IHppcGluZm8uY29tcHJlc3NfdHlwZQotICAgICAgICBzZWxmLmNvbXByZXNzX3NpemUgPSB6aXBpbmZvLmNvbXByZXNzX3NpemUKKyAgICAjIFJlYWQgZnJvbSBjb21wcmVzc2VkIGZpbGVzIGluIDRrIGJsb2Nrcy4KKyAgICBNSU5fUkVBRF9TSVpFID0gNDA5NgogCi0gICAgICAgIHNlbGYuY2xvc2VkICA9IEZhbHNlCi0gICAgICAgIHNlbGYubW9kZSAgICA9ICJyIgorICAgICMgU2VhcmNoIGZvciB1bml2ZXJzYWwgbmV3bGluZXMgb3IgbGluZSBjaHVua3MuCisgICAgUEFUVEVSTiA9IHJlLmNvbXBpbGUocideKD9QPGNodW5rPlteXHJcbl0rKXwoP1A8bmV3bGluZT5cbnxcclxuPyknKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVvYmosIG1vZGUsIHppcGluZm8sIGRlY3J5cHRlcj1Ob25lKToKKyAgICAgICAgc2VsZi5fZmlsZW9iaiA9IGZpbGVvYmoKKyAgICAgICAgc2VsZi5fZGVjcnlwdGVyID0gZGVjcnlwdGVyCisKKyAgICAgICAgc2VsZi5fY29tcHJlc3NfdHlwZSA9IHppcGluZm8uY29tcHJlc3NfdHlwZQorICAgICAgICBzZWxmLl9jb21wcmVzc19zaXplID0gemlwaW5mby5jb21wcmVzc19zaXplCisgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPSB6aXBpbmZvLmNvbXByZXNzX3NpemUKKworICAgICAgICBpZiBzZWxmLl9jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKKyAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHpsaWIuZGVjb21wcmVzc29iaigtMTUpCisgICAgICAgIHNlbGYuX3VuY29uc3VtZWQgPSAnJworCisgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSAnJworICAgICAgICBzZWxmLl9vZmZzZXQgPSAwCisKKyAgICAgICAgc2VsZi5fdW5pdmVyc2FsID0gJ1UnIGluIG1vZGUKKyAgICAgICAgc2VsZi5uZXdsaW5lcyA9IE5vbmUKKworICAgICAgICAjIEFkanVzdCByZWFkIHNpemUgZm9yIGVuY3J5cHRlZCBmaWxlcyBzaW5jZSB0aGUgZmlyc3QgMTIgYnl0ZXMKKyAgICAgICAgIyBhcmUgZm9yIHRoZSBlbmNyeXB0aW9uL3Bhc3N3b3JkIGluZm9ybWF0aW9uLgorICAgICAgICBpZiBzZWxmLl9kZWNyeXB0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IC09IDEyCisKKyAgICAgICAgc2VsZi5tb2RlID0gbW9kZQogICAgICAgICBzZWxmLm5hbWUgPSB6aXBpbmZvLmZpbGVuYW1lCiAKLSAgICAgICAgIyByZWFkIGZyb20gY29tcHJlc3NlZCBmaWxlcyBpbiA2NGsgYmxvY2tzCi0gICAgICAgIHNlbGYuY29tcHJlYWRzaXplID0gNjQqMTAyNAotICAgICAgICBpZiBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgc2VsZi5kYyA9IHpsaWIuZGVjb21wcmVzc29iaigtMTUpCi0KLSAgICBkZWYgc2V0X3VuaXZfbmV3bGluZXMoc2VsZiwgdW5pdl9uZXdsaW5lcyk6Ci0gICAgICAgIHNlbGYudW5pdl9uZXdsaW5lcyA9IHVuaXZfbmV3bGluZXMKLQotICAgICAgICAjIHBpY2sgbGluZSBzZXBhcmF0b3IgY2hhcihzKSBiYXNlZCBvbiB1bml2ZXJzYWwgbmV3bGluZXMgZmxhZwotICAgICAgICBzZWxmLm5sU2VwcyA9ICgiXG4iLCApCi0gICAgICAgIGlmIHNlbGYudW5pdl9uZXdsaW5lczoKLSAgICAgICAgICAgIHNlbGYubmxTZXBzID0gKCJcclxuIiwgIlxyIiwgIlxuIikKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBuZXh0bGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbmV4dGxpbmU6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCkKLQotICAgICAgICByZXR1cm4gbmV4dGxpbmUKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCi0KLSAgICBkZWYgX2NoZWNrZm9ybmV3bGluZShzZWxmKToKLSAgICAgICAgbmwsIG5sbGVuID0gLTEsIC0xCi0gICAgICAgIGlmIHNlbGYubGluZWJ1ZmZlcjoKLSAgICAgICAgICAgICMgdWdseSBjaGVjayBmb3IgY2FzZXMgd2hlcmUgaGFsZiBvZiBhbiBcclxuIHBhaXIgd2FzCi0gICAgICAgICAgICAjIHJlYWQgb24gdGhlIGxhc3QgcGFzcywgYW5kIHRoZSBcciB3YXMgZGlzY2FyZGVkLiAgSW4gdGhpcwotICAgICAgICAgICAgIyBjYXNlIHdlIGp1c3QgdGhyb3cgYXdheSB0aGUgXG4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIuCi0gICAgICAgICAgICBpZiAoc2VsZi5sYXN0ZGlzY2FyZCwgc2VsZi5saW5lYnVmZmVyWzBdKSA9PSAoJ1xyJywnXG4nKToKLSAgICAgICAgICAgICAgICBzZWxmLmxpbmVidWZmZXIgPSBzZWxmLmxpbmVidWZmZXJbMTpdCi0KLSAgICAgICAgICAgIGZvciBzZXAgaW4gc2VsZi5ubFNlcHM6Ci0gICAgICAgICAgICAgICAgbmwgPSBzZWxmLmxpbmVidWZmZXIuZmluZChzZXApCi0gICAgICAgICAgICAgICAgaWYgbmwgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgbmxsZW4gPSBsZW4oc2VwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmwsIG5sbGVuCi0KLSAgICAgICAgcmV0dXJuIG5sLCBubGxlbgotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemUgPSAtMSk6Ci0gICAgICAgICIiIlJlYWQgYSBsaW5lIHdpdGggYXBwcm94LiBzaXplLiBJZiBzaXplIGlzIG5lZ2F0aXZlLAotICAgICAgICAgICByZWFkIGEgd2hvbGUgbGluZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNpemUgPCAwOgotICAgICAgICAgICAgc2l6ZSA9IHN5cy5tYXhpbnQKLSAgICAgICAgZWxpZiBzaXplID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQotICAgICAgICAjIGNoZWNrIGZvciBhIG5ld2xpbmUgYWxyZWFkeSBpbiBidWZmZXIKLSAgICAgICAgbmwsIG5sbGVuID0gc2VsZi5fY2hlY2tmb3JuZXdsaW5lKCkKLQotICAgICAgICBpZiBubCA+PSAwOgotICAgICAgICAgICAgIyB0aGUgbmV4dCBsaW5lIHdhcyBhbHJlYWR5IGluIHRoZSBidWZmZXIKLSAgICAgICAgICAgIG5sID0gbWluKG5sLCBzaXplKQorICAgICAgICBpZiBoYXNhdHRyKHppcGluZm8sICdDUkMnKToKKyAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NyYyA9IHppcGluZm8uQ1JDCisgICAgICAgICAgICBzZWxmLl9ydW5uaW5nX2NyYyA9IGNyYzMyKGInJykgJiAweGZmZmZmZmZmCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIG5vIGxpbmUgYnJlYWsgaW4gYnVmZmVyIC0gdHJ5IHRvIHJlYWQgbW9yZQotICAgICAgICAgICAgc2l6ZSAtPSBsZW4oc2VsZi5saW5lYnVmZmVyKQotICAgICAgICAgICAgd2hpbGUgbmwgPCAwIGFuZCBzaXplID4gMDoKLSAgICAgICAgICAgICAgICBidWYgPSBzZWxmLnJlYWQobWluKHNpemUsIDEwMCkpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLmxpbmVidWZmZXIgKz0gYnVmCi0gICAgICAgICAgICAgICAgc2l6ZSAtPSBsZW4oYnVmKQorICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfY3JjID0gTm9uZQogCi0gICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgYSBuZXdsaW5lIGluIGJ1ZmZlcgotICAgICAgICAgICAgICAgIG5sLCBubGxlbiA9IHNlbGYuX2NoZWNrZm9ybmV3bGluZSgpCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0uCiAKLSAgICAgICAgICAgICMgd2UgZWl0aGVyIHJhbiBvdXQgb2YgYnl0ZXMgaW4gdGhlIGZpbGUsIG9yCi0gICAgICAgICAgICAjIG1ldCB0aGUgc3BlY2lmaWVkIHNpemUgbGltaXQgd2l0aG91dCBmaW5kaW5nIGEgbmV3bGluZSwKLSAgICAgICAgICAgICMgc28gcmV0dXJuIGN1cnJlbnQgYnVmZmVyCi0gICAgICAgICAgICBpZiBubCA8IDA6Ci0gICAgICAgICAgICAgICAgcyA9IHNlbGYubGluZWJ1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYubGluZWJ1ZmZlciA9ICcnCi0gICAgICAgICAgICAgICAgcmV0dXJuIHMKLQotICAgICAgICBidWYgPSBzZWxmLmxpbmVidWZmZXJbOm5sXQotICAgICAgICBzZWxmLmxhc3RkaXNjYXJkID0gc2VsZi5saW5lYnVmZmVyW25sOm5sICsgbmxsZW5dCi0gICAgICAgIHNlbGYubGluZWJ1ZmZlciA9IHNlbGYubGluZWJ1ZmZlcltubCArIG5sbGVuOl0KLQotICAgICAgICAjIGxpbmUgaXMgYWx3YXlzIHJldHVybmVkIHdpdGggXG4gYXMgbmV3bGluZSBjaGFyIChleGNlcHQgcG9zc2libHkKLSAgICAgICAgIyBmb3IgYSBmaW5hbCBpbmNvbXBsZXRlIGxpbmUgaW4gdGhlIGZpbGUsIHdoaWNoIGlzIGhhbmRsZWQgYWJvdmUpLgotICAgICAgICByZXR1cm4gYnVmICsgIlxuIgotCi0gICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBzaXplaGludCA9IC0xKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCB3aXRoIGFsbCAoZm9sbG93aW5nKSBsaW5lcy4gVGhlIHNpemVoaW50IHBhcmFtZXRlcgotICAgICAgICBpcyBpZ25vcmVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIElmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIGlmIG5vdCBzZWxmLl91bml2ZXJzYWwgYW5kIGxpbWl0IDwgMDoKKyAgICAgICAgICAgICMgU2hvcnRjdXQgY29tbW9uIGNhc2UgLSBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlci4KKyAgICAgICAgICAgIGkgPSBzZWxmLl9yZWFkYnVmZmVyLmZpbmQoJ1xuJywgc2VsZi5fb2Zmc2V0KSArIDEKKyAgICAgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDogaV0KKyAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQgPSBpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKworICAgICAgICBpZiBub3Qgc2VsZi5fdW5pdmVyc2FsOgorICAgICAgICAgICAgcmV0dXJuIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRsaW5lKHNlbGYsIGxpbWl0KQorCisgICAgICAgIGxpbmUgPSAnJworICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKGxpbmUpIDwgbGltaXQ6CisgICAgICAgICAgICByZWFkYWhlYWQgPSBzZWxmLnBlZWsoMikKKyAgICAgICAgICAgIGlmIHJlYWRhaGVhZCA9PSAnJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFNlYXJjaCBmb3IgdW5pdmVyc2FsIG5ld2xpbmVzIG9yIGxpbmUgY2h1bmtzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGUgcGF0dGVybiByZXR1cm5zIGVpdGhlciBhIGxpbmUgY2h1bmsgb3IgYSBuZXdsaW5lLCBidXQgbm90CisgICAgICAgICAgICAjIGJvdGguIENvbWJpbmVkIHdpdGggcGVlaygyKSwgd2UgYXJlIGFzc3VyZWQgdGhhdCB0aGUgc2VxdWVuY2UKKyAgICAgICAgICAgICMgJ1xyXG4nIGlzIGFsd2F5cyByZXRyaWV2ZWQgY29tcGxldGVseSBhbmQgbmV2ZXIgc3BsaXQgaW50bworICAgICAgICAgICAgIyBzZXBhcmF0ZSBuZXdsaW5lcyAtICdccicsICdcbicgZHVlIHRvIGNvaW5jaWRlbnRhbCByZWFkYWhlYWRzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLlBBVFRFUk4uc2VhcmNoKHJlYWRhaGVhZCkKKyAgICAgICAgICAgIG5ld2xpbmUgPSBtYXRjaC5ncm91cCgnbmV3bGluZScpCisgICAgICAgICAgICBpZiBuZXdsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYubmV3bGluZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgaWYgbmV3bGluZSBub3QgaW4gc2VsZi5uZXdsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lcy5hcHBlbmQobmV3bGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQgKz0gbGVuKG5ld2xpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUgKyAnXG4nCisKKyAgICAgICAgICAgIGNodW5rID0gbWF0Y2guZ3JvdXAoJ2NodW5rJykKKyAgICAgICAgICAgIGlmIGxpbWl0ID49IDA6CisgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVua1s6IGxpbWl0IC0gbGVuKGxpbmUpXQorCisgICAgICAgICAgICBzZWxmLl9vZmZzZXQgKz0gbGVuKGNodW5rKQorICAgICAgICAgICAgbGluZSArPSBjaHVuaworCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcGVlayhzZWxmLCBuPTEpOgorICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4iIiIKKyAgICAgICAgaWYgbiA+IGxlbihzZWxmLl9yZWFkYnVmZmVyKSAtIHNlbGYuX29mZnNldDoKKyAgICAgICAgICAgIGNodW5rID0gc2VsZi5yZWFkKG4pCisgICAgICAgICAgICBzZWxmLl9vZmZzZXQgLT0gbGVuKGNodW5rKQorCisgICAgICAgICMgUmV0dXJuIHVwIHRvIDUxMiBieXRlcyB0byByZWR1Y2UgYWxsb2NhdGlvbiBvdmVyaGVhZCBmb3IgdGlnaHQgbG9vcHMuCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDogc2VsZi5fb2Zmc2V0ICsgNTEyXQorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLgorICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIGRhdGEgaXMgcmVhZCBhbmQgcmV0dXJuZWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuLgorICAgICAgICAiIiIKKyAgICAgICAgYnVmID0gJycKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IC0xCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZDEobikKKyAgICAgICAgICAgIGVsaWYgbiA+IGxlbihidWYpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQxKG4gLSBsZW4oYnVmKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgaWYgbGVuKGRhdGEpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgYnVmICs9IGRhdGEKIAotICAgIGRlZiByZWFkKHNlbGYsIHNpemUgPSBOb25lKToKLSAgICAgICAgIyBhY3QgbGlrZSBmaWxlKCkgb2JqIGFuZCByZXR1cm4gZW1wdHkgc3RyaW5nIGlmIHNpemUgaXMgMAotICAgICAgICBpZiBzaXplID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKKyAgICBkZWYgX3VwZGF0ZV9jcmMoc2VsZiwgbmV3ZGF0YSwgZW9mKToKKyAgICAgICAgIyBVcGRhdGUgdGhlIENSQyB1c2luZyB0aGUgZ2l2ZW4gZGF0YS4KKyAgICAgICAgaWYgc2VsZi5fZXhwZWN0ZWRfY3JjIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vIG5lZWQgdG8gY29tcHV0ZSB0aGUgQ1JDIGlmIHdlIGRvbid0IGhhdmUgYSByZWZlcmVuY2UgdmFsdWUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9ydW5uaW5nX2NyYyA9IGNyYzMyKG5ld2RhdGEsIHNlbGYuX3J1bm5pbmdfY3JjKSAmIDB4ZmZmZmZmZmYKKyAgICAgICAgIyBDaGVjayB0aGUgQ1JDIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgaWYgZW9mIGFuZCBzZWxmLl9ydW5uaW5nX2NyYyAhPSBzZWxmLl9leHBlY3RlZF9jcmM6CisgICAgICAgICAgICByYWlzZSBCYWRaaXBmaWxlKCJCYWQgQ1JDLTMyIGZvciBmaWxlICVyIiAlIHNlbGYubmFtZSkKIAotICAgICAgICAjIGRldGVybWluZSByZWFkIHNpemUKLSAgICAgICAgYnl0ZXNUb1JlYWQgPSBzZWxmLmNvbXByZXNzX3NpemUgLSBzZWxmLmJ5dGVzX3JlYWQKKyAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKIAotICAgICAgICAjIGFkanVzdCByZWFkIHNpemUgZm9yIGVuY3J5cHRlZCBmaWxlcyBzaW5jZSB0aGUgZmlyc3QgMTIgYnl0ZXMKLSAgICAgICAgIyBhcmUgZm9yIHRoZSBlbmNyeXB0aW9uL3Bhc3N3b3JkIGluZm9ybWF0aW9uCi0gICAgICAgIGlmIHNlbGYuZGVjcnlwdGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYnl0ZXNUb1JlYWQgLT0gMTIKKyAgICAgICAgIyBTaW1wbGlmeSBhbGdvcml0aG0gKGJyYW5jaGluZykgYnkgdHJhbnNmb3JtaW5nIG5lZ2F0aXZlIG4gdG8gbGFyZ2Ugbi4KKyAgICAgICAgaWYgbiA8IDAgb3IgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IHNlbGYuTUFYX04KIAotICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplID49IDA6Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX1NUT1JFRDoKLSAgICAgICAgICAgICAgICBsciA9IGxlbihzZWxmLnJlYWRidWZmZXIpCi0gICAgICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBtaW4oYnl0ZXNUb1JlYWQsIHNpemUgLSBscikKLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5yZWFkYnVmZmVyKSA+IHNpemU6Ci0gICAgICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBmZXdlciBieXRlcyB0aGFuIHdlJ3ZlIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgIyBwdWxsZWQgdGhyb3VnaCB0aGUgZGVjb21wcmVzc29yOyBkb24ndCByZWFkIGFueSBtb3JlCi0gICAgICAgICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgdXNlciB3aWxsIHVzZSB1cCB0aGUgYnVmZmVyLCBzbyByZWFkIHNvbWUgbW9yZQotICAgICAgICAgICAgICAgICAgICBsciA9IGxlbihzZWxmLnJhd2J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBtaW4oYnl0ZXNUb1JlYWQsIHNlbGYuY29tcHJlYWRzaXplIC0gbHIpCisgICAgICAgICMgQnl0ZXMgYXZhaWxhYmxlIGluIHJlYWQgYnVmZmVyLgorICAgICAgICBsZW5fcmVhZGJ1ZmZlciA9IGxlbihzZWxmLl9yZWFkYnVmZmVyKSAtIHNlbGYuX29mZnNldAogCi0gICAgICAgICMgYXZvaWQgcmVhZGluZyBwYXN0IGVuZCBvZiBmaWxlIGNvbnRlbnRzCi0gICAgICAgIGlmIGJ5dGVzVG9SZWFkICsgc2VsZi5ieXRlc19yZWFkID4gc2VsZi5jb21wcmVzc19zaXplOgotICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBzZWxmLmNvbXByZXNzX3NpemUgLSBzZWxmLmJ5dGVzX3JlYWQKKyAgICAgICAgIyBSZWFkIGZyb20gZmlsZS4KKyAgICAgICAgaWYgc2VsZi5fY29tcHJlc3NfbGVmdCA+IDAgYW5kIG4gPiBsZW5fcmVhZGJ1ZmZlciArIGxlbihzZWxmLl91bmNvbnN1bWVkKToKKyAgICAgICAgICAgIG5ieXRlcyA9IG4gLSBsZW5fcmVhZGJ1ZmZlciAtIGxlbihzZWxmLl91bmNvbnN1bWVkKQorICAgICAgICAgICAgbmJ5dGVzID0gbWF4KG5ieXRlcywgc2VsZi5NSU5fUkVBRF9TSVpFKQorICAgICAgICAgICAgbmJ5dGVzID0gbWluKG5ieXRlcywgc2VsZi5fY29tcHJlc3NfbGVmdCkKIAotICAgICAgICAjIHRyeSB0byByZWFkIGZyb20gZmlsZSAoaWYgbmVjZXNzYXJ5KQotICAgICAgICBpZiBieXRlc1RvUmVhZCA+IDA6Ci0gICAgICAgICAgICBieXRlcyA9IHNlbGYuZmlsZW9iai5yZWFkKGJ5dGVzVG9SZWFkKQotICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihieXRlcykKLSAgICAgICAgICAgIHNlbGYucmF3YnVmZmVyICs9IGJ5dGVzCisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZW9iai5yZWFkKG5ieXRlcykKKyAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgLT0gbGVuKGRhdGEpCiAKLSAgICAgICAgICAgICMgaGFuZGxlIGNvbnRlbnRzIG9mIHJhdyBidWZmZXIKLSAgICAgICAgICAgIGlmIHNlbGYucmF3YnVmZmVyOgotICAgICAgICAgICAgICAgIG5ld2RhdGEgPSBzZWxmLnJhd2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYucmF3YnVmZmVyID0gJycKKyAgICAgICAgICAgIGlmIGRhdGEgYW5kIHNlbGYuX2RlY3J5cHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkYXRhID0gJycuam9pbihtYXAoc2VsZi5fZGVjcnlwdGVyLCBkYXRhKSkKIAotICAgICAgICAgICAgICAgICMgZGVjcnlwdCBuZXcgZGF0YSBpZiB3ZSB3ZXJlIGdpdmVuIGFuIG9iamVjdCB0byBoYW5kbGUgdGhhdAotICAgICAgICAgICAgICAgIGlmIG5ld2RhdGEgYW5kIHNlbGYuZGVjcnlwdGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gJycuam9pbihtYXAoc2VsZi5kZWNyeXB0ZXIsIG5ld2RhdGEpKQorICAgICAgICAgICAgaWYgc2VsZi5fY29tcHJlc3NfdHlwZSA9PSBaSVBfU1RPUkVEOgorICAgICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9jcmMoZGF0YSwgZW9mPShzZWxmLl9jb21wcmVzc19sZWZ0PT0wKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkYnVmZmVyID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6XSArIGRhdGEKKyAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUHJlcGFyZSBkZWZsYXRlZCBieXRlcyBmb3IgZGVjb21wcmVzc2lvbi4KKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkICs9IGRhdGEKIAotICAgICAgICAgICAgICAgICMgZGVjb21wcmVzcyBuZXdseSByZWFkIGRhdGEgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICAgICAgaWYgbmV3ZGF0YSBhbmQgc2VsZi5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgICAgICAgICAgbmV3ZGF0YSA9IHNlbGYuZGMuZGVjb21wcmVzcyhuZXdkYXRhKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJhd2J1ZmZlciA9IHNlbGYuZGMudW5jb25zdW1lZF90YWlsCi0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZW9mIGFuZCBsZW4oc2VsZi5yYXdidWZmZXIpID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIHdlJ3JlIG91dCBvZiByYXcgYnl0ZXMgKGJvdGggZnJvbSB0aGUgZmlsZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGxvY2FsIGJ1ZmZlcik7IGZsdXNoIGp1c3QgdG8gbWFrZSBzdXJlIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWNvbXByZXNzb3IgaXMgZG9uZQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3ZGF0YSArPSBzZWxmLmRjLmZsdXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICMgcHJldmVudCBkZWNvbXByZXNzb3IgZnJvbSBiZWluZyB1c2VkIGFnYWluCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRjID0gTm9uZQorICAgICAgICAjIEhhbmRsZSB1bmNvbnN1bWVkIGRhdGEuCisgICAgICAgIGlmIChsZW4oc2VsZi5fdW5jb25zdW1lZCkgPiAwIGFuZCBuID4gbGVuX3JlYWRidWZmZXIgYW5kCisgICAgICAgICAgICBzZWxmLl9jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRCk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MoCisgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCwKKyAgICAgICAgICAgICAgICBtYXgobiAtIGxlbl9yZWFkYnVmZmVyLCBzZWxmLk1JTl9SRUFEX1NJWkUpCisgICAgICAgICAgICApCiAKLSAgICAgICAgICAgICAgICBzZWxmLnJlYWRidWZmZXIgKz0gbmV3ZGF0YQorICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwKKyAgICAgICAgICAgIGVvZiA9IGxlbihzZWxmLl91bmNvbnN1bWVkKSA9PSAwIGFuZCBzZWxmLl9jb21wcmVzc19sZWZ0ID09IDAKKyAgICAgICAgICAgIGlmIGVvZjoKKyAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYuX2RlY29tcHJlc3Nvci5mbHVzaCgpCiAKKyAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9jcmMoZGF0YSwgZW9mPWVvZikKKyAgICAgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSBzZWxmLl9yZWFkYnVmZmVyW3NlbGYuX29mZnNldDpdICsgZGF0YQorICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ID0gMAogCi0gICAgICAgICMgcmV0dXJuIHdoYXQgdGhlIHVzZXIgYXNrZWQgZm9yCi0gICAgICAgIGlmIHNpemUgaXMgTm9uZSBvciBsZW4oc2VsZi5yZWFkYnVmZmVyKSA8PSBzaXplOgotICAgICAgICAgICAgYnl0ZXMgPSBzZWxmLnJlYWRidWZmZXIKLSAgICAgICAgICAgIHNlbGYucmVhZGJ1ZmZlciA9ICcnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBieXRlcyA9IHNlbGYucmVhZGJ1ZmZlcls6c2l6ZV0KLSAgICAgICAgICAgIHNlbGYucmVhZGJ1ZmZlciA9IHNlbGYucmVhZGJ1ZmZlcltzaXplOl0KKyAgICAgICAgIyBSZWFkIGZyb20gYnVmZmVyLgorICAgICAgICBkYXRhID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6IHNlbGYuX29mZnNldCArIG5dCisgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4oZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKIAotICAgICAgICByZXR1cm4gYnl0ZXMKIAogCiBjbGFzcyBaaXBGaWxlOgpAQCAtNjk1LDIwICs3MTEsMzQgQEAKICAgICAgICAgaWYga2V5ID09ICdyJzoKICAgICAgICAgICAgIHNlbGYuX0dldENvbnRlbnRzKCkKICAgICAgICAgZWxpZiBrZXkgPT0gJ3cnOgotICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBzZXQgdGhlIG1vZGlmaWVkIGZsYWcgc28gY2VudHJhbCBkaXJlY3RvcnkgZ2V0cyB3cml0dGVuCisgICAgICAgICAgICAjIGV2ZW4gaWYgbm8gZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBhcmNoaXZlCisgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCiAgICAgICAgIGVsaWYga2V5ID09ICdhJzoKLSAgICAgICAgICAgIHRyeTogICAgICAgICAgICAgICAgICAgICAgICAjIFNlZSBpZiBmaWxlIGlzIGEgemlwIGZpbGUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFNlZSBpZiBmaWxlIGlzIGEgemlwIGZpbGUKICAgICAgICAgICAgICAgICBzZWxmLl9SZWFsR2V0Q29udGVudHMoKQogICAgICAgICAgICAgICAgICMgc2VlayB0byBzdGFydCBvZiBkaXJlY3RvcnkgYW5kIG92ZXJ3cml0ZQogICAgICAgICAgICAgICAgIHNlbGYuZnAuc2VlayhzZWxmLnN0YXJ0X2RpciwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBCYWRaaXBmaWxlOiAgICAgICAgICAjIGZpbGUgaXMgbm90IGEgemlwIGZpbGUsIGp1c3QgYXBwZW5kCisgICAgICAgICAgICBleGNlcHQgQmFkWmlwZmlsZToKKyAgICAgICAgICAgICAgICAjIGZpbGUgaXMgbm90IGEgemlwIGZpbGUsIGp1c3QgYXBwZW5kCiAgICAgICAgICAgICAgICAgc2VsZi5mcC5zZWVrKDAsIDIpCisKKyAgICAgICAgICAgICAgICAjIHNldCB0aGUgbW9kaWZpZWQgZmxhZyBzbyBjZW50cmFsIGRpcmVjdG9yeSBnZXRzIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAjIGV2ZW4gaWYgbm8gZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBhcmNoaXZlCisgICAgICAgICAgICAgICAgc2VsZi5fZGlkTW9kaWZ5ID0gVHJ1ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVQYXNzZWQ6CiAgICAgICAgICAgICAgICAgc2VsZi5mcC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IE5vbmUKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgJ01vZGUgbXVzdCBiZSAiciIsICJ3IiBvciAiYSInCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBfR2V0Q29udGVudHMoc2VsZik6CiAgICAgICAgICIiIlJlYWQgdGhlIGRpcmVjdG9yeSwgbWFraW5nIHN1cmUgd2UgY2xvc2UgdGhlIGZpbGUgaWYgdGhlIGZvcm1hdAogICAgICAgICBpcyBiYWQuIiIiCkBAIC03MjMsNyArNzUzLDEwIEBACiAgICAgZGVmIF9SZWFsR2V0Q29udGVudHMoc2VsZik6CiAgICAgICAgICIiIlJlYWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGZvciB0aGUgWklQIGZpbGUuIiIiCiAgICAgICAgIGZwID0gc2VsZi5mcAotICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW5kcmVjID0gX0VuZFJlY0RhdGEoZnApCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBlbmRyZWM6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBmaWxlLCAiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIKICAgICAgICAgaWYgc2VsZi5kZWJ1ZyA+IDE6CkBAIC05MDAsMTYgKzkzMyw3IEBACiAgICAgICAgICAgICBpZiBvcmQoaFsxMV0pICE9IGNoZWNrX2J5dGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJCYWQgcGFzc3dvcmQgZm9yIGZpbGUiLCBuYW1lKQogCi0gICAgICAgICMgYnVpbGQgYW5kIHJldHVybiBhIFppcEV4dEZpbGUKLSAgICAgICAgaWYgemQgaXMgTm9uZToKLSAgICAgICAgICAgIHplZiA9IFppcEV4dEZpbGUoemVmX2ZpbGUsIHppbmZvKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemVmID0gWmlwRXh0RmlsZSh6ZWZfZmlsZSwgemluZm8sIHpkKQotCi0gICAgICAgICMgc2V0IHVuaXZlcnNhbCBuZXdsaW5lcyBvbiBaaXBFeHRGaWxlIGlmIG5lY2Vzc2FyeQotICAgICAgICBpZiAiVSIgaW4gbW9kZToKLSAgICAgICAgICAgIHplZi5zZXRfdW5pdl9uZXdsaW5lcyhUcnVlKQotICAgICAgICByZXR1cm4gemVmCisgICAgICAgIHJldHVybiAgWmlwRXh0RmlsZSh6ZWZfZmlsZSwgbW9kZSwgemluZm8sIHpkKQogCiAgICAgZGVmIGV4dHJhY3Qoc2VsZiwgbWVtYmVyLCBwYXRoPU5vbmUsIHB3ZD1Ob25lKToKICAgICAgICAgIiIiRXh0cmFjdCBhIG1lbWJlciBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LApAQCAtMTAzOSwyOCArMTA2MywyNyBAQAogICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKCkpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgICMgTXVzdCBvdmVyd3JpdGUgQ1JDIGFuZCBzaXplcyB3aXRoIGNvcnJlY3QgZGF0YSBsYXRlcgotICAgICAgICB6aW5mby5DUkMgPSBDUkMgPSAwCi0gICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplID0gMAotICAgICAgICB6aW5mby5maWxlX3NpemUgPSBmaWxlX3NpemUgPSAwCi0gICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcigpKQotICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgIGNtcHIgPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjbXByID0gTm9uZQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgYnVmID0gZnAucmVhZCgxMDI0ICogOCkKLSAgICAgICAgICAgIGlmIG5vdCBidWY6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSArIGxlbihidWYpCi0gICAgICAgICAgICBDUkMgPSBjcmMzMihidWYsIENSQykgJiAweGZmZmZmZmZmCi0gICAgICAgICAgICBpZiBjbXByOgotICAgICAgICAgICAgICAgIGJ1ZiA9IGNtcHIuY29tcHJlc3MoYnVmKQotICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplICsgbGVuKGJ1ZikKLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoYnVmKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICAjIE11c3Qgb3ZlcndyaXRlIENSQyBhbmQgc2l6ZXMgd2l0aCBjb3JyZWN0IGRhdGEgbGF0ZXIKKyAgICAgICAgICAgIHppbmZvLkNSQyA9IENSQyA9IDAKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplID0gMAorICAgICAgICAgICAgemluZm8uZmlsZV9zaXplID0gZmlsZV9zaXplID0gMAorICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKCkpCisgICAgICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKKyAgICAgICAgICAgICAgICBjbXByID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY21wciA9IE5vbmUKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZCgxMDI0ICogOCkKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfc2l6ZSArIGxlbihidWYpCisgICAgICAgICAgICAgICAgQ1JDID0gY3JjMzIoYnVmLCBDUkMpICYgMHhmZmZmZmZmZgorICAgICAgICAgICAgICAgIGlmIGNtcHI6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGNtcHIuY29tcHJlc3MoYnVmKQorICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gY29tcHJlc3Nfc2l6ZSArIGxlbihidWYpCisgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShidWYpCiAgICAgICAgIGlmIGNtcHI6CiAgICAgICAgICAgICBidWYgPSBjbXByLmZsdXNoKCkKICAgICAgICAgICAgIGNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplICsgbGVuKGJ1ZikKQEAgLTEwNzksMTMgKzExMDIsMTQgQEAKICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCiAgICAgICAgIHNlbGYuTmFtZVRvSW5mb1t6aW5mby5maWxlbmFtZV0gPSB6aW5mbwogCi0gICAgZGVmIHdyaXRlc3RyKHNlbGYsIHppbmZvX29yX2FyY25hbWUsIGJ5dGVzKToKKyAgICBkZWYgd3JpdGVzdHIoc2VsZiwgemluZm9fb3JfYXJjbmFtZSwgYnl0ZXMsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIldyaXRlIGEgZmlsZSBpbnRvIHRoZSBhcmNoaXZlLiAgVGhlIGNvbnRlbnRzIGlzIHRoZSBzdHJpbmcKICAgICAgICAgJ2J5dGVzJy4gICd6aW5mb19vcl9hcmNuYW1lJyBpcyBlaXRoZXIgYSBaaXBJbmZvIGluc3RhbmNlIG9yCiAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBhcmNoaXZlLiIiIgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh6aW5mb19vcl9hcmNuYW1lLCBaaXBJbmZvKToKICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhmaWxlbmFtZT16aW5mb19vcl9hcmNuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVfdGltZT10aW1lLmxvY2FsdGltZSh0aW1lLnRpbWUoKSlbOjZdKQorCiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgogICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciA9IDA2MDAgPDwgMTYKICAgICAgICAgZWxzZToKQEAgLTEwOTUsNiArMTExOSw5IEBACiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKKyAgICAgICAgaWYgY29tcHJlc3NfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBjb21wcmVzc190eXBlCisKICAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGJ5dGVzKSAgICAgICAgICAgICMgVW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGJ5dGVzCiAgICAgICAgIHNlbGYuX3dyaXRlY2hlY2soemluZm8pCkBAIC0xMzYxLDcgKzEzODgsOSBAQAogICAgICAgICAgICAgcHJpbnQgVVNBR0UKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIHpmID0gWmlwRmlsZShhcmdzWzFdLCAncicpCi0gICAgICAgIHpmLnRlc3R6aXAoKQorICAgICAgICBiYWRmaWxlID0gemYudGVzdHppcCgpCisgICAgICAgIGlmIGJhZGZpbGU6CisgICAgICAgICAgICBwcmludCgiVGhlIGZvbGxvd2luZyBlbmNsb3NlZCBmaWxlIGlzIGNvcnJ1cHRlZDogeyFyfSIuZm9ybWF0KGJhZGZpbGUpKQogICAgICAgICBwcmludCAiRG9uZSB0ZXN0aW5nIgogCiAgICAgZWxpZiBhcmdzWzBdID09ICctZSc6CkBAIC0xMzgwLDkgKzE0MDksOCBAQAogICAgICAgICAgICAgdGd0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHRndCkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0Z3RkaXIpOgogICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRndGRpcikKLSAgICAgICAgICAgIGZwID0gb3Blbih0Z3QsICd3YicpCi0gICAgICAgICAgICBmcC53cml0ZSh6Zi5yZWFkKHBhdGgpKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHRndCwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoemYucmVhZChwYXRoKSkKICAgICAgICAgemYuY2xvc2UoKQogCiAgICAgZWxpZiBhcmdzWzBdID09ICctYyc6CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CmluZGV4IDBmMWFlYjUuLmRlMmY1Y2IgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CkBAIC0xLDc4ICsxLDE0NyBAQAotQnVpbGRpbmcgYSBNYWNQeXRob24gZGlzdHJpYnV0aW9uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0J1aWxkaW5nIGEgUHl0aG9uIE1hYyBPUyBYIGRpc3RyaWJ1dGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBgYGJ1aWxkLWluc3RhbGwucHlgYCBzY3JpcHQgY3JlYXRlcyBNYWNQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCi1zbGVlcHljYXQgZGI0LCBzcWxpdGUzIGFuZCByZWFkbGluZSBzdXBwb3J0LiAgSXQgYnVpbGRzIGEgY29tcGxldGUgCitUaGUgYGBidWlsZC1pbnN0YWxsLnB5YGAgc2NyaXB0IGNyZWF0ZXMgUHl0aG9uIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZworY2VydGFpbiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgYXMgbmVjZXNzYXJ5LiAgSXQgYnVpbGRzIGEgY29tcGxldGUgCiBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG91dC1vZi10cmVlLCBpbnN0YWxscyBpdCBpbiBhIGZ1bm55IHBsYWNlIHdpdGggCiAkREVTVFJPT1QsIG1hc3NhZ2VzIHRoYXQgaW5zdGFsbGF0aW9uIHRvIHJlbW92ZSAucHljIGZpbGVzIGFuZCBzdWNoLCBjcmVhdGVzIAogYW4gSW5zdGFsbGVyIHBhY2thZ2UgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHBsdXMgb3RoZXIgZmlsZXMgaW4gYGByZXNvdXJjZXNgYCAKIGFuZCBgYHNjcmlwdHNgYCBhbmQgcGxhY2VkIHRoYXQgb24gYSBgYC5kbWdgYCBkaXNrIGltYWdlLgogCi1QcmVyZXF1aXNpdGVzCi0tLS0tLS0tLS0tLS0tCitBcyBvZiBQeXRob24gMi43LnggYW5kIDMuMiwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKK2ZvciBlYWNoIHJlbGVhc2U6CiAKLSogQSBNYWNPUyBYIDEwLjQgKG9yIGxhdGVyKQorMS4gIDMyLWJpdC1vbmx5LCBpMzg2IGFuZCBQUEMgdW5pdmVyc2FsLCBjYXBhYmxlIG9uIHJ1bm5pbmcgb24gYWxsIG1hY2hpbmVzCisgICAgc3VwcG9ydGVkIGJ5IE1hYyBPUyBYIDEwLjMuOSB0aHJvdWdoIChhdCBsZWFzdCkgMTAuNjo6CiAKLSogWENvZGUgMi4yIChvciBsYXRlciksIHdpdGggdGhlIHVuaXZlcnNhbCBTREsKKyAgICAgICAgcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgICAgICAtLXNkay1wYXRoPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgXAorICAgICAgICAgICAgLS11bml2ZXJzYWwtYXJjaHM9MzItYml0IFwKKyAgICAgICAgICAgIC0tZGVwLXRhcmdldD0xMC4zIAorICAgICAgICAgICAgIyBUaGVzZSBhcmUgdGhlIGN1cnJlbnQgZGVmYXVsdCBvcHRpb25zCiAKLSogTm8gRmluayAoaW4gYGAvc3dgYCkgb3IgRGFyd2luUG9ydHMgKGluIGBgL29wdC9sb2NhbGBgKSwgdGhvc2UgY291bGQKKyAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcworCisgICAgICAgICogQnppcDIKKyAgICAgICAgKiBabGliIDEuMi4zCisgICAgICAgICogR05VIFJlYWRsaW5lIChHUEwpCisgICAgICAgICogU1FMaXRlIDMKKyAgICAgICAgKiBOQ3Vyc2VzCisgICAgICAgICogT3JhY2xlIFNsZWVweWNhdCBEQiA0LjggKFB5dGhvbiAyLnggb25seSkKKworICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgYGBUY2wvVGsgOC40YGAgKGN1cnJlbnRseSA4LjQuMTkpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKworICAgIC0gY3VycmVudCB0YXJnZXQgYnVpbGQgZW52aXJvbm1lbnQ6CisgICAgICAgIAorICAgICAgICAqIE1hYyBPUyBYIDEwLjUuOCBQUEMgb3IgSW50ZWwKKyAgICAgICAgKiBYY29kZSAzLjEuNCAob3IgbGF0ZXIpCisgICAgICAgICogYGBNYWNPU1gxMC40dWBgIFNESyAobGF0ZXIgU0RLcyBkbyBub3Qgc3VwcG9ydCBQUEMgRzMgcHJvY2Vzc29ycykKKyAgICAgICAgKiBgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC4zYGAKKyAgICAgICAgKiBBcHBsZSBgYGdjYy00LjBgYAorICAgICAgICAqIFB5dGhvbiAyLm4gKG4gPj0gNCkgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aCBTcGhpbngKKworICAgIC0gYWx0ZXJuYXRlIGJ1aWxkIGVudmlyb25tZW50czoKKworICAgICAgICAqIE1hYyBPUyBYIDEwLjQuMTEgd2l0aCBYY29kZSAyLjUKKyAgICAgICAgKiBNYWMgT1MgWCAxMC42LjYgd2l0aCBYY29kZSAzLjIuNQorICAgICAgICAgICAgLSBuZWVkIHRvIGNoYW5nZSBgYC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL3tUY2wsVGt9LmZyYW1ld29yay9WZXJzaW9uL0N1cnJlbnRgYCB0byBgYDguNGBgCisKKzIuICA2NC1iaXQgLyAzMi1iaXQsIHg4Nl82NCBhbmQgaTM4NiB1bml2ZXJzYWwsIGZvciBPUyBYIDEwLjYgKGFuZCBsYXRlcik6OgorCisgICAgICAgIHB5dGhvbiBidWlsZC1pbnN0YWxsZXIucHkgXAorICAgICAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNi5zZGsgXAorICAgICAgICAgICAgLS11bml2ZXJzYWwtYXJjaHM9aW50ZWwgXAorICAgICAgICAgICAgLS1kZXAtdGFyZ2V0PTEwLjYKKworICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCisgICAgCisgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQorICAgICAgICAqIGJ1aWxkcyBPcmFjbGUgU2xlZXB5Y2F0IERCIDQuOCAoUHl0aG9uIDIueCBvbmx5KQorCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjkgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCisKKyAgICAtIGN1cnJlbnQgdGFyZ2V0IGJ1aWxkIGVudmlyb25tZW50OgorICAgICAgICAKKyAgICAgICAgKiBNYWMgT1MgWCAxMC42LjYgKG9yIGxhdGVyKQorICAgICAgICAqIFhjb2RlIDMuMi41IChvciBsYXRlcikKKyAgICAgICAgKiBgYE1hY09TWDEwLjZgYCBTREsKKyAgICAgICAgKiBgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC42YGAKKyAgICAgICAgKiBBcHBsZSBgYGdjYy00LjJgYAorICAgICAgICAqIFB5dGhvbiAyLm4gKG4gPj0gNCkgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aCBTcGhpbngKKworICAgIC0gYWx0ZXJuYXRlIGJ1aWxkIGVudmlyb25tZW50czoKKworICAgICAgICAqIG5vbmUKKworCitHZW5lcmFsIFByZXJlcXVpc2l0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE5vIEZpbmsgKGluIGBgL3N3YGApIG9yIE1hY1BvcnRzIChpbiBgYC9vcHQvbG9jYWxgYCkgb3Igb3RoZXIgbG9jYWwKKyAgbGlicmFyaWVzIG9yIHV0aWxpdGllcyAoaW4gYGAvdXNyL2xvY2FsYGApIGFzIHRoZXkgY291bGQKICAgaW50ZXJmZXJlIHdpdGggdGhlIGJ1aWxkLgogCi0qIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcmVsZWFzZSBtdXN0IGJlIGF2YWlsYWJsZSBvbiBweXRob24ub3JnCisqIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcmVsZWFzZSBpcyBidWlsdCB1c2luZyBTcGhpbngKICAgYmVjYXVzZSBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgaW5zdGFsbGVyLgogCisqIEl0IGlzIHNhZmVzdCB0byBzdGFydCBlYWNoIHZhcmlhbnQgYnVpbGQgd2l0aCBhbiBlbXB0eSBzb3VyY2UgZGlyZWN0b3J5CisgIHBvcHVsYXRlZCB3aXRoIGEgZnJlc2ggY29weSBvZiB0aGUgdW50YXJyZWQgc291cmNlLgorCiAKIFRoZSBSZWNpcGUKIC0tLS0tLS0tLS0KIAotSGVyZSBhcmUgdGhlIHN0ZXBzIHlvdSBuZWVkIHRvIGZvbGxvdyB0byBidWlsZCBhIE1hY1B5dGhvbiBpbnN0YWxsZXI6CitIZXJlIGFyZSB0aGUgc3RlcHMgeW91IG5lZWQgdG8gZm9sbG93IHRvIGJ1aWxkIGEgUHl0aG9uIGluc3RhbGxlcjoKIAotKiAgUnVuIGBgLi9idWlsZC1pbnN0YWxsZXIucHlgYC4gT3B0aW9uYWxseSB5b3UgY2FuIHBhc3MgYSBudW1iZXIgb2YgYXJndW1lbnRzCi0gICB0byBzcGVjaWZ5IGxvY2F0aW9ucyBvZiB2YXJpb3VzIGZpbGVzLiBQbGVhc2Ugc2VlIHRoZSB0b3Agb2YKKyogUnVuIGBgYnVpbGQtaW5zdGFsbGVyLnB5YGAuIE9wdGlvbmFsbHkgeW91IGNhbiBwYXNzIGEgbnVtYmVyIG9mIGFyZ3VtZW50cworICB0byBzcGVjaWZ5IGxvY2F0aW9ucyBvZiB2YXJpb3VzIGZpbGVzLiBQbGVhc2Ugc2VlIHRoZSB0b3Agb2YKICAgYGBidWlsZC1pbnN0YWxsZXIucHlgYCBmb3IgaXRzIHVzYWdlLgogCi0gIFJ1bm5pbmcgdGhpcyBzY3JpcHQgdGFrZXMgc29tZSB0aW1lLCBJIHdpbGwgbm90IG9ubHkgYnVpbGQgUHl0aG9uIGl0c2VsZgorICBSdW5uaW5nIHRoaXMgc2NyaXB0IHRha2VzIHNvbWUgdGltZSwgaXQgd2lsbCBub3Qgb25seSBidWlsZCBQeXRob24gaXRzZWxmCiAgIGJ1dCBhbHNvIHNvbWUgM3RoLXBhcnR5IGxpYnJhcmllcyB0aGF0IGFyZSBuZWVkZWQgZm9yIGV4dGVuc2lvbnMuCiAKICogV2hlbiBkb25lIHRoZSBzY3JpcHQgd2lsbCB0ZWxsIHlvdSB3aGVyZSB0aGUgRE1HIGltYWdlIGlzIChieSBkZWZhdWx0CiAgIHNvbWV3aGVyZSBpbiBgYC90bXAvX3B5YGApLgogCi1CdWlsZGluZyBhIDQtd2F5IHVuaXZlcnNhbCBpbnN0YWxsZXIKLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorQnVpbGRpbmcgb3RoZXIgdW5pdmVyc2FsIGluc3RhbGxlcnMKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgYSA0LXdheSB1bml2ZXJzYWwgaW5zdGFsbGVyIHRoYXQgcnVucyBvbiAKLU9TWCBMZW9wYXJkIG9yIGxhdGVyOjoKK09TIFggTGVvcGFyZCBvciBsYXRlcjo6CiAKLSAgJCAuL2J1aWxkLWluc3RhbGxlci5weSAtLWRlcC10YXJnZXQ9MTAuNSAtLXVuaXZlcnNhbC1hcmNocz1hbGwgLS1zZGs9LworICBweXRob24gMi42IC9idWlsZC1pbnN0YWxsZXIucHkgXAorICAgICAgICAtLWRlcC10YXJnZXQ9MTAuNQorICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz1hbGwKKyAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNS5zZGsKIAotVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBkZXBsb3ltZW50IHRhcmdldCBpcyAxMC41IChvciBsYXRlciksIGFuZCBoZW5jZQotYWxzbyB0aGF0IHlvdXIgYnVpbGRpbmcgb24gYXQgbGVhc3QgT1NYIDEwLjUuCitUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGlzIDEwLjUsIGFuZCBoZW5jZQorYWxzbyB0aGF0IHlvdSBhcmUgYnVpbGRpbmcgb24gYXQgbGVhc3QgT1MgWCAxMC41LiAgNC13YXkgaW5jbHVkZXMKK2BgaTM4NmBgLCBgYHg4Nl82NGBgLCBgYHBwY2BgLCBhbmQgYGBwcGM2NGBgIChHNSkuICBgYHBwYzY0YGAgZXhlY3V0YWJsZQordmFyaWFudHMgY2FuIG9ubHkgYmUgcnVuIG9uIEc1IG1hY2hpbmVzIHJ1bm5pbmcgMTAuNS4gIE5vdGUgdGhhdCwKK3doaWxlIE9TIFggMTAuNiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBJbnRlbC1iYXNlZCBtYWNoaW5lcywgaXQgaXMgcG9zc2libGUKK3RvIHJ1biBgYHBwY2BgICgzMi1iaXQpIGV4ZWN1dGFibGVzIHVubW9kaWZpZWQgdGhhbmtzIHRvIHRoZSBSb3NldHRhIHBwYworZW11bGF0aW9uIGluIE9TIFggMTAuNSBhbmQgMTAuNi4KKworT3RoZXIgYGAtLXVuaXZlcnNhbC1hcmNoc2BgIG9wdGlvbnMgYXJlIGBgNjQtYml0YGAgKGBgeDg2XzY0YGAsIGBgcHBjNjRgYCksCithbmQgYGAzLXdheWBgIChgYHBwY2BgLCBgYGkzODZgYCwgYGB4ODZfNjRgYCkuICBOb25lIG9mIHRoZXNlIG9wdGlvbnMKK2FyZSByZWd1bGFybHkgZXhlcmNpc2VkOyB1c2UgYXQgeW91ciBvd24gcmlzay4KKwogCiBUZXN0aW5nCiAtLS0tLS0tCiAKLVRoZSByZXN1bHRpbmcgYmluYXJpZXMgc2hvdWxkIHdvcmsgb24gTWFjT1NYIDEwLjMuOSBvciBsYXRlci4gSSB1c3VhbGx5IHJ1bgotdGhlIGluc3RhbGxlciBvbiBhIDEwLjMuOSwgYSAxMC40LnggUFBDIGFuZCBhIDEwLjQueCBJbnRlbCBzeXN0ZW0gYW5kIHRoZW4KLXJ1biB0aGUgdGVzdHN1aXRlIHRvIG1ha2Ugc3VyZS4KK0lkZWFsbHksIHRoZSByZXN1bHRpbmcgYmluYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZCBhbmQgdGhlIHRlc3Qgc3VpdGUgcnVuCitvbiBhbGwgc3VwcG9ydGVkIE9TIFggcmVsZWFzZXMgYW5kIGFyY2hpdGVjdHVyZXMuICBBcyBhIHByYWN0aWNhbCBtYXR0ZXIsCit0aGF0IGlzIGdlbmVyYWxseSBub3QgcG9zc2libGUuICBBdCBhIG1pbmltdW0sIHZhcmlhbnQgMSBzaG91bGQgYmUgcnVuIG9uCithdCBsZWFzdCBvbmUgSW50ZWwsIG9uZSBQUEMgRzQsIGFuZCBvbmUgUFBDIEczIHN5c3RlbSBhbmQgb25lIGVhY2ggb2YgCitPUyBYIDEwLjYsIDEwLjUsIDEwLjQsIGFuZCAxMC4zLjkuICBOb3QgYWxsIHRlc3RzIHJ1biBvbiAxMC4zLjkuCitWYXJpYW50IDIgc2hvdWxkIGJlIHJ1biBvbiAxMC42IGluIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbW9kZXMuOjoKIAorICAgIGFyY2ggLWkzODYgL3Vzci9sb2NhbC9iaW4vcHl0aG9ubi5uIC1tIHRlc3QucmVncnRlc3QgLXcgLXUgYWxsIAorICAgIGFyY2ggLVg4Nl82NCAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4gLW0gdGVzdC5yZWdydGVzdCAtdyAtdSBhbGwKKyAgICAKK0NlcnRhaW4gdGVzdHMgd2lsbCBiZSBza2lwcGVkIGFuZCBzb21lIGNhdXNlIHRoZSBpbnRlcnByZXRlciB0byBmYWlsCit3aGljaCB3aWxsIGxpa2VseSBnZW5lcmF0ZSBgYFB5dGhvbiBxdWl0IHVuZXhwZWN0ZWRseWBgIGFsZXJ0IG1lc3NhZ2VzCit0byBiZSBnZW5lcmF0ZWQgYXQgc2V2ZXJhbCBwb2ludHMgZHVyaW5nIGEgdGVzdCBydW4uICBUaGVzZSBjYW4KK2JlIGlnbm9yZWQuCiAKLUFubm91bmNlbWVudHMKLS0tLS0tLS0tLS0tLS0KLQotKFRoaXMgaXMgbW9zdGx5IG9mIGhpc3RvcmljIGludGVyZXN0KQotCi1XaGVuIGFsbCBpcyBkb25lLCBhbm5vdW5jZW1lbnRzIGNhbiBiZSBwb3N0ZWQgdG8gYXQgbGVhc3QgdGhlIGZvbGxvd2luZwotcGxhY2VzOgotLSAgIHB5dGhvbm1hYy1zaWdAcHl0aG9uLm9yZwotLSAgIHB5dGhvbi1kZXZAcHl0aG9uLm9yZwotLSAgIHB5dGhvbi1hbm5vdW5jZUBweXRob24ub3JnCi0tICAgYXJjaGl2aXN0QGluZm8tbWFjLm9yZwotLSAgIGFkY25ld3NAYXBwbGUuY29tCi0tICAgbmV3c0BtYWNubi5jb20KLS0gICBodHRwOi8vd3d3Lm1hY3VwZGF0ZS5jb20KLS0gICBodHRwOi8vZ3VpZGUuYXBwbGUuY29tL3VzaW5kZXgubGFzc28KLS0gICBodHRwOi8vd3d3LmFwcGxlLmNvbS9kb3dubG9hZHMvbWFjb3N4L3N1Ym1pdAotLSAgIGh0dHA6Ly93d3cudmVyc2lvbnRyYWNrZXIuY29tLyAodXNlcmlkIEphY2suSmFuc2VuQG9yYXRyaXguY29tKQotLSAgIGh0dHA6Ly93d3cubWFjc2hhcmV3YXJlLm5ldCAodXNlcmlkIGphY2tqYW5zZW4pCi0KLUFsc28sIGNoZWNrIG91dCBTdGVwaGFuIERlaWJlbHMgaHR0cDovL3B5dGhvbm9sb2d5Lm9yZy9tYXJrZXQgY29udGFjdCBsaXN0CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCAyNzdiZDZmLi5mMGIzZjNmIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTEsMTIgKzEsMTQgQEAKICMhL3Vzci9iaW4vcHl0aG9uCiAiIiIKLVRoaXMgc2NyaXB0IGlzIHVzZWQgdG8gYnVpbGQgdGhlICJvZmZpY2lhbCB1bm9mZmljaWFsIiB1bml2ZXJzYWwgYnVpbGQgb24KLU1hYyBPUyBYLiBJdCByZXF1aXJlcyBNYWMgT1MgWCAxMC40LCBYY29kZSAyLjIgYW5kIHRoZSAxMC40dSBTREsgdG8gZG8gaXRzCi13b3JrLiAgNjQtYml0IG9yIGZvdXItd2F5IHVuaXZlcnNhbCBidWlsZHMgcmVxdWlyZSBhdCBsZWFzdCBPUyBYIDEwLjUgYW5kCi10aGUgMTAuNSBTREsuCitUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIGJ1aWxkICJvZmZpY2lhbCIgdW5pdmVyc2FsIGluc3RhbGxlcnMgb24gTWFjIE9TIFguCitJdCByZXF1aXJlcyBhdCBsZWFzdCBNYWMgT1MgWCAxMC40LCBYY29kZSAyLjIgYW5kIHRoZSAxMC40dSBTREsgZm9yCiszMi1iaXQgYnVpbGRzLiAgNjQtYml0IG9yIGZvdXItd2F5IHVuaXZlcnNhbCBidWlsZHMgcmVxdWlyZSBhdCBsZWFzdAorT1MgWCAxMC41IGFuZCB0aGUgMTAuNSBTREsuCiAKLVBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIHNjcmlwdCBrZWVwcyB3b3JraW5nIHdpdGggUHl0aG9uIDIuMywgdG8gYXZvaWQKLWJvb3RzdHJhcCBpc3N1ZXMgKC91c3IvYmluL3B5dGhvbiBpcyBQeXRob24gMi4zIG9uIE9TWCAxMC40KQorUGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgc2NyaXB0IGtlZXBzIHdvcmtpbmcgd2l0aCBQeXRob24gMi41LCB0byBhdm9pZAorYm9vdHN0cmFwIGlzc3VlcyAoL3Vzci9iaW4vcHl0aG9uIGlzIFB5dGhvbiAyLjUgb24gT1NYIDEwLjUpLiAgU3BoaW54LAord2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbiwgY3VycmVudGx5IHJlcXVpcmVzIGF0IGxlYXN0CitQeXRob24gMi40LgogCiBVc2FnZTogc2VlIFVTQUdFIHZhcmlhYmxlIGluIHRoZSBzY3JpcHQuCiAiIiIKQEAgLTQwLDE2ICs0MiwxOSBAQAogICAgICAgICBpZiBsbi5zdGFydHN3aXRoKHZhcmlhYmxlKToKICAgICAgICAgICAgIHZhbHVlID0gbG5bbGVuKHZhcmlhYmxlKTpdLnN0cmlwKCkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZVsxOi0xXQorICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkNhbm5vdCBmaW5kIHZhcmlhYmxlICVzIiAlIHZhcmlhYmxlWzotMV0KIAogZGVmIGdldFZlcnNpb24oKToKICAgICByZXR1cm4gZ3JlcFZhbHVlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSwgJ1BBQ0tBR0VfVkVSU0lPTicpCiAKK2RlZiBnZXRWZXJzaW9uVHVwbGUoKToKKyAgICByZXR1cm4gdHVwbGUoW2ludChuKSBmb3IgbiBpbiBnZXRWZXJzaW9uKCkuc3BsaXQoJy4nKV0pCisKIGRlZiBnZXRGdWxsVmVyc2lvbigpOgogICAgIGZuID0gb3MucGF0aC5qb2luKFNSQ0RJUiwgJ0luY2x1ZGUnLCAncGF0Y2hsZXZlbC5oJykKICAgICBmb3IgbG4gaW4gb3Blbihmbik6CiAgICAgICAgIGlmICdQWV9WRVJTSU9OJyBpbiBsbjoKICAgICAgICAgICAgIHJldHVybiBsbi5zcGxpdCgpWy0xXVsxOi0xXQotCiAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ2Fubm90IGZpbmQgZnVsbCB2ZXJzaW9uPz8iCiAKICMgVGhlIGRpcmVjdG9yeSB3ZSdsbCB1c2UgdG8gY3JlYXRlIHRoZSBidWlsZCAod2lsbCBiZSBlcmFzZWQgYW5kIHJlY3JlYXRlZCkKQEAgLTExNCw2ICsxMTksOCBAQAogCiBDQyA9IHRhcmdldF9jY19tYXBbREVQVEFSR0VUXQogCitQWVRIT05fMyA9IGdldFZlcnNpb25UdXBsZSgpID49ICgzLCAwKQorCiBVU0FHRSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCiAgICAgVXNhZ2U6IGJ1aWxkX3B5dGhvbiBbb3B0aW9uc10KIApAQCAtMTM5LDkgKzE0Niw5IEBACiAgICAgaWYgREVQVEFSR0VUIDwgJzEwLjUnOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJCemlwMiAxLjAuNSIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5iemlwLm9yZy8xLjAuNS9iemlwMi0xLjAuNS50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nM2MxNWEwYzhkMWQzZWUxYzQ2YTE2MzRkMDA2MTdiMWEnLAorICAgICAgICAgICAgICBuYW1lPSJCemlwMiAxLjAuNiIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL2J6aXAub3JnLzEuMC42L2J6aXAyLTEuMC42LnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPScwMGI1MTZmNDcwNGQ0YTdjYjUwYTFkOTdlNmU4ZTE1YicsCiAgICAgICAgICAgICAgIGNvbmZpZ3VyZT1Ob25lLAogICAgICAgICAgICAgICBpbnN0YWxsPSdtYWtlIGluc3RhbGwgQ0M9JXMgUFJFRklYPSVzL3Vzci9sb2NhbC8gQ0ZMQUdTPSItYXJjaCAlcyAtaXN5c3Jvb3QgJXMiJyUoCiAgICAgICAgICAgICAgICAgICBDQywKQEAgLTE2NCwyOSArMTcxLDMzIEBACiAgICAgICAgICAgKSwKICAgICAgICAgICBkaWN0KAogICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBHTlUgcmVhZGxpbmUgaXMgR1BMJ2Qgc29mdHdhcmUKLSAgICAgICAgICAgICAgbmFtZT0iR05VIFJlYWRsaW5lIDUuMS40IiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEudGFyLmd6IiAsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSc3ZWU1YTY5MmRiODhiMzBjYTQ4OTI3YTEzZmQ2MGU0NicsCisgICAgICAgICAgICAgIG5hbWU9IkdOVSBSZWFkbGluZSA2LjEuMiIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNi4xLnRhci5neiIgLAorICAgICAgICAgICAgICBjaGVja3N1bT0nZmMyZjdlNzE0ZmU3OTJkYjFjZTZkZGM0YzlmYjRlZjMnLAogICAgICAgICAgICAgICBwYXRjaGxldmVsPScwJywKICAgICAgICAgICAgICAgcGF0Y2hlcz1bCiAgICAgICAgICAgICAgICAgICAjIFRoZSByZWFkbGluZSBtYWludGFpbmVycyBkb24ndCBkbyBhY3R1YWwgbWljcm8gcmVsZWFzZXMsIGJ1dAogICAgICAgICAgICAgICAgICAgIyBqdXN0IHNoaXAgYSBzZXQgb2YgcGF0Y2hlcy4KLSAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEtcGF0Y2hlcy9yZWFkbGluZTUxLTAwMScsCi0gICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNS4xLXBhdGNoZXMvcmVhZGxpbmU1MS0wMDInLAotICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTUuMS1wYXRjaGVzL3JlYWRsaW5lNTEtMDAzJywKLSAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEtcGF0Y2hlcy9yZWFkbGluZTUxLTAwNCcsCisgICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNi4xLXBhdGNoZXMvcmVhZGxpbmU2MS0wMDEnLAorICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTYuMS1wYXRjaGVzL3JlYWRsaW5lNjEtMDAyJywKICAgICAgICAgICAgICAgXQogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNi4xMSIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnL3NxbGl0ZS0zLjYuMTEudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09JzdlYmIwOTk2OTZhYjc2Y2M2ZmY2NWRkNDk2ZDE3ODU4JywKKyAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNy40IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvc3FsaXRlLWF1dG9jb25mLTMwNzA0MDAudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzhmMGM2OTBiZmIzM2MzY2JiYzI0NzFjM2Q5YmEwMTU4JywKKyAgICAgICAgICAgICAgY29uZmlndXJlX2Vudj0oJ0NGTEFHUz0iLU9zJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLURTUUxJVEVfRU5BQkxFX0ZUUzMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtRFNRTElURV9FTkFCTEVfRlRTM19QQVJFTlRIRVNJUycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1EU1FMSVRFX0VOQUJMRV9SVFJFRScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1EU1FMSVRFX1RDTD0wJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksCiAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9wcmU9WwogICAgICAgICAgICAgICAgICAgJy0tZW5hYmxlLXRocmVhZHNhZmUnLAotICAgICAgICAgICAgICAgICAgJy0tZW5hYmxlLXRlbXBzdG9yZScsCiAgICAgICAgICAgICAgICAgICAnLS1lbmFibGUtc2hhcmVkPW5vJywKICAgICAgICAgICAgICAgICAgICctLWVuYWJsZS1zdGF0aWM9eWVzJywKLSAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtdGNsJywKKyAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtcmVhZGxpbmUnLAorICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nJywKICAgICAgICAgICAgICAgXQogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKQEAgLTE5NCw2ICsyMDUsNyBAQAogICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L25jdXJzZXMvbmN1cnNlcy01LjUudGFyLmd6IiwKICAgICAgICAgICAgICAgY2hlY2tzdW09J2U3M2MxYWMxMGI0YmZjNDZkYjQzYjJkZGZkNjI0NGVmJywKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCisgICAgICAgICAgICAgICAgICAiLS1lbmFibGUtd2lkZWMiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1jeHgiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1hZGEiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1wcm9ncyIsCkBAIC0yMjAsMjQgKzIzMiwyNiBAQAogICAgICAgICAgICksCiAgICAgICAgIF0pCiAKLSAgICByZXN1bHQuZXh0ZW5kKFsKLSAgICAgIGRpY3QoCi0gICAgICAgICAgbmFtZT0iU2xlZXB5Y2F0IERCIDQuNy4yNSIsCi0gICAgICAgICAgdXJsPSJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi00LjcuMjUudGFyLmd6IiwKLSAgICAgICAgICBjaGVja3N1bT0nZWMyYjg3ZTgzMzc3OTY4MWEwYzNhODE0YWE3MTM1OWUnLAotICAgICAgICAgIGJ1aWxkRGlyPSJidWlsZF91bml4IiwKLSAgICAgICAgICBjb25maWd1cmU9Ii4uL2Rpc3QvY29uZmlndXJlIiwKLSAgICAgICAgICBjb25maWd1cmVfcHJlPVsKLSAgICAgICAgICAgICAgJy0taW5jbHVkZWRpcj0vdXNyL2xvY2FsL2luY2x1ZGUvZGI0JywKLSAgICAgICAgICBdCi0gICAgICApLAotICAgIF0pCisgICAgaWYgbm90IFBZVEhPTl8zOgorICAgICAgICByZXN1bHQuZXh0ZW5kKFsKKyAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICBuYW1lPSJTbGVlcHljYXQgREIgNC43LjI1IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi00LjcuMjUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09J2VjMmI4N2U4MzM3Nzk2ODFhMGMzYTgxNGFhNzEzNTllJywKKyAgICAgICAgICAgICAgYnVpbGREaXI9ImJ1aWxkX3VuaXgiLAorICAgICAgICAgICAgICBjb25maWd1cmU9Ii4uL2Rpc3QvY29uZmlndXJlIiwKKyAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCisgICAgICAgICAgICAgICAgICAnLS1pbmNsdWRlZGlyPS91c3IvbG9jYWwvaW5jbHVkZS9kYjQnLAorICAgICAgICAgICAgICBdCisgICAgICAgICAgKSwKKyAgICAgICAgXSkKIAogICAgIHJldHVybiByZXN1bHQKIAogCiAjIEluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgcGFja2FnZXMgaW5zaWRlIHRoZSAubXBrZy4KIGRlZiBwa2dfcmVjaXBlcygpOgorICAgIHVuc2VsZWN0ZWRfZm9yX3B5dGhvbjMgPSAoJ3NlbGVjdGVkJywgJ3Vuc2VsZWN0ZWQnKVtQWVRIT05fM10KICAgICByZXN1bHQgPSBbCiAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICBuYW1lPSJQeXRob25GcmFtZXdvcmsiLApAQCAtMjQ5LDYgKzI2Myw3IEBACiAgICAgICAgICAgICAgICAgd3JhcHBlcnMgZm9yIGxvdHMgb2YgTWFjIE9TIFggQVBJJ3MuCiAgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICBwb3N0ZmxpZ2h0PSJzY3JpcHRzL3Bvc3RmbGlnaHQuZnJhbWV3b3JrIiwKKyAgICAgICAgICAgIHNlbGVjdGVkPSdzZWxlY3RlZCcsCiAgICAgICAgICksCiAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICBuYW1lPSJQeXRob25BcHBsaWNhdGlvbnMiLApAQCAtMjYyLDYgKzI3Nyw3IEBACiAgICAgICAgICAgICAgICAgSXQgYWxzbyBpbnN0YWxscyBhIG51bWJlciBvZiBleGFtcGxlcyBhbmQgZGVtb3MuCiAgICAgICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICBzZWxlY3RlZD0nc2VsZWN0ZWQnLAogICAgICAgICApLAogICAgICAgICBkaWN0KAogICAgICAgICAgICAgbmFtZT0iUHl0aG9uVW5peFRvb2xzIiwKQEAgLTI3Myw2ICsyODksNyBAQAogICAgICAgICAgICAgICAgIGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlIFB5dGhvbi4KICAgICAgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgIHNlbGVjdGVkPSdzZWxlY3RlZCcsCiAgICAgICAgICksCiAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICBuYW1lPSJQeXRob25Eb2N1bWVudGF0aW9uIiwKQEAgLTI4Nyw2ICszMDQsNyBAQAogICAgICAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIHBvc3RmbGlnaHQ9InNjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKICAgICAgICAgKSwKICAgICAgICAgZGljdCgKICAgICAgICAgICAgIG5hbWU9IlB5dGhvblByb2ZpbGVDaGFuZ2VzIiwKQEAgLTMwNCw2ICszMjIsNyBAQAogICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAogICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKICAgICAgICAgKSwKICAgICBdCiAKQEAgLTMyMSw2ICszNDAsNyBAQAogICAgICAgICAgICAgICAgIHRvcGRpcj0iL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrIiwKICAgICAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgIHNlbGVjdGVkPXVuc2VsZWN0ZWRfZm9yX3B5dGhvbjMsCiAgICAgICAgICAgICApCiAgICAgICAgICkKICAgICByZXR1cm4gcmVzdWx0CkBAIC0zODcsNiArNDA3LDkgQEAKICAgICBDaGVjayB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gYSBzdXBwb3J0ZWQgc3lzdGVtLgogICAgICIiIgogCisgICAgaWYgc3lzLnZlcnNpb25faW5mb1swOjJdIDwgKDIsIDQpOgorICAgICAgICBmYXRhbCgiVGhpcyBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCBQeXRob24gMi40IG9yIGxhdGVyIikKKwogICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpICE9ICdEYXJ3aW4nOgogICAgICAgICBmYXRhbCgiVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHJ1biBvbiBhIE1hYyBPUyBYIDEwLjQgKG9yIGxhdGVyKSBzeXN0ZW0iKQogCkBAIC00MDYsMTUgKzQyOSwxNiBAQAogICAgICMgICAgICAgdG8gaW5zdGFsbCBhIG5ld2VyIHBhdGNoIGxldmVsLgogCiAgICAgZm9yIGZyYW1ld29yayBpbiBbJ1RjbCcsICdUayddOgotICAgICAgICBmdyA9IGRpY3QobG93ZXI9ZnJhbWV3b3JrLmxvd2VyKCksCi0gICAgICAgICAgICAgICAgICAgIHVwcGVyPWZyYW1ld29yay51cHBlcigpLAotICAgICAgICAgICAgICAgICAgICBjYXA9ZnJhbWV3b3JrLmNhcGl0YWxpemUoKSkKLSAgICAgICAgZndwdGggPSAiTGlicmFyeS9GcmFtZXdvcmtzLyUoY2FwKXMuZnJhbWV3b3JrLyUobG93ZXIpc0NvbmZpZy5zaCIgJSBmdwotICAgICAgICBzeXNmdyA9IG9zLnBhdGguam9pbignL1N5c3RlbScsIGZ3cHRoKQorICAgICAgICAjZncgPSBkaWN0KGxvd2VyPWZyYW1ld29yay5sb3dlcigpLAorICAgICAgICAjICAgICAgICAgICAgdXBwZXI9ZnJhbWV3b3JrLnVwcGVyKCksCisgICAgICAgICMgICAgICAgICAgICBjYXA9ZnJhbWV3b3JrLmNhcGl0YWxpemUoKSkKKyAgICAgICAgI2Z3cHRoID0gIkxpYnJhcnkvRnJhbWV3b3Jrcy8lKGNhcClzLmZyYW1ld29yay8lKGxvd2VyKXNDb25maWcuc2giICUgZncKKyAgICAgICAgZndwdGggPSAnTGlicmFyeS9GcmFtZXdvcmtzL1RjbC5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudCcKKyAgICAgICAgc3lzZncgPSBvcy5wYXRoLmpvaW4oU0RLUEFUSCwgJ1N5c3RlbScsIGZ3cHRoKQogICAgICAgICBsaWJmdyA9IG9zLnBhdGguam9pbignLycsIGZ3cHRoKQogICAgICAgICB1c3JmdyA9IG9zLnBhdGguam9pbihvcy5nZXRlbnYoJ0hPTUUnKSwgZndwdGgpCi0gICAgICAgIHZlcnNpb24gPSAiJSh1cHBlcilzX1ZFUlNJT04iICUgZncKLSAgICAgICAgaWYgZ2V0VGNsVGtWZXJzaW9uKGxpYmZ3LCB2ZXJzaW9uKSAhPSBnZXRUY2xUa1ZlcnNpb24oc3lzZncsIHZlcnNpb24pOgorICAgICAgICAjdmVyc2lvbiA9ICIlKHVwcGVyKXNfVkVSU0lPTiIgJSBmdworICAgICAgICBpZiBvcy5yZWFkbGluayhsaWJmdykgIT0gb3MucmVhZGxpbmsoc3lzZncpOgogICAgICAgICAgICAgZmF0YWwoIlZlcnNpb24gb2YgJXMgbXVzdCBtYXRjaCAlcyIgJSAobGliZncsIHN5c2Z3KSApCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHVzcmZ3KToKICAgICAgICAgICAgIGZhdGFsKCJQbGVhc2UgcmVuYW1lICVzIHRvIGF2b2lkIHBvc3NpYmxlIGR5bmFtaWMgbG9hZCBpc3N1ZXMuIgpAQCAtNjg0LDYgKzcwOCw5IEBACiAgICAgICAgIGNvbmZpZ3VyZV9hcmdzLmluc2VydCgwLCBjb25maWd1cmUpCiAgICAgICAgIGNvbmZpZ3VyZV9hcmdzID0gWyBzaGVsbFF1b3RlKGEpIGZvciBhIGluIGNvbmZpZ3VyZV9hcmdzIF0KIAorICAgICAgICBpZiAnY29uZmlndXJlX2VudicgaW4gcmVjaXBlOgorICAgICAgICAgICAgY29uZmlndXJlX2FyZ3MuaW5zZXJ0KDAsIHJlY2lwZVsnY29uZmlndXJlX2VudiddKQorCiAgICAgICAgIHByaW50ICJSdW5uaW5nIGNvbmZpZ3VyZSBmb3IgJXMiJShuYW1lLCkKICAgICAgICAgcnVuQ29tbWFuZCgnICcuam9pbihjb25maWd1cmVfYXJncykgKyAnIDI+JjEnKQogCkBAIC03MzksOSArNzY2LDkgQEAKICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZERpcikKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhyb290RGlyKToKICAgICAgICAgc2h1dGlsLnJtdHJlZShyb290RGlyKQotICAgIG9zLm1rZGlyKGJ1aWxkRGlyKQotICAgIG9zLm1rZGlyKHJvb3REaXIpCi0gICAgb3MubWtkaXIob3MucGF0aC5qb2luKHJvb3REaXIsICdlbXB0eS1kaXInKSkKKyAgICBvcy5tYWtlZGlycyhidWlsZERpcikKKyAgICBvcy5tYWtlZGlycyhyb290RGlyKQorICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbihyb290RGlyLCAnZW1wdHktZGlyJykpCiAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKICAgICBvcy5jaGRpcihidWlsZERpcikKIApAQCAtNzYxLDE4ICs3ODgsMjAgQEAKICAgICBwcmludCAiUnVubmluZyBjb25maWd1cmUuLi4iCiAgICAgcnVuQ29tbWFuZCgiJXMgLUMgLS1lbmFibGUtZnJhbWV3b3JrIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0lcyAiCiAgICAgICAgICAgICAgICAiLS13aXRoLXVuaXZlcnNhbC1hcmNocz0lcyAiCisgICAgICAgICAgICAgICAiJXMgIgogICAgICAgICAgICAgICAgIkxERkxBR1M9Jy1nIC1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWInICIKICAgICAgICAgICAgICAgICJPUFQ9Jy1nIC1PMyAtSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgMj4mMSIlKAogICAgICAgICBzaGVsbFF1b3RlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSksIHNoZWxsUXVvdGUoU0RLUEFUSCksCiAgICAgICAgIFVOSVZFUlNBTEFSQ0hTLAorICAgICAgICAoJyAnLCAnLS13aXRoLWNvbXB1dGVkLWdvdG9zICcpW1BZVEhPTl8zXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSkpCiAKICAgICBwcmludCAiUnVubmluZyBtYWtlIgogICAgIHJ1bkNvbW1hbmQoIm1ha2UiKQogCi0gICAgcHJpbnQgIlJ1bm5pbmcgbWFrZSBmcmFtZXdvcmtpbnN0YWxsIgotICAgIHJ1bkNvbW1hbmQoIm1ha2UgZnJhbWV3b3JraW5zdGFsbCBERVNURElSPSVzIiUoCisgICAgcHJpbnQgIlJ1bm5pbmcgbWFrZSBpbnN0YWxsIgorICAgIHJ1bkNvbW1hbmQoIm1ha2UgaW5zdGFsbCBERVNURElSPSVzIiUoCiAgICAgICAgIHNoZWxsUXVvdGUocm9vdERpcikpKQogCiAgICAgcHJpbnQgIlJ1bm5pbmcgbWFrZSBmcmFtZXdvcmtpbnN0YWxsZXh0cmFzIgpAQCAtODExLDEyICs4NDAsMzMgQEAKICAgICAgICAgICAgIG9zLmNobW9kKHAsIHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSB8IHN0YXQuU19JV0dSUCkKICAgICAgICAgICAgIG9zLmNob3duKHAsIC0xLCBnaWQpCiAKKyAgICBpZiBQWVRIT05fMzoKKyAgICAgICAgTERWRVJTSU9OPU5vbmUKKyAgICAgICAgVkVSU0lPTj1Ob25lCisgICAgICAgIEFCSUZMQUdTPU5vbmUKKworICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKGJ1aWxkRGlyLCAnTWFrZWZpbGUnKSwgJ3InKQorICAgICAgICBmb3IgbG4gaW4gZnA6CisgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCdWRVJTSU9OPScpOgorICAgICAgICAgICAgICAgIFZFUlNJT049bG4uc3BsaXQoKVsxXQorICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgnQUJJRkxBR1M9Jyk6CisgICAgICAgICAgICAgICAgQUJJRkxBR1M9bG4uc3BsaXQoKVsxXQorICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgnTERWRVJTSU9OPScpOgorICAgICAgICAgICAgICAgIExEVkVSU0lPTj1sbi5zcGxpdCgpWzFdCisgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICBMRFZFUlNJT04gPSBMRFZFUlNJT04ucmVwbGFjZSgnJChWRVJTSU9OKScsIFZFUlNJT04pCisgICAgICAgIExEVkVSU0lPTiA9IExEVkVSU0lPTi5yZXBsYWNlKCckKEFCSUZMQUdTKScsIEFCSUZMQUdTKQorICAgICAgICBjb25maWdfc3VmZml4ID0gJy0nICsgTERWRVJTSU9OCisgICAgZWxzZToKKyAgICAgICAgY29uZmlnX3N1ZmZpeCA9ICcnICAgICAgIyBQeXRob24gMi54CisKICAgICAjIFdlIGFkZGVkIHNvbWUgZGlyZWN0b3JpZXMgdG8gdGhlIHNlYXJjaCBwYXRoIGR1cmluZyB0aGUgY29uZmlndXJlCiAgICAgIyBwaGFzZS4gUmVtb3ZlIHRob3NlIGJlY2F1c2UgdGhvc2UgZGlyZWN0b3JpZXMgd29uJ3QgYmUgdGhlcmUgb24KICAgICAjIHRoZSBlbmQtdXNlcnMgc3lzdGVtLgogICAgIHBhdGggPW9zLnBhdGguam9pbihyb290RGlyLCAnTGlicmFyeScsICdGcmFtZXdvcmtzJywgJ1B5dGhvbi5mcmFtZXdvcmsnLAogICAgICAgICAgICAgICAgICdWZXJzaW9ucycsIHZlcnNpb24sICdsaWInLCAncHl0aG9uJXMnJSh2ZXJzaW9uLCksCi0gICAgICAgICAgICAgICAgJ2NvbmZpZycsICdNYWtlZmlsZScpCisgICAgICAgICAgICAgICAgJ2NvbmZpZycgKyBjb25maWdfc3VmZml4LCAnTWFrZWZpbGUnKQogICAgIGZwID0gb3BlbihwYXRoLCAncicpCiAgICAgZGF0YSA9IGZwLnJlYWQoKQogICAgIGZwLmNsb3NlKCkKQEAgLTg0MSwxNCArODkxLDE4IEBACiAKICAgICBvcy5jaGRpcihjdXJkaXIpCiAKLQorICAgIGlmIFBZVEhPTl8zOgorICAgICAgICAjIFJlbW92ZSB0aGUgJ0N1cnJlbnQnIGxpbmssIHRoYXQgd2F5IHdlIGRvbid0IGFjY2lkZW50bHkgbWVzcworICAgICAgICAjIHdpdGggYW4gYWxyZWFkeSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBweXRob24gMgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQeXRob24uZnJhbWV3b3JrJywgJ1ZlcnNpb25zJywgJ0N1cnJlbnQnKSkKIAogZGVmIHBhdGNoRmlsZShpblBhdGgsIG91dFBhdGgpOgogICAgIGRhdGEgPSBmaWxlQ29udGVudHMoaW5QYXRoKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRGVUxMX1ZFUlNJT04nLCBnZXRGdWxsVmVyc2lvbigpKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRWRVJTSU9OJywgZ2V0VmVyc2lvbigpKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnLCAnJy5qb2luKChERVBUQVJHRVQsICcgb3IgbGF0ZXInKSkpCi0gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJEFSQ0hJVEVDVFVSRVMnLCAiaTM4NiwgcHBjIikKKyAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckQVJDSElURUNUVVJFUycsICIsICIuam9pbih1bml2ZXJzYWxfb3B0c19tYXBbVU5JVkVSU0FMQVJDSFNdKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckSU5TVEFMTF9TSVpFJywgaW5zdGFsbFNpemUoKSkKIAogICAgICMgVGhpcyBvbmUgaXMgbm90IGhhbmR5IGFzIGEgdGVtcGxhdGUgdmFyaWFibGUKQEAgLTk3NSw3ICsxMDI5LDcgQEAKICAgICAgICAgICAgIElGUGtnRmxhZ1BhY2thZ2VMaXN0PVsKICAgICAgICAgICAgICAgICBkaWN0KAogICAgICAgICAgICAgICAgICAgICBJRlBrZ0ZsYWdQYWNrYWdlTG9jYXRpb249JyVzLSVzLnBrZyclKGl0ZW1bJ25hbWUnXSwgZ2V0VmVyc2lvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgSUZQa2dGbGFnUGFja2FnZVNlbGVjdGlvbj0nc2VsZWN0ZWQnCisgICAgICAgICAgICAgICAgICAgIElGUGtnRmxhZ1BhY2thZ2VTZWxlY3Rpb249aXRlbS5nZXQoJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJyksCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHBrZ19yZWNpcGVzKCkKICAgICAgICAgICAgIF0sCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggZDk5ZjlmNi4uNzYxY2ZmYiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMSwzMCArMSwzNiBAQAotVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCBNYWNQeXRob24gJEZVTExfVkVSU0lPTiBmb3IgTWFjIE9TIFgKLSRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZm9yIHRoZSBmb2xsb3dpbmcgCi1hcmNoaXRlY3R1cmUocyk6ICRBUkNISVRFQ1RVUkVTLgorVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCBQeXRob24gJEZVTExfVkVSU0lPTiBmb3IgTWFjIE9TIFgKKyRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZm9yIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlKHMpOgorJEFSQ0hJVEVDVFVSRVMuCiAKLVNlcGFyYXRlIGluc3RhbGxlcnMgYXJlIGF2YWlsYWJsZSBmb3Igb2xkZXIgdmVyc2lvbnMKLW9mIE1hYyBPUyBYLCBzZWUgdGhlIGhvbWVwYWdlLCBiZWxvdy4KK0luc3RhbGxhdGlvbiByZXF1aXJlcyBhcHByb3hpbWF0ZWx5ICRJTlNUQUxMX1NJWkUgTUIgb2YgZGlzayBzcGFjZSwKK2lnbm9yZSB0aGUgbWVzc2FnZSB0aGF0IGl0IHdpbGwgdGFrZSB6ZXJvIGJ5dGVzLgogCi1JbnN0YWxsYXRpb24gcmVxdWlyZXMgYXBwcm94aW1hdGVseSAkSU5TVEFMTF9TSVpFIE1CIG9mIGRpc2sKLXNwYWNlLCBpZ25vcmUgdGhlIG1lc3NhZ2UgdGhhdCBpdCB3aWxsIHRha2UgemVybyBieXRlcy4KK1lvdSBtdXN0IGluc3RhbGwgb250byB5b3VyIGN1cnJlbnQgYm9vdCBkaXNrLCBldmVuIHRob3VnaCB0aGUKK2luc3RhbGxlciBkb2VzIG5vdCBlbmZvcmNlIHRoaXMsIG90aGVyd2lzZSB0aGluZ3Mgd2lsbCBub3Qgd29yay4KIAotWW91IG11c3QgaW5zdGFsbCBvbnRvIHlvdXIgY3VycmVudCBib290IGRpc2ssIGV2ZW4KLXRob3VnaCB0aGUgaW5zdGFsbGVyIGRvZXMgbm90IGVuZm9yY2UgdGhpcywgb3RoZXJ3aXNlCi10aGluZ3Mgd2lsbCBub3Qgd29yay4KK1B5dGhvbiBjb25zaXN0cyBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyLCBwbHVzCithIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZworYW4gaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgSURMRSwgcGx1cyBhIHNldCBvZiBwcmUtYnVpbHQKK2V4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvCitQeXRob24gcHJvZ3JhbXMuCiAKLU1hY1B5dGhvbiBjb25zaXN0cyBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlCi1pbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5Ci1hY2Nlc3MgdG8gaXQgZm9yIE1hYyB1c2VycyBpbmNsdWRpbmcgYW4gaW50ZWdyYXRlZCBkZXZlbG9wbWVudAotZW52aXJvbm1lbnQsIElETEUsIHBsdXMgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzCi10aGF0IG9wZW4gdXAgc3BlY2lmaWMgTWFjaW50b3NoIHRlY2hub2xvZ2llcyB0byBQeXRob24gcHJvZ3JhbXMuCisgICAgICAgICAgICAgICAgICAgICoqKiogSU1QT1JUQU5UICoqKioKKyAgICAgICAgICAgICAgICAgICAgCitCZWZvcmUgdXNpbmcgSURMRSBvciBvdGhlciBwcm9ncmFtcyB1c2luZyB0aGUgdGtpbnRlciBncmFwaGljYWwgdXNlcgoraW50ZXJmYWNlIHRvb2xraXQsIHZpc2l0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvCitmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgYW5kIHJlY29tbWVuZGVkIHZlcnNpb25zCitvZiBUY2wvVGsgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIE1hYyBPUyBYLgogCi1UaGUgaW5zdGFsbGVyIHB1dHMgdGhlIGFwcGxpY2F0aW9ucyBpbiAiUHl0aG9uICRWRVJTSU9OIiAKLWluIHlvdXIgQXBwbGljYXRpb25zIGZvbGRlciwgY29tbWFuZC1saW5lIHRvb2xzIGluCi0vdXNyL2xvY2FsL2JpbiBhbmQgdGhlIHVuZGVybHlpbmcgbWFjaGluZXJ5IGluCi0kUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUi4KKyAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKgogCi1Nb3JlIGluZm9ybWF0aW9uIG9uIE1hY1B5dGhvbiBjYW4gYmUgZm91bmQgYXQKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvLgorVGhlIGluc3RhbGxlciBwdXRzIGFwcGxpY2F0aW9ucywgYW4gIlVwZGF0ZSBTaGVsbCBQcm9maWxlIiBjb21tYW5kLAorYW5kIGFuIEV4dHJhcyBmb2xkZXIgY29udGFpbmluZyBkZW1vIHByb2dyYW1zIGFuZCB0b29scyBpbnRvIHRoZQorIlB5dGhvbiAkVkVSU0lPTiIgc3ViZm9sZGVyIG9mIHRoZSBzeXN0ZW0gQXBwbGljYXRpb25zIGZvbGRlciwKK2FuZCBwdXRzIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmVyeSBpbnRvIHRoZSBmb2xkZXIKKyRQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSLiBJdCBjYW4KK29wdGlvbmFsbHkgcGxhY2UgbGlua3MgdG8gdGhlIGNvbW1hbmQtbGluZSB0b29scyBpbiAvdXNyL2xvY2FsL2JpbiBhcword2VsbC4gRG91YmxlLWNsaWNrIG9uIHRoZSAiVXBkYXRlIFNoZWxsIFByb2ZpbGUiIGNvbW1hbmQgdG8gYWRkIHRoZQorImJpbiIgZGlyZWN0b3J5IGluc2lkZSB0aGUgZnJhbWV3b3JrIHRvIHlvdXIgc2hlbGwncyBzZWFyY2ggcGF0aC4KIAogTW9yZSBpbmZvcm1hdGlvbiBvbiBQeXRob24gaW4gZ2VuZXJhbCBjYW4gYmUgZm91bmQgYXQKIGh0dHA6Ly93d3cucHl0aG9uLm9yZy4KZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCmluZGV4IDA3NTNlYTQuLjFmYjdjZDQgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgpAQCAtMSwxOCArMSwyOSBAQAote1xydGYxXG1hY1xhbnNpY3BnMTAwMDBcY29jb2FydGY4MjRcY29jb2FzdWJydGY0MTAKLXtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQ3NyBIZWx2ZXRpY2E7XGYxXGZzd2lzc1xmY2hhcnNldDc3IEhlbHZldGljYS1Cb2xkO30KK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTAzOFxjb2NvYXN1YnJ0ZjM1MAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30KIHtcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KLVxwYXBlcncxMTkwMFxwYXBlcmgxNjg0MFxtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTkyMFx2aWV3aDEwNjYwXHZpZXdraW5kMAorXHBhcGVydzExOTA0XHBhcGVyaDE2ODM2XG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3c5NjQwXHZpZXdoMTA2MjBcdmlld2tpbmQwCiBccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHFsXHFuYXR1cmFsCiAKIFxmMFxmczI0IFxjZjAgVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCAKLVxmMVxiIE1hY1B5dGhvbiAkRlVMTF9WRVJTSU9OCi1cZjBcYjAgIGZvciAKLVxmMVxiIE1hYyBPUyBYICRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLVxmMFxiMCAuXAorXGIgUHl0aG9uICRGVUxMX1ZFUlNJT04KK1xiMCAgZm9yIAorXGIgTWFjIE9TIFggJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorXGIwIC5cCiBcCi1NYWNQeXRob24gY29uc2lzdHMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IFxiIElETEVcYjAgIHBsdXMgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCisKK1xiIFB5dGhvbiBmb3IgTWFjIE9TIFgKK1xiMCAgY29uc2lzdHMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIE9TIFggdXNlcnMgaW5jbHVkaW5nIGFuIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgCitcYiBJRExFCitcYjAgIGFuZCBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKIFwKLVNlZSB0aGUgUmVhZE1lIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uXAorU2VlIHRoZSBSZWFkTWUgZmlsZSBhbmQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwKIFwKLVwKLVRoaXMgcGFja2FnZSB3aWxsIGJ5IGRlZmF1bHQgdXBkYXRlIHlvdXIgc2hlbGwgcHJvZmlsZSB0byBlbnN1cmUgdGhhdCB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGlzIG9uIHRoZSBzZWFyY2ggcGF0aCBvZiB5b3VyIHNoZWxsLiBQbGVhc2UgZGVzZWxlY3QgdGhlICJTaGVsbCBwcm9maWxlIHVwZGF0ZXIiIHBhY2thZ2Ugb24gdGhlIHBhY2thZ2UgY3VzdG9taXphdGlvbiBzY3JlZW4gaWYgeW91IHdhbnQgdG8gYXZvaWQgdGhpcyBtb2RpZmljYXRpb24uICBEb3VibGUtY2xpY2sgXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGVcYjAgIGF0IGFueSB0aW1lIHRvIG1ha2UgJEZVTExfVkVSU0lPTiB0aGUgZGVmYXVsdCBQeXRob24ufQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworXGIgSU1QT1JUQU5UOgorXGIwICAKK1xiIElETEUKK1xiMCAgYW5kIG90aGVyIHByb2dyYW1zIHVzaW5nIHRoZSAKK1xiIHRraW50ZXIKK1xiMCAgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIHRvb2xraXQgcmVxdWlyZSBzcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgCitcYiBUY2wvVGsKK1xiMCAgcGxhdGZvcm0gaW5kZXBlbmRlbnQgd2luZG93aW5nIHRvb2xraXQuICBWaXNpdCB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyJ9fXtcZmxkcnNsdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrL319IGZvciBjdXJyZW50IGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YgVGNsL1RrIGZvciB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGFuZCBNYWMgT1MgWC59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uCmluZGV4IDlmNTkxOGUuLjMxZmJmMmYgMTAwNzU1Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbgorKysgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24KQEAgLTEsMTEgKzEsMzIgQEAKICMhL2Jpbi9zaAogCiBQWVZFUj0iQFBZVkVSQCIKK0ZXSz0iL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyR7UFlWRVJ9IgorRldLX0RPQ0RJUl9TVUJQQVRIPSJSZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uIgorRldLX0RPQ0RJUj0iJHtGV0t9LyR7RldLX0RPQ0RJUl9TVUJQQVRIfSIKK0FQUERJUj0iL0FwcGxpY2F0aW9ucy9QeXRob24gJHtQWVZFUn0iCitERVZfRE9DRElSPSIvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24iCitTSEFSRV9ESVI9IiR7RldLfS9zaGFyZSIKK1NIQVJFX0RPQ0RJUj0iJHtTSEFSRV9ESVJ9L2RvYy9weXRob24ke1BZVkVSfSIKK1NIQVJFX0RPQ0RJUl9UT19GV0s9Ii4uLy4uLy4uIgogCi1pZiBbIC1kIC9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbiBdOyB0aGVuCi0JaWYgWyAhIC1kIC9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbi9QeXRob24gXTsgdGhlbgotCQlta2RpciAtcCAvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24vUHl0aG9uCi0JZmkKLQotCWxuIC1maHMgL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyR7UFlWRVJ9L1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24gIi9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbi9QeXRob24vUmVmZXJlbmNlIERvY3VtZW50YXRpb24gQFBZVkVSQCIKKyMgbWFrZSBsaW5rIGluIC9EZXZlbG9wZXIvRG9jdW1lbnRhdGlvbi8gZm9yIFhjb2RlIHVzZXJzCitpZiBbIC1kICIke0RFVl9ET0NESVJ9IiBdOyB0aGVuCisgICAgaWYgWyAhIC1kICIke0RFVl9ET0NESVJ9L1B5dGhvbiIgXTsgdGhlbgorICAgICAgICBta2RpciAtcCAiJHtERVZfRE9DRElSfS9QeXRob24iCisgICAgZmkKKyAgICBsbiAtZmhzICIke0ZXS19ET0NESVJ9IiAiJHtERVZfRE9DRElSfS9QeXRob24vUmVmZXJlbmNlIERvY3VtZW50YXRpb24gJHtQWVZFUn0iCiBmaQorCisjIG1ha2UgbGluayBpbiAvQXBwbGljYXRpb25zL1B5dGhvbiBtLm4vIGZvciBGaW5kZXIgdXNlcnMKK2lmIFsgLWQgIiR7QVBQRElSfSIgXTsgdGhlbgorICAgIGxuIC1maHMgIiR7RldLX0RPQ0RJUn0vaW5kZXguaHRtbCIgIiR7QVBQRElSfS9QeXRob24gRG9jdW1lbnRhdGlvbi5odG1sIgorZmkKKworIyBtYWtlIHNoYXJlL2RvYyBsaW5rIGluIGZyYW1ld29yayBmb3IgY29tbWFuZCBsaW5lIHVzZXJzCitpZiBbIC1kICIke1NIQVJFX0RJUn0iIF07IHRoZW4KKyAgICBta2RpciAtcCAiJHtTSEFSRV9ET0NESVJ9IgorICAgICMgbWFrZSByZWxhdGl2ZSBsaW5rIHRvIGh0bWwgZG9jIGRpcmVjdG9yeQorICAgIGxuIC1maHMgIiR7U0hBUkVfRE9DRElSX1RPX0ZXS30vJHtGV0tfRE9DRElSX1NVQlBBVEh9IiAiJHtTSEFSRV9ET0NESVJ9L2h0bWwiCitmaQorCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUKaW5kZXggNTA1OWJiYy4uYTY2YjhjNyAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5wYXRjaC1wcm9maWxlCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSAke1BZVEhPTl9ST09UfS9iaW4gaXMgb24gdGhlIHVzZXJzIFBBVEguCiBCU0g9ImBiYXNlbmFtZSAiJHt0aGVTaGVsbH0iYCIKIGNhc2UgIiR7QlNIfSIgaW4KLWJhc2h8a3NofHNofCpjc2gpCitiYXNofGtzaHxzaHwqY3NofHpzaCkKIAlpZiBbIGBpZCAtdXJgID0gMCBdOyB0aGVuCiAJCVA9YHN1IC0gJHtVU0VSfSAtYyAnZWNobyBBLVgtNC1YQEAkUEFUSEBAWC00LVgtQScgfCBncmVwICdBLVgtNC1YQEAuKkBAWC00LVgtQScgfCBzZWQgLWUgJ3MvXkEtWC00LVhAQC8vZycgLWUgJ3MvQEBYLTQtWC1BJC8vZydgCiAJZWxzZQpAQCAtNTcsNyArNTcsNyBAQAogCQljcCAtZnAgIiR7UkN9IiAiJHtSQ30ucHlzYXZlIgogCWZpCiAJZWNobyAiIiA+PiAiJHtSQ30iCi0JZWNobyAiIyBTZXR0aW5nIFBBVEggZm9yIE1hY1B5dGhvbiAke1BZVkVSfSIgPj4gIiR7UkN9IgorCWVjaG8gIiMgU2V0dGluZyBQQVRIIGZvciBQeXRob24gJHtQWVZFUn0iID4+ICIke1JDfSIKIAllY2hvICIjIFRoZSBvcmdpbmFsIHZlcnNpb24gaXMgc2F2ZWQgaW4gLmNzaHJjLnB5c2F2ZSIgPj4gIiR7UkN9IgogCWVjaG8gInNldCBwYXRoPSgke1BZVEhPTl9ST09UfS9iaW4gIickcGF0aCciKSIgPj4gIiR7UkN9IgogCWlmIFsgYGlkIC11cmAgPSAwIF07IHRoZW4KQEAgLTc2LDYgKzc2LDkgQEAKIAkJUFI9IiR7SE9NRX0vLmJhc2hfcHJvZmlsZSIKIAlmaQogCTs7Cit6c2gpCisgICAgICAgIFBSPSIke0hPTUV9Ly56cHJvZmlsZSIKKyAgICAgICAgOzsKICpzaCkKIAlQUj0iJHtIT01FfS8ucHJvZmlsZSIKIAk7OwpAQCAtODYsNyArODksNyBAQAogCWNwIC1mcCAiJHtQUn0iICIke1BSfS5weXNhdmUiCiBmaQogZWNobyAiIiA+PiAiJHtQUn0iCi1lY2hvICIjIFNldHRpbmcgUEFUSCBmb3IgTWFjUHl0aG9uICR7UFlWRVJ9IiA+PiAiJHtQUn0iCitlY2hvICIjIFNldHRpbmcgUEFUSCBmb3IgUHl0aG9uICR7UFlWRVJ9IiA+PiAiJHtQUn0iCiBlY2hvICIjIFRoZSBvcmdpbmFsIHZlcnNpb24gaXMgc2F2ZWQgaW4gYGJhc2VuYW1lICR7UFJ9YC5weXNhdmUiID4+ICIke1BSfSIKIGVjaG8gJ1BBVEg9IiciJHtQWVRIT05fUk9PVH0vYmluIic6JHtQQVRIfSInID4+ICIke1BSfSIKIGVjaG8gJ2V4cG9ydCBQQVRIJyA+PiAiJHtQUn0iCmRpZmYgLS1naXQgYS9NYWMvRGVtby9odG1sLmljb25zL21vZHVsYXRvci5naWYgYi9NYWMvRGVtby9odG1sLmljb25zL21vZHVsYXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NWUxZjkuLjAwMDAwMDAKLS0tIGEvTWFjL0RlbW8vaHRtbC5pY29ucy9tb2R1bGF0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL0lETEUvSW5mby5wbGlzdC5pbiBiL01hYy9JRExFL0luZm8ucGxpc3QuaW4KaW5kZXggNThlOTEzYy4uYTcxMTY5MCAxMDA2NDQKLS0tIGEvTWFjL0lETEUvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvSURMRS9JbmZvLnBsaXN0LmluCkBAIC0zNiw3ICszNiw3IEBACiAJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KIAk8c3RyaW5nPklETEU8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCDCqSAwMDEtMjAwNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCDCqSAyMDAxLTIwMTEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT4KIAk8c3RyaW5nPklETEUuaWNuczwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CkBAIC01MSw1ICs1MSwxNCBAQAogCTxzdHJpbmc+JVZFUlNJT04lPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KIAk8c3RyaW5nPiVWRVJTSU9OJTwvc3RyaW5nPgorPCEtLQorCTxrZXk+TFNNaW5pbXVtU3lzdGVtVmVyc2lvbkJ5QXJjaGl0ZWN0dXJlPC9rZXk+CisJPGRpY3Q+CisJICAgIDxrZXk+eDg2XzY0PC9rZXk+CisJICAgIDxzdHJpbmc+MTAuNi4wPC9zdHJpbmc+CisJICAgIDxrZXk+cHBjNjQ8L2tleT4KKwkgICAgPHN0cmluZz4xMC42LjA8L3N0cmluZz4KKwk8L2RpY3Q+CistLT4KIDwvZGljdD4KIDwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NYWMvSURMRS9NYWtlZmlsZS5pbiBiL01hYy9JRExFL01ha2VmaWxlLmluCmluZGV4IDQ5NmMxMzkuLjZhZTM2MGMgMTAwNjQ0Ci0tLSBhL01hYy9JRExFL01ha2VmaWxlLmluCisrKyBiL01hYy9JRExFL01ha2VmaWxlLmluCkBAIC0xMCw2ICsxMCw4IEBACiBVTklWRVJTQUxTREs9QFVOSVZFUlNBTFNES0AKIGJ1aWxkZGlyPQkuLi8uLgogUFlUSE9ORlJBTUVXT1JLPUBQWVRIT05GUkFNRVdPUktACitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorCiAKIFJVTlNIQVJFRD0gICAgICBAUlVOU0hBUkVEQAogQlVJTERFWEU9ICAgICAgIEBCVUlMREVYRUVYVEAKQEAgLTIyLDcgKzI0LDcgQEAKIAogQlVORExFQlVMREVSPSQoc3JjZGlyKS8uLi8uLi9MaWIvcGxhdC1tYWMvYnVuZGxlYnVpbGRlci5weQogCi1QWVRIT05BUFBTRElSPS9BcHBsaWNhdGlvbnMvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKK1BZVEhPTkFQUFNESVI9QEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYQC8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQogCiBhbGw6IElETEUuYXBwCiAKQEAgLTUxLDkgKzUzLDEyIEBACiAJCS0taWNvbmZpbGU9JChzcmNkaXIpLy4uL0ljb25zL0lETEUuaWNucyBcCiAJCS0tcmVzb3VyY2U9JChzcmNkaXIpLy4uL0ljb25zL1B5dGhvblNvdXJjZS5pY25zIFwKIAkJLS1yZXNvdXJjZT0kKHNyY2RpcikvLi4vSWNvbnMvUHl0aG9uQ29tcGlsZWQuaWNucyBcCi0JCS0tcHl0aG9uPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSylgdGVzdCAtZiAiJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktMzIiICYmIGVjaG8gIi0zMiJgICBcCisJCS0tcHl0aG9uPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24gXAogCQlidWlsZAotCitpZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCisJcm0gIklETEUuYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbiIKKwlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAiSURMRS5hcHAvQ29udGVudHMvTWFjT1MvUHl0aG9uIiAiJChCVUlMRFBZVEhPTikiCitlbmRpZgogCiBJbmZvLnBsaXN0OiAkKHNyY2RpcikvSW5mby5wbGlzdC5pbgogCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpICQoQlVJTERQWVRIT04pIC1jICdpbXBvcnQgcGxhdGZvcm07IHByaW50IHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCknYCInL2cnIDwgJChzcmNkaXIpL0luZm8ucGxpc3QuaW4gPiBJbmZvLnBsaXN0CmRpZmYgLS1naXQgYS9NYWMvSURMRS9jb25maWctZXh0ZW5zaW9ucy5kZWYgYi9NYWMvSURMRS9jb25maWctZXh0ZW5zaW9ucy5kZWYKaW5kZXggYzE3ZjA2OC4uMTc5MWI5YyAxMDA2NDQKLS0tIGEvTWFjL0lETEUvY29uZmlnLWV4dGVuc2lvbnMuZGVmCisrKyBiL01hYy9JRExFL2NvbmZpZy1leHRlbnNpb25zLmRlZgpAQCAtODYsMyArODYsOCBAQAogZmdjb2xvcj1CbGFjawogW0NvZGVDb250ZXh0X2JpbmRpbmdzXQogdG9nZ2xlLWNvZGUtY29udGV4dD0KKworW1JzdHJpcEV4dGVuc2lvbl0KK2VuYWJsZT0xCitlbmFibGVfc2hlbGw9MAorZW5hYmxlX2VkaXRvcj0xCmRpZmYgLS1naXQgYS9NYWMvSURMRS9pZGxlbWFpbi5weSBiL01hYy9JRExFL2lkbGVtYWluLnB5CmluZGV4IGQ2ODAzYmEuLjhiOGJlYjkgMTAwNjQ0Ci0tLSBhL01hYy9JRExFL2lkbGVtYWluLnB5CisrKyBiL01hYy9JRExFL2lkbGVtYWluLnB5CkBAIC00OCw3ICs0OCw3IEBACiAjIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgZnJhbWV3b3JrLCBieSBmb2xsb3dpbmcgdGhlIHN5bWxpbmsKICMgZXhwb3J0ZWQgaW4gUFlUSE9ORVhFQ1VUQUJMRS4KIHB5ZXggPSBvcy5lbnZpcm9uWydQWVRIT05FWEVDVVRBQkxFJ10KLXN5cy5leGVjdXRhYmxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShweWV4KSwgb3MucmVhZGxpbmsocHlleCkpCitzeXMuZXhlY3V0YWJsZSA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnYmluJywgJ3B5dGhvbiVkLiVkJyUoc3lzLnZlcnNpb25faW5mb1s6Ml0pKQogCiAjIFJlbW92ZSBhbnkgc3lzLnBhdGggZW50cmllcyBmb3IgdGhlIFJlc291cmNlcyBkaXIgaW4gdGhlIElETEUuYXBwIGJ1bmRsZS4KIHAgPSBweWV4LnBhcnRpdGlvbignLmFwcCcpCkBAIC02OCw2ICs2OCw4IEBACiAgICAgICAgIGJyZWFrCiAKICMgTm93IGl0IGlzIHNhZmUgdG8gaW1wb3J0IGlkbGVsaWIuCitmcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKK21hY29zeFN1cHBvcnQuX2FwcGJ1bmRsZSA9IFRydWUKIGZyb20gaWRsZWxpYi5QeVNoZWxsIGltcG9ydCBtYWluCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTWFjL01ha2VmaWxlLmluIGIvTWFjL01ha2VmaWxlLmluCmluZGV4IDk0OWUyMjkuLjVhYjBhZTUgMTAwNjQ0Ci0tLSBhL01hYy9NYWtlZmlsZS5pbgorKysgYi9NYWMvTWFrZWZpbGUuaW4KQEAgLTE1LDEzICsxNSwxNCBAQAogRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPUBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVhACiBQWVRIT05GUkFNRVdPUks9QFBZVEhPTkZSQU1FV09SS0AKIFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVI9QFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVJACitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorQ0M9QENDQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPUBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQAogZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogCi0KICMgVGhlc2UgYXJlIG5vcm1hbGx5IGdsaW1wc2VkIGZyb20gdGhlIHByZXZpb3VzIHNldAogYmluZGlyPSQocHJlZml4KS9iaW4KLVBZVEhPTkFQUFNESVI9L0FwcGxpY2F0aW9ucy8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQorUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiBBUFBJTlNUQUxMRElSPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcAogCiAjIFZhcmlhYmxlcyBmb3IgaW5zdGFsbGluZyB0aGUgIm5vcm1hbCIgdW5peCBiaW5hcmllcwpAQCAtNDAsMTkgKzQxLDEyIEBACiBDUE1BQz0vRGV2ZWxvcGVyL1Rvb2xzL0NwTWFjCiAKIEFQUFRFTVBMQVRFPSQoc3JjZGlyKS9SZXNvdXJjZXMvYXBwCi1BUFBTVUJESVJTPU1hY09TIFJlc291cmNlcyBSZXNvdXJjZXMvRW5nbGlzaC5scHJvaiBcCi0JUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbiBcCi0JUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9kb2MgXAotCVJlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaWRlCi1ET0NESVI9JChzcmNkaXIpL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbgotRE9DSU5ERVg9JChET0NESVIpLyJEb2N1bWVudGF0aW9uIGlkeCIKK0FQUFNVQkRJUlM9TWFjT1MgUmVzb3VyY2VzIAogQ0FDSEVSU1JDPSQoc3JjZGlyKS9zY3JpcHRzL2NhY2hlcnNyYy5weQogY29tcGlsZWFsbD0kKHNyY2RpcikvLi4vTGliL2NvbXBpbGVhbGwucHkKIAotaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfQnVpbGRBcHBsZXQgaW5zdGFsbF9QeXRob25MYXVuY2hlciBcCi0JaW5zdGFsbF9JRExFIGNoZWNrYXBwbGVweXRob24gaW5zdGFsbF9weXRob253IGluc3RhbGxfdmVyc2lvbmVkdG9vbHMKLQotaW5zdGFsbGFwcHM0d2F5OiBpbnN0YWxsX1B5dGhvbjR3YXkgaW5zdGFsbF9CdWlsZEFwcGxldCBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRSBpbnN0YWxsX3B5dGhvbnc0d2F5IGluc3RhbGxfdmVyc2lvbmVkdG9vbHMKK2luc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX3B5dGhvbncgaW5zdGFsbF9CdWlsZEFwcGxldCBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIFwKKwlpbnN0YWxsX0lETEUgY2hlY2thcHBsZXB5dGhvbiBpbnN0YWxsX3ZlcnNpb25lZHRvb2xzCiAKIAogaW5zdGFsbF9weXRob253OiBweXRob253CkBAIC02MCwzMyArNTQsMTMgQEAKIAkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTikiCiAJbG4gLXNmIHB5dGhvbiQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiIKIAlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnciCi0KLQotIyBJbnN0YWxsIDMgdmFyaWFudHMgb2YgcHl0aG9uL3B5dGhvbnc6IAotIyAJLSAzMi1iaXQgKGkzODYgYW5kIHBwYykKLSMgCS0gNjQtYml0ICh4ODZfNjQgYW5kIHBwYzY0KQotIyAJLSBhbGwgICAgKGFsbCBmb3VyIGFyY2hpdGVjdHVyZXMpCi0jIAktIE1ha2UgJ3B5dGhvbicgYW5kICdweXRob253JyBhbGlhc2VzIGZvciB0aGUgMzItYml0IHZhcmlhbnQKLWluc3RhbGxfcHl0aG9udzR3YXk6IHB5dGhvbnctMzIgcHl0aG9udy02NCBweXRob253Ci0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253LTY0ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKS02NCIKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbnctNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktNjQiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbi02NCIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnctNjQiCi0KLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbnctMzIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIgotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udy0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKS0zMiIKK2lmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKKwlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLTMyIHB5dGhvbncKKwlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKS0zMiBweXRob253CiAJbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktMzIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbi0zMiIKIAlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnctMzIiCitlbmRpZgogCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKS1hbGwiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLWFsbCIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS1hbGwgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbi1hbGwiCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLWFsbCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udy1hbGwiCi0KLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pIgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uIgogCiAjCiAjIEluc3RhbGwgdW5peCB0b29scyBpbiAvdXNyL2xvY2FsL2Jpbi4gVGhlc2UgYXJlIGp1c3QgYWxpYXNlcyBmb3IgdGhlIApAQCAtOTYsMTggKzcwLDE1IEBACiAJaWYgWyAhIC1kICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgXTsgdGhlbiAgXAogCQkkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiA7XAogCWZpCi0JZm9yIGZuIGluIHB5dGhvbiBweXRob253IGlkbGUgcHlkb2MgcHl0aG9uLWNvbmZpZyBzbXRwZC5weSAgIFwKKwlmb3IgZm4gaW4gcHl0aG9uIHB5dGhvbncgaWRsZSBweWRvYyBweXRob24tY29uZmlnIHNtdHBkLnB5IDJ0bzMgXAogCQkgIHB5dGhvbiQoVkVSU0lPTikgcHl0aG9udyQoVkVSU0lPTikgaWRsZSQoVkVSU0lPTikgXAotCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyBzbXRwZCQoVkVSU0lPTikucHkgO1wKKwkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgc210cGQkKFZFUlNJT04pLnB5IFwKKwkJICAydG8zLSQoVkVSU0lPTikgO1wKIAlkbyBcCiAJCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCiAJZG9uZQogCiAKLSMgVE9ETzogaW5zdGFsbCBzeW1saW5rcyBmb3IgLTMyLCAtNjQgYW5kIC1hbGwgYXMgd2VsbAotaW5zdGFsbHVuaXh0b29sczR3YXk6IGluc3RhbGx1bml4dG9vbHMKLQotCiAjCiAjIExpa2UgaW5zdGFsbHVuaXh0b29scywgYnV0IG9ubHkgaW5zdGFsbCBsaW5rcyB0byB0aGUgdmVyc2lvbmVkIGJpbmFyaWVzLgogIwpAQCAtMTIwLDkgKzkxLDcgQEAKIAlkbyBcCiAJCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCiAJZG9uZQotCi0jIFRPRE86IC0zMiwgLTY0IGFuZCAtYWxsIHZhcmlhbnRzCi1hbHRpbnN0YWxsdW5peHRvb2xzNHdheTogYWx0aW5zdGFsbHVuaXh0b29scworCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8ydG8zLSQoVkVSU0lPTikiICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8ydG8zLSQoVkVSU0lPTikiIDtcCiAKICMgQnkgZGVmYXVsdCBtb3N0IHRvb2xzIGFyZSBpbnN0YWxsZWQgd2l0aG91dCBhIHZlcnNpb24gaW4gdGhlaXIgYmFzZW5hbWUsIHRvCiAjIG1ha2UgaXQgZWFzaWVyIHRvIGluc3RhbGwgKGFuZCB1c2UpIHNldmVyYWwgcHl0aG9uIHZlcnNpb25zIHNpZGUtYnktc2lkZSBtb3ZlCkBAIC0xNDUsMjkgKzExNCwxOSBAQAogCQltdiAiJChERVNURElSKSQocHJlZml4KS9iaW4vc210cGQucHkiICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9zbXRwZCQoVkVSU0lPTikucHkiICA7XAogCQlsbiAtc2YgInNtdHBkJChWRVJTSU9OKS5weSIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3NtdHBkLnB5IiA7XAogCWZpCisJaWYgWyAhIC1oICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi8ydG8zIiBdOyB0aGVuIFwKKwkJbXYgIiQoREVTVERJUikkKHByZWZpeCkvYmluLzJ0bzMiICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi8ydG8zLSQoVkVSU0lPTikiICA7XAorCQlsbiAtc2YgIjJ0bzMtJChWRVJTSU9OKSIgIiQoREVTVERJUikkKHByZWZpeCkvYmluLzJ0bzMiIDtcCisJZmkKIAogCiBweXRob253OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtbyAkQCAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIFwKLQkJLURQWVRIT05XRVhFQ1VUQUJMRT0nIiQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspIicKLQotcHl0aG9udy0zMjogJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyBNYWtlZmlsZQotCSQoQ0MpICQoTERGTEFHUykgLW8gcHl0aG9udy10bXAubyAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIFwKLQkJLURQWVRIT05XRVhFQ1VUQUJMRT0nIiQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspLTMyIicgO1wKLQlsaXBvICBATElQT18zMkJJVF9GTEFHU0AgLW91dHB1dCAkQCAgcHl0aG9udy10bXAubyA7IHJtIHB5dGhvbnctdG1wLm8KLQotcHl0aG9udy02NDogJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyBNYWtlZmlsZQotCSQoQ0MpICQoTERGTEFHUykgLW8gcHl0aG9udy10bXAubyAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIFwKLQkJLURQWVRIT05XRVhFQ1VUQUJMRT0nIiQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspLTY0IicgO1wKLQlsaXBvICBATElQT182NEJJVF9GTEFHU0AgLW91dHB1dCAkQCAgcHl0aG9udy10bXAubyA7IHJtIHB5dGhvbnctdG1wLm8KKwkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyAtSS4uIC1JJChzcmNkaXIpLy4uL0luY2x1ZGUgLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQogCiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyOgogCWNkIFB5dGhvbkxhdW5jaGVyICYmIG1ha2UgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikKIAogaW5zdGFsbF9QeXRob246Ci0JQGlmIHRlc3QgISAtZiAkKERPQ0lOREVYKTsgdGhlbiBcCi0JCWVjaG8gV0FSTklORzogeW91IHNob3VsZCBydW4gQXBwbGUgSGVscCBJbmRleGluZyBUb29sIG9uICQoRE9DRElSKTsgXAotCWZpCiAJQGZvciBpIGluICIkKFBZVEhPTkFQUFNESVIpIiAiJChBUFBJTlNUQUxMRElSKSIgIiQoQVBQSU5TVEFMTERJUikvQ29udGVudHMiOyBkbyBcCiAJCWlmIHRlc3QgISAtZCAiJChERVNURElSKSQkaSI7IHRoZW4gXAogCQkJZWNobyAiQ3JlYXRpbmcgZGlyZWN0b3J5ICQoREVTVERJUikkJGkiOyBcCkBAIC0yMTgsMTEgKzE3Nyw2IEBACiAJCT4gIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL0luZm8ucGxpc3QiCiAJcm0gIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL0luZm8ucGxpc3QuaW4iCiAKLWluc3RhbGxfUHl0aG9uNHdheTogaW5zdGFsbF9QeXRob24KLQlsaXBvICBATElQT18zMkJJVF9GTEFHU0AgLW91dHB1dCAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspLTMyIiAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspIgotCWxpcG8gIEBMSVBPXzY0QklUX0ZMQUdTQCAtb3V0cHV0ICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktNjQiICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSykiCi0KLQogCiBpbnN0YWxsX0lETEU6CiAJY2QgSURMRSAmJiBtYWtlIGluc3RhbGwKQEAgLTIzMCw5ICsxODQsMTMgQEAKIGluc3RhbGxfQnVpbGRBcHBsZXQ6CiAJJChSVU5TSEFSRUQpIEBBUkNIX1JVTl8zMkJJVEAgJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL3NjcmlwdHMvQnVpbGRBcHBsZXQucHkgXAogCQktLWRlc3Ryb290ICIkKERFU1RESVIpIiBcCi0JCS0tcHl0aG9uPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSylgdGVzdCAtZiAiJChERVNURElSKSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktMzIiICYmIGVjaG8gIi0zMiJgICBcCisJCS0tcHl0aG9uPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24gXAogCQktLW91dHB1dCAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikvQnVpbGQgQXBwbGV0LmFwcCIgXAogCQkkKHNyY2Rpcikvc2NyaXB0cy9CdWlsZEFwcGxldC5weQoraWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQorCXJtICIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9CdWlsZCBBcHBsZXQuYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbiIKKwlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikvQnVpbGQgQXBwbGV0LmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24iICQoQlVJTERQWVRIT04pCitlbmRpZiAgIAogCiBNQUNMSUJERVNUPSQoTElCREVTVCkvcGxhdC1tYWMKIE1BQ1RPT0xTREVTVD0kKHByZWZpeCkvTWFjL1Rvb2xzCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9Db2xvclBpY2tlcm1vZHVsZS5jIGIvTWFjL01vZHVsZXMvQ29sb3JQaWNrZXJtb2R1bGUuYwppbmRleCA4MjRkNGQzLi42ODhjNDY4IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9Db2xvclBpY2tlcm1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL0NvbG9yUGlja2VybW9kdWxlLmMKQEAgLTcxLDcgKzcxLDcgQEAKIHsKICAgICBQeU9iamVjdCAqbTsKIAotICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCBDb2xvclBpY2tlciBpcyByZW1vdmVkLiIsIDEpIDwgMCkKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgdGhlIENvbG9yUGlja2VyIG1vZHVsZSBpcyByZW1vdmVkLiIsIDEpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9NYWNPUy5jIGIvTWFjL01vZHVsZXMvTWFjT1MuYwppbmRleCA3OWIyNzY0Li4yOGRlNGY1IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9NYWNPUy5jCisrKyBiL01hYy9Nb2R1bGVzL01hY09TLmMKQEAgLTMwLDYgKzMwLDkgQEAKICNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CiAKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4gIC8qIGZvciBudG9obCwgaHRvbmwgKi8KKworCiAjaWZuZGVmIEhBVkVfT1NYMTA1X1NESwogdHlwZWRlZiBTSW50MTYgIEZTSU9SZWZOdW07CiAjZW5kaWYKQEAgLTMxMCw2ICszMTMsMTAgQEAKICAgICAgICAgaWYgKChlcnIgPSBGU3BHZXRGSW5mbygmZnNzLCAmaW5mbykpICE9IG5vRXJyKSB7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTWFjKE1hY09TX0Vycm9yLCBlcnIpOwogICAgICAgICB9CisKKyAgICAgICAgaW5mby5mZENyZWF0b3IgPSBudG9obChpbmZvLmZkQ3JlYXRvcik7CisgICAgICAgIGluZm8uZmRUeXBlID0gbnRvaGwoaW5mby5mZFR5cGUpOworCiAgICAgICAgIGNyZWF0b3IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmluZm8uZmRDcmVhdG9yLCA0KTsKICAgICAgICAgdHlwZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopJmluZm8uZmRUeXBlLCA0KTsKQEAgLTM0MSw2ICszNDgsOCBAQAogCiAgICAgfQogICAgIGZpbmZvID0gKEZpbGVJbmZvKikmKGNhdGFsb2dpbmZvLmZpbmRlckluZm8pOworICAgIGZpbmZvLT5maWxlQ3JlYXRvciA9IG50b2hsKGZpbmZvLT5maWxlQ3JlYXRvcik7CisgICAgZmluZm8tPmZpbGVUeXBlID0gbnRvaGwoZmluZm8tPmZpbGVUeXBlKTsKICAgICBjcmVhdG9yID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKSYoZmluZm8tPmZpbGVDcmVhdG9yKSwgNCk7CiAgICAgdHlwZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyKikmKGZpbmZvLT5maWxlVHlwZSksIDQpOwogCkBAIC02ODYsNyArNjk1LDcgQEAKIHsKICAgICBQeU9iamVjdCAqbSwgKmQ7CiAKLSAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgTWFjT1MgaXMgcmVtb3ZlZC4iLCAxKSkKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgdGhlIE1hY09TIG1vZHVsZSBpcyByZW1vdmVkLiIsIDEpKQogICAgICAgICByZXR1cm47CiAKICAgICBtID0gUHlfSW5pdE1vZHVsZSgiTWFjT1MiLCBNYWNPU19NZXRob2RzKTsKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL05hdi5jIGIvTWFjL01vZHVsZXMvTmF2LmMKaW5kZXggYmQxNTNjZi4uZDJhYTdkYiAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvTmF2LmMKKysrIGIvTWFjL01vZHVsZXMvTmF2LmMKQEAgLTkzMCwxNiArOTMwLDE1IEBACiB2b2lkCiBpbml0TmF2KHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOwotCi0gICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJJbiAzLngsIE5hdiBpcyByZW1vdmVkLiIsIDEpKQotICAgICAgICByZXR1cm47Ci0KICNpZmRlZiBfX0xQNjRfXwogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgIk5hdmlnYXRpb24gU2VydmljZXMgbm90IGF2YWlsYWJsZSBpbiA2NC1iaXQgbW9kZSIpOwogICAgIHJldHVybjsKIAogI2Vsc2UgICAvKiAhX19MUDY0X18gKi8KKyAgICBQeU9iamVjdCAqbSwgKmQ7CisKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgdGhlIE5hdiBtb2R1bGUgaXMgcmVtb3ZlZC4iLCAxKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLyogVGVzdCB0aGF0IHdlIGhhdmUgTmF2U2VydmljZXMgKi8KICAgICBpZiAoICFOYXZTZXJ2aWNlc0F2YWlsYWJsZSgpICkgewpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvT1NBVGVybWlub2xvZ3kuYyBiL01hYy9Nb2R1bGVzL09TQVRlcm1pbm9sb2d5LmMKaW5kZXggMGI3NmIzZS4uMjExNGQwNyAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvT1NBVGVybWlub2xvZ3kuYworKysgYi9NYWMvTW9kdWxlcy9PU0FUZXJtaW5vbG9neS5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgotKiogVGhpcyBtb2R1bGUgaXMgYSBvbmUtdHJpY2sgcG9ueTogZ2l2ZW4gYW4gRlNTcGVjIGl0IGdldHMgdGhlIGFldXQKLSoqIHJlc291cmNlcy4gSXQgd2FzIHdyaXR0ZW4gYnkgRG9ub3ZhbiBQcmVzdG9uIGFuZCBzbGlnaHRseSBtb2RpZmllZAotKiogYnkgSmFjay4KKyoqIEFuIGludGVyZmFjZSB0byB0aGUgYXBwbGljYXRpb24gc2NyaXB0aW5nIHJlbGF0ZWQgZnVuY3Rpb25zIG9mIHRoZSBPU0EgQVBJLgogKioKLSoqIEl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgcGxhY2Vob2xkZXIsIGl0IHdpbGwgcHJvYmFibHkgYmUgcmVwbGFjZWQKLSoqIGJ5IGEgZnVsbCBpbnRlcmZhY2UgdG8gT3BlblNjcmlwdGluZy4KKyoqIEdldEFwcFRlcm1pbm9sb2d5IC0gZ2l2ZW4gYW4gRlNTcGVjL3Bvc2l4IHBhdGggdG8gYW4gYXBwbGljYXRpb24sCisqKiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGl0cyBhZXZ0IChzY3JpcHRpbmcgdGVybWlub2xvZ3kpIHJlc291cmNlKHMpCisqKgorKiogR2V0U3lzVGVybWlub2xvZ3kgLSByZXR1cm5zIHRoZSBBcHBsZVNjcmlwdCBsYW5ndWFnZSBjb21wb25lbnQncworKiogICAgICAgICAgICAgICAgICAgICAgICAgYWV1dCAoc2NyaXB0aW5nIHRlcm1pbm9sb2d5KSByZXNvdXJjZQorKioKKyoqIFdyaXR0ZW4gYnkgRG9ub3ZhbiBQcmVzdG9uIGFuZCBzbGlnaHRseSBtb2RpZmllZCBieSBKYWNrIGFuZCBIQVMuCiAqLwogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInB5bWFjdG9vbGJveC5oIgpAQCAtMjYsMTIgKzI5LDE5IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnxpIiwgUHlNYWNfR2V0RlNTcGVjLCAmZnNzLCAmbW9kZUZsYWdzKSkKICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIC8qCisgICAgKiogTm90ZSB0aGF0IHdlIGhhdmUgdG8gdXNlIHRoZSBBcHBsZVNjcmlwdCBjb21wb25lbnQgaGVyZS4gV2hvIGtub3dzIHdoeQorICAgICoqIE9TQUdldEFwcFRlcm1pbm9sb2d5IHNob3VsZCByZXF1aXJlIGEgc2NyaXB0aW5nIGNvbXBvbmVudCBpbiB0aGUKKyAgICAqKiBmaXJzdCBwbGFjZSwgYnV0IGl0IGRvZXMuIE5vdGU6IGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBnZW5lcmljIHNjcmlwdGluZworICAgICoqIGNvbXBvbmVudCwgd2hpY2ggaXMgdW5mb3J0dW5hdGUgYXMgdGhlIEFTIGNvbXBvbmVudCBpcyBjdXJyZW50bHkgdmVyeQorICAgICoqIHNsb3cgKH4xIHNlYz8pIHRvIGxvYWQsIGJ1dCB3ZSBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIHRoaXMuCisgICAgKi8KICAgICBkZWZhdWx0Q29tcG9uZW50ID0gT3BlbkRlZmF1bHRDb21wb25lbnQgKGtPU0FDb21wb25lbnRUeXBlLCAnYXNjcicpOwogICAgIGVyciA9IEdldENvbXBvbmVudEluc3RhbmNlRXJyb3IgKGRlZmF1bHRDb21wb25lbnQpOwogICAgIGlmIChlcnIpIHJldHVybiBQeU1hY19FcnJvcihlcnIpOwogICAgIGVyciA9IE9TQUdldEFwcFRlcm1pbm9sb2d5ICgKICAgICBkZWZhdWx0Q29tcG9uZW50LAotICAgIG1vZGVGbGFncywKKyAgICBrT1NBTW9kZU51bGwsCiAgICAgJmZzcywKICAgICBkZWZhdWx0VGVybWlub2xvZ3ksCiAgICAgJmRpZExhdW5jaCwKQEAgLTQ1LDI5ICs1NSwyMyBAQAogUHlPU0FfR2V0U3lzVGVybWlub2xvZ3koUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIEFFRGVzYyB0aGVEZXNjID0gezAsMH07Ci0gICAgRlNTcGVjIGZzczsKICAgICBDb21wb25lbnRJbnN0YW5jZSBkZWZhdWx0Q29tcG9uZW50ID0gTlVMTDsKICAgICBTSW50MTYgZGVmYXVsdFRlcm1pbm9sb2d5ID0gMDsKLSAgICBCb29sZWFuIGRpZExhdW5jaCA9IDA7CiAgICAgT1NBRXJyb3IgZXJyOwotICAgIGxvbmcgbW9kZUZsYWdzID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZ8aSIsIFB5TWFjX0dldEZTU3BlYywgJmZzcywgJm1vZGVGbGFncykpCi0gICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogQWNjZXB0IGFueSBhcmdzIGZvciBzYWtlIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGVuIGlnbm9yZSB0aGVtLiAqLwogCiAgICAgZGVmYXVsdENvbXBvbmVudCA9IE9wZW5EZWZhdWx0Q29tcG9uZW50IChrT1NBQ29tcG9uZW50VHlwZSwgJ2FzY3InKTsKICAgICBlcnIgPSBHZXRDb21wb25lbnRJbnN0YW5jZUVycm9yIChkZWZhdWx0Q29tcG9uZW50KTsKICAgICBpZiAoZXJyKSByZXR1cm4gUHlNYWNfRXJyb3IoZXJyKTsKLSAgICBlcnIgPSBPU0FHZXRBcHBUZXJtaW5vbG9neSAoCisgICAgZXJyID0gT1NBR2V0U3lzVGVybWlub2xvZ3kgKAogICAgIGRlZmF1bHRDb21wb25lbnQsCi0gICAgbW9kZUZsYWdzLAotICAgICZmc3MsCisgICAga09TQU1vZGVOdWxsLAogICAgIGRlZmF1bHRUZXJtaW5vbG9neSwKLSAgICAmZGlkTGF1bmNoLAogICAgICZ0aGVEZXNjCiAgICAgKTsKICAgICBpZiAoZXJyKSByZXR1cm4gUHlNYWNfRXJyb3IoZXJyKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyZpIiwgQUVEZXNjX05ldywgJnRoZURlc2MsIGRpZExhdW5jaCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8mIiwgQUVEZXNjX05ldywgJnRoZURlc2MpOwogfQogI2VuZGlmIC8qICFfX0xQNjRfXyAqLwogCkBAIC04MCwxMSArODQsMTEgQEAKICAgICB7IkdldEFwcFRlcm1pbm9sb2d5IiwKICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBQeU9TQV9HZXRBcHBUZXJtaW5vbG9neSwKICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAgICAiR2V0IGFuIGFwcGxpY2F0aW9ucyB0ZXJtaW5vbG9neSwgYXMgYW4gQUVEZXNjIG9iamVjdC4ifSwKKyAgICAgICAgIkdldCBhbiBhcHBsaWNhdGlvbidzIHRlcm1pbm9sb2d5LiBHZXRBcHBUZXJtaW5vbG9neShwYXRoKSAtLT4gQUVEZXNjIn0sCiAgICAgeyJHZXRTeXNUZXJtaW5vbG9neSIsCiAgICAgICAgIChQeUNGdW5jdGlvbikgUHlPU0FfR2V0U3lzVGVybWlub2xvZ3ksCiAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgIkdldCBhbiBhcHBsaWNhdGlvbnMgc3lzdGVtIHRlcm1pbm9sb2d5LCBhcyBhbiBBRURlc2Mgb2JqZWN0LiJ9LAorICAgICAgICAiR2V0IHRoZSBBcHBsZVNjcmlwdCBsYW5ndWFnZSdzIHRlcm1pbm9sb2d5LiBHZXRTeXNUZXJtaW5vbG9neSgpIC0tPiBBRURlc2MifSwKICNlbmRpZiAvKiAhX19MUDY0X18gKi8KICAgICB7TlVMTCwgKFB5Q0Z1bmN0aW9uKSBOVUxMLCAwLCBOVUxMfQogfTsKQEAgLTkyLDcgKzk2LDcgQEAKIHZvaWQKIGluaXRPU0FUZXJtaW5vbG9neSh2b2lkKQogewotICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCBPU0FUZXJtaW5vbG9neSBpcyByZW1vdmVkLiIsIDEpIDwgMCkKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgdGhlIE9TQVRlcm1pbm9sb2d5IG1vZHVsZSBpcyByZW1vdmVkLiIsIDEpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIFB5X0luaXRNb2R1bGUoIk9TQVRlcm1pbm9sb2d5IiwgT1NBVGVybWlub2xvZ3lfbWV0aG9kcyk7CiB9CmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9jYXJib25ldnQvX0NhcmJvbkV2dG1vZHVsZS5jIGIvTWFjL01vZHVsZXMvY2FyYm9uZXZ0L19DYXJib25FdnRtb2R1bGUuYwppbmRleCA0OWU5NDhhLi42MjNhM2U1IDEwMDc1NQotLS0gYS9NYWMvTW9kdWxlcy9jYXJib25ldnQvX0NhcmJvbkV2dG1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL2NhcmJvbmV2dC9fQ2FyYm9uRXZ0bW9kdWxlLmMKQEAgLTI3LDEyICsyNyw2IEBACiBQeU9iamVjdCAqRXZlbnRSZWZfTmV3KEV2ZW50UmVmIGl0c2VsZik7CiAKIC8qKioqKioqKioqIEV2ZW50VHlwZVNwZWMgKioqKioqKi8KLXN0YXRpYyBQeU9iamVjdCoKLUV2ZW50VHlwZVNwZWNfTmV3KEV2ZW50VHlwZVNwZWMgKmluKQotewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsbCIsIGluLT5ldmVudENsYXNzLCBpbi0+ZXZlbnRLaW5kKTsKLX0KLQogc3RhdGljIGludAogRXZlbnRUeXBlU3BlY19Db252ZXJ0KFB5T2JqZWN0ICp2LCBFdmVudFR5cGVTcGVjICpvdXQpCiB7CkBAIC02NywxMiArNjEsNiBAQAogCiAvKioqKioqKioqKiBFdmVudEhvdEtleUlEICoqKioqKiovCiAKLXN0YXRpYyBQeU9iamVjdCoKLUV2ZW50SG90S2V5SURfTmV3KEV2ZW50SG90S2V5SUQgKmluKQotewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsbCIsIGluLT5zaWduYXR1cmUsIGluLT5pZCk7Ci19Ci0KIHN0YXRpYyBpbnQKIEV2ZW50SG90S2V5SURfQ29udmVydChQeU9iamVjdCAqdiwgRXZlbnRIb3RLZXlJRCAqb3V0KQogewpkaWZmIC0tZ2l0IGEvTWFjL01vZHVsZXMvY2cvY2dzY2FuLnB5IGIvTWFjL01vZHVsZXMvY2cvY2dzY2FuLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2NnL2Nnc3VwcG9ydC5weSBiL01hYy9Nb2R1bGVzL2NnL2Nnc3VwcG9ydC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9jdGwvX0N0bG1vZHVsZS5jIGIvTWFjL01vZHVsZXMvY3RsL19DdGxtb2R1bGUuYwppbmRleCAyMmUwYmQ1Li5hOTU5ZWI0IDEwMDY0NAotLS0gYS9NYWMvTW9kdWxlcy9jdGwvX0N0bG1vZHVsZS5jCisrKyBiL01hYy9Nb2R1bGVzL2N0bC9fQ3RsbW9kdWxlLmMKQEAgLTE1OTgsNyArMTU5OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKl9yZXMgPSBOVUxMOwogICAgIE9TRXJyIF9lcnI7Ci0gICAgU0ludDE2IG91dFZhbHVlOworICAgIFVJbnQxNiBvdXRWYWx1ZTsKICNpZm5kZWYgR2V0QmV2ZWxCdXR0b25NZW51VmFsdWUKICAgICBQeU1hY19QUkVDSEVDSyhHZXRCZXZlbEJ1dHRvbk1lbnVWYWx1ZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL2ljZ2x1ZW1vZHVsZS5jIGIvTWFjL01vZHVsZXMvaWNnbHVlbW9kdWxlLmMKaW5kZXggYzRkNTA0NS4uNGQxN2JmNyAxMDA2NDQKLS0tIGEvTWFjL01vZHVsZXMvaWNnbHVlbW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvaWNnbHVlbW9kdWxlLmMKQEAgLTQ1NCw3ICs0NTQsNyBAQAogewogICAgIFB5T2JqZWN0ICptLCAqZDsKIAotICAgIGlmIChQeUVycl9XYXJuUHkzaygiSW4gMy54LCBpY2dsdWUgaXMgcmVtb3ZlZC4iLCAxKSkKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soIkluIDMueCwgdGhlIGljZ2x1ZSBtb2R1bGUgaXMgcmVtb3ZlZC4iLCAxKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCmRpZmYgLS1naXQgYS9NYWMvTW9kdWxlcy9xdC9zZXR1cC5weSBiL01hYy9Nb2R1bGVzL3F0L3NldHVwLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL01hYy9Nb2R1bGVzL3NuZC9fU25kbW9kdWxlLmMgYi9NYWMvTW9kdWxlcy9zbmQvX1NuZG1vZHVsZS5jCmluZGV4IDM1Y2Q0MDAuLmQ3MTNlZmUgMTAwNjQ0Ci0tLSBhL01hYy9Nb2R1bGVzL3NuZC9fU25kbW9kdWxlLmMKKysrIGIvTWFjL01vZHVsZXMvc25kL19TbmRtb2R1bGUuYwpAQCAtMTE1MCw3ICsxMTUwLDkgQEAKICAgICBTUEJfVHlwZS5vYl90eXBlID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNQQl9UeXBlKSA8IDApIHJldHVybjsKICAgICBQeV9JTkNSRUYoJlNQQl9UeXBlKTsKKyNpZiAwCiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTUEIiLCAoUHlPYmplY3QgKikmU1BCX1R5cGUpOworI2VuZGlmCiAgICAgLyogQmFja3dhcmQtY29tcGF0aWJsZSBuYW1lICovCiAgICAgUHlfSU5DUkVGKCZTUEJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTUEJUeXBlIiwgKFB5T2JqZWN0ICopJlNQQl9UeXBlKTsKZGlmZiAtLWdpdCBhL01hYy9QeXRob25MYXVuY2hlci9GaWxlU2V0dGluZ3MubSBiL01hYy9QeXRob25MYXVuY2hlci9GaWxlU2V0dGluZ3MubQppbmRleCAxZjM2OTVlLi42NmI0ZmRjIDEwMDc1NQotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvRmlsZVNldHRpbmdzLm0KKysrIGIvTWFjL1B5dGhvbkxhdW5jaGVyL0ZpbGVTZXR0aW5ncy5tCkBAIC0yNjcsMTQgKzI2NywxNCBAQAogCSAgICBbc2NyaXB0IGxlbmd0aF0tW1tzY3JpcHQgbGFzdFBhdGhDb21wb25lbnRdIGxlbmd0aF1dOwogICAgIAogICAgIGlmIChob25vdXJoYXNoYmFuZyAmJgotICAgICAgIChmcD1mb3Blbihbc2NyaXB0IGNTdHJpbmddLCAiciIpKSAmJgorICAgICAgIChmcD1mb3Blbihbc2NyaXB0IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbl0sICJyIikpICYmCiAgICAgICAgZmdldHMoaGFzaGJhbmdidWYsIHNpemVvZihoYXNoYmFuZ2J1ZiksIGZwKSAmJgogICAgICAgIHN0cm5jbXAoaGFzaGJhbmdidWYsICIjISIsIDIpID09IDAgJiYKICAgICAgICAocD1zdHJjaHIoaGFzaGJhbmdidWYsICdcbicpKSkgewogICAgICAgICAgICAgKnAgPSAnXDAnOwogICAgICAgICAgICAgcCA9IGhhc2hiYW5nYnVmICsgMjsKICAgICAgICAgICAgIHdoaWxlICgqcCA9PSAnICcpIHArKzsKLSAgICAgICAgICAgIGN1cl9pbnRlcnAgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6IHBdOworICAgICAgICAgICAgY3VyX2ludGVycCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzogcF07CiAgICAgfQogICAgIGlmICghY3VyX2ludGVycCkKICAgICAgICAgY3VyX2ludGVycCA9IGludGVycHJldGVyOwpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4gYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgppbmRleCAzYzcyNmQ3Li40MzlmOGI4IDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgpAQCAtNDAsNyArNDAsNyBAQAogCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CiAJPHN0cmluZz5QeXRob25MYXVuY2hlcjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVHZXRJbmZvU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4lVkVSU0lPTiUsIMKpIDAwMS0yMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CisJPHN0cmluZz4lVkVSU0lPTiUsIMKpIDIwMDEtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJY29uRmlsZTwva2V5PgogCTxzdHJpbmc+UHl0aG9uTGF1bmNoZXIuaWNuczwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CmRpZmYgLS1naXQgYS9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4gYi9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KaW5kZXggMjU1MWQyMy4uYTY5NjJmNiAxMDA2NDQKLS0tIGEvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCisrKyBiL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgpAQCAtMjEsNyArMjEsNyBAQAogCiBCVU5ETEVCVUxERVI9JChzcmNkaXIpLy4uLy4uL0xpYi9wbGF0LW1hYy9idW5kbGVidWlsZGVyLnB5CiAKLVBZVEhPTkFQUFNESVI9L0FwcGxpY2F0aW9ucy8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQorUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiBPQkpFQ1RTPUZpbGVTZXR0aW5ncy5vIE15QXBwRGVsZWdhdGUubyBNeURvY3VtZW50Lm8gUHJlZmVyZW5jZXNXaW5kb3dDb250cm9sbGVyLm8gZG9zY3JpcHQubyBtYWluLm8KIAogYWxsOiBQeXRob25cIExhdW5jaGVyLmFwcApkaWZmIC0tZ2l0IGEvTWFjL1JFQURNRSBiL01hYy9SRUFETUUKaW5kZXggYjJlZjhiMS4uNTIyOTAzYSAxMDA2NDQKLS0tIGEvTWFjL1JFQURNRQorKysgYi9NYWMvUkVBRE1FCkBAIC04LDEzICs4LDI0IEBACiBNYWMtc3BlY2lmaWMgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotKiBgYC0tZW5hYmxlLWZyYW1ld29ya2BgCisqIGBgLS1lbmFibGUtZnJhbWV3b3JrWz1ESVJdYGAKIAogICBJZiB0aGlzIGFyZ3VtZW50IGlzIHNwZWNpZmllZCB0aGUgYnVpbGQgd2lsbCBjcmVhdGUgYSBQeXRob24uZnJhbWV3b3JrIHJhdGhlcgogICB0aGFuIGEgdHJhZGl0aW9uYWwgVW5peCBpbnN0YWxsLiBTZWUgdGhlIHNlY3Rpb24KICAgX2BCdWlsZGluZyBhbmQgdXNpbmcgYSBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG9uIE1hYyBPUyBYYCBmb3IgbW9yZSAKICAgaW5mb3JtYXRpb24gb24gZnJhbWV3b3Jrcy4KIAorICBJZiB0aGUgb3B0aW9uYWwgZGlyZWN0b3J5IGFyZ3VtZW50IGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIGl0IGluc3RhbGxlZAorICBpbnRvIHRoYXQgZGlyZWN0b3J5LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYSBweXRob24gZnJhbWV3b3JrIGludG8KKyAgeW91ciBob21lIGRpcmVjdG9yeTo6CisKKyAgICAgJCBjb25maWd1cmUgLS1lbmFibGUtZnJhbWV3b3JrPS9Vc2Vycy9yb25hbGQvTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICQgbWFrZSAmJiBtYWtlIGluc3RhbGwKKworICBUaGlzIHdpbGwgaW5zdGFsbCB0aGUgZnJhbWV3b3JrIGl0c2VsZiBpbiBgYC9Vc2Vycy9yb25hbGQvTGlicmFyeS9GcmFtZXdvcmtzYGAsCisgIHRoZSBhcHBsaWNhdGlvbnMgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgYGAvVXNlcnMvcm9uYWxkL0FwcGxpY2F0aW9uc2BgIGFuZCB0aGUKKyAgY29tbWFuZC1saW5lIHRvb2xzIGluIGBgL1VzZXJzL3JvbmFsZC9iaW5gYC4KKwogKiBgYC0td2l0aC1mcmFtZXdvcmstbmFtZT1OQU1FYGAKIAogICBTcGVjaWZ5IHRoZSBuYW1lIGZvciB0aGUgcHl0aG9uIGZyYW1ld29yaywgZGVmYXVsdHMgdG8gYGBQeXRob25gYC4gVGhpcyBvcHRpb24KQEAgLTI1LDE0ICszNiwxNCBAQAogICBDcmVhdGUgYSB1bml2ZXJzYWwgYmluYXJ5IGJ1aWxkIG9mIG9mIFB5dGhvbi4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIGJvdGgKICAgcmVndWxhciBhbmQgZnJhbWV3b3JrIGJ1aWxkcy4KIAotICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHdpdGggT1NYIFNESyBzaG91bGQgYmUgdXNlZCB0byBwZXJmb3JtIHRoZQorICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIE9TWCBTREsgc2hvdWxkIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUKICAgYnVpbGQuIFRoaXMgZGVmYXVsdHMgdG8gYGAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYLjEwLjR1LnNka2BgLCBzcGVjaWZ5IAogICBgYC9gYCB3aGVuIGJ1aWxkaW5nIG9uIGEgMTAuNSBzeXN0ZW0sIGVzcGVjaWFsbHkgd2hlbiBidWlsZGluZyA2NC1iaXQgY29kZS4KIAogICBTZWUgdGhlIHNlY3Rpb24gX2BCdWlsZGluZyBhbmQgdXNpbmcgYSB1bml2ZXJzYWwgYmluYXJ5IG9mIFB5dGhvbiBvbiBNYWMgT1MgWGAKICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLSogYGAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPVZBTFVFYGAKKyogYGAtLXdpdGgtdW5pdmVyYWwtYXJjaHM9VkFMVUVgYAogCiAgIFNwZWNpZnkgdGhlIGtpbmQgb2YgdW5pdmVyc2FsIGJpbmFyeSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkLiBUaGlzIG9wdGlvbiBpcyAKICAgb25seSB2YWxpZCB3aGVuIGBgLS1lbmFibGUtdW5pdmVyc2Fsc2RrYGAgaXMgc3BlY2lmaWVkLgpAQCAtODgsMTAgKzk5LDI5IEBACiAKICAgKiBgYGludGVsYGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAKIAotVG8gYnVpbGQgYSB1bml2ZXJzYWwgYmluYXJ5IHRoYXQgaW5jbHVkZXMgYSA2NC1iaXQgYXJjaGl0ZWN0dXJlIHlvdSBtdXN0IGJ1aWxkCi1vbiBhIHN5c3RlbSBydW5uaW5nIE9TWCAxMC41IG9yIGxhdGVyLiBUaGUgYGBhbGxgYCBmbGF2b3VyIGNhbiBvbmx5IGJlIGJ1aWxkIG9uCitUbyBidWlsZCBhIHVuaXZlcnNhbCBiaW5hcnkgdGhhdCBpbmNsdWRlcyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUsIHlvdSBtdXN0IGJ1aWxkCitvbiBhIHN5c3RlbSBydW5uaW5nIE9TWCAxMC41IG9yIGxhdGVyLiBUaGUgYGBhbGxgYCBmbGF2b3VyIGNhbiBvbmx5IGJlIGJ1aWx0IG9uCiBPU1ggMTAuNS4KIAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGluc3RhbGwgYGBweXRob24zMmBgIGFuZCBgYHB5dGhvbnczMmBgIAorYmluYXJpZXMgd2hlbiB0aGUgdW5pdmVyc2FsIGFyY2hpdGVjdXJlcyBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgMzItYml0IGFyY2hpdGVjdHVyZQorKHRoYXQgaXMsIGZvciBhbGwgZmxhdm91cnMgYnV0IGBgNjQtYml0YGApLgorCitSdW5uaW5nIGEgc3BlY2lmaWMgYXJjaGljdHVyZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWW91IGNhbiBydW4gY29kZSB1c2luZyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSB1c2luZyB0aGUgYGBhcmNoYGAgY29tbWFuZDo6CisKKyAgICQgYXJjaCAtaTM4NiBweXRob24KKworT3IgdG8gZXhwbGljaXRseSBydW4gaW4gMzItYml0IG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1hY2hpbmUgaGFyZHdhcmU6OgorCisgICAkIGFyY2ggLWkzODYgLXBwYyBweXRob24KKworTk9URTogV2hlbiB5b3UncmUgdXNpbmcgYSBmcmFtZXdvcmsgaW5zdGFsbCBvZiBQeXRob24gdGhpcyByZXF1aXJlcyBhdCBsZWFzdAorUHl0aG9uIDIuNyBvciAzLjIsIGluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIHB5dGhvbiAoYW5kIHB5dGhvbncpIGNvbW1hbmRzIGFyZQord3JhcHBlciB0b29scyB0aGF0IGV4ZWN1dGUgdGhlIHJlYWwgaW50ZXJwcmV0ZXIgd2l0aG91dCBlbnN1cmluZyB0aGF0IHRoZQorcmVhbCBpbnRlcnByZXRlciBydW5zIHdpdGggdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLgogCiBCdWlsZGluZyBhbmQgdXNpbmcgYSBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG9uIE1hYyBPUyBYLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwNSw2ICsyMzUsMjUgQEAKIGZyb20gd2l0aGluIHRoZSBCdWlsZFNjcmlwdCBkaXJlY3RvcnkuIFRoZSBzY3JpcHQgYWNjZXB0cyBhIG51bWJlciBvZiAKIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHJ1biBpdCB3aXRoIC0taGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorQ29uZmlndXJlIHdhcm5pbmdzCis9PT09PT09PT09PT09PT09PT0KKworVGhlIGNvbmZpZ3VyZSBzY3JpcHQgc29tZXRpbWVzIGVtaXRzIHdhcm5pbmdzIGxpa2UgdGhlIG9uZSBiZWxvdzo6CisKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/CisgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uCisgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogICAgIHNlY3Rpb24gIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZCIKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdAorICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZQorICAgY29uZmlndXJlOiBXQVJOSU5HOiAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogICAgICMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvICMjCisgICBjb25maWd1cmU6IFdBUk5JTkc6ICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCitUaGlzIGFsbW9zdCBhbHdheXMgbWVhbnMgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB1bml2ZXJzYWwgYmluYXJ5IGZvcgorUHl0aG9uIGFuZCBoYXZlIGxpYmFyaWVzIGluIGBgL3Vzci9sb2NhbGBgIHRoYXQgZG9uJ3QgY29udGFpbiB0aGUgcmVxdWlyZWQKK2FyY2hpdGVjdHVyZXMuIFRlbXBvcmFyaWx5IG1vdmUgYGAvdXNyL2xvY2FsYGAgYXNpZGUgdG8gZmluaXNoIHRoZSBidWlsZC4KKwogCiBVbmluc3RhbGxpbmcgYSBmcmFtZXdvcmsgaW5zdGFsbCwgaW5jbHVkaW5nIHRoZSBiaW5hcnkgaW5zdGFsbGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluIGIvTWFjL1Jlc291cmNlcy9hcHAvSW5mby5wbGlzdC5pbgppbmRleCA4M2QxYjI2Li5iNTg2YmEwIDEwMDY0NAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluCisrKyBiL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4KQEAgLTIwLDcgKzIwLDcgQEAKIAk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgogCTxzdHJpbmc+UHl0aG9uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiV2ZXJzaW9uJSwgKGMpIDIwMDQtMjAxMCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiV2ZXJzaW9uJSwgKGMpIDIwMDQtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSGVscEJvb2tGb2xkZXI8L2tleT4KIAk8YXJyYXk+CiAJCTxzdHJpbmc+RG9jdW1lbnRhdGlvbjwvc3RyaW5nPgpAQCAtMzcsNyArMzcsNyBAQAogCTxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248L2tleT4KIAk8c3RyaW5nPjYuMDwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVMb25nVmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CiAJPHN0cmluZz5QeXRob248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlUGFja2FnZVR5cGU8L2tleT4KQEAgLTU1LDYgKzU1LDYgQEAKIAk8a2V5Pk5TQXBwbGVTY3JpcHRFbmFibGVkPC9rZXk+CiAJPHRydWUvPgogCTxrZXk+TlNIdW1hblJlYWRhYmxlQ29weXJpZ2h0PC9rZXk+Ci0JPHN0cmluZz4oYykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPihjKSAyMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogPC9kaWN0PgogPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vUGFja2FnZU1hbmFnZXIuZ2lmIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9QYWNrYWdlTWFuYWdlci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiOTNkYzguLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9QYWNrYWdlTWFuYWdlci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2NvbW11bml0eS5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9jb21tdW5pdHkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQwYTM4Yi4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2NvbW11bml0eS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTxodG1sIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5XaGF0IGlzIE1hY1B5dGhvbj88L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci0JCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxpbWcgc3JjPSJweXRob24uZ2lmIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgYWxpZ249InRvcCIgYWx0PSIiPgotCQkJPC90ZD4KLQkJCTx0ZD4KLQkJCQk8aDE+TWFjUHl0aG9uIENvbW11bml0eTwvaDE+CQotCQkJPC90ZD4KLQkJPC90cj4KLQkJPC90YWJsZT4KLQkJPGhyPgotCi08aDI+V2ViIFNpdGVzPC9oMj4KLQotPHA+VGhlIE1hY1B5dGhvbiBob21lcGFnZSwgPGEgaHJlZj0iaHR0cDovL3d3dy5jd2kubmwvfmphY2svbWFjcHl0aG9uLmh0bWwiPgotd3d3LmN3aS5ubC9+amFjay9tYWNweXRob24uaHRtbDwvYT4KLWlzIHdoZXJlIHlvdSBjYW4gZmluZCBpbnN0YWxsZXJzLCBkb2N1bWVudHMsIGxpbmtzIHRvIHVzZWZ1bCBwYWNrYWdlcyBhbmQgbW9yZS4gCi1BbmQsIG9mIGNvdXJzZSwKLTxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZyI+d3d3LnB5dGhvbi5vcmc8L2E+IGhhcyBhIG11Y2ggbGFyZ2VyIGNvbGxlY3Rpb24KLW9mIG1hdGVyaWFsIG9uIFB5dGhvbiB0aGF0IGlzIG5vdCBNYWMtc3BlY2lmaWMuPC9wPgotCi08aDI+TmV3cyBncm91cHMgYW5kIE1haWxpbmcgbGlzdHM8L2gyPgotCi08cD5UaGVyZSBhcmUgYSBsb3Qgb2YgbWFpbGluZyBsaXN0cyBvbiBQeXRob24uIFNvbWUgb2YgdGhlIG1vcmUgaW50ZXJlc3RpbmcKLW9uZXMgYXJlOjwvcD4KLTx1bD4KLTxsaT48YSBocmVmPSJtYWlsdG86cHl0aG9uLWhlbHBAcHl0aG9uLm9yZyI+cHl0aG9uLWhlbHBAcHl0aG9uLm9yZzwvYT4gd2hlcmUKLXlvdSBjYW4gc2VuZCBxdWVzdGlvbnMgZm9yIGluZGl2aWR1YWwgc3VwcG9ydC4gUGxlYXNlIGNoZWNrIHRoZSB3ZWJzaXRlcyBtZW50aW9uZWQKLWFib3ZlIGZpcnN0LCB0aG91Z2ghPC9saT4KLTxsaT5UaGUgPGEgaHJlZj0ibmV3czpjb21wLmxhbmcucHl0aG9uIj5jb21wLmxhbmcucHl0aG9uPC9hPiBuZXdzZ3JvdXAgZm9yIGdlbmVyYWwKLWRpc2N1c3Npb24uIEFsc28gYXZhaWxhYmxlIGFzIGEgCi08YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tbGlzdCI+bWFpbGluZyBsaXN0PC9hPi48L2xpPgotPGxpPlRoZSA8YSBocmVmPSJuZXdzOmNvbXAubGFuZy5weXRob24uYW5ub3VuY2UiPmNvbXAubGFuZy5weXRob24uYW5ub3VuY2U8L2E+IAotbmV3c2dyb3VwIGZvciBhbm5vdW5jZW1lbnRzLiBMb3ctdm9sdW1lIGFuZCBtb2RlcmF0ZWQuIEFsc28gYXZhaWxhYmxlIGFzIGEgCi08YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tYW5ub3VuY2UtbGlzdCI+bWFpbGluZyBsaXN0PC9hPi48L2xpPgotPGxpPkxhc3QgYnV0IG5vdCBsZWFzdCwgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL3B5dGhvbm1hYy1zaWcvIj5weXRob25tYWMtc2lnPC9hPgotbWFpbGluZyBsaXN0IGlzIHNwZWNpZmljYWxseSBmb3IgTWFjUHl0aG9uLiBEaXNjdXNzaW9ucyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgbmV3Ci1mZWF0dXJlcywgYnV0IGJlZ2lubmVycyBxdWVzdGlvbnMgYXJlIHdlbGNvbWUgdG9vLjwvbGk+Ci08L3VsPgotCi08cD5JbiBhZGRpdGlvbiB0aGVyZSBhcmUgUHl0aG9uIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzLyI+U3BlY2lhbCBJbnRlcmVzdCBHcm91cDwvYT4KLW1haWxpbmcgbGlzdHMgb24gYSB3aWRlIHZhcmlldHkgb2YgdG9waWNzIHN1Y2ggYXMgaW1hZ2UgcHJvY2Vzc2luZywgbnVtZXJpY2FsIGFsZ29yaXRobXMKLWFuZCBtb3JlLjwvcD4KLQotPGgyPk1vcmU8L2gyPgotCi08cD5BbiBpbmRleCBvZiBjb25mZXJlbmNlcywgV2lraSdzLCBib29rc2hvcHMgYW5kIG1vcmUgY2FuIGJlIGZvdW5kIGF0IHRoZQotPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3BzYS8iPkNvbW11bml0eTwvYT4gc2VjdGlvbiBvZiB0aGUgUHl0aG9uIHdlYnNpdGUuPC9wPgotCi08cD5JZiB5b3UgZmluZCBhIGJ1ZyB5b3UgYXJlIGtpbmRseSByZXF1ZXN0ZWQgdG8gcmVwb3J0IGl0LCBwcmVmZXJyYWJseSB0aHJvdWdoIHRoZQotYXV0b21hdGljIGJ1ZyB0cmFja2VyIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZyI+d3d3LnB5dGhvbi5vcmc8L2E+PC9wPgotCi08cD5JZiB5b3Ugd2FudCB0byBiZWNvbWUgYW4gYWN0aXZlIGRldmVsb3BlciB5b3UgYXJlIHZlcnkgd2VsY29tZSEgSm9pbiB0aGUKLXB5dGhvbm1hYy1zaWcgbWFpbGluZyBsaXN0IG1lbnRpb25lZCBhYm92ZSwgYW5kIHJlYWQgdGhlCi08YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2LyI+RGV2ZWxvcGVyPC9hPiBzZWN0aW9uIG9uIHRoZSBQeXRob24gd2Vic2l0ZS48L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZG9jL2luZGV4Lmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2RvYy9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2U3MzU3Li4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vZG9jL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPlB5dGhvbiBMYW5ndWFnZSBEb2N1bWVudGF0aW9uPC90aXRsZT4KLQk8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkJCRWRpdCA2LjUuMyI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5QeXRob24gTGFuZ3VhZ2UgYW5kIHJ1bnRpbWUgZG9jdW1lbnRhdGlvbjwvaDE+Ci0KLTxwPlRoaXMgdm9sdW1lIG9mIGRvY3VtZW50YXRpb24gaXMgcmF0aGVyIGJpZyAoMTcgTWVnYWJ5dGVzKSBhbmQgY29udGFpbnMKLWEgdHV0b3JpYWwsIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIFB5dGhvbiBsaWJyYXJ5IChhbGwgdGhlIG1vZHVsZXMKLWFuZCBwYWNrYWdlcyBpbmNsdWRlZCksIGZvcm1hbCBkZXNjcmlwdGlvbiBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG1vcmUuPC9wPgotCi08cD5Zb3UgY2FuIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MiPnZpZXcgaXQgb25saW5lPC9hPiwgd2hlcmUKLXlvdSBjYW4gYWxzbyBkb3dubG9hZCBQREZzIGZvciBwcmludGluZywgb3IgeW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBpdAotdGhyb3VnaCB0aGUgPGEgaHJlZj0iLi4vcGFja21hbi5odG1sIj5QYWNrYWdlIE1hbmFnZXI8L2E+IGZvciB2aWV3aW5nIGFuZAotc2VhcmNoaW5nIHZpYSBBcHBsZSBIZWxwIFZpZXdlci48L3A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2ZpbmRlci5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9maW5kZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4NzdiYS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2ZpbmRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTxodG1sIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5QeXRob24gYW5kIHRoZSBGaW5kZXI8L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+UnVubmluZyBQeXRob24gc2NyaXB0cyBmcm9tIHRoZSBGaW5kZXI8L2gxPgotCQk8dGFibGU+Ci0JCTx0cj4KLQkJCTx0ZD4KLQkJCQk8aW1nIHNyYz0icHl0aG9uLmdpZiIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIGFsaWduPSJ0b3AiIGFsdD0iIj4KLQkJCTwvdGQ+Ci0JCQk8dGQ+Ci0JCQkJPHA+VGhlIGFwcGxpY2F0aW9uIFB5dGhvbkxhdW5jaGVyIHdpbGwgc3RhcnQgYSBQeXRob24gaW50ZXJwcmV0ZXIKLQkJCQl3aGVuIHlvdSBkcm9wIGEgUHl0aG9uIHNvdXJjZSBmaWxlIG9udG8gaXQsIGFueSBmaWxlIHdpdGggYSA8dHQ+LnB5PC90dD4KLQkJCQlvciA8dHQ+LnB5dzwvdHQ+IGV4dGVuc2lvbi4gSWYgeW91IHNldCBQeXRob25MYXVuY2hlciBhcyB0aGUgZGVmYXVsdAotCQkJCWFwcGxpY2F0aW9uIHRvIG9wZW4gYSBmaWxlCi0oPGEgaHJlZj0iaGVscDpzZWFyY2g9Q2hhbmdpbmclMjB0aGUlMjBhcHBsaWNhdGlvbiUyMHRoYXQlMjBvcGVucyUyMGElMjBmaWxlIGJvb2tJRD1NYWMlMjBIZWxwIj4KLXRlbGwgbWUgbW9yZTwvYT4pIHRoaXMgYWxzbyB3b3JrcyB3aGVuIHlvdSBkb3VibGUgY2xpY2sgYSBQeXRob24gc2NyaXB0LjwvcD4KLQotCQkJCTxwPlB5dGhvbkxhdW5jaGVyIGhhcyBwcmVmZXJlbmNlcyBwZXIgZmlsZXR5cGUgZm9yIHNlbGVjdGluZwotCQkJCXRoZSBpbnRlcnByZXRlciB0byB1c2UsIGFuZCBob3cgdG8gbGF1bmNoIGl0OiBpbiBhIFRlcm1pbmFsIHdpbmRvdwotCQkJCW9yIG5vdCwgZXRjLiBIb2xkaW5nIHRoZSBPcHRpb24ga2V5IHdoaWxlIGxhdW5jaGluZyB5b3VyIHNjcmlwdCB3aWxsCi0JCQkJYnJpbmcgdXAgYSB3aW5kb3cgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlc2Ugc2V0dGluZ3MgZm9yIGEgc2luZ2xlCi0JCQkJcnVuLiA8L3A+Ci0JCQk8L3RkPgotCQk8L3RyPgotCQk8L3RhYmxlPgotCQk8aHI+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2d1aS5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9ndWkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUyYzc4Yy4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2d1aS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTxodG1sIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5DcmVhdGluZyBhIFVzZXIgSW50ZXJmYWNlIHdpdGggTWFjUHl0aG9uPC90aXRsZT4KLQk8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkJCRWRpdCA2LjUuMyI+Ci0JPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSJweXRob25zbWFsbC5naWYiPgotCTxNRVRBIE5BTUU9IkFwcGxlSWNvbiIgQ09OVEVOVD0icHl0aG9uc21hbGwuZ2lmIj4KLTwvaGVhZD4KLTxib2R5PgotPGgxPkNyZWF0aW5nIGEgVXNlciBJbnRlcmZhY2Ugd2l0aCBNYWNQeXRob248L2gxPgotCi08cD5UaGVyZSBhcmUgYSBudW1iZXIgb2YgcGFja2FnZXMgdGhhdCBhbGxvdyBjcmVhdGlvbiBvZiBhIHVzZXIgaW50ZXJmYWNlCi1mb3IgeW91ciBQeXRob24gY29kZSwgZWFjaCBvZiB3aGljaCBoYXMgaXRzIG93biBtZXJpdHM6PC9wPgotCi08dWw+Ci0JPGxpPiBUaGUgQ2FyYm9uIHBhY2thZ2UgZ2l2ZXMgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgb2xkIE1hY2ludG9zaCB0b29sYm94Ci0JY2FsbHMgZm9yIHdpbmRvd3MsIGV2ZW50cywgZGlhbG9ncyBhbmQgbW9yZS4gVGhlIDx0dD5GcmFtZVdvcms8L3R0PiBtb2R1bGUKLQl3cmFwcyB0aGVzZSBpbiBhIG1pbmltYWwgZnJhbWV3b3JrLiBGb3IgZG9jdW1lbnRhdGlvbiBzZWUgdGhlIE1hY2ludG9zaAotCUxpYnJhcnkgc2VjdGlvbiBvZiB0aGUgPGEgaHJlZj0iZG9jL2luZGV4Lmh0bWwiPlB5dGhvbiBMYW5ndWFnZSBhbmQgcnVudGltZSAKLQlkb2N1bWVudGF0aW9uPC9hPiBhbmQgdGhlIEh1bWFuIEludGVyZmFjZSBUb29sYm94IHNlY3Rpb24gb2YgCi0JPGEgaHJlZj0iaGVscDpvcGVuYm9vaz1DYXJib24iPkFwcGxlJ3MgQ2FyYm9uIERvY3VtZW50YXRpb248L2E+LiAKLQlUaGlzIHNvbHV0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCBNYWNQeXRob24tT1M5LjwvbGk+Ci0JPGxpPiBUaGUgPHR0Plc8L3R0PiBmcmFtZXdvcmsgaXMgYnVpbHQgb24gdG9wIG9mIHRoaXMsIGFuZCBlYXNpZXIgdG8gdXNlLgotCVRoZSBNYWNQeXRob24gSURFIHVzZXMgVy4gU29tZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBvbiAKLQk8YSBocmVmPSJodHRwOi8vd3d3Lm5ldmFkYS5lZHUvfmN3ZWJzdGVyL1B5dGhvbi9pbmRleC5odG1sIj5Db3JyYW4gV2Vic3RlcidzIHdlYnNpdGU8L2E+LgotCUNvbXBhdGlibGUgd2l0aCBNYWNQeXRob24tT1M5LjwvbGk+Ci08L3VsPgotCi08cD5Gb3IgbmV3IHdvcmssIGhvd2V2ZXIsIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBhY2thZ2VzIG1heSBiZSBiZXR0ZXIgc3VpdGVkLgotVGhleSBtYXkgYmUgYXZhaWxhYmxlIG91dCBvZiB0aGUgYm94IGluIHRoaXMgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91Ci1jYW4gaW5zdGFsbCB0aGVtIHRocm91Z2ggdGhlIDxhIGhyZWY9InBhY2ttYW4uaHRtbCI+UGFja2FnZSBNYW5hZ2VyPC9hPjo8L3A+Ci0KLTx1bD4KLQk8bGk+IDxhIGhyZWY9Imh0dHA6Ly9weW9iamMuc291cmNlZm9yZ2UubmV0LyI+UHlPYmpDPC9hPiBhbGxvd3MgY29tcGxldGUgYWNjZXNzIHRvIENvY29hLiAKLQlJbiB0ZWNobmljYWwgdGVybXMgaXQgaXMgYQotCWJpZGlyZWN0aW9uYWwgYnJpZGdlIGJldHdlZW4gUHl0aG9uIGFuZCBPYmplY3R2ZS1DLCBzaW1pbGFyIHRvIEFwcGxlJ3MgSmF2YQotCWJyaWRnZS4gUHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBNYWMgT1MgWC1vbmx5IGFwcGxpY2F0aW9ucywgYnV0IGF0IHRoZQotCXRpbWUgb2YgdGhpcyB3cml0aW5nIFB5T2JqQyBpcyBzdGlsbCBpbiBiZXRhLjwvbGk+Ci0JCi0JPGxpPiA8YSBocmVmPSJodHRwOi8vd3hweXRob24uc291cmNlZm9yZ2UubmV0LyI+d3hQeXRob248L2E+IGdpdmVzIFB5dGhvbiBwcm9ncmFtcwotCWFjY2VzcyB0byB0aGUgd3hXaW5kb3dzICBHVUkgdG9vbGtpdC4gTWFueSBwZW9wbGUgY29uc2lkZXIgdGhpcwotCXRoZSBiZXN0IG9wZW4gc291cmNlIGNyb3NzLXBsYXRmb3JtIEdVSSBzb2x1dGlvbiBhdmFpbGFibGUgdG9kYXkuPC9saT4KLQkKLQk8bGk+IFRraW50ZXIgaXMgdGhlIG9sZGVzdCBjcm9zcy1wbGF0Zm9ybSBHVUkgdG9vbGtpdCBmb3IgUHl0aG9uLCBicmlkZ2luZyBQeXRob24KLQl0byBUY2wvVGsuIElmIHlvdSBpbnN0YWxsIEFxdWFUayBpdCBjcmVhdGVzIGEgbmF0aXZlIHVzZXIgaW50ZXJmYWNlIG9uIE1hYyBPUyBYLgotCURvY3VtZW50ZWQgaW4gdGhlIExpYnJhcnkgc2VjdGlvbiwgVGtpbnRlciBzdWJzZWN0aW9uIG9mIHRoZSAKLQk8YSBocmVmPSJkb2MvaW5kZXguaHRtbCI+UHl0aG9uIExhbmd1YWdlIGFuZCBydW50aW1lIGRvY3VtZW50YXRpb248L2E+LiBUa2ludGVyCi0JaXMgbm90IGF2YWlsYWJsZSBmb3IgTWFjUHl0aG9uLU9TOS48L2xpPgotPC91bD4KLQkJCQkKLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW5kZXguaHRtbCBiL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjMzM1OS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPk1hY1B5dGhvbiBIZWxwPC90aXRsZT4KLQk8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkJCRWRpdCA2LjUuMyI+Ci0JPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSJweXRob25zbWFsbC5naWYiPgotCTxNRVRBIE5BTUU9IkFwcGxlSWNvbiIgQ09OVEVOVD0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZVRpdGxlIiBDT05URU5UPSJNYWNQeXRob24gSGVscCI+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGgxPk1hY1B5dGhvbiBIZWxwPC9oMT4KLQkJPHRhYmxlPgotCQk8dHI+Ci0JCQk8dGQ+Ci0JCQkJPGltZyBzcmM9InB5dGhvbi5naWYiIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiBhbGlnbj0idG9wIiBhbHQ9IiI+Ci0JCQk8L3RkPgotCQkJPHRkPgotPHA+Q2hvb3NlIGEgdG9waWMsIG9yIGVudGVyIGtleXdvcmRzIGludG8gdGhlIHNlYXJjaCBmaWVsZDo8L3A+Ci08dWw+Ci0JPGxpPjxhIGhyZWY9ImludHJvLmh0bWwiPldoYXQgaXMgTWFjUHl0aG9uPzwvYT4KLQk8L2xpPgotCTxsaT48YSBocmVmPSJkb2MvaW5kZXguaHRtbCI+UHl0aG9uIExhbmd1YWdlIGFuZCBydW50aW1lIGRvY3VtZW50YXRpb248L2E+Ci0JPC9saT4KLQk8bGk+PGEgaHJlZj0iZmluZGVyLmh0bWwiPlJ1bm5pbmcgUHl0aG9uIHNjcmlwdHMgZnJvbSB0aGUgRmluZGVyPC9hPgotCTwvbGk+Ci0JPGxpPjxhIGhyZWY9InNoZWxsLmh0bWwiPlJ1bm5pbmcgUHl0aG9uIHNjcmlwdHMgZnJvbSB0aGUgVW5peCBTaGVsbDwvYT4KLQk8L2xpPgotCTxsaT48YSBocmVmPSJndWkuaHRtbCI+Q3JlYXRpbmcgYSBVc2VyIEludGVyZmFjZSB3aXRoIE1hY1B5dGhvbjwvYT4KLQk8L2xpPgotCTxsaT48YSBocmVmPSJzY3JpcHRpbmcuaHRtbCI+Q29udHJvbGxpbmcgb3RoZXIgQXBwbGljYXRpb25zIGZyb20gTWFjUHl0aG9uPC9hPgotCTwvbGk+Ci0JPGxpPjxhIGhyZWY9InBhY2ttYW4uaHRtbCI+SW5zdGFsbGluZyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUKLQlQYWNrYWdlIE1hbmFnZXI8L2E+Ci0JPC9saT4KLQk8bGk+PGEgaHJlZj0iY29tbXVuaXR5Lmh0bWwiPk1hY1B5dGhvbiBjb21tdW5pdHk8L2E+Ci0JPC9saT4KLTwvdWw+Ci0JCi0JCQk8L3RkPgotCQk8L3RyPgotCQk8L3RhYmxlPgotCQk8aHI+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW50cm8uaHRtbCBiL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vaW50cm8uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBhYjM3MS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL2ludHJvLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPldoYXQgaXMgTWFjUHl0aG9uPzwvdGl0bGU+Ci0JPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJCQkVkaXQgNi41LjMiPgotCTxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0icHl0aG9uc21hbGwuZ2lmIj4KLQk8TUVUQSBOQU1FPSJBcHBsZUljb24iIENPTlRFTlQ9InB5dGhvbnNtYWxsLmdpZiI+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMT5XaGF0IGlzIE1hY1B5dGhvbj88L2gxPgotCQk8dGFibGU+Ci0JCTx0cj4KLQkJCTx0ZD4KLQkJCQk8aW1nIHNyYz0icHl0aG9uLmdpZiIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIGFsaWduPSJ0b3AiIGFsdD0iIj4KLQkJCTwvdGQ+Ci0JCQk8dGQ+Ci08cD5QeXRob24gaXMgYSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gTWFjUHl0aG9uIGlzIGEgcGFja2FnZSBjb250YWluaW5nCi10aGF0IHByb2dyYW1taW5nIGxhbmd1YWdlIHBsdXMgTWFjLXNwZWNpZmljIHRvb2xzIGFuZCBleHRlbnNpb25zLjwvcD4KLQkKLQkJCTwvdGQ+Ci0JCTwvdHI+Ci0JCTwvdGFibGU+Ci0JCTxocj4KLQotPGgyPlRoZSBQeXRob24gTGFuZ3VhZ2U8L2gyPgotPHA+VGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpcyBhdmFpbGFibGUgZm9yIG1hbnkgaGFyZHdhcmUKLXBsYXRmb3JtcywgYW5kIG1vc3QgZ2VuZXJhbCBkb2N1bWVudGF0aW9uIGlzIFVuaXgtIG9yIFdpbmRvd3MtY2VudGVyZWQuIEtlZXAKLXRoaXMgaW4gbWluZCB3aGVuIHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBoZWxwLCBvciBpbmZvcm1hdGlvbiBvbiB0aGUgd2ViLgotPC9wPgotCi08cD5UaGUgUHl0aG9uIHdlYnNpdGUsIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZyI+d3d3LnB5dGhvbi5vcmc8L2E+LAotaGFzIGEgPGVtPkJlZ2lubmVycyBHdWlkZTwvZW0+IHNlY3Rpb24gaW5jbHVkaW5nIGFuIAotPGEgaHJlZj0iaHR0cDovL3B5dGhvbi5vcmcvZG9jL2Vzc2F5cy9ibHVyYi5odG1sIj5leGVjdXRpdmUgc3VtbWFyeTwvYT4gb24KLXRoZSBsYW5ndWFnZSBhbmQgYSAKLTxhIGhyZWY9Imh0dHA6Ly9weXRob24ub3JnL2RvYy9lc3NheXMvY29tcGFyaXNvbnMuaHRtbCI+Y29tcGFyaXNvbjwvYT4gb2YgUHl0aG9uCi10byBvdGhlciBsYW5ndWFnZXMuIE9yIHJlYWQgdGhlIChyYXRoZXIgbG9uZ3dpbmRlZCkgUHl0aG9uCi1UdXRvcmlhbCBpbiB0aGUgPGEgaHJlZj0iZG9jL2luZGV4Lmh0bWwiPlB5dGhvbiBMYW5ndWFnZSBhbmQgcnVudGltZSBkb2N1bWVudGF0aW9uPC9hPi48L3A+Ci0KLTxwPk1hY1B5dGhvbiBjb250YWlucyBhIGNvbXBsZXRlIDxhIGhyZWY9InNoZWxsLmh0bWwiPnVuaXggaW50ZXJwcmV0ZXI8L2E+IHNvCi1pZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggUHl0aG9uIG9uIHVuaXggeW91IHNob3VsZCBmZWVsIHJpZ2h0IGF0IGhvbWUuPC9wPgotCi08aDI+TWFjUHl0aG9uIGFkZGl0aW9uczwvaDI+Ci0KLTxwPlRoZSBNYWNQeXRob24gSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCAoSURFKSBhbGxvd3MKLWVhc3kgZWRpdGluZywgcnVubmluZyBhbmQgZGVidWdnaW5nIG9mIHNjcmlwdHMuIFJlYWQgdGhlIAotPGEgaHJlZj0iaWRlL2luZGV4Lmh0bWwiPkludHJvZHVjdGlvbgotdG8gdGhlIElERTwvYT4gdG8gd2hldCB5b3VyIGFwcGV0aXRlLjwvcD4KLQotPHA+TWFjUHl0aG9uIGNvbWVzIHdpdGggbG90cyBvZiBtb2R1bGVzIHRoYXQgYWxsb3cgYWNjZXNzIHRvIAotTWFjT1Mtc3BlY2lmaWMgdGVjaG5vbG9neSwgc3VjaCBhcyBDYXJib24sIFF1aWNrdGltZSBhbmQgQXBwbGVTY3JpcHQuIAotU2VlIHRoZSA8ZW0+TWFjaW50b3NoCi1Nb2R1bGVzPC9lbT4gc2VjdGlvbiBvZiB0aGUKLTxhIGhyZWY9ImRvYy9pbmRleC5odG1sIj5QeXRob24gTGFuZ3VhZ2UgYW5kIHJ1bnRpbWUgZG9jdW1lbnRhdGlvbjwvYT4sCi1idXQgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHNvbWUgaW5mb3JtYXRpb24gdGhlcmUgc3RpbGwgcGVydGFpbnMgdG8KLU1hYyBPUyA5LgotCi1GdWxsIGFjY2VzcyB0byB0aGUgQ29jb2EgQVBJcwotYW5kIHRvb2xzIHN1Y2ggYXMgSW50ZXJmYWNlIEJ1aWxkZXIgaXMgYXZhaWxhYmxlIHNlcGFyYXRlbHkgdGhyb3VnaCB0aGUKLTxhIGhyZWY9InBhY2ttYW4uaHRtbCI+UGFja2FnZSBNYW5hZ2VyPC9hPi48L3A+Ci0KLTxwPlRoZSA8YSBocmVmPSJwYWNrbWFuLmh0bWwiPlBhY2thZ2UgTWFuYWdlcjwvYT4gYWxzbyBnaXZlcyB5b3UgYWNjZXNzIHRvIGV4dGVuc2lvbgotcGFja2FnZXMgZm9yIGNyb3NzLXBsYXRmb3JtIEdVSSBkZXZlbG9wbWVudCAoVGtpbnRlciwgd3hQeXRob24sIFB5T3BlbkdMKSwgCi1pbWFnZSBwcm9jZXNzaW5nIChQSUwpLCBzY2llbnRpZmljCi1jb21wdXRpbmcgKE51bWVyaWMpIGFuZCBtdWNoIG1vcmUuIDxlbT5QeU9iakM8L2VtPiBkZXNlcnZlcyBhIHNwZWNpYWwgbWVudGlvbjogaXQgYWxsb3dzCi10cmFuc3BhcmVudCBhY2Nlc3MgdG8gQ29jb2EgYW5kIEludGVyZmFjZSBCdWlsZGVyLCBzaW1pbGFyIHRvIHdoYXQgSmF2YSBwcm92aWRlcywKLXRoZXJlYnkgbWFraW5nIFB5dGhvbiBhIGZpcnN0IGNsYXNzIGNpdGl6ZW4gaW4gdGhlIE1hYyBPUyBYIGRldmVsb3BlciB3b3JsZC4gPC9wPgotCi08cD5QeXRob24gc2NyaXB0cyBjYW4gYmUgc2F2ZWQgYXMgPGVtPmFwcGxldHM8L2VtPiwgc2VtaS1zdGFuZGFsb25lIGFwcGxpY2F0aW9ucwotdGhhdCB3b3JrIGp1c3QgbGlrZSBhIG5vcm1hbCBhcHBsaWNhdGlvbi4gQWRkaXRpb25hbGx5IHlvdSBjYW4gZXZlbiBjcmVhdGUKLXRydWUgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiB0aGF0IGhhdmUgZXZlcnl0aGluZyBlbWJlZGRlZCBhbmQgY2FuIGJlCi1zaGlwcGVkIHRvIGFueW9uZSwgd2l0aG91dCB0aGUgbmVlZCB0byBpbnN0YWxsIFB5dGhvbi4gWW91IGRvIDxlbT5ub3Q8L2VtPgotbmVlZCB0byBpbnN0YWxsIHRoZSBBcHBsZSBEZXZlbG9wZXIgVG9vbHMgZm9yIHRoaXMuIDwvcD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vcGFja21hbi5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9wYWNrbWFuLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NWUwZGEuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9wYWNrbWFuLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPGh0bWwgbGFuZz0iZW4iPgotPGhlYWQ+Ci0JPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci0JPHRpdGxlPlB5dGhvbiBQYWNrYWdlIE1hbmFnZXI8L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+SW5zdGFsbGluZyBhZGRpdGlvbmFsIFB5dGhvbiBQYWNrYWdlczwvaDE+Ci0JCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxpbWcgc3JjPSJQYWNrYWdlTWFuYWdlci5naWYiIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiBhbGlnbj0idG9wIiBhbHQ9IiI+Ci0JCQk8L3RkPgotCQkJPHRkPgotCQkJCTxwPlRoZSBQeXRob24gUGFja2FnZSBNYW5hZ2VyIGhlbHBzIHlvdSBpbnN0YWxsaW5nIGFkZGl0aW9uYWwKLQkJCQlwYWNrYWdlcyB0aGF0IGVuaGFuY2UgUHl0aG9uLiBJdCBkZXRlcm1pbmVzIHRoZSBleGFjdCBNYWNPUyB2ZXJzaW9uCi0JCQkJYW5kIFB5dGhvbiB2ZXJzaW9uIHlvdSBoYXZlIGFuZCB1c2VzIHRoYXQgaW5mb3JtYXRpb24gdG8gZG93bmxvYWQKLQkJCQlhIGRhdGFiYXNlIHRoYXQgaGFzIHBhY2thZ2VzIHRoYXQgYXJlIHRlc3QgYW5kIHRyaWVkIG9uIHRoYXQKLQkJCQljb21iaW5hdGlvbi4gSW4gb3RoZXIgd29yZHM6IGlmIHNvbWV0aGluZyBpcyBpbiB5b3VyIFBhY2thZ2UgTWFuYWdlcgotCQkJCXdpbmRvdyBidXQgZG9lcyBub3Qgd29yayB5b3UgYXJlIGZyZWUgdG8gYmxhbWUgdGhlIGRhdGFiYXNlIG1haW50YWluZXIuPC9wPgotCQkJCQotCQkJCTxwPlBhY2thZ2VNYW5hZ2VyIHRoZW4gY2hlY2tzIHdoaWNoIG9mIHRoZSBwYWNrYWdlcyB5b3UgaGF2ZSBpbnN0YWxsZWQKLQkJCQlhbmQgd2hpY2ggb25lcyBub3QuIFRoaXMgc2hvdWxkIGFsc28gd29yayB3aGVuIHlvdSBoYXZlIGluc3RhbGxlZCBwYWNrYWdlcwotCQkJCW91dHNpZGUgb2YgUGFja2FnZU1hbmFnZXIuCi0JCQkJWW91IGNhbiBzZWxlY3QgcGFja2FnZXMgYW5kIGluc3RhbGwgdGhlbSwgYW5kIFBhY2thZ2VNYW5hZ2VyIHdpbGwgd29yayAKLQkJCQlvdXQgdGhlIHJlcXVpcmVtZW50cyBhbmQgaW5zdGFsbCB0aGVzZSB0b28uPC9wPgotCQkJCQotCQkJCTxwPk9mdGVuIFBhY2thZ2VNYW5hZ2VyIHdpbGwgbGlzdCBhIHBhY2thZ2UgaW4gdHdvIGZsYXZvcnM6IGJpbmFyeQotCQkJCWFuZCBzb3VyY2UuIEJpbmFyeSBzaG91bGQgYWx3YXlzIHdvcmssIHNvdXJjZSB3aWxsIG9ubHkgd29yayBpZgotCQkJCXlvdSBoYXZlIGluc3RhbGxlZCB0aGUgQXBwbGUgRGV2ZWxvcGVyIFRvb2xzLiBQYWNrYWdlTWFuYWdlciB3aWxsIHdhcm4KLQkJCQl5b3UgYWJvdXQgdGhpcywgYW5kIGFsc28gYWJvdXQgb3RoZXIgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLjwvcD4KLQkJCQkKLQkJCQk8cD5QYWNrYWdlTWFuYWdlciBpcyBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBhcHBsaWNhdGlvbiBhbmQgYWxzbwotCQkJCWFzIGEgZnVuY3Rpb24gb2YgdGhlIElERSwgdGhyb3VnaCB0aGUgPHR0PkZpbGUtJmd0O1BhY2thZ2UgTWFuYWdlcjwvdHQ+IG1lbnUKLQkJCQllbnRyeS4gPC9wPgotCQkJCQotCQkJCTxoMj5Ucm91Ymxlc2hvb3Rpbmc8L2gyPgotCQkJCQotCQkJCTxwPklmIHBhY2thZ2UgbWFuYWdlciBmYWlscyB0byBvcGVuIHRoZSBkYXRhYmFzZSBmaXJzdCBjaGVjayB0aGF0IHlvdSBhcmUKLQkJCQljb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LiBJZiB5b3UgYXJlIGNvbm5lY3RlZCB0aGVuIHRoZSBwcm9ibGVtCi0JCQkJY291bGQgYmUgdGhhdCB0aGVyZSBpcyBubyBkYXRhYmFzZSAoeWV0PykgZm9yIHlvdXIgdmVyc2lvbiBvZiBNYWMgT1MgWC4KLQkJCQlZb3UgbWF5IGJlIGFibGUgdG8gZmluZCBhbiBhbHRlcm5hdGl2ZQotCQkJCWRhdGFiYXNlIHRoYXQgd29ya3MgZm9yIHlvdXIgc3lzdGVtIGF0Ci0JCQkJPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3BhY2ttYW4iPmh0dHA6Ly93d3cucHl0aG9uLm9yZy9wYWNrbWFuPC9hPi4KLQkJCQlJbiB0aGUgc3RhbmRhbG9uZSBQYWNrYWdlIE1hbmFnZXIgeW91IGNhbiB0aGVuIG9wZW4gc3VjaCBhbiBhbHRlcm5hdGl2ZSBkYXRhYmFzZQotCQkJCXdpdGggdGhlIDx0dD5GaWxlLSZndDtPcGVuIFVSTC4uLjwvdHQ+IGNvbW1hbmQsIGJ1dCB5b3Ugc2hvdWxkIHJlYWxpemUgdGhhdAotCQkJCXlvdSBhcmUgbm93IG9uIHVudGVzdGVkIGdyb3VuZC48L3A+Ci0JCQkJCi0JCQkJPHA+QW5vdGhlciBwb3RlbnRpYWwgcHJvYmxlbSBzb3VyY2UgaXMgdGhhdCB5b3UgYXJlIGJlaGluZCBhIGZpcmV3YWxsLiBUaGlzIHZlcnNpb24KLQkJCQlvZiBQYWNrYWdlTWFuYWdlciB1c2VzIHRoZSBVbml4IG1ldGhvZCBvZiBzZXR0aW5nIGEgZmlyZXdhbGw6IHlvdSBuZWVkIHRvIHNldCB0aGUKLQkJCQllbnZpcm9ubWVudCB2YXJpYWJsZSA8dHQ+aHR0cF9wcm94eTwvdHQ+IHRvIDx0dD4iaHR0cDovLzxpPnByb3h5aG9zdDwvaT46PGk+cG9ydDwvaT4iPC90dD4uCi0JCQkJU2VlIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3FhL3FhMjAwMS9xYTEwNjcuaHRtbCI+QXBwbGUgVGVjaG5pY2FsCi0JCQkJUSZhbXA7QSBRQTEwNjc8L2E+IGZvciBpbnN0cnVjdGlvbnMuPC9wPgotCQkJCQotCQkJPC90ZD4KLQkJPC90cj4KLQkJPC90YWJsZT4KLQkJPGhyPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob24uZ2lmIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob24uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDRhYTVkLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vcHl0aG9uLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL0RvY3VtZW50YXRpb24vcHl0aG9uc21hbGwuZ2lmIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob25zbWFsbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MDIyNWUuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9weXRob25zbWFsbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NjcmlwdGluZy5odG1sIGIvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9zY3JpcHRpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYzMjFjYi4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NjcmlwdGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTxodG1sIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5Db250cm9sbGluZyBvdGhlciBBcHBsaWNhdGlvbnMgZnJvbSBNYWNQeXRob248L3RpdGxlPgotCTxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iQkJFZGl0IDYuNS4zIj4KLQk8bGluayByZWw9IlNIT1JUQ1VUIElDT04iIGhyZWY9InB5dGhvbnNtYWxsLmdpZiI+Ci0JPE1FVEEgTkFNRT0iQXBwbGVJY29uIiBDT05URU5UPSJweXRob25zbWFsbC5naWYiPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+Q29udHJvbGxpbmcgb3RoZXIgQXBwbGljYXRpb25zIGZyb20gTWFjUHl0aG9uPC9oMT4KLQotPHA+UHl0aG9uIGhhcyBhIGZhaXJseSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbiBTY3JpcHRpbmcKLUFyY2hpdGVjdXJlIChPU0EsIGFsc28gY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgQXBwbGVTY3JpcHQpLCBhbGxvd2luZwoteW91IHRvIGNvbnRyb2wgc2NyaXB0YWJsZSBhcHBsaWNhdGlvbnMgZnJvbSB5b3VyIFB5dGhvbiBwcm9ncmFtLAotYW5kIHdpdGggYSBmYWlybHkgcHl0aG9uaWMgaW50ZXJmYWNlLiBUaGlzIHBpZWNlIG9mCi1QeXRob246PC9wPgotCQotPGJsb2NrcXVvdGU+PHByZT48dHQ+Ci1pbXBvcnQgRmluZGVyCi0KLWYgPSBGaW5kZXIuRmluZGVyKCkKLXByaW50IGYuZ2V0KGYud2luZG93KDEpLm5hbWUpCi08L3R0PjwvcHJlPjwvYmxvY2txdW90ZT4KLQotPHA+aXMgaWRlbnRpY2FsIHRvIHRoZSBmb2xsb3dpbmcgcGllY2Ugb2YgQXBwbGVTY3JpcHQ6PC9wPgotCi08YmxvY2txdW90ZT48cHJlPjx0dD4KLXRlbGwgYXBwbGljYXRpb24gIkZpbmRlciIKLQlnZXQgbmFtZSBvZiB3aW5kb3cgMQotZW5kIHRlbGwKLTwvdHQ+PC9wcmU+PC9ibG9ja3F1b3RlPgotCi08cD5UbyBzZW5kIEFwcGxlRXZlbnRzIHRvIGFuIGFwcGxpY2F0aW9uIHlvdSBtdXN0IGZpcnN0IGNyZWF0ZSB0aGUgUHl0aG9uCi1tb2R1bGVzIGludGVyZmFjaW5nIHRvIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgYXBwbGljYXRpb24gKHdoYXQKLTx0dD5TY3JpcHQgRWRpdG9yPC90dD4gY2FsbHMgdGhlICJEaWN0aW9uYXJ5IikuIFVzZSB0aGUgSURFIG1lbnUgY29tbWFuZAotPHR0PkZpbGUtJmd0O0dlbmVyYXRlIE9TQSBTdWl0ZS4uLjwvdHQ+IGZvciB0aGlzLiBGb3IgbW9yZSBjb250cm9sIHJ1bjwvcD4KLQotPGJsb2NrcXVvdGU+PHR0PgotcHl0aG9udyAuLi4vTGliL3BsYXQtbWFjL2dlbnN1aXRlbW9kdWxlLnB5IC0taGVscAotPC90dD48L2Jsb2NrcXVvdGU+Ci0KLTxwPmZyb20gYSB0ZXJtaW5hbCB3aW5kb3cuPC9wPgotCi08aDI+Q3JlYXRpbmcgYSBzY3JpcHRhYmxlIGFwcGxpY2F0aW9uIGluIFB5dGhvbjwvaDI+Ci0KLVlvdSBjYW4gYWxzbyBjcmVhdGUgYSBzY3JpcHRhYmxlIGFwcGxpY2F0aW9uIGluIFB5dGhvbiwgYnV0IHRoaXMgaXMgbm90Ci12ZXJ5IHdlbGwgZG9jdW1lbnRlZC4gRm9yIENhcmJvbgotYXBwbGljYXRpb25zIHlvdSBzaG91bGQgbG9vayBhdCB0aGUgPHR0Pk1pbmlBRUZyYW1lPC90dD4gbW9kdWxlLgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NoZWxsLmh0bWwgYi9NYWMvUmVzb3VyY2VzL2FwcC9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uL3NoZWxsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZjU2NDYuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9hcHAvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9zaGVsbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTkvUkVDLWh0bWw0MDEtMTk5OTEyMjQvbG9vc2UuZHRkIj4KLTxodG1sIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgotCTx0aXRsZT5QeXRob24gYW5kIHRoZSBVbml4IFNoZWxsPC90aXRsZT4KLQk8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkJCRWRpdCA2LjUuMyI+Ci0JPGxpbmsgcmVsPSJTSE9SVENVVCBJQ09OIiBocmVmPSJweXRob25zbWFsbC5naWYiPgotCTxNRVRBIE5BTUU9IkFwcGxlSWNvbiIgQ09OVEVOVD0icHl0aG9uc21hbGwuZ2lmIj4KLTwvaGVhZD4KLTxib2R5PgotPGgxPlJ1bm5pbmcgUHl0aG9uIHNjcmlwdHMgZnJvbSB0aGUgVW5peCBTaGVsbDwvaDE+Ci0JCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxpbWcgc3JjPSJweXRob24uZ2lmIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgYWxpZ249InRvcCIgYWx0PSIiPgotCQkJPC90ZD4KLQkJCTx0ZD4KLQkJCQk8cD5NYWNQeXRob24gMi4zIGluc3RhbGxzIGEgcGVyZmVjdGx5IG5vcm1hbCBVbml4IGNvbW1hbmRsaW5lCi0JCQkJcHl0aG9uIGludGVycHJldGVyIGluIDx0dD4vdXNyL2xvY2FsL2Jpbi9weXRob248L3R0Pi4gQXMgb2YgTWFjIE9TIFggMTAuMiwgaG93ZXZlciwKLQkJCQk8dHQ+L3Vzci9sb2NhbC9iaW48L3R0PiBpcyBub3Qgb24gdGhlIHNlYXJjaCBwYXRoIG9mIHlvdXIgc2hlbGwuIE1vcmVvdmVyLAotCQkJCUFwcGxlJ3MgcHl0aG9uIDIuMiwgd2hpY2ggbGl2ZXMgaW4gPHR0Pi91c3IvYmluPC90dD4gPGVtPmlzPC9lbT4gb24geW91cgotCQkJCXNlYXJjaCBwYXRoLCBzbyB0aGlzIGNhbiBsZWFkIHRvIGNvbmZ1c2lvbi48L3A+Ci0JCQkJCi0JCQkJPHA+SWYgeW91IHVzZSA8dHQ+dGNzaDwvdHQ+IHlvdSBzaG91bGQgYWRkIHRoZSBmb2xsb3dpbmcgbGluZQotCQkJCXRvIHRoZSBmaWxlIDx0dD4ubG9naW48L3R0PiBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IGFuZCByZXN0YXJ0IFRlcm1pbmFsOgotCQkJCTxicj4KLQkJCQk8dHQ+c2V0ZW52IFBBVEggL3Vzci9sb2NhbC9iaW46JFBBVEg8L3R0PgotCQkJCTwvcD4KLQkJCQkKLQkJCQk8cD5JZiB5b3UgdXNlIDx0dD5iYXNoPC90dD4gb3IgPHR0PnpzaDwvdHQ+Ci0JCQkJeW91IHNob3VsZCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lCi0JCQkJdG8gdGhlIGZpbGUgPHR0Pi5wcm9maWxlPC90dD4gaW4geW91ciBob21lIGRpcmVjdG9yeSBhbmQgcmVzdGFydCBUZXJtaW5hbDoKLQkJCQk8YnI+Ci0JCQkJPHR0PmV4cG9ydCBQQVRIPS91c3IvbG9jYWwvYmluOiRQQVRIPC90dD4KLQkJCQk8L3A+Ci0JCQkJCi0JCQkJPGgyPkdVSSBzY3JpcHRzPC9oMj4KLQkJCQkKLQkJCQk8cD5EdWUgdG8gdGhlIHdheSBNYWNPUyBoYW5kbGVzIHdpbmRvd2luZyBhcHBsaWNhdGlvbnMgeW91IG5lZWQgdG8gcnVuIAotCQkJCTxlbT5hbGw8L2VtPiBzY3JpcHRzIHRoYXQgdXNlIHRoZSB3aW5kb3cgbWFuYWdlciAoYmUgaXQgdGhyb3VnaAotCQkJCUNhcmJvbiwgQ29jb2EsIFRraW50ZXIsIHd4UHl0aG9uLCBQeU9wZW5HTCBvciBhbnl0aGluZyBlbHNlKSB3aXRoIHRoZQotCQkJCTx0dD5weXRob253PC90dD4gaW50ZXJwcmV0ZXIsIGFsc28gaW5zdGFsbGVkIGluIDx0dD4vdXNyL2xvY2FsL2JpbjwvdHQ+LjwvcD4KLQkJCQkKLQkJCQk8cD5SdW5uaW5nIHdpdGggPHR0PnB5dGhvbjwvdHQ+IHJlc3VsdHMgaW4gYW4gaW5hYmlsaXR5IHRvIGJyaW5nIHRoZQotCQkJCXNjcmlwdCB0byB0aGUgZnJvbnQsIG9yIGludGVyYWN0aW5nIHdpdGggaXQuIDwvcD4KLQkJCTwvdGQ+Ci0JCTwvdHI+Ci0JCTwvdGFibGU+Ci0JCTxocj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4gYi9NYWMvUmVzb3VyY2VzL2ZyYW1ld29yay9JbmZvLnBsaXN0LmluCmluZGV4IGE3NTNlODguLmI1YjE5ZDQgMTAwNjQ0Ci0tLSBhL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4KKysrIGIvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbgpAQCAtMTcsOSArMTcsOSBAQAogCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgogCTxzdHJpbmc+Rk1XSzwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlTG9uZ1ZlcnNpb25TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlU2lnbmF0dXJlPC9rZXk+CiAJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9JREUucHNkIGIvTWFjL1Jlc291cmNlcy9pY29uc3JjL0lERS5wc2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NjM3YjkuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL0lERS5wc2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUGFja2FnZU1hbmFnZXIucHNkIGIvTWFjL1Jlc291cmNlcy9pY29uc3JjL1BhY2thZ2VNYW5hZ2VyLnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmNDFiMS4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUGFja2FnZU1hbmFnZXIucHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbkFwcGxldC5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uQXBwbGV0LnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1OGI1Mi4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uQXBwbGV0LnBzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25Db21waWxlZC5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uQ29tcGlsZWQucHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MWZjNGQxLi4wMDAwMDAwCi0tLSBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25Db21waWxlZC5wc2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uSWNvbi5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uSWNvbi5wc2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ4MThkYzYuLjAwMDAwMDAKLS0tIGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvbkljb24ucHNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9pY29uc3JjL1B5dGhvblNvdXJjZS5wc2QgYi9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uU291cmNlLnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWJhOGYyOC4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uU291cmNlLnBzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25XU291cmNlLnBzZCBiL01hYy9SZXNvdXJjZXMvaWNvbnNyYy9QeXRob25XU291cmNlLnBzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI4NGQ5NC4uMDAwMDAwMAotLS0gYS9NYWMvUmVzb3VyY2VzL2ljb25zcmMvUHl0aG9uV1NvdXJjZS5wc2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkNzMwNy4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSIiIlN1aXRlIEhlbHAgSW5kZXhpbmcgVG9vbCBTdWl0ZTogU3BlY2lhbCBldmVudHMgdGhhdCBqdXN0IHRoZSBIZWxwIEluZGV4aW5nIFRvb2wgc3VwcG9ydHMuCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnSElUICcKLQotY2xhc3MgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlX0V2ZW50czoKLQotICAgIGRlZiB0dXJuX2FuY2hvcl9pbmRleGluZyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidHVybiBhbmNob3IgaW5kZXhpbmc6IFR1cm5zIGFuY2hvciBpbmRleGluZyBvbiBvciBvZmYuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIGFuY2hvciBpbmRleGluZyBvbiBvciBvZmYKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndEFuYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCA9IHsKLSAgICAgICAgJ3dpdGhfcm9vdF91cmwnIDogJ3JVUkwnLAotICAgIH0KLQotICAgIGRlZiB0dXJuX3JlbW90ZV9yb290KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIHJlbW90ZSByb290OiBUdXJuIHVzYWdlIG9mIHJlbW90ZSByb290IGZvciBjb250ZW50IG9uIHRoZSB3ZWIgb24gb3Igb2ZmLiBJZiB0dXJuaW5nIFx4ZDJvblx4ZDMsIHN1cHBseSBhIHN0cmluZyBhcyBzZWNvbmQgcGFyYW1ldGVyLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogXHhkMm9uXHhkMyBvciBceGQyb2ZmXHhkMywgdG8gdHVybiByZW1vdGUgcm9vdCBvbiBvciBvZmYKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX3Jvb3RfdXJsOiBUaGUgcmVtb3RlIHJvb3QgdG8gdXNlLCBpbiB0aGUgZm9ybSBvZiBceGQyaHR0cDovL3d3dy5hcHBsZS5jb20vaGVscC9ceGQzLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0UmVtJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3R1cm5fcmVtb3RlX3Jvb3QpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIHVzZV90b2tlbml6ZXIoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInVzZSB0b2tlbml6ZXI6IFRlbGxzIHRoZSBpbmRleGluZyB0b29sIHdoaWNoIHRva2VuaXplciB0byB1c2UuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBTcGVjaWZ5IFx4ZDJFbmdsaXNoXHhkMywgXHhkMkV1cm9wZWFuXHhkMywgXHhkMkphcGFuZXNlXHhkMywgXHhkMktvcmVhblx4ZDMsIG9yIFx4ZDJTaW1wbGVceGQzLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd1VG9rJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBcHBsaWNhdGlvbiBjbGFzcyAiIiIKLSAgICB3YW50ID0gJ2NhcHAnCi1jbGFzcyBfUHJvcF9pZGxlU3RhdHVzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJpZGxlU3RhdHVzIC0gICIiIgotICAgIHdoaWNoID0gJ3NJZGwnCi0gICAgd2FudCA9ICdib29sJwotYXBwbGljYXRpb24uX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1hcHBsaWNhdGlvbi5fcHJpdnByb3BkaWN0ID0gewotICAgICdpZGxlU3RhdHVzJyA6IF9Qcm9wX2lkbGVTdGF0dXMsCi19Ci1hcHBsaWNhdGlvbi5fcHJpdmVsZW1kaWN0ID0gewotfQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ3NJZGwnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2Y3NDVmLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIE1pc2NlbGxhbmVvdXMgU3RhbmRhcmRzOiBVc2VmdWwgZXZlbnRzIHRoYXQgYXJlblx4ZDV0IGluIGFueSBvdGhlciBzdWl0ZQotTGV2ZWwgMCwgdmVyc2lvbiAwCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ21pc2MnCi0KLWNsYXNzIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzX0V2ZW50czoKLQotICAgIGRlZiByZXZlcnQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInJldmVydDogUmV2ZXJ0IGFuIG9iamVjdCB0byB0aGUgbW9zdCByZWNlbnRseSBzYXZlZCB2ZXJzaW9uCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBvYmplY3QgdG8gcmV2ZXJ0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ21pc2MnCi0gICAgICAgIF9zdWJjb2RlID0gJ3J2cnQnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViOWZlZTAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIiIiU3VpdGUgUmVxdWlyZWQgU3VpdGU6IFRlcm1zIHRoYXQgZXZlcnkgYXBwbGljYXRpb24gc2hvdWxkIHN1cHBvcnQKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdyZXFkJwotCi1mcm9tIFN0ZFN1aXRlcy5SZXF1aXJlZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgUmVxdWlyZWRfU3VpdGVfRXZlbnRzKFJlcXVpcmVkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBwYXNzCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjJhMDIuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLSIiIlN1aXRlIFN0YW5kYXJkIFN1aXRlOiBDb21tb24gdGVybXMgZm9yIG1vc3QgYXBwbGljYXRpb25zCi1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnQ29SZScKLQotZnJvbSBTdGRTdWl0ZXMuU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWNsYXNzIFN0YW5kYXJkX1N1aXRlX0V2ZW50cyhTdGFuZGFyZF9TdWl0ZV9FdmVudHMpOgotCi0gICAgX2FyZ21hcF9jbG9zZSA9IHsKLSAgICAgICAgJ3NhdmluZycgOiAnc2F2bycsCi0gICAgICAgICdpbl8nIDogJ2tmaWwnLAotICAgIH0KLQotICAgIGRlZiBjbG9zZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiY2xvc2U6IENsb3NlIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdHMgdG8gY2xvc2UKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBzYXZpbmc6IHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBjaGFuZ2VzIHNob3VsZCBiZSBzYXZlZCBiZWZvcmUgY2xvc2luZwotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2Nsb3MnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfY2xvc2UpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotICAgICAgICBhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnc2F2bycsIF9FbnVtX3Nhdm8pCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgZGF0YV9zaXplKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJkYXRhIHNpemU6IFJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3Qgd2hvc2UgZGF0YSBzaXplIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogdGhlIHNpemUgb2YgdGhlIG9iamVjdCBpbiBieXRlcwotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnZHNpeicKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBnZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImdldDogR2V0IHRoZSBkYXRhIGZvciBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3Qgd2hvc2UgZGF0YSBpcyB0byBiZSByZXR1cm5lZAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IFRoZSBkYXRhIGZyb20gdGhlIG9iamVjdAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnZ2V0ZCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfbWFrZSA9IHsKLSAgICAgICAgJ25ldycgOiAna29jbCcsCi0gICAgICAgICdhdCcgOiAnaW5zaCcsCi0gICAgICAgICd3aXRoX2RhdGEnIDogJ2RhdGEnLAotICAgICAgICAnd2l0aF9wcm9wZXJ0aWVzJyA6ICdwcmR0JywKLSAgICB9Ci0KLSAgICBkZWYgbWFrZShzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJtYWtlOiBNYWtlIGEgbmV3IGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBuZXc6IHRoZSBjbGFzcyBvZiB0aGUgbmV3IGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBhdDogdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRvIGluc2VydCB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfZGF0YTogdGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX3Byb3BlcnRpZXM6IHRoZSBpbml0aWFsIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiBPYmplY3Qgc3BlY2lmaWVyIGZvciB0aGUgbmV3IGVsZW1lbnQKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2NyZWwnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfbWFrZSkKLSAgICAgICAgaWYgX25vX29iamVjdCBpcyBub3QgTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIG9wZW4oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm9wZW46IE9wZW4gdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gb3Blbi4gQ2FuIGJlIGEgbGlzdCBvZiBmaWxlcyBvciBhbiBvYmplY3Qgc3BlY2lmaWVyLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdhZXZ0JwotICAgICAgICBfc3ViY29kZSA9ICdvZG9jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIHByaW50XyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicHJpbnQ6IFByaW50IHRoZSBzcGVjaWZpZWQgb2JqZWN0KHMpCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIHByaW50LiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ3Bkb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3NhdmUgPSB7Ci0gICAgICAgICdpbl8nIDogJ2tmaWwnLAotICAgICAgICAnYXMnIDogJ2ZsdHAnLAotICAgIH0KLQotICAgIGRlZiBzYXZlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzYXZlOiBzYXZlIGEgc2V0IG9mIG9iamVjdHMKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gc2F2ZS4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBpbl86IHRoZSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdChzKQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGFzOiB0aGUgZmlsZSB0eXBlIG9mIHRoZSBkb2N1bWVudCBpbiB3aGljaCB0byBzYXZlIHRoZSBkYXRhCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NhdmUnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2F2ZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3NldCA9IHsKLSAgICAgICAgJ3RvJyA6ICdkYXRhJywKLSAgICB9Ci0KLSAgICBkZWYgc2V0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzZXQ6IFNldCBhbiBvYmplY3RceGQ1cyBkYXRhCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIGNoYW5nZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHRvOiB0aGUgbmV3IHZhbHVlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NldGQnCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2V0KQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi1jbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImFwcGxpY2F0aW9uIC0gQW4gYXBwbGljYXRpb24gcHJvZ3JhbSAiIiIKLSAgICB3YW50ID0gJ2NhcHAnCi0jICAgICAgICBlbGVtZW50ICdjd2luJyBhcyBbJ2luZHgnLCAnbmFtZScsICdyZWxlJ10KLSMgICAgICAgIGVsZW1lbnQgJ2RvY3UnIGFzIFsnbmFtZSddCi0KLWNsYXNzIHdpbmRvdyhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiIndpbmRvdyAtIEEgV2luZG93ICIiIgotICAgIHdhbnQgPSAnY3dpbicKLWNsYXNzIF9Qcm9wX2JvdW5kcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiYm91bmRzIC0gdGhlIGJvdW5kYXJ5IHJlY3RhbmdsZSBmb3IgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwYm5kJwotICAgIHdhbnQgPSAncWRydCcKLWNsYXNzIF9Qcm9wX2Nsb3NlYWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiY2xvc2VhYmxlIC0gRG9lcyB0aGUgd2luZG93IGhhdmUgYSBjbG9zZSBib3g/ICIiIgotICAgIHdoaWNoID0gJ2hjbGInCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfZmxvYXRpbmcoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImZsb2F0aW5nIC0gRG9lcyB0aGUgd2luZG93IGZsb2F0PyAiIiIKLSAgICB3aGljaCA9ICdpc2ZsJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX2luZGV4KGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJpbmRleCAtIHRoZSBudW1iZXIgb2YgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwaWR4JwotICAgIHdhbnQgPSAnbG9uZycKLWNsYXNzIF9Qcm9wX21vZGFsKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RhbCAtIElzIHRoZSB3aW5kb3cgbW9kYWw/ICIiIgotICAgIHdoaWNoID0gJ3Btb2QnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfbmFtZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibmFtZSAtIHRoZSB0aXRsZSBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BuYW0nCi0gICAgd2FudCA9ICdpdHh0JwotY2xhc3MgX1Byb3BfcG9zaXRpb24oYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInBvc2l0aW9uIC0gdXBwZXIgbGVmdCBjb29yZGluYXRlcyBvZiB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncHBvcycKLSAgICB3YW50ID0gJ1FEcHQnCi1jbGFzcyBfUHJvcF9yZXNpemFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInJlc2l6YWJsZSAtIElzIHRoZSB3aW5kb3cgcmVzaXphYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwcnN6JwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3RpdGxlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIidGl0bGVkIC0gRG9lcyB0aGUgd2luZG93IGhhdmUgYSB0aXRsZSBiYXI/ICIiIgotICAgIHdoaWNoID0gJ3B0aXQnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdmlzaWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIidmlzaWJsZSAtIGlzIHRoZSB3aW5kb3cgdmlzaWJsZT8gIiIiCi0gICAgd2hpY2ggPSAncHZpcycKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF96b29tYWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiem9vbWFibGUgLSBJcyB0aGUgd2luZG93IHpvb21hYmxlPyAiIiIKLSAgICB3aGljaCA9ICdpc3ptJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21lZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiem9vbWVkIC0gSXMgdGhlIHdpbmRvdyB6b29tZWQ/ICIiIgotICAgIHdoaWNoID0gJ3B6dW0nCi0gICAgd2FudCA9ICdib29sJwotCi1jbGFzcyBkb2N1bWVudChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImRvY3VtZW50IC0gQSBEb2N1bWVudCAiIiIKLSAgICB3YW50ID0gJ2RvY3UnCi1jbGFzcyBfUHJvcF9tb2RpZmllZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibW9kaWZpZWQgLSBIYXMgdGhlIGRvY3VtZW50IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxhc3Qgc2F2ZT8gIiIiCi0gICAgd2hpY2ggPSAnaW1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci19Ci1hcHBsaWNhdGlvbi5fcHJpdmVsZW1kaWN0ID0gewotICAgICdkb2N1bWVudCcgOiBkb2N1bWVudCwKLSAgICAnd2luZG93JyA6IHdpbmRvdywKLX0KLXdpbmRvdy5fc3VwZXJjbGFzc25hbWVzID0gW10KLXdpbmRvdy5fcHJpdnByb3BkaWN0ID0gewotICAgICdib3VuZHMnIDogX1Byb3BfYm91bmRzLAotICAgICdjbG9zZWFibGUnIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdmbG9hdGluZycgOiBfUHJvcF9mbG9hdGluZywKLSAgICAnaW5kZXgnIDogX1Byb3BfaW5kZXgsCi0gICAgJ21vZGFsJyA6IF9Qcm9wX21vZGFsLAotICAgICduYW1lJyA6IF9Qcm9wX25hbWUsCi0gICAgJ3Bvc2l0aW9uJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdyZXNpemFibGUnIDogX1Byb3BfcmVzaXphYmxlLAotICAgICd0aXRsZWQnIDogX1Byb3BfdGl0bGVkLAotICAgICd2aXNpYmxlJyA6IF9Qcm9wX3Zpc2libGUsCi0gICAgJ3pvb21hYmxlJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICd6b29tZWQnIDogX1Byb3Bfem9vbWVkLAotfQotd2luZG93Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1kb2N1bWVudC5fc3VwZXJjbGFzc25hbWVzID0gW10KLWRvY3VtZW50Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ21vZGlmaWVkJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICduYW1lJyA6IF9Qcm9wX25hbWUsCi19Ci1kb2N1bWVudC5fcHJpdmVsZW1kaWN0ID0gewotfQotX0VudW1fc2F2byA9IHsKLSAgICAneWVzJyA6ICd5ZXMgJywgICAgICMgU2F2ZSBvYmplY3RzIG5vdwotICAgICdubycgOiAnbm8gICcsICAgICAgIyBEbyBub3Qgc2F2ZSBvYmplY3RzCi0gICAgJ2FzaycgOiAnYXNrICcsICAgICAjIEFzayB0aGUgdXNlciB3aGV0aGVyIHRvIHNhdmUKLX0KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLSAgICAnY3dpbicgOiB3aW5kb3csCi0gICAgJ2RvY3UnIDogZG9jdW1lbnQsCi19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotICAgICdoY2xiJyA6IF9Qcm9wX2Nsb3NlYWJsZSwKLSAgICAnaW1vZCcgOiBfUHJvcF9tb2RpZmllZCwKLSAgICAnaXNmbCcgOiBfUHJvcF9mbG9hdGluZywKLSAgICAnaXN6bScgOiBfUHJvcF96b29tYWJsZSwKLSAgICAncGJuZCcgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ3BpZHgnIDogX1Byb3BfaW5kZXgsCi0gICAgJ3Btb2QnIDogX1Byb3BfbW9kYWwsCi0gICAgJ3BuYW0nIDogX1Byb3BfbmFtZSwKLSAgICAncHBvcycgOiBfUHJvcF9wb3NpdGlvbiwKLSAgICAncHJzeicgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3B0aXQnIDogX1Byb3BfdGl0bGVkLAotICAgICdwdmlzJyA6IF9Qcm9wX3Zpc2libGUsCi0gICAgJ3B6dW0nIDogX1Byb3Bfem9vbWVkLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ3Nhdm8nIDogX0VudW1fc2F2bywKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM1OWRmNS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0iIiIKLVBhY2thZ2UgZ2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotIiIiCi1pbXBvcnQgYWV0b29scwotRXJyb3IgPSBhZXRvb2xzLkVycm9yCi1pbXBvcnQgU3RhbmRhcmRfU3VpdGUKLWltcG9ydCBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUKLWltcG9ydCBvZGRzX2FuZF9lbmRzCi1pbXBvcnQgTWlzY2VsbGFuZW91c19TdGFuZGFyZHMKLWltcG9ydCBSZXF1aXJlZF9TdWl0ZQotCi0KLV9jb2RlX3RvX21vZHVsZSA9IHsKLSAgICAnQ29SZScgOiBTdGFuZGFyZF9TdWl0ZSwKLSAgICAnSElUICcgOiBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUsCi0gICAgJ09kZHMnIDogb2Rkc19hbmRfZW5kcywKLSAgICAnbWlzYycgOiBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcywKLSAgICAncmVxZCcgOiBSZXF1aXJlZF9TdWl0ZSwKLX0KLQotCi0KLV9jb2RlX3RvX2Z1bGxuYW1lID0gewotICAgICdDb1JlJyA6ICgnSGVscEluZGV4aW5nVG9vbC5TdGFuZGFyZF9TdWl0ZScsICdTdGFuZGFyZF9TdWl0ZScpLAotICAgICdISVQgJyA6ICgnSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnLCAnSGVscF9JbmRleGluZ19Ub29sX1N1aXRlJyksCi0gICAgJ09kZHMnIDogKCdIZWxwSW5kZXhpbmdUb29sLm9kZHNfYW5kX2VuZHMnLCAnb2Rkc19hbmRfZW5kcycpLAotICAgICdtaXNjJyA6ICgnSGVscEluZGV4aW5nVG9vbC5NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcycsICdNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcycpLAotICAgICdyZXFkJyA6ICgnSGVscEluZGV4aW5nVG9vbC5SZXF1aXJlZF9TdWl0ZScsICdSZXF1aXJlZF9TdWl0ZScpLAotfQotCi1mcm9tIFN0YW5kYXJkX1N1aXRlIGltcG9ydCAqCi1mcm9tIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSBpbXBvcnQgKgotZnJvbSBvZGRzX2FuZF9lbmRzIGltcG9ydCAqCi1mcm9tIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzIGltcG9ydCAqCi1mcm9tIFJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi0KLWRlZiBnZXRiYXNlY2xhc3Nlcyh2KToKLSAgICBpZiBub3QgZ2V0YXR0cih2LCAnX3Byb3BkaWN0JywgTm9uZSk6Ci0gICAgICAgIHYuX3Byb3BkaWN0ID0ge30KLSAgICAgICAgdi5fZWxlbWRpY3QgPSB7fQotICAgICAgICBmb3Igc3VwZXJjbGFzc25hbWUgaW4gZ2V0YXR0cih2LCAnX3N1cGVyY2xhc3NuYW1lcycsIFtdKToKLSAgICAgICAgICAgIHN1cGVyY2xhc3MgPSBldmFsKHN1cGVyY2xhc3NuYW1lKQotICAgICAgICAgICAgZ2V0YmFzZWNsYXNzZXMoc3VwZXJjbGFzcykKLSAgICAgICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfcHJvcGRpY3QnLCB7fSkpCi0gICAgICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cihzdXBlcmNsYXNzLCAnX2VsZW1kaWN0Jywge30pKQotICAgICAgICB2Ll9wcm9wZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZwcm9wZGljdCcsIHt9KSkKLSAgICAgICAgdi5fZWxlbWRpY3QudXBkYXRlKGdldGF0dHIodiwgJ19wcml2ZWxlbWRpY3QnLCB7fSkpCi0KLWltcG9ydCBTdGRTdWl0ZXMKLQotIwotIyBTZXQgcHJvcGVydHkgYW5kIGVsZW1lbnQgZGljdGlvbmFyaWVzIG5vdyB0aGF0IGFsbCBjbGFzc2VzIGhhdmUgYmVlbiBkZWZpbmVkCi0jCi1nZXRiYXNlY2xhc3Nlcyh3aW5kb3cpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLWdldGJhc2VjbGFzc2VzKGRvY3VtZW50KQotZ2V0YmFzZWNsYXNzZXMoYXBwbGljYXRpb24pCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLSAgICAnY2FwcCcgOiBhcHBsaWNhdGlvbiwKLX0KLQotCi1jbGFzcyBIZWxwSW5kZXhpbmdUb29sKFN0YW5kYXJkX1N1aXRlX0V2ZW50cywKLSAgICAgICAgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlX0V2ZW50cywKLSAgICAgICAgb2Rkc19hbmRfZW5kc19FdmVudHMsCi0gICAgICAgIE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzX0V2ZW50cywKLSAgICAgICAgUmVxdWlyZWRfU3VpdGVfRXZlbnRzLAotICAgICAgICBhZXRvb2xzLlRhbGtUbyk6Ci0gICAgX3NpZ25hdHVyZSA9ICdoaXRpJwotCi0gICAgX21vZHVsZU5hbWUgPSAnSGVscEluZGV4aW5nVG9vbCcKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZTQ2ZjMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0iIiJTdWl0ZSBvZGRzIGFuZCBlbmRzOiBUaGluZ3MgdGhhdCBzaG91bGQgYmUgaW4gc29tZSBzdGFuZGFyZCBzdWl0ZSwgYnV0IGFyZW5ceGQ1dAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ09kZHMnCi0KLWNsYXNzIG9kZHNfYW5kX2VuZHNfRXZlbnRzOgotCi0gICAgZGVmIHNlbGVjdChzZWxmLCBfb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJzZWxlY3Q6IFNlbGVjdCB0aGUgc3BlY2lmaWVkIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB0byBzZWxlY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAnc2xjdCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvUkVBRE1FIGIvTWFjL1Rvb2xzL0RvYy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNGQ1M2QuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1JbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGJ1aWxkIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBpbiBhIGZvcm0gdGhhdAotaXMgc3VpdGFibGUgZm9yIGFjY2VzcyB3aXRoIEFwcGxlIEhlbHAgVmlld2VyLiBUaGlzIHdpbGwgZW5hYmxlIHRoZQotIlB5dGhvbiBEb2N1bWVudGF0aW9uIiBtZW51IGVudHJpZXMgaW4gdGhlIE1hY1B5dGhvbiBJREUgSGVscCBtZW51LgotCi1VbmZvcnR1bmF0ZWx5IHRoZSBwcm9jZWR1cmUgdG8gYnVpbGQgdGhlIGRvY3MgaXMgbm90IHZlcnkgc3RyZWFtbGluZWQuCi0KLUZpcnN0LCBlZGl0IHNldHVwLnB5LiBBdCB0aGUgdG9wLCBlZGl0IE1BSk9SX1ZFUlNJT04gYW5kIE1JTk9SX1ZFUlNJT04sCi1hbmQgY2hlY2sgdGhhdCBERVNURElSIG1ha2VzIHNlbnNlLiBUaGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGluc3RhbGxlZAotaW5zaWRlIFB5dGhvbklERS5hcHAuCi0KLUluIERvY0J1aWxkLmluaXRpYWxpemVfb3B0aW9ucywgc2V0IHNlbGYuZG93bmxvYWQgdG8gVHJ1ZSBpZiB5b3Ugd2FudCB0bwotZG93bmxvYWQgdGhlIGRvY3MuIFNldCBpdCB0byBGYWxzZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgZG9jcyBmcm9tCi10aGUgc291cmNlIHRyZWUsIGJ1dCB0aGlzIHJlcXVpcmVzIExhVGV4IGFuZCBsb3RzIG9mIG90aGVyIHN0dWZmLgotRG9hYmxlLCBidXQgbm90IGVhc3kuCi0KLVNlY29uZCwgaWYgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhlIGRvY3MgeW91IG1heSBuZWVkIHRvIGRvIGEgY291cGxlCi1tb3JlIGVkaXRzLiBUaGUgd2F5IHRoZSBkb2NzIGFyZSBwYWNrYWdlZCB3aWxsIG9mdGVuIGNoYW5nZSBiZXR3ZWVuCi1tYWpvciByZWxlYXNlcy4gRmlkZGxlIERvY0J1aWxkLmRvd25sb2FkRG9jcyB0byBtYWtlIGl0IGRvIHRoZSByaWdodAotdGhpbmcgKGRvd25sb2FkIHRoZSBkb2NzIGZyb20gcHl0aG9uLm9yZywgdW5wYWNrIHRoZW0sIHJlbmFtZSB0aGUKLWRpcmVjdG9yeSB0byAiYnVpbGQvaHRtbCIpLgotCi1BZnRlciB0aGVzZSBlZGl0cyB5b3Ugc2hvdWxkIGJlIHJlYWR5IHRvIHJvbGwuICJweXRob253IHNldHVwLnB5IGJ1aWxkIgotc2hvdWxkIGRvd25sb2FkIGFuZCB1bnBhY2sgKG9yIGJ1aWxkKSB0aGUgZG9jcy4gTmV4dCwgaXQgd2lsbCBkbyBzb21lCi1tYWdpYyB0byBtYWtlIHRoZSBkb2NzIGluZGV4YWJsZS4gRmluYWxseSwgaXQgd2lsbCBydW4gdGhlIEFwcGxlIEhlbHAKLUluZGV4aW5nIFRvb2wuIChUaGlzIGxhc3Qgc3RlcCBpcyB0aGUgcmVhc29uIHlvdSBtdXN0IHVzZSAicHl0aG9udyIgYXMKLW9wcG9zZWQgdG8gInB5dGhvbiIpLiBVc3VhbGx5IGl0IHdpbGwgdGltZSBvdXQgd2hpbGUgd2FpdGluZyBmb3IgQUhJVCB0bwotZG8gaXRzIHdvcmsuIFdhaXQgdW50aWwgQUhJVCBpcyBkb25lLgotCi1Ob3cgeW91J3JlIHJlYWR5IHRvIGluc3RhbGwgd2l0aCAicHl0aG9uIHNldHVwLnB5IGluc3RhbGwiLgotCi1BZnRlciB0aGlzIGlzIGRvbmUgdGVzdCB5b3VyIHdvcmsuIEZpcmUgdXAgUHl0aG9uSURFLCBhbmQgY2hlY2sgdGhhdAotSGVscC0+UHl0aG9uIERvY3VtZW50YXRpb24gYnJpbmdzIHVwIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBIZWxwIFZpZXdlci4KLUFsc28gb3BlbiBhbiBJREUgZWRpdCB3aW5kb3csIHR5cGUgc29tZXRoaW5nIGxpa2UgImltcG9ydCBzeXMiLCBzZWxlY3QKLSJpbXBvcnQiLCBhbmQgdXNlIEhlbHAtPkxvb2t1cCBpbiBQeXRob24gRG9jdW1lbnRhdGlvbiB0byBjaGVjayB0aGF0IHRoZQotaW5kZXggaGFzIGJlZW4gZ2VuZXJhdGVkIGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkgYi9NYWMvVG9vbHMvRG9jL3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWM2NzhmLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotIyBCdWlsZCBhbmQgaW5zdGFsbCBhbiBBcHBsZSBIZWxwIFZpZXdlciBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIFB5dGhvbgotIyBkb2N1bWVudGF0aW9uIGludG8gdGhlIGZyYW1ld29yay4KLSMgQ29kZSBieSBCaWxsIEZhbmNoZXIsIHdpdGggc29tZSBtb2RpZmljYXRpb25zIGJ5IEphY2sgSmFuc2VuLgotIwotIyBZb3UgbXVzdCBydW4gdGhpcyBhcyBhIHR3by1zdGVwIHByb2Nlc3MKLSMgMS4gcHl0aG9uIHNldHVwRG9jcy5weSBidWlsZAotIyAyLiBXYWl0IGZvciBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgdG8gZmluaXNoCi0jIDMuIHB5dGhvbiBzZXR1cERvY3MucHkgaW5zdGFsbAotIwotIyBUbyBkbzoKLSMgLSB0ZXN0IHdoZXRoZXIgdGhlIGRvY3MgYXJlIGF2YWlsYWJsZSBsb2NhbGx5IGJlZm9yZSBkb3dubG9hZGluZwotIyAtIGZpeCBidWlsZERvY3NGcm9tU291cmNlCi0jIC0gR2V0IGRvY3VtZW50YXRpb24gdmVyc2lvbiBmcm9tIHN5cy52ZXJzaW9uLCBmYWxsYmFjayB0byAyLjIuMQotIyAtIFNlZSBpZiB3ZSBjYW4gc29tZWhvdyBkZXRlY3QgdGhhdCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgaXMgZmluaXNoZWQKLSMgLSBkYXRhX2ZpbGVzIHRvIHNldHVwKCkgZG9lc24ndCBzZWVtIHRoZSByaWdodCB3YXkgdG8gcGFzcyB0aGUgYXJndW1lbnRzCi0jCi1pbXBvcnQgc3lzLCBvcywgcmUKLWZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZCBpbXBvcnQgYnVpbGQKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IGNvcHlfZmlsZQotZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IGNvcHlfdHJlZQotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBsb2cKLWZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZywgZGVwX3V0aWwKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGNoYW5nZV9yb290Ci1pbXBvcnQgSGVscEluZGV4aW5nVG9vbAotaW1wb3J0IENhcmJvbi5GaWxlCi1pbXBvcnQgdGltZQotCi1NQUpPUl9WRVJTSU9OPScyLjQnCi1NSU5PUl9WRVJTSU9OPScyLjQuMScKLURFU1RESVI9Jy9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uLSVzL1B5dGhvbklERS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovUHl0aG9uRG9jdW1lbnRhdGlvbicgJSBNQUpPUl9WRVJTSU9OCi0KLWNsYXNzIERvY0J1aWxkKGJ1aWxkKToKLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBidWlsZC5pbml0aWFsaXplX29wdGlvbnMoc2VsZikKLSAgICAgICAgc2VsZi5idWlsZF9odG1sID0gTm9uZQotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuZG93bmxvYWQgPSAxCi0gICAgICAgIHNlbGYuZG9jX3ZlcnNpb24gPSBNSU5PUl9WRVJTSU9OICMgT25seSBuZWVkZWQgaWYgZG93bmxvYWQgaXMgdHJ1ZQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmZpbmFsaXplX29wdGlvbnMoc2VsZikKLSAgICAgICAgaWYgc2VsZi5idWlsZF9odG1sIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnaHRtbCcpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfZGVzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgJ1B5dGhvbkRvY3VtZW50YXRpb24nKQotCi0gICAgZGVmIHNwYXduKHNlbGYsICphcmdzKToKLSAgICAgICAgc3Bhd24oYXJncywgMSwgIHNlbGYudmVyYm9zZSwgc2VsZi5kcnlfcnVuKQotCi0gICAgZGVmIGRvd25sb2FkRG9jcyhzZWxmKToKLSAgICAgICAgd29ya2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgICMgWFhYIE5vdGU6IHRoZSBuZXh0IHN0cmluZ3MgbWF5IGNoYW5nZSBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbgotICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24vZG9jLyVzL2h0bWwtJXMudGFyLmJ6MicgJSBcCi0gICAgICAgICAgICAgICAgKHNlbGYuZG9jX3ZlcnNpb24sc2VsZi5kb2NfdmVyc2lvbikKLSAgICAgICAgdGFyZmlsZSA9ICdodG1sLSVzLnRhci5iejInICUgc2VsZi5kb2NfdmVyc2lvbgotICAgICAgICBkaXJuYW1lID0gJ1B5dGhvbi1Eb2NzLSVzJyAlIHNlbGYuZG9jX3ZlcnNpb24KLQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAnJXM6IGFscmVhZHkgZXhpc3RzLCBwbGVhc2UgcmVtb3ZlIGFuZCB0cnkgYWdhaW4nICUgc2VsZi5idWlsZF9odG1sCi0gICAgICAgIG9zLmNoZGlyKHNlbGYuYnVpbGRfYmFzZSkKLSAgICAgICAgc2VsZi5zcGF3bignY3VybCcsJy1PJywgdXJsKQotICAgICAgICBzZWxmLnNwYXduKCd0YXInLCAnLXhqZicsIHRhcmZpbGUpCi0gICAgICAgIG9zLnJlbmFtZShkaXJuYW1lLCAnaHRtbCcpCi0gICAgICAgIG9zLmNoZGlyKHdvcmtkaXIpCi0jIyAgICAgICAgcHJpbnQgIioqIFBsZWFzZSB1bnBhY2sgJXMiICUgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgdGFyZmlsZSkKLSMjICAgICAgICBwcmludCAiKiogVW5wYWNrIHRoZSBmaWxlcyBpbnRvICVzIiAlIHNlbGYuYnVpbGRfaHRtbAotIyMgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIllvdSBuZWVkIHRvIHVucGFjayB0aGUgZG9jcyBtYW51YWxseSIKLQotICAgIGRlZiBidWlsZERvY3NGcm9tU291cmNlKHNlbGYpOgotICAgICAgICBzcmNkaXIgPSAnLi4vLi4vLi4nCi0gICAgICAgIGRvY2RpciA9IG9zLnBhdGguam9pbihzcmNkaXIsICdEb2MnKQotICAgICAgICBodG1sZGlyID0gb3MucGF0aC5qb2luKGRvY2RpciwgJ2h0bWwnKQotICAgICAgICBzcGF3bigoJ21ha2UnLCctLWRpcmVjdG9yeScsIGRvY2RpciwgJ2h0bWwnKSwgMSwgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgY29weV90cmVlKGh0bWxkaXIsIHNlbGYuYnVpbGRfaHRtbCkKLQotICAgIGRlZiBlbnN1cmVIdG1sKHNlbGYpOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIGlmIHNlbGYuZG93bmxvYWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kb3dubG9hZERvY3MoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRG9jc0Zyb21Tb3VyY2UoKQotCi0gICAgZGVmIGhhY2tJbmRleChzZWxmKToKLSAgICAgICAgaW5kX2h0bWwgPSAnaW5kZXguaHRtbCcKLSAgICAgICAgI3ByaW50ICdzZWxmLmJ1aWxkX2Rlc3QgPScsIHNlbGYuYnVpbGRfZGVzdAotICAgICAgICBoYWNrZWRJbmRleCA9IGZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwgaW5kX2h0bWwpLCd3JykKLSAgICAgICAgb3JpZ0luZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLGluZF9odG1sKSkKLSAgICAgICAgciA9IHJlLmNvbXBpbGUoJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Lio8L3N0eWxlPicsIHJlLkRPVEFMTCkKLSAgICAgICAgaGFja2VkSW5kZXgud3JpdGUoci5zdWIoJzxNRVRBIE5BTUU9IkFwcGxlVGl0bGUiIENPTlRFTlQ9IlB5dGhvbiBEb2N1bWVudGF0aW9uIj4nLG9yaWdJbmRleC5yZWFkKCkpKQotCi0gICAgZGVmIGhhY2tGaWxlKHNlbGYsZCxmKToKLSAgICAgICAgb3JpZ1BhdGggPSBvcy5wYXRoLmpvaW4oZCxmKQotICAgICAgICBhc3NlcnQob3JpZ1BhdGhbOmxlbihzZWxmLmJ1aWxkX2h0bWwpXSA9PSBzZWxmLmJ1aWxkX2h0bWwpCi0gICAgICAgIG91dFBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBkW2xlbihzZWxmLmJ1aWxkX2h0bWwpKzE6XSwgZikKLSAgICAgICAgKG5hbWUsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KGYpCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3JpZ1BhdGgpOgotICAgICAgICAgICAgc2VsZi5ta3BhdGgob3V0UGF0aCkKLSAgICAgICAgZWxpZiBleHQgPT0gJy5odG1sJzoKLSAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZTogcHJpbnQgJ2hhY2tpbmcgJXMgdG8gJXMnICUgKG9yaWdQYXRoLG91dFBhdGgpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLnBhdGgud2FsayhzZWxmLmJ1aWxkX2h0bWwsIHNlbGYudmlzaXQsIE5vbmUpCi0KLSAgICBkZWYgdmlzaXQoc2VsZiwgZHVtbXksIGRpcm5hbWUsIGZpbGVuYW1lcyk6Ci0gICAgICAgIGZvciBmIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgIHNlbGYuaGFja0ZpbGUoZGlybmFtZSwgZikKLQotICAgIGRlZiBtYWtlSGVscEluZGV4KHNlbGYpOgotICAgICAgICBhcHAgPSAnL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcCcKLSAgICAgICAgc2VsZi5zcGF3bignb3BlbicsICctYScsIGFwcCAsIHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgcHJpbnQgIlBsZWFzZSB3YWl0IHVudGlsIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBmaW5pc2hlcyBiZWZvcmUgaW5zdGFsbGluZyIKLQotICAgIGRlZiBtYWtlSGVscEluZGV4KHNlbGYpOgotICAgICAgICBhcHAgPSBIZWxwSW5kZXhpbmdUb29sLkhlbHBJbmRleGluZ1Rvb2woc3RhcnQ9MSkKLSAgICAgICAgYXBwLm9wZW4oQ2FyYm9uLkZpbGUuRlNTcGVjKHNlbGYuYnVpbGRfZGVzdCkpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhaXRpbmcgZm9yIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBzdGFydC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBub3QgaWRsZTogYnJlYWsKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIi4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIldhaXRpbmcgZm9yIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2guLi4iKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgIyBUaGlzIGlzIGJhZCBkZXNpZ24gaW4gdGhlIHN1aXRlIGdlbmVyYXRpb24gY29kZSEKLSAgICAgICAgICAgIGlkbGUgPSBhcHAuX2dldChIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5fUHJvcF9pZGxlU3RhdHVzKCkpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQotICAgICAgICAgICAgaWYgaWRsZTogYnJlYWsKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIi4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCi0KLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfYmFzZSkKLSAgICAgICAgc2VsZi5lbnN1cmVIdG1sKCkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgXAotICAgICAgICAgICAgIkNhbid0IGZpbmQgc291cmNlIGZvbGRlciBmb3IgZG9jdW1lbnRhdGlvbi4iCi0gICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgaWYgZGVwX3V0aWwubmV3ZXIob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfaHRtbCwnaW5kZXguaHRtbCcpLCBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCdpbmRleC5odG1sJykpOgotICAgICAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICAgICAgc2VsZi5oYWNrSHRtbCgpCi0gICAgICAgICAgICBzZWxmLmhhY2tJbmRleCgpCi0gICAgICAgICAgICBzZWxmLm1ha2VIZWxwSW5kZXgoKQotCi1jbGFzcyBBSFZEb2NJbnN0YWxsKENvbW1hbmQpOgotICAgIGRlc2NyaXB0aW9uID0gImluc3RhbGwgQXBwbGUgSGVscCBWaWV3ZXIgaHRtbCBmaWxlcyIKLSAgICB1c2VyX29wdGlvbnMgPSBbKCdpbnN0YWxsLWRvYz0nLCAnZCcsCi0gICAgICAgICAgICAnZGlyZWN0b3J5IHRvIGluc3RhbGwgSFRNTCB0cmVlJyksCi0gICAgICAgICAgICAgKCdyb290PScsIE5vbmUsCi0gICAgICAgICAgICAgImluc3RhbGwgZXZlcnl0aGluZyByZWxhdGl2ZSB0byB0aGlzIGFsdGVybmF0ZSByb290IGRpcmVjdG9yeSIpLAotICAgICAgICAgICAgXQotCi0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gTm9uZQotICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gTm9uZQotICAgICAgICBzZWxmLnByZWZpeCA9IE5vbmUKLSAgICAgICAgc2VsZi5yb290ID0gTm9uZQotCi0gICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuc2V0X3VuZGVmaW5lZF9vcHRpb25zKCdpbnN0YWxsJywKLSAgICAgICAgICAgICAgICAoJ3ByZWZpeCcsICdwcmVmaXgnKSwKLSAgICAgICAgICAgICAgICAoJ3Jvb3QnLCAncm9vdCcpKQotIyAgICAgICAgICAgICAgIGltcG9ydCBwZGIgOyBwZGIuc2V0X3RyYWNlKCkKLSAgICAgICAgYnVpbGRfY21kID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gYnVpbGRfY21kLmJ1aWxkX2Rlc3QKLSAgICAgICAgaWYgc2VsZi5pbnN0YWxsX2RvYyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5pbnN0YWxsX2RvYyA9IG9zLnBhdGguam9pbihzZWxmLnByZWZpeCwgREVTVERJUikKLSAgICAgICAgcHJpbnQgJ0lOU1RBTEwnLCBzZWxmLmJ1aWxkX2Rlc3QsICctPicsIHNlbGYuaW5zdGFsbF9kb2MKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50ICJSdW5uaW5nIEluc3RhbGxlciIKLSAgICAgICAgaW5zdGxvYyA9IHNlbGYuaW5zdGFsbF9kb2MKLSAgICAgICAgaWYgc2VsZi5yb290OgotICAgICAgICAgICAgaW5zdGxvYyA9IGNoYW5nZV9yb290KHNlbGYucm9vdCwgaW5zdGxvYykKLSAgICAgICAgc2VsZi5ta3BhdGgoaW5zdGxvYykKLSAgICAgICAgY29weV90cmVlKHNlbGYuYnVpbGRfZGVzdCwgaW5zdGxvYykKLSAgICAgICAgcHJpbnQgIkluc3RhbGxhdGlvbiBjb21wbGV0ZSIKLQotZGVmIG11bmdlVmVyc2lvbihpbmZpbGUsIG91dGZpbGUpOgotICAgIGkgPSBmaWxlKGluZmlsZSwncicpCi0gICAgbyA9IGZpbGUob3V0ZmlsZSwndycpCi0gICAgby53cml0ZShyZS5zdWIoJ1wkXChWRVJTSU9OXCknLHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignVkVSU0lPTicpLGkucmVhZCgpKSkKLSAgICBpLmNsb3NlKCkKLSAgICBvLmNsb3NlKCkKLQotZGVmIG1haW4oKToKLSAgICAjIHR1cm4gb2ZmIHdhcm5pbmdzIHdoZW4gZGVwcmVjYXRlZCBtb2R1bGVzIGFyZSBpbXBvcnRlZAotIyMgICAgICBpbXBvcnQgd2FybmluZ3MKLSMjICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsY2F0ZWdvcnk9RGVwcmVjYXRpb25XYXJuaW5nKQotICAgIHNldHVwKG5hbWUgPSAnRG9jdW1lbnRhdGlvbicsCi0gICAgICAgICAgICB2ZXJzaW9uID0gJyVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLAotICAgICAgICAgICAgY21kY2xhc3MgPSB7J2luc3RhbGxfZGF0YSc6QUhWRG9jSW5zdGFsbCwgJ2J1aWxkJzpEb2NCdWlsZH0sCi0gICAgICAgICAgICBkYXRhX2ZpbGVzID0gWydkdW1teSddLAotICAgICAgICAgICAgKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL2ZpeGFwcGxlcHl0aG9uMjMucHkgYi9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQppbmRleCA2YmE1NDAxLi4wM2M3OTliIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQorKysgYi9NYWMvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24KICIiImZpeGFwcGxlcHl0aG9uMjMgLSBGaXggQXBwbGUtaW5zdGFsbGVkIFB5dGhvbiAyLjMgKG9uIE1hYyBPUyBYIDEwLjMpCiAKIFB5dGhvbiAyLjMgKGFuZCAyLjMuWCBmb3IgWDw1KSBoYXZlIHRoZSBwcm9ibGVtIHRoYXQgYnVpbGRpbmcgYW4gZXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvcHl0aG9udy5jIGIvTWFjL1Rvb2xzL3B5dGhvbncuYwppbmRleCBlNzBhNzZmLi4wOGUwNjliIDEwMDY0NAotLS0gYS9NYWMvVG9vbHMvcHl0aG9udy5jCisrKyBiL01hYy9Ub29scy9weXRob253LmMKQEAgLTMsMTUgKzMsMTc2IEBACiAgKiBhcHBsaWNhdGlvbiBidW5kbGUgaW5zaWRlIHRoZSBQeXRob24gZnJhbWV3b3JrLiBUaGlzIGlzIG5lZWRlZCB0byBydW4KICAqIEdVSSBjb2RlOiBzb21lIEdVSSBBUEkncyBkb24ndCB3b3JrIHVubGVzcyB0aGUgcHJvZ3JhbSBpcyBpbnNpZGUgYW4KICAqIGFwcGxpY2F0aW9uIGJ1bmRsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gdXNlcyBwb3NpeF9zcGF3biByYXRoZXIgdGhhbiBwbGFpbiBleGVjdiBiZWNhdXNlIHdlIG5lZWQKKyAqIHNsaWdodGx5IG1vcmUgY29udHJvbCBvdmVyIGhvdyB0aGUgInJlYWwiIGludGVycHJldGVyIGlzIGV4ZWN1dGVkLgorICoKKyAqIE9uIE9TWCAxMC40IChhbmQgZWFybGllcikgdGhpcyBmYWxscyBiYWNrIHRvIHVzaW5nIGV4ZWMgYmVjYXVzZSB0aGUKKyAqIHBvc2l4X3NwYXdudiBmdW5jdGlvbnMgYXJlbid0IGF2YWlsYWJsZSB0aGVyZS4KICAqLworI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfaW5pdAorI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZl9ucAorI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyNwcmFnbWEgd2Vha19pbXBvcnQgcG9zaXhfc3Bhd24KKworI2luY2x1ZGUgPFB5dGhvbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfU1BBV05fSAorI2luY2x1ZGUgPHNwYXduLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KIAotc3RhdGljIGNoYXIgUHl0aG9uW10gPSBQWVRIT05XRVhFQ1VUQUJMRTsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Ci0JYXJndlswXSA9IFB5dGhvbjsKLQlleGVjdihQeXRob24sIGFyZ3YpOwotCWVycigxLCAiZXhlY3Y6ICVzIiwgUHl0aG9uKTsKLQkvKiBOT1RSRUFDSEVEICovCitleHRlcm4gY2hhcioqIGVudmlyb247CisKKy8qCisgKiBMb2NhdGUgdGhlIHB5dGhvbiBmcmFtZXdvcmsgYnkgbG9va2luZyBmb3IgdGhlCisgKiBsaWJyYXJ5IHRoYXQgY29udGFpbnMgUHlfSW5pdGlhbGl6ZS4KKyAqCisgKiBJbiBhIHJlZ3VsYXIgZnJhbWV3b3JrIHRoZSBzdHJ1Y3R1cmUgaXM6CisgKgorICogICAgUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8yLjcKKyAqICAgICAgICAgICAgICAvUHl0aG9uCisgKiAgICAgICAgICAgICAgL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbgorICoKKyAqIEluIGEgdmlydHVhbGVudiBzdHlsZSBzdHJ1Y3R1cmUgdGhlIGV4cGVjdGVkCisgKiBzdHJ1Y3R1cmUgaXM6CisgKgorICogICAgUk9PVAorICogICAgICAgL2Jpbi9weXRob253CisgKiAgICAgICAvLlB5dGhvbiAgIDwtIHRoZSBkeWxpYgorICogICAgICAgLy5SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24KKyAqCisgKiBOT1RFOiB2aXJ0dWFsZW52J3MgYXJlIG5vdCBhbiBvZmZpY2lhbGx5IHN1cHBvcnRlZAorICogZmVhdHVyZSwgc3VwcG9ydCBmb3IgdGhhdCBzdHJ1Y3R1cmUgaXMgcHJvdmlkZWQgYXMKKyAqIGEgY29udmVuaWVuY2UuCisgKi8KK3N0YXRpYyBjaGFyKiBnZXRfcHl0aG9uX3BhdGgodm9pZCkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIERsX2luZm8gaW5mbzsKKyAgICBjaGFyKiBlbmQ7CisgICAgY2hhciogZ19wYXRoOworCisgICAgaWYgKGRsYWRkcihQeV9Jbml0aWFsaXplLCAmaW5mbykgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBsZW4gPSBzdHJsZW4oaW5mby5kbGlfZm5hbWUpOworCisgICAgZ19wYXRoID0gbWFsbG9jKGxlbis2MCk7CisgICAgaWYgKGdfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0cmNweShnX3BhdGgsIGluZm8uZGxpX2ZuYW1lKTsKKyAgICBlbmQgPSBnX3BhdGggKyBsZW4gLSAxOworICAgIHdoaWxlIChlbmQgIT0gZ19wYXRoICYmICplbmQgIT0gJy8nKSB7CisgICAgICAgIGVuZCAtLTsKKyAgICB9CisgICAgZW5kKys7CisgICAgaWYgKCplbmQgPT0gJy4nKSB7CisgICAgICAgIGVuZCsrOworICAgIH0KKyAgICBzdHJjcHkoZW5kLCAiUmVzb3VyY2VzL1B5dGhvbi5hcHAvQ29udGVudHMvTWFjT1MvIiBQWVRIT05GUkFNRVdPUkspOworCisgICAgcmV0dXJuIGdfcGF0aDsKK30KKworI2lmZGVmIEhBVkVfU1BBV05fSAorc3RhdGljIHZvaWQKK3NldHVwX3NwYXduYXR0cihwb3NpeF9zcGF3bmF0dHJfdCogc3Bhd25hdHRyKQoreworICAgIHNpemVfdCBvY291bnQ7CisgICAgc2l6ZV90IGNvdW50OworICAgIGNwdV90eXBlX3QgY3B1X3R5cGVzWzFdOworICAgIHNob3J0IGZsYWdzID0gMDsKKyNpZmRlZiBfX0xQNjRfXworICAgIGludCAgIGNoOworI2VuZGlmCisKKyAgICBpZiAoKGVycm5vID0gcG9zaXhfc3Bhd25hdHRyX2luaXQoc3Bhd25hdHRyKSkgIT0gMCkgeworICAgICAgICBlcnIoMiwgInBvc2l4X3NwYXduYXR0cl9pbnQiKTsKKyAgICAgICAgLyogTk9UUkVBQ0hURUQgKi8KKyAgICB9CisKKyAgICBjb3VudCA9IDE7CisKKyAgICAvKiBSdW4gdGhlIHJlYWwgcHl0aG9uIGV4ZWN1dGFibGUgdXNpbmcgdGhlIHNhbWUgYXJjaGl0dXJlIGFzIHRoaXMKKyAgICAgKiBleGVjdXRhYmxlLCB0aGlzIGFsbG93cyB1c2VycyB0byBjb250cm9sZSB0aGUgYXJjaGl0ZWN0dXJlIHVzaW5nCisgICAgICogImFyY2ggLXBwYyBweXRob24iCisgICAgICovCisKKyNpZiBkZWZpbmVkKF9fcHBjNjRfXykKKyAgICBjcHVfdHlwZXNbMF0gPSBDUFVfVFlQRV9QT1dFUlBDNjQ7CisKKyNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKKyAgICBjcHVfdHlwZXNbMF0gPSBDUFVfVFlQRV9YODZfNjQ7CisKKyNlbGlmIGRlZmluZWQoX19wcGNfXykKKyAgICBjcHVfdHlwZXNbMF0gPSBDUFVfVFlQRV9QT1dFUlBDOworI2VsaWYgZGVmaW5lZChfX2kzODZfXykKKyAgICBjcHVfdHlwZXNbMF0gPSBDUFVfVFlQRV9YODY7CisjZWxzZQorIyAgICAgICBlcnJvciAiVW5rbm93biBDUFUiCisjZW5kaWYKKworICAgIGlmIChwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZl9ucChzcGF3bmF0dHIsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV90eXBlcywgJm9jb3VudCkgPT0gLTEpIHsKKyAgICAgICAgZXJyKDEsICJwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZiIpOworICAgICAgICAvKiBOT1RSRUFDSFRFRCAqLworICAgIH0KKyAgICBpZiAoY291bnQgIT0gb2NvdW50KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicG9zaXhfc3Bhd25hdHRyX3NldGJpbnByZWYgZmFpbGVkIHRvIGNvcHlcbiIpOworICAgICAgICBleGl0KDEpOworICAgICAgICAvKiBOT1RSRUFDSFRFRCAqLworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBTZXQgZmxhZyB0aGF0IGNhdXNlcyBwb3NpeF9zcGF3biB0byBiZWhhdmUgbGlrZSBleGVjdgorICAgICAqLworICAgIGZsYWdzIHw9IFBPU0lYX1NQQVdOX1NFVEVYRUM7CisgICAgaWYgKChlcnJubyA9IHBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyhzcGF3bmF0dHIsIGZsYWdzKSkgIT0gMCkgeworICAgICAgICBlcnIoMSwgInBvc2l4X3NwYXduYXR0cl9zZXRmbGFncyIpOworICAgICAgICAvKiBOT1RSRUFDSFRFRCAqLworICAgIH0KK30KKyNlbmRpZgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICAgY2hhciogZXhlY19wYXRoID0gZ2V0X3B5dGhvbl9wYXRoKCk7CisKKyAgICAvKgorICAgICAqIExldCBhcmd2WzBdIHJlZmVyIHRvIHRoZSBuZXcgaW50ZXJwcmV0ZXIuIFRoaXMgaXMgbmVlZGVkIHRvCisgICAgICogZ2V0IHRoZSBlZmZlY3Qgd2Ugd2FudCBvbiBPU1ggMTAuNSBvciBlYXJsaWVyLiBUaGF0IGlzLCB3aXRob3V0CisgICAgICogY2hhbmdpbmcgYXJndlswXSB0aGUgcmVhbCBpbnRlcnByZXRlciB3b24ndCBoYXZlIGFjY2VzcyB0bworICAgICAqIHRoZSBXaW5kb3cgU2VydmVyLgorICAgICAqLworICAgIGFyZ3ZbMF0gPSBleGVjX3BhdGg7CisKKyNpZmRlZiBIQVZFX1NQQVdOX0gKKworICAgIC8qIFdlJ3JlIHdlYWstbGlua2luZyB0byBwb3NpeC1zcGF3bnYgdG8gZW5zdXJlIHRoYXQKKyAgICAgKiBhbiBleGVjdXRhYmxlIGJ1aWxkIG9uIDEwLjUgY2FuIHdvcmsgb24gMTAuNC4KKyAgICAgKi8KKyAgICBpZiAocG9zaXhfc3Bhd24gIT0gTlVMTCkgeworICAgICAgICBwb3NpeF9zcGF3bmF0dHJfdCBzcGF3bmF0dHIgPSBOVUxMOworCisKKyAgICAgICAgc2V0dXBfc3Bhd25hdHRyKCZzcGF3bmF0dHIpOworICAgICAgICBwb3NpeF9zcGF3bihOVUxMLCBleGVjX3BhdGgsIE5VTEwsCisgICAgICAgICAgICAmc3Bhd25hdHRyLCBhcmd2LCBlbnZpcm9uKTsKKyAgICAgICAgZXJyKDEsICJwb3NpeF9zcGF3bjogJXMiLCBleGVjX3BhdGgpOworICAgIH0KKyNlbmRpZgorICAgIGV4ZWN2ZShleGVjX3BhdGgsIGFyZ3YsIGVudmlyb24pOworICAgIGVycigxLCAiZXhlY3ZlOiAlcyIsIGFyZ3ZbMF0pOworICAgIC8qIE5PVFJFQUNIRUQgKi8KIH0KZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL0J1aWxkQXBwbGV0LnB5IGIvTWFjL3NjcmlwdHMvQnVpbGRBcHBsZXQucHkKaW5kZXggZWVlYjgyYi4uYTc2ZWQ5MCAxMDA2NDQKLS0tIGEvTWFjL3NjcmlwdHMvQnVpbGRBcHBsZXQucHkKKysrIGIvTWFjL3NjcmlwdHMvQnVpbGRBcHBsZXQucHkKQEAgLTExMiw5ICsxMTIsNiBAQAogICAgICAgICAgICAgICAgIHVzYWdlKCkKICAgICAgICAgICAgIGVsaWYgb3B0IGluICgnLWQnLCAnLS1kZXN0cm9vdCcpOgogICAgICAgICAgICAgICAgIGRlc3Ryb290ID0gYXJnCi0gICAgICAgICMgT24gT1M5IGFsd2F5cyBiZSB2ZXJib3NlCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJyBhbmQgbm90IHZlcmJvc2U6Ci0gICAgICAgICAgICB2ZXJib3NlID0gJ2RlZmF1bHQnCiAgICAgICAgICMgTG9vcCBvdmVyIGFsbCBmaWxlcyB0byBiZSBwcm9jZXNzZWQKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CiAgICAgICAgICAgICBjciwgdHAgPSBNYWNPUy5HZXRDcmVhdG9yQW5kVHlwZShmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL01hYy9zY3JpcHRzL3phcHB5Y2ZpbGVzLnB5IGIvTWFjL3NjcmlwdHMvemFwcHljZmlsZXMucHkKaW5kZXggYTgxOTNjMS4uNmQzNTc0OCAxMDA2NDQKLS0tIGEvTWFjL3NjcmlwdHMvemFwcHljZmlsZXMucHkKKysrIGIvTWFjL3NjcmlwdHMvemFwcHljZmlsZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiJSZWN1cnNpdmVseSB6YXAgYWxsIC5weWMgYW5kIC5weW8gZmlsZXMiIiIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtOSwxNSArOSw4IEBACiAKIGRlZiBtYWluKCk6CiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIGltcG9ydCBFYXN5RGlhbG9ncwotICAgICAgICAgICAgZGlyID0gRWFzeURpYWxvZ3MuQXNrRm9sZGVyKG1lc3NhZ2U9J0RpcmVjdG9yeSB0byB6YXAgcHljIGZpbGVzIGluJykKLSAgICAgICAgICAgIGlmIG5vdCBkaXI6Ci0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKLSAgICAgICAgICAgIHphcHB5YyhkaXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAnVXNhZ2U6IHphcHB5YyBkaXIgLi4uJwotICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcHJpbnQgJ1VzYWdlOiB6YXBweWMgZGlyIC4uLicKKyAgICAgICAgc3lzLmV4aXQoMSkKICAgICBmb3IgZGlyIGluIHN5cy5hcmd2WzE6XToKICAgICAgICAgemFwcHljKGRpcikKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCmluZGV4IDAzMjlkNjcuLjY5OThlZWUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnByZS5pbgorKysgYi9NYWtlZmlsZS5wcmUuaW4KQEAgLTM2LDYgKzM2LDggQEAKIFJBTkxJQj0JCUBSQU5MSUJACiBTVk5WRVJTSU9OPQlAU1ZOVkVSU0lPTkAKIAorR05VTEQ9ICAgICAgICAgIEBHTlVMREAKKwogIyBTaGVsbCB1c2VkIGJ5IG1ha2UgKHNvbWUgdmVyc2lvbnMgZGVmYXVsdCB0byB0aGUgbG9naW4gc2hlbGwsIHdoaWNoIGlzIGJhZCkKIFNIRUxMPQkJL2Jpbi9zaAogCkBAIC02Nyw2ICs2OSw3IEBACiBTR0lfQUJJPQlAU0dJX0FCSUAKIENDU0hBUkVEPQlAQ0NTSEFSRURACiBMSU5LRk9SU0hBUkVEPQlATElOS0ZPUlNIQVJFREAKK0FSRkxBR1M9CUBBUkZMQUdTQAogIyBFeHRyYSBDIGZsYWdzIGFkZGVkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0IGZpbGVzLgogQ0ZMQUdTRk9SU0hBUkVEPUBDRkxBR1NGT1JTSEFSRURACiAjIEMgZmxhZ3MgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGludGVycHJldGVyIG9iamVjdCBmaWxlcwpAQCAtMTAyLDggKzEwNSw5IEBACiAKICMgU3ltYm9scyB1c2VkIGZvciB1c2luZyBzaGFyZWQgbGlicmFyaWVzCiBTTz0JCUBTT0AKLUxEU0hBUkVEPQlATERTSEFSRURACi1CTERTSEFSRUQ9CUBCTERTSEFSRURACitMRFNIQVJFRD0JQExEU0hBUkVEQCAkKExERkxBR1MpCitCTERTSEFSRUQ9CUBCTERTSEFSRURAICQoTERGTEFHUykKK0xEQ1hYU0hBUkVEPQlATERDWFhTSEFSRURACiBERVNUU0hBUkVEPQkkKEJJTkxJQkRFU1QpL2xpYi1keW5sb2FkCiAKICMgRXhlY3V0YWJsZSBzdWZmaXggKC5leGUgb24gV2luZG93cyBhbmQgTWFjIE9TIFgpCkBAIC0yMDIsNiArMjA2LDggQEAKIEdSQU1NQVJfSU5QVVQ9CSQoc3JjZGlyKS9HcmFtbWFyL0dyYW1tYXIKIAogCitMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBQYXJzZXIKIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQpAQCAtMjI0LDYgKzIzMCw3IEBACiBQR09CSlM9CQlcCiAJCU9iamVjdHMvb2JtYWxsb2MubyBcCiAJCVB5dGhvbi9teXNucHJpbnRmLm8gXAorCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUGFyc2VyL3Rva2VuaXplcl9wZ2VuLm8gXAogCQlQYXJzZXIvcHJpbnRncmFtbWFyLm8gXAogCQlQYXJzZXIvcGdlbm1haW4ubwpAQCAtMjY0LDcgKzI3MSw2IEBACiAJCVB5dGhvbi9nZXRhcmdzLm8gXAogCQlQeXRob24vZ2V0Y29tcGlsZXIubyBcCiAJCVB5dGhvbi9nZXRjb3B5cmlnaHQubyBcCi0JCVB5dGhvbi9nZXRtdGltZS5vIFwKIAkJUHl0aG9uL2dldHBsYXRmb3JtLm8gXAogCQlQeXRob24vZ2V0dmVyc2lvbi5vIFwKIAkJUHl0aG9uL2dyYW1pbml0Lm8gXApAQCAtMjc2LDYgKzI4Miw3IEBACiAJCVB5dGhvbi9teXNucHJpbnRmLm8gXAogCQlQeXRob24vcGVlcGhvbGUubyBcCiAJCVB5dGhvbi9weWFyZW5hLm8gXAorCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUHl0aG9uL3B5ZnBlLm8gXAogCQlQeXRob24vcHltYXRoLm8gXAogCQlQeXRob24vcHlzdGF0ZS5vIFwKQEAgLTI4Nyw2ICsyOTQsNyBAQAogCQlQeXRob24vZ2V0b3B0Lm8gXAogCQlQeXRob24vcHlzdHJjbXAubyBcCiAJCVB5dGhvbi9weXN0cnRvZC5vIFwKKwkJUHl0aG9uL2R0b2EubyBcCiAJCVB5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5vIFwKIAkJUHl0aG9uL2Zvcm1hdHRlcl9zdHJpbmcubyBcCiAJCVB5dGhvbi8kKERZTkxPQURGSUxFKSBcCkBAIC0zMDMsNiArMzExLDcgQEAKIAkJT2JqZWN0cy9idWZmZXJvYmplY3QubyBcCiAJCU9iamVjdHMvYnl0ZXNfbWV0aG9kcy5vIFwKIAkJT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QubyBcCisJCU9iamVjdHMvY2Fwc3VsZS5vIFwKIAkJT2JqZWN0cy9jZWxsb2JqZWN0Lm8gXAogCQlPYmplY3RzL2NsYXNzb2JqZWN0Lm8gXAogCQlPYmplY3RzL2NvYmplY3QubyBcCkBAIC0zMjEsNiArMzMwLDcgQEAKIAkJT2JqZWN0cy9saXN0b2JqZWN0Lm8gXAogCQlPYmplY3RzL2xvbmdvYmplY3QubyBcCiAJCU9iamVjdHMvZGljdG9iamVjdC5vIFwKKwkJT2JqZWN0cy9tZW1vcnlvYmplY3QubyBcCiAJCU9iamVjdHMvbWV0aG9kb2JqZWN0Lm8gXAogCQlPYmplY3RzL21vZHVsZW9iamVjdC5vIFwKIAkJT2JqZWN0cy9vYmplY3QubyBcCkBAIC0zNTIsNyArMzYyLDcgQEAKIAogIyBEZWZhdWx0IHRhcmdldAogYWxsOgkJYnVpbGRfYWxsCi1idWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcworYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MKIAogIyBDb21waWxlIGEgYmluYXJ5IHdpdGggZ2NjIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbi4KIHByb2ZpbGUtb3B0OgpAQCAtMzg4LDM0ICszOTgsMzQgQEAKIAkJCSQoQkxETElCUkFSWSkgJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpCiAKIHBsYXRmb3JtOiAkKEJVSUxEUFlUSE9OKQotCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1FIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQorCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1FIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50IGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdJyA+cGxhdGZvcm0KIAogCiAjIEJ1aWxkIHRoZSBzaGFyZWQgbW9kdWxlcwogc2hhcmVkbW9kczogJChCVUlMRFBZVEhPTikKIAlAY2FzZSAkJE1BS0VGTEFHUyBpbiBcCi0JKnMqKSAkKFJVTlNIQVJFRCkgQ0M9JyQoQ0MpJyBMRFNIQVJFRD0nJChCTERTSEFSRUQpJyBMREZMQUdTPSckKExERkxBR1MpJyBPUFQ9JyQoT1BUKScgLi8kKEJVSUxEUFlUSE9OKSAtRSAkKHNyY2Rpcikvc2V0dXAucHkgLXEgYnVpbGQ7OyBcCi0JKikgJChSVU5TSEFSRUQpIENDPSckKENDKScgTERTSEFSRUQ9JyQoQkxEU0hBUkVEKScgTERGTEFHUz0nJChMREZMQUdTKScgT1BUPSckKE9QVCknIC4vJChCVUlMRFBZVEhPTikgLUUgJChzcmNkaXIpL3NldHVwLnB5IGJ1aWxkOzsgXAorCSpzKikgJChSVU5TSEFSRUQpIENDPSckKENDKScgTERTSEFSRUQ9JyQoQkxEU0hBUkVEKScgT1BUPSckKE9QVCknIC4vJChCVUlMRFBZVEhPTikgLUUgJChzcmNkaXIpL3NldHVwLnB5IC1xIGJ1aWxkOzsgXAorCSopICQoUlVOU0hBUkVEKSBDQz0nJChDQyknIExEU0hBUkVEPSckKEJMRFNIQVJFRCknIE9QVD0nJChPUFQpJyAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSBidWlsZDs7IFwKIAllc2FjCiAKICMgQnVpbGQgc3RhdGljIGxpYnJhcnkKICMgYXZvaWQgbG9uZyBjb21tYW5kIGxpbmVzLCBzYW1lIGFzIExJQlJBUllfT0JKUwogJChMSUJSQVJZKTogJChMSUJSQVJZX09CSlMpCiAJLXJtIC1mICRACi0JJChBUikgY3IgJEAgTW9kdWxlcy9nZXRidWlsZGluZm8ubwotCSQoQVIpIGNyICRAICQoUEFSU0VSX09CSlMpCi0JJChBUikgY3IgJEAgJChPQkpFQ1RfT0JKUykKLQkkKEFSKSBjciAkQCAkKFBZVEhPTl9PQkpTKQotCSQoQVIpIGNyICRAICQoTU9EVUxFX09CSlMpICQoU0lHTkFMX09CSlMpCi0JJChBUikgY3IgJEAgJChNT0RPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgTW9kdWxlcy9nZXRidWlsZGluZm8ubworCSQoQVIpICQoQVJGTEFHUykgJEAgJChQQVJTRVJfT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKRUNUX09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKFBZVEhPTl9PQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChNT0RVTEVfT0JKUykgJChTSUdOQUxfT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoTU9ET0JKUykKIAkkKFJBTkxJQikgJEAKIAogbGlicHl0aG9uJChWRVJTSU9OKS5zbzogJChMSUJSQVJZX09CSlMpCiAJaWYgdGVzdCAkKElOU1RTT05BTUUpICE9ICQoTERMSUJSQVJZKTsgdGhlbiBcCi0JCSQoTERTSEFSRUQpICQoTERGTEFHUykgLVdsLC1oJChJTlNUU09OQU1FKSAtbyAkKElOU1RTT05BTUUpICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpOyBcCisJCSQoQkxEU0hBUkVEKSAtV2wsLWgkKElOU1RTT05BTUUpIC1vICQoSU5TVFNPTkFNRSkgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKIAkJJChMTikgLWYgJChJTlNUU09OQU1FKSAkQDsgXAogCWVsc2UgXAotCQkkKExEU0hBUkVEKSAkKExERkxBR1MpIC1vICRAICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpOyBcCisJCSQoQkxEU0hBUkVEKSAtbyAkQCAkKExJQlJBUllfT0JKUykgJChNT0RMSUJTKSAkKFNITElCUykgJChMSUJDKSAkKExJQk0pICQoTERMQVNUKTsgXAogCWZpCiAKIGxpYnB5dGhvbiQoVkVSU0lPTikuZHlsaWI6ICQoTElCUkFSWV9PQkpTKQpAQCAtNDIzLDcgKzQzMywxOCBAQAogCQkgCiAKIGxpYnB5dGhvbiQoVkVSU0lPTikuc2w6ICQoTElCUkFSWV9PQkpTKQotCSQoTERTSEFSRUQpICQoTERGTEFHUykgLW8gJEAgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCkKKwkkKExEU0hBUkVEKSAtbyAkQCAkKExJQlJBUllfT0JKUykgJChNT0RMSUJTKSAkKFNITElCUykgJChMSUJDKSAkKExJQk0pICQoTERMQVNUKQorCisjIENvcHkgdXAgdGhlIGdkYiBweXRob24gaG9va3MgaW50byBhIHBvc2l0aW9uIHdoZXJlIHRoZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkKKyMgbG9hZGVkIGJ5IGdkYiBkdXJpbmcgTGliL3Rlc3QvdGVzdF9nZGIucHkKKyMKKyMgRGlzdHJpYnV0b3JzIGFyZSBsaWtlbHkgdG8gd2FudCB0byBpbnN0YWxsIHRoaXMgc29tZXdoZXJlIGVsc2UgZS5nLiByZWxhdGl2ZQorIyB0byB0aGUgc3RyaXBwZWQgRFdBUkYgZGF0YSBmb3IgdGhlIHNoYXJlZCBsaWJyYXJ5LgorZ2RiaG9va3M6ICQoQlVJTERQWVRIT04pLWdkYi5weQorCitTUkNfR0RCX0hPT0tTPSQoc3JjZGlyKS9Ub29scy9nZGIvbGlicHl0aG9uLnB5CiskKEJVSUxEUFlUSE9OKS1nZGIucHk6ICQoU1JDX0dEQl9IT09LUykKKwkkKElOU1RBTExfREFUQSkgJChTUkNfR0RCX0hPT0tTKSAkKEJVSUxEUFlUSE9OKS1nZGIucHkKIAogIyBUaGlzIHJ1bGUgaXMgaGVyZSBmb3IgT1BFTlNURVAvUmhhcHNvZHkvTWFjT1NYLiBJdCBidWlsZHMgYSB0ZW1wb3JhcnkKICMgbWluaW1hbCBmcmFtZXdvcmsgKG5vdCBpbmNsdWRpbmcgdGhlIExpYiBkaXJlY3RvcnkgYW5kIHN1Y2gpIGluIHRoZSBjdXJyZW50CkBAIC00NTcsNyArNDc4LDcgQEAKICMgZm9yIGEgc2hhcmVkIGNvcmUgbGlicmFyeTsgb3RoZXJ3aXNlLCB0aGlzIHJ1bGUgaXMgYSBub29wLgogJChETExMSUJSQVJZKSBsaWJweXRob24kKFZFUlNJT04pLmRsbC5hOiAkKExJQlJBUllfT0JKUykKIAlpZiB0ZXN0IC1uICIkKERMTExJQlJBUlkpIjsgdGhlbiBcCi0JCSQoTERTSEFSRUQpICQoTERGTEFHUykgLVdsLC0tb3V0LWltcGxpYj0kQCAtbyAkKERMTExJQlJBUlkpICReIFwKKwkJJChMRFNIQVJFRCkgLVdsLC0tb3V0LWltcGxpYj0kQCAtbyAkKERMTExJQlJBUlkpICReIFwKIAkJCSQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKTsgXAogCWVsc2UgdHJ1ZTsgXAogCWZpCkBAIC01MTUsOSArNTM2LDEyIEBACiAJJChNQUlOQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYwogCiAKLSQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQyk6ICQoUEdFTikgJChHUkFNTUFSX0lOUFVUKQorIyBVc2UgYSBzdGFtcCBmaWxlIHRvIHByZXZlbnQgbWFrZSAtaiBpbnZva2luZyBwZ2VuIHR3aWNlCiskKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOiBQYXJzZXIvcGdlbi5zdGFtcAorUGFyc2VyL3BnZW4uc3RhbXA6ICQoUEdFTikgJChHUkFNTUFSX0lOUFVUKQogCQktQCQoSU5TVEFMTCkgLWQgSW5jbHVkZQotCQktJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKwkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKwkJLXRvdWNoIFBhcnNlci9wZ2VuLnN0YW1wCiAKICQoUEdFTik6CSQoUEdFTk9CSlMpCiAJCSQoQ0MpICQoT1BUKSAkKExERkxBR1MpICQoUEdFTk9CSlMpICQoTElCUykgLW8gJChQR0VOKQpAQCAtNTM3LDcgKzU2MSw3IEBACiAkKEFTVF9DKTogJChBU1RfQVNETCkgJChBU0RMR0VOX0ZJTEVTKQogCSQoQVNETEdFTikgLWMgJChBU1RfQ19ESVIpICQoQVNUX0FTREwpCiAKLVB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQogCiBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCiAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYwpAQCAtNTU2LDYgKzU4MCw3IEBACiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIFwKQEAgLTYwMiw2ICs2MjcsNyBAQAogCQlJbmNsdWRlL2NvbXBsZXhvYmplY3QuaCBcCiAJCUluY2x1ZGUvZGVzY3JvYmplY3QuaCBcCiAJCUluY2x1ZGUvZGljdG9iamVjdC5oIFwKKwkJSW5jbHVkZS9kdG9hLmggXAogCQlJbmNsdWRlL2VudW1vYmplY3QuaCBcCiAJCUluY2x1ZGUvZXJyY29kZS5oIFwKIAkJSW5jbHVkZS9ldmFsLmggXApAQCAtNjE4LDYgKzY0NCw3IEBACiAJCUluY2x1ZGUvbG9uZ2ludHJlcHIuaCBcCiAJCUluY2x1ZGUvbG9uZ29iamVjdC5oIFwKIAkJSW5jbHVkZS9tYXJzaGFsLmggXAorCQlJbmNsdWRlL21lbW9yeW9iamVjdC5oIFwKIAkJSW5jbHVkZS9tZXRhZ3JhbW1hci5oIFwKIAkJSW5jbHVkZS9tZXRob2RvYmplY3QuaCBcCiAJCUluY2x1ZGUvbW9kc3VwcG9ydC5oIFwKQEAgLTYzMiw2ICs2NTksOCBAQAogCQlJbmNsdWRlL3BnZW4uaCBcCiAJCUluY2x1ZGUvcGdlbmhlYWRlcnMuaCBcCiAJCUluY2x1ZGUvcHlhcmVuYS5oIFwKKwkJSW5jbHVkZS9weWNhcHN1bGUuaCBcCisJCUluY2x1ZGUvcHljdHlwZS5oIFwKIAkJSW5jbHVkZS9weWRlYnVnLmggXAogCQlJbmNsdWRlL3B5ZXJyb3JzLmggXAogCQlJbmNsdWRlL3B5ZnBlLmggXApAQCAtNjcwLDEzICs2OTksMTMgQEAKICMgSW4gdGhlIHBhc3QsIHdlJ3ZlIGhhZCBwcm9ibGVtcyB3aGVyZSBidWdzIGluIHRoZSBtYXJzaGFsbGluZyBvcgogIyBlbHNld2hlcmUgY2F1c2VkIGJ5dGVjb2RlIHJlYWQgZnJvbSAucHljIGZpbGVzIHRvIGJlaGF2ZSBkaWZmZXJlbnRseQogIyB0aGFuIGJ5dGVjb2RlIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tIGEgLnB5IHNvdXJjZSBmaWxlLiAgU29tZXRpbWVzCi0jIHRoZSBieXRlY29kZSByZWFkIGZyb20gYSAucHljIGZpbGUgaGFkIHRoZSBidWcsIHNvbXRpbWVzIHRoZSBkaXJlY3RseQorIyB0aGUgYnl0ZWNvZGUgcmVhZCBmcm9tIGEgLnB5YyBmaWxlIGhhZCB0aGUgYnVnLCBzb21ldGltZXMgdGhlIGRpcmVjdGx5CiAjIGdlbmVyYXRlZCBieXRlY29kZS4gIFRoaXMgaXMgc29tZXRpbWVzIGEgdmVyeSBzaHkgYnVnIG5lZWRpbmcgYSBsb3Qgb2YKICMgc2FtcGxlIGRhdGEuCiAKIFRFU1RPUFRTPQktbCAkKEVYVFJBVEVTVE9QVFMpCiBURVNUUFJPRz0JJChzcmNkaXIpL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5Ci1URVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtRSAtdHQKK1RFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1XZCAtMyAtRSAtdHQgJChURVNUUFlUSE9OT1BUUykKIHRlc3Q6CQlhbGwgcGxhdGZvcm0KIAkJLWZpbmQgJChzcmNkaXIpL0xpYiAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCiAJCS0kKFRFU1RQWVRIT04pICQoVEVTVFBST0cpICQoVEVTVE9QVFMpCkBAIC03MDgsMTEgKzczNywxMiBAQAogCQktQGlmIHdoaWNoIHB5YnVpbGRib3QuaWRlbnRpZnkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKIAkJCXB5YnVpbGRib3QuaWRlbnRpZnkgIkNDPSckKENDKSciICJDWFg9JyQoQ1hYKSciOyBcCiAJCWZpCi0JCSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgLXVhbGwgLXJ3ICQoVEVTVE9QVFMpCisJCSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgLXVhbGwgLXJ3VyAkKFRFU1RPUFRTKQogCi1RVUlDS1RFU1RPUFRTPQkkKFRFU1RPUFRTKSAteCB0ZXN0X3RocmVhZCB0ZXN0X3NpZ25hbCB0ZXN0X3N0cmZ0aW1lIFwKLQkJdGVzdF91bmljb2RlZGF0YSB0ZXN0X3JlIHRlc3Rfc3JlIHRlc3Rfc2VsZWN0IHRlc3RfcG9sbCBcCi0JCXRlc3RfbGludXhhdWRpb2RldiB0ZXN0X3N0cnVjdCB0ZXN0X3N1bmF1ZGlvZGV2IHRlc3RfemxpYgorUVVJQ0tURVNUT1BUUz0JJChURVNUT1BUUykgLXggdGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFwKKwkJdGVzdF9tdWx0aWJ5dGVjb2RlYyB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgdGVzdF9pdGVydG9vbHMgXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZyB0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKKwkJdGVzdF9zZWxlY3QgdGVzdF96aXBmaWxlCiBxdWlja3Rlc3Q6CWFsbCBwbGF0Zm9ybQogCQktZmluZCAkKHNyY2RpcikvTGliIC1uYW1lICcqLnB5W2NvXScgLXByaW50IHwgeGFyZ3Mgcm0gLWYKIAkJLSQoVEVTVFBZVEhPTikgJChURVNUUFJPRykgJChRVUlDS1RFU1RPUFRTKQpAQCAtNzYzLDYgKzc5Myw5IEBACiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIHB5dGhvbiQoVkVSU0lPTikkKEVYRSkgJChQWVRIT04pKQogCS1ybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbi1jb25maWcKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgcHl0aG9uLWNvbmZpZykKKwktdGVzdCAtZCAkKERFU1RESVIpJChMSUJQQykgfHwgJChJTlNUQUxMKSAtZCAtbSAkKERJUk1PREUpICQoREVTVERJUikkKExJQlBDKQorCS1ybSAtZiAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLnBjCisJKGNkICQoREVTVERJUikkKExJQlBDKTsgJChMTikgLXMgcHl0aG9uLSQoVkVSU0lPTikucGMgcHl0aG9uLnBjKQogCiAjIEluc3RhbGwgdGhlIGludGVycHJldGVyIHdpdGggJChWRVJTSU9OKSBhZmZpeGVkCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCkBAIC03OTksNyArODMyLDcgQEAKIAkJZmk7IFwKIAlkb25lCiAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9NaXNjL3B5dGhvbi5tYW4gXAotCQkkKERFU1RESVIpJChNQU5ESVIpL21hbjEvcHl0aG9uLjEKKwkJJChERVNURElSKSQoTUFORElSKS9tYW4xL3B5dGhvbiQoVkVSU0lPTikuMQogCiAjIEluc3RhbGwgdGhlIGxpYnJhcnkKIFBMQVRESVI9CXBsYXQtJChNQUNIREVQKQpAQCAtODE3LDE3ICs4NTAsMjEgQEAKIAlwbGF0LW1hYy9saWItc2NyaXB0cGFja2FnZXMvU3lzdGVtRXZlbnRzIFwKIAlwbGF0LW1hYy9saWItc2NyaXB0cGFja2FnZXMvVGVybWluYWwgCiBQTEFUTUFDUEFUSD06cGxhdC1tYWM6cGxhdC1tYWMvbGliLXNjcmlwdHBhY2thZ2VzCi1MSUJTVUJESVJTPQlsaWItdGsgc2l0ZS1wYWNrYWdlcyB0ZXN0IHRlc3Qvb3V0cHV0IHRlc3QvZGF0YSBcCi0JCXRlc3QvZGVjaW1hbHRlc3RkYXRhIFwKK0xJQlNVQkRJUlM9CWxpYi10ayBsaWItdGsvdGVzdCBsaWItdGsvdGVzdC90ZXN0X3RraW50ZXIgXAorICAgICAgICAgICAgICAgIGxpYi10ay90ZXN0L3Rlc3RfdHRrIHNpdGUtcGFja2FnZXMgdGVzdCB0ZXN0L2RhdGEgXAorCQl0ZXN0L2RlY2ltYWx0ZXN0ZGF0YSB0ZXN0L3htbHRlc3RkYXRhIFwKKwkJdGVzdC90cmFjZWRtb2R1bGVzIFwKIAkJZW5jb2RpbmdzIGNvbXBpbGVyIGhvdHNob3QgXAogCQllbWFpbCBlbWFpbC9taW1lIGVtYWlsL3Rlc3QgZW1haWwvdGVzdC9kYXRhIFwKIAkJanNvbiBqc29uL3Rlc3RzIFwKIAkJc3FsaXRlMyBzcWxpdGUzL3Rlc3QgXAotCQlsb2dnaW5nIGJzZGRiIGJzZGRiL3Rlc3QgY3N2IHdzZ2lyZWYgXAorCQlsb2dnaW5nIGJzZGRiIGJzZGRiL3Rlc3QgY3N2IGltcG9ydGxpYiB3c2dpcmVmIFwKIAkJbGliMnRvMyBsaWIydG8zL2ZpeGVzIGxpYjJ0bzMvcGdlbjIgbGliMnRvMy90ZXN0cyBcCisJCWxpYjJ0bzMvdGVzdHMvZGF0YSBsaWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzIGxpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvbXlmaXhlcyBcCiAJCWN0eXBlcyBjdHlwZXMvdGVzdCBjdHlwZXMvbWFjaG9saWIgaWRsZWxpYiBpZGxlbGliL0ljb25zIFwKIAkJZGlzdHV0aWxzIGRpc3R1dGlscy9jb21tYW5kIGRpc3R1dGlscy90ZXN0cyAkKFhNTExJQlNVQkRJUlMpIFwKIAkJbXVsdGlwcm9jZXNzaW5nIG11bHRpcHJvY2Vzc2luZy9kdW1teSBcCisJCXVuaXR0ZXN0IHVuaXR0ZXN0L3Rlc3QgXAogCQlsaWItb2xkIFwKIAkJY3Vyc2VzIHB5ZG9jX2RhdGEgJChNQUNIREVQUykKIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUExBVERJUikKQEAgLTg4OSwxMSArOTI2LDEzIEBACiAJUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKIAkJLi8kKEJVSUxEUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAogCQktZCAkKExJQkRFU1QpIC1mIFwKLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXMnICQoREVTVERJUikkKExJQkRFU1QpCisJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorCQkkKERFU1RESVIpJChMSUJERVNUKQogCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKIAkJLi8kKEJVSUxEUFlUSE9OKSAtV2kgLXR0IC1PICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAogCQktZCAkKExJQkRFU1QpIC1mIFwKLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXMnICQoREVTVERJUikkKExJQkRFU1QpCisJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorCQkkKERFU1RESVIpJChMSUJERVNUKQogCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAogCQkuLyQoQlVJTERQWVRIT04pIC1XaSAtdCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKQEAgLTkxNSw2ICs5NTQsMTEgQEAKIAlleHBvcnQgRVhFOyBFWEU9IiQoQlVJTERFWEUpIjsgXAogCWNkICQoc3JjZGlyKS9MaWIvJChQTEFURElSKTsgJChSVU5TSEFSRUQpIC4vcmVnZW4KIAorcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorCSMgU3Vic3RpdHV0aW9uIGhhcHBlbnMgaGVyZSwgYXMgdGhlIGNvbXBsZXRlbHktZXhwYW5kZWQgQklORElSCisJIyBpcyBub3QgYXZhaWxhYmxlIGluIGNvbmZpZ3VyZQorCXNlZCAtZSAicyxARVhFTkFNRUAsJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCiBpbmNsaW5zdGFsbDoKQEAgLTkzNiw4ICs5ODAsMTIgQEAKICMgSW5zdGFsbCB0aGUgbGlicmFyeSBhbmQgbWlzY2VsbGFuZW91cyBzdHVmZiBuZWVkZWQgZm9yIGV4dGVuZGluZy9lbWJlZGRpbmcKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKIExJQlBMPQkJJChMSUJQKS9jb25maWcKLWxpYmFpbnN0YWxsOglhbGwKLQlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCk7IFwKKworIyBwa2djb25maWcgZGlyZWN0b3J5CitMSUJQQz0JCSQoTElCRElSKS9wa2djb25maWcKKworbGliYWluc3RhbGw6CWFsbCBweXRob24tY29uZmlnCisJQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpOyBcCiAJZG8gXAogCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCiAJCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJCRpIjsgXApAQCAtOTY0LDExICsxMDEyLDkgQEAKIAkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9TZXR1cCAkKERFU1RESVIpJChMSUJQTCkvU2V0dXAKIAkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9TZXR1cC5sb2NhbCAkKERFU1RESVIpJChMSUJQTCkvU2V0dXAubG9jYWwKIAkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9TZXR1cC5jb25maWcgJChERVNURElSKSQoTElCUEwpL1NldHVwLmNvbmZpZworCSQoSU5TVEFMTF9EQVRBKSBNaXNjL3B5dGhvbi5wYyAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLSQoVkVSU0lPTikucGMKIAkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtlc2V0dXAgJChERVNURElSKSQoTElCUEwpL21ha2VzZXR1cAogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9pbnN0YWxsLXNoICQoREVTVERJUikkKExJQlBMKS9pbnN0YWxsLXNoCi0JIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKLQkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCi0Jc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKSwiIDwgJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiA+cHl0aG9uLWNvbmZpZwogCSQoSU5TVEFMTF9TQ1JJUFQpIHB5dGhvbi1jb25maWcgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pLWNvbmZpZwogCXJtIHB5dGhvbi1jb25maWcKIAlAaWYgWyAtcyBNb2R1bGVzL3B5dGhvbi5leHAgLWEgXApAQCAtMTAwMCw3ICsxMDQ2LDcgQEAKIAogIyBJbnN0YWxsIHRoZSBkeW5hbWljYWxseSBsb2FkYWJsZSBtb2R1bGVzCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCi1zaGFyZWRpbnN0YWxsOgorc2hhcmVkaW5zdGFsbDogc2hhcmVkbW9kcwogCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSBpbnN0YWxsIFwKIAkgICAJLS1wcmVmaXg9JChwcmVmaXgpIFwKIAkJLS1pbnN0YWxsLXNjcmlwdHM9JChCSU5ESVIpIFwKQEAgLTEwNTIsMjggKzEwOTgsMjAgQEAKIGZyYW1ld29ya2luc3RhbGxtYWNsaWI6CiAJbG4gLWZzICIuLi8uLi8uLi8kKFBZVEhPTkZSQU1FV09SSykiICIkKERFU1RESVIpJChwcmVmaXgpL2xpYi9weXRob24kKFZFUlNJT04pL2NvbmZpZy9saWJweXRob24kKFZFUlNJT04pLmEiCiAJbG4gLWZzICIuLi8uLi8uLi8kKFBZVEhPTkZSQU1FV09SSykiICIkKERFU1RESVIpJChwcmVmaXgpL2xpYi9weXRob24kKFZFUlNJT04pL2NvbmZpZy9saWJweXRob24kKFZFUlNJT04pLmR5bGliIgorCWxuIC1mcyAiLi4vJChQWVRIT05GUkFNRVdPUkspIiAiJChERVNURElSKSQocHJlZml4KS9saWIvbGlicHl0aG9uJChWRVJTSU9OKS5keWxpYiIKIAljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsbWFjc3VidHJlZSBERVNURElSPSIkKERFU1RESVIpIgogCiAjIFRoaXMgaW5zdGFsbHMgdGhlIElERSwgdGhlIExhdW5jaGVyIGFuZCBvdGhlciBhcHBzIGludG8gL0FwcGxpY2F0aW9ucwogZnJhbWV3b3JraW5zdGFsbGFwcHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHMgREVTVERJUj0iJChERVNURElSKSIKIAotZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5OgotCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxhcHBzNHdheSBERVNURElSPSIkKERFU1RESVIpIgotCiAjIFRoaXMgaW5zdGFsbCB0aGUgdW5peCBweXRob24gYW5kIHB5dGhvbncgdG9vbHMgaW4gL3Vzci9sb2NhbC9iaW4KIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCi1mcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzNHdheToKLQljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsdW5peHRvb2xzNHdheSBERVNURElSPSIkKERFU1RESVIpIgotCiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGFsdGluc3RhbGx1bml4dG9vbHMgREVTVERJUj0iJChERVNURElSKSIKIAotZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29sczR3YXk6Ci0JY2QgTWFjICYmICQoTUFLRSkgYWx0aW5zdGFsbHVuaXh0b29sczR3YXkgREVTVERJUj0iJChERVNURElSKSIKLQogIyBUaGlzIGluc3RhbGxzIHRoZSBEZW1vcyBhbmQgVG9vbHMgaW50byB0aGUgYXBwbGljYXRpb25zIGRpcmVjdG9yeS4KICMgSXQgaXMgbm90IHBhcnQgb2YgYSBub3JtYWwgZnJhbWV3b3JraW5zdGFsbAogZnJhbWV3b3JraW5zdGFsbGV4dHJhczoKQEAgLTExMzksOSArMTE3Nyw5IEBACiBjbGVhbjogcHljcmVtb3ZhbAogCWZpbmQgLiAtbmFtZSAnKi5bb2FdJyAtZXhlYyBybSAtZiB7fSAnOycKIAlmaW5kIC4gLW5hbWUgJyouc1tvbF0nIC1leGVjIHJtIC1mIHt9ICc7JwotCWZpbmQgJChzcmNkaXIpL2J1aWxkIC1uYW1lICdmZmljb25maWcuaCcgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKLQlmaW5kICQoc3JjZGlyKS9idWlsZCAtbmFtZSAnZmZpY29uZmlnLnB5JyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQogCWZpbmQgLiAtbmFtZSAnKi5zby5bMC05XSouWzAtOV0qJyAtZXhlYyBybSAtZiB7fSAnOycKKwlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcuaCcgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKKwlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcucHknIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCiAJLXJtIC1mIExpYi9saWIydG8zLypHcmFtbWFyKi5waWNrbGUKIAogcHJvZmlsZS1yZW1vdmFsOgpAQCAtMTE0OSw3ICsxMTg3LDcgQEAKIAogY2xvYmJlcjogY2xlYW4gcHJvZmlsZS1yZW1vdmFsCiAJLXJtIC1mICQoQlVJTERQWVRIT04pICQoUEdFTikgJChMSUJSQVJZKSAkKExETElCUkFSWSkgJChETExMSUJSQVJZKSBcCi0JCXRhZ3MgVEFHUyBcCisJCXRhZ3MgVEFHUyBQYXJzZXIvcGdlbi5zdGFtcCBcCiAJCWNvbmZpZy5jYWNoZSBjb25maWcubG9nIHB5Y29uZmlnLmggTW9kdWxlcy9jb25maWcuYwogCS1ybSAtcmYgYnVpbGQgcGxhdGZvcm0KIAktcm0gLXJmICQoUFlUSE9ORlJBTUVXT1JLRElSKQpAQCAtMTE1OCw4ICsxMTk2LDEzIEBACiAjIHJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBldmVuIE1ha2VmaWxlWy5wcmVdCiAjIEtlZXAgY29uZmlndXJlIGFuZCBQeXRob24tYXN0LltjaF0sIGl0J3MgcG9zc2libGUgdGhleSBjYW4ndCBiZSBnZW5lcmF0ZWQKIGRpc3RjbGVhbjogY2xvYmJlcgorCWZvciBmaWxlIGluIExpYi90ZXN0L2RhdGEvKiA7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRmaWxlIiAhPSAiTGliL3Rlc3QvZGF0YS9SRUFETUUiOyB0aGVuIHJtICIkJGZpbGUiOyBmaTsgXAorCWRvbmUKIAktcm0gLWYgY29yZSBNYWtlZmlsZSBNYWtlZmlsZS5wcmUgY29uZmlnLnN0YXR1cyBcCi0JCU1vZHVsZXMvU2V0dXAgTW9kdWxlcy9TZXR1cC5sb2NhbCBNb2R1bGVzL1NldHVwLmNvbmZpZworCQlNb2R1bGVzL1NldHVwIE1vZHVsZXMvU2V0dXAubG9jYWwgTW9kdWxlcy9TZXR1cC5jb25maWcgXAorCQlNb2R1bGVzL2xkX3NvX2FpeCBNb2R1bGVzL3B5dGhvbi5leHAgTWlzYy9weXRob24ucGMKKwktcm0gLWYgcHl0aG9uKi1nZGIucHkKIAlmaW5kICQoc3JjZGlyKSAnKCcgLW5hbWUgJyouZmRjJyAtbyAtbmFtZSAnKn4nIFwKIAkJCSAgIC1vIC1uYW1lICdbQCwjXSonIC1vIC1uYW1lICcqLm9sZCcgXAogCQkJICAgLW8gLW5hbWUgJyoub3JpZycgLW8gLW5hbWUgJyoucmVqJyBcCkBAIC0xMjE2LDUgKzEyNTksNiBAQAogLlBIT05ZOiBmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMKIC5QSE9OWTogZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyByZWNoZWNrIGF1dG9jb25mIGNsZWFuIGNsb2JiZXIgZGlzdGNsZWFuIAogLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjaworLlBIT05ZOiBnZGJob29rcwogCiAjIElGIFlPVSBQVVQgQU5ZVEhJTkcgSEVSRSBJVCBXSUxMIEdPIEFXQVkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCA3NTdiYzFkLi4zY2I3NjY3IDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC04LDI2ICs4LDMwIEBACiAKIAktLUd1aWRvCiAKLVBTOiBJbiB0aGUgc3RhbmRhcmQgUHl0aG9uIGRpc3RyaWJ1dGlvbiwgdGhpcyBmaWxlIGlzIGVuY29kZWQgaW4gTGF0aW4tMS4KK1BTOiBJbiB0aGUgc3RhbmRhcmQgUHl0aG9uIGRpc3RyaWJ1dGlvbiwgdGhpcyBmaWxlIGlzIGVuY29kZWQgaW4gVVRGLTgKK2FuZCB0aGUgbGlzdCBpcyBpbiByb3VnaCBhbHBoYWJldGljYWwgb3JkZXIgYnkgbGFzdCBuYW1lcy4KIAogRGF2aWQgQWJyYWhhbXMKIEppbSBBaGxzdHJvbQogRmFyaGFuIEFobWFkCitOaXIgQWlkZXMKIFlhbml2IEFrbmluCiBKeXJraSBBbGFrdWlqYWxhCiBCaWxseSBHLiBBbGxpZQogS2V2aW4gQWx0aXMKK0pvZSBBbWVudGEKIE1hcmsgQW5hY2tlcgogQW5kZXJzIEFuZGVyc2VuCiBKb2huIEFuZGVyc29uCi1FcmlrIEFuZGVyc+luCitFcmlrIEFuZGVyc8OpbgogT2xpdmVyIEFuZHJpY2gKIFJvc3MgQW5kcnVzCivDiXJpYyBBcmF1am8KIEphc29uIEFzYmFocgogRGF2aWQgQXNjaGVyCiBDaHJpcyBBdExlZQogSm9obiBBeWNvY2sKLUphbi1IZWluIEIidWhybWFuCitKYW4tSGVpbiBCw7xocm1hbgogRG9ub3ZhbiBCYWFyZGEKIEF0dGlsYSBCYWJvCiBBbGZvbnNvIEJhY2llcm8KQEAgLTM3LDggKzQxLDEwIEBACiBHcmVnIEJhbGwKIEx1aWdpIEJhbGxhYmlvCiBKZWZmIEJhbG9naAorTWF0dCBCYW5keQogTWljaGFlbCBKLiBCYXJiZXIKIENocmlzIEJhcmtlcgorTmljayBCYXJuZXMKIFF1ZW50aW4gQmFybmVzCiBSaWNoYXJkIEJhcnJhbgogQ2VzYXIgRWR1YXJkbyBCYXJyb3MKQEAgLTU4LDcgKzY0LDcgQEAKIFJlaW1lciBCZWhyZW5kcwogQmVuIEJlbGwKIFRob21hcyBCZWxsbWFuCi1BbGV4YW5kZXIgQmVsb3BvbHNreQorQWxleGFuZGVyIOKAnNCh0LDRiNCw4oCdIEJlbG9wb2xza3kKIEFuZHJldyBCZW5uZXR0cwogQW5keSBCZW5za3kKIE1pY2hlbCBWYW4gZGVuIEJlcmdoCkBAIC04MCwxOCArODYsMjIgQEAKIFBhdWwgQm9kZGllCiBNYXR0aGV3IEJvZWRpY2tlcgogRGF2aWQgQm9sZW4KK0dhd2FpbiBCb2x0b24KIEdyZWdvcnkgQm9uZAogSnVyamVuIEJvcwogUGV0ZXIgQm9zY2gKIEVyaWMgQm91Y2sKIFRoaWVycnkgQm91c2NoCiBTZWJhc3RpYW4gQm92aW5nCitKZWZmIEJyYWRiZXJyeQogTW9udHkgQnJhbmRlbmJlcmcKIEdlb3JnIEJyYW5kbAorQ2hyaXN0b3BoZXIgQnJhbm5vbgogVGVycmVuY2UgQnJhbm5vbgogRGF2ZSBCcmVubmFuCiBUb20gQnJpZGdtYW4KIFJpY2hhcmQgQnJvZGllCitNaWNoYWVsIEJyb2dodG9uCiBEYW5pZWwgQnJvdHNreQogSmVhbiBCcm91d2VycwogR2FyeSBTLiBCcm93bgpAQCAtMTE0LDkgKzEyNCwxMyBAQAogQnJldHQgQ2Fubm9uCiBNaWtlIENhcmx0b24KIFRlcnJ5IENhcnJvbGwKK0xvcmVuem8gTS4gQ2F0dWNjaQogRG9ubiBDYXZlCitDaGFybGVzIENhemFib24KIFBlciBDZWRlcnF2aXN0CiBPY3RhdmlhbiBDZXJuYQorUGFzY2FsIENoYW1ib24KK0pvaG4gQ2hhbmRsZXIKIEh5ZS1TaGlrIENoYW5nCiBKZWZmcmV5IENoYW5nCiBNaXRjaCBDaGFwbWFuCkBAIC0xMjgsNiArMTQyLDcgQEAKIEFsYmVydCBDaGluLUEtWW91bmcKIEFkYWwgQ2hpcmlsaXVjCiBNYXR0IENoaXNob2xtCitBbmRlcnMgQ2hyaWdzdHLDtm0KIFRvbSBDaHJpc3RpYW5zZW4KIFZhZGltIENodWd1bm92CiBEYXZpZCBDaW5lZ2UKQEAgLTE0MCw3ICsxNTUsMTAgQEAKIERhdmUgQ29sZQogQmVuamFtaW4gQ29sbGFyCiBKZWZmZXJ5IENvbGxpbnMKK1JvYmVydCBDb2xsaW5zCiBQYXVsIENvbG9taWV0cworR2VyZW15IENvbmRyYQorSnVhbiBKb3PDqSBDb250aQogTWF0dCBDb253YXkKIERhdmlkIE0uIENvb2tlCiBHcmVnIENvcGVsYW5kCkBAIC0xNDgsNiArMTY2LDcgQEAKIERhdmlkIENvc3RhbnpvCiBTY290dCBDb3R0b24KIEdyZWcgQ291Y2gKK0RhdmlkIENvdXJuYXBlYXUKIFN0ZXZlIENvdXNpbnMKIEFsZXggQ292ZW50cnkKIE1hdHRoZXcgRGl4b24gQ293bGVzCkBAIC0xNTYsOCArMTc1LDExIEBACiBMYXVyYSBDcmVpZ2h0b24KIFNpbW9uIENyb3NzCiBEcmV3IENzaWxsYWcKK0pvYXF1aW4gQ3VlbmNhIEFiZWxhCiBKb2huIEN1Z2luaQogVG9tIEN1bGxpdG9uCitCcmlhbiBDdXJ0aW4KK0xpc2FuZHJvIERhbGNpbgogQW5kcmV3IERhbGtlCiBMYXJzIERhbWVyb3cKIEVyaWMgRGFuaWVsCkBAIC0xNzUsMTEgKzE5NywxMyBAQAogU2NvdHQgRGlhbAogVG9ieSBEaWNrZW5zb24KIE1hcmsgRGlja2luc29uCitKYWNrIERpZWRlcmljaAogRGFuaWVsIERpbml6CiBZdmVzIERpb25uZQogRGFuaWVsIERpdHRtYXIKIEphcm9taXIgRG9sZWNlawogSXNtYWlsIERvbm1legorTWFyY29zIERvbm9sbwogRGltYSBEb3JmbWFuCiBDZXNhciBEb3VhZHkKIERlYW4gRHJhYXllcgpAQCAtMTkwLDIyICsyMTQsMjQgQEAKIFF1aW5uIER1bmthbgogUm9iaW4gRHVubgogTHVrZSBEdW5zdGFuCitWaXJnaWwgRHVwcmFzCiBBbmR5IER1c3RtYW4KIEdhcnkgRHV6YW4KIEV1Z2VuZSBEdnVyZWNoZW5za2kKIEpvc2lwIER6b2xvbmdhCiBNYXhpbSBEenVtYW5lbmtvCi1XYWx0ZXIgRPZyd2FsZAorV2FsdGVyIETDtnJ3YWxkCiBIYW5zIEVja2FyZHQKIEdyYW50IEVkd2FyZHMKIEpvaG4gRWhyZXNtYW4KK0VyaWMgRWlzbmVyCiBBbmRyZXcgRWxhbmQKIExhbmNlIEVsbGluZ2hhdXMKIERhdmlkIEVseQogSmVmZiBFcGxlcgogVG9tIEVwcGVybHkKIFN0b2ZmZWwgRXJhc211cwotSvxyZ2VuIEEuIEVyaGFyZAorSsO8cmdlbiBBLiBFcmhhcmQKIE1pY2hhZWwgRXJuc3QKIEJlbiBFc2NvdG8KIEFuZHkgRXNraWxzc29uCkBAIC0yMTcsMTggKzI0MywyMSBAQAogRGF2aWQgRXZlcmx5CiBHcmVnIEV3aW5nCiBNYXJ0aWpuIEZhYXNzZW4KK0Nsb3ZpcyBGYWJyaWNpbwogQW5kcmVhcyBGYWVyYmVyCiBCaWxsIEZhbmNoZXIKK1Ryb3kgSi4gRmFycmVsbAogTWFyayBGYXZhcwogTmllbHMgRmVyZ3Vzb24KIFNlYmFzdGlhbiBGZXJuYW5kZXoKIFZpbmNlbnQgRmlhY2sKIFRvbWVyIEZpbGliYQorSmVmZnJleSBGaW5rZWxzdGVpbgogUnVzc2VsbCBGaW5uCiBOaWxzIEZpc2NoYmVjawogRnJlZGVyaWsgRml4CiBNYXR0IEZsZW1pbmcKLUhlcm7hbiBNYXJ07W5leiBGb2ZmYW5pCitIZXJuw6FuIE1hcnTDrW5leiBGb2ZmYW5pCiBNaWNoYWVsIEZvb3JkCiBBbWF1cnkgRm9yZ2VvdCBkJ0FyYwogRG91ZyBGb3J0CkBAIC0yNDIsNyArMjcxLDEwIEBACiBQZXRlciBGdW5rCiBHZW9mZiBGdXJuaXNoCiBVbGlzc2VzIEZ1cnF1aW0KK0hhZ2VuIEbDvHJzdGVuYXUKK0hhbGx2YXJkIEIgRnVydXNldGgKIEFjaGltIEdhZWRrZQorTWFydGluIHZvbiBHYWdlcm4KIExlbGUgR2FpZmF4CiBTYW50aWFnbyBHYWxhCiBZaXR6Y2hhayBHYWxlCkBAIC0yNTcsMjcgKzI4OSwzMCBAQAogSGFycnkgSGVucnkgR2ViZWwKIE1hcml1cyBHZWRtaW5hcwogVGhvbWFzIEdlbGxla3VtCitHYWJyaWVsIEdlbmVsbGluYQogQ2hyaXN0b3MgR2Vvcmdpb3UKIEJlbiBHZXJ0emZpZWxkCiBEaW51IEdoZXJtYW4KIEpvbmF0aGFuIEdpZGR5CiBKb2hhbm5lcyBHaWpzYmVycwogTWljaGFlbCBHaWxmaXgKK0NocmlzdG9waCBHb2hsa2UKIFRpbSBHb2xkZW4KIENocmlzIEdvbm5lcm1hbgogRGF2aWQgR29vZGdlcgogSGFucyBkZSBHcmFhZmYKIEVkZHkgRGUgR3JlZWYKIER1bmNhbiBHcmlzYnkKK0ZhYmlhbiBHcm9mZmVuCiBEYWcgR3J1bmVhdQogTWljaGFlbCBHdXJhdmFnZQotTGFycyBHdXN05GJlbAotVGhvbWFzIEf8dHRsZXIKK0xhcnMgR3VzdMOkYmVsCitUaG9tYXMgR8O8dHRsZXIKIEJhcnJ5IEhhZGRvdwogUGF1bCB0ZW4gSGFnZW4KIFJhc211cyBIYWhuCiBQZXRlciBIYWlnaHQKLVbhY2xhdiBIYWlzbWFuCitWw6FjbGF2IEhhaXNtYW4KIEJvYiBIYWxsZXkKIEplc3NlIEhhbGxpbwogSnVuIEhhbWFubwpAQCAtMzAxLDcgKzMzNiw3IEBACiBKYW1lcyBIZW5zdHJpZGdlCiBDaHJpcyBIZXJib3J0aAogSXZhbiBIZXJtYW4KLUr8cmdlbiBIZXJtYW5uCitKw7xyZ2VuIEhlcm1hbm4KIEdhcnkgSGVycm9uCiBUaG9tYXMgSGVydmUKIEJlcm5oYXJkIEhlcnpvZwpAQCAtMzI2LDYgKzM2MSw3IEBACiBOYW9mdW1pIEhvbmRhCiBKZWZmcmV5IEhvbmlnCiBSb2IgSG9vZnQKK01pY2hpZWwgZGUgSG9vbgogQnJpYW4gSG9vcGVyCiBSYW5kYWxsIEhvcHBlcgogTmFkYXYgSG9yZXNoCkBAIC0zMzksOSArMzc1LDExIEBACiBHcmVnIEh1bXBocmV5cwogRXJpYyBIdXNzCiBKZXJlbXkgSHlsdG9uCi1HZXJoYXJkIEjkcmluZworR2VyaGFyZCBIw6RyaW5nCitGcmVkcmlrIEjDpcOlcmQKIE1paGFpIEliYW5lc2N1CiBMYXJzIEltbWlzY2gKK0JvYmJ5IEltcG9sbG9uaWEKIE1lYWRvciBJbmdlCiBUb255IEluZ3JhbGRpCiBKb2huIEludGVycmFudGUKQEAgLTM1NiwxMSArMzk0LDEzIEBACiBKYWNrIEphbnNlbgogQmlsbCBKYW5zc2VuCiBEcmV3IEplbmtpbnMKLUZsZW1taW5nIEtq5nIgSmVuc2VuCitGbGVtbWluZyBLasOmciBKZW5zZW4KIEppYmEKIE9yamFuIEpvaGFuc2VuCitGcmVkcmlrIEpvaGFuc3NvbgogR3JlZ29yeSBLLiBKb2huc29uCiBTaW1vbiBKb2huc3RvbgorTmljb2xhcyBKb2x5CiBFdmFuIEpvbmVzCiBKZXJlbXkgSm9uZXMKIFJpY2hhcmQgSm9uZXMKQEAgLTM3OCwxNSArNDE4LDE5IEBACiBMb3UgS2F0ZXMKIEhpcm9ha2kgS2F3YWkKIFNlYmFzdGllbiBLZWltCitSeWFuIEtlbGx5CiBSb2JlcnQgS2VybgogUmFuZGFsbCBLZXJuCiBNYWdudXMgS2Vzc2xlcgogTGF3cmVuY2UgS2VzdGVsb290CiBWaXZlayBLaGVyYQorQWtpcmEgS2l0YWRhCiBNYWRzIEtpaWxlcmljaAogVGFlayBKb28gS2ltCitXLiBUcmV2b3IgS2luZwogUGF1bCBLaXBwZXMKIFN0ZXZlIEtpcnNjaAorU2ViYXN0aWFuIEtpcnNjaGUKIFJvbiBLbGF0Y2hrbwogQmFzdGlhbiBLbGVpbmVpZGFtCiBCb2IgS2xpbmUKQEAgLTM5NywxNSArNDQxLDE4IEBACiBHcmVnIEtvY2hhbnNraQogRGFtb24gS29obGVyCiBKb3NlcGggS29zaHkKK01ha3NpbSBLb3p5YXJjaHVrCiBTdGVmYW4gS3JhaAogQm9iIEtyYXMKIEhvbGdlciBLcmVrZWwKIE1pY2hhZWwgS3JlbWVyCiBGYWJpYW4gS3JldXR6CiBIYW5udSBLcm9zaW5nCitBbmRyZWogS3JwaWMKIEl2YW4gS3JzdGnEhwogQW5kcmV3IEt1Y2hsaW5nCiBWbGFkaW1pciBLdXNobmlyCitSb3NzIExhZ2Vyd2FsbAogQ2FtZXJvbiBMYWlyZAogxYF1a2FzeiBMYW5nYQogVGlubyBMYW5nZQpAQCAtNDMyLDExICs0NzksMTMgQEAKIENocmlzdG9waGVyIFR1ciBMZXNuaWV3c2tpLUxhYXMKIE1hcmsgTGV2aW5zb24KIFdpbGxpYW0gTGV3aXMKK1h1YW5qaSBMaQogUm9iZXJ0IHZhbiBMaWVyZQorUm9zcyBMaWdodAogU2hhd24gTGlnb2NraQogTWFydGluIExpZ3IKIENocmlzdG9waGVyIExpbmRibGFkCi1Cam9ybiBMaW5kcXZpc3QKK0Jqw7ZybiBMaW5kcXZpc3QKIFBlciBMaW5kcXZpc3QKIEVyaWMgTGluZHZhbGwKIEdyZWdvciBMaW5nbApAQCAtNDQ3LDI0ICs0OTYsMjYgQEAKIEphc29uIExvd2UKIFRvbnkgTG93bmRzCiBSYXkgTG95emFnYQorTHVrYXMgTHVlZwogTG9yZW4gTHVrZQogRnJlZHJpayBMdW5kaAogTWFyayBMdXR6CiBKaW0gTHluY2gKIE1pa2FlbCBMeW5ndmlnCi1NYXJ0aW4gdm9uIEz2d2lzCitNYXJ0aW4gdm9uIEzDtndpcwogQW5kcmV3IEkgTWFjSW50eXJlCiBUaW0gTWFjS2VuemllCiBOaWNrIE1hY2xhcmVuCiBTdGV2ZSBNYWpld3NraQogR3J6ZWdvcnogTWFrYXJld2ljegorRGF2aWQgTWFsY29sbQogS2VuIE1hbmhlaW1lcgogVmxhZGltaXIgTWFyYW5nb3pvdgogRGF2aWQgTWFyZWsKIERvdWcgTWFyaWVuCiBBbGV4IE1hcnRlbGxpCiBBbnRob255IE1hcnRpbgotU+liYXN0aWVuIE1hcnRpbmkKK1PDqWJhc3RpZW4gTWFydGluaQogUm9nZXIgTWFzc2UKIE5pY2sgTWF0aGV3c29uCiBHcmFoYW0gTWF0dGhld3MKQEAgLTQ4MiwxNiArNTMzLDIwIEBACiBMYW1iZXJ0IE1lZXJ0ZW5zCiBCaWxsIHZhbiBNZWxsZQogTHVjYXMgUHJhZG8gTWVsbworRXppbyBNZWxvdHRpCiBCcmlhbiBNZXJyZWxsCiBMdWtlIE1ld2J1cm4KIE1pa2UgTWV5ZXIKIFN0ZXZlbiBNaWFsZQogVHJlbnQgTWljaworU3RhbiBNaWhhaQogQXJpc3RvdGVsaXMgTWlrcm9wb3Vsb3MKIERhbWllbiBNaWxsZXIKIENoYWQgTWlsbGVyCitKYXNvbiBWLiBNaWxsZXIKIEpheSBULiBNaWxsZXIKIFJvbWFuIE1pbG5lcgorQW5kcmlpIFYuIE1pc2hrb3Zza3lpCiBEdXN0aW4gSi4gTWl0Y2hlbGwKIERvbSBNaXRjaGVsbAogRG91ZyBNb2VuCkBAIC01MDAsMjQgKzU1NSwyOSBAQAogUGF1bCBNb29yZQogRGVyZWsgTW9ycgogSmFtZXMgQSBNb3JyaXNvbgorUGFibG8gTW91em8KIFNqb2VyZCBNdWxsZW5kZXIKIFNhcGUgTXVsbGVuZGVyCiBNaWNoYWVsIE11bGxlcgorTmVpbCBNdWxsZXIKK1IuIERhdmlkIE11cnJheQogUGlvdHIgTWV5ZXIKIEpvaG4gTmFnbGUKIFRha2FoaXJvIE5ha2F5YW1hCiBUcmF2ZXJzIE5hcmFuCitDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkKIEZyZWRyaWsgTmVocgogVHJlbnQgTmVsc29uCiBUb255IE5lbHNvbgogQ2hhZCBOZXR6ZXIKLU1heCBOZXVuaPZmZmVyCitNYXggTmV1bmjDtmZmZXIKIEdlb3JnZSBOZXZpbGxlLU5laWwKIEpvaGFubmVzIE5pY29sYWkKIFNhbXVlbCBOaWNvbGFyeQogR3VzdGF2byBOaWVtZXllcgogT3NjYXIgTmllcnN0cmFzegogSHJ2b2plIE5pa3NpYworR3JlZ29yeSBOb2ZpCiBKZXNzZSBOb2xsZXIKIEJpbGwgTm9vbgogU3RlZmFuIE5vcmJlcmcKQEAgLTUzNCw2ICs1OTQsNyBAQAogUGlldCB2YW4gT29zdHJ1bQogSmFzb24gT3JlbmRvcmZmCiBEb3VnbGFzIE9ycgorTWljaGVsZSBPcnLDuQogRGVuaXMgUy4gT3RraWRhY2gKIE1pY2hhZWwgT3R0ZW5lZGVyCiBSLiBNLiBPdWRrZXJrCkBAIC01NDEsNyArNjAyLDcgQEAKIE9uZHJlaiBQYWxrb3Zza3kKIE1pa2UgUGFsbAogVG9kZCBSLiBQYWxtZXIKLUp1YW4gRGF2aWQgSWLh8WV6IFBhbG9tYXIKK0p1YW4gRGF2aWQgSWLDocOxZXogUGFsb21hcgogSmFuIFBhbHVzCiBNLiBQYXBpbGxvbgogUGV0ZXIgUGFyZW50ZQpAQCAtNTUyLDcgKzYxMyw3IEBACiBTYW11ZWxlIFBlZHJvbmkKIE1hcmNlbCB2YW4gZGVyIFBlaWpsCiBTdGV2ZW4gUGVtYmVydG9uCi1TYW50aWFnbyBQZXJlc/NuCitTYW50aWFnbyBQZXJlc8OzbgogTWFyayBQZXJyZWdvCiBUcmV2b3IgUGVycmluCiBHYWJyaWVsIGRlIFBlcnRodWlzCkBAIC01NjgsMTEgKzYyOSwxMSBAQAogSmltIFN0LiBQaWVycmUKIERhbiBQaWVyc29uCiBNYXJ0aWpuIFBpZXRlcnMKLUZyYW7nb2lzIFBpbmFyZAorRnJhbsOnb2lzIFBpbmFyZAogWmFjaCBQaW5jdXMKIE1pY2hhZWwgUGlvdHJvd3NraQogQW50b2luZSBQaXRyb3UKLUplYW4tRnJhbudvaXMgUGnpcm9ubmUKK0plYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogR3VpbGhlcm1lIFBvbG8KIE1pY2hhZWwgUG9tcmFuaW5nCiBJdXN0aW4gUG9wCkBAIC01ODEsMTEgKzY0MiwxMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFN0ZXZlIFB1cmNlbGwKLUZlcm5hbmRvIFDpcmV6Ci1FZHVhcmRvIFDpcmV6CitGZXJuYW5kbyBQw6lyZXoKK0VkdWFyZG8gUMOpcmV6CiBCcmlhbiBRdWlubGFuCiBBbmRlcnMgUXZpc3QKIEJ1cnRvbiBSYWRvbnMKK0Jyb2RpZSBSYW8KIEFudHRpIFJhc2luZW4KIFNyaWRoYXIgUmF0bmFrdW1hcgogRXJpYyBSYXltb25kCkBAIC01OTUsNiArNjU3LDcgQEAKIEpvaG4gUmVkZm9yZAogVGVycnkgUmVlZHkKIFN0ZXZlIFJlZXZlcworTGVubmFydCBSZWdlYnJvCiBPZmlyIFJlaWNoZW5iZXJnCiBTZWFuIFJlaWZzY2huZWlkZXIKIE1pY2hhZWwgUC4gUmVpbGx5CkBAIC02MjQsMTQgKzY4NywxOCBAQAogRG9uYWxkIFdhbGxhY2UgUm91c2UgSUkKIExpYW0gUm91dHQKIENyYWlnIFJvd2xhbmQKK0NsaW50b24gUm95CiBQYXVsIFJ1YmluCiBTYW0gUnVieQogQXVkdW4gUy4gUnVuZGUKK1JhdWxpIFJ1b2hvbmVuCiBKZWZmIFJ1c2gKIFNhbSBSdXNoaW5nCiBNYXJrIFJ1c3NlbGwKIE5pY2sgUnVzc28KK1PDqWJhc3RpZW4gU2FibMOpCiBIYWppbWUgU2FpdG91CitHZW9yZ2UgU2Fra2lzCiBSaWNoIFNhbHoKIEtldmluIFNhbWJvcm4KIElseWEgU2FuZGxlcgpAQCAtNjYxLDcgKzcyOCw5IEBACiBEZW5pcyBTZXZlcnNvbgogSWFuIFNleWVyCiBIYSBTaGFvCitSaWNoYXJkIFNoYXBpcm8KIEJydWNlIFNoZXJ3b29kCitBbGV4YW5kZXIgU2hpZ2luCiBQZXRlIFNoaW5uZXJzCiBNaWNoYWVsIFNoaXBsZXR0CiBKb2huIFcuIFNoaXBtYW4KQEAgLTY5OSw2ICs3NjgsNyBAQAogQ2FzcGVyIFN0b2VsCiBNaWNoYWVsIFN0b25lCiBLZW4gU3RveAorUGF0cmljayBTdHJhd2Rlcm1hbgogRGFuIFN0cm9tYmVyZwogRGFuaWVsIFN0dXR6YmFjaAogTmF0aGFuIFN1bGxpdmFuCkBAIC03MDgsNyArNzc4LDcgQEAKIEthbGxlIFN2ZW5zc29uCiBQYXVsIFN3YXJ0egogVGhlbmF1bHQgU3lsdmFpbgotUOl0ZXIgU3phYvMKK1DDqXRlciBTemFiw7MKIEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzCiBHZW9mZiBUYWx2b2xhCiBXaWxsaWFtIFRhbmtzbGV5CkBAIC03MTYsNiArNzg2LDcgQEAKIFN0ZXZlbiBUYXNjaHVrCiBNb250eSBUYXlsb3IKIEFteSBUYXlsb3IKK0FuYXRvbHkgVGVjaHRvbmlrCiBUb2JpYXMgVGhlbGVuCiBKYW1lcyBUaG9tYXMKIFJvYmluIFRob21hcwpAQCAtNzI3LDE5ICs3OTgsMjQgQEAKIEZyYW5rIEouIFRvYmluCiBSIExpbmRzYXkgVG9kZAogQmVubmV0dCBUb2RkCitNYXRpYXMgVG9yY2hpbnNreQorU2FuZHJvIFRvc2kKIFJpY2hhcmQgVG93bnNlbmQKIExhdXJlbmNlIFRyYXR0CiBKb2huIFRyb21wCiBKYXNvbiBUcm93YnJpZGdlCiBBbnRob255IFR1aW5pbmdhCiBTdGVwaGVuIFR1cm5lcgorVGhlb2RvcmUgVHVyb2N5CiBCaWxsIFR1dHQKIERvb2JlZSBSLiBUemVjawotRXJlbiBU/HJrYXkKK0VyZW4gVMO8cmtheQogTGlvbmVsIFVsbWVyCiBSb2dlciBVcG9sZQogTWljaGFlbCBVcm1hbgogSGVjdG9yIFVydHViaWEKK0FuZGkgVmFqZGEKK0Nhc2UgVmFuIEhvcnNlbgogS3lsZSBWYW5kZXJCZWVrCiBBdHVsIFZhcm1hCiBEbWl0cnkgVmFzaWxpZXYKQEAgLTc1OSw2ICs4MzUsNyBAQAogQ2hhcmxlcyBXYWxkbWFuCiBSaWNoYXJkIFdhbGtlcgogTGFycnkgV2FsbAorS2V2aW4gV2FsemVyCiBHcmVnIFdhcmQKIEJhcnJ5IFdhcnNhdwogU3RldmUgV2F0ZXJidXJ5CkBAIC03NzMsMTEgKzg1MCwxNCBAQAogUmlja2FyZCBXZXN0bWFuCiBKZWZmIFdoZWVsZXIKIENocmlzdG9waGVyIFdoaXRlCitEYXZpZCBXaGl0ZQogTWF0cyBXaWNobWFubgogVHJ1aWRhIFdpZWRpamsKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgorRnJhbmsgV2llcnpiaWNraQogQnJ5Y2UgIlpvb2tvIiBXaWxjb3gtTydIZWFybgorSmFzb24gV2lsbGlhbXMKIEpvaG4gV2lsbGlhbXMKIFN1ZSBXaWxsaWFtcwogR2VyYWxkIFMuIFdpbGxpYW1zCkBAIC03OTYsMTEgKzg3NiwxMyBAQAogS2xhdXMtSnVlcmdlbiBXb2xmCiBEYW4gV29sZmUKIFJpY2hhcmQgV29sZmYKLUdvcmRvbiBXb3JsZXkKIERhcnJlbiBXb3JyYWxsCitHb3Jkb24gV29ybGV5CiBUaG9tYXMgV291dGVycwogSGVpa28gV3VuZHJhbQogRG91ZyBXeWF0dAorRmxvcmVudCBYaWNsdW5hCitIaXJva2F6dSBZYW1hbW90bwogS2EtUGluZyBZZWUKIEJvYiBZb2Rsb3dza2kKIERhbm55IFlvbwpAQCAtODEzLDcgKzg5NSw1IEBACiBNaWtlIFphcm5zdG9yZmYKIFNpZWJyZW4gdmFuIGRlciBaZWUKIFV3ZSBaZXNzaW4KLVRhcmVrIFppYWSOCi1QZXRlciDFc3RyYW5kCi1KZXNzZSBOb2xsZXIKLUZyZWRyaWsgSOXlcmQKK1RhcmVrIFppYWTDqQorUGV0ZXIgw4VzdHJhbmQKZGlmZiAtLWdpdCBhL01pc2MvQUlYLU5PVEVTIGIvTWlzYy9BSVgtTk9URVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjhmNTMuLjAwMDAwMDAKLS0tIGEvTWlzYy9BSVgtTk9URVMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotU3ViamVjdDogQUlYIC0gTWlzYy9BSVgtTk9URVMKLUZyb206IFZsYWRpbWlyIE1hcmFuZ296b3YgPFZsYWRpbWlyLk1hcmFuZ296b3ZAaW1hZy5mcj4KLVRvOiBndWlkb0BDTlJJLlJlc3Rvbi5WYS5VUyAoR3VpZG8gdmFuIFJvc3N1bSkKLURhdGU6IFdlZCwgNiBBdWcgMTk5NyAxMTo0MTowMCArMDIwMCAoRUVUKQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSIElORk9STUFUSU9OCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotKDEpIEEgcHJvYmxlbSBoYXMgYmVlbiByZXBvcnRlZCB3aXRoICJtYWtlIHRlc3QiIGZhaWxpbmcgYmVjYXVzZSBvZiAid2VpcmQKLSAgICBpbmRlbnRhdGlvbi4iICBTZWFyY2hpbmcgdGhlIGNvbXAubGFuZy5weXRob24gbmV3c2dyb3VwIHJldmVhbHMgc2V2ZXJhbAotICAgIHRocmVhZHMgb24gdGhpcyBzdWJqZWN0LCBhbmQgaXQgc2VlbXMgdG8gYmUgYSBjb21waWxlciBidWcgaW4gYW4gb2xkCi0gICAgdmVyc2lvbiBvZiB0aGUgQUlYIENDIGNvbXBpbGVyLiAgSG93ZXZlciwgdGhlIGNvbXBpbGVyL09TIGNvbWJpbmF0aW9uCi0gICAgd2hpY2ggaGFzIHRoaXMgcHJvYmxlbSBpcyBub3QgaWRlbnRpZmllZC4gIEluIHByZXBhcmF0aW9uIGZvciB0aGUgMS40Ci0gICAgcmVsZWFzZSwgVmxhZGltaXIgTWFyYW5nb3pvdiAoVmxhZGltaXIuTWFyYW5nb3pvdkBpbWFnLmZyKSBhbmQgTWFudXMgSGFuZAotICAgIChtaGFuZEBjc24ubmV0KSByZXBvcnRlZCBubyBzdWNoIHRyb3VibGVzIGZvciB0aGUgZm9sbG93aW5nIGNvbXBpbGVycyBhbmQKLSAgICBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zOgotICAgICAgIEFJWCBDIGNvbXBpbGVyIHZlcnNpb24gMy4xLjIgb24gQUlYIDQuMS4zIGFuZCBBSVggNC4xLjQKLSAgICAgICBBSVggQyBjb21waWxlciB2ZXJzaW9uIDEuMy4wIG9uIEFJWCAzLjIuNQotICAgIElmIHlvdSBoYXZlIHRoaXMgcHJvYmxlbSwgcGxlYXNlIHJlcG9ydCB0aGUgY29tcGlsZXIvT1MgdmVyc2lvbi4KLQotKDIpIFN0ZWZhbiBFc3NlciAoc2VATUkuVW5pLUtvZWxuLkRFKSwgaW4gd29yayBkb25lIHRvIGNvbXBpbGUgUHl0aG9uCi0gICAgMS4wLjAgb24gQUlYIDMuMi40LCByZXBvcnRzIHRoYXQgQUlYIGNvbXBpbGVycyBkb24ndCBsaWtlIHRoZSBMQU5HCi0gICAgZW52aXJvbm1lbnQgdmFyYWlhYmxlIHNldCB0byBFdXJvcGVhbiBsb2NhbGVzLiAgVGhpcyBtYWtlcyB0aGUgY29tcGlsZXIKLSAgICBnZW5lcmF0ZSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMgdXNpbmcgIiwiIGFzIHRoZSBkZWNpbWFsIHNlcGFyYXRvciwKLSAgICB3aGljaCB0aGUgYXNzZW1ibGVyIGRvZXNuJ3QgdW5kZXJzdGFuZCAob3IgcGVyaGFwcyBpdCBpcyB0aGUgb3RoZXIgd2F5Ci0gICAgYXJvdW5kLCB3aXRoIHRoZSBhc3NlbWJsZXIgZXhwZWN0aW5nLCBidXQgbm90IGdldHRpbmcgIiwiIGluIGZsb2F0Ci0gICAgbnVtYmVycykuICAiTEFORz1DOyBleHBvcnQgTEFORyIgc29sdmVzIHRoZSBwcm9ibGVtLCBhcyBkb2VzCi0gICAgIkxBTkc9QyAkKE1BS0UpIC4uLiIgaW4gdGhlIG1hc3RlciBNYWtlZmlsZS4KLQotKDMpIFRoZSBjYyAob3IgeGxjKSBjb21waWxlciBjb25zaWRlcnMgIlB5dGhvbi9jZXZhbC5jIiB0b28gY29tcGxleCB0bwotICAgIG9wdGltaXplLCBleGNlcHQgd2hlbiBpbnZva2VkIHdpdGggIi1xbWF4bWVtPTQwMDAiCi0KLSg0KSBTb21lIHByb2JsZW1zIChkdWUgdG8gX0FJWCBub3QgYmVpbmcgI2RlZmluZWQpIHdoZW4gcHl0aG9uIDEuMC4wIHdhcwotICAgIGNvbXBpbGVkIHVzaW5nICdnY2MgLWFuc2knIHdlcmUgcmVwb3J0ZWQgYnkgU3RlZmFuIEVzc2VyLCBidXQgd2VyZSBub3QKLSAgICBpbnZlc3RpZ2F0ZWQuCi0KLSg1KSBUaGUgY2MgY29tcGlsZXIgaGFzIGludGVybmFsIHZhcmlhYmxlcyBuYW1lZCAiX19hYnMiIGFuZCAiX19kaXYiLiAgVGhlc2UKLSAgICBuYW1lcyBhcmUgcmVzZXJ2ZWQgYW5kIG1heSBub3QgYmUgdXNlZCBhcyBwcm9ncmFtIHZhcmlhYmxlcyBpbiBjb21waWxlZAotICAgIHNvdXJjZS4gIChBcyBhbiBhbmVjZG90ZSBpbiBzdXBwb3J0IG9mIHRoaXMsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgIFB5dGhvbi9vcGVyYXRvci5jIGhhZCB0aGlzIHByb2JsZW0gaW4gdGhlIDEuNCBiZXRhIHJlbGVhc2VzLCBhbmQgdGhlCi0gICAgc29sdXRpb24gd2FzIHRvIHJlI2RlZmluZSBzb21lIGNvcmUtc291cmNlIHZhcmlhYmxlcyBoYXZpbmcgdGhlc2UgbmFtZXMsCi0gICAgdG8gZ2l2ZSB0aGVzZSBweXRob24gdmFyaWFibGVzIGRpZmZlcmVudCBuYW1lcyBpZiB0aGUgYnVpbGQgaXMgYmVpbmcgZG9uZQotICAgIG9uIEFJWC4pCi0KLSg2KSBBcyBtZW50aW9uZWQgaW4gdGhlIFJFQURNRSwgYnVpbGRzIGRvbmUgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJldmlvdXMgYnVpbGRzCi0gICAgKHdpdGhvdXQgIm1ha2UgY2xlYW4iIG9yICJtYWtlIGNsb2JiZXIiKSBzb21ldGltZXMgZmFpbCBmb3IgbXlzdGVyaW91cwotICAgIHJlYXNvbnMuICBUaGVyZSBhcmUgc29tZSB1bnByZWRpY3RhYmxlIHJlc3VsdHMgd2hlbiB0aGUgY29uZmlndXJhdGlvbgotICAgIGlzIGNoYW5nZWQgKHRoYXQgaXMsIGlmIHlvdSAiY29uZmlndXJlIiB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzKSBvciBpZgotICAgIGludGVybWVkaWF0ZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIHNvbWUgZmlsZXMuICBQZXJmb3JtaW5nICJtYWtlIGNsZWFuIiBvcgotICAgICJtYWtlIGNsb2JiZXIiIHJlc29sdmVzIHRoZSBwcm9ibGVtcy4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUkVBRCBTVVBQT1JUCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQXMgb2YgQUlYIHZlcnNpb24gNCwgdGhlcmUgYXJlIHR3byAoaW5jb21wYXRpYmxlKSB0eXBlcyBvZiBwdGhyZWFkcyBvbiBBSVg6Ci0gICAgICAgIGEpICBBSVggRENFIHB0aHJlYWRzIChvbiBBSVggMy4yLjUpCi0gICAgICAgIGIpICBBSVggNCBwdGhyZWFkcyAob24gQUlYIDQuMSBhbmQgdXApCi1TdXBwb3J0IGhhcyBiZWVuIGFkZGVkIHRvIFB5dGhvbiB0byBoYW5kbGUgdGhlIGRpc3RpbmN0aW9uLgotCi1UaGUgY2MgYW5kIGdjYyBjb21waWxlcnMgZG8gbm90IGluaXRpYWxpemUgcHRocmVhZHMgcHJvcGVybHkuIFRoZSBvbmx5Ci1jb21waWxlcnMgdGhhdCBjYW4gaW5pdGlhbGl6ZSBwdGhyZWFkcyBwcm9wZXJseSBhcmUgSUJNICpfciogY29tcGlsZXJzLAotd2hpY2ggdXNlIHRoZSBjcnQwX3IubyBtb2R1bGUsIGFuZCB3aGljaCBpbnZva2UgbGQgd2l0aCB0aGUgcmVlbnRyYW50Ci12ZXJzaW9uIG9mIGxpYmMgKGxpYmNfcikuCi0KLUluIG9yZGVyIHRvIGVuYWJsZSB0aHJlYWQgc3VwcG9ydCwgZm9sbG93IHRoZXNlIHN0ZXBzOgotICAgMS4gIFVuY29tbWVudCB0aGUgdGhyZWFkIG1vZHVsZSBpbiBNb2R1bGVzL1NldHVwCi0gICAyLiAgY29uZmlndXJlIC0td2l0aG91dC1nY2MgLS13aXRoLXRocmVhZCAuLi4KLSAgIDMuICBtYWtlIENDPSJjY19yIiBPUFQ9Ii1PIC1xbWF4bWVtPTQwMDAiCi0KLUZvciBleGFtcGxlLCB0byBtYWtlIHdpdGggYm90aCB0aHJlYWRzIGFuZCByZWFkbGluZSwgdXNlOgotICAuL2NvbmZpZ3VyZSAtLXdpdGhvdXQtZ2NjIC0td2l0aC10aHJlYWQgLS13aXRoLXJlYWRsaW5lPS91c3IvbG9jYWwvbGliCi0gIG1ha2UgQ0M9Y2NfciBPUFQ9Ii1PMiAtcW1heG1lbT00MDAwIgotCi1JZiB0aGUgIm1ha2UiIHdoaWNoIGlzIHVzZWQgaWdub3JlcyB0aGUgIkNDPWNjX3IiIGRpcmVjdGl2ZSwgb25lIGNvdWxkIGFsaWFzCi10aGUgY2MgY29tbWFuZCB0byBjY19yIChmb3IgZXhhbXBsZSwgaW4gQy1zaGVsbCwgcGVyZm9ybSBhbiAiYWxpYXMgY2MgY2NfciIpLgotCi1WbGFkaW1pciBNYXJhbmdvem92IChWbGFkaW1pci5NYXJhbmdvem92QGltYWcuZnIpIHByb3ZpZGVkIHRoaXMgaW5mb3JtYXRpb24sCi1hbmQgaGUgcmVwb3J0cyB0aGF0IGEgY2NfciBidWlsZCBpbml0aWFsaXplcyB0aHJlYWRzIHByb3Blcmx5IGFuZCB0aGF0IGFsbAotZGVtb3Mgb24gdGhyZWFkcyBydW4gb2theSB3aXRoIGNjX3IuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIQVJFRCBMSUJSQVJZIFNVUFBPUlQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BSVggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCB3YXMgYWRkZWQgdG8gUHl0aG9uIGluIHRoZSAxLjQgcmVsZWFzZSBieSBNYW51cwotSGFuZCAobWhhbmRAY3NuLm5ldCkgYW5kIFZsYWRpbWlyIE1hcmFuZ296b3YgKFZsYWRpbWlyLk1hcmFuZ296b3ZAaW1hZy5mcikuCi0KLVB5dGhvbiBtb2R1bGVzIG1heSBub3cgYmUgYnVpbHQgYXMgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVggdXNpbmcgdGhlIG5vcm1hbAotcHJvY2VzcyBvZiB1bmNvbW1lbnRpbmcgdGhlICIqc2hhcmVkKiIgbGluZSBpbiBNb2R1bGVzL1NldHVwIGJlZm9yZSB0aGUKLWJ1aWxkLgotCi1BSVggc2hhcmVkIGxpYnJhcmllcyByZXF1aXJlIHRoYXQgYW4gImV4cG9ydCIgYW5kICJpbXBvcnQiIGZpbGUgYmUgcHJvdmlkZWQKLWF0IGNvbXBpbGUgdGltZSB0byBsaXN0IGFsbCBleHRlcm4gc3ltYm9scyB3aGljaCBtYXkgYmUgc2hhcmVkIGJldHdlZW4KLW1vZHVsZXMuICBUaGUgImV4cG9ydCIgZmlsZSAobmFtZWQgcHl0aG9uLmV4cCkgZm9yIHRoZSBtb2R1bGVzIGFuZCB0aGUKLWxpYnJhcmllcyB0aGF0IGJlbG9uZyB0byB0aGUgUHl0aG9uIGNvcmUgaXMgY3JlYXRlZCBieSB0aGUgIm1ha2V4cF9haXgiCi1zY3JpcHQgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGxpbmsgb2YgdGhlIHB5dGhvbiBiaW5hcnkuIEl0IGxpc3RzIGFsbCBnbG9iYWwKLXN5bWJvbHMgKGV4cG9ydGVkIGR1cmluZyB0aGUgbGluaykgb2YgdGhlIG1vZHVsZXMgYW5kIHRoZSBsaWJyYXJpZXMgdGhhdAotbWFrZSB1cCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCi0KLVdoZW4gc2hhcmVkIGxpYnJhcnkgbW9kdWxlcyAoLnNvIGZpbGVzKSBhcmUgbWFkZSwgYSBzZWNvbmQgc2hlbGwgc2NyaXB0Ci1pcyBpbnZva2VkLiAgVGhpcyBzY3JpcHQgaXMgbmFtZWQgImxkX3NvX2FpeCIgYW5kIGlzIGFsc28gcHJvdmlkZWQgd2l0aAotdGhlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgTW9kdWxlcyBzdWJkaXJlY3RvcnkuICBUaGlzIHNjcmlwdCBhY3RzIGFzIGFuICJsZCIKLXdyYXBwZXIgd2hpY2ggaGlkZXMgdGhlIGV4cGxpY2l0IG1hbmFnZW1lbnQgb2YgImV4cG9ydCIgYW5kICJpbXBvcnQiIGZpbGVzOwotaXQgYWRkcyB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzIChpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIpIHRvIHRoZSBsaW5rCi1jb21tYW5kIHRoYXQgY3JlYXRlcyB0aGUgc2hhcmVkIG1vZHVsZS4gIEFtb25nIG90aGVyIHRoaW5ncywgaXQgc3BlY2lmaWVzCi10aGF0IHRoZSAicHl0aG9uLmV4cCIgZmlsZSBpcyBhbiAiaW1wb3J0IiBmaWxlIGZvciB0aGUgc2hhcmVkIG1vZHVsZS4KLQotQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBuZWl0aGVyIHRoZSBweXRob24uZXhwIGZpbGUgbm9yIHRoZSBtYWtleHBfYWl4Ci1vciBsZF9zb19haXggc2NyaXB0cyBhcmUgaW5zdGFsbGVkIGJ5IHRoZSBtYWtlIHByb2NlZHVyZSwgc28geW91IHNob3VsZAotcmVtZW1iZXIgdG8ga2VlcCB0aGVzZSBhbmQvb3IgY29weSB0aGVtIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uIGZvcgotc2FmZWtlZXBpbmcgaWYgeW91IHdpc2ggdG8gdXNlIHRoZW0gdG8gYWRkIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlcyB0bwotcHl0aG9uLiAgSG93ZXZlciwgaWYgdGhlIG1ha2UgcHJvY2VzcyBoYXMgYmVlbiB1cGRhdGVkIHNpbmNlIHRoaXMgd3JpdGluZywKLXRoZXNlIGZpbGVzIE1BWSBoYXZlIGJlZW4gaW5zdGFsbGVkIGZvciB5b3UgZHVyaW5nIHRoZSBtYWtlIGJ5IHRoZQotTElCQUlOU1RBTEwgcnVsZSwgaW4gd2hpY2ggY2FzZSB0aGUgbmVlZCB0byBtYWtlIHNhZmUgY29waWVzIGlzIG9idmlhdGVkLgotCi1JZiB5b3Ugd2lzaCB0byBhZGQgYSBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZSB0byB0aGUgbGFuZ3VhZ2UsIHlvdSB3b3VsZCBmb2xsb3cKLXRoZSBzdGVwcyBnaXZlbiBpbiB0aGUgZXhhbXBsZSBiZWxvdyAodGhlIGV4YW1wbGUgYWRkcyB0aGUgc2hhcmVkIGV4dGVuc2lvbgotbW9kdWxlICJzcGFtIiB0byBweXRob24pOgotICAgIDEuICBNYWtlIHN1cmUgdGhhdCAibGRfc29fYWl4IiBhbmQgIm1ha2V4cF9haXgiIGFyZSBpbiB5b3VyIHBhdGguCi0gICAgMi4gIFRoZSAicHl0aG9uLmV4cCIgZmlsZSBzaG91bGQgYmUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgIDMuICBJc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIG9yIGluY2x1ZGUgdGhlbSBpbiB5b3VyIE1ha2VmaWxlOgotICAgICAgICAgICAgY2MgLWMgc3BhbW1vZHVsZS5jCi0gICAgICAgICAgICBsZF9zb19haXggY2Mgc3BhbW1vZHVsZS5vIC1vIHNwYW1tb2R1bGUuc28KLQotRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQsIGV4YW1pbmUgdGhlCi1jb250ZW50cyBvZiB0aGUgImxkX3NvX2FpeCIgYW5kICJtYWtleHBfYWl4IiBzY3JpcHRzIG9yIHJlZmVyIHRvIHRoZSBBSVgKLWRvY3VtZW50YXRpb24uCi0KLU5PVEU6ICBJZiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpcyB3cml0dGVuIGluIEMrKyBhbmQgY29udGFpbnMgdGVtcGxhdGVzLAotICAgICAgIGFuIGFsdGVybmF0aXZlIHRvICJsZF9zb19haXgiIGlzIHRoZSAvdXNyL2xwcC94bEMvYmluL21ha2VDKytTaGFyZWRMaWIKLSAgICAgICBzY3JpcHQuICBDaHJpcyBNeWVycyAobXllcnNAVEMuQ29ybmVsbC5FRFUpIHJlcG9ydHMgdGhhdCBsZF9zb19haXgKLSAgICAgICB3b3JrcyB3ZWxsIGZvciBzb21lIEMrKyAoaW5jbHVkaW5nIHRoZSBDKysgdGhhdCBpcyBnZW5lcmF0ZWQKLSAgICAgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBQeXRob24gU1dJRyBwYWNrYWdlIFtTV0lHIGNhbiBiZSBmb3VuZCBhdAotICAgICAgIGh0dHA6Ly93d3cuY3MudXRhaC5lZHUvfmJlYXpsZXkvU1dJRy9zd2lnLmh0bWxdKS4gIEhvd2V2ZXIsIGl0IGlzIG5vdAotICAgICAgIGtub3duIHdoZXRoZXIgbWFrZUMrK1NoYXJlZExpYiBjYW4gYmUgdXNlZCBhcyBhIGNvbXBsZXRlIHN1YnN0aXR1dGUKLSAgICAgICBmb3IgbGRfc29fYWl4LgotCi1BY2NvcmRpbmcgdG8gR2FyeSBIb29rIGZyb20gSUJNLCB0aGUgZm9ybWF0IG9mIHRoZSBleHBvcnQgZmlsZSBjaGFuZ2VkCi1pbiBBSVggNC4yLiAgRm9yIEFJWCA0LjIgYW5kIGxhdGVyLCBhIHBlcmlvZCAiLiIgaXMgcmVxdWlyZWQgb24gdGhlCi1maXJzdCBsaW5lIGFmdGVyICIjISIuICBJZiBweXRob24gY3Jhc2hlcyB3aGlsZSBpbXBvcnRpbmcgYSBzaGFyZWQKLWxpYnJhcnksIHlvdSBjYW4gdHJ5IG1vZGlmeWluZyB0aGUgTElOS0NDIHZhcmlhYmxlIGluIHRoZSBNYWtlZmlsZS4KLUl0IHByb2JhYmx5IGxvb2tzIGxpa2UgdGhpczoKLQotCUxJTktDQz0gICAgICQoc3JjZGlyKS9Nb2R1bGVzL21ha2V4cF9haXggTW9kdWxlcy9weXRob24uZXhwIFwiXCIgJChMSUJSQVJZKTsgJChQVVJJRlkpICQoQ1hYKQotCi1Zb3Ugc2hvdWxkIG1vZGlmeSB0aGUgXCJcIiB0byBiZSBhIHBlcmlvZDoKLQotCUxJTktDQz0gICAgICQoc3JjZGlyKS9Nb2R1bGVzL21ha2V4cF9haXggTW9kdWxlcy9weXRob24uZXhwIC4gJChMSUJSQVJZKTsgJChQVVJJRlkpICQoQ1hYKQotCi1Vc2luZyBhIHBlcmlvZCBmaXhlZCB0aGUgcHJvYmxlbSBpbiB0aGUgc25ha2UgZmFybS4gIFlNTVYuCi1UaGlzIGZpeCBoYXMgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byBQeXRob24gMi4zLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01pc2MvQmVPUy1zZXR1cC5weSBiL01pc2MvQmVPUy1zZXR1cC5weQppbmRleCBjNWUwMmNjLi4yYjRjYjFmIDEwMDY0NAotLS0gYS9NaXNjL0JlT1Mtc2V0dXAucHkKKysrIGIvTWlzYy9CZU9TLXNldHVwLnB5CkBAIC0zNTYsNyArMzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gZGJsaWIpICkKIAogICAgICAgICAjIFVuaXgtb25seSBtb2R1bGVzCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ21hYycsICd3aW4zMiddOgorICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgIyBTdGVlbiBMdW1ob2x0J3MgdGVybWlvcyBtb2R1bGUKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Rlcm1pb3MnLCBbJ3Rlcm1pb3MuYyddKSApCiAgICAgICAgICAgICAjIEplcmVteSBIeWx0b24ncyBybGltaXQgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9NaXNjL0hJU1RPUlkgYi9NaXNjL0hJU1RPUlkKaW5kZXggYWIxYjFlYy4uYTI5YjkwNyAxMDA2NDQKLS0tIGEvTWlzYy9ISVNUT1JZCisrKyBiL01pc2MvSElTVE9SWQpAQCAtOTA1MCw3ICs5MDUwLDcgQEAKIFB5dGhvbiBjb2RlLiAgVGhlIGxpbWl0IGV4aXN0cyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBmcm9tCiBvdmVyZmxvd2luZyB0aGUgQyBzdGFjayBhbmQgY2F1c2luZyBhIGNvcmUgZHVtcC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCiAxMDAwLiAgVGhlIG1heGltdW0gc2FmZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIGNhbiBiZSBmb3VuZAotYnkgcnVubmluZyBNaXNjL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkuCitieSBydW5uaW5nIFRvb2xzL3NjcmlwdHMvZmluZF9yZWN1cnNpb25saW1pdC5weS4KIAogTmV3IE1vZHVsZXMgYW5kIFBhY2thZ2VzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA0NDkzNDhlLi5mMWRhOTJjIDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0xLDE3NSArMSw2MzYgQEAKLSsrKysrKysrKysrCiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotKGVkaXRvcnM6IGNoZWNrIE5FV1MuaGVscCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgZWRpdGluZyBORVdTIHVzaW5nIFJlU1QuKQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNz8KK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNy4yPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICpSZWxlYXNlIGRhdGU6IFhYWFgtWFgtWFgqCiAKLSpOT1RFOiBQeXRob24gMi42IGlzIGluIHNlY3VyaXR5LWZpeC1vbmx5IG1vZGUuICBObyBub24tc2VjdXJpdHkgYnVnIGZpeGVzIGFyZQotIGFsbG93ZWQuICBQeXRob24gMi42LjcgYW5kIGJleW9uZCB3aWxsIGJlIHNvdXJjZSBvbmx5IHJlbGVhc2VzLioKLQotCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjMTA0NTE6IG1lbW9yeXZpZXcgb2JqZWN0cyBjb3VsZCBhbGxvdyB0byBtdXRhdGUgYSByZWFkYWJsZSBidWZmZXIuCisgIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCiAKLS0gSXNzdWUgIzkxMjk6IHNtdHBkLnB5IGlzIHZ1bG5lcmFibGUgdG8gRG9TIGF0dGFja3MgZGVyaXZpbmcgZnJvbSBtaXNzaW5nCi0gIGVycm9yIGhhbmRsaW5nIHdoZW4gYWNjZXB0aW5nIGEgbmV3IGNvbm5lY3Rpb24uCistIElzc3VlICMxMDg5MjogRG9uJ3Qgc2VnZmF1bHQgd2hlbiB0cnlpbmcgdG8gZGVsZXRlIF9fYWJzdHJhY3RtZXRob2RzX18gZnJvbSBhCisgIGNsYXNzLgogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSBJc3N1ZSAjODAyMDogQXZvaWQgYSBjcmFzaCB3aGVyZSB0aGUgc21hbGwgb2JqZWN0cyBhbGxvY2F0b3Igd291bGQgcmVhZAorICBub24tUHl0aG9uIG1hbmFnZWQgbWVtb3J5IHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLgorICBQYXRjaCBieSBNYXR0IEJhbmR5LgogCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTA4LTI0KgorLSBJc3N1ZSAjMTEwMDQ6IFJlcGFpcmVkIGVkZ2UgY2FzZSBpbiBkZXF1ZS5jb3VudCgpLgogCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzgyNzg6IE9uIFdpbmRvd3MgYW5kIHdpdGggYSBOVEZTIGZpbGVzeXN0ZW0sIG9zLnN0YXQoKSBhbmQgb3MudXRpbWUoKQorICBjYW4gbm93IGhhbmRsZSBkYXRlcyBhZnRlciAyMDM4LgorCistIElzc3VlICM0MjM2OiBQeV9Jbml0TW9kdWxlNCBub3cgY2hlY2tzIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRpcmVjdGx5CisgIHJhdGhlciB0aGFuIHRoZSBQeV9Jc0luaXRpYWxpemVkIGZsYWcsIGF2b2lkaW5nIGEgRmF0YWwgUHl0aG9uCisgIGVycm9yIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVuIGFuIGltcG9ydCBpcyBkb25lIGluIF9fZGVsX18uCisKKy0gSXNzdWUgIzEwNjc0OiBSZW1vdmUgdW51c2VkICdkaWN0bWFrZXInIHJ1bGUgZnJvbSBncmFtbWFyLgorCistIElzc3VlICMxMDU5NjogRml4IGZsb2F0Ll9fbW9kX18gdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMKKyAgZmxvYXQuX19kaXZtb2RfXyB3aXRoIHJlc3BlY3QgdG8gc2lnbmVkIHplcm9zLiAgLTQuMCAlIDQuMCBzaG91bGQgYmUKKyAgMC4wLCBub3QgLTAuMC4KKworLSBJc3N1ZSAjMTEzODY6IGJ5dGVhcnJheS5wb3AoKSBub3cgdGhyb3dzIEluZGV4RXJyb3Igd2hlbiB0aGUgYnl0ZWFycmF5IGlzCisgIGVtcHR5LCBpbnN0ZWFkIG9mIE92ZXJmbG93RXJyb3IuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTEzMDY6IG1haWxib3ggaW4gY2VydGFpbiBjYXNlcyBhZGFwdHMgdG8gYW4gaW5hYmlsaXR5IHRvIG9wZW4KKyAgY2VydGFpbiBmaWxlcyBpbiByZWFkLXdyaXRlIG1vZGUuICBQcmV2aW91c2x5IGl0IGRldGVjdGVkIHRoaXMgYnkKKyAgY2hlY2tpbmcgZm9yIEVBQ0NFUywgbm93IGl0IGFsc28gY2hlY2tzIGZvciBFUk9GUy4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjYgcmMgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycworICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCiAKLSpSZWxlYXNlIGRhdGU6IDIwMTAtMDgtMTYqCistIElzc3VlICMxMTMyNjogQWRkIHRoZSBtaXNzaW5nIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbiBmb3IgU1NMIHNvY2tldHMsCisgIGFuZCBtYWtlIGl0IHdvcmsgZm9yIG5vbi1ibG9ja2luZyBjb25uZWN0cy4KIAotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjMTA5NTY6IEJ1ZmZlcmVkIEkvTyBjbGFzc2VzIHJldHJ5IHJlYWRpbmcgb3Igd3JpdGluZyBhZnRlciBhIHNpZ25hbAorICBoYXMgYXJyaXZlZCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgogCi0tIElzc3VlICM5NjAwOiBEb24ndCB1c2UgcmVsYXRpdmUgaW1wb3J0IGZvciBfbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3MuCistIElzc3VlICMxMDY4MDogRml4IG11dHVhbGx5IGV4Y2x1c2l2ZSBhcmd1bWVudHMgZm9yIGFyZ3VtZW50IGdyb3VwcyBpbgorICBhcmdwYXJzZS4KIAotLSBJc3N1ZSAjODY4ODogUmV2ZXJ0IHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAyLjYuNnJjMSAobWFraW5nIERpc3R1dGlscwotICByZWNhbGN1bGF0ZSBNQU5JRkVTVCBldmVyeSB0aW1lKS4KKy0gSXNzdWUgIzQ2ODE6IEFsbG93IG1tYXAoKSB0byB3b3JrIG9uIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KKyAgNEdCLCBldmVuIG9uIDMyLWJpdCBidWlsZHMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLCBhZGFwdGVkIGZvcgorICAzMi1iaXQgV2luZG93cy4KIAotLSBJc3N1ZSAjNTc5ODogSGFuZGxlIHNlbGVjdC5wb2xsIGZsYWcgb2RkaXRpZXMgcHJvcGVybHkgb24gT1MgWC4KLSAgVGhpcyBmaXhlcyB0ZXN0X2FzeW5jaGF0IGFuZCB0ZXN0X3NtdHBsaWIgZmFpbHVyZXMgb24gT1MgWC4KKy0gSXNzdWUgIzEwMzYwOiBJbiBXZWFrU2V0LCBkbyBub3QgcmFpc2UgVHlwZUVycm9ycyB3aGVuIHRlc3RpbmcgZm9yCisgIG1lbWJlcnNoaXAgb2Ygbm9uLXdlYWtyZWZhYmxlIG9iamVjdHMuCiAKLS0gSXNzdWUgIzk1NDM6IEZpeCByZWdyZXNzaW9uIGluIHNvY2tldC5weSBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjYuNiByYyAxCi0gIGluIHI4MzYyNC4KKy0gSXNzdWUgIzEwNTQ5OiBGaXggcHlkb2MgdHJhY2ViYWNrIHdoZW4gdGV4dC1kb2N1bWVudGluZyBjZXJ0YWluIGNsYXNzZXMuCisKKy0gSXNzdWUgIzk0MDI4NjogcHlkb2MuSGVscGVyLmhlbHAoKSBpZ25vcmVzIGlucHV0L291dHB1dCBpbml0IHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzExMTcxOiBGaXggZGV0ZWN0aW9uIG9mIGNvbmZpZy9NYWtlZmlsZSB3aGVuIC0tcHJlZml4ICE9CisgIC0tZXhlYy1wcmVmaXgsIHdoaWNoIGNhdXNlZCBQeXRob24gdG8gbm90IHN0YXJ0LgorCistIElzc3VlICMxMTExNjogYW55IGVycm9yIGR1cmluZyBhZGRpdGlvbiBvZiBhIG1lc3NhZ2UgdG8gYSBtYWlsYm94IG5vdyBjYXVzZXMKKyAgYSByb2xsYmFjaywgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBtYWlsYm94IHBhcnRpYWxseSBtb2RpZmllZC4KKworLSBJc3N1ZSAjODI3NTogRml4IHBhc3Npbmcgb2YgY2FsbGJhY2sgYXJndW1lbnRzIHdpdGggY3R5cGVzIHVuZGVyIFdpbjY0LgorICBQYXRjaCBieSBTdGFuIE1paGFpLgorCistIElzc3VlICMxMDk0MDogV29ya2Fyb3VuZCBhbiBJRExFIGhhbmcgb24gTWFjIE9TIFggMTAuNiB3aGVuIHVzaW5nIHRoZQorICBtZW51IGFjY2VsZXJhdG9ycyBmb3IgT3BlbiBNb2R1bGUsIEdvIHRvIExpbmUsIGFuZCBOZXcgSW5kZW50IFdpZHRoLgorICBUaGUgYWNjZWxlcmF0b3JzIHN0aWxsIHdvcmsgYnV0IG5vIGxvbmdlciBhcHBlYXIgaW4gdGhlIG1lbnUgaXRlbXMuCisKKy0gSXNzdWUgIzEwOTA3OiBXYXJuIE9TIFggMTAuNiBJRExFIHVzZXJzIHRvIHVzZSBBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LCByYXRoZXIKKyAgdGhhbiB0aGUgY3VycmVudGx5IHByb2JsZW1hdGljIEFwcGxlLXN1cHBsaWVkIG9uZSwgd2hlbiBydW5uaW5nIHdpdGggdGhlCisgIDY0LS8zMi1iaXQgaW5zdGFsbGVyIHZhcmlhbnQuCisKKy0gSXNzdWUgIzExMDUyOiBDb3JyZWN0IElETEUgbWVudSBhY2NlbGVyYXRvcnMgb24gTWFjIE9TIFggZm9yIFNhdmUKKyAgY29tbWFuZHMuCisKKy0gSXNzdWUgIzEwOTQ5OiBJbXByb3ZlZCByb2J1c3RuZXNzIG9mIHJvdGF0aW5nIGZpbGUgaGFuZGxlcnMuCisKKy0gSXNzdWUgIzEwOTU1OiBGaXggYSBwb3RlbnRpYWwgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gbW1hcCgpIGEgZmlsZSBwYXN0IGl0cworICBsZW5ndGguICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMDg5ODogQWxsb3cgY29tcGlsaW5nIHRoZSBwb3NpeCBtb2R1bGUgd2hlbiB0aGUgQyBsaWJyYXJ5IGRlZmluZXMKKyAgYSBzeW1ib2wgbmFtZWQgRlNUQVQuCisKKy0gSXNzdWUgIzYwNzU6IElETEUgb24gTWFjIE9TIFggbm93IHdvcmtzIHdpdGggYm90aCBDYXJib24gQXF1YVRrIGFuZAorICBDb2NvYSBBcXVhVGsuCisKKy0gSXNzdWUgIzEwOTE2OiBtbWFwIHNob3VsZCBub3Qgc2VnZmF1bHQgd2hlbiBhIGZpbGUgaXMgbWFwcGVkIHVzaW5nIDAgYXMKKyAgbGVuZ3RoIGFuZCBhIG5vbi16ZXJvIG9mZnNldCwgYW5kIGFuIGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZQorICBpcyBtYWRlIChJbmRleEVycm9yIGlzIHJhaXNlZCBpbnN0ZWFkKS4gIFBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMDg3NTogVXBkYXRlIFJlZ3VsYXIgRXhwcmVzc2lvbiBIT1dUTzsgcGF0Y2ggYnkgJ1NpbGVudEdob3N0Jy4KKworLSBJc3N1ZSAjMTA4Mjc6IENoYW5nZWQgdGhlIHJ1bGVzIGZvciAyLWRpZ2l0IHllYXJzLiAgVGhlIHRpbWUuYXNjdGltZQorICBmdW5jdGlvbiB3aWxsIG5vdyBmb3JtYXQgYW55IHllYXIgd2hlbiBgYHRpbWUuYWNjZXB0MmR5ZWFyYGAgaXMKKyAgZmFsc2UgYW5kIHdpbGwgYWNjZXB0IHllYXJzID49IDEwMDAgb3RoZXJ3aXNlLiAgVGhlIHllYXIgcmFuZ2UKKyAgYWNjZXB0ZWQgYnkgYGB0aW1lLm1rdGltZWBgIGFuZCBgYHRpbWUuc3RyZnRpbWVgYCBpcyBzdGlsbCBzeXN0ZW0KKyAgZGVwZW5kZW50LCBidXQgYGB0aW1lLm1rdGltZWBgIHdpbGwgbm93IGFjY2VwdCBmdWxsIHJhbmdlIHN1cHBvcnRlZAorICBieSB0aGUgT1MuICBDb252ZXJzaW9uIG9mIDItZGlnaXQgeWVhcnMgdG8gNC1kaWdpdCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDg2OTogRml4ZWQgYnVnIHdoZXJlIGFzdC5pbmNyZW1lbnRfbGluZW5vIG1vZGlmaWVkIHRoZSByb290CisgIG5vZGUgdHdpY2UuCisKKy0gSXNzdWUgIzc4NTg6IFJhaXNlIGFuIGVycm9yIHByb3Blcmx5IHdoZW4gb3MudXRpbWUoKSBmYWlscyB1bmRlciBXaW5kb3dzCisgIG9uIGFuIGV4aXN0aW5nIGZpbGUuCisKKy0gSXNzdWUgIzM4Mzk6IHdzZ2lyZWYgc2hvdWxkIG5vdCBvdmVycmlkZSBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBzZXQgYnkKKyAgdGhlIGFwcGxpY2F0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBDbG92aXMgRmFicmljaW8uCisKKy0gSXNzdWUgIzEwODA2LCBpc3N1ZSAjOTkwNTogRml4IHN1YnByb2Nlc3MgcGlwZXMgd2hlbiBzb21lIG9mIHRoZSBzdGFuZGFyZAorICBmaWxlIGRlc2NyaXB0b3JzICgwLCAxLCAyKSBhcmUgY2xvc2VkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzQ2NjI6IG9zLnRlbXBuYW0oKSwgb3MudG1wZmlsZSgpIGFuZCBvcy50bXBuYW0oKSBub3cgcmFpc2UgYSBweTNrCisgIERlcHJlY2F0aW9uV2FybmluZy4KKworLSBTdWJjbGFzc2VzIG9mIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIF9fbWlzc2luZ19fLgorCistIElzc3VlIDEwNzUzIC0gQ2hhcmFjdGVycyAnOycsJz0nIGFuZCAnLCcgaW4gdGhlIFBBVEhfSU5GTyBlbnZpcm9ubWVudAorICB2YXJpYWJsZSB3b24ndCBiZSBxdW90ZWQgd2hlbiB0aGUgVVJJIGlzIGNvbnN0cnVjdGVkIGJ5IHRoZSB3c2dpcmVmLnV0aWwgJ3MKKyAgcmVxdWVzdF91cmkgbWV0aG9kLiBBY2NvcmRpbmcgdG8gUkZDIDM5ODYsIHRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIGEgcGFydCBvZgorICBwYXJhbXMgaW4gUEFUSCBjb21wb25lbnQgb2YgVVJJIGFuZCBuZWVkIG5vdCBiZSBxdW90ZWQuCisKKy0gSXNzdWUgMTA3Mzg6IEZpeCB3ZWJicm93c2VyLk9wZXJhLnJhaXNlX29wdHMKKworLSBJc3N1ZSA5ODI0OiBTaW1wbGVDb29raWUgbm93IGVuY29kZXMgLCBhbmQgOyBpbiB2YWx1ZXMgdG8gY2F0ZXIgdG8gaG93CisgIGJyb3dzZXJzIGFjdHVhbGx5IHBhcnNlIGNvb2tpZXMuCisKKy0gSXNzdWUgIzEzNzk0MTY6IGVsaW1pbmF0ZWQgYSBzb3VyY2Ugb2YgYWNjaWRlbnRhbCB1bmljb2RlIHByb21vdGlvbiBpbgorICBlbWFpbC5oZWFkZXIuSGVhZGVyLmVuY29kZS4KKworLSBJc3N1ZSAjNTI1OC8jMTA2NDI6IGlmIHNpdGUucHkgZW5jb3VudGVycyBhIC5wdGggZmlsZSB0aGF0IGdlbmVyYXRlcyBhbiBlcnJvciwKKyAgaXQgbm93IHByaW50cyB0aGUgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQgdHJhY2ViYWNrIHRvIHN0ZGVyciBhbmQgc2tpcHMKKyAgdGhlIHJlc3Qgb2YgdGhhdCBpbmRpdmlkdWFsIGZpbGUsIGluc3RlYWQgb2Ygc3RvcHBpbmcgcHJvY2Vzc2luZyBlbnRpcmVseS4KKworLSBJc3N1ZSAjMTA3NTA6IFRoZSBgYHJhd2BgIGF0dHJpYnV0ZSBvZiBidWZmZXJlZCBJTyBvYmplY3RzIGlzIG5vdyByZWFkLW9ubHkuCisKKy0gSXNzdWUgIzEwMjQyOiB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJdGVtc0VxdWFsIG1ha2VzIHRvbyBtYW55IGFzc3VtcHRpb25zCisgIGFib3V0IGlucHV0LgorCistIElzc3VlICMxMDYxMTogU3lzdGVtRXhpdCBzaG91bGQgbm90IGNhdXNlIGEgdW5pdHRlc3QgdGVzdCBydW4gdG8gZXhpdC4KKworLSBJc3N1ZSAjNjc5MTogTGltaXQgaGVhZGVyIGxpbmUgbGVuZ3RoICh0byA2NTUzNSBieXRlcykgaW4gaHR0cC5jbGllbnQsCisgIHRvIGF2b2lkIGRlbmlhbCBvZiBzZXJ2aWNlcyBmcm9tIHRoZSBvdGhlciBwYXJ0eS4KKworLSBJc3N1ZSAjMTA0MDQ6IFVzZSBjdGwtYnV0dG9uLTEgb24gT1NYIGZvciB0aGUgY29udGV4dCBtZW51IGluIElkbGUuCisKKy0gSXNzdWUgIzk5MDc6IEZpeCB0YWIgaGFuZGxpbmcgb24gT1NYIHdoZW4gdXNpbmcgZWRpdGxpbmUgYnkgY2FsbGluZworICBybF9pbml0aWFsaXplIGZpcnN0LCB0aGVuIHNldHRpbmcgb3VyIGN1c3RvbSBkZWZhdWx0cywgdGhlbiByZWFkaW5nIC5lZGl0cmMuCisKKy0gSXNzdWUgIzQxODg6IEF2b2lkIGNyZWF0aW5nIGR1bW15IHRocmVhZCBvYmplY3RzIHdoZW4gbG9nZ2luZyBvcGVyYXRpb25zCisgIGZyb20gdGhlIHRocmVhZGluZyBtb2R1bGUgKHdpdGggdGhlIGludGVybmFsIHZlcmJvc2UgZmxhZyBhY3RpdmF0ZWQpLgorCistIElzc3VlICM5NzIxOiBGaXggdGhlIGJlaGF2aW9yIG9mIHVybGpvaW4gd2hlbiB0aGUgcmVsYXRpdmUgdXJsIHN0YXJ0cyB3aXRoIGEKKyAgJzsnIGNoYXJhY3Rlci4gUGF0Y2ggYnkgV2VzIENob3cuCisKKy0gSXNzdWUgIzEwNzE0OiBMaW1pdCBsZW5ndGggb2YgaW5jb21pbmcgcmVxdWVzdCBpbiBodHRwLnNlcnZlciB0byA2NTUzNiBieXRlcworICBmb3Igc2VjdXJpdHkgcmVhc29ucy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzk1NTg6IEZpeCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQgd2l0aCBWUyA4LjAuCisKKy0gSXNzdWUgIzEwNjk1OiBwYXNzaW5nIHRoZSBwb3J0IGFzIGEgc3RyaW5nIHZhbHVlIHRvIHRlbG5ldGxpYiBubyBsb25nZXIKKyAgY2F1c2VzIGRlYnVnIG1vZGUgdG8gZmFpbC4KKworLSBJc3N1ZSAjMTAxMDc6IFdhcm4gYWJvdXQgdW5zYXZlZCBmaWxlcyBpbiBJRExFIG9uIE9TWC4KKworLSBJc3N1ZSAjMTA0MDY6IEVuYWJsZSBSc3RyaXAgSURMRSBleHRlbnNpb24gb24gT1NYIChqdXN0IGxpa2Ugb24gb3RoZXIKKyAgcGxhdGZvcm1zKS4KKworLSBJc3N1ZSAjMTA0Nzg6IFJlZW50cmFudCBjYWxscyBpbnNpZGUgYnVmZmVyZWQgSU8gb2JqZWN0cyAoZm9yIGV4YW1wbGUgYnkKKyAgd2F5IG9mIGEgc2lnbmFsIGhhbmRsZXIpIG5vdyByYWlzZSBhIFJ1bnRpbWVFcnJvciBpbnN0ZWFkIG9mIGZyZWV6aW5nIHRoZQorICBjdXJyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzEwNDk3OiBGaXggaW5jb3JyZWN0IHVzZSBvZiBnZXR0ZXh0IGluIGFyZ3BhcnNlLgorCistIElzc3VlICMxMDQ2NDogbmV0cmMgbm93IGNvcnJlY3RseSBoYW5kbGVzIGxpbmVzIHdpdGggZW1iZWRkZWQgJyMnIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE3MzE3MTc6IEZpeGVkIHRoZSBwcm9ibGVtIHdoZXJlIHN1YnByb2Nlc3Mud2FpdCgpIGNvdWxkIGNhdXNlIGFuCisgIE9TRXJyb3IgZXhjZXB0aW9uIHdoZW4gVGhlIE9TIGhhZCBiZWVuIHRvbGQgdG8gaWdub3JlIFNJR0NMRCBpbiBvdXIgcHJvY2VzcworICBvciBvdGhlcndpc2Ugbm90IHdhaXQgZm9yIGV4aXRpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCistIElzc3VlICM5NTA5OiBhcmdwYXJzZSBub3cgcHJvcGVybHkgaGFuZGxlcyBJT0Vycm9ycyByYWlzZWQgYnkKKyAgYXJncGFyc2UuRmlsZVR5cGUuCiAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICM3NTY3OiBEb24ndCBjYWxsIGBzZXR1cHRlcm0nIHR3aWNlLgorLSBJc3N1ZSAjNjc4MjUwOiBNYWtlIG1tYXAgZmx1c2ggYSBub29wIG9uIEFDQ0VTU19SRUFEIGFuZCBBQ0NFU1NfQ09QWS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzEwNzA5OiBBZGQgdXBkYXRlZCBBSVggbm90ZXMgaW4gTWlzYy9SRUFETUUuQUlYLgorCistIElzc3VlICMxMTE4NDogRml4IGxhcmdlLWZpbGUgc3VwcG9ydCBvbiBBSVguCisKKy0gSXNzdWUgIzk0MTM0NjogRml4IGJyb2tlbiBzaGFyZWQgbGlicmFyeSBidWlsZCBvbiBBSVguCisKKy0gSXNzdWUgIzExMjY4OiBQcmV2ZW50IE1hYyBPUyBYIEluc3RhbGxlciBmYWlsdXJlIGlmIERvY3VtZW50YXRpb24KKyAgcGFja2FnZSBoYWQgcHJldmlvdXNseSBiZWVuIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTEwNzk6IFRoZSAvQXBwbGljYXRpb25zL1B5dGhvbiB4LnggZm9sZGVyIGNyZWF0ZWQgYnkgdGhlIE1hYworICBPUyBYIGluc3RhbGxlcnMgbm93IGluY2x1ZGVzIGEgbGluayB0byB0aGUgaW5zdGFsbGVkIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzExMDU0OiBBbGxvdyBNYWMgT1MgWCBpbnN0YWxsZXIgYnVpbGRzIHRvIGFnYWluIHdvcmsgb24gMTAuNSB3aXRoCisgIHRoZSBzeXN0ZW0tcHJvdmlkZWQgUHl0aG9uLgorCistIElzc3VlICMxMDg0MzogVXBkYXRlIHRoaXJkLXBhcnR5IGxpYnJhcnkgdmVyc2lvbnMgdXNlZCBpbiBPUyBYCisgIDMyLWJpdCBpbnN0YWxsZXIgYnVpbGRzOiBiemlwMiAxLjAuNiwgcmVhZGxpbmUgNi4xLjIsIFNRTGl0ZSAzLjcuNAorICAod2l0aCBGVFMzL0ZUUzQgYW5kIFJUUkVFIGVuYWJsZWQpLCBhbmQgbmN1cnNlc3cgNS41ICh3aWRlLWNoYXIKKyAgc3VwcG9ydCBlbmFibGVkKS4KKworLSBEb24ndCBydW4gcGdlbiB0d2ljZSB3aGVuIHVzaW5nIG1ha2UgLWouCisKKy0gSXNzdWUgIzc3MTY6IFVuZGVyIFNvbGFyaXMsIGRvbid0IGFzc3VtZSBleGlzdGVuY2Ugb2YgL3Vzci94cGc0L2Jpbi9ncmVwIGluCisgIHRoZSBjb25maWd1cmUgc2NyaXB0IGJ1dCB1c2UgJEdSRVAgaW5zdGVhZC4gIFBhdGNoIGJ5IEZhYmlhbiBHcm9mZmVuLgorCistIElzc3VlICMxMDQ3NTogRG9uJ3QgaGFyZGNvZGUgY29tcGlsZXJzIGZvciBMRFNIQVJFRC9MRENYWFNIQVJFRCBvbiBOZXRCU0QKKyAgYW5kIERyYWdvbkZseSBCU0QuICBQYXRjaCBieSBOaWNvbGFzIEpvbHkuCisKKy0gSXNzdWUgIzEwNjU1OiBGaXggdGhlIGJ1aWxkIG9uIFBvd2VyUEMgb24gTGludXggd2l0aCBHQ0Mgd2hlbiBidWlsZGluZyB3aXRoCisgIHRpbWVzdGFtcCBwcm9maWxpbmcgKC0td2l0aC10c2MpOiB0aGUgcHJlcHJvY2Vzc29yIHRlc3QgZm9yIHRoZSBQb3dlclBDCisgIHN1cHBvcnQgbm93IGxvb2tzIGZvciAiX19wb3dlcnBjX18iIGFzIHdlbGwgYXMgIl9fcHBjX18iOiB0aGUgbGF0dGVyIHNlZW1zIHRvCisgIG9ubHkgYmUgcHJlc2VudCBvbiBPUyBYOyB0aGUgZm9ybWVyIGlzIHRoZSBjb3JyZWN0IG9uZSBmb3IgTGludXggd2l0aCBHQ0MuCiAKIFRlc3RzCiAtLS0tLQogCi0tIElzc3VlICM5NTY4OiBGaXggdGVzdF91cmxsaWIyX2xvY2FsbmV0IG9uIE9TIFggMTAuMy4KKy0gSXNzdWUgIzEwODIyOiBGaXggdGVzdF9wb3NpeDp0ZXN0X2dldGdyb3VwcyBmYWlsdXJlIHVuZGVyIFNvbGFyaXMuICBQYXRjaAorICBieSBSb3NzIExhZ2Vyd2FsbC4KIAotLSBJc3N1ZSAjOTE0NTogRml4IHRlc3RfY29lcmNpb24gZmFpbHVyZSBpbiByZWZsZWFrIHJ1bnMuCistIElzc3VlICM2MjkzOiBIYXZlIHJlZ3J0ZXN0LnB5IGVjaG8gYmFjayBzeXMuZmxhZ3MuICBUaGlzIGlzIGRvbmUgYnkgZGVmYXVsdAorICBpbiB3aG9sZSBydW5zIGFuZCBlbmFibGVkIHNlbGVjdGl2ZWx5IHVzaW5nIGBgLS1oZWFkZXJgYCB3aGVuIHJ1bm5pbmcgYW4KKyAgZXhwbGljaXQgbGlzdCBvZiB0ZXN0cy4gIE9yaWdpbmFsIHBhdGNoIGJ5IENvbGxpbiBXaW50ZXIuCiAKLS0gSXNzdWUgIzg0MzM6IEZpeCB0ZXN0X2N1cnNlcyBmYWlsdXJlIGNhdXNlZCBieSBuZXdlciB2ZXJzaW9ucyBvZgotICBuY3Vyc2VzIHJldHVybmluZyBFUlIgZnJvbSBnZXRtb3VzZSgpIHdoZW4gdGhlcmUgYXJlIG5vIG1vdXNlCi0gIGV2ZW50cyBhdmFpbGFibGUuCistIElzc3VlICM3NzU5NjQ6IHRlc3RfZ3JwIG5vdyBza2lwcyBZUC9OSVMgZW50cmllcyBpbnN0ZWFkIG9mIGZhaWxpbmcgd2hlbgorICBlbmNvdW50ZXJpbmcgdGhlbS4KKworLSBJc3N1ZSAjNzExMDogcmVncnRlc3Qgbm93IHNlbmRzIHRlc3QgZmFpbHVyZSByZXBvcnRzIGFuZCBzaW5nbGUtZmFpbHVyZQorICB0cmFjZWJhY2tzIHRvIHN0ZGVyciByYXRoZXIgdGhhbiBzdGRvdXQuCiAKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjYgcmMgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcuMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTA4LTAzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjNjIxMzogSW1wbGVtZW50IGdldHN0YXRlKCkgYW5kIHNldHN0YXRlKCkgbWV0aG9kcyBvZiB1dGYtOC1zaWcgYW5kCi0gIHV0Zi0xNiBpbmNyZW1lbnRhbCBlbmNvZGVycy4KLQotLSBJc3N1ZSAjODI3MTogZHVyaW5nIHRoZSBkZWNvZGluZyBvZiBhbiBpbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2UsIG9ubHkgdGhlCi0gIHN0YXJ0IGJ5dGUgYW5kIHRoZSBjb250aW51YXRpb24gYnl0ZShzKSBhcmUgbm93IGNvbnNpZGVyZWQgaW52YWxpZCwgaW5zdGVhZAotICBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBieSB0aGUgc3RhcnQgYnl0ZS4KLSAgRS5nLjogJ1x4ZjFceDgwQUInLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpIG5vdyByZXR1cm5zIHUnXHVmZmZkQUInIGFuZAotICByZXBsYWNlcyB3aXRoIFUrRkZGRCBvbmx5IHRoZSBzdGFydCBieXRlICgnXHhmMScpIGFuZCB0aGUgY29udGludWF0aW9uIGJ5dGUKLSAgKCdceDgwJykgZXZlbiBpZiAnXHhmMScgaXMgdGhlIHN0YXJ0IGJ5dGUgb2YgYSA0LWJ5dGVzIHNlcXVlbmNlLgotICBQcmV2aW91cyB2ZXJzaW9ucyByZXR1cm5lZCBhIHNpbmdsZSB1J1x1ZmZmZCcuCi0KLS0gSXNzdWUgIzkwNTg6IFJlbW92ZSBhc3NlcnRpb25zIGFib3V0IElOVF9NQVggaW4gVW5pY29kZURlY29kZUVycm9yLgotCi0tIElzc3VlICM4OTQxOiBkZWNvZGluZyBiaWcgZW5kaWFuIFVURi0zMiBkYXRhIGluIFVDUy0yIGJ1aWxkcyBjb3VsZCBjcmFzaAotICB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZQotICAoaGlnaGVyIHRoYW4gMHgxMDAwMCkuCi0KLS0gSXNzdWUgIzg2Mjc6IFJlbW92ZSBib2d1cyAiT3ZlcnJpZGluZyBfX2NtcF9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZgotICBfX2hhc2hfXyBpbiAzLngiIHdhcm5pbmcuICBBbHNvIGZpeCAiWFhYIHVuZGV0ZWN0ZWQgZXJyb3IiIHRoYXQKLSAgYXJpc2VzIGZyb20gdGhlICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2UgLi4uIiB3YXJuaW5nCi0gIHdoZW4gdHVybmVkIGludG8gYW4gZXhjZXB0aW9uOiBpbiB0aGlzIGNhc2UgdGhlIGV4Y2VwdGlvbiBzaW1wbHkKLSAgZ2V0cyBpZ25vcmVkLgotCi0tIElzc3VlICM0MTA4OiBJbiB1cmxsaWIucm9ib3RwYXJzZXIsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSAnVXNlci1hZ2VudDogKicKLSAgZW50cmllcywgY29uc2lkZXIgdGhlIGZpcnN0IG9uZS4KLQotLSBJc3N1ZSAjOTM1NDogUHJvdmlkZSBnZXRzb2Nrb3B0KCkgaW4gYXN5bmNvcmUncyBmaWxlX3dyYXBwZXIuCi0KLS0gSW4gdGhlIHVuaWNvZGUvc3RyLmZvcm1hdCgpLCByYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBpbmRleGVzIHRvIGFyZ3VtZW50cyBhcmUKLSAgdG9vIGxhcmdlLgotCi0tIElzc3VlICMzNzk4OiBXcml0ZSBzeXMuZXhpdCgpIG1lc3NhZ2UgdG8gc3lzLnN0ZGVyciB0byB1c2Ugc3RkZXJyIGVuY29kaW5nCi0gIGFuZCBlcnJvciBoYW5kbGVyLCBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gdGhlIEMgc3RkZXJyIGZpbGUgaW4gdXRmLTgKLQotLSBJc3N1ZSAjNzkwMjogV2hlbiB1c2luZyBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnQgc3ludGF4LCBkb24ndCB0cnkKLSAgaW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0IHNlbWFudGljcy4KLQotLSBJc3N1ZSAjNzA3OTogRml4IGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjbG9zaW5nIGEgZmlsZSBvYmplY3Qgd2hpbGUgdXNpbmcKLSAgaXQgZnJvbSBhbm90aGVyIHRocmVhZC4gIFBhdGNoIGJ5IERhbmllbCBTdHV0emJhY2guCi0KLS0gSXNzdWUgIzE1MzM6IGZpeCBpbmNvbnNpc3RlbmN5IGluIHJhbmdlIGZ1bmN0aW9uIGFyZ3VtZW50Ci0gIHByb2Nlc3Npbmc6IGFueSBub24tZmxvYXQgbm9uLWludGVnZXIgYXJndW1lbnQgaXMgbm93IGNvbnZlcnRlZCB0bwotICBhbiBpbnRlZ2VyIChpZiBwb3NzaWJsZSkgdXNpbmcgaXRzIF9faW50X18gbWV0aG9kLiAgUHJldmlvdXNseSwgb25seQotICBzbWFsbCBhcmd1bWVudHMgd2VyZSB0cmVhdGVkIHRoaXMgd2F5OyBsYXJnZXIgYXJndW1lbnRzICh0aG9zZSB3aG9zZQotICBfX2ludF9fIHdhcyBvdXRzaWRlIHRoZSByYW5nZSBvZiBhIEMgbG9uZykgd291bGQgcHJvZHVjZSBhIFR5cGVFcnJvci4KLQotLSBJc3N1ZSAjODQxNzogUmFpc2UgYW4gT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gc3lzLm1heHNpemUKLSAgaXMgcGFzc2VkIHRvIGJ5dGVhcnJheS4KLQotLSBJc3N1ZSAjODMyOTogRG9uJ3QgcmV0dXJuIHRoZSBzYW1lIGxpc3RzIGZyb20gc2VsZWN0LnNlbGVjdCB3aGVuIG5vIGZkcyBhcmUKLSAgY2hhbmdlZC4KLQotLSBSYWlzZSBhIFR5cGVFcnJvciB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBUX1NUUklOR19JTlBMQUNFIHN0cnVjdCBtZW1iZXIuCi0KLS0gSXNzdWUgIzE1ODM4NjM6IEFuIHVuaWNvZGUgc3ViY2xhc3MgY2FuIG5vdyBvdmVycmlkZSB0aGUgX191bmljb2RlX18gbWV0aG9kLgotCi0tIElzc3VlICM3NTA3OiBRdW90ZSAiISIgaW4gcGlwZXMucXVvdGUoKTsgaXQgaXMgc3BlY2lhbCB0byBzb21lIHNoZWxscy4KLQotLSBJc3N1ZSAjNzU0NDogUHJlYWxsb2NhdGUgdGhyZWFkIG1lbW9yeSBiZWZvcmUgY3JlYXRpbmcgdGhlIHRocmVhZCB0byBhdm9pZAotICBhIGZhdGFsIGVycm9yIGluIGxvdyBtZW1vcnkgY29uZGl0aW9uLgotCi0tIElzc3VlICM3ODIwOiBUaGUgcGFyc2VyIHRva2VuaXplciByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IGlmCi0gIHRoZSBCT00gY2hlY2sgZmFpbHMuCi0KLS0gSXNzdWUgIzcwNzI6IGlzc3BhY2UoMHhhMCkgaXMgdHJ1ZSBvbiBNYWMgT1MgWAotCi1DLUFQSQotLS0tLS0KLQotLSBJc3N1ZSAjNTc1MzogQSBuZXcgQyBBUEkgZnVuY3Rpb24sIDpjZnVuYzpgUHlTeXNfU2V0QXJndkV4YCwgYWxsb3dzCi0gIGVtYmVkZGVycyBvZiB0aGUgaW50ZXJwcmV0ZXIgdG8gc2V0IHN5cy5hcmd2IHdpdGhvdXQgYWxzbyBtb2RpZnlpbmcKLSAgc3lzLnBhdGguICBUaGlzIGhlbHBzIGZpeCBgQ1ZFLTIwMDgtNTk4MwotICA8aHR0cDovL2N2ZS5taXRyZS5vcmcvY2dpLWJpbi9jdmVuYW1lLmNnaT9uYW1lPUNWRS0yMDA4LTU5ODM+YF8uCisqUmVsZWFzZSBkYXRlOiAyMDEwLTExLTI3KgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzg0NDc6IE1ha2UgZGlzdHV0aWxzLnN5c2NvbmZpZyBmb2xsb3cgc3ltbGlua3MgaW4gdGhlIHBhdGggdG8KLSAgdGhlIGludGVycHJldGVyIGV4ZWN1dGFibGUuICBUaGlzIGZpeGVzIGEgZmFpbHVyZSBvZiB0ZXN0X2h0dHBzZXJ2ZXJzCi0gIG9uIE9TIFguCistIElzc3VlICMyMjM2OiBkaXN0dXRpbHMnIG1rcGF0aCBpZ25vcmVkIHRoZSBtb2RlIHBhcmFtZXRlci4KIAotLSBJc3N1ZSAjNzA5MjogRml4IHRoZSBEZXByZWNhdGlvbldhcm5pbmdzIGVtaXR0ZWQgYnkgdGhlIHN0YW5kYXJkIGxpYnJhcnkKLSAgd2hlbiB1c2luZyB0aGUgLTMgZmxhZy4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKy0gRml4IHR5cG8gaW4gb25lIHNkaXN0IG9wdGlvbiAobWVkYXRhLWNoZWNrKS4KIAotLSBJc3N1ZSAjNzM5NTogRml4IHRyYWNlYmFja3MgaW4gcHN0YXRzIGludGVyYWN0aXZlIGJyb3dzZXIuCistIElzc3VlICMxMDMyMzogaXRlcnRvb2xzLmlzbGljZSgpIG5vdyBjb25zdW1lcyB0aGUgbWluaW11bSBudW1iZXIgb2YKKyAgaW5wdXRzIGJlZm9yZSBzdG9wcGluZy4gIEZvcm1lcmx5LCB0aGUgZmluYWwgc3RhdGUgb2YgdGhlIHVuZGVybHlpbmcKKyAgaXRlcmF0b3Igd2FzIHVuZGVmaW5lZC4KIAotLSBJc3N1ZSAjMTcxMzogRml4IG9zLnBhdGguaXNtb3VudCgpLCB3aGljaCByZXR1cm5lZCB0cnVlIGZvciBzeW1ib2xpYyBsaW5rcwotICBhY3Jvc3MgZGV2aWNlcy4KKy0gSXNzdWUgIzEwNTY1OiBUaGUgY29sbGVjdGlvbnMuSXRlcmF0b3IgQUJDIG5vdyBjaGVja3MgZm9yIGJvdGgKKyAgYGBfX2l0ZXJfX2BgIGFuZCBgYG5leHRgYC4KIAotLSBJc3N1ZSAjODgyNjogUHJvcGVybHkgbG9hZCBvbGQtc3R5bGUgImV4cGlyZXMiIGF0dHJpYnV0ZSBpbiBodHRwLmNvb2tpZXMuCistIElzc3VlICMxMDA5MjogUHJvcGVybHkgcmVzZXQgbG9jYWxlIGluIGNhbGVuZGFyLkxvY2FsZSpDYWxlbmRhciBjbGFzc2VzLgogCi0tIElzc3VlICMxNjkwMTAzOiBGaXggaW5pdGlhbCBuYW1lc3BhY2UgZm9yIGNvZGUgcnVuIHdpdGggdHJhY2UubWFpbigpLgorLSBJc3N1ZSAjMTA0NTk6IFVwZGF0ZSBDSksgY2hhcmFjdGVyIG5hbWVzIHRvIFVuaWNvZGUgNS4yLgorCistIElzc3VlICM2MDk4OiBEb24ndCBjbGFpbSBET00gbGV2ZWwgMyBjb25mb3JtYW5jZSBpbiBtaW5pZG9tLgorCistIElzc3VlICMxMDU2MTogSW4gcGRiLCBjbGVhciB0aGUgYnJlYWtwb2ludHMgYnkgdGhlIGJyZWFrcG9pbnQgbnVtYmVyLgorCistIElzc3VlICM1NzYyOiBGaXggQXR0cmlidXRlRXJyb3IgcmFpc2VkIGJ5IGBgeG1sLmRvbS5taW5pZG9tYGAgd2hlbiBhbiBlbXB0eQorICBYTUwgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpcyBlbmNvdW50ZXJlZC4KKworLSBJc3N1ZSAjMTcxMDcwMzogV3JpdGUgc3RydWN0dXJlcyBmb3IgYW4gZW1wdHkgWklQIGFyY2hpdmUgd2hlbiBhIFppcEZpbGUgaXMKKyAgY3JlYXRlZCBpbiBtb2RlcyAnYScgb3IgJ3cnIGFuZCB0aGVuIGNsb3NlZCB3aXRob3V0IGFkZGluZyBhbnkgZmlsZXMuIFJhaXNlCisgIEJhZFppcGZpbGUgKHJhdGhlciB0aGFuIElPRXJyb3IpIHdoZW4gb3BlbmluZyBzbWFsbCBub24tWklQIGZpbGVzLgorCistIElzc3VlICM0NDkzOiB1cmxsaWIyIGFkZHMgJy8nIGluIGZyb250IG9mIHBhdGggY29tcG9uZW50cyB3aGljaCBkb2VzIG5vdAorICBzdGFydCB3aXRoICcvLiBDb21tb24gYmVoYXZpb3IgZXhoaWJpdGVkIGJ5IGJyb3dzZXJzIGFuZCBvdGhlciBjbGllbnRzLgorCistIElzc3VlICM2Mzc4OiBpZGxlLmJhdCBub3cgcnVucyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gdmVyc2lvbiByYXRoZXIgdGhhbgorICB0aGUgc3lzdGVtIGRlZmF1bHQuIFBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hci4KKworLSBJc3N1ZSAjMTA0MDc6IEZpeCBvbmUgTmFtZUVycm9yIGluIGRpc3R1dGlscy4KKworLSBJc3N1ZSAjMTAxOTg6IGZpeCBkdXBsaWNhdGUgaGVhZGVyIHdyaXR0ZW4gdG8gd2F2ZSBmaWxlcyB3aGVuIHdyaXRlZnJhbWVzKCkKKyAgaXMgY2FsbGVkIHdpdGhvdXQgZGF0YS4KKworLSBJc3N1ZSAjMTA0Njc6IEZpeCBCeXRlc0lPLnJlYWRpbnRvKCkgYWZ0ZXIgc2Vla2luZyBpbnRvIGEgcG9zaXRpb24gYWZ0ZXIgdGhlCisgIGVuZCBvZiB0aGUgZmlsZS4KKworLSBJc3N1ZSAjNTExMTogSVB2NiBIb3N0IGluIHRoZSBIZWFkZXIgaXMgd3JhcHBlZCBpbnNpZGUgWyBdLiBQYXRjaCBieSBDaGFuZHJ1LgorCitCdWlsZAorLS0tLS0KKworLSBCYWNrcG9ydCByODMzOTkgdG8gYWxsb3cgdGVzdF9kaXN0dXRpbHMgdG8gcGFzcyBvbiBpbnN0YWxsZWQgdmVyc2lvbnMuCisKKy0gSXNzdWUgIzEzMDM0MzQ6IEdlbmVyYXRlIFpJUCBmaWxlIGNvbnRhaW5pbmcgYWxsIFBEQnMuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM5NDI0OiBSZXBsYWNlIGRlcHJlY2F0ZWQgYXNzZXJ0KiBtZXRob2RzIGluIHRoZSBQeXRob24gdGVzdCBzdWl0ZS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxMDI5OTogTGlzdCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGluIGEgdGFibGUgaW4gZnVuY3Rpb25zLnJzdC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjAxMC0xMS0xMyoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEwMjIxOiBkaWN0LnBvcChrKSBub3cgaGFzIGEga2V5IGVycm9yIG1lc3NhZ2UgdGhhdCBpbmNsdWRlcyB0aGUKKyAgbWlzc2luZyBrZXkgKHNhbWUgbWVzc2FnZSBkW2tdIHJldHVybnMgZm9yIG1pc3Npbmcga2V5cykuCisKKy0gSXNzdWUgIzEwMTI1OiBEb24ndCBzZWdmYXVsdCB3aGVuIHRoZSBpdGVyYXRvciBwYXNzZWQgdG8KKyAgYGBmaWxlLndyaXRlbGluZXMoKWBgIGNsb3NlcyB0aGUgZmlsZS4KKworLSBJc3N1ZSAjMTAxODY6IEZpeCB0aGUgU3ludGF4RXJyb3IgY2FyZXQgd2hlbiB0aGUgb2Zmc2V0IGlzIGVxdWFsIHRvIHRoZQorICBsZW5ndGggb2YgdGhlIG9mZmVuZGluZyBsaW5lLgorCistIElzc3VlICM5OTk3OiBEb24ndCBsZXQgdGhlIG5hbWUgInRvcCIgaGF2ZSBzcGVjaWFsIHNpZ25pZmljYW5jZSBpbiBzY29wZQorICByZXNvbHV0aW9uLgorCistIElzc3VlICM5ODYyOiBDb21wZW5zYXRlIGZvciBicm9rZW4gUElQRV9CVUYgaW4gQUlYIGJ5IGhhcmQgY29kaW5nCisgIGl0cyB2YWx1ZSBhcyB0aGUgZGVmYXVsdCA1MTIgd2hlbiBjb21waWxpbmcgb24gQUlYLgorCistIElzc3VlICM5Njc1OiBDT2JqZWN0IHVzZSBpcyBtYXJrZWQgYXMgYSBQeTNrIHdhcm5pbmcsIG5vdCBhIGRlcHJlY2F0aW9uCisgIHdhcm5pbmcuCisKKy0gSXNzdWUgIzEwMDY4OiBHbG9iYWwgb2JqZWN0cyB3aGljaCBoYXZlIHJlZmVyZW5jZSBjeWNsZXMgd2l0aCB0aGVpciBtb2R1bGUncworICBkaWN0IGFyZSBub3cgY2xlYXJlZCBhZ2Fpbi4gVGhpcyBjYXVzZXMgaXNzdWUgIzcxNDAgdG8gYXBwZWFyIGFnYWluLgorCistIElzc3VlICM5ODY5OiBNYWtlIGxvbmcoKSBhbmQgUHlOdW1iZXJfTG9uZyByZXR1cm4gc29tZXRoaW5nIG9mIHR5cGUKKyAgbG9uZyBmb3IgYSBjbGFzcyB3aG9zZSBfX2xvbmdfXyBtZXRob2QgcmV0dXJucyBhIHBsYWluIGludC4gIFRoaXMKKyAgZml4ZXMgYW4gaW50ZXJwcmV0ZXIgY3Jhc2ggd2hlbiBpbml0aWFsaXppbmcgYW4gaW5zdGFuY2Ugb2YgYSBsb25nCisgIHN1YmNsYXNzIGZyb20gYW4gb2JqZWN0IHdob3NlIF9fbG9uZ19fIG1ldGhvZCByZXR1cm5zIGEgcGxhaW4gaW50LgorCistIElzc3VlICMxMDAwNjogdHlwZS5fX2Fic3RyYWN0bWV0aG9kc19fIG5vdyByYWlzZXMgYW4gQXR0cmlidXRlRXJyb3IuCisKKy0gSXNzdWUgIzk3OTc6IHB5c3RhdGUuYyB3cm9uZ2x5IGFzc3VtZWQgdGhhdCB6ZXJvIGNvdWxkbid0IGJlIGEgdmFsaWQKKyAgdGhyZWFkLWxvY2FsIHN0b3JhZ2Uga2V5LgorCistIElzc3VlICM0OTQ3OiBUaGUgd3JpdGUoKSBtZXRob2Qgb2Ygc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciB1c2VzIHRoZWlyCisgIGVuY29kaW5nIGFuZCBlcnJvcnMgYXR0cmlidXRlcyBpbnN0ZWFkIG9mIHVzaW5nIHV0Zi04IGluIHN0cmljdCBtb2RlLCB0byBnZXQKKyAgdGhlIHNhbWUgYmVoYXZpb3VyIHRoYW4gdGhlIHByaW50IHN0YXRlbWVudC4KKworLSBJc3N1ZSAjOTczNzogRml4IGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZGVsZXRlIGEgc2xpY2Ugb3IgYW4gaXRlbSBmcm9tCisgIGEgbWVtb3J5dmlldyBvYmplY3QuCisKKy0gUmVzdG9yZSBHSUwgaW4gbmlzX2NhdCBpbiBjYXNlIG9mIGVycm9yLgorCistIElzc3VlICM5Njg4OiBfX2Jhc2ljc2l6ZV9fIGFuZCBfX2l0ZW1zaXplX18gbXVzdCBiZSBhY2Nlc3NlZCBhcyBQeV9zc2l6ZV90LgorCistIElzc3VlICM4NTMwOiBQcmV2ZW50IHN0cmluZ2xpYiBmYXN0c2VhcmNoIGZyb20gcmVhZGluZyBiZXlvbmQgdGhlIGZyb250CisgIG9mIGFuIGFycmF5LgorCistIElzc3VlICM4Mzc1NTogIEltcGxpY2l0IHNldC10by1mcm96ZW5zZXQgY29udmVyc2lvbiB3YXMgbm90IHRocmVhZC1zYWZlLgorCistIElzc3VlICM5NDE2OiBGaXggc29tZSBpc3N1ZXMgd2l0aCBjb21wbGV4IGZvcm1hdHRpbmcgd2hlcmUgdGhlCisgIG91dHB1dCB3aXRoIG5vIHR5cGUgc3BlY2lmaWVyIGZhaWxlZCB0byBtYXRjaCB0aGUgc3RyIG91dHB1dDoKKworICAgIC0gZm9ybWF0KGNvbXBsZXgoLTAuMCwgMi4wKSwgJy0nKSBvbWl0dGVkIHRoZSByZWFsIHBhcnQgZnJvbSB0aGUgb3V0cHV0LAorICAgIC0gZm9ybWF0KGNvbXBsZXgoMC4wLCAyLjApLCAnLScpIGluY2x1ZGVkIGEgc2lnbiBhbmQgcGFyZW50aGVzZXMuCisKKy0gSXNzdWUgIzc2MTY6IEZpeCBjb3B5aW5nIG9mIG92ZXJsYXBwaW5nIG1lbW9yeXZpZXcgc2xpY2VzIHdpdGggdGhlIEludGVsCisgIGNvbXBpbGVyLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgOTkyNjogV3JhcHBlZCBUZXN0U3VpdGUgc3ViY2xhc3MgZG9lcyBub3QgZ2V0IF9fY2FsbF9fIGV4ZWN1dGVkCisKKy0gSXNzdWUgIzQ0NzE6IFByb3Blcmx5IHNodXRkb3duIHNvY2tldCBpbiBJTUFQLnNodXRkb3duKCkuICBQYXRjaCBieQorICBMb3JlbnpvIE0uIENhdHVjY2kuCisKKy0gSXNzdWUgIzEwMTI2OiBGaXggZGlzdHV0aWxzJyB0ZXN0X2J1aWxkIHdoZW4gUHl0aG9uIHdhcyBidWlsdCB3aXRoCisgIC0tZW5hYmxlLXNoYXJlZC4KKworLSBGaXggdHlwbyBpbiBvbmUgc2Rpc3Qgb3B0aW9uIChtZWRhdGEtY2hlY2spLgorCistIElzc3VlICM5MTk5OiBGaXggaW5jb3JyZWN0IHVzZSBvZiBkaXN0dXRpbHMuY21kLkNvbW1hbmQuYW5ub3VuY2UuCisKKy0gSXNzdWUgIzE3MTg1NzQ6IEZpeCBvcHRpb25zIHRoYXQgd2VyZSBzdXBwb3NlZCB0byBhY2NlcHQgYXJndW1lbnRzIGJ1dCBkaWQKKyAgbm90IGluIGJ1aWxkX2NsaWIuCisKKy0gSXNzdWUgIzkyODE6IFByZXZlbnQgcmFjZSBjb25kaXRpb24gd2l0aCBta2RpciBpbiBkaXN0dXRpbHMuICBQYXRjaCBieQorICBBcmZyZXZlci4KKworLSBJc3N1ZSAjMTAyMjk6IEZpeCBjYWNoaW5nIGVycm9yIGluIGdldHRleHQuCisKKy0gSXNzdWUgIzEwMjUyOiBDbG9zZSBmaWxlIG9iamVjdHMgaW4gYSB0aW1lbHkgbWFubmVyIGluIGRpc3R1dGlscyBjb2RlIGFuZAorICB0ZXN0cy4gIFBhdGNoIGJ5IEJyaWFuIEJyYXppbCwgY29tcGxldGVkIGJ5IMOJcmljIEFyYXVqby4KKworLSBJc3N1ZSAjMTAzMTE6IFRoZSBzaWduYWwgbW9kdWxlIG5vdyByZXN0b3JlcyBlcnJubyBiZWZvcmUgcmV0dXJuaW5nIGZyb20KKyAgaXRzIGxvdy1sZXZlbCBzaWduYWwgaGFuZGxlci4gIFBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCisKKy0gSXNzdWUgIzEwMDM4OiBqc29uLmxvYWRzKCkgb24gc3RyIHNob3VsZCBhbHdheXMgcmV0dXJuIHVuaWNvZGUgKHJlZ3Jlc3Npb24KKyAgZnJvbSBQeXRob24gMi42KS4gIFBhdGNoIGJ5IFdhbHRlciBEw7Zyd2FsZC4KKworLSBJc3N1ZSAjMTIwMTc2OiBXcmFwcGVkIFRlc3RTdWl0ZSBzdWJjbGFzcyBkb2VzIG5vdCBnZXQgX19jYWxsX18gZXhlY3V0ZWQuCisKKy0gSXNzdWUgIzY3MDY6IGFzeW5jb3JlIGFjY2VwdCgpIG1ldGhvZCBubyBsb25nZXIgcmFpc2VzCisgIEVXT1VMREJMT0NLL0VDT05OQUJPUlRFRCBvbiBpbmNvbXBsZXRlIGNvbm5lY3Rpb24gYXR0ZW1wdCBidXQgcmV0dXJucyBOb25lCisgIGluc3RlYWQuCisKKy0gSXNzdWUgIzEwMjY2OiB1dS5kZWNvZGUgZGlkbid0IGNsb3NlIGluX2ZpbGUgZXhwbGljaXRseSB3aGVuIGl0IHdhcyBnaXZlbgorICBhcyBhIGZpbGVuYW1lLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxMDI0NjogdXUuZW5jb2RlIGRpZG4ndCBjbG9zZSBmaWxlIG9iamVjdHMgZXhwbGljaXRseSB3aGVuIGZpbGVuYW1lcworICB3ZXJlIGdpdmVuIHRvIGl0LiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxMDI1MzogRmlsZUlPIGxlYWtzIGEgZmlsZSBkZXNjcmlwdG9yIHdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBmaWxlCisgIGZvciBhcHBlbmQgdGhhdCBpc24ndCBzZWVrYWJsZS4gIFBhdGNoIGJ5IEJyaWFuIEJyYXppbC4KKworLSBJc3N1ZSAjNjEwNToganNvbi5kdW1wcyBub3cgcmVzcGVjdHMgT3JkZXJlZERpY3QncyBpdGVyYXRpb24gb3JkZXIuCisKKy0gSXNzdWUgIzkyOTU6IEZpeCBhIGNyYXNoIHVuZGVyIFdpbmRvd3Mgd2hlbiBjYWxsaW5nIGNsb3NlKCkgb24gYSBmaWxlCisgIG9iamVjdCB3aXRoIGN1c3RvbSBidWZmZXJpbmcgZnJvbSB0d28gdGhyZWFkcyBhdCBvbmNlLgorCistIElzc3VlICM1MDI3OiBUaGUgc3RhbmRhcmQgYGB4bWxgYCBuYW1lc3BhY2UgaXMgbm93IHVuZGVyc3Rvb2QgYnkKKyAgeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3IgYXMgYmVpbmcgYm91bmQgdG8KKyAgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLiAgUGF0Y2ggYnkgVHJveSBKLiBGYXJyZWxsLgorCistIElzc3VlICMxMDE2MzogU2tpcCB1bnJlYWRhYmxlIHJlZ2lzdHJ5IGtleXMgZHVyaW5nIG1pbWV0eXBlcworICBpbml0aWFsaXphdGlvbi4KKworLSBJc3N1ZSAjNTExNzogRml4ZWQgcm9vdCBkaXJlY3RvcnkgcmVsYXRlZCBpc3N1ZSBvbiBwb3NpeHBhdGgucmVscGF0aCgpIGFuZAorICBudHBhdGgucmVscGF0aCgpLgorCistIElzc3VlIDk0MDk6IEZpeCB0aGUgcmVnZXggdG8gbWF0Y2ggYWxsIGtpbmQgb2YgZmlsZW5hbWVzLCBmb3IgaW50ZXJhY3RpdmUKKyAgZGVidWdnaW5nIGluIGRvY3Rlc3RzLgorCistIElzc3VlICM2NjEyOiBGaXggc2l0ZSBhbmQgc3lzY29uZmlnIHRvIGNhdGNoIG9zLmdldGN3ZCgpIGVycm9yLCBlZy4gaWYgdGhlCisgIGN1cnJlbnQgZGlyZWN0b3J5IHdhcyBkZWxldGVkLiBQYXRjaCB3cml0dGVuIGJ5IFcuIFRyZXZvciBLaW5nLgorCistIElzc3VlICMxMDA0NTogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugd2hlbiB3cml0aW5nIGFmdGVyIHNlZWtpbmcgcGFzdCB0aGUKKyAgZW5kIG9mIHRoZSAiZmlsZSIgaW4gY1N0cmluZ0lPLgorCistIElzc3VlICM5OTQ4OiBGaXhlZCBwcm9ibGVtIG9mIGxvc2luZyBmaWxlbmFtZSBjYXNlIGluZm9ybWF0aW9uLgorCistIElzc3VlICM5NDM3OiBGaXggYnVpbGRpbmcgQyBleHRlbnNpb25zIHdpdGggbm9uLWRlZmF1bHQgTERGTEFHUy4KKworLSBJc3N1ZSAjOTc1OTogR3ppcEZpbGUgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGF0dGVtcHRlZAorICBhZnRlciB0aGUgZmlsZSBpcyBjbG9zZWQuICBQYXRjaCBieSBKZWZmcmV5IEZpbmtlbHN0ZWluLgorCistIElzc3VlICM5MDQyOiBGaXggaW50ZXJhY3Rpb24gb2YgY3VzdG9tIHRyYW5zbGF0aW9uIGNsYXNzZXMgYW5kIGNhY2hpbmcgaW4KKyAgZ2V0dGV4dC4KKworLSBJc3N1ZSAjOTA2NTogdGFyZmlsZSBubyBsb25nZXIgdXNlcyAicm9vdCIgYXMgdGhlIGRlZmF1bHQgZm9yIHRoZSB1bmFtZSBhbmQKKyAgZ25hbWUgZmllbGQuCisKKy0gSXNzdWUgIzEwNTAyNjg6IHBhcnNlYWRkciBub3cgY29ycmVjdGx5IHF1b3RlcyBkb3VibGUgcXVvdGUgYW5kIGJhY2tzbGFzaAorICBjaGFyYWN0ZXJzIHRoYXQgYXBwZWFyIGluc2lkZSBxdW90ZWQgc3RyaW5ncyBpbiBlbWFpbCBhZGRyZXNzZXMuCisKKy0gSXNzdWUgIzEwMDA0OiBxdW9wcmltaW1lIG5vIGxvbmdlciBnZW5lcmF0ZXMgYSB0cmFjZWJhY2sgd2hlbiBjb25mcm9udGVkCisgIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIGFmdGVyICc9JyBpbiBhIFEtZW5jb2RlZCB3b3JkLgorCistIElzc3VlICM5OTUwOiBGaXggc29ja2V0LnNlbmRhbGwoKSBjcmFzaCBvciBtaXNiZWhhdmlvdXIgd2hlbiBhIHNpZ25hbCBpcworICByZWNlaXZlZC4gIE5vdyBzZW5kYWxsKCkgcHJvcGVybHkgY2FsbHMgc2lnbmFsIGhhbmRsZXJzIGlmIG5lY2Vzc2FyeSwKKyAgYW5kIHJldHJpZXMgc2VuZGluZyBpZiB0aGVzZSByZXR1cm5lZCBzdWNjZXNzZnVsbHksIGluY2x1ZGluZyBvbiBzb2NrZXRzCisgIHdpdGggYSB0aW1lb3V0LgorCistIElzc3VlICM5OTQ3OiBsb2dnaW5nOiBGaXhlZCBsb2NraW5nIGJ1ZyBpbiBzdG9wTGlzdGVuaW5nLgorCistIElzc3VlICM5OTQ1OiBsb2dnaW5nOiBGaXhlZCBsb2NraW5nIGJ1Z3MgaW4gYWRkSGFuZGxlci9yZW1vdmVIYW5kbGVyLgorCistIElzc3VlICM5OTM2OiBGaXhlZCBleGVjdXRhYmxlIGxpbmVzJyBzZWFyY2ggaW4gdGhlIHRyYWNlIG1vZHVsZS4KKworLSBJc3N1ZSAjOTkyODogUHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgdHlwZXMgZXhwb3J0ZWQgYnkgdGhlIGJ6MiBtb2R1bGUuCisKKy0gSXNzdWUgIzk4NTQ6IFRoZSBkZWZhdWx0IHJlYWQoKSBpbXBsZW1lbnRhdGlvbiBpbiBpby5SYXdJT0Jhc2Ugbm93CisgIGhhbmRsZXMgbm9uLWJsb2NraW5nIHJlYWRpbnRvKCkgcmV0dXJuaW5nIE5vbmUgY29ycmVjdGx5LgorCistIElzc3VlICM5NzI5OiBGaXggdGhlIHNpZ25hdHVyZSBvZiBTU0xTb2NrZXQucmVjdmZyb20oKSBhbmQKKyAgU1NMU29ja2V0LnNlbmR0bygpIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHNvY2tldCBtZXRob2RzLiAgQWxzbywKKyAgZml4IHZhcmlvdXMgU1NMU29ja2V0IG1ldGhvZHMgdG8gcmFpc2Ugc29ja2V0LmVycm9yIHJhdGhlciB0aGFuIGFuCisgIHVuaGVscGZ1bCBUeXBlRXJyb3Igd2hlbiBjYWxsZWQgb24gYW4gdW5jb25uZWN0ZWQgc29ja2V0LiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgQW5kcmV3IEJlbm5ldHRzLgorCistIElzc3VlICM5ODI2OiBPcmRlcmVkRGljdC5fX3JlcHJfXyBjYW4gbm93IGhhbmRsZSBzZWxmLXJlZmVyZW50aWFsCisgIHZhbHVlczogICBkWyd4J10gPSBkLgorCistIElzc3VlICM3Njc2NDU6IFNldCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIHRvIFRydWUgb24gTWFjIE9TIFguCisKKy0gSXNzdWUgIzk4Mzc6IFRoZSByZWFkKCkgbWV0aG9kIG9mIFppcEV4dEZpbGUgb2JqZWN0cyAoYXMgcmV0dXJuZWQgYnkKKyAgWmlwRmlsZS5vcGVuKCkpIGNvdWxkIHJldHVybiBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgorCistIElzc3VlICM5ODI1OiByZW1vdmVkIF9fZGVsX18gZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC4KKyAgVGhpcyBwcmV2ZW50cyB1c2VyLWNyZWF0ZWQgc2VsZi1yZWZlcmVuY2luZyBvcmRlcmVkIGRpY3Rpb25hcmllcyBmcm9tCisgIGJlY29taW5nIHBlcm1hbmVudGx5IHVuY29sbGVjdGFibGUgR0MgZ2FyYmFnZS4gIFRoZSBkb3duc2lkZSBpcyB0aGF0CisgIHJlbW92aW5nIF9fZGVsX18gbWVhbnMgdGhhdCB0aGUgaW50ZXJuYWwgZG91Ymx5LWxpbmtlZCBsaXN0IGhhcyB0byB3YWl0IGZvcgorICBHQyBjb2xsZWN0aW9uIHJhdGhlciB0aGFuIGZyZWVpbmcgbWVtb3J5IGltbWVkaWF0ZWx5IHdoZW4gdGhlIHJlZmNudCBkcm9wcworICB0byB6ZXJvLgorCistIElzc3VlICM5ODE2OiByYW5kb20uUmFuZG9tLmp1bXBhaGVhZChuKSBkaWQgbm90IHByb2R1Y2UgYSBzdWZmaWNpZW50bHkKKyAgZGlmZmVyZW50IGludGVybmFsIHN0YXRlIGZvciBzbWFsbCB2YWx1ZXMgb2Ygbi4gIEZpeGVkIGJ5IHNhbHRpbmcgdGhlCisgIHZhbHVlLgorCistIElzc3VlICM5NzkyOiBJbiBjYXNlIG9mIGNvbm5lY3Rpb24gZmFpbHVyZSwgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgd291bGQgc3dhbGxvdyB0aGUgZXhjZXB0aW9uIGFuZCByYWlzZSBhIG5ldyBvbmUsIG1ha2luZyBpdCBpbXBvc3NpYmxlCisgIHRvIGZldGNoIHRoZSBvcmlnaW5hbCBlcnJubywgb3IgdG8gZmlsdGVyIHRpbWVvdXQgZXJyb3JzLiAgTm93IHRoZQorICBvcmlnaW5hbCBlcnJvciBpcyByZS1yYWlzZWQuCisKKy0gSXNzdWUgIzk3NTg6IFdoZW4gZmNudGwuaW9jdGwoKSB3YXMgY2FsbGVkIHdpdGggbXV0YWJsZV9mbGFnIHNldCB0byBUcnVlLAorICBhbmQgdGhlIHBhc3NlZCBidWZmZXIgd2FzIGV4YWN0bHkgMTAyNCBieXRlcyBsb25nLCB0aGUgYnVmZmVyIHdvdWxkbid0CisgIGJlIHVwZGF0ZWQgYmFjayBhZnRlciB0aGUgc3lzdGVtIGNhbGwuICBPcmlnaW5hbCBwYXRjaCBieSBCcmlhbiBCcmF6aWwuCisKKy0gSXNzdWUgIzExMDA1NjI6IEZpeCBkZWVwLWNvcHlpbmcgb2Ygb2JqZWN0cyBkZXJpdmVkIGZyb20gdGhlIGxpc3QgYW5kCisgIGRpY3QgdHlwZXMuICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5IGFuZCBCasO2cm4gTGluZHF2aXN0LgorCistIElzc3VlICM3MDA1OiBGaXhlZCBvdXRwdXQgb2YgTm9uZSB2YWx1ZXMgZm9yIFJhd0NvbmZpZ1BhcnNlci53cml0ZSBhbmQKKyAgQ29uZmlnUGFyc2VyLndyaXRlLgorCistIElzc3VlICM4MDgxNjQ6IEZpeGVkIHNvY2tldC5jbG9zZSB0byBhdm9pZCByZWZlcmVuY2VzIHRvIGdsb2JhbHMsIHRvCisgIGF2b2lkIGlzc3VlcyB3aGVuIHNvY2tldC5jbG9zZSBpcyBjYWxsZWQgZnJvbSBhIF9fZGVsX18gbWV0aG9kLgorCistIElzc3VlICMyOTg2OiBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlciBnZXRzIGEgbmV3IHBhcmFtZXRlciwgYXV0b2p1bmssIHdoaWNoCisgIGNhbiBiZSBzZXQgdG8gRmFsc2UgdG8gdHVybiBvZmYgdGhlIHByZXZpb3VzbHkgdW5kb2N1bWVudGVkICdwb3B1bGFyaXR5JworICBoZXVyaXN0aWMuIFBhdGNoIGJ5IFRlcnJ5IFJlZWR5IGFuZCBFbGkgQmVuZGVyc2t5CisKKy0gSXNzdWUgIzg3OTc6IHVybGxpYjIgZG9lcyBhIHJldHJ5IGZvciBCYXNpYyBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIGluc3RlYWQgb2YKKyAgZmFsbGluZyBpbnRvIHJlY3Vyc2lvbi4KKworLSBJc3N1ZSAjMTE5NDIyMjogZW1haWwudXRpbHMucGFyc2VkYXRlIG5vdyByZXR1cm5zIFJGQzI4MjIgY29tcGxpYW50IGZvdXIKKyAgY2hhcmFjdGVyIHllYXJzIGV2ZW4gaWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgUkZDODIyIHR3byBjaGFyYWN0ZXIgeWVhcnMuCisKKy0gSXNzdWUgIzg3NTA6IEZpeGVkIE11dGFibGVTZXQncyBtZXRob2RzIHRvIGNvcnJlY3RseSBoYW5kbGUKKyAgcmVmbGV4aXZlIG9wZXJhdGlvbnMsIG5hbWVseSB4IC09IHggYW5kIHggXj0geC4KKworLSBJc3N1ZSAjOTEyOTogc210cGQucHkgaXMgdnVsbmVyYWJsZSB0byBEb1MgYXR0YWNrcyBkZXJpdmluZyBmcm9tIG1pc3NpbmcKKyAgZXJyb3IgaGFuZGxpbmcgd2hlbiBhY2NlcHRpbmcgYSBuZXcgY29ubmVjdGlvbi4KKworLSBJc3N1ZSAjNjU4NzQ5OiBhc3luY29yZSdzIGNvbm5lY3QoKSBtZXRob2Qgbm93IGNvcnJlY3RseSBpbnRlcnByZXRzIHdpbnNvY2sKKyAgZXJyb3JzLgorCistIElzc3VlICM5NTAxOiBGaXhlZCBsb2dnaW5nIHJlZ3Jlc3Npb25zIGluIGNsZWFudXAgY29kZS4KKworLSBJc3N1ZSAjOTIxNDogU2V0IG9wZXJhdGlvbnMgb24gS2V5c1ZpZXcgb3IgSXRlbXNWaWV3IGluIHRoZSBjb2xsZWN0aW9ucworICBtb2R1bGUgbm93IGNvcnJlY3RseSByZXR1cm4gYSBzZXQuICAoUGF0Y2ggYnkgRWxpIEJlbmRlcnNreS4pCisKKy0gSXNzdWUgIzk2MTc6IFNpZ25hbHMgcmVjZWl2ZWQgZHVyaW5nIGEgbG93LWxldmVsIHdyaXRlIG9wZXJhdGlvbiBhcmVuJ3QKKyAgaWdub3JlZCBieSB0aGUgYnVmZmVyZWQgSU8gbGF5ZXIgYW55bW9yZS4KKworLSBJc3N1ZSAjMjUyMTogVXNlIHdlYWtyZWZzIG9uIGZvciBjYWNoaW5nIGluIHRoZSBhYmMgbW9kdWxlLCBzbyB0aGF0IGNsYXNzZXMKKyAgYXJlIG5vdCBoZWxkIG9udG8gYWZ0ZXIgdGhleSBhcmUgZGVsZXRlZCBlbHNld2hlcmUuCisKKy0gSXNzdWUgIzk2MjY6IHRoZSB2aWV3IG1ldGhvZHMgZm9yIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkgd2VyZSByZXR1cm5pbmcKKyAgdGhlIHVub3JkZXJlZCB2ZXJzaW9ucyBpbmhlcml0ZWQgZnJvbSBkaWN0LiAgVGhvc2UgbWV0aG9kcyBhcmUgbm93CisgIG92ZXJyaWRkZW4gdG8gcHJvdmlkZSBvcmRlcmVkIHZpZXdzLgorCistIElzc3VlICM4Njg4OiBNQU5JRkVTVCBmaWxlcyBjcmVhdGVkIGJ5IGRpc3R1dGlscyBub3cgaW5jbHVkZSBhIG1hZ2ljCisgIGNvbW1lbnQgaW5kaWNhdGluZyB0aGV5IGFyZSBnZW5lcmF0ZWQuICBNYW51YWxseSBtYWludGFpbmVkIE1BTklGRVNUcworICB3aXRob3V0IHRoaXMgbWFya2VyIHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIG9yIHJlbW92ZWQuCisKKy0gSXNzdWUgIzc0Njc6IHdoZW4gcmVhZGluZyBhIGZpbGUgZnJvbSBhIFpJUCBhcmNoaXZlLCBpdHMgQ1JDIGlzIGNoZWNrZWQKKyAgYW5kIGEgQmFkWmlwZmlsZSBlcnJvciBpcyByYWlzZWQgaWYgaXQgZG9lc24ndCBtYXRjaCAoYXMgdXNlZCB0byBiZSB0aGUKKyAgY2FzZSBpbiBQeXRob24gMi41IGFuZCBlYXJsaWVyKS4KKworLSBJc3N1ZSAjOTU1MDogYSBCdWZmZXJlZFJlYWRlciBjb3VsZCBpc3N1ZSBhbiBhZGRpdGlvbmFsIHJlYWQgd2hlbiB0aGUKKyAgb3JpZ2luYWwgcmVhZCByZXF1ZXN0IGhhZCBiZWVuIHNhdGlzZmllZCwgd2hpY2ggY291bGQgYmxvY2sgaW5kZWZpbml0ZWx5CisgIHdoZW4gdGhlIHVuZGVybHlpbmcgcmF3IElPIGNoYW5uZWwgd2FzIGUuZy4gYSBzb2NrZXQuICBSZXBvcnQgYW5kIG9yaWdpbmFsCisgIHBhdGNoIGJ5IEphc29uIFYuIE1pbGxlci4KKworLSBJc3N1ZSAjOTU1MTogRG9uJ3QgcmFpc2UgVHlwZUVycm9yIHdoZW4gc2V0dGluZyB0aGUgdmFsdWUgdG8gTm9uZSBmb3IKKyAgU2FmZUNvbmZpZ1BhcnNlciBpbnN0YW5jZXMgY29uc3RydWN0ZWQgd2l0aCBhbGxvd19ub192YWx1ZSA9PSBUcnVlLgorCistIElzc3VlICM2OTE1OiBVbmRlciBXaW5kb3dzLCBvcy5saXN0ZGlyKCkgZGlkbid0IHJlbGVhc2UgdGhlIEdsb2JhbAorICBJbnRlcnByZXRlciBMb2NrIGFyb3VuZCBhbGwgc3lzdGVtIGNhbGxzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUnlhbiBLZWxseS4KKworLSBJc3N1ZSAjMzc1NzogdGhyZWFkLWxvY2FsIG9iamVjdHMgbm93IHN1cHBvcnQgY3ljbGljIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgVGhyZWFkLWxvY2FsIG9iamVjdHMgaW52b2x2ZWQgaW4gcmVmZXJlbmNlIGN5Y2xlcyB3aWxsIGJlIGRlYWxsb2NhdGVkCisgIHRpbWVseSBieSB0aGUgY3ljbGljIEdDLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nLgorCistIElzc3VlICM2MjMxOiBGaXggeG1sLmV0cmVlLkVsZW1lbnRJbmNsdWRlIHRvIGluY2x1ZGUgdGhlIHRhaWwgb2YgdGhlCisgIGN1cnJlbnQgbm9kZS4KKworLSBJc3N1ZSAjNjg2OTogRml4IGEgcmVmY291bnQgcHJvYmxlbSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24uCisKKy0gSXNzdWU1NTA0IC0gY3R5cGVzIHNob3VsZCBub3cgd29yayB3aXRoIHN5c3RlbXMgd2hlcmUgbW1hcCBjYW4ndCBiZQorICBQUk9UX1dSSVRFIGFuZCBQUk9UX0VYRUMuCisKKy0gRml4IElzc3VlODI4MCAtIHVybGxpYjIncyBSZXF1ZXN0IG1ldGhvZCB3aWxsIHJlbW92ZSBmcmFnZW1lbnRzIGluIHRoZSB1cmwuCisgIFRoaXMgaXMgaG93IGl0IGlzIHN1cHBvc2VkIHRvIHdvcmssIHdnZXQgYW5kIGN1cmwgZG8gdGhlIHNhbWUuICBQcmV2aW91cworICBiZWhhdmlvciB3YXMgd3JvbmcuCisKKy0gSXNzdWUgIzI5NDQ6IGFzeW5jb3JlIGRvZXNuJ3QgaGFuZGxlIGNvbm5lY3Rpb24gcmVmdXNlZCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzMxOTY6IGVtYWlsIGhlYWRlciBkZWNvZGluZyBpcyBub3cgZm9yZ2l2aW5nIGlmIGFuIFJGQzIwNDcKKyAgZW5jb2RlZCB3b3JkIGVuY29kZWQgaW4gYmFzZTY0IGlzIGxhY2tpbmcgcGFkZGluZy4KKworLSBJc3N1ZSAjOTQ0NDogQXJncGFyc2Ugbm93IHVzZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgcHJlZml4X2NoYXJzIGFzCisgIHRoZSBvcHRpb24gY2hhcmFjdGVyIGZvciB0aGUgYWRkZWQgJ2gvaGVscCcgb3B0aW9uIGlmIHByZWZpeF9jaGFycworICBkb2VzIG5vdCBjb250YWluIGEgJy0nLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzkzNTQ6IFByb3ZpZGUgZ2V0c29ja29wdCgpIGluIGFzeW5jb3JlJ3MgZmlsZV93cmFwcGVyLgorCistIElzc3VlICM5NDI4OiBGaXggcnVubmluZyBzY3JpcHRzIHdpdGggdGhlIHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyBmcm9tCisgIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzc3ODE6IEZpeCByZXN0cmljdGluZyBzdGF0cyBieSBlbnRyeSBjb3VudHMgaW4gdGhlIHBzdGF0cworICBpbnRlcmFjdGl2ZSBicm93c2VyLgorCistIElzc3VlICM5MjA5OiBEbyBub3QgY3Jhc2ggaW4gdGhlIHBzdGF0cyBpbnRlcmFjdGl2ZSBicm93c2VyIG9uIGludmFsaWQKKyAgcmVndWxhciBleHByZXNzaW9ucy4KKworLSBJc3N1ZSAjNzM3MjogRml4IHBzdGF0cyByZWdyZXNzaW9uIHdoZW4gc3RyaXBwaW5nIHBhdGhzIGZyb20gcHJvZmlsZQorICBkYXRhIGdlbmVyYXRlZCB3aXRoIHRoZSBwcm9maWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjNDEwODogSW4gdXJsbGliLnJvYm90cGFyc2VyLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgJ1VzZXItYWdlbnQ6IConCisgIGVudHJpZXMsIGNvbnNpZGVyIHRoZSBmaXJzdCBvbmUuCisKKy0gSXNzdWUgIzgzOTc6IFJhaXNlIGFuIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBtaXggaXRlcmF0aW9uIGFuZCByZWd1bGFyCisgIHJlYWRzIG9uIGEgQloyRmlsZSBvYmplY3QsIHJhdGhlciB0aGFuIHJldHVybmluZyBpbmNvcnJlY3QgcmVzdWx0cy4KIAogLSBJc3N1ZSAjNTI5NDogRml4IHRoZSBiZWhhdmlvciBvZiBwZGIncyAiY29udGludWUiIGNvbW1hbmQgd2hlbiBjYWxsZWQKICAgaW4gdGhlIHRvcC1sZXZlbCBkZWJ1Z2dlZCBmcmFtZS4KQEAgLTE4Niw2ICs2NDcsOSBAQAogLSBJc3N1ZSAjODAxNTogSW4gcGRiLCBkbyBub3QgY3Jhc2ggd2hlbiBhbiBlbXB0eSBsaW5lIGlzIGVudGVyZWQgYXMKICAgYSBicmVha3BvaW50IGNvbW1hbmQuCiAKKy0gSXNzdWUgIzk0NDg6IEZpeCBhIGxlYWsgb2YgT1MgcmVzb3VyY2VzIChtdXRleGVzIG9yIHNlbWFwaG9yZXMpIHdoZW4KKyAgcmUtaW5pdGlhbGl6aW5nIGEgYnVmZmVyZWQgSU8gb2JqZWN0IGJ5IGNhbGxpbmcgaXRzIGBgX19pbml0X19gYCBtZXRob2QuCisKIC0gSXNzdWUgIzc5MDk6IERvIG5vdCB0b3VjaCBwYXRocyB3aXRoIHRoZSBzcGVjaWFsIHByZWZpeGVzIGBgXFwuXGBgCiAgIG9yIGBgXFw/XGBgIGluIG50cGF0aC5ub3JtcGF0aCgpLgogCkBAIC0xOTcsMjcgKzY2MSwzNyBAQAogLSBJc3N1ZSAjODE5ODogSW4gcHlkb2MsIG91dHB1dCBhbGwgaGVscCB0ZXh0IHRvIHRoZSBjb3JyZWN0IHN0cmVhbQogICB3aGVuIHN5cy5zdGRvdXQgaXMgcmVhc3NpZ25lZC4KIAotLSBJc3N1ZSAjMTAxOTg4MjogRml4IEluZGV4RXJyb3Igd2hlbiBsb2FkaW5nIGNlcnRhaW4gaG90c2hvdCBzdGF0cy4KKy0gSXNzdWUgIzczOTU6IEZpeCB0cmFjZWJhY2tzIGluIHBzdGF0cyBpbnRlcmFjdGl2ZSBicm93c2VyLgorCistIElzc3VlICM4MjMwOiBGaXggTGliL3Rlc3Qvc29ydHBlcmYucHkuCisKKy0gSXNzdWUgIzE3MTM6IEZpeCBvcy5wYXRoLmlzbW91bnQoKSwgd2hpY2ggcmV0dXJuZWQgdHJ1ZSBmb3Igc3ltYm9saWMgbGlua3MKKyAgYWNyb3NzIGRldmljZXMuCisKKy0gSXNzdWUgIzg4MjY6IFByb3Blcmx5IGxvYWQgb2xkLXN0eWxlICJleHBpcmVzIiBhdHRyaWJ1dGUgaW4gaHR0cC5jb29raWVzLgorCistIElzc3VlICMxNjkwMTAzOiBGaXggaW5pdGlhbCBuYW1lc3BhY2UgZm9yIGNvZGUgcnVuIHdpdGggdHJhY2UubWFpbigpLgogCiAtIElzc3VlICM4NDcxOiBJbiBkb2N0ZXN0LCBwcm9wZXJseSByZXNldCB0aGUgb3V0cHV0IHN0cmVhbSB0byBhbiBlbXB0eQogICBzdHJpbmcgd2hlbiBVbmljb2RlIHdhcyBwcmV2aW91c2x5IG91dHB1dC4KIAotLSBJc3N1ZSAjODM5NzogUmFpc2UgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIG1peCBpdGVyYXRpb24gYW5kIHJlZ3VsYXIKLSAgcmVhZHMgb24gYSBCWjJGaWxlIG9iamVjdCwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGluY29ycmVjdCByZXN1bHRzLgotCiAtIElzc3VlICM4NjIwOiB3aGVuIGEgQ21kIGlzIGZlZCBpbnB1dCB0aGF0IHJlYWNoZXMgRU9GIHdpdGhvdXQgYSBmaW5hbAogICBuZXdsaW5lLCBpdCBubyBsb25nZXIgdHJ1bmNhdGVzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGFzdCBjb21tYW5kIGxpbmUuCiAKLS0gSXNzdWUgIzcwNjY6IGFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmUgbm93IHJlc3RvcmVzIHRoZSBjd2QgaWYgYW4gZXJyb3IgaXMKLSAgcmFpc2VkLiBJbml0aWFsIHBhdGNoIGJ5IEV6aW8gTWVsb3R0aS4KKy0gSXNzdWUgIzYyMTM6IEltcGxlbWVudCBnZXRzdGF0ZSgpIGFuZCBzZXRzdGF0ZSgpIG1ldGhvZHMgb2YgdXRmLTgtc2lnIGFuZAorICB1dGYtMTYgaW5jcmVtZW50YWwgZW5jb2RlcnMuCiAKLS0gSXNzdWUgIzUwMDY6IEJldHRlciBoYW5kbGluZyBvZiB1bmljb2RlIGJ5dGUtb3JkZXIgbWFya3MgKEJPTSkgaW4gdGhlIGlvCi0gIGxpYnJhcnkuIFRoaXMgbWVhbnMsIGZvciBleGFtcGxlLCB0aGF0IG9wZW5pbmcgYW4gVVRGLTE2IHRleHQgZmlsZSBpbiBhcHBlbmQKLSAgbW9kZSBkb2Vzbid0IGFkZCBhIEJPTSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIHRoZSBmaWxlIGlzbid0IGVtcHR5LgorLSBJc3N1ZSAjNzExMzogU3BlZWQgdXAgbG9hZGluZyBpbiBDb25maWdQYXJzZXIuIFBhdGNoIGJ5IMWBdWthc3ogTGFuZ2EuCiAKIC0gSXNzdWUgIzM3MDQ6IGNvb2tpZWxpYiB3YXMgbm90IHByb3Blcmx5IGhhbmRsaW5nIFVSTHMgd2l0aCBhIC8gaW4gdGhlCiAgIHBhcmFtZXRlcnMuCiAKKy0gSXNzdWUgIzkwMzI6IFhNTC1SUEMgY2xpZW50IHJldHJpZXMgdGhlIHJlcXVlc3Qgb24gRVBJUEUgZXJyb3IuIFRoZSBFUElQRQorICBlcnJvciBvY2N1cnMgd2hlbiB0aGUgc2VydmVyIGNsb3NlcyB0aGUgc29ja2V0IGFuZCB0aGUgY2xpZW50IHNlbmRzIGEgYmlnCisgIFhNTC1SUEMgcmVxdWVzdC4KKworLSBJc3N1ZSAjNTU0MjogUmVtb3ZlIHNwZWNpYWwgbG9naWMgdGhhdCBjbG9zZXMgSFRUUENvbm5lY3Rpb24gc29ja2V0IG9uIEVQSVBFLgorCiAtIElzc3VlICM0NjI5OiBnZXRvcHQgcmFpc2VzIGFuIGVycm9yIGlmIGFuIGFyZ3VtZW50IGVuZHMgd2l0aCA9IHdoZXJlYXMgZ2V0b3B0CiAgIGRvZXNuJ3QgZXhjZXB0IGEgdmFsdWUgKGVnLiAtLWhlbHA9IGlzIHJlamVjdGVkIGlmIGdldG9wdCB1c2VzIFsnaGVscD0nXSBsb25nCiAgIG9wdGlvbnMpLgpAQCAtMjI4LDExICs3MDIsNiBAQAogICBJL08gZXJyb3Igb2NjdXJyZWQuICBOb3cgYW4gSU9FcnJvciBpcyByYWlzZWQgaW5zdGVhZC4gIFBhdGNoIGJ5IGNodWNrCiAgIChKYW4gSG9zYW5nKS4KIAotLSBJc3N1ZSAjMTU1NTU3MDogZW1haWwgbm8gbG9uZ2VyIGluc2VydHMgZXh0cmEgYmxhbmsgbGluZXMgd2hlbiBhIFxyXG4KLSAgY29tYm8gY3Jvc3NlcyBhbiA4MTkyIGJ5dGUgYm91bmRhcnkuCi0KLS0gSXNzdWUgIzkxNjQ6IEVuc3VyZSBzeXNjb25maWcgaGFuZGxlcyBkdXBibGljZSBhcmNocyB3aGlsZSBidWlsZGluZyBvbiBPU1gKLQogLSBJc3N1ZSAjNzY0NjogVGhlIGZubWF0Y2ggcGF0dGVybiBjYWNoZSBubyBsb25nZXIgZ3Jvd3Mgd2l0aG91dCBib3VuZC4KIAogLSBJc3N1ZSAjOTEzNjogRml4ICdkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uJwpAQCAtMjQzLDIxNCArNzEyLDU1IEBACiAgIHBvd2VyIG9mIDEwIGFuZCB0aGUgZXhwb25lbnQgaXMgdGlueSAoZm9yIGV4YW1wbGUsCiAgIERlY2ltYWwoMTApICoqIERlY2ltYWwoJzFlLTk5OTk5OTk5OScpKS4KIAorLSBJc3N1ZSAjOTE2MTogRml4IHJlZ3Jlc3Npb24gaW4gb3B0cGFyc2UncyBhY2NlcHRhbmNlIG9mIHVuaWNvZGUKKyAgc3RyaW5ncyBpbiBhZGRfb3B0aW9uIGNhbGxzLgorCiAtIElzc3VlICM5MTMwOiBGaXggdmFsaWRhdGlvbiBvZiByZWxhdGl2ZSBpbXBvcnRzIGluIHBhcnNlciBtb2R1bGUuCiAKIC0gSXNzdWUgIzkxMjg6IEZpeCB2YWxpZGF0aW9uIG9mIGNsYXNzIGRlY29yYXRvcnMgaW4gcGFyc2VyIG1vZHVsZS4KIAotLSBJc3N1ZSAjNzY3MzogRml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgKENWRS0yMDEwLTIwODkpIGluIHRoZSBhdWRpb29wCi0gIG1vZHVsZSwgZW5zdXJlIHRoYXQgdGhlIGlucHV0IHN0cmluZyBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZQorLSBJc3N1ZSAjOTE2NDogRW5zdXJlIHN5c2NvbmZpZyBoYW5kbGVzIGR1cGJsaWNlIGFyY2hzIHdoaWxlIGJ1aWxkaW5nIG9uIE9TWAogCi0tIElzc3VlICM2NTg5OiBjbGVhbnVwIGFzeW5jb3JlLnNvY2tldF9tYXAgaW4gY2FzZSBzbXRwZC5TTVRQU2VydmVyIGNvbnN0cnVjdG9yCi0gIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzkxMjU6IEFkZCByZWNvZ25pdGlvbiBvZiAnZXhjZXB0IC4uLiBhcyAuLi4nIHN5bnRheCB0byBwYXJzZXIgbW9kdWxlLgotCi0tIElzc3VlICM5MDg1OiBlbWFpbCBwYWNrYWdlIHZlcnNpb24gbnVtYmVyIGJ1bXBlZCB0byBpdHMgY29ycmVjdAotICB2YWx1ZSBvZiA0LjAuMiAoc2FtZSBhcyBpdCB3YXMgaW4gMi41KS4KLQotLSBJc3N1ZSAjOTA3NTogSW4gdGhlIHNzbCBtb2R1bGUsIHJlbW92ZSB0aGUgc2V0dGluZyBvZiBhIGBgZGVidWdgYCBmbGFnCi0gIG9uIGFuIE9wZW5TU0wgc3RydWN0dXJlLgotCi0tIElzc3VlICM1NjEwOiBmZWVkcGFyc2VyIG5vIGxvbmdlciBlYXRzIGV4dHJhIGNoYXJhY3RlcnMgYXQgdGhlIGVuZCBvZgotICBhIGJvZHkgcGFydCBpZiB0aGUgYm9keSBwYXJ0IGVuZHMgd2l0aCBhIFxyXG4uCi0KLS0gSXNzdWUgIzg5MjQ6IGxvZ2dpbmc6IEltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGZvciBVbmljb2RlIGluIGV4Y2VwdGlvbiB0ZXh0LgotCi0tIEZpeCBjb2RlY3MuZXNjYXBlX2VuY29kZSB0byByZXR1cm4gdGhlIGNvcnJlY3QgY29uc3VtZWQgc2l6ZS4KLQotLSBJc3N1ZSAjNjQ3MDogRHJvcCBVTkMgcHJlZml4IGluIEZpeFRrLgotCi0tIElzc3VlICM4ODMzOiB0YXJmaWxlIGNyZWF0ZWQgaGFyZCBsaW5rIGVudHJpZXMgd2l0aCBhIHNpemUgZmllbGQgIT0gMCBieQotICBtaXN0YWtlLgotCi0tIElzc3VlICMxMzY4MjQ3OiBzZXRfY2hhcnNldCAoYW5kIHRoZXJlZm9yZSBNSU1FVGV4dCkgbm93IGF1dG9tYXRpY2FsbHkKLSAgZW5jb2RlcyBhIHVuaWNvZGUgX3BheWxvYWQgdG8gdGhlIG91dHB1dF9jaGFyc2V0LgotCi0tIElzc3VlICM3MTUwOiBSYWlzZSBPdmVyZmxvd0Vycm9yIGlmIHRoZSByZXN1bHQgb2YgYWRkaW5nIG9yIHN1YnRyYWN0aW5nCi0gIHRpbWVkZWx0YSBmcm9tIGRhdGUgb3IgZGF0ZXRpbWUgZmFsbHMgb3V0c2lkZSBvZiB0aGUgTUlOWUVBUjpNQVhZRUFSIHJhbmdlLgotCi0tIElzc3VlICM2NjYyOiBGaXggcGFyc2luZyBvZiBtYWxmb3JtYXR0ZWQgY2hhcnJlZiAoJiNiYWQ7KSwgcGF0Y2ggd3JpdHRlbiBieQotICBGcmVkcmlrIEjDpcOlcmQKLQotLSBJc3N1ZSAjMTYyODIwNTogU29ja2V0IGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieSBzb2NrZXQuc29ja2V0Lm1ha2VmaWxlKCkgbm93Ci0gIHByb3Blcmx5IGhhbmRsZXMgRUlOVFIgd2l0aGluIHRoZSByZWFkLCByZWFkbGluZSwgd3JpdGUgJiBmbHVzaCBtZXRob2RzLgotICBUaGUgc29ja2V0LnNlbmRhbGwoKSBtZXRob2Qgbm93IHByb3Blcmx5IGhhbmRsZXMgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxzLgotCi0tIElzc3VlICMzOTI0OiBJZ25vcmUgY29va2llcyB3aXRoIGludmFsaWQgInZlcnNpb24iIGZpZWxkIGluIGNvb2tpZWxpYi4KLQotLSBJc3N1ZSAjNjI2ODogRml4IHNlZWsoKSBtZXRob2Qgb2YgY29kZWNzLm9wZW4oKSwgZG9uJ3QgcmVhZCBvciB3cml0ZSB0aGUgQk9NCi0gIHR3aWNlIGFmdGVyIHNlZWsoMCkuIEZpeCBhbHNvIHJlc2V0KCkgbWV0aG9kIG9mIGNvZGVjcywgVVRGLTE2LCBVVEYtMzIgYW5kCi0gIFN0cmVhbVdyaXRlciBjbGFzc2VzLgotCi0tIElzc3VlICM1NjQwOiBGaXggU2hpZnQtSklTIGluY3JlbWVudGFsIGVuY29kZXIgZm9yIGVycm9yIGhhbmRsZXJzIGRpZmZlcmVudAotICB0aGFuIHN0cmljdAotCi0tIElzc3VlICM4NzgyOiBBZGQgYSB0cmFpbGluZyBuZXdsaW5lIGluIGxpbmVjYWNoZS51cGRhdGVjYWNoZSB0byB0aGUgbGFzdCBsaW5lCi0gIG9mIGZpbGVzIHdpdGhvdXQgb25lLgotCi0tIElzc3VlICM4NzI5OiBSZXR1cm4gTm90SW1wbGVtZW50ZWQgZnJvbSBjb2xsZWN0aW9ucy5NYXBwaW5nLl9fZXFfXyB3aGVuCi0gIGNvbXBhcmluZyB0byBhIG5vbi1tYXBwaW5nLgotCi0tIElzc3VlICM1OTE4OiBGaXggYSBjcmFzaCBpbiB0aGUgcGFyc2VyIG1vZHVsZS4KLQotLSBJc3N1ZSAjODY4ODogRGlzdHV0aWxzIG5vdyByZWNhbGN1bGF0ZXMgTUFOSUZFU1QgZXZlcnl0aW1lLgotCi0tIElzc3VlICM3NjQwOiBJbiB0aGUgbmV3IGBpb2AgbW9kdWxlLCBmaXggcmVsYXRpdmUgc2VlaygpIGZvciBidWZmZXJlZAotICByZWFkYWJsZSBzdHJlYW1zIHdoZW4gdGhlIGludGVybmFsIGJ1ZmZlciBpc24ndCBlbXB0eS4gIFBhdGNoIGJ5IFBhc2NhbAotICBDaGFtYm9uLgotCi0tIElzc3VlICM1MDk5OiBzdWJwcm9jZXNzLlBvcGVuLl9fZGVsX18gbm8gbG9uZ2VyIHJlZmVyZW5jZXMgZ2xvYmFsIG9iamVjdHMsCi0gIGxlYWRpbmcgdG8gaXNzdWVzIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93bi4KLQotLSBJc3N1ZSAjODY4MTogTWFrZSB0aGUgemxpYiBtb2R1bGUncyBlcnJvciBtZXNzYWdlcyBtb3JlIGluZm9ybWF0aXZlIHdoZW4KLSAgdGhlIHpsaWIgaXRzZWxmIGRvZXNuJ3QgZ2l2ZSBhbnkgZGV0YWlsZWQgZXhwbGFuYXRpb24uCi0KLS0gSXNzdWUgIzg2NzQ6IEZpeGVkIGEgbnVtYmVyIG9mIGluY29ycmVjdCBvciB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nCi0gIG92ZXJmbG93IGNoZWNrcyBpbiB0aGUgYXVkaW9vcCBtb2R1bGUuCi0KLS0gSXNzdWUgIzg1NzE6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciB3aGVuIGNvbXByZXNzaW5nIG9yIGRlY29tcHJlc3NpbmcgYQotICBjaHVuayBsYXJnZXIgdGhhbiAxR0Igd2l0aCB0aGUgemxpYiBtb2R1bGUncyBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IKLSAgb2JqZWN0cy4KLQotLSBJc3N1ZSAjODU3MzogYXN5bmNvcmUgX3N0cmVycm9yKCkgZnVuY3Rpb24gbWlnaHQgdGhyb3cgVmFsdWVFcnJvci4KLQotLSBJc3N1ZSAjODQ4MzogYXN5bmNvcmUuZGlzcGF0Y2hlcidzIF9fZ2V0YXR0cl9fIG1ldGhvZCBwcm9kdWNlZCBjb25mdXNpbmcKLSAgZXJyb3IgbWVzc2FnZXMgd2hlbiBhY2Nlc3NpbmcgdW5kZWZpbmVkIGNsYXNzIGF0dHJpYnV0ZXMgYmVjYXVzZSBvZiB0aGUgY2hlYXAKLSAgaW5oZXJpdGFuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgotCi0tIElzc3VlICM0MjY1OiBzaHV0aWwuY29weWZpbGUoKSB3YXMgbGVha2luZyBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gZGlzayBmaWxscy4KLSAgUGF0Y2ggYnkgVHJlcyBTZWF2ZXIuCi0KLS0gSXNzdWUgIzg2MjE6IHV1aWQudXVpZDQoKSByZXR1cm5lZCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW4gdGhlCi0gIHBhcmVudCBhbmQgYW55IGNoaWxkcmVuIGNyZWF0ZWQgdXNpbmcgYGBvcy5mb3JrYGAgb24gTWFjT1MgWCAxMC42LgotCi0tIElzc3VlICM4MzEzOiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KCkgZW5jb2RlcyB1bmljb2RlIG1lc3NhZ2UgdG8KLSAgQVNDSUkgd2l0aCBiYWNrc2xhc2hyZXBsYWNlIGVycm9yIGhhbmRsZXIgaWYgc3RyKHZhbHVlKSBmYWlsZWQKLQotLSBJc3N1ZSAjODU2NzogRml4IHByZWNlZGVuY2Ugb2Ygc2lnbmFscyBpbiBEZWNpbWFsIG1vZHVsZTogd2hlbiBhCi0gIERlY2ltYWwgb3BlcmF0aW9uIHJhaXNlcyBtdWx0aXBsZSBzaWduYWxzIGFuZCBtb3JlIHRoYW4gb25lIG9mIHRob3NlCi0gIHNpZ25hbHMgaXMgdHJhcHBlZCwgdGhlIHNwZWNpZmljYXRpb24gZGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2gKLSAgdGhlIHNpZ25hbHMgc2hvdWxkIGJlIGhhbmRsZWQuICBJbiBtYW55IGNhc2VzIHRoaXMgb3JkZXIgd2Fzbid0Ci0gIGJlaW5nIGZvbGxvd2VkLCBsZWFkaW5nIHRvIHRoZSB3cm9uZyBQeXRob24gZXhjZXB0aW9uIGJlaW5nIHJhaXNlZC4KLQotLSBJc3N1ZSAjNzg2NTogVGhlIGNsb3NlKCkgbWV0aG9kIG9mIDptb2Q6YGlvYCBvYmplY3RzIHNob3VsZCBub3Qgc3dhbGxvdwotICBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgaW1wbGljaXQgZmx1c2goKS4gIEFsc28gZW5zdXJlIHRoYXQgY2FsbGluZwotICBjbG9zZSgpIHNldmVyYWwgdGltZXMgaXMgc3VwcG9ydGVkLiAgSW5pdGlhbCBwYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KLQotLSBJc3N1ZSAjODU4MTogbG9nZ2luZzogcmVtb3ZlZCBlcnJvcnMgcmFpc2VkIHdoZW4gY2xvc2luZyBoYW5kbGVycyB0d2ljZS4KLQotLSBJc3N1ZSAjNDY4NzogRml4IGFjY3VyYWN5IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBydW50aW1lcyBkaXNwbGF5ZWQgd2l0aAotICBnYy5ERUJVR19TVEFUUy4KLQotLSBJc3N1ZSAjODM1NDogVGhlIHNpZ2ludGVycnVwdCBzZXR0aW5nIGlzIG5vdyBwcmVzZXJ2ZWQgZm9yIGFsbCBzaWduYWxzLAotICBub3QganVzdCBTSUdDSExELgotCi0tIElzc3VlICM4NTc3OiBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jKCkgbm93IG1ha2VzIGEgZGlmZmVyZW5jZQotICBiZXR3ZWVuIHRoZSBidWlsZCBkaXIgYW5kIHRoZSBzb3VyY2UgZGlyIHdoZW4gbG9va2luZyBmb3IgInB5dGhvbi5oIiBvcgotICAiSW5jbHVkZSIuCi0KLS0gSXNzdWUgIzg0NjQ6IHRhcmZpbGUgbm8gbG9uZ2VyIGNyZWF0ZXMgZmlsZXMgd2l0aCBleGVjdXRlIHBlcm1pc3Npb25zIHNldAotICB3aGVuIG1vZGU9Ind8IiBpcyB1c2VkLgotCi0tIElzc3VlICM3ODM0OiBGaXggY29ubmVjdCgpIG9mIEJsdWV0b290aCBMMkNBUCBzb2NrZXRzIHdpdGggcmVjZW50IHZlcnNpb25zCi0gIG9mIHRoZSBMaW51eCBrZXJuZWwuICBQYXRjaCBieSBZYW5pdiBBa25pbi4KLQotLSBJc3N1ZSAjNjMxMjogRml4ZWQgaHR0cCBIRUFEIHJlcXVlc3Qgd2hlbiB0aGUgdHJhbnNmZXIgZW5jb2RpbmcgaXMgY2h1bmtlZC4KLSAgSXQgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gYW4gZW1wdHkgcmVzcG9uc2Ugbm93LgotCi0tIElzc3VlICM4MDg2OiBJbiA6ZnVuYzpgc3NsLkRFUl9jZXJ0X3RvX1BFTV9jZXJ0KClgLCBmaXggbWlzc2luZyBuZXdsaW5lCi0gIGJlZm9yZSB0aGUgY2VydGlmaWNhdGUgZm9vdGVyLiAgUGF0Y2ggYnkgS3lsZSBWYW5kZXJCZWVrLgotCi0tIElzc3VlICM4NTQ5OiBGaXggY29tcGlsaW5nIHRoZSBfc3NsIGV4dGVuc2lvbiB1bmRlciBBSVguICBQYXRjaCBieQotICBTcmlkaGFyIFJhdG5ha3VtYXIuCi0KLS0gSXNzdWUgIzIzMDI6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNodXRkb3duLAotICB3aGVyZSB0aGUgbWV0aG9kIGNvdWxkIGJsb2NrIGluZGVmaW5pdGVseSBpZiBjYWxsZWQganVzdCBiZWZvcmUgdGhlCi0gIGV2ZW50IGxvb3Agc3RhcnRlZCBydW5uaW5nLiAgVGhpcyBhbHNvIGZpeGVzIHRoZSBvY2Nhc2lvbmFsIGZyZWV6ZXMKLSAgd2l0bmVzc2VkIGluIHRlc3RfaHR0cHNlcnZlcnMuCi0KLS0gSXNzdWUgIzUxMDM6IFNTTCBoYW5kc2hha2Ugd291bGQgaWdub3JlIHRoZSBzb2NrZXQgdGltZW91dCBhbmQgYmxvY2sKLSAgaW5kZWZpbml0ZWx5IGlmIHRoZSBvdGhlciBlbmQgZGlkbid0IHJlc3BvbmQuCi0KLS0gVGhlIGRvX2hhbmRzaGFrZSgpIG1ldGhvZCBvZiBTU0wgb2JqZWN0cyBub3cgYWRqdXN0cyB0aGUgYmxvY2tpbmcgbW9kZSBvZgotICB0aGUgU1NMIHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKGFzIG90aGVyIG1ldGhvZHMgYWxyZWFkeSBkbykuCi0KLS0gSXNzdWUgIzUyMzg6IENhbGxpbmcgbWFrZWZpbGUoKSBvbiBhbiBTU0wgb2JqZWN0IHdvdWxkIHByZXZlbnQgdGhlCi0gIHVuZGVybHlpbmcgc29ja2V0IGZyb20gYmVpbmcgY2xvc2VkIHVudGlsIGFsbCBvYmplY3RzIGdldCB0cnVlbHkgZGVzdHJveWVkLgotCi0tIElzc3VlICM3OTQzOiBGaXggY2lyY3VsYXIgcmVmZXJlbmNlIGNyZWF0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIGFuIFNTTAotICBzb2NrZXQuICBJbml0aWFsIHBhdGNoIGJ5IFDDqXRlciBTemFiw7MuCi0KLS0gSXNzdWUgIzgxMDg6IEZpeCB0aGUgdW53cmFwKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIHdoZW4gdGhlIHNvY2tldCBoYXMKLSAgYSBub24taW5maW5pdGUgdGltZW91dC4gIEFsc28gbWFrZSB0aGF0IG1ldGhvZCBmcmllbmRsaWVyIHdpdGggYXBwbGljYXRpb25zCi0gIHdhbnRpbmcgdG8gY29udGludWUgdXNpbmcgdGhlIHNvY2tldCBpbiBjbGVhci10ZXh0IG1vZGUsIGJ5IGRpc2FibGluZwotICBPcGVuU1NMJ3MgaW50ZXJuYWwgcmVhZGFoZWFkLiAgVGhhbmtzIHRvIERhcnJ5bCBNaWxlcyBmb3IgZ3VpZGFuY2UuCi0KLS0gSXNzdWUgIzg0ODQ6IExvYWQgYWxsIGNpcGhlcnMgYW5kIGRpZ2VzdCBhbGdvcml0aG1zIHdoZW4gaW5pdGlhbGl6aW5nCi0gIHRoZSBfc3NsIGV4dGVuc2lvbiwgc3VjaCB0aGF0IHZlcmlmaWNhdGlvbiBvZiBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMKLSAgZG9lc24ndCBmYWlsIGJlY2F1c2Ugb2YgYW4gInVua25vd24gYWxnb3JpdGhtIi4KLQotLSBJc3N1ZSAjNDgxNDogdGltZW91dCBwYXJhbWV0ZXIgaXMgbm93IGFwcGxpZWQgYWxzbyBmb3IgY29ubmVjdGlvbnMgcmVzdWx0aW5nCi0gIGZyb20gUE9SVC9FUFJUIGNvbW1hbmRzLgotCi0tIElzc3VlICMzODE3OiBmdHBsaWIuRlRQLmFib3J0KCkgbWV0aG9kIG5vdyBjb25zaWRlcnMgMjI1IGEgdmFsaWQgcmVzcG9uc2UKLSAgY29kZSBhcyBzdGF0ZWQgaW4gUkZDLTk1OSBhdCBjaGFwdGVyIDUuNC4KLQotLSBJc3N1ZSAjNTI3NzogRml4IHF1b3RlIGNvdW50aW5nIHdoZW4gcGFyc2luZyBSRkMgMjIzMSBlbmNvZGVkIHBhcmFtZXRlcnMuCi0KLS0gSXNzdWUgIzgxNzk6IEZpeCBtYWNwYXRoLnJlYWxwYXRoKCkgb24gYSBub24tZXhpc3RpbmcgcGF0aC4KLQotLSBJc3N1ZSAjODMxMDogQWxsb3cgZGlzIHRvIGV4YW1pbmUgbmV3IHN0eWxlIGNsYXNzZXMuCi0KLS0gSXNzdWUgIzc2Njc6IEZpeCBkb2N0ZXN0IGZhaWx1cmVzIHdpdGggbm9uLUFTQ0lJIHBhdGhzLgotCi0tIElzc3VlICM3NjI0OiBGaXggaXNpbnN0YW5jZShmb28oKSwgY29sbGVjdGlvbnMuQ2FsbGFibGUpIGZvciBvbGQtc3R5bGUKLSAgY2xhc3Nlcy4KLQotLSBJc3N1ZSAjNzUxMjogc2h1dGlsLmNvcHlzdGF0KCkgY291bGQgcmFpc2UgYW4gT1NFcnJvciB3aGVuIHRoZSBmaWxlc3lzdGVtCi0gIGRpZG4ndCBzdXBwb3J0IGNoZmxhZ3MoKSAoZm9yIGV4YW1wbGUgWkZTIHVuZGVyIEZyZWVCU0QpLiAgVGhlIGVycm9yIGlzCi0gIG5vdyBzaWxlbmNlZC4KLQotLSBJc3N1ZSAjMzg5MCwgIzgyMjI6IEZpeCByZWN2KCkgYW5kIHJlY3ZfaW50bygpIG9uIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cy4KLSAgQWxzbywgZW5hYmxlIHRoZSBTU0xfTU9ERV9BVVRPX1JFVFJZIGZsYWcgb24gU1NMIHNvY2tldHMsIHNvIHRoYXQgYmxvY2tpbmcKLSAgcmVhZHMgYW5kIHdyaXRlcyBhcmUgYWx3YXlzIHJldHJpZWQgYnkgT3BlblNTTCBpdHNlbGYuCi0KLS0gSXNzdWUgIzY1NDQ6IGZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIHRoZSBrcXVldWUgaW1wbGVtZW50YXRpb24ncyBlcnJvcgotICBoYW5kbGluZy4KLQotLSBJc3N1ZSAjNzc3NDogU2V0IHN5cy5leGVjdXRhYmxlIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBhcmd2WzBdIGhhcyBiZWVuCi0gIHNldCB0byBhbiBub24gZXhpc3RlbnQgcHJvZ3JhbSBuYW1lIGFuZCBQeXRob24gaXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZSByZWFsCi0gIHByb2dyYW0gbmFtZQotCi0tIElzc3VlICM2OTA2OiBUayBzaG91bGQgbm90IHNldCBVbmljb2RlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxMDU0OTQzOiBGaXggdW5pY29kZWRhdGEubm9ybWFsaXplKCdORkMnLCB0ZXh0KSBmb3IgdGhlIFB1YmxpYyBSZXZpZXcKLSAgSXNzdWUgIzI5Ci0KLS0gSXNzdWUgIzc0OTQ6IGZpeCBhIGNyYXNoIGluIF9sc3Byb2YgKGNQcm9maWxlKSBhZnRlciBjbGVhcmluZyB0aGUgcHJvZmlsZXIsCi0gIHJlc2V0IGFsc28gdGhlIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcG9pbnRlciBjb250ZXh0LgotCi0tIElzc3VlICM0OTYxOiBJbmNvbnNpc3RlbnQvd3JvbmcgcmVzdWx0IG9mIGFza3llc25vIGZ1bmN0aW9uIGluIHRrTWVzc2FnZUJveAotICB3aXRoIFRjbC9Uay04LjUuCi0KLS0gSXNzdWUgIzczNTY6IGN0eXBlcy51dGlsOiBNYWtlIHBhcnNpbmcgb2YgbGRjb25maWcgb3V0cHV0IGluZGVwZW5kZW50IG9mCi0gIHRoZSBsb2NhbGUuCistIElzc3VlICM5MzE1OiBGaXggZm9yIHRoZSB0cmFjZSBtb2R1bGUgdG8gcmVjb3JkIGNvcnJlY3QgY2xhc3MgbmFtZQorICBmb3IgdHJhY2luZyBtZXRob2RzLgogCiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjOTA1NDogRml4IGEgY3Jhc2ggb2NjdXJyaW5nIHdoZW4gdXNpbmcgdGhlIHB5ZXhwYXQgbW9kdWxlCisgIHdpdGggZXhwYXQgdmVyc2lvbiAyLjAuMS4KKworLSBJc3N1ZSAjMTAwMDM6IEFsbG93IGhhbmRsaW5nIG9mIFNJR0JSRUFLIG9uIFdpbmRvd3MuIEZpeGVzIGEgcmVncmVzc2lvbgorICBpbnRyb2R1Y2VkIGJ5IGlzc3VlICM5MzI0LgorCistIElzc3VlICM4NzM0OiBBdm9pZCBjcmFzaCBpbiBtc3ZjcnQuZ2V0X29zZmhhbmRsZSgpIHdoZW4gYW4gaW52YWxpZCBmaWxlCisgIGRlc2NyaXB0b3IgaXMgcHJvdmlkZWQuICBQYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KKworLSBJc3N1ZSAjNzczNjogUmVsZWFzZSB0aGUgR0lMIGFyb3VuZCBjYWxscyB0byBvcGVuZGlyKCkgYW5kIGNsb3NlZGlyKCkKKyAgaW4gdGhlIHBvc2l4IG1vZHVsZS4gIFBhdGNoIGJ5IE1hcmNpbiBCYWNocnkuCisKKy0gQXMgYSByZXN1bHQgb2YgaXNzdWUgIzI1MjEsIHRoZSBfd2Vha3JlZiBtb2R1bGUgaXMgbm93IGNvbXBpbGVkIGludG8gdGhlCisgIGludGVycHJldGVyIGJ5IGRlZmF1bHQuCisKKy0gSXNzdWUgIzkzMjQ6IEFkZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB0byBzaWduYWwuc2lnbmFsIG9uIFdpbmRvd3MgaW4gb3JkZXIKKyAgdG8gcHJldmVudCBjcmFzaGVzLgorCistIElzc3VlICM5NTI2OiBSZW1vdmUgc29tZSBvdXRkYXRlZCAoaW50KSBjYXN0cyB0aGF0IHdlcmUgcHJldmVudGluZworICB0aGUgYXJyYXkgbW9kdWxlIGZyb20gd29ya2luZyBjb3JyZWN0bHkgd2l0aCBhcnJheXMgb2YgbW9yZSB0aGFuCisgIDIqKjMxIGVsZW1lbnRzLgorCiAtIEZpeCBtZW1vcnkgbGVhayBpbiBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydC4KIAorLSBJc3N1ZSAjODA2NTogRml4IG1lbW9yeSBsZWFrIGluIHJlYWRsaW5lIG1vZHVsZSAoZnJvbSBmYWlsdXJlIHRvCisgIGZyZWUgdGhlIHJlc3VsdCBvZiBoaXN0b3J5X2dldF9oaXN0b3J5X3N0YXRlKCkpLgorCistIElzc3VlICM5NDUwOiBGaXggbWVtb3J5IGxlYWsgaW4gcmVhZGxpbmUucmVwbGFjZV9oaXN0b3J5X2l0ZW0gYW5kCisgIHJlYWRsaW5lLnJlbW92ZV9oaXN0b3J5X2l0ZW0gZm9yIHJlYWRsaW5lIHZlcnNpb24gPj0gNS4wLgorCistIElzc3VlICM4MTA1OiBWYWxpZGF0ZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkIHRvIG1tYXAubW1hcCBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDE5ODgyOiBGaXggSW5kZXhFcnJvciB3aGVuIGxvYWRpbmcgY2VydGFpbiBob3RzaG90IHN0YXRzLgorCiAtIElzc3VlICM5NDIyOiBGaXggbWVtb3J5IGxlYWsgd2hlbiByZS1pbml0aWFsaXppbmcgYSBzdHJ1Y3QuU3RydWN0IG9iamVjdC4KIAogLSBJc3N1ZSAjNzkwMDogVGhlIGdldGdyb3VwcygyKSBzeXN0ZW0gY2FsbCBvbiBNYWNPU1ggYmVoYXZlcyByYXRoZXIgb2RkbHkKQEAgLTQ2NSw1MDAgKzc3NSwxNDg0IEBACiAgIHRoZW4gdGhhdCBleGNlcHRpb24gd2Fzbid0IHByb3Blcmx5IHByb3BhZ2F0ZWQgb24gbWFjaGluZXMgd2hlcmUKICAgY2hhciBpcyB1bnNpZ25lZC4KIAotLSBJc3N1ZSAjNzM4NDogSWYgdGhlIHN5c3RlbSByZWFkbGluZSBsaWJyYXJ5IGlzIGxpbmtlZCBhZ2FpbnN0Ci0gIG5jdXJzZXMsIGRvIG5vdCBsaW5rIHRoZSByZWFkbGluZSBtb2R1bGUgYWdhaW5zdCBuY3Vyc2Vzdy4gVGhlCi0gIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gb2YgbGlua2luZyB0aGUgcmVhZGxpbmUgYW5kIGN1cnNlcyBtb2R1bGVzCi0gIGFnYWluc3QgdGhlIHNhbWUgY3Vyc2VzIGxpYnJhcnkgaXMgY3VycmVudGx5IG5vdCBlbmFibGVkLgorLSBJc3N1ZSAjNzU2NzogRG9uJ3QgY2FsbCBgc2V0dXB0ZXJtJyB0d2ljZS4KIAotLSBJc3N1ZSAjMjgxMDogRml4IGNhc2VzIHdoZXJlIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IEFQSSByZXR1cm5zCi0gIEVSUk9SX01PUkVfREFUQSwgcmVxdWlyaW5nIGEgcmUtdHJ5IGluIG9yZGVyIHRvIGdldCB0aGUgY29tcGxldGUgcmVzdWx0LgorVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzcyODc6IERlbW8vaW1wdXRpbC9rbmVlLnB5IHdhcyByZW1vdmVkLgorCistIElzc3VlICM5MTg4OiBUaGUgZ2RiIGV4dGVuc2lvbiBub3cgaGFuZGxlcyBjb3JyZWN0bHkgbmFycm93IChVQ1MyKSBhcyB3ZWxsCisgIGFzIHdpZGUgKFVDUzQpIHVuaWNvZGUgYnVpbGRzIGZvciBib3RoIHRoZSBob3N0IGludGVycHJldGVyIChlbWJlZGRlZAorICBpbnNpZGUgZ2RiKSBhbmQgdGhlIGludGVycHJldGVyIHVuZGVyIHRlc3QuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICM4ODUyOiBBbGxvdyB0aGUgc29ja2V0IG1vZHVsZSB0byBidWlsZCBvbiBPcGVuU29sYXJpcy4KKworLSBJc3N1ZSAjMTAwNTQ6IFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgdWludHB0cl90IGluIGludHR5cGVzLmguICBQYXRjaCBieQorICBBa2lyYSBLaXRhZGEuCisKKy0gSXNzdWUgIzEwMDU1OiBNYWtlIGpzb24gQzg5LWNvbXBsaWFudCBpbiBVQ1M0IG1vZGUuCisKKy0gSXNzdWUgIzE2MzM4NjM6IERvbid0IGlnbm9yZSAkQ0MgdW5kZXIgQUlYLgorCistIElzc3VlICM5ODEwOiBDb21waWxlIGJ6aXAyIHNvdXJjZSBmaWxlcyBpbiBweXRob24ncyBwcm9qZWN0IGZpbGUKKyAgZGlyZWN0bHkuIEl0IHVzZWQgdG8gYmUgYnVpbHQgd2l0aCBiemlwMidzIG1ha2VmaWxlLgorCistIElzc3VlICM5NDEzNDY6IEltcHJvdmUgdGhlIGJ1aWxkIHByb2Nlc3MgdW5kZXIgQUlYIGFuZCBhbGxvdyBQeXRob24gdG8KKyAgYmUgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4gU2FibMOpLgorCistIElzc3VlICM0MDI2OiBNYWtlIHRoZSBmY250bCBleHRlbnNpb24gYnVpbGQgdW5kZXIgQUlYLiAgUGF0Y2ggYnkgU8OpYmFzdGllbgorICBTYWJsw6kuCisKKy0gSXNzdWUgIzMxMDE6IEhlbHBlciBmdW5jdGlvbnMgX2FkZF9vbmVfdG9faW5kZXhfQygpIGFuZAorICBfYWRkX29uZV90b19pbmRleF9GKCkgYmVjb21lIF9QeV9hZGRfb25lX3RvX2luZGV4X0MoKSBhbmQKKyAgX1B5X2FkZF9vbmVfdG9faW5kZXhfRigpLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzk3MDA6IGRlZmluZSBIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTIHVuZGVyIEFJWCA2LnguICBQYXRjaCBieQorICBTw6liYXN0aWVuIFNhYmzDqS4KKworLSBJc3N1ZSAjOTI4MDogTWFrZSBzaGFyZWRpbnN0YWxsIGRlcGVuZCBvbiBzaGFyZWRtb2RzLgorCistIElzc3VlICM5Mjc1OiBUaGUgT1NYIGluc3RhbGxlciBvbmNlIGFnYWluIGluc3RhbGxzIGxpbmtzIHRvIGJpbmFyaWVzIGluCisgIGBgL3Vzci9sb2NhbC9iaW5gYC4KKworLSBJc3N1ZSAjOTM5MjogQSBmcmFtZXdvcmsgYnVpbGQgb24gT1NYICB3aWxsIG9uY2UgYWdhaW4gdXNlIGEgdmVyc2lvbmVkIG5hbWUKKyAgb2YgdGhlIGBgMnRvM2BgIHRvb2wsIHRoYXQgaXMgeW91IGNhbiB1c2UgYGAydG8zLTIuN2BgIHRvIHNlbGVjdCB0aGUgUHl0aG9uCisgIDIuNyBlZGl0aW9uIG9mIDJ0bzMuCisKKy0gSXNzdWUgIzk3MDE6IFRoZSBNYWNPU1ggaW5zdGFsbGVyIGNhbiBwYXRjaCB0aGUgc2hlbGwgcHJvZmlsZSB0byBlbnN1cmUgdGhhdAorICB0aGUgImJpbiIgZGlyZWN0b3J5IGluc2lkZSB0aGUgZnJhbWV3b3JrIGlzIG9uIHRoZSBzaGVsbCdzIHNlYXJjaCBwYXRoLiBUaGlzCisgIGZlYXR1cmUgbm93IGFsc28gc3VwcG9ydHMgdGhlIFpTSCBzaGVsbC4KKworLSBJc3N1ZSAjNzQ3MzogYXZvaWQgbGluayBlcnJvcnMgd2hlbiBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGEgZGlmZmVyZW50CisgIHNldCBvZiBhcmNoaXRlY3R1cmVzIHRoYW4gdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM5OTc4OiBXYWl0IHVudGlsIHN1YnByb2Nlc3MgY29tcGxldGVzIGluaXRpYWxpemF0aW9uLiAoV2luMzJLaWxsVGVzdHMKKyAgaW4gdGVzdF9vcykKKworLSBJc3N1ZSAjOTg5NDogRG8gbm90IGhhcmRjb2RlIEVOT0VOVCBpbiB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzkzMjM6IE1ha2UgdGVzdC5yZWdydGVzdC5fX2ZpbGVfXyBhYnNvbHV0ZSwgdGhpcyB3YXMgbm90IGFsd2F5cyB0aGUKKyAgY2FzZSB3aGVuIHJ1bm5pbmcgcHJvZmlsZSBvciB0cmFjZSwgZm9yIGV4YW1wbGUuCisKKy0gSXNzdWUgIzkzMTU6IEFkZGVkIHRlc3RzIGZvciB0aGUgdHJhY2UgbW9kdWxlLiAgUGF0Y2ggYnkgRWxpIEJlbmRlcnNreS4KKworLSBTdHJlbmd0aGVuIHRlc3RfdW5pY29kZSB3aXRoIGV4cGxpY2l0IHR5cGUgY2hlY2tpbmcgZm9yIGFzc2VydEVxdWFsIHRlc3RzLgorCistIElzc3VlICM4ODU3OiBQcm92aWRlIGEgdGVzdCBjYXNlIGZvciBzb2NrZXQuZ2V0YWRkcmluZm8uCisKKy0gSXNzdWUgIzc1NjQ6IFNraXAgdGVzdF9pb2N0bCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8gL2Rldi90dHkuCisKKy0gSXNzdWUgIzg0MzM6IEZpeCB0ZXN0X2N1cnNlcyBmYWlsdXJlIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgbmN1cnNlcy4KKworLSBJc3N1ZSAjOTQ5NjogUHJvdmlkZSBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBybGNvbXBsZXRlciBtb2R1bGUuICBQYXRjaCBieQorICBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICM4NjA1OiBTa2lwIHRlc3RfZ2RiIGlmIFB5dGhvbiBpcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMuCisKKy0gSXNzdWUgIzk1Njg6IEZpeCB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgb24gT1MgWCAxMC4zLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzk4MTc6IEFkZCBleHBhdCBDT1BZSU5HIGZpbGU7IGFkZCBleHBhdCwgbGliZmZpIGFuZCBleHBhdCBsaWNlbnNlcworICB0byBEb2MvbGljZW5zZS5yc3QuCisKKy0gSXNzdWUgIzk1MjQ6IERvY3VtZW50IHRoYXQgdHdvIENUUkwqIHNpZ25hbHMgYXJlIG1lYW50IGZvciB1c2Ugb25seQorICB3aXRoIG9zLmtpbGwuCisKKy0gSXNzdWUgIzkyNTU6IERvY3VtZW50IHRoYXQgdGhlICd0ZXN0JyBwYWNrYWdlIGlzIGZvciBpbnRlcm5hbCBQeXRob24gdXNlCisgIG9ubHkuCisKKy0gSXNzdWUgIzc4Mjk6IERvY3VtZW50IGluIGRpcyB0aGF0IGJ5dGVjb2RlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjc/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIwMTAtMDctMDMqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIFByZXZlbnQgYXNzaWdubWVudCB0byBzZXQgbGl0ZXJhbHMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg2ODogRWxpbWluYXRlIHN1YnRsZSB0aW1pbmcgaXNzdWVzIGluIHRocmVhZC1sb2NhbCBvYmplY3RzIGJ5CisgIGdldHRpbmcgcmlkIG9mIHRoZSBjYWNoZWQgY29weSBvZiB0aHJlYWQtbG9jYWwgYXR0cmlidXRlIGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzkxMjU6IEFkZCByZWNvZ25pdGlvbiBvZiAnZXhjZXB0IC4uLiBhcyAuLi4nIHN5bnRheCB0byBwYXJzZXIgbW9kdWxlLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNzY3MzogRml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgKENWRS0yMDEwLTIwODkpIGluIHRoZSBhdWRpb29wIG1vZHVsZSwKKyAgZW5zdXJlIHRoYXQgdGhlIGlucHV0IHN0cmluZyBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZS4KKworLSBJc3N1ZSAjOTA3NTogSW4gdGhlIHNzbCBtb2R1bGUsIHJlbW92ZSB0aGUgc2V0dGluZyBvZiBhIGBgZGVidWdgYCBmbGFnCisgIG9uIGFuIE9wZW5TU0wgc3RydWN0dXJlLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyByZWxlYXNlIGNhbmRpZGF0ZSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIwMTAtMDYtMjAqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM5MDU4OiBSZW1vdmUgYXNzZXJ0aW9ucyBhYm91dCBJTlRfTUFYIGluIFVuaWNvZGVEZWNvZGVFcnJvci4KKworLSBJc3N1ZSAjODIwMjogUHJldmlvdXMgY2hhbmdlIHRvIGBgc3lzLmFyZ3ZbMF1gYCBoYW5kbGluZyBmb3IgLW0gY29tbWFuZCBsaW5lCisgIG9wdGlvbiByZXZlcnRlZCBkdWUgdG8gdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb24gaGFuZGxpbmcgb2YgYGBzeXMucGF0aGBgLgorICBTZWUgdHJhY2tlciBpc3N1ZSBmb3IgZGV0YWlscy4KKworLSBJc3N1ZSAjODk0MTogZGVjb2RpbmcgYmlnIGVuZGlhbiBVVEYtMzIgZGF0YSBpbiBVQ1MtMiBidWlsZHMgY291bGQgY3Jhc2gKKyAgdGhlIGludGVycHJldGVyIHdpdGggY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUKKyAgKGhpZ2hlciB0aGFuIDB4MTAwMDApLgorCistIEluIHRoZSB1bmljb2RlL3N0ci5mb3JtYXQoKSwgcmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gaW5kZXhlcyB0byBhcmd1bWVudHMgYXJlCisgIHRvbyBsYXJnZS4KIAogQnVpbGQKIC0tLS0tCiAKIC0gSXNzdWUgIzg4NTQ6IEZpeCBmaW5kaW5nIFZpc3VhbCBTdHVkaW8gMjAwOCBvbiBXaW5kb3dzIHg2NC4KIAotLSBJc3N1ZSAjMzkyODogb3MubWtub2QoKSBub3cgYXZhaWxhYmxlIGluIFNvbGFyaXMsIGFsc28uCitMaWJyYXJ5CistLS0tLS0tCiAKLS0gSXNzdWUgIzgxNzU6IC0td2l0aC11bml2ZXJzYWwtYXJjaHM9YWxsIHdvcmtzIGNvcnJlY3RseSBvbiBPU1ggMTAuNQorLSBJc3N1ZSAjNjU4OTogY2xlYW51cCBhc3luY29yZS5zb2NrZXRfbWFwIGluIGNhc2Ugc210cGQuU01UUFNlcnZlciBjb25zdHJ1Y3RvcgorICByYWlzZXMgYW4gZXhjZXB0aW9uLgogCi0tIElzc3VlICM2NzE2OiBRdW90ZSAteCBhcmd1bWVudHMgb2YgY29tcGlsZWFsbCBpbiBNU0kgaW5zdGFsbGVyLgorLSBJc3N1ZSAjODk1OTogZml4IHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHVzaW5nIHVubW9kaWZpZWQgbGliZmZpCisgIGxpYnJhcnkgb24gV2luZG93cy4gIGN0eXBlcyBkb2VzIG5vdyBhZ2FpbiBjaGVjayB0aGUgc3RhY2sgYmVmb3JlCisgIGFuZCBhZnRlciBjYWxsaW5nIGZvcmVpZ24gZnVuY3Rpb25zLgogCi0tIElzc3VlICMxNjI4NDg0OiBUaGUgTWFrZWZpbGUgZG9lc24ndCBpZ25vcmUgdGhlIENGTEFHUyBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBhbnltb3JlLiAgSXQgYWxzbyBmb3J3YXJkcyB0aGUgTERGTEFHUyBzZXR0aW5ncyB0byB0aGUgbGlua2VyCi0gIHdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeS4KKy0gSXNzdWUgIzg3MjA6IGZpeCByZWdyZXNzaW9uIGNhdXNlZCBieSBmaXggZm9yICM0MDUwIGJ5IG1ha2luZyBnZXRzb3VyY2VmaWxlCisgIHNtYXJ0IGVub3VnaCB0byBmaW5kIHNvdXJjZSBmaWxlcyBpbiB0aGUgbGluZWNhY2hlLgogCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzg5ODY6IG1hdGguZXJmYyB3YXMgaW5jb3JyZWN0bHkgcmFpc2luZyBPdmVyZmxvd0Vycm9yIGZvcgorICB2YWx1ZXMgYmV0d2VlbiAtMjcuMyBhbmQgLTMwLjAgb24gc29tZSBwbGF0Zm9ybXMuCiAKLS0gSXNzdWUgIzc4NDk6IE5vdyB0aGUgdXRpbGl0eSBgYGNoZWNrX3dhcm5pbmdzYGAgdmVyaWZpZXMgaWYgdGhlIHdhcm5pbmdzIGFyZQotICBlZmZlY3RpdmVseSByYWlzZWQuICBBIG5ldyBwcml2YXRlIHV0aWxpdHkgYGBfY2hlY2tfcHkza193YXJuaW5nc2BgIGhhcyBiZWVuCi0gIGJhY2twb3J0ZWQgdG8gaGVscCBzaWxlbmNpbmcgcHkzayB3YXJuaW5ncy4KKy0gSXNzdWUgIzg5MjQ6IGxvZ2dpbmc6IEltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGZvciBVbmljb2RlIGluIGV4Y2VwdGlvbiB0ZXh0LgogCi0tIElzc3VlICM4NjcyOiBBZGQgYSB6bGliIHRlc3QgZW5zdXJpbmcgdGhhdCBhbiBpbmNvbXBsZXRlIHN0cmVhbSBjYW4gYmUKLSAgaGFuZGxlZCBieSBhIGRlY29tcHJlc3NvciBvYmplY3Qgd2l0aG91dCBlcnJvcnMgKGl0IHJldHVybnMgaW5jb21wbGV0ZQotICB1bmNvbXByZXNzZWQgZGF0YSkuCi0KLS0gSXNzdWUgIzg2Mjk6IERpc2FibGUgc29tZSB0ZXN0X3NzbCB0ZXN0cywgc2luY2UgdGhleSBnaXZlIGRpZmZlcmVudAotICByZXN1bHRzIHdpdGggT3BlblNTTCAxLjAuMCBhbmQgaGlnaGVyLgotCi0tIElzc3VlICM4NTc2OiBSZW1vdmUgdXNlIG9mIGZpbmRfdW51c2VkX3BvcnQoKSBpbiB0ZXN0X3NtdHBsaWIgYW5kCi0gIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAgUGF0Y2ggYnkgUGF1bCBNb29yZS4KLQotLSBJc3N1ZSAjNzAyNzogcmVncnRlc3QucHkga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGVuY29kaW5ncy5hc2NpaSBtb2R1bGUgYXMgYQotICB3b3JrYXJvdW5kIHRvICM3MTQwIGJ1ZwotCi0tIElzc3VlICMzODY0OiBTa2lwIHRocmVlIHRlc3Rfc2lnbmFsIHRlc3RzIG9uIGZyZWVic2Q2IGJlY2F1c2UgdGhleSBmYWlsCi0gIGlmIGFueSB0aHJlYWQgd2FzIHByZXZpb3VzbHkgc3RhcnRlZCwgbW9zdCBsaWtlbHkgZHVlIHRvIGEgcGxhdGZvcm0gYnVnLgotCi0tIElzc3VlICM4MTkzOiBGaXggdGVzdF96bGliIGZhaWx1cmUgd2l0aCB6bGliIDEuMi40LgorLSBJc3N1ZSAjODk0ODogY2xlYW51cCBmdW5jdGlvbnMgYW5kIGNsYXNzIC8gbW9kdWxlIHNldHVwcyBhbmQgdGVhcmRvd25zIGFyZQorICBub3cgaG9ub3JlZCBpbiB1bml0dGVzdCBkZWJ1ZyBtZXRob2RzLgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzkyNTU6IERvY3VtZW50IHRoYXQgdGhlICd0ZXN0JyBwYWNrYWdlIGlzIGZvciBpbnRlcm5hbCBQeXRob24gdXNlCi0gIG9ubHkuCi0KLS0gSXNzdWUgIzg5MDk6IEFkZGVkIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgdXNlZCBpbiB0aGUgaW5zdGFsbGVyIGNyZWF0ZWQgYnkKKy0gSXNzdWVzICM4OTA5OiBBZGRlZCB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwIHVzZWQgaW4gdGhlIGluc3RhbGxlciBjcmVhdGVkIGJ5CiAgIGRpc3R1dGlscycgYmRpc3Rfd2luaW5zdC4gUGF0Y2ggYnkgQW5hdG9seSBUZWNodG9uaWsuCiAKK01pc2MKKy0tLS0KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjU/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjAxMC0wMy0xOCoKKy0gSXNzdWUgIzgzNjI6IEFkZCBtYWludGFpbmVycy5yc3Q6IGxpc3Qgb2YgbW9kdWxlIG1haW50YWluZXJzCiAKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjUgcmMgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTAzLTA5KgorKlJlbGVhc2UgZGF0ZTogMjAxMC0wNi0wNSoKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzgwODk6IGEgT1MgWCBmcmFtZXdvcmsgYnVpbGQgd2l0aCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPTMtd2F5fGludGVsCi0gIGhhZCBubyB3YXkgdG8gc2VsZWN0IGEgMzItYml0IGV4ZWN1dGFibGUuCistIElzc3VlICM4MjcxOiBkdXJpbmcgdGhlIGRlY29kaW5nIG9mIGFuIGludmFsaWQgVVRGLTggYnl0ZSBzZXF1ZW5jZSwgb25seSB0aGUKKyAgc3RhcnQgYnl0ZSBhbmQgdGhlIGNvbnRpbnVhdGlvbiBieXRlKHMpIGFyZSBub3cgY29uc2lkZXJlZCBpbnZhbGlkLCBpbnN0ZWFkCisgIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGJ5IHRoZSBzdGFydCBieXRlLgorICBFLmcuOiAnXHhmMVx4ODBBQicuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykgbm93IHJldHVybnMgdSdcdWZmZmRBQicgYW5kCisgIHJlcGxhY2VzIHdpdGggVStGRkZEIG9ubHkgdGhlIHN0YXJ0IGJ5dGUgKCdceGYxJykgYW5kIHRoZSBjb250aW51YXRpb24gYnl0ZQorICAoJ1x4ODAnKSBldmVuIGlmICdceGYxJyBpcyB0aGUgc3RhcnQgYnl0ZSBvZiBhIDQtYnl0ZXMgc2VxdWVuY2UuCisgIFByZXZpb3VzIHZlcnNpb25zIHJldHVybmVkIGEgc2luZ2xlIHUnXHVmZmZkJy4KIAotLSBJc3N1ZSAjODA4NDogZml4ZXMgYnVpbGQgaXNzdWVzIG9uIE9TWCAxMC42IHdoZW4gdGFyZ2V0dGluZyBPU1ggMTAuNC4KKy0gSXNzdWUgIzg2Mjc6IFJlbW92ZSBib2d1cyAiT3ZlcnJpZGluZyBfX2NtcF9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZgorICBfX2hhc2hfXyBpbiAzLngiIHdhcm5pbmcuICBBbHNvIGZpeCAiWFhYIHVuZGV0ZWN0ZWQgZXJyb3IiIHRoYXQKKyAgYXJpc2VzIGZyb20gdGhlICJPdmVycmlkaW5nIF9fZXFfXyBibG9ja3MgaW5oZXJpdGFuY2UgLi4uIiB3YXJuaW5nCisgIHdoZW4gdHVybmVkIGludG8gYW4gZXhjZXB0aW9uOiBpbiB0aGlzIGNhc2UgdGhlIGV4Y2VwdGlvbiBzaW1wbHkKKyAgZ2V0cyBpZ25vcmVkLgorCistIElzc3VlICM4NzQ4OiBGaXggdHdvIGlzc3VlcyB3aXRoIGNvbXBhcmlzb25zIGJldHdlZW4gY29tcGxleCBhbmQgaW50ZWdlcgorICBvYmplY3RzLiAgKDEpIFRoZSBjb21wYXJpc29uIGNvdWxkIGluY29ycmVjdGx5IHJldHVybiBUcnVlIGluIHNvbWUgY2FzZXMKKyAgKDIqKjUzKzEgPT0gY29tcGxleCgyKio1MykgPT0gMioqNTMpLCBicmVha2luZyB0cmFuc2l2aXR5IG9mIGVxdWFsaXR5LgorICAoMikgVGhlIGNvbXBhcmlzb24gcmFpc2VkIGFuIE92ZXJmbG93RXJyb3IgZm9yIGxhcmdlIGludGVnZXJzLCBsZWFkaW5nCisgIHRvIHVucHJlZGljdGFibGUgZXhjZXB0aW9ucyB3aGVuIGNvbWJpbmluZyBpbnRlZ2VycyBhbmQgY29tcGxleCBvYmplY3RzCisgIGluIHNldHMgb3IgZGljdHMuCisKKy0gSXNzdWUgIzUyMTE6IEltcGxpY2l0IGNvZXJjaW9uIGZvciB0aGUgY29tcGxleCB0eXBlIGlzIG5vdyBjb21wbGV0ZWx5CisgIHJlbW92ZWQuICAoQ29lcmNpb24gZm9yIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB3YXMgYWxyZWFkeSByZW1vdmVkIGluIDIuNworICBhbHBoYSA0LCBidXQgY29lcmNpb24gZm9yIHJpY2ggY29tcGFyaXNvbnMgd2FzIGFjY2lkZW50YWxseSBsZWZ0IGluLikKKworLSBJc3N1ZSAjMzc5ODogV3JpdGUgc3lzLmV4aXQoKSBtZXNzYWdlIHRvIHN5cy5zdGRlcnIgdG8gdXNlIHN0ZGVyciBlbmNvZGluZworICBhbmQgZXJyb3IgaGFuZGxlciwgaW5zdGVhZCBvZiB3cml0aW5nIHRvIHRoZSBDIHN0ZGVyciBmaWxlIGluIHV0Zi04CisKKy0gSXNzdWUgIzc5MDI6IFdoZW4gdXNpbmcgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0IHN5bnRheCwgZG9uJ3QgdHJ5IGltcGxpY2l0CisgIHJlbGF0aXZlIGltcG9ydCBzZW1hbnRpY3MuCisKKy0gSXNzdWUgIzcwNzk6IEZpeCBhIHBvc3NpYmxlIGNyYXNoIHdoZW4gY2xvc2luZyBhIGZpbGUgb2JqZWN0IHdoaWxlIHVzaW5nIGl0CisgIGZyb20gYW5vdGhlciB0aHJlYWQuICBQYXRjaCBieSBEYW5pZWwgU3R1dHpiYWNoLgorCistIElzc3VlICM4ODY4OiBGaXggdGhhdCBlbnN1cmVzIHRoYXQgcHl0aG9uIHNjcmlwdHMgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgIFdpbmRvdyBTZXJ2ZXIgYWdhaW4gaW4gYSBmcmFtZXdvcmsgYnVpbGQgb24gTWFjT1NYIDEwLjUgb3IgZWFybGllci4KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzU3NTM6IEEgbmV3IEMgQVBJIGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5U3lzX1NldEFyZ3ZFeGAsIGFsbG93cyBlbWJlZGRlcnMKKyAgb2YgdGhlIGludGVycHJldGVyIHRvIHNldCBzeXMuYXJndiB3aXRob3V0IGFsc28gbW9kaWZ5aW5nIHN5cy5wYXRoLiAgVGhpcworICBoZWxwcyBmaXggYENWRS0yMDA4LTU5ODMKKyAgPGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAwOC01OTgzPmBfLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gUmV2ZXJ0aW5nIHRoZSBjaGFuZ2VzIG1hZGUgaW4gcjc4NDMyLiBEaXNjdXNzZWQgaW4gdGhlIHRyYWNrZXIgaXNzdWUgIzc1NDAuCistIElzc3VlICM4MzAyOiBTa2lwVGVzdCBpbiB1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzIG9yIHNldFVwTW9kdWxlIGlzIG5vdworICByZXBvcnRlZCBhcyBhIHNraXAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuCiAKLS0gSXNzdWUgIzgxMDc6IEZpeGVkIHRlc3RfZGlzdHV0aWxzIHNvIGl0IGRvZXNuJ3QgY3Jhc2ggd2hlbiB0aGUgc291cmNlCi0gIGRpcmVjdG9yeSBjYW5ub3QgYmUgZm91bmQuCistIElzc3VlICM4MzUxOiBFeGNlc3NpdmVseSBsYXJnZSBkaWZmcyBkdWUgdG8KKyAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2VxdWVuY2VFcXVhbCBhcmUgbm8gbG9uZ2VyIGluY2x1ZGVkIGluIGZhaWx1cmUKKyAgcmVwb3J0cy4KKworLSBJc3N1ZSAjODg5OTogdGltZS5zdHJ1Y3RfdGltZSBub3cgaGFzIGNsYXNzIGFuZCBhdHJpYnV0ZSBkb2NzdHJpbmdzLgorCistIElzc3VlICM0NDg3OiBlbWFpbCBub3cgYWNjZXB0cyBhcyBjaGFyc2V0IGFsaWFzZXMgYWxsIGNvZGVjIGFsaWFzZXMKKyAgYWNjZXB0ZWQgYnkgdGhlIGNvZGVjcyBtb2R1bGUuCisKKy0gSXNzdWUgIzY0NzA6IERyb3AgVU5DIHByZWZpeCBpbiBGaXhUay4KKworLSBJc3N1ZSAjNTYxMDogZmVlZHBhcnNlciBubyBsb25nZXIgZWF0cyBleHRyYSBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YKKyAgYSBib2R5IHBhcnQgaWYgdGhlIGJvZHkgcGFydCBlbmRzIHdpdGggYSBcclxuLgorCistIElzc3VlICM4ODMzOiB0YXJmaWxlIGNyZWF0ZWQgaGFyZCBsaW5rIGVudHJpZXMgd2l0aCBhIHNpemUgZmllbGQgIT0gMCBieQorICBtaXN0YWtlLgorCistIElzc3VlICMxMzY4MjQ3OiBzZXRfY2hhcnNldCAoYW5kIHRoZXJlZm9yZSBNSU1FVGV4dCkgbm93IGF1dG9tYXRpY2FsbHkKKyAgZW5jb2RlcyBhIHVuaWNvZGUgX3BheWxvYWQgdG8gdGhlIG91dHB1dF9jaGFyc2V0LgorCistIElzc3VlICM3MTUwOiBSYWlzZSBPdmVyZmxvd0Vycm9yIGlmIHRoZSByZXN1bHQgb2YgYWRkaW5nIG9yIHN1YnRyYWN0aW5nCisgIHRpbWVkZWx0YSBmcm9tIGRhdGUgb3IgZGF0ZXRpbWUgZmFsbHMgb3V0c2lkZSBvZiB0aGUgTUlOWUVBUjpNQVhZRUFSIHJhbmdlLgorCistIElzc3VlICM2NjYyOiBGaXggcGFyc2luZyBvZiBtYWxmb3JtYXR0ZWQgY2hhcnJlZiAoJiNiYWQ7KSwgcGF0Y2ggd3JpdHRlbiBieQorICBGcmVkcmlrIEjDpcOlcmQKKworLSBJc3N1ZSAjODAxNjogQWRkIHRoZSBDUDg1OCBjb2RlYy4KKworLSBJc3N1ZSAjMzkyNDogSWdub3JlIGNvb2tpZXMgd2l0aCBpbnZhbGlkICJ2ZXJzaW9uIiBmaWVsZCBpbiBjb29raWVsaWIuCisKKy0gSXNzdWUgIzYyNjg6IEZpeCBzZWVrKCkgbWV0aG9kIG9mIGNvZGVjcy5vcGVuKCksIGRvbid0IHJlYWQgb3Igd3JpdGUgdGhlIEJPTQorICB0d2ljZSBhZnRlciBzZWVrKDApLiBGaXggYWxzbyByZXNldCgpIG1ldGhvZCBvZiBjb2RlY3MsIFVURi0xNiwgVVRGLTMyIGFuZAorICBTdHJlYW1Xcml0ZXIgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNTY0MDogRml4IFNoaWZ0LUpJUyBpbmNyZW1lbnRhbCBlbmNvZGVyIGZvciBlcnJvciBoYW5kbGVycyBkaWZmZXJlbnQKKyAgdGhhbiAnc3RyaWN0Jy4KKworLSBJc3N1ZSAjODc4MjogQWRkIGEgdHJhaWxpbmcgbmV3bGluZSBpbiBsaW5lY2FjaGUudXBkYXRlY2FjaGUgdG8gdGhlIGxhc3QgbGluZQorICBvZiBmaWxlcyB3aXRob3V0IG9uZS4KKworLSBJc3N1ZSAjODcyOTogUmV0dXJuIE5vdEltcGxlbWVudGVkIGZyb20gYGBjb2xsZWN0aW9ucy5NYXBwaW5nLl9fZXFfXygpYGAgd2hlbgorICBjb21wYXJpbmcgdG8gYSBub24tbWFwcGluZy4KKworLSBJc3N1ZSAjODc1OTogRml4IHVzZXIgcGF0aHMgaW4gc3lzY29uZmlnIGZvciBwb3NpeCBhbmQgb3MyIHNjaGVtZXMuCisKKy0gSXNzdWUgIzEyODUwODY6IFNwZWVkIHVwIGBgdXJsbGliLnF1b3RlKClgYCBhbmQgdXJsbGliLnVucXVvdGUgZm9yIHNpbXBsZQorICBjYXNlcy4KKworLSBJc3N1ZSAjODY4ODogRGlzdHV0aWxzIG5vdyByZWNhbGN1bGF0ZXMgTUFOSUZFU1QgZXZlcnl0aW1lLgorCistIElzc3VlICM1MDk5OiBUaGUgYGBfX2RlbF9fKClgYCBtZXRob2Qgb2YgYGBzdWJwcm9jZXNzLlBvcGVuYGAgKGFuZCB0aGUgbWV0aG9kcworICBpdCBjYWxscykgcmVmZXJlbmNlZCBnbG9iYWwgb2JqZWN0cywgY2F1c2luZyBlcnJvcnMgdG8gcG9wIHVwIGR1cmluZworICBpbnRlcnByZXRlciBzaHV0ZG93bi4KIAogRXh0ZW5zaW9uIE1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzc2NzA6IHNxbGl0ZTM6IEZpeGVkIGNyYXNoZXMgd2hlbiBvcGVyYXRpbmcgb24gY2xvc2VkIGNvbm5lY3Rpb25zLgorLSBJc3N1ZSAjNzM4NDogSWYgdGhlIHN5c3RlbSByZWFkbGluZSBsaWJyYXJ5IGlzIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMsCisgIHRoZSBjdXJzZXMgbW9kdWxlIG11c3QgYmUgbGlua2VkIGFnYWluc3QgbmN1cnNlcyBhcyB3ZWxsLiBPdGhlcndpc2UgaXQKKyAgaXMgbm90IHNhZmUgdG8gbG9hZCBib3RoIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMgaW4gYW4gYXBwbGljYXRpb24uCiAKLS0gSXNzdWUgIzgwNTM6IGxvZ2ljIHdhcyBpbnZlcnRlZCBvbiB3aGljaCBwbGF0Zm9ybXMgdG8gcnVuIGEgdGVzdCBvbi4KLSAgY2F1c2VkIHRlc3RfdGhyZWFkIHRvIGZhaWwgb24gV2luZG93cy4KKy0gSXNzdWUgIzI4MTA6IEZpeCBjYXNlcyB3aGVyZSB0aGUgV2luZG93cyByZWdpc3RyeSBBUEkgcmV0dXJucworICBFUlJPUl9NT1JFX0RBVEEsIHJlcXVpcmluZyBhIHJlLXRyeSBpbiBvcmRlciB0byBnZXQgdGhlIGNvbXBsZXRlIHJlc3VsdC4KKworLSBJc3N1ZSAjODY3NDogRml4ZWQgYSBudW1iZXIgb2YgaW5jb3JyZWN0IG9yIHVuZGVmaW5lZC1iZWhhdmlvdXItaW5kdWNpbmcKKyAgb3ZlcmZsb3cgY2hlY2tzIGluIHRoZSBgYGF1ZGlvb3BgYCBtb2R1bGUuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM4ODg5OiB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0IHJld3JpdHRlbiBzbyB0aGF0IHRoZSBuZXcKKyAgY2hlY2tzIGFsc28gd29yayBvbiBGcmVlQlNELCB3aGljaCBsYWNrcyBFQUlfTk9EQVRBLgorCistIElzc3VlICM4ODM1OiB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCkgY2F0Y2hlcyBnYWllcnJvcihFQUlfTk9OQU1FKQorICBhbmQgZ2FpZXJyb3IoRUFJX05PREFUQSkKKworLSBJc3N1ZSAjNzQ0OTogU2tpcCB0ZXN0X3NvY2tldHNlcnZlciBpZiB0aHJlYWRpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZAorCistIE9uIGRhcndpbiwgYGB0ZXN0X3NpdGVgYCBhc3N1bWVkIHRoYXQgYSBmcmFtZXdvcmsgYnVpbGQgd2FzIGJlaW5nIHVzZWQsCisgIGxlYWRpbmcgdG8gYSBmYWlsdXJlIHdoZXJlIGZvdXIgZGlyZWN0b3JpZXMgd2VyZSBleHBlY3RlZCBmb3Igc2l0ZS1wYWNrYWdlcworICBpbnN0ZWFkIG9mIHR3byBpbiBhIG5vbi1mcmFtZXdvcmsgYnVpbGQuCisKK0J1aWxkCistLS0tLQorCistIERpc3BsYXkgaW5zdGFsbGVyIHdhcm5pbmcgdGhhdCBXaW5kb3dzIDIwMDAgd29uJ3QgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZQorICByZWxlYXNlcy4KKworLSBJc3N1ZXMgIzE3NTkxNjksICM4ODY0OiBEcm9wIF9YT1BFTl9TT1VSQ0Ugb24gU29sYXJpcywgZGVmaW5lIGl0IGZvcgorICBtdWx0aXByb2Nlc3Npbmcgb25seS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzU0NjQ6IEltcGxlbWVudCBwbHVyYWwgZm9ybXMgaW4gbXNnZm10LnB5LgogCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi41IHJjIDE/CitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgYmV0YSAyPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotKlJlbGVhc2UgZGF0ZTogMjAxMC0wMy0wMSoKKypSZWxlYXNlIGRhdGU6IDIwMTAtMDUtMDgqCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICM3MzA5OiBGaXggdW5jaGVja2VkIGF0dHJpYnV0ZSBhY2Nlc3Mgd2hlbiBjb252ZXJ0aW5nCi0gIFVuaWNvZGVFbmNvZGVFcnJvciwgVW5pY29kZURlY29kZUVycm9yLCBhbmQgVW5pY29kZVRyYW5zbGF0ZUVycm9yIHRvCi0gIHN0cmluZ3MuCistIFJ1biBDbGFuZyAyLjcncyBzdGF0aWMgYW5hbHl6ZXIgZm9yIGBgT2JqZWN0cy9gYCBhbmQgYGBQeXRob24vYGAuCiAKLS0gSXNzdWUgIzc2NDk6ICJ1JyVjJyAlIGNoYXIiIG5vdyBiZWhhdmVzIGxpa2UgInUnJXMnICUgY2hhciIgYW5kIHJhaXNlcyBhCi0gIFVuaWNvZGVEZWNvZGVFcnJvciBpZiAnY2hhcicgaXMgYSBieXRlIHN0cmluZyB0aGF0IGNhbid0IGJlIGRlY29kZWQgdXNpbmcKLSAgdGhlIGRlZmF1bHQgZW5jb2RpbmcuCistIElzc3VlICMxNTMzOiBGaXggaW5jb25zaXN0ZW5jeSBpbiByYW5nZSBmdW5jdGlvbiBhcmd1bWVudCBwcm9jZXNzaW5nOiBhbnkKKyAgbm9uLWZsb2F0IG5vbi1pbnRlZ2VyIGFyZ3VtZW50IGlzIG5vdyBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciAoaWYgcG9zc2libGUpCisgIHVzaW5nIGl0cyBfX2ludF9fIG1ldGhvZC4gIFByZXZpb3VzbHksIG9ubHkgc21hbGwgYXJndW1lbnRzIHdlcmUgdHJlYXRlZCB0aGlzCisgIHdheTsgbGFyZ2VyIGFyZ3VtZW50cyAodGhvc2Ugd2hvc2UgX19pbnRfXyB3YXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgYSBDIGxvbmcpCisgIHdvdWxkIHByb2R1Y2UgYSBUeXBlRXJyb3IuCiAKLS0gSXNzdWUgIzU2Nzc6IEV4cGxpY2l0bHkgZm9yYmlkIHdyaXRlIG9wZXJhdGlvbnMgb24gcmVhZC1vbmx5IGZpbGUgb2JqZWN0cywKLSAgYW5kIHJlYWQgb3BlcmF0aW9ucyBvbiB3cml0ZS1vbmx5IGZpbGUgb2JqZWN0cy4gIE9uIFdpbmRvd3MsIHRoZSBzeXN0ZW0gQwotICBsaWJyYXJ5IHdvdWxkIHJldHVybiBhIGJvZ3VzIHJlc3VsdDsgb24gU29sYXJpcywgaXQgd2FzIHBvc3NpYmxlIHRvIGNyYXNoCi0gIHRoZSBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IFN0ZWZhbiBLcmFoLgorLSBJc3N1ZSAjODIwMjogYGBzeXMuYXJndlswXWBgIGlzIG5vdyBzZXQgdG8gJy1tJyBpbnN0ZWFkIG9mICctYycgd2hlbiBzZWFyY2hpbmcKKyAgZm9yIHRoZSBtb2R1bGUgZmlsZSB0byBiZSBleGVjdXRlZCB3aXRoIHRoZSAtbSBjb21tYW5kIGxpbmUgb3B0aW9uLgogCi0tIElzc3VlICM0OTc4OiBQYXNzaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIHVuaWNvZGUgc3RyaW5ncyBpcyBub3cgYWxsb3dlZC4KKy0gSXNzdWUgIzczMTk6IFdoZW4gLVEgaXMgdXNlZCwgZG8gbm90IHNpbGVuY2UgRGVwcmVjYXRpb25XYXJuaW5nLgogCi0tIElzc3VlICM3ODE5OiBDaGVjayBzeXMuY2FsbF90cmFjaW5nKCkgYXJndW1lbnRzIHR5cGVzLgorLSBJc3N1ZSAjNzMzMjogUmVtb3ZlIHRoZSAxNktCIHN0YWNrLWJhc2VkIGJ1ZmZlciBpbgorICBgYFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlYGAsIHdoaWNoIGRvZXNuJ3QgYnJpbmcgYW55IG5vdGljZWFibGUKKyAgYmVuZWZpdCBjb21wYXJlZCB0byB0aGUgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBmYWxsYmFjay4gIFBhdGNoIGJ5CisgIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KIAotLSBJc3N1ZSAjNzc4ODogRml4IGFuIGludGVycHJldGVyIGNyYXNoIHByb2R1Y2VkIGJ5IGRlbGV0aW5nIGEgbGlzdAotICBzbGljZSB3aXRoIHZlcnkgbGFyZ2Ugc3RlcCB2YWx1ZS4KKy0gSXNzdWUgIzg0MTc6IFJhaXNlIGFuIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIHN5cy5tYXhzaXplIGlzCisgIHBhc3NlZCB0byBieXRlYXJyYXkuCiAKLS0gSXNzdWUgIzc1NjE6IE9wZXJhdGlvbnMgb24gZW1wdHkgYnl0ZWFycmF5cyAoc3VjaCBhcyBgaW50KGJ5dGVhcnJheSgpKWApCi0gIGNvdWxkIGNyYXNoIGluIG1hbnkgcGxhY2VzIGJlY2F1c2Ugb2YgdGhlIFB5Qnl0ZUFycmF5X0FTX1NUUklORygpIG1hY3JvCi0gIHJldHVybmluZyBOVUxMLiAgVGhlIG1hY3JvIG5vdyByZXR1cm5zIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgZW1wdHkKLSAgc3RyaW5nIGluc3RlYWQuCistIElzc3VlICM3MDcyOiBgYGlzc3BhY2UoMHhhMClgYCBpcyB0cnVlIG9uIE1hYyBPUyBYLgogCi0tIElzc3VlICM3NjA0OiBEZWxldGluZyBhbiB1bnNldCBzbG90dGVkIGF0dHJpYnV0ZSBkaWQgbm90IHJhaXNlIGFuCi0gIEF0dHJpYnV0ZUVycm9yLgorLSBJc3N1ZSAjODQwNDogRml4IHNldCBvcGVyYXRpb25zIG9uIGRpY3Rpb25hcnkgdmlld3MuCiAKLS0gSXNzdWUgIzc0MTM6IFBhc3NpbmcgJ1wwJyBhcyB0aGUgc2VwYXJhdG9yIHRvIGRhdGV0aW1lLmRhdGV0aW1lLmlzb2Zvcm1hdCgpCi0gIHVzZWQgdG8gZHJvcCB0aGUgdGltZSBwYXJ0IG9mIHRoZSByZXN1bHQuCi0KLS0gSXNzdWUgIzYxMDg6IHVuaWNvZGUoZXhjZXB0aW9uKSBhbmQgc3RyKGV4Y2VwdGlvbikgc2hvdWxkIHJldHVybiB0aGUgc2FtZQotICBtZXNzYWdlIHdoZW4gb25seSBfX3N0cl9fIChhbmQgbm90IF9fdW5pY29kZV9fKSBpcyBvdmVycmlkZGVuIGluIHRoZQotICBzdWJjbGFzcy4KLQotLSBJc3N1ZSAjNzQ5MTogTWV0YWNsYXNzJ3MgX19jbXBfXyBtZXRob2Qgd2FzIGlnbm9yZWQuCi0KLS0gQWRkIFB5M2sgd2FybmluZ3MgZm9yIHBhcmFtZXRlciBuYW1lcyBpbiBwYXJlbnRoZXNpcy4KLQotLSBJc3N1ZSAjNzM2MjogR2l2ZSBhIHByb3BlciBlcnJvciBtZXNzYWdlIGZvciBkZWYgZigoeCk9Myk6IHBhc3MuCi0KLS0gSXNzdWUgIzcwODU6IEZpeCBjcmFzaCB3aGVuIGltcG9ydGluZyBzb21lIGV4dGVuc2lvbnMgaW4gYSB0aHJlYWQKLSAgb24gTWFjT1NYIDEwLjYuCi0KLS0gSXNzdWUgIzcwNzA6IEZpeCByb3VuZCBidWcgZm9yIGxhcmdlIG9kZCBpbnRlZ2VyIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNzA3ODogU2V0IHN0cnVjdC5fX2RvY19fIGZyb20gX3N0cnVjdC5fX2RvY19fLgotCi0tIElzc3VlICMxNzIyMzQ0OiB0aHJlYWRpbmcuX3NodXRkb3duKCkgaXMgbm93IGNhbGxlZCBpbiBQeV9GaW5hbGl6ZSgpLCB3aGljaAotICBmaXhlcyB0aGUgcHJvYmxlbSBvZiBzb21lIGV4Y2VwdGlvbnMgYmVpbmcgdGhyb3duIGF0IHNodXRkb3duIHdoZW4gdGhlCi0gIGludGVycHJldGVyIGlzIGtpbGxlZC4gUGF0Y2ggYnkgQWRhbSBPbHNlbi4KLQotLSBJc3N1ZSAjNzA4NDogRml4IGEgKHZlcnkgdW5saWtlbHkpIGNyYXNoIHdoZW4gcHJpbnRpbmcgYSBsaXN0IGZyb20gb25lCi0gIHRocmVhZCwgYW5kIG11dGF0aW5nIGl0IGZyb20gYW5vdGhlciBvbmUuICBQYXRjaCBieSBTY290dCBEaWFsLgotCi0tIElzc3VlICMxNzQ3ODU4OiBGaXggbGNob3duICYgZmNob3duIHRvIHdvcmsgd2l0aCBsYXJnZSB1aWQncyBhbmQgZ2lkJ3Mgb24KLSAgNjQtYml0IHBsYXRmb3Jtcy4KLQorLSBJc3N1ZSAjODA4NDogUEVQIDM3MCBub3cgY29uZm9ybXMgdG8gc3lzdGVtIGNvbnZlbnRpb25zIGZvciBmcmFtZXdvcmsgYnVpbGRzCisgIG9uIE1hY09TIFguIFRoYXQgaXMsIGBgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwgLS11c2VyYGAgd2lsbCBpbnN0YWxsIGludG8KKyAgYGB+L0xpYnJhcnkvUHl0aG9uLzIuN2BgIGluc3RlYWQgb2YgYGB+Ly5sb2NhbGBgLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzg2ODE6IE1ha2UgdGhlIHpsaWIgbW9kdWxlJ3MgZXJyb3IgbWVzc2FnZXMgbW9yZSBpbmZvcm1hdGl2ZSB3aGVuIHRoZQorICB6bGliIGl0c2VsZiBkb2Vzbid0IGdpdmUgYW55IGRldGFpbGVkIGV4cGxhbmF0aW9uLgorCistIElzc3VlICM4NTcxOiBGaXggYW4gaW50ZXJuYWwgZXJyb3Igd2hlbiBjb21wcmVzc2luZyBvciBkZWNvbXByZXNzaW5nIGEgY2h1bmsKKyAgbGFyZ2VyIHRoYW4gMUdCIHdpdGggdGhlIHpsaWIgbW9kdWxlJ3MgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG9iamVjdHMuCisKKy0gSXNzdWUgIzg1NzM6IGFzeW5jb3JlIGBgX3N0cmVycm9yKClgYCBmdW5jdGlvbiBtaWdodCB0aHJvdyBWYWx1ZUVycm9yLgorCistIElzc3VlICM4NDgzOiBhc3luY29yZS5kaXNwYXRjaGVyJ3MgX19nZXRhdHRyX18gbWV0aG9kIHByb2R1Y2VkIGNvbmZ1c2luZyBlcnJvcgorICBtZXNzYWdlcyB3aGVuIGFjY2Vzc2luZyB1bmRlZmluZWQgY2xhc3MgYXR0cmlidXRlcyBiZWNhdXNlIG9mIHRoZSBjaGVhcAorICBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuICBUaGUgY2hlYXAgaW5oZXJpdGFuY2UgaGFzIGJlZW4KKyAgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjNDI2NTogYGBzaHV0aWwuY29weWZpbGUoKWBgIHdhcyBsZWFraW5nIGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBkaXNrCisgIGZpbGxzLiAgUGF0Y2ggYnkgVHJlcyBTZWF2ZXIuCisKKy0gSXNzdWUgIzc3NTU6IFVzZSBhbiB1bmVuY3VtYmVyZWQgYXVkaW8gZmlsZSBmb3IgdGVzdHMuCisKKy0gSXNzdWUgIzg2MjE6IGBgdXVpZC51dWlkNCgpYGAgcmV0dXJuZWQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzIGluIHRoZQorICBwYXJlbnQgYW5kIGFueSBjaGlsZHJlbiBjcmVhdGVkIHVzaW5nIGBgb3MuZm9ya2BgIG9uIE1hYyBPUyBYIDEwLjYuCisKKy0gSXNzdWUgIzgzMTM6IGBgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSgpYGAgZW5jb2RlcyB1bmljb2RlIG1lc3NhZ2UgdG8KKyAgQVNDSUkgd2l0aCBiYWNrc2xhc2hyZXBsYWNlIGVycm9yIGhhbmRsZXIgaWYgYGBzdHIodmFsdWUpYGAgZmFpbGVkLgorCistIElzc3VlICM4NTY3OiBGaXggcHJlY2VkZW5jZSBvZiBzaWduYWxzIGluIERlY2ltYWwgbW9kdWxlOiB3aGVuIGEgRGVjaW1hbAorICBvcGVyYXRpb24gcmFpc2VzIG11bHRpcGxlIHNpZ25hbHMgYW5kIG1vcmUgdGhhbiBvbmUgb2YgdGhvc2Ugc2lnbmFscyBpcworICB0cmFwcGVkLCB0aGUgc3BlY2lmaWNhdGlvbiBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgc2lnbmFscyBzaG91bGQgYmUKKyAgaGFuZGxlZC4gIEluIG1hbnkgY2FzZXMgdGhpcyBvcmRlciB3YXNuJ3QgYmVpbmcgZm9sbG93ZWQsIGxlYWRpbmcgdG8gdGhlIHdyb25nCisgIFB5dGhvbiBleGNlcHRpb24gYmVpbmcgcmFpc2VkLgorCistIElzc3VlICM3ODY1OiBUaGUgY2xvc2UoKSBtZXRob2Qgb2YgOm1vZDpgaW9gIG9iamVjdHMgc2hvdWxkIG5vdCBzd2FsbG93CisgIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBpbXBsaWNpdCBmbHVzaCgpLiAgQWxzbyBlbnN1cmUgdGhhdCBjYWxsaW5nIGNsb3NlKCkKKyAgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuICBQYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KKworLSBJc3N1ZSAjODU3NjogbG9nZ2luZyB1cGRhdGVkIHRvIHJlbW92ZSB1c2FnZSBvZiBmaW5kX3VudXNlZF9wb3J0KCkuCisKKy0gSXNzdWUgIzQ2ODc6IEZpeCBhY2N1cmFjeSBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gcnVudGltZXMgZGlzcGxheWVkIHdpdGgKKyAgZ2MuREVCVUdfU1RBVFMuCisKKy0gSXNzdWUgIzgzNTQ6IFRoZSBzaWdpbnRlcnJ1cHQgc2V0dGluZyBpcyBub3cgcHJlc2VydmVkIGZvciBhbGwgc2lnbmFscywgbm90CisgIGp1c3QgU0lHQ0hMRC4KKworLSBJc3N1ZSAjNzE5MjogYGB3ZWJicm93c2VyLmdldCgiZmlyZWZveCIpYGAgbm93IHdvcmtzIG9uIE1hYyBPUyBYLCBhcyBkb2VzCisgIGBgd2ViYnJvd3Nlci5nZXQoInNhZmFyaSIpYGAuCisKKy0gSXNzdWUgIzg1Nzc6IGBgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpYGAgbm93IG1ha2VzIGEgZGlmZmVyZW5jZQorICBiZXR3ZWVuIHRoZSBidWlsZCBkaXIgYW5kIHRoZSBzb3VyY2UgZGlyIHdoZW4gbG9va2luZyBmb3IgInB5dGhvbi5oIiBvcgorICAiSW5jbHVkZSIuCisKKy0gSXNzdWUgIzg0NjQ6IHRhcmZpbGUgbm8gbG9uZ2VyIGNyZWF0ZXMgZmlsZXMgd2l0aCBleGVjdXRlIHBlcm1pc3Npb25zIHNldCB3aGVuCisgIG1vZGU9Ind8IiBpcyB1c2VkLgorCistIElzc3VlICM3ODM0OiBGaXggY29ubmVjdCgpIG9mIEJsdWV0b290aCBMMkNBUCBzb2NrZXRzIHdpdGggcmVjZW50IHZlcnNpb25zIG9mCisgIHRoZSBMaW51eCBrZXJuZWwuICBQYXRjaCBieSBZYW5pdiBBa25pbi4KKworLSBJc3N1ZSAjNjMxMjogRml4IGh0dHAgSEVBRCByZXF1ZXN0IHdoZW4gdGhlIHRyYW5zZmVyIGVuY29kaW5nIGlzIGNodW5rZWQuICBJdAorICBzaG91bGQgY29ycmVjdGx5IHJldHVybiBhbiBlbXB0eSByZXNwb25zZSBub3cuCisKKy0gSXNzdWUgIzc0OTA6IFRvIGZhY2lsaXRhdGUgc2hhcmluZyBvZiBkb2N0ZXN0cyBiZXR3ZWVuIDIueCBhbmQgMy54IHRlc3QKKyAgc3VpdGVzLCB0aGUgYGBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTGBgIGRpcmVjdGl2ZSBub3cgYWxzbyBpZ25vcmVzIHRoZSBtb2R1bGUKKyAgbG9jYXRpb24gb2YgdGhlIHJhaXNlZCBleGNlcHRpb24uICBCYXNlZCBvbiBpbml0aWFsIHBhdGNoIGJ5IExlbm5hcnQgUmVnZWJyby4KKworLSBJc3N1ZSAjODA4NjogSW4gOmZ1bmM6YHNzbC5ERVJfY2VydF90b19QRU1fY2VydCgpYCwgZml4IG1pc3NpbmcgbmV3bGluZSBiZWZvcmUKKyAgdGhlIGNlcnRpZmljYXRlIGZvb3Rlci4gIFBhdGNoIGJ5IEt5bGUgVmFuZGVyQmVlay4KKworLSBJc3N1ZSAjODU0NjogUmVqZWN0IE5vbmUgZ2l2ZW4gYXMgdGhlIGJ1ZmZlcmluZyBhcmd1bWVudCB0byBgYF9weWlvLm9wZW4oKWBgLgorCistIElzc3VlICM4NTQ5OiBGaXggY29tcGlsaW5nIHRoZSBfc3NsIGV4dGVuc2lvbiB1bmRlciBBSVguICBQYXRjaCBieSBTcmlkaGFyCisgIFJhdG5ha3VtYXIuCisKKy0gSXNzdWUgIzY2NTY6IEZpeCBsb2NhbGUuZm9ybWF0X3N0cmluZyB0byBoYW5kbGUgZXNjYXBlZCBwZXJjZW50cyBhbmQgbWFwcGluZ3MuCisKKy0gSXNzdWUgIzIzMDI6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNodXRkb3duLCB3aGVyZQorICB0aGUgbWV0aG9kIGNvdWxkIGJsb2NrIGluZGVmaW5pdGVseSBpZiBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGV2ZW50IGxvb3AKKyAgc3RhcnRlZCBydW5uaW5nLiAgVGhpcyBhbHNvIGZpeGVzIHRoZSBvY2Nhc2lvbmFsIGZyZWV6ZXMgd2l0bmVzc2VkIGluCisgIHRlc3RfaHR0cHNlcnZlcnMuCisKKy0gSXNzdWUgIzUxMDM6IFNTTCBoYW5kc2hha2Ugd291bGQgaWdub3JlIHRoZSBzb2NrZXQgdGltZW91dCBhbmQgYmxvY2sKKyAgaW5kZWZpbml0ZWx5IGlmIHRoZSBvdGhlciBlbmQgZGlkbid0IHJlc3BvbmQuCisKKy0gVGhlIGRvX2hhbmRzaGFrZSgpIG1ldGhvZCBvZiBTU0wgb2JqZWN0cyBub3cgYWRqdXN0cyB0aGUgYmxvY2tpbmcgbW9kZSBvZiB0aGUKKyAgU1NMIHN0cnVjdHVyZSBpZiBuZWNlc3NhcnkgKGFzIG90aGVyIG1ldGhvZHMgYWxyZWFkeSBkbykuCisKKy0gSXNzdWUgIzc1MDc6IFF1b3RlICIhIiBpbiBwaXBlcy5xdW90ZSgpOyBpdCBpcyBzcGVjaWFsIHRvIHNvbWUgc2hlbGxzLgorCistIElzc3VlICM1MjM4OiBDYWxsaW5nIG1ha2VmaWxlKCkgb24gYW4gU1NMIG9iamVjdCB3b3VsZCBwcmV2ZW50IHRoZSB1bmRlcmx5aW5nCisgIHNvY2tldCBmcm9tIGJlaW5nIGNsb3NlZCB1bnRpbCBhbGwgb2JqZWN0cyBnZXQgdHJ1ZWx5IGRlc3Ryb3llZC4KKworLSBJc3N1ZSAjNzk0MzogRml4IGNpcmN1bGFyIHJlZmVyZW5jZSBjcmVhdGVkIHdoZW4gaW5zdGFudGlhdGluZyBhbiBTU0wgc29ja2V0LgorICBJbml0aWFsIHBhdGNoIGJ5IFDDqXRlciBTemFiw7MuCisKKy0gSXNzdWUgIzg0NTE6IFN5c2xvZyBtb2R1bGUgbm93IHVzZXMgYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIGluc3RlYWQgb2YgdGhlCisgIHN0cmluZyAicHl0aG9uIiBhcyB0aGUgKmlkZW50Ki4gIG9wZW5sb2coKSBhcmd1bWVudHMgYXJlIGFsbCBvcHRpb25hbCBhbmQKKyAga2V5d29yZHMuCisKKy0gSXNzdWUgIzgxMDg6IEZpeCB0aGUgdW53cmFwKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIHdoZW4gdGhlIHNvY2tldCBoYXMgYQorICBub24taW5maW5pdGUgdGltZW91dC4gIEFsc28gbWFrZSB0aGF0IG1ldGhvZCBmcmllbmRsaWVyIHdpdGggYXBwbGljYXRpb25zCisgIHdhbnRpbmcgdG8gY29udGludWUgdXNpbmcgdGhlIHNvY2tldCBpbiBjbGVhci10ZXh0IG1vZGUsIGJ5IGRpc2FibGluZworICBPcGVuU1NMJ3MgaW50ZXJuYWwgcmVhZGFoZWFkLiAgVGhhbmtzIHRvIERhcnJ5bCBNaWxlcyBmb3IgZ3VpZGFuY2UuCisKKy0gSXNzdWUgIzg0ODQ6IExvYWQgYWxsIGNpcGhlcnMgYW5kIGRpZ2VzdCBhbGdvcml0aG1zIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBfc3NsCisgIGV4dGVuc2lvbiwgc3VjaCB0aGF0IHZlcmlmaWNhdGlvbiBvZiBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMgZG9lc24ndCBmYWlsCisgIGJlY2F1c2Ugb2YgYW4gInVua25vd24gYWxnb3JpdGhtIi4KKworLSBJc3N1ZSAjODQzNzogRml4IHRlc3RfZ2RiIGZhaWx1cmVzLCBwYXRjaCB3cml0dGVuIGJ5IERhdmUgTWFsY29sbQorCistIElzc3VlICM0ODE0OiBUaGUgdGltZW91dCBwYXJhbWV0ZXIgaXMgbm93IGFwcGxpZWQgYWxzbyBmb3IgY29ubmVjdGlvbnMKKyAgcmVzdWx0aW5nIGZyb20gUE9SVC9FUFJUIGNvbW1hbmRzLgorCistIElzc3VlICM4NDYzOiBBZGQgbWlzc2luZyByZWZlcmVuY2UgdG8gYnp0YXIgaW4gc2h1dGlsJ3MgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjODQzODogUmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgbWlzc2luZyAic3Vycm9nYXRlZXNjYXBlIiBlbmNvZGluZyBlcnJvcgorICBoYW5kbGVyIGZyb20gdGhlIG5ldyBJTyBsaWJyYXJ5LgorCistIElzc3VlICMzODE3OiBmdHBsaWIuRlRQLmFib3J0KCkgbWV0aG9kIG5vdyBjb25zaWRlcnMgMjI1IGEgdmFsaWQgcmVzcG9uc2UgY29kZQorICBhcyBzdGF0ZWQgaW4gUkZDLTk1OSBhdCBjaGFwdGVyIDUuNC4KKworLSBJc3N1ZSAjODI3OTogRml4IHRlc3RfZ2RiIGZhaWx1cmVzLgorCistIElzc3VlICM4MzIyOiBBZGQgYSAqY2lwaGVycyogYXJndW1lbnQgdG8gU1NMIHNvY2tldHMsIHNvIGFzIHRvIGNoYW5nZSB0aGUKKyAgYXZhaWxhYmxlIGNpcGhlciBsaXN0LiAgSGVscHMgZml4IHRlc3Rfc3NsIHdpdGggT3BlblNTTCAxLjAuMC4KKworLSBJc3N1ZSAjMjk4NzogUkZDIDI3MzIgc3VwcG9ydCBmb3IgdXJscGFyc2UgKElQdjYgYWRkcmVzc2VzKS4gIFBhdGNoIGJ5IFRvbnkKKyAgTG9ja2UgYW5kIEhhbnMgVWxyaWNoIE5pZWRlcm1hbm4uCisKKy0gSXNzdWUgIzc1ODU6IGRpZmZsaWIgY29udGV4dCBhbmQgdW5pZmllZCBkaWZmcyBub3cgcGxhY2UgYSB0YWIgYmV0d2VlbgorICBmaWxlbmFtZSBhbmQgZGF0ZSwgY29uZm9ybWluZyB0byB0aGUgJ3N0YW5kYXJkcycgdGhleSB3ZXJlIG9yaWdpbmFsbHkgZGVzaWduZWQKKyAgdG8gZm9sbG93LiAgVGhpcyBpbXByb3ZlcyBjb21wYXRpYmlsaXR5IHdpdGggcGF0Y2ggdG9vbHMuCisKKy0gSXNzdWUgIzc0NzI6IEZpeGVkIHR5cG8gaW4gZW1haWwuZW5jb2RlcnMgbW9kdWxlOyBtZXNzYWdlcyB1c2luZyBJU08tMjAyMgorICBjaGFyYWN0ZXIgc2V0cyB3aWxsIG5vdyBjb25zaXN0ZW50bHkgdXNlIGEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBvZiA3Yml0CisgIHJhdGhlciB0aGFuIHNvbWV0aW1lcyBiZWluZyBtYXJrZWQgYXMgOGJpdC4KKworLSBJc3N1ZSAjODMzMDogRml4IGV4cGVjdGVkIG91dHB1dCBpbiB0ZXN0X2dkYi4KKworLSBJc3N1ZSAjODM3NDogVXBkYXRlIHRoZSBpbnRlcm5hbCBhbGlhcyB0YWJsZSBpbiB0aGUgOm1vZDpgbG9jYWxlYCBtb2R1bGUgdG8KKyAgY292ZXIgcmVjZW50IGxvY2FsZSBjaGFuZ2VzIGFuZCBhZGRpdGlvbnMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM4NjQ0OiBJbXByb3ZlZCBhY2N1cmFjeSBvZiBgYHRpbWVkZWx0YS50b3RhbF9zZWNvbmRzKClgYC4KKworLSBVc2UgQ2xhbmcgMi43J3Mgc3RhdGljIGFuYWx5emVyIHRvIGZpbmQgcGxhY2VzIHRvIGNsZWFuIHVwIHNvbWUgY29kZS4KKworLSBCdWlsZCB0aGUgb3NzYXVkaW8gZXh0ZW5zaW9uIG9uIEdOVS9rRnJlZUJTRC4KKworLSBPbiBXaW5kb3dzLCBjdHlwZXMgZG9lcyBubyBsb25nZXIgY2hlY2sgdGhlIHN0YWNrIGJlZm9yZSBhbmQgYWZ0ZXIgY2FsbGluZyBhCisgIGZvcmVpZ24gZnVuY3Rpb24uICBUaGlzIGFsbG93cyB0byB1c2UgdGhlIHVubW9kaWZpZWQgbGliZmZpIGxpYnJhcnkuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM4NjcyOiBBZGQgYSB6bGliIHRlc3QgZW5zdXJpbmcgdGhhdCBhbiBpbmNvbXBsZXRlIHN0cmVhbSBjYW4gYmUgaGFuZGxlZAorICBieSBhIGRlY29tcHJlc3NvciBvYmplY3Qgd2l0aG91dCBlcnJvcnMgKGl0IHJldHVybnMgaW5jb21wbGV0ZSB1bmNvbXByZXNzZWQKKyAgZGF0YSkuCisKKy0gSXNzdWUgIzg0OTA6IGFzeW5jb3JlIG5vdyBoYXMgYSBtb3JlIHNvbGlkIHRlc3Qgc3VpdGUgd2hpY2ggYWN0dWFsbHkgdGVzdHMgaXRzCisgIEFQSS4KKworLSBJc3N1ZSAjODU3NjogUmVtb3ZlIHVzZSBvZiBmaW5kX3VudXNlZF9wb3J0KCkgaW4gdGVzdF9zbXRwbGliIGFuZAorICB0ZXN0X211bHRpcHJvY2Vzc2luZy4gIFBhdGNoIGJ5IFBhdWwgTW9vcmUuCisKKy0gSXNzdWUgIzc0NDk6IEZpeCBtYW55IHRlc3RzIHRvIHN1cHBvcnQgUHl0aG9uIGNvbXBpbGVkIHdpdGhvdXQgdGhyZWFkIHN1cHBvcnQuCisgIFBhdGNoZXMgd3JpdHRlbiBieSBKZXJyeSBTZXV0dGVyLgorCistIElzc3VlICM4MTA4OiB0ZXN0X2Z0cGxpYidzIG5vbi1ibG9ja2luZyBTU0wgc2VydmVyIG5vdyBoYXMgcHJvcGVyIGhhbmRsaW5nIG9mCisgIFNTTCBzaHV0ZG93bnMuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICM4NjI1OiBUdXJuIG9mZiBvcHRpbWl6YXRpb24gaW4gYGAtLXdpdGgtcHlkZWJ1Z2BgIGJ1aWxkcyB3aXRoIGdjYy4KKyAgKE9wdGltaXphdGlvbiB3YXMgdW5pbnRlbnRpb25hbGx5IHR1cm5lZCBvbiBpbiBnY2MgLS13aXRoLXB5ZGVidWcgYnVpbGRzIGluCisgIDIuNyBiZXRhMSBhcyBhIHJlc3VsdCBvZiB0aGUgaXNzdWUgIzE2Mjg0ODQgZml4LCBjb21iaW5lZCB3aXRoIGF1dG9jb25mJ3MKKyAgc3RyYW5nZSBjaG9pY2Ugb2YgZGVmYXVsdCBDRkxBR1MgcHJvZHVjZWQgYnkgQUNfUFJPR19DQyBmb3IgZ2NjLikKKworLSBJc3N1ZSAjODUwOTogRml4IHF1b3RpbmcgaW4gaGVscCBzdHJpbmdzIGFuZCBjb2RlIHNuaXBwZXRzIGluIGNvbmZpZ3VyZS5pbi4KKworLSBJc3N1ZSAjMzY0NjogSXQgaXMgbm93IGVhc2lseSBwb3NzaWJsZSB0byBpbnN0YWxsIGEgUHl0aG9uIGZyYW1ld29yayBpbnRvIHlvdXIKKyAgaG9tZSBkaXJlY3Rvcnkgb24gTWFjIE9TIFgsIHNlZSBNYWMvUkVBRE1FIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICM4NTEwOiBVcGRhdGUgdG8gYXV0b2NvbmYgMi42NS4KKworTWlzYworLS0tLQorCistIFVwZGF0ZSB0aGUgVmltIHN5bnRheCBoaWdobGlnaHQgZmlsZS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgYmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjAxMC0wNC0xMCoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzczMDE6IEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAkUFlUSE9OV0FSTklOR1MuCisKKy0gSXNzdWUgIzgzMjk6IERvbid0IHJldHVybiB0aGUgc2FtZSBsaXN0cyBmcm9tIHNlbGVjdC5zZWxlY3Qgd2hlbiBubyBmZHMgYXJlCisgIGNoYW5nZWQuCisKKy0gSXNzdWUgIzgyNTk6IGBgMUwgPDwgKDIqKjMxKWBgIG5vIGxvbmdlciBwcm9kdWNlcyBhbiAnb3V0cmFnZW91cyBzaGlmdCBlcnJvcicKKyAgb24gNjQtYml0IG1hY2hpbmVzLiAgVGhlIHNoaWZ0IGNvdW50IGZvciBlaXRoZXIgbGVmdCBvciByaWdodCBzaGlmdCBpcworICBwZXJtaXR0ZWQgdG8gYmUgdXAgdG8gc3lzLm1heHNpemUuCisKKy0gRW5zdXJlIHRoYXQgdG9rZW5pemF0aW9uIG9mIGlkZW50aWZpZXJzIGlzIG5vdCBhZmZlY3RlZCBieSBsb2NhbGUuCisKKy0gSXNzdWUgIzEyMjI1ODU6IEFkZGVkIExEQ1hYU0hBUkVEIGZvciBDKysgc3VwcG9ydC4gIFBhdGNoIGJ5IEFyZnJldmVyLgorCistIFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBhIFRfU1RSSU5HX0lOUExBQ0Ugc3RydWN0IG1lbWJlci4KKworLSBJc3N1ZSAjNzk5NDogSXNzdWUgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGlmIG9iamVjdC5fX2Zvcm1hdF9fIGlzIGNhbGxlZAorICB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcuIFRoaXMgaXMgYW4gZWZmb3J0IHRvIGZ1dHVyZS1wcm9vZiB1c2VyCisgIGNvZGUuIElmIGEgZGVyaXZlZCBjbGFzcyBkb2VzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50IF9fZm9ybWF0X18gYnV0IGxhdGVyCisgIGFkZHMgaXRzIG93biBfX2Zvcm1hdF9fLCBpdCB3b3VsZCBtb3N0IGxpa2VseSBicmVhayB1c2VyIGNvZGUgdGhhdCBoYWQKKyAgc3VwcGxpZWQgYSBmb3JtYXQgc3RyaW5nLiBUaGlzIHdpbGwgYmUgY2hhbmdlZCB0byBhIERlcHJlY2F0aW9uV2FybmluZyBpbgorICBQeXRob24gMy4zIGFuZCBpdCB3aWxsIGJlIGFuIGVycm9yIGluIFB5dGhvbiAzLjQuCisKKy0gSXNzdWUgIzgyNjg6IE9sZC1zdHlsZSBjbGFzc2VzIChub3QganVzdCBpbnN0YW5jZXMpIG5vdyBzdXBwb3J0IHdlYWsKKyAgcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjODIxMTogU2F2ZS9yZXN0b3JlIENGTEFHUyBhcm91bmQgQUNfUFJPR19DQyBpbiBjb25maWd1cmUuaW4sIGluIGNhc2UgaXQKKyAgaXMgc2V0LgorCistIElzc3VlICMxNTgzODYzOiBBbiB1bmljb2RlIHN1YmNsYXNzIGNhbiBub3cgb3ZlcnJpZGUgdGhlIF9fdW5pY29kZV9fIG1ldGhvZAorCistIElzc3VlICM2NDc0OiBNYWtlIGVycm9yIG1lc3NhZ2UgZnJvbSBwYXNzaW5nIGFuIGluYWRlcXVhdGUgbnVtYmVyIG9mIGtleXdvcmQKKyAgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gY29ycmVjdC4KKworLSBJc3N1ZSAjODE2NDogRG9uJ3QgYWxsb3cgbGFtYmRhIGZ1bmN0aW9ucyB0byBoYXZlIGEgZG9jc3RyaW5nLgorCistIElzc3VlICMzMTM3OiBEb24ndCBpZ25vcmUgZXJyb3JzIGF0IHN0YXJ0dXAsIGVzcGVjaWFsbHkgYSBrZXlib2FyZCBpbnRlcnJ1cHQKKyAgKFNJR0lOVCkuICBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgaW1wb3J0aW5nIHRoZSBzaXRlIG1vZHVsZSwgdGhlIGVycm9yIGlzCisgIHByaW50ZWQgYW5kIFB5dGhvbiBleGl0cy4gIEluaXRpYWxpemUgdGhlIEdJTCBiZWZvcmUgaW1wb3J0aW5nIHRoZSBzaXRlCisgIG1vZHVsZS4KKworLSBDb2RlIG9iamVjdHMgbm93IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzUyNzc6IEZpeCBxdW90ZSBjb3VudGluZyB3aGVuIHBhcnNpbmcgUkZDIDIyMzEgZW5jb2RlZCBwYXJhbWV0ZXJzLgorCistIElzc3VlICM4MzIxOiBHaXZlIGFjY2VzcyB0byBPcGVuU1NMIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZSBgc3NsYCBtb2R1bGUsCisgIHVzaW5nIHRoZSBuZXcgYXR0cmlidXRlcyBgc3NsLk9QRU5TU0xfVkVSU0lPTmAsIGBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk9gIGFuZAorICBgc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVJgLgorCistIElzc3VlICM4MzEwOiBBbGxvdyBkaXMgdG8gZXhhbWluZSBuZXcgc3R5bGUgY2xhc3Nlcy4KKworLSBJc3N1ZSAjODI1NzogVGhlIERlY2ltYWwgY29uc3RydWN0IG5vdyBhY2NlcHRzIGEgZmxvYXQgaW5zdGFuY2UgZGlyZWN0bHksCisgIGNvbnZlcnRpbmcgdGhhdCBmbG9hdCB0byBhIERlY2ltYWwgb2YgZXF1YWwgdmFsdWU6CisKKyAgICAgPj4+IERlY2ltYWwoMS4xKQorICAgICBEZWNpbWFsKCcxLjEwMDAwMDAwMDAwMDAwMDA4ODgxNzg0MTk3MDAxMjUyMzIzMzg5MDUzMzQ0NzI2NTYyNScpCisKKy0gY29sbGVjdGlvbnMuQ291bnRlcigpIG5vdyBzdXBwb3J0cyBhIHN1YnRyYWN0KCkgbWV0aG9kLgorCistIFRoZSBmdW5jdG9vbHMgbW9kdWxlIG5vdyBoYXMgYSB0b3RhbF9vcmRlcmluZygpIGNsYXNzIGRlY29yYXRvciB0byBzaW1wbGlmeQorICB0aGUgc3BlY2lmaWNhdGlvbiBvZiByaWNoIGNvbXBhcmlzb25zLgorCistIFRoZSBmdW5jdG9vbHMgbW9kdWxlIGFsc28gYWRkcyBjbXBfdG9fa2V5KCkgYXMgYSB0b29sIHRvIHRyYW5zaXRpb24gb2xkLXN0eWxlCisgIGNvbXBhcmlzb24gZnVuY3Rpb25zIHRvIG5ldy1zdHlsZSBrZXktZnVuY3Rpb25zLgorCistIElzc3VlICM4Mjk0OiBUaGUgRnJhY3Rpb24gY29uc3RydWN0b3Igbm93IGFjY2VwdHMgRGVjaW1hbCBhbmQgZmxvYXQgaW5zdGFuY2VzCisgIGRpcmVjdGx5LgorCistIElzc3VlICM3Mjc5OiBDb21wYXJpc29ucyBpbnZvbHZpbmcgYSBEZWNpbWFsIHNpZ25hbGluZyBOYU4gbm93IHNpZ25hbAorICBJbnZhbGlkT3BlcmF0aW9uIGluc3RlYWQgb2YgcmV0dXJuaW5nIEZhbHNlLiAgKENvbXBhcmlzb25zIGludm9sdmluZyBhIHF1aWV0CisgIE5hTiBhcmUgdW5jaGFuZ2VkLikgIEFsc28sIERlY2ltYWwgcXVpZXQgTmFOcyBhcmUgbm93IGhhc2hhYmxlOyBEZWNpbWFsCisgIHNpZ25hbGluZyBOYU5zIHJlbWFpbiB1bmhhc2hhYmxlLgorCistIElzc3VlICMyNTMxOiBDb21wYXJpc29uIG9wZXJhdGlvbnMgYmV0d2VlbiBmbG9hdHMgYW5kIERlY2ltYWwgaW5zdGFuY2VzIG5vdworICByZXR1cm4gYSByZXN1bHQgYmFzZWQgb24gdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZSBvcGVyYW5kczsgcHJldmlvdXNseSB0aGV5CisgIHJldHVybmVkIGFuIGFyYml0cmFyeSByZXN1bHQgYmFzZWQgb24gdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGlkKGZsb2F0KSBhbmQKKyAgaWQoRGVjaW1hbCkuCisKKy0gSXNzdWUgIzgyMzM6IFdoZW4gcnVuIGFzIGEgc2NyaXB0LCBweV9jb21waWxlLnB5IG9wdGlvbmFsbHkgdGFrZXMgYSBzaW5nbGUKKyAgYXJndW1lbnQgYC1gIHdoaWNoIHRlbGxzIGl0IHRvIHJlYWQgZmlsZXMgdG8gY29tcGlsZSBmcm9tIHN0ZGluLiAgRWFjaCBsaW5lIGlzCisgIHJlYWQgb24gZGVtYW5kIGFuZCB0aGUgbmFtZWQgZmlsZSBpcyBjb21waWxlZCBpbW1lZGlhdGVseS4gIChPcmlnaW5hbCBwYXRjaCBieQorICBQaW90ciBPxbxhcm93c2tpKS4KKworLSBJc3N1ZSAjMzEzNTogQWRkIGBgaW5zcGVjdC5nZXRjYWxsYXJncygpYGAsIHdoaWNoIGJpbmRzIGFyZ3VtZW50cyB0byBhCisgIGZ1bmN0aW9uIGxpa2UgYSBub3JtYWwgY2FsbC4KKworLSBCYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZTogVW5pY29kZSBjb2RlcG9pbnRzIGxpbmUgdGFidWxhdGlvbiAoMHgwQikgYW5kCisgIGZvcm0gZmVlZCAoMHgwQykgYXJlIG5vdyBjb25zaWRlcmVkIGxpbmVicmVha3MsIGFzIHNwZWNpZmllZCBpbiBVbmljb2RlCisgIFN0YW5kYXJkIEFubmV4ICMxNC4gIFNlZSBpc3N1ZSAjNzY0My4gIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjE0LworCistIENvbXBhcmlzb25zIHVzaW5nIG9uZSBvZiA8LCA8PSwgPiwgPj0gYmV0d2VlbiBhIGNvbXBsZXggaW5zdGFuY2UgYW5kIGEKKyAgRnJhY3Rpb25zIGluc3RhbmNlIG5vdyByYWlzZSBUeXBlRXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgVHJ1ZS9GYWxzZS4gIFRoaXMKKyAgbWFrZXMgRnJhY3Rpb24gPD0+IGNvbXBsZXggY29tcGFyaXNvbnMgY29uc2lzdGVudCB3aXRoIGludCA8PT4gY29tcGxleCwgZmxvYXQKKyAgPD0+IGNvbXBsZXgsIGFuZCBjb21wbGV4IDw9PiBjb21wbGV4IGNvbXBhcmlzb25zLgorCistIEFkZGl0aW9uIG9mIGBgV2Vha1NldGBgIHRvIHRoZSBgYHdlYWtyZWZgYCBtb2R1bGUuCisKKy0gbG9nZ2luZzogQWRkZWQgTE9HX0ZUUCB0byBTeXNMb2dIYW5kbGVyIGFuZCB1cGRhdGVkIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzgyMDU6IFJlbW92ZSB0aGUgIk1vZHVsZXMiIGRpcmVjdG9yeSBmcm9tIHN5cy5wYXRoIHdoZW4gUHl0aG9uIGlzCisgIHJ1bm5pbmcgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5IChQT1NJWCBvbmx5KS4KKworLSBJc3N1ZSAjNzY2NzogRml4IGRvY3Rlc3QgZmFpbHVyZXMgd2l0aCBub24tQVNDSUkgcGF0aHMuCisKKy0gSXNzdWUgIzc1MTI6IHNodXRpbC5jb3B5c3RhdCgpIGNvdWxkIHJhaXNlIGFuIE9TRXJyb3Igd2hlbiB0aGUgZmlsZXN5c3RlbQorICBkaWRuJ3Qgc3VwcG9ydCBjaGZsYWdzKCkgKGZvciBleGFtcGxlIFpGUyB1bmRlciBGcmVlQlNEKS4gIFRoZSBlcnJvciBpcyBub3cKKyAgc2lsZW5jZWQuCisKKy0gSXNzdWUgIzc3MDM6IGN0eXBlcyBzdXBwb3J0cyBib3RoIGJ1ZmZlcigpIGFuZCBtZW1vcnl2aWV3KCkuICBUaGUgZm9ybWVyIGlzCisgIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzc4NjA6IHBsYXRmb3JtLnVuYW1lIG5vdyByZXBvcnRzIHRoZSBjb3JyZWN0ICdtYWNoaW5lJyB0eXBlIHdoZW4gUHl0aG9uCisgIGlzIHJ1bm5pbmcgaW4gV09XNjQgbW9kZSBvbiA2NCBiaXQgV2luZG93cy4KKworLSBsb2dnaW5nOiBBZGRlZCBnZXRDaGlsZCB1dGlsaXR5IG1ldGhvZCB0byBMb2dnZXIgYW5kIGFkZGVkIGlzRW5hYmxlZEZvciBtZXRob2QKKyAgdG8gTG9nZ2VyQWRhcHRlci4KKworLSBJc3N1ZSAjODIwMTogbG9nZ2luZzogSGFuZGxlIHNpdHVhdGlvbiBvZiBub24tQVNDSUkgYW5kIFVuaWNvZGUgbG9nZ2VyIG5hbWVzCisgIGV4aXN0aW5nIGF0IHRoZSBzYW1lIHRpbWUsIGNhdXNpbmcgYSBVbmljb2RlIGVycm9yIHdoZW4gY29uZmlndXJhdGlvbiBjb2RlCisgIGF0dGVtcHRlZCB0byBzb3J0IHRoZSBleGlzdGluZyBsb2dnZXJzLgorCistIElzc3VlICM4MjAwOiBsb2dnaW5nOiBIYW5kbGUgZXJyb3JzIHdoZW4gbXVsdGlwcm9jZXNzaW5nIGlzIG5vdCBmdWxseSBsb2FkZWQKKyAgd2hlbiBsb2dnaW5nIG9jY3Vycy4KKworLSBJc3N1ZSAjMzg5MCwgIzgyMjI6IEZpeCByZWN2KCkgYW5kIHJlY3ZfaW50bygpIG9uIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cy4KKyAgQWxzbywgZW5hYmxlIHRoZSBTU0xfTU9ERV9BVVRPX1JFVFJZIGZsYWcgb24gU1NMIHNvY2tldHMsIHNvIHRoYXQgYmxvY2tpbmcKKyAgcmVhZHMgYW5kIHdyaXRlcyBhcmUgYWx3YXlzIHJldHJpZWQgYnkgT3BlblNTTCBpdHNlbGYuCisKKy0gSXNzdWUgIzgxNzk6IEZpeCBtYWNwYXRoLnJlYWxwYXRoKCkgb24gYSBub24tZXhpc3RpbmcgcGF0aC4KKworLSBJc3N1ZSAjODAyNDogVXBkYXRlIHRoZSBVbmljb2RlIGRhdGFiYXNlIHRvIDUuMi4KKworLSBJc3N1ZSAjODEwNDogc29ja2V0LnJlY3ZfaW50bygpIGFuZCBzb2NrZXQucmVjdmZyb21faW50bygpIG5vdyBzdXBwb3J0IHdyaXRpbmcKKyAgaW50byBvYmplY3RzIHN1cHBvcnRpbmcgdGhlIG5ldyBidWZmZXIgQVBJLCBmb3IgZXhhbXBsZSBieXRlYXJyYXlzIG9yCisgIG1lbW9yeXZpZXdzLgorCistIElzc3VlICM0OTYxOiBJbmNvbnNpc3RlbnQvd3JvbmcgcmVzdWx0IG9mIGFza3llc25vIGZ1bmN0aW9uIGluIHRrTWVzc2FnZUJveAorICB3aXRoIFRjbC9Uay04LjUuCisKKy0gSXNzdWUgIzgxNDA6IEV4dGVuZCBjb21waWxlYWxsIHRvIGNvbXBpbGUgc2luZ2xlIGZpbGVzLiAgQWRkIC1pIG9wdGlvbi4KKworLSBJc3N1ZSAjNzM1NjogY3R5cGVzLnV0aWw6IE1ha2UgcGFyc2luZyBvZiBsZGNvbmZpZyBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlCisgIGxvY2FsZS4KKworLSBJc3N1ZSAjNzc3NDogU2V0IHN5cy5leGVjdXRhYmxlIHRvIGFuIGVtcHR5IHN0cmluZyBpZiBgYGFyZ3ZbMF1gYCBoYXMgYmVlbiBzZXQKKyAgdG8gYW4gbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbAorICBwcm9ncmFtIG5hbWUuCisKKy0gSXNzdWUgIzgxMTc6IGxvZ2dpbmc6IEltcHJvdmVkIGFsZ29yaXRobSBmb3IgY29tcHV0aW5nIGluaXRpYWwgcm9sbG92ZXIgdGltZQorICBmb3IgYGBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJgYCBieSB1c2luZyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYW4gZXhpc3RpbmcKKyAgbG9nIGZpbGUgdG8gY29tcHV0ZSB0aGUgbmV4dCByb2xsb3ZlciB0aW1lLiAgSWYgdGhlIGxvZyBmaWxlIGRvZXMgbm90IGV4aXN0LAorICB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY29tcHV0YXRpb24uCisKKy0gSXNzdWUgIzY0NzI6IFRoZSBgYHhtbC5ldHJlZWBgIHBhY2thZ2UgaXMgdXBkYXRlZCB0byBFbGVtZW50VHJlZSAxLjMuICBUaGUKKyAgY0VsZW1lbnRUcmVlIG1vZHVsZSBpcyB1cGRhdGVkIHRvby4KKworLSBJc3N1ZSAjNzg4MDogRml4IHN5c2NvbmZpZyB3aGVuIHRoZSBweXRob24gZXhlY3V0YWJsZSBpcyBhIHN5bWJvbGljIGxpbmsuCisKKy0gSXNzdWUgIzc2MjQ6IEZpeCBgYGlzaW5zdGFuY2UoZm9vKCksIGNvbGxlY3Rpb25zLkNhbGxhYmxlKWBgIGZvciBvbGQtc3R5bGUKKyAgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNzE0MzogZW1haWw6IGBgZ2V0X3BheWxvYWQoKWBgIHVzZWQgdG8gc3RyaXAgYW55IHRyYWlsaW5nIG5ld2xpbmUgZnJvbQorICBhIGJhc2U2NCB0cmFuc2Zlci1lbmNvZGVkIHBheWxvYWQgKmFmdGVyKiBkZWNvZGluZyBpdDsgaXQgbm8gbG9uZ2VyIGRvZXMuCisgIFRoaXMgaXMgYSBiZWhhdmlvciBjaGFuZ2UsIHNvIGVtYWlsJ3MgbWlub3IgdmVyc2lvbiBudW1iZXIgaXMgbm93IGJ1bXBlZCwgdG8KKyAgdmVyc2lvbiA0LjAuMiwgZm9yIHRoZSAyLjcgcmVsZWFzZS4KKworLSBJc3N1ZSAjODIzNTogX3NvY2tldDogQWRkIHRoZSBjb25zdGFudCBgYFNPX1NFVEZJQmBgLiAgU09fU0VURklCIGlzCisgIGEgc29ja2V0IG9wdGlvbiBhdmFpbGFibGUgb24gRnJlZUJTRCA3LjEgYW5kIG5ld2VyLgorCistIElzc3VlICM4MDM4OiB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleHBNYXRjaGVzCisKKy0gQWRkaXRpb24gb2YgLWIgY29tbWFuZCBsaW5lIG9wdGlvbiB0byB1bml0dGVzdCBmb3IgYnVmZmVyaW5nIHN0ZG91dCAvIHN0ZGVycgorICBkdXJpbmcgdGVzdCBydW5zLgorCistIElzc3VlICMxMjIwMjEyOiBBZGRlZCBvcy5raWxsIHN1cHBvcnQgZm9yIFdpbmRvd3MsIGluY2x1ZGluZyBzdXBwb3J0IGZvcgorICBzZW5kaW5nIENUUkwrQyBhbmQgQ1RSTCtCUkVBSyBldmVudHMgdG8gY29uc29sZSBzdWJwcm9jZXNzZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM4MzE0OiBGaXggdW5zaWduZWQgbG9uZyBsb25nIGJ1ZyBpbiBsaWJmZmkgb24gU3BhcmMgdjguCisKKy0gSXNzdWUgIzEwMzksICM4MTU0OiBGaXggb3MuZXhlY2xwKCkgY3Jhc2ggd2l0aCBtaXNzaW5nIDJuZCBhcmd1bWVudC4KKworLSBJc3N1ZSAjODE1NjogYnNkZGIgbW9kdWxlIHVwZGF0ZWQgdG8gdmVyc2lvbiA0LjguNC4KKyAgaHR0cDovL3d3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bSNic2RkYjMtNC44LjQuICBUaGlzIHVwZGF0ZSBkcm9wcworICBzdXBwb3J0IGZvciBCZXJrZWxleSBEQiA0LjAsIGFuZCBhZGRzIHN1cHBvcnQgZm9yIDQuOC4KKworLSBJc3N1ZSAjMzkyODogb3MubWtub2QoKSBub3cgYXZhaWxhYmxlIGluIFNvbGFyaXMsIGFsc28uCisKKy0gSXNzdWUgIzgxNDI6IFVwZGF0ZSBsaWJmZmkgdG8gdGhlIDMuMC45IHJlbGVhc2UuCisKKy0gSXNzdWUgIzgzMDA6IFdoZW4gcGFzc2luZyBhIG5vbi1pbnRlZ2VyIGFyZ3VtZW50IHRvIHN0cnVjdC5wYWNrIHdpdGggYW55CisgIGludGVnZXIgZm9ybWF0IGNvZGUsIHN0cnVjdC5wYWNrIGZpcnN0IGF0dGVtcHRzIHRvIGNvbnZlcnQgdGhlIG5vbi1pbnRlZ2VyCisgIHVzaW5nIGl0cyBfX2luZGV4X18gbWV0aG9kLiAgSWYgdGhhdCBtZXRob2QgaXMgbm9uLWV4aXN0ZW50IG9yIHJhaXNlcworICBUeXBlRXJyb3IgaXQgZ29lcyBvbiB0byB0cnkgdGhlIF9faW50X18gbWV0aG9kLCBhcyBkZXNjcmliZWQgYmVsb3cuCisKKy0gSXNzdWUgIzE1MzA1NTk6IFdoZW4gcGFzc2luZyBhIG5vbi1pbnRlZ2VyIGFyZ3VtZW50IHRvIHN0cnVjdC5wYWNrIHdpdGggKmFueSoKKyAgaW50ZWdlciBmb3JtYXQgY29kZSAob25lIG9mICdiQmhIaUlsTHFRJyksIHN0cnVjdC5wYWNrIGF0dGVtcHRzIHRvIHVzZSB0aGUKKyAgYXJndW1lbnQncyBfX2ludF9fIG1ldGhvZCB0byBjb252ZXJ0IHRvIGFuIGludGVnZXIgYmVmb3JlIHBhY2tpbmcuICBJdCBhbHNvCisgIHByb2R1Y2VzIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIHRoaXMgY2FzZS4gIChJbiBQeXRob24gMi42LCB0aGUgYmVoYXZpb3VyIHdhcworICBpbmNvbnNpc3RlbnQ6IF9faW50X18gd2FzIHVzZWQgZm9yIHNvbWUgaW50ZWdlciBjb2RlcyBidXQgbm90IGZvciBvdGhlcnMsIGFuZAorICB0aGUgc2V0IG9mIGludGVnZXIgY29kZXMgZm9yIHdoaWNoIGl0IHdhcyB1c2VkIGRpZmZlcmVkIGJldHdlZW4gbmF0aXZlIHBhY2tpbmcKKyAgYW5kIHN0YW5kYXJkIHBhY2tpbmcuKQorCistIElzc3VlICM3MzQ3OiBfd2lucmVnOiBBZGQgQ3JlYXRlS2V5RXggYW5kIERlbGV0ZUtleUV4LCBhcyB3ZWxsIGFzIGZpeCBhIGJ1ZyBpbgorICB0aGUgcmV0dXJuIHZhbHVlIG9mIFF1ZXJ5UmVmbGVjdGlvbktleS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzc5OTM6IEFkZCBhIHRlc3Qgb2YgSU8gcGFja2V0IHByb2Nlc3NpbmcgYmFuZHdpZHRoIHRvIGNjYmVuY2guICBJdAorICBtZWFzdXJlcyB0aGUgbnVtYmVyIG9mIFVEUCBwYWNrZXRzIHByb2Nlc3NlZCBwZXIgc2Vjb25kIGRlcGVuZGluZyBvbiB0aGUKKyAgbnVtYmVyIG9mIGJhY2tncm91bmQgQ1BVLWJvdW5kIFB5dGhvbiB0aHJlYWRzLgorCistIHB5dGhvbi1jb25maWcgbm93IHN1cHBvcnRzIG11bHRpcGxlIG9wdGlvbnMgb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjODAzMjogRm9yIGdkYjcsIGEgcHl0aG9uLWdkYi5weSBmaWxlIGlzIGFkZGVkIHRvIHRoZSBidWlsZCwgYWxsb3dpbmcgdG8KKyAgdXNlIGFkdmFuY2VkIGdkYiBmZWF0dXJlcyB3aGVuIGRlYnVnZ2luZyBQeXRob24uCisKKy0gSXNzdWUgIzE2Mjg0ODQ6IFRoZSBNYWtlZmlsZSBkb2Vzbid0IGlnbm9yZSB0aGUgQ0ZMQUdTIGVudmlyb25tZW50IHZhcmlhYmxlCisgIGFueW1vcmUuICBJdCBhbHNvIGZvcndhcmRzIHRoZSBMREZMQUdTIHNldHRpbmdzIHRvIHRoZSBsaW5rZXIgd2hlbiBidWlsZGluZyBhCisgIHNoYXJlZCBsaWJyYXJ5LgorCistIElzc3VlICM2NzE2OiBRdW90ZSAteCBhcmd1bWVudHMgb2YgY29tcGlsZWFsbCBpbiBNU0kgaW5zdGFsbGVyLgorCistIElzc3VlICM3NzA1OiBGaXggbGlua2luZyBvbiBGcmVlQlNELgorCistIE1ha2Ugc3VyZSB0aGF0IHRoZSBGcmVlQlNEIGJ1aWxkIG9mIHRoZSBpbmNsdWRlZCBsaWJmZmkgdXNlcyB0aGUgcHJvcGVyCisgIGFzc2VtYmx5IGZpbGUuCisKK0MtQVBJCistLS0tLQorCistIElzc3VlICM4Mjc2OiBQeUV2YWxfQ2FsbE9iamVjdCgpIGlzIG5vdyBvbmx5IGF2YWlsYWJsZSBpbiBtYWNybyBmb3JtLiAgVGhlCisgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCB3aGljaCB3YXMga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywgaXMKKyAgbm93IHJlbW92ZWQgKHRoZSBtYWNybyB3YXMgaW50cm9kdWNlZCBpbiAxOTk3ISkuCisKKy0gSXNzdWUgIzc5OTI6IEEgcmVwbGFjZW1lbnQgUHlDT2JqZWN0IEFQSSwgUHlDYXBzdWxlLCBoYXMgYmVlbiBiYWNrcG9ydGVkIGZyb20KKyAgUHl0aG9uIDMuMS4gIEFsbCBleGlzdGluZyBQeXRob24gQ09iamVjdHMgaW4gdGhlIG1haW4gZGlzdHJpYnV0aW9uIGhhdmUgYmVlbgorICBjb252ZXJ0ZWQgdG8gY2Fwc3VsZXMuICBUbyBhZGRyZXNzIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGNvbmNlcm5zLAorICBQeUNPYmplY3RfQXNWb2lkUHRyKCkgd2FzIGNoYW5nZWQgdG8gdW5kZXJzdGFuZCBjYXBzdWxlcy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzM4NjQ6IFNraXAgdGhyZWUgdGVzdF9zaWduYWwgdGVzdHMgb24gZnJlZWJzZDYgYmVjYXVzZSB0aGV5IGZhaWwgaWYgYW55CisgIHRocmVhZCB3YXMgcHJldmlvdXNseSBzdGFydGVkLCBtb3N0IGxpa2VseSBkdWUgdG8gYSBwbGF0Zm9ybSBidWcuCisKKy0gSXNzdWUgIzgzNDg6IEZpeCB0ZXN0IGZ0cCB1cmwgaW4gdGVzdF91cmxsaWIybmV0LgorCistIElzc3VlICM4MjA0OiBGaXggdGVzdF90dGsgbm90ZWJvb2sgdGVzdCBieSBmb3JjaW5nIGZvY3VzLgorCistIElzc3VlICM4MzQ0OiBGaXggdGVzdF90dGsgYnVnIG9uIEZyZWVCU0QuCisKKy0gSXNzdWUgIzgxOTM6IEZpeCB0ZXN0X3psaWIgZmFpbHVyZSB3aXRoIHpsaWIgMS4yLjQuCisKKy0gSXNzdWUgIzgyNDg6IEFkZCBzb21lIHRlc3RzIGZvciB0aGUgYm9vbCB0eXBlLiAgUGF0Y2ggYnkgR3JlZ29yeSBOb2ZpLgorCistIElzc3VlICM4MjYzOiBOb3cgcmVncnRlc3QucHkgd2lsbCByZXBvcnQgYSBmYWlsdXJlIGlmIGl0IHJlY2VpdmVzIGEKKyAgS2V5Ym9hcmRJbnRlcnJ1cHQgKFNJR0lOVCkuCisKKy0gSXNzdWUgIzgxODAgYW5kICM4MjA3OiBGaXggdGVzdF9wZXAyNzcgb24gT1MgWCBhbmQgYWRkIG1vcmUgdGVzdHMgZm9yIHNwZWNpYWwKKyAgVW5pY29kZSBub3JtYWxpemF0aW9uIGNhc2VzLgorCistIElzc3VlICM3NzgzOiB0ZXN0LnRlc3Rfc3VwcG9ydC5vcGVuX3VybHJlc291cmNlIGludmFsaWRhdGVzIHRoZSBvdXRkYXRlZCBmaWxlcworICBmcm9tIHRoZSBsb2NhbCBjYWNoZS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgYWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMDEwLTAzLTA2KgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjNzU0NDogUHJlYWxsb2NhdGUgdGhyZWFkIG1lbW9yeSBiZWZvcmUgY3JlYXRpbmcgdGhlIHRocmVhZCB0byBhdm9pZCBhCisgIGZhdGFsIGVycm9yIGluIGxvdyBtZW1vcnkgY29uZGl0aW9uLgorCistIElzc3VlICM3ODIwOiBUaGUgcGFyc2VyIHRva2VuaXplciByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IGlmIHRoZSBCT00KKyAgY2hlY2sgZmFpbHMuCisKKy0gSXNzdWUgIzczMDk6IEZpeCB1bmNoZWNrZWQgYXR0cmlidXRlIGFjY2VzcyB3aGVuIGNvbnZlcnRpbmcKKyAgVW5pY29kZUVuY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IsIGFuZCBVbmljb2RlVHJhbnNsYXRlRXJyb3IgdG8gc3RyaW5ncy4KKworLSBJc3N1ZSAjNzY0OTogInUnJWMnICUgY2hhciIgbm93IGJlaGF2ZXMgbGlrZSAidSclcycgJSBjaGFyIiBhbmQgcmFpc2VzIGEKKyAgVW5pY29kZURlY29kZUVycm9yIGlmICdjaGFyJyBpcyBhIGJ5dGUgc3RyaW5nIHRoYXQgY2FuJ3QgYmUgZGVjb2RlZCB1c2luZyB0aGUKKyAgZGVmYXVsdCBlbmNvZGluZy4KKworLSBJc3N1ZSAjNjkwMjogRml4IHByb2JsZW0gd2l0aCBidWlsdC1pbiB0eXBlcyBmb3JtYXQgaW5jb3JyZWN0bHkgd2l0aCAwCisgIHBhZGRpbmcuCisKKy0gSXNzdWUgIzI1NjA6IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSAnZm9yJyBsb29wIGZyb20gYGBteV9mZ2V0cygpYGAgaW4KKyAgUGFyc2VyL215cmVhZGxpbmUuYy4KKworLSBJc3N1ZSAjNzk4ODogRml4IGRlZmF1bHQgYWxpZ25tZW50IHRvIGJlIHJpZ2h0IGFsaWduZWQgZm9yCisgIGBgY29tcGxleC5fX2Zvcm1hdF9fYGAuICBOb3cgaXQgbWF0Y2hlcyBvdGhlciBudW1lcmljIHR5cGVzLgorCistIElzc3VlICM1MjExOiBUaGUgY29tcGxleCB0eXBlIG5vIGxvbmdlciB1c2VzIGltcGxpY2l0IGNvZXJjaW9uIGluIG1peGVkLXR5cGUKKyAgYmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM3OTA0OiBDaGFuZ2VzIHRvIHVybGxpYi5wYXJzZS51cmxzcGxpdCB0byBoYW5kbGUgc2NoZW1lcyBhcyBkZWZpbmVkIGJ5CisgIFJGQzM5ODYuIEFueXRoaW5nIGJlZm9yZSA6Ly8gaXMgY29uc2lkZXJlZCBhIHNjaGVtZSBhbmQgaXMgZm9sbG93ZWQgYnkgYW4KKyAgYXV0aG9yaXR5IChvciBuZXRsb2MpIGFuZCBieSAnLycgbGVkIHBhdGgsIHdoaWNoIGlzIG9wdGlvbmFsLgorCistIElzc3VlICMxNTU1NTcwOiBlbWFpbCBubyBsb25nZXIgaW5zZXJ0cyBleHRyYSBibGFuayBsaW5lcyB3aGVuIGEgXHJcbgorICBjb21ibyBjcm9zc2VzIGFuIDgxOTIgYnl0ZSBib3VuZGFyeS4KKworLSBJc3N1ZSAjNjkwNjogVGsgc2hvdWxkIG5vdCBzZXQgVW5pY29kZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTA1NDk0MzogRml4IGBgdW5pY29kZWRhdGEubm9ybWFsaXplKCdORkMnLCB0ZXh0KWBgIGZvciB0aGUgUHVibGljCisgIFJldmlldyBJc3N1ZSAjMjkgKGh0dHA6Ly91bmljb2RlLm9yZy9yZXZpZXcvcHItMjkuaHRtbCkuCisKKy0gSXNzdWUgIzc0OTQ6IEZpeCBhIGNyYXNoIGluIGBgX2xzcHJvZmBgIChjUHJvZmlsZSkgYWZ0ZXIgY2xlYXJpbmcgdGhlIHByb2ZpbGVyLAorICByZXNldCBhbHNvIHRoZSBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHBvaW50ZXIgY29udGV4dC4KKworLSBJc3N1ZSAjNzIzMjogQWRkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgdG8gdGhlCisgIGBgdGFyZmlsZS5UYXJGaWxlYGAgY2xhc3MuCisKIC0gSXNzdWUgIzcyNTA6IEZpeCBpbmZvIGxlYWsgb2Ygb3MuZW52aXJvbiBhY3Jvc3MgbXVsdGktcnVuIHVzZXMgb2YKLSAgd3NnaXJlZi5oYW5kbGVycy5DR0lIYW5kbGVyLgorICBgYHdzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlcmBgLgogCiAtIElzc3VlICMxNzI5MzA1OiBGaXggZG9jdGVzdCB0byBoYW5kbGUgZW5jb2RlIGVycm9yIHdpdGggImJhY2tzbGFzaHJlcGxhY2UiLgogCi0tIElzc3VlICM2OTEyOTE6IGNvZGVjcy5vcGVuKCkgc2hvdWxkIG5vdCBjb252ZXJ0IGVuZCBvZiBsaW5lcyBvbiByZWFkaW5nIGFuZAotICB3cml0aW5nLgorLSBJc3N1ZSAjNjkxMjkxOiBgYGNvZGVjcy5vcGVuKClgYCBzaG91bGQgbm90IGNvbnZlcnQgZW5kIG9mIGxpbmVzIG9uIHJlYWRpbmcKKyAgYW5kIHdyaXRpbmcuCiAKLS0gSXNzdWUgIzc5NzU6IGNvcnJlY3QgcmVncmVzc2lvbiBpbiBkaWN0IG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGJzZGRiLmRic2hlbHZlLgorLSBJc3N1ZSAjNzk3NTogQ29ycmVjdCByZWdyZXNzaW9uIGluIGRpY3QgbWV0aG9kcyBzdXBwb3J0ZWQgYnkgYnNkZGIuZGJzaGVsdmUuCiAKLS0gSXNzdWUgIzc5NTk6IGN0eXBlcyBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIG5vdyByZWdpc3RlcmVkIGNvcnJlY3RseQotICB3aXRoIHRoZSBjeWNsZSBnYXJiYWdlIGNvbGxlY3Rvci4KKy0gSXNzdWUgIzc5NTk6IGN0eXBlcyBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIG5vdyByZWdpc3RlcmVkIGNvcnJlY3RseSB3aXRoIHRoZQorICBjeWNsZSBnYXJiYWdlIGNvbGxlY3Rvci4KIAotLSBJc3N1ZSAjNjI0MzogY3Vyc2VzLmdldGtleSgpIGNhbiBzZWdmYXVsdCB3aGVuIHVzZWQgd2l0aCB1bmdldGNoLgotICBGaXggYnkgVHJ1bmRsZSBhbmQgSmVycnkgQ2hlbi4KLQotLSBJc3N1ZSAjNzU5NzogY3Vyc2VzLnVzZV9lbnYoKSBjYW4gbm93IGJlIGNhbGxlZCBiZWZvcmUgaW5pdHNjcigpLgotICBOb3RlZCBieSBLYW4tUnUgQ2hlbi4KLQotLSBJc3N1ZSAjNzk3MDogZW1haWwuR2VuZXJhdG9yLmZsYXR0ZW4gbm93IGNvcnJlY3RseSBmbGF0dGVucyBtZXNzYWdlL3JmYzgyMgotICBtZXNzYWdlcyBwYXJzZWQgYnkgZW1haWwuUGFyc2VyLkhlYWRlclBhcnNlci4KKy0gSXNzdWUgIzc5NzA6IGBgZW1haWwuR2VuZXJhdG9yLmZsYXR0ZW5gYCBub3cgY29ycmVjdGx5IGZsYXR0ZW5zCisgIG1lc3NhZ2UvcmZjODIyIG1lc3NhZ2VzIHBhcnNlZCBieSBgYGVtYWlsLlBhcnNlci5IZWFkZXJQYXJzZXJgYC4KIAogLSBJc3N1ZSAjMzQyNjogYGBvcy5wYXRoLmFic3BhdGhgYCBub3cgcmV0dXJucyB1bmljb2RlIHdoZW4gaXRzIGFyZyBpcyB1bmljb2RlLgogCi0tIElzc3VlICM3ODM1OiBzaGVsdmUgc2hvdWxkIG5vIGxvbmdlciBwcm9kdWNlIG15c3RlcmlvdXMgd2FybmluZ3MgZHVyaW5nCi0gIGludGVycHJldGVyIHNodXRkb3duLgorLSBJc3N1ZSAjNzYzMzogSW4gdGhlIGRlY2ltYWwgbW9kdWxlLCBgYENvbnRleHRgYCBjbGFzcyBtZXRob2RzICh3aXRoIHRoZQorICBleGNlcHRpb24gb2YgY2Fub25pY2FsIGFuZCBpc19jYW5vbmljYWwpIG5vdyBhY2NlcHQgaW5zdGFuY2VzIG9mIGludCBhbmQgbG9uZworICB3aGVyZXZlciBhIERlY2ltYWwgaW5zdGFuY2UgaXMgYWNjZXB0ZWQsIGFuZCBpbXBsaWNpdGx5IGNvbnZlcnQgdGhhdCBhcmd1bWVudAorICB0byBEZWNpbWFsLiAgUHJldmlvdXNseSBvbmx5IHNvbWUgYXJndW1lbnRzIHdlcmUgY29udmVydGVkLgogCi0tIElzc3VlICM0NzcyOiBSYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBhbiB1bmtub3duIEJsdWV0b290aCBwcm90b2NvbCBpcwotICBzcGVjaWZpZWQsIHJhdGhlciB0aGFuIGZhbGwgdGhyb3VnaCB0byBBRl9QQUNLRVQgKGluIHRoZSBgc29ja2V0YCBtb2R1bGUpLgotICBBbHNvLCByYWlzZSBWYWx1ZUVycm9yIHJhdGhlciB0aGFuIFR5cGVFcnJvciB3aGVuIGFuIHVua25vd24gVElQQyBhZGRyZXNzCi0gIHR5cGUgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgQnJpYW4gQ3VydGluLgorLSBJc3N1ZSAjNjAwMzogQWRkIGFuIGFyZ3VtZW50IHRvIGBgemlwZmlsZS5aaXBmaWxlLndyaXRlc3RyYGAgdG8gc3BlY2lmeSB0aGUKKyAgY29tcHJlc3Npb24gdHlwZS4KIAotLSBJc3N1ZSAjNjkzOTogRml4IGZpbGUgSS9PIG9iamVjdHMgaW4gdGhlIGBpb2AgbW9kdWxlIHRvIGtlZXAgdGhlIG9yaWdpbmFsCi0gIGZpbGUgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGB0cnVuY2F0ZSgpYC4gIEl0IHdvdWxkIHByZXZpb3VzbHkgY2hhbmdlIHRoZQotICBmaWxlIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBhcmd1bWVudCwgd2hpY2ggZ29lcyBhZ2FpbnN0IHRoZSB0cmFkaXRpb24gb2YKLSAgZnRydW5jYXRlKCkgYW5kIG90aGVyIHRydW5jYXRpb24gQVBJcy4gIFBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgorLSBJc3N1ZSAjNzg5MzogYGB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdGBgIGlzIG1hZGUgcHVibGljIGFuZCBhIGBgcmVzdWx0Y2xhc3NgYAorICBhcmd1bWVudCBhZGRlZCB0byB0aGUgVGV4dFRlc3RSdW5uZXIgY29uc3RydWN0b3IgYWxsb3dpbmcgYSBkaWZmZXJlbnQgcmVzdWx0CisgIGNsYXNzIHRvIGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgdG8gc3ViY2xhc3MuCiAKLS0gSXNzdWUgIzc3NzM6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKSB3aGVuCi0gIHRoZSByZWxlYXNlIGZpbGUgaXMgZW1wdHkuCistIElzc3VlICM3NTg4OiBgYHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0LmdldERlc2NyaXB0aW9uYGAgbm93IGluY2x1ZGVzIHRoZSB0ZXN0CisgIG5hbWUgaW4gZmFpbHVyZSByZXBvcnRzIGV2ZW4gaWYgdGhlIHRlc3QgaGFzIGEgZG9jc3RyaW5nLgogCi0tIElzc3VlICM3NzQ4OiBTaW5jZSB1bmljb2RlIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGZvciBzb21lIG1ldGFkYXRhIG9wdGlvbnMKLSAgaW4gRGlzdHV0aWxzLCB0aGUgRGlzdHJpYnV0aW9uTWV0YWRhdGEgZ2V0XyogbWV0aG9kcyB3aWxsIG5vdyByZXR1cm4gYW4gdXRmLTgKLSAgZW5jb2RlZCBzdHJpbmcgZm9yIHRoZW0uIFRoaXMgZW5zdXJlIHRoYXQgdGhlIHVwbG9hZCBhbmQgcmVnaXN0ZXIgY29tbWFuZHMKLSAgc2VuZCB0aGUgcmlnaHQgdmFsdWVzIHRvIFB5UEkgd2l0aG91dCBhbnkgZXJyb3IuCistIElzc3VlICM1ODAxOiBSZW1vdmUgc3B1cmlvdXMgZW1wdHkgbGluZXMgaW4gd3NnaXJlZi4KIAotLSBJc3N1ZSAjMTY3MDc2NTogUHJldmVudCBlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yIGZyb20gcmUtd3JhcHBpbmcKLSAgaGVhZGVycyBpbiBtdWx0aXBhcnQvc2lnbmVkIE1JTUUgcGFydHMsIHdoaWNoIGZpeGVzIG9uZSBvZiB0aGUgc291cmNlcyBvZgotICBpbnZhbGlkIG1vZGlmaWNhdGlvbnMgdG8gc3VjaCBwYXJ0cyBieSBHZW5lcmF0b3IuCistIElzc3VlICMxNTM3NzIxOiBBZGQgYSBgYHdyaXRlaGVhZGVyKClgYCBtZXRob2QgdG8gYGBjc3YuRGljdFdyaXRlcmBgLgogCi0tIElzc3VlICM3NzAxOiBGaXggY3Jhc2ggaW4gYmluYXNjaWkuYjJhX3V1KCkgaW4gZGVidWcgbW9kZSB3aGVuIGdpdmVuIGEKLSAgMS1ieXRlIGFyZ3VtZW50LiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCistIElzc3VlICM3NDI3OiBJbXByb3ZlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBodHRwbGliLkJhZFN0YXR1c0xpbmUgZXhjZXB0aW9ucy4KIAotLSBJc3N1ZSAjMzI5OTogRml4IHBvc3NpYmxlIGNyYXNoIGluIHRoZSBfc3JlIG1vZHVsZSB3aGVuIGdpdmVuIGJhZAotICBhcmd1bWVudCB2YWx1ZXMgaW4gZGVidWcgbW9kZS4gIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgotCi0tIElzc3VlICM1ODI3OiBNYWtlIHN1cmUgdGhhdCBub3JtcGF0aCBwcmVzZXJ2ZXMgdW5pY29kZS4gIEluaXRpYWwgcGF0Y2gKLSAgYnkgTWF0dCBHaXVjYS4KLQotLSBJc3N1ZSAjNTM3MjogRHJvcCB0aGUgcmV1c2Ugb2YgLm8gZmlsZXMgaW4gRGlzdHV0aWxzJyBjY29tcGlsZXIgKHNpbmNlCi0gIEV4dGVuc2lvbiBleHRyYSBvcHRpb25zIG1heSBjaGFuZ2UgdGhlIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSAuYwotICBmaWxlKS4gSW5pdGlhbCBwYXRjaCBieSBDb2xsaW4gV2ludGVyLgotCi0tIElzc3VlICM3NjE3OiBNYWtlIHN1cmUgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIuVW5peENDb21waWxlciByZWNvZ25pemVzCi0gIGdjYyB3aGVuIGl0IGhhcyBhIGZ1bGx5IHF1YWxpZmllZCBjb25maWd1cmF0aW9uIHByZWZpeC4gSW5pdGlhbCBwYXRjaAotICBieSBBcmZyZXZlci4KLQotLSBJc3N1ZSAjNzA3MTogYnl0ZS1jb21waWxhdGlvbiBpbiBEaXN0dXRpbHMgaXMgbm93IGRvbmUgd2l0aCByZXNwZWN0IHRvCi0gIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLgotCi0tIElzc3VlICM3MDkyOiBSZW1vdmUgcHkzayB3YXJuaW5nIHdoZW4gaW1wb3J0aW5nIGNQaWNrbGUuICAydG8zIGhhbmRsZXMKLSAgcmVuYW1pbmcgb2YgYGNQaWNrbGVgIHRvIGBwaWNrbGVgLiAgVGhlIHdhcm5pbmcgd2FzIGFubm95aW5nIHNpbmNlIHRoZXJlJ3MKLSAgbm8gYWx0ZXJuYXRpdmUgdG8gY1BpY2tsZSBpZiB5b3UgY2FyZSBhYm91dCBwZXJmb3JtYW5jZS4gIFBhdGNoIGJ5IEZsb3JlbnQKLSAgWGljbHVuYS4KLQotLSBJc3N1ZSAjNzQ1NTogRml4IHBvc3NpYmxlIGNyYXNoIGluIGNQaWNrbGUgb24gaW52YWxpZCBpbnB1dC4gIFBhdGNoIGJ5Ci0gIFZpY3RvciBTdGlubmVyLgotCi0tIElzc3VlICM2NTExOiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwZmlsZSAoaW5zdGVhZCBvZiBhbiBJT0Vycm9yKSB3aGVuCi0gIG9wZW5pbmcgYW4gZW1wdHkgb3IgdmVyeSBzbWFsbCBmaWxlLgotCi0tIElzc3VlICM3NTUyOiBSZW1vdmVkIGxpbmUgZmVlZCBpbiB0aGUgYmFzZTY0IEF1dGhvcml6YXRpb24gaGVhZGVyIGluCi0gIHRoZSBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgdG8gYXZvaWQgYW4gZXJyb3Igd2hlbiBQeVBJIHJlYWRzIGl0LgotICBUaGlzIG9jY3VycyBvbiBsb25nIHBhc3N3b3Jkcy4gSW5pdGlhbCBwYXRjaCBieSBKUCBTdC4gUGllcnJlLgotCi0tIElzc3VlICM3MjMxOiB1cmxsaWIyIGNhbm5vdCBoYW5kbGUgaHR0cHMgd2l0aCBwcm94eSByZXF1aXJpbmcgYXV0aC4gUGF0Y2ggYnkKLSAgVGF0c3VoaXJvIFRzdWppa2F3YS4KLQotLSBJc3N1ZSAjNzM0ODogU3RyaW5nSU8uU3RyaW5nSU8ucmVhZGxpbmUoLTEpIG5vdyBhY3RzIGFzIGlmIGl0IGdvdCBubyBhcmd1bWVudAotICBsaWtlIG90aGVyIGZpbGUgb2JqZWN0cy4KLQotLSBJc3N1ZSAjNTk0OTogZml4ZWQgSU1BUDRfU1NMIGhhbmcgd2hlbiB0aGUgSU1BUCBzZXJ2ZXIgcmVzcG9uc2UgaXMKLSAgbWlzc2luZyBwcm9wZXIgZW5kLW9mLWxpbmUgdGVybWluYXRpb24uCi0KLS0gRml4IHZhcmlhdGlvbnMgb2YgZXh0ZW5kaW5nIGRlcXVlczogIGQuZXh0ZW5kKGQpICBkLmV4dGVuZGxlZnQoZCkgIGQrPWQKLQotLSBJc3N1ZSAjMTkyMzogRml4ZWQgdGhlIHJlbW92YWwgb2YgbWVhbmluZ2Z1bCBzcGFjZXMgd2hlbiBQS0ctSU5GTyBpcwotICBnZW5lcmF0ZWQgaW4gRGlzdHV0aWxzLiBQYXRjaCBieSBTdGVwaGVuIEVtc2xpZS4KLQotLSBJc3N1ZSAjNDEyMDogRHJvcCByZWZlcmVuY2UgdG8gQ1JUIGZyb20gbWFuaWZlc3Qgd2hlbiBidWlsZGluZyBleHRlbnNpb25zCi0gIHdpdGggbXN2Yzljb21waWxlci4KLQotLSBJc3N1ZSAjNzQxMDogZGVlcGNvcHkgb2YgaXRlcnRvb2xzLmNvdW50KCkgZXJyb25lb3VzbHkgcmVzZXQgdGhlIGNvdW50LgotCi0tIElzc3VlICM3NDAzOiBsb2dnaW5nOiBGaXhlZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbiBpbiBsb2NrIGNyZWF0aW9uLgotCi0tIElzc3VlICM3MzQxOiBDbG9zZSB0aGUgaW50ZXJuYWwgZmlsZSBvYmplY3QgaW4gdGhlIFRhckZpbGUgY29uc3RydWN0b3IgaW4KLSAgY2FzZSBvZiBhbiBlcnJvci4KLQotLSBJc3N1ZSAjNzMyODogcHlkb2Mgbm8gbG9uZ2VyIGNvcnJ1cHRzIHN5cy5wYXRoIHdoZW4gcnVuIHdpdGggdGhlICctbScgc3dpdGNoCi0KLS0gSXNzdWUgIzczMTg6IG11bHRpcHJvY2Vzc2luZyBub3cgdXNlcyBhIHRpbWVvdXQgd2hlbiBpdCBmYWlscyB0byBlc3RhYmxpc2gKLSAgYSBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBwcm9jZXNzLCByYXRoZXIgdGhhbiBsb29waW5nIGVuZGxlc3NseS4gVGhlCi0gIGRlZmF1bHQgdGltZW91dCBpcyAyMCBzZWNvbmRzLCB3aGljaCBzaG91bGQgYmUgYW1wbHkgc3VmZmljaWVudCBmb3IKLSAgbG9jYWwgY29ubmVjdGlvbnMuCi0KLS0gSXNzdWUgIzcyODI6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZW4gYW4gUkxvY2sgd2FzIHVzZWQgaW4gYSB0aHJlYWQgb3RoZXIKLSAgdGhhbiB0aG9zZSBzdGFydGVkIHRocm91Z2ggYHRocmVhZGluZy5UaHJlYWRgIChmb3IgZXhhbXBsZSwgdXNpbmcKLSAgYHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKClgLgotCi0tIElzc3VlICM3MjY0OiBGaXggYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGRlYWxsb2NhdGluZyB0aHJlYWQtbG9jYWwgb2JqZWN0cwotICB3aGljaCBhcmUgcGFydCBvZiBhIHJlZmVyZW5jZSBjeWNsZS4KLQotLSBJc3N1ZSAjNzI0OTogTWV0aG9kcyBvZiBpby5CeXRlc0lPIG5vdyBhbGxvdyBgbG9uZ2AgYXMgd2VsbCBhcyBgaW50YAotICBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzY2NjU6IEZpeCBmbm1hdGNoIHRvIHByb3Blcmx5IG1hdGNoIGZpbGVuYW1lcyB3aXRoIG5ld2xpbmVzIGluIHRoZW0uCi0KLS0gSXNzdWUgIzEwMDgwODY6IEZpeGVkIHNvY2tldC5pbmV0X2F0b24oKSB0byBhbHdheXMgcmV0dXJuIDQgYnl0ZXMgZXZlbiBvbgotICBMUDY0IHBsYXRmb3JtcyAobW9zdCA2NC1iaXQgTGludXgsIGJzZCwgdW5peCBzeXN0ZW1zKS4KLQotLSBJc3N1ZSAjNzI0NiAmIElzc3VlICM3MjA4OiBnZXRwYXNzIG5vdyBwcm9wZXJseSBmbHVzaGVzIGlucHV0IGJlZm9yZQotICByZWFkaW5nIGZyb20gc3RkaW4gc28gdGhhdCBleGlzdGluZyBpbnB1dCBkb2VzIG5vdCBjb25mdXNlIGl0IGFuZAotICBsZWFkIHRvIGluY29ycmVjdCBlbnRyeSBvciBhbiBJT0Vycm9yLiAgSXQgYWxzbyBwcm9wZXJseSBmbHVzaGVzIGl0Ci0gIGFmdGVyd2FyZHMgdG8gYXZvaWQgdGhlIHRlcm1pbmFsIGVjaG9pbmcgdGhlIGlucHV0IGFmdGVyd2FyZHMgb24KLSAgT1NlcyBzdWNoIGFzIFNvbGFyaXMuCi0KLS0gSXNzdWUgIzcyNDQ6IGl0ZXJ0b29scy5pemlwX2xvbmdlc3QoKSBubyBsb25nZXIgaWdub3JlcyBleGNlcHRpb25zCi0gIHJhaXNlZCBkdXJpbmcgdGhlIGZvcm1hdGlvbiBvZiBhbiBvdXRwdXQgdHVwbGUuCi0KLS0gSXNzdWUgIzcyMzM6IEZpeCBhIG51bWJlciBvZiB0d28tYXJndW1lbnQgRGVjaW1hbCBtZXRob2RzIHRvIG1ha2UKLSAgc3VyZSB0aGF0IHRoZXkgYWNjZXB0IGFuIGludCBvciBsb25nIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuICBBbHNvCi0gIGZpeCBidWdneSBoYW5kbGluZyBvZiBsYXJnZSBhcmd1bWVudHMgKHRob3NlIHdpdGggY29lZmZpY2llbnQgbG9uZ2VyCi0gIHRoYW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uKSBpbiBzaGlmdCBhbmQgcm90YXRlLgotCi0tIElzc3VlICM3MDgyOiBXaGVuIGZhbGxpbmcgYmFjayB0byB0aGUgTUlNRSAnbmFtZScgcGFyYW1ldGVyLCB0aGUKLSAgY29ycmVjdCBwbGFjZSB0byBsb29rIGZvciBpdCBpcyB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KLQotLSBJc3N1ZSAjNzA5OTogRGVjaW1hbC5pc19ub3JtYWwgbm93IHJldHVybnMgVHJ1ZSBmb3IgbnVtYmVycyB3aXRoIGV4cG9uZW50Ci0gIGxhcmdlciB0aGFuIGVtYXguCi0KLS0gSXNzdWUgIzcyMDU6IEZpeCBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gdXNpbmcgYSBCWjJGaWxlIG9iamVjdCBmcm9tCi0gIHNldmVyYWwgdGhyZWFkcyBhdCBvbmNlLgotCi0tIElzc3VlICM3MDQ4OiBGb3JjZSBEZWNpbWFsLmxvZ2IgdG8gcm91bmQgaXRzIHJlc3VsdCB3aGVuIHRoYXQgcmVzdWx0Ci0gIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uLgotCi0tIElzc3VlICMxNDg4OTQzOiBkaWZmbGliLkRpZmZlcigpIGRvZXNuJ3QgYWx3YXlzIGFkZCBoaW50cyBmb3IgdGFiIGNoYXJhY3RlcnMKLQotLSBJc3N1ZSAjNTAzNzogUHJveHkgdGhlIF9fdW5pY29kZV9fIHNwZWNpYWwgbWV0aG9kIHRvIF9fdW5pY29kZV9fIGluc3RlYWQgb2YKLSAgX19zdHJfXy4KLQotLSBJc3N1ZSAjNzQ4MTogV2hlbiBhIHRocmVhZGluZy5UaHJlYWQgZmFpbGVkIHRvIHN0YXJ0IGl0IHdvdWxkIGxlYXZlIHRoZQotICBpbnN0YW5jZSBzdHVjayBpbiBpbml0aWFsIHN0YXRlIGFuZCBwcmVzZW50IGluIHRocmVhZGluZy5lbnVtZXJhdGUoKS4KKy0gSXNzdWUgIzc0ODE6IFdoZW4gYSBgYHRocmVhZGluZy5UaHJlYWRgYCBmYWlsZWQgdG8gc3RhcnQgaXQgd291bGQgbGVhdmUgdGhlCisgIGluc3RhbmNlIHN0dWNrIGluIGluaXRpYWwgc3RhdGUgYW5kIHByZXNlbnQgaW4gYGB0aHJlYWRpbmcuZW51bWVyYXRlKClgYC4KIAogLSBJc3N1ZSAjMTA2ODI2ODogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vdyBoYW5kbGVzIEVJTlRSIGluIGludGVybmFsCi0gIG9zLndhaXRwaWQgYW5kIG9zLnJlYWQgc3lzdGVtIGNhbGxzIHdoZXJlIGFwcHJvcHJpYXRlLgorICBgYG9zLndhaXRwaWQoKWBgIGFuZCBgYG9zLnJlYWQoKWBgIHN5c3RlbSBjYWxscyB3aGVyZSBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjNjcyOTogQWRkIGBgY3R5cGVzLmNfc3NpemVfdGBgIHRvIHJlcHJlc2VudCBzc2l6ZV90LgorCistIElzc3VlICM2MjQ3OiBUaGUgYXJncGFyc2UgbW9kdWxlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgogCiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBUaGUgc3FsaXRlMyBtb2R1bGUgd2FzIHVwZGF0ZWQgdG8gcHlzcWxpdGUgMi42LjAuICBUaGlzIGZpeGVzIHNldmVyYWwgb2JzY3VyZQorICBidWdzIGFuZCBhbGxvd3MgbG9hZGluZyBTUUxpdGUgZXh0ZW5zaW9ucyBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuCisKIC0gSXNzdWUgIzc4MDg6IEZpeCByZWZlcmVuY2UgbGVha3MgaW4gX2JzZGRiIGFuZCByZWxhdGVkIHRlc3RzLgogCistIElzc3VlICM2NTQ0OiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiB0aGUga3F1ZXVlIGltcGxlbWVudGF0aW9uJ3MgZXJyb3IKKyAgaGFuZGxpbmcuCisKIC0gU3RvcCBwcm92aWRpbmcgY3J0YXNzZW0uaCBzeW1ib2xzIHdoZW4gY29tcGlsaW5nIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLCBhcwogICBtc3ZjcjEwMC5kbGwgaXMgbm90IGEgcGxhdGZvcm0gYXNzZW1ibHkgYW55bW9yZS4KIAotLSBJc3N1ZSAjNjg3NzogTWFrZSBpdCBwb3NzaWJsZSB0byBsaW5rIHRoZSByZWFkbGluZSBleHRlbnNpb24gdG8gbGliZWRpdAotICBvbiBPU1guCi0KLS0gRXhwYXQ6IEZpeCBEb1MgdmlhIFhNTCBkb2N1bWVudCB3aXRoIG1hbGZvcm1lZCBVVEYtOCBzZXF1ZW5jZXMKLSAgKENWRV8yMDA5XzM1NjApLgotCi0tIElzc3VlICM3MjQyOiBPbiBTb2xhcmlzIDkgYW5kIGVhcmxpZXIgY2FsbGluZyBvcy5mb3JrKCkgZnJvbSB3aXRoaW4gYQorLSBJc3N1ZSAjNzI0MjogT24gU29sYXJpcyA5IGFuZCBlYXJsaWVyIGNhbGxpbmcgYGBvcy5mb3JrKClgYCBmcm9tIHdpdGhpbiBhCiAgIHRocmVhZCBjb3VsZCByYWlzZSBhbiBpbmNvcnJlY3QgUnVudGltZUVycm9yIGFib3V0IG5vdCBob2xkaW5nIHRoZSBpbXBvcnQKICAgbG9jay4gIFRoZSBpbXBvcnQgbG9jayBpcyBub3cgcmVpbml0aWFsaXplZCBhZnRlciBmb3JrLgogCi0tIElzc3VlICM3OTk5OiBvcy5zZXRyZXVpZCgpIGFuZCBvcy5zZXRyZWdpZCgpIHdvdWxkIHJlZnVzZSB0byBhY2NlcHQgYSAtMQotICBwYXJhbWV0ZXIgb24gc29tZSBwbGF0Zm9ybXMgc3VjaCBhcyBPUyBYLgorLSBJc3N1ZSAjNzk5OTogYGBvcy5zZXRyZXVpZCgpYGAgYW5kIGBgb3Muc2V0cmVnaWQoKWBgIHdvdWxkIHJlZnVzZSB0byBhY2NlcHQgYQorICAtMSBwYXJhbWV0ZXIgb24gc29tZSBwbGF0Zm9ybXMgc3VjaCBhcyBPUyBYLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjNzg0OTogVGhlIHV0aWxpdHkgYGB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpYGAgdmVyaWZpZXMgaWYKKyAgd2FybmluZ3MgYXJlIGVmZmVjdGl2ZWx5IHJhaXNlZC4gIEEgbmV3IHV0aWxpdHkgYGBjaGVja19weTNrX3dhcm5pbmdzKClgYCBpcworICBhdmFpbGFibGUuCisKKy0gVGhlIGZvdXIgcGF0aCBtb2R1bGVzIChnZW5lcmljcGF0aCwgbWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpIHNoYXJlIGEKKyAgY29tbW9uIFRlc3RDYXNlIGZvciBzb21lIHRlc3RzOiB0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QuCisKKy0gUHJpbnQgcGxhdGZvcm0gaW5mb3JtYXRpb24gd2hlbiBydW5uaW5nIHRoZSB3aG9sZSB0ZXN0IHN1aXRlLCBvciB1c2luZyB0aGUKKyAgYGAtLXZlcmJvc2VgYCBmbGFnLgorCistIElzc3VlICM3Njc2NzU6IEVuYWJsZSB0ZXN0X3BlcDI3NyBvbiBQT1NJWCBwbGF0Zm9ybXMgd2l0aCBVbmljb2RlLWZyaWVuZGx5CisgIGZpbGVzeXN0ZW0gZW5jb2RpbmcuCisKKy0gSXNzdWUgIzYyOTI6IEZvciB0aGUgbW9tZW50IGF0IGxlYXN0LCB0aGUgdGVzdCBzdWl0ZSBydW5zIGNsZWFubHkgaWYgcHl0aG9uCisgIGlzIHJ1biB3aXRoIHRoZSAtT08gZmxhZy4gIFRlc3RzIHJlcXVpcmluZyBkb2NzdHJpbmdzIGFyZSBza2lwcGVkLgorCistIElzc3VlICM3NzEyOiB0ZXN0X3N1cHBvcnQgZ2FpbmVkIGEgbmV3IGBgdGVtcF9jd2RgYCBjb250ZXh0IG1hbmFnZXIgd2hpY2ggaXMKKyAgbm93IGFsc28gdXNlZCBieSByZWdydGVzdCB0byBydW4gYWxsIHRoZSB0ZXN0cyBpbiBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuICBUaGUKKyAgb3JpZ2luYWwgQ1dEIGlzIHNhdmVkIGluIGBgdGVzdC50ZXN0X3N1cHBvcnQuU0FWRURDV0RgYC4gIFRoYW5rcyB0byBGbG9yZW50CisgIFhpY2x1bmEgd2hvIGhlbHBlZCB3aXRoIHRoZSBwYXRjaC4KIAogQnVpbGQKIC0tLS0tCiAKIC0gSXNzdWUgIzM5MjAsICM3OTAzOiBEZWZpbmUgX0JTRF9TT1VSQ0Ugb24gT3BlbkJTRCA0LjQgdGhyb3VnaCA0LjkuCiAKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMi43IGFscGhhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjAxMC0wMi0wNioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzU2Nzc6IEV4cGxpY2l0bHkgZm9yYmlkIHdyaXRlIG9wZXJhdGlvbnMgb24gcmVhZC1vbmx5IGZpbGUgb2JqZWN0cywKKyAgYW5kIHJlYWQgb3BlcmF0aW9ucyBvbiB3cml0ZS1vbmx5IGZpbGUgb2JqZWN0cy4gIE9uIFdpbmRvd3MsIHRoZSBzeXN0ZW0gQworICBsaWJyYXJ5IHdvdWxkIHJldHVybiBhIGJvZ3VzIHJlc3VsdDsgb24gU29sYXJpcywgaXQgd2FzIHBvc3NpYmxlIHRvIGNyYXNoIHRoZQorICBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IFN0ZWZhbiBLcmFoLgorCistIElzc3VlICM3ODUzOiBOb3JtYWxpemUgZXhjZXB0aW9ucyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIGEgY29udGV4dAorICBtYW5hZ2VyJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kLgorCistIElzc3VlICM3Mzg1OiBGaXggYSBjcmFzaCBpbiBgYFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KClgYCB3aGVuCisgIGBgUHlPYmplY3RfR2V0QnVmZmVyKClgYCBmYWlscy4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworLSBJc3N1ZSAjNzgxOTogQ2hlY2sgYGBzeXMuY2FsbF90cmFjaW5nKClgYCBhcmd1bWVudHMgdHlwZXMuCisKKy0gSXNzdWUgIzc3ODg6IEZpeCBhbiBpbnRlcnByZXRlciBjcmFzaCBwcm9kdWNlZCBieSBkZWxldGluZyBhIGxpc3Qgc2xpY2Ugd2l0aAorICB2ZXJ5IGxhcmdlIHN0ZXAgdmFsdWUuCisKKy0gSXNzdWUgIzc3NjY6IENoYW5nZSBgYHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpYGAgcmV0dXJuIHZhbHVlIHRvIGEgbmFtZWQgdHVwbGUKKyAgYW5kIGFkZCB0aGUgYWRkaXRpb25hbCBtZW1iZXJzIHJldHVybmVkIGluIGFuIE9TVkVSU0lPTklORk9FWCBzdHJ1Y3R1cmUuICBUaGUKKyAgbmV3IG1lbWJlcnMgYXJlIHNlcnZpY2VfcGFja19tYWpvciwgc2VydmljZV9wYWNrX21pbm9yLCBzdWl0ZV9tYXNrLCBhbmQKKyAgcHJvZHVjdF90eXBlLgorCistIElzc3VlICM3NTYxOiBPcGVyYXRpb25zIG9uIGVtcHR5IGJ5dGVhcnJheXMgKHN1Y2ggYXMgYGBpbnQoYnl0ZWFycmF5KCkpYGApCisgIGNvdWxkIGNyYXNoIGluIG1hbnkgcGxhY2VzIGJlY2F1c2Ugb2YgdGhlIGBgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKClgYCBtYWNybworICByZXR1cm5pbmcgTlVMTC4gIFRoZSBtYWNybyBub3cgcmV0dXJucyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGVtcHR5IHN0cmluZworICBpbnN0ZWFkLgorCistIElzc3VlICM3NjIyOiBJbXByb3ZlIHRoZSBzcGxpdCgpLCByc3BsaXQoKSwgc3BsaXRsaW5lcygpIGFuZCByZXBsYWNlKCkKKyAgbWV0aG9kcyBvZiBieXRlcywgYnl0ZWFycmF5IGFuZCB1bmljb2RlIG9iamVjdHMgYnkgdXNpbmcgYSBjb21tb24KKyAgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gc3RyaW5nbGliJ3MgZmFzdCBzZWFyY2guICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzc2MzI6IEZpeCB2YXJpb3VzIHN0ciAtPiBmbG9hdCBjb252ZXJzaW9uIGJ1Z3MgcHJlc2VudCBpbiAyLjcgYWxwaGEgMiwKKyAgaW5jbHVkaW5nOgorCisgICgxKSBhIHNlcmlvdXMgJ3dyb25nIG91dHB1dCcgYnVnIHRoYXQgY291bGQgb2NjdXIgZm9yIGxvbmcgKD4gNDAgZGlnaXQpIGlucHV0CisgICAgICBzdHJpbmdzLAorICAoMikgYSBjcmFzaCBpbiBkdG9hLmMgdGhhdCBvY2N1cnJlZCBpbiBkZWJ1ZyBidWlsZHMgd2hlbiBwYXJzaW5nIGNlcnRhaW4gbG9uZworICAgICAgbnVtZXJpYyBzdHJpbmdzIGNvcnJlc3BvbmRpbmcgdG8gc3Vibm9ybWFsIHZhbHVlcywKKyAgKDMpIGEgbWVtb3J5IGxlYWsgZm9yIHNvbWUgdmFsdWVzIGxhcmdlIGVub3VnaCB0byBjYXVzZSBvdmVyZmxvdywgYW5kCisgICg0KSBhIG51bWJlciBvZiBmbGF3cyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzLgorCistIElzc3VlICM3MzE5LCAjNzc3MDogU2lsZW5jZSBgYERlcHJlY2F0aW9uV2FybmluZ2BgIGJ5IGRlZmF1bHQgd2hlbiB0aGUgLTMKKyAgb3B0aW9uIGlzIG5vdCB1c2VkLgorCistIElzc3VlICMyMzM1OiBCYWNrcG9ydCBzZXQgbGl0ZXJhbHMgc3ludGF4IGZyb20gUHl0aG9uIDMueC4KKworLSBJc3N1ZSAjMjMzMzogQmFja3BvcnQgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zIHN5bnRheCBmcm9tIFB5dGhvbiAzLnguCisKKy0gSXNzdWUgIzE5Njc6IEJhY2twb3J0IGRpY3Rpb25hcnkgdmlld3MgZnJvbSBQeXRob24gMy54LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzkxMzc6IEZpeCBpc3N1ZSBpbiBNdXRhYmxlTWFwcGluZy51cGRhdGUsIHdoaWNoIGluY29ycmVjdGx5CisgIHRyZWF0ZWQga2V5d29yZCBhcmd1bWVudHMgY2FsbGVkICdzZWxmJyBvciAnb3RoZXInIHNwZWNpYWxseS4KKworLSBJc3N1ZSAjNzgzNTogc2hlbHZlIHNob3VsZCBubyBsb25nZXIgcHJvZHVjZSBteXN0ZXJpb3VzIHdhcm5pbmdzIGR1cmluZworICBpbnRlcnByZXRlciBzaHV0ZG93bi4KKworLSBJc3N1ZSAjMjc0NjogRG9uJ3QgZXNjYXBlIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzICgiJiIsICI8IiwgIj4iKSBpbgorICBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYW5kIGNvbW1lbnRzLiAgVGhlc2UgcmF3IGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQKKyAgYnkgdGhlIFhNTCBzcGVjaWZpY2F0aW9uLCBhbmQgYXJlIG5lY2Vzc2FyeSB3aGVuIG91dHB1dHRpbmcgZS5nLiAgUEhQIGNvZGUgaW4KKyAgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAgUGF0Y2ggYnkgTmVpbCBNdWxsZXIuCisKKy0gSXNzdWUgIzc4Njk6IGxvZ2dpbmc6IEltcHJvdmVkIGRpYWdub3N0aWMgZm9yIGZvcm1hdC10aW1lIGVycm9ycy4KKworLSBJc3N1ZSAjNzg2ODogbG9nZ2luZzogQWRkZWQgbG9nZ2VyQ2xhc3MgYXR0cmlidXRlIHRvIE1hbmFnZXIuCisKKy0gSXNzdWUgIzc4NTE6IGxvZ2dpbmc6IENsYXJpZmljYXRpb24gb24gbG9nZ2luZyBjb25maWd1cmF0aW9uIGZpbGVzLgorCistIElzc3VlICM0NzcyOiBSYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBhbiB1bmtub3duIEJsdWV0b290aCBwcm90b2NvbCBpcworICBzcGVjaWZpZWQsIHJhdGhlciB0aGFuIGZhbGwgdGhyb3VnaCB0byBBRl9QQUNLRVQgKGluIHRoZSBgYHNvY2tldGBgIG1vZHVsZSkuCisgIEFsc28sIHJhaXNlIFZhbHVlRXJyb3IgcmF0aGVyIHRoYW4gVHlwZUVycm9yIHdoZW4gYW4gdW5rbm93biBUSVBDIGFkZHJlc3MKKyAgdHlwZSBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBCcmlhbiBDdXJ0aW4uCisKKy0gbG9nZ2luZzogSW1wbGVtZW50ZWQgUEVQIDM5MS4KKworLSBJc3N1ZSAjNjkzOTogRml4IGZpbGUgSS9PIG9iamVjdHMgaW4gdGhlIGBpb2AgbW9kdWxlIHRvIGtlZXAgdGhlIG9yaWdpbmFsCisgIGZpbGUgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGB0cnVuY2F0ZSgpYC4gIEl0IHdvdWxkIHByZXZpb3VzbHkgY2hhbmdlIHRoZSBmaWxlCisgIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBhcmd1bWVudCwgd2hpY2ggZ29lcyBhZ2FpbnN0IHRoZSB0cmFkaXRpb24gb2YKKyAgZnRydW5jYXRlKCkgYW5kIG90aGVyIHRydW5jYXRpb24gQVBJcy4gIFBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgorCistIElzc3VlICM3NjEwOiBSZXdvcmtlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgYGB6aXBmaWxlLlppcEV4dEZpbGVgYAorICBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBmaWxlcyBzdG9yZWQgaW5zaWRlIGFuIGFyY2hpdmUuICBUaGUgbmV3CisgIGltcGxlbWVudGF0aW9uIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIGFuZCBjYW4gYmUgd3JhcHBlZCBpbiBhCisgIGBgaW8uQnVmZmVyZWRSZWFkZXJgYCBvYmplY3QgZm9yIG1vcmUgc3BlZWR1cHMuICBJdCBhbHNvIHNvbHZlcyBhbiBpc3N1ZQorICB3aGVyZSBpbnRlcmxlYXZlZCBjYWxscyB0byBgYHJlYWQoKWBgIGFuZCBgYHJlYWRsaW5lKClgYCBnaXZlIHdyb25nIHJlc3VsdHMuCisgIFBhdGNoIGJ5IE5pciBBaWRlcy4KKworLSBJc3N1ZSAjNzc5MjogUmVnaXN0ZXJpbmcgbm9uLWNsYXNzZXMgdG8gQUJDcyByYWlzZWQgYW4gb2JzY3VyZSBlcnJvci4KKworLSBSZW1vdmVkIHRoZSBkZXByZWNhdGVkIGZ1bmN0aW9ucyBgYHZlcmlmeSgpYGAgYW5kIGBgdmVyZXEoKWBgIGZyb20KKyAgTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5LgorCistIElzc3VlICM3NzczOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gYGBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKWBgCisgIHdoZW4gdGhlIHJlbGVhc2UgZmlsZSBpcyBlbXB0eS4KKworLSBJc3N1ZSAjNzc0ODogU2luY2UgdW5pY29kZSB2YWx1ZXMgYXJlIHN1cHBvcnRlZCBmb3Igc29tZSBtZXRhZGF0YSBvcHRpb25zIGluCisgIERpc3R1dGlscywgdGhlIERpc3RyaWJ1dGlvbk1ldGFkYXRhIGdldF8qIG1ldGhvZHMgd2lsbCBub3cgcmV0dXJuIGFuIHV0Zi04CisgIGVuY29kZWQgc3RyaW5nIGZvciB0aGVtLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHVwbG9hZCBhbmQgcmVnaXN0ZXIgY29tbWFuZHMKKyAgc2VuZCB0aGUgY29ycmVjdCB2YWx1ZXMgdG8gUHlQSSB3aXRob3V0IGFueSBlcnJvci4KKworLSBJc3N1ZSAjMTY3MDc2NTogUHJldmVudCBgYGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3JgYCBmcm9tIHJlLXdyYXBwaW5nCisgIGhlYWRlcnMgaW4gbXVsdGlwYXJ0L3NpZ25lZCBNSU1FIHBhcnRzLCB3aGljaCBmaXhlcyBvbmUgb2YgdGhlIHNvdXJjZXMgb2YKKyAgaW52YWxpZCBtb2RpZmljYXRpb25zIHRvIHN1Y2ggcGFydHMgYnkgR2VuZXJhdG9yLgorCistIElzc3VlICM3NzAxOiBGaXggY3Jhc2ggaW4gYGBiaW5hc2NpaS5iMmFfdXUoKWBgIGluIGRlYnVnIG1vZGUgd2hlbiBnaXZlbiBhCisgIDEtYnl0ZSBhcmd1bWVudC4gIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMzMjk5OiBGaXggcG9zc2libGUgY3Jhc2ggaW4gdGhlIF9zcmUgbW9kdWxlIHdoZW4gZ2l2ZW4gYmFkIGFyZ3VtZW50CisgIHZhbHVlcyBpbiBkZWJ1ZyBtb2RlLiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzc3MDM6IEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IGJ1ZmZlciBBUEkgdG8gZnVuY3Rpb25zIG9mIHRoZSBiaW5hc2NpaQorICBtb2R1bGUuICBCYWNrcG9ydGVkIGZyb20gcHkzayBieSBGbG9yZW50IFhpY2x1bmEsIHdpdGggc29tZSBhZGRpdGlvbmFsIHRlc3RzLgorCistIElzc3VlICMyODQ2OiBBZGQgc3VwcG9ydCBmb3IgZ3ppcC5HemlwRmlsZSByZWFkaW5nIHplcm8tcGFkZGVkIGZpbGVzLiAgUGF0Y2gKKyAgYnkgQnJpYW4gQ3VydGluLgorCistIElzc3VlICM1ODI3OiBNYWtlIHN1cmUgdGhhdCBub3JtcGF0aCBwcmVzZXJ2ZXMgdW5pY29kZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgTWF0dCBHaXVjYS4KKworLSBJc3N1ZSAjNTM3MjogRHJvcCB0aGUgcmV1c2Ugb2YgLm8gZmlsZXMgaW4gRGlzdHV0aWxzJyBjY29tcGlsZXIgKHNpbmNlCisgIEV4dGVuc2lvbiBleHRyYSBvcHRpb25zIG1heSBjaGFuZ2UgdGhlIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSAuYyBmaWxlKS4KKyAgSW5pdGlhbCBwYXRjaCBieSBDb2xsaW4gV2ludGVyLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBFeHBhdDogRml4IERvUyB2aWEgWE1MIGRvY3VtZW50IHdpdGggbWFsZm9ybWVkIFVURi04IHNlcXVlbmNlcworICAoQ1ZFXzIwMDlfMzU2MCkuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICM3NjMyOiBXaGVuIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUiBpcyBkZWZpbmVkLCBkaXNhYmxlIHRoZSBwcml2YXRlCisgIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBpbiBkdG9hLmMgYW5kIHVzZSBQeU1lbV9NYWxsb2MgYW5kIFB5TWVtX0ZyZWUKKyAgaW5zdGVhZC4gIEFsc28gZGlzYWJsZSBjYWNoaW5nIG9mIHBvd2VycyBvZiA1LgorCistIElzc3VlICM3NjU4OiBFbnN1cmUgdGhhdCB0aGUgbmV3IHB5dGhvbncgZXhlY3V0YWJsZSB3b3JrcyBvbiBPU1ggMTAuNAorCistIElzc3VlICM3NzE0OiBVc2UgYGBnY2MgLWR1bXB2ZXJzaW9uYGAgdG8gZGV0ZWN0IHRoZSB2ZXJzaW9uIG9mIEdDQyBvbgorICBNYWNPU1guCisKIC0gSXNzdWUgIzc2NjE6IEFsbG93IGN0eXBlcyB0byBiZSBidWlsdCBmcm9tIGEgbm9uLUFTQ0lJIGRpcmVjdG9yeSBwYXRoLgogICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCiAKLS0gSXNzdWUgIzc1ODk6IE9ubHkgYnVpbGQgdGhlIG5pcyBtb2R1bGUgd2hlbiB0aGUgY29ycmVjdCBoZWFkZXIgZmlsZXMgYXJlCi0gIGZvdW5kLgorVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCiAKLS0gU3dpdGNoIHRvIE9wZW5TU0wgMC45LjhsIG9uIFdpbmRvd3MuCistIGlvYmVuY2ggKGEgZmlsZSBJL08gYmVuY2htYXJrKSBhbmQgY2NiZW5jaCAoYSBjb25jdXJyZW5jeSBiZW5jaG1hcmspIHdlcmUKKyAgYWRkZWQgdG8gdGhlIGBgVG9vbHNgYCBkaXJlY3RvcnkuICBUaGV5IHdlcmUgcHJldmlvdXNseSBsaXZpbmcgaW4gdGhlCisgIHNhbmRib3guCiAKLS0gSXNzdWUgIzY2MDM6IENoYW5nZSBSRUFEX1RJTUVTVEFNUCBtYWNybyBpbiBjZXZhbC5jIHNvIHRoYXQgaXQKLSAgY29tcGlsZXMgY29ycmVjdGx5IHVuZGVyIGdjYyBvbiB4ODYtNjQuICBUaGlzIGZpeGVzIGEgcmVwb3J0ZWQKLSAgcHJvYmxlbSB3aXRoIHRoZSAtLXdpdGgtdHNjIGJ1aWxkIG9uIHg4Ni02NC4KK1Rlc3RzCistLS0tLQogCi0tIEVuc3VyZSB0aGF0IGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGV4dGVuc2lvbnMgZm9yIHRoZSBkZWZhdWx0Ci0gIGJpbmFyeSBkaXN0cmlidXRpb24gb24gT1NYIDEwLjYgZXZlbiB3aGVuIHRoZSB1c2VyIGRvZXMgbm90Ci0gIGhhdmUgdGhlIDEwLjR1IFNESyBpbnN0YWxsZWQuCi0KLS0gSXNzdWUgIzc1NDE6IHdoZW4gdXNpbmcgYGBweXRob24tY29uZmlnYGAgd2l0aCBhIGZyYW1ld29yayBpbnN0YWxsIHRoZQotICBjb21waWxlciBtaWdodCB1c2UgdGhlIHdyb25nIGxpYnJhcnkuCistIGlzc3VlICM3NzI4OiB0ZXN0X3RpbWVvdXQgd2FzIGNoYW5nZWQgdG8gdXNlIGBgdGVzdF9zdXBwb3J0LmJpbmRfcG9ydCgpYGAKKyAgaW5zdGVhZCBvZiBhIGhhcmQgY29kZWQgcG9ydC4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi0tIFVwZGF0aW5nIGBVc2luZyBQeXRob25gIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBkZXNjcmlwdGlvbiBvZiBDUHl0aG9uJ3MKLSAgLUosIC1VIGFuZCAtWCBvcHRpb25zLgorLSBVcGRhdGVkICJVc2luZyBQeXRob24iIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBkZXNjcmlwdGlvbiBvZiBDUHl0aG9uJ3MgLUosCisgIC1VIGFuZCAtWCBvcHRpb25zLgogCi0tIFVwZGF0ZSBweXRob24gbWFudWFsIHBhZ2UgKG9wdGlvbnMgLUIsIC1PMCwgLXMsIGVudmlyb25tZW50IHZhcmlhYmxlcworLSBVcGRhdGVkIFB5dGhvbiBtYW51YWwgcGFnZSAob3B0aW9ucyAtQiwgLU8wLCAtcywgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgIFBZVEhPTkRPTlRXUklURUJZVEVDT0RFLCBQWVRIT05OT1VTRVJTSVRFKS4KIAorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcgYWxwaGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMDEwLTAxLTA5KgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBUaGUgYGBfX2NvbXBsZXhfXygpYGAgbWV0aG9kIGlzIG5vdyBsb29rZWQgdXAgb24gdGhlIGNsYXNzIG9mIGluc3RhbmNlcyB0bworICBtYWtlIGl0IGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzcGVjaWFsIG1ldGhvZHMuCisKKy0gSXNzdWUgIzc0NjI6IEltcGxlbWVudCB0aGUgc3RyaW5nbGliIGZhc3Qgc2VhcmNoIGFsZ29yaXRobSBmb3IgdGhlIGByZmluZGAsCisgIGByaW5kZXhgLCBgcnNwbGl0YCBhbmQgYHJwYXJ0aXRpb25gIG1ldGhvZHMuICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzUwODA6IEEgbnVtYmVyIG9mIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyBwcmV2aW91c2x5IHByb2R1Y2VkIGEKKyAgRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gcGFzc2VkIGEgZmxvYXQgYXJndW1lbnQgd2hlcmUgYW4gaW50ZWdlciB3YXMgZXhwZWN0ZWQuCisgIFRoZXNlIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyBub3cgcmFpc2UgVHlwZUVycm9yIGluc3RlYWQuICBUaGUgbWFqb3JpdHkgb2YgdGhlCisgIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UgYXJlIGluIHRoZSBleHRlbnNpb24gbW9kdWxlcywgYnV0IHNvbWUgY29yZSBmdW5jdGlvbnMKKyAgYW5kIG1ldGhvZHMgYXJlIGFmZmVjdGVkOiBub3RhYmx5IHRoZSAnY2hyJywgJ3JhbmdlJyBhbmQgJ3hyYW5nZScgYnVpbHRpbnMsCisgIGFuZCBtYW55IHVuaWNvZGUvc3RyIG1ldGhvZHMuCisKKy0gSXNzdWUgIzc2MDQ6IERlbGV0aW5nIGFuIHVuc2V0IHNsb3R0ZWQgYXR0cmlidXRlIGRpZCBub3QgcmFpc2UgYW4KKyAgQXR0cmlidXRlRXJyb3IuCisKKy0gSXNzdWUgIzc1MzQ6IEZpeCBoYW5kbGluZyBvZiBJRUVFIHNwZWNpYWxzIChpbmZpbml0aWVzLCBuYW5zLCBuZWdhdGl2ZSB6ZXJvKQorICBpbiAqKiBvcGVyYXRvci4gIFRoZSBiZWhhdmlvdXIgbm93IGNvbmZvcm1zIHRvIHRoYXQgZGVzY3JpYmVkIGluIEM5OSBBbm5leCBGLgorCistIElzc3VlICM3NTc5OiBUaGUgbXN2Y3J0IG1vZHVsZSBub3cgaGFzIGRvY3N0cmluZ3MgZm9yIGFsbCBpdHMgZnVuY3Rpb25zLgorCistIElzc3VlICM3NDEzOiBQYXNzaW5nICdcMCcgYXMgdGhlIHNlcGFyYXRvciB0byBkYXRldGltZS5kYXRldGltZS5pc29mb3JtYXQoKQorICB1c2VkIHRvIGRyb3AgdGhlIHRpbWUgcGFydCBvZiB0aGUgcmVzdWx0LgorCistIElzc3VlICMxODExOiBJbXByb3ZlIGFjY3VyYWN5IGFuZCBjcm9zcy1wbGF0Zm9ybSBjb25zaXN0ZW5jeSBmb3IgdHJ1ZSBkaXZpc2lvbgorICBvZiBpbnRlZ2VyczogdGhlIHJlc3VsdCBvZiBhL2IgaXMgbm93IGNvcnJlY3RseSByb3VuZGVkIGZvciBpbnRzIGEgYW5kIGIgKGF0CisgIGxlYXN0IG9uIElFRUUgNzU0IHBsYXRmb3JtcyksIGFuZCBpbiBwYXJ0aWN1bGFyIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUKKyAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBsb25nLgorCistIElzc3VlICM2MTA4OiBgYHVuaWNvZGUoZXhjZXB0aW9uKWBgIGFuZCBgYHN0cihleGNlcHRpb24pYGAgc2hvdWxkIHJldHVybiB0aGUKKyAgc2FtZSBtZXNzYWdlIHdoZW4gb25seSBgYF9fc3RyX18oKWBgIChhbmQgbm90IGBgX191bmljb2RlX18oKWBgKSBpcyBvdmVycmlkZGVuCisgIGluIHRoZSBzdWJjbGFzcy4KKworLSBJc3N1ZSAjNjgzNDogUmVwbGFjZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSAncHl0aG9uJyBhbmQgJ3B5dGhvbncnCisgIGV4ZWN1dGFibGVzIG9uIE9TWC4KKworICBUaGVzZSBleGVjdXRhYmxlcyBub3cgd29yayBwcm9wZXJseSB3aXRoIHRoZSBhcmNoKDEpIGNvbW1hbmQ6IGBgYXJjaCAtcHBjCisgIHB5dGhvbmBgIHdpbGwgc3RhcnQgYSB1bml2ZXJzYWwgYmluYXJ5IHZlcnNpb24gb2YgcHl0aG9uIGluIFBQQyBtb2RlICh1bmxpa2UKKyAgcHJldmlvdXMgcmVsZWFzZXMpLgorCistIElzc3VlICMxNjgwMTU5OiBVbmljb2RlIGNvZXJjaW9uIGR1cmluZyBhbiAnaW4nIG9wZXJhdGlvbiBubyBsb25nZXIgbWFza3MgdGhlCisgIHVuZGVybHlpbmcgZXJyb3Igd2hlbiB0aGUgY29lcmNpb24gZmFpbHMgZm9yIHRoZSBsZWZ0IGhhbmQgb3BlcmFuZC4KKworLSBJc3N1ZSAjNzQ5MTogTWV0YWNsYXNzJ3MgX19jbXBfXyBtZXRob2Qgd2FzIGlnbm9yZWQuCisKKy0gSXNzdWUgIzc0NjY6IFNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyBjYWxsZWQgaW4gdGhlCisgIG1pZGRsZSBvZiBwb3B1bGF0aW5nIGEgdHVwbGUuICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM2OTYzOiBBZGRlZCAibWF4dGFza3NwZXJjaGlsZCIgYXJndW1lbnQgdG8gYGBtdWx0aXByb2Nlc3NpbmcuUG9vbGBgLAorICBhbGxvd2luZyBmb3IgYSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyB3aXRoaW4gdGhlIHBvb2wgdG8gYmUgY29tcGxldGVkIGJ5IHRoZQorICB3b3JrZXIgYmVmb3JlIHRoYXQgd29ya2VyIGlzIHRlcm1pbmF0ZWQsIGFuZCBhIG5ldyBvbmUgY3JlYXRlZCB0byByZXBsYWNlIGl0LgorCistIElzc3VlICM3NjE3OiBNYWtlIHN1cmUgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIuVW5peENDb21waWxlciByZWNvZ25pemVzIGdjYworICB3aGVuIGl0IGhhcyBhIGZ1bGx5IHF1YWxpZmllZCBjb25maWd1cmF0aW9uIHByZWZpeC4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgQXJmcmV2ZXIuCisKKy0gSXNzdWUgIzcwOTI6IFJlbW92ZSBweTNrIHdhcm5pbmcgd2hlbiBpbXBvcnRpbmcgY1BpY2tsZS4gIDJ0bzMgaGFuZGxlcworICByZW5hbWluZyBvZiBgY1BpY2tsZWAgdG8gYHBpY2tsZWAuICBUaGUgd2FybmluZyB3YXMgYW5ub3lpbmcgc2luY2UgdGhlcmUncyBubworICBhbHRlcm5hdGl2ZSB0byBjUGlja2xlIGlmIHlvdSBjYXJlIGFib3V0IHBlcmZvcm1hbmNlLiAgUGF0Y2ggYnkgRmxvcmVudAorICBYaWNsdW5hLgorCistIElzc3VlICM3NDU1OiBGaXggcG9zc2libGUgY3Jhc2ggaW4gY1BpY2tsZSBvbiBpbnZhbGlkIGlucHV0LiAgUGF0Y2ggYnkgVmljdG9yCisgIFN0aW5uZXIuCisKKy0gSXNzdWUgIzcwOTI6IEZpeCB0aGUgRGVwcmVjYXRpb25XYXJuaW5ncyBlbWl0dGVkIGJ5IHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHdoZW4KKyAgdXNpbmcgdGhlIC0zIGZsYWcuICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzc0NzE6IEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIEd6aXBGaWxlJ3MgYnVmZmVyaW5nIG1lY2hhbmlzbSwgYW5kCisgIG1ha2UgaXQgaW1wbGVtZW50IHRoZSBgYGlvLkJ1ZmZlcmVkSU9CYXNlYGAgQUJDIHRvIGFsbG93IGZvciBmdXJ0aGVyIHNwZWVkdXBzCisgIGJ5IHdyYXBwaW5nIGl0IGluIGFuIGBgaW8uQnVmZmVyZWRSZWFkZXJgYC4gIFBhdGNoIGJ5IE5pciBBaWRlcy4KKworLSBJc3N1ZSAjMzk3MjogYGBodHRwbGliLkhUVFBDb25uZWN0aW9uYGAgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgc291cmNlX2FkZHJlc3MKKyAgcGFyYW1ldGVyIHRvIGFsbG93IHNwZWNpZnlpbmcgd2hlcmUgeW91ciBjb25uZWN0aW9ucyBjb21lIGZyb20uCisKKy0gYGBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKWBgIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsIHNvdXJjZV9hZGRyZXNzCisgIHBhcmFtZXRlci4KKworLSBJc3N1ZSAjNTUxMTogYGB6aXBmaWxlLlppcEZpbGVgYCBjYW4gbm93IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCisgIEluaXRpYWwgcGF0Y2ggYnkgQnJpYW4gQ3VydGluLgorCistIERpc3R1dGlscyBub3cgY29ycmVjdGx5IGlkZW50aWZpZXMgdGhlIGJ1aWxkIGFyY2hpdGVjdHVyZSBhcyAieDg2XzY0IiB3aGVuCisgIGJ1aWxkaW5nIG9uIE9TWCAxMC42IHdpdGhvdXQgIi1hcmNoIiBmbGFncy4KKworLSBJc3N1ZSAjNzU1NjogRGlzdHV0aWxzJyBtc3ZjOWNvbXBpbGVyIG5vdyBvcGVucyB0aGUgTVNWQyBNYW5pZmVzdCBmaWxlIGluIHRleHQKKyAgbW9kZS4KKworLSBJc3N1ZSAjNzU1MjogUmVtb3ZlZCBsaW5lIGZlZWQgaW4gdGhlIGJhc2U2NCBBdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUKKyAgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kIHRvIGF2b2lkIGFuIGVycm9yIHdoZW4gUHlQSSByZWFkcyBpdC4gIFRoaXMgb2NjdXJzIG9uCisgIGxvbmcgcGFzc3dvcmRzLiAgSW5pdGlhbCBwYXRjaCBieSBKUCBTdC4gUGllcnJlLgorCistIElzc3VlICM3MjMxOiB1cmxsaWIyIGNhbm5vdCBoYW5kbGUgaHR0cHMgd2l0aCBwcm94eSByZXF1aXJpbmcgYXV0aC4gIFBhdGNoIGJ5CisgIFRhdHN1aGlybyBUc3VqaWthd2EuCisKKy0gSXNzdWUgIzczNDk6IE1ha2UgbWV0aG9kcyBvZiBmaWxlIG9iamVjdHMgaW4gdGhlIGlvIG1vZHVsZSBhY2NlcHQgTm9uZSBhcyBhbgorICBhcmd1bWVudCB3aGVyZSBmaWxlLWxpa2Ugb2JqZWN0cyAoaWUgU3RyaW5nSU8gYW5kIEJ5dGVzSU8pIGFjY2VwdCB0aGVtIHRvIG1lYW4KKyAgdGhlIHNhbWUgYXMgcGFzc2luZyBubyBhcmd1bWVudC4KKworLSBJc3N1ZSAjNzM0ODogYGBTdHJpbmdJTy5TdHJpbmdJTy5yZWFkbGluZSgtMSlgYCBub3cgYWN0cyBhcyBpZiBpdCBnb3Qgbm8KKyAgYXJndW1lbnQgbGlrZSBvdGhlciBmaWxlIG9iamVjdHMuCisKKy0gSXNzdWUgIzczNTc6IHRhcmZpbGUgbm8gbG9uZ2VyIHN1cHByZXNzZXMgZmF0YWwgZXh0cmFjdGlvbiBlcnJvcnMgYnkgZGVmYXVsdC4KKworLSBJc3N1ZSAjNzQ3MDogbG9nZ2luZzogRml4IGJ1ZyBpbiBVbmljb2RlIGVuY29kaW5nIGZhbGxiYWNrLgorCistIElzc3VlICM1OTQ5OiBGaXhlZCBJTUFQNF9TU0wgaGFuZyB3aGVuIHRoZSBJTUFQIHNlcnZlciByZXNwb25zZSBpcyBtaXNzaW5nCisgIHByb3BlciBlbmQtb2YtbGluZSB0ZXJtaW5hdGlvbi4KKworLSBJc3N1ZSAjNzQ1NzogQWRkZWQgYSByZWFkX3BrZ19maWxlIG1ldGhvZCB0bworICBgYGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhYGAuCisKKy0gSXNzdWUgIzM3NDU6IFVuZG8gdGhlIDIuN2ExIGNoYW5nZSB0byBoYXZlIGhhc2hsaWIgdG8gcmVqZWN0IHVuaWNvZGUgYW5kIG5vbgorICBidWZmZXIgQVBJIHN1cHBvcnRpbmcgb2JqZWN0cyBhcyBpbnB1dC4gIFRoYXQgYmVoYXZpb3IgaXMgZm9yIDMueCBvbmx5LgorCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjNzc2NzogTmV3IGZ1bmN0aW9uIGBgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdygpYGAgYWRkZWQsIGFuYWxvZ291cworICB0byBgYFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpYGAuCisKKy0gSXNzdWUgIzUwODA6IFRoZSBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9ucyBgYFB5QXJnX1BhcnNlVHVwbGUoKWBgLAorICBgYFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcygpYGAsIGBgUHlBcmdfVmFQYXJzZSgpYGAsCisgIGBgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMoKWBgIGFuZCBgYFB5QXJnX1BhcnNlKClgYCBubyBsb25nZXIgYWNjZXB0CisgIGZsb2F0IGFyZ3VtZW50cyBmb3IgaW50ZWdlciBmb3JtYXQgY29kZXMgKG90aGVyIHRoYW4gJ0wnKTogcHJldmlvdXNseSBhbgorICBhdHRlbXB0IHRvIHBhc3MgYSBmbG9hdCByZXN1bHRlZCBpbiBhIERlcHJlY2F0aW9uV2FybmluZzsgbm93IGl0IGdpdmVzIGEKKyAgVHlwZUVycm9yLiAgRm9yIHRoZSAnTCcgZm9ybWF0IGNvZGUgKHdoaWNoIHByZXZpb3VzbHkgaGFkIG5vIHdhcm5pbmcpIHRoZXJlIGlzCisgIG5vdyBhIERlcHJlY2F0aW9uV2FybmluZy4KKworLSBJc3N1ZSAjNzAzMzogRnVuY3Rpb24gYGBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jKClgYCBhZGRlZC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzY0OTE6IEFsbG93IC0td2l0aC1kYm1saWJvcmRlciB0byBzcGVjaWZ5IHRoYXQgbm8gZGJtcyB3aWxsIGJlIGJ1aWx0LgorCistIElzc3VlICM2OTQzOiBVc2UgcGtnLWNvbmZpZyB0byBmaW5kIHRoZSBsaWJmZmkgaGVhZGVycyB3aGVuIHRoZQorICBgYC0td2l0aC1zeXN0ZW0tZmZpYGAgZmxhZyBpcyB1c2VkLgorCistIElzc3VlICM3NjA5OiBBZGQgYSBgYC0td2l0aC1zeXN0ZW0tZXhwYXRgYCBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIHN5c3RlbSdzCisgIGV4cGF0IGxpYnJhcnkgdG8gYmUgdXNlZCBmb3IgdGhlIHB5ZXhwYXQgbW9kdWxlIGluc3RlYWQgb2YgdGhlIG9uZSBpbmNsdWRlZAorICB3aXRoIFB5dGhvbi4KKworLSBJc3N1ZSAjNzU4OTogT25seSBidWlsZCB0aGUgbmlzIG1vZHVsZSB3aGVuIHRoZSBjb3JyZWN0IGhlYWRlciBmaWxlcyBhcmUKKyAgZm91bmQuCisKKy0gU3dpdGNoIHRvIE9wZW5TU0wgMC45LjhsIGFuZCBzcWxpdGUgMy42LjIxIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzc1NDE6IHdoZW4gdXNpbmcgYGBweXRob24tY29uZmlnYGAgd2l0aCBhIGZyYW1ld29yayBpbnN0YWxsIHRoZQorICBjb21waWxlciBtaWdodCB1c2UgdGhlIHdyb25nIGxpYnJhcnkuCisKIFRlc3RzCiAtLS0tLQogCi0tIGlzc3VlICM3NzI4OiB0ZXN0X3RpbWVvdXQgd2FzIGNoYW5nZWQgdG8gdXNlIHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQKLSAgaW5zdGVhZCBvZiBhIGhhcmQgY29kZWQgcG9ydC4KKy0gSXNzdWUgIzczNzY6IEluc3RlYWQgb2YgcnVubmluZyBhIHNlbGYtdGVzdCAod2hpY2ggd2FzIGZhaWxpbmcpIHdoZW4gY2FsbGVkCisgIHdpdGggbm8gYXJndW1lbnRzLCBkb2N0ZXN0LnB5IG5vdyBnaXZlcyBhIHVzYWdlIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzczOTY6IEZpeCByZWdydGVzdCAtcywgd2hpY2ggd2FzIGJyb2tlbiBieSB0aGUgLWogZW5oYW5jZW1lbnQuCiAKIC0gSXNzdWUgIzc0OTg6IHRlc3RfbXVsdGlwcm9jZXNzaW5nIG5vdyB1c2VzIHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0CiAgIGluc3RlYWQgb2YgYSBoYXJkY29kZWQgcG9ydCBudW1iZXIgaW4gdGVzdF9yYXBpZF9yZXN0YXJ0LgogCi0tIElzc3VlICM3NDMxOiB1c2UgVEVTVEZOIGluIHRlc3RfbGluZWNhY2hlIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNyZWF0ZSBhCi0gIGZpbGUgaW4gdGhlIExpYi90ZXN0IGRpcmVjdG9yeSwgd2hpY2ggbWlnaHQgYmUgcmVhZC1vbmx5IGZvciB0aGUKLSAgdXNlciBydW5uaW5nIHRoZSB0ZXN0cy4KIAotLSBJc3N1ZSAjNzMyNDogYWRkIGEgc2FuaXR5IGNoZWNrIHRvIHJlZ3J0ZXN0IGFyZ3VtZW50IHBhcnNpbmcgdG8KLSAgY2F0Y2ggdGhlIGNhc2Ugb2YgYW4gb3B0aW9uIHdpdGggbm8gaGFuZGxlci4KK1doYXQncyBOZXcgaW4gUHl0aG9uIDIuNyBhbHBoYSAxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0tIElzc3VlICM3Mjk1OiBEbyBub3QgdXNlIGEgaGFyZGNvZGVkIGZpbGUgbmFtZSBpbiB0ZXN0X3RhcmZpbGUuCi0KLS0gSXNzdWUgIzcyNzA6IEFkZCBzb21lIGRlZGljYXRlZCB1bml0IHRlc3RzIGZvciBtdWx0aS10aHJlYWQgc3luY2hyb25pemF0aW9uCi0gIHByaW1pdGl2ZXMgc3VjaCBhcyBMb2NrLCBSTG9jaywgQ29uZGl0aW9uLCBFdmVudCBhbmQgU2VtYXBob3JlLgotCi0tIElzc3VlICM3MDU1OiB0ZXN0X19fYWxsX18gbm93IGdyZWVkaWx5IGRldGVjdHMgYWxsIG1vZHVsZXMgd2hpY2ggaGF2ZSBhbgotICBfX2FsbF9fIGF0dHJpYnV0ZSwgcmF0aGVyIHRoYW4gdXNpbmcgYSBoYXJkY29kZWQgYW5kIGluY29tcGxldGUgbGlzdC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNCBmaW5hbD8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNS1PY3QtMjAwOSoKKypSZWxlYXNlIGRhdGU6IDIwMDktMTItMDUqCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICM3NDE5OiBgYGxvY2FsZS5zZXRsb2NhbGUoKWBgIGNvdWxkIGNyYXNoIHRoZSBpbnRlcnByZXRlciBvbiBXaW5kb3dzCisgIHdoZW4gY2FsbGVkIHdpdGggaW52YWxpZCB2YWx1ZXMuCiAKKy0gSXNzdWUgIzMzODI6ICdGJyBmb3JtYXR0aW5nIGZvciBmbG9hdCBhbmQgY29tcGxleCBub3cgY29udmVydCB0aGUgcmVzdWx0IHRvCisgIHVwcGVyIGNhc2UuICBUaGlzIG9ubHkgYWZmZWN0cyAnaW5mJyBhbmQgJ25hbicsIHNpbmNlICdmJyBubyBsb25nZXIgY29udmVydHMKKyAgdG8gJ2cnIGZvciBsYXJnZSB2YWx1ZXMuCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi40cmMyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIFJlbW92ZSBzd2l0Y2ggZnJvbSAiJWYiIGZvcm1hdHRpbmcgdG8gIiVnIiBmb3JtYXR0aW5nIGZvciBmbG9hdHMgbGFyZ2VyIHRoYW4KKyAgMWU1MCBpbiBhYnNvbHV0ZSB2YWx1ZS4KIAotKlJlbGVhc2UgZGF0ZTogMTgtT2N0LTIwMDkqCistIFJlbW92ZSByZXN0cmljdGlvbnMgb24gcHJlY2lzaW9uIHdoZW4gZm9ybWF0dGluZyBmbG9hdHMuICBFLmcuLCAiJS4xMjBnIiAlCisgIDFlLTEwMCB1c2VkIHRvIHJhaXNlIE92ZXJmbG93RXJyb3IsIGJ1dCBub3cgZ2l2ZXMgdGhlIHJlcXVlc3RlZCAxMjAKKyAgc2lnbmlmaWNhbnQgZGlnaXRzIGluc3RlYWQuCiAKLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQorLSBBZGQgUHkzayB3YXJuaW5ncyBmb3IgcGFyYW1ldGVyIG5hbWVzIGluIHBhcmVudGhlc2VzLgogCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICM3MzYyOiBHaXZlIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgZm9yIGBgZGVmIGYoKHgpPTMpOiBwYXNzYGAuCiAKLS0gSXNzdWUgIzcxMTU6IEZpeGVkIHRoZSBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyB0aGF0IGlzIGZhaWxpbmcgd2hlbiB1c2luZwotICBwYXRocyBpbiB0aGUgZXh0ZW5zaW9uIG5hbWUgaW5zdGVhZCBvZiBkb3R0ZWQgbmFtZXMuCistIElzc3VlICM3MDg1OiBGaXggY3Jhc2ggd2hlbiBpbXBvcnRpbmcgc29tZSBleHRlbnNpb25zIGluIGEgdGhyZWFkIG9uIE1hY09TWAorICAxMC42LgogCi0tIElzc3VlICM3MTIwOiBsb2dnaW5nOiBSZW1vdmVkIGltcG9ydCBvZiBtdWx0aXByb2Nlc3Npbmcgd2hpY2ggaXMgY2F1c2luZwotICBjcmFzaCBpbiBHQUUuCistIElzc3VlICM3MTE3OiBgYHJlcHIoeClgYCBmb3IgYSBmbG9hdCB4IHJldHVybnMgYSByZXN1bHQgYmFzZWQgb24gdGhlIHNob3J0ZXN0CisgIGRlY2ltYWwgc3RyaW5nIHRoYXQncyBndWFyYW50ZWVkIHRvIHJvdW5kIGJhY2sgdG8geCB1bmRlciBjb3JyZWN0IHJvdW5kaW5nCisgICh3aXRoIHJvdW5kLWhhbGYtdG8tZXZlbiByb3VuZGluZyBtb2RlKS4gIFByZXZpb3VzbHkgaXQgZ2F2ZSBhIHN0cmluZyBiYXNlZCBvbgorICByb3VuZGluZyB4IHRvIDE3IGRlY2ltYWwgZGlnaXRzLiAgcmVwcih4KSBmb3IgYSBjb21wbGV4IG51bWJlciBiZWhhdmVzCisgIHNpbWlsYXJseS4gIE9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgY29ycmVjdGx5LXJvdW5kZWQgc3RydG9kIGFuZCBkdG9hIGNvZGUgaXMKKyAgbm90IHN1cHBvcnRlZCAoc2VlIGJlbG93KSwgcmVwciBpcyB1bmNoYW5nZWQuCiAKLS0gSXNzdWUgIzcxNDk6IGZpeCBleGNlcHRpb24gaW4gdXJsbGliIHdoZW4gZGV0ZWN0aW5nIHByb3h5IHNldHRpbmdzIG9uIE9TWC4KKy0gSXNzdWUgIzcxMTc6IE9uIGFsbW9zdCBhbGwgcGxhdGZvcm1zOiBmbG9hdC10by1zdHJpbmcgYW5kIHN0cmluZy10by1mbG9hdAorICBjb252ZXJzaW9ucyB3aXRoaW4gUHl0aG9uIGFyZSBub3cgY29ycmVjdGx5IHJvdW5kZWQuICBQbGFjZXMgdGhlc2UgY29udmVyc2lvbnMKKyAgb2NjdXIgaW5jbHVkZTogc3RyIGZvciBmbG9hdHMgYW5kIGNvbXBsZXggbnVtYmVyczsgdGhlIGZsb2F0IGFuZCBjb21wbGV4CisgIGNvbnN0cnVjdG9yczsgb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgbnVtZXJpYyBmb3JtYXR0aW5nOyBzZXJpYWxpemF0aW9uIGFuZAorICBkZXNlcmlhbGl6YXRpb24gb2YgZmxvYXRzIGFuZCBjb21wbGV4IG51bWJlcnMgdXNpbmcgbWFyc2hhbCwgcGlja2xlIGFuZCBqc29uOworICBwYXJzaW5nIG9mIGZsb2F0IGFuZCBpbWFnaW5hcnkgbGl0ZXJhbHMgaW4gUHl0aG9uIGNvZGU7IERlY2ltYWwtdG8tZmxvYXQKKyAgY29udmVyc2lvbi4KIAorICBUaGUgY29udmVyc2lvbnMgdXNlIGEgUHl0aG9uLWFkYXB0ZWQgdmVyc2lvbiBvZiBEYXZpZCBHYXkncyB3ZWxsLWtub3duIGR0b2EuYywKKyAgcHJvdmlkaW5nIGNvcnJlY3RseS1yb3VuZGVkIHN0cnRvZCBhbmQgZHRvYSBDIGZ1bmN0aW9ucy4gIFRoaXMgY29kZSBpcworICBzdXBwb3J0ZWQgb24gV2luZG93cywgYW5kIG9uIFVuaXgtbGlrZSBwbGF0Zm9ybXMgdXNpbmcgZ2NjLCBpY2Mgb3Igc3VuY2MgYXMKKyAgdGhlIEMgY29tcGlsZXIuICBUaGVyZSBtYXkgYmUgYSBzbWFsbCBudW1iZXIgb2YgcGxhdGZvcm1zIG9uIHdoaWNoIGNvcnJlY3QKKyAgb3BlcmF0aW9uIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgZ3VhcmFudGVlZCwgc28gdGhlIGNvZGUgaXMgbm90IHVzZWQ6IG5vdGFibHksCisgIHRoaXMgYXBwbGllcyB0byBwbGF0Zm9ybXMgd2hlcmUgdGhlIEMgZG91YmxlIGZvcm1hdCBpcyBub3QgSUVFRSA3NTQgYmluYXJ5NjQsCisgIGFuZCB0byBwbGF0Zm9ybXMgb24geDg2IGhhcmR3YXJlIHdoZXJlIHRoZSB4ODcgRlBVIGlzIHNldCB0byA2NC1iaXQgcHJlY2lzaW9uCisgIGFuZCBQeXRob24ncyBjb25maWd1cmUgc2NyaXB0IGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgaG93IHRvIGNoYW5nZSB0aGUgRlBVCisgIHByZWNpc2lvbi4gIE9uIHRoZXNlIHBsYXRmb3JtcyBjb252ZXJzaW9ucyB1c2UgdGhlIHBsYXRmb3JtIHN0cnRvZCBhbmQgZHRvYSwKKyAgYXMgYmVmb3JlLgogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuNHJjMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSBJc3N1ZSAjNzExNzogQmFja3BvcnQgcm91bmQgaW1wbGVtZW50YXRpb24gZnJvbSBQeXRob24gMy54LiAgYGByb3VuZCgpYGAgbm93CisgIHVzZXMgdGhlIGNvcnJlY3RseS1yb3VuZGVkIHN0cmluZyA8LT4gZmxvYXQgY29udmVyc2lvbnMgZGVzY3JpYmVkIGFib3ZlICh3aGVuCisgIGF2YWlsYWJsZSksIGFuZCBzbyBwcm9kdWNlcyBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzIHRoYXQgd2lsbCBkaXNwbGF5IG5pY2VseQorICB1bmRlciB0aGUgZmxvYXQgcmVwci4gIFRoZXJlIGFyZSB0d28gcmVsYXRlZCBzbWFsbCBjaGFuZ2VzOiAoMSkgcm91bmQgbm93CisgIGFjY2VwdHMgYW55IGNsYXNzIHdpdGggYW4gYGBfX2luZGV4X18oKWBgIG1ldGhvZCBmb3IgaXRzIHNlY29uZCBhcmd1bWVudCAoYnV0CisgIG5vIGxvbmdlciBhY2NlcHRzIGZsb2F0cyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCksIGFuZCAoMikgYW4gZXhjZXNzaXZlbHkKKyAgbGFyZ2Ugc2Vjb25kIGludGVnZXIgYXJndW1lbnQgKGUuZy4sIGBgcm91bmQoMS4yMzQsIDEwKioxMDApYGApIG5vIGxvbmdlcgorICByYWlzZXMgYW4gZXhjZXB0aW9uLgogCi0qUmVsZWFzZSBkYXRlOiAwNy1PY3QtMjAwOSoKKy0gSXNzdWUgIzE3NTcxMjY6IEZpeCB0aGUgY3lyaWxsaWMtYXNpYW4gYWxpYXMgZm9yIHRoZSBwdGNwMTU0IGVuY29kaW5nLgogCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KKy0gRml4IHNldmVyYWwgaXNzdWVzIHdpdGggYGBjb21waWxlKClgYC4gIFRoZSBpbnB1dCBjYW4gbm93IGNvbnRhaW4gV2luZG93cyBhbmQKKyAgTWFjIG5ld2xpbmVzIGFuZCBpcyBubyBsb25nZXIgcmVxdWlyZWQgdG8gZW5kIGluIGEgbmV3bGluZS4KIAotLSBJc3N1ZSAjNzAxOTogUmFpc2UgVmFsdWVFcnJvciB3aGVuIHVubWFyc2hhbGxpbmcgYmFkIGxvbmcgZGF0YSwgaW5zdGVhZAotICBvZiBwcm9kdWNpbmcgaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgUHl0aG9uIGxvbmdzLgorLSBSZW1vdmUgbGVuZ3RoIGxpbWl0YXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBjb21wbGV4IG51bWJlciBmcm9tIGEgdW5pY29kZQorICBzdHJpbmcuCiAKLUxpYnJhcnkKLS0tLS0tLS0KKy0gSXNzdWUgIzcyNDQ6IGBgaXRlcnRvb2xzLml6aXBfbG9uZ2VzdCgpYGAgbm8gbG9uZ2VyIGlnbm9yZXMgZXhjZXB0aW9ucyByYWlzZWQKKyAgZHVyaW5nIHRoZSBmb3JtYXRpb24gb2YgYW4gb3V0cHV0IHR1cGxlLgogCi0tIElzc3VlICM3MDY4OiBGaXhlZCB0aGUgcGFydGlhbCByZW5hbWluZyB0aGF0IG9jY3VyZWQgaW4gcjcyNTk0LgorLSBJc3N1ZSAjMTA4NzQxODogQm9vc3QgcGVyZm9ybWFuY2Ugb2YgYml0d2lzZSBvcGVyYXRpb25zIGZvciBsb25ncy4KIAotLSBJc3N1ZSAjNzA2NDogRml4ZWQgdGhlIGluY29tcGF0aWJpbGl0eSB3aXRoIFNldHVwdG9vbHMgaW4gZGlzdHV0aWxzCi0gIHdoZW4gcnVubmluZyB0aGUgYnVpbGRfZXh0IGNvbW1hbmQuCistIElzc3VlICMxNzIyMzQ0OiBgYHRocmVhZGluZy5fc2h1dGRvd24oKWBgIGlzIG5vdyBjYWxsZWQgaW4gYGBQeV9GaW5hbGl6ZSgpYGAsCisgIHdoaWNoIGZpeGVzIHRoZSBwcm9ibGVtIG9mIHNvbWUgZXhjZXB0aW9ucyBiZWluZyB0aHJvd24gYXQgc2h1dGRvd24gd2hlbiB0aGUKKyAgaW50ZXJwcmV0ZXIgaXMga2lsbGVkLiAgUGF0Y2ggYnkgQWRhbSBPbHNlbi4KIAotLSBJc3N1ZSAjNzA1MjogUmVtb3ZlZCBub25leGlzdGluZyBOdWxsSGFuZGxlciBmcm9tIGxvZ2dpbmcuX19hbGxfXy4KKy0gSXNzdWUgIzcxNjg6IERvY3VtZW50IGBgUHlGbG9hdF9Bc1N0cmluZygpYGAgYW5kIGBgUHlGbG9hdF9Bc1JlcHJTdHJpbmcoKWBgLAorICBhbmQgbm90ZSB0aGF0IHRoZXkgYXJlIHVuc2FmZSBhbmQgZGVwcmVjYXRlZC4KIAotLSBJc3N1ZSAjNzAzOTogRml4ZWQgZGlzdHV0aWxzLnRlc3RzLnRlc3Rfc3lzY29uZmlnIHdoZW4gcnVubmluZyBvbgotICBpbnN0YWxsYXRpb24gd2l0aCBubyBidWlsZC4KKy0gSXNzdWUgIzcxMjA6IGxvZ2dpbmc6IFJlbW92ZSBpbXBvcnQgb2YgbXVsdGlwcm9jZXNzaW5nIHdoaWNoIGlzIGNhdXNpbmcgY3Jhc2gKKyAgaW4gR0FFLgogCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzcxNDA6IFRoZSBgYF9fZGljdF9fYGAgb2YgYSBtb2R1bGUgc2hvdWxkIG5vdCBiZSBjbGVhcmVkIHVubGVzcyB0aGUKKyAgbW9kdWxlIGlzIHRoZSBvbmx5IG9iamVjdCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGl0LgogCi0tIElzc3VlICM3MDQyOiBGaXggdGVzdF9zaWduYWwgKHRlc3RfaXRpbWVyX3ZpcnR1YWwpIGZhaWx1cmUgb24gT1MgWCAxMC42LgorLSBJc3N1ZSAjMTc1NDA5NDogSW1wcm92ZSB0aGUgc3RhY2sgZGVwdGggY2FsY3VsYXRpb24gaW4gdGhlIGNvbXBpbGVyLiAgVGhlcmUKKyAgc2hvdWxkIGJlIG5vIG90aGVyIGVmZmVjdCB0aGFuIGEgc21hbGwgZGVjcmVhc2UgaW4gbWVtb3J5IHVzZS4gIFBhdGNoIGJ5CisgIENocmlzdG9waGVyIFR1ciBMZXNuaWV3c2tpLUxhYXMuCiAKKy0gSXNzdWUgIzcwODQ6IEZpeCBhICh2ZXJ5IHVubGlrZWx5KSBjcmFzaCB3aGVuIHByaW50aW5nIGEgbGlzdCBmcm9tIG9uZSB0aHJlYWQsCisgIGFuZCBtdXRhdGluZyBpdCBmcm9tIGFub3RoZXIgb25lLiAgUGF0Y2ggYnkgU2NvdHQgRGlhbC4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjMKLT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICMxNTcxMTg0OiBUaGUgVW5pY29kZSBkYXRhYmFzZSBjb250YWlucyBwcm9wZXJ0aWVzIGZvciBtb3JlIGNoYXJhY3RlcnMuCisgIFRoZSB0YWJsZXMgZm9yIGNvZGUgcG9pbnRzIHJlcHJlc2VudGluZyBudW1lcmljIHZhbHVlcywgd2hpdGUgc3BhY2VzIG9yIGxpbmUKKyAgYnJlYWtzIGFyZSBub3cgZ2VuZXJhdGVkIGZyb20gdGhlIG9mZmljaWFsIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGZpbGVzLAorICBhbmQgaW5jbHVkZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBVbmloYW4udHh0IGZpbGUuCiAKLSpSZWxlYXNlIGRhdGU6IDAyLU9jdC0yMDA5KgorLSBJc3N1ZSAjNzA1MDogRml4IGEgU3lzdGVtRXJyb3Igd2hlbiB0cnlpbmcgdG8gdXNlIHVucGFja2luZyBhbmQgYXVnbWVudGVkCisgIGFzc2lnbm1lbnQuCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDIuNi4zcmMxCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLSBJc3N1ZSAjNTMyOTogRml4IGBgb3MucG9wZW4qYGAgcmVncmVzc2lvbiBmcm9tIDIuNSB3aXRoIGNvbW1hbmRzIGFzIGEgc2VxdWVuY2UKKyAgcnVubmluZyB0aHJvdWdoIHRoZSBzaGVsbC4gIFBhdGNoIGJ5IEplYW4tUGF1bCBDYWxkZXJvbmUgYW5kIEphbmkgSGFrYWxhLgogCi0qUmVsZWFzZSBkYXRlOiAyOS1TZXAtMjAwOSoKKy0gSXNzdWUgIzcwMTk6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiB1bm1hcnNoYWxsaW5nIGJhZCBsb25nIGRhdGEsIGluc3RlYWQgb2YKKyAgcHJvZHVjaW5nIGludGVybmFsbHkgaW5jb25zaXN0ZW50IFB5dGhvbiBsb25ncy4KIAotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCistIElzc3VlICM2OTkwOiBGaXggYGB0aHJlYWRpbmcubG9jYWxgYCBzdWJjbGFzc2VzIGxlYXZpbmcgb2xkIHN0YXRlIGFyb3VuZCBhZnRlcgorICBhIHJlZmVyZW5jZSBjeWNsZSBHQyB3aGljaCBjb3VsZCBiZSByZWN5Y2xlZCBieSBuZXcgbG9jYWxzLgogCi0tIElzc3VlICM1MzI5OiBGaXggb3MucG9wZW4qIHJlZ3Jlc3Npb24gZnJvbSAyLjUgd2l0aCBjb21tYW5kcyBhcyBhCi0gIHNlcXVlbmNlIHJ1bm5pbmcgdGhyb3VnaCB0aGUgc2hlbGwuICBQYXRjaCBieSBKZWFuLVBhdWwgQ2FsZGVyb25lCi0gIGFuZCBKYW5pIEhha2FsYS4KKy0gSXNzdWUgIzYzMDA6IHVuaWNvZGUuZW5jb2RlLCB1bmljb2RlLmRlY29kZSwgc3RyLmRlY29kZSwgYW5kIHN0ci5lbmNvZGUgbm93CisgIHRha2Uga2V5d29yZCBhcmd1bWVudHMuCiAKLS0gSXNzdWUgIzY5OTA6IEZpeCB0aHJlYWRpbmcubG9jYWwgc3ViY2xhc3NlcyBsZWF2aW5nIG9sZCBzdGF0ZSBhcm91bmQKLSAgYWZ0ZXIgYSByZWZlcmVuY2UgY3ljbGUgR0Mgd2hpY2ggY291bGQgYmUgcmVjeWNsZWQgYnkgbmV3IGxvY2Fscy4KKy0gSXNzdWUgIzY5MjI6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gdHJ5aW5nIHRvIGRlY29kZSBhbiBpbnZhbGlkIFVURi0zMgorICBzdHJlYW0gd2l0aCBhIG5vbi1yYWlzaW5nIGVycm9yIGhhbmRsZXIgbGlrZSAicmVwbGFjZSIgb3IgImlnbm9yZSIuCiAKLS0gSXNzdWUgIzY5MjI6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gdHJ5aW5nIHRvIGRlY29kZSBhbiBpbnZhbGlkCi0gIFVURi0zMiBzdHJlYW0gd2l0aCBhIG5vbi1yYWlzaW5nIGVycm9yIGhhbmRsZXIgbGlrZSAicmVwbGFjZSIgb3IgImlnbm9yZSIuCistIElzc3VlICM2NzEzOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGJhc2UgMTAgaW50IC0+IHN0cmluZyBhbmQgbG9uZyAtPiBzdHJpbmcKKyAgY29udmVyc2lvbnMuCiAKIC0gSXNzdWUgIzE1OTA4NjQ6IEZpeCBwb3RlbnRpYWwgZGVhZGxvY2sgd2hlbiBtaXhpbmcgdGhyZWFkcyBhbmQgZm9yaygpLgogCkBAIC05NjcsMzU0ICsyMjYxLDIzOCBAQAogCiAtIElzc3VlICM2ODQ2OiBGaXggYnVnIHdoZXJlIGJ5dGVhcnJheS5wb3AoKSByZXR1cm5zIG5lZ2F0aXZlIGludGVnZXJzLgogCi0tIElzc3VlICM2NzA3OiBkaXIoKSBvbiBhbiB1bmluaXRpYWxpemVkIG1vZHVsZSBjYXVzZWQgYSBjcmFzaC4KKy0gYGBjbGFzc21ldGhvZCgpYGAgbm8gbG9uZ2VyIGNoZWNrcyBpZiBpdHMgYXJndW1lbnQgaXMgY2FsbGFibGUuCiAKLS0gSXNzdWUgIzY1NDA6IEZpeGVkIGNyYXNoIGZvciBieXRlYXJyYXkudHJhbnNsYXRlKCkgd2l0aCBpbnZhbGlkIHBhcmFtZXRlcnMuCistIElzc3VlICM2NzUwOiBBIHRleHQgZmlsZSBvcGVuZWQgd2l0aCBgYGlvLm9wZW4oKWBgIGNvdWxkIGR1cGxpY2F0ZSBpdHMgb3V0cHV0CisgIHdoZW4gd3JpdGluZyBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4KIAotLSBJc3N1ZSAjNjU3Mzogc2V0LnVuaW9uKCkgc3RvcHBlZCBwcm9jZXNzaW5nIGlucHV0cyBpZiBhbiBpbnN0YW5jZSBvZiBzZWxmCistIElzc3VlICM2NzA0OiBJbXByb3ZlIHRoZSBjb2xfb2Zmc2V0IGluIEFTVCBmb3IgImZvciIgc3RhdGVtZW50cyB3aXRoIGEgdGFyZ2V0CisgIG9mIHR1cGxlIHVucGFja2luZy4KKworLSBJc3N1ZSAjNjcwNzogYGBkaXIoKWBgIG9uIGFuIHVuaW5pdGlhbGl6ZWQgbW9kdWxlIGNhdXNlZCBhIGNyYXNoLgorCistIElzc3VlICM2NTQwOiBGaXhlZCBjcmFzaCBmb3IgYGBieXRlYXJyYXkudHJhbnNsYXRlKClgYCB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjNjU3MzogYGBzZXQudW5pb24oKWBgIHN0b3BwZWQgcHJvY2Vzc2luZyBpbnB1dHMgaWYgYW4gaW5zdGFuY2Ugb2Ygc2VsZgogICBvY2N1cnJlZCBpbiB0aGUgYXJndW1lbnQgY2hhaW4uCiAKLS0gSXNzdWUgIzYwNzA6IE9uIHBvc2l4IHBsYXRmb3JtcyBpbXBvcnQgbm8gbG9uZ2VyIGNvcGllcyB0aGUgZXhlY3V0ZSBiaXQKLSAgZnJvbSB0aGUgLnB5IGZpbGUgdG8gdGhlIC5weWMgZmlsZSBpZiBpdCBpcyBzZXQuCistIElzc3VlICMxNjE2OTc5OiBBZGRlZCB0aGUgY3A3MjAgKEFyYWJpYyBET1MpIGVuY29kaW5nLgogCi0tIElzc3VlICM0NTQ3OiBXaGVuIGRlYnVnZ2luZyBhIHZlcnkgbGFyZ2UgZnVuY3Rpb24sIGl0IHdhcyBub3QgYWx3YXlzCi0gIHBvc3NpYmxlIHRvIHVwZGF0ZSB0aGUgbGluZW5vIGF0dHJpYnV0ZSBvZiB0aGUgY3VycmVudCBmcmFtZS4KKy0gSXNzdWUgIzYwNzA6IE9uIHBvc2l4IHBsYXRmb3JtcyBpbXBvcnQgbm8gbG9uZ2VyIGNvcGllcyB0aGUgZXhlY3V0ZSBiaXQgZnJvbQorICB0aGUgLnB5IGZpbGUgdG8gdGhlIC5weWMgZmlsZSBpZiBpdCBpcyBzZXQuICBQYXRjaCBieSBNYXJjbyBOLgogCi0tIElzc3VlICM0NjE4OiBXaGVuIHVuaWNvZGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gcHJpbnQoKSwgdGhlIGRlZmF1bHQKKy0gSXNzdWUgIzQ2MTg6IFdoZW4gdW5pY29kZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBgYHByaW50KClgYCwgdGhlIGRlZmF1bHQKICAgc2VwYXJhdG9yIGFuZCBlbmQgc2hvdWxkIGJlIHVuaWNvZGUgYWxzby4KIAogLSBJc3N1ZSAjNjExOTogRml4ZWQgYW4gaW5jb3JyZWN0IFB5M2sgd2FybmluZyBhYm91dCBvcmRlciBjb21wYXJpc29ucyBvZgogICBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMuCiAKKy0gSXNzdWUgIzYzNDc6IEluY2x1ZGUgaW50dHlwZXMuaCBhcyB3ZWxsIGFzIHN0ZGludC5oIGluIHB5cG9ydC5oLiAgVGhpcyBmaXhlcyBhCisgIGJ1aWxkIGZhaWx1cmUgb24gSFAtVVg6IGludDMyX3QgYW5kIHVpbnQzMl90IGFyZSBkZWZpbmVkIGluIGludHR5cGVzLmggaW5zdGVhZAorICBvZiBzdGRpbnQuaCBvbiB0aGF0IHBsYXRmb3JtLgorCistIElzc3VlICM0ODU2OiBSZW1vdmUgY2hlY2tzIGZvciB3aW4gTlQuCisKKy0gSXNzdWUgIzIwMTY6IEZpeGVkIGEgY3Jhc2ggaW4gYSBjb3JuZXIgY2FzZSB3aGVyZSB0aGUgZGljdGlvbmFyeSBvZiBrZXl3b3JkCisgIGFyZ3VtZW50cyBjb3VsZCBiZSBtb2RpZmllZCBkdXJpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgc2V0dXAuCisKKy0gUmVtb3ZlZCB0aGUgaXBhZGRyIG1vZHVsZS4KKworLSBJc3N1ZSAjNjMyOTogRml4ZWQgaXRlcmF0aW9uIGZvciBtZW1vcnl2aWV3IG9iamVjdHMgKGl0IHdhcyBiZWluZyBibG9ja2VkCisgIGJlY2F1c2UgaXQgd2Fzbid0IHJlY29nbml6ZWQgYXMgYSBzZXF1ZW5jZSkuCisKKy0gSXNzdWUgIzYyODk6IEVuY29kaW5nIGVycm9ycyBmcm9tIGBgY29tcGlsZSgpYGAgd2VyZSBiZWluZyBtYXNrZWQuCisKKy0gV2hlbiBubyBtb2R1bGUgaXMgZ2l2ZW4gaW4gYSByZWxhdGl2ZSBpbXBvcnQsIHRoZSBtb2R1bGUgZmllbGQgb2YgdGhlCisgIEltcG9ydEZyb20gQVNUIG5vZGUgaXMgbm93IE5vbmUgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuCisKKy0gQXNzaWdubWVudCB0byBOb25lIHVzaW5nIGltcG9ydCBzdGF0ZW1lbnRzIG5vdyByYWlzZXMgYSBTeW50YXhFcnJvci4KKworLSBJc3N1ZSAjNDU0NzogV2hlbiBkZWJ1Z2dpbmcgYSB2ZXJ5IGxhcmdlIGZ1bmN0aW9uLCBpdCB3YXMgbm90IGFsd2F5cyBwb3NzaWJsZQorICB0byB1cGRhdGUgdGhlIGxpbmVubyBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQgZnJhbWUuCisKIC0gSXNzdWUgIzUzMzA6IEMgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIGtleXdvcmQgYXJndW1lbnRzIHdlcmUgbm90IHJlcG9ydGVkIGJ5Ci0gIHRoZSB2YXJpb3VzIHByb2ZpbGluZyBtb2R1bGVzIChwcm9maWxlLCBjUHJvZmlsZSkuIFBhdGNoIGJ5IEhhZ2VuIEbDvHJzdGVuYXUuCisgIHRoZSB2YXJpb3VzIHByb2ZpbGluZyBtb2R1bGVzIChwcm9maWxlLCBjUHJvZmlsZSkuICBQYXRjaCBieSBIYWdlbiBGw7xyc3RlbmF1LgogCi0tIElzc3VlICM2MDg5OiBzdHIuZm9ybWF0IGNhbiByYWlzZSBTeXN0ZW1FcnJvciB3aXRoIGNlcnRhaW4gaW52YWxpZAotICBmaWVsZCBzcGVjaWZpZXJzLgorLSBJc3N1ZSAjNTk4Mjogc3RhdGljbWV0aG9kIGFuZCBjbGFzc21ldGhvZCBub3cgZXhwb3NlIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpdGgKKyAgYGBfX2Z1bmNfX2BgLgogCi0tIElzc3VlICM1OTk0OiB0aGUgbWFyc2hhbCBtb2R1bGUgbm93IGhhcyBkb2NzdHJpbmdzLgorLSBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGluIHRoZSBzYW1lIHdpdGgtc3RhdGVtZW50LgorICBEZXByZWNhdGVkIGBgY29udGV4dGxpYi5uZXN0ZWQoKWBgIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQuCiAKLS0gSXNzdWUgIzU5ODE6IEZpeCB0d28gbWlub3IgaW5mL25hbiBpc3N1ZXMgaW4gZmxvYXQuZnJvbWhleDogKDEpIGluZgotICBhbmQgbmFuIHN0cmluZ3Mgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIHdlcmUgaW5jb3JyZWN0bHkgcmVqZWN0ZWQKLSAgYW5kICgyKSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZnJvbWhleCgnLW5hbicpIGRpZG4ndCBtYXRjaCB0aGF0IG9mCi0gIGZsb2F0KCctbmFuJykuCistIElzc3VlICM2MTAxOiBBIG5ldyBvcGNvZGUsIFNFVFVQX1dJVEgsIGhhcyBiZWVuIGFkZGVkIHRvIHNwZWVkIHVwIHRoZSB3aXRoCisgIHN0YXRlbWVudCBhbmQgY29ycmVjdGx5IGxvb2t1cCB0aGUgX19lbnRlcl9fIGFuZCBfX2V4aXRfXyBzcGVjaWFsIG1ldGhvZHMuCiAKLS0gSXNzdWUgIzU4OTA6IGluIHN1YmNsYXNzZXMgb2YgJ3Byb3BlcnR5JyB0aGUgX19kb2NfXyBhdHRyaWJ1dGUgd2FzCi0gIHNoYWRvd2VkIGJ5IGNsYXNzdHlwZSdzLCBldmVuIGlmIGl0IHdhcyBOb25lLiAgcHJvcGVydHkgbm93Ci0gIGluc2VydHMgdGhlIF9fZG9jX18gaW50byB0aGUgc3ViY2xhc3MgaW5zdGFuY2UgX19kaWN0X18uCistIElzc3VlICM1ODI5OiBjb21wbGV4KCIxZTUwMCIpIG5vIGxvbmdlciByYWlzZXMgT3ZlcmZsb3dFcnJvci4gIFRoaXMgbWFrZXMgaXQKKyAgY29uc2lzdGVudCB3aXRoIGZsb2F0KCIxZTUwMCIpIGFuZCBpbnRlcnByZXRhdGlvbiBvZiByZWFsIGFuZCBpbWFnaW5hcnkKKyAgbGl0ZXJhbHMuCiAKLS0gSXNzdWUgIzU3MjQ6IChTZWUgYWxzbyBpc3N1ZSAjNDU3NS4pIEZpeCBQeV9JU19JTkZJTklUWSBtYWNybyB0bwotICB3b3JrIGNvcnJlY3RseSBvbiB4ODcgRlBVczogaXQgbm93IGZvcmNlcyBpdHMgYXJndW1lbnQgdG8gZG91YmxlCi0gIGJlZm9yZSB0ZXN0aW5nIGZvciBpbmZpbml0eS4KKy0gSXNzdWUgIzM1Mjc6IFJlbW92ZWQgUHlfV0lOX1dJREVfRklMRU5BTUVTIHdoaWNoIGlzIG5vdCB1c2VkIGFueSBtb3JlLgogCi0tIElzc3VlICM0OTcxOiBGaXggdGl0bGVjYXNlIGZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHRoZWlyIG93bgotICB0aXRsZWNhc2UsIGJ1dCBub3QgdGhlaXIgb3duIHVwcGVyY2FzZS4KKy0gYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kIGBgX19zdWJjbGFzc2NoZWNrX18oKWBgIGFyZSBub3cgY29tcGxldGVseSBpZ25vcmVkCisgIG9uIGNsYXNzaWMgY2xhc3NlcyBhbmQgaW5zdGFuY2VzLgogCi0tIElzc3VlICM1ODI5OiBjb21wbGV4KCcxZS01MDAnKSBubyBsb25nZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbgorLSBJc3N1ZSAjNTk5NDogVGhlIG1hcnNoYWwgbW9kdWxlIG5vdyBoYXMgZG9jc3RyaW5ncy4KIAotLSBJc3N1ZSAjNTc4Nzogb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc29tZV90eXBlLCAiX19iYXNlc19fIikgc2VnZmF1bHRlZCBvbgotICBzb21lIGJ1aWx0LWluIHR5cGVzLgorLSBJc3N1ZSAjNTk4MTogRml4IHRocmVlIG1pbm9yIGluZi9uYW4gaXNzdWVzIGluIGZsb2F0LmZyb21oZXg6CisKKyAgKDEpIGluZiBhbmQgbmFuIHN0cmluZ3Mgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIHdlcmUgaW5jb3JyZWN0bHkgcmVqZWN0ZWQ7CisgICgyKSBwYXJzaW5nIG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIGluZmluaXRpZXMgYW5kIG5hbnMgd2FzIGxvY2FsZSBhd2FyZTsgYW5kCisgICgzKSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZnJvbWhleCgnLW5hbicpIGRpZG4ndCBtYXRjaCB0aGF0IG9mIGZsb2F0KCctbmFuJykuCisKKy0gSXNzdWUgIzU5MjA6IEZvciBgYGZsb2F0Ll9fZm9ybWF0X18oKWBgLCBjaGFuZ2UgdGhlIGJlaGF2aW9yIHdpdGggdGhlIGVtcHR5CisgIHByZXNlbnRhdGlvbiB0eXBlICh0aGF0IGlzLCBub3Qgb25lIG9mICdlJywgJ2YnLCAnZycsIG9yICduJykgdG8gYmUgbGlrZSAnZycKKyAgYnV0IHdpdGggYXQgbGVhc3Qgb25lIGRlY2ltYWwgcG9pbnQgYW5kIHdpdGggYSBkZWZhdWx0IHByZWNpc2lvbgorICBvZiAxMi4gUHJldmlvdXNseSwgdGhlIGJlaGF2aW9yIHRoZSBzYW1lIGJ1dCB3aXRoIGEgZGVmYXVsdCBwcmVjaXNpb24gb2YgNi4KKyAgVGhpcyBtb3JlIGNsb3NlbHkgbWF0Y2hlcyBgYHN0cigpYGAsIGFuZCByZWR1Y2VzIHN1cnByaXNlcyB3aGVuIGFkZGluZworICBhbGlnbm1lbnQgZmxhZ3MgdG8gdGhlIGVtcHR5IHByZXNlbnRhdGlvbiB0eXBlLiBUaGlzIGFsc28gYWZmZWN0cyB0aGUgbmV3CisgIGNvbXBsZXguX19mb3JtYXRfXyBpbiB0aGUgc2FtZSB3YXkuCisKKy0gSXNzdWUgIzU4OTA6IEluIHN1YmNsYXNzZXMgb2YgJ3Byb3BlcnR5JyB0aGUgX19kb2NfXyBhdHRyaWJ1dGUgd2FzIHNoYWRvd2VkIGJ5CisgIGNsYXNzdHlwZSdzLCBldmVuIGlmIGl0IHdhcyBOb25lLiAgcHJvcGVydHkgbm93IGluc2VydHMgdGhlIF9fZG9jX18gaW50byB0aGUKKyAgc3ViY2xhc3MgaW5zdGFuY2UgX19kaWN0X18uCisKKy0gSXNzdWUgIzQ0MjY6IFRoZSBVVEYtNyBkZWNvZGVyIHdhcyB0b28gc3RyaWN0IGFuZCBkaWRuJ3QgYWNjZXB0IHNvbWUgbGVnYWwKKyAgc2VxdWVuY2VzLiAgUGF0Y2ggYnkgTmljayBCYXJuZXMgYW5kIFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMxNTg4OiBBZGQgY29tcGxleC5fX2Zvcm1hdF9fLiBGb3IgZXhhbXBsZSwgYGBmb3JtYXQoY29tcGxleCgxLCAyLi8zKSwKKyAgJy41JylgYCBub3cgcHJvZHVjZXMgYSBzZW5zaWJsZSByZXN1bHQuCisKKy0gSXNzdWUgIzU4NjQ6IEZpeCBlbXB0eSBmb3JtYXQgY29kZSBmb3JtYXR0aW5nIGZvciBmbG9hdHMgc28gdGhhdCBpdCBuZXZlcgorICBnaXZlcyBtb3JlIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzLgorCistIElzc3VlICM1NzkzOiBSYXRpb25hbGl6ZSBpc2RpZ2l0IC8gaXNhbHBoYSAvIHRvbG93ZXIsIGV0Yy4gSW5jbHVkZXMgbmV3CisgIFB5X0lTRElHSVQgLyBQeV9JU0FMUEhBIC8gUHlfVE9MT1dFUiwgZXRjLiBpbiBwY3R5cGVzLmguCisKKy0gSXNzdWUgIzQ5NzE6IEZpeCB0aXRsZWNhc2UgZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgdGhlaXIgb3duIHRpdGxlY2FzZSwgYnV0CisgIG5vdCB0aGVpciBvd24gdXBwZXJjYXNlLgorCistIElzc3VlICM1ODM1OiBEZXByZWNhdGUgUHlPU19hc2NpaV9mb3JtYXRkIGFuZCByZXBsYWNlIGl0IHdpdGgKKyAgX1B5T1NfZG91YmxlX3RvX3N0cmluZyBvciBQeU9TX2RvdWJsZV90b19zdHJpbmcuCiAKIC0gSXNzdWUgIzUyODM6IFNldHRpbmcgX19jbGFzc19fIGluIF9fZGVsX18gY2F1c2VkIGEgc2VnZmF1bHQuCiAKKy0gSXNzdWUgIzU4MTY6IGBgY29tcGxleChyZXByKHopKWBgIG5vdyByZWNvdmVycyB6IGV4YWN0bHksIGV2ZW4gd2hlbiB6IGludm9sdmVzCisgIG5hbnMsIGluZnMgb3IgbmVnYXRpdmUgemVyb3MuCisKKy0gSW1wbGVtZW50IFBFUCAzNzgsIEZvcm1hdCBTcGVjaWZpZXIgZm9yIFRob3VzYW5kcyBTZXBhcmF0b3IsIGZvciBmbG9hdHMsIGludHMsCisgIGFuZCBsb25ncy4KKworLSBJc3N1ZSAjNTUxNTogJ24nIGZvcm1hdHRpbmcgZm9yIGludHMsIGxvbmdzLCBhbmQgZmxvYXRzIGhhbmRsZXMgbGVhZGluZyB6ZXJvCisgIGZvcm1hdHRpbmcgcG9vcmx5LgorCistIElzc3VlICM1NzcyOiBGb3IgZmxvYXQuX19mb3JtYXRfXywgZG9uJ3QgYWRkIGEgdHJhaWxpbmcgIi4wIiBpZiB3ZSdyZSB1c2luZyBubworICB0eXBlIGNvZGUgYW5kIHdlIGhhdmUgYW4gZXhwb25lbnQuCisKKy0gSXNzdWUgIzMxNjY6IE1ha2UgbG9uZyAtPiBmbG9hdCAoYW5kIGludCAtPiBmbG9hdCkgY29udmVyc2lvbnMgY29ycmVjdGx5CisgIHJvdW5kZWQuCisKKy0gSXNzdWUgIzU3ODc6IGBgb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc29tZV90eXBlLCAiX19iYXNlc19fIilgYCBzZWdmYXVsdGVkIG9uCisgIHNvbWUgYnVpbHQtaW4gdHlwZXMuCisKKy0gSXNzdWUgIzE4Njk6IEZpeCBhIGNvdXBsZSBvZiBtaW5vciByb3VuZCgpIGlzc3Vlcy4gIGBgcm91bmQoNWUxNSsxKWBgIHdhcworICBnaXZpbmcgNWUxNSsyOyBgYHJvdW5kKC0wLjApYGAgd2FzIGxvc2luZyB0aGUgc2lnbiBvZiB0aGUgemVyby4KKwogLSBJc3N1ZSAjNTc1OTogZmxvYXQoKSBkaWRuJ3QgY2FsbCBfX2Zsb2F0X18gb24gc3RyIHN1YmNsYXNzZXMuCiAKLS0gSXNzdWUgIzUxMDg6IEhhbmRsZSAlcyBsaWtlICVTIGFuZCAlUiBpbiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKTogQ2FsbAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpIG9uY2UsIHJlbWVtYmVyIHRoZSByZXN1bHQgYW5kIG91dHB1dCBpdCBpbiBhIHNlY29uZAotICBzdGVwLiBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aXRoIGNvdW50aW5nIFVURi04IGJ5dGVzIHRoYXQgaWdub3JlcyB0aGUgZWZmZWN0Ci0gIG9mIHVzaW5nIHRoZSByZXBsYWNlIGVycm9yIGhhbmRsZXIgaW4gUHlVbmljb2RlX0RlY29kZVVURjgoKS4KKy0gSXNzdWUgIzU3MDQ6IFRoZSAiLTMiIGNvbW1hbmQtbGluZSBvcHRpb24gbm93IGltcGxpZXMgIi10Ii4KIAotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjMjE3MDogUmVmYWN0b3JlZCBgYHhtbC5kb20ubWluaWRvbS5ub3JtYWxpemVgYCwgaW5jcmVhc2luZyBib3RoIGl0cworICBjbGFyaXR5IGFuZCBpdHMgc3BlZWQuCiAKLS0gSXNzdWUgIzY4OTQ6IEZpeGVkIHRoZSBpc3N1ZSB1cmxsaWIyIGRvZXNuJ3QgcmVzcGVjdCAibm9fcHJveHkiIGVudmlyb25tZW50Ci0KLS0gSXNzdWUgIzY3OTA6IE1ha2UgaXQgcG9zc2libGUgYWdhaW4gdG8gcGFzcyBhbiBgYXJyYXkuYXJyYXlgIHRvCi0gIGBodHRwbGliLkhUVFBDb25uZWN0aW9uLnNlbmRgLiBQYXRjaCBieSBLaXJrIE1jRG9uYWxkLgotCi0tIElzc3VlICM2MjM2LCAjNjM0ODogRml4IHZhcmlvdXMgZmFpbHVyZXMgaW4gdGhlIGBpb2AgbW9kdWxlIHVuZGVyIEFJWAotICBhbmQgb3RoZXIgcGxhdGZvcm1zLCB3aGVuIHVzaW5nIGEgbm9uLWdjYyBjb21waWxlci4gUGF0Y2ggYnkgZWdyZWVuLgotCi0tIElzc3VlICM2ODUxOiBGaXggdXJsbGliLnVybG9wZW4gY3Jhc2ggb24gc2Vjb25kYWlyeSB0aHJlYWRzIG9uIE9TWCAxMC42Ci0KLS0gSXNzdWUgIzY5NDc6IEZpeCBkaXN0dXRpbHMgdGVzdCBvbiB3aW5kb3dzLiBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KLQotLSBJc3N1ZSAjNDYwNjogUGFzc2luZyAnTm9uZScgaWYgY3R5cGVzIGFyZ3R5cGUgaXMgc2V0IHRvIFBPSU5URVIoLi4uKQotICBkb2VzIG5vdyBhbHdheXMgcmVzdWx0IGluIE5VTEwuCi0KLS0gSXNzdWUgIzUwNDI6IGN0eXBlcyBTdHJ1Y3R1cmUgc3ViLXN1YmNsYXNzIGRvZXMgbm93IGluaXRpYWxpemUKLSAgY29ycmVjdGx5IHdpdGggYmFzZSBjbGFzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNjkzODogRml4IGEgVHlwZUVycm9yIGluIHN0cmluZyBmb3JtYXR0aW5nIG9mIGEgbXVsdGlwcm9jZXNzaW5nCi0gIGRlYnVnIG1lc3NhZ2UuCi0KLS0gSXNzdWUgIzY2MzU6IEZpeCBwcm9maWxlciBwcmludGluZyB1c2FnZSBtZXNzYWdlLgotCi0tIElzc3VlICM2Nzk1OiBpbnQoRGVjaW1hbCgnbmFuJykpIG5vdyByYWlzZXMgVmFsdWVFcnJvciBpbnN0ZWFkIG9mCi0gIHJldHVybmluZyBOYU4gb3IgcmFpc2luZyBJbnZhbGlkQ29udGV4dC4gIEFsc28sIGZpeCBpbmZpbml0ZSByZWN1cnNpb24KLSAgaW4gbG9uZyhEZWNpbWFsKCduYW4nKSkuCi0KLS0gSXNzdWUgIzY4NTA6IEZpeCBidWcgaW4gRGVjaW1hbC5fcGFyc2VfZm9ybWF0X3NwZWNpZmllciBmb3IgZm9ybWF0cwotICB3aXRoIG5vIHR5cGUgc3BlY2lmaWVyLgotCi0tIElzc3VlICM0OTM3OiBwbGF0LW1hYy9idW5kbGVidWlsZGVyIHJldmVycyB0byBub24tZXhpc3RpbmcgdmVyc2lvbi5wbGlzdAotCi0tIElzc3VlICM2ODM4OiBVc2UgYSBsaXN0IHRvIGFjY3VtdWxhdGUgdGhlIHZhbHVlIGluc3RlYWQgb2YKLSAgcmVwZWF0ZWRseSBjb25jYXRlbmF0aW5nIHN0cmluZ3MgaW4gaHR0cGxpYidzCi0gIEhUVFBSZXNwb25zZS5fcmVhZF9jaHVua2VkIHByb3ZpZGluZyBhIHNpZ25pZmljYW50IHNwZWVkIGluY3JlYXNlCi0gIHdoZW4gZG93bmxvYWRpbmcgbGFyZ2UgZmlsZXMgc2VydmVuZCB3aXRoIGEgVHJhbnNmZXItRW5jb2Rpbmcgb2YgJ2NodW5rZWQnLgotCi0tIElzc3VlICM2Nzk0OiBGaXggRGVjaW1hbC5jb21wYXJlX3RvdGFsIGFuZCBEZWNpbWFsLmNvbXBhcmVfdG90YWxfbWFnOiBOYU4KLSAgcGF5bG9hZHMgYXJlIG5vdyBvcmRlcmVkIGJ5IGludGVnZXIgdmFsdWUgcmF0aGVyIHRoYW4gbGV4aWNvZ3JhcGhpY2FsbHkuCi0KLS0gSXNzdWUgIzYxMTc6IEZpeCBPKG4qKjIpIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIHdoZW4gb3V0cHV0dGluZyBsb3RzIG9mCi0gIHNtYWxsIGRhdGEgb24gYSBidWZmZXJlZCBzb2NrZXQuc29ja2V0Lm1ha2VmaWxlKCkgb2JqZWN0LgotCi0tIElzc3VlICM2NjM3OiBkZWZhdWx0ZGljdC5jb3B5KCkgZGlkIG5vdCB3b3JrIHdoZW4gdGhlIGRlZmF1bHQgZmFjdG9yeQotICB3YXMgbGVmdCB1bnNwZWNpZmllZC4gIEFsc28sIHRoZSBldmFsL3JlcHIgcm91bmQtdHJpcCB3b3VsZCBmYWlsIHdoZW4KLSAgdGhlIGRlZmF1bHRfZmFjdG9yeSB3YXMgTm9uZS4KLQotLSBJc3N1ZSAjMTQyNDE1MjogRml4IGZvciBodHRwbGliLCB1cmxsaWIyIHRvIHN1cHBvcnQgU1NMIHdoaWxlIHdvcmtpbmcgdGhyb3VnaAotICBwcm94eS4gT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXN0b3BoZXIgTGksIGNoYW5nZXMgbWFkZSBieSBTZW50aGlsIEt1bWFyYW4uCi0KLS0gSXNzdWVzICM1MTU1LCA1MzEzLCA1MzMxOiBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5fYm9vdHN0cmFwIHdhcwotICB1bmNvbmRpdGlvbmFsbHkgY2FsbGluZyAib3MuY2xvc2Uoc3lzLnN0ZGluLmZpbGVubygpKSIgcmVzdWx0aW5nIGluIGZpbGUKLSAgZGVzY3JpcHRvciBlcnJvcnMKLQotLSBJc3N1ZSAjNjQxNTogRml4ZWQgd2FybmluZ3Mud2FybiBzYWdmYXVsdCBvbiBiYWQgZm9ybWF0dGVkIHN0cmluZy4KLQotLSBJc3N1ZSAjNjM0NDogRml4ZWQgYSBjcmFzaCBvZiBtbWFwLnJlYWQoKSB3aGVuIHBhc3NlZCBhIG5lZ2F0aXZlIGFyZ3VtZW50LgotCi0tIElzc3VlICM1MjMwOiBweWRvYyB3b3VsZCByZXBvcnQgbm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBpZiBhIG1vZHVsZSBnZW5lcmF0ZWQKLSAgYSAnbm90IGZvdW5kJyBpbXBvcnQgZXJyb3Igd2hlbiBsb2FkZWQ7IGl0IG5vdyByZXBvcnRzIHRoZSBpbXBvcnQgZXJyb3JzLgotICBUaGFua3MgdG8gTHVjYXMgUHJhZG8gTWVsbyBmb3IgaW5pdGlhbCBmaXggYW5kIGNvbGxhYm9yYXRpb24gb24gdGhlIHRlc3RzLgotCi0tIElzc3VlICM2Mjc0OiBGaXhlZCBwb3NzaWJsZSBmaWxlIGRlc2NyaXB0b3JzIGxlYWsgaW4gc3VicHJvY2Vzcy5weQotCi0tIElzc3VlICM2MjcxOiBtbWFwIHRyaWVkIHRvIGNsb3NlIGludmFsaWQgZmlsZSBoYW5kbGUgKC0xKSB3aGVuIGFubm9ueW1vdXMuCi0gIChPbiBVbml4KQotCi0tIElzc3VlICM2MjU4OiBTdXBwb3J0IEFNRDY0IGluIGJkaXN0X21zaS4KLQotLSBJc3N1ZSAjNjI1MjogRml4ZWQgYnVnIGluIG5leHQgcm9sbG92ZXIgdGltZSBjb21wdXRhdGlvbiBpbgotICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIuCi0KLS0gSXNzdWUgIzYxMjE6IHB5ZG9jIG5vdyBpZ25vcmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUKLSAgYXJndW1lbnQgdG8gdGhlICdoZWxwJyBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjNjA1MDogRG9uJ3QgZmFpbCBleHRyYWN0aW5nIGEgZGlyZWN0b3J5IGZyb20gYSB6aXBmaWxlIGlmCi0gIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCi0KLS0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIHdhcyBub3Qgd29ya2luZyB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGQKLSAgbmFtZXM6ICBjbHMsIHNlbGYsIHR1cGxlLCBpdGVtZ2V0dGVyLCBhbmQgcHJvcGVydHkuCi0KLS0gSXNzdWUgIzEzMDkzNTI6IGZjbnRsIG5vdyBjb252ZXJ0cyBpdHMgdGhpcmQgYXJndW1lbnRzIHRvIGEgQyBgbG9uZ2AgcmF0aGVyCi0gIHRoYW4gYW4gaW50LCB3aGljaCBtYWtlcyBzb21lIG9wZXJhdGlvbnMgcG9zc2libGUgdW5kZXIgNjQtYml0IExpbnV4IChlLmcuCi0gIEROX01VTFRJU0hPVCB3aXRoIEZfTk9USUZZKS4KLQotLSBJc3N1ZSAjMTk4MzogRml4IGZ1bmN0aW9ucyB0YWtpbmcgb3IgcmV0dXJuaW5nIGEgcHJvY2VzcyBpZGVudGlmaWVyIHRvIHVzZQotICB0aGUgZGVkaWNhdGVkIEMgdHlwZSBgYHBpZF90YGAgaW5zdGVhZCBvZiBhIEMgYGBpbnRgYC4gU29tZSBwbGF0Zm9ybXMgaGF2ZQotICBhIHByb2Nlc3MgaWRlbnRpZmllciB0eXBlIHdpZGVyIHRoYW4gdGhlIHN0YW5kYXJkIEMgaW50ZWdlciB0eXBlLgotCi0tIElzc3VlICM0MDY2OiBzbXRwbGliLlNNVFBfU1NMLl9nZXRfc29ja2V0IG5vdyBjb3JyZWN0bHkgcmV0dXJucyB0aGUgc29ja2V0LgotICBQYXRjaCBieSBGYXJoYW4gQWhtYWQsIHRlc3QgYnkgTWFyY2luIEJhY2hyeS4KLQotLSBJc3N1ZSAjMTY1NTogTWFrZSBpbWFwbGliIElQdjYtY2FwYWJsZS4gUGF0Y2ggYnkgRGVyZWsgTW9yci4KLQotLSBJc3N1ZSAjMTY2NDogTWFrZSBubnRwbGliIElQdjYtY2FwYWJsZS4gUGF0Y2ggYnkgRGVyZWsgTW9yci4KLQotLSBJc3N1ZSAjNTk3MTogU3RyZWFtSGFuZGxlci5oYW5kbGVFcnJvciBub3cgc3dhbGxvd3MgSU9FcnJvcnMgd2hpY2ggb2NjdXIgd2hlbgotICB0cnlpbmcgdG8gcHJpbnQgYSB0cmFjZWJhY2suCi0KLS0gSXNzdWUgIzU5NTU6IGFpZmMncyBjbG9zZSBtZXRob2QgZGlkIG5vdCBjbG9zZSB0aGUgZmlsZSBpdCB3cmFwcGVkLAotICBub3cgaXQgZG9lcy4gIFRoaXMgYWxzbyBtZWFucyBnZXRmcCBtZXRob2Qgbm93IHJldHVybnMgdGhlIHJlYWwgZnAuCi0KLS0gSXNzdWUgIzQ4NzU6IE9uIHdpbjMyLCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgZG9lcyBubyBsb25nZXIKLSAgcmV0dXJuIGRpcmVjdG9yaWVzLgotCi0tIElzc3VlICM1NjkyOiBJbiA6Y2xhc3M6YHppcGZpbGUuWmlwZmlsZWAsIGZpeCB3cm9uZyBwYXRoIGNhbGN1bGF0aW9uIHdoZW4KLSAgZXh0cmFjdGluZyBhIGZpbGUgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LgotCi0tIElzc3VlICMyMjQ1OiBhaWZjIG5vdyBza2lwcyBjaHVuayB0eXBlcyBpdCBkb2Vzbid0IHJlY29nbml6ZSwgcGVyIHNwZWMuCi0KLS0gSXNzdWUgIzQzMDU6IGN0eXBlcyBzaG91bGQgbm93IGJ1aWxkIGFnYWluIG9uIG1pcHNlbC1saW51eC1nbnUKLQotLSBJc3N1ZSAjNTg1MzogY2FsbGluZyBhIGZ1bmN0aW9uIG9mIHRoZSBtaW1ldHlwZXMgbW9kdWxlIGZyb20gc2V2ZXJhbCB0aHJlYWRzCi0gIGF0IG9uY2UgY291bGQgaGl0IHRoZSByZWN1cnNpb24gbGltaXQgaWYgdGhlIG1pbWV0eXBlcyBkYXRhYmFzZSBoYWRuJ3QgYmVlbgotICBpbml0aWFsaXplZCBiZWZvcmUuCi0KLS0gSXNzdWUgIzUwNDE6IGN0eXBlcyBkb2VzIG5vdyBhbGxvdyBwaWNrbGluZyB3aWRlIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjNTc2ODogRml4ZWQgYnVnIGluIFVuaWNvZGUgb3V0cHV0IGxvZ2ljIGFuZCB0ZXN0IGNhc2UgZm9yIHNhbWUuCi0KLS0gSXNzdWUgIzExNjEwMzE6IGZpeCByZWFkd3JpdGUgc2VsZWN0IGZsYWcgaGFuZGxpbmc6IFBPTExQUkkgbm93Ci0gIHJlc3VsdHMgaW4gYSBoYW5kbGVfZXhwdF9ldmVudCBjYWxsLCBub3QgaGFuZGxlX3JlYWRfZXZlbnQsIGFuZCBQT0xMRVJSCi0gIGFuZCBQT0xMTlZBTCBub3cgY2FsbCBoYW5kbGVfY2xvc2UsIG5vdCBoYW5kbGVfZXhwdF9ldmVudC4gIEFsc28sCi0gIGRpc3BhdGNoZXIgbm93IGhhcyBhbiAnaWdub3JlX2xvZ190eXBlcycgYXR0cmlidXRlIGZvciBzdXBwcmVzc2luZwotICBsb2cgbWVzc2FnZXMsIHdoaWNoIGlzIHNldCB0byAnd2FybmluZycgYnkgZGVmYXVsdC4KLQotLSBJc3N1ZSAjNTgyOCAoSW52YWxpZCBiZWhhdmlvciBvZiB1bmljb2RlLmxvd2VyKTogRml4ZWQgYm9ndXMgbG9naWMgaW4KLSAgbWFrZXVuaWNvZGVkYXRhLnB5IGFuZCByZWdlbmVyYXRlZCB0aGUgVW5pY29kZSBkYXRhYmFzZSAoVGhpcyBmaXhlcwotICB1J1x1MWQ3OScubG93ZXIoKSA9PSAnXHgwMCcpLgotCi0tIElzc3VlICMxMjAyOiB6aXBmaWxlIG1vZHVsZSB3b3VsZCBjYXVzZSBhIERlcHJlY2F0aW9uV2FybmluZyB3aGVuIHN0b3JpbmcKLSAgZmlsZXMgd2l0aCBhIENSQzMyID4gMioqMzEtMS4KLQotLSBJc3N1ZSAjNjE2MzogRml4ZWQgSFAtVVggcnVudGltZSBsaWJyYXJ5IGRpciBvcHRpb25zIGluCi0gIGRpc3R1dGlscy51bml4Y29tcGlsZXIuIEluaXRpYWwgcGF0Y2ggYnkgU3JpZGhhciBSYXRuYWt1bWFyIGFuZAotICBNaWNoYWVsIEhhdWJlbndhbGxuZXIuCi0KLS0gSXNzdWUgIzQ2NjA6IElmIGEgbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUucHV0KCkgd2FzIHByZWVtcHRlZCwgaXQgd2FzCi0gIHBvc3NpYmxlIHRvIGdldCBhIHNwdXJpb3VzICd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnIGVycm9yLgotCi0tIElzc3VlICM2NTk1OiBUaGUgRGVjaW1hbCBjb25zdHJ1Y3RvciBub3cgYWxsb3dzIGFyYml0cmFyeSBVbmljb2RlCi0gIGRlY2ltYWwgZGlnaXRzIGluIGlucHV0LCBhcyByZWNvbW1lbmRlZCBieSB0aGUgc3RhbmRhcmQuICBQcmV2aW91c2x5Ci0gIGl0IHdhcyByZXN0cmljdGVkIHRvIGFjY2VwdGluZyBbMC05XS4KLQotLSBJc3N1ZSAjNjU1MzogRml4ZWQgYSBjcmFzaCBpbiBjUGlja2xlLmxvYWQoKSwgd2hlbiBnaXZlbiBhIGZpbGUtbGlrZSBvYmplY3QKLSAgY29udGFpbmluZyBpbmNvbXBsZXRlIGRhdGEuCi0KLS0gSXNzdWUgIzI2MjI6IEZpeGVkIGFuIEltcG9ydEVycm9yIHdoZW4gaW1wb3J0aW5nIGVtYWlsLm1lc3NhZ2UgZnJvbSBhCi0gIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gYnVpbHQgd2l0aCBweTJleGUgb3IgcHkyYXBwLgotCi0tIElzc3VlICM2NDU1OiBGaXhlZCB0ZXN0X2J1aWxkX2V4dCB1bmRlciB3aW4zMi4KLQotLSBJc3N1ZSAjNjQwMzogRml4ZWQgcGFja2FnZSBwYXRoIHVzYWdlIGluIGJ1aWxkX2V4dC4KLQotLSBJc3N1ZSAjNjI4NzogQWRkZWQgdGhlIGxpY2Vuc2UgZmllbGQgaW4gRGlzdHV0aWxzIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzYyNjM6IEZpeGVkIHN5bnRheCBlcnJvciBpbiBkaXN0dXRpbHMuY3lnd2luY29tcGlsZXIuCi0KLS0gSXNzdWUgIzUyMDE6IGRpc3R1dGlscy5zeXNjb25maWcucGFyc2VfbWFrZWZpbGUoKSBub3cgdW5kZXJzdGFuZHMgYCQkYAotICBpbiBNYWtlZmlsZXMuIFRoaXMgcHJldmVudHMgY29tcGlsZSBlcnJvcnMgd2hlbiB1c2luZyBzeW50YXggbGlrZToKLSAgYExERkxBR1M9Jy1ycGF0aD1cJCRMSUI6L3NvbWUvb3RoZXIvcGF0aCdgLiBQYXRjaCBieSBGbG9yaXMgQnJ1eW5vb2doZS4KLQotLSBJc3N1ZSAjNjA2MjogSW4gZGlzdHV0aWxzLCBmaXhlZCB0aGUgcGFja2FnZSBvcHRpb24gb2YgYnVpbGRfZXh0LiBGZWVkYmFjawotICBhbmQgdGVzdHMgb24gcHl3aW4zMiBieSBUaW0gR29sZGVuLgotCi0tIElzc3VlICMxMzA5NTY3OiBGaXggbGluZWNhY2hlIGJlaGF2aW9yIG9mIHN0cmlwcGluZyBzdWJkaXJlY3RvcmllcyB3aGVuCi0gIGxvb2tpbmcgZm9yIGZpbGVzIGdpdmVuIGJ5IGEgcmVsYXRpdmUgZmlsZW5hbWUuCi0KLS0gSXNzdWUgIzYwNDY6IEZpeGVkIHRoZSBsaWJyYXJ5IGV4dGVuc2lvbiB3aGVuIGRpc3R1dGlscyBidWlsZF9leHQgaXMgdXNlZAotICBpbnBsYWNlLiBJbml0aWFsIHBhdGNoIGJ5IFJvdW1lbiBQZXRyb3YuCi0KLS0gSXNzdWUgIzYwMjI6IGEgdGVzdCBmaWxlIHdhcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGJ5Ci0gIHRlc3RfZ2V0X291dHB1dHMgaW4gRGlzdHV0aWxzLgotCi0tIElzc3VlICM1OTc3OiBkaXN0dXRpbHMgYnVpbGRfZXh0LmdldF9vdXRwdXRzIHdhcyBub3QgdGFraW5nIGludG8gYWNjb3VudCB0aGUKLSAgaW5wbGFjZSBvcHRpb24uIEluaXRpYWwgcGF0Y2ggYnkga3hyb2JlcnRvLgotCi0tIElzc3VlICM1OTg0OiBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQuY2hlY2tfZXh0ZW5zaW9uc19saXN0IGNoZWNrcyB3ZXJlCi0gIGJyb2tlbiBmb3Igb2xkLXN0eWxlIGV4dGVuc2lvbnMuCi0KLS0gSXNzdWUgIzU4NTQ6IFVwZGF0ZWQgX19hbGxfXyB0byBpbmNsdWRlIHNvbWUgbWlzc2luZyBuYW1lcyBhbmQgcmVtb3ZlIHNvbWUKLSAgbmFtZXMgd2hpY2ggc2hvdWxkIG5vdCBiZSBleHBvcnRlZC4KLQotLSBJc3N1ZSAjNTgxMDogRml4ZWQgRGlzdHV0aWxzIHRlc3RfYnVpbGRfc2NyaXB0cyBzbyBpdCB1c2VzCi0gIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMuCi0KLS0gSXNzdWUgIzY4NjU6IEZpeCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwd2QKLSAgbW9kdWxlLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjNjk0NDogRml4IGEgU3lzdGVtRXJyb3Igd2hlbiBzb2NrZXQuZ2V0bmFtZWluZm8oKSB3YXMgY2FsbGVkCi0gIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gYSB0dXBsZSBhcyBmaXJzdCBhcmd1bWVudC4KLQotLSBJc3N1ZSAjNjg0ODogRml4IGN1cnNlcyBtb2R1bGUgYnVpbGQgZmFpbHVyZSBvbiBPUyBYIDEwLjYuCi0KLS0gRml4IGV4cGF0IHRvIG5vdCBzZWdmYXVsdCB3aXRoIHNwZWNpYWxseSBjcmFmdGVkIGlucHV0LgotCi0tIElzc3VlICM0ODczOiBGaXggcmVzb3VyY2UgbGVha3MgaW4gZXJyb3IgY2FzZXMgb2YgcHdkIGFuZCBncnAuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICM2OTgwOiBGaXggY3R5cGVzIGJ1aWxkIGZhaWx1cmUgb24gYXJtZWwtbGludXgtZ251ZWFiaSB3aXRoCi0gIC1tZmxvYXQtYWJpPXNvZnRmcC4KLQotLSBJc3N1ZSAjNjgwMjogRml4IGJ1aWxkIGlzc3VlcyBvbiBNYWNPU1ggMTAuNgotCi0tIElzc3VlICM1MzkwOiBBZGQgdW5pbnN0YWxsIGljb24gaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBmaWxlCi0gIGV4dGVuc2lvbnMgYXJlIGluc3RhbGxlZC4KLQotLSBJc3N1ZSAjNjA5NDogQnVpbGQgY29ycmVjdGx5IHdpdGggU3VidmVyc2lvbiAxLjcuCi0KLS0gSXNzdWUgIzU3MjY6IE1ha2UgTW9kdWxlcy9sZF9zb19haXggcmV0dXJuIHRoZSBhY3R1YWwgZXhpdCBjb2RlIG9mIHRoZQotICBsaW5rZXIsIHJhdGhlciB0aGFuIGFsd2F5cyBleGl0IHN1Y2Nlc3NmdWxseS4gUGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCi0KLS0gSXNzdWUgIzU4MDk6IFNwZWNpZnlpbmcgYm90aCAtLWVuYWJsZS1mcmFtZXdvcmsgYW5kIC0tZW5hYmxlLXNoYXJlZCBpcwotICBhbiBlcnJvci4gQ29uZmlndXJlIG5vdyBleHBsaWNpdHkgdGVsbHMgeW91IGFib3V0IHRoaXMuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjNjU1NjogRml4ZWQgdGhlIERpc3R1dGlscyBjb25maWd1cmF0aW9uIGZpbGVzIGxvY2F0aW9uIGV4cGxhbmF0aW9uCi0gIGZvciBXaW5kb3dzLgotCi0tIElzc3VlICM2ODAxIDogc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlIGFsc28gYWNjZXB0cyB8LgotICBUaGFua3MgdG8gQ2FybCBDaGVuZXQuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICM1ODM3OiBDZXJ0YWluIHNlcXVlbmNlcyBvZiBjYWxscyB0byBzZXQoKSBhbmQgdW5zZXQoKSBmb3IKLSAgc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkIG9iamVjdHMgcmVzdG9yZWQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwotICBpbmNvcnJlY3RseSBvbiBfX2V4aXRfXy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuMgotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTQtQXByLTIwMDkqCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMi42LjIgcmMgMQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNi1BcHItMjAwOSoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0geHJhbmdlKCkgaXMgbm93IHJlZ2lzdGVyZWQgYXMgYSBTZXF1ZW5jZS4KKy0gSXNzdWUgIzIzOTY6IFRoZSBtZW1vcnl2aWV3IG9iamVjdCB3YXMgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzLjEuCiAKIC0gRml4IGEgcHJvYmxlbSBpbiBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24gdGhhdCBsZWFkcyB0byAidW5kZXRlY3RlZCBlcnJvcnMiCiAgIHdoZW4gaGl0dGluZyB0aGUgcmVjdXJzaW9uIGxpbWl0IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KIAogLSBJc3N1ZSAjMTY2NTIwNjogUmVtb3ZlIHRoZSBsYXN0IGVhZ2VyIGltcG9ydCBpbiBfd2FybmluZ3MuYyBhbmQgbWFrZSBpdCBsYXp5LgogCi0tIElzc3VlICM0MDM0OiBGaXggd2VpcmQgYXR0cmlidXRlIGVycm9yIG1lc3NhZ2VzIG9mIHRoZSB0cmFjZWJhY2sgb2JqZWN0LiAoQXMKLSAgYSByZXN1bHQgdHJhY2ViYWNrLl9fbWVtYmVyc19fIG5vIGxvbmdlciBleGlzdHMuKQorLSBJc3N1ZSAjNDg2NTogT24gTWFjT1NYIC9MaWJyYXJ5L1B5dGhvbi8yLjcvc2l0ZS1wYWNrYWdlcyBpcyBhZGRlZCB0byB0aGUgZW5kCisgIHN5cy5wYXRoLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBzeXN0ZW0gaW5zdGFsbCBvZiBQeXRob24uCiAKLS0gSXNzdWUgIzUyNDc6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIHVua25vd24gZm9ybWF0IGNvZGVzIGFyZQotICB1c2VkIHdoZW4gdXNpbmcgc3RyLmZvcm1hdCgpIHdpdGggc3RyLCB1bmljb2RlLCBsb25nLCBpbnQsIGFuZAotICBmbG9hdCBhcmd1bWVudHMuCistIElzc3VlICM0Njg4OiBBZGQgYSBoZXVyaXN0aWMgc28gdGhhdCB0dXBsZXMgYW5kIGRpY3RzIGNvbnRhaW5pbmcgb25seQorICB1bnRyYWNrYWJsZSBvYmplY3RzIGFyZSBub3QgdHJhY2tlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFRoaXMgY2FuIHJlZHVjZQorICB0aGUgc2l6ZSBvZiBjb2xsZWN0aW9ucyBhbmQgdGhlcmVmb3JlIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gb3ZlcmhlYWQgb24KKyAgbG9uZy1ydW5uaW5nIHByb2dyYW1zLCBkZXBlbmRpbmcgb24gdGhlaXIgcGFydGljdWxhciB1c2Ugb2YgZGF0YXR5cGVzLgogCi0tIFJ1bm5pbmcgUHl0aG9uIHdpdGggdGhlIC0zIG9wdGlvbiBub3cgYWxzbyB3YXJucyBhYm91dCBjbGFzc2ljIGRpdmlzaW9uCi0gIGZvciBpbnRzIGFuZCBsb25ncy4KKy0gSXNzdWUgIzU1MTI6IFJld3JpdGUgUHlMb25nIGxvbmcgZGl2aXNpb24gYWxnb3JpdGhtICh4X2RpdnJlbSkgdG8gaW1wcm92ZSBpdHMKKyAgcGVyZm9ybWFuY2UuICBMb25nIGRpdmlzaW9ucyBhbmQgcmVtYWluZGVyIG9wZXJhdGlvbnMgYXJlIG5vdyBiZXR3ZWVuIDUwJSBhbmQKKyAgMTUwJSBmYXN0ZXIuCiAKLS0gSXNzdWUgIzUwMTM6IEZpeGVkIGEgYnVnIGluIEZpbGVIYW5kbGVyIHdoaWNoIG9jY3VycmVkIHdoZW4gdGhlIGRlbGF5Ci0gIHBhcmFtZXRlciB3YXMgc2V0LgorLSBJc3N1ZSAjNDI1ODogTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgYmFzZSAyKiozMCBpbnN0ZWFkIG9mIGJhc2UgMioqMTUgZm9yIHRoZQorICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBpbnRlZ2VycywgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBCYXNlIDIqKjMwIGlzCisgIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiA2NC1iaXQgbWFjaGluZXMuICBBZGQgLS1lbmFibGUtYmlnLWRpZ2l0cyBvcHRpb24gdG8KKyAgY29uZmlndXJlLCB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQuICBBZGQgc3lzLmxvbmdfaW5mbyBzdHJ1Y3RzZXEgdG8KKyAgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJuYWwgZm9ybWF0LgorCistIElzc3VlICM0MDM0OiBGaXggd2VpcmQgYXR0cmlidXRlIGVycm9yIG1lc3NhZ2VzIG9mIHRoZSB0cmFjZWJhY2sgb2JqZWN0LiAoQXMgYQorICByZXN1bHQgdHJhY2ViYWNrLl9fbWVtYmVyc19fIG5vIGxvbmdlciBleGlzdHMuKQorCistIElzc3VlICM0NDc0OiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyIG5vdyBjb252ZXJ0cyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJNUCB0bworICBzdXJyb2dhdGUgcGFpcnMsIG9uIHN5c3RlbXMgd2l0aCBzaXplb2Yod2NoYXJfdCkgPT0gNCBhbmQgc2l6ZW9mKFB5X1VOSUNPREUpCisgID09IDIuCisKKy0gSXNzdWUgIzUyMzc6IEFsbG93IGF1dG8tbnVtYmVyZWQgZmllbGRzIGluIHN0ci5mb3JtYXQoKS4gRm9yIGV4YW1wbGU6IGBgJ3t9CisgIHt9Jy5mb3JtYXQoMSwgMikgPT0gJzEgMidgYC4KKworLSBJc3N1ZSAjMzY1MjogTWFrZSB0aGUgJ2xpbmUnIGFyZ3VtZW50IGZvciBgYHdhcm5pbmdzLnNob3d3YXJuaW5nKClgYCBhCisgIHJlcXVpcmVtZW50LiAgTWVhbnMgdGhlIERlcHJlY2F0aW9uV2FybmluZyBmcm9tIFB5dGhvbiAyLjYgY2FuIGdvIGF3YXkuCisKKy0gSXNzdWUgIzUyNDc6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSB3aGVuIHVua25vd24gZm9ybWF0IGNvZGVzIGFyZSB1c2VkIHdoZW4KKyAgdXNpbmcgYGBzdHIuZm9ybWF0KClgYCB3aXRoIHN0ciwgdW5pY29kZSwgbG9uZywgaW50LCBhbmQgZmxvYXQgYXJndW1lbnRzLgorCistIFJ1bm5pbmcgUHl0aG9uIHdpdGggdGhlIC0zIG9wdGlvbiBub3cgYWxzbyB3YXJucyBhYm91dCBjbGFzc2ljIGRpdmlzaW9uIGZvcgorICBpbnRzIGFuZCBsb25ncy4KKworLSBJc3N1ZSAjNTI2MDogTG9uZyBpbnRlZ2VycyBub3cgY29uc3VtZSBsZXNzIG1lbW9yeTogYXZlcmFnZSBzYXZpbmcgaXMgMiBieXRlcworICBwZXIgbG9uZyBvbiBhIDMyLWJpdCBzeXN0ZW0gYW5kIDYgYnl0ZXMgcGVyIGxvbmcgb24gYSA2NC1iaXQgc3lzdGVtLgorCistIElzc3VlICM1MTg2OiBSZWR1Y2UgaGFzaCBjb2xsaXNpb25zIGZvciBvYmplY3RzIHdpdGggbm8gX19oYXNoX18gbWV0aG9kIGJ5CisgIHJvdGF0aW5nIHRoZSBvYmplY3QgcG9pbnRlciBieSA0IGJpdHMgdG8gdGhlIHJpZ2h0LgorCistIElzc3VlICM0NTc1OiBGaXggUHlfSVNfSU5GSU5JVFkgbWFjcm8gdG8gd29yayBjb3JyZWN0bHkgb24geDg3IEZQVXM6IGl0IG5vdworICBmb3JjZXMgaXRzIGFyZ3VtZW50IHRvIGRvdWJsZSBiZWZvcmUgdGVzdGluZyBmb3IgaW5maW5pdHkuCisKKy0gSXNzdWUgIzQ5Nzg6IFBhc3Npbmcga2V5d29yZCBhcmd1bWVudHMgYXMgdW5pY29kZSBzdHJpbmdzIGlzIG5vdyBhbGxvd2VkLgogCiAtIElzc3VlICMxMjQyNjU3OiB0aGUgX19sZW5fXygpIGFuZCBfX2xlbmd0aF9oaW50X18oKSBjYWxscyBpbiBzZXZlcmFsIHRvb2xzCiAgIHdlcmUgc3VwcHJlc3NpbmcgYWxsIGV4Y2VwdGlvbnMuICBUaGVzZSBpbmNsdWRlIGxpc3QoKSwgZmlsdGVyKCksIG1hcCgpLAogICB6aXAoKSwgYW5kIGJ5dGVhcnJheSgpLgogCi0tIElzc3VlICM0OTM1OiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgY29kZSBpbiB0aGUgZXhwYW5kdGFicygpIG1ldGhvZCBjb21tb24KLSAgdG8gc3RyLCBieXRlcyBhbmQgYnl0ZWFycmF5IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IHRoZSBjb21waWxlciwgbGV0dGluZwotICB0aGUgaW50ZXJwcmV0ZXIgc2VnZmF1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorLSBvcy5mdHJ1bmNhdGUgcmFpc2VzIE9TRXJyb3JzIGluc3RlYWQgb2YgSU9FcnJvcnMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgb3MKKyAgZnVuY3Rpb25zLgorCistIElzc3VlICM0OTkxOiBQYXNzaW5nIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycyB0byBpby5GaWxlSU8gbm93IHJhaXNlcyBhbgorICBPU0Vycm9yLgorCistIElzc3VlICM0ODA3OiBQb3J0IHRoZSBfd2lucmVnIG1vZHVsZSB0byBXaW5kb3dzIENFLgorCistIElzc3VlICM0OTM1OiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgY29kZSBpbiB0aGUgZXhwYW5kdGFicygpIG1ldGhvZCBjb21tb24gdG8KKyAgc3RyLCBieXRlcyBhbmQgYnl0ZWFycmF5IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IHRoZSBjb21waWxlciwgbGV0dGluZyB0aGUKKyAgaW50ZXJwcmV0ZXIgc2VnZmF1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgorCistIElzc3VlICMzNzIwOiBGaXggYSBjcmFzaCB3aGVuIGFuIGl0ZXJhdG9yIG1vZGlmaWVzIGl0cyBjbGFzcyBhbmQgcmVtb3ZlcyBpdHMKKyAgX19uZXh0X18gbWV0aG9kLgorCistIElzc3VlICM0ODkzOiBVc2UgTlQgdGhyZWFkaW5nIG9uIENFLgogCiAtIElzc3VlICM0OTE1OiBQb3J0IHN5c21vZHVsZSB0byBXaW5kb3dzIENFLgogCi0tIElzc3VlICMxMTgwMTkzOiBXaGVuIGltcG9ydGluZyBhIG1vZHVsZSBmcm9tIGEgLnB5YyAob3IgLnB5bykgZmlsZSB3aXRoCi0gIGFuIGV4aXN0aW5nIC5weSBjb3VudGVycGFydCwgb3ZlcnJpZGUgdGhlIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZXMgb2YgYWxsCi0gIGNvZGUgb2JqZWN0cyBpZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgaXMgb2Jzb2xldGUgKHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlCi0gIGZpbGUgaGFzIGJlZW4gcmVuYW1lZCwgbW92ZWQsIG9yIGlmIGl0IGlzIGFjY2Vzc2VkIHRocm91Z2ggZGlmZmVyZW50IHBhdGhzKS4KLSAgUGF0Y2ggYnkgWmlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmUuCistIElzc3VlICM0MDc0OiBDaGFuZ2UgdGhlIGNyaXRlcmlhIGZvciBkb2luZyBhIGZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIChpLmUuCisgIGNvbGxlY3RpbmcgdGhlIG9sZGVzdCBnZW5lcmF0aW9uKSBzbyB0aGF0IGFsbG9jYXRpbmcgbG90cyBvZiBvYmplY3RzIHdpdGhvdXQKKyAgZGVzdHJveWluZyB0aGVtIGRvZXMgbm90IHNob3cgcXVhZHJhdGljIHBlcmZvcm1hbmNlLiBCYXNlZCBvbiBhIHByb3Bvc2FsIGJ5CisgIE1hcnRpbiB2b24gTMO2d2lzIGF0CisgIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwOC1KdW5lLzA4MDU3OS5odG1sLgogCi0tIElzc3VlICM0MDc1OiBVc2UgT3V0cHV0RGVidWdTdHJpbmdXIGluIFB5X0ZhdGFsRXJyb3IuCistIElzc3VlICM0ODUwOiBDaGFuZ2UgQ09VTlRfQUxMT0NTIHZhcmlhYmxlcyB0byBQeV9zc2l6ZV90LgorCistIElzc3VlICMxMTgwMTkzOiBXaGVuIGltcG9ydGluZyBhIG1vZHVsZSBmcm9tIGEgLnB5YyAob3IgLnB5bykgZmlsZSB3aXRoIGFuCisgIGV4aXN0aW5nIC5weSBjb3VudGVycGFydCwgb3ZlcnJpZGUgdGhlIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZXMgb2YgYWxsIGNvZGUKKyAgb2JqZWN0cyBpZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgaXMgb2Jzb2xldGUgKHdoaWNoIGNhbiBoYXBwZW4gaWYgdGhlIGZpbGUgaGFzCisgIGJlZW4gcmVuYW1lZCwgbW92ZWQsIG9yIGlmIGl0IGlzIGFjY2Vzc2VkIHRocm91Z2ggZGlmZmVyZW50IHBhdGhzKS4gIFBhdGNoIGJ5CisgIFppZ2EgU2VpbG5hY2h0IGFuZCBKZWFuLVBhdWwgQ2FsZGVyb25lLgorCistIElzc3VlICM0MDc1OiBVc2UgYGBPdXRwdXREZWJ1Z1N0cmluZ1coKWBgIGluIFB5X0ZhdGFsRXJyb3IuCiAKIC0gSXNzdWUgIzQ3OTc6IElPRXJyb3IuZmlsZW5hbWUgd2FzIG5vdCBzZXQgd2hlbiBfZmlsZWlvLkZpbGVJTyBmYWlsZWQgdG8gb3BlbgogICBmaWxlIHdpdGggYHN0cicgZmlsZW5hbWUgb24gV2luZG93cy4KQEAgLTEzMjIsOCArMjUwMCw4IEBACiAtIElzc3VlICMzNjgwOiBSZWZlcmVuY2UgY3ljbGVzIGNyZWF0ZWQgdGhyb3VnaCBhIGRpY3QsIHNldCBvciBkZXF1ZSBpdGVyYXRvcgogICBkaWQgbm90IGdldCBjb2xsZWN0ZWQuCiAKLS0gSXNzdWUgIzQ3MDE6IFB5T2JqZWN0X0hhc2ggbm93IGltcGxpY2l0bHkgY2FsbHMgUHlUeXBlX1JlYWR5IG9uIHR5cGVzCi0gIHdoZXJlIHRoZSB0cF9oYXNoIGFuZCB0cF9kaWN0IHNsb3RzIGFyZSBib3RoIE5VTEwuCistIElzc3VlICM0NzAxOiBQeU9iamVjdF9IYXNoIG5vdyBpbXBsaWNpdGx5IGNhbGxzIFB5VHlwZV9SZWFkeSBvbiB0eXBlcyB3aGVyZQorICB0aGUgdHBfaGFzaCBhbmQgdHBfZGljdCBzbG90cyBhcmUgYm90aCBOVUxMLgogCiAtIElzc3VlICM0NzY0OiBXaXRoIGlvLm9wZW4sIElPRXJyb3IuZmlsZW5hbWUgaXMgc2V0IHdoZW4gdHJ5aW5nIHRvIG9wZW4gYQogICBkaXJlY3Rvcnkgb24gUE9TSVggc3lzdGVtcy4KQEAgLTEzMzIsNjAgKzI1MTAsNjY1IEBACiAgIHN5c3RlbXMuCiAKIC0gSXNzdWUgIzQ3NTk6IE5vbmUgaXMgbm93IGFsbG93ZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mCi0gIGJ5dGVhcnJheS50cmFuc2xhdGUoKS4gIEl0IHdhcyBhbHdheXMgYWxsb3dlZCBmb3IgYnl0ZXMudHJhbnNsYXRlKCkuCi0KLS0gSXNzdWUgIzQ3NTk6IGZpeCBhIHNlZ2ZhdWx0IGZvciBieXRlYXJyYXkudHJhbnNsYXRlKHgsIE5vbmUpLgorICBgYGJ5dGVhcnJheS50cmFuc2xhdGUoKWBgLiAgSXQgd2FzIGFsd2F5cyBhbGxvd2VkIGZvciBgYGJ5dGVzLnRyYW5zbGF0ZSgpYGAuCiAKIC0gQWRkZWQgdGVzdCBjYXNlIHRvIGVuc3VyZSBhdHRlbXB0cyB0byByZWFkIGZyb20gYSBmaWxlIG9wZW5lZCBmb3Igd3JpdGluZwogICBmYWlsLgogCi0tIElzc3VlICM0NTk3OiBGaXhlZCBzZXZlcmFsIG9wY29kZXMgdGhhdCB3ZXJlbid0IGFsd2F5cyBwcm9wYWdhdGluZwotICBleGNlcHRpb25zLgorLSBJc3N1ZSAjMjQ2NzogZ2MuREVCVUdfU1RBVFMgcmVwb3J0ZWQgaW52YWxpZCBlbGFwc2VkIHRpbWVzLiBBbHNvLCBhbHdheXMgcHJpbnQKKyAgZWxhcHNlZCB0aW1lcywgbm90IG9ubHkgd2hlbiBzb21lIG9iamVjdHMgYXJlIHVuY29sbGVjdGFibGUvdW5yZWFjaGFibGUuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IE5laWwgU2NoZW1lbmF1ZXIuCiAKLS0gSXNzdWUgIzI0Njc6IGdjLkRFQlVHX1NUQVRTIHJlcG9ydGVkIGludmFsaWQgZWxhcHNlZCB0aW1lcy4gQWxzbywgYWx3YXlzCi0gIHByaW50IGVsYXBzZWQgdGltZXMsIG5vdCBvbmx5IHdoZW4gc29tZSBvYmplY3RzIGFyZSB1bmNvbGxlY3RhYmxlIC8KLSAgdW5yZWFjaGFibGUuIE9yaWdpbmFsIHBhdGNoIGJ5IE5laWwgU2NoZW1lbmF1ZXIuCistIElzc3VlICMzNDM5OiBBZGQgYSBiaXRfbGVuZ3RoIG1ldGhvZCB0byBpbnQgYW5kIGxvbmcuCiAKLS0gSXNzdWUgIzQ1ODk6IEZpeGVkIGV4Y2VwdGlvbiBoYW5kbGluZyB3aGVuIHRoZSBfX2V4aXRfXyBmdW5jdGlvbiBvZiBhCi0gIGNvbnRleHQgbWFuYWdlciByZXR1cm5zIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgYm9vbC4KKy0gSXNzdWUgIzIxODM6IFNpbXBsaWZ5IGFuZCBvcHRpbWl6ZSBieXRlY29kZSBmb3IgbGlzdCBjb21wcmVoZW5zaW9ucy4gIE9yaWdpbmFsCisgIHBhdGNoIGJ5IE5lYWwgTm9yd2l0ei4KIAotLSBJc3N1ZSAjNDIzMzogQ2hhbmdlZCBzZW1hbnRpYyBvZiBgYF9maWxlaW8uRmlsZUlPYGAncyBgYGNsb3NlKClgYAotICBtZXRob2Qgb24gZmlsZSBvYmplY3RzIHdpdGggY2xvc2VmZD1GYWxzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBzdGlsbAotICBrZXB0IG9wZW4gYnV0IHRoZSBmaWxlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBjbG9zZWQgZmlsZS4gVGhlIGBgRmlsZUlPYGAKLSAgb2JqZWN0IGFsc28gZ290IGEgbmV3IHJlYWRvbmx5IGF0dHJpYnV0ZSBgYGNsb3NlZmRgYC4KKy0gSXNzdWUgIzQ1OTc6IEZpeGVkIGV4Y2VwdGlvbiBoYW5kbGluZyB3aGVuIHRoZSBfX2V4aXRfXyBmdW5jdGlvbiBvZiBhIGNvbnRleHQKKyAgbWFuYWdlciByZXR1cm5zIGEgdmFsdWUgdGhhdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgYm9vbC4KIAotLSBJc3N1ZSAjMzY4OTogVGhlIGxpc3QgcmV2ZXJzZWQgaXRlcmF0b3Igbm93IHN1cHBvcnRzIF9fbGVuZ3RoX2hpbnRfXwotICBpbnN0ZWFkIG9mIF9fbGVuX18uICBCZWhhdmlvciBub3cgbWF0Y2hlcyBvdGhlciByZXZlcnNlZCBpdGVyYXRvcnMuCistIElzc3VlICM0NTk3OiBGaXhlZCBzZXZlcmFsIG9wY29kZXMgdGhhdCB3ZXJlbid0IGFsd2F5cyBwcm9wYWdhdGluZyBleGNlcHRpb25zLgogCi0tIElzc3VlICM0NTA5OiBWYXJpb3VzIGlzc3VlcyBzdXJyb3VuZGluZyByZXNpemUgb2YgYnl0ZWFycmF5IG9iamVjdHMgdG8KLSAgd2hpY2ggdGhlcmUgYXJlIGJ1ZmZlciBleHBvcnRzLgorLSBJc3N1ZSAjNDQ0NTogUmVwbGFjZSBgYHNpemVvZihQeVN0cmluZ09iamVjdClgYCB3aXRoCisgIGBgb2Zmc2V0b2YoUHlTdHJpbmdPYmplY3QsIG9iX3N2YWwpICsgMWBgIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgZm9yIHN0cgorICBpbnN0YW5jZXMuICBPbiBhIHR5cGljYWwgbWFjaGluZSB0aGlzIHNhdmVzIDMgYnl0ZXMgb2YgbWVtb3J5IChvbiBhdmVyYWdlKSBwZXIKKyAgc3RyaW5nIGFsbG9jYXRpb24uCiAKLS0gSXNzdWUgIzM4NDU6IEluIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzIGF2b2lkIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aXRoCi0gIHNob3J0IGZpbGUgbmFtZXMuCistIElzc3VlICMzOTk2OiBPbiBXaW5kb3dzLCB0aGUgUHlPU19DaGVja1N0YWNrIGZ1bmN0aW9uIHdvdWxkIGNhdXNlIHRoZQorICBpbnRlcnByZXRlciB0byBhYm9ydCAoIkZhdGFsIFB5dGhvbiBlcnJvcjogQ291bGQgbm90IHJlc2V0IHRoZSBzdGFjayEiKQorICBpbnN0ZWFkIG9mIHRocm93aW5nIGEgTWVtb3J5RXJyb3IuCisKKy0gSXNzdWUgIzM2ODk6IFRoZSBsaXN0IHJldmVyc2VkIGl0ZXJhdG9yIG5vdyBzdXBwb3J0cyBfX2xlbmd0aF9oaW50X18gaW5zdGVhZAorICBvZiBfX2xlbl9fLiAgQmVoYXZpb3Igbm93IG1hdGNoZXMgb3RoZXIgcmV2ZXJzZWQgaXRlcmF0b3JzLgorCistIElzc3VlICM0MzY3OiBQeXRob24gd291bGQgc2VnZmF1bHQgZHVyaW5nIGNvbXBpbGluZyB3aGVuIHRoZSB1bmljb2RlZGF0YQorICBtb2R1bGUgY291bGRuJ3QgYmUgaW1wb3J0ZWQgYW5kIFxOIGVzY2FwZXMgd2VyZSBwcmVzZW50LgorCistIElzc3VlICM0MjMzOiBDaGFuZ2VkIHNlbWFudGljIG9mIGBgX2ZpbGVpby5GaWxlSU9gYCdzIGBgY2xvc2UoKWBgIG1ldGhvZCBvbgorICBmaWxlIG9iamVjdHMgd2l0aCBjbG9zZWZkPUZhbHNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIHN0aWxsIGtlcHQgb3BlbiBidXQKKyAgdGhlIGZpbGUgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGNsb3NlZCBmaWxlLiBUaGUgYGBGaWxlSU9gYCBvYmplY3QgYWxzbyBnb3QgYQorICBuZXcgcmVhZG9ubHkgYXR0cmlidXRlIGBgY2xvc2VmZGBgLgorCistIElzc3VlICM0MzQ4OiBTb21lIGJ5dGVhcnJheSBtZXRob2RzIHJldHVybmVkIHRoYXQgZGlkbid0IGNhdXNlIGFueSBjaGFuZ2UgdG8KKyAgdGhlIGJ5dGVhcnJheSwgcmV0dXJuZWQgdGhlIHNhbWUgYnl0ZWFycmF5IGluc3RlYWQgb2YgYSBjb3B5LgorCistIElzc3VlICM0MzE3OiBGaXhlZCBhIGNyYXNoIGluIHRoZSBgYGltYWdlb3AucmdiMnJnYjgoKWBgIGZ1bmN0aW9uLgorCistIElzc3VlICM0MjMwOiBJZiBgYF9fZ2V0YXR0cl9fYGAgaXMgYSBkZXNjcmlwdG9yLCBpdCBub3cgZnVuY3Rpb25zIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjNDA0ODogVGhlIHBhcnNlciBtb2R1bGUgbm93IGNvcnJlY3RseSB2YWxpZGF0ZXMgcmVsYXRpdmUgaW1wb3J0cy4KKworLSBJc3N1ZSAjNDIyNTogYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYCBkaWRuJ3Qgd29yayBpbiBhbgorICBleGVjIHN0YXRlbWVudC4KKworLSBJc3N1ZSAjNDE3NjogRml4ZWQgYSBjcmFzaCB3aGVuIHBpY2tsaW5nIGFuIG9iamVjdCB3aGljaCBgYF9fcmVkdWNlX19gYCBtZXRob2QKKyAgZG9lcyBub3QgcmV0dXJuIGl0ZXJhdG9ycyBmb3IgdGhlIDR0aCBhbmQgNXRoIGl0ZW1zLgorCistIElzc3VlICM0MjA5OiBFbmFibGluZyB1bmljb2RlX2xpdGVyYWxzIGFuZCB0aGUgcHJpbnRfZnVuY3Rpb24gaW4gdGhlIHNhbWUKKyAgX19mdXR1cmVfXyBpbXBvcnQgZGlkbid0IHdvcmsuCisKKy0gVXNpbmcgYGBub25sb2NhbGBgIGFzIGEgdmFyaWFibGUgbmFtZSB3aWxsIG5vdyByYWlzZSBhIFB5M2sgU3ludGF4V2FybmluZworICBiZWNhdXNlIGl0IGlzIGEgcmVzZXJ2ZWQgd29yZCBpbiAzLnguCisKKy0gT24gd2luZG93cywgYGBvcy5jaGRpcigpYGAgZ2l2ZW4gdW5pY29kZSB3YXMgbm90IHdvcmtpbmcgaWYKKyAgR2V0Q3VycmVudERpcmVjdG9yeVcgcmV0dXJuZWQgYSBwYXRoIGxvbmdlciB0aGFuIE1BWF9QQVRILiAoQnV0IEl0J3MgZG91YnRmdWwKKyAgdGhpcyBjb2RlIHBhdGggaXMgcmVhbGx5IGV4ZWN1dGVkIGJlY2F1c2UgSSBjYW5ub3QgbW92ZSB0byBzdWNoIGRpcmVjdG9yeSBvbgorICB3aW4yaykKKworLSBJc3N1ZSAjNDA2OTogV2hlbiBgYHNldC5yZW1vdmUoZWxlbWVudClgYCBpcyB1c2VkIHdpdGggYSBzZXQgZWxlbWVudCwgdGhlCisgIGVsZW1lbnQgaXMgdGVtcG9yYXJpbHkgcmVwbGFjZWQgd2l0aCBhbiBlcXVpdmFsZW50IGZyb3plbnNldC4gIEJ1dCB0aGUKKyAgZXZlbnR1YWwgS2V5RXJyb3Igd291bGQgYWx3YXlzIHJlcG9ydCB0aGUgZW1wdHkgYGBmcm96ZW5zZXQoKWBgIGFzIHRoZSBtaXNzaW5nCisgIGtleS4gIE5vdyBpdCBjb3JyZWN0bHkgcmVmZXJzIHRvIHRoZSBpbml0aWFsIGVsZW1lbnQuCisKKy0gSXNzdWUgIzQ1MDk6IFZhcmlvdXMgaXNzdWVzIHN1cnJvdW5kaW5nIHJlc2l6ZSBvZiBieXRlYXJyYXkgb2JqZWN0cyB0byB3aGljaAorICB0aGVyZSBhcmUgYnVmZmVyIGV4cG9ydHMuCisKKy0gSXNzdWUgIzQ3NDg6IExhbWJkYSBnZW5lcmF0b3JzIG5vIGxvbmdlciByZXR1cm4gYSB2YWx1ZS4KKworLSBJc3N1ZSAjMzU4MjogVXNlIG5hdGl2ZSBUTFMgZnVuY3Rpb25zIG9uIFdpbmRvd3MKKworLSBUaGUgcmUuc3ViKCksIHJlLnN1Ym4oKSBhbmQgcmUuc3BsaXQoKSBmdW5jdGlvbnMgbm93IGFjY2VwdCBhIGZsYWdzIHBhcmFtZXRlci4KKworLSBJc3N1ZSAjMzg0NTogSW4gUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MgYXZvaWQgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdpdGggc2hvcnQKKyAgZmlsZSBuYW1lcy4KKworLSBJc3N1ZSAjMTExMzI0NDogUHlfWElOQ1JFRiwgUHlfREVDUkVGLCBQeV9YREVDUkVGOiBBZGQgYGRvIHsgLi4uIH0gd2hpbGUgKDApJworICB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KIAogLSBJc3N1ZSAjNTcwNTogb3Muc2V0dWlkKCkgd291bGQgbm90IGFjY2VwdCB2YWx1ZXMgPiAyKiozMS0xIGJ1dCBwd2QuZ2V0cHduYW0oKQogICByZXR1cm5lZCB0aGVtIG9uIDY0Yml0IHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjNTEwODogSGFuZGxlICVzIGxpa2UgJVMgYW5kICVSIGluIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpOiBDYWxsCisgIFB5VW5pY29kZV9EZWNvZGVVVEY4KCkgb25jZSwgcmVtZW1iZXIgdGhlIHJlc3VsdCBhbmQgb3V0cHV0IGl0IGluIGEgc2Vjb25kCisgIHN0ZXAuIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdpdGggY291bnRpbmcgVVRGLTggYnl0ZXMgdGhhdCBpZ25vcmVzIHRoZSBlZmZlY3QKKyAgb2YgdXNpbmcgdGhlIHJlcGxhY2UgZXJyb3IgaGFuZGxlciBpbiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpLgorCistIElzc3VlICMzNzM5OiBUaGUgdW5pY29kZS1pbnRlcm5hbCBlbmNvZGVyIG5vdyByZXBvcnRzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycworICBjb25zdW1lZCBsaWtlIGFueSBvdGhlciBlbmNvZGVyIChpbnN0ZWFkIG9mIHRoZSBudW1iZXIgb2YgYnl0ZXMpLgorCistIElzc3VlICMyNDIyOiBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIGBgLS13aXRoLXZhbGdyaW5kYGAgb3B0aW9uLCB0aGUgcHltYWxsb2MKKyAgYWxsb2NhdG9yIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQuICBUaGlzCisgIGdpdmVzIGltcHJvdmVkIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB3aGVuIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQsIHdoaWxlIHRha2luZworICBhZHZhbnRhZ2Ugb2YgcHltYWxsb2MgYXQgb3RoZXIgdGltZXMuCisKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjNTc0MTogZG9uJ3QgZGlzYWxsb3cgIiUlIiAod2hpY2ggaXMgYW4gZXNjYXBlIGZvciAiJSIpIHdoZW4gc2V0dGluZwotICBhIHZhbHVlIGluIFNhZmVDb25maWdQYXJzZXIuCistIEFkZCBjb3VudCgpIGFuZCByZXZlcnNlKCkgbWV0aG9kcyB0byBjb2xsZWN0aW9ucy5kZXF1ZSgpLgorCistIEZpeCB2YXJpYXRpb25zIG9mIGV4dGVuZGluZyBkZXF1ZXM6ICBkLmV4dGVuZChkKSAgZC5leHRlbmRsZWZ0KGQpICBkKz1kCisKKy0gSXNzdWUgIzY5ODY6IEZpeCBjcmFzaCBpbiB0aGUgSlNPTiBDIGFjY2VsZXJhdG9yIHdoZW4gY2FsbGVkIHdpdGggdGhlIHdyb25nCisgIHBhcmFtZXRlciB0eXBlcy4gIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorCistIGxvZ2dpbmc6IEFkZGVkIG9wdGlvbmFsICJzZWN1cmUiIHBhcmFtZXRlciB0byBTTVRQSGFuZGxlciwgdG8gZW5hYmxlIHVzZSBvZgorICBUTFMgd2l0aCBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscy4KKworLSBJc3N1ZSAjMTkyMzogRml4ZWQgdGhlIHJlbW92YWwgb2YgbWVhbmluZ2Z1bCBzcGFjZXMgd2hlbiBQS0ctSU5GTyBpcyBnZW5lcmF0ZWQKKyAgaW4gRGlzdHV0aWxzLiBQYXRjaCBieSBTdGVwaGVuIEVtc2xpZS4KKworLSBJc3N1ZSAjNDEyMDogRHJvcCByZWZlcmVuY2UgdG8gQ1JUIGZyb20gbWFuaWZlc3Qgd2hlbiBidWlsZGluZyBleHRlbnNpb25zIHdpdGgKKyAgbXN2Yzljb21waWxlci4KKworLSBJc3N1ZSAjNzMzMzogVGhlIGBgcG9zaXhgYCBtb2R1bGUgZ2FpbnMgYW4gYGBpbml0Z3JvdXBzKClgYCBmdW5jdGlvbiBwcm92aWRpbmcKKyAgYWNjZXNzIHRvIHRoZSBpbml0Z3JvdXBzKDMpIEMgbGlicmFyeSBjYWxsIG9uIFVuaXggc3lzdGVtcyB3aGljaCBpbXBsZW1lbnQgaXQuCisgIFBhdGNoIGJ5IEplYW4tUGF1bCBDYWxkZXJvbmUuCisKKy0gSXNzdWUgIzc0MDg6IEZpeGVkIGRpc3R1dGlscy50ZXN0cy5zZGlzdCBzbyBpdCBkb2Vzbid0IGNoZWNrIGZvciBncm91cAorICBvd25lcnNoaXAgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvcmNlZCwgYmVjYXVzZSB0aGUgZ3JvdXAgbWF5IGJlIGRpZmZlcmVudAorICBmcm9tIHRoZSB1c2VyJ3MgZ3JvdXAgYW5kIGluaGVyaXQgZnJvbSBpdHMgY29udGFpbmVyIHdoZW4gdGhlIHRlc3QgaXMgcnVuLgorCistIElzc3VlICMxNTE1OiBFbmFibGUgdXNlIG9mIGRlZXBjb3B5KCkgd2l0aCBpbnN0YW5jZSBtZXRob2RzLiAgUGF0Y2ggYnkgUm9iZXJ0CisgIENvbGxpbnMuCisKKy0gSXNzdWUgIzc0MDM6IGxvZ2dpbmc6IEZpeGVkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIGluIGxvY2sgY3JlYXRpb24uCisKKy0gSXNzdWUgIzY4NDU6IEFkZCByZXN0YXJ0IHN1cHBvcnQgZm9yIGJpbmFyeSB1cGxvYWQgaW4gZnRwbGliLiAgVGhlCisgIGBgc3RvcmJpbmFyeSgpYGAgbWV0aG9kIG9mIEZUUCBhbmQgRlRQX1RMUyBvYmplY3RzIGdhaW5zIGFuIG9wdGlvbmFsICJyZXN0IgorICBhcmd1bWVudC4gIFBhdGNoIGJ5IFBhYmxvIE1vdXpvLgorCistIElzc3VlICM1Nzg4OiBgYGRhdGV0aW1lLnRpbWVkZWx0YWBgIG9iamVjdHMgZ2V0IGEgbmV3IGBgdG90YWxfc2Vjb25kcygpYGAKKyAgbWV0aG9kIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMgaW4gdGhlIGR1cmF0aW9uLiAgUGF0Y2ggYnkgQnJpYW4KKyAgUXVpbmxhbi4KKworLSBJc3N1ZSAjNjYxNTogbG9nZ2luZzogVXNlZCB3ZWFrcmVmcyBpbiBpbnRlcm5hbCBoYW5kbGVyIGxpc3QuCisKKy0gSXNzdWUgIzE0ODg5NDM6IGBgZGlmZmxpYi5EaWZmZXJgYCBkb2Vzbid0IGFsd2F5cyBhZGQgaGludHMgZm9yIHRhYgorICBjaGFyYWN0ZXJzLgorCistIElzc3VlICM2MTIzOiB0YXJmaWxlIG5vdyBvcGVucyBlbXB0eSBhcmNoaXZlcyBjb3JyZWN0bHkgYW5kIGNvbnNpc3RlbnRseQorICByYWlzZXMgUmVhZEVycm9yIG9uIGVtcHR5IGZpbGVzLgorCistIElzc3VlICM3MzU0OiBkaXN0dXRpbHMudGVzdHMudGVzdF9tc3ZjOWNvbXBpbGVyIC0gZHJhZ2Z1bGx3aW5kb3dzIGNhbiBiZSAyLgorCistIElzc3VlICM1MDM3OiBQcm94eSB0aGUgX191bmljb2RlX18gc3BlY2lhbCBtZXRob2QgdG8gX191bmljb2RlX18gaW5zdGVhZCBvZgorICBfX3N0cl9fLgorCistIElzc3VlICM3MzQxOiBDbG9zZSB0aGUgaW50ZXJuYWwgZmlsZSBvYmplY3QgaW4gdGhlIFRhckZpbGUgY29uc3RydWN0b3IgaW4gY2FzZQorICBvZiBhbiBlcnJvci4KKworLSBJc3N1ZSAjNzI5MzogYGBkaXN0dXRpbHMudGVzdF9tc3ZjOWNvbXBpbGVyYGAgaXMgZml4ZWQgdG8gd29yayBvbiBhbnkgZnJlc2gKKyAgV2luZG93cyBib3guICBIZWxwIHByb3ZpZGVkIGJ5IERhdmlkIEJvbGVuLgorCistIElzc3VlICM3MzI4OiBweWRvYyBubyBsb25nZXIgY29ycnVwdHMgc3lzLnBhdGggd2hlbiBydW4gd2l0aCB0aGUgJy1tJyBzd2l0Y2guCisKKy0gSXNzdWUgIzIwNTQ6IGZ0cGxpYiBub3cgcHJvdmlkZXMgYW4gRlRQX1RMUyBjbGFzcyB0byBkbyBzZWN1cmUgRlRQIHVzaW5nIFRMUworICBvciBTU0wuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KKworLSBJc3N1ZSAjNDk2OTogVGhlIG1pbWV0eXBlcyBtb2R1bGUgbm93IHJlYWRzIHRoZSBNSU1FIGRhdGFiYXNlIGZyb20gdGhlCisgIHJlZ2lzdHJ5IHVuZGVyIFdpbmRvd3MuICBQYXRjaCBieSBHYWJyaWVsIEdlbmVsbGluYS4KKworLSBJc3N1ZSAjNjgxNjogcnVucHkgbm93IHByb3ZpZGVzIGEgcnVuX3BhdGggZnVuY3Rpb24gdGhhdCBhbGxvd3MgUHl0aG9uIGNvZGUgdG8KKyAgZXhlY3V0ZSBmaWxlIHBhdGhzIHRoYXQgcmVmZXIgdG8gc291cmNlIG9yIGNvbXBpbGVkIFB5dGhvbiBmaWxlcyBhcyB3ZWxsIGFzCisgIHppcGZpbGVzLCBkaXJlY3RvcmllcyBhbmQgb3RoZXIgdmFsaWQgc3lzLnBhdGggZW50cmllcyB0aGF0IGNvbnRhaW4gYQorICBfX21haW5fXy5weSBmaWxlLiBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb3RoZXIgUHl0aG9uIHNjcmlwdHMgdG8KKyAgc3VwcG9ydCB0aGUgc2FtZSBmbGV4aWJpbGl0eSBhcyB0aGUgQ1B5dGhvbiBjb21tYW5kIGxpbmUgaXRzZWxmLgorCistIElzc3VlICM3MzE4OiBtdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgYSB0aW1lb3V0IHdoZW4gaXQgZmFpbHMgdG8gZXN0YWJsaXNoIGEKKyAgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgcHJvY2VzcywgcmF0aGVyIHRoYW4gbG9vcGluZyBlbmRsZXNzbHkuIFRoZSBkZWZhdWx0CisgIHRpbWVvdXQgaXMgMjAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIGFtcGx5IHN1ZmZpY2llbnQgZm9yIGxvY2FsIGNvbm5lY3Rpb25zLgorCistIElzc3VlICM3MTk3OiBBbGxvdyB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lciBvYmplY3RzIHRvIGJlIHBpY2tsZWQgYW5kCisgIHVucGlja2xlZC4gIFRoaXMgZml4ZXMgY3Jhc2hlcyB1bmRlciBXaW5kb3dzIHdoZW4gdHJ5aW5nIHRvIHJ1bgorICB0ZXN0X211bHRpcHJvY2Vzc2luZyBpbiB2ZXJib3NlIG1vZGUuCisKKy0gSXNzdWUgIzcyODI6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZW4gYW4gUkxvY2sgd2FzIHVzZWQgaW4gYSB0aHJlYWQgb3RoZXIgdGhhbgorICB0aG9zZSBzdGFydGVkIHRocm91Z2ggYGB0aHJlYWRpbmcuVGhyZWFkYGAgKGZvciBleGFtcGxlLCB1c2luZworICBgYHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKClgYC4KKworLSBJc3N1ZSAjNzI2NDogRml4IGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiBkZWFsbG9jYXRpbmcgdGhyZWFkLWxvY2FsIG9iamVjdHMKKyAgd2hpY2ggYXJlIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUuCisKKy0gSXNzdWUgIzcyMTE6IEFsbG93IDY0LWJpdCB2YWx1ZXMgZm9yIHRoZSBgYGlkZW50YGAgYW5kIGBgZGF0YWBgIGZpZWxkcyBvZgorICBrZXZlbnQgb2JqZWN0cyBvbiA2NC1iaXQgc3lzdGVtcy4gIFBhdGNoIGJ5IE1pY2hhZWwgQnJvZ2h0b24uCisKKy0gSXNzdWUgIzY4OTY6IGBgbWFpbGJveC5NYWlsZGlyYGAgbm93IGludmFsaWRhdGVzIGl0cyBpbnRlcm5hbCBjYWNoZSBlYWNoIHRpbWUKKyAgYSBtb2RpZmljYXRpb24gaXMgZG9uZSB0aHJvdWdoIGl0LiAgVGhpcyBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgYW5kIHRlc3QKKyAgZmFpbHVyZXMgb24gc3lzdGVtcyB3aXRoIHNsaWdodGx5IGJvZ3VzIG10aW1lIGJlaGF2aW91ci4KKworLSBJc3N1ZSAjNzI0NiAmIElzc3VlICM3MjA4OiBnZXRwYXNzIG5vdyBwcm9wZXJseSBmbHVzaGVzIGlucHV0IGJlZm9yZSByZWFkaW5nCisgIGZyb20gc3RkaW4gc28gdGhhdCBleGlzdGluZyBpbnB1dCBkb2VzIG5vdCBjb25mdXNlIGl0IGFuZCBsZWFkIHRvIGluY29ycmVjdAorICBlbnRyeSBvciBhbiBJT0Vycm9yLiAgSXQgYWxzbyBwcm9wZXJseSBmbHVzaGVzIGl0IGFmdGVyd2FyZHMgdG8gYXZvaWQgdGhlCisgIHRlcm1pbmFsIGVjaG9pbmcgdGhlIGlucHV0IGFmdGVyd2FyZHMgb24gT1NlcyBzdWNoIGFzIFNvbGFyaXMuCisKKy0gSXNzdWUgIzcyMzM6IEZpeCBhIG51bWJlciBvZiB0d28tYXJndW1lbnQgRGVjaW1hbCBtZXRob2RzIHRvIG1ha2Ugc3VyZSB0aGF0CisgIHRoZXkgYWNjZXB0IGFuIGludCBvciBsb25nIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuICBBbHNvIGZpeCBidWdneSBoYW5kbGluZyBvZgorICBsYXJnZSBhcmd1bWVudHMgKHRob3NlIHdpdGggY29lZmZpY2llbnQgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uKSBpbgorICBzaGlmdCBhbmQgcm90YXRlLgorCistIElzc3VlICM0NzUwOiBTdG9yZSB0aGUgYmFzZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGluIHRoZSBnemlwIEZOQU1FCisgIGhlYWRlciBhcyByZXF1aXJlZCBieSBSRkMgMTk1Mi4KKworLSBJc3N1ZSAjMTE4MDogQWRkZWQgYSBuZXcgZ2xvYmFsIG9wdGlvbiB0byBpZ25vcmUgfi8ucHlkaXN0dXRpbHMuY2ZnIGluCisgIERpc3R1dGlscy4KKworLSBJc3N1ZSAjNzIxODogRml4IHRlc3Rfc2l0ZSBmb3Igd2luMzIsIHRoZSBkaXJlY3RvcnkgY29tcGFyaXNvbiB3YXMgZG9uZSB3aXRoCisgIGFuIHVwcGVyY2FzZS4KKworLSBJc3N1ZSAjNzIwNTogRml4IGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiB1c2luZyBhIEJaMkZpbGUgb2JqZWN0IGZyb20gc2V2ZXJhbAorICB0aHJlYWRzIGF0IG9uY2UuCisKKy0gSXNzdWUgIzcwNzE6IGJ5dGUtY29tcGlsYXRpb24gaW4gRGlzdHV0aWxzIGlzIG5vdyBkb25lIHdpdGggcmVzcGVjdCB0bworICBzeXMuZG9udF93cml0ZV9ieXRlY29kZS4KKworLSBJc3N1ZSAjNzA2NjogYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZSBub3cgcmVzdG9yZXMgdGhlIGN3ZCBpZiBhbiBlcnJvciBpcworICByYWlzZWQuIEluaXRpYWwgcGF0Y2ggYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICM2MjE4OiBpby5TdHJpbmdJTyBhbmQgaW8uQnl0ZXNJTyBpbnN0YW5jZXMgYXJlIG5vdyBwaWNrbGFibGUgd2l0aAorICBwcm90b2NvbCAyLgorCistIElzc3VlICM3MDc3OiBsb2dnaW5nOiBTeXNMb2dIYW5kbGVyIG5vdyB0cmVhdHMgVW5pY29kZSBhcyBwZXIgUkZDIDU0MjQuCisKKy0gSXNzdWUgIzcwOTk6IERlY2ltYWwuaXNfbm9ybWFsIG5vdyByZXR1cm5zIFRydWUgZm9yIG51bWJlcnMgd2l0aCBleHBvbmVudAorICBsYXJnZXIgdGhhbiBlbWF4LgorCistIElzc3VlICM1ODMzOiBGaXggZXh0cmEgc3BhY2UgY2hhcmFjdGVyIGluIHJlYWRsaW5lIGNvbXBsZXRpb24gd2l0aCB0aGUgR05VCisgIHJlYWRsaW5lIGxpYnJhcnkgdmVyc2lvbiA2LjAuCisKKy0gSXNzdWUgIzcxMzM6IFNTTCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBuZXcgYnVmZmVyIEFQSS4KKworLSBJc3N1ZSAjNzE0OTogdXJsbGliIGZhaWxzIG9uIE9TWCBpbiB0aGUgcHJveHkgZGV0ZWN0aW9uIGNvZGUuCisKKy0gSXNzdWUgIzcwNjk6IE1ha2UgaW5zcGVjdC5pc2Fic3RyYWN0KCkgcmV0dXJuIGEgYm9vbGVhbi4KKworLSBBZGQgc3VwcG9ydCB0byB0aGUgYGBpaG9va3NgYCBtb2R1bGUgZm9yIHJlbGF0aXZlIGltcG9ydHMuCisKKy0gSXNzdWUgIzY4OTQ6IEZpeGVkIHRoZSBpc3N1ZSB1cmxsaWIyIGRvZXNuJ3QgcmVzcGVjdCAibm9fcHJveHkiIGVudmlyb25tZW50LgorCistIElzc3VlICM3MDg2OiBBZGRlZCBUQ1Agc3VwcG9ydCB0byBTeXNMb2dIYW5kbGVyLCBhbmQgdGlkaWVkIHVwIHNvbWUKKyAgYW5hY2hyb25pc21zIGluIHRoZSBjb2RlIHdoaWNoIHdlcmUgYSByZWxpYyBvZiAxLjUuMiBjb21wYXRpYmlsaXR5LgorCistIElzc3VlICM3MDgyOiBXaGVuIGZhbGxpbmcgYmFjayB0byB0aGUgTUlNRSAnbmFtZScgcGFyYW1ldGVyLCB0aGUgY29ycmVjdCBwbGFjZQorICB0byBsb29rIGZvciBpdCBpcyB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KKworLSBJc3N1ZSAjNzA0ODogRm9yY2UgRGVjaW1hbC5sb2diIHRvIHJvdW5kIGl0cyByZXN1bHQgd2hlbiB0aGF0IHJlc3VsdCBpcyB0b28KKyAgbGFyZ2UgdG8gZml0IGluIHRoZSBjdXJyZW50IHByZWNpc2lvbi4KKworLSBJc3N1ZSAjNjUxNjogQWRkZWQgb3duZXIvZ3JvdXAgc3VwcG9ydCB3aGVuIGNyZWF0aW5nIHRhciBhcmNoaXZlcyBpbgorICBEaXN0dXRpbHMuCisKKy0gSXNzdWUgIzcwMzE6IEFkZCBgYFRlc3RDYXNlLmFzc2VydChOb3QpSXNJbnN0YW5jZSgpYGAgbWV0aG9kcy4KKworLSBJc3N1ZSAjNjc5MDogTWFrZSBpdCBwb3NzaWJsZSBhZ2FpbiB0byBwYXNzIGFuIGBgYXJyYXkuYXJyYXlgYCB0bworICBgYGh0dHBsaWIuSFRUUENvbm5lY3Rpb24uc2VuZGBgLiAgUGF0Y2ggYnkgS2lyayBNY0RvbmFsZC4KKworLSBJc3N1ZSAjNjIzNiwgIzYzNDg6IEZpeCB2YXJpb3VzIGZhaWx1cmVzIGluIHRoZSBgaW9gIG1vZHVsZSB1bmRlciBBSVggYW5kCisgIG90aGVyIHBsYXRmb3Jtcywgd2hlbiB1c2luZyBhIG5vbi1nY2MgY29tcGlsZXIuICBQYXRjaCBieSBlZ3JlZW4uCisKKy0gSXNzdWUgIzY5NTQ6IEZpeGVkIGNyYXNoIHdoZW4gdXNpbmcgRElTVFVUSUxTX0RFQlVHIGZsYWcgaW4gRGlzdHV0aWxzLgorCistIElzc3VlICM2ODUxOiBGaXggdXJsbGliLnVybG9wZW4gY3Jhc2ggb24gc2Vjb25kYWlyeSB0aHJlYWRzIG9uIE9TWCAxMC42CisKKy0gSXNzdWUgIzQ2MDY6IFBhc3NpbmcgJ05vbmUnIGlmIGN0eXBlcyBhcmd0eXBlIGlzIHNldCB0byBQT0lOVEVSKC4uLikgIGRvZXMgbm93CisgIGFsd2F5cyByZXN1bHQgaW4gTlVMTC4KKworLSBJc3N1ZSAjNTA0MjogY3R5cGVzIFN0cnVjdHVyZSBzdWItc3ViY2xhc3MgZG9lcyBub3cgaW5pdGlhbGl6ZSBjb3JyZWN0bHkgd2l0aAorICBiYXNlIGNsYXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorCistIElzc3VlICM2OTM4OiBGaXggYSBUeXBlRXJyb3IgaW4gc3RyaW5nIGZvcm1hdHRpbmcgb2YgYSBtdWx0aXByb2Nlc3NpbmcgZGVidWcKKyAgbWVzc2FnZS4KKworLSBJc3N1ZSAjNjYzNTogRml4IHByb2ZpbGVyIHByaW50aW5nIHVzYWdlIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzY4NTY6IEFkZCBhIGZpbHRlciBrZXl3b3JkIGFyZ3VtZW50IHRvIFRhckZpbGUuYWRkKCkuCisKKy0gSXNzdWUgIzYxNjM6IEZpeGVkIEhQLVVYIHJ1bnRpbWUgbGlicmFyeSBkaXIgb3B0aW9ucyBpbgorICBkaXN0dXRpbHMudW5peGNvbXBpbGVyLiAgSW5pdGlhbCBwYXRjaCBieSBTcmlkaGFyIFJhdG5ha3VtYXIgYW5kIE1pY2hhZWwKKyAgSGF1YmVud2FsbG5lci4KKworLSBJc3N1ZSAjNjg1NzogRGVmYXVsdCBmb3JtYXQoKSBhbGlnbm1lbnQgc2hvdWxkIGJlICc+JyBmb3IgRGVjaW1hbCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzY3OTU6IGludChEZWNpbWFsKCduYW4nKSkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nCisgIE5hTiBvciByYWlzaW5nIEludmFsaWRDb250ZXh0LiAgQWxzbywgZml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbgorICBsb25nKERlY2ltYWwoJ25hbicpKS4KKworLSBJc3N1ZSAjNjg1MDogRml4IGJ1ZyBpbiBEZWNpbWFsLl9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyIGZvciBmb3JtYXRzIHdpdGggbm8KKyAgdHlwZSBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzQ5Mzc6IHBsYXQtbWFjL2J1bmRsZWJ1aWxkZXIgcmVmZXJzIHRvIG5vbi1leGlzdGluZyB2ZXJzaW9uLnBsaXN0LgorCistIElzc3VlICM2ODM4OiBVc2UgYSBsaXN0IHRvIGFjY3VtdWxhdGUgdGhlIHZhbHVlIGluc3RlYWQgb2YgcmVwZWF0ZWRseQorICBjb25jYXRlbmF0aW5nIHN0cmluZ3MgaW4gaHR0cGxpYidzIEhUVFBSZXNwb25zZS5fcmVhZF9jaHVua2VkIHByb3ZpZGluZyBhCisgIHNpZ25pZmljYW50IHNwZWVkIGluY3JlYXNlIHdoZW4gZG93bmxvYWRpbmcgbGFyZ2UgZmlsZXMgc2VydmVuZCB3aXRoIGEKKyAgVHJhbnNmZXItRW5jb2Rpbmcgb2YgJ2NodW5rZWQnLgorCistIElzc3VlICM1Mjc1OiBJbiBDb29raWUncyBDb29raWUubG9hZCgpLCBwcm9wZXJseSBoYW5kbGUgbm9uLXN0cmluZyBhcmd1bWVudHMKKyAgYXMgZG9jdW1lbnRlZC4KKworLSBJc3N1ZSAjMjY2NjogSGFuZGxlIEJST1dTRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgcHJvcGVybHkgZm9yIHVua25vd24gYnJvd3NlcgorICBuYW1lcyBpbiB0aGUgd2ViYnJvd3NlciBtb2R1bGUuCisKKy0gSXNzdWUgIzYwNTQ6IERvIG5vdCBub3JtYWxpemUgc3RvcmVkIHBhdGhuYW1lcyBpbiB0YXJmaWxlLgorCistIElzc3VlICM2Nzk0OiBGaXggRGVjaW1hbC5jb21wYXJlX3RvdGFsIGFuZCBEZWNpbWFsLmNvbXBhcmVfdG90YWxfbWFnOiBOYU4KKyAgcGF5bG9hZHMgYXJlIG5vdyBvcmRlcmVkIGJ5IGludGVnZXIgdmFsdWUgcmF0aGVyIHRoYW4gbGV4aWNvZ3JhcGhpY2FsbHkuCisKKy0gSXNzdWUgIzY2OTM6IE5ldyBmdW5jdGlvbnMgaW4gc2l0ZS5weSB0byBnZXQgdXNlci9nbG9iYWwgc2l0ZSBwYWNrYWdlcyBwYXRocy4KKworLSBUaGUgdGhyZWFkLmxvY2sgdHlwZSBub3cgc3VwcG9ydHMgd2VhayByZWZlcmVuY2VzLgorCistIElzc3VlICMxMzU2OTY5OiBBZGQgbWlzc2luZyBpbmZvIG1ldGhvZHMgaW4gVGl4LkhMaXN0LgorCistIElzc3VlICMxNTIyNTg3OiBOZXcgY29uc3RhbnRzIGFuZCBtZXRob2RzIGZvciB0aGUgVGl4LkdyaWQgd2lkZ2V0LgorCistIElzc3VlICMxMjUwNDY5OiBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiBUaXguUGFuZWRXaW5kb3cucGFuZXMuCisKKy0gSXNzdWUgIzExMTk2NzM6IERvIG5vdCBvdmVycmlkZSBUa2ludGVyLlRleHQgbWV0aG9kcyB3aGVuIGNyZWF0aW5nIGEKKyAgU2Nyb2xsZWRUZXh0LgorCistIElzc3VlICM2NjY1OiBGaXggZm5tYXRjaCB0byBwcm9wZXJseSBtYXRjaCBmaWxlbmFtZXMgd2l0aCBuZXdsaW5lcyBpbiB0aGVtLgorCistIElzc3VlICMxMTM1OiBBZGQgdGhlIFhWaWV3IGFuZCBZVmlldyBtaXgtaW5zIHRvIGF2b2lkIGR1cGxpY2F0aW5nIHRoZSB4dmlldyoKKyAgYW5kIHl2aWV3KiBtZXRob2RzLgorCistIElzc3VlICM2NjI5OiBGaXggYSBkYXRhIGNvcnJ1cHRpb24gaXNzdWUgaW4gdGhlIG5ldyBgaW9gIHBhY2thZ2UsIHdoaWNoIGNvdWxkCisgIG9jY3VyIHdoZW4gd3JpdGluZyB0byBhIEJ1ZmZlcmVkUmFuZG9tIG9iamVjdCAoZS5nLiBhIGZpbGUgb3BlbmVkIGluICJyYisiIG9yCisgICJ3YisiIG1vZGUpIGFmdGVyIGhhdmluZyBidWZmZXJlZCBhIGNlcnRhaW4gYW1vdW50IG9mIGRhdGEgZm9yIHJlYWRpbmcuIFRoaXMKKyAgYnVnIHdhcyBub3QgcHJlc2VudCBpbiB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzQ2NjA6IElmIGEgbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUucHV0KCkgd2FzIHByZWVtcHRlZCwgaXQgd2FzCisgIHBvc3NpYmxlIHRvIGdldCBhIHNwdXJpb3VzICd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnIGVycm9yLgorCistIElzc3VlICMxNjI4MjA1OiBTb2NrZXQgZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5IHNvY2tldC5zb2NrZXQubWFrZWZpbGUoKSBub3cKKyAgcHJvcGVybHkgaGFuZGxlcyBFSU5UUiB3aXRoaW4gdGhlIHJlYWQsIHJlYWRsaW5lLCB3cml0ZSAmIGZsdXNoIG1ldGhvZHMuICBUaGUKKyAgc29ja2V0LnNlbmRhbGwoKSBtZXRob2Qgbm93IHByb3Blcmx5IGhhbmRsZXMgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxzLgorCistIElzc3VlICM2NTk1OiBUaGUgRGVjaW1hbCBjb25zdHJ1Y3RvciBub3cgYWxsb3dzIGFyYml0cmFyeSBVbmljb2RlIGRlY2ltYWwKKyAgZGlnaXRzIGluIGlucHV0LCBhcyByZWNvbW1lbmRlZCBieSB0aGUgc3RhbmRhcmQuICBQcmV2aW91c2x5IGl0IHdhcyByZXN0cmljdGVkCisgIHRvIGFjY2VwdGluZyBbMC05XS4KKworLSBJc3N1ZSAjNjUxMTogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcGZpbGUgKGluc3RlYWQgb2YgYW4gSU9FcnJvcikgd2hlbgorICBvcGVuaW5nIGFuIGVtcHR5IG9yIHZlcnkgc21hbGwgZmlsZS4KKworLSBJc3N1ZSAjNjU1MzogRml4ZWQgYSBjcmFzaCBpbiBjUGlja2xlLmxvYWQoKSwgd2hlbiBnaXZlbiBhIGZpbGUtbGlrZSBvYmplY3QKKyAgY29udGFpbmluZyBpbmNvbXBsZXRlIGRhdGEuCisKKy0gSXNzdWUgIzY1NDU6IFJlbW92ZWQgYXNzZXJ0IHN0YXRlbWVudHMgaW4gZGlzdHV0aWxzLkV4dGVuc2lvbiwgc28gdGhlIGJlaGF2aW9yCisgIGlzIHNpbWlsYXIgd2hlbiB1c2VkIHdpdGggLU8uCisKKy0gdW5pdHRlc3QgaGFzIGJlZW4gc3BsaXQgdXAgaW50byBhIHBhY2thZ2UuICBBbGwgb2xkIG5hbWVzIHNob3VsZCBzdGlsbCB3b3JrLgorCistIElzc3VlICM2NDMxOiBNYWtlIEZyYWN0aW9uIHR5cGUgcmV0dXJuIE5vdEltcGxlbWVudGVkIHdoZW4gaXQgZG9lc24ndCBrbm93IGhvdworICB0byBoYW5kbGUgYSBjb21wYXJpc29uIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICBBbHNvIGFkZCBjb3JyZWN0IGhhbmRsaW5nCisgIG9mIGluZmluaXRpZXMgYW5kIG5hbnMgZm9yIGNvbXBhcmlzb25zIHdpdGggZmxvYXQuCisKKy0gSXNzdWUgIzY0MTU6IEZpeGVkIHdhcm5pbmdzLndhcm4gc2VnZmF1bHQgb24gYmFkIGZvcm1hdHRlZCBzdHJpbmcuCisKKy0gSXNzdWUgIzY0NjY6IE5vdyBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyIGFuZCBkaXN0dXRpbHMuZW14Y2NvbXBpbGVyIHVzZXMgdGhlCisgIHNhbWUgcmVmYWN0b3JlZCBmdW5jdGlvbiB0byBnZXQgZ2NjL2xkL2RsbHdyYXAgdmVyc2lvbnMgbnVtYmVycy4gIEl0J3MKKyAgYGBkaXN0dXRpbHMudXRpbC5nZXRfY29tcGlsZXJfdmVyc2lvbnMoKWBgLiAgQWRkZWQgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yCisgIHRoZSBvYnNvbGV0ZSBnZXRfdmVyc2lvbnMoKSBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzY0MzM6IEZpeGVkIGlzc3VlcyB3aXRoIG11bHRpcHJvY2Vzc2luZy5wb29sLm1hcCBoYW5naW5nIG9uIGVtcHR5IGxpc3QuCisKKy0gSXNzdWUgIzYzMTQ6IGxvZ2dpbmc6IEV4dHJhIGNoZWNrcyBvbiB0aGUgImxldmVsIiBhcmd1bWVudCBpbiBtb3JlIHBsYWNlcy4KKworLSBJc3N1ZSAjMjYyMjogRml4ZWQgYW4gSW1wb3J0RXJyb3Igd2hlbiBpbXBvcnRpbmcgZW1haWwubWVzc3NhZ2UgZnJvbSBhCisgIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gYnVpbHQgd2l0aCBweTJleGUgb3IgcHkyYXBwLgorCistIElzc3VlICM2NDU1OiBGaXhlZCB0ZXN0X2J1aWxkX2V4dCB1bmRlciB3aW4zMi4KKworLSBJc3N1ZSAjNjM3NzogRW5hYmxlZCB0aGUgY29tcGlsZXIgb3B0aW9uLCBhbmQgZGVwcmVjYXRlIGl0cyB1c2FnZSBhcyBhbgorICBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzY0MTM6IEZpeGVkIHRoZSBsb2cgbGV2ZWwgaW4gZGlzdHV0aWxzLmRpc3QgZm9yIGFubm91bmNlLgorCistIElzc3VlICMzMzkyOiBUaGUgc3VicHJvY2VzcyBjb21tdW5pY2F0ZSgpIG1ldGhvZCBubyBsb25nZXIgZmFpbHMgaW4gc2VsZWN0KCkKKyAgd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBsYXJnZTsgY29tbXVuaWNhdGUoKSBub3cgdXNlcyBwb2xsKCkgd2hlbiBwb3NzaWJsZS4KKworLSBJc3N1ZSAjNjQwMzogRml4ZWQgcGFja2FnZSBwYXRoIHVzYWdlIGluIGJ1aWxkX2V4dC4KKworLSBJc3N1ZXMgIzUxNTUsICM1MzEzLCAjNTMzMTogbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuX2Jvb3RzdHJhcCB3YXMKKyAgdW5jb25kaXRpb25hbGx5IGNhbGxpbmcgIm9zLmNsb3NlKHN5cy5zdGRpbi5maWxlbm8oKSkiIHJlc3VsdGluZyBpbiBmaWxlCisgIGRlc2NyaXB0b3IgZXJyb3JzLgorCistIElzc3VlICM2MzY1OiBEaXN0dXRpbHMgYnVpbGRfZXh0IGlucGxhY2UgbW9kZSB3YXMgY29weWluZyB0aGUgY29tcGlsZWQKKyAgZXh0ZW5zaW9uIGluIGEgc3ViZGlyZWN0b3J5IGlmIHRoZSBleHRlbnNpb24gbmFtZSBoYWQgZG90cy4KKworLSBJc3N1ZSAjNjM0NDogRml4ZWQgYSBjcmFzaCBvZiBtbWFwLnJlYWQoKSB3aGVuIHBhc3NlZCBhIG5lZ2F0aXZlIGFyZ3VtZW50LgorCistIElzc3VlICM1MjMwOiBweWRvYyB3b3VsZCByZXBvcnQgbm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBpZiBhIG1vZHVsZSBnZW5lcmF0ZWQgYQorICAnbm90IGZvdW5kJyBpbXBvcnQgZXJyb3Igd2hlbiBsb2FkZWQ7IGl0IG5vdyByZXBvcnRzIHRoZSBpbXBvcnQgZXJyb3JzLgorICBUaGFua3MgdG8gTHVjYXMgUHJhZG8gTWVsbyBmb3IgaW5pdGlhbCBmaXggYW5kIGNvbGxhYm9yYXRpb24gb24gdGhlIHRlc3RzLgorCistIElzc3VlICM2MzE0OiBgYGxvZ2dpbmcuYmFzaWNDb25maWcoKWBgIHBlcmZvcm1zIGV4dHJhIGNoZWNrcyBvbiB0aGUgImxldmVsIgorICBhcmd1bWVudC4KKworLSBJc3N1ZSAjNjE2NDogQWRkZWQgYW4gQUlYIHNwZWNpZmljIGxpbmtlciBhcmd1bWVudCBpbiBEaXN0dXRpbHMgdW5peGNvbXBpbGVyLgorICBPcmlnaW5hbCBwYXRjaCBieSBTcmlkaGFyIFJhdG5ha3VtYXIuCisKKy0gSXNzdWUgIzYyNzQ6IEZpeGVkIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgbGVhayBpbiBzdWJwcm9jZXNzLnB5LgorCistIElzc3VlICM2MTg5OiBSZXN0b3JlZCBjb21wYXRpYmlsaXR5IG9mIHN1YnByb2Nlc3MucHkgd2l0aCBQeXRob24gMi4yLgorCistIElzc3VlICM2Mjg3OiBBZGRlZCB0aGUgbGljZW5zZSBmaWVsZCBpbiBEaXN0dXRpbHMgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjI4NjogTm93IERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCBpcyBiYXNlZCBvbiB1cmxsaWIyIGluc3RlYWQgb2YKKyAgaHR0cGxpYiwgYWxsb3dpbmcgdGhlIHVzYWdlIG9mIGh0dHBfcHJveHkuCisKKy0gSXNzdWUgIzYyNzE6IG1tYXAgdHJpZWQgdG8gY2xvc2UgaW52YWxpZCBmaWxlIGhhbmRsZSAoLTEpIGZvciBhbm9ueW1vdXMgbWFwcworICBvbiBVbml4LgorCistIElzc3VlICM2MjE1OiBBbGwgYnVnIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMgZnJvbSB0aGUgUHl0aG9uIDMuMSBpbyBsaWJyYXJ5CisgIChpbmNsdWRpbmcgdGhlIGZhc3QgQyBpbXBsZW1lbnRhdGlvbikgaGF2ZSBiZWVuIGJhY2twb3J0ZWQgdG8gdGhlIHN0YW5kYXJkCisgIGBgaW9gYCBtb2R1bGUuCisKKy0gSXNzdWUgIzYyNTg6IFN1cHBvcnQgQU1ENjQgaW4gYmRpc3RfbXNpLgorCistIElzc3VlICM2MjUyOiBGaXhlZCBidWcgaW4gbmV4dCByb2xsb3ZlciB0aW1lIGNvbXB1dGF0aW9uIGluCisgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci4KKworLSBJc3N1ZSAjNjI2MzogRml4ZWQgc3ludGF4IGVycm9yIGluIGRpc3R1dGlscy5jeWd3aW5jb21waWxlci4KKworLSBJc3N1ZSAjNTIwMTogZGlzdHV0aWxzLnN5c2NvbmZpZy5wYXJzZV9tYWtlZmlsZSgpIG5vdyB1bmRlcnN0YW5kcyBgYCQkYGAgaW4KKyAgTWFrZWZpbGVzLiAgVGhpcyBwcmV2ZW50cyBjb21waWxlIGVycm9ycyB3aGVuIHVzaW5nIHN5bnRheCBsaWtlOgorICBgYExERkxBR1M9Jy1ycGF0aD1cJCRMSUI6L3NvbWUvb3RoZXIvcGF0aCdgYC4gIFBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIElzc3VlICM1NzY3OiBSZW1vdmVkIHNnbWxvcCBzdXBwb3J0IGZyb20geG1scnBjbGliLgorCistIElzc3VlICM2MTMxOiB0ZXN0X21vZHVsZWZpbmRlciBsZWFrZWQgd2hlbiBydW4gYWZ0ZXIgdGVzdF9kaXN0dXRpbHMuICBQYXRjaCBieQorICBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjNjA0ODogTm93IERpc3R1dGlscyB1c2VzIHRoZSB0YXJmaWxlIG1vZHVsZSBpbiBhcmNoaXZlX3V0aWwuCisKKy0gSXNzdWUgIzUxNTA6IElETEUncyBmb3JtYXQgbWVudSBub3cgaGFzIGFuIG9wdGlvbiB0byBzdHJpcCB0cmFpbGluZworICB3aGl0ZXNwYWNlLgorCistIElzc3VlICM2MTIxOiBweWRvYyBub3cgaWdub3JlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgaW4gdGhlIGFyZ3VtZW50IHRvCisgIHRoZSAnaGVscCcgZnVuY3Rpb24uCisKKy0gSW4gdW5pdHRlc3QsIHVzaW5nIGEgc2tpcHBpbmcgZGVjb3JhdG9yIG9uIGEgY2xhc3MgaXMgbm93IGVxdWl2YWxlbnQgdG8KKyAgc2tpcHBpbmcgZXZlcnkgdGVzdCBvbiB0aGUgY2xhc3MuICBUaGUgQ2xhc3NUZXN0U3VpdGUgY2xhc3MgaGFzIGJlZW4gcmVtb3ZlZC4KKworLSBJc3N1ZSAjNjA1MDogRG9uJ3QgZmFpbCBleHRyYWN0aW5nIGEgZGlyZWN0b3J5IGZyb20gYSB6aXBmaWxlIGlmIHRoZSBkaXJlY3RvcnkKKyAgYWxyZWFkeSBleGlzdHMuCisKKy0gSXNzdWUgIzUzMTE6IGJkaXN0X21zaSBjYW4gbm93IGJ1aWxkIHBhY2thZ2VzIHRoYXQgZG8gbm90IGRlcGVuZCBvbiBhIHNwZWNpZmljCisgIFB5dGhvbiB2ZXJzaW9uLgorCistIElzc3VlICMxMzA5MzUyOiBmY250bCBub3cgY29udmVydHMgaXRzIHRoaXJkIGFyZ3VtZW50cyB0byBhIEMgYGxvbmdgIHJhdGhlcgorICB0aGFuIGFuIGludCwgd2hpY2ggbWFrZXMgc29tZSBvcGVyYXRpb25zIHBvc3NpYmxlIHVuZGVyIDY0LWJpdCBMaW51eCAoZS5nLgorICBETl9NVUxUSVNIT1Qgd2l0aCBGX05PVElGWSkuCisKKy0gSXNzdWUgIzE0MjQxNTI6IEZpeCBmb3IgaHR0cGxpYiwgdXJsbGliMiB0byBzdXBwb3J0IFNTTCB3aGlsZSB3b3JraW5nIHRocm91Z2gKKyAgcHJveHkuIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzdG9waGVyIExpLCBjaGFuZ2VzIG1hZGUgYnkgU2VudGhpbCBLdW1hcmFuLgorCistIElzc3VlICMxOTgzOiBGaXggZnVuY3Rpb25zIHRha2luZyBvciByZXR1cm5pbmcgYSBwcm9jZXNzIGlkZW50aWZpZXIgdG8gdXNlIHRoZQorICBkZWRpY2F0ZWQgQyB0eXBlIGBgcGlkX3RgYCBpbnN0ZWFkIG9mIGEgQyBgYGludGBgLiAgU29tZSBwbGF0Zm9ybXMgaGF2ZSBhCisgIHByb2Nlc3MgaWRlbnRpZmllciB0eXBlIHdpZGVyIHRoYW4gdGhlIHN0YW5kYXJkIEMgaW50ZWdlciB0eXBlLgorCistIElzc3VlICM0MDY2OiBzbXRwbGliLlNNVFBfU1NMLl9nZXRfc29ja2V0IG5vdyBjb3JyZWN0bHkgcmV0dXJucyB0aGUgc29ja2V0LgorICBQYXRjaCBieSBGYXJoYW4gQWhtYWQsIHRlc3QgYnkgTWFyY2luIEJhY2hyeS4KKworLSBJc3N1ZSAjNjA2MjogSW4gZGlzdHV0aWxzLCBmaXhlZCB0aGUgcGFja2FnZSBvcHRpb24gb2YgYnVpbGRfZXh0LiAgRmVlZGJhY2sKKyAgYW5kIHRlc3RzIG9uIHB5d2luMzIgYnkgVGltIEdvbGRlbi4KKworLSBJc3N1ZSAjNjA1MzogRml4ZWQgZGlzdHV0aWxzIHRlc3RzIG9uIHdpbjMyLiAgUGF0Y2ggYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzYwNDY6IEZpeGVkIHRoZSBsaWJyYXJ5IGV4dGVuc2lvbiB3aGVuIGRpc3R1dGlscyBidWlsZF9leHQgaXMgdXNlZCBpbgorICBwbGFjZS4gIEluaXRpYWwgcGF0Y2ggYnkgUm91bWVuIFBldHJvdi4KKworLSBJc3N1ZSAjNjA0MTogTm93IGRpc3R1dGlscyBgc2Rpc3RgIGFuZCBgcmVnaXN0ZXJgIGNvbW1hbmRzIHVzZSBgY2hlY2tgIGFzIGEKKyAgc3ViY29tbWFuZC4KKworLSBJc3N1ZSAjMjExNjogV2VhayByZWZlcmVuY2VzIGFuZCB3ZWFrIGRpY3Rpb25hcmllcyBub3cgc3VwcG9ydCBjb3B5KClpbmcgYW5kCisgIGRlZXBjb3B5KClpbmcuCisKKy0gSXNzdWUgIzE2NTU6IE1ha2UgaW1hcGxpYiBJUHY2LWNhcGFibGUuICBQYXRjaCBieSBEZXJlayBNb3JyLgorCistIElzc3VlICM1OTE4OiBGaXggYSBjcmFzaCBpbiB0aGUgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTY2NDogTWFrZSBubnRwbGliIElQdjYtY2FwYWJsZS4gIFBhdGNoIGJ5IERlcmVrIE1vcnIuCisKKy0gSXNzdWUgIzYwMjI6IEEgdGVzdCBmaWxlIHdhcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGJ5CisgIHRlc3RfZ2V0X291dHB1dHMgaW4gRGlzdHV0aWxzLgorCistIElzc3VlICM0MDUwOiBpbnNwZWN0LmZpbmRzb3VyY2UvZ2V0c291cmNlIG5vdyByYWlzZSBhbiBJT0Vycm9yIGlmIHRoZSAnc291cmNlJworICBmaWxlIGlzIGEgYmluYXJ5LiAgUGF0Y2ggYnkgQnJvZGllIFJhbywgdGVzdHMgYnkgRGFuaWVsIERpbml6LgorCistIElzc3VlICM1OTc3OiBkaXN0dXRpbHMgYnVpbGRfZXh0LmdldF9vdXRwdXRzIHdhcyBub3QgdGFraW5nIGludG8gYWNjb3VudCB0aGUKKyAgaW5wbGFjZSBvcHRpb24uICBJbml0aWFsIHBhdGNoIGJ5IGt4cm9iZXJ0by4KKworLSBJc3N1ZSAjNTk4NDogZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0LmNoZWNrX2V4dGVuc2lvbnNfbGlzdCBjaGVja3Mgd2VyZQorICBicm9rZW4gZm9yIG9sZC1zdHlsZSBleHRlbnNpb25zLgorCistIElzc3VlICM1OTcxOiBTdHJlYW1IYW5kbGVyLmhhbmRsZUVycm9yIG5vdyBzd2FsbG93cyBJT0Vycm9ycyB3aGljaCBvY2N1ciB3aGVuCisgIHRyeWluZyB0byBwcmludCBhIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjNTk3NjogRml4ZWQgRGlzdHV0aWxzIHRlc3RfY2hlY2tfZW52aXJvbi4KKworLSBJc3N1ZSAjNTkwMDogRW5zdXJlIFJVTlBBVEggaXMgYWRkZWQgdG8gZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBSUEFUSCBpZiBHTlUgbGQKKyAgaXMgdXNlZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIElzc3VlICM1OTQxOiBEaXN0dXRpbHMgYnVpbGRfY2xpYiBjb21tYW5kIHdhcyBub3Qgd29ya2luZyBhbnltb3JlIGJlY2F1c2Ugb2YKKyAgYW4gaW5jb21wbGV0ZSBjb3N0dW1pemF0aW9uIG9mIHRoZSBhcmNoaXZlciBjb21tYW5kLiAgQWRkZWQgQVJGTEFHUyBpbiB0aGUKKyAgTWFrZWZpbGUgYmVzaWRlcyBBUiBhbmQgbWFrZSBEaXN0dXRpbHMgdXNlIGl0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgRGF2aWQKKyAgQ291cm5hcGVhdS4KKworLSBJc3N1ZSAjNTk1NTogYWlmYydzIGNsb3NlIG1ldGhvZCBkaWQgbm90IGNsb3NlIHRoZSBmaWxlIGl0IHdyYXBwZWQsIG5vdyBpdAorICBkb2VzLiAgVGhpcyBhbHNvIG1lYW5zIGdldGZwIG1ldGhvZCBub3cgcmV0dXJucyB0aGUgcmVhbCBmcC4KKworLSBJc3N1ZSAjNDg3NTogT24gd2luMzIsIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBkb2VzIG5vIGxvbmdlciByZXR1cm4KKyAgZGlyZWN0b3JpZXMuCisKKy0gSXNzdWUgIzUxNDI6IEFkZCB0aGUgYWJpbGl0eSB0byBza2lwIG1vZHVsZXMgd2hpbGUgc3RlcHBpbmcgdG8gcGRiLgorCistIElzc3VlICMxMzA5NTY3OiBGaXggbGluZWNhY2hlIGJlaGF2aW9yIG9mIHN0cmlwcGluZyBzdWJkaXJlY3RvcmllcyB3aGVuCisgIGxvb2tpbmcgZm9yIGZpbGVzIGdpdmVuIGJ5IGEgcmVsYXRpdmUgZmlsZW5hbWUuCisKKy0gSXNzdWUgIzU2OTI6IEluIGBgemlwZmlsZS5aaXBmaWxlYGAsIGZpeCB3cm9uZyBwYXRoIGNhbGN1bGF0aW9uIHdoZW4KKyAgZXh0cmFjdGluZyBhIGZpbGUgdG8gdGhlIHJvb3QgZGlyZWN0b3J5LgorCistIElzc3VlICM1OTEzOiBgYG9zLmxpc3RkaXIoKWBgIHNob3VsZCBmYWlsIGZvciBlbXB0eSBwYXRoIG9uIHdpbmRvd3MuCisKKy0gSXNzdWUgIzUwODQ6IFVucGlja2xpbmcgbm93IGludGVybnMgdGhlIGF0dHJpYnV0ZSBuYW1lcyBvZiBwaWNrbGVkIG9iamVjdHMsCisgIHNhdmluZyBtZW1vcnkgYW5kIGF2b2lkaW5nIGdyb3d0aCBpbiBzaXplIG9mIHN1YnNlcXVlbnQgcGlja2xlcy4gIFByb3Bvc2FsIGFuZAorICBvcmlnaW5hbCBwYXRjaCBieSBKYWtlIE1jR3VpcmUuCisKKy0gSXNzdWUgIzMwMDI6IGBgc2h1dGlsLmNvcHlmaWxlKClgYCBhbmQgYGBzaHV0aWwuY29weXRyZWUoKWBgIG5vdyByYWlzZSBhbgorICBlcnJvciB3aGVuIGEgbmFtZWQgcGlwZSBpcyBlbmNvdW50ZXJlZCwgcmF0aGVyIHRoYW4gYmxvY2tpbmcgaW5maW5pdGVseS4KKworLSBJc3N1ZSAjMzk1OTogVGhlIGlwYWRkciBtb2R1bGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisgIENvbnRyaWJ1dGVkIGJ5IEdvb2dsZS4KKworLSBJc3N1ZSAjMjI0NTogYWlmYyBub3cgc2tpcHMgY2h1bmsgdHlwZXMgaXQgZG9lc24ndCByZWNvZ25pemUsIHBlciBzcGVjLgorCistIElzc3VlICM1ODc0OiBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWdfY21kIGlzIG5vdCBsb2NhbGUtc2Vuc2l0aXZlIGFueW1vcmUuCisKKy0gSXNzdWUgIzQzMDU6IGN0eXBlcyBzaG91bGQgbm93IGJ1aWxkIGFnYWluIG9uIG1pcHNlbC1saW51eC1nbnUKKworLSBJc3N1ZSAjMTczNDIzNDogTWFzc2l2ZWx5IHNwZWVkdXAgYGB1bmljb2RlZGF0YS5ub3JtYWxpemUoKWBgIHdoZW4gdGhlIHN0cmluZworICBpcyBhbHJlYWR5IGluIG5vcm1hbGl6ZWQgZm9ybSwgYnkgcGVyZm9ybWluZyBhIHF1aWNrIGNoZWNrIGJlZm9yZWhhbmQuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFJhdWxpIFJ1b2hvbmVuLgorCistIElzc3VlICM1ODUzOiBDYWxsaW5nIGEgZnVuY3Rpb24gb2YgdGhlIG1pbWV0eXBlcyBtb2R1bGUgZnJvbSBzZXZlcmFsIHRocmVhZHMKKyAgYXQgb25jZSBjb3VsZCBoaXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpZiB0aGUgbWltZXR5cGVzIGRhdGFiYXNlIGhhZG4ndCBiZWVuCisgIGluaXRpYWxpemVkIGJlZm9yZS4KKworLSBJc3N1ZSAjNTg1NDogVXBkYXRlZCBfX2FsbF9fIHRvIGluY2x1ZGUgc29tZSBtaXNzaW5nIG5hbWVzIGFuZCByZW1vdmUgc29tZQorICBuYW1lcyB3aGljaCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLgorCistIElzc3VlICM1ODEwOiBGaXhlZCBEaXN0dXRpbHMgdGVzdF9idWlsZF9zY3JpcHRzIHNvIGl0IHVzZXMKKyAgYGBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKClgYC4KKworLSBJc3N1ZSAjNDk1MTogRml4ZWQgZmFpbHVyZSBpbiB0ZXN0X2h0dHBzZXJ2ZXJzLgorCistIElzc3VlICMzMTAyOiBBbGwgZ2xvYmFsIHN5bWJvbHMgdGhhdCB0aGUgX2N0eXBlcyBleHRlbnNpb24gZGVmaW5lcyBhcmUgbm93CisgIHByZWZpeGVkIHdpdGggJ1B5JyBvciAnX2N0eXBlcycuCisKKy0gSXNzdWUgIzUwNDE6IGN0eXBlcyBkb2VzIG5vdyBhbGxvdyBwaWNrbGluZyB3aWRlIGNoYXJhY3Rlci4KKworLSBJc3N1ZSAjNTgxMjogRm9yIHRoZSB0d28tYXJndW1lbnQgZm9ybSBvZiB0aGUgRnJhY3Rpb24gY29uc3RydWN0b3IsCisgIGBgRnJhY3Rpb24obSwgbilgYCwgbSBhbmQgbiBhcmUgcGVybWl0dGVkIHRvIGJlIGFyYml0cmFyeSBSYXRpb25hbCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzU4MTI6IEZyYWN0aW9uKCcxZTYnKSBpcyB2YWxpZDogbW9yZSBnZW5lcmFsbHksIGFueSBzdHJpbmcgdGhhdCdzIHZhbGlkCisgIGZvciBmbG9hdCgpIGlzIG5vdyB2YWxpZCBmb3IgRnJhY3Rpb24oKSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHN0cmluZ3MKKyAgcmVwcmVzZW50aW5nIE5hTnMgYW5kIGluZmluaXRpZXMuCisKKy0gSXNzdWUgIzU3OTU6IEZpeGVkIHRlc3RfZGlzdHV0aWxzIGZhaWx1cmUgb24gRGViaWFuIHBwYy4KKworLSBJc3N1ZSAjNTc2ODogRml4ZWQgYnVnIGluIFVuaWNvZGUgb3V0cHV0IGxvZ2ljIGFuZCB0ZXN0IGNhc2UgZm9yIHNhbWUuCisKKy0gSXNzdWUgIzExNjEwMzE6IEZpeCByZWFkd3JpdGUgc2VsZWN0IGZsYWcgaGFuZGxpbmc6IFBPTExQUkkgbm93IHJlc3VsdHMgaW4gYQorICBoYW5kbGVfZXhwdF9ldmVudCBjYWxsLCBub3QgaGFuZGxlX3JlYWRfZXZlbnQsIGFuZCBQT0xMRVJSIGFuZCBQT0xMTlZBTCBub3cKKyAgY2FsbCBoYW5kbGVfY2xvc2UsIG5vdCBoYW5kbGVfZXhwdF9ldmVudC4gIEFsc28sIGRpc3BhdGNoZXIgbm93IGhhcyBhbgorICAnaWdub3JlX2xvZ190eXBlcycgYXR0cmlidXRlIGZvciBzdXBwcmVzc2luZyBsb2cgbWVzc2FnZXMsIHdoaWNoIGlzIHNldCB0bworICAnd2FybmluZycgYnkgZGVmYXVsdC4KKworLSBJc3N1ZSAjNTYwNzogRml4ZWQgRGlzdHV0aWxzIHRlc3RfZ2V0X3BsYXRmb3JtIGZvciBNYWMgT1MgWCBmYXQgYmluYXJpZXMuCisKKy0gSXNzdWUgIzU3NDE6IERvbid0IGRpc2FsbG93ICIlJSIgKHdoaWNoIGlzIGFuIGVzY2FwZSBmb3IgIiUiKSB3aGVuIHNldHRpbmcgYQorICB2YWx1ZSBpbiBTYWZlQ29uZmlnUGFyc2VyLgorCistIElzc3VlICM1NzMyOiBBZGRlZCBhIG5ldyBjb21tYW5kIGluIERpc3R1dGlsczogY2hlY2suCiAKIC0gSXNzdWUgIzU3MzE6IERpc3R1dGlscyBiZGlzdF93aW5pbnN0IG5vIGxvbmdlciB3b3JrZWQgb24gbm9uLVdpbmRvd3MKLSAgcGxhdGZvcm1zLiBJbml0aWFsIHBhdGNoIGJ5IFBhdWwgTW9vcmUuCisgIHBsYXRmb3Jtcy4gIEluaXRpYWwgcGF0Y2ggYnkgUGF1bCBNb29yZS4KIAotLSBJc3N1ZSAjMTQ5MTQzMTogRml4ZWQgZGlzdHV0aWxzLmZpbGVsaXN0Lmdsb2JfdG9fcmUgZm9yIGVkZ2UgY2FzZXMuCi0gIEluaXRpYWwgZml4IGJ5IFdheW5lIERhdmlzb24uCistIElzc3VlICMyMjU0OiBGaXggQ0dJSFRUUFNlcnZlciBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlLiAgUmVsYXRpdmUgcGF0aHMgYXJlIG5vdworICBjb2xsYXBzZWQgd2l0aGluIHRoZSB1cmwgcHJvcGVybHkgYmVmb3JlIGxvb2tpbmcgaW4gY2dpX2RpcmVjdG9yaWVzLgorCistIElzc3VlICM1MDk1OiBBZGRlZCBiZGlzdF9tc2kgdG8gdGhlIGxpc3Qgb2YgYmRpc3Qgc3VwcG9ydGVkIGZvcm1hdHMuICBJbml0aWFsCisgIGZpeCBieSBTdGV2ZW4gQmV0aGFyZC4KKworLSBJc3N1ZSAjMTQ5MTQzMTogRml4ZWQgZGlzdHV0aWxzLmZpbGVsaXN0Lmdsb2JfdG9fcmUgZm9yIGVkZ2UgY2FzZXMuICBJbml0aWFsCisgIGZpeCBieSBXYXluZSBEYXZpc29uLgorCistIElzc3VlICM1NjkzOiBUZXN0U3VpdGUuX19pdGVyX18gY2FuIG5vdyBiZSBjb25zaXN0ZW50bHkgb3ZlcnJpZGRlbiBpbgorICBzdWJjbGFzc2VzLgorCistIElzc3VlICM1Njk0OiBSZW1vdmVkIHNwdXJpb3VzIHRlc3Qgb3V0cHV0IGluIERpc3R1dGlscyAodGVzdF9jbGVhbikuCiAKIC0gSXNzdWUgIzU0NzE6IEZpeCBvcy5wYXRoLmV4cGFuZHVzZXIoKSBmb3IgJEhPTUUgc2V0IHRvICcvJy4KIAotLSBJc3N1ZSAjMTcyNjE3MjogZml4IEluZGV4RXJyb3IgaW4gdGhlIGNhc2Ugb2YgYW5kIGVtcHR5IHJlc3BvbnNlIGluIGZ0cGxpYi4KKy0gSXNzdWUgIzEzMjYwNzc6IEZpeCB0aGUgZm9ybWF0dGluZyBvZiBTeW50YXhFcnJvcnMgYnkgdGhlIHRyYWNlYmFjayBtb2R1bGUuCisKKy0gSXNzdWUgIzE3MjYxNzI6IEZpeCBJbmRleEVycm9yIGluIHRoZSBjYXNlIG9mIGFuZCBlbXB0eSByZXNwb25zZSBpbiBmdHBsaWIuCisKKy0gSXNzdWUgIzI2MjU6IEFkZGVkIG1pc3NpbmcgaXRlcml0ZW1zKCkgY2FsbCB0byB0aGUgZm9yIGxvb3AgaW4KKyAgbWFpbGJveC5NSC5nZXRfbWVzc2FnZSgpLgorCistIElzc3VlICM1NTg1OiBBZGQgdGhlIGFiaWxpdHkgdG8gY2FsbCBhbiBpbml0aWFsaXplciB0bworICBtdWxpdGlwcm9jZXNzaW5nLm1hbmFnZXIgc28gdGhhdCB1c2VycyBjYW4gaW5zdGFsbCBjdXN0b20gaGFuZGxlcnMvZXRjLgorCistIElzc3VlICMzNTUxOiBQYXRjaCBtdWx0aXByb2Nlc3NpbmcgdG8gcmFpc2UgYSBwcm9wZXIgZXhjZXB0aW9uIGlmIHRoZSBzaXplIG9mCisgIHRoZSBvYmplY3Qgd2hlbiB3cml0ZWZpbGUgaXMgY2FsbGVkIGNhdXNlcyBhIEVSUk9SX05PX1NZU1RFTV9SRVNPVVJDRVMuICBBZGRlZAorICBkb2NzIHRvIG5vdGUgdGhlIGxpbWl0YXRpb24uCisKKy0gdW5pdHRlc3QuYXNzZXJ0Tm90RXF1YWwoKSBub3cgdXNlcyB0aGUgaW5lcXVhbGl0eSBvcGVyYXRvciAoIT0pIGluc3RlYWQgb2YgdGhlCisgIGVxdWFsaXR5IG9wZXJhdG9yLgorCistIElzc3VlICM2MDAxOiBUZXN0IGRpc2NvdmVyeSBmb3IgdW5pdHRlc3QuIEltcGxlbWVudGVkIGluCisgIHVuaXR0ZXN0LlRlc3RMb2FkZXIuZGlzY292ZXIgYW5kIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjNTY3OTogVGhlIG1ldGhvZHMgdW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cCBhbmQgZG9DbGVhbnVwcyB3ZXJlCisgIGFkZGVkLiAgYWRkQ2xlYW51cCBhbGxvd3MgeW91IHRvIGFkZCBjbGVhbnVwIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgY2FsbGVkCisgIHVuY29uZGl0aW9uYWxseSAoYWZ0ZXIgc2V0VXAgaWYgc2V0VXAgZmFpbHMsIG90aGVyd2lzZSBhZnRlciB0ZWFyRG93bikuIFRoaXMKKyAgYWxsb3dzIGZvciBtdWNoIHNpbXBsZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGR1cmluZyB0ZXN0cy4KKworLSBJc3N1ZSAjMzM3OTogdW5pdHRlc3QubWFpbiBub3cgdGFrZXMgYW4gb3B0aW9uYWwgZXhpdCBhcmd1bWVudC4gSWYgRmFsc2UgbWFpbgorICBkb2Vzbid0IGNhbGwgc3lzLmV4aXQgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBmcm9tIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjNTk5NTogdW5pdHRlc3QubWFpbiBub3cgdGFrZXMgYW4gb3B0aW9uYWwgdmVyYm9zaXR5IGFyZ3VtZW50IGFsbG93aW5nCisgIHRlc3QgbW9kdWxlcyB0byBiZSBydW4gd2l0aCBhIGhpZ2hlciB0aGFuIGRlZmF1bHQgdmVyYm9zaXR5LgorCistIElzc3VlICM1OTk1OiBBIGZpeCB0byBhbGxvdyB5b3UgdG8gcnVuICJweXRob24gLW0gdW5pdHRlc3QgdGVzdF9tb2R1bGUiIG9yCisgICJweXRob24gLW0gdW5pdHRlc3QgdGVzdF9tb2R1bGUuVGVzdENsYXNzIiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzU3Mjg6IHVuaXR0ZXN0LlRlc3RSZXN1bHQgaGFzIG5ldyBzdGFydFRlc3RSdW4gYW5kIHN0b3BUZXN0UnVuIG1ldGhvZHM7CisgIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUgYW5kIGFmdGVyIGEgdGVzdCBydW4uCisKKy0gSXNzdWUgIzU2NjM6IEJldHRlciBmYWlsdXJlIG1lc3NhZ2VzIGZvciB1bml0dGVzdCBhc3NlcnRzLiBEZWZhdWx0IGFzc2VydFRydWUKKyAgYW5kIGFzc2VydEZhbHNlIG1lc3NhZ2VzIGFyZSBub3cgdXNlZnVsLiBUZXN0Q2FzZSBoYXMgYSBsb25nTWVzc2FnZSBhdHRyaWJ1dGUuCisgIFRoaXMgZGVmYXVsdHMgdG8gRmFsc2UsIGJ1dCBpZiBzZXQgdG8gVHJ1ZSB1c2VmdWwgZXJyb3IgbWVzc2FnZXMgYXJlIHNob3duIGluCisgIGFkZGl0aW9uIHRvIGV4cGxpY2l0IG1lc3NhZ2VzIHBhc3NlZCB0byBhc3NlcnQgbWV0aG9kcy4KKworLSBJc3N1ZSAjMzExMDogQWRkIGFkZGl0aW9uYWwgcHJvdGVjdCBhcm91bmQgU0VNX1ZBTFVFX01BWCBmb3IgbXVsdGlwcm9jZXNzaW5nLgogCiAtIEluIFBkYiwgcHJldmVudCB0aGUgcmVhc3NpZ25tZW50IG9mIF9fYnVpbHRpbl9fLl8gYnkgc3lzLmRpc3BsYXlob29rIG9uCiAgIHByaW50aW5nIG91dCB2YWx1ZXMuCiAKLS0gSXNzdWUgIzQ1NzI6IGFkZGVkIFNFRUtfKiBzeW1ib2xpYyBjb25zdGFudHMgdG8gaW8gbW9kdWxlLgorLSBJc3N1ZSAjNDU3MjogQWRkZWQgU0VFS18qIHN5bWJvbGljIGNvbnN0YW50cyB0byBpbyBtb2R1bGUuCiAKIC0gSXNzdWUgIzE2NjUyMDYgKHBhcnRpYWxseSk6IE1vdmUgaW1wb3J0cyBpbiBjZ2l0YiB0byB0aGUgdG9wIG9mIHRoZSBtb2R1bGUKICAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZW0gaW4gZnVuY3Rpb25zLiBIZWxwcyBwcmV2ZW50IGltcG9ydCBkZWFkbG9ja2luZyBpbgpAQCAtMTM5NSwzOTIgKzMxNzgsMzg0IEBACiAKIC0gQWN0dWFsbHkgbWFrZSB0aGUgU2ltcGxlWE1MUlBDU2VydmVyIENHSSBoYW5kbGVyIHdvcmsuCiAKLS0gSXNzdWUgIzI2MjU6IGFkZGVkIG1pc3NpbmcgaXRlcml0ZW1zKCkgY2FsbCB0byB0aGUgZm9yIGxvb3AgaW4KLSAgbWFpbGJveC5NSC5nZXRfbWVzc2FnZSgpLgorLSBJc3N1ZSAjMjUyMjogbG9jYWxlLmZvcm1hdCgpIG5vdyBjaGVja3MgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIGVuc3VyZSBpdCBoYXMKKyAgYmVlbiBwYXNzZWQgb25seSBvbmUgcGF0dGVybiwgYXZvaWRpbmcgbXlzdGVyaW91cyBlcnJvcnMgd2hlcmUgaXQgYXBwZWFyZWQKKyAgdGhhdCBpdCB3YXMgZmFpbGluZyB0byBkbyBsb2NhbGl6YXRpb24uCiAKLS0gSXNzdWUgIzU2NDc6IE11dGFibGVTZXQuX19pYW5kX18oKSBubyBsb25nZXIgbXV0YXRlcyBzZWxmIGR1cmluZyBpdGVyYXRpb24uCistIElzc3VlICM1NTgzOiBBZGRlZCBvcHRpb25hbCBleHRlbnNpb25zIGluIERpc3R1dGlscy4gIEluaXRpYWwgcGF0Y2ggYnkgR2VvcmcKKyAgQnJhbmRsLgogCi0tIElzc3VlICM1NjE5OiBNdWx0aXByb2Nlc3NpbmcgY2hpbGRyZW4gZGlzb2JleSB0aGUgZGVidWcgZmxhZyBhbmQgY2F1c2VzCi0gIHBvcHVwcyBvbiB3aW5kb3dzIGJ1aWxkYm90cy4gUGF0Y2ggYXBwbGllZCB0byB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlLgorLSBJc3N1ZSAjNTYxOTogTXVsdGlwcm9jZXNzaW5nIGNoaWxkcmVuIGRpc29iZXkgdGhlIGRlYnVnIGZsYWcgYW5kIGNhdXNlcyBwb3B1cHMKKyAgb24gd2luZG93cyBidWlsZGJvdHMuICBQYXRjaCBhcHBsaWVkIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUuCiAKLS0gSXNzdWUgIzU2MzI6IFRocmVhZC5pZGVudCB3YXMgTm9uZSBmb3IgdGhlIG1haW4gdGhyZWFkIGFuZCB0aHJlYWRzIG5vdAotICBjcmVhdGVkIHdpdGggdGhlIHRocmVhZGluZyBtb2R1bGUuCistIElzc3VlICM1NjMyOiBUaHJlYWQuaWRlbnQgd2FzIE5vbmUgZm9yIHRoZSBtYWluIHRocmVhZCBhbmQgdGhyZWFkcyBub3QgY3JlYXRlZAorICB3aXRoIHRoZSB0aHJlYWRpbmcgbW9kdWxlLgogCi0tIElzc3VlICM1NDAwOiBBZGRlZCBwYXRjaCBmb3IgbXVsdGlwcm9jZXNzaW5nIG9uIG5ldGJzZCBjb21waWxhdGlvbi9zdXBwb3J0Ci0KLS0gRml4IGFuZCBwcm9wZXJseSBkb2N1bWVudCB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZSdzIGxvZ2dpbmcKLSAgc3VwcG9ydCwgZXhwb3NlIHRoZSBpbnRlcm5hbCBsZXZlbHMgYW5kIHByb3ZpZGUgcHJvcGVyIHVzYWdlCi0gIGV4YW1wbGVzLgorLSBJc3N1ZSAjNTQwMDogQWRkZWQgcGF0Y2ggZm9yIG11bHRpcHJvY2Vzc2luZyBvbiBuZXRic2QgY29tcGlsYXRpb24vc3VwcG9ydC4KIAogLSBJc3N1ZSAjNTM4NzogRml4ZWQgbW1hcC5tb3ZlIGNyYXNoIGJ5IGludGVnZXIgb3ZlcmZsb3cuCiAKLS0gSXNzdWUgIzM4MDc6IF9tdWx0aXByb2Nlc3NpbmcgYnVpbGQgZmFpbHMgd2hlbiBjb25maWd1cmUgaXMgcGFzc2VkCi0gIC0td2l0aG91dC10aHJlYWRzIGFyZ3VtZW50LiBXaGVuIHRoaXMgb2NjdXJzLCBfbXVsdGlwcm9jZXNzaW5nIHdpbGwKLSAgYmUgZGlzYWJsZWQsIGFuZCBub3QgY29tcGlsZWQuCi0KLS0gSXNzdWUgIzUyNjE6IFBhdGNoIG11bHRpcHJvY2Vzc2luZydzIHNlbWFwaG9yZS5jIHRvIHN1cHBvcnQgY29udGV4dAotICBtYW5hZ2VyIHVzZTogIndpdGggbXVsdGlwcm9jZXNzaW5nLkxvY2soKSIgd29ya3Mgbm93LgorLSBJc3N1ZSAjNTI2MTogUGF0Y2ggbXVsdGlwcm9jZXNzaW5nJ3Mgc2VtYXBob3JlLmMgdG8gc3VwcG9ydCBjb250ZXh0IG1hbmFnZXIKKyAgdXNlOiAid2l0aCBtdWx0aXByb2Nlc3NpbmcuTG9jaygpIiB3b3JrcyBub3cuCiAKIC0gSXNzdWUgIzUxNzc6IE11bHRpcHJvY2Vzc2luZydzIFNvY2tldExpc3RlbmVyIGNsYXNzIG5vdyB1c2VzCi0gIHNvY2tldC5TT19SRVVTRUFERFIgb24gYWxsIGNvbm5lY3Rpb25zIHNvIHRoYXQgdGhlIHVzZXIgbm8gbG9uZ2VyIG5lZWRzCi0gIHRvIHdhaXQgMTIwIHNlY29uZHMgZm9yIHRoZSBzb2NrZXQgdG8gZXhwaXJlLgorICBzb2NrZXQuU09fUkVVU0VBRERSIG9uIGFsbCBjb25uZWN0aW9ucyBzbyB0aGF0IHRoZSB1c2VyIG5vIGxvbmdlciBuZWVkcyB0bworICB3YWl0IDEyMCBzZWNvbmRzIGZvciB0aGUgc29ja2V0IHRvIGV4cGlyZS4KIAotLSBBZGp1c3RlZCBfdGtpbnRlciB0byBjb21waWxlIHdpdGhvdXQgd2FybmluZ3Mgd2hlbiBXSVRIX1RIUkVBRCBpcyBub3QKLSAgZGVmaW5lZCAocGFydCBvZiBpc3N1ZSAjNTAzNSkuCistIEFkanVzdGVkIF90a2ludGVyIHRvIGNvbXBpbGUgd2l0aG91dCB3YXJuaW5ncyB3aGVuIFdJVEhfVEhSRUFEIGlzIG5vdCBkZWZpbmVkCisgIChwYXJ0IG9mIGlzc3VlICM1MDM1KS4KIAogLSBJc3N1ZSAjNTU2MTogUmVtb3ZlZCB0aGUgc3lzLnZlcnNpb25faW5mbyBzaG9ydGN1dHMgZnJvbSBwbGF0Zm9ybSdzCiAgIHB5dGhvbl92ZXJzaW9uKCkgYW5kIHB5dGhvbl92ZXJzaW9uX3R1cGxlKCkgc2luY2UgdGhleSBwcm9kdWNlZCBkaWZmZXJlbnQKICAgb3V0cHV0IGNvbXBhcmVkIHRvIHByZXZpb3VzIFB5dGhvbiB2ZXJzaW9ucy4KIAotLSBJc3N1ZSAjNTA2ODogRml4ZWQgdGhlIHRhcmZpbGUuX0JaMlByb3h5LnJlYWQoKSBtZXRob2QgdGhhdCB3b3VsZCBsb29wCi0gIGZvcmV2ZXIgb24gaW5jb21wbGV0ZSBpbnB1dC4gVGhhdCBjYXVzZWQgdGFyZmlsZS5vcGVuKCkgdG8gaGFuZyB3aGVuIHVzZWQKLSAgd2l0aCBtb2RlICdyJyBvciAncjpiejInIGFuZCBhIGZpbGVvYmogYXJndW1lbnQgdGhhdCBjb250YWluZWQgbm8gZGF0YSBvcgotICBwYXJ0aWFsIGJ6aXAyIGNvbXByZXNzZWQgZGF0YS4KKy0gSXNzdWUgIzEwMzQwNTM6IHVuaXR0ZXN0IG5vdyBzdXBwb3J0cyBza2lwcGluZyB0ZXN0cyBhbmQgZXhwZWN0ZWQgZmFpbHVyZXMuCisKKy0gVGhlIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcygpIG1ldGhvZCBub3cgcmV0dXJucyBhIGNvbnRleHQgbWFuYWdlciB3aGVuCisgIG5vdCBnaXZlbiBhIGNhbGxhYmxlIHNvIHRoYXQgY29kZSB0byBiZSB0ZXN0ZWQgY2FuIGJlIHdyaXR0ZW4gaW5saW5lIHVzaW5nIGEKKyAgd2l0aCBzdGF0ZW1lbnQuCisKKy0gSXNzdWUgIzI1Nzg6IFRoZSB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbCgpIG5vdyBkaXNwbGF5cyB0aGUgZGlmZmVyZW5jZXMKKyAgaW4gbGlzdHMsIHR1cGxlcywgZGljdHMgYW5kIHNldHMgb24gZmFpbHVyZS4gIE1hbnkgbmV3IGhhbmR5IHR5cGUgYW5kCisgIGNvbXBhcmlzb24gc3BlY2lmaWMgYXNzZXJ0KiBtZXRob2RzIGhhdmUgYmVlbiBhZGRlZCB0aGF0IGZhaWwgd2l0aCBlcnJvcgorICBtZXNzYWdlcyBhY3R1YWxseSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gIENvbnRyaWJ1dGVkIGluIHBhcnQgYnkgR29vZ2xlLgorCistIElzc3VlICM1MDY4OiBGaXhlZCB0aGUgdGFyZmlsZS5fQloyUHJveHkucmVhZCgpIG1ldGhvZCB0aGF0IHdvdWxkIGxvb3AgZm9yZXZlcgorICBvbiBpbmNvbXBsZXRlIGlucHV0LiAgVGhhdCBjYXVzZWQgdGFyZmlsZS5vcGVuKCkgdG8gaGFuZyB3aGVuIHVzZWQgd2l0aCBtb2RlCisgICdyJyBvciAncjpiejInIGFuZCBhIGZpbGVvYmogYXJndW1lbnQgdGhhdCBjb250YWluZWQgbm8gZGF0YSBvciBwYXJ0aWFsIGJ6aXAyCisgIGNvbXByZXNzZWQgZGF0YS4KIAogLSBJc3N1ZSAjNTUzNjogdXJsbGliLnVybHJldHJpZXZlIG1ha2VzIHN1cmUgdG8gY2xvc2UgdGhlIGZpbGUgaXQncyB3cml0aW5nIHRvCiAgIGV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vycy4KIAotLSBGaXggRGVjaW1hbC5fX2Zvcm1hdF9fIGJ1ZyB0aGF0IHN3YXBwZWQgdGhlIG1lYW5pbmdzIG9mIHRoZSAnPCcgYW5kCi0gICc+JyBhbGlnbm1lbnQgY2hhcmFjdGVycy4KKy0gSXNzdWUgIzUzODE6IEFkZGVkIG9iamVjdF9wYWlyc19ob29rIHRvIHRoZSBqc29uIG1vZHVsZS4gIFRoaXMgYWxsb3dzCisgIE9yZGVyZWREaWN0cyB0byBiZSBidWlsdCBieSB0aGUgZGVjb2Rlci4KIAotLSBJc3N1ZSAjMTIyMjogbG9jYWxlLmZvcm1hdCgpIGJ1ZyB3aGVuIHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIGlzIGEgc3BhY2UKKy0gSXNzdWUgIzIxMTA6IEFkZCBzdXBwb3J0IGZvciB0aG91c2FuZHMgc2VwYXJhdG9yIGFuZCAnbicgdHlwZSBzcGVjaWZpZXIgdG8KKyAgYGBEZWNpbWFsLl9fZm9ybWF0X18oKWBgLgorCistIEZpeCBEZWNpbWFsLl9fZm9ybWF0X18gYnVnIHRoYXQgc3dhcHBlZCB0aGUgbWVhbmluZ3Mgb2YgdGhlICc8JyBhbmQgJz4nCisgIGFsaWdubWVudCBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjIyOiBgYGxvY2FsZS5mb3JtYXQoKWBgIGJ1ZyB3aGVuIHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIGlzIGEgc3BhY2UKICAgY2hhcmFjdGVyLgogCi0tIElzc3VlICM0NzkyOiBQcmV2ZW50IGEgc2VnZmF1bHQgaW4gX3RraW50ZXIgYnkgdXNpbmcgdGhlCi0gIGd1YXJhbnRlZWQgdG8gYmUgc2FmZSBpbnRlcnAgYXJndW1lbnQgZ2l2ZW4gdG8gdGhlIFB5dGhvbkNtZCBpbiBwbGFjZSBvZgotICB0aGUgVGNsIGludGVycHJldGVyIHRha2VuIGZyb20gYSBQeXRob25DbWRfQ2xpZW50RGF0YS4KKy0gSXNzdWUgIzU0NzI6IEZpeGVkIGRpc3R1dGlscy50ZXN0X3V0aWwgdGVhciBkb3duLiBPcmlnaW5hbCBwYXRjaCBieSBUaW0KKyAgR29sZGVuLgorCistIGNvbGxlY3Rpb25zLmRlcXVlIG9iamVjdHMgbm93IGhhdmUgYSByZWFkLW9ubHkgYXR0cmlidXRlIGNhbGxlZCBtYXhsZW4uCisKKy0gSXNzdWUgIzI2Mzg6IFNob3cgYSB3aW5kb3cgY29uc3RydWN0ZWQgd2l0aCB0a1NpbXBsZURpYWxvZy5EaWFsb2cgb25seSBhZnRlcgorICBpdCBpcyBoYXMgYmVlbiBwb3B1bGF0ZWQgYW5kIHByb3Blcmx5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gcHJldmVudCB3aW5kb3cKKyAgZmxhc2hpbmcuCisKKy0gSXNzdWUgIzQ3OTI6IFByZXZlbnQgYSBzZWdmYXVsdCBpbiBfdGtpbnRlciBieSB1c2luZyB0aGUgZ3VhcmFudGVlZCB0byBiZSBzYWZlCisgIGludGVycCBhcmd1bWVudCBnaXZlbiB0byB0aGUgUHl0aG9uQ21kIGluIHBsYWNlIG9mIHRoZSBUY2wgaW50ZXJwcmV0ZXIgdGFrZW4KKyAgZnJvbSBhIFB5dGhvbkNtZF9DbGllbnREYXRhLgogCiAtIElzc3VlICM1MTkzOiBHdWFyYW50ZWUgdGhhdCBUa2ludGVyLlRleHQuc2VhcmNoIHJldHVybnMgYSBzdHJpbmcuCiAKKy0gSXNzdWUgIzUzOTQ6IFJlbW92ZWQgPiAyLjMgc3ludGF4IGZyb20gZGlzdHV0aWxzLm1zdmM5Y29tcGlsZXIuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFraXJhIEtpdGFkYS4KKwogLSBJc3N1ZSAjNTM4NTogRml4ZWQgbW1hcCBjcmFzaCBhZnRlciByZXNpemUgZmFpbHVyZSBvbiB3aW5kb3dzLgogCiAtIElzc3VlICM1MTc5OiBGaXhlZCBzdWJwcm9jZXNzIGhhbmRsZSBsZWFrIG9uIGZhaWx1cmUgb24gd2luZG93cy4KIAotLSBJc3N1ZSAjNDMwODogaHR0cGxpYi5JbmNvbXBsZXRlUmVhZCdzIHJlcHIgZG9lc24ndCBpbmNsdWRlIGFsbCBvZiB0aGUgZGF0YQotICBhbGwgcmVhZHkgcmVjZWl2ZWQuCistIFBFUCAzNzI6IEFkZGVkIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkuCisKKy0gVGhlIF9hc2RpY3QoKSBmb3IgbWV0aG9kIGZvciBuYW1lZHR1cGxlcyBub3cgcmV0dXJucyBhbiBPcmRlcmVkRGljdCgpLgorCistIFRoZSBjb25maWdwYXJzZXIgbW9kdWxlIG5vdyBkZWZhdWx0cyB0byB1c2luZyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzQzMDg6IGh0dHBsaWIuSW5jb21wbGV0ZVJlYWQncyByZXByIGRvZXNuJ3QgaW5jbHVkZSBhbGwgb2YgdGhlIGRhdGEgYWxsCisgIHJlYWR5IHJlY2VpdmVkLgogCiAtIElzc3VlICM1NDAxOiBGaXhlZCBhIHBlcmZvcm1hbmNlIHByb2JsZW0gaW4gbWltZXR5cGVzIHdoZW4gYGBmcm9tIG1pbWV0eXBlcwogICBpbXBvcnQgZ3Vlc3NfZXh0ZW5zaW9uYGAgd2FzIHVzZWQuCiAKLS0gSXNzdWUgIzE3MzM5ODY6IEZpeGVkIG1tYXAgY3Jhc2ggaW4gYWNjZXNzaW5nIGVsZW1lbnRzIG9mIHNlY29uZCBtYXAgb2JqZWN0Ci0gIHdpdGggc2FtZSB0YWduYW1lIGJ1dCBsYXJnZXIgc2l6ZSB0aGFuIGZpcnN0IG1hcC4gKFdpbmRvd3MpCistIElzc3VlICMxNzMzOTg2OiBGaXhlZCBtbWFwIGNyYXNoIG9uIFdpbmRvd3MgaW4gYWNjZXNzaW5nIGVsZW1lbnRzIG9mIHNlY29uZAorICBtYXAgb2JqZWN0IHdpdGggc2FtZSB0YWduYW1lIGJ1dCBsYXJnZXIgc2l6ZSB0aGFuIGZpcnN0IG1hcC4KIAogLSBJc3N1ZSAjNTM4NjogbW1hcC53cml0ZV9ieXRlIGRpZG4ndCBjaGVjayBtYXAgc2l6ZSwgc28gaXQgY291bGQgY2F1c2UgYnVmZmVyCiAgIG92ZXJydW4uCiAKKy0gSXNzdWUgIzE1MzMxNjQ6IEluc3RhbGxlZCBidXQgbm90IGxpc3RlZCAqLnB5byB3YXMgYnJlYWtpbmcgRGlzdHV0aWxzCisgIGJkaXN0X3JwbSBjb21tYW5kLgorCistIElzc3VlICM1Mzc4OiBBZGRlZCAtLXF1aWV0IG9wdGlvbiB0byBEaXN0dXRpbHMgYmRpc3RfcnBtIGNvbW1hbmQuCisKKy0gSXNzdWUgIzUwNTI6IE1ha2UgRGlzdHV0aWxzIGNvbXBhdGlibGUgd2l0aCAyLjMgYWdhaW4uCisKKy0gRGVwcmVjYXRlZCBtZXRob2RzIG9mIHN5bXRhYmxlLlN5bWJvbCBoYXZlIGJlZW4gcmVtb3ZlZDogaXNfa2V5d29yZGFyZygpLAorICBpc192YXJhcmcoKSwgYW5kIGlzX2luX3R1cGxlKCkuCisKKy0gSXNzdWUgIzUzMTY6IEZpeGVkIGJ1aWxkYm90IGZhaWx1cmVzIGludHJvZHVjZWQgYnkgbXVsdGlwbGUgaW5oZXJpdGFuY2UgaW4KKyAgRGlzdHV0aWxzIHRlc3RzLgorCistIElzc3VlICM1Mjg3OiBBZGQgZXhjZXB0aW9uIGhhbmRsaW5nIGFyb3VuZCBmaW5kQ2FsbGVyKCkgY2FsbCB0byBoZWxwIG91dAorICBJcm9uUHl0aG9uLgorCistIElzc3VlICM1MjgyOiBGaXhlZCBtbWFwIHJlc2l6ZSBvbiAzMmJpdCBXaW5kb3dzIGFuZCBVbml4LiAgV2hlbiBgYG9mZnNldCA+CisgIDBgYCwgdGhlIGZpbGUgd2FzIHJlc2l6ZWQgdG8gd3Jvbmcgc2l6ZS4KKwogLSBJc3N1ZSAjNTI5MjogRml4ZWQgbW1hcCBjcmFzaCBvbiBpdHMgYm91bmRhcnkgYWNjZXNzIG1bbGVuKG0pXS4KIAotLSBJc3N1ZSAjNTI4MjogRml4ZWQgbW1hcCByZXNpemUgb24gMzJiaXQgd2luZG93cyBhbmQgdW5peC4gV2hlbiBvZmZzZXQgPiAwLAotICBUaGUgZmlsZSB3YXMgcmVzaXplZCB0byB3cm9uZyBzaXplLgorLSBJc3N1ZSAjMjI3OTogZGlzdHV0aWxzLnNkaXN0LmFkZF9kZWZhdWx0cyBub3cgYWRkIGZpbGVzIGZyb20gdGhlIHBhY2thZ2VfZGF0YQorICBhbmQgdGhlIGRhdGFfZmlsZXMgbWV0YWRhdGEuCiAKLS0gSXNzdWUgIzUyODc6IEFkZCBleGNlcHRpb24gaGFuZGxpbmcgYXJvdW5kIGZpbmRDYWxsZXIoKSBjYWxsIGluIGxvZ2dpbmcgdG8KLSAgaGVscCBvdXQgSXJvblB5dGhvbi4KKy0gSXNzdWUgIzUyNTc6IFJlZmFjdG9yZWQgYWxsIHRlc3RzIGluIGRpc3R1dGlscywgc28gdGhleSB1c2UKKyAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdG8gYXZvaWQgd3JpdGluZyBpbiB0aGUgdGVzdHMgZGlyZWN0b3J5LgogCiAtIElzc3VlICM0NTI0OiBkaXN0dXRpbHMgYnVpbGRfc2NyaXB0IGNvbW1hbmQgZmFpbGVkIHdpdGggLS13aXRoLXN1ZmZpeD0zLgogICBJbml0aWFsIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgogCi0tIElzc3VlICM0OTk4OiBUaGUgbWVtb3J5IHNhdmluZyBlZmZlY3Qgb2YgX19zbG90c19fIGhhZCBiZWVuIGxvc3Qgb24gRnJhY3Rpb25zCi0gIHdoaWNoIGluaGVyaXRlZCBmcm9tIG51bWJlcnMucHkgd2hpY2ggZGlkIG5vdCBoYXZlIF9fc2xvdHNfXyBkZWZpbmVkLiAgVGhlCi0gIG51bWJlcnMgaGllcmFyY2h5IG5vdyBoYXMgaXRzIG93biBfX3Nsb3RzX18gZGVjbGFyYXRpb25zLgorLSBJc3N1ZSAjMjQ2MTogQWRkZWQgdGVzdHMgZm9yIGRpc3R1dGlscy51dGlsLgorCistIElzc3VlICMxMDA4MDg2OiBGaXhlZCBzb2NrZXQuaW5ldF9hdG9uKCkgdG8gYWx3YXlzIHJldHVybiA0IGJ5dGVzIGV2ZW4gb24gTFA2NAorICBwbGF0Zm9ybXMgKG1vc3QgNjQtYml0IExpbnV4LCBic2QsIHVuaXggc3lzdGVtcykuCiAKIC0gSXNzdWUgIzUyMDM6IEZpeGVkIGN0eXBlcyBzZWdmYXVsdHMgd2hlbiBwYXNzaW5nIGEgdW5pY29kZSBzdHJpbmcgdG8gYQogICBmdW5jdGlvbiB3aXRob3V0IGFyZ3R5cGVzIChvbmx5IG9jY3VycyBpZiBIQVZFX1VTQUJMRV9XQ0hBUl9UIGlzIGZhbHNlKS4KIAotLSBJc3N1ZSAjMzMyMTogX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uKCkgZG9lc24ndCBjaGVjayBoYW5kbGU7IGFkZGVkIGNoZWNrcwotICBmb3IgKm5peCBtYWNoaW5lcyBmb3IgbmVnYXRpdmUgaGFuZGxlcyBhbmQgbGFyZ2UgaW50IGhhbmRsZXMuIFdpdGhvdXQgdGhpcwotICBjaGVjayBpdCBpcyBwb3NzaWJsZSB0byBzZWdmYXVsdCB0aGUgaW50ZXJwcmV0ZXIuCi0KLS0gSXNzdWUgIzQ0NDk6IEFzc2VydGlvbkVycm9yIGluIG1wX2JlbmNobWFya3MucHksIGNhdXNlZCBieSBhbiB1bmRlcmx5aW5nCi0gIGlzc3VlIGluIHNoYXJlZGN0eXBlcy5weS4KLQogLSBJc3N1ZSAjMzM4NjogZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYiBwcmVmaXggYXJndW1lbnQgd2FzIGlnbm9yZWQKICAgdW5kZXIgTlQgYW5kIE9TMi4gUGF0Y2ggYnkgUGhpbGlwIEplbnZleS4KIAorLSBJc3N1ZSAjNTEyODogTWFrZSBjb21waWxlYWxsIHByb3Blcmx5IGluc3BlY3QgYnl0ZWNvZGUgdG8gZGV0ZXJtaW5lIGlmIG5lZWRzCisgIHRvIGJlIHJlY3JlYXRlZC4gIFRoaXMgYXZvaWRzIGEgdGltaW5nIGhvbGUgdGhhbmtzIHRvIHRoZSBvbGQgcmVsaWFuY2Ugb24gdGhlCisgIGN0aW1lIG9mIHRoZSBmaWxlcyBpbnZvbHZlZC4KKworLSBJc3N1ZSAjNTEyMjogU3luY2hyb25pemUgdGsgbG9hZCBmYWlsdXJlIGNoZWNrIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwKKyAgZGVhZGxvY2suCisKKy0gSXNzdWUgIzE4MTg6IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKSBub3cgc3VwcG9ydHMgYSBrZXl3b3JkIGFyZ3VtZW50ICdyZW5hbWUnCisgIHdoaWNoIGxldHMgaW52YWxpZCBmaWVsZG5hbWVzIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHBvc2l0aW9uYWwgbmFtZXMKKyAgaW4gdGhlIGZvcm0sIF8xLCBfMiwgLi4uCisKIC0gSXNzdWUgIzQ4OTA6IEhhbmRsZSBlbXB0eSB0ZXh0IHNlYXJjaCBwYXR0ZXJuIGluIFRraW50ZXIuVGV4dC5zZWFyY2guCiAKLS0gSXNzdWUgIzUxNzA6IEZpeGVkIFVuaWNvZGUgb3V0cHV0IGJ1ZyBpbiBsb2dnaW5nIGFuZCBhZGRlZCB0ZXN0IGNhc2UuCi0gIFRoaXMgaXMgYSByZWdyZXNzaW9uIHdoaWNoIGRpZCBub3Qgb2NjdXIgaW4gMi41LgorLSBJc3N1ZSAjNTE3MDogRml4ZWQgVW5pY29kZSBvdXRwdXQgYnVnIGluIGxvZ2dpbmcgYW5kIGFkZGVkIHRlc3QgY2FzZS4gIFRoaXMgaXMKKyAgYSByZWdyZXNzaW9uIHdoaWNoIGRpZCBub3Qgb2NjdXIgaW4gMi41LgogCi0tIFBhcnRpYWwgZml4IHRvIGlzc3VlICMxNzMxNzA2OiBtZW1vcnkgbGVhayBpbiBUa2FwcF9DYWxsIHdoZW4gY2FsbGluZwotICBmcm9tIGEgdGhyZWFkIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkIHRoZSBUY2wgaW50ZXJwcmV0ZXIuCi0gIFBhdGNoIGJ5IFJvYmVydCBIYW5jb2NrLgorLSBJc3N1ZSAjNDUxMiAocGFydCAyKTogUHJvbW90ZSBgYFppcEltcG9ydGVyLl9nZXRfZmlsZW5hbWUoKWBgIHRvIGJlIGEgcHVibGljCisgIGRvY3VtZW50ZWQgbWV0aG9kIGBgWmlwSW1wb3J0ZXIuZ2V0X2ZpbGVuYW1lKClgYC4KKworLSBJc3N1ZSAjNDE5NTogVGhlIGBgcnVucHlgYCBtb2R1bGUgKGFuZCB0aGUgYGAtbWBgIHN3aXRjaCkgbm93IHN1cHBvcnQgdGhlCisgIGV4ZWN1dGlvbiBvZiBwYWNrYWdlcyBieSBsb29raW5nIGZvciBhbmQgZXhlY3V0aW5nIGEgYGBfX21haW5fX2BgIHN1Ym1vZHVsZQorICB3aGVuIGEgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkLiBJbml0aWFsIHBhdGNoIGJ5IEFuZGkgVmFqZGEuCisKKy0gSXNzdWUgIzE3MzE3MDY6IENhbGwgVGNsX0NvbmRpdGlvbkZpbmFsaXplIGZvciBUY2xfQ29uZGl0aW9ucyB0aGF0IHdpbGwgbm90IGJlCisgIHVzZWQgYWdhaW4gKHRoaXMgcmVxdWlyZXMgVGNsL1RrIDguMy4xKSwgYWxzbyBmaXggYSBtZW1vcnkgbGVhayBpbiBUa2FwcF9DYWxsCisgIHdoZW4gY2FsbGluZyBmcm9tIGEgdGhyZWFkIGRpZmZlcmVudCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkIHRoZSBUY2wKKyAgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBSb2JlcnQgSGFuY29jay4KKworLSBJc3N1ZSAjMTUyMDg3NzogTm93IGRpc3R1dGlscy5zeXNjb25maWcgcmVhZHMgJEFSIGZyb20gdGhlCisgIGVudmlyb25tZW50L01ha2VmaWxlLiBQYXRjaCBieSBEb3VnbGFzIEdyZWltYW4uCisKKy0gSXNzdWUgIzQyODU6IENoYW5nZSBzeXMudmVyc2lvbl9pbmZvIHRvIGJlIGEgbmFtZWQgdHVwbGUuICBQYXRjaCBieSBSb3NzCisgIExpZ2h0LgorCistIElzc3VlICMxMjc2NzY4OiBUaGUgdmVyYm9zZSBvcHRpb24gd2FzIG5vdCB1c2VkIGluIHRoZSBjb2RlIG9mCisgIGRpc3R1dGlscy5maWxlX3V0aWwgYW5kIGRpc3R1dGlscy5kaXJfdXRpbC4KIAogLSBJc3N1ZSAjNTEzMjogRml4ZWQgdHJvdWJsZSBidWlsZGluZyBleHRlbnNpb25zIHVuZGVyIFNvbGFyaXMgd2l0aAogICAtLWVuYWJsZWQtc2hhcmVkIGFjdGl2YXRlZC4gSW5pdGlhbCBwYXRjaCBieSBEYXZlIFBldGVyc29uLgogCiAtIElzc3VlICMxNTgxNDc2OiBBbHdheXMgdXNlIHRoZSBUY2wgZ2xvYmFsIG5hbWVzcGFjZSB3aGVuIGNhbGxpbmcgaW50byBUY2wuCiAKLS0gSXNzdWUgIzIwNDc6IHNodXRpbC5tb3ZlKCkgY291bGQgYmVsaWV2ZSB0aGF0IGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdhcwotICBpbnNpZGUgaXRzIHNvdXJjZSBwYXRoIGlmIGl0IGJlZ2FuIHdpdGggdGhlIHNhbWUgbGV0dGVycyAoZS5nLiAic3JjIiB2cy4KLSAgInNyYy5uZXciKS4KKy0gSXNzdWUgIzIwNDc6IHNodXRpbC5tb3ZlKCkgY291bGQgYmVsaWV2ZSB0aGF0IGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdhcyBpbnNpZGUKKyAgaXRzIHNvdXJjZSBwYXRoIGlmIGl0IGJlZ2FuIHdpdGggdGhlIHNhbWUgbGV0dGVycyAoZS5nLiAic3JjIiB2cy4gICJzcmMubmV3IikuCiAKLS0gSXNzdWUgIzQ5MjA6ICBGaXhlZCAubmV4dCgpIHZzIC5fX25leHRfXygpIGlzc3VlcyBpbiB0aGUgQUJDcyBmb3IKLSAgSXRlcmF0b3IgYW5kIE11dGFibGVTZXQuCistIElzc3VlICM0OTIwOiBGaXhlZCAubmV4dCgpIHZzIC5fX25leHRfXygpIGlzc3VlcyBpbiB0aGUgQUJDcyBmb3IgSXRlcmF0b3IgYW5kCisgIE11dGFibGVTZXQuCiAKLS0gSXNzdWUgIzUwMjE6ICBkb2N0ZXN0LnRlc3RmaWxlKCkgZGlkIG5vdCBjcmVhdGUgX19uYW1lX18gYW5kCistIEFkZGVkIHRoZSB0dGsgbW9kdWxlLiBTZWUgaXNzdWUgIzI5ODM6IFR0ayBzdXBwb3J0IGZvciBUa2ludGVyLgorCistIElzc3VlICM1MDIxOiBkb2N0ZXN0LnRlc3RmaWxlKCkgZGlkIG5vdCBjcmVhdGUgX19uYW1lX18gYW5kCiAgIGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKSByZWxpZWQgb24gX19uYW1lX18gYmVpbmcgZGVmaW5lZC4KIAotLSBJc3N1ZSAjMzg4MTogSGVscCBUY2wgdG8gbG9hZCBldmVuIHdoZW4gc3RhcnRlZCB0aHJvdWdoIHRoZQotICB1bnJlYWRhYmxlIGxvY2FsIHN5bWxpbmsgdG8gIlByb2dyYW0gRmlsZXMiIG9uIFZpc3RhLgorLSBCYWNrcG9ydCBpbXBvcnRsaWIgZnJvbSBQeXRob24gMy4xLiBPbmx5IHRoZSBpbXBvcnRfbW9kdWxlKCkgZnVuY3Rpb24gaGFzIGJlZW4KKyAgYmFja3BvcnRlZCB0byBoZWxwIGZhY2lsaXRhdGUgdHJhbnNpdGlvbnMgZnJvbSAyLjcgdG8gMy4xLgogCi0tIElzc3VlICM0NzEwOiBFeHRyYWN0IGRpcmVjdG9yaWVzIHByb3Blcmx5IGluIHRoZSB6aXBmaWxlIG1vZHVsZTsKLSAgYWxsb3cgYWRkaW5nIGRpcmVjdG9yaWVzIHRvIGEgemlwZmlsZS4KKy0gSXNzdWUgIzE4ODU6IGRpc3R1dGlsczogV2hlbiBydW5uaW5nIHNkaXN0IHdpdGggLS1mb3JtYXRzPXRhcixnenRhciB0aGUgdGFyCisgIGZpbGUgd2FzIG92ZXJyaWRlbiBieSB0aGUgZ3p0YXIgb25lLgogCi0tIElzc3VlICM1MDA4OiBXaGVuIGEgZmlsZSBpcyBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgd2l0aCB0aGUgbmV3IElPIGxpYnJhcnksCi0gIGRvIGFuIGV4cGxpY2l0IHNlZWsgdG8gdGhlIGVuZCBvZiBmaWxlIChzbyB0aGF0IGUuZy4gdGVsbCgpIHJldHVybnMgdGhlCi0gIGZpbGUgc2l6ZSByYXRoZXIgdGhhbiAwKS4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGJlaGF2aW91ciBvZiB0aGUKLSAgdHJhZGl0aW9uYWwgMi54IGZpbGUgb2JqZWN0LgorLSBJc3N1ZSAjNDg2MzogZGlzdHV0aWxzLm13ZXJrc2NvbXBpbGVyIGhhcyBiZWVuIHJlbW92ZWQuCiAKLS0gSXNzdWUgIzM5OTc6IHppcGZpbGVzIGdlbmVyYXRlZCB3aXRoIG1vcmUgdGhhbiA2NTUzNiBmaWxlcyBjb3VsZCBub3QgYmUKLSAgb3BlbmVkIHdpdGggb3RoZXIgYXBwbGljYXRpb25zLgorLSBBZGRlZCBuZXcgaXRlcnRvb2xzIGZ1bmN0aW9uczogY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoKSBhbmQgY29tcHJlc3MoKS4KIAotLSBJc3N1ZSAjNDgxNjogaXRlcnRvb2xzLmNvbWJpbmF0aW9ucygpIGFuZCBpdGVydG9vbHMucHJvZHVjdCB3ZXJlIHJhaXNpbmcKLSAgYSBWYWx1ZUVycm9yIGZvciB2YWx1ZXMgb2YgKnIqIGxhcmdlciB0aGFuIHRoZSBpbnB1dCBpdGVyYWJsZS4gIFRoZXkgbm93Ci0gIGNvcnJlY3RseSByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuCistIElzc3VlICM1MDMyOiBBZGRlZCBhIHN0ZXAgYXJndW1lbnQgdG8gaXRlcnRvb2xzLmNvdW50KCkgYW5kIGFsbG93ZWQKKyAgbm9uLWludGVnZXIgYXJndW1lbnRzLgogCi0tIEZyYWN0aW9ucy5mcm9tX2Zsb2F0KCkgbm8gbG9uZ2VyIGxvc2VzIHByZWNpc2lvbiBmb3IgaW50ZWdlcnMgdG9vIGJpZyB0bwotICBjYXN0IGFzIGZsb2F0cy4KKy0gRml4IGFuZCBwcm9wZXJseSBkb2N1bWVudCB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZSdzIGxvZ2dpbmcgc3VwcG9ydCwgZXhwb3NlCisgIHRoZSBpbnRlcm5hbCBsZXZlbHMgYW5kIHByb3ZpZGUgcHJvcGVyIHVzYWdlIGV4YW1wbGVzLgogCi0tIElzc3VlICM0NzkwOiBUaGUgbnNtYWxsZXN0KCkgYW5kIG5sYXJnZXN0KCkgZnVuY3Rpb25zIGluIHRoZSBoZWFwcSBtb2R1bGUKLSAgZGlkIHVubmVjZXNzYXJ5IHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIG5vIGtleSBmdW5jdGlvbiB3YXMgc3BlY2lmaWVkLgotCi0tIElzc3VlICMzNzY3OiBDb252ZXJ0IFRrIG9iamVjdCB0byBzdHJpbmcgaW4gdGtDb2xvckNob29zZXIuCi0KLS0gSXNzdWUgIzMyNDg6IEFsbG93IHBsYWNpbmcgU2Nyb2xsZWRUZXh0IGluIGEgUGFuZWRXaW5kb3cuCi0KLS0gSXNzdWUgIzM5NTQ6IEZpeCBhIHBvdGVudGlhbCBTeXN0ZW1FcnJvciBpbiBfaG90c2hvdC5sb2dyZWFkZXIgZXJyb3IKLSAgaGFuZGxpbmcuCi0KLS0gSXNzdWUgIzQ1NzQ6IGZpeCBhIGNyYXNoIGluIGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIgd2hlbiBhIGNhcnJpYWdlCi0gIHJldHVybiBlbmNvZGVzIHRvIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgc291cmNlIGVuY29kaW5nIChlLmcuIFVURi0xNikKLSAgYW5kIGdldHMgc3BsaXQgb24gYSBjaHVuayBib3VuZGFyeS4KLQotLSBJc3N1ZSAjNDIyMzogaW5zcGVjdC5nZXRzb3VyY2UoKSB3aWxsIG5vdyBjb3JyZWN0bHkgZGlzcGxheSBzb3VyY2UgY29kZQotICBmb3IgcGFja2FnZXMgbG9hZGVkIHZpYSB6aXBpbXBvcnQgKG9yIGFueSBvdGhlciBjb25mb3JtYW50IFBFUCAzMDIKLSAgbG9hZGVyKS4gT3JpZ2luYWwgcGF0Y2ggYnkgQWxleGFuZGVyIEJlbG9wb2xza3kuCi0KLS0gSXNzdWUgIzQyMDE6IHBkYiBjYW4gbm93IGFjY2VzcyBhbmQgZGlzcGxheSBzb3VyY2UgY29kZSBsb2FkZWQgdmlhCi0gIHppcGltcG9ydCAob3IgYW55IG90aGVyIGNvbmZvcm1hbnQgUEVQIDMwMiBsb2FkZXIpLiBPcmlnaW5hbCBwYXRjaCBieQotICBBbGV4YW5kZXIgQmVsb3BvbHNreS4KLQotLSBJc3N1ZSAjNDE5NzogZG9jdGVzdHMgaW4gbW9kdWxlcyBsb2FkZWQgdmlhIHppcGltcG9ydCAob3IgYW55IG90aGVyIFBFUAotICAzMDIgY29uZm9ybWFudCBsb2FkZXIpIHdpbGwgbm93IHdvcmsgY29ycmVjdGx5IGluIG1vc3QgY2FzZXMgKHRoZXkKLSAgYXJlIHN0aWxsIHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnRzIHRoYXQgZXhpc3QgZm9yIGFsbCBjb2RlIHJ1bm5pbmcKLSAgZnJvbSBpbnNpZGUgYSBtb2R1bGUgbG9hZGVkIHZpYSBhIFBFUCAzMDIgbG9hZGVyIGFuZCBhdHRlbXB0aW5nIHRvCi0gIHBlcmZvcm0gSU8gb3BlcmF0aW9ucyBiYXNlZCBvbiBfX2ZpbGVfXykuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFsZXhhbmRlciBCZWxvcG9sc2t5LgotCi0tIElzc3VlcyAjNDA4MiBhbmQgIzQ1MTI6IEFkZCBydW5weSBzdXBwb3J0IHRvIHppcGltcG9ydCBpbiBhIG1hbm5lciB0aGF0Ci0gIGFsbG93cyBiYWNrcG9ydGluZyB0byBtYWludGVuYW5jZSBicmFuY2hlcy4gT3JpZ2luYWwgcGF0Y2ggYnkKLSAgQWxleGFuZGVyIEJlbG9wb2xza3kuCi0KLS0gSXNzdWUgIzQ2MTY6IFRhckZpbGUudXRpbWUoKTogUmVzdG9yZSBkaXJlY3RvcnkgdGltZXMgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjNDQ4MzogX2RibSBtb2R1bGUgbm93IGJ1aWxkcyBvbiBzeXN0ZW1zIHdpdGggZ2RibSAmIGdkYm1fY29tcGF0Ci0gIGxpYnMuCi0KLS0gRmlsZUlPJ3MgbW9kZSBhdHRyaWJ1dGUgbm93IGFsd2F5cyBpbmNsdWRlcyBgYCJiImBgLgotCi0tIElzc3VlICM0ODYxOiBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkoKTogUm9idXN0aWZ5LiBGaXggbGlicmFyeSBkZXRlY3Rpb24gb24KLSAgYmlhcmNoIHN5c3RlbXMuIFRyeSB0byByZWx5IG9uIGxkY29uZmlnIG9ubHksIHdpdGhvdXQgdXNpbmcgb2JqZHVtcCBhbmQgZ2NjLgotCi0tIElzc3VlICMyNzAzOiBTaW1wbGVYTUxSUENEaXNwYXRjaGVyLl9faW5pdF9fOiBQcm92aWRlIGRlZmF1bHQgdmFsdWVzIGZvcgotICBuZXcgYXJndW1lbnRzIGludHJvZHVjZWQgaW4gMi41LgotCi0tIElzc3VlICMxODg1OiBkaXN0dXRpbHMuIFdoZW4gcnVubmluZyBzZGlzdCB3aXRoIC0tZm9ybWF0cz10YXIsZ3p0YXIKLSAgdGhlIHRhciBmaWxlIHdhcyBvdmVycmlkZW4gYnkgdGhlIGd6dGFyIG9uZS4KLQotLSBSZWdpc3RlcmVkIERlY2ltYWwgYXMgYSBudW1iZXJzLk51bWJlciBzbyB0aGF0IGlzaW5zdGFuY2UoZCwgTnVtYmVyKSB3b3Jrcy4KLQotLSBJc3N1ZSAjMTY3MjMzMjogZml4IHVucGlja2xpbmcgb2Ygc3Vibm9ybWFsIGZsb2F0cywgd2hpY2ggd2FzCistIElzc3VlICMxNjcyMzMyOiBGaXggdW5waWNrbGluZyBvZiBzdWJub3JtYWwgZmxvYXRzLCB3aGljaCB3YXMKICAgcHJvZHVjaW5nIGEgVmFsdWVFcnJvciBvbiBzb21lIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMzg4MTogSGVscCBUY2wgdG8gbG9hZCBldmVuIHdoZW4gc3RhcnRlZCB0aHJvdWdoIHRoZSB1bnJlYWRhYmxlIGxvY2FsCisgIHN5bWxpbmsgdG8gIlByb2dyYW0gRmlsZXMiIG9uIFZpc3RhLgorCistIElzc3VlICM0NzEwOiBFeHRyYWN0IGRpcmVjdG9yaWVzIHByb3Blcmx5IGluIHRoZSB6aXBmaWxlIG1vZHVsZTsgYWxsb3cgYWRkaW5nCisgIGRpcmVjdG9yaWVzIHRvIGEgemlwZmlsZS4KKworLSBJc3N1ZSAjMzgwNzogX211bHRpcHJvY2Vzc2luZyBidWlsZCBmYWlscyB3aGVuIGNvbmZpZ3VyZSBpcyBwYXNzZWQKKyAgLS13aXRob3V0LXRocmVhZHMgYXJndW1lbnQuIFdoZW4gdGhpcyBvY2N1cnMsIF9tdWx0aXByb2Nlc3Npbmcgd2lsbCBiZQorICBkaXNhYmxlZCwgYW5kIG5vdCBjb21waWxlZC4KKworLSBJc3N1ZSAjNTAwODogV2hlbiBhIGZpbGUgaXMgb3BlbmVkIGluIGFwcGVuZCBtb2RlIHdpdGggdGhlIG5ldyBJTyBsaWJyYXJ5LCBkbworICBhbiBleHBsaWNpdCBzZWVrIHRvIHRoZSBlbmQgb2YgZmlsZSAoc28gdGhhdCBlLmcuIHRlbGwoKSByZXR1cm5zIHRoZSBmaWxlIHNpemUKKyAgcmF0aGVyIHRoYW4gMCkuIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHRyYWRpdGlvbmFsIDIueAorICBmaWxlIG9iamVjdC4KKworLSBJc3N1ZSAjNTAxMzogRml4ZWQgYSBidWcgaW4gRmlsZUhhbmRsZXIgd2hpY2ggb2NjdXJyZWQgd2hlbiB0aGUgZGVsYXkKKyAgcGFyYW1ldGVyIHdhcyBzZXQuCisKKy0gSXNzdWUgIzQ5OTg6IFRoZSBtZW1vcnkgc2F2aW5nIGVmZmVjdCBvZiBfX3Nsb3RzX18gaGFkIGJlZW4gbG9zdCBvbiBGcmFjdGlvbnMKKyAgd2hpY2ggaW5oZXJpdGVkIGZyb20gbnVtYmVycy5weSB3aGljaCBkaWQgbm90IGhhdmUgX19zbG90c19fIGRlZmluZWQuICBUaGUKKyAgbnVtYmVycyBoaWVyYXJjaHkgbm93IGhhcyBpdHMgb3duIF9fc2xvdHNfXyBkZWNsYXJhdGlvbnMuCisKKy0gSXNzdWUgIzMzMjE6IF9tdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbigpIGRvZXNuJ3QgY2hlY2sgaGFuZGxlOyBhZGRlZCBjaGVja3MKKyAgZm9yICpuaXggbWFjaGluZXMgZm9yIG5lZ2F0aXZlIGhhbmRsZXMgYW5kIGxhcmdlIGludCBoYW5kbGVzLiAgV2l0aG91dCB0aGlzCisgIGNoZWNrIGl0IGlzIHBvc3NpYmxlIHRvIHNlZ2ZhdWx0IHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjNDQ0OTogQXNzZXJ0aW9uRXJyb3IgaW4gbXBfYmVuY2htYXJrcy5weSwgY2F1c2VkIGJ5IGFuIHVuZGVybHlpbmcgaXNzdWUKKyAgaW4gc2hhcmVkY3R5cGVzLnB5LgorCistIElzc3VlICMxMjI1MTA3OiBpbnNwZWN0LmlzY2xhc3MoKSByZXR1cm5lZCBUcnVlIGZvciBpbnN0YW5jZXMgd2l0aCBhIGN1c3RvbQorICBfX2dldGF0dHJfXy4KKworLSBJc3N1ZSAjMzk5NzogWmlwZmlsZXMgZ2VuZXJhdGVkIHdpdGggbW9yZSB0aGFuIDY1NTM2IGZpbGVzIGNvdWxkIG5vdCBiZSBvcGVuZWQKKyAgd2l0aCBvdGhlciBhcHBsaWNhdGlvbnMuCisKKy0gSXNzdWUgIzExNjIxNTQ6IGBgaW5zcGVjdC5nZXRtZW1iZXJzKClgYCBub3cgc2tpcHMgYXR0cmlidXRlcyB0aGF0IHJhaXNlCisgIEF0dHJpYnV0ZUVycm9yLCBlLmcuIGEgX19zbG90c19fIGF0dHJpYnV0ZSB3aGljaCBoYXMgbm90IGJlZW4gc2V0LgorCistIElzc3VlICMxNjk2MTk5OiBBZGQgY29sbGVjdGlvbnMuQ291bnRlcigpIGZvciByYXBpZCBhbmQgY29udmVuaWVudCBjb3VudGluZy4KKworLSBJc3N1ZSAjMzg2MDogR3ppcEZpbGUgYW5kIEJaMkZpbGUgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKworLSBJc3N1ZSAjNDI3MjogQWRkIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvciB0byBvdmVycmlkZQorICB0aGUgdGltZXN0YW1wIGluIHRoZSBnemlwIHN0cmVhbS4gIFRoZSBkZWZhdWx0IHZhbHVlIHJlbWFpbnMgdGhlIGN1cnJlbnQgdGltZS4KKyAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5IGUuZy4gZ3VuemlwIHdoZW4gZGVjb21wcmVzc2luZy4gIFBhdGNoIGJ5CisgIEphY3F1ZXMgRnJlY2hldC4KKwogLSBSZXN0b3JlIFB5dGhvbiAyLjMgY29tcGF0aWJpbGl0eSBmb3IgZGVjaW1hbC5weS4KIAogLSBJc3N1ZSAjMTcwMjU1MTogZGlzdHV0aWxzIHNkaXN0IHdhcyBub3QgZXhjbHVkaW5nIFZDUyBkaXJlY3RvcmllcyB1bmRlcgogICBXaW5kb3dzLiBJbml0YWwgc29sdXRpb24gYnkgR3V5IERhbGJlcnRvLgogCi0tIElzc3VlICM0ODEyOiBhZGQgbWlzc2luZyB1bmRlcnNjb3JlIHByZWZpeCB0byBzb21lIGludGVybmFsLXVzZS1vbmx5Ci0gIGNvbnN0YW50cyBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuICAoRGVjXzAgYmVjb21lcyBfRGVjXzAsIGV0Yy4pCistIFRoZSBfdGtpbnRlciBtb2R1bGUgZnVuY3Rpb25zICJjcmVhdGVmaWxlaGFuZGxlciIsICJkZWxldGVmaWxlaGFuZGxlciIsCisgICJjcmVhdGV0aW1lcmhhbmRsZXIiLCAibWFpbmxvb3AiLCAiZG9vbmVldmVudCIgYW5kICJxdWl0IiBoYXZlIGJlZW4gZGVwcmVjYXRlZAorICBmb3IgcmVtb3ZhbCBpbiAzLngKKworLSBJc3N1ZSAjNDc5NjogQWRkZWQgRGVjaW1hbC5mcm9tX2Zsb2F0KCkgYW5kCisgIENvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgpIHRvIHRoZSBkZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjNDgxMjogQWRkIG1pc3NpbmcgdW5kZXJzY29yZSBwcmVmaXggdG8gc29tZSBpbnRlcm5hbC11c2Utb25seSBjb25zdGFudHMKKyAgaW4gdGhlIGRlY2ltYWwgbW9kdWxlLiAgKERlY18wIGJlY29tZXMgX0RlY18wLCBldGMuKQogCiAtIElzc3VlICM0Nzk1OiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oKSByZXR1cm5zIEZhbHNlIGluc3RlYWQgb2YgTm9uZSB3aGVuCiAgIHRoZSBmdW5jdGlvbiBpcyBub3QgYSBnZW5lcmF0b3IuCiAKLS0gSXNzdWUgIzQ3MDI6IFRocm93aW5nIGEgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciBpbnN0ZWFkIG9mIElPRXJyb3IgaW4gY2FzZQotICBubyBNU1ZDIGNvbXBpbGVyIGlzIGZvdW5kIHVuZGVyIFdpbmRvd3MuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWxpcCBKZW52ZXkuCistIElzc3VlICM0NzAyOiBUaHJvd2luZyBhIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IgaW5zdGVhZCBvZiBJT0Vycm9yIGluIGNhc2Ugbm8KKyAgTVNWQyBjb21waWxlciBpcyBmb3VuZCB1bmRlciBXaW5kb3dzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbGlwIEplbnZleS4KIAotICAtIElzc3VlICM0NzM5OiBBZGQgcHlkb2MgaGVscCB0b3BpY3MgZm9yIHN5bWJvbHMsIHNvIHRoYXQgZS5nLiBoZWxwKCdAJykKLSAgd29ya3MgYXMgZXhwZWN0ZWQgaW4gdGhlIGludGVyYWN0aXZlIGVudmlyb25tZW50LgorLSBJc3N1ZSAjNDY0NjogZGlzdHV0aWxzIHdhcyBjaG9raW5nIG9uIGVtcHR5IG9wdGlvbnMgYXJnIGluIHRoZSBzZXR1cCBmdW5jdGlvbi4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEhlbGxlci4KKworLSBGcmFjdGlvbnMuZnJvbV9mbG9hdCgpIG5vIGxvbmdlciBsb3NlcyBwcmVjaXNpb24gZm9yIGludGVnZXJzIHRvbyBiaWcgdG8gY2FzdAorICBhcyBmbG9hdHMuCisKKy0gSXNzdWUgIzQ3OTA6IFRoZSBuc21hbGxlc3QoKSBhbmQgbmxhcmdlc3QoKSBmdW5jdGlvbnMgaW4gdGhlIGhlYXBxIG1vZHVsZSBkaWQKKyAgdW5uZWNlc3Nhcnkgd29yayBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgbm8ga2V5IGZ1bmN0aW9uIHdhcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzM3Njc6IENvbnZlcnQgVGsgb2JqZWN0IHRvIHN0cmluZyBpbiB0a0NvbG9yQ2hvb3Nlci4KKworLSBJc3N1ZSAjMzI0ODogQWxsb3cgcGxhY2luZyBTY3JvbGxlZFRleHQgaW4gYSBQYW5lZFdpbmRvdy4KKworLSBJc3N1ZSAjNDQ0NDogQWxsb3cgYXNzZXJ0UmFpc2VzKCkgdG8gYmUgdXNlZCBhcyBhIGNvbnRleHQgaGFuZGxlciwgc28gdGhhdCB0aGUKKyAgY29kZSB1bmRlciB0ZXN0IGNhbiBiZSB3cml0dGVuIGlubGluZSBpZiBtb3JlIHByYWN0aWNhbC4KKworLSBJc3N1ZSAjNDczOTogQWRkIHB5ZG9jIGhlbHAgdG9waWNzIGZvciBzeW1ib2xzLCBzbyB0aGF0IGUuZy4gaGVscCgnQCcpIHdvcmtzCisgIGFzIGV4cGVjdGVkIGluIHRoZSBpbnRlcmFjdGl2ZSBlbnZpcm9ubWVudC4KIAogLSBJc3N1ZSAjNDc1NjogemlwZmlsZS5pc196aXBmaWxlKCkgbm93IHN1cHBvcnRzIGZpbGUtbGlrZSBvYmplY3RzLiBQYXRjaCBieQogICBHYWJyaWVsIEdlbmVsbGluYS4KIAotLSBJc3N1ZSAjNDY0NjogZGlzdHV0aWxzIHdhcyBjaG9raW5nIG9uIGVtcHR5IG9wdGlvbnMgYXJnIGluIHRoZSBzZXR1cAotICBmdW5jdGlvbi4gT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEhlbGxlci4KLQogLSBJc3N1ZSAjNDQwMDogLnB5cGlyYyBkZWZhdWx0IGdlbmVyYXRlZCBmaWxlIHdhcyBicm9rZW4gaW4gZGlzdHV0aWxzLgogCiAtIElzc3VlICM0NzM2OiBpby5CdWZmZXJlZFJXUGFpcidzIGNsb3NlZCBwcm9wZXJ0eSBub3cgZnVuY3Rpb25zIHByb3Blcmx5LgogCi0tIElzc3VlICMzOTU0OiBGaXggYSBwb3RlbnRpYWwgU3lzdGVtRXJyb3IgaW4gX2hvdHNob3QubG9ncmVhZGVyIGVycm9yCi0gIGhhbmRsaW5nLgorLSBJc3N1ZSAjMzk1NDogRml4IGEgcG90ZW50aWFsIFN5c3RlbUVycm9yIGluIF9ob3RzaG90LmxvZ3JlYWRlciBlcnJvciBoYW5kbGluZy4KKworLSBJc3N1ZSAjNDU3NDogRml4IGEgY3Jhc2ggaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciB3aGVuIGEgY2FycmlhZ2UKKyAgcmV0dXJuIGVuY29kZXMgdG8gbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2UgZW5jb2RpbmcgKGUuZy4gVVRGLTE2KSBhbmQKKyAgZ2V0cyBzcGxpdCBvbiBhIGNodW5rIGJvdW5kYXJ5LgorCistIElzc3VlICM0MjIzOiBpbnNwZWN0LmdldHNvdXJjZSgpIHdpbGwgbm93IGNvcnJlY3RseSBkaXNwbGF5IHNvdXJjZSBjb2RlIGZvcgorICBwYWNrYWdlcyBsb2FkZWQgdmlhIHppcGltcG9ydCAob3IgYW55IG90aGVyIGNvbmZvcm1hbnQgUEVQIDMwMgorICBsb2FkZXIpLiBPcmlnaW5hbCBwYXRjaCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreS4KKworLSBJc3N1ZSAjNDIwMTogcGRiIGNhbiBub3cgYWNjZXNzIGFuZCBkaXNwbGF5IHNvdXJjZSBjb2RlIGxvYWRlZCB2aWEgemlwaW1wb3J0CisgIChvciBhbnkgb3RoZXIgY29uZm9ybWFudCBQRVAgMzAyIGxvYWRlcikuICBPcmlnaW5hbCBwYXRjaCBieSBBbGV4YW5kZXIKKyAgQmVsb3BvbHNreS4KKworLSBJc3N1ZSAjNDE5NzogRG9jdGVzdHMgaW4gbW9kdWxlcyBsb2FkZWQgdmlhIHppcGltcG9ydCAob3IgYW55IG90aGVyIFBFUCAzMDIKKyAgY29uZm9ybWFudCBsb2FkZXIpIHdpbGwgbm93IHdvcmsgY29ycmVjdGx5IGluIG1vc3QgY2FzZXMgKHRoZXkgYXJlIHN0aWxsCisgIHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnRzIHRoYXQgZXhpc3QgZm9yIGFsbCBjb2RlIHJ1bm5pbmcgZnJvbSBpbnNpZGUgYQorICBtb2R1bGUgbG9hZGVkIHZpYSBhIFBFUCAzMDIgbG9hZGVyIGFuZCBhdHRlbXB0aW5nIHRvIHBlcmZvcm0gSU8gb3BlcmF0aW9ucworICBiYXNlZCBvbiBfX2ZpbGVfXykuICBPcmlnaW5hbCBwYXRjaCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreS4KKworLSBJc3N1ZXMgIzQwODIgYW5kICM0NTEyOiBBZGQgcnVucHkgc3VwcG9ydCB0byB6aXBpbXBvcnQgaW4gYSBtYW5uZXIgdGhhdCBhbGxvd3MKKyAgYmFja3BvcnRpbmcgdG8gbWFpbnRlbmFuY2UgYnJhbmNoZXMuICBPcmlnaW5hbCBwYXRjaCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreS4KIAogLSBJc3N1ZSAjNDE2MzogVXNlIHVuaWNvZGUtZnJpZW5kbHkgd29yZCBzcGxpdHRpbmcgaW4gdGhlIHRleHR3cmFwIGZ1bmN0aW9ucwogICB3aGVuIGdpdmVuIGFuIHVuaWNvZGUgc3RyaW5nLgogCiAtIElzc3VlICM0NjE2OiBUYXJGaWxlLnV0aW1lKCk6IFJlc3RvcmUgZGlyZWN0b3J5IHRpbWVzIG9uIFdpbmRvd3MuCiAKLS0gSXNzdWUgIzQwODQ6IEZpeCBtYXgsIG1pbiwgbWF4X21hZyBhbmQgbWluX21hZyBEZWNpbWFsIG1ldGhvZHMgdG8KLSAgZ2l2ZSBjb3JyZWN0IHJlc3VsdHMgaW4gdGhlIGNhc2Ugd2hlcmUgb25lIGFyZ3VtZW50IGlzIGEgcXVpZXQgTmFOCi0gIGFuZCB0aGUgb3RoZXIgaXMgYSBmaW5pdGUgbnVtYmVyIHRoYXQgcmVxdWlyZXMgcm91bmRpbmcuCistIElzc3VlICM0MDg0OiBGaXggbWF4LCBtaW4sIG1heF9tYWcgYW5kIG1pbl9tYWcgRGVjaW1hbCBtZXRob2RzIHRvIGdpdmUgY29ycmVjdAorICByZXN1bHRzIGluIHRoZSBjYXNlIHdoZXJlIG9uZSBhcmd1bWVudCBpcyBhIHF1aWV0IE5hTiBhbmQgdGhlIG90aGVyIGlzIGEKKyAgZmluaXRlIG51bWJlciB0aGF0IHJlcXVpcmVzIHJvdW5kaW5nLgogCi0tIElzc3VlICMxMDMwMjUwOiBEaXN0dXRpbHMgY3JlYXRlZCBkaXJlY3RvcmllcyBldmVuIHdoZW4gcnVuIHdpdGggdGhlCi0gIC0tZHJ5LXJ1biBvcHRpb24uCistIElzc3VlICMxMDMwMjUwOiBEaXN0dXRpbHMgY3JlYXRlZCBkaXJlY3RvcmllcyBldmVuIHdoZW4gcnVuIHdpdGggdGhlIC0tZHJ5LXJ1bgorICBvcHRpb24uCiAKLS0gSXNzdWUgIzQ0ODM6IF9kYm0gbW9kdWxlIG5vdyBidWlsZHMgb24gc3lzdGVtcyB3aXRoIGdkYm0gJiBnZGJtX2NvbXBhdAotICBsaWJzLgorLSBJc3N1ZSAjNDQ4MzogX2RibSBtb2R1bGUgbm93IGJ1aWxkcyBvbiBzeXN0ZW1zIHdpdGggZ2RibSAmIGdkYm1fY29tcGF0IGxpYnMuCiAKLS0gSXNzdWUgIzQ1Mjk6IGZpeCB0aGUgcGFyc2VyIG1vZHVsZSdzIHZhbGlkYXRpb24gb2YgdHJ5LWV4Y2VwdC1maW5hbGx5CistIElzc3VlICM0NTI5OiBGaXggdGhlIHBhcnNlciBtb2R1bGUncyB2YWxpZGF0aW9uIG9mIHRyeS1leGNlcHQtZmluYWxseQogICBzdGF0ZW1lbnRzLgogCiAtIElzc3VlICM0NDU4OiBnZXRvcHQuZ251X2dldG9wdCgpIG5vdyByZWNvZ25pemVzIGEgc2luZ2xlICItIiBhcyBhbiBhcmd1bWVudCwKICAgbm90IGEgbWFsZm9ybWVkIG9wdGlvbi4KIAotLSBBZGRlZCB0aGUgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBnZXQgb3V0cHV0Ci0gIGZyb20gYSBzdWJwcm9jZXNzIG9uIHN1Y2Nlc3Mgb3IgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIGVycm9yLgorLSBBZGRlZCB0aGUgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoKSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBnZXQgb3V0cHV0IGZyb20gYQorICBzdWJwcm9jZXNzIG9uIHN1Y2Nlc3Mgb3IgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIGVycm9yLgogCiAtIElzc3VlICMxMDU1MjM0OiBjZ2kucGFyc2VfaGVhZGVyKCk6IEZpeGVkIHBhcnNpbmcgb2YgaGVhZGVyIHBhcmFtZXRlcnMgdG8KICAgc3VwcG9ydCB1bnVzdWFsIGZpbGVuYW1lcyAoc3VjaCBhcyB0aG9zZSBjb250YWluaW5nIHNlbWktY29sb25zKSBpbgogICBDb250ZW50LURpc3Bvc2l0aW9uIGhlYWRlcnMuCiAKLS0gSXNzdWUgIzQ3MzA6IEZpeGVkIHRoZSBjUGlja2xlIG1vZHVsZSB0byBoYW5kbGUgY29ycmVjdGx5IGFzdHJhbCBjaGFyYWN0ZXJzCi0gIHdoZW4gcHJvdG9jb2wgMCBpcyB1c2VkLgotCi0tIElzc3VlICMxNjI3ODk1MjogcGxhdC1tYWMvdmlkZW9yZWFkZXIucHkgbm93IGNvcnJlY3RseSBpbXBvcnRzIE1lZGlhRGVzY3IKLQotLSBJc3N1ZSAjMTczNzgzMiA6IHBsYXQtbWFjL0Vhc3lEaWFsb2cucHkgbm8gbG9uZ2VyIHVzZXMgdGhlIGJyb2tlbiBhZXBhY2sKLSAgbW9kdWxlLgotCi0tIElzc3VlICMxMTQ5ODA0OiBtYWNvc3Rvb2xzLm1rZGlycyBub3cgZXZlbiB3b3JrcyB3aGVuIGFub3RoZXIgcHJvY2VzcwotICBjcmVhdGVzIG9uZSBvZiB0aGUgbmVlZGVkIHN1YmRpcmVjdG9yaWVzLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjNDY3NzogYWRkIHR3byBsaXN0IGNvbXByZWhlbnNpb24gdGVzdHMgdG8gcHliZW5jaC4KLQotRXh0ZW5zaW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzQzMDE6IFBhdGNoIHRoZSBsb2dnaW5nIG1vZHVsZSB0byBhZGQgcHJvY2Vzc05hbWUgc3VwcG9ydCwgcmVtb3ZlCi0gIF9jaGVja19sb2dnZXJfY2xhc3MgZnJvbSBtdWx0aXByb2Nlc3NpbmcuCi0KLS0gSXNzdWUgIzEwNDAwMjY6IEZpeCBvcy50aW1lcyByZXN1bHQgb24gc3lzdGVtcyB3aGVyZSBIWiBpcyBpbmNvcnJlY3QuCi0KLS0gSXNzdWUgIzQzOTc6IEZpeCBvY2Nhc2lvbmFsIHRlc3Rfc29ja2V0IGZhaWx1cmUgb24gT1MgWC4KLQotLSBJc3N1ZSAjNDI3OTogRml4IGJ1aWxkIG9mIHBhcnNlcm1vZHVsZSB1bmRlciBDeWd3aW4uCi0KLS0gSXNzdWUgIzQwNTE6IFByZXZlbnQgY29uZmxpY3Qgb2YgVU5JQ09ERSBtYWNyb3MgaW4gY1BpY2tsZS4KLQotLSBJc3N1ZSAjNDIyODogUGFjayBuZWdhdGl2ZSB2YWx1ZXMgdGhlIHNhbWUgd2F5IGFzIDIuNCBpbiBzdHJ1Y3QncyBMIGZvcm1hdC4KLQotLSBJc3N1ZSAjMTA0MDAyNjogRml4IG9zLnRpbWVzIHJlc3VsdCBvbiBzeXN0ZW1zIHdoZXJlIEhaIGlzIGluY29ycmVjdC4KLQotLSBJc3N1ZXMgIzMxNjcsICMzNjgyOiBGaXggdGVzdF9tYXRoIGZhaWx1cmVzIGZvciBsb2csIGxvZzEwIG9uIFNvbGFyaXMsCi0gIE9wZW5CU0QuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIExpbmsgdGhlIHNoYXJlZCBweXRob24gbGlicmFyeSB3aXRoICQoTU9ETElCUykuCi0KLS0gSXNzdWUgIzUxMzQ6IFNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBjb21waWxpbmcgc3FsaXRlIHdpdGggVkMrKy4KLQotLSBJc3N1ZSAjNDQ5NDogRml4IGJ1aWxkIHdpdGggUHlfTk9fRU5BQkxFX1NIQVJFRCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICM0ODk1OiBVc2UgX3N0cmR1cCBvbiBXaW5kb3dzIENFLgotCi0tIElzc3VlICM0NDcyOiAiY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZCIgbm93IHdvcmtzIG9uIE9TWAotCi0tIElzc3VlcyAjNDcyOCBhbmQgIzQwNjA6IFdPUkRTX0JJR0VESUFOIGlzIG5vdyBjb3JyZWN0IGluIFVuaXZlcnNhbCBidWlsZHMuCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICM0NzIwOiBUaGUgZm9ybWF0IGZvciBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMgY2FuIGJlZ2luIHdpdGggJ3wnLgotCi0tIElzc3VlICMzNjMyOiBmcm9tIHRoZSBnZGIgZGVidWdnZXIsIHRoZSAncHlvJyBtYWNybyBjYW4gbm93IGJlIGNhbGxlZCB3aGVuCi0gIHRoZSBHSUwgaXMgcmVsZWFzZWQsIG9yIG93bmVkIGJ5IGFub3RoZXIgdGhyZWFkLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjNTYzNTogRml4IHJ1bm5pbmcgdGVzdF9zeXMgd2l0aCB0cmFjaW5nIGVuYWJsZWQuCi0KLS0gcmVncnRlc3Qgbm8gbG9uZ2VyIHRyZWF0cyBJbXBvcnRFcnJvciBhcyBlcXVpdmFsZW50IHRvIFNraXBUZXN0LiAgSW1wb3J0cwotICB0aGF0IHNob3VsZCBjYXVzZSBhIHRlc3QgdG8gYmUgc2tpcHBlZCBhcmUgbm93IGRvbmUgdXNpbmcgaW1wb3J0X21vZHVsZQotICBmcm9tIHRlc3Qgc3VwcG9ydCwgd2hpY2ggZG9lcyB0aGUgY29udmVyc2lvbi4KLQotLSBJc3N1ZSAjNTA4MzogTmV3ICdndWknIHJlc291cmNlIGZvciByZWdydGVzdC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYuMQotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDQtRGVjLTIwMDgqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMzOTk2OiBPbiBXaW5kb3dzLCB0aGUgUHlPU19DaGVja1N0YWNrIGZ1bmN0aW9uIHdvdWxkIGNhdXNlIHRoZQotICBpbnRlcnByZXRlciB0byBhYm9ydCAoIkZhdGFsIFB5dGhvbiBlcnJvcjogQ291bGQgbm90IHJlc2V0IHRoZSBzdGFjayEiKQotICBpbnN0ZWFkIG9mIHRocm93aW5nIGEgTWVtb3J5RXJyb3IuCi0KLS0gSXNzdWUgIzQzNjc6IFB5dGhvbiB3b3VsZCBzZWdmYXVsdCBkdXJpbmcgY29tcGlsaW5nIHdoZW4gdGhlIHVuaWNvZGVkYXRhCi0gIG1vZHVsZSBjb3VsZG4ndCBiZSBpbXBvcnRlZCBhbmQgXE4gZXNjYXBlcyB3ZXJlIHByZXNlbnQuCi0KLS0gSXNzdWUgIzQzNDg6IFNvbWUgYnl0ZWFycmF5IG1ldGhvZHMgcmV0dXJuZWQgdGhhdCBkaWRuJ3QgY2F1c2UgYW55IGNoYW5nZSB0bwotICB0aGUgYnl0ZWFycmF5LCByZXR1cm5lZCB0aGUgc2FtZSBieXRlYXJyYXkgaW5zdGVhZCBvZiBhIGNvcHkuCi0KLS0gSXNzdWUgIzQzMTc6IEZpeGVkIGEgY3Jhc2ggaW4gdGhlIGltYWdlb3AucmdiMnJnYjgoKSBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjNDIzMDogSWYgYGBfX2dldGF0dHJfX2BgIGlzIGEgZGVzY3JpcHRvciwgaXQgbm93IGZ1bmN0aW9ucyBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzQwNDg6IFRoZSBwYXJzZXIgbW9kdWxlIG5vdyBjb3JyZWN0bHkgdmFsaWRhdGVzIHJlbGF0aXZlIGltcG9ydHMuCi0KLS0gSXNzdWUgIzQyMjU6IGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzYGAgZGlkbid0IHdvcmsgaW4gYW4KLSAgZXhlYyBzdGF0ZW1lbnQuCi0KLS0gSXNzdWUgIzQxNzY6IEZpeGVkIGEgY3Jhc2ggd2hlbiBwaWNrbGluZyBhbiBvYmplY3Qgd2hpY2ggYGBfX3JlZHVjZV9fYGAKLSAgbWV0aG9kIGRvZXMgbm90IHJldHVybiBpdGVyYXRvcnMgZm9yIHRoZSA0dGggYW5kIDV0aCBpdGVtcy4KLQotLSBJc3N1ZSAjNDIwOTogRW5hYmxpbmcgdW5pY29kZV9saXRlcmFscyBhbmQgdGhlIHByaW50X2Z1bmN0aW9uIGluIHRoZSBzYW1lCi0gIF9fZnV0dXJlX18gaW1wb3J0IGRpZG4ndCB3b3JrLgotCi0tIE9uIHdpbmRvd3MsIG9zLmNoZGlyIGdpdmVuIHVuaWNvZGUgd2FzIG5vdCB3b3JraW5nIGlmIEdldEN1cnJlbnREaXJlY3RvcnlXCi0gIHJldHVybmVkIGEgcGF0aCBsb25nZXIgdGhhbiBNQVhfUEFUSC4gKEJ1dCBJdCdzIGRvdWJ0ZnVsIHRoaXMgY29kZSBwYXRoIGlzCi0gIHJlYWxseSBleGVjdXRlZCBiZWNhdXNlIEkgY2Fubm90IG1vdmUgdG8gc3VjaCBkaXJlY3Rvcnkgb24gd2luMmspCi0KLS0gSXNzdWUgIzQwNjk6IFdoZW4gc2V0LnJlbW92ZShlbGVtZW50KSBpcyB1c2VkIHdpdGggYSBzZXQgZWxlbWVudCwgdGhlIGVsZW1lbnQKLSAgaXMgdGVtcG9yYXJpbHkgcmVwbGFjZWQgd2l0aCBhbiBlcXVpdmFsZW50IGZyb3plbnNldC4gIEJ1dCB0aGUgZXZlbnR1YWwKLSAgS2V5RXJyb3Igd291bGQgYWx3YXlzIHJlcG9ydCB0aGUgZW1wdHkgZnJvemVuc2V0KFtdKSBhcyB0aGUgbWlzc2luZyBrZXkuIE5vdwotICBpdCBjb3JyZWN0bHkgcmVmZXJzIHRvIHRoZSBpbml0aWFsIGVsZW1lbnQuCi0KLS0gRml4ZWQgQzk5IHN0eWxlIGNvbW1lbnRzIGluIHNldmVyYWwgZmlsZXMuIFB5dGhvbiBpcyBub3cgQzg5IGNvbXBhdGlibGUKLSAgYWdhaW4uCi0KLUxpYnJhcnkKLS0tLS0tLS0KKy0gSXNzdWUgIzQzODQ6IEFkZGVkIGxvZ2dpbmcgaW50ZWdyYXRpb24gd2l0aCB3YXJuaW5ncyBtb2R1bGUgdXNpbmcKKyAgY2FwdHVyZVdhcm5pbmdzKCkuICBUaGlzIGNoYW5nZSBpbmNsdWRlcyBhIE51bGxIYW5kbGVyIHdoaWNoIGRvZXMgbm90aGluZzsgaXQKKyAgd2lsbCBiZSBvZiB1c2UgdG8gbGlicmFyeSBkZXZlbG9wZXJzIHdobyB3YW50IHRvIGF2b2lkIHRoZSAiTm8gaGFuZGxlcnMgY291bGQKKyAgYmUgZm91bmQgZm9yIGxvZ2dlciBYWFgiIG1lc3NhZ2Ugd2hpY2ggY2FuIGFwcGVhciBpZiB0aGUgbGlicmFyeSB1c2VyIGRvZXNuJ3QKKyAgY29uZmlndXJlIGxvZ2dpbmcuCiAKIC0gSXNzdWUgIzM3NDE6IERJU1RVVElMU19VU0VfU0RLIHNldCBjYXVzZXMgbXN2Yzljb21waWxlci5weSB0byByYWlzZSBhbgogICBleGNlcHRpb24uCiAKLS0gSXNzdWUgIzQzNjM6IFRoZSB1dWlkLnV1aWQxKCkgYW5kIHV1aWQudXVpZDQoKSBmdW5jdGlvbnMgbm93IHdvcmsgZXZlbiBpZgotICB0aGUgY3R5cGVzIG1vZHVsZSBpcyBub3QgcHJlc2VudC4KKy0gSXNzdWUgIzQzNjM6IFRoZSB1dWlkLnV1aWQxKCkgYW5kIHV1aWQudXVpZDQoKSBmdW5jdGlvbnMgbm93IHdvcmsgZXZlbiBpZiB0aGUKKyAgY3R5cGVzIG1vZHVsZSBpcyBub3QgcHJlc2VudC4KKworLSBGaWxlSU8ncyBtb2RlIGF0dHJpYnV0ZSBub3cgYWx3YXlzIGluY2x1ZGVzIGBgImIiYGAuCiAKIC0gSXNzdWUgIzQxMTY6IFJlc29sdmUgbWVtYmVyIG5hbWUgY29uZmxpY3QgaW4gU2Nyb2xsZWRDYW52YXMuX19pbml0X18uCiAKKy0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbi5wdXRoZWFkZXIoKSBub3cgYWNjZXB0cyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHZhbHVlcworICBmb3IgYW55IGhlYWRlciwgbWF0Y2hpbmcgd2hhdCB0aGUgZG9jdW1lbnRhdGlvbiBoYXMgY2xhaW1lZCBmb3IgYSB3aGlsZS4KKwogLSBJc3N1ZSAjMzc3NDogRml4ZWQgYW4gZXJyb3Igd2hlbiBjcmVhdGUgYSBUa2ludGVyIG1lbnUgaXRlbSB3aXRob3V0IGNvbW1hbmQKICAgYW5kIHRoZW4gcmVtb3ZlIGl0LgogCkBAIC0xNzk3LDkgKzM1NzIsOTkgQEAKIC0gSXNzdWUgIzQwMTQ6IERvbid0IGNsYWltIHRoYXQgUHl0aG9uIGhhcyBhbiBBbHBoYSByZWxlYXNlIHN0YXR1cywgaW4gYWRkaXRpb24KICAgdG8gY2xhaW1pbmcgaXQgaXMgTWF0dXJlLgogCistIElzc3VlICM0NzMwOiBGaXhlZCB0aGUgY1BpY2tsZSBtb2R1bGUgdG8gaGFuZGxlIGNvcnJlY3RseSBhc3RyYWwgY2hhcmFjdGVycworICB3aGVuIHByb3RvY29sIDAgaXMgdXNlZC4KKworLSBJc3N1ZSAjMTU5NDogTWFjT1MuR2V0Q3JlYXRvckFuZFR5cGUgbm93IGFsd2F5cyByZXR1cm5zIGEgYmlnLWVuZGlhbiByZXN1bHQsCisgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBBcHBsZSB0b29scy4KKworLSBJc3N1ZSAjOTAwOTQ5OiBwbGF0LW1hYy92aWRlb3JlYWRlci5weSBubyBsb25nZXIgcmVsaWVzIG9uIGEgbm9uLWV4aXN0aW5nCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjMTYyNzg5NTI6IHBsYXQtbWFjL3ZpZGVvcmVhZGVyLnB5IG5vdyBjb3JyZWN0bHkgaW1wb3J0cyBNZWRpYURlc2NyCisKKy0gSXNzdWUgIzE3Mzc4MzI6IHBsYXQtbWFjL0Vhc3lEaWFsb2cucHkgbm8gbG9uZ2VyIHVzZXMgdGhlIGJyb2tlbiBhZXBhY2sKKyAgbW9kdWxlLgorCistIElzc3VlICMxMTQ5ODA0OiBtYWNvc3Rvb2xzLm1rZGlycyBub3cgZXZlbiB3b3JrcyB3aGVuIGFub3RoZXIgcHJvY2VzcyBjcmVhdGVzCisgIG9uZSBvZiB0aGUgbmVlZGVkIHN1YmRpcmVjdG9yaWVzLgorCistIElzc3VlICM5MDA1MDY6IGFkZGVkIC0tbm8temlwaW1wb3J0IGZsYWcgdG8gdGhlIGJ1bmRsZWJ1aWxkZXIgc2NyaXB0LgorCistIElzc3VlICM4NDE4MDA6IGJ1bmRsZWJ1aWxkZXIgbm93IHdvcmtzIHdpdGggJ3B5dGhvbiAtTycuCisKKy0gSXNzdWUgIzQ4NjE6IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpOiBSb2J1c3RpZnkuIEZpeCBsaWJyYXJ5IGRldGVjdGlvbiBvbgorICBiaWFyY2ggc3lzdGVtcy4gIFRyeSB0byByZWx5IG9uIGxkY29uZmlnIG9ubHksIHdpdGhvdXQgdXNpbmcgb2JqZHVtcCBhbmQgZ2NjLgorCistIElzc3VlICM1MTA0OiBUaGUgc29ja2V0IG1vZHVsZSBub3cgcmFpc2VzIE92ZXJmbG93RXJyb3Igd2hlbiAxNi1iaXQgcG9ydCBhbmQKKyAgcHJvdG9jb2wgbnVtYmVycyBhcmUgc3VwcGxpZWQgb3V0c2lkZSB0aGUgYWxsb3dlZCAwLTY1NTM2IHJhbmdlIG9uIGJpbmQoKSBhbmQKKyAgZ2V0c2VydmJ5cG9ydCgpLgorCistIElzc3VlICM5OTkwNDI6IFRoZSBQeXRob24gY29tcGlsZXIgbm93IGhhbmRsZXMgZXhwbGljdCBnbG9iYWwgc3RhdGVtZW50cworICBjb3JyZWN0bHkgKHNob3VsZCBiZSBhc3NpZ25lZCB1c2luZyBTVE9SRV9HTE9CQUwgb3Bjb2RlKS4KKworLSBJc3N1ZSAjMjcwMzogU2ltcGxlWE1MUlBDRGlzcGF0Y2hlci5fX2luaXRfXzogUHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3CisgIGFyZ3VtZW50cyBpbnRyb2R1Y2VkIGluIDIuNS4KKworLSBJc3N1ZSAjNTgyOCAoSW52YWxpZCBiZWhhdmlvciBvZiB1bmljb2RlLmxvd2VyKTogRml4ZWQgYm9ndXMgbG9naWMgaW4KKyAgbWFrZXVuaWNvZGVkYXRhLnB5IGFuZCByZWdlbmVyYXRlZCB0aGUgVW5pY29kZSBkYXRhYmFzZSAoVGhpcyBmaXhlcworICB1J1x1MWQ3OScubG93ZXIoKSA9PSAnXHgwMCcpLgorCistIFdpbmRvd3MgbG9jYWxlIG1hcHBpbmcgdXBkYXRlZCB0byBWaXN0YS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gVHRrIGRlbW9zIGFkZGVkIGluIERlbW8vdGtpbnRlci90dGsvLgorCistIElzc3VlICM0Njc3OiBBZGQgdHdvIGxpc3QgY29tcHJlaGVuc2lvbiB0ZXN0cyB0byBweWJlbmNoLgorCiBCdWlsZAogLS0tLS0KIAorLSBJc3N1ZSAjNjYwMzogQ2hhbmdlIFJFQURfVElNRVNUQU1QIG1hY3JvIGluIGNldmFsLmMgc28gdGhhdCBpdCBjb21waWxlcworICBjb3JyZWN0bHkgdW5kZXIgZ2NjIG9uIHg4Ni02NC4gIFRoaXMgZml4ZXMgYSByZXBvcnRlZCBwcm9ibGVtIHdpdGggdGhlCisgIC0td2l0aC10c2MgYnVpbGQgb24geDg2LTY0LgorCistIEFkZCAyIG5ldyBvcHRpb25zIHRvIGBgLS13aXRoLXVuaXZlcnNhbC1hcmNoc2BgIG9uIE1hY09TWDogYGBpbnRlbGBgIGJ1aWxkcyBhCisgIGRpc3RyaWJ1dGlvbiB3aXRoIGBgaTM4NmBgIGFuZCBgYHg4Nl82NGBgIGFyY2hpdGVjdHVyZXMsIHdoaWxlIGBgMy13YXlgYAorICBidWlsZHMgYSBkaXN0cmlidXRpb24gd2l0aCB0aGUgYGBwcGNgYCwgYGBpMzg2YGAgYW5kIGBgeDg2XzY0YGAgYXJjaGl0ZWN0dXJlcy4KKworLSBJc3N1ZSAjNjgwMjogRml4IGJ1aWxkIGlzc3VlcyBvbiBNYWNPU1ggMTAuNi4KKworLSBJc3N1ZSAjNjI0NDogQWxsb3cgZGV0ZWN0X3RraW50ZXIgdG8gbG9vayBmb3IgVGNsL1RrIDguNi4KKworLSBJc3N1ZSAjNTM5MDogQWRkIHVuaW5zdGFsbCBpY29uIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgZmlsZSBleHRlbnNpb25zIGFyZQorICBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzU4MDk6IFNwZWNpZnlpbmcgYm90aCAtLWVuYWJsZS1mcmFtZXdvcmsgYW5kIC0tZW5hYmxlLXNoYXJlZCBpcyBhbgorICBlcnJvci4gQ29uZmlndXJlIG5vdyBleHBsaWNpdHkgdGVsbHMgeW91IGFib3V0IHRoaXMuCisKKy0gSXNzdWUgIzM1ODU6IEFkZCBwa2ctY29uZmlnIHN1cHBvcnQuICBJdCBjcmVhdGVzIGEgcHl0aG9uLTIuNy5wYyBmaWxlIGFuZCBhCisgIHB5dGhvbi5wYyBzeW1saW5rIGluIHRoZSAkKExJQkRJUikvcGtnY29uZmlnIGRpcmVjdG9yeS4gIFBhdGNoIGJ5IENsaW50b24gUm95LgorCistIElzc3VlICM2MDk0OiBCdWlsZCBjb3JyZWN0bHkgd2l0aCBTdWJ2ZXJzaW9uIDEuNy4KKworLSBJc3N1ZSAjNTg0NzogUmVtb3ZlIC1uIHN3aXRjaCBvbiAiRWRpdCB3aXRoIElETEUiIG1lbnUgaXRlbS4KKworLSBJc3N1ZSAjNTcyNjogTWFrZSBNb2R1bGVzL2xkX3NvX2FpeCByZXR1cm4gdGhlIGFjdHVhbCBleGl0IGNvZGUgb2YgdGhlIGxpbmtlciwKKyAgcmF0aGVyIHRoYW4gYWx3YXlzIGV4aXQgc3VjY2Vzc2Z1bGx5LiAgUGF0Y2ggYnkgRmxvcmlzIEJydXlub29naGUuCisKKy0gSXNzdWUgIzQ1ODc6IEFkZCBjb25maWd1cmUgb3B0aW9uIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLiB0byBzcGVjaWZ5CisgIHRoZSBvcmRlciB0aGF0IGJhY2tlbmRzIGZvciB0aGUgZGJtIGV4dGVuc2lvbiBhcmUgY2hlY2tlZC4KKworLSBMaW5rIHRoZSBzaGFyZWQgcHl0aG9uIGxpYnJhcnkgd2l0aCAkKE1PRExJQlMpLgorCistIElzc3VlICM1MTM0OiBTaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gY29tcGlsaW5nIHNxbGl0ZSB3aXRoIFZDKysuCisKKy0gSXNzdWUgIzQ0OTQ6IEZpeCBidWlsZCB3aXRoIFB5X05PX0VOQUJMRV9TSEFSRUQgb24gV2luZG93cy4KKworLSBJc3N1ZSAjNDg5NTogVXNlIF9zdHJkdXAgb24gV2luZG93cyBDRS4KKworLSBJc3N1ZSAjNDQ3MjogYGBjb25maWd1cmUgLS1lbmFibGUtc2hhcmVkYGAgbm93IHdvcmtzIG9uIE9TWC4KKworLSBJc3N1ZXMgIzQ3MjggYW5kICM0MDYwOiBXT1JEU19CSUdFRElBTiBpcyBub3cgY29ycmVjdCBpbiBVbml2ZXJzYWwgYnVpbGRzLgorCiAtIElzc3VlICM0Mzg5OiBBZGQgaWNvbiB0byB0aGUgdW5pbnN0YWxsIGVudHJ5IGluICJhZGQtYW5kLXJlbW92ZS1wcm9ncmFtcyIuCiAKIC0gSXNzdWUgIzQyODk6IFJlbW92ZSBDYW5jZWwgYnV0dG9uIGZyb20gQWR2YW5jZWREbGcuCkBAIC0xODEyLDIzICszNjc3LDIxNyBAQAogCiAtIElzc3VlICM0MDE4OiBEaXNhYmxlICJmb3IgbWUiIGluc3RhbGxhdGlvbnMgb24gVmlzdGEuCiAKLS0gSXNzdWUgIzM3NTg6IEFkZCBgYHBhdGNoY2hlY2tgYCBidWlsZCB0YXJnZXQgdG8gLlBIT05ZLgorLSBJc3N1ZSAjMzc1ODogQWRkIGBgcGF0Y2hjaGVja2BgIGJ1aWxkIHRhcmdldCB0byBgYC5QSE9OWWBgLgogCiAtIElzc3VlICM0MjA0OiBGaXhlZCBtb2R1bGUgYnVpbGQgZXJyb3JzIG9uIEZyZWVCU0QgNC4KIAorRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM2NTU2OiBGaXhlZCB0aGUgRGlzdHV0aWxzIGNvbmZpZ3VyYXRpb24gZmlsZXMgbG9jYXRpb24gZXhwbGFuYXRpb24gZm9yCisgIFdpbmRvd3MuCisKKy0gSXNzdWUgIzY4MDE6IHN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSBhbHNvIGFjY2VwdHMgYGB8YGAuICBUaGFua3MgdG8gQ2FybAorICBDaGVuZXQuCisKIEMtQVBJCiAtLS0tLQogCistIElzc3VlICM3NTI4OiBBZGQgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93IChiYWNrcG9ydGVkIGZyb20gcHkzaykuCisKKy0gSXNzdWUgIzcyMjg6IEFkZCAnJWxsZCcgYW5kICclbGx1JyBzdXBwb3J0IHRvIFB5U3RyaW5nX0Zyb21Gb3JtYXQoVikgYW5kCisgIFB5RXJyX0Zvcm1hdCwgb24gbWFjaGluZXMgd2l0aCBIQVZFX0xPTkdfTE9ORyBkZWZpbmVkLgorCistIEFkZCBuZXcgQy1BUEkgZnVuY3Rpb24gUHlPU19zdHJpbmdfdG9fZG91YmxlLCBhbmQgZGVwcmVjYXRlZCBQeU9TX2FzY2lpX2F0b2YKKyAgYW5kIFB5T1NfYXNjaWlfc3RydG9kLgorCistIFJlbW92ZWQgX1B5T1NfZG91YmxlX3RvX3N0cmluZy4gVXNlIFB5T1NfZG91YmxlX3RvX3N0cmluZyBpbnN0ZWFkLiAgVGhpcyBpcyBpbgorICBwcmVwYXJhdGlvbiBmb3IgKGJ1dCBub3Qgc3RyaWN0bHkgcmVsYXRlZCB0bykgaXNzdWUgIzcxMTcsIHNob3J0IGZsb2F0IHJlcHIuCisKKy0gSXNzdWUgIzY2MjQ6IFB5QXJnX1BhcnNlVHVwbGUgd2l0aCAicyIgZm9ybWF0IHdoZW4gcGFyc2luZyBhcmd1bWVudCB3aXRoIE5VTEw6CisgIEJvZ3VzIFR5cGVFcnJvciBkZXRhaWwgc3RyaW5nLgorCistIElzc3VlICM1OTU0OiBBZGQgYSBQeUZyYW1lX0dldExpbmVOdW1iZXIoKSBmdW5jdGlvbiB0byByZXBsYWNlIG1vc3QgdXNlcyBvZgorICBQeUNvZGVfQWRkcjJMaW5lKCkuCisKKy0gSXNzdWUgIzU5NTk6IEFkZCBhIFB5Q29kZV9OZXdFbXB0eSgpIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBlbXB0eSBjb2RlCisgIG9iamVjdCBhdCBhIHNwZWNpZmllZCBmaWxlLCBmdW5jdGlvbiwgYW5kIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNDE5NjUyOiBDaGFuZ2UgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoKSB0bworICBgYGNvbnN0IGNoYXIgKmBgIGFzIHRoZSBzdHJpbmcgaXMgc3RvcmVkIGJleW9uZCB0aGUgY2FsbC4KKworLSBTb21lIFB5Qnl0ZXNfKiBhbGlhc2VzIGhhdmUgYmVlbiByZW1vdmVkIGJlY2F1c2UgdGhleSBkb24ndCBleGlzdCBpbiAzLnguCisKKy0gSXNzdWUgIzUxNzU6IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcgbm93IHJhaXNlcyBPdmVyZmxvd0Vycm9yIGZvciBuZWdhdGl2ZQorICBhcmd1bWVudHMuICBQcmV2aW91c2x5LCBpdCByYWlzZWQgVHlwZUVycm9yLgorCistIElzc3VlICM0NzIwOiBUaGUgZm9ybWF0IGZvciBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMgY2FuIGJlZ2luIHdpdGggJ3wnLgorCistIElzc3VlICMzNjMyOiBGcm9tIHRoZSBnZGIgZGVidWdnZXIsIHRoZSAncHlvJyBtYWNybyBjYW4gbm93IGJlIGNhbGxlZCB3aGVuIHRoZQorICBHSUwgaXMgcmVsZWFzZWQsIG9yIG93bmVkIGJ5IGFub3RoZXIgdGhyZWFkLgorCiAtIElzc3VlICM0MTIyOiBPbiBXaW5kb3dzLCBmaXggYSBjb21waWxhdGlvbiBlcnJvciB3aGVuIHVzaW5nIHRoZQogICBQeV9VTklDT0RFX0lTU1BBQ0UgbWFjcm8gaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZS4KIAorLSBJc3N1ZSAjNDI5MzogUHlfQWRkUGVuZGluZ0NhbGwoKSBpcyBub3cgdGhyZWFkIHNhZmUgYW5kIGNhbiBiZSB1c2VkIGZvcgorICBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9ucyB0byBweXRob24gZnJvbSBhbnkgdGhyZWFkLiAgRG9jdW1lbnRhdGlvbiBhZGRlZC4KKwogRXh0ZW5zaW9uIE1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzY1MDg6IEFkZCBwb3NpeC57Z2V0cmVzdWlkLGdldHJlc2dpZCxzZXRyZXN1aWQsc2V0cmVzZ2lkfS4KKworLSBJc3N1ZSAjNzA3ODogU2V0IHN0cnVjdC5fX2RvY19fIGZyb20gX3N0cnVjdC5fX2RvY19fLgorCistIElzc3VlICMzMzY2OiBBZGQgZXJmLCBlcmZjLCBleHBtMSwgZ2FtbWEsIGxnYW1tYSBmdW5jdGlvbnMgdG8gbWF0aCBtb2R1bGUuCisKKy0gSXNzdWUgIzY4MjM6IEFsbG93IHRpbWUuc3RyZnRpbWUoKSB0byBhY2NlcHQgYSB0dXBsZSB3aXRoIGEgaXNkc3QgZmllbGQKKyAgb3V0c2lkZSBvZiB0aGUgcmFuZ2Ugb2YgWy0xLCAxXSBieSBub3JtYWxpemluZyB0aGUgdmFsdWUgdG8gd2l0aGluIHRoYXQgcmFuZ2UuCisKKy0gSXNzdWUgIzY4Nzc6IE1ha2UgaXQgcG9zc2libGUgdG8gbGluayB0aGUgcmVhZGxpbmUgZXh0ZW5zaW9uIHRvIGxpYmVkaXQgb24KKyAgT1NYLgorCistIElzc3VlICM2OTQ0OiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIHNvY2tldC5nZXRuYW1laW5mbygpIHdhcyBjYWxsZWQgd2l0aAorICBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR1cGxlIGFzIGZpcnN0IGFyZ3VtZW50LgorCistIElzc3VlICM2ODY1OiBGaXggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcHdkCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNjg0ODogRml4IGN1cnNlcyBtb2R1bGUgYnVpbGQgZmFpbHVyZSBvbiBPUyBYIDEwLjYuCisKKy0gRml4IGEgc2VnZmF1bHQgaW4gZXhwYXQgd2hlbiBnaXZlbiBhIHNwZWNpYWxseSBjcmFmdGVkIGlucHV0IGxlYWQgdG8gdGhlCisgIHRva2VuaXplciBub3Qgc3RvcHBpbmcuIENWRS0yMDA5LTM3MjAuCisKKy0gSXNzdWUgIzY1NjE6ICdcZCcgaW4gYSByZWdleCBub3cgbWF0Y2hlcyBvbmx5IGNoYXJhY3RlcnMgd2l0aCBVbmljb2RlIGNhdGVnb3J5CisgICdOZCcgKE51bWJlciwgRGVjaW1hbCBEaWdpdCkuICBQcmV2aW91c2x5IGl0IGFsc28gbWF0Y2hlZCBjaGFyYWN0ZXJzIHdpdGgKKyAgY2F0ZWdvcnkgJ05vJy4KKworLSBJc3N1ZSAjMTUyMzogUmVtb3ZlIGRlcHJlY2F0ZWQgb3ZlcmZsb3cgd3JhcHBpbmcgZm9yIHN0cnVjdC5wYWNrIHdpdGggYW4KKyAgaW50ZWdlciBmb3JtYXQgY29kZSAoJ2JCaEhpSWxMcVEnKS4gIFBhY2tpbmcgYW4gb3V0LW9mLXJhbmdlIGludGVnZXIgbm93CisgIGNvbnNpc3RlbnRseSByYWlzZXMgc3RydWN0LmVycm9yLgorCistIElzc3VlcyAjMTUzMDU1OSwgIzE3NDExMzA6IEZpeCB2YXJpb3VzIHN0cnVjdC5wYWNrIGluY29uc2lzdGVuY2llcyBmb3IgdGhlCisgIGludGVnZXIgZm9ybWF0cyAoJ2JCaEhpSWxMcVEnKS4gIEluIHRoZSBmb2xsb3dpbmcsICcqJyByZXByZXNlbnRzIGFueSBvZiAnPScsCisgICc8JywgJz4nLgorCisgICAgLSBQYWNraW5nIGEgZmxvYXQgbm93IGFsd2F5cyBnaXZlcyBhIERlcHJlY2F0aW9uIFdhcm5pbmcuICBQcmV2aW91c2x5IGl0CisgICAgICBvbmx5IHdhcm5lZCBmb3IgJ0knLCAnTCcsICcqQicsICcqSCcsICcqSScsICcqTCcuCisKKyAgICAtIElmIHggaXMgbm90IGFuIGludCwgbG9uZyBvciBmbG9hdCwgdGhlbiBwYWNraW5nIHggd2lsbCBhbHdheXMgcmVzdWx0IGluCisgICAgICBzdHJ1Y3QuZXJyb3IuICBQcmV2aW91c2x5IGFuIHggd2l0aCBhbiBfX2ludF9fIG1ldGhvZCBjb3VsZCBiZSBwYWNrZWQgYnkKKyAgICAgICdiJywgJ0InLCAnaCcsICdIJywgJ2knLCAnbCcsICcqYicsICcqaCcgLCcqaScsICcqbCcsIGFuZCBhbiB4IHdpdGggYQorICAgICAgX19sb25nX18gbWV0aG9kIGNvdWxkIGJlIHBhY2tlZCBieSAncScsICdRJywgJypxJywgJypRJzsgZm9yIHggd2l0aAorICAgICAgbmVpdGhlciBfX2ludF9fIG5vciBfX2xvbmdfXywgVHlwZUVycm9yIHVzZWQgdG8gYmUgcmFpc2VkICh3aXRoIGEKKyAgICAgIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlKSBmb3IgJ0knLCAnTCcsICcqQicsICcqSCcsICcqSScsICcqTCcsIGFuZAorICAgICAgc3RydWN0LmVycm9yIGluIG90aGVyIGNhc2VzLgorCisgIE5vdGU6IGFzIG9mIFB5dGhvbiAyLjcgYmV0YSAxLCB0aGUgYWJvdmUgaXMgb3V0IG9mIGRhdGUuICBJbiAyLjcgYmV0YSAxLCBhbnkKKyAgYXJndW1lbnQgd2l0aCBhbiBfX2ludF9fIG1ldGhvZCBjYW4gYmUgcGFja2VkLCBidXQgdXNlIG9mIHRoaXMgZmVhdHVyZQorICB0cmlnZ2VycyBhIERlcHJlY2F0aW9uV2FybmluZy4KKworLSBJc3N1ZSAjNDg3MzogRml4IHJlc291cmNlIGxlYWtzIGluIGVycm9yIGNhc2VzIG9mIHB3ZCBhbmQgZ3JwLgorCistIElzc3VlICM0NzUxOiBGb3IgaGFzaGxpYiBhbGdvcml0aG1zIHByb3ZpZGVkIGJ5IE9wZW5TU0wsIHRoZSBQeXRob24gR0lMIGlzIG5vdworICByZWxlYXNlZCBkdXJpbmcgY29tcHV0YXRpb24gb24gZGF0YSBsZW5ndGhzID49IDIwNDggYnl0ZXMuCisKKy0gSXNzdWUgIzM3NDU6IEZpeCBoYXNobGliIHRvIGFsd2F5cyByZWplY3QgdW5pY29kZSBhbmQgbm9uIGJ1ZmZlci1hcGkKKyAgc3VwcG9ydGluZyBvYmplY3RzIGFzIGlucHV0IG5vIG1hdHRlciBob3cgaXQgd2FzIGNvbXBpbGVkIChidWlsdCBpbgorICBpbXBsZW1lbnRhdGlvbnMgb3IgZXh0ZXJuYWwgb3BlbnNzbCBsaWJyYXJ5KS4gIE5PVEU6IFVuZG9uZSBpbiAyLjdhMi4KKworLSBJc3N1ZSAjNDM5NzogRml4IG9jY2FzaW9uYWwgdGVzdF9zb2NrZXQgZmFpbHVyZSBvbiBPUyBYLgorCistIElzc3VlICM0Mjc5OiBGaXggYnVpbGQgb2YgcGFyc2VybW9kdWxlIHVuZGVyIEN5Z3dpbi4KKworLSBJc3N1ZSAjNDA1MTogUHJldmVudCBjb25mbGljdCBvZiBVTklDT0RFIG1hY3JvcyBpbiBjUGlja2xlLgorCistIElzc3VlICM0MjI4OiBQYWNrIG5lZ2F0aXZlIHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgMi40IGluIHN0cnVjdCdzIEwgZm9ybWF0LgorCistIElzc3VlICMxMDQwMDI2OiBGaXggb3MudGltZXMgcmVzdWx0IG9uIHN5c3RlbXMgd2hlcmUgSFogaXMgaW5jb3JyZWN0LgorCistIElzc3VlcyAjMzE2NywgIzM2ODI6IEZpeCB0ZXN0X21hdGggZmFpbHVyZXMgZm9yIGxvZywgbG9nMTAgb24gU29sYXJpcywKKyAgT3BlbkJTRC4KKwogLSBJc3N1ZSAjNDM2NTogQWRkIGNydGFzc2VtLmggY29uc3RhbnRzIHRvIHRoZSBtc3ZjcnQgbW9kdWxlLgogCiAtIElzc3VlICM0Mzk2OiBUaGUgcGFyc2VyIG1vZHVsZSBub3cgY29ycmVjdGx5IHZhbGlkYXRlcyB0aGUgd2l0aCBzdGF0ZW1lbnQuCiAKKy0gSXNzdWUgIzUyMjg6IE1ha2UgZnVuY3Rvb2xzLnBhcnRpYWwgb2JqZWN0cyBjYW4gbm93IGJlIHBpY2tsZWQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM3NDMxOiBVc2UgVEVTVEZOIGluIHRlc3RfbGluZWNhY2hlIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNyZWF0ZSBhIGZpbGUKKyAgaW4gdGhlIExpYi90ZXN0IGRpcmVjdG9yeSwgd2hpY2ggbWlnaHQgYmUgcmVhZC1vbmx5IGZvciB0aGUgdXNlciBydW5uaW5nIHRoZQorICB0ZXN0cy4KKworLSBJc3N1ZSAjNzMyNDogQWRkIGEgc2FuaXR5IGNoZWNrIHRvIHJlZ3J0ZXN0IGFyZ3VtZW50IHBhcnNpbmcgdG8gY2F0Y2ggdGhlIGNhc2UKKyAgb2YgYW4gb3B0aW9uIHdpdGggbm8gaGFuZGxlci4KKworLSBJc3N1ZSAjNzMxMjogQWRkIGEgLUYgZmxhZyB0byBydW4gdGhlIHNlbGVjdGVkIHRlc3RzIGluIGEgbG9vcCB1bnRpbCBhIHRlc3QKKyAgZmFpbHMuICBDYW4gYmUgY29tYmluZWQgd2l0aCAtai4KKworLSBJc3N1ZSAjNzI5NTogRG8gbm90IHVzZSBhIGhhcmRjb2RlZCBmaWxlIG5hbWUgaW4gdGVzdF90YXJmaWxlLgorCistIElzc3VlICM3MjcwOiBBZGQgc29tZSBkZWRpY2F0ZWQgdW5pdCB0ZXN0cyBmb3IgbXVsdGktdGhyZWFkIHN5bmNocm9uaXphdGlvbgorICBwcmltaXRpdmVzIHN1Y2ggYXMgTG9jaywgUkxvY2ssIENvbmRpdGlvbiwgRXZlbnQgYW5kIFNlbWFwaG9yZS4KKworLSBJc3N1ZSAjNzIyMjogTWFrZSB0aHJlYWQgInJlYXBpbmciIG1vcmUgcmVsaWFibGUgc28gdGhhdCByZWZlcmVuY2UKKyAgbGVhay1jaGFzaW5nIHRlc3QgcnVucyBnaXZlIHNlbnNpYmxlIHJlc3VsdHMuICBUaGUgcHJldmlvdXMgbWV0aG9kIG9mIHJlYXBpbmcKKyAgdGhyZWFkcyBjb3VsZCByZXR1cm4gc3VjY2Vzc2Z1bGx5IHdoaWxlIHNvbWUgVGhyZWFkIG9iamVjdHMgd2VyZSBzdGlsbAorICByZWZlcmVuY2VkLiAgVGhpcyBhbHNvIGludHJvZHVjZXMgYSBuZXcgcHJpdmF0ZSBmdW5jdGlvbjogYGB0aHJlYWQuX2NvdW50KClgYC4KKworLSBJc3N1ZSAjNzE1MTogRml4ZWQgcmVncnRlc3QgLWogc28gdGhhdCBvdXRwdXQgdG8gc3RkZXJyIGZyb20gYSB0ZXN0IG5vIGxvbmdlcgorICBydW5zIHRoZSByaXNrIG9mIGNhdXNpbmcgdGhlIHdvcmtlciB0aHJlYWQgdG8gZmFpbC4KKworLSBJc3N1ZSAjNzA1NTogdGVzdF9fX2FsbF9fIG5vdyBncmVlZGlseSBkZXRlY3RzIGFsbCBtb2R1bGVzIHdoaWNoIGhhdmUgYW4KKyAgX19hbGxfXyBhdHRyaWJ1dGUsIHJhdGhlciB0aGFuIHVzaW5nIGEgaGFyZGNvZGVkIGFuZCBpbmNvbXBsZXRlIGxpc3QuCisKKy0gSXNzdWUgIzcwNTg6IEFkZGVkIHNhdmUvcmVzdG9yZSBmb3IgdGhpbmdzIGxpa2Ugc3lzLmFyZ3YgYW5kIGN3ZCB0bworICBydW50ZXN0X2lubmVyIGluIHJlZ3J0ZXN0LCB3aXRoIHdhcm5pbmdzIGlmIHRoZSBjYWxsZWQgdGVzdCBtb2RpZmllcyB0aGVtLAorICBhbmQgYSBuZXcgc2VjdGlvbiBpbiB0aGUgc3VtbWFyeSByZXBvcnQgYXQgdGhlIGVuZC4KKworLSBJc3N1ZSAjNzA0MjogRml4IHRlc3Rfc2lnbmFsICh0ZXN0X2l0aW1lcl92aXJ0dWFsKSBmYWlsdXJlIG9uIE9TIFggMTAuNi4KKworLSBJc3N1ZSAjNjgwNjogdGVzdF9wbGF0Zm9ybSBmYWlsZWQgdW5kZXIgT1MgWCAxMC42LjAgYmVjYXVzZSBgYHN3X3ZlcmBgIGxlYXZlcworICBvZmYgdGhlIHRyYWlsaW5nIDAgaW4gdGhlIHZlcnNpb24gbnVtYmVyLgorCistIElzc3VlICM1NDUwOiBNb3ZlZCB0ZXN0cyBpbnZvbHZpbmcgbG9hZGluZyB0ayBmcm9tIExpYi90ZXN0L3Rlc3RfdGNsIHRvCisgIExpYi9saWItdGsvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9sb2FkdGsuIFdpdGggdGhpcywgdGhlc2UgdGVzdHMgZGVtb25zdHJhdGUKKyAgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIHRlc3RfdHRrZ3Vpb25seSAoYW5kIG5vdyBhbHNvIHRlc3RfdGspIHdoaWNoIGlzIHRvIHNraXAKKyAgdGhlIHRlc3RzIGlmIERJU1BMQVkgaXMgZGVmaW5lZCBidXQgY2FuJ3QgYmUgdXNlZC4KKworLSBJc3N1ZSAjNjE1MjogTmV3IG9wdGlvbiAnLWonLyctLW11bHRpcHJvY2VzcycgZm9yIHJlZ3J0ZXN0IGFsbG93cyBydW5uaW5nCisgIHJlZ3Jlc3Npb24gdGVzdHMgaW4gcGFyYWxsZWwsIHNob3J0ZW5pbmcgdGhlIHRvdGFsIHJ1bnRpbWUuCisKKy0gSXNzdWUgIzUzNTQ6IE5ldyB0ZXN0IHN1cHBvcnQgZnVuY3Rpb24gaW1wb3J0X2ZyZXNoX21vZHVsZSgpIG1ha2VzIGl0IGVhc3kgdG8KKyAgaW1wb3J0IGJvdGggbm9ybWFsIGFuZCBvcHRpbWlzZWQgdmVyc2lvbnMgb2YgbW9kdWxlcy4gIHRlc3RfaGVhcHEgYW5kCisgIHRlc3Rfd2FybmluZ3MgaGF2ZSBiZWVuIGFkanVzdGVkIHRvIHVzZSBpdCwgdGVzdHMgZm9yIG90aGVyIG1vZHVsZXMgd2l0aCBib3RoCisgIEMgYW5kIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIHN0ZGxpYiBjYW4gYmUgYWRqdXN0ZWQgdG8gdXNlIGl0IG92ZXIKKyAgdGltZS4KKworLSBGaXggdGVzdF93YXJuaW5ncyB0byBubyBsb25nZXIgcmVzZXQgdGhlIHdhcm5pbmdzIGZpbHRlci4KKworLSBGaXggdGVzdF9sb2dnaW5nIHRvIG5vIGxvbmdlciByZXNldCB0aGUgd2FybmluZ3MgZmlsdGVyLgorCistIElzc3VlICM1NjM1OiBGaXggcnVubmluZyB0ZXN0X3N5cyB3aXRoIHRyYWNpbmcgZW5hYmxlZC4KKworLSByZWdydGVzdCBubyBsb25nZXIgdHJlYXRzIEltcG9ydEVycm9yIGFzIGVxdWl2YWxlbnQgdG8gU2tpcFRlc3QuICBJbXBvcnRzIHRoYXQKKyAgc2hvdWxkIGNhdXNlIGEgdGVzdCB0byBiZSBza2lwcGVkIGFyZSBub3cgZG9uZSB1c2luZyBpbXBvcnRfbW9kdWxlIGZyb20gdGVzdAorICBzdXBwb3J0LCB3aGljaCBkb2VzIHRoZSBjb252ZXJzaW9uLgorCistIElzc3VlICM1MDgzOiBOZXcgJ2d1aScgcmVzb3VyY2UgZm9yIHJlZ3J0ZXN0LgorCistIElzc3VlICM1ODM3OiBDZXJ0YWluIHNlcXVlbmNlcyBvZiBjYWxscyB0byBzZXQoKSBhbmQgdW5zZXQoKSBmb3IKKyAgc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkIG9iamVjdHMgcmVzdG9yZWQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworICBpbmNvcnJlY3RseSBvbiBfX2V4aXRfXy4KKworLSBJc3N1ZSAjMjM4OTogQXJyYXkgb2JqZWN0cyBhcmUgbm93IHBpY2tsZWQgaW4gYSBwb3J0YWJsZSBtYW5uZXIuCisKK01pc2MKKy0tLS0KKworLSBJc3N1ZSAjNTYxMTogQXV0by1kZXRlY3Qgd2hldGhlciBhIEMgZmlsZSB1c2VzIHRhYnMgb3Igc3BhY2VzIGluIFZpbS4KKwogCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjYgZmluYWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTg5NSw3ICszOTU0LDcgQEAKIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCi0tIElzc3VlICMzODUwOiByZWN1cnNpb24gdGVzdHMgaW4gTWlzYy9maW5kX3JlY3Vyc2lvbl9saW1pdC5weSBjYW4gcmFpc2UKKy0gSXNzdWUgIzM4NTA6IHJlY3Vyc2lvbiB0ZXN0cyBpbiBUb29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9uX2xpbWl0LnB5IGNhbiByYWlzZQogICBBdHRyaWJ1dGVFcnJvciBpbnN0ZWFkIG9mIFJ1bnRpbWVFcnJvciwgZGVwZW5kaW5nIGluIHdoaWNoIEMgQVBJIGNhbGwKICAgZXhhY3RseSB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIGV4Y2VlZGVkLiBDb25zZXF1ZW50bHksIGJvdGggZXhjZXB0aW9uIHR5cGVzCiAgIGFyZSBjYXVnaHQgYW5kIHNpbGVuY2VkLgpAQCAtMjA0Miw2ICs0MTAxLDkgQEAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIElzc3VlICM0MzAxOiBQYXRjaCB0aGUgbG9nZ2luZyBtb2R1bGUgdG8gYWRkIHByb2Nlc3NOYW1lIHN1cHBvcnQsIHJlbW92ZQorICBfY2hlY2tfbG9nZ2VyX2NsYXNzIGZyb20gbXVsdGlwcm9jZXNzaW5nLgorCiAtIElzc3VlICMyOTc1OiBXaGVuIGNvbXBpbGluZyBzZXZlcmFsIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggVmlzdWFsIFN0dWRpbyAyMDA4CiAgIGZyb20gdGhlIHNhbWUgcHl0aG9uIGludGVycHJldGVyLCBzb21lIGVudmlyb25tZW50IHZhcmlhYmxlcyB3b3VsZCBncm93CiAgIHdpdGhvdXQgbGltaXQuCmRpZmYgLS1naXQgYS9NaXNjL05FV1MuaGVscCBiL01pc2MvTkVXUy5oZWxwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTY3ODVmLi4wMDAwMDAwCi0tLSBhL01pc2MvTkVXUy5oZWxwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotCQkJCQkJCS0qLSB0ZXh0IC0qLQotCi1JZiB5b3UgZWRpdGVkIE1pc2MvTkVXUyBiZWZvcmUgaXQgd2FzIGNvbnZlcnRlZCB0byBSZVNUIGZvcm1hdCBza2ltbWluZyB0aGlzCi1maWxlIHNob3VsZCBoZWxwIG1ha2UgdGhlIHRyYW5zaXRpb24gYSBiaXQgZWFzaWVyLiAgRm9yIGZ1bGwgZGV0YWlscyBhYm91dAotRG9jdXRpbHMgYW5kIFJlU1QsIGdvIHRvIHRoZSBEb2N1dGlscyB3ZWJzaXRlOgotCi0gICAgaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC8KLQotVG8gcHJvY2VzcyBNaXNjL05FV1MgdXNpbmcgRG9jdXRpbHMsIHlvdSdsbCBuZWVkIHRoZSBsYXRlc3QgZG9jdXRpbHMKLXNuYXBzaG90OgotCi0gICAgaHR0cDovL2RvY3V0aWxzLnNmLm5ldC9kb2N1dGlscy1zbmFwc2hvdC50Z3oKLQotRG9jdXRpbHMgd29ya3Mgd2l0aCBQeXRob24gMi4yIG9yIG5ld2VyLgotCi1UbyBwcm9jZXNzIE5FV1MgaW50byBORVdTLmh0bWwsIGZpcnN0IGluc3RhbGwgRG9jdXRpbHMsIGFuZCB0aGVuIHJ1bgotdGhpcyBjb21tYW5kOgotCi0gICAgcHl0aG9uIC4uLi9kb2N1dGlscy90b29scy9yc3QyaHRtbC5weSBORVdTIE5FV1MuaHRtbAotCi1IZXJlICIuLi4vZG9jdXRpbHMiIGlzIHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCB0aGUgYWJvdmUgc25hcHNob3Qgd2FzCi1leHRyYWN0ZWQuICAoSSBob3BlIHRoaXMgcmVjaXBlIHdpbGwgY2hhbmdlIGZvciB0aGUgYmV0dGVyLikKLQotRGF2aWQgR29vZGdlciBtYWRlIGEgY2hhbmdlIHRvIHRoZSBhbGxvd2FibGUgc3RydWN0dXJlIG9mIGludGVybmFsCi1yZWZlcmVuY2VzIHdoaWNoIGdyZWF0bHkgc2ltcGxpZmllZCBpbml0aWFsIGNvbnZlcnNpb24gb2YgdGhlIGZpbGUuCi0KLVRoZSBjaGFuZ2VzIHJlcXVpcmVkIGZlbGwgaW50byB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6Ci0KLSogVGhlIHRvcC1sZXZlbCAiV2hhdCdzIE5ldyIgc2VjdGlvbiBoZWFkZXJzIGNoYW5nZWQgdG86Ci0KLSAgICBXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjMgYWxwaGEgMT8KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgICpSZWxlYXNlIGRhdGU6IERELU1NTS0yMDAyKgotCi0gIE5vdGUgdGhhdCB0aGUgcmVsZWFzZSBkYXRlIGxpbmUgaXMgZW1waGFzaXplZCwgd2l0aCBhICIqIiBhdCBlYWNoCi0gIGVuZC4KLQotKiBTdWJzZWN0aW9ucyBhcmUgdW5kZXJsaW5lZCB3aXRoIGEgc2luZ2xlIHJvdyBvZiBoeXBoZW5zOgotCi0gICAgVHlwZS9jbGFzcyB1bmlmaWNhdGlvbiBhbmQgbmV3LXN0eWxlIGNsYXNzZXMKLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0qIFBsYWNlcyB3aGVyZSAiYmFsYW5jZWQiIHNpbmdsZSBxdW90ZXMgd2VyZSB1c2VkIHdlcmUgY2hhbmdlZCB0byB1c2UKLSAgYXBvc3Ryb3BoZXMgYXMgYm90aCB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBxdW90ZSAoYHN0cmluZycgLT4gJ3N0cmluZycpLgotCi0qIEluIGEgZmV3IHBsYWNlcyBhc3Rlcmlza3MgbmVlZGVkIHRvIGJlIGVzY2FwZWQgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGhhdmUKLSAgYmVlbiBpbnRlcnByZXRlZCBhcyBiZWdpbm5pbmcgYmxvY2tzIG9mIGl0YWxpYyBvciBib2xkIHRleHQsIGUuZy46Ci0KLSAgICAtIFRoZSB0eXBlIG9mIHRwX2ZyZWUgaGFzIGJlZW4gY2hhbmdlZCBmcm9tICJgYHZvaWQgKCopKFB5T2JqZWN0ICopYGAiCi0gICAgICB0byAiYGB2b2lkICgqKSh2b2lkICopYGAiLgotCi0gIE5vdGUgdGhhdCBvbmx5IHRoZSBhc3Rlcmlza3MgcHJlY2VkZWQgYnkgd2hpdGVzcGFjZSBuZWVkZWQgdG8gYmUgZXNjYXBlZC4KLQotKiBPbmUgaW5zdGFuY2Ugb2YgYSB3b3JkIGVuZGluZyB3aXRoIGFuIHVuZGVyc2NvcmUgbmVlZGVkIHRvIGJlIHF1b3RlZAotICAoIlB5Q21wXyIgYmVjYW1lICJgYFB5Q21wX2BgIikuCi0KLSogT25lIHRhYmxlIHdhcyBjb252ZXJ0ZWQgdG8gUmVTVCBmb3JtIChzZWFyY2ggTWlzYy9ORVdTIGZvciAiTmV3IGNvZGVjcyIKLSAgZm9yIHRoaXMgZXhhbXBsZSkuCi0KLSogQSBmZXcgcGxhY2VzIHdoZXJlIGNodW5rcyBvZiBjb2RlIG9yIGluZGVudGVkIHRleHQgd2VyZSBkaXNwbGF5ZWQgbmVlZGVkCi0gIHRvIGJlIHByb3Blcmx5IGludHJvZHVjZWQgKHByZWNlZGluZyBwYXJhZ3JhcGggdGVybWluYXRlZCBieSAiOjoiIGFuZCB0aGUKLSAgY2h1bmsgb2YgY29kZSBvciB0ZXh0IGluZGVudGVkIHcuci50LiB0aGUgcGFyYWdyYXBoKS4gIEZvciBleGFtcGxlOgotCi0gICAgLSBOb3RlIHRoYXQgUHlMb25nX0FzRG91YmxlIGNhbiBmYWlsISAgVGhpcyBoYXMgYWx3YXlzIGJlZW4gdHJ1ZSwKLSAgICAgIGJ1dCBubyBjYWxsZXJzIGNoZWNrZWQgZm9yIGl0LiAgSXQncyBtb3JlIGxpa2VseSB0byBmYWlsIG5vdywKLSAgICAgIGJlY2F1c2Ugb3ZlcmZsb3cgZXJyb3JzIGFyZSBwcm9wZXJseSBkZXRlY3RlZCBub3cuICBUaGUgcHJvcGVyIHdheQotICAgICAgdG8gY2hlY2s6OgotCi0gICAgICAgICAgZG91YmxlIHggPSBQeUxvbmdfQXNEb3VibGUoc29tZV9sb25nX29iamVjdCk7Ci0gICAgICAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgIC8qIFRoZSBjb252ZXJzaW9uIGZhaWxlZC4gKi8KLSAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTWlzYy9QVVJJRlkuUkVBRE1FIGIvTWlzYy9QVVJJRlkuUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTVkMmFjLi4wMDAwMDAwCi0tLSBhL01pc2MvUFVSSUZZLlJFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLVB1cmlmeSAodG0pIGFuZCBRdWFudGlmeSAodG0pIGFyZSBjb21tZXJjaWFsIHNvZnR3YXJlIHF1YWxpdHkKLWFzc3VyYW5jZSB0b29scyBhdmFpbGFibGUgZnJvbSBJQk0gPGh0dHA6Ly93d3cuaWJtLmNvbS9zb2Z0d2FyZS9yYXRpb25hbC8+LgotUHVyaWZ5IGlzIGVzc2VudGlhbGx5IGEgbWVtb3J5IGFjY2VzcwotdmVyaWZpZXIgYW5kIGxlYWsgZGV0ZWN0b3I7IFF1YW50aWZ5IGlzIGEgQyBsZXZlbCBwcm9maWxlci4gIFRoZSByZXN0Ci1vZiB0aGlzIGZpbGUgYXNzdW1lcyB5b3UgZ2VuZXJhbGx5IGtub3cgaG93IHRvIHVzZSBQdXJpZnkgYW5kCi1RdWFudGlmeSwgYW5kIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHZhbGlkIGxpY2Vuc2VzIGZvciB0aGVzZQotcHJvZHVjdHMuICBJZiB5b3UgaGF2ZW4ndCBpbnN0YWxsZWQgc3VjaCBsaWNlbnNlcywgeW91IGNhbiBpZ25vcmUgdGhlCi1mb2xsb3dpbmcgc2luY2UgaXQgd29uJ3QgaGVscCB5b3UgYSBiaXQhCi0KLVlvdSBjYW4gZWFzaWx5IGJ1aWxkIGEgUHVyaWZ5IG9yIFF1YW50aWZ5IGluc3RydW1lbnRlZCB2ZXJzaW9uIG9mIHRoZQotUHl0aG9uIGludGVycHJldGVyIGJ5IHBhc3NpbmcgdGhlIFBVUklGWSB2YXJpYWJsZSB0byB0aGUgbWFrZSBjb21tYW5kCi1hdCB0aGUgdG9wIG9mIHRoZSBQeXRob24gdHJlZToKLQotICAgIG1ha2UgUFVSSUZZPXB1cmlmeQotCi1UaGlzIGFzc3VtZXMgdGhhdCB0aGUgYHB1cmlmeScgcHJvZ3JhbSBpcyBvbiB5b3VyICRQQVRILiAgTm90ZSB0aGF0Ci15b3UgY2Fubm90IGJvdGggUHVyaWZ5IGFuZCBRdWFudGlmeSB0aGUgUHl0aG9uIGludGVycHJldGVyIChvciBhbnkKLXByb2dyYW0gZm9yIHRoYXQgbWF0dGVyKSBhdCB0aGUgc2FtZSB0aW1lLiAgSWYgeW91IHdhbnQgdG8gYnVpbGQgYQotUXVhbnRpZnknZCBpbnRlcnByZXRlciwgZG8gdGhpczoKLQotICAgIG1ha2UgUFVSSUZZPXF1YW50aWZ5Ci0KLVN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMywgcHltYWxsb2MgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgVGhpcwotd2lsbCBjYXVzZSBtYW55IHN1cHVyaW91cyB3YXJuaW5ncy4gIE1vZGlmeSBPYmplY3RzL29ibWFsbG9jLmMKLWFuZCBlbmFibGUgUHlfVVNJTkdfTUVNT1JZX0RFQlVHR0VSIGJ5IHVuY29tbWVudGluZyBpdC4KLVJFQURNRS52YWxncmluZCBoYXMgbW9yZSBkZXRhaWxzIGFib3V0IHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLVNlZSBiZWxvdyBhYm91dCBzZXR0aW5nIHVwIHN1cHByZXNzaW9ucy4gIFNvbWUgdGVzdHMgbWF5IG5vdAotcnVuIHdlbGwgd2l0aCBQdXJpZnkgZHVlIHRvIGhlYXZ5IG1lbW9yeSBvciBDUFUgdXNhZ2UuICBUaGVzZQotdGVzdHMgbWF5IGluY2x1ZGU6IHRlc3RfbGFyZ2VmaWxlLCB0ZXN0X2ltcG9ydCwgYW5kIHRlc3RfbG9uZy4KLQotUGxlYXNlIHJlcG9ydCBhbnkgZmluZGluZ3MgKHByb2JsZW1zIG9yIG5vIHdhcm5pbmdzKSB0byBweXRob24tZGV2QHB5dGhvbi5vcmcuCi1JdCBtYXkgYmUgdXNlZnVsIHRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgZm9yIGFueSBwcm9ibGVtcy4gIAotCi1XaGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCAobWFrZSB0ZXN0KSwgSSBoYXZlIGZvdW5kIGl0IHVzZWZ1bAotdG8gc2V0IG15IFBVUklGWU9QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgdXNpbmcgdGhlIGZvbGxvd2luZwotKGJhc2gpIHNoZWxsIGZ1bmN0aW9uLiAgQ2hlY2sgb3V0IHRoZSBQdXJpZnkgZG9jdW1lbnRhdGlvbiBmb3IKLWRldGFpbHM6Ci0KLXAoKSB7Ci0gIGNoYWlubGVuPSctY2hhaW4tbGVuZ3RoPTEyJwotICBpZ25vcmVzaWdzPSctaWdub3JlLXNpZ25hbHM9IlNJR0hVUCxTSUdJTlQsU0lHUVVJVCxTSUdJTEwsU0lHVFJBUCxTSUdBVlJULFNJR0VNVCxTSUdGUEUsU0lHS0lMTCxTSUdCVVMsU0lHU0VHVixTSUdQSVBFLFNJR1RFUk0sU0lHVVNSMSxTSUdVU1IyLFNJR1BPTEwsU0lHWENQVSxTSUdYRlNaLFNJR0ZSRUVaRSxTSUdUSEFXLFNJR1JUTUlOLFNJR1JUTUFYIicKLSAgZm9sbG93Y2hpbGQ9Jy1mb2xsb3ctY2hpbGQtcHJvY2Vzc2VzPXllcycKLSAgdGhyZWFkcz0nLW1heC10aHJlYWRzPTUwJwotICBleHBvcnQgUFVSSUZZT1BUSU9OUz0iJGNoYWlubGVuICRpZ25vcmVzaWdzICRmb2xsb3djaGlsZCAkdGhyZWFkcyIKLSAgZWNobyAkUFVSSUZZT1BUSU9OUwotfQotCi1Ob3RlIHRoYXQgeW91IG1heSB3YW50IHRvIGNyYW5rIC1jaGFpbi1sZW5ndGggdXAgZXZlbiBmdXJ0aGVyLiAgQQotdmFsdWUgb2YgMjAgc2hvdWxkIGdldCB5b3UgdGhlIGVudGlyZSBzdGFjayB1cCBpbnRvIHRoZSBQeXRob24gQyBjb2RlCi1pbiBhbGwgc2l0dWF0aW9ucy4KLQotV2l0aCB0aGUgcmVncmVzc2lvbiB0ZXN0IG9uIGEgZmF0bHkgY29uZmlndXJlZCBpbnRlcnByZXRlcgotKGkuZS4gaW5jbHVkaW5nIGFzIG1hbnkgbW9kdWxlcyBhcyBwb3NzaWJsZSBpbiB5b3VyIE1vZHVsZXMvU2V0dXAKLWZpbGUpLCB5b3UnbGwgcHJvYmFibHkgZ2V0IGEgZ2FiaWxsaW9uIFVNUiBlcnJvcnMsIGFuZCBhIGZldyBNTEsKLWVycm9ycy4gIEkgdGhpbmsgbW9zdCBvZiB0aGVzZSBjYW4gYmUgc2FmZWx5IHN1cHByZXNzZWQgYnkgcHV0dGluZyB0aGUKLWZvbGxvd2luZyBpbiB5b3VyIC5wdXJpZnkgZmlsZToKLQotICAgIHN1cHByZXNzIHVtciAuLi47ICJzb2NrZXRtb2R1bGUuYyIKLSAgICBzdXBwcmVzcyB1bXIgLi4uOyB0aW1lX3N0cmZ0aW1lCi0gICAgc3VwcHJlc3MgdW1yIC4uLjsgImRibW1vZHVsZS5jIgotICAgIHN1cHByZXNzIHVtciAuLi47ICJnZGJtbW9kdWxlLmMiCi0gICAgc3VwcHJlc3MgdW1yIC4uLjsgImdycG1vZHVsZS5jIgotICAgIHN1cHByZXNzIHVtciAuLi47ICJuaXNtb2R1bGUuYyIKLSAgICBzdXBwcmVzcyB1bXIgLi4uOyAicHdkbW9kdWxlLmMiCi0KLU5vdGU6IHRoaXMgbGlzdCBpcyB2ZXJ5IG9sZCBhbmQgbWF5IG5vdCBiZSBhY2N1cmF0ZSBhbnkgbG9uZ2VyLgotSXQncyBwb3NzaWJsZSBzb21lIG9mIHRoZXNlIG5vIGxvbmdlciBuZWVkIHRvIGJlIHN1cHByZXNzZWQuCi1Zb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgKGF0IGxlYXN0IHVtcikKLWZyb20gUHlfQUREUkVTU19JTl9SQU5HRS4KLQotVGhpcyB3aWxsIHN0aWxsIGxlYXZlIHlvdSB3aXRoIGp1c3QgYSBmZXcgVU1SLCBtb3N0bHkgaW4gdGhlIHJlYWRsaW5lCi1saWJyYXJ5LCB3aGljaCB5b3UgY2FuIHNhZmVseSBpZ25vcmUuICBBIGxvdCBvZiB3b3JrIGhhcyBnb25lIGludG8KLVB5dGhvbiAxLjUgdG8gcGx1ZyBhcyBtYW55IGxlYWtzIGFzIHBvc3NpYmxlLgotCi1Vc2luZyBQdXJpZnkgb3IgUXVhbnRpZnkgaW4gdGhpcyB3YXkgd2lsbCBnaXZlIHlvdSBjb2Fyc2UgZ3JhaW5lZAotcmVwb3J0cyBvbiB0aGUgd2hvbGUgUHl0aG9uIGludGVycHJldGVyLiAgWW91IGNhbiBhY3R1YWxseSBnZXQgbW9yZQotZmluZSBncmFpbmVkIGNvbnRyb2wgb3ZlciBib3RoIGJ5IGxpbmtpbmcgd2l0aCB0aGUgb3B0aW9uYWwgYHB1cmUnCi1tb2R1bGUsIHdoaWNoIGV4cG9ydHMgKG1vc3Qgb2YpIHRoZSBQdXJpZnkgYW5kIFF1YW50aWZ5IEMgQVBJJ3MgaW50bwotUHl0aG9uLiAgVG8gbGluayBpbiB0aGlzIG1vZHVsZSAoaXQgbXVzdCBiZSBzdGF0aWNhbGx5IGxpbmtlZCksIGVkaXQKLXlvdXIgTW9kdWxlcy9TZXR1cCBmaWxlIGZvciB5b3VyIHNpdGUsIGFuZCByZWJ1aWxkIHRoZSBpbnRlcnByZXRlci4KLVlvdSBtaWdodCB3YW50IHRvIGNoZWNrIG91dCB0aGUgY29tbWVudHMgaW4gdGhlIE1vZHVsZXMvcHVyZW1vZHVsZS5jCi1maWxlIGZvciBzb21lIGlkaW9zeW5jcmFzaWVzLgotCi1Vc2luZyB0aGlzIG1vZHVsZSwgeW91IGNhbiBhY3R1YWxseSBwcm9maWxlIG9yIGxlYWsgdGVzdCBhIHNtYWxsCi1zZWN0aW9uIG9mIGNvZGUsIGluc3RlYWQgb2YgdGhlIHdob2xlIGludGVycHJldGVyLiAgVXNpbmcgdGhpcyBpbgotY29uanVjdGlvbiB3aXRoIHBkYi5weSwgZGJ4LCBvciB0aGUgcHJvZmlsZXIucHkgbW9kdWxlIHJlYWxseSBnaXZlcwoteW91IHF1aXRlIGEgYml0IG9mIGludHJvc3BlY3RpdmUgcG93ZXIuCi0KLU5hdHVyYWxseSB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgY2F2ZWF0cy4gIFRoaXMgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQKLXdpdGggUHVyaWZ5IDQuMC4xIGFuZCBRdWFudGlmeSAyLjEtYmV0YSBvbiBTb2xhcmlzIDIuNS4gIFB1cmlmeSA0LjAuMQotZG9lcyBub3Qgd29yayB3aXRoIFNvbGFyaXMgMi42LCBidXQgUHVyaWZ5IDQuMSB3aGljaCByZXBvcnRlZGx5IHdpbGwsCi1pcyBjdXJyZW50bHkgaW4gYmV0YSB0ZXN0LiAgVGhlcmUgYXJlIGZ1bmt5IHByb2JsZW1zIHdoZW4gUHVyaWZ5J2luZyBhIAotUHl0aG9uIGludGVycHJldGVyIGJ1aWxkIHdpdGggdGhyZWFkcy4gIEkndmUgaGFkIGEgbG90IG9mIHByb2JsZW1zCi1nZXR0aW5nIHRoaXMgdG8gd29yaywgc28gSSBnZW5lcmFsbHkgZG9uJ3QgYnVpbGQgd2l0aCB0aHJlYWRzIHdoZW4gSSdtIAotUHVyaWZ5J2luZy4gIElmIHlvdSBnZXQgdGhpcyB0byB3b3JrLCBsZXQgdXMga25vdyEKLQotLUJhcnJ5IFdhcnNhdyA8YndhcnNhd0BjbnJpLnJlc3Rvbi52YS51cz4KZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FIGIvTWlzYy9SRUFETUUKaW5kZXggYWY2ZThlOC4uYmI5OGIzZCAxMDA2NDQKLS0tIGEvTWlzYy9SRUFETUUKKysrIGIvTWlzYy9SRUFETUUKQEAgLTcsMjcgKzcsMzcgQEAKIEZpbGVzIGZvdW5kIGhlcmUKIC0tLS0tLS0tLS0tLS0tLS0KIAotQUNLUwkJQWNrbm93bGVkZ2VtZW50cwotQUlYLU5PVEVTCU5vdGVzIGZvciBidWlsZGluZyBQeXRob24gb24gQUlYCi1CZU9TLU5PVEVTCU5vdGVzIGZvciBidWlsZGluZyBvbiBCZU9TCi1CZU9TLXNldHVwLnB5CXNldHVwLnB5IHJlcGxhY2VtZW50IGZvciBCZU9TLCBzZWUgQmVPUy1OT1RFUwotY2hlYXRzaGVldAlRdWljayBzdW1tYXJ5IG9mIFB5dGhvbiBieSBLZW4gTWFuaGVpbWVyCi1maW5kX3JlY3Vyc2lvbmxpbWl0LnB5ICBTY3JpcHQgdG8gZmluZCBhIHZhbHVlIGZvciBzeXMubWF4cmVjdXJzaW9ubGltaXQKLWdkYmluaXQJCUhhbmR5IHN0dWZmIHRvIHB1dCBpbiB5b3VyIC5nZGJpbml0IGZpbGUsIGlmIHlvdSB1c2UgZ2RiCi1ISVNUT1JZCQlOZXdzIGZyb20gcHJldmlvdXMgcmVsZWFzZXMgLS0gb2xkZXN0IGxhc3QKLUhQVVgtTk9URVMJTm90ZXMgYWJvdXQgZHluYW1pYyBsb2FkaW5nIHVuZGVyIEhQLVVYCi1pbmRlbnQucHJvCUdOVSBpbmRlbnQgcHJvZmlsZSBhcHByb3hpbWF0aW5nIG15IEMgc3R5bGUKLU5FV1MJCU5ld3MgZm9yIHRoaXMgcmVsZWFzZSAoZm9yIHNvbWUgbWVhbmluZyBvZiAidGhpcyIpCi1Qb3J0aW5nCQlNaW5pLUZBUSBvbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMKLVBVUklGWS5SRUFETUUJSW5mb3JtYXRpb24gZm9yIFB1cmlmeSB1c2VycwotcHltZW1jb21wYXQuaAlNZW1vcnkgaW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgZmlsZS4KLXB5dGhvbi5tYW4JVU5JWCBtYW4gcGFnZSBmb3IgdGhlIHB5dGhvbiBpbnRlcnByZXRlcgotcHl0aG9uLW1vZGUuZWwJRW1hY3MgbW9kZSBmb3IgZWRpdGluZyBQeXRob24gcHJvZ3JhbXMKLVJFQURNRQkJVGhlIGZpbGUgeW91J3JlIHJlYWRpbmcgbm93Ci1SRUFETUUudmFsZ3JpbmQJSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKLVJGRAkJUmVxdWVzdCBGb3IgRGlzY3Vzc2lvbiBhYm91dCBhIFB5dGhvbiBuZXdzZ3JvdXAKLVJQTQkJKE9sZCkgdG9vbHMgdG8gYnVpbGQgUlBNcwotU3BlY2lhbEJ1aWxkcy50eHQgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKLXNldHVpZC1wcm9nLmMJQyBoZWxwZXIgcHJvZ3JhbSBmb3Igc2V0LXVpZCBQeXRob24gc2NyaXB0cwotdmdyaW5kZWZzCVB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKLXZhbGdyaW5kLXB5dGhvbi5zdXBwCVZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKK0FDS1MgICAgICAgICAgICAgICAgICAgIEFja25vd2xlZGdlbWVudHMKK0FJWC1OT1RFUyAgICAgICAgICAgICAgIE5vdGVzIGZvciBidWlsZGluZyBQeXRob24gb24gQUlYCitCZU9TLU5PVEVTICAgICAgICAgICAgICBOb3RlcyBmb3IgYnVpbGRpbmcgb24gQmVPUworQmVPUy1zZXR1cC5weSAgICAgICAgICAgc2V0dXAucHkgcmVwbGFjZW1lbnQgZm9yIEJlT1MsIHNlZSBCZU9TLU5PVEVTCitidWlsZC5zaCAgICAgICAgICAgICAgICBTY3JpcHQgdG8gYnVpbGQgYW5kIHRlc3QgbGF0ZXN0IFB5dGhvbiBmcm9tIHRoZSByZXBvc2l0b3J5CitjaGVhdHNoZWV0ICAgICAgICAgICAgICBRdWljayBzdW1tYXJ5IG9mIFB5dGhvbiBieSBLZW4gTWFuaGVpbWVyCitkZXZlbG9wZXJzLnR4dCAgICAgICAgICBBIGhpc3Rvcnkgb2Ygd2hvIGdvdCBkZXZlbG9wZXIgcGVybWlzc2lvbnMsIGFuZCB3aHkKK2dkYmluaXQgICAgICAgICAgICAgICAgIEhhbmR5IHN0dWZmIHRvIHB1dCBpbiB5b3VyIC5nZGJpbml0IGZpbGUsIGlmIHlvdSB1c2UgZ2RiCitISVNUT1JZICAgICAgICAgICAgICAgICBOZXdzIGZyb20gcHJldmlvdXMgcmVsZWFzZXMgLS0gb2xkZXN0IGxhc3QKK2luZGVudC5wcm8gICAgICAgICAgICAgIEdOVSBpbmRlbnQgcHJvZmlsZSBhcHByb3hpbWF0aW5nIG15IEMgc3R5bGUKK21haW50YWluZXJzLnJzdCAgICAgICAgIEEgbGlzdCBvZiBtYWludGFpbmVycyBmb3IgbGlicmFyeSBtb2R1bGVzCitORVdTICAgICAgICAgICAgICAgICAgICBOZXdzIGZvciB0aGlzIHJlbGVhc2UgKGZvciBzb21lIG1lYW5pbmcgb2YgInRoaXMiKQorTkVXUy5oZWxwICAgICAgICAgICAgICAgSG93IHRvIGVkaXQgTkVXUworUG9ydGluZyAgICAgICAgICAgICAgICAgTWluaS1GQVEgb24gcG9ydGluZyB0byBuZXcgcGxhdGZvcm1zCitQVVJJRlkuUkVBRE1FICAgICAgICAgICBJbmZvcm1hdGlvbiBmb3IgUHVyaWZ5IHVzZXJzCitweW1lbWNvbXBhdC5oICAgICAgICAgICBNZW1vcnkgaW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgZmlsZS4KK3B5dGhvbi1jb25maWcuaW4gICAgICAgIFB5dGhvbiBzY3JpcHQgdGVtcGxhdGUgZm9yIHB5dGhvbi1jb25maWcKK3B5dGhvbi5tYW4gICAgICAgICAgICAgIFVOSVggbWFuIHBhZ2UgZm9yIHRoZSBweXRob24gaW50ZXJwcmV0ZXIKK3B5dGhvbi1tb2RlLmVsICAgICAgICAgIEVtYWNzIG1vZGUgZm9yIGVkaXRpbmcgUHl0aG9uIHByb2dyYW1zCitweXRob24ucGMuaW4gICAgICAgICAgICBQYWNrYWdlIGNvbmZpZ3VyYXRpb24gaW5mbyB0ZW1wbGF0ZSBmb3IgcGtnLWNvbmZpZworcHl0aG9uLXdpbmcud3ByICAgICAgICAgV2luZyBJREUgcHJvamVjdCBmaWxlCitSRUFETUUgICAgICAgICAgICAgICAgICBUaGUgZmlsZSB5b3UncmUgcmVhZGluZyBub3cKK1JFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgorUkVBRE1FLmtsb2N3b3JrICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyBLbG9jd29yaydzIEs3IG9uIFB5dGhvbgorUkVBRE1FLk9wZW5CU0QgICAgICAgICAgSGVscCBmb3IgYnVpbGRpbmcgcHJvYmxlbXMgb24gT3BlbkJTRAorUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKK1JGRCAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QgRm9yIERpc2N1c3Npb24gYWJvdXQgYSBQeXRob24gbmV3c2dyb3VwCitSUE0gICAgICAgICAgICAgICAgICAgICAoT2xkKSB0b29scyB0byBidWlsZCBSUE1zCitzZXR1aWQtcHJvZy5jICAgICAgICAgICBDIGhlbHBlciBwcm9ncmFtIGZvciBzZXQtdWlkIFB5dGhvbiBzY3JpcHRzCitTcGVjaWFsQnVpbGRzLnR4dCAgICAgICBEZXNjcmliZXMgZXh0cmEgc3ltYm9scyB5b3UgY2FuIHNldCBmb3IgZGVidWcgYnVpbGRzCitUZXh0TWF0ZSAgICAgICAgICAgICAgICBBIFRleHRNYXRlIGJ1bmRsZSBmb3IgUHl0aG9uIGRldmVsb3BtZW50Cit2YWxncmluZC1weXRob24uc3VwcCAgICBWYWxncmluZCBzdXBwcmVzc2lvbiBmaWxlLCBzZWUgUkVBRE1FLnZhbGdyaW5kCit2Z3JpbmRlZnMgICAgICAgICAgICAgICBQeXRob24gY29uZmlndXJhdGlvbiBmb3IgdmdyaW5kIChhIGdlbmVyaWMgcHJldHR5IHByaW50ZXIpCitWaW0gICAgICAgICAgICAgICAgICAgICBQeXRob24gZGV2ZWxvcG1lbnQgdXRpbGl0aWVzIGZvciB0aGUgVmltIGVkaXRvcgpkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUuQUlYIGIvTWlzYy9SRUFETUUuQUlYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTY0NzIKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL1JFQURNRS5BSVgKQEAgLTAsMCArMSwxMzcgQEAKKworVGhpcyBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIGhlbHAgcGVvcGxlIHdobyBpbnRlbmQgdG8gdXNlIFB5dGhvbiBvbgorQUlYLgorCitUaGVyZSB1c2VkIHRvIGJlIG1hbnkgaXNzdWVzIHdpdGggUHl0aG9uIG9uIEFJWCwgYnV0IHRoZSBtYWpvciBvbmVzCitoYXZlIGJlZW4gY29ycmVjdGVkIGZvciB2ZXJzaW9uIDMuMiwgc28gdGhhdCBQeXRob24gc2hvdWxkIG5vdyB3b3JrCityYXRoZXIgd2VsbCBvbiB0aGlzIHBsYXRmb3JtLiBUaGUgcmVtYWluaW5nIGtub3duIGlzc3VlcyBhcmUgbGlzdGVkIGluCit0aGlzIGRvY3VtZW50LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgIENvbXBpbGluZyBQeXRob24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBjb21waWxlIFB5dGhvbiB3aXRoIGdjYyBvciB0aGUgbmF0aXZlIEFJWCBjb21waWxlci4gVGhlIG5hdGl2ZQorY29tcGlsZXIgdXNlZCB0byBnaXZlIGJldHRlciBwZXJmb3JtYW5jZXMgb24gdGhpcyBzeXN0ZW0gd2l0aCBvbGRlcgordmVyc2lvbnMgb2YgUHl0aG9uLiAgV2l0aCBQeXRob24gMy4yIGl0IG1heSBub3QgYmUgdGhlIGNhc2UgYW55bW9yZSwKK2FzIHRoaXMgY29tcGlsZXIgZG9lcyBub3QgYWxsb3cgY29tcGlsaW5nIFB5dGhvbiB3aXRoIGNvbXB1dGVkIGdvdG9zLgorU29tZSBiZW5jaG1hcmtzIG5lZWQgdG8gYmUgZG9uZS4KKworQ29tcGlsaW5nIHdpdGggZ2NjOgorCitjZCBQeXRob24tMy4yCitDQz1nY2MgT1BUPSItTzIiIC4vY29uZmlndXJlIC0tZW5hYmxlLXNoYXJlZAorbWFrZQorCitUaGVyZSBhcmUgdmFyaW91cyBhbGlhc2VzIGZvciB0aGUgbmF0aXZlIGNvbXBpbGVyLiAgVGhlIHJlY29tbWVuZGVkCithbGlhcyBmb3IgY29tcGlsaW5nIFB5dGhvbiBpcyAneGxjX3InLCB3aGljaCBwcm92aWRlcyBhIGJldHRlciBsZXZlbCBvZgorY29tcGF0aWJpbGl0eSBhbmQgaGFuZGxlcyB0aHJlYWQgaW5pdGlhbGl6YXRpb24gcHJvcGVybHkuCisKK0l0IGlzIGEgZ29vZCBpZGVhIHRvIGFkZCB0aGUgJy1xbWF4bWVtPTcwMDAwJyBvcHRpb24sIG90aGVyd2lzZSB0aGUKK2NvbXBpbGVyIGNvbnNpZGVycyB2YXJpb3VzIGZpbGVzIHRvbyBjb21wbGV4IHRvIG9wdGltaXplLgorCitDb21waWxpbmcgd2l0aCB4bGM6CisKK2NkIFB5dGhvbi0zLjIKK0NDPXhsY19yIE9QVD0iLU8yIC1xbWF4bWVtPTcwMDAwIiAuL2NvbmZpZ3VyZSAtLXdpdGhvdXQtY29tcHV0ZWQtZ290b3MgLS1lbmFibGUtc2hhcmVkCittYWtlCisKK05vdGU6CitPbiBBSVggNS4zIGFuZCBlYXJsaWVyLCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gc3BlY2lmeSB0aGUKKyItLWRpc2FibGUtaXB2NiIgZmxhZyB0byBjb25maWd1cmUuIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkIGluIEFJWAorNi4xLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgTWVtb3J5IExpbWl0YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IHRoaXMgc2VjdGlvbiBtYXkgbm90IGFwcGx5IHdoZW4gY29tcGlsaW5nIFB5dGhvbiBhcyBhIDY0IGJpdAorYXBwbGljYXRpb24uCisKK0J5IGRlZmF1bHQgb24gQUlYIGVhY2ggcHJvZ3JhbSBnZXRzIG9uZSBzZWdtZW50IHJlZ2lzdGVyIGZvciBpdHMgZGF0YQorc2VnbWVudC4gQXMgZWFjaCBzZWdtZW50IHJlZ2lzdGVyIGNvdmVycyAyNTYgTUIsIGEgUHl0aG9uIHByb2dyYW0gdGhhdAord291bGQgdXNlIG1vcmUgdGhhbiAyNTZNQiB3aWxsIHJhaXNlIGEgTWVtb3J5RXJyb3IuICBUaGUgc3RhbmRhcmQKK1B5dGhvbiB0ZXN0IHN1aXRlIGlzIG9uZSBzdWNoIGFwcGxpY2F0aW9uLgorCitUbyBhbGxvY2F0ZSBtb3JlIHNlZ21lbnQgcmVnaXN0ZXJzIHRvIFB5dGhvbiwgeW91IG11c3QgdXNlIHRoZSBsaW5rZXIKK29wdGlvbiAtYm1heGRhdGEgb3IgdGhlIGxkZWRpdCB0b29sIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBieXRlcyB5b3UKK25lZWQgaW4gdGhlIGRhdGEgc2VnbWVudC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFsbG93IDUxMk1CIG9mIG1lbW9yeSBmb3IgUHl0aG9uICh0aGlzIGlzCitlbm91Z2ggZm9yIHRoZSB0ZXN0IHN1aXRlIHRvIHJ1biB3aXRob3V0IE1lbW9yeUVycm9ycyksIHlvdSBzaG91bGQgcnVuCit0aGUgZm9sbG93aW5nIGNvbW1hbmQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbjoKKworbGRlZGl0IC1iIG1heGRhdGE6MHgyMDAwMDAwMCAuL3B5dGhvbgorCitZb3UgY2FuIGFsbG93IHVwIHRvIDJHQiBvZiBtZW1vcnkgZm9yIFB5dGhvbiBieSB1c2luZyB0aGUgdmFsdWUKKzB4ODAwMDAwMDAgZm9yIG1heGRhdGEuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZ28gYmV5b25kIDJHQiBvZiBtZW1vcnkgYnkgYWN0aXZhdGluZyBMYXJnZQorUGFnZSBVc2UuIFlvdSBzaG91bGQgY29uc3VsdCB0aGUgSUJNIGRvY3VtZW50YXRpb24gaWYgeW91IG5lZWQgdG8gdXNlCit0aGlzIG9wdGlvbi4gWW91IGNhbiBhbHNvIGZvbGxvdyB0aGUgZGlzY3Vzc2lvbiBvZiB0aGlzIHByb2JsZW0KK2luIGlzc3VlIDExMjEyIGF0IGJ1Z3MucHl0aG9uLm9yZy4KKworaHR0cDovL3B1YmxpYi5ib3VsZGVyLmlibS5jb20vaW5mb2NlbnRlci9haXgvdjZyMS9pbmRleC5qc3A/dG9waWM9L2NvbS5pYm0uYWl4LmNtZHMvZG9jL2FpeGNtZHMzL2xkZWRpdC5odG0KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCQkgICAgIEtub3duIGlzc3VlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaG9zZSBpc3N1ZXMgYXJlIGN1cnJlbnRseSBhZmZlY3RpbmcgUHl0aG9uIG9uIEFJWDoKKworKiBQeXRob24gaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZCBvbiBBSVggd2hlbiBjb21waWxlZCBhcyBhIDY0IGJpdAorICBhcHBsaWNhdGlvbi4KKworKiBpc3N1ZSAzNTI2OiB0aGUgbWVtb3J5IHVzZWQgYnkgYSBQeXRob24gcHJvY2VzcyB3aWxsIG5ldmVyIGJlCisgIHJlbGVhc2VkIHRvIHRoZSBzeXN0ZW0uIElmIHlvdSBoYXZlIGEgUHl0aG9uIGFwcGxpY2F0aW9uIG9uIEFJWCB0aGF0CisgIHVzZXMgYSBsb3Qgb2YgbWVtb3J5LCB5b3Ugc2hvdWxkIHJlYWQgdGhpcyBpc3N1ZSBhbmQgeW91IG1heQorICBjb25zaWRlciB1c2luZyB0aGUgcHJvdmlkZWQgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzIGEgY3VzdG9tIG1hbGxvYworICBpbXBsZW1lbnRhdGlvbgorCisqIGlzc3VlIDExMTg0OiBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcyBpcyBjdXJyZW50bHkgYnJva2VuCisKKyogaXNzdWUgMTExODU6IG9zLndhaXQ0IGRvZXMgbm90IGJlaGF2ZSBjb3JyZWN0bHkgd2l0aCBvcHRpb24gV05PSEFORworCisqIGlzc3VlIDE3NDUxMDg6IHRoZXJlIG1heSBiZSBzb21lIHByb2JsZW1zIHdpdGggY3Vyc2VzLnBhbmVsCisKKyogaXNzdWUgMTExOTI6IHRlc3Rfc29ja2V0IGZhaWxzCisKKyogaXNzdWUgMTExOTA6IHRlc3RfbG9jYWxlIGZhaWxzCisKKyogaXNzdWUgMTExOTM6IHRlc3Rfc3VicHJvY2VzcyBmYWlscworCisqIGlzc3VlIDk5MjA6IG1pbm9yIGFyaXRobWV0aWMgaXNzdWVzIGluIGNtYXRoCisKKyogaXNzdWUgMTEyMTU6IHRlc3RfZmlsZWlvIGZhaWxzCisKKyogaXNzdWUgMTExODg6IHRlc3RfdGltZSBmYWlscworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJSW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgZGV2ZWxvcGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gYW5kIHB5dGhvbiBtb2R1bGVzIGNhbiBub3cgYmUgYnVpbHQgYXMgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVgKK2FzIHVzdWFsLgorCitBSVggc2hhcmVkIGxpYnJhcmllcyByZXF1aXJlIHRoYXQgYW4gImV4cG9ydCIgYW5kICJpbXBvcnQiIGZpbGUgYmUKK3Byb3ZpZGVkIGF0IGNvbXBpbGUgdGltZSB0byBsaXN0IGFsbCBleHRlcm4gc3ltYm9scyB3aGljaCBtYXkgYmUKK3NoYXJlZCBiZXR3ZWVuIG1vZHVsZXMuICBUaGUgImV4cG9ydCIgZmlsZSAobmFtZWQgcHl0aG9uLmV4cCkgZm9yIHRoZQorbW9kdWxlcyBhbmQgdGhlIGxpYnJhcmllcyB0aGF0IGJlbG9uZyB0byB0aGUgUHl0aG9uIGNvcmUgaXMgY3JlYXRlZCBieQordGhlICJtYWtleHBfYWl4IiBzY3JpcHQgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIGxpbmsgb2YgdGhlIHB5dGhvbgorYmluYXJ5LiBJdCBsaXN0cyBhbGwgZ2xvYmFsIHN5bWJvbHMgKGV4cG9ydGVkIGR1cmluZyB0aGUgbGluaykgb2YgdGhlCittb2R1bGVzIGFuZCB0aGUgbGlicmFyaWVzIHRoYXQgbWFrZSB1cCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUuCisKK1doZW4gc2hhcmVkIGxpYnJhcnkgbW9kdWxlcyAoLnNvIGZpbGVzKSBhcmUgbWFkZSwgYSBzZWNvbmQgc2hlbGwKK3NjcmlwdCBpcyBpbnZva2VkLiAgVGhpcyBzY3JpcHQgaXMgbmFtZWQgImxkX3NvX2FpeCIgYW5kIGlzIGFsc28KK3Byb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgTW9kdWxlcyBzdWJkaXJlY3RvcnkuICBUaGlzCitzY3JpcHQgYWN0cyBhcyBhbiAibGQiIHdyYXBwZXIgd2hpY2ggaGlkZXMgdGhlIGV4cGxpY2l0IG1hbmFnZW1lbnQgb2YKKyJleHBvcnQiIGFuZCAiaW1wb3J0IiBmaWxlczsgaXQgYWRkcyB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzIChpbiB0aGUKK2FwcHJvcHJpYXRlIG9yZGVyKSB0byB0aGUgbGluayBjb21tYW5kIHRoYXQgY3JlYXRlcyB0aGUgc2hhcmVkIG1vZHVsZS4KK0Ftb25nIG90aGVyIHRoaW5ncywgaXQgc3BlY2lmaWVzIHRoYXQgdGhlICJweXRob24uZXhwIiBmaWxlIGlzIGFuCisiaW1wb3J0IiBmaWxlIGZvciB0aGUgc2hhcmVkIG1vZHVsZS4KKworVGhpcyBtZWNoYW5pc20gc2hvdWxkIGJlIHRyYW5zcGFyZW50LgpkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUuRW1hY3MgYi9NaXNjL1JFQURNRS5FbWFjcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJiMWRiCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9SRUFETUUuRW1hY3MKQEAgLTAsMCArMSwzMiBAQAorPT09PT09PT09PT09PQorRW1hY3Mgc3VwcG9ydAorPT09PT09PT09PT09PQorCitJZiB5b3Ugd2FudCB0byBlZGl0IFB5dGhvbiBjb2RlIGluIEVtYWNzLCB5b3Ugc2hvdWxkIGRvd25sb2FkIHB5dGhvbi1tb2RlLmVsCithbmQgaW5zdGFsbCBpdCBzb21ld2hlcmUgb24geW91ciBsb2FkLXBhdGguICBTZWUgdGhlIHByb2plY3QgcGFnZSB0byBkb3dubG9hZDoKKworICAgIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9weXRob24tbW9kZQorCitXaGlsZSBFbWFjcyBjb21lcyB3aXRoIGEgcHl0aG9uLmVsIGZpbGUsIGl0IGlzIG5vdCByZWNvbW1lbmRlZC4KK3B5dGhvbi1tb2RlLmVsIGlzIG1haW50YWluZWQgYnkgY29yZSBQeXRob24gZGV2ZWxvcGVycyBhbmQgaXMgZ2VuZXJhbGx5Citjb25zaWRlcmVkIG1vcmUgUHl0aG9uIHByb2dyYW1tZXIgZnJpZW5kbHkuICBGb3IgZXhhbXBsZSwgcHl0aG9uLW1vZGUuZWwKK2luY2x1ZGVzIGEga2lsbGVyIGZlYXR1cmUgY2FsbGVkIGBwZGJ0cmFja2Agd2hpY2ggYWxsb3dzIHlvdSB0byBzZXQgYSBwZGIKK2JyZWFrcG9pbnQgaW4geW91ciBjb2RlLCBydW4geW91ciBwcm9ncmFtIGluIGFuIEVtYWNzIHNoZWxsIGJ1ZmZlciwgYW5kIGRvIGd1ZAorc3R5bGUgZGVidWdnaW5nIHdoZW4gdGhlIGJyZWFrcG9pbnQgaXMgaGl0LgorCitweXRob24tbW9kZS5lbCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCBHTlUgRW1hY3MgZnJvbSB0aGUgRlNGLCBhbmQgWEVtYWNzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgYnVnIHJlcG9ydGluZywgc2VlIHRoZSBhYm92ZSBwcm9qZWN0IHBhZ2UuICBGb3IgaGVscCwKK2RldmVsb3BtZW50LCBvciBkaXNjdXNzaW9ucywgc2VlIHRoZSBweXRob24tbW9kZSBtYWlsaW5nIGxpc3Q6CisKKyAgICBodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLW1vZGUKKworCisuLgorICAgTG9jYWwgVmFyaWFibGVzOgorICAgbW9kZTogaW5kZW50ZWQtdGV4dAorICAgaW5kZW50LXRhYnMtbW9kZTogbmlsCisgICBzZW50ZW5jZS1lbmQtZG91YmxlLXNwYWNlOiB0CisgICBmaWxsLWNvbHVtbjogNzgKKyAgIGNvZGluZzogdXRmLTgKKyAgIEVuZDoKZGlmZiAtLWdpdCBhL01pc2MvUlBNL3B5dGhvbi0yLjYuc3BlYyBiL01pc2MvUlBNL3B5dGhvbi0yLjcuc3BlYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBNaXNjL1JQTS9weXRob24tMi42LnNwZWMKcmVuYW1lIHRvIE1pc2MvUlBNL3B5dGhvbi0yLjcuc3BlYwppbmRleCBiZTg4NzE5Li5kYzQzN2RkIDEwMDY0NAotLS0gYS9NaXNjL1JQTS9weXRob24tMi42LnNwZWMKKysrIGIvTWlzYy9SUE0vcHl0aG9uLTIuNy5zcGVjCkBAIC0zOSw4ICszOSw4IEBACiAKICVkZWZpbmUgbmFtZSBweXRob24KICMtLXN0YXJ0IGNvbnN0YW50cy0tCi0lZGVmaW5lIHZlcnNpb24gMi42LjYKLSVkZWZpbmUgbGlidmVyIDIuNgorJWRlZmluZSB2ZXJzaW9uIDIuNy4xCislZGVmaW5lIGxpYnZlcnMgMi43CiAjLS1lbmQgY29uc3RhbnRzLS0KICVkZWZpbmUgcmVsZWFzZSAxcHlkb3RvcmcKICVkZWZpbmUgX19wcmVmaXggL3VzcgpAQCAtNjEsNyArNjEsNyBAQAogTmFtZTogJXtuYW1lfSV7Ymluc3VmZml4fQogVmVyc2lvbjogJXt2ZXJzaW9ufQogUmVsZWFzZTogJXtyZWxlYXNlfQotTGljZW5zZTogTW9kaWZpZWQgQ05SSSBPcGVuIFNvdXJjZSBMaWNlbnNlCitMaWNlbnNlOiBQU0YKIEdyb3VwOiBEZXZlbG9wbWVudC9MYW5ndWFnZXMKIFNvdXJjZTogUHl0aG9uLSV7dmVyc2lvbn0udGFyLmJ6MgogJWlmICV7aW5jbHVkZV9kb2NzfQpkaWZmIC0tZ2l0IGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dCBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKaW5kZXggMjViYjZkMS4uZjg2OWU3YyAxMDA2NDQKLS0tIGEvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAorKysgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CkBAIC0xLDE3ICsxLDIwIEBACi1UaGlzIGZpbGUgZGVzY3JpYmVzIHNvbWUgc3BlY2lhbCBQeXRob24gYnVpbGQgdHlwZXMgZW5hYmxlZCB2aWEKLWNvbXBpbGUtdGltZSBwcmVwcm9jZXNzb3IgZGVmaW5lcy4KK1RoaXMgZmlsZSBkZXNjcmliZXMgc29tZSBzcGVjaWFsIFB5dGhvbiBidWlsZCB0eXBlcyBlbmFibGVkIHZpYSBjb21waWxlLXRpbWUKK3ByZXByb2Nlc3NvciBkZWZpbmVzLgogCi1JdCBpcyBiZXN0IHRvIGRlZmluZSB0aGVzZSBvcHRpb25zIGluIHRoZSBFWFRSQV9DRkxBR1MgbWFrZSB2YXJpYWJsZTsKK0lNUE9SVEFOVDogaWYgeW91IHdhbnQgdG8gYnVpbGQgYSBkZWJ1Zy1lbmFibGVkIFB5dGhvbiwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAoreW91IHVzZSBgYC4vY29uZmlndXJlIC0td2l0aC1weWRlYnVnYGAsIHJhdGhlciB0aGFuIHRoZSBvcHRpb25zIGxpc3RlZCBoZXJlLgorCitIb3dldmVyLCBpZiB5b3Ugd2lzaCB0byBkZWZpbmUgc29tZSBvZiB0aGVzZSBvcHRpb25zIGluZGl2aWR1YWxseSwgaXQgaXMgYmVzdAordG8gZGVmaW5lIHRoZW0gaW4gdGhlIEVYVFJBX0NGTEFHUyBtYWtlIHZhcmlhYmxlOwogYGBtYWtlIEVYVFJBX0NGTEFHUz0iLURQeV9SRUZfREVCVUciYGAuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHlfUkVGX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgaW4gMS40Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgUkVGX0RFQlVHIGJlZm9yZSAxLjQKIAotVHVybiBvbiBhZ2dyZWdhdGUgcmVmZXJlbmNlIGNvdW50aW5nLiAgVGhpcyBhcnJhbmdlcyB0aGF0IGV4dGVybgotX1B5X1JlZlRvdGFsIGhvbGQgYSBjb3VudCBvZiBhbGwgcmVmZXJlbmNlcywgdGhlIHN1bSBvZiBvYl9yZWZjbnQgYWNyb3NzCi1hbGwgb2JqZWN0cy4gIEluIGEgZGVidWctbW9kZSBidWlsZCwgdGhpcyBpcyB3aGVyZSB0aGUgIjgyODgiIGNvbWVzIGZyb20KLWluCitQeV9SRUZfREVCVUcKKy0tLS0tLS0tLS0tLQorCitUdXJuIG9uIGFnZ3JlZ2F0ZSByZWZlcmVuY2UgY291bnRpbmcuICBUaGlzIGFycmFuZ2VzIHRoYXQgZXh0ZXJuIF9QeV9SZWZUb3RhbAoraG9sZCBhIGNvdW50IG9mIGFsbCByZWZlcmVuY2VzLCB0aGUgc3VtIG9mIG9iX3JlZmNudCBhY3Jvc3MgYWxsIG9iamVjdHMuICBJbiBhCitkZWJ1Zy1tb2RlIGJ1aWxkLCB0aGlzIGlzIHdoZXJlIHRoZSAiODI4OCIgY29tZXMgZnJvbSBpbgogCiAgICAgPj4+IDIzCiAgICAgMjMKQEAgLTE5LDc1ICsyMiw3MiBAQAogICAgID4+PgogCiBOb3RlIHRoYXQgaWYgdGhpcyBjb3VudCBpbmNyZWFzZXMgd2hlbiB5b3UncmUgbm90IHN0b3JpbmcgYXdheSBuZXcgb2JqZWN0cywKLXRoZXJlJ3MgcHJvYmFibHkgYSBsZWFrLiAgUmVtZW1iZXIsIHRob3VnaCwgdGhhdCBpbiBpbnRlcmFjdGl2ZSBtb2RlIHRoZQotc3BlY2lhbCBuYW1lICJfIiBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCByZXN1bHQgZGlzcGxheWVkIQordGhlcmUncyBwcm9iYWJseSBhIGxlYWsuICBSZW1lbWJlciwgdGhvdWdoLCB0aGF0IGluIGludGVyYWN0aXZlIG1vZGUgdGhlIHNwZWNpYWwKK25hbWUgIl8iIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBsYXN0IHJlc3VsdCBkaXNwbGF5ZWQhCiAKLVB5X1JFRl9ERUJVRyBhbHNvIGNoZWNrcyBhZnRlciBldmVyeSBkZWNyZWYgdG8gdmVyaWZ5IHRoYXQgdGhlIHJlZmNvdW50Ci1oYXNuJ3QgZ29uZSBuZWdhdGl2ZSwgYW5kIGNhdXNlcyBhbiBpbW1lZGlhdGUgZmF0YWwgZXJyb3IgaWYgaXQgaGFzLgorUHlfUkVGX0RFQlVHIGFsc28gY2hlY2tzIGFmdGVyIGV2ZXJ5IGRlY3JlZiB0byB2ZXJpZnkgdGhhdCB0aGUgcmVmY291bnQgaGFzbid0Citnb25lIG5lZ2F0aXZlLCBhbmQgY2F1c2VzIGFuIGltbWVkaWF0ZSBmYXRhbCBlcnJvciBpZiBpdCBoYXMuCiAKIFNwZWNpYWwgZ2ltbWlja3M6CiAKIHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICBSZXR1cm4gY3VycmVudCB0b3RhbCBvZiBhbGwgcmVmY291bnRzLgotICAgIEF2YWlsYWJsZSB1bmRlciBQeV9SRUZfREVCVUcgaW4gUHl0aG9uIDIuMy4KLSAgICBCZWZvcmUgMi4zLCBQeV9UUkFDRV9SRUZTIHdhcyByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbi4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHlfVFJBQ0VfUkVGUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgaW4gMS40Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZCBUUkFDRV9SRUZTIGJlZm9yZSAxLjQKIAotVHVybiBvbiBoZWF2eSByZWZlcmVuY2UgZGVidWdnaW5nLiAgVGhpcyBpcyBtYWpvciBzdXJnZXJ5LiAgRXZlcnkgUHlPYmplY3QKLWdyb3dzIHR3byBtb3JlIHBvaW50ZXJzLCB0byBtYWludGFpbiBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgbGl2ZQotaGVhcC1hbGxvY2F0ZWQgb2JqZWN0cy4gIE1vc3QgYnVpbHQtaW4gdHlwZSBvYmplY3RzIGFyZSBub3QgaW4gdGhpcyBsaXN0LAotYXMgdGhleSdyZSBzdGF0aWNhbGx5IGFsbG9jYXRlZC4gIFN0YXJ0aW5nIGluIFB5dGhvbiAyLjMsIGlmIENPVU5UX0FMTE9DUwotKHNlZSBiZWxvdykgaXMgYWxzbyBkZWZpbmVkLCBhIHN0YXRpYyB0eXBlIG9iamVjdCBUIGRvZXMgYXBwZWFyIGluIHRoaXMKLWxpc3QgaWYgYXQgbGVhc3Qgb25lIG9iamVjdCBvZiB0eXBlIFQgaGFzIGJlZW4gY3JlYXRlZC4KKworUHlfVFJBQ0VfUkVGUworLS0tLS0tLS0tLS0tLQorCitUdXJuIG9uIGhlYXZ5IHJlZmVyZW5jZSBkZWJ1Z2dpbmcuICBUaGlzIGlzIG1ham9yIHN1cmdlcnkuICBFdmVyeSBQeU9iamVjdCBncm93cwordHdvIG1vcmUgcG9pbnRlcnMsIHRvIG1haW50YWluIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGFsbCBsaXZlIGhlYXAtYWxsb2NhdGVkCitvYmplY3RzLiAgTW9zdCBidWlsdC1pbiB0eXBlIG9iamVjdHMgYXJlIG5vdCBpbiB0aGlzIGxpc3QsIGFzIHRoZXkncmUgc3RhdGljYWxseQorYWxsb2NhdGVkLiAgU3RhcnRpbmcgaW4gUHl0aG9uIDIuMywgaWYgQ09VTlRfQUxMT0NTIChzZWUgYmVsb3cpIGlzIGFsc28gZGVmaW5lZCwKK2Egc3RhdGljIHR5cGUgb2JqZWN0IFQgZG9lcyBhcHBlYXIgaW4gdGhpcyBsaXN0IGlmIGF0IGxlYXN0IG9uZSBvYmplY3Qgb2YgdHlwZSBUCitoYXMgYmVlbiBjcmVhdGVkLgogCiBOb3RlIHRoYXQgYmVjYXVzZSB0aGUgZnVuZGFtZW50YWwgUHlPYmplY3QgbGF5b3V0IGNoYW5nZXMsIFB5dGhvbiBtb2R1bGVzCi1jb21waWxlZCB3aXRoIFB5X1RSQUNFX1JFRlMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG1vZHVsZXMgY29tcGlsZWQgd2l0aG91dAotaXQuCitjb21waWxlZCB3aXRoIFB5X1RSQUNFX1JFRlMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG1vZHVsZXMgY29tcGlsZWQgd2l0aG91dCBpdC4KIAogUHlfVFJBQ0VfUkVGUyBpbXBsaWVzIFB5X1JFRl9ERUJVRy4KIAogU3BlY2lhbCBnaW1taWNrczoKIAogc3lzLmdldG9iamVjdHMobWF4WywgdHlwZV0pCi0gICAgUmV0dXJuIGxpc3Qgb2YgdGhlIChubyBtb3JlIHRoYW4pIG1heCBtb3N0LXJlY2VudGx5IGFsbG9jYXRlZCBvYmplY3RzLAotICAgIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGZpcnN0IGluIHRoZSBsaXN0LCBsZWFzdC1yZWNlbnRseSBhbGxvY2F0ZWQKLSAgICBsYXN0IGluIHRoZSBsaXN0LiAgbWF4PTAgbWVhbnMgbm8gbGltaXQgb24gbGlzdCBsZW5ndGguCi0gICAgSWYgYW4gb3B0aW9uYWwgdHlwZSBvYmplY3QgaXMgcGFzc2VkLCB0aGUgbGlzdCBpcyBhbHNvIHJlc3RyaWN0ZWQgdG8KLSAgICBvYmplY3RzIG9mIHRoYXQgdHlwZS4KLSAgICBUaGUgcmV0dXJuIGxpc3QgaXRzZWxmLCBhbmQgc29tZSB0ZW1wIG9iamVjdHMgY3JlYXRlZCBqdXN0IHRvIGNhbGwKLSAgICBzeXMuZ2V0b2JqZWN0cygpLCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgcmV0dXJuIGxpc3QuICBOb3RlIHRoYXQgdGhlCi0gICAgbGlzdCByZXR1cm5lZCBpcyBqdXN0IGFub3RoZXIgb2JqZWN0LCB0aG91Z2gsIHNvIG1heSBhcHBlYXIgaW4gdGhlCi0gICAgcmV0dXJuIGxpc3QgdGhlIG5leHQgdGltZSB5b3UgY2FsbCBnZXRvYmplY3RzKCk7IG5vdGUgdGhhdCBldmVyeQotICAgIG9iamVjdCBpbiB0aGUgbGlzdCBpcyBrZXB0IGFsaXZlIHRvbywgc2ltcGx5IGJ5IHZpcnR1ZSBvZiBiZWluZyBpbgotICAgIHRoZSBsaXN0LgorICAgIFJldHVybiBsaXN0IG9mIHRoZSAobm8gbW9yZSB0aGFuKSBtYXggbW9zdC1yZWNlbnRseSBhbGxvY2F0ZWQgb2JqZWN0cywgbW9zdAorICAgIHJlY2VudGx5IGFsbG9jYXRlZCBmaXJzdCBpbiB0aGUgbGlzdCwgbGVhc3QtcmVjZW50bHkgYWxsb2NhdGVkIGxhc3QgaW4gdGhlCisgICAgbGlzdC4gIG1heD0wIG1lYW5zIG5vIGxpbWl0IG9uIGxpc3QgbGVuZ3RoLiAgSWYgYW4gb3B0aW9uYWwgdHlwZSBvYmplY3QgaXMKKyAgICBwYXNzZWQsIHRoZSBsaXN0IGlzIGFsc28gcmVzdHJpY3RlZCB0byBvYmplY3RzIG9mIHRoYXQgdHlwZS4gIFRoZSByZXR1cm4KKyAgICBsaXN0IGl0c2VsZiwgYW5kIHNvbWUgdGVtcCBvYmplY3RzIGNyZWF0ZWQganVzdCB0byBjYWxsIHN5cy5nZXRvYmplY3RzKCksCisgICAgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHJldHVybiBsaXN0LiAgTm90ZSB0aGF0IHRoZSBsaXN0IHJldHVybmVkIGlzIGp1c3QKKyAgICBhbm90aGVyIG9iamVjdCwgdGhvdWdoLCBzbyBtYXkgYXBwZWFyIGluIHRoZSByZXR1cm4gbGlzdCB0aGUgbmV4dCB0aW1lIHlvdQorICAgIGNhbGwgZ2V0b2JqZWN0cygpOyBub3RlIHRoYXQgZXZlcnkgb2JqZWN0IGluIHRoZSBsaXN0IGlzIGtlcHQgYWxpdmUgdG9vLAorICAgIHNpbXBseSBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gdGhlIGxpc3QuCiAKLWVudmFyIFBZVEhPTkRVTVBSRUZTCi0gICAgSWYgdGhpcyBlbnZhciBleGlzdHMsIFB5X0ZpbmFsaXplKCkgYXJyYW5nZXMgdG8gcHJpbnQgYSBsaXN0IG9mCi0gICAgYWxsIHN0aWxsLWxpdmUgaGVhcCBvYmplY3RzLiAgVGhpcyBpcyBwcmludGVkIHR3aWNlLCBpbiBkaWZmZXJlbnQKLSAgICBmb3JtYXRzLCBiZWZvcmUgYW5kIGFmdGVyIFB5X0ZpbmFsaXplIGhhcyBjbGVhbmVkIHVwIGV2ZXJ5dGhpbmcgaXQKLSAgICBjYW4gY2xlYW4gdXAuICBUaGUgZmlyc3Qgb3V0cHV0IGJsb2NrIHByb2R1Y2VzIHRoZSByZXByKCkgb2YgZWFjaAotICAgIG9iamVjdCBzbyBpcyBtb3JlIGluZm9ybWF0aXZlOyBob3dldmVyLCBhIGxvdCBvZiBzdHVmZiBkZXN0aW5lZCB0bwotICAgIGRpZSBpcyBzdGlsbCBhbGl2ZSB0aGVuLiAgVGhlIHNlY29uZCBvdXRwdXQgYmxvY2sgaXMgbXVjaCBoYXJkZXIKLSAgICB0byB3b3JrIHdpdGggKHJlcHIoKSBjYW4ndCBiZSBpbnZva2VkIGFueW1vcmUgLS0gdGhlIGludGVycHJldGVyCi0gICAgaGFzIGJlZW4gdG9ybiBkb3duIHRvbyBmYXIpLCBidXQgZG9lc24ndCBsaXN0IGFueSBvYmplY3RzIHRoYXQgd2lsbAotICAgIGRpZS4gIFRoZSB0b29sIHNjcmlwdCBjb21iaW5lcmVmcy5weSBjYW4gYmUgcnVuIG92ZXIgdGhpcyB0byBjb21iaW5lCi0gICAgdGhlIGluZm8gZnJvbSBib3RoIG91dHB1dCBibG9ja3MuICBUaGUgc2Vjb25kIG91dHB1dCBibG9jaywgYW5kCitlbnZ2YXIgUFlUSE9ORFVNUFJFRlMKKyAgICBJZiB0aGlzIGVudnZhciBleGlzdHMsIFB5X0ZpbmFsaXplKCkgYXJyYW5nZXMgdG8gcHJpbnQgYSBsaXN0IG9mIGFsbAorICAgIHN0aWxsLWxpdmUgaGVhcCBvYmplY3RzLiAgVGhpcyBpcyBwcmludGVkIHR3aWNlLCBpbiBkaWZmZXJlbnQgZm9ybWF0cywKKyAgICBiZWZvcmUgYW5kIGFmdGVyIFB5X0ZpbmFsaXplIGhhcyBjbGVhbmVkIHVwIGV2ZXJ5dGhpbmcgaXQgY2FuIGNsZWFuIHVwLiAgVGhlCisgICAgZmlyc3Qgb3V0cHV0IGJsb2NrIHByb2R1Y2VzIHRoZSByZXByKCkgb2YgZWFjaCBvYmplY3Qgc28gaXMgbW9yZQorICAgIGluZm9ybWF0aXZlOyBob3dldmVyLCBhIGxvdCBvZiBzdHVmZiBkZXN0aW5lZCB0byBkaWUgaXMgc3RpbGwgYWxpdmUgdGhlbi4KKyAgICBUaGUgc2Vjb25kIG91dHB1dCBibG9jayBpcyBtdWNoIGhhcmRlciB0byB3b3JrIHdpdGggKHJlcHIoKSBjYW4ndCBiZSBpbnZva2VkCisgICAgYW55bW9yZSAtLSB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gdG9ybiBkb3duIHRvbyBmYXIpLCBidXQgZG9lc24ndCBsaXN0IGFueQorICAgIG9iamVjdHMgdGhhdCB3aWxsIGRpZS4gIFRoZSB0b29sIHNjcmlwdCBjb21iaW5lcmVmcy5weSBjYW4gYmUgcnVuIG92ZXIgdGhpcworICAgIHRvIGNvbWJpbmUgdGhlIGluZm8gZnJvbSBib3RoIG91dHB1dCBibG9ja3MuICBUaGUgc2Vjb25kIG91dHB1dCBibG9jaywgYW5kCiAgICAgY29tYmluZXJlZnMucHksIHdlcmUgbmV3IGluIFB5dGhvbiAyLjNiMS4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUFlNQUxMT0NfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZWQgaW4gMi4zCisKKworUFlNQUxMT0NfREVCVUcKKy0tLS0tLS0tLS0tLS0tCiAKIFdoZW4gcHltYWxsb2MgaXMgZW5hYmxlZCAoV0lUSF9QWU1BTExPQyBpcyBkZWZpbmVkKSwgY2FsbHMgdG8gdGhlIFB5T2JqZWN0XwotbWVtb3J5IHJvdXRpbmVzIGFyZSBoYW5kbGVkIGJ5IFB5dGhvbidzIG93biBzbWFsbC1vYmplY3QgYWxsb2NhdG9yLCB3aGlsZQotY2FsbHMgdG8gdGhlIFB5TWVtXyBtZW1vcnkgcm91dGluZXMgYXJlIGRpcmVjdGVkIHRvIHRoZSBzeXN0ZW0gbWFsbG9jLwotcmVhbGxvYy9mcmVlLiAgSWYgUFlNQUxMT0NfREVCVUcgaXMgYWxzbyBkZWZpbmVkLCBjYWxscyB0byBib3RoIFB5T2JqZWN0XwotYW5kIFB5TWVtXyBtZW1vcnkgcm91dGluZXMgYXJlIGRpcmVjdGVkIHRvIGEgc3BlY2lhbCBkZWJ1Z2dpbmcgbW9kZSBvZgotUHl0aG9uJ3Mgc21hbGwtb2JqZWN0IGFsbG9jYXRvci4KK21lbW9yeSByb3V0aW5lcyBhcmUgaGFuZGxlZCBieSBQeXRob24ncyBvd24gc21hbGwtb2JqZWN0IGFsbG9jYXRvciwgd2hpbGUgY2FsbHMKK3RvIHRoZSBQeU1lbV8gbWVtb3J5IHJvdXRpbmVzIGFyZSBkaXJlY3RlZCB0byB0aGUgc3lzdGVtIG1hbGxvYy8gcmVhbGxvYy9mcmVlLgorSWYgUFlNQUxMT0NfREVCVUcgaXMgYWxzbyBkZWZpbmVkLCBjYWxscyB0byBib3RoIFB5T2JqZWN0XyBhbmQgUHlNZW1fIG1lbW9yeQorcm91dGluZXMgYXJlIGRpcmVjdGVkIHRvIGEgc3BlY2lhbCBkZWJ1Z2dpbmcgbW9kZSBvZiBQeXRob24ncyBzbWFsbC1vYmplY3QKK2FsbG9jYXRvci4KIAotVGhpcyBtb2RlIGZpbGxzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHdpdGggc3BlY2lhbCwKLXJlY29nbml6YWJsZSBiaXQgcGF0dGVybnMsIGFuZCBhZGRzIGRlYnVnZ2luZyBpbmZvIG9uIGVhY2ggZW5kIG9mCi1keW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2Nrcy4gIFRoZSBzcGVjaWFsIGJpdCBwYXR0ZXJucyBhcmU6CitUaGlzIG1vZGUgZmlsbHMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3Mgd2l0aCBzcGVjaWFsLCByZWNvZ25pemFibGUKK2JpdCBwYXR0ZXJucywgYW5kIGFkZHMgZGVidWdnaW5nIGluZm8gb24gZWFjaCBlbmQgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkCittZW1vcnkgYmxvY2tzLiAgVGhlIHNwZWNpYWwgYml0IHBhdHRlcm5zIGFyZToKIAogI2RlZmluZSBDTEVBTkJZVEUgICAgIDB4Q0IgICAvKiBjbGVhbiAobmV3bHkgYWxsb2NhdGVkKSBtZW1vcnkgKi8KICNkZWZpbmUgREVBREJZVEUgICAgICAweERCICAgLyogZGVhZCAobmV3bHkgZnJlZWQpIG1lbW9yeSAqLwpAQCAtOTYsNzMgKzk2LDcwIEBACiBTdHJpbmdzIG9mIHRoZXNlIGJ5dGVzIGFyZSB1bmxpa2VseSB0byBiZSB2YWxpZCBhZGRyZXNzZXMsIGZsb2F0cywgb3IgNy1iaXQKIEFTQ0lJIHN0cmluZ3MuCiAKLUxldCBTID0gc2l6ZW9mKHNpemVfdCkuIDIqUyBieXRlcyBhcmUgYWRkZWQgYXQgZWFjaCBlbmQgb2YgZWFjaCBibG9jayBvZiBOCi1ieXRlcyByZXF1ZXN0ZWQuICBUaGUgbWVtb3J5IGxheW91dCBpcyBsaWtlIHNvLCB3aGVyZSBwIHJlcHJlc2VudHMgdGhlCi1hZGRyZXNzIHJldHVybmVkIGJ5IGEgbWFsbG9jLWxpa2Ugb3IgcmVhbGxvYy1saWtlIGZ1bmN0aW9uIChwW2k6al0gbWVhbnMKLXRoZSBzbGljZSBvZiBieXRlcyBmcm9tICoocCtpKSBpbmNsdXNpdmUgdXAgdG8gKihwK2opIGV4Y2x1c2l2ZTsgbm90ZSB0aGF0Ci10aGUgdHJlYXRtZW50IG9mIG5lZ2F0aXZlIGluZGljZXMgZGlmZmVycyBmcm9tIGEgUHl0aG9uIHNsaWNlKToKK0xldCBTID0gc2l6ZW9mKHNpemVfdCkuIDIqUyBieXRlcyBhcmUgYWRkZWQgYXQgZWFjaCBlbmQgb2YgZWFjaCBibG9jayBvZiBOIGJ5dGVzCityZXF1ZXN0ZWQuICBUaGUgbWVtb3J5IGxheW91dCBpcyBsaWtlIHNvLCB3aGVyZSBwIHJlcHJlc2VudHMgdGhlIGFkZHJlc3MKK3JldHVybmVkIGJ5IGEgbWFsbG9jLWxpa2Ugb3IgcmVhbGxvYy1saWtlIGZ1bmN0aW9uIChwW2k6al0gbWVhbnMgdGhlIHNsaWNlIG9mCitieXRlcyBmcm9tICoocCtpKSBpbmNsdXNpdmUgdXAgdG8gKihwK2opIGV4Y2x1c2l2ZTsgbm90ZSB0aGF0IHRoZSB0cmVhdG1lbnQgb2YKK25lZ2F0aXZlIGluZGljZXMgZGlmZmVycyBmcm9tIGEgUHl0aG9uIHNsaWNlKToKIAogcFstMipTOi1TXQotICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4KLSAgICAoZWFzaWVyIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCisgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCisgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KIHBbLVM6MF0KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzA6Tl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURSwgdXNlZCB0byBjYXRjaAotICAgIHJlZmVyZW5jZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4KLSAgICBXaGVuIGEgcmVhbGxvYy1saWtlIGZ1bmN0aW9uIGlzIGNhbGxlZCByZXF1ZXN0aW5nIGEgbGFyZ2VyIG1lbW9yeQotICAgIGJsb2NrLCB0aGUgbmV3IGV4Y2VzcyBieXRlcyBhcmUgYWxzbyBmaWxsZWQgd2l0aCBDTEVBTkJZVEUuCi0gICAgV2hlbiBhIGZyZWUtbGlrZSBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZXNlIGFyZSBvdmVyd3JpdHRlbiB3aXRoCi0gICAgREVBREJZVEUsIHRvIGNhdGNoIHJlZmVyZW5jZSB0byBmcmVlZCBtZW1vcnkuICBXaGVuIGEgcmVhbGxvYy0KLSAgICBsaWtlIGZ1bmN0aW9uIGlzIGNhbGxlZCByZXF1ZXN0aW5nIGEgc21hbGxlciBtZW1vcnkgYmxvY2ssIHRoZSBleGNlc3MKLSAgICBvbGQgYnl0ZXMgYXJlIGFsc28gZmlsbGVkIHdpdGggREVBREJZVEUuCisgICAgcmVmZXJlbmNlIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiAgV2hlbiBhIHJlYWxsb2MtbGlrZSBmdW5jdGlvbiBpcyBjYWxsZWQKKyAgICByZXF1ZXN0aW5nIGEgbGFyZ2VyIG1lbW9yeSBibG9jaywgdGhlIG5ldyBleGNlc3MgYnl0ZXMgYXJlIGFsc28gZmlsbGVkIHdpdGgKKyAgICBDTEVBTkJZVEUuICBXaGVuIGEgZnJlZS1saWtlIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlc2UgYXJlIG92ZXJ3cml0dGVuIHdpdGgKKyAgICBERUFEQllURSwgdG8gY2F0Y2ggcmVmZXJlbmNlIHRvIGZyZWVkIG1lbW9yeS4gIFdoZW4gYSByZWFsbG9jLSBsaWtlIGZ1bmN0aW9uCisgICAgaXMgY2FsbGVkIHJlcXVlc3RpbmcgYSBzbWFsbGVyIG1lbW9yeSBibG9jaywgdGhlIGV4Y2VzcyBvbGQgYnl0ZXMgYXJlIGFsc28KKyAgICBmaWxsZWQgd2l0aCBERUFEQllURS4KIHBbTjpOK1NdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIG92ZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwW04rUzpOKzIqU10KICAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIGEgbWFsbG9jLWxpa2Ugb3IKLSAgICByZWFsbG9jLWxpa2UgZnVuY3Rpb24uCi0gICAgQmlnLWVuZGlhbiBzaXplX3QuCi0gICAgSWYgImJhZCBtZW1vcnkiIGlzIGRldGVjdGVkIGxhdGVyLCB0aGUgc2VyaWFsIG51bWJlciBnaXZlcyBhbgotICAgIGV4Y2VsbGVudCB3YXkgdG8gc2V0IGEgYnJlYWtwb2ludCBvbiB0aGUgbmV4dCBydW4sIHRvIGNhcHR1cmUgdGhlCi0gICAgaW5zdGFudCBhdCB3aGljaCB0aGlzIGJsb2NrIHdhcyBwYXNzZWQgb3V0LiAgVGhlIHN0YXRpYyBmdW5jdGlvbgotICAgIGJ1bXBzZXJpYWxubygpIGluIG9ibWFsbG9jLmMgaXMgdGhlIG9ubHkgcGxhY2UgdGhlIHNlcmlhbCBudW1iZXIKLSAgICBpcyBpbmNyZW1lbnRlZCwgYW5kIGV4aXN0cyBzbyB5b3UgY2FuIHNldCBzdWNoIGEgYnJlYWtwb2ludCBlYXNpbHkuCisgICAgcmVhbGxvYy1saWtlIGZ1bmN0aW9uLiAgQmlnLWVuZGlhbiBzaXplX3QuICBJZiAiYmFkIG1lbW9yeSIgaXMgZGV0ZWN0ZWQKKyAgICBsYXRlciwgdGhlIHNlcmlhbCBudW1iZXIgZ2l2ZXMgYW4gZXhjZWxsZW50IHdheSB0byBzZXQgYSBicmVha3BvaW50IG9uIHRoZQorICAgIG5leHQgcnVuLCB0byBjYXB0dXJlIHRoZSBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuICBUaGUKKyAgICBzdGF0aWMgZnVuY3Rpb24gYnVtcHNlcmlhbG5vKCkgaW4gb2JtYWxsb2MuYyBpcyB0aGUgb25seSBwbGFjZSB0aGUgc2VyaWFsCisgICAgbnVtYmVyIGlzIGluY3JlbWVudGVkLCBhbmQgZXhpc3RzIHNvIHlvdSBjYW4gc2V0IHN1Y2ggYSBicmVha3BvaW50IGVhc2lseS4KIAotQSByZWFsbG9jLWxpa2Ugb3IgZnJlZS1saWtlIGZ1bmN0aW9uIGZpcnN0IGNoZWNrcyB0aGF0IHRoZSBGT1JCSURERU5CWVRFcwotYXQgZWFjaCBlbmQgYXJlIGludGFjdC4gIElmIHRoZXkndmUgYmVlbiBhbHRlcmVkLCBkaWFnbm9zdGljIG91dHB1dCBpcwotd3JpdHRlbiB0byBzdGRlcnIsIGFuZCB0aGUgcHJvZ3JhbSBpcyBhYm9ydGVkIHZpYSBQeV9GYXRhbEVycm9yKCkuICBUaGUKLW90aGVyIG1haW4gZmFpbHVyZSBtb2RlIGlzIHByb3Zva2luZyBhIG1lbW9yeSBlcnJvciB3aGVuIGEgcHJvZ3JhbQotcmVhZHMgdXAgb25lIG9mIHRoZSBzcGVjaWFsIGJpdCBwYXR0ZXJucyBhbmQgdHJpZXMgdG8gdXNlIGl0IGFzIGFuIGFkZHJlc3MuCi1JZiB5b3UgZ2V0IGluIGEgZGVidWdnZXIgdGhlbiBhbmQgbG9vayBhdCB0aGUgb2JqZWN0LCB5b3UncmUgbGlrZWx5Ci10byBzZWUgdGhhdCBpdCdzIGVudGlyZWx5IGZpbGxlZCB3aXRoIDB4REIgKG1lYW5pbmcgZnJlZWQgbWVtb3J5IGlzCi1nZXR0aW5nIHVzZWQpIG9yIDB4Q0IgKG1lYW5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZ2V0dGluZyB1c2VkKS4KK0EgcmVhbGxvYy1saWtlIG9yIGZyZWUtbGlrZSBmdW5jdGlvbiBmaXJzdCBjaGVja3MgdGhhdCB0aGUgRk9SQklEREVOQllURXMgYXQKK2VhY2ggZW5kIGFyZSBpbnRhY3QuICBJZiB0aGV5J3ZlIGJlZW4gYWx0ZXJlZCwgZGlhZ25vc3RpYyBvdXRwdXQgaXMgd3JpdHRlbiB0bworc3RkZXJyLCBhbmQgdGhlIHByb2dyYW0gaXMgYWJvcnRlZCB2aWEgUHlfRmF0YWxFcnJvcigpLiAgVGhlIG90aGVyIG1haW4gZmFpbHVyZQorbW9kZSBpcyBwcm92b2tpbmcgYSBtZW1vcnkgZXJyb3Igd2hlbiBhIHByb2dyYW0gcmVhZHMgdXAgb25lIG9mIHRoZSBzcGVjaWFsIGJpdAorcGF0dGVybnMgYW5kIHRyaWVzIHRvIHVzZSBpdCBhcyBhbiBhZGRyZXNzLiAgSWYgeW91IGdldCBpbiBhIGRlYnVnZ2VyIHRoZW4gYW5kCitsb29rIGF0IHRoZSBvYmplY3QsIHlvdSdyZSBsaWtlbHkgdG8gc2VlIHRoYXQgaXQncyBlbnRpcmVseSBmaWxsZWQgd2l0aCAweERCCisobWVhbmluZyBmcmVlZCBtZW1vcnkgaXMgZ2V0dGluZyB1c2VkKSBvciAweENCIChtZWFuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzCitnZXR0aW5nIHVzZWQpLgogCiBOb3RlIHRoYXQgUFlNQUxMT0NfREVCVUcgcmVxdWlyZXMgV0lUSF9QWU1BTExPQy4KIAogU3BlY2lhbCBnaW1taWNrczoKIAotZW52YXIgUFlUSE9OTUFMTE9DU1RBVFMKLSAgICBJZiB0aGlzIGVudmFyIGV4aXN0cywgYSByZXBvcnQgb2YgcHltYWxsb2Mgc3VtbWFyeSBzdGF0aXN0aWNzIGlzCi0gICAgcHJpbnRlZCB0byBzdGRlcnIgd2hlbmV2ZXIgYSBuZXcgYXJlbmEgaXMgYWxsb2NhdGVkLCBhbmQgYWxzbwotICAgIGJ5IFB5X0ZpbmFsaXplKCkuCitlbnZ2YXIgUFlUSE9OTUFMTE9DU1RBVFMKKyAgICBJZiB0aGlzIGVudnZhciBleGlzdHMsIGEgcmVwb3J0IG9mIHB5bWFsbG9jIHN1bW1hcnkgc3RhdGlzdGljcyBpcyBwcmludGVkIHRvCisgICAgc3RkZXJyIHdoZW5ldmVyIGEgbmV3IGFyZW5hIGlzIGFsbG9jYXRlZCwgYW5kIGFsc28gYnkgUHlfRmluYWxpemUoKS4KIAogQ2hhbmdlZCBpbiAyLjU6ICBUaGUgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzIGFsbG9jYXRlZCBpcyA0KnNpemVvZihzaXplX3QpLgogQmVmb3JlIGl0IHdhcyAxNiBvbiBhbGwgYm94ZXMsIHJlZmxlY3RpbmcgdGhhdCBQeXRob24gY291bGRuJ3QgbWFrZSB1c2Ugb2YKIGFsbG9jYXRpb25zID49IDIqKjMyIGJ5dGVzIGV2ZW4gb24gNjQtYml0IGJveGVzIGJlZm9yZSAyLjUuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVB5X0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VkIGluIDEuNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZCBERUJVRyBiZWZvcmUgMS41CisKKworUHlfREVCVUcKKy0tLS0tLS0tCiAKIFRoaXMgaXMgd2hhdCBpcyBnZW5lcmFsbHkgbWVhbnQgYnkgImEgZGVidWcgYnVpbGQiIG9mIFB5dGhvbi4KIAotUHlfREVCVUcgaW1wbGllcyBMTFRSQUNFLCBQeV9SRUZfREVCVUcsIFB5X1RSQUNFX1JFRlMsIGFuZAotUFlNQUxMT0NfREVCVUcgKGlmIFdJVEhfUFlNQUxMT0MgaXMgZW5hYmxlZCkuICBJbiBhZGRpdGlvbiwgQwotYXNzZXJ0KClzIGFyZSBlbmFibGVkICh2aWEgdGhlIEMgd2F5OiBieSBub3QgZGVmaW5pbmcgTkRFQlVHKSwgYW5kCi1zb21lIHJvdXRpbmVzIGRvIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBpbnNpZGUgIiNpZmRlZiBQeV9ERUJVRyIKLWJsb2Nrcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ09VTlRfQUxMT0NTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VkIGluIDAuOS45Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0bHkgYnJva2VuIGluIDIuMiBhbmQgMi4yLjEKK1B5X0RFQlVHIGltcGxpZXMgTExUUkFDRSwgUHlfUkVGX0RFQlVHLCBQeV9UUkFDRV9SRUZTLCBhbmQgUFlNQUxMT0NfREVCVUcgKGlmCitXSVRIX1BZTUFMTE9DIGlzIGVuYWJsZWQpLiAgSW4gYWRkaXRpb24sIEMgYXNzZXJ0KClzIGFyZSBlbmFibGVkICh2aWEgdGhlIEMgd2F5OgorYnkgbm90IGRlZmluaW5nIE5ERUJVRyksIGFuZCBzb21lIHJvdXRpbmVzIGRvIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBpbnNpZGUKKyIjaWZkZWYgUHlfREVCVUciIGJsb2Nrcy4KKworCitDT1VOVF9BTExPQ1MKKy0tLS0tLS0tLS0tLQogCiBFYWNoIHR5cGUgb2JqZWN0IGdyb3dzIHRocmVlIG5ldyBtZW1iZXJzOgogCkBAIC0xNzgsODQgKzE3NSw4NSBAQAogICAgICAqLwogICAgIGludCB0cF9tYXhhbGxvYzsKIAotQWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUga2VlcHMgdGhlc2UgY291bnRzIHVwIHRvIGRhdGUuCi1QeV9GaW5hbGl6ZSgpIGRpc3BsYXlzIGEgc3VtbWFyeSBvZiB0aGUgaW5mbyByZXR1cm5lZCBieSBzeXMuZ2V0Y291bnRzKCkKLShzZWUgYmVsb3cpLCBhbG9uZyB3aXRoIGFzc29ydGVkIG90aGVyIHNwZWNpYWwgYWxsb2NhdGlvbiBjb3VudHMgKGxpa2UKLXRoZSBudW1iZXIgb2YgdHVwbGUgYWxsb2NhdGlvbnMgc2F0aXNmaWVkIGJ5IGEgdHVwbGUgZnJlZS1saXN0LCB0aGUgbnVtYmVyCi1vZiAxLWNoYXJhY3RlciBzdHJpbmdzIGFsbG9jYXRlZCwgZXRjKS4KK0FsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBjb2RlIGtlZXBzIHRoZXNlIGNvdW50cyB1cCB0byBkYXRlLiAgUHlfRmluYWxpemUoKQorZGlzcGxheXMgYSBzdW1tYXJ5IG9mIHRoZSBpbmZvIHJldHVybmVkIGJ5IHN5cy5nZXRjb3VudHMoKSAoc2VlIGJlbG93KSwgYWxvbmcKK3dpdGggYXNzb3J0ZWQgb3RoZXIgc3BlY2lhbCBhbGxvY2F0aW9uIGNvdW50cyAobGlrZSB0aGUgbnVtYmVyIG9mIHR1cGxlCithbGxvY2F0aW9ucyBzYXRpc2ZpZWQgYnkgYSB0dXBsZSBmcmVlLWxpc3QsIHRoZSBudW1iZXIgb2YgMS1jaGFyYWN0ZXIgc3RyaW5ncworYWxsb2NhdGVkLCBldGMpLgogCiBCZWZvcmUgUHl0aG9uIDIuMiwgdHlwZSBvYmplY3RzIHdlcmUgaW1tb3J0YWwsIGFuZCB0aGUgQ09VTlRfQUxMT0NTCi1pbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhhdC4gIEFzIG9mIFB5dGhvbiAyLjIsIGhlYXAtYWxsb2NhdGVkIHR5cGUvCi1jbGFzcyBvYmplY3RzIGNhbiBnbyBhd2F5LiAgQ09VTlRfQUxMT0NTIGNhbiBibG93IHVwIGluIDIuMiBhbmQgMi4yLjEKLWJlY2F1c2Ugb2YgdGhpczsgdGhpcyB3YXMgZml4ZWQgaW4gMi4yLjIuICBVc2Ugb2YgQ09VTlRfQUxMT0NTIG1ha2VzCi1hbGwgaGVhcC1hbGxvY2F0ZWQgdHlwZSBvYmplY3RzIGltbW9ydGFsLCBleGNlcHQgZm9yIHRob3NlIGZvciB3aGljaCBubwotb2JqZWN0IG9mIHRoYXQgdHlwZSBpcyBldmVyIGFsbG9jYXRlZC4KK2ltcGxlbWVudGF0aW9uIHJlbGllcyBvbiB0aGF0LiAgQXMgb2YgUHl0aG9uIDIuMiwgaGVhcC1hbGxvY2F0ZWQgdHlwZS8gY2xhc3MKK29iamVjdHMgY2FuIGdvIGF3YXkuICBDT1VOVF9BTExPQ1MgY2FuIGJsb3cgdXAgaW4gMi4yIGFuZCAyLjIuMSBiZWNhdXNlIG9mIHRoaXM7Cit0aGlzIHdhcyBmaXhlZCBpbiAyLjIuMi4gIFVzZSBvZiBDT1VOVF9BTExPQ1MgbWFrZXMgYWxsIGhlYXAtYWxsb2NhdGVkIHR5cGUKK29iamVjdHMgaW1tb3J0YWwsIGV4Y2VwdCBmb3IgdGhvc2UgZm9yIHdoaWNoIG5vIG9iamVjdCBvZiB0aGF0IHR5cGUgaXMgZXZlcgorYWxsb2NhdGVkLgogCiBTdGFydGluZyB3aXRoIFB5dGhvbiAyLjMsIElmIFB5X1RSQUNFX1JFRlMgaXMgYWxzbyBkZWZpbmVkLCBDT1VOVF9BTExPQ1MKLWFycmFuZ2VzIHRvIGVuc3VyZSB0aGF0IHRoZSB0eXBlIG9iamVjdCBmb3IgZWFjaCBhbGxvY2F0ZWQgb2JqZWN0Ci1hcHBlYXJzIGluIHRoZSBkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIG9iamVjdHMgbWFpbnRhaW5lZCBieQotUHlfVFJBQ0VfUkVGUy4KK2FycmFuZ2VzIHRvIGVuc3VyZSB0aGF0IHRoZSB0eXBlIG9iamVjdCBmb3IgZWFjaCBhbGxvY2F0ZWQgb2JqZWN0IGFwcGVhcnMgaW4gdGhlCitkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIG9iamVjdHMgbWFpbnRhaW5lZCBieSBQeV9UUkFDRV9SRUZTLgogCiBTcGVjaWFsIGdpbW1pY2tzOgogCiBzeXMuZ2V0Y291bnRzKCkKLSAgICBSZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBvbmUgZW50cnkgZm9yIGVhY2ggdHlwZSBvYmplY3QgZm9yIHdoaWNoCi0gICAgYXQgbGVhc3Qgb25lIG9iamVjdCBvZiB0aGF0IHR5cGUgd2FzIGFsbG9jYXRlZC4gIEVhY2ggdHVwbGUgaXMgb2YKLSAgICB0aGUgZm9ybToKKyAgICBSZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBvbmUgZW50cnkgZm9yIGVhY2ggdHlwZSBvYmplY3QgZm9yIHdoaWNoIGF0IGxlYXN0CisgICAgb25lIG9iamVjdCBvZiB0aGF0IHR5cGUgd2FzIGFsbG9jYXRlZC4gIEVhY2ggdHVwbGUgaXMgb2YgdGhlIGZvcm06CiAKICAgICAgICAgKHRwX25hbWUsIHRwX2FsbG9jcywgdHBfZnJlZXMsIHRwX21heGFsbG9jKQogCi0gICAgRWFjaCBkaXN0aW5jdCB0eXBlIG9iamVjdCBnZXRzIGEgZGlzdGluY3QgZW50cnkgaW4gdGhpcyBsaXN0LCBldmVuCi0gICAgaWYgdHdvIG9yIG1vcmUgdHlwZSBvYmplY3RzIGhhdmUgdGhlIHNhbWUgdHBfbmFtZSAoaW4gd2hpY2ggY2FzZQotICAgIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoIHRoZW0gYnkgbG9va2luZyBhdCB0aGlzIGxpc3QpLiAgVGhlCi0gICAgbGlzdCBpcyBvcmRlcmVkIGJ5IHRpbWUgb2YgZmlyc3Qgb2JqZWN0IGFsbG9jYXRpb246ICB0aGUgdHlwZSBvYmplY3QKLSAgICBmb3Igd2hpY2ggdGhlIGZpcnN0IGFsbG9jYXRpb24gb2YgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZSBvY2N1cnJlZAotICAgIG1vc3QgcmVjZW50bHkgaXMgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0LgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1MTFRSQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZCB3ZWxsIGJlZm9yZSAxLjAKKyAgICBFYWNoIGRpc3RpbmN0IHR5cGUgb2JqZWN0IGdldHMgYSBkaXN0aW5jdCBlbnRyeSBpbiB0aGlzIGxpc3QsIGV2ZW4gaWYgdHdvIG9yCisgICAgbW9yZSB0eXBlIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSB0cF9uYW1lIChpbiB3aGljaCBjYXNlIHRoZXJlJ3Mgbm8gd2F5IHRvCisgICAgZGlzdGluZ3Vpc2ggdGhlbSBieSBsb29raW5nIGF0IHRoaXMgbGlzdCkuICBUaGUgbGlzdCBpcyBvcmRlcmVkIGJ5IHRpbWUgb2YKKyAgICBmaXJzdCBvYmplY3QgYWxsb2NhdGlvbjogdGhlIHR5cGUgb2JqZWN0IGZvciB3aGljaCB0aGUgZmlyc3QgYWxsb2NhdGlvbiBvZgorICAgIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUgb2NjdXJyZWQgbW9zdCByZWNlbnRseSBpcyBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuCisKKworTExUUkFDRQorLS0tLS0tLQogCiBDb21waWxlIGluIHN1cHBvcnQgZm9yIExvdyBMZXZlbCBUUkFDRS1pbmcgb2YgdGhlIG1haW4gaW50ZXJwcmV0ZXIgbG9vcC4KIAotV2hlbiB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVmaW5lZCwgYmVmb3JlIFB5RXZhbF9FdmFsRnJhbWUKLShldmFsX2ZyYW1lIGluIDIuMyBhbmQgMi4yLCBldmFsX2NvZGUyIGJlZm9yZSB0aGF0KSBleGVjdXRlcyBhIGZyYW1lJ3MgY29kZQotaXQgY2hlY2tzIHRoZSBmcmFtZSdzIGdsb2JhbCBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgIl9fbGx0cmFjZV9fIi4gIElmCi1zdWNoIGEgdmFyaWFibGUgaXMgZm91bmQsIG1vdW5kcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBpbnRlcnByZXRlcgotaXMgZG9pbmcgYXJlIHNwcmF5ZWQgdG8gc3Rkb3V0LCBzdWNoIGFzIGV2ZXJ5IG9wY29kZSBhbmQgb3Bjb2RlIGFyZ3VtZW50Ci1hbmQgdmFsdWVzIHB1c2hlZCBvbnRvIGFuZCBwb3BwZWQgb2ZmIHRoZSB2YWx1ZSBzdGFjay4KK1doZW4gdGhpcyBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIGRlZmluZWQsIGJlZm9yZSBQeUV2YWxfRXZhbEZyYW1lIChldmFsX2ZyYW1lIGluCisyLjMgYW5kIDIuMiwgZXZhbF9jb2RlMiBiZWZvcmUgdGhhdCkgZXhlY3V0ZXMgYSBmcmFtZSdzIGNvZGUgaXQgY2hlY2tzIHRoZQorZnJhbWUncyBnbG9iYWwgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlICJfX2xsdHJhY2VfXyIuICBJZiBzdWNoIGEgdmFyaWFibGUgaXMKK2ZvdW5kLCBtb3VuZHMgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgZG9pbmcgYXJlIHNwcmF5ZWQgdG8KK3N0ZG91dCwgc3VjaCBhcyBldmVyeSBvcGNvZGUgYW5kIG9wY29kZSBhcmd1bWVudCBhbmQgdmFsdWVzIHB1c2hlZCBvbnRvIGFuZAorcG9wcGVkIG9mZiB0aGUgdmFsdWUgc3RhY2suCiAKIE5vdCB1c2VmdWwgdmVyeSBvZnRlbiwgYnV0IHZlcnkgdXNlZnVsIHdoZW4gbmVlZGVkLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNBTExfUFJPRklMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlZCBmb3IgUHl0aG9uIDIuMworCitDQUxMX1BST0ZJTEUKKy0tLS0tLS0tLS0tLQogCiBDb3VudCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIGV4ZWN1dGVkLgogCi1XaGVuIHRoaXMgc3ltYm9sIGlzIGRlZmluZWQsIHRoZSBjZXZhbCBtYWlubG9vcCBhbmQgaGVscGVyIGZ1bmN0aW9ucwotY291bnQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyBtYWRlLiAgSXQga2VlcHMgZGV0YWlsZWQgc3RhdGlzdGljcwotYWJvdXQgd2hhdCBraW5kIG9mIG9iamVjdCB3YXMgY2FsbGVkIGFuZCB3aGV0aGVyIHRoZSBjYWxsIGhpdCBhbnkgb2YKLXRoZSBzcGVjaWFsIGZhc3QgcGF0aHMgaW4gdGhlIGNvZGUuCitXaGVuIHRoaXMgc3ltYm9sIGlzIGRlZmluZWQsIHRoZSBjZXZhbCBtYWlubG9vcCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBjb3VudCB0aGUKK251bWJlciBvZiBmdW5jdGlvbiBjYWxscyBtYWRlLiAgSXQga2VlcHMgZGV0YWlsZWQgc3RhdGlzdGljcyBhYm91dCB3aGF0IGtpbmQgb2YKK29iamVjdCB3YXMgY2FsbGVkIGFuZCB3aGV0aGVyIHRoZSBjYWxsIGhpdCBhbnkgb2YgdGhlIHNwZWNpYWwgZmFzdCBwYXRocyBpbiB0aGUKK2NvZGUuCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV0lUSF9UU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2VkIGZvciBQeXRob24gMi40CiAKLVN1cGVyLWxvd2xldmVsIHByb2ZpbGluZyBvZiB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIGVuYWJsZWQsIHRoZSBzeXMKLW1vZHVsZSBncm93cyBhIG5ldyBmdW5jdGlvbjoKK1dJVEhfVFNDCistLS0tLS0tLQorCitTdXBlci1sb3dsZXZlbCBwcm9maWxpbmcgb2YgdGhlIGludGVycHJldGVyLiAgV2hlbiBlbmFibGVkLCB0aGUgc3lzIG1vZHVsZSBncm93cworYSBuZXcgZnVuY3Rpb246CiAKIHNldHRzY2R1bXAoYm9vbCkKLSAgICBJZiB0cnVlLCB0ZWxsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gZHVtcCBWTSBtZWFzdXJlbWVudHMgdG8KLSAgICBzdGRlcnIuICBJZiBmYWxzZSwgdHVybiBvZmYgZHVtcC4gIFRoZSBtZWFzdXJlbWVudHMgYXJlIGJhc2VkIG9uIHRoZQotICAgIHByb2Nlc3NvcidzIHRpbWUtc3RhbXAgY291bnRlci4KKyAgICBJZiB0cnVlLCB0ZWxsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gZHVtcCBWTSBtZWFzdXJlbWVudHMgdG8gc3RkZXJyLiAgSWYKKyAgICBmYWxzZSwgdHVybiBvZmYgZHVtcC4gIFRoZSBtZWFzdXJlbWVudHMgYXJlIGJhc2VkIG9uIHRoZSBwcm9jZXNzb3IncworICAgIHRpbWUtc3RhbXAgY291bnRlci4KIAotVGhpcyBidWlsZCBvcHRpb24gcmVxdWlyZXMgYSBzbWFsbCBhbW91bnQgb2YgcGxhdGZvcm0gc3BlY2lmaWMgY29kZS4KLUN1cnJlbnRseSB0aGlzIGNvZGUgaXMgcHJlc2VudCBmb3IgbGludXgveDg2IGFuZCBhbnkgUG93ZXJQQyBwbGF0Zm9ybQotdGhhdCB1c2VzIEdDQyAoaS5lLiBPUyBYIGFuZCBsaW51eC9wcGMpLgorVGhpcyBidWlsZCBvcHRpb24gcmVxdWlyZXMgYSBzbWFsbCBhbW91bnQgb2YgcGxhdGZvcm0gc3BlY2lmaWMgY29kZS4gIEN1cnJlbnRseQordGhpcyBjb2RlIGlzIHByZXNlbnQgZm9yIGxpbnV4L3g4NiBhbmQgYW55IFBvd2VyUEMgcGxhdGZvcm0gdGhhdCB1c2VzIEdDQworKGkuZS4gT1MgWCBhbmQgbGludXgvcHBjKS4KIAotT24gdGhlIFBvd2VyUEMgdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHRpbWUgYmFzZSByZWdpc3RlciBpcyBpbmNyZW1lbnRlZAotaXMgbm90IGRlZmluZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9uLCBzbyB5b3UnbGwgbmVlZCB0bwotZmluZCB0aGUgbWFudWFsIGZvciB5b3VyIHNwZWNpZmljIHByb2Nlc3Nvci4gIEZvciB0aGUgNzUwQ1gsIDc1MENYZQotYW5kIDc1MEZYIChhbGwgc29sZCBhcyB0aGUgRzMpIHdlIGZpbmQ6CitPbiB0aGUgUG93ZXJQQyB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdGltZSBiYXNlIHJlZ2lzdGVyIGlzIGluY3JlbWVudGVkIGlzIG5vdAorZGVmaW5lZCBieSB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24sIHNvIHlvdSdsbCBuZWVkIHRvIGZpbmQgdGhlIG1hbnVhbCBmb3IKK3lvdXIgc3BlY2lmaWMgcHJvY2Vzc29yLiAgRm9yIHRoZSA3NTBDWCwgNzUwQ1hlIGFuZCA3NTBGWCAoYWxsIHNvbGQgYXMgdGhlIEczKQord2UgZmluZDoKIAotICAgIFRoZSB0aW1lIGJhc2UgY291bnRlciBpcyBjbG9ja2VkIGF0IGEgZnJlcXVlbmN5IHRoYXQgaXMKLSAgICBvbmUtZm91cnRoIHRoYXQgb2YgdGhlIGJ1cyBjbG9jay4KKyAgICBUaGUgdGltZSBiYXNlIGNvdW50ZXIgaXMgY2xvY2tlZCBhdCBhIGZyZXF1ZW5jeSB0aGF0IGlzIG9uZS1mb3VydGggdGhhdCBvZgorICAgIHRoZSBidXMgY2xvY2suCiAKIFRoaXMgYnVpbGQgaXMgZW5hYmxlZCBieSB0aGUgLS13aXRoLXRzYyBmbGFnIHRvIGNvbmZpZ3VyZS4KZGlmZiAtLWdpdCBhL01pc2MvVmltL3B5dGhvbi52aW0gYi9NaXNjL1ZpbS9weXRob24udmltCmluZGV4IDJmODIyODUuLmRmM2Y4ZGIgMTAwNjQ0Ci0tLSBhL01pc2MvVmltL3B5dGhvbi52aW0KKysrIGIvTWlzYy9WaW0vcHl0aG9uLnZpbQpAQCAtMSw0ICsxLDQgQEAKLSIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKHRydW5rOiByNjAzNzZNKS4KKyIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKHRydW5rOiByODA0OTApLgogIgogIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0KIApAQCAtNjMsMzEgKzYzLDMyIEBACiAKIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpCiAgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgRWxsaXBzaXMgRmFsc2UgTm9uZSBOb3RJbXBsZW1lbnRlZCBUcnVlIF9fZGVidWdfXwotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIF9faW1wb3J0X18gYWJzIGFsbCBhbnkgYXBwbHkgYmFzZXN0cmluZyBib29sCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgYnVmZmVyIGJ5dGVzIGNhbGxhYmxlIGNociBjbGFzc21ldGhvZCBjbXAgY29lcmNlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgY29tcGlsZSBjb21wbGV4IGNvcHlyaWdodCBjcmVkaXRzIGRlbGF0dHIgZGljdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGRpciBkaXZtb2QgZW51bWVyYXRlIGV2YWwgZXhlY2ZpbGUgZXhpdCBmaWxlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZmlsdGVyIGZsb2F0IGZyb3plbnNldCBnZXRhdHRyIGdsb2JhbHMgaGFzYXR0cgotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGhhc2ggaGVscCBoZXggaWQgaW5wdXQgaW50IGludGVybiBpc2luc3RhbmNlCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaXNzdWJjbGFzcyBpdGVyIGxlbiBsaWNlbnNlIGxpc3QgbG9jYWxzIGxvbmcgbWFwCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgbWF4IG1pbiBvYmplY3Qgb2N0IG9wZW4gb3JkIHBvdyBwcm9wZXJ0eSBxdWl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgcmFuZ2UgcmF3X2lucHV0IHJlZHVjZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHN1cGVyIHRydW5jIHR1cGxlIHR5cGUgdW5pY2hyIHVuaWNvZGUgdmFycyB4cmFuZ2UKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICB6aXAKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBfX2ltcG9ydF9fIGFicyBhbGwgYW55IGFwcGx5IGJhc2VzdHJpbmcgYmluIGJvb2wKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBidWZmZXIgYnl0ZWFycmF5IGJ5dGVzIGNhbGxhYmxlIGNociBjbGFzc21ldGhvZAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGNtcCBjb2VyY2UgY29tcGlsZSBjb21wbGV4IGNvcHlyaWdodCBjcmVkaXRzCisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGVsYXR0ciBkaWN0IGRpciBkaXZtb2QgZW51bWVyYXRlIGV2YWwgZXhlY2ZpbGUKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBleGl0IGZpbGUgZmlsdGVyIGZsb2F0IGZvcm1hdCBmcm96ZW5zZXQgZ2V0YXR0cgorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGdsb2JhbHMgaGFzYXR0ciBoYXNoIGhlbHAgaGV4IGlkIGlucHV0IGludCBpbnRlcm4KKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBpc2luc3RhbmNlIGlzc3ViY2xhc3MgaXRlciBsZW4gbGljZW5zZSBsaXN0CisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgbG9jYWxzIGxvbmcgbWFwIG1heCBtZW1vcnl2aWV3IG1pbiBuZXh0IG9iamVjdAorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIG9jdCBvcGVuIG9yZCBwb3cgcHJpbnQgcHJvcGVydHkgcXVpdCByYW5nZQorICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHJhd19pbnB1dCByZWR1Y2UgcmVsb2FkIHJlcHIgcmV2ZXJzZWQgcm91bmQgc2V0CisgIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgc2V0YXR0ciBzbGljZSBzb3J0ZWQgc3RhdGljbWV0aG9kIHN0ciBzdW0gc3VwZXIKKyAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICB0dXBsZSB0eXBlIHVuaWNociB1bmljb2RlIHZhcnMgeHJhbmdlIHppcAogCiBlbmRpZgogCiAKIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKICAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEFyaXRobWV0aWNFcnJvciBBc3NlcnRpb25FcnJvciBBdHRyaWJ1dGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQmFzZUV4Y2VwdGlvbiBEZXByZWNhdGlvbldhcm5pbmcgRU9GRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEVudmlyb25tZW50RXJyb3IgRXhjZXB0aW9uIEZsb2F0aW5nUG9pbnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRnV0dXJlV2FybmluZyBHZW5lcmF0b3JFeGl0IElPRXJyb3IgSW1wb3J0RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEltcG9ydFdhcm5pbmcgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBLZXlFcnJvciBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTWVtb3J5RXJyb3IgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE9TRXJyb3IgT3ZlcmZsb3dFcnJvciBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCisgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBCYXNlRXhjZXB0aW9uIEJ1ZmZlckVycm9yIEJ5dGVzV2FybmluZworICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRGVwcmVjYXRpb25XYXJuaW5nIEVPRkVycm9yIEVudmlyb25tZW50RXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEV4Y2VwdGlvbiBGbG9hdGluZ1BvaW50RXJyb3IgRnV0dXJlV2FybmluZworICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgR2VuZXJhdG9yRXhpdCBJT0Vycm9yIEltcG9ydEVycm9yIEltcG9ydFdhcm5pbmcKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEluZGVudGF0aW9uRXJyb3IgSW5kZXhFcnJvciBLZXlFcnJvcgorICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgS2V5Ym9hcmRJbnRlcnJ1cHQgTG9va3VwRXJyb3IgTWVtb3J5RXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE5hbWVFcnJvciBOb3RJbXBsZW1lbnRlZEVycm9yIE9TRXJyb3IKKyAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE92ZXJmbG93RXJyb3IgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZwogICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgUmVmZXJlbmNlRXJyb3IgUnVudGltZUVycm9yIFJ1bnRpbWVXYXJuaW5nCiAgIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTdGFuZGFyZEVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IKICAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN5bnRheFdhcm5pbmcgU3lzdGVtRXJyb3IgU3lzdGVtRXhpdCBUYWJFcnJvcgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vdmltcmMgYi9NaXNjL1ZpbS92aW1yYwppbmRleCBhZTE0ZTZhLi5mYzAwYjllIDEwMDY0NAotLS0gYS9NaXNjL1ZpbS92aW1yYworKysgYi9NaXNjL1ZpbS92aW1yYwpAQCAtMTUsMzEgKzE1LDI5IEBACiAiIE9ubHkgYmFzaWMgc2V0dGluZ3MgbmVlZGVkIHRvIGVuZm9yY2UgdGhlIHN0eWxlIGd1aWRlbGluZXMgYXJlIHNldC4KICIgU29tZSBzdWdnZXN0ZWQgb3B0aW9ucyBhcmUgbGlzdGVkIGJ1dCBjb21tZW50ZWQgb3V0IGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgogCi0KLSIgTnVtYmVyIG9mIHNwYWNlcyB0byB1c2UgZm9yIGFuIGluZGVudC4KLSIgVGhpcyB3aWxsIGFmZmVjdCBDdHJsLVQgYW5kICdhdXRvaW5kZW50Jy4KLSIgUHl0aG9uOiA0IHNwYWNlcwotIiBDOiA4IHNwYWNlcyAocHJlLWV4aXN0aW5nIGZpbGVzKSBvciA0IHNwYWNlcyAobmV3IGZpbGVzKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00Ci1hdSBCdWZSZWFkICouYywqLmggc2V0IHNoaWZ0d2lkdGg9OAotYXUgQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBzaGlmdHdpZHRoPTQKLQogIiBOdW1iZXIgb2Ygc3BhY2VzIHRoYXQgYSBwcmUtZXhpc3RpbmcgdGFiIGlzIGVxdWFsIHRvLgogIiBGb3IgdGhlIGFtb3VudCBvZiBzcGFjZSB1c2VkIGZvciBhIG5ldyB0YWIgdXNlIHNoaWZ0d2lkdGguCi0iIFB5dGhvbjogOAotIiBDOiA4CiBhdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKnB5LCpweXcsKi5jLCouaCBzZXQgdGFic3RvcD04CiAKLSIgUmVwbGFjZSB0YWJzIHdpdGggdGhlIGVxdWl2YWxlbnQgbnVtYmVyIG9mIHNwYWNlcy4KLSIgQWxzbyBoYXZlIGFuIGF1dG9jbWQgZm9yIE1ha2VmaWxlcyBzaW5jZSB0aGV5IHJlcXVpcmUgaGFyZCB0YWJzLgotIiBQeXRob246IHllcwotIiBDOiBubwotIiBNYWtlZmlsZTogbm8KKyIgV2hhdCB0byB1c2UgZm9yIGFuIGluZGVudC4KKyIgVGhpcyB3aWxsIGFmZmVjdCBDdHJsLVQgYW5kICdhdXRvaW5kZW50Jy4KKyIgUHl0aG9uOiA0IHNwYWNlcworIiBDOiB0YWJzIChwcmUtZXhpc3RpbmcgZmlsZXMpIG9yIDQgc3BhY2VzIChuZXcgZmlsZXMpCithdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqcHl3IHNldCBzaGlmdHdpZHRoPTQKIGF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3IHNldCBleHBhbmR0YWIKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBub2V4cGFuZHRhYgorZnUgU2VsZWN0X2Nfc3R5bGUoKQorICAgIGlmIHNlYXJjaCgnXlx0JywgJ24nLCAxNTApCisgICAgICAgIHNldCBzaGlmdHdpZHRoPTgKKyAgICAgICAgc2V0IG5vZXhwYW5kdGFiCisgICAgZWwgCisgICAgICAgIHNldCBzaGlmdHdpZHRoPTQKKyAgICAgICAgc2V0IGV4cGFuZHRhYgorICAgIGVuCitlbmRmCithdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBjYWxsIFNlbGVjdF9jX3N0eWxlKCkKIGF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSBNYWtlZmlsZSogc2V0IG5vZXhwYW5kdGFiCiAKLSIgVXNlIHRoZSBiZWxvdyBoaWdobGlnaHQgZ3JvdXAgd2hlbiBkaXNwbGF5aW5nIGJhZCB3aGl0ZXNwYWNlIGlzIGRlc2lyZWQKKyIgVXNlIHRoZSBiZWxvdyBoaWdobGlnaHQgZ3JvdXAgd2hlbiBkaXNwbGF5aW5nIGJhZCB3aGl0ZXNwYWNlIGlzIGRlc2lyZWQuCiBoaWdobGlnaHQgQmFkV2hpdGVzcGFjZSBjdGVybWJnPXJlZCBndWliZz1yZWQKIAogIiBEaXNwbGF5IHRhYnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gUHl0aG9uIG1vZGUgYXMgYmFkLgpkaWZmIC0tZ2l0IGEvTWlzYy9idWlsZC5zaCBiL01pc2MvYnVpbGQuc2gKaW5kZXggNWQwOTZlZS4uMmY3YmZmMSAxMDA3NTUKLS0tIGEvTWlzYy9idWlsZC5zaAorKysgYi9NaXNjL2J1aWxkLnNoCkBAIC01MiwxNyArNTIsMTYgQEAKICNGQUlMVVJFX0NDPSJvcHRpb25hbC0tdW5jb21tZW50IGFuZCBzZXQgdG8gZGVzaXJlZCBhZGRyZXNzIgogCiBSRU1PVEVfU1lTVEVNPSJuZWFsQGRpbnNkYWxlLnB5dGhvbi5vcmciCi1SRU1PVEVfRElSPSIvZGF0YS9mdHAucHl0aG9uLm9yZy9wdWIvd3d3LnB5dGhvbi5vcmcvZG9jL2N1cnJlbnQiCi1SRU1PVEVfRElSX0RJU1Q9Ii9kYXRhL2Z0cC5weXRob24ub3JnL3B1Yi9weXRob24vZG9jL2N1cnJlbnQiCitSRU1PVEVfRElSPSIvZGF0YS9mdHAucHl0aG9uLm9yZy9wdWIvZG9jcy5weXRob24ub3JnL2Rldi8iCiBSRVNVTFRfRklMRT0iJERJUi9idWlsZC9pbmRleC5odG1sIgotSU5TVEFMTF9ESVI9Ii90bXAvcHl0aG9uLXRlc3QtMi42L2xvY2FsIgorSU5TVEFMTF9ESVI9Ii90bXAvcHl0aG9uLXRlc3QvbG9jYWwiCiBSU1lOQ19PUFRTPSItQyAtZSBzc2ggLXJsb2dEIgogCiAjIEFsd2F5cyBydW4gdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFB5dGhvbi4KIFBZVEhPTj0kSU5TVEFMTF9ESVIvYmluL3B5dGhvbgogCiAjIFB5dGhvbiBvcHRpb25zIGFuZCByZWdyZXNzaW9uIHRlc3QgcHJvZ3JhbSB0aGF0IHNob3VsZCBhbHdheXMgYmUgcnVuLgotUkVHUlRFU1RfQVJHUz0iLUUgLXR0ICRJTlNUQUxMX0RJUi9saWIvcHl0aG9uMi42L3Rlc3QvcmVncnRlc3QucHkiCitSRUdSVEVTVF9BUkdTPSItRSAtdHQgJElOU1RBTExfRElSL2xpYi9weXRob24yLjcvdGVzdC9yZWdydGVzdC5weSIKIAogUkVGTE9HPSJidWlsZC9yZWZsb2cudHh0Lm91dCIKICMgVGhlc2UgdGVzdHMgYXJlIG5vdCBzdGFibGUgYW5kIGZhbHNlbHkgcmVwb3J0IGxlYWtzIHNvbWV0aW1lcy4KQEAgLTcwLDcgKzY5LDcgQEAKICMgTm90ZTogdGVzdF9YWFggKG5vbmUgY3VycmVudGx5KSByZWFsbHkgbGVhaywgYnV0IGFyZSBkaXNhYmxlZAogIyBzbyB3ZSBkb24ndCBzZW5kIHNwYW0uICBBbnkgdGVzdCB3aGljaCByZWFsbHkgbGVha3Mgc2hvdWxkIG9ubHkgCiAjIGJlIGxpc3RlZCBoZXJlIGlmIHRoZXJlIGFyZSBhbHNvIHRlc3QgY2FzZXMgdW5kZXIgTGliL3Rlc3QvbGVha2Vycy4KLUxFQUtZX1RFU1RTPSJ0ZXN0Xyhhc3luY2hhdHxjbWRfbGluZXxkb2N4bWxycGN8ZHVtYmRibXxmaWxlfGZ0cGxpYnxodHRwc2VydmVyc3xpbWFwbGlifHBvcGVuMnxzb2NrZXR8c210cGxpYnxzeXN8dGVsbmV0bGlifHRocmVhZGVkdGVtcGZpbGV8dGhyZWFkaW5nfHRocmVhZHNpZ25hbHN8dXJsbGliMl9sb2NhbG5ldHx4bWxycGMpIgorTEVBS1lfVEVTVFM9InRlc3RfKGFzeW5jaGF0fGNtZF9saW5lfGRvY3htbHJwY3xkdW1iZGJtfGZpbGV8ZnRwbGlifGh0dHBzZXJ2ZXJzfGltYXBsaWJ8cG9wZW4yfHNvY2tldHxzbXRwbGlifHN5c3x0ZWxuZXRsaWJ8dGhyZWFkZWR0ZW1wZmlsZXx0aHJlYWRpbmd8dGhyZWFkc2lnbmFsc3x4bWxycGMpIgogCiAjIFNraXAgdGhlc2UgdGVzdHMgYWx0b2dldGhlciB3aGVuIGxvb2tpbmcgZm9yIGxlYWtzLiAgVGhlc2UgdGVzdHMKICMgZG8gbm90IG5lZWQgdG8gYmUgc3RvcmVkIGFib3ZlIGluIExFQUtZX1RFU1RTIHRvby4KQEAgLTgxLDcgKzgwLDcgQEAKIExFQUtZX1NLSVBTPSIteCB0ZXN0X2NvbXBpbGVyIHRlc3RfbG9nZ2luZyB0ZXN0X2h0dHBzZXJ2ZXJzIgogCiAjIENoYW5nZSB0aGlzIGZsYWcgdG8gInllcyIgZm9yIG9sZCByZWxlYXNlcyB0byBvbmx5IHVwZGF0ZS9idWlsZCB0aGUgZG9jcy4KLUJVSUxEX0RJU0FCTEVEPSJ5ZXMiCitCVUlMRF9ESVNBQkxFRD0ibm8iCiAKICMjIHV0aWxpdHkgZnVuY3Rpb25zCiBjdXJyZW50X3RpbWUoKSB7CkBAIC0yMTMsNyArMjEyLDcgQEAKICAgICAgICAgICAgICMjIG1ha2UgYW5kIHJ1biBiYXNpYyB0ZXN0cwogICAgICAgICAgICAgRj1tYWtlLXRlc3Qub3V0CiAgICAgICAgICAgICBzdGFydD1gY3VycmVudF90aW1lYAotICAgICAgICAgICAgJFBZVEhPTiAkUkVHUlRFU1RfQVJHUyAtdSB1cmxmZXRjaCA+JiBidWlsZC8kRgorICAgICAgICAgICAgJFBZVEhPTiAkUkVHUlRFU1RfQVJHUyAtVyAtdSB1cmxmZXRjaCA+JiBidWlsZC8kRgogICAgICAgICAgICAgTlVNX0ZBSUxVUkVTPWBjb3VudF9mYWlsdXJlcyBidWlsZC8kRmAKICAgICAgICAgICAgIHBsYWNlX3N1bW1hcnlfZmlyc3QgYnVpbGQvJEYKICAgICAgICAgICAgIHVwZGF0ZV9zdGF0dXMgIlRlc3RpbmcgYmFzaWNzICgkTlVNX0ZBSUxVUkVTIGZhaWx1cmVzKSIgIiRGIiAkc3RhcnQKQEAgLTIyMSw3ICsyMjAsNyBAQAogCiAgICAgICAgICAgICBGPW1ha2UtdGVzdC1vcHQub3V0CiAgICAgICAgICAgICBzdGFydD1gY3VycmVudF90aW1lYAotICAgICAgICAgICAgJFBZVEhPTiAtTyAkUkVHUlRFU1RfQVJHUyAtdSB1cmxmZXRjaCA+JiBidWlsZC8kRgorICAgICAgICAgICAgJFBZVEhPTiAtTyAkUkVHUlRFU1RfQVJHUyAtVyAtdSB1cmxmZXRjaCA+JiBidWlsZC8kRgogICAgICAgICAgICAgTlVNX0ZBSUxVUkVTPWBjb3VudF9mYWlsdXJlcyBidWlsZC8kRmAKICAgICAgICAgICAgIHBsYWNlX3N1bW1hcnlfZmlyc3QgYnVpbGQvJEYKICAgICAgICAgICAgIHVwZGF0ZV9zdGF0dXMgIlRlc3Rpbmcgb3B0ICgkTlVNX0ZBSUxVUkVTIGZhaWx1cmVzKSIgIiRGIiAkc3RhcnQKQEAgLTI0NCw3ICsyNDMsNyBAQAogICAgICAgICAgICAgc3RhcnQ9YGN1cnJlbnRfdGltZWAKICAgICAgICAgICAgICMjIHNraXAgY3Vyc2VzIHdoZW4gcnVubmluZyBmcm9tIGNyb24gc2luY2UgdGhlcmUncyBubyB0ZXJtaW5hbAogICAgICAgICAgICAgIyMgc2tpcCBzb3VuZCBzaW5jZSBpdCdzIG5vdCBzZXR1cCBvbiB0aGUgUFNGIGJveCAoL2Rldi9kc3ApCi0gICAgICAgICAgICAkUFlUSE9OICRSRUdSVEVTVF9BUkdTIC11YWxsIC14IHRlc3RfY3Vyc2VzIHRlc3RfbGludXhhdWRpb2RldiB0ZXN0X29zc2F1ZGlvZGV2ID4mIGJ1aWxkLyRGCisgICAgICAgICAgICAkUFlUSE9OICRSRUdSVEVTVF9BUkdTIC1XIC11YWxsIC14IHRlc3RfY3Vyc2VzIHRlc3RfbGludXhhdWRpb2RldiB0ZXN0X29zc2F1ZGlvZGV2ID4mIGJ1aWxkLyRGCiAgICAgICAgICAgICBOVU1fRkFJTFVSRVM9YGNvdW50X2ZhaWx1cmVzIGJ1aWxkLyRGYAogICAgICAgICAgICAgcGxhY2Vfc3VtbWFyeV9maXJzdCBidWlsZC8kRgogICAgICAgICAgICAgdXBkYXRlX3N0YXR1cyAiVGVzdGluZyBhbGwgZXhjZXB0IGN1cnNlcyBhbmQgc291bmQgKCROVU1fRkFJTFVSRVMgZmFpbHVyZXMpIiAiJEYiICRzdGFydApAQCAtMjY3LDE4ICsyNjYsNiBAQAogICAgIG1haWxfb25fZmFpbHVyZSAiZG9jIiAuLi9idWlsZC8kRgogZmkKIAotRj0ibWFrZS1kb2MtZGlzdC5vdXQiCi1zdGFydD1gY3VycmVudF90aW1lYAotaWYgWyAkY29uZmxpY3RfY291bnQgPT0gMCBdOyB0aGVuCi0gICAgbWFrZSBkaXN0ID4mIC4uL2J1aWxkLyRGCi0gICAgZXJyPSQ/Ci1maQotdXBkYXRlX3N0YXR1cyAiTWFraW5nIGRvd25sb2FkYWJsZSBkb2MiICIkRiIgJHN0YXJ0Ci1pZiBbICRlcnIgIT0gMCBdOyB0aGVuCi0gICAgTlVNX0ZBSUxVUkVTPTEKLSAgICBtYWlsX29uX2ZhaWx1cmUgImRvYyBkaXN0IiAuLi9idWlsZC8kRgotZmkKLQogZWNobyAiPC91bD4iID4+ICRSRVNVTFRfRklMRQogZWNobyAiPC9ib2R5PiIgPj4gJFJFU1VMVF9GSUxFCiBlY2hvICI8L2h0bWw+IiA+PiAkUkVTVUxUX0ZJTEUKQEAgLTI4OCw2ICsyNzUsNSBAQAogI2NoZ3JwIC1SIHdlYm1hc3RlciBidWlsZC9odG1sCiAjY2htb2QgLVIgZyt3IGJ1aWxkL2h0bWwKICNyc3luYyAkUlNZTkNfT1BUUyBidWlsZC9odG1sLyogJFJFTU9URV9TWVNURU06JFJFTU9URV9ESVIKLSNyc3luYyAkUlNZTkNfT1BUUyBkaXN0LyogJFJFTU9URV9TWVNURU06JFJFTU9URV9ESVJfRElTVAogI2NkIC4uL2J1aWxkCiAjcnN5bmMgJFJTWU5DX09QVFMgaW5kZXguaHRtbCAqLm91dCAkUkVNT1RFX1NZU1RFTTokUkVNT1RFX0RJUi9yZXN1bHRzLwpkaWZmIC0tZ2l0IGEvTWlzYy9jaGVhdHNoZWV0IGIvTWlzYy9jaGVhdHNoZWV0CmluZGV4IDk4ZTMzOTkuLmQ4Nzg0MjQgMTAwNjQ0Ci0tLSBhL01pc2MvY2hlYXRzaGVldAorKysgYi9NaXNjL2NoZWF0c2hlZXQKQEAgLTEzOTAsNyArMTM5MCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIG9zIHZhcmlhYmxlcwogICAgICBWYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYW5pbmcKLW5hbWUgICAgICAgICAgICAgICAgbmFtZSBvZiBPL1Mtc3BlY2lmaWMgbW9kdWxlIChlLmcuICJwb3NpeCIsICJtYWMiLCAibnQiKQorbmFtZSAgICAgICAgICAgICAgICBuYW1lIG9mIE8vUy1zcGVjaWZpYyBtb2R1bGUgKGUuZy4gInBvc2l4IiwgIm50IikKIHBhdGggICAgICAgICAgICAgICAgTy9TLXNwZWNpZmljIG1vZHVsZSBmb3IgcGF0aCBtYW5pcHVsYXRpb25zLgogICAgICAgICAgICAgICAgICAgICBPbiBVbml4LCBvcy5wYXRoLnNwbGl0KCkgPD0+IHBvc2l4cGF0aC5zcGxpdCgpCiBjdXJkaXIgICAgICAgICAgICAgIHN0cmluZyB1c2VkIHRvIHJlcHJlc2VudCBjdXJyZW50IGRpcmVjdG9yeSAoJy4nKQpkaWZmIC0tZ2l0IGEvTWlzYy9kZXZlbG9wZXJzLnR4dCBiL01pc2MvZGV2ZWxvcGVycy50eHQKaW5kZXggMGYyZDQxZC4uMGMzNDYxMyAxMDA2NDQKLS0tIGEvTWlzYy9kZXZlbG9wZXJzLnR4dAorKysgYi9NaXNjL2RldmVsb3BlcnMudHh0CkBAIC0xMiwxMSArMTIsNDIgQEAKIHByb2plY3QgYWRtaW4gd2hvIG1hZGUgdGhlIGNoYW5nZSBvciBncmFudGVkIGFjY2Vzcy4gIEZlZWwgZnJlZSB0byByZXZpc2UKIHRoZSBmb3JtYXQgdG8gYWNjb21tb2RhdGUgZG9jdW1lbnRhdGlvbiBuZWVkcyBhcyB0aGV5IGFyaXNlLgogCitOb3RlLCB3aGVuIGdpdmluZyBuZXcgY29tbWl0IHBlcm1pc3Npb25zLCBiZSBzdXJlIHRvIGdldCBhIGNvbnRyaWJ1dG9yCithZ3JlZW1lbnQgZnJvbSB0aGUgY29tbWl0dGVyLiAgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvY29udHJpYi8KK2ZvciBkZXRhaWxzLiAgV2hlbiB0aGUgYWdyZWVtZW50IGlzIHNpZ25lZCwgcGxlYXNlIG5vdGUgaXQgaW4gdGhpcyBsb2cuCiAKK1RoaXMgZmlsZSBpcyBlbmNvZGVkIGluIFVURi04LiAgSWYgdGhlIHVzdWFsIGZvcm0gZm9yIGEgbmFtZSBpcyBub3QgaW4KK2EgTGF0aW4gb3IgZXh0ZW5kZWQgTGF0aW4gYWxwaGFiZXQsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGFuIEFTQ0lJCit0cmFuc2xpdGVyYXRpb24gdG9vLgogCiBQZXJtaXNzaW9ucyBIaXN0b3J5CiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gRGF2aWQgTWFsY29sbSB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBPY3QgMjcgMjAxMCBieSBHRkIsCisgIGF0IHJlY29tbWVuZGF0aW9uIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBSYXltb25kIEhldHRpbmdlci4KKworLSBUYWwgRWluYXQgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gT2N0IDQgMjAxMCBieSBNdkwsCisgIGZvciBpbXByb3ZpbmcgSURMRS4KKworLSDFgXVrYXN6IExhbmdhIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIFNlcCAwOCAyMDEwIGJ5IEdGQiwKKyAgYXQgc3VnZ2VzdGlvbiBvZiBBbnRvaW5lIFBpdHJvdSwgZm9yIGdlbmVyYWwgYnVnIGZpeGluZy4KKworLSBEYW5pZWwgU3R1dHpiYWNoIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEF1ZyAyMiAyMDEwIGJ5IE12TCwKKyAgZm9yIGdlbmVyYWwgYnVnIGZpeGluZy4KKworLSBBc2sgU29sZW0gd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDE3IDIwMTAgYnkgTXZMLAorICBvbiByZWNvbW1lbmRhdGlvbiBieSBKZXNzZSBOb2xsZXIsIGZvciB3b3JrIG9uIHRoZSBtdWx0aXByb2Nlc3NpbmcKKyAgbGlicmFyeS4KKworLSBHZW9yZ2UgQm91dHNpb3VraXMgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDEwIDIwMTAKKyAgYnkgTXZMLCBmb3Igd29yayBvbiAydG8zLgorCistIMOJcmljIEFyYXVqbyB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBdWcgMTAgMjAxMCBieSBCQUMsCisgIGF0IHN1Z2dlc3Rpb24gb2YgVGFyZWsgWmlhZMOpLgorCistIFRlcnJ5IFJlZWR5IHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEF1ZyAwNCAyMDEwIGJ5IE12TCwKKyAgYXQgc3VnZ2VzdGlvbiBvZiBOaWNrIENvZ2hsYW4uCisKIC0gQnJpYW4gUXVpbmxhbiB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBKdWwgMjYgMjAxMCBieSBHRkIsCiAgIGZvciB3b3JrIHJlbGF0ZWQgdG8gUEVQIDMxNDguCiAKQEAgLTMwLDcgKzYxLDcgQEAKIC0gVGltIEdvbGRlbiB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCAyMSAyMDEwIGJ5IE12TCwKICAgYXQgc3VnZ2VzdGlvbiBvZiBNaWNoYWVsIEZvb3JkLgogCi0tIEdpYW1wYW9sbyBSb2RvbOAgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXByaWwgMTcgMjAxMCBieQorLSBHaWFtcGFvbG8gUm9kb2zDoCB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCAxNyAyMDEwIGJ5CiAgIE12TCwgYXQgc3VnZ2VzdGlvbiBvZiBSLiBEYXZpZCBNdXJyYXkuCiAKIC0gSmVhbi1QYXVsIENhbGRlcm9uZSB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCA2IDIwMTAgYnkKQEAgLTc0LDcgKzEwNSw3IEBACiAtIENocmlzIFdpdGhlcnMgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gTWFyY2ggOCAyMDA5IGJ5IE12TCwKICAgYWZ0ZXIgcmVjb21tZW5kYXRpb24gYnkgR3ZSLgogCi0tIFRhcmVrIFppYWTpIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIERlY2VtYmVyIDIxIDIwMDggYnkgTkNOLAorLSBUYXJlayBaaWFkw6kgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gRGVjZW1iZXIgMjEgMjAwOCBieSBOQ04sCiAgIGZvciBtYWludGVuYW5jZSBvZiBkaXN0dXRpbHMuCiAKIC0gSGlyb2thenUgWWFtYW1vdG8gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gQXVndXN0IDEyIDIwMDggYnkgTXZMLApAQCAtMTQzLDcgKzE3NCwxNCBAQAogICBmb3IgaGlzIHdvcmsgb24gdGhlIFNTTCBtb2R1bGUgYW5kIG90aGVyIHRoaW5ncyByZWxhdGVkIHRvIChTU0wpIHNvY2tldHMuCiAKIC0gSmVmZnJleSBZYXNza2luIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDkgQXVndXN0IDIwMDcgYnkgTkNOLAotICBmb3IgaGlzIHdvcmsgb24gUEVQcyBhbmQgb3RoZXIgZ2VuZXJhbCBwYXRjaGVzLiAKKyAgZm9yIGhpcyB3b3JrIG9uIFBFUHMgYW5kIG90aGVyIGdlbmVyYWwgcGF0Y2hlcy4KKworLSBNYXJrIFN1bW1lcmZpZWxkIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDEgQXVndXN0IDIwMDcgYnkgR0ZCLAorICBmb3Igd29yayBvbiBkb2N1bWVudGF0aW9uLgorCistIEFybWluIFJvbmFjaGVyIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDIzIEp1bHkgMjAwNyBieSBHRkIsCisgIGZvciB3b3JrIG9uIHRoZSBkb2N1bWVudGF0aW9uIHRvb2xzZXQuICBIZSBub3cgbWFpbnRhaW5zIHRoZQorICBhc3QgbW9kdWxlLgogCiAtIFNlbnRoaWwgS3VtYXJhbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAxNiBKdW5lIDIwMDcgYnkgTXZMLAogICBmb3IgaGlzIFN1bW1lci1vZi1Db2RlIHByb2plY3QsIG1lbnRvcmVkIGJ5IFNraXAgTW9udGFuYXJvLgpAQCAtMTgwLDEyICsyMTgsMTIgQEAKICAgaGF2ZSB0aGVpciB3b3JrIHJldmlld2VkIGJlZm9yZSBjaGFuZ2VzIGFyZSBhY2NlcHRlZCBpbnRvIHRoZSB0cnVuay4KIAogICAtIE1hdHQgRmxlbWluZyB3YXMgYWRkZWQgb24gMjUgTWF5IDIwMDYgYnkgQU1LOyBoZSdsbCBiZSB3b3JraW5nIG9uCi0gICAgZW5oYW5jaW5nIHRoZSBQeXRob24gZGVidWdnZXIuICAgCisgICAgZW5oYW5jaW5nIHRoZSBQeXRob24gZGVidWdnZXIuCiAKICAgLSBKYWNraWx5biBIb3h3b3J0aCB3YXMgYWRkZWQgb24gMjUgTWF5IDIwMDYgYnkgQU1LOyBzaGUnbGwgYmUgYWRkaW5nIGxvZ2dpbmcKLSAgICB0byB0aGUgc3RhbmRhcmQgbGlicmFyeS4gIAorICAgIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgogCi0gIC0gTWF0ZXVzeiBSdWtvd2ljeiB3YXMgYWRkZWQgb24gMzAgTWF5IDIwMDYgYnkgQU1LOyBoZSdsbCBiZSAKKyAgLSBNYXRldXN6IFJ1a293aWN6IHdhcyBhZGRlZCBvbiAzMCBNYXkgMjAwNiBieSBBTUs7IGhlJ2xsIGJlCiAgICAgdHJhbnNsYXRpbmcgdGhlIGRlY2ltYWwgbW9kdWxlIGludG8gQy4KIAogLSBTVk4gYWNjZXNzIGdyYW50ZWQgdG8gdGhlICJOZWVkIGZvciBTcGVlZCIgSWNlbGFuZCBzcHJpbnQgYXR0ZW5kZWVzLApAQCAtMTk3LDcgKzIzNSw3IEBACiAgIENocmlzdGlhbiBUaXNtZXIKICAgSmFjayBEaWVkZXJpY2gKICAgSm9obiBCZW5lZGlrdHNzb24KLSAgS3Jpc3Rq4W4gVi4gSvNuc3NvbgorICBLcmlzdGrDoW4gVi4gSsOzbnNzb24KICAgTWFydGluIEJsYWlzCiAgIFJpY2hhcmQgRW1zbGllCiAgIFJpY2hhcmQgSm9uZXMKZGlmZiAtLWdpdCBhL01pc2MvZ2RiaW5pdCBiL01pc2MvZ2RiaW5pdAppbmRleCAzMTZmZjNkLi45MWRhNjg5IDEwMDY0NAotLS0gYS9NaXNjL2dkYmluaXQKKysrIGIvTWlzYy9nZGJpbml0CkBAIC0xLDUgKzEsMyBAQAotIyAtKi0ga3NoIC0qLQotIwogIyBJZiB5b3UgdXNlIHRoZSBHTlUgZGVidWdnZXIgZ2RiIHRvIGRlYnVnIHRoZSBQeXRob24gQyBydW50aW1lLCB5b3UKICMgbWlnaHQgZmluZCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdXNlZnVsLiAgQ29weSB0aGlzIHRvIHlvdXIKICMgfi8uZ2RiaW5pdCBmaWxlIGFuZCBpdCdsbCBnZXQgbG9hZGVkIGludG8gZ2RiIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UKQEAgLTExLDE5ICs5LDI2IEBACiAjICAgIGFkZHJlc3MgICAgOiA4NGE3YTJjCiAjICAgICQxID0gdm9pZAogIyAgICAoZ2RiKQorIworIyBOT1RFOiBJZiB5b3UgaGF2ZSBnZGIgNyBvciBsYXRlciwgaXQgc3VwcG9ydHMgZGVidWdnaW5nIG9mIFB5dGhvbiBkaXJlY3RseQorIyB3aXRoIGVtYmVkZGVkIG1hY3JvcyB0aGF0IHlvdSBtYXkgZmluZCBzdXBlcmlvciB0byB3aGF0IGlzIGluIGhlcmUuCisjIFNlZSBUb29scy9nZGIvbGlicHl0aG9uLnB5IGFuZCBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODAzMi4KIAogIyBQcmludHMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IHRvIHN0ZGVyciwgYWxvbmcgd2l0aCB0aGUKICMgbnVtYmVyIG9mIHJlZmVyZW5jZSBjb3VudHMgaXQgY3VycmVudCBoYXMgYW5kIHRoZSBoZXggYWRkcmVzcyB0aGUKICMgb2JqZWN0IGlzIGFsbG9jYXRlZCBhdC4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUHlPYmplY3QqCiBkZWZpbmUgcHlvCi1wcmludCBfUHlPYmplY3RfRHVtcCgkYXJnMCkKKyAgICAjIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgX1B5T2JqZWN0X0R1bXAgaXMgdG8gZHVtcCB0aGUgb2JqZWN0J3MKKyAgICAjIGluZm8gLSBhc3NpZ25pbmcganVzdCBwcmV2ZW50cyBnZGIgZnJvbSBwcmludGluZyB0aGUKKyAgICAjIE5VTEwgcmV0dXJuIHZhbHVlCisgICAgc2V0ICRfdW51c2VkX3ZvaWQgPSBfUHlPYmplY3RfRHVtcCgkYXJnMCkKIGVuZAogCiAjIFByaW50cyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gc3RkZXJyLCBhbG9uZyB3aXRoIHRoZQogIyBudW1iZXIgb2YgcmVmZXJlbmNlIGNvdW50cyBpdCBjdXJyZW50IGhhcyBhbmQgdGhlIGhleCBhZGRyZXNzIHRoZQogIyBvYmplY3QgaXMgYWxsb2NhdGVkIGF0LiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBQeUdDX0hlYWQqCiBkZWZpbmUgcHlnCi1wcmludCBfUHlHQ19EdW1wKCRhcmcwKQorICAgIHByaW50IF9QeUdDX0R1bXAoJGFyZzApCiBlbmQKIAogIyBwcmludCB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBjdXJyZW50IGZyYW1lCkBAIC0zNCwxMCArMzksNyBAQAogCSAgICBzZXQgJF9uYW1lcyA9IGNvLT5jb192YXJuYW1lcwogCSAgICBzZXQgJF9uYW1lID0gUHlTdHJpbmdfQXNTdHJpbmcoUHlUdXBsZV9HZXRJdGVtKCRfbmFtZXMsICRfaSkpCiAJICAgIHByaW50ZiAiJXM6XG4iLCAkX25hbWUKLQkgICAgIyBzaWRlIGVmZmVjdCBvZiBjYWxsaW5nIF9QeU9iamVjdF9EdW1wIGlzIHRvIGR1bXAgdGhlIG9iamVjdCdzCi0JICAgICMgaW5mbyAtIGFzc2lnbmluZyBqdXN0IHByZXZlbnRzIGdkYiBmcm9tIHByaW50aW5nIHRoZQotCSAgICAjIE5VTEwgcmV0dXJuIHZhbHVlCi0JICAgIHNldCAkX3ZhbCA9IF9QeU9iamVjdF9EdW1wKGYtPmZfbG9jYWxzcGx1c1skX2ldKQorICAgICAgICAgICAgcHlvIGYtPmZfbG9jYWxzcGx1c1skX2ldCiAJZW5kCiAgICAgICAgIHNldCAkX2kgPSAkX2kgKyAxCiAgICAgZW5kCkBAIC01OSw5ICs2MSwxMCBAQAogICAgICAgc2V0ICRfX3AgPSAkX19wICsgMQogICAgICAgaWYgKCRfX2FkID4gJF9fbGFzdGkpCiAJc2V0ICRfX2NvbnRpbnVlID0gMAorICAgICAgZWxzZQorICAgICAgICBzZXQgJF9fbGkgPSAkX19saSArICokX19wCisgICAgICAgIHNldCAkX19wID0gJF9fcCArIDEKICAgICAgIGVuZAotICAgICAgc2V0ICRfX2xpID0gJF9fbGkgKyAqJF9fcAotICAgICAgc2V0ICRfX3AgPSAkX19wICsgMQogICAgIGVuZAogICAgIHByaW50ZiAiJWQiLCAkX19saQogZW5kCkBAIC0xMTUsMTIgKzExOCwxOCBAQAogIyBpbnRlcnByZXRlciwgYnV0IHRoZSB0ZXN0IGNhbiBiZSBleHRlbmRlZCBieSBhbiBpbnRlcmVzdGVkIHBhcnR5KS4gIElmCiAjIFB5X01haW4gPD0gJHBjIDw9IFB5X0dldEFyZ2NBcnYgaXMgdHJ1ZSwgJHBjIGlzIGluIFB5X01haW4oKSwgc28gdGhlIHdoaWxlCiAjIHRlc3RzIHN1Y2NlZWRzIGFzIGxvbmcgYXMgaXQncyBub3QgdHJ1ZS4gIEluIGEgc2ltaWxhciBmYXNoaW9uIHRoZSBpZgotIyBzdGF0ZW1lbnQgdGVzdHMgdG8gc2VlIGlmIHdlIGFyZSBpbiBQeUV2YWxfRXZhbEZyYW1lKCkuCisjIHN0YXRlbWVudCB0ZXN0cyB0byBzZWUgaWYgd2UgYXJlIGluIFB5RXZhbF9FdmFsRnJhbWVFeCgpLgorCisjIE5vdGU6IFRoZSBuYW1lIG9mIHRoZSBtYWluIGludGVycHJldGVyIGZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gd2hpY2gKKyMgZm9sbG93IGl0IGhhcyBjaGFuZ2VkIG92ZXIgdGltZS4gIFRoaXMgdmVyc2lvbiBvZiBweXN0YWNrIHdvcmtzIHdpdGggdGhpcworIyB2ZXJzaW9uIG9mIFB5dGhvbi4gIElmIHlvdSB0cnkgdXNpbmcgaXQgd2l0aCBvbGRlciBvciBuZXdlciB2ZXJzaW9ucyBvZgorIyB0aGUgaW50ZXJwcmV0ZXIgeW91IG1heSB3aWxsIGhhdmUgdG8gY2hhbmdlIHRoZSBmdW5jdGlvbnMgeW91IGNvbXBhcmUgd2l0aAorIyAkcGMuCiAKICMgcHJpbnQgdGhlIGVudGlyZSBQeXRob24gY2FsbCBzdGFjawogZGVmaW5lIHB5c3RhY2sKICAgICB3aGlsZSAkcGMgPCBQeV9NYWluIHx8ICRwYyA+IFB5X0dldEFyZ2NBcmd2Ci0gICAgICAgIGlmICRwYyA+IFB5RXZhbF9FdmFsRnJhbWUgJiYgJHBjIDwgUHlFdmFsX0V2YWxDb2RlRXgKKyAgICAgICAgaWYgJHBjID4gUHlFdmFsX0V2YWxGcmFtZUV4ICYmICRwYyA8IFB5RXZhbF9FdmFsQ29kZUV4CiAJICAgIHB5ZnJhbWUKICAgICAgICAgZW5kCiAgICAgICAgIHVwLXNpbGVudGx5IDEKQEAgLTEzMSw3ICsxNDAsNyBAQAogIyBwcmludCB0aGUgZW50aXJlIFB5dGhvbiBjYWxsIHN0YWNrIC0gdmVyYm9zZSBtb2RlCiBkZWZpbmUgcHlzdGFja3YKICAgICB3aGlsZSAkcGMgPCBQeV9NYWluIHx8ICRwYyA+IFB5X0dldEFyZ2NBcmd2Ci0gICAgICAgIGlmICRwYyA+IFB5RXZhbF9FdmFsRnJhbWUgJiYgJHBjIDwgUHlFdmFsX0V2YWxDb2RlRXgKKyAgICAgICAgaWYgJHBjID4gUHlFdmFsX0V2YWxGcmFtZUV4ICYmICRwYyA8IFB5RXZhbF9FdmFsQ29kZUV4CiAJICAgIHB5ZnJhbWV2CiAgICAgICAgIGVuZAogICAgICAgICB1cC1zaWxlbnRseSAxCmRpZmYgLS1naXQgYS9NaXNjL2luZGVudC5wcm8gYi9NaXNjL2luZGVudC5wcm8KaW5kZXggM2VmYWM4OS4uMDJjY2ViNiAxMDA2NDQKLS0tIGEvTWlzYy9pbmRlbnQucHJvCisrKyBiL01pc2MvaW5kZW50LnBybwpAQCAtMSwxNSArMSwyNCBAQAotLXNvYgotLW5iYWQKLS1iYXAKLS1icgotLW5jZQotLW5jcwotLW5wY3MKLS1pOAotLWlwOAotLWMyNQorLS1ibGFuay1saW5lcy1hZnRlci1kZWNsYXJhdGlvbnMKKy0tYmxhbmstbGluZXMtYWZ0ZXItcHJvY2VkdXJlcworLS1icmFjZXMtYWZ0ZXItZnVuYy1kZWYtbGluZQorLS1icmFjZXMtb24taWYtbGluZQorLS1icmFjZXMtb24tc3RydWN0LWRlY2wtbGluZQorLS1icmVhay1hZnRlci1ib29sZWFuLW9wZXJhdG9yCistLWNvbW1lbnQtaW5kZW50YXRpb24yNQorLS1jb21tZW50LWxpbmUtbGVuZ3RoNzkKKy0tY29udGludWUtYXQtcGFyZW50aGVzZXMKKy0tZG9udC1jdWRkbGUtZG8td2hpbGUKKy0tZG9udC1jdWRkbGUtZWxzZQorLS1pbmRlbnQtbGV2ZWw0CistLWxpbmUtbGVuZ3RoNzkKKy0tbm8tc3BhY2UtYWZ0ZXItY2FzdHMKKy0tbm8tc3BhY2UtYWZ0ZXItZnVuY3Rpb24tY2FsbC1uYW1lcworLS1uby1zcGFjZS1hZnRlci1wYXJlbnRoZXNlcworLS1uby10YWJzCistLXByb2NuYW1lcy1zdGFydC1saW5lcworLS1zcGFjZS1hZnRlci1mb3IKKy0tc3BhY2UtYWZ0ZXItaWYKKy0tc3BhY2UtYWZ0ZXItd2hpbGUKKy0tc3dhbGxvdy1vcHRpb25hbC1ibGFuay1saW5lcworLVQgUHlDRnVuY3Rpb24KIC1UIFB5T2JqZWN0Ci0KLQotCi0KZGlmZiAtLWdpdCBhL01pc2MvbWFpbnRhaW5lcnMucnN0IGIvTWlzYy9tYWludGFpbmVycy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxY2FiZAotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvbWFpbnRhaW5lcnMucnN0CkBAIC0wLDAgKzEsMzE5IEBACitNYWludGFpbmVycyBJbmRleAorPT09PT09PT09PT09PT09PT0KKworLi4gd2FybmluZzo6CisKKyAgIFRoaXMgZG9jdW1lbnQgaXMgb3V0IG9mIGRhdGUgYW5kIHJlcGxhY2VkIGJ5IGFub3RoZXIgdmVyc2lvbiBpbiB0aGUKKyAgIGRldmVsb3BlcidzIGd1aWRlIGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvZXhwZXJ0cworCitUaGlzIGRvY3VtZW50IGhhcyB0YWJsZXMgdGhhdCBsaXN0IFB5dGhvbiBNb2R1bGVzLCBUb29scywgUGxhdGZvcm1zIGFuZAorSW50ZXJlc3QgQXJlYXMgYW5kIG5hbWVzIGZvciBlYWNoIGl0ZW0gdGhhdCBpbmRpY2F0ZSBhIG1haW50YWluZXIgb3IgYW4KK2V4cGVydCBpbiB0aGUgZmllbGQuICBUaGlzIGxpc3QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBpc3N1ZSBzdWJtaXR0ZXJzLAoraXNzdWUgdHJpYWdlIHBlb3BsZSwgYW5kIG90aGVyIGlzc3VlIHBhcnRpY2lwYW50cyB0byBmaW5kIHBlb3BsZSB0byBhZGQgdG8KK3RoZSBub3N5IGxpc3Qgb3IgdG8gY29udGFjdCBkaXJlY3RseSBieSBlbWFpbCBmb3IgaGVscCBhbmQgZGVjaXNpb25zIG9uCitmZWF0dXJlIHJlcXVlc3RzIGFuZCBidWcgZml4ZXMuICBQZW9wbGUgb24gdGhpcyBsaXN0IG1heSBiZSBhc2tlZCB0byByZW5kZXIKK2ZpbmFsIGp1ZGdlbWVudCBvbiBhIGZlYXR1cmUgb3IgYnVnLiAgSWYgbm8gYWN0aXZlIG1haW50YWluZXIgaXMgbGlzdGVkIGZvcgorYSBnaXZlbiBtb2R1bGUsIHRoZW4gcXVlc3Rpb25hYmxlIGNoYW5nZXMgc2hvdWxkIGdvIHRvIHB5dGhvbi1kZXYsIHdoaWxlCithbnkgb3RoZXIgaXNzdWVzIGNhbiBhbmQgc2hvdWxkIGJlIGRlY2lkZWQgYnkgYW55IGNvbW1pdHRlci4KKworVW5sZXNzIGEgbmFtZSBpcyBmb2xsb3dlZCBieSBhICcqJywgeW91IHNob3VsZCBuZXZlciBhc3NpZ24gYW4gaXNzdWUgdG8KK3RoYXQgcGVyc29uLCBvbmx5IG1ha2UgdGhlbSBub3N5LiAgTmFtZXMgZm9sbG93ZWQgYnkgYSAnKicgbWF5IGJlIGFzc2lnbmVkCitpc3N1ZXMgaW52b2x2aW5nIHRoZSBtb2R1bGUgb3IgdG9waWMuCisKK1RoZSBQbGF0Zm9ybSBhbmQgSW50ZXJlc3QgQXJlYSB0YWJsZXMgbGlzdCBicm9hZGVyIGZpZWxkcyBpbiB3aGljaCB2YXJpb3VzCitwZW9wbGUgaGF2ZSBleHBlcnRpc2UuICBUaGVzZSBwZW9wbGUgY2FuIGFsc28gYmUgY29udGFjdGVkIGZvciBoZWxwLAorb3BpbmlvbnMsIGFuZCBkZWNpc2lvbnMgd2hlbiBpc3N1ZXMgaW52b2x2ZSB0aGVpciBhcmVhcy4KKworSWYgYSBsaXN0ZWQgbWFpbnRhaW5lciBkb2VzIG5vdCByZXNwb25kIHRvIHJlcXVlc3RzIGZvciBjb21tZW50IGZvciBhbgorZXh0ZW5kZWQgcGVyaW9kICh0aHJlZSB3ZWVrcyBvciBtb3JlKSwgdGhleSBzaG91bGQgYmUgbWFya2VkIGFzIGluYWN0aXZlCitpbiB0aGlzIGxpc3QgYnkgcGxhY2luZyB0aGUgd29yZCAnaW5hY3RpdmUnIGluIHBhcmVudGhlc2lzIGJlaGluZCB0aGVpcgordHJhY2tlciBpZC4gIFRoZXkgYXJlIG9mIGNvdXJzZSBmcmVlIHRvIHJlbW92ZSB0aGF0IGluYWN0aXZlIG1hcmsgYXQKK2FueSB0aW1lLgorCitDb21taXR0ZXJzIHNob3VsZCB1cGRhdGUgdGhlc2UgdGFibGVzIGFzIHRoZWlyIGFyZWFzIG9mIGV4cGVydGlzZSB3aWRlbi4KK05ldyB0b3BpY3MgbWF5IGJlIGFkZGVkIHRvIHRoZSBJbnRlcmVzdCBBcmVhIHRhYmxlIGF0IHdpbGwuCisKK1RoZSBleGlzdGVuY2Ugb2YgdGhpcyBsaXN0IGlzIG5vdCBtZWFudCB0byBpbmRpY2F0ZSB0aGF0IHRoZXNlIHBlb3BsZQorKm11c3QqIGJlIGNvbnRhY3RlZCBmb3IgZGVjaXNpb25zOyBpdCBpcywgcmF0aGVyLCBhIHJlc291cmNlIHRvIGJlIHVzZWQKK2J5IG5vbi1jb21taXR0ZXJzIHRvIGZpbmQgcmVzcG9uc2libGUgcGFydGllcywgYW5kIGJ5IGNvbW1pdHRlcnMgd2hvIGRvCitub3QgZmVlbCBxdWFsaWZpZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGluIGEgcGFydGljdWxhciBjb250ZXh0LgorCitTZWUgYWxzbyBgUEVQIDI5MWBfIGFuZCBgUEVQIDM2MGBfIGZvciBpbmZvcm1hdGlvbiBhYm91dCBjZXJ0YWluIG1vZHVsZXMKK3dpdGggc3BlY2lhbCBydWxlcy4KKworLi4gX2BQRVAgMjkxYDogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMjkxLworLi4gX2BQRVAgMzYwYDogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzYwLworCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KK01vZHVsZSAgICAgICAgICAgICAgTWFpbnRhaW5lcnMKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KK19fYnVpbHRpbl9fCitfX2Z1dHVyZV9fCitfX21haW5fXyAgICAgICAgICAgIGd2YW5yb3NzdW0KK19kdW1teV90aHJlYWQgICAgICAgYnJldHQuY2Fubm9uCitfdGhyZWFkICAgICAgICAgICAgIHBpdHJvdQorX3dpbnJlZyAgICAgICAgICAgICBicmlhbi5jdXJ0aW4qLCBzdHV0emJhY2gKK2FiYworYWlmYyAgICAgICAgICAgICAgICByLmRhdmlkLm11cnJheQorYXJncGFyc2UgICAgICAgICAgICBiZXRoYXJkCithcnJheQorYXN0Cithc3luY2hhdCAgICAgICAgICAgIGpvc2lhaGNhcmxzb24sIGdpYW1wYW9sby5yb2RvbGEsIHN0dXR6YmFjaAorYXN5bmNvcmUgICAgICAgICAgICBqb3NpYWhjYXJsc29uLCBnaWFtcGFvbG8ucm9kb2xhLCBzdHV0emJhY2gKK2F0ZXhpdAorYXVkaW9vcAorYmFzZTY0CitCYXNlSFRUUFNlcnZlcgorYmRiCitiaW5hc2NpaQorYmluaGV4CitiaXNlY3QgICAgICAgICAgICAgIHJoZXR0aW5nZXIKK2J6MgorY2FsZW5kYXIgICAgICAgICAgICByaGV0dGluZ2VyCitjZ2kKK0NHSUhUVFBTZXJ2ZXIKK2NnaXRiCitjaHVuaworY21hdGggICAgICAgICAgICAgICBtYXJrLmRpY2tpbnNvbgorY21kCitjb2RlCitjb2RlY3MgICAgICAgICAgICAgIGxlbWJ1cmcsIGRvZXJ3YWx0ZXIKK2NvZGVvcAorY29sbGVjdGlvbnMgICAgICAgICByaGV0dGluZ2VyCitjb2xsZWN0aW9ucy5fYWJjb2xsIHJoZXR0aW5nZXIsIHN0dXR6YmFjaAorY29sb3JzeXMKK2NvbXBpbGVhbGwKK0NvbmZpZ1BhcnNlciAgICAgICAgbHVrYXN6LmxhbmdhCitjb250ZXh0bGliICAgICAgICAgIG5jb2dobGFuCitjb3B5ICAgICAgICAgICAgICAgIGFsZXhhbmRyZS52YXNzYWxvdHRpCitjb3B5X3JlZyAgICAgICAgICAgIGFsZXhhbmRyZS52YXNzYWxvdHRpCitjUHJvZmlsZQorY3J5cHQgICAgICAgICAgICAgICBqYWZvKgorY3N2ICAgICAgICAgICAgICAgICBza2lwLm1vbnRhbmFybworY3R5cGVzICAgICAgICAgICAgICB0aGVsbGVyCitjdXJzZXMKK2RhdGV0aW1lICAgICAgICAgICAgYmVsb3BvbHNreQorZGJtCitkZWNpbWFsICAgICAgICAgICAgIGZhY3VuZG9iYXRpc3RhLCByaGV0dGluZ2VyLCBtYXJrLmRpY2tpbnNvbgorZGlmZmxpYiAgICAgICAgICAgICB0aW1fb25lIChpbmFjdGl2ZSkKK2RpcworZGlzdHV0aWxzICAgICAgICAgICB0YXJlayosIGVyaWMuYXJhdWpvKgorZG9jdGVzdCAgICAgICAgICAgICB0aW1fb25lIChpbmFjdGl2ZSkKK2R1bW15X3RocmVhZGluZyAgICAgYnJldHQuY2Fubm9uCitlbWFpbCAgICAgICAgICAgICAgIGJhcnJ5LCByLmRhdmlkLm11cnJheSoKK2VuY29kaW5ncyAgICAgICAgICAgbGVtYnVyZywgbG9ld2lzCitlcnJubworZXhjZXB0aW9ucworZmNudGwKK2ZpbGVjbXAKK2ZpbGVpbnB1dAorZm5tYXRjaAorZm9ybWF0dGVyCitmcGVjdGwKK2ZyYWN0aW9ucyAgICAgICAgICAgbWFyay5kaWNraW5zb24sIHJoZXR0aW5nZXIKK2Z0cGxpYiAgICAgICAgICAgICAgZ2lhbXBhb2xvLnJvZG9sYQorZnVuY3Rvb2xzICAgICAgICAgICBuY29naGxhbiwgcmhldHRpbmdlcgorZ2MgICAgICAgICAgICAgICAgICBwaXRyb3UKK2dldG9wdAorZ2V0cGFzcworZ2V0dGV4dCAgICAgICAgICAgICBsb2V3aXMKK2dsb2IKK2dycAorZ3ppcAoraGFzaGxpYgoraGVhcHEgICAgICAgICAgICAgICByaGV0dGluZ2VyLCBzdHV0emJhY2gKK2htYWMKK2h0bWxlbnRpdHlkZWZzCitodG1sbGliCitIVE1MUGFyc2VyCitodHRwbGliCitpZGxlbGliICAgICAgICAgICAgIGtiaworaW1hcGxpYgoraW1naGRyCitpbXAKK2ltcG9ydGxpYiAgICAgICAgICAgYnJldHQuY2Fubm9uCitpbnNwZWN0CitpbyAgICAgICAgICAgICAgICAgIHBpdHJvdSwgYmVuamFtaW4ucGV0ZXJzb24sIHN0dXR6YmFjaAoraXRlcnRvb2xzICAgICAgICAgICByaGV0dGluZ2VyCitqc29uICAgICAgICAgICAgICAgIGJvYi5pcHBvbGl0byAoaW5hY3RpdmUpLCByaGV0dGluZ2VyCitrZXl3b3JkCitsaWIydG8zICAgICAgICAgICAgIGJlbmphbWluLnBldGVyc29uCitsaW5lY2FjaGUKK2xvY2FsZSAgICAgICAgICAgICAgbG9ld2lzLCBsZW1idXJnCitsb2dnaW5nICAgICAgICAgICAgIHZpbmF5LnNhamlwCittYWNwYXRoCittYWlsYm94CittYWlsY2FwCittYXJzaGFsCittYXRoICAgICAgICAgICAgICAgIG1hcmsuZGlja2luc29uLCByaGV0dGluZ2VyLCBzdHV0emJhY2gKK21pbWV0eXBlcworbW1hcAorbW9kdWxlZmluZGVyICAgICAgICB0aGVsbGVyLCBqdnIKK21zaWxpYiAgICAgICAgICAgICAgbG9ld2lzCittc3ZjcnQKK211bHRpcHJvY2Vzc2luZyAgICAgam5vbGxlcgorbmV0cmMKK25pcworbm50cGxpYiAgICAgICAgICAgICBwaXRyb3UKK251bWJlcnMKK29wZXJhdG9yCitvcHRwYXJzZSAgICAgICAgICAgIGFyb25hY2hlcgorb3MgICAgICAgICAgICAgICAgICBsb2V3aXMKK29zc2F1ZGlvZGV2CitwYXJzZXIKK3BkYiAgICAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgorcGlja2xlICAgICAgICAgICAgICBhbGV4YW5kcmUudmFzc2Fsb3R0aSwgcGl0cm91CitwaWNrbGV0b29scyAgICAgICAgIGFsZXhhbmRyZS52YXNzYWxvdHRpCitwaXBlcworcGtndXRpbAorcGxhdGZvcm0gICAgICAgICAgICBsZW1idXJnCitwbGlzdGxpYgorcG9wbGliCitwb3NpeAorcHByaW50ICAgICAgICAgICAgICBmZHJha2UKK3Byb2ZpbGUgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCitwc3RhdHMgICAgICAgICAgICAgIGdlb3JnLmJyYW5kbAorcHR5Citwd2QKK3B5X2NvbXBpbGUKK3B5YmVuY2ggICAgICAgICAgICAgbGVtYnVyZywgcGl0cm91CitweWNsYnIKK3B5ZG9jCitRdWV1ZSAgICAgICAgICAgICAgIHJoZXR0aW5nZXIKK3F1b3ByaQorcmFuZG9tICAgICAgICAgICAgICByaGV0dGluZ2VyCityZSAgICAgICAgICAgICAgICAgIGVmZmJvdCAoaW5hY3RpdmUpLCBwaXRyb3UsIGV6aW8ubWVsb3R0aQorcmVhZGxpbmUKK3JlcHJsaWIKK3Jlc291cmNlCitybGNvbXBsZXRlcgorcnVucHkgICAgICAgICAgICAgICBuY29naGxhbgorc2NoZWQKK3NlbGVjdAorc2hlbHZlCitzaGxleAorc2h1dGlsICAgICAgICAgICAgICB0YXJlaworc2lnbmFsCitTaW1wbGVIVFRQU2VydmVyCitzaXRlCitzbXRwZAorc210cGxpYgorc25kaGRyCitzb2NrZXQKK1NvY2tldFNlcnZlcgorc3B3ZAorc3FsaXRlMyAgICAgICAgICAgICBnaGFlcmluZworc3NsICAgICAgICAgICAgICAgICBqYW5zc2VuLCBwaXRyb3UsIGdpYW1wYW9sby5yb2RvbGEKK3N0YXQKK3N0cmluZyAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgorc3RyaW5ncHJlcAorc3RydWN0ICAgICAgICAgICAgICBtYXJrLmRpY2tpbnNvbgorc3VicHJvY2VzcyAgICAgICAgICBhc3RyYW5kIChpbmFjdGl2ZSkKK3N1bmF1CitzeW1ib2wKK3N5bXRhYmxlICAgICAgICAgICAgYmVuamFtaW4ucGV0ZXJzb24KK3N5cworc3lzY29uZmlnICAgICAgICAgICB0YXJlaworc3lzbG9nICAgICAgICAgICAgICBqYWZvKgordGFibmFubnkgICAgICAgICAgICB0aW1fb25lIChpbmFjdGl2ZSkKK3RhcmZpbGUgICAgICAgICAgICAgbGFycy5ndXN0YWViZWwKK3RlbG5ldGxpYgordGVtcGZpbGUgICAgICAgICAgICBnZW9yZy5icmFuZGwKK3Rlcm1pb3MKK3Rlc3QKK3RleHR3cmFwICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCit0aHJlYWRpbmcgICAgICAgICAgIHBpdHJvdQordGltZSAgICAgICAgICAgICAgICBiZWxvcG9sc2t5Cit0aW1laXQgICAgICAgICAgICAgIGdlb3JnLmJyYW5kbAorVGtpbnRlciAgICAgICAgICAgICBncG9sbwordG9rZW4gICAgICAgICAgICAgICBnZW9yZy5icmFuZGwKK3Rva2VuaXplCit0cmFjZSAgICAgICAgICAgICAgIGJlbG9wb2xza3kKK3RyYWNlYmFjayAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgordHR5Cit0dXJ0bGUgICAgICAgICAgICAgIGdyZWdvcmxpbmdsCit0eXBlcwordW5pY29kZWRhdGEgICAgICAgICBsb2V3aXMsIGxlbWJ1cmcsIGV6aW8ubWVsb3R0aQordW5pdHRlc3QgICAgICAgICAgICBtaWNoYWVsLmZvb3JkLCBlemlvLm1lbG90dGkKK3VybGxpYiAgICAgICAgICAgICAgb3JzZW50aGlsCit1dQordXVpZAord2FybmluZ3MgICAgICAgICAgICBicmV0dC5jYW5ub24KK3dhdmUKK3dlYWtyZWYgICAgICAgICAgICAgZmRyYWtlLCBwaXRyb3UKK3dlYmJyb3dzZXIgICAgICAgICAgZ2VvcmcuYnJhbmRsCit3aW5zb3VuZCAgICAgICAgICAgIGVmZmJvdCAoaW5hY3RpdmUpCit3c2dpcmVmICAgICAgICAgICAgIHBqZQoreGRybGliCit4bWwuZG9tCit4bWwuZG9tLm1pbmlkb20KK3htbC5kb20ucHVsbGRvbQoreG1sLmV0cmVlICAgICAgICAgICBlZmZib3QgKGluYWN0aXZlKQoreG1sLnBhcnNlcnMuZXhwYXQKK3htbC5zYXgKK3htbC5zYXguaGFuZGxlcgoreG1sLnNheC5zYXh1dGlscworeG1sLnNheC54bWxyZWFkZXIKK3htbHJwYyAgICAgICAgICAgICAgbG9ld2lzCit6aXBmaWxlICAgICAgICAgICAgIGFsYW5tY2ludHlyZQoremlwaW1wb3J0Cit6bGliCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CisKKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorVG9vbCAgICAgICAgICAgICAgICBNYWludGFpbmVycworLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorcHliZW5jaCAgICAgICAgICAgICBsZW1idXJnCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09CisKKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorUGxhdGZvcm0gICAgICAgICAgICBNYWludGFpbmVycworLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLQorQUlYCitDeWd3aW4gICAgICAgICAgICAgIGpsdDYzLCBzdHV0emJhY2gKK0ZyZWVCU0QKK0hQLVVYCitMaW51eAorTWFjICAgICAgICAgICAgICAgICByb25hbGRvdXNzb3JlbiwgbmVkLmRlaWx5CitOZXRCU0QxCitPUzIvRU1YICAgICAgICAgICAgIGFpbWFjaW50eXJlCitTb2xhcmlzCitXaW5kb3dzICAgICAgICAgICAgIHRpbS5nb2xkZW4sIGJyaWFuLmN1cnRpbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQorCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KK0ludGVyZXN0IEFyZWEgICAgICAgTWFpbnRhaW5lcnMKKy0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KK2FsZ29yaXRobXMKK2FzdC9jb21waWxlciAgICAgICAgbmNvZ2hsYW4sIGJlbmphbWluLnBldGVyc29uLCBicmV0dC5jYW5ub24sIGdlb3JnLmJyYW5kbAorYXV0b2NvbmYvbWFrZWZpbGVzCitic2QKK2J1ZyB0cmFja2VyICAgICAgICAgZXppby5tZWxvdHRpCitidWlsZGJvdHMKK2J5dGVjb2RlICAgICAgICAgICAgcGl0cm91CitkYXRhIGZvcm1hdHMgICAgICAgIG1hcmsuZGlja2luc29uLCBnZW9yZy5icmFuZGwKK2RhdGFiYXNlICAgICAgICAgICAgbGVtYnVyZworZG9jdW1lbnRhdGlvbiAgICAgICBnZW9yZy5icmFuZGwsIGV6aW8ubWVsb3R0aQorR1VJCitpMThuICAgICAgICAgICAgICAgIGxlbWJ1cmcKK2ltcG9ydCBtYWNoaW5lcnkgICAgYnJldHQuY2Fubm9uLCBuY29naGxhbgoraW8gICAgICAgICAgICAgICAgICBwaXRyb3UsIGJlbmphbWluLnBldGVyc29uLCBzdHV0emJhY2gKK2xvY2FsZSAgICAgICAgICAgICAgbGVtYnVyZywgbG9ld2lzCittYXRoZW1hdGljcyAgICAgICAgIG1hcmsuZGlja2luc29uLCBlcmljLnNtaXRoLCBsZW1idXJnLCBzdHV0emJhY2gKK21lbW9yeSBtYW5hZ2VtZW50ICAgdGltX29uZSwgbGVtYnVyZworbmV0d29ya2luZyAgICAgICAgICBnaWFtcGFvbG8ucm9kb2xhCitwYWNrYWdpbmcgICAgICAgICAgIHRhcmVrLCBsZW1idXJnCitweTMgdHJhbnNpdGlvbiAgICAgIGJlbmphbWluLnBldGVyc29uCityZWxlYXNlIG1hbmFnZW1lbnQgIHRhcmVrLCBsZW1idXJnLCBiZW5qYW1pbi5wZXRlcnNvbiwgYmFycnksIGxvZXdpcywKKyAgICAgICAgICAgICAgICAgICAgZ3ZhbnJvc3N1bSwgYW50aG9ueWJheHRlcgorc3RyLmZvcm1hdCAgICAgICAgICBlcmljLnNtaXRoCit0ZXN0aW5nICAgICAgICAgICAgIG1pY2hhZWwuZm9vcmQsIHBpdHJvdSwgZ2lhbXBhb2xvLnJvZG9sYSwgZXppby5tZWxvdHRpCit0aHJlYWRzICAgICAgICAgICAgIHBpdHJvdQordGltZSBhbmQgZGF0ZXMgICAgICBsZW1idXJnLCBiZWxvcG9sc2t5Cit1bmljb2RlICAgICAgICAgICAgIGxlbWJ1cmcsIGV6aW8ubWVsb3R0aSwgaGF5cG8KK3ZlcnNpb24gY29udHJvbAorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvTWlzYy9weW1lbWNvbXBhdC5oIGIvTWlzYy9weW1lbWNvbXBhdC5oCmluZGV4IDI3NTdlM2EuLmEwZmEzMzYgMTAwNjQ0Ci0tLSBhL01pc2MvcHltZW1jb21wYXQuaAorKysgYi9NaXNjL3B5bWVtY29tcGF0LmgKQEAgLTcyLDcgKzcyLDcgQEAKIAogICAgSXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydCBib3RoIHRoZSAyLjAgYW5kIDIuMiBHQyBBUElzLCBidXQgaXQncwogICAgbm90IHByZXR0eSBhbmQgdGhpcyBjb21tZW50IGJsb2NrIGlzIHRvbyBuYXJyb3cgdG8gY29udGFpbiBhCi0gICBkZXNjaXB0aW9uIG9mIHdoYXQncyByZXF1aXJlZC4uLiAqLworICAgZGVzY3JpcHRpb24gb2Ygd2hhdCdzIHJlcXVpcmVkLi4uICovCiAKICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwQjEKICNkZWZpbmUgUHlPYmplY3RfR0NfTmV3ICAgICAgICAgUHlPYmplY3RfTmV3CmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KaW5kZXggOWFjNDQxNC4uNTUyYmJkNSAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24tY29uZmlnLmluCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgpAQCAtNSwxMSArNSwxMSBAQAogaW1wb3J0IGdldG9wdAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogCi12YWxpZF9vcHRzID0gWydwcmVmaXgnLCAnZXhlYy1wcmVmaXgnLCAnaW5jbHVkZXMnLCAnbGlicycsICdjZmxhZ3MnLCAKK3ZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsCiAgICAgICAgICAgICAgICdsZGZsYWdzJywgJ2hlbHAnXQogCiBkZWYgZXhpdF93aXRoX3VzYWdlKGNvZGU9MSk6Ci0gICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiVXNhZ2U6ICVzIFslc10iICUgKHN5cy5hcmd2WzBdLCAKKyAgICBwcmludCA+PnN5cy5zdGRlcnIsICJVc2FnZTogJXMgWyVzXSIgJSAoc3lzLmFyZ3ZbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8Jy5qb2luKCctLScrb3B0IGZvciBvcHQgaW4gdmFsaWRfb3B0cykpCiAgICAgc3lzLmV4aXQoY29kZSkKIApAQCAtMjEsMzMgKzIxLDM2IEBACiBpZiBub3Qgb3B0czoKICAgICBleGl0X3dpdGhfdXNhZ2UoKQogCi1vcHQgPSBvcHRzWzBdWzBdCi0KIHB5dmVyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJykKIGdldHZhciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcgogCi1pZiBvcHQgPT0gJy0taGVscCc6Ci0gICAgZXhpdF93aXRoX3VzYWdlKDApCitvcHRfZmxhZ3MgPSBbZmxhZyBmb3IgKGZsYWcsIHZhbCkgaW4gb3B0c10KIAotZWxpZiBvcHQgPT0gJy0tcHJlZml4JzoKLSAgICBwcmludCBzeXNjb25maWcuUFJFRklYCitpZiAnLS1oZWxwJyBpbiBvcHRfZmxhZ3M6CisgICAgZXhpdF93aXRoX3VzYWdlKGNvZGU9MCkKIAotZWxpZiBvcHQgPT0gJy0tZXhlYy1wcmVmaXgnOgotICAgIHByaW50IHN5c2NvbmZpZy5FWEVDX1BSRUZJWAorZm9yIG9wdCBpbiBvcHRfZmxhZ3M6CisgICAgaWYgb3B0ID09ICctLXByZWZpeCc6CisgICAgICAgIHByaW50IHN5c2NvbmZpZy5QUkVGSVgKIAotZWxpZiBvcHQgaW4gKCctLWluY2x1ZGVzJywgJy0tY2ZsYWdzJyk6Ci0gICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpLAotICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKV0KLSAgICBpZiBvcHQgPT0gJy0tY2ZsYWdzJzoKLSAgICAgICAgZmxhZ3MuZXh0ZW5kKGdldHZhcignQ0ZMQUdTJykuc3BsaXQoKSkKLSAgICBwcmludCAnICcuam9pbihmbGFncykKKyAgICBlbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6CisgICAgICAgIHByaW50IHN5c2NvbmZpZy5FWEVDX1BSRUZJWAogCi1lbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxkZmxhZ3MnKToKLSAgICBsaWJzID0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKSArIGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKLSAgICBsaWJzLmFwcGVuZCgnLWxweXRob24nK3B5dmVyKQotICAgICMgYWRkIHRoZSBwcmVmaXgvbGliL3B5dGhvblguWS9jb25maWcgZGlyLCBidXQgb25seSBpZiB0aGVyZSBpcyBubwotICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCi0gICAgaWYgb3B0ID09ICctLWxkZmxhZ3MnIGFuZCBub3QgZ2V0dmFyKCdQeV9FTkFCTEVfU0hBUkVEJyk6Ci0gICAgICAgIGxpYnMuaW5zZXJ0KDAsICctTCcgKyBnZXR2YXIoJ0xJQlBMJykpCi0gICAgcHJpbnQgJyAnLmpvaW4obGlicykKKyAgICBlbGlmIG9wdCBpbiAoJy0taW5jbHVkZXMnLCAnLS1jZmxhZ3MnKToKKyAgICAgICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYygpLAorICAgICAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSldCisgICAgICAgIGlmIG9wdCA9PSAnLS1jZmxhZ3MnOgorICAgICAgICAgICAgZmxhZ3MuZXh0ZW5kKGdldHZhcignQ0ZMQUdTJykuc3BsaXQoKSkKKyAgICAgICAgcHJpbnQgJyAnLmpvaW4oZmxhZ3MpCisKKyAgICBlbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxkZmxhZ3MnKToKKyAgICAgICAgbGlicyA9IGdldHZhcignTElCUycpLnNwbGl0KCkgKyBnZXR2YXIoJ1NZU0xJQlMnKS5zcGxpdCgpCisgICAgICAgIGxpYnMuYXBwZW5kKCctbHB5dGhvbicrcHl2ZXIpCisgICAgICAgICMgYWRkIHRoZSBwcmVmaXgvbGliL3B5dGhvblguWS9jb25maWcgZGlyLCBidXQgb25seSBpZiB0aGVyZSBpcyBubworICAgICAgICAjIHNoYXJlZCBsaWJyYXJ5IGluIHByZWZpeC9saWIvLgorICAgICAgICBpZiBvcHQgPT0gJy0tbGRmbGFncyc6CisgICAgICAgICAgICBpZiBub3QgZ2V0dmFyKCdQeV9FTkFCTEVfU0hBUkVEJyk6CisgICAgICAgICAgICAgICAgbGlicy5pbnNlcnQoMCwgJy1MJyArIGdldHZhcignTElCUEwnKSkKKyAgICAgICAgICAgIGxpYnMuZXh0ZW5kKGdldHZhcignTElOS0ZPUlNIQVJFRCcpLnNwbGl0KCkpCisgICAgICAgIHByaW50ICcgJy5qb2luKGxpYnMpCiAKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLW1vZGUuZWwgYi9NaXNjL3B5dGhvbi1tb2RlLmVsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTliZTc0Li4wMDAwMDAwCi0tLSBhL01pc2MvcHl0aG9uLW1vZGUuZWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTA2ICswLDAgQEAKLTs7OyBweXRob24tbW9kZS5lbCAtLS0gTWFqb3IgbW9kZSBmb3IgZWRpdGluZyBQeXRob24gcHJvZ3JhbXMKLQotOzsgQ29weXJpZ2h0IChDKSAxOTkyLDE5OTMsMTk5NCAgVGltIFBldGVycwotCi07OyBBdXRob3I6IDIwMDMtMjAwNyBodHRwOi8vc2YubmV0L3Byb2plY3RzL3B5dGhvbi1tb2RlCi07OyAgICAgICAgIDE5OTUtMjAwMiBCYXJyeSBBLiBXYXJzYXcKLTs7ICAgICAgICAgMTk5Mi0xOTk0IFRpbSBQZXRlcnMKLTs7IE1haW50YWluZXI6IHB5dGhvbi1tb2RlQHB5dGhvbi5vcmcKLTs7IENyZWF0ZWQ6ICAgIEZlYiAxOTkyCi07OyBLZXl3b3JkczogICBweXRob24gbGFuZ3VhZ2VzIG9vcAotCi0oZGVmY29uc3QgcHktdmVyc2lvbiAiJFJldmlzaW9uJCIKLSAgImBweXRob24tbW9kZScgdmVyc2lvbiBudW1iZXIuIikKLQotOzsgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcywgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQKLTs7IHdhcnJhbnR5LiAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSBvciBzZWxsIHRoaXMKLTs7IHNvZnR3YXJlLCB3aXRob3V0IGZlZSwgZm9yIGFueSBwdXJwb3NlIGFuZCBieSBhbnkgaW5kaXZpZHVhbCBvcgotOzsgb3JnYW5pemF0aW9uLCBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci07OyBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLgotCi07OzsgQ29tbWVudGFyeToKLQotOzsgVGhpcyBpcyBhIG1ham9yIG1vZGUgZm9yIGVkaXRpbmcgUHl0aG9uIHByb2dyYW1zLiAgSXQgd2FzIGRldmVsb3BlZCBieSBUaW0KLTs7IFBldGVycyBhZnRlciBhbiBvcmlnaW5hbCBpZGVhIGJ5IE1pY2hhZWwgQS4gR3VyYXZhZ2UuICBUaW0gc3Vic2VxdWVudGx5Ci07OyBsZWZ0IHRoZSBuZXQgYW5kIGluIDE5OTUsIEJhcnJ5IFdhcnNhdyBpbmhlcml0ZWQgdGhlIG1vZGUuICBUaW0ncyBub3cgYmFjawotOzsgYnV0IGRpc2F2b3dzIGFsbCByZXNwb25zaWJpbGl0eSBmb3IgdGhlIG1vZGUuICBJbiBmYWN0LCB3ZSBzdXNwZWN0IGhlCi07OyBkb2Vzbid0IGV2ZW4gdXNlIEVtYWNzIGFueSBtb3JlLiAgSW4gMjAwMywgcHl0aG9uLW1vZGUuZWwgd2FzIG1vdmVkIHRvIGl0cwotOzsgb3duIFNvdXJjZUZvcmdlIHByb2plY3QgYXBhcnQgZnJvbSB0aGUgUHl0aG9uIHByb2plY3QsIGFuZCBub3cgaXMKLTs7IG1haW50YWluZWQgYnkgdGhlIHZvbHVudGVlcnMgYXQgdGhlIHB5dGhvbi1tb2RlQHB5dGhvbi5vcmcgbWFpbGluZyBsaXN0LgotCi07OyBwZGJ0cmFjayBzdXBwb3J0IGNvbnRyaWJ1dGVkIGJ5IEtlbiBNYW5oZWltZXIsIEFwcmlsIDIwMDEuICBTa2lwIE1vbnRhbmFybwotOzsgaGFzIGFsc28gY29udHJpYnV0ZWQgc2lnbmlmaWNhbnRseSB0byBweXRob24tbW9kZSdzIGRldmVsb3BtZW50LgotCi07OyBQbGVhc2UgdXNlIHRoZSBTb3VyY2VGb3JnZSBQeXRob24gcHJvamVjdCB0byBzdWJtaXQgYnVncyBvcgotOzsgcGF0Y2hlczoKLTs7Ci07OyAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXRob24KLQotOzsgSU5TVEFMTEFUSU9OOgotCi07OyBUbyBpbnN0YWxsLCBqdXN0IGRyb3AgdGhpcyBmaWxlIGludG8gYSBkaXJlY3Rvcnkgb24geW91ciBsb2FkLXBhdGggYW5kCi07OyBieXRlLWNvbXBpbGUgaXQuICBUbyBzZXQgdXAgRW1hY3MgdG8gYXV0b21hdGljYWxseSBlZGl0IGZpbGVzIGVuZGluZyBpbgotOzsgIi5weSIgdXNpbmcgcHl0aG9uLW1vZGUgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciB+Ly5lbWFjcyBmaWxlIChHTlUKLTs7IEVtYWNzKSBvciB+Ly54ZW1hY3MvaW5pdC5lbCBmaWxlIChYRW1hY3MpOgotOzsgICAgKHNldHEgYXV0by1tb2RlLWFsaXN0IChjb25zICcoIlxcLnB5JCIgLiBweXRob24tbW9kZSkgYXV0by1tb2RlLWFsaXN0KSkKLTs7ICAgIChzZXRxIGludGVycHJldGVyLW1vZGUtYWxpc3QgKGNvbnMgJygicHl0aG9uIiAuIHB5dGhvbi1tb2RlKQotOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnByZXRlci1tb2RlLWFsaXN0KSkKLTs7ICAgIChhdXRvbG9hZCAncHl0aG9uLW1vZGUgInB5dGhvbi1tb2RlIiAiUHl0aG9uIGVkaXRpbmcgbW9kZS4iIHQpCi07OwotOzsgSW4gWEVtYWNzIHN5bnRheCBoaWdobGlnaHRpbmcgc2hvdWxkIGJlIGVuYWJsZWQgYXV0b21hdGljYWxseS4gIEluIEdOVQotOzsgRW1hY3MgeW91IG1heSBoYXZlIHRvIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIH4vLmVtYWNzIGZpbGU6Ci07OyAgICAoZ2xvYmFsLWZvbnQtbG9jay1tb2RlIHQpCi07OyAgICAoc2V0cSBmb250LWxvY2stbWF4aW11bS1kZWNvcmF0aW9uIHQpCi0KLTs7IEZPUiBNT1JFIElORk9STUFUSU9OOgotCi07OyBUaGVyZSBpcyBzb21lIGluZm9ybWF0aW9uIG9uIHB5dGhvbi1tb2RlLmVsIGF0Ci0KLTs7ICAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZW1hY3MvcHl0aG9uLW1vZGUvCi07OwotOzsgSXQgZG9lcyBjb250YWluIGxpbmtzIHRvIG90aGVyIHBhY2thZ2VzIHRoYXQgeW91IG1pZ2h0IGZpbmQgdXNlZnVsLAotOzsgc3VjaCBhcyBwZGIgaW50ZXJmYWNlcywgT08tQnJvd3NlciBsaW5rcywgZXRjLgotCi07OyBCVUcgUkVQT1JUSU5HOgotCi07OyBBcyBtZW50aW9uZWQgYWJvdmUsIHBsZWFzZSB1c2UgdGhlIFNvdXJjZUZvcmdlIFB5dGhvbiBwcm9qZWN0IGZvcgotOzsgc3VibWl0dGluZyBidWcgcmVwb3J0cyBvciBwYXRjaGVzLiAgVGhlIG9sZCByZWNvbW1lbmRhdGlvbiwgdG8gdXNlCi07OyBDLWMgQy1iIHdpbGwgc3RpbGwgd29yaywgYnV0IHRob3NlIHJlcG9ydHMgaGF2ZSBhIGhpZ2hlciBjaGFuY2Ugb2YKLTs7IGdldHRpbmcgYnVyaWVkIGluIG15IG1haWxib3guICBQbGVhc2UgaW5jbHVkZSBhIGNvbXBsZXRlLCBidXQKLTs7IGNvbmNpc2UgY29kZSBzYW1wbGUgYW5kIGEgcmVjaXBlIGZvciByZXByb2R1Y2luZyB0aGUgYnVnLiAgU2VuZAotOzsgc3VnZ2VzdGlvbnMgYW5kIG90aGVyIGNvbW1lbnRzIHRvIHB5dGhvbi1tb2RlQHB5dGhvbi5vcmcuCi0KLTs7IFdoZW4gaW4gYSBQeXRob24gbW9kZSBidWZmZXIsIGRvIGEgQy1oIG0gZm9yIG1vcmUgaGVscC4gIEl0J3MKLTs7IGRvdWJ0ZnVsIHRoYXQgYSB0ZXhpbmZvIG1hbnVhbCB3b3VsZCBiZSB2ZXJ5IHVzZWZ1bCwgYnV0IGlmIHlvdQotOzsgd2FudCB0byBjb250cmlidXRlIG9uZSwgSSdsbCBjZXJ0YWlubHkgYWNjZXB0IGl0IQotCi07OzsgQ29kZToKLQotKHJlcXVpcmUgJ2NvbWludCkKLShyZXF1aXJlICdjdXN0b20pCi0ocmVxdWlyZSAnY2wpCi0ocmVxdWlyZSAnY29tcGlsZSkKLShyZXF1aXJlICdhbnNpLWNvbG9yKQotCi0MCi07OyB1c2VyIGRlZmluYWJsZSB2YXJpYWJsZXMKLTs7IHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dgotCi0oZGVmZ3JvdXAgcHl0aG9uIG5pbAotICAiU3VwcG9ydCBmb3IgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSwgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy8+IgotICA6Z3JvdXAgJ2xhbmd1YWdlcwotICA6cHJlZml4ICJweS0iKQotCi0oZGVmY3VzdG9tIHB5LXRhYi1hbHdheXMtaW5kZW50IHQKLSAgIipOb24tbmlsIG1lYW5zIFRBQiBpbiBQeXRob24gbW9kZSBzaG91bGQgYWx3YXlzIHJlaW5kZW50IHRoZSBjdXJyZW50IGxpbmUsCi1yZWdhcmRsZXNzIG9mIHdoZXJlIGluIHRoZSBsaW5lIHBvaW50IGlzIHdoZW4gdGhlIFRBQiBjb21tYW5kIGlzIHVzZWQuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1weXRob24tY29tbWFuZCAicHl0aG9uIgotICAiKlNoZWxsIGNvbW1hbmQgdXNlZCB0byBzdGFydCBQeXRob24gaW50ZXJwcmV0ZXIuIgotICA6dHlwZSAnc3RyaW5nCi0gIDpncm91cCAncHl0aG9uKQotCi0obWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAncHktanB5dGhvbi1jb21tYW5kICdweS1qeXRob24tY29tbWFuZCkKLShkZWZjdXN0b20gcHktanl0aG9uLWNvbW1hbmQgImp5dGhvbiIKLSAgIipTaGVsbCBjb21tYW5kIHVzZWQgdG8gc3RhcnQgdGhlIEp5dGhvbiBpbnRlcnByZXRlci4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24KLSAgOnRhZyAiSnl0aG9uIENvbW1hbmQiKQotCi0oZGVmY3VzdG9tIHB5LWRlZmF1bHQtaW50ZXJwcmV0ZXIgJ2NweXRob24KLSAgIipXaGljaCBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXNlZCBieSBkZWZhdWx0LgotVGhlIHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGNhbiBiZSBlaXRoZXIgYGNweXRob24nIG9yIGBqeXRob24nLgotCi1XaGVuIHRoZSB2YWx1ZSBpcyBgY3B5dGhvbicsIHRoZSB2YXJpYWJsZXMgYHB5LXB5dGhvbi1jb21tYW5kJyBhbmQKLWBweS1weXRob24tY29tbWFuZC1hcmdzJyBhcmUgY29uc3VsdGVkIHRvIGRldGVybWluZSB0aGUgaW50ZXJwcmV0ZXIKLWFuZCBhcmd1bWVudHMgdG8gdXNlLgotCi1XaGVuIHRoZSB2YWx1ZSBpcyBganl0aG9uJywgdGhlIHZhcmlhYmxlcyBgcHktanl0aG9uLWNvbW1hbmQnIGFuZAotYHB5LWp5dGhvbi1jb21tYW5kLWFyZ3MnIGFyZSBjb25zdWx0ZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcnByZXRlcgotYW5kIGFyZ3VtZW50cyB0byB1c2UuCi0KLU5vdGUgdGhhdCB0aGlzIHZhcmlhYmxlIGlzIGNvbnN1bHRlZCBvbmx5IHRoZSBmaXJzdCB0aW1lIHRoYXQgYSBQeXRob24KLW1vZGUgYnVmZmVyIGlzIHZpc2l0ZWQgZHVyaW5nIGFuIEVtYWNzIHNlc3Npb24uICBBZnRlciB0aGF0LCB1c2UKLVxcW3B5LXRvZ2dsZS1zaGVsbHNdIHRvIGNoYW5nZSB0aGUgaW50ZXJwcmV0ZXIgc2hlbGwuIgotICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiUHl0aG9uIChhLmsuYS4gQ1B5dGhvbikiIGNweXRob24pCi0JCSAoY29uc3QgOnRhZyAiSnl0aG9uIiBqeXRob24pKQotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1weXRob24tY29tbWFuZC1hcmdzICcoIi1pIikKLSAgIipMaXN0IG9mIHN0cmluZyBhcmd1bWVudHMgdG8gYmUgdXNlZCB3aGVuIHN0YXJ0aW5nIGEgUHl0aG9uIHNoZWxsLiIKLSAgOnR5cGUgJyhyZXBlYXQgc3RyaW5nKQotICA6Z3JvdXAgJ3B5dGhvbikKLQotKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ3B5LWpweXRob24tY29tbWFuZC1hcmdzICdweS1qeXRob24tY29tbWFuZC1hcmdzKQotKGRlZmN1c3RvbSBweS1qeXRob24tY29tbWFuZC1hcmdzICcoIi1pIikKLSAgIipMaXN0IG9mIHN0cmluZyBhcmd1bWVudHMgdG8gYmUgdXNlZCB3aGVuIHN0YXJ0aW5nIGEgSnl0aG9uIHNoZWxsLiIKLSAgOnR5cGUgJyhyZXBlYXQgc3RyaW5nKQotICA6Z3JvdXAgJ3B5dGhvbgotICA6dGFnICJKeXRob24gQ29tbWFuZCBBcmdzIikKLQotKGRlZmN1c3RvbSBweS1pbmRlbnQtb2Zmc2V0IDQKLSAgIipBbW91bnQgb2Ygb2Zmc2V0IHBlciBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KLWBcXFtweS1ndWVzcy1pbmRlbnQtb2Zmc2V0XScgY2FuIHVzdWFsbHkgZ3Vlc3MgYSBnb29kIHZhbHVlIHdoZW4KLXlvdSdyZSBlZGl0aW5nIHNvbWVvbmUgZWxzZSdzIFB5dGhvbiBjb2RlLiIKLSAgOnR5cGUgJ2ludGVnZXIKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktY29udGludWF0aW9uLW9mZnNldCA0Ci0gICIqQWRkaXRpb25hbCBhbW91bnQgb2Ygb2Zmc2V0IHRvIGdpdmUgZm9yIHNvbWUgY29udGludWF0aW9uIGxpbmVzLgotQ29udGludWF0aW9uIGxpbmVzIGFyZSB0aG9zZSB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvdyBhIGJhY2tzbGFzaAotdGVybWluYXRlZCBsaW5lLiAgT25seSB0aG9zZSBjb250aW51YXRpb24gbGluZXMgZm9yIGEgYmxvY2sgb3BlbmluZwotc3RhdGVtZW50IGFyZSBnaXZlbiB0aGlzIGV4dHJhIG9mZnNldC4iCi0gIDp0eXBlICdpbnRlZ2VyCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LXNtYXJ0LWluZGVudGF0aW9uIHQKLSAgIipTaG91bGQgYHB5dGhvbi1tb2RlJyB0cnkgdG8gYXV0b21hZ2ljYWxseSBzZXQgc29tZSBpbmRlbnRhdGlvbiB2YXJpYWJsZXM/Ci1XaGVuIHRoaXMgdmFyaWFibGUgaXMgbm9uLW5pbCwgdHdvIHRoaW5ncyBoYXBwZW4gd2hlbiBhIGJ1ZmZlciBpcyBzZXQKLXRvIGBweXRob24tbW9kZSc6Ci0KLSAgICAxLiBgcHktaW5kZW50LW9mZnNldCcgaXMgZ3Vlc3NlZCBmcm9tIGV4aXN0aW5nIGNvZGUgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICBPbmx5IGd1ZXNzZWQgdmFsdWVzIGJldHdlZW4gMiBhbmQgOCBhcmUgY29uc2lkZXJlZC4gIElmIGEgdmFsaWQKLSAgICAgICBndWVzcyBjYW4ndCBiZSBtYWRlIChwZXJoYXBzIGJlY2F1c2UgeW91IGFyZSB2aXNpdGluZyBhIG5ldwotICAgICAgIGZpbGUpLCB0aGVuIHRoZSB2YWx1ZSBpbiBgcHktaW5kZW50LW9mZnNldCcgaXMgdXNlZC4KLQotICAgIDIuIGBpbmRlbnQtdGFicy1tb2RlJyBpcyB0dXJuZWQgb2ZmIGlmIGBweS1pbmRlbnQtb2Zmc2V0JyBkb2VzIG5vdAotICAgICAgIGVxdWFsIGB0YWItd2lkdGgnIChgaW5kZW50LXRhYnMtbW9kZScgaXMgbmV2ZXIgdHVybmVkIG9uIGJ5Ci0gICAgICAgUHl0aG9uIG1vZGUpLiAgVGhpcyBtZWFucyB0aGF0IGZvciBuZXdseSB3cml0dGVuIGNvZGUsIHRhYnMgYXJlCi0gICAgICAgb25seSBpbnNlcnRlZCBpbiBpbmRlbnRhdGlvbiBpZiBvbmUgdGFiIGlzIG9uZSBpbmRlbnRhdGlvbgotICAgICAgIGxldmVsLCBvdGhlcndpc2Ugb25seSBzcGFjZXMgYXJlIHVzZWQuCi0KLU5vdGUgdGhhdCBib3RoIHRoZXNlIHNldHRpbmdzIG9jY3VyICphZnRlciogYHB5dGhvbi1tb2RlLWhvb2snIGlzIHJ1biwKLXNvIGlmIHlvdSB3YW50IHRvIGRlZmVhdCB0aGUgYXV0b21hZ2ljIGNvbmZpZ3VyYXRpb24sIHlvdSBtdXN0IGFsc28KLXNldCBgcHktc21hcnQtaW5kZW50YXRpb24nIHRvIG5pbCBpbiB5b3VyIGBweXRob24tbW9kZS1ob29rJy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWFsaWduLW11bHRpbGluZS1zdHJpbmdzLXAgdAotICAiKkZsYWcgZGVzY3JpYmluZyBob3cgbXVsdGktbGluZSB0cmlwbGUgcXVvdGVkIHN0cmluZ3MgYXJlIGFsaWduZWQuCi1XaGVuIHRoaXMgZmxhZyBpcyBub24tbmlsLCBjb250aW51YXRpb24gbGluZXMgYXJlIGxpbmVkIHVwIHVuZGVyIHRoZQotcHJlY2VkaW5nIGxpbmUncyBpbmRlbnRhdGlvbi4gIFdoZW4gdGhpcyBmbGFnIGlzIG5pbCwgY29udGludWF0aW9uCi1saW5lcyBhcmUgYWxpZ25lZCB0byBjb2x1bW4gemVyby4iCi0gIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJBbGlnbiB1bmRlciBwcmVjZWRpbmcgbGluZSIgdCkKLQkJIChjb25zdCA6dGFnICJBbGlnbiB0byBjb2x1bW4gemVybyIgbmlsKSkKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktYmxvY2stY29tbWVudC1wcmVmaXggIiMjIgotICAiKlN0cmluZyB1c2VkIGJ5IFxcW2NvbW1lbnQtcmVnaW9uXSB0byBjb21tZW50IG91dCBhIGJsb2NrIG9mIGNvZGUuCi1UaGlzIHNob3VsZCBmb2xsb3cgdGhlIGNvbnZlbnRpb24gZm9yIG5vbi1pbmRlbnRpbmcgY29tbWVudCBsaW5lcyBzbwotdGhhdCB0aGUgaW5kZW50YXRpb24gY29tbWFuZHMgd29uJ3QgZ2V0IGNvbmZ1c2VkIChpLmUuLCB0aGUgc3RyaW5nCi1zaG91bGQgYmUgb2YgdGhlIGZvcm0gYCN4Li4uJyB3aGVyZSBgeCcgaXMgbm90IGEgYmxhbmsgb3IgYSB0YWIsIGFuZAotYC4uLicgaXMgYXJiaXRyYXJ5KS4gIEhvd2V2ZXIsIHRoaXMgc3RyaW5nIHNob3VsZCBub3QgZW5kIGluIHdoaXRlc3BhY2UuIgotICA6dHlwZSAnc3RyaW5nCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWhvbm9yLWNvbW1lbnQtaW5kZW50YXRpb24gdAotICAiKkNvbnRyb2xzIGhvdyBjb21tZW50IGxpbmVzIGluZmx1ZW5jZSBzdWJzZXF1ZW50IGluZGVudGF0aW9uLgotCi1XaGVuIG5pbCwgYWxsIGNvbW1lbnQgbGluZXMgYXJlIHNraXBwZWQgZm9yIGluZGVudGF0aW9uIHB1cnBvc2VzLCBhbmQKLWlmIHBvc3NpYmxlLCBhIGZhc3RlciBhbGdvcml0aG0gaXMgdXNlZCAoaS5lLiBYL0VtYWNzIDE5IGFuZCBiZXlvbmQpLgotCi1XaGVuIHQsIGxpbmVzIHRoYXQgYmVnaW4gd2l0aCBhIHNpbmdsZSBgIycgYXJlIGEgaGludCB0byBzdWJzZXF1ZW50Ci1saW5lIGluZGVudGF0aW9uLiAgSWYgdGhlIHByZXZpb3VzIGxpbmUgaXMgc3VjaCBhIGNvbW1lbnQgbGluZSAoYXMKLW9wcG9zZWQgdG8gb25lIHRoYXQgc3RhcnRzIHdpdGggYHB5LWJsb2NrLWNvbW1lbnQtcHJlZml4JyksIHRoZW4gaXRzCi1pbmRlbnRhdGlvbiBpcyB1c2VkIGFzIGEgaGludCBmb3IgdGhpcyBsaW5lJ3MgaW5kZW50YXRpb24uICBMaW5lcyB0aGF0Ci1iZWdpbiB3aXRoIGBweS1ibG9jay1jb21tZW50LXByZWZpeCcgYXJlIGlnbm9yZWQgZm9yIGluZGVudGF0aW9uCi1wdXJwb3Nlcy4KLQotV2hlbiBub3QgbmlsIG9yIHQsIGNvbW1lbnQgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGEgc2luZ2xlIGAjJyBhcmUgdXNlZAotYXMgaW5kZW50YXRpb24gaGludHMsIHVubGVzcyB0aGUgY29tbWVudCBjaGFyYWN0ZXIgaXMgaW4gY29sdW1uIHplcm8uIgotICA6dHlwZSAnKGNob2ljZQotCSAgKGNvbnN0IDp0YWcgIlNraXAgYWxsIGNvbW1lbnQgbGluZXMgKGZhc3QpIiBuaWwpCi0JICAoY29uc3QgOnRhZyAiU2luZ2xlICMgYHNldHMnIGluZGVudGF0aW9uIGZvciBuZXh0IGxpbmUiIHQpCi0JICAoY29uc3QgOnRhZyAiU2luZ2xlICMgYHNldHMnIGluZGVudGF0aW9uIGV4Y2VwdCBhdCBjb2x1bW4gemVybyIKLQkJIG90aGVyKQotCSAgKQotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS10ZW1wLWRpcmVjdG9yeQotICAobGV0ICgob2sgJyhsYW1iZGEgKHgpCi0JICAgICAgIChhbmQgeAotCQkgICAgKHNldHEgeCAoZXhwYW5kLWZpbGUtbmFtZSB4KSkgOyBhbHdheXMgdHJ1ZQotCQkgICAgKGZpbGUtZGlyZWN0b3J5LXAgeCkKLQkJICAgIChmaWxlLXdyaXRhYmxlLXAgeCkKLQkJICAgIHgpKSkpCi0gICAgKG9yIChmdW5jYWxsIG9rIChnZXRlbnYgIlRNUERJUiIpKQotCShmdW5jYWxsIG9rICIvdXNyL3RtcCIpCi0JKGZ1bmNhbGwgb2sgIi90bXAiKQotCShmdW5jYWxsIG9rICIvdmFyL3RtcCIpCi0JKGZ1bmNhbGwgb2sgICIuIikKLQkoZXJyb3IKLQkgIkNvdWxkbid0IGZpbmQgYSB1c2FibGUgdGVtcCBkaXJlY3RvcnkgLS0gc2V0IGBweS10ZW1wLWRpcmVjdG9yeSciKSkpCi0gICIqRGlyZWN0b3J5IHVzZWQgZm9yIHRlbXBvcmFyeSBmaWxlcyBjcmVhdGVkIGJ5IGEgKlB5dGhvbiogcHJvY2Vzcy4KLUJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBkaXJlY3RvcnkgZnJvbSB0aGlzIGxpc3QgdGhhdCBleGlzdHMgYW5kIHRoYXQgeW91Ci1jYW4gd3JpdGUgaW50bzogdGhlIHZhbHVlIChpZiBhbnkpIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBUTVBESVIsCi0vdXNyL3RtcCwgL3RtcCwgL3Zhci90bXAsIG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktYmVlcC1pZi10YWItY2hhbmdlIHQKLSAgIipSaW5nIHRoZSBiZWxsIGlmIGB0YWItd2lkdGgnIGlzIGNoYW5nZWQuCi1JZiBhIGNvbW1lbnQgb2YgdGhlIGZvcm0KLQotICBcdCMgdmk6c2V0IHRhYnNpemU9PG51bWJlcj46Ci0KLWlzIGZvdW5kIGJlZm9yZSB0aGUgZmlyc3QgY29kZSBsaW5lIHdoZW4gdGhlIGZpbGUgaXMgZW50ZXJlZCwgYW5kIHRoZQotY3VycmVudCB2YWx1ZSBvZiAodGhlIGdlbmVyYWwgRW1hY3MgdmFyaWFibGUpIGB0YWItd2lkdGgnIGRvZXMgbm90Ci1lcXVhbCA8bnVtYmVyPiwgYHRhYi13aWR0aCcgaXMgc2V0IHRvIDxudW1iZXI+LCBhIG1lc3NhZ2Ugc2F5aW5nIHNvIGlzCi1kaXNwbGF5ZWQgaW4gdGhlIGVjaG8gYXJlYSwgYW5kIGlmIGBweS1iZWVwLWlmLXRhYi1jaGFuZ2UnIGlzIG5vbi1uaWwKLXRoZSBFbWFjcyBiZWxsIGlzIGFsc28gcnVuZyBhcyBhIHdhcm5pbmcuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1qdW1wLW9uLWV4Y2VwdGlvbiB0Ci0gICIqSnVtcCB0byBpbm5lcm1vc3QgZXhjZXB0aW9uIGZyYW1lIGluICpQeXRob24gT3V0cHV0KiBidWZmZXIuCi1XaGVuIHRoaXMgdmFyaWFibGUgaXMgbm9uLW5pbCBhbmQgYW4gZXhjZXB0aW9uIG9jY3VycyB3aGVuIHJ1bm5pbmcKLVB5dGhvbiBjb2RlIHN5bmNocm9ub3VzbHkgaW4gYSBzdWJwcm9jZXNzLCBqdW1wIGltbWVkaWF0ZWx5IHRvIHRoZQotc291cmNlIGNvZGUgb2YgdGhlIGlubmVybW9zdCB0cmFjZWJhY2sgZnJhbWUuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1hc2stYWJvdXQtc2F2ZSB0Ci0gICJJZiBub3QgbmlsLCBhc2sgYWJvdXQgd2hpY2ggYnVmZmVycyB0byBzYXZlIGJlZm9yZSBleGVjdXRpbmcgc29tZSBjb2RlLgotT3RoZXJ3aXNlLCBhbGwgbW9kaWZpZWQgYnVmZmVycyBhcmUgc2F2ZWQgd2l0aG91dCBhc2tpbmcuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1iYWNrc3BhY2UtZnVuY3Rpb24gJ2JhY2t3YXJkLWRlbGV0ZS1jaGFyLXVudGFiaWZ5Ci0gICIqRnVuY3Rpb24gY2FsbGVkIGJ5IGBweS1lbGVjdHJpYy1iYWNrc3BhY2UnIHdoZW4gZGVsZXRpbmcgYmFja3dhcmRzLiIKLSAgOnR5cGUgJ2Z1bmN0aW9uCi0gIDpncm91cCAncHl0aG9uKQotCi0oZGVmY3VzdG9tIHB5LWRlbGV0ZS1mdW5jdGlvbiAnZGVsZXRlLWNoYXIKLSAgIipGdW5jdGlvbiBjYWxsZWQgYnkgYHB5LWVsZWN0cmljLWRlbGV0ZScgd2hlbiBkZWxldGluZyBmb3J3YXJkcy4iCi0gIDp0eXBlICdmdW5jdGlvbgotICA6Z3JvdXAgJ3B5dGhvbikKLQotKGRlZmN1c3RvbSBweS1pbWVudS1zaG93LW1ldGhvZC1hcmdzLXAgbmlsCi0gICIqQ29udHJvbHMgZWNob2luZyBvZiBhcmd1bWVudHMgb2YgZnVuY3Rpb25zICYgbWV0aG9kcyBpbiB0aGUgSW1lbnUgYnVmZmVyLgotV2hlbiBub24tbmlsLCBhcmd1bWVudHMgYXJlIHByaW50ZWQuIgotICA6dHlwZSAnYm9vbGVhbgotICA6Z3JvdXAgJ3B5dGhvbikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAncHktaW5kZW50LW9mZnNldCkKLQotKGRlZmN1c3RvbSBweS1wZGJ0cmFjay1kby10cmFja2luZy1wIHQKLSAgIipDb250cm9scyB3aGV0aGVyIHRoZSBwZGJ0cmFjayBmZWF0dXJlIGlzIGVuYWJsZWQgb3Igbm90LgotV2hlbiBub24tbmlsLCBwZGJ0cmFjayBpcyBlbmFibGVkIGluIGFsbCBjb21pbnQtYmFzZWQgYnVmZmVycywKLWUuZy4gc2hlbGwgYnVmZmVycyBhbmQgdGhlICpQeXRob24qIGJ1ZmZlci4gIFdoZW4gdXNpbmcgcGRiIHRvIGRlYnVnIGEKLVB5dGhvbiBwcm9ncmFtLCBwZGJ0cmFjayBub3RpY2VzIHRoZSBwZGIgcHJvbXB0IGFuZCBkaXNwbGF5cyB0aGUKLXNvdXJjZSBmaWxlIGFuZCBsaW5lIHRoYXQgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCBhdCwgbXVjaCB0aGUgc2FtZSB3YXkKLWFzIGd1ZC1tb2RlIGRvZXMgZm9yIGRlYnVnZ2luZyBDIHByb2dyYW1zIHdpdGggZ2RiLiIKLSAgOnR5cGUgJ2Jvb2xlYW4KLSAgOmdyb3VwICdweXRob24pCi0obWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ3B5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXApCi0KLShkZWZjdXN0b20gcHktcGRidHJhY2stbWlub3ItbW9kZS1zdHJpbmcgIiBQREIiCi0gICIqU3RyaW5nIHRvIHVzZSBpbiB0aGUgbWlub3IgbW9kZSBsaXN0IHdoZW4gcGRidHJhY2sgaXMgZW5hYmxlZC4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktaW1wb3J0LWNoZWNrLXBvaW50LW1heAotICAyMDAwMAotICAiTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzZWFyY2ggZm9yIGEgSmF2YS1pc2ggaW1wb3J0IHN0YXRlbWVudC4KLVdoZW4gYHB5dGhvbi1tb2RlJyB0cmllcyB0byBjYWxjdWxhdGUgdGhlIHNoZWxsIHRvIHVzZSAoZWl0aGVyIGEKLUNQeXRob24gb3IgYSBKeXRob24gc2hlbGwpLCBpdCBsb29rcyBhdCB0aGUgc28tY2FsbGVkIGBzaGViYW5nJyBsaW5lCi0tLSBpLmUuICMhIGxpbmUuICBJZiB0aGF0J3Mgbm90IGF2YWlsYWJsZSwgaXQgbG9va3MgYXQgc29tZSBvZiB0aGUKLWZpbGUgaGVhZGluZyBpbXBvcnRzIHRvIHNlZSBpZiB0aGV5IGxvb2sgSmF2YS1saWtlLiIKLSAgOnR5cGUgJ2ludGVnZXIKLSAgOmdyb3VwICdweXRob24KLSAgKQotCi0obWFrZS1vYnNvbGV0ZS12YXJpYWJsZSAncHktanB5dGhvbi1wYWNrYWdlcyAncHktanl0aG9uLXBhY2thZ2VzKQotKGRlZmN1c3RvbSBweS1qeXRob24tcGFja2FnZXMKLSAgJygiamF2YSIgImphdmF4IiAib3JnIiAiY29tIikKLSAgIkltcG9ydGVkIHBhY2thZ2VzIHRoYXQgaW1wbHkgYGp5dGhvbi1tb2RlJy4iCi0gIDp0eXBlICcocmVwZWF0IHN0cmluZykKLSAgOmdyb3VwICdweXRob24pCi0KLTs7IE5vdCBjdXN0b21pemFibGUKLShkZWZ2YXIgcHktbWFzdGVyLWZpbGUgbmlsCi0gICJJZiBub24tbmlsLCBleGVjdXRlIHRoZSBuYW1lZCBmaWxlIGluc3RlYWQgb2YgdGhlIGJ1ZmZlcidzIGZpbGUuCi1UaGUgaW50ZW50IGlzIHRvIGFsbG93IHlvdSB0byBzZXQgdGhpcyB2YXJpYWJsZSBpbiB0aGUgZmlsZSdzIGxvY2FsCi12YXJpYWJsZSBzZWN0aW9uLCBlLmcuOgotCi0gICAgIyBMb2NhbCBWYXJpYWJsZXM6Ci0gICAgIyBweS1tYXN0ZXItZmlsZTogXCJtYXN0ZXIucHlcIgotICAgICMgRW5kOgotCi1zbyB0aGF0IHR5cGluZyBcXFtweS1leGVjdXRlLWJ1ZmZlcl0gaW4gdGhhdCBidWZmZXIgZXhlY3V0ZXMgdGhlIG5hbWVkCi1tYXN0ZXIgZmlsZSBpbnN0ZWFkIG9mIHRoZSBidWZmZXIncyBmaWxlLiAgSWYgdGhlIGZpbGUgbmFtZSBoYXMgYQotcmVsYXRpdmUgcGF0aCwgdGhlIHZhbHVlIG9mIHZhcmlhYmxlIGBkZWZhdWx0LWRpcmVjdG9yeScgZm9yIHRoZQotYnVmZmVyIGlzIHByZXBlbmRlZCB0byBjb21lIHVwIHdpdGggYSBmaWxlIG5hbWUuIikKLShtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAncHktbWFzdGVyLWZpbGUpCi0KLShkZWZjdXN0b20gcHktcHljaGVja2VyLWNvbW1hbmQgInB5Y2hlY2tlciIKLSAgIipTaGVsbCBjb21tYW5kIHVzZWQgdG8gcnVuIFB5Y2hlY2tlci4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24KLSAgOnRhZyAiUHljaGVja2VyIENvbW1hbmQiKQotCi0oZGVmY3VzdG9tIHB5LXB5Y2hlY2tlci1jb21tYW5kLWFyZ3MgJygiLS1zdGRsaWIiKQotICAiKkxpc3Qgb2Ygc3RyaW5nIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gcHljaGVja2VyLiIKLSAgOnR5cGUgJyhyZXBlYXQgc3RyaW5nKQotICA6Z3JvdXAgJ3B5dGhvbgotICA6dGFnICJQeWNoZWNrZXIgQ29tbWFuZCBBcmdzIikKLQotKGRlZnZhciBweS1zaGVsbC1hbGlzdAotICAnKCgianl0aG9uIiAuICdqeXRob24pCi0gICAgKCJweXRob24iIC4gJ2NweXRob24pKQotICAiKkFsaXN0IG9mIGludGVycHJldGVycyBhbmQgcHl0aG9uIHNoZWxscy4gVXNlZCBieSBgcHktY2hvb3NlLXNoZWxsJwotdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBweXRob24gaW50ZXJwcmV0ZXIgbW9kZSBmb3IgYSBmaWxlLiIpCi0KLShkZWZjdXN0b20gcHktc2hlbGwtaW5wdXQtcHJvbXB0LTEtcmVnZXhwICJePj4+ICIKLSAgIipBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgaW5wdXQgcHJvbXB0IG9mIHRoZSBzaGVsbC4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktc2hlbGwtaW5wdXQtcHJvbXB0LTItcmVnZXhwICJeWy5dWy5dWy5dICIKLSAgIipBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB0aGUgaW5wdXQgcHJvbXB0IG9mIHRoZSBzaGVsbCBhZnRlciB0aGUKLSAgZmlyc3QgbGluZSBvZiBpbnB1dC4iCi0gIDp0eXBlICdzdHJpbmcKLSAgOmdyb3VwICdweXRob24pCi0KLShkZWZjdXN0b20gcHktc2hlbGwtc3dpdGNoLWJ1ZmZlcnMtb24tZXhlY3V0ZSB0Ci0gICIqQ29udHJvbHMgc3dpdGNoaW5nIHRvIHRoZSBQeXRob24gYnVmZmVyIHdoZXJlIGNvbW1hbmRzIGFyZQotICBleGVjdXRlZC4gIFdoZW4gbm9uLW5pbCB0aGUgYnVmZmVyIHN3aXRjaGVzIHRvIHRoZSBQeXRob24gYnVmZmVyLCBpZgotICBub3Qgbm8gc3dpdGNoaW5nIG9jY3Vycy4iCi0gIDp0eXBlICdib29sZWFuCi0gIDpncm91cCAncHl0aG9uKQotCi0MCi07OyBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLTs7IE5PIFVTRVIgREVGSU5BQkxFIFZBUklBQkxFUyBCRVlPTkQgVEhJUyBQT0lOVAotCi0oZGVmdmFyIHB5LWxpbmUtbnVtYmVyLW9mZnNldCAwCi0gICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgYXMgYSByZXN1bHQgb2YgcHktZXhlY3V0ZS1yZWdpb24sIGEKLXN1YnNlcXVlbnQgcHktdXAtZXhjZXB0aW9uIG5lZWRzIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgcmVnaW9uCi1zdGFydGVkLCBpbiBvcmRlciB0byBqdW1wIHRvIHRoZSBjb3JyZWN0IGZpbGUgbGluZS4gIFRoaXMgdmFyaWFibGUgaXMKLXNldCBpbiBweS1leGVjdXRlLXJlZ2lvbiBhbmQgdXNlZCBpbiBweS1qdW1wLXRvLWV4Y2VwdGlvbi4iKQotCi0oZGVmY29uc3QgcHktZW1hY3MtZmVhdHVyZXMKLSAgKGxldCAoZmVhdHVyZXMpCi0gICBmZWF0dXJlcykKLSAgIkEgbGlzdCBvZiBmZWF0dXJlcyBleHRhbnQgaW4gdGhlIEVtYWNzIHlvdSBhcmUgdXNpbmcuCi1UaGVyZSBhcmUgbWFueSBmbGF2b3JzIG9mIEVtYWNzIG91dCB0aGVyZSwgd2l0aCBkaWZmZXJlbnQgbGV2ZWxzIG9mCi1zdXBwb3J0IGZvciBmZWF0dXJlcyBuZWVkZWQgYnkgYHB5dGhvbi1tb2RlJy4iKQotCi07OyBGYWNlIGZvciBOb25lLCBUcnVlLCBGYWxzZSwgc2VsZiwgYW5kIEVsbGlwc2lzCi0oZGVmdmFyIHB5LXBzZXVkby1rZXl3b3JkLWZhY2UgJ3B5LXBzZXVkby1rZXl3b3JkLWZhY2UKLSAgIkZhY2UgZm9yIHBzZXVkbyBrZXl3b3JkcyBpbiBQeXRob24gbW9kZSwgbGlrZSBzZWxmLCBUcnVlLCBGYWxzZSwgRWxsaXBzaXMuIikKLShtYWtlLWZhY2UgJ3B5LXBzZXVkby1rZXl3b3JkLWZhY2UpCi0KLTs7IFBFUCAzMTggZGVjb3JhdG9ycwotKGRlZnZhciBweS1kZWNvcmF0b3JzLWZhY2UgJ3B5LWRlY29yYXRvcnMtZmFjZQotICAiRmFjZSBtZXRob2QgZGVjb3JhdG9ycy4iKQotKG1ha2UtZmFjZSAncHktZGVjb3JhdG9ycy1mYWNlKQotCi07OyBGYWNlIGZvciBidWlsdGlucwotKGRlZnZhciBweS1idWlsdGlucy1mYWNlICdweS1idWlsdGlucy1mYWNlCi0gICJGYWNlIGZvciBidWlsdGlucyBsaWtlIFR5cGVFcnJvciwgb2JqZWN0LCBvcGVuLCBhbmQgZXhlYy4iKQotKG1ha2UtZmFjZSAncHktYnVpbHRpbnMtZmFjZSkKLQotOzsgWFhYLCBUT0RPLCBhbmQgRklYTUUgY29tbWVudHMgYW5kIHN1Y2gKLShkZWZ2YXIgcHktWFhYLXRhZy1mYWNlICdweS1YWFgtdGFnLWZhY2UKLSAgIkZhY2UgZm9yIFhYWCwgVE9ETywgYW5kIEZJWE1FIHRhZ3MiKQotKG1ha2UtZmFjZSAncHktWFhYLXRhZy1mYWNlKQotCi0oZGVmdW4gcHktZm9udC1sb2NrLW1vZGUtaG9vayAoKQotICAob3IgKGZhY2UtZGlmZmVycy1mcm9tLWRlZmF1bHQtcCAncHktcHNldWRvLWtleXdvcmQtZmFjZSkKLSAgICAgIChjb3B5LWZhY2UgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UgJ3B5LXBzZXVkby1rZXl3b3JkLWZhY2UpKQotICAob3IgKGZhY2UtZGlmZmVycy1mcm9tLWRlZmF1bHQtcCAncHktYnVpbHRpbnMtZmFjZSkKLSAgICAgIChjb3B5LWZhY2UgJ2ZvbnQtbG9jay1rZXl3b3JkLWZhY2UgJ3B5LWJ1aWx0aW5zLWZhY2UpKQotICAob3IgKGZhY2UtZGlmZmVycy1mcm9tLWRlZmF1bHQtcCAncHktZGVjb3JhdG9ycy1mYWNlKQotICAgICAgKGNvcHktZmFjZSAncHktcHNldWRvLWtleXdvcmQtZmFjZSAncHktZGVjb3JhdG9ycy1mYWNlKSkKLSAgKG9yIChmYWNlLWRpZmZlcnMtZnJvbS1kZWZhdWx0LXAgJ3B5LVhYWC10YWctZmFjZSkKLSAgICAgIChjb3B5LWZhY2UgJ2ZvbnQtbG9jay1jb21tZW50LWZhY2UgJ3B5LVhYWC10YWctZmFjZSkpCi0gICkKLShhZGQtaG9vayAnZm9udC1sb2NrLW1vZGUtaG9vayAncHktZm9udC1sb2NrLW1vZGUtaG9vaykKLQotKGRlZnZhciBweXRob24tZm9udC1sb2NrLWtleXdvcmRzCi0gIChsZXQgKChrdzEgKG1hcGNvbmNhdCAnaWRlbnRpdHkKLQkJCScoImFuZCIgICAgICAiYXNzZXJ0IiAgICJicmVhayIgICAiY2xhc3MiCi0JCQkgICJjb250aW51ZSIgImRlZiIgICAgICAiZGVsIiAgICAgImVsaWYiCi0JCQkgICJlbHNlIiAgICAgImV4Y2VwdCIgICAiZXhlYyIgICAgImZvciIKLQkJCSAgImZyb20iICAgICAiZ2xvYmFsIiAgICJpZiIgICAgICAiaW1wb3J0IgotCQkJICAiaW4iICAgICAgICJpcyIgICAgICAgImxhbWJkYSIgICJub3QiCi0JCQkgICJvciIgICAgICAgInBhc3MiICAgICAicHJpbnQiICAgInJhaXNlIgotCQkJICAicmV0dXJuIiAgICJ3aGlsZSIgICAgIndpdGgiICAgICJ5aWVsZCIKLQkJCSAgKQotCQkJIlxcfCIpKQotCShrdzIgKG1hcGNvbmNhdCAnaWRlbnRpdHkKLQkJCScoImVsc2U6IiAiZXhjZXB0OiIgImZpbmFsbHk6IiAidHJ5OiIpCi0JCQkiXFx8IikpCi0JKGt3MyAobWFwY29uY2F0ICdpZGVudGl0eQotCQkJOzsgRG9uJ3QgaW5jbHVkZSBUcnVlLCBGYWxzZSwgTm9uZSwgb3IKLQkJCTs7IEVsbGlwc2lzIGluIHRoaXMgbGlzdCwgc2luY2UgdGhleSBhcmUKLQkJCTs7IGFscmVhZHkgZGVmaW5lZCBhcyBwc2V1ZG8ga2V5d29yZHMuCi0JCQknKCJfX2RlYnVnX18iCi0JCQkgICJfX2ltcG9ydF9fIiAiX19uYW1lX18iICJhYnMiICJhcHBseSIgImJhc2VzdHJpbmciCi0JCQkgICJib29sIiAiYnVmZmVyIiAiY2FsbGFibGUiICJjaHIiICJjbGFzc21ldGhvZCIKLQkJCSAgImNtcCIgImNvZXJjZSIgImNvbXBpbGUiICJjb21wbGV4IiAiY29weXJpZ2h0IgotCQkJICAiZGVsYXR0ciIgImRpY3QiICJkaXIiICJkaXZtb2QiCi0JCQkgICJlbnVtZXJhdGUiICJldmFsIiAiZXhlY2ZpbGUiICJleGl0IiAiZmlsZSIKLQkJCSAgImZpbHRlciIgImZsb2F0IiAiZ2V0YXR0ciIgImdsb2JhbHMiICJoYXNhdHRyIgotCQkJICAiaGFzaCIgImhleCIgImlkIiAiaW5wdXQiICJpbnQiICJpbnRlcm4iCi0JCQkgICJpc2luc3RhbmNlIiAiaXNzdWJjbGFzcyIgIml0ZXIiICJsZW4iICJsaWNlbnNlIgotCQkJICAibGlzdCIgImxvY2FscyIgImxvbmciICJtYXAiICJtYXgiICJtaW4iICJvYmplY3QiCi0JCQkgICJvY3QiICJvcGVuIiAib3JkIiAicG93IiAicHJvcGVydHkiICJyYW5nZSIKLQkJCSAgInJhd19pbnB1dCIgInJlZHVjZSIgInJlbG9hZCIgInJlcHIiICJyb3VuZCIKLQkJCSAgInNldGF0dHIiICJzbGljZSIgInN0YXRpY21ldGhvZCIgInN0ciIgInN1bSIKLQkJCSAgInN1cGVyIiAidHVwbGUiICJ0eXBlIiAidW5pY2hyIiAidW5pY29kZSIgInZhcnMiCi0JCQkgICJ4cmFuZ2UiICJ6aXAiKQotCQkJIlxcfCIpKQotCShrdzQgKG1hcGNvbmNhdCAnaWRlbnRpdHkKLQkJCTs7IEV4Y2VwdGlvbnMgYW5kIHdhcm5pbmdzCi0JCQknKCJBcml0aG1ldGljRXJyb3IiICJBc3NlcnRpb25FcnJvciIKLQkJCSAgIkF0dHJpYnV0ZUVycm9yIiAiRGVwcmVjYXRpb25XYXJuaW5nIiAiRU9GRXJyb3IiCi0JCQkgICJFbnZpcm9ubWVudEVycm9yIiAiRXhjZXB0aW9uIgotCQkJICAiRmxvYXRpbmdQb2ludEVycm9yIiAiRnV0dXJlV2FybmluZyIgIklPRXJyb3IiCi0JCQkgICJJbXBvcnRFcnJvciIgIkluZGVudGF0aW9uRXJyb3IiICJJbmRleEVycm9yIgotCQkJICAiS2V5RXJyb3IiICJLZXlib2FyZEludGVycnVwdCIgIkxvb2t1cEVycm9yIgotCQkJICAiTWVtb3J5RXJyb3IiICJOYW1lRXJyb3IiICJOb3RJbXBsZW1lbnRlZCIKLQkJCSAgIk5vdEltcGxlbWVudGVkRXJyb3IiICJPU0Vycm9yIiAiT3ZlcmZsb3dFcnJvciIKLQkJCSAgIk92ZXJmbG93V2FybmluZyIgIlBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmciCi0JCQkgICJSZWZlcmVuY2VFcnJvciIgIlJ1bnRpbWVFcnJvciIgIlJ1bnRpbWVXYXJuaW5nIgotCQkJICAiU3RhbmRhcmRFcnJvciIgIlN0b3BJdGVyYXRpb24iICJTeW50YXhFcnJvciIKLQkJCSAgIlN5bnRheFdhcm5pbmciICJTeXN0ZW1FcnJvciIgIlN5c3RlbUV4aXQiCi0JCQkgICJUYWJFcnJvciIgIlR5cGVFcnJvciIgIlVuYm91bmRMb2NhbEVycm9yIgotCQkJICAiVW5pY29kZURlY29kZUVycm9yIiAiVW5pY29kZUVuY29kZUVycm9yIgotCQkJICAiVW5pY29kZUVycm9yIiAiVW5pY29kZVRyYW5zbGF0ZUVycm9yIgotCQkJICAiVXNlcldhcm5pbmciICJWYWx1ZUVycm9yIiAiV2FybmluZyIKLQkJCSAgIlplcm9EaXZpc2lvbkVycm9yIikKLQkJCSJcXHwiKSkKLQkpCi0gICAgKGxpc3QKLSAgICAgJygiXlsgXHRdKlxcKEAuK1xcKSIgMSAncHktZGVjb3JhdG9ycy1mYWNlKQotICAgICA7OyBrZXl3b3JkcwotICAgICAoY29ucyAoY29uY2F0ICJcXDxcXCgiIGt3MSAiXFwpXFw+WyBcblx0KF0iKSAxKQotICAgICA7OyBidWlsdGlucyB3aGVuIHRoZXkgZG9uJ3QgYXBwZWFyIGFzIG9iamVjdCBhdHRyaWJ1dGVzCi0gICAgIChsaXN0IChjb25jYXQgIlxcKFteLiBcdF1cXHxeXFwpWyBcdF0qXFw8XFwoIiBrdzMgIlxcKVxcPlsgXG5cdChdIikgMgotCSAgICdweS1idWlsdGlucy1mYWNlKQotICAgICA7OyBibG9jayBpbnRyb2R1Y2luZyBrZXl3b3JkcyB3aXRoIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjb2xvbnMuCi0gICAgIDs7IFllcyAiZXhjZXB0IiBpcyBpbiBib3RoIGxpc3RzLgotICAgICAoY29ucyAoY29uY2F0ICJcXDxcXCgiIGt3MiAiXFwpWyBcblx0KF0iKSAxKQotICAgICA7OyBFeGNlcHRpb25zCi0gICAgIChsaXN0IChjb25jYXQgIlxcPFxcKCIga3c0ICJcXClbIFxuXHQ6LChdIikgMSAncHktYnVpbHRpbnMtZmFjZSkKLSAgICAgOzsgYGFzJyBidXQgb25seSBpbiAiaW1wb3J0IGZvbyBhcyBiYXIiIG9yICJ3aXRoIGZvbyBhcyBiYXIiCi0gICAgICcoIlsgXHRdKlxcKFxcPGZyb21cXD4uKlxcKT9cXDxpbXBvcnRcXD4uKlxcPFxcKGFzXFwpXFw+IiAuIDIpCi0gICAgICcoIlsgXHRdKlxcPHdpdGhcXD4uKlxcPFxcKGFzXFwpXFw+IiAuIDEpCi0gICAgIDs7IGNsYXNzZXMKLSAgICAgJygiXFw8Y2xhc3NbIFx0XStcXChbYS16QS1aX10rW2EtekEtWjAtOV9dKlxcKSIgMSBmb250LWxvY2stdHlwZS1mYWNlKQotICAgICA7OyBmdW5jdGlvbnMKLSAgICAgJygiXFw8ZGVmWyBcdF0rXFwoW2EtekEtWl9dK1thLXpBLVowLTlfXSpcXCkiCi0gICAgICAgMSBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQotICAgICA7OyBwc2V1ZG8ta2V5d29yZHMKLSAgICAgJygiXFw8XFwoc2VsZlxcfE5vbmVcXHxUcnVlXFx8RmFsc2VcXHxFbGxpcHNpc1xcKVxcPiIKLSAgICAgICAxIHB5LXBzZXVkby1rZXl3b3JkLWZhY2UpCi0gICAgIDs7IFhYWCwgVE9ETywgYW5kIEZJWE1FIHRhZ3MKLSAgICAgJygiWFhYXFx8VE9ET1xcfEZJWE1FIiAwIHB5LVhYWC10YWctZmFjZSB0KQotICAgICApKQotICAiQWRkaXRpb25hbCBleHByZXNzaW9ucyB0byBoaWdobGlnaHQgaW4gUHl0aG9uIG1vZGUuIikKLShwdXQgJ3B5dGhvbi1tb2RlICdmb250LWxvY2stZGVmYXVsdHMgJyhweXRob24tZm9udC1sb2NrLWtleXdvcmRzKSkKLQotOzsgaGF2ZSB0byBiaW5kIHB5LWZpbGUtcXVldWUgYmVmb3JlIGluc3RhbGxpbmcgdGhlIGtpbGwtZW1hY3MtaG9vawotKGRlZnZhciBweS1maWxlLXF1ZXVlIG5pbAotICAiUXVldWUgb2YgUHl0aG9uIHRlbXAgZmlsZXMgYXdhaXRpbmcgZXhlY3V0aW9uLgotQ3VycmVudGx5LWFjdGl2ZSBmaWxlIGlzIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LiIpCi0KLShkZWZ2YXIgcHktcGRidHJhY2staXMtdHJhY2tpbmctcCBuaWwpCi0KLShkZWZ2YXIgcHktcHljaGVja2VyLWhpc3RvcnkgbmlsKQotCi0KLQwKLTs7IENvbnN0YW50cwotCi0oZGVmY29uc3QgcHktc3RyaW5nbGl0LXJlCi0gIChjb25jYXQKLSAgIDs7IFRoZXNlIGZhaWwgaWYgYmFja3NsYXNoLXF1b3RlIGVuZHMgdGhlIHN0cmluZyAobm90IHdvcnRoCi0gICA7OyBmaXhpbmc/KS4gIFRoZXkgcHJlY2VkZSB0aGUgc2hvcnQgdmVyc2lvbnMgc28gdGhhdCB0aGUgZmlyc3QgdHdvCi0gICA7OyBxdW90ZXMgZG9uJ3QgbG9vayBsaWtlIGFuIGVtcHR5IHNob3J0IHN0cmluZy4KLSAgIDs7Ci0gICA7OyAobWF5YmUgcmF3KSwgbG9uZyBzaW5nbGUgcXVvdGVkIHRyaXBsZSBxdW90ZWQgc3RyaW5ncyAoU1FUUSksCi0gICA7OyB3aXRoIHBvdGVudGlhbCBlbWJlZGRlZCBzaW5nbGUgcXVvdGVzCi0gICAiW3JSXT8nJydbXiddKlxcKFxcKCdbXiddXFx8JydbXiddXFwpW14nXSpcXCkqJycnIgotICAgIlxcfCIKLSAgIDs7IChtYXliZSByYXcpLCBsb25nIGRvdWJsZSBxdW90ZWQgdHJpcGxlIHF1b3RlZCBzdHJpbmdzIChEUVRRKSwKLSAgIDs7IHdpdGggcG90ZW50aWFsIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMKLSAgICJbclJdP1wiXCJcIlteXCJdKlxcKFxcKFwiW15cIl1cXHxcIlwiW15cIl1cXClbXlwiXSpcXCkqXCJcIlwiIgotICAgIlxcfCIKLSAgICJbclJdPydcXChbXidcblxcXVxcfFxcXFwuXFwpKiciCTsgc2luZ2xlLXF1b3RlZAotICAgIlxcfCIJCQkJOyBvcgotICAgIltyUl0/XCJcXChbXlwiXG5cXF1cXHxcXFxcLlxcKSpcIiIJOyBkb3VibGUtcXVvdGVkCi0gICApCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYSBQeXRob24gc3RyaW5nIGxpdGVyYWwuIikKLQotKGRlZmNvbnN0IHB5LWNvbnRpbnVlZC1yZQotICA7OyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGEgdHJhaWxpbmcgYmFja3NsYXNoIGRvZXMgbm90IG1lYW4KLSAgOzsgY29udGludWF0aW9uIGlmIGl0J3MgaW4gYSBjb21tZW50Ci0gIChjb25jYXQKLSAgICJcXCgiICJbXiMnXCJcblxcXSIgIlxcfCIgcHktc3RyaW5nbGl0LXJlICJcXCkqIgotICAgIlxcXFwkIikKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBQeXRob24gYmFja3NsYXNoIGNvbnRpbnVhdGlvbiBsaW5lcy4iKQotCi0oZGVmY29uc3QgcHktYmxhbmstb3ItY29tbWVudC1yZSAiWyBcdF0qXFwoJFxcfCNcXCkiCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYSBibGFuayBvciBjb21tZW50IGxpbmUuIikKLQotKGRlZmNvbnN0IHB5LW91dGRlbnQtcmUKLSAgKGNvbmNhdCAiXFwoIiAobWFwY29uY2F0ICdpZGVudGl0eQotCQkJICAgJygiZWxzZToiCi0JCQkgICAgICJleGNlcHRcXChcXHMgKy4qXFwpPzoiCi0JCQkgICAgICJmaW5hbGx5OiIKLQkJCSAgICAgImVsaWZcXHMgKy4qOiIpCi0JCQkgICAiXFx8IikKLQkgICJcXCkiKQotICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIHN0YXRlbWVudHMgdG8gYmUgZGVkZW50ZWQgb25lIGxldmVsLiIpCi0KLShkZWZjb25zdCBweS1ibG9jay1jbG9zaW5nLWtleXdvcmRzLXJlCi0gICJcXChyZXR1cm5cXHxyYWlzZVxcfGJyZWFrXFx8Y29udGludWVcXHxwYXNzXFwpIgotICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGtleXdvcmRzIHdoaWNoIHR5cGljYWxseSBjbG9zZSBhIGJsb2NrLiIpCi0KLShkZWZjb25zdCBweS1uby1vdXRkZW50LXJlCi0gIChjb25jYXQKLSAgICJcXCgiCi0gICAobWFwY29uY2F0ICdpZGVudGl0eQotCSAgICAgIChsaXN0ICJ0cnk6IgotCQkgICAgImV4Y2VwdFxcKFxccyArLipcXCk/OiIKLQkJICAgICJ3aGlsZVxccyArLio6IgotCQkgICAgImZvclxccyArLio6IgotCQkgICAgImlmXFxzICsuKjoiCi0JCSAgICAiZWxpZlxccyArLio6IgotCQkgICAgKGNvbmNhdCBweS1ibG9jay1jbG9zaW5nLWtleXdvcmRzLXJlICJbIFx0XG5dIikKLQkJICAgICkKLQkgICAgICAiXFx8IikKLQkgICJcXCkiKQotICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGxpbmVzIG5vdCB0byBkZWRlbnQgYWZ0ZXIuIikKLQotKGRlZnZhciBweS10cmFjZWJhY2stbGluZS1yZQotICAiWyBcdF0rRmlsZSBcIlxcKFteXCJdK1xcKVwiLCBsaW5lIFxcKFswLTldK1xcKSIKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGRlc2NyaWJlcyB0cmFjZWJhY2tzLiIpCi0KLTs7IHBkYnRyYWNrIGNvbnN0YW50cwotKGRlZmNvbnN0IHB5LXBkYnRyYWNrLXN0YWNrLWVudHJ5LXJlZ2V4cAotOyAgIl4+IFxcKFteKF0rXFwpKFxcKFswLTldK1xcKSlcXChbP2EtekEtWjAtOV9dK1xcKSgpIgotICAiXj4gXFwoLipcXCkoXFwoWzAtOV0rXFwpKVxcKFs/YS16QS1aMC05X10rXFwpKCkiCi0gICJSZWd1bGFyIGV4cHJlc3Npb24gcGRidHJhY2sgdXNlcyB0byBmaW5kIGEgc3RhY2sgdHJhY2UgZW50cnkuIikKLQotKGRlZmNvbnN0IHB5LXBkYnRyYWNrLWlucHV0LXByb21wdCAiXG5bKDxdKltQcF1kYls+KV0rICIKLSAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBwZGJ0cmFjayB1c2VzIHRvIHJlY29nbml6ZSBhIHBkYiBwcm9tcHQuIikKLQotKGRlZmNvbnN0IHB5LXBkYnRyYWNrLXRyYWNrLXJhbmdlIDEwMDAwCi0gICJNYXggbnVtYmVyIG9mIGNoYXJhY3RlcnMgZnJvbSBlbmQgb2YgYnVmZmVyIHRvIHNlYXJjaCBmb3Igc3RhY2sgZW50cnkuIikKLQotCi0MCi07OyBNYWpvciBtb2RlIGJvaWxlcnBsYXRlCi0KLTs7IGRlZmluZSBhIG1vZGUtc3BlY2lmaWMgYWJicmV2IHRhYmxlIGZvciB0aG9zZSB3aG8gdXNlIHN1Y2ggdGhpbmdzCi0oZGVmdmFyIHB5dGhvbi1tb2RlLWFiYnJldi10YWJsZSBuaWwKLSAgIkFiYnJldiB0YWJsZSBpbiB1c2UgaW4gYHB5dGhvbi1tb2RlJyBidWZmZXJzLiIpCi0oZGVmaW5lLWFiYnJldi10YWJsZSAncHl0aG9uLW1vZGUtYWJicmV2LXRhYmxlIG5pbCkKLQotKGRlZnZhciBweXRob24tbW9kZS1ob29rIG5pbAotICAiKkhvb2sgY2FsbGVkIGJ5IGBweXRob24tbW9kZScuIikKLQotKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUgJ2pweXRob24tbW9kZS1ob29rICdqeXRob24tbW9kZS1ob29rKQotKGRlZnZhciBqeXRob24tbW9kZS1ob29rIG5pbAotICAiKkhvb2sgY2FsbGVkIGJ5IGBqeXRob24tbW9kZScuIGBqeXRob24tbW9kZScgYWxzbyBjYWxscwotYHB5dGhvbi1tb2RlLWhvb2snLiIpCi0KLShkZWZ2YXIgcHktc2hlbGwtaG9vayBuaWwKLSAgIipIb29rIGNhbGxlZCBieSBgcHktc2hlbGwnLiIpCi0KLTs7IEluIHByZXZpb3VzIHZlcnNpb24gb2YgcHl0aG9uLW1vZGUuZWwsIHRoZSBob29rIHdhcyBpbmNvcnJlY3RseQotOzsgY2FsbGVkIHB5LW1vZGUtaG9vaywgYW5kIHdhcyBub3QgZGVmdmFyJ2QuICBEZXByZWNhdGUgaXRzIHVzZS4KLShhbmQgKGZib3VuZHAgJ21ha2Utb2Jzb2xldGUtdmFyaWFibGUpCi0gICAgIChtYWtlLW9ic29sZXRlLXZhcmlhYmxlICdweS1tb2RlLWhvb2sgJ3B5dGhvbi1tb2RlLWhvb2spKQotCi0oZGVmdmFyIHB5LW1vZGUtbWFwICgpCi0gICJLZXltYXAgdXNlZCBpbiBgcHl0aG9uLW1vZGUnIGJ1ZmZlcnMuIikKLShpZiBweS1tb2RlLW1hcAotICAgIG5pbAotICAoc2V0cSBweS1tb2RlLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKLSAgOzsgZWxlY3RyaWMga2V5cwotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiOiIgJ3B5LWVsZWN0cmljLWNvbG9uKQotICA7OyBpbmRlbnRhdGlvbiBsZXZlbCBtb2RpZmllcnMKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1sIiAgJ3B5LXNoaWZ0LXJlZ2lvbi1sZWZ0KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXIiICAncHktc2hpZnQtcmVnaW9uLXJpZ2h0KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtYzwiICAgICAncHktc2hpZnQtcmVnaW9uLWxlZnQpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jPiIgICAgICdweS1zaGlmdC1yZWdpb24tcmlnaHQpCi0gIDs7IHN1YnByb2Nlc3MgY29tbWFuZHMKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1jIiAgJ3B5LWV4ZWN1dGUtYnVmZmVyKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLW0iICAncHktZXhlY3V0ZS1pbXBvcnQtb3ItcmVsb2FkKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLXMiICAncHktZXhlY3V0ZS1zdHJpbmcpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jfCIgICAgICdweS1leGVjdXRlLXJlZ2lvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxlXEMteCIgICAgJ3B5LWV4ZWN1dGUtZGVmLW9yLWNsYXNzKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtYyEiICAgICAncHktc2hlbGwpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtdCIgICdweS10b2dnbGUtc2hlbGxzKQotICA7OyBDYXV0aW9uISAgRW50ZXIgaGVyZSBhdCB5b3VyIG93biByaXNrLiAgV2UgYXJlIHRyeWluZyB0byBzdXBwb3J0Ci0gIDs7IHNldmVyYWwgYmVoYXZpb3JzIGFuZCBpdCBnZXRzIGRpc2d1c3RpbmcuIDotKCBUaGlzIGxvZ2ljIHJpcHBlZAotICA7OyBsYXJnZWx5IGZyb20gQ0MgTW9kZS4KLSAgOzsKLSAgOzsgSW4gWEVtYWNzIDE5LCBFbWFjcyAxOSwgYW5kIEVtYWNzIDIwLCB3ZSB1c2UgdGhpcyB0byBiaW5kCi0gIDs7IGJhY2t3YXJkcyBkZWxldGlvbiBiZWhhdmlvciB0byBERUwsIHdoaWNoIGJvdGggRGVsZXRlIGFuZAotICA7OyBCYWNrc3BhY2UgZ2V0IHRyYW5zbGF0ZWQgdG8uICBUaGVyZSdzIG5vIHdheSB0byBzZXBhcmF0ZSB0aGlzCi0gIDs7IGJlaGF2aW9yIGluIGEgY2xlYW4gd2F5LCBzbyBkZWFsIHdpdGggaXQhICBCZXNpZGVzLCBpdCdzIGJlZW4KLSAgOzsgdGhpcyB3YXkgc2luY2UgdGhlIGRhd24gb2YgdGltZS4KLSAgKGlmIChub3QgKGJvdW5kcCAnZGVsZXRlLWtleS1kZWxldGVzLWZvcndhcmQpKQotICAgICAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlwxNzciICdweS1lbGVjdHJpYy1iYWNrc3BhY2UpCi0gICAgOzsgSG93ZXZlciwgWEVtYWNzIDIwIGFjdHVhbGx5IGFjaGlldmVkIGVubGlnaHRlbm1lbnQuICBJdCBpcwotICAgIDs7IHBvc3NpYmxlIHRvIHNhbmVseSBkZWZpbmUgYm90aCBiYWNrd2FyZCBhbmQgZm9yd2FyZCBkZWxldGlvbgotICAgIDs7IGJlaGF2aW9yIHVuZGVyIFggc2VwYXJhdGVseSAoVFRZcyBhcmUgZm9yZXZlciBiZXlvbmQgaG9wZSwgYnV0Ci0gICAgOzsgd2hvIGNhcmVzPyAgWEVtYWNzIDIwIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIHdpdGggdGhlc2UgdG9vKS4KLSAgICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCBbZGVsZXRlXSAgICAncHktZWxlY3RyaWMtZGVsZXRlKQotICAgIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwIFtiYWNrc3BhY2VdICdweS1lbGVjdHJpYy1iYWNrc3BhY2UpKQotICA7OyBTZXBhcmF0ZSBNLUJTIGZyb20gQy1NLWguICBUaGUgZm9ybWVyIHNob3VsZCByZW1haW4KLSAgOzsgYmFja3dhcmQta2lsbC13b3JkLgotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCBbKGNvbnRyb2wgbWV0YSBoKV0gJ3B5LW1hcmstZGVmLW9yLWNsYXNzKQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLWsiICAncHktbWFyay1ibG9jaykKLSAgOzsgTWlzY2VsbGFuZW91cwotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtYzoiICAgICAncHktZ3Vlc3MtaW5kZW50LW9mZnNldCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcdCIgICAgJ3B5LWluZGVudC1yZWdpb24pCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtZCIgICdweS1wZGJ0cmFjay10b2dnbGUtc3RhY2stdHJhY2tpbmcpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtbiIgICdweS1uZXh0LXN0YXRlbWVudCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy1wIiAgJ3B5LXByZXZpb3VzLXN0YXRlbWVudCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy11IiAgJ3B5LWdvdG8tYmxvY2stdXApCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jIyIgICAgICdweS1jb21tZW50LXJlZ2lvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWM/IiAgICAgJ3B5LWRlc2NyaWJlLW1vZGUpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jXEMtaCIgICdweS1oZWxwLWF0LXBvaW50KQotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXGVcQy1hIiAgICAncHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcykKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxlXEMtZSIgICAgJ3B5LWVuZC1vZi1kZWYtb3ItY2xhc3MpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jLSIgICAgICdweS11cC1leGNlcHRpb24pCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwICJcQy1jPSIgICAgICdweS1kb3duLWV4Y2VwdGlvbikKLSAgOzsgc3R1ZmYgdGhhdCBpcyBgc3RhbmRhcmQnIGJ1dCBkb2Vzbid0IGludGVyZmFjZSB3ZWxsIHdpdGgKLSAgOzsgcHl0aG9uLW1vZGUsIHdoaWNoIGZvcmNlcyB1cyB0byByZWJpbmQgdG8gc3BlY2lhbCBjb21tYW5kcwotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMteG5kIiAgICAncHktbmFycm93LXRvLWRlZnVuKQotICA7OyBpbmZvcm1hdGlvbgotICAoZGVmaW5lLWtleSBweS1tb2RlLW1hcCAiXEMtY1xDLWIiICdweS1zdWJtaXQtYnVnLXJlcG9ydCkKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy12IiAncHktdmVyc2lvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLWNcQy13IiAncHktcHljaGVja2VyLXJ1bikKLSAgOzsgc2hhZG93IGdsb2JhbCBiaW5kaW5ncyBmb3IgbmV3bGluZS1hbmQtaW5kZW50IHcvIHRoZSBweS0gdmVyc2lvbi4KLSAgOzsgQkFXIC0gdGhpcyBpcyBleHRyZW1lbHkgYmFkIGZvcm0sIGJ1dCBJJ20gbm90IGdvaW5nIHRvIGNoYW5nZSBpdAotICA7OyBmb3Igbm93LgotICAobWFwY2FyICMnKGxhbWJkYSAoa2V5KQotCSAgICAgIChkZWZpbmUta2V5IHB5LW1vZGUtbWFwIGtleSAncHktbmV3bGluZS1hbmQtaW5kZW50KSkKLQkgICh3aGVyZS1pcy1pbnRlcm5hbCAnbmV3bGluZS1hbmQtaW5kZW50KSkKLSAgOzsgRm9yY2UgUkVUIHRvIGJlIHB5LW5ld2xpbmUtYW5kLWluZGVudCBldmVuIGlmIGl0IGRpZG4ndCBnZXQKLSAgOzsgbWFwcGVkIGJ5IHRoZSBhYm92ZSBjb2RlLiAgbW90aXZhdGlvbjogRW1hY3MnIGRlZmF1bHQgYmluZGluZyBmb3IKLSAgOzsgUkVUIGlzIGBuZXdsaW5lJyBhbmQgQy1qIGlzIGBuZXdsaW5lLWFuZC1pbmRlbnQnLiAgTW9zdCBQeXRob25lZXJzCi0gIDs7IGV4cGVjdCBSRVQgdG8gZG8gYSBgcHktbmV3bGluZS1hbmQtaW5kZW50JyBhbmQgYW55IEVtYWNzZXJzIHdobwotICA7OyBkaXNsaWtlIHRoaXMgYXJlIHByb2JhYmx5IGtub3dsZWRnZWFibGUgZW5vdWdoIHRvIGRvIGEgcmViaW5kLgotICA7OyBIb3dldmVyLCB3ZSBkbyAqbm90KiBjaGFuZ2UgQy1qIHNpbmNlIG1hbnkgRW1hY3NlcnMgaGF2ZSBhbHJlYWR5Ci0gIDs7IHN3YXBwZWQgUkVUIGFuZCBDLWogYW5kIHRoZXkgZG9uJ3Qgd2FudCBDLWogYm91bmQgdG8gYG5ld2xpbmUnIHRvCi0gIDs7IGNoYW5nZS4KLSAgKGRlZmluZS1rZXkgcHktbW9kZS1tYXAgIlxDLW0iICdweS1uZXdsaW5lLWFuZC1pbmRlbnQpCi0gICkKLQotKGRlZnZhciBweS1tb2RlLW91dHB1dC1tYXAgbmlsCi0gICJLZXltYXAgdXNlZCBpbiAqUHl0aG9uIE91dHB1dCogYnVmZmVycy4iKQotKGlmIHB5LW1vZGUtb3V0cHV0LW1hcAotICAgIG5pbAotICAoc2V0cSBweS1tb2RlLW91dHB1dC1tYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkpCi0gIChkZWZpbmUta2V5IHB5LW1vZGUtb3V0cHV0LW1hcCBbYnV0dG9uMl0gICdweS1tb3VzZXRvLWV4Y2VwdGlvbikKLSAgKGRlZmluZS1rZXkgcHktbW9kZS1vdXRwdXQtbWFwICJcQy1jXEMtYyIgJ3B5LWdvdG8tZXhjZXB0aW9uKQotICA7OyBUQkQ6IERpc2FibGUgYWxsIHNlbGYtaW5zZXJ0aW5nIGtleXMuICBUaGlzIGlzIGJvZ3VzLCB3ZSBzaG91bGQKLSAgOzsgcmVhbGx5IGltcGxlbWVudCB0aGlzIGFzICpQeXRob24gT3V0cHV0KiBidWZmZXIgYmVpbmcgcmVhZC1vbmx5Ci0gIChtYXBjYXIgIycgKGxhbWJkYSAoa2V5KQotCSAgICAgICAoZGVmaW5lLWtleSBweS1tb2RlLW91dHB1dC1tYXAga2V5Ci0JCSAjJyhsYW1iZGEgKCkgKGludGVyYWN0aXZlKSAoYmVlcCkpKSkKLQkgICAgICh3aGVyZS1pcy1pbnRlcm5hbCAnc2VsZi1pbnNlcnQtY29tbWFuZCkpCi0gICkKLQotKGRlZnZhciBweS1zaGVsbC1tYXAgbmlsCi0gICJLZXltYXAgdXNlZCBpbiAqUHl0aG9uKiBzaGVsbCBidWZmZXJzLiIpCi0oaWYgcHktc2hlbGwtbWFwCi0gICAgbmlsCi0gIChzZXRxIHB5LXNoZWxsLW1hcCAoY29weS1rZXltYXAgY29taW50LW1vZGUtbWFwKSkKLSAgKGRlZmluZS1rZXkgcHktc2hlbGwtbWFwIFt0YWJdICAgJ3RhYi10by10YWItc3RvcCkKLSAgKGRlZmluZS1rZXkgcHktc2hlbGwtbWFwICJcQy1jLSIgJ3B5LXVwLWV4Y2VwdGlvbikKLSAgKGRlZmluZS1rZXkgcHktc2hlbGwtbWFwICJcQy1jPSIgJ3B5LWRvd24tZXhjZXB0aW9uKQotICApCi0KLShkZWZ2YXIgcHktbW9kZS1zeW50YXgtdGFibGUgbmlsCi0gICJTeW50YXggdGFibGUgdXNlZCBpbiBgcHl0aG9uLW1vZGUnIGJ1ZmZlcnMuIikKLSh3aGVuIChub3QgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChzZXRxIHB5LW1vZGUtc3ludGF4LXRhYmxlIChtYWtlLXN5bnRheC10YWJsZSkpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cKCAiKCkiIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCkgIikoIiBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xbICIoXSIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cXSAiKVsiIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XHsgIih9IiBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1x9ICIpeyIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIDs7IEFkZCBvcGVyYXRvciBzeW1ib2xzIG1pc2Fzc2lnbmVkIGluIHRoZSBzdGQgdGFibGUKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wkICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cJSAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCYgIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wqICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cKyAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XC0gIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wvICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cPCAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XD0gIi4iICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1w+ICIuIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cfCAiLiIgIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICA7OyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCB1bmRlcnNjb3JlIGlzIHdvcmQgY2xhc3MgaW5zdGVhZCBvZgotICA7OyBzeW1ib2wgY2xhc3MuICBHTlUgY29udmVudGlvbnMgc2F5IGl0IHNob3VsZCBiZSBzeW1ib2wgY2xhc3MsIGJ1dAotICA7OyB0aGVyZSdzIGEgbmF0dXJhbCBjb25mbGljdCBiZXR3ZWVuIHdoYXQgbWFqb3IgbW9kZSBhdXRob3JzIHdhbnQKLSAgOzsgYW5kIHdoYXQgdXNlcnMgZXhwZWN0IGZyb20gYGZvcndhcmQtd29yZCcgYW5kIGBiYWNrd2FyZC13b3JkJy4KLSAgOzsgR3VpZG8gYW5kIEkgaGF2ZSBoYXNoZWQgdGhpcyBvdXQgYW5kIGhhdmUgZGVjaWRlZCB0byBrZWVwCi0gIDs7IHVuZGVyc2NvcmUgaW4gd29yZCBjbGFzcy4gIElmIHlvdSdyZSB0ZW1wdGVkIHRvIGNoYW5nZSBpdCwgdHJ5Ci0gIDs7IGJpbmRpbmcgTS1mIGFuZCBNLWIgdG8gcHktZm9yd2FyZC1pbnRvLW5vbWVuY2xhdHVyZSBhbmQKLSAgOzsgcHktYmFja3dhcmQtaW50by1ub21lbmNsYXR1cmUgaW5zdGVhZC4gIFRoaXMgZG9lc24ndCBoZWxwIGluIGFsbAotICA7OyBzaXR1YXRpb25zIHdoZXJlIHlvdSdkIHdhbnQgdGhlIGRpZmZlcmVudCBiZWhhdmlvcgotICA7OyAoZS5nLiBiYWNrd2FyZC1raWxsLXdvcmQpLgotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XF8gInciICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgOzsgQm90aCBzaW5nbGUgcXVvdGUgYW5kIGRvdWJsZSBxdW90ZSBhcmUgc3RyaW5nIGRlbGltaXRlcnMKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1wnICJcIiIgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChtb2RpZnktc3ludGF4LWVudHJ5ID9cIiAiXCIiIHB5LW1vZGUtc3ludGF4LXRhYmxlKQotICA7OyBiYWNrcXVvdGUgaXMgb3BlbiBhbmQgY2xvc2UgcGFyZW4KLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xgICIkIiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIDs7IGNvbW1lbnQgZGVsaW1pdGVycwotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCMgIjwiICBweS1tb2RlLXN5bnRheC10YWJsZSkKLSAgKG1vZGlmeS1zeW50YXgtZW50cnkgP1xuICI+IiAgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gICkKLQotOzsgQW4gYXV4aWxpYXJ5IHN5bnRheCB0YWJsZSB3aGljaCBwbGFjZXMgdW5kZXJzY29yZSBhbmQgZG90IGluIHRoZQotOzsgc3ltYm9sIGNsYXNzIGZvciBzaW1wbGljaXR5Ci0oZGVmdmFyIHB5LWRvdHRlZC1leHByZXNzaW9uLXN5bnRheC10YWJsZSBuaWwKLSAgIlN5bnRheCB0YWJsZSB1c2VkIHRvIGlkZW50aWZ5IFB5dGhvbiBkb3R0ZWQgZXhwcmVzc2lvbnMuIikKLSh3aGVuIChub3QgcHktZG90dGVkLWV4cHJlc3Npb24tc3ludGF4LXRhYmxlKQotICAoc2V0cSBweS1kb3R0ZWQtZXhwcmVzc2lvbi1zeW50YXgtdGFibGUKLQkoY29weS1zeW50YXgtdGFibGUgcHktbW9kZS1zeW50YXgtdGFibGUpKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/XyAiXyIgcHktZG90dGVkLWV4cHJlc3Npb24tc3ludGF4LXRhYmxlKQotICAobW9kaWZ5LXN5bnRheC1lbnRyeSA/LiAiXyIgcHktZG90dGVkLWV4cHJlc3Npb24tc3ludGF4LXRhYmxlKSkKLQotCi0MCi07OyBVdGlsaXRpZXMKLShkZWZtYWNybyBweS1zYWZlICgmcmVzdCBib2R5KQotICAiU2FmZWx5IGV4ZWN1dGUgQk9EWSwgcmV0dXJuIG5pbCBpZiBhbiBlcnJvciBvY2N1cnJlZC4iCi0gIChgIChjb25kaXRpb24tY2FzZSBuaWwKLQkgKHByb2duICgsQCBib2R5KSkKLSAgICAgICAoZXJyb3IgbmlsKSkpKQotCi0oZGVmc3Vic3QgcHkta2VlcC1yZWdpb24tYWN0aXZlICgpCi0gICJLZWVwIHRoZSByZWdpb24gYWN0aXZlIGluIFhFbWFjcy4iCi0gIDs7IElnbm9yZSBieXRlLWNvbXBpbGVyIHdhcm5pbmdzIHlvdSBtaWdodCBzZWUuICBBbHNvIG5vdGUgdGhhdAotICA7OyBGU0YncyBFbWFjcyAxOSBkb2VzIGl0IGRpZmZlcmVudGx5OyBpdHMgcG9saWN5IGRvZXNuJ3QgcmVxdWlyZSB1cwotICA7OyB0byB0YWtlIGV4cGxpY2l0IGFjdGlvbi4KLSAgKGFuZCAoYm91bmRwICd6bWFjcy1yZWdpb24tc3RheXMpCi0gICAgICAgKHNldHEgem1hY3MtcmVnaW9uLXN0YXlzIHQpKSkKLQotKGRlZnN1YnN0IHB5LXBvaW50IChwb3NpdGlvbikKLSAgIlJldHVybnMgdGhlIHZhbHVlIG9mIHBvaW50IGF0IGNlcnRhaW4gY29tbW9ubHkgcmVmZXJlbmNlZCBQT1NJVElPTnMuCi1QT1NJVElPTiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKLQotICBib2wgIC0tIGJlZ2lubmluZyBvZiBsaW5lCi0gIGVvbCAgLS0gZW5kIG9mIGxpbmUKLSAgYm9kICAtLSBiZWdpbm5pbmcgb2YgZGVmIG9yIGNsYXNzCi0gIGVvZCAgLS0gZW5kIG9mIGRlZiBvciBjbGFzcwotICBib2IgIC0tIGJlZ2lubmluZyBvZiBidWZmZXIKLSAgZW9iICAtLSBlbmQgb2YgYnVmZmVyCi0gIGJvaSAgLS0gYmFjayB0byBpbmRlbnRhdGlvbgotICBib3MgIC0tIGJlZ2lubmluZyBvZiBzdGF0ZW1lbnQKLQotVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtb2RpZnkgcG9pbnQgb3IgbWFyay4iCi0gIChsZXQgKChoZXJlIChwb2ludCkpKQotICAgIChjb25kCi0gICAgICgoZXEgcG9zaXRpb24gJ2JvbCkgKGJlZ2lubmluZy1vZi1saW5lKSkKLSAgICAgKChlcSBwb3NpdGlvbiAnZW9sKSAoZW5kLW9mLWxpbmUpKQotICAgICAoKGVxIHBvc2l0aW9uICdib2QpIChweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzICdlaXRoZXIpKQotICAgICAoKGVxIHBvc2l0aW9uICdlb2QpIChweS1lbmQtb2YtZGVmLW9yLWNsYXNzICdlaXRoZXIpKQotICAgICA7OyBLaW5kIG9mIGZ1bm55LCBJIGtub3csIGJ1dCB1c2VmdWwgZm9yIHB5LXVwLWV4Y2VwdGlvbi4KLSAgICAgKChlcSBwb3NpdGlvbiAnYm9iKSAoYmVnaW5uaW5nLW9mLWJ1ZmZlcikpCi0gICAgICgoZXEgcG9zaXRpb24gJ2VvYikgKGVuZC1vZi1idWZmZXIpKQotICAgICAoKGVxIHBvc2l0aW9uICdib2kpIChiYWNrLXRvLWluZGVudGF0aW9uKSkKLSAgICAgKChlcSBwb3NpdGlvbiAnYm9zKSAocHktZ290by1pbml0aWFsLWxpbmUpKQotICAgICAodCAoZXJyb3IgIlVua25vd24gYnVmZmVyIHBvc2l0aW9uIHJlcXVlc3RlZDogJXMiIHBvc2l0aW9uKSkKLSAgICAgKQotICAgIChwcm9nMQotCShwb2ludCkKLSAgICAgIChnb3RvLWNoYXIgaGVyZSkpKSkKLQotKGRlZnN1YnN0IHB5LWhpZ2hsaWdodC1saW5lIChmcm9tIHRvIGZpbGUgbGluZSkKLSAgKGNvbmQKLSAgICgoZmJvdW5kcCAnbWFrZS1leHRlbnQpCi0gICAgOzsgWEVtYWNzCi0gICAgKGxldCAoKGUgKG1ha2UtZXh0ZW50IGZyb20gdG8pKSkKLSAgICAgIChzZXQtZXh0ZW50LXByb3BlcnR5IGUgJ21vdXNlLWZhY2UgJ2hpZ2hsaWdodCkKLSAgICAgIChzZXQtZXh0ZW50LXByb3BlcnR5IGUgJ3B5LWV4Yy1pbmZvIChjb25zIGZpbGUgbGluZSkpCi0gICAgICAoc2V0LWV4dGVudC1wcm9wZXJ0eSBlICdrZXltYXAgcHktbW9kZS1vdXRwdXQtbWFwKSkpCi0gICAodAotICAgIDs7IEVtYWNzIC0tIFBsZWFzZSBwb3J0IHRoaXMhCi0gICAgKQotICAgKSkKLQotKGRlZnVuIHB5LWluLWxpdGVyYWwgKCZvcHRpb25hbCBsaW0pCi0gICJSZXR1cm4gbm9uLW5pbCBpZiBwb2ludCBpcyBpbiBhIFB5dGhvbiBsaXRlcmFsIChhIGNvbW1lbnQgb3Igc3RyaW5nKS4KLU9wdGlvbmFsIGFyZ3VtZW50IExJTSBpbmRpY2F0ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29udGFpbmluZyBmb3JtLAotaS5lLiB0aGUgbGltaXQgb24gaG93IGZhciBiYWNrIHRvIHNjYW4uIgotICA7OyBUaGlzIGlzIHRoZSB2ZXJzaW9uIHVzZWQgZm9yIG5vbi1YRW1hY3MsIHdoaWNoIGhhcyBhIG5pY2VyCi0gIDs7IGludGVyZmFjZS4KLSAgOzsKLSAgOzsgV0FSTklORzogV2F0Y2ggb3V0IGZvciBpbmZpbml0ZSByZWN1cnNpb24uCi0gIChsZXQqICgobGltIChvciBsaW0gKHB5LXBvaW50ICdib2QpKSkKLQkgKHN0YXRlIChwYXJzZS1wYXJ0aWFsLXNleHAgbGltIChwb2ludCkpKSkKLSAgICAoY29uZAotICAgICAoKG50aCAzIHN0YXRlKSAnc3RyaW5nKQotICAgICAoKG50aCA0IHN0YXRlKSAnY29tbWVudCkKLSAgICAgKHQgbmlsKSkpKQotCi07OyBYRW1hY3MgaGFzIGEgYnVpbHQtaW4gZnVuY3Rpb24gdGhhdCBzaG91bGQgbWFrZSB0aGlzIG11Y2ggcXVpY2tlci4KLTs7IEluIHRoaXMgY2FzZSwgbGltIGlzIGlnbm9yZWQKLShkZWZ1biBweS1mYXN0LWluLWxpdGVyYWwgKCZvcHRpb25hbCBsaW0pCi0gICJGYXN0IHZlcnNpb24gb2YgYHB5LWluLWxpdGVyYWwnLCB1c2VkIG9ubHkgYnkgWEVtYWNzLgotT3B0aW9uYWwgTElNIGlzIGlnbm9yZWQuIgotICA7OyBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGNvbnRleHQgPT0gJ2Jsb2NrLWNvbW1lbnQKLSAgKGJ1ZmZlci1zeW50YWN0aWMtY29udGV4dCkpCi0KLShpZiAoZmJvdW5kcCAnYnVmZmVyLXN5bnRhY3RpYy1jb250ZXh0KQotICAgIChkZWZhbGlhcyAncHktaW4tbGl0ZXJhbCAncHktZmFzdC1pbi1saXRlcmFsKSkKLQotCi0MCi07OyBNZW51IGRlZmluaXRpb25zLCBvbmx5IHJlbGV2ZW50IGlmIHlvdSBoYXZlIHRoZSBlYXN5bWVudS5lbCBwYWNrYWdlCi07OyAoc3RhbmRhcmQgaW4gdGhlIGxhdGVzdCBFbWFjcyAxOSBhbmQgWEVtYWNzIDE5IGRpc3RyaWJ1dGlvbnMpLgotKGRlZnZhciBweS1tZW51IG5pbAotICAiTWVudSBmb3IgUHl0aG9uIE1vZGUuCi1UaGlzIG1lbnUgd2lsbCBnZXQgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGlmIHlvdSBoYXZlIHRoZSBgZWFzeW1lbnUnCi1wYWNrYWdlLiAgTm90ZSB0aGF0IHRoZSBsYXRlc3QgWC9FbWFjcyByZWxlYXNlcyBjb250YWluIHRoaXMgcGFja2FnZS4iKQotCi0oYW5kIChweS1zYWZlIChyZXF1aXJlICdlYXN5bWVudSkgdCkKLSAgICAgKGVhc3ktbWVudS1kZWZpbmUKLSAgICAgIHB5LW1lbnUgcHktbW9kZS1tYXAgIlB5dGhvbiBNb2RlIG1lbnUiCi0gICAgICAnKCJQeXRob24iCi0JWyJDb21tZW50IE91dCBSZWdpb24iICAgcHktY29tbWVudC1yZWdpb24gIChtYXJrKV0KLQlbIlVuY29tbWVudCBSZWdpb24iICAgICAocHktY29tbWVudC1yZWdpb24gKHBvaW50KSAobWFyaykgJyg0KSkgKG1hcmspXQotCSItIgotCVsiTWFyayBjdXJyZW50IGJsb2NrIiAgIHB5LW1hcmstYmxvY2sgdF0KLQlbIk1hcmsgY3VycmVudCBkZWYiICAgICBweS1tYXJrLWRlZi1vci1jbGFzcyB0XQotCVsiTWFyayBjdXJyZW50IGNsYXNzIiAgIChweS1tYXJrLWRlZi1vci1jbGFzcyB0KSB0XQotCSItIgotCVsiU2hpZnQgcmVnaW9uIGxlZnQiICAgIHB5LXNoaWZ0LXJlZ2lvbi1sZWZ0IChtYXJrKV0KLQlbIlNoaWZ0IHJlZ2lvbiByaWdodCIgICBweS1zaGlmdC1yZWdpb24tcmlnaHQgKG1hcmspXQotCSItIgotCVsiSW1wb3J0L3JlbG9hZCBmaWxlIiAgIHB5LWV4ZWN1dGUtaW1wb3J0LW9yLXJlbG9hZCB0XQotCVsiRXhlY3V0ZSBidWZmZXIiICAgICAgIHB5LWV4ZWN1dGUtYnVmZmVyIHRdCi0JWyJFeGVjdXRlIHJlZ2lvbiIgICAgICAgcHktZXhlY3V0ZS1yZWdpb24gKG1hcmspXQotCVsiRXhlY3V0ZSBkZWYgb3IgY2xhc3MiIHB5LWV4ZWN1dGUtZGVmLW9yLWNsYXNzIChtYXJrKV0KLQlbIkV4ZWN1dGUgc3RyaW5nIiAgICAgICBweS1leGVjdXRlLXN0cmluZyB0XQotCVsiU3RhcnQgaW50ZXJwcmV0ZXIuLi4iIHB5LXNoZWxsIHRdCi0JIi0iCi0JWyJHbyB0byBzdGFydCBvZiBibG9jayIgcHktZ290by1ibG9jay11cCB0XQotCVsiR28gdG8gc3RhcnQgb2YgY2xhc3MiIChweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzIHQpIHRdCi0JWyJNb3ZlIHRvIGVuZCBvZiBjbGFzcyIgKHB5LWVuZC1vZi1kZWYtb3ItY2xhc3MgdCkgdF0KLQlbIk1vdmUgdG8gc3RhcnQgb2YgZGVmIiBweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzIHRdCi0JWyJNb3ZlIHRvIGVuZCBvZiBkZWYiICAgcHktZW5kLW9mLWRlZi1vci1jbGFzcyB0XQotCSItIgotCVsiRGVzY3JpYmUgbW9kZSIgICAgICAgIHB5LWRlc2NyaWJlLW1vZGUgdF0KLQkpKSkKLQotCi0MCi07OyBJbWVudSBkZWZpbml0aW9ucwotKGRlZnZhciBweS1pbWVudS1jbGFzcy1yZWdleHAKLSAgKGNvbmNhdAkJCQk7IDw8Y2xhc3Nlcz4+Ci0gICAiXFwoIgkJCQk7Ci0gICAiXlsgXHRdKiIJCQkJOyBuZXdsaW5lIGFuZCBtYXliZSB3aGl0ZXNwYWNlCi0gICAiXFwoY2xhc3NbIFx0XStbYS16QS1aMC05X10rXFwpIgk7IGNsYXNzIG5hbWUKLQkJCQkJOyBwb3NzaWJseSBtdWx0aXBsZSBzdXBlcmNsYXNzZXMKLSAgICJcXChbIFx0XSpcXCgoXFwoW2EtekEtWjAtOV8sLiBcdFxuXVxcKSopXFwpP1xcKSIKLSAgICJbIFx0XSo6IgkJCQk7IGFuZCB0aGUgZmluYWwgOgotICAgIlxcKSIJCQkJOyA+PmNsYXNzZXM8PAotICAgKQotICAiUmVnZXhwIGZvciBQeXRob24gY2xhc3NlcyBmb3IgdXNlIHdpdGggdGhlIEltZW51IHBhY2thZ2UuIgotICApCi0KLShkZWZ2YXIgcHktaW1lbnUtbWV0aG9kLXJlZ2V4cAotICAoY29uY2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgPDxtZXRob2RzIGFuZCBmdW5jdGlvbnM+PgotICAgIlxcKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKLSAgICJeWyBcdF0qIiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG5ldyBsaW5lIGFuZCBtYXliZSB3aGl0ZXNwYWNlCi0gICAiXFwoZGVmWyBcdF0rIiAgICAgICAgICAgICAgICAgICAgICAgOyBmdW5jdGlvbiBkZWZpbml0aW9ucyBzdGFydCB3aXRoIGRlZgotICAgIlxcKFthLXpBLVowLTlfXStcXCkiICAgICAgICAgICAgICAgIDsgICBuYW1lIGlzIGhlcmUKLQkJCQkJOyAgIGZ1bmN0aW9uIGFyZ3VtZW50cy4uLgotOzsgICAiWyBcdF0qKFxcKFstKy9hLXpBLVowLTlfPSxcKiBcdFxuLigpXCInI10qXFwpKSIKLSAgICJbIFx0XSooXFwoW146I10qXFwpKSIKLSAgICJcXCkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGVuZCBvZiBkZWYKLSAgICJbIFx0XSo6IiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCB0aGVuIHRoZSA6Ci0gICAiXFwpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyA+Pm1ldGhvZHMgYW5kIGZ1bmN0aW9uczw8Ci0gICApCi0gICJSZWdleHAgZm9yIFB5dGhvbiBtZXRob2RzL2Z1bmN0aW9ucyBmb3IgdXNlIHdpdGggdGhlIEltZW51IHBhY2thZ2UuIgotICApCi0KLShkZWZ2YXIgcHktaW1lbnUtbWV0aG9kLW5vLWFyZy1wYXJlbnMgJygyIDgpCi0gICJJbmRpY2VzIGludG8gZ3JvdXBzIG9mIHRoZSBQeXRob24gcmVnZXhwIGZvciB1c2Ugd2l0aCBJbWVudS4KLQotVXNpbmcgdGhlc2UgdmFsdWVzIHdpbGwgcmVzdWx0IGluIHNtYWxsZXIgSW1lbnUgbGlzdHMsIGFzIGFyZ3VtZW50cyB0bwotZnVuY3Rpb25zIGFyZSBub3QgbGlzdGVkLgotCi1TZWUgdGhlIHZhcmlhYmxlIGBweS1pbWVudS1zaG93LW1ldGhvZC1hcmdzLXAnIGZvciBtb3JlCi1pbmZvcm1hdGlvbi4iKQotCi0oZGVmdmFyIHB5LWltZW51LW1ldGhvZC1hcmctcGFyZW5zICcoMiA3KQotICAiSW5kaWNlcyBpbnRvIGdyb3VwcyBvZiB0aGUgUHl0aG9uIHJlZ2V4cCBmb3IgdXNlIHdpdGggaW1lbnUuCi1Vc2luZyB0aGVzZSB2YWx1ZXMgd2lsbCByZXN1bHQgaW4gbGFyZ2UgSW1lbnUgbGlzdHMsIGFzIGFyZ3VtZW50cyB0bwotZnVuY3Rpb25zIGFyZSBsaXN0ZWQuCi0KLVNlZSB0aGUgdmFyaWFibGUgYHB5LWltZW51LXNob3ctbWV0aG9kLWFyZ3MtcCcgZm9yIG1vcmUKLWluZm9ybWF0aW9uLiIpCi0KLTs7IE5vdGUgdGhhdCBpbiB0aGlzIGZvcm1hdCwgdGhpcyB2YXJpYWJsZSBjYW4gc3RpbGwgYmUgdXNlZCB3aXRoIHRoZQotOzsgaW1lbnUtLWdlbmVyaWMtZnVuY3Rpb24uIE90aGVyd2lzZSwgdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gdG8gaGF2ZQotOzsgaXQuCi0oZGVmdmFyIHB5LWltZW51LWdlbmVyaWMtZXhwcmVzc2lvbgotICAoY29ucwotICAgKGNvbmNhdAotICAgIHB5LWltZW51LWNsYXNzLXJlZ2V4cAotICAgICJcXHwiCQkJCTsgb3IuLi4KLSAgICBweS1pbWVudS1tZXRob2QtcmVnZXhwCi0gICAgKQotICAgcHktaW1lbnUtbWV0aG9kLW5vLWFyZy1wYXJlbnMpCi0gICJHZW5lcmljIFB5dGhvbiBleHByZXNzaW9uIHdoaWNoIG1heSBiZSB1c2VkIGRpcmVjdGx5IHdpdGggSW1lbnUuCi1Vc2VkIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIGBpbWVudS1nZW5lcmljLWV4cHJlc3Npb24nIHRvIHRoaXMgdmFsdWUuCi1BbHNvLCBzZWUgdGhlIGZ1bmN0aW9uIFxcW3B5LWltZW51LWNyZWF0ZS1pbmRleF0gZm9yIGEgYmV0dGVyCi1hbHRlcm5hdGl2ZSBmb3IgZmluZGluZyB0aGUgaW5kZXguIikKLQotOzsgVGhlc2UgbmV4dCB0d28gdmFyaWFibGVzIGFyZSB1c2VkIHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgUHl0aG9uCi07OyBjbGFzcy9kZWZpbml0aW9ucy4gSnVzdCBzYXZpbmcgc29tZSB0aW1lIGluIGFjY2Vzc2luZyB0aGUKLTs7IGdlbmVyaWMtcHl0aG9uLWV4cHJlc3Npb24sIHJlYWxseS4KLShkZWZ2YXIgcHktaW1lbnUtZ2VuZXJpYy1yZWdleHAgbmlsKQotKGRlZnZhciBweS1pbWVudS1nZW5lcmljLXBhcmVucyBuaWwpCi0KLQotKGRlZnVuIHB5LWltZW51LWNyZWF0ZS1pbmRleC1mdW5jdGlvbiAoKQotICAiUHl0aG9uIGludGVyZmFjZSBmdW5jdGlvbiBmb3IgdGhlIEltZW51IHBhY2thZ2UuCi1GaW5kcyBhbGwgUHl0aG9uIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy9tZXRob2RzLiBDYWxscyBmdW5jdGlvbgotXFxbcHktaW1lbnUtY3JlYXRlLWluZGV4LWVuZ2luZV0uICBTZWUgdGhhdCBmdW5jdGlvbiBmb3IgdGhlIGRldGFpbHMKLW9mIGhvdyB0aGlzIHdvcmtzLiIKLSAgKHNldHEgcHktaW1lbnUtZ2VuZXJpYy1yZWdleHAgKGNhciBweS1pbWVudS1nZW5lcmljLWV4cHJlc3Npb24pCi0JcHktaW1lbnUtZ2VuZXJpYy1wYXJlbnMgKGlmIHB5LWltZW51LXNob3ctbWV0aG9kLWFyZ3MtcAotCQkJCSAgICBweS1pbWVudS1tZXRob2QtYXJnLXBhcmVucwotCQkJCSAgcHktaW1lbnUtbWV0aG9kLW5vLWFyZy1wYXJlbnMpKQotICAoZ290by1jaGFyIChwb2ludC1taW4pKQotICA7OyBXYXJuaW5nOiBXaGVuIHRoZSBidWZmZXIgaGFzIG5vIGNsYXNzZXMgb3IgZnVuY3Rpb25zLCB0aGlzIHdpbGwKLSAgOzsgcmV0dXJuIG5pbCwgd2hpY2ggc2VlbXMgcHJvcGVyIGFjY29yZGluZyB0byB0aGUgSW1lbnUgQVBJLCBidXQKLSAgOzsgY2F1c2VzIGFuIGVycm9yIGluIHRoZSBYRW1hY3MgcG9ydCBvZiBJbWVudS4gIFNpZ2guCi0gIChweS1pbWVudS1jcmVhdGUtaW5kZXgtZW5naW5lIG5pbCkpCi0KLShkZWZ1biBweS1pbWVudS1jcmVhdGUtaW5kZXgtZW5naW5lICgmb3B0aW9uYWwgc3RhcnQtaW5kZW50KQotICAiRnVuY3Rpb24gZm9yIGZpbmRpbmcgSW1lbnUgZGVmaW5pdGlvbnMgaW4gUHl0aG9uLgotCi1GaW5kcyBhbGwgZGVmaW5pdGlvbnMgKGNsYXNzZXMsIG1ldGhvZHMsIG9yIGZ1bmN0aW9ucykgaW4gYSBQeXRob24KLWZpbGUgZm9yIHRoZSBJbWVudSBwYWNrYWdlLgotCi1SZXR1cm5zIGEgcG9zc2libHkgbmVzdGVkIGFsaXN0IG9mIHRoZSBmb3JtCi0KLQkoSU5ERVgtTkFNRSAuIElOREVYLVBPU0lUSU9OKQotCi1UaGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGFsaXN0IG1heSBiZSBhbiBhbGlzdCwgcHJvZHVjaW5nIGEgbmVzdGVkCi1saXN0IGFzIGluCi0KLQkoSU5ERVgtTkFNRSAuIElOREVYLUFMSVNUKQotCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LCBhcyBpdCBjYWxscyBpdHNlbGYKLXJlY3Vyc2l2ZWx5IGFuZCByZXF1aXJlcyBzb21lIHNldHVwLiAgUmF0aGVyIHRoaXMgaXMgdGhlIGVuZ2luZSBmb3IKLXRoZSBmdW5jdGlvbiBcXFtweS1pbWVudS1jcmVhdGUtaW5kZXgtZnVuY3Rpb25dLgotCi1JdCB3b3JrcyByZWN1cnNpdmVseSBieSBsb29raW5nIGZvciBhbGwgZGVmaW5pdGlvbnMgYXQgdGhlIGN1cnJlbnQKLWluZGVudGlvbiBsZXZlbC4gIFdoZW4gaXQgZmluZHMgb25lLCBpdCBhZGRzIGl0IHRvIHRoZSBhbGlzdC4gIElmIGl0Ci1maW5kcyBhIGRlZmluaXRpb24gYXQgYSBncmVhdGVyIGluZGVudGF0aW9uIGxldmVsLCBpdCByZW1vdmVzIHRoZQotcHJldmlvdXMgZGVmaW5pdGlvbiBmcm9tIHRoZSBhbGlzdC4gSW4gaXRzIHBsYWNlIGl0IGFkZHMgYWxsCi1kZWZpbml0aW9ucyBmb3VuZCBhdCB0aGUgbmV4dCBpbmRlbnRhdGlvbiBsZXZlbC4gIFdoZW4gaXQgZmluZHMgYQotZGVmaW5pdGlvbiB0aGF0IGlzIGxlc3MgaW5kZW50ZWQgdGhlbiB0aGUgY3VycmVudCBsZXZlbCwgaXQgcmV0dXJucwotdGhlIGFsaXN0IGl0IGhhcyBjcmVhdGVkIHRodXMgZmFyLgotCi1UaGUgb3B0aW9uYWwgYXJndW1lbnQgU1RBUlQtSU5ERU5UIGluZGljYXRlcyB0aGUgc3RhcnRpbmcgaW5kZW50YXRpb24KLWF0IHdoaWNoIHRvIGNvbnRpbnVlIGxvb2tpbmcgZm9yIFB5dGhvbiBjbGFzc2VzLCBtZXRob2RzLCBvcgotZnVuY3Rpb25zLiAgSWYgdGhpcyBpcyBub3Qgc3VwcGxpZWQsIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBpbmRlbnRhdGlvbgotb2YgdGhlIGZpcnN0IGRlZmluaXRpb24gZm91bmQuIgotICAobGV0IChpbmRleC1hbGlzdAotCXN1Yi1tZXRob2QtYWxpc3QKLQlsb29raW5nLXAKLQlkZWYtbmFtZSBwcmV2LW5hbWUKLQljdXItaW5kZW50IGRlZi1wb3MKLQkoY2xhc3MtcGFyZW4gKGZpcnN0ICBweS1pbWVudS1nZW5lcmljLXBhcmVucykpCi0JKGRlZi1wYXJlbiAgIChzZWNvbmQgcHktaW1lbnUtZ2VuZXJpYy1wYXJlbnMpKSkKLSAgICAoc2V0cSBsb29raW5nLXAKLQkgIChyZS1zZWFyY2gtZm9yd2FyZCBweS1pbWVudS1nZW5lcmljLXJlZ2V4cCAocG9pbnQtbWF4KSB0KSkKLSAgICAod2hpbGUgbG9va2luZy1wCi0gICAgICAoc2F2ZS1leGN1cnNpb24KLQk7OyB1c2VkIHRvIHNldCBkZWYtbmFtZSB0byB0aGlzIHZhbHVlIGJ1dCBnZW5lcmljLWV4dHJhY3QtbmFtZQotCTs7IGlzIG5ldyB0byBpbWVudS0xLjE0LiB0aGlzIHdheSBpdCBzdGlsbCB3b3JrcyB3aXRoCi0JOzsgaW1lbnUtMS4xMQotCTs7KGltZW51LS1nZW5lcmljLWV4dHJhY3QtbmFtZSBweS1pbWVudS1nZW5lcmljLXBhcmVucykpCi0JKGxldCAoKGN1ci1wYXJlbiAoaWYgKG1hdGNoLWJlZ2lubmluZyBjbGFzcy1wYXJlbikKLQkJCSAgICAgY2xhc3MtcGFyZW4gZGVmLXBhcmVuKSkpCi0JICAoc2V0cSBkZWYtbmFtZQotCQkoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChtYXRjaC1iZWdpbm5pbmcgY3VyLXBhcmVuKQotCQkJCQkJKG1hdGNoLWVuZCBjdXItcGFyZW4pKSkpCi0JKHNhdmUtbWF0Y2gtZGF0YQotCSAgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgJ2VpdGhlcikpCi0JKGJlZ2lubmluZy1vZi1saW5lKQotCShzZXRxIGN1ci1pbmRlbnQgKGN1cnJlbnQtaW5kZW50YXRpb24pKSkKLSAgICAgIDs7IEhBQ0s6IHdhbnQgdG8gZ28gdG8gdGhlIG5leHQgY29ycmVjdCBkZWZpbml0aW9uIGxvY2F0aW9uLiAgV2UKLSAgICAgIDs7IGV4cGxpY2l0bHkgbGlzdCB0aGVtIGhlcmUgYnV0IGl0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIHRoZW0KLSAgICAgIDs7IGluIGEgbGlzdC4KLSAgICAgIChzZXRxIGRlZi1wb3MKLQkgICAgKG9yIChtYXRjaC1iZWdpbm5pbmcgY2xhc3MtcGFyZW4pCi0JCShtYXRjaC1iZWdpbm5pbmcgZGVmLXBhcmVuKSkpCi0gICAgICA7OyBpZiB3ZSBkb24ndCBoYXZlIGEgc3RhcnRpbmcgaW5kZW50IGxldmVsLCB0YWtlIHRoaXMgb25lCi0gICAgICAob3Igc3RhcnQtaW5kZW50Ci0JICAoc2V0cSBzdGFydC1pbmRlbnQgY3VyLWluZGVudCkpCi0gICAgICA7OyBpZiB3ZSBkb24ndCBoYXZlIGNsYXNzIG5hbWUgeWV0LCB0YWtlIHRoaXMgb25lCi0gICAgICAob3IgcHJldi1uYW1lCi0JICAoc2V0cSBwcmV2LW5hbWUgZGVmLW5hbWUpKQotICAgICAgOzsgd2hhdCBsZXZlbCBpcyB0aGUgbmV4dCBkZWZpbml0aW9uIG9uPyAgbXVzdCBiZSBzYW1lLCBkZWVwZXIKLSAgICAgIDs7IG9yIHNoYWxsb3dlciBpbmRlbnRhdGlvbgotICAgICAgKGNvbmQKLSAgICAgICA7OyBTa2lwIGNvZGUgaW4gY29tbWVudHMgYW5kIHN0cmluZ3MKLSAgICAgICAoKHB5LWluLWxpdGVyYWwpKQotICAgICAgIDs7IGF0IHRoZSBzYW1lIGluZGVudCBsZXZlbCwgYWRkIGl0IHRvIHRoZSBsaXN0Li4uCi0gICAgICAgKCg9IHN0YXJ0LWluZGVudCBjdXItaW5kZW50KQotCShwdXNoIChjb25zIGRlZi1uYW1lIGRlZi1wb3MpIGluZGV4LWFsaXN0KSkKLSAgICAgICA7OyBkZWVwZXIgaW5kZW50ZWQgZXhwcmVzc2lvbiwgcmVjdXJzZQotICAgICAgICgoPCBzdGFydC1pbmRlbnQgY3VyLWluZGVudCkKLQk7OyB0aGUgcG9pbnQgaXMgY3VycmVudGx5IG9uIHRoZSBleHByZXNzaW9uIHdlJ3JlIHN1cHBvc2VkIHRvCi0JOzsgc3RhcnQgb24sIHNvIGdvIGJhY2sgdG8gdGhlIGxhc3QgZXhwcmVzc2lvbi4gVGhlIHJlY3Vyc2l2ZQotCTs7IGNhbGwgd2lsbCBmaW5kIHRoaXMgcGxhY2UgYWdhaW4gYW5kIGFkZCBpdCB0byB0aGUgY29ycmVjdAotCTs7IGxpc3QKLQkocmUtc2VhcmNoLWJhY2t3YXJkIHB5LWltZW51LWdlbmVyaWMtcmVnZXhwIChwb2ludC1taW4pICdtb3ZlKQotCShzZXRxIHN1Yi1tZXRob2QtYWxpc3QgKHB5LWltZW51LWNyZWF0ZS1pbmRleC1lbmdpbmUgY3VyLWluZGVudCkpCi0JKGlmIHN1Yi1tZXRob2QtYWxpc3QKLQkgICAgOzsgd2UgcHV0IHRoZSBsYXN0IGVsZW1lbnQgb24gdGhlIGluZGV4LWFsaXN0IG9uIHRoZSBzdGFydAotCSAgICA7OyBvZiB0aGUgc3VibWV0aG9kIGFsaXN0IHNvIHRoZSB1c2VyIGNhbiBzdGlsbCBnZXQgdG8gaXQuCi0JICAgIChsZXQgKChzYXZlLWVsbXQgKHBvcCBpbmRleC1hbGlzdCkpKQotCSAgICAgIChwdXNoIChjb25zIHByZXYtbmFtZQotCQkJICAoY29ucyBzYXZlLWVsbXQgc3ViLW1ldGhvZC1hbGlzdCkpCi0JCSAgICBpbmRleC1hbGlzdCkpKSkKLSAgICAgICA7OyBmb3VuZCBsZXNzIGluZGVudGVkIGV4cHJlc3Npb24sIHdlJ3JlIGRvbmUuCi0gICAgICAgKHQKLQkoc2V0cSBsb29raW5nLXAgbmlsKQotCShyZS1zZWFyY2gtYmFja3dhcmQgcHktaW1lbnUtZ2VuZXJpYy1yZWdleHAgKHBvaW50LW1pbikgdCkpKQotICAgICAgOzsgZW5kLWNvbmQKLSAgICAgIChzZXRxIHByZXYtbmFtZSBkZWYtbmFtZSkKLSAgICAgIChhbmQgbG9va2luZy1wCi0JICAgKHNldHEgbG9va2luZy1wCi0JCSAocmUtc2VhcmNoLWZvcndhcmQgcHktaW1lbnUtZ2VuZXJpYy1yZWdleHAKLQkJCQkgICAgKHBvaW50LW1heCkgJ21vdmUpKSkpCi0gICAgKG5yZXZlcnNlIGluZGV4LWFsaXN0KSkpCi0KLQotDAotKGRlZnVuIHB5LWNob29zZS1zaGVsbC1ieS1zaGViYW5nICgpCi0gICJDaG9vc2UgQ1B5dGhvbiBvciBKeXRob24gbW9kZSBieSBsb29raW5nIGF0ICMhIG9uIHRoZSBmaXJzdCBsaW5lLgotUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgbW9kZSBmdW5jdGlvbi4KLVVzZWQgYnkgYHB5LWNob29zZS1zaGVsbCcsIGFuZCBzaW1pbGFyIHRvIGJ1dCBkaXN0aW5jdCBmcm9tCi1gc2V0LWF1dG8tbW9kZScsIHRob3VnaCBpdCB1c2VzIGBhdXRvLW1vZGUtaW50ZXJwcmV0ZXItcmVnZXhwJyAoaWYgYXZhaWxhYmxlKS4iCi0gIDs7IGxvb2sgZm9yIGFuIGludGVycHJldGVyIHNwZWNpZmllZCBpbiB0aGUgZmlyc3QgbGluZQotICA7OyBzaW1pbGFyIHRvIHNldC1hdXRvLW1vZGUgKGZpbGVzLmVsKQotICAobGV0KiAoKHJlIChpZiAoYm91bmRwICdhdXRvLW1vZGUtaW50ZXJwcmV0ZXItcmVnZXhwKQotCQkgYXV0by1tb2RlLWludGVycHJldGVyLXJlZ2V4cAotCSAgICAgICA7OyBzdG9sZW4gZnJvbSBFbWFjcyAyMS4yCi0JICAgICAgICIjIVsgXHRdP1xcKFteIFx0XG5dKi9iaW4vZW52WyBcdF1cXCk/XFwoW14gXHRcbl0rXFwpIikpCi0JIChpbnRlcnByZXRlciAoc2F2ZS1leGN1cnNpb24KLQkJCShnb3RvLWNoYXIgKHBvaW50LW1pbikpCi0JCQkoaWYgKGxvb2tpbmctYXQgcmUpCi0JCQkgICAgKG1hdGNoLXN0cmluZyAyKQotCQkJICAiIikpKQotCSBlbHQpCi0gICAgOzsgTWFwIGludGVycHJldGVyIG5hbWUgdG8gYSBtb2RlLgotICAgIChzZXRxIGVsdCAoYXNzb2MgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgaW50ZXJwcmV0ZXIpCi0JCSAgICAgcHktc2hlbGwtYWxpc3QpKQotICAgIChhbmQgZWx0IChjYWRkciBlbHQpKSkpCi0KLQotDAotKGRlZnVuIHB5LWNob29zZS1zaGVsbC1ieS1pbXBvcnQgKCkKLSAgIkNob29zZSBDUHl0aG9uIG9yIEp5dGhvbiBtb2RlIGJhc2VkIGltcG9ydHMuCi1JZiBhIGZpbGUgaW1wb3J0cyBhbnkgcGFja2FnZXMgaW4gYHB5LWp5dGhvbi1wYWNrYWdlcycsIHdpdGhpbgotYHB5LWltcG9ydC1jaGVjay1wb2ludC1tYXgnIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUsCi1yZXR1cm4gYGp5dGhvbicsIG90aGVyd2lzZSByZXR1cm4gbmlsLiIKLSAgKGxldCAobW9kZSkKLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCi0gICAgICAod2hpbGUgKGFuZCAobm90IG1vZGUpCi0JCSAgKHNlYXJjaC1mb3J3YXJkLXJlZ2V4cAotCQkgICAiXlxcKFxcKGZyb21cXClcXHxcXChpbXBvcnRcXClcXCkgXFwoW14gXHRcbi5dK1xcKSIKLQkJICAgcHktaW1wb3J0LWNoZWNrLXBvaW50LW1heCB0KSkKLQkoc2V0cSBtb2RlIChhbmQgKG1lbWJlciAobWF0Y2gtc3RyaW5nIDQpIHB5LWp5dGhvbi1wYWNrYWdlcykKLQkJCSdqeXRob24KLQkJCSkpKSkKLSAgICBtb2RlKSkKLQotDAotKGRlZnVuIHB5LWNob29zZS1zaGVsbCAoKQotICAiQ2hvb3NlIENQeXRob24gb3IgSnl0aG9uIG1vZGUuIFJldHVybnMgdGhlIGFwcHJvcHJpYXRlIG1vZGUgZnVuY3Rpb24uCi1UaGlzIGRvZXMgdGhlIGZvbGxvd2luZzoKLSAtIGxvb2sgZm9yIGFuIGludGVycHJldGVyIHdpdGggYHB5LWNob29zZS1zaGVsbC1ieS1zaGViYW5nJwotIC0gZXhhbWluZSBpbXBvcnRzIHVzaW5nIGBweS1jaG9vc2Utc2hlbGwtYnktaW1wb3J0JwotIC0gZGVmYXVsdCB0byB0aGUgdmFyaWFibGUgYHB5LWRlZmF1bHQtaW50ZXJwcmV0ZXInIgotICAoaW50ZXJhY3RpdmUpCi0gIChvciAocHktY2hvb3NlLXNoZWxsLWJ5LXNoZWJhbmcpCi0gICAgICAocHktY2hvb3NlLXNoZWxsLWJ5LWltcG9ydCkKLSAgICAgIHB5LWRlZmF1bHQtaW50ZXJwcmV0ZXIKLTsgICAgICAnY3B5dGhvbiA7OyBkb24ndCB1c2UgdG8gcHktZGVmYXVsdC1pbnRlcnByZXRlciwgYmVjYXVzZSBkZWZhdWx0Ci07ICAgICAgICAgICAgICAgOzsgaXMgb25seSB3YXkgdG8gY2hvb3NlIENQeXRob24KLSAgICAgICkpCi0KLQwKLTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gcHl0aG9uLW1vZGUgKCkKLSAgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgUHl0aG9uIGZpbGVzLgotVG8gc3VibWl0IGEgcHJvYmxlbSByZXBvcnQsIGVudGVyIGBcXFtweS1zdWJtaXQtYnVnLXJlcG9ydF0nIGZyb20gYQotYHB5dGhvbi1tb2RlJyBidWZmZXIuICBEbyBgXFxbcHktZGVzY3JpYmUtbW9kZV0nIGZvciBkZXRhaWxlZAotZG9jdW1lbnRhdGlvbi4gIFRvIHNlZSB3aGF0IHZlcnNpb24gb2YgYHB5dGhvbi1tb2RlJyB5b3UgYXJlIHJ1bm5pbmcsCi1lbnRlciBgXFxbcHktdmVyc2lvbl0nLgotCi1UaGlzIG1vZGUga25vd3MgYWJvdXQgUHl0aG9uIGluZGVudGF0aW9uLCB0b2tlbnMsIGNvbW1lbnRzIGFuZAotY29udGludWF0aW9uIGxpbmVzLiAgUGFyYWdyYXBocyBhcmUgc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzIG9ubHkuCi0KLUNPTU1BTkRTCi1cXHtweS1tb2RlLW1hcH0KLVZBUklBQkxFUwotCi1weS1pbmRlbnQtb2Zmc2V0XHRcdGluZGVudGF0aW9uIGluY3JlbWVudAotcHktYmxvY2stY29tbWVudC1wcmVmaXhcdFx0Y29tbWVudCBzdHJpbmcgdXNlZCBieSBgY29tbWVudC1yZWdpb24nCi1weS1weXRob24tY29tbWFuZFx0XHRzaGVsbCBjb21tYW5kIHRvIGludm9rZSBQeXRob24gaW50ZXJwcmV0ZXIKLXB5LXRlbXAtZGlyZWN0b3J5XHRcdGRpcmVjdG9yeSB1c2VkIGZvciB0ZW1wIGZpbGVzIChpZiBuZWVkZWQpCi1weS1iZWVwLWlmLXRhYi1jaGFuZ2VcdFx0cmluZyB0aGUgYmVsbCBpZiBgdGFiLXdpZHRoJyBpcyBjaGFuZ2VkIgotICAoaW50ZXJhY3RpdmUpCi0gIDs7IHNldCB1cCBsb2NhbCB2YXJpYWJsZXMKLSAgKGtpbGwtYWxsLWxvY2FsLXZhcmlhYmxlcykKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1kZWZhdWx0cykKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3BhcmFncmFwaC1zZXBhcmF0ZSkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3BhcmFncmFwaC1zdGFydCkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ3JlcXVpcmUtZmluYWwtbmV3bGluZSkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQpCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdjb21tZW50LWVuZCkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtc3RhcnQtc2tpcCkKLSAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbW1lbnQtY29sdW1uKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnY29tbWVudC1pbmRlbnQtZnVuY3Rpb24pCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdpbmRlbnQtcmVnaW9uLWZ1bmN0aW9uKQotICAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW5kZW50LWxpbmUtZnVuY3Rpb24pCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdhZGQtbG9nLWN1cnJlbnQtZGVmdW4tZnVuY3Rpb24pCi0gIChtYWtlLWxvY2FsLXZhcmlhYmxlICdmaWxsLXBhcmFncmFwaC1mdW5jdGlvbikKLSAgOzsKLSAgKHNldC1zeW50YXgtdGFibGUgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gIChzZXRxIG1ham9yLW1vZGUgICAgICAgICAgICAgICdweXRob24tbW9kZQotCW1vZGUtbmFtZSAgICAgICAgICAgICAgICJQeXRob24iCi0JbG9jYWwtYWJicmV2LXRhYmxlICAgICAgcHl0aG9uLW1vZGUtYWJicmV2LXRhYmxlCi0JZm9udC1sb2NrLWRlZmF1bHRzICAgICAgJyhweXRob24tZm9udC1sb2NrLWtleXdvcmRzKQotCXBhcmFncmFwaC1zZXBhcmF0ZSAgICAgICJeWyBcdF0qJCIKLQlwYXJhZ3JhcGgtc3RhcnQgICAgICAgICAiXlsgXHRdKiQiCi0JcmVxdWlyZS1maW5hbC1uZXdsaW5lICAgdAotCWNvbW1lbnQtc3RhcnQgICAgICAgICAgICIjICIKLQljb21tZW50LWVuZCAgICAgICAgICAgICAiIgotCWNvbW1lbnQtc3RhcnQtc2tpcCAgICAgICIjICoiCi0JY29tbWVudC1jb2x1bW4gICAgICAgICAgNDAKLQljb21tZW50LWluZGVudC1mdW5jdGlvbiAncHktY29tbWVudC1pbmRlbnQtZnVuY3Rpb24KLQlpbmRlbnQtcmVnaW9uLWZ1bmN0aW9uICAncHktaW5kZW50LXJlZ2lvbgotCWluZGVudC1saW5lLWZ1bmN0aW9uICAgICdweS1pbmRlbnQtbGluZQotCTs7IHRlbGwgYWRkLWxvZy5lbCBob3cgdG8gZmluZCB0aGUgY3VycmVudCBmdW5jdGlvbi9tZXRob2QvdmFyaWFibGUKLQlhZGQtbG9nLWN1cnJlbnQtZGVmdW4tZnVuY3Rpb24gJ3B5LWN1cnJlbnQtZGVmdW4KLQotCWZpbGwtcGFyYWdyYXBoLWZ1bmN0aW9uICdweS1maWxsLXBhcmFncmFwaAotCSkKLSAgKHVzZS1sb2NhbC1tYXAgcHktbW9kZS1tYXApCi0gIDs7IGFkZCB0aGUgbWVudQotICAoaWYgcHktbWVudQotICAgICAgKGVhc3ktbWVudS1hZGQgcHktbWVudSkpCi0gIDs7IEVtYWNzIDE5IHJlcXVpcmVzIHRoaXMKLSAgKGlmIChib3VuZHAgJ2NvbW1lbnQtbXVsdGktbGluZSkKLSAgICAgIChzZXRxIGNvbW1lbnQtbXVsdGktbGluZSBuaWwpKQotICA7OyBJbnN0YWxsIEltZW51IGlmIGF2YWlsYWJsZQotICAod2hlbiAocHktc2FmZSAocmVxdWlyZSAnaW1lbnUpKQotICAgIChzZXRxIGltZW51LWNyZWF0ZS1pbmRleC1mdW5jdGlvbiAjJ3B5LWltZW51LWNyZWF0ZS1pbmRleC1mdW5jdGlvbikKLSAgICAoc2V0cSBpbWVudS1nZW5lcmljLWV4cHJlc3Npb24gcHktaW1lbnUtZ2VuZXJpYy1leHByZXNzaW9uKQotICAgIChpZiAoZmJvdW5kcCAnaW1lbnUtYWRkLXRvLW1lbnViYXIpCi0JKGltZW51LWFkZC10by1tZW51YmFyIChmb3JtYXQgIiVzLSVzIiAiSU0iIG1vZGUtbmFtZSkpKQotICAgICkKLSAgOzsgUnVuIHRoZSBtb2RlIGhvb2suICBOb3RlIHRoYXQgcHktbW9kZS1ob29rIGlzIGRlcHJlY2F0ZWQuCi0gIChpZiBweXRob24tbW9kZS1ob29rCi0gICAgICAocnVuLWhvb2tzICdweXRob24tbW9kZS1ob29rKQotICAgIChydW4taG9va3MgJ3B5LW1vZGUtaG9vaykpCi0gIDs7IE5vdyBkbyB0aGUgYXV0b21hZ2ljYWwgZ3Vlc3NpbmcKLSAgKGlmIHB5LXNtYXJ0LWluZGVudGF0aW9uCi0gICAgKGxldCAoKG9mZnNldCBweS1pbmRlbnQtb2Zmc2V0KSkKLSAgICAgIDs7IEl0J3Mgb2theSBpZiB0aGlzIGZhaWxzIHRvIGd1ZXNzIGEgZ29vZCB2YWx1ZQotICAgICAgKGlmIChhbmQgKHB5LXNhZmUgKHB5LWd1ZXNzLWluZGVudC1vZmZzZXQpKQotCSAgICAgICAoPD0gcHktaW5kZW50LW9mZnNldCA4KQotCSAgICAgICAoPj0gcHktaW5kZW50LW9mZnNldCAyKSkKLQkgIChzZXRxIG9mZnNldCBweS1pbmRlbnQtb2Zmc2V0KSkKLSAgICAgIChzZXRxIHB5LWluZGVudC1vZmZzZXQgb2Zmc2V0KQotICAgICAgOzsgT25seSB0dXJuIGluZGVudC10YWJzLW1vZGUgb2ZmIGlmIHRhYi13aWR0aCAhPQotICAgICAgOzsgcHktaW5kZW50LW9mZnNldC4gIE5ldmVyIHR1cm4gaXQgb24sIGJlY2F1c2UgdGhlIHVzZXIgbXVzdAotICAgICAgOzsgaGF2ZSBleHBsaWNpdGx5IHR1cm5lZCBpdCBvZmYuCi0gICAgICAoaWYgKC89IHRhYi13aWR0aCBweS1pbmRlbnQtb2Zmc2V0KQotCSAgKHNldHEgaW5kZW50LXRhYnMtbW9kZSBuaWwpKQotICAgICAgKSkKLSAgOzsgU2V0IHRoZSBkZWZhdWx0IHNoZWxsIGlmIG5vdCBhbHJlYWR5IHNldAotICAod2hlbiAobnVsbCBweS13aGljaC1zaGVsbCkKLSAgICAocHktdG9nZ2xlLXNoZWxscyAocHktY2hvb3NlLXNoZWxsKSkpKQotCi0KLShtYWtlLW9ic29sZXRlICdqcHl0aG9uLW1vZGUgJ2p5dGhvbi1tb2RlKQotKGRlZnVuIGp5dGhvbi1tb2RlICgpCi0gICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIEp5dGhvbi9KeXRob24gZmlsZXMuCi1UaGlzIGlzIGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGBweXRob24tbW9kZScuCi1JdCBydW5zIGBqeXRob24tbW9kZS1ob29rJyB0aGVuIGNhbGxzIGBweXRob24tbW9kZS4nCi1JdCBpcyBhZGRlZCB0byBgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCcgYW5kIGBweS1jaG9vc2Utc2hlbGwnLgotIgotICAoaW50ZXJhY3RpdmUpCi0gIChweXRob24tbW9kZSkKLSAgKHB5LXRvZ2dsZS1zaGVsbHMgJ2p5dGhvbikKLSAgKHdoZW4ganl0aG9uLW1vZGUtaG9vawotICAgICAgKHJ1bi1ob29rcyAnanl0aG9uLW1vZGUtaG9vaykpKQotCi0KLTs7IEl0J3MgaGFuZHkgdG8gYWRkIHJlY29nbml0aW9uIG9mIFB5dGhvbiBmaWxlcyB0byB0aGUKLTs7IGludGVycHJldGVyLW1vZGUtYWxpc3QgYW5kIHRvIGF1dG8tbW9kZS1hbGlzdC4gIFdpdGggdGhlIGZvcm1lciwgd2UKLTs7IGNhbiBzcGVjaWZ5IGRpZmZlcmVudCBgZGVyaXZlZC1tb2RlcycgYmFzZWQgb24gdGhlICMhIGxpbmUsIGJ1dAotOzsgd2l0aCB0aGUgbGF0dGVyLCB3ZSBjYW4ndC4gIFNvIHdlIGp1c3Qgd29uJ3QgYWRkIHRoZW0gaWYgdGhleSdyZQotOzsgYWxyZWFkeSBhZGRlZC4KLTs7OyMjI2F1dG9sb2FkCi0obGV0ICgobW9kZXMgJygoImp5dGhvbiIgLiBqeXRob24tbW9kZSkKLQkgICAgICAgKCJweXRob24iIC4gcHl0aG9uLW1vZGUpKSkpCi0gICh3aGlsZSBtb2RlcwotICAgICh3aGVuIChub3QgKGFzc29jIChjYXIgbW9kZXMpIGludGVycHJldGVyLW1vZGUtYWxpc3QpKQotICAgICAgKHB1c2ggKGNhciBtb2RlcykgaW50ZXJwcmV0ZXItbW9kZS1hbGlzdCkpCi0gICAgKHNldHEgbW9kZXMgKGNkciBtb2RlcykpKSkKLTs7OyMjI2F1dG9sb2FkCi0od2hlbiAobm90IChvciAocmFzc3EgJ3B5dGhvbi1tb2RlIGF1dG8tbW9kZS1hbGlzdCkKLQkgICAgICAgKHJhc3NxICdqeXRob24tbW9kZSBhdXRvLW1vZGUtYWxpc3QpKSkKLSAgKHB1c2ggJygiXFwucHkkIiAuIHB5dGhvbi1tb2RlKSBhdXRvLW1vZGUtYWxpc3QpKQotCi0KLQwKLTs7IGVsZWN0cmljIGNoYXJhY3RlcnMKLShkZWZ1biBweS1vdXRkZW50LXAgKCkKLSAgIlJldHVybnMgbm9uLW5pbCBpZiB0aGUgY3VycmVudCBsaW5lIHNob3VsZCBkZWRlbnQgb25lIGxldmVsLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGFuZCAocHJvZ24gKGJhY2stdG8taW5kZW50YXRpb24pCi0JCShsb29raW5nLWF0IHB5LW91dGRlbnQtcmUpKQotCSA7OyBzaG9ydCBjaXJjdWl0IGluZmxvb3Agb24gaWxsZWdhbCBjb25zdHJ1Y3QKLQkgKG5vdCAoYm9icCkpCi0JIChwcm9nbiAoZm9yd2FyZC1saW5lIC0xKQotCQkocHktZ290by1pbml0aWFsLWxpbmUpCi0JCShiYWNrLXRvLWluZGVudGF0aW9uKQotCQkod2hpbGUgKG9yIChsb29raW5nLWF0IHB5LWJsYW5rLW9yLWNvbW1lbnQtcmUpCi0JCQkgICAoYm9icCkpCi0JCSAgKGJhY2t3YXJkLXRvLWluZGVudGF0aW9uIDEpKQotCQkobm90IChsb29raW5nLWF0IHB5LW5vLW91dGRlbnQtcmUpKSkKLQkgKSkpCi0KLShkZWZ1biBweS1lbGVjdHJpYy1jb2xvbiAoYXJnKQotICAiSW5zZXJ0IGEgY29sb24uCi1JbiBjZXJ0YWluIGNhc2VzIHRoZSBsaW5lIGlzIGRlZGVudGVkIGFwcHJvcHJpYXRlbHkuICBJZiBhIG51bWVyaWMKLWFyZ3VtZW50IEFSRyBpcyBwcm92aWRlZCwgdGhhdCBtYW55IGNvbG9ucyBhcmUgaW5zZXJ0ZWQKLW5vbi1lbGVjdHJpY2FsbHkuICBFbGVjdHJpYyBiZWhhdmlvciBpcyBpbmhpYml0ZWQgaW5zaWRlIGEgc3RyaW5nIG9yCi1jb21tZW50LiIKLSAgKGludGVyYWN0aXZlICIqUCIpCi0gIChzZWxmLWluc2VydC1jb21tYW5kIChwcmVmaXgtbnVtZXJpYy12YWx1ZSBhcmcpKQotICA7OyBhcmUgd2UgaW4gYSBzdHJpbmcgb3IgY29tbWVudD8KLSAgKGlmIChzYXZlLWV4Y3Vyc2lvbgotCShsZXQgKChwcHMgKHBhcnNlLXBhcnRpYWwtc2V4cCAoc2F2ZS1leGN1cnNpb24KLQkJCQkJIChweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzKQotCQkJCQkgKHBvaW50KSkKLQkJCQkgICAgICAgKHBvaW50KSkpKQotCSAgKG5vdCAob3IgKG50aCAzIHBwcykgKG50aCA0IHBwcykpKSkpCi0gICAgICAoc2F2ZS1leGN1cnNpb24KLQkobGV0ICgoaGVyZSAocG9pbnQpKQotCSAgICAgIChvdXRkZW50IDApCi0JICAgICAgKGluZGVudCAocHktY29tcHV0ZS1pbmRlbnRhdGlvbiB0KSkpCi0JICAoaWYgKGFuZCAobm90IGFyZykKLQkJICAgKHB5LW91dGRlbnQtcCkKLQkJICAgKD0gaW5kZW50IChzYXZlLWV4Y3Vyc2lvbgotCQkJICAgICAgIChweS1uZXh0LXN0YXRlbWVudCAtMSkKLQkJCSAgICAgICAocHktY29tcHV0ZS1pbmRlbnRhdGlvbiB0KSkpCi0JCSAgICkKLQkgICAgICAoc2V0cSBvdXRkZW50IHB5LWluZGVudC1vZmZzZXQpKQotCSAgOzsgRG9uJ3QgaW5kZW50LCBvbmx5IGRlZGVudC4gIFRoaXMgYXNzdW1lcyB0aGF0IGFueSBsaW5lcwotCSAgOzsgdGhhdCBhcmUgYWxyZWFkeSBkZWRlbnRlZCByZWxhdGl2ZSB0bwotCSAgOzsgcHktY29tcHV0ZS1pbmRlbnRhdGlvbiB3ZXJlIHB1dCB0aGVyZSBvbiBwdXJwb3NlLiAgSXQncwotCSAgOzsgaGlnaGx5IGFubm95aW5nIHRvIGhhdmUgYDonIGluZGVudCBmb3IgeW91LiAgVXNlIFRBQiwgQy1jCi0JICA7OyBDLWwgb3IgQy1jIEMtciB0byBhZGp1c3QuICBUQkQ6IElzIHRoZXJlIGEgYmV0dGVyIHdheSB0bwotCSAgOzsgZGV0ZXJtaW5lIHRoaXM/Pz8KLQkgIChpZiAoPCAoY3VycmVudC1pbmRlbnRhdGlvbikgaW5kZW50KSBuaWwKLQkgICAgKGdvdG8tY2hhciBoZXJlKQotCSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0JICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSkKLQkgICAgKGluZGVudC10byAoLSBpbmRlbnQgb3V0ZGVudCkpCi0JICAgICkpKSkpCi0KLQwKLTs7IFB5dGhvbiBzdWJwcm9jZXNzIHV0aWxpdGllcyBhbmQgZmlsdGVycwotKGRlZnVuIHB5LWV4ZWN1dGUtZmlsZSAocHJvYyBmaWxlbmFtZSkKLSAgIlNlbmQgdG8gUHl0aG9uIGludGVycHJldGVyIHByb2Nlc3MgUFJPQyBcImV4ZWNmaWxlKCdGSUxFTkFNRScpXCIuCi1NYWtlIHRoYXQgcHJvY2VzcydzIGJ1ZmZlciB2aXNpYmxlIGFuZCBmb3JjZSBkaXNwbGF5LiAgQWxzbyBtYWtlCi1jb21pbnQgYmVsaWV2ZSB0aGUgdXNlciB0eXBlZCB0aGlzIHN0cmluZyBzbyB0aGF0Ci1ga2lsbC1vdXRwdXQtZnJvbS1zaGVsbCcgZG9lcyBUaGUgUmlnaHQgVGhpbmcuIgotICAobGV0ICgoY3VyYnVmIChjdXJyZW50LWJ1ZmZlcikpCi0JKHByb2NidWYgKHByb2Nlc3MtYnVmZmVyIHByb2MpKQotOwkoY29taW50LXNjcm9sbC10by1ib3R0b20tb24tb3V0cHV0IHQpCi0JKG1zZyAoZm9ybWF0ICIjIyB3b3JraW5nIG9uIHJlZ2lvbiBpbiBmaWxlICVzLi4uXG4iIGZpbGVuYW1lKSkKLSAgICAgICAgOzsgYWRkIHNvbWUgY29tbWVudCwgc28gdGhhdCB3ZSBjYW4gZmlsdGVyIGl0IG91dCBvZiBoaXN0b3J5Ci0JKGNtZCAoZm9ybWF0ICJleGVjZmlsZShyJyVzJykgIyBQWVRIT04tTU9ERVxuIiBmaWxlbmFtZSkpKQotICAgICh1bndpbmQtcHJvdGVjdAotCShzYXZlLWV4Y3Vyc2lvbgotCSAgKHNldC1idWZmZXIgcHJvY2J1ZikKLQkgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCi0JICAobW92ZS1tYXJrZXIgKHByb2Nlc3MtbWFyayBwcm9jKSAocG9pbnQpKQotCSAgKGZ1bmNhbGwgKHByb2Nlc3MtZmlsdGVyIHByb2MpIHByb2MgbXNnKSkKLSAgICAgIChzZXQtYnVmZmVyIGN1cmJ1ZikpCi0gICAgKHByb2Nlc3Mtc2VuZC1zdHJpbmcgcHJvYyBjbWQpKSkKLQotKGRlZnVuIHB5LWNvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9uIChzdHJpbmcpCi0gICJXYXRjaCBvdXRwdXQgZm9yIFB5dGhvbiBwcm9tcHQgYW5kIGV4ZWMgbmV4dCBmaWxlIHdhaXRpbmcgaW4gcXVldWUuCi1UaGlzIGZ1bmN0aW9uIGlzIGFwcHJvcHJpYXRlIGZvciBgY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb25zJy4iCi0gIDs7cmVtb3ZlIGFuc2kgdGVybWluYWwgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHN0cmluZywgbm90IHN1cmUgd2h5IHRoZXkgYXJlCi0gIDs7c3RpbGwgYXJvdW5kLi4uCi0gIChzZXRxIHN0cmluZyAoYW5zaS1jb2xvci1maWx0ZXItYXBwbHkgc3RyaW5nKSkKLSAgKHdoZW4gKGFuZCAoc3RyaW5nLW1hdGNoIHB5LXNoZWxsLWlucHV0LXByb21wdC0xLXJlZ2V4cCBzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgcHktZmlsZS1xdWV1ZSkKLSAgICAoaWYgcHktc2hlbGwtc3dpdGNoLWJ1ZmZlcnMtb24tZXhlY3V0ZQotICAgICAgKHBvcC10by1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpCi0gICAgKHB5LXNhZmUgKGRlbGV0ZS1maWxlIChjYXIgcHktZmlsZS1xdWV1ZSkpKQotICAgIChzZXRxIHB5LWZpbGUtcXVldWUgKGNkciBweS1maWxlLXF1ZXVlKSkKLSAgICAoaWYgcHktZmlsZS1xdWV1ZQotCShsZXQgKChweXByb2MgKGdldC1idWZmZXItcHJvY2VzcyAoY3VycmVudC1idWZmZXIpKSkpCi0JICAocHktZXhlY3V0ZS1maWxlIHB5cHJvYyAoY2FyIHB5LWZpbGUtcXVldWUpKSkpCi0gICAgKSkKLQotKGRlZnVuIHB5LXBkYnRyYWNrLW92ZXJsYXktYXJyb3cgKGFjdGl2YXRpb24pCi0gICJBY3RpdmF0ZSBvciBkZSBhcnJvdyBhdCBiZWdpbm5pbmctb2YtbGluZSBpbiBjdXJyZW50IGJ1ZmZlci4iCi0gIDs7IFRoaXMgd2FzIGRlcml2ZWQvc2ltcGxpZmllZCBmcm9tIGVkZWJ1Zy1vdmVybGF5LWFycm93Ci0gIChjb25kIChhY3RpdmF0aW9uCi0JIChzZXRxIG92ZXJsYXktYXJyb3ctcG9zaXRpb24gKG1ha2UtbWFya2VyKSkKLQkgKHNldHEgb3ZlcmxheS1hcnJvdy1zdHJpbmcgIj0+IikKLQkgKHNldC1tYXJrZXIgb3ZlcmxheS1hcnJvdy1wb3NpdGlvbiAocHktcG9pbnQgJ2JvbCkgKGN1cnJlbnQtYnVmZmVyKSkKLQkgKHNldHEgcHktcGRidHJhY2staXMtdHJhY2tpbmctcCB0KSkKLQkob3ZlcmxheS1hcnJvdy1wb3NpdGlvbgotCSAoc2V0cSBvdmVybGF5LWFycm93LXBvc2l0aW9uIG5pbCkKLQkgKHNldHEgcHktcGRidHJhY2staXMtdHJhY2tpbmctcCBuaWwpKQotCSkpCi0KLShkZWZ1biBweS1wZGJ0cmFjay10cmFjay1zdGFjay1maWxlICh0ZXh0KQotICAiU2hvdyB0aGUgZmlsZSBpbmRpY2F0ZWQgYnkgdGhlIHBkYiBzdGFjayBlbnRyeSBsaW5lLCBpbiBhIHNlcGFyYXRlIHdpbmRvdy4KLQotQWN0aXZpdHkgaXMgZGlzYWJsZWQgaWYgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZQotYHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXAnIGlzIG5pbC4KLQotV2UgZGVwZW5kIG9uIHRoZSBwZGIgaW5wdXQgcHJvbXB0IG1hdGNoaW5nIGBweS1wZGJ0cmFjay1pbnB1dC1wcm9tcHQnCi1hdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLgotCi1JZiB0aGUgdHJhY2ViYWNrIHRhcmdldCBmaWxlIHBhdGggaXMgaW52YWxpZCwgd2UgbG9vayBmb3IgdGhlIG1vc3QKLXJlY2VudGx5IHZpc2l0ZWQgcHl0aG9uLW1vZGUgYnVmZmVyIHdoaWNoIGVpdGhlciBoYXMgdGhlIG5hbWUgb2YgdGhlCi1jdXJyZW50IGZ1bmN0aW9uIFwob3IgY2xhc3MpIG9yIHdoaWNoIGRlZmluZXMgdGhlIGZ1bmN0aW9uIFwob3IKLWNsYXNzKS4gIFRoaXMgaXMgdG8gcHJvdmlkZSBmb3IgcmVtb3RlIHNjcmlwdHMsIGVnLCBab3BlJ3MgJ1NjcmlwdAotKFB5dGhvbiknIC0gcHV0IGEgX2NvcHlfIG9mIHRoZSBzY3JpcHQgaW4gYSBidWZmZXIgbmFtZWQgZm9yIHRoZQotc2NyaXB0LCBhbmQgc2V0IHRvIHB5dGhvbi1tb2RlLCBhbmQgcGRidHJhY2sgd2lsbCBmaW5kIGl0LikiCi0gIDs7IEluc3RlYWQgb2YgdHJ5aW5nIHRvIHBpZWNlIHRoaW5ncyB0b2dldGhlciBmcm9tIHBhcnRpYWwgdGV4dAotICA7OyAod2hpY2ggY2FuIGJlIGFsbW9zdCB1c2VsZXNzIGRlcGVuZGluZyBvbiBFbWFjcyB2ZXJzaW9uKSwgd2UKLSAgOzsgbW9uaXRvciB0byB0aGUgcG9pbnQgd2hlcmUgd2UgaGF2ZSB0aGUgbmV4dCBwZGIgcHJvbXB0LCBhbmQgdGhlbgotICA7OyBjaGVjayBhbGwgdGV4dCBmcm9tIGNvbWludC1sYXN0LWlucHV0LWVuZCB0byBwcm9jZXNzLW1hcmsuCi0gIDs7Ci0gIDs7IEFsc28sIHdlJ3JlIHZlcnkgY29uc2VydmF0aXZlIGFib3V0IGNsZWFyaW5nIHRoZSBvdmVybGF5IGFycm93LAotICA7OyB0byBtaW5pbWl6ZSByZXNpZHVlLiAgVGhpcyBtZWFucywgZm9yIGluc3RhbmNlLCB0aGF0IGV4ZWN1dGluZwotICA7OyBvdGhlciBwZGIgY29tbWFuZHMgd2lwZSBvdXQgdGhlIGhpZ2hsaWdodC4gIFlvdSBjYW4gYWx3YXlzIGRvIGEKLSAgOzsgJ3doZXJlJyAoYWthICd3JykgY29tbWFuZCB0byByZXZlYWwgdGhlIG92ZXJsYXkgYXJyb3cuCi0gIChsZXQqICgob3JpZ2J1ZiAoY3VycmVudC1idWZmZXIpKQotCSAoY3VycnByb2MgKGdldC1idWZmZXItcHJvY2VzcyBvcmlnYnVmKSkpCi0KLSAgICAoaWYgKG5vdCAoYW5kIGN1cnJwcm9jIHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXApKQotICAgICAgICAocHktcGRidHJhY2stb3ZlcmxheS1hcnJvdyBuaWwpCi0KLSAgICAgIChsZXQqICgocHJvY21hcmsgKHByb2Nlc3MtbWFyayBjdXJycHJvYykpCi0gICAgICAgICAgICAgKGJsb2NrIChidWZmZXItc3Vic3RyaW5nIChtYXggY29taW50LWxhc3QtaW5wdXQtZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gcHJvY21hcmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweS1wZGJ0cmFjay10cmFjay1yYW5nZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NtYXJrKSkKLSAgICAgICAgICAgICB0YXJnZXQgdGFyZ2V0X2ZuYW1lIHRhcmdldF9saW5lbm8gdGFyZ2V0X2J1ZmZlcikKLQotICAgICAgICAoaWYgKG5vdCAoc3RyaW5nLW1hdGNoIChjb25jYXQgcHktcGRidHJhY2staW5wdXQtcHJvbXB0ICIkIikgYmxvY2spKQotICAgICAgICAgICAgKHB5LXBkYnRyYWNrLW92ZXJsYXktYXJyb3cgbmlsKQotCi0gICAgICAgICAgKHNldHEgdGFyZ2V0IChweS1wZGJ0cmFjay1nZXQtc291cmNlLWJ1ZmZlciBibG9jaykpCi0KLSAgICAgICAgICAoaWYgKHN0cmluZ3AgdGFyZ2V0KQotICAgICAgICAgICAgICAobWVzc2FnZSAicGRidHJhY2s6ICVzIiB0YXJnZXQpCi0KLSAgICAgICAgICAgIChzZXRxIHRhcmdldF9saW5lbm8gKGNhciB0YXJnZXQpKQotICAgICAgICAgICAgKHNldHEgdGFyZ2V0X2J1ZmZlciAoY2FkciB0YXJnZXQpKQotICAgICAgICAgICAgKHNldHEgdGFyZ2V0X2ZuYW1lIChidWZmZXItZmlsZS1uYW1lIHRhcmdldF9idWZmZXIpKQotICAgICAgICAgICAgKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IHRhcmdldF9idWZmZXIpCi0gICAgICAgICAgICAoZ290by1saW5lIHRhcmdldF9saW5lbm8pCi0gICAgICAgICAgICAobWVzc2FnZSAicGRidHJhY2s6IGxpbmUgJXMsIGZpbGUgJXMiIHRhcmdldF9saW5lbm8gdGFyZ2V0X2ZuYW1lKQotICAgICAgICAgICAgKHB5LXBkYnRyYWNrLW92ZXJsYXktYXJyb3cgdCkKLSAgICAgICAgICAgIChwb3AtdG8tYnVmZmVyIG9yaWdidWYgdCkKLQotICAgICAgICAgICAgKSkpKSkKLSAgKQotCi0oZGVmdW4gcHktcGRidHJhY2stZ2V0LXNvdXJjZS1idWZmZXIgKGJsb2NrKQotICAiUmV0dXJuIGxpbmUgbnVtYmVyIGFuZCBidWZmZXIgb2YgY29kZSBpbmRpY2F0ZWQgYnkgYmxvY2sncyB0cmFjZWJhY2sgdGV4dC4KLQotV2UgbG9vayBmaXJzdCB0byB2aXNpdCB0aGUgZmlsZSBpbmRpY2F0ZWQgaW4gdGhlIHRyYWNlLgotCi1GYWlsaW5nIHRoYXQsIHdlIGxvb2sgZm9yIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgcHl0aG9uLW1vZGUgYnVmZmVyCi13aXRoIHRoZSBzYW1lIG5hbWUgb3IgaGF2aW5nIHRoZSBuYW1lZCBmdW5jdGlvbi4KLQotSWYgd2UncmUgdW5hYmxlIGZpbmQgdGhlIHNvdXJjZSBjb2RlIHdlIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZQotcHJvYmxlbSBhcyBiZXN0IGFzIHdlIGNhbiBkZXRlcm1pbmUuIgotCi0gIChpZiAobm90IChzdHJpbmctbWF0Y2ggcHktcGRidHJhY2stc3RhY2stZW50cnktcmVnZXhwIGJsb2NrKSkKLQotICAgICAgIlRyYWNlYmFjayBjdWUgbm90IGZvdW5kIgotCi0gICAgKGxldCogKChmaWxlbmFtZSAobWF0Y2gtc3RyaW5nIDEgYmxvY2spKQotICAgICAgICAgICAobGluZW5vIChzdHJpbmctdG8taW50IChtYXRjaC1zdHJpbmcgMiBibG9jaykpKQotICAgICAgICAgICAoZnVuY25hbWUgKG1hdGNoLXN0cmluZyAzIGJsb2NrKSkKLSAgICAgICAgICAgZnVuY2J1ZmZlcikKLQotICAgICAgKGNvbmQgKChmaWxlLWV4aXN0cy1wIGZpbGVuYW1lKQotICAgICAgICAgICAgIChsaXN0IGxpbmVubyAoZmluZC1maWxlLW5vc2VsZWN0IGZpbGVuYW1lKSkpCi0KLSAgICAgICAgICAgICgoc2V0cSBmdW5jYnVmZmVyIChweS1wZGJ0cmFjay1ncnViLWZvci1idWZmZXIgZnVuY25hbWUgbGluZW5vKSkKLSAgICAgICAgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiL1NjcmlwdCAoUHl0aG9uKSQiIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICA7OyBBZGQgaW4gbnVtYmVyIG9mIGxpbmVzIGZvciBsZWFkaW5nICcjIycgY29tbWVudHM6Ci0gICAgICAgICAgICAgICAgIChzZXRxIGxpbmVubwotICAgICAgICAgICAgICAgICAgICAgICAoKyBsaW5lbm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldC1idWZmZXIgZnVuY2J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnQtbGluZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCAocG9pbnQtbWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggIl5cXChbXiNdXFx8I1teI11cXHwjJFxcKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludC1taW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnQtbWF4KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpKSkpCi0gICAgICAgICAgICAgKGxpc3QgbGluZW5vIGZ1bmNidWZmZXIpKQotCi0gICAgICAgICAgICAoKD0gKGVsdCBmaWxlbmFtZSAwKSA/XDwpCi0gICAgICAgICAgICAgKGZvcm1hdCAiKE5vbi1maWxlIHNvdXJjZTogJyVzJykiIGZpbGVuYW1lKSkKLQotICAgICAgICAgICAgKHQgKGZvcm1hdCAiTm90IGZvdW5kOiAlcygpLCAlcyIgZnVuY25hbWUgZmlsZW5hbWUpKSkKLSAgICAgICkKLSAgICApCi0gICkKLQotKGRlZnVuIHB5LXBkYnRyYWNrLWdydWItZm9yLWJ1ZmZlciAoZnVuY25hbWUgbGluZW5vKQotICAiRmluZCBtb3N0IHJlY2VudCBidWZmZXIgaXRzZWxmIG5hbWVkIG9yIGhhdmluZyBmdW5jdGlvbiBmdW5jbmFtZS4KLQotV2Ugd2FsayB0aGUgYnVmZmVyLWxpc3QgaGlzdG9yeSBmb3IgcHl0aG9uLW1vZGUgYnVmZmVycyB0aGF0IGFyZQotbmFtZWQgZm9yIGZ1bmNuYW1lIG9yIGRlZmluZSBhIGZ1bmN0aW9uIGZ1bmNuYW1lLiIKLSAgKGxldCAoKGJ1ZmZlcnMgKGJ1ZmZlci1saXN0KSkKLSAgICAgICAgYnVmCi0gICAgICAgIGdvdCkKLSAgICAod2hpbGUgKGFuZCBidWZmZXJzIChub3QgZ290KSkKLSAgICAgIChzZXRxIGJ1ZiAoY2FyIGJ1ZmZlcnMpCi0gICAgICAgICAgICBidWZmZXJzIChjZHIgYnVmZmVycykpCi0gICAgICAoaWYgKGFuZCAoc2F2ZS1leGN1cnNpb24gKHNldC1idWZmZXIgYnVmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9IG1ham9yLW1vZGUgInB5dGhvbi1tb2RlIikpCi0gICAgICAgICAgICAgICAob3IgKHN0cmluZy1tYXRjaCBmdW5jbmFtZSAoYnVmZmVyLW5hbWUgYnVmKSkKLSAgICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoIChjb25jYXQgIl5cXHMtKlxcKGRlZlxcfGNsYXNzXFwpXFxzLSsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lICJcXHMtKigiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXQtYnVmZmVyIGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LW1heCkpKSkpKQotICAgICAgICAgIChzZXRxIGdvdCBidWYpKSkKLSAgICBnb3QpKQotCi0oZGVmdW4gcHktcG9zdHByb2Nlc3Mtb3V0cHV0LWJ1ZmZlciAoYnVmKQotICAiSGlnaGxpZ2h0IGV4Y2VwdGlvbnMgZm91bmQgaW4gQlVGLgotSWYgYW4gZXhjZXB0aW9uIG9jY3VycmVkIHJldHVybiB0LCBvdGhlcndpc2UgcmV0dXJuIG5pbC4gIEJVRiBtdXN0IGV4aXN0LiIKLSAgKGxldCAobGluZSBmaWxlIGJvbCBlcnItcCkKLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgIChzZXQtYnVmZmVyIGJ1ZikKLSAgICAgIChiZWdpbm5pbmctb2YtYnVmZmVyKQotICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBweS10cmFjZWJhY2stbGluZS1yZSBuaWwgdCkKLQkoc2V0cSBmaWxlIChtYXRjaC1zdHJpbmcgMSkKLQkgICAgICBsaW5lIChzdHJpbmctdG8taW50IChtYXRjaC1zdHJpbmcgMikpCi0JICAgICAgYm9sIChweS1wb2ludCAnYm9sKSkKLQkocHktaGlnaGxpZ2h0LWxpbmUgYm9sIChweS1wb2ludCAnZW9sKSBmaWxlIGxpbmUpKSkKLSAgICAod2hlbiAoYW5kIHB5LWp1bXAtb24tZXhjZXB0aW9uIGxpbmUpCi0gICAgICAoYmVlcCkKLSAgICAgIChweS1qdW1wLXRvLWV4Y2VwdGlvbiBmaWxlIGxpbmUpCi0gICAgICAoc2V0cSBlcnItcCB0KSkKLSAgICBlcnItcCkpCi0KLQotDAotOzs7IFN1YnByb2Nlc3MgY29tbWFuZHMKLQotOzsgb25seSB1c2VkIHdoZW4gKG1lbXEgJ2Jyb2tlbi10ZW1wLW5hbWVzIHB5LWVtYWNzLWZlYXR1cmVzKQotKGRlZnZhciBweS1zZXJpYWwtbnVtYmVyIDApCi0oZGVmdmFyIHB5LWV4Y2VwdGlvbi1idWZmZXIgbmlsKQotKGRlZmNvbnN0IHB5LW91dHB1dC1idWZmZXIgIipQeXRob24gT3V0cHV0KiIpCi0obWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ3B5LW91dHB1dC1idWZmZXIpCi0KLTs7IGZvciB0b2dnbGluZyBiZXR3ZWVuIENQeXRob24gYW5kIEp5dGhvbgotKGRlZnZhciBweS13aGljaC1zaGVsbCBuaWwpCi0oZGVmdmFyIHB5LXdoaWNoLWFyZ3MgIHB5LXB5dGhvbi1jb21tYW5kLWFyZ3MpCi0oZGVmdmFyIHB5LXdoaWNoLWJ1Zm5hbWUgIlB5dGhvbiIpCi0obWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ3B5LXdoaWNoLXNoZWxsKQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdweS13aGljaC1hcmdzKQotKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdweS13aGljaC1idWZuYW1lKQotCi0oZGVmdW4gcHktdG9nZ2xlLXNoZWxscyAoYXJnKQotICAiVG9nZ2xlcyBiZXR3ZWVuIHRoZSBDUHl0aG9uIGFuZCBKeXRob24gc2hlbGxzLgotCi1XaXRoIHBvc2l0aXZlIGFyZ3VtZW50IEFSRyAoaW50ZXJhY3RpdmVseSBcXFt1bml2ZXJzYWwtYXJndW1lbnRdKSwKLXVzZXMgdGhlIENQeXRob24gc2hlbGwsIHdpdGggbmVnYXRpdmUgQVJHIHVzZXMgdGhlIEp5dGhvbiBzaGVsbCwgYW5kCi13aXRoIGEgemVybyBhcmd1bWVudCwgdG9nZ2xlcyB0aGUgc2hlbGwuCi0KLVByb2dyYW1tYXRpY2FsbHksIEFSRyBjYW4gYWxzbyBiZSBvbmUgb2YgdGhlIHN5bWJvbHMgYGNweXRob24nIG9yCi1ganl0aG9uJywgZXF1aXZhbGVudCB0byBwb3NpdGl2ZSBhcmcgYW5kIG5lZ2F0aXZlIGFyZyByZXNwZWN0aXZlbHkuIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICA7OyBkZWZhdWx0IGlzIHRvIHRvZ2dsZQotICAoaWYgKG51bGwgYXJnKQotICAgICAgKHNldHEgYXJnIDApKQotICA7OyBwcmVwcm9jZXNzIGFyZwotICAoY29uZAotICAgKChlcXVhbCBhcmcgMCkKLSAgICA7OyB0b2dnbGUKLSAgICAoaWYgKHN0cmluZy1lcXVhbCBweS13aGljaC1idWZuYW1lICJQeXRob24iKQotCShzZXRxIGFyZyAtMSkKLSAgICAgIChzZXRxIGFyZyAxKSkpCi0gICAoKGVxdWFsIGFyZyAnY3B5dGhvbikgKHNldHEgYXJnIDEpKQotICAgKChlcXVhbCBhcmcgJ2p5dGhvbikgKHNldHEgYXJnIC0xKSkpCi0gIChsZXQgKG1zZykKLSAgICAoY29uZAotICAgICAoKDwgMCBhcmcpCi0gICAgICA7OyBzZXQgdG8gQ1B5dGhvbgotICAgICAgKHNldHEgcHktd2hpY2gtc2hlbGwgcHktcHl0aG9uLWNvbW1hbmQKLQkgICAgcHktd2hpY2gtYXJncyBweS1weXRob24tY29tbWFuZC1hcmdzCi0JICAgIHB5LXdoaWNoLWJ1Zm5hbWUgIlB5dGhvbiIKLQkgICAgbXNnICJDUHl0aG9uIikKLSAgICAgIChpZiAoc3RyaW5nLWVxdWFsIHB5LXdoaWNoLWJ1Zm5hbWUgIkp5dGhvbiIpCi0JICAoc2V0cSBtb2RlLW5hbWUgIlB5dGhvbiIpKSkKLSAgICAgKCg+IDAgYXJnKQotICAgICAgKHNldHEgcHktd2hpY2gtc2hlbGwgcHktanl0aG9uLWNvbW1hbmQKLQkgICAgcHktd2hpY2gtYXJncyBweS1qeXRob24tY29tbWFuZC1hcmdzCi0JICAgIHB5LXdoaWNoLWJ1Zm5hbWUgIkp5dGhvbiIKLQkgICAgbXNnICJKeXRob24iKQotICAgICAgKGlmIChzdHJpbmctZXF1YWwgcHktd2hpY2gtYnVmbmFtZSAiUHl0aG9uIikKLQkgIChzZXRxIG1vZGUtbmFtZSAiSnl0aG9uIikpKQotICAgICApCi0gICAgKG1lc3NhZ2UgIlVzaW5nIHRoZSAlcyBzaGVsbCIgbXNnKQotICAgIChzZXRxIHB5LW91dHB1dC1idWZmZXIgKGZvcm1hdCAiKiVzIE91dHB1dCoiIHB5LXdoaWNoLWJ1Zm5hbWUpKSkpCi0KLTs7OyMjI2F1dG9sb2FkCi0oZGVmdW4gcHktc2hlbGwgKCZvcHRpb25hbCBhcmdwcm9tcHQpCi0gICJTdGFydCBhbiBpbnRlcmFjdGl2ZSBQeXRob24gaW50ZXJwcmV0ZXIgaW4gYW5vdGhlciB3aW5kb3cuCi1UaGlzIGlzIGxpa2UgU2hlbGwgbW9kZSwgZXhjZXB0IHRoYXQgUHl0aG9uIGlzIHJ1bm5pbmcgaW4gdGhlIHdpbmRvdwotaW5zdGVhZCBvZiBhIHNoZWxsLiAgU2VlIHRoZSBgSW50ZXJhY3RpdmUgU2hlbGwnIGFuZCBgU2hlbGwgTW9kZScKLXNlY3Rpb25zIG9mIHRoZSBFbWFjcyBtYW51YWwgZm9yIGRldGFpbHMsIGVzcGVjaWFsbHkgZm9yIHRoZSBrZXkKLWJpbmRpbmdzIGFjdGl2ZSBpbiB0aGUgYCpQeXRob24qJyBidWZmZXIuCi0KLVdpdGggb3B0aW9uYWwgXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSwgdGhlIHVzZXIgaXMgcHJvbXB0ZWQgZm9yIHRoZQotZmxhZ3MgdG8gcGFzcyB0byB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgVGhpcyBoYXMgbm8gZWZmZWN0IHdoZW4gdGhpcwotY29tbWFuZCBpcyB1c2VkIHRvIHN3aXRjaCB0byBhbiBleGlzdGluZyBwcm9jZXNzLCBvbmx5IHdoZW4gYSBuZXcKLXByb2Nlc3MgaXMgc3RhcnRlZC4gIElmIHlvdSB1c2UgdGhpcywgeW91IHdpbGwgcHJvYmFibHkgd2FudCB0byBlbnN1cmUKLXRoYXQgdGhlIGN1cnJlbnQgYXJndW1lbnRzIGFyZSByZXRhaW5lZCAodGhleSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQotcHJvbXB0KS4gIFRoaXMgYXJndW1lbnQgaXMgaWdub3JlZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCi1wcm9ncmFtbWF0aWNhbGx5LCBvciB3aGVuIHJ1bm5pbmcgaW4gRW1hY3MgMTkuMzQgb3Igb2xkZXIuCi0KLU5vdGU6IFlvdSBjYW4gdG9nZ2xlIGJldHdlZW4gdXNpbmcgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIgYW5kIHRoZQotSnl0aG9uIGludGVycHJldGVyIGJ5IGhpdHRpbmcgXFxbcHktdG9nZ2xlLXNoZWxsc10uICBUaGlzIHRvZ2dsZXMKLWJ1ZmZlciBsb2NhbCB2YXJpYWJsZXMgd2hpY2ggY29udHJvbCB3aGV0aGVyIGFsbCB5b3VyIHN1YnNoZWxsCi1pbnRlcmFjdGlvbnMgaGFwcGVuIHRvIHRoZSBgKkp5dGhvbionIG9yIGAqUHl0aG9uKicgYnVmZmVycyAodGhlCi1sYXR0ZXIgaXMgdGhlIG5hbWUgdXNlZCBmb3IgdGhlIENQeXRob24gYnVmZmVyKS4KLQotV2FybmluZzogRG9uJ3QgdXNlIGFuIGludGVyYWN0aXZlIFB5dGhvbiBpZiB5b3UgY2hhbmdlIHN5cy5wczEgb3IKLXN5cy5wczIgZnJvbSB0aGVpciBkZWZhdWx0IHZhbHVlcywgb3IgaWYgeW91J3JlIHJ1bm5pbmcgY29kZSB0aGF0Ci1wcmludHMgYD4+PiAnIG9yIGAuLi4gJyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLiAgYHB5dGhvbi1tb2RlJyBjYW4ndAotZGlzdGluZ3Vpc2ggeW91ciBvdXRwdXQgZnJvbSBQeXRob24ncyBvdXRwdXQsIGFuZCBhc3N1bWVzIHRoYXQgYD4+PiAnCi1hdCB0aGUgc3RhcnQgb2YgYSBsaW5lIGlzIGEgcHJvbXB0IGZyb20gUHl0aG9uLiAgU2ltaWxhcmx5LCB0aGUgRW1hY3MKLVNoZWxsIG1vZGUgY29kZSBhc3N1bWVzIHRoYXQgYm90aCBgPj4+ICcgYW5kIGAuLi4gJyBhdCB0aGUgc3RhcnQgb2YgYQotbGluZSBhcmUgUHl0aG9uIHByb21wdHMuICBCYWQgdGhpbmdzIGNhbiBoYXBwZW4gaWYgeW91IGZvb2wgZWl0aGVyCi1tb2RlLgotCi1XYXJuaW5nOiAgSWYgeW91IGRvIGFueSBlZGl0aW5nICppbiogdGhlIHByb2Nlc3MgYnVmZmVyICp3aGlsZSogdGhlCi1idWZmZXIgaXMgYWNjZXB0aW5nIG91dHB1dCBmcm9tIFB5dGhvbiwgZG8gTk9UIGF0dGVtcHQgdG8gYHVuZG8nIHRoZQotY2hhbmdlcy4gIFNvbWUgb2YgdGhlIG91dHB1dCAobm93aGVyZSBuZWFyIHRoZSBwYXJ0cyB5b3UgY2hhbmdlZCEpIG1heQotYmUgbG9zdCBpZiB5b3UgZG8uICBUaGlzIGFwcGVhcnMgdG8gYmUgYW4gRW1hY3MgYnVnLCBhbiB1bmZvcnR1bmF0ZQotaW50ZXJhY3Rpb24gYmV0d2VlbiB1bmRvIGFuZCBwcm9jZXNzIGZpbHRlcnM7IHRoZSBzYW1lIHByb2JsZW0gZXhpc3RzIGluCi1ub24tUHl0aG9uIHByb2Nlc3MgYnVmZmVycyB1c2luZyB0aGUgZGVmYXVsdCAoRW1hY3Mtc3VwcGxpZWQpIHByb2Nlc3MKLWZpbHRlci4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIDs7IFNldCB0aGUgZGVmYXVsdCBzaGVsbCBpZiBub3QgYWxyZWFkeSBzZXQKLSAgKHdoZW4gKG51bGwgcHktd2hpY2gtc2hlbGwpCi0gICAgKHB5LXRvZ2dsZS1zaGVsbHMgcHktZGVmYXVsdC1pbnRlcnByZXRlcikpCi0gIChsZXQgKChhcmdzIHB5LXdoaWNoLWFyZ3MpKQotICAgICh3aGVuIChhbmQgYXJncHJvbXB0Ci0JICAgICAgIChpbnRlcmFjdGl2ZS1wKQotCSAgICAgICAoZmJvdW5kcCAnc3BsaXQtc3RyaW5nKSkKLSAgICAgIDs7IFRCRDogUGVyaGFwcyBmb3JjZSAiLWkiIGluIHRoZSBmaW5hbCBsaXN0PwotICAgICAgKHNldHEgYXJncyAoc3BsaXQtc3RyaW5nCi0JCSAgKHJlYWQtc3RyaW5nIChjb25jYXQgcHktd2hpY2gtYnVmbmFtZQotCQkJCSAgICAgICAiIGFyZ3VtZW50czogIikKLQkJCSAgICAgICAoY29uY2F0Ci0JCQkJKG1hcGNvbmNhdCAnaWRlbnRpdHkgcHktd2hpY2gtYXJncyAiICIpICIgIikKLQkJCSAgICAgICApKSkpCi0gICAgKGlmIChub3QgKGVxdWFsIChidWZmZXItbmFtZSkgIipQeXRob24qIikpCi0gICAgICAgIChzd2l0Y2gtdG8tYnVmZmVyLW90aGVyLXdpbmRvdwotICAgICAgICAgKGFwcGx5ICdtYWtlLWNvbWludCBweS13aGljaC1idWZuYW1lIHB5LXdoaWNoLXNoZWxsIG5pbCBhcmdzKSkKLSAgICAgIChhcHBseSAnbWFrZS1jb21pbnQgcHktd2hpY2gtYnVmbmFtZSBweS13aGljaC1zaGVsbCBuaWwgYXJncykpCi0gICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2NvbWludC1wcm9tcHQtcmVnZXhwKQotICAgIChzZXRxIGNvbWludC1wcm9tcHQtcmVnZXhwIChjb25jYXQgcHktc2hlbGwtaW5wdXQtcHJvbXB0LTEtcmVnZXhwICJcXHwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweS1zaGVsbC1pbnB1dC1wcm9tcHQtMi1yZWdleHAgIlxcfCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeKFtQcF1kYikgIikpCi0gICAgKGFkZC1ob29rICdjb21pbnQtb3V0cHV0LWZpbHRlci1mdW5jdGlvbnMKLQkgICAgICAncHktY29taW50LW91dHB1dC1maWx0ZXItZnVuY3Rpb24pCi0gICAgOzsgcGRidHJhY2sKLSAgICAoYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucyAncHktcGRidHJhY2stdHJhY2stc3RhY2stZmlsZSkKLSAgICAoc2V0cSBweS1wZGJ0cmFjay1kby10cmFja2luZy1wIHQpCi0gICAgKHNldC1zeW50YXgtdGFibGUgcHktbW9kZS1zeW50YXgtdGFibGUpCi0gICAgKHVzZS1sb2NhbC1tYXAgcHktc2hlbGwtbWFwKQotICAgIChydW4taG9va3MgJ3B5LXNoZWxsLWhvb2spCi0gICAgKSkKLQotKGRlZnVuIHB5LWNsZWFyLXF1ZXVlICgpCi0gICJDbGVhciB0aGUgcXVldWUgb2YgdGVtcG9yYXJ5IGZpbGVzIHdhaXRpbmcgdG8gZXhlY3V0ZS4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKG4gKGxlbmd0aCBweS1maWxlLXF1ZXVlKSkpCi0gICAgKG1hcGNhciAnZGVsZXRlLWZpbGUgcHktZmlsZS1xdWV1ZSkKLSAgICAoc2V0cSBweS1maWxlLXF1ZXVlIG5pbCkKLSAgICAobWVzc2FnZSAiJWQgcGVuZGluZyBmaWxlcyBkZS1xdWV1ZWQuIiBuKSkpCi0KLQwKLShkZWZ1biBweS1leGVjdXRlLXJlZ2lvbiAoc3RhcnQgZW5kICZvcHRpb25hbCBhc3luYykKLSAgIkV4ZWN1dGUgdGhlIHJlZ2lvbiBpbiBhIFB5dGhvbiBpbnRlcnByZXRlci4KLQotVGhlIHJlZ2lvbiBpcyBmaXJzdCBjb3BpZWQgaW50byBhIHRlbXBvcmFyeSBmaWxlIChpbiB0aGUgZGlyZWN0b3J5Ci1gcHktdGVtcC1kaXJlY3RvcnknKS4gIElmIHRoZXJlIGlzIG5vIFB5dGhvbiBpbnRlcnByZXRlciBzaGVsbAotcnVubmluZywgdGhpcyBmaWxlIGlzIGV4ZWN1dGVkIHN5bmNocm9ub3VzbHkgdXNpbmcKLWBzaGVsbC1jb21tYW5kLW9uLXJlZ2lvbicuICBJZiB0aGUgcHJvZ3JhbSBpcyBsb25nIHJ1bm5pbmcsIHVzZQotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSB0byBydW4gdGhlIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgaW4gaXRzIG93bgotYnVmZmVyLgotCi1XaGVuIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBwcm9ncmFtbWF0aWNhbGx5LCBhcmd1bWVudHMgU1RBUlQgYW5kIEVORAotc3BlY2lmeSB0aGUgcmVnaW9uIHRvIGV4ZWN1dGUsIGFuZCBvcHRpb25hbCB0aGlyZCBhcmd1bWVudCBBU1lOQywgaWYKLW5vbi1uaWwsIHNwZWNpZmllcyB0byBydW4gdGhlIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgaW4gaXRzIG93bgotYnVmZmVyLgotCi1JZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHNoZWxsIGlzIHJ1bm5pbmcsIHRoZSByZWdpb24gaXMgZXhlY2ZpbGUoKSdkCi1pbiB0aGF0IHNoZWxsLiAgSWYgeW91IHRyeSB0byBleGVjdXRlIHJlZ2lvbnMgdG9vIHF1aWNrbHksCi1gcHl0aG9uLW1vZGUnIHdpbGwgcXVldWUgdGhlbSB1cCBhbmQgZXhlY3V0ZSB0aGVtIG9uZSBhdCBhIHRpbWUgd2hlbgotaXQgc2VlcyBhIGA+Pj4gJyBwcm9tcHQgZnJvbSBQeXRob24uICBFYWNoIHRpbWUgdGhpcyBoYXBwZW5zLCB0aGUKLXByb2Nlc3MgYnVmZmVyIGlzIHBvcHBlZCBpbnRvIGEgd2luZG93IChpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHNvbWUKLXdpbmRvdykgc28geW91IGNhbiBzZWUgaXQsIGFuZCBhIGNvbW1lbnQgb2YgdGhlIGZvcm0KLQotICAgIFx0IyMgd29ya2luZyBvbiByZWdpb24gaW4gZmlsZSA8bmFtZT4uLi4KLQotaXMgaW5zZXJ0ZWQgYXQgdGhlIGVuZC4gIFNlZSBhbHNvIHRoZSBjb21tYW5kIGBweS1jbGVhci1xdWV1ZScuIgotICAoaW50ZXJhY3RpdmUgInJcblAiKQotICA7OyBTa2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBub24tYmxhbmsgbGluZQotICAobGV0KiAoKHByb2MgKGdldC1wcm9jZXNzIHB5LXdoaWNoLWJ1Zm5hbWUpKQotCSAodGVtcCAoaWYgKG1lbXEgJ2Jyb2tlbi10ZW1wLW5hbWVzIHB5LWVtYWNzLWZlYXR1cmVzKQotCQkgICAobGV0Ci0JCSAgICAgICAoKHNuIHB5LXNlcmlhbC1udW1iZXIpCi0JCQkocGlkIChhbmQgKGZib3VuZHAgJ2VtYWNzLXBpZCkgKGVtYWNzLXBpZCkpKSkKLQkJICAgICAoc2V0cSBweS1zZXJpYWwtbnVtYmVyICgxKyBweS1zZXJpYWwtbnVtYmVyKSkKLQkJICAgICAoaWYgcGlkCi0JCQkgKGZvcm1hdCAicHl0aG9uLSVkLSVkIiBzbiBwaWQpCi0JCSAgICAgICAoZm9ybWF0ICJweXRob24tJWQiIHNuKSkpCi0JCSAobWFrZS10ZW1wLW5hbWUgInB5dGhvbi0iKSkpCi0JIChmaWxlIChjb25jYXQgKGV4cGFuZC1maWxlLW5hbWUgdGVtcCBweS10ZW1wLWRpcmVjdG9yeSkgIi5weSIpKQotCSAoY3VyIChjdXJyZW50LWJ1ZmZlcikpCi0JIChidWYgKGdldC1idWZmZXItY3JlYXRlIGZpbGUpKQotCSBzaGVsbCkKLSAgICA7OyBXcml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciwgd2F0Y2hpbmcgb3V0IGZvciBpbmRlbnRlZCByZWdpb25zLgotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKGdvdG8tY2hhciBzdGFydCkKLSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAgICh3aGlsZSAoYW5kIChsb29raW5nLWF0ICJcXHMgKiQiKQotCQkgICg8IChwb2ludCkgZW5kKSkKLQkoZm9yd2FyZC1saW5lIDEpKQotICAgICAgKHNldHEgc3RhcnQgKHBvaW50KSkKLSAgICAgIChvciAoPCBzdGFydCBlbmQpCi0JICAoZXJyb3IgIlJlZ2lvbiBpcyBlbXB0eSIpKQotICAgICAgKHNldHEgcHktbGluZS1udW1iZXItb2Zmc2V0IChjb3VudC1saW5lcyAxIHN0YXJ0KSkKLSAgICAgIChsZXQgKChuZWVkcy1pZiAoLz0gKHB5LXBvaW50ICdib2wpIChweS1wb2ludCAnYm9pKSkpKQotCShzZXQtYnVmZmVyIGJ1ZikKLQkocHl0aG9uLW1vZGUpCi0JKHdoZW4gbmVlZHMtaWYKLQkgIChpbnNlcnQgImlmIDE6XG4iKQotCSAgKHNldHEgcHktbGluZS1udW1iZXItb2Zmc2V0ICgtIHB5LWxpbmUtbnVtYmVyLW9mZnNldCAxKSkpCi0JKGluc2VydC1idWZmZXItc3Vic3RyaW5nIGN1ciBzdGFydCBlbmQpCi0JOzsgU2V0IHRoZSBzaGVsbCBlaXRoZXIgdG8gdGhlICMhIGxpbmUgY29tbWFuZCwgb3IgdG8gdGhlCi0JOzsgcHktd2hpY2gtc2hlbGwgYnVmZmVyIGxvY2FsIHZhcmlhYmxlLgotCShzZXRxIHNoZWxsIChvciAocHktY2hvb3NlLXNoZWxsLWJ5LXNoZWJhbmcpCi0JCQkocHktY2hvb3NlLXNoZWxsLWJ5LWltcG9ydCkKLQkJCXB5LXdoaWNoLXNoZWxsKSkpKQotICAgIChjb25kCi0gICAgIDs7IGFsd2F5cyBydW4gdGhlIGNvZGUgaW4gaXRzIG93biBhc3luY2hyb25vdXMgc3VicHJvY2VzcwotICAgICAoYXN5bmMKLSAgICAgIDs7IFVzZXIgZXhwbGljaXRseSB3YW50cyB0aGlzIHRvIHJ1biBpbiBpdHMgb3duIGFzeW5jIHN1YnByb2Nlc3MKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCShzZXQtYnVmZmVyIGJ1ZikKLQkod3JpdGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGZpbGUgbmlsICdub21zZykpCi0gICAgICAobGV0KiAoKGJ1ZiAoZ2VuZXJhdGUtbmV3LWJ1ZmZlci1uYW1lIHB5LW91dHB1dC1idWZmZXIpKQotCSAgICAgOzsgVEJEOiBhIGhvcnJpYmxlIGhhY2ssIGJ1dCB3aHkgY3JlYXRlIG5ldyBDdXN0b20gdmFyaWFibGVzPwotCSAgICAgKGFyZyAoaWYgKHN0cmluZy1lcXVhbCBweS13aGljaC1idWZuYW1lICJQeXRob24iKQotCQkgICAgICAiLXUiICIiKSkpCi0JKHN0YXJ0LXByb2Nlc3MgcHktd2hpY2gtYnVmbmFtZSBidWYgc2hlbGwgYXJnIGZpbGUpCi0JKHBvcC10by1idWZmZXIgYnVmKQotCShweS1wb3N0cHJvY2Vzcy1vdXRwdXQtYnVmZmVyIGJ1ZikKLQk7OyBUQkQ6IGNsZWFuIHVwIHRoZSB0ZW1wb3JhcnkgZmlsZSEKLQkpKQotICAgICA7OyBpZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHNoZWxsIGlzIHJ1bm5pbmcsIHF1ZXVlIGl0IHVwIGZvcgotICAgICA7OyBleGVjdXRpb24gdGhlcmUuCi0gICAgIChwcm9jCi0gICAgICA7OyB1c2UgdGhlIGV4aXN0aW5nIHB5dGhvbiBzaGVsbAotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKHNldC1idWZmZXIgYnVmKQotCSh3cml0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkgZmlsZSBuaWwgJ25vbXNnKSkKLSAgICAgIChpZiAobm90IHB5LWZpbGUtcXVldWUpCi0JICAocHktZXhlY3V0ZS1maWxlIHByb2MgZmlsZSkKLQkobWVzc2FnZSAiRmlsZSAlcyBxdWV1ZWQgZm9yIGV4ZWN1dGlvbiIgZmlsZSkpCi0gICAgICAoc2V0cSBweS1maWxlLXF1ZXVlIChhcHBlbmQgcHktZmlsZS1xdWV1ZSAobGlzdCBmaWxlKSkpCi0gICAgICAoc2V0cSBweS1leGNlcHRpb24tYnVmZmVyIChjb25zIGZpbGUgKGN1cnJlbnQtYnVmZmVyKSkpKQotICAgICAodAotICAgICAgOzsgVEJEOiBhIGhvcnJpYmxlIGhhY2ssIGJ1dCB3aHkgY3JlYXRlIG5ldyBDdXN0b20gdmFyaWFibGVzPwotICAgICAgKGxldCAoKGNtZCAoY29uY2F0IHB5LXdoaWNoLXNoZWxsIChpZiAoc3RyaW5nLWVxdWFsIHB5LXdoaWNoLWJ1Zm5hbWUKLQkJCQkJCQkgICJKeXRob24iKQotCQkJCQkgICAgIiAtIiAiIikpKSkKLQk7OyBvdGhlcndpc2UgZWl0aGVyIHJ1biBpdCBzeW5jaHJvbm91c2x5IGluIGEgc3VicHJvY2VzcwotCShzYXZlLWV4Y3Vyc2lvbgotCSAgKHNldC1idWZmZXIgYnVmKQotCSAgKHNoZWxsLWNvbW1hbmQtb24tcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpCi0JCQkJICAgY21kIHB5LW91dHB1dC1idWZmZXIpKQotCTs7IHNoZWxsLWNvbW1hbmQtb24tcmVnaW9uIGtpbGxzIHRoZSBvdXRwdXQgYnVmZmVyIGlmIGl0IG5ldmVyCi0JOzsgZXhpc3RlZCBhbmQgdGhlcmUncyBubyBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZAotCShpZiAobm90IChnZXQtYnVmZmVyIHB5LW91dHB1dC1idWZmZXIpKQotCSAgICAobWVzc2FnZSAiTm8gb3V0cHV0LiIpCi0JICAoc2V0cSBweS1leGNlcHRpb24tYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCi0JICAobGV0ICgoZXJyLXAgKHB5LXBvc3Rwcm9jZXNzLW91dHB1dC1idWZmZXIgcHktb3V0cHV0LWJ1ZmZlcikpKQotCSAgICAocG9wLXRvLWJ1ZmZlciBweS1vdXRwdXQtYnVmZmVyKQotCSAgICAoaWYgZXJyLXAKLQkJKHBvcC10by1idWZmZXIgcHktZXhjZXB0aW9uLWJ1ZmZlcikpKQotCSAgKSkKLSAgICAgICkpCi0gICAgOzsgQ2xlYW4gdXAgYWZ0ZXIgb3Vyc2VsdmVzLgotICAgIChraWxsLWJ1ZmZlciBidWYpKSkKLQotDAotOzsgQ29kZSBleGVjdXRpb24gY29tbWFuZHMKLShkZWZ1biBweS1leGVjdXRlLWJ1ZmZlciAoJm9wdGlvbmFsIGFzeW5jKQotICAiU2VuZCB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byBhIFB5dGhvbiBpbnRlcnByZXRlci4KLUlmIHRoZSBmaWxlIGxvY2FsIHZhcmlhYmxlIGBweS1tYXN0ZXItZmlsZScgaXMgbm9uLW5pbCwgZXhlY3V0ZSB0aGUKLW5hbWVkIGZpbGUgaW5zdGVhZCBvZiB0aGUgYnVmZmVyJ3MgZmlsZS4KLQotSWYgdGhlcmUgaXMgYSAqUHl0aG9uKiBwcm9jZXNzIGJ1ZmZlciBpdCBpcyB1c2VkLiAgSWYgYSBjbGlwcGluZwotcmVzdHJpY3Rpb24gaXMgaW4gZWZmZWN0LCBvbmx5IHRoZSBhY2Nlc3NpYmxlIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBpcwotc2VudC4gIEEgdHJhaWxpbmcgbmV3bGluZSB3aWxsIGJlIHN1cHBsaWVkIGlmIG5lZWRlZC4KLQotU2VlIHRoZSBgXFxbcHktZXhlY3V0ZS1yZWdpb25dJyBkb2NzIGZvciBhbiBhY2NvdW50IG9mIHNvbWUKLXN1YnRsZXRpZXMsIGluY2x1ZGluZyB0aGUgdXNlIG9mIHRoZSBvcHRpb25hbCBBU1lOQyBhcmd1bWVudC4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIChsZXQgKChvbGQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKQotICAgIChpZiBweS1tYXN0ZXItZmlsZQotICAgICAgICAobGV0KiAoKGZpbGVuYW1lIChleHBhbmQtZmlsZS1uYW1lIHB5LW1hc3Rlci1maWxlKSkKLSAgICAgICAgICAgICAgIChidWZmZXIgKG9yIChnZXQtZmlsZS1idWZmZXIgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoZmluZC1maWxlLW5vc2VsZWN0IGZpbGVuYW1lKSkpKQotICAgICAgICAgIChzZXQtYnVmZmVyIGJ1ZmZlcikpKQotICAgIChweS1leGVjdXRlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSBhc3luYykKLSAgICAgICAocG9wLXRvLWJ1ZmZlciBvbGQtYnVmZmVyKSkpCi0KLShkZWZ1biBweS1leGVjdXRlLWltcG9ydC1vci1yZWxvYWQgKCZvcHRpb25hbCBhc3luYykKLSAgIkltcG9ydCB0aGUgY3VycmVudCBidWZmZXIncyBmaWxlIGluIGEgUHl0aG9uIGludGVycHJldGVyLgotCi1JZiB0aGUgZmlsZSBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLCB0aGVuIGRvIHJlbG9hZCBpbnN0ZWFkIHRvIGdldAotdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi1JZiB0aGUgZmlsZSdzIG5hbWUgZG9lcyBub3QgZW5kIGluIFwiLnB5XCIsIHRoZW4gZG8gZXhlY2ZpbGUgaW5zdGVhZC4KLQotSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIG5vdCB2aXNpdGluZyBhIGZpbGUsIGRvIGBweS1leGVjdXRlLWJ1ZmZlcicKLWluc3RlYWQuCi0KLUlmIHRoZSBmaWxlIGxvY2FsIHZhcmlhYmxlIGBweS1tYXN0ZXItZmlsZScgaXMgbm9uLW5pbCwgaW1wb3J0IG9yCi1yZWxvYWQgdGhlIG5hbWVkIGZpbGUgaW5zdGVhZCBvZiB0aGUgYnVmZmVyJ3MgZmlsZS4gIFRoZSBmaWxlIG1heSBiZQotc2F2ZWQgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBweS1leGVjdXRlLWltcG9ydC1vci1yZWxvYWQtc2F2ZS1wJy4KLQotU2VlIHRoZSBgXFxbcHktZXhlY3V0ZS1yZWdpb25dJyBkb2NzIGZvciBhbiBhY2NvdW50IG9mIHNvbWUKLXN1YnRsZXRpZXMsIGluY2x1ZGluZyB0aGUgdXNlIG9mIHRoZSBvcHRpb25hbCBBU1lOQyBhcmd1bWVudC4KLQotVGhpcyBtYXkgYmUgcHJlZmVyYWJsZSB0byBgXFxbcHktZXhlY3V0ZS1idWZmZXJdJyBiZWNhdXNlOgotCi0gLSBEZWZpbml0aW9ucyBzdGF5IGluIHRoZWlyIG1vZHVsZSByYXRoZXIgdGhhbiBhcHBlYXJpbmcgYXQgdG9wCi0gICBsZXZlbCwgd2hlcmUgdGhleSB3b3VsZCBjbHV0dGVyIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGFuZCBub3QgYWZmZWN0Ci0gICB1c2VzIG9mIHF1YWxpZmllZCBuYW1lcyAoTU9EVUxFLk5BTUUpLgotCi0gLSBUaGUgUHl0aG9uIGRlYnVnZ2VyIGdldHMgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9ucy4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIDs7IENoZWNrIGZpbGUgbG9jYWwgdmFyaWFibGUgcHktbWFzdGVyLWZpbGUKLSAgKGlmIHB5LW1hc3Rlci1maWxlCi0gICAgICAobGV0KiAoKGZpbGVuYW1lIChleHBhbmQtZmlsZS1uYW1lIHB5LW1hc3Rlci1maWxlKSkKLSAgICAgICAgICAgICAoYnVmZmVyIChvciAoZ2V0LWZpbGUtYnVmZmVyIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZW5hbWUpKSkpCi0gICAgICAgIChzZXQtYnVmZmVyIGJ1ZmZlcikpKQotICAobGV0ICgoZmlsZSAoYnVmZmVyLWZpbGUtbmFtZSAoY3VycmVudC1idWZmZXIpKSkpCi0gICAgKGlmIGZpbGUKLSAgICAgICAgKHByb2duCi0JICA7OyBNYXliZSBzYXZlIHNvbWUgYnVmZmVycwotCSAgKHNhdmUtc29tZS1idWZmZXJzIChub3QgcHktYXNrLWFib3V0LXNhdmUpIG5pbCkKLSAgICAgICAgICAocHktZXhlY3V0ZS1zdHJpbmcKLSAgICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIlxcLnB5JCIgZmlsZSkKLSAgICAgICAgICAgICAgIChsZXQgKChmIChmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24KLQkJCSAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxlKSkpKQotICAgICAgICAgICAgICAgICAoZm9ybWF0ICJpZiBnbG9iYWxzKCkuaGFzX2tleSgnJXMnKTpcbiAgICByZWxvYWQoJXMpXG5lbHNlOlxuICAgIGltcG9ydCAlc1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgIGYgZiBmKSkKLSAgICAgICAgICAgICAoZm9ybWF0ICJleGVjZmlsZShyJyVzJylcbiIgZmlsZSkpCi0gICAgICAgICAgIGFzeW5jKSkKLSAgICAgIDs7IGVsc2UKLSAgICAgIChweS1leGVjdXRlLWJ1ZmZlciBhc3luYykpKSkKLQotCi0oZGVmdW4gcHktZXhlY3V0ZS1kZWYtb3ItY2xhc3MgKCZvcHRpb25hbCBhc3luYykKLSAgIlNlbmQgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiB0byBhIFB5dGhvbiBpbnRlcnByZXRlci4KLQotSWYgdGhlcmUgaXMgYSAqUHl0aG9uKiBwcm9jZXNzIGJ1ZmZlciBpdCBpcyB1c2VkLgotCi1TZWUgdGhlIGBcXFtweS1leGVjdXRlLXJlZ2lvbl0nIGRvY3MgZm9yIGFuIGFjY291bnQgb2Ygc29tZQotc3VidGxldGllcywgaW5jbHVkaW5nIHRoZSB1c2Ugb2YgdGhlIG9wdGlvbmFsIEFTWU5DIGFyZ3VtZW50LiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHB5LW1hcmstZGVmLW9yLWNsYXNzKQotICAgIDs7IG1hcmsgaXMgYmVmb3JlIHBvaW50Ci0gICAgKHB5LWV4ZWN1dGUtcmVnaW9uIChtYXJrKSAocG9pbnQpIGFzeW5jKSkpCi0KLQotKGRlZnVuIHB5LWV4ZWN1dGUtc3RyaW5nIChzdHJpbmcgJm9wdGlvbmFsIGFzeW5jKQotICAiU2VuZCB0aGUgYXJndW1lbnQgU1RSSU5HIHRvIGEgUHl0aG9uIGludGVycHJldGVyLgotCi1JZiB0aGVyZSBpcyBhICpQeXRob24qIHByb2Nlc3MgYnVmZmVyIGl0IGlzIHVzZWQuCi0KLVNlZSB0aGUgYFxcW3B5LWV4ZWN1dGUtcmVnaW9uXScgZG9jcyBmb3IgYW4gYWNjb3VudCBvZiBzb21lCi1zdWJ0bGV0aWVzLCBpbmNsdWRpbmcgdGhlIHVzZSBvZiB0aGUgb3B0aW9uYWwgQVNZTkMgYXJndW1lbnQuIgotICAoaW50ZXJhY3RpdmUgInNFeGVjdXRlIFB5dGhvbiBjb21tYW5kOiAiKQotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoc2V0LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUKLSAgICAgICAgICAgICAgICAgKGdlbmVyYXRlLW5ldy1idWZmZXItbmFtZSAiICpQeXRob24gQ29tbWFuZCoiKSkpCi0gICAgKGluc2VydCBzdHJpbmcpCi0gICAgKHB5LWV4ZWN1dGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpIGFzeW5jKSkpCi0KLQotDAotKGRlZnVuIHB5LWp1bXAtdG8tZXhjZXB0aW9uIChmaWxlIGxpbmUpCi0gICJKdW1wIHRvIHRoZSBQeXRob24gY29kZSBpbiBGSUxFIGF0IExJTkUuIgotICAobGV0ICgoYnVmZmVyIChjb25kICgoc3RyaW5nLWVxdWFsIGZpbGUgIjxzdGRpbj4iKQotCQkgICAgICAgKGlmIChjb25zcCBweS1leGNlcHRpb24tYnVmZmVyKQotCQkJICAgKGNkciBweS1leGNlcHRpb24tYnVmZmVyKQotCQkJIHB5LWV4Y2VwdGlvbi1idWZmZXIpKQotCQkgICAgICAoKGFuZCAoY29uc3AgcHktZXhjZXB0aW9uLWJ1ZmZlcikKLQkJCSAgICAoc3RyaW5nLWVxdWFsIGZpbGUgKGNhciBweS1leGNlcHRpb24tYnVmZmVyKSkpCi0JCSAgICAgICAoY2RyIHB5LWV4Y2VwdGlvbi1idWZmZXIpKQotCQkgICAgICAoKHB5LXNhZmUgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlKSkpCi0JCSAgICAgIDs7IGNvdWxkIG5vdCBmaWd1cmUgb3V0IHdoYXQgZmlsZSB0aGUgZXhjZXB0aW9uCi0JCSAgICAgIDs7IGlzIHBvaW50aW5nIHRvLCBzbyBwcm9tcHQgZm9yIGl0Ci0JCSAgICAgICh0IChmaW5kLWZpbGUgKHJlYWQtZmlsZS1uYW1lICJFeGNlcHRpb24gZmlsZTogIgotCQkJCQkJICAgIG5pbAotCQkJCQkJICAgIGZpbGUgdCkpKSkpKQotICAgIDs7IEZpZGRsZSBhYm91dCB3aXRoIGxpbmUgbnVtYmVyCi0gICAgKHNldHEgbGluZSAoKyBweS1saW5lLW51bWJlci1vZmZzZXQgbGluZSkpCi0KLSAgICAocG9wLXRvLWJ1ZmZlciBidWZmZXIpCi0gICAgOzsgRm9yY2UgUHl0aG9uIG1vZGUKLSAgICAoaWYgKG5vdCAoZXEgbWFqb3ItbW9kZSAncHl0aG9uLW1vZGUpKQotCShweXRob24tbW9kZSkpCi0gICAgKGdvdG8tbGluZSBsaW5lKQotICAgIChtZXNzYWdlICJKdW1waW5nIHRvIGV4Y2VwdGlvbiBpbiBmaWxlICVzIG9uIGxpbmUgJWQiIGZpbGUgbGluZSkpKQotCi0oZGVmdW4gcHktbW91c2V0by1leGNlcHRpb24gKGV2ZW50KQotICAiSnVtcCB0byB0aGUgY29kZSB3aGljaCBjYXVzZWQgdGhlIFB5dGhvbiBleGNlcHRpb24gYXQgRVZFTlQuCi1FVkVOVCBpcyB1c3VhbGx5IGEgbW91c2UgY2xpY2suIgotICAoaW50ZXJhY3RpdmUgImUiKQotICAoY29uZAotICAgKChmYm91bmRwICdldmVudC1wb2ludCkKLSAgICA7OyBYRW1hY3MKLSAgICAobGV0KiAoKHBvaW50IChldmVudC1wb2ludCBldmVudCkpCi0JICAgKGJ1ZmZlciAoZXZlbnQtYnVmZmVyIGV2ZW50KSkKLQkgICAoZSAoYW5kIHBvaW50IGJ1ZmZlciAoZXh0ZW50LWF0IHBvaW50IGJ1ZmZlciAncHktZXhjLWluZm8pKSkKLQkgICAoaW5mbyAoYW5kIGUgKGV4dGVudC1wcm9wZXJ0eSBlICdweS1leGMtaW5mbykpKSkKLSAgICAgIChtZXNzYWdlICJFdmVudCBwb2ludDogJWQsIGluZm86ICVzIiBwb2ludCBpbmZvKQotICAgICAgKGFuZCBpbmZvCi0JICAgKHB5LWp1bXAtdG8tZXhjZXB0aW9uIChjYXIgaW5mbykgKGNkciBpbmZvKSkpCi0gICAgICApKQotICAgOzsgRW1hY3MgLS0gUGxlYXNlIHBvcnQgdGhpcyEKLSAgICkpCi0KLShkZWZ1biBweS1nb3RvLWV4Y2VwdGlvbiAoKQotICAiR28gdG8gdGhlIGxpbmUgaW5kaWNhdGVkIGJ5IHRoZSB0cmFjZWJhY2suIgotICAoaW50ZXJhY3RpdmUpCi0gIChsZXQgKGZpbGUgbGluZSkKLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAgIChpZiAobG9va2luZy1hdCBweS10cmFjZWJhY2stbGluZS1yZSkKLQkgIChzZXRxIGZpbGUgKG1hdGNoLXN0cmluZyAxKQotCQlsaW5lIChzdHJpbmctdG8taW50IChtYXRjaC1zdHJpbmcgMikpKSkpCi0gICAgKGlmIChub3QgZmlsZSkKLQkoZXJyb3IgIk5vdCBvbiBhIHRyYWNlYmFjayBsaW5lIikpCi0gICAgKHB5LWp1bXAtdG8tZXhjZXB0aW9uIGZpbGUgbGluZSkpKQotCi0oZGVmdW4gcHktZmluZC1uZXh0LWV4Y2VwdGlvbiAoc3RhcnQgYnVmZmVyIHNlYXJjaGRpciBlcnJ3aGVyZSkKLSAgIkZpbmQgdGhlIG5leHQgUHl0aG9uIGV4Y2VwdGlvbiBhbmQganVtcCB0byB0aGUgY29kZSB0aGF0IGNhdXNlZCBpdC4KLVNUQVJUIGlzIHRoZSBidWZmZXIgcG9zaXRpb24gaW4gQlVGRkVSIGZyb20gd2hpY2ggdG8gYmVnaW4gc2VhcmNoaW5nCi1mb3IgYW4gZXhjZXB0aW9uLiAgU0VBUkNIRElSIGlzIGEgZnVuY3Rpb24sIGVpdGhlcgotYHJlLXNlYXJjaC1iYWNrd2FyZCcgb3IgYHJlLXNlYXJjaC1mb3J3YXJkJyBpbmRpY2F0aW5nIHRoZSBkaXJlY3Rpb24KLXRvIHNlYXJjaC4gIEVSUldIRVJFIGlzIHVzZWQgaW4gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgbGltaXQgKHRvcCBvcgotYm90dG9tKSBvZiB0aGUgdHJhY2tiYWNrIHN0YWNrIGlzIGVuY291bnRlcmVkLiIKLSAgKGxldCAoZmlsZSBsaW5lKQotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKHNldC1idWZmZXIgYnVmZmVyKQotICAgICAgKGdvdG8tY2hhciAocHktcG9pbnQgc3RhcnQpKQotICAgICAgKGlmIChmdW5jYWxsIHNlYXJjaGRpciBweS10cmFjZWJhY2stbGluZS1yZSBuaWwgdCkKLQkgIChzZXRxIGZpbGUgKG1hdGNoLXN0cmluZyAxKQotCQlsaW5lIChzdHJpbmctdG8taW50IChtYXRjaC1zdHJpbmcgMikpKSkpCi0gICAgKGlmIChhbmQgZmlsZSBsaW5lKQotCShweS1qdW1wLXRvLWV4Y2VwdGlvbiBmaWxlIGxpbmUpCi0gICAgICAoZXJyb3IgIiVzIG9mIHRyYWNlYmFjayIgZXJyd2hlcmUpKSkpCi0KLShkZWZ1biBweS1kb3duLWV4Y2VwdGlvbiAoJm9wdGlvbmFsIGJvdHRvbSkKLSAgIkdvIHRvIHRoZSBuZXh0IGxpbmUgZG93biBpbiB0aGUgdHJhY2ViYWNrLgotV2l0aCBcXFt1bml2ZXJhbC1hcmd1bWVudF0gKHByb2dyYW1tYXRpY2FsbHksIG9wdGlvbmFsIGFyZ3VtZW50Ci1CT1RUT00pLCBqdW1wIHRvIHRoZSBib3R0b20gKGlubmVybW9zdCkgZXhjZXB0aW9uIGluIHRoZSBleGNlcHRpb24KLXN0YWNrLiIKLSAgKGludGVyYWN0aXZlICJQIikKLSAgKGxldCogKChwcm9jIChnZXQtcHJvY2VzcyAiUHl0aG9uIikpCi0JIChidWZmZXIgKGlmIHByb2MgIipQeXRob24qIiBweS1vdXRwdXQtYnVmZmVyKSkpCi0gICAgKGlmIGJvdHRvbQotCShweS1maW5kLW5leHQtZXhjZXB0aW9uICdlb2IgYnVmZmVyICdyZS1zZWFyY2gtYmFja3dhcmQgIkJvdHRvbSIpCi0gICAgICAocHktZmluZC1uZXh0LWV4Y2VwdGlvbiAnZW9sIGJ1ZmZlciAncmUtc2VhcmNoLWZvcndhcmQgIkJvdHRvbSIpKSkpCi0KLShkZWZ1biBweS11cC1leGNlcHRpb24gKCZvcHRpb25hbCB0b3ApCi0gICJHbyB0byB0aGUgcHJldmlvdXMgbGluZSB1cCBpbiB0aGUgdHJhY2ViYWNrLgotV2l0aCBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIChwcm9ncmFtbWF0aWNhbGx5LCBvcHRpb25hbCBhcmd1bWVudCBUT1ApCi1qdW1wIHRvIHRoZSB0b3AgKG91dGVybW9zdCkgZXhjZXB0aW9uIGluIHRoZSBleGNlcHRpb24gc3RhY2suIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICAobGV0KiAoKHByb2MgKGdldC1wcm9jZXNzICJQeXRob24iKSkKLQkgKGJ1ZmZlciAoaWYgcHJvYyAiKlB5dGhvbioiIHB5LW91dHB1dC1idWZmZXIpKSkKLSAgICAoaWYgdG9wCi0JKHB5LWZpbmQtbmV4dC1leGNlcHRpb24gJ2JvYiBidWZmZXIgJ3JlLXNlYXJjaC1mb3J3YXJkICJUb3AiKQotICAgICAgKHB5LWZpbmQtbmV4dC1leGNlcHRpb24gJ2JvbCBidWZmZXIgJ3JlLXNlYXJjaC1iYWNrd2FyZCAiVG9wIikpKSkKLQotDAotOzsgRWxlY3RyaWMgZGVsZXRpb24KLShkZWZ1biBweS1lbGVjdHJpYy1iYWNrc3BhY2UgKGFyZykKLSAgIkRlbGV0ZSBwcmVjZWRpbmcgY2hhcmFjdGVyIG9yIGxldmVscyBvZiBpbmRlbnRhdGlvbi4KLURlbGV0aW9uIGlzIHBlcmZvcm1lZCBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBpbiBgcHktYmFja3NwYWNlLWZ1bmN0aW9uJwotd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAodGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGRlbGV0ZSkuCi0KLUlmIHBvaW50IGlzIGF0IHRoZSBsZWZ0bW9zdCBjb2x1bW4sIGRlbGV0ZSB0aGUgcHJlY2VkaW5nIG5ld2xpbmUuCi0KLU90aGVyd2lzZSwgaWYgcG9pbnQgaXMgYXQgdGhlIGxlZnRtb3N0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvZiBhCi1saW5lIHRoYXQgaXMgbmVpdGhlciBhIGNvbnRpbnVhdGlvbiBsaW5lIG5vciBhIG5vbi1pbmRlbnRpbmcgY29tbWVudAotbGluZSwgb3IgaWYgcG9pbnQgaXMgYXQgdGhlIGVuZCBvZiBhIGJsYW5rIGxpbmUsIHRoaXMgY29tbWFuZCByZWR1Y2VzCi10aGUgaW5kZW50YXRpb24gdG8gbWF0Y2ggdGhhdCBvZiB0aGUgbGluZSB0aGF0IG9wZW5lZCB0aGUgY3VycmVudAotYmxvY2sgb2YgY29kZS4gIFRoZSBsaW5lIHRoYXQgb3BlbmVkIHRoZSBibG9jayBpcyBkaXNwbGF5ZWQgaW4gdGhlCi1lY2hvIGFyZWEgdG8gaGVscCB5b3Uga2VlcCB0cmFjayBvZiB3aGVyZSB5b3UgYXJlLiAgV2l0aAotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBkZWRlbnRzIHRoYXQgbWFueSBibG9ja3MgKGJ1dCBub3QgcGFzdCBjb2x1bW4KLXplcm8pLgotCi1PdGhlcndpc2UgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgaXMgZGVsZXRlZCwgY29udmVydGluZyBhIHRhYiB0bwotc3BhY2VzIGlmIG5lZWRlZCBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgY29sdW1uIHBvc2l0aW9uIGlzIGRlbGV0ZWQuCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIHNwZWNpZmllcyBob3cgbWFueSBjaGFyYWN0ZXJzIHRvIGRlbGV0ZTsKLWRlZmF1bHQgaXMgMS4KLQotV2hlbiB1c2VkIHByb2dyYW1tYXRpY2FsbHksIGFyZ3VtZW50IEFSRyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZgotYmxvY2tzIHRvIGRlZGVudCwgb3IgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGRlbGV0ZSwgYXMgaW5kaWNhdGVkCi1hYm92ZS4iCi0gIChpbnRlcmFjdGl2ZSAiKnAiKQotICAoaWYgKG9yICgvPSAoY3VycmVudC1pbmRlbnRhdGlvbikgKGN1cnJlbnQtY29sdW1uKSkKLQkgIChib2xwKQotCSAgKHB5LWNvbnRpbnVhdGlvbi1saW5lLXApCi07CSAgKG5vdCBweS1ob25vci1jb21tZW50LWluZGVudGF0aW9uKQotOwkgIChsb29raW5nLWF0ICIjW14gXHRcbl0iKQk7IG5vbi1pbmRlbnRpbmcgIwotCSAgKQotICAgICAgKGZ1bmNhbGwgcHktYmFja3NwYWNlLWZ1bmN0aW9uIGFyZykKLSAgICA7OyBlbHNlIGluZGVudCB0aGUgc2FtZSBhcyB0aGUgY29sb24gbGluZSB0aGF0IG9wZW5lZCB0aGUgYmxvY2sKLSAgICA7OyBmb3JjZSBub24tYmxhbmsgc28gcHktZ290by1ibG9jay11cCBkb2Vzbid0IGlnbm9yZSBpdAotICAgIChpbnNlcnQtY2hhciA/KiAxKQotICAgIChiYWNrd2FyZC1jaGFyKQotICAgIChsZXQgKChiYXNlLWluZGVudCAwKQkJOyBpbmRlbnRhdGlvbiBvZiBiYXNlIGxpbmUKLQkgIChiYXNlLXRleHQgIiIpCQk7IGFuZCB0ZXh0IG9mIGJhc2UgbGluZQotCSAgKGJhc2UtZm91bmQtcCBuaWwpKQotICAgICAgKHNhdmUtZXhjdXJzaW9uCi0JKHdoaWxlICg8IDAgYXJnKQotCSAgKGNvbmRpdGlvbi1jYXNlIG5pbAkJOyBpbiBjYXNlIG5vIGVuY2xvc2luZyBibG9jawotCSAgICAgIChwcm9nbgotCQkocHktZ290by1ibG9jay11cCAnbm8tbWFyaykKLQkJKHNldHEgYmFzZS1pbmRlbnQgKGN1cnJlbnQtaW5kZW50YXRpb24pCi0JCSAgICAgIGJhc2UtdGV4dCAgIChweS1zdWNrLXVwLWxlYWRpbmctdGV4dCkKLQkJICAgICAgYmFzZS1mb3VuZC1wIHQpKQotCSAgICAoZXJyb3IgbmlsKSkKLQkgIChzZXRxIGFyZyAoMS0gYXJnKSkpKQotICAgICAgKGRlbGV0ZS1jaGFyIDEpCQkJOyB0b3NzIHRoZSBkdW1teSBjaGFyYWN0ZXIKLSAgICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSkKLSAgICAgIChpbmRlbnQtdG8gYmFzZS1pbmRlbnQpCi0gICAgICAoaWYgYmFzZS1mb3VuZC1wCi0JICAobWVzc2FnZSAiQ2xvc2VzIGJsb2NrOiAlcyIgYmFzZS10ZXh0KSkpKSkKLQotCi0oZGVmdW4gcHktZWxlY3RyaWMtZGVsZXRlIChhcmcpCi0gICJEZWxldGUgcHJlY2VkaW5nIG9yIGZvbGxvd2luZyBjaGFyYWN0ZXIgb3IgbGV2ZWxzIG9mIHdoaXRlc3BhY2UuCi0KLVRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGRlcGVuZHMgb24gdGhlIHZhcmlhYmxlCi1gZGVsZXRlLWtleS1kZWxldGVzLWZvcndhcmQnLiAgSWYgdGhpcyB2YXJpYWJsZSBpcyBuaWwgKG9yIGRvZXMgbm90Ci1leGlzdCwgYXMgaW4gb2xkZXIgRW1hY3NlbiBhbmQgbm9uLVhFbWFjcyB2ZXJzaW9ucyksIHRoZW4gdGhpcwotZnVuY3Rpb24gYmVoYXZlcyBpZGVudGljYWxseSB0byBcXFtjLWVsZWN0cmljLWJhY2tzcGFjZV0uCi0KLUlmIGBkZWxldGUta2V5LWRlbGV0ZXMtZm9yd2FyZCcgaXMgbm9uLW5pbCBhbmQgaXMgc3VwcG9ydGVkIGluIHlvdXIKLUVtYWNzLCB0aGVuIGRlbGV0aW9uIG9jY3VycyBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24sIGJ5IGNhbGxpbmcgdGhlCi1mdW5jdGlvbiBpbiBgcHktZGVsZXRlLWZ1bmN0aW9uJy4KLQotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSAocHJvZ3JhbW1hdGljYWxseSwgYXJndW1lbnQgQVJHKSBzcGVjaWZpZXMgdGhlCi1udW1iZXIgb2YgY2hhcmFjdGVycyB0byBkZWxldGUgKGRlZmF1bHQgaXMgMSkuIgotICAoaW50ZXJhY3RpdmUgIipwIikKLSAgKGlmIChvciAoYW5kIChmYm91bmRwICdkZWxldGUtZm9yd2FyZC1wKSA7WEVtYWNzIDIxCi0JICAgICAgIChkZWxldGUtZm9yd2FyZC1wKSkKLQkgIChhbmQgKGJvdW5kcCAnZGVsZXRlLWtleS1kZWxldGVzLWZvcndhcmQpIDtYRW1hY3MgMjAKLQkgICAgICAgZGVsZXRlLWtleS1kZWxldGVzLWZvcndhcmQpKQotICAgICAgKGZ1bmNhbGwgcHktZGVsZXRlLWZ1bmN0aW9uIGFyZykKLSAgICAocHktZWxlY3RyaWMtYmFja3NwYWNlIGFyZykpKQotCi07OyByZXF1aXJlZCBmb3IgcGVuZGluZy1kZWwgYW5kIGRlbHNlbCBtb2RlcwotKHB1dCAncHktZWxlY3RyaWMtY29sb24gJ2RlbGV0ZS1zZWxlY3Rpb24gdCkgO2RlbHNlbAotKHB1dCAncHktZWxlY3RyaWMtY29sb24gJ3BlbmRpbmctZGVsZXRlICAgdCkgO3BlbmRpbmctZGVsCi0ocHV0ICdweS1lbGVjdHJpYy1iYWNrc3BhY2UgJ2RlbGV0ZS1zZWxlY3Rpb24gJ3N1cGVyc2VkZSkgO2RlbHNlbAotKHB1dCAncHktZWxlY3RyaWMtYmFja3NwYWNlICdwZW5kaW5nLWRlbGV0ZSAgICdzdXBlcnNlZGUpIDtwZW5kaW5nLWRlbAotKHB1dCAncHktZWxlY3RyaWMtZGVsZXRlICAgICdkZWxldGUtc2VsZWN0aW9uICdzdXBlcnNlZGUpIDtkZWxzZWwKLShwdXQgJ3B5LWVsZWN0cmljLWRlbGV0ZSAgICAncGVuZGluZy1kZWxldGUgICAnc3VwZXJzZWRlKSA7cGVuZGluZy1kZWwKLQotCi0MCi0oZGVmdW4gcHktaW5kZW50LWxpbmUgKCZvcHRpb25hbCBhcmcpCi0gICJGaXggdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgYWNjb3JkaW5nIHRvIFB5dGhvbiBydWxlcy4KLVdpdGggXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSAocHJvZ3JhbW1hdGljYWxseSwgdGhlIG9wdGlvbmFsIGFyZ3VtZW50Ci1BUkcgbm9uLW5pbCksIGlnbm9yZSBkZWRlbnRpbmcgcnVsZXMgZm9yIGJsb2NrIGNsb3Npbmcgc3RhdGVtZW50cwotKGUuZy4gcmV0dXJuLCByYWlzZSwgYnJlYWssIGNvbnRpbnVlLCBwYXNzKQotCi1UaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IGJvdW5kIHRvIGBpbmRlbnQtbGluZS1mdW5jdGlvbicgc28KLVxcW2luZGVudC1mb3ItdGFiLWNvbW1hbmRdIHdpbGwgY2FsbCBpdC4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIChsZXQqICgoY2kgKGN1cnJlbnQtaW5kZW50YXRpb24pKQotCSAobW92ZS10by1pbmRlbnRhdGlvbi1wICg8PSAoY3VycmVudC1jb2x1bW4pIGNpKSkKLQkgKG5lZWQgKHB5LWNvbXB1dGUtaW5kZW50YXRpb24gKG5vdCBhcmcpKSkKLSAgICAgICAgIChjYyAoY3VycmVudC1jb2x1bW4pKSkKLSAgICA7OyBkZWRlbnQgb3V0IGEgbGV2ZWwgaWYgcHJldmlvdXMgY29tbWFuZCB3YXMgdGhlIHNhbWUgdW5sZXNzIHdlJ3JlIGluCi0gICAgOzsgY29sdW1uIDEKLSAgICAoaWYgKGFuZCAoZXF1YWwgbGFzdC1jb21tYW5kIHRoaXMtY29tbWFuZCkKLSAgICAgICAgICAgICAoLz0gY2MgMCkpCi0gICAgICAgIChwcm9nbgotICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAgICAgICAoZGVsZXRlLWhvcml6b250YWwtc3BhY2UpCi0gICAgICAgICAgKGluZGVudC10byAoKiAoLyAoLSBjYyAxKSBweS1pbmRlbnQtb2Zmc2V0KSBweS1pbmRlbnQtb2Zmc2V0KSkpCi0gICAgICAocHJvZ24KLQk7OyBzZWUgaWYgd2UgbmVlZCB0byBkZWRlbnQKLQkoaWYgKHB5LW91dGRlbnQtcCkKLQkgICAgKHNldHEgbmVlZCAoLSBuZWVkIHB5LWluZGVudC1vZmZzZXQpKSkKLQkoaWYgKG9yIHB5LXRhYi1hbHdheXMtaW5kZW50Ci0JCW1vdmUtdG8taW5kZW50YXRpb24tcCkKLQkgICAgKHByb2duIChpZiAoLz0gY2kgbmVlZCkKLQkJICAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCQkgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotCQkgICAgICAgKGRlbGV0ZS1ob3Jpem9udGFsLXNwYWNlKQotCQkgICAgICAgKGluZGVudC10byBuZWVkKSkpCi0JCSAgIChpZiBtb3ZlLXRvLWluZGVudGF0aW9uLXAgKGJhY2stdG8taW5kZW50YXRpb24pKSkKLQkgICAgKGluc2VydC10YWIpKSkpKSkKLQotKGRlZnVuIHB5LW5ld2xpbmUtYW5kLWluZGVudCAoKQotICAiU3RyaXZlcyB0byBhY3QgbGlrZSB0aGUgRW1hY3MgYG5ld2xpbmUtYW5kLWluZGVudCcuCi1UaGlzIGlzIGp1c3QgYHN0cml2ZXMgdG8nIGJlY2F1c2UgY29ycmVjdCBpbmRlbnRhdGlvbiBjYW4ndCBiZSBjb21wdXRlZAotZnJvbSBzY3JhdGNoIGZvciBQeXRob24gY29kZS4gIEluIGdlbmVyYWwsIGRlbGV0ZXMgdGhlIHdoaXRlc3BhY2UgYmVmb3JlCi1wb2ludCwgaW5zZXJ0cyBhIG5ld2xpbmUsIGFuZCB0YWtlcyBhbiBlZHVjYXRlZCBndWVzcyBhcyB0byBob3cgeW91IHdhbnQKLXRoZSBuZXcgbGluZSBpbmRlbnRlZC4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKGNpIChjdXJyZW50LWluZGVudGF0aW9uKSkpCi0gICAgKGlmICg8IGNpIChjdXJyZW50LWNvbHVtbikpCQk7IGlmIHBvaW50IGJleW9uZCBpbmRlbnRhdGlvbgotCShuZXdsaW5lLWFuZC1pbmRlbnQpCi0gICAgICA7OyBlbHNlIHRyeSB0byBhY3QgbGlrZSBuZXdsaW5lLWFuZC1pbmRlbnQgIm5vcm1hbGx5IiBhY3RzCi0gICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gICAgICAoaW5zZXJ0LWNoYXIgP1xuIDEpCi0gICAgICAobW92ZS10by1jb2x1bW4gY2kpKSkpCi0KLShkZWZ1biBweS1jb21wdXRlLWluZGVudGF0aW9uIChob25vci1ibG9jay1jbG9zZS1wKQotICAiQ29tcHV0ZSBQeXRob24gaW5kZW50YXRpb24uCi1XaGVuIEhPTk9SLUJMT0NLLUNMT1NFLVAgaXMgbm9uLW5pbCwgc3RhdGVtZW50cyBzdWNoIGFzIGByZXR1cm4nLAotYHJhaXNlJywgYGJyZWFrJywgYGNvbnRpbnVlJywgYW5kIGBwYXNzJyBmb3JjZSBvbmUgbGV2ZWwgb2YKLWRlZGVudGluZy4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAobGV0KiAoKGJvZCAocHktcG9pbnQgJ2JvZCkpCi0JICAgKHBwcyAocGFyc2UtcGFydGlhbC1zZXhwIGJvZCAocG9pbnQpKSkKLQkgICAoYm9pcHBzIChwYXJzZS1wYXJ0aWFsLXNleHAgYm9kIChweS1wb2ludCAnYm9pKSkpCi0JICAgcGxhY2Vob2xkZXIpCi0gICAgICAoY29uZAotICAgICAgIDs7IGFyZSB3ZSBpbnNpZGUgYSBtdWx0aS1saW5lIHN0cmluZyBvciBjb21tZW50PwotICAgICAgICgob3IgKGFuZCAobnRoIDMgcHBzKSAobnRoIDMgYm9pcHBzKSkKLQkgICAgKGFuZCAobnRoIDQgcHBzKSAobnRoIDQgYm9pcHBzKSkpCi0JKHNhdmUtZXhjdXJzaW9uCi0JICAoaWYgKG5vdCBweS1hbGlnbi1tdWx0aWxpbmUtc3RyaW5ncy1wKSAwCi0JICAgIDs7IHNraXAgYmFjayBvdmVyIGJsYW5rICYgbm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzCi0JICAgIDs7IG5vdGU6IHdpbGwgc2tpcCBhIGJsYW5rIG9yIG5vbi1pbmRlbnRpbmcgY29tbWVudCBsaW5lCi0JICAgIDs7IHRoYXQgaGFwcGVucyB0byBiZSBhIGNvbnRpbnVhdGlvbiBsaW5lIHRvbwotCSAgICAocmUtc2VhcmNoLWJhY2t3YXJkICJeWyBcdF0qXFwoW14gXHRcbiNdXFx8I1sgXHRcbl1cXCkiIG5pbCAnbW92ZSkKLQkgICAgKGJhY2stdG8taW5kZW50YXRpb24pCi0JICAgIChjdXJyZW50LWNvbHVtbikpKSkKLSAgICAgICA7OyBhcmUgd2Ugb24gYSBjb250aW51YXRpb24gbGluZT8KLSAgICAgICAoKHB5LWNvbnRpbnVhdGlvbi1saW5lLXApCi0JKGxldCAoKHN0YXJ0cG9zIChwb2ludCkpCi0JICAgICAgKG9wZW4tYnJhY2tldC1wb3MgKHB5LW5lc3RpbmctbGV2ZWwpKQotCSAgICAgIGVuZHBvcyBzZWFyY2hpbmcgZm91bmQgc3RhdGUgY2luZCBjbGluZSkKLQkgIChpZiBvcGVuLWJyYWNrZXQtcG9zCi0JICAgICAgKHByb2duCi0JCShzZXRxIGVuZHBvcyAocHktcG9pbnQgJ2JvbCkpCi0JCShweS1nb3RvLWluaXRpYWwtbGluZSkKLQkJKHNldHEgY2luZCAoY3VycmVudC1pbmRlbnRhdGlvbikpCi0JCShzZXRxIGNsaW5lIGNpbmQpCi0JCShkb2xpc3QgKGJwIAotCQkJIChudGggOSAoc2F2ZS1leGN1cnNpb24KLQkJCQkgIChwYXJzZS1wYXJ0aWFsLXNleHAgKHBvaW50KSBlbmRwb3MpKSkKLQkJCSBjaW5kKQotCQkgIChpZiAoc2VhcmNoLWZvcndhcmQgIlxuIiBicCB0KSAoc2V0cSBjbGluZSBjaW5kKSkKLQkJICAoZ290by1jaGFyICgxKyBicCkpCi0JCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0IikKLQkJICAoc2V0cSBjaW5kIChpZiAobWVtcSAoZm9sbG93aW5nLWNoYXIpICcoP1xuID8jID9cXCkpCi0JCQkJICgrIGNsaW5lIHB5LWluZGVudC1vZmZzZXQpCi0JCQkgICAgICAgKGN1cnJlbnQtY29sdW1uKSkpKSkKLQkgICAgOzsgZWxzZSBvbiBiYWNrc2xhc2ggY29udGludWF0aW9uIGxpbmUKLQkgICAgKGZvcndhcmQtbGluZSAtMSkKLQkgICAgKGlmIChweS1jb250aW51YXRpb24tbGluZS1wKSA7IG9uIGF0IGxlYXN0IDNyZCBsaW5lIGluIGJsb2NrCi0JCShjdXJyZW50LWluZGVudGF0aW9uKQk7IHNvIGp1c3QgY29udGludWUgdGhlIHBhdHRlcm4KLQkgICAgICA7OyBlbHNlIHN0YXJ0ZWQgb24gMm5kIGxpbmUgaW4gYmxvY2ssIHNvIGluZGVudCBtb3JlLgotCSAgICAgIDs7IGlmIGJhc2UgbGluZSBpcyBhbiBhc3NpZ25tZW50IHdpdGggYSBzdGFydCBvbiBhIFJIUywKLQkgICAgICA7OyBpbmRlbnQgdG8gMiBiZXlvbmQgdGhlIGxlZnRtb3N0ICI9IjsgZWxzZSBza2lwIGZpcnN0Ci0JICAgICAgOzsgY2h1bmsgb2Ygbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBvbiBiYXNlIGxpbmUsICsgMSBtb3JlCi0JICAgICAgOzsgY29sdW1uCi0JICAgICAgKGVuZC1vZi1saW5lKQotCSAgICAgIChzZXRxIGVuZHBvcyAocG9pbnQpCi0JCSAgICBzZWFyY2hpbmcgdCkKLQkgICAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLQkgICAgICAoc2V0cSBzdGFydHBvcyAocG9pbnQpKQotCSAgICAgIDs7IGxvb2sgYXQgYWxsICI9IiBmcm9tIGxlZnQgdG8gcmlnaHQsIHN0b3BwaW5nIGF0IGZpcnN0Ci0JICAgICAgOzsgb25lIG5vdCBuZXN0ZWQgaW4gYSBsaXN0IG9yIHN0cmluZwotCSAgICAgICh3aGlsZSBzZWFyY2hpbmcKLQkJKHNraXAtY2hhcnMtZm9yd2FyZCAiXj0iIGVuZHBvcykKLQkJKGlmICg9IChwb2ludCkgZW5kcG9zKQotCQkgICAgKHNldHEgc2VhcmNoaW5nIG5pbCkKLQkJICAoZm9yd2FyZC1jaGFyIDEpCi0JCSAgKHNldHEgc3RhdGUgKHBhcnNlLXBhcnRpYWwtc2V4cCBzdGFydHBvcyAocG9pbnQpKSkKLQkJICAoaWYgKGFuZCAoemVyb3AgKGNhciBzdGF0ZSkpIDsgbm90IGluIGEgYnJhY2tldAotCQkJICAgKG51bGwgKG50aCAzIHN0YXRlKSkpIDsgJiBub3QgaW4gYSBzdHJpbmcKLQkJICAgICAgKHByb2duCi0JCQkoc2V0cSBzZWFyY2hpbmcgbmlsKSA7IGRvbmUgc2VhcmNoaW5nIGluIGFueSBjYXNlCi0JCQkoc2V0cSBmb3VuZAotCQkJICAgICAgKG5vdCAob3IKLQkJCQkgICAgKGVxIChmb2xsb3dpbmctY2hhcikgPz0pCi0JCQkJICAgIChtZW1xIChjaGFyLWFmdGVyICgtIChwb2ludCkgMikpCi0JCQkJCSAgJyg/PCA/PiA/ISkpKSkpKSkpKQotCSAgICAgIChpZiAob3IgKG5vdCBmb3VuZCkJOyBub3QgYW4gYXNzaWdubWVudAotCQkgICAgICAobG9va2luZy1hdCAiWyBcdF0qXFxcXCIpKSA7IDw9PjxzcGFjZXM+PGJhY2tzbGFzaD4KLQkJICAocHJvZ24KLQkJICAgIChnb3RvLWNoYXIgc3RhcnRwb3MpCi0JCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICJeIFx0XG4iKSkpCi0JICAgICAgOzsgaWYgdGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBmb3IgYSBibG9jayBvcGVuaW5nCi0JICAgICAgOzsgc3RhdGVtZW50LCBhZGQgc29tZSBleHRyYSBvZmZzZXQuCi0JICAgICAgKCsgKGN1cnJlbnQtY29sdW1uKSAoaWYgKHB5LXN0YXRlbWVudC1vcGVucy1ibG9jay1wKQotCQkJCSAgICAgIHB5LWNvbnRpbnVhdGlvbi1vZmZzZXQgMCkKLQkJIDEpCi0JICAgICAgKSkpKQotCi0gICAgICAgOzsgbm90IG9uIGEgY29udGludWF0aW9uIGxpbmUKLSAgICAgICAoKGJvYnApIChjdXJyZW50LWluZGVudGF0aW9uKSkKLQotICAgICAgIDs7IERmbjogIkluZGVudGluZyBjb21tZW50IGxpbmUiLiAgQSBsaW5lIGNvbnRhaW5pbmcgb25seSBhCi0gICAgICAgOzsgY29tbWVudCwgYnV0IHdoaWNoIGlzIHRyZWF0ZWQgbGlrZSBhIHN0YXRlbWVudCBmb3IKLSAgICAgICA7OyBpbmRlbnRhdGlvbiBjYWxjdWxhdGlvbiBwdXJwb3Nlcy4gIFN1Y2ggbGluZXMgYXJlIG9ubHkKLSAgICAgICA7OyB0cmVhdGVkIHNwZWNpYWxseSBieSB0aGUgbW9kZTsgdGhleSBhcmUgbm90IHRyZWF0ZWQKLSAgICAgICA7OyBzcGVjaWFsbHkgYnkgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KLQotICAgICAgIDs7IFRoZSBydWxlcyBmb3IgaW5kZW50aW5nIGNvbW1lbnQgbGluZXMgYXJlIGEgbGluZSB3aGVyZToKLSAgICAgICA7OyAgIC0gdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBgIycsIGFuZAotICAgICAgIDs7ICAgLSB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgYCMnIGlzIHdoaXRlc3BhY2UsIGFuZAotICAgICAgIDs7ICAgLSB0aGUgbGluZSBpcyBkZWRlbnRlZCB3aXRoIHJlc3BlY3QgdG8gKGkuZS4gdG8gdGhlIGxlZnQKLSAgICAgICA7OyAgICAgb2YpIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgcHJlY2VkaW5nIG5vbi1ibGFuayBsaW5lLgotCi0gICAgICAgOzsgVGhlIGZpcnN0IG5vbi1ibGFuayBsaW5lIGZvbGxvd2luZyBhbiBpbmRlbnRpbmcgY29tbWVudAotICAgICAgIDs7IGxpbmUgaXMgZ2l2ZW4gdGhlIHNhbWUgYW1vdW50IG9mIGluZGVudGF0aW9uIGFzIHRoZQotICAgICAgIDs7IGluZGVudGluZyBjb21tZW50IGxpbmUuCi0KLSAgICAgICA7OyBBbGwgb3RoZXIgY29tbWVudC1vbmx5IGxpbmVzIGFyZSBpZ25vcmVkIGZvciBpbmRlbnRhdGlvbgotICAgICAgIDs7IHB1cnBvc2VzLgotCi0gICAgICAgOzsgQXJlIHdlIGxvb2tpbmcgYXQgYSBjb21tZW50LW9ubHkgbGluZSB3aGljaCBpcyAqbm90KiBhbgotICAgICAgIDs7IGluZGVudGluZyBjb21tZW50IGxpbmU/ICBJZiBzbywgd2UgYXNzdW1lIHRoYXQgaXQncyBiZWVuCi0gICAgICAgOzsgcGxhY2VkIGF0IHRoZSBkZXNpcmVkIGluZGVudGF0aW9uLCBzbyBsZWF2ZSBpdCBhbG9uZS4KLSAgICAgICA7OyBJbmRlbnRpbmcgY29tbWVudCBsaW5lcyBhcmUgYWxpZ25lZCBhcyBzdGF0ZW1lbnRzIGRvd24KLSAgICAgICA7OyBiZWxvdy4KLSAgICAgICAoKGFuZCAobG9va2luZy1hdCAiWyBcdF0qI1teIFx0XG5dIikKLQkgICAgIDs7IE5PVEU6IHRoaXMgdGVzdCB3aWxsIG5vdCBiZSBwZXJmb3JtZWQgaW4gb2xkZXIgRW1hY3NlbgotCSAgICAgKGZib3VuZHAgJ2ZvcndhcmQtY29tbWVudCkKLQkgICAgICg8PSAoY3VycmVudC1pbmRlbnRhdGlvbikKLQkJIChzYXZlLWV4Y3Vyc2lvbgotCQkgICAoZm9yd2FyZC1jb21tZW50ICgtIChwb2ludC1tYXgpKSkKLQkJICAgKGN1cnJlbnQtaW5kZW50YXRpb24pKSkpCi0JKGN1cnJlbnQtaW5kZW50YXRpb24pKQotCi0gICAgICAgOzsgZWxzZSBpbmRlbnRhdGlvbiBiYXNlZCBvbiB0aGF0IG9mIHRoZSBzdGF0ZW1lbnQgdGhhdAotICAgICAgIDs7IHByZWNlZGVzIHVzOyB1c2UgdGhlIGZpcnN0IGxpbmUgb2YgdGhhdCBzdGF0ZW1lbnQgdG8KLSAgICAgICA7OyBlc3RhYmxpc2ggdGhlIGJhc2UsIGluIGNhc2UgdGhlIHVzZXIgZm9yY2VkIGEgbm9uLXN0ZAotICAgICAgIDs7IGluZGVudGF0aW9uIGZvciB0aGUgY29udGludWF0aW9uIGxpbmVzIChpZiBhbnkpCi0gICAgICAgKHQKLQk7OyBza2lwIGJhY2sgb3ZlciBibGFuayAmIG5vbi1pbmRlbnRpbmcgY29tbWVudCBsaW5lcyBub3RlOgotCTs7IHdpbGwgc2tpcCBhIGJsYW5rIG9yIG5vbi1pbmRlbnRpbmcgY29tbWVudCBsaW5lIHRoYXQKLQk7OyBoYXBwZW5zIHRvIGJlIGEgY29udGludWF0aW9uIGxpbmUgdG9vLiAgdXNlIGZhc3QgRW1hY3MgMTkKLQk7OyBmdW5jdGlvbiBpZiBpdCdzIHRoZXJlLgotCShpZiAoYW5kIChlcSBweS1ob25vci1jb21tZW50LWluZGVudGF0aW9uIG5pbCkKLQkJIChmYm91bmRwICdmb3J3YXJkLWNvbW1lbnQpKQotCSAgICAoZm9yd2FyZC1jb21tZW50ICgtIChwb2ludC1tYXgpKSkKLQkgIChsZXQgKChwcmVmaXgtcmUgKGNvbmNhdCBweS1ibG9jay1jb21tZW50LXByZWZpeCAiWyBcdF0qIikpCi0JCWRvbmUpCi0JICAgICh3aGlsZSAobm90IGRvbmUpCi0JICAgICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlsgXHRdKlxcKFteIFx0XG4jXVxcfCNcXCkiIG5pbCAnbW92ZSkKLQkgICAgICAoc2V0cSBkb25lIChvciAoYm9icCkKLQkJCSAgICAgKGFuZCAoZXEgcHktaG9ub3ItY29tbWVudC1pbmRlbnRhdGlvbiB0KQotCQkJCSAgKHNhdmUtZXhjdXJzaW9uCi0JCQkJICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotCQkJCSAgICAobm90IChsb29raW5nLWF0IHByZWZpeC1yZSkpCi0JCQkJICAgICkpCi0JCQkgICAgIChhbmQgKG5vdCAoZXEgcHktaG9ub3ItY29tbWVudC1pbmRlbnRhdGlvbiB0KSkKLQkJCQkgIChzYXZlLWV4Y3Vyc2lvbgotCQkJCSAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLQkJCQkgICAgKGFuZCAobm90IChsb29raW5nLWF0IHByZWZpeC1yZSkpCi0JCQkJCSAob3IgKGxvb2tpbmctYXQgIlteI10iKQotCQkJCQkgICAgIChub3QgKHplcm9wIChjdXJyZW50LWNvbHVtbikpKQotCQkJCQkgICAgICkpCi0JCQkJICAgICkpCi0JCQkgICAgICkpCi0JICAgICAgKSkpCi0JOzsgaWYgd2UgbGFuZGVkIGluc2lkZSBhIHN0cmluZywgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0Ci0JOzsgc3RyaW5nLiB0aGlzIGhhbmRsZXMgdHJpcGxlIHF1b3RlZCwgbXVsdGktbGluZSBzcGFubmluZwotCTs7IHN0cmluZ3MuCi0JKHB5LWdvdG8tYmVnaW5uaW5nLW9mLXRxcyAobnRoIDMgKHBhcnNlLXBhcnRpYWwtc2V4cCBib2QgKHBvaW50KSkpKQotCTs7IG5vdyBza2lwIGJhY2t3YXJkIG92ZXIgY29udGludWVkIGxpbmVzCi0JKHNldHEgcGxhY2Vob2xkZXIgKHBvaW50KSkKLQkocHktZ290by1pbml0aWFsLWxpbmUpCi0JOzsgd2UgbWF5ICpub3cqIGhhdmUgbGFuZGVkIGluIGEgVFFTLCBzbyBmaW5kIHRoZSBiZWdpbm5pbmcgb2YKLQk7OyB0aGlzIHN0cmluZy4KLQkocHktZ290by1iZWdpbm5pbmctb2YtdHFzCi0JIChzYXZlLWV4Y3Vyc2lvbiAobnRoIDMgKHBhcnNlLXBhcnRpYWwtc2V4cAotCQkJCSBwbGFjZWhvbGRlciAocG9pbnQpKSkpKQotCSgrIChjdXJyZW50LWluZGVudGF0aW9uKQotCSAgIChpZiAocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApCi0JICAgICAgIHB5LWluZGVudC1vZmZzZXQKLQkgICAgIChpZiAoYW5kIGhvbm9yLWJsb2NrLWNsb3NlLXAgKHB5LXN0YXRlbWVudC1jbG9zZXMtYmxvY2stcCkpCi0JCSAoLSBweS1pbmRlbnQtb2Zmc2V0KQotCSAgICAgICAwKSkpCi0JKSkpKSkKLQotKGRlZnVuIHB5LWd1ZXNzLWluZGVudC1vZmZzZXQgKCZvcHRpb25hbCBnbG9iYWwpCi0gICJHdWVzcyBhIGdvb2QgdmFsdWUgZm9yLCBhbmQgY2hhbmdlLCBgcHktaW5kZW50LW9mZnNldCcuCi0KLUJ5IGRlZmF1bHQsIG1ha2UgYSBidWZmZXItbG9jYWwgY29weSBvZiBgcHktaW5kZW50LW9mZnNldCcgd2l0aCB0aGUKLW5ldyB2YWx1ZSwgc28gdGhhdCBvdGhlciBQeXRob24gYnVmZmVycyBhcmUgbm90IGFmZmVjdGVkLiAgV2l0aAotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSAocHJvZ3JhbW1hdGljYWxseSwgb3B0aW9uYWwgYXJndW1lbnQgR0xPQkFMKSwKLWNoYW5nZSB0aGUgZ2xvYmFsIHZhbHVlIG9mIGBweS1pbmRlbnQtb2Zmc2V0Jy4gIFRoaXMgYWZmZWN0cyBhbGwKLVB5dGhvbiBidWZmZXJzICh0aGF0IGRvbid0IGhhdmUgdGhlaXIgb3duIGJ1ZmZlci1sb2NhbCBjb3B5KSwgYm90aAotdGhvc2UgY3VycmVudGx5IGV4aXN0aW5nIGFuZCB0aG9zZSBjcmVhdGVkIGxhdGVyIGluIHRoZSBFbWFjcyBzZXNzaW9uLgotCi1Tb21lIHBlb3BsZSB1c2UgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGBweS1pbmRlbnQtb2Zmc2V0JyB0aGFuIHlvdSB1c2UuCi1UaGVyZSdzIG5vIGV4Y3VzZSBmb3Igc3VjaCBmb29saXNobmVzcywgYnV0IHNvbWV0aW1lcyB5b3UgaGF2ZSB0byBkZWFsCi13aXRoIHRoZWlyIHVnbHkgY29kZSBhbnl3YXkuICBUaGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSBmaWxlIGFuZCBzZXRzCi1gcHktaW5kZW50LW9mZnNldCcgdG8gd2hhdCBpdCB0aGlua3MgaXQgd2FzIHdoZW4gdGhleSBjcmVhdGVkIHRoZQotbWVzcy4KLQotU3BlY2lmaWNhbGx5LCBpdCBzZWFyY2hlcyBmb3J3YXJkIGZyb20gdGhlIHN0YXRlbWVudCBjb250YWluaW5nIHBvaW50LAotbG9va2luZyBmb3IgYSBsaW5lIHRoYXQgb3BlbnMgYSBibG9jayBvZiBjb2RlLiAgYHB5LWluZGVudC1vZmZzZXQnIGlzCi1zZXQgdG8gdGhlIGRpZmZlcmVuY2UgaW4gaW5kZW50YXRpb24gYmV0d2VlbiB0aGF0IGxpbmUgYW5kIHRoZSBQeXRob24KLXN0YXRlbWVudCBmb2xsb3dpbmcgaXQuICBJZiB0aGUgc2VhcmNoIGRvZXNuJ3Qgc3VjY2VlZCBnb2luZyBmb3J3YXJkLAotaXQncyB0cmllZCBhZ2FpbiBnb2luZyBiYWNrd2FyZC4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCQkJOyByYXcgcHJlZml4IGFyZwotICAobGV0IChuZXctdmFsdWUKLQkoc3RhcnQgKHBvaW50KSkKLQkocmVzdGFydCAocG9pbnQpKQotCShmb3VuZCBuaWwpCi0JY29sb24taW5kZW50KQotICAgIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgICAod2hpbGUgKG5vdCAob3IgZm91bmQgKGVvYnApKSkKLSAgICAgICh3aGVuIChhbmQgKHJlLXNlYXJjaC1mb3J3YXJkICI6WyBcdF0qXFwoJFxcfFsjXFxdXFwpIiBuaWwgJ21vdmUpCi0JCSAobm90IChweS1pbi1saXRlcmFsIHJlc3RhcnQpKSkKLQkoc2V0cSByZXN0YXJ0IChwb2ludCkpCi0JKHB5LWdvdG8taW5pdGlhbC1saW5lKQotCShpZiAocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApCi0JICAgIChzZXRxIGZvdW5kIHQpCi0JICAoZ290by1jaGFyIHJlc3RhcnQpKSkpCi0gICAgKHVubGVzcyBmb3VuZAotICAgICAgKGdvdG8tY2hhciBzdGFydCkKLSAgICAgIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgICAgICh3aGlsZSAobm90IChvciBmb3VuZCAoYm9icCkpKQotCShzZXRxIGZvdW5kIChhbmQKLQkJICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICI6WyBcdF0qXFwoJFxcfFsjXFxdXFwpIiBuaWwgJ21vdmUpCi0JCSAgICAgKG9yIChweS1nb3RvLWluaXRpYWwtbGluZSkgdCkgOyBhbHdheXMgdHJ1ZSAtLSBzaWRlIGVmZmVjdAotCQkgICAgIChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkpKSkpCi0gICAgKHNldHEgY29sb24taW5kZW50IChjdXJyZW50LWluZGVudGF0aW9uKQotCSAgZm91bmQgKGFuZCBmb3VuZCAoemVyb3AgKHB5LW5leHQtc3RhdGVtZW50IDEpKSkKLQkgIG5ldy12YWx1ZSAoLSAoY3VycmVudC1pbmRlbnRhdGlvbikgY29sb24taW5kZW50KSkKLSAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgIChpZiAobm90IGZvdW5kKQotCShlcnJvciAiU29ycnksIGNvdWxkbid0IGd1ZXNzIGEgdmFsdWUgZm9yIHB5LWluZGVudC1vZmZzZXQiKQotICAgICAgKGZ1bmNhbGwgKGlmIGdsb2JhbCAna2lsbC1sb2NhbC12YXJpYWJsZSAnbWFrZS1sb2NhbC12YXJpYWJsZSkKLQkgICAgICAgJ3B5LWluZGVudC1vZmZzZXQpCi0gICAgICAoc2V0cSBweS1pbmRlbnQtb2Zmc2V0IG5ldy12YWx1ZSkKLSAgICAgIChvciBub25pbnRlcmFjdGl2ZQotCSAgKG1lc3NhZ2UgIiVzIHZhbHVlIG9mIHB5LWluZGVudC1vZmZzZXQgc2V0IHRvICVkIgotCQkgICAoaWYgZ2xvYmFsICJHbG9iYWwiICJMb2NhbCIpCi0JCSAgIHB5LWluZGVudC1vZmZzZXQpKSkKLSAgICApKQotCi0oZGVmdW4gcHktY29tbWVudC1pbmRlbnQtZnVuY3Rpb24gKCkKLSAgIlB5dGhvbiB2ZXJzaW9uIG9mIGBjb21tZW50LWluZGVudC1mdW5jdGlvbicuIgotICA7OyBUaGlzIGlzIHJlcXVpcmVkIHdoZW4gZmlsbGFkYXB0IGlzIHR1cm5lZCBvZmYuICBXaXRob3V0IGl0LCB3aGVuCi0gIDs7IGZpbGxhZGFwdCBpcyBub3QgdXNlZCwgY29tbWVudHMgd2hpY2ggc3RhcnQgaW4gY29sdW1uIHplcm8KLSAgOzsgY2FzY2FkZSBvbmUgY2hhcmFjdGVyIHRvIHRoZSByaWdodAotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gICAgKGxldCAoKGVvbCAocHktcG9pbnQgJ2VvbCkpKQotICAgICAgKGFuZCBjb21tZW50LXN0YXJ0LXNraXAKLQkgICAocmUtc2VhcmNoLWZvcndhcmQgY29tbWVudC1zdGFydC1za2lwIGVvbCB0KQotCSAgIChzZXRxIGVvbCAobWF0Y2gtYmVnaW5uaW5nIDApKSkKLSAgICAgIChnb3RvLWNoYXIgZW9sKQotICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCi0gICAgICAobWF4IGNvbW1lbnQtY29sdW1uICgrIChjdXJyZW50LWNvbHVtbikgKGlmIChib2xwKSAwIDEpKSkKLSAgICAgICkpKQotCi0oZGVmdW4gcHktbmFycm93LXRvLWRlZnVuICgmb3B0aW9uYWwgY2xhc3MpCi0gICJNYWtlIHRleHQgb3V0c2lkZSBjdXJyZW50IGRlZnVuIGludmlzaWJsZS4KLVRoZSBkZWZ1biB2aXNpYmxlIGlzIHRoZSBvbmUgdGhhdCBjb250YWlucyBwb2ludCBvciBmb2xsb3dzIHBvaW50LgotT3B0aW9uYWwgQ0xBU1MgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIGBweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzJy4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgICh3aWRlbikKLSAgICAocHktZW5kLW9mLWRlZi1vci1jbGFzcyBjbGFzcykKLSAgICAobGV0ICgoZW5kIChwb2ludCkpKQotICAgICAgKHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgY2xhc3MpCi0gICAgICAobmFycm93LXRvLXJlZ2lvbiAocG9pbnQpIGVuZCkpKSkKLQotDAotKGRlZnVuIHB5LXNoaWZ0LXJlZ2lvbiAoc3RhcnQgZW5kIGNvdW50KQotICAiSW5kZW50IGxpbmVzIGZyb20gU1RBUlQgdG8gRU5EIGJ5IENPVU5UIHNwYWNlcy4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChnb3RvLWNoYXIgZW5kKQotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAoc2V0cSBlbmQgKHBvaW50KSkKLSAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAoc2V0cSBzdGFydCAocG9pbnQpKQotICAgIChpbmRlbnQtcmlnaWRseSBzdGFydCBlbmQgY291bnQpKSkKLQotKGRlZnVuIHB5LXNoaWZ0LXJlZ2lvbi1sZWZ0IChzdGFydCBlbmQgJm9wdGlvbmFsIGNvdW50KQotICAiU2hpZnQgcmVnaW9uIG9mIFB5dGhvbiBjb2RlIHRvIHRoZSBsZWZ0LgotVGhlIGxpbmVzIGZyb20gdGhlIGxpbmUgY29udGFpbmluZyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgcmVnaW9uIHVwCi10byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGVuZCBvZiB0aGUgcmVnaW9uIGFyZQotc2hpZnRlZCB0byB0aGUgbGVmdCwgYnkgYHB5LWluZGVudC1vZmZzZXQnIGNvbHVtbnMuCi0KLUlmIGEgcHJlZml4IGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgcmVnaW9uIGlzIGluc3RlYWQgc2hpZnRlZCBieSB0aGF0Ci1tYW55IGNvbHVtbnMuICBXaXRoIG5vIGFjdGl2ZSByZWdpb24sIGRlZGVudCBvbmx5IHRoZSBjdXJyZW50IGxpbmUuCi1Zb3UgY2Fubm90IGRlZGVudCB0aGUgcmVnaW9uIGlmIGFueSBsaW5lIGlzIGFscmVhZHkgYXQgY29sdW1uIHplcm8uIgotICAoaW50ZXJhY3RpdmUKLSAgIChsZXQgKChwIChwb2ludCkpCi0JIChtIChtYXJrKSkKLQkgKGFyZyBjdXJyZW50LXByZWZpeC1hcmcpKQotICAgICAoaWYgbQotCSAobGlzdCAobWluIHAgbSkgKG1heCBwIG0pIGFyZykKLSAgICAgICAobGlzdCBwIChzYXZlLWV4Y3Vyc2lvbiAoZm9yd2FyZC1saW5lIDEpIChwb2ludCkpIGFyZykpKSkKLSAgOzsgaWYgYW55IGxpbmUgaXMgYXQgY29sdW1uIHplcm8sIGRvbid0IHNoaWZ0IHRoZSByZWdpb24KLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKGdvdG8tY2hhciBzdGFydCkKLSAgICAod2hpbGUgKDwgKHBvaW50KSBlbmQpCi0gICAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLSAgICAgIChpZiAoYW5kICh6ZXJvcCAoY3VycmVudC1jb2x1bW4pKQotCSAgICAgICAobm90IChsb29raW5nLWF0ICJcXHMgKiQiKSkpCi0JICAoZXJyb3IgIlJlZ2lvbiBpcyBhdCBsZWZ0IGVkZ2UiKSkKLSAgICAgIChmb3J3YXJkLWxpbmUgMSkpKQotICAocHktc2hpZnQtcmVnaW9uIHN0YXJ0IGVuZCAoLSAocHJlZml4LW51bWVyaWMtdmFsdWUKLQkJCQkgKG9yIGNvdW50IHB5LWluZGVudC1vZmZzZXQpKSkpCi0gIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKQotCi0oZGVmdW4gcHktc2hpZnQtcmVnaW9uLXJpZ2h0IChzdGFydCBlbmQgJm9wdGlvbmFsIGNvdW50KQotICAiU2hpZnQgcmVnaW9uIG9mIFB5dGhvbiBjb2RlIHRvIHRoZSByaWdodC4KLVRoZSBsaW5lcyBmcm9tIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHJlZ2lvbiB1cAotdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgbGluZSBjb250YWluaW5nIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiBhcmUKLXNoaWZ0ZWQgdG8gdGhlIHJpZ2h0LCBieSBgcHktaW5kZW50LW9mZnNldCcgY29sdW1ucy4KLQotSWYgYSBwcmVmaXggYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSByZWdpb24gaXMgaW5zdGVhZCBzaGlmdGVkIGJ5IHRoYXQKLW1hbnkgY29sdW1ucy4gIFdpdGggbm8gYWN0aXZlIHJlZ2lvbiwgaW5kZW50IG9ubHkgdGhlIGN1cnJlbnQgbGluZS4iCi0gIChpbnRlcmFjdGl2ZQotICAgKGxldCAoKHAgKHBvaW50KSkKLQkgKG0gKG1hcmspKQotCSAoYXJnIGN1cnJlbnQtcHJlZml4LWFyZykpCi0gICAgIChpZiBtCi0JIChsaXN0IChtaW4gcCBtKSAobWF4IHAgbSkgYXJnKQotICAgICAgIChsaXN0IHAgKHNhdmUtZXhjdXJzaW9uIChmb3J3YXJkLWxpbmUgMSkgKHBvaW50KSkgYXJnKSkpKQotICAocHktc2hpZnQtcmVnaW9uIHN0YXJ0IGVuZCAocHJlZml4LW51bWVyaWMtdmFsdWUKLQkJCSAgICAgIChvciBjb3VudCBweS1pbmRlbnQtb2Zmc2V0KSkpCi0gIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKQotCi0oZGVmdW4gcHktaW5kZW50LXJlZ2lvbiAoc3RhcnQgZW5kICZvcHRpb25hbCBpbmRlbnQtb2Zmc2V0KQotICAiUmVpbmRlbnQgYSByZWdpb24gb2YgUHl0aG9uIGNvZGUuCi0KLVRoZSBsaW5lcyBmcm9tIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHJlZ2lvbiB1cAotdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUgbGluZSBjb250YWluaW5nIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiBhcmUKLXJlaW5kZW50ZWQuICBJZiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcmVnaW9uIGhhcyBhIG5vbi13aGl0ZXNwYWNlCi1jaGFyYWN0ZXIgaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlIGZpcnN0IGxpbmUgaXMgbGVmdCBhbG9uZSBhbmQgdGhlCi1yZXN0IG9mIHRoZSByZWdpb24gaXMgcmVpbmRlbnRlZCB3aXRoIHJlc3BlY3QgdG8gaXQuICBFbHNlIHRoZSBlbnRpcmUKLXJlZ2lvbiBpcyByZWluZGVudGVkIHdpdGggcmVzcGVjdCB0byB0aGUgKGNsb3Nlc3QgY29kZSBvciBpbmRlbnRpbmcKLWNvbW1lbnQpIHN0YXRlbWVudCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIHJlZ2lvbi4KLQotVGhpcyBpcyB1c2VmdWwgd2hlbiBjb2RlIGJsb2NrcyBhcmUgbW92ZWQgb3IgeWFua2VkLCB3aGVuIGVuY2xvc2luZwotY29udHJvbCBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkIG9yIHJlbW92ZWQsIG9yIHRvIHJlZm9ybWF0IGNvZGUKLXVzaW5nIGEgbmV3IHZhbHVlIGZvciB0aGUgaW5kZW50YXRpb24gb2Zmc2V0LgotCi1JZiBhIG51bWVyaWMgcHJlZml4IGFyZ3VtZW50IGlzIGdpdmVuLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIG9mCi10aGUgaW5kZW50YXRpb24gb2Zmc2V0LiAgRWxzZSB0aGUgdmFsdWUgb2YgYHB5LWluZGVudC1vZmZzZXQnIHdpbGwgYmUKLXVzZWQuCi0KLVdhcm5pbmc6IFRoZSByZWdpb24gbXVzdCBiZSBjb25zaXN0ZW50bHkgaW5kZW50ZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24KLWlzIGNhbGxlZCEgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY29tcHV0ZSBwcm9wZXIgaW5kZW50YXRpb24gZnJvbQotc2NyYXRjaCAodGhhdCdzIGltcG9zc2libGUgaW4gUHl0aG9uKSwgaXQgbWVyZWx5IGFkanVzdHMgdGhlIGV4aXN0aW5nCi1pbmRlbnRhdGlvbiB0byBiZSBjb3JyZWN0IGluIGNvbnRleHQuCi0KLVdhcm5pbmc6IFRoaXMgZnVuY3Rpb24gcmVhbGx5IGhhcyBubyBpZGVhIHdoYXQgdG8gZG8gd2l0aAotbm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzLCBhbmQgc2hpZnRzIHRoZW0gYXMgaWYgdGhleSB3ZXJlIGluZGVudGluZwotY29tbWVudCBsaW5lcy4gIEZpeGluZyB0aGlzIGFwcGVhcnMgdG8gcmVxdWlyZSB0ZWxlcGF0aHkuCi0KLVNwZWNpYWwgY2FzZXM6IHdoaXRlc3BhY2UgaXMgZGVsZXRlZCBmcm9tIGJsYW5rIGxpbmVzOyBjb250aW51YXRpb24KLWxpbmVzIGFyZSBzaGlmdGVkIGJ5IHRoZSBzYW1lIGFtb3VudCB0aGVpciBpbml0aWFsIGxpbmUgd2FzIHNoaWZ0ZWQsCi1pbiBvcmRlciB0byBwcmVzZXJ2ZSB0aGVpciByZWxhdGl2ZSBpbmRlbnRhdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlaXIKLWluaXRpYWwgbGluZTsgYW5kIGNvbW1lbnQgbGluZXMgYmVnaW5uaW5nIGluIGNvbHVtbiAxIGFyZSBpZ25vcmVkLiIKLSAgKGludGVyYWN0aXZlICIqclxuUCIpCQkJOyByZWdpb247IHJhdyBwcmVmaXggYXJnCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChnb3RvLWNoYXIgZW5kKSAgIChiZWdpbm5pbmctb2YtbGluZSkgKHNldHEgZW5kIChwb2ludC1tYXJrZXIpKQotICAgIChnb3RvLWNoYXIgc3RhcnQpIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAobGV0ICgocHktaW5kZW50LW9mZnNldCAocHJlZml4LW51bWVyaWMtdmFsdWUKLQkJCSAgICAgKG9yIGluZGVudC1vZmZzZXQgcHktaW5kZW50LW9mZnNldCkpKQotCSAgKGluZGVudHMgJygtMSkpCQk7IHN0YWNrIG9mIGFjdGl2ZSBpbmRlbnQgbGV2ZWxzCi0JICAodGFyZ2V0LWNvbHVtbiAwKQkJOyBjb2x1bW4gdG8gd2hpY2ggdG8gaW5kZW50Ci0JICAoYmFzZS1zaGlmdGVkLWJ5IDApCQk7IGFtb3VudCBsYXN0IGJhc2UgbGluZSB3YXMgc2hpZnRlZAotCSAgKGluZGVudC1iYXNlIChpZiAobG9va2luZy1hdCAiWyBcdFxuXSIpCi0JCQkgICAocHktY29tcHV0ZS1pbmRlbnRhdGlvbiB0KQotCQkJIDApKQotCSAgY2kpCi0gICAgICAod2hpbGUgKDwgKHBvaW50KSBlbmQpCi0JKHNldHEgY2kgKGN1cnJlbnQtaW5kZW50YXRpb24pKQotCTs7IGZpZ3VyZSBvdXQgYXBwcm9wcmlhdGUgdGFyZ2V0IGNvbHVtbgotCShjb25kCi0JICgob3IgKGVxIChmb2xsb3dpbmctY2hhcikgPyMpCTsgY29tbWVudCBpbiBjb2x1bW4gMQotCSAgICAgIChsb29raW5nLWF0ICJbIFx0XSokIikpCTsgZW50aXJlbHkgYmxhbmsKLQkgIChzZXRxIHRhcmdldC1jb2x1bW4gMCkpCi0JICgocHktY29udGludWF0aW9uLWxpbmUtcCkJOyBzaGlmdCByZWxhdGl2ZSB0byBiYXNlIGxpbmUKLQkgIChzZXRxIHRhcmdldC1jb2x1bW4gKCsgY2kgYmFzZS1zaGlmdGVkLWJ5KSkpCi0JICh0CQkJCTsgbmV3IGJhc2UgbGluZQotCSAgKGlmICg+IGNpIChjYXIgaW5kZW50cykpCTsgZ29pbmcgZGVlcGVyOyBwdXNoIGl0Ci0JICAgICAgKHNldHEgaW5kZW50cyAoY29ucyBjaSBpbmRlbnRzKSkKLQkgICAgOzsgZWxzZSB3ZSBzaG91bGQgaGF2ZSBzZWVuIHRoaXMgaW5kZW50IGJlZm9yZQotCSAgICAoc2V0cSBpbmRlbnRzIChtZW1xIGNpIGluZGVudHMpKSA7IHBvcCBkZWVwZXIgaW5kZW50cwotCSAgICAoaWYgKG51bGwgaW5kZW50cykKLQkJKGVycm9yICJCYWQgaW5kZW50YXRpb24gaW4gcmVnaW9uLCBhdCBsaW5lICVkIgotCQkgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KLQkJCSAod2lkZW4pCi0JCQkgKDErIChjb3VudC1saW5lcyAxIChwb2ludCkpKSkpKSkKLQkgIChzZXRxIHRhcmdldC1jb2x1bW4gKCsgaW5kZW50LWJhc2UKLQkJCQkgKCogcHktaW5kZW50LW9mZnNldAotCQkJCSAgICAoLSAobGVuZ3RoIGluZGVudHMpIDIpKSkpCi0JICAoc2V0cSBiYXNlLXNoaWZ0ZWQtYnkgKC0gdGFyZ2V0LWNvbHVtbiBjaSkpKSkKLQk7OyBzaGlmdCBhcyBuZWVkZWQKLQkoaWYgKC89IGNpIHRhcmdldC1jb2x1bW4pCi0JICAgIChwcm9nbgotCSAgICAgIChkZWxldGUtaG9yaXpvbnRhbC1zcGFjZSkKLQkgICAgICAoaW5kZW50LXRvIHRhcmdldC1jb2x1bW4pKSkKLQkoZm9yd2FyZC1saW5lIDEpKSkpCi0gIChzZXQtbWFya2VyIGVuZCBuaWwpKQotCi0oZGVmdW4gcHktY29tbWVudC1yZWdpb24gKGJlZyBlbmQgJm9wdGlvbmFsIGFyZykKLSAgIkxpa2UgYGNvbW1lbnQtcmVnaW9uJyBidXQgdXNlcyBkb3VibGUgaGFzaCAoYCMnKSBjb21tZW50IHN0YXJ0ZXIuIgotICAoaW50ZXJhY3RpdmUgInJcblAiKQotICAobGV0ICgoY29tbWVudC1zdGFydCBweS1ibG9jay1jb21tZW50LXByZWZpeCkpCi0gICAgKGNvbW1lbnQtcmVnaW9uIGJlZyBlbmQgYXJnKSkpCi0KLQwKLTs7IEZ1bmN0aW9ucyBmb3IgbW92aW5nIHBvaW50Ci0oZGVmdW4gcHktcHJldmlvdXMtc3RhdGVtZW50IChjb3VudCkKLSAgIkdvIHRvIHRoZSBzdGFydCBvZiB0aGUgQ09VTlR0aCBwcmVjZWRpbmcgUHl0aG9uIHN0YXRlbWVudC4KLUJ5IGRlZmF1bHQsIGdvZXMgdG8gdGhlIHByZXZpb3VzIHN0YXRlbWVudC4gIElmIHRoZXJlIGlzIG5vIHN1Y2gKLXN0YXRlbWVudCwgZ29lcyB0byB0aGUgZmlyc3Qgc3RhdGVtZW50LiAgUmV0dXJuIGNvdW50IG9mIHN0YXRlbWVudHMKLWxlZnQgdG8gbW92ZS4gIGBTdGF0ZW1lbnRzJyBkbyBub3QgaW5jbHVkZSBibGFuaywgY29tbWVudCwgb3IKLWNvbnRpbnVhdGlvbiBsaW5lcy4iCi0gIChpbnRlcmFjdGl2ZSAicCIpCQkJOyBudW1lcmljIHByZWZpeCBhcmcKLSAgKGlmICg8IGNvdW50IDApIChweS1uZXh0LXN0YXRlbWVudCAoLSBjb3VudCkpCi0gICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAgIChsZXQgKHN0YXJ0KQotICAgICAgKHdoaWxlIChhbmQKLQkgICAgICAoc2V0cSBzdGFydCAocG9pbnQpKQk7IGFsd2F5cyB0cnVlIC0tIHNpZGUgZWZmZWN0Ci0JICAgICAgKD4gY291bnQgMCkKLQkgICAgICAoemVyb3AgKGZvcndhcmQtbGluZSAtMSkpCi0JICAgICAgKHB5LWdvdG8tc3RhdGVtZW50LWF0LW9yLWFib3ZlKSkKLQkoc2V0cSBjb3VudCAoMS0gY291bnQpKSkKLSAgICAgIChpZiAoPiBjb3VudCAwKSAoZ290by1jaGFyIHN0YXJ0KSkpCi0gICAgY291bnQpKQotCi0oZGVmdW4gcHktbmV4dC1zdGF0ZW1lbnQgKGNvdW50KQotICAiR28gdG8gdGhlIHN0YXJ0IG9mIG5leHQgUHl0aG9uIHN0YXRlbWVudC4KLUlmIHRoZSBzdGF0ZW1lbnQgYXQgcG9pbnQgaXMgdGhlIGkndGggUHl0aG9uIHN0YXRlbWVudCwgZ29lcyB0byB0aGUKLXN0YXJ0IG9mIHN0YXRlbWVudCBpK0NPVU5ULiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGdvZXMgdG8gdGhlCi1sYXN0IHN0YXRlbWVudC4gIFJldHVybnMgY291bnQgb2Ygc3RhdGVtZW50cyBsZWZ0IHRvIG1vdmUuICBgU3RhdGVtZW50cycKLWRvIG5vdCBpbmNsdWRlIGJsYW5rLCBjb21tZW50LCBvciBjb250aW51YXRpb24gbGluZXMuIgotICAoaW50ZXJhY3RpdmUgInAiKQkJCTsgbnVtZXJpYyBwcmVmaXggYXJnCi0gIChpZiAoPCBjb3VudCAwKSAocHktcHJldmlvdXMtc3RhdGVtZW50ICgtIGNvdW50KSkKLSAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCi0gICAgKGxldCAoc3RhcnQpCi0gICAgICAod2hpbGUgKGFuZAotCSAgICAgIChzZXRxIHN0YXJ0IChwb2ludCkpCTsgYWx3YXlzIHRydWUgLS0gc2lkZSBlZmZlY3QKLQkgICAgICAoPiBjb3VudCAwKQotCSAgICAgIChweS1nb3RvLXN0YXRlbWVudC1iZWxvdykpCi0JKHNldHEgY291bnQgKDEtIGNvdW50KSkpCi0gICAgICAoaWYgKD4gY291bnQgMCkgKGdvdG8tY2hhciBzdGFydCkpKQotICAgIGNvdW50KSkKLQotKGRlZnVuIHB5LWdvdG8tYmxvY2stdXAgKCZvcHRpb25hbCBub21hcmspCi0gICJNb3ZlIHVwIHRvIHN0YXJ0IG9mIGN1cnJlbnQgYmxvY2suCi1HbyB0byB0aGUgc3RhdGVtZW50IHRoYXQgc3RhcnRzIHRoZSBzbWFsbGVzdCBlbmNsb3NpbmcgYmxvY2s7IHJvdWdobHkKLXNwZWFraW5nLCB0aGlzIHdpbGwgYmUgdGhlIGNsb3Nlc3QgcHJlY2VkaW5nIHN0YXRlbWVudCB0aGF0IGVuZHMgd2l0aCBhCi1jb2xvbiBhbmQgaXMgaW5kZW50ZWQgbGVzcyB0aGFuIHRoZSBzdGF0ZW1lbnQgeW91IHN0YXJ0ZWQgb24uICBJZgotc3VjY2Vzc2Z1bCwgYWxzbyBzZXRzIHRoZSBtYXJrIHRvIHRoZSBzdGFydGluZyBwb2ludC4KLQotYFxcW3B5LW1hcmstYmxvY2tdJyBjYW4gYmUgdXNlZCBhZnRlcndhcmQgdG8gbWFyayB0aGUgd2hvbGUgY29kZQotYmxvY2ssIGlmIGRlc2lyZWQuCi0KLUlmIGNhbGxlZCBmcm9tIGEgcHJvZ3JhbSwgdGhlIG1hcmsgd2lsbCBub3QgYmUgc2V0IGlmIG9wdGlvbmFsIGFyZ3VtZW50Ci1OT01BUksgaXMgbm90IG5pbC4iCi0gIChpbnRlcmFjdGl2ZSkKLSAgKGxldCAoKHN0YXJ0IChwb2ludCkpCi0JKGZvdW5kIG5pbCkKLQlpbml0aWFsLWluZGVudCkKLSAgICAocHktZ290by1pbml0aWFsLWxpbmUpCi0gICAgOzsgaWYgb24gYmxhbmsgb3Igbm9uLWluZGVudGluZyBjb21tZW50IGxpbmUsIHVzZSB0aGUgcHJlY2VkaW5nIHN0bXQKLSAgICAoaWYgKGxvb2tpbmctYXQgIlsgXHRdKlxcKCRcXHwjW14gXHRcbl1cXCkiKQotCShwcm9nbgotCSAgKHB5LWdvdG8tc3RhdGVtZW50LWF0LW9yLWFib3ZlKQotCSAgKHNldHEgZm91bmQgKHB5LXN0YXRlbWVudC1vcGVucy1ibG9jay1wKSkpKQotICAgIDs7IHNlYXJjaCBiYWNrIGZvciBjb2xvbiBsaW5lIGluZGVudGVkIGxlc3MKLSAgICAoc2V0cSBpbml0aWFsLWluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikpCi0gICAgKGlmICh6ZXJvcCBpbml0aWFsLWluZGVudCkKLQk7OyBmb3JjZSBmYXN0IGV4aXQKLQkoZ290by1jaGFyIChwb2ludC1taW4pKSkKLSAgICAod2hpbGUgKG5vdCAob3IgZm91bmQgKGJvYnApKSkKLSAgICAgIChzZXRxIGZvdW5kCi0JICAgIChhbmQKLQkgICAgIChyZS1zZWFyY2gtYmFja3dhcmQgIjpbIFx0XSpcXCgkXFx8WyNcXF1cXCkiIG5pbCAnbW92ZSkKLQkgICAgIChvciAocHktZ290by1pbml0aWFsLWxpbmUpIHQpIDsgYWx3YXlzIHRydWUgLS0gc2lkZSBlZmZlY3QKLQkgICAgICg8IChjdXJyZW50LWluZGVudGF0aW9uKSBpbml0aWFsLWluZGVudCkKLQkgICAgIChweS1zdGF0ZW1lbnQtb3BlbnMtYmxvY2stcCkpKSkKLSAgICAoaWYgZm91bmQKLQkocHJvZ24KLQkgIChvciBub21hcmsgKHB1c2gtbWFyayBzdGFydCkpCi0JICAoYmFjay10by1pbmRlbnRhdGlvbikpCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKGVycm9yICJFbmNsb3NpbmcgYmxvY2sgbm90IGZvdW5kIikpKSkKLQotKGRlZnVuIHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgKCZvcHRpb25hbCBjbGFzcyBjb3VudCkKLSAgIk1vdmUgcG9pbnQgdG8gc3RhcnQgb2YgYGRlZicgb3IgYGNsYXNzJy4KLQotU2VhcmNoZXMgYmFjayBmb3IgdGhlIGNsb3Nlc3QgcHJlY2VkaW5nIGBkZWYnLiAgSWYgeW91IHN1cHBseSBhIHByZWZpeAotYXJnLCBsb29rcyBmb3IgYSBgY2xhc3MnIGluc3RlYWQuICBUaGUgZG9jcyBiZWxvdyBhc3N1bWUgdGhlIGBkZWYnCi1jYXNlOyBqdXN0IHN1YnN0aXR1dGUgYGNsYXNzJyBmb3IgYGRlZicgZm9yIHRoZSBvdGhlciBjYXNlLgotUHJvZ3JhbW1hdGljYWxseSwgaWYgQ0xBU1MgaXMgYGVpdGhlcicsIHRoZW4gbW92ZXMgdG8gZWl0aGVyIGBjbGFzcycKLW9yIGBkZWYnLgotCi1XaGVuIHNlY29uZCBvcHRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBwcm9ncmFtbWF0aWNhbGx5LCBtb3ZlIHRvIHRoZQotQ09VTlR0aCBzdGFydCBvZiBgZGVmJy4KLQotSWYgcG9pbnQgaXMgaW4gYSBgZGVmJyBzdGF0ZW1lbnQgYWxyZWFkeSwgYW5kIGFmdGVyIHRoZSBgZCcsIHNpbXBseQotbW92ZXMgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGF0ZW1lbnQuCi0KLU90aGVyd2lzZSAoaS5lLiB3aGVuIHBvaW50IGlzIG5vdCBpbiBhIGBkZWYnIHN0YXRlbWVudCwgb3IgYXQgb3IKLWJlZm9yZSB0aGUgYGQnIG9mIGEgYGRlZicgc3RhdGVtZW50KSwgc2VhcmNoZXMgZm9yIHRoZSBjbG9zZXN0Ci1wcmVjZWRpbmcgYGRlZicgc3RhdGVtZW50LCBhbmQgbGVhdmVzIHBvaW50IGF0IGl0cyBzdGFydC4gIElmIG5vIHN1Y2gKLXN0YXRlbWVudCBjYW4gYmUgZm91bmQsIGxlYXZlcyBwb2ludCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlci4KLQotUmV0dXJucyB0IGlmZiBhIGBkZWYnIHN0YXRlbWVudCBpcyBmb3VuZCBieSB0aGVzZSBydWxlcy4KLQotTm90ZSB0aGF0IGRvaW5nIHRoaXMgY29tbWFuZCByZXBlYXRlZGx5IHdpbGwgdGFrZSB5b3UgY2xvc2VyIHRvIHRoZQotc3RhcnQgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUuCi0KLVRvIG1hcmsgdGhlIGN1cnJlbnQgYGRlZicsIHNlZSBgXFxbcHktbWFyay1kZWYtb3ItY2xhc3NdJy4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCQkJOyByYXcgcHJlZml4IGFyZwotICAoc2V0cSBjb3VudCAob3IgY291bnQgMSkpCi0gIChsZXQgKChhdC1vci1iZWZvcmUtcCAoPD0gKGN1cnJlbnQtY29sdW1uKSAoY3VycmVudC1pbmRlbnRhdGlvbikpKQotCShzdGFydC1vZi1saW5lIChnb3RvLWNoYXIgKHB5LXBvaW50ICdib2wpKSkKLQkoc3RhcnQtb2Ytc3RtdCAoZ290by1jaGFyIChweS1wb2ludCAnYm9zKSkpCi0JKHN0YXJ0LXJlIChjb25kICgoZXEgY2xhc3MgJ2VpdGhlcikgIl5bIFx0XSpcXChjbGFzc1xcfGRlZlxcKVxcPiIpCi0JCQkoY2xhc3MgIl5bIFx0XSpjbGFzc1xcPiIpCi0JCQkodCAiXlsgXHRdKmRlZlxcPiIpKSkKLQkpCi0gICAgOzsgc2VhcmNoaW5nIGJhY2t3YXJkCi0gICAgKGlmIChhbmQgKDwgMCBjb3VudCkKLQkgICAgIChvciAoLz0gc3RhcnQtb2Ytc3RtdCBzdGFydC1vZi1saW5lKQotCQkgKG5vdCBhdC1vci1iZWZvcmUtcCkpKQotCShlbmQtb2YtbGluZSkpCi0gICAgOzsgc2VhcmNoIGZvcndhcmQKLSAgICAoaWYgKGFuZCAoPiAwIGNvdW50KQotCSAgICAgKHplcm9wIChjdXJyZW50LWNvbHVtbikpCi0JICAgICAobG9va2luZy1hdCBzdGFydC1yZSkpCi0JKGVuZC1vZi1saW5lKSkKLSAgICAoaWYgKHJlLXNlYXJjaC1iYWNrd2FyZCBzdGFydC1yZSBuaWwgJ21vdmUgY291bnQpCi0JKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKSkpKQotCi07OyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotKGRlZmFsaWFzICdiZWdpbm5pbmctb2YtcHl0aG9uLWRlZi1vci1jbGFzcyAncHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcykKLQotKGRlZnVuIHB5LWVuZC1vZi1kZWYtb3ItY2xhc3MgKCZvcHRpb25hbCBjbGFzcyBjb3VudCkKLSAgIk1vdmUgcG9pbnQgYmV5b25kIGVuZCBvZiBgZGVmJyBvciBgY2xhc3MnIGJvZHkuCi0KLUJ5IGRlZmF1bHQsIGxvb2tzIGZvciBhbiBhcHByb3ByaWF0ZSBgZGVmJy4gIElmIHlvdSBzdXBwbHkgYSBwcmVmaXgKLWFyZywgbG9va3MgZm9yIGEgYGNsYXNzJyBpbnN0ZWFkLiAgVGhlIGRvY3MgYmVsb3cgYXNzdW1lIHRoZSBgZGVmJwotY2FzZTsganVzdCBzdWJzdGl0dXRlIGBjbGFzcycgZm9yIGBkZWYnIGZvciB0aGUgb3RoZXIgY2FzZS4KLVByb2dyYW1tYXRpY2FsbHksIGlmIENMQVNTIGlzIGBlaXRoZXInLCB0aGVuIG1vdmVzIHRvIGVpdGhlciBgY2xhc3MnCi1vciBgZGVmJy4KLQotV2hlbiBzZWNvbmQgb3B0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gcHJvZ3JhbW1hdGljYWxseSwgbW92ZSB0byB0aGUKLUNPVU5UdGggZW5kIG9mIGBkZWYnLgotCi1JZiBwb2ludCBpcyBpbiBhIGBkZWYnIHN0YXRlbWVudCBhbHJlYWR5LCB0aGlzIGlzIHRoZSBgZGVmJyB3ZSB1c2UuCi0KLUVsc2UsIGlmIHRoZSBgZGVmJyBmb3VuZCBieSBgXFxbcHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzc10nCi1jb250YWlucyB0aGUgc3RhdGVtZW50IHlvdSBzdGFydGVkIG9uLCB0aGF0J3MgdGhlIGBkZWYnIHdlIHVzZS4KLQotT3RoZXJ3aXNlLCB3ZSBzZWFyY2ggZm9yd2FyZCBmb3IgdGhlIGNsb3Nlc3QgZm9sbG93aW5nIGBkZWYnLCBhbmQgdXNlIHRoYXQuCi0KLUlmIGEgYGRlZicgY2FuIGJlIGZvdW5kIGJ5IHRoZXNlIHJ1bGVzLCBwb2ludCBpcyBtb3ZlZCB0byB0aGUgc3RhcnQgb2YKLXRoZSBsaW5lIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYGRlZicgYmxvY2ssIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlCi1zdGFydCBvZiB0aGUgYGRlZicgaXMgcmV0dXJuZWQuCi0KLUVsc2UgcG9pbnQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBhbmQgbmlsIGlzIHJldHVybmVkLgotCi1Ob3RlIHRoYXQgZG9pbmcgdGhpcyBjb21tYW5kIHJlcGVhdGVkbHkgd2lsbCB0YWtlIHlvdSBjbG9zZXIgdG8gdGhlCi1lbmQgb2YgdGhlIGJ1ZmZlciBlYWNoIHRpbWUuCi0KLVRvIG1hcmsgdGhlIGN1cnJlbnQgYGRlZicsIHNlZSBgXFxbcHktbWFyay1kZWYtb3ItY2xhc3NdJy4iCi0gIChpbnRlcmFjdGl2ZSAiUCIpCQkJOyByYXcgcHJlZml4IGFyZwotICAoaWYgKGFuZCBjb3VudCAoLz0gY291bnQgMSkpCi0gICAgICAocHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcyAoLSAxIGNvdW50KSkpCi0gIChsZXQgKChzdGFydCAocHJvZ24gKHB5LWdvdG8taW5pdGlhbC1saW5lKSAocG9pbnQpKSkKLQkod2hpY2ggKGNvbmQgKChlcSBjbGFzcyAnZWl0aGVyKSAiXFwoY2xhc3NcXHxkZWZcXCkiKQotCQkgICAgIChjbGFzcyAiY2xhc3MiKQotCQkgICAgICh0ICJkZWYiKSkpCi0JKHN0YXRlICdub3QtZm91bmQpKQotICAgIDs7IG1vdmUgcG9pbnQgdG8gc3RhcnQgb2YgYXBwcm9wcmlhdGUgZGVmL2NsYXNzCi0gICAgKGlmIChsb29raW5nLWF0IChjb25jYXQgIlsgXHRdKiIgd2hpY2ggIlxcPiIpKSA7IGFscmVhZHkgb24gb25lCi0JKHNldHEgc3RhdGUgJ2F0LWJlZ2lubmluZykKLSAgICAgIDs7IGVsc2Ugc2VlIGlmIHB5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3MgaGl0cyBjb250YWluZXIKLSAgICAgIChpZiAoYW5kIChweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzIGNsYXNzKQotCSAgICAgICAocHJvZ24gKHB5LWdvdG8tYmV5b25kLWJsb2NrKQotCQkgICAgICAoPiAocG9pbnQpIHN0YXJ0KSkpCi0JICAoc2V0cSBzdGF0ZSAnYXQtZW5kKQotCTs7IGVsc2Ugc2VhcmNoIGZvcndhcmQKLQkoZ290by1jaGFyIHN0YXJ0KQotCShpZiAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXlsgXHRdKiIgd2hpY2ggIlxcPiIpIG5pbCAnbW92ZSkKLQkgICAgKHByb2duIChzZXRxIHN0YXRlICdhdC1iZWdpbm5pbmcpCi0JCSAgIChiZWdpbm5pbmctb2YtbGluZSkpKSkpCi0gICAgKGNvbmQKLSAgICAgKChlcSBzdGF0ZSAnYXQtYmVnaW5uaW5nKSAocHktZ290by1iZXlvbmQtYmxvY2spIHQpCi0gICAgICgoZXEgc3RhdGUgJ2F0LWVuZCkgdCkKLSAgICAgKChlcSBzdGF0ZSAnbm90LWZvdW5kKSBuaWwpCi0gICAgICh0IChlcnJvciAiSW50ZXJuYWwgZXJyb3IgaW4gYHB5LWVuZC1vZi1kZWYtb3ItY2xhc3MnIikpKSkpCi0KLTs7IEJhY2t3YXJkcyBjb21wYWJpdGlsaXR5Ci0oZGVmYWxpYXMgJ2VuZC1vZi1weXRob24tZGVmLW9yLWNsYXNzICdweS1lbmQtb2YtZGVmLW9yLWNsYXNzKQotCi0MCi07OyBGdW5jdGlvbnMgZm9yIG1hcmtpbmcgcmVnaW9ucwotKGRlZnVuIHB5LW1hcmstYmxvY2sgKCZvcHRpb25hbCBleHRlbmQganVzdC1tb3ZlKQotICAiTWFyayBmb2xsb3dpbmcgYmxvY2sgb2YgbGluZXMuICBXaXRoIHByZWZpeCBhcmcsIG1hcmsgc3RydWN0dXJlLgotRWFzaWVyIHRvIHVzZSB0aGFuIGV4cGxhaW4uICBJdCBzZXRzIHRoZSByZWdpb24gdG8gYW4gYGludGVyZXN0aW5nJwotYmxvY2sgb2Ygc3VjY2VlZGluZyBsaW5lcy4gIElmIHBvaW50IGlzIG9uIGEgYmxhbmsgbGluZSwgaXQgZ29lcyBkb3duIHRvCi10aGUgbmV4dCBub24tYmxhbmsgbGluZS4gIFRoYXQgd2lsbCBiZSB0aGUgc3RhcnQgb2YgdGhlIHJlZ2lvbi4gIFRoZSBlbmQKLW9mIHRoZSByZWdpb24gZGVwZW5kcyBvbiB0aGUga2luZCBvZiBsaW5lIGF0IHRoZSBzdGFydDoKLQotIC0gSWYgYSBjb21tZW50LCB0aGUgcmVnaW9uIHdpbGwgaW5jbHVkZSBhbGwgc3VjY2VlZGluZyBjb21tZW50IGxpbmVzIHVwCi0gICB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBuZXh0IG5vbi1jb21tZW50IGxpbmUgKGlmIGFueSkuCi0KLSAtIEVsc2UgaWYgYSBwcmVmaXggYXJnIGlzIGdpdmVuLCBhbmQgdGhlIGxpbmUgYmVnaW5zIG9uZSBvZiB0aGVzZQotICAgc3RydWN0dXJlczoKLQotICAgICBpZiBlbGlmIGVsc2UgdHJ5IGV4Y2VwdCBmaW5hbGx5IGZvciB3aGlsZSBkZWYgY2xhc3MKLQotICAgdGhlIHJlZ2lvbiB3aWxsIGJlIHNldCB0byB0aGUgYm9keSBvZiB0aGUgc3RydWN0dXJlLCBpbmNsdWRpbmcKLSAgIGZvbGxvd2luZyBibG9ja3MgdGhhdCBgYmVsb25nJyB0byBpdCwgYnV0IGV4Y2x1ZGluZyB0cmFpbGluZyBibGFuawotICAgYW5kIGNvbW1lbnQgbGluZXMuICBFLmcuLCBpZiBvbiBhIGB0cnknIHN0YXRlbWVudCwgdGhlIGB0cnknIGJsb2NrCi0gICBhbmQgYWxsIChpZiBhbnkpIG9mIHRoZSBmb2xsb3dpbmcgYGV4Y2VwdCcgYW5kIGBmaW5hbGx5JyBibG9ja3MKLSAgIHRoYXQgYmVsb25nIHRvIHRoZSBgdHJ5JyBzdHJ1Y3R1cmUgd2lsbCBiZSBpbiB0aGUgcmVnaW9uLiAgRGl0dG8KLSAgIGZvciBpZi9lbGlmL2Vsc2UsIGZvci9lbHNlIGFuZCB3aGlsZS9lbHNlIHN0cnVjdHVyZXMsIGFuZCAoYSBiaXQKLSAgIGRlZ2VuZXJhdGUsIHNpbmNlIHRoZXkncmUgYWx3YXlzIG9uZS1ibG9jayBzdHJ1Y3R1cmVzKSBkZWYgYW5kCi0gICBjbGFzcyBibG9ja3MuCi0KLSAtIEVsc2UgaWYgbm8gcHJlZml4IGFyZ3VtZW50IGlzIGdpdmVuLCBhbmQgdGhlIGxpbmUgYmVnaW5zIGEgUHl0aG9uCi0gICBibG9jayAoc2VlIGxpc3QgYWJvdmUpLCBhbmQgdGhlIGJsb2NrIGlzIG5vdCBhIGBvbmUtbGluZXInIChpLmUuLAotICAgdGhlIHN0YXRlbWVudCBlbmRzIHdpdGggYSBjb2xvbiwgbm90IHdpdGggY29kZSksIHRoZSByZWdpb24gd2lsbAotICAgaW5jbHVkZSBhbGwgc3VjY2VlZGluZyBsaW5lcyB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSBuZXh0Ci0gICBjb2RlIHN0YXRlbWVudCAoaWYgYW55KSB0aGF0J3MgaW5kZW50ZWQgbm8gbW9yZSB0aGFuIHRoZSBzdGFydGluZwotICAgbGluZSwgZXhjZXB0IHRoYXQgdHJhaWxpbmcgYmxhbmsgYW5kIGNvbW1lbnQgbGluZXMgYXJlIGV4Y2x1ZGVkLgotICAgRS5nLiwgaWYgdGhlIHN0YXJ0aW5nIGxpbmUgYmVnaW5zIGEgbXVsdGktc3RhdGVtZW50IGBkZWYnCi0gICBzdHJ1Y3R1cmUsIHRoZSByZWdpb24gd2lsbCBiZSBzZXQgdG8gdGhlIGZ1bGwgZnVuY3Rpb24gZGVmaW5pdGlvbiwKLSAgIGJ1dCB3aXRob3V0IGFueSB0cmFpbGluZyBgbm9pc2UnIGxpbmVzLgotCi0gLSBFbHNlIHRoZSByZWdpb24gd2lsbCBpbmNsdWRlIGFsbCBzdWNjZWVkaW5nIGxpbmVzIHVwIHRvIChidXQgbm90Ci0gICBpbmNsdWRpbmcpIHRoZSBuZXh0IGJsYW5rIGxpbmUsIG9yIGNvZGUgb3IgaW5kZW50aW5nLWNvbW1lbnQgbGluZQotICAgaW5kZW50ZWQgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBzdGFydGluZyBsaW5lLiAgVHJhaWxpbmcgaW5kZW50aW5nCi0gICBjb21tZW50IGxpbmVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGNhc2UsIGJ1dCBub3QgdHJhaWxpbmcgYmxhbmsKLSAgIGxpbmVzLgotCi1BIG1zZyBpZGVudGlmeWluZyB0aGUgbG9jYXRpb24gb2YgdGhlIG1hcmsgaXMgZGlzcGxheWVkIGluIHRoZSBlY2hvCi1hcmVhOyBvciBkbyBgXFxbZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmtdJyB0byBmbGlwIGRvd24gdG8gdGhlIGVuZC4KLQotSWYgY2FsbGVkIGZyb20gYSBwcm9ncmFtLCBvcHRpb25hbCBhcmd1bWVudCBFWFRFTkQgcGxheXMgdGhlIHJvbGUgb2YKLXRoZSBwcmVmaXggYXJnLCBhbmQgaWYgb3B0aW9uYWwgYXJndW1lbnQgSlVTVC1NT1ZFIGlzIG5vdCBuaWwsIGp1c3QKLW1vdmVzIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICgmIGRvZXMgbm90IHNldCBtYXJrIG9yIGRpc3BsYXkgYSBtc2cpLiIKLSAgKGludGVyYWN0aXZlICJQIikJCQk7IHJhdyBwcmVmaXggYXJnCi0gIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgOzsgc2tpcCBvdmVyIGJsYW5rIGxpbmVzCi0gICh3aGlsZSAoYW5kCi0JICAobG9va2luZy1hdCAiWyBcdF0qJCIpCTsgd2hpbGUgYmxhbmsgbGluZQotCSAgKG5vdCAoZW9icCkpKQkJCTsgJiBzb21ld2hlcmUgdG8gZ28KLSAgICAoZm9yd2FyZC1saW5lIDEpKQotICAoaWYgKGVvYnApCi0gICAgICAoZXJyb3IgIkhpdCBlbmQgb2YgYnVmZmVyIHdpdGhvdXQgZmluZGluZyBhIG5vbi1ibGFuayBzdG10IikpCi0gIChsZXQgKChpbml0aWFsLXBvcyAocG9pbnQpKQotCShpbml0aWFsLWluZGVudCAoY3VycmVudC1pbmRlbnRhdGlvbikpCi0JbGFzdC1wb3MJCQk7IHBvc2l0aW9uIG9mIGxhc3Qgc3RtdCBpbiByZWdpb24KLQkoZm9sbG93ZXJzCi0JICcoKGlmIGVsaWYgZWxzZSkgKGVsaWYgZWxpZiBlbHNlKSAoZWxzZSkKLQkgICAodHJ5IGV4Y2VwdCBmaW5hbGx5KSAoZXhjZXB0IGV4Y2VwdCkgKGZpbmFsbHkpCi0JICAgKGZvciBlbHNlKSAod2hpbGUgZWxzZSkKLQkgICAoZGVmKSAoY2xhc3MpICkgKQotCWZpcnN0LXN5bWJvbCBuZXh0LXN5bWJvbCkKLQotICAgIChjb25kCi0gICAgIDs7IGlmIGNvbW1lbnQgbGluZSwgc3VjayB1cCB0aGUgZm9sbG93aW5nIGNvbW1lbnQgbGluZXMKLSAgICAgKChsb29raW5nLWF0ICJbIFx0XSojIikKLSAgICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKlteIFx0I10iIG5pbCAnbW92ZSkgOyBsb29rIGZvciBub24tY29tbWVudAotICAgICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlsgXHRdKiMiKQk7IGFuZCBiYWNrIHRvIGxhc3QgY29tbWVudCBpbiBibG9jawotICAgICAgKHNldHEgbGFzdC1wb3MgKHBvaW50KSkpCi0KLSAgICAgOzsgZWxzZSBpZiBsaW5lIGlzIGEgYmxvY2sgbGluZSBhbmQgRVhURU5EIGdpdmVuLCBzdWNrIHVwCi0gICAgIDs7IHRoZSB3aG9sZSBzdHJ1Y3R1cmUKLSAgICAgKChhbmQgZXh0ZW5kCi0JICAgKHNldHEgZmlyc3Qtc3ltYm9sIChweS1zdWNrLXVwLWZpcnN0LWtleXdvcmQpICkKLQkgICAoYXNzcSBmaXJzdC1zeW1ib2wgZm9sbG93ZXJzKSkKLSAgICAgICh3aGlsZSAoYW5kCi0JICAgICAgKG9yIChweS1nb3RvLWJleW9uZC1ibG9jaykgdCkgOyBzaWRlIGVmZmVjdAotCSAgICAgIChmb3J3YXJkLWxpbmUgLTEpCQk7IHNpZGUgZWZmZWN0Ci0JICAgICAgKHNldHEgbGFzdC1wb3MgKHBvaW50KSkJOyBzaWRlIGVmZmVjdAotCSAgICAgIChweS1nb3RvLXN0YXRlbWVudC1iZWxvdykKLQkgICAgICAoPSAoY3VycmVudC1pbmRlbnRhdGlvbikgaW5pdGlhbC1pbmRlbnQpCi0JICAgICAgKHNldHEgbmV4dC1zeW1ib2wgKHB5LXN1Y2stdXAtZmlyc3Qta2V5d29yZCkpCi0JICAgICAgKG1lbXEgbmV4dC1zeW1ib2wgKGNkciAoYXNzcSBmaXJzdC1zeW1ib2wgZm9sbG93ZXJzKSkpKQotCShzZXRxIGZpcnN0LXN5bWJvbCBuZXh0LXN5bWJvbCkpKQotCi0gICAgIDs7IGVsc2UgaWYgbGluZSAqb3BlbnMqIGEgYmxvY2ssIHNlYXJjaCBmb3IgbmV4dCBzdG10IGluZGVudGVkIDw9Ci0gICAgICgocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApCi0gICAgICAod2hpbGUgKGFuZAotCSAgICAgIChzZXRxIGxhc3QtcG9zIChwb2ludCkpCTsgYWx3YXlzIHRydWUgLS0gc2lkZSBlZmZlY3QKLQkgICAgICAocHktZ290by1zdGF0ZW1lbnQtYmVsb3cpCi0JICAgICAgKD4gKGN1cnJlbnQtaW5kZW50YXRpb24pIGluaXRpYWwtaW5kZW50KQotCSAgICAgICkpKQotCi0gICAgIDs7IGVsc2UgcGxhaW4gY29kZSBsaW5lOyBzdG9wIGF0IG5leHQgYmxhbmsgbGluZSwgb3Igc3RtdCBvcgotICAgICA7OyBpbmRlbnRpbmcgY29tbWVudCBsaW5lIGluZGVudGVkIDwKLSAgICAgKHQKLSAgICAgICh3aGlsZSAoYW5kCi0JICAgICAgKHNldHEgbGFzdC1wb3MgKHBvaW50KSkJOyBhbHdheXMgdHJ1ZSAtLSBzaWRlIGVmZmVjdAotCSAgICAgIChvciAocHktZ290by1iZXlvbmQtZmluYWwtbGluZSkgdCkKLQkgICAgICAobm90IChsb29raW5nLWF0ICJbIFx0XSokIikpIDsgc3RvcCBhdCBibGFuayBsaW5lCi0JICAgICAgKG9yCi0JICAgICAgICg+PSAoY3VycmVudC1pbmRlbnRhdGlvbikgaW5pdGlhbC1pbmRlbnQpCi0JICAgICAgIChsb29raW5nLWF0ICJbIFx0XSojW14gXHRcbl0iKSkpIDsgaWdub3JlIG5vbi1pbmRlbnRpbmcgIwotCW5pbCkpKQotCi0gICAgOzsgc2tpcCB0byBlbmQgb2YgbGFzdCBzdG10Ci0gICAgKGdvdG8tY2hhciBsYXN0LXBvcykKLSAgICAocHktZ290by1iZXlvbmQtZmluYWwtbGluZSkKLQotICAgIDs7IHNldCBtYXJrICYgZGlzcGxheQotICAgIChpZiBqdXN0LW1vdmUKLQkoKQkJCQk7IGp1c3QgcmV0dXJuCi0gICAgICAocHVzaC1tYXJrIChwb2ludCkgJ25vLW1zZykKLSAgICAgIChmb3J3YXJkLWxpbmUgLTEpCi0gICAgICAobWVzc2FnZSAiTWFyayBzZXQgYWZ0ZXI6ICVzIiAocHktc3Vjay11cC1sZWFkaW5nLXRleHQpKQotICAgICAgKGdvdG8tY2hhciBpbml0aWFsLXBvcykpKSkKLQotKGRlZnVuIHB5LW1hcmstZGVmLW9yLWNsYXNzICgmb3B0aW9uYWwgY2xhc3MpCi0gICJTZXQgcmVnaW9uIHRvIGJvZHkgb2YgZGVmIChvciBjbGFzcywgd2l0aCBwcmVmaXggYXJnKSBlbmNsb3NpbmcgcG9pbnQuCi1QdXNoZXMgdGhlIGN1cnJlbnQgbWFyaywgdGhlbiBwb2ludCwgb24gdGhlIG1hcmsgcmluZyAoYWxsIGxhbmd1YWdlCi1tb2RlcyBkbyB0aGlzLCBidXQgYWx0aG91Z2ggaXQncyBoYW5keSBpdCdzIG5ldmVyIGRvY3VtZW50ZWQgLi4uKS4KLQotSW4gbW9zdCBFbWFjcyBsYW5ndWFnZSBtb2RlcywgdGhpcyBmdW5jdGlvbiBiZWFycyBhdCBsZWFzdCBhCi1oYWxsdWNpbm9nZW5pYyByZXNlbWJsYW5jZSB0byBgXFxbcHktZW5kLW9mLWRlZi1vci1jbGFzc10nIGFuZAotYFxcW3B5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3NdJy4KLQotQW5kIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uIG1vZGUsIGFsbCAzIHdlcmUgdGlnaHRseSBjb25uZWN0ZWQuCi1UdXJuZWQgb3V0IHRoYXQgd2FzIG1vcmUgY29uZnVzaW5nIHRoYW4gdXNlZnVsOiB0aGUgYGdvdG8gc3RhcnQnIGFuZAotYGdvdG8gZW5kJyBjb21tYW5kcyBhcmUgdXN1YWxseSB1c2VkIHRvIHNlYXJjaCB0aHJvdWdoIGEgZmlsZSwgYW5kCi1wZW9wbGUgZXhwZWN0IHRoZW0gdG8gYWN0IGEgbG90IGxpa2UgYHNlYXJjaCBiYWNrd2FyZCcgYW5kIGBzZWFyY2gKLWZvcndhcmQnIHN0cmluZy1zZWFyY2ggY29tbWFuZHMuICBCdXQgYmVjYXVzZSBQeXRob24gYGRlZicgYW5kIGBjbGFzcycKLWNhbiBuZXN0IHRvIGFyYml0cmFyeSBsZXZlbHMsIGZpbmRpbmcgdGhlIHNtYWxsZXN0IGRlZiBjb250YWluaW5nCi1wb2ludCBjYW5ub3QgYmUgZG9uZSB2aWEgYSBzaW1wbGUgYmFja3dhcmQgc2VhcmNoOiB0aGUgZGVmIGNvbnRhaW5pbmcKLXBvaW50IG1heSBub3QgYmUgdGhlIGNsb3Nlc3QgcHJlY2VkaW5nIGRlZiwgb3IgZXZlbiB0aGUgY2xvc2VzdAotcHJlY2VkaW5nIGRlZiB0aGF0J3MgaW5kZW50ZWQgbGVzcy4gIFRoZSBmYW5jeSBhbGdvcml0aG0gcmVxdWlyZWQgaXMKLWFwcHJvcHJpYXRlIGZvciB0aGUgdXN1YWwgdXNlcyBvZiB0aGlzIGBtYXJrJyBjb21tYW5kLCBidXQgbm90IGZvciB0aGUKLWBnb3RvJyB2YXJpYXRpb25zLgotCi1TbyB0aGUgZGVmIG1hcmtlZCBieSB0aGlzIGNvbW1hbmQgbWF5IG5vdCBiZSB0aGUgb25lIGVpdGhlciBvZiB0aGUKLWBnb3RvJyBjb21tYW5kcyBmaW5kOiBJZiBwb2ludCBpcyBvbiBhIGJsYW5rIG9yIG5vbi1pbmRlbnRpbmcgY29tbWVudAotbGluZSwgbW92ZXMgYmFjayB0byBzdGFydCBvZiB0aGUgY2xvc2VzdCBwcmVjZWRpbmcgY29kZSBzdGF0ZW1lbnQgb3IKLWluZGVudGluZyBjb21tZW50IGxpbmUuICBJZiB0aGlzIGlzIGEgYGRlZicgc3RhdGVtZW50LCB0aGF0J3MgdGhlIGRlZgotd2UgdXNlLiAgRWxzZSBzZWFyY2hlcyBmb3IgdGhlIHNtYWxsZXN0IGVuY2xvc2luZyBgZGVmJyBibG9jayBhbmQgdXNlcwotdGhhdC4gIEVsc2Ugc2lnbmFscyBhbiBlcnJvci4KLQotV2hlbiBhbiBlbmNsb3NpbmcgZGVmIGlzIGZvdW5kOiBUaGUgbWFyayBpcyBsZWZ0IGltbWVkaWF0ZWx5IGJleW9uZAotdGhlIGxhc3QgbGluZSBvZiB0aGUgZGVmIGJsb2NrLiAgUG9pbnQgaXMgbGVmdCBhdCB0aGUgc3RhcnQgb2YgdGhlCi1kZWYsIGV4Y2VwdCB0aGF0OiBpZiB0aGUgZGVmIGlzIHByZWNlZGVkIGJ5IGEgbnVtYmVyIG9mIGNvbW1lbnQgbGluZXMKLWZvbGxvd2VkIGJ5IChhdCBtb3N0KSBvbmUgb3B0aW9uYWwgYmxhbmsgbGluZSwgcG9pbnQgaXMgbGVmdCBhdCB0aGUKLXN0YXJ0IG9mIHRoZSBjb21tZW50czsgZWxzZSBpZiB0aGUgZGVmIGlzIHByZWNlZGVkIGJ5IGEgYmxhbmsgbGluZSwKLXBvaW50IGlzIGxlZnQgYXQgaXRzIHN0YXJ0LgotCi1UaGUgaW50ZW50IGlzIHRvIG1hcmsgdGhlIGNvbnRhaW5pbmcgZGVmL2NsYXNzIGFuZCBpdHMgYXNzb2NpYXRlZAotZG9jdW1lbnRhdGlvbiwgdG8gbWFrZSBtb3ZpbmcgYW5kIGR1cGxpY2F0aW5nIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcwotcGxlYXNhbnQuIgotICAoaW50ZXJhY3RpdmUgIlAiKQkJCTsgcmF3IHByZWZpeCBhcmcKLSAgKGxldCAoKHN0YXJ0IChwb2ludCkpCi0JKHdoaWNoIChjb25kICgoZXEgY2xhc3MgJ2VpdGhlcikgIlxcKGNsYXNzXFx8ZGVmXFwpIikKLQkJICAgICAoY2xhc3MgImNsYXNzIikKLQkJICAgICAodCAiZGVmIikpKSkKLSAgICAocHVzaC1tYXJrIHN0YXJ0KQotICAgIChpZiAobm90IChweS1nby11cC10cmVlLXRvLWtleXdvcmQgd2hpY2gpKQotCShwcm9nbiAoZ290by1jaGFyIHN0YXJ0KQotCSAgICAgICAoZXJyb3IgIkVuY2xvc2luZyAlcyBub3QgZm91bmQiCi0JCSAgICAgIChpZiAoZXEgY2xhc3MgJ2VpdGhlcikKLQkJCSAgImRlZiBvciBjbGFzcyIKLQkJCXdoaWNoKSkpCi0gICAgICA7OyBlbHNlIGVuY2xvc2luZyBkZWYvY2xhc3MgZm91bmQKLSAgICAgIChzZXRxIHN0YXJ0IChwb2ludCkpCi0gICAgICAocHktZ290by1iZXlvbmQtYmxvY2spCi0gICAgICAocHVzaC1tYXJrIChwb2ludCkpCi0gICAgICAoZ290by1jaGFyIHN0YXJ0KQotICAgICAgKGlmICh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkJOyBpZiB0aGVyZSBpcyBhIHByZWNlZGluZyBsaW5lCi0JICAocHJvZ24KLQkgICAgKGlmIChsb29raW5nLWF0ICJbIFx0XSokIikJOyBpdCdzIGJsYW5rCi0JCShzZXRxIHN0YXJ0IChwb2ludCkpCTsgc28gcmVzZXQgc3RhcnQgcG9pbnQKLQkgICAgICAoZ290by1jaGFyIHN0YXJ0KSkJOyBlbHNlIHRyeSBhZ2FpbgotCSAgICAoaWYgKHplcm9wIChmb3J3YXJkLWxpbmUgLTEpKQotCQkoaWYgKGxvb2tpbmctYXQgIlsgXHRdKiMiKSA7IGEgY29tbWVudAotCQkgICAgOzsgbG9vayBiYWNrIGZvciBub24tY29tbWVudCBsaW5lCi0JCSAgICA7OyB0cmlja3k6IG5vdGUgdGhhdCB0aGUgcmVnZXhwIG1hdGNoZXMgYSBibGFuawotCQkgICAgOzsgbGluZSwgY3V6IFxuIGlzIGluIHRoZSAybmQgY2hhcmFjdGVyIGNsYXNzCi0JCSAgICAoYW5kCi0JCSAgICAgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXlsgXHRdKlteIFx0I10iIG5pbCAnbW92ZSkKLQkJICAgICAoZm9yd2FyZC1saW5lIDEpKQotCQkgIDs7IG5vIGNvbW1lbnQsIHNvIGdvIGJhY2sKLQkJICAoZ290by1jaGFyIHN0YXJ0KSkpKSkpKQotICAoZXhjaGFuZ2UtcG9pbnQtYW5kLW1hcmspCi0gIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKQotCi07OyByaXBwZWQgZnJvbSBjYy1tb2RlCi0oZGVmdW4gcHktZm9yd2FyZC1pbnRvLW5vbWVuY2xhdHVyZSAoJm9wdGlvbmFsIGFyZykKLSAgIk1vdmUgZm9yd2FyZCB0byBlbmQgb2YgYSBub21lbmNsYXR1cmUgc2VjdGlvbiBvciB3b3JkLgotV2l0aCBcXFt1bml2ZXJzYWwtYXJndW1lbnRdIChwcm9ncmFtbWF0aWNhbGx5LCBvcHRpb25hbCBhcmd1bWVudCBBUkcpLAotZG8gaXQgdGhhdCBtYW55IHRpbWVzLgotCi1BIGBub21lbmNsYXR1cmUnIGlzIGEgZmFuY3kgd2F5IG9mIHNheWluZyBBV29yZFdpdGhNaXhlZENhc2VOb3RVbmRlcnNjb3Jlcy4iCi0gIChpbnRlcmFjdGl2ZSAicCIpCi0gIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIG5pbCkpCi0gICAgKGlmICg+IGFyZyAwKQotCShyZS1zZWFyY2gtZm9yd2FyZAotCSAiXFwoXFxXXFx8W19dXFwpKlxcKFtBLVpdKlthLXowLTldKlxcKSIKLQkgKHBvaW50LW1heCkgdCBhcmcpCi0gICAgICAod2hpbGUgKGFuZCAoPCBhcmcgMCkKLQkJICAocmUtc2VhcmNoLWJhY2t3YXJkCi0JCSAgICJcXChcXFdcXHxbYS16MC05XVxcKVtBLVpdK1xcfFxcKFxcV1xcfFtfXVxcKVxcdysiCi0JCSAgIChwb2ludC1taW4pIDApKQotCShmb3J3YXJkLWNoYXIgMSkKLQkoc2V0cSBhcmcgKDErIGFyZykpKSkpCi0gIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKQotCi0oZGVmdW4gcHktYmFja3dhcmQtaW50by1ub21lbmNsYXR1cmUgKCZvcHRpb25hbCBhcmcpCi0gICJNb3ZlIGJhY2t3YXJkIHRvIGJlZ2lubmluZyBvZiBhIG5vbWVuY2xhdHVyZSBzZWN0aW9uIG9yIHdvcmQuCi1XaXRoIG9wdGlvbmFsIEFSRywgbW92ZSB0aGF0IG1hbnkgdGltZXMuICBJZiBBUkcgaXMgbmVnYXRpdmUsIG1vdmUKLWZvcndhcmQuCi0KLUEgYG5vbWVuY2xhdHVyZScgaXMgYSBmYW5jeSB3YXkgb2Ygc2F5aW5nIEFXb3JkV2l0aE1peGVkQ2FzZU5vdFVuZGVyc2NvcmVzLiIKLSAgKGludGVyYWN0aXZlICJwIikKLSAgKHB5LWZvcndhcmQtaW50by1ub21lbmNsYXR1cmUgKC0gYXJnKSkKLSAgKHB5LWtlZXAtcmVnaW9uLWFjdGl2ZSkpCi0KLQotDAotOzsgcGRidHJhY2sgZnVuY3Rpb25zCi0oZGVmdW4gcHktcGRidHJhY2stdG9nZ2xlLXN0YWNrLXRyYWNraW5nIChhcmcpCi0gIChpbnRlcmFjdGl2ZSAiUCIpCi0gIChpZiAobm90IChnZXQtYnVmZmVyLXByb2Nlc3MgKGN1cnJlbnQtYnVmZmVyKSkpCi0gICAgICAoZXJyb3IgIk5vIHByb2Nlc3MgYXNzb2NpYXRlZCB3aXRoIGJ1ZmZlciAnJXMnIiAoY3VycmVudC1idWZmZXIpKSkKLSAgOzsgbWlzc2luZyBvciAwIGlzIHRvZ2dsZSwgPjAgdHVybiBvbiwgPDAgdHVybiBvZmYKLSAgKGlmIChvciAobm90IGFyZykKLQkgICh6ZXJvcCAoc2V0cSBhcmcgKHByZWZpeC1udW1lcmljLXZhbHVlIGFyZykpKSkKLSAgICAgIChzZXRxIHB5LXBkYnRyYWNrLWRvLXRyYWNraW5nLXAgKG5vdCBweS1wZGJ0cmFjay1kby10cmFja2luZy1wKSkKLSAgICAoc2V0cSBweS1wZGJ0cmFjay1kby10cmFja2luZy1wICg+IGFyZyAwKSkpCi0gIChtZXNzYWdlICIlc2FibGVkIFB5dGhvbidzIHBkYnRyYWNrIgotICAgICAgICAgICAoaWYgcHktcGRidHJhY2stZG8tdHJhY2tpbmctcCAiRW4iICJEaXMiKSkpCi0KLShkZWZ1biB0dXJuLW9uLXBkYnRyYWNrICgpCi0gIChpbnRlcmFjdGl2ZSkKLSAgKHB5LXBkYnRyYWNrLXRvZ2dsZS1zdGFjay10cmFja2luZyAxKSkKLQotKGRlZnVuIHR1cm4tb2ZmLXBkYnRyYWNrICgpCi0gIChpbnRlcmFjdGl2ZSkKLSAgKHB5LXBkYnRyYWNrLXRvZ2dsZS1zdGFjay10cmFja2luZyAwKSkKLQotCi0MCi07OyBQeWNoZWNrZXIKLQotOzsgaGFjayBmb3IgRlNGIEVtYWNzCi0odW5sZXNzIChmYm91bmRwICdyZWFkLXNoZWxsLWNvbW1hbmQpCi0gIChkZWZhbGlhcyAncmVhZC1zaGVsbC1jb21tYW5kICdyZWFkLXN0cmluZykpCi0KLShkZWZ1biBweS1weWNoZWNrZXItcnVuIChjb21tYW5kKQotICAiKlJ1biBweWNoZWNrZXIgKGRlZmF1bHQgb24gdGhlIGZpbGUgY3VycmVudGx5IHZpc2l0ZWQpLiIKLSAgKGludGVyYWN0aXZlCi0gICAobGV0ICgoZGVmYXVsdAotICAgICAgICAgICAoZm9ybWF0ICIlcyAlcyAlcyIgcHktcHljaGVja2VyLWNvbW1hbmQKLQkJICAgKG1hcGNvbmNhdCAnaWRlbnRpdHkgcHktcHljaGVja2VyLWNvbW1hbmQtYXJncyAiICIpCi0JCSAgIChidWZmZXItZmlsZS1uYW1lKSkpCi0JIChsYXN0ICh3aGVuIHB5LXB5Y2hlY2tlci1oaXN0b3J5Ci0JCSAobGV0KiAoKGxhc3RjbWQgKGNhciBweS1weWNoZWNrZXItaGlzdG9yeSkpCi0JCQkoY21kIChjZHIgKHJldmVyc2UgKHNwbGl0LXN0cmluZyBsYXN0Y21kKSkpKQotCQkJKG5ld2NtZCAocmV2ZXJzZSAoY29ucyAoYnVmZmVyLWZpbGUtbmFtZSkgY21kKSkpKQotCQkgICAobWFwY29uY2F0ICdpZGVudGl0eSBuZXdjbWQgIiAiKSkpKSkKLQotICAgICAobGlzdAotICAgICAgKGlmIChmYm91bmRwICdyZWFkLXNoZWxsLWNvbW1hbmQpCi0JICAocmVhZC1zaGVsbC1jb21tYW5kICJSdW4gcHljaGVja2VyIGxpa2UgdGhpczogIgotCQkJICAgICAgKGlmIGxhc3QKLQkJCQkgIGxhc3QKLQkJCQlkZWZhdWx0KQotCQkJICAgICAgJ3B5LXB5Y2hlY2tlci1oaXN0b3J5KQotCShyZWFkLXN0cmluZyAiUnVuIHB5Y2hlY2tlciBsaWtlIHRoaXM6ICIKLQkJICAgICAoaWYgbGFzdAotCQkJIGxhc3QKLQkJICAgICAgIGRlZmF1bHQpCi0JCSAgICAgJ3B5LXB5Y2hlY2tlci1oaXN0b3J5KSkKLQkpKSkKLSAgKHNhdmUtc29tZS1idWZmZXJzIChub3QgcHktYXNrLWFib3V0LXNhdmUpIG5pbCkKLSAgKGNvbXBpbGUtaW50ZXJuYWwgY29tbWFuZCAiTm8gbW9yZSBlcnJvcnMiKSkKLQotCi0MCi07OyBweWRvYyBjb21tYW5kcy4gVGhlIGd1dHMgb2YgdGhpcyBmdW5jdGlvbiBpcyBzdG9sZW4gZnJvbSBYRW1hY3MncwotOzsgc3ltYm9sLW5lYXItcG9pbnQsIGJ1dCB3aXRob3V0IHRoZSB1c2VsZXNzIHJlZ2V4cC1xdW90ZSBjYWxsIG9uIHRoZQotOzsgcmVzdWx0cywgbm9yIHRoZSBpbnRlcmFjdGl2ZSBiaXQuICBBbHNvLCB3ZSd2ZSBhZGRlZCB0aGUgdGVtcG9yYXJ5Ci07OyBzeW50YXggdGFibGUgc2V0dGluZywgd2hpY2ggU2tpcCBvcmlnaW5hbGx5IGhhZCBicm9rZW4gb3V0IGludG8gYQotOzsgc2VwYXJhdGUgZnVuY3Rpb24uICBOb3RlIHRoYXQgRW1hY3MgZG9lc24ndCBoYXZlIHRoZSBvcmlnaW5hbAotOzsgZnVuY3Rpb24uCi0oZGVmdW4gcHktc3ltYm9sLW5lYXItcG9pbnQgKCkKLSAgIlJldHVybiB0aGUgZmlyc3QgdGV4dHVhbCBpdGVtIHRvIHRoZSBuZWFyZXN0IHBvaW50LiIKLSAgOzsgYWxnIHN0b2xlbiBmcm9tIGV0YWcuZWwKLSAgKHNhdmUtZXhjdXJzaW9uCi0gICAgKHdpdGgtc3ludGF4LXRhYmxlIHB5LWRvdHRlZC1leHByZXNzaW9uLXN5bnRheC10YWJsZQotICAgICAgKGlmIChvciAoYm9icCkgKG5vdCAobWVtcSAoY2hhci1zeW50YXggKGNoYXItYmVmb3JlKSkgJyg/dyA/XykpKSkKLQkgICh3aGlsZSAobm90IChsb29raW5nLWF0ICJcXHN3XFx8XFxzX1xcfFxcJyIpKQotCSAgICAoZm9yd2FyZC1jaGFyIDEpKSkKLSAgICAgICh3aGlsZSAobG9va2luZy1hdCAiXFxzd1xcfFxcc18iKQotCShmb3J3YXJkLWNoYXIgMSkpCi0gICAgICAoaWYgKHJlLXNlYXJjaC1iYWNrd2FyZCAiXFxzd1xcfFxcc18iIG5pbCB0KQotCSAgKHByb2duIChmb3J3YXJkLWNoYXIgMSkKLQkJIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkKLQkJCQkgICAocHJvZ24gKGZvcndhcmQtc2V4cCAtMSkKLQkJCQkJICAod2hpbGUgKGxvb2tpbmctYXQgIlxccyciKQotCQkJCQkgICAgKGZvcndhcmQtY2hhciAxKSkKLQkJCQkJICAocG9pbnQpKSkpCi0JbmlsKSkpKQotCi0oZGVmdW4gcHktaGVscC1hdC1wb2ludCAoKQotICAiR2V0IGhlbHAgZnJvbSBQeXRob24gYmFzZWQgb24gdGhlIHN5bWJvbCBuZWFyZXN0IHBvaW50LiIKLSAgKGludGVyYWN0aXZlKQotICAobGV0KiAoKHN5bSAocHktc3ltYm9sLW5lYXItcG9pbnQpKQotCSAoYmFzZSAoc3Vic3RyaW5nIHN5bSAwIChvciAoc2VhcmNoICIuIiBzeW0gOmZyb20tZW5kIHQpIDApKSkKLQkgY21kKQotICAgIChpZiAobm90IChlcXVhbCBiYXNlICIiKSkKLSAgICAgICAgKHNldHEgY21kIChjb25jYXQgImltcG9ydCAiIGJhc2UgIlxuIikpKQotICAgIChzZXRxIGNtZCAoY29uY2F0ICJpbXBvcnQgcHlkb2NcbiIKLSAgICAgICAgICAgICAgICAgICAgICBjbWQKLQkJICAgICAgInRyeTogcHlkb2MuaGVscCgnIiBzeW0gIicpXG4iCi0JCSAgICAgICJleGNlcHQ6IHByaW50ICdObyBoZWxwIGF2YWlsYWJsZSBvbjonLCBcIiIgc3ltICJcIiIpKQotICAgIChtZXNzYWdlIGNtZCkKLSAgICAocHktZXhlY3V0ZS1zdHJpbmcgY21kKQotICAgIChzZXQtYnVmZmVyICIqUHl0aG9uIE91dHB1dCoiKQotICAgIDs7IEJBVzogU2hvdWxkIHdlIHJlYWxseSBiZSBsZWF2aW5nIHRoZSBvdXRwdXQgYnVmZmVyIGluIGhlbHAtbW9kZT8KLSAgICAoaGVscC1tb2RlKSkpCi0KLQotDAotOzsgRG9jdW1lbnRhdGlvbiBmdW5jdGlvbnMKLQotOzsgZHVtcCB0aGUgbG9uZyBmb3JtIG9mIHRoZSBtb2RlIGJsdXJiOyBkb2VzIHRoZSB1c3VhbCBkb2MgZXNjYXBlcywKLTs7IHBsdXMgbGluZXMgb2YgdGhlIGZvcm0gXlt2Y106bmFtZSQgdG8gc3VjayB2YXJpYWJsZSAmIGNvbW1hbmQgZG9jcwotOzsgb3V0IG9mIHRoZSByaWdodCBwbGFjZXMsIGFsb25nIHdpdGggdGhlIGtleXMgdGhleSdyZSBvbiAmIGN1cnJlbnQKLTs7IHZhbHVlcwotKGRlZnVuIHB5LWR1bXAtaGVscC1zdHJpbmcgKHN0cikKLSAgKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIqSGVscCoiCi0gICAgKGxldCAoKGxvY2FscyAoYnVmZmVyLWxvY2FsLXZhcmlhYmxlcykpCi0JICBmdW5ja2luZCBmdW5jbmFtZSBmdW5jIGZ1bmNkb2MKLQkgIChzdGFydCAwKSBtc3RhcnQgZW5kCi0JICBrZXlzICkKLSAgICAgICh3aGlsZSAoc3RyaW5nLW1hdGNoICJeJVxcKFt2Y11cXCk6XFwoLitcXClcbiIgc3RyIHN0YXJ0KQotCShzZXRxIG1zdGFydCAobWF0Y2gtYmVnaW5uaW5nIDApICBlbmQgKG1hdGNoLWVuZCAwKQotCSAgICAgIGZ1bmNraW5kIChzdWJzdHJpbmcgc3RyIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkKLQkgICAgICBmdW5jbmFtZSAoc3Vic3RyaW5nIHN0ciAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRjaC1lbmQgMikpCi0JICAgICAgZnVuYyAoaW50ZXJuIGZ1bmNuYW1lKSkKLQkocHJpbmMgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIChzdWJzdHJpbmcgc3RyIHN0YXJ0IG1zdGFydCkpKQotCShjb25kCi0JICgoZXF1YWwgZnVuY2tpbmQgImMiKQkJOyBjb21tYW5kCi0JICAoc2V0cSBmdW5jZG9jIChkb2N1bWVudGF0aW9uIGZ1bmMpCi0JCWtleXMgKGNvbmNhdAotCQkgICAgICAiS2V5KHMpOiAiCi0JCSAgICAgIChtYXBjb25jYXQgJ2tleS1kZXNjcmlwdGlvbgotCQkJCSAod2hlcmUtaXMtaW50ZXJuYWwgZnVuYyBweS1tb2RlLW1hcCkKLQkJCQkgIiwgIikpKSkKLQkgKChlcXVhbCBmdW5ja2luZCAidiIpCQk7IHZhcmlhYmxlCi0JICAoc2V0cSBmdW5jZG9jIChkb2N1bWVudGF0aW9uLXByb3BlcnR5IGZ1bmMgJ3ZhcmlhYmxlLWRvY3VtZW50YXRpb24pCi0JCWtleXMgKGlmIChhc3NxIGZ1bmMgbG9jYWxzKQotCQkJIChjb25jYXQKLQkJCSAgIkxvY2FsL0dsb2JhbCB2YWx1ZXM6ICIKLQkJCSAgKHByaW4xLXRvLXN0cmluZyAoc3ltYm9sLXZhbHVlIGZ1bmMpKQotCQkJICAiIC8gIgotCQkJICAocHJpbjEtdG8tc3RyaW5nIChkZWZhdWx0LXZhbHVlIGZ1bmMpKSkKLQkJICAgICAgIChjb25jYXQKLQkJCSJWYWx1ZTogIgotCQkJKHByaW4xLXRvLXN0cmluZyAoc3ltYm9sLXZhbHVlIGZ1bmMpKSkpKSkKLQkgKHQJCQkJOyB1bmV4cGVjdGVkCi0JICAoZXJyb3IgIkVycm9yIGluIHB5LWR1bXAtaGVscC1zdHJpbmcsIHRhZyBgJXMnIiBmdW5ja2luZCkpKQotCShwcmluYyAoZm9ybWF0ICJcbi0+ICVzOlx0JXNcdCVzXG5cbiIKLQkJICAgICAgIChpZiAoZXF1YWwgZnVuY2tpbmQgImMiKSAiQ29tbWFuZCIgIlZhcmlhYmxlIikKLQkJICAgICAgIGZ1bmNuYW1lIGtleXMpKQotCShwcmluYyBmdW5jZG9jKQotCSh0ZXJwcmkpCi0JKHNldHEgc3RhcnQgZW5kKSkKLSAgICAgIChwcmluYyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMgKHN1YnN0cmluZyBzdHIgc3RhcnQpKSkpCi0gICAgKHByaW50LWhlbHAtcmV0dXJuLW1lc3NhZ2UpKSkKLQotKGRlZnVuIHB5LWRlc2NyaWJlLW1vZGUgKCkKLSAgIkR1bXAgbG9uZyBmb3JtIG9mIFB5dGhvbi1tb2RlIGRvY3MuIgotICAoaW50ZXJhY3RpdmUpCi0gIChweS1kdW1wLWhlbHAtc3RyaW5nICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIFB5dGhvbiBmaWxlcy4KLUtub3dzIGFib3V0IFB5dGhvbiBpbmRlbnRhdGlvbiwgdG9rZW5zLCBjb21tZW50cyBhbmQgY29udGludWF0aW9uIGxpbmVzLgotUGFyYWdyYXBocyBhcmUgc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzIG9ubHkuCi0KLU1ham9yIHNlY3Rpb25zIGJlbG93IGJlZ2luIHdpdGggdGhlIHN0cmluZyBgQCc7IHNwZWNpZmljIGZ1bmN0aW9uIGFuZAotdmFyaWFibGUgZG9jcyBiZWdpbiB3aXRoIGAtPicuCi0KLUBFWEVDVVRJTkcgUFlUSE9OIENPREUKLQotXFxbcHktZXhlY3V0ZS1pbXBvcnQtb3ItcmVsb2FkXVx0aW1wb3J0cyBvciByZWxvYWRzIHRoZSBmaWxlIGluIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIKLVxcW3B5LWV4ZWN1dGUtYnVmZmVyXVx0c2VuZHMgdGhlIGVudGlyZSBidWZmZXIgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlcgotXFxbcHktZXhlY3V0ZS1yZWdpb25dXHRzZW5kcyB0aGUgY3VycmVudCByZWdpb24KLVxcW3B5LWV4ZWN1dGUtZGVmLW9yLWNsYXNzXVx0c2VuZHMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbgotXFxbcHktZXhlY3V0ZS1zdHJpbmddXHRzZW5kcyBhbiBhcmJpdHJhcnkgc3RyaW5nCi1cXFtweS1zaGVsbF1cdHN0YXJ0cyBhIFB5dGhvbiBpbnRlcnByZXRlciB3aW5kb3c7IHRoaXMgd2lsbCBiZSB1c2VkIGJ5Ci1cdHN1YnNlcXVlbnQgUHl0aG9uIGV4ZWN1dGlvbiBjb21tYW5kcwotJWM6cHktZXhlY3V0ZS1pbXBvcnQtb3ItcmVsb2FkCi0lYzpweS1leGVjdXRlLWJ1ZmZlcgotJWM6cHktZXhlY3V0ZS1yZWdpb24KLSVjOnB5LWV4ZWN1dGUtZGVmLW9yLWNsYXNzCi0lYzpweS1leGVjdXRlLXN0cmluZwotJWM6cHktc2hlbGwKLQotQFZBUklBQkxFUwotCi1weS1pbmRlbnQtb2Zmc2V0XHRpbmRlbnRhdGlvbiBpbmNyZW1lbnQKLXB5LWJsb2NrLWNvbW1lbnQtcHJlZml4XHRjb21tZW50IHN0cmluZyB1c2VkIGJ5IGNvbW1lbnQtcmVnaW9uCi0KLXB5LXB5dGhvbi1jb21tYW5kXHRzaGVsbCBjb21tYW5kIHRvIGludm9rZSBQeXRob24gaW50ZXJwcmV0ZXIKLXB5LXRlbXAtZGlyZWN0b3J5XHRkaXJlY3RvcnkgdXNlZCBmb3IgdGVtcCBmaWxlcyAoaWYgbmVlZGVkKQotCi1weS1iZWVwLWlmLXRhYi1jaGFuZ2VcdHJpbmcgdGhlIGJlbGwgaWYgdGFiLXdpZHRoIGlzIGNoYW5nZWQKLSV2OnB5LWluZGVudC1vZmZzZXQKLSV2OnB5LWJsb2NrLWNvbW1lbnQtcHJlZml4Ci0ldjpweS1weXRob24tY29tbWFuZAotJXY6cHktdGVtcC1kaXJlY3RvcnkKLSV2OnB5LWJlZXAtaWYtdGFiLWNoYW5nZQotCi1AS0lORFMgT0YgTElORVMKLQotRWFjaCBwaHlzaWNhbCBsaW5lIGluIHRoZSBmaWxlIGlzIGVpdGhlciBhIGBjb250aW51YXRpb24gbGluZScgKHRoZQotcHJlY2VkaW5nIGxpbmUgZW5kcyB3aXRoIGEgYmFja3NsYXNoIHRoYXQncyBub3QgcGFydCBvZiBhIGNvbW1lbnQsIG9yCi10aGUgcGFyZW4vYnJhY2tldC9icmFjZSBuZXN0aW5nIGxldmVsIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBpcwotbm9uLXplcm8sIG9yIGJvdGgpIG9yIGFuIGBpbml0aWFsIGxpbmUnIChldmVyeXRoaW5nIGVsc2UpLgotCi1BbiBpbml0aWFsIGxpbmUgaXMgaW4gdHVybiBhIGBibGFuayBsaW5lJyAoY29udGFpbnMgbm90aGluZyBleGNlcHQKLXBvc3NpYmx5IGJsYW5rcyBvciB0YWJzKSwgYSBgY29tbWVudCBsaW5lJyAobGVmdG1vc3Qgbm9uLWJsYW5rCi1jaGFyYWN0ZXIgaXMgYCMnKSwgb3IgYSBgY29kZSBsaW5lJyAoZXZlcnl0aGluZyBlbHNlKS4KLQotQ29tbWVudCBMaW5lcwotCi1BbHRob3VnaCBhbGwgY29tbWVudCBsaW5lcyBhcmUgdHJlYXRlZCBhbGlrZSBieSBQeXRob24sIFB5dGhvbiBtb2RlCi1yZWNvZ25pemVzIHR3byBraW5kcyB0aGF0IGFjdCBkaWZmZXJlbnRseSB3aXRoIHJlc3BlY3QgdG8gaW5kZW50YXRpb24uCi0KLUFuIGBpbmRlbnRpbmcgY29tbWVudCBsaW5lJyBpcyBhIGNvbW1lbnQgbGluZSB3aXRoIGEgYmxhbmssIHRhYiBvcgotbm90aGluZyBhZnRlciB0aGUgaW5pdGlhbCBgIycuICBUaGUgaW5kZW50YXRpb24gY29tbWFuZHMgKHNlZSBiZWxvdykKLXRyZWF0IHRoZXNlIGV4YWN0bHkgYXMgaWYgdGhleSB3ZXJlIGNvZGUgbGluZXM6IGEgbGluZSBmb2xsb3dpbmcgYW4KLWluZGVudGluZyBjb21tZW50IGxpbmUgd2lsbCBiZSBpbmRlbnRlZCBsaWtlIHRoZSBjb21tZW50IGxpbmUuICBBbGwKLW90aGVyIGNvbW1lbnQgbGluZXMgKHRob3NlIHdpdGggYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkKLWZvbGxvd2luZyB0aGUgaW5pdGlhbCBgIycpIGFyZSBgbm9uLWluZGVudGluZyBjb21tZW50IGxpbmVzJywgYW5kCi10aGVpciBpbmRlbnRhdGlvbiBpcyBpZ25vcmVkIGJ5IHRoZSBpbmRlbnRhdGlvbiBjb21tYW5kcy4KLQotSW5kZW50aW5nIGNvbW1lbnQgbGluZXMgYXJlIGJ5IGZhciB0aGUgdXN1YWwgY2FzZSwgYW5kIHNob3VsZCBiZSB1c2VkCi13aGVuZXZlciBwb3NzaWJsZS4gIE5vbi1pbmRlbnRpbmcgY29tbWVudCBsaW5lcyBhcmUgdXNlZnVsIGluIGNhc2VzCi1saWtlIHRoZXNlOgotCi1cdGEgPSBiICAgIyBhIHZlcnkgd29yZHkgc2luZ2xlLWxpbmUgY29tbWVudCB0aGF0IGVuZHMgdXAgYmVpbmcKLVx0ICAgICAgICAjLi4uIGNvbnRpbnVlZCBvbnRvIGFub3RoZXIgbGluZQotCi1cdGlmIGEgPT0gYjoKLSMjXHRcdHByaW50ICdwYW5pYyEnICMgb2xkIGNvZGUgd2UndmUgYGNvbW1lbnRlZCBvdXQnCi1cdFx0cmV0dXJuIGEKLQotU2luY2UgdGhlIGAjLi4uJyBhbmQgYCMjJyBjb21tZW50IGxpbmVzIGhhdmUgYSBub24td2hpdGVzcGFjZQotY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgaW5pdGlhbCBgIycsIFB5dGhvbiBtb2RlIGlnbm9yZXMgdGhlbSB3aGVuCi1jb21wdXRpbmcgdGhlIHByb3BlciBpbmRlbnRhdGlvbiBmb3IgdGhlIG5leHQgbGluZS4KLQotQ29udGludWF0aW9uIExpbmVzIGFuZCBTdGF0ZW1lbnRzCi0KLVRoZSBQeXRob24tbW9kZSBjb21tYW5kcyBnZW5lcmFsbHkgd29yayBvbiBzdGF0ZW1lbnRzIGluc3RlYWQgb2Ygb24KLWluZGl2aWR1YWwgbGluZXMsIHdoZXJlIGEgYHN0YXRlbWVudCcgaXMgYSBjb21tZW50IG9yIGJsYW5rIGxpbmUsIG9yIGEKLWNvZGUgbGluZSBhbmQgYWxsIG9mIGl0cyBmb2xsb3dpbmcgY29udGludWF0aW9uIGxpbmVzIChpZiBhbnkpCi1jb25zaWRlcmVkIGFzIGEgc2luZ2xlIGxvZ2ljYWwgdW5pdC4gIFRoZSBjb21tYW5kcyBpbiB0aGlzIG1vZGUKLWdlbmVyYWxseSAod2hlbiBpdCBtYWtlcyBzZW5zZSkgYXV0b21hdGljYWxseSBtb3ZlIHRvIHRoZSBzdGFydCBvZiB0aGUKLXN0YXRlbWVudCBjb250YWluaW5nIHBvaW50LCBldmVuIGlmIHBvaW50IGhhcHBlbnMgdG8gYmUgaW4gdGhlIG1pZGRsZQotb2Ygc29tZSBjb250aW51YXRpb24gbGluZS4KLQotCi1ASU5ERU5UQVRJT04KLQotUHJpbWFyaWx5IGZvciBlbnRlcmluZyBuZXcgY29kZToKLVx0XFxbaW5kZW50LWZvci10YWItY29tbWFuZF1cdCBpbmRlbnQgbGluZSBhcHByb3ByaWF0ZWx5Ci1cdFxcW3B5LW5ld2xpbmUtYW5kLWluZGVudF1cdCBpbnNlcnQgbmV3bGluZSwgdGhlbiBpbmRlbnQKLVx0XFxbcHktZWxlY3RyaWMtYmFja3NwYWNlXVx0IHJlZHVjZSBpbmRlbnRhdGlvbiwgb3IgZGVsZXRlIHNpbmdsZSBjaGFyYWN0ZXIKLQotUHJpbWFyaWx5IGZvciByZWluZGVudGluZyBleGlzdGluZyBjb2RlOgotXHRcXFtweS1ndWVzcy1pbmRlbnQtb2Zmc2V0XVx0IGd1ZXNzIHB5LWluZGVudC1vZmZzZXQgZnJvbSBmaWxlIGNvbnRlbnQ7IGNoYW5nZSBsb2NhbGx5Ci1cdFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbcHktZ3Vlc3MtaW5kZW50LW9mZnNldF1cdCBkaXR0bywgYnV0IGNoYW5nZSBnbG9iYWxseQotCi1cdFxcW3B5LWluZGVudC1yZWdpb25dXHQgcmVpbmRlbnQgcmVnaW9uIHRvIG1hdGNoIGl0cyBjb250ZXh0Ci1cdFxcW3B5LXNoaWZ0LXJlZ2lvbi1sZWZ0XVx0IHNoaWZ0IHJlZ2lvbiBsZWZ0IGJ5IHB5LWluZGVudC1vZmZzZXQKLVx0XFxbcHktc2hpZnQtcmVnaW9uLXJpZ2h0XVx0IHNoaWZ0IHJlZ2lvbiByaWdodCBieSBweS1pbmRlbnQtb2Zmc2V0Ci0KLVVubGlrZSBtb3N0IHByb2dyYW1taW5nIGxhbmd1YWdlcywgUHl0aG9uIHVzZXMgaW5kZW50YXRpb24sIGFuZCBvbmx5Ci1pbmRlbnRhdGlvbiwgdG8gc3BlY2lmeSBibG9jayBzdHJ1Y3R1cmUuICBIZW5jZSB0aGUgaW5kZW50YXRpb24gc3VwcGxpZWQKLWF1dG9tYXRpY2FsbHkgYnkgUHl0aG9uLW1vZGUgaXMganVzdCBhbiBlZHVjYXRlZCBndWVzczogIG9ubHkgeW91IGtub3cKLXRoZSBibG9jayBzdHJ1Y3R1cmUgeW91IGludGVuZCwgc28gb25seSB5b3UgY2FuIHN1cHBseSBjb3JyZWN0Ci1pbmRlbnRhdGlvbi4KLQotVGhlIFxcW2luZGVudC1mb3ItdGFiLWNvbW1hbmRdIGFuZCBcXFtweS1uZXdsaW5lLWFuZC1pbmRlbnRdIGtleXMgdHJ5IHRvIHN1Z2dlc3QgcGxhdXNpYmxlIGluZGVudGF0aW9uLCBiYXNlZCBvbgotdGhlIGluZGVudGF0aW9uIG9mIHByZWNlZGluZyBzdGF0ZW1lbnRzLiAgRS5nLiwgYXNzdW1pbmcKLXB5LWluZGVudC1vZmZzZXQgaXMgNCwgYWZ0ZXIgeW91IGVudGVyCi1cdGlmIGEgPiAwOiBcXFtweS1uZXdsaW5lLWFuZC1pbmRlbnRdCi10aGUgY3Vyc29yIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHBvc2l0aW9uIG9mIHRoZSBgXycgKF8gaXMgbm90IGEKLWNoYXJhY3RlciBpbiB0aGUgZmlsZSwgaXQncyBqdXN0IHVzZWQgaGVyZSB0byBpbmRpY2F0ZSB0aGUgbG9jYXRpb24gb2YKLXRoZSBjdXJzb3IpOgotXHRpZiBhID4gMDoKLVx0ICAgIF8KLUlmIHlvdSB0aGVuIGVudGVyIGBjID0gZCcgXFxbcHktbmV3bGluZS1hbmQtaW5kZW50XSwgdGhlIGN1cnNvciB3aWxsIG1vdmUKLXRvCi1cdGlmIGEgPiAwOgotXHQgICAgYyA9IGQKLVx0ICAgIF8KLVB5dGhvbi1tb2RlIGNhbm5vdCBrbm93IHdoZXRoZXIgdGhhdCdzIHdoYXQgeW91IGludGVuZGVkLCBvciB3aGV0aGVyCi1cdGlmIGEgPiAwOgotXHQgICAgYyA9IGQKLVx0Xwotd2FzIHlvdXIgaW50ZW50LiAgSW4gZ2VuZXJhbCwgUHl0aG9uLW1vZGUgZWl0aGVyIHJlcHJvZHVjZXMgdGhlCi1pbmRlbnRhdGlvbiBvZiB0aGUgKGNsb3Nlc3QgY29kZSBvciBpbmRlbnRpbmctY29tbWVudCkgcHJlY2VkaW5nCi1zdGF0ZW1lbnQsIG9yIGFkZHMgYW4gZXh0cmEgcHktaW5kZW50LW9mZnNldCBibGFua3MgaWYgdGhlIHByZWNlZGluZwotc3RhdGVtZW50IGhhcyBgOicgYXMgaXRzIGxhc3Qgc2lnbmlmaWNhbnQgKG5vbi13aGl0ZXNwYWNlIGFuZCBub24tCi1jb21tZW50KSBjaGFyYWN0ZXIuICBJZiB0aGUgc3VnZ2VzdGVkIGluZGVudGF0aW9uIGlzIHRvbyBtdWNoLCB1c2UKLVxcW3B5LWVsZWN0cmljLWJhY2tzcGFjZV0gdG8gcmVkdWNlIGl0LgotCi1Db250aW51YXRpb24gbGluZXMgYXJlIGdpdmVuIGV4dHJhIGluZGVudGF0aW9uLiAgSWYgeW91IGRvbid0IGxpa2UgdGhlCi1zdWdnZXN0ZWQgaW5kZW50YXRpb24sIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgeW91IGRvIGxpa2UsIGFuZCBQeXRob24tCi1tb2RlIHdpbGwgc3RyaXZlIHRvIGluZGVudCBsYXRlciBsaW5lcyBvZiB0aGUgc3RhdGVtZW50IGluIHRoZSBzYW1lIHdheS4KLQotSWYgYSBsaW5lIGlzIGEgY29udGludWF0aW9uIGxpbmUgYnkgdmlydHVlIG9mIGJlaW5nIGluIGFuIHVuY2xvc2VkCi1wYXJlbi9icmFja2V0L2JyYWNlIHN0cnVjdHVyZSAoYGxpc3QnLCBmb3Igc2hvcnQpLCB0aGUgc3VnZ2VzdGVkCi1pbmRlbnRhdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGN1cnJlbnQgbGluZSBjb250YWlucyB0aGUgZmlyc3QgaXRlbQotaW4gdGhlIGxpc3QuICBJZiBpdCBkb2VzLCBpdCdzIGluZGVudGVkIHB5LWluZGVudC1vZmZzZXQgY29sdW1ucyBiZXlvbmQKLXRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgbGluZSBjb250YWluaW5nIHRoZSBvcGVuIGJyYWNrZXQuICBJZiB5b3UgZG9uJ3QKLWxpa2UgdGhhdCwgY2hhbmdlIGl0IGJ5IGhhbmQuICBUaGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBsaXN0IHdpbGwgbWltaWMKLXdoYXRldmVyIGluZGVudGF0aW9uIHlvdSBnaXZlIHRvIHRoZSBmaXJzdCBpdGVtLgotCi1JZiBhIGxpbmUgaXMgYSBjb250aW51YXRpb24gbGluZSBiZWNhdXNlIHRoZSBsaW5lIHByZWNlZGluZyBpdCBlbmRzIHdpdGgKLWEgYmFja3NsYXNoLCB0aGUgdGhpcmQgYW5kIGZvbGxvd2luZyBsaW5lcyBvZiB0aGUgc3RhdGVtZW50IGluaGVyaXQgdGhlaXIKLWluZGVudGF0aW9uIGZyb20gdGhlIGxpbmUgcHJlY2VkaW5nIHRoZW0uICBUaGUgaW5kZW50YXRpb24gb2YgdGhlIHNlY29uZAotbGluZSBpbiB0aGUgc3RhdGVtZW50IGRlcGVuZHMgb24gdGhlIGZvcm0gb2YgdGhlIGZpcnN0IChiYXNlKSBsaW5lOiAgaWYKLXRoZSBiYXNlIGxpbmUgaXMgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgd2l0aCBhbnl0aGluZyBtb3JlIGludGVyZXN0aW5nCi10aGFuIHRoZSBiYWNrc2xhc2ggZm9sbG93aW5nIHRoZSBsZWZ0bW9zdCBhc3NpZ25pbmcgYD0nLCB0aGUgc2Vjb25kIGxpbmUKLWlzIGluZGVudGVkIHR3byBjb2x1bW5zIGJleW9uZCB0aGF0IGA9Jy4gIEVsc2UgaXQncyBpbmRlbnRlZCB0byB0d28KLWNvbHVtbnMgYmV5b25kIHRoZSBsZWZ0bW9zdCBzb2xpZCBjaHVuayBvZiBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIG9uCi10aGUgYmFzZSBsaW5lLgotCi1XYXJuaW5nOiAgaW5kZW50LXJlZ2lvbiBzaG91bGQgbm90IG5vcm1hbGx5IGJlIHVzZWQhICBJdCBjYWxscyBcXFtpbmRlbnQtZm9yLXRhYi1jb21tYW5kXQotcmVwZWF0ZWRseSwgYW5kIGFzIGV4cGxhaW5lZCBhYm92ZSwgXFxbaW5kZW50LWZvci10YWItY29tbWFuZF0gY2FuJ3QgZ3Vlc3MgdGhlIGJsb2NrCi1zdHJ1Y3R1cmUgeW91IGludGVuZC4KLSVjOmluZGVudC1mb3ItdGFiLWNvbW1hbmQKLSVjOnB5LW5ld2xpbmUtYW5kLWluZGVudAotJWM6cHktZWxlY3RyaWMtYmFja3NwYWNlCi0KLQotVGhlIG5leHQgZnVuY3Rpb24gbWF5IGJlIGhhbmR5IHdoZW4gZWRpdGluZyBjb2RlIHlvdSBkaWRuJ3Qgd3JpdGU6Ci0lYzpweS1ndWVzcy1pbmRlbnQtb2Zmc2V0Ci0KLQotVGhlIHJlbWFpbmluZyBgaW5kZW50JyBmdW5jdGlvbnMgYXBwbHkgdG8gYSByZWdpb24gb2YgUHl0aG9uIGNvZGUuICBUaGV5Ci1hc3N1bWUgdGhlIGJsb2NrIHN0cnVjdHVyZSAoZXF1YWxzIGluZGVudGF0aW9uLCBpbiBQeXRob24pIG9mIHRoZSByZWdpb24KLWlzIGNvcnJlY3QsIGFuZCBhbHRlciB0aGUgaW5kZW50YXRpb24gaW4gdmFyaW91cyB3YXlzIHdoaWxlIHByZXNlcnZpbmcKLXRoZSBibG9jayBzdHJ1Y3R1cmU6Ci0lYzpweS1pbmRlbnQtcmVnaW9uCi0lYzpweS1zaGlmdC1yZWdpb24tbGVmdAotJWM6cHktc2hpZnQtcmVnaW9uLXJpZ2h0Ci0KLUBNQVJLSU5HICYgTUFOSVBVTEFUSU5HIFJFR0lPTlMgT0YgQ09ERQotCi1cXFtweS1tYXJrLWJsb2NrXVx0IG1hcmsgYmxvY2sgb2YgbGluZXMKLVxcW3B5LW1hcmstZGVmLW9yLWNsYXNzXVx0IG1hcmsgc21hbGxlc3QgZW5jbG9zaW5nIGRlZgotXFxbdW5pdmVyc2FsLWFyZ3VtZW50XSBcXFtweS1tYXJrLWRlZi1vci1jbGFzc11cdCBtYXJrIHNtYWxsZXN0IGVuY2xvc2luZyBjbGFzcwotXFxbY29tbWVudC1yZWdpb25dXHQgY29tbWVudCBvdXQgcmVnaW9uIG9mIGNvZGUKLVxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbY29tbWVudC1yZWdpb25dXHQgdW5jb21tZW50IHJlZ2lvbiBvZiBjb2RlCi0lYzpweS1tYXJrLWJsb2NrCi0lYzpweS1tYXJrLWRlZi1vci1jbGFzcwotJWM6Y29tbWVudC1yZWdpb24KLQotQE1PVklORyBQT0lOVAotCi1cXFtweS1wcmV2aW91cy1zdGF0ZW1lbnRdXHQgbW92ZSB0byBzdGF0ZW1lbnQgcHJlY2VkaW5nIHBvaW50Ci1cXFtweS1uZXh0LXN0YXRlbWVudF1cdCBtb3ZlIHRvIHN0YXRlbWVudCBmb2xsb3dpbmcgcG9pbnQKLVxcW3B5LWdvdG8tYmxvY2stdXBdXHQgbW92ZSB1cCB0byBzdGFydCBvZiBjdXJyZW50IGJsb2NrCi1cXFtweS1iZWdpbm5pbmctb2YtZGVmLW9yLWNsYXNzXVx0IG1vdmUgdG8gc3RhcnQgb2YgZGVmCi1cXFt1bml2ZXJzYWwtYXJndW1lbnRdIFxcW3B5LWJlZ2lubmluZy1vZi1kZWYtb3ItY2xhc3NdXHQgbW92ZSB0byBzdGFydCBvZiBjbGFzcwotXFxbcHktZW5kLW9mLWRlZi1vci1jbGFzc11cdCBtb3ZlIHRvIGVuZCBvZiBkZWYKLVxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbcHktZW5kLW9mLWRlZi1vci1jbGFzc11cdCBtb3ZlIHRvIGVuZCBvZiBjbGFzcwotCi1UaGUgZmlyc3QgdHdvIG1vdmUgdG8gb25lIHN0YXRlbWVudCBiZXlvbmQgdGhlIHN0YXRlbWVudCB0aGF0IGNvbnRhaW5zCi1wb2ludC4gIEEgbnVtZXJpYyBwcmVmaXggYXJndW1lbnQgdGVsbHMgdGhlbSB0byBtb3ZlIHRoYXQgbWFueQotc3RhdGVtZW50cyBpbnN0ZWFkLiAgQmxhbmsgbGluZXMsIGNvbW1lbnQgbGluZXMsIGFuZCBjb250aW51YXRpb24gbGluZXMKLWRvIG5vdCBjb3VudCBhcyBgc3RhdGVtZW50cycgZm9yIHRoZXNlIGNvbW1hbmRzLiAgU28sIGUuZy4sIHlvdSBjYW4gZ28KLXRvIHRoZSBmaXJzdCBjb2RlIHN0YXRlbWVudCBpbiBhIGZpbGUgYnkgZW50ZXJpbmcKLVx0XFxbYmVnaW5uaW5nLW9mLWJ1ZmZlcl1cdCB0byBtb3ZlIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUKLVx0XFxbcHktbmV4dC1zdGF0ZW1lbnRdXHQgdG8gc2tpcCBvdmVyIGluaXRpYWwgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzCi1PciBkbyBgXFxbcHktcHJldmlvdXMtc3RhdGVtZW50XScgd2l0aCBhIGh1Z2UgcHJlZml4IGFyZ3VtZW50LgotJWM6cHktcHJldmlvdXMtc3RhdGVtZW50Ci0lYzpweS1uZXh0LXN0YXRlbWVudAotJWM6cHktZ290by1ibG9jay11cAotJWM6cHktYmVnaW5uaW5nLW9mLWRlZi1vci1jbGFzcwotJWM6cHktZW5kLW9mLWRlZi1vci1jbGFzcwotCi1ATElUVExFLUtOT1dOIEVNQUNTIENPTU1BTkRTIFBBUlRJQ1VMQVJMWSBVU0VGVUwgSU4gUFlUSE9OIE1PREUKLQotYFxcW2luZGVudC1uZXctY29tbWVudC1saW5lXScgaXMgaGFuZHkgZm9yIGVudGVyaW5nIGEgbXVsdGktbGluZSBjb21tZW50LgotCi1gXFxbc2V0LXNlbGVjdGl2ZS1kaXNwbGF5XScgd2l0aCBhIGBzbWFsbCcgcHJlZml4IGFyZyBpcyBpZGVhbGx5IHN1aXRlZCBmb3Igdmlld2luZyB0aGUKLW92ZXJhbGwgY2xhc3MgYW5kIGRlZiBzdHJ1Y3R1cmUgb2YgYSBtb2R1bGUuCi0KLWBcXFtiYWNrLXRvLWluZGVudGF0aW9uXScgbW92ZXMgcG9pbnQgdG8gYSBsaW5lJ3MgZmlyc3Qgbm9uLWJsYW5rIGNoYXJhY3Rlci4KLQotYFxcW2luZGVudC1yZWxhdGl2ZV0nIGlzIGhhbmR5IGZvciBjcmVhdGluZyBvZGQgaW5kZW50YXRpb24uCi0KLUBPVEhFUiBFTUFDUyBISU5UUwotCi1JZiB5b3UgZG9uJ3QgbGlrZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIHZhcmlhYmxlLCBjaGFuZ2UgaXRzIHZhbHVlIHRvCi13aGF0ZXZlciB5b3UgZG8gbGlrZSBieSBwdXR0aW5nIGEgYHNldHEnIGxpbmUgaW4geW91ciAuZW1hY3MgZmlsZS4KLUUuZy4sIHRvIHNldCB0aGUgaW5kZW50YXRpb24gaW5jcmVtZW50IHRvIDQsIHB1dCB0aGlzIGxpbmUgaW4geW91cgotLmVtYWNzOgotXHQoc2V0cSAgcHktaW5kZW50LW9mZnNldCAgNCkKLVRvIHNlZSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSwgZG8gYFxcW2Rlc2NyaWJlLXZhcmlhYmxlXScgYW5kIGVudGVyIHRoZSB2YXJpYWJsZQotbmFtZSBhdCB0aGUgcHJvbXB0LgotCi1XaGVuIGVudGVyaW5nIGEga2V5IHNlcXVlbmNlIGxpa2UgYEMtYyBDLW4nLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvCi1yZWxlYXNlIHRoZSBDT05UUk9MIGtleSBhZnRlciBkb2luZyB0aGUgYEMtYycgcGFydCAtLSBpdCBzdWZmaWNlcyB0bwotcHJlc3MgdGhlIENPTlRST0wga2V5LCBwcmVzcyBhbmQgcmVsZWFzZSBgYycgKHdoaWxlIHN0aWxsIGhvbGRpbmcgZG93bgotQ09OVFJPTCksIHByZXNzIGFuZCByZWxlYXNlIGBuJyAod2hpbGUgc3RpbGwgaG9sZGluZyBkb3duIENPTlRST0wpLCAmCi10aGVuIHJlbGVhc2UgQ09OVFJPTC4KLQotRW50ZXJpbmcgUHl0aG9uIG1vZGUgY2FsbHMgd2l0aCBubyBhcmd1bWVudHMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZQotYHB5dGhvbi1tb2RlLWhvb2snLCBpZiB0aGF0IHZhbHVlIGV4aXN0cyBhbmQgaXMgbm90IG5pbDsgZm9yIGJhY2t3YXJkCi1jb21wYXRpYmlsaXR5IGl0IGFsc28gdHJpZXMgYHB5LW1vZGUtaG9vayc7IHNlZSB0aGUgYEhvb2tzJyBzZWN0aW9uIG9mCi10aGUgRWxpc3AgbWFudWFsIGZvciBkZXRhaWxzLgotCi1PYnNjdXJlOiAgV2hlbiBweXRob24tbW9kZSBpcyBmaXJzdCBsb2FkZWQsIGl0IGxvb2tzIGZvciBhbGwgYmluZGluZ3MKLXRvIG5ld2xpbmUtYW5kLWluZGVudCBpbiB0aGUgZ2xvYmFsIGtleW1hcCwgYW5kIHNoYWRvd3MgdGhlbSB3aXRoCi1sb2NhbCBiaW5kaW5ncyB0byBweS1uZXdsaW5lLWFuZC1pbmRlbnQuIikpCi0KLShyZXF1aXJlICdpbmZvLWxvb2spCi07OyBUaGUgaW5mby1sb29rIHBhY2thZ2UgZG9lcyBub3QgYWx3YXlzIHByb3ZpZGUgdGhpcyBmdW5jdGlvbiAoaXQKLTs7IGFwcGVhcnMgdGhpcyBpcyB0aGUgY2FzZSB3aXRoIFhFbWFjcyAyMS4xKQotKHdoZW4gKGZib3VuZHAgJ2luZm8tbG9va3VwLW1heWJlLWFkZC1oZWxwKQotICAoaW5mby1sb29rdXAtbWF5YmUtYWRkLWhlbHAKLSAgIDptb2RlICdweXRob24tbW9kZQotICAgOnJlZ2V4cCAiW2EtekEtWjAtOV9dKyIKLSAgIDpkb2Mtc3BlYyAnKCgiKHB5dGhvbi1saWIpTW9kdWxlIEluZGV4IikKLQkgICAgICAgKCIocHl0aG9uLWxpYilDbGFzcy1FeGNlcHRpb24tT2JqZWN0IEluZGV4IikKLQkgICAgICAgKCIocHl0aG9uLWxpYilGdW5jdGlvbi1NZXRob2QtVmFyaWFibGUgSW5kZXgiKQotCSAgICAgICAoIihweXRob24tbGliKU1pc2NlbGxhbmVvdXMgSW5kZXgiKSkpCi0gICkKLQotDAotOzsgSGVscGVyIGZ1bmN0aW9ucwotKGRlZnZhciBweS1wYXJzZS1zdGF0ZS1yZQotICAoY29uY2F0Ci0gICAiXlsgXHRdKlxcKGVsaWZcXHxlbHNlXFx8d2hpbGVcXHxkZWZcXHxjbGFzc1xcKVxcPiIKLSAgICJcXHwiCi0gICAiXlteICNcdFxuXSIpKQotCi0oZGVmdW4gcHktcGFyc2Utc3RhdGUgKCkKLSAgIlJldHVybiB0aGUgcGFyc2Ugc3RhdGUgYXQgcG9pbnQgKHNlZSBgcGFyc2UtcGFydGlhbC1zZXhwJyBkb2NzKS4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChsZXQgKChoZXJlIChwb2ludCkpCi0JICBwcHMgZG9uZSkKLSAgICAgICh3aGlsZSAobm90IGRvbmUpCi0JOzsgYmFjayB1cCB0byB0aGUgZmlyc3QgcHJlY2VkaW5nIGxpbmUgKGlmIGFueTsgZWxzZSBzdGFydCBvZgotCTs7IGJ1ZmZlcikgdGhhdCBiZWdpbnMgd2l0aCBhIHBvcHVsYXIgUHl0aG9uIGtleXdvcmQsIG9yIGEKLQk7OyBub24tIHdoaXRlc3BhY2UgYW5kIG5vbi1jb21tZW50IGNoYXJhY3Rlci4gIFRoZXNlIGFyZSBnb29kCi0JOzsgcGxhY2VzIHRvIHN0YXJ0IHBhcnNpbmcgdG8gc2VlIHdoZXRoZXIgd2hlcmUgd2Ugc3RhcnRlZCBpcwotCTs7IGF0IGEgbm9uLXplcm8gbmVzdGluZyBsZXZlbC4gIEl0IG1heSBiZSBzbG93IGZvciBwZW9wbGUgd2hvCi0JOzsgd3JpdGUgaHVnZSBjb2RlIGJsb2NrcyBvciBodWdlIGxpc3RzIC4uLiB0b3VnaCBiZWFucy4KLQkocmUtc2VhcmNoLWJhY2t3YXJkIHB5LXBhcnNlLXN0YXRlLXJlIG5pbCAnbW92ZSkKLQkoYmVnaW5uaW5nLW9mLWxpbmUpCi0JOzsgSW4gWEVtYWNzLCB3ZSBoYXZlIGEgbXVjaCBiZXR0ZXIgd2F5IHRvIHRlc3QgZm9yIHdoZXRoZXIKLQk7OyB3ZSdyZSBpbiBhIHRyaXBsZS1xdW90ZWQgc3RyaW5nIG9yIG5vdC4gIEVtYWNzIGRvZXMgbm90Ci0JOzsgaGF2ZSB0aGlzIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGljaCBpcyBpdHMgbG9zcyBiZWNhdXNlCi0JOzsgd2l0aG91dCBzY2FubmluZyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciwgdGhlcmUncwotCTs7IG5vIGFjY3VyYXRlIHdheSB0byBkZXRlcm1pbmUgdGhpcyBvdGhlcndpc2UuCi0JKHNhdmUtZXhjdXJzaW9uIChzZXRxIHBwcyAocGFyc2UtcGFydGlhbC1zZXhwIChwb2ludCkgaGVyZSkpKQotCTs7IG1ha2Ugc3VyZSB3ZSBkb24ndCBsYW5kIGluc2lkZSBhIHRyaXBsZS1xdW90ZWQgc3RyaW5nCi0JKHNldHEgZG9uZSAob3IgKG5vdCAobnRoIDMgcHBzKSkKLQkJICAgICAgIChib2JwKSkpCi0JOzsgSnVzdCBnbyBhaGVhZCBhbmQgc2hvcnQgY2lyY3VpdCB0aGUgdGVzdCBiYWNrIHRvIHRoZQotCTs7IGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiAgVGhpcyB3aWxsIGJlIHNsb3csIGJ1dCBub3QKLQk7OyBuZWFybHkgYXMgc2xvdyBhcyBsb29waW5nIHRocm91Z2ggbWFueQotCTs7IHJlLXNlYXJjaC1iYWNrd2FyZHMuCi0JKGlmIChub3QgZG9uZSkKLQkgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkpKQotICAgICAgcHBzKSkpCi0KLShkZWZ1biBweS1uZXN0aW5nLWxldmVsICgpCi0gICJSZXR1cm4gdGhlIGJ1ZmZlciBwb3NpdGlvbiBvZiB0aGUgbGFzdCB1bmNsb3NlZCBlbmNsb3NpbmcgbGlzdC4KLUlmIG5lc3RpbmcgbGV2ZWwgaXMgemVybywgcmV0dXJuIG5pbC4iCi0gIChsZXQgKChzdGF0dXMgKHB5LXBhcnNlLXN0YXRlKSkpCi0gICAgKGlmICh6ZXJvcCAoY2FyIHN0YXR1cykpCi0JbmlsCQkJCTsgbm90IGluIGEgbmVzdAotICAgICAgKGNhciAoY2RyIHN0YXR1cykpKSkpCQk7IGNoYXIjIG9mIG9wZW4gYnJhY2tldAotCi0oZGVmdW4gcHktYmFja3NsYXNoLWNvbnRpbnVhdGlvbi1saW5lLXAgKCkKLSAgIlJldHVybiB0IGlmZiBwcmVjZWRpbmcgbGluZSBlbmRzIHdpdGggYmFja3NsYXNoIHRoYXQgaXMgbm90IGluIGEgY29tbWVudC4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAoYW5kCi0gICAgIDs7IHVzZSBhIGNoZWFwIHRlc3QgZmlyc3QgdG8gYXZvaWQgdGhlIHJlZ2V4cCBpZiBwb3NzaWJsZQotICAgICA7OyB1c2UgJ2VxJyBiZWNhdXNlIGNoYXItYWZ0ZXIgbWF5IHJldHVybiBuaWwKLSAgICAgKGVxIChjaGFyLWFmdGVyICgtIChwb2ludCkgMikpID9cXCApCi0gICAgIDs7IG1ha2Ugc3VyZTsgc2luY2UgZXEgdGVzdCBwYXNzZWQsIHRoZXJlIGlzIGEgcHJlY2VkaW5nIGxpbmUKLSAgICAgKGZvcndhcmQtbGluZSAtMSkJCQk7IGFsd2F5cyB0cnVlIC0tIHNpZGUgZWZmZWN0Ci0gICAgIChsb29raW5nLWF0IHB5LWNvbnRpbnVlZC1yZSkpKSkKLQotKGRlZnVuIHB5LWNvbnRpbnVhdGlvbi1saW5lLXAgKCkKLSAgIlJldHVybiB0IGlmZiBjdXJyZW50IGxpbmUgaXMgYSBjb250aW51YXRpb24gbGluZS4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAob3IgKHB5LWJhY2tzbGFzaC1jb250aW51YXRpb24tbGluZS1wKQotCShweS1uZXN0aW5nLWxldmVsKSkpKQotCi0oZGVmdW4gcHktZ290by1iZWdpbm5pbmctb2YtdHFzIChkZWxpbSkKLSAgIkdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyaXBsZSBxdW90ZWQgc3RyaW5nIHdlIGZpbmQgb3Vyc2VsdmVzIGluLgotREVMSU0gaXMgdGhlIFRRUyBzdHJpbmcgZGVsaW1pdGVyIGNoYXJhY3RlciB3ZSdyZSBzZWFyY2hpbmcgYmFja3dhcmRzCi1mb3IuIgotICAobGV0ICgoc2tpcCAoYW5kIGRlbGltIChtYWtlLXN0cmluZyAxIGRlbGltKSkpCi0JKGNvbnRpbnVlIHQpKQotICAgICh3aGVuIHNraXAKLSAgICAgIChzYXZlLWV4Y3Vyc2lvbgotCSh3aGlsZSBjb250aW51ZQotCSAgKHB5LXNhZmUgKHNlYXJjaC1iYWNrd2FyZCBza2lwKSkKLQkgIChzZXRxIGNvbnRpbnVlIChhbmQgKG5vdCAoYm9icCkpCi0JCQkgICAgICAoPSAoY2hhci1iZWZvcmUpID9cXCkpKSkKLQkoaWYgKGFuZCAoPSAoY2hhci1iZWZvcmUpIGRlbGltKQotCQkgKD0gKGNoYXItYmVmb3JlICgxLSAocG9pbnQpKSkgZGVsaW0pKQotCSAgICAoc2V0cSBza2lwIChtYWtlLXN0cmluZyAzIGRlbGltKSkpKQotICAgICAgOzsgd2UncmUgbG9va2luZyBhdCBhIHRyaXBsZS1xdW90ZWQgc3RyaW5nCi0gICAgICAocHktc2FmZSAoc2VhcmNoLWJhY2t3YXJkIHNraXApKSkpKQotCi0oZGVmdW4gcHktZ290by1pbml0aWFsLWxpbmUgKCkKLSAgIkdvIHRvIHRoZSBpbml0aWFsIGxpbmUgb2YgdGhlIGN1cnJlbnQgc3RhdGVtZW50LgotVXN1YWxseSB0aGlzIGlzIHRoZSBsaW5lIHdlJ3JlIG9uLCBidXQgaWYgd2UncmUgb24gdGhlIDJuZCBvcgotZm9sbG93aW5nIGxpbmVzIG9mIGEgY29udGludWF0aW9uIGJsb2NrLCB3ZSBuZWVkIHRvIGdvIHVwIHRvIHRoZSBmaXJzdAotbGluZSBvZiB0aGUgYmxvY2suIgotICA7OyBUcmlja3k6IFdlIHdhbnQgdG8gYXZvaWQgcXVhZHJhdGljLXRpbWUgYmVoYXZpb3IgZm9yIGxvbmcKLSAgOzsgY29udGludWVkIGJsb2Nrcywgd2hldGhlciBvZiB0aGUgYmFja3NsYXNoIG9yIG9wZW4tYnJhY2tldAotICA7OyB2YXJpZXRpZXMsIG9yIGEgbWl4IG9mIHRoZSB0d28uICBUaGUgZm9sbG93aW5nIG1hbmFnZXMgdG8gZG8gdGhhdAotICA7OyBpbiB0aGUgdXN1YWwgY2FzZXMuCi0gIDs7Ci0gIDs7IEFsc28sIGlmIHdlJ3JlIHNpdHRpbmcgaW5zaWRlIGEgdHJpcGxlIHF1b3RlZCBzdHJpbmcsIHRoaXMgd2lsbAotICA7OyBkcm9wIHVzIGF0IHRoZSBsaW5lIHRoYXQgYmVnaW5zIHRoZSBzdHJpbmcuCi0gIChsZXQgKG9wZW4tYnJhY2tldC1wb3MpCi0gICAgKHdoaWxlIChweS1jb250aW51YXRpb24tbGluZS1wKQotICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgICAgKGlmIChweS1iYWNrc2xhc2gtY29udGludWF0aW9uLWxpbmUtcCkKLQkgICh3aGlsZSAocHktYmFja3NsYXNoLWNvbnRpbnVhdGlvbi1saW5lLXApCi0JICAgIChmb3J3YXJkLWxpbmUgLTEpKQotCTs7IGVsc2UgemlwIG91dCBvZiBuZXN0ZWQgYnJhY2tldHMvYnJhY2VzL3BhcmVucwotCSh3aGlsZSAoc2V0cSBvcGVuLWJyYWNrZXQtcG9zIChweS1uZXN0aW5nLWxldmVsKSkKLQkgIChnb3RvLWNoYXIgb3Blbi1icmFja2V0LXBvcykpKSkpCi0gIChiZWdpbm5pbmctb2YtbGluZSkpCi0KLShkZWZ1biBweS1nb3RvLWJleW9uZC1maW5hbC1saW5lICgpCi0gICJHbyB0byB0aGUgcG9pbnQganVzdCBiZXlvbmQgdGhlIGZpbmUgbGluZSBvZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQuCi1Vc3VhbGx5IHRoaXMgaXMgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUsIGJ1dCBpZiB0aGlzIGlzIGEKLW11bHRpLWxpbmUgc3RhdGVtZW50IHdlIG5lZWQgdG8gc2tpcCBvdmVyIHRoZSBjb250aW51YXRpb24gbGluZXMuIgotICA7OyBUcmlja3k6IEFnYWluIHdlIG5lZWQgdG8gYmUgY2xldmVyIHRvIGF2b2lkIHF1YWRyYXRpYyB0aW1lCi0gIDs7IGJlaGF2aW9yLgotICA7OwotICA7OyBYWFg6IE5vdCBxdWl0ZSB0aGUgcmlnaHQgc29sdXRpb24sIGJ1dCBkZWFscyB3aXRoIG11bHRpLWxpbmUgZG9jCi0gIDs7IHN0cmluZ3MKLSAgKGlmIChsb29raW5nLWF0IChjb25jYXQgIlsgXHRdKlxcKCIgcHktc3RyaW5nbGl0LXJlICJcXCkiKSkKLSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkpCi0gIDs7Ci0gIChmb3J3YXJkLWxpbmUgMSkKLSAgKGxldCAoc3RhdGUpCi0gICAgKHdoaWxlIChhbmQgKHB5LWNvbnRpbnVhdGlvbi1saW5lLXApCi0JCShub3QgKGVvYnApKSkKLSAgICAgIDs7IHNraXAgb3ZlciB0aGUgYmFja3NsYXNoIGZsYXZvcgotICAgICAgKHdoaWxlIChhbmQgKHB5LWJhY2tzbGFzaC1jb250aW51YXRpb24tbGluZS1wKQotCQkgIChub3QgKGVvYnApKSkKLQkoZm9yd2FyZC1saW5lIDEpKQotICAgICAgOzsgaWYgaW4gbmVzdCwgemlwIHRvIHRoZSBlbmQgb2YgdGhlIG5lc3QKLSAgICAgIChzZXRxIHN0YXRlIChweS1wYXJzZS1zdGF0ZSkpCi0gICAgICAoaWYgKGFuZCAobm90ICh6ZXJvcCAoY2FyIHN0YXRlKSkpCi0JICAgICAgIChub3QgKGVvYnApKSkKLQkgIChwcm9nbgotCSAgICAocGFyc2UtcGFydGlhbC1zZXhwIChwb2ludCkgKHBvaW50LW1heCkgMCBuaWwgc3RhdGUpCi0JICAgIChmb3J3YXJkLWxpbmUgMSkpKSkpKQotCi0oZGVmdW4gcHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXAgKCkKLSAgIlJldHVybiB0IGlmZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgb3BlbnMgYSBibG9jay4KLUkuZS4sIGlmZiBpdCBlbmRzIHdpdGggYSBjb2xvbiB0aGF0IGlzIG5vdCBpbiBhIGNvbW1lbnQuICBQb2ludCBzaG91bGQKLWJlIGF0IHRoZSBzdGFydCBvZiBhIHN0YXRlbWVudC4iCi0gIChzYXZlLWV4Y3Vyc2lvbgotICAgIChsZXQgKChzdGFydCAocG9pbnQpKQotCSAgKGZpbmlzaCAocHJvZ24gKHB5LWdvdG8tYmV5b25kLWZpbmFsLWxpbmUpICgxLSAocG9pbnQpKSkpCi0JICAoc2VhcmNoaW5nIHQpCi0JICAoYW5zd2VyIG5pbCkKLQkgIHN0YXRlKQotICAgICAgKGdvdG8tY2hhciBzdGFydCkKLSAgICAgICh3aGlsZSBzZWFyY2hpbmcKLQk7OyBsb29rIGZvciBhIGNvbG9uIHdpdGggbm90aGluZyBhZnRlciBpdCBleGNlcHQgd2hpdGVzcGFjZSwgYW5kCi0JOzsgbWF5YmUgYSBjb21tZW50Ci0JKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiOlxcKFsgXHRdXFx8XFxcXFxuXFwpKlxcKCMuKlxcKT8kIgotCQkJICAgICAgIGZpbmlzaCB0KQotCSAgICAoaWYgKGVxIChwb2ludCkgZmluaXNoKQk7IG5vdGU6IG5vIGBlbHNlJyBjbGF1c2U7IGp1c3QKLQkJCQkJOyBrZWVwIHNlYXJjaGluZyBpZiB3ZSdyZSBub3QgYXQKLQkJCQkJOyB0aGUgZW5kIHlldAotCQk7OyBzdXJlIGxvb2tzIGxpa2UgaXQgb3BlbnMgYSBibG9jayAtLSBidXQgaXQgbWlnaHQKLQkJOzsgYmUgaW4gYSBjb21tZW50Ci0JCShwcm9nbgotCQkgIChzZXRxIHNlYXJjaGluZyBuaWwpCTsgc2VhcmNoIGlzIGRvbmUgZWl0aGVyIHdheQotCQkgIChzZXRxIHN0YXRlIChwYXJzZS1wYXJ0aWFsLXNleHAgc3RhcnQKLQkJCQkJCSAgKG1hdGNoLWJlZ2lubmluZyAwKSkpCi0JCSAgKHNldHEgYW5zd2VyIChub3QgKG50aCA0IHN0YXRlKSkpKSkKLQkgIDs7IHNlYXJjaCBmYWlsZWQ6IGNvdWxkbid0IGZpbmQgYW5vdGhlciBpbnRlcmVzdGluZyBjb2xvbgotCSAgKHNldHEgc2VhcmNoaW5nIG5pbCkpKQotICAgICAgYW5zd2VyKSkpCi0KLShkZWZ1biBweS1zdGF0ZW1lbnQtY2xvc2VzLWJsb2NrLXAgKCkKLSAgIlJldHVybiB0IGlmZiB0aGUgY3VycmVudCBzdGF0ZW1lbnQgY2xvc2VzIGEgYmxvY2suCi1JLmUuLCBpZiB0aGUgbGluZSBzdGFydHMgd2l0aCBgcmV0dXJuJywgYHJhaXNlJywgYGJyZWFrJywgYGNvbnRpbnVlJywKLWFuZCBgcGFzcycuICBUaGlzIGRvZXNuJ3QgY2F0Y2ggZW1iZWRkZWQgc3RhdGVtZW50cy4iCi0gIChsZXQgKChoZXJlIChwb2ludCkpKQotICAgIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLSAgICAocHJvZzEKLQkobG9va2luZy1hdCAoY29uY2F0IHB5LWJsb2NrLWNsb3Npbmcta2V5d29yZHMtcmUgIlxcPiIpKQotICAgICAgKGdvdG8tY2hhciBoZXJlKSkpKQotCi0oZGVmdW4gcHktZ290by1iZXlvbmQtYmxvY2sgKCkKLSAgIkdvIHRvIHBvaW50IGp1c3QgYmV5b25kIHRoZSBmaW5hbCBsaW5lIG9mIGJsb2NrIGJlZ3VuIGJ5IHRoZSBjdXJyZW50IGxpbmUuCi1UaGlzIGlzIHRoZSBzYW1lIGFzIHdoZXJlIGBweS1nb3RvLWJleW9uZC1maW5hbC1saW5lJyBnb2VzIHVubGVzcwotd2UncmUgb24gY29sb24gbGluZSwgaW4gd2hpY2ggY2FzZSB3ZSBnbyB0byB0aGUgZW5kIG9mIHRoZSBibG9jay4KLUFzc3VtZXMgcG9pbnQgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4iCi0gIChpZiAocHktc3RhdGVtZW50LW9wZW5zLWJsb2NrLXApCi0gICAgICAocHktbWFyay1ibG9jayBuaWwgJ2p1c3QtbW92ZSkKLSAgICAocHktZ290by1iZXlvbmQtZmluYWwtbGluZSkpKQotCi0oZGVmdW4gcHktZ290by1zdGF0ZW1lbnQtYXQtb3ItYWJvdmUgKCkKLSAgIkdvIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc3RhdGVtZW50IGF0IG9yIHByZWNlZGluZyBwb2ludC4KLVJldHVybiB0IGlmIHRoZXJlIGlzIHN1Y2ggYSBzdGF0ZW1lbnQsIG90aGVyd2lzZSBuaWwuICBgU3RhdGVtZW50JwotZG9lcyBub3QgaW5jbHVkZSBibGFuayBsaW5lcywgY29tbWVudHMsIG9yIGNvbnRpbnVhdGlvbiBsaW5lcy4iCi0gIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgKGlmIChsb29raW5nLWF0IHB5LWJsYW5rLW9yLWNvbW1lbnQtcmUpCi0gICAgICA7OyBza2lwIGJhY2sgb3ZlciBibGFuayAmIGNvbW1lbnQgbGluZXMKLSAgICAgIDs7IG5vdGU6ICB3aWxsIHNraXAgYSBibGFuayBvciBjb21tZW50IGxpbmUgdGhhdCBoYXBwZW5zIHRvIGJlCi0gICAgICA7OyBhIGNvbnRpbnVhdGlvbiBsaW5lIHRvbwotICAgICAgKGlmIChyZS1zZWFyY2gtYmFja3dhcmQgIl5bIFx0XSpbXiBcdCNcbl0iIG5pbCB0KQotCSAgKHByb2duIChweS1nb3RvLWluaXRpYWwtbGluZSkgdCkKLQluaWwpCi0gICAgdCkpCi0KLShkZWZ1biBweS1nb3RvLXN0YXRlbWVudC1iZWxvdyAoKQotICAiR28gdG8gc3RhcnQgb2YgdGhlIGZpcnN0IHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIHN0YXRlbWVudCBjb250YWluaW5nIHBvaW50LgotUmV0dXJuIHQgaWYgdGhlcmUgaXMgc3VjaCBhIHN0YXRlbWVudCwgb3RoZXJ3aXNlIG5pbC4gIGBTdGF0ZW1lbnQnCi1kb2VzIG5vdCBpbmNsdWRlIGJsYW5rIGxpbmVzLCBjb21tZW50cywgb3IgY29udGludWF0aW9uIGxpbmVzLiIKLSAgKGJlZ2lubmluZy1vZi1saW5lKQotICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCi0gICAgKHB5LWdvdG8tYmV5b25kLWZpbmFsLWxpbmUpCi0gICAgKHdoaWxlIChhbmQKLQkgICAgKG9yIChsb29raW5nLWF0IHB5LWJsYW5rLW9yLWNvbW1lbnQtcmUpCi0JCShweS1pbi1saXRlcmFsKSkKLQkgICAgKG5vdCAoZW9icCkpKQotICAgICAgKGZvcndhcmQtbGluZSAxKSkKLSAgICAoaWYgKGVvYnApCi0JKHByb2duIChnb3RvLWNoYXIgc3RhcnQpIG5pbCkKLSAgICAgIHQpKSkKLQotKGRlZnVuIHB5LWdvLXVwLXRyZWUtdG8ta2V5d29yZCAoa2V5KQotICAiR28gdG8gYmVnaW5pbmcgb2Ygc3RhdGVtZW50IHN0YXJ0aW5nIHdpdGggS0VZLCBhdCBvciBwcmVjZWRpbmcgcG9pbnQuCi0KLUtFWSBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZXNjcmliaW5nIGEgUHl0aG9uIGtleXdvcmQuICBTa2lwIGJsYW5rCi1saW5lcyBhbmQgbm9uLWluZGVudGluZyBjb21tZW50cy4gIElmIHRoZSBzdGF0ZW1lbnQgZm91bmQgc3RhcnRzIHdpdGgKLUtFWSwgdGhlbiBzdG9wLCBvdGhlcndpc2UgZ28gYmFjayB0byBmaXJzdCBlbmNsb3NpbmcgYmxvY2sgc3RhcnRpbmcKLXdpdGggS0VZLiAgSWYgc3VjY2Vzc2Z1bCwgbGVhdmUgcG9pbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBLRVkgbGluZSBhbmQKLXJldHVybiB0LiAgT3RoZXJ3aXNlLCBsZWF2ZSBwb2ludCBhdCBhbiB1bmRlZmluZWQgcGxhY2UgYW5kIHJldHVybiBuaWwuIgotICA7OyBza2lwIGJsYW5rcyBhbmQgbm9uLWluZGVudGluZyAjCi0gIChweS1nb3RvLWluaXRpYWwtbGluZSkKLSAgKHdoaWxlIChhbmQKLQkgIChsb29raW5nLWF0ICJbIFx0XSpcXCgkXFx8I1teIFx0XG5dXFwpIikKLQkgICh6ZXJvcCAoZm9yd2FyZC1saW5lIC0xKSkpCTsgZ28gYmFjawotICAgIG5pbCkKLSAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAobGV0KiAoKHJlIChjb25jYXQgIlsgXHRdKiIga2V5ICJcXD4iKSkKLQkgKGNhc2UtZm9sZC1zZWFyY2ggbmlsKQkJOyBsZXQqIHNvIGxvb2tpbmctYXQgc2VlcyB0aGlzCi0JIChmb3VuZCAobG9va2luZy1hdCByZSkpCi0JIChkZWFkIG5pbCkpCi0gICAgKHdoaWxlIChub3QgKG9yIGZvdW5kIGRlYWQpKQotICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbAkJOyBpbiBjYXNlIG5vIGVuY2xvc2luZyBibG9jawotCSAgKHB5LWdvdG8tYmxvY2stdXAgJ25vLW1hcmspCi0JKGVycm9yIChzZXRxIGRlYWQgdCkpKQotICAgICAgKG9yIGRlYWQgKHNldHEgZm91bmQgKGxvb2tpbmctYXQgcmUpKSkpCi0gICAgKGJlZ2lubmluZy1vZi1saW5lKQotICAgIGZvdW5kKSkKLQotKGRlZnVuIHB5LXN1Y2stdXAtbGVhZGluZy10ZXh0ICgpCi0gICJSZXR1cm4gc3RyaW5nIGluIGJ1ZmZlciBmcm9tIHN0YXJ0IG9mIGluZGVudGF0aW9uIHRvIGVuZCBvZiBsaW5lLgotUHJlZml4IHdpdGggXCIuLi5cIiBpZiBsZWFkaW5nIHdoaXRlc3BhY2Ugd2FzIHNraXBwZWQuIgotICAoc2F2ZS1leGN1cnNpb24KLSAgICAoYmFjay10by1pbmRlbnRhdGlvbikKLSAgICAoY29uY2F0Ci0gICAgIChpZiAoYm9scCkgIiIgIi4uLiIpCi0gICAgIChidWZmZXItc3Vic3RyaW5nIChwb2ludCkgKHByb2duIChlbmQtb2YtbGluZSkgKHBvaW50KSkpKSkpCi0KLShkZWZ1biBweS1zdWNrLXVwLWZpcnN0LWtleXdvcmQgKCkKLSAgIlJldHVybiBmaXJzdCBrZXl3b3JkIG9uIHRoZSBsaW5lIGFzIGEgTGlzcCBzeW1ib2wuCi1gS2V5d29yZCcgaXMgZGVmaW5lZCAoZXNzZW50aWFsbHkpIGFzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KLShbYS16XSspLiAgUmV0dXJucyBuaWwgaWYgbm9uZSB3YXMgZm91bmQuIgotICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpKQotICAgIChpZiAobG9va2luZy1hdCAiWyBcdF0qXFwoW2Etel0rXFwpXFw+IikKLQkoaW50ZXJuIChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMSkgKG1hdGNoLWVuZCAxKSkpCi0gICAgICBuaWwpKSkKLQotKGRlZnVuIHB5LWN1cnJlbnQtZGVmdW4gKCkKLSAgIlB5dGhvbiB2YWx1ZSBmb3IgYGFkZC1sb2ctY3VycmVudC1kZWZ1bi1mdW5jdGlvbicuCi1UaGlzIHRlbGxzIGFkZC1sb2cuZWwgaG93IHRvIGZpbmQgdGhlIGN1cnJlbnQgZnVuY3Rpb24vbWV0aG9kL3ZhcmlhYmxlLiIKLSAgKHNhdmUtZXhjdXJzaW9uCi0KLSAgICA7OyBNb3ZlIGJhY2sgdG8gc3RhcnQgb2YgdGhlIGN1cnJlbnQgc3RhdGVtZW50LgotCi0gICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotICAgIChiYWNrLXRvLWluZGVudGF0aW9uKQotICAgICh3aGlsZSAoYW5kIChvciAobG9va2luZy1hdCBweS1ibGFuay1vci1jb21tZW50LXJlKQotCQkgICAgKHB5LWluLWxpdGVyYWwpKQotCQkobm90IChib2JwKSkpCi0gICAgICAoYmFja3dhcmQtdG8taW5kZW50YXRpb24gMSkpCi0gICAgKHB5LWdvdG8taW5pdGlhbC1saW5lKQotCi0gICAgKGxldCAoKHNjb3BlcyAiIikKLQkgIChzZXAgIiIpCi0JICBkZWFkIGFzc2lnbm1lbnQpCi0KLSAgICAgIDs7IENoZWNrIGZvciBhbiBhc3NpZ25tZW50LiAgSWYgdGhpcyBhc3NpZ25tZW50IGV4aXN0cyBpbnNpZGUgYQotICAgICAgOzsgZGVmLCBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGluc2lkZSB0aGUgd2hpbGUgbG9vcC4gIElmIGl0Ci0gICAgICA7OyBleGlzdHMgYXQgdG9wIGxldmVyIG9yIGluc2lkZSBhIGNsYXNzLCBpdCB3aWxsIGJlIHByZXNlcnZlZC4KLQotICAgICAgKHdoZW4gKGxvb2tpbmctYXQgIlsgXHRdKlxcKFthLXpBLVowLTlfXStcXClbIFx0XSo9IikKLQkoc2V0cSBzY29wZXMgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKSkKLQkoc2V0cSBhc3NpZ25tZW50IHQpCi0JKHNldHEgc2VwICIuIikpCi0KLSAgICAgIDs7IFByZXBlbmQgdGhlIG5hbWUgb2YgZWFjaCBvdXRlciBzb2NwZSAoZGVmIG9yIGNsYXNzKS4KLQotICAgICAgKHdoaWxlIChub3QgZGVhZCkKLQkoaWYgKGFuZCAocHktZ28tdXAtdHJlZS10by1rZXl3b3JkICJcXChjbGFzc1xcfGRlZlxcKSIpCi0JCSAobG9va2luZy1hdAotCQkgICJbIFx0XSpcXChjbGFzc1xcfGRlZlxcKVsgXHRdKlxcKFthLXpBLVowLTlfXStcXClbIFx0XSoiKSkKLQkgICAgKGxldCAoKG5hbWUgKGJ1ZmZlci1zdWJzdHJpbmcgKG1hdGNoLWJlZ2lubmluZyAyKSAobWF0Y2gtZW5kIDIpKSkpCi0JICAgICAgKGlmIChhbmQgYXNzaWdubWVudCAobG9va2luZy1hdCAiWyBcdF0qZGVmIikpCi0JCSAgKHNldHEgc2NvcGVzIG5hbWUpCi0JCShzZXRxIHNjb3BlcyAoY29uY2F0IG5hbWUgc2VwIHNjb3BlcykpCi0JCShzZXRxIHNlcCAiLiIpKSkpCi0JKHNldHEgYXNzaWdubWVudCBuaWwpCi0JKGNvbmRpdGlvbi1jYXNlIG5pbAkJOyBUZXJtaW5hdGUgbmljZWx5IGF0IHRvcCBsZXZlbC4KLQkgICAgKHB5LWdvdG8tYmxvY2stdXAgJ25vLW1hcmspCi0JICAoZXJyb3IgKHNldHEgZGVhZCB0KSkpKQotICAgICAgKGlmIChzdHJpbmc9IHNjb3BlcyAiIikKLQkgIG5pbAotCXNjb3BlcykpKSkKLQotCi0MCi0oZGVmY29uc3QgcHktaGVscC1hZGRyZXNzICJweXRob24tbW9kZUBweXRob24ub3JnIgotICAiQWRkcmVzcyBhY2NlcHRpbmcgc3VibWlzc2lvbiBvZiBidWcgcmVwb3J0cy4iKQotCi0oZGVmdW4gcHktdmVyc2lvbiAoKQotICAiRWNobyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIGBweXRob24tbW9kZScgaW4gdGhlIG1pbmlidWZmZXIuIgotICAoaW50ZXJhY3RpdmUpCi0gIChtZXNzYWdlICJVc2luZyBgcHl0aG9uLW1vZGUnIHZlcnNpb24gJXMiIHB5LXZlcnNpb24pCi0gIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKQotCi07OyBvbmx5IHdvcmtzIHVuZGVyIEVtYWNzIDE5Ci07KGV2YWwtd2hlbi1jb21waWxlCi07ICAocmVxdWlyZSAncmVwb3J0ZXIpKQotCi0oZGVmdW4gcHktc3VibWl0LWJ1Zy1yZXBvcnQgKGVuaGFuY2VtZW50LXApCi0gICJTdWJtaXQgdmlhIG1haWwgYSBidWcgcmVwb3J0IG9uIGBweXRob24tbW9kZScuCi1XaXRoIFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gKHByb2dyYW1tYXRpY2FsbHksIGFyZ3VtZW50IEVOSEFOQ0VNRU5ULVAKLW5vbi1uaWwpIGp1c3Qgc3VibWl0IGFuIGVuaGFuY2VtZW50IHJlcXVlc3QuIgotICAoaW50ZXJhY3RpdmUKLSAgIChsaXN0IChub3QgKHktb3Itbi1wCi0JICAgICAgICJJcyB0aGlzIGEgYnVnIHJlcG9ydCAoaGl0IGBuJyB0byBzZW5kIG90aGVyIGNvbW1lbnRzKT8gIikpKSkKLSAgKGxldCAoKHJlcG9ydGVyLXByb21wdC1mb3Itc3VtbWFyeS1wIChpZiBlbmhhbmNlbWVudC1wCi0JCQkJCSAgICIoVmVyeSkgYnJpZWYgc3VtbWFyeTogIgotCQkJCQkgdCkpKQotICAgIChyZXF1aXJlICdyZXBvcnRlcikKLSAgICAocmVwb3J0ZXItc3VibWl0LWJ1Zy1yZXBvcnQKLSAgICAgcHktaGVscC1hZGRyZXNzCQkJO2FkZHJlc3MKLSAgICAgKGNvbmNhdCAicHl0aG9uLW1vZGUgIiBweS12ZXJzaW9uKQk7cGtnbmFtZQotICAgICA7OyB2YXJsaXN0Ci0gICAgIChpZiBlbmhhbmNlbWVudC1wIG5pbAotICAgICAgICcocHktcHl0aG9uLWNvbW1hbmQKLQkgcHktaW5kZW50LW9mZnNldAotCSBweS1ibG9jay1jb21tZW50LXByZWZpeAotCSBweS10ZW1wLWRpcmVjdG9yeQotCSBweS1iZWVwLWlmLXRhYi1jaGFuZ2UpKQotICAgICBuaWwJCQkJO3ByZS1ob29rcwotICAgICBuaWwJCQkJO3Bvc3QtaG9va3MKLSAgICAgIkRlYXIgQmFycnksIikJCQk7c2FsdXRhdGlvbgotICAgIChpZiBlbmhhbmNlbWVudC1wIG5pbAotICAgICAgKHNldC1tYXJrIChwb2ludCkpCi0gICAgICAoaW5zZXJ0Ci0iUGxlYXNlIHJlcGxhY2UgdGhpcyB0ZXh0IHdpdGggYSBzdWZmaWNpZW50bHkgbGFyZ2UgY29kZSBzYW1wbGVcblwKLWFuZCBhbiBleGFjdCByZWNpcGUgc28gdGhhdCBJIGNhbiByZXByb2R1Y2UgeW91ciBwcm9ibGVtLiAgRmFpbHVyZVxuXAotdG8gZG8gc28gbWF5IG1lYW4gYSBncmVhdGVyIGRlbGF5IGluIGZpeGluZyB5b3VyIGJ1Zy5cblxuIikKLSAgICAgIChleGNoYW5nZS1wb2ludC1hbmQtbWFyaykKLSAgICAgIChweS1rZWVwLXJlZ2lvbi1hY3RpdmUpKSkpCi0KLQwKLShkZWZ1biBweS1raWxsLWVtYWNzLWhvb2sgKCkKLSAgIkRlbGV0ZSBmaWxlcyBpbiBgcHktZmlsZS1xdWV1ZScuCi1UaGVzZSBhcmUgUHl0aG9uIHRlbXBvcmFyeSBmaWxlcyBhd2FpdGluZyBleGVjdXRpb24uIgotICAobWFwY2FyICMnKGxhbWJkYSAoZmlsZW5hbWUpCi0JICAgICAgKHB5LXNhZmUgKGRlbGV0ZS1maWxlIGZpbGVuYW1lKSkpCi0JICBweS1maWxlLXF1ZXVlKSkKLQotOzsgYXJyYW5nZSB0byBraWxsIHRlbXAgZmlsZXMgd2hlbiBFbWFjcyBleGlzdHMKLShhZGQtaG9vayAna2lsbC1lbWFjcy1ob29rICdweS1raWxsLWVtYWNzLWhvb2spCi0oYWRkLWhvb2sgJ2NvbWludC1vdXRwdXQtZmlsdGVyLWZ1bmN0aW9ucyAncHktcGRidHJhY2stdHJhY2stc3RhY2stZmlsZSkKLQotOzsgQWRkIGEgZGVzaWduYXRvciB0byB0aGUgbWlub3IgbW9kZSBzdHJpbmdzCi0ob3IgKGFzc3EgJ3B5LXBkYnRyYWNrLWlzLXRyYWNraW5nLXAgbWlub3ItbW9kZS1hbGlzdCkKLSAgICAocHVzaCAnKHB5LXBkYnRyYWNrLWlzLXRyYWNraW5nLXAgcHktcGRidHJhY2stbWlub3ItbW9kZS1zdHJpbmcpCi0JICBtaW5vci1tb2RlLWFsaXN0KSkKLQotCi0MCi07OzsgcGFyYWdyYXBoIGFuZCBzdHJpbmcgZmlsbGluZyBjb2RlIGZyb20gQmVybmhhcmQgSGVyem9nCi07Ozsgc2VlIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1saXN0LzIwMDItTWF5LzEwMzE4OS5odG1sCi0KLShkZWZ1biBweS1maWxsLWNvbW1lbnQgKCZvcHRpb25hbCBqdXN0aWZ5KQotICAiRmlsbCB0aGUgY29tbWVudCBwYXJhZ3JhcGggYXJvdW5kIHBvaW50IgotICAobGV0ICg7OyBOb24tbmlsIGlmIHRoZSBjdXJyZW50IGxpbmUgY29udGFpbnMgYSBjb21tZW50LgotCWhhcy1jb21tZW50Ci0KLQk7OyBJZiBoYXMtY29tbWVudCwgdGhlIGFwcHJvcHJpYXRlIGZpbGwtcHJlZml4IGZvciB0aGUgY29tbWVudC4KLQljb21tZW50LWZpbGwtcHJlZml4KQotCi0gICAgOzsgRmlndXJlIG91dCB3aGF0IGtpbmQgb2YgY29tbWVudCB3ZSBhcmUgbG9va2luZyBhdC4KLSAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKLSAgICAgIChjb25kCi0gICAgICAgOzsgQSBsaW5lIHdpdGggbm90aGluZyBidXQgYSBjb21tZW50IG9uIGl0PwotICAgICAgICgobG9va2luZy1hdCAiWyBcdF0qI1sjIFx0XSoiKQotCShzZXRxIGhhcy1jb21tZW50IHQKLQkgICAgICBjb21tZW50LWZpbGwtcHJlZml4IChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMCkKLQkJCQkJCSAgICAobWF0Y2gtZW5kIDApKSkpCi0KLSAgICAgICA7OyBBIGxpbmUgd2l0aCBzb21lIGNvZGUsIGZvbGxvd2VkIGJ5IGEgY29tbWVudD8gUmVtZW1iZXIgdGhhdCB0aGUgaGFzaAotICAgICAgIDs7IHdoaWNoIHN0YXJ0cyB0aGUgY29tbWVudCBzaG91bGRuJ3QgYmUgcGFydCBvZiBhIHN0cmluZyBvciBjaGFyYWN0ZXIuCi0gICAgICAgKChwcm9nbgotCSAgKHdoaWxlIChub3QgKGxvb2tpbmctYXQgIiNcXHwkIikpCi0JICAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4jXG5cIidcXCIpCi0JICAgIChjb25kCi0JICAgICAoKGVxIChjaGFyLWFmdGVyIChwb2ludCkpID9cXCkgKGZvcndhcmQtY2hhciAyKSkKLQkgICAgICgobWVtcSAoY2hhci1hZnRlciAocG9pbnQpKSAnKD9cIiA/JykpIChmb3J3YXJkLXNleHAgMSkpKSkKLQkgIChsb29raW5nLWF0ICIjK1tcdCBdKiIpKQotCShzZXRxIGhhcy1jb21tZW50IHQpCi0JKHNldHEgY29tbWVudC1maWxsLXByZWZpeAotCSAgICAgIChjb25jYXQgKG1ha2Utc3RyaW5nIChjdXJyZW50LWNvbHVtbikgPyApCi0JCSAgICAgIChidWZmZXItc3Vic3RyaW5nIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1hdGNoLWVuZCAwKSkpKSkpKQotCi0gICAgKGlmIChub3QgaGFzLWNvbW1lbnQpCi0JKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpCi0KLSAgICAgIDs7IE5hcnJvdyB0byBpbmNsdWRlIG9ubHkgdGhlIGNvbW1lbnQsIGFuZCB0aGVuIGZpbGwgdGhlIHJlZ2lvbi4KLSAgICAgIChzYXZlLXJlc3RyaWN0aW9uCi0JKG5hcnJvdy10by1yZWdpb24KLQotCSA7OyBGaW5kIHRoZSBmaXJzdCBsaW5lIHdlIHNob3VsZCBpbmNsdWRlIGluIHRoZSByZWdpb24gdG8gZmlsbC4KLQkgKHNhdmUtZXhjdXJzaW9uCi0JICAgKHdoaWxlIChhbmQgKHplcm9wIChmb3J3YXJkLWxpbmUgLTEpKQotCQkgICAgICAgKGxvb2tpbmctYXQgIl5bIFx0XSojIikpKQotCi0JICAgOzsgV2UgbWF5IGhhdmUgZ29uZSB0byBmYXIuICBHbyBmb3J3YXJkIGFnYWluLgotCSAgIChvciAobG9va2luZy1hdCAiXlsgXHRdKiMiKQotCSAgICAgICAoZm9yd2FyZC1saW5lIDEpKQotCSAgIChwb2ludCkpCi0KLQkgOzsgRmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBsaW5lIHBhc3QgdGhlIHJlZ2lvbiB0byBmaWxsLgotCSAoc2F2ZS1leGN1cnNpb24KLQkgICAod2hpbGUgKHByb2duIChmb3J3YXJkLWxpbmUgMSkKLQkJCSAobG9va2luZy1hdCAiXlsgXHRdKiMiKSkpCi0JICAgKHBvaW50KSkpCi0KLQk7OyBMaW5lcyB3aXRoIG9ubHkgaGFzaGVzIG9uIHRoZW0gY2FuIGJlIHBhcmFncmFwaCBib3VuZGFyaWVzLgotCShsZXQgKChwYXJhZ3JhcGgtc3RhcnQgKGNvbmNhdCBwYXJhZ3JhcGgtc3RhcnQgIlxcfFsgXHQjXSokIikpCi0JICAgICAgKHBhcmFncmFwaC1zZXBhcmF0ZSAoY29uY2F0IHBhcmFncmFwaC1zZXBhcmF0ZSAiXFx8WyBcdCNdKiQiKSkKLQkgICAgICAoZmlsbC1wcmVmaXggY29tbWVudC1maWxsLXByZWZpeCkpCi0JICA7OyhtZXNzYWdlICJwYXJhZ3JhcGgtc3RhcnQgJVMgcGFyYWdyYXBoLXNlcGFyYXRlICVTIgotCSAgOztwYXJhZ3JhcGgtc3RhcnQgcGFyYWdyYXBoLXNlcGFyYXRlKQotCSAgKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpKSkpCi0gICAgdCkpCi0KLQotKGRlZnVuIHB5LWZpbGwtc3RyaW5nIChzdGFydCAmb3B0aW9uYWwganVzdGlmeSkKLSAgIkZpbGwgdGhlIHBhcmFncmFwaCBhcm91bmQgKHBvaW50KSBpbiB0aGUgc3RyaW5nIHN0YXJ0aW5nIGF0IHN0YXJ0IgotICA7OyBiYXNpYyBzdHJhdGVneTogbmFycm93IHRvIHRoZSBzdHJpbmcgYW5kIGNhbGwgdGhlIGRlZmF1bHQKLSAgOzsgaW1wbGVtZW50YXRpb24KLSAgKGxldCAoOzsgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcncyBjb250ZW50cwotCXN0cmluZy1zdGFydAotCTs7IHRoZSBlbmQgb2YgdGhlIHN0cmluZydzIGNvbnRlbnRzCi0Jc3RyaW5nLWVuZAotCTs7IGxlbmd0aCBvZiB0aGUgc3RyaW5nJ3MgZGVsaW1pdGVyCi0JZGVsaW0tbGVuZ3RoCi0JOzsgVGhlIHN0cmluZyBkZWxpbWl0ZXIKLQlkZWxpbQotCSkKLQotICAgIChzYXZlLWV4Y3Vyc2lvbgotICAgICAgKGdvdG8tY2hhciBzdGFydCkKLSAgICAgIChpZiAobG9va2luZy1hdCAiXFwoJycnXFx8XCJcIlwiXFx8J1xcfFwiXFwpXFxcXD9cbj8iKQotCSAgKHNldHEgc3RyaW5nLXN0YXJ0IChtYXRjaC1lbmQgMCkKLQkJZGVsaW0tbGVuZ3RoICgtIChtYXRjaC1lbmQgMSkgKG1hdGNoLWJlZ2lubmluZyAxKSkKLQkJZGVsaW0gKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAobWF0Y2gtYmVnaW5uaW5nIDEpCi0JCQkJCQkgICAgICAobWF0Y2gtZW5kIDEpKSkKLQkoZXJyb3IgIlRoZSBwYXJhbWV0ZXIgc3RhcnQgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgYSBweXRob24gc3RyaW5nIikpCi0KLSAgICAgIDs7IGlmIHRoZSBzdHJpbmcgaXMgdGhlIGZpcnN0IHRva2VuIG9uIGEgbGluZSBhbmQgZG9lc24ndCBzdGFydCB3aXRoCi0gICAgICA7OyBhIG5ld2xpbmUsIGZpbGwgYXMgaWYgdGhlIHN0cmluZyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAgIDs7IGxpbmUuIHRoaXMgaGVscHMgd2l0aCBvbmUgbGluZSBkb2NzdHJpbmdzCi0gICAgICAoc2F2ZS1leGN1cnNpb24KLQkoYmVnaW5uaW5nLW9mLWxpbmUpCi0JKGFuZCAoLz0gKGNoYXItYmVmb3JlIHN0cmluZy1zdGFydCkgP1xuKQotCSAgICAgKGxvb2tpbmctYXQgKGNvbmNhdCAiWyBcdF0qIiBkZWxpbSkpCi0JICAgICAoc2V0cSBzdHJpbmctc3RhcnQgKHBvaW50KSkpKQotCi0gICAgICAoZm9yd2FyZC1zZXhwIChpZiAoPSBkZWxpbS1sZW5ndGggMykgMiAxKSkKLQotICAgICAgOzsgd2l0aCBib3RoIHRyaXBsZSBxdW90ZWQgc3RyaW5ncyBhbmQgc2luZ2xlL2RvdWJsZSBxdW90ZWQgc3RyaW5ncwotICAgICAgOzsgd2UncmUgbm93IGRpcmVjdGx5IGJlaGluZCB0aGUgZmlyc3QgY2hhciBvZiB0aGUgZW5kIGRlbGltaXRlcgotICAgICAgOzsgKHRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSB0cmlwbGUgcXVvdGVkIHN0cmluZwotICAgICAgOzsgY29udGFpbnMgdGhlIHF1b3RlIG1hcmsgaXRzZWxmKS4gVGhlIGVuZCBvZiB0aGUgc3RyaW5nJ3MgY29udGVudHMKLSAgICAgIDs7IGlzIG9uZSBsZXNzIHRoYW4gcG9pbnQKLSAgICAgIChzZXRxIHN0cmluZy1lbmQgKDEtIChwb2ludCkpKSkKLQotICAgIDs7IE5hcnJvdyB0byB0aGUgc3RyaW5nJ3MgY29udGVudHMgYW5kIGZpbGwgdGhlIGN1cnJlbnQgcGFyYWdyYXBoCi0gICAgKHNhdmUtcmVzdHJpY3Rpb24KLSAgICAgIChuYXJyb3ctdG8tcmVnaW9uIHN0cmluZy1zdGFydCBzdHJpbmctZW5kKQotICAgICAgKGxldCAoKGVuZHMtd2l0aC1uZXdsaW5lICg9IChjaGFyLWJlZm9yZSAocG9pbnQtbWF4KSkgP1xuKSkpCi0JKGZpbGwtcGFyYWdyYXBoIGp1c3RpZnkpCi0JKGlmIChhbmQgKG5vdCBlbmRzLXdpdGgtbmV3bGluZSkKLQkJICg9IChjaGFyLWJlZm9yZSAocG9pbnQtbWF4KSkgP1xuKSkKLQkgICAgOzsgdGhlIGRlZmF1bHQgZmlsbC1wYXJhZ3JhcGggaW1wbGVtZW50YXRpb24gaGFzIGluc2VydGVkIGEKLQkgICAgOzsgbmV3bGluZSBhdCB0aGUgZW5kLiBSZW1vdmUgaXQgYWdhaW4uCi0JICAgIChzYXZlLWV4Y3Vyc2lvbgotCSAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCi0JICAgICAgKGRlbGV0ZS1jaGFyIC0xKSkpKSkKLQotICAgIDs7IHJldHVybiB0IHRvIGluZGljYXRlIHRoYXQgd2UndmUgZG9uZSBvdXIgd29yawotICAgIHQpKQotCi0oZGVmdW4gcHktZmlsbC1wYXJhZ3JhcGggKCZvcHRpb25hbCBqdXN0aWZ5KQotICAiTGlrZSBcXFtmaWxsLXBhcmFncmFwaF0sIGJ1dCBoYW5kbGUgUHl0aG9uIGNvbW1lbnRzIGFuZCBzdHJpbmdzLgotSWYgYW55IG9mIHRoZSBjdXJyZW50IGxpbmUgaXMgYSBjb21tZW50LCBmaWxsIHRoZSBjb21tZW50IG9yIHRoZQotcGFyYWdyYXBoIG9mIGl0IHRoYXQgcG9pbnQgaXMgaW4sIHByZXNlcnZpbmcgdGhlIGNvbW1lbnQncyBpbmRlbnRhdGlvbgotYW5kIGluaXRpYWwgYCMncy4KLUlmIHBvaW50IGlzIGluc2lkZSBhIHN0cmluZywgbmFycm93IHRvIHRoYXQgc3RyaW5nIGFuZCBmaWxsLgotIgotICAoaW50ZXJhY3RpdmUgIlAiKQotICA7OyBmaWxsLXBhcmFncmFwaCB3aWxsIG5hcnJvdyBpbmNvcnJlY3RseQotICAoc2F2ZS1yZXN0cmljdGlvbgotICAgICh3aWRlbikKLSAgICAobGV0KiAoKGJvZCAocHktcG9pbnQgJ2JvZCkpCi0JICAgKHBwcyAocGFyc2UtcGFydGlhbC1zZXhwIGJvZCAocG9pbnQpKSkpCi0gICAgICAoY29uZAotICAgICAgIDs7IGFyZSB3ZSBpbnNpZGUgYSBjb21tZW50IG9yIG9uIGEgbGluZSB3aXRoIG9ubHkgd2hpdGVzcGFjZSBiZWZvcmUKLSAgICAgICA7OyB0aGUgY29tbWVudCBzdGFydD8KLSAgICAgICAoKG9yIChudGggNCBwcHMpCi0JICAgIChzYXZlLWV4Y3Vyc2lvbiAoYmVnaW5uaW5nLW9mLWxpbmUpIChsb29raW5nLWF0ICJbIFx0XSojIikpKQotCShweS1maWxsLWNvbW1lbnQganVzdGlmeSkpCi0gICAgICAgOzsgYXJlIHdlIGluc2lkZSBhIHN0cmluZz8KLSAgICAgICAoKG50aCAzIHBwcykKLQkocHktZmlsbC1zdHJpbmcgKG50aCA4IHBwcykpKQotICAgICAgIDs7IGFyZSB3ZSBhdCB0aGUgb3BlbmluZyBxdW90ZSBvZiBhIHN0cmluZywgb3IgaW4gdGhlIGluZGVudGF0aW9uPwotICAgICAgICgoc2F2ZS1leGN1cnNpb24KLQkgIChmb3J3YXJkLXdvcmQgMSkKLQkgIChlcSAocHktaW4tbGl0ZXJhbCkgJ3N0cmluZykpCi0JKHNhdmUtZXhjdXJzaW9uCi0JICAocHktZmlsbC1zdHJpbmcgKHB5LXBvaW50ICdib2kpKSkpCi0gICAgICAgOzsgYXJlIHdlIGF0IG9yIGFmdGVyIHRoZSBjbG9zaW5nIHF1b3RlIG9mIGEgc3RyaW5nPwotICAgICAgICgoc2F2ZS1leGN1cnNpb24KLQkgIChiYWNrd2FyZC13b3JkIDEpCi0JICAoZXEgKHB5LWluLWxpdGVyYWwpICdzdHJpbmcpKQotCShzYXZlLWV4Y3Vyc2lvbgotCSAgKHB5LWZpbGwtc3RyaW5nIChweS1wb2ludCAnYm9pKSkpKQotICAgICAgIDs7IG90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQKLSAgICAgICAodAotCShmaWxsLXBhcmFncmFwaCBqdXN0aWZ5KSkpKSkpCi0KLQotDAotKHByb3ZpZGUgJ3B5dGhvbi1tb2RlKQotOzs7IHB5dGhvbi1tb2RlLmVsIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24td2luZzMud3ByIGIvTWlzYy9weXRob24td2luZzMud3ByCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDkwNWQKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi13aW5nMy53cHIKQEAgLTAsMCArMSwxMyBAQAorIyF3aW5nCisjIXZlcnNpb249My4wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2luZyBJREUgcHJvamVjdCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitbcHJvamVjdCBhdHRyaWJ1dGVzXQorcHJvai5kaXJlY3RvcnktbGlzdCA9IFt7J2RpcmxvYyc6IGxvYygnLi4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlcyc6ICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcic6ICcqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY3Vyc2l2ZSc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnd2F0Y2hfZm9yX2NoYW5nZXMnOiBUcnVlfV0KK3Byb2ouZmlsZS10eXBlID0gJ3NoYXJlZCcKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLXdpbmc0LndwciBiL01pc2MvcHl0aG9uLXdpbmc0LndwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2YxNTM3Ci0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24td2luZzQud3ByCkBAIC0wLDAgKzEsMTUgQEAKKyMhd2luZworIyF2ZXJzaW9uPTQuMAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdpbmcgSURFIHByb2plY3QgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworW3Byb2plY3QgYXR0cmlidXRlc10KK3Byb2ouZGlyZWN0b3J5LWxpc3QgPSBbeydkaXJsb2MnOiBsb2MoJy4uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZXMnOiBbdSdMaWIvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnRG9jL2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJzogJyonLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVjdXJzaXZlJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YXRjaF9mb3JfY2hhbmdlcyc6IFRydWV9XQorcHJvai5maWxlLXR5cGUgPSAnc2hhcmVkJwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ubWFuIGIvTWlzYy9weXRob24ubWFuCmluZGV4IGQ5ODFmYmEuLmRkZmNjZWYgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLm1hbgorKysgYi9NaXNjL3B5dGhvbi5tYW4KQEAgLTQwMSw5ICs0MDEsMTggQEAKIC5JUCBQWVRIT05JTlNQRUNUCiBJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCiB0aGUgXGZCXC1pXGZQIG9wdGlvbi4KKy5JUCBQWVRIT05JT0VOQ09ESU5HCitJZiB0aGlzIGlzIHNldCBiZWZvcmUgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIsIGl0IG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcgdXNlZAorZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIGluIHRoZSBzeW50YXgKKy5JQiBlbmNvZGluZ25hbWUgIjoiIGVycm9yaGFuZGxlcgorVGhlCisuSUIgZXJyb3JoYW5kbGVyCitwYXJ0IGlzIG9wdGlvbmFsIGFuZCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBzdHIuZW5jb2RlLiBGb3Igc3RkZXJyLCB0aGUKKy5JQiBlcnJvcmhhbmRsZXIKKyBwYXJ0IGlzIGlnbm9yZWQ7IHRoZSBoYW5kbGVyIHdpbGwgYWx3YXlzIGJlIFwnYmFja3NsYXNocmVwbGFjZVwnLgogLklQIFBZVEhPTk5PVVNFUlNJVEUKLUlmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKLXRoZSBcZkJcLXNcZlAgb3B0aW9uIChEb24ndCBhZGQgdGhlIHVzZXIgc2l0ZSBkaXJlY3RvcnkgdG8gc3lzLnBhdGgpLgorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUKK1xmQlwtc1xmUCBvcHRpb24gKERvbid0IGFkZCB0aGUgdXNlciBzaXRlIGRpcmVjdG9yeSB0byBzeXMucGF0aCkuCiAuSVAgUFlUSE9OVU5CVUZGRVJFRAogSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwogdGhlIFxmQlwtdVxmUCBvcHRpb24uCkBAIC00MTEsNiArNDIwLDkgQEAKIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKIHRoZSBcZkJcLXZcZlAgb3B0aW9uLiBJZiBzZXQgdG8gYW4gaW50ZWdlciwgaXQgaXMgZXF1aXZhbGVudCB0bwogc3BlY2lmeWluZyBcZkJcLXZcZlAgbXVsdGlwbGUgdGltZXMuIAorLklQIFBZVEhPTldBUk5JTkdTCitJZiB0aGlzIGlzIHNldCB0byBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0bworc3BlY2lmeWluZyB0aGUgXGZCXC1XXGZQIG9wdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSB2YWx1ZS4KIC5TSCBBVVRIT1IKIFRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjogaHR0cDovL3d3dy5weXRob24ub3JnL3BzZgogLlNIIElOVEVSTkVUIFJFU09VUkNFUwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ucGMuaW4gYi9NaXNjL3B5dGhvbi5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQ4MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24ucGMuaW4KQEAgLTAsMCArMSwxMyBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IFB5dGhvbgorRGVzY3JpcHRpb246IFB5dGhvbiBsaWJyYXJ5CitSZXF1aXJlczogCitWZXJzaW9uOiBAVkVSU0lPTkAKK0xpYnMucHJpdmF0ZTogQExJQlNACitMaWJzOiAtTCR7bGliZGlyfSAtbHB5dGhvbkBWRVJTSU9OQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vcHl0aG9uQFZFUlNJT05AIAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1NldHVwLmRpc3QgYi9Nb2R1bGVzL1NldHVwLmRpc3QKaW5kZXggNWU2OWE2MC4uZTAyZmQ3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9TZXR1cC5kaXN0CisrKyBiL01vZHVsZXMvU2V0dXAuZGlzdApAQCAtMTE4LDYgKzExOCw3IEBACiAJCQkJIyBpZiAkSE9NRSBpcyBub3Qgc2V0CiBfc3JlIF9zcmUuYwkJCSMgRnJlZHJpayBMdW5kaCdzIG5ldyByZWd1bGFyIGV4cHJlc3Npb25zCiBfY29kZWNzIF9jb2RlY3Ntb2R1bGUuYwkJIyBhY2Nlc3MgdG8gdGhlIGJ1aWx0aW4gY29kZWNzIGFuZCBjb2RlYyByZWdpc3RyeQorX3dlYWtyZWYgX3dlYWtyZWYuYyAgICAgICAgICAgICAjIHdlYWsgcmVmZXJlbmNlcwogCiAjIFRoZSB6aXBpbXBvcnQgbW9kdWxlIGlzIGFsd2F5cyBpbXBvcnRlZCBhdCBzdGFydHVwLiBIYXZpbmcgaXQgYXMgYQogIyBidWlsdGluIG1vZHVsZSBhdm9pZHMgc29tZSBib290c3RyYXBwaW5nIHByb2JsZW1zIGFuZCByZWR1Y2VzIG92ZXJoZWFkLgpAQCAtMTY4LDEyICsxNjksMTEgQEAKICMgTW9kdWxlcyB0aGF0IHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCAobm9uIFVOSVggZGVwZW5kZW50KToKIAogI2FycmF5IGFycmF5bW9kdWxlLmMJIyBhcnJheSBvYmplY3RzCi0jY21hdGggY21hdGhtb2R1bGUuYyAjIC1sbSAjIGNvbXBsZXggbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucwotI21hdGggbWF0aG1vZHVsZS5jICMgLWxtICMgbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucywgZS5nLiBzaW4oKQorI2NtYXRoIGNtYXRobW9kdWxlLmMgX21hdGguYyAjIC1sbSAjIGNvbXBsZXggbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucworI21hdGggbWF0aG1vZHVsZS5jIF9tYXRoLmMgIyAtbG0gIyBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zLCBlLmcuIHNpbigpCiAjX3N0cnVjdCBfc3RydWN0LmMJIyBiaW5hcnkgc3RydWN0dXJlIHBhY2tpbmcvdW5wYWNraW5nCiAjdGltZSB0aW1lbW9kdWxlLmMgIyAtbG0gIyB0aW1lIG9wZXJhdGlvbnMgYW5kIHZhcmlhYmxlcwogI29wZXJhdG9yIG9wZXJhdG9yLmMJIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCi0jX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAjX2NvbGxlY3Rpb25zIF9jb2xsZWN0aW9uc21vZHVsZS5jICMgQ29udGFpbmVyIHR5cGVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYyBiL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCmluZGV4IGI1MWYzZGUuLmU4OTc2YjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jCkBAIC0yMzcsNyArMjM3LDUgQEAKIFB5TU9ESU5JVF9GVU5DCiBpbml0X2Jpc2VjdCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptOwotCi0gICAgbSA9IFB5X0luaXRNb2R1bGUzKCJfYmlzZWN0IiwgYmlzZWN0X21ldGhvZHMsIG1vZHVsZV9kb2MpOworICAgIFB5X0luaXRNb2R1bGUzKCJfYmlzZWN0IiwgYmlzZWN0X21ldGhvZHMsIG1vZHVsZV9kb2MpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnNkZGIuYyBiL01vZHVsZXMvX2JzZGRiLmMKaW5kZXggNzU1MjQyYy4uZDJkMTJmZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYnNkZGIuYworKysgYi9Nb2R1bGVzL19ic2RkYi5jCkBAIC03Myw2ICs3MywxMCBAQAogICogREJMb2NrICAgICAgIChBIGxvY2sgaGFuZGxlKQogICogREJTZXF1ZW5jZSAgIChTZXF1ZW5jZSkKICAqCisgKiBNb3JlIGRhdGF0eXBlcyBhZGRlZDoKKyAqCisgKiBEQkxvZ0N1cnNvciAgKExvZyBDdXJzb3IpCisgKgogICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTY5LDkgKzE3Myw2IEBACiAKICNlbmRpZgogCi0vKiBTaG91bGQgREJfSU5DT01QTEVURSBiZSB0dXJuZWQgaW50byBhIHdhcm5pbmcgb3IgYW4gZXhjZXB0aW9uPyAqLwotI2RlZmluZSBJTkNPTVBMRVRFX0lTX1dBUk5JTkcgMQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEV4Y2VwdGlvbnMgKi8KIApAQCAtMTkxLDEwICsxOTIsNiBAQAogc3RhdGljIFB5T2JqZWN0KiBEQlBhZ2VOb3RGb3VuZEVycm9yOyAgIC8qIERCX1BBR0VfTk9URk9VTkQgKi8KIHN0YXRpYyBQeU9iamVjdCogREJTZWNvbmRhcnlCYWRFcnJvcjsgICAvKiBEQl9TRUNPTkRBUllfQkFEICovCiAKLSNpZiAhSU5DT01QTEVURV9JU19XQVJOSU5HCi1zdGF0aWMgUHlPYmplY3QqIERCSW5jb21wbGV0ZUVycm9yOyAgICAgLyogREJfSU5DT01QTEVURSAqLwotI2VuZGlmCi0KIHN0YXRpYyBQeU9iamVjdCogREJJbnZhbGlkQXJnRXJyb3I7ICAgICAvKiBFSU5WQUwgKi8KIHN0YXRpYyBQeU9iamVjdCogREJBY2Nlc3NFcnJvcjsgICAgICAgICAvKiBFQUNDRVMgKi8KIHN0YXRpYyBQeU9iamVjdCogREJOb1NwYWNlRXJyb3I7ICAgICAgICAvKiBFTk9TUEMgKi8KQEAgLTIwOCw2ICsyMDUsMTggQEAKICNpZiAoREJWRVIgPj0gNDIpCiBzdGF0aWMgUHlPYmplY3QqIERCUmVwSGFuZGxlRGVhZEVycm9yOyAgLyogREJfUkVQX0hBTkRMRV9ERUFEICovCiAjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDQpCitzdGF0aWMgUHlPYmplY3QqIERCUmVwTG9ja291dEVycm9yOyAgICAgLyogREJfUkVQX0xPQ0tPVVQgKi8KKyNlbmRpZgorCisjaWYgKERCVkVSID49IDQ2KQorc3RhdGljIFB5T2JqZWN0KiBEQlJlcExlYXNlRXhwaXJlZEVycm9yOyAvKiBEQl9SRVBfTEVBU0VfRVhQSVJFRCAqLworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCitzdGF0aWMgUHlPYmplY3QqIERCRm9yZWlnbkNvbmZsaWN0RXJyb3I7IC8qIERCX0ZPUkVJR05fQ09ORkxJQ1QgKi8KKyNlbmRpZgorCiAKIHN0YXRpYyBQeU9iamVjdCogREJSZXBVbmF2YWlsRXJyb3I7ICAgICAvKiBEQl9SRVBfVU5BVkFJTCAqLwogCkBAIC0yMTUsNiArMjI0LDEwIEBACiAjZGVmaW5lIERCX0JVRkZFUl9TTUFMTCAgICAgICAgIEVOT01FTQogI2VuZGlmCiAKKyNpZiAoREJWRVIgPCA0OCkKKyNkZWZpbmUgREJfR0lEX1NJWkUgREJfWElEREFUQVNJWkUKKyNlbmRpZgorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogU3RydWN0dXJlIGRlZmluaXRpb25zICovCkBAIC0yMzgsNyArMjUxLDcgQEAKICNlbmRpZgogCiBzdGF0aWNmb3J3YXJkIFB5VHlwZU9iamVjdCBEQl9UeXBlLCBEQkN1cnNvcl9UeXBlLCBEQkVudl9UeXBlLCBEQlR4bl9UeXBlLAotICAgICAgICAgICAgICBEQkxvY2tfVHlwZTsKKyAgICAgICAgICAgICAgREJMb2NrX1R5cGUsIERCTG9nQ3Vyc29yX1R5cGU7CiAjaWYgKERCVkVSID49IDQzKQogc3RhdGljZm9yd2FyZCBQeVR5cGVPYmplY3QgREJTZXF1ZW5jZV9UeXBlOwogI2VuZGlmCkBAIC0yNTAsNiArMjYzLDcgQEAKIAogI2RlZmluZSBEQk9iamVjdF9DaGVjayh2KSAgICAgICAgICAgKFB5X1RZUEUodikgPT0gJkRCX1R5cGUpCiAjZGVmaW5lIERCQ3Vyc29yT2JqZWN0X0NoZWNrKHYpICAgICAoUHlfVFlQRSh2KSA9PSAmREJDdXJzb3JfVHlwZSkKKyNkZWZpbmUgREJMb2dDdXJzb3JPYmplY3RfQ2hlY2sodikgIChQeV9UWVBFKHYpID09ICZEQkxvZ0N1cnNvcl9UeXBlKQogI2RlZmluZSBEQkVudk9iamVjdF9DaGVjayh2KSAgICAgICAgKFB5X1RZUEUodikgPT0gJkRCRW52X1R5cGUpCiAjZGVmaW5lIERCVHhuT2JqZWN0X0NoZWNrKHYpICAgICAgICAoUHlfVFlQRSh2KSA9PSAmREJUeG5fVHlwZSkKICNkZWZpbmUgREJMb2NrT2JqZWN0X0NoZWNrKHYpICAgICAgIChQeV9UWVBFKHYpID09ICZEQkxvY2tfVHlwZSkKQEAgLTM1NSw2ICszNjksOSBAQAogI2RlZmluZSBDSEVDS19DVVJTT1JfTk9UX0NMT1NFRChjdXJzKSBcCiAgICAgICAgIF9DSEVDS19PQkpFQ1RfTk9UX0NMT1NFRChjdXJzLT5kYmMsIERCQ3Vyc29yQ2xvc2VkRXJyb3IsIERCQ3Vyc29yKQogCisjZGVmaW5lIENIRUNLX0xPR0NVUlNPUl9OT1RfQ0xPU0VEKGxvZ2N1cnMpIFwKKyAgICAgICAgX0NIRUNLX09CSkVDVF9OT1RfQ0xPU0VEKGxvZ2N1cnMtPmxvZ2MsIERCQ3Vyc29yQ2xvc2VkRXJyb3IsIERCTG9nQ3Vyc29yKQorCiAjaWYgKERCVkVSID49IDQzKQogI2RlZmluZSBDSEVDS19TRVFVRU5DRV9OT1RfQ0xPU0VEKGN1cnMpIFwKICAgICAgICAgX0NIRUNLX09CSkVDVF9OT1RfQ0xPU0VEKGN1cnMtPnNlcXVlbmNlLCBEQkVycm9yLCBEQlNlcXVlbmNlKQpAQCAtNjY3LDI3ICs2ODQsOCBAQAogICAgIHVuc2lnbmVkIGludCBieXRlc19sZWZ0OwogCiAgICAgc3dpdGNoIChlcnIpIHsKLSAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3NmdWwsIG5vIGVycm9yICovICAgICAgYnJlYWs7Ci0KLSNpZiAoREJWRVIgPCA0MSkKLSAgICAgICAgY2FzZSBEQl9JTkNPTVBMRVRFOgotI2lmIElOQ09NUExFVEVfSVNfV0FSTklORwotICAgICAgICAgICAgYnl0ZXNfbGVmdCA9IG91cl9zdHJsY3B5KGVyclR4dCwgZGJfc3RyZXJyb3IoZXJyKSwgc2l6ZW9mKGVyclR4dCkpOwotICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgYnl0ZXNfbGVmdCBuZXZlciBnb2VzIG5lZ2F0aXZlICovCi0gICAgICAgICAgICBpZiAoX2RiX2Vycm1zZ1swXSAmJiBieXRlc19sZWZ0IDwgKHNpemVvZihlcnJUeHQpIC0gNCkpIHsKLSAgICAgICAgICAgICAgICBieXRlc19sZWZ0ID0gc2l6ZW9mKGVyclR4dCkgLSBieXRlc19sZWZ0IC0gNCAtIDE7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGJ5dGVzX2xlZnQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgc3RyY2F0KGVyclR4dCwgIiAtLSAiKTsKLSAgICAgICAgICAgICAgICBzdHJuY2F0KGVyclR4dCwgX2RiX2Vycm1zZywgYnl0ZXNfbGVmdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfZGJfZXJybXNnWzBdID0gMDsKLSAgICAgICAgICAgIGV4Y2VwdGlvblJhaXNlZCA9IFB5RXJyX1dhcm4oUHlFeGNfUnVudGltZVdhcm5pbmcsIGVyclR4dCk7Ci0KLSNlbHNlICAvKiBkbyBhbiBleGNlcHRpb24gaW5zdGVhZCAqLwotICAgICAgICBlcnJPYmogPSBEQkluY29tcGxldGVFcnJvcjsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBEQlZFUiA8IDQxICovCisgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsLCBubyBlcnJvciAqLworICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBEQl9LRVlFTVBUWTogICAgICAgICAgIGVyck9iaiA9IERCS2V5RW1wdHlFcnJvcjsgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgREJfS0VZRVhJU1Q6ICAgICAgICAgICBlcnJPYmogPSBEQktleUV4aXN0RXJyb3I7ICAgICAgIGJyZWFrOwpAQCAtNzIwLDYgKzcxOCwxNyBAQAogI2lmIChEQlZFUiA+PSA0MikKICAgICAgICAgY2FzZSBEQl9SRVBfSEFORExFX0RFQUQgOiBlcnJPYmogPSBEQlJlcEhhbmRsZURlYWRFcnJvcjsgYnJlYWs7CiAjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgICAgIGNhc2UgREJfUkVQX0xPQ0tPVVQgOiBlcnJPYmogPSBEQlJlcExvY2tvdXRFcnJvcjsgYnJlYWs7CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NikKKyAgICAgICAgY2FzZSBEQl9SRVBfTEVBU0VfRVhQSVJFRCA6IGVyck9iaiA9IERCUmVwTGVhc2VFeHBpcmVkRXJyb3I7IGJyZWFrOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgICAgIGNhc2UgREJfRk9SRUlHTl9DT05GTElDVCA6IGVyck9iaiA9IERCRm9yZWlnbkNvbmZsaWN0RXJyb3I7IGJyZWFrOworI2VuZGlmCiAKICAgICAgICAgY2FzZSBEQl9SRVBfVU5BVkFJTCA6IGVyck9iaiA9IERCUmVwVW5hdmFpbEVycm9yOyBicmVhazsKIApAQCAtNzg4LDcgKzc5Nyw2IEBACiAgICAgaWYgKG1ha2VEQkVycm9yKGVycikpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBzZWxmLT5oYXZlU3RhdCA9IDA7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTgwNSw3ICs4MTMsNiBAQAogICAgIGlmIChtYWtlREJFcnJvcihlcnIpKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2VsZi0+aGF2ZVN0YXQgPSAwOwogICAgIHJldHVybiAwOwogfQogCkBAIC05MzAsNyArOTM3LDYgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPmhhdmVTdGF0ID0gMDsKICAgICBzZWxmLT5mbGFncyA9IDA7CiAgICAgc2VsZi0+c2V0ZmxhZ3MgPSAwOwogICAgIHNlbGYtPm15ZW52b2JqID0gTlVMTDsKQEAgLTEwNzcsNiArMTA4Myw1NCBAQAogfQogCiAKK3N0YXRpYyBEQkxvZ0N1cnNvck9iamVjdCoKK25ld0RCTG9nQ3Vyc29yT2JqZWN0KERCX0xPR0MqIGRibG9nYywgREJFbnZPYmplY3QqIGVudikKK3sKKyAgICBEQkxvZ0N1cnNvck9iamVjdCogc2VsZjsKKworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoREJMb2dDdXJzb3JPYmplY3QsICZEQkxvZ0N1cnNvcl9UeXBlKTsKKworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+bG9nYyA9IGRibG9nYzsKKyAgICBzZWxmLT5lbnYgPSBlbnY7CisKKyAgICBJTlNFUlRfSU5fRE9VQkxFX0xJTktFRF9MSVNUKHNlbGYtPmVudi0+Y2hpbGRyZW5fbG9nY3Vyc29ycywgc2VsZik7CisKKyAgICBzZWxmLT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7CisgICAgUHlfSU5DUkVGKHNlbGYtPmVudik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIFB5T2JqZWN0ICpEQkxvZ0N1cnNvcl9jbG9zZV9pbnRlcm5hbChEQkxvZ0N1cnNvck9iamVjdCogc2VsZik7CisKK3N0YXRpYyB2b2lkCitEQkxvZ0N1cnNvcl9kZWFsbG9jKERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmKQoreworICAgIFB5T2JqZWN0ICpkdW1teTsKKworICAgIGlmIChzZWxmLT5sb2djICE9IE5VTEwpIHsKKyAgICAgICAgZHVtbXkgPSBEQkxvZ0N1cnNvcl9jbG9zZV9pbnRlcm5hbChzZWxmKTsKKyAgICAgICAgLyoKKyAgICAgICAgKiogUmFpc2luZyBleGNlcHRpb25zIHdoaWxlIGRvaW5nCisgICAgICAgICoqIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBhIGZhdGFsIGVycm9yLgorICAgICAgICAqLworICAgICAgICBpZiAoZHVtbXkpCisgICAgICAgICAgICBQeV9ERUNSRUYoZHVtbXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBpZiAoc2VsZi0+aW5fd2Vha3JlZmxpc3QgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNlbGYtPmVudik7CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworfQorCisKIHN0YXRpYyBEQkVudk9iamVjdCoKIG5ld0RCRW52T2JqZWN0KGludCBmbGFncykKIHsKQEAgLTEwOTIsNiArMTE0Niw3IEBACiAgICAgc2VsZi0+bW9kdWxlRmxhZ3MuY3Vyc29yU2V0UmV0dXJuc05vbmUgPSBERUZBVUxUX0NVUlNPUl9TRVRfUkVUVVJOU19OT05FOwogICAgIHNlbGYtPmNoaWxkcmVuX2RicyA9IE5VTEw7CiAgICAgc2VsZi0+Y2hpbGRyZW5fdHhucyA9IE5VTEw7CisgICAgc2VsZi0+Y2hpbGRyZW5fbG9nY3Vyc29ycyA9IE5VTEwgOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICBzZWxmLT5wcml2YXRlX29iaiA9IFB5X05vbmU7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMTE2Myw2ICsxMjE4LDggQEAKICAgICBzZWxmLT5mbGFnX3ByZXBhcmUgPSAwOwogICAgIHNlbGYtPnBhcmVudF90eG4gPSBOVUxMOwogICAgIHNlbGYtPmVudiA9IE5VTEw7CisgICAgLyogV2UgaW5pdGlhbGl6ZSBqdXN0IGluIGNhc2UgInR4bl9iZWdpbiIgZmFpbHMgKi8KKyAgICBzZWxmLT50eG4gPSBOVUxMOwogCiAgICAgaWYgKHBhcmVudCAmJiAoKFB5T2JqZWN0ICopcGFyZW50IT1QeV9Ob25lKSkgewogICAgICAgICBwYXJlbnRfdHhuID0gcGFyZW50LT50eG47CkBAIC0xMTc2LDYgKzEyMzMsNyBAQAogICAgICAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogCiAgICAgICAgIGlmIChtYWtlREJFcnJvcihlcnIpKSB7CisgICAgICAgICAgICAvKiBGcmVlIG9iamVjdCBoYWxmIGluaXRpYWxpemVkICovCiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTIwOSw3ICsxMjY3LDcgQEAKICAgICBpZiAoc2VsZi0+dHhuKSB7CiAgICAgICAgIGludCBmbGFnX3ByZXBhcmUgPSBzZWxmLT5mbGFnX3ByZXBhcmU7CiAKLSAgICAgICAgZHVtbXk9REJUeG5fYWJvcnRfZGlzY2FyZF9pbnRlcm5hbChzZWxmLDApOworICAgICAgICBkdW1teT1EQlR4bl9hYm9ydF9kaXNjYXJkX2ludGVybmFsKHNlbGYsIDApOwogICAgICAgICAvKgogICAgICAgICAqKiBSYWlzaW5nIGV4Y2VwdGlvbnMgd2hpbGUgZG9pbmcKICAgICAgICAgKiogZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGEgZmF0YWwgZXJyb3IuCkBAIC0xMjMyLDcgKzEyOTAsMTIgQEAKICAgICBpZiAoc2VsZi0+ZW52KSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5lbnYpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmLT5wYXJlbnRfdHhuKTsKKyAgICAgICAgLyoKKyAgICAgICAgKiogV2UgY2FuIGhhdmUgInNlbGYtPmVudj09TlVMTCIgYW5kICJzZWxmLT5wYXJlbnRfdHhuPT1OVUxMIgorICAgICAgICAqKiBpZiBzb21ldGhpbmcgaGFwcGVucyB3aGVuIGNyZWF0aW5nIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QKKyAgICAgICAgKiogYW5kIHdlIGFib3J0IHRoZSBvYmplY3Qgd2hpbGUgaGFsZiBkb25lLgorICAgICAgICAqLworICAgICAgICBQeV9YREVDUkVGKHNlbGYtPnBhcmVudF90eG4pOwogICAgIH0KICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CkBAIC0xMjQ3LDYgKzEzMTAsNyBAQAogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBzZWxmLT5sb2NrX2luaXRpYWxpemVkID0gMDsgIC8qIEp1c3QgaW4gY2FzZSB0aGUgY2FsbCBmYWlscyAqLwogCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwogICAgIGVyciA9IG15ZW52LT5kYl9lbnYtPmxvY2tfZ2V0KG15ZW52LT5kYl9lbnYsIGxvY2tlciwgZmxhZ3MsIG9iaiwgbG9ja19tb2RlLApAQCAtMTI1NSw2ICsxMzE5LDggQEAKICAgICBpZiAobWFrZURCRXJyb3IoZXJyKSkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIHNlbGYgPSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlbGYtPmxvY2tfaW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KIAogICAgIHJldHVybiBzZWxmOwpAQCAtMTI2OCw2ICsxMzM0LDcgQEAKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CiAgICAgfQogICAgIC8qIFRPRE86IGlzIHRoaXMgbG9jayBoZWxkPyBzaG91bGQgd2UgcmVsZWFzZSBpdD8gKi8KKyAgICAvKiBDQVVUSU9OOiBUaGUgbG9jayBjYW4gYmUgbm90IGluaXRpYWxpemVkIGlmIHRoZSBjcmVhdGlvbiBoYXMgZmFpbGVkICovCiAKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CkBAIC0xMjg4LDYgKzEzNTUsNyBAQAogICAgIHNlbGYtPnR4biA9IE5VTEw7CiAKICAgICBzZWxmLT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7CisgICAgc2VsZi0+c2VxdWVuY2UgPSBOVUxMOyAgLyogSnVzdCBpbiBjYXNlIHRoZSBjYWxsIGZhaWxzICovCiAKICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CiAgICAgZXJyID0gZGJfc2VxdWVuY2VfY3JlYXRlKCZzZWxmLT5zZXF1ZW5jZSwgc2VsZi0+bXlkYi0+ZGIsIGZsYWdzKTsKQEAgLTE0MTcsMTAgKzE0ODUsNzAgQEAKICAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisjaWYgKERCVkVSID49IDQ2KQorICAgICAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2socmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciogZGF0YTsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICAgICAgICAgIGludCBpLCBsaXN0bGVuOworICAgICAgICAgICAgREJUKiBkYnRzOworCisgICAgICAgICAgICBsaXN0bGVuID0gUHlMaXN0X1NpemUocmVzdWx0KTsKKworICAgICAgICAgICAgZGJ0cyA9IChEQlQgKiltYWxsb2Moc2l6ZW9mKERCVCkgKiBsaXN0bGVuKTsKKworICAgICAgICAgICAgZm9yIChpPTA7IGk8bGlzdGxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghUHlCeXRlc19DaGVjayhQeUxpc3RfR2V0SXRlbShyZXN1bHQsIGkpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisiVGhlIGxpc3QgcmV0dXJuZWQgYnkgREItPmFzc29jaWF0ZSBjYWxsYmFjayBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MuIik7CisjZWxzZQorIlRoZSBsaXN0IHJldHVybmVkIGJ5IERCLT5hc3NvY2lhdGUgY2FsbGJhY2sgc2hvdWxkIGJlIGEgbGlzdCBvZiBieXRlcy4iKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR2V0SXRlbShyZXN1bHQsIGkpLAorICAgICAgICAgICAgICAgICAgICAmZGF0YSwgJnNpemUpOworCisgICAgICAgICAgICAgICAgQ0xFQVJfREJUKGRidHNbaV0pOworICAgICAgICAgICAgICAgIGRidHNbaV0uZGF0YSA9IG1hbGxvYyhzaXplKTsgICAgICAgICAgLyogVE9ETywgY2hlY2sgdGhpcyAqLworCisgICAgICAgICAgICAgICAgaWYgKGRidHNbaV0uZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShkYnRzW2ldLmRhdGEsIGRhdGEsIHNpemUpOworICAgICAgICAgICAgICAgICAgICBkYnRzW2ldLnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICBkYnRzW2ldLnVsZW4gPSBkYnRzW2ldLnNpemU7CisgICAgICAgICAgICAgICAgICAgIGRidHNbaV0uZmxhZ3MgPSBEQl9EQlRfQVBQTUFMTE9DOyAgLyogREIgd2lsbCBmcmVlICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtYWxsb2MgZmFpbGVkIGluIF9kYl9hc3NvY2lhdGVDYWxsYmFjayAobGlzdCkiKTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENMRUFSX0RCVCgqc2VjS2V5KTsKKworICAgICAgICAgICAgc2VjS2V5LT5kYXRhID0gZGJ0czsKKyAgICAgICAgICAgIHNlY0tleS0+c2l6ZSA9IGxpc3RsZW47CisgICAgICAgICAgICBzZWNLZXktPmZsYWdzID0gREJfREJUX0FQUE1BTExPQyB8IERCX0RCVF9NVUxUSVBMRTsKKyAgICAgICAgICAgIHJldHZhbCA9IDA7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICJEQiBhc3NvY2lhdGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBEQl9ET05PVElOREVYIG9yIHN0cmluZy4iKTsKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwKQorIkRCIGFzc29jaWF0ZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIERCX0RPTk9USU5ERVgvc3RyaW5nL2xpc3Qgb2Ygc3RyaW5ncy4iKTsKKyNlbHNlCisiREIgYXNzb2NpYXRlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gREJfRE9OT1RJTkRFWC9ieXRlcy9saXN0IG9mIGJ5dGVzLiIpOworI2VuZGlmCiAgICAgICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICB9CiAKQEAgLTE0MzksMjkgKzE1NjcsMTggQEAKICAgICBpbnQgZXJyLCBmbGFncz0wOwogICAgIERCT2JqZWN0KiBzZWNvbmRhcnlEQjsKICAgICBQeU9iamVjdCogY2FsbGJhY2s7Ci0jaWYgKERCVkVSID49IDQxKQogICAgIFB5T2JqZWN0ICp0eG5vYmogPSBOVUxMOwogICAgIERCX1RYTiAqdHhuID0gTlVMTDsKICAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyJzZWNvbmRhcnlEQiIsICJjYWxsYmFjayIsICJmbGFncyIsICJ0eG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTH07Ci0jZWxzZQotICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7InNlY29uZGFyeURCIiwgImNhbGxiYWNrIiwgImZsYWdzIiwgTlVMTH07Ci0jZW5kaWYKIAotI2lmIChEQlZFUiA+PSA0MSkKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpTzphc3NvY2lhdGUiLCBrd25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWNvbmRhcnlEQiwgJmNhbGxiYWNrLCAmZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR4bm9iaikpIHsKLSNlbHNlCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098aTphc3NvY2lhdGUiLCBrd25hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWNvbmRhcnlEQiwgJmNhbGxiYWNrLCAmZmxhZ3MpKSB7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0jaWYgKERCVkVSID49IDQxKQogICAgIGlmICghY2hlY2tUeG5PYmoodHhub2JqLCAmdHhuKSkgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIAogICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CiAgICAgaWYgKCFEQk9iamVjdF9DaGVjayhzZWNvbmRhcnlEQikpIHsKQEAgLTE0OTcsMTggKzE2MTQsMTEgQEAKICAgICBQeUV2YWxfSW5pdFRocmVhZHMoKTsKICNlbmRpZgogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgZXJyID0gc2VsZi0+ZGItPmFzc29jaWF0ZShzZWxmLT5kYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeURCLT5kYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYl9hc3NvY2lhdGVDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKLSNlbHNlCi0gICAgZXJyID0gc2VsZi0+ZGItPmFzc29jaWF0ZShzZWxmLT5kYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeURCLT5kYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYl9hc3NvY2lhdGVDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKTsKLSNlbmRpZgogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAoZXJyKSB7CkBAIC0xNzAxLDYgKzE4MTEsNjQgQEAKIH0KIAogCisjaWYgKERCVkVSID49IDQ3KQorLyoKKyoqIFRoaXMgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIHNpbmNlIEJlcmtlbGV5IERCIDQuNCwKKyoqIGJ1dCA0LjYgdmVyc2lvbiBpcyBzbyBidWdneSB0aGF0IHdlIG9ubHkgc3VwcG9ydAorKiogaXQgZnJvbSBCREIgNC43IGFuZCBuZXdlci4KKyovCitzdGF0aWMgUHlPYmplY3QqCitEQl9jb21wYWN0KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBQeU9iamVjdCogdHhub2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RhcnRvYmogPSBOVUxMLCAqc3RvcG9iaiA9IE5VTEw7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBEQl9UWE4gKnR4biA9IE5VTEw7CisgICAgREJUICpzdGFydF9wID0gTlVMTCwgKnN0b3BfcCA9IE5VTEw7CisgICAgREJUIHN0YXJ0LCBzdG9wOworICAgIGludCBlcnI7CisgICAgREJfQ09NUEFDVCBjX2RhdGEgPSB7IDAgfTsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAidHhuIiwgInN0YXJ0IiwgInN0b3AiLCAiZmxhZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYWN0X2ZpbGxwZXJjZW50IiwgImNvbXBhY3RfcGFnZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYWN0X3RpbWVvdXQiLCBOVUxMIH07CisKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPT09paWlJOmNvbXBhY3QiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eG5vYmosICZzdGFydG9iaiwgJnN0b3BvYmosICZmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY19kYXRhLmNvbXBhY3RfZmlsbHBlcmNlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNfZGF0YS5jb21wYWN0X3BhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjX2RhdGEuY29tcGFjdF90aW1lb3V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIGlmICghY2hlY2tUeG5PYmoodHhub2JqLCAmdHhuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc3RhcnRvYmogJiYgbWFrZV9rZXlfZGJ0KHNlbGYsIHN0YXJ0b2JqLCAmc3RhcnQsIE5VTEwpKSB7CisgICAgICAgIHN0YXJ0X3AgPSAmc3RhcnQ7CisgICAgfQorICAgIGlmIChzdG9wb2JqICYmIG1ha2Vfa2V5X2RidChzZWxmLCBzdG9wb2JqLCAmc3RvcCwgTlVMTCkpIHsKKyAgICAgICAgc3RvcF9wID0gJnN0b3A7CisgICAgfQorCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5jb21wYWN0KHNlbGYtPmRiLCB0eG4sIHN0YXJ0X3AsIHN0b3BfcCwgJmNfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIGlmIChzdGFydG9iaikKKyAgICAgICAgRlJFRV9EQlQoc3RhcnQpOworICAgIGlmIChzdG9wb2JqKQorICAgICAgICBGUkVFX0RCVChzdG9wKTsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhjX2RhdGEuY29tcGFjdF9wYWdlc190cnVuY2F0ZWQpOworfQorI2VuZGlmCisKKwogc3RhdGljIFB5T2JqZWN0KgogREJfZmQoREJPYmplY3QqIHNlbGYpCiB7CkBAIC0xNzE2LDYgKzE4ODQsNTUgQEAKIH0KIAogCisjaWYgKERCVkVSID49IDQ2KQorc3RhdGljIFB5T2JqZWN0KgorREJfZXhpc3RzKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBpbnQgZXJyLCBmbGFncz0wOworICAgIFB5T2JqZWN0KiB0eG5vYmogPSBOVUxMOworICAgIFB5T2JqZWN0KiBrZXlvYmo7CisgICAgREJUIGtleTsKKyAgICBEQl9UWE4gKnR4bjsKKworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ImtleSIsICJ0eG4iLCAiZmxhZ3MiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98T2k6ZXhpc3RzIiwga3duYW1lcywKKyAgICAgICAgICAgICAgICAma2V5b2JqLCAmdHhub2JqLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisgICAgaWYgKCFtYWtlX2tleV9kYnQoc2VsZiwga2V5b2JqLCAma2V5LCBOVUxMKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFjaGVja1R4bk9iaih0eG5vYmosICZ0eG4pKSB7CisgICAgICAgIEZSRUVfREJUKGtleSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+ZXhpc3RzKHNlbGYtPmRiLCB0eG4sICZrZXksIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgRlJFRV9EQlQoa2V5KTsKKworICAgIGlmICghZXJyKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgcmV0dXJuIFB5X1RydWU7CisgICAgfQorICAgIGlmICgoZXJyID09IERCX05PVEZPVU5EIHx8IGVyciA9PSBEQl9LRVlFTVBUWSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOworICAgIH0KKworICAgIC8qCisgICAgKiogSWYgd2UgcmVhY2ggdGhlcmUsIHRoZXJlIHdhcyBhbiBlcnJvci4gVGhlCisgICAgKiogInJldHVybiIgc2hvdWxkIGJlIHVucmVhY2hhYmxlLgorICAgICovCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIGFzc2VydCgwKTsgIC8qIFRoaXMgY291ZGUgU0hPVUxEIGJlIHVucmVhY2hhYmxlICovCisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogREJfZ2V0KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKQEAgLTIxMTQsNyArMjMzMSw2IEBACiAgICAgaW50IGVyciwgdHlwZSA9IERCX1VOS05PV04sIGZsYWdzPTAsIG1vZGU9MDY2MDsKICAgICBjaGFyKiBmaWxlbmFtZSA9IE5VTEw7CiAgICAgY2hhciogZGJuYW1lID0gTlVMTDsKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgUHlPYmplY3QgKnR4bm9iaiA9IE5VTEw7CiAgICAgREJfVFhOICp0eG4gPSBOVUxMOwogICAgIC8qIHdpdGggZGJuYW1lICovCkBAIC0yMTIzLDQ1ICsyMzM5LDIyIEBACiAgICAgLyogd2l0aG91dCBkYm5hbWUgKi8KICAgICBzdGF0aWMgY2hhcioga3duYW1lc19iYXNpY1tdID0gewogICAgICAgICAiZmlsZW5hbWUiLCAiZGJ0eXBlIiwgImZsYWdzIiwgIm1vZGUiLCAidHhuIiwgTlVMTH07Ci0jZWxzZQotICAgIC8qIHdpdGggZGJuYW1lICovCi0gICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsKLSAgICAgICAgImZpbGVuYW1lIiwgImRibmFtZSIsICJkYnR5cGUiLCAiZmxhZ3MiLCAibW9kZSIsIE5VTEx9OwotICAgIC8qIHdpdGhvdXQgZGJuYW1lICovCi0gICAgc3RhdGljIGNoYXIqIGt3bmFtZXNfYmFzaWNbXSA9IHsKLSAgICAgICAgImZpbGVuYW1lIiwgImRidHlwZSIsICJmbGFncyIsICJtb2RlIiwgTlVMTH07Ci0jZW5kaWYKIAotI2lmIChEQlZFUiA+PSA0MSkKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ6fHppaWlPOm9wZW4iLCBrd25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJmRibmFtZSwgJnR5cGUsICZmbGFncywgJm1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR4bm9iaikpCi0jZWxzZQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInp8emlpaTpvcGVuIiwga3duYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZW5hbWUsICZkYm5hbWUsICZ0eXBlLCAmZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGUpKQotI2VuZGlmCiAgICAgewogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB0eXBlID0gREJfVU5LTk9XTjsgZmxhZ3MgPSAwOyBtb2RlID0gMDY2MDsKICAgICAgICAgZmlsZW5hbWUgPSBOVUxMOyBkYm5hbWUgPSBOVUxMOwotI2lmIChEQlZFUiA+PSA0MSkKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCJ6fGlpaU86b3BlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bmFtZXNfYmFzaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJnR5cGUsICZmbGFncywgJm1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0eG5vYmopKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsInp8aWlpOm9wZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd25hbWVzX2Jhc2ljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZW5hbWUsICZ0eXBlLCAmZmxhZ3MsICZtb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAgICAgfQogCi0jaWYgKERCVkVSID49IDQxKQogICAgIGlmICghY2hlY2tUeG5PYmoodHhub2JqLCAmdHhuKSkgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIAogICAgIGlmIChOVUxMID09IHNlbGYtPmRiKSB7CiAgICAgICAgIFB5T2JqZWN0ICp0ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIDAsCkBAIC0yMTczLDI0ICsyMzY2LDE3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotI2lmIChEQlZFUiA+PSA0MSkKICAgICBpZiAodHhuKSB7ICAvKiBDYW4ndCB1c2UgJ3R4bm9iaicgYmVjYXVzZSBjb3VsZCBiZSAndHhub2JqPT1QeV9Ob25lJyAqLwogICAgICAgICBJTlNFUlRfSU5fRE9VQkxFX0xJTktFRF9MSVNUX1RYTigoKERCVHhuT2JqZWN0ICopdHhub2JqKS0+Y2hpbGRyZW5fZGJzLHNlbGYpOwogICAgICAgICBzZWxmLT50eG49KERCVHhuT2JqZWN0ICopdHhub2JqOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNlbGYtPnR4bj1OVUxMOwogICAgIH0KLSNlbHNlCi0gICAgc2VsZi0+dHhuPU5VTEw7Ci0jZW5kaWYKIAogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgZXJyID0gc2VsZi0+ZGItPm9wZW4oc2VsZi0+ZGIsIHR4biwgZmlsZW5hbWUsIGRibmFtZSwgdHlwZSwgZmxhZ3MsIG1vZGUpOwotI2Vsc2UKLSAgICBlcnIgPSBzZWxmLT5kYi0+b3BlbihzZWxmLT5kYiwgZmlsZW5hbWUsIGRibmFtZSwgdHlwZSwgZmxhZ3MsIG1vZGUpOwotI2VuZGlmCiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKwogICAgIGlmIChtYWtlREJFcnJvcihlcnIpKSB7CiAgICAgICAgIFB5T2JqZWN0ICpkdW1teTsKIApAQCAtMjMxOSwxMyArMjUwNSw3OSBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqCitEQl9zZXRfcHJpb3JpdHkoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnIsIHByaW9yaXR5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk6c2V0X3ByaW9yaXR5IiwgJnByaW9yaXR5KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+c2V0X3ByaW9yaXR5KHNlbGYtPmRiLCBwcmlvcml0eSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X3ByaW9yaXR5KERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIgPSAwOworICAgIERCX0NBQ0hFX1BSSU9SSVRZIHByaW9yaXR5OworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3ByaW9yaXR5KHNlbGYtPmRiLCAmcHJpb3JpdHkpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcocHJpb3JpdHkpOworfQorI2VuZGlmCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCX3NldF9xX2V4dGVudHNpemUoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGV4dGVudHNpemU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTpzZXRfcV9leHRlbnRzaXplIiwgJmV4dGVudHNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5zZXRfcV9leHRlbnRzaXplKHNlbGYtPmRiLCBleHRlbnRzaXplKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X3FfZXh0ZW50c2l6ZShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICB1X2ludDMyX3QgZXh0ZW50c2l6ZTsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9xX2V4dGVudHNpemUoc2VsZi0+ZGIsICZleHRlbnRzaXplKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGV4dGVudHNpemUpOworfQorI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCX3NldF9idF9taW5rZXkoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBlcnIsIG1pbmtleTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpOnNldF9idF9taW5rZXkiLCAmbWlua2V5ICkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk6c2V0X2J0X21pbmtleSIsICZtaW5rZXkpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOwogCkBAIC0yMzM2LDYgKzI1ODgsMjMgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X2J0X21pbmtleShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBidF9taW5rZXk7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfYnRfbWlua2V5KHNlbGYtPmRiLCAmYnRfbWlua2V5KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGJ0X21pbmtleSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludAogX2RlZmF1bHRfY21wKGNvbnN0IERCVCAqbGVmdEtleSwKICAgICAgICAgICAgICBjb25zdCBEQlQgKnJpZ2h0S2V5KQpAQCAtMjQ5MCw2ICsyNzU5LDI1IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9jYWNoZXNpemUoREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZ2J5dGVzLCBieXRlczsKKyAgICBpbnQgbmNhY2hlOworCisgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X2NhY2hlc2l6ZShzZWxmLT5kYiwgJmdieXRlcywgJmJ5dGVzLCAmbmNhY2hlKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgZ2J5dGVzLCBieXRlcywgbmNhY2hlKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfZmxhZ3MoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjUwOSw2ICsyNzk3LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9mbGFncyhEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBmbGFnczsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9mbGFncyhzZWxmLT5kYiwgJmZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGZsYWdzKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfaF9mZmFjdG9yKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTI1MjYsNiArMjgzMCwyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfaF9mZmFjdG9yKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGZmYWN0b3I7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfaF9mZmFjdG9yKHNlbGYtPmRiLCAmZmZhY3Rvcik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhmZmFjdG9yKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfaF9uZWxlbShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0yNTQzLDYgKzI4NjMsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X2hfbmVsZW0oREJPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbmVsZW07CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfaF9uZWxlbShzZWxmLT5kYiwgJm5lbGVtKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKG5lbGVtKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfbG9yZGVyKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTI1NjAsNiArMjg5NiwyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfbG9yZGVyKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgaW50IGxvcmRlcjsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9sb3JkZXIoc2VsZi0+ZGIsICZsb3JkZXIpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobG9yZGVyKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfcGFnZXNpemUoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjU3Nyw2ICsyOTI5LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9wYWdlc2l6ZShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBwYWdlc2l6ZTsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9wYWdlc2l6ZShzZWxmLT5kYiwgJnBhZ2VzaXplKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHBhZ2VzaXplKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfcmVfZGVsaW0oREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjU5OSw2ICsyOTY3LDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9yZV9kZWxpbShEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyLCByZV9kZWxpbTsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9yZV9kZWxpbShzZWxmLT5kYiwgJnJlX2RlbGltKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHJlX2RlbGltKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfcmVfbGVuKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKQEAgLTI2MTUsNiArMjk5OSwyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQl9nZXRfcmVfbGVuKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IHJlX2xlbjsKKworICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGItPmdldF9yZV9sZW4oc2VsZi0+ZGIsICZyZV9sZW4pOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcocmVfbGVuKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQl9zZXRfcmVfcGFkKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTI2MzYsNDEgKzMwMzYsNTUgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJfZ2V0X3JlX3BhZChEQk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyLCByZV9wYWQ7CisKKyAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfcmVfcGFkKHNlbGYtPmRiLCAmcmVfcGFkKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHJlX3BhZCk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJfc2V0X3JlX3NvdXJjZShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGVycjsKLSAgICBjaGFyICpyZV9zb3VyY2U7CisgICAgY2hhciAqc291cmNlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsInM6c2V0X3JlX3NvdXJjZSIsICZyZV9zb3VyY2UpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJzOnNldF9yZV9zb3VyY2UiLCAmc291cmNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfREJfTk9UX0NMT1NFRChzZWxmKTsKIAogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKLSAgICBlcnIgPSBzZWxmLT5kYi0+c2V0X3JlX3NvdXJjZShzZWxmLT5kYiwgcmVfc291cmNlKTsKKyAgICBlcnIgPSBzZWxmLT5kYi0+c2V0X3JlX3NvdXJjZShzZWxmLT5kYiwgc291cmNlKTsKICAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogICAgIFJFVFVSTl9JRl9FUlIoKTsKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCi0KKyNpZiAoREJWRVIgPj0gNDIpCiBzdGF0aWMgUHlPYmplY3QqCi1EQl9zZXRfcV9leHRlbnRzaXplKERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK0RCX2dldF9yZV9zb3VyY2UoREJPYmplY3QqIHNlbGYpCiB7CiAgICAgaW50IGVycjsKLSAgICBpbnQgZXh0ZW50c2l6ZTsKKyAgICBjb25zdCBjaGFyICpzb3VyY2U7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTpzZXRfcV9leHRlbnRzaXplIiwgJmV4dGVudHNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19EQl9OT1RfQ0xPU0VEKHNlbGYpOwogCiAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGVyciA9IHNlbGYtPmRiLT5zZXRfcV9leHRlbnRzaXplKHNlbGYtPmRiLCBleHRlbnRzaXplKTsKKyAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0X3JlX3NvdXJjZShzZWxmLT5kYiwgJnNvdXJjZSk7CiAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICAgICBSRVRVUk5fSUZfRVJSKCk7Ci0gICAgUkVUVVJOX05PTkUoKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKHNvdXJjZSk7CiB9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJfc3RhdChEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCkBAIC0yNzA3LDggKzMxMjEsNiBAQAogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAgICAgUkVUVVJOX0lGX0VSUigpOwogCi0gICAgc2VsZi0+aGF2ZVN0YXQgPSAxOwotCiAgICAgLyogVHVybiB0aGUgc3RhdCBzdHJ1Y3R1cmUgaW50byBhIGRpY3Rpb25hcnkgKi8KICAgICB0eXBlID0gX0RCX2dldF90eXBlKHNlbGYpOwogICAgIGlmICgodHlwZSA9PSAtMSkgfHwgKChkID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKSkgewpAQCAtMjczMCw5ICszMTQyLDYgQEAKICAgICAgICAgTUFLRV9IQVNIX0VOVFJZKHBhZ2VjbnQpOwogI2VuZGlmCiAgICAgICAgIE1BS0VfSEFTSF9FTlRSWShwYWdlc2l6ZSk7Ci0jaWYgKERCVkVSIDwgNDEpCi0gICAgICAgIE1BS0VfSEFTSF9FTlRSWShuZWxlbSk7Ci0jZW5kaWYKICAgICAgICAgTUFLRV9IQVNIX0VOVFJZKGZmYWN0b3IpOwogICAgICAgICBNQUtFX0hBU0hfRU5UUlkoYnVja2V0cyk7CiAgICAgICAgIE1BS0VfSEFTSF9FTlRSWShmcmVlKTsKQEAgLTI3NzksOSArMzE4OCw3IEBACiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkobmtleXMpOwogICAgICAgICBNQUtFX1FVRVVFX0VOVFJZKG5kYXRhKTsKICAgICAgICAgTUFLRV9RVUVVRV9FTlRSWShwYWdlc2l6ZSk7Ci0jaWYgKERCVkVSID49IDQxKQogICAgICAgICBNQUtFX1FVRVVFX0VOVFJZKGV4dGVudHNpemUpOwotI2VuZGlmCiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkocGFnZXMpOwogICAgICAgICBNQUtFX1FVRVVFX0VOVFJZKHJlX2xlbik7CiAgICAgICAgIE1BS0VfUVVFVUVfRU5UUlkocmVfcGFkKTsKQEAgLTI4MDcsNiArMzIxNCwyOSBAQAogICAgIHJldHVybiBkOwogfQogCisjaWYgKERCVkVSID49IDQzKQorc3RhdGljIFB5T2JqZWN0KgorREJfc3RhdF9wcmludChEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpzdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5zdGF0X3ByaW50KHNlbGYtPmRiLCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCX3N5bmMoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewpAQCAtMjg5Miw3ICszMzIyLDcgQEAKICAgICAgICAgUHlPYmplY3QgKmVycm9yOwogCiAgICAgICAgIGVycm9yPURCX2Nsb3NlX2ludGVybmFsKHNlbGYsIDAsIDEpOwotICAgICAgICBpZiAoZXJyb3IgKSB7CisgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICAgfQogICAgICB9CkBAIC0yOTMwLDcgKzMzNjAsNiBAQAogICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcob2xkVmFsdWUpOwogfQogCi0jaWYgKERCVkVSID49IDQxKQogc3RhdGljIFB5T2JqZWN0KgogREJfc2V0X2VuY3J5cHQoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewpAQCAtMjk1MSw3ICszMzgwLDI0IEBACiAgICAgUkVUVVJOX0lGX0VSUigpOwogICAgIFJFVFVSTl9OT05FKCk7CiB9Ci0jZW5kaWYgLyogREJWRVIgPj0gNDEgKi8KKworI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCX2dldF9lbmNyeXB0X2ZsYWdzKERCT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGZsYWdzOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiLT5nZXRfZW5jcnlwdF9mbGFncyhzZWxmLT5kYiwgJmZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhmbGFncyk7Cit9CisjZW5kaWYKKwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI5NjEsNyArMzQwNyw2IEBACiB7CiAgICAgaW50IGVycjsKICAgICBQeV9zc2l6ZV90IHNpemUgPSAwOwotICAgIGludCBmbGFncyA9IDA7CiAgICAgdm9pZCogc3A7CiAgICAgREJPYmplY3QqIHNlbGYgPSAoREJPYmplY3QqKV9zZWxmOwogCkBAIC0yOTc0LDQxICszNDE5LDIxIEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoc2VsZi0+aGF2ZVN0YXQpIHsgIC8qIEhhcyB0aGUgc3RhdCBmdW5jdGlvbiBiZWVuIGNhbGxlZCByZWNlbnRseT8gIElmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbywgd2UgY2FuIHVzZSB0aGUgY2FjaGVkIHZhbHVlLiAqLwotICAgICAgICBmbGFncyA9IERCX0ZBU1RfU1RBVDsKLSAgICB9Ci0KICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7Ci1yZWRvX3N0YXRfZm9yX2xlbmd0aDoKICNpZiAoREJWRVIgPj0gNDMpCi0gICAgZXJyID0gc2VsZi0+ZGItPnN0YXQoc2VsZi0+ZGIsIC8qdHhuaWQqLyBOVUxMLCAmc3AsIGZsYWdzKTsKKyAgICBlcnIgPSBzZWxmLT5kYi0+c3RhdChzZWxmLT5kYiwgLyp0eG5pZCovIE5VTEwsICZzcCwgMCk7CiAjZWxzZQotICAgIGVyciA9IHNlbGYtPmRiLT5zdGF0KHNlbGYtPmRiLCAmc3AsIGZsYWdzKTsKKyAgICBlcnIgPSBzZWxmLT5kYi0+c3RhdChzZWxmLT5kYiwgJnNwLCAwKTsKICNlbmRpZgorICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICAvKiBBbGwgdGhlIHN0YXQgc3RydWN0dXJlcyBoYXZlIG1hdGNoaW5nIGZpZWxkcyB1cHRvIHRoZSBuZGF0YSBmaWVsZCwKICAgICAgICBzbyB3ZSBjYW4gdXNlIGFueSBvZiB0aGVtIGZvciB0aGUgdHlwZSBjYXN0ICovCiAgICAgc2l6ZSA9ICgoREJfQlRSRUVfU1RBVCopc3ApLT5idF9uZGF0YTsKIAotICAgIC8qIEEgc2l6ZSBvZiAwIGNvdWxkIG1lYW4gdGhhdCBCZXJrZWxleSBEQiBubyBsb25nZXIgaGFkIHRoZSBzdGF0IHZhbHVlcyBjYWNoZWQuCi0gICAgICogcmVkbyBhIGZ1bGwgc3RhdCB0byBtYWtlIHN1cmUuCi0gICAgICogICBGaXhlcyBTRiBweXRob24gYnVnIDE0OTMzMjIsIHB5YnNkZGIgYnVnIDExODQwMTIKLSAgICAgKi8KLSAgICBpZiAoc2l6ZSA9PSAwICYmIChmbGFncyAmIERCX0ZBU1RfU1RBVCkpIHsKLSAgICAgICAgZmxhZ3MgPSAwOwotICAgICAgICBpZiAoIWVycikKLSAgICAgICAgICAgIGZyZWUoc3ApOwotICAgICAgICBnb3RvIHJlZG9fc3RhdF9mb3JfbGVuZ3RoOwotICAgIH0KLQotICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7Ci0KICAgICBpZiAoZXJyKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5oYXZlU3RhdCA9IDE7Ci0KICAgICBmcmVlKHNwKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KQEAgLTMwOTcsMTggKzM1MjIsMTEgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QqCi1EQl9oYXNfa2V5KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK19EQl9oYXNfa2V5KERCT2JqZWN0KiBzZWxmLCBQeU9iamVjdCoga2V5b2JqLCBQeU9iamVjdCogdHhub2JqKQogewogICAgIGludCBlcnI7Ci0gICAgUHlPYmplY3QqIGtleW9iajsKLSAgICBEQlQga2V5LCBkYXRhOwotICAgIFB5T2JqZWN0KiB0eG5vYmogPSBOVUxMOworICAgIERCVCBrZXk7CiAgICAgREJfVFhOICp0eG4gPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ImtleSIsInR4biIsIE5VTEx9OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPOmhhc19rZXkiLCBrd25hbWVzLAotICAgICAgICAgICAgICAgICZrZXlvYmosICZ0eG5vYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIENIRUNLX0RCX05PVF9DTE9TRUQoc2VsZik7CiAgICAgaWYgKCFtYWtlX2tleV9kYnQoc2VsZiwga2V5b2JqLCAma2V5LCBOVUxMKSkKQEAgLTMxMTgsMjggKzM1MzYsNzcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisjaWYgKERCVkVSIDwgNDYpCiAgICAgLyogVGhpcyBjYXVzZXMgREJfQlVGRkVSX1NNQUxMIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIGRiIGhhcyB0aGUga2V5IGJlY2F1c2UKICAgICAgICBpdCBoYXMgYSByZWNvcmQgYnV0IGNhbid0IGFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUgZGF0YS4gIFRoaXMgc2F2ZXMKICAgICAgICBoYXZpbmcgdG8gZGVhbCB3aXRoIGRhdGEgd2Ugd29uJ3QgYmUgdXNpbmcuCiAgICAgICovCi0gICAgQ0xFQVJfREJUKGRhdGEpOwotICAgIGRhdGEuZmxhZ3MgPSBEQl9EQlRfVVNFUk1FTTsKKyAgICB7CisgICAgICAgIERCVCBkYXRhIDsKKyAgICAgICAgQ0xFQVJfREJUKGRhdGEpOworICAgICAgICBkYXRhLmZsYWdzID0gREJfREJUX1VTRVJNRU07CiAKKyAgICAgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgICAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0KHNlbGYtPmRiLCB0eG4sICZrZXksICZkYXRhLCAwKTsKKyAgICAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICB9CisjZWxzZQogICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKLSAgICBlcnIgPSBzZWxmLT5kYi0+Z2V0KHNlbGYtPmRiLCB0eG4sICZrZXksICZkYXRhLCAwKTsKKyAgICBlcnIgPSBzZWxmLT5kYi0+ZXhpc3RzKHNlbGYtPmRiLCB0eG4sICZrZXksIDApOwogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisjZW5kaWYKKwogICAgIEZSRUVfREJUKGtleSk7CiAKKyAgICAvKgorICAgICoqIERCX0JVRkZFUl9TTUFMTCBpcyBvbmx5IHVzZWQgaWYgd2UgdXNlICJnZXQiLgorICAgICoqIFdlIGNhbiBkcm9wIGl0IHdoZW4gd2Ugb25seSB1c2UgImV4aXN0cyIsCisgICAgKiogd2hlbiB3ZSBkcm9wIHN1cG9ydCBmb3IgQmVya2VsZXkgREIgPCA0LjYuCisgICAgKi8KICAgICBpZiAoZXJyID09IERCX0JVRkZFUl9TTUFMTCB8fCBlcnIgPT0gMCkgewotICAgICAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKDEpOworICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CisgICAgICAgIHJldHVybiBQeV9UcnVlOwogICAgIH0gZWxzZSBpZiAoZXJyID09IERCX05PVEZPVU5EIHx8IGVyciA9PSBEQl9LRVlFTVBUWSkgewotICAgICAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKDApOworICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICByZXR1cm4gUHlfRmFsc2U7CiAgICAgfQogCiAgICAgbWFrZURCRXJyb3IoZXJyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0KgorREJfaGFzX2tleShEQk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCit7CisgICAgUHlPYmplY3QqIGtleW9iajsKKyAgICBQeU9iamVjdCogdHhub2JqID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyJrZXkiLCJ0eG4iLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98TzpoYXNfa2V5Iiwga3duYW1lcywKKyAgICAgICAgICAgICAgICAma2V5b2JqLCAmdHhub2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX0RCX2hhc19rZXkoc2VsZiwga2V5b2JqLCB0eG5vYmopOworfQorCisKK3N0YXRpYyBpbnQgREJfY29udGFpbnMoREJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBrZXlvYmopCit7CisgICAgUHlPYmplY3QqIHJlc3VsdDsKKyAgICBpbnQgcmVzdWx0MiA9IDA7CisKKyAgICByZXN1bHQgPSBfREJfaGFzX2tleShzZWxmLCBrZXlvYmosIE5VTEwpIDsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOyAvKiBQcm9wYWd1ZSBleGNlcHRpb24gKi8KKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSBQeV9GYWxzZSkgeworICAgICAgICByZXN1bHQyID0gMTsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0MjsKK30KKwogCiAjZGVmaW5lIF9LRVlTX0xJU1QgICAgICAxCiAjZGVmaW5lIF9WQUxVRVNfTElTVCAgICAyCkBAIC0zMjkzLDYgKzM3NjAsMTE2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogREJMb2dDdXJzb3IgbWV0aG9kcyAqLworCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX2Nsb3NlX2ludGVybmFsKERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnIgPSAwOworCisgICAgaWYgKHNlbGYtPmxvZ2MgIT0gTlVMTCkgeworICAgICAgICBFWFRSQUNUX0ZST01fRE9VQkxFX0xJTktFRF9MSVNUKHNlbGYpOworCisgICAgICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICAgICAgZXJyID0gc2VsZi0+bG9nYy0+Y2xvc2Uoc2VsZi0+bG9nYywgMCk7CisgICAgICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgICAgIHNlbGYtPmxvZ2MgPSBOVUxMOworICAgIH0KKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJMb2dDdXJzb3JfY2xvc2UoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgcmV0dXJuIERCTG9nQ3Vyc29yX2Nsb3NlX2ludGVybmFsKHNlbGYpOworfQorCisKK3N0YXRpYyBQeU9iamVjdCoKK19EQkxvZ0N1cnNvcl9nZXQoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYsIGludCBmbGFnLCBEQl9MU04gKmxzbjIpCit7CisgICAgaW50IGVycjsKKyAgICBEQlQgZGF0YTsKKyAgICBEQl9MU04gbHNuID0gezAsIDB9OworICAgIFB5T2JqZWN0ICpkdW1teSwgKnJldHZhbDsKKworICAgIENMRUFSX0RCVChkYXRhKTsKKyAgICBkYXRhLmZsYWdzID0gREJfREJUX01BTExPQzsgLyogQmVya2VsZXkgREIgbXVzdCBkbyB0aGUgbWFsbG9jICovCisKKyAgICBDSEVDS19MT0dDVVJTT1JfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChsc24yKQorICAgICAgICBsc24gPSAqbHNuMjsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5sb2djLT5nZXQoc2VsZi0+bG9nYywgJmxzbiwgJmRhdGEsIGZsYWcpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBpZiAoZXJyID09IERCX05PVEZPVU5EKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dmFsID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAobWFrZURCRXJyb3IoZXJyKSkgeworICAgICAgICByZXR2YWwgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gZHVtbXkgPSBCdWlsZFZhbHVlX1MoZGF0YS5kYXRhLCBkYXRhLnNpemUpOworICAgICAgICBpZiAoZHVtbXkpIHsKKyAgICAgICAgICAgIHJldHZhbCA9IFB5X0J1aWxkVmFsdWUoIihpaSlPIiwgbHNuLmZpbGUsIGxzbi5vZmZzZXQsIGR1bW15KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkdW1teSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGUkVFX0RCVChkYXRhKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkxvZ0N1cnNvcl9jdXJyZW50KERCTG9nQ3Vyc29yT2JqZWN0KiBzZWxmKQoreworICAgIHJldHVybiBfREJMb2dDdXJzb3JfZ2V0KHNlbGYsIERCX0NVUlJFTlQsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkxvZ0N1cnNvcl9maXJzdChEQkxvZ0N1cnNvck9iamVjdCogc2VsZikKK3sKKyAgICByZXR1cm4gX0RCTG9nQ3Vyc29yX2dldChzZWxmLCBEQl9GSVJTVCwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX2xhc3QoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgcmV0dXJuIF9EQkxvZ0N1cnNvcl9nZXQoc2VsZiwgREJfTEFTVCwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX25leHQoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgcmV0dXJuIF9EQkxvZ0N1cnNvcl9nZXQoc2VsZiwgREJfTkVYVCwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX3ByZXYoREJMb2dDdXJzb3JPYmplY3QqIHNlbGYpCit7CisgICAgcmV0dXJuIF9EQkxvZ0N1cnNvcl9nZXQoc2VsZiwgREJfUFJFViwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCTG9nQ3Vyc29yX3NldChEQkxvZ0N1cnNvck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgREJfTFNOIGxzbjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiKGlpKTpzZXQiLCAmbHNuLmZpbGUsICZsc24ub2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX0RCTG9nQ3Vyc29yX2dldChzZWxmLCBEQl9TRVQsICZsc24pOworfQorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBEQkN1cnNvciBtZXRob2RzICovCiAKIApAQCAtMzM2Nyw3ICszOTQ0LDYgQEAKICAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogICAgIFJFVFVSTl9JRl9FUlIoKTsKIAotICAgIHNlbGYtPm15ZGItPmhhdmVTdGF0ID0gMDsKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCkBAIC0zNjU1LDcgKzQyMzEsNiBAQAogICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAgICAgRlJFRV9EQlQoa2V5KTsgIC8qICdtYWtlX2tleV9kYnQnIGNvdWxkIGRvIGEgJ21hbGxvYycgKi8KICAgICBSRVRVUk5fSUZfRVJSKCk7Ci0gICAgc2VsZi0+bXlkYi0+aGF2ZVN0YXQgPSAwOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKQEAgLTM5NzAsNiArNDU0NSwxMyBAQAogICAgIHJldHVybiBfREJDdXJzb3JfZ2V0KHNlbGYsREJfTkVYVF9OT0RVUCxhcmdzLGt3YXJncywifGlpaTpuZXh0X25vZHVwIik7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqCitEQkNfcHJldl9kdXAoREJDdXJzb3JPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIHJldHVybiBfREJDdXJzb3JfZ2V0KHNlbGYsREJfUFJFVl9EVVAsYXJncyxrd2FyZ3MsInxpaWk6cHJldl9kdXAiKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkNfcHJldl9ub2R1cChEQkN1cnNvck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCkBAIC00MDEyLDYgKzQ1OTQsNDQgQEAKIH0KIAogCisjaWYgKERCVkVSID49IDQ2KQorc3RhdGljIFB5T2JqZWN0KgorREJDX3NldF9wcmlvcml0eShEQkN1cnNvck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCit7CisgICAgaW50IGVyciwgcHJpb3JpdHk7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgInByaW9yaXR5IiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpzZXRfcHJpb3JpdHkiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmlvcml0eSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgQ0hFQ0tfQ1VSU09SX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJjLT5zZXRfcHJpb3JpdHkoc2VsZi0+ZGJjLCBwcmlvcml0eSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworCitzdGF0aWMgUHlPYmplY3QqCitEQkNfZ2V0X3ByaW9yaXR5KERCQ3Vyc29yT2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgREJfQ0FDSEVfUFJJT1JJVFkgcHJpb3JpdHk7CisKKyAgICBDSEVDS19DVVJTT1JfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYmMtPmdldF9wcmlvcml0eShzZWxmLT5kYmMsICZwcmlvcml0eSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhwcmlvcml0eSk7Cit9CisjZW5kaWYKKworCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogREJFbnYgbWV0aG9kcyAqLwpAQCAtNDAyNSwxMiArNDY0NSwxNiBAQAogCiAgICAgaWYgKCFzZWxmLT5jbG9zZWQpIHsgICAgICAvKiBEb24ndCBjbG9zZSBtb3JlIHRoYW4gb25jZSAqLwogICAgICAgICB3aGlsZShzZWxmLT5jaGlsZHJlbl90eG5zKSB7Ci0gICAgICAgICAgZHVtbXk9REJUeG5fYWJvcnRfZGlzY2FyZF9pbnRlcm5hbChzZWxmLT5jaGlsZHJlbl90eG5zLDApOwotICAgICAgICAgIFB5X1hERUNSRUYoZHVtbXkpOworICAgICAgICAgICAgZHVtbXkgPSBEQlR4bl9hYm9ydF9kaXNjYXJkX2ludGVybmFsKHNlbGYtPmNoaWxkcmVuX3R4bnMsIDApOworICAgICAgICAgICAgUHlfWERFQ1JFRihkdW1teSk7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUoc2VsZi0+Y2hpbGRyZW5fZGJzKSB7Ci0gICAgICAgICAgZHVtbXk9REJfY2xvc2VfaW50ZXJuYWwoc2VsZi0+Y2hpbGRyZW5fZGJzLCAwLCAwKTsKLSAgICAgICAgICBQeV9YREVDUkVGKGR1bW15KTsKKyAgICAgICAgICAgIGR1bW15ID0gREJfY2xvc2VfaW50ZXJuYWwoc2VsZi0+Y2hpbGRyZW5fZGJzLCAwLCAwKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoZHVtbXkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlKHNlbGYtPmNoaWxkcmVuX2xvZ2N1cnNvcnMpIHsKKyAgICAgICAgICAgIGR1bW15ID0gREJMb2dDdXJzb3JfY2xvc2VfaW50ZXJuYWwoc2VsZi0+Y2hpbGRyZW5fbG9nY3Vyc29ycyk7CisgICAgICAgICAgICBQeV9YREVDUkVGKGR1bW15KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDA4MCw2ICs0NzA0LDE5NSBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCoKK0RCRW52X21lbXBfc3RhdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBEQl9NUE9PTF9TVEFUICpnc3A7CisgICAgREJfTVBPT0xfRlNUQVQgKipmc3AsICoqZnNwMjsKKyAgICBQeU9iamVjdCogZCA9IE5VTEwsICpkMiwgKmQzLCAqcjsKKyAgICB1X2ludDMyX3QgZmxhZ3MgPSAwOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOm1lbXBfc3RhdCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm1lbXBfc3RhdChzZWxmLT5kYl9lbnYsICZnc3AsICZmc3AsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIC8qIFR1cm4gdGhlIHN0YXQgc3RydWN0dXJlIGludG8gYSBkaWN0aW9uYXJ5ICovCisgICAgZCA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChnc3ApCisgICAgICAgICAgICBmcmVlKGdzcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2RlZmluZSBNQUtFX0VOVFJZKG5hbWUpICBfYWRkSW50VG9EaWN0KGQsICNuYW1lLCBnc3AtPnN0XyMjbmFtZSkKKworICAgIE1BS0VfRU5UUlkoZ2J5dGVzKTsKKyAgICBNQUtFX0VOVFJZKG5jYWNoZSk7CisjaWYgKERCVkVSID49IDQ2KQorICAgIE1BS0VfRU5UUlkobWF4X25jYWNoZSk7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKHJlZ3NpemUpOworI2lmIChEQlZFUiA+PSA0MykKKyAgICBNQUtFX0VOVFJZKG1tYXBzaXplKTsKKyAgICBNQUtFX0VOVFJZKG1heG9wZW5mZCk7CisgICAgTUFLRV9FTlRSWShtYXh3cml0ZSk7CisgICAgTUFLRV9FTlRSWShtYXh3cml0ZV9zbGVlcCk7CisjZW5kaWYKKyAgICBNQUtFX0VOVFJZKG1hcCk7CisgICAgTUFLRV9FTlRSWShjYWNoZV9oaXQpOworICAgIE1BS0VfRU5UUlkoY2FjaGVfbWlzcyk7CisgICAgTUFLRV9FTlRSWShwYWdlX2NyZWF0ZSk7CisgICAgTUFLRV9FTlRSWShwYWdlX2luKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2Vfb3V0KTsKKyAgICBNQUtFX0VOVFJZKHJvX2V2aWN0KTsKKyAgICBNQUtFX0VOVFJZKHJ3X2V2aWN0KTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VfdHJpY2tsZSk7CisgICAgTUFLRV9FTlRSWShwYWdlcyk7CisgICAgTUFLRV9FTlRSWShwYWdlX2NsZWFuKTsKKyAgICBNQUtFX0VOVFJZKHBhZ2VfZGlydHkpOworICAgIE1BS0VfRU5UUlkoaGFzaF9idWNrZXRzKTsKKyAgICBNQUtFX0VOVFJZKGhhc2hfc2VhcmNoZXMpOworICAgIE1BS0VfRU5UUlkoaGFzaF9sb25nZXN0KTsKKyAgICBNQUtFX0VOVFJZKGhhc2hfZXhhbWluZWQpOworICAgIE1BS0VfRU5UUlkoaGFzaF9ub3dhaXQpOworICAgIE1BS0VfRU5UUlkoaGFzaF93YWl0KTsKKyNpZiAoREJWRVIgPj0gNDUpCisgICAgTUFLRV9FTlRSWShoYXNoX21heF9ub3dhaXQpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShoYXNoX21heF93YWl0KTsKKyAgICBNQUtFX0VOVFJZKHJlZ2lvbl93YWl0KTsKKyAgICBNQUtFX0VOVFJZKHJlZ2lvbl9ub3dhaXQpOworI2lmIChEQlZFUiA+PSA0NSkKKyAgICBNQUtFX0VOVFJZKG12Y2NfZnJvemVuKTsKKyAgICBNQUtFX0VOVFJZKG12Y2NfdGhhd2VkKTsKKyAgICBNQUtFX0VOVFJZKG12Y2NfZnJlZWQpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShhbGxvYyk7CisgICAgTUFLRV9FTlRSWShhbGxvY19idWNrZXRzKTsKKyAgICBNQUtFX0VOVFJZKGFsbG9jX21heF9idWNrZXRzKTsKKyAgICBNQUtFX0VOVFJZKGFsbG9jX3BhZ2VzKTsKKyAgICBNQUtFX0VOVFJZKGFsbG9jX21heF9wYWdlcyk7CisjaWYgKERCVkVSID49IDQ1KQorICAgIE1BS0VfRU5UUlkoaW9fd2FpdCk7CisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDgpCisgICAgTUFLRV9FTlRSWShzeW5jX2ludGVycnVwdGVkKTsKKyNlbmRpZgorCisjdW5kZWYgTUFLRV9FTlRSWQorICAgIGZyZWUoZ3NwKTsKKworICAgIGQyID0gUHlEaWN0X05ldygpOworICAgIGlmIChkMiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgaWYgKGZzcCkKKyAgICAgICAgICAgIGZyZWUoZnNwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2RlZmluZSBNQUtFX0VOVFJZKG5hbWUpICBfYWRkSW50VG9EaWN0KGQzLCAjbmFtZSwgKCpmc3AyKS0+c3RfIyNuYW1lKQorICAgIGZvcihmc3AyPWZzcDsqZnNwMjsgZnNwMisrKSB7CisgICAgICAgIGQzID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoZDMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgUHlfREVDUkVGKGQyKTsKKyAgICAgICAgICAgIGlmIChmc3ApCisgICAgICAgICAgICAgICAgZnJlZShmc3ApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgTUFLRV9FTlRSWShwYWdlc2l6ZSk7CisgICAgICAgIE1BS0VfRU5UUlkoY2FjaGVfaGl0KTsKKyAgICAgICAgTUFLRV9FTlRSWShjYWNoZV9taXNzKTsKKyAgICAgICAgTUFLRV9FTlRSWShtYXApOworICAgICAgICBNQUtFX0VOVFJZKHBhZ2VfY3JlYXRlKTsKKyAgICAgICAgTUFLRV9FTlRSWShwYWdlX2luKTsKKyAgICAgICAgTUFLRV9FTlRSWShwYWdlX291dCk7CisgICAgICAgIGlmKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQyLCAoKmZzcDIpLT5maWxlX25hbWUsIGQzKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgUHlfREVDUkVGKGQyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkMyk7CisgICAgICAgICAgICBpZiAoZnNwKQorICAgICAgICAgICAgICAgIGZyZWUoZnNwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihkMyk7CisgICAgfQorCisjdW5kZWYgTUFLRV9FTlRSWQorICAgIGZyZWUoZnNwKTsKKworICAgIHIgPSBQeV9CdWlsZFZhbHVlKCIoT08pIiwgZCwgZDIpOworICAgIFB5X0RFQ1JFRihkKTsKKyAgICBQeV9ERUNSRUYoZDIpOworICAgIHJldHVybiByOworfQorCisjaWYgKERCVkVSID49IDQzKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbWVtcF9zdGF0X3ByaW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOm1lbXBfc3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tZW1wX3N0YXRfcHJpbnQoc2VsZi0+ZGJfZW52LCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X21lbXBfdHJpY2tsZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVyciwgcGVyY2VudCwgbndyb3RlcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTptZW1wX3RyaWNrbGUiLCAmcGVyY2VudCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm1lbXBfdHJpY2tsZShzZWxmLT5kYl9lbnYsIHBlcmNlbnQsICZud3JvdGVwKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKG53cm90ZXApOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tZW1wX3N5bmMoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgREJfTFNOIGxzbiA9IHswLCAwfTsKKyAgICBEQl9MU04gKmxzbl9wID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifChpaSk6bWVtcF9zeW5jIiwgJmxzbi5maWxlLCAmbHNuLm9mZnNldCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICgobHNuLmZpbGUhPTApIHx8IChsc24ub2Zmc2V0IT0wKSkgeworICAgICAgICBsc25fcCA9ICZsc247CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm1lbXBfc3luYyhzZWxmLT5kYl9lbnYsIGxzbl9wKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9yZW1vdmUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBlcnIsIGZsYWdzPTA7CkBAIC00MDk1LDcgKzQ5MDgsNiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKLSNpZiAoREJWRVIgPj0gNDEpCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9kYnJlbW92ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CkBAIC00MTUyLDYgKzQ5NjQsOCBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKworCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfZW5jcnlwdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CkBAIC00MTcyLDcgKzQ5ODYsNDcgQEAKICAgICBSRVRVUk5fSUZfRVJSKCk7CiAgICAgUkVUVVJOX05PTkUoKTsKIH0KLSNlbmRpZiAvKiBEQlZFUiA+PSA0MSAqLworCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2VuY3J5cHRfZmxhZ3MoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZmxhZ3M7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9lbmNyeXB0X2ZsYWdzKHNlbGYtPmRiX2VudiwgJmZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhmbGFncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF90aW1lb3V0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFnOworICAgIHVfaW50MzJfdCB0aW1lb3V0OworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ImZsYWciLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOmdldF90aW1lb3V0Iiwga3duYW1lcywKKyAgICAgICAgICAgICAgICAmZmxhZykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3RpbWVvdXQoc2VsZi0+ZGJfZW52LCAmdGltZW91dCwgZmxhZyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyh0aW1lb3V0KTsKK30KKyNlbmRpZgorCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF90aW1lb3V0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKQEAgLTQyMTAsNiArNTA2NCw5NSBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfc2htX2tleShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIGxvbmcgc2htX2tleTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3NobV9rZXkoc2VsZi0+ZGJfZW52LCAmc2htX2tleSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoc2htX2tleSk7Cit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0NikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF9jYWNoZV9tYXgoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnIsIGdieXRlcywgYnl0ZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnNldF9jYWNoZV9tYXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2J5dGVzLCAmYnl0ZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF9jYWNoZV9tYXgoc2VsZi0+ZGJfZW52LCBnYnl0ZXMsIGJ5dGVzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfY2FjaGVfbWF4KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGdieXRlcywgYnl0ZXM7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9jYWNoZV9tYXgoc2VsZi0+ZGJfZW52LCAmZ2J5dGVzLCAmYnl0ZXMpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGdieXRlcywgYnl0ZXMpOworfQorI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDYpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9zZXRfdGhyZWFkX2NvdW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBjb3VudDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpzZXRfdGhyZWFkX2NvdW50IiwgJmNvdW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zZXRfdGhyZWFkX2NvdW50KHNlbGYtPmRiX2VudiwgY291bnQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF90aHJlYWRfY291bnQoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgY291bnQ7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF90aHJlYWRfY291bnQoc2VsZi0+ZGJfZW52LCAmY291bnQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoY291bnQpOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9jYWNoZXNpemUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewpAQCAtNDIyNyw2ICs1MTcwLDI2IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9jYWNoZXNpemUoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZ2J5dGVzLCBieXRlczsKKyAgICBpbnQgbmNhY2hlOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfY2FjaGVzaXplKHNlbGYtPmRiX2VudiwgJmdieXRlcywgJmJ5dGVzLCAmbmNhY2hlKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgZ2J5dGVzLCBieXRlcywgbmNhY2hlKTsKK30KKyNlbmRpZgorCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9mbGFncyhEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC00MjQ1LDYgKzUyMDgsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2ZsYWdzKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGZsYWdzOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfZmxhZ3Moc2VsZi0+ZGJfZW52LCAmZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcoZmxhZ3MpOworfQorI2VuZGlmCiAKICNpZiAoREJWRVIgPj0gNDcpCiBzdGF0aWMgUHlPYmplY3QqCkBAIC00MjYzLDggKzUyNDIsMTY5IEBACiAgICAgUkVUVVJOX0lGX0VSUigpOwogICAgIFJFVFVSTl9OT05FKCk7CiB9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2xvZ19nZXRfY29uZmlnKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyLCBmbGFnLCBvbm9mZjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpsb2dfZ2V0X2NvbmZpZyIsICZmbGFnKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5sb2dfZ2V0X2NvbmZpZyhzZWxmLT5kYl9lbnYsIGZsYWcsICZvbm9mZik7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhvbm9mZik7Cit9CiAjZW5kaWYgLyogREJWRVIgPj0gNDcgKi8KIAorI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X3NldF9tYXgoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IHZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm11dGV4X3NldF9tYXgiLCAmdmFsdWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfc2V0X21heChzZWxmLT5kYl9lbnYsIHZhbHVlKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X2dldF9tYXgoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgdmFsdWU7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm11dGV4X2dldF9tYXgoc2VsZi0+ZGJfZW52LCAmdmFsdWUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHZhbHVlKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfc2V0X2FsaWduKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBhbGlnbjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTptdXRleF9zZXRfYWxpZ24iLCAmYWxpZ24pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfc2V0X2FsaWduKHNlbGYtPmRiX2VudiwgYWxpZ24pOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfZ2V0X2FsaWduKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGFsaWduOworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9nZXRfYWxpZ24oc2VsZi0+ZGJfZW52LCAmYWxpZ24pOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGFsaWduKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfc2V0X2luY3JlbWVudChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgaW5jcmVtZW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm11dGV4X3NldF9pbmNyZW1lbnQiLCAmaW5jcmVtZW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm11dGV4X3NldF9pbmNyZW1lbnQoc2VsZi0+ZGJfZW52LCBpbmNyZW1lbnQpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbXV0ZXhfZ2V0X2luY3JlbWVudChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBpbmNyZW1lbnQ7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPm11dGV4X2dldF9pbmNyZW1lbnQoc2VsZi0+ZGJfZW52LCAmaW5jcmVtZW50KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworCisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhpbmNyZW1lbnQpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9zZXRfdGFzX3NwaW5zKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCB0YXNfc3BpbnM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bXV0ZXhfc2V0X3Rhc19zcGlucyIsICZ0YXNfc3BpbnMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfc2V0X3Rhc19zcGlucyhzZWxmLT5kYl9lbnYsIHRhc19zcGlucyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9nZXRfdGFzX3NwaW5zKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IHRhc19zcGluczsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfZ2V0X3Rhc19zcGlucyhzZWxmLT5kYl9lbnYsICZ0YXNfc3BpbnMpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHRhc19zcGlucyk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2RhdGFfZGlyKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQyODMsNiArNTQyMyw3OSBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfZGF0YV9kaXJzKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgUHlPYmplY3QgKnR1cGxlOworICAgIFB5T2JqZWN0ICppdGVtOworICAgIGNvbnN0IGNoYXIgKipkaXJwcDsKKyAgICBpbnQgc2l6ZSwgaTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2RhdGFfZGlycyhzZWxmLT5kYl9lbnYsICZkaXJwcCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIC8qCisgICAgKiogQ2FsY3VsYXRlIHNpemUuIFB5dGhvbiBDIEFQSQorICAgICoqIGFjdHVhbGx5IGFsbG93cyBmb3IgdHVwbGUgcmVzaXppbmcsCisgICAgKiogYnV0IHRoaXMgaXMgc2ltcGxlIGVub3VnaC4KKyAgICAqLworICAgIGZvciAoc2l6ZT0wOyAqKGRpcnBwK3NpemUpIDsgc2l6ZSsrKTsKKworICAgIHR1cGxlID0gUHlUdXBsZV9OZXcoc2l6ZSk7CisgICAgaWYgKCF0dXBsZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGk9MDsgaTxzaXplOyBpKyspIHsKKyAgICAgICAgaXRlbSA9IFB5Qnl0ZXNfRnJvbVN0cmluZyAoKihkaXJwcCtpKSk7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICB0dXBsZSA9IE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cGxlLCBpLCBpdGVtKTsKKyAgICB9CisgICAgcmV0dXJuIHR1cGxlOworfQorI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDQpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9zZXRfbGdfZmlsZW1vZGUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnIsIGZpbGVtb2RlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldF9sZ19maWxlbW9kZSIsICZmaWxlbW9kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+c2V0X2xnX2ZpbGVtb2RlKHNlbGYtPmRiX2VudiwgZmlsZW1vZGUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sZ19maWxlbW9kZShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyLCBmaWxlbW9kZTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xnX2ZpbGVtb2RlKHNlbGYtPmRiX2VudiwgJmZpbGVtb2RlKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGZpbGVtb2RlKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfbGdfYnNpemUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQpAQCAtNDMwMCw2ICs1NTEzLDIyIEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sZ19ic2l6ZShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsZ19ic2l6ZTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xnX2JzaXplKHNlbGYtPmRiX2VudiwgJmxnX2JzaXplKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxnX2JzaXplKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9zZXRfbGdfZGlyKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQzMTgsNiArNTU0NywyMyBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbGdfZGlyKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgY29uc3QgY2hhciAqZGlycDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X2xnX2RpcihzZWxmLT5kYl9lbnYsICZkaXJwKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKGRpcnApOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9sZ19tYXgoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewpAQCAtNDM2OCw2ICs1NjE0LDU1IEBACiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAorI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sZ19yZWdpb25tYXgoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbGdfcmVnaW9ubWF4OworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGdfcmVnaW9ubWF4KHNlbGYtPmRiX2VudiwgJmxnX3JlZ2lvbm1heCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhsZ19yZWdpb25tYXgpOworfQorI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9zZXRfbGtfcGFydGl0aW9ucyhEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVyciwgbGtfcGFydGl0aW9uczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpzZXRfbGtfcGFydGl0aW9ucyIsICZsa19wYXJ0aXRpb25zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zZXRfbGtfcGFydGl0aW9ucyhzZWxmLT5kYl9lbnYsIGxrX3BhcnRpdGlvbnMpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9sa19wYXJ0aXRpb25zKERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IGxrX3BhcnRpdGlvbnM7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sa19wYXJ0aXRpb25zKHNlbGYtPmRiX2VudiwgJmxrX3BhcnRpdGlvbnMpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBOVU1CRVJfRnJvbUxvbmcobGtfcGFydGl0aW9ucyk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2xrX2RldGVjdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC00Mzg1LDYgKzU2ODAsMjMgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xrX2RldGVjdChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsa19kZXRlY3Q7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sa19kZXRlY3Qoc2VsZi0+ZGJfZW52LCAmbGtfZGV0ZWN0KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxrX2RldGVjdCk7Cit9CisjZW5kaWYKKwogCiAjaWYgKERCVkVSIDwgNDUpCiBzdGF0aWMgUHlPYmplY3QqCkBAIC00NDIyLDYgKzU3MzQsMjIgQEAKICAgICBSRVRVUk5fTk9ORSgpOwogfQogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X2xrX21heF9sb2NrcyhEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVfaW50MzJfdCBsa19tYXg7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9sa19tYXhfbG9ja3Moc2VsZi0+ZGJfZW52LCAmbGtfbWF4KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxrX21heCk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2xrX21heF9sb2NrZXJzKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQ0MzksNiArNTc2NywyMiBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbGtfbWF4X2xvY2tlcnMoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbGtfbWF4OworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGtfbWF4X2xvY2tlcnMoc2VsZi0+ZGJfZW52LCAmbGtfbWF4KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxrX21heCk7Cit9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X2xrX21heF9vYmplY3RzKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTQ0NTYsNiArNTgwMCw0MCBAQAogICAgIFJFVFVSTl9OT05FKCk7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbGtfbWF4X29iamVjdHMoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgbGtfbWF4OworCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5nZXRfbGtfbWF4X29iamVjdHMoc2VsZi0+ZGJfZW52LCAmbGtfbWF4KTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGxrX21heCk7Cit9CisjZW5kaWYKKworI2lmIChEQlZFUiA+PSA0MikKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2dldF9tcF9tbWFwc2l6ZShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHNpemVfdCBtbWFwc2l6ZTsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X21wX21tYXBzaXplKHNlbGYtPmRiX2VudiwgJm1tYXBzaXplKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKG1tYXBzaXplKTsKK30KKyNlbmRpZgorCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9tcF9tbWFwc2l6ZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC00NDkyLDYgKzU4NzAsMjYgQEAKIH0KIAogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X3RtcF9kaXIoREJFbnZPYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBjb25zdCBjaGFyICpkaXJwcDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3RtcF9kaXIoc2VsZi0+ZGJfZW52LCAmZGlycHApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKGRpcnBwKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3R4bl9yZWNvdmVyKERCRW52T2JqZWN0KiBzZWxmKQogewpAQCAtNDUwMSw3ICs1ODk5LDExIEBACiAgICAgREJUeG5PYmplY3QgKnR4bjsKICNkZWZpbmUgUFJFUExJU1RfTEVOIDE2CiAgICAgREJfUFJFUExJU1QgcHJlcGxpc3RbUFJFUExJU1RfTEVOXTsKKyNpZiAoREJWRVIgPCA0OCkKICAgICBsb25nIHJldHA7CisjZWxzZQorICAgIHVfaW50MzJfdCByZXRwOworI2VuZGlmCiAKICAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKIApAQCAtNDUyMiwxMiArNTkyNCwxMiBAQAogICAgICAgICBmbGFncz1EQl9ORVhUOyAgLyogUHJlcGFyZSBmb3IgbmV4dCBsb29wIHBhc3MgKi8KICAgICAgICAgZm9yIChpPTA7IGk8cmV0cDsgaSsrKSB7CiAgICAgICAgICAgICBnaWQ9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKShwcmVwbGlzdFtpXS5naWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQl9YSUREQVRBU0laRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCX0dJRF9TSVpFKTsKICAgICAgICAgICAgIGlmICghZ2lkKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdHhuPW5ld0RCVHhuT2JqZWN0KHNlbGYsIE5VTEwsIHByZXBsaXN0W2ldLnR4biwgZmxhZ3MpOworICAgICAgICAgICAgdHhuPW5ld0RCVHhuT2JqZWN0KHNlbGYsIE5VTEwsIHByZXBsaXN0W2ldLnR4biwgMCk7CiAgICAgICAgICAgICBpZiAoIXR4bikgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2lkKTsKQEAgLTQ2MDIsNiArNjAwNCwyNCBAQAogfQogCiAKKyNpZiAoREJWRVIgPj0gNDIpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfdHhfbWF4KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdV9pbnQzMl90IG1heDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X3R4X21heChzZWxmLT5kYl9lbnYsICZtYXgpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOworfQorI2VuZGlmCisKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X3R4X21heChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00NjExLDEyICs2MDMxLDMxIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOwogCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOwogICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+c2V0X3R4X21heChzZWxmLT5kYl9lbnYsIG1heCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKICAgICBSRVRVUk5fSUZfRVJSKCk7CiAgICAgUkVUVVJOX05PTkUoKTsKIH0KIAogCisjaWYgKERCVkVSID49IDQyKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X3R4X3RpbWVzdGFtcChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIHRpbWVfdCB0aW1lc3RhbXA7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF90eF90aW1lc3RhbXAoc2VsZi0+ZGJfZW52LCAmdGltZXN0YW1wKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKHRpbWVzdGFtcCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogREJFbnZfc2V0X3R4X3RpbWVzdGFtcChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00NjI4LDcgKzYwNjcsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKICAgICB0aW1lc3RhbXAgPSAodGltZV90KXN0YW1wOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKICAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF90eF90aW1lc3RhbXAoc2VsZi0+ZGJfZW52LCAmdGltZXN0YW1wKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOwogICAgIFJFVFVSTl9JRl9FUlIoKTsKICAgICBSRVRVUk5fTk9ORSgpOwogfQpAQCAtNDcyMiw2ICs2MTYzLDI2IEBACiAKICNpZiAoREJWRVIgPj0gNDQpCiBzdGF0aWMgUHlPYmplY3QqCitEQkVudl9maWxlaWRfcmVzZXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgY2hhciAqZmlsZTsKKyAgICB1X2ludDMyX3QgZmxhZ3MgPSAwOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmaWxlIiwgImZsYWdzIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ6fGk6ZmlsZWlkX3Jlc2V0Iiwga3duYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5maWxlaWRfcmVzZXQoc2VsZi0+ZGJfZW52LCBmaWxlLCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgogREJFbnZfbHNuX3Jlc2V0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBpbnQgZXJyOwpAQCAtNDc0Miw2ICs2MjAzLDMwIEBACiB9CiAjZW5kaWYgLyogREJWRVIgPj0gNC40ICovCiAKKworI2lmIChEQlZFUiA+PSA0MykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6c3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zdGF0X3ByaW50KHNlbGYtPmRiX2VudiwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl9sb2dfc3RhdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00Nzc3LDkgKzYyNjIsNiBAQAogICAgIE1BS0VfRU5UUlkobGdfc2l6ZSk7CiAgICAgTUFLRV9FTlRSWShyZWNvcmQpOwogI2VuZGlmCi0jaWYgKERCVkVSIDwgNDEpCi0gICAgTUFLRV9FTlRSWShsZ19tYXgpOwotI2VuZGlmCiAgICAgTUFLRV9FTlRSWSh3X21ieXRlcyk7CiAgICAgTUFLRV9FTlRSWSh3X2J5dGVzKTsKICAgICBNQUtFX0VOVFJZKHdjX21ieXRlcyk7CkBAIC00ODA2LDYgKzYyODgsMjkgQEAKIH0gLyogREJFbnZfbG9nX3N0YXQgKi8KIAogCisjaWYgKERCVkVSID49IDQzKQorc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbG9nX3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6bG9nX3N0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bG9nX3N0YXRfcHJpbnQoc2VsZi0+ZGJfZW52LCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKyNlbmRpZgorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X2xvY2tfc3RhdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC00ODMyLDEzICs2MzM3LDggQEAKIAogI2RlZmluZSBNQUtFX0VOVFJZKG5hbWUpICBfYWRkSW50VG9EaWN0KGQsICNuYW1lLCBzcC0+c3RfIyNuYW1lKQogCi0jaWYgKERCVkVSIDwgNDEpCi0gICAgTUFLRV9FTlRSWShsYXN0aWQpOwotI2VuZGlmCi0jaWYgKERCVkVSID49NDEpCiAgICAgTUFLRV9FTlRSWShpZCk7CiAgICAgTUFLRV9FTlRSWShjdXJfbWF4aWQpOwotI2VuZGlmCiAgICAgTUFLRV9FTlRSWShubW9kZXMpOwogICAgIE1BS0VfRU5UUlkobWF4bG9ja3MpOwogICAgIE1BS0VfRU5UUlkobWF4bG9ja2Vycyk7CkBAIC00ODYzLDEwICs2MzYzLDggQEAKICAgICBNQUtFX0VOVFJZKGxvY2tfd2FpdCk7CiAjZW5kaWYKICAgICBNQUtFX0VOVFJZKG5kZWFkbG9ja3MpOwotI2lmIChEQlZFUiA+PSA0MSkKICAgICBNQUtFX0VOVFJZKGxvY2t0aW1lb3V0KTsKICAgICBNQUtFX0VOVFJZKHR4bnRpbWVvdXQpOwotI2VuZGlmCiAgICAgTUFLRV9FTlRSWShubG9ja3RpbWVvdXRzKTsKICAgICBNQUtFX0VOVFJZKG50eG50aW1lb3V0cyk7CiAjaWYgKERCVkVSID49IDQ2KQpAQCAtNDg5Miw2ICs2MzkwLDQ1IEBACiAgICAgcmV0dXJuIGQ7CiB9CiAKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9sb2NrX3N0YXRfcHJpbnQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IGZsYWdzPTA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6bG9ja19zdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmxvY2tfc3RhdF9wcmludChzZWxmLT5kYl9lbnYsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfbG9nX2N1cnNvcihEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIERCX0xPR0MqIGRibG9nYzsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bG9nX2N1cnNvcihzZWxmLT5kYl9lbnYsICZkYmxvZ2MsIDApOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIHJldHVybiAoUHlPYmplY3QqKSBuZXdEQkxvZ0N1cnNvck9iamVjdChkYmxvZ2MsIHNlbGYpOworfQorCisKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X2xvZ19mbHVzaChEQkVudk9iamVjdCogc2VsZikKIHsKQEAgLTQ5MDgsNiArNjQ0NSw4NiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCitEQkVudl9sb2dfZmlsZShEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBEQl9MU04gbHNuID0gezAsIDB9OworICAgIGludCBzaXplID0gMjA7CisgICAgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiKGlpKTpsb2dfZmlsZSIsICZsc24uZmlsZSwgJmxzbi5vZmZzZXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgZG8geworICAgICAgICBuYW1lID0gbWFsbG9jKHNpemUpOworICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bG9nX2ZpbGUoc2VsZi0+ZGJfZW52LCAmbHNuLCBuYW1lLCBzaXplKTsKKyAgICAgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICAgICAgaWYgKGVyciA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgICAgICBzaXplICo9IDI7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7CisgICAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VSUigpOworICAgICAgICAgICAgYXNzZXJ0KDApOyAgLyogVW5yZWFjaGFibGUuLi4gc3VwcG9zZWx5ICovCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorLyoKKyoqIElmIHRoZSBmaW5hbCBidWZmZXIgd2UgdHJ5IGlzIHRvbyBzbWFsbCwgd2Ugd2lsbAorKiogZ2V0IHRoaXMgZXhjZXB0aW9uOgorKiogREJJbnZhbGlkQXJnRXJyb3I6CisqKiAgICAoMjIsICdJbnZhbGlkIGFyZ3VtZW50IC0tIERCX0VOVi0+bG9nX2ZpbGU6IG5hbWUgYnVmZmVyIGlzIHRvbyBzaG9ydCcpCisqLworICAgIH0gd2hpbGUgKChlcnIgPT0gRUlOVkFMKSAmJiAoc2l6ZTwoMTw8MTcpKSk7CisKKyAgICBSRVRVUk5fSUZfRVJSKCk7ICAvKiBNYXliZSB0aGUgc2l6ZSBpcyBub3QgdGhlIHByb2JsZW0gKi8KKworICAgIHJldHZhbCA9IFB5X0J1aWxkVmFsdWUoInMiLCBuYW1lKTsKKyAgICBmcmVlKG5hbWUpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKworI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X2xvZ19wcmludGYoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBlcnI7CisgICAgY2hhciAqc3RyaW5nOworICAgIFB5T2JqZWN0ICp0eG5vYmogPSBOVUxMOworICAgIERCX1RYTiAqdHhuID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyJzdHJpbmciLCAidHhuIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xPOmxvZ19wcmludGYiLCBrd25hbWVzLAorICAgICAgICAgICAgICAgICZzdHJpbmcsICZ0eG5vYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKCFjaGVja1R4bk9iaih0eG5vYmosICZ0eG4pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgKiogRG8gbm90IHVzZSB0aGUgZm9ybWF0IHN0cmluZyBkaXJlY3RseSwgdG8gYXZvaWQgYXR0YWNrcy4KKyAgICAqLworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmxvZ19wcmludGYoc2VsZi0+ZGJfZW52LCB0eG4sICIlcyIsIHN0cmluZyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKworc3RhdGljIFB5T2JqZWN0KgogREJFbnZfbG9nX2FyY2hpdmUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBmbGFncz0wOwpAQCAtNDk1NSw2ICs2NTcyLDk5IEBACiB9CiAKIAorI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X211dGV4X3N0YXQoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgREJfTVVURVhfU1RBVCogc3RhdHAgPSBOVUxMOworICAgIFB5T2JqZWN0KiBkID0gTlVMTDsKKyAgICB1X2ludDMyX3QgZmxhZ3MgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTptdXRleF9zdGF0IiwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5tdXRleF9zdGF0KHNlbGYtPmRiX2VudiwgJnN0YXRwLCBmbGFncyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICAvKiBUdXJuIHRoZSBzdGF0IHN0cnVjdHVyZSBpbnRvIGEgZGljdGlvbmFyeSAqLworICAgIGQgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICBpZiAoc3RhdHApCisgICAgICAgICAgICBmcmVlKHN0YXRwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZGVmaW5lIE1BS0VfRU5UUlkobmFtZSkgIF9hZGRJbnRUb0RpY3QoZCwgI25hbWUsIHN0YXRwLT5zdF8jI25hbWUpCisKKyAgICBNQUtFX0VOVFJZKG11dGV4X2FsaWduKTsKKyAgICBNQUtFX0VOVFJZKG11dGV4X3Rhc19zcGlucyk7CisgICAgTUFLRV9FTlRSWShtdXRleF9jbnQpOworICAgIE1BS0VfRU5UUlkobXV0ZXhfZnJlZSk7CisgICAgTUFLRV9FTlRSWShtdXRleF9pbnVzZSk7CisgICAgTUFLRV9FTlRSWShtdXRleF9pbnVzZV9tYXgpOworICAgIE1BS0VfRU5UUlkocmVnc2l6ZSk7CisgICAgTUFLRV9FTlRSWShyZWdpb25fd2FpdCk7CisgICAgTUFLRV9FTlRSWShyZWdpb25fbm93YWl0KTsKKworI3VuZGVmIE1BS0VfRU5UUlkKKyAgICBmcmVlKHN0YXRwKTsKKyAgICByZXR1cm4gZDsKK30KKyNlbmRpZgorCisKKyNpZiAoREJWRVIgPj0gNDQpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9tdXRleF9zdGF0X3ByaW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOm11dGV4X3N0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+bXV0ZXhfc3RhdF9wcmludChzZWxmLT5kYl9lbnYsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKKworI2lmIChEQlZFUiA+PSA0MykKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3R4bl9zdGF0X3ByaW50KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIHN0YXRpYyBjaGFyKiBrd25hbWVzW10gPSB7ICJmbGFncyIsIE5VTEwgfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpOnN0YXRfcHJpbnQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnR4bl9zdGF0X3ByaW50KHNlbGYtPmRiX2VudiwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgUHlPYmplY3QqCiBEQkVudl90eG5fc3RhdChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CkBAIC01MDQ3LDYgKzY3NTcsNyBAQAogfQogCiAKKyNpZiAoREJWRVIgPCA0OCkKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF9ycGNfc2VydmVyKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKQEAgLTUwNjgsNiArNjc3OSw4NCBAQAogICAgIFJFVFVSTl9JRl9FUlIoKTsKICAgICBSRVRVUk5fTk9ORSgpOwogfQorI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9zZXRfbXBfbWF4X29wZW5mZChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgbWF4b3BlbmZkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldF9tcF9tYXhfb3BlbmZkIiwgJm1heG9wZW5mZCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPnNldF9tcF9tYXhfb3BlbmZkKHNlbGYtPmRiX2VudiwgbWF4b3BlbmZkKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9nZXRfbXBfbWF4X29wZW5mZChEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBtYXhvcGVuZmQ7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5kYl9lbnYtPmdldF9tcF9tYXhfb3BlbmZkKHNlbGYtPmRiX2VudiwgJm1heG9wZW5mZCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgcmV0dXJuIE5VTUJFUl9Gcm9tTG9uZyhtYXhvcGVuZmQpOworfQorCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3NldF9tcF9tYXhfd3JpdGUoREJFbnZPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCBlcnI7CisgICAgaW50IG1heHdyaXRlLCBtYXh3cml0ZV9zbGVlcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0X21wX21heF93cml0ZSIsICZtYXh3cml0ZSwKKyAgICAgICAgICAgICAgICAmbWF4d3JpdGVfc2xlZXApKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5zZXRfbXBfbWF4X3dyaXRlKHNlbGYtPmRiX2VudiwgbWF4d3JpdGUsCisgICAgICAgICAgICBtYXh3cml0ZV9zbGVlcCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisgICAgUkVUVVJOX05PTkUoKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorREJFbnZfZ2V0X21wX21heF93cml0ZShEQkVudk9iamVjdCogc2VsZikKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBtYXh3cml0ZTsKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgZGJfdGltZW91dF90IG1heHdyaXRlX3NsZWVwOworI2Vsc2UKKyAgICBpbnQgbWF4d3JpdGVfc2xlZXA7CisjZW5kaWYKKworICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+Z2V0X21wX21heF93cml0ZShzZWxmLT5kYl9lbnYsICZtYXh3cml0ZSwKKyAgICAgICAgICAgICZtYXh3cml0ZV9zbGVlcCk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1heHdyaXRlLCAoaW50KW1heHdyaXRlX3NsZWVwKTsKK30KKyNlbmRpZgorCiAKIHN0YXRpYyBQeU9iamVjdCoKIERCRW52X3NldF92ZXJib3NlKERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTU2MjUsNiArNzQxNCwxNzUgQEAKIH0KICNlbmRpZgogCisKKyNpZiAoREJWRVIgPj0gNDcpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9yZXBfc2V0X2Nsb2Nrc2tldyhEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgZmFzdCwgc2xvdzsKKworI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDQwMDAwKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJJSTpyZXBfc2V0X2Nsb2Nrc2tldyIsICZmYXN0LCAmc2xvdykpCisgICAgICAgIHJldHVybiBOVUxMOworI2Vsc2UKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6cmVwX3NldF9jbG9ja3NrZXciLCAmZmFzdCwgJnNsb3cpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5yZXBfc2V0X2Nsb2Nrc2tldyhzZWxmLT5kYl9lbnYsIGZhc3QsIHNsb3cpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3JlcF9nZXRfY2xvY2tza2V3KERCRW52T2JqZWN0KiBzZWxmKQoreworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IGZhc3QsIHNsb3c7CisKKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5yZXBfZ2V0X2Nsb2Nrc2tldyhzZWxmLT5kYl9lbnYsICZmYXN0LCAmc2xvdyk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKyAgICBSRVRVUk5fSUZfRVJSKCk7CisjaWYgKFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNDAwMDApCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihJSSkiLCBmYXN0LCBzbG93KTsKKyNlbHNlCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmYXN0LCBzbG93KTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDMpCitzdGF0aWMgUHlPYmplY3QqCitEQkVudl9yZXBfc3RhdF9wcmludChEQkVudk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpyZXBfc3RhdF9wcmludCIsCisgICAgICAgICAgICAgICAga3duYW1lcywgJmZsYWdzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDSEVDS19FTlZfTk9UX0NMT1NFRChzZWxmKTsKKyAgICBNWURCX0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgZXJyID0gc2VsZi0+ZGJfZW52LT5yZXBfc3RhdF9wcmludChzZWxmLT5kYl9lbnYsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyAgICBSRVRVUk5fTk9ORSgpOworfQorI2VuZGlmCisKK3N0YXRpYyBQeU9iamVjdCoKK0RCRW52X3JlcF9zdGF0KERCRW52T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGludCBmbGFncz0wOworICAgIERCX1JFUF9TVEFUICpzdGF0cDsKKyAgICBQeU9iamVjdCAqc3RhdHM7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgImZsYWdzIiwgTlVMTCB9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6cmVwX3N0YXQiLAorICAgICAgICAgICAgICAgIGt3bmFtZXMsICZmbGFncykpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfRU5WX05PVF9DTE9TRUQoc2VsZik7CisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPmRiX2Vudi0+cmVwX3N0YXQoc2VsZi0+ZGJfZW52LCAmc3RhdHAsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworICAgIFJFVFVSTl9JRl9FUlIoKTsKKworICAgIHN0YXRzPVB5RGljdF9OZXcoKTsKKyAgICBpZiAoc3RhdHMgPT0gTlVMTCkgeworICAgICAgICBmcmVlKHN0YXRwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZGVmaW5lIE1BS0VfRU5UUlkobmFtZSkgIF9hZGRJbnRUb0RpY3Qoc3RhdHMsICNuYW1lLCBzdGF0cC0+c3RfIyNuYW1lKQorI2RlZmluZSBNQUtFX0RCX0xTTl9FTlRSWShuYW1lKSBfYWRkREJfbHNuVG9EaWN0KHN0YXRzICwgI25hbWUsIHN0YXRwLT5zdF8jI25hbWUpCisKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgTUFLRV9FTlRSWShidWxrX2ZpbGxzKTsKKyAgICBNQUtFX0VOVFJZKGJ1bGtfb3ZlcmZsb3dzKTsKKyAgICBNQUtFX0VOVFJZKGJ1bGtfcmVjb3Jkcyk7CisgICAgTUFLRV9FTlRSWShidWxrX3RyYW5zZmVycyk7CisgICAgTUFLRV9FTlRSWShjbGllbnRfcmVyZXF1ZXN0cyk7CisgICAgTUFLRV9FTlRSWShjbGllbnRfc3ZjX21pc3MpOworICAgIE1BS0VfRU5UUlkoY2xpZW50X3N2Y19yZXEpOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShkdXBtYXN0ZXJzKTsKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgTUFLRV9FTlRSWShlZ2VuKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX252b3Rlcyk7CisgICAgTUFLRV9FTlRSWShzdGFydHVwX2NvbXBsZXRlKTsKKyAgICBNQUtFX0VOVFJZKHBnX2R1cGxpY2F0ZWQpOworICAgIE1BS0VfRU5UUlkocGdfcmVjb3Jkcyk7CisgICAgTUFLRV9FTlRSWShwZ19yZXF1ZXN0ZWQpOworICAgIE1BS0VfRU5UUlkobmV4dF9wZyk7CisgICAgTUFLRV9FTlRSWSh3YWl0aW5nX3BnKTsKKyNlbmRpZgorICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fY3VyX3dpbm5lcik7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl9nZW4pOworICAgIE1BS0VfREJfTFNOX0VOVFJZKGVsZWN0aW9uX2xzbik7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl9uc2l0ZXMpOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fcHJpb3JpdHkpOworI2lmIChEQlZFUiA+PSA0NCkKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX3NlYyk7CisgICAgTUFLRV9FTlRSWShlbGVjdGlvbl91c2VjKTsKKyNlbmRpZgorICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fc3RhdHVzKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uX3RpZWJyZWFrZXIpOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25fdm90ZXMpOworICAgIE1BS0VfRU5UUlkoZWxlY3Rpb25zKTsKKyAgICBNQUtFX0VOVFJZKGVsZWN0aW9uc193b24pOworICAgIE1BS0VfRU5UUlkoZW52X2lkKTsKKyAgICBNQUtFX0VOVFJZKGVudl9wcmlvcml0eSk7CisgICAgTUFLRV9FTlRSWShnZW4pOworICAgIE1BS0VfRU5UUlkobG9nX2R1cGxpY2F0ZWQpOworICAgIE1BS0VfRU5UUlkobG9nX3F1ZXVlZCk7CisgICAgTUFLRV9FTlRSWShsb2dfcXVldWVkX21heCk7CisgICAgTUFLRV9FTlRSWShsb2dfcXVldWVkX3RvdGFsKTsKKyAgICBNQUtFX0VOVFJZKGxvZ19yZWNvcmRzKTsKKyAgICBNQUtFX0VOVFJZKGxvZ19yZXF1ZXN0ZWQpOworICAgIE1BS0VfRU5UUlkobWFzdGVyKTsKKyAgICBNQUtFX0VOVFJZKG1hc3Rlcl9jaGFuZ2VzKTsKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgTUFLRV9FTlRSWShtYXhfbGVhc2Vfc2VjKTsKKyAgICBNQUtFX0VOVFJZKG1heF9sZWFzZV91c2VjKTsKKyAgICBNQUtFX0RCX0xTTl9FTlRSWShtYXhfcGVybV9sc24pOworI2VuZGlmCisgICAgTUFLRV9FTlRSWShtc2dzX2JhZGdlbik7CisgICAgTUFLRV9FTlRSWShtc2dzX3Byb2Nlc3NlZCk7CisgICAgTUFLRV9FTlRSWShtc2dzX3JlY292ZXIpOworICAgIE1BS0VfRU5UUlkobXNnc19zZW5kX2ZhaWx1cmVzKTsKKyAgICBNQUtFX0VOVFJZKG1zZ3Nfc2VudCk7CisgICAgTUFLRV9FTlRSWShuZXdzaXRlcyk7CisgICAgTUFLRV9EQl9MU05fRU5UUlkobmV4dF9sc24pOworICAgIE1BS0VfRU5UUlkobnNpdGVzKTsKKyAgICBNQUtFX0VOVFJZKG50aHJvdHRsZXMpOworICAgIE1BS0VfRU5UUlkob3V0ZGF0ZWQpOworI2lmIChEQlZFUiA+PSA0NikKKyAgICBNQUtFX0VOVFJZKHN0YXJ0c3luY19kZWxheWVkKTsKKyNlbmRpZgorICAgIE1BS0VfRU5UUlkoc3RhdHVzKTsKKyAgICBNQUtFX0VOVFJZKHR4bnNfYXBwbGllZCk7CisgICAgTUFLRV9EQl9MU05fRU5UUlkod2FpdGluZ19sc24pOworCisjdW5kZWYgTUFLRV9EQl9MU05fRU5UUlkKKyN1bmRlZiBNQUtFX0VOVFJZCisKKyAgICBmcmVlKHN0YXRwKTsKKyAgICByZXR1cm4gc3RhdHM7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogUkVQTElDQVRJT04gTUVUSE9EUzogUmVwbGljYXRpb24gTWFuYWdlciAqLwogCkBAIC01OTQ5LDkgKzc5MDcsOSBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6cHJlcGFyZSIsICZnaWQsICZnaWRfc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGdpZF9zaXplICE9IERCX1hJRERBVEFTSVpFKSB7CisgICAgaWYgKGdpZF9zaXplICE9IERCX0dJRF9TSVpFKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZ2lkIG11c3QgYmUgREJfWElEREFUQVNJWkUgYnl0ZXMgbG9uZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgImdpZCBtdXN0IGJlIERCX0dJRF9TSVpFIGJ5dGVzIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC02MDY2LDYgKzgwMjQsNzYgQEAKICAgICByZXR1cm4gTlVNQkVSX0Zyb21Mb25nKGlkKTsKIH0KIAorCitzdGF0aWMgUHlPYmplY3QqCitEQlR4bl9zZXRfdGltZW91dChEQlR4bk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICB1X2ludDMyX3QgZmxhZ3M9MDsKKyAgICB1X2ludDMyX3QgdGltZW91dCA9IDA7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsgInRpbWVvdXQiLCAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpaTpzZXRfdGltZW91dCIsIGt3bmFtZXMsCisgICAgICAgICAgICAgICAgJnRpbWVvdXQsICZmbGFncykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPnR4bi0+c2V0X3RpbWVvdXQoc2VsZi0+dHhuLCAoZGJfdGltZW91dF90KXRpbWVvdXQsIGZsYWdzKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKKworI2lmIChEQlZFUiA+PSA0NCkKK3N0YXRpYyBQeU9iamVjdCoKK0RCVHhuX3NldF9uYW1lKERCVHhuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgZXJyOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6c2V0X25hbWUiLCAmbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPnR4bi0+c2V0X25hbWUoc2VsZi0+dHhuLCBuYW1lKTsKKyAgICBNWURCX0VORF9BTExPV19USFJFQURTOworCisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisjZW5kaWYKKworCisjaWYgKERCVkVSID49IDQ0KQorc3RhdGljIFB5T2JqZWN0KgorREJUeG5fZ2V0X25hbWUoREJUeG5PYmplY3QqIHNlbGYpCit7CisgICAgaW50IGVycjsKKyAgICBjb25zdCBjaGFyICpuYW1lOworCisgICAgTVlEQl9CRUdJTl9BTExPV19USFJFQURTOworICAgIGVyciA9IHNlbGYtPnR4bi0+Z2V0X25hbWUoc2VsZi0+dHhuLCAmbmFtZSk7CisgICAgTVlEQl9FTkRfQUxMT1dfVEhSRUFEUzsKKworICAgIFJFVFVSTl9JRl9FUlIoKTsKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwKQorICAgIGlmICghbmFtZSkgeworICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7CisgICAgfQorICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKG5hbWUpOworI2Vsc2UKKyAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKyAgICB9CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKG5hbWUpOworI2VuZGlmCit9CisjZW5kaWYKKworCiAjaWYgKERCVkVSID49IDQzKQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBEQlNlcXVlbmNlIG1ldGhvZHMgKi8KQEAgLTYxNjksMTIgKzgxOTcsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotREJTZXF1ZW5jZV9pbml0X3ZhbHVlKERCU2VxdWVuY2VPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorREJTZXF1ZW5jZV9pbml0aWFsX3ZhbHVlKERCU2VxdWVuY2VPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBlcnI7CiAgICAgUFlfTE9OR19MT05HIHZhbHVlOwogICAgIGRiX3NlcV90IHZhbHVlMjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTDppbml0X3ZhbHVlIiwgJnZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTDppbml0aWFsX3ZhbHVlIiwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfU0VRVUVOQ0VfTk9UX0NMT1NFRChzZWxmKQogCkBAIC02MzUyLDYgKzgzODAsMjkgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKExMKSIsIG1pbiwgbWF4KTsKIH0KIAorCitzdGF0aWMgUHlPYmplY3QqCitEQlNlcXVlbmNlX3N0YXRfcHJpbnQoREJTZXF1ZW5jZU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGVycjsKKyAgICBpbnQgZmxhZ3M9MDsKKyAgICBzdGF0aWMgY2hhcioga3duYW1lc1tdID0geyAiZmxhZ3MiLCBOVUxMIH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpzdGF0X3ByaW50IiwKKyAgICAgICAgICAgICAgICBrd25hbWVzLCAmZmxhZ3MpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQ0hFQ0tfU0VRVUVOQ0VfTk9UX0NMT1NFRChzZWxmKTsKKworICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKKyAgICBlcnIgPSBzZWxmLT5zZXF1ZW5jZS0+c3RhdF9wcmludChzZWxmLT5zZXF1ZW5jZSwgZmxhZ3MpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CisgICAgUkVUVVJOX0lGX0VSUigpOworICAgIFJFVFVSTl9OT05FKCk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKIERCU2VxdWVuY2Vfc3RhdChEQlNlcXVlbmNlT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKQEAgLTY0MDMsMTEgKzg0NTQsMTggQEAKICAgICB7ImFwcGVuZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9hcHBlbmQsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiYXNzb2NpYXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2Fzc29jaWF0ZSwgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfY2xvc2UsICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQ3KQorICAgIHsiY29tcGFjdCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2NvbXBhY3QsICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjZW5kaWYKICAgICB7ImNvbnN1bWUiLCAgICAgICAgIChQeUNGdW5jdGlvbilEQl9jb25zdW1lLCAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiY29uc3VtZV93YWl0IiwgICAgKFB5Q0Z1bmN0aW9uKURCX2NvbnN1bWVfd2FpdCwgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJjdXJzb3IiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfY3Vyc29yLCAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7ImRlbGV0ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9kZWxldGUsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZmQiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2ZkLCAgICAgICAgICAgICBNRVRIX05PQVJHU30sCisjaWYgKERCVkVSID49IDQ2KQorICAgIHsiZXhpc3RzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2V4aXN0cywKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCiAgICAgeyJnZXQiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0LCAgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7InBnZXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9wZ2V0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZ2V0X2JvdGgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9ib3RoLCAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCkBAIC02NDI0LDI0ICs4NDgyLDcwIEBACiAgICAgeyJyZW1vdmUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfcmVtb3ZlLCAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7InJlbmFtZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9yZW5hbWUsICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InNldF9idF9taW5rZXkiLCAgIChQeUNGdW5jdGlvbilEQl9zZXRfYnRfbWlua2V5LCAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfYnRfbWlua2V5IiwgICAoUHlDRnVuY3Rpb24pREJfZ2V0X2J0X21pbmtleSwgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X2J0X2NvbXBhcmUiLCAgKFB5Q0Z1bmN0aW9uKURCX3NldF9idF9jb21wYXJlLCBNRVRIX099LAogICAgIHsic2V0X2NhY2hlc2l6ZSIsICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9jYWNoZXNpemUsICBNRVRIX1ZBUkFSR1N9LAotI2lmIChEQlZFUiA+PSA0MSkKLSAgICB7InNldF9lbmNyeXB0IiwgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfZW5jcnlwdCwgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9jYWNoZXNpemUiLCAgIChQeUNGdW5jdGlvbilEQl9nZXRfY2FjaGVzaXplLCAgTUVUSF9OT0FSR1N9LAogI2VuZGlmCisgICAgeyJzZXRfZW5jcnlwdCIsICAgICAoUHlDRnVuY3Rpb24pREJfc2V0X2VuY3J5cHQsICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfZW5jcnlwdF9mbGFncyIsIChQeUNGdW5jdGlvbilEQl9nZXRfZW5jcnlwdF9mbGFncywgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisKICAgICB7InNldF9mbGFncyIsICAgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfZmxhZ3MsICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfZmxhZ3MiLCAgICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X2ZsYWdzLCAgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X2hfZmZhY3RvciIsICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9oX2ZmYWN0b3IsICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9oX2ZmYWN0b3IiLCAgIChQeUNGdW5jdGlvbilEQl9nZXRfaF9mZmFjdG9yLCAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfaF9uZWxlbSIsICAgICAoUHlDRnVuY3Rpb24pREJfc2V0X2hfbmVsZW0sICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2hfbmVsZW0iLCAgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9oX25lbGVtLCAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9sb3JkZXIiLCAgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfbG9yZGVyLCAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfbG9yZGVyIiwgICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X2xvcmRlciwgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X3BhZ2VzaXplIiwgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9wYWdlc2l6ZSwgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9wYWdlc2l6ZSIsICAgIChQeUNGdW5jdGlvbilEQl9nZXRfcGFnZXNpemUsICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfcmVfZGVsaW0iLCAgICAoUHlDRnVuY3Rpb24pREJfc2V0X3JlX2RlbGltLCAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3JlX2RlbGltIiwgICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9yZV9kZWxpbSwgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9yZV9sZW4iLCAgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfcmVfbGVuLCAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfcmVfbGVuIiwgICAgICAoUHlDRnVuY3Rpb24pREJfZ2V0X3JlX2xlbiwgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X3JlX3BhZCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCX3NldF9yZV9wYWQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9yZV9wYWQiLCAgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfcmVfcGFkLCAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfcmVfc291cmNlIiwgICAoUHlDRnVuY3Rpb24pREJfc2V0X3JlX3NvdXJjZSwgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3JlX3NvdXJjZSIsICAgKFB5Q0Z1bmN0aW9uKURCX2dldF9yZV9zb3VyY2UsICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9xX2V4dGVudHNpemUiLChQeUNGdW5jdGlvbilEQl9zZXRfcV9leHRlbnRzaXplLCBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9xX2V4dGVudHNpemUiLChQeUNGdW5jdGlvbilEQl9nZXRfcV9leHRlbnRzaXplLCBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7InNldF9wcml2YXRlIiwgICAgIChQeUNGdW5jdGlvbilEQl9zZXRfcHJpdmF0ZSwgICAgTUVUSF9PfSwKICAgICB7ImdldF9wcml2YXRlIiwgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfcHJpdmF0ZSwgICAgTUVUSF9OT0FSR1N9LAorI2lmIChEQlZFUiA+PSA0NikKKyAgICB7InNldF9wcmlvcml0eSIsICAgIChQeUNGdW5jdGlvbilEQl9zZXRfcHJpb3JpdHksICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9wcmlvcml0eSIsICAgIChQeUNGdW5jdGlvbilEQl9nZXRfcHJpb3JpdHksICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzdGF0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfc3RhdCwgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJzdGF0X3ByaW50IiwgICAgICAoUHlDRnVuY3Rpb24pREJfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCiAgICAgeyJzeW5jIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJfc3luYywgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ0cnVuY2F0ZSIsICAgICAgICAoUHlDRnVuY3Rpb24pREJfdHJ1bmNhdGUsICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7InR5cGUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilEQl9nZXRfdHlwZSwgICAgICAgTUVUSF9OT0FSR1N9LApAQCAtNjQ1Myw2ICs4NTU3LDIwIEBACiB9OwogCiAKKy8qIFdlIG5lZWQgdGhpcyB0byBzdXBwb3J0IF9fY29udGFpbnNfXygpICovCitzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgREJfc2VxdWVuY2UgPSB7CisgICAgMCwgLyogc3FfbGVuZ3RoLCBtYXBwaW5nIHdpbnMgaGVyZSAqLworICAgIDAsIC8qIHNxX2NvbmNhdCAqLworICAgIDAsIC8qIHNxX3JlcGVhdCAqLworICAgIDAsIC8qIHNxX2l0ZW0gKi8KKyAgICAwLCAvKiBzcV9zbGljZSAqLworICAgIDAsIC8qIHNxX2Fzc19pdGVtICovCisgICAgMCwgLyogc3FfYXNzX3NsaWNlICovCisgICAgKG9iam9ianByb2MpREJfY29udGFpbnMsIC8qIHNxX2NvbnRhaW5zICovCisgICAgMCwgLyogc3FfaW5wbGFjZV9jb25jYXQgKi8KKyAgICAwLCAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLworfTsKKwogc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgREJfbWFwcGluZyA9IHsKICAgICAgICAgREJfbGVuZ3RoLCAgICAgICAgICAgICAgICAgICAvKm1wX2xlbmd0aCovCiAgICAgICAgIChiaW5hcnlmdW5jKURCX3N1YnNjcmlwdCwgICAgLyptcF9zdWJzY3JpcHQqLwpAQCAtNjQ4Myw4ICs4NjAxLDI5IEBACiAgICAgeyJjb25zdW1lIiwgICAgICAgICAoUHlDRnVuY3Rpb24pREJDX2NvbnN1bWUsICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Im5leHRfZHVwIiwgICAgICAgIChQeUNGdW5jdGlvbilEQkNfbmV4dF9kdXAsICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsibmV4dF9ub2R1cCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCQ19uZXh0X25vZHVwLCAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjaWYgKERCVkVSID49IDQ2KQorICAgIHsicHJldl9kdXAiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCQ19wcmV2X2R1cCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCiAgICAgeyJwcmV2X25vZHVwIiwgICAgICAoUHlDRnVuY3Rpb24pREJDX3ByZXZfbm9kdXAsICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7ImpvaW5faXRlbSIsICAgICAgIChQeUNGdW5jdGlvbilEQkNfam9pbl9pdGVtLCAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgeyJzZXRfcHJpb3JpdHkiLCAgICAoUHlDRnVuY3Rpb24pREJDX3NldF9wcmlvcml0eSwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsiZ2V0X3ByaW9yaXR5IiwgICAgKFB5Q0Z1bmN0aW9uKURCQ19nZXRfcHJpb3JpdHksIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHtOVUxMLCAgICAgIE5VTEx9ICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCisKK3N0YXRpYyBQeU1ldGhvZERlZiBEQkxvZ0N1cnNvcl9tZXRob2RzW10gPSB7CisgICAgeyJjbG9zZSIsICAgKFB5Q0Z1bmN0aW9uKURCTG9nQ3Vyc29yX2Nsb3NlLCAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsiY3VycmVudCIsIChQeUNGdW5jdGlvbilEQkxvZ0N1cnNvcl9jdXJyZW50LCAgIE1FVEhfTk9BUkdTfSwKKyAgICB7ImZpcnN0IiwgICAoUHlDRnVuY3Rpb24pREJMb2dDdXJzb3JfZmlyc3QsICAgICBNRVRIX05PQVJHU30sCisgICAgeyJsYXN0IiwgICAgKFB5Q0Z1bmN0aW9uKURCTG9nQ3Vyc29yX2xhc3QsICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsibmV4dCIsICAgIChQeUNGdW5jdGlvbilEQkxvZ0N1cnNvcl9uZXh0LCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InByZXYiLCAgICAoUHlDRnVuY3Rpb24pREJMb2dDdXJzb3JfcHJldiwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJzZXQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCTG9nQ3Vyc29yX3NldCwgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjQ5Myw1NyArODYzMiwxNzggQEAKICAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9jbG9zZSwgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsib3BlbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X29wZW4sICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZW1vdmUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfcmVtb3ZlLCAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgeyJkYnJlbW92ZSIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZGJyZW1vdmUsICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZGJyZW5hbWUiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2RicmVuYW1lLCAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgeyJzZXRfdGhyZWFkX2NvdW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90aHJlYWRfY291bnQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRfdGhyZWFkX2NvdW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF90aHJlYWRfY291bnQsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X2VuY3J5cHQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9lbmNyeXB0LCAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKLSNlbmRpZgotICAgIHsic2V0X3RpbWVvdXQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90aW1lb3V0LCAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKLSAgICB7InNldF9zaG1fa2V5IiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfc2htX2tleSwgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X2NhY2hlc2l6ZSIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9jYWNoZXNpemUsICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRfZGF0YV9kaXIiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2RhdGFfZGlyLCAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF9mbGFncyIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfZmxhZ3MsICAgICAgICBNRVRIX1ZBUkFSR1N9LAotI2lmIChEQlZFUiA+PSA0NykKLSAgICB7ImxvZ19zZXRfY29uZmlnIiwgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfc2V0X2NvbmZpZywgICBNRVRIX1ZBUkFSR1N9LAotI2VuZGlmCi0gICAgeyJzZXRfbGdfYnNpemUiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX2JzaXplLCAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF9sZ19kaXIiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGdfZGlyLCAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X2xnX21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19tYXgsICAgICAgIE1FVEhfVkFSQVJHU30sCiAjaWYgKERCVkVSID49IDQyKQotICAgIHsiZ2V0X2xnX21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sZ19tYXgsICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldF9lbmNyeXB0X2ZsYWdzIiwgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9lbmNyeXB0X2ZsYWdzLCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRfdGltZW91dCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3RpbWVvdXQsCisgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNlbmRpZgorICAgIHsic2V0X3RpbWVvdXQiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90aW1lb3V0LCAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsic2V0X3NobV9rZXkiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9zaG1fa2V5LCAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfc2htX2tleSIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3NobV9rZXksICAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgeyJzZXRfY2FjaGVfbWF4IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2NhY2hlX21heCwgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X2NhY2hlX21heCIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9jYWNoZV9tYXgsICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfY2FjaGVzaXplIiwgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2NhY2hlc2l6ZSwgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9jYWNoZXNpemUiLCAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfY2FjaGVzaXplLCAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsibWVtcF90cmlja2xlIiwgICAgKFB5Q0Z1bmN0aW9uKURCRW52X21lbXBfdHJpY2tsZSwgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im1lbXBfc3luYyIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9tZW1wX3N5bmMsICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJtZW1wX3N0YXQiLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbWVtcF9zdGF0LAorICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisjaWYgKERCVkVSID49IDQzKQorICAgIHsibWVtcF9zdGF0X3ByaW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X21lbXBfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQ0KQorICAgIHsibXV0ZXhfc2V0X21heCIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X3NldF9tYXgsICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im11dGV4X2dldF9tYXgiLCAgIChQeUNGdW5jdGlvbilEQkVudl9tdXRleF9nZXRfbWF4LCAgIE1FVEhfTk9BUkdTfSwKKyAgICB7Im11dGV4X3NldF9hbGlnbiIsIChQeUNGdW5jdGlvbilEQkVudl9tdXRleF9zZXRfYWxpZ24sIE1FVEhfVkFSQVJHU30sCisgICAgeyJtdXRleF9nZXRfYWxpZ24iLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfZ2V0X2FsaWduLCBNRVRIX05PQVJHU30sCisgICAgeyJtdXRleF9zZXRfaW5jcmVtZW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X3NldF9pbmNyZW1lbnQsCisgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJtdXRleF9nZXRfaW5jcmVtZW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X2dldF9pbmNyZW1lbnQsCisgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7Im11dGV4X3NldF90YXNfc3BpbnMiLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfc2V0X3Rhc19zcGlucywKKyAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im11dGV4X2dldF90YXNfc3BpbnMiLCAoUHlDRnVuY3Rpb24pREJFbnZfbXV0ZXhfZ2V0X3Rhc19zcGlucywKKyAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsibXV0ZXhfc3RhdCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X3N0YXQsICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDQpCisgICAgeyJtdXRleF9zdGF0X3ByaW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X211dGV4X3N0YXRfcHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNlbmRpZgorI2VuZGlmCisgICAgeyJzZXRfZGF0YV9kaXIiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2RhdGFfZGlyLCAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9kYXRhX2RpcnMiLCAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfZGF0YV9kaXJzLCAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9mbGFncyIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfZmxhZ3MsICAgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X2ZsYWdzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9mbGFncywgICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgeyJsb2dfc2V0X2NvbmZpZyIsICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX3NldF9jb25maWcsICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9nX2dldF9jb25maWciLCAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19nZXRfY29uZmlnLCAgTUVUSF9WQVJBUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X2xnX2JzaXplIiwgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19ic2l6ZSwgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfbGdfYnNpemUiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xnX2JzaXplLCAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InNldF9sZ19kaXIiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGdfZGlyLCAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X2xnX2RpciIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF9sZ19kaXIsICAgICAgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisgICAgeyJzZXRfbGdfbWF4IiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xnX21heCwgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sZ19tYXgiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGdfbWF4LCAgICAgIE1FVEhfTk9BUkdTfSwKICNlbmRpZgogICAgIHsic2V0X2xnX3JlZ2lvbm1heCIsKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19yZWdpb25tYXgsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRfbGtfZGV0ZWN0IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX2RldGVjdCwgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfbGdfcmVnaW9ubWF4IiwoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xnX3JlZ2lvbm1heCwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQ0KQorICAgIHsic2V0X2xnX2ZpbGVtb2RlIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sZ19maWxlbW9kZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9sZ19maWxlbW9kZSIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGdfZmlsZW1vZGUsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0NykKKyAgICB7InNldF9sa19wYXJ0aXRpb25zIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19wYXJ0aXRpb25zLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X2xrX3BhcnRpdGlvbnMiLCAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xrX3BhcnRpdGlvbnMsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X2xrX2RldGVjdCIsICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19kZXRlY3QsICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfbGtfZGV0ZWN0IiwgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xrX2RldGVjdCwgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICNpZiAoREJWRVIgPCA0NSkKLSAgICB7InNldF9sa19tYXgiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGtfbWF4LCAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsic2V0X2xrX21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19tYXgsICAgICAgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgogICAgIHsic2V0X2xrX21heF9sb2NrcyIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbGtfbWF4X2xvY2tzLCBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sa19tYXhfbG9ja3MiLCAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X2xrX21heF9sb2NrcywgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRfbGtfbWF4X2xvY2tlcnMiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X2xrX21heF9sb2NrZXJzLCBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sa19tYXhfbG9ja2VycyIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGtfbWF4X2xvY2tlcnMsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHsic2V0X2xrX21heF9vYmplY3RzIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9sa19tYXhfb2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF9tcF9tbWFwc2l6ZSIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbXBfbW1hcHNpemUsICBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X3RtcF9kaXIiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90bXBfZGlyLCAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ0eG5fYmVnaW4iLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfdHhuX2JlZ2luLCAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAotICAgIHsidHhuX2NoZWNrcG9pbnQiLCAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9jaGVja3BvaW50LCAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ0eG5fc3RhdCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfdHhuX3N0YXQsICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNldF90eF9tYXgiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfdHhfbWF4LCAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9sa19tYXhfb2JqZWN0cyIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbGtfbWF4X29iamVjdHMsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0MykKKyAgICB7InN0YXRfcHJpbnQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisgICAgeyJzZXRfbXBfbW1hcHNpemUiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X21wX21tYXBzaXplLCBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MikKKyAgICB7ImdldF9tcF9tbWFwc2l6ZSIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbXBfbW1hcHNpemUsIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgorICAgIHsic2V0X3RtcF9kaXIiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90bXBfZGlyLCAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgeyJnZXRfdG1wX2RpciIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfZ2V0X3RtcF9kaXIsICAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InR4bl9iZWdpbiIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl90eG5fYmVnaW4sICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyAgICB7InR4bl9jaGVja3BvaW50IiwgIChQeUNGdW5jdGlvbilEQkVudl90eG5fY2hlY2twb2ludCwgIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0eG5fc3RhdCIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfdHhuX3N0YXQsICAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmIChEQlZFUiA+PSA0MykKKyAgICB7InR4bl9zdGF0X3ByaW50IiwgIChQeUNGdW5jdGlvbilEQkVudl90eG5fc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQyKQorICAgIHsiZ2V0X3R4X21heCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF90eF9tYXgsICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0X3R4X3RpbWVzdGFtcCIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfdHhfdGltZXN0YW1wLCBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InNldF90eF9tYXgiLCAgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfdHhfbWF4LCAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzZXRfdHhfdGltZXN0YW1wIiwgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF90eF90aW1lc3RhbXAsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2NrX2RldGVjdCIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19kZXRlY3QsICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxvY2tfZ2V0IiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2dldCwgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibG9ja19pZCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfaWQsICAgICAgICAgIE1FVEhfTk9BUkdTfSwKLSAgICB7ImxvY2tfaWRfZnJlZSIsICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2lkX2ZyZWUsICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibG9ja19wdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfcHV0LCAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2NrX3N0YXQiLCAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19zdGF0LCAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxvZ19hcmNoaXZlIiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfYXJjaGl2ZSwgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibG9nX2ZsdXNoIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19mbHVzaCwgICAgICAgIE1FVEhfTk9BUkdTfSwKLSAgICB7ImxvZ19zdGF0IiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2dfc3RhdCwgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9ja19kZXRlY3QiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfZGV0ZWN0LCAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImxvY2tfZ2V0IiwgICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX2dldCwgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJsb2NrX2lkIiwgICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19pZCwgICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJsb2NrX2lkX2ZyZWUiLCAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9ja19pZF9mcmVlLCAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9ja19wdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfcHV0LCAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImxvY2tfc3RhdCIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sb2NrX3N0YXQsICAgICAgIE1FVEhfVkFSQVJHU30sCisjaWYgKERCVkVSID49IDQzKQorICAgIHsibG9ja19zdGF0X3ByaW50IiwgKFB5Q0Z1bmN0aW9uKURCRW52X2xvY2tfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisgICAgeyJsb2dfY3Vyc29yIiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2N1cnNvciwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJsb2dfZmlsZSIsICAgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2ZpbGUsICAgICAgICBNRVRIX1ZBUkFSR1N9LAogI2lmIChEQlZFUiA+PSA0NCkKLSAgICB7Imxzbl9yZXNldCIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sc25fcmVzZXQsICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCisgICAgeyJsb2dfcHJpbnRmIiwgICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX3ByaW50ZiwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisgICAgeyJsb2dfYXJjaGl2ZSIsICAgICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX2FyY2hpdmUsICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibG9nX2ZsdXNoIiwgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19mbHVzaCwgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsibG9nX3N0YXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2xvZ19zdGF0LCAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJsb2dfc3RhdF9wcmludCIsICAoUHlDRnVuY3Rpb24pREJFbnZfbG9nX3N0YXRfcHJpbnQsCisgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0NCkKKyAgICB7ImZpbGVpZF9yZXNldCIsICAgIChQeUNGdW5jdGlvbilEQkVudl9maWxlaWRfcmVzZXQsICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyAgICB7Imxzbl9yZXNldCIsICAgICAgIChQeUNGdW5jdGlvbilEQkVudl9sc25fcmVzZXQsICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICNlbmRpZgogICAgIHsic2V0X2dldF9yZXR1cm5zX25vbmUiLChQeUNGdW5jdGlvbilEQkVudl9zZXRfZ2V0X3JldHVybnNfbm9uZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InR4bl9yZWNvdmVyIiwgICAgIChQeUNGdW5jdGlvbilEQkVudl90eG5fcmVjb3ZlciwgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidHhuX3JlY292ZXIiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3R4bl9yZWNvdmVyLCAgICAgTUVUSF9OT0FSR1N9LAorI2lmIChEQlZFUiA8IDQ4KQogICAgIHsic2V0X3JwY19zZXJ2ZXIiLCAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF9ycGNfc2VydmVyLAogICAgICAgICBNRVRIX1ZBUkFSR1N8fE1FVEhfS0VZV09SRFN9LAotICAgIHsic2V0X3ZlcmJvc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X3NldF92ZXJib3NlLCAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCisjaWYgKERCVkVSID49IDQzKQorICAgIHsic2V0X21wX21heF9vcGVuZmQiLCAoUHlDRnVuY3Rpb24pREJFbnZfc2V0X21wX21heF9vcGVuZmQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRfbXBfbWF4X29wZW5mZCIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbXBfbWF4X29wZW5mZCwgTUVUSF9OT0FSR1N9LAorICAgIHsic2V0X21wX21heF93cml0ZSIsIChQeUNGdW5jdGlvbilEQkVudl9zZXRfbXBfbWF4X3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0X21wX21heF93cml0ZSIsIChQeUNGdW5jdGlvbilEQkVudl9nZXRfbXBfbWF4X3dyaXRlLCBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7InNldF92ZXJib3NlIiwgICAgIChQeUNGdW5jdGlvbilEQkVudl9zZXRfdmVyYm9zZSwgICAgIE1FVEhfVkFSQVJHU30sCiAjaWYgKERCVkVSID49IDQyKQogICAgIHsiZ2V0X3ZlcmJvc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKURCRW52X2dldF92ZXJib3NlLCAgICAgICBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCkBAIC02NTgxLDYgKzg4NDEsMTcgQEAKICAgICB7InJlcF9zZXRfdGltZW91dCIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfc2V0X3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZXBfZ2V0X3RpbWVvdXQiLCAoUHlDRnVuY3Rpb24pREJFbnZfcmVwX2dldF90aW1lb3V0LCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCisjaWYgKERCVkVSID49IDQ3KQorICAgIHsicmVwX3NldF9jbG9ja3NrZXciLCAoUHlDRnVuY3Rpb24pREJFbnZfcmVwX3NldF9jbG9ja3NrZXcsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZXBfZ2V0X2Nsb2Nrc2tldyIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfZ2V0X2Nsb2Nrc2tldywgTUVUSF9WQVJBUkdTfSwKKyNlbmRpZgorICAgIHsicmVwX3N0YXQiLCAoUHlDRnVuY3Rpb24pREJFbnZfcmVwX3N0YXQsCisgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKKyNpZiAoREJWRVIgPj0gNDMpCisgICAgeyJyZXBfc3RhdF9wcmludCIsIChQeUNGdW5jdGlvbilEQkVudl9yZXBfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2VuZGlmCisKICNpZiAoREJWRVIgPj0gNDUpCiAgICAgeyJyZXBtZ3Jfc3RhcnQiLCAoUHlDRnVuY3Rpb24pREJFbnZfcmVwbWdyX3N0YXJ0LAogICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCkBAIC02NjExLDYgKzg4ODIsMTIgQEAKICAgICB7ImRpc2NhcmQiLCAgICAgICAgIChQeUNGdW5jdGlvbilEQlR4bl9kaXNjYXJkLCAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiYWJvcnQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCVHhuX2Fib3J0LCAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJpZCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJUeG5faWQsICAgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InNldF90aW1lb3V0IiwgICAgIChQeUNGdW5jdGlvbilEQlR4bl9zZXRfdGltZW91dCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorI2lmIChEQlZFUiA+PSA0NCkKKyAgICB7InNldF9uYW1lIiwgICAgICAgIChQeUNGdW5jdGlvbilEQlR4bl9zZXRfbmFtZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9uYW1lIiwgICAgICAgIChQeUNGdW5jdGlvbilEQlR4bl9nZXRfbmFtZSwgTUVUSF9OT0FSR1N9LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTY2MjEsNyArODg5OCw3IEBACiAgICAgeyJnZXQiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9nZXQsICAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZ2V0X2RicCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2VfZ2V0X2RicCwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7ImdldF9rZXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX2dldF9rZXksICAgICAgICBNRVRIX05PQVJHU30sCi0gICAgeyJpbml0X3ZhbHVlIiwgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9pbml0X3ZhbHVlLCAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluaXRpYWxfdmFsdWUiLCAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX2luaXRpYWxfdmFsdWUsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsib3BlbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2Vfb3BlbiwgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7InJlbW92ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX3JlbW92ZSwgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJzZXRfY2FjaGVzaXplIiwgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9zZXRfY2FjaGVzaXplLCAgTUVUSF9WQVJBUkdTfSwKQEAgLTY2MzEsNiArODkwOCw4IEBACiAgICAgeyJzZXRfcmFuZ2UiLCAgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9zZXRfcmFuZ2UsICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldF9yYW5nZSIsICAgICAgIChQeUNGdW5jdGlvbilEQlNlcXVlbmNlX2dldF9yYW5nZSwgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJzdGF0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pREJTZXF1ZW5jZV9zdGF0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsic3RhdF9wcmludCIsICAgICAgKFB5Q0Z1bmN0aW9uKURCU2VxdWVuY2Vfc3RhdF9wcmludCwKKyAgICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9ICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogI2VuZGlmCkBAIC02NjQ0LDcgKzg5MjMsOSBAQAogICAgIENIRUNLX0VOVl9OT1RfQ0xPU0VEKHNlbGYpOwogCiAjaWYgKERCVkVSID49IDQyKQorICAgIE1ZREJfQkVHSU5fQUxMT1dfVEhSRUFEUzsKICAgICBzZWxmLT5kYl9lbnYtPmdldF9ob21lKHNlbGYtPmRiX2VudiwgJmhvbWUpOworICAgIE1ZREJfRU5EX0FMTE9XX1RIUkVBRFM7CiAjZWxzZQogICAgIGhvbWU9c2VsZi0+ZGJfZW52LT5kYl9ob21lOwogI2VuZGlmCkBAIC02Njc5LDcgKzg5NjAsNyBAQAogICAgIDAsICAgICAgICAgIC8qdHBfY29tcGFyZSovCiAgICAgMCwgICAgICAgICAgLyp0cF9yZXByKi8KICAgICAwLCAgICAgICAgICAvKnRwX2FzX251bWJlciovCi0gICAgMCwgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgJkRCX3NlcXVlbmNlLC8qdHBfYXNfc2VxdWVuY2UqLwogICAgICZEQl9tYXBwaW5nLC8qdHBfYXNfbWFwcGluZyovCiAgICAgMCwgICAgICAgICAgLyp0cF9oYXNoKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KQEAgLTY3NDcsNiArOTAyOCw0OSBAQAogfTsKIAogCitzdGF0aWNoZXJlIFB5VHlwZU9iamVjdCBEQkxvZ0N1cnNvcl9UeXBlID0geworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDApCisgICAgUHlPYmplY3RfSEVBRF9JTklUKE5VTEwpCisgICAgMCwgICAgICAgICAgICAgICAgICAvKm9iX3NpemUqLworI2Vsc2UKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyNlbmRpZgorICAgICJEQkxvZ0N1cnNvciIsICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoREJMb2dDdXJzb3JPYmplY3QpLCAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilEQkxvZ0N1cnNvcl9kZWFsbG9jLC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgIC8qdHBfY29tcGFyZSovCisgICAgMCwgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAvKnRwX2hhc2gqLworICAgIDAsICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwKQorICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9XRUFLUkVGUywgICAgICAvKiB0cF9mbGFncyAqLworI2Vsc2UKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgLyogdHBfZmxhZ3MgKi8KKyNlbmRpZgorICAgIDAsICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKERCTG9nQ3Vyc29yT2JqZWN0LCBpbl93ZWFrcmVmbGlzdCksICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAvKnRwX2l0ZXIqLworICAgIDAsICAgICAgICAgIC8qdHBfaXRlcm5leHQqLworICAgIERCTG9nQ3Vyc29yX21ldGhvZHMsIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KK307CisKKwogc3RhdGljaGVyZSBQeVR5cGVPYmplY3QgREJFbnZfVHlwZSA9IHsKICNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwKQogICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQpAQCAtNzAzMSwxNCArOTM1NSwyNiBAQAogewogICAgIFB5T2JqZWN0KiBtOwogICAgIFB5T2JqZWN0KiBkOwotICAgIFB5T2JqZWN0KiBweWJzZGRiX3ZlcnNpb25fcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyggUFlfQlNEREJfVkVSU0lPTiApOwotICAgIFB5T2JqZWN0KiBkYl92ZXJzaW9uX3MgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoIERCX1ZFUlNJT05fU1RSSU5HICk7Ci0gICAgUHlPYmplY3QqIGN2c2lkX3MgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoIHJjc19pZCApOwogICAgIFB5T2JqZWN0KiBweV9hcGk7CisgICAgUHlPYmplY3QqIHB5YnNkZGJfdmVyc2lvbl9zOworICAgIFB5T2JqZWN0KiBkYl92ZXJzaW9uX3M7CisgICAgUHlPYmplY3QqIGN2c2lkX3M7CisKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwKQorICAgIHB5YnNkZGJfdmVyc2lvbl9zID0gUHlTdHJpbmdfRnJvbVN0cmluZyhQWV9CU0REQl9WRVJTSU9OKTsKKyAgICBkYl92ZXJzaW9uX3MgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKERCX1ZFUlNJT05fU1RSSU5HKTsKKyAgICBjdnNpZF9zID0gUHlTdHJpbmdfRnJvbVN0cmluZyhyY3NfaWQpOworI2Vsc2UKKyAgICAvKiBUaGlzIGRhdGEgc2hvdWxkIGJlIGFzY2lpLCBzbyBVVEYtOCBjb252ZXJzaW9uIGlzIGZpbmUgKi8KKyAgICBweWJzZGRiX3ZlcnNpb25fcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFBZX0JTRERCX1ZFUlNJT04pOworICAgIGRiX3ZlcnNpb25fcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKERCX1ZFUlNJT05fU1RSSU5HKTsKKyAgICBjdnNpZF9zID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocmNzX2lkKTsKKyNlbmRpZgogCiAgICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZXMgKi8KICAgICBpZiAoKFB5VHlwZV9SZWFkeSgmREJfVHlwZSkgPCAwKQogICAgICAgICB8fCAoUHlUeXBlX1JlYWR5KCZEQkN1cnNvcl9UeXBlKSA8IDApCisgICAgICAgIHx8IChQeVR5cGVfUmVhZHkoJkRCTG9nQ3Vyc29yX1R5cGUpIDwgMCkKICAgICAgICAgfHwgKFB5VHlwZV9SZWFkeSgmREJFbnZfVHlwZSkgPCAwKQogICAgICAgICB8fCAoUHlUeXBlX1JlYWR5KCZEQlR4bl9UeXBlKSA8IDApCiAgICAgICAgIHx8IChQeVR5cGVfUmVhZHkoJkRCTG9ja19UeXBlKSA8IDApCkBAIC03MDkxLDYgKzk0MjcsNyBAQAogICAgIEFERF9JTlQoZCwgREJfTUFYX1BBR0VTKTsKICAgICBBRERfSU5UKGQsIERCX01BWF9SRUNPUkRTKTsKIAorI2lmIChEQlZFUiA8IDQ4KQogI2lmIChEQlZFUiA+PSA0MikKICAgICBBRERfSU5UKGQsIERCX1JQQ0NMSUVOVCk7CiAjZWxzZQpAQCAtNzA5OCw3ICs5NDM1LDExIEBACiAgICAgLyogYWxsb3cgYXBwcyB0byBiZSB3cml0dGVuIHVzaW5nIERCX1JQQ0NMSUVOVCBvbiBvbGRlciBCZXJrZWxleSBEQiAqLwogICAgIF9hZGRJbnRUb0RpY3QoZCwgIkRCX1JQQ0NMSUVOVCIsIERCX0NMSUVOVCk7CiAjZW5kaWYKKyNlbmRpZgorCisjaWYgKERCVkVSIDwgNDgpCiAgICAgQUREX0lOVChkLCBEQl9YQV9DUkVBVEUpOworI2VuZGlmCiAKICAgICBBRERfSU5UKGQsIERCX0NSRUFURSk7CiAgICAgQUREX0lOVChkLCBEQl9OT01NQVApOwpAQCAtNzExNSw3ICs5NDU2LDEzIEBACiAgICAgQUREX0lOVChkLCBEQl9JTklUX1RYTik7CiAgICAgQUREX0lOVChkLCBEQl9KT0lORU5WKTsKIAorI2lmIChEQlZFUiA+PSA0OCkKKyAgICBBRERfSU5UKGQsIERCX0dJRF9TSVpFKTsKKyNlbHNlCiAgICAgQUREX0lOVChkLCBEQl9YSUREQVRBU0laRSk7CisgICAgLyogQWxsb3cgbmV3IGNvZGUgdG8gd29yayBpbiBvbGQgQkRCIHJlbGVhc2VzICovCisgICAgX2FkZEludFRvRGljdChkLCAiREJfR0lEX1NJWkUiLCBEQl9YSUREQVRBU0laRSk7CisjZW5kaWYKIAogICAgIEFERF9JTlQoZCwgREJfUkVDT1ZFUik7CiAgICAgQUREX0lOVChkLCBEQl9SRUNPVkVSX0ZBVEFMKTsKQEAgLTcxMzAsNiArOTQ3NywxMCBAQAogICAgIEFERF9JTlQoZCwgREJfVFhOX1NZTkMpOwogICAgIEFERF9JTlQoZCwgREJfVFhOX05PV0FJVCk7CiAKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgQUREX0lOVChkLCBEQl9UWE5fV0FJVCk7CisjZW5kaWYKKwogICAgIEFERF9JTlQoZCwgREJfRVhDTCk7CiAgICAgQUREX0lOVChkLCBEQl9GQ05UTF9MT0NLSU5HKTsKICAgICBBRERfSU5UKGQsIERCX09EREZJTEVTSVpFKTsKQEAgLTcxNDEsNiArOTQ5Miw3IEBACiAgICAgQUREX0lOVChkLCBEQl9WRVJJRlkpOwogICAgIEFERF9JTlQoZCwgREJfVVBHUkFERSk7CiAKKyAgICBBRERfSU5UKGQsIERCX1BSSU5UQUJMRSk7CiAgICAgQUREX0lOVChkLCBEQl9BR0dSRVNTSVZFKTsKICAgICBBRERfSU5UKGQsIERCX05PT1JERVJDSEspOwogICAgIEFERF9JTlQoZCwgREJfT1JERVJDSEtPTkxZKTsKQEAgLTcyMjYsNiArOTU3OCwxMCBAQAogICAgIEFERF9JTlQoZCwgREJfUkVWU1BMSVRPRkYpOwogICAgIEFERF9JTlQoZCwgREJfU05BUFNIT1QpOwogCisjaWYgKERCVkVSID49IDQzKQorICAgIEFERF9JTlQoZCwgREJfSU5PUkRFUik7CisjZW5kaWYKKwogICAgIEFERF9JTlQoZCwgREJfSk9JTl9OT1NPUlQpOwogCiAgICAgQUREX0lOVChkLCBEQl9BRlRFUik7CkBAIC03MjM1LDEyICs5NTkxLDYgQEAKICAgICBBRERfSU5UKGQsIERCX0NBQ0hFRF9DT1VOVFMpOwogI2VuZGlmCiAKLSNpZiAoREJWRVIgPj0gNDEpCi0gICAgX2FkZEludFRvRGljdChkLCAiREJfQ0hFQ0tQT0lOVCIsIDApOwotI2Vsc2UKLSAgICBBRERfSU5UKGQsIERCX0NIRUNLUE9JTlQpOwotICAgIEFERF9JTlQoZCwgREJfQ1VSTFNOKTsKLSNlbmRpZgogI2lmIChEQlZFUiA8PSA0MSkKICAgICBBRERfSU5UKGQsIERCX0NPTU1JVCk7CiAjZW5kaWYKQEAgLTcyNTEsNiArOTYwMSw3IEBACiAgICAgQUREX0lOVChkLCBEQl9GSVJTVCk7CiAgICAgQUREX0lOVChkLCBEQl9GTFVTSCk7CiAgICAgQUREX0lOVChkLCBEQl9HRVRfQk9USCk7CisgICAgQUREX0lOVChkLCBEQl9HRVRfQk9USF9SQU5HRSk7CiAgICAgQUREX0lOVChkLCBEQl9HRVRfUkVDTk8pOwogICAgIEFERF9JTlQoZCwgREJfSk9JTl9JVEVNKTsKICAgICBBRERfSU5UKGQsIERCX0tFWUZJUlNUKTsKQEAgLTcyNjUsNiArOTYxNiw5IEBACiAgICAgQUREX0lOVChkLCBEQl9QT1NJVElPTik7CiAgICAgQUREX0lOVChkLCBEQl9QUkVWKTsKICAgICBBRERfSU5UKGQsIERCX1BSRVZfTk9EVVApOworI2lmIChEQlZFUiA+PSA0NikKKyAgICBBRERfSU5UKGQsIERCX1BSRVZfRFVQKTsKKyNlbmRpZgogI2lmIChEQlZFUiA8IDQ1KQogICAgIEFERF9JTlQoZCwgREJfUkVDT1JEQ09VTlQpOwogI2VuZGlmCkBAIC03MjgwLDE3ICs5NjM0LDE4IEBACiAgICAgQUREX0lOVChkLCBEQl9NVUxUSVBMRV9LRVkpOwogCiAjaWYgKERCVkVSID49IDQ0KQorICAgIEFERF9JTlQoZCwgREJfSU1NVVRBQkxFX0tFWSk7CiAgICAgQUREX0lOVChkLCBEQl9SRUFEX1VOQ09NTUlUVEVEKTsgICAgLyogcmVwbGFjZXMgREJfRElSVFlfUkVBRCBpbiA0LjQgKi8KICAgICBBRERfSU5UKGQsIERCX1JFQURfQ09NTUlUVEVEKTsKICNlbmRpZgogCisjaWYgKERCVkVSID49IDQ0KQorICAgIEFERF9JTlQoZCwgREJfRlJFRUxJU1RfT05MWSk7CisgICAgQUREX0lOVChkLCBEQl9GUkVFX1NQQUNFKTsKKyNlbmRpZgorCiAgICAgQUREX0lOVChkLCBEQl9ET05PVElOREVYKTsKIAotI2lmIChEQlZFUiA+PSA0MSkKLSAgICBfYWRkSW50VG9EaWN0KGQsICJEQl9JTkNPTVBMRVRFIiwgMCk7Ci0jZWxzZQotICAgIEFERF9JTlQoZCwgREJfSU5DT01QTEVURSk7Ci0jZW5kaWYKICAgICBBRERfSU5UKGQsIERCX0tFWUVNUFRZKTsKICAgICBBRERfSU5UKGQsIERCX0tFWUVYSVNUKTsKICAgICBBRERfSU5UKGQsIERCX0xPQ0tfREVBRExPQ0spOwpAQCAtNzMxMSwxNCArOTY2NiwzMCBAQAogICAgIEFERF9JTlQoZCwgREJfUEFOSUNfRU5WSVJPTk1FTlQpOwogICAgIEFERF9JTlQoZCwgREJfTk9QQU5JQyk7CiAKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgQUREX0lOVChkLCBEQl9PVkVSV1JJVEUpOworCisjaWYgKERCVkVSID49IDQzKQorICAgIEFERF9JTlQoZCwgREJfU1RBVF9TVUJTWVNURU0pOworICAgIEFERF9JTlQoZCwgREJfU1RBVF9NRU1QX0hBU0gpOwogI2VuZGlmCiAKLSNpZmRlZiBEQl9SRUdJU1RFUgorI2lmIChEQlZFUiA+PSA0OCkKKyAgICBBRERfSU5UKGQsIERCX09WRVJXUklURV9EVVApOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgQUREX0lOVChkLCBEQl9GT1JFSUdOX0FCT1JUKTsKKyAgICBBRERfSU5UKGQsIERCX0ZPUkVJR05fQ0FTQ0FERSk7CisgICAgQUREX0lOVChkLCBEQl9GT1JFSUdOX05VTExJRlkpOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDQpCiAgICAgQUREX0lOVChkLCBEQl9SRUdJU1RFUik7CiAjZW5kaWYKIAorICAgIEFERF9JTlQoZCwgREJfRUlEX0lOVkFMSUQpOworICAgIEFERF9JTlQoZCwgREJfRUlEX0JST0FEQ0FTVCk7CisKICNpZiAoREJWRVIgPj0gNDIpCiAgICAgQUREX0lOVChkLCBEQl9USU1FX05PVEdSQU5URUQpOwogICAgIEFERF9JTlQoZCwgREJfVFhOX05PVF9EVVJBQkxFKTsKQEAgLTczOTEsNiArOTc2MiwzMiBAQAogCiAgICAgQUREX0lOVChkLCBEQl9SRVBfTUFTVEVSKTsKICAgICBBRERfSU5UKGQsIERCX1JFUF9DTElFTlQpOworCisgICAgQUREX0lOVChkLCBEQl9SRVBfUEVSTUFORU5UKTsKKworI2lmIChEQlZFUiA+PSA0NCkKKyAgICBBRERfSU5UKGQsIERCX1JFUF9DT05GX05PQVVUT0lOSVQpOworICAgIEFERF9JTlQoZCwgREJfUkVQX0NPTkZfREVMQVlDTElFTlQpOworICAgIEFERF9JTlQoZCwgREJfUkVQX0NPTkZfQlVMSyk7CisgICAgQUREX0lOVChkLCBEQl9SRVBfQ09ORl9OT1dBSVQpOworICAgIEFERF9JTlQoZCwgREJfUkVQX0FOWVdIRVJFKTsKKyAgICBBRERfSU5UKGQsIERCX1JFUF9SRVJFUVVFU1QpOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDIpCisgICAgQUREX0lOVChkLCBEQl9SRVBfTk9CVUZGRVIpOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgQUREX0lOVChkLCBEQl9SRVBfTEVBU0VfRVhQSVJFRCk7CisgICAgQUREX0lOVChkLCBEQl9JR05PUkVfTEVBU0UpOworI2VuZGlmCisKKyNpZiAoREJWRVIgPj0gNDcpCisgICAgQUREX0lOVChkLCBEQl9SRVBfQ09ORl9MRUFTRSk7CisgICAgQUREX0lOVChkLCBEQl9SRVBNR1JfQ09ORl8yU0lURV9TVFJJQ1QpOworI2VuZGlmCisKICNpZiAoREJWRVIgPj0gNDUpCiAgICAgQUREX0lOVChkLCBEQl9SRVBfRUxFQ1RJT04pOwogCkBAIC03NDAyLDYgKzk3OTksMTEgQEAKICNpZiAoREJWRVIgPj0gNDYpCiAgICAgQUREX0lOVChkLCBEQl9SRVBfQ0hFQ0tQT0lOVF9ERUxBWSk7CiAgICAgQUREX0lOVChkLCBEQl9SRVBfRlVMTF9FTEVDVElPTl9USU1FT1VUKTsKKyAgICBBRERfSU5UKGQsIERCX1JFUF9MRUFTRV9USU1FT1VUKTsKKyNlbmRpZgorI2lmIChEQlZFUiA+PSA0NykKKyAgICBBRERfSU5UKGQsIERCX1JFUF9IRUFSVEJFQVRfTU9OSVRPUik7CisgICAgQUREX0lOVChkLCBEQl9SRVBfSEVBUlRCRUFUX1NFTkQpOwogI2VuZGlmCiAKICNpZiAoREJWRVIgPj0gNDUpCkBAIC03NDE0LDcgKzk4MTYsNiBAQAogICAgIEFERF9JTlQoZCwgREJfUkVQTUdSX0FDS1NfUVVPUlVNKTsKICAgICBBRERfSU5UKGQsIERCX1JFUE1HUl9DT05ORUNURUQpOwogICAgIEFERF9JTlQoZCwgREJfUkVQTUdSX0RJU0NPTk5FQ1RFRCk7Ci0gICAgQUREX0lOVChkLCBEQl9TVEFUX0NMRUFSKTsKICAgICBBRERfSU5UKGQsIERCX1NUQVRfQUxMKTsKICNlbmRpZgogCkBAIC03NDMwLDEyICs5ODMxLDE2IEBACiAgICAgQUREX0lOVChkLCBEQl9EU1lOQ19MT0cpOwogI2VuZGlmCiAKLSNpZiAoREJWRVIgPj0gNDEpCiAgICAgQUREX0lOVChkLCBEQl9FTkNSWVBUX0FFUyk7CiAgICAgQUREX0lOVChkLCBEQl9BVVRPX0NPTU1JVCk7Ci0jZWxzZQotICAgIC8qIGFsbG93IEJlcmtlbGV5IERCIDQuMSBhd2FyZSBhcHBzIHRvIHJ1biBvbiBvbGRlciB2ZXJzaW9ucyAqLwotICAgIF9hZGRJbnRUb0RpY3QoZCwgIkRCX0FVVE9fQ09NTUlUIiwgMCk7CisgICAgQUREX0lOVChkLCBEQl9QUklPUklUWV9WRVJZX0xPVyk7CisgICAgQUREX0lOVChkLCBEQl9QUklPUklUWV9MT1cpOworICAgIEFERF9JTlQoZCwgREJfUFJJT1JJVFlfREVGQVVMVCk7CisgICAgQUREX0lOVChkLCBEQl9QUklPUklUWV9ISUdIKTsKKyAgICBBRERfSU5UKGQsIERCX1BSSU9SSVRZX1ZFUllfSElHSCk7CisKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgQUREX0lOVChkLCBEQl9QUklPUklUWV9VTkNIQU5HRUQpOwogI2VuZGlmCiAKICAgICBBRERfSU5UKGQsIEVJTlZBTCk7CkBAIC03NDk5LDEyICs5OTA0LDcgQEAKICAgICB9CiAjZW5kaWYKIAotCi0jaWYgIUlOQ09NUExFVEVfSVNfV0FSTklORwotICAgIE1BS0VfRVgoREJJbmNvbXBsZXRlRXJyb3IpOwotI2VuZGlmCiAgICAgTUFLRV9FWChEQkN1cnNvckNsb3NlZEVycm9yKTsKLSAgICBNQUtFX0VYKERCS2V5RW1wdHlFcnJvcik7CiAgICAgTUFLRV9FWChEQktleUV4aXN0RXJyb3IpOwogICAgIE1BS0VfRVgoREJMb2NrRGVhZGxvY2tFcnJvcik7CiAgICAgTUFLRV9FWChEQkxvY2tOb3RHcmFudGVkRXJyb3IpOwpAQCAtNzUzMCwyNSArOTkzMCw2OSBAQAogI2lmIChEQlZFUiA+PSA0MikKICAgICBNQUtFX0VYKERCUmVwSGFuZGxlRGVhZEVycm9yKTsKICNlbmRpZgorI2lmIChEQlZFUiA+PSA0NCkKKyAgICBNQUtFX0VYKERCUmVwTG9ja291dEVycm9yKTsKKyNlbmRpZgogCiAgICAgTUFLRV9FWChEQlJlcFVuYXZhaWxFcnJvcik7CiAKKyNpZiAoREJWRVIgPj0gNDYpCisgICAgTUFLRV9FWChEQlJlcExlYXNlRXhwaXJlZEVycm9yKTsKKyNlbmRpZgorCisjaWYgKERCVkVSID49IDQ3KQorICAgICAgICBNQUtFX0VYKERCRm9yZWlnbkNvbmZsaWN0RXJyb3IpOworI2VuZGlmCisKICN1bmRlZiBNQUtFX0VYCiAKLSAgICAvKiBJbml0aWxpYXNlIHRoZSBDIEFQSSBzdHJ1Y3R1cmUgYW5kIGFkZCBpdCB0byB0aGUgbW9kdWxlICovCi0gICAgYnNkZGJfYXBpLmRiX3R5cGUgICAgICAgICA9ICZEQl9UeXBlOwotICAgIGJzZGRiX2FwaS5kYmN1cnNvcl90eXBlICAgPSAmREJDdXJzb3JfVHlwZTsKLSAgICBic2RkYl9hcGkuZGJlbnZfdHlwZSAgICAgID0gJkRCRW52X1R5cGU7Ci0gICAgYnNkZGJfYXBpLmRidHhuX3R5cGUgICAgICA9ICZEQlR4bl9UeXBlOwotICAgIGJzZGRiX2FwaS5kYmxvY2tfdHlwZSAgICAgPSAmREJMb2NrX1R5cGU7CisgICAgLyogSW5pdGlhbGlzZSB0aGUgQyBBUEkgc3RydWN0dXJlIGFuZCBhZGQgaXQgdG8gdGhlIG1vZHVsZSAqLworICAgIGJzZGRiX2FwaS5kYl90eXBlICAgICAgICAgID0gJkRCX1R5cGU7CisgICAgYnNkZGJfYXBpLmRiY3Vyc29yX3R5cGUgICAgPSAmREJDdXJzb3JfVHlwZTsKKyAgICBic2RkYl9hcGkuZGJsb2djdXJzb3JfdHlwZSA9ICZEQkxvZ0N1cnNvcl9UeXBlOworICAgIGJzZGRiX2FwaS5kYmVudl90eXBlICAgICAgID0gJkRCRW52X1R5cGU7CisgICAgYnNkZGJfYXBpLmRidHhuX3R5cGUgICAgICAgPSAmREJUeG5fVHlwZTsKKyAgICBic2RkYl9hcGkuZGJsb2NrX3R5cGUgICAgICA9ICZEQkxvY2tfVHlwZTsKICNpZiAoREJWRVIgPj0gNDMpCi0gICAgYnNkZGJfYXBpLmRic2VxdWVuY2VfdHlwZSA9ICZEQlNlcXVlbmNlX1R5cGU7CisgICAgYnNkZGJfYXBpLmRic2VxdWVuY2VfdHlwZSAgPSAmREJTZXF1ZW5jZV9UeXBlOwogI2VuZGlmCi0gICAgYnNkZGJfYXBpLm1ha2VEQkVycm9yICAgICA9IG1ha2VEQkVycm9yOworICAgIGJzZGRiX2FwaS5tYWtlREJFcnJvciAgICAgID0gbWFrZURCRXJyb3I7CiAKKyAgICAvKgorICAgICoqIENhcHN1bGVzIGV4aXN0IGZyb20gUHl0aG9uIDMuMSwgYnV0IEkKKyAgICAqKiBkb24ndCB3YW50IHRvIGJyZWFrIHRoZSBBUEkgY29tcGF0aWJpbGl0eQorICAgICoqIGZvciBhbHJlYWR5IHB1Ymxpc2hlZCBQeXRob24gdmVyc2lvbnMuCisgICAgKi8KKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAzMDIwMDAwKQogICAgIHB5X2FwaSA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cigodm9pZCopJmJzZGRiX2FwaSwgTlVMTCk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImFwaSIsIHB5X2FwaSk7Ci0gICAgUHlfREVDUkVGKHB5X2FwaSk7CisjZWxzZQorICAgIHsKKyAgICAgICAgY2hhciBweV9hcGlfbmFtZVsyNTBdOworCisgICAgICAgIHN0cmNweShweV9hcGlfbmFtZSwgX2JzZGRiTW9kdWxlTmFtZSk7CisgICAgICAgIHN0cmNhdChweV9hcGlfbmFtZSwgIi5hcGkiKTsKKworICAgICAgICBweV9hcGkgPSBQeUNhcHN1bGVfTmV3KCh2b2lkKikmYnNkZGJfYXBpLCBweV9hcGlfbmFtZSwgTlVMTCk7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBDaGVjayBlcnJvciBjb250cm9sICovCisgICAgLyoKKyAgICAqKiBQeUVycl9Ob01lbW9yeSgpOworICAgICoqIHB5X2FwaSA9IE5VTEw7CisgICAgKi8KKworICAgIGlmIChweV9hcGkpIHsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImFwaSIsIHB5X2FwaSk7CisgICAgICAgIFB5X0RFQ1JFRihweV9hcGkpOworICAgIH0gZWxzZSB7IC8qIFNvbWV0aGluZyBiYWQgaGFwcGVuZWQgKi8KKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKG0pOworICAgICAgICBpZihQeUVycl9XYXJuKFB5RXhjX1J1bnRpbWVXYXJuaW5nLAorICAgICAgICAgICAgICAgICJfYnNkZGIvX3B5YnNkZGIgQyBBUEkgd2lsbCBiZSBub3QgYXZhaWxhYmxlIikpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShtKTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KIAogICAgIC8qIENoZWNrIGZvciBlcnJvcnMgKi8KICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCAzYjA3YjZkLi4xMWQ3Y2QwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfQVNfREFUQShvYmopOwogICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUob2JqKTsKICAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKGRhdGEsIHNpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUob2JqKSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBpZiAoUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQgKiopJmRhdGEsICZzaXplKSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCmluZGV4IDZhYWRlYzEuLmZhYTI1NzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYwpAQCAtMjc2LDYgKzI3NiwyMyBAQAogCiBQeURvY19TVFJWQVIoYXBwZW5kbGVmdF9kb2MsICJBZGQgYW4gZWxlbWVudCB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSBkZXF1ZS4iKTsKIAorCisvKiBSdW4gYW4gaXRlcmF0b3IgdG8gZXhoYXVzdGlvbi4gIFNob3J0Y3V0IGZvcgorICAgdGhlIGV4dGVuZC9leHRlbmRsZWZ0IG1ldGhvZHMgd2hlbiBtYXhsZW4gPT0gMC4gKi8KK3N0YXRpYyBQeU9iamVjdCoKK2NvbnN1bWVfaXRlcmF0b3IoUHlPYmplY3QgKml0KQoreworICAgIFB5T2JqZWN0ICppdGVtOworCisgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisgICAgUHlfREVDUkVGKGl0KTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9leHRlbmQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7CkBAIC0yOTYsNiArMzEzLDkgQEAKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoZGVxdWUtPm1heGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gY29uc3VtZV9pdGVyYXRvcihpdCk7CisKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7CkBAIC0zNDUsNiArMzY1LDkgQEAKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoZGVxdWUtPm1heGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gY29uc3VtZV9pdGVyYXRvcihpdCk7CisKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKQEAgLTQzOSw2ICs0NjIsOTEgQEAKIFB5RG9jX1NUUlZBUihyb3RhdGVfZG9jLAogIlJvdGF0ZSB0aGUgZGVxdWUgbiBzdGVwcyB0byB0aGUgcmlnaHQgKGRlZmF1bHQgbj0xKS4gIElmIG4gaXMgbmVnYXRpdmUsIHJvdGF0ZXMgbGVmdC4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK2RlcXVlX3JldmVyc2UoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OworICAgIFB5X3NzaXplX3QgbiA9IChkZXF1ZS0+bGVuKS8yOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqdG1wOworCisgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKKyAgICAgICAgLyogVmFsaWRhdGUgdGhhdCBwb2ludGVycyBoYXZlbid0IG1ldCBpbiB0aGUgbWlkZGxlICovCisgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayB8fCBsZWZ0aW5kZXggPCByaWdodGluZGV4KTsKKworICAgICAgICAvKiBTd2FwICovCisgICAgICAgIHRtcCA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XSA9IHJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF07CisgICAgICAgIHJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF0gPSB0bXA7CisKKyAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KKyAgICAgICAgbGVmdGluZGV4Kys7CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOworICAgICAgICB9CisKKyAgICAgICAgLyogU3RlcCBiYWNrd2FyZHMgd2l0aCB0aGUgcmlnaHQgYmxvY2svaW5kZXggcGFpciAqLworICAgICAgICByaWdodGluZGV4LS07CisgICAgICAgIGlmIChyaWdodGluZGV4ID09IC0xKSB7CisgICAgICAgICAgICBpZiAocmlnaHRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihyZXZlcnNlX2RvYywKKyJELnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSoiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RlcXVlX2NvdW50KGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnYpCit7CisgICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgbiA9IGRlcXVlLT5sZW47CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgY291bnQgPSAwOworICAgIFB5T2JqZWN0ICppdGVtOworICAgIGxvbmcgc3RhcnRfc3RhdGUgPSBkZXF1ZS0+c3RhdGU7CisgICAgaW50IGNtcDsKKworICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CisgICAgICAgIGl0ZW0gPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHYsIFB5X0VRKTsKKyAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICBlbHNlIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKHN0YXJ0X3N0YXRlICE9IGRlcXVlLT5zdGF0ZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVxdWUgbXV0YXRlZCBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCisgICAgICAgIGxlZnRpbmRleCsrOworICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkgIC8qIGNhbiBvY2N1ciB3aGVuIGk9PW4tMSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChjb3VudCk7Cit9CisKK1B5RG9jX1NUUlZBUihjb3VudF9kb2MsCisiRC5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlIik7CisKIHN0YXRpYyBQeV9zc2l6ZV90CiBkZXF1ZV9sZW4oZGVxdWVvYmplY3QgKmRlcXVlKQogewpAQCAtODgyLDYgKzk5MCwyMCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGVxdWVfZ2V0X21heGxlbihkZXF1ZW9iamVjdCAqZGVxdWUpCit7CisgICAgaWYgKGRlcXVlLT5tYXhsZW4gPT0gLTEpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChkZXF1ZS0+bWF4bGVuKTsKK30KKworc3RhdGljIFB5R2V0U2V0RGVmIGRlcXVlX2dldHNldFtdID0geworICAgIHsibWF4bGVuIiwgKGdldHRlcilkZXF1ZV9nZXRfbWF4bGVuLCAoc2V0dGVyKU5VTEwsCisgICAgICJtYXhpbXVtIHNpemUgb2YgYSBkZXF1ZSBvciBOb25lIGlmIHVuYm91bmRlZCJ9LAorICAgIHswfQorfTsKKwogc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGRlcXVlX2FzX3NlcXVlbmNlID0gewogICAgIChsZW5mdW5jKWRlcXVlX2xlbiwgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLwpAQCAtOTEyLDYgKzEwMzQsOCBAQAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgY2xlYXJfZG9jfSwKICAgICB7Il9fY29weV9fIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX2NvcHksCiAgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICBjb3B5X2RvY30sCisgICAgeyJjb3VudCIsICAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9jb3VudCwKKyAgICAgICAgTUVUSF9PLCAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9kb2N9LAogICAgIHsiZXh0ZW5kIiwgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfZXh0ZW5kLAogICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgZXh0ZW5kX2RvY30sCiAgICAgeyJleHRlbmRsZWZ0IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9leHRlbmRsZWZ0LApAQCAtOTI2LDYgKzEwNTAsOCBAQAogICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgcmVtb3ZlX2RvY30sCiAgICAgeyJfX3JldmVyc2VkX18iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9yZXZpdGVyLAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgcmV2ZXJzZWRfZG9jfSwKKyAgICB7InJldmVyc2UiLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX3JldmVyc2UsCisgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICByZXZlcnNlX2RvY30sCiAgICAgeyJyb3RhdGUiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9yb3RhdGUsCiAgICAgICAgIE1FVEhfVkFSQVJHUywgICAgICAgICAgIHJvdGF0ZV9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtOTY4LDcgKzEwOTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgZGVxdWVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICBkZXF1ZV9nZXRzZXQsICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCBhZjRmZjQ5Li40ZmM5ZDAyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTYsNyArNiw3IEBACiAvKgogICBUb0RvOgogCi0gIEdldCByaWQgb2YgdGhlIGNoZWNrZXIgKGFuZCBhbHNvIHRoZSBjb252ZXJ0ZXJzKSBmaWVsZCBpbiBDRnVuY1B0ck9iamVjdCBhbmQKKyAgR2V0IHJpZCBvZiB0aGUgY2hlY2tlciAoYW5kIGFsc28gdGhlIGNvbnZlcnRlcnMpIGZpZWxkIGluIFB5Q0Z1bmNQdHJPYmplY3QgYW5kCiAgIFN0Z0RpY3RPYmplY3QsIGFuZCByZXBsYWNlIHRoZW0gYnkgc2xvdCBmdW5jdGlvbnMgaW4gU3RnRGljdE9iamVjdC4KIAogICB0aGluayBhYm91dCBhIGJ1ZmZlci1saWtlIG9iamVjdCAobWVtb3J5PyBieXRlcz8pCkBAIC0yOCwyMCArMjgsMjAgQEAKIE5hbWUgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMsIG1lbWJlcnMsIGdldHNldHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1TdHJ1Y3RUeXBlX1R5cGUgICAgICAgICBfX25ld19fKCksIGZyb21fYWRkcmVzcygpLCBfX211bF9fKCksIGZyb21fcGFyYW0oKQorUHlDU3RydWN0VHlwZV9UeXBlICAgICAgICAgICAgICBfX25ld19fKCksIGZyb21fYWRkcmVzcygpLCBfX211bF9fKCksIGZyb21fcGFyYW0oKQogVW5pb25UeXBlX1R5cGUgICAgICAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCkKLVBvaW50ZXJUeXBlX1R5cGUgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpLCBzZXRfdHlwZSgpCi1BcnJheVR5cGVfVHlwZSAgICAgICAgICBfX25ld19fKCksIGZyb21fYWRkcmVzcygpLCBfX211bF9fKCksIGZyb21fcGFyYW0oKQotU2ltcGxlVHlwZV9UeXBlICAgICAgICAgX19uZXdfXygpLCBmcm9tX2FkZHJlc3MoKSwgX19tdWxfXygpLCBmcm9tX3BhcmFtKCkKK1B5Q1BvaW50ZXJUeXBlX1R5cGUgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpLCBzZXRfdHlwZSgpCitQeUNBcnJheVR5cGVfVHlwZSAgICAgICAgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpCitQeUNTaW1wbGVUeXBlX1R5cGUgICAgICAgICAgICAgIF9fbmV3X18oKSwgZnJvbV9hZGRyZXNzKCksIF9fbXVsX18oKSwgZnJvbV9wYXJhbSgpCiAKLUNEYXRhX1R5cGUKK1B5Q0RhdGFfVHlwZQogICBTdHJ1Y3RfVHlwZSAgICAgICAgICAgX19uZXdfXygpLCBfX2luaXRfXygpCi0gIFBvaW50ZXJfVHlwZSAgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCksIF9hc19wYXJhbWV0ZXJfLCBjb250ZW50cwotICBBcnJheV9UeXBlICAgICAgICAgICAgX19uZXdfXygpLCBfX2luaXRfXygpLCBfYXNfcGFyYW1ldGVyXywgX19nZXQvc2V0aXRlbV9fKCksIF9fbGVuX18oKQorICBQeUNQb2ludGVyX1R5cGUgICAgICAgICAgICAgICBfX25ld19fKCksIF9faW5pdF9fKCksIF9hc19wYXJhbWV0ZXJfLCBjb250ZW50cworICBQeUNBcnJheV9UeXBlICAgICAgICAgX19uZXdfXygpLCBfX2luaXRfXygpLCBfYXNfcGFyYW1ldGVyXywgX19nZXQvc2V0aXRlbV9fKCksIF9fbGVuX18oKQogICBTaW1wbGVfVHlwZSAgICAgICAgICAgX19uZXdfXygpLCBfX2luaXRfXygpLCBfYXNfcGFyYW1ldGVyXwogCi1DRmllbGRfVHlwZQotU3RnRGljdF9UeXBlCitQeUNGaWVsZF9UeXBlCitQeUNTdGdEaWN0X1R5cGUKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTg3LDIwICs4NywyMCBAQAogKi8KIAogLyoKLSAqIFN0Z0RpY3RfVHlwZQotICogU3RydWN0VHlwZV9UeXBlCisgKiBQeUNTdGdEaWN0X1R5cGUKKyAqIFB5Q1N0cnVjdFR5cGVfVHlwZQogICogVW5pb25UeXBlX1R5cGUKLSAqIFBvaW50ZXJUeXBlX1R5cGUKLSAqIEFycmF5VHlwZV9UeXBlCi0gKiBTaW1wbGVUeXBlX1R5cGUKKyAqIFB5Q1BvaW50ZXJUeXBlX1R5cGUKKyAqIFB5Q0FycmF5VHlwZV9UeXBlCisgKiBQeUNTaW1wbGVUeXBlX1R5cGUKICAqCi0gKiBDRGF0YV9UeXBlCisgKiBQeUNEYXRhX1R5cGUKICAqIFN0cnVjdF9UeXBlCiAgKiBVbmlvbl9UeXBlCi0gKiBBcnJheV9UeXBlCisgKiBQeUNBcnJheV9UeXBlCiAgKiBTaW1wbGVfVHlwZQotICogUG9pbnRlcl9UeXBlCi0gKiBDRmllbGRfVHlwZQorICogUHlDUG9pbnRlcl9UeXBlCisgKiBQeUNGaWVsZF9UeXBlCiAgKgogICovCiAKQEAgLTEzMCwxNSArMTMwLDE1IEBACiBQeU9iamVjdCAqUHlFeGNfQXJnRXJyb3I7CiAKIC8qIFRoaXMgZGljdCBtYXBzIGN0eXBlcyB0eXBlcyB0byBQT0lOVEVSIHR5cGVzICovCi1QeU9iamVjdCAqX3BvaW50ZXJfdHlwZV9jYWNoZTsKK1B5T2JqZWN0ICpfY3R5cGVzX3B0cnR5cGVfY2FjaGU7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgU2ltcGxlX1R5cGU7CiAKIC8qIGEgY2FsbGFibGUgb2JqZWN0IHVzZWQgZm9yIHVucGlja2xpbmcgKi8KIHN0YXRpYyBQeU9iamVjdCAqX3VucGlja2xlOwogCi1jaGFyICpjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcgPSBOVUxMOwotY2hhciAqY29udmVyc2lvbl9tb2RlX2Vycm9ycyA9IE5VTEw7CitjaGFyICpfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcgPSBOVUxMOworY2hhciAqX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyA9IE5VTEw7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMDAsNyArMzAwLDcgQEAKICAgYWxyZWFkeSBiZSBzZXQuCiAgKi8KIGNoYXIgKgotYWxsb2NfZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK19jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKICAgICBzaXplX3QgbGVuOwogICAgIGNoYXIgKnJlc3VsdDsKQEAgLTMyNCw3ICszMjQsNyBAQAogfQogCiAvKgotICBTdHJ1Y3RUeXBlX1R5cGUgLSBhIG1ldGEgdHlwZS9jbGFzcy4gIENyZWF0aW5nIGEgbmV3IGNsYXNzIHVzaW5nIHRoaXMgb25lIGFzCisgIFB5Q1N0cnVjdFR5cGVfVHlwZSAtIGEgbWV0YSB0eXBlL2NsYXNzLiAgQ3JlYXRpbmcgYSBuZXcgY2xhc3MgdXNpbmcgdGhpcyBvbmUgYXMKICAgX19tZXRhY2xhc3NfXyB3aWxsIGNhbGwgdGhlIGNvbnRydWN0b3IgU3RydWN0VW5pb25UeXBlX25ldy4gIEl0IHJlcGxhY2VzIHRoZQogICB0cF9kaWN0IG1lbWJlciB3aXRoIGEgbmV3IGluc3RhbmNlIG9mIFN0Z0RpY3QsIGFuZCBpbml0aWFsaXplcyB0aGUgQwogICBhY2Nlc3NpYmxlIGZpZWxkcyBzb21laG93LgpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3Q7CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcocmVzdWx0LT50cF9kaWN0LCAiX2Fic3RyYWN0XyIpKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OwogCi0gICAgZGljdCA9IChTdGdEaWN0T2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgoUHlPYmplY3QgKikmU3RnRGljdF9UeXBlLCBOVUxMKTsKKyAgICBkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZQeUNTdGdEaWN0X1R5cGUsIE5VTEwpOwogICAgIGlmICghZGljdCkgewogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zODYsNyArMzg2LDcgQEAKICAgICB9CiAgICAgUHlfREVDUkVGKHJlc3VsdC0+dHBfZGljdCk7CiAgICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopZGljdDsKLSAgICBkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CisgICAgZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CiAgICAgaWYgKGRpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQwMSw3ICs0MDEsNyBAQAogICAgICAgICBpZiAoYmFzZWRpY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilyZXN1bHQ7CiAgICAgICAgIC8qIGNvcHkgYmFzZSBkaWN0ICovCi0gICAgICAgIGlmICgtMSA9PSBTdGdEaWN0X2Nsb25lKGRpY3QsIGJhc2VkaWN0KSkgeworICAgICAgICBpZiAoLTEgPT0gUHlDU3RnRGljdF9jbG9uZShkaWN0LCBiYXNlZGljdCkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTQxOCw3ICs0MTgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotU3RydWN0VHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNTdHJ1Y3RUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICByZXR1cm4gU3RydWN0VW5pb25UeXBlX25ldyh0eXBlLCBhcmdzLCBrd2RzLCAxKTsKIH0KQEAgLTQ0NCw3ICs0NDQsNyBAQAogICAgIGJ1ZiA9ICh2b2lkICopUHlMb25nX0FzVm9pZFB0cih2YWx1ZSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBDRGF0YV9BdEFkZHJlc3ModHlwZSwgYnVmKTsKKyAgICByZXR1cm4gUHlDRGF0YV9BdEFkZHJlc3ModHlwZSwgYnVmKTsKIH0KIAogc3RhdGljIGNoYXIgZnJvbV9idWZmZXJfZG9jW10gPQpAQCAtNDkxLDcgKzQ5MSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJlc3VsdCA9IENEYXRhX0F0QWRkcmVzcyh0eXBlLCAoY2hhciAqKWJ1ZmZlciArIG9mZnNldCk7CisgICAgcmVzdWx0ID0gUHlDRGF0YV9BdEFkZHJlc3ModHlwZSwgKGNoYXIgKilidWZmZXIgKyBvZmZzZXQpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTUwNyw3ICs1MDcsNyBAQAogIkMuZnJvbV9idWZmZXJfY29weShvYmplY3QsIG9mZnNldD0wKSAtPiBDIGluc3RhbmNlXG5jcmVhdGUgYSBDIGluc3RhbmNlIGZyb20gYSByZWFkYWJsZSBidWZmZXIiOwogCiBzdGF0aWMgUHlPYmplY3QgKgotR2VuZXJpY0NEYXRhX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitHZW5lcmljUHlDRGF0YV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogQ0RhdGFUeXBlX2Zyb21fYnVmZmVyX2NvcHkoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQpAQCAtNTQ4LDcgKzU0OCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEdlbmVyaWNDRGF0YV9uZXcoKFB5VHlwZU9iamVjdCAqKXR5cGUsIE5VTEwsIE5VTEwpOworICAgIHJlc3VsdCA9IEdlbmVyaWNQeUNEYXRhX25ldygoUHlUeXBlT2JqZWN0ICopdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1jcHkoKChDRGF0YU9iamVjdCAqKXJlc3VsdCktPmJfcHRyLApAQCAtNjEwLDcgKzYxMCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgotICAgIHJldHVybiBDRGF0YV9BdEFkZHJlc3ModHlwZSwgYWRkcmVzcyk7CisgICAgcmV0dXJuIFB5Q0RhdGFfQXRBZGRyZXNzKHR5cGUsIGFkZHJlc3MpOwogfQogCiBzdGF0aWMgY2hhciBmcm9tX3BhcmFtX2RvY1tdID0KQEAgLTY3OCw3ICs2NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcnJheSBsZW5ndGggbXVzdCBiZSA+PSAwLCBub3QgJXpkIiwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Ci0gICAgcmV0dXJuIENyZWF0ZUFycmF5VHlwZShzZWxmLCBsZW5ndGgpOworICAgIHJldHVybiBQeUNBcnJheVR5cGVfZnJvbV9jdHlwZShzZWxmLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgQ0RhdGFUeXBlX2FzX3NlcXVlbmNlID0gewpAQCAtNzE0LDcgKzcxNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLVN0cnVjdFR5cGVfc2V0YXR0cm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKK1B5Q1N0cnVjdFR5cGVfc2V0YXR0cm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICAvKiBYWFggU2hvdWxkIHdlIGRpc2FsbG93IGRlbGV0aW5nIF9maWVsZHNfPyAqLwogICAgIGlmICgtMSA9PSBQeVR5cGVfVHlwZS50cF9zZXRhdHRybyhzZWxmLCBrZXksIHZhbHVlKSkKQEAgLTcyMiw3ICs3MjIsNyBAQAogCiAgICAgaWYgKHZhbHVlICYmIFB5U3RyaW5nX0NoZWNrKGtleSkgJiYKICAgICAgICAgMCA9PSBzdHJjbXAoUHlTdHJpbmdfQVNfU1RSSU5HKGtleSksICJfZmllbGRzXyIpKQotICAgICAgICByZXR1cm4gU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KHNlbGYsIHZhbHVlLCAxKTsKKyAgICAgICAgcmV0dXJuIFB5Q1N0cnVjdFVuaW9uVHlwZV91cGRhdGVfc3RnZGljdChzZWxmLCB2YWx1ZSwgMSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTczNiwxNCArNzM2LDE0IEBACiAKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2soa2V5KSAmJgogICAgICAgICAwID09IHN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcoa2V5KSwgIl9maWVsZHNfIikpCi0gICAgICAgIHJldHVybiBTdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3Qoc2VsZiwgdmFsdWUsIDApOworICAgICAgICByZXR1cm4gUHlDU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KHNlbGYsIHZhbHVlLCAwKTsKICAgICByZXR1cm4gMDsKIH0KIAogCi1QeVR5cGVPYmplY3QgU3RydWN0VHlwZV9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q1N0cnVjdFR5cGVfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2N0eXBlcy5TdHJ1Y3RUeXBlIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2N0eXBlcy5QeUNTdHJ1Y3RUeXBlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtNzU5LDcgKzc1OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCi0gICAgU3RydWN0VHlwZV9zZXRhdHRybywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIFB5Q1N0cnVjdFR5cGVfc2V0YXR0cm8sICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qIHRwX2ZsYWdzICovCiAgICAgIm1ldGF0eXBlIGZvciB0aGUgQ0RhdGEgT2JqZWN0cyIsICAgICAgICAgICAvKiB0cF9kb2MgKi8KQEAgLTc3OSw3ICs3NzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBTdHJ1Y3RUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5Q1N0cnVjdFR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKQEAgLTgzMCwyMCArODMwLDIwIEBACiAKIC8qCiAKLVRoZSBQb2ludGVyVHlwZV9UeXBlIG1ldGFjbGFzcyBtdXN0IGVuc3VyZSB0aGF0IHRoZSBzdWJjbGFzcyBvZiBQb2ludGVyIGNhbiBiZQorVGhlIFB5Q1BvaW50ZXJUeXBlX1R5cGUgbWV0YWNsYXNzIG11c3QgZW5zdXJlIHRoYXQgdGhlIHN1YmNsYXNzIG9mIFBvaW50ZXIgY2FuIGJlCiBjcmVhdGVkLiBJdCBtdXN0IGNoZWNrIGZvciBhIF90eXBlXyBhdHRyaWJ1dGUgaW4gdGhlIGNsYXNzLiBTaW5jZSBhcmUgbm8KIHJ1bnRpbWUgY3JlYXRlZCBwcm9wZXJ0aWVzLCBhIENGaWVsZCBpcyBwcm9iYWJseSAqbm90KiBuZWVkZWQgPwogCiBjbGFzcyBJbnRQb2ludGVyKFBvaW50ZXIpOgogICAgIF90eXBlXyA9ICJpIgogCi1UaGUgUG9pbnRlcl9UeXBlIHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5OiBhIGNvbnRlbnRzIG1ldGhvZC9wcm9wZXJ0eSwgYQorVGhlIFB5Q1BvaW50ZXJfVHlwZSBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eTogYSBjb250ZW50cyBtZXRob2QvcHJvcGVydHksIGEKIHNpemUgcHJvcGVydHkvbWV0aG9kLCBhbmQgdGhlIHNlcXVlbmNlIHByb3RvY29sLgogCiAqLwogCiBzdGF0aWMgaW50Ci1Qb2ludGVyVHlwZV9TZXRQcm90byhTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCBQeU9iamVjdCAqcHJvdG8pCitQeUNQb2ludGVyVHlwZV9TZXRQcm90byhTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCBQeU9iamVjdCAqcHJvdG8pCiB7CiAgICAgaWYgKCFwcm90byB8fCAhUHlUeXBlX0NoZWNrKHByb3RvKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtODYyLDExICs4NjIsMTEgQEAKIH0KIAogc3RhdGljIFB5Q0FyZ09iamVjdCAqCi1Qb2ludGVyVHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCitQeUNQb2ludGVyVHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogCi0gICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtODc5LDcgKzg3OSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Qb2ludGVyVHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNQb2ludGVyVHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQ7CiAgICAgU3RnRGljdE9iamVjdCAqc3RnZGljdDsKQEAgLTg5NCwxOCArODk0LDE4IEBACiAgIHN0Z2RpY3QtPnByb3RvIGhhcyBpbmZvIGFib3V0IHRoZSBwb2ludGVkIHRvIHR5cGUhCiAqLwogICAgIHN0Z2RpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICAgIChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKICAgICBpZiAoIXN0Z2RpY3QpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0Z2RpY3QtPnNpemUgPSBzaXplb2Yodm9pZCAqKTsKLSAgICBzdGdkaWN0LT5hbGlnbiA9IGdldGVudHJ5KCJQIiktPnBmZmlfdHlwZS0+YWxpZ25tZW50OworICAgIHN0Z2RpY3QtPmFsaWduID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJQIiktPnBmZmlfdHlwZS0+YWxpZ25tZW50OwogICAgIHN0Z2RpY3QtPmxlbmd0aCA9IDE7CiAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlciA9IGZmaV90eXBlX3BvaW50ZXI7Ci0gICAgc3RnZGljdC0+cGFyYW1mdW5jID0gUG9pbnRlclR5cGVfcGFyYW1mdW5jOworICAgIHN0Z2RpY3QtPnBhcmFtZnVuYyA9IFB5Q1BvaW50ZXJUeXBlX3BhcmFtZnVuYzsKICAgICBzdGdkaWN0LT5mbGFncyB8PSBUWVBFRkxBR19JU1BPSU5URVI7CiAKICAgICBwcm90byA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHR5cGVkaWN0LCAiX3R5cGVfIik7IC8qIEJvcnJvd2VkIHJlZiAqLwotICAgIGlmIChwcm90byAmJiAtMSA9PSBQb2ludGVyVHlwZV9TZXRQcm90byhzdGdkaWN0LCBwcm90bykpIHsKKyAgICBpZiAocHJvdG8gJiYgLTEgPT0gUHlDUG9pbnRlclR5cGVfU2V0UHJvdG8oc3RnZGljdCwgcHJvdG8pKSB7CiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTE4LDcgKzkxOCw3IEBACiAgICAgICAgICAgICdwb2ludGVyIHRvIGJ5dGVzJyBpbiB0aGlzIGNhc2UuICBYWFggQmV0dGVyIHdvdWxkIGJlIHRvCiAgICAgICAgICAgIGZpeCB0aGUgZm9ybWF0IHN0cmluZyBsYXRlci4uLgogICAgICAgICAqLwotICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKCImIiwKKyAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKCImIiwKICAgICAgICAgICAgICAgICAgICAgICBpdGVtZGljdC0+Zm9ybWF0ID8gaXRlbWRpY3QtPmZvcm1hdCA6ICJCIik7CiAgICAgICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKXN0Z2RpY3QpOwpAQCAtOTQ4LDE0ICs5NDgsMTQgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotUG9pbnRlclR5cGVfc2V0X3R5cGUoUHlUeXBlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdHlwZSkKK1B5Q1BvaW50ZXJUeXBlX3NldF90eXBlKFB5VHlwZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnR5cGUpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKIAogICAgIGRpY3QgPSBQeVR5cGVfc3RnZGljdCgoUHlPYmplY3QgKilzZWxmKTsKICAgICBhc3NlcnQoZGljdCk7CiAKLSAgICBpZiAoLTEgPT0gUG9pbnRlclR5cGVfU2V0UHJvdG8oZGljdCwgdHlwZSkpCisgICAgaWYgKC0xID09IFB5Q1BvaW50ZXJUeXBlX1NldFByb3RvKGRpY3QsIHR5cGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICgtMSA9PSBQeURpY3RfU2V0SXRlbVN0cmluZygoUHlPYmplY3QgKilkaWN0LCAiX3R5cGVfIiwgdHlwZSkpCkBAIC05NjgsNyArOTY4LDcgQEAKIHN0YXRpY2ZvcndhcmQgUHlPYmplY3QgKl9ieXJlZihQeU9iamVjdCAqKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLVBvaW50ZXJUeXBlX2Zyb21fcGFyYW0oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKK1B5Q1BvaW50ZXJUeXBlX2Zyb21fcGFyYW0oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBTdGdEaWN0T2JqZWN0ICp0eXBlZGljdDsKIApAQCAtMTAwOSwxOSArMTAwOSwxOSBAQAogICAgIHJldHVybiBDRGF0YVR5cGVfZnJvbV9wYXJhbSh0eXBlLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBQeU1ldGhvZERlZiBQb2ludGVyVHlwZV9tZXRob2RzW10gPSB7CitzdGF0aWMgUHlNZXRob2REZWYgUHlDUG9pbnRlclR5cGVfbWV0aG9kc1tdID0gewogICAgIHsgImZyb21fYWRkcmVzcyIsIENEYXRhVHlwZV9mcm9tX2FkZHJlc3MsIE1FVEhfTywgZnJvbV9hZGRyZXNzX2RvYyB9LAogICAgIHsgImZyb21fYnVmZmVyIiwgQ0RhdGFUeXBlX2Zyb21fYnVmZmVyLCBNRVRIX1ZBUkFSR1MsIGZyb21fYnVmZmVyX2RvYywgfSwKICAgICB7ICJmcm9tX2J1ZmZlcl9jb3B5IiwgQ0RhdGFUeXBlX2Zyb21fYnVmZmVyX2NvcHksIE1FVEhfVkFSQVJHUywgZnJvbV9idWZmZXJfY29weV9kb2MsIH0sCiAgICAgeyAiaW5fZGxsIiwgQ0RhdGFUeXBlX2luX2RsbCwgTUVUSF9WQVJBUkdTLCBpbl9kbGxfZG9jfSwKLSAgICB7ICJmcm9tX3BhcmFtIiwgKFB5Q0Z1bmN0aW9uKVBvaW50ZXJUeXBlX2Zyb21fcGFyYW0sIE1FVEhfTywgZnJvbV9wYXJhbV9kb2N9LAotICAgIHsgInNldF90eXBlIiwgKFB5Q0Z1bmN0aW9uKVBvaW50ZXJUeXBlX3NldF90eXBlLCBNRVRIX08gfSwKKyAgICB7ICJmcm9tX3BhcmFtIiwgKFB5Q0Z1bmN0aW9uKVB5Q1BvaW50ZXJUeXBlX2Zyb21fcGFyYW0sIE1FVEhfTywgZnJvbV9wYXJhbV9kb2N9LAorICAgIHsgInNldF90eXBlIiwgKFB5Q0Z1bmN0aW9uKVB5Q1BvaW50ZXJUeXBlX3NldF90eXBlLCBNRVRIX08gfSwKICAgICB7IE5VTEwsIE5VTEwgfSwKIH07CiAKLVB5VHlwZU9iamVjdCBQb2ludGVyVHlwZV9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q1BvaW50ZXJUeXBlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9jdHlwZXMuUG9pbnRlclR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2N0eXBlcy5QeUNQb2ludGVyVHlwZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgUG9pbnRlclR5cGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgUHlDUG9pbnRlclR5cGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTEwNTcsMTcgKzEwNTcsMTcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgUG9pbnRlclR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeUNQb2ludGVyVHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAgQXJyYXlUeXBlX1R5cGUKKyAgUHlDQXJyYXlUeXBlX1R5cGUKICovCiAvKgotICBBcnJheVR5cGVfbmV3IGVuc3VyZXMgdGhhdCB0aGUgbmV3IEFycmF5IHN1YmNsYXNzIGNyZWF0ZWQgaGFzIGEgX2xlbmd0aF8KKyAgUHlDQXJyYXlUeXBlX25ldyBlbnN1cmVzIHRoYXQgdGhlIG5ldyBBcnJheSBzdWJjbGFzcyBjcmVhdGVkIGhhcyBhIF9sZW5ndGhfCiAgIGF0dHJpYnV0ZSwgYW5kIGEgX3R5cGVfIGF0dHJpYnV0ZS4KICovCiAKQEAgLTEwNzYsMjIgKzEwNzYsNDIgQEAKIHsKICAgICBjaGFyICpwdHI7CiAgICAgUHlfc3NpemVfdCBzaXplOworI2lmIChQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDYwMDAwKQorICAgIFB5X2J1ZmZlciB2aWV3ID0geyAwIH07CisjZW5kaWYKICAgICBpZiAoUHlCdWZmZXJfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIHNpemUgPSBQeV9UWVBFKHZhbHVlKS0+dHBfYXNfYnVmZmVyLT5iZl9nZXRyZWFkYnVmZmVyKHZhbHVlLCAwLCAodm9pZCAqKSZwdHIpOwogICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmICgtMSA9PSBQeVN0cmluZ19Bc1N0cmluZ0FuZFNpemUodmFsdWUsICZwdHIsICZzaXplKSkgewotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfSBlbHNlIHsKKyNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA2MDAwMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih2YWx1ZSwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBzaXplID0gdmlldy5sZW47CisgICAgICAgIHB0ciA9IHZpZXcuYnVmOworI2Vsc2UKKyAgICAgICAgaWYgKC0xID09IFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSh2YWx1ZSwgJnB0ciwgJnNpemUpKQorICAgICAgICAgICAgZ290byBmYWlsOworI2VuZGlmCiAgICAgfQogICAgIGlmIChzaXplID4gc2VsZi0+Yl9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKICAgICBtZW1jcHkoc2VsZi0+Yl9wdHIsIHB0ciwgc2l6ZSk7CiAKKyNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA2MDAwMCkKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyNlbmRpZgogICAgIHJldHVybiAwOworICAgIGZhaWw6CisKKyNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA2MDAwMCkKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyNlbmRpZgorICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTExMjUsOCArMTE0NSw4IEBACiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSBpZiAoIVB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewpAQCAtMTE4NSw4ICsxMjA1LDggQEAKICAgICB9CiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMjc4LDkgKzEyOTgsOSBAQAogfQogCiBzdGF0aWMgUHlDQXJnT2JqZWN0ICoKLUFycmF5VHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCitQeUNBcnJheVR5cGVfcGFyYW1mdW5jKENEYXRhT2JqZWN0ICpzZWxmKQogewotICAgIFB5Q0FyZ09iamVjdCAqcCA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgUHlDQXJnT2JqZWN0ICpwID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHAtPnRhZyA9ICdQJzsKQEAgLTEyOTIsNyArMTMxMiw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1BcnJheVR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDQXJyYXlUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0OwpAQCAtMTMyNSw3ICsxMzQ1LDcgQEAKICAgICB9CiAKICAgICBzdGdkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KAotICAgICAgICAoUHlPYmplY3QgKikmU3RnRGljdF9UeXBlLCBOVUxMKTsKKyAgICAgICAgKFB5T2JqZWN0ICopJlB5Q1N0Z0RpY3RfVHlwZSwgTlVMTCk7CiAgICAgaWYgKCFzdGdkaWN0KQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTM0MCwxMCArMTM2MCwxMCBAQAogICAgIGFzc2VydChpdGVtZGljdC0+Zm9ybWF0KTsKICAgICBpZiAoaXRlbWRpY3QtPmZvcm1hdFswXSA9PSAnKCcpIHsKICAgICAgICAgc3ByaW50ZihidWYsICIoJWxkLCIsIGxlbmd0aCk7Ci0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoYnVmLCBpdGVtZGljdC0+Zm9ybWF0KzEpOworICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoYnVmLCBpdGVtZGljdC0+Zm9ybWF0KzEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNwcmludGYoYnVmLCAiKCVsZCkiLCBsZW5ndGgpOwotICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCk7CisgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhidWYsIGl0ZW1kaWN0LT5mb3JtYXQpOwogICAgIH0KICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKXN0Z2RpY3QpOwpAQCAtMTM3Nyw3ICsxMzk3LDcgQEAKICAgICBQeV9JTkNSRUYocHJvdG8pOwogICAgIHN0Z2RpY3QtPnByb3RvID0gcHJvdG87CiAKLSAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSAmQXJyYXlUeXBlX3BhcmFtZnVuYzsKKyAgICBzdGdkaWN0LT5wYXJhbWZ1bmMgPSAmUHlDQXJyYXlUeXBlX3BhcmFtZnVuYzsKIAogICAgIC8qIEFycmF5cyBhcmUgcGFzc2VkIGFzIHBvaW50ZXJzIHRvIGZ1bmN0aW9uIGNhbGxzLiAqLwogICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIgPSBmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTQwMCwxMSArMTQyMCwxMSBAQAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgY2hhcmFjdGVyIGFycmF5cy4KICAgICAgICBBIHBlcm1hbmVudCBhbm5veWFuY2U6IGNoYXIgYXJyYXlzIGFyZSBhbHNvIHN0cmluZ3MhCiAgICAgKi8KLSAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgeworICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoImMiKS0+Z2V0ZnVuYykgewogICAgICAgICBpZiAoLTEgPT0gYWRkX2dldHNldChyZXN1bHQsIENoYXJBcnJheV9nZXRzZXRzKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2lmZGVmIENUWVBFU19VTklDT0RFCi0gICAgfSBlbHNlIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgidSIpLT5nZXRmdW5jKSB7CisgICAgfSBlbHNlIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+Z2V0ZnVuYykgewogICAgICAgICBpZiAoLTEgPT0gYWRkX2dldHNldChyZXN1bHQsIFdDaGFyQXJyYXlfZ2V0c2V0cykpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgpAQCAtMTQxMyw5ICsxNDMzLDkgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OwogfQogCi1QeVR5cGVPYmplY3QgQXJyYXlUeXBlX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDQXJyYXlUeXBlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9jdHlwZXMuQXJyYXlUeXBlIiwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgIl9jdHlwZXMuUHlDQXJyYXlUeXBlIiwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC0xNDUxLDE4ICsxNDcxLDE4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIEFycmF5VHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlDQXJyYXlUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAgU2ltcGxlVHlwZV9UeXBlCisgIFB5Q1NpbXBsZVR5cGVfVHlwZQogKi8KIC8qCiAKLVNpbXBsZVR5cGVfbmV3IGVuc3VyZXMgdGhhdCB0aGUgbmV3IFNpbXBsZV9UeXBlIHN1YmNsYXNzIGNyZWF0ZWQgaGFzIGEgdmFsaWQKK1B5Q1NpbXBsZVR5cGVfbmV3IGVuc3VyZXMgdGhhdCB0aGUgbmV3IFNpbXBsZV9UeXBlIHN1YmNsYXNzIGNyZWF0ZWQgaGFzIGEgdmFsaWQKIF90eXBlXyBhdHRyaWJ1dGUuCiAKICovCkBAIC0xNDgyLDkgKzE1MDIsOSBAQAogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSB8fCBQeVN0cmluZ19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwotICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IGdldGVudHJ5KCJaIik7CisgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJaIik7CiAKLSAgICAgICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcGFyZy0+cGZmaV90eXBlID0gJmZmaV90eXBlX3BvaW50ZXI7CkBAIC0xNTA2LDcgKzE1MjYsNyBAQAogICAgICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgICAgICBhc3NlcnQoZHQpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgcG9pbnRlciBvciBhcnJheSBvYmplY3RzICovCiAgICAgICAgIGRpY3QgPSBkdCAmJiBkdC0+cHJvdG8gPyBQeVR5cGVfc3RnZGljdChkdC0+cHJvdG8pIDogTlVMTDsKLSAgICAgICAgaWYgKGRpY3QgJiYgKGRpY3QtPnNldGZ1bmMgPT0gZ2V0ZW50cnkoInUiKS0+c2V0ZnVuYykpIHsKKyAgICAgICAgaWYgKGRpY3QgJiYgKGRpY3QtPnNldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPnNldGZ1bmMpKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICB9CkBAIC0xNTE1LDcgKzE1MzUsNyBAQAogICAgICAgICAvKiBieXJlZihjX2NoYXIoLi4uKSkgKi8KICAgICAgICAgUHlDQXJnT2JqZWN0ICphID0gKFB5Q0FyZ09iamVjdCAqKXZhbHVlOwogICAgICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlPYmplY3Rfc3RnZGljdChhLT5vYmopOwotICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBnZXRlbnRyeSgidSIpLT5zZXRmdW5jKSkgeworICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+c2V0ZnVuYykpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KQEAgLTE1NDYsOSArMTU2Niw5IEBACiAgICAgfQogICAgIGlmIChQeVN0cmluZ19DaGVjayh2YWx1ZSkgfHwgUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoInoiKTsKKyAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInoiKTsKIAotICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTE1NzAsNyArMTU5MCw3IEBACiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgICAgIGFzc2VydChkdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBwb2ludGVyIG9yIGFycmF5IG9iamVjdHMgKi8KICAgICAgICAgZGljdCA9IGR0ICYmIGR0LT5wcm90byA/IFB5VHlwZV9zdGdkaWN0KGR0LT5wcm90bykgOiBOVUxMOwotICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBnZXRlbnRyeSgiYyIpLT5zZXRmdW5jKSkgeworICAgICAgICBpZiAoZGljdCAmJiAoZGljdC0+c2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoImMiKS0+c2V0ZnVuYykpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KQEAgLTE1NzksNyArMTU5OSw3IEBACiAgICAgICAgIC8qIGJ5cmVmKGNfY2hhciguLi4pKSAqLwogICAgICAgICBQeUNBcmdPYmplY3QgKmEgPSAoUHlDQXJnT2JqZWN0ICopdmFsdWU7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeU9iamVjdF9zdGdkaWN0KGEtPm9iaik7Ci0gICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IGdldGVudHJ5KCJjIiktPnNldGZ1bmMpKSB7CisgICAgICAgIGlmIChkaWN0ICYmIChkaWN0LT5zZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5zZXRmdW5jKSkgewogICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgfQpAQCAtMTYxNSw5ICsxNjM1LDkgQEAKIC8qIGludCwgbG9uZyAqLwogICAgIGlmIChQeUludF9DaGVjayh2YWx1ZSkgfHwgUHlMb25nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoIlAiKTsKKyAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIlAiKTsKIAotICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTE2MzIsOSArMTY1Miw5IEBACiAvKiBzdHJpbmcgKi8KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBnZXRlbnRyeSgieiIpOworICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygieiIpOwogCi0gICAgICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTY0OSw5ICsxNjY5LDkgQEAKIC8qIHVuaWNvZGUgKi8KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoIloiKTsKKyAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIloiKTsKIAotICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTE2ODUsMTEgKzE3MDUsMTEgQEAKICAgICAgICAgfQogICAgIH0KIC8qIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLSAgICBpZiAoQ0Z1bmNQdHJPYmplY3RfQ2hlY2sodmFsdWUpKSB7CisgICAgaWYgKFB5Q0Z1bmNQdHJPYmplY3RfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgQ0Z1bmNQdHJPYmplY3QgKmZ1bmM7Ci0gICAgICAgIGZ1bmMgPSAoQ0Z1bmNQdHJPYmplY3QgKil2YWx1ZTsKLSAgICAgICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgICAgIFB5Q0Z1bmNQdHJPYmplY3QgKmZ1bmM7CisgICAgICAgIGZ1bmMgPSAoUHlDRnVuY1B0ck9iamVjdCAqKXZhbHVlOworICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwpAQCAtMTcwNyw3ICsxNzI3LDcgQEAKICAgICAgICAgc3dpdGNoIChQeVN0cmluZ19BU19TVFJJTkcoc3RnZC0+cHJvdG8pWzBdKSB7CiAgICAgICAgIGNhc2UgJ3onOiAvKiBjX2NoYXJfcCAqLwogICAgICAgICBjYXNlICdaJzogLyogY193Y2hhcl9wICovCi0gICAgICAgICAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICAgICAgICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcGFyZy0+cGZmaV90eXBlID0gJmZmaV90eXBlX3BvaW50ZXI7CkBAIC0xNzg2LDcgKzE4MDYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHN0Z2RpY3QgPSAoU3RnRGljdE9iamVjdCAqKVB5T2JqZWN0X0NhbGxPYmplY3QoCi0gICAgICAgIChQeU9iamVjdCAqKSZTdGdEaWN0X1R5cGUsIE5VTEwpOworICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKICAgICBpZiAoIXN0Z2RpY3QpIC8qIFhYWCBsZWFrcyByZXN1bHQhICovCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xODEzLDcgKzE4MzMsNyBAQAogfQogCiBzdGF0aWMgUHlDQXJnT2JqZWN0ICoKLVNpbXBsZVR5cGVfcGFyYW1mdW5jKENEYXRhT2JqZWN0ICpzZWxmKQorUHlDU2ltcGxlVHlwZV9wYXJhbWZ1bmMoQ0RhdGFPYmplY3QgKnNlbGYpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKICAgICBjaGFyICpmbXQ7CkBAIC0xODI1LDEwICsxODQ1LDEwIEBACiAgICAgZm10ID0gUHlTdHJpbmdfQXNTdHJpbmcoZGljdC0+cHJvdG8pOwogICAgIGFzc2VydChmbXQpOwogCi0gICAgZmQgPSBnZXRlbnRyeShmbXQpOworICAgIGZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKGZtdCk7CiAgICAgYXNzZXJ0KGZkKTsKIAotICAgIHBhcmcgPSBuZXdfQ0FyZ09iamVjdCgpOworICAgIHBhcmcgPSBQeUNBcmdPYmplY3RfbmV3KCk7CiAgICAgaWYgKHBhcmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE4NDEsNyArMTg2MSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TaW1wbGVUeXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q1NpbXBsZVR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0OwogICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3Q7CkBAIC0xODg3LDcgKzE5MDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgU0lNUExFX1RZUEVfQ0hBUlMpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBmbXQgPSBnZXRlbnRyeShQeVN0cmluZ19BU19TVFJJTkcocHJvdG8pKTsKKyAgICBmbXQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoUHlTdHJpbmdfQVNfU1RSSU5HKHByb3RvKSk7CiAgICAgaWYgKGZtdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIl90eXBlXyAnJXMnIG5vdCBzdXBwb3J0ZWQiLApAQCAtMTg5Niw3ICsxOTE2LDcgQEAKICAgICB9CiAKICAgICBzdGdkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KAotICAgICAgICAoUHlPYmplY3QgKikmU3RnRGljdF9UeXBlLCBOVUxMKTsKKyAgICAgICAgKFB5T2JqZWN0ICopJlB5Q1N0Z0RpY3RfVHlwZSwgTlVMTCk7CiAgICAgaWYgKCFzdGdkaWN0KQogICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0xOTA3LDkgKzE5MjcsOSBAQAogICAgIHN0Z2RpY3QtPnNldGZ1bmMgPSBmbXQtPnNldGZ1bmM7CiAgICAgc3RnZGljdC0+Z2V0ZnVuYyA9IGZtdC0+Z2V0ZnVuYzsKICNpZmRlZiBXT1JEU19CSUdFTkRJQU4KLSAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKCI+IiwgcHJvdG9fc3RyKTsKKyAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIj4iLCBwcm90b19zdHIpOwogI2Vsc2UKLSAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKCI8IiwgcHJvdG9fc3RyKTsKKyAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIjwiLCBwcm90b19zdHIpOwogI2VuZGlmCiAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtMTkxOCw3ICsxOTM4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc3RnZGljdC0+cGFyYW1mdW5jID0gU2ltcGxlVHlwZV9wYXJhbWZ1bmM7CisgICAgc3RnZGljdC0+cGFyYW1mdW5jID0gUHlDU2ltcGxlVHlwZV9wYXJhbWZ1bmM7CiAvKgogICAgIGlmIChyZXN1bHQtPnRwX2Jhc2UgIT0gJlNpbXBsZV9UeXBlKSB7CiAgICAgICAgIHN0Z2RpY3QtPnNldGZ1bmMgPSBOVUxMOwpAQCAtMTkzOSw3ICsxOTU5LDcgQEAKICAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OwogCiAgICAgLyogSW5zdGFsbCBmcm9tX3BhcmFtIGNsYXNzIG1ldGhvZHMgaW4gY3R5cGVzIGJhc2UgY2xhc3Nlcy4KLSAgICAgICBPdmVycmlkZXMgdGhlIFNpbXBsZVR5cGVfZnJvbV9wYXJhbSBnZW5lcmljIG1ldGhvZC4KKyAgICAgICBPdmVycmlkZXMgdGhlIFB5Q1NpbXBsZVR5cGVfZnJvbV9wYXJhbSBnZW5lcmljIG1ldGhvZC4KICAgICAgKi8KICAgICBpZiAocmVzdWx0LT50cF9iYXNlID09ICZTaW1wbGVfVHlwZSkgewogICAgICAgICBzd2l0Y2ggKFB5U3RyaW5nX0FTX1NUUklORyhwcm90bylbMF0pIHsKQEAgLTE5OTksNyArMjAxOSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodHlwZSA9PSAmU2ltcGxlVHlwZV9UeXBlICYmIGZtdC0+c2V0ZnVuY19zd2FwcGVkICYmIGZtdC0+Z2V0ZnVuY19zd2FwcGVkKSB7CisgICAgaWYgKHR5cGUgPT0gJlB5Q1NpbXBsZVR5cGVfVHlwZSAmJiBmbXQtPnNldGZ1bmNfc3dhcHBlZCAmJiBmbXQtPmdldGZ1bmNfc3dhcHBlZCkgewogICAgICAgICBQeU9iamVjdCAqc3dhcHBlZCA9IENyZWF0ZVN3YXBwZWRUeXBlKHR5cGUsIGFyZ3MsIGt3ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8sIGZtdCk7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKnN3X2RpY3Q7CkBAIC0yMDE0LDE0ICsyMDM0LDE0IEBACiAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoc3dhcHBlZCwgIl9fY3R5cGVfYmVfXyIsIChQeU9iamVjdCAqKXJlc3VsdCk7CiAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoc3dhcHBlZCwgIl9fY3R5cGVfbGVfXyIsIHN3YXBwZWQpOwogICAgICAgICAvKiBXZSBhcmUgY3JlYXRpbmcgdGhlIHR5cGUgZm9yIHRoZSBPVEhFUiBlbmRpYW4gKi8KLSAgICAgICAgc3dfZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZygiPCIsIHN0Z2RpY3QtPmZvcm1hdCsxKTsKKyAgICAgICAgc3dfZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKCI8Iiwgc3RnZGljdC0+Zm9ybWF0KzEpOwogI2Vsc2UKICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZygoUHlPYmplY3QgKilyZXN1bHQsICJfX2N0eXBlX2JlX18iLCBzd2FwcGVkKTsKICAgICAgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZygoUHlPYmplY3QgKilyZXN1bHQsICJfX2N0eXBlX2xlX18iLCAoUHlPYmplY3QgKilyZXN1bHQpOwogICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHN3YXBwZWQsICJfX2N0eXBlX2xlX18iLCAoUHlPYmplY3QgKilyZXN1bHQpOwogICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHN3YXBwZWQsICJfX2N0eXBlX2JlX18iLCBzd2FwcGVkKTsKICAgICAgICAgLyogV2UgYXJlIGNyZWF0aW5nIHRoZSB0eXBlIGZvciB0aGUgT1RIRVIgZW5kaWFuICovCi0gICAgICAgIHN3X2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoIj4iLCBzdGdkaWN0LT5mb3JtYXQrMSk7CisgICAgICAgIHN3X2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiPiIsIHN0Z2RpY3QtPmZvcm1hdCsxKTsKICNlbmRpZgogICAgICAgICBQeV9ERUNSRUYoc3dhcHBlZCk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CkBAIC0yMDM4LDcgKzIwNTgsNyBAQAogICogQ29udmVydCBhIHBhcmFtZXRlciBpbnRvIHNvbWV0aGluZyB0aGF0IENvbnZQYXJhbSBjYW4gaGFuZGxlLgogICovCiBzdGF0aWMgUHlPYmplY3QgKgotU2ltcGxlVHlwZV9mcm9tX3BhcmFtKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUpCitQeUNTaW1wbGVUeXBlX2Zyb21fcGFyYW0oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgIGNoYXIgKmZtdDsKQEAgLTIwNjAsMTAgKzIwODAsMTAgQEAKICAgICBmbXQgPSBQeVN0cmluZ19Bc1N0cmluZyhkaWN0LT5wcm90byk7CiAgICAgYXNzZXJ0KGZtdCk7CiAKLSAgICBmZCA9IGdldGVudHJ5KGZtdCk7CisgICAgZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoZm10KTsKICAgICBhc3NlcnQoZmQpOwogCi0gICAgcGFyZyA9IG5ld19DQXJnT2JqZWN0KCk7CisgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKICAgICBpZiAocGFyZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjA3Nyw3ICsyMDk3LDcgQEAKIAogICAgIGFzX3BhcmFtZXRlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodmFsdWUsICJfYXNfcGFyYW1ldGVyXyIpOwogICAgIGlmIChhc19wYXJhbWV0ZXIpIHsKLSAgICAgICAgdmFsdWUgPSBTaW1wbGVUeXBlX2Zyb21fcGFyYW0odHlwZSwgYXNfcGFyYW1ldGVyKTsKKyAgICAgICAgdmFsdWUgPSBQeUNTaW1wbGVUeXBlX2Zyb21fcGFyYW0odHlwZSwgYXNfcGFyYW1ldGVyKTsKICAgICAgICAgUHlfREVDUkVGKGFzX3BhcmFtZXRlcik7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CkBAIC0yMDg2LDggKzIxMDYsOCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgUHlNZXRob2REZWYgU2ltcGxlVHlwZV9tZXRob2RzW10gPSB7Ci0gICAgeyAiZnJvbV9wYXJhbSIsIFNpbXBsZVR5cGVfZnJvbV9wYXJhbSwgTUVUSF9PLCBmcm9tX3BhcmFtX2RvYyB9LAorc3RhdGljIFB5TWV0aG9kRGVmIFB5Q1NpbXBsZVR5cGVfbWV0aG9kc1tdID0geworICAgIHsgImZyb21fcGFyYW0iLCBQeUNTaW1wbGVUeXBlX2Zyb21fcGFyYW0sIE1FVEhfTywgZnJvbV9wYXJhbV9kb2MgfSwKICAgICB7ICJmcm9tX2FkZHJlc3MiLCBDRGF0YVR5cGVfZnJvbV9hZGRyZXNzLCBNRVRIX08sIGZyb21fYWRkcmVzc19kb2MgfSwKICAgICB7ICJmcm9tX2J1ZmZlciIsIENEYXRhVHlwZV9mcm9tX2J1ZmZlciwgTUVUSF9WQVJBUkdTLCBmcm9tX2J1ZmZlcl9kb2MsIH0sCiAgICAgeyAiZnJvbV9idWZmZXJfY29weSIsIENEYXRhVHlwZV9mcm9tX2J1ZmZlcl9jb3B5LCBNRVRIX1ZBUkFSR1MsIGZyb21fYnVmZmVyX2NvcHlfZG9jLCB9LApAQCAtMjA5NSw5ICsyMTE1LDkgQEAKICAgICB7IE5VTEwsIE5VTEwgfSwKIH07CiAKLVB5VHlwZU9iamVjdCBTaW1wbGVUeXBlX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDU2ltcGxlVHlwZV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfY3R5cGVzLlNpbXBsZVR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgIl9jdHlwZXMuUHlDU2ltcGxlVHlwZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMjExNiwxNCArMjEzNiwxNCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCi0gICAgIm1ldGF0eXBlIGZvciB0aGUgU2ltcGxlVHlwZSBPYmplY3RzIiwgICAgICAvKiB0cF9kb2MgKi8KKyAgICAibWV0YXR5cGUgZm9yIHRoZSBQeUNTaW1wbGVUeXBlIE9iamVjdHMiLCAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICBTaW1wbGVUeXBlX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBQeUNTaW1wbGVUeXBlX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMjEzMywxMyArMjE1MywxMyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBTaW1wbGVUeXBlX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5Q1NpbXBsZVR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBDRnVuY1B0clR5cGVfVHlwZQorICBQeUNGdW5jUHRyVHlwZV9UeXBlCiAgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxOTUsNyArMjIxNSw3IEBACiAgICAgUHlPYmplY3QgKm9iOwogICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzID0gTlVMTDsKIAotICAgIHN0Z2RpY3QtPmFsaWduID0gZ2V0ZW50cnkoIlAiKS0+cGZmaV90eXBlLT5hbGlnbm1lbnQ7CisgICAgc3RnZGljdC0+YWxpZ24gPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIlAiKS0+cGZmaV90eXBlLT5hbGlnbm1lbnQ7CiAgICAgc3RnZGljdC0+bGVuZ3RoID0gMTsKICAgICBzdGdkaWN0LT5zaXplID0gc2l6ZW9mKHZvaWQgKik7CiAgICAgc3RnZGljdC0+c2V0ZnVuYyA9IE5VTEw7CkBAIC0yMjU1LDExICsyMjc1LDExIEBACiB9CiAKIHN0YXRpYyBQeUNBcmdPYmplY3QgKgotQ0Z1bmNQdHJUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKK1B5Q0Z1bmNQdHJUeXBlX3BhcmFtZnVuYyhDRGF0YU9iamVjdCAqc2VsZikKIHsKICAgICBQeUNBcmdPYmplY3QgKnBhcmc7CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMjcyLDI0ICsyMjkyLDI0IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRnVuY1B0clR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDRnVuY1B0clR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0OwogICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3Q7CiAKICAgICBzdGdkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KAotICAgICAgICAoUHlPYmplY3QgKikmU3RnRGljdF9UeXBlLCBOVUxMKTsKKyAgICAgICAgKFB5T2JqZWN0ICopJlB5Q1N0Z0RpY3RfVHlwZSwgTlVMTCk7CiAgICAgaWYgKCFzdGdkaWN0KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHN0Z2RpY3QtPnBhcmFtZnVuYyA9IENGdW5jUHRyVHlwZV9wYXJhbWZ1bmM7CisgICAgc3RnZGljdC0+cGFyYW1mdW5jID0gUHlDRnVuY1B0clR5cGVfcGFyYW1mdW5jOwogICAgIC8qIFdlIGRvIE5PVCBleHBvc2UgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gIEl0CiAgICAgICAgaXMgaW1wb3NzaWJsZSwgZ2VuZXJhbGx5LCBiZWNhdXNlIHRoZSBvbmx5IHJlcXVpcmVtZW50IGZvciB0aGUKICAgICAgICBhcmd0eXBlcyBpdGVtcyBpcyB0aGF0IHRoZXkgaGF2ZSBhIC5mcm9tX3BhcmFtIG1ldGhvZCAtIHdlIGRvIG5vdAogICAgICAgIGtub3cgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgKGFsdGhvdWdoLCBpbiBwcmFjdGljZSwgbW9zdAogICAgICAgIGFyZ3R5cGVzIHdvdWxkIGJlIGEgY3R5cGVzIHR5cGUpLgogICAgICovCi0gICAgc3RnZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiWHt9Iik7CisgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJYe30iKTsKICAgICBzdGdkaWN0LT5mbGFncyB8PSBUWVBFRkxBR19JU1BPSU5URVI7CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKQEAgLTIzMTcsOSArMjMzNyw5IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXJlc3VsdDsKIH0KIAotUHlUeXBlT2JqZWN0IENGdW5jUHRyVHlwZV9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q0Z1bmNQdHJUeXBlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9jdHlwZXMuQ0Z1bmNQdHJUeXBlIiwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgIl9jdHlwZXMuUHlDRnVuY1B0clR5cGUiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTIzNTUsNyArMjM3NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIENGdW5jUHRyVHlwZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlDRnVuY1B0clR5cGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKQEAgLTIzNjUsNyArMjM4NSw3IEBACiAgKi8KIAogc3RhdGljIENEYXRhT2JqZWN0ICoKLUNEYXRhX0dldENvbnRhaW5lcihDRGF0YU9iamVjdCAqc2VsZikKK1B5Q0RhdGFfR2V0Q29udGFpbmVyKENEYXRhT2JqZWN0ICpzZWxmKQogewogICAgIHdoaWxlIChzZWxmLT5iX2Jhc2UpCiAgICAgICAgIHNlbGYgPSBzZWxmLT5iX2Jhc2U7CkBAIC0yMzgzLDcgKzI0MDMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEdldEtlZXBlZE9iamVjdHMoQ0RhdGFPYmplY3QgKnRhcmdldCkKIHsKLSAgICByZXR1cm4gQ0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCktPmJfb2JqZWN0czsKKyAgICByZXR1cm4gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KS0+Yl9vYmplY3RzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQ0Nyw3ICsyNDY3LDcgQEAKICAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgb2IgPSBDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKKyAgICBvYiA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CiAgICAgaWYgKG9iLT5iX29iamVjdHMgPT0gTlVMTCB8fCAhUHlEaWN0X0NoZWNrRXhhY3Qob2ItPmJfb2JqZWN0cykpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYi0+Yl9vYmplY3RzKTsKICAgICAgICAgb2ItPmJfb2JqZWN0cyA9IGtlZXA7IC8qIHJlZmNvdW50IGNvbnN1bWVkICovCkBAIC0yNDY2LDEwICsyNDg2LDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBDRGF0YV9UeXBlCisgIFB5Q0RhdGFfVHlwZQogICovCiBzdGF0aWMgaW50Ci1DRGF0YV90cmF2ZXJzZShDRGF0YU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCitQeUNEYXRhX3RyYXZlcnNlKENEYXRhT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKICAgICBQeV9WSVNJVChzZWxmLT5iX29iamVjdHMpOwogICAgIFB5X1ZJU0lUKChQeU9iamVjdCAqKXNlbGYtPmJfYmFzZSk7CkBAIC0yNDc3LDcgKzI0OTcsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1DRGF0YV9jbGVhcihDRGF0YU9iamVjdCAqc2VsZikKK1B5Q0RhdGFfY2xlYXIoQ0RhdGFPYmplY3QgKnNlbGYpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5T2JqZWN0X3N0Z2RpY3QoKFB5T2JqZWN0ICopc2VsZik7CiAgICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgQ0RhdGFPYmplY3QgaW5zdGFuY2VzICovCkBAIC0yNDkxLDEzICsyNTExLDEzIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1DRGF0YV9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQorUHlDRGF0YV9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQogewotICAgIENEYXRhX2NsZWFyKChDRGF0YU9iamVjdCAqKXNlbGYpOworICAgIFB5Q0RhdGFfY2xlYXIoKENEYXRhT2JqZWN0ICopc2VsZik7CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIAotc3RhdGljIFB5TWVtYmVyRGVmIENEYXRhX21lbWJlcnNbXSA9IHsKK3N0YXRpYyBQeU1lbWJlckRlZiBQeUNEYXRhX21lbWJlcnNbXSA9IHsKICAgICB7ICJfYl9iYXNlXyIsIFRfT0JKRUNULAogICAgICAgb2Zmc2V0b2YoQ0RhdGFPYmplY3QsIGJfYmFzZSksIFJFQURPTkxZLAogICAgICAgInRoZSBiYXNlIG9iamVjdCIgfSwKQEAgLTI1MTEsNyArMjUzMSw3IEBACiB9OwogCiAjaWYgKFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNjAwMDApCi1zdGF0aWMgaW50IENEYXRhX05ld0dldEJ1ZmZlcihQeU9iamVjdCAqX3NlbGYsIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQorc3RhdGljIGludCBQeUNEYXRhX05ld0dldEJ1ZmZlcihQeU9iamVjdCAqX3NlbGYsIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQogewogICAgIENEYXRhT2JqZWN0ICpzZWxmID0gKENEYXRhT2JqZWN0ICopX3NlbGY7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5T2JqZWN0X3N0Z2RpY3QoX3NlbGYpOwpAQCAtMjUzOSwxNCArMjU1OSwxNCBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBQeV9zc2l6ZV90IENEYXRhX0dldFNlZ2NvdW50KFB5T2JqZWN0ICpfc2VsZiwgUHlfc3NpemVfdCAqbGVucCkKK3N0YXRpYyBQeV9zc2l6ZV90IFB5Q0RhdGFfR2V0U2VnY291bnQoUHlPYmplY3QgKl9zZWxmLCBQeV9zc2l6ZV90ICpsZW5wKQogewogICAgIGlmIChsZW5wKQogICAgICAgICAqbGVucCA9IDE7CiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBQeV9zc2l6ZV90IENEYXRhX0dldEJ1ZmZlcihQeU9iamVjdCAqX3NlbGYsIFB5X3NzaXplX3Qgc2VnLCB2b2lkICoqcHB0cikKK3N0YXRpYyBQeV9zc2l6ZV90IFB5Q0RhdGFfR2V0QnVmZmVyKFB5T2JqZWN0ICpfc2VsZiwgUHlfc3NpemVfdCBzZWcsIHZvaWQgKipwcHRyKQogewogICAgIENEYXRhT2JqZWN0ICpzZWxmID0gKENEYXRhT2JqZWN0ICopX3NlbGY7CiAgICAgaWYgKHNlZyAhPSAwKSB7CkBAIC0yNTU3LDEzICsyNTc3LDEzIEBACiAgICAgcmV0dXJuIHNlbGYtPmJfc2l6ZTsKIH0KIAotc3RhdGljIFB5QnVmZmVyUHJvY3MgQ0RhdGFfYXNfYnVmZmVyID0gewotICAgIChyZWFkYnVmZmVycHJvYylDRGF0YV9HZXRCdWZmZXIsCi0gICAgKHdyaXRlYnVmZmVycHJvYylDRGF0YV9HZXRCdWZmZXIsCi0gICAgKHNlZ2NvdW50cHJvYylDRGF0YV9HZXRTZWdjb3VudCwKK3N0YXRpYyBQeUJ1ZmZlclByb2NzIFB5Q0RhdGFfYXNfYnVmZmVyID0geworICAgIChyZWFkYnVmZmVycHJvYylQeUNEYXRhX0dldEJ1ZmZlciwKKyAgICAod3JpdGVidWZmZXJwcm9jKVB5Q0RhdGFfR2V0QnVmZmVyLAorICAgIChzZWdjb3VudHByb2MpUHlDRGF0YV9HZXRTZWdjb3VudCwKICAgICAoY2hhcmJ1ZmZlcnByb2MpTlVMTCwKICNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA2MDAwMCkKLSAgICAoZ2V0YnVmZmVycHJvYylDRGF0YV9OZXdHZXRCdWZmZXIsCisgICAgKGdldGJ1ZmZlcnByb2MpUHlDRGF0YV9OZXdHZXRCdWZmZXIsCiAgICAgKHJlbGVhc2VidWZmZXJwcm9jKU5VTEwsCiAjZW5kaWYKIH07CkBAIC0yNTcyLDE0ICsyNTkyLDE0IEBACiAgKiBDRGF0YSBvYmplY3RzIGFyZSBtdXRhYmxlLCBzbyB0aGV5IGNhbm5vdCBiZSBoYXNoYWJsZSEKICAqLwogc3RhdGljIGxvbmcKLUNEYXRhX25vaGFzaChQeU9iamVjdCAqc2VsZikKK1B5Q0RhdGFfbm9oYXNoKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ1bmhhc2hhYmxlIHR5cGUiKTsKICAgICByZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRGF0YV9yZWR1Y2UoUHlPYmplY3QgKl9zZWxmLCBQeU9iamVjdCAqYXJncykKK1B5Q0RhdGFfcmVkdWNlKFB5T2JqZWN0ICpfc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnNlbGYgPSAoQ0RhdGFPYmplY3QgKilfc2VsZjsKIApAQCAtMjU5Niw3ICsyNjE2LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNEYXRhX3NldHN0YXRlKFB5T2JqZWN0ICpfc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitQeUNEYXRhX3NldHN0YXRlKFB5T2JqZWN0ICpfc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTI2MjEsMjUgKzI2NDEsMjUgQEAKICAqIGRlZmF1bHQgX19jdHlwZXNfZnJvbV9vdXRwYXJhbV9fIG1ldGhvZCByZXR1cm5zIHNlbGYuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1DRGF0YV9mcm9tX291dHBhcmFtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1B5Q0RhdGFfZnJvbV9vdXRwYXJhbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiBzZWxmOwogfQogCi1zdGF0aWMgUHlNZXRob2REZWYgQ0RhdGFfbWV0aG9kc1tdID0gewotICAgIHsgIl9fY3R5cGVzX2Zyb21fb3V0cGFyYW1fXyIsIENEYXRhX2Zyb21fb3V0cGFyYW0sIE1FVEhfTk9BUkdTLCB9LAotICAgIHsgIl9fcmVkdWNlX18iLCBDRGF0YV9yZWR1Y2UsIE1FVEhfTk9BUkdTLCB9LAotICAgIHsgIl9fc2V0c3RhdGVfXyIsIENEYXRhX3NldHN0YXRlLCBNRVRIX1ZBUkFSR1MsIH0sCitzdGF0aWMgUHlNZXRob2REZWYgUHlDRGF0YV9tZXRob2RzW10gPSB7CisgICAgeyAiX19jdHlwZXNfZnJvbV9vdXRwYXJhbV9fIiwgUHlDRGF0YV9mcm9tX291dHBhcmFtLCBNRVRIX05PQVJHUywgfSwKKyAgICB7ICJfX3JlZHVjZV9fIiwgUHlDRGF0YV9yZWR1Y2UsIE1FVEhfTk9BUkdTLCB9LAorICAgIHsgIl9fc2V0c3RhdGVfXyIsIFB5Q0RhdGFfc2V0c3RhdGUsIE1FVEhfVkFSQVJHUywgfSwKICAgICB7IE5VTEwsIE5VTEwgfSwKIH07CiAKLVB5VHlwZU9iamVjdCBDRGF0YV9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q0RhdGFfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2N0eXBlcy5fQ0RhdGEiLAogICAgIHNpemVvZihDRGF0YU9iamVjdCksICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwotICAgIENEYXRhX2RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIFB5Q0RhdGFfZGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwpAQCAtMjY0OCwyMiArMjY2OCwyMiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwotICAgIENEYXRhX25vaGFzaCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIFB5Q0RhdGFfbm9oYXNoLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAmQ0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgICZQeUNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCiAgICAgIlhYWCB0byBiZSBwcm92aWRlZCIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpQ0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgICh0cmF2ZXJzZXByb2MpUHlDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlQeUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgQ0RhdGFfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCi0gICAgQ0RhdGFfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgUHlDRGF0YV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBQeUNEYXRhX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCkBAIC0yNjc2LDcgKzI2OTYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAotc3RhdGljIGludCBDRGF0YV9NYWxsb2NCdWZmZXIoQ0RhdGFPYmplY3QgKm9iaiwgU3RnRGljdE9iamVjdCAqZGljdCkKK3N0YXRpYyBpbnQgUHlDRGF0YV9NYWxsb2NCdWZmZXIoQ0RhdGFPYmplY3QgKm9iaiwgU3RnRGljdE9iamVjdCAqZGljdCkKIHsKICAgICBpZiAoKHNpemVfdClkaWN0LT5zaXplIDw9IHNpemVvZihvYmotPmJfdmFsdWUpKSB7CiAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2FsbCBtYWxsb2MsIGNhbiB1c2UgdGhlIGRlZmF1bHQgYnVmZmVyICovCkBAIC0yNzA1LDcgKzI3MjUsNyBAQAogfQogCiBQeU9iamVjdCAqCi1DRGF0YV9Gcm9tQmFzZU9iaihQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2UsIFB5X3NzaXplX3QgaW5kZXgsIGNoYXIgKmFkcikKK1B5Q0RhdGFfRnJvbUJhc2VPYmooUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlLCBQeV9zc2l6ZV90IGluZGV4LCBjaGFyICphZHIpCiB7CiAgICAgQ0RhdGFPYmplY3QgKmNtZW07CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKQEAgLTI3MzMsNyArMjc1Myw3IEBACiAgICAgICAgIGNtZW0tPmJfYmFzZSA9IChDRGF0YU9iamVjdCAqKWJhc2U7CiAgICAgICAgIGNtZW0tPmJfaW5kZXggPSBpbmRleDsKICAgICB9IGVsc2UgeyAvKiBjb3B5IGNvbnRlbnRzIG9mIGFkciAqLwotICAgICAgICBpZiAoLTEgPT0gQ0RhdGFfTWFsbG9jQnVmZmVyKGNtZW0sIGRpY3QpKSB7CisgICAgICAgIGlmICgtMSA9PSBQeUNEYXRhX01hbGxvY0J1ZmZlcihjbWVtLCBkaWN0KSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBQeV9ERUNSRUYoY21lbSk7CiAgICAgICAgIH0KQEAgLTI3NDcsNyArMjc2Nyw3IEBACiAgQm94IGEgbWVtb3J5IGJsb2NrIGludG8gYSBDRGF0YSBpbnN0YW5jZS4KICovCiBQeU9iamVjdCAqCi1DRGF0YV9BdEFkZHJlc3MoUHlPYmplY3QgKnR5cGUsIHZvaWQgKmJ1ZikKK1B5Q0RhdGFfQXRBZGRyZXNzKFB5T2JqZWN0ICp0eXBlLCB2b2lkICpidWYpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnBkOwogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CkBAIC0yNzc2LDE3ICsyNzk2LDE3IEBACiAgIGNsYXNzZXMuICBGQUxTRSBvdGhlcndpc2UgRkFMU0UgYWxzbyBmb3Igc3ViY2xhc3NlcyBvZiBjX2ludCBhbmQKICAgc3VjaC4KICovCi1pbnQgSXNTaW1wbGVTdWJUeXBlKFB5T2JqZWN0ICpvYmopCitpbnQgX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeVR5cGVPYmplY3QgKnR5cGUgPSAoUHlUeXBlT2JqZWN0ICopb2JqOwogCi0gICAgaWYgKFNpbXBsZVR5cGVPYmplY3RfQ2hlY2sodHlwZSkpCisgICAgaWYgKFB5Q1NpbXBsZVR5cGVPYmplY3RfQ2hlY2sodHlwZSkpCiAgICAgICAgIHJldHVybiB0eXBlLT50cF9iYXNlICE9ICZTaW1wbGVfVHlwZTsKICAgICByZXR1cm4gMDsKIH0KIAogUHlPYmplY3QgKgotQ0RhdGFfZ2V0KFB5T2JqZWN0ICp0eXBlLCBHRVRGVU5DIGdldGZ1bmMsIFB5T2JqZWN0ICpzcmMsCitQeUNEYXRhX2dldChQeU9iamVjdCAqdHlwZSwgR0VURlVOQyBnZXRmdW5jLCBQeU9iamVjdCAqc3JjLAogICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIFB5X3NzaXplX3Qgc2l6ZSwgY2hhciAqYWRyKQogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CkBAIC0yNzk0LDE2ICsyODE0LDE2IEBACiAgICAgICAgIHJldHVybiBnZXRmdW5jKGFkciwgc2l6ZSk7CiAgICAgYXNzZXJ0KHR5cGUpOwogICAgIGRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKLSAgICBpZiAoZGljdCAmJiBkaWN0LT5nZXRmdW5jICYmICFJc1NpbXBsZVN1YlR5cGUodHlwZSkpCisgICAgaWYgKGRpY3QgJiYgZGljdC0+Z2V0ZnVuYyAmJiAhX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UodHlwZSkpCiAgICAgICAgIHJldHVybiBkaWN0LT5nZXRmdW5jKGFkciwgc2l6ZSk7Ci0gICAgcmV0dXJuIENEYXRhX0Zyb21CYXNlT2JqKHR5cGUsIHNyYywgaW5kZXgsIGFkcik7CisgICAgcmV0dXJuIFB5Q0RhdGFfRnJvbUJhc2VPYmoodHlwZSwgc3JjLCBpbmRleCwgYWRyKTsKIH0KIAogLyoKLSAgSGVscGVyIGZ1bmN0aW9uIGZvciBDRGF0YV9zZXQgYmVsb3cuCisgIEhlbHBlciBmdW5jdGlvbiBmb3IgUHlDRGF0YV9zZXQgYmVsb3cuCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLV9DRGF0YV9zZXQoQ0RhdGFPYmplY3QgKmRzdCwgUHlPYmplY3QgKnR5cGUsIFNFVEZVTkMgc2V0ZnVuYywgUHlPYmplY3QgKnZhbHVlLAorX1B5Q0RhdGFfc2V0KENEYXRhT2JqZWN0ICpkc3QsIFB5T2JqZWN0ICp0eXBlLCBTRVRGVU5DIHNldGZ1bmMsIFB5T2JqZWN0ICp2YWx1ZSwKICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLCBjaGFyICpwdHIpCiB7CiAgICAgQ0RhdGFPYmplY3QgKnNyYzsKQEAgLTI4MjUsMTUgKzI4NDUsMTUgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgICAgICAgICBvYiA9IFB5T2JqZWN0X0NhbGxPYmplY3QodHlwZSwgdmFsdWUpOwogICAgICAgICAgICAgaWYgKG9iID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBFeHRlbmRfRXJyb3JfSW5mbyhQeUV4Y19SdW50aW1lRXJyb3IsICIoJXMpICIsCisgICAgICAgICAgICAgICAgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlFeGNfUnVudGltZUVycm9yLCAiKCVzKSAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gX0NEYXRhX3NldChkc3QsIHR5cGUsIHNldGZ1bmMsIG9iLAorICAgICAgICAgICAgcmVzdWx0ID0gX1B5Q0RhdGFfc2V0KGRzdCwgdHlwZSwgc2V0ZnVuYywgb2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIHB0cik7CiAgICAgICAgICAgICBQeV9ERUNSRUYob2IpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBQeV9Ob25lICYmIFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpKSB7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gUHlfTm9uZSAmJiBQeUNQb2ludGVyVHlwZU9iamVjdF9DaGVjayh0eXBlKSkgewogICAgICAgICAgICAgKih2b2lkICoqKXB0ciA9IE5VTEw7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTI4NTIsNyArMjg3Miw3IEBACiAgICAgICAgICAgICAgICBzcmMtPmJfcHRyLAogICAgICAgICAgICAgICAgc2l6ZSk7CiAKLSAgICAgICAgaWYgKFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpKQorICAgICAgICBpZiAoUHlDUG9pbnRlclR5cGVPYmplY3RfQ2hlY2sodHlwZSkpCiAgICAgICAgICAgICAvKiBYWFggKi87CiAKICAgICAgICAgdmFsdWUgPSBHZXRLZWVwZWRPYmplY3RzKHNyYyk7CkBAIC0yODYwLDcgKzI4ODAsNyBAQAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgaWYgKFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpCisgICAgaWYgKFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpCiAgICAgICAgICYmIEFycmF5T2JqZWN0X0NoZWNrKHZhbHVlKSkgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICpwMSwgKnAyOwogICAgICAgICBQeU9iamVjdCAqa2VlcDsKQEAgLTI5MDEsNyArMjkyMSw3IEBACiAgKiB0byB0aGUgdmFsdWUgJ3ZhbHVlJy4KICAqLwogaW50Ci1DRGF0YV9zZXQoUHlPYmplY3QgKmRzdCwgUHlPYmplY3QgKnR5cGUsIFNFVEZVTkMgc2V0ZnVuYywgUHlPYmplY3QgKnZhbHVlLAorUHlDRGF0YV9zZXQoUHlPYmplY3QgKmRzdCwgUHlPYmplY3QgKnR5cGUsIFNFVEZVTkMgc2V0ZnVuYywgUHlPYmplY3QgKnZhbHVlLAogICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIFB5X3NzaXplX3Qgc2l6ZSwgY2hhciAqcHRyKQogewogICAgIENEYXRhT2JqZWN0ICptZW0gPSAoQ0RhdGFPYmplY3QgKilkc3Q7CkBAIC0yOTEzLDcgKzI5MzMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gX0NEYXRhX3NldChtZW0sIHR5cGUsIHNldGZ1bmMsIHZhbHVlLAorICAgIHJlc3VsdCA9IF9QeUNEYXRhX3NldChtZW0sIHR5cGUsIHNldGZ1bmMsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgcHRyKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI5MjcsNyArMjk0Nyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgUHlPYmplY3QgKgotR2VuZXJpY0NEYXRhX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK0dlbmVyaWNQeUNEYXRhX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBDRGF0YU9iamVjdCAqb2JqOwogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CkBAIC0yOTQ5LDcgKzI5NjksNyBAQAogICAgIG9iai0+Yl9vYmplY3RzID0gTlVMTDsKICAgICBvYmotPmJfbGVuZ3RoID0gZGljdC0+bGVuZ3RoOwogCi0gICAgaWYgKC0xID09IENEYXRhX01hbGxvY0J1ZmZlcihvYmosIGRpY3QpKSB7CisgICAgaWYgKC0xID09IFB5Q0RhdGFfTWFsbG9jQnVmZmVyKG9iaiwgZGljdCkpIHsKICAgICAgICAgUHlfREVDUkVGKG9iaik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI5NTcsMTEgKzI5NzcsMTEgQEAKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gIENGdW5jUHRyX1R5cGUKKyAgUHlDRnVuY1B0cl9UeXBlCiAqLwogCiBzdGF0aWMgaW50Ci1DRnVuY1B0cl9zZXRfZXJyY2hlY2soQ0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKK1B5Q0Z1bmNQdHJfc2V0X2VycmNoZWNrKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKIHsKICAgICBpZiAob2IgJiYgIVB5Q2FsbGFibGVfQ2hlY2sob2IpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC0yOTc1LDcgKzI5OTUsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfZ2V0X2VycmNoZWNrKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9nZXRfZXJyY2hlY2soUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+ZXJyY2hlY2spIHsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmVycmNoZWNrKTsKQEAgLTI5ODYsNyArMzAwNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLUNGdW5jUHRyX3NldF9yZXN0eXBlKENGdW5jUHRyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2IpCitQeUNGdW5jUHRyX3NldF9yZXN0eXBlKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKIHsKICAgICBpZiAob2IgPT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKHNlbGYtPnJlc3R5cGUpOwpAQCAtMzAxMSw3ICszMDMxLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX2dldF9yZXN0eXBlKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9nZXRfcmVzdHlwZShQeUNGdW5jUHRyT2JqZWN0ICpzZWxmKQogewogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgaWYgKHNlbGYtPnJlc3R5cGUpIHsKQEAgLTMwMTksNyArMzAzOSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLT5yZXN0eXBlOwogICAgIH0KICAgICBkaWN0ID0gUHlPYmplY3Rfc3RnZGljdCgoUHlPYmplY3QgKilzZWxmKTsKLSAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBDRnVuY1B0ck9iamVjdCBpbnN0YW5jZXMgKi8KKyAgICBhc3NlcnQoZGljdCk7IC8qIENhbm5vdCBiZSBOVUxMIGZvciBQeUNGdW5jUHRyT2JqZWN0IGluc3RhbmNlcyAqLwogICAgIGlmIChkaWN0LT5yZXN0eXBlKSB7CiAgICAgICAgIFB5X0lOQ1JFRihkaWN0LT5yZXN0eXBlKTsKICAgICAgICAgcmV0dXJuIGRpY3QtPnJlc3R5cGU7CkBAIC0zMDMwLDcgKzMwNTAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1DRnVuY1B0cl9zZXRfYXJndHlwZXMoQ0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKK1B5Q0Z1bmNQdHJfc2V0X2FyZ3R5cGVzKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYikKIHsKICAgICBQeU9iamVjdCAqY29udmVydGVyczsKIApAQCAtMzA1Myw3ICszMDczLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX2dldF9hcmd0eXBlcyhDRnVuY1B0ck9iamVjdCAqc2VsZikKK1B5Q0Z1bmNQdHJfZ2V0X2FyZ3R5cGVzKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYpCiB7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdDsKICAgICBpZiAoc2VsZi0+YXJndHlwZXMpIHsKQEAgLTMwNjEsNyArMzA4MSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLT5hcmd0eXBlczsKICAgICB9CiAgICAgZGljdCA9IFB5T2JqZWN0X3N0Z2RpY3QoKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgQ0Z1bmNQdHJPYmplY3QgaW5zdGFuY2VzICovCisgICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgUHlDRnVuY1B0ck9iamVjdCBpbnN0YW5jZXMgKi8KICAgICBpZiAoZGljdC0+YXJndHlwZXMpIHsKICAgICAgICAgUHlfSU5DUkVGKGRpY3QtPmFyZ3R5cGVzKTsKICAgICAgICAgcmV0dXJuIGRpY3QtPmFyZ3R5cGVzOwpAQCAtMzA3MSwxMyArMzA5MSwxMyBAQAogICAgIH0KIH0KIAotc3RhdGljIFB5R2V0U2V0RGVmIENGdW5jUHRyX2dldHNldHNbXSA9IHsKLSAgICB7ICJlcnJjaGVjayIsIChnZXR0ZXIpQ0Z1bmNQdHJfZ2V0X2VycmNoZWNrLCAoc2V0dGVyKUNGdW5jUHRyX3NldF9lcnJjaGVjaywKK3N0YXRpYyBQeUdldFNldERlZiBQeUNGdW5jUHRyX2dldHNldHNbXSA9IHsKKyAgICB7ICJlcnJjaGVjayIsIChnZXR0ZXIpUHlDRnVuY1B0cl9nZXRfZXJyY2hlY2ssIChzZXR0ZXIpUHlDRnVuY1B0cl9zZXRfZXJyY2hlY2ssCiAgICAgICAiYSBmdW5jdGlvbiB0byBjaGVjayBmb3IgZXJyb3JzIiwgTlVMTCB9LAotICAgIHsgInJlc3R5cGUiLCAoZ2V0dGVyKUNGdW5jUHRyX2dldF9yZXN0eXBlLCAoc2V0dGVyKUNGdW5jUHRyX3NldF9yZXN0eXBlLAorICAgIHsgInJlc3R5cGUiLCAoZ2V0dGVyKVB5Q0Z1bmNQdHJfZ2V0X3Jlc3R5cGUsIChzZXR0ZXIpUHlDRnVuY1B0cl9zZXRfcmVzdHlwZSwKICAgICAgICJzcGVjaWZ5IHRoZSByZXN1bHQgdHlwZSIsIE5VTEwgfSwKLSAgICB7ICJhcmd0eXBlcyIsIChnZXR0ZXIpQ0Z1bmNQdHJfZ2V0X2FyZ3R5cGVzLAotICAgICAgKHNldHRlcilDRnVuY1B0cl9zZXRfYXJndHlwZXMsCisgICAgeyAiYXJndHlwZXMiLCAoZ2V0dGVyKVB5Q0Z1bmNQdHJfZ2V0X2FyZ3R5cGVzLAorICAgICAgKHNldHRlcilQeUNGdW5jUHRyX3NldF9hcmd0eXBlcywKICAgICAgICJzcGVjaWZ5IHRoZSBhcmd1bWVudCB0eXBlcyIsIE5VTEwgfSwKICAgICB7IE5VTEwsIE5VTEwgfQogfTsKQEAgLTMxMzIsMTAgKzMxNTIsMTAgQEAKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogCi0gICAgaWYgKFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKGFyZykpCisgICAgaWYgKFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKGFyZykpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgaWYgKEFycmF5VHlwZU9iamVjdF9DaGVjayhhcmcpKQorICAgIGlmIChQeUNBcnJheVR5cGVPYmplY3RfQ2hlY2soYXJnKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICBkaWN0ID0gUHlUeXBlX3N0Z2RpY3QoYXJnKTsKQEAgLTMxNjUsNyArMzE4NSw3IEBACiAgICAgUHlPYmplY3QgKmFyZ3R5cGVzOwogCiAgICAgZGljdCA9IFB5VHlwZV9zdGdkaWN0KChQeU9iamVjdCAqKXR5cGUpOwotICAgIGFzc2VydChkaWN0KTsgLyogQ2Fubm90IGJlIE5VTEwuICd0eXBlJyBpcyBhIENGdW5jUHRyIHR5cGUuICovCisgICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTC4gJ3R5cGUnIGlzIGEgUHlDRnVuY1B0ciB0eXBlLiAqLwogICAgIGFyZ3R5cGVzID0gZGljdC0+YXJndHlwZXM7CiAKICAgICBpZiAocGFyYW1mbGFncyA9PSBOVUxMIHx8IGRpY3QtPmFyZ3R5cGVzID09IE5VTEwpCkBAIC0zMjM5LDEzICszMjU5LDEzIEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX0Zyb21EbGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNGdW5jUHRyX0Zyb21EbGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgY2hhciAqbmFtZTsKICAgICBpbnQgKCogYWRkcmVzcykodm9pZCk7CiAgICAgUHlPYmplY3QgKmRsbDsKICAgICBQeU9iamVjdCAqb2JqOwotICAgIENGdW5jUHRyT2JqZWN0ICpzZWxmOworICAgIFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGY7CiAgICAgdm9pZCAqaGFuZGxlOwogICAgIFB5T2JqZWN0ICpwYXJhbWZsYWdzID0gTlVMTDsKIApAQCAtMzMwMSw3ICszMzIxLDcgQEAKICAgICBpZiAoIV92YWxpZGF0ZV9wYXJhbWZsYWdzKHR5cGUsIHBhcmFtZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYgPSAoQ0Z1bmNQdHJPYmplY3QgKilHZW5lcmljQ0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgIHNlbGYgPSAoUHlDRnVuY1B0ck9iamVjdCAqKUdlbmVyaWNQeUNEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zMzIzLDkgKzMzNDMsOSBAQAogCiAjaWZkZWYgTVNfV0lOMzIKIHN0YXRpYyBQeU9iamVjdCAqCi1DRnVuY1B0cl9Gcm9tVnRibEluZGV4KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDRnVuY1B0cl9Gcm9tVnRibEluZGV4KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIENGdW5jUHRyT2JqZWN0ICpzZWxmOworICAgIFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGY7CiAgICAgaW50IGluZGV4OwogICAgIGNoYXIgKm5hbWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpwYXJhbWZsYWdzID0gTlVMTDsKQEAgLTMzNDAsNyArMzM2MCw3IEBACiAgICAgaWYgKCFfdmFsaWRhdGVfcGFyYW1mbGFncyh0eXBlLCBwYXJhbWZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmID0gKENGdW5jUHRyT2JqZWN0ICopR2VuZXJpY0NEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICBzZWxmID0gKFB5Q0Z1bmNQdHJPYmplY3QgKilHZW5lcmljUHlDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgc2VsZi0+aW5kZXggPSBpbmRleCArIDB4MTAwMDsKICAgICBQeV9YSU5DUkVGKHBhcmFtZmxhZ3MpOwogICAgIHNlbGYtPnBhcmFtZmxhZ3MgPSBwYXJhbWZsYWdzOwpAQCAtMzM1MSw3ICszMzcxLDcgQEAKICNlbmRpZgogCiAvKgotICBDRnVuY1B0cl9uZXcgYWNjZXB0cyBkaWZmZXJlbnQgYXJndW1lbnQgbGlzdHMgaW4gYWRkaXRpb24gdG8gdGhlIHN0YW5kYXJkCisgIFB5Q0Z1bmNQdHJfbmV3IGFjY2VwdHMgZGlmZmVyZW50IGFyZ3VtZW50IGxpc3RzIGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZAogICBfYmFzZXNwZWNfIGtleXdvcmQgYXJnOgogCiAgIG9uZSBhcmd1bWVudCBmb3JtCkBAIC0zMzY0LDIyICszMzg0LDIyIEBACiAgICJpc3wuLi4iIC0gdnRhYmxlIGluZGV4LCBtZXRob2QgbmFtZSwgY3JlYXRlcyBjYWxsYWJsZSBjYWxsaW5nIENPTSB2dGJsCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLUNGdW5jUHRyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK1B5Q0Z1bmNQdHJfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIENGdW5jUHRyT2JqZWN0ICpzZWxmOworICAgIFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGY7CiAgICAgUHlPYmplY3QgKmNhbGxhYmxlOwogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3Q7CiAgICAgQ1RodW5rT2JqZWN0ICp0aHVuazsKIAogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpID09IDApCi0gICAgICAgIHJldHVybiBHZW5lcmljQ0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgICAgICByZXR1cm4gR2VuZXJpY1B5Q0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOwogCiAgICAgaWYgKDEgPD0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAmJiBQeVR1cGxlX0NoZWNrKFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCkpKQotICAgICAgICByZXR1cm4gQ0Z1bmNQdHJfRnJvbURsbCh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgcmV0dXJuIFB5Q0Z1bmNQdHJfRnJvbURsbCh0eXBlLCBhcmdzLCBrd2RzKTsKIAogI2lmZGVmIE1TX1dJTjMyCiAgICAgaWYgKDIgPD0gUHlUdXBsZV9HRVRfU0laRShhcmdzKSAmJiBQeUludF9DaGVjayhQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApKSkKLSAgICAgICAgcmV0dXJuIENGdW5jUHRyX0Zyb21WdGJsSW5kZXgodHlwZSwgYXJncywga3dkcyk7CisgICAgICAgIHJldHVybiBQeUNGdW5jUHRyX0Zyb21WdGJsSW5kZXgodHlwZSwgYXJncywga3dkcyk7CiAjZW5kaWYKIAogICAgIGlmICgxID09IFB5VHVwbGVfR0VUX1NJWkUoYXJncykKQEAgLTMzODksNyArMzQwOSw3IEBACiAgICAgICAgIHZvaWQgKnB0ciA9IFB5TG9uZ19Bc1ZvaWRQdHIoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSk7CiAgICAgICAgIGlmIChwdHIgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIG9iID0gKENEYXRhT2JqZWN0ICopR2VuZXJpY0NEYXRhX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgb2IgPSAoQ0RhdGFPYmplY3QgKilHZW5lcmljUHlDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgICAgIGlmIChvYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICoodm9pZCAqKilvYi0+Yl9wdHIgPSBwdHI7CkBAIC0zNDE4LDcgKzM0MzgsNyBAQAogKi8KIAogICAgIGRpY3QgPSBQeVR5cGVfc3RnZGljdCgoUHlPYmplY3QgKil0eXBlKTsKLSAgICAvKiBYWFhYIEZhaWxzIGlmIHdlIGRvOiAnQ0Z1bmNQdHIobGFtYmRhIHg6IHgpJyAqLworICAgIC8qIFhYWFggRmFpbHMgaWYgd2UgZG86ICdQeUNGdW5jUHRyKGxhbWJkYSB4OiB4KScgKi8KICAgICBpZiAoIWRpY3QgfHwgIWRpY3QtPmFyZ3R5cGVzKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAiY2Fubm90IGNvbnN0cnVjdCBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzOiIKQEAgLTM0MjYsMTQgKzM0NDYsMTQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdGh1bmsgPSBBbGxvY0Z1bmN0aW9uQ2FsbGJhY2soY2FsbGFibGUsCisgICAgdGh1bmsgPSBfY3R5cGVzX2FsbG9jX2NhbGxiYWNrKGNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmFyZ3R5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPnJlc3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+ZmxhZ3MpOwogICAgIGlmICghdGh1bmspCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IChDRnVuY1B0ck9iamVjdCAqKUdlbmVyaWNDRGF0YV9uZXcodHlwZSwgYXJncywga3dkcyk7CisgICAgc2VsZiA9IChQeUNGdW5jUHRyT2JqZWN0ICopR2VuZXJpY1B5Q0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHRodW5rKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNDQzLDcgKzM0NjMsNyBAQAogICAgIHNlbGYtPmNhbGxhYmxlID0gY2FsbGFibGU7CiAKICAgICBzZWxmLT50aHVuayA9IHRodW5rOwotICAgICoodm9pZCAqKilzZWxmLT5iX3B0ciA9ICh2b2lkICopdGh1bmstPnBjbDsKKyAgICAqKHZvaWQgKiopc2VsZi0+Yl9wdHIgPSAodm9pZCAqKXRodW5rLT5wY2xfZXhlYzsKIAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKil0aHVuayk7IC8qIGZvciBLZWVwUmVmICovCiAgICAgaWYgKC0xID09IEtlZXBSZWYoKENEYXRhT2JqZWN0ICopc2VsZiwgMCwgKFB5T2JqZWN0ICopdGh1bmspKSB7CkBAIC0zNDY3LDcgKzM0ODcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKG9iaik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzUyOSw3ICszNTQ5LDcgQEAKICBmdW5jdGlvbi4KICovCiBzdGF0aWMgUHlPYmplY3QgKgotX2J1aWxkX2NhbGxhcmdzKENGdW5jUHRyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJndHlwZXMsCitfYnVpbGRfY2FsbGFyZ3MoUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3R5cGVzLAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppbmFyZ3MsIFB5T2JqZWN0ICprd2RzLAogICAgICAgICAgICAgICAgIGludCAqcG91dG1hc2ssIGludCAqcGlub3V0bWFzaywgdW5zaWduZWQgaW50ICpwbnVtcmV0dmFscykKIHsKQEAgLTM2NDEsNyArMzY2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopb2IpLT50cF9uYW1lKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKEFycmF5VHlwZU9iamVjdF9DaGVjayhvYikpCisgICAgICAgICAgICBpZiAoUHlDQXJyYXlUeXBlT2JqZWN0X0NoZWNrKG9iKSkKICAgICAgICAgICAgICAgICBvYiA9IFB5T2JqZWN0X0NhbGxPYmplY3Qob2IsIE5VTEwpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIC8qIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgcG9pbnRlZC10byB0eXBlICovCkBAIC0zNzYxLDcgKzM3ODEsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0Z1bmNQdHJfY2FsbChDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNGdW5jUHRyX2NhbGwoUHlDRnVuY1B0ck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKnJlc3R5cGU7CiAgICAgUHlPYmplY3QgKmNvbnZlcnRlcnM7CkBAIC0zNzgwLDcgKzM4MDAsNyBAQAogICAgIGludCBvdXRtYXNrOwogICAgIHVuc2lnbmVkIGludCBudW1yZXR2YWxzOwogCi0gICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgQ0Z1bmNQdHJPYmplY3QgaW5zdGFuY2VzICovCisgICAgYXNzZXJ0KGRpY3QpOyAvKiBDYW5ub3QgYmUgTlVMTCBmb3IgUHlDRnVuY1B0ck9iamVjdCBpbnN0YW5jZXMgKi8KICAgICByZXN0eXBlID0gc2VsZi0+cmVzdHlwZSA/IHNlbGYtPnJlc3R5cGUgOiBkaWN0LT5yZXN0eXBlOwogICAgIGNvbnZlcnRlcnMgPSBzZWxmLT5jb252ZXJ0ZXJzID8gc2VsZi0+Y29udmVydGVycyA6IGRpY3QtPmNvbnZlcnRlcnM7CiAgICAgY2hlY2tlciA9IHNlbGYtPmNoZWNrZXIgPyBzZWxmLT5jaGVja2VyIDogZGljdC0+Y2hlY2tlcjsKQEAgLTM4NTcsNyArMzg3Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHQgPSBfQ2FsbFByb2MocFByb2MsCisgICAgcmVzdWx0ID0gX2N0eXBlc19jYWxscHJvYyhwUHJvYywKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGFyZ3MsCiAjaWZkZWYgTVNfV0lOMzIKICAgICAgICAgICAgICAgICAgICAgICAgcGl1bmssCkBAIC0zODkzLDcgKzM5MTMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1DRnVuY1B0cl90cmF2ZXJzZShDRnVuY1B0ck9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCitQeUNGdW5jUHRyX3RyYXZlcnNlKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5X1ZJU0lUKHNlbGYtPmNhbGxhYmxlKTsKICAgICBQeV9WSVNJVChzZWxmLT5yZXN0eXBlKTsKQEAgLTM5MDMsMTEgKzM5MjMsMTEgQEAKICAgICBQeV9WSVNJVChzZWxmLT5jb252ZXJ0ZXJzKTsKICAgICBQeV9WSVNJVChzZWxmLT5wYXJhbWZsYWdzKTsKICAgICBQeV9WSVNJVChzZWxmLT50aHVuayk7Ci0gICAgcmV0dXJuIENEYXRhX3RyYXZlcnNlKChDRGF0YU9iamVjdCAqKXNlbGYsIHZpc2l0LCBhcmcpOworICAgIHJldHVybiBQeUNEYXRhX3RyYXZlcnNlKChDRGF0YU9iamVjdCAqKXNlbGYsIHZpc2l0LCBhcmcpOwogfQogCiBzdGF0aWMgaW50Ci1DRnVuY1B0cl9jbGVhcihDRnVuY1B0ck9iamVjdCAqc2VsZikKK1B5Q0Z1bmNQdHJfY2xlYXIoUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKICAgICBQeV9DTEVBUihzZWxmLT5jYWxsYWJsZSk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cmVzdHlwZSk7CkBAIC0zOTE3LDE4ICszOTM3LDE4IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+Y29udmVydGVycyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cGFyYW1mbGFncyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+dGh1bmspOwotICAgIHJldHVybiBDRGF0YV9jbGVhcigoQ0RhdGFPYmplY3QgKilzZWxmKTsKKyAgICByZXR1cm4gUHlDRGF0YV9jbGVhcigoQ0RhdGFPYmplY3QgKilzZWxmKTsKIH0KIAogc3RhdGljIHZvaWQKLUNGdW5jUHRyX2RlYWxsb2MoQ0Z1bmNQdHJPYmplY3QgKnNlbGYpCitQeUNGdW5jUHRyX2RlYWxsb2MoUHlDRnVuY1B0ck9iamVjdCAqc2VsZikKIHsKLSAgICBDRnVuY1B0cl9jbGVhcihzZWxmKTsKKyAgICBQeUNGdW5jUHRyX2NsZWFyKHNlbGYpOwogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1DRnVuY1B0cl9yZXByKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9yZXByKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYpCiB7CiAjaWZkZWYgTVNfV0lOMzIKICAgICBpZiAoc2VsZi0+aW5kZXgpCkBAIC0zOTQzLDcgKzM5NjMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1DRnVuY1B0cl9ub256ZXJvKENGdW5jUHRyT2JqZWN0ICpzZWxmKQorUHlDRnVuY1B0cl9ub256ZXJvKFB5Q0Z1bmNQdHJPYmplY3QgKnNlbGYpCiB7CiAgICAgcmV0dXJuICgoKih2b2lkICoqKXNlbGYtPmJfcHRyICE9IE5VTEwpCiAjaWZkZWYgTVNfV0lOMzIKQEAgLTM5NTIsNyArMzk3Miw3IEBACiAgICAgICAgICk7CiB9CiAKLXN0YXRpYyBQeU51bWJlck1ldGhvZHMgQ0Z1bmNQdHJfYXNfbnVtYmVyID0geworc3RhdGljIFB5TnVtYmVyTWV0aG9kcyBQeUNGdW5jUHRyX2FzX251bWJlciA9IHsKICAgICAwLCAvKiBuYl9hZGQgKi8KICAgICAwLCAvKiBuYl9zdWJ0cmFjdCAqLwogICAgIDAsIC8qIG5iX211bHRpcGx5ICovCkBAIC0zOTYzLDQwICszOTgzLDQwIEBACiAgICAgMCwgLyogbmJfbmVnYXRpdmUgKi8KICAgICAwLCAvKiBuYl9wb3NpdGl2ZSAqLwogICAgIDAsIC8qIG5iX2Fic29sdXRlICovCi0gICAgKGlucXVpcnkpQ0Z1bmNQdHJfbm9uemVybywgLyogbmJfbm9uemVybyAqLworICAgIChpbnF1aXJ5KVB5Q0Z1bmNQdHJfbm9uemVybywgLyogbmJfbm9uemVybyAqLwogfTsKIAotUHlUeXBlT2JqZWN0IENGdW5jUHRyX1R5cGUgPSB7CitQeVR5cGVPYmplY3QgUHlDRnVuY1B0cl9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfY3R5cGVzLkNGdW5jUHRyIiwKLSAgICBzaXplb2YoQ0Z1bmNQdHJPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgICJfY3R5cGVzLlB5Q0Z1bmNQdHIiLAorICAgIHNpemVvZihQeUNGdW5jUHRyT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCi0gICAgKGRlc3RydWN0b3IpQ0Z1bmNQdHJfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgKGRlc3RydWN0b3IpUHlDRnVuY1B0cl9kZWFsbG9jLCAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLwotICAgIChyZXByZnVuYylDRnVuY1B0cl9yZXByLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwotICAgICZDRnVuY1B0cl9hc19udW1iZXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgKHJlcHJmdW5jKVB5Q0Z1bmNQdHJfcmVwciwgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgJlB5Q0Z1bmNQdHJfYXNfbnVtYmVyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCi0gICAgKHRlcm5hcnlmdW5jKUNGdW5jUHRyX2NhbGwsICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgKHRlcm5hcnlmdW5jKVB5Q0Z1bmNQdHJfY2FsbCwgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiRnVuY3Rpb24gUG9pbnRlciIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0Z1bmNQdHJfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRnVuY1B0cl9jbGVhciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNGdW5jUHRyX3RyYXZlcnNlLCAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0Z1bmNQdHJfY2xlYXIsICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICBDRnVuY1B0cl9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIFB5Q0Z1bmNQdHJfZ2V0c2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KQEAgLTQwMDQsNyArNDAyNCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwotICAgIENGdW5jUHRyX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgUHlDRnVuY1B0cl9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKQEAgLTQxMzIsMTEgKzQxNTIsMTEgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgJkNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAmUHlDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLwogICAgICJTdHJ1Y3R1cmUgYmFzZSBjbGFzcyIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAodHJhdmVyc2Vwcm9jKVB5Q0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpUHlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCkBAIC00MTUxLDcgKzQxNzEsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIFN0cnVjdF9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBHZW5lcmljQ0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIEdlbmVyaWNQeUNEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCkBAIC00MTc0LDExICs0MTk0LDExIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiVW5pb24gYmFzZSBjbGFzcyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNDE5MywxNCArNDIxMywxNCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIFN0cnVjdF9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICBHZW5lcmljQ0RhdGFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIEdlbmVyaWNQeUNEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICBBcnJheV9UeXBlCisgIFB5Q0FycmF5X1R5cGUKICovCiBzdGF0aWMgaW50CiBBcnJheV9pbml0KENEYXRhT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQpAQCAtNDI0NSw3ICs0MjY1LDcgQEAKICAgICBzaXplID0gc3RnZGljdC0+c2l6ZSAvIHN0Z2RpY3QtPmxlbmd0aDsKICAgICBvZmZzZXQgPSBpbmRleCAqIHNpemU7CiAKLSAgICByZXR1cm4gQ0RhdGFfZ2V0KHN0Z2RpY3QtPnByb3RvLCBzdGdkaWN0LT5nZXRmdW5jLCAoUHlPYmplY3QgKilzZWxmLAorICAgIHJldHVybiBQeUNEYXRhX2dldChzdGdkaWN0LT5wcm90bywgc3RnZGljdC0+Z2V0ZnVuYywgKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBzaXplLCBzZWxmLT5iX3B0ciArIG9mZnNldCk7CiB9CiAKQEAgLTQyNzQsMTEgKzQyOTQsMTEgQEAKICAgICBpdGVtZGljdCA9IFB5VHlwZV9zdGdkaWN0KHByb3RvKTsKICAgICBhc3NlcnQoaXRlbWRpY3QpOyAvKiBwcm90byBpcyB0aGUgaXRlbSB0eXBlIG9mIHRoZSBhcnJheSwgYSBjdHlwZXMKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBzbyB0aGlzIGNhbm5vdCBiZSBOVUxMICovCi0gICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJjIiktPmdldGZ1bmMpIHsKKyAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPmdldGZ1bmMpIHsKICAgICAgICAgY2hhciAqcHRyID0gKGNoYXIgKilzZWxmLT5iX3B0cjsKICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHB0ciArIGlsb3csIGxlbik7CiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKLSAgICB9IGVsc2UgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMpIHsKKyAgICB9IGVsc2UgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5nZXRmdW5jKSB7CiAgICAgICAgIHdjaGFyX3QgKnB0ciA9ICh3Y2hhcl90ICopc2VsZi0+Yl9wdHI7CiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHB0ciArIGlsb3csIGxlbik7CiAjZW5kaWYKQEAgLTQzMjgsNyArNDM0OCw3IEBACiAgICAgICAgIGFzc2VydChpdGVtZGljdCk7IC8qIHByb3RvIGlzIHRoZSBpdGVtIHR5cGUgb2YgdGhlIGFycmF5LCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcyB0eXBlLCBzbyB0aGlzIGNhbm5vdCBiZSBOVUxMICovCiAKLSAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJjIiktPmdldGZ1bmMpIHsKKyAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5nZXRmdW5jKSB7CiAgICAgICAgICAgICBjaGFyICpwdHIgPSAoY2hhciAqKXNlbGYtPmJfcHRyOwogICAgICAgICAgICAgY2hhciAqZGVzdDsKIApAQCAtNDM1Myw3ICs0MzczLDcgQEAKICAgICAgICAgICAgIHJldHVybiBucDsKICAgICAgICAgfQogI2lmZGVmIENUWVBFU19VTklDT0RFCi0gICAgICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgidSIpLT5nZXRmdW5jKSB7CisgICAgICAgIGlmIChpdGVtZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+Z2V0ZnVuYykgewogICAgICAgICAgICAgd2NoYXJfdCAqcHRyID0gKHdjaGFyX3QgKilzZWxmLT5iX3B0cjsKICAgICAgICAgICAgIHdjaGFyX3QgKmRlc3Q7CiAKQEAgLTQ0MjIsNyArNDQ0Miw3IEBACiAgICAgb2Zmc2V0ID0gaW5kZXggKiBzaXplOwogICAgIHB0ciA9IHNlbGYtPmJfcHRyICsgb2Zmc2V0OwogCi0gICAgcmV0dXJuIENEYXRhX3NldCgoUHlPYmplY3QgKilzZWxmLCBzdGdkaWN0LT5wcm90bywgc3RnZGljdC0+c2V0ZnVuYywgdmFsdWUsCisgICAgcmV0dXJuIFB5Q0RhdGFfc2V0KChQeU9iamVjdCAqKXNlbGYsIHN0Z2RpY3QtPnByb3RvLCBzdGdkaWN0LT5zZXRmdW5jLCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBzaXplLCBwdHIpOwogfQogCkBAIC00NTUyLDcgKzQ1NzIsNyBAQAogICAgIEFycmF5X2Fzc19zdWJzY3JpcHQsCiB9OwogCi1QeVR5cGVPYmplY3QgQXJyYXlfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNBcnJheV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfY3R5cGVzLkFycmF5IiwKICAgICBzaXplb2YoQ0RhdGFPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwpAQCAtNDU3MSwxMSArNDU5MSwxMSBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAmQ0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgICZQeUNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCiAgICAgIlhYWCB0byBiZSBwcm92aWRlZCIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpQ0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgICh0cmF2ZXJzZXByb2MpUHlDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlQeUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTQ1OTAsMTIgKzQ2MTAsMTIgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAoaW5pdHByb2MpQXJyYXlfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgR2VuZXJpY0NEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBHZW5lcmljUHlDRGF0YV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogUHlPYmplY3QgKgotQ3JlYXRlQXJyYXlUeXBlKFB5T2JqZWN0ICppdGVtdHlwZSwgUHlfc3NpemVfdCBsZW5ndGgpCitQeUNBcnJheVR5cGVfZnJvbV9jdHlwZShQeU9iamVjdCAqaXRlbXR5cGUsIFB5X3NzaXplX3QgbGVuZ3RoKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqY2FjaGU7CiAgICAgUHlPYmplY3QgKmtleTsKQEAgLTQ2MzUsMTQgKzQ2NTUsMTQgQEAKICAgICAgICAgKChQeVR5cGVPYmplY3QgKilpdGVtdHlwZSktPnRwX25hbWUsIChsb25nKWxlbmd0aCk7CiAjZW5kaWYKIAotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QgKikmQXJyYXlUeXBlX1R5cGUsCisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZQeUNBcnJheVR5cGVfVHlwZSwKICNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXtzOmksczpPfSIsCiAjZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXtzOm4sczpPfSIsCiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFycmF5X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUNBcnJheV9UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2xlbmd0aF8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdHlwZV8iLApAQCAtNDcxOCw3ICs0NzM4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTaW1wbGVfZnJvbV9vdXRwYXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpZiAoSXNTaW1wbGVTdWJUeXBlKChQeU9iamVjdCAqKVB5X1RZUEUoc2VsZikpKSB7CisgICAgaWYgKF9jdHlwZXNfc2ltcGxlX2luc3RhbmNlKChQeU9iamVjdCAqKVB5X1RZUEUoc2VsZikpKSB7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgfQpAQCAtNDgwOCwxMSArNDgyOCwxMSBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAmQ0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgICZQeUNEYXRhX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCiAgICAgIlhYWCB0byBiZSBwcm92aWRlZCIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpQ0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgICh0cmF2ZXJzZXByb2MpUHlDRGF0YV90cmF2ZXJzZSwgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlQeUNEYXRhX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTQ4MjcsMTMgKzQ4NDcsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAoaW5pdHByb2MpU2ltcGxlX2luaXQsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgR2VuZXJpY0NEYXRhX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBHZW5lcmljUHlDRGF0YV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gIFBvaW50ZXJfVHlwZQorICBQeUNQb2ludGVyX1R5cGUKICovCiBzdGF0aWMgUHlPYmplY3QgKgogUG9pbnRlcl9pdGVtKFB5T2JqZWN0ICpfc2VsZiwgUHlfc3NpemVfdCBpbmRleCkKQEAgLTQ4NjIsNyArNDg4Miw3IEBACiAgICAgc2l6ZSA9IGl0ZW1kaWN0LT5zaXplOwogICAgIG9mZnNldCA9IGluZGV4ICogaXRlbWRpY3QtPnNpemU7CiAKLSAgICByZXR1cm4gQ0RhdGFfZ2V0KHByb3RvLCBzdGdkaWN0LT5nZXRmdW5jLCAoUHlPYmplY3QgKilzZWxmLAorICAgIHJldHVybiBQeUNEYXRhX2dldChwcm90bywgc3RnZGljdC0+Z2V0ZnVuYywgKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBzaXplLCAoKihjaGFyICoqKXNlbGYtPmJfcHRyKSArIG9mZnNldCk7CiB9CiAKQEAgLTQ5MDAsNyArNDkyMCw3IEBACiAgICAgc2l6ZSA9IGl0ZW1kaWN0LT5zaXplOwogICAgIG9mZnNldCA9IGluZGV4ICogaXRlbWRpY3QtPnNpemU7CiAKLSAgICByZXR1cm4gQ0RhdGFfc2V0KChQeU9iamVjdCAqKXNlbGYsIHByb3RvLCBzdGdkaWN0LT5zZXRmdW5jLCB2YWx1ZSwKKyAgICByZXR1cm4gUHlDRGF0YV9zZXQoKFB5T2JqZWN0ICopc2VsZiwgcHJvdG8sIHN0Z2RpY3QtPnNldGZ1bmMsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIHNpemUsICgqKGNoYXIgKiopc2VsZi0+Yl9wdHIpICsgb2Zmc2V0KTsKIH0KIApAQCAtNDkxNyw3ICs0OTM3LDcgQEAKIAogICAgIHN0Z2RpY3QgPSBQeU9iamVjdF9zdGdkaWN0KChQeU9iamVjdCAqKXNlbGYpOwogICAgIGFzc2VydChzdGdkaWN0KTsgLyogQ2Fubm90IGJlIE5VTEwgZnIgcG9pbnRlciBpbnN0YW5jZXMgKi8KLSAgICByZXR1cm4gQ0RhdGFfRnJvbUJhc2VPYmooc3RnZGljdC0+cHJvdG8sCisgICAgcmV0dXJuIFB5Q0RhdGFfRnJvbUJhc2VPYmooc3RnZGljdC0+cHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXNlbGYsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodm9pZCAqKilzZWxmLT5iX3B0cik7CiB9CkBAIC00OTkyLDcgKzUwMTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBjcmVhdGUgaW5zdGFuY2U6IGhhcyBubyBfdHlwZV8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBHZW5lcmljQ0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3KTsKKyAgICByZXR1cm4gR2VuZXJpY1B5Q0RhdGFfbmV3KHR5cGUsIGFyZ3MsIGt3KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTUwMTYsMTEgKzUwMzYsMTEgQEAKICAgICBhc3NlcnQocHJvdG8pOwogICAgIGl0ZW1kaWN0ID0gUHlUeXBlX3N0Z2RpY3QocHJvdG8pOwogICAgIGFzc2VydChpdGVtZGljdCk7Ci0gICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJjIiktPmdldGZ1bmMpIHsKKyAgICBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJjIiktPmdldGZ1bmMpIHsKICAgICAgICAgY2hhciAqcHRyID0gKihjaGFyICoqKXNlbGYtPmJfcHRyOwogICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocHRyICsgaWxvdywgbGVuKTsKICNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgIH0gZWxzZSBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoInUiKS0+Z2V0ZnVuYykgeworICAgIH0gZWxzZSBpZiAoaXRlbWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPmdldGZ1bmMpIHsKICAgICAgICAgd2NoYXJfdCAqcHRyID0gKih3Y2hhcl90ICoqKXNlbGYtPmJfcHRyOwogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihwdHIgKyBpbG93LCBsZW4pOwogI2VuZGlmCkBAIC01MTEwLDcgKzUxMzAsNyBAQAogICAgICAgICBhc3NlcnQocHJvdG8pOwogICAgICAgICBpdGVtZGljdCA9IFB5VHlwZV9zdGdkaWN0KHByb3RvKTsKICAgICAgICAgYXNzZXJ0KGl0ZW1kaWN0KTsKLSAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJjIiktPmdldGZ1bmMpIHsKKyAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5nZXRmdW5jKSB7CiAgICAgICAgICAgICBjaGFyICpwdHIgPSAqKGNoYXIgKiopc2VsZi0+Yl9wdHI7CiAgICAgICAgICAgICBjaGFyICpkZXN0OwogCkBAIC01MTMxLDcgKzUxNTEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIG5wOwogICAgICAgICB9CiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKLSAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMpIHsKKyAgICAgICAgaWYgKGl0ZW1kaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygidSIpLT5nZXRmdW5jKSB7CiAgICAgICAgICAgICB3Y2hhcl90ICpwdHIgPSAqKHdjaGFyX3QgKiopc2VsZi0+Yl9wdHI7CiAgICAgICAgICAgICB3Y2hhcl90ICpkZXN0OwogCkBAIC01MjA5LDcgKzUyMjksNyBAQAogICAgIChpbnF1aXJ5KVBvaW50ZXJfbm9uemVybywgLyogbmJfbm9uemVybyAqLwogfTsKIAotUHlUeXBlT2JqZWN0IFBvaW50ZXJfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNQb2ludGVyX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9jdHlwZXMuX1BvaW50ZXIiLAogICAgIHNpemVvZihDRGF0YU9iamVjdCksICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCkBAIC01MjI4LDExICs1MjQ4LDExIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZDRGF0YV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgJlB5Q0RhdGFfYXNfYnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyogdHBfZmxhZ3MgKi8KICAgICAiWFhYIHRvIGJlIHByb3ZpZGVkIiwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0RhdGFfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRGF0YV9jbGVhciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNEYXRhX3RyYXZlcnNlLCAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVB5Q0RhdGFfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNTM2MSw5ICs1MzgxLDkgQEAKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogCi0gICAgaWYgKFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKGFyZykpCisgICAgaWYgKFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKGFyZykpCiAgICAgICAgIHJldHVybiAxOwotICAgIGlmIChDRnVuY1B0clR5cGVPYmplY3RfQ2hlY2soYXJnKSkKKyAgICBpZiAoUHlDRnVuY1B0clR5cGVPYmplY3RfQ2hlY2soYXJnKSkKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGljdCA9IFB5VHlwZV9zdGdkaWN0KGFyZyk7CiAgICAgaWYgKGRpY3QpIHsKQEAgLTUzOTksOSArNTQxOSw5IEBACiAgICAgICovCiAgICAgaWYgKENEYXRhT2JqZWN0X0NoZWNrKHNyYykpIHsKICAgICAgICAgQ0RhdGFPYmplY3QgKm9iaiA9IChDRGF0YU9iamVjdCAqKXNyYzsKLSAgICAgICAgLyogQ0RhdGFfR2V0Q29udGFpbmVyIHdpbGwgaW5pdGlhbGl6ZSBzcmMuYl9vYmplY3RzLCB3ZSBuZWVkCisgICAgICAgIC8qIFB5Q0RhdGFfR2V0Q29udGFpbmVyIHdpbGwgaW5pdGlhbGl6ZSBzcmMuYl9vYmplY3RzLCB3ZSBuZWVkCiAgICAgICAgICAgIHRoaXMgc28gaXQgY2FuIGJlIHNoYXJlZCAqLwotICAgICAgICBDRGF0YV9HZXRDb250YWluZXIob2JqKTsKKyAgICAgICAgUHlDRGF0YV9HZXRDb250YWluZXIob2JqKTsKICAgICAgICAgLyogQnV0IHdlIG5lZWQgYSBkaWN0aW9uYXJ5ISAqLwogICAgICAgICBpZiAob2JqLT5iX29iamVjdHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOwpAQCAtNTQ1NSwxNSArNTQ3NSwxNSBAQAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CiAjZW5kaWYKLSAgICBtID0gUHlfSW5pdE1vZHVsZTMoIl9jdHlwZXMiLCBtb2R1bGVfbWV0aG9kcywgbW9kdWxlX2RvY3MpOworICAgIG0gPSBQeV9Jbml0TW9kdWxlMygiX2N0eXBlcyIsIF9jdHlwZXNfbW9kdWxlX21ldGhvZHMsIG1vZHVsZV9kb2NzKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybjsKIAotICAgIF9wb2ludGVyX3R5cGVfY2FjaGUgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKF9wb2ludGVyX3R5cGVfY2FjaGUgPT0gTlVMTCkKKyAgICBfY3R5cGVzX3B0cnR5cGVfY2FjaGUgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKF9jdHlwZXNfcHRydHlwZV9jYWNoZSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9wb2ludGVyX3R5cGVfY2FjaGUiLCAoUHlPYmplY3QgKilfcG9pbnRlcl90eXBlX2NhY2hlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9wb2ludGVyX3R5cGVfY2FjaGUiLCAoUHlPYmplY3QgKilfY3R5cGVzX3B0cnR5cGVfY2FjaGUpOwogCiAgICAgX3VucGlja2xlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtLCAiX3VucGlja2xlIik7CiAgICAgaWYgKF91bnBpY2tsZSA9PSBOVUxMKQpAQCAtNTQ3MiwxMiArNTQ5MiwxMiBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0FyZ19UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChQeVR5cGVfUmVhZHkoJkNUaHVua19UeXBlKSA8IDApCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDVGh1bmtfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICAvKiBTdGdEaWN0IGlzIGRlcml2ZWQgZnJvbSBQeURpY3RfVHlwZSAqLwotICAgIFN0Z0RpY3RfVHlwZS50cF9iYXNlID0gJlB5RGljdF9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlN0Z0RpY3RfVHlwZSkgPCAwKQorICAgIFB5Q1N0Z0RpY3RfVHlwZS50cF9iYXNlID0gJlB5RGljdF9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q1N0Z0RpY3RfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTQ4NSwyOCArNTUwNSwyOCBAQAogICAgICAqIE1ldGFjbGFzc2VzCiAgICAgICovCiAKLSAgICBTdHJ1Y3RUeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTdHJ1Y3RUeXBlX1R5cGUpIDwgMCkKKyAgICBQeUNTdHJ1Y3RUeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNTdHJ1Y3RUeXBlX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVW5pb25UeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZVbmlvblR5cGVfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBQb2ludGVyVHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUG9pbnRlclR5cGVfVHlwZSkgPCAwKQorICAgIFB5Q1BvaW50ZXJUeXBlX1R5cGUudHBfYmFzZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNQb2ludGVyVHlwZV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIEFycmF5VHlwZV9UeXBlLnRwX2Jhc2UgPSAmUHlUeXBlX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQXJyYXlUeXBlX1R5cGUpIDwgMCkKKyAgICBQeUNBcnJheVR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0FycmF5VHlwZV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFNpbXBsZVR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlNpbXBsZVR5cGVfVHlwZSkgPCAwKQorICAgIFB5Q1NpbXBsZVR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q1NpbXBsZVR5cGVfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBDRnVuY1B0clR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJkNGdW5jUHRyVHlwZV9UeXBlKSA8IDApCisgICAgUHlDRnVuY1B0clR5cGVfVHlwZS50cF9iYXNlID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0Z1bmNQdHJUeXBlX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU1MTQsNTIgKzU1MzQsNTggQEAKICAgICAgKiBDbGFzc2VzIHVzaW5nIGEgY3VzdG9tIG1ldGFjbGFzcwogICAgICAqLwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQ0RhdGFfVHlwZSkgPCAwKQorICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0RhdGFfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBQeV9UWVBFKCZTdHJ1Y3RfVHlwZSkgPSAmU3RydWN0VHlwZV9UeXBlOwotICAgIFN0cnVjdF9UeXBlLnRwX2Jhc2UgPSAmQ0RhdGFfVHlwZTsKKyAgICBQeV9UWVBFKCZTdHJ1Y3RfVHlwZSkgPSAmUHlDU3RydWN0VHlwZV9UeXBlOworICAgIFN0cnVjdF9UeXBlLnRwX2Jhc2UgPSAmUHlDRGF0YV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlN0cnVjdF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKKyAgICBQeV9JTkNSRUYoJlN0cnVjdF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlN0cnVjdHVyZSIsIChQeU9iamVjdCAqKSZTdHJ1Y3RfVHlwZSk7CiAKICAgICBQeV9UWVBFKCZVbmlvbl9UeXBlKSA9ICZVbmlvblR5cGVfVHlwZTsKLSAgICBVbmlvbl9UeXBlLnRwX2Jhc2UgPSAmQ0RhdGFfVHlwZTsKKyAgICBVbmlvbl9UeXBlLnRwX2Jhc2UgPSAmUHlDRGF0YV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlVuaW9uX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOworICAgIFB5X0lOQ1JFRigmVW5pb25fVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJVbmlvbiIsIChQeU9iamVjdCAqKSZVbmlvbl9UeXBlKTsKIAotICAgIFB5X1RZUEUoJlBvaW50ZXJfVHlwZSkgPSAmUG9pbnRlclR5cGVfVHlwZTsKLSAgICBQb2ludGVyX1R5cGUudHBfYmFzZSA9ICZDRGF0YV9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJlBvaW50ZXJfVHlwZSkgPCAwKQorICAgIFB5X1RZUEUoJlB5Q1BvaW50ZXJfVHlwZSkgPSAmUHlDUG9pbnRlclR5cGVfVHlwZTsKKyAgICBQeUNQb2ludGVyX1R5cGUudHBfYmFzZSA9ICZQeUNEYXRhX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDUG9pbnRlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9Qb2ludGVyIiwgKFB5T2JqZWN0ICopJlBvaW50ZXJfVHlwZSk7CisgICAgUHlfSU5DUkVGKCZQeUNQb2ludGVyX1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX1BvaW50ZXIiLCAoUHlPYmplY3QgKikmUHlDUG9pbnRlcl9UeXBlKTsKIAotICAgIFB5X1RZUEUoJkFycmF5X1R5cGUpID0gJkFycmF5VHlwZV9UeXBlOwotICAgIEFycmF5X1R5cGUudHBfYmFzZSA9ICZDRGF0YV9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJkFycmF5X1R5cGUpIDwgMCkKKyAgICBQeV9UWVBFKCZQeUNBcnJheV9UeXBlKSA9ICZQeUNBcnJheVR5cGVfVHlwZTsKKyAgICBQeUNBcnJheV9UeXBlLnRwX2Jhc2UgPSAmUHlDRGF0YV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q0FycmF5X1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiQXJyYXkiLCAoUHlPYmplY3QgKikmQXJyYXlfVHlwZSk7CisgICAgUHlfSU5DUkVGKCZQeUNBcnJheV9UeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkFycmF5IiwgKFB5T2JqZWN0ICopJlB5Q0FycmF5X1R5cGUpOwogCi0gICAgUHlfVFlQRSgmU2ltcGxlX1R5cGUpID0gJlNpbXBsZVR5cGVfVHlwZTsKLSAgICBTaW1wbGVfVHlwZS50cF9iYXNlID0gJkNEYXRhX1R5cGU7CisgICAgUHlfVFlQRSgmU2ltcGxlX1R5cGUpID0gJlB5Q1NpbXBsZVR5cGVfVHlwZTsKKyAgICBTaW1wbGVfVHlwZS50cF9iYXNlID0gJlB5Q0RhdGFfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTaW1wbGVfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CisgICAgUHlfSU5DUkVGKCZTaW1wbGVfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfU2ltcGxlQ0RhdGEiLCAoUHlPYmplY3QgKikmU2ltcGxlX1R5cGUpOwogCi0gICAgUHlfVFlQRSgmQ0Z1bmNQdHJfVHlwZSkgPSAmQ0Z1bmNQdHJUeXBlX1R5cGU7Ci0gICAgQ0Z1bmNQdHJfVHlwZS50cF9iYXNlID0gJkNEYXRhX1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmQ0Z1bmNQdHJfVHlwZSkgPCAwKQorICAgIFB5X1RZUEUoJlB5Q0Z1bmNQdHJfVHlwZSkgPSAmUHlDRnVuY1B0clR5cGVfVHlwZTsKKyAgICBQeUNGdW5jUHRyX1R5cGUudHBfYmFzZSA9ICZQeUNEYXRhX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDRnVuY1B0cl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNGdW5jUHRyIiwgKFB5T2JqZWN0ICopJkNGdW5jUHRyX1R5cGUpOworICAgIFB5X0lOQ1JFRigmUHlDRnVuY1B0cl9UeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNGdW5jUHRyIiwgKFB5T2JqZWN0ICopJlB5Q0Z1bmNQdHJfVHlwZSk7CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCiAgICAgICogU2ltcGxlIGNsYXNzZXMKICAgICAgKi8KIAotICAgIC8qIENGaWVsZF9UeXBlIGlzIGRlcml2ZWQgZnJvbSBQeUJhc2VPYmplY3RfVHlwZSAqLwotICAgIGlmIChQeVR5cGVfUmVhZHkoJkNGaWVsZF9UeXBlKSA8IDApCisgICAgLyogUHlDRmllbGRfVHlwZSBpcyBkZXJpdmVkIGZyb20gUHlCYXNlT2JqZWN0X1R5cGUgKi8KKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUNGaWVsZF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NjIwLDYgKzU2NDYsNyBAQAogICogU2VlICMxMDQ3MjY5IEJ1ZmZlciBvdmVyd3JpdGUgaW4gUHlVbmljb2RlX0FzV2lkZUNoYXIKICAqLwogCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA0MDAwMCkKICNpZmRlZiBIQVZFX1dDSEFSX0gKIAogUHlPYmplY3QgKk15X1B5VW5pY29kZV9Gcm9tV2lkZUNoYXIocmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywKQEAgLTU2NzgsNyArNTcwNSw3IEBACiAKICAgICByZXR1cm4gc2l6ZTsKIH0KLQorI2VuZGlmCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYwppbmRleCA0NjQwNmE2Li4yNzU2MTg3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCkBAIC0yNSw2ICsyNSwyMCBAQAogCiAvKiBzb21lIGZ1bmN0aW9ucyBoYW5keSBmb3IgdGVzdGluZyAqLwogCitFWFBPUlQoaW50KQorX3Rlc3RmdW5jX2Nia19yZWdfaW50KGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkLCBpbnQgZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKShpbnQsIGludCwgaW50LCBpbnQsIGludCkpCit7CisgICAgcmV0dXJuIGZ1bmMoYSphLCBiKmIsIGMqYywgZCpkLCBlKmUpOworfQorCitFWFBPUlQoZG91YmxlKQorX3Rlc3RmdW5jX2Nia19yZWdfZG91YmxlKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKCpmdW5jKShkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSkpCit7CisgICAgcmV0dXJuIGZ1bmMoYSphLCBiKmIsIGMqYywgZCpkLCBlKmUpOworfQorCiBFWFBPUlQodm9pZCl0ZXN0ZnVuY19hcnJheShpbnQgdmFsdWVzWzRdKQogewogICAgIHByaW50ZigidGVzdGZ1bmNfYXJyYXkgJWQgJWQgJWQgJWRcbiIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggYjFiNjBiYS4uNzE2YTAyZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtMjEsOCArMjEsOCBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+Y29udmVydGVycyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jYWxsYWJsZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5yZXN0eXBlKTsKLSAgICBpZiAoc2VsZi0+cGNsKQotICAgICAgICBGcmVlQ2xvc3VyZShzZWxmLT5wY2wpOworICAgIGlmIChzZWxmLT5wY2xfd3JpdGUpCisgICAgICAgIGZmaV9jbG9zdXJlX2ZyZWUoc2VsZi0+cGNsX3dyaXRlKTsKICAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7CiB9CiAKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlUeXBlT2JqZWN0IENUaHVua19UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q1RodW5rX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9jdHlwZXMuQ1RodW5rT2JqZWN0IiwKICAgICBzaXplb2YoQ1RodW5rT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwpAQCAtOTUsNDQgKzk1LDY2IEBACiAgICAgUHlFcnJfUHJpbnQoKTsKIH0KIAorI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNzAwMDApCitQeUNvZGVPYmplY3QgKgorUHlDb2RlX05ld0VtcHR5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgaW50IGZpcnN0bGluZW5vKQoreworICAgIHN0YXRpYyBQeU9iamVjdCAqZW1wdHlzdHJpbmcgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqbnVsbHR1cGxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2IgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmdW5jbmFtZV9vYiA9IE5VTEw7CisgICAgUHlDb2RlT2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIGlmIChlbXB0eXN0cmluZyA9PSBOVUxMKSB7CisgICAgICAgIGVtcHR5c3RyaW5nID0gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7CisgICAgICAgIGlmIChlbXB0eXN0cmluZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGlmIChudWxsdHVwbGUgPT0gTlVMTCkgeworICAgICAgICBudWxsdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKG51bGx0dXBsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGZ1bmNuYW1lX29iID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmdW5jbmFtZSk7CisgICAgaWYgKGZ1bmNuYW1lX29iID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIGZpbGVuYW1lX29iID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmaWxlbmFtZSk7CisgICAgaWYgKGZpbGVuYW1lX29iID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbGVkOworCisgICAgcmVzdWx0ID0gUHlDb2RlX05ldygwLCAgICAgICAgICAgICAgICAgICAgICAvKiBhcmdjb3VudCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmxvY2FscyAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RhY2tzaXplICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLworICAgICAgICAgICAgICAgIGVtcHR5c3RyaW5nLCAgICAgICAgICAgICAgICAgICAgLyogY29kZSAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogY29uc3RzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lcyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogdmFybmFtZXMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIGZyZWV2YXJzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBjZWxsdmFycyAqLworICAgICAgICAgICAgICAgIGZpbGVuYW1lX29iLCAgICAgICAgICAgICAgICAgICAgLyogZmlsZW5hbWUgKi8KKyAgICAgICAgICAgICAgICBmdW5jbmFtZV9vYiwgICAgICAgICAgICAgICAgICAgIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICBmaXJzdGxpbmVubywgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0bGluZW5vICovCisgICAgICAgICAgICAgICAgZW1wdHlzdHJpbmcgICAgICAgICAgICAgICAgICAgICAvKiBsbm90YWIgKi8KKyAgICAgICAgICAgICAgICApOworCitmYWlsZWQ6CisgICAgUHlfWERFQ1JFRihmdW5jbmFtZV9vYik7CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZV9vYik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiAKIC8qIGFmdGVyIGNvZGUgdGhhdCBweXJleCBnZW5lcmF0ZXMgKi8KLXZvaWQgX0FkZFRyYWNlYmFjayhjaGFyICpmdW5jbmFtZSwgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit2b2lkIF9jdHlwZXNfYWRkX3RyYWNlYmFjayhjaGFyICpmdW5jbmFtZSwgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCiB7Ci0gICAgUHlPYmplY3QgKnB5X3NyY2ZpbGUgPSAwOwotICAgIFB5T2JqZWN0ICpweV9mdW5jbmFtZSA9IDA7CiAgICAgUHlPYmplY3QgKnB5X2dsb2JhbHMgPSAwOwotICAgIFB5T2JqZWN0ICplbXB0eV90dXBsZSA9IDA7Ci0gICAgUHlPYmplY3QgKmVtcHR5X3N0cmluZyA9IDA7CiAgICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKICAgICBQeUZyYW1lT2JqZWN0ICpweV9mcmFtZSA9IDA7CiAKLSAgICBweV9zcmNmaWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmaWxlbmFtZSk7Ci0gICAgaWYgKCFweV9zcmNmaWxlKSBnb3RvIGJhZDsKLSAgICBweV9mdW5jbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoZnVuY25hbWUpOwotICAgIGlmICghcHlfZnVuY25hbWUpIGdvdG8gYmFkOwogICAgIHB5X2dsb2JhbHMgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKCFweV9nbG9iYWxzKSBnb3RvIGJhZDsKLSAgICBlbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOwotICAgIGlmICghZW1wdHlfdHVwbGUpIGdvdG8gYmFkOwotICAgIGVtcHR5X3N0cmluZyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIiIpOwotICAgIGlmICghZW1wdHlfc3RyaW5nKSBnb3RvIGJhZDsKLSAgICBweV9jb2RlID0gUHlDb2RlX05ldygKLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBhcmdjb3VudCwqLwotICAgICAgICAwLCAgICAgICAgICAgIC8qaW50IG5sb2NhbHMsKi8KLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBzdGFja3NpemUsKi8KLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBmbGFncywqLwotICAgICAgICBlbXB0eV9zdHJpbmcsIC8qUHlPYmplY3QgKmNvZGUsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpjb25zdHMsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpuYW1lcywqLwotICAgICAgICBlbXB0eV90dXBsZSwgIC8qUHlPYmplY3QgKnZhcm5hbWVzLCovCi0gICAgICAgIGVtcHR5X3R1cGxlLCAgLypQeU9iamVjdCAqZnJlZXZhcnMsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpjZWxsdmFycywqLwotICAgICAgICBweV9zcmNmaWxlLCAgIC8qUHlPYmplY3QgKmZpbGVuYW1lLCovCi0gICAgICAgIHB5X2Z1bmNuYW1lLCAgLypQeU9iamVjdCAqbmFtZSwqLwotICAgICAgICBsaW5lbm8sICAgLyppbnQgZmlyc3RsaW5lbm8sKi8KLSAgICAgICAgZW1wdHlfc3RyaW5nICAvKlB5T2JqZWN0ICpsbm90YWIqLwotICAgICAgICApOworICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOwogICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUgPSBQeUZyYW1lX05ldygKICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQoKSwgLypQeVRocmVhZFN0YXRlICp0c3RhdGUsKi8KQEAgLTE0NSwxMCArMTY3LDYgQEAKICAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKICAgYmFkOgogICAgIFB5X1hERUNSRUYocHlfZ2xvYmFscyk7Ci0gICAgUHlfWERFQ1JFRihweV9zcmNmaWxlKTsKLSAgICBQeV9YREVDUkVGKHB5X2Z1bmNuYW1lKTsKLSAgICBQeV9YREVDUkVGKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9YREVDUkVGKGVtcHR5X3N0cmluZyk7CiAgICAgUHlfWERFQ1JFRihweV9jb2RlKTsKICAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKIH0KQEAgLTIyNyw3ICsyNDUsNyBAQAogICAgICAgICAgICAgZ290byBEb25lOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGRpY3QgJiYgZGljdC0+Z2V0ZnVuYyAmJiAhSXNTaW1wbGVTdWJUeXBlKGNudikpIHsKKyAgICAgICAgaWYgKGRpY3QgJiYgZGljdC0+Z2V0ZnVuYyAmJiAhX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UoY252KSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBkaWN0LT5nZXRmdW5jKCpwQXJncywgZGljdC0+c2l6ZSk7CiAgICAgICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgICAgICBQcmludEVycm9yKCJjcmVhdGUgYXJndW1lbnQgJWQ6XG4iLCBpKTsKQEAgLTI0MSw3ICsyNTksNyBAQAogICAgICAgICAgICAgICAgQlRXLCB0aGUgc2FtZSBwcm9ibGVtIG9jY3VycnMgd2hlbiB0aGV5IGFyZSBwdXNoZWQgYXMgcGFyYW1ldGVycwogICAgICAgICAgICAgKi8KICAgICAgICAgfSBlbHNlIGlmIChkaWN0KSB7Ci0gICAgICAgICAgICAvKiBIbSwgc2hvdWxkbid0IHdlIHVzZSBDRGF0YV9BdEFkZHJlc3MoKSBvciBzb21ldGhpbmcgbGlrZSB0aGF0IGluc3RlYWQ/ICovCisgICAgICAgICAgICAvKiBIbSwgc2hvdWxkbid0IHdlIHVzZSBQeUNEYXRhX0F0QWRkcmVzcygpIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgaW5zdGVhZD8gKi8KICAgICAgICAgICAgIENEYXRhT2JqZWN0ICpvYmogPSAoQ0RhdGFPYmplY3QgKilQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNudiwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoIW9iaikgewogICAgICAgICAgICAgICAgIFByaW50RXJyb3IoImNyZWF0ZSBhcmd1bWVudCAlZDpcbiIsIGkpOwpAQCAtMjcyLDEwICsyOTAsMTAgQEAKICAgICB9CiAKICNkZWZpbmUgQ0hFQ0sod2hhdCwgeCkgXAotaWYgKHggPT0gTlVMTCkgX0FkZFRyYWNlYmFjayh3aGF0LCAiX2N0eXBlcy9jYWxsYmFja3MuYyIsIF9fTElORV9fIC0gMSksIFB5RXJyX1ByaW50KCkKK2lmICh4ID09IE5VTEwpIF9jdHlwZXNfYWRkX3RyYWNlYmFjayh3aGF0LCAiX2N0eXBlcy9jYWxsYmFja3MuYyIsIF9fTElORV9fIC0gMSksIFB5RXJyX1ByaW50KCkKIAogICAgIGlmIChmbGFncyAmIChGVU5DRkxBR19VU0VfRVJSTk8gfCBGVU5DRkxBR19VU0VfTEFTVEVSUk9SKSkgewotICAgICAgICBlcnJvcl9vYmplY3QgPSBnZXRfZXJyb3Jfb2JqZWN0KCZzcGFjZSk7CisgICAgICAgIGVycm9yX29iamVjdCA9IF9jdHlwZXNfZ2V0X2Vycm9iaigmc3BhY2UpOwogICAgICAgICBpZiAoZXJyb3Jfb2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIERvbmU7CiAgICAgICAgIGlmIChmbGFncyAmIEZVTkNGTEFHX1VTRV9FUlJOTykgewpAQCAtMzMyLDcgKzM1MCw3IEBACiAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoY2FsbGFibGUpOwogICAgICAgICBlbHNlIGlmIChrZWVwID09IFB5X05vbmUpIC8qIE5vdGhpbmcgdG8ga2VlcCAqLwogICAgICAgICAgICAgUHlfREVDUkVGKGtlZXApOwotICAgICAgICBlbHNlIGlmIChzZXRmdW5jICE9IGdldGVudHJ5KCJPIiktPnNldGZ1bmMpIHsKKyAgICAgICAgZWxzZSBpZiAoc2V0ZnVuYyAhPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIk8iKS0+c2V0ZnVuYykgewogICAgICAgICAgICAgaWYgKC0xID09IFB5RXJyX1dhcm4oUHlFeGNfUnVudGltZVdhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGxlYWsgaW4gY2FsbGJhY2sgZnVuY3Rpb24uIikpCiAgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGNhbGxhYmxlKTsKQEAgLTM2NywxMyArMzg1LDE0IEBACiAgICAgQ1RodW5rT2JqZWN0ICpwOwogICAgIGludCBpOwogCi0gICAgcCA9IFB5T2JqZWN0X0dDX05ld1ZhcihDVGh1bmtPYmplY3QsICZDVGh1bmtfVHlwZSwgbkFyZ3MpOworICAgIHAgPSBQeU9iamVjdF9HQ19OZXdWYXIoQ1RodW5rT2JqZWN0LCAmUHlDVGh1bmtfVHlwZSwgbkFyZ3MpOwogICAgIGlmIChwID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcC0+cGNsID0gTlVMTDsKKyAgICBwLT5wY2xfZXhlYyA9IE5VTEw7CisgICAgcC0+cGNsX3dyaXRlID0gTlVMTDsKICAgICBtZW1zZXQoJnAtPmNpZiwgMCwgc2l6ZW9mKHAtPmNpZikpOwogICAgIHAtPmNvbnZlcnRlcnMgPSBOVUxMOwogICAgIHAtPmNhbGxhYmxlID0gTlVMTDsKQEAgLTM4Niw3ICs0MDUsNyBAQAogICAgIHJldHVybiBwOwogfQogCi1DVGh1bmtPYmplY3QgKkFsbG9jRnVuY3Rpb25DYWxsYmFjayhQeU9iamVjdCAqY2FsbGFibGUsCitDVGh1bmtPYmplY3QgKl9jdHlwZXNfYWxsb2NfY2FsbGJhY2soUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNvbnZlcnRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVzdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKQEAgLTQwMyw4ICs0MjIsOSBAQAogCiAgICAgYXNzZXJ0KENUaHVua19DaGVja0V4YWN0KHApKTsKIAotICAgIHAtPnBjbCA9IE1hbGxvY0Nsb3N1cmUoKTsKLSAgICBpZiAocC0+cGNsID09IE5VTEwpIHsKKyAgICBwLT5wY2xfd3JpdGUgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLAorCQkJCSAgICAgJnAtPnBjbF9leGVjKTsKKyAgICBpZiAocC0+cGNsX3dyaXRlID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC00MTQsNyArNDM0LDcgQEAKICAgICAgICAgUHlPYmplY3QgKmNudiA9IFB5U2VxdWVuY2VfR2V0SXRlbShjb252ZXJ0ZXJzLCBpKTsKICAgICAgICAgaWYgKGNudiA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgcC0+YXR5cGVzW2ldID0gR2V0VHlwZShjbnYpOworICAgICAgICBwLT5hdHlwZXNbaV0gPSBfY3R5cGVzX2dldF9mZmlfdHlwZShjbnYpOwogICAgICAgICBQeV9ERUNSRUYoY252KTsKICAgICB9CiAgICAgcC0+YXR5cGVzW2ldID0gTlVMTDsKQEAgLTQ0MiwxNCArNDYyLDIwIEBACiAjZW5kaWYKICAgICByZXN1bHQgPSBmZmlfcHJlcF9jaWYoJnAtPmNpZiwgY2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1QobkFyZ3MsIFB5X3NzaXplX3QsIGludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdldFR5cGUocmVzdHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfZ2V0X2ZmaV90eXBlKHJlc3R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+YXR5cGVzWzBdKTsKICAgICBpZiAocmVzdWx0ICE9IEZGSV9PSykgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImZmaV9wcmVwX2NpZiBmYWlsZWQgd2l0aCAlZCIsIHJlc3VsdCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHJlc3VsdCA9IGZmaV9wcmVwX2Nsb3N1cmUocC0+cGNsLCAmcC0+Y2lmLCBjbG9zdXJlX2ZjbiwgcCk7CisjaWYgZGVmaW5lZChYODZfREFSV0lOKSB8fCBkZWZpbmVkKFBPV0VSUENfREFSV0lOKQorICAgIHJlc3VsdCA9IGZmaV9wcmVwX2Nsb3N1cmUocC0+cGNsX3dyaXRlLCAmcC0+Y2lmLCBjbG9zdXJlX2ZjbiwgcCk7CisjZWxzZQorICAgIHJlc3VsdCA9IGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHAtPnBjbF93cml0ZSwgJnAtPmNpZiwgY2xvc3VyZV9mY24sCisJCQkJICBwLAorCQkJCSAgcC0+cGNsX2V4ZWMpOworI2VuZGlmCiAgICAgaWYgKHJlc3VsdCAhPSBGRklfT0spIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJmZmlfcHJlcF9jbG9zdXJlIGZhaWxlZCB3aXRoICVkIiwgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKaW5kZXggYzg0YjRmMy4uMzlmY2QxNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKQEAgLTIwLDcgKzIwLDcgQEAKIC8qCiAgIEhvdyBhcmUgZnVuY3Rpb25zIGNhbGxlZCwgYW5kIGhvdyBhcmUgcGFyYW1ldGVycyBjb252ZXJ0ZWQgdG8gQyA/CiAKLSAgMS4gX2N0eXBlcy5jOjpDRnVuY1B0cl9jYWxsIHJlY2VpdmVzIGFuIGFyZ3VtZW50IHR1cGxlICdpbmFyZ3MnIGFuZCBhCisgIDEuIF9jdHlwZXMuYzo6UHlDRnVuY1B0cl9jYWxsIHJlY2VpdmVzIGFuIGFyZ3VtZW50IHR1cGxlICdpbmFyZ3MnIGFuZCBhCiAgIGtleXdvcmQgZGljdGlvbmFyeSAna3dkcycuCiAKICAgMi4gQWZ0ZXIgc2V2ZXJhbCBjaGVja3MsIF9idWlsZF9jYWxsYXJncygpIGlzIGNhbGxlZCB3aGljaCByZXR1cm5zIGFub3RoZXIKQEAgLTMyLDcgKzMyLDcgQEAKICAgdGhlIGNhbGxhcmdzIHR1cGxlLCBzcGVjaWZ5aW5nIGhvdyB0byBidWlsZCB0aGUgcmV0dXJuIHZhbHVlKHMpIG9mCiAgIHRoZSBmdW5jdGlvbi4KIAotICA0LiBfQ2FsbFByb2MgaXMgdGhlbiBjYWxsZWQgd2l0aCB0aGUgJ2NhbGxhcmdzJyB0dXBsZS4gIF9DYWxsUHJvYyBmaXJzdAorICA0LiBfY3R5cGVzX2NhbGxwcm9jIGlzIHRoZW4gY2FsbGVkIHdpdGggdGhlICdjYWxsYXJncycgdHVwbGUuICBfY3R5cGVzX2NhbGxwcm9jIGZpcnN0CiAgIGFsbG9jYXRlcyB0d28gYXJyYXlzLiAgVGhlIGZpcnN0IGlzIGFuIGFycmF5IG9mICdzdHJ1Y3QgYXJndW1lbnQnIGl0ZW1zLCB0aGUKICAgc2Vjb25kIGFycmF5IGhhcyAndm9pZCAqJyBlbnRyaWVkLgogCkBAIC01Miw4ICs1Miw4IEBACiAgIGxpYmZmaSBzcGVjaWZpYyBzdHVmZiwgdGhlbiBpdCBjYWxscyBmZmlfY2FsbC4KIAogICBTbywgdGhlcmUgYXJlIDQgZGF0YSBzdHJ1Y3R1cmVzIGhvbGRpbmcgcHJvY2Vzc2VkIGFyZ3VtZW50czoKLSAgLSB0aGUgaW5hcmdzIHR1cGxlIChpbiBDRnVuY1B0cl9jYWxsKQotICAtIHRoZSBjYWxsYXJncyB0dXBsZSAoaW4gQ0Z1bmNQdHJfY2FsbCkKKyAgLSB0aGUgaW5hcmdzIHR1cGxlIChpbiBQeUNGdW5jUHRyX2NhbGwpCisgIC0gdGhlIGNhbGxhcmdzIHR1cGxlIChpbiBQeUNGdW5jUHRyX2NhbGwpCiAgIC0gdGhlICdzdHJ1Y3QgYXJnZ3VtZW50cycgYXJyYXkKICAgLSB0aGUgJ3ZvaWQgKicgYXJyYXkKIApAQCAtODMsNiArODMsMTMgQEAKICNkZWZpbmUgRE9OVF9VU0VfU0VICiAjZW5kaWYKIAorCisjZGVmaW5lIENUWVBFU19DQVBTVUxFX0VSUk9ST0JKICJfY3R5cGVzL2NhbGxwcm9jLmMgZXJyb3Igb2JqZWN0IgorQ1RZUEVTX0NBUFNVTEVfSU5TVEFOVElBVEVfREVTVFJVQ1RPUihDVFlQRVNfQ0FQU1VMRV9FUlJPUk9CSikKKworI2RlZmluZSBDVFlQRVNfQ0FQU1VMRV9XQ0hBUl9UICJfY3R5cGVzL2NhbGxwcm9jLmMgd2NoYXJfdCBidWZmZXIgZnJvbSB1bmljb2RlIgorQ1RZUEVTX0NBUFNVTEVfSU5TVEFOVElBVEVfREVTVFJVQ1RPUihDVFlQRVNfQ0FQU1VMRV9XQ0hBUl9UKQorCiAvKgogICBjdHlwZXMgbWFpbnRhaW5zIHRocmVhZC1sb2NhbCBzdG9yYWdlIHRoYXQgaGFzIHNwYWNlIGZvciB0d28gZXJyb3IgbnVtYmVyczoKICAgcHJpdmF0ZSBjb3BpZXMgb2YgdGhlIHN5c3RlbSAnZXJybm8nIHZhbHVlIGFuZCwgb24gV2luZG93cywgdGhlIHN5c3RlbSBlcnJvciBjb2RlCkBAIC0xMTgsNyArMTI1LDcgQEAKICAga2VwdCBhbGl2ZSBpbiB0aGUgdGhyZWFkIHN0YXRlIGRpY3Rpb25hcnkgYXMgbG9uZyBhcyB0aGUgdGhyZWFkIGl0c2VsZi4KICovCiBQeU9iamVjdCAqCi1nZXRfZXJyb3Jfb2JqZWN0KGludCAqKnBzcGFjZSkKK19jdHlwZXNfZ2V0X2Vycm9iaihpbnQgKipwc3BhY2UpCiB7CiAgICAgUHlPYmplY3QgKmRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBQeU9iamVjdCAqZXJyb2JqOwpAQCAtMTM0LDE0ICsxNDEsMjIgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlcnJvYmogPSBQeURpY3RfR2V0SXRlbShkaWN0LCBlcnJvcl9vYmplY3RfbmFtZSk7Ci0gICAgaWYgKGVycm9iaikKKyAgICBpZiAoZXJyb2JqKSB7CisjaWZkZWYgQ1RZUEVTX1VTSU5HX0NBUFNVTEUKKyAgICAgICAgaWYgKCFQeUNhcHN1bGVfSXNWYWxpZChlcnJvYmosIENUWVBFU19DQVBTVUxFX0VSUk9ST0JKKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAiY3R5cGVzLmVycm9yX29iamVjdCBpcyBhbiBpbnZhbGlkIGNhcHN1bGUiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjZW5kaWYgLyogQ1RZUEVTX1VTSU5HX0NBUFNVTEUgKi8KICAgICAgICAgUHlfSU5DUkVGKGVycm9iaik7CisgICAgfQogICAgIGVsc2UgewogICAgICAgICB2b2lkICpzcGFjZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoaW50KSAqIDIpOwogICAgICAgICBpZiAoc3BhY2UgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBtZW1zZXQoc3BhY2UsIDAsIHNpemVvZihpbnQpICogMik7Ci0gICAgICAgIGVycm9iaiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihzcGFjZSwgUHlNZW1fRnJlZSk7CisgICAgICAgIGVycm9iaiA9IENBUFNVTEVfTkVXKHNwYWNlLCBDVFlQRVNfQ0FQU1VMRV9FUlJPUk9CSik7CiAgICAgICAgIGlmIChlcnJvYmogPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoLTEgPT0gUHlEaWN0X1NldEl0ZW0oZGljdCwgZXJyb3Jfb2JqZWN0X25hbWUsCkBAIC0xNTAsNyArMTY1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgICpwc3BhY2UgPSAoaW50ICopUHlDT2JqZWN0X0FzVm9pZFB0cihlcnJvYmopOworICAgICpwc3BhY2UgPSAoaW50ICopQ0FQU1VMRV9ERVJFRkVSRU5DRShlcnJvYmosIENUWVBFU19DQVBTVUxFX0VSUk9ST0JKKTsKICAgICByZXR1cm4gZXJyb2JqOwogfQogCkBAIC0xNTgsNyArMTczLDcgQEAKIGdldF9lcnJvcl9pbnRlcm5hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIGludCBpbmRleCkKIHsKICAgICBpbnQgKnNwYWNlOwotICAgIFB5T2JqZWN0ICplcnJvYmogPSBnZXRfZXJyb3Jfb2JqZWN0KCZzcGFjZSk7CisgICAgUHlPYmplY3QgKmVycm9iaiA9IF9jdHlwZXNfZ2V0X2Vycm9iaigmc3BhY2UpOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKICAgICBpZiAoZXJyb2JqID09IE5VTEwpCkBAIC0xNzcsNyArMTkyLDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIsICZuZXdfZXJybm8pKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlcnJvYmogPSBnZXRfZXJyb3Jfb2JqZWN0KCZzcGFjZSk7CisgICAgZXJyb2JqID0gX2N0eXBlc19nZXRfZXJyb2JqKCZzcGFjZSk7CiAgICAgaWYgKGVycm9iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBvbGRfZXJybm8gPSBzcGFjZVtpbmRleF07CkBAIC0yMzQsMTU0ICsyNDksMTUwIEBACiB9CiAKICNpZm5kZWYgRE9OVF9VU0VfU0VICi12b2lkIFNldEV4Y2VwdGlvbihEV09SRCBjb2RlLCBFWENFUFRJT05fUkVDT1JEICpwcikKK3N0YXRpYyB2b2lkIFNldEV4Y2VwdGlvbihEV09SRCBjb2RlLCBFWENFUFRJT05fUkVDT1JEICpwcikKIHsKLSAgICBUQ0hBUiAqbHBNc2dCdWY7Ci0gICAgbHBNc2dCdWYgPSBGb3JtYXRFcnJvcihjb2RlKTsKLSAgICBpZihscE1zZ0J1ZikgewotICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0Vycihjb2RlKTsKLSAgICAgICAgTG9jYWxGcmVlKGxwTXNnQnVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKLSAgICAgICAgY2FzZSBFWENFUFRJT05fQUNDRVNTX1ZJT0xBVElPTjoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIHJlYWQgZnJvbSBvciB3cml0ZQotICAgICAgICAgICAgICAgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGRvZXMgbm90Ci0gICAgICAgICAgICAgICBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3MuICovCi0gICAgICAgICAgICBpZiAocHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzBdID09IDApCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiByZWFkaW5nICVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHdyaXRpbmcgJXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0JSRUFLUE9JTlQ6Ci0gICAgICAgICAgICAvKiBBIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBicmVha3BvaW50IGVuY291bnRlcmVkIik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9EQVRBVFlQRV9NSVNBTElHTk1FTlQ6Ci0gICAgICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byByZWFkIG9yIHdyaXRlIGRhdGEgdGhhdCBpcwotICAgICAgICAgICAgICAgbWlzYWxpZ25lZCBvbiBoYXJkd2FyZSB0aGF0IGRvZXMgbm90IHByb3ZpZGUKLSAgICAgICAgICAgICAgIGFsaWdubWVudC4gRm9yIGV4YW1wbGUsIDE2LWJpdCB2YWx1ZXMgbXVzdCBiZQotICAgICAgICAgICAgICAgYWxpZ25lZCBvbiAyLWJ5dGUgYm91bmRhcmllcywgMzItYml0IHZhbHVlcyBvbgotICAgICAgICAgICAgICAgNC1ieXRlIGJvdW5kYXJpZXMsIGFuZCBzbyBvbi4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZGF0YXR5cGUgbWlzYWxpZ25tZW50Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9TSU5HTEVfU1RFUDoKLSAgICAgICAgICAgIC8qIEEgdHJhY2UgdHJhcCBvciBvdGhlciBzaW5nbGUtaW5zdHJ1Y3Rpb24gbWVjaGFuaXNtCi0gICAgICAgICAgICAgICBzaWduYWxlZCB0aGF0IG9uZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBleGVjdXRlZC4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc2luZ2xlIHN0ZXAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0FSUkFZX0JPVU5EU19FWENFRURFRDoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBhcnJheSBlbGVtZW50Ci0gICAgICAgICAgICAgICB0aGF0IGlzIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQotICAgICAgICAgICAgICAgc3VwcG9ydHMgYm91bmRzIGNoZWNraW5nLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhcnJheSBib3VuZHMgZXhjZWVkZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ERU5PUk1BTF9PUEVSQU5EOgotICAgICAgICAgICAgLyogT25lIG9mIHRoZSBvcGVyYW5kcyBpbiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbgotICAgICAgICAgICAgICAgaXMgZGVub3JtYWwuIEEgZGVub3JtYWwgdmFsdWUgaXMgb25lIHRoYXQgaXMgdG9vCi0gICAgICAgICAgICAgICBzbWFsbCB0byByZXByZXNlbnQgYXMgYSBzdGFuZGFyZCBmbG9hdGluZy1wb2ludAotICAgICAgICAgICAgICAgdmFsdWUuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgZGVub3JtYWwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ESVZJREVfQllfWkVSTzoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhIGZsb2F0aW5nLXBvaW50Ci0gICAgICAgICAgICAgICB2YWx1ZSBieSBhIGZsb2F0aW5nLXBvaW50IGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgZGl2aWRlIGJ5IHplcm8iKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTkVYQUNUX1JFU1VMVDoKLSAgICAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gY2Fubm90IGJlCi0gICAgICAgICAgICAgICByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZGVjaW1hbCBmcmFjdGlvbi4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW5leGFjdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lOVkFMSURfT1BFUkFUSU9OOgotICAgICAgICAgICAgLyogVGhpcyBleGNlcHRpb24gcmVwcmVzZW50cyBhbnkgZmxvYXRpbmctcG9pbnQKLSAgICAgICAgICAgICAgIGV4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbnZhbGlkIG9wZXJhdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX09WRVJGTE9XOgotICAgICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzCi0gICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZQotICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBvdmVyZmxvdyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX1NUQUNLX0NIRUNLOgotICAgICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAotICAgICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXIvdW5kZXJmbG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVzoKLSAgICAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKLSAgICAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyZmxvdyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fRkxUX1VOREVSRkxPVzoKLSAgICAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcyBsZXNzCi0gICAgICAgICAgICAgICB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZwotICAgICAgICAgICAgICAgdHlwZS4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgdW5kZXJmbG93Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVYQ0VQVElPTl9JTlRfRElWSURFX0JZX1pFUk86Ci0gICAgICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYW4gaW50ZWdlciB2YWx1ZSBieQotICAgICAgICAgICAgICAgYW4gaW50ZWdlciBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgZGl2aWRlIGJ5IHplcm8iKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9PVkVSRkxPVzoKLSAgICAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYW4gaW50ZWdlciBvcGVyYXRpb24gY2F1c2VkIGEgY2FycnkKLSAgICAgICAgICAgICAgIG91dCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHJlc3VsdC4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBvdmVyZmxvdyIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fUFJJVl9JTlNUUlVDVElPTjoKLSAgICAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gaW5zdHJ1Y3Rpb24KLSAgICAgICAgICAgICAgIHdob3NlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudAotICAgICAgICAgICAgICAgbWFjaGluZSBtb2RlLiAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgotICAgICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGFmdGVyIGEKLSAgICAgICAgICAgICAgIG5vbmNvbnRpbnVhYmxlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogbm9jb250aW51YWJsZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoImVycm9yICVkXG4iLCBjb2RlKTsKKyAgICAvKiBUaGUgJ2NvZGUnIGlzIGEgbm9ybWFsIHdpbjMyIGVycm9yIGNvZGUgc28gaXQgY291bGQgYmUgaGFuZGxlZCBieQorICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKCkuIEhvd2V2ZXIsIGZvciBzb21lIGVycm9ycywgd2UgaGF2ZSBhZGRpdGlvbmFsCisgICAgaW5mb3JtYXRpb24gbm90IGluY2x1ZGVkIGluIHRoZSBlcnJvciBjb2RlLiBXZSBoYW5kbGUgdGhvc2UgaGVyZSBhbmQKKyAgICBkZWxlZ2F0ZSBhbGwgb3RoZXJzIHRvIHRoZSBnZW5lcmljIGZ1bmN0aW9uLiAqLworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgRVhDRVBUSU9OX0FDQ0VTU19WSU9MQVRJT046CisgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIHJlYWQgZnJvbSBvciB3cml0ZQorICAgICAgICAgICB0byBhIHZpcnR1YWwgYWRkcmVzcyBmb3Igd2hpY2ggaXQgZG9lcyBub3QKKyAgICAgICAgICAgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzLiAqLworICAgICAgICBpZiAocHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzBdID09IDApCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb24gY29kZSAweCUwOHgiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHJlYWRpbmcgJXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiB3cml0aW5nICVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0JSRUFLUE9JTlQ6CisgICAgICAgIC8qIEEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBicmVha3BvaW50IGVuY291bnRlcmVkIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fREFUQVRZUEVfTUlTQUxJR05NRU5UOgorICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byByZWFkIG9yIHdyaXRlIGRhdGEgdGhhdCBpcworICAgICAgICAgICBtaXNhbGlnbmVkIG9uIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgcHJvdmlkZQorICAgICAgICAgICBhbGlnbm1lbnQuIEZvciBleGFtcGxlLCAxNi1iaXQgdmFsdWVzIG11c3QgYmUKKyAgICAgICAgICAgYWxpZ25lZCBvbiAyLWJ5dGUgYm91bmRhcmllcywgMzItYml0IHZhbHVlcyBvbgorICAgICAgICAgICA0LWJ5dGUgYm91bmRhcmllcywgYW5kIHNvIG9uLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZGF0YXR5cGUgbWlzYWxpZ25tZW50Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fU0lOR0xFX1NURVA6CisgICAgICAgIC8qIEEgdHJhY2UgdHJhcCBvciBvdGhlciBzaW5nbGUtaW5zdHJ1Y3Rpb24gbWVjaGFuaXNtCisgICAgICAgICAgIHNpZ25hbGVkIHRoYXQgb25lIGluc3RydWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc2luZ2xlIHN0ZXAiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9BUlJBWV9CT1VORFNfRVhDRUVERUQ6CisgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBhcnJheSBlbGVtZW50CisgICAgICAgICAgIHRoYXQgaXMgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlCisgICAgICAgICAgIHN1cHBvcnRzIGJvdW5kcyBjaGVja2luZy4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFycmF5IGJvdW5kcyBleGNlZWRlZCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ERU5PUk1BTF9PUEVSQU5EOgorICAgICAgICAvKiBPbmUgb2YgdGhlIG9wZXJhbmRzIGluIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uCisgICAgICAgICAgIGlzIGRlbm9ybWFsLiBBIGRlbm9ybWFsIHZhbHVlIGlzIG9uZSB0aGF0IGlzIHRvbworICAgICAgICAgICBzbWFsbCB0byByZXByZXNlbnQgYXMgYSBzdGFuZGFyZCBmbG9hdGluZy1wb2ludAorICAgICAgICAgICB2YWx1ZS4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgZGVub3JtYWwiKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9GTFRfRElWSURFX0JZX1pFUk86CisgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhIGZsb2F0aW5nLXBvaW50CisgICAgICAgICAgIHZhbHVlIGJ5IGEgZmxvYXRpbmctcG9pbnQgZGl2aXNvciBvZiB6ZXJvLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgZGl2aWRlIGJ5IHplcm8iKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5FWEFDVF9SRVNVTFQ6CisgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gY2Fubm90IGJlCisgICAgICAgICAgIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBkZWNpbWFsIGZyYWN0aW9uLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW5leGFjdCIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgLyogVGhpcyBleGNlcHRpb24gcmVwcmVzZW50cyBhbnkgZmxvYXRpbmctcG9pbnQKKyAgICAgICAgICAgZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbnZhbGlkIG9wZXJhdGlvbiIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9PVkVSRkxPVzoKKyAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzCisgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlCisgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZS4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IG92ZXJmbG93Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fRkxUX1NUQUNLX0NIRUNLOgorICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CisgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3Zlci91bmRlcmZsb3ciKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVzoKKyAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAorICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXJmbG93Iik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fRkxUX1VOREVSRkxPVzoKKyAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIGxlc3MKKyAgICAgICAgICAgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgdHlwZS4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IHVuZGVyZmxvdyIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9ESVZJREVfQllfWkVSTzoKKyAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGFuIGludGVnZXIgdmFsdWUgYnkKKyAgICAgICAgICAgYW4gaW50ZWdlciBkaXZpc29yIG9mIHplcm8uICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFWENFUFRJT05fSU5UX09WRVJGTE9XOgorICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGFuIGludGVnZXIgb3BlcmF0aW9uIGNhdXNlZCBhIGNhcnJ5CisgICAgICAgICAgIG91dCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHJlc3VsdC4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgb3ZlcmZsb3ciKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVYQ0VQVElPTl9QUklWX0lOU1RSVUNUSU9OOgorICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBleGVjdXRlIGFuIGluc3RydWN0aW9uCisgICAgICAgICAgIHdob3NlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudAorICAgICAgICAgICBtYWNoaW5lIG1vZGUuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbiIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUSU9OX05PTkNPTlRJTlVBQkxFX0VYQ0VQVElPTjoKKyAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGFmdGVyIGEKKyAgICAgICAgICAgbm9uY29udGludWFibGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogbm9jb250aW51YWJsZSIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGNvZGUpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTQxMCw3ICs0MjEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBQeUNBcmdPYmplY3QgKgotbmV3X0NBcmdPYmplY3Qodm9pZCkKK1B5Q0FyZ09iamVjdF9uZXcodm9pZCkKIHsKICAgICBQeUNBcmdPYmplY3QgKnA7CiAgICAgcCA9IFB5T2JqZWN0X05ldyhQeUNBcmdPYmplY3QsICZQeUNBcmdfVHlwZSk7CkBAIC02NzQsNyArNjg1LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBtZW1zZXQocGEtPnZhbHVlLnAsIDAsIHNpemUpOwotICAgICAgICBwYS0+a2VlcCA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cihwYS0+dmFsdWUucCwgUHlNZW1fRnJlZSk7CisgICAgICAgIHBhLT5rZWVwID0gQ0FQU1VMRV9ORVcocGEtPnZhbHVlLnAsIENUWVBFU19DQVBTVUxFX1dDSEFSX1QpOwogICAgICAgICBpZiAoIXBhLT5rZWVwKSB7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKHBhLT52YWx1ZS5wKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTcwOSw3ICs3MjAsNyBAQAogfQogCiAKLWZmaV90eXBlICpHZXRUeXBlKFB5T2JqZWN0ICpvYmopCitmZmlfdHlwZSAqX2N0eXBlc19nZXRfZmZpX3R5cGUoUHlPYmplY3QgKm9iaikKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgIGlmIChvYmogPT0gTlVMTCkKQEAgLTc4OSw3ICs4MDAsNyBAQAogICAgIH0KIAogICAgIGlmIChmbGFncyAmIChGVU5DRkxBR19VU0VfRVJSTk8gfCBGVU5DRkxBR19VU0VfTEFTVEVSUk9SKSkgewotICAgICAgICBlcnJvcl9vYmplY3QgPSBnZXRfZXJyb3Jfb2JqZWN0KCZzcGFjZSk7CisgICAgICAgIGVycm9yX29iamVjdCA9IF9jdHlwZXNfZ2V0X2Vycm9iaigmc3BhY2UpOwogICAgICAgICBpZiAoZXJyb3Jfb2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtODEzLDcgKzgyNCw3IEBACiAjZW5kaWYKICAgICAgICAgZGVsdGEgPQogI2VuZGlmCi0gICAgICAgICAgICBmZmlfY2FsbCgmY2lmLCAodm9pZCAqKXBQcm9jLCByZXNtZW0sIGF2YWx1ZXMpOworICAgICAgICAgICAgICAgIGZmaV9jYWxsKCZjaWYsICh2b2lkICopcFByb2MsIHJlc21lbSwgYXZhbHVlcyk7CiAjaWZkZWYgTVNfV0lOMzIKICNpZm5kZWYgRE9OVF9VU0VfU0VICiAgICAgfQpAQCAtODQ4LDI5ICs4NTksMjkgQEAKICNpZmRlZiBNU19XSU42NAogICAgIGlmIChkZWx0YSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZmZpX2NhbGwgZmFpbGVkIHdpdGggY29kZSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICBkZWx0YSk7CisgICAgICAgICAgICAgICAgICJmZmlfY2FsbCBmYWlsZWQgd2l0aCBjb2RlICVkIiwKKyAgICAgICAgICAgICAgICAgZGVsdGEpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoZGVsdGEgPCAwKSB7CiAgICAgICAgIGlmIChmbGFncyAmIEZVTkNGTEFHX0NERUNMKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm9yIHdyb25nIGNhbGxpbmcgY29udmVudGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICJQcm9jZWR1cmUgY2FsbGVkIHdpdGggbm90IGVub3VnaCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSAiCisgICAgICAgICAgICAgICAgICAgICAib3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIC1kZWx0YSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoJWQgYnl0ZXMgbWlzc2luZykiLAotICAgICAgICAgICAgICAgICAgICAgICAgIC1kZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggIgorICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoJWQgYnl0ZXMgbWlzc2luZykiLAorICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSBpZiAoZGVsdGEgPiAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBpbiBleGNlc3MpIiwKLSAgICAgICAgICAgICAgICAgICAgIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSAiCisgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIGluIGV4Y2VzcykiLAorICAgICAgICAgICAgICAgICBkZWx0YSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAjZW5kaWYKQEAgLTkwNywyNCArOTE4LDI0IEBACiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZXN0eXBlLCAiaSIsICooaW50ICopcmVzdWx0KTsKIAotICAgIGlmIChkaWN0LT5nZXRmdW5jICYmICFJc1NpbXBsZVN1YlR5cGUocmVzdHlwZSkpIHsKKyAgICBpZiAoZGljdC0+Z2V0ZnVuYyAmJiAhX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UocmVzdHlwZSkpIHsKICAgICAgICAgcmV0dmFsID0gZGljdC0+Z2V0ZnVuYyhyZXN1bHQsIGRpY3QtPnNpemUpOwogICAgICAgICAvKiBJZiByZXN0eXBlIGlzIHB5X29iamVjdCAoZGV0ZWN0ZWQgYnkgY29tcGFyaW5nIGdldGZ1bmMgd2l0aAogICAgICAgICAgICBPX2dldCksIHdlIGhhdmUgdG8gY2FsbCBQeV9ERUNSRUYgYmVjYXVzZSBPX2dldCBoYXMgYWxyZWFkeQogICAgICAgICAgICBjYWxsZWQgUHlfSU5DUkVGLgogICAgICAgICAqLwotICAgICAgICBpZiAoZGljdC0+Z2V0ZnVuYyA9PSBnZXRlbnRyeSgiTyIpLT5nZXRmdW5jKSB7CisgICAgICAgIGlmIChkaWN0LT5nZXRmdW5jID09IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiTyIpLT5nZXRmdW5jKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXR2YWwgPSBDRGF0YV9Gcm9tQmFzZU9iaihyZXN0eXBlLCBOVUxMLCAwLCByZXN1bHQpOworICAgICAgICByZXR2YWwgPSBQeUNEYXRhX0Zyb21CYXNlT2JqKHJlc3R5cGUsIE5VTEwsIDAsIHJlc3VsdCk7CiAKICAgICBpZiAoIWNoZWNrZXIgfHwgIXJldHZhbCkKICAgICAgICAgcmV0dXJuIHJldHZhbDsKIAogICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNoZWNrZXIsIHJldHZhbCwgTlVMTCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgX0FkZFRyYWNlYmFjaygiR2V0UmVzdWx0IiwgIl9jdHlwZXMvY2FsbHByb2MuYyIsIF9fTElORV9fLTIpOworICAgICAgICBfY3R5cGVzX2FkZF90cmFjZWJhY2soIkdldFJlc3VsdCIsICJfY3R5cGVzL2NhbGxwcm9jLmMiLCBfX0xJTkVfXy0yKTsKICAgICBQeV9ERUNSRUYocmV0dmFsKTsKICAgICByZXR1cm4gdjsKIH0KQEAgLTkzMyw3ICs5NDQsNyBAQAogICogUmFpc2UgYSBuZXcgZXhjZXB0aW9uICdleGNfY2xhc3MnLCBhZGRpbmcgYWRkaXRpb25hbCB0ZXh0IHRvIHRoZSBvcmlnaW5hbAogICogZXhjZXB0aW9uIHN0cmluZy4KICAqLwotdm9pZCBFeHRlbmRfRXJyb3JfSW5mbyhQeU9iamVjdCAqZXhjX2NsYXNzLCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlPYmplY3QgKmV4Y19jbGFzcywgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YXJnczsKICAgICBQeU9iamVjdCAqdHAsICp2LCAqdGIsICpzLCAqY2xzX3N0ciwgKm1zZ19zdHI7CkBAIC0xMDU4LDcgKzEwNjksNyBAQAogICoKICAqIC0gWFhYIHZhcmlvdXMgcmVxdWlyZW1lbnRzIGZvciByZXN0eXBlLCBub3QgeWV0IGNvbGxlY3RlZAogICovCi1QeU9iamVjdCAqX0NhbGxQcm9jKFBQUk9DIHBQcm9jLAorUHlPYmplY3QgKl9jdHlwZXNfY2FsbHByb2MoUFBST0MgcFByb2MsCiAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmd0dXBsZSwKICNpZmRlZiBNU19XSU4zMgogICAgICAgICAgICAgICAgICAgICBJVW5rbm93biAqcEl1bmssCkBAIC0xMTExLDcgKzExMjIsNyBAQAogICAgICAgICBhcmcgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cGxlLCBpKTsgICAgICAgICAgICAvKiBib3Jyb3dlZCByZWYgKi8KICAgICAgICAgLyogRm9yIGNkZWNsIGZ1bmN0aW9ucywgd2UgYWxsb3cgbW9yZSBhY3R1YWwgYXJndW1lbnRzCiAgICAgICAgICAgIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgYXJndHlwZXMgdHVwbGUuCi0gICAgICAgICAgIFRoaXMgaXMgY2hlY2tlZCBpbiBfY3R5cGVzOjpDRnVuY1B0cl9DYWxsCisgICAgICAgICAgIFRoaXMgaXMgY2hlY2tlZCBpbiBfY3R5cGVzOjpQeUNGdW5jUHRyX0NhbGwKICAgICAgICAgKi8KICAgICAgICAgaWYgKGFyZ3R5cGVzICYmIGFyZ3R5cGVfY291bnQgPiBpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdjsKQEAgLTExMjAsMjYgKzExMzEsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBFeHRlbmRfRXJyb3JfSW5mbyhQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOworICAgICAgICAgICAgICAgIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CiAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlcnIgPSBDb252UGFyYW0odiwgaSsxLCBwYSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICBpZiAoLTEgPT0gZXJyKSB7Ci0gICAgICAgICAgICAgICAgRXh0ZW5kX0Vycm9yX0luZm8oUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKKyAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOwogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVyciA9IENvbnZQYXJhbShhcmcsIGkrMSwgcGEpOwogICAgICAgICAgICAgaWYgKC0xID09IGVycikgewotICAgICAgICAgICAgICAgIEV4dGVuZF9FcnJvcl9JbmZvKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CisgICAgICAgICAgICAgICAgX2N0eXBlc19leHRlbmRfZXJyb3IoUHlFeGNfQXJnRXJyb3IsICJhcmd1bWVudCAlZDogIiwgaSsxKTsKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7IC8qIGxlYWtpbmcgPyAqLwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgcnR5cGUgPSBHZXRUeXBlKHJlc3R5cGUpOworICAgIHJ0eXBlID0gX2N0eXBlc19nZXRfZmZpX3R5cGUocmVzdHlwZSk7CiAgICAgcmVzYnVmID0gYWxsb2NhKG1heChydHlwZS0+c2l6ZSwgc2l6ZW9mKGZmaV9hcmcpKSk7CiAKICAgICBhdmFsdWVzID0gKHZvaWQgKiopYWxsb2NhKHNpemVvZih2b2lkICopICogYXJnY291bnQpOwpAQCAtMTE1MCw3ICsxMTYxLDcgQEAKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2NvdW50OyArK2kpIHsKICAgICAgICAgYXR5cGVzW2ldID0gYXJnc1tpXS5mZmlfdHlwZTsKLSAgICAgICAgaWYgKGF0eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgaWYgKGF0eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgCiAjaWZkZWYgX1dJTjY0CiAgICAgICAgICAgICAmJiBhdHlwZXNbaV0tPnNpemUgPD0gc2l6ZW9mKHZvaWQgKikKICNlbmRpZgpAQCAtMTM1MSw3ICsxMzYyLDcgQEAKICAgICBwSXVuayA9IChJVW5rbm93biAqKSgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSk7CiAgICAgbHBWdGJsID0gKFBQUk9DICopKHBJdW5rLT5scFZ0YmwpOwogCi0gICAgcmVzdWx0ID0gIF9DYWxsUHJvYyhscFZ0YmxbaW5kZXhdLAorICAgIHJlc3VsdCA9ICBfY3R5cGVzX2NhbGxwcm9jKGxwVnRibFtpbmRleF0sCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAjaWZkZWYgTVNfV0lOMzIKICAgICAgICAgICAgICAgICAgICAgICAgIHBJdW5rLApAQCAtMTQ3NCw3ICsxNDg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmVzdWx0ID0gIF9DYWxsUHJvYygoUFBST0MpZnVuYywKKyAgICByZXN1bHQgPSAgX2N0eXBlc19jYWxscHJvYygoUFBST0MpZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKICNpZmRlZiBNU19XSU4zMgogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKQEAgLTE1MDUsNyArMTUxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVR1cGxlX1R5cGUsICZhcmd1bWVudHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJlc3VsdCA9ICBfQ2FsbFByb2MoKFBQUk9DKWZ1bmMsCisgICAgcmVzdWx0ID0gIF9jdHlwZXNfY2FsbHByb2MoKFBQUk9DKWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAjaWZkZWYgTVNfV0lOMzIKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCkBAIC0xNTk3LDcgKzE2MDgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBwYXJnID0gbmV3X0NBcmdPYmplY3QoKTsKKyAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwogICAgIGlmIChwYXJnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNjcyLDE3ICsxNjgzLDE3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInpzOnNldF9jb252ZXJzaW9uX21vZGUiLCAmY29kaW5nLCAmbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIih6eikiLCBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcsIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOworICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIih6eikiLCBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwogICAgIGlmIChjb2RpbmcpIHsKLSAgICAgICAgUHlNZW1fRnJlZShjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcpOwotICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcgPSBQeU1lbV9NYWxsb2Moc3RybGVuKGNvZGluZykgKyAxKTsKLSAgICAgICAgc3RyY3B5KGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywgY29kaW5nKTsKKyAgICAgICAgUHlNZW1fRnJlZShfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcpOworICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcgPSBQeU1lbV9NYWxsb2Moc3RybGVuKGNvZGluZykgKyAxKTsKKyAgICAgICAgc3RyY3B5KF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywgY29kaW5nKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcgPSBOVUxMOworICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcgPSBOVUxMOwogICAgIH0KLSAgICBQeU1lbV9GcmVlKGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOwotICAgIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG1vZGUpICsgMSk7Ci0gICAgc3RyY3B5KGNvbnZlcnNpb25fbW9kZV9lcnJvcnMsIG1vZGUpOworICAgIFB5TWVtX0ZyZWUoX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CisgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyA9IFB5TWVtX01hbGxvYyhzdHJsZW4obW9kZSkgKyAxKTsKKyAgICBzdHJjcHkoX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycywgbW9kZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTc4MSw3ICsxNzkyLDcgQEAKICAgICBQeU9iamVjdCAqa2V5OwogICAgIGNoYXIgKmJ1ZjsKIAotICAgIHJlc3VsdCA9IFB5RGljdF9HZXRJdGVtKF9wb2ludGVyX3R5cGVfY2FjaGUsIGNscyk7CisgICAgcmVzdWx0ID0gUHlEaWN0X0dldEl0ZW0oX2N0eXBlc19wdHJ0eXBlX2NhY2hlLCBjbHMpOwogICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgUHlfSU5DUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzg5LDEwICsxODAwLDEwIEBACiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrRXhhY3QoY2xzKSkgewogICAgICAgICBidWYgPSBhbGxvY2Eoc3RybGVuKFB5U3RyaW5nX0FTX1NUUklORyhjbHMpKSArIDMgKyAxKTsKICAgICAgICAgc3ByaW50ZihidWYsICJMUF8lcyIsIFB5U3RyaW5nX0FTX1NUUklORyhjbHMpKTsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlBvaW50ZXJfVHlwZSksCisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QgKilQeV9UWVBFKCZQeUNQb2ludGVyX1R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMoTyl7fSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUG9pbnRlcl9UeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUNQb2ludGVyX1R5cGUpOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIocmVzdWx0KTsKQEAgLTE4MDAsMTAgKzE4MTEsMTAgQEAKICAgICAgICAgdHlwID0gKFB5VHlwZU9iamVjdCAqKWNsczsKICAgICAgICAgYnVmID0gYWxsb2NhKHN0cmxlbih0eXAtPnRwX25hbWUpICsgMyArIDEpOwogICAgICAgICBzcHJpbnRmKGJ1ZiwgIkxQXyVzIiwgdHlwLT50cF9uYW1lKTsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlBvaW50ZXJfVHlwZSksCisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QgKilQeV9UWVBFKCZQeUNQb2ludGVyX1R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMoTyl7c099IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQb2ludGVyX1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDUG9pbnRlcl9UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90eXBlXyIsIGNscyk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xODEzLDcgKzE4MjQsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibXVzdCBiZSBhIGN0eXBlcyB0eXBlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoLTEgPT0gUHlEaWN0X1NldEl0ZW0oX3BvaW50ZXJfdHlwZV9jYWNoZSwga2V5LCByZXN1bHQpKSB7CisgICAgaWYgKC0xID09IFB5RGljdF9TZXRJdGVtKF9jdHlwZXNfcHRydHlwZV9jYWNoZSwga2V5LCByZXN1bHQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODI4LDcgKzE4MzksNyBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgUHlPYmplY3QgKnR5cDsKIAotICAgIHR5cCA9IFB5RGljdF9HZXRJdGVtKF9wb2ludGVyX3R5cGVfY2FjaGUsIChQeU9iamVjdCAqKVB5X1RZUEUoYXJnKSk7CisgICAgdHlwID0gUHlEaWN0X0dldEl0ZW0oX2N0eXBlc19wdHJ0eXBlX2NhY2hlLCAoUHlPYmplY3QgKilQeV9UWVBFKGFyZykpOwogICAgIGlmICh0eXApCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHR5cCwgYXJnLCBOVUxMKTsKICAgICB0eXAgPSBQT0lOVEVSKE5VTEwsIChQeU9iamVjdCAqKVB5X1RZUEUoYXJnKSk7CkBAIC0xODY2LDcgKzE4NzcsNyBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJzaU4iLCBkaWN0LT5mb3JtYXQsIGRpY3QtPm5kaW0sIHNoYXBlKTsKIH0KIAotUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKK1B5TWV0aG9kRGVmIF9jdHlwZXNfbW9kdWxlX21ldGhvZHNbXSA9IHsKICAgICB7ImdldF9lcnJubyIsIGdldF9lcnJubywgTUVUSF9OT0FSR1N9LAogICAgIHsic2V0X2Vycm5vIiwgc2V0X2Vycm5vLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiUE9JTlRFUiIsIFBPSU5URVIsIE1FVEhfTyB9LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jIGIvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCmluZGV4IDQ2MDUzYjguLmM3MDUzZWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKQEAgLTEwLDEyICsxMCwxNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiY3R5cGVzLmgiCiAKKworI2RlZmluZSBDVFlQRVNfQ0FQU1VMRV9XQ0hBUl9UICJfY3R5cGVzL2NmaWVsZC5jIHdjaGFyX3QgYnVmZmVyIGZyb20gdW5pY29kZSIKK0NUWVBFU19DQVBTVUxFX0lOU1RBTlRJQVRFX0RFU1RSVUNUT1IoQ1RZUEVTX0NBUFNVTEVfV0NIQVJfVCkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAgQ0ZpZWxkX1R5cGUKKyAgUHlDRmllbGRfVHlwZQogKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1DRmllbGRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorUHlDRmllbGRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIENGaWVsZE9iamVjdCAqb2JqOwogICAgIG9iaiA9IChDRmllbGRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKQEAgLTM1LDcgKzQwLDcgQEAKICAqIHByZXZfZGVzYyBwb2ludHMgdG8gdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzIGJpdGZpZWxkLCBpZiBhbnkuCiAgKi8KIFB5T2JqZWN0ICoKLUNGaWVsZF9Gcm9tRGVzYyhQeU9iamVjdCAqZGVzYywgUHlfc3NpemVfdCBpbmRleCwKK1B5Q0ZpZWxkX0Zyb21EZXNjKFB5T2JqZWN0ICpkZXNjLCBQeV9zc2l6ZV90IGluZGV4LAogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnBmaWVsZF9zaXplLCBpbnQgYml0c2l6ZSwgaW50ICpwYml0b2ZzLAogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnBzaXplLCBQeV9zc2l6ZV90ICpwb2Zmc2V0LCBQeV9zc2l6ZV90ICpwYWxpZ24sCiAgICAgICAgICAgICAgICAgaW50IHBhY2ssIGludCBiaWdfZW5kaWFuKQpAQCAtNTIsNyArNTcsNyBAQAogI2RlZmluZSBDT05UX0JJVEZJRUxEIDIKICNkZWZpbmUgRVhQQU5EX0JJVEZJRUxEIDMKIAotICAgIHNlbGYgPSAoQ0ZpZWxkT2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgoUHlPYmplY3QgKikmQ0ZpZWxkX1R5cGUsCisgICAgc2VsZiA9IChDRmllbGRPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZQeUNGaWVsZF9UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwMiw3ICsxMDcsNyBAQAogICAgIC8qICBGaWVsZCBkZXNjcmlwdG9ycyBmb3IgJ2NfY2hhciAqIG4nIGFyZSBiZSBzY3BlY2lhbCBjYXNlZCB0bwogICAgICAgICByZXR1cm4gYSBQeXRob24gc3RyaW5nIGluc3RlYWQgb2YgYW4gQXJyYXkgb2JqZWN0IGluc3RhbmNlLi4uCiAgICAgKi8KLSAgICBpZiAoQXJyYXlUeXBlT2JqZWN0X0NoZWNrKHByb3RvKSkgeworICAgIGlmIChQeUNBcnJheVR5cGVPYmplY3RfQ2hlY2socHJvdG8pKSB7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKmFkaWN0ID0gUHlUeXBlX3N0Z2RpY3QocHJvdG8pOwogICAgICAgICBTdGdEaWN0T2JqZWN0ICppZGljdDsKICAgICAgICAgaWYgKGFkaWN0ICYmIGFkaWN0LT5wcm90bykgewpAQCAtMTEzLDE0ICsxMTgsMTQgQEAKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaWRpY3QtPmdldGZ1bmMgPT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYykgewotICAgICAgICAgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gZ2V0ZW50cnkoInMiKTsKKyAgICAgICAgICAgIGlmIChpZGljdC0+Z2V0ZnVuYyA9PSBfY3R5cGVzX2dldF9maWVsZGRlc2MoImMiKS0+Z2V0ZnVuYykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJzIik7CiAgICAgICAgICAgICAgICAgZ2V0ZnVuYyA9IGZkLT5nZXRmdW5jOwogICAgICAgICAgICAgICAgIHNldGZ1bmMgPSBmZC0+c2V0ZnVuYzsKICAgICAgICAgICAgIH0KICNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgICAgICAgICAgaWYgKGlkaWN0LT5nZXRmdW5jID09IGdldGVudHJ5KCJ1IiktPmdldGZ1bmMpIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IGdldGVudHJ5KCJVIik7CisgICAgICAgICAgICBpZiAoaWRpY3QtPmdldGZ1bmMgPT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPmdldGZ1bmMpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiVSIpOwogICAgICAgICAgICAgICAgIGdldGZ1bmMgPSBmZC0+Z2V0ZnVuYzsKICAgICAgICAgICAgICAgICBzZXRmdW5jID0gZmQtPnNldGZ1bmM7CiAgICAgICAgICAgICB9CkBAIC0xOTQsNyArMTk5LDcgQEAKIH0KIAogc3RhdGljIGludAotQ0ZpZWxkX3NldChDRmllbGRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnN0LCBQeU9iamVjdCAqdmFsdWUpCitQeUNGaWVsZF9zZXQoQ0ZpZWxkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5zdCwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIENEYXRhT2JqZWN0ICpkc3Q7CiAgICAgY2hhciAqcHRyOwpAQCAtMjA2LDEyICsyMTEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkZWxldGUgYXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgcmV0dXJuIENEYXRhX3NldChpbnN0LCBzZWxmLT5wcm90bywgc2VsZi0+c2V0ZnVuYywgdmFsdWUsCisgICAgcmV0dXJuIFB5Q0RhdGFfc2V0KGluc3QsIHNlbGYtPnByb3RvLCBzZWxmLT5zZXRmdW5jLCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmluZGV4LCBzZWxmLT5zaXplLCBwdHIpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0ZpZWxkX2dldChDRmllbGRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbnN0LCBQeVR5cGVPYmplY3QgKnR5cGUpCitQeUNGaWVsZF9nZXQoQ0ZpZWxkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5zdCwgUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIENEYXRhT2JqZWN0ICpzcmM7CiAgICAgaWYgKGluc3QgPT0gTlVMTCkgewpAQCAtMjIwLDUxICsyMjUsNTEgQEAKICAgICB9CiAgICAgYXNzZXJ0KENEYXRhT2JqZWN0X0NoZWNrKGluc3QpKTsKICAgICBzcmMgPSAoQ0RhdGFPYmplY3QgKilpbnN0OwotICAgIHJldHVybiBDRGF0YV9nZXQoc2VsZi0+cHJvdG8sIHNlbGYtPmdldGZ1bmMsIGluc3QsCisgICAgcmV0dXJuIFB5Q0RhdGFfZ2V0KHNlbGYtPnByb3RvLCBzZWxmLT5nZXRmdW5jLCBpbnN0LAogICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aW5kZXgsIHNlbGYtPnNpemUsIHNyYy0+Yl9wdHIgKyBzZWxmLT5vZmZzZXQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0ZpZWxkX2dldF9vZmZzZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmRhdGEpCitQeUNGaWVsZF9nZXRfb2Zmc2V0KFB5T2JqZWN0ICpzZWxmLCB2b2lkICpkYXRhKQogewogICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdCgoKENGaWVsZE9iamVjdCAqKXNlbGYpLT5vZmZzZXQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotQ0ZpZWxkX2dldF9zaXplKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpkYXRhKQorUHlDRmllbGRfZ2V0X3NpemUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmRhdGEpCiB7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KCgoQ0ZpZWxkT2JqZWN0ICopc2VsZiktPnNpemUpOwogfQogCi1zdGF0aWMgUHlHZXRTZXREZWYgQ0ZpZWxkX2dldHNldFtdID0gewotICAgIHsgIm9mZnNldCIsIENGaWVsZF9nZXRfb2Zmc2V0LCBOVUxMLCAib2Zmc2V0IGluIGJ5dGVzIG9mIHRoaXMgZmllbGQiIH0sCi0gICAgeyAic2l6ZSIsIENGaWVsZF9nZXRfc2l6ZSwgTlVMTCwgInNpemUgaW4gYnl0ZXMgb2YgdGhpcyBmaWVsZCIgfSwKK3N0YXRpYyBQeUdldFNldERlZiBQeUNGaWVsZF9nZXRzZXRbXSA9IHsKKyAgICB7ICJvZmZzZXQiLCBQeUNGaWVsZF9nZXRfb2Zmc2V0LCBOVUxMLCAib2Zmc2V0IGluIGJ5dGVzIG9mIHRoaXMgZmllbGQiIH0sCisgICAgeyAic2l6ZSIsIFB5Q0ZpZWxkX2dldF9zaXplLCBOVUxMLCAic2l6ZSBpbiBieXRlcyBvZiB0aGlzIGZpZWxkIiB9LAogICAgIHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9LAogfTsKIAogc3RhdGljIGludAotQ0ZpZWxkX3RyYXZlcnNlKENGaWVsZE9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCitQeUNGaWVsZF90cmF2ZXJzZShDRmllbGRPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5X1ZJU0lUKHNlbGYtPnByb3RvKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotQ0ZpZWxkX2NsZWFyKENGaWVsZE9iamVjdCAqc2VsZikKK1B5Q0ZpZWxkX2NsZWFyKENGaWVsZE9iamVjdCAqc2VsZikKIHsKICAgICBQeV9DTEVBUihzZWxmLT5wcm90byk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCi1DRmllbGRfZGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK1B5Q0ZpZWxkX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgQ0ZpZWxkX2NsZWFyKChDRmllbGRPYmplY3QgKilzZWxmKTsKKyAgICBQeUNGaWVsZF9jbGVhcigoQ0ZpZWxkT2JqZWN0ICopc2VsZik7CiAgICAgc2VsZi0+b2JfdHlwZS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNGaWVsZF9yZXByKENGaWVsZE9iamVjdCAqc2VsZikKK1B5Q0ZpZWxkX3JlcHIoQ0ZpZWxkT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBiaXRzID0gc2VsZi0+c2l6ZSA+PiAxNjsKQEAgLTI5MiwxNyArMjk3LDE3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlUeXBlT2JqZWN0IENGaWVsZF9UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Q0ZpZWxkX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9jdHlwZXMuQ0ZpZWxkIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICBzaXplb2YoQ0ZpZWxkT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KLSAgICBDRmllbGRfZGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICBQeUNGaWVsZF9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KLSAgICAocmVwcmZ1bmMpQ0ZpZWxkX3JlcHIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpUHlDRmllbGRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzE0LDIzICszMTksMjMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyogdHBfZmxhZ3MgKi8KICAgICAiU3RydWN0dXJlL1VuaW9uIG1lbWJlciIsICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpQ0ZpZWxkX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAoaW5xdWlyeSlDRmllbGRfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKHRyYXZlcnNlcHJvYylQeUNGaWVsZF90cmF2ZXJzZSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpUHlDRmllbGRfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCi0gICAgQ0ZpZWxkX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICBQeUNGaWVsZF9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCi0gICAgKGRlc2NyZ2V0ZnVuYylDRmllbGRfZ2V0LCAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KLSAgICAoZGVzY3JzZXRmdW5jKUNGaWVsZF9zZXQsICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIChkZXNjcmdldGZ1bmMpUHlDRmllbGRfZ2V0LCAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgKGRlc2Nyc2V0ZnVuYylQeUNGaWVsZF9zZXQsICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgQ0ZpZWxkX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeUNGaWVsZF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIApAQCAtMTE5MSw4ICsxMTk2LDggQEAKIAogICAgIGlmIChQeVN0cmluZ19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMjY2LDggKzEyNzEsOCBAQAogCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZXJyb3JzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSBpZiAoIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTEzNjQsOCArMTM2OSw4IEBACiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAqKGNoYXIgKiopcHRyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHN0cik7CkBAIC0xNDE1LDggKzE0MjAsOCBAQAogICAgIH0KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uX21vZGVfZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lcnJvcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIGlmIChQeUludF9DaGVjayh2YWx1ZSkgfHwgUHlMb25nX0NoZWNrKHZhbHVlKSkgewpAQCAtMTQ1Nyw3ICsxNDYyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICB9CiAgICAgICAgIG1lbXNldChidWZmZXIsIDAsIHNpemUpOwotICAgICAgICBrZWVwID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKGJ1ZmZlciwgUHlNZW1fRnJlZSk7CisgICAgICAgIGtlZXAgPSBDQVBTVUxFX05FVyhidWZmZXIsIENUWVBFU19DQVBTVUxFX1dDSEFSX1QpOwogICAgICAgICBpZiAoIWtlZXApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKGJ1ZmZlcik7CkBAIC0xNTA5LDggKzE1MTQsOCBAQAogICAgICAgICB2YWx1ZSA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChQeVN0cmluZ19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25fbW9kZV9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbl9tb2RlX2Vycm9ycyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTE2NzAsNyArMTY3NSw3IEBACiAqLwogCiBzdHJ1Y3QgZmllbGRkZXNjICoKLWdldGVudHJ5KGNoYXIgKmZtdCkKK19jdHlwZXNfZ2V0X2ZpZWxkZGVzYyhjaGFyICpmbXQpCiB7CiAgICAgc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CiAgICAgc3RydWN0IGZpZWxkZGVzYyAqdGFibGUgPSBmb3JtYXR0YWJsZTsKQEAgLTE2NzksMTEgKzE2ODQsMTEgQEAKICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogI2lmZGVmIENUWVBFU19VTklDT0RFCiAgICAgICAgIGlmIChzaXplb2Yod2NoYXJfdCkgPT0gc2l6ZW9mKHNob3J0KSkKLSAgICAgICAgICAgIGdldGVudHJ5KCJ1IiktPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgICAgICAgICAgICBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+cGZmaV90eXBlID0gJmZmaV90eXBlX3NzaG9ydDsKICAgICAgICAgZWxzZSBpZiAoc2l6ZW9mKHdjaGFyX3QpID09IHNpemVvZihpbnQpKQotICAgICAgICAgICAgZ2V0ZW50cnkoInUiKS0+cGZmaV90eXBlID0gJmZmaV90eXBlX3NpbnQ7CisgICAgICAgICAgICBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+cGZmaV90eXBlID0gJmZmaV90eXBlX3NpbnQ7CiAgICAgICAgIGVsc2UgaWYgKHNpemVvZih3Y2hhcl90KSA9PSBzaXplb2YobG9uZykpCi0gICAgICAgICAgICBnZXRlbnRyeSgidSIpLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfc2xvbmc7CisgICAgICAgICAgICBfY3R5cGVzX2dldF9maWVsZGRlc2MoInUiKS0+cGZmaV90eXBlID0gJmZmaV90eXBlX3Nsb25nOwogI2VuZGlmCiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmggYi9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKaW5kZXggMzdmNDcwZC4uNTk2NDBjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaApAQCAtNTksNyArNTksNyBAQAogYW5kIHRoaXMgb25lIGlzIG5vdCB1c2VkLgogCiBNYWtpbmcgQ0RhdGFPYmplY3QgYSB2YXJpYWJsZSBzaXplIG9iamVjdCB3b3VsZCBiZSBhIGJldHRlciBzb2x1dGlvbiwgYnV0IG1vcmUKLWRpZmZpY3VsdCBpbiB0aGUgcHJlc2VuY2Ugb2YgQ0Z1bmNQdHJPYmplY3QuICBNYXliZSBsYXRlci4KK2RpZmZpY3VsdCBpbiB0aGUgcHJlc2VuY2Ugb2YgUHlDRnVuY1B0ck9iamVjdC4gIE1heWJlIGxhdGVyLgogKi8KIHVuaW9uIHZhbHVlIHsKICAgICAgICAgICAgICAgICBjaGFyIGNbMTZdOwpAQCAtOTUsNyArOTUsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKLSAgICBmZmlfY2xvc3VyZSAqcGNsOyAvKiB0aGUgQyBjYWxsYWJsZSAqLworICAgIGZmaV9jbG9zdXJlICpwY2xfd3JpdGU7IC8qIHRoZSBDIGNhbGxhYmxlLCB3cml0ZWFibGUgKi8KKyAgICB2b2lkICpwY2xfZXhlYzsgICAgICAgICAvKiB0aGUgQyBjYWxsYWJsZSwgZXhlY3V0YWJsZSAqLwogICAgIGZmaV9jaWYgY2lmOwogICAgIGludCBmbGFnczsKICAgICBQeU9iamVjdCAqY29udmVydGVyczsKQEAgLTEwNSw4ICsxMDYsOCBAQAogICAgIGZmaV90eXBlICpmZmlfcmVzdHlwZTsKICAgICBmZmlfdHlwZSAqYXR5cGVzWzFdOwogfSBDVGh1bmtPYmplY3Q7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IENUaHVua19UeXBlOwotI2RlZmluZSBDVGh1bmtfQ2hlY2tFeGFjdCh2KSAgICAgICAgKCh2KS0+b2JfdHlwZSA9PSAmQ1RodW5rX1R5cGUpCitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q1RodW5rX1R5cGU7CisjZGVmaW5lIENUaHVua19DaGVja0V4YWN0KHYpICAgICAgICAoKHYpLT5vYl90eXBlID09ICZQeUNUaHVua19UeXBlKQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogRmlyc3QgcGFydCBpZGVudGljYWwgdG8gdGFnQ0RhdGFPYmplY3QgKi8KQEAgLTEzNyw2MSArMTM4LDYxIEBACiAgICAgR1VJRCAqaWlkOwogI2VuZGlmCiAgICAgUHlPYmplY3QgKnBhcmFtZmxhZ3M7Ci19IENGdW5jUHRyT2JqZWN0OworfSBQeUNGdW5jUHRyT2JqZWN0OwogCi1leHRlcm4gUHlUeXBlT2JqZWN0IFN0Z0RpY3RfVHlwZTsKLSNkZWZpbmUgU3RnRGljdF9DaGVja0V4YWN0KHYpICAgICAgICgodiktPm9iX3R5cGUgPT0gJlN0Z0RpY3RfVHlwZSkKLSNkZWZpbmUgU3RnRGljdF9DaGVjayh2KSAgICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmU3RnRGljdF9UeXBlKQorZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNTdGdEaWN0X1R5cGU7CisjZGVmaW5lIFB5Q1N0Z0RpY3RfQ2hlY2tFeGFjdCh2KSAgICAgICAgICAgICgodiktPm9iX3R5cGUgPT0gJlB5Q1N0Z0RpY3RfVHlwZSkKKyNkZWZpbmUgUHlDU3RnRGljdF9DaGVjayh2KSAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDU3RnRGljdF9UeXBlKQogCi1leHRlcm4gaW50IFN0cnVjdFVuaW9uVHlwZV91cGRhdGVfc3RnZGljdChQeU9iamVjdCAqZmllbGRzLCBQeU9iamVjdCAqdHlwZSwgaW50IGlzU3RydWN0KTsKK2V4dGVybiBpbnQgUHlDU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KFB5T2JqZWN0ICpmaWVsZHMsIFB5T2JqZWN0ICp0eXBlLCBpbnQgaXNTdHJ1Y3QpOwogZXh0ZXJuIGludCBQeVR5cGVfc3RnaW5mbyhQeVR5cGVPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgKnBzaXplLCBQeV9zc2l6ZV90ICpwYWxpZ24sIFB5X3NzaXplX3QgKnBsZW5ndGgpOwogZXh0ZXJuIGludCBQeU9iamVjdF9zdGdpbmZvKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90ICpwc2l6ZSwgUHlfc3NpemVfdCAqcGFsaWduLCBQeV9zc2l6ZV90ICpwbGVuZ3RoKTsKIAogCiAKLWV4dGVybiBQeVR5cGVPYmplY3QgQ0RhdGFfVHlwZTsKLSNkZWZpbmUgQ0RhdGFPYmplY3RfQ2hlY2tFeGFjdCh2KSAgICAgICAoKHYpLT5vYl90eXBlID09ICZDRGF0YV9UeXBlKQotI2RlZmluZSBDRGF0YU9iamVjdF9DaGVjayh2KSAgICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmQ0RhdGFfVHlwZSkKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDRGF0YV9UeXBlOworI2RlZmluZSBDRGF0YU9iamVjdF9DaGVja0V4YWN0KHYpICAgICAgICgodiktPm9iX3R5cGUgPT0gJlB5Q0RhdGFfVHlwZSkKKyNkZWZpbmUgQ0RhdGFPYmplY3RfQ2hlY2sodikgICAgICAgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlB5Q0RhdGFfVHlwZSkKIAotZXh0ZXJuIFB5VHlwZU9iamVjdCBTaW1wbGVUeXBlX1R5cGU7Ci0jZGVmaW5lIFNpbXBsZVR5cGVPYmplY3RfQ2hlY2tFeGFjdCh2KSAgKCh2KS0+b2JfdHlwZSA9PSAmU2ltcGxlVHlwZV9UeXBlKQotI2RlZmluZSBTaW1wbGVUeXBlT2JqZWN0X0NoZWNrKHYpICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmU2ltcGxlVHlwZV9UeXBlKQorZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNTaW1wbGVUeXBlX1R5cGU7CisjZGVmaW5lIFB5Q1NpbXBsZVR5cGVPYmplY3RfQ2hlY2tFeGFjdCh2KSAgICAgICAoKHYpLT5vYl90eXBlID09ICZQeUNTaW1wbGVUeXBlX1R5cGUpCisjZGVmaW5lIFB5Q1NpbXBsZVR5cGVPYmplY3RfQ2hlY2sodikgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNTaW1wbGVUeXBlX1R5cGUpCiAKLWV4dGVybiBQeVR5cGVPYmplY3QgQ0ZpZWxkX1R5cGU7Ci1leHRlcm4gc3RydWN0IGZpZWxkZGVzYyAqZ2V0ZW50cnkoY2hhciAqZm10KTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDRmllbGRfVHlwZTsKK2V4dGVybiBzdHJ1Y3QgZmllbGRkZXNjICpfY3R5cGVzX2dldF9maWVsZGRlc2MoY2hhciAqZm10KTsKIAogCiBleHRlcm4gUHlPYmplY3QgKgotQ0ZpZWxkX0Zyb21EZXNjKFB5T2JqZWN0ICpkZXNjLCBQeV9zc2l6ZV90IGluZGV4LAorUHlDRmllbGRfRnJvbURlc2MoUHlPYmplY3QgKmRlc2MsIFB5X3NzaXplX3QgaW5kZXgsCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqcGZpZWxkX3NpemUsIGludCBiaXRzaXplLCBpbnQgKnBiaXRvZnMsCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqcHNpemUsIFB5X3NzaXplX3QgKnBvZmZzZXQsIFB5X3NzaXplX3QgKnBhbGlnbiwKICAgICAgICAgICAgICAgICBpbnQgcGFjaywgaW50IGlzX2JpZ19lbmRpYW4pOwogCi1leHRlcm4gUHlPYmplY3QgKkNEYXRhX0F0QWRkcmVzcyhQeU9iamVjdCAqdHlwZSwgdm9pZCAqYnVmKTsKLWV4dGVybiBQeU9iamVjdCAqQ0RhdGFfRnJvbUJ5dGVzKFB5T2JqZWN0ICp0eXBlLCBjaGFyICpkYXRhLCBQeV9zc2l6ZV90IGxlbmd0aCk7CitleHRlcm4gUHlPYmplY3QgKlB5Q0RhdGFfQXRBZGRyZXNzKFB5T2JqZWN0ICp0eXBlLCB2b2lkICpidWYpOworZXh0ZXJuIFB5T2JqZWN0ICpQeUNEYXRhX0Zyb21CeXRlcyhQeU9iamVjdCAqdHlwZSwgY2hhciAqZGF0YSwgUHlfc3NpemVfdCBsZW5ndGgpOwogCi1leHRlcm4gUHlUeXBlT2JqZWN0IEFycmF5VHlwZV9UeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBBcnJheV9UeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBQb2ludGVyVHlwZV9UeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBQb2ludGVyX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IENGdW5jUHRyX1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IENGdW5jUHRyVHlwZV9UeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBTdHJ1Y3RUeXBlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q0FycmF5VHlwZV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNBcnJheV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNQb2ludGVyVHlwZV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUNQb2ludGVyX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Q0Z1bmNQdHJfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDRnVuY1B0clR5cGVfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlDU3RydWN0VHlwZV9UeXBlOwogCi0jZGVmaW5lIEFycmF5VHlwZU9iamVjdF9DaGVjayh2KSAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZBcnJheVR5cGVfVHlwZSkKLSNkZWZpbmUgQXJyYXlPYmplY3RfQ2hlY2sodikgICAgICAgICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJkFycmF5X1R5cGUpCi0jZGVmaW5lIFBvaW50ZXJPYmplY3RfQ2hlY2sodikgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQb2ludGVyX1R5cGUpCi0jZGVmaW5lIFBvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHYpICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQb2ludGVyVHlwZV9UeXBlKQotI2RlZmluZSBDRnVuY1B0ck9iamVjdF9DaGVjayh2KSAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmQ0Z1bmNQdHJfVHlwZSkKLSNkZWZpbmUgQ0Z1bmNQdHJUeXBlT2JqZWN0X0NoZWNrKHYpICAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJkNGdW5jUHRyVHlwZV9UeXBlKQotI2RlZmluZSBTdHJ1Y3RUeXBlT2JqZWN0X0NoZWNrKHYpICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmU3RydWN0VHlwZV9UeXBlKQorI2RlZmluZSBQeUNBcnJheVR5cGVPYmplY3RfQ2hlY2sodikgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDQXJyYXlUeXBlX1R5cGUpCisjZGVmaW5lIEFycmF5T2JqZWN0X0NoZWNrKHYpICAgICAgICAgICAgUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeUNBcnJheV9UeXBlKQorI2RlZmluZSBQb2ludGVyT2JqZWN0X0NoZWNrKHYpICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDUG9pbnRlcl9UeXBlKQorI2RlZmluZSBQeUNQb2ludGVyVHlwZU9iamVjdF9DaGVjayh2KSAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDUG9pbnRlclR5cGVfVHlwZSkKKyNkZWZpbmUgUHlDRnVuY1B0ck9iamVjdF9DaGVjayh2KSAgICAgICAgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDRnVuY1B0cl9UeXBlKQorI2RlZmluZSBQeUNGdW5jUHRyVHlwZU9iamVjdF9DaGVjayh2KSAgIFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlDRnVuY1B0clR5cGVfVHlwZSkKKyNkZWZpbmUgUHlDU3RydWN0VHlwZU9iamVjdF9DaGVjayh2KSAgICBQeU9iamVjdF9UeXBlQ2hlY2sodiwgJlB5Q1N0cnVjdFR5cGVfVHlwZSkKIAogZXh0ZXJuIFB5T2JqZWN0ICoKLUNyZWF0ZUFycmF5VHlwZShQeU9iamVjdCAqaXRlbXR5cGUsIFB5X3NzaXplX3QgbGVuZ3RoKTsKK1B5Q0FycmF5VHlwZV9mcm9tX2N0eXBlKFB5T2JqZWN0ICppdGVtdHlwZSwgUHlfc3NpemVfdCBsZW5ndGgpOwogCi1leHRlcm4gUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXTsKK2V4dGVybiBQeU1ldGhvZERlZiBfY3R5cGVzX21vZHVsZV9tZXRob2RzW107CiAKLWV4dGVybiBDVGh1bmtPYmplY3QgKkFsbG9jRnVuY3Rpb25DYWxsYmFjayhQeU9iamVjdCAqY2FsbGFibGUsCitleHRlcm4gQ1RodW5rT2JqZWN0ICpfY3R5cGVzX2FsbG9jX2NhbGxiYWNrKFB5T2JqZWN0ICpjYWxsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY29udmVydGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVzdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwpAQCAtMjIzLDcgKzIyNCw3IEBACiAgICAgUHlEaWN0T2JqZWN0IGRpY3Q7ICAgICAgICAgIC8qIGZpcnN0IHBhcnQgaWRlbnRpY2FsIHRvIFB5RGljdE9iamVjdCAqLwogLyogVGhlIHNpemUgYW5kIGFsaWduIGZpZWxkcyBhcmUgdW5uZWVkZWQsIHRoZXkgYXJlIGluIGZmaV90eXBlIGFzIHdlbGwuICBBcwogICAgYW4gZXhwZXJpbWVudCBzaG93cywgaXQncyB0cml2aWFsIHRvIGdldCByaWQgb2YgdGhlbSwgdGhlIG9ubHkgdGhpbmcgdG8KLSAgIHJlbWVtYmVyIGlzIHRoYXQgaW4gQXJyYXlUeXBlX25ldyB0aGUgZmZpX3R5cGUgZmllbGRzIG11c3QgYmUgZmlsbGVkIGluIC0KKyAgIHJlbWVtYmVyIGlzIHRoYXQgaW4gUHlDQXJyYXlUeXBlX25ldyB0aGUgZmZpX3R5cGUgZmllbGRzIG11c3QgYmUgZmlsbGVkIGluIC0KICAgIHNvIGZhciBpdCB3YXMgdW5uZWVkZWQgYmVjYXVzZSBsaWJmZmkgZG9lc24ndCBzdXBwb3J0IGFycmF5cyBhdCBhbGwKICAgIChiZWNhdXNlIHRoZXkgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBmdW5jdGlvbiBjYWxscyBhbnl3YXkpLiAgQnV0IGl0J3MKICAgIHRvbyBtdWNoIHJpc2sgdG8gY2hhbmdlIHRoYXQgbm93LCBhbmQgdGhlcmUgYXJlIG90aGVyIGZpZWxkcyB3aGljaCBkb2VuJ3QKQEAgLTIzOCw3ICsyMzksNyBAQAogICAgIEdFVEZVTkMgZ2V0ZnVuYzsgICAgICAgICAgICAvKiBPbmx5IGZvciBzaW1wbGUgb2JqZWN0cyAqLwogICAgIFBBUkFNRlVOQyBwYXJhbWZ1bmM7CiAKLSAgICAvKiBGb2xsb3dpbmcgZmllbGRzIG9ubHkgdXNlZCBieSBDRnVuY1B0clR5cGVfVHlwZSBpbnN0YW5jZXMgKi8KKyAgICAvKiBGb2xsb3dpbmcgZmllbGRzIG9ubHkgdXNlZCBieSBQeUNGdW5jUHRyVHlwZV9UeXBlIGluc3RhbmNlcyAqLwogICAgIFB5T2JqZWN0ICphcmd0eXBlczsgICAgICAgICAvKiB0dXBsZSBvZiBDRGF0YU9iamVjdHMgKi8KICAgICBQeU9iamVjdCAqY29udmVydGVyczsgICAgICAgLyogdHVwbGUoW3QuZnJvbV9wYXJhbSBmb3IgdCBpbiBhcmd0eXBlc10pICovCiAgICAgUHlPYmplY3QgKnJlc3R5cGU7ICAgICAgICAgIC8qIENEYXRhT2JqZWN0IG9yIE5VTEwgKi8KQEAgLTI3Miw3ICsyNzMsNyBAQAogIGNvbnN0cnVjdGlvbiB0aW1lLCBvciBhc3NpZ25zIHRvIGl0IGxhdGVyLCB0cF9zZXRhdHRybyBzaG91bGQgdXBkYXRlIHRoZQogIFN0Z0RpY3RPYmplY3QgZnVuY3Rpb24gdG8gYSBnZW5lcmljIG9uZS4KIAotIEN1cnJlbnRseSwgQ0Z1bmNQdHIgdHlwZXMgaGF2ZSAnY29udmVydGVycycgYW5kICdjaGVja2VyJyBlbnRyaWVzIGluIHRoZWlyCisgQ3VycmVudGx5LCBQeUNGdW5jUHRyIHR5cGVzIGhhdmUgJ2NvbnZlcnRlcnMnIGFuZCAnY2hlY2tlcicgZW50cmllcyBpbiB0aGVpcgogIHR5cGUgZGljdC4gIFRoZXkgYXJlIG9ubHkgdXNlZCB0byBjYWNoZSBhdHRyaWJ1dGVzIGZyb20gb3RoZXIgZW50cmllcywgd2hpaGMKICBpcyB3cm9uZy4KIApAQCAtMzAwLDExICszMDEsMTEgQEAKIC8qIE1heSByZXR1cm4gTlVMTCwgYnV0IGRvZXMgbm90IHNldCBhbiBleGNlcHRpb24hICovCiBleHRlcm4gU3RnRGljdE9iamVjdCAqUHlPYmplY3Rfc3RnZGljdChQeU9iamVjdCAqc2VsZik7CiAKLWV4dGVybiBpbnQgU3RnRGljdF9jbG9uZShTdGdEaWN0T2JqZWN0ICpzcmMsIFN0Z0RpY3RPYmplY3QgKmRzdCk7CitleHRlcm4gaW50IFB5Q1N0Z0RpY3RfY2xvbmUoU3RnRGljdE9iamVjdCAqc3JjLCBTdGdEaWN0T2JqZWN0ICpkc3QpOwogCiB0eXBlZGVmIGludCgqIFBQUk9DKSh2b2lkKTsKIAotUHlPYmplY3QgKl9DYWxsUHJvYyhQUFJPQyBwUHJvYywKK1B5T2JqZWN0ICpfY3R5cGVzX2NhbGxwcm9jKFBQUk9DIHBQcm9jLAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJndW1lbnRzLAogI2lmZGVmIE1TX1dJTjMyCiAgICAgICAgICAgICAgICAgICAgIElVbmtub3duICpwSVVuaywKQEAgLTM1MiwxNyArMzUzLDE3IEBACiAKIGV4dGVybiBQeVR5cGVPYmplY3QgUHlDQXJnX1R5cGU7CiAjZGVmaW5lIFB5Q0FyZ19DaGVja0V4YWN0KHYpICAgICAgICAoKHYpLT5vYl90eXBlID09ICZQeUNBcmdfVHlwZSkKLWV4dGVybiBQeUNBcmdPYmplY3QgKm5ld19DQXJnT2JqZWN0KHZvaWQpOworZXh0ZXJuIFB5Q0FyZ09iamVjdCAqUHlDQXJnT2JqZWN0X25ldyh2b2lkKTsKIAogZXh0ZXJuIFB5T2JqZWN0ICoKLUNEYXRhX2dldChQeU9iamVjdCAqdHlwZSwgR0VURlVOQyBnZXRmdW5jLCBQeU9iamVjdCAqc3JjLAorUHlDRGF0YV9nZXQoUHlPYmplY3QgKnR5cGUsIEdFVEZVTkMgZ2V0ZnVuYywgUHlPYmplY3QgKnNyYywKICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4LCBQeV9zc2l6ZV90IHNpemUsIGNoYXIgKnB0cik7CiAKIGV4dGVybiBpbnQKLUNEYXRhX3NldChQeU9iamVjdCAqZHN0LCBQeU9iamVjdCAqdHlwZSwgU0VURlVOQyBzZXRmdW5jLCBQeU9iamVjdCAqdmFsdWUsCitQeUNEYXRhX3NldChQeU9iamVjdCAqZHN0LCBQeU9iamVjdCAqdHlwZSwgU0VURlVOQyBzZXRmdW5jLCBQeU9iamVjdCAqdmFsdWUsCiAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCwgUHlfc3NpemVfdCBzaXplLCBjaGFyICpwdHIpOwogCi1leHRlcm4gdm9pZCBFeHRlbmRfRXJyb3JfSW5mbyhQeU9iamVjdCAqZXhjX2NsYXNzLCBjaGFyICpmbXQsIC4uLik7CitleHRlcm4gdm9pZCBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeU9iamVjdCAqZXhjX2NsYXNzLCBjaGFyICpmbXQsIC4uLik7CiAKIHN0cnVjdCBiYXNlc3BlYyB7CiAgICAgQ0RhdGFPYmplY3QgKmJhc2U7CkBAIC0zNzIsMTMgKzM3MywxMyBAQAogCiBleHRlcm4gY2hhciBiYXNlc3BlY19zdHJpbmdbXTsKIAotZXh0ZXJuIGZmaV90eXBlICpHZXRUeXBlKFB5T2JqZWN0ICpvYmopOworZXh0ZXJuIGZmaV90eXBlICpfY3R5cGVzX2dldF9mZmlfdHlwZShQeU9iamVjdCAqb2JqKTsKIAogLyogZXhjZXB0aW9uIGNsYXNzZXMgKi8KIGV4dGVybiBQeU9iamVjdCAqUHlFeGNfQXJnRXJyb3I7CiAKLWV4dGVybiBjaGFyICpjb252ZXJzaW9uX21vZGVfZW5jb2Rpbmc7Ci1leHRlcm4gY2hhciAqY29udmVyc2lvbl9tb2RlX2Vycm9yczsKK2V4dGVybiBjaGFyICpfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2Rpbmc7CitleHRlcm4gY2hhciAqX2N0eXBlc19jb252ZXJzaW9uX2Vycm9yczsKIAogLyogUHl0aG9uIDIuNCBtYWNyb3MsIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIGluIFB5dGhvbiAyLjMgKi8KIApAQCAtNDE1LDM2ICs0MTYsNjcgQEAKICNlbmRpZgogCiAKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDQwMDAwKQogI2lmZGVmIENUWVBFU19VTklDT0RFCiAjICB1bmRlZiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyCi0jICBkZWZpbmUgUHlVbmljb2RlX0Zyb21XaWRlQ2hhciBNeV9QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCisjICBkZWZpbmUgUHlVbmljb2RlX0Zyb21XaWRlQ2hhciBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyX2ZpeGVkCiAKICMgIHVuZGVmIFB5VW5pY29kZV9Bc1dpZGVDaGFyCi0jICBkZWZpbmUgUHlVbmljb2RlX0FzV2lkZUNoYXIgTXlfUHlVbmljb2RlX0FzV2lkZUNoYXIKKyMgIGRlZmluZSBQeVVuaWNvZGVfQXNXaWRlQ2hhciBQeVVuaWNvZGVfQXNXaWRlQ2hhcl9maXhlZAogCi1leHRlcm4gUHlPYmplY3QgKk15X1B5VW5pY29kZV9Gcm9tV2lkZUNoYXIoY29uc3Qgd2NoYXJfdCAqLCBQeV9zc2l6ZV90KTsKLWV4dGVybiBQeV9zc2l6ZV90IE15X1B5VW5pY29kZV9Bc1dpZGVDaGFyKFB5VW5pY29kZU9iamVjdCAqLCB3Y2hhcl90ICosIFB5X3NzaXplX3QpOwotCitleHRlcm4gUHlPYmplY3QgKlB5VW5pY29kZV9Gcm9tV2lkZUNoYXJfZml4ZWQoY29uc3Qgd2NoYXJfdCAqLCBQeV9zc2l6ZV90KTsKK2V4dGVybiBQeV9zc2l6ZV90IFB5VW5pY29kZV9Bc1dpZGVDaGFyX2ZpeGVkKFB5VW5pY29kZU9iamVjdCAqLCB3Y2hhcl90ICosIFB5X3NzaXplX3QpOworI2VuZGlmCiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgRnJlZUNsb3N1cmUodm9pZCAqKTsKLWV4dGVybiB2b2lkICpNYWxsb2NDbG9zdXJlKHZvaWQpOworZXh0ZXJuIHZvaWQgX2N0eXBlc19hZGRfdHJhY2ViYWNrKGNoYXIgKiwgY2hhciAqLCBpbnQpOwogCi1leHRlcm4gdm9pZCBfQWRkVHJhY2ViYWNrKGNoYXIgKiwgY2hhciAqLCBpbnQpOworZXh0ZXJuIFB5T2JqZWN0ICpQeUNEYXRhX0Zyb21CYXNlT2JqKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZSwgUHlfc3NpemVfdCBpbmRleCwgY2hhciAqYWRyKTsKK2V4dGVybiBjaGFyICpfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpOwogCi1leHRlcm4gUHlPYmplY3QgKkNEYXRhX0Zyb21CYXNlT2JqKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZSwgUHlfc3NpemVfdCBpbmRleCwgY2hhciAqYWRyKTsKLWV4dGVybiBjaGFyICphbGxvY19mb3JtYXRfc3RyaW5nKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KTsKK2V4dGVybiBpbnQgX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UoUHlPYmplY3QgKm9iaik7CiAKLS8qIFhYWCBiZXR0ZXIgbmFtZSBuZWVkZWQhICovCi1leHRlcm4gaW50IElzU2ltcGxlU3ViVHlwZShQeU9iamVjdCAqb2JqKTsKLQotZXh0ZXJuIFB5T2JqZWN0ICpfcG9pbnRlcl90eXBlX2NhY2hlOwotUHlPYmplY3QgKmdldF9lcnJvcl9vYmplY3QoaW50ICoqcHNwYWNlKTsKK2V4dGVybiBQeU9iamVjdCAqX2N0eXBlc19wdHJ0eXBlX2NhY2hlOworUHlPYmplY3QgKl9jdHlwZXNfZ2V0X2Vycm9iaihpbnQgKipwc3BhY2UpOwogCiAjaWZkZWYgTVNfV0lOMzIKIGV4dGVybiBQeU9iamVjdCAqQ29tRXJyb3I7CiAjZW5kaWYKIAorI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNzAwQTQKKy8qIFVzZSBQeUNhcHN1bGUgZm9yIDIuNyAqLworCisjZGVmaW5lIENUWVBFU19VU0lOR19DQVBTVUxFCisKKyNkZWZpbmUgQ1RZUEVTX0NBUFNVTEVfSU5TVEFOVElBVEVfREVTVFJVQ1RPUihuYW1lKSBcCitzdGF0aWMgdm9pZCBjYXBzdWxlX2Rlc3RydWN0b3JfICMjIG5hbWUoUHlPYmplY3QgKnB0cikgXAoreyBcCisgICAgdm9pZCAqcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKHB0ciwgbmFtZSk7IFwKKyAgICBpZiAocCkgeyBcCisgICAgICAgIFB5TWVtX0ZyZWUocCk7IFwKKyAgICB9IFwKK30gXAorCisjZGVmaW5lIENBUFNVTEVfTkVXKHBvaW50ZXIsIG5hbWUpIFwKKyAgICAoUHlDYXBzdWxlX05ldyhwb2ludGVyLCBuYW1lLCBjYXBzdWxlX2Rlc3RydWN0b3JfICMjIG5hbWUpKQorCisjZGVmaW5lIENBUFNVTEVfREVSRUZFUkVOQ0UoY2Fwc3VsZSwgbmFtZSkgXAorICAoUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgbmFtZSkpCisKKyNlbHNlIC8qIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNzAwQTQgKi8KKy8qIFVzZSBDT2JqZWN0IGZvciAyLjYgYW5kIGJlZm9yZSAqLworCisjZGVmaW5lIENUWVBFU19DQVBTVUxFX0lOU1RBTlRJQVRFX0RFU1RSVUNUT1IobmFtZSkKKworI2RlZmluZSBDQVBTVUxFX05FVyhwb2ludGVyLCBuYW1lKSBcCisgICAgKFB5Q09iamVjdF9Gcm9tVm9pZFB0cihwb2ludGVyLCBQeU1lbV9GcmVlKSkKKworI2RlZmluZSBDQVBTVUxFX0RFUkVGRVJFTkNFKGNhcHN1bGUsIG5hbWUpIFwKKyAgKFB5Q09iamVjdF9Bc1ZvaWRQdHIoY2Fwc3VsZSkpCisKKyNlbmRpZiAvKiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDcwMEE0ICovCisKKwogLyoKICBMb2NhbCBWYXJpYWJsZXM6CiAgY29tcGlsZS1jb21tYW5kOiAicHl0aG9uIHNldHVwLnB5IC1xIGJ1aWxkIGluc3RhbGwgLS1ob21lIH4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmYTBlZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgpAQCAtMCwwICsxLDExMyBAQAorZGlmZiAtdXJOIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZSBsaWJmZmkvY29uZmlndXJlCistLS0gbGliZmZpLm9yaWcvY29uZmlndXJlCTIwMTAtMDMtMTkgMTg6Mjk6NTQuNTg4NDk5ODYyICswMTAwCisrKysgbGliZmZpL2NvbmZpZ3VyZQkyMDEwLTAzLTE5IDE4OjMyOjA5LjExMzQ5OTQ3OSArMDEwMAorQEAgLTExMjI4LDYgKzExMjI4LDkgQEAKKyAgIGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0qKQorIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CisgCTs7CisrICBpKjg2LSotbnRvLXFueCopCisrICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CisrICAgICAgICA7OworICAgaT84Ni0qLSopCisgCVRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKKyAJOzsKK0BAIC0xMTI0NSwxMiArMTEyNDgsMTIgQEAKKyAJOzsKKyAKKyAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qKQorLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKyAJOzsKKyAgIG1pcHMqLSotbGludXgqKQorIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKKy0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisgCTs7CisgCisgICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKK0BAIC0xMTMwNyw3ICsxMTMxMCw3IEBACisgICBhc19mbl9lcnJvciAiXCJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC5cIiIgIiRMSU5FTk8iIDUKKyBmaQorIAorLSBpZiB0ZXN0IHgkVEFSR0VUID0geE1JUFM7IHRoZW4KKysgaWYgZXhwciB4JFRBUkdFVCA6ICd4TUlQUycgPiAvZGV2L251bGw7IHRoZW4KKyAgIE1JUFNfVFJVRT0KKyAgIE1JUFNfRkFMU0U9JyMnCisgZWxzZQorQEAgLTEyNDIyLDYgKzEyNDI1LDEyIEBACisgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYyIKKyAKKyAKKythY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgaW5jbHVkZS9mZmlfY29tbW9uLmg6aW5jbHVkZS9mZmlfY29tbW9uLmgiCisrCisrCisrYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGZmaWNvbmZpZy5weSIKKysKKysKKyBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyAjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKK0BAIC0xMzUyMSw2ICsxMzUzMCw4IEBACisgICAgICJ0ZXN0c3VpdGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHN1aXRlL01ha2VmaWxlIiA7OworICAgICAibWFuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZSIgOzsKKyAgICAgImxpYmZmaS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJmZmkucGMiIDs7CisrICAgICJpbmNsdWRlL2ZmaV9jb21tb24uaCIpIENPTkZJR19MSU5LUz0iJENPTkZJR19MSU5LUyBpbmNsdWRlL2ZmaV9jb21tb24uaDppbmNsdWRlL2ZmaV9jb21tb24uaCIgOzsKKysgICAgImZmaWNvbmZpZy5weSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBmZmljb25maWcucHkiIDs7CisgCisgICAqKSBhc19mbl9lcnJvciAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgIGVzYWMKK2RpZmYgLXVyTiBsaWJmZmkub3JpZy9jb25maWd1cmUuYWMgbGliZmZpL2NvbmZpZ3VyZS5hYworLS0tIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTAzLTE5IDE4OjI3OjQ0Ljk4ODQ5ODU4NSArMDEwMAorKysrIGxpYmZmaS9jb25maWd1cmUuYWMJMjAxMC0wMy0xOSAxODozMToyOS4yNTI1MDUxNzggKzAxMDAKK0BAIC0xLDQgKzEsNyBAQAorIGRubCBQcm9jZXNzIHRoaXMgd2l0aCBhdXRvY29uZiB0byBjcmVhdGUgY29uZmlndXJlCisrIworKyMgZmlsZSBmcm9tIGxpYmZmaSAtIHNsaWdodGx5IHBhdGNoZWQgZm9yIGN0eXBlcworKyMKKyAKKyBBQ19QUkVSRVEoMi42MykKKyAKK0BAIC05MSw2ICs5NCw5IEBACisgICBpPzg2LSotc29sYXJpczIuMVtbMC05XV0qKQorIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CisgCTs7CisrICBpKjg2LSotbnRvLXFueCopIAorKyAgICAgICAgVEFSR0VUPVg4NjsgVEFSR0VURElSPXg4NgorKyAgICAgICAgOzsKKyAgIGk/ODYtKi0qKQorIAlUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CisgCTs7CitAQCAtMTA4LDEyICsxMTQsMTIgQEAKKyAJOzsKKyAKKyAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qKQorLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKyAJOzsKKyAgIG1pcHMqLSotbGludXgqKQorIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKKy0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisgCTs7CisgCisgICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKK0BAIC0xNzAsNyArMTc2LDcgQEAKKyAgIEFDX01TR19FUlJPUihbImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LiJdKQorIGZpCisgCistQU1fQ09ORElUSU9OQUwoTUlQUywgdGVzdCB4JFRBUkdFVCA9IHhNSVBTKQorK0FNX0NPTkRJVElPTkFMKE1JUFMsW2V4cHIgeCRUQVJHRVQgOiAneE1JUFMnID4gL2Rldi9udWxsXSkKKyBBTV9DT05ESVRJT05BTChTUEFSQywgdGVzdCB4JFRBUkdFVCA9IHhTUEFSQykKKyBBTV9DT05ESVRJT05BTChYODYsIHRlc3QgeCRUQVJHRVQgPSB4WDg2KQorIEFNX0NPTkRJVElPTkFMKFg4Nl9GUkVFQlNELCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9GUkVFQlNEKQorQEAgLTQwMSw0ICs0MDcsOCBAQAorIAorIEFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMpCisgCisrQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oKQorKworK0FDX0NPTkZJR19GSUxFUyhmZmljb25maWcucHkpCisrCisgQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmE3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZwpAQCAtMCwwICsxLDQxNDUgQEAKKzIwMTAtMDMtMTQgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L2ZmaS5jOiBVc2UgLyogLi4uICovIGNvbW1lbnQgc3R5bGUuCisKKzIwMTAtMDEtMDcgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAxCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWRMTCwKKwlQUkl1TEwsIFBSSWQ2NCwgUFJJdTY0LCBQUkl1UFRSKTogRGVmaW5lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogQWRkIC1Xbm8tZm9ybWF0IG9uCisJYWxwaGEqLWRlYy1vc2YqLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdAorCU1BUF9GQUlMRUQgdG8gY2hhciAqLgorCisyMDEwLTAxLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL21pcHMvbjMyLlM6IFVzZSAuYWJpY2FsbHMgYW5kIC5laF9mcmFtZSB3aXRoIF9fR05VQ19fLgorCisyMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgZm9yIGxpYmZmaSAzLjAuOS4KKworMjAwOS0xMi0yNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9MT05HX0RPVUJMRSk6IERlZmluZSBmb3IgbWlwcyB3aGVuCisJYXBwcm9wcmlhdGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTWFyayBhcyB4ZmFpbCBmb3IKKwlhdnIzMiotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogRGl0dG8uCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IENvbmRpdGlvbmFsbHkgaW5jbHVkZSBzdGRpbnQuaAorCWFuZCBpbnR0eXBlcy5oLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IERpdHRvLgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLW9wZW5ic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBMaW5rCisJb3BlbmJzZCBwcm9ncmFtcyB3aXRoIC1scHRocmVhZC4KKworMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IFJlbW92ZSB4ZmFpbCBmb3IKKwltaXBzKi0qLSogYW5kIGFybSotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogUmVtb3ZlIHhmYWlsIGZvciBhcm0qLSotKi4KKworMjAwOS0xMi0zMSAgS2F5IFRpZXR6ICA8a3RpZXR6NzBAZ29vZ2xlbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUnVMTCk6IEZpeAorCWRlZmluaXRpb25zLgorCisyMDA5LTEyLTMxICBDYXJsbyBCcmFtaW5pICA8Y2FybG8uYnJhbWl4QGxpYmVyby5pdD4KKworCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBEZWZpbmUgZm9yIHdpbmRvd3MgaG9zdHMuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgQU1fTFRMREZMQUdTLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBCbGFrZSBDaGFmZmluLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTmV3IHRlc3QgY2FzZSBmcm9tIEJsYWtlCisJQ2hhZmZpbiBAIEFwcGxlLgorCisyMDA5LTEyLTI4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IENvcHkgYWJpIGFuZCBuYXJncyB0bworCWxvY2FsIHZhcmlhYmxlcy4KKwkoYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBpdC4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBEZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlcy5jOiBSZW1vdmUgdGhlIEZGSV9NTUFQX0VYRUNfV1JJVCBkZWZpbml0aW9uIGZvcgorCVNvbGFyaXMveDg2LgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFkdmFuY2UgaW50YXJnX2NvdW50CisJd2hlbiBhIGZsb2F0IGFyZ3VtZW50cyBpcyBwYXNzZWQgaW4gbWVtb3J5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE1hcmsgZ2VuZXJhbCByZWdpc3RlcnMgYXMgdXNlZCB1cCB3aGVuCisJYSA2NGJpdCBvciBzb2Z0LWZsb2F0IGxvbmcgZG91YmxlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBtZW1vcnkuCisKKzIwMDktMTItMjUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBtYW4vZmZpX2NhbGwuMzogRml4ICNpbmNsdWRlIGluIGV4YW1wbGVzLgorCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgZGlyY2F0ZWdvcnkuCisKKzIwMDktMTItMjUgIEZyYW5rIEV2ZXJkaWogPGYucC54LmV2ZXJkaWpAdHVkZWxmdC5ubD4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUGxhY2VkICdfX0dOVUNfXycgaWZkZWYgYXJvdW5kCisJJ19fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKScgaW4gZmZpX2Nsb3N1cmUsIGZpeGVzIGNvbXBpbGUgZm9yCisJSVJJWCBNSVBTUHJvIGM5OS4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBBZGRlZCAnX19zZ2knIGRlZmluZSB0byBub24KKwknX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwKKwlmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkICdkZWZpbmVkKF9NSVBTRUIpJyB0byBCRSBjaGVjay4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQKKwlGRklfTE9OR0RPVUJMRSBzdXBwb3J0IGFuZCBhbGlnbm1lbnQoTjMyIG9ubHkpLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENvcnJlY3RlZCAnI2luY2x1ZGUgPHNnaWRlZnMuaD4nIGZvciBJUklYIGFuZAorCWZpeGVkIG5vbiAnX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvbjMyLlM6IFB1dCAnI2lmZGVmIGxpbnV4JyBhcm91bmQgJy5hYmljYWxscycgYW5kICcuZWhfZnJhbWUnCisJc2luY2UgdGhleSBhcmUgTGludXgvR05VIEFzc2VtYmxlciBzcGVjaWZpYy4KKworMjAwOS0xMi0yNSAgQnJhZGxleSBTbWl0aCAgPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKworCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbSwgc3JjL2F2cjMyL2ZmaS5jLAorCXNyYy9hdnIzMi9mZml0YXJnZXQuaCwKKwlzcmMvYXZyMzIvc3lzdi5TOiBBZGQgQVZSMzIgcG9ydC4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogTWFrZSBpPzg2IGJ1aWxkIG9uIEZyZWVCU0QgYW5kIE9wZW5CU0QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMTItMTUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFBBIEhQLVVYLgorCisyMDA5LTEyLTEzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiBzcmMvcGEvZmZpLmMgKGZmaV9jbG9zdXJlX2lubmVyX3BhMzIpOiBIYW5kbGUgRkZJX1RZUEVfTE9OR0RPVUJMRQorCXR5cGUgb24gSFAtVVguCisKKzIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBQcm9wZXJseSBhbGlnbiAnbG9uZworCWRvdWJsZScgYXJndW1lbnRzLgorCisyMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBTb2xhcmlzIDwgMTAuCisKKzIwMDktMTItMTAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAwCisJKiBzcmMvY2xvc3VyZXMuYyBbWDg2XzY0ICYmIF9fc3VuX18gJiYgX19zdnI0X19dCisJKEZGSV9NTUFQX0VYRUNfV1JJVCk6IERlZmluZS4KKworMjAwOS0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcyotKi0qCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogU2FtZS4KKworMjAwOS0xMi0wNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChsaWJmZmlfY2xvc3VyZV9BU00pOiBGaXggdGFibGVqdW1wCisJdHlwby4KKworMjAwOS0xMi0wNSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogVXBkYXRlIEFJWDMyIGNvZGUgdG8gYmUgY29uc2lzdGVudCB3aXRoIEFJWDY0CisJY29kZS4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFNhbWUuCisKKzIwMDktMTItMDUgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW9yZ2FuaXplIDY0LWJpdCBjb2RlIHRvIG1hdGNoCisJbGludXg2NF9jbG9zdXJlLlMuCisKKzIwMDktMTItMDQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHNyYy94ODYvZmZpNjQuYyAoY2xhc3NpZnlfYXJndW1lbnQpOiBVcGRhdGUgZnJvbQorCWdjYy9jb25maWcvaTM4Ni9pMzg2LmMuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IERvIG5vdCB1c2UgdGhlIGFkZHJlc3Mgb2YgdHdvIGNvbnNlY3V0aXZlCisJU1NFIHJlZ2lzdGVycyBkaXJlY3RseS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyAobWFpbik6IFJlbW92ZSB4ZmFpbAorCWZvciB4ODZfNjQgbGludXggdGFyZ2V0cy4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBJbmNyZW1lbnQKKwlwZnIgZm9yIGxvbmcgZG91YmxlIHNwbGl0IGJldHdlZW4gZnByMTMgYW5kIHN0YWNrLgorCisyMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEluY3JlbWVudCBuZXh0X2FyZyBhbmQKKwlmcGFyZ19jb3VudCB0d2ljZSBmb3IgbG9uZyBkb3VibGUuCisKKzIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCVBSIGxpYmZmaS80MjI0MworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIGV4dHJhIHBhcmVudGhlc2VzLgorCisyMDA5LTEyLTAzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IEZpeCBmb3JtYXQgc3RyaW5nLgorCVJlbW92ZSB4ZmFpbHMgZm9yIHg4NiBsaW51eCB0YXJnZXRzLgorCisyMDA5LTEyLTAyICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEZpeCB0eXBvIGluIElOVDY0CisJY2FzZS4KKworMjAwOS0xMi0wMSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogQ29udmVydCB0byBtb3JlIHN0YW5kYXJkCisJcmVnaXN0ZXIgdXNhZ2UuICBDYWxsIGZmaV9wcmVwX2FyZ3MgZGlyZWN0bHkuICBBZGQgbG9uZyBkb3VibGUKKwlyZXR1cm4gdmFsdWUgc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERvdWJsZSBhcmcgaW5jcmVtZW50CisJYXBwbGllcyB0byBGRklfVFlQRV9ET1VCTEUuICBDb3JyZWN0IGZwcl9iYXNlIGluY3JlbWVudCB0eXBvLgorCVNlcGFyYXRlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IE9ubHkgMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQgaW4gNjQgYml0CisJbW9kZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFJlbW92ZSBuZiBhbmQgbmcgY291bnRlcnMuICBNb3ZlIHRlbXAKKwlpbnRvIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBNYWludGFpbiAxNiBieXRlIHN0YWNrIGFsaWdubWVudC4KKwlBbGxvY2F0ZSByZXN1bHQgYXJlYSBiZXR3ZWVuIHBhcmFtcyBhbmQgRlBScy4KKworMjAwOS0xMS0zMCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJUFIgdGFyZ2V0LzM1NDg0CisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQzY0KTogRGVmaW5lIGZvciBQUEM2NCBMaW51eCBhbmQKKwlBSVg2NC4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgorCShmZmlfY2xvc3VyZV9BU00pOiBVc2UgZXh0c2IsIGxoYSBhbmQgZGlzcGxhbWVudCBhZGRyZXNzZXMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbXBsZW1lbnQgQUlYNjQKKwlzdXBwb3J0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhbWUuCisJKGZmaV9jYWxsKTogU2FtZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFNhbWUuCisKKzIwMDktMTEtMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBOZXcgdGVzdC4KKworMjAwOS0wOS0yOCAgS2FpIFRpZXR6ICA8a2FpLnRpZXR6QG9uZXZpc2lvbi5jb20+CisKKwkqIHNyYy94ODYvd2luNjQuUyAoX2ZmaV9jYWxsX3dpbjY0IHN0YWNrKTogUmVtb3ZlIGZvciBnbnUKKwlhc3NlbWJseSB2ZXJzaW9uIHVzZSBvZiBfX19jaGtzdGsuCisKKzIwMDktMDktMjMgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJUFIgbGliZmZpLzQwMjQyLCBQUiBsaWJmZmkvNDE0NDMKKwkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcnMKKwlfX0FSTV9BUkNIXzZUMl9fLCBfX0FSTV9BUkNIXzZNX18sIF9fQVJNX0FSQ0hfN19fLAorCV9fQVJNX0FSQ0hfN0FfXywgX19BUk1fQVJDSF83Ul9fLCBfX0FSTV9BUkNIXzdNX18uCisJQ2hhbmdlIHRoZSBjb25kaXRpb25hbHMgdG8gX19TT0ZURlBfXyB8fCBfX0FSTV9FQUJJX18KKwlmb3IgLW1mbG9hdC1hYmk9c29mdGZwIHRvIHdvcmsuCisKKzIwMDktMDktMTcgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMgKHN0cmlrZXMgYWdhaW4pCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfRlJFRUJTRCB0bworCWVuYWJsZSBwcm9wZXIgZXh0ZW5zaW9uIG9uIGNoYXIgYW5kIHNob3J0LgorCisyMDA5LTA5LTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFJlbW92ZSBzcGVjaWFsCisJaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQsCisJRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9TT0ZUKTogTmV3IGRlZmluZXMuCisJKEZGSV9OMzJfU09GVF9GTE9BVCwgRkZJX042NF9TT0ZUX0ZMT0FUKTogTmV3IGZmaV9hYmkgZW51bWVyYXRpb25zLgorCShlbnVtIGZmaV9hYmkpOiBTZXQgRkZJX0RFRkFVTFRfQUJJIGZvciBzb2Z0LWZsb2F0LgorCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBoYW5kbGluZyBmb3Igc29mdC1mbG9hdAorCXN0cnVjdHVyZSBhbmQgcG9pbnRlciByZXR1cm5zLgorCShmZmlfY2xvc3VyZV9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHBvaW50ZXIgcmV0dXJucy4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MsCisJY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IEhhbmRsZSBzb2Z0LWZsb2F0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6ICBIYW5kbGUgc29mdC1mbG9hdCwgZml4IHBvaW50ZXIgaGFuZGxpbmcuCisJKGZmaV9jYWxsX04zMik6IERlY2xhcmUgcHJvcGVyIGFyZ3VtZW50IHR5cGVzLgorCShmZmlfY2FsbCwgY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEhhbmRsZQorCXNvZnQtZmxvYXQuCisKKzIwMDktMDgtMjQgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJFUkVRKTogQnVtcCB0byAyLjY0LgorCisyMDA5LTA4LTIyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1odG1sLCBpbnN0YWxsLXBkZik6IFJlbW92ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDktMDctMzAgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoX0FDX0FSR19WQVJfUFJFQ0lPVVMpOiBVc2UgbTRfcmVuYW1lX2ZvcmNlLgorCisyMDA5LTA3LTI0ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCVBSIGxpYmZmaS80MDgwNworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHNvIHVzZSBzaWduL3plcm8tZXh0ZW5kaW5nCisJcmV0dXJuIHR5cGVzIGZvciBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF9TWVNWKTogSGFuZGxlIG9taXR0ZWQgcmV0dXJuIHR5cGVzLgorCShfZmZpX2NhbGxfU1REQ0FMTCwgX2ZmaV9jbG9zdXJlX1NZU1YsIF9mZmlfY2xvc3VyZV9yYXdfU1lTViwKKwlfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorCisJKiBzcmMvY2xvc3VyZXMuYyAoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lIHRvIGNvbnN0IDAgZm9yIEN5Z3dpbi4KKwkoZGxtbWFwLCBkbG11bm1hcCk6IEFsc28gdXNlIHRoZXNlIGZ1bmN0aW9ucyBvbiBDeWd3aW4uCisKKzIwMDktMDctMTEgIFJpY2hhcmQgU2FuZGlmb3JkICA8cmRzYW5kaWZvcmRAZ29vZ2xlbWFpbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2OTkKKwlQUiB0ZXN0c3VpdGUvNDA3MDcKKwlQUiB0ZXN0c3VpdGUvNDA3MDkKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmV2ZXJ0IDIwMDktMDctMDIsIDIwMDktMDctMDEgYW5kCisJMjAwOS0wNi0zMCBjb21taXRzLgorCisyMDA5LTA3LTAxICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBTZXQgbGRfbGlicmFyeV9wYXRoCisJdG8gIiIgYmVmb3JlIGFkZGluZyBwYXRocy4gIChUaGlzIHJlaW5zdGF0ZXMgYW4gYXNzaWdubWVudCB0aGF0CisJd2FzIHJlbW92ZWQgYnkgbXkgMjAwOS0wNi0zMCBjb21taXQsIGJ1dCBjaGFuZ2VzIHRoZSBpbml0aWFsCisJdmFsdWUgZnJvbSAiLiIgdG8gIiIuKQorCisyMDA5LTA3LTAxICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2MDEKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBQcm9wZXJseSBzZXQKKwlnY2NkaXIuICBBZGp1c3QgbGRfbGlicmFyeV9wYXRoIGZvciBnY2Mgb25seSBpZiBnY2NkaXIgaXNuJ3QKKwllbXB0eS4KKworMjAwOS0wNi0zMCAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogRG9uJ3QgYWRkICIuIgorCXRvIGxkX2xpYnJhcnlfcGF0aC4gIFVzZSBhZGRfcGF0aC4gIEFkZCBqdXN0IGZpbmRfbGliZ2NjX3MKKwl0byBsZF9saWJyYXJ5X3BhdGgsIG5vdCBldmVyeSBsaWJnY2MgbXVsdGlsaWIgZGlyZWN0b3J5LgorCisyMDA5LTA2LTE2ICBXaW0gTGV3aXMgIDx3aW1sQGhoaGgub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQXZvaWQgY2xvYmJlcmluZyBjcjMgYW5kIGNyNCwgd2hpY2ggYXJlCisJc3VwcG9zZWQgdG8gYmUgY2FsbGVlLXNhdmVkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKTogRml4IG92ZXJydW4gb2YKKwlyZXR1cm4gYnVmZmVyIGZvciBvZGQtc2l6ZSBzdHJ1Y3RzLgorCisyMDA5LTA2LTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzQwNDQ0CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEFkZAorCWFsbG93X3N0YWNrX2V4ZWN1dGUgZm9yIERhcndpbi4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoVEFSR0VURElSKTogQWRkIG1pc3NpbmcgYmxhbmsgbGluZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUkl1TEwpOiBEZWZpbmUuCisKKzIwMDktMDYtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IHhmYWlsIGV2ZXJ5d2hlcmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGluZm9fVEVYSU5GT1MuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBDaGFuZ2VMb2cubGliZmZpOiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogaW5jbHVkZSBzdGRpbnQuaC4KKworMjAwOS0wNi0xMSAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBNYWtlZmlsZS5hbSwKKwljb25maWd1cmUuYWMsCisJaW5jbHVkZS9mZmkuaC5pbiwKKwlpbmNsdWRlL2ZmaV9jb21tb24uaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvZGxtYWxsb2MuYywKKwlzcmMveDg2L2ZmaS5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW42NC5TIChuZXcpLAorCVJFQURNRTogQWRkZWQgd2luNjQgc3VwcG9ydCAobWluZ3cgb3IgTVNWQykKKwkqIE1ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW4sCisJbWFuL01ha2VmaWxlLmluLAorCXRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKKwljb25maWd1cmUsCisJYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQKKwkqIGx0Y2YtYy5zaDogcHJvcGVybHkgZXNjYXBlIGN5Z3dpbi93MzIgcGF0aAorCSogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogRml4IGZpbGVuYW1lIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L3dpbjMyLlM6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZAorCW9mIGNoZWNraW5nIGZvciBNTUFQLiAgVXNlIGludHB0cl90IGluc3RlYWQgb2YgbG9uZyBjYXN0cy4KKworMjAwOS0wNi0xMSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWwgc2gqLSotbGludXgtKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWwgc2gqLSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMDkgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZyZWVic2QuUzogQWRkIG1pc3NpbmcgZmlsZS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjg6CisKKwkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCisJKiBkb2MvbGliZmZpLmluZm86IExpa2V3aXNlLgorCSogZG9jL3N0YW1wLXZ0aTogTGlrZXdpc2UuCisJKiBtYW4vTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorCSogbWFuL2ZmaV9jYWxsLjM6IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2RhcndpbjY0LlMsCisJc3JjL2RsbWFsbG9jLmMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBYODZfRlJFRUJTRC4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjguCisJcGFyaXNjKi0qLWxpbnV4KjogQWRkLgorCWkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKjogQWRkLgorCXBvd2VycGMtKi1iZW9zKjogQWRkLgorCUFNX0NPTkRJVElPTkFMIFg4Nl9GUkVFQlNEOiBBZGQuCisJQUNfQ09ORklHX0ZJTEVTOiBBZGQgbWFuL01ha2VmaWxlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfRk4pOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogSW1wb3J0IGZyb20gbGliZmZpIDMuMC44LgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogQWRkIHhmYWlsIHg4Nl82NC0qLWxpbnV4LSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IEFkZCB4ZmFpbHMuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEFkZCBfX1VOVVNFRF9fIHRvIGFyZ3MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiAgTGlrZXdpc2UuCisKKzIwMDgtMTItMjYgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBtYXJrIGV4cGVjdGVkCisJZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKworMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCisJcG9pbnRlciB0byBpbnRlZ2VyIChpbnRwdHJfdCkuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogZGlzYWJsZSBmb3Igd2luNjQuCisKKzIwMDgtMDctMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQ2xlYW4gdXAgZmFpbHVyZXMgZnJvbQorCWNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgQmxha2UgQ2hhZmZpbgorCSAgICBob3NAdGFtYW5lZ2kub3JnCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCisKKzIwMDktMDYtMDUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L2ZmaS5jOiBNZXJnZSBzdGRjYWxsIGNoYW5nZXMgZnJvbQorCWxpYmZmaS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvd2luMzIuUywgc3JjL3g4Ni9mZmkuYzogQmFjayBvdXQKKwlzdGRjYWxsIGNoYW5nZXMuCisKKzIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKKwljb21tZW50LgorCisyMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgorCSAgb2Zmc2V0IGJhc2VkIG9uIGNvZGUgcG9pbnRlciwgbm90IGRhdGEgcG9pbnRlci4KKworMjAwOC0wMS0zMSAgVGltb3RoeSBXYWxsIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYzogQWRkIHRlc3QgZm9yIHN0ZGNhbGwKKwljbG9zdXJlcy4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEluY3JlYXNlIHNpemUgb2YgdHJhbXBvbGluZSBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni93aW4zMi5TOiBBZGQgYXNzZW1ibHkgZm9yIHN0ZGNhbGwgY2xvc3VyZS4KKwkqIHNyYy94ODYvZmZpLmM6IEluaXRpYWxpemUgc3RkY2FsbCBjbG9zdXJlIHRyYW1wb2xpbmUuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5zZXJ0IGxpY2VuY2UgaGVhZGVyLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKworCSogc3JjL3NoNjQvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCisJKiBzcmMvYWxwaGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2FscGhhL29zZi5TOiBMaWtld2lzZS4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9ocHV4MzIuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisJRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlpbmNsdWRlL2ZmaS5oLmluLAorCXNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2FybS9mZmkuYywKKwlzcmMvYXJtL3N5c3YuUywKKwlzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZmkuYywKKwlzcmMvc2g2NC9zeXN2LlMsCisJc3JjL3R5cGVzLmMsCisJc3JjL3g4Ni9mZmk2NC5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW4zMi5TLAorCXNyYy94ODYvZGFyd2luLlMsCisJc3JjL3g4Ni9mZmkuYywKKwlzcmMveDg2L3N5c3YuUywKKwlzcmMveDg2L3VuaXg2NC5TLAorCXNyYy9hbHBoYS9mZml0YXJnZXQuaCwKKwlzcmMvYWxwaGEvZmZpLmMsCisJc3JjL2FscGhhL29zZi5TLAorCXNyYy9tNjhrL2ZmaXRhcmdldC5oLAorCXNyYy9mcnYvZmZpdGFyZ2V0LmgsCisJc3JjL2Zydi9mZmkuYywKKwlzcmMvczM5MC9mZml0YXJnZXQuaCwKKwlzcmMvczM5MC9zeXN2LlMsCisJc3JjL2NyaXMvZmZpdGFyZ2V0LmgsCisJc3JjL3BhL2xpbnV4LlMsCisJc3JjL3BhL2ZmaXRhcmdldC5oLAorCXNyYy9wYS9mZmkuYywKKwlzcmMvcmF3X2FwaS5jLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L3VuaXguUywKKwlzcmMvaWE2NC9mZmkuYywKKwlzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsCisJc3JjL2phdmFfcmF3X2FwaS5jLAorCXNyYy9kZWJ1Zy5jLAorCXNyYy9zcGFyYy92OS5TLAorCXNyYy9zcGFyYy9mZml0YXJnZXQuaCwKKwlzcmMvc3BhcmMvZmZpLmMsCisJc3JjL3NwYXJjL3Y4LlMsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsCisJc3JjL21pcHMvbjMyLlMsCisJc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvZmZpLmMsCisJc3JjL3ByZXBfY2lmLmMsCisJc3JjL3NoL2ZmaXRhcmdldC5oLAorCXNyYy9zaC9mZmkuYywKKwlzcmMvc2gvc3lzdi5TOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgorCisyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6ICBOZXcgZnVuY3Rpb24uCisJKC5laF9mcmFtZSk6ICBBZGQgRkRFIGZvciBpdC4KKworMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogIEFsc28gY2hlY2sgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIHBjLXJlbGF0aXZlCisJcmVsb2NzIG9uIFg4Nl9XSU4zMiB0YXJnZXRzLgorCSogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX3ByZXBfYXJncyk6ICBEZWNsYXJlIGV4dGVybiwgbm90IGdsb2JhbC4KKwkoX2ZmaV9jYWxsX1NZU1YpOiAgQWRkIG1pc3NpbmcgZnVuY3Rpb24gdHlwZSBzeW1ib2wgLmRlZiBhbmQKKwlhZGQgRUggbWFya3VwIGxhYmVscy4KKwkoX2ZmaV9jYWxsX1NURENBTEwpOiAgTGlrZXdpc2UuCisJKF9mZmlfY2xvc3VyZV9TWVNWKTogIExpa2V3aXNlLgorCShfZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiAgTGlrZXdpc2UuCisJKC5laF9mcmFtZSk6ICBBZGQgaGFuZC1jcmFmdGVkIEVIIGRhdGEuCisKKzIwMDktMDQtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IENoYW5nZSBjb3B5cmlnaHQgaGVhZGVyIHRvIHJlZmVyIHRvCisJdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gcG9pbnQgcmVhZGVycworCWF0IHRoZSBDT1BZSU5HMyBmaWxlIGFuZCB0aGUgRlNGJ3MgbGljZW5zZSB3ZWIgcGFnZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorCisyMDA5LTAzLTAxICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMTItMTggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzI2MDQ4CisJKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfWDg2X1BDUkVMKTogTmV3IHRlc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvc3lzdi5TIFshRkZJX05PX1JBV19BUEldOiBQcmVjYWxjdWxhdGUKKwlSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VULCBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VULAorCVJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgZm9yIHRoZSBTb2xhcmlzIDEwL3g4NiBhc3NlbWJsZXIuCisJKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKC5Mc3RvcmVfdGFibGUpOiBNb3ZlIHRvIC50ZXh0IHNlY3Rpb24uCisJKC5MbG9hZF90YWJsZSk6IExpa2V3aXNlLgorCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCisKKzIwMDgtMTItMTggIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0xMS0yMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBzdXBwb3J0IGZvcgorCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IHJldHVybiB2YWx1ZXMuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfdjgpOiBMaWtld2lzZS4KKworMjAwOC0wOS0yNiAgUGV0ZXIgTydHb3JtYW4gIDxwb2dtYUB0aGV3cml0dGVud29yZC5jb20+CisJICAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIG5ldyBsaWJ0b29sLgorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogRGl0dG8uCisJKiBhY2xvY2FsLm00OiBEaXR0by4KKworMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KKwlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKKwlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgorCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFR1cm4gSU5TTiBpbnRvIGFuIHVuc2lnbmVkCisJaW50LgorCisyMDA4LTA2LTE3ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA4LTA2LTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogY29uZmlndXJlLmFjIChwYXJpc2MqLSotbGludXgqLCBwb3dlcnBjLSotc3lzdiosCisJcG93ZXJwYy0qLWJlb3MqKTogUmVtb3ZlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTA1LTA5ICBKdWxpYW4gQnJvd24gIDxqdWxpYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IE5ldy4KKwkobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgYWJvdmUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOC0wNC0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCVBSIGJvb3RzdHJhcC8zNTQ1NworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMy0yNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTAzLTI2ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgorCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IEFSTSBjb21tZW50IG1hcmtlci4KKworMjAwOC0wMy0yNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDMtMTYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDA4LTAyLTEyICBCam9lcm4gS29lbmlnICA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1mcmVlYnNkKiB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDEtMzAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmZmaS8zNDYxMgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBQb3AgNCBieXRlIGZyb20gc3RhY2sgd2hlbgorCXJldHVybmluZyBzdHJ1Y3QuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRkICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCisJdGVzdHMuCisKKzIwMDgtMDEtMjQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAxLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCB0aGlua28uCisKKzIwMDgtMDEtMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgZm9yIFg4Nl9EQVJXSU4uCisJVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKwlIYW5kbGUgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzIHdpdGggc3BlY2lhbCBjaWYtPmZsYWdzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIHNwZWNpYWwgdHlwZXMgZm9yIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCSogc3JjL3g4Ni9kYXJ3aW4uUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG8gdXNlIGEganVtcCB0YWJsZSBsaWtlCisJc3lzdi5TCisJUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KKwlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGZvciBpbnQ4LzE2LCBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCisyMDA3LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogIFJlcGxhY2UgZGFkZCB3aXRoIEFERFUsIGRzdWIgd2l0aAorCVNVQlUsIGFkZCB3aXRoIEFERFUgYW5kIHVzZSBzbWFsbGVyIGNvZGUgc2VxdWVuY2VzLgorCisyMDA3LTEyLTA3ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbG9uZyBkb3VibGUgcmV0dXJuCisJdHlwZS4KKworMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBpZiBub3QJYWxyZWFkeQorCWRlZmluZWQuCisJKGZmaV9qYXZhX3Jhdyk6IE5ldyB0eXBlZGVmLgorCShmZmlfamF2YV9yYXdfY2FsbCwgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3LAorCWZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSBwYXJhbWV0ZXIgdHlwZXMgZnJvbSBmZmlfcmF3IHRvCisJZmZpX2phdmFfcmF3LgorCShmZmlfamF2YV9yYXdfY2xvc3VyZSkgOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiAgUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoCisJRkZJX1NJWkVPRl9KQVZBX1JBVy4KKwkoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwlSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGggRkZJX1NJWkVPRl9KQVZBX1JBVy4gVXNlCisJc2l6ZW9mKGZmaV9qYXZhX3JhdykgZm9yIGFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFNhbWUuCisJKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUgorCWlmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNC4KKwkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFNhbWUuCisJKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYywgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGZvciBOMzIgQUJJLgorCisyMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2Nsb3N1cmVfTjMyKTogVXNlIDY0LWJpdCBhZGQgaW5zdHJ1Y3Rpb24gb24KKwlwb2ludGVyIHZhbHVlcy4KKworMjAwNy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS8zMTkzNworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEludHJvZHVjZSBuZXcgQUJJIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULgorCUFkZCBsb2NhbCBGRklfVFlQRV9VSU5UMTI4IHRvIGhhbmRsZSBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIF9fTk9fRlBSU19fIGFuZCBub3QgYW5kCisJc2V0IHRoZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgYWNjb3JkaW5nIHRvLgorCUFkZCBzdXBwb3J0IGZvciBwb3RlbnRpYWwgc29mdC1mbG9hdCBzdXBwb3J0IHVuZGVyIGhhcmQtZmxvYXQKKwlhcmNoaXRlY3R1cmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFNldCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgdG8gMCBpbiBjYXNlIG9mCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQsIGhhbmRsZSBmbG9hdCwgZG91YmxlcyBhbmQgbG9uZy1kb3VibGVzIGFjY29yZGluZworCXRvIHRoZSBGRklfTElOVVhfU09GVF9GTE9BVCBBQkkuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBNYWtlIHN1cmUgbm90IHRvIHN0b3JlIGZsb2F0L2RvdWJsZQorCW9uIGFyY2hzIHdoZXJlIF9fTk9fRlBSU19fIGlzIHRydWUuCisJQWRkIEZGSV9UWVBFX1VJTlQxMjggc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA3LTExLTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvY2xvc3VyZXMuYzogTW92ZSBkZWZpbnRpb24gb2YgTUFZQkVfVU5VU0VEIGZyb20gaGVyZSB0byAuLi4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiAuLi4gaGVyZS4KKwlVcGRhdGUgY29weXJpZ2h0LgorCisyMDA3LTExLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExvYWQgY29ycmVjdCBjciB0byBjb21wYXJlIGlmIHdlIGhhdmUgbG9uZyBkb3VibGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBhIGNvbW1lbnQgdG8gc2hvdyB3aGljaCBwYXJ0IGdvZXMgaW50byBjcjYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jOiBOZXcgdGVzdC4KKworMjAwNy0wOS0wNCAgICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChVTldJTkQpOiBOZXcuCisJKFdob2xlIGZpbGUpOiBDb25kaXRpb25hbGx5IGNvbXBpbGUgdW53aW5kZXIgZGlyZWN0aXZlcy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgdW53aW5kZXIgZGlyZWN0aXZlcy4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFsaWduIHN0cnVjdHMgYnkgYXQgbGVhc3QgNCBieXRlcy4KKwlPbmx5IHRyZWF0IHIwIGFzIGEgc3RydWN0IGFkZHJlc3MgaWYgd2UncmUgYWN0dWFsbHkgcmV0dXJuaW5nIGEKKwlzdHJ1Y3QgYnkgYWRkcmVzcy4KKwlPbmx5IGNvcHkgdGhlIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHdpdGhpbiBhIHN0cnVjdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBIENvbXBvc2l0ZSBUeXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5dGVzCisJaXMgcmV0dXJuZWQgaW4gcjAsIG5vdCBwYXNzZWQgYnkgYWRkcmVzcy4KKwkoZmZpX2NhbGwpOiBBbGxvY2F0ZSBhIHdvcmQtc2l6ZWQgdGVtcG9yYXJ5IGZvciB0aGUgY2FzZSB3aGVyZQorCWEgY29tcG9zaXRlIGlzIHJldHVybmVkIGluIHIwLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBBbGlnbiBhcyBuZWNlc3NhcnkuCisKKzIwMDctMDgtMDUgIFN0ZXZlbiBOZXdidXJ5ICA8c19qX25ld2J1cnlAeWFob28uY28udWs+CisKKwkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBVc2UgX19jbGVhcl9jYWNoZSBpbnN0ZWFkIG9mCisJZGlyZWN0bHkgdXNpbmcgdGhlIHN5c19jYWNoZWZsdXNoIHN5c2NhbGwuCisKKzIwMDctMDctMjcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBzb2Z0LWZsb2F0LgorCisyMDA3LTA5LTAzICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVW5pZnkgTUlQU19JUklYIGFuZCBNSVBTX0xJTlVYIGludG8gTUlQUy4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDctMDgtMjQgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2wuYzogTmV3IHRlc3QuCisKKzIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHM2NCotKi0qLgorCisyMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZmZpLzI4MzEzCisJKiBjb25maWd1cmUuYWM6IERvbid0IHRyZWF0IG1pcHM2NCBhcyBhIHNwZWNpYWwgY2FzZS4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgbjMyLlMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUKKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKwkqIGZmaWNvbmZpZy5oLmluOiBEaXR0by4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChSRUdfTCwgUkVHX1MsIFNVQlUsIEFERFUsIFNSTCwgTEkpOiBJbmRlbnQuCisJKExBLCBFSF9GUkFNRV9BTElHTiwgRkRFX0FERFJfQllURVMpOiBOZXcgcHJlcHJvY2Vzc29yIG1hY3Jvcy4KKwkoRkZJX0RFRkFVTFRfQUJJKTogU2V0IGZvciBuNjQgY2FzZS4KKwkoRkZJX0NMT1NVUkVTLCBGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciBuMzIgYW5kIG42NCBjYXNlcy4KKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgZGVidWcgbWFjcm9zIGFuZCBsYWJlbHMgZm9yIEZERS4KKwkoZmZpX2Nsb3N1cmVfTjMyKTogTmV3IGZ1bmN0aW9uLgorCSguZWhfZnJhbWUpOiBOZXcgc2VjdGlvbgorCSogc3JjL21pcHMvbzMyLlM6IENsZWFuIHVwIGNvbW1lbnRzLgorCShmZmlfY2xvc3VyZV9PMzIpOiBQYXNzIGZmaV9jbG9zdXJlIHBhcmFtZXRlciBpbiAkMTIuCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIEZGSV9NSVBTX04zMiBpbnN0ZWFkIG9mCisJX01JUFNfU0lNID09IF9BQklOMzIgdGhyb3VnaG91dC4KKwkoRkZJX01JUFNfU1RPUF9IRVJFKTogTmV3LCB1c2UgaW4gcGxhY2Ugb2YKKwlmZmlfc3RvcF9oZXJlLgorCShmZmlfcHJlcF9hcmdzKTogVXNlIHVuc2lnbmVkIGxvbmcgdG8gaG9sZCBwb2ludGVyIHZhbHVlcy4gIFJld3JpdGUKKwl0byBzdXBwb3J0IG4zMi9uNjQgQUJJcy4KKwkoY2FsY19uMzJfc3RydWN0X2ZsYWdzKTogUmV3cml0ZS4KKwkoY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuICBSZXZlcnNlCisJcG9zaXRpb24gb2YgZmxhZyBiaXRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJld3JpdGUgbjMyIHBvcnRpb24uCisJKGZmaV9jYWxsKTogRW5hYmxlIGZvciBuNjQuICBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3Igc21hbGwgc3RydWN0dXJlCisJcmV0dXJuIHZhbHVlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgbjMyIGFuZCBuNjQgc3VwcG9ydC4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBBZGQgY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcuCisJKGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBOZXcgZnVuY3Rpb25zLgorCisyMDA3LTA4LTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChmZmlfdHlwZV9teWxvbmcpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKG1haW4pOiBVc2UgY29ycmVjdCB0eXBlCisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAobWFpbik6IERpdHRvLgorCisyMDA3LTA4LTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRml4IHR5cG8gaW4gcHJldmlvdXMKKwljaGVja2luLgorCisyMDA3LTA4LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKworMjAwNy0wOC0wMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jIChtYWluKTogRGVmaW5lIHJldHVybiB0eXBlIGFzCisJZmZpX2FyZy4gIFVzZSBwcm9wZXIgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorCisyMDA3LTA3LTMwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBpbiB4ODYgY2FzZSwgYWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG86CisJVXNlIGEganVtcCB0YWJsZS4KKwlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgorCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFJldmVydC4KKworMjAwNy0wNy0yNiAgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNlLmRlPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBWZXJpZnkgY2FsbAorCXJlc3VsdCBhcyBzaWduZWQgY2hhciwgbm90IGZmaV9hcmcuCisKKzIwMDctMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0pOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNy0xMSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmM6IERvbid0IGluY2x1ZGUgc3lzL2NhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKCkgaW5zdGVhZCBvZgorCWNhY2hlZmx1c2goKS4KKworMjAwNy0wNS0xOCAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhanVzdGVkCisJZnJvbSAoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCisyMDA1LTEyLTMxICBQaGlsIEJsdW5kZWxsICA8cGJAcmVjaXZhLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsIGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvYXJtL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisKKzIwMDctMDctMDMgIEFuZHJldyBIYWxleSAgPGFwaEBoZWRnZXMuYmlsbGdhdGxpZmYuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRW5hYmxlIGZvciBBUk0uCisKKzIwMDctMDctMDUgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQuCisKKzIwMDctMDYtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNS0yMyAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9tNjhrL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWLGZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0FTX0NGSV9QU0VVRE9fT1ApOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL202OGsvc3lzdi5TIChDRklfU1RBUlRQUk9DLENGSV9FTkRQUk9DLAorCUNGSV9PRkZTRVQsQ0ZJX0RFRl9DRkEpOiBOZXcgbWFjcm9zLgorCShmZmlfY2FsbF9TWVNWKTogQWRkIGNhbGxmcmFtZSBhbm5vdGF0aW9uLgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXgKKwludW1lcm91cyB0ZXN0IHN1aXRlIGZhaWx1cmVzLgorCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisKKzIwMDctMDQtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQnJpbmcgdXAgdG8gZGF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL2Zydi9lYWJpLlM6IFJlbW92ZSBSQ1Mga2V5d29yZC4KKworMjAwNy0wNC0wNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBUaWR5IHRhcmdldCBjYXNlLgorCShIQVZFX0xPTkdfRE9VQkxFKTogQWxsb3cgdGhlIHRhcmdldCB0byBvdmVycmlkZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERvbid0IGRlZmluZSBmZmlfdHlwZV9mb28gaWYKKwlMSUJGRklfSElERV9CQVNJQ19UWVBFUyBpcyBkZWZpbmVkLgorCShmZmlfdHlwZV9sb25nZG91YmxlKTogSWYgbm90IEhBVkVfTE9OR19ET1VCTEUsIGRlZmluZQorCXRvIGZmaV90eXBlX2RvdWJsZS4KKwkqIHR5cGVzLmMgKExJQkZGSV9ISURFX0JBU0lDX1RZUEVTKTogRGVmaW5lLgorCShGRklfVFlQRURFRiwgZmZpX3R5cGVfdm9pZCk6IE1hcmsgdGhlIGRhdGEgY29uc3QuCisJKGZmaV90eXBlX2xvbmdkb3VibGUpOiBTcGVjaWFsIGNhc2UgZm9yIEFscGhhLiAgRG9uJ3QgZGVmaW5lCisJaWYgbG9uZyBkb3VibGUgPT0gZG91YmxlLgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBBc3NlcnQgdW5pcXVlIHZhbHVlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBpdCBhcyB0aGUgMTI4LWJpdCB0eXBlLgorCShmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLiAgTWFyayBoaWRkZW4uCisJKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCisJKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmggKEZGSV9MQVNUX0FCSSk6IFRpZHkgZGVmaW5pdGlvbi4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KKwkobG9hZF90YWJsZSk6IEhhbmRsZSAxMjgtYml0IGxvbmcgZG91YmxlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IEFkZCAtbWllZWUgZm9yIGFscGhhLgorCisyMDA3LTA0LTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMzE0OTE6CisJKiBSRUFETUU6IEZpeGVkIGJ1ZyBpbiBleGFtcGxlLgorCisyMDA3LTA0LTAzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2Nsb3N1cmVzLmM6IEluY2x1ZGUgc3lzL3N0YXRmcy5oLgorCShfR05VX1NPVVJDRSk6IERlZmluZSBvbiBMaW51eC4KKwkoRkZJX01NQVBfRVhFQ19TRUxJTlVYKTogRGVmaW5lLgorCShzZWxpbnV4X2VuYWJsZWQpOiBOZXcgdmFyaWFibGUuCisJKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IE5ldyBmdW5jdGlvbi4KKwkoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lLgorCShkbG1tYXApOiBVc2UgaXQuCisKKzIwMDctMDMtMjQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IE1hcmsgYXMgc3RhdGljLgorCVVzZSAndm9sYXRpbGUgZmxvYXQgc3VtJyB0byBjcmVhdGUgc3VtIG9mIGZsb2F0cyB0byBhdm9pZCBmYWxzZQorCW5lZ2F0aXZlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uIG9uIGl4ODYgdGFyZ2V0cy4KKwkobWFpbik6IERpdHRvLgorCisyMDA3LTAzLTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZsdXNoX2ljYWNoZSk6IEZpeCBsZWZ0LW92ZXIgZnJvbSBwcmV2aW91cworCXBhdGNoLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4gIEFkZCBuZWVkZWQgb25lcy4KKworMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKTogTmV3LgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IE5ldy4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KKwkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZmlsZS4KKwkqIHNyYy9kbG1hbGxvYy5jIFtGRklfTU1BUF9FWEVDX1dSSVRdIChzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpOgorCVJlcGxhY2Ugc2ZsYWdzIHdpdGggZXhlY19vZmZzZXQuCisJW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKG1tYXBfZXhlY19vZmZzZXQsIGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0LAorCXN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0KTogTmV3IG1hY3Jvcy4KKwkoZ2V0X3NlZ21lbnRfZmxhZ3MsIHNldF9zZWdtZW50X2ZsYWdzLCBjaGVja19zZWdtZW50X21lcmdlKTogTmV3CisJbWFjcm9zLgorCShpc19tbWFwcGVkX3NlZ21lbnQsIGlzX2V4dGVybl9zZWdtZW50KTogVXNlIGdldF9zZWdtZW50X2ZsYWdzLgorCShhZGRfc2VnbWVudCwgc3lzX2FsbG9jLCBjcmVhdGVfbXNwYWNlLCBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSwKKwlkZXN0cm95X21zcGFjZSk6IFVzZSBuZXcgbWFjcm9zLgorCShzeXNfYWxsb2MpOiBTaWxlbmNlIHdhcm5pbmcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2Nsb3N1cmVzLmMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIHNyYy9wcmVwX2NpZiBbRkZJX0NMT1NVUkVTXSAoZmZpX3ByZXBfY2xvc3VyZSk6IEltcGxlbWVudCBpbgorCXRlcm1zIG9mIGZmaV9wcmVwX2Nsb3N1cmVfbG9jLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQKKwlmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YgdGhlCisJcmVuYW1lZCB2ZXJzaW9uLgorCSogc3JjL2phdmFfcmF3X2FwaSAoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZAorCWFkanVzdGVkIGZyb20uLi4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mCisJdGhlIHJlbmFtZWQgdmVyc2lvbi4KKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9jcmlzL2ZmaS5jOiBMaWtld2lzZS4gIEFkanVzdC4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZCBmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShmbHVzaF9pY2FjaGUpOiBBZGp1c3QuCisKKzIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBzcmMvZGxtYWxsb2MuYzogTmV3IGZpbGUsIGltcG9ydGVkIHZlcnNpb24gMi44LjMgb2YgRG91ZworCUxlYSdzIG1hbGxvYy4KKworMjAwNy0wMy0wMSAgQnJvb2tzIE1vc2VzICA8YnJvb2tzLm1vc2VzQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZHVtbXkgaW5zdGFsbC1wZGYgdGFyZ2V0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUKKworMjAwNy0wMi0xMyAgQW5kcmVhcyBLcmViYmVsICA8a3JlYmJlbDFAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2NpZl9tYWNoZGVwLAorCWZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCisyMDA3LTAyLTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogTW92ZSByZXN0b3JlIG9mIHIyCisJaW1tZWRpYXRlbHkgYWZ0ZXIgYmN0cmwgaW5zdHJ1Y3Rpb24uCisKKzIwMDctMDEtMTggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoYWxsLXJlY3Vyc2l2ZSwgaW5zdGFsbC1yZWN1cnNpdmUsCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlLCBjbGVhbi1yZWN1cnNpdmUsIGRpc3RjbGVhbi1yZWN1cnNpdmUsCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDYtMTItMTQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFRBUkdFVCBmb3IgeDg2XzY0LSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgcnVsZXMgZm9yIDY0LWJpdCBzb3VyY2VzCisJZm9yIFg4Nl9EQVJXSU4uCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBTZXQgdHJhbXBvbGluZSBzaXplIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgorCSogc3JjL3g4Ni9kYXJ3aW42NC5TOiBOZXcgZmlsZSBmb3IgeDg2XzY0LSotZGFyd2luKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2M6IE5ldyB0ZXN0IGNhc2UgZm9yCisJZmZpX2NhbGwgb25seS4KKworMjAwNi0xMi0xMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYWNsb2NhbCAtSSAuLiBhcyB3cml0dGVuIGluIHRoZQorCU1ha2VmaWxlLmFtLgorCisyMDA2LTEwLTMxICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzIGZvcgorCURhcndpbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisKKzIwMDYtMTAtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisJICAgIFNhbmRybyBUb2xhaW5pICA8dG9sYWluaUBsaWJlcm8uaXQ+CisKKwkqIGNvbmZpZ3VyZS5hYyBbaSo4Ni0qLWRhcndpbipdOiBTZXQgWDg2X0RBUldJTiBzeW1ib2wgYW5kCisJY29uZGl0aW9uYWwuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykgW1g4Nl9EQVJXSU5dOiBOZXcgY2FzZS4KKwkoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2Rhcndpbi5TLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCkgW1g4Nl9EQVJXSU5dOiBUcmVhdCBsaWtlCisJWDg2X1dJTjMyLCBhbmQgYWRkaXRpb25hbGx5IGFsaWduIHN0YWNrIHRvIDE2IGJ5dGVzLgorCSogc3JjL3g4Ni9kYXJ3aW4uUzogTmV3LCBiYXNlZCBvbiBzeXN2LlMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKSBbWDg2X0RBUldJTl06IEFsaWduID4gOC1ieXRlIHN0cnVjdHMuCisKKzIwMDYtMDktMTIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJmZmkvMjM5MzUKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IEluc3RhbGwgYm90aCBmZmkuaCBhbmQgZmZpdGFyZ2V0LmggaW4KKwkkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X2FsaWFzKS8kKGdjY192ZXJzaW9uKS9pbmNsdWRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgZm9yIGF1dG9tYWtlIDEuOS42LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisyMDA2LTA4LTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChzdHJ1Y3QpOiBSZXZlcnQgYWNjaWRlbnRhbCBjb21taXQuCisKKzIwMDYtMDgtMTUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBMaWtld2lzZS4KKworMjAwNi0wNy0yNSAgVG9yc3RlbiBTY2hvZW5mZWxkICA8a2FmZmVldGlzY2hAZ214LmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfdHlwZV91bG9uZywgZmZpX3R5cGVfc2xvbmcpOiBEZWZpbmUgY29ycmVjdGx5CisJZm9yIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA2LTA3LTE5ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzLAorCXhmYWlsIHJlbWFpbnMgZm9yIG1pcHM2NC4KKworMjAwNi0wNS0yMyAgQ2FybG9zIE8nRG9uZWxsICA8Y2FybG9zQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgaW5zdGFsbC1odG1sIHRhcmdldC4gQWRkIGluc3RhbGwtaHRtbCB0byAuUEhPTlkKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDYtMDUtMTggIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHBhL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3BhMzIpOiBMb2FkIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBmcm9tCisJc3RhY2sgc2xvdC4KKworMjAwNi0wNC0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBSRUFETUU6IFJlbW92ZSBub3RpY2UgYWJvdXQgJ0NyYXp5IENvbW1lbnRzJy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiBDbGVhbnVwIHdoaXRlIHNwYWNlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYzogTGlrZXdpc2UuCisJKiBzcmMvcmF3X2FwaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9mZml0ZXN0LmM6IERlbGV0ZS4gTm8gbG9uZ2VyIG5lZWRlZCwgYWxsIHRlc3QgY2FzZXMgbWlncmF0ZWQKKwl0byB0aGUgdGVzdHN1aXRlLgorCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKworMjAwNi0wNC0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcGEvaHB1eDMyLlM6IENvcnJlY3QgdW53aW5kIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IKKwlmZmlfY2xvc3VyZV9wYTMyLgorCSogc3JjL3BhL2xpbnV4LlM6IExpa2V3aXNlLgorCisyMDA2LTA0LTEyICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisKKwlQUiBsaWJnY2ovMjY0ODMKKwkqIHNyYy9pYTY0L2ZmaS5jIChzdGZfc3BpbGwsIGxkZl9maWxsKTogUmV3cml0ZSBhcyBtYWNyb3MuCisJKGhmYV90eXBlX2xvYWQpOiBDYWxsIHN0Zl9zcGlsbC4KKwkoaGZhX3R5cGVfc3RvcmUpOiBDYWxsIGxkZl9maWxsLgorCShmZmlfY2FsbCk6IEFkanVzdCBjYWxscyB0byBhYm92ZSByb3V0aW5lcy4gIEFkZCBsb2NhbCB0ZW1wcyBmb3IKKwltYWNybyByZXN1bHQuCisKKzIwMDYtMDQtMTAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUmVjb2duaXplIG11bHRpbGliCisJZGlyZWN0b3J5IG5hbWVzIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCisKKzIwMDYtMDQtMDcgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBOZXcgdGVzdGNhc2UuCisKKzIwMDYtMDQtMDUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQV9IUFVYIHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBX0hQVVggcnVsZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IFJlbmFtZSBsaW51eCB0YXJnZXQgdG8gUEFfTElOVVguCisJQWRkIFBBX0hQVVggYW5kIFBBNjRfSFBVWC4KKwlSZW5hbWUgRkZJX0xJTlVYIEFCSSB0byBGRklfUEEzMiBBQkkuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIDMyLWJpdCBIUC1VWCB0YXJnZXRzLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogRGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDgpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMyk6IFJlZGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jIChST1VORF9ET1dOKTogRGVsZXRlLgorCShmbGR3LCBmc3R3LCBmbGRkLCBmc3RkKTogVXNlICdfX2FzbV9fJy4KKwkoZmZpX3N0cnVjdF90eXBlKTogQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsCisJRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQgRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KKwkoZmZpX3ByZXBfYXJnc19MSU5VWCk6IFJlbmFtZSB0byBmZmlfcHJlcF9hcmdzX3BhMzIuIFVwZGF0ZSBjb21tZW50LgorCVNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90IHZhcmlhYmxlLiBDaGFuZ2UgdHlwZSBvZiBsb2NhbAorCSduJyB0byB1bnNpZ25lZCBpbnQuCisJKGZmaV9zaXplX3N0YWNrX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9zaXplX3N0YWNrX3BhMzIuIEhhbmRsZSBsb25nCisJZG91YmxlIG9uIFBBX0hQVVguCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuIENoYW5nZQorCXJldHVybiB0eXBlIHRvIGZmaV9zdGF0dXMuIFNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90CisJdmFyaWFibGUuIE9ubHkgY29weSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCByZWdpc3RlcnMgd2hlbiBQQV9MSU5VWAorCWlzIHRydWUuIFJlZm9ybWF0IGRlYnVnIHN0YXRlbWVudC4KKwlBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQKKwlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgorCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBBZGQgJ2V4dGVybicgdG8KKwlkZWNsYXJhdGlvbi4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IE1ha2UgbGludXggdHJhbXBvbGluZSBjb25kaXRpb25hbCBvbiBQQV9MSU5VWC4KKwlBZGQgbm9wcyB0byBjYWNoZSBmbHVzaC4gIEFkZCB0cmFtcG9saW5lIGZvciBQQV9IUFVYLgorCSogc3JjL3BhL2hwdXgzMi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9saW51eC5TIChmZmlfY2FsbF9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2FsbF9wYTMyLiBSZW5hbWUKKwlmZmlfcHJlcF9hcmdzX0xJTlVYIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4KKwlMb2NhbGl6ZSBsYWJlbHMuIEFkZCBzdXBwb3J0IGZvciAyLCA0IGFuZCA4LWJ5dGUgc21hbGwgc3RydWN0cy4gSGFuZGxlCisJdW5hbGlnbmVkIGRlc3RpbmF0aW9ucyBpbiAzLCA1LCA2IGFuZCA3LWJ5dGUgc21hbGwgc3RydWN0cy4gT3JkZXIKKwlhcmd1bWVudCB0eXBlIGNoZWNrcyBzbyB0aGF0IGNvbW1vbiBhcmd1bWVudCB0eXBlcyBhcHBlYXIgZmlyc3QuCisJKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIFJlbmFtZQorCWZmaV9jbG9zdXJlX2lubmVyX0xJTlVYIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuCisKKzIwMDYtMDMtMjQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYLiAgRGVmYXVsdAorCWZvciAzMi1iaXQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZSBmb3JtYXQuICBGaXggRkZJX0xBU1RfQUJJLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEhhbmRsZSBsaW51eCB2YXJpYW50IG9mCisJRkZJX1RZUEVfTE9OR0RPVUJMRS4KKwkoZmZpX3ByZXBfYXJnczY0KTogQXNzZXJ0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3QgbXVuZ2UgRkZJX1RZUEVfTE9OR0RPVUJMRSB0eXBlLgorCUhhbmRsZSBGRklfTElOVVggRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9MSU5VWC4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBOb24gRkZJX0xJTlVYIGxvbmcgZG91YmxlIHJldHVybiBuZWVkcworCWdwcjMgcmV0dXJuIHBvaW50ZXIgYXMgZm9yIHN0cnVjdCByZXR1cm4uICBIYW5kbGUgRkZJX0xJTlVYCisJRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuICBEb24ndCBpbmNyZW1lbnQgIm5mIgorCXVubmVjZXNzYXJpbHkuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogTG9hZCBib3RoIGYxIGFuZCBmMgorCWZvciBGRklfVFlQRV9MT05HRE9VQkxFLiAgTW92ZSBlcGlsb2d1ZSBpbnNucyBpbnRvIGNhc2UgdGFibGUuCisJRG9uJ3QgdXNlIHI2IGFzIHBvaW50ZXIgdG8gcmVzdWx0cywgaW5zdGVhZCB1c2Ugc3Agb2Zmc2V0LiAgRG9uJ3QKKwltYWtlIGEgc3BlY2lhbCBjYWxsIHRvIGxvYWQgbHIgd2l0aCBjYXNlIHRhYmxlIGFkZHJlc3MsIGluc3RlYWQKKwl1c2Ugb2Zmc2V0IGZyb20gcHJldmlvdXMgY2FsbC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFNhdmUgbG9uZyBkb3VibGUgcmV0dXJuLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2ltcGxpZnkgbG9uZyBkb3VibGUKKwlyZXR1cm4uCisKKzIwMDYtMDMtMTUgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZmxvYXQgYXJndW1lbnRzCisJcGFzc2VkIHdpdGggRlAgcmVnaXN0ZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDYtMDMtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbik6IE1hcmsgY2lmLAorCWFyZ3MgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkoY2xvc3VyZV90ZXN0X2ZuMSk6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKG1haW4pOiBSZW1vdmUgdW51c2VkIHJlcy4KKworMjAwNi0wMi0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkanVzdCBGU0YgYWRkcmVzcy4gQWRkIHRlc3QgcnVucyBmb3IKKwktTzIsIC1PMywgLU9zIGFuZCB0aGUgd2FybmluZyBmbGFncyAtVyAtV2FsbC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgYW4gX19VTlVTRURfXyBtYWNybyB0byBtYXJrCisJdW51c2VkIHBhcmFtZXRlciB1bnVzZWQgZm9yIGdjYyBvciBlbHNlIGRvIG5vdGhpbmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKGNsc19zdHJ1Y3RfMTJieXRlX2duKTogTWFyayBjaWYKKwlhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAoY2xzX3N0cnVjdF8xNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMgKGNsc19zdHJ1Y3RfMThieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIChjbHNfc3RydWN0XzE5Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgKGNsc19zdHJ1Y3RfMV8xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAoY2xzX3N0cnVjdF8yNGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyAoY2xzX3N0cnVjdF8yYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgKGNsc19zdHJ1Y3RfM18xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIChjbHNfc3RydWN0XzRfMWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyAoY2xzX3N0cnVjdF80Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgKGNsc19zdHJ1Y3RfNjRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAoY2xzX3N0cnVjdF84Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZm4pOiBDYXN0CisJdm9pZCogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KKwkobWFpbik6IExpa2V3aXNlLgorCShjbHNfc3RydWN0X2FsaWduX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIChjbHNfcmV0X2RvdWJsZV9mbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIChjbHNfcmV0X2Zsb2F0X2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgKGNsc19yZXRfc2NoYXJfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc2NoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAoY2xzX3JldF9zaW50X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChjbHNfcmV0X3NzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zc2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgKGNsc19yZXRfdWNoYXJfZm4pOiAgTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91aW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyAoY2xzX3JldF91bG9uZ2xvbmdfZm4pOiBNYXJrIGNpZgorCWFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIChjbHNfcmV0X3VzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91c2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyAoZmxvYXRpbmcpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jIChtYWluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgorCUNsZWFudXAgd2hpdGUgc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jIChjaGVja2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOiBNYXJrCisJY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChCX2ZuKTogQWRqdXN0IHByaW50ZgorCWZvcm1hdHRlcnMgdG8gc2lsZW5jZSBnY2MuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTWVudGlvbiByZWxhdGVkIFBSLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgKHN0dWIpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IENhc3QgdGhlIHJlc3VsdCB0byBzaWxlbmNlCisJZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogQWRkIHRoZSBub3RlIG1lbnRpb25lZAorCWluIHRoZSBsYXN0IGNvbW1pdCBmb3IgdGhpcyB0ZXN0IGNhc2UgaW4gdGhlIHRlc3QgY2FzZSBpdHNlbGYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IE1hcmsgY2lmIGFzCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKGNsb3N1cmVfdGVzdF9mbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChjbG9zdXJlX3Rlc3RfZm4yKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAoY2xvc3VyZV90ZXN0X2ZuMyk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChjbG9zdXJlX3Rlc3RfZm41KTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorCisyMDA2LTAyLTIyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogRml4IHJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIEZERSBmb3IKKwlmZmlfY2xvc3VyZV9TWVNWLgorCisyMDA2LTAyLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IFJlbW92ZSBzdGF0aWMKKwlkZWNsYXJhdGlvbiB0byBhdm9pZCBhIGZhbHNlIG5lZ2F0aXZlIG9uIGl4ODYuIFNlZSBQUjMyMy4KKworMjAwNi0wMi0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisJYW5kIGNhc3QgaW50ZWdlciB0byB2b2lkICogaWYgbmVlZGVkLiAgVXBkYXRlIHRoZSBwb2ludGVyIHRvCisJdGhlIEZQIHJlZ2lzdGVyIHNhdmVkIGFyZWEgY29ycmVjdGx5LgorCisyMDA2LTAyLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBYRkFJTCB0aGlzIHRlc3QgdW50aWwgUFIyNTYzMAorCWlzIGZpeGVkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCisyMDA2LTAyLTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogUmVtb3ZlIGZmaV90eXBlX215bG9uZworCWRlZmluaXRpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZmZpX3R5cGVfbXlsb25nIGRlZmluaXRpb24KKwloZXJlIHRvIGJlIHVzZWQgYnkgb3RoZXIgdGVzdCBjYXNlcyB0b28uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KKworMjAwNi0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuYWM6IEVuYWJsZSBsaWJmZmkgZm9yIHNwYXJjNjQtKi1mcmVlYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwNi0wMS0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21zdF90d29fcmVnaXN0ZXIpOiBEb24ndCBjYWxsIF9fYXNobGRpMywKKwlpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgY29tcHV0ZSAlcjUKKwlzaGlmdCBjb3VudCB1bmNvbmRpdGlvbmFsbHkuICBTaW1wbGlmeSBsb2FkIHNlcXVlbmNlcyBmb3IgMSwgMiwgMywgNAorCWFuZCA4IGJ5dGUgc3RydWN0cywgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0IHNpemVzIGRvbid0IGNhbGwKKwlfX2xzaHJkaTMsIGluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KKworMjAwNS0xMi0wNyAgVGhpZW1vIFNldWZlciAgPHRoc0BuZXR3b3Jrbm8uZGU+CisKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZW1vdmUgb2Jzb2xldGUgc2dpZGVmcy5oIGluY2x1ZGUuIEFkZAorCW1pc3NpbmcgcGFyZW50aGVzZXMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogQ29kZSBmb3JtYXR0aW5nLiBEZWZpbmUKKwlhbmQgdXNlIEEzX09GRiwgRlBfT0ZGLCBSQV9PRkYuIE1pY3JvLW9wdGltaXphdGlvbnMuCisJKGZmaV9jbG9zdXJlX08zMik6IExpa2V3aXNlLCBidXQgd2l0aCBuZXdseSBkZWZpbmVkIEEzX09GRjIsCisJQTJfT0ZGMiwgQTFfT0ZGMiwgQTBfT0ZGMiwgUkFfT0ZGMiwgRlBfT0ZGMiwgUzBfT0ZGMiwgR1BfT0ZGMiwKKwlWMV9PRkYyLCBWMF9PRkYyLCBGQV8xXzFfT0ZGMiwgRkFfMV8wX09GRjIsIEZBXzBfMV9PRkYyLAorCUZBXzBfMF9PRkYyLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb2RlIGZvcm1hdHRpbmcuIEZpeAorCWVuZGlhbm5lc3MgYnVncy4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IEltcHJvdmUgdHJhbXBvbGluZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEZpeCBlbmRpYW5uZXNzIGJ1Z3MuCisKKzIwMDUtMTItMDMgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBGb3JtYXR0aW5nLgorCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBBdm9pZCBwb3NzaWJsZSBhbGlhc2luZyBwcm9ibGVtcyBieSB1c2luZyB1bmlvbnMuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IExpa2V3aXNlLgorCisyMDA1LTA5LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBGb3IKKwlkYXJ3aW4sIHVzZSAtc2hhcmVkLWxpYmdjYyBub3QgLWxnY2NfcywgYW5kIGV4cGxhaW4gd2h5LgorCisyMDA1LTA5LTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAodmFsdWVfdHlwZSk6IE5ldyB0eXBlZGVmLgorCShDQU5BUlkpOiBOZXcgZGVmaW5lLgorCShtYWluKTogQ2hlY2sgZm9yIHJlc3VsdCBidWZmZXIgb3ZlcmZsb3cuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoRkxBR19SRVRVUk5TXzEyOEJJVFMpOiBOZXcgY29uc3RhbnQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KKworMjAwNS0wOC0yNSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCVBSIHRhcmdldC8yMzQwNAorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENvcnJlY3QgcGxhY2VtZW50IG9mIHN0YWNrCisJaG9tZWQgZnAgYXJncy4KKwkoZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3Qgc3RhY2sgc2l6aW5nIGZvciBzYW1lLgorCisyMDA1LTA4LTExICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSk6IE5ldyB0ZXN0LgorCShBSF9CT1RUT00pOiBBZGQgRkZJX0hJRERFTiBkZWZpbml0aW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogUmVtb3ZlLgorCShmZmlfY2xvc3VyZV9MSU5VWDY0LCBmZmlfcHJlcF9hcmdzNjQsIGZmaV9jYWxsX0xJTlVYNjQsCisJZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIGhpZGRlbi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0LAorCS5mZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiAuaGlkZGVuLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBSZW1vdmUsCisJYWRkIEZGSV9ISURERU4gdG8gaXRzIHByb3RvdHlwZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IE5ldy4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCisKKzIwMDUtMDgtMTAgIEFsZnJlZCBNLiBTem1pZHQgIDxhbXNAZ251Lm9yZz4KKworCVBSIGxpYmZmaS8yMTgxOToKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogSGFuZGxlIGkqODYtKi1nbnUqLgorCisyMDA1LTA4LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZQorCURXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YgcmF0aGVyIHRoYW4KKwlEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorCisyMDA1LTA3LTIyICBTVUdJT0tBIFRvc2hpbm9idSAgPHN1Z2lva2FAaXRvbmV0LmNvLmpwPgorCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU3RvcCBhcmd1bWVudCBwb3BwaW5nIGNvcnJlY3RseQorCW9uIHNoMy4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IENoYW5nZSB0aGUgc3RhY2sgbGF5b3V0IGZvciBzaDMgc3RydWN0IGFyZ3VtZW50LgorCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IHNoMyBhcmd1bWVudCBjb3B5LCB3aGVuIGl0IGlzCisJcGFydGlhbGx5IG9uIHJlZ2lzdGVyLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IHNldCB0b28gbWFueSBjaWYtPmZsYWdzLgorCisyMDA1LTA3LTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfY2FsbCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KKwlSZW1vdmUgZW1wdHkgbGluZS4KKwkqIHNyYy9zaDY0L2ZmaS5jIChzaW1wbGVfdHlwZSk6IFJlbW92ZS4KKwkocmV0dXJuX3R5cGUpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCisJKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSAxLCAyIGFuZCA0LWJ5dGUgcmV0dXJuLgorCUVtaXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBpZiBQSUMgYW5kIHJlbW92ZSB3cm9uZyBkYXRhbGFiZWwKKwlwcmVmaXhlcyBmcm9tIEVIIGRhdGEuCisKKzIwMDUtMDctMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBQT1dFUlBDX0ZSRUVCU0QuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgorCShGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCk6IERlZmluZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgZmxhZ3MgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zCisJaW4gZmZpX2NhbGxfU1lTVi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IgU1lTViA0IEFCSS4KKwlBa2EgRkZJX1NZU1YuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBBZGQgcmV0dXJuIHR5cGVzIGZvciBzbWFsbCBzdHJ1Y3R1cmVzLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgYml0cyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IKKwlmaW5hbCBTWVNWIDQgQUJJLgorCisyMDA1LTA3LTEwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTmV3IHRlc3QgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgorCisyMDA1LTA3LTA1ICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX3N0cnVjdF90eXBlKTogUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEKKwlhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLiAgQnJlYWsgb3V0IGhhbmRsaW5nIGZvciA1LTcgYnl0ZQorCXN0cnVjdHVyZXMuICBLaWxsIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgorCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFByaW50IHJldHVybiB2YWx1ZXMgYXMgaGV4IGluIGRlYnVnCisJbWVzc2FnZS4gIFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxIGFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuCisJUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TTUFMTF9TVFJVQ1QxKQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogUmVtb3ZlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2LCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogRGVmaW5lLgorCSogc3JjL3BhL2xpbnV4LlM6IE1hcmsgc291cmNlIGZpbGUgYXMgdXNpbmcgUEExLjEgYXNzZW1ibHkuCisJKGNoZWNrc21zdDEsIGNoZWNrc21zdDIpOiBSZW1vdmUuCisJKGNoZWNrc21zdDMpOiBPcHRpbWl6ZSBoYW5kbGluZyBvZiAzLWJ5dGUgc3RydWN0IHJldHVybnMuCisJKGNoZWNrc21zdDU2Nyk6IFByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KKworMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJnY2ovMjE5NDMKKwkqIHNyYy9taXBzL24zMi5TOiBFbmZvcmNlIFBJQyBjb2RlLgorCSogc3JjL21pcHMvbzMyLlM6IExpa2V3aXNlLgorCisyMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjOiBUcmVhdCBpKjg2LSotc29sYXJpczIuMTAgYW5kIHVwIGFzIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNi0wMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IHVzZSBKVU1QVEFSR0VUCisJdG8gY2FsbCBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVi4gIEFwcGVuZCBAbG9jYWwgaW5zdGVhZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlIGZvciBmZmlfcHJlcF9hcmdzX1NZU1YuCisKKzIwMDUtMDUtMTcgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXNlIEFDX0NfQklHRU5ESUFOIGluc3RlYWQgb2YgQUNfQ19CSUdFTkRJQU5fQ1JPU1MuCisJVXNlIEFDX0NIRUNLX1NJWkVPRiBpbnN0ZWFkIG9mIEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLgorCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IFJlbW92ZSAtSSAuLi9jb25maWcuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluLCBNYWtlZmlsZS5pbiwKKwlpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDkgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMjEyODUKKwkqIHNyYy9hbHBoYS9vc2YuUzogVXBkYXRlIHVud2luZCBpbnRvIHRvIG1hdGNoIGNvZGUuCisKKzIwMDUtMDUtMDQgIEFuZHJlYXMgRGVnZXJ0IDxhZEBwYXB5cnVzLWdtYmguZGU+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYXZlIHNzZS11c2VkIGZsYWcgaW4KKwliaXQgMTEgb2YgZmxhZ3MuCisJKGZmaV9jYWxsKTogTWFzayByZXR1cm4gdHlwZSBmaWVsZC4gIFBhc3Mgc3NlY291bnQgdG8gZmZpX2NhbGxfdW5peDY0LgorCShmZmlfcHJlcF9jbG9zdXJlKTogU2V0IGNhcnJ5IGJpdCBpZiBzc2UtdXNlZCBmbGFnIHNldC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jYWxsX3VuaXg2NCk6IEFkZCBzc2Vjb3VudCBhcmd1bWVudC4KKwlPbmx5IGxvYWQgc3NlIHJlZ2lzdGVycyBpZiBzc2Vjb3VudCBub24temVyby4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0KTogT25seSBzYXZlIHNzZSByZWdpc3RlcnMgaWYgY2Fycnkgc2V0IG9uIGVudHJ5LgorCisyMDA1LTA0LTI5ICBSYWxmIENvcnNlcGl1cyAgPHJhbGYuY29yc2VwaXVzQHJ0ZW1zLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgaSo4Ni0qLXJ0ZW1zKiwgc3BhcmMqLSotcnRlbXMqLAorCXBvd2VycGMtKnJ0ZW1zKiwgYXJtKi0qLXJ0ZW1zKiwgc2gtKi1ydGVtcyouCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDQtMjAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBJbiByZWdzdWIgdXNlLAorCWhhdmUgVGNsOC4zLWNvbXBhdGlibGUgaW50ZXJtZWRpYXRlIHZhcmlhYmxlLgorCisyMDA1LTA0LTE4ICBTaW1vbiBQb3NuamFrIDxzaW1vbi5wb3NuamFrQHNpb2wubmV0PgorCSAgICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBDUklTIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvY3JpczogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9jcmlzL2ZmaS5jLCBzcmMvY3Jpcy9zeXN2LlMsIHNyYy9jcmlzL2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogV3JhcCBpbiAjaWZuZGVmIF9fQ1JJU19fLgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBSZXBsYWNlIFxuIHdpdGgKKwlccj9cbiBpbiBvdXRwdXQgdGVzdHMuCisKKzIwMDUtMDQtMTIgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDMtMzAgIEhhbnMgQm9laG0gIDxIYW5zLkJvZWhtQGhwLmNvbT4KKworCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpOiBVc2UgbG9uZyBsb25nIGluc3RlYWQgb2YgREkuCisKKzIwMDUtMDMtMzAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZykgQUREIERJIGF0dHJpYnV0ZS4KKwkoZmZpX3NhcmcpIERpdHRvLgorCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2xvc3VyZV91bml4KTogRXh0ZW5kIGdwCisJdG8gNjQgYml0cyBpbiBJTFAzMiBtb2RlLgorCUxvYWQgNjQgYml0cyBldmVuIGZvciBzaG9ydCBkYXRhLgorCisyMDA1LTAzLTIzICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFVwZGF0ZSBmb3IgLW02NCBtdWx0aWxpYi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA1LTAzLTIxICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBjb25maWd1cmUuYWM6IERvIG5vdCBpbnZva2UgVExfQUNfR0NDX1ZFUlNJT04uCisJRG8gbm90IHNldCB0b29sX2luY2x1ZGVfZGlyLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOgorCVJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBTZXQgZ2NjX3ZlcnNpb24gYW5kIHRvb2xsaWJmZmlkaXIuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA1LTAyLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQnVtcCBhbGlnbm1lbnQgdG8KKwlvZGQtbnVtYmVyZWQgcmVnaXN0ZXIgcGFpcnMgZm9yIDY0LWJpdCBpbnRlZ2VyIHR5cGVzLgorCisyMDA1LTAyLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwlQUiBsaWJmZmkvMjAxMDQKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDUtMDItMTEgIEphbmlzIEpvaG5zb24gIDxqYW5pczE4N0B1cy5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUmVtb3ZlIGRnLW9wdGlvbnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBEaXR0by4KKworMjAwNS0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvZnJ2L2ZmaXRhcmdldC5oOiBSZW1vdmUgUFBDIHN0dWZmIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byBmcnYuCisKKzIwMDUtMDEtMTIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCAoY3h4X29wdGlvbnMpOiBBZGQKKwktc2hhcmVkLWxpYmdjYy4KKworMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3R5cGVzLmMgKEZGSV9BR0dSRUdBVEVfVFlQRURFRik6IFJlbW92ZS4KKwkoRkZJX1RZUEVERUYpOiBSZW5hbWUgZnJvbSBGRklfSU5URUdSQUxfVFlQRURFRi4gIFJlcGxhY2Ugc2l6ZSBhbmQKKwlvZmZzZXQgcGFyYW1ldGVycyB3aXRoIGEgdHlwZSBwYXJhbWV0ZXI7IGRlZHVjZSBzaXplIGFuZCBzdHJ1Y3R1cmUKKwlhbGlnbm1lbnQuICBVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IERlZmluZSB3aXRoIHNpemVvZi4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEZpeCBmb3IgaWE2NC4KKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChzdHJ1Y3QgZmZpX2lhNjRfdHJhbXBvbGluZV9zdHJ1Y3QpOiBNb3ZlCisJaW50byBmZmlfcHJlcF9jbG9zdXJlLgorCSogc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvdW5peC5TOiBSZXdyaXRlCisJZnJvbSBzY3JhdGNoLgorCisyMDA0LTEyLTI3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L3VuaXg2NC5TOiBGaXggdHlwbyBpbiB1bndpbmQgaW5mby4KKworMjAwNC0xMi0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IFJlbmFtZSBmcm9tIHN0YWNrTGF5b3V0LgorCShlbnVtIHg4Nl82NF9yZWdfY2xhc3MpOiBBZGQgWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgorCShtZXJnZV9jbGFzc2VzKTogQ2hlY2sgZm9yIGl0LgorCShTU0VfQ0xBU1NfUCk6IE5ldy4KKwkoY2xhc3NpZnlfYXJndW1lbnQpOiBQYXNzIGJ5dGVfb2Zmc2V0IGJ5IHZhbHVlOyBwZXJmb3JtIGFsbCB1cGRhdGVzCisJaW5zaWRlIHN0cnVjdCBjYXNlLgorCShleGFtaW5lX2FyZ3VtZW50KTogQWRkIGNsYXNzZXMgYXJndW1lbnQ7IGhhbmRsZQorCVg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KKwkoZmZpX3ByZXBfYXJncyk6IE1lcmdlIGludG8gLi4uCisJKGZmaV9jYWxsKTogLi4uIGhlcmUuICBTaGFyZSBzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsX3VuaXg2NC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXR1cCBjaWYtPmZsYWdzIGZvciBwcm9wZXIgc3RydWN0dXJlIHJldHVybi4KKwkoZmZpX2ZpbGxfcmV0dXJuX3ZhbHVlKTogUmVtb3ZlLgorCShmZmlfcHJlcF9jbG9zdXJlKTogUmVtb3ZlIGRlYWQgYXNzZXJ0LgorCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIuCisJUmV3cml0ZSB0byB1c2Ugc3RydWN0IHJlZ2lzdGVyX2FyZ3MgaW5zdGVhZCBvZiB2YV9saXN0LiAgQ3JlYXRlCisJZmxhZ3MgZm9yIGhhbmRsaW5nIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3g4Ni91bml4NjQuUzogUmVtb3ZlIGRlYWQgc3RyaW5ncy4KKwkoZmZpX2NhbGxfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2NhbGxfVU5JWDY0LiAgUmV3cml0ZSB0byBzaGFyZQorCXN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGwuICBIYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisJKGZsb2F0MnNzZSwgZmxvYXRmbG9hdDJzc2UsIGRvdWJsZTJzc2UpOiBSZW1vdmUuCisJKHNzZTJmbG9hdCwgc3NlMmRvdWJsZSwgc3NlMmZsb2F0ZmxvYXQpOiBSZW1vdmUuCisJKGZmaV9jbG9zdXJlX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NC4gIFJld3JpdGUKKwl0byBoYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisKKzIwMDQtMTItMDggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFJlbW92ZSBkdXBsaWNhdGUgTElCQ0ZMQUdTIGFuZAorCVBJQ0ZMQUcuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMDQtMTItMDIgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVc2UgVExfQUNfR0NDX1ZFUlNJT04gdG8gc2V0IGdjY192ZXJzaW9uLgorCSogY29uZmlndXJlLCBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0xMS0yOSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yNSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIHJldmVyc2lvbi4KKworMjAwNC0xMS0yNCAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBVc2UgbmV3IHByb2NzIGluIHRhcmdldC1saWJwYXRoLmV4cC4KKworMjAwNC0xMS0yMyAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyLCBmZmlfY2xvc3VyZV9PMzIpOiBVc2UgamFsciBpbnN0ZWFkCisJb2YgamFsLiAgVXNlIGFuIGFic29sdXRlIGVuY29kaW5nIGZvciB0aGUgZnJhbWUgaW5mb3JtYXRpb24uCisKKzIwMDQtMTEtMjMgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgbm8tZGVwZW5kZW5jaWVzLiAgQWRkIEFDTE9DQUxfQU1GTEFHUy4KKwkqIGFjaW5jbHVkZS5tNDogRGVsZXRlIGxvZ2ljIGZvciBzaW5jbHVkZXMuCisJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGU6IExpa2V3aXNlLgorCisyMDA0LTExLTIyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBbGlnbiBkb3VibGVzIGFuZCA2NC1iaXQgaW50ZWdlcnMKKwlvbiBhIDgtYnl0ZSBib3VuZGFyeS4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IFJlc2VydmUgZnJhbWUgc3BhY2UgZm9yIGFyZ3VtZW50cy4KKworMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZ1bmN0aW9ucyB0aGF0IHJldHVybgorCWxvbmcgbG9uZyB2YWx1ZXMuICBSb3VuZCBzdGFjayBhbGxvY2F0aW9uIHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcworCWZvciBBVFBDUyBjb21wYXRpYmlsaXR5LgorCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdvcmsgdG8gYXZvaWQgdXNlIG9mIEFQQ1MgcmVnaXN0ZXIKKwluYW1lcy4gIEhhbmRsZSByZXR1cm5pbmcgbG9uZyBsb25nIHR5cGVzLiAgQWRkIFRodW1iIGFuZCBpbnRlcndvcmtpbmcKKwlzdXBwb3J0LiAgSW1wcm92ZSBzb2Z0LWZsb2F0IGNvZGUuCisKKzIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kYi5leHAgKGxvYWRfZ2NjX2xpYik6IE5ldyBmdW5jdGlvbi4KKwkobGliZmZpX2V4aXQpOiBOZXcgZnVuY3Rpb24uCisJKGxpYmZmaV9pbml0KTogQnVpbGQgdGhlIHRlc3RnbHVlIHdyYXBwZXIgaWYgbmVlZGVkLgorCisyMDA0LTEwLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJUFIgb3RoZXIvMTgxMzgKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWNjZXB0IG1vcmUgdGhhbiBvbmUgbXVsdGlsaWIgbGliZ2NjLgorCisyMDA0LTEwLTI1ICBLYXp1aGlybyBJbmFva2EgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KKworCSogc3JjL20zMnIvbGliZmZpdGFyZ2V0LmggKEZGSV9DTE9TVVJFUyk6IFNldCB0byAwLgorCisyMDA0LTEwLTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvbid0IGFsaWduIGZvciBkb3VibGUgZGF0YS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNC0xMC0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBUIGJpdCBpbiB0cmFtcG9saW5lIGZvcgorCXRoZSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJ1Y3R1cmUgcG9pbnRlZCB3aXRoIFIyLgorCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZSBSMiBhcyB0aGUgcG9pbnRlciB0bworCXRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGlmIFQgYml0IHNldC4gIEVtaXQgcG9zaXRpb24KKwlpbmRlcGVuZGVudCBjb2RlIGFuZCBFSCBkYXRhIGlmIFBJQy4KKworMjAwNC0xMC0xMyAgS2F6dWhpcm8gSW5hb2thICA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIG0zMnIgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpdWdyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgbTMyciBwb3J0IHRvIEZGSV9JTlRFUk5BTF9UWVBFREVGCisJKHVpbnQ2NCwgc2ludDY0LCBkb3VibGUsIGxvbmdkb3VibGUpCisJKiBzcmMvbTMycjogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9tMzJyL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvbTMyci9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisKKzIwMDQtMTAtMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDQtMDktMTQgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmdjai8xNzQ2NQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBEb24ndCB1c2UgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aC4KKwlTZXQgdXAgTERfTElCUkFSWV9QQVRILCBTSExJQl9QQVRILCBMRF9MSUJSQVJZTjMyX1BBVEgsCisJTERfTElCUkFSWTY0X1BBVEgsIExEX0xJQlJBUllfUEFUSF8zMiwgTERfTElCUkFSWV9QQVRIXzY0IGFuZAorCURZTERfTElCUkFSWV9QQVRILgorCisyMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IFJlbW92ZSB1bnVzZWQgdmFyLiBDbGVhbnVwCisJd2hpdGVzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKworMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IGNvbW1lbnRzIGFuZCBpZGVudGF0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBBZGQgZmxhZyBmb3IgbG9uZ2RvdWJsZSByZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9hcmdzKTogSGFuZGxlIGxvbmdkb3VibGUgYXJndW1lbnRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldCBmbGFncyBmb3IgbG9uZ2RvdWJsZS4gQ2FsY3VsYXRlIHNwYWNlIGZvcgorCWxvbmdkb3VibGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBBZGQgY2xvc3VyZSBoYW5kbGluZyBmb3IgbG9uZ2RvdWJsZS4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfREFSV0lOKTogQWRkIGhhbmRsaW5nIG9mIGxvbmdkb3VibGUKKwl2YWx1ZXMuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChfZmZpX2Nsb3N1cmVfQVNNKTogTGlrZXdpc2UuCisJKiBzcmMvdHlwZXMuYzogRGVmaW5lZCBsb25nZG91YmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgZGFyd2luLgorCisyMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBSZW1vdmUgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2FzbS5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGZydiBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5pbjogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5ob3N0OiBOZXcgZmlsZS4gIGZydi1lbGYgbmVlZHMgbGliZ2xvc3MuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGb3JjZSBmZmlfY2xvc3VyZSB0byBoYXZlIGEgbmljZSBiaWcgKDgpCisJYWxpZ25tZW50LiAgVGhpcyBpcyBuZWVkZWQgdG8gZnJ2IGFuZCBzaG91bGRuJ3QgaGFybSB0aGUgb3RoZXJzLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKEFMSUdOX0RPV04pOiBOZXcgbWFjcm8uCisJKiBzcmMvZnJ2L2ZmaS5jLCBzcmMvZnJ2L2ZmaXRhcmdldC5oLCBzcmMvZnJ2L2VhYmkuUzogTmV3IGZpbGVzLgorCisyMDA0LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzNjQqIGluc3RlYWQgb2YgbWlwcyouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAgTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZSBhbmQgc2V0IHJldHVybiB2YWx1ZQorCXRvIHplcm8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMjMgIERhdmlkIERhbmV5IDxkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZ2NqLzEzMTQxCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX08zMl9TT0ZUX0ZMT0FUKTogTmV3IEFCSS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IGFsaWdubWVudCBjYWxjdWxhdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIGZsb2F0aW5nIHBvaW50CisJcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzLgorCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkksIGZpeAorCWFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2Nsb3N1cmVfTzMyKTogRG9uJ3QgdXNlIGZsb2F0aW5nIHBvaW50CisJaW5zdHJ1Y3Rpb25zIGlmIEZGSV9PMzJfU09GVF9GTE9BVCwgbWFrZSBzdGFjayBmcmFtZSBBQkkgY29tcGxpYW50LgorCisyMDA0LTA4LTE0ICBDYXNleSBNYXJzaGFsbCA8Y3NtQGdudS5vcmc+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlZl9jaWZfbWFjaGRlcCk6IHNldCBgY2lmLT5mbGFncycgdG8KKwljb250YWluIGBGRklfVFlQRV9VSU5UNjQnIGFzIHJldHVybiB0eXBlIGZvciBhbnkgNjQtYml0CisJaW50ZWdlciAoTzMyIEFCSSBvbmx5KS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IG5ldyBmdW5jdGlvbi4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBuZXcgZnVuY3Rpb24uCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRGVmaW5lIGBGRklfQ0xPU1VSRVMnIGFuZAorCWBGRklfVFJBTVBPTElORV9TSVpFJyBhcHByb3ByaWF0ZWx5IGlmIHRoZSBBQkkgaXMgbzMyLgorCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IGFkZCBsYWJlbHMgZm9yIC5laF9mcmFtZS4gUmV0dXJuCisJNjQgYml0IGludGVnZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogbmV3IGZ1bmN0aW9uLgorCUFkZGVkIERXQVJGLTIgdW53aW5kIGluZm8gZm9yIGJvdGggZnVuY3Rpb25zLgorCisyMDA0LTA4LTEwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzICk6IDgtYWxpZ24gYWxsIHN0YWNrIGFyZ3VtZW50cy4KKworMjAwNC0wOC0wMSAgUm9iZXJ0IE1pbGxhbiAgPHJvYmVydG1oQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGtuZXRic2QtZ251IGFuZCBrZnJlZWJzZC1nbnUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMzAgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19NTUFQX0JMQUNLTElTVCk6IENoZWNrIGZvciA8c3lzL21tYW4uaD4KKwlhbmQgbW1hcCgpIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHByZXNldCBhdXRvY29uZiBjYWNoZQorCXZhcmlhYmxlcy4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMTEgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggQyBhbGlhc2luZyB2aW9sYXRpb24uCisJKGZmaV9jaGVja19mbG9hdF9zdHJ1Y3QpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4KKworMjAwNC0wNi0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmx1c2hfaWNhY2hlKTogJzsnIGlzIGEgY29tbWVudAorCWNoYXJhY3RlciBvbiBEYXJ3aW4sIHVzZSAnXG5cdCcgaW5zdGVhZC4KKworMjAwNC0wNi0yNiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIGxpYnRvb2wtdmVyc2lvbjogRml4IHR5cG8gaW4gcmV2aXNpb24vYWdlLgorCisyMDA0LTA2LTE3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogbGlidG9vbC12ZXJzaW9uOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgLXZlcnNpb24taW5mbyBmb3Igc29uYW1lLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBydWxlcy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGF1dG9tYWtlIDEuOC41LgorCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBjb25maWd1cnkuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIC5jdnNpZ25vcmU6IE5ldyBmaWxlLgorCisyMDA0LTA2LTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2FsbF91bml4KTogSW5zZXJ0IGdyb3VwIGJhcnJpZXIgYnJlYWsKKwlmcF9kb25lLgorCShmZmlfY2xvc3VyZV9VTklYKTogRml4IGYxNC9mMTUgYWRqdXN0bWVudCBpZiBGTE9BVF9TWiBpcyBldmVyCisJY2hhbmdlZCBmcm9tIDguCisKKzIwMDQtMDYtMDYgIFNlYW4gTWNOZWlsICA8c2VhbkBtY25laWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB4ODZfNjQtKi1mcmVlYnNkKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBKb2UgQnVjayA8amJ1Y2tAd2Vsc2gtYnVjay5vcmc+CisKKwlCdWcgMTUwOTMKKwkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgZXhpc3RlbmNlIG9mIG1tYXAgYW5kIHN5cy9tbWFuLmggYmVmb3JlCisJY2hlY2tpbmcgYmxhY2tsaXN0LiAgRml4IHN1Z2dlc3RlZCBieSBKaW0gV2lsc29uLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEdvIHRocm91Z2ggYSBub24tbGF6eSBwb2ludGVyIGZvciBpbml0aWFsCisJRkRFIGxvY2F0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDQtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIChtYWluKTogRml4IGluaXRpYWxpemF0aW9uCisJZXJyb3IuIFJlcG9ydGVkIGJ5IFRob21hcyBIZWxsZXIgPHRoZWxsZXJAcHl0aG9uLm5ldD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMDQtMDMtMjAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBzcmMvcGEvbGludXguUzogRml4IHR5cG8uCisKKzIwMDQtMDMtMTkgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVXBkYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpLmguaW46IFJlbW92ZS4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaDogTmV3IGZpbGUuCisKKzIwMDQtMDItMTAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQSBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUEEgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3BhL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9mZmkuaC5pbjogQWRkIFBBIHN1cHBvcnQuCisJKiBzcmMvcGEvbGludXguUzogTmV3IGZpbGUuCisJKiBwcmVwX2NpZi5jOiBBZGQgUEEgc3VwcG9ydC4KKworMjAwNC0wMy0xNiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorCisJKiBzcmMvdHlwZXMuYzogRml4IGFsaWdubWVudCBzaXplIG9mIFg4Nl9XSU4zMiBjYXNlIGludDY0IGFuZAorCWRvdWJsZS4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGVjaWYtPmNpZi0+ZmxhZ3MuCisJKGZmaV9jYWxsLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBSZXBsYWNlIGNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGNpZi0+ZmxhZ3MuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9XSU4zMiBzdHJ1Y3QgY2FzZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UgZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAocmV0c3RydWN0MWIsIHJldHN0cnVjdDJiLCBzY19yZXRzdHJ1Y3QxYiwKKwlzY19yZXRzdHJ1Y3QyYik6IEFkZCBmb3IgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlLgorCisyMDA0LTAzLTE1IEtlbGxleSBDb29rIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOiBSZW5hbWUgZmlsZSB0byAuLi4KKwkqIGNvbmZpZ3VyZS5hYzogLi4uIHRoaXMuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0wMy0xMiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggRUggaW5mb3JtYXRpb24gc28gaXQgY29ycmVzcG9uZHMgdG8KKwljaGFuZ2VzIGluIEVIIGZvcm1hdCByZXN1bHRpbmcgZnJvbSBhZGRpdGlvbiBvZiBsaW5rb25jZSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDMtMTEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKwkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBTZXQgdGhlbS4KKwlSZW1vdmUgVlBBVEguIFJlbW92ZSBydWxlcyBmb3Igb2JqZWN0IGZpbGVzLiBSZW1vdmUgbXVsdGlsaWIgc3VwcG9ydC4KKwkoQU1fQ0NBU0ZMQUdTKTogQWRkLgorCSogY29uZmlndXJlLmluIChBQ19DT05GSUdfSEVBREVSUyk6IFJlbGFjZSBBTV9DT05GSUdfSEVBREVSLgorCShBQ19QUkVSRVEpOiBCdW1wIHZlcnNpb24gdG8gMi41OS4KKwkoQUNfSU5JVCk6IEZpbGwgd2l0aCB2ZXJzaW9uIGluZm8gYW5kIGJ1ZyBhZGRyZXNzLgorCShPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUmVtb3ZlLgorCShBTV9FTkFCTEVfTVVMVElMSUIpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEFDX0FSR19FTkFCTEUuCisJRGUtcHJlY2lvdXMgQ0Mgc28gdGhhdCB0aGUgcmlnaHQgZmxhZ3MgYXJlIHBhc3NlZCBkb3duIHRvIG11bHRpbGlicy4KKwkoQUNfTVNHX0VSUk9SKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19FUlJPUi4KKwkoQUNfQ09ORklHX0ZJTEVTKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19MSU5LX0ZJTEVTLgorCShBQ19PVVRQVVQpOiBSZW9yZ2FuaXplIHRoZSBvdXRwdXQgd2l0aCBBQ19DT05GSUdfQ09NTUFORFMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDA0LTAzLTExICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19VTklYKTogR2V0IGZsb2F0aW5nIHBvaW50CisJYXJndW1lbnRzIGZyb20gZnAgcmVnaXN0ZXJzIG9ubHkgZm9yIHRoZSBmaXJzdCA4IHBhcmFtZXRlciBzbG90cy4KKwlEb24ndCBjb252ZXJ0IGEgZmxvYXQgcGFyYW1ldGVyIHdoZW4gcGFzc2VkIGluIG1lbW9yeS4KKworMjAwNC0wMy0wOSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgY29uZmlnL2FjY3Jvc3MubTQgY29ycmVjdGlvbi4KKworMjAwNC0wMi0yNSAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ2hhbmdlCisJZWNpZi0+Y2lmLT5ieXRlcyB0byBieXRlcy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgYnJhY2VzIGFyb3VuZCBuZXN0ZWQgaWYgc3RhdGVtZW50LgorCisyMDA0LTAyLTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAocG9pbnRlcik6IFBPV0VSUEM2NCBoYXMgOCBieXRlIHBvaW50ZXJzLgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGaXggdHlwby4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBQYXNzIC1tbG9uZy1kb3VibGUtMTI4CisJZm9yIHBvd2VycGM2NC0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCisyMDA0LTAyLTA4ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXAgPEZGSV9MSU5VWDY0Pik6IENvcnJlY3QKKwlsb25nIGRvdWJsZSBmdW5jdGlvbiByZXR1cm4gYW5kIGxvbmcgZG91YmxlIGFyZyBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGb3JtYXR0aW5nLiAgRGVsZXRlIHVudXNlZCAibmciIHZhci4KKwlVc2UgImVuZF9wZnIiIGluc3RlYWQgb2YgIm5mIi4gIENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisJTG9jYWxpc2UgInRlbXAiLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2F2ZSBmMiBsb25nIGRvdWJsZQorCXJldHVybiB2YWx1ZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQWxsb2NhdGUKKwlzcGFjZSBmb3IgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlLiAgQWRqdXN0IHN0YWNrIGZyYW1lIGFuZCBvZmZzZXRzLgorCUxvYWQgZjIgbG9uZyBkb3VibGUgcmV0dXJuLgorCisyMDA0LTAyLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYzogVXNlIDE2IGJ5dGUgbG9uZyBkb3VibGUgZm9yIFBPV0VSUEM2NC4KKworMjAwNC0wMS0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y5KTogU2hpZnQgdGhlIHBhcmFtZXRlciBhcnJheQorCXdoZW4gdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpcyBwYXNzZWQgaW4gJW8wLgorCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IFJlbmFtZSBpbnRvIGZmaV92OV9sYXlvdXRfc3RydWN0LgorCShmZmlfdjlfbGF5b3V0X3N0cnVjdCk6IEFsaWduIHRoZSBmaWVsZCBmb2xsb3dpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCisJb24gYSB3b3JkIGJvdW5kYXJ5LiAgVXNlIG1lbW1vdmUgaW5zdGVhZCBvZiBtZW1jcHkuCisJKGZmaV9jYWxsKTogVXBkYXRlIGNhbGwgdG8gZmZpX1Y5X3JldHVybl9zdHJ1Y3QuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWZpbmUgJ2N0eCcgb25seSBmb3IgVjguCisJKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogQ2xvbmUgaW50byBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OAorCWFuZCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgpOiBSZXR1cm4gbG9uZyBkb3VibGVzIGJ5IHJlZmVyZW5jZS4KKwlBbHdheXMgc2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgRm9yIHN0cnVjdHVyZXMgYW5kIGxvbmcKKwlkb3VibGVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBTa2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3Mgb25seQorCWlmIHJlcXVpcmVkLiAgU2hpZnQgdGhlIG1heGltdW0gZmxvYXRpbmctcG9pbnQgc2xvdCBhY2NvcmRpbmdseS4gIEZvcgorCWJpZyBzdHJ1Y3R1cmVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseTsgb3RoZXJ3aXNlLCBsZWZ0LWp1c3RpZnkgdGhlCisJYXJndW1lbnQgYW5kIGNhbGwgZmZpX3Y5X2xheW91dF9zdHJ1Y3QgdG8gbGF5IG91dCB0aGUgc3RydWN0dXJlIG9uCisJdGhlIHN0YWNrLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OCk6IFBhc3MgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIFVwZGF0ZSBjYWxsIHRvCisJZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjguICBTaG9ydC1jaXJjdWl0IEZGSV9UWVBFX0lOVCBoYW5kbGluZy4KKwlTa2lwIHRoZSAndW5pbXAnIGluc24gd2hlbiByZXR1cm5pbmcgbG9uZyBkb3VibGVzIGFuZCBzdHJ1Y3R1cmVzLgorCSogc3JjL3NwYXJjL3Y5LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OSk6IEluY3JlYXNlIHRoZSBmcmFtZSBzaXplIGJ5IDIgd29yZHMuICBTaG9ydC1jaXJjdWl0CisJRkZJX1RZUEVfSU5UIGhhbmRsaW5nLiAgTG9hZCBzdHJ1Y3R1cmVzIGJvdGggaW4gaW50ZWdlcnMgYW5kCisJZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHJldHVybi4KKwkqIFJFQURNRTogVXBkYXRlIHN0YXR1cyBvZiB0aGUgU1BBUkMgcG9ydC4KKworMjAwNC0wMS0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBUcmVhdCByZXN1bHQgdmFsdWUKKwlhcyBvZiB0eXBlIGZmaV9hcmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIChtYWluKTogRml4IENIRUNLLgorCisyMDA0LTAxLTIyICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBUcmVhdCByZXN1bHQKKwl2YWx1ZSBhcyBvZiB0eXBlIGZmaV9hcmcsIG5vdCB1bnNpZ25lZCBpbnQuCisKKzIwMDQtMDEtMjEgIE1pY2hhZWwgUml0emVydCAgPHJpdHplcnRAdC1vbmxpbmUuZGU+CisKKwkqIGZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDYXN0IHRoZSBSSFMgb2YgYW4gYXNzaWdubWVudCBpbnN0ZWFkCisJb2YgdGhlIExIUy4KKworMjAwNC0wMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfMzIgZm9yCisJU29sYXJpcy4KKworMjAwNC0wMS0wOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBDYXN0IE1BUF9GQUlMRUQKKwl0byB2b2lkICouCisKKzIwMDMtMTItMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBDYXN0IHBvaW50ZXJzIHRvCisJc2l6ZV90IGluc3RlYWQgb2YgaW50LgorCisyMDAzLTEyLTA0ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IEluY2x1ZGUgPGZsb2F0Lmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyAobWFpbik6IFJlcGxhY2UgdmFyaWFibGUKKwlpbnQgaSB3aXRoIHVuc2lnbmVkIGxvbmcgdWwuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCisyMDAzLTEyLTAyICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwlQUiBvdGhlci8xMzIyMQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKToKKwlBbGlnbiBhcmd1bWVudHMgdG8gMzIgYml0cy4KKworMjAwMy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJUFIgb3RoZXIvMTMyMjEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29zbWV0aWNzLgorCisyMDAzLTExLTI2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEluY2x1ZGUgPGZjbnRsLmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvbnZlcnQgdGhlIG1tYXAgdG8KKwl0aGUgcmlnaHQgdHlwZS4KKworMjAwMy0xMS0yMSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCisJKiBjb25maWd1cmUuaW46IENhbGwgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgaW5jbHVkZSBkaXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgTU1BUCBkZWZpbml0aW9ucy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFVzZSBNTUFQIGZ1bmN0aW9uYWxpdHkKKwlmb3IgZmZpX2Nsb3N1cmUgaWYgYXZhaWxhYmxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYWtlIHRoZSAtbGdjY19zIGNvbmRpdGlvbmFsLgorCisyMDAzLTExLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIERZTERfTElCUkFSWV9QQVRIIGZvciBkYXJ3aW4uCisJQWRkIC1sZ2NjX3MgdG8gYWRkaXRpb25hbCBmbGFncy4KKworMjAwMy0xMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuYW06IFBSIGxpYmdjai8xMTE0NywgaW5zdGFsbAorCXRoZSBmZml0YXJnZXQuaCBoZWFkZXIgZmlsZSBpbiBhIGdjYyB2ZXJzaW9uZWQgYW5kIHRhcmdldAorCWRlcGVuZGVudCBwbGFjZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDAzLTExLTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBQcmludCByZXN1bHQgYW5kIGNoZWNrCisJd2l0aCBkZy1vdXRwdXQgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTWFrZSBmZmlfY2xvc3VyZQorCXN0YXRpYy4KKworMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogRG8gYSBjaGVjayBvbiB0aGUgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMTEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgdGhlIHZhbGlkaXR5IGNoZWNrIGFmdGVyCisJdGhlIGluaXRpYWxpemF0aW9uLgorCisyMDAzLTEwLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogUmVwbGFjZQorCUZGSV9BU1NFUlQoRkFMU0UpIHdpdGggRkZJX0FTU0VSVCgwKS4KKworMjAwMy0xMC0yMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlcGxhY2UgdW5kZWZpbmVkIFVJTlQzMiBhbmQgZnJpZW5kcyB3aXRoCisJX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpIGFuZCBmcmllbmRzLgorCisyMDAzLTEwLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYzogUmVwbGFjZSBGQUxTRS9UUlVFIHdpdGggZmFsc2UvdHJ1ZS4KKworMjAwMy0xMC0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW46IEFDX0xJTktfRklMRVMoZmZpdGFyZ2V0LmgpLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDAzLTEwLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJQXZvaWQgdGhhdCBmZmkuaCBpbmNsdWRlcyBmZmljb25maWcuaC4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBJbmNsdWRlIGZmaXRhcmdldC5oIGZpbGVzCisJKFRBUkdFVF9TUkNfTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShUQVJHRVRfU1JDX01JUFNfU0dJKTogUmVtb3ZlZC4KKwkoTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShNSVBTX1NHSSk6IFJlbW92ZWQuCisJKENMRUFORklMRVMpOiBSZW1vdmVkLgorCShtb3N0bHljbGVhbi1hbSwgY2xlYW4tYW0sIG1vc3RseWNsZWFuLXN1YiwgY2xlYW4tc3ViKTogTmV3CisJdGFyZ2V0cy4KKwkqIGFjY29uZmlnLmg6IFJlbW92ZWQuCisJKiBjb25maWd1cmUuaW46IENvbXB1dGUgc2l6ZW9mcyBvbmx5IGZvciBkb3VibGUgYW5kIGxvbmcgZG91YmxlLgorCVVzZSB0aGVtIHRvIGRlZmluZSBhbmQgc3Vic3QgSEFWRV9MT05HX0RPVUJMRS4gIEluY2x1ZGUgY29tbWVudHMKKwlpbnRvIEFDX0RFRklORSBpbnN0ZWFkIG9mIHVzaW5nIGFjY29uZmlnLmguICBDcmVhdGUKKwlpbmNsdWRlL2ZmaXRhcmdldC5oIGluc3RlYWQgb2YgaW5jbHVkZS9mZmljb25maWcuaC4gIFJlbmFtZQorCU1JUFNfR0NDIHRvIE1JUFNfSVJJWCwgZHJvcCBNSVBTX1NHSSBzaW5jZSB3ZSBhcmUgaW4gZ2NjJ3MgdHJlZS4KKwlBQ19ERUZJTkUgRUhfRlJBTUVfRkxBR1MuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtIChESVNUQ0xFQU5GSUxFUyk6IE5ldyBhdXRvbWFrZSBtYWNyby4KKwkoaGFja19EQVRBKTogQWRkIGZmaXRhcmdldC5oLgorCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIGFsbCBzeXN0ZW0gc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisJRGVjbGFyZSByYXcgQVBJIGV2ZW4gaWYgaXQgaXMgbm90IGluc3RhbGxlZCwgd2h5IGJvdGhlcj8KKwlVc2UgbGltaXRzLmggaW5zdGVhZCBvZiBTSVpFT0ZfKiB0byBkZWZpbmUgZmZpX3R5cGVfKi4gIERvCisJbm90IGRlZmluZSBFSF9GUkFNRV9GTEFHUywgaXQgaXMgaW4gZmZpY29uZmlnLmggbm93LiAgSW5jbHVkZQorCWZmaXRhcmdldC5oIGluc3RlYWQgb2YgZmZpY29uZmlnLmguICBSZW1vdmUgQUxJR04gbWFjcm8uCisJKFVJTlRfQVJHLCBJTlRfQVJHKTogUmVtb3ZlZCwgdXNlIGZmaV9hcmcgYW5kIGZmaV9zYXJnIGluc3RlYWQuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoYm9vbCk6IERvIG5vdCBkZWZpbmUuCisJKGZmaV9hc3NlcnQpOiBBY2NlcHQgZmFpbGVkIGFzc2VydGlvbi4KKwkoZmZpX3R5cGVfdGVzdCk6IFJldHVybiB2b2lkIGFuZCBhY2NlcHQgZmlsZS9saW5lLgorCShGRklfQVNTRVJUKTogUGFzcyBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCisJKEZGSV9BU1NFUlRfQVQpOiBOZXcgbWFjcm8uCisJKEZGSV9BU1NFUlRfVkFMSURfVFlQRSk6IE5ldyBtYWNyby4KKwkoVUlOVDgsIFNJTlQ4LCBVSU5UMTYsIFNJTlQxNiwgVUlOVDMyLCBTSU5UMzIsCisJVUlOVDY0LCBTSU5UNjQpOiBEZWZpbmUgaGVyZSB3aXRoIGdjYydzIF9fYXR0cmlidXRlX18gbWFjcm8KKwlpbnN0ZWFkIG9mIGluIGZmaS5oCisJKEZMT0FUMzIsIEFMSUdOKTogRGVmaW5lIGhlcmUgaW5zdGVhZCBvZiBpbiBmZmkuaAorCSogaW5jbHVkZS9mZmktbWlwcy5oOiBSZW1vdmVkLiAgSXRzIGNvbnRlbnQgbW92ZWQgdG8KKwlzcmMvbWlwcy9mZml0YXJnZXQuaCBhZnRlciBzZXBhcmF0aW5nIGFzc2VtYmx5IGFuZCBDIHNlY3Rpb25zLgorCSogc3JjL2FscGhhL2ZmaS5jLCBzcmMvYWxwaGEvZmZpLmMsIHNyYy9qYXZhX3Jhd19hcGkuYworCXNyYy9wcmVwX2NpZi5jLCBzcmMvcmF3X2FwaS5jLCBzcmMvaWE2NC9mZmkuYywKKwlzcmMvbWlwcy9mZmkuYywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpLmMsIHNyYy94ODYvZmZpNjQuYzoKKwlTSVpFT0ZfQVJHIC0+IEZGSV9TSVpFT0ZfQVJHLgorCSogc3JjL2lhNjQvZmZpLmM6IEluY2x1ZGUgc3RkYm9vbC5oIChwcm92aWRlZCBieSBHQ0MgMi45NSspLgorCSogc3JjL2RlYnVnLmMgKGZmaV9hc3NlcnQpOiBBY2NlcHQgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgorCShmZmlfdHlwZV90ZXN0KTogUmV3cml0dGVuLgorCSogc3JjL3ByZXAtY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlLCBmZmlfcHJlcF9jaWYpOiBDYWxsCisJRkZJX0FTU0VSVF9WQUxJRF9UWVBFLgorCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLCBzcmMvbTY4ay9mZml0YXJnZXQuaCwKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCisJc3JjL3MzOTAvZmZpdGFyZ2V0LmgsIHNyYy9zaC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAorCXNyYy94ODYvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KKwkqIHNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9zeXN2LlMsIHNyYy9pYTY0L3VuaXguUywKKwlzcmMvbTY4ay9zeXN2LlMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKKwlzcmMvcG93ZXJwYy9haXguUywgc3JjL3Bvd2VycGMvZGFyd2luLlMsCisJc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcG93ZXJwYy9saW51eDY0LlMsCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsCisJc3JjL3Bvd2VycGMvc3lzdi5TLCBzcmMvczM5MC9zeXN2LlMsIHNyYy9zaC9zeXN2LlMsCisJc3JjL3NoNjQvc3lzdi5TLCBzcmMvc3BhcmMvdjguUywgc3JjL3NwYXJjL3Y5LlMsCisJc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvd2luMzIuUzoKKwlpbmNsdWRlIGZmaWNvbmZpZy5oCisKKzIwMDMtMTAtMjAgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIF9BQklOMzIsIF9BQklPMzIgaW5zdGVhZCBvZiBleHRlcm5hbAorCV9NSVBTX1NJTV9OQUJJMzIsIF9NSVBTX1NJTV9BQkkzMi4KKworMjAwMy0xMC0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEZWNsYXJlIGJ5dGVzIGFnYWluLgorCVVzZWQgd2hlbiBGRklfREVCVUcgPSAxLgorCisyMDAzLTEwLTE0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogRGVmYXVsdCBQT1dFUlBDNjQgdG8gOCBieXRlIHNpemUKKwlhbmQgYWxpZ24uCisKKzIwMDMtMTAtMDYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBpbmNsdWRlL2ZmaV9taXBzLmg6IERlZmluZSBGRklfTUlQU19OMzIgZm9yIE4zMi9ONjQgQUJJcywKKwlGRklfTUlQU19PMzIgZm9yIE8zMiBBQkkuCisKKzIwMDMtMTAtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzY0IGZvcgorCVNQQVJDNjQuIENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHMsIGFybSwKKwlzdHJvbmdhcm0sIHhzY2FsZS4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQ2xlYW51cCB3aGl0ZXNwYWNlcywgY29tbWVudCBmb3JtYXR0aW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCisyMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3R5cGVzLmMgKGRvdWJsZSk6IEFkZCBBSVggYW5kIERhcndpbiB0byB0aGUgcmlnaHQgVFlQRURFRi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUgb3V0Z29pbmcKKwlwYXJhbWV0ZXIgc3RhY2suCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBzdHJ1Y3R1cmVzCisJYWNjb3JkaW5nIHRvIHRoZSBEYXJ3aW4vQUlYIEFCSS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IExpa2V3aXNlLgorCVJlbW92ZSB0aGUgb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGxvZ2ljLiBTaW1wbGlmeSB0aGUgZXZhbHVhdGlvbgorCW9mIHRoZSBkaWZmZXJlbnQgQ0FTRSB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvdXN1cmUpOiBBdm9pZCB0aGUgY2FzdHMgb24gbHZhbHVlcy4gQ2hhbmdlIHRoZSBicmFuY2gKKwlzdGF0ZW1lbnQgaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4KKworMjAwMy0wOS0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFRha2UgYWNjb3VudCBpbnRvIHRoZSBhbGlnbmVtZW50CisJZm9yIHRoZSByZWdpc3RlciBzaXplLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEhhbmRsZSB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZQorCWFkZHJlc3MgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJldHVybiB0aGUgYXBwcm9wcmlhdGUgdHlwZSB3aGVuCisJdGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUuCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRml4IHRoZSBzdGFjayBsYXlvdXQgZm9yCisJdGhlIDY0LWJpdCByZXR1cm4gdmFsdWUuICBVcGRhdGUgY29weXJpZ2h0IHllYXJzLgorCisyMDAzLTA5LTE3ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBTZWFyY2ggaW4KKwlzcmNkaXIgZm9yIGZmaV9taXBzLmguCisKKzIwMDMtMDktMTIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEluY2x1ZGUgdGFpbCBwYWRkaW5nIGluCisJc3RydWN0dXJlIHNpemUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IENvcnJlY3QKKwlwbGFjZW1lbnQgb2YgZmxvYXQgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbjEpOiBDb3JyZWN0CisJY2FzdCBvZiAicmVzcCIgZm9yIGJpZy1lbmRpYW4gNjQgYml0IG1hY2hpbmVzLgorCisyMDAzLTA5LTExICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogTWVyZ2UgaWRlbnRpY2FsIFNIIGFuZCBBUk0KKwl0eXBlZGVmcywgYW5kIGFkZCBQT1dFUlBDNjQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBuZXh0X2FyZyBjYWxjIGZvcgorCXN0cnVjdCBzcGxpdCBvdmVyIGdwciBhbmQgcmVzdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IGludGFyZ19jb3VudCBmb3Igc3RydWN0dXJlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IEZpeCBncHIgb2Zmc2V0cy4KKworMjAwMy0wOS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpIEhhbmRsZSBzdHJ1Y3QKKwlwYXNzaW5nIGNvcnJlY3RseS4KKworMjAwMy0wOS0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgYnVpbGQgcnVsZXMgZm9yIGZmaXRlc3QuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPiB0byBmaXggY29tcGlsZXIgd2FybmluZworCWFib3V0IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGFib3J0KCkuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLiBGaXhlcyBQUiBvdGhlci8xMTQxMS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogQnVpbHQKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCisKKzIwMDMtMDgtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKE9GU19JTlQxNik6IFNldCAwIGZvciBsaXR0bGUgZW5kaWFuIGNhc2UuICBVcGRhdGUKKwljb3B5cmlnaHQgeWVhcnMuCisKKzIwMDMtMDgtMDIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBNb2RpZnkgZm9yIGNoYW5nZWQgZ2NjCisJc3RydWN0dXJlIHBhc3NpbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IFJlbW92ZSBjb2RlIHdyaXRpbmcgdG8gcGFybSBzYXZlIGFyZWEuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSByZXR1cm4KKwlhZGRyZXNzIGluIGxyIGZyb20gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgY2FsbCB0byBjYWxjdWxhdGUKKwl0YWJsZSBhZGRyZXNzLiAgT3B0aW1pemUgZnVuY3Rpb24gdGFpbC4KKworMjAwMy0wNy0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvc3BhcmMvZmZpLmM6IEhhbmRsZSBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLiBGaXhlcyBzZWNvbmQgcGFydCBvZiBQUiB0YXJnZXQvMTE0MTAuCisKKzIwMDMtMDctMTEgIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KKworCSogUkVBRE1FOiBOb3RlIHRoYXQgbGliZmZpIGlzIG5vdCBwYXJ0IG9mIEdDQy4gIFVwZGF0ZSB0aGUgcHJvamVjdAorCVVSTCBhbmQgc3RhdHVzLgorCisyMDAzLTA2LTE5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDYtMTMgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLnVsZWIxMjgvLnNsZWIxMjggZGlyZWN0aXZlcy4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMy0wNi0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAcnIuaWlqNHUub3IuanA+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0htZWRpYSBzdXBwb3J0LiAgRml4IGEgdHlwbyBvZiBTSCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW4gKHNoNjQtKi1saW51eCosIHNoNSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIbWVkaWEgc3VwcG9ydC4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTmV3IGZpbGUuCisKKzIwMDMtMDUtMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKEhBVkVfUk9fRUhfRlJBTUUpOiBDaGVjayB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uCisJc2hvdWxkIGJlIHJlYWQtb25seS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRUhfRlJBTUVfRkxBR1MpOiBEZWZpbmUuCisJKiBzcmMvYWxwaGEvb3NmLlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuICBJbmNsdWRlIGZmaS5oLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBVc2UgcGNyZWwgZW5jb2RpbmcKKwlpZiAtZnBpYy8tZlBJQy8tbXJlbG9jYXRhYmxlLgorCSogc3JjL3Bvd2VycGMvcG93ZXJwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IElmIEhBVkVfUk9fRUhfRlJBTUUgaXMgZGVmaW5lZCwgZG9uJ3QgaW5jbHVkZQorCSN3cml0ZSBpbiAuZWhfZnJhbWUgZmxhZ3MuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuICBVc2UgcGNyZWwgZW5jb2RpbmcgaWYgLWZwaWMvLWZQSUMuCisJKiBzcmMvczM5MC9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDUtMDcgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCUZpeGVzIFBSIGJvb3RzdHJhcC8xMDY1NgorCSogY29uZmlndXJlLmluIChIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCk6IFRlc3QgYXNzZW1ibGVyCisJc3VwcG9ydCBmb3IgLnJlZ2lzdGVyIHBzZXVkby1vcC4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wNC0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKFBPV0VSUEM2NCk6IERlZmluZSBpZiA2NC1iaXQuCisJKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVg2NCBvbiBQT1dFUlBDLgorCU1ha2UgaXQgdGhlIGRlZmF1bHQgb24gUE9XRVJQQzY0LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIHRvIDI0IG9uIFBPV0VSUEM2NC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHBvd2VycGMtKi1saW51eCogaW50byBwb3dlcnBjKi0qLWxpbnV4Ki4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBEZWZpbmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFJlbmFtZWQgZnJvbQorCWZmaV9wcmVwX2FyZ3MuICBDYXN0IHBvaW50ZXJzIHRvIHVuc2lnbmVkIGxvbmcgdG8gc2h1dCB1cCB3YXJuaW5ncy4KKwkoTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQsIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0LAorCUFTTV9ORUVEU19SRUdJU1RFUlM2NCk6IE5ldy4KKwkoZmZpX3ByZXBfYXJnczY0KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTElOVVg2NCBBQkkuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKwkoZmx1c2hfaWNhY2hlKTogU3Vycm91bmQgYnkgI2lmbmRlZiBQT1dFUlBDNjQuCisJKGZmaV9kYmxmbCk6IE5ldyB1bmlvbiB0eXBlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFVzZSBpdCB0byBhdm9pZCBhbGlhc2luZyBwcm9ibGVtcy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBTdXJyb3VuZCB3aG9sZSBmaWxlIGJ5ICNpZm5kZWYKKwlfX3Bvd2VycGM2NF9fLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSBmZmlfcHJlcF9hcmdzIHRvIGZmaV9wcmVwX2FyZ3NfU1lTVi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMvcG93ZXJwYy9saW51eDY0LlMgYW5kCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorCisJKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4sIGNsb3N1cmVfdGVzdF9mbjEsIGNsb3N1cmVfdGVzdF9mbjIsCisJY2xvc3VyZV90ZXN0X2ZuMyk6IEZpeCByZXN1bHQgcHJpbnRpbmcgb24gYmlnLWVuZGlhbiA2NC1iaXQKKwltYWNoaW5lcy4KKwkobWFpbik6IFByaW50IHRzdDJfYXJnIGluc3RlYWQgb2YgdW5pbml0aWFsaXplZCB0c3QyX3Jlc3VsdC4KKworCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IEhpZGUgd2hhdCBjbG9zdXJlIHBvaW50ZXIgcmVhbGx5IHBvaW50cyB0bworCWZyb20gdGhlIGNvbXBpbGVyLgorCisyMDAzLTA0LTE2ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogY29uZmlndXJlLmluIChhcm0tKi1uZXRic2RlbGYqKTogQWRkIGNvbmZpZ3VyYXRpb24uCisJKGNvbmZpZ3VyZSk6IFJlZ2VuZXJhdGVkLgorCisyMDAzLTA0LTA0ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDAzLTAzLTIxICBaZGVuZWsgRHZvcmFrICA8cmFrZHZlckBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+CisKKwkqIGxpYmZmaS9pbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgWDg2IGluc3RlYWQgb2YgWDg2XzY0IGluIDMyCisJYml0IG1vZGUuCisJKiBsaWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOgorCVJlY2VpdmUgY2xvc3VyZSBwb2ludGVyIHRocm91Z2ggcGFyYW1ldGVyLCByZWFkIGFyZ3MgdXNpbmcKKwlfX2J1aWx0aW5fZHdhcmZfY2ZhLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogU2VuZCBjbG9zdXJlIHJlZmVyZW5jZSB0aHJvdWdoIGVheC4KKworMjAwMy0wMy0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBdm9pZCB0cmFpbGluZyAvLiBpbiB0b29sZXhlY2xpYmRpci4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wMy0wMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgZHluYW1pYyBsaWJyYXJpZXMuCisKKzIwMDMtMDItMDYgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzoKKwlGaXggYWxpZ25lbWVudCBidWcsIGFsbG9jYXRlIDggYnl0ZXMgZm9yIHRoZSByZXN1bHQuCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzoKKwlMaWtld2lzZS4KKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6CisJVXBkYXRlIHN0YWNrZnJhbWUgZGVzY3JpcHRpb24gZm9yIGFpeC9kYXJ3aW5fY2xvc3VyZS5TLgorCisyMDAzLTAyLTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGhpZGRlbiB2aXNpYmlsaXR5CisJYXR0cmlidXRlLgorCisyMDAzLTAxLTMxICBDaHJpc3RpYW4gQ29ybmVsc3NlbiAgPGNjb3JuQGNzLnR1LWJlcmxpbi5kZT4sCisJICAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0IGNvbW1hbmQgdG8gc291cmNlIGNvbmZpZy1tbC5pbiB0byBhY2NvdW50CisJZm9yIGNoYW5nZXMgdG8gdGhlIGxpYmZmaV9iYXNlZGlyIGRlZmluaXRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogUmVtb3ZlICR7c3JjZGlyfSBmcm9tIHZhbHVlIGFuZCBpbmNsdWRlIHRyYWlsaW5nCisJc2xhc2ggaWYgbm9uZW1wdHkuCisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IHNoYXJlZCBsaWJzLgorCisyMDAzLTAxLTI4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRW5hYmxlIEZGSV9DTE9TVVJFUyBmb3IgeDg2XzY0LgorCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3LgorCShmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIpOiBOZXcuCisJKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2xvc3VyZV9VTklYNjQpOiBOZXcuCisKKzIwMDMtMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCisJUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCisJKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTAxMDI3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogRml4IHR5cG8uCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogQWRkIEF1Z21lbnRhdGlvbiBzaXplIHRvCisJdW53aW5kIGluZm8uCisKKzIwMDMtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAzLTAxLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2hlY2sgZm9yIHZvaWQgcmV0dmFsLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogQWRkIHVud2luZCBpbmZvLgorCisyMDAzLTAxLTE0ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisKKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBPbmx5IHVzZSBmZmlfY2xvc3VyZXMgaWYgdGhvc2UgYXJlCisJc3VwcG9ydGVkLgorCisyMDAzLTAxLTEzIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL2ZmaXRlc3QuYworCSBhZGQgY2xvc3VyZSB0ZXN0Y2FzZXMKKworMjAwMy0wMS0xMyBLZXZpbiBCLiBIZW5kcmlja3MgPGtoZW5kcmlja3NAaXZleS51d28uY2E+CisKKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYworCSBmaXggYWxpZ25tZW50IGJ1ZyBmb3IgZmxvYXQgKDQgYnl0ZSBhbGlnbmVkIGlzbyA4IGJ5dGUpCisKKzIwMDMtMDEtMDkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKworMjAwMy0wMS0wMyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgY2xvc3VyZSBkZWZpbmVzIGZvciBTUEFSQywgU1BBUkM2NC4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2Ugc3RhdGljIHN0b3JhZ2UgZm9yIGNsb3N1cmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogTmV3LgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogTmV3LgorCSogc3JjL3NwYXJjL3Y5LlMgKGZmaV9jbG9zdXJlX3Y5KTogTmV3LgorCisyMDAyLTExLTEwICBSYW5qaXQgTWF0aGV3IDxybWF0aGV3QGhvdG1haWwuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBGRklfU1REQ0FMTCBmZmlfdHlwZQorCSAgZW51bWVyYXRpb24gZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUzogQWRkZWQgZmZpX2NhbGxfU1REQ0FMTCBmdW5jdGlvbgorCSAgZGVmaW5pdGlvbi4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsL2ZmaV9yYXdfY2FsbCk6IEFkZGVkCisJICBzd2l0Y2ggY2FzZXMgZm9yIHJlY29nbmlzaW5nIEZGSV9TVERDQUxMIGFuZAorCSAgY2FsbGluZyBmZmlfY2FsbF9TVERDQUxMIGlmIHRhcmdldCBpcyBYODZfV0lOMzIuCisJKiBzcmMvZmZpdGVzdC5jIChteV9zdGRjYWxsX3N0cmxlbi9zdGRjYWxsX21hbnkpOgorCSAgc3RkY2FsbCB2ZXJzaW9ucyBvZiB0aGUgIm15X3N0cmxlbiIgYW5kICJtYW55IgorCSAgdGVzdCBmdW5jdGlvbnMgKGZvciBYODZfV0lOMzIpLgorCSAgQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0IHN0ZGNhbGwgaW52b2NhdGlvbiB1c2luZworCSAgdGhlc2UgZnVuY3Rpb25zLgorCisyMDAyLTEyLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIERXQVJGMiB1bndpbmQgaW5mby4KKworMjAwMi0xMS0yNyAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogTWFrZSBzZWN0aW9uIHJlYWQtb25seS4KKworMjAwMi0xMS0yNiAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IEhhcyBzaXplIDggb24gSUE2NC4KKworMjAwMi0xMS0yMyAgSC5KLiBMdSA8aGpsQGdudS5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIGR1bW15IEFNX1BST0dfTElCVE9PTC4KKwlJbmNsdWRlIC4uL2NvbmZpZy9hY2Nyb3NzLm00LgorCSogYWNsb2NhbC5tNDsgUmVidWlsZC4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDItMTEtMTUgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IEFkYXB0IHRvIHBjcmVsIEZERSBlbmNvZGluZy4KKworMjAwMi0xMS0xMSAgREogRGVsb3JpZSAgPGRqQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgY29tbW9uIGZpbGVzIGluIHRoZSByaWdodCBwbGFjZS4KKworMjAwMi0xMC0wOCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IEludGVycHJldAorCXJhdyBkYXRhIGFzIF9Kdl93b3JkIHZhbHVlcywgbm90IGZmaV9yYXcuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IExpa2V3aXNlLgorCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfamF2YV9yYXdfY2FsbCk6IENhbGwgaXQuCisJKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FsbCBpdC4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IEludGVycHJldCByZXR1cm4gdmFsdWUKKwlhcyBmZmlfYXJnLCBub3QgaW50LgorCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIG1pc3NpbmcKKwlGRklfVFlQRV9QT0lOVEVSIGNhc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuICBBbHNvLCBhc3N1bWUgcmV0dXJuCisJdmFsdWVzIGV4dGVuZGVkIHRvIHdvcmQgc2l6ZS4KKworMjAwMi0xMC0wMiAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmVtb3ZlIGRlYnVnIG91dHB1dC4KKworMjAwMi0xMC0wMSAgQm8gVGhvcnNlbiAgPGJvQHNtZXRhbmEuc3VzZS5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IGkzODYgd2luMzIgY29tcGlsYXRpb24uCisKKzIwMDItMDktMzAgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgczM5MHgtKi1saW51eC0qIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBTMzkwWCBmb3IgczM5MHggdGFyZ2V0cy4KKwkoRkZJX0NMT1NVUkVTKTogRGVmaW5lIGZvciBzMzkwL3MzOTB4LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvIG5vdCBjb21wdXRlIHN0YWNrIHNwYWNlIGZvciBzMzkwLgorCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBVc2UgOC1ieXRlIHBvaW50ZXJzIG9uIHMzOTB4LgorCSogc3JjL3MzOTAvZmZpLmM6IE1ham9yIHJld29yayBvZiBleGlzdGluZyBjb2RlLiAgQWRkIHN1cHBvcnQgZm9yCisJczM5MHggdGFyZ2V0cy4gIEFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDAyLTA5LTI5ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IEZpeCB0eXBvLgorCisyMDAyLTA5LTI4ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IElmIHdlIGRvbid0IGhhdmUgbWFjaGluZS9hc20uaCBhbmQgdGhlIHByZS1wcm9jZXNzb3IKKwloYXMgZGVmaW5lZCBfX1VTRVJfTEFCRUxfUFJFRklYX18sIHRoZW4gdXNlIGl0IGluIENOQU1FLgorCShmZmlfY2FsbF9TWVNWKTogSGFuZGxlIHNvZnQtZmxvYXQuCisKKzIwMDItMDktMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggbXVsdGlsaWIgeDg2LTY0IHN1cHBvcnQuCisKKzIwMDItMDktMjIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKworCSogTWFrZWZpbGUuYW0gKGFsbC1tdWx0aSk6IEZpeCBtdWx0aWxpYiBwYXJhbGxlbCBidWlsZC4KKworMjAwMi0wNy0xOSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCBicmFja2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNy0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0ggc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluIChzaC0qLWxpbnV4Kiwgc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0ggc3VwcG9ydC4KKwkqIHNyYy9zaC9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvc2gvc3lzdi5TOiBOZXcgZmlsZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgU0ggc3VwcG9ydC4KKworMjAwMi0wNy0xNiAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpNjQuYzogTmV3IGZpbGUgdGhhdCBhZGRzIHg4Ni02NCBzdXBwb3J0LgorCSogc3JjL3g4Ni91bml4NjQuUzogTmV3IGZpbGUgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHNldHVwIGZvcgorCXg4Ni02NC4KKwkqIHNyYy94ODYvc3lzdi5TOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJKiBzcmMveDg2L2ZmaS5jOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJUmVtb3ZlIHVudXNlZCB2YXJzLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvbid0IGRvIHN0YWNrIHNpemUgY2FsY3VsYXRpb24KKwlmb3IgeDg2LTY0LgorCSogc3JjL2ZmaXRlc3QuYyAoc3RydWN0Nik6IE5ldyB0ZXN0IHRoYXQgdGVzdHMgYSBzcGVjaWFsIGNhc2UgaW4KKwl0aGUgeDg2LTY0IEFCSS4KKwkoc3RydWN0Nyk6IExpa2V3aXNlLgorCShzdHJ1Y3Q4KTogTGlrZXdpc2UuCisJKHN0cnVjdDkpOiBMaWtld2lzZS4KKwkoY2xvc3VyZV90ZXN0X2ZuKTogU2lsZW5jZSB3YXJuaW5nIGFib3V0IHRoaXMgd2hlbiBpdCdzIG5vdCB1c2VkLgorCShtYWluKTogQWRkIHRoZSBuZXcgdGVzdHMuCisJKG1haW4pOiBGaXggYSBjb3VwbGUgb2Ygd3JvbmcgY2FzdHMgYW5kIHNpbGVuY2Ugc29tZSBjb21waWxlciB3YXJuaW5ncy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB4ODYtNjQgQUJJIGRlZmluaXRpb24uCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgeDg2LTY0IHN1cHBvcnQuCisJKiBjb25maWd1cmUuaW46IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCisyMDAyLTA2LTI0ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3R5cGVzLmM6IE1lcmdlIHNldHRpbmdzIGZvciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuCisJQWRkIHg4Ni02NCBzaXplcyBhbmQgYWxpZ25tZW50cy4KKworMjAwMi0wNi0yMyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcnMuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCisyMDAyLTA3LTE4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX01JUFNfTElOVVgpOiBOZXcuCisJKGxpYmZmaV9sYV9TT1VSQ0VTKTogU3VwcG9ydCBNSVBTX0xJTlVYLgorCShsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBjb25maWd1cmUuaW4gKG1pcHM2NCotKik6IFNraXAuCisJKG1pcHMqLSotbGludXgqKTogTmV3LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL21pcHMvZmZpLmM6IEluY2x1ZGUgPHNnaWRlZnMuaD4uCisKKzIwMDItMDYtMDYgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TOiBTYXZlL3Jlc3RvcmUgJXI2LiAgQWRkIERXQVJGLTIgdW53aW5kIGluZm8uCisKKzIwMDItMDUtMjcgIFJvZ2VyIFNheWxlICA8cm9nZXJAZXllc29wZW4uY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHJlZmVyZW5jZSB0byBhdm4uCisKKzIwMDItMDUtMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBhbmQKKwlmaXggZm9ybWF0dGluZy4KKworMjAwMi0wNS0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWNsYXJlIGZkIGF0CisJYmVnaW5uaW5nIG9mIGZ1bmN0aW9uIChmb3Igb2xkZXIgYXBwbGUgY2MpLgorCisyMDAyLTA1LTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUHJlc2VydmUgTEQgYXQKKwlzY3JpcHQgZW50cnksIGFuZCBzZXQgTEQgdG8gaXQgd2hlbiBjb25maWd1cmluZyBtdWx0aWxpYnMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDUtMDUgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmM2NC0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgorCShzcGFyYy0qLW5ldGJzZGVsZiopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0yOCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluLCBjb25maWd1cmU6IEZpeCBTUEFSQyB0ZXN0IGluIHByZXZpb3VzIGNoYW5nZS4KKworMjAwMi0wNC0yOSAgR2VyaGFyZCBUb25uICA8R2VyaGFyZFRvbm5Ac3dvbC5kZT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBzcmMvczM5MC9mZmkuYzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisJKiBzcmMvczM5MC9zeXN2LlM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgorCisyMDAyLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChIQVZFX0FTX1NQQVJDX1VBX1BDUkVMKTogQ2hlY2sgZm9yIHdvcmtpbmcKKwklcl9kaXNwMzIoKS4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wNC0wOCAgSGFucyBCb2VobSAgPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogSGFuZGxlIEZGSV9UWVBFX0RPVUJMRQorCWNvcnJlY3RseS4KKwkqIHNyYy9pYTY0L3VuaXguUzogQWRkIHVud2luZCBpbmZvcm1hdGlvbi4gRml4IGNvbW1lbnRzLgorCVNhdmUgc3AgaW4gYSB3YXkgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCB1bndpbmQgaW5mby4KKwkoZmZpX2NhbGxfdW5peCk6IENvcnJlY3RseSByZXN0b3JlIHNwIGluIGFsbCBjYXNlcy4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBBZGQsIGZpeCBjb21tZW50cy4KKworMjAwMi0wNC0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TOiBNYWtlIC5laF9mcmFtZSBkZXBlbmRlbnQgb24gdGFyZ2V0IHdvcmQgc2l6ZS4KKworMjAwMi0wNC0wNiAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KKworCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0wNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBzcmMvc3BhcmMvdjguUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCisyMDAyLTAzLTMwICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGkqODYtKi1uZXRic2RlbGYqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTI5ICBEYXZpZCBCaWxsaW5naHVyc3QgPERhdmlkLkJpbGxpbmdodXJzdEByaW90aW50by5jb20+CisKKwlQUiBvdGhlci8yNjIwCisJKiBzcmMvbWlwcy9uMzIuczogRGVsZXRlCisJKiBzcmMvbWlwcy9vMzIuczogRGVsZXRlCisKKzIwMDItMDMtMjEgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGFscGhhKi0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CisKKwkqIE1ha2VmaWxlLmFtOiBsaWJmZmljb252ZW5pZW5jZSAtPiBsaWJmZmlfY29udmVuaWVuY2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IERlZmluZSBmZml0ZXN0X09CSkVDVFMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMi0wMy0wNyAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggY2xvc3VyZSBmaWxlcy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEFkZCBhaXhfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUENfREFSV0lOKTogQWRkIGRhcndpbl9jbG9zdXJlLlMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBBSVggYW5kIERhcndpbiBjbG9zdXJlIGRlZmluaXRpb25zLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgorCShmbHVzaF9pY2FjaGUsIGZsdXNoX3JhbmdlKTogTmV3IGZ1bmN0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTmV3IGZpbGUuCisKKzIwMDItMDItMjQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHR5cGVkZWYgZm9yIGZmaV9hcmcuCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogRGVjbGFyZSByaW50IHdpdGggZmZpX2FyZy4KKworMjAwMi0wMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFNraXAgYXBwcm9wcmlhdGUKKwludW1iZXIgb2YgR1BScyBmb3IgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLgorCisyMDAyLTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBSZXBsYWNlIENIRUNLX1NJWkVPRiBhbmQgZW5kaWFuIHRlc3RzIHdpdGgKKwljcm9zcy1jb21waWxlciBmcmllbmRseSBtYWNyb3MuCisJKiBhY2xvY2FsLm00IChBQ19DT01QSUxFX0NIRUNLX1NJWkVPRiwgQUNfQ19CSUdFTkRJQU5fQ1JPU1MpOiBOZXcKKwltYWNyb3MuCisKKzIwMDItMDEtMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBOZXcuCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfREFSV0lOKTogTmV3LgorCisyMDAyLTAxLTE3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGZpbGVzLgorCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogTmV3LgorCShQT1dFUlBDX0FJWCk6IE5ldyBzdGFuemEuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIEFJWCBjYXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2FiaSk6IEFkZCBGRklfQUlYLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfc3RhdHVzKTogVXNlICJsb25nIiB0byBzY2FsZSBmcmFtZQorCXNpemUuICBGaXggImxvbmcgZG91YmxlIiBzdXBwb3J0LgorCShmZmlfY2FsbCk6IEFkZCBGRklfQUlYIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXguUzogTmV3LgorCisyMDAxLTEwLTA5ICBKb2huIEhvcm5rdmlzdCAgPGpvaG5AdG9hc3RlZG1hcnNobWFsbG93LmNvbT4KKworCUltcGxlbWVudCBEYXJ3aW4gUG93ZXJQQyBBQkkuCisJKiBjb25maWd1cmUuaW46IEhhbmRsZSBwb3dlcnBjLSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtOiBTZXQgc291cmNlIGZpbGVzIGZvciBQT1dFUlBDX0RBUldJTi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIEZGSV9EQVJXSU4gYW5kIEZGSV9ERUZBVUxUX0FCSSBmb3IKKwlQT1dFUlBDX0RBUldJTi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTmV3IGZpbGUuCisKKzIwMDEtMTAtMDcgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KKworCSogc3JjL3g4Ni9mZmkuYzogRml4IHNwZWxsaW5nIGVycm9yIG9mICJzZXBhcmF0ZSIgYXMgInNlcGVyYXRlIi4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAuYmFsaWduIGRpcmVjdGl2ZS4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEF2b2lkIGdhcy1vbmx5IG1uZW1vbmljLgorCUZpeGVzIFBSIGJvb3RzdHJhcC8zNTYzLgorCisyMDAxLTA2LTI2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBVc2UgLnJkYXRhIGZvciBFQ09GRi4KKworMjAwMS0wNi0yNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIHNwYXJjKi1zdW4tKiBob3N0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAxLTA2LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TIChfX0ZSQU1FX0JFR0lOX18pOiBDb25kaXRpb25hbGl6ZSBmb3IgRUxGLgorCisyMDAxLTA2LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAwLTA1LTMxICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogRml4IEFDX0FSR19FTkFCTEUgdXNhZ2UuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDUtMDYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKworCSogY29uZmlndXJlLmluOiBSZW1vdmUgd2FybmluZyBhYm91dCBiZXRhIGNvZGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDQtMjUgIEhhbnMgQm9laG0gPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlM6IFJlc3RvcmUgc3RhY2sgcG9pbnRlciB3aGVuIHJldHVybmluZyBmcm9tCisJZmZpX2Nsb3N1cmVfVU5JWC4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisyMDAxLTA0LTE4ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUzogRGVsZXRlIHVubmVjZXNzYXJ5IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9mIGxvYzIKKwl0byBlbGltaW5hdGUgUkFXIERWLgorCisyMDAxLTA0LTEyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogTWFrZWZpbGUuYW06IE1ha2UgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMS0wMy0yOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogVXNlIGRpZmZlcmVudCBzeW50YXggZm9yIHN1YmRpcmVjdG9yeSBjcmVhdGlvbi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yNyAgSm9uIEJlbmlzdG9uICA8am9uQGJlbmlzdG9uLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IChXaW4zMiwgQ3lnV2luLCBNaW5nVykuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKworCSogc3JjL2ZmaXRlc3QuYzogRG9lc24ndCBydW4gc3RydWN0dXJlIHRlc3RzIGZvciBYODZfV0lOMzIgdGFyZ2V0cy4KKwkqIHNyYy90eXBlcy5jOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisKKwkqIHNyYy94ODYvd2luMzIuUzogTmV3IGZpbGUuIEJhc2VkIG9uIHN5c3YuUywgYnV0IHdpdGggRUgKKwlzdHVmZiByZW1vdmVkIGFuZCBtYWRlIHRvIHdvcmsgd2l0aCBDeWdXaW4ncyBnYXMuCisKKzIwMDEtMDMtMjYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWd1cmUuaW46IE1ha2UgdGFyZ2V0IHN1YmRpcmVjdG9yeSBpbiBidWlsZCBkaXIuCisJKiBNYWtlZmlsZS5hbTogT3ZlcnJpZGUgc3VmZml4IGJhc2VkIHJ1bGVzIHRvIHNwZWNpZnkgY29ycmVjdCBvdXRwdXQKKwlzdWJkaXJlY3RvcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yMyAgS2V2aW4gQiBIZW5kcmlja3MgIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4ZWQgQUJJIGNvbXBhdGliaWxpdHkgYnVnCisJaW52b2x2aW5nIGxvbmcgbG9uZyBhbmQgcmVnaXN0ZXIgcGFpcnMuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCisJKGZsdXNoX2ljYWNoZSk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0NMT1NVUkVTKTogRGVmaW5lIG9uIFBQQy4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KKworMjAwMS0wMy0xOSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChmZml0ZXN0X0xERkxBR1MpOiBOZXcgbWFjcm8uCisKKzIwMDEtMDMtMDIgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9mZml0ZXN0LmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3ByZXBfY2lmLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3R5cGVzLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FscGhhL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hbHBoYS9vc2YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL24zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL28zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjguUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjkuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy94ODYvc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKworMjAwMS0wMi0wOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugc291cmNld2FyZS5jeWdudXMuY29tIHJlZmVyZW5jZXMgdG8KKwlnY2MuZ251Lm9yZy4KKworMjAwMC0xMi0wOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfY2FsbCk6IFNpbXBsaWZ5IHN0cnVjdCByZXR1cm4gdGVzdC4KKwkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogSW5kZXggcmF0aGVyIHRoYW4gaW5jcmVtZW50IGF2YWx1ZQorCWFuZCBhcmdfdHlwZXMuICBHaXZlIGZmaV9jbG9zdXJlX29zZiB0aGUgcmF3IHJldHVybiB2YWx1ZSB0eXBlLgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBIYW5kbGUgcmV0dXJuIHZhbHVlIHR5cGUKKwlwcm9tb3Rpb24uCisKKzIwMDAtMTItMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeCB0eXBvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gW0FMUEhBXTogRGVmaW5lIEZGSV9DTE9TVVJFUyBhbmQKKwlGRklfVFJBTVBPTElORV9TSVpFLgorCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkanVzdCBtaW5pbWFsCisJY2lmLT5ieXRlcyBmb3IgbmV3IGZmaV9jYWxsX29zZiBpbXBsZW1lbnRhdGlvbi4KKwkoZmZpX3ByZXBfYXJncyk6IEFic29yYiBpbnRvIC4uLgorCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgRG8gYWxsIHN0YWNrIGFsbG9jYXRpb24gaGVyZSBhbmQKKwlhdm9pZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBOZXcuCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFJlaW1wbGVtZW50IHdpdGggbm8gY2FsbGJhY2suCisJKGZmaV9jbG9zdXJlX29zZik6IE5ldy4KKworMjAwMC0wOS0xMCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgaW5zdGFsbC1zaDogUmVtb3ZlZC4KKwkqIGx0Y29uZmlnLCBsdG1haW4uc2gsIG1pc3NpbmcsIG1raW5zdGFsbGRpcnM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGFjaW5jbHVkZS5tNDogSW5jbHVkZSBsaWJ0b29sIG1hY3JvcyBmcm9tIHRoZSB0b3AgbGV2ZWwuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDAtMDgtMjIgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gW2kqODYtKi1mcmVlYnNkKl0gKFRBUkdFVCwgVEFSR0VURElSKTogU2V0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAwLTA1LTExICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworCSogbGliZmZpL3NyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG91YmxlcyBhcmUgbm90IHNhdmVkIHRvCisJbWVtb3J5IGNvcnJlY3RseS4gIFVzZSBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vdCBicmFuY2hlcyB3aGVyZQorCXBvc3NpYmxlLgorCisyMDAwLTA1LTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogTWF0Y2ggYGFybSotKi1saW51eC0qJy4KKwlGcm9tIENocmlzIERvcm5hbiA8Y2Rvcm5hbkBhcm0uY29tPi4KKworMjAwMC0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogRGVmaW5lLgorCShBTV9NQUtFRkxBR1MpOiBMaWtld2lzZS4KKwkoTXVsdGlsaWIgc3VwcG9ydC4pOiBBZGQgc2VjdGlvbi4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogbHRjb25maWcgKGV4dHJhX2NvbXBpbGVyX2ZsYWdzLCBleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSk6CisJTmV3IHZhcmlhYmxlcy4gU2V0IGZvciBnY2MgdXNpbmcgLXByaW50LW11bHRpLWxpYi4gRXhwb3J0IHRoZW0KKwl0byBsaWJ0b29sLgorCShzcGFyYzY0LSotbGludXgtZ251Kik6IFVzZSBsaWJzdWZmIDY0IGZvciBzZWFyY2ggcGF0aHMuCisJKiBsdG1haW4uc2ggKEJ8YnxWKTogRG9uJ3QgdGhyb3cgYXdheSBnY2MncyAtQiwgLWIgYW5kIC1WIG9wdGlvbnMKKwlmb3IgLXNoYXJlZCBsaW5rcy4KKwkoZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzKTogQ2hlY2sgdGhlc2UKKwlmb3IgZXh0cmEgY29tcGlsZXIgb3B0aW9ucyB3aGljaCBuZWVkIHRvIGJlIHBhc3NlZCBkb3duIGluCisJY29tcGlsZXJfZmxhZ3MuCisKKzIwMDAtMDQtMTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSBpKjg2LXBjLWxpbnV4KiB0byBpKjg2LSotbGludXgqLgorCisyMDAwLTA0LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoU1BBUkM2NCk6IERlZmluZSBmb3IgNjRiaXQgU1BBUkMgYnVpbGRzLgorCVNldCBTUEFSQyBGRklfREVGQVVMVF9BQkkgYmFzZWQgb24gU1BBUkM2NCBkZWZpbmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBSZW5hbWVkIGZyb20gZmZpX3ByZXBfYXJncy4KKwlSZXBsYWNlIGFsbCB2b2lkICogc2l6ZW9mcyB3aXRoIHNpemVvZihpbnQpLgorCU9ubHkgY29tcGFyZSB0eXBlIHdpdGggRkZJX1RZUEVfTE9OR0RPVUJMRSBpZiBMT05HRE9VQkxFIGlzCisJZGlmZmVyZW50IHRoYW4gRE9VQkxFLgorCVJlbW92ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcyAoaGFuZGxlZCBlbHNld2hlcmUpLgorCShmZmlfcHJlcF9hcmdzX3Y5KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBWOSBBQkkgYW5kIGxvbmcgbG9uZyBvbiBWOC4KKwkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9WOSBBQkkgZnJvbSA2NGJpdCBjb2RlIGFuZCBGRklfVjggQUJJIGZyb20KKwkzMmJpdCBjb2RlIChub3QgeWV0IGNyb3NzLWFyY2ggY2FsbHMpLgorCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCBzdHJ1Y3QgcmV0dXJuIGRlbGF5IG5vcC4KKwlIYW5kbGUgbG9uZyBsb25nLgorCSogc3JjL3NwYXJjL3Y5LlM6IE5ldyBmaWxlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlcgorCWlzIHVzZWQgb24gc3BhcmM2NCBvbmx5IGZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIDMyIGJ5dGVzLgorCVBhc3MgYnkgcmVmZXJlbmNlIGZvciBzdHJ1Y3R1cmVzIGlzIGRvbmUgZm9yIHN0cnVjdHVyZSBhcmd1bWVudHMKKwlsYXJnZXIgdGhhbiAxNiBieXRlcy4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2UgNjRiaXQgcmludCBvbiBzcGFyYzY0LgorCVJ1biBsb25nIGxvbmcgdGVzdHMgb24gc3BhcmMuCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFBvaW50ZXIgaXMgNjRiaXQgb24gYWxwaGEgYW5kCisJc3BhcmM2NC4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IGxvbmcgZG91YmxlIGlzIDEyOCBiaXQgYWxpZ25lZCB0byAxMjggYml0cworCW9uIHNwYXJjNjQuCisJKiBjb25maWd1cmUuaW4gKHNwYXJjLSotbGludXgqKTogTmV3IHN1cHBvcnRlZCB0YXJnZXQuCisJKHNwYXJjNjQtKi1saW51eCopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgdjkuUyB0byBTUEFSQyBmaWxlcy4KKwkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkoTElOSyk6IFN1cnJvdW5kICQoQ0NMRCkgaW50byBkb3VibGUgcXVvdGVzLCBzbyB0aGF0IG11bHRpbGliCisJY29tcGlsZXMgd29yayBjb3JyZWN0bHkuCisKKzIwMDAtMDQtMDQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IChpKjg2LSotc29sYXJpcyopOiBOZXcgbGliZmZpIHRhcmdldC4gUGF0Y2gKKwlwcm9wb3NlZCBieSBCcnljZSBNY0tpbmxheS4KKworMjAwMC0wMy0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogSGFuZCBlZGl0IGZvciBqYXZhX3Jhd19hcGkubG8uCisKKzIwMDAtMDMtMDggIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IFVwZGF0ZSBmcm9tIHRoZSBnY2MgdHJlZS4KKwlGaXggZm9yIFBSIGxpYmdjai8xNjguCisKKzIwMDAtMDMtMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IEZpeGVkIGlhNjQgYnkgaGFuZC4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1tdWx0aWxpYik6IE5ldyBvcHRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogTmV3IHN1YnN0LgorCShBQ19PVVRQVVQpOiBBZGRlZCBtdWx0aWxpYiBjb2RlLgorCisyMDAwLTAzLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IFVzZSBgaWE2NCcsIG5vdCBgYWxwaGEnLCBhcworCWRpcmVjdG9yeSBuYW1lLgorCisyMDAwLTAyLTI1ICBIYW5zIEJvZWhtIDxib2VobUBhY20ub3JnPgorCisJKiBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC91bml4LlM6IE5ldworCWZpbGVzLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4ZWQgdHlwbyBpbiBhcmd1bWVudAorCWxpc3QuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogVXNlIGZmaV90cmFuc2xhdGVfYXJncywgbm90CisJZmZpX2Nsb3N1cmVfdHJhbnNsYXRlLgorCSogc3JjL2phdmFfcmF3X2FwaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IERlZmluZSBgcmludCcgYXMgbG9uZyBsb25nIG9uIElBNjQuICBBZGRlZCBuZXcgdGVzdCB3aGVuCisJRkZJX0NMT1NVUkVTIGlzIGRlZmluZWQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChBTElHTik6IFVzZSBzaXplX3QsIG5vdCB1bnNpZ25lZC4KKwkoZmZpX2FiaSk6IFJlY29nbml6ZSBJQTY0LgorCShmZmlfcmF3KTogQWRkZWQgYGZsdCcgZmllbGQuCisJQWRkZWQgIkphdmEgcmF3IEFQSSIgY29kZS4KKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlhNjQuCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogTmV3IG1hY3JvLgorCShsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCBqYXZhX3Jhd19hcGkuYy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBEZWZpbmUgaW4gSUE2NCBjYXNlLgorCisyMDAwLTAxLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IHdpdGggbmV3ZXIgYXV0b21ha2UuCisKKzE5OTktMTItMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkZWQgLUkkKHRvcF9zcmNkaXIpL3NyYy4KKworMTk5OS0wOS0wMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmVkIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5lcyBhbmQKKwl1bmRlZnMuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogUGFzcyAzcmQgYXJndW1lbnQgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKwlVc2UgQU1fUFJPR19MSUJUT09MIChhdXRvbWFrZSAxLjQgY29tcGF0aWJpbGl0eSkuCisJKiBhY2NvbmZpZy5oOiBEb24ndCAjdW5kZWYgUEFDS0FHRSBvciBWRVJTSU9OLgorCisxOTk5LTA4LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogVHJ5IHRvIHdvcmsgYXJvdW5kIG1lc3N5IGhlYWRlciBwcm9ibGVtCisJd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OLgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSB2ZXJzaW9uIHRvIDIuMDAtYmV0YS4KKworCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBhY2NvbmZpZy5oIChGRklfTk9fU1RSVUNUUywgRkZJX05PX1JBV19BUEkpOiBEZWZpbmUuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9yYXdfY2FsbCk6IFJlbmFtZS4KKworMTk5OS0wOC0wMiAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgPGtyYWJAZG9taW5pcS5pcy5zLnUtdG9reW8uYWMuanA+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IERpdHRvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRGl0dG8uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTW9yZSBkaXR0by4KKwkoZmZpX2NhbGxfcmF3KTogRmluYWwgZGl0dG8uCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBkZWZpbml0aW9ucyBmb3IgY2xvc3VyZSBhbmQgcmF3IEFQSS4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGRlZCBjYXNlIGZvcgorCUZGSV9UWVBFX1VJTlQ2NC4KKworCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIHJhd19hcGkuYworCisJKiBzcmMvcmF3X2FwaS5jOiBOZXcgZmlsZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3Jhdyk6IE5ldyB0eXBlLgorCShVSU5UX0FSRywgU0lOVF9BUkcpOiBOZXcgZGVmaW5lcy4KKwkoZmZpX2Nsb3N1cmUsIGZmaV9yYXdfY2xvc3VyZSk6IE5ldyB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBOZXcgZGVjbGFyYXRpb25zLgorCisJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgZW5kaWFubmVzcyBhbmQgc2l6ZW9mIHZvaWQqLgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENhbGwgZml4dXAgcm91dGluZSB2aWEgYXJndW1lbnQsCisJaW5zdGVhZCBvZiBkaXJlY3RseS4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUaHUgSnVsICA4IDE0OjI4OjQyIDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB4ODYgYW5kIHBvd2VycGMgQmVPUyBjb25maWd1cmF0aW9ucy4KKwlGcm9tIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4uCisKKzE5OTktMDUtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB3YXJuaW5nIGFib3V0IHRoaXMgYmVpbmcgYmV0YSBjb2RlLgorCVJlbW92ZSBzcmMvTWFrZWZpbGUuYW0gZnJvbSB0aGUgcGljdHVyZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IE1vdmUgbG9naWMgZnJvbSBzcmMvTWFrZWZpbGUuYW0uICBBZGQgY2hhbmdlcworCXRvIHN1cHBvcnQgbGliZmZpIGFzIGEgdGFyZ2V0IGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgorCVVwZ3JhZGVkIHRvIG5ldyBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wuCisKKwkqIFJFQURNRTogVHdlYWtzLgorCisJKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisKKwkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL01ha2VmaWxlLmluOiBSZW1vdmVkLgorCisxOTk4LTExLTI5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL21pcHMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL3NwYXJjL0NoYW5nZUxvZzogUmVtYm92ZWQuCisJKiBzcmMveDg2L0NoYW5nZUxvZzogUmVtb3ZlZC4KKworCSogQ2hhbmdlTG9nLnYxOiBDcmVhdGVkLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmkKQEAgLTAsMCArMSw2MTMgQEAKKzIwMTAtMDEtMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IEFkZCBub3RlcyBvbiBidWlsZGluZyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorCisyMDEwLTAxLTE1ICBEYW5pZWwgV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIG1zdmNjLnNoOiBOZXcgZmlsZS4KKworCSogc3JjL3g4Ni93aW4zMi5TOiBQb3J0IGFzc2VtYmx5IHJvdXRpbmVzIHRvIE1TVkMgYW5kICNpZmRlZi4KKwkqIHNyYy94ODYvZmZpLmM6IFR3ZWFrIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgZXhjZXNzCisJcGFyZW5zLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIF9fZGVjbHNwZWMoYWxpZ24oOCkpIHRvIHR5cGVkZWYgc3RydWN0CisJZmZpX2Nsb3N1cmUuCisKKwkqIHNyYy94ODYvZmZpLmM6IE1lcmdlIGZmaV9jYWxsX1NZU1YgYW5kIGZmaV9jYWxsX1NURENBTEwgaW50byBuZXcKKwlmdW5jdGlvbiBmZmlfY2FsbF93aW4zMiBvbiBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgdG8gZmZpX2NhbGxfd2luMzIuCisJKGZmaV9jYWxsX1NURENBTEwpOiBSZW1vdmUuCisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gY29kZQorCXRvIGZmaV9wcmVwX2NpZl9tYWNoZGVwIGZvciB4ODYuCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFRvIGhlcmUuCisKKzIwMTAtMDEtMTUgIE9saXZlciBLaWRkbGUgIDxva2lkZGxlQHlhaG9vLmNvLnVrPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQ2hlY2sgZm9yIF9faTM4NiBhbmQgX19hbWQ2NCBmb3IKKwlTdW4gU3R1ZGlvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuIAorCisyMDEwLTAxLTEyICBDb25yYWQgSXJ3aW4gPGNvbnJhZC5pcndpbkBnbWFpbC5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aTogQWRkIGNsb3N1cmUgZXhhbXBsZS4KKwkqIGRvYy9saWJmZmkuaW5mbzogUmVidWlsdC4KKworMjAwOS0xMi0yNSAgU2FtdWxpIFN1b21pbmVuICA8c3N1b21pbmVuQGdlbnRvby5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogVW5kZWZpbmUgX0FDX0FSR19WQVJfUFJFQ0lPVVMgZm9yIGF1dG9jb25mIDIuNjQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IEFkIHg4NiBYRkFJTHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IEZpeCBkZy1leGNlc3MtZXJyb3JzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgorCisyMDA5LTA2LTExICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIE1ha2VmaWxlLmFtLAorICAgICAgICBjb25maWd1cmUuYWMsCisgICAgICAgIGluY2x1ZGUvZmZpLmguaW4sCisgICAgICAgIGluY2x1ZGUvZmZpX2NvbW1vbi5oLAorICAgICAgICBzcmMvY2xvc3VyZXMuYywKKyAgICAgICAgc3JjL2RsbWFsbG9jLmMsCisgICAgICAgIHNyYy94ODYvZmZpLmMsCisgICAgICAgIHNyYy94ODYvZmZpdGFyZ2V0LmgsCisgICAgICAgIHNyYy94ODYvd2luNjQuUyAobmV3KSwKKwlSRUFETUU6IEFkZGVkIHdpbjY0IHN1cHBvcnQgKG1pbmd3IG9yIE1TVkMpCisgICAgICAgICogTWFrZWZpbGUuaW4sCisgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUuaW4sCisgICAgICAgIG1hbi9NYWtlZmlsZS5pbiwKKyAgICAgICAgdGVzdHN1aXRlL01ha2VmaWxlLmluLAorICAgICAgICBjb25maWd1cmUsCisgICAgICAgIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkCisgICAgICAgICogbHRjZi1jLnNoOiBwcm9wZXJseSBlc2NhcGUgY3lnd2luL3czMiBwYXRoCisgICAgICAgICogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KKyAgICAgICAgKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCBmaWxlbmFtZSBpbiBjb21tZW50LgorICAgICAgICAqIHNyYy94ODYvd2luMzIuUzogUmVtb3ZlIHVudXNlZCBleHRlcm4uCisKKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogdXNlIGZmaV9jbG9zdXJlX2FsbG9jIGluc3RlYWQKKyAgICAgICAgb2YgY2hlY2tpbmcgZm9yIE1NQVAuICBVc2UgaW50cHRyX3QgaW5zdGVhZCBvZiBsb25nIGNhc3RzLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEZpeCBtaXNhcHBsaWVkIG1lcmdlIGZyb20gZ2NjLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvbjMyLlM6IEZpeCBsaWNlbmNlIGZvcm1hdHRpbmcuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2Rhcndpbi5TOiBGaXggbGljZW5jZSBmb3JtYXR0aW5nLgorCXNyYy94ODYvd2luMzIuUzogTGlrZXdpc2UuCisJc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKwlzcmMvc2gvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zaDY0L2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiAgV2FzIG1pc3NpbmcgZnJvbSBtZXJnZQorCW9mIEFuZHJlYXMgVG9ibGVyJ3MgcGF0Y2ggZnJvbSAyMDA2LTA0LTIyLgorCQorMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zaC9mZmkuYzogQXBwbHkgbWlzc2luZyBodW5rIGZyb20gQWxleGFuZHJlIE9saXZhJ3MgcGF0Y2ggb2YKKwkyMDA3LTAzLTA3LgorCisyMDA4LTEyLTI2ICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IG1hcmsgZXhwZWN0ZWQKKyAgICAgICAgZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKworMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCisgICAgICAgIHBvaW50ZXIgdG8gaW50ZWdlciAoaW50cHRyX3QpLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBkaXNhYmxlIGZvciB3aW42NC4KKwkKKzIwMDgtMTItMTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuOC4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTExLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjcuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KKwlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKKwlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgorCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTA3LTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IENsZWFuIHVwIGZhaWx1cmVzIGZyb20KKwljb21waWxlciB3YXJuaW5ncy4KKworMjAwOC0wNy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC42LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uICBBZGQgZG9jdW1lbnRhdGlvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUdXJuIElOU04gaW50byBhbiB1bnNpZ25lZAorCWludC4KKworMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTA0LTAzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogbGliZmZpLnBjLmluIChMaWJzKTogQWRkIC1MJHtsaWJkaXJ9LgorCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjUuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wNC0wMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIFhlcmNlcyBSYW5ieSAgPHhlcnhlc0B6YWZlbmEuc2U+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFdyYXAgZGVmaW5pdGlvbiBvZiB0YXJnZXQgYXJjaGl0ZWN0dXJlIHRvCisJcHJvdGVjdCBmcm9tIGRvdWJsZSBkZWZpbml0aW9ucy4KKworMjAwOC0wMy0yMiAgTW9yaXlvc2hpIEtvaXp1bWkgIDxtb3JpeW9zaGlAZ21haWwuY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBmb3IgYnVnIHJldmVhbGVkIGluCisJY2xvc3VyZV9sb2NfZm4wLmMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgKGNsb3N1cmVfbG9jX3Rlc3RfZm4wKToKKwlOZXcgdGVzdC4KKworMjAwOC0wMy0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIEJsYWtlIENoYWZmaW4KKwkgICAgaG9zQHRhbWFuZWdpLm9yZworCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IE5ldyB0ZXN0cyBmcm9tIEFwcGxlLgorCisyMDA4LTAyLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICAgICAgICAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgICAgICAgICAgVGhvbWFzIEhlbGxlciAgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IENoYW5nZSBDKysgY29tbWVudCB0byBDCisJY29tbWVudC4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5vcmc+CisgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5vcmc+CisgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMvYWxwaGEvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCXNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9mZmkuYywgc3JjL2Zydi9mZmkuYywgc3JjL2lhNjQvZmZpLmMsCisJc3JjL2lhNjQvdW5peC5TLCBzcmMvamF2YV9yYXdfYXBpLmMsIHNyYy9tMzJyL2ZmaS5jLAorCXNyYy9taXBzL2ZmaS5jLCBzcmMvcGEvZmZpLmMsIHNyYy9wYS9ocHV4MzIuUywgc3JjL3BhL2xpbnV4LlMsCisJc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3Jhd19hcGkuYywKKwlzcmMvczM5MC9mZmkuYywgc3JjL3NoL2ZmaS5jLCBzcmMvc2g2NC9mZmkuYywgc3JjL3NwYXJjL2ZmaS5jLAorCXNyYy94ODYvZmZpLmMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvZGFyd2luNjQuUywKKwlzcmMveDg2L2ZmaTY0LmM6IERpdHRvLgorCisyMDA4LTAyLTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBY2NlcHQgb3BlbmJzZCosIG5vdCBqdXN0IG9wZW5ic2QuCisJQnVtcCB2ZXJzaW9uIHRvIDMuMC40LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMDItMjIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IENsZWFuIHVwIGxpc3Qgb2YgdGVzdGVkIHBsYXRmb3Jtcy4KKworMjAwOC0wMi0yMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4zLgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuICBDbGVhbiB1cCB0ZXN0IGRvY3MuCisKKzIwMDgtMDItMjIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMi0yMiAgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB4ODYgT3BlbkJTRCBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA4LTAyLTIxICBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIFJFQURNRTogQ2hhbmdlICJtYWtlIHRlc3QiIHRvICJtYWtlIGNoZWNrIi4KKworMjAwOC0wMi0yMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4yLgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMDItMjEgIEJqw7ZybiBLw7ZuaWcgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4NiBGcmVlQlNEIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5hbTogRGl0dG8uCisKKzIwMDgtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMS4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTAyLTE1ICBEYXZpZCBEYW5leQkgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYzogUmVtb3ZlIGV4dHJhICc+JyBmcm9tIGluY2x1ZGUgZGlyZWN0aXZlLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBjbGVhcl9sb2NhdGlvbiBpbnN0ZWFkIG9mIHRyYW1wLgorCisyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjAuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5CSA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisJRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KKworMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKyAgICAgICAgKiBtYW4vZmZpX2NhbGwuMywgbWFuL2ZmaV9wcmVwX2NpZi4zLCBtYW4vZmZpLjM6CisJVXBkYXRlIGRhdGVzIGFuZCByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZmZpX3ByZXBfY2xvc3VyZS4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuOS4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIG1hbi9mZmlfcHJlcF9jbG9zdXJlLjM6IERlbGV0ZS4KKwkqIG1hbi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBmZmlfcHJlcF9jbG9zdXJlLjMuCisJKG1hbl9NQU5TKTogRGl0dG8uCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjguCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjcuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIExJQ0VOU0Ugc3JjL2RlYnVnLmMgc3JjL2Nsb3N1cmVzLmMKKyAgICAgICAgICBzcmMvZmZpdGVzdC5jIHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy90eXBlcy5jIHNyYy9tNjhrL2ZmaXRhcmdldC5oIHNyYy9yYXdfYXBpLmMgc3JjL2Zydi9mZmkuYworICAgICAgICAgIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL3NoL2ZmaS5jIHNyYy9zaC9zeXN2LlMKKyAgICAgICAgICBzcmMvc2gvZmZpdGFyZ2V0Lmggc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmggc3JjL3BhL2ZmaS5jCisgICAgICAgICAgc3JjL3BhL2ZmaXRhcmdldC5oIHNyYy9wYS9saW51eC5TIHNyYy9qYXZhX3Jhd19hcGkuYworICAgICAgICAgIHNyYy9jcmlzL2ZmaXRhcmdldC5oIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKKyAgICAgICAgICBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L2ZmaXRhcmdldC5oCisgICAgICAgICAgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luLlMgc3JjL2lhNjQvZmZpLmMKKyAgICAgICAgICBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggc3JjL2lhNjQvdW5peC5TCisgICAgICAgICAgc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OS5TIHNyYy9zcGFyYy9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy9zcGFyYy92OC5TIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgKKyAgICAgICAgICBzcmMvYWxwaGEvb3NmLlMgc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TCisgICAgICAgICAgc3JjL3NoNjQvZmZpdGFyZ2V0Lmggc3JjL21pcHMvZmZpLmMgc3JjL21pcHMvZmZpdGFyZ2V0LmgKKyAgICAgICAgICBzcmMvbWlwcy9uMzIuUyBzcmMvbWlwcy9vMzIuUyBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCisgICAgICAgICAgc3JjL2FybS9mZml0YXJnZXQuaCBzcmMvcHJlcF9jaWYuYzogVXBkYXRlIGxpY2Vuc2UgdGV4dC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlIHRlc3RlZCBwbGF0Zm9ybXMuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjYuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBkYXJ3aW42NC5TCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmVtb3ZlIGxpYnN0ZGMrKyBiaXRzIGZyb20gR0NDIHRyZWUuCisJKiBMSUNFTlNFOiBVcGRhdGUgV0FSUkFOVFkuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBsaWJmZmkucGMuaW4gKGxpYmRpcik6IEZpeCBsaWJkaXIgZGVmaW5pdGlvbi4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlLgorCSogbGliZmZpLmluZm86IE5ldyBmaWxlLgorCSogZG9jL3N0YW1wLXZ0aTogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBtYW4gZGlyLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IENyZWF0ZSBNYWtlZmlsZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICAgICAgKiBtYW4vZmZpX2NhbGwuMyBtYW4vZmZpX3ByZXBfY2lmLjMgbWFuL2ZmaV9wcmVwX2Nsb3N1cmUuMworICAgICAgICAgIG1hbi9NYWtlZmlsZS5hbSBtYW4vTWFrZWZpbGUuaW46IE5ldyBmaWxlcy4KKworMjAwOC0wMi0xNCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIG1kYXRlLXNoLCB0ZXhpbmZvLnRleDogTmV3IGZpbGVzLgorCSogTWFrZWZpbGUuYW0gKGluZm9fVEVYSU5GT1MpOiBOZXcgdmFyaWFibGUuCisJKiBkb2MvbGliZmZpLnRleGk6IE5ldyBmaWxlLgorCSogZG9jL3ZlcnNpb24udGV4aTogTGlrZXdpc2UuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogRG9uJ3QgY29tcGlsZSB3aXRoIC1EJChUQVJHRVQpLgorCShsaWJfTFRMSUJSQVJJRVMpOiBEZWZpbmUuCisJKHRvb2xleGVjbGliX0xJQlJBUklFUyk6IFVuZGVmaW5lLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IFJlc2V0IHZlcnNpb24gdG8gMi45OS4xLgorCSogY29uZmlndXJlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogbGliZmZpLnBjLmluOiBVc2UgQFBBQ0tBR0VfTkFNRUAgYW5kIEBQQUNLQUdFX1ZFUlNJT05ALgorCSogY29uZmlndXJlLmFjOiBSZXNldCB2ZXJzaW9uIHRvIDIuOTkuMS4KKwkqIGNvbmZpZ3VyZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIENoYW5nZUxvZy5saWJmZmkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpOiBEZWZpbmUuICBEb24ndAorCWRpc3RyaWJ1dGUgZmZpdGFyZ2V0Lmggb3IgZmZpLmggZnJvbSB0aGUgYnVpbGQgaW5jbHVkZSBkaXIuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKGluY2x1ZGVzZGlyKTogSW5zdGFsbCBoZWFkZXJzIHVuZGVyIGxpYmRpci4KKwkocGtnY29uZmlnZGlyKTogRGVmaW5lLiBJbnN0YWxsIGxpYmZmaS5wYy4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBsaWJmZmkucGMuaW46IENyZWF0ZS4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IENVUlJFTlQKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGxpYmZmaS5wYy5pbgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA4LTAyLTAzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAoaW5jbHVkZXNkaXIpOiBGaXggaGVhZGVyIGluc3RhbGwgd2l0aAorCURFU1RESVIuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgorICAgICAgICAgIG9mZnNldCBiYXNlZCBvbiBjb2RlIHBvaW50ZXIsIG5vdCBkYXRhIHBvaW50ZXIuCisKKzIwMDgtMDItMDEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBGaXggaGVhZGVyIGluc3RhbGxzLgorCSogTWFrZWZpbGUuYW06IERpdHRvLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKworMjAwOC0wMi0wMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCwKKwlGRklfSU5JVF9UUkFNUE9MSU5FKTogUmV2ZXJ0IG15IGJyb2tlbiBjaGFuZ2VzIHRvIHR3YWxsJ3MgbGFzdAorCXBhdGNoLgorCisyMDA4LTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyBmaWxlcy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogRGl0dG8uCisJKiBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAxLTMxICBUaW1vdGh5IFdhbGwgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBBZGQgdGVzdCBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogSW5jcmVhc2Ugc2l6ZSBvZiB0cmFtcG9saW5lIGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L3dpbjMyLlM6IEFkZCBhc3NlbWJseSBmb3Igc3RkY2FsbCBjbG9zdXJlLgorCSogc3JjL3g4Ni9mZmkuYzogSW5pdGlhbGl6ZSBzdGRjYWxsIGNsb3N1cmUgdHJhbXBvbGluZS4KKworMjAwOC0wMS0zMCAgSC5KLiBMdSA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiBsaWJmZmkvMzQ2MTIKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogUG9wIDQgYnl0ZSBmcm9tIHN0YWNrIHdoZW4KKwlyZXR1cm5pbmcgc3RydWN0LgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkZCAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIgorCXRlc3RzLgorCisyMDA4LTAxLTMwICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0sIGluY2x1ZGUvTWFrZWZpbGUuYW06IE1vdmUgaGVhZGVycyB0bworCWxpYmZmaV9sYV9TT1VSQ0VTIGZvciBuZXcgYXV0b21ha2UuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkKKwkqIHRlc3RzdWl0ZS9saWIvd3JhcHBlci5leHA6IENvcGllZCBmcm9tIGdjYyB0cmVlIHRvIGFsbG93IGZvciAKKwlleGVjdXRpb24gb3V0c2lkZSBvZiBnY2MgdHJlZS4KKwkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwOiBEaXR0by4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYW55IGNoYW5nZXMgdG8gYWxsb3cgZm9yIGV4ZWN1dGlvbgorCW91dHNpZGUgb2YgZ2NjIHRyZWUuCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmdjaiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmdjagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVkMDJmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZ2NqCkBAIC0wLDAgKzEsNDAgQEAKKzIwMDQtMDEtMTQgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIGluIEFDX1BSRVJFUSgyLjEzKQorCisyMDAzLTAyLTIwICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBQcm9wYWdhdGUgT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyB0bworCWNvbmZpZy5zdGF0dXMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCisJUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCisJKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCitNb24gQXVnICA5IDE4OjMzOjM4IDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQKKwkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2xpYmRpcik6IEFkZCAkKE1VTFRJU1VCRElSKSBldmVuIGZvciBuYXRpdmUKKwlidWlsZHMuCisJVXNlIFVTRV9MSUJESVIuCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbiAoVVNFX0xJQkRJUik6IERlZmluZSBmb3IgbmF0aXZlIGJ1aWxkcy4KKwlVc2UgbG93ZXJjYXNlIGluIGNvbmZpZ3VyZSAtLWhlbHAgZXhwbGFuYXRpb25zLgorCisxOTk5LTA4LTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0ZOKTogUmVtb3ZlIGAuLi4nLgorCisxOTk5LTA4LTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQ29tcGlsZSB3aXRoIC1mZXhjZXB0aW9ucy4KKworCSogc3JjL3g4Ni9zeXN2LlM6IEFkZCBleGNlcHRpb24gaGFuZGxpbmcgbWV0YWRhdGEuCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5ODIwYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxCkBAIC0wLDAgKzEsNzY0IEBACitUaGUgbGliZmZpIHZlcnNpb24gMSBDaGFuZ2VMb2cgYXJjaGl2ZS4KKworVmVyc2lvbiAxIG9mIGxpYmZmaSBoYWQgcGVyLWRpcmVjdG9yeSBDaGFuZ2VMb2dzLiAgQ3VycmVudCBhbmQgZnV0dXJlCit2ZXJzaW9ucyBoYXZlIGEgc2luZ2xlIENoYW5nZUxvZyBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4gIFRoZQordmVyc2lvbiAxIENoYW5nZUxvZ3MgaGF2ZSBhbGwgYmVlbiBjb25jYXRvbmF0ZWQgaW50byB0aGlzIGZpbGUgZm9yCitmdXR1cmUgcmVmZXJlbmNlIG9ubHkuCisKKy0tLSBsaWJmZmkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb24gT2N0ICA1IDAyOjE3OjUwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEJvb3N0ZWQgcmV2LgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIFJFQURNRTogQm9vc3RlZCByZXYgYW5kIHVwZGF0ZWQgcmVsZWFzZSBub3Rlcy4KKworTW9uIE9jdCAgNSAwMTowMzowMyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBCb29zdGVkIHJldi4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQ6IFJlYnVpbHQuCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IGFuZCB1cGRhdGVkIHJlbGVhc2Ugbm90ZXMuCisKKzE5OTgtMDctMjUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBtNjhrL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFVzZSBiaXRtYXNrIGZvciBjaWYtPmZsYWdzLgorCUNvcnJlY3RseSBoYW5kbGUgc21hbGwgc3RydWN0dXJlcy4KKwkoZmZpX3ByZXBfYXJncyk6IEFsc28gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMuCisJKGZmaV9jYWxsKTogUGFzcyBzaXplIG9mIHJldHVybiB0eXBlIHRvIGZmaV9jYWxsX1NZU1YuCisJKiBtNjhrL3N5c3YuUzogQWRqdXN0IGZvciBhYm92ZSBjaGFuZ2VzLiAgQ29ycmVjdGx5IGFsaWduIHNtYWxsCisJc3RydWN0dXJlcyBpbiB0aGUgcmV0dXJuIHZhbHVlLgorCisJKiB0eXBlcy5jICh1aW50NjQsIHNpbnQ2NCkgW002OEtdOiBDaGFuZ2UgYWxpZ25tZW50IHRvIDQuCisKK0ZyaSBBcHIgMTcgMTc6MjY6NTggMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQm9vc3RlZCByZXYuCisJKiBjb25maWd1cmUsTWFrZWZpbGUuaW4sYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIFJFQURNRTogQm9vc3RlZCByZXYgYW5kIGFkZGVkIHJlbGVhc2Ugbm90ZXMuCisKK1N1biBGZWIgMjIgMDA6NTA6NDEgMTk5OCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KKworCSogY29uZmlndXJlLmluOiBBZGQgUG93ZXJQQyBjb25maWcgYml0cy4KKworMTk5OC0wMi0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIG02OGsgY29uZmlnIGJpdHMuICBDaGFuZ2UgQUNfQ0FOT05JQ0FMX1NZU1RFTQorCXRvIEFDX0NBTk9OSUNBTF9IT1NULCB0aGlzIGlzIG5vdCBhIGNvbXBpbGVyLiAgVXNlICRob3N0IGluc3RlYWQKKwlvZiAkdGFyZ2V0LiAgUmVtb3ZlIEFDX0NIRUNLX1NJWkVPRihjaGFyKSwgd2UgYWxyZWFkeSBrbm93IHRoZQorCXJlc3VsdC4gIEZpeCBhcmd1bWVudCBvZiBBQ19BUkdfRU5BQkxFLgorCSogY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworVHVlIEZlYiAxMCAyMDo1Mzo0MCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBBbHBoYSBjb25maWcgYml0cy4KKworVHVlIE1heSAxMyAxMzozOToyMCAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGVkIGRhdGVzIGFuZCByZXdvcmRlZCBJcml4IGNvbW1lbnRzLgorCisJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgQUNfUFJPR19SQU5MSUIuCisKKwkqIE1ha2VmaWxlLmluLCBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwKKwlsdG1haW4uc2gsICovTWFrZWZpbGUuaW46IGxpYnRvb2xpemVkIGFnYWluIGFuZAlyZWJ1aWx0IHdpdGggCisJYXV0b21ha2UgYW5kIGF1dG9jb25mLgorCQorU2F0IE1heSAxMCAxODo0NDo1MCAxOTk3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY29tcHV0ZSBFWFRSQURJU1Q7IG5vdyBoYW5kbGVkIGluCisJc3JjL01ha2VmaWxlLmluLiAgUmVtb3ZlZCBtYWNyb3MgaW1wbGllZCBieSBBTV9JTklUX0FVVE9NQUtFLgorCURvbid0IHJ1biBBTV9NQUlOVEFJTkVSX01PREUuCisKK1RodSBNYXkgIDggMTQ6MzQ6MDUgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG1pc3NpbmcsIGx0bWFpbi5zaCwgbHRjb25maWcuc2g6IENyZWF0ZWQuIFRoZXNlIGFyZSBuZXcgZmlsZXMKKwlyZXF1aXJlZCBieSBhdXRvbWFrZSBhbmQgbGlidG9vbC4KKworCSogUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjE0LiBBZGRlZCBub3Rlcy4KKworCSogYWNjb25maWcuaDogTW92ZWQgUEFDS0FHRSBhbmQgVkVSU0lPTiBmb3IgbmV3IGF1dG9tYWtlLgorCQorCSogY29uZmlndXJlLmluOiBDaGFuZ2VzIGZvciBsaWJ0b29sLgorCQorCSogTWFrZWZpbGUuYW0gKGNoZWNrKTogbWFrZSB0ZXN0IG5vdyBtYWtlIGNoZWNrLiBVc2VzIGxpYnRvb2wgbm93LgorCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCBhY2xvY2FsLmgsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCitUaHUgTWF5ICAxIDE2OjI3OjA3IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBtaXNzaW5nOiBBZGRlZCBmaWxlIHJlcXVpcmVkIGJ5IG5ldyBhdXRvbWFrZS4KKworVHVlIE5vdiAyNiAxNDoxMDo0MiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3NrMy5jeWdudXMuY29tPgorCisJKiBhY2NvbmZpZy5oOiBBZGRlZCBVU0lOR19QVVJJRlkgZmxhZy4gVGhpcyBpcyBkZWZpbmVkIHdoZW4KKwktLWVuYWJsZS1wdXJpZnktc2FmZXR5IHdhcyB1c2VkIGF0IGNvbmZpZ3VyZSB0aW1lLgorCisJKiBjb25maWd1cmUuaW4gKGFsbHNvdXJjZXMpOiBBZGRlZCAtLWVuYWJsZS1wdXJpZnktc2FmZXR5IHN3aXRjaC4KKwkoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMTMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK0ZyaSBOb3YgMjIgMDY6NDY6MTIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjEyLgorCVJlbW92ZWQgc3BlY2lhbCBDRkxBR1MgaGFjayBmb3IgZ2NjLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMTIuIEFkZGVkIG5vdGVzLgorCisJKiBNYW55IGZpbGVzOiBDeWdudXMgU3VwcG9ydCBjaGFuZ2VkIHRvIEN5Z251cyBTb2x1dGlvbnMuCisKK1dlZCBPY3QgMzAgMTE6MTU6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjExLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMTEuIEFkZGVkIG5vdGVzIGFib3V0IEdOVSBtYWtlLgorCitUdWUgT2N0IDI5IDEyOjI1OjEyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBGaXhlZCAtV2FsbCB0cmljay4KKwkoVkVSU0lPTik6IEJvb3N0ZWQgcmV2LgorCSogY29uZmlndXJlOiBSZWJ1aWx0CisKKwkqIGFjY29uZmlnLmg6IE5lZWRlZCBmb3IgLS1lbmFibGUtZGVidWcgY29uZmlndXJlIHN3aXRjaC4KKworCSogUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjA5LiBBZGRlZCBtb3JlIG5vdGVzIG9uIGJ1aWxkaW5nCisJbGliZmZpLCBhbmQgTENMaW50LgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIC0tZW5hYmxlLWRlYnVnIHN3aXRjaC4gQm9vc3RlZCByZXYgdG8KKwkxLjA5LgorCSogY29uZmlndXJlOiBSZWJ1aWx0CisKK1R1ZSBPY3QgMTUgMTM6MTE6MjggMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMDgKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogUkVBRE1FOiBBZGRlZCBuMzIgYnVnIGZpeCBub3Rlcy4KKworCSogTWFrZWZpbGUuYW06IEFkZGVkICJtYWtlIGxpbnQiIHByb2R1Y3Rpb24uIAorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK01vbiBPY3QgMTQgMTA6NTQ6NDYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IEFkZGVkIHdlYiBwYWdlIHJlZmVyZW5jZS4KKworCSogY29uZmlndXJlLmluLCBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMDUKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogUkVBRE1FOiBGaXhlZCBuMzIgc2FtcGxlIGNvZGUuCisKK0ZyaSBPY3QgMTEgMTc6MDk6MjggMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IEFkZGVkIHNwYXJjIG5vdGVzLgorCisJKiBjb25maWd1cmUuaW4sIFJFQURNRTogQm9vc3RlZCByZXYgdG8gMS4wNC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworVGh1IE9jdCAxMCAxMDozMTowMyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiwgUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjAzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEFkZGVkIHN0cnVjdCBub3Rlcy4gCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgTElDRU5TRSB0byBkaXN0cmlidXRpb24uCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogUkVBRE1FOiBSZW1vdmVkIExpbnV4IHNlY3Rpb24uIE5vIHNwZWNpYWwgbm90ZXMgbm93CisJYmVjYXVzZSBhZ2dyZWdhdGVzIGFyZy9yZXR1cm4gdHlwZXMgd29yay4KKworV2VkIE9jdCAgOSAxNjoxNjo0MiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIFJFQURNRSwgY29uZmlndXJlLmluIChWRVJTSU9OKTogQm9vc3RlZCByZXYgdG8gMS4wMgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUdWUgT2N0ICA4IDExOjU2OjMzIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FIChOT1RFKTogQWRkZWQgbjMyIG5vdGVzLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgdGVzdCBwcm9kdWN0aW9uLgorCSogTWFrZWZpbGU6IFJlYnVpbHQKKworCSogUkVBRE1FOiBzcGVsbCBjaGVja2VkIQorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjAxCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK01vbiBPY3QgIDcgMTU6NTA6MjIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIG5hc3R5IGJpdCB0byBzdXBwb3J0IFNHSSB0b29scy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkKKwkqIFJFQURNRTogQWRkZWQgU0dJIG5vdGVzLiBBZGRlZCBub3RlIGFib3V0IGF1dG9tYWtlIGJ1Zy4KKworTW9uIE9jdCAgNyAxMTowMDoyOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FOiBSZXdyb3RlIGludHJvLCBhbmQgZml4ZWQgZXhhbXBsZXMuCisKK0ZyaSBPY3QgIDQgMTA6MTk6NTUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogLUQkVEFSR0VUIGlzIG5vIGxvbmdlciB1c2VkIGFzIGEgY29tcGlsZXIgc3dpdGNoLgorCUl0IGlzIG5vdyBpbnNlcnRlZCBpbnRvIGZmaS5oIGF0IGNvbmZpZ3VyZSB0aW1lLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBGRklfQUJJIGFuZCBGRklfU1RBVFVTIGFyZSBub3cgZmZpX2FiaSBhbmQgZmZpX3N0YXR1cy4KKworVGh1IE9jdCAgMyAxMzo0NzozNCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FLCBMSUNFTlNFOiBDcmVhdGVkLiBXcm90ZSBzb21lIGRvY3MuCisKKwkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgYmFyZiBvbiBpNTg2LXVua25vd24tbGludXhhb3V0LgorCUFkZGVkIEVYVFJBRElTVCBjb2RlIGZvciAibWFrZSBkaXN0Ii4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogKi9NYWtlZmlsZS5pbjogUmVidWlsdCB3aXRoIHBhdGNoZWQgYXV0b21ha2UuIAorCitUdWUgT2N0ICAxIDE3OjEyOjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW0sIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKKwljb25maWd1cmUuaW4sIGZmaWNvbmZpZy5oLmluLCBpbnN0YWxsLXNoLCBta2luc3RhbGxkaXJzLCAKKwlzdGFtcC1oLmluOiBDcmVhdGVkCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBHZW5lcmF0ZWQKKworLS0tIGxpYmZmaS9pbmNsdWRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R1ZSBGZWIgMjQgMTM6MDk6MzYgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGdlcmJpbC5jeWdudXMuY29tPgorCisJKiBmZmlfbWlwcy5oOiBVcGRhdGVkIEZGSV9UWVBFX1NUUlVDVF8qIHZhbHVlcyBiYXNlZCBvbgorCWZmaS5oLmluIGNoYW5nZXMuICBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIFNHSSdzICJzaW1wbGUiCisJYXNzZW1ibGVyLgorCitTdW4gRmViIDIyIDAwOjUxOjU1IDE5OTggIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CisKKwkqIGZmaS5oLmluOiBQb3dlclBDIHN1cHBvcnQuCisKKzE5OTgtMDItMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBmZmkuaC5pbjogQWRkIG02OGsgc3VwcG9ydC4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IE1ha2UgaXQgYSBzZXBhcmF0ZSB2YWx1ZS4KKworVHVlIEZlYiAxMCAyMDo1NToxNiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiAoU0laRU9GX0FSRyk6IFVzZSBhIHBvaW50ZXIgdHlwZSBieSBkZWZhdWx0LgorCisJKiBmZmkuaC5pbjogQWxwaGEgc3VwcG9ydC4KKworRnJpIE5vdiAyMiAwNjo0ODo0NSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluLCBmZmlfY29tbW9uLmg6IEN5Z251cyBTdXBwb3J0IC0+IEN5Z251cyBTb2x1dGlvbnMuCisKK1dlZCBOb3YgMjAgMjI6MzE6MDEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBBZGRlZCBmZmlfdHlwZV92b2lkIGRlZmluaXRpb24uCisKK1R1ZSBPY3QgMjkgMTI6MjI6NDAgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoaGFja19EQVRBKTogQWx3YXlzIGluc3RhbGwgZmZpX21pcHMuaC4KKworCSogZmZpLmguaW46IFJlbW92ZWQgRkZJX0RFQlVHLiBJdCdzIG5vdyBpbiB0aGUgY29ycmVjdAorCXBsYWNlIChhY2NvbmZpZy5oKS4KKwlBZGRlZCAjaW5jbHVkZSA8c3RkZGVmLmg+IGZvciBzaXplX3QgZGVmaW5pdGlvbi4KKworVHVlIE9jdCAxNSAxNzoyMzozNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaCwgZmZpX21pcHMuaDogTW9yZSBjbGVhbiB1cC4KKwlDb21tZW50ZWQgb3V0ICNkZWZpbmUgb2YgRkZJX0RFQlVHLgorCitUdWUgT2N0IDE1IDEzOjAxOjA2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpX2NvbW1vbi5oOiBBZGRlZCBib29sIGRlZmluaXRpb24uCisKKwkqIGZmaS5oLmluLCBmZmlfY29tbW9uLmg6IENsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuCisJQWRkZWQgZnVubnkgLypALi4uQCovIGNvbW1lbnRzIHRvIGFubm90YXRlIHNvdXJjZS4KKworTW9uIE9jdCAxNCAxMjoyOToyMyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBJbnRlcmZhY2UgY2hhbmdlcyBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIEppbQorCUJsYW5keS4KKworRnJpIE9jdCAxMSAxNjo0OTozNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBTbWFsbCBjaGFuZ2UgZm9yIHNwYXJjIHN1cHBvcnQuCisKK1RodSBPY3QgMTAgMTQ6NTM6MzcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmlfbWlwcy5oOiBBZGRlZCBGRklfVFlQRV9TVFJVQ1RfKiBkZWZpbml0aW9ucyBmb3IgCisJc3BlY2lhbCBzdHJ1Y3R1cmUgcmV0dXJuIHR5cGVzLgorCitXZWQgT2N0ICA5IDEzOjU1OjU3IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IEFkZGVkIFNJWkVPRl9BUkcgZGVmaW5pdGlvbiBmb3IgWDg2CisKK1R1ZSBPY3QgIDggMTE6NDA6MzYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiAoRkZJX0ZOKTogQWRkZWQgbWFjcm8gZm9yIGVsaW1pbmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCVVzZSBpdCB0byBjYXNlIHlvdXIgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIHByb3BlciB0eXBlLgorCisJKiBmZmlfbWlwcy5oIChTSVpFT0ZfQVJHKTogQWRkZWQgbWFnaWMgdG8gZml4IHR5cGUgcHJvbW90aW9uIGJ1Zy4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBmZmlfbWlwcy5oIHRvIEVYVFJBX0RJU1QuCisJKiBNYWtlZmlsZTogUmVidWlsdC4KKworCSogZmZpX21pcHMuaDogQ3JlYXRlZC4gTW92ZWQgYWxsIGNvbW1vbiBtaXBzIGRlZmluaXRpb25zIGhlcmUuCisKK01vbiBPY3QgIDcgMTA6NTg6MTIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBUaGUgU0dJIGFzc2VtYmVyIGlzIHZlcnkgcGlja3kgYWJvdXQgcGFyZW5zLiBSZWRlZmluZWQKKyAJc29tZSBtYWNyb3MgdG8gYXZvaWQgcHJvYmxlbXMuCisKKwkqIGZmaS5oLmluOiBBZGRlZCBGRklfREVGQVVMVF9BQkkgZGVmaW5pdGlvbnMuIEFsc28gYWRkZWQKKwlleHRlcm5zIGZvciBwb2ludGVyLCBhbmQgNjRiaXQgaW50ZWdyYWwgZmZpX3R5cGVzLgorCitGcmkgT2N0ICA0IDA5OjUxOjM3IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbjogQWRkZWQgRkZJX0FCSSBtZW1iZXIgdG8gZmZpX2NpZiBhbmQgY2hhbmdlZAorCWZ1bmN0aW9uIHByb3RvdHlwZXMgYWNjb3JkaW5nbHkuCisJQWRkZWQgI2RlZmluZSBAVEFSR0VUQC4gTm93IHByb2dyYW1zIGluY2x1ZGluZyBmZmkuaCBkb24ndCAKKwloYXZlIHRvIHNwZWNpZnkgdGhpcyB0aGVtc2VsdmVzLgorCitUaHUgT2N0ICAzIDE1OjM2OjQ0IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbjogQ2hhbmdlZCBmZmlfcHJlcF9jaWYncyB2YWx1ZXMgZnJvbSB2b2lkKiB0byB2b2lkKioKKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBFWFRSQV9ESVNUIGZvciAibWFrZSBkaXN0IgorCXRvIHdvcmsuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1dlZCBPY3QgIDIgMTA6MTY6NTkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBDcmVhdGVkCisJKiBNYWtlZmlsZS5pbjogR2VuZXJhdGVkCisKKwkqIGZmaV9jb21tb24uaDogQWRkZWQgcmNzaWQgY29tbWVudAorCitUdWUgT2N0ICAxIDE3OjEzOjUxIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaDogQ3JlYXRlZAorCistLS0gbGliZmZpL3NyYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9uIE9jdCAgNSAwMjoxNzo1MCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogYXJtL2ZmaS5jLCBhcm0vc3lzdi5TOiBDcmVhdGVkLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgYXJtIGZpbGVzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK01vbiBPY3QgIDUgMDE6NDE6MzggMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBJbmNyZW1lbnRlZCByZXZpc2lvbi4KKworU3VuIE9jdCAgNCAxNjoyNzoxNyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFBhdGNoIGZvciBEVSBhc3NlbWJsZXIuCisKKwkqIGZmaXRlc3QuYyAobWFpbik6IGxvbmcgbG9uZyBhbmQgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlcyB3b3JrCisJZm9yIHg4Ni4KKworRnJpIEFwciAxNyAxMTo1MDo1OCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGZmaXRlc3QuYyAobWFpbik6IEZsb2F0aW5nIHBvaW50IHRlc3RzIG5vdCBleGVjdXRlZCBmb3Igc3lzdGVtcworIAl3aXRoIGJyb2tlbiBsb25kIGRvdWJsZSAoU3VuT1MgNCB3LyBHQ0MpLgorCisJKiB0eXBlcy5jOiBGaXhlZCB4ODYgYWxpZ25tZW50IGluZm8gZm9yIGxvbmcgbG9uZyB0eXBlcy4KKworVGh1IEFwciAxNiAwNzoxNToyOCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AYWRhLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYzogQWRkZWQgbW9yZSBub3RlcyBhYm91dCBHQ0MgYnVncyB1bmRlciBJcml4IDYuCisKK1dlZCBBcHIgMTUgMDg6NDI6MjIgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYyAoc3RydWN0NSk6IE5ldyB0ZXN0IGZ1bmN0aW9uLgorCShtYWluKTogTmV3IHRlc3Qgd2l0aCBzdHJ1Y3Q1LgorCitUaHUgTWFyICA1IDEwOjQ4OjExIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkB0b290aWUudG8uY3lnbnVzLmNvbT4KKworCSogcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBGaXggYXNzZXJ0aW9uIGZvcgorCW5lc3RlZCBzdHJ1Y3R1cmVzLgorCitUdWUgRmViIDI0IDE2OjMzOjQxIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBZGRlZCBsb25nIGRvdWJsZSBzdXBwb3J0IGZvciBzcGFyYy4KKworU3VuIEZlYiAyMiAwMDo1MjoxOCAxOTk4ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgorCisJKiBwb3dlcnBjL2FzbS5oOiBOZXcgZmlsZS4KKwkqIHBvd2VycGMvZmZpLmM6IE5ldyBmaWxlLgorCSogcG93ZXJwYy9zeXN2LlM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuYW06IFBvd2VyUEMgcG9ydC4KKwkqIGZmaXRlc3QuYyAobWFpbik6IEFsbG93IGFsbCB0ZXN0cyB0byBydW4gZXZlbiBpbiBwcmVzZW5jZSBvZiBnY2MKKyAJYnVnIG9uIFBvd2VyUEMuCisKKzE5OTgtMDItMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBtaXBzL2ZmaS5jOiBGaXhlZCBjb21tZW50IHR5cG8uCisKKwkqIHg4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApLCB4ODYvc3lzdi5TIChyZXRmbG9hdCk6IAorCUZpeGVkIHg4NiBsb25nIGRvdWJsZSByZXR1cm4gaGFuZGxpbmcuCisKKwkqIHR5cGVzLmM6IEZpeGVkIHg4NiBsb25nIGRvdWJsZSBhbGlnbm1lbnQgaW5mby4KKworMTk5OC0wMi0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIHR5cGVzLmM6IEFkZCBtNjhrIHN1cHBvcnQuCisKKwkqIGZmaXRlc3QuYyAoZmxvYXRpbmcpOiBBZGQgbG9uZyBkb3VibGUgcGFyYW1ldGVyLgorCShyZXR1cm5fbGwsIGxkYmxpdCk6IE5ldyBmdW5jdGlvbnMgdG8gdGVzdCBsb25nIGxvbmcgYW5kIGxvbmcKKwlkb3VibGUgcmV0dXJuIHZhbHVlLgorCShtYWluKTogRml4IHR5cGUgZXJyb3IgaW4gYXNzaWdubWVudCBvZiB0c1sxLTRdX3R5cGUuZWxlbWVudHMuCisJQWRkIHRlc3RzIGZvciBsb25nIGxvbmcgYW5kIGxvbmcgZG91YmxlIGFyZ3VtZW50cyBhbmQgcmV0dXJuCisJdmFsdWVzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpIFtNNjhLXTogRG9uJ3QgYWxsb2NhdGUgYXJndW1lbnQgZm9yCisJc3RydWN0IHZhbHVlIHBvaW50ZXIuCisKKwkqIG02OGsvZmZpLmMsIG02OGsvc3lzdi5TOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5hbTogQWRkIGJpdHMgZm9yIG02OGsgcG9ydC4gIEFkZCBrbHVkZ2UgdG8gd29yayBhcm91bmQKKwlhdXRvbWFrZSBkZWZpY2llbmN5LgorCSh0ZXN0KTogRG9uJ3QgcmVxdWlyZSAiLiIgaW4gJFBBVEguCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworV2VkIEZlYiAxMSAwNzozNjo1MCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK1R1ZSBGZWIgMTAgMjA6NTY6MDAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KKworCSogYWxwaGEvZmZpLmMsIGFscGhhL29zZi5TOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5hbTogQWxwaGEgcG9ydC4KKworVHVlIE5vdiAxOCAxNDoxMjowNyAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBJbml0aWFsaXplIHJzdHJ1Y3RfZmxhZworCWZvciBuMzIuCisKK1R1ZSBKdW4gIDMgMTc6MTg6MjAgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYyAobWFpbik6IEFkZGVkIGhhY2sgdG8gZ2V0IHN0cnVjdHVyZSB0ZXN0cyB3b3JraW5nCisJY29ycmVjdGx5LgorCitTYXQgTWF5IDEwIDE5OjA2OjQyIDE5OTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEV4cGxpY2l0bHkgbGlzdCBhbGwgZGlzdHJpYnV0YWJsZQorCWZpbGVzIGluIHN1YmRpcnMuCisJKFZFUlNJT04sIENDKTogUmVtb3ZlZC4KKworVGh1IE1heSAgOCAxNzoxOTowMSAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IE1hbnkgY2hhbmdlcyBmb3IgbmV3IGF1dG9tYWtlIGFuZCBsaWJ0b29sLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK0ZyaSBOb3YgMjIgMDY6NTc6NTYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZml0ZXN0LmMgKG1haW4pOiBGaXhlZCB0ZXN0IGNhc2UgZm9yIG5vbiBtaXBzIG1hY2hpbmVzLgorCitXZWQgTm92IDIwIDIyOjMxOjU5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiB0eXBlcy5jOiBBZGRlZCBmZmlfdHlwZV92b2lkIGRlY2xhcmF0aW9uLgorCitUdWUgT2N0IDI5IDEzOjA3OjE5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChtYWluKTogRml4ZWQgY2hhcmFjdGVyIGNvbnN0YW50cy4KKwkobWFpbik6IEVtaXQgd2FybmluZyBmb3Igc3RydWN0dXJlIHRlc3QgMyBmYWlsdXJlIG9uIFN1bi4KKworCSogTWFrZWZpbGUuYW0gKFZQQVRIKTogRml4ZWQgVlBBVEggZGVmJ24gc28gYXV0b21ha2Ugd29uJ3QKKwlzdHJpcCBpdCBvdXQuIAorCU1vdmVkIGRpc3RkaXIgaGFjayBmcm9tIGxpYmZmaSB0byBhdXRvbWFrZS4gCisJKGZmaXRlc3QpOiBBZGRlZCBtaXNzaW5nIC1jIGZvciAkKENPTVBJTEUpIChjaGFuZ2UgaW4gYXV0b21ha2UpLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJCitUdWUgT2N0IDE1IDEzOjA4OjIwIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgIm1ha2UgbGludCIgcHJvZHVjdGlvbi4gCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogcHJlcF9jaWYuYyAoU1RBQ0tfQVJHX1NJWkUpOiBJbXByb3ZlZCBTVEFDS19BUkdfU0laRSBtYWNyby4KKyAgCUNsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuIEFkZGVkIGZ1bm55IC8qQC4uLkAqLyBjb21tZW50cyB0bworIAlhbm5vdGF0ZSBzb3VyY2UuCisKKwkqIGZmaXRlc3QuYywgZGVidWcuYzogQ2xlYW5lZCB1cCBjb2RlLgorCitNb24gT2N0IDE0IDEyOjI2OjU2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jOiBDaGFuZ2VzIGJhc2VkIG9uIGludGVyZmFjZSBjaGFuZ2VzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBDbGVhbmVkIHVwIGludGVyZmFjZSBiYXNlZCBvbgorCWZlZWRiYWNrIGZyb20gSmltIEJsYW5keS4KKworRnJpIE9jdCAxMSAxNTo1MzoxOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYzogUmVvcmRlcmVkIHRlc3RzIHdoaWxlIHBvcnRpbmcgdG8gc3BhcmMuCisJTWFkZSBjaGFuZ2VzIHRvIGhhbmRsZSBsYW1lIHN0cnVjdHVyZSBwYXNzaW5nIGZvciBzcGFyYy4KKwlSZW1vdmVkIGNhbGxzIHRvIGZmbHVzaCgpLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBZGRlZCBzcGVjaWFsIGNhc2UgZm9yIHNwYXJjCisJYWdncmVnYXRlIHR5cGUgYXJndW1lbnRzLgorCitUaHUgT2N0IDEwIDA5OjU2OjUxIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChtYWluKTogQWRkZWQgc3RydWN0dXJlIHBhc3NpbmcvcmV0dXJuaW5nIHRlc3RzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBQZXJmb3JtIHByb3BlciBpbml0aWFsaXphdGlvbgorCW9mIHN0cnVjdHVyZSByZXR1cm4gdHlwZXMgaWYgbmVlZGVkLgorCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEJ1ZyBmaXgKKworV2VkIE9jdCAgOSAxNjowNDoyMCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIHR5cGVzLmM6IEFkZGVkIHNwZWNpYWwgZGVmaW5pdGlvbnMgZm9yIHg4NiAoZG91YmxlIGRvZXNuJ3QKKwluZWVkIGRvdWJsZSB3b3JkIGFsaWdubWVudCkuCisKKwkqIGZmaXRlc3QuYzogQWRkZWQgbWFueSB0ZXN0cworCitUdWUgT2N0ICA4IDA5OjE5OjIyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRml4ZWQgYXNzZXJ0aW9uLgorCisJKiBkZWJ1Zy5jIChmZmlfYXNzZXJ0KTogTXVzdCByZXR1cm4gYSBub24gdm9pZCBub3cuCisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCB0ZXN0IHByb2R1Y3Rpb24uCisJKiBNYWtlZmlsZTogUmVidWlsdC4KKworCSogZmZpdGVzdC5jIChtYWluKTogQ3JlYXRlZC4gCisKKwkqIHR5cGVzLmM6IENyZWF0ZWQuIFN0cmlwcGVkIGNvbW1vbiBjb2RlIG91dCBvZiAqL2ZmaS5jLgorCisJKiBwcmVwX2NpZi5jOiBBZGRlZCBtaXNzaW5nIHN0ZGxpYi5oIGluY2x1ZGUuCisKKwkqIGRlYnVnLmMgKGZmaV90eXBlX3Rlc3QpOiBVc2VkICJhIiB0byBlbGltaW5hdGUgY29tcGlsZXIKKwl3YXJuaW5ncyBpbiBub24tZGVidWcgYnVpbGRzLiBJbmNsdWRlZCBmZmlfY29tbW9uLmguCisKK01vbiBPY3QgIDcgMTU6MzY6NDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgYSBydWxlIGZvciAucyAtPiAubworCVRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIFNHSSBjb21waWxlci4KKwkqIE1ha2VmaWxlOiBSZWJ1aWx0LgorCitGcmkgT2N0ICA0IDA5OjUxOjA4IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IE1vdmVkIGFiaSBzcGVjaWZpY2F0aW9uCisJdG8gZmZpX3ByZXBfY2lmKCkuCisKK1RodSBPY3QgIDMgMTU6Mzc6MzcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IENoYW5nZWQgdmFsdWVzIGZyb20gdm9pZCogdG8gdm9pZCoqLgorCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEZpeGVkIGFnZ3JlZ2F0ZSB0eXBlIGluaXRpYWxpemF0aW9uLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIHN1cHBvcnQgY29kZSBmb3IgIm1ha2UgZGlzdCIuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1dlZCBPY3QgIDIgMTE6NDE6NTcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGRlYnVnLmMsIHByZXBfY2lmOiBDcmVhdGVkLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgZGVidWcubyBhbmQgcHJlcF9jaWYubyB0byBPQkouCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZGVkIG1pc3NpbmcgLUkuLi9pbmNsdWRlCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1R1ZSBPY3QgIDEgMTc6MTE6NTEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBlcnJvci5jLCBNYWtlZmlsZS5hbTogQ3JlYXRlZC4KKwkqIE1ha2VmaWxlLmluOiBHZW5lcmF0ZWQuCisKKy0tLSBsaWJmZmkvc3JjL3g4NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdW4gT2N0ICA0IDE2OjI3OjE3IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBzeXN2LlMgKHJldGxvbmdkb3VibGUpOiBGaXhlZCBsb25nIGxvbmcgcmV0dXJuIHZhbHVlIHN1cHBvcnQuCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEaXR0by4KKworV2VkIE1heSAxMyAwNDozMDozMyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmFmdC5wcHAudHNvZnQubmV0PgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUKKwlzdXBwb3J0LgorCitXZWQgQXByIDE1IDA4OjQzOjIwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IHNtYWxsIHN0cnVjdCBzdXBwb3J0IHdhcyBtaXNzaW5nLgorCitUaHUgTWF5ICA4IDE2OjUzOjU4IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBvYmplY3RzLm1hazogUmVtb3ZlZC4KKworTW9uIERlYyAgMiAxNToxMjo1OCAxOTk2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIHN5c3YuUzogVXNlIC5iYWxpZ24sIGZvciBhLm91dCBMaW51eCBib3hlcy4KKworVHVlIE9jdCAxNSAxMzowNjo1MCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IENsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuCisJQWRkZWQgZnVubnkgLypALi4uQCovIGNvbW1lbnRzIHRvIGFubm90YXRlIHNvdXJjZS4KKworRnJpIE9jdCAxMSAxNjo0MzozOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IEFkZGVkIGFzc2VydGlvbiBmb3IgYmFkIEFCSXMuCisKK1dlZCBPY3QgIDkgMTM6NTc6MjcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBzeXN2LlMgKHJldGRvdWJsZSk6IEZpeGVkIGRvdWJsZSByZXR1cm4gcHJvYmxlbXMuCisKKwkqIGZmaS5jCShmZmlfY2FsbCk6IENvcnJlY3RlZCBmbiBhcmcgZGVmaW5pdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBkb3VibGUgcmV0dXJuIHByb2JsZW1zCisKK1R1ZSBPY3QgIDggMTI6MTI6NDkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYzogTW92ZWQgZmZpX3R5cGUgZGVmaW5pdGlvbnMgdG8gdHlwZXMuYy4KKwkoZmZpX3ByZXBfYXJncyk6IEZpeGVkIHR5cGUgcHJvbW90aW9uIGJ1Zy4KKworTW9uIE9jdCAgNyAxNTo1MzowNiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChGRklfKl9UWVBFREVGKTogUmVtb3ZlZCByZWR1bmRhbnQgJzsnCisKK0ZyaSBPY3QgIDQgMDk6NTQ6NTMgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IFJlbW92ZWQgRkZJX0FCSSBhcmcsIGFuZCBzd2FwcGVkCisJcmVtYWluaW5nIGFyZ3MuCisKK1dlZCBPY3QgIDIgMTA6MDc6MDUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jLCBzeXN2LlMsIG9iamVjdHMubWFrOiBDcmVhdGVkLgorCShmZmlfcHJlcF9jaWYpOiBjaWYtPnJ2YWx1ZSBubyBsb25nZXIgaW5pdGlhbGl6ZWQgdG8gTlVMTC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBNb3ZlZCBtYWNoaW5lIGluZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nCisJdG8gc3JjL3ByZXBfY2lmLmMuIEludHJvZHVjZWQgZmZpX3ByZXBfY2lmX21hY2hkZXAoKS4KKworLS0tIGxpYmZmaS9zcmMvbWlwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R1ZSBGZWIgMTcgMTc6MTg6MDcgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG8zMi5TOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeGVkIGFyZ3VtZW50IHByb2Nlc3NpbmcuCisKK1RodSBNYXkgIDggMTY6NTM6NTggMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG8zMi5zLCBuMzIuczogV3JhcHBlcnMgZm9yIFNHSSB0b29sIHN1cHBvcnQuCisKKwkqIG9iamVjdHMubWFrOiBSZW1vdmVkLgorCitUdWUgT2N0IDI5IDE0OjM3OjQ1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDaGFuZ2VkIGludCB6IHRvIHNpemVfdCB6LgorCitUdWUgT2N0IDE1IDEzOjE3OjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBuMzIuUzogRml4ZWQgYmFkIHN0YWNrIG11bmdpbmcuIAorCisJKiBmZmkuYzogTW92ZWQgcHJvdG90eXBlcyBmb3IgZmZpX2NhbGxfPzMyKCkgdG8gaGVyZSBmcm9tCisJZmZpX21pcHMuaCBiZWNhdXNlIGV4dGVuZGVkX2NpZiBpcyBub3QgZGVmaW5lZCBpbiBmZmlfbWlwcy5oLgorCitNb24gT2N0IDE0IDEyOjQyOjAyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IEludGVyZmFjZSBjaGFuZ2VzIGJhc2VkIG9uIGZlZWRiYWNrIGZyb20gSmltIEJsYW5keS4KKworVGh1IE9jdCAxMCAxMToyMjoxNiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIG4zMi5TLCBmZmkuYzogTG90cyBvZiBjaGFuZ2VzIHRvIHN1cHBvcnQgcGFzc2luZyBhbmQgCisJcmV0dXJuaW5nIHN0cnVjdHVyZXMgd2l0aCB0aGUgbjMyIGNhbGxpbmcgY29udmVudGlvbi4KKworCSogbjMyLlM6IEZpeGVkIGZuIHBvaW50ZXIgYnVnLgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggZm9yIG8zMiBzdHJ1Y3R1cmUKKwlyZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9hcmdzKTogRml4ZWQgbjMyIHN0cnVjdHVyZSBwYXNzaW5nIHdoZW4gc3RydWN0dXJlcworCXBhcnRpYWxseSBmaXQgaW4gcmVnaXN0ZXJzLgorCitXZWQgT2N0ICA5IDEzOjQ5OjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogb2JqZWN0cy5tYWs6IEFkZGVkIG4zMi5vLgorCisJKiBuMzIuUzogQ3JlYXRlZC4KKworCSogZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGRlZCBtYWdpYyB0byBzdXBwb3J0IHByb3BlcgorCW4zMiBwcm9jZXNzaW5nLgorCitUdWUgT2N0ICA4IDEwOjM3OjM1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IE1vdmVkIGZmaV90eXBlIGRlZmluaXRpb25zIHRvIHR5cGVzLmMuCisJKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCB0eXBlIHByb21vdGlvbiBidWcuCisKKwkqIG8zMi5TOiBUaGlzIGNvZGUgaXMgb25seSBidWlsdCBmb3IgbzMyIGNvbXBpbGVzLgorCUEgbG90IG9mIHRoZSAjZGVmaW5lIGNydWZ0IGhhcyBtb3ZlZCB0byBmZmlfbWlwcy5oLgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBhcmcgZmxhZ3MuIFNlY29uZCBhcmcKKwlpcyBvbmx5IHByb2Nlc3NlZCBpZiB0aGUgZmlyc3QgaXMgZWl0aGVyIGEgZmxvYXQgb3IgZG91YmxlLgorCitNb24gT2N0ICA3IDE1OjMzOjU5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogbzMyLlM6IE1vZGlmaWVkIHRvIGNvbXBpbGUgdW5kZXIgZWFjaCBvZiBvMzIsIG4zMiBhbmQgbjY0LgorCisJKiBmZmkuYyAoRkZJXypfVFlQRURFRik6IFJlbW92ZWQgcmVkdW5kYW50ICc7JworCitGcmkgT2N0ICA0IDA5OjUzOjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX2NhbGwpOiBSZW1vdmVkIEZGSV9BQkkgYXJnLCBhbmQgc3dhcHBlZAorCXJlbWFpbmluZyBhcmdzLgorCitXZWQgT2N0ICAyIDE3OjQxOjIyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogbzMyLlM6IFJlbW92ZWQgY3J1ZnR5IGRlZmluaXRpb25zLgorCitXZWQgT2N0ICAyIDEyOjUzOjQyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmKTogY2lmLT5ydmFsdWUgbm8gbG9uZ2VyIGluaXRpYWxpemVkIHRvIE5VTEwuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTW92ZWQgYWxsIG1hY2hpbmUgaW5kZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcKKwl0byBzcmMvcHJlcF9jaWYuYy4gSW50cm9kdWNlZCBmZmlfcHJlcF9jaWZfbWFjaGRlcC4gUmV0dXJuIHR5cGVzCisJb2YgRkZJX1RZUEVfU1RSVUNUIGFyZSBubyBkaWZmZXJlbnQgdGhhbiBGRklfVFlQRV9JTlQuCisKK1R1ZSBPY3QgIDEgMTc6MTE6MDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYywgbzMyLlMsIG9iamVjdC5tYWs6IENyZWF0ZWQKKwkKKy0tLSBsaWJmZmkvc3JjL3NwYXJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUdWUgRmViIDI0IDE2OjMzOjE4IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFkZGVkIGxvbmcgZG91YmxlIHN1cHBvcnQuCisKK1RodSBNYXkgIDggMTY6NTM6NTggMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG9iamVjdHMubWFrOiBSZW1vdmVkLgorCitUaHUgTWF5ICAxIDE2OjA3OjU2IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiB2OC5TOiBGaXhlZCBtaW5vciBwb3J0YWJpbGl0eSBwcm9ibGVtIHJlcG9ydGVkIGJ5IAorCVJ1c3MgTWNNYW51cyA8bWNtYW5yQGVxLmdzLmNvbT4uCisKK1R1ZSBOb3YgMjYgMTQ6MTI6NDMgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGNzazMuY3lnbnVzLmNvbT4KKworCSogdjguUzogVXNlZCBTVEFDS0ZSQU1FIGRlZmluZSBlbHNld2hlcmUuIAorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IFplcm8gb3V0IHNwYWNlIHdoZW4gVVNJTkdfUFVSSUZZCisJaXMgc2V0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0YWNrIGZyYW1lIAorCXNwYWNlIGZvciBmdW5jdGlvbnMgd2l0aCA8IDYgYXJncy4KKworVHVlIE9jdCAyOSAxNTowODo1NSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9hcmdzKTogaW50IHogaXMgbm93IHNpemVfdCB6LgorCitNb24gT2N0IDE0IDEzOjMxOjI0IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogdjguUyAoZmZpX2NhbGxfVjgpOiBHb3Jkb24gcmV3cml0ZXMgdGhpcyBhZ2Fpbi4gSXQgbG9va3MKKwlncmVhdCBub3cuCisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IFRoZSBjb21tZW50IGFib3V0IGhpamFja2VkIHJlZ2lzdGVycworCWlzIG5vIGxvbmdlciB2YWxpZCBhZnRlciBnb3Jkb25pIGhhY2tlZCB2OC5TLgorCisgICAgICAgICogdjguUyAoZmZpX2NhbGxfVjgpOiBSZXdyb3RlIHdpdGggZ29yZG9uaS4gTXVjaCBzaW1wbGVyLgorCQorCSogdjguUywgZmZpLmM6IGZmaV9jYWxsKCkgaGFkIGNoYW5nZWQgdG8gYWNjZXB0IG1vcmUgdGhhbgorCXR3byBhcmdzLCBzbyB2OC5TIGhhZCB0byBjaGFuZ2UgKGJlY2F1c2UgaXQgaGlqYWNrcyBpbmNvbWluZworCWFyZyByZWdpc3RlcnMpLgorCisJKiBmZmkuYzogSW50ZXJmYWNlIGNoYW5nZXMgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBKaW0gQmxhbmR5LgorCitUaHUgT2N0IDEwIDE3OjQ4OjE2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMsIHY4LlMsIG9iamVjdHMubWFrOiBDcmVhdGVkLgorCQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKaW5kZXggMDY0ZjRmYS4uZWMyZmQ2OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQpAQCAtMSw0ICsxLDQgQEAKLWxpYmZmaSAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDA4ICBSZWQgSGF0LCBJbmMgYW5kIG90aGVycy4gIAorbGliZmZpIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDkgIEFudGhvbnkgR3JlZW4sIFJlZCBIYXQsIEluYyBhbmQgb3RoZXJzLiAgCiBTZWUgc291cmNlIGZpbGVzIGZvciBkZXRhaWxzLgogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCmluZGV4IDBkYjUyY2EuLmY0N2RkMWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQpAQCAtNyw2ICs3LDcgQEAKIEVYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqIGNvbmZpZ3VyZS5ob3N0IFwKIAlzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBcCiAJc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaXRhcmdldC5oIFwKKwlzcmMvYXZyMzIvZmZpLmMgc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpdGFyZ2V0LmggXAogCXNyYy9jcmlzL2ZmaS5jIHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZml0YXJnZXQuaCBcCiAJc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvZmZpdGFyZ2V0Lmggc3JjL2lhNjQvaWE2NF9mbGFncy5oIFwKIAlzcmMvaWE2NC91bml4LlMgXApAQCAtMjUsMTIgKzI2LDEzIEBACiAJc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaXRhcmdldC5oIFwKIAlzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUyBzcmMvc3BhcmMvZmZpdGFyZ2V0LmggXAogCXNyYy9zcGFyYy9mZmkuYyBzcmMveDg2L2RhcndpbjY0LlMgXAotCXNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvZGFyd2luLlMgXAotCXNyYy94ODYvZnJlZWJzZC5TIFwKKwlzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L3dpbjY0LlMgXAorCXNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mcmVlYnNkLlMgXAogCXNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpdGFyZ2V0LmggXAogCXNyYy9wYS9mZml0YXJnZXQuaCBzcmMvcGEvZmZpLmMgc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2hwdXgzMi5TIFwKIAlzcmMvZnJ2L2ZmaS5jIHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL2RsbWFsbG9jLmMgXAotCWxpYnRvb2wtdmVyc2lvbiBDaGFuZ2VMb2cubGliZmZpCisJbGlidG9vbC12ZXJzaW9uIENoYW5nZUxvZy5saWJmZmkgbTQvbGlidG9vbC5tNCBcCisJbTQvbHR+b2Jzb2xldGUubTQgbTQvbHRvcHRpb25zLm00IG00L2x0c3VnYXIubTQgbTQvbHR2ZXJzaW9uLm00CiAKIGluZm9fVEVYSU5GT1MgPSBkb2MvbGliZmZpLnRleGkKIApAQCAtNzksNiArODEsOCBAQAogCiBNQUtFT1ZFUlJJREVTPQogCitBQ0xPQ0FMX0FNRkxBR1M9JChBQ0xPQ0FMX0FNRkxBR1MpIC1JIG00CisKIGxpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQogbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZmZpX2NvbnZlbmllbmNlLmxhCiAKQEAgLTEwMiw2ICsxMDYsOSBAQAogaWYgWDg2X1dJTjMyCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKIGVuZGlmCitpZiBYODZfV0lONjQKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luNjQuUworZW5kaWYKIGlmIFg4Nl9EQVJXSU4KIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUwogZW5kaWYKQEAgLTEzNSw2ICsxNDIsOSBAQAogaWYgQVJNCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwogZW5kaWYKK2lmIEFWUjMyCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpLmMKK2VuZGlmCiBpZiBMSUJGRklfQ1JJUwogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYwogZW5kaWYKQEAgLTE2NSw3ICsxNzUsNyBAQAogCiBBTV9DRkxBR1MgPSAtV2FsbCAtZyAtZmV4Y2VwdGlvbnMKIAotbGliZmZpX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIGBncmVwIC12ICdeXCMnICQoc3JjZGlyKS9saWJ0b29sLXZlcnNpb25gCitsaWJmZmlfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAgJChMVExERkxBR1MpICQoQU1fTFRMREZMQUdTKQogCiBBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSWluY2x1ZGUgLUkkKHRvcF9zcmNkaXIpL3NyYwogQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKQEAgLTE3NCw0ICsxODQsMyBAQAogLlBIT05ZOiBpbnN0YWxsLWh0bWwgaW5zdGFsbC1wZGYKIGluc3RhbGwtaHRtbDoKIGluc3RhbGwtcGRmOgotCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgppbmRleCA5MDUyM2ZiLi40OWFmY2MxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KQEAgLTEsOCArMSw5IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExIGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKICMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNyw4ICsxOCw5IEBACiAKIFZQQVRIID0gQHNyY2RpckAKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CiBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCkBAIC0zOCwzMyArNDAsMzQgQEAKIEBYODZfVFJVRUBhbV9fYXBwZW5kXzIgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCiBAWDg2X0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzMgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TCiBAWDg2X1dJTjMyX1RSVUVAYW1fX2FwcGVuZF80ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKLUBYODZfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF81ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L2RhcndpbjY0LlMKLUBTUEFSQ19UUlVFQGFtX19hcHBlbmRfNiA9IHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUwotQEFMUEhBX1RSVUVAYW1fX2FwcGVuZF83ID0gc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwotQElBNjRfVFJVRUBhbV9fYXBwZW5kXzggPSBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC91bml4LlMKLUBNMzJSX1RSVUVAYW1fX2FwcGVuZF85ID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCi1ATTY4S19UUlVFQGFtX19hcHBlbmRfMTAgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKLUBQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xMSA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwotQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzEzID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKLUBQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKLUBBUk1fVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwotQExJQkZGSV9DUklTX1RSVUVAYW1fX2FwcGVuZF8xNiA9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYwotQEZSVl9UUlVFQGFtX19hcHBlbmRfMTcgPSBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaS5jCi1AUzM5MF9UUlVFQGFtX19hcHBlbmRfMTggPSBzcmMvczM5MC9zeXN2LlMgc3JjL3MzOTAvZmZpLmMKLUBYODZfNjRfVFJVRUBhbV9fYXBwZW5kXzE5ID0gc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUwotQFNIX1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9zaC9zeXN2LlMgc3JjL3NoL2ZmaS5jCi1AU0g2NF9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMvc2g2NC9zeXN2LlMgc3JjL3NoNjQvZmZpLmMKLUBQQV9MSU5VWF9UUlVFQGFtX19hcHBlbmRfMjIgPSBzcmMvcGEvbGludXguUyBzcmMvcGEvZmZpLmMKLUBQQV9IUFVYX1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9wYS9ocHV4MzIuUyBzcmMvcGEvZmZpLmMKK0BYODZfV0lONjRfVFJVRUBhbV9fYXBwZW5kXzUgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luNjQuUworQFg4Nl9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzYgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUworQFNQQVJDX1RSVUVAYW1fX2FwcGVuZF83ID0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCitAQUxQSEFfVFJVRUBhbV9fYXBwZW5kXzggPSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCitASUE2NF9UUlVFQGFtX19hcHBlbmRfOSA9IHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L3VuaXguUworQE0zMlJfVFJVRUBhbV9fYXBwZW5kXzEwID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCitATTY4S19UUlVFQGFtX19hcHBlbmRfMTEgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKK0BQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8xMyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCitAUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKK0BQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKK0BBUk1fVFJVRUBhbV9fYXBwZW5kXzE2ID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYworQEFWUjMyX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHNyYy9hdnIzMi9zeXN2LlMgc3JjL2F2cjMyL2ZmaS5jCitATElCRkZJX0NSSVNfVFJVRUBhbV9fYXBwZW5kXzE4ID0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCitARlJWX1RSVUVAYW1fX2FwcGVuZF8xOSA9IHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpLmMKK0BTMzkwX1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZmkuYworQFg4Nl82NF9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCitAU0hfVFJVRUBhbV9fYXBwZW5kXzIyID0gc3JjL3NoL3N5c3YuUyBzcmMvc2gvZmZpLmMKK0BTSDY0X1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZmkuYworQFBBX0xJTlVYX1RSVUVAYW1fX2FwcGVuZF8yNCA9IHNyYy9wYS9saW51eC5TIHNyYy9wYS9mZmkuYworQFBBX0hQVVhfVFJVRUBhbV9fYXBwZW5kXzI1ID0gc3JjL3BhL2hwdXgzMi5TIHNyYy9wYS9mZmkuYwogc3ViZGlyID0gLgogRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCiAJJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9kb2Mvc3RhbXAtdnRpIFwKIAkkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSAkKHNyY2RpcikvZmZpY29uZmlnLmguaW4gXAotCSQoc3JjZGlyKS9saWJmZmkucGMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQ2hhbmdlTG9nIFRPRE8gXAotCWNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIGx0Y2YtYy5zaCBcCi0JbHRjZi1jeHguc2ggbHRjZi1nY2ouc2ggbHRjb25maWcgbHRtYWluLnNoIG1kYXRlLXNoIG1pc3NpbmcgXAotCW1raW5zdGFsbGRpcnMgdGV4aW5mby50ZXgKKwkkKHNyY2RpcikvbGliZmZpLnBjLmluICQodG9wX3NyY2RpcikvY29uZmlndXJlIENoYW5nZUxvZyBcCisJY29tcGlsZSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBkZXBjb21wIGluc3RhbGwtc2ggbHRtYWluLnNoIFwKKwltZGF0ZS1zaCBtaXNzaW5nIHRleGluZm8udGV4CiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCkBAIC03MiwxOCArNzUsMzMgQEAKIAkkKEFDTE9DQUxfTTQpCiBhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAogIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCiBDT05GSUdfSEVBREVSID0gZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGxpYmZmaS5wYworQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwogYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCiBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGluZm9kaXIpIiBcCiAJIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCi1saWJMVExJQlJBUklFU19JTlNUQUxMID0gJChJTlNUQUxMKQogTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykgJChub2luc3RfTFRMSUJSQVJJRVMpCiBsaWJmZmlfbGFfTElCQUREID0KIGFtX19kaXJzdGFtcCA9ICQoYW1fX2xlYWRpbmdfZG90KWRpcnN0YW1wCkBAIC05NCwzNyArMTEyLDM5IEBACiBAWDg2X1RSVUVAYW1fX29iamVjdHNfMiA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwogQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMyA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZnJlZWJzZC5sbwogQFg4Nl9XSU4zMl9UUlVFQGFtX19vYmplY3RzXzQgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3dpbjMyLmxvCi1AWDg2X0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzUgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L2Rhcndpbi5sbyBcCitAWDg2X1dJTjY0X1RSVUVAYW1fX29iamVjdHNfNSA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvd2luNjQubG8KK0BYODZfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfNiA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZGFyd2luLmxvIFwKIEBYODZfREFSV0lOX1RSVUVACXNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni9kYXJ3aW42NC5sbwotQFNQQVJDX1RSVUVAYW1fX29iamVjdHNfNiA9IHNyYy9zcGFyYy9mZmkubG8gc3JjL3NwYXJjL3Y4LmxvIFwKK0BTUEFSQ19UUlVFQGFtX19vYmplY3RzXzcgPSBzcmMvc3BhcmMvZmZpLmxvIHNyYy9zcGFyYy92OC5sbyBcCiBAU1BBUkNfVFJVRUAJc3JjL3NwYXJjL3Y5LmxvCi1AQUxQSEFfVFJVRUBhbV9fb2JqZWN0c183ID0gc3JjL2FscGhhL2ZmaS5sbyBzcmMvYWxwaGEvb3NmLmxvCi1ASUE2NF9UUlVFQGFtX19vYmplY3RzXzggPSBzcmMvaWE2NC9mZmkubG8gc3JjL2lhNjQvdW5peC5sbwotQE0zMlJfVFJVRUBhbV9fb2JqZWN0c185ID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KLUBNNjhLX1RSVUVAYW1fX29iamVjdHNfMTAgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbwotQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xMSA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKK0BBTFBIQV9UUlVFQGFtX19vYmplY3RzXzggPSBzcmMvYWxwaGEvZmZpLmxvIHNyYy9hbHBoYS9vc2YubG8KK0BJQTY0X1RSVUVAYW1fX29iamVjdHNfOSA9IHNyYy9pYTY0L2ZmaS5sbyBzcmMvaWE2NC91bml4LmxvCitATTMyUl9UUlVFQGFtX19vYmplY3RzXzEwID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KK0BNNjhLX1RSVUVAYW1fX29iamVjdHNfMTEgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbworQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2xpbnV4NjQubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19BSVhfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfQUlYX1RSVUVAYW1fX29iamVjdHNfMTMgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0FJWF9UUlVFQAlzcmMvcG93ZXJwYy9haXgubG8gXAogQFBPV0VSUENfQUlYX1RSVUVACXNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c18xMyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0RBUldJTl9UUlVFQAlzcmMvcG93ZXJwYy9kYXJ3aW4ubG8gXAogQFBPV0VSUENfREFSV0lOX1RSVUVACXNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLmxvCi1AUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAorQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzE1ID0gc3JjL3Bvd2VycGMvZmZpLmxvIFwKIEBQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvc3lzdi5sbyBcCiBAUE9XRVJQQ19GUkVFQlNEX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvCi1AQVJNX1RSVUVAYW1fX29iamVjdHNfMTUgPSBzcmMvYXJtL3N5c3YubG8gc3JjL2FybS9mZmkubG8KLUBMSUJGRklfQ1JJU19UUlVFQGFtX19vYmplY3RzXzE2ID0gc3JjL2NyaXMvc3lzdi5sbyBzcmMvY3Jpcy9mZmkubG8KLUBGUlZfVFJVRUBhbV9fb2JqZWN0c18xNyA9IHNyYy9mcnYvZWFiaS5sbyBzcmMvZnJ2L2ZmaS5sbwotQFMzOTBfVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9zMzkwL3N5c3YubG8gc3JjL3MzOTAvZmZpLmxvCi1AWDg2XzY0X1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvdW5peDY0LmxvIFwKK0BBUk1fVFJVRUBhbV9fb2JqZWN0c18xNiA9IHNyYy9hcm0vc3lzdi5sbyBzcmMvYXJtL2ZmaS5sbworQEFWUjMyX1RSVUVAYW1fX29iamVjdHNfMTcgPSBzcmMvYXZyMzIvc3lzdi5sbyBzcmMvYXZyMzIvZmZpLmxvCitATElCRkZJX0NSSVNfVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9jcmlzL3N5c3YubG8gc3JjL2NyaXMvZmZpLmxvCitARlJWX1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMvZnJ2L2VhYmkubG8gc3JjL2Zydi9mZmkubG8KK0BTMzkwX1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvczM5MC9zeXN2LmxvIHNyYy9zMzkwL2ZmaS5sbworQFg4Nl82NF9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L3VuaXg2NC5sbyBcCiBAWDg2XzY0X1RSVUVACXNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwotQFNIX1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvc2gvc3lzdi5sbyBzcmMvc2gvZmZpLmxvCi1AU0g2NF9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL3NoNjQvc3lzdi5sbyBzcmMvc2g2NC9mZmkubG8KLUBQQV9MSU5VWF9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL3BhL2xpbnV4LmxvIHNyYy9wYS9mZmkubG8KLUBQQV9IUFVYX1RSVUVAYW1fX29iamVjdHNfMjMgPSBzcmMvcGEvaHB1eDMyLmxvIHNyYy9wYS9mZmkubG8KK0BTSF9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL3NoL3N5c3YubG8gc3JjL3NoL2ZmaS5sbworQFNINjRfVFJVRUBhbV9fb2JqZWN0c18yMyA9IHNyYy9zaDY0L3N5c3YubG8gc3JjL3NoNjQvZmZpLmxvCitAUEFfTElOVVhfVFJVRUBhbV9fb2JqZWN0c18yNCA9IHNyYy9wYS9saW51eC5sbyBzcmMvcGEvZmZpLmxvCitAUEFfSFBVWF9UUlVFQGFtX19vYmplY3RzXzI1ID0gc3JjL3BhL2hwdXgzMi5sbyBzcmMvcGEvZmZpLmxvCiBub2Rpc3RfbGliZmZpX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAogCSQoYW1fX29iamVjdHNfMykgJChhbV9fb2JqZWN0c180KSAkKGFtX19vYmplY3RzXzUpIFwKIAkkKGFtX19vYmplY3RzXzYpICQoYW1fX29iamVjdHNfNykgJChhbV9fb2JqZWN0c184KSBcCkBAIC0xMzIsMzAgKzE1MiwzMyBAQAogCSQoYW1fX29iamVjdHNfMTIpICQoYW1fX29iamVjdHNfMTMpICQoYW1fX29iamVjdHNfMTQpIFwKIAkkKGFtX19vYmplY3RzXzE1KSAkKGFtX19vYmplY3RzXzE2KSAkKGFtX19vYmplY3RzXzE3KSBcCiAJJChhbV9fb2JqZWN0c18xOCkgJChhbV9fb2JqZWN0c18xOSkgJChhbV9fb2JqZWN0c18yMCkgXAotCSQoYW1fX29iamVjdHNfMjEpICQoYW1fX29iamVjdHNfMjIpICQoYW1fX29iamVjdHNfMjMpCisJJChhbV9fb2JqZWN0c18yMSkgJChhbV9fb2JqZWN0c18yMikgJChhbV9fb2JqZWN0c18yMykgXAorCSQoYW1fX29iamVjdHNfMjQpICQoYW1fX29iamVjdHNfMjUpCiBsaWJmZmlfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfbGFfT0JKRUNUUykKIGxpYmZmaV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAogCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAogCSQobGliZmZpX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9MSUJBREQgPQotYW1fX29iamVjdHNfMjQgPSBzcmMvZGVidWcubG8gc3JjL3ByZXBfY2lmLmxvIHNyYy90eXBlcy5sbyBcCithbV9fb2JqZWN0c18yNiA9IHNyYy9kZWJ1Zy5sbyBzcmMvcHJlcF9jaWYubG8gc3JjL3R5cGVzLmxvIFwKIAlzcmMvcmF3X2FwaS5sbyBzcmMvamF2YV9yYXdfYXBpLmxvIHNyYy9jbG9zdXJlcy5sbwotYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzI0KQotYW1fX29iamVjdHNfMjUgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBcCithbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMjYpCithbV9fb2JqZWN0c18yNyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzMpIFwKIAkkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgJChhbV9fb2JqZWN0c182KSBcCiAJJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpICQoYW1fX29iamVjdHNfOSkgXAogCSQoYW1fX29iamVjdHNfMTApICQoYW1fX29iamVjdHNfMTEpICQoYW1fX29iamVjdHNfMTIpIFwKIAkkKGFtX19vYmplY3RzXzEzKSAkKGFtX19vYmplY3RzXzE0KSAkKGFtX19vYmplY3RzXzE1KSBcCiAJJChhbV9fb2JqZWN0c18xNikgJChhbV9fb2JqZWN0c18xNykgJChhbV9fb2JqZWN0c18xOCkgXAogCSQoYW1fX29iamVjdHNfMTkpICQoYW1fX29iamVjdHNfMjApICQoYW1fX29iamVjdHNfMjEpIFwKLQkkKGFtX19vYmplY3RzXzIyKSAkKGFtX19vYmplY3RzXzIzKQotbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18yNSkKKwkkKGFtX19vYmplY3RzXzIyKSAkKGFtX19vYmplY3RzXzIzKSAkKGFtX19vYmplY3RzXzI0KSBcCisJJChhbV9fb2JqZWN0c18yNSkKK25vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMjcpCiBsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykKIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNACiBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCiBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKIENQUEFTQ09NUElMRSA9ICQoQ0NBUykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKIAkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCiBMVENQUEFTQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCkBAIC0xOTMsMTAgKzIxNiwxMiBAQAogCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCiAJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCiAJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLXBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQogREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCiBSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAogICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKIERJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKQEAgLTIwNCw5ICsyMjksMzQgQEAKIGRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKIHRvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQogYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAotICB7IHRlc3QgISAtZCAkKGRpc3RkaXIpIFwKLSAgICB8fCB7IGZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKLSAgICAgICAgICYmIHJtIC1mciAkKGRpc3RkaXIpOyB9OyB9CisgIHsgdGVzdCAhIC1kICIkKGRpc3RkaXIpIiBcCisgICAgfHwgeyBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKKyAgICAgICAgICYmIHJtIC1mciAiJChkaXN0ZGlyKSI7IH07IH0KK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgogRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6CiBHWklQX0VOViA9IC0tYmVzdAogZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludApAQCAtMjE0LDYgKzI2NCw3IEBACiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAogQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQAogQVVUT0NPTkYgPSBAQVVUT0NPTkZACkBAIC0yMjgsMjEgKzI3OSwxNyBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKLUVDSE8gPSBARUNIT0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAogRUNIT19DID0gQEVDSE9fQ0AKIEVDSE9fTiA9IEBFQ0hPX05ACiBFQ0hPX1QgPSBARUNIT19UQAogRUdSRVAgPSBARUdSRVBACiBFWEVFWFQgPSBARVhFRVhUQAotRjc3ID0gQEY3N0AKLUZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKIElOU1RBTEwgPSBASU5TVEFMTEAKQEAgLTI1MCwxNiArMjk3LDIzIEBACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAogSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACiBJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACiBMREZMQUdTID0gQExERkxBR1NACiBMSUJPQkpTID0gQExJQk9CSlNACiBMSUJTID0gQExJQlNACiBMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACiBMTl9TID0gQExOX1NACiBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAogTUFJTlQgPSBATUFJTlRACiBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKIE1LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKIE9CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKIFBBQ0tBR0UgPSBAUEFDS0FHRUAKIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAogUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKQEAgLTI4MCw4ICszMzQsNyBAQAogYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTMxMiw2ICszNjUsNyBAQAogbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAogbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKIG1hbmRpciA9IEBtYW5kaXJACiBta2Rpcl9wID0gQG1rZGlyX3BACiBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACkBAIC0zMzAsNiArMzg0LDcgQEAKIHRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKIHRvb2xleGVjZGlyID0gQHRvb2xleGVjZGlyQAogdG9vbGV4ZWNsaWJkaXIgPSBAdG9vbGV4ZWNsaWJkaXJACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACiB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gc3ViZGlyLW9iamVjdHMKQEAgLTMzNyw2ICszOTIsNyBAQAogRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2ogY29uZmlndXJlLmhvc3QgXAogCXNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMgc3JjL2FscGhhL2ZmaXRhcmdldC5oIFwKIAlzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpdGFyZ2V0LmggXAorCXNyYy9hdnIzMi9mZmkuYyBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZml0YXJnZXQuaCBcCiAJc3JjL2NyaXMvZmZpLmMgc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaXRhcmdldC5oIFwKIAlzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggXAogCXNyYy9pYTY0L3VuaXguUyBcCkBAIC0zNTUsMTIgKzQxMSwxMyBAQAogCXNyYy9zaDY0L2ZmaS5jIHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZml0YXJnZXQuaCBcCiAJc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMgc3JjL3NwYXJjL2ZmaXRhcmdldC5oIFwKIAlzcmMvc3BhcmMvZmZpLmMgc3JjL3g4Ni9kYXJ3aW42NC5TIFwKLQlzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L2Rhcndpbi5TIFwKLQlzcmMveDg2L2ZyZWVic2QuUyBcCisJc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUyBzcmMveDg2L3dpbjMyLlMgc3JjL3g4Ni93aW42NC5TIFwKKwlzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZnJlZWJzZC5TIFwKIAlzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaXRhcmdldC5oIFwKIAlzcmMvcGEvZmZpdGFyZ2V0Lmggc3JjL3BhL2ZmaS5jIHNyYy9wYS9saW51eC5TIHNyYy9wYS9ocHV4MzIuUyBcCiAJc3JjL2Zydi9mZmkuYyBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaXRhcmdldC5oIHNyYy9kbG1hbGxvYy5jIFwKLQlsaWJ0b29sLXZlcnNpb24gQ2hhbmdlTG9nLmxpYmZmaQorCWxpYnRvb2wtdmVyc2lvbiBDaGFuZ2VMb2cubGliZmZpIG00L2xpYnRvb2wubTQgXAorCW00L2x0fm9ic29sZXRlLm00IG00L2x0b3B0aW9ucy5tNCBtNC9sdHN1Z2FyLm00IG00L2x0dmVyc2lvbi5tNAogCiBpbmZvX1RFWElORk9TID0gZG9jL2xpYmZmaS50ZXhpCiAKQEAgLTQwMiw2ICs0NTksNyBAQAogCSJERVNURElSPSQoREVTVERJUikiCiAKIE1BS0VPVkVSUklERVMgPSAKK0FDTE9DQUxfQU1GTEFHUyA9ICQoQUNMT0NBTF9BTUZMQUdTKSAtSSBtNAogbGliX0xUTElCUkFSSUVTID0gbGliZmZpLmxhCiBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmZmlfY29udmVuaWVuY2UubGEKIGxpYmZmaV9sYV9TT1VSQ0VTID0gc3JjL2RlYnVnLmMgc3JjL3ByZXBfY2lmLmMgc3JjL3R5cGVzLmMgXApAQCAtNDE2LDExICs0NzQsMTIgQEAKIAkkKGFtX19hcHBlbmRfMTIpICQoYW1fX2FwcGVuZF8xMykgJChhbV9fYXBwZW5kXzE0KSBcCiAJJChhbV9fYXBwZW5kXzE1KSAkKGFtX19hcHBlbmRfMTYpICQoYW1fX2FwcGVuZF8xNykgXAogCSQoYW1fX2FwcGVuZF8xOCkgJChhbV9fYXBwZW5kXzE5KSAkKGFtX19hcHBlbmRfMjApIFwKLQkkKGFtX19hcHBlbmRfMjEpICQoYW1fX2FwcGVuZF8yMikgJChhbV9fYXBwZW5kXzIzKQorCSQoYW1fX2FwcGVuZF8yMSkgJChhbV9fYXBwZW5kXzIyKSAkKGFtX19hcHBlbmRfMjMpIFwKKwkkKGFtX19hcHBlbmRfMjQpICQoYW1fX2FwcGVuZF8yNSkKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykKIG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKQogQU1fQ0ZMQUdTID0gLVdhbGwgLWcgLWZleGNlcHRpb25zCi1saWJmZmlfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAKK2xpYmZmaV9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYCAkKEFNX0xUTERGTEFHUykKIEFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQodG9wX3NyY2Rpcikvc3JjCiBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQogYWxsOiBmZmljb25maWcuaApAQCAtNDM0LDE1ICs0OTMsMTUgQEAKIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAogCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCiAJICAgICokJGRlcCopIFwKLQkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAnOyBcCi0JICAgICAgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduJzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIFwKIAkJJiYgZXhpdCAwOyBcCiAJICAgICAgZXhpdCAxOzsgXAogCSAgZXNhYzsgXAogCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIE1ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBNYWtlZmlsZQorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTQ1OCw5ICs1MTcsMTAgQEAKIAkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCiAKICQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CiAKIGZmaWNvbmZpZy5oOiBzdGFtcC1oMQogCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXApAQCAtNDcyLDcgKzUzMiw3IEBACiAJQHJtIC1mIHN0YW1wLWgxCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBmZmljb25maWcuaAogJChzcmNkaXIpL2ZmaWNvbmZpZy5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKLQljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwkoJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKSkKIAlybSAtZiBzdGFtcC1oMQogCXRvdWNoICRACiAKQEAgLTQ4MywyMCArNTQzLDI0IEBACiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgICAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChsaWJMVExJQlJBUklFU19JTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJyQkcCcgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAiJCRwIiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKIAkgIGVsc2UgOjsgZmk7IFwKLQlkb25lCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KIAogdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgcD0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRwJyI7IFwKLQkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJHAiOyBcCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCiAJZG9uZQogCiBjbGVhbi1saWJMVExJQlJBUklFUzoKQEAgLTU1NCw2ICs2MTgsOCBAQAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni93aW4zMi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3g4Ni93aW42NC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni9kYXJ3aW4ubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvZmZpNjQubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKQEAgLTY0OCw2ICs3MTQsMTYgQEAKIAlzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9hcm0vZmZpLmxvOiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL2FybS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9hdnIzMgorCUA6ID4gc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKQorc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL2F2cjMyLyQoREVQRElSKQorCUA6ID4gc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hdnIzMi9zeXN2LmxvOiBzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2F2cjMyL2ZmaS5sbzogc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9jcmlzLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBzcmMvY3JpcwogCUA6ID4gc3JjL2NyaXMvJChhbV9fZGlyc3RhbXApCkBAIC03MjUsNiArODAxLDEwIEBACiAJLXJtIC1mIHNyYy9hcm0vZmZpLmxvCiAJLXJtIC1mIHNyYy9hcm0vc3lzdi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2FybS9zeXN2LmxvCisJLXJtIC1mIHNyYy9hdnIzMi9mZmkuJChPQkpFWFQpCisJLXJtIC1mIHNyYy9hdnIzMi9mZmkubG8KKwktcm0gLWYgc3JjL2F2cjMyL3N5c3YuJChPQkpFWFQpCisJLXJtIC1mIHNyYy9hdnIzMi9zeXN2LmxvCiAJLXJtIC1mIHNyYy9jbG9zdXJlcy4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2Nsb3N1cmVzLmxvCiAJLXJtIC1mIHNyYy9jcmlzL2ZmaS4kKE9CSkVYVCkKQEAgLTgyMyw2ICs5MDMsOCBAQAogCS1ybSAtZiBzcmMveDg2L3VuaXg2NC5sbwogCS1ybSAtZiBzcmMveDg2L3dpbjMyLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMveDg2L3dpbjMyLmxvCisJLXJtIC1mIHNyYy94ODYvd2luNjQuJChPQkpFWFQpCisJLXJtIC1mIHNyYy94ODYvd2luNjQubG8KIAogZGlzdGNsZWFuLWNvbXBpbGU6CiAJLXJtIC1mICoudGFiLmMKQEAgLTgzNyw2ICs5MTksOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hbHBoYS8kKERFUERJUikvb3NmLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hdnIzMi8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2F2cjMyLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2NyaXMvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9jcmlzLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2Zydi8kKERFUERJUikvZWFiaS5QbG9AYW1fX3F1b3RlQApAQCAtODgwLDExICs5NjQsMTIgQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvdW5peDY0LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvd2luMzIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS93aW42NC5QbG9AYW1fX3F1b3RlQAogCiAuUy5vOgogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtODkyLDcgKzk3Nyw3IEBACiAuUy5vYmo6CiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCkBAIC05MDAsNyArOTg1LDcgQEAKIC5TLmxvOgogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoTFRDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoTFRDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CkBAIC05MDgsNyArOTkzLDcgQEAKIC5jLm86CiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACiBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtOTE2LDcgKzEwMDEsNyBAQAogLmMub2JqOgogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKQEAgLTkyNCw3ICsxMDA5LDcgQEAKIC5jLmxvOgogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtOTM3LDYgKzEwMjIsNyBAQAogCS1ybSAtcmYgc3JjLy5saWJzIHNyYy9fbGlicwogCS1ybSAtcmYgc3JjL2FscGhhLy5saWJzIHNyYy9hbHBoYS9fbGlicwogCS1ybSAtcmYgc3JjL2FybS8ubGlicyBzcmMvYXJtL19saWJzCisJLXJtIC1yZiBzcmMvYXZyMzIvLmxpYnMgc3JjL2F2cjMyL19saWJzCiAJLXJtIC1yZiBzcmMvY3Jpcy8ubGlicyBzcmMvY3Jpcy9fbGlicwogCS1ybSAtcmYgc3JjL2Zydi8ubGlicyBzcmMvZnJ2L19saWJzCiAJLXJtIC1yZiBzcmMvaWE2NC8ubGlicyBzcmMvaWE2NC9fbGlicwpAQCAtOTUyLDE0ICsxMDM4LDE0IEBACiAJLXJtIC1yZiBzcmMveDg2Ly5saWJzIHNyYy94ODYvX2xpYnMKIAogZGlzdGNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mIGxpYnRvb2wKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKIGRvYy8kKGFtX19kaXJzdGFtcCk6CiAJQCQoTUtESVJfUCkgZG9jCiAJQDogPiBkb2MvJChhbV9fZGlyc3RhbXApCiAKICQoc3JjZGlyKS9kb2MvbGliZmZpLmluZm86IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aQogCXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAotCWFtX19jd2Q9YHB3ZGAgJiYgY2QgJChzcmNkaXIpICYmIFwKKwlhbV9fY3dkPWBwd2RgICYmICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAogCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCiAJaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKIAkgIGZvciBmIGluICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldOyBkbyBcCkBAIC05NzEsMTAgKzEwNTcsMTAgQEAKIAkgLW8gJEAgJChzcmNkaXIpL2RvYy9saWJmZmkudGV4aTsgXAogCXRoZW4gXAogCSAgcmM9MDsgXAotCSAgY2QgJChzcmNkaXIpOyBcCisJICAkKGFtX19jZCkgJChzcmNkaXIpOyBcCiAJZWxzZSBcCiAJICByYz0kJD87IFwKLQkgIGNkICQoc3JjZGlyKSAmJiBcCisJICAkKGFtX19jZCkgJChzcmNkaXIpICYmIFwKIAkgICQkcmVzdG9yZSAkJGJhY2t1cGRpci8qIGBlY2hvICIuLyRAIiB8IHNlZCAnc3xbXi9dKiQkfHwnYDsgXAogCWZpOyBcCiAJcm0gLXJmICQkYmFja3VwZGlyOyBleGl0ICQkcmMKQEAgLTEwMjgsMTYgKzExMTQsMTggQEAKIAogdW5pbnN0YWxsLWR2aS1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKERWSVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKERWSVMpJzsgdGVzdCAtbiAiJChkdmlkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGR2aWRpcikvJCRmJyI7IFwKIAkgIHJtIC1mICIkKERFU1RESVIpJChkdmlkaXIpLyQkZiI7IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1odG1sLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoSFRNTFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKEhUTUxTKSc7IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGVjaG8gIiBybSAtcmYgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCiAJICBybSAtcmYgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKIAlkb25lCkBAIC0xMDUxLDcgKzExMzksOCBAQAogCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCiAJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKIAkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSckKERFU1RESVIpJChpbmZvZGlyKScgLS1yZW1vdmUgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciOyBcCi0JICAgIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSIkKERFU1RESVIpJChpbmZvZGlyKSIgLS1yZW1vdmUgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgaWYgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9IiQoREVTVERJUikkKGluZm9kaXIpIiAtLXJlbW92ZSAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICB0aGVuIDo7IGVsc2UgdGVzdCAhIC1mICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IGV4aXQgMTsgZmk7IFwKIAkgIGRvbmU7IFwKIAllbHNlIDo7IGZpCiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKQEAgLTEwNjcsMTYgKzExNTYsMTggQEAKIAogdW5pbnN0YWxsLXBkZi1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKFBERlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBkZmRpcikvJCRmJyI7IFwKIAkgIHJtIC1mICIkKERFU1RESVIpJChwZGZkaXIpLyQkZiI7IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1wcy1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKFBTUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJQGxpc3Q9JyQoUFNTKSc7IHRlc3QgLW4gIiQocHNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBzZGlyKS8kJGYnIjsgXAogCSAgcm0gLWYgIiQoREVTVERJUikkKHBzZGlyKS8kJGYiOyBcCiAJZG9uZQpAQCAtMTA5MywxNiArMTE4NCwxOSBAQAogCSAgZm9yIGZpbGUgaW4gJCRkLyQkYmFzZSAkJGQvJCRiYXNlLVswLTldICQkZC8kJGJhc2UtWzAtOV1bMC05XSAkJGQvJCRiYXNlX2lbMC05XSAkJGQvJCRiYXNlX2lbMC05XVswLTldOyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKIAkgICAgICByZWxmaWxlPWBleHByICIkJGZpbGUiIDogIiQkZC9cKC4qXCkiYDsgXAotCSAgICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJHJlbGZpbGUgfHwgXAotCQljcCAtcCAkJGZpbGUgJChkaXN0ZGlyKS8kJHJlbGZpbGU7IFwKKwkgICAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkcmVsZmlsZSIgfHwgXAorCQljcCAtcCAkJGZpbGUgIiQoZGlzdGRpcikvJCRyZWxmaWxlIjsgXAogCSAgICBlbHNlIDo7IGZpOyBcCiAJICBkb25lOyBcCiAJZG9uZQogCiBtb3N0bHljbGVhbi1hbWluZm86CiAJLXJtIC1yZiBsaWJmZmkuYXV4IGxpYmZmaS5jcCBsaWJmZmkuY3BzIGxpYmZmaS5mbiBsaWJmZmkua3kgbGliZmZpLmxvZyBcCi0JICBsaWJmZmkucGcgbGliZmZpLnRtcCBsaWJmZmkudG9jIGxpYmZmaS50cCBsaWJmZmkudnIgXAotCSAgZG9jL2xpYmZmaS5kdmkgZG9jL2xpYmZmaS5wZGYgZG9jL2xpYmZmaS5wcyBkb2MvbGliZmZpLmh0bWwKKwkgIGxpYmZmaS5wZyBsaWJmZmkudG1wIGxpYmZmaS50b2MgbGliZmZpLnRwIGxpYmZmaS52cgorCitjbGVhbi1hbWluZm86CisJLXRlc3QgLXogImRvYy9saWJmZmkuZHZpIGRvYy9saWJmZmkucGRmIGRvYy9saWJmZmkucHMgZG9jL2xpYmZmaS5odG1sIiBcCisJfHwgcm0gLXJmIGRvYy9saWJmZmkuZHZpIGRvYy9saWJmZmkucGRmIGRvYy9saWJmZmkucHMgZG9jL2xpYmZmaS5odG1sCiAKIG1haW50YWluZXItY2xlYW4tYW1pbmZvOgogCUBsaXN0PSckKElORk9fREVQUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKQEAgLTExMTMsMjAgKzEyMDcsMjMgQEAKIGluc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKHBrZ2NvbmZpZ2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCi0JQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChwa2djb25maWdEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCi0JICAkKHBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmIjsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1wa2djb25maWdEQVRBOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kJGYiOyBcCi0JZG9uZQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwogCiAjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAogIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCkBAIC0xMTUyLDcgKzEyNDksNyBAQAogCSAgZWxzZSBcCiAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCiAJICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCiAJICB8fCBldmFsICQkZmFpbGNvbTsgXAogCWRvbmU7IFwKIAlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXApAQCAtMTE4NiwxNiArMTI4MywxNiBAQAogCSAgZWxzZSBcCiAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCiAJICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCiAJICB8fCBldmFsICQkZmFpbGNvbTsgXAogCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgogdGFncy1yZWN1cnNpdmU6CiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCiAJZG9uZQogY3RhZ3MtcmVjdXJzaXZlOgogCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCiAJZG9uZQogCiBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQpAQCAtMTIwMywxNCArMTMwMCwxNCBAQAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAogCW1raWQgLWZJRCAkJHVuaXF1ZQogdGFnczogVEFHUwogCiBUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgZmZpY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCkBAIC0xMjIyLDQ2ICsxMzE5LDUwIEBACiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAogCSAgZmk7IFwKIAlkb25lOyBcCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGZmaWNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKIAlmaQogY3RhZ3M6IENUQUdTCiBDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBmZmljb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBmZmljb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCiAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKwkgICAgICQkdW5pcXVlCiAKIEdUQUdTOgogCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCiAKIGRpc3RjbGVhbi10YWdzOgogCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCiAKIGRpc3RkaXI6ICQoRElTVEZJTEVTKQogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQotCXRlc3QgLWQgJChkaXN0ZGlyKSB8fCBta2RpciAkKGRpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCiAJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAogCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKIAlsaXN0PSckKERJU1RGSUxFUyknOyBcCkBAIC0xMjc3LDI5ICsxMzc4LDQ0IEBACiAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCiAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAogCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCiAJICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCiAJICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAogCSAgICB8fCBleGl0IDE7IFwKIAkgIGZpOyBcCiAJZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCiAJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKIAkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAogCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAogCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCiAJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCiAJICAgICAgICBkaXN0ZGlyKSBcCiAJICAgICAgfHwgZXhpdCAxOyBcCiAJICBmaTsgXApAQCAtMTMwNywxMSArMTQyMywxMiBAQAogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKIAkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAogCSAgZGlzdC1pbmZvCi0JLWZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTc3NyAtZXhlYyBjaG1vZCBhK3J3eCB7fSBcOyAtbyBcCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NzcgLWV4ZWMgY2htb2QgYStyd3gge30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCi0JfHwgY2htb2QgLVIgYStyICQoZGlzdGRpcikKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCiBkaXN0LWd6aXA6IGRpc3RkaXIKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQpAQCAtMTMyMCw2ICsxNDM3LDE0IEBACiAJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKIAkkKGFtX19yZW1vdmVfZGlzdGRpcikKIAorZGlzdC1sem1hOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6bWEgLTkgLWMgPiQoZGlzdGRpcikudGFyLmx6bWEKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwogZGlzdC10YXJaOiBkaXN0ZGlyCiAJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCiAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCkBAIC0xMzQ2LDYgKzE0NzEsMTAgQEAKIAkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAogCSoudGFyLmJ6MiopIFwKIAkgIGJ1bnppcDIgLWMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmx6bWEqKSBcCisJICB1bmx6bWEgLWMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKIAkqLnRhci5aKikgXAogCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAogCSouc2hhci5neiopIFwKQEAgLTEzNTcsOSArMTQ4NiwxMSBAQAogCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCiAJbWtkaXIgJChkaXN0ZGlyKS9faW5zdAogCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKIAlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKIAkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAotCSAgJiYgY2QgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQgXAogCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAogCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKQEAgLTEzODEsMTMgKzE1MTIsMTUgQEAKIAkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCiAJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKIAkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisJICAmJiBjZCAiJCRhbV9fY3dkIiBcCisJICB8fCBleGl0IDEKIAkkKGFtX19yZW1vdmVfZGlzdGRpcikKIAlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAogCSAgbGlzdD0nJChESVNUX0FSQ0hJVkVTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUpIHwgXAogCSAgc2VkIC1lIDFoIC1lIDFzLy4vPS9nIC1lIDFwIC1lIDF4IC1lICckJHAnIC1lICckJHgnCiBkaXN0dW5pbnN0YWxsY2hlY2s6Ci0JQGNkICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpcikgXAorCUAkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIFwKIAkmJiB0ZXN0IGAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1sZSAxIFwKIAkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAogCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXApAQCAtMTQzMiw2ICsxNTY1LDcgQEAKIAogZGlzdGNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCiAJLXJtIC1mIGRvYy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTQzOSw2ICsxNTczLDggQEAKIAktcm0gLWYgc3JjL2FscGhhLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FybS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvY3Jpcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9jcmlzLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvZnJ2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE0NzEsMTIgKzE2MDcsMTIgQEAKIAlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCiBjbGVhbjogY2xlYW4tcmVjdXJzaXZlCiAKLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAotCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCitjbGVhbi1hbTogY2xlYW4tYW1pbmZvIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KIAogZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCiAJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQorCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCiAJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncwpAQCAtMTUwMCwzNyArMTYzNiw0NSBAQAogaW5zdGFsbC1kdmktYW06ICQoRFZJUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGR2aWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGR2aWRpcikiCi0JQGxpc3Q9JyQoRFZJUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkJCRwJyAnJChERVNURElSKSQoZHZpZGlyKS8kJGYnIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiICIkKERFU1RESVIpJChkdmlkaXIpLyQkZiI7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGR2aWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGR2aWRpcikiIHx8IGV4aXQgJCQ/OyBcCiAJZG9uZQogaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCiAKIGluc3RhbGwtaHRtbC1hbTogJChIVE1MUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGh0bWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKSIKLQlAbGlzdD0nJChIVE1MUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChIVE1MUyknOyBsaXN0Mj07IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiIHx8IHRlc3QgLWQgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBpZiB0ZXN0IC1kICIkJGQkJHAiOyB0aGVuIFwKIAkgICAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCiAJICAgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiIgfHwgZXhpdCAxOyBcCiAJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcvKiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKLQkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiLyogIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiLyogIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiIgfHwgZXhpdCAkJD87IFwKIAkgIGVsc2UgXAotCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAotCSAgICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRkJCRwIjsgXAogCSAgZmk7IFwKLQlkb25lCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgZWNobyAiJCRsaXN0MiIgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGh0bWxkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmU7IH0KIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQogCiBpbnN0YWxsLWluZm8tYW06ICQoSU5GT19ERVBTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQoaW5mb2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluZm9kaXIpIgogCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCWxpc3Q9JyQoSU5GT19ERVBTKSc7IHRlc3QgLW4gIiQoaW5mb2RpcikiIHx8IGxpc3Q9OyBcCiAJZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCiAJICBjYXNlICQkZmlsZSBpbiBcCiAJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCkBAIC0xNTM4LDE4ICsxNjgyLDE5IEBACiAJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCiAJICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCiAJICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCi0gICAgICAgICAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCisJICAgICAgICAgICAgICAgJCRkLyQkZmlsZV9pWzAtOV0gJCRkLyQkZmlsZV9pWzAtOV1bMC05XSA7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAkJGlmaWxlOyB0aGVuIFwKLQkgICAgICByZWxmaWxlPWBlY2hvICIkJGlmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAotCSAgICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkaWZpbGUnICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjsgXAotCSAgICAgICQoSU5TVEFMTF9EQVRBKSAiJCRpZmlsZSIgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgICBlY2hvICIkJGlmaWxlIjsgXAogCSAgICBlbHNlIDogOyBmaTsgXAogCSAgZG9uZTsgXAotCWRvbmUKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGluZm9kaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmZvZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKIAlAJChQT1NUX0lOU1RBTEwpCiAJQGlmIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKIAkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKIAkgIGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAogCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCiAJICAgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0nJChERVNURElSKSQoaW5mb2RpciknICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjtcCkBAIC0xNTYxLDI5ICsxNzA2LDMzIEBACiBpbnN0YWxsLXBkZi1hbTogJChQREZTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQocGRmZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGRmZGlyKSIKLQlAbGlzdD0nJChQREZTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChwZGZkaXIpLyQkZiciOyBcCi0JICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAotCWRvbmUKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBkZmRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBkZmRpcikiIHx8IGV4aXQgJCQ/OyBkb25lCiBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQogCiBpbnN0YWxsLXBzLWFtOiAkKFBTUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKHBzZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocHNkaXIpIgotCUBsaXN0PSckKFBTUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBzZGlyKS8kJGYnIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiICIkKERFU1RESVIpJChwc2RpcikvJCRmIjsgXAotCWRvbmUKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocHNkaXIpIiB8fCBleGl0ICQkPzsgZG9uZQogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQogCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQogCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQotCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikKKwktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikKIAktcm0gLWYgTWFrZWZpbGUKIG1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCiAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tdnRpCkBAIC0xNjA1LDM2ICsxNzU0LDM4IEBACiAJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wZGYtYW0gXAogCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbQogCi0uTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1zdHJpcAorLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQogCiAuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKLQlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAotCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIFwKLQlkaXN0LWluZm8gZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIFwKLQlkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tYW1pbmZvIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kdmktYW0gXAotCXVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSB1bmluc3RhbGwtcHMtYW0KKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWFtaW5mbyBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBkaXN0LWFsbCBcCisJZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1pbmZvIGRpc3QtbHptYSBkaXN0LXNoYXIgZGlzdC10YXJaIFwKKwlkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2djb25maWdEQVRBIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWFtaW5mbyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1haW50YWluZXItY2xlYW4tdnRpIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWFtaW5mbyBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWR2aS1hbSB1bmluc3RhbGwtaHRtbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wZGYtYW0gXAorCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbQogCiAKICMgTm8gaW5zdGFsbC1odG1sIG9yIGluc3RhbGwtcGRmIHN1cHBvcnQgaW4gYXV0b21ha2UgeWV0CiAuUEhPTlk6IGluc3RhbGwtaHRtbCBpbnN0YWxsLXBkZgogaW5zdGFsbC1odG1sOgogaW5zdGFsbC1wZGY6CisKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKaW5kZXggYTkzNjk2Mi4uMTY3ZGU0MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKQEAgLTEsNyArMSw3IEBACiBTdGF0dXMKID09PT09PQogCi1saWJmZmktMy4wLjUgd2FzIHJlbGVhc2VkIG9uIEFwcmlsIDMsIDIwMDguIENoZWNrIHRoZSBsaWJmZmkgd2ViCitsaWJmZmktMy4wLjEwIHdhcyByZWxlYXNlZCBvbiBYWFhYWFhYWFhYLCAyMDEwLiBDaGVjayB0aGUgbGliZmZpIHdlYgogcGFnZSBmb3IgdXBkYXRlczogPFVSTDpodHRwOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz4uCiAKIApAQCAtOSwyNyArOSwyNyBAQAogPT09PT09PT09PT09PT09CiAKIENvbXBpbGVycyBmb3IgaGlnaCBsZXZlbCBsYW5ndWFnZXMgZ2VuZXJhdGUgY29kZSB0aGF0IGZvbGxvdyBjZXJ0YWluCi1jb252ZW50aW9ucy4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSBuZWNlc3NhcnksIGluIHBhcnQsIGZvciBzZXBhcmF0ZQotY29tcGlsYXRpb24gdG8gd29yay4gIE9uZSBzdWNoIGNvbnZlbnRpb24gaXMgdGhlICJjYWxsaW5nIGNvbnZlbnRpb24iLgotVGhlICJjYWxsaW5nIGNvbnZlbnRpb24iIGlzIGEgc2V0IG9mIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGNvbXBpbGVyCi1hYm91dCB3aGVyZSBmdW5jdGlvbiBhcmd1bWVudHMgd2lsbCBiZSBmb3VuZCBvbiBlbnRyeSB0byBhIGZ1bmN0aW9uLgotQSAiY2FsbGluZyBjb252ZW50aW9uIiBhbHNvIHNwZWNpZmllcyB3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIGZvciBhCi1mdW5jdGlvbiBpcyBmb3VuZC4KK2NvbnZlbnRpb25zLiBUaGVzZSBjb252ZW50aW9ucyBhcmUgbmVjZXNzYXJ5LCBpbiBwYXJ0LCBmb3Igc2VwYXJhdGUKK2NvbXBpbGF0aW9uIHRvIHdvcmsuIE9uZSBzdWNoIGNvbnZlbnRpb24gaXMgdGhlICJjYWxsaW5nCitjb252ZW50aW9uIi4gVGhlICJjYWxsaW5nIGNvbnZlbnRpb24iIGlzIGVzc2VudGlhbGx5IGEgc2V0IG9mCithc3N1bXB0aW9ucyBtYWRlIGJ5IHRoZSBjb21waWxlciBhYm91dCB3aGVyZSBmdW5jdGlvbiBhcmd1bWVudHMgd2lsbAorYmUgZm91bmQgb24gZW50cnkgdG8gYSBmdW5jdGlvbi4gQSAiY2FsbGluZyBjb252ZW50aW9uIiBhbHNvIHNwZWNpZmllcword2hlcmUgdGhlIHJldHVybiB2YWx1ZSBmb3IgYSBmdW5jdGlvbiBpcyBmb3VuZC4KIAogU29tZSBwcm9ncmFtcyBtYXkgbm90IGtub3cgYXQgdGhlIHRpbWUgb2YgY29tcGlsYXRpb24gd2hhdCBhcmd1bWVudHMKLWFyZSB0byBiZSBwYXNzZWQgdG8gYSBmdW5jdGlvbi4gIEZvciBpbnN0YW5jZSwgYW4gaW50ZXJwcmV0ZXIgbWF5IGJlCithcmUgdG8gYmUgcGFzc2VkIHRvIGEgZnVuY3Rpb24uIEZvciBpbnN0YW5jZSwgYW4gaW50ZXJwcmV0ZXIgbWF5IGJlCiB0b2xkIGF0IHJ1bi10aW1lIGFib3V0IHRoZSBudW1iZXIgYW5kIHR5cGVzIG9mIGFyZ3VtZW50cyB1c2VkIHRvIGNhbGwKLWEgZ2l2ZW4gZnVuY3Rpb24uICBMaWJmZmkgY2FuIGJlIHVzZWQgaW4gc3VjaCBwcm9ncmFtcyB0byBwcm92aWRlIGEKK2EgZ2l2ZW4gZnVuY3Rpb24uIExpYmZmaSBjYW4gYmUgdXNlZCBpbiBzdWNoIHByb2dyYW1zIHRvIHByb3ZpZGUgYQogYnJpZGdlIGZyb20gdGhlIGludGVycHJldGVyIHByb2dyYW0gdG8gY29tcGlsZWQgY29kZS4KIAogVGhlIGxpYmZmaSBsaWJyYXJ5IHByb3ZpZGVzIGEgcG9ydGFibGUsIGhpZ2ggbGV2ZWwgcHJvZ3JhbW1pbmcKLWludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8KK2ludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgY29udmVudGlvbnMuIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0bwogY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuCi10aW1lLgordGltZS4gIAogCiBGRkkgc3RhbmRzIGZvciBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZS4gIEEgZm9yZWlnbiBmdW5jdGlvbgogaW50ZXJmYWNlIGlzIHRoZSBwb3B1bGFyIG5hbWUgZm9yIHRoZSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgY29kZQotd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gIFRoZQord3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gVGhlCiBsaWJmZmkgbGlicmFyeSByZWFsbHkgb25seSBwcm92aWRlcyB0aGUgbG93ZXN0LCBtYWNoaW5lIGRlcGVuZGVudAogbGF5ZXIgb2YgYSBmdWxseSBmZWF0dXJlZCBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZS4gQSBsYXllciBtdXN0CiBleGlzdCBhYm92ZSBsaWJmZmkgdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yIHZhbHVlcyBwYXNzZWQKQEAgLTM5LDM2ICszOSw1OCBAQAogU3VwcG9ydGVkIFBsYXRmb3JtcwogPT09PT09PT09PT09PT09PT09PQogCi1MaWJmZmkgaGFzIGJlZW4gcG9ydGVkIHRvIG1hbnkgZGlmZmVyZW50IHBsYXRmb3JtcywgYWx0aG91Z2ggdGhpcwotcmVsZWFzZSB3YXMgb25seSB0ZXN0ZWQgb246CitMaWJmZmkgaGFzIGJlZW4gcG9ydGVkIHRvIG1hbnkgZGlmZmVyZW50IHBsYXRmb3Jtcy4KK0ZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMgYW5kIHRlc3Rpbmcgc3RhdHVzLCBwbGVhc2UKK3JlZmVyIHRvIHRoZSB3aWtpIHBhZ2UgaGVyZToKIAotICAgICBhcm0gb2FiaSBsaW51eAotICAgICBhcm0gZWFiaSBsaW51eAotICAgICBocHBhIGxpbnV4Ci0gICAgIG1pcHMgbzMyIGxpbnV4IChsaXR0bGUgZW5kaWFuKQotICAgICBwb3dlcnBjIGRhcndpbgotICAgICBwb3dlcnBjNjQgbGludXgKLSAgICAgc3BhcmMgc29sYXJpcwotICAgICBzcGFyYzY0IHNvbGFyaXMKLSAgICAgeDg2IGN5Z3dpbgotICAgICB4ODYgZGFyd2luCi0gICAgIHg4NiBmcmVlYnNkCi0gICAgIHg4NiBsaW51eAotICAgICB4ODYgb3BlbmJzZAotICAgICB4ODYtNjQgZGFyd2luCi0gICAgIHg4Ni02NCBsaW51eAotICAgICB4ODYtNjQgT1MgWAotICAgICB4ODYtNjQgZnJlZWJzZAotICAgICAKKyBodHRwOi8vd3d3Lm1veGllbG9naWMub3JnL3dpa2kvaW5kZXgucGhwP3RpdGxlPUxpYmZmaV8zLjAuMTAKKworQXQgdGhlIHRpbWUgb2YgcmVsZWFzZSwgdGhlIGZvbGxvd2luZyBiYXNpYyBjb25maWd1cmF0aW9ucyBoYXZlIGJlZW4KK3Rlc3RlZDoKKworfC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgQXJjaGl0ZWN0dXJlIHwgT3BlcmF0aW5nIFN5c3RlbSB8Cit8LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBBbHBoYSAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgQWxwaGEgICAgICAgIHwgVHJ1NjQgICAgICAgICAgICB8Cit8IEFSTSAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBBVlIzMiAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgSFBQQSAgICAgICAgIHwgSFBVWCAgICAgICAgICAgICB8Cit8IElBLTY0ICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBNSVBTICAgICAgICAgfCBJUklYICAgICAgICAgICAgIHwKK3wgTUlQUyAgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IE1JUFM2NCAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBQb3dlclBDICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgUG93ZXJQQyAgICAgIHwgTWFjIE9TWCAgICAgICAgICB8Cit8IFBvd2VyUEMgICAgICB8IEZyZWVCU0QgICAgICAgICAgfAorfCBQb3dlclBDNjQgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgUzM5MCAgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFMzOTBYICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTUEFSQyAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgU1BBUkMgICAgICAgIHwgU29sYXJpcyAgICAgICAgICB8Cit8IFNQQVJDNjQgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTUEFSQzY0ICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IGtGcmVlQlNEICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgTWFjIE9TWCAgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IE9wZW5CU0QgICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBTb2xhcmlzICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgV2luZG93cy9DeWd3aW4gICB8Cit8IFg4NiAgICAgICAgICB8IFdpbmRvd3MvTWluZ1cgICAgfAorfCBYODYtNjQgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwKK3wgWDg2LTY0ICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFg4Ni02NCAgICAgICB8IE9wZW5CU0QgICAgICAgICAgfAorfCBYODYtNjQgICAgICAgfCBXaW5kb3dzL01pbmdXICAgIHwKK3wtLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS18CisKIFBsZWFzZSBzZW5kIGFkZGl0aW9uYWwgcGxhdGZvcm0gdGVzdCByZXN1bHRzIHRvCi1saWJmZmktZGlzY3Vzc0Bzb3VyY2V3YXJlLm9yZy4KK2xpYmZmaS1kaXNjdXNzQHNvdXJjZXdhcmUub3JnIGFuZCBmZWVsIGZyZWUgdG8gdXBkYXRlIHRoZSB3aWtpIHBhZ2UKK2Fib3ZlLgogCiBJbnN0YWxsaW5nIGxpYmZmaQogPT09PT09PT09PT09PT09PT0KIAotW05vdGU6IGJlZm9yZSBhY3R1YWxseSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBpbnN0YWxsYXRpb24gc3RlcHMsCi0geW91IG1heSB3aXNoIHRvIHJlYWQgdGhlICJQbGF0Zm9ybSBTcGVjaWZpYyBOb3RlcyIgYmVsb3cuXQotCiBGaXJzdCB5b3UgbXVzdCBjb25maWd1cmUgdGhlIGRpc3RyaWJ1dGlvbiBmb3IgeW91ciBwYXJ0aWN1bGFyCiBzeXN0ZW0uIEdvIHRvIHRoZSBkaXJlY3RvcnkgeW91IHdpc2ggdG8gYnVpbGQgbGliZmZpIGluIGFuZCBydW4gdGhlCiAiY29uZmlndXJlIiBwcm9ncmFtIGZvdW5kIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgbGliZmZpIHNvdXJjZQpAQCAtODcsNiArMTA5LDE0IEBACiBhcmUgdXNpbmcgUHVyaWZ5IHdpdGggbGliZmZpLiBPbmx5IHVzZSB0aGlzIHN3aXRjaCB3aGVuIHVzaW5nIAogUHVyaWZ5LCBhcyBpdCB3aWxsIHNsb3cgZG93biB0aGUgbGlicmFyeS4KIAorSXQncyBhbHNvIHBvc3NpYmxlIHRvIGJ1aWxkIGxpYmZmaSBvbiBXaW5kb3dzIHBsYXRmb3JtcyB3aXRoCitNaWNyb3NvZnQncyBWaXN1YWwgQysrIGNvbXBpbGVyLiAgSW4gdGhpcyBjYXNlLCB1c2UgdGhlIG1zdmNjLnNoCit3cmFwcGVyIHNjcmlwdCBkdXJpbmcgY29uZmlndXJhdGlvbiBsaWtlIHNvOgorCitwYXRoL3RvL2NvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIFwKKwlDQz1wYXRoL3RvL21zdmNjLnNoIExEPWxpbmsgXAorCUNQUD1cImNsIC1ub2xvZ28gLUVQXCIKKwogQ29uZmlndXJlIGhhcyBtYW55IG90aGVyIG9wdGlvbnMuIFVzZSAiY29uZmlndXJlIC0taGVscCIgdG8gc2VlIHRoZW0gYWxsLgogCiBPbmNlIGNvbmZpZ3VyZSBoYXMgZmluaXNoZWQsIHR5cGUgIm1ha2UiLiBOb3RlIHRoYXQgeW91IG11c3QgYmUgdXNpbmcKQEAgLTk4LDY2ICsxMjgsMzUgQEAKIFRvIGluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcywgdHlwZSAibWFrZSBpbnN0YWxsIi4KIAogCi1QbGF0Zm9ybSBTcGVjaWZpYyBOb3RlcwotPT09PT09PT09PT09PT09PT09PT09PT0KLQotCU1JUFMgLSBJcml4IDUuMyAmIDYueAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Jcml4IDYuMiBhbmQgYmV0dGVyIHN1cHBvcnRzIHRocmVlIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zOiBvMzIsCi1uMzIgYW5kIG42NC4gQ3VycmVudGx5LCBsaWJmZmkgb25seSBzdXBwb3J0cyBib3RoIG8zMiBhbmQgbjMyIHVuZGVyCi1Jcml4IDYueCwgYnV0IG9ubHkgbzMyIHVuZGVyIElyaXggNS4zLiBMaWJmZmkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlCi1jb25maWd1cmVkIGZvciB3aGljaGV2ZXIgY2FsbGluZyBjb252ZW50aW9uIGl0IHdhcyBidWlsdCBmb3IuCi0KLUJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgdHJ5IHRvIGJ1aWxkIGxpYmZmaSB3aXRoIHRoZSBHTlUKLWRldmVsb3BtZW50IHRvb2xzLiBUbyBidWlsZCBsaWJmZmkgd2l0aCB0aGUgU0dJIGRldmVsb3BtZW50IHRvb2xzLCBzZXQKLXRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDQyB0byBlaXRoZXIgImNjIC0zMiIgb3IgImNjIC1uMzIiIGJlZm9yZQotcnVubmluZyBjb25maWd1cmUgdW5kZXIgSXJpeCA2LnggKGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSB3YW50IGFuIG8zMgotb3IgbjMyIGxpYnJhcnkpLCBvciBqdXN0ICJjYyIgZm9yIElyaXggNS4zLgotCi1XaXRoIHRoZSBuMzIgY2FsbGluZyBjb252ZW50aW9uLCB3aGVuIHJldHVybmluZyBzdHJ1Y3R1cmVzIHNtYWxsZXIKLXRoYW4gMTYgYnl0ZXMsIGJlIHN1cmUgdG8gcHJvdmlkZSBhbiBSVkFMVUUgdGhhdCBpcyA4IGJ5dGUgYWxpZ25lZC4KLUhlcmUncyBvbmUgd2F5IG9mIGZvcmNpbmcgdGhpczoKLQotCWRvdWJsZSBzdHJ1Y3Rfc3RvcmFnZVsyXTsKLQlteV9zbWFsbF9zdHJ1Y3QgKnMgPSAobXlfc21hbGxfc3RydWN0ICopIHN0cnVjdF9zdG9yYWdlOyAgCi0JLyogVXNlIHMgZm9yIFJWQUxVRSAqLwotCi1JZiB5b3UgZG9uJ3QgZG8gdGhpcyB5b3UgYXJlIGxpYWJsZSB0byBnZXQgc3B1cmlvdXMgYnVzIGVycm9ycy4gCi0KLSJsb25nIGxvbmciIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCi0KLVlvdSBtdXN0IHVzZSBHTlUgTWFrZSB0byBidWlsZCBsaWJmZmkgb24gU0dJIHBsYXRmb3Jtcy4KLQotCi0JUG93ZXJQQyBTeXN0ZW0gViBBQkkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVyZSBhcmUgdHdvIGBTeXN0ZW0gViBBQkkncyB3aGljaCBsaWJmZmkgaW1wbGVtZW50cyBmb3IgUG93ZXJQQy4KLVRoZXkgZGlmZmVyIG9ubHkgaW4gaG93IHNtYWxsIHN0cnVjdHVyZXMgYXJlIHJldHVybmVkIGZyb20gZnVuY3Rpb25zLgotCi1JbiB0aGUgRkZJX1NZU1YgdmVyc2lvbiwgc3RydWN0dXJlcyB0aGF0IGFyZSA4IGJ5dGVzIG9yIHNtYWxsZXIgYXJlCi1yZXR1cm5lZCBpbiByZWdpc3RlcnMuICBUaGlzIGlzIHdoYXQgR0NDIGRvZXMgd2hlbiBpdCBpcyBjb25maWd1cmVkCi1mb3Igc29sYXJpcywgYW5kIGlzIHdoYXQgdGhlIFN5c3RlbSBWIEFCSSBJIGhhdmUgKGRhdGVkIFNlcHRlbWJlcgotMTk5NSkgc2F5cy4KLQotSW4gdGhlIEZGSV9HQ0NfU1lTViB2ZXJzaW9uLCBhbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQgdGhlIHNhbWUgd2F5OgotYnkgcGFzc2luZyBhIHBvaW50ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbi4gIFRoaXMgaXMKLXdoYXQgR0NDIGRvZXMgd2hlbiBpdCBpcyBjb25maWd1cmVkIGZvciBsaW51eCBvciBhIGdlbmVyaWMgc3lzdgotdGFyZ2V0LgotCi1FR0NTIDEuMC4xIChhbmQgcHJvYmFibHkgb3RoZXIgdmVyc2lvbnMgb2YgRUdDUy9HQ0MpIGFsc28gaGFzIGEKLWluY29uc2lzdGVuY3kgd2l0aCB0aGUgU3lzViBBQkk6IFdoZW4gYSBwcm9jZWR1cmUgaXMgY2FsbGVkIHdpdGggbWFueQotZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLCBzb21lIG9mIHRoZW0gZ2V0IHB1dCBvbiB0aGUgc3RhY2suICBUaGV5IGFyZQotYWxsIHN1cHBvc2VkIHRvIGJlIHN0b3JlZCBpbiBkb3VibGUtcHJlY2lzaW9uIGZvcm1hdCwgZXZlbiBpZiB0aGV5IGFyZQotb25seSBzaW5nbGUtcHJlY2lzaW9uLCBidXQgRUdDUyBzdG9yZXMgc2luZ2xlLXByZWNpc2lvbiBhcmd1bWVudHMgYXMKLXNpbmdsZS1wcmVjaXNpb24gYW55d2F5LiAgVGhpcyBjYXVzZXMgb25lIHRlc3QgdG8gZmFpbCAodGhlIGBtYW55Ci1hcmd1bWVudHMnIHRlc3QpLgotCi0KIEhpc3RvcnkKID09PT09PT0KIAorU2VlIHRoZSBDaGFuZ2VMb2cgZmlsZXMgZm9yIGRldGFpbHMuCisKKzMuMC4xMCA/Pz8tPz8tPz8KKyAgICAgICAgRml4IHRoZSBONjQgYnVpbGQgb24gbWlwcy1zZ2ktaXJpeDYuNS4KKwlUZXN0c3VpdGUgZml4ZXMgZm9yIFRydTY0IFVuaXguCisJRW5hYmxlIGJ1aWxkcyB3aXRoIE1pY3Jvc29mdCdzIGNvbXBpbGVyLgorCUVuYWJsZSB4ODYgYnVpbGRzIHdpdGggU3VuJ3MgY29tcGlsZXIuCisKKzMuMC45IERlYy0zMS0wOQorICAgICAgICBBZGQgQVZSMzIgYW5kIHdpbjY0IHBvcnRzLiAgQWRkIEFSTSBzb2Z0ZnAgc3VwcG9ydC4KKwlNYW55IGZpeGVzIGZvciBBSVgsIFNvbGFyaXMsIEhQLVVYLCAqQlNELgorCVNldmVyYWwgUG93ZXJQQyBhbmQgeDg2LTY0IGJ1ZyBmaXhlcy4KKwlCdWlsZCBETEwgZm9yIHdpbmRvd3MuCisKKzMuMC44IERlYy0xOS0wOAorICAgICAgICBBZGQgKkJTRCwgQmVPUywgYW5kIFBBLUxpbnV4IHN1cHBvcnQuCisKKzMuMC43IE5vdi0xMS0wOAorICAgICAgICBGaXggZm9yIHBwYyBGcmVlQlNELgorCSh0aGFua3MgdG8gQW5kcmVhcyBUb2JsZXIpCisKKzMuMC42IEp1bC0xNy0wOAorICAgICAgICBGaXggZm9yIGNsb3N1cmVzIG9uIHNoLgorCU1hcmsgdGhlIHNoL3NoNjQgc3RhY2sgYXMgbm9uLWV4ZWN1dGFibGUuCisJKGJvdGggdGhhbmtzIHRvIEtheiBLb2ppbWEpCisKIDMuMC41IEFwci0zLTA4CiAgICAgICAgIEZpeCBsaWJmZmkucGMgZmlsZS4KIAlGaXggI2RlZmluZSBBUk0gZm9yIEljZWRUZWEgdXNlcnMuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKaW5kZXggNmIzODMyNC4uYzhlNTI2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNApAQCAtMSw3ICsxLDcgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjEwIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExLjEgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSMgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xMSw2NTgwICsxMSwxNSBAQAogIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCiAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIAotbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAotW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KLVlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAoteW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42NV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQogCi0jIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQotCi0jIHNlcmlhbCA1MSBBQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX1BST1ZJREVfSUZFTFNFKE1BQ1JPLU5BTUUsIElGLVBST1ZJREVELCBJRi1OT1QtUFJPVklERUQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQgYnkgQXV0b2NvbmYsIGRlZmluZSBpdCBoZXJlLgotbTRfaWZkZWYoW0FDX1BST1ZJREVfSUZFTFNFXSwKLSAgICAgICAgIFtdLAotICAgICAgICAgW200X2RlZmluZShbQUNfUFJPVklERV9JRkVMU0VdLAotCSAgICAgICAgIFttNF9pZmRlZihbQUNfUFJPVklERV8kMV0sCi0JCSAgICAgICAgICAgWyQyXSwgWyQzXSldKV0pCi0KLQotIyBBQ19QUk9HX0xJQlRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtfQUNfUFJPR19MSUJUT09MXSlkbmwKLWRubCBJZiBBQ19QUk9HX0NYWCBoYXMgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLCBydW4gQUNfTElCVE9PTF9DWFgKLWRubCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlLCBob29rIGl0IGluIGF0IHRoZSBlbmQgb2YgQUNfUFJPR19DWFguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gICAgW0FDX0xJQlRPT0xfQ1hYXSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbQUNfTElCVE9PTF9DWFgKLSAgXSldKQotZG5sIEFuZCBhIHNpbWlsYXIgc2V0dXAgZm9yIEZvcnRyYW4gNzcgc3VwcG9ydAotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAotICAgIFtBQ19MSUJUT09MX0Y3N10sCi0gICAgW2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0FDX0xJQlRPT0xfRjc3Ci1dKV0pCi0KLWRubCBRdW90ZSBBXVtNX1BST0dfR0NKIHNvIHRoYXQgYWNsb2NhbCBkb2Vzbid0IGJyaW5nIGl0IGluIG5lZWRsZXNzbHkuCi1kbmwgSWYgZWl0aGVyIEFDX1BST0dfR0NKIG9yIEFdW01fUFJPR19HQ0ogaGF2ZSBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1bgotZG5sIEFDX0xJQlRPT0xfR0NKIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBib3RoLgotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAotICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKLSAgICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSwKLQlbQUNfTElCVE9PTF9HQ0pdLAotICAgICAgW2lmZGVmKFtBQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pCi0gICAgICAgaWZkZWYoW0FdW01fUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbTFRfQUNfUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbTFRfQUNfUFJPR19HQ0pdLAotCQlkZWZuKFtMVF9BQ19QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKV0pXSkKLV0pXSkjIEFDX1BST0dfTElCVE9PTAotCi0KLSMgX0FDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0sCi1bQUNfUkVRVUlSRShbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9DWFhdKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfRjc3XSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0dDSl0pZG5sCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi1BQ19TVUJTVChMSUJUT09MKWRubAotCi0jIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCi1kZWZpbmUoW0FDX1BST0dfTElCVE9PTF0sIFtdKQotXSkjIF9BQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX0xJQlRPT0xfU0VUVVAKLSMgLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdLAotW0FDX1BSRVJFUSgyLjUwKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NIQVJFRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU1RBVElDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19MRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTk1dKWRubAotCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAotQUNfUkVRVUlSRShbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKWRubAotIyBBdXRvY29uZiAyLjEzJ3MgQUNfT0JKRVhUIGFuZCBBQ19FWEVFWFQgbWFjcm9zIG9ubHkgd29ya3MgZm9yIEMgY29tcGlsZXJzIQotQUNfUkVRVUlSRShbQUNfT0JKRVhUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VYRUVYVF0pZG5sCi1kbmwKLQotQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLUFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotQUNfTElCVE9PTF9PQkpESVIKLQotQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCi1fTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSAxcy9eWC8vJwotW3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLVtkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgotCi1BQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCi0KLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKLQotIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Ci10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLXRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCi0KLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi1maQotCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLWZpbGVfbWFnaWMqKQotICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCi0gICAgQUNfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9ETE9QRU5dLCBlbmFibGVfZGxvcGVuPXllcywgZW5hYmxlX2Rsb3Blbj1ubykKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1lbmFibGVfd2luMzJfZGxsPXllcywgZW5hYmxlX3dpbjMyX2RsbD1ubykKLQotQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotQUNfQVJHX1dJVEgoW3BpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKLQlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAotICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9Ci1BQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLV9MVF9BQ19UQUdDT05GSUcKLV0pIyBBQ19MSUJUT09MX1NFVFVQCi0KLQotIyBfTFRfQUNfU1lTX0NPTVBJTEVSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotXSkjIF9MVF9BQ19TWVNfQ09NUElMRVIKLQotCi0jIF9MVF9DQ19CQVNFTkFNRShDQykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1BQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSwKLVtmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLV0pCi0KLQotIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi1BQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmldLFtdKQotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi1dKSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCi0KLSMgX0xUX0FDX1NIRUxMX0lOSVQoQVJHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdLAotW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwKLQkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCi0JIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKLSQxCi1BQ19ESVZFUlRfUE9QCi1dKSMgX0xUX0FDX1NIRUxMX0lOSVQKLQotCi0jIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAotIyB3aWxsIGZpbmQgYW4gZWNobyBjb21tYW5kIHdoaWNoIGRvZXNuJ3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwKLVtfTFRfQUNfU0hFTExfSU5JVChbCi0jIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi1jYXNlIFgkRUNITyBpbgotWCotLWZhbGxiYWNrLWVjaG8pCi0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCi0gIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKLSAgOzsKLWVzYWMKLQotZWNobz0ke0VDSE8tZWNob30KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCi0gIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCi0gIDoKLWVsc2UKLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgotICBleGVjICRTSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLWZpCi0KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KLSAgc2hpZnQKLSAgY2F0IDw8RU9GCi1bJF0qCi1FT0YKLSAgZXhpdCAwCi1maQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKLQlleHBvcnQgQ09ORklHX1NIRUxMCi0JU0hFTEw9IiRDT05GSUdfU0hFTEwiCi0JZXhwb3J0IFNIRUxMCi0JZWNobz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbHNlCi0JIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KLQlwcmV2PToKLQotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFxbJF0wIC0tZmFsbGJhY2stZWNobyIKLWZpCi0KLUFDX1NVQlNUKEVDSE8pCi1dKV0pIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi0KLSMgX0xUX0FDX0xPQ0sKLSMgLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTE9DS10sCi1bQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqMzItYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLSAgICAgICAgICA7OwotICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTB4LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBsaWJzdWZmPTY0Ci0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkwKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCi0gICAgW0FDX0xBTkdfUFVTSChDKQotICAgICBBQ19UUllfTElOSyhbXSxbXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKLSAgICAgQUNfTEFOR19QT1BdKQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgotICBmaQotICA7Owotc3BhcmMqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKSAgICBMRD0iJHtMRC1sZH0gLTY0IiA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVsqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiopCi0gIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCi0gIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKLSAgOzsKLSAgXSkKLWVzYWMKLQotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLV0pIyBfTFRfQUNfTE9DSwotCi0KLSMgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgaWZlbHNlKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQotZmkKLV0pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICQyPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQ0XSwgLCA6LCBbJDRdKQotZWxzZQotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi1maQotXSkjIEFDX0xJQlRPT0xfTElOS0VSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sCi1bIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWyAJXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm9uZSkKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLQotCi0jIF9MVF9BQ19DSEVDS19ETEZDTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAotW0FDX0NIRUNLX0hFQURFUlMoZGxmY24uaClkbmwKLV0pIyBfTFRfQUNfQ0hFQ0tfRExGQ04KLQotCi0jIF9MVF9BQ19UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIFskNF0KLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICAgIGV4aXQgKHN0YXR1cyk7Ci19XQotRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICAkMwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLV0pIyBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGCi0KLQotIyBBQ19MSUJUT09MX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKWRubAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICA7OwotCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICBdKQotICAgOzsKLQotICAqKQotICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKLQkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSwKLQlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKLQkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKLQkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCi0JCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKLQkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAotCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAotCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCi0JCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSkKLQkgICAgICBdKQotCSAgICBdKQotCSAgXSkKLQldKQotICAgICAgXSkKLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KLSAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLSAgICAJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKLSAgICAgIF0pCi0gICAgZmkKLQotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DQ19DX08oW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotXSkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ0NfQ19PCi0KLQotIyBBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xPQ0tdKWRubAotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCi0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUwotCi0KLSMgQUNfTElCVE9PTF9PQkpESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKLVtybSAtZiAubGlicyAyPi9kZXYvbnVsbAotbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLmxpYnM7IHRoZW4KLSAgbHRfY3Zfb2JqZGlyPS5saWJzCi1lbHNlCi0gICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCi0gIGx0X2N2X29iamRpcj1fbGlicwotZmkKLXJtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi1dKSMgQUNfTElCVE9PTF9PQkpESVIKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLAotW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQotaWYgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fCBcCi0gICB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fCBcCi0gICB0ZXN0ICJYJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAotZmkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKLQotaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotXSkjIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRICi0KLQotIyBBQ19MSUJUT09MX1NZU19MSUJfU1RSSVAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwKLVtzdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgZGFyd2luKikKLSAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgICBlbHNlCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLWZpCi0gICAgICAgOzsKLSAgICopCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotCi0KLSMgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1tNF9pZigkMSxbXSxbCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwotICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7Ci0gIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgZmkKLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCi0gIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAotICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsc2UKLSAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAotCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgotICAgIGZpCi0gIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJwotQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewotICBsdF9mb289IiI7Ci0gIGx0X2NvdW50PTA7Ci0gIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7Ci0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewotICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKLSAgICAgICAgbHRfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbHRfY291bnQtLTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KLSAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Ci19J2AKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF9zZWFyY2hfcGF0aF9zcGVjYAotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maV0pCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotICBtNF9pZihbJDFdLCBbXSxbCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKSAKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLV0pIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotCi0KLSMgX0xUX0FDX1RBR0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQVJHX1dJVEgoW3RhZ3NdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXRhZ3NAPDpAPVRBR1NAOj5AXSwKLSAgICAgICAgW2luY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBAPDpAYXV0b21hdGljQDo+QF0pXSwKLSAgICBbdGFnbmFtZXM9IiR3aXRodmFsIl0pCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgZXhpc3RdKQotICBmaQotCi0gIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKLSAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdF0pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1dBUk4oW3VzaW5nIGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gYCRvZmlsZSddKQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgotICBmaQotCi0gICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgotICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgotICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6W1stX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dXTo6ZydgIGluCi0gICAgIiIpIDs7Ci0gICAgKikgIEFDX01TR19FUlJPUihbaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgZXNhYwotCi0gICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKLSAgICB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoW3RhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0c10pCi0gICAgZmkKLQotICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgotICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDWFgpCi0JaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLQkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0JICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBGNzcpCi0JaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0JQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCTs7Ci0KLSAgICAgICopCi0JQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICBBQ19NU0dfRVJST1IoW3VuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLl0pCi0gIGZpCi1maQotXSkjIF9MVF9BQ19UQUdDT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfRExPUEVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBjaGVja3MgZm9yIGRsb3BlbiBzdXBwb3J0Ci1BQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAotIFtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9ETE9QRU4KLQotCi0jIEFDX0xJQlRPT0xfV0lOMzJfRExMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGRlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBETExzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAotW0FDX0JFRk9SRShbJDBdLCBbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLQotCi0jIEFDX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3NoYXJlZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zaGFyZWQ9XUFDX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU0hBUkVECi0KLQotIyBBQ19ESVNBQkxFX1NIQVJFRAotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc2hhcmVkIGZsYWcgdG8gLS1kaXNhYmxlLXNoYXJlZAotQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU0hBUkVEKG5vKQotXSkjIEFDX0RJU0FCTEVfU0hBUkVECi0KLQotIyBBQ19FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAotW2RlZmluZShbQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zdGF0aWM9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU1RBVElDCi0KLQotIyBBQ19ESVNBQkxFX1NUQVRJQwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc3RhdGljIGZsYWcgdG8gLS1kaXNhYmxlLXN0YXRpYwotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU1RBVElDKG5vKQotXSkjIEFDX0RJU0FCTEVfU1RBVElDCi0KLQotIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAotW2RlZmluZShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XUFDX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgdG8gLS1kaXNhYmxlLWZhc3QtaW5zdGFsbAotQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMKG5vKQotXSkjIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19MSUJUT09MX1BJQ01PREUoW01PREVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZwotIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAotcGljX21vZGU9aWZlbHNlKCQjLDEsJDEsZGVmYXVsdCkKLV0pIyBBQ19MSUJUT09MX1BJQ01PREUKLQotCi0jIEFDX1BST0dfRUdSRVAKLSMgLS0tLS0tLS0tLS0tLQotIyBUaGlzIGlzIHByZWRlZmluZWQgc3RhcnRpbmcgd2l0aCBBdXRvY29uZiAyLjU0LCBzbyB0aGlzIGNvbmRpdGlvbmFsCi0jIGRlZmluaXRpb24gY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIEF1dG9jb25mIDIuNTQgb3IgbGF0ZXIuCi1tNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLCBbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgZWdyZXBdLCBbYWNfY3ZfcHJvZ19lZ3JlcF0sCi0gICBbaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmldKQotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0gQUNfU1VCU1QoW0VHUkVQXSkKLV0pXSkKLQotCi0jIEFDX1BBVEhfVE9PTF9QUkVGSVgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKLVtjYXNlICRNQUdJQ19DTUQgaW4KLVtbXFwvKl0gfCAgPzpbXFwvXSpdKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1kbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KLWRubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKLWRubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCi0gIGFjX2R1bW15PSJpZmVsc2UoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLQkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotRU9GCi0JICBmaSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgotICA7OwotZXNhY10pCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLWlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1dKSMgQUNfUEFUSF9UT09MX1BSRUZJWAotCi0KLSMgQUNfUEFUSF9NQUdJQwotIyAtLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5Ci1BQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10sCi1bQUNfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi1pZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICBBQ19QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLV0pIyBBQ19QQVRIX01BR0lDCi0KLQotIyBBQ19QUk9HX0xECi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgotQUNfREVGVU4oW0FDX1BST0dfTERdLAotW0FDX0FSR19XSVRIKFtnbnUtbGRdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCi0JW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCi0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCi0gICAgW3dpdGhfZ251X2xkPW5vXSkKLUFDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQotICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQotZWxzZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKLWZpCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKLVtpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJExEKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLXRlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCi1BQ19QUk9HX0xEX0dOVQotXSkjIEFDX1BST0dfTEQKLQotCi0jIEFDX1BST0dfTERfR05VCi0jIC0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIEFDX1BST0dfTERfR05VCi0KLQotIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAotICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCi1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi1dKSMgQUNfUFJPR19MRF9SRUxPQURfRkxBRwotCi0KLSMgQUNfREVQTElCU19DSEVDS19NRVRIT0QKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcwotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwKLVtBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAotW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDQqIHwgYWl4NSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJlb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ic2RpW1s0NV1dKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotICA7OwotCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotXSkKLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLV0pIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotCi0KLSMgQUNfUFJPR19OTQotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtBQ19QUk9HX05NXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC1jb21wYXRpYmxlIG5tXSwgbHRfY3ZfcGF0aF9OTSwKLVtpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCi0gICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKLSAgZmkKLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQotCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhawotCSAgICA7OwotCSAgKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKLQkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KLWZpXSkKLU5NPSIkbHRfY3ZfcGF0aF9OTSIKLV0pIyBBQ19QUk9HX05NCi0KLQotIyBBQ19DSEVDS19MSUJNCi0jIC0tLS0tLS0tLS0tLS0KLSMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQotQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQotICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKLSAgOzsKLSotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfQ0hFQ0tfTElCTQotCi0KLSMgQUNfTElCTFRETF9DT05WRU5JRU5DRShbRElSRUNUT1JZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBjb252ZW5pZW5jZSBsaWJyYXJ5IGFuZAotIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCi0jIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAotIyAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nCi0jIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QKLSMgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbgotIyB0aGUgTWFrZWZpbGVzLgotQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KLSAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7Ci0gICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKLSAgZXNhYwotICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGxjLmxhCi0gIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCi0gICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KLSAgSU5DTFRETD0iJExURExJTkNMIgotXSkjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UKLQotCi0jIEFDX0xJQkxURExfSU5TVEFMTEFCTEUoW0RJUkVDVE9SWV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaW5zdGFsbGFibGUgbGlicmFyeSBhbmQKLSMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcwotIyAtLWVuYWJsZS1sdGRsLWluc3RhbGwgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgYW5kIGFuIGluc3RhbGxlZCBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuCi0jIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9idWlsZGRpcn0vJyMgYW5kIExURExJTkNMIHdpdGgKLSMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAotIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyCi0jIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KLSMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgQUNfUFJPR19MSUJUT09MLgotQUNfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2RsaW5pdCwKLSAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKLSAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KLSAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCi0gICBlbHNlCi0gICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCi0gICBmaQotICBdKQotICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCi0gICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCi0gICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCi0gICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKLSAgZWxzZQotICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgotICAgIExJQkxUREw9Ii1sbHRkbCIKLSAgICBMVERMSU5DTD0KLSAgZmkKLSAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgotICBJTkNMVERMPSIkTFRETElOQ0wiCi1dKSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRQotCi0KLSMgQUNfTElCVE9PTF9DWFgKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEMrKyBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfQ1hYXSkKLV0pIyBBQ19MSUJUT09MX0NYWAotCi0KLSMgX0xUX0FDX0xBTkdfQ1hYCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFhdKQotXSkjIF9MVF9BQ19MQU5HX0NYWAotCi0jIF9MVF9BQ19QUk9HX0NYWENQUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdLAotWwotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWZpCi1dKSMgX0xUX0FDX1BST0dfQ1hYQ1BQCi0KLSMgQUNfTElCVE9PTF9GNzcKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEZvcnRyYW4gNzcgbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0Y3N10pCi1dKSMgQUNfTElCVE9PTF9GNzcKLQotCi0jIF9MVF9BQ19MQU5HX0Y3NwotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzddKQotXSkjIF9MVF9BQ19MQU5HX0Y3NwotCi0KLSMgQUNfTElCVE9PTF9HQ0oKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEdDSiBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfR0NKXSkKLV0pIyBBQ19MSUJUT09MX0dDSgotCi0KLSMgX0xUX0FDX0xBTkdfR0NKCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSxbXSwKLSAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSxbXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSxbXSwKLSAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBQ19QUk9HX0dDSl0pXSwKLQkgW2lmZGVmKFtBXVtNX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQV1bTV9QUk9HX0dDSl0pXSwKLQkgICBbQUNfUkVRVUlSRShbQV1bQ19QUk9HX0dDSl9PUl9BXVtNX1BST0dfR0NKXSldKV0pXSldKV0pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9R0NKXSkKLV0pIyBfTFRfQUNfTEFOR19HQ0oKLQotCi0jIEFDX0xJQlRPT0xfUkMKLSMgLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgV2luZG93cyByZXNvdXJjZSBmaWxlcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfUkNdKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfVJDXSkKLV0pIyBBQ19MSUJUT09MX1JDCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NfQ09ORklHXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCi1bbHRfc2F2ZV9DQz0iJENDIgotQUNfTEFOR19QVVNIKEMpCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKLQotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLUFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0jIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLQotYWl4NCogfCBhaXg1KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gICAgOzsKLWVzYWMKLUFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLUFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NYWF9DT05GSUcoQ1hYKV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCi1bQUNfTEFOR19QVVNIKEMrKykKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKLUFDX1JFUVVJUkUoW19MVF9BQ19QUk9HX0NYWENQUF0pCi0KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKLV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1fTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQotX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotICBBQ19QUk9HX0xECi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBhaXg0KiB8IGFpeDUqKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXg1KikKLQlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICotYnJ0bCopCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgZmkKLQotICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCV9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgZmkKLSAgICBmaQotICAgIDs7Ci0KLSAgYmVvcyopCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLSAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotCi0gIGNob3J1cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuW1swMTJdXSkKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgOyB0aGVuCi0gICAgICBsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubwotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICBpZiAkQ0MgLWR1bXBzcGVjcyAyPiYxIHwgJEVHUkVQICdzaW5nbGVfbW9kdWxlJyA+L2Rldi9udWxsIDsgdGhlbgotICAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KLSAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgLXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIGVsc2UKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgICBmaQotICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KLSAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBmaQotICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBmaQotICAgICAgICA7OwotCi0gIGRndXgqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBlYysrKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGdoY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBmcmVlYnNkW1sxMl1dKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgZnJlZWJzZC1lbGYqKQotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICMgY29udmVudGlvbnMKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgIDs7Ci0gIGdudSopCi0gICAgOzsKLSAgaHB1eDkqKQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBDQyopCi0gICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgYUNDKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICMKLSAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLSAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0gICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0gICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbWy1dXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0gICAgICA7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBocHV4MTAqfGhwdXgxMSopCi0gICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopIDs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgYUNDKikKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgaWE2NCopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGludGVyaXhbWzMtOV1dKikKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICA7OwotICBpcml4NSogfCBpcml4NiopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFNHSSBDKysKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgLW8gJGxpYicKLQkgIGZpCi0JZmkKLQlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQk7OwotICAgIGVzYWMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251KQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgaWNwYyopCi0JIyBJbnRlbCBDKysKLQl3aXRoX2dudV9sZD15ZXMKLQkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scwotCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCi0JIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLQkqIlZlcnNpb24gNy4iKikKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKLQkgIHRtcF9pZHluPQotCSAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCSAgZXNhYwotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQllc2FjCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JOzsKLSAgICAgIHBnQ0MqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotICAJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIDs7Ci0gICAgICBjeHgqKQotCSMgQ29tcGFxIEMrKwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQysrIDUuOQotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0KLQkgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKLQkgICMgd291bGQgYmUgYmV0dGVyLgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICMgaW4gdGhlIGFyY2hpdmUuCi0JICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGx5bnhvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG04OGsqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBtdnMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBjeHgqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbmV0YnNkKikKLSAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIGZpCi0gICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJwotICAgIDs7Ci0gIG9wZW5ic2QyKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGZpCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotICBvc2YzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBjeHgqKQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBvc2Y0KiB8IG9zZjUqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgY3h4KikKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIC1XbCwtaW5wdXQgLVdsLCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24JJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgJHJtICRsaWIuZXhwJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBwc29zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgc3Vub3M0KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LngKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGxjYyopCi0JIyBMdWNpZAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc29sYXJpcyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcwotCV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLQkgICopCi0JICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCi0JICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQllc2FjCi0JX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGdjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJwotCSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZWxzZQotCSAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCi0JICAgICMgcGxhdGZvcm0uCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBmaQotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJwotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLQkgICopCi0JICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCSAgZXNhYwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAjIGFzIC16IGRlZnMuCi0gICAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cwotICAgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0gICAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLSAgICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgotICAgICMgU28gdGhhdCBiZWhhdmlvdXIgaXMgb25seSBlbmFibGVkIGlmIFNDT0FCU1BBVEggaXMgc2V0IHRvIGEKLSAgICAjIG5vbi1lbXB0eSB2YWx1ZSBpbiB0aGUgZW52aXJvbm1lbnQuICBNb3N0IGxpa2VseSBvbmx5IHVzZWZ1bCBmb3IKLSAgICAjIGNyZWF0aW5nIG9mZmljaWFsIGRpc3RyaWJ1dGlvbnMgb2YgcGFja2FnZXMuCi0gICAgIyBUaGlzIGlzIGEgaGFjayB1bnRpbCBsaWJ0b29sIG9mZmljaWFsbHkgc3VwcG9ydHMgYWJzb2x1dGUgcGF0aAotICAgICMgbmFtZXMgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdGFuZGVtKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgTkNDKikKLQkjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHZ4d29ya3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICAqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1fTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgotX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLUFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAoJDEpCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKCQxKQotQUNfTElCVE9PTF9QUk9HX0NDX0NfTygkMSkKLUFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUygkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMoJDEpCi1BQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKCQxKQotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19QT1AKLUNDPSRsdF9zYXZlX0NDCi1MRENYWD0kTEQKLUxEPSRsdF9zYXZlX0xECi1HQ0M9JGx0X3NhdmVfR0NDCi13aXRoX2dudV9sZGN4eD0kd2l0aF9nbnVfbGQKLXdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1sdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECi1sdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLWx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAotbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLV0pIyBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotCi0jIEFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKLSMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLFsKLWRubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAotZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKLWRubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKLWRubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCi1kbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KLWlmZWxzZShbJDFdLFtdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1pbnQgYTsKLXZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1FT0YKLV0sWyQxXSxbQ1hYXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotRU9GCi1dLFskMV0sW0Y3N10sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSAgICAgIHN1YnJvdXRpbmUgZm9vCi0gICAgICBpbXBsaWNpdCBub25lCi0gICAgICBpbnRlZ2VyKjQgYQotICAgICAgYT0wCi0gICAgICByZXR1cm4KLSAgICAgIGVuZAotRU9GCi1dLFskMV0sW0dDSl0sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLXB1YmxpYyBjbGFzcyBmb28gewotICBwcml2YXRlIGludCBhOwotICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKLSAgICBhID0gMDsKLSAgfQotfTsKLUVPRgotXSkKLWRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLWRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1pZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgIyBUaGUgYConIGluIHRoZSBjYXNlIG1hdGNoZXMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgYGNhc2UnIGluCi0gICMgJG91dHB1dF92ZXJib3NlX2NtZCBjYW4gdHJpZ2dlciBnbG9iIGV4cGFuc2lvbiBkdXJpbmcgdGhlIGxvb3AKLSAgIyBldmFsIHdpdGhvdXQgdGhpcyBzdWJzdGl0dXRpb24uCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWAkZWNobyAiWCRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCIgfCAkWHNlZCAtZSAiJG5vX2dsb2Jfc3Vic3QiYAotCi0gIGZvciBwIGluIGBldmFsICRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZGA7IGRvCi0gICAgY2FzZSAkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIFwKLQkgIHx8IHRlc3QgJHAgPSAiLVIiOyB0aGVuCi0JIHByZXY9JHAKLQkgY29udGludWUKLSAgICAgICBlbHNlCi0JIHByZXY9Ci0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHAgaW4KLQkgLUwqIHwgLVIqKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCi0JICAgZWxzZQotCSAgICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCi0KLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIENsZWFuIHVwLgotICBybSAtZiBhLm91dCBhLmV4ZQotZWxzZQotICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgotZmkKLQotJHJtIC1mIGNvbmZlc3QuJG9iamV4dAotCi0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotaWZlbHNlKFskMV0sW0NYWF0sCi1bY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeFtbMy05XV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQotICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci1lc2FjCi1dKQotCi1jYXNlICIgJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCi0qIiAtbGMgIiopIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OwotZXNhYwotXSkjIEFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAKLQotIyBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwgW19MVF9BQ19MQU5HX0Y3N19DT05GSUcoRjc3KV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19GNzddKQotQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCi0KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAotICAgICAgc3Vicm91dGluZSB0Ci0gICAgICByZXR1cm4KLSAgICAgIGVuZAotIgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7Rjc3LSJmNzcifQotY29tcGlsZXI9JENDCi1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLWFpeDQqIHwgYWl4NSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi1fTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgotX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwgW19MVF9BQ19MQU5HX0dDSl9DT05GSUcoR0NKKV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1qYXZhCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7R0NKLSJnY2oifQotY29tcGlsZXI9JENDCi1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSIkbHRfc2F2ZV9DQyIKLV0pIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sIFtfTFRfQUNfTEFOR19SQ19DT05GSUcoUkMpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAotW0FDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtSQy0id2luZHJlcyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19SQ19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfQ09ORklHKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZiBUQUdOQU1FIGlzIG5vdCBwYXNzZWQsIHRoZW4gY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQKLSMgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZQotIyBhZGQgY29kZSB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkKLSMgVEFHTkFNRSBmcm9tIHRoZSBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddLAotWyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoQ0MsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihMRCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RpbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0dW5pbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKTsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcWyRdMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJbJF0vWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1pZmVsc2UoWyQxXSwgW10sCi0gIFtjZmdmaWxlPSIke29maWxlfVQiCi0gIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICRybSAtZiAiJGNmZ2ZpbGUiCi0gIEFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pXSwKLSAgW2NmZ2ZpbGU9IiRvZmlsZSJdKQotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotaWZlbHNlKFskMV0sIFtdLAotWyMhICRTSEVMTAotCi0jIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNwotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6Ci0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECi0KLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9Ci0KLSMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXSkKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKQotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9bXV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKQotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kX0xUX0FDX1RBR1ZBUihHQ0MsICQxKQotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9bXV9MVF9BQ19UQUdWQVIoTEQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKQotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKQotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSkKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKQotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKQotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSkKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKQotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKQotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSkKLQotaWZlbHNlKFskMV0sW10sCi1bIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZV0pCi0KLV9fRU9GX18KLQotaWZlbHNlKFskMV0sW10sIFsKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi1dKQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi1dKSMgQUNfTElCVE9PTF9DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0KLSAgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKLSAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQotZmkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLUFDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCi1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAotWwotIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCi0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQotCi0jIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCi1zeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0KLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCi1jYXNlICRob3N0X29zIGluCi1haXgqKQotICBzeW1jb2RlPSdbW0JDRFRdXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKLSAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgOzsKLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tbQkRSVF1dJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW1tBQkRUXV0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW1tERk5TVFVdXScKLSAgOzsKLWVzYWMKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKLWVzYWMKLQotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmMoKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgotCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi1jb25zdCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHJfdCBhZGRyZXNzOwotfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKLQkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0KiBjb25mdHN0KgotCi0gICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCi0gICAgYnJlYWsKLSAgZWxzZQotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9Ci0gIGZpCi1kb25lCi1dKQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQotZmkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChvaykKLWZpCi1dKSAjIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLAotW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKLSBpZmVsc2UoWyQxXSxbQ1hYXSxbCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0KiB8IGFpeDUqKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi1dLAotWwotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLSAgICAgIGRhcndpbiopCi0gICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICB4bGMqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcW5vY29tbW9uJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotXSkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgotICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKSwKLSAgICBbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAotICAgIFtjYXNlICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OwotICAgICBlc2FjXSwKLSAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLSAgICA7OwotICAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKLUFDX0xJQlRPT0xfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCi0gICRsdF90bXBfc3RhdGljX2ZsYWcsCi0gIFtdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCi1dKQotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLWlmZWxzZShbJDFdLFtDWFhdLFsKLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXg0KiB8IGFpeDUqKQotICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLSAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgotICA7OwotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotXSxbCi0gIHJ1bnBhdGhfdmFyPQotICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIF9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCi0KLSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXg1KikKLQkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gIAkgICAgYnJlYWsKLSAgCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQkgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYnNkaVtbNDVdXSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLltbMDEyXV0pCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIGZyZWVic2QxKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKLSAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKLSAgICAjIGV4dHJhIHNwYWNlKS4KLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0KLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCi0JICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCi0KLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IHRleHQnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZWxzZQotCXdsYXJjPScnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotXSkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLXRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCi0JcGljX2ZsYWc9JF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotICAgICAgICBpZiBBQ19UUllfRVZBTChfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCi0gICAgICAgIHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgICBlbHNlCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpXSkKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotXSkjIEFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMKLQotCi0jIF9MVF9BQ19GSUxFX0xURExMX0MKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBCZSBjYXJlZnVsIHRoYXQgdGhlIHN0YXJ0IG1hcmtlciBhbHdheXMgZm9sbG93cyBhIG5ld2xpbmUuCi1BQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10sIFsKLSMgLyogbHRkbGwuYyBzdGFydHMgaGVyZSAqLwotIyAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMgI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSMgI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMgI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jCi0jICNpZm5kZWYgX19DWUdXSU5fXwotIyAjICBpZmRlZiBfX0NZR1dJTjMyX18KLSMgIyAgICBkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KLSMgIyAgZW5kaWYKLSMgI2VuZGlmCi0jCi0jICNpZmRlZiBfX2NwbHVzcGx1cwotIyBleHRlcm4gIkMiIHsKLSMgI2VuZGlmCi0jIEJPT0wgQVBJRU5UUlkgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCk7Ci0jICNpZmRlZiBfX2NwbHVzcGx1cwotIyB9Ci0jICNlbmRpZgotIwotIyAjaWZkZWYgX19DWUdXSU5fXwotIyAjaW5jbHVkZSA8Y3lnd2luL2N5Z3dpbl9kbGwuaD4KLSMgREVDTEFSRV9DWUdXSU5fRExMKCBEbGxNYWluICk7Ci0jICNlbmRpZgotIyBISU5TVEFOQ0UgX19oRGxsSW5zdGFuY2VfYmFzZTsKLSMKLSMgQk9PTCBBUElFTlRSWQotIyBEbGxNYWluIChISU5TVEFOQ0UgaEluc3QsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQotIyB7Ci0jICAgX19oRGxsSW5zdGFuY2VfYmFzZSA9IGhJbnN0OwotIyAgIHJldHVybiBUUlVFOwotIyB9Ci0jIC8qIGx0ZGxsLmMgZW5kcyBoZXJlICovCi1dKSMgX0xUX0FDX0ZJTEVfTFRETExfQwotCi0KLSMgX0xUX0FDX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdLCBbaWZlbHNlKFskMl0sIFtdLCBbJDFdLCBbJDFfJDJdKV0pCi0KLQotIyBvbGQgbmFtZXMKLUFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCAgIFtBQ19QUk9HX0xJQlRPT0xdKQotQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCAgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKLUFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCi1BQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKLUFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtBQ19ESVNBQkxFX1NUQVRJQygkQCldKQotQUNfREVGVU4oW0FNX1BST0dfTERdLCAgICAgICAgW0FDX1BST0dfTERdKQotQUNfREVGVU4oW0FNX1BST0dfTk1dLCAgICAgICAgW0FDX1BST0dfTk1dKQotCi0jIFRoaXMgaXMganVzdCB0byBzaWxlbmNlIGFjbG9jYWwgYWJvdXQgdGhlIG1hY3JvIG5vdCBiZWluZyB1c2VkCi1pZmVsc2UoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSkKLQotQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwKLVtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCBubykKLSAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCi0gIEFDX1NVQlNUKEdDSkZMQUdTKQotXSkKLQotQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLAotW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsIG5vKQotXSkKLQotCi0jIENoZWFwIGJhY2twb3J0IG9mIEFTX0VYRUNVVEFCTEVfUCBhbmQgcmVxdWlyZWQgbWFjcm9zCi0jIGZyb20gQXV0b2NvbmYgMi41OTsgd2Ugc2hvdWxkIG5vdCB1c2UgJGFzX2V4ZWN1dGFibGVfcCBkaXJlY3RseS4KLQotIyBfQVNfVEVTVF9QUkVQQVJFCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2lmbmRlZihbX0FTX1RFU1RfUFJFUEFSRV0sCi1bbTRfZGVmdW4oW19BU19URVNUX1BSRVBBUkVdLAotW2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhlY3V0YWJsZV9wPSd0ZXN0IC14JwotZWxzZQotICBhc19leGVjdXRhYmxlX3A9J3Rlc3QgLWYnCi1maQotXSldKSMgX0FTX1RFU1RfUFJFUEFSRQotCi0jIEFTX0VYRUNVVEFCTEVfUAotIyAtLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciBhIGZpbGUgaXMgZXhlY3V0YWJsZS4KLW00X2lmbmRlZihbQVNfRVhFQ1VUQUJMRV9QXSwKLVttNF9kZWZ1bihbQVNfRVhFQ1VUQUJMRV9QXSwKLVtBU19SRVFVSVJFKFtfQVNfVEVTVF9QUkVQQVJFXSlkbmwKLSRhc19leGVjdXRhYmxlX3AgJDFbXWRubAotXSldKSMgQVNfRVhFQ1VUQUJMRV9QCi0KLSMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIwotIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCi0jICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKLSMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyBMVF9BQ19QUk9HX1NFRAotIyAtLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcwotIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgotQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCi1bIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCi0jIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgaWYgQVNfRVhFQ1VUQUJMRV9QKFsiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCJdKTsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCi0gIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgotICBsdF9hY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgotICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgYnJlYWsKLSAgZmkKLSAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAotICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCi0gICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKLSAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCi0gICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgotICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAotICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGZpCi0gIGRvbmUKLWRvbmUKLV0pCi1TRUQ9JGx0X2N2X3BhdGhfU0VECi1BQ19TVUJTVChbU0VEXSkKLUFDX01TR19SRVNVTFQoWyRTRURdKQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtNjU5NiwxMCArMzEsMTAgQEAKICMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCiAjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQogQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xMCcKK1thbV9fYXBpX3ZlcnNpb249JzEuMTEnCiBkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCiBkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgotbTRfaWYoWyQxXSwgWzEuMTBdLCBbXSwKK200X2lmKFskMV0sIFsxLjExLjFdLCBbXSwKICAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKIF0pCiAKQEAgLTY2MTMsMTAgKzQ4LDEyIEBACiAjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgotIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFDX0lOSVRfQVVUT01BS0UuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KIEFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLVtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjEwXSlkbmwKLV9BTV9BVVRPQ09ORl9WRVJTSU9OKG00X1BBQ0tBR0VfVkVSU0lPTildKQorW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTEuMV0pZG5sCittNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCitfQU1fQVVUT0NPTkZfVkVSU0lPTihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSkpXSkKIAogIyBGaWd1cmUgb3V0IGhvdyB0byBydW4gdGhlIGFzc2VtYmxlci4gICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCkBAIC02Njk1LDE0ICsxMzIsMTQgQEAKIAogIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOAorIyBzZXJpYWwgOQogCiAjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcxNSw2ICsxNTIsNyBAQAogQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKIF9BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKIF9BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCittNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKIGlmICQyOyB0aGVuCiAgICQxX1RSVUU9CiAgICQxX0ZBTFNFPScjJwpAQCAtNjcyOCwxNCArMTY2LDE0IEBACiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKIGZpXSldKQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOQorIyBzZXJpYWwgMTAKIAogIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKICMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCkBAIC02NzkyLDYgKzIzMCwxNiBAQAogICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgogICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKwogICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKICAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCkBAIC02ODA5LDcgKzI1NywxNyBAQAogICAgIGRvbmUKICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCiAKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCiAgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKICAgICBub3NpZGVlZmZlY3QpCiAgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKICAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKQEAgLTY4MTksMTkgKzI3NywyMyBAQAogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC02ODg4LDU3ICszNTAsNjggQEAKIAogIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotI3NlcmlhbCAzCisjc2VyaWFsIDUKIAogIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKLVtmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAotICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gIGlmIHNlZCAxMHEgIiRtZiIgfCBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCi0gIGVsc2UKLSAgICBjb250aW51ZQotICBmaQotICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQotICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCi0gIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCi0gIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKLSAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKLSAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAotICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQotICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQotICAjIGV4cGFuc2lvbi4KLSAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCi0gICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCi0gICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCi0gICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCi0gICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCi0gICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAotICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKLSAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgotICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorW3sKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAorICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKICAgZG9uZQotZG9uZQorfQogXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwogCiAKQEAgLTY5NTgsMTMgKzQzMSwxMyBAQAogIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSMgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxMgorIyBzZXJpYWwgMTYKIAogIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKICMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KQEAgLTY5ODEsNyArNDU0LDcgQEAKICMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgogIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgogQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAotW0FDX1BSRVJFUShbMi42MF0pZG5sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwKIGRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CiBkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KIG00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubApAQCAtNzAzMiw4ICs1MDUsOCBAQAogQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCiBBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKIEFNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCi1BTV9QUk9HX0lOU1RBTExfU0gKLUFNX1BST0dfSU5TVEFMTF9TVFJJUAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCiBBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubAogIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KICMgc29tZSBwbGF0Zm9ybXMuCkBAIC03MDQxLDI0ICs1MTQsMzcgQEAKIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAogQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKIF9BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAotICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKKwkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKIF9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAogW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCi0gICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gICAgICAgICAgICAgICAgICBbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSwKLSAgICAgICAgICAgICAgICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKENYWCldKV0pZG5sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAotICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKIF0pCitfQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAorZG5sIFRoZSBgcGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sIGBhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybworZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCitbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCisgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAogXSkKIAorZG5sIEhvb2sgaW50byBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgorZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCittNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKKwogCiAjIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCiAjIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgpAQCAtNzA2OSwxOCArNTU1LDE5IEBACiAjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KIEFDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKIFsjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCiBfYW1fc3RhbXBfY291bnQ9MQogZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkMSB8ICQxOiogKQorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCiAgICAgICBicmVhayA7OwogICAgICogKQogICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OwogICBlc2FjCiBkb25lCi1lY2hvICJ0aW1lc3RhbXAgZm9yICQxIiA+YEFTX0RJUk5BTUUoWyQxXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC03MDkxLDcgKzU3OCwxNCBAQAogIyBEZWZpbmUgJGluc3RhbGxfc2guCiBBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iXCQoU0hFTEwpICRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQoraWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQogQUNfU1VCU1QoaW5zdGFsbF9zaCldKQogCiAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC03MTE4LDI3ICs2MTIsMzggQEAKICMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KICMgRnJvbSBKaW0gTWV5ZXJpbmcKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4CiAjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDQKKyMgc2VyaWFsIDUKIAorIyBBTV9NQUlOVEFJTkVSX01PREUoW0RFRkFVTFQtTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29udHJvbCBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4KKyMgRGVmYXVsdCBpcyB0byBkaXNhYmxlIHRoZW0sIHVubGVzcyBgZW5hYmxlJyBpcyBwYXNzZWQgbGl0ZXJhbGx5LgorIyBGb3Igc3ltbWV0cnksIGBkaXNhYmxlJyBtYXkgYmUgcGFzc2VkIGFzIHdlbGwuICBBbnl3YXksIHRoZSB1c2VyCisjIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aXRoIHRoZSAtLWVuYWJsZS8tLWRpc2FibGUgc3dpdGNoLgogQUNfREVGVU4oW0FNX01BSU5UQUlORVJfTU9ERV0sCi1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCi0gIGRubCBtYWludGFpbmVyLW1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAotICBBQ19BUkdfRU5BQkxFKG1haW50YWluZXItbW9kZSwKLVsgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitbbTRfY2FzZShtNF9kZWZhdWx0KFskMV0sIFtkaXNhYmxlXSksCisgICAgICAgW2VuYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZGlzYWJsZV0pXSwKKyAgICAgICBbZGlzYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSldLAorICAgICAgIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSkKKyAgICAgICAgbTRfd2Fybihbc3ludGF4XSwgW3VuZXhwZWN0ZWQgYXJndW1lbnQgdG8gQU1AJnRAX01BSU5UQUlORVJfTU9ERTogJDFdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYW1fbWFpbnRhaW5lcl9vdGhlciBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCisgIGRubCBtYWludGFpbmVyLW1vZGUncyBkZWZhdWx0IGlzICdkaXNhYmxlJyB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkCisgIEFDX0FSR19FTkFCTEUoW21haW50YWluZXItbW9kZV0sCitbICAtLV1bYW1fbWFpbnRhaW5lcl9vdGhlcl1bLW1haW50YWluZXItbW9kZSAgYW1fbWFpbnRhaW5lcl9vdGhlciBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAogCQkJICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyXSwKLSAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbCwKLSAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8pCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsXSwKKyAgICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPV1tNF9pZihhbV9tYWludGFpbmVyX290aGVyLCBbZW5hYmxlXSwgW25vXSwgW3llc10pKQogICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCi0gIEFNX0NPTkRJVElPTkFMKE1BSU5UQUlORVJfTU9ERSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQogICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKLSAgQUNfU1VCU1QoTUFJTlQpZG5sCisgIEFDX1NVQlNUKFtNQUlOVF0pZG5sCiBdCiApCiAKQEAgLTcxNDYsMTMgKzY1MSwxMyBAQAogCiAjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMworIyBzZXJpYWwgNAogCiAjIEFNX01BS0VfSU5DTFVERSgpCiAjIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MTYxLDcgKzY2Niw3IEBACiBbYW1fbWFrZT0ke01BS0UtbWFrZX0KIGNhdCA+IGNvbmZpbmMgPDwgJ0VORCcKIGFtX19kb2l0OgotCUBlY2hvIGRvbmUKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKIC5QSE9OWTogYW1fX2RvaXQKIEVORAogIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgpAQCAtNzE3MSwyNCArNjc2LDI0IEBACiBfYW1fcmVzdWx0PW5vbmUKICMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCiBlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCi0jIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCi0jIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0Ci0jIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAotIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCi1pZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KLSAgIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgIGFtX19xdW90ZT0KLSAgIF9hbV9yZXN1bHQ9R05VCi1maQorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKICMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgogaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgogICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgotICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgotICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKLSAgICAgIGFtX19xdW90ZT0iXCIiCi0gICAgICBfYW1fcmVzdWx0PUJTRAotICAgZmkKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKIGZpCiBBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQogQUNfU1VCU1QoW2FtX19xdW90ZV0pCkBAIC03MTk2LDE0ICs3MDEsMTQgQEAKIHJtIC1mIGNvbmZpbmMgY29uZm1mCiBdKQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQorIyBzZXJpYWwgNgogCiAjIEFNX1BST0dfQ0NfQ19PCiAjIC0tLS0tLS0tLS0tLS0tCkBAIC03MjE1LDggKzcyMCw5IEBACiAjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKICMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgogc2V0IGR1bW15ICRDQwotYWNfY2M9YGVjaG8gJFsyXSB8IHNlZCBbJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nXWAKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCithbV9jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAorZXZhbCBhbV90PVwkYWNfY3ZfcHJvZ19jY18ke2FtX2NjfV9jX28KK2lmIHRlc3QgIiRhbV90IiAhPSB5ZXM7IHRoZW4KICAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCiAgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgogICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCkBAIC03MjMyLDE0ICs3MzgsMTQgQEAKIAogIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQorIyBzZXJpYWwgNgogCiAjIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyNTYsNyArNzYyLDE0IEBACiBBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCiBBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKLXRlc3QgeCIke01JU1NJTkcrc2V0fSIgPSB4c2V0IHx8IE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgoraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQogIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCiBpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgogICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgpAQCAtNzI5NCwxMyArODA3LDEzIEBACiAKICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDMKKyMgc2VyaWFsIDQKIAogIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzMxNyw3ICs4MzAsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgogQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCi1bQUNfRk9SRUFDSChbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKK1ttNF9mb3JlYWNoX3coW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCiAKICMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MzI3LDE0ICs4NDAsMTQgQEAKIAogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNAorIyBzZXJpYWwgNQogCiAjIEFNX1NBTklUWV9DSEVDSwogIyAtLS0tLS0tLS0tLS0tLS0KQEAgLTczNDMsMTYgKzg1NiwyOSBAQAogIyBKdXN0IGluIGNhc2UKIHNsZWVwIDEKIGVjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKICMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKICMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQogIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwogIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKICMgZGlyZWN0b3J5KS4KIGlmICgKLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCiAgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgogICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KLSAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlYAorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKICAgIGZpCiAgICBybSAtZiBjb25mdGVzdC5maWxlCiAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCkBAIC03NDA1LDE4ICs5MzEsMjUgQEAKIElOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCiBBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQogCi0jIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAorIyBzZXJpYWwgMgorCiAjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KICMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCiBBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQogCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgorQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKKwogIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC03NTEzLDQgKzEwNDYsOSBAQAogQUNfU1VCU1QoW2FtX191bnRhcl0pCiBdKSAjIF9BTV9QUk9HX1RBUgogCittNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKK200X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCittNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCittNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCiBtNF9pbmNsdWRlKFthY2luY2x1ZGUubTRdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMWQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKQEAgLTAsMCArMSwxNDIgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCisKK3NjcmlwdHZlcnNpb249MjAwNS0wNS0xNC4yMgorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorZWF0PQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5jJC8uby8nYAorCisjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCisjIE5vdGU6IHVzZSBgWy8uLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKKyMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgorbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy8uLV18X3xnJ2AuZAord2hpbGUgdHJ1ZTsgZG8KKyAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBicmVhaworICBmaQorICBzbGVlcCAxCitkb25lCisjIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KK3RyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1CisKKyMgUnVuIHRoZSBjb21waWxlLgorIiRAIgorcmV0PSQ/CisKK2lmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCisgIG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKaW5kZXggOTUxMzgzZS4uZDUzZTMwOSAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKQEAgLTEsMTAgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KICMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jICAgSW5jLgorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDA3LTA1LTE3JwordGltZXN0YW1wPScyMDA5LTExLTE5JwogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNywxNiArMjcsMTYgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCiAKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgotIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCiAjCiAjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KICMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCiAjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgogIwotIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKLSMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAogCiBtZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKIApAQCAtNTYsOCArNTYsOCBAQAogR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKIAogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCiAJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLQkJCXwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCiAJCXRoZW4KIAkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KIAkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwpAQCAtMzI0LDE0ICszMjQsMzAgQEAKIAljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KIAkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OwogCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40SDpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwotICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaXg4NnhlbjpTdW5PUzo1Lio6KikKLQllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCkBAIC01MzIsNyArNTQ4LDcgQEAKIAkJZWNobyByczYwMDAtaWJtLWFpeDMuMgogCWZpCiAJZXhpdCA7OwotICAgICo6QUlYOio6WzQ1XSkKKyAgICAqOkFJWDoqOls0NTZdKQogCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAogCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKQEAgLTY0MCw3ICs2NTYsNyBAQAogCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKIAogCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8Ci0JCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCQlncmVwIC1xIF9fTFA2NF9fCiAJICAgIHRoZW4KIAkJSFBfQVJDSD0iaHBwYTIuMHciCiAJICAgIGVsc2UKQEAgLTc5MSwxOCArODA3LDI0IEBACiAgICAgaSo6UFcqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKIAlleGl0IDs7Ci0gICAgKjpJbnRlcml4KjpbMzQ1Nl0qKQorICAgICo6SW50ZXJpeCo6KikKICAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCi0JICAgIHg4NikgCisJICAgIHg4NikKIAkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKLQkgICAgRU02NFQgfCBhdXRoZW50aWNhbWQpCisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQogCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OwogCWVzYWMgOzsKICAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCiAJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKIAlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OwogICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQogCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KIAkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQpAQCAtODMyLDggKzg1NCwyOSBAQAogICAgIGkqODY6TWluaXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAogCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworICAgICAgICBlc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OwogICAgIGFybSo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCiAJZXhpdCA7OwogICAgIGF2cjMyKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CkBAIC04NDcsNiArODkwLDE3IEBACiAgICAgZnJ2OkxpbnV4Oio6KikKICAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OwogICAgIGlhNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKQEAgLTg1Niw3NCArOTEwLDMzIEBACiAgICAgbTY4KjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqKQorICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKIAkjdW5kZWYgQ1BVCi0JI3VuZGVmIG1pcHMKLQkjdW5kZWYgbWlwc2VsCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCiAJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwc2VsCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAogCSNlbHNlCiAJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKLQlDUFU9bWlwcworCUNQVT0ke1VOQU1FX01BQ0hJTkV9CiAJI2Vsc2UKIAlDUFU9CiAJI2VuZGlmCiAJI2VuZGlmCiBFT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eQ1BVL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgotCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9Ci0JOzsKLSAgICBtaXBzNjQ6TGludXg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSN1bmRlZiBDUFUKLQkjdW5kZWYgbWlwczY0Ci0JI3VuZGVmIG1pcHM2NGVsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwczY0ZWwKLQkjZWxzZQotCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCi0JQ1BVPW1pcHM2NAotCSNlbHNlCi0JQ1BVPQotCSNlbmRpZgotCSNlbmRpZgotRU9GCi0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJwotCSAgICAvXkNQVS97Ci0JCXM6IDo6ZwotCQlwCi0JICAgIH0nYCIKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCiAJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KIAk7OwogICAgIG9yMzI6TGludXg6KjoqKQogCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHBwYzY0OkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBhbHBoYTpMaW51eDoqOiopCi0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KLQkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7Ci0JICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKLQkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7Ci0JICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKLQkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotICAgICAgICBlc2FjCi0Jb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKIAkjIExvb2sgZm9yIENQVSBsZXZlbApAQCAtOTMzLDggKzk0NiwxMSBAQAogCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CiAJZXNhYwogCWV4aXQgOzsKLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKQEAgLTk1NCw3MiArOTcwLDkgQEAKICAgICB4ODZfNjQ6TGludXg6KjoqKQogCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHh0ZW5zYTpMaW51eDoqOiopCi0gICAgCWVjaG8geHRlbnNhLXVua25vd24tbGludXgtZ251CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBpKjg2OkxpbnV4Oio6KikKLQkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbwotCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4gY2QgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXZlbnQKLQkjIHByb2JsZW1zIHdpdGggb3RoZXIgcHJvZ3JhbXMgb3IgZGlyZWN0b3JpZXMgY2FsbGVkIGBsZCcgaW4gdGhlIHBhdGguCi0JIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KLQlsZF9zdXBwb3J0ZWRfdGFyZ2V0cz1gY2QgLzsgTENfQUxMPUMgbGQgLS1oZWxwIDI+JjEgXAotCQkJIHwgc2VkIC1uZSAnL3N1cHBvcnRlZCB0YXJnZXRzOi8hZAotCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKLQkJCQkgICAgcy8uKnN1cHBvcnRlZCB0YXJnZXRzOiAqLy8KLQkJCQkgICAgcy8gLiovLwotCQkJCSAgICBwJ2AKLSAgICAgICAgY2FzZSAiJGxkX3N1cHBvcnRlZF90YXJnZXRzIiBpbgotCSAgZWxmMzItaTM4NikKLQkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKLQkJOzsKLQkgIGEub3V0LWkzODYtbGludXgpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKLQkJZXhpdCA7OwotCSAgY29mZi1pMzg2KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWNvZmYiCi0JCWV4aXQgOzsKLQkgICIiKQotCQkjIEVpdGhlciBhIHByZS1CRkQgYS5vdXQgbGlua2VyIChsaW51eC1nbnVvbGRsZCkgb3IKLQkJIyBvbmUgdGhhdCBkb2VzIG5vdCBnaXZlIHVzIHVzZWZ1bCAtLWhlbHAuCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251b2xkbGQiCi0JCWV4aXQgOzsKLQllc2FjCi0JIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGVmYXVsdCBjb21waWxlciBpcyBhLm91dCBvciBlbGYKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLQkjaWZkZWYgX19FTEZfXwotCSMgaWZkZWYgX19HTElCQ19fCi0JIyAgaWYgX19HTElCQ19fID49IDIKLQlMSUJDPWdudQotCSMgIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyAgZW5kaWYKLQkjIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyBlbmRpZgotCSNlbHNlCi0JI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX1BHSSkgfHwgZGVmaW5lZChfX1NVTlBST19DKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKQotCUxJQkM9Z251Ci0JI2Vsc2UKLQlMSUJDPWdudWFvdXQKLQkjZW5kaWYKLQkjZW5kaWYKLQkjaWZkZWYgX19kaWV0bGliY19fCi0JTElCQz1kaWV0bGliYwotCSNlbmRpZgotRU9GCi0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJwotCSAgICAvXkxJQkMvewotCQlzOiA6OmcKLQkJcAotCSAgICB9J2AiCi0JdGVzdCB4IiR7TElCQ30iICE9IHggJiYgewotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCi0JCWV4aXQKLQl9Ci0JdGVzdCB4IiR7VEVOVEFUSVZFfSIgIT0geCAmJiB7IGVjaG8gIiR7VEVOVEFUSVZFfSI7IGV4aXQ7IH0KLQk7OwogICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCiAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KIAkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCkBAIC0xMDQ4LDcgKzEwMDEsNyBAQAogICAgIGkqODY6c3lsbGFibGU6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQogCWV4aXQgOzsKLSAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKIAllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIGkqODY6KkRPUzoqOiopCkBAIC0xMDkyLDggKzEwNDUsMTEgQEAKICAgICBwYzoqOio6KikKIAkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKICAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKLSAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KLQllY2hvIGkzODYtcGMtbXNkb3NkamdwcAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAogICAgICAgICBleGl0IDs7CiAgICAgSW50ZWw6TWFjaDozKjoqKQogCWVjaG8gaTM4Ni1wYy1tYWNoMwpAQCAtMTEzMSw2ICsxMDg3LDE2IEBACiAgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCiAgICAgICAgIC9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAogICAgICAgICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CiAgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCiAJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKQEAgLTExNDMsNyArMTEwOSw3IEBACiAgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKIAllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7Ci0gICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LjAqOiopCisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCiAJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQpAQCAtMTIwNiw2ICsxMTcyLDkgQEAKICAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgogCWVjaG8gaTU4Ni1wYy1iZW9zCiAJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CiAgICAgU1gtNDpTVVBFUi1VWDoqOiopCiAJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwpAQCAtMTIzMyw2ICsxMjAyLDE2IEBACiAgICAgKjpEYXJ3aW46KjoqKQogCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCiAJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OwogCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OwogCWVzYWMKIAllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CkBAIC0xMzE0LDYgKzEyOTMsOSBAQAogICAgIGkqODY6cmRvczoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKIAlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKIGVzYWMKIAogI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCkBAIC0xNDc0LDkgKzE0NTYsOSBAQAogdGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQogZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCiAKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuZ3Vlc3MKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECiBhbmQKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuc3ViCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKIAogSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCiBzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCmluZGV4IGMwNjBmNDQuLjE3YzkxNDUgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKQEAgLTEsMTAgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICBJbmMuCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMDctMDQtMjknCit0aW1lc3RhbXA9JzIwMDktMTEtMDcnCiAKICMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgogIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCkBAIC0zMiwxMyArMzIsMTYgQEAKIAogCiAjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAotIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCiAjCiAjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgogIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCiAjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgogIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgogCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKICMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCiAjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcwogIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgpAQCAtNzIsOCArNzUsOCBAQAogdmVyc2lvbj0iXAogR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCiAKLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTIyLDYgKzEyNSw3IEBACiBjYXNlICRtYXliZV9vcyBpbgogICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAogICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKICAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQogICAgIG9zPS0kbWF5YmVfb3MKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYApAQCAtMTQ4LDEwICsxNTIsMTMgQEAKIAktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAogCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCiAJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCiAJCTs7CisgICAgICAgIC1ibHVlZ2VuZSopCisJICAgICAgICBvcz0tY25rCisJCTs7CiAJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCkBAIC0yNDksMTMgKzI1NiwxNiBAQAogCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKIAl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAogCXwgaXAyayB8IGlxMjAwMCBcCisJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKIAl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAogCXwgbWlwczE2IFwKIAl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKLQl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCiAJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCiAJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCiAJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCiAJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCkBAIC0yNjgsNiArMjc4LDcgQEAKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAogCXwgbXQgXAogCXwgbXNwNDMwIFwKIAl8IG5pb3MgfCBuaW9zMiBcCkBAIC0yNzYsMjAgKzI4NywyMiBAQAogCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKIAl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKIAl8IHB5cmFtaWQgXAorCXwgcnggXAogCXwgc2NvcmUgXAotCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCiAJfCBzaDY0IHwgc2g2NGxlIFwKIAl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKIAl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCiAJfCBzcHUgfCBzdHJvbmdhcm0gXAogCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKIAl8IHY4NTAgfCB2ODUwZSBcCiAJfCB3ZTMyayBcCiAJfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKLQl8IHo4aykKKwl8IHo4ayB8IHo4MCkKIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyKQorCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQogCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCW9zPS1ub25lCkBAIC0zMjksMTQgKzM0MiwxNyBAQAogCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKIAl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCiAJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAogCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAogCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKIAl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKIAl8IG1pcHMxNi0qIFwKIAl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCiAJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCiAJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAogCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKIAl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCkBAIC0zNTcsMjEgKzM3MywyNiBAQAogCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCiAJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAogCXwgcHlyYW1pZC0qIFwKLQl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKLQl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAogCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCiAJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCiAJfCBzcGFyY2xpdGUtKiBcCiAJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCiAJfCB0YWhvZS0qIHwgdGh1bWItKiBcCi0JfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiB8IHRpbGUtKiBcCiAJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCiAJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAogCXwgd2UzMmstKiBcCiAJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKLQl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAogCXwgeW1wLSogXAotCXwgejhrLSopCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCiAJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KQEAgLTQzNSw2ICs0NTYsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwogCQlvcz0tYnNkCiAJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtNDQzLDEwICs0NjgsMjYgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CiAJCW9zPS1keW5peAogCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKIAljOTApCiAJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKIAkJb3M9LXVuaWNvcwogCQk7OworICAgICAgICBjZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKIAljb252ZXgtYzEpCiAJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CiAJCW9zPS1ic2QKQEAgLTQ3NSw4ICs1MTYsOCBAQAogCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CiAJCW9zPS11bmljb3NtcAogCQk7OwotCWNyMTZjKQotCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwljcjE2KQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgogCQlvcz0tZWxmCiAJCTs7CiAJY3JkcyB8IHVub3MpCkBAIC01MTQsNiArNTU1LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQogCQlvcz0tc3lzdjMKIAkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OwogCWRqZ3BwKQogCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKIAkJb3M9LW1zZG9zZGpncHAKQEAgLTY2OCw2ICs3MTMsMTQgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQogCQlvcz0tc3lzdgogCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKIAltODhrLW9tcm9uKikKIAkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCiAJCTs7CkBAIC02NzksNiArNzMyLDkgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisgICAgICAgIG1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKIAltaW5ndzMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtcGMKIAkJb3M9LW1pbmd3MzIKQEAgLTgxMyw2ICs4NjksMTQgQEAKIAkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCiAJCW9zPS1vc2YKIAkJOzsKKwlwYXJpc2MpCisJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCXBhcmlzYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CiAJcGJkKQogCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQogCQk7OwpAQCAtMTAyMSw2ICsxMDg1LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgogCQlvcz0tY29mZgogCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CiAJdHgzOSkKIAkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCiAJCTs7CkBAIC0xMDk2LDYgKzExNjQsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgogCQlvcz0tc2ltCiAJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CiAJbm9uZSkKIAkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKIAkJb3M9LW5vbmUKQEAgLTExMzQsNyArMTIwNiw3IEBACiAJd2UzMmspCiAJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CiAJCTs7Ci0Jc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKIAkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCiAJCTs7CiAJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCkBAIC0xMjA0LDEwICsxMjc2LDExIEBACiAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAogCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAta29wZW5zb2xhcmlzKiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKIAkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCkBAIC0xMjE2LDcgKzEyODksNyBAQAogCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKIAkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCiAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCiAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAogCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCkBAIC0xMjI2LDcgKzEyOTksNyBAQAogCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKIAkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKIAkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAotCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqKQorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKIAkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCiAJCTs7CiAJLXFueCopCkBAIC0xMzU2LDYgKzE0MjksOSBAQAogCS16dm1vZSkKIAkJb3M9LXp2bW9lCiAJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CiAJLW5vbmUpCiAJCTs7CiAJKikKQEAgLTE1NTMsNyArMTYyOSw3IEBACiAJCQktc3Vub3MqKQogCQkJCXZlbmRvcj1zdW4KIAkJCQk7OwotCQkJLWFpeCopCisJCQktY25rKnwtYWl4KikKIAkJCQl2ZW5kb3I9aWJtCiAJCQkJOzsKIAkJCS1iZW9zKikKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKaW5kZXggNjk4NGZjNi4uYzVjNzBiMSAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKQEAgLTEsNjIgKzEsODUgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBsaWJmZmkgMy4wLjUuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSBmb3IgbGliZmZpIDMuMC4xMHJjMC4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+LgogIworIwogIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0jIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjCisjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCiBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwogICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKIGVzYWMKLQogZmkKIAogCi0KLQotIyBQQVRIIG5lZWRzIENSCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKIAogIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCiBpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKLWVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CiBmaQogCiAKQEAgLTY1LDIwICs4OCwxOCBAQAogIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCiAjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKICMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKLWFzX25sPScKLScKIElGUz0iICIiCSRhc19ubCIKIAogIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KLWNhc2UgJDAgaW4KK2Nhc2UgJDAgaW4gIygoCiAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotZG9uZQorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogICAgICA7OwpAQCAtODksMzIgKzExMCwyNzEgQEAKICAgYXNfbXlzZWxmPSQwCiBmaQogaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKIGZpCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAotZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKIGRvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKwkjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworCSMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwlleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kCiskMDogaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbCBhYm91dCB5b3VyIHN5c3RlbSwKKyQwOiBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworJDA6IG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuCiskMDogdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCisjIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkMyI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKIGlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKQEAgLTEyOCwxMyArMzg4LDE3IEBACiAgIGFzX2Jhc2VuYW1lPWZhbHNlCiBmaQogCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCiAKLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KIGFzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8CiskYXNfZWNobyBYLyIkMCIgfAogICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMTQ5LDI5NCArNDEzLDE5IEBACiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKIAotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKIAogCi1pZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCi0gIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLWVsc2UKLSAgYXNfaGF2ZV9yZXF1aXJlZD1ubwotZmkKLQotICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmIAkgKGV2YWwgIjoKLShhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0IFwkMSkKLX0KLWFzX2Z1bmNfc3VjY2VzcyAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDAKLX0KLWFzX2Z1bmNfZmFpbHVyZSAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDEKLX0KLWFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgewotICByZXR1cm4gMAotfQotYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Ci0gIHJldHVybiAxCi19Ci0KLWV4aXRjb2RlPTAKLWlmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCi1maQotCi10ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLQotKAotICBhc19saW5lbm9fMT1cJExJTkVOTwotICBhc19saW5lbm9fMj1cJExJTkVOTwotICB0ZXN0IFwieFwkYXNfbGluZW5vXzFcIiAhPSBcInhcJGFzX2xpbmVub18yXCIgJiYKLSAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLSIpIDI+IC9kZXYvbnVsbDsgdGhlbgotICA6Ci1lbHNlCi0gIGFzX2NhbmRpZGF0ZV9zaGVsbHM9Ci0gICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKLQkgICBkb25lOzsKLSAgICAgICBlc2FjCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLQotICAgICAgZm9yIGFzX3NoZWxsIGluICRhc19jYW5kaWRhdGVfc2hlbGxzICRTSEVMTDsgZG8KLQkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgotCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKLQkJeyAoIiRhc19zaGVsbCIpIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Ci1lc2FjCi0KLWZpCi0KLQotOgotX0FTRU9GCi19OyB0aGVuCi0gIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKLQkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLQkgICAgICAgaWYgeyAiJGFzX3NoZWxsIiAyPiAvZGV2L251bGwgPDxcX0FTRU9GCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCi0gICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OwotZXNhYwotCi1maQotCi0KLToKLShhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0ICQxKQotfQotYXNfZnVuY19zdWNjZXNzICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMAotfQotYXNfZnVuY19mYWlsdXJlICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMQotfQotYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7Ci0gIHJldHVybiAwCi19Ci1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKLSAgcmV0dXJuIDEKLX0KLQotZXhpdGNvZGU9MAotaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCi1maQotCi1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIiQxIiApOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KLWZpCi0KLXRlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0KLSgKLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLQotX0FTRU9GCi19OyB0aGVuCi0gIGJyZWFrCi1maQotCi1maQotCi0gICAgICBkb25lCi0KLSAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCi0gIGZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WCi0gICAgICAgIGRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCi0gICAgICAgIGRvbmUKLSAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotICAgICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9Ci1maQotCi0KLSAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KLSAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQotICAgICAgZWNobyBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiAgUGxlYXNlIGluc3RhbGwgYQotICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQotICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCi0gICAgICB7IChleGl0IDEpOyBleGl0IDE7IH0KLWZpCi0KLQotZmkKLQotZmkKLQotCi0KLShldmFsICJhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0IFwkMSkKLX0KLWFzX2Z1bmNfc3VjY2VzcyAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDAKLX0KLWFzX2Z1bmNfZmFpbHVyZSAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDEKLX0KLWFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgewotICByZXR1cm4gMAotfQotYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Ci0gIHJldHVybiAxCi19Ci0KLWV4aXRjb2RlPTAKLWlmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCi1maQotCi10ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgewotICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgotICBlY2hvIFBsZWFzZSB0ZWxsIGF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCi0gIGVjaG8gaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKLSAgZWNobyBtZXNzYWdlCi19Ci0KLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7Ci0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJwotICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAotICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCi0gICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKLSAgIyBjYXNlIGF0IGxpbmUgZW5kLgotICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKLSAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCi0gICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKICAgc2VkIC1uICcKICAgICBwCiAgICAgL1skXUxJTkVOTy89CkBAIC00NTMsOCArNDQyLDcgQEAKICAgICAgIHMvLVxuLiovLwogICAgICcgPiRhc19tZS5saW5lbm8gJiYKICAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8Ci0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKQEAgLTQ2NCw0OSArNDUyLDQwIEBACiAgIGV4aXQKIH0KIAotCi1pZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZGlybmFtZT1kaXJuYW1lCi1lbHNlCi0gIGFzX2Rpcm5hbWU9ZmFsc2UKLWZpCi0KIEVDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9Ci1jYXNlIGBlY2hvIC1uIHhgIGluCitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAogLW4qKQotICBjYXNlIGBlY2hvICd4XGMnYCBpbgorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KICAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCi0gICopICAgRUNIT19DPSdcYyc7OworICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OwogICBlc2FjOzsKICopCiAgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKLSAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQogaWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCiAgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKIGVsc2UKICAgcm0gLWYgY29uZiQkLmRpcgotICBta2RpciBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIGZpCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9J2xuIC1zJwotICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgotICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgotICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KLSAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KLSAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKICAgICBhc19sbl9zPSdjcCAtcCcKLWVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9bG4KKyAgZmkKIGVsc2UKICAgYXNfbG5fcz0nY3AgLXAnCiBmaQpAQCAtNTE0LDcgKzQ5Myw3IEBACiBybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQpAQCAtNTMxLDEyICs1MTAsMTIgQEAKICAgYXNfdGVzdF94PScKICAgICBldmFsIHNoIC1jICdcJycKICAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgotICAgICAgICB0ZXN0IC1kICIkMS8uIjsKKwl0ZXN0IC1kICIkMS8uIjsKICAgICAgIGVsc2UKLQljYXNlICQxIGluCi0gICAgICAgIC0qKXNldCAiLi8kMSI7OworCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKIAllc2FjOwotCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCiAJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQogICAgICdcJycgc2gKICAgJwpAQCAtNTUxLDI2ICs1MzAsMjUgQEAKIAogCiAKLQogIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgogU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KIAotY2FzZSBYJEVDSE8gaW4KK2Nhc2UgWCRsdF9FQ0hPIGluCiBYKi0tZmFsbGJhY2stZWNobykKICAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KLSAgRUNITz1gZWNobyAiJEVDSE8iIHwgc2VkICdzLFxcXFxcJFxcJDAsJyQwJywnYAorICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCiAgIDs7CiBlc2FjCiAKLWVjaG89JHtFQ0hPLWVjaG99CitFQ0hPPSR7bHRfRUNITy1lY2hvfQogaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgogICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KICAgc2hpZnQKIGVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KICAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgogICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKICAgOgogZWxzZQogICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCkBAIC01ODAsOSArNTU4LDkgQEAKIGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCiAgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCiAgIHNoaWZ0Ci0gIGNhdCA8PEVPRgorICBjYXQgPDxfTFRfRU9GCiAkKgotRU9GCitfTFRfRU9GCiAgIGV4aXQgMAogZmkKIApAQCAtNTkwLDEyMiArNTY4LDExOCBAQAogIyBpZiBDRFBBVEggaXMgc2V0LgogKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAycSAiJDAiJyAnZWNobyB0ZXN0JzsgZG8KLSAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgotICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgotICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKLSAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotZmkKK2lmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorICBpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICAjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKIAotaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgOgotZWxzZQotICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKLSAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZwotICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJwotICAjCi0gICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKyAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCisgICAgIworICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KIAotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgICBFQ0hPPSIkZGlyL2VjaG8iCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgotICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgZWNobz0iJGRpci9lY2hvIgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgogCi0gIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgotICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgotICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCi0gICAgICBlY2hvPSdwcmludCAtcicKLSAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgotCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCi0gICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KLSAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAotICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCi0gICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQlDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAotCWV4cG9ydCBDT05GSUdfU0hFTEwKLQlTSEVMTD0iJENPTkZJR19TSEVMTCIKLQlleHBvcnQgU0hFTEwKLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCi0JICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JZWNobz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCisgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICAgIGlmIHRlc3QgIlhgeyBwcmludCAtciAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICAgIEVDSE89J3ByaW50IC1yJworICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKwkgICB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KICAgICAgIGVsc2UKLQkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgotCXByZXY9OgorICAgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworICAgICAgICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICAjIENvb2wsIHByaW50ZiB3b3JrcworCSAgOgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbHNlCisJICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCSAgcHJldj06CiAKLQlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCA1MHEgIiQwIic7IGRvCi0JICBpZiAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiKSAyPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICBicmVhaworCSAgZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgNTBxICIkMCInOyBkbworCSAgICBpZiB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIjsgfSAyPi9kZXYvbnVsbAorCSAgICB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgcHJldj0iJGNtZCIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCisJICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCisJICAgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICAgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9CisJICBlbHNlCisJICAgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCisJICAgIEVDSE89ZWNobwogCSAgZmkKLQkgIHByZXY9IiRjbWQiCi0JZG9uZQotCi0JaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9Ci0JZWxzZQotCSAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KLQkgIGVjaG89ZWNobwotCWZpCisgICAgICAgIGZpCiAgICAgICBmaQogICAgIGZpCiAgIGZpCiBmaQotZmkKIAogIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQogIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCi1FQ0hPPSRlY2hvCi1pZiB0ZXN0ICJYJEVDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFwkMCAtLWZhbGxiYWNrLWVjaG8iCitsdF9FQ0hPPSRFQ0hPCitpZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKyAgIGx0X0VDSE89IiRDT05GSUdfU0hFTEwgXFxcJFwkMCAtLWZhbGxiYWNrLWVjaG8iCiBmaQogCiAKIAogCi10YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFgKLQotdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Rjc3Ci0KLWV4ZWMgNzwmMCA8L2Rldi9udWxsIDY+JjEKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQogCiAjIE5hbWUgb2YgdGhlIGhvc3QuCiAjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLApAQCAtNzIzLDE0ICs2OTcsMTQgQEAKIHN1YmRpcnM9CiBNRkxBR1M9CiBNQUtFRkxBR1M9Ci1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQogCiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0nbGliZmZpJwogUEFDS0FHRV9UQVJOQU1FPSdsaWJmZmknCi1QQUNLQUdFX1ZFUlNJT049JzMuMC41JwotUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjAuNScKK1BBQ0tBR0VfVkVSU0lPTj0nMy4wLjEwcmMwJworUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjAuMTByYzAnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbCcKK1BBQ0tBR0VfVVJMPScnCiAKICMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KIGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKQEAgLTc2OCwyMDAgKzc0MiwyMTkgQEAKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAKLWFjX3N1YnN0X3ZhcnM9J1NIRUxMCi1QQVRIX1NFUEFSQVRPUgotUEFDS0FHRV9OQU1FCi1QQUNLQUdFX1RBUk5BTUUKLVBBQ0tBR0VfVkVSU0lPTgotUEFDS0FHRV9TVFJJTkcKLVBBQ0tBR0VfQlVHUkVQT1JUCi1leGVjX3ByZWZpeAotcHJlZml4Ci1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lCi1iaW5kaXIKLXNiaW5kaXIKLWxpYmV4ZWNkaXIKLWRhdGFyb290ZGlyCi1kYXRhZGlyCi1zeXNjb25mZGlyCi1zaGFyZWRzdGF0ZWRpcgotbG9jYWxzdGF0ZWRpcgotaW5jbHVkZWRpcgotb2xkaW5jbHVkZWRpcgotZG9jZGlyCi1pbmZvZGlyCi1odG1sZGlyCi1kdmlkaXIKLXBkZmRpcgotcHNkaXIKLWxpYmRpcgotbG9jYWxlZGlyCi1tYW5kaXIKLURFRlMKLUVDSE9fQwotRUNIT19OCi1FQ0hPX1QKLUxJQlMKLWJ1aWxkX2FsaWFzCi1ob3N0X2FsaWFzCi10YXJnZXRfYWxpYXMKLWJ1aWxkCi1idWlsZF9jcHUKLWJ1aWxkX3ZlbmRvcgotYnVpbGRfb3MKLWhvc3QKLWhvc3RfY3B1Ci1ob3N0X3ZlbmRvcgotaG9zdF9vcwotdGFyZ2V0Ci10YXJnZXRfY3B1Ci10YXJnZXRfdmVuZG9yCi10YXJnZXRfb3MKLUlOU1RBTExfUFJPR1JBTQotSU5TVEFMTF9TQ1JJUFQKLUlOU1RBTExfREFUQQotYW1fX2lzcmMKLUNZR1BBVEhfVwotUEFDS0FHRQotVkVSU0lPTgotQUNMT0NBTAotQVVUT0NPTkYKLUFVVE9NQUtFCi1BVVRPSEVBREVSCi1NQUtFSU5GTwotaW5zdGFsbF9zaAotU1RSSVAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTQotbWtkaXJfcAotQVdLCi1TRVRfTUFLRQotYW1fX2xlYWRpbmdfZG90Ci1BTVRBUgotYW1fX3RhcgotYW1fX3VudGFyCi1DQwotQ0ZMQUdTCi1MREZMQUdTCi1DUFBGTEFHUwotYWNfY3RfQ0MKLUVYRUVYVAotT0JKRVhUCi1ERVBESVIKLWFtX19pbmNsdWRlCi1hbV9fcXVvdGUKLUFNREVQX1RSVUUKLUFNREVQX0ZBTFNFCi1BTURFUEJBQ0tTTEFTSAotQ0NERVBNT0RFCi1hbV9fZmFzdGRlcENDX1RSVUUKLWFtX19mYXN0ZGVwQ0NfRkFMU0UKLUNDQVMKLUNDQVNGTEFHUwotQ0NBU0RFUE1PREUKLWFtX19mYXN0ZGVwQ0NBU19UUlVFCi1hbV9fZmFzdGRlcENDQVNfRkFMU0UKLVNFRAotR1JFUAotRUdSRVAKLUxOX1MKLUVDSE8KLUFSCi1SQU5MSUIKLUNQUAotQ1hYCi1DWFhGTEFHUwotYWNfY3RfQ1hYCi1DWFhERVBNT0RFCi1hbV9fZmFzdGRlcENYWF9UUlVFCi1hbV9fZmFzdGRlcENYWF9GQUxTRQotQ1hYQ1BQCi1GNzcKLUZGTEFHUwotYWNfY3RfRjc3Ci1MSUJUT09MCi1NQUlOVEFJTkVSX01PREVfVFJVRQotTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCi1NQUlOVAotVEVTVFNVQkRJUl9UUlVFCi1URVNUU1VCRElSX0ZBTFNFCi1BTV9SVU5URVNURkxBR1MKLU1JUFNfVFJVRQotTUlQU19GQUxTRQotU1BBUkNfVFJVRQotU1BBUkNfRkFMU0UKLVg4Nl9UUlVFCi1YODZfRkFMU0UKLVg4Nl9GUkVFQlNEX1RSVUUKLVg4Nl9GUkVFQlNEX0ZBTFNFCi1YODZfV0lOMzJfVFJVRQotWDg2X1dJTjMyX0ZBTFNFCi1YODZfREFSV0lOX1RSVUUKLVg4Nl9EQVJXSU5fRkFMU0UKLUFMUEhBX1RSVUUKLUFMUEhBX0ZBTFNFCi1JQTY0X1RSVUUKLUlBNjRfRkFMU0UKLU0zMlJfVFJVRQotTTMyUl9GQUxTRQotTTY4S19UUlVFCi1NNjhLX0ZBTFNFCi1QT1dFUlBDX1RSVUUKLVBPV0VSUENfRkFMU0UKLVBPV0VSUENfQUlYX1RSVUUKLVBPV0VSUENfQUlYX0ZBTFNFCi1QT1dFUlBDX0RBUldJTl9UUlVFCi1QT1dFUlBDX0RBUldJTl9GQUxTRQotUE9XRVJQQ19GUkVFQlNEX1RSVUUKLVBPV0VSUENfRlJFRUJTRF9GQUxTRQotQVJNX1RSVUUKLUFSTV9GQUxTRQotTElCRkZJX0NSSVNfVFJVRQotTElCRkZJX0NSSVNfRkFMU0UKLUZSVl9UUlVFCi1GUlZfRkFMU0UKLVMzOTBfVFJVRQotUzM5MF9GQUxTRQotWDg2XzY0X1RSVUUKLVg4Nl82NF9GQUxTRQotU0hfVFJVRQotU0hfRkFMU0UKLVNINjRfVFJVRQotU0g2NF9GQUxTRQotUEFfTElOVVhfVFJVRQotUEFfTElOVVhfRkFMU0UKLVBBX0hQVVhfVFJVRQotUEFfSFBVWF9GQUxTRQotUEE2NF9IUFVYX1RSVUUKLVBBNjRfSFBVWF9GQUxTRQotQUxMT0NBCi1IQVZFX0xPTkdfRE9VQkxFCi1UQVJHRVQKLVRBUkdFVERJUgotdG9vbGV4ZWNkaXIKLXRvb2xleGVjbGliZGlyCithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUwogTElCT0JKUwotTFRMSUJPQkpTJwordG9vbGV4ZWNsaWJkaXIKK3Rvb2xleGVjZGlyCitUQVJHRVRESVIKK1RBUkdFVAorSEFWRV9MT05HX0RPVUJMRQorQUxMT0NBCitQQTY0X0hQVVhfRkFMU0UKK1BBNjRfSFBVWF9UUlVFCitQQV9IUFVYX0ZBTFNFCitQQV9IUFVYX1RSVUUKK1BBX0xJTlVYX0ZBTFNFCitQQV9MSU5VWF9UUlVFCitTSDY0X0ZBTFNFCitTSDY0X1RSVUUKK1NIX0ZBTFNFCitTSF9UUlVFCitYODZfNjRfRkFMU0UKK1g4Nl82NF9UUlVFCitTMzkwX0ZBTFNFCitTMzkwX1RSVUUKK0ZSVl9GQUxTRQorRlJWX1RSVUUKK0xJQkZGSV9DUklTX0ZBTFNFCitMSUJGRklfQ1JJU19UUlVFCitBVlIzMl9GQUxTRQorQVZSMzJfVFJVRQorQVJNX0ZBTFNFCitBUk1fVFJVRQorUE9XRVJQQ19GUkVFQlNEX0ZBTFNFCitQT1dFUlBDX0ZSRUVCU0RfVFJVRQorUE9XRVJQQ19EQVJXSU5fRkFMU0UKK1BPV0VSUENfREFSV0lOX1RSVUUKK1BPV0VSUENfQUlYX0ZBTFNFCitQT1dFUlBDX0FJWF9UUlVFCitQT1dFUlBDX0ZBTFNFCitQT1dFUlBDX1RSVUUKK002OEtfRkFMU0UKK002OEtfVFJVRQorTTMyUl9GQUxTRQorTTMyUl9UUlVFCitJQTY0X0ZBTFNFCitJQTY0X1RSVUUKK0FMUEhBX0ZBTFNFCitBTFBIQV9UUlVFCitYODZfREFSV0lOX0ZBTFNFCitYODZfREFSV0lOX1RSVUUKK1g4Nl9XSU42NF9GQUxTRQorWDg2X1dJTjY0X1RSVUUKK1g4Nl9XSU4zMl9GQUxTRQorWDg2X1dJTjMyX1RSVUUKK1g4Nl9GUkVFQlNEX0ZBTFNFCitYODZfRlJFRUJTRF9UUlVFCitYODZfRkFMU0UKK1g4Nl9UUlVFCitTUEFSQ19GQUxTRQorU1BBUkNfVFJVRQorTUlQU19GQUxTRQorTUlQU19UUlVFCitBTV9MVExERkxBR1MKK0FNX1JVTlRFU1RGTEFHUworVEVTVFNVQkRJUl9GQUxTRQorVEVTVFNVQkRJUl9UUlVFCitNQUlOVAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCitNQUlOVEFJTkVSX01PREVfVFJVRQorQ1BQCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorbHRfRUNITworUkFOTElCCitBUgorT0JKRFVNUAorTE5fUworTk0KK2FjX2N0X0RVTVBCSU4KK0RVTVBCSU4KK0xECitGR1JFUAorRUdSRVAKK0dSRVAKK1NFRAorTElCVE9PTAorYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFCithbV9fZmFzdGRlcENDQVNfVFJVRQorQ0NBU0RFUE1PREUKK0NDQVNGTEFHUworQ0NBUworYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK0FNREVQQkFDS1NMQVNICitBTURFUF9GQUxTRQorQU1ERVBfVFJVRQorYW1fX3F1b3RlCithbV9faW5jbHVkZQorREVQRElSCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCithbV9fdW50YXIKK2FtX190YXIKK0FNVEFSCithbV9fbGVhZGluZ19kb3QKK1NFVF9NQUtFCitBV0sKK21rZGlyX3AKK01LRElSX1AKK0lOU1RBTExfU1RSSVBfUFJPR1JBTQorU1RSSVAKK2luc3RhbGxfc2gKK01BS0VJTkZPCitBVVRPSEVBREVSCitBVVRPTUFLRQorQVVUT0NPTkYKK0FDTE9DQUwKK1ZFUlNJT04KK1BBQ0tBR0UKK0NZR1BBVEhfVworYW1fX2lzcmMKK0lOU1RBTExfREFUQQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfUFJPR1JBTQordGFyZ2V0X29zCit0YXJnZXRfdmVuZG9yCit0YXJnZXRfY3B1Cit0YXJnZXQKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCiBhY19zdWJzdF9maWxlcz0nJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCitlbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljCit3aXRoX3BpYworZW5hYmxlX2Zhc3RfaW5zdGFsbAord2l0aF9nbnVfbGQKK2VuYWJsZV9saWJ0b29sX2xvY2sKK2VuYWJsZV9tYWludGFpbmVyX21vZGUKK2VuYWJsZV9kZWJ1ZworZW5hYmxlX3N0cnVjdHMKK2VuYWJsZV9yYXdfYXBpCitlbmFibGVfcHVyaWZ5X3NhZmV0eQorJwogICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKIGhvc3RfYWxpYXMKIHRhcmdldF9hbGlhcwogQ0NBUwogQ0NBU0ZMQUdTCiBDUFAKLUNQUEZMQUdTCi1DWFgKLUNYWEZMQUdTCi1MREZMQUdTCi1MSUJTCi1DQ0MKLUNYWENQUAotRjc3Ci1GRkxBR1MnCitDUFBGTEFHUycKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCiBhY19pbml0X2hlbHA9CiBhY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCiAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCiBjYWNoZV9maWxlPS9kZXYvbnVsbApAQCAtMTA2MCwxMyArMTA1MywyMCBAQAogICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCi0gICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1ubyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKIAogICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQogICAgIGFjX3ByZXY9ZG9jZGlyIDs7CkBAIC0xMDc5LDEzICsxMDc5LDIwIEBACiAgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAotICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPVwkYWNfb3B0YXJnIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAogICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCkBAIC0xMjc2LDIyICsxMjgzLDM2IEBACiAgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKIAogICAtd2l0aC0qIHwgLS13aXRoLSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9XCRhY19vcHRhcmcgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9bm8gOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKIAogICAtLXgpCiAgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgpAQCAtMTMxMSwyNSArMTMzMiwyNSBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIC0qKSBhc19mbl9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCiAgICAgOzsKIAogICAqPSopCiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYwogICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwogICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CiAKICAgKikKICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgogICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KICAgICA7OwogCkBAIC0xMzM4LDIzICsxMzU5LDM2IEBACiAKIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgogICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCi0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgogZmkKIAotIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCiBmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKIAkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCiAJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKIAkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKIGRvCiAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgogICBjYXNlICRhY192YWwgaW4KICAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OwogICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKICAgZXNhYwotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgogZG9uZQogCiAjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCkBAIC0xMzY4LDcgKzE0MDIsNyBAQAogaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCiAgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgogICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCiAgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9eWVzCkBAIC0xMzg0LDIzICsxNDE4LDIxIEBACiBhY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKIGFjX2xzX2RpPWBscyAtZGkgLmAgJiYKIGFjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCiB0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCiAKIAogIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgogaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKICAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkMCIgfAorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMTQyNywxMyArMTQ1OSwxMSBAQAogZmkKIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCiAgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKIGZpCiBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCiBhY19hYnNfY29uZmRpcj1gKAotCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgeyBlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfbXNnIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgIiRhY19tc2ciCiAJcHdkKWAKICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCiBpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCkBAIC0xNDU5LDcgKzE0ODksNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmZmaSAzLjAuNSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsaWJmZmkgMy4wLjEwcmMwIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0ODEsOSArMTUxMSw5IEBACiAKIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKICAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCi0JCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCiAgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCi0JCQkgIFtQUkVGSVhdCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCiAKIEJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgogXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKQEAgLTE0OTMsMjUgKzE1MjMsMjUgQEAKIEZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgogCiBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWRhdGFyb290ZGlyPURJUiAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KLSAgLS1sb2NhbGVkaXI9RElSICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KLSAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQotICAtLWRvY2Rpcj1ESVIgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYmZmaV0KLSAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQotICAtLXBkZmRpcj1ESVIgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYmZmaV0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KIF9BQ0VPRgogCiAgIGNhdCA8PFxfQUNFT0YKQEAgLTE1MzAsMTEgKzE1NjAsMTIgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4wLjU6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4wLjEwcmMwOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKIE9wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCiAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKICAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQogICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCkBAIC0xNTU0LDEwICsxNTg1LDkgQEAKIE9wdGlvbmFsIFBhY2thZ2VzOgogICAtLXdpdGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10KICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQotICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCiAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQotICAtLXdpdGgtdGFnc1s9VEFHU10gICAgICBpbmNsdWRlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgW2F1dG9tYXRpY10KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCkBAIC0xNTY1LDE2ICsxNTk1LDExIEBACiAgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQogICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CiAgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KLSAgQ1BQRkxBR1MgICAgQy9DKysvT2JqZWN0aXZlIEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCiAgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgogICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCiAgIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgotICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAotICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKLSAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgotICBGNzcgICAgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGNvbW1hbmQKLSAgRkZMQUdTICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBmbGFncwogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgpAQCAtMTU4NywxNSArMTYxMiwxNyBAQAogaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgogICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgogICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8IGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKICAgICBhY19idWlsZGRpcj0uCiAKIGNhc2UgIiRhY19kaXIiIGluCiAuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICopCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKICAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgogICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CiAgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwpAQCAtMTYzMSw3ICsxNjU4LDcgQEAKICAgICAgIGVjaG8gJiYKICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKICAgICBlbHNlCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgogICAgIGZpIHx8IGFjX3N0YXR1cz0kPwogICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KICAgZG9uZQpAQCAtMTY0MCwyMiArMTY2Nyw1NTcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1saWJmZmkgY29uZmlndXJlIDMuMC41Ci1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKK2xpYmZmaSBjb25maWd1cmUgMy4wLjEwcmMwCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCiBfQUNFT0YKICAgZXhpdAogZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jX2NoZWNrX2Z1bmMgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKKyMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCisjIGNvbXB1dGVkCithY19mbl9jX2NvbXB1dGVfaW50ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJGFjX21pZCArIDEgJiYgYWNfbG89JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgKyAxICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknICsgMSAmJiBhY19sbz0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbiAjKCgKKz8qKSBldmFsICIkMz1cJGFjX2xvIjsgYWNfcmV0dmFsPTAgOzsKKycnKSBhY19yZXR2YWw9MSA7OworZXNhYworICBlbHNlCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK3N0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCgkMikgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbGQiLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsdSIsIGkpOworICAgIH0KKyAgLyogRG8gbm90IG91dHB1dCBhIHRyYWlsaW5nIG5ld2xpbmUsIGFzIHRoaXMgY2F1c2VzIFxyXG4gY29uZnVzaW9uCisgICAgIG9uIHNvbWUgcGxhdGZvcm1zLiAgKi8KKyAgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvID4+Y29uZnRlc3QudmFsOyByZWFkICQzIDxjb25mdGVzdC52YWw7IGFjX3JldHZhbD0wCitlbHNlCisgIGFjX3JldHZhbD0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QudmFsCisKKyAgZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX2NvbXB1dGVfaW50CiBjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBsaWJmZmkgJGFzX21lIDMuMC41LCB3aGljaCB3YXMKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgbGliZmZpICRhc19tZSAzLjAuMTByYzAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQAogCkBAIC0xNjkxLDggKzIyNTMsOCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBlY2hvICJQQVRIOiAkYXNfZGlyIgotZG9uZQorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIH0gPiY1CkBAIC0xNzI2LDEyICsyMjg4LDEyIEBACiAgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgICBjb250aW51ZSA7OwogICAgICpcJyopCi0gICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgIGVzYWMKICAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwogICAgIDIpCi0gICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgogCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KICAgICAgIGVsc2UKQEAgLTE3NDcsMTMgKzIzMDksMTMgQEAKIAkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKICAgICAgIDs7CiAgICAgZXNhYwogICBkb25lCiBkb25lCi0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQogCiAjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCiAjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQpAQCAtMTc3OCwxMiArMjM0MCwxMyBAQAogICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAogICAgICoke2FzX25sfSopCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwogICAgICAgZXNhYwogICAgICAgY2FzZSAkYWNfdmFyIGluICMoCiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CiAgICAgICBlc2FjIDs7CiAgICAgZXNhYwogICBkb25lCkBAIC0xODEyLDkgKzIzNzUsOSBAQAogICAgIGRvCiAgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKICAgICAgIGNhc2UgJGFjX3ZhbCBpbgotICAgICAgKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CiAgICAgICBlc2FjCi0gICAgICBlY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICBkb25lIHwgc29ydAogICAgIGVjaG8KIApAQCAtMTgyOSw5ICsyMzkyLDkgQEAKICAgICAgIGRvCiAJZXZhbCBhY192YWw9XCQkYWNfdmFyCiAJY2FzZSAkYWNfdmFsIGluCi0JKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OwogCWVzYWMKLQllY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCiAgICAgICBkb25lIHwgc29ydAogICAgICAgZWNobwogICAgIGZpCkBAIC0xODQ3LDgzICsyNDEwLDg4IEBACiAgICAgICBlY2hvCiAgICAgZmkKICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKLSAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgogICB9ID4mNQogICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKICAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKICcgMAogZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCi0gIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKIGRvbmUKIGFjX3NpZ25hbD0wCiAKICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCiBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAogCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKICMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCiBfQUNFT0YKIAorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKIAogIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCi0jIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCiBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCi0gIHNldCB4ICIkQ09ORklHX1NJVEUiCisgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCiBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgotICBzZXQgeCAiJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgIiRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQogZWxzZQotICBzZXQgeCAiJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiBcCi0JIiRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQogZmkKLXNoaWZ0Ci1mb3IgYWNfc2l0ZV9maWxlCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgogZG8KLSAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KICAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKICAgICAuICIkYWNfc2l0ZV9maWxlIgogICBmaQogZG9uZQogCiBpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwKLSAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCi0gIGlmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KICAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKICAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKICAgICBlc2FjCiAgIGZpCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgID4kY2FjaGVfZmlsZQogZmkKIApAQCAtMTkzNyw2OCArMjUwNSw1NiBAQAogICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KICAgICBzZXQsKQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsc2V0KQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLCk7OwogICAgICopCiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KLQlhY19jYWNoZV9jb3JydXB0ZWQ9OgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQogICAgICAgZmk7OwogICBlc2FjCiAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KICAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCiAgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgotICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CiAgICAgZXNhYwogICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgogICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKICAgICBlc2FjCiAgIGZpCiBkb25lCiBpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTIwMTIsMjQgKzI1NjgsMTYgQEAKIAogYWNfYXV4X2Rpcj0KIGZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCi0gIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgotICAgIGJyZWFrCi0gIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKLSAgICBicmVhawotICBmaQorICBmb3IgYWNfdCBpbiBpbnN0YWxsLXNoIGluc3RhbGwuc2ggc2h0b29sOyBkbworICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3QiOyB0aGVuCisgICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyLyRhY190IC1jIgorICAgICAgYnJlYWsgMgorICAgIGZpCisgIGRvbmUKIGRvbmUKIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CiBmaQogCiAjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKQEAgLTIwNDMsMzUgKzI1OTEsMjcgQEAKIAogIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgogJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCiB0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKICAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKIHRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CiBhY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQogY2FzZSAkYWNfY3ZfYnVpbGQgaW4KICotKi0qKSA7OwotKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKikgYXNfZm5fZXJyb3IgImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7CiBlc2FjCiBidWlsZD0kYWNfY3ZfYnVpbGQKIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKQEAgLTIwODcsMjggKzI2MjcsMjQgQEAKIGNhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgogICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAogZWxzZQogICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CiBjYXNlICRhY19jdl9ob3N0IGluCiAqLSotKikgOzsKLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisqKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OwogZXNhYwogaG9zdD0kYWNfY3ZfaG9zdAogYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwpAQCAtMjEyNCwyOCArMjY2MCwyNCBAQAogY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KICAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CiBlbHNlCiAgIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KIGNhc2UgJGFjX2N2X3RhcmdldCBpbgogKi0qLSopIDs7Ci0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgdGFyZ2V0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiICIkTElORU5PIiA1OzsKIGVzYWMKIHRhcmdldD0kYWNfY3ZfdGFyZ2V0CiBhY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCkBAIC0yMTY3LDExICsyNjk5LDEyIEBACiAgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKICAgICBOT05FTk9ORXMseCx4LCAmJgogICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisKIHRhcmdldF9hbGlhcz0ke3RhcmdldF9hbGlhcy0kaG9zdF9hbGlhc30KIAogLiAke3NyY2Rpcn0vY29uZmlndXJlLmhvc3QKIAotYW1fX2FwaV92ZXJzaW9uPScxLjEwJworYW1fX2FwaV92ZXJzaW9uPScxLjExJwogCiAjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgpAQCAtMjE4NiwyMiArMjcxOSwyMyBAQAogIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgogIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCiAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KLWNhc2UgJGFzX2Rpci8gaW4KLSAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCi0gID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKICAgL3Vzci91Y2IvKiApIDs7CiAgICopCiAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KQEAgLTIyMTksMTcgKzI3NTMsMjkgQEAKIAkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgotCSAgICBicmVhayAzCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKIAkgIGZpCiAJZmkKICAgICAgIGRvbmUKICAgICBkb25lCiAgICAgOzsKIGVzYWMKLWRvbmUKKworICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgogCiBmaQogICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgpAQCAtMjI0Miw4ICsyNzg4LDggQEAKICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCiAgIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KIAogIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgogIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KQEAgLTIyNTMsMjEgKzI3OTksMzQgQEAKIAogdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9CiAjIEp1c3QgaW4gY2FzZQogc2xlZXAgMQogZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCisgICAgYXNfZm5fZXJyb3IgInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7OworZXNhYworCiAjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCiAjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKICMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKICMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCiAjIGRpcmVjdG9yeSkuCiBpZiAoCi0gICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAogICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCiAgICAgICAjIC1MIGRpZG4ndCB3b3JrLgotICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAogICAgZmkKICAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKICAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCkBAIC0yMjc3LDExICsyODM2LDggQEAKICAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKICAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKICAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgYXNfZm5fZXJyb3IgImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CiAgICBmaQogCiAgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCkBAIC0yMjkwLDUyICsyODQ2LDE2MiBAQAogICAgIyBPay4KICAgIDoKIGVsc2UKLSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgYXNfZm5fZXJyb3IgIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCiAjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KIHRlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgogICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCi0jIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisjIERvdWJsZSBhbnkgXCBvciAkLgogIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KLWNhdCA8PFxfQUNFT0YgPmNvbmZ0ZXN0LnNlZAotcy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLwotX0FDRU9GCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWBlY2hvICRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHwgc2VkIC1mIGNvbmZ0ZXN0LnNlZGAKLXJtIC1mIGNvbmZ0ZXN0LnNlZAorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCiAKICMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKIGFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKIAotdGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCiAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKIGlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCiAgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCiBlbHNlCiAgIGFtX21pc3NpbmdfcnVuPQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbwogCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KIAkgICB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9IHx8IGNvbnRpbnVlCiAJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKApAQCAtMjM0NywxMSArMzAxMywxMiBAQAogCSAgIGVzYWMKIAkgZG9uZQogICAgICAgIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KICAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCiAgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCiAgIGVsc2UKQEAgLTIzNTksMTIgKzMwMjYsMTEgQEAKICAgICAjIHZhbHVlIGZvciBNS0RJUl9QIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCiAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKICAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCi0gICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgogICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgogICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1LRElSX1AiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1LRElSX1AiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNS0RJUl9QIiA+JjUKKyRhc19lY2hvICIkTUtESVJfUCIgPiY2OyB9CiAKIG1rZGlyX3A9IiRNS0RJUl9QIgogY2FzZSAkbWtkaXJfcCBpbgpAQCAtMjM3NiwxMCArMzA0MiwxMCBAQAogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCiAgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTIzODksMzYgKzMwNTUsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIEFXSz0kYWNfY3ZfcHJvZ19BV0sKIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVdLIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKICAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKIGRvbmUKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1zZXQgeCAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi1pZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgogU0hFTEwgPSAvYmluL3NoCkBAIC0yNDM1LDEyICszMTAyLDEyIEBACiBybSAtZiBjb25mdGVzdC5tYWtlCiBmaQogaWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiAgIFNFVF9NQUtFPQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKIGZpCiAKQEAgLTI0NTksOSArMzEyNiw3IEBACiAgIGFtX19pc3JjPScgLUkkKHNyY2RpciknCiAgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAogICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQogICBmaQogZmkKIApAQCAtMjQ3Nyw3ICszMTQyLDcgQEAKIAogIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgogIFBBQ0tBR0U9J2xpYmZmaScKLSBWRVJTSU9OPSczLjAuNScKKyBWRVJTSU9OPSczLjAuMTByYzAnCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMjUwNSwxMTIgKzMxNzAsNiBAQAogCiBNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KIAotaW5zdGFsbF9zaD0ke2luc3RhbGxfc2gtIlwkKFNIRUxMKSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KLQotIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCi0jIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0Ci0jIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCi0jIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVNUUklQPSRhY19jdl9wcm9nX1NUUklQCi1pZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCi0gIGFjX2N0X1NUUklQPSRTVFJJUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KLSAgICBTVFJJUD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIFNUUklQPSRhY19jdF9TVFJJUAotICBmaQotZWxzZQotICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCi1maQotCi1maQotSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKLQogIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KICMgc29tZSBwbGF0Zm9ybXMuCiAjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCkBAIC0yNjM5LDEwICszMTk4LDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjY1MiwyNSArMzIxMSwyNSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKQEAgLTI2NzksMTAgKzMyMzgsMTAgQEAKICAgYWNfY3RfQ0M9JENDCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yNjkyLDI1ICszMjUxLDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgpAQCAtMjcxOCwxMiArMzI3Nyw4IEBACiAgIGVsc2UKICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMKICAgICBDQz0kYWNfY3RfQ0MKQEAgLTI3MzYsMTAgKzMyOTEsMTAgQEAKICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjc0OSwyNSArMzMwNCwyNSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjc3NiwxMCArMzMzMSwxMCBAQAogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTI3OTAsMTggKzMzNDUsMTggQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwogICAgICAgIGNvbnRpbnVlCiAgICAgIGZpCiAgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCkBAIC0yODIwLDExICszMzc1LDExIEBACiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0yODM1LDEwICszMzkwLDEwIEBACiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yODQ4LDI1ICszNDAzLDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjg3OSwxMCArMzQzNCwxMCBAQAogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yODkyLDI1ICszNDQ3LDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjkyMiwxMiArMzQ3Nyw4IEBACiAgIGVsc2UKICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMKICAgICBDQz0kYWNfY3RfQ0MKQEAgLTI5MzcsNTEgKzM0ODgsMzcgQEAKIGZpCiAKIAotdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KIAogIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IikgMj4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMjk5Myw0MiArMzUzMCwzOCBAQAogfQogX0FDRU9GCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLmV4ZSBiLm91dCIKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KICMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KICMgb2YgZXhlZXh0LgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNjsgfQotYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotIwotIyBMaXN0IG9mIHBvc3NpYmxlIG91dHB1dCBmaWxlcywgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuCi0jIFRoZSBhbGdvcml0aG0gaXMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopCi0jIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4gIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCi1hY19maWxlcz0nYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dCcKLSMKLSMgVGhlIElSSVggNiBsaW5rZXIgd3JpdGVzIGludG8gZXhpc3RpbmcgZmlsZXMgd2hpY2ggbWF5IG5vdCBiZQotIyBleGVjdXRhYmxlLCByZXRhaW5pbmcgdGhlaXIgcGVybWlzc2lvbnMuICBSZW1vdmUgdGhlbSBmaXJzdCBzbyBhCi0jIHN1YnNlcXVlbnQgZXhlY3V0aW9uIHRlc3Qgd29ya3MuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKwogYWNfcm1maWxlcz0KIGZvciBhY19maWxlIGluICRhY19maWxlcwogZG8KICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CiAgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CiAgIGVzYWMKIGRvbmUKIHJtIC1mICRhY19ybWZpbGVzCiAKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCiBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgogIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKICMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCkBAIC0zMDM4LDE0ICszNTcxLDE0IEBACiBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCiAJOzsKICAgICBbYWJdLm91dCApCiAJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKIAkjIGNlcnRhaW5seSByaWdodC4KIAlicmVhazs7CiAgICAgKi4qICkKLSAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CiAJdGhlbiA6OyBlbHNlCiAJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCiAJZmkKQEAgLTMwNjQsNzggKzM1OTcsNDIgQEAKIGVsc2UKICAgYWNfZmlsZT0nJwogZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQogYWNfZXhlZXh0PSRhY19jdl9leGVleHQKIAotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAotIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgotICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVzCi0gICAgZWxzZQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0gIGZpCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KLQotcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLSMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2OyB9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQogIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCiAjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aApAQCAtMzE0MywzNyArMzY0MCw5MCBAQAogZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKIAkgIGJyZWFrOzsKICAgICAqICkgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQogZmkKLQotcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2OyB9CitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KIAogcm0gLWYgY29uZnRlc3QuJGFjX2V4dAogRVhFRVhUPSRhY19jdl9leGVleHQKIGFjX2V4ZWV4dD0kRVhFRVhUCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMTg1LDUxICszNzM1LDQ2IEBACiB9CiBfQUNFT0YKIHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCi1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCiBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgogICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CiAgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCiAgICAgICAgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CiBmaQotCiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CiBPQkpFWFQ9JGFjX2N2X29iamV4dAogYWNfb2JqZXh0PSRPQkpFWFQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzI0Myw1NCArMzc4OCwzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jb21waWxlcl9nbnU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jb21waWxlcl9nbnU9bm8KKyAgYWNfY29tcGlsZXJfZ251PW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQogYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQogYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCiAgICBhY19jX3dlcnJvcl9mbGFnPXllcwogICAgYWNfY3ZfcHJvZ19jY19nPW5vCiAgICBDRkxBR1M9Ii1nIgotICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzMwMSwzNCArMzgyNiwxMSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9wcm9nX2NjX2c9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlDRkxBR1M9IiIKLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMzM5LDM1ICszODQxLDEyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAotCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKIAkgQ0ZMQUdTPSItZyIKLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMzc4LDQyICszODU3LDE4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CiBpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCiAgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCkBAIC0zNDI5LDE4ICszODg0LDE0IEBACiAgICAgQ0ZMQUdTPQogICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY3ZfcHJvZ19jY19jODk9bm8KIGFjX3NhdmVfQ0M9JENDCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzQ5NywzMSArMzk0OCw5IEBACiAJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKIGRvCiAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKICAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKIGRvbmUKQEAgLTM1MzIsMTcgKzM5NjEsMTkgQEAKICMgQUNfQ0FDSEVfVkFMCiBjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgogICB4KQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwogICB4bm8pCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH11bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CiAgICopCiAgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OwogZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKIAorZmkKIAogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC0zNTU3LDQ0ICszOTg4LDQ0IEBACiBhbV9tYWtlPSR7TUFLRS1tYWtlfQogY2F0ID4gY29uZmluYyA8PCAnRU5EJwogYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAogLlBIT05ZOiBhbV9fZG9pdAogRU5ECiAjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CiBhbV9faW5jbHVkZT0iIyIKIGFtX19xdW90ZT0KIF9hbV9yZXN1bHQ9bm9uZQogIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KIGVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKLSMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KLSMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCi0jIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KLWlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgotICAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICAgYW1fX3F1b3RlPQotICAgX2FtX3Jlc3VsdD1HTlUKLWZpCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYwogIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCiBpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCiAgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCi0gICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQotICAgICAgYW1fX3F1b3RlPSJcIiIKLSAgICAgIF9hbV9yZXN1bHQ9QlNECi0gICBmaQorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYwogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQogcm0gLWYgY29uZmluYyBjb25mbWYKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CiBmaQogCkBAIC0zNjE0LDEwICs0MDQ1LDEwIEBACiAKIGRlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCiAgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKQEAgLTM2NDIsNiArNDA3MywxMSBAQAogICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgogICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAogICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKICAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCiAgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCiAgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZApAQCAtMzY1OSw3ICs0MDk1LDE3IEBACiAgICAgZG9uZQogICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKIAorICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKICAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OwogICAgIG5vc2lkZWVmZmVjdCkKICAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAogICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZApAQCAtMzY2OSwxOSArNDExNSwyMyBAQAogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC0zNzA1LDggKzQxNTUsOCBAQAogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQogQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCiAKICBpZgpAQCAtMzcyNCw2ICs0MTc0LDcgQEAKIAogCiAKKwogIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KIAogdGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCkBAIC0zNzMzLDEwICs0MTg0LDEwIEBACiAKIGRlcGNjPSIkQ0NBUyIgICBhbV9jb21waWxlcl9saXN0PQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCiAgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKQEAgLTM3NjEsNiArNDIxMiw5IEBACiAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCiAgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKworCiAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwogICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwogICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKQEAgLTM3NzgsNyArNDIzMiwxNyBAQAogICAgIGRvbmUKICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCiAKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCiAgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKICAgICBub3NpZGVlZmZlY3QpCiAgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKICAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKQEAgLTM3ODgsMTkgKzQyNTIsMjMgQEAKIAlicmVhawogICAgICAgZmkKICAgICAgIDs7CisgICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKICAgICBub25lKSBicmVhayA7OwogICAgIGVzYWMKLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgogICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKICAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAogICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCiAgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCiAgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQpAQCAtMzgyNCw4ICs0MjkyLDggQEAKIGZpCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQogQ0NBU0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQogCiAgaWYKQEAgLTM4NDAsMjIgKzQzMDgsMTggQEAKIAogCiBpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQogZmkKLXNldCBkdW1teSAkQ0M7IGFjX2NjPWBlY2hvICQyIHwKK3NldCBkdW1teSAkQ0M7IGFjX2NjPWAkYXNfZWNobyAiJDIiIHwKIAkJICAgICAgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKLWlmIHsgYXNfdmFyPWFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzg3MSw1OCArNDMzNSw2MyBAQAogIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KIGFjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1Jwogcm0gLWYgY29uZnRlc3QyLioKLWlmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KK2lmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07CiB0aGVuCiAgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289eWVzCiAgIGlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgogICAgICMgVGVzdCBmaXJzdCB0aGF0IGNjIGV4aXN0cyBhdCBhbGwuCiAgICAgaWYgeyBhY190cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgogICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKICAgICAgIHJtIC1mIGNvbmZ0ZXN0Mi4qCi0gICAgICBpZiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICAgICBpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgogICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CiBlc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQogICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisJIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY190cnkiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKICAgICAgIHRoZW4KIAkjIGNjIHdvcmtzIHRvby4KIAk6CkBAIC0zOTM5LDIzICs0NDA4LDIyIEBACiAKIGZpCiBpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbyA9IHllczsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogIyBGSVhNRTogd2UgcmVseSBvbiB0aGUgY2FjaGUgdmFyaWFibGUgbmFtZSBiZWNhdXNlCiAjIHRoZXJlIGlzIG5vIG90aGVyIHdheS4KIHNldCBkdW1teSAkQ0MKLWFjX2NjPWBlY2hvICQyIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCithbV9jYz1gZWNobyAkMiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgogICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KICAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCiAgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KQEAgLTM5NjUsMTc2ICs0NDMzLDE0NyBAQAogZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi4yLjYnCittYWNyb19yZXZpc2lvbj0nMS4zMDEyJworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZW5hYmxlX3NoYXJlZD15ZXMKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfc3RhdGljPXllcwotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotZmkKLQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQorICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKICAgICBkb25lCiAgIGRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLWx0X2FjX21heD0wCi1sdF9hY19jb3VudD0wCi0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwotIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQotICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KLSAgbHRfYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGJyZWFrCi0gIGZpCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAotICAgIGVjaG8gPj5jb25mdGVzdC5ubAotICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCi0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawotICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBmaQogICBkb25lCi1kb25lCi0KK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKIGZpCiAKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTRUQiID4mNjsgfQordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJncmVwIGdncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAotaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi1zZXQgZHVtbXkgZ3JlcCBnZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KICAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCi0jIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbwotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQotICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgogICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAogY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgogKkdOVSopCiAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OwogKikKICAgYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKICAgd2hpbGUgOgogICBkbwogICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCiAgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgogICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgIGVjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgogICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCiAgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgogICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCiAgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCkBAIC00MTQ2LDc3ICs0NTg1LDYxIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwogZXNhYwogCi0KLSAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKICAgZG9uZQotZG9uZQotCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKLQotCi1maQotCi1HUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgotaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQorICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQogZWxzZQogICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKIGZpCiAKLQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KICBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQogICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKICAgIGVsc2UKLSAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJlZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKLWlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KLXNldCBkdW1teSBlZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgogICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCi0jIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKLSAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KICAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCiBjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgogKkdOVSopCiAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OwogKikKICAgYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKICAgd2hpbGUgOgogICBkbwogICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCiAgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgogICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgIGVjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCiAgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCiAgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQogICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCkBAIC00MjI4LDM5ICs0NjUxLDExNCBAQAogICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKIGVzYWMKIAotCi0gICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKICAgZG9uZQotZG9uZQotCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKLQotCi1maQotCi1FR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCi1pZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQorICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCiBlbHNlCiAgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCiBmaQogCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9GR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRkdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQogCiAgICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQotIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKIAogCiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCiBlbHNlCiAgIHdpdGhfZ251X2xkPW5vCkBAIC00MjY5LDggKzQ3NjcsOCBAQAogYWNfcHJvZz1sZAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CiAgIGNhc2UgJGhvc3QgaW4KICAgKi0qLW1pbmd3KikKICAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CkBAIC00MjgzLDkgKzQ3ODEsOSBAQAogICAgIFtcXC9dKiB8ID86W1xcL10qKQogICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwogICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKICAgICAgIGRvbmUKICAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgogICAgICAgOzsKQEAgLTQyOTksMTQgKzQ3OTcsMTQgQEAKICAgICA7OwogICBlc2FjCiBlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KIGZpCi1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC00MzM2LDE5ICs0ODM0LDE3IEBACiAKIExEPSIkbHRfY3ZfcGF0aF9MRCIKIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCiBjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgpAQCAtNDM2MCw0MCArNDg1NiwyMiBAQAogICA7OwogZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQogd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBlbHNlCi0gICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZmkKLSAgICA7OwotZXNhYwogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX05NK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgogICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTQ0MzYsMjggKzQ5MTQsNDkzIEBACiAgICAgZG9uZQogICAgIElGUz0iJGx0X3NhdmVfaWZzIgogICBkb25lCi0gIHRlc3QgLXogIiRsdF9jdl9wYXRoX05NIiAmJiBsdF9jdl9wYXRoX05NPW5tCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQogZmkKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjY7IH0KLU5NPSIkbHRfY3ZfcGF0aF9OTSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9ubV9pbnRlcmZhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDQ1OiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDQ4OiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDUxOiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQogTE5fUz0kYXNfbG5fcwogaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLCwgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCiBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KQEAgLTQ0NzQsNyArNTQxNyw3IEBACiAjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgogCiBjYXNlICRob3N0X29zIGluCi1haXg0KiB8IGFpeDUqKQorYWl4WzQtOV0qKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCkBAIC00NTA3LDEyICs1NDUwLDE4IEBACiAgIGZpCiAgIDs7CiAKK2NlZ2NjKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKIGRhcndpbiogfCByaGFwc29keSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCiAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICBpKjg2ICkKICAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCkBAIC00NTcwLDcgKzU1MTksNyBAQAogICA7OwogCiBuZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwogICBlbHNlCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJwpAQCAtNDU4MywxMiArNTUzMiwxMiBAQAogICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KICAgOzsKIAotbnRvLXFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKIG9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKICAgZWxzZQogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCkBAIC00NjA3LDYgKzU1NTYsMTAgQEAKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAorc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKIHN5c3Y0IHwgc3lzdjQuMyopCiAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCiAgIG1vdG9yb2xhKQpAQCAtNDYzNCwxNCArNTU4NywxNCBAQAogICBlc2FjCiAgIDs7CiAKLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQordHBmKikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIGVzYWMKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQogZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCiBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgpAQCAtNDY0OSw2ICs1NjAyLDM2NyBAQAogCiAKIAorCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorCisKKworCisKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKICMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCiBMVENDPSR7TFRDQy0iJENDIn0KIApAQCAtNDY1OSw4ICs1OTczLDI1OCBAQAogY29tcGlsZXI9JENDCiAKIAorIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tCQ0RUXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tCRFJUXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW0FCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKK2VzYWMKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0XCIiOyB9ID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKwkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCisJICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKIGZpCiAKQEAgLTQ2NzIsMTA4ICs2MjM2LDEwNyBAQAogaWE2NC0qLWhwdXgqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKkVMRi0zMiopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCi0gICAgICA7OwotICAgICpFTEYtNjQqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgotICAgICAgOzsKKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CiAgICAgZXNhYwogICBmaQogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAqLSotaXJpeDYqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJyNsaW5lIDQ2OTMgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgZWNobyAnI2xpbmUgNjI1NyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZWxzZQotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtMzIiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKIAogeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICozMi1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MHgtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIGxpYnN1ZmY9NjQKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTAqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OworICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKQEAgLTQ3ODMsMTAgKzYzNDYsMTAgQEAKICAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgogICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfY2NfbmVlZHNfYmVsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC00Nzk0LDExICs2MzU3LDcgQEAKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKLSAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC00ODA5LDM0ICs2MzY4LDEzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWx0X2N2X2NjX25lZWRzX2JlbGY9bm8KKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgICBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTQ4NDQsOCArNjM4Miw4IEBACiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQogICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgogICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgogICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgpAQCAtNDg1NCw0MyArNjM5Miw2MjkgQEAKIHNwYXJjKi0qc29sYXJpcyopCiAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KICAgICAqNjQtYml0KikKICAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCiAgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKSAgICBMRD0iJHtMRC1sZH0gLTY0IiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OwogICAgICAgZXNhYwogICAgICAgOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKLQotCiBlc2FjCiAKIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgogCiAKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAoraWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorICAgIERTWU1VVElMPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICBmaQorZWxzZQorICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK05NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKK2lmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgIGFjX2N0X05NRURJVD0kTk1FRElUCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAoraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorICAgIE5NRURJVD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorICBmaQorZWxzZQorICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMSVBPPSRhY19jdl9wcm9nX0xJUE8KK2lmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgorICBhY19jdF9MSVBPPSRMSVBPCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTElQTytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisgICAgTElQTz0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBMSVBPPSRhY19jdF9MSVBPCisgIGZpCitlbHNlCisgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAoraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKKyRhc19lY2hvICIkT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorICAgIE9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MPSRhY19jdF9PVE9PTAorICBmaQorZWxzZQorICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CitpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgorICAgIE9UT09MNjQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorICBmaQorZWxzZQorICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKwogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgogICBDUFA9CiBmaQogaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAogICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCkBAIC00OTA0LDExICs3MDI4LDcgQEAKICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fU1REQ19fCiAjIGluY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNDkxNyw3NiArNzAzNywzNCBAQAogI2VuZGlmCiAJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKIAorZWxzZQogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLQogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKIAogICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwogICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiBfQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgogICBicmVhawogZmkKIApAQCAtNDk5OCw4ICs3MDc2LDggQEAKIGVsc2UKICAgYWNfY3ZfcHJvZ19DUFA9JENQUAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1BQIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KIGFjX3ByZXByb2Nfb2s9ZmFsc2UKIGZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwogZG8KQEAgLTUwMDksMTEgKzcwODcsNyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CkBAIC01MDIyLDgzICs3MDk2LDQwIEBACiAjZW5kaWYKIAkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogCiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIDoKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKwogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KIGZpCiAKIGFjX2V4dD1jCkBAIC01MTA4LDE2ICs3MTM5LDEyIEBACiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtNTEzMiw0NyArNzE1OSwyMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0cmluZy5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiBlbHNlCiAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQpAQCAtNTE4MiwxOCArNzE4NSwxNCBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwogZWxzZQogICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKQEAgLTUyMDMsMTQgKzcyMDIsMTAgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIDoKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTIzNywxMTMgKzcyMzIsMzYgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9oZWFkZXJfc3RkYz1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotCiBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCiAjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgotCi0KLQotCi0KLQotCi0KLQogZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCiAJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTUzNTEsMTQ2MiArNzI2OSwxOTYgQEAKIGRvbmUKIAogCi0KIGZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKCBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHgiInllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCiBfQUNFT0YKIAogZmkKIAogZG9uZQogCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KLSAgICBDWFg9JENDQwotICBlbHNlCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQwotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKIAotZmkKLWZpCi1DWFg9JGFjX2N2X3Byb2dfQ1hYCi1pZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKIAorIyBTZXQgb3B0aW9ucwogCi0gICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCi0gIGFjX2N0X0NYWD0kQ1hYCi0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCiAKLWZpCi1maQotYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAotaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCiAKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubwogCi0gIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCi1kb25lCiAKLSAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgotICAgIENYWD0iZysrIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ1hYPSRhY19jdF9DWFgKLSAgZmkKLWZpCisgIGVuYWJsZV93aW4zMl9kbGw9bm8KIAotICBmaQotZmkKLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY29tcGlsZXJfZ251PW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1HWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9Ci1hY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCi0gICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCi0gICBhY19jdl9wcm9nX2N4eF9nPW5vCi0gICBDWFhGTEFHUz0iLWciCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlDWFhGTEFHUz0iIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCi0JIENYWEZMQUdTPSItZyIKLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgotICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ci0gIGZpCi1maQotYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEJy4KLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCi0gICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCi0gIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKLSAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKLSAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCi0gICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAotICAjIGRpcmVjdG9yeS4KLSAgbWtkaXIgc3ViCi0KLSAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCi0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgY2FzZSAkZGVwbW9kZSBpbgotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQotQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgotICBhbV9fZmFzdGRlcENYWF9UUlVFPQotICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9Ci1maQotCi0KLQotCi1pZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLQotZmkKLSAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAotZWxzZQotICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNjsgfQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1maQotCi0KLWFjX2V4dD1mCi1hY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCi0gIGFjX2N2X3Byb2dfRjc3PSIkRjc3IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0Y3Nz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1GNzc9JGFjX2N2X3Byb2dfRjc3Ci1pZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JEY3NyIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotCi0gICAgdGVzdCAtbiAiJEY3NyIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRGNzciOyB0aGVuCi0gIGFjX2N0X0Y3Nz0kRjc3Ci0gIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19jdF9GNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0Y3Nz0kYWNfY3ZfcHJvZ19hY19jdF9GNzcKLWlmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfRjc3IiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0Y3NyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0Y3NyIgPSB4OyB0aGVuCi0gICAgRjc3PSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBGNzc9JGFjX2N0X0Y3NwotICBmaQotZmkKLQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEZvcnRyYW4gNzcgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXJtIC1mIGEub3V0Ci0KLSMgSWYgd2UgZG9uJ3QgdXNlIGAuRicgYXMgZXh0ZW5zaW9uLCB0aGUgcHJlcHJvY2Vzc29yIGlzIG5vdCBydW4gb24gdGhlCi0jIGlucHV0IGZpbGUuICAoTm90ZSB0aGF0IHRoaXMgb25seSBuZWVkcyB0byB3b3JrIGZvciBHTlUgY29tcGlsZXJzLikKLWFjX3NhdmVfZXh0PSRhY19leHQKLWFjX2V4dD1GCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Y3N19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLSNpZm5kZWYgX19HTlVDX18KLSAgICAgICBjaG9rZSBtZQotI2VuZGlmCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY29tcGlsZXJfZ251PW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2Y3N19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1hY19leHQ9JGFjX3NhdmVfZXh0Ci1hY190ZXN0X0ZGTEFHUz0ke0ZGTEFHUytzZXR9Ci1hY19zYXZlX0ZGTEFHUz0kRkZMQUdTCi1GRkxBR1M9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2Y3N19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIEZGTEFHUz0tZwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jdl9wcm9nX2Y3N19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfcHJvZ19mNzdfZz1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2Y3N19nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2Y3N19nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0ZGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgRkZMQUdTPSRhY19zYXZlX0ZGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2Y3N19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCi0gICAgRkZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBGRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgotICAgIEZGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgRkZMQUdTPQotICBmaQotZmkKLQotRzc3PWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCi0KLSMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgaT0wCi0gIHRlc3RzdHJpbmc9IkFCQ0QiCi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKLSAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKLSAgICBmaQotICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIDs7Ci0KLSAgaW50ZXJpeCopCi0gICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAotICAgIDs7Ci0KLSAgb3NmKikKLSAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKLSAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAotICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCi0gICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0Ci0gICAgIwotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCi0gICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgotICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgOzsKLSAgc2NvMy4ydjUqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKLSAgICA7OwotICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCi0gICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWyAJXS8vJ2AKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKLSAgICBmaQotICAgIDs7Ci0gICopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICB3aGlsZSAodGVzdCAiWCJgJFNIRUxMICQwIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLWZpCi0KLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2OyB9Ci1maQotCi0KLQotCi0KLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tCQ0RFR1JTVF0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eLiAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tCQ0RUXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCi0gIDs7Ci1ocHV4KikgIyBJdHMgbGlua2VyIGRpc3Rpbmd1aXNoZXMgZGF0YSBmcm9tIGNvZGUgc3ltYm9scwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJwotICBmaQotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICA7OwotbGludXgqIHwgaypic2QqLWdudSkKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbQUJDREdJUlNUV10nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbQkNERUdSU1RdJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW0JDREVHUVJTVF0nCi0gIDs7Ci1zb2xhcmlzKikKLSAgc3ltY29kZT0nW0JEUlRdJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbRFRdJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tEVF0nCi0gIDs7Ci1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICBzeW1jb2RlPSdbQUJEVF0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW0RGTlNUVV0nCi0gIDs7Ci1lc2FjCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyY29yZSwgdGhlbiB3aXRoIGl0LgotZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotCi0gICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCi0gIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCi0KLSAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWyAJXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsgCV1bIAldKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLWNoYXIgbm1fdGVzdF92YXI7Ci12b2lkIG5tX3Rlc3RfZnVuYygpe30KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1pbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQotRU9GCi0KLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdFwiIikgPiY1Ci0gIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCi0gICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KLQltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKLSAgICAgIGVsc2UKLQlybSAtZiAiJG5saXN0IlQKLSAgICAgIGZpCi0KLSAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICAgIGlmIGdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiBncmVwICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8RU9GID4gY29uZnRlc3QuJGFjX2V4dAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKLQotCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIGx0X3B0cl90IHZvaWQgKgotI2Vsc2UKLSMgZGVmaW5lIGx0X3B0cl90IGNoYXIgKgotIyBkZWZpbmUgY29uc3QKLSNlbmRpZgotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLWNvbnN0IHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGx0X3B0cl90IGFkZHJlc3M7Ci19Ci1sdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCiAJZmkKLSAgICAgIGVsc2UKLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLSAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLQotZmkKLQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQotZmkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNjsgfQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1Ci1lY2hvICIke0VDSE9fVH1vayIgPiY2OyB9CisgIGVuYWJsZV9zaGFyZWQ9eWVzCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgorZWxzZQorICBwaWNfbW9kZT1kZWZhdWx0CitmaQorCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X29iamRpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCiBta2RpciAubGlicyAyPi9kZXYvbnVsbApAQCAtNjgxOCwxNCArNzQ3MCwzNCBAQAogZmkKIHJtZGlyIC5saWJzIDI+L2Rldi9udWxsCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9vYmpkaXIiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQogb2JqZGlyPSRsdF9jdl9vYmpkaXIKIAogCiAKIAogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX09CSkRJUiAiJGx0X2N2X29iamRpci8iCitfQUNFT0YKKworCisKKworCisKKworCisKKworCisKKworCisKKworCiBjYXNlICRob3N0X29zIGluCiBhaXgzKikKICAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCkBAIC02ODQwLDM2MCArNzUxMiw0MSBAQAogCiAjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCiAjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0nc2VkIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKIAogIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCiAKICMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCiAjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCiBkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJwogCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKwogIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCiBub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKIAotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KICMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAorb2ZpbGU9bGlidG9vbAogY2FuX2J1aWxkX3NoYXJlZD15ZXMKIAogIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCiAjIHdoaWNoIG5lZWRzICcubGliJykuCiBsaWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCisKIHdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCiAKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1BUj0kYWNfY3ZfcHJvZ19BUgotaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgotICBhY19jdF9BUj0kQVIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgotaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgQVI9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQVI9JGFjX2N0X0FSCi0gIGZpCi1lbHNlCi0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCi0gIGFjX2N0X1JBTkxJQj0kUkFOTElCCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCi1pZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCi0gICAgUkFOTElCPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgUkFOTElCPSRhY19jdF9SQU5MSUIKLSAgZmkKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgotICAgIFNUUklQPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgU1RSSVA9JGFjX2N0X1NUUklQCi0gIGZpCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLQogb2xkX0NDPSIkQ0MiCiBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgogCiAjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwotdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLXRlc3QgLXogIiRBUyIgJiYgQVM9YXMKIHRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKIHRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwogdGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCi10ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCiB0ZXN0IC16ICIkTEQiICYmIExEPWxkCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi10ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotdGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLXRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgogdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KIAotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLWZpCi0KIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwogICBjYXNlICRjY190ZW1wIGluCiAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwpAQCAtNzIwMiwxNyArNzU1NSwxOCBAQAogICAgICopIGJyZWFrOzsKICAgZXNhYwogZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitjY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogCiAjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCiBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogZmlsZV9tYWdpYyopCiAgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQpAQCAtNzIzNiw3ICs3NTkwLDcgQEAKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgogCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKICoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KQEAgLTcyNDcsNyArNzYwMSw3IEBACiAqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCiAqKiogYnVnLWxpYnRvb2xAZ251Lm9yZwogCi1FT0YKK19MVF9FT0YKIAkgIGZpIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTcyNjIsMTkgKzc2MTYsMjMgQEAKIAogTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCisKKworCiBpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmaWxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKQEAgLTcyOTgsNyArNzY1Niw3IEBACiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgY2F0IDw8RU9GIDE+JjIKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCiAqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCkBAIC03MzA5LDcgKzc2NjcsNyBAQAogKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwogKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKIAotRU9GCitfTFRfRU9GCiAJICBmaSA7OwogCWVzYWMKICAgICAgIGZpCkBAIC03MzI0LDEzICs3NjgyLDE0IEBACiAKIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICBlbHNlCiAgICAgTUFHSUNfQ01EPToKICAgZmkKQEAgLTczNDAsMjggKzc2OTksOCBAQAogICA7OwogZXNhYwogCi1lbmFibGVfZGxvcGVuPW5vCi1lbmFibGVfd2luMzJfZGxsPW5vCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKLWZpCi0KLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgotZWxzZQotICBwaWNfbW9kZT1kZWZhdWx0Ci1maQotCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQogIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9CisKIGx0X3NhdmVfQ0M9IiRDQyIKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwpAQCAtNzM4NCw2ICs3NzIzLDExIEBACiBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCiAKIAorCisKKworCisKICMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCiBMVENDPSR7TFRDQy0iJENDIn0KIApAQCAtNzM5MywzNSArNzczNyw0MiBAQAogIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KIGNvbXBpbGVyPSRDQwogCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKIAogIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgorJFJNIGNvbmZ0ZXN0KgogCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCiskUk0gLXIgY29uZnRlc3QqCiAKIAorIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCiAKIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQogCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKIAotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC03NDMzLDI1ICs3Nzg0LDI1IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc0MzY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3Nzg3OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjc0NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjc3OTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQogCiBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCkBAIC03NDYxLDEyICs3ODEyLDE3IEBACiAKIGZpCiAKLWx0X3Byb2dfY29tcGlsZXJfd2w9CisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQogbHRfcHJvZ19jb21waWxlcl9waWM9CiBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KIAogICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCkBAIC03NDgyLDE3ICs3ODM4LDI1IEBACiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgogICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQpAQCAtNzUwNiw2ICs3ODcwLDIwIEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCiAgICAgICA7OwogCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCiAgICAgaW50ZXJpeFszLTldKikKICAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCiAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KQEAgLTc1MTgsMjUgKzc4OTYsMTggQEAKICAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKwogICAgIHN5c3Y0Kk1QKikKICAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQogICAgICopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCiAgICAgICA7OwpAQCAtNzU1MywxOCArNzkyNCw4IEBACiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKICAgICAgIGZpCiAgICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCkBAIC03NTkyLDE4ICs3OTUzLDI3IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICA7OwogCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KICAgICBsaW51eCogfCBrKmJzZCotZ251KQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwogICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CiAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQpAQCAtNzYxNiw4ICs3OTg2LDE0IEBACiAgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgogICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICAgIDs7CisgICAgICB4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xIG9uIFBQQworCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKICAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQogCSAgIyBTdW4gQyA1LjkKIAkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKQEAgLTc2MzUsNiArODAxMSwxNyBAQAogICAgICAgZXNhYwogICAgICAgOzsKIAorICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCkBAIC03Njk3LDIxICs4MDg0LDM0IEBACiAgICAgZXNhYwogICBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisKKworCisKKwogCiAjCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAjCiBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC03NzIzLDI3ICs4MTIzLDI3IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc3MjY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MTI2OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjc3MzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjgxMzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcworICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgogICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCiAgICAgICIiIHwgIiAiKikgOzsKICAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CkBAIC03NzU0LDI2ICs4MTU0LDIyIEBACiBmaQogCiBmaQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCi0gICAgOzsKLWVzYWMKKworCisKKworCiAKICMKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICMKIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgogICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CkBAIC03NzgzLDM2ICs4MTc5LDQxIEBACiAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCiAgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkRUNITyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKICAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKICAgICAgICBmaQogICAgICBlbHNlCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIC1yIGNvbmZ0ZXN0KgogICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgogICAgIDoKIGVsc2UKICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKQEAgLTc4MjcsODMgKzgyMjgsMTQ4IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc4MzA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MjMxOiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzgzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6ODIzNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAogICAgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCiAgICAgIGZpCiAgICBmaQogICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgogICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CiAgICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODI4NjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjgyOTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKIAogCiBoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCiBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCiAgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQogICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCisgICRSTSBjb25mdGVzdCoKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KICAgdG91Y2ggY29uZnRlc3QuYQogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KICAgICBuZWVkX2xvY2tzPXdhcm4KICAgZmkKIGVsc2UKICAgbmVlZF9sb2Nrcz1ubwogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAKICAgcnVucGF0aF92YXI9CiAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICBhcmNoaXZlX2NtZHM9CiAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9Ci0gIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubwogICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgIGhhcmRjb2RlX21pbnVzX0w9bm8KICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCiAgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KICAgbW9kdWxlX2NtZHM9CiAgIG1vZHVsZV9leHBzeW1fY21kcz0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKICAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKICAgaW5jbHVkZV9leHBzeW1zPQpAQCAtNzkxMSwyNiArODM3NywxNyBAQAogICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCiAgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKICAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKICAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CiAgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgogICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKICAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCiAgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KICAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCkBAIC03OTU2LDE2ICs4NDEzLDE2IEBACiAgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCiAgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgogICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCiAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogICAgIGZpCiAgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgorICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgogICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQogICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KICAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KQEAgLTc5NzUsMTEgKzg0MzIsMTEgQEAKIAogICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzMtOV0qKQogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCiAJbGRfc2hsaWJzPW5vCi0JY2F0IDw8RU9GIDE+JjIKKwljYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAogKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCkBAIC03OTg3LDI2ICs4NDQ0LDI3IEBACiAqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICiAqKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgogCi1FT0YKK19MVF9FT0YKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKQEAgLTgwMTYsMTYgKzg0NzQsMTYgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwogCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKIAkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCiAJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KQEAgLTgwNTYsNDggKzg1MTQsNzggQEAKICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAgICAgICA7OwogCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCiAJdG1wX2FkZGZsYWc9CisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCiAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCSAgOzsKIAlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKIAllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CiAJZXNhYwogCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7CiAJZXNhYwogCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQorICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYwogICAgICAgZWxzZQotCWxkX3NobGlicz1ubworICAgICAgICBsZF9zaGxpYnM9bm8KICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogCXdsYXJjPQogICAgICAgZWxzZQpAQCAtODEwNyw5ICs4NTk1LDkgQEAKICAgICAgIDs7CiAKICAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KIAlsZF9zaGxpYnM9bm8KLQljYXQgPDxFT0YgMT4mMgorCWNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQogKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbApAQCAtODExOCw4ICs4NjA2LDggQEAKICoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCiAqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KIAotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKQEAgLTgxNDMsMTAgKzg2MzEsMTQgQEAKIF9MVF9FT0YKIAk7OwogCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgIGVsc2UKIAkgICAgbGRfc2hsaWJzPW5vCiAJICBmaQpAQCAtODE2Miw3ICs4NjU0LDcgQEAKICAgICAgIDs7CiAKICAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKQEAgLTgxOTQsNyArODY4Niw3IEBACiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzQtOV0qKQogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KIAkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CiAJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCkBAIC04MjA0LDIyICs4Njk2LDIyIEBACiAgICAgICBlbHNlCiAJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCiAJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAlmaQogCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIAogCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAogCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQogCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQogCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQorCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCiAJICBkb25lCiAJICA7OwogCWVzYWMKQEAgLTgyMzYsMjggKzg3MjgsMzAgQEAKIAogICAgICAgYXJjaGl2ZV9jbWRzPScnCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKIAogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQogCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwogCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CiAJICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CiAJICBmaQogCSAgOzsKIAllc2FjCkBAIC04MjY4LDggKzg3NjIsOCBAQAogICAgICAgZWxzZQogCSMgbm90IHVzaW5nIGdjYwogCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAJZWxzZQogCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCkBAIC04MjgwLDYgKzg3NzQsNyBAQAogCWZpCiAgICAgICBmaQogCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LWJleHBhbGwnCiAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCkBAIC04Mjg3LDEyICs4NzgyLDkgQEAKIAkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKIAkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTgzMDMsMjQgKzg3OTUsNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKIGx0X2FpeF9saWJwYXRoX3NlZD0nCiAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewpAQCAtODMzNCwzMSArODgwOSwyMiBAQAogaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgogICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKIGZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAKLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKIAlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgogCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKIAllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTgzNjksMjQgKzg4MzUsNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKIGx0X2FpeF9saWJwYXRoX3NlZD0nCiAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewpAQCAtODQwMCwxNSArODg0OSw5IEBACiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCiAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAogZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKIAogCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgpAQCAtODQyNiwxOCArODg2OSwyNSBAQAogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlicz1ubworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgYnNkaVs0NV0qKQogICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYwogICAgICAgOzsKIAotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKQEAgLTg0NDksOSArODg5OSw5IEBACiAgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KICAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgogICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGAkRUNITyAiWCRkZXBsaWJzIiB8ICRYc2VkIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCiAgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0ndHJ1ZScKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCiAgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgogICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwogICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCkBAIC04NDU5LDUzICs4OTA5LDMwIEBACiAgICAgICA7OwogCiAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBtb2R1bGVfY21kcz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCiAgICAgICA7OwogCiAgICAgZGd1eCopCkBAIC04NTQ3LDkgKzg5NzQsOSBAQAogCiAgICAgaHB1eDkqKQogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgpAQCAtODU2OSwxMSArODk5NiwxMSBAQAogICAgICAgZmkKICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0KIAloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKLQogCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAJaGFyZGNvZGVfbWludXNfTD15ZXMKQEAgLTg1ODcsNyArOTAxNCw3IEBACiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwpAQCAtODYxMiwxMiArOTAzOSwxMiBAQAogCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJICBoYXJkY29kZV9kaXJlY3Q9bm8KIAkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KIAkgIDs7CiAJKikKIAkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKIAkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKIAogCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKQEAgLTg2MzAsMTggKzkwNTcsMzYgQEAKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyh2b2lkKSB7fQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBpbmhlcml0X3JwYXRoPXllcwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIDs7CiAKICAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKQEAgLTg2NTksMTEgKzkxMDQsMTUgQEAKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKwogICAgIG9wZW5ic2QqKQogICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAloYXJkY29kZV9kaXJlY3Q9eWVzCiAJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCkBAIC04Njc5LDcgKzkxMjgsNyBAQAogCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKIAkgICAgIDs7CiAJICBlc2FjCi0gICAgICAgIGZpCisJZmkKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC04Njg5LDE4ICs5MTM4LDE5IEBACiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCiAgICAgICA7OwogCiAgICAgb3NmMyopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIDs7CkBAIC04NzA4LDMyICs5MTU4LDQzIEBACiAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwogCiAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKIAogICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCkBAIC04NzQzLDcgKzkyMDQsNyBAQAogCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCiAJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAogCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCiAJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJZWxzZQpAQCAtODgzMiwxOCArOTI5MywxOCBAQAogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtODg1NywxMiArOTMxOCwzNiBAQAogICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICA7OwogICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCiAgIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KIHRlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKICMKICMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KICMKQEAgLTg4ODAsMTYgKzkzNjUsMTYgQEAKICAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKICAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwogICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KKyAgICAgICRSTSBjb25mdGVzdCoKICAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgogICAgICAgICBzb25hbWU9Y29uZnRlc3QKICAgICAgICAgbGliPWNvbmZ0ZXN0CiAgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dApAQCAtODkwMywxMSArOTM4OCwxMSBAQAogICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CiAgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCiAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICAgICAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CiAgICAgICAgIHRoZW4KIAkgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCiAgICAgICAgIGVsc2UKQEAgLTg5MTcsMzAgKzk0MDIsMTczIEBACiAgICAgICBlbHNlCiAgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQogICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQogICAgICAgOzsKICAgICBlc2FjCiAgIGZpCiAgIDs7CiBlc2FjCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KIAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtODk0OCwxNCArOTU3NiwxNCBAQAogICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CiAgIGVzYWMKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgogICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKICAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKICAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKICAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCiAgIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCiAgIGZpCiAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CiAgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgpAQCAtODk2OSw3ICs5NTk3LDcgQEAKIAlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKICAgICBmaQogICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKIEJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKICAgbHRfZm9vPSIiOwogICBsdF9jb3VudD0wOwpAQCAtODk4OSwxMCArOTYxNywyMyBAQAogICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CiAgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KIH0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCiBlbHNlCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKIGZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKIG5lZWRfbGliX3ByZWZpeD11bmtub3duCiBoYXJkY29kZV9pbnRvX2xpYnM9bm8KIApAQCAtOTAxMCw3ICs5NjUxLDcgQEAKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgOzsKIAotYWl4NCogfCBhaXg1KikKK2FpeFs0LTldKikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTkwMjksNyArOTY3MCw3IEBACiAgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCiAgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwogCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgogCToKICAgICAgIGVsc2UKIAljYW5fYnVpbGRfc2hhcmVkPW5vCkBAIC05MDU1LDkgKzk2OTYsMTggQEAKICAgOzsKIAogYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYwogICA7OwogCiBiZW9zKikKQEAgLTkwODAsMjUgKzk3MzAsMjggQEAKICAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCiAgIDs7CiAKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKICAgc2hyZXh0X2NtZHM9Ii5kbGwiCiAgIG5lZWRfdmVyc2lvbj1ubwogICBuZWVkX2xpYl9wcmVmaXg9bm8KIAogICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJwogICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKKyAgICAgICAkUk0gXCRkbHBhdGgnCiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtOTEwNywyMCArOTc2MCwyMCBAQAogICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgogICAgICAgOzsKLSAgICBtaW5ndyopCisgICAgbWluZ3cqIHwgY2VnY2MqKQogICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKICAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8ICRHUkVQICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CiAgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKICAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQogICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCiAgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKICAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCiAgICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgICAgIGZpCiAgICAgICA7OwogICAgIHB3MzIqKQpAQCAtOTE0NCw3ICs5Nzk3LDcgQEAKICAgdmVyc2lvbl90eXBlPWRhcndpbgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSApAQCAtOTI0MywxOCArOTg5NiwxOCBAQAogICAgIGZpCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQorICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKICAgICBzaHJleHRfY21kcz0nLnNsJwogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICkBAIC05MzMxLDE2ICs5OTg0LDQzIEBACiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorICAgICAgIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIExERkxBR1M9JHNhdmVfTERGTEFHUworICBsaWJkaXI9JHNhdmVfbGliZGlyCisKICAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCiAgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAogICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKworICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtOTM1Nyw3ICsxMDAzNyw3IEBACiAgIHZlcnNpb25fdHlwZT1zdW5vcwogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwogICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwpAQCAtOTM3OCwxNCArMTAwNTgsMTYgQEAKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwogCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4CisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwogICA7OwogCiBvcGVuYnNkKikKQEAgLTkzOTQsMTMgKzEwMDc2LDEzIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OworICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CiAgIGVzYWMKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQogCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtOTQ3Miw3ICsxMDE1NCw2IEBACiAgICAgc25pKQogICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwogICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKICAgICAgIDs7CiAgICAgc2llbWVucykKQEAgLTk1MDMsMTMgKzEwMTg0LDEyIEBACiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBlbHNlCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIHNjbzMuMnY1KikKICAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCkBAIC05NTE5LDYgKzEwMTk5LDE3IEBACiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKICAgOzsKIAordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwogdXRzNCopCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKQEAgLTk1MzAsOCArMTAyMjEsOCBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9CiB0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCkBAIC05NTM5LDExICsxMDIzMCwxMDQgQEAKICAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQogaGFyZGNvZGVfYWN0aW9uPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwgXAoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CiAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCiAKICAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgpAQCAtOTU1MSw3ICsxMDMzNSw3IEBACiAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKICAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQogICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCiAgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgogICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCiAgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluawpAQCAtOTU2NCwxMCArMTAzNDgsMTEgQEAKICAgIyBkaXJlY3Rvcmllcy4KICAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQogCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgoraWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwogZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fApAQCAtOTU3NiwzNyArMTAzNjEsMTIgQEAKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwogZmkKIAotc3RyaXBsaWI9Ci1vbGRfc3RyaXBsaWI9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgZ3JlcCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCi0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCi0gIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQotZWxzZQotIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIGRhcndpbiopCi0gICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KLSAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9Ci0gICAgICAgZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0gICAgICAgOzsKLSAgICopCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotICAgIDs7Ci0gIGVzYWMKLWZpCiAKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgogICBlbmFibGVfZGxvcGVuPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCkBAIC05NjIxLDMwICsxMDM4MSwyNiBAQAogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIDs7CiAKLSAgbWluZ3cqIHwgcHczMiopCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OworICAgIDs7CiAKICAgY3lnd2luKikKICAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7CisgICAgOzsKIAogICBkYXJ3aW4qKQogICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC05NjYyLDM5ICsxMDQxOCwxOCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKIGVsc2UKIApAQCAtOTcwNCwxMDUgKzEwNDM5LDIxIEBACiAKIGZpCiAKLSAgIDs7CisgICAgOzsKIAogICAqKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBzaGxfbG9hZCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHNobF9sb2FkLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIHNobF9sb2FkIGlubm9jdW91c19zaGxfbG9hZAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBzaGxfbG9hZCAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBzaGxfbG9hZAotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHNobF9sb2FkICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfc2hsX2xvYWQgfHwgZGVmaW5lZCBfX3N0dWJfX19zaGxfbG9hZAotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBzaGxfbG9hZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9mdW5jX3NobF9sb2FkPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtOTgyMCwxMzcgKzEwNDcxLDMyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCA9IHllczsgdGhlbgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGRsb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGRsb3Blbi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBkbG9wZW4gaW5ub2N1b3VzX2Rsb3BlbgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBkbG9wZW4gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZGxvcGVuCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfZGxvcGVuIHx8IGRlZmluZWQgX19zdHViX19fZGxvcGVuCi1jaG9rZSBtZQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZnVuY19kbG9wZW49bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtOTk2OCw1MyArMTA1MTQsMjggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sc3ZsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC0xMDAzMiw1MyArMTA1NTMsMjggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtMTAwOTYsNDAgKzEwNTkyLDE5IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgotICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGZpCiAKIApAQCAtMTAxNjcsMTggKzEwNjQyLDE4IEBACiAgICAgc2F2ZV9MSUJTPSIkTElCUyIKICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCiAKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAxODEgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDEwNjU2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAyMTksMTAgKzEwNjk0LDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKLSNlbmRpZgotCiB2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CiBpbnQgbWFpbiAoKQogewpAQCAtMTAyMzgsMTQgKzEwNzA5LDE0IEBACiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMDI2MiwyMyArMTA3MzMsMjMgQEAKIAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CiAKICAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAyODEgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDEwNzUyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAzMTksMTAgKzEwNzkwLDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKLSNlbmRpZgotCiB2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CiBpbnQgbWFpbiAoKQogewpAQCAtMTAzMzgsMTQgKzEwODA1LDE0IEBACiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMDM2Miw4ICsxMDgyOSw4IEBACiAKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KICAgICBmaQogCiAgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgpAQCAtMTAzODQsNjE3OSArMTA4NTEsMTAzIEBACiBmaQogCiAKLSMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7CiAKLWFpeDQqIHwgYWl4NSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQorCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQogICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjY7IH0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNjsgfQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXIgXAotICAgIENDIFwKLSAgICBMRCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWMgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKLSAgICBwcmVkZXBfb2JqZWN0cyBcCi0gICAgcG9zdGRlcF9vYmplY3RzIFwKLSAgICBwcmVkZXBzIFwKLSAgICBwb3N0ZGVwcyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKLSAgICBhcmNoaXZlX2NtZHMgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgXAotICAgIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnIFwKLSAgICBub191bmRlZmluZWRfZmxhZyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljIFwKLSAgICBtb2R1bGVfY21kcyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aCBcCi0gICAgZXhjbHVkZV9leHBzeW1zIFwKLSAgICBpbmNsdWRlX2V4cHN5bXM7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgfCBcCi0gICAgYXJjaGl2ZV9jbWRzIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgfCBcCi0gICAgbW9kdWxlX2NtZHMgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgICAgOzsKICAgZXNhYworZmkKIAotY2ZnZmlsZT0iJHtvZmlsZX1UIgotICB0cmFwICIkcm0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQotICAkcm0gLWYgIiRjZmdmaWxlIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkb2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkb2ZpbGUiID4mNjt9CiAKLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jISAkU0hFTEwKIAotIyBgJGVjaG8gIiRjZmdmaWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCkKLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sOgotIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCi0jIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCi1TRUQ9JGx0X1NFRAogCi0jIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgotWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCi0jIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWF2YWlsYWJsZV90YWdzPQogCi0jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRwogCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CiAKLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKIAotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KIAotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0MKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTEQKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwcwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKLQotIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCi0KLV9fRU9GX18KLQotCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYWl4MyopCi0gICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCi0KLSMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0jIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKLSAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICBjaG1vZCAreCAiJG9maWxlIgotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRhZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0kd2l0aF90YWdzOyB0YWduYW1lcz0iJHdpdGh2YWwiCi1maQotCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mMjt9Ci0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjI7fQotICAgIGVsc2UKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiYyO30KLSAgICBmaQotICBmaQotICBpZiB0ZXN0IC16ICIkTFRDRkxBR1MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENGTEFHUz0nYCIKLSAgZmkKLQotICAjIEV4dHJhY3QgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIGluICRvZmlsZS4KLSAgIyBOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIHRoZSBlbnRpcmUgbGlzdCBpcyBvbiBvbmUgbGluZS4KLSAgYXZhaWxhYmxlX3RhZ3M9YGdyZXAgIl5hdmFpbGFibGVfdGFncz0iICIke29maWxlfSIgfCAkU0VEIC1lICdzL2F2YWlsYWJsZV90YWdzPVwoLiokXCkvXDEvJyAtZSAncy9cIi8vZydgCi0KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gIGZvciB0YWduYW1lIGluICR0YWduYW1lczsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGFnbmFtZSBjb250YWlucyBvbmx5IHZhbGlkIGNoYXJhY3RlcnMKLSAgICBjYXNlIGAkZWNobyAiWCR0YWduYW1lIiB8ICRYc2VkIC1lICdzOlstX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQk7OwotICAgIGVzYWMKLQotICAgIGlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJCIgPCAiJHtvZmlsZX0iID4gL2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHRhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0cyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0KLSAgICAjIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSI7IHRoZW4KLSAgICAgIGVjaG8gYXBwZW5kaW5nIGNvbmZpZ3VyYXRpb24gdGFnIFwiJHRhZ25hbWVcIiB0byAkb2ZpbGUKLQotICAgICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgQ1hYKQotCWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0JICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotCSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLQkgIGFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotaGFyZGNvZGVfbWludXNfTF9DWFg9bm8KLWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCi1oYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCi1tb2R1bGVfY21kc19DWFg9Ci1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQotbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgotb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1wcmVkZXBfb2JqZWN0c19DWFg9Ci1wb3N0ZGVwX29iamVjdHNfQ1hYPQotcHJlZGVwc19DWFg9Ci1wb3N0ZGVwc19DWFg9Ci1jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0NYWD0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0NYWD0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1maQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxkX3NobGlic19DWFg9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBhaXg0KiB8IGFpeDUqKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgY2FzZSAkbGRfZmxhZyBpbgotCSAgKi1icnRsKikKLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgIGVzYWMKLQlkb25lCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICBmaQotCi0gICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgIGFyY2hpdmVfY21kc19DWFg9JycKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0gICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLSAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCXRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCWVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0Jc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgbm90IHVzaW5nIGdjYwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0Jc2hhcmVkX2ZsYWc9Jy1HJwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JZWxzZQotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQlmaQotICAgICAgZmkKLSAgICBmaQotCi0gICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcwotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKLSAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iLXogbm9kZWZzIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm9rJwotCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICBmaQotICAgIGZpCi0gICAgOzsKLQotICBiZW9zKikKLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGVsc2UKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICBmaQotICAgIDs7Ci0KLSAgY2hvcnVzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KLSAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgIGlmICRDQyAtZHVtcHNwZWNzIDI+JjEgfCAkRUdSRVAgJ3NpbmdsZV9tb2R1bGUnID4vZGV2L251bGwgOyB0aGVuCi0gICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgZWxzZQotICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICAgIGZpCi0gICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGZpCi0gICAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICAgbW9kdWxlX2NtZHNfQ1hYPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgZGd1eCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGVjKysqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgZ2hjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGZyZWVic2RbMTJdKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgZnJlZWJzZC1lbGYqKQotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICMgY29udmVudGlvbnMKLSAgICBsZF9zaGxpYnNfQ1hYPXllcwotICAgIDs7Ci0gIGdudSopCi0gICAgOzsKLSAgaHB1eDkqKQotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBDQyopCi0gICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgIDs7Ci0gICAgYUNDKikKLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICMKLSAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLSAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0gICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0gICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbLV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaHB1eDEwKnxocHV4MTEqKQotICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwotICAgICAgKikKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGFDQyopCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGlhNjQqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBpbnRlcml4WzMtOV0qKQotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIDs7Ci0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU0dJIEMrKwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJwotCSAgZmkKLQlmaQotCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCTs7Ci0gICAgZXNhYwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGljcGMqKQotCSMgSW50ZWwgQysrCi0Jd2l0aF9nbnVfbGQ9eWVzCi0JIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAotCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJWZXJzaW9uIDcuIiopCi0gIAkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICB0bXBfaWR5bj0KLQkgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkgIGVzYWMKLSAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCTs7Ci0gICAgICBwZ0NDKikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSAgCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICA7OwotICAgICAgY3h4KikKLQkjIENvbXBhcSBDKysKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMrKyA1LjkKLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCi0JICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCi0JICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAjIHdvdWxkIGJlIGJldHRlci4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAjIGluIHRoZSBhcmNoaXZlLgotCSAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBseW54b3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBtODhrKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgbXZzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgY3h4KikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBmaQotICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLSAgICA7OwotICBvcGVuYnNkMiopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBmaQotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gICAgOzsKLSAgb3NmMyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG9zZjQqIHwgb3NmNSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgY3h4KikKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIC1XbCwtaW5wdXQgLVdsLCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24JJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgJHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBwc29zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgc3Vub3M0KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LngKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGxjYyopCi0JIyBMdWNpZAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc29sYXJpcyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQlub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCWNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLQkgICopCi0JICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCi0JICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQllc2FjCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGdjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJwotCSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZWxzZQotCSAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCi0JICAgICMgcGxhdGZvcm0uCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBmaQotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJwotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgKikKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICMgYXMgLXogZGVmcy4KLSAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0gICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKLSAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0gICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQotICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgotICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KLSAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCi0gICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KLSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosbm9kZWZzJwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB0YW5kZW0qKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBOQ0MqKQotCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdnh3b3JrcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gICopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotR0NDX0NYWD0iJEdYWCIKLUxEX0NYWD0iJExEIgotCi0KLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLUVPRgotCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgotICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCi0gICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKLQotICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbwotICAgIGNhc2UgJHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCi0JICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZWxzZQotCSBwcmV2PQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICRwIGluCi0JIC1MKiB8IC1SKikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgotCSAgIGVsc2UKLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgotCSBlbHNlCi0JICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCi0JIGVsc2UKLQkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKLQkgZWxzZQotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCi1maQotCi0kcm0gLWYgY29uZmVzdC4kb2JqZXh0Ci0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1jYXNlICRob3N0X29zIGluCi1pbnRlcml4WzMtOV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIHByZWRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcHNfQ1hYPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zb2xhcmlzKikKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgQ0MqKQotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgotICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKLSAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLWVzYWMKLQotCi1jYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCi0qIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OwotZXNhYwotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCi0gICAgICA7OwotICAgICpkamdwcCopCi0gICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgIDs7Ci0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQqIHwgYWl4NSopCi0JIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQllbHNlCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLQlmaQotCTs7Ci0gICAgICBjaG9ydXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JY3hjaDY4KikKLQkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFub2NvbW1vbicKLSAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTI3MDE6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI3MDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyODA1OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI4MDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDQqIHwgYWl4NSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotICAgIGlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGVsc2UKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZmkKLSAgICA7OwotICBwdzMyKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0iJGx0ZGxsX2NtZHMiCi0gIDs7Ci0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvOy9eLipbIF1fX25tX18vcy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19DWFggaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0NYWD0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfQ1hYIFwKLSAgICBDQ19DWFggXAotICAgIExEX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFggXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCi0gICAgcHJlZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwcmVkZXBzX0NYWCBcCi0gICAgcG9zdGRlcHNfQ1hYIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCi0gICAgcG9zdGluc3RhbGxfY21kc19DWFggXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19DWFggXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIFwKLSAgICBtb2R1bGVfY21kc19DWFggXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9DWFggXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAotICAgIGluY2x1ZGVfZXhwc3ltc19DWFg7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCB8IFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG1vZHVsZV9jbWRzX0NYWCB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9DWFgKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19DWFgKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9JGx0X3NhdmVfQ0MKLUxEQ1hYPSRMRAotTEQ9JGx0X3NhdmVfTEQKLUdDQz0kbHRfc2F2ZV9HQ0MKLXdpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAotd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLWx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAotbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi1sdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgRjc3KQotCWlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgotCi1hY19leHQ9ZgotYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KLWhhcmRjb2RlX2F1dG9tYXRpY19GNzc9bm8KLW1vZHVsZV9jbWRzX0Y3Nz0KLW1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci1saW5rX2FsbF9kZXBsaWJzX0Y3Nz11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0kb2xkX2FyY2hpdmVfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfRjc3PSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAotICAgICAgc3Vicm91dGluZSB0Ci0gICAgICByZXR1cm4KLSAgICAgIGVuZAotIgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtGNzctImY3NyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0Y3Nz0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1haXg0KiB8IGFpeDUqKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCiAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNjsgfQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2OyB9Ci0KLUdDQ19GNzc9IiRHNzciCi1MRF9GNzc9IiRMRCIKLQotbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3Nz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQzNjk6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTQzNzM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NyBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzdcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE0NDczOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTQ0Nzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubwotICBhcmNoaXZlX2NtZHNfRjc3PQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3Nz0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3PQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfRjc3PW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubwotICBtb2R1bGVfY21kc19GNzc9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfRjc3PQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19GNzc9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKICAgICBmaQogICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCiAKLSAgbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQogCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KIAotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCiAKLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBGNzcpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfRjc3PW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0Y3Nz1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAogCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJub3RvaycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyRjb252ZW5pZW5jZScKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScgJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3PSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBmaXhfc3JjZmlsZV9wYXRoX0Y3Nz0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bMDEyXSkKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLQotCWhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PScrYiAkbGliZGlyJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLQkgIDs7Ci0JKikKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLQkgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICByZWxvYWRfY21kc19GNzc9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LG5vZGVmcycKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0Y3NyIgPiY2OyB9Ci10ZXN0ICIkbGRfc2hsaWJzX0Y3NyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfRjc3IGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3Ci0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19GNzcgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjY7IH0KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLQotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICA7OwotCi1haXg0KiB8IGFpeDUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNjsgfQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KLWhhcmRjb2RlX2FjdGlvbl9GNzc9Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzciIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9GNzciIHx8IFwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0Y3NyIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0Y3NyIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgRjc3KSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfRjc3IiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz11bnN1cHBvcnRlZAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNjsgfQotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX0Y3NyBcCi0gICAgQ0NfRjc3IFwKLSAgICBMRF9GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3IFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3IFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgXAotICAgIHByZWRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcG9zdGRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcHJlZGVwc19GNzcgXAotICAgIHBvc3RkZXBzX0Y3NyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NyBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NyBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3NyBcCi0gICAgbW9kdWxlX2NtZHNfRjc3IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3IFwKLSAgICBleGNsdWRlX2V4cHN5bXNfRjc3IFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfRjc3OyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19GNzcgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgfCBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBtb2R1bGVfY21kc19GNzcgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzcgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfRjc3Ci0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfRjc3Ci0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfRjc3Ci0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0Y3NwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfRjc3Ci1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfRjc3Ci1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfRjc3Ci1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19GNzcKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0Y3NwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9GNzcKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9GNzcKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0Y3NwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19GNzcKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTE2NTY1LDMxNjAgKzEwOTU2LDQwIEBACiAKIENDPSIkbHRfc2F2ZV9DQyIKIAotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7CiAKLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KIAogCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9amF2YQogCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0dDSj0kb2JqZXh0CiAKLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKIAotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikge307IH0nCiAKLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KIAotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQogCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KIAotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwogCiAKLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCiAKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKIAogCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0dDSj0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCiAKKyMgT25seSBleHBhbmQgb25jZToKIAotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCiAKLW9sZF9hcmNoaXZlX2NtZHNfR0NKPSRvbGRfYXJjaGl2ZV9jbWRzCiAKIAotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9JyAtZm5vLWJ1aWx0aW4nCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2NjYyOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE2NjY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi1lbHNlCi0gICAgOgotZmkKLQotZmkKLQotbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSj1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY5NTI6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY5NTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0pcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE3MDU2OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTcwNjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj1ubwotICBhcmNoaXZlX2NtZHNfR0NKPQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSj0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKPQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQotICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfR0NKPW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj1ubwotICBtb2R1bGVfY21kc19HQ0o9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfR0NKPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19HQ0o9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIGxkX3NobGlic19HQ0o9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBHQ0opIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0dDSj1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJGNvbnZlbmllbmNlJwotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLQotICAgIGJzZGlbNDVdKikKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kc19HQ0o9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotCi0JaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9JytiICRsaWJkaXInCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzX0dDSj0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnNfR0NKPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfR0NKIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19HQ0ogaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0dDSiAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNjsgfQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0dDSj0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0dDSiIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfR0NKIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfR0NKIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBHQ0opIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9HQ0oiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fR0NKPXVuc3VwcG9ydGVkCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fR0NKIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfR0NKIFwKLSAgICBDQ19HQ0ogXAotICAgIExEX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0ogXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0ogXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSiBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiBcCi0gICAgcHJlZGVwX29iamVjdHNfR0NKIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfR0NKIFwKLSAgICBwcmVkZXBzX0dDSiBcCi0gICAgcG9zdGRlcHNfR0NKIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKIFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiBcCi0gICAgcG9zdGluc3RhbGxfY21kc19HQ0ogXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKIFwKLSAgICBtb2R1bGVfY21kc19HQ0ogXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9HQ0ogXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19HQ0ogXAotICAgIGluY2x1ZGVfZXhwc3ltc19HQ0o7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSiB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiB8IFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG1vZHVsZV9jbWRzX0dDSiB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSiB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSgotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9HQ0oKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19HQ0oKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0dDSgotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19HQ0oKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSgotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19HQ0oKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfR0NKCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19HQ0oKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0dDSgotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfR0NKCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0dDSgotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0dDSgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfR0NKCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0dDSgotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19HQ0oKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19HQ0oKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1yYwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9SQz0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfUkM9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQz15ZXMKLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX1JDIFwKLSAgICBDQ19SQyBcCi0gICAgTERfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQyBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX1JDIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyBcCi0gICAgcHJlZGVwX29iamVjdHNfUkMgXAotICAgIHBvc3RkZXBfb2JqZWN0c19SQyBcCi0gICAgcHJlZGVwc19SQyBcCi0gICAgcG9zdGRlcHNfUkMgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9SQyBcCi0gICAgYXJjaGl2ZV9jbWRzX1JDIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX1JDIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfUkMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19SQyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMgXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19SQyBcCi0gICAgbW9kdWxlX2NtZHNfUkMgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfUkMgXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19SQyBcCi0gICAgaW5jbHVkZV9leHBzeW1zX1JDOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIHwgXAotICAgIGFyY2hpdmVfY21kc19SQyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9SQwotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX1JDCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX1JDCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9SQwotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfUkMKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19SQwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfUkMKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfUkMKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfUkMKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX1JDCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19SQwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfUkMKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX1JDCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19SQwotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fUkMKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9SQwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX1JDCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX1JDCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19SQwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX1JDCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCTs7Ci0KLSAgICAgICopCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi1maQotCi0KLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLQotIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfbWFpbnRhaW5lcl9tb2RlOyBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwKIGVsc2UKICAgVVNFX01BSU5UQUlORVJfTU9ERT1ubwogZmkKIAotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKKyRhc19lY2hvICIkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2OyB9CiAgICBpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCiAgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQogICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCkBAIC0xOTczMSw0NjUgKzExMDAyLDQwIEBACiAKIAogCi0KIGZvciBhY19oZWFkZXIgaW4gc3lzL21tYW4uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKCBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9tbWFuLmgiICJhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQogX0FDRU9GCiAKIGZpCiAKIGRvbmUKIAotCiBmb3IgYWNfZnVuYyBpbiBtbWFwCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21tYXAiID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfTU1BUCAxCiBfQUNFT0YKIAogZmkKIGRvbmUKIAogCi1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvbW1hbi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmguLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzeXMvbW1hbi5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHN5cy9tbWFuLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzeXMvbW1hbi5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3lzL21tYW4uaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL21tYW4uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWwgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvbW1hbi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmguLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPiY2OyB9Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX21tYW5faCA9IHllczsgdGhlbgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9tbWFuLmgiICJhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsaWJmZmlfaGVhZGVyX3N5c19tbWFuX2g9eWVzCiBlbHNlCiAgIGxpYmZmaV9oZWFkZXJfc3lzX21tYW5faD1ubwogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW1hcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtbWFwLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgbW1hcCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIG1tYXAuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgbW1hcCBpbm5vY3VvdXNfbW1hcAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBtbWFwICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIG1tYXAKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBtbWFwICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfbW1hcCB8fCBkZWZpbmVkIF9fc3R1Yl9fX21tYXAKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gbW1hcCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfbW1hcD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2Z1bmNfbW1hcD1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXAiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwID0geWVzOyB0aGVuCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21tYXAiID0geCIieWVzOyB0aGVuIDoKICAgbGliZmZpX2Z1bmNfbW1hcD15ZXMKIGVsc2UKICAgbGliZmZpX2Z1bmNfbW1hcD1ubwpAQCAtMjAyMDEsMTAgKzExMDQ3LDEwIEBACiAgICBhY19jdl9mdW5jX21tYXBfZGV2X3plcm89bm8KICAgIGFjX2N2X2Z1bmNfbW1hcF9hbm9uPW5vCiBlbHNlCi0gICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgcmVhZC1vbmx5IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZmlsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICMgQWRkIGEgc3lzdGVtIHRvIHRoaXMgYmxhY2tsaXN0IGlmCiAgICAjIG1tYXAoMCwgc3RhdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCkgZG9lc24ndCByZXR1cm4gYQpAQCAtMjAyMTgsMTIgKzExMDY0LDEyIEBACiAJYWNfY3ZfZnVuY19tbWFwX2ZpbGU9eWVzOzsKICAgIGVzYWMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2ZpbGUiID4mNjsgfQotICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtbWFwIGZyb20gL2Rldi96ZXJvIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtbWFwIGZyb20gL2Rldi96ZXJvIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZGV2X3plcm8rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY2OyB9CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbW1hcCBmcm9tIC9kZXYvemVybyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1tYXAgZnJvbSAvZGV2L3plcm8gd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgIyBBZGQgYSBzeXN0ZW0gdG8gdGhpcyBibGFja2xpc3QgaWYgaXQgaGFzIG1tYXAoKSBidXQgL2Rldi96ZXJvCiAgICAjIGRvZXMgbm90IGV4aXN0LCBvciBpZiBtbWFwcGluZyAvZGV2L3plcm8gZG9lcyBub3QgZ2l2ZSBhbm9ueW1vdXMKQEAgLTIwMjQyLDIwICsxMTA4OCwxNiBAQAogCWFjX2N2X2Z1bmNfbW1hcF9kZXZfemVybz15ZXM7OwogICAgZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9kZXZfemVybyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjY7IH0KIAogICAgIyBVbmxpa2UgL2Rldi96ZXJvLCB0aGUgTUFQX0FOT04oWU1PVVMpIGRlZmluZXMgY2FuIGJlIHByb2JlZCBmb3IuCi0gICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgTUFQX0FOT04oWU1PVVMpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OKFlNT1VTKS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZGVjbF9tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTUFQX0FOT04oWU1PVVMpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBNQVBfQU5PTihZTU9VUykuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZGVjbF9tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTIwMjczLDQzICsxMTExNSwyMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9kZWNsX21hcF9hbm9uPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZGVjbF9tYXBfYW5vbj1ubworICBhY19jdl9kZWNsX21hcF9hbm9uPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9kZWNsX21hcF9hbm9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9kZWNsX21hcF9hbm9uIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZGVjbF9tYXBfYW5vbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2RlY2xfbWFwX2Fub24iID4mNjsgfQogCiAgICBpZiB0ZXN0ICRhY19jdl9kZWNsX21hcF9hbm9uID0gbm87IHRoZW4KICAgICAgYWNfY3ZfZnVuY19tbWFwX2Fub249bm8KICAgIGVsc2UKLSAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbW1hcCB3aXRoIE1BUF9BTk9OKFlNT1VTKSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1tYXAgd2l0aCBNQVBfQU5PTihZTU9VUykgd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2Fub24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEFkZCBhIHN5c3RlbSB0byB0aGlzIGJsYWNrbGlzdCBpZiBpdCBoYXMgbW1hcCgpIGFuZCBNQVBfQU5PTiBvcgogICAgIyBNQVBfQU5PTllNT1VTLCBidXQgdXNpbmcgbW1hcCguLi4sIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKQpAQCAtMjAzMjMsMzAgKzExMTQ1LDI0IEBACiAJYWNfY3ZfZnVuY19tbWFwX2Fub249eWVzOzsKICAgIGVzYWMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfYW5vbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2Fub24iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfYW5vbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbW1hcF9hbm9uIiA+JjY7IH0KICAgIGZpCiBmaQogCiBpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZmlsZSA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX01NQVBfRklMRSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUF9GSUxFIDEiID4+Y29uZmRlZnMuaAogCiBmaQogaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTU1BUF9ERVZfWkVSTyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUF9ERVZfWkVSTyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9hbm9uID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTU1BUF9BTk9OIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQX0FOT04gMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKQEAgLTIwMzcyLDEwICsxMTE4OCwxOCBAQAogCVRBUkdFVD1BUk07IFRBUkdFVERJUj1hcm0KIAk7OwogCi0gIGFtZDY0LSotZnJlZWJzZCopCisgIGFtZDY0LSotZnJlZWJzZCogfCBhbWQ2NC0qLW9wZW5ic2QqKQogCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKICAgCTs7CiAKKyAgYW1kNjQtKi1mcmVlYnNkKikKKwlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CisJOzsKKworICBhdnIzMiotKi0qKQorCVRBUkdFVD1BVlIzMjsgVEFSR0VURElSPWF2cjMyCisJOzsKKwogICBjcmlzLSotKikKIAlUQVJHRVQ9TElCRkZJX0NSSVM7IFRBUkdFVERJUj1jcmlzCiAJOzsKQEAgLTIwMzk0LDExICsxMTIxOCwxMyBAQAogCVRBUkdFVD1QQV9IUFVYOyBUQVJHRVRESVI9cGEKIAk7OwogCi0gIGkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKikKKyAgaT84Ni0qLWZyZWVic2QqIHwgaT84Ni0qLW9wZW5ic2QqKQogCVRBUkdFVD1YODZfRlJFRUJTRDsgVEFSR0VURElSPXg4NgogCTs7CiAgIGk/ODYtd2luMzIqIHwgaT84Ni0qLWN5Z3dpbiogfCBpPzg2LSotbWluZ3cqKQogCVRBUkdFVD1YODZfV0lOMzI7IFRBUkdFVERJUj14ODYKKwkjIEFsbCBtaW5ndy9jeWd3aW4vd2luMzIgYnVpbGRzIHJlcXVpcmUgdGhpcyBmb3Igc2hhcmVkbGliCisJQU1fTFRMREZMQUdTPSItbm8tdW5kZWZpbmVkIgogCTs7CiAgIGk/ODYtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CkBAIC0yMDQyOSw3ICsxMTI1NSw5IEBACiAJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwogICBtaXBzKi0qLWxpbnV4KikKLQlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKKwkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJworCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKIAogICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKQEAgLTIwNDY5LDggKzExMjk3LDExIEBACiAgIHg4Nl82NC0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKIAk7OworCiAgIHg4Nl82NC0qLWN5Z3dpbiogfCB4ODZfNjQtKi1taW5ndyopCisJVEFSR0VUPVg4Nl9XSU42NDsgVEFSR0VURElSPXg4NgogCTs7CisKICAgeDg2XzY0LSotKikKIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CiAJOzsKQEAgLTIwNDc4LDEwICsxMTMwOSw5IEBACiAKIAogCisKIGlmIHRlc3QgJFRBUkdFVERJUiA9IHVua25vd247IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXCJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC5cIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiAiJExJTkVOTyIgNQogZmkKIAogIGlmIGV4cHIgeCRUQVJHRVQgOiAneE1JUFMnID4gL2Rldi9udWxsOyB0aGVuCkBAIC0yMDUyNCw2ICsxMTM1NCwxNCBAQAogICBYODZfV0lOMzJfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQ7IHRoZW4KKyAgWDg2X1dJTjY0X1RSVUU9CisgIFg4Nl9XSU42NF9GQUxTRT0nIycKK2Vsc2UKKyAgWDg2X1dJTjY0X1RSVUU9JyMnCisgIFg4Nl9XSU42NF9GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU47IHRoZW4KICAgWDg2X0RBUldJTl9UUlVFPQogICBYODZfREFSV0lOX0ZBTFNFPScjJwpAQCAtMjA2MDQsNiArMTE0NDIsMTQgQEAKICAgQVJNX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4QVZSMzI7IHRoZW4KKyAgQVZSMzJfVFJVRT0KKyAgQVZSMzJfRkFMU0U9JyMnCitlbHNlCisgIEFWUjMyX1RSVUU9JyMnCisgIEFWUjMyX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4TElCRkZJX0NSSVM7IHRoZW4KICAgTElCRkZJX0NSSVNfVFJVRT0KICAgTElCRkZJX0NSSVNfRkFMU0U9JyMnCkBAIC0yMDY3NywxNiArMTE1MjMsMTIgQEAKIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMjA3MDEsNDcgKzExNTQzLDIzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0yMDc1MSwxOCArMTE1NjksMTQgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0yMDc3MiwxNCArMTE1ODYsMTAgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIDoKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjA4MDYsMTQwICsxMTYxNiwzMSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0KIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVERDX0hFQURFUlMgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLQogZm9yIGFjX2Z1bmMgaW4gbWVtY3B5Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtZW1jcHkiICJhY19jdl9mdW5jX21lbWNweSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19tZW1jcHkiID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfTUVNQ1BZIDEKIF9BQ0VPRgogCiBmaQpAQCAtMjA5NDcsMTYgKzExNjQ4LDEyIEBACiAKICMgVGhlIFVsdHJpeCA0LjIgbWlwcyBidWlsdGluIGFsbG9jYSBkZWNsYXJlZCBieSBhbGxvY2EuaCBvbmx5IHdvcmtzCiAjIGZvciBjb25zdGFudCBhcmd1bWVudHMuICBVc2VsZXNzIQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl93b3JraW5nX2FsbG9jYV9oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhbGxvY2EuaD4KIGludApAQCAtMjA5NjgsNTUgKzExNjY1LDI4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX0dOVUNfXwogIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKQEAgLTIxMDQ4LDQzICsxMTcxOCwyMCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KKyAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjY7IH0KIAogaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogZWxzZQogICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucwpAQCAtMjEwOTQsMjEgKzExNzQxLDE1IEBACiAKIEFMTE9DQT1cJHtMSUJPQkpESVJ9YWxsb2NhLiRhY19vYmpleHQKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgQ19BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29zX2NyYXkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9vc19jcmF5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCiB3ZWJlY3JheQpAQCAtMjExMTgsNyArMTE3NTksNyBAQAogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X29zX2NyYXk9eWVzCiBlbHNlCiAgIGFjX2N2X29zX2NyYXk9bm8KQEAgLTIxMTI2LDk0ICsxMTc2NywxNCBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9vc19jcmF5IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQogaWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgogICBmb3IgYWNfZnVuYyBpbiBfZ2V0YjY3IEdFVEI2NyBnZXRiNjc7IGRvCi0gICAgYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIENSQVlfU1RBQ0tTRUdfRU5EICRhY19mdW5jCkBAIC0yMTIyNSwxOSArMTE3ODYsMTUgQEAKICAgZG9uZQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MAogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludApAQCAtMjEyNjAsNDMgKzExODE3LDE4IEBACiAgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9Ci0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KIF9BQ0VPRgpAQCAtMjEzMDUsNDAzICsxMTgzNywzMiBAQAogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZG91YmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRvdWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfbmV3XzsKLWludAotbWFpbiAoKQotewotaWYgKChhY19fdHlwZV9uZXdfICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoYWNfX3R5cGVfbmV3XykpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3R5cGVfZG91YmxlPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfdHlwZV9kb3VibGU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfZG91YmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2RvdWJsZSIgPiY2OyB9Ci0KICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCiAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCiAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGRvdWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgZG91YmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoZG91YmxlKSkiICJhY19jdl9zaXplb2ZfZG91YmxlIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSAgYWNfbG89IGFjX2hpPQotCQkJICBicmVhawotCQkJZmkKLQkJCWFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2xvPSBhY19oaT0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfZG91YmxlPSRhY19sbzs7Ci0nJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgotICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQotICAgZWxzZQotICAgICBhY19jdl9zaXplb2ZfZG91YmxlPTAKLSAgIGZpIDs7Ci1lc2FjCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1zdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgcmV0dXJuIDE7Ci0gIGlmICgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2RvdWJsZT1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWlmIHRlc3QgIiRhY19jdl90eXBlX2RvdWJsZSIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9kb3VibGU9MAogICAgZmkKIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwogZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9kb3VibGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2RvdWJsZSIgPiY2OyB9CiAKIAogCkBAIC0yMTcxMCw0MDMgKzExODcxLDMyIEBACiBfQUNFT0YKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9uZyBkb3VibGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZyBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZ19kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9uZXdfOwotaW50Ci1tYWluICgpCi17Ci1pZiAoKGFjX190eXBlX25ld18gKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY3ZfdHlwZV9sb25nX2RvdWJsZT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X3R5cGVfbG9uZ19kb3VibGU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID4mNjsgfQotCiAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgogIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwogIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmcgZG91YmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZyBkb3VibGUpKSIgImFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz0gYWNfaGk9Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JGFjX2xvOzsKLScnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0wCi0gICBmaSA7OwotZXNhYwotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1zdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgcmV0dXJuIDE7Ci0gIGlmICgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID0geWVzOyB0aGVuCi0gICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cit7IGFzX2ZuX3NldF9zdGF0dXMgNzcKK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0wCiAgICBmaQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiBmaQotcm0gLWYgY29uZnRlc3QudmFsCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNjsgfQogCiAKIApAQCAtMjIxMjMsMjY0ICsxMTkxMywyNDYgQEAKICAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgogICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKICAgZmkKIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfYmlnZW5kaWFuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKyAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fQVBQTEVfQ0NfXworCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorCSAgICAgI2VuZGlmCisJICAgICB0eXBlZGVmIGludCBkdW1teTsKKwogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJjaCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzCisJIyB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKwlhY19hcmNoPQorCWFjX3ByZXY9CisJZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBkbworCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKwkgICBjYXNlICRhY193b3JkIGluCisJICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpCisJICAgICAgIGlmIHRlc3QgLXogIiRhY19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuCisJCSBhY19hcmNoPSRhY193b3JkCisJICAgICAgIGVsc2UKKwkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbAorCQkgYnJlYWsKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwkgICBlc2FjCisJICAgYWNfcHJldj0KKwkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4KKwkgICBhY19wcmV2PWFyY2gKKwkgZmkKKyAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKLSNpZiAgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gXAotCSYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiAmJiBMSVRUTEVfRU5ESUFOKQotIGJvZ3VzIGVuZGlhbiBtYWNyb3MKLSNlbmRpZgorI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKICNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KLSBub3QgYmlnIGVuZGlhbgotI2VuZGlmCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfY19iaWdlbmRpYW49bm8KKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi1zaG9ydCBpbnQgYXNjaWlfbW1bXSA9IHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Owotc2hvcnQgaW50IGFzY2lpX2lpW10gPSB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKLXZvaWQgX2FzY2lpICgpIHsgY2hhciAqcyA9IChjaGFyICopIGFzY2lpX21tOyBzID0gKGNoYXIgKikgYXNjaWlfaWk7IH0KLXNob3J0IGludCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Owotc2hvcnQgaW50IGViY2RpY19tbVtdID0geyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07Ci12b2lkIF9lYmNkaWMgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgZWJjZGljX21tOyBzID0gKGNoYXIgKikgZWJjZGljX2lpOyB9CisjaW5jbHVkZSA8bGltaXRzLmg+CisKIGludAogbWFpbiAoKQogewotIF9hc2NpaSAoKTsgX2ViY2RpYyAoKTsKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWZpCi1pZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCi0gICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLSAgZWxzZQotICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPwotICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgZmkKLWZpCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubwogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOwogCitpbnQKK21haW4gKCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKwkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKwkgICAgZmkKKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisJCWFjX2N2X2NfYmlnZW5kaWFuPW5vCisJICAgICAgZWxzZQorCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKwkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorCSAgICAgIGZpCisJICAgIGZpCitmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBtYWluICgpCiB7CiAKLSAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLwotICB1bmlvbgotICB7Ci0gICAgbG9uZyBpbnQgbDsKLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOwotICB9IHU7Ci0gIHUubCA9IDE7Ci0gIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX2JpZ2VuZGlhbj15ZXMKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0KKyAgICBmaQogZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAorOzsgIygKKyAgIG5vKQorICAgICAgOzsgIygKKyAgIHVuaXZlcnNhbCkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KLWNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluCi0gIHllcykKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKLV9BQ0VPRgotIDs7Ci0gIG5vKQotICAgICA7OwotICAqKQotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcwotcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYworICAgICA7OyAjKAorICAgKikKKyAgICAgYXNfZm5fZXJyb3IgInVua25vd24gZW5kaWFubmVzcworIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiAiJExJTkVOTyIgNSA7OworIGVzYWMKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGFzc2VtYmxlciAuY2ZpIHBzZXVkby1vcCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKICAgICBsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcD11bmtub3duCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLmNmaV9zdGFydHByb2Ncblx0LmNmaV9lbmRwcm9jIik7CiBpbnQKQEAgLTIyMzkxLDYwICsxMjE2MywzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPW5vCisgIGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3AiID4mNjsgfQogaWYgdGVzdCAieCRsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQVNfQ0ZJX1BTRVVET19PUCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfQ0ZJX1BTRVVET19PUCAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogaWYgdGVzdCB4JFRBUkdFVCA9IHhTUEFSQzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgdW5hbGlnbmVkIHBjIHJlbGF0ZWQgcmVsb2NzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgogCXNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAJQ0ZMQUdTPSIkQ0ZMQUdTIC1mcGljIgogCUxERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQiCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLnRleHQ7IGZvbzogbm9wOyAuZGF0YTsgLmFsaWduIDQ7IC5ieXRlIDA7IC51YXdvcmQgJXJfZGlzcDMyKGZvbyk7IC50ZXh0Iik7CiBpbnQKQEAgLTIyNDU1LDYwICsxMjIwMSwzMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbD1ubworICBsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWw9bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKIAlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjY7IH0KICAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQVNfU1BBUkNfVUFfUENSRUwgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKIAotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBhc3NlbWJsZXIgLnJlZ2lzdGVyIHBzZXVkby1vcCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgLnJlZ2lzdGVyIHBzZXVkby1vcCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKICAgICAgICBsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wPXVua25vd24KICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgLnJlZ2lzdGVyCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLnJlZ2lzdGVyICVnMiwgI3NjcmF0Y2giKTsKIGludApAQCAtMjI1MTksNDkgKzEyMjM4LDU4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wPW5vCisgIGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3AiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wIiA+JjY7IH0KICAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3AiID0geHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bGliZmZpX2N2X3JvX2VoX2ZyYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB0ZXN0IHgkVEFSR0VUID0geFg4NiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIHN1cHBvcnRzIHBjIHJlbGF0ZWQgcmVsb2NzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBzdXBwb3J0cyBwYyByZWxhdGVkIHJlbG9jcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCWxpYmZmaV9jdl9hc194ODZfcGNyZWw9eWVzCisJZWNobyAnLnRleHQ7IGZvbzogbm9wOyAuZGF0YTsgLmxvbmcgZm9vLS47IC50ZXh0JyA+IGNvbmZ0ZXN0LnMKKwlpZiAkQ0MgJENGTEFHUyAtYyBjb25mdGVzdC5zIDI+JjEgfCBncmVwIC1pIHdhcm5pbmcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgbGliZmZpX2N2X2FzX3g4Nl9wY3JlbD1ubworCWZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FTX1g4Nl9QQ1JFTCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCitmaQorCitjYXNlICIkdGFyZ2V0IiBpbgorICAgICAqLWFwcGxlLWRhcndpbjEwKiB8ICotKi1mcmVlYnNkKiB8ICotKi1vcGVuYnNkKiB8ICotcGMtc29sYXJpcyopCisKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uIHNob3VsZCBiZSByZWFkLW9ubHkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X3JvX2VoX2ZyYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogCWxpYmZmaV9jdl9yb19laF9mcmFtZT1ubwpAQCAtMjI1NzcsNDEgKzEyMzA1LDM1IEBACiAJcm0gLWYgY29uZnRlc3QuKgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X3JvX2VoX2ZyYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNjsgfQogaWYgdGVzdCAieCRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID0geHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1JPX0VIX0ZSQU1FIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ST19FSF9GUkFNRSAxIiA+PmNvbmZkZWZzLmgKIAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBFSF9GUkFNRV9GTEFHUyAiYSIKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgXCJhXCIiID4+Y29uZmRlZnMuaAogCiBlbHNlCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTICJhdyIKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgXCJhd1wiIiA+PmNvbmZkZWZzLmgKIAogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJoaWRkZW5cIikpKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KFwiaGlkZGVuXCIpKSkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJoaWRkZW5cIikpKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eShcImhpZGRlblwiKSkpLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2xpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAJZWNobyAnaW50IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSBmb28gKHZvaWQpIHsgcmV0dXJuIDE7IH0nID4gY29uZnRlc3QuYwogCWxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGU9bm8KIAlpZiB7IGFjX3RyeT0nJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX3RyeSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgogCSAgICBpZiBncmVwICdcLmhpZGRlbi4qZm9vJyBjb25mdGVzdC5zID4vZGV2L251bGw7IHRoZW4KIAkJbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZT15ZXMKIAkgICAgZmkKQEAgLTIyNjE5LDEzICsxMjM0MSwxMSBAQAogCXJtIC1mIGNvbmZ0ZXN0LioKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPiY2OyB9CiBpZiB0ZXN0ICRsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKQEAgLTIyNjM2LDUwICsxMjM1Niw0MSBAQAogCiAKIAotCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7IGlmIHRlc3QgIiRlbmFibGVfZGVidWciID0gInllcyI7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgRkZJX0RFQlVHIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRkZJX0RFQlVHIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJ1Y3RzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0cnVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0cnVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9zdHJ1Y3RzOyBpZiB0ZXN0ICIkZW5hYmxlX3N0cnVjdHMiID0gIm5vIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBGRklfTk9fU1RSVUNUUyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9OT19TVFJVQ1RTIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yYXctYXBpIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Jhd19hcGkrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Jhd19hcGkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9yYXdfYXBpOyBpZiB0ZXN0ICIkZW5hYmxlX3Jhd19hcGkiID0gIm5vIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBGRklfTk9fUkFXX0FQSSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9OT19SQVdfQVBJIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wdXJpZnktc2FmZXR5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3B1cmlmeV9zYWZldHkrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B1cmlmeV9zYWZldHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9wdXJpZnlfc2FmZXR5OyBpZiB0ZXN0ICIkZW5hYmxlX3B1cmlmeV9zYWZldHkiID0gInllcyI7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVVNJTkdfUFVSSUZZIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgVVNJTkdfUFVSSUZZIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQpAQCAtMjI3MTUsNyArMTI0MjYsNyBAQAogYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgiCiAKIAotYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGluY2x1ZGUvZmZpLmgiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjIgogCiAKIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyBpbmNsdWRlL2ZmaV9jb21tb24uaDppbmNsdWRlL2ZmaV9jb21tb24uaCIKQEAgLTIyNzUxLDEyICsxMjQ2MiwxMyBAQAogICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAogICAgICoke2FzX25sfSopCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwogICAgICAgZXNhYwogICAgICAgY2FzZSAkYWNfdmFyIGluICMoCiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CiAgICAgICBlc2FjIDs7CiAgICAgZXNhYwogICBkb25lCkBAIC0yMjc2NCw4ICsxMjQ3Niw4IEBACiAgIChzZXQpIDI+JjEgfAogICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKICAgICAqJHthc19ubH1hY19zcGFjZT1cICopCi0gICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCi0gICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCiAgICAgICBzZWQgLW4gXAogCSJzLycvJ1xcXFwnJy9nOwogCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgpAQCAtMjI3ODgsMTIgKzEyNTAwLDEyIEBACiBpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCiAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgogICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQogICBlbHNlCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICBmaQogZmkKIHJtIC1mIGNvbmZjYWNoZQpAQCAtMjI4MDksMjM0ICsxMjUyMSwxNTkgQEAKIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQogICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCiAgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJwotICBhY19pPWBlY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKICAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgogICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCi0gIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKIGRvbmUKIExJQk9CSlM9JGFjX2xpYm9ianMKIAogTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKIAogCi1pZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NBU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ0FTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7VEVTVFNVQkRJUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtURVNUU1VCRElSX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJURVNUU1VCRElSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJURVNUU1VCRElSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7TUlQU19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtTUEFSQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtTUEFSQ19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlNQQVJDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1g4Nl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlg4NlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2X0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X1dJTjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9XSU4zMl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2X1dJTjMyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X0RBUldJTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfREFSV0lOX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FMUEhBX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7SUE2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtJQTY0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJJQTY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJJQTY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke00zMlJfVFJVRX0iICYmIHRlc3QgLXogIiR7TTMyUl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTMyUlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTMyUlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtNNjhLX1RSVUV9IiAmJiB0ZXN0IC16ICIke002OEtfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UE9XRVJQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0FJWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUE9XRVJQQ19BSVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQT1dFUlBDX0ZSRUVCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtBUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7QVJNX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkFSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtMSUJGRklfQ1JJU19UUlVFfSIgJiYgdGVzdCAteiAiJHtMSUJGRklfQ1JJU19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTElCRkZJX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkxJQkZGSV9DUklTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0ZSVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtGUlZfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkZSVlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiRlJWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7UzM5MF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtYODZfNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2XzY0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl82NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtTSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTSF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlNIXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1NINjRfVFJVRX0iICYmIHRlc3QgLXogIiR7U0g2NF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQQV9MSU5VWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQV9MSU5VWF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfTElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBBX0xJTlVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BBX0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEFfSFBVWF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQQTY0X0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEE2NF9IUFVYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQQTY0X0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBBNjRfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CiBmaQogCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RFU1RTVUJESVJfVFJVRX0iICYmIHRlc3QgLXogIiR7VEVTVFNVQkRJUl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlRFU1RTVUJESVJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7TUlQU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk1JUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NQQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NQQVJDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiWDg2X0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9XSU4zMl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfV0lOMzJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9XSU42NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfV0lONjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfV0lONjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0RBUldJTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FMUEhBX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0lBNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7SUE2NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIklBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke00zMlJfVFJVRX0iICYmIHRlc3QgLXogIiR7TTMyUl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk0zMlJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke002OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7TTY4S19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBPV0VSUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUE9XRVJQQ19BSVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfREFSV0lOX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfREFSV0lOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUE9XRVJQQ19EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfRlJFRUJTRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQT1dFUlBDX0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtBUk1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FWUjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FWUjMyX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQVZSMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTElCRkZJX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0ZSVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtGUlZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJGUlZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7UzM5MF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlMzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl82NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfNjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NIX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NIX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiU0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NINjRfVFJVRX0iICYmIHRlc3QgLXogIiR7U0g2NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlNINjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBX0xJTlVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BBX0xJTlVYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUEFfTElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBX0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEFfSFBVWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBBX0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBNjRfSFBVWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQTY0X0hQVVhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQQTY0X0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKKwogOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQogIyEgJFNIRUxMCiAjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTIzMDQ2LDU5ICsxMjY4Myw3OSBAQAogZGVidWc9ZmFsc2UKIGFjX2NzX3JlY2hlY2s9ZmFsc2UKIGFjX2NzX3NpbGVudD1mYWxzZQotU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KLV9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKIERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgotICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OwogZXNhYwotCiBmaQogCiAKLQotCi0jIFBBVEggbmVlZHMgQ1IKLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQogCiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KIGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAotZWxzZQotICBhc191bnNldD1mYWxzZQorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KIGZpCiAKIApAQCAtMjMxMDcsMjAgKzEyNzY0LDE4IEBACiAjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KICMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAogIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQotYXNfbmw9JwotJwogSUZTPSIgIiIJJGFzX25sIgogCiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotY2FzZSAkMCBpbgorY2FzZSAkMCBpbiAjKCgKICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwogICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiAgICAgIDs7CkBAIC0yMzEzMSwzMiArMTI3ODYsMTExIEBACiAgIGFzX215c2VsZj0kMAogZmkKIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgotICB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCiBmaQogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLWZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKLWRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6CiBkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIHN0YXR1cyAkPywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQ/OyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDMiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMiJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMSIgPiYkMworICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDEiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgogICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCkBAIC0yMzE3MCwxMyArMTI5MDQsMTcgQEAKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgogYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKKyRhc19lY2hvIFgvIiQwIiB8CiAgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yMzE5MSwxMDQgKzEyOTI5LDEwMyBAQAogCSAgfQogCSAgcy8uKi8uLzsgcSdgCiAKLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCi0KLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgewotCi0gICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KLSAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQotICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKLSAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKLSAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcwotICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCi0gICMgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQotICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQotICBzZWQgLW4gJwotICAgIHAKLSAgICAvWyRdTElORU5PLz0KLSAgJyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIHMvWyRdTElORU5PLiovJi0vCi0gICAgICB0IGxpbmVubwotICAgICAgYgotICAgICAgOmxpbmVubwotICAgICAgTgotICAgICAgOmxvb3AKLSAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLwotICAgICAgdCBsb29wCi0gICAgICBzLy1cbi4qLy8KLSAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCi0gIC4gIi4vJGFzX21lLmxpbmVubyIKLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCi0gIGV4aXQKLX0KLQotCi1pZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZGlybmFtZT1kaXJuYW1lCi1lbHNlCi0gIGFzX2Rpcm5hbWU9ZmFsc2UKLWZpCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKIAogRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KLWNhc2UgYGVjaG8gLW4geGAgaW4KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCiAtbiopCi0gIGNhc2UgYGVjaG8gJ3hcYydgIGluCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgogICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KLSAgKikgICBFQ0hPX0M9J1xjJzs7CisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CiAgIGVzYWM7OwogKikKICAgRUNIT19OPSctbic7OwogZXNhYwogCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCiBpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KICAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQogZWxzZQogICBybSAtZiBjb25mJCQuZGlyCi0gIG1rZGlyIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogZmkKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz0nbG4gLXMnCi0gICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6Ci0gICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCi0gICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgotICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQogICAgIGFzX2xuX3M9J2NwIC1wJwotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgorICBmaQogZWxzZQogICBhc19sbl9zPSdjcCAtcCcKIGZpCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCiBybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCiBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCiBlbHNlCiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCiAgIGFzX21rZGlyX3A9ZmFsc2UKQEAgLTIzMzA1LDEyICsxMzA0MiwxMiBAQAogICBhc190ZXN0X3g9JwogICAgIGV2YWwgc2ggLWMgJ1wnJwogICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCi0gICAgICAgIHRlc3QgLWQgIiQxLy4iOworCXRlc3QgLWQgIiQxLy4iOwogICAgICAgZWxzZQotCWNhc2UgJDEgaW4KLSAgICAgICAgLSopc2V0ICIuLyQxIjs7CisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OwogCWVzYWM7Ci0JY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKIAk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCiAgICAgJ1wnJyBzaAogICAnCkBAIC0yMzMyNSwxMyArMTMwNjIsMTkgQEAKIAogCiBleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCiAKLSMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjUsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjEwcmMwLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCkBAIC0yMzM0NCw3ICsxMzA4NywxNiBAQAogCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2Nhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfZmlsZXM7IHNoaWZ0OyBhY19jb25maWdfZmlsZXM9JCo7OworZXNhYworCitjYXNlICRhY19jb25maWdfaGVhZGVycyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKK2VzYWMKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KIGNvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKIGNvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCkBAIC0yMzM1MywyMiArMTMxMDUsMjUgQEAKIAogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQotY3VycmVudCBjb25maWd1cmF0aW9uLgorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBhY3Rpb25zCitmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKK2FuZCBhY3Rpb25zIGFyZSBzcGVjaWZpZWQgYXMgVEFHcywgYWxsIGFyZSBpbnN0YW50aWF0ZWQgYnkgZGVmYXVsdC4KIAotVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgogCiAgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKICAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwogICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCiAKIENvbmZpZ3VyYXRpb24gZmlsZXM6CiAkY29uZmlnX2ZpbGVzCkBAIC0yMzM4MiwxNiArMTMxMzcsMTcgQEAKIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiAkY29uZmlnX2NvbW1hbmRzCiAKLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+LiIKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLWxpYmZmaSBjb25maWcuc3RhdHVzIDMuMC41Ci1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEsCi0gIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCitsaWJmZmkgY29uZmlnLnN0YXR1cyAzLjAuMTByYzAKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKLUNvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKIApAQCAtMjMzOTksMTEgKzEzMTU1LDEyIEBACiBzcmNkaXI9JyRzcmNkaXInCiBJTlNUQUxMPSckSU5TVEFMTCcKIE1LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0Ci0jIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgogYWNfbmVlZF9kZWZhdWx0cz06CiB3aGlsZSB0ZXN0ICQjICE9IDAKIGRvCkBAIC0yMzQyNSwzNCArMTMxODIsNDAgQEAKICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCiAgICAgYWNfY3NfcmVjaGVjaz06IDs7CiAgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CiAgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCiAgICAgZGVidWc9OiA7OwogICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogICAtLWhlIHwgLS1oKQogICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgICBhc19mbl9lcnJvciAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CiAgIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CiAKLSAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCiAgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKIAogICBlc2FjCkBAIC0yMzQ2NywzNiArMTMyMzAsMjkzIEBACiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgotICBlY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgJFNIRUxMICQwICIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKLSAgQ09ORklHX1NIRUxMPSRTSEVMTAorICBzZXQgWCAnJFNIRUxMJyAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNoaWZ0CisgIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMIFwkKiIgPiY2CisgIENPTkZJR19TSEVMTD0nJFNIRUxMJwogICBleHBvcnQgQ09ORklHX1NIRUxMCi0gIGV4ZWMgJFNIRUxMICIkMCIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZXhlYyA1Pj5jb25maWcubG9nCiB7CiAgIGVjaG8KICAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKICMjIFJ1bm5pbmcgJGFzX21lLiAjIwogX0FTQk9YCi0gIGVjaG8gIiRhY19sb2ciCisgICRhc19lY2hvICIkYWNfbG9nIgogfSA+JjUKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAjCiAjIElOSVQtQ09NTUFORFMKICMKIEFNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICJYJG1hY3JvX3ZlcnNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21hY3JvX3JldmlzaW9uPSdgJEVDSE8gIlgkbWFjcm9fcmV2aXNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiWCRlbmFibGVfc2hhcmVkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIlgkZW5hYmxlX3N0YXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiWCRwaWNfbW9kZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICJYJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiWCRob3N0X2FsaWFzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIlgkaG9zdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9vcz0nYCRFQ0hPICJYJGhvc3Rfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIlgkYnVpbGRfYWxpYXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIlgkYnVpbGQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX29zPSdgJEVDSE8gIlgkYnVpbGRfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICJYJFNFRCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICJYJFhzZWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dSRVA9J2AkRUNITyAiWCRHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICJYJEVHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICJYJEZHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRD0nYCRFQ0hPICJYJExEIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICJYJE5NIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIlgkTE5fUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWF4X2NtZF9sZW49J2AkRUNITyAiWCRtYXhfY21kX2xlbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIlgkYWNfb2JqZXh0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiWCRleGVleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Vuc2V0PSdgJEVDSE8gIlgkbHRfdW5zZXQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIlgkbHRfU1AyTkwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIlgkbHRfTkwyU1AiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnPSdgJEVDSE8gIlgkcmVsb2FkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIlgkcmVsb2FkX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiWCRPQkpEVU1QIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICJYJGZpbGVfbWFnaWNfY21kIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICJYJEFSIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUl9GTEFHUz0nYCRFQ0hPICJYJEFSX0ZMQUdTIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICJYJFNUUklQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiWCRSQU5MSUIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0M9J2AkRUNITyAiWCRDQyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIlgkQ0ZMQUdTIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICJYJGNvbXBpbGVyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0M9J2AkRUNITyAiWCRHQ0MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIlgkb2JqZGlyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTSEVMTD0nYCRFQ0hPICJYJFNIRUxMIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIlgkRUNITyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIlgkTUFHSUNfQ01EIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiWCRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICJYJG5lZWRfbG9ja3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIlgkRFNZTVVUSUwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NRURJVD0nYCRFQ0hPICJYJE5NRURJVCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICJYJExJUE8iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIlgkT1RPT0wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MNjQ9J2AkRUNITyAiWCRPVE9PTDY0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiWCRsaWJleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIlgkc2hyZXh0X2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIlgkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiWCRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiWCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIlgkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICJYJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICJYJGFyY2hpdmVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICJYJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIlgkbW9kdWxlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICJYJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGQ9J2AkRUNITyAiWCR3aXRoX2dudV9sZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiWCRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiWCRub191bmRlZmluZWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIlgkaGFyZGNvZGVfZGlyZWN0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiWCRoYXJkY29kZV9taW51c19MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIlgkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIlgkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIlgkaW5oZXJpdF9ycGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICJYJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiWCRmaXhfc3JjZmlsZV9wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiWCRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiWCRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRleGNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzPSdgJEVDSE8gIlgkcHJlbGlua19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICJYJGZpbGVfbGlzdF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICJYJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiWCRuZWVkX2xpYl9wcmVmaXgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfdmVyc2lvbj0nYCRFQ0hPICJYJG5lZWRfdmVyc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIlgkdmVyc2lvbl90eXBlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICJYJHJ1bnBhdGhfdmFyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfdmFyPSdgJEVDSE8gIlgkc2hsaWJwYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIlgkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiWCRsaWJuYW1lX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiWCRzb25hbWVfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICJYJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICJYJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiWCRmaW5pc2hfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiWCRmaW5pc2hfZXZhbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIlgkaGFyZGNvZGVfaW50b19saWJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiWCRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIlgkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICJYJGhhcmRjb2RlX2FjdGlvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW4iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICJYJG9sZF9zdHJpcGxpYiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiWCRzdHJpcGxpYiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIFNFRCBcCitHUkVQIFwKK0VHUkVQIFwKK0ZHUkVQIFwKK0xEIFwKK05NIFwKK0xOX1MgXAorbHRfU1AyTkwgXAorbHRfTkwyU1AgXAorcmVsb2FkX2ZsYWcgXAorT0JKRFVNUCBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitBUiBcCitBUl9GTEFHUyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitTSEVMTCBcCitFQ0hPIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9waWMgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZml4X3NyY2ZpbGVfcGF0aCBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRml4LXVwIGZhbGxiYWNrIGVjaG8gaWYgaXQgd2FzIG1hbmdsZWQgYnkgdGhlIGFib3ZlIHF1b3RpbmcgcnVsZXMuCitjYXNlIFwkbHRfRUNITyBpbgorKidcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJykgIGx0X0VDSE89XGBcJEVDSE8gIlhcJGx0X0VDSE8iIHwgXCRYc2VkIC1lICdzL1xcXFxcXFxcXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyJcJC9cJDAgLS1mYWxsYmFjay1lY2hvIi8nXGAKKyAgOzsKK2VzYWMKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCit4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCitsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJworCisKKwogVEFSR0VURElSPSIkVEFSR0VURElSIgogCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAKICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgogZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCkBAIC0yMzUwNCwxNiArMTM1MjQsMjAgQEAKICAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgogICAgICJmZmljb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgZmZpY29uZmlnLmgiIDs7CiAgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworICAgICJsaWJ0b29sIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGxpYnRvb2wiIDs7CiAgICAgImluY2x1ZGUiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgaW5jbHVkZSIgOzsKICAgICAic3JjIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHNyYyIgOzsKICAgICAiaW5jbHVkZS9mZml0YXJnZXQuaCIpIENPTkZJR19MSU5LUz0iJENPTkZJR19MSU5LUyBpbmNsdWRlL2ZmaXRhcmdldC5oOnNyYy8kVEFSR0VURElSL2ZmaXRhcmdldC5oIiA7OworICAgICJpbmNsdWRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvTWFrZWZpbGUiIDs7CiAgICAgImluY2x1ZGUvZmZpLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9mZmkuaCIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgInRlc3RzdWl0ZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0c3VpdGUvTWFrZWZpbGUiIDs7CisgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGUiIDs7CisgICAgImxpYmZmaS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJmZmkucGMiIDs7CiAgICAgImluY2x1ZGUvZmZpX2NvbW1vbi5oIikgQ09ORklHX0xJTktTPSIkQ09ORklHX0xJTktTIGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oIiA7OwogICAgICJmZmljb25maWcucHkiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZmZpY29uZmlnLnB5IiA7OwogCi0gICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgKikgYXNfZm5fZXJyb3IgImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CiAgIGVzYWMKIGRvbmUKIApAQCAtMjM1NDEsNyArMTM1NjUsNyBAQAogICB0cmFwICdleGl0X3N0YXR1cz0kPwogICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cwogJyAwCi0gIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1CisgIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1CiB9CiAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KIApAQCAtMjM1NTIsMjgxICsxMzU3NiwxNDAgQEAKIHsKICAgdG1wPS4vY29uZiQkLSRSQU5ET00KICAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCi19IHx8Ci17Ci0gICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci19Cit9IHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQogCi0jCi0jIFNldCB1cCB0aGUgc2VkIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgotIwotCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHNjcmlwdHMgaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KLSMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgogaWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KIAorCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgogX0FDRU9GCiAKIAotCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJyQnYAogYWNfZGVsaW09JyUhXyEjICcKIGZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbwotICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCi1TSEVMTCEkU0hFTEwkYWNfZGVsaW0KLVBBVEhfU0VQQVJBVE9SISRQQVRIX1NFUEFSQVRPUiRhY19kZWxpbQotUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KLVBBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCi1QQUNLQUdFX1ZFUlNJT04hJFBBQ0tBR0VfVkVSU0lPTiRhY19kZWxpbQotUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCi1QQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KLWV4ZWNfcHJlZml4ISRleGVjX3ByZWZpeCRhY19kZWxpbQotcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KLWJpbmRpciEkYmluZGlyJGFjX2RlbGltCi1zYmluZGlyISRzYmluZGlyJGFjX2RlbGltCi1saWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCi1kYXRhcm9vdGRpciEkZGF0YXJvb3RkaXIkYWNfZGVsaW0KLWRhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KLXN5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KLXNoYXJlZHN0YXRlZGlyISRzaGFyZWRzdGF0ZWRpciRhY19kZWxpbQotbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQotaW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQotb2xkaW5jbHVkZWRpciEkb2xkaW5jbHVkZWRpciRhY19kZWxpbQotZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KLWluZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KLWh0bWxkaXIhJGh0bWxkaXIkYWNfZGVsaW0KLWR2aWRpciEkZHZpZGlyJGFjX2RlbGltCi1wZGZkaXIhJHBkZmRpciRhY19kZWxpbQotcHNkaXIhJHBzZGlyJGFjX2RlbGltCi1saWJkaXIhJGxpYmRpciRhY19kZWxpbQotbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KLW1hbmRpciEkbWFuZGlyJGFjX2RlbGltCi1ERUZTISRERUZTJGFjX2RlbGltCi1FQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQotRUNIT19OISRFQ0hPX04kYWNfZGVsaW0KLUVDSE9fVCEkRUNIT19UJGFjX2RlbGltCi1MSUJTISRMSUJTJGFjX2RlbGltCi1idWlsZF9hbGlhcyEkYnVpbGRfYWxpYXMkYWNfZGVsaW0KLWhvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KLXRhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCi1idWlsZCEkYnVpbGQkYWNfZGVsaW0KLWJ1aWxkX2NwdSEkYnVpbGRfY3B1JGFjX2RlbGltCi1idWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQotYnVpbGRfb3MhJGJ1aWxkX29zJGFjX2RlbGltCi1ob3N0ISRob3N0JGFjX2RlbGltCi1ob3N0X2NwdSEkaG9zdF9jcHUkYWNfZGVsaW0KLWhvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQotaG9zdF9vcyEkaG9zdF9vcyRhY19kZWxpbQotdGFyZ2V0ISR0YXJnZXQkYWNfZGVsaW0KLXRhcmdldF9jcHUhJHRhcmdldF9jcHUkYWNfZGVsaW0KLXRhcmdldF92ZW5kb3IhJHRhcmdldF92ZW5kb3IkYWNfZGVsaW0KLXRhcmdldF9vcyEkdGFyZ2V0X29zJGFjX2RlbGltCi1JTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQotSU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCi1JTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQotYW1fX2lzcmMhJGFtX19pc3JjJGFjX2RlbGltCi1DWUdQQVRIX1chJENZR1BBVEhfVyRhY19kZWxpbQotUEFDS0FHRSEkUEFDS0FHRSRhY19kZWxpbQotVkVSU0lPTiEkVkVSU0lPTiRhY19kZWxpbQotQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQotQVVUT0NPTkYhJEFVVE9DT05GJGFjX2RlbGltCi1BVVRPTUFLRSEkQVVUT01BS0UkYWNfZGVsaW0KLUFVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KLU1BS0VJTkZPISRNQUtFSU5GTyRhY19kZWxpbQotaW5zdGFsbF9zaCEkaW5zdGFsbF9zaCRhY19kZWxpbQotU1RSSVAhJFNUUklQJGFjX2RlbGltCi1JTlNUQUxMX1NUUklQX1BST0dSQU0hJElOU1RBTExfU1RSSVBfUFJPR1JBTSRhY19kZWxpbQotbWtkaXJfcCEkbWtkaXJfcCRhY19kZWxpbQotQVdLISRBV0skYWNfZGVsaW0KLVNFVF9NQUtFISRTRVRfTUFLRSRhY19kZWxpbQotYW1fX2xlYWRpbmdfZG90ISRhbV9fbGVhZGluZ19kb3QkYWNfZGVsaW0KLUFNVEFSISRBTVRBUiRhY19kZWxpbQotYW1fX3RhciEkYW1fX3RhciRhY19kZWxpbQotYW1fX3VudGFyISRhbV9fdW50YXIkYWNfZGVsaW0KLUNDISRDQyRhY19kZWxpbQotQ0ZMQUdTISRDRkxBR1MkYWNfZGVsaW0KLUxERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KLUNQUEZMQUdTISRDUFBGTEFHUyRhY19kZWxpbQotYWNfY3RfQ0MhJGFjX2N0X0NDJGFjX2RlbGltCi1FWEVFWFQhJEVYRUVYVCRhY19kZWxpbQotT0JKRVhUISRPQkpFWFQkYWNfZGVsaW0KLURFUERJUiEkREVQRElSJGFjX2RlbGltCi1hbV9faW5jbHVkZSEkYW1fX2luY2x1ZGUkYWNfZGVsaW0KLWFtX19xdW90ZSEkYW1fX3F1b3RlJGFjX2RlbGltCi1BTURFUF9UUlVFISRBTURFUF9UUlVFJGFjX2RlbGltCi1BTURFUF9GQUxTRSEkQU1ERVBfRkFMU0UkYWNfZGVsaW0KLUFNREVQQkFDS1NMQVNIISRBTURFUEJBQ0tTTEFTSCRhY19kZWxpbQotQ0NERVBNT0RFISRDQ0RFUE1PREUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NfVFJVRSEkYW1fX2Zhc3RkZXBDQ19UUlVFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENDX0ZBTFNFISRhbV9fZmFzdGRlcENDX0ZBTFNFJGFjX2RlbGltCi1DQ0FTISRDQ0FTJGFjX2RlbGltCi1DQ0FTRkxBR1MhJENDQVNGTEFHUyRhY19kZWxpbQotQ0NBU0RFUE1PREUhJENDQVNERVBNT0RFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENDQVNfVFJVRSEkYW1fX2Zhc3RkZXBDQ0FTX1RSVUUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NBU19GQUxTRSEkYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFJGFjX2RlbGltCi1TRUQhJFNFRCRhY19kZWxpbQotR1JFUCEkR1JFUCRhY19kZWxpbQotRUdSRVAhJEVHUkVQJGFjX2RlbGltCi1MTl9TISRMTl9TJGFjX2RlbGltCi1FQ0hPISRFQ0hPJGFjX2RlbGltCi1fQUNFT0YKKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CiAKLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgogICAgIGJyZWFrCiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CiAgIGVsc2UKICAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgogICBmaQogZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAogCi1hY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKLWlmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCi0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCi0gIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi1jYXQgPiJcJHRtcC9zdWJzLTEuc2VkIiA8PFxDRU9GJGFjX2VvZgotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCiBfQUNFT0YKLXNlZCAnCi1zL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nCi1zL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCi06bgotdCBuCi1zLyciJGFjX2RlbGltIickLyxnLzsgdAotcy8kL1xcLzsgcAotTjsgcy9eLipcbi8vOyBzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nOyBiIG4KLScgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKLXJtIC1mIGNvbmYkJHN1YnMuc2VkCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotQ0VPRiRhY19lb2YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorCit9Cit7CisgIGxpbmUgPSAkIDAKKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisgIHN1YnN0ZWQgPSAwCisgIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworICAgIGtleSA9IGZpZWxkW2ldCisgICAga2V5bGVuID0gbGVuZ3RoKGtleSkKKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworICAgICAgdmFsdWUgPSBTW2tleV0KKyAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisgICAgICBzdWJzdGVkID0gMQorICAgIH0gZWxzZQorICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKyAgfQorCisgIHByaW50IGxpbmUKK30KKworX0FDQVdLCiBfQUNFT0YKLQotCi1hY19kZWxpbT0nJSFfISMgJwotZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCi0gIGNhdCA+Y29uZiQkc3Vicy5zZWQgPDxfQUNFT0YKLUFSISRBUiRhY19kZWxpbQotUkFOTElCISRSQU5MSUIkYWNfZGVsaW0KLUNQUCEkQ1BQJGFjX2RlbGltCi1DWFghJENYWCRhY19kZWxpbQotQ1hYRkxBR1MhJENYWEZMQUdTJGFjX2RlbGltCi1hY19jdF9DWFghJGFjX2N0X0NYWCRhY19kZWxpbQotQ1hYREVQTU9ERSEkQ1hYREVQTU9ERSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDWFhfVFJVRSEkYW1fX2Zhc3RkZXBDWFhfVFJVRSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDWFhfRkFMU0UhJGFtX19mYXN0ZGVwQ1hYX0ZBTFNFJGFjX2RlbGltCi1DWFhDUFAhJENYWENQUCRhY19kZWxpbQotRjc3ISRGNzckYWNfZGVsaW0KLUZGTEFHUyEkRkZMQUdTJGFjX2RlbGltCi1hY19jdF9GNzchJGFjX2N0X0Y3NyRhY19kZWxpbQotTElCVE9PTCEkTElCVE9PTCRhY19kZWxpbQotTUFJTlRBSU5FUl9NT0RFX1RSVUUhJE1BSU5UQUlORVJfTU9ERV9UUlVFJGFjX2RlbGltCi1NQUlOVEFJTkVSX01PREVfRkFMU0UhJE1BSU5UQUlORVJfTU9ERV9GQUxTRSRhY19kZWxpbQotTUFJTlQhJE1BSU5UJGFjX2RlbGltCi1URVNUU1VCRElSX1RSVUUhJFRFU1RTVUJESVJfVFJVRSRhY19kZWxpbQotVEVTVFNVQkRJUl9GQUxTRSEkVEVTVFNVQkRJUl9GQUxTRSRhY19kZWxpbQotQU1fUlVOVEVTVEZMQUdTISRBTV9SVU5URVNURkxBR1MkYWNfZGVsaW0KLU1JUFNfVFJVRSEkTUlQU19UUlVFJGFjX2RlbGltCi1NSVBTX0ZBTFNFISRNSVBTX0ZBTFNFJGFjX2RlbGltCi1TUEFSQ19UUlVFISRTUEFSQ19UUlVFJGFjX2RlbGltCi1TUEFSQ19GQUxTRSEkU1BBUkNfRkFMU0UkYWNfZGVsaW0KLVg4Nl9UUlVFISRYODZfVFJVRSRhY19kZWxpbQotWDg2X0ZBTFNFISRYODZfRkFMU0UkYWNfZGVsaW0KLVg4Nl9GUkVFQlNEX1RSVUUhJFg4Nl9GUkVFQlNEX1RSVUUkYWNfZGVsaW0KLVg4Nl9GUkVFQlNEX0ZBTFNFISRYODZfRlJFRUJTRF9GQUxTRSRhY19kZWxpbQotWDg2X1dJTjMyX1RSVUUhJFg4Nl9XSU4zMl9UUlVFJGFjX2RlbGltCi1YODZfV0lOMzJfRkFMU0UhJFg4Nl9XSU4zMl9GQUxTRSRhY19kZWxpbQotWDg2X0RBUldJTl9UUlVFISRYODZfREFSV0lOX1RSVUUkYWNfZGVsaW0KLVg4Nl9EQVJXSU5fRkFMU0UhJFg4Nl9EQVJXSU5fRkFMU0UkYWNfZGVsaW0KLUFMUEhBX1RSVUUhJEFMUEhBX1RSVUUkYWNfZGVsaW0KLUFMUEhBX0ZBTFNFISRBTFBIQV9GQUxTRSRhY19kZWxpbQotSUE2NF9UUlVFISRJQTY0X1RSVUUkYWNfZGVsaW0KLUlBNjRfRkFMU0UhJElBNjRfRkFMU0UkYWNfZGVsaW0KLU0zMlJfVFJVRSEkTTMyUl9UUlVFJGFjX2RlbGltCi1NMzJSX0ZBTFNFISRNMzJSX0ZBTFNFJGFjX2RlbGltCi1NNjhLX1RSVUUhJE02OEtfVFJVRSRhY19kZWxpbQotTTY4S19GQUxTRSEkTTY4S19GQUxTRSRhY19kZWxpbQotUE9XRVJQQ19UUlVFISRQT1dFUlBDX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfRkFMU0UhJFBPV0VSUENfRkFMU0UkYWNfZGVsaW0KLVBPV0VSUENfQUlYX1RSVUUhJFBPV0VSUENfQUlYX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfQUlYX0ZBTFNFISRQT1dFUlBDX0FJWF9GQUxTRSRhY19kZWxpbQotUE9XRVJQQ19EQVJXSU5fVFJVRSEkUE9XRVJQQ19EQVJXSU5fVFJVRSRhY19kZWxpbQotUE9XRVJQQ19EQVJXSU5fRkFMU0UhJFBPV0VSUENfREFSV0lOX0ZBTFNFJGFjX2RlbGltCi1QT1dFUlBDX0ZSRUVCU0RfVFJVRSEkUE9XRVJQQ19GUkVFQlNEX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfRlJFRUJTRF9GQUxTRSEkUE9XRVJQQ19GUkVFQlNEX0ZBTFNFJGFjX2RlbGltCi1BUk1fVFJVRSEkQVJNX1RSVUUkYWNfZGVsaW0KLUFSTV9GQUxTRSEkQVJNX0ZBTFNFJGFjX2RlbGltCi1MSUJGRklfQ1JJU19UUlVFISRMSUJGRklfQ1JJU19UUlVFJGFjX2RlbGltCi1MSUJGRklfQ1JJU19GQUxTRSEkTElCRkZJX0NSSVNfRkFMU0UkYWNfZGVsaW0KLUZSVl9UUlVFISRGUlZfVFJVRSRhY19kZWxpbQotRlJWX0ZBTFNFISRGUlZfRkFMU0UkYWNfZGVsaW0KLVMzOTBfVFJVRSEkUzM5MF9UUlVFJGFjX2RlbGltCi1TMzkwX0ZBTFNFISRTMzkwX0ZBTFNFJGFjX2RlbGltCi1YODZfNjRfVFJVRSEkWDg2XzY0X1RSVUUkYWNfZGVsaW0KLVg4Nl82NF9GQUxTRSEkWDg2XzY0X0ZBTFNFJGFjX2RlbGltCi1TSF9UUlVFISRTSF9UUlVFJGFjX2RlbGltCi1TSF9GQUxTRSEkU0hfRkFMU0UkYWNfZGVsaW0KLVNINjRfVFJVRSEkU0g2NF9UUlVFJGFjX2RlbGltCi1TSDY0X0ZBTFNFISRTSDY0X0ZBTFNFJGFjX2RlbGltCi1QQV9MSU5VWF9UUlVFISRQQV9MSU5VWF9UUlVFJGFjX2RlbGltCi1QQV9MSU5VWF9GQUxTRSEkUEFfTElOVVhfRkFMU0UkYWNfZGVsaW0KLVBBX0hQVVhfVFJVRSEkUEFfSFBVWF9UUlVFJGFjX2RlbGltCi1QQV9IUFVYX0ZBTFNFISRQQV9IUFVYX0ZBTFNFJGFjX2RlbGltCi1QQTY0X0hQVVhfVFJVRSEkUEE2NF9IUFVYX1RSVUUkYWNfZGVsaW0KLVBBNjRfSFBVWF9GQUxTRSEkUEE2NF9IUFVYX0ZBTFNFJGFjX2RlbGltCi1BTExPQ0EhJEFMTE9DQSRhY19kZWxpbQotSEFWRV9MT05HX0RPVUJMRSEkSEFWRV9MT05HX0RPVUJMRSRhY19kZWxpbQotVEFSR0VUISRUQVJHRVQkYWNfZGVsaW0KLVRBUkdFVERJUiEkVEFSR0VURElSJGFjX2RlbGltCi10b29sZXhlY2RpciEkdG9vbGV4ZWNkaXIkYWNfZGVsaW0KLXRvb2xleGVjbGliZGlyISR0b29sZXhlY2xpYmRpciRhY19kZWxpbQotTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQotTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKIF9BQ0VPRgogCi0gIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gNzY7IHRoZW4KLSAgICBicmVhawotICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgotICBmaQotZG9uZQotCi1hY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKLWlmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCi0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCi0gIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi1jYXQgPiJcJHRtcC9zdWJzLTIuc2VkIiA8PFxDRU9GJGFjX2VvZgotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYiBlbmQKLV9BQ0VPRgotc2VkICcKLXMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKLXMvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KLTpuCi10IG4KLXMvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Ci1zLyQvXFwvOyBwCi1OOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgotJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAotcm0gLWYgY29uZiQkc3Vicy5zZWQKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi06ZW5kCi1zL3wjXyEhXyN8Ly9nCi1DRU9GJGFjX2VvZgotX0FDRU9GCi0KLQogIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCiAjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAogIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKQEAgLTIzODQyLDIwICsxMzcyNSwxMjggQEAKIH0nCiBmaQogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKIAorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiR0bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCiAKLWZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgOkwgJENPTkZJR19MSU5LUyAgOkMgJENPTkZJR19DT01NQU5EUworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgIDpMICRDT05GSUdfTElOS1MgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZwogZG8KICAgY2FzZSAkYWNfdGFnIGluCiAgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OwogICBlc2FjCiAgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCiAgIDpbRkhMXSo6Kik7OwotICA6TCogfCA6Qyo6KikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKICAgOltGSF0tKSBhY190YWc9LTotOzsKICAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKICAgZXNhYwpAQCAtMjM4ODMsMjYgKzEzODc0LDM0IEBACiAJICAgW1xcLyRdKikgZmFsc2U7OwogCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKIAkgICBlc2FjIHx8Ci0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworCSAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OwogICAgICAgZXNhYwotICAgICAgYWNfZmlsZV9pbnB1dHM9IiRhY19maWxlX2lucHV0cyAkYWNfZiIKKyAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCiAgICAgZG9uZQogCiAgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKICAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CiAgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBmcm9tICJgSUZTPToKLQkgIGVjaG8gJCogfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJ2AiIGJ5IGNvbmZpZ3VyZS4iCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKICAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCiAgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQogICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKIAogICAgIGNhc2UgJGFjX3RhZyBpbgotICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIjs7CisgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OwogICAgIGVzYWMKICAgICA7OwogICBlc2FjCkBAIC0yMzkxMiw3ICsxMzkxMSw3IEBACiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKIAkgICAgcy8vXDEvCiAJICAgIHEKQEAgLTIzOTMwLDU1ICsxMzkyOSwxNSBAQAogCSAgICBxCiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKLSAgeyBhc19kaXI9IiRhY19kaXIiCi0gIGNhc2UgJGFzX2RpciBpbiAjKAotICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7Ci0gIGVzYWMKLSAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAotICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKLSAgICAgIGVzYWMKLSAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAogICBhY19idWlsZGRpcj0uCiAKIGNhc2UgIiRhY19kaXIiIGluCiAuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICopCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKICAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgogICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CiAgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwpAQCAtMjQwMjMsMTIgKzEzOTgyLDEyIEBACiAgIGVzYWMKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KICMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgogYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49Ci0KLWNhc2UgYHNlZCAtbiAnL2RhdGFyb290ZGlyLyB7CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CiAgIHAKICAgcQogfQpAQCAtMjQwMzYsMzYgKzEzOTk1LDM3IEBACiAvQGRvY2RpckAvcAogL0BpbmZvZGlyQC9wCiAvQGxvY2FsZWRpckAvcAotL0BtYW5kaXJAL3AKLScgJGFjX2ZpbGVfaW5wdXRzYCBpbgorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCiAqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CiAqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCiAgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKICAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKICAgcyZAaW5mb2RpckAmJGluZm9kaXImZwogICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZwogICBzJkBtYW5kaXJAJiRtYW5kaXImZwotICAgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7CisgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7CiBlc2FjCiBfQUNFT0YKIAogIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgogIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCiAjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/Ci1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotICBzZWQgIiRhY192cHN1YgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgogJGV4dHJhc3ViCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogOnQKIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKLXMmQGNvbmZpZ3VyZV9pbnB1dEAmJGNvbmZpZ3VyZV9pbnB1dCY7dCB0CitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CiBzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKIHMmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CiBzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CiBzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CkBAIC0yNDA3NiwxMzUgKzE0MDM2LDY1IEBACiBzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CiBzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiAkYWNfZGF0YXJvb3RkaXJfaGFjawotIiAkYWNfZmlsZV9pbnB1dHMgfCBzZWQgLWYgIiR0bXAvc3Vicy0xLnNlZCIgfCBzZWQgLWYgIiR0bXAvc3Vicy0yLnNlZCIgPiR0bXAvb3V0CisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkdG1wL3N1YnMuYXdrIiA+JHRtcC9vdXQgXAorICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKIAogdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKICAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKICAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJwogd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCiB3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjI7fQogCiAgIHJtIC1mICIkdG1wL3N0ZGluIgogICBjYXNlICRhY19maWxlIGluCi0gIC0pIGNhdCAiJHRtcC9vdXQiOyBybSAtZiAiJHRtcC9vdXQiOzsKLSAgKikgcm0gLWYgIiRhY19maWxlIjsgbXYgIiR0bXAvb3V0IiAkYWNfZmlsZTs7Ci0gIGVzYWMKKyAgLSkgY2F0ICIkdG1wL291dCIgJiYgcm0gLWYgIiR0bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogIDs7CiAgIDpIKQogICAjCiAgICMgQ09ORklHX0hFQURFUgogICAjCi1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBgY29uZnRlc3QuZGVmaW5lcycsIHRoYXQKLSMgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50byBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCi0jIEZpcnN0LCBhcHBlbmQgYSBzcGFjZSB0byBldmVyeSB1bmRlZi9kZWZpbmUgbGluZSwgdG8gZWFzZSBtYXRjaGluZy4KLWVjaG8gJ3MvJC8gLycgPmNvbmZ0ZXN0LmRlZmluZXMKLSMgVGhlbiwgcHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0LCBvciBpbgotIyBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50LCBpbiBjb25maWcuc3RhdHVzLiAgSWYgc29tZSBtYWNyb3Mgd2VyZQotIyBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsICNkZWZpbmVzIGZvciB0aGUgc2FtZQotIyBzeW1ib2wsIHdoaWNoIGlzIHVzZWxlc3MuICBCdXQgZG8gbm90IHNvcnQgdGhlbSwgc2luY2UgdGhlIGxhc3QKLSMgQUNfREVGSU5FIG11c3QgYmUgaG9ub3JlZC4KLWFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCi0jIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgUEFSQU1TIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkLCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jIFBBUkFNUyBpcyB0aGUgcGFyYW1ldGVyIGxpc3QgaW4gdGhlIG1hY3JvIGRlZmluaXRpb24tLWluIG1vc3QgY2FzZXMsIGl0J3MKLSMganVzdCBhbiBlbXB0eSBzdHJpbmcuCi1hY19kQT0ncyxeXFwoWwkgI10qXFwpW14JIF0qXFwoWwkgXSonCi1hY19kQj0nXFwpWwkgKF0uKixcXDFkZWZpbmVcXDInCi1hY19kQz0nICcKLWFjX2REPScgLCcKLQotdW5pcSBjb25mZGVmcy5oIHwKLSAgc2VkIC1uICcKLQl0IHJzZXQKLQk6cnNldAotCXMvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLy8KLQl0IG9rCi0JZAotCTpvawotCXMvW1xcJixdL1xcJi9nCi0Jcy9eXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpLyAnIiRhY19kQSInXDEnIiRhY19kQiInXDInIiR7YWNfZEN9IidcMyciJGFjX2REIicvcAotCXMvXlwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS8nIiRhY19kQSInXDEnIiRhY19kQiRhY19kQyInXDInIiRhY19kRCInL3AKLSAgJyA+PmNvbmZ0ZXN0LmRlZmluZXMKLQotIyBSZW1vdmUgdGhlIHNwYWNlIHRoYXQgd2FzIGFwcGVuZGVkIHRvIGVhc2UgbWF0Y2hpbmcuCi0jIFRoZW4gcmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotIyAoVGhlIHJlZ2V4cCBjYW4gYmUgc2hvcnQsIHNpbmNlIHRoZSBsaW5lIGNvbnRhaW5zIGVpdGhlciAjZGVmaW5lIG9yICN1bmRlZi4pCi1lY2hvICdzLyAkLy8KLXMsXlsJICNdKnUuKiwvKiAmICovLCcgPj5jb25mdGVzdC5kZWZpbmVzCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lczoKLWFjX21heF9zZWRfbGluZXM9NTAKLQotIyBGaXJzdCBzZWQgY29tbWFuZCBpczoJIHNlZCAtZiBkZWZpbmVzLnNlZCAkYWNfZmlsZV9pbnB1dHMgPiIkdG1wL291dDEiCi0jIFNlY29uZCBvbmUgaXM6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MSIgPiIkdG1wL291dDIiCi0jIFRoaXJkIG9uZSB3aWxsIGJlOgkgc2VkIC1mIGRlZmluZXMuc2VkICIkdG1wL291dDIiID4iJHRtcC9vdXQxIgotIyBldCBjZXRlcmEuCi1hY19pbj0nJGFjX2ZpbGVfaW5wdXRzJwotYWNfb3V0PSciJHRtcC9vdXQxIicKLWFjX254dD0nIiR0bXAvb3V0MiInCi0KLXdoaWxlIDoKLWRvCi0gICMgV3JpdGUgYSBoZXJlIGRvY3VtZW50OgotICAgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi0gICAgIyBGaXJzdCwgY2hlY2sgdGhlIGZvcm1hdCBvZiB0aGUgbGluZToKLSAgICBjYXQgPiJcJHRtcC9kZWZpbmVzLnNlZCIgPDxcXENFT0YKLS9eWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKiRhY193b3JkX3JlWwkgXSpcJC9iIGRlZgotL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKiRhY193b3JkX3JlWygJIF0vYiBkZWYKLWIKLTpkZWYKLV9BQ0VPRgotICBzZWQgJHthY19tYXhfc2VkX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgICBzZWQgLWYgIiR0bXAvZGVmaW5lcy5zZWQiJyAiJGFjX2luID4kYWNfb3V0IiA+PiRDT05GSUdfU1RBVFVTCi0gIGFjX2luPSRhY19vdXQ7IGFjX291dD0kYWNfbnh0OyBhY19ueHQ9JGFjX2luCi0gIHNlZCAxLCR7YWNfbWF4X3NlZF9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKLSAgZ3JlcCAuIGNvbmZ0ZXN0LnRhaWwgPi9kZXYvbnVsbCB8fCBicmVhawotICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCi0gIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QuZGVmaW5lcwotZG9uZQotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCi0KLWVjaG8gImFjX3Jlc3VsdD0kYWNfaW4iID4+JENPTkZJR19TVEFUVVMKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgogICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iID4iJHRtcC9jb25maWcuaCIKLSAgICBjYXQgIiRhY19yZXN1bHQiID4+IiR0bXAvY29uZmlnLmgiCi0gICAgaWYgZGlmZiAkYWNfZmlsZSAiJHRtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJHRtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KICAgICBlbHNlCi0gICAgICBybSAtZiAkYWNfZmlsZQotICAgICAgbXYgIiR0bXAvY29uZmlnLmgiICRhY19maWxlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICAgZmkKICAgZWxzZQotICAgIGVjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIgotICAgIGNhdCAiJGFjX3Jlc3VsdCIKKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQogICBmaQotICBybSAtZiAiJHRtcC9vdXQxMiIKLSMgQ29tcHV0ZSAkYWNfZmlsZSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0iJGFjX2ZpbGUiCiBfYW1fc3RhbXBfY291bnQ9MQogZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkYWNfZmlsZSB8ICRhY19maWxlOiogKQorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCiAgICAgICBicmVhayA7OwogICAgICogKQogICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OwogICBlc2FjCiBkb25lCi1lY2hvICJ0aW1lc3RhbXAgZm9yICRhY19maWxlIiA+YCRhc19kaXJuYW1lIC0tICRhY19maWxlIHx8Ci0kYXNfZXhwciBYJGFjX2ZpbGUgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvL1wpJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgkYWNfZmlsZSB8CitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YCRhc19kaXJuYW1lIC0tICIkX2FtX2FyZyIgfHwKKyRhc19leHByIFgiJF9hbV9hcmciIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAogICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yNDIyOCw1MiArMTQxMTgsNjcgQEAKICAgIyBDT05GSUdfTElOSwogICAjCiAKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbGlua2luZyAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsaW5raW5nICRzcmNkaXIvJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY2O30KKyAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRzcmNkaXIiID0gJy4nOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBQcmVmZXIgdGhlIGZpbGUgZnJvbSB0aGUgc291cmNlIHRyZWUgaWYgbmFtZXMgYXJlIGlkZW50aWNhbC4KKyAgICBpZiB0ZXN0ICIkYWNfc291cmNlIiA9ICIkYWNfZmlsZSIgfHwgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYWNfc291cmNlPSRzcmNkaXIvJGFjX3NvdXJjZQorICAgIGZpCiAKLSAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY19zb3VyY2UiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJHNyY2Rpci8kYWNfc291cmNlOiBmaWxlIG5vdCBmb3VuZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkc3JjZGlyLyRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbGlua2luZyAkYWNfc291cmNlIHRvICRhY19maWxlIiA+JjY7fQorCisgICAgaWYgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgIiRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgcm0gLWYgIiRhY19maWxlIgorCisgICAgIyBUcnkgYSByZWxhdGl2ZSBzeW1saW5rLCB0aGVuIGEgaGFyZCBsaW5rLCB0aGVuIGEgY29weS4KKyAgICBjYXNlICRzcmNkaXIgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRhY19zb3VyY2UgOzsKKwkqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JGFjX3NvdXJjZSA7OworICAgIGVzYWMKKyAgICBsbiAtcyAiJGFjX3JlbF9zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGxuICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8CisgICAgICBjcCAtcCAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiB8fAorICAgICAgYXNfZm5fZXJyb3IgImNhbm5vdCBsaW5rIG9yIGNvcHkgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICAgZmkKLSAgcm0gLWYgIiRhY19maWxlIgotCi0gICMgVHJ5IGEgcmVsYXRpdmUgc3ltbGluaywgdGhlbiBhIGhhcmQgbGluaywgdGhlbiBhIGNvcHkuCi0gIGNhc2UgJHNyY2RpciBpbgotICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRzcmNkaXIvJGFjX3NvdXJjZSA7OwotICAgICAgKikgYWNfcmVsX3NvdXJjZT0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIvJGFjX3NvdXJjZSA7OwotICBlc2FjCi0gIGxuIC1zICIkYWNfcmVsX3NvdXJjZSIgIiRhY19maWxlIiAyPi9kZXYvbnVsbCB8fAotICAgIGxuICIkc3JjZGlyLyRhY19zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKLSAgICBjcCAtcCAiJHNyY2Rpci8kYWNfc291cmNlIiAiJGFjX2ZpbGUiIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGxpbmsgb3IgY29weSAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGxpbmsgb3IgY29weSAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KICA7OwotICA6QykgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1Ci1lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CiAgOzsKICAgZXNhYwogCiAKICAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCi0gICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAotICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gIGlmIHNlZCAxMHEgIiRtZiIgfCBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAogJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCiAJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAogCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRtZiIgfAorJGFzX2VjaG8gWCIkbWYiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMjQyOTEsMzMgKzE0MTk2LDMzIEBACiAJICAgIHEKIAkgIH0KIAkgIHMvLiovLi87IHEnYAotICBlbHNlCi0gICAgY29udGludWUKLSAgZmkKLSAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKLSAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgotICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQotICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCi0gICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0Ci0gIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKLSAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAotICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKLSAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgIyBleHBhbnNpb24uCi0gIGZvciBmaWxlIGluIGBzZWQgLW4gIgotICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbwotICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgotICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAogJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGZpbGUiIHwKKyRhc19lY2hvIFgiJGZpbGUiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMjQzMzUsNTEgKzE0MjQwLDY0NyBAQAogCSAgICBxCiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKLSAgICB7IGFzX2Rpcj0kZGlycGFydC8kZmRpcgotICBjYXNlICRhc19kaXIgaW4gIygKLSAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OwotICBlc2FjCi0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgJGFzX21rZGlyX3AgJiYgbWtkaXIgLXAgIiRhc19kaXIiOyB9IHx8IHsKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIDo7IGRvCi0gICAgICBjYXNlICRhc19kaXIgaW4gIygKLSAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKLSAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7Ci0gICAgICBlc2FjCi0gICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyOyBhc19mbl9ta2Rpcl9wCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCiAgICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLSAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgotICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgogICBkb25lCi1kb25lCit9CisgOzsKKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKworIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0iIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCitEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKworIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWC4KK05NRURJVD0kbHRfTk1FRElUCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KK0xJUE89JGx0X0xJUE8KKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KK09UT09MPSRsdF9PVE9PTAorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40LgorT1RPT0w2ND0kbHRfT1RPT0w2NAorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0kbGliZXh0CisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0kbHRfc2hyZXh0X2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSRsdF92YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaworCisjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIGNhc2UgJHhzaV9zaGVsbCBpbgorICB5ZXMpCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorfQorCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKyAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgZXNhYworfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KK30KKworX0xUX0VPRgorICAgIDs7CisgICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKyAgICAgICAgICAgfCAkWHNlZCAtZSAicyVeJHsxfSUlIiAtZSAicyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfQorCisjIHNlZCBzY3JpcHRzOgorbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKK215X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW14uXSokLy5sby8nYAorfQorCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9CisKK19MVF9FT0YKK2VzYWMKKworY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMSs9XCQyIgorfQorX0xUX0VPRgorICAgIDs7CisgICopCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJDE9XCQkMVwkMiIKK30KKworX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCisgIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCiAgOzsKICAgICAiaW5jbHVkZSI6QykgdGVzdCAtZCBpbmNsdWRlIHx8IG1rZGlyIGluY2x1ZGUgOzsKICAgICAic3JjIjpDKQpAQCAtMjQzOTEsMTEgKzE0ODkyLDEzIEBACiBkb25lICMgZm9yIGFjX3RhZwogCiAKLXsgKGV4aXQgMCk7IGV4aXQgMDsgfQorYXNfZm5fZXhpdCAwCiBfQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQogCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKwogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCiAjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KQEAgLTI0NDE1LDYgKzE0OTE4LDEwIEBACiAgIGV4ZWMgNT4+Y29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgJD8KK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KIGZpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKaW5kZXggOTQ3MDUzNi4uODdjNjNlMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKQEAgLTMsOSArMyw5IEBACiAjIGZpbGUgZnJvbSBsaWJmZmkgLSBzbGlnaHRseSBwYXRjaGVkIGZvciBjdHlwZXMKICMKIAotQUNfUFJFUkVRKDIuNTkpCitBQ19QUkVSRVEoMi42MykKIAotQUNfSU5JVChbbGliZmZpXSwgWzMuMC41XSwgW2h0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWxdKQorQUNfSU5JVChbbGliZmZpXSwgWzMuMC4xMHJjMF0sIFtodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sXSkKIEFDX0NPTkZJR19IRUFERVJTKFtmZmljb25maWcuaF0pCiAKIEFDX0NBTk9OSUNBTF9TWVNURU0KQEAgLTIzLDYgKzIzLDcgQEAKIG00X3JlbmFtZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLFtyZWFsX1BSRUNJT1VTXSkKIG00X2RlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLFtdKQogQUNfUFJPR19DQworbTRfdW5kZWZpbmUoW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKIG00X3JlbmFtZShbcmVhbF9QUkVDSU9VU10sW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKIAogQUNfU1VCU1QoQ0ZMQUdTKQpAQCAtMzAsNiArMzEsNyBAQAogQU1fUFJPR19BUwogQU1fUFJPR19DQ19DX08KIEFDX1BST0dfTElCVE9PTAorQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQogCiBBTV9NQUlOVEFJTkVSX01PREUKIApAQCAtNTIsMTAgKzU0LDE4IEBACiAJVEFSR0VUPUFSTTsgVEFSR0VURElSPWFybQogCTs7CiAKLSAgYW1kNjQtKi1mcmVlYnNkKikKKyAgYW1kNjQtKi1mcmVlYnNkKiB8IGFtZDY0LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgogICAJOzsKIAorICBhbWQ2NC0qLWZyZWVic2QqKQorCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKwk7OworCisgIGF2cjMyKi0qLSopCisJVEFSR0VUPUFWUjMyOyBUQVJHRVRESVI9YXZyMzIKKwk7OworCiAgIGNyaXMtKi0qKQogCVRBUkdFVD1MSUJGRklfQ1JJUzsgVEFSR0VURElSPWNyaXMKIAk7OwpAQCAtNzQsMTEgKzg0LDEzIEBACiAJVEFSR0VUPVBBX0hQVVg7IFRBUkdFVERJUj1wYQogCTs7CiAKLSAgaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqKQorICBpPzg2LSotZnJlZWJzZCogfCBpPzg2LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl9GUkVFQlNEOyBUQVJHRVRESVI9eDg2CiAJOzsKICAgaT84Ni13aW4zMiogfCBpPzg2LSotY3lnd2luKiB8IGk/ODYtKi1taW5ndyopCiAJVEFSR0VUPVg4Nl9XSU4zMjsgVEFSR0VURElSPXg4NgorCSMgQWxsIG1pbmd3L2N5Z3dpbi93aW4zMiBidWlsZHMgcmVxdWlyZSB0aGlzIGZvciBzaGFyZWRsaWIKKwlBTV9MVExERkxBR1M9Ii1uby11bmRlZmluZWQiCiAJOzsKICAgaT84Ni0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKQEAgLTEwOSw3ICsxMjEsOSBAQAogCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKICAgbWlwcyotKi1saW51eCopCi0JVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCisJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KKwlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogCTs7CiAKICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCkBAIC0xNDksMTQgKzE2MywxOCBAQAogICB4ODZfNjQtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAJOzsKKwogICB4ODZfNjQtKi1jeWd3aW4qIHwgeDg2XzY0LSotbWluZ3cqKQorCVRBUkdFVD1YODZfV0lONjQ7IFRBUkdFVERJUj14ODYKIAk7OworCiAgIHg4Nl82NC0qLSopCiAJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgogCTs7CiBlc2FjCiAKIEFDX1NVQlNUKEFNX1JVTlRFU1RGTEFHUykKK0FDX1NVQlNUKEFNX0xUTERGTEFHUykKIAogaWYgdGVzdCAkVEFSR0VURElSID0gdW5rbm93bjsgdGhlbgogICBBQ19NU0dfRVJST1IoWyJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC4iXSkKQEAgLTE2Nyw2ICsxODUsNyBAQAogQU1fQ09ORElUSU9OQUwoWDg2LCB0ZXN0IHgkVEFSR0VUID0geFg4NikKIEFNX0NPTkRJVElPTkFMKFg4Nl9GUkVFQlNELCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9GUkVFQlNEKQogQU1fQ09ORElUSU9OQUwoWDg2X1dJTjMyLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMikKK0FNX0NPTkRJVElPTkFMKFg4Nl9XSU42NCwgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQpCiBBTV9DT05ESVRJT05BTChYODZfREFSV0lOLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4pCiBBTV9DT05ESVRJT05BTChBTFBIQSwgdGVzdCB4JFRBUkdFVCA9IHhBTFBIQSkKIEFNX0NPTkRJVElPTkFMKElBNjQsIHRlc3QgeCRUQVJHRVQgPSB4SUE2NCkKQEAgLTE3Nyw2ICsxOTYsNyBAQAogQU1fQ09ORElUSU9OQUwoUE9XRVJQQ19EQVJXSU4sIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19EQVJXSU4pCiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19GUkVFQlNEKQogQU1fQ09ORElUSU9OQUwoQVJNLCB0ZXN0IHgkVEFSR0VUID0geEFSTSkKK0FNX0NPTkRJVElPTkFMKEFWUjMyLCB0ZXN0IHgkVEFSR0VUID0geEFWUjMyKQogQU1fQ09ORElUSU9OQUwoTElCRkZJX0NSSVMsIHRlc3QgeCRUQVJHRVQgPSB4TElCRkZJX0NSSVMpCiBBTV9DT05ESVRJT05BTChGUlYsIHRlc3QgeCRUQVJHRVQgPSB4RlJWKQogQU1fQ09ORElUSU9OQUwoUzM5MCwgdGVzdCB4JFRBUkdFVCA9IHhTMzkwKQpAQCAtMjUxLDYgKzI3MSwyOSBAQAogICAgIGZpCiBmaQogCitpZiB0ZXN0IHgkVEFSR0VUID0geFg4NiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFthc3NlbWJsZXIgc3VwcG9ydHMgcGMgcmVsYXRlZCByZWxvY3NdLAorCWxpYmZmaV9jdl9hc194ODZfcGNyZWwsIFsKKwlsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsPXllcworCWVjaG8gJy50ZXh0OyBmb286IG5vcDsgLmRhdGE7IC5sb25nIGZvby0uOyAudGV4dCcgPiBjb25mdGVzdC5zCisJaWYgJENDICRDRkxBR1MgLWMgY29uZnRlc3QucyAyPiYxIHwgZ3JlcCAtaSB3YXJuaW5nID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGxpYmZmaV9jdl9hc194ODZfcGNyZWw9bm8KKwlmaQorCV0pCisgICAgaWYgdGVzdCAieCRsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsIiA9IHh5ZXM7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9BU19YODZfUENSRUwsIDEsCisJCSAgW0RlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuXSkKKyAgICBmaQorZmkKKworY2FzZSAiJHRhcmdldCIgaW4KKyAgICAgKi1hcHBsZS1kYXJ3aW4xMCogfCAqLSotZnJlZWJzZCogfCAqLSotb3BlbmJzZCogfCAqLXBjLXNvbGFyaXMqKQorICAgICAgIEFDX0RFRklORShGRklfTU1BUF9FWEVDX1dSSVQsIDEsCisgICAgICAgICAgICAgICAgIFtDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJldmVydCB0bworICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIG1lYW5zXSkKKyAgICAgOzsKK2VzYWMKKwogQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seV0sCiAgICAgbGliZmZpX2N2X3JvX2VoX2ZyYW1lLCBbCiAJbGliZmZpX2N2X3JvX2VoX2ZyYW1lPW5vCkBAIC0zNjYsNyArNDA5LDcgQEAKIAogQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgpCiAKLUFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL2ZmaS5oKQorQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYykKIAogQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E1ZWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcApAQCAtMCwwICsxLDU4NCBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwNi0xMC0xNS4xOAorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCisjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKKyMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCisjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQorIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisjIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKKyAgICB0ciAnCisnICcgJyA+PiAkZGVwZmlsZQorICAgIGVjaG8gPj4gJGRlcGZpbGUKKworICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgPj4gJGRlcGZpbGUKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBzdHJpcHBlZD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXCguKlwpXC4uKiQvXDEvJ2AKKyAgdG1wZGVwZmlsZT0iJHN0cmlwcGVkLnUiCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgLVdjLC1NCisgIGVsc2UKKyAgICAiJEAiIC1NCisgIGZpCisgIHN0YXQ9JD8KKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gOgorICBlbHNlCisgICAgc3RyaXBwZWQ9YGVjaG8gIiRzdHJpcHBlZCIgfCBzZWQgJ3MsXi4qLywsJ2AKKyAgICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgb3V0bmFtZT0iJHN0cmlwcGVkLm8iCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgICAgc2VkIC1lICJzLF4kb3V0bmFtZTosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgIHNlZCAtZSAicyxeJG91dG5hbWU6IFwoLipcKSQsXDE6LCIgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2ljYykKKyAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCisgICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYworICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jCisgICMgICAgZm9vLm86IHN1Yi9mb28uaAorICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYworICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCisgICMgICAgc3ViL2Zvby5jOgorICAjICAgIHN1Yi9mb28uaDoKKyAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAjICAgICBzdWIvZm9vLmggLi4uIFwKKyAgIyAgICAgLi4uCisKKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCisgICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCisgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8CisgICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHAyKQorICAjIFRoZSAiaHAiIHN0YW56YSBhYm92ZSBkb2VzIG5vdCB3b3JrIHdpdGggYUNDIChDKyspIGFuZCBIUCdzIGlhNjQKKyAgIyBjb21waWxlcnMsIHdoaWNoIGhhdmUgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3JzLiAgVGhlIGNvcnJlY3Qgb3B0aW9uCisgICMgdG8gdXNlIHdpdGggdGhlc2UgaXMgK01ha2VkOyBpdCB3cml0ZXMgZGVwZW5kZW5jaWVzIHRvIGEgZmlsZSBuYW1lZAorICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CisgICMgaGFwcGVucyB0byBiZS4KKyAgIyBNdWNoIG9mIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgdHJ1NjQgY2FzZTsgc2VlIGNvbW1lbnRzIHRoZXJlLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5kCisgICAgIiRAIiAtV2MsK01ha2VkCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgIiRAIiArTWFrZWQKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCBgZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7OyBzL14gKi8vOyBzLyBcXCokLy87IHMvJC86LzsgcDt9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCisgICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKworICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCisgICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KKyAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCisgICAgICAjCisgICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KKyAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCisgICAgICAiJEAiIC1NRAorICAgZmkKKworICAgc3RhdD0kPworICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgICBlbHNlCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKKworICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgIGRvCisgICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICAgZG9uZQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8KKyAgZm9yIGFyZyBpbiAiJEAiOyBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PSJgZWNobyAkb2JqZWN0IHwgc2VkICdzL14uKlwuLy4vJ2AiCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8CisgICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3Zpc3VhbGNwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8sCisgICMgYmVjYXVzZSB3ZSBtdXN0IHVzZSAtbyB3aGVuIHJ1bm5pbmcgbGlidG9vbC4KKyAgIiRAIiB8fCBleGl0ICQ/CisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCisJc2V0IGZub3JkICIkQCIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICAqKQorCXNldCBmbm9yZCAiJEAiICIkYXJnIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjplY2hvICJgY3lncGF0aCAtdSBcXCJcMVxcImAiOnAnIHwgc29ydCB8IHVuaXEgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmE1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTViMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aQpAQCAtMCwwICsxLDU5OCBAQAorXGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCitAYyAlKipzdGFydCBvZiBoZWFkZXIKK0BzZXRmaWxlbmFtZSBsaWJmZmkuaW5mbworQHNldHRpdGxlIGxpYmZmaQorQHNldGNoYXB0ZXJuZXdwYWdlIG9mZgorQGMgJSoqZW5kIG9mIGhlYWRlcgorCitAYyBNZXJnZSB0aGUgc3RhbmRhcmQgaW5kZXhlcyBpbnRvIGEgc2luZ2xlIG9uZS4KK0BzeW5jb2RlaW5kZXggZm4gY3AKK0BzeW5jb2RlaW5kZXggdnIgY3AKK0BzeW5jb2RlaW5kZXgga3kgY3AKK0BzeW5jb2RlaW5kZXggcGcgY3AKK0BzeW5jb2RlaW5kZXggdHAgY3AKKworQGluY2x1ZGUgdmVyc2lvbi50ZXhpCisKK0Bjb3B5aW5nCisKK1RoaXMgbWFudWFsIGlzIGZvciBMaWJmZmksIGEgcG9ydGFibGUgZm9yZWlnbi1mdW5jdGlvbiBpbnRlcmZhY2UKK2xpYnJhcnkuCisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwOCwgMjAxMCBSZWQgSGF0LCBJbmMuCisKK0BxdW90YXRpb24KK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJycuCisKK0BlbmQgcXVvdGF0aW9uCitAZW5kIGNvcHlpbmcKKworQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogbGliZmZpOiAobGliZmZpKS4gICAgICAgICAgICAgUG9ydGFibGUgZm9yZWlnbi1mdW5jdGlvbiBpbnRlcmZhY2UgbGlicmFyeS4KK0BlbmQgZGlyZW50cnkKKworQHRpdGxlcGFnZQorQHRpdGxlIExpYmZmaQorQHBhZ2UKK0B2c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAZW5kIHRpdGxlcGFnZQorCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIGxpYmZmaQorCitAaW5zZXJ0Y29weWluZworCitAbWVudQorKiBJbnRyb2R1Y3Rpb246OiAgICAgICAgICAgICAgICBXaGF0IGlzIGxpYmZmaT8KKyogVXNpbmcgbGliZmZpOjogICAgICAgICAgICAgICAgSG93IHRvIHVzZSBsaWJmZmkuCisqIE1pc3NpbmcgRmVhdHVyZXM6OiAgICAgICAgICAgIFRoaW5ncyBsaWJmZmkgY2FuJ3QgZG8uCisqIEluZGV4OjogICAgICAgICAgICAgICAgICAgICAgIEluZGV4LgorQGVuZCBtZW51CisKK0BlbmQgaWZub3R0ZXgKKworCitAbm9kZSBJbnRyb2R1Y3Rpb24KK0BjaGFwdGVyIFdoYXQgaXMgbGliZmZpPworCitDb21waWxlcnMgZm9yIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2VzIGdlbmVyYXRlIGNvZGUgdGhhdCBmb2xsb3cgY2VydGFpbgorY29udmVudGlvbnMuICBUaGVzZSBjb252ZW50aW9ucyBhcmUgbmVjZXNzYXJ5LCBpbiBwYXJ0LCBmb3Igc2VwYXJhdGUKK2NvbXBpbGF0aW9uIHRvIHdvcmsuICBPbmUgc3VjaCBjb252ZW50aW9uIGlzIHRoZSBAZGZue2NhbGxpbmcKK2NvbnZlbnRpb259LiAgVGhlIGNhbGxpbmcgY29udmVudGlvbiBpcyBhIHNldCBvZiBhc3N1bXB0aW9ucyBtYWRlIGJ5Cit0aGUgY29tcGlsZXIgYWJvdXQgd2hlcmUgZnVuY3Rpb24gYXJndW1lbnRzIHdpbGwgYmUgZm91bmQgb24gZW50cnkgdG8KK2EgZnVuY3Rpb24uICBBIGNhbGxpbmcgY29udmVudGlvbiBhbHNvIHNwZWNpZmllcyB3aGVyZSB0aGUgcmV0dXJuCit2YWx1ZSBmb3IgYSBmdW5jdGlvbiBpcyBmb3VuZC4gIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWxzbworc29tZXRpbWVzIGNhbGxlZCB0aGUgQGRmbntBQkl9IG9yIEBkZm57QXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZX0uCitAY2luZGV4IGNhbGxpbmcgY29udmVudGlvbgorQGNpbmRleCBBQkkKK0BjaW5kZXggQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorCitTb21lIHByb2dyYW1zIG1heSBub3Qga25vdyBhdCB0aGUgdGltZSBvZiBjb21waWxhdGlvbiB3aGF0IGFyZ3VtZW50cworYXJlIHRvIGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uLiAgRm9yIGluc3RhbmNlLCBhbiBpbnRlcnByZXRlciBtYXkgYmUKK3RvbGQgYXQgcnVuLXRpbWUgYWJvdXQgdGhlIG51bWJlciBhbmQgdHlwZXMgb2YgYXJndW1lbnRzIHVzZWQgdG8gY2FsbAorYSBnaXZlbiBmdW5jdGlvbi4gIEBzYW1we0xpYmZmaX0gY2FuIGJlIHVzZWQgaW4gc3VjaCBwcm9ncmFtcyB0bworcHJvdmlkZSBhIGJyaWRnZSBmcm9tIHRoZSBpbnRlcnByZXRlciBwcm9ncmFtIHRvIGNvbXBpbGVkIGNvZGUuCisKK1RoZSBAc2FtcHtsaWJmZml9IGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWluZworaW50ZXJmYWNlIHRvIHZhcmlvdXMgY2FsbGluZyBjb252ZW50aW9ucy4gIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0bworY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuCit0aW1lLgorCitAYWNyb255bXtGRkl9IHN0YW5kcyBmb3IgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UuICBBIGZvcmVpZ24KK2Z1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgaW50ZXJmYWNlIHRoYXQgYWxsb3dzCitjb2RlIHdyaXR0ZW4gaW4gb25lIGxhbmd1YWdlIHRvIGNhbGwgY29kZSB3cml0dGVuIGluIGFub3RoZXIgbGFuZ3VhZ2UuCitUaGUgQHNhbXB7bGliZmZpfSBsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUKK2RlcGVuZGVudCBsYXllciBvZiBhIGZ1bGx5IGZlYXR1cmVkIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlLiAgQQorbGF5ZXIgbXVzdCBleGlzdCBhYm92ZSBAc2FtcHtsaWJmZml9IHRoYXQgaGFuZGxlcyB0eXBlIGNvbnZlcnNpb25zIGZvcgordmFsdWVzIHBhc3NlZCBiZXR3ZWVuIHRoZSB0d28gbGFuZ3VhZ2VzLgorQGNpbmRleCBGRkkKK0BjaW5kZXggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworCitAbm9kZSBVc2luZyBsaWJmZmkKK0BjaGFwdGVyIFVzaW5nIGxpYmZmaQorCitAbWVudQorKiBUaGUgQmFzaWNzOjogICAgICAgICAgICAgICAgICBUaGUgYmFzaWMgbGliZmZpIEFQSS4KKyogU2ltcGxlIEV4YW1wbGU6OiAgICAgICAgICAgICAgQSBzaW1wbGUgZXhhbXBsZS4KKyogVHlwZXM6OiAgICAgICAgICAgICAgICAgICAgICAgbGliZmZpIHR5cGUgZGVzY3JpcHRpb25zLgorKiBNdWx0aXBsZSBBQklzOjogICAgICAgICAgICAgICBEaWZmZXJlbnQgcGFzc2luZyBzdHlsZXMgb24gb25lIHBsYXRmb3JtLgorKiBUaGUgQ2xvc3VyZSBBUEk6OiAgICAgICAgICAgICBXcml0aW5nIGEgZ2VuZXJpYyBmdW5jdGlvbi4KKyogQ2xvc3VyZSBFeGFtcGxlOjogICAgICAgICAgICAgQSBjbG9zdXJlIGV4YW1wbGUuCitAZW5kIG1lbnUKKworCitAbm9kZSBUaGUgQmFzaWNzCitAc2VjdGlvbiBUaGUgQmFzaWNzCisKK0BzYW1we0xpYmZmaX0gYXNzdW1lcyB0aGF0IHlvdSBoYXZlIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24geW91IHdpc2gKK3RvIGNhbGwgYW5kIHRoYXQgeW91IGtub3cgdGhlIG51bWJlciBhbmQgdHlwZXMgb2YgYXJndW1lbnRzIHRvIHBhc3MKK2l0LCBhcyB3ZWxsIGFzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uCisKK1RoZSBmaXJzdCB0aGluZyB5b3UgbXVzdCBkbyBpcyBjcmVhdGUgYW4gQGNvZGV7ZmZpX2NpZn0gb2JqZWN0IHRoYXQKK21hdGNoZXMgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24geW91IHdpc2ggdG8gY2FsbC4gIFRoaXMgaXMgYQorc2VwYXJhdGUgc3RlcCBiZWNhdXNlIGl0IGlzIGNvbW1vbiB0byBtYWtlIG11bHRpcGxlIGNhbGxzIHVzaW5nIGEKK3NpbmdsZSBAY29kZXtmZmlfY2lmfS4gIFRoZSBAZGZue2NpZn0gaW4gQGNvZGV7ZmZpX2NpZn0gc3RhbmRzIGZvcgorQ2FsbCBJbnRlckZhY2UuICBUbyBwcmVwYXJlIGEgY2FsbCBpbnRlcmZhY2Ugb2JqZWN0LCB1c2UgdGhlIGZ1bmN0aW9uCitAY29kZXtmZmlfcHJlcF9jaWZ9LgorQGNpbmRleCBjaWYKKworQGZpbmRleCBmZmlfcHJlcF9jaWYKK0BkZWZ1biBmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZiAoZmZpX2NpZiAqQHZhcntjaWZ9LCBmZmlfYWJpIEB2YXJ7YWJpfSwgdW5zaWduZWQgaW50IEB2YXJ7bmFyZ3N9LCBmZmlfdHlwZSAqQHZhcntydHlwZX0sIGZmaV90eXBlICoqQHZhcnthcmd0eXBlc30pCitUaGlzIGluaXRpYWxpemVzIEB2YXJ7Y2lmfSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisKK0B2YXJ7YWJpfSBpcyB0aGUgQUJJIHRvIHVzZTsgbm9ybWFsbHkgQGNvZGV7RkZJX0RFRkFVTFRfQUJJfSBpcyB3aGF0Cit5b3Ugd2FudC4gIEByZWZ7TXVsdGlwbGUgQUJJc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0B2YXJ7bmFyZ3N9IGlzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgdGhpcyBmdW5jdGlvbiBhY2NlcHRzLgorQHNhbXB7bGliZmZpfSBkb2VzIG5vdCB5ZXQgaGFuZGxlIHZhcmFyZ3MgZnVuY3Rpb25zOyBzZWUgQHJlZntNaXNzaW5nCitGZWF0dXJlc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0B2YXJ7cnR5cGV9IGlzIGEgcG9pbnRlciB0byBhbiBAY29kZXtmZmlfdHlwZX0gc3RydWN0dXJlIHRoYXQKK2Rlc2NyaWJlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLiAgQHhyZWZ7VHlwZXN9LgorCitAdmFye2FyZ3R5cGVzfSBpcyBhIHZlY3RvciBvZiBAY29kZXtmZmlfdHlwZX0gcG9pbnRlcnMuCitAdmFye2FyZ3R5cGVzfSBtdXN0IGhhdmUgQHZhcntuYXJnc30gZWxlbWVudHMuICBJZiBAdmFye25hcmdzfSBpcyAwLAordGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkLgorCitAY29kZXtmZmlfcHJlcF9jaWZ9IHJldHVybnMgYSBAY29kZXtsaWJmZml9IHN0YXR1cyBjb2RlLCBvZiB0eXBlCitAY29kZXtmZmlfc3RhdHVzfS4gIFRoaXMgd2lsbCBiZSBlaXRoZXIgQGNvZGV7RkZJX09LfSBpZiBldmVyeXRoaW5nCit3b3JrZWQgcHJvcGVybHk7IEBjb2Rle0ZGSV9CQURfVFlQRURFRn0gaWYgb25lIG9mIHRoZSBAY29kZXtmZmlfdHlwZX0KK29iamVjdHMgaXMgaW5jb3JyZWN0OyBvciBAY29kZXtGRklfQkFEX0FCSX0gaWYgdGhlIEB2YXJ7YWJpfSBwYXJhbWV0ZXIKK2lzIGludmFsaWQuCitAZW5kIGRlZnVuCisKKworVG8gY2FsbCBhIGZ1bmN0aW9uIHVzaW5nIGFuIGluaXRpYWxpemVkIEBjb2Rle2ZmaV9jaWZ9LCB1c2UgdGhlCitAY29kZXtmZmlfY2FsbH0gZnVuY3Rpb246CisKK0BmaW5kZXggZmZpX2NhbGwKK0BkZWZ1biB2b2lkIGZmaV9jYWxsIChmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKkB2YXJ7Zm59LCB2b2lkICpAdmFye3J2YWx1ZX0sIHZvaWQgKipAdmFye2F2YWx1ZXN9KQorVGhpcyBjYWxscyB0aGUgZnVuY3Rpb24gQHZhcntmbn0gYWNjb3JkaW5nIHRvIHRoZSBkZXNjcmlwdGlvbiBnaXZlbiBpbgorQHZhcntjaWZ9LiAgQHZhcntjaWZ9IG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlcGFyZWQgdXNpbmcKK0Bjb2Rle2ZmaV9wcmVwX2NpZn0uCisKK0B2YXJ7cnZhbHVlfSBpcyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBtZW1vcnkgdGhhdCB3aWxsIGhvbGQgdGhlCityZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGlzIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlCityZXN1bHQgYW5kIG11c3QgYmUgc3VpdGFibHkgYWxpZ25lZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5Cit0byBlbnN1cmUgdGhpcy4gIElmIEB2YXJ7Y2lmfSBkZWNsYXJlcyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zCitAY29kZXt2b2lkfSAodXNpbmcgQGNvZGV7ZmZpX3R5cGVfdm9pZH0pLCB0aGVuIEB2YXJ7cnZhbHVlfSBpcworaWdub3JlZC4gIElmIEB2YXJ7cnZhbHVlfSBpcyBAc2FtcHtOVUxMfSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCitkaXNjYXJkZWQuCisKK0B2YXJ7YXZhbHVlc30gaXMgYSB2ZWN0b3Igb2YgQGNvZGV7dm9pZCAqfSBwb2ludGVycyB0aGF0IHBvaW50IHRvIHRoZQorbWVtb3J5IGxvY2F0aW9ucyBob2xkaW5nIHRoZSBhcmd1bWVudCB2YWx1ZXMgZm9yIGEgY2FsbC4gIElmIEB2YXJ7Y2lmfQorZGVjbGFyZXMgdGhhdCB0aGUgZnVuY3Rpb24gaGFzIG5vIGFyZ3VtZW50cyAoaS5lLiwgQHZhcntuYXJnc30gd2FzIDApLAordGhlbiBAdmFye2F2YWx1ZXN9IGlzIGlnbm9yZWQuCitAZW5kIGRlZnVuCisKKworQG5vZGUgU2ltcGxlIEV4YW1wbGUKK0BzZWN0aW9uIFNpbXBsZSBFeGFtcGxlCisKK0hlcmUgaXMgYSB0cml2aWFsIGV4YW1wbGUgdGhhdCBjYWxscyBAY29kZXtwdXRzfSBhIGZldyB0aW1lcy4KKworQGV4YW1wbGUKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZmaS5oPgorCitpbnQgbWFpbigpCitAeworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbMV07CisgIHZvaWQgKnZhbHVlc1sxXTsKKyAgY2hhciAqczsKKyAgaW50IHJjOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgaW5mbyB2ZWN0b3JzICovICAgIAorICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICZzOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIGlmIChmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisgICAgQHsKKyAgICAgIHMgPSAiSGVsbG8gV29ybGQhIjsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIHB1dHMsICZyYywgdmFsdWVzKTsKKyAgICAgIC8qIHJjIG5vdyBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIHB1dHMgKi8KKyAgICAgIAorICAgICAgLyogdmFsdWVzIGhvbGRzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24ncyBhcmcsIHNvIHRvIAorICAgICAgICAgY2FsbCBwdXRzKCkgYWdhaW4gYWxsIHdlIG5lZWQgdG8gZG8gaXMgY2hhbmdlIHRoZSAKKyAgICAgICAgIHZhbHVlIG9mIHMgKi8KKyAgICAgIHMgPSAiVGhpcyBpcyBjb29sISI7CisgICAgICBmZmlfY2FsbCgmY2lmLCBwdXRzLCAmcmMsIHZhbHVlcyk7CisgICAgQH0KKyAgCisgIHJldHVybiAwOworQH0KK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIFR5cGVzCitAc2VjdGlvbiBUeXBlcworCitAbWVudQorKiBQcmltaXRpdmUgVHlwZXM6OiAgICAgICAgICAgICBCdWlsdC1pbiB0eXBlcy4KKyogU3RydWN0dXJlczo6ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlIHR5cGVzLgorKiBUeXBlIEV4YW1wbGU6OiAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgdHlwZSBleGFtcGxlLgorQGVuZCBtZW51CisKK0Bub2RlIFByaW1pdGl2ZSBUeXBlcworQHN1YnNlY3Rpb24gUHJpbWl0aXZlIFR5cGVzCisKK0Bjb2Rle0xpYmZmaX0gcHJvdmlkZXMgYSBudW1iZXIgb2YgYnVpbHQtaW4gdHlwZSBkZXNjcmlwdG9ycyB0aGF0IGNhbgorYmUgdXNlZCB0byBkZXNjcmliZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIGZmaV90eXBlX3ZvaWQKK0B0aW5kZXggZmZpX3R5cGVfdm9pZAorVGhlIHR5cGUgQGNvZGV7dm9pZH0uICBUaGlzIGNhbm5vdCBiZSB1c2VkIGZvciBhcmd1bWVudCB0eXBlcywgb25seQorZm9yIHJldHVybiB2YWx1ZXMuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQ4CitAdGluZGV4IGZmaV90eXBlX3VpbnQ4CitBbiB1bnNpZ25lZCwgOC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50OAorQHRpbmRleCBmZmlfdHlwZV9zaW50OAorQSBzaWduZWQsIDgtYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWludDE2CitAdGluZGV4IGZmaV90eXBlX3VpbnQxNgorQW4gdW5zaWduZWQsIDE2LWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NpbnQxNgorQHRpbmRleCBmZmlfdHlwZV9zaW50MTYKK0Egc2lnbmVkLCAxNi1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV91aW50MzIKK0B0aW5kZXggZmZpX3R5cGVfdWludDMyCitBbiB1bnNpZ25lZCwgMzItYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc2ludDMyCitAdGluZGV4IGZmaV90eXBlX3NpbnQzMgorQSBzaWduZWQsIDMyLWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQ2NAorQHRpbmRleCBmZmlfdHlwZV91aW50NjQKK0FuIHVuc2lnbmVkLCA2NC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50NjQKK0B0aW5kZXggZmZpX3R5cGVfc2ludDY0CitBIHNpZ25lZCwgNjQtYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfZmxvYXQKK0B0aW5kZXggZmZpX3R5cGVfZmxvYXQKK1RoZSBDIEBjb2Rle2Zsb2F0fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9kb3VibGUKK0B0aW5kZXggZmZpX3R5cGVfZG91YmxlCitUaGUgQyBAY29kZXtkb3VibGV9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VjaGFyCitAdGluZGV4IGZmaV90eXBlX3VjaGFyCitUaGUgQyBAY29kZXt1bnNpZ25lZCBjaGFyfSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zY2hhcgorQHRpbmRleCBmZmlfdHlwZV9zY2hhcgorVGhlIEMgQGNvZGV7c2lnbmVkIGNoYXJ9IHR5cGUuICAoTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBhbiBleGFjdAorZXF1aXZhbGVudCB0byB0aGUgQyBAY29kZXtjaGFyfSB0eXBlIGluIEBjb2Rle2xpYmZmaX07IG9yZGluYXJpbHkgeW91CitzaG91bGQgZWl0aGVyIHVzZSBAY29kZXtmZmlfdHlwZV9zY2hhcn0gb3IgQGNvZGV7ZmZpX3R5cGVfdWNoYXJ9CitkZXBlbmRpbmcgb24gd2hldGhlciBAY29kZXtjaGFyfSBpcyBzaWduZWQuKQorCitAaXRlbSBmZmlfdHlwZV91c2hvcnQKK0B0aW5kZXggZmZpX3R5cGVfdXNob3J0CitUaGUgQyBAY29kZXt1bnNpZ25lZCBzaG9ydH0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc3Nob3J0CitAdGluZGV4IGZmaV90eXBlX3NzaG9ydAorVGhlIEMgQGNvZGV7c2hvcnR9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQKK0B0aW5kZXggZmZpX3R5cGVfdWludAorVGhlIEMgQGNvZGV7dW5zaWduZWQgaW50fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50CitAdGluZGV4IGZmaV90eXBlX3NpbnQKK1RoZSBDIEBjb2Rle2ludH0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWxvbmcKK0B0aW5kZXggZmZpX3R5cGVfdWxvbmcKK1RoZSBDIEBjb2Rle3Vuc2lnbmVkIGxvbmd9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3Nsb25nCitAdGluZGV4IGZmaV90eXBlX3Nsb25nCitUaGUgQyBAY29kZXtsb25nfSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9sb25nZG91YmxlCitAdGluZGV4IGZmaV90eXBlX2xvbmdkb3VibGUKK09uIHBsYXRmb3JtcyB0aGF0IGhhdmUgYSBDIEBjb2Rle2xvbmcgZG91YmxlfSB0eXBlLCB0aGlzIGlzIGRlZmluZWQuCitPbiBvdGhlciBwbGF0Zm9ybXMsIGl0IGlzIG5vdC4KKworQGl0ZW0gZmZpX3R5cGVfcG9pbnRlcgorQHRpbmRleCBmZmlfdHlwZV9wb2ludGVyCitBIGdlbmVyaWMgQGNvZGV7dm9pZCAqfSBwb2ludGVyLiAgWW91IHNob3VsZCB1c2UgdGhpcyBmb3IgYWxsCitwb2ludGVycywgcmVnYXJkbGVzcyBvZiB0aGVpciByZWFsIHR5cGUuCitAZW5kIHRhYmxlCisKK0VhY2ggb2YgdGhlc2UgaXMgb2YgdHlwZSBAY29kZXtmZmlfdHlwZX0sIHNvIHlvdSBtdXN0IHRha2UgdGhlIGFkZHJlc3MKK3doZW4gcGFzc2luZyB0byBAY29kZXtmZmlfcHJlcF9jaWZ9LgorCisKK0Bub2RlIFN0cnVjdHVyZXMKK0BzdWJzZWN0aW9uIFN0cnVjdHVyZXMKKworQWx0aG91Z2ggQHNhbXB7bGliZmZpfSBoYXMgbm8gc3BlY2lhbCBzdXBwb3J0IGZvciB1bmlvbnMgb3IKK2JpdC1maWVsZHMsIGl0IGlzIHBlcmZlY3RseSBoYXBweSBwYXNzaW5nIHN0cnVjdHVyZXMgYmFjayBhbmQgZm9ydGguCitZb3UgbXVzdCBmaXJzdCBkZXNjcmliZSB0aGUgc3RydWN0dXJlIHRvIEBzYW1we2xpYmZmaX0gYnkgY3JlYXRpbmcgYQorbmV3IEBjb2Rle2ZmaV90eXBlfSBvYmplY3QgZm9yIGl0LgorCitAdGluZGV4IGZmaV90eXBlCitAZGVmdHAgZmZpX3R5cGUKK1RoZSBAY29kZXtmZmlfdHlwZX0gaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKK0B0YWJsZSBAY29kZQorQGl0ZW0gc2l6ZV90IHNpemUKK1RoaXMgaXMgc2V0IGJ5IEBjb2Rle2xpYmZmaX07IHlvdSBzaG91bGQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvLgorCitAaXRlbSB1bnNpZ25lZCBzaG9ydCBhbGlnbm1lbnQKK1RoaXMgaXMgc2V0IGJ5IEBjb2Rle2xpYmZmaX07IHlvdSBzaG91bGQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvLgorCitAaXRlbSB1bnNpZ25lZCBzaG9ydCB0eXBlCitGb3IgYSBzdHJ1Y3R1cmUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byBAY29kZXtGRklfVFlQRV9TVFJVQ1R9LgorCitAaXRlbSBmZmlfdHlwZSAqKmVsZW1lbnRzCitUaGlzIGlzIGEgQHNhbXB7TlVMTH0tdGVybWluYXRlZCBhcnJheSBvZiBwb2ludGVycyB0byBAY29kZXtmZmlfdHlwZX0KK29iamVjdHMuICBUaGVyZSBpcyBvbmUgZWxlbWVudCBwZXIgZmllbGQgb2YgdGhlIHN0cnVjdC4KK0BlbmQgdGFibGUKK0BlbmQgZGVmdHAKKworCitAbm9kZSBUeXBlIEV4YW1wbGUKK0BzdWJzZWN0aW9uIFR5cGUgRXhhbXBsZQorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgaW5pdGlhbGl6ZXMgYSBAY29kZXtmZmlfdHlwZX0gb2JqZWN0CityZXByZXNlbnRpbmcgdGhlIEBjb2Rle3RtfSBzdHJ1Y3QgZnJvbSBMaW51eCdzIEBmaWxle3RpbWUuaH0uCisKK0hlcmUgaXMgaG93IHRoZSBzdHJ1Y3QgaXMgZGVmaW5lZDoKKworQGV4YW1wbGUKK3N0cnVjdCB0bSBAeworICAgIGludCB0bV9zZWM7CisgICAgaW50IHRtX21pbjsKKyAgICBpbnQgdG1faG91cjsKKyAgICBpbnQgdG1fbWRheTsKKyAgICBpbnQgdG1fbW9uOworICAgIGludCB0bV95ZWFyOworICAgIGludCB0bV93ZGF5OworICAgIGludCB0bV95ZGF5OworICAgIGludCB0bV9pc2RzdDsKKyAgICAvKiBUaG9zZSBhcmUgZm9yIGZ1dHVyZSB1c2UuICovCisgICAgbG9uZyBpbnQgX190bV9nbXRvZmZfXzsKKyAgICBfX2NvbnN0IGNoYXIgKl9fdG1fem9uZV9fOworQH07CitAZW5kIGV4YW1wbGUKKworSGVyZSBpcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlIHRvIGRlc2NyaWJlIHRoaXMgc3RydWN0IHRvCitAY29kZXtsaWJmZml9OgorCitAZXhhbXBsZQorICAgIEB7CisgICAgICBmZmlfdHlwZSB0bV90eXBlOworICAgICAgZmZpX3R5cGUgKnRtX3R5cGVfZWxlbWVudHNbMTJdOworICAgICAgaW50IGk7CisKKyAgICAgIHRtX3R5cGUuc2l6ZSA9IHRtX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgICAgIHRtX3R5cGUuZWxlbWVudHMgPSAmdG1fdHlwZV9lbGVtZW50czsKKyAgICAKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgICAgdG1fdHlwZV9lbGVtZW50c1tpXSA9ICZmZmlfdHlwZV9zaW50OworCisgICAgICB0bV90eXBlX2VsZW1lbnRzWzldID0gJmZmaV90eXBlX3Nsb25nOworICAgICAgdG1fdHlwZV9lbGVtZW50c1sxMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKyAgICAgIHRtX3R5cGVfZWxlbWVudHNbMTFdID0gTlVMTDsKKworICAgICAgLyogdG1fdHlwZSBjYW4gbm93IGJlIHVzZWQgdG8gcmVwcmVzZW50IHRtIGFyZ3VtZW50IHR5cGVzIGFuZAorCSByZXR1cm4gdHlwZXMgZm9yIGZmaV9wcmVwX2NpZigpICovCisgICAgQH0KK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIE11bHRpcGxlIEFCSXMKK0BzZWN0aW9uIE11bHRpcGxlIEFCSXMKKworQSBnaXZlbiBwbGF0Zm9ybSBtYXkgcHJvdmlkZSBtdWx0aXBsZSBkaWZmZXJlbnQgQUJJcyBhdCBvbmNlLiAgRm9yCitpbnN0YW5jZSwgdGhlIHg4NiBwbGF0Zm9ybSBoYXMgYm90aCBAc2FtcHtzdGRjYWxsfSBhbmQgQHNhbXB7ZmFzdGNhbGx9CitmdW5jdGlvbnMuCisKK0Bjb2Rle2xpYmZmaX0gcHJvdmlkZXMgc29tZSBzdXBwb3J0IGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBpcworbmVjZXNzYXJpbHkgcGxhdGZvcm0tc3BlY2lmaWMuCisKK0BjIEZJWE1FOiBkb2N1bWVudCB0aGUgcGxhdGZvcm1zCisKK0Bub2RlIFRoZSBDbG9zdXJlIEFQSQorQHNlY3Rpb24gVGhlIENsb3N1cmUgQVBJCisKK0Bjb2Rle2xpYmZmaX0gYWxzbyBwcm92aWRlcyBhIHdheSB0byB3cml0ZSBhIGdlbmVyaWMgZnVuY3Rpb24gLS0gYQorZnVuY3Rpb24gdGhhdCBjYW4gYWNjZXB0IGFuZCBkZWNvZGUgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cy4KK1RoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHdyaXRpbmcgYW4gaW50ZXJwcmV0ZXIsIG9yIHRvIHByb3ZpZGUgd3JhcHBlcnMKK2ZvciBhcmJpdHJhcnkgZnVuY3Rpb25zLgorCitUaGlzIGZhY2lsaXR5IGlzIGNhbGxlZCB0aGUgQGRmbntjbG9zdXJlIEFQSX0uICBDbG9zdXJlcyBhcmUgbm90CitzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtczsgeW91IGNhbiBjaGVjayB0aGUgQGNvZGV7RkZJX0NMT1NVUkVTfQorZGVmaW5lIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudAorcGxhdGZvcm0uCitAY2luZGV4IGNsb3N1cmVzCitAY2luZGV4IGNsb3N1cmUgQVBJCitAZmluZGV4IEZGSV9DTE9TVVJFUworCitCZWNhdXNlIGNsb3N1cmVzIHdvcmsgYnkgYXNzZW1ibGluZyBhIHRpbnkgZnVuY3Rpb24gYXQgcnVudGltZSwgdGhleQorcmVxdWlyZSBzcGVjaWFsIGFsbG9jYXRpb24gb24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBhIG5vbi1leGVjdXRhYmxlCitoZWFwLiAgTWVtb3J5IG1hbmFnZW1lbnQgZm9yIGNsb3N1cmVzIGlzIGhhbmRsZWQgYnkgYSBwYWlyIG9mCitmdW5jdGlvbnM6CisKK0BmaW5kZXggZmZpX2Nsb3N1cmVfYWxsb2NhCitAZGVmdW4gdm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBAdmFye3NpemV9LCB2b2lkICoqQHZhcntjb2RlfSkKK0FsbG9jYXRlIGEgY2h1bmsgb2YgbWVtb3J5IGhvbGRpbmcgQHZhcntzaXplfSBieXRlcy4gIFRoaXMgcmV0dXJucyBhCitwb2ludGVyIHRvIHRoZSB3cml0YWJsZSBhZGRyZXNzLCBhbmQgc2V0cyAqQHZhcntjb2RlfSB0byB0aGUKK2NvcnJlc3BvbmRpbmcgZXhlY3V0YWJsZSBhZGRyZXNzLgorCitAdmFye3NpemV9IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGhvbGQgYSBAY29kZXtmZmlfY2xvc3VyZX0gb2JqZWN0LgorQGVuZCBkZWZ1bgorCitAZmluZGV4IGZmaV9jbG9zdXJlX2ZyZWUKK0BkZWZ1biB2b2lkIGZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQgKkB2YXJ7d3JpdGFibGV9KQorRnJlZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIEBjb2Rle2ZmaV9jbG9zdXJlX2FsbG9jfS4gIFRoZSBhcmd1bWVudCBpcwordGhlIHdyaXRhYmxlIGFkZHJlc3MgdGhhdCB3YXMgcmV0dXJuZWQuCitAZW5kIGRlZnVuCisKKworT25jZSB5b3UgaGF2ZSBhbGxvY2F0ZWQgdGhlIG1lbW9yeSBmb3IgYSBjbG9zdXJlLCB5b3UgbXVzdCBjb25zdHJ1Y3QgYQorQGNvZGV7ZmZpX2NpZn0gZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIEZpbmFsbHkgeW91IGNhbiBwcmVwYXJlCit0aGUgY2xvc3VyZSBmdW5jdGlvbjoKKworQGZpbmRleCBmZmlfcHJlcF9jbG9zdXJlX2xvYworQGRlZnVuIGZmaV9zdGF0dXMgZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICpAdmFye2Nsb3N1cmV9LCBmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKCpAdmFye2Z1bn0pIChmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKkB2YXJ7cmV0fSwgdm9pZCAqKkB2YXJ7YXJnc30sIHZvaWQgKkB2YXJ7dXNlcl9kYXRhfSksIHZvaWQgKkB2YXJ7dXNlcl9kYXRhfSwgdm9pZCAqQHZhcntjb2RlbG9jfSkKK1ByZXBhcmUgYSBjbG9zdXJlIGZ1bmN0aW9uLgorCitAdmFye2Nsb3N1cmV9IGlzIHRoZSBhZGRyZXNzIG9mIGEgQGNvZGV7ZmZpX2Nsb3N1cmV9IG9iamVjdDsgdGhpcyBpcwordGhlIHdyaXRhYmxlIGFkZHJlc3MgcmV0dXJuZWQgYnkgQGNvZGV7ZmZpX2Nsb3N1cmVfYWxsb2N9LgorCitAdmFye2NpZn0gaXMgdGhlIEBjb2Rle2ZmaV9jaWZ9IGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisKK0B2YXJ7dXNlcl9kYXRhfSBpcyBhbiBhcmJpdHJhcnkgZGF0dW0gdGhhdCBpcyBwYXNzZWQsIHVuaW50ZXJwcmV0ZWQsCit0byB5b3VyIGNsb3N1cmUgZnVuY3Rpb24uCisKK0B2YXJ7Y29kZWxvY30gaXMgdGhlIGV4ZWN1dGFibGUgYWRkcmVzcyByZXR1cm5lZCBieQorQGNvZGV7ZmZpX2Nsb3N1cmVfYWxsb2N9LgorCitAdmFye2Z1bn0gaXMgdGhlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGNsb3N1cmUgaXMKK2ludm9rZWQuICBJdCBpcyBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnRzOgorQHRhYmxlIEB2YXIKK0BpdGVtIGNpZgorVGhlIEBjb2Rle2ZmaV9jaWZ9IHBhc3NlZCB0byBAY29kZXtmZmlfcHJlcF9jbG9zdXJlX2xvY30uCisKK0BpdGVtIHJldAorQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgdXNlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLgorQHZhcntmdW59IG11c3QgZmlsbCB0aGlzLCB1bmxlc3MgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHJldHVybmluZworQGNvZGV7dm9pZH0uCitAYyBGSVhNRTogaXMgdGhpcyBOVUxMIGZvciB2b2lkLXJldHVybmluZyBmdW5jdGlvbnM/CisKK0BpdGVtIGFyZ3MKK0EgdmVjdG9yIG9mIHBvaW50ZXJzIHRvIG1lbW9yeSBob2xkaW5nIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLgorCitAaXRlbSB1c2VyX2RhdGEKK1RoZSBzYW1lIEB2YXJ7dXNlcl9kYXRhfSB0aGF0IHdhcyBwYXNzZWQgdG8KK0Bjb2Rle2ZmaV9wcmVwX2Nsb3N1cmVfbG9jfS4KK0BlbmQgdGFibGUKKworQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZV9sb2N9IHdpbGwgcmV0dXJuIEBjb2Rle0ZGSV9PS30gaWYgZXZlcnl0aGluZword2VudCBvaywgYW5kIHNvbWV0aGluZyBlbHNlIG9uIGVycm9yLgorQGMgRklYTUU6IHdoYXQ/CisKK0FmdGVyIGNhbGxpbmcgQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZV9sb2N9LCB5b3UgY2FuIGNhc3QgQHZhcntjb2RlbG9jfQordG8gdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXItdG8tZnVuY3Rpb24gdHlwZS4KK0BlbmQgZGVmdW4KKworWW91IG1heSBzZWUgb2xkIGNvZGUgcmVmZXJyaW5nIHRvIEBjb2Rle2ZmaV9wcmVwX2Nsb3N1cmV9LiAgVGhpcworZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgYXMgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmVlZCBmb3Igc2VwYXJhdGUKK3dyaXRhYmxlIGFuZCBleGVjdXRhYmxlIGFkZHJlc3Nlcy4KKworQG5vZGUgQ2xvc3VyZSBFeGFtcGxlCitAc2VjdGlvbiBDbG9zdXJlIEV4YW1wbGUKKworQSB0cml2aWFsIGV4YW1wbGUgdGhhdCBjcmVhdGVzIGEgbmV3IEBjb2Rle3B1dHN9IGJ5IGJpbmRpbmcgCitAY29kZXtmcHV0c30gd2l0aCBAY29kZXtzdGRpbn0uCisKK0BleGFtcGxlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworLyogQWN0cyBsaWtlIHB1dHMgd2l0aCB0aGUgZmlsZSBnaXZlbiBhdCB0aW1lIG9mIGVuY2xvc3VyZS4gKi8KK3ZvaWQgcHV0c19iaW5kaW5nKGZmaV9jaWYgKmNpZiwgdW5zaWduZWQgaW50ICpyZXQsIHZvaWQqIGFyZ3NbXSwgCisgICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0pCitAeworICAqcmV0ID0gZnB1dHMoKihjaGFyICoqKWFyZ3NbMF0sIHN0cmVhbSk7CitAfQorCitpbnQgbWFpbigpCitAeworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbMV07CisgIGZmaV9jbG9zdXJlICpjbG9zdXJlOworCisgIGludCAoKmJvdW5kX3B1dHMpKGNoYXIgKik7CisgIGludCByYzsKKyAgCisgIC8qIEFsbG9jYXRlIGNsb3N1cmUgYW5kIGJvdW5kX3B1dHMgKi8KKyAgY2xvc3VyZSA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZib3VuZF9wdXRzKTsKKworICBpZiAoY2xvc3VyZSkKKyAgICBAeworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgaW5mbyB2ZWN0b3JzICovCisgICAgICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICAgICAgaWYgKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisgICAgICAgIEB7CisgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2xvc3VyZSwgc2V0dGluZyBzdHJlYW0gdG8gc3Rkb3V0ICovCisgICAgICAgICAgaWYgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKGNsb3N1cmUsICZjaWYsIHB1dHNfYmluZGluZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgYm91bmRfcHV0cykgPT0gRkZJX09LKQorICAgICAgICAgICAgQHsKKyAgICAgICAgICAgICAgcmMgPSBib3VuZF9wdXRzKCJIZWxsbyBXb3JsZCEiKTsKKyAgICAgICAgICAgICAgLyogcmMgbm93IGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gZnB1dHMgKi8KKyAgICAgICAgICAgIEB9CisgICAgICAgIEB9CisgICAgQH0KKworICAvKiBEZWFsbG9jYXRlIGJvdGggY2xvc3VyZSwgYW5kIGJvdW5kX3B1dHMgKi8KKyAgZmZpX2Nsb3N1cmVfZnJlZShjbG9zdXJlKTsKKworICByZXR1cm4gMDsKK0B9CisKK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIE1pc3NpbmcgRmVhdHVyZXMKK0BjaGFwdGVyIE1pc3NpbmcgRmVhdHVyZXMKKworQGNvZGV7bGliZmZpfSBpcyBtaXNzaW5nIGEgZmV3IGZlYXR1cmVzLiAgV2Ugd2VsY29tZSBwYXRjaGVzIHRvIGFkZAorc3VwcG9ydCBmb3IgdGhlc2UuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBjYWxsaW5nIHZhcmFyZ3MgZnVuY3Rpb25zLiAgVGhpcyBtYXkgd29yayBvbgorc29tZSBwbGF0Zm9ybXMsIGRlcGVuZGluZyBvbiBob3cgdGhlIEFCSSBpcyBkZWZpbmVkLCBidXQgaXQgaXMgbm90CityZWxpYWJsZS4KKworQGl0ZW0KK1RoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGJpdCBmaWVsZHMgaW4gc3RydWN0dXJlcy4KKworQGl0ZW0KK1RoZSBjbG9zdXJlIEFQSSBpcworCitAYyBGSVhNRTogLi4uCisKK0BpdGVtCitUaGUgYGByYXcnJyBBUEkgaXMgdW5kb2N1bWVudGVkLgorQGMgYXJndW1lbnQgcHJvbW90aW9uPworQGMgdW5pb25zPworQGMgYW55dGhpbmcgZWxzZT8KK0BlbmQgaXRlbWl6ZQorCisKK0Bub2RlIEluZGV4CitAdW5udW1iZXJlZCBJbmRleAorCitAcHJpbnRpbmRleCBjcAorCitAYnllCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkMGI3OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQpAQCAtMCwwICsxLDQgQEAKK0BzZXQgVVBEQVRFRCAxNCBGZWJydWFyeSAyMDA4CitAc2V0IFVQREFURUQtTU9OVEggRmVicnVhcnkgMjAwOAorQHNldCBFRElUSU9OIDMuMC44CitAc2V0IFZFUlNJT04gMy4wLjgKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQwYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCkBAIC0wLDAgKzEsNCBAQAorQHNldCBVUERBVEVEIDE0IEZlYnJ1YXJ5IDIwMDgKK0BzZXQgVVBEQVRFRC1NT05USCBGZWJydWFyeSAyMDA4CitAc2V0IEVESVRJT04gMy4wLjgKK0BzZXQgVkVSU0lPTiAzLjAuOApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KaW5kZXggMDdmYTUzNy4uZTAzYmJmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCkBAIC0xLDUgKzEsOCBAQAogLyogZmZpY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCiAKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKwogLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAogICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCiAgICAqLwpAQCAtMTQsNiArMTcsOSBAQAogLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgZXh0cmEgZGVidWdnaW5nLiAqLwogI3VuZGVmIEZGSV9ERUJVRwogCisvKiBDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJldmVydCB0byBhbHRlcm5hdGl2ZSBtZWFucyAqLworI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJVAorCiAvKiBEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuICovCiAjdW5kZWYgRkZJX05PX1JBV19BUEkKIApAQCAtMzcsNiArNDMsOSBAQAogICAgKi8KICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMCiAKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuICovCisjdW5kZWYgSEFWRV9BU19YODZfUENSRUwKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0RMRkNOX0gKIApAQCAtOTQsNiArMTAzLDEwIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VOSVNURF9ICiAKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI3VuZGVmIExUX09CSkRJUgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLwogI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTwogCkBAIC0xMTIsNiArMTI1LDkgQEAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KICN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKIAorLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgogCkBAIC0xMzksOSArMTU1LDE3IEBACiAvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCiAjdW5kZWYgVkVSU0lPTgogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlCi0gICBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQgVkFYKS4gKi8KLSN1bmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgogCiAKICNpZmRlZiBIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgppbmRleCAwNDVkN2MzLi4yN2M5NzFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgpAQCAtMSwxMiArMSwxNCBAQAogZmZpX3NvdXJjZXMgPSAiIiIKIHNyYy9wcmVwX2NpZi5jCitzcmMvY2xvc3VyZXMuYworc3JjL2RsbWFsbG9jLmMKICIiIi5zcGxpdCgpCiAKIGZmaV9wbGF0Zm9ybXMgPSB7CiAgICAgJ01JUFNfSVJJWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnLCAnc3JjL21pcHMvbjMyLlMnXSwKICAgICAnTUlQU19MSU5VWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnXSwKICAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCi0gICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCisgICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvZnJlZWJzZC5TJ10sCiAgICAgJ1g4Nl9XSU4zMic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3dpbjMyLlMnXSwKICAgICAnU1BBUkMnOiBbJ3NyYy9zcGFyYy9mZmkuYycsICdzcmMvc3BhcmMvdjguUycsICdzcmMvc3BhcmMvdjkuUyddLAogICAgICdBTFBIQSc6IFsnc3JjL2FscGhhL2ZmaS5jJywgJ3NyYy9hbHBoYS9vc2YuUyddLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmFtCmluZGV4IDZiNzEzMTguLmZkMjgwMjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5hbQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuYW0KQEAgLTYsNCArNiw0IEBACiBFWFRSQV9ESVNUPWZmaS5oLmluIGZmaV9jb21tb24uaAogCiBpbmNsdWRlc2RpciA9ICQobGliZGlyKS9AUEFDS0FHRV9OQU1FQC1AUEFDS0FHRV9WRVJTSU9OQC9pbmNsdWRlCi1ub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyA9IGZmaS5oIGZmaXRhcmdldC5oIAorbm9kaXN0X2luY2x1ZGVzX0hFQURFUlMgPSBmZmkuaCBmZml0YXJnZXQuaApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCmluZGV4IGYwYzlmZTIuLjEzNmYzNmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KQEAgLTEsOCArMSw5IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExIGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKICMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNiw4ICsxNyw5IEBACiAKIFZQQVRIID0gQHNyY2RpckAKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CiBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCkBAIC00MSw5ICs0MywxMCBAQAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCiBhbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAogCSQoQUNMT0NBTF9NNCkKLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCiBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPSBmZmkuaCBmZml0YXJnZXQuaAorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwpAQCAtNTEsOSArNTQsMjMgQEAKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCiBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpIgotbm9kaXN0X2luY2x1ZGVzSEVBREVSU19JTlNUQUxMID0gJChJTlNUQUxMX0hFQURFUikKIEhFQURFUlMgPSAkKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKQogRVRBR1MgPSBldGFncwogQ1RBR1MgPSBjdGFncwpAQCAtNzUsMjEgKzkyLDE3IEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAotQ1hYID0gQENYWEAKLUNYWENQUCA9IEBDWFhDUFBACi1DWFhERVBNT0RFID0gQENYWERFUE1PREVACi1DWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQAotRUNITyA9IEBFQ0hPQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACiBFQ0hPX0MgPSBARUNIT19DQAogRUNIT19OID0gQEVDSE9fTkAKIEVDSE9fVCA9IEBFQ0hPX1RACiBFR1JFUCA9IEBFR1JFUEAKIEVYRUVYVCA9IEBFWEVFWFRACi1GNzcgPSBARjc3QAotRkZMQUdTID0gQEZGTEFHU0AKK0ZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAogSU5TVEFMTCA9IEBJTlNUQUxMQApAQCAtOTcsMTYgKzExMCwyMyBAQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKIElOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAogTERGTEFHUyA9IEBMREZMQUdTQAogTElCT0JKUyA9IEBMSUJPQkpTQAogTElCUyA9IEBMSUJTQAogTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAogTE5fUyA9IEBMTl9TQAogTFRMSUJPQkpTID0gQExUTElCT0JKU0AKIE1BSU5UID0gQE1BSU5UQAogTUFLRUlORk8gPSBATUFLRUlORk9ACiBNS0RJUl9QID0gQE1LRElSX1BACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACiBPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACiBQQUNLQUdFID0gQFBBQ0tBR0VACiBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKIFBBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACkBAIC0xMjcsOCArMTQ3LDcgQEAKIGFic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9DWFggPSBAYWNfY3RfQ1hYQAotYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKIGFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAogYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKIGFtX19xdW90ZSA9IEBhbV9fcXVvdGVACkBAIC0xNTksNiArMTc4LDcgQEAKIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKIGxvY2FsZWRpciA9IEBsb2NhbGVkaXJACiBsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACiBtYW5kaXIgPSBAbWFuZGlyQAogbWtkaXJfcCA9IEBta2Rpcl9wQAogb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQApAQCAtMTc3LDEzICsxOTcsMTQgQEAKIHRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKIHRvb2xleGVjZGlyID0gQHRvb2xleGVjZGlyQAogdG9vbGV4ZWNsaWJkaXIgPSBAdG9vbGV4ZWNsaWJkaXJACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACiB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KIERJU1RDTEVBTkZJTEVTID0gZmZpdGFyZ2V0LmgKIEVYVFJBX0RJU1QgPSBmZmkuaC5pbiBmZmlfY29tbW9uLmgKIGluY2x1ZGVzZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFX05BTUVALUBQQUNLQUdFX1ZFUlNJT05AL2luY2x1ZGUKLW5vZGlzdF9pbmNsdWRlc19IRUFERVJTID0gZmZpLmggZmZpdGFyZ2V0LmggCitub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyA9IGZmaS5oIGZmaXRhcmdldC5oCiBhbGw6IGFsbC1hbQogCiAuU1VGRklYRVM6CkBAIC0xOTEsMTQgKzIxMiwxNCBAQAogCUBmb3IgZGVwIGluICQ/OyBkbyBcCiAJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKIAkgICAgKiQkZGVwKikgXAotCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCi0JCSYmIGV4aXQgMDsgXAorCSAgICAgICggY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoICkgXAorCSAgICAgICAgJiYgeyBpZiB0ZXN0IC1mICRAOyB0aGVuIGV4aXQgMDsgZWxzZSBicmVhazsgZmk7IH07IFwKIAkgICAgICBleGl0IDE7OyBcCiAJICBlc2FjOyBcCiAJZG9uZTsgXAotCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9NYWtlZmlsZSc7IFwKLQljZCAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgaW5jbHVkZS9NYWtlZmlsZQorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbmNsdWRlL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBpbmNsdWRlL01ha2VmaWxlCiAuUFJFQ0lPVVM6IE1ha2VmaWxlCiBNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCiAJQGNhc2UgJyQ/JyBpbiBcCkBAIC0yMTYsNiArMjM3LDcgQEAKIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKIGZmaS5oOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvZmZpLmguaW4KIAljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQAogCkBAIC0yMjcsNjUgKzI0OSw3MiBAQAogaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTOiAkKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQoaW5jbHVkZXNkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiCi0JQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKG5vZGlzdF9pbmNsdWRlc0hFQURFUlNfSU5TVEFMTCkgJyQkZCQkcCcgJyQoREVTVERJUikkKGluY2x1ZGVzZGlyKS8kJGYnIjsgXAotCSAgJChub2Rpc3RfaW5jbHVkZXNIRUFERVJTX0lOU1RBTEwpICIkJGQkJHAiICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikvJCRmIjsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChpbmNsdWRlc2RpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpIiB8fCBleGl0ICQkPzsgXAogCWRvbmUKIAogdW5pbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlM6CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVzZGlyKS8kJGYnIjsgXAotCSAgcm0gLWYgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKS8kJGYiOyBcCi0JZG9uZQorCUBsaXN0PSckKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZXNkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJdGVzdCAtbiAiJCRmaWxlcyIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGluY2x1ZGVzZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJY2QgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwogCiBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCiAJbWtpZCAtZklEICQkdW5pcXVlCiB0YWdzOiBUQUdTCiAKIFRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKIAkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JdGFncz07IFwKKwlzZXQgeDsgXAogCWhlcmU9YHB3ZGA7IFwKIAlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKIAlmaQogY3RhZ3M6IENUQUdTCiBDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAotCWhlcmU9YHB3ZGA7IFwKIAlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKLQkgICAgICQkdGFncyAkJHVuaXF1ZQorCSAgICAgJCR1bmlxdWUKIAogR1RBR1M6CiAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmIGNkICQodG9wX3NyY2RpcikgXAotCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKwkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKIAogZGlzdGNsZWFuLXRhZ3M6CiAJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKQEAgLTMwNiwxMyArMzM1LDE3IEBACiAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCiAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAogCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCiAJICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCiAJICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAogCSAgICB8fCBleGl0IDE7IFwKIAkgIGZpOyBcCiAJZG9uZQpAQCAtMzQzLDYgKzM3Niw3IEBACiAKIGRpc3RjbGVhbi1nZW5lcmljOgogCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQogCS10ZXN0IC16ICIkKERJU1RDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChESVNUQ0xFQU5GSUxFUykKIAogbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgpAQCAtMzYyLDYgKzM5Niw4IEBACiAKIGh0bWw6IGh0bWwtYW0KIAoraHRtbC1hbToKKwogaW5mbzogaW5mby1hbQogCiBpbmZvLWFtOgpAQCAtMzcwLDE4ICs0MDYsMjggQEAKIAogaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCiAKK2luc3RhbGwtZHZpLWFtOgorCiBpbnN0YWxsLWV4ZWMtYW06CiAKIGluc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCiAKK2luc3RhbGwtaHRtbC1hbToKKwogaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KIAoraW5zdGFsbC1pbmZvLWFtOgorCiBpbnN0YWxsLW1hbjoKIAogaW5zdGFsbC1wZGY6IGluc3RhbGwtcGRmLWFtCiAKK2luc3RhbGwtcGRmLWFtOgorCiBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLWFtCiAKK2luc3RhbGwtcHMtYW06CisKIGluc3RhbGxjaGVjay1hbToKIAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQpAQCAtNDE3LDYgKzQ2Myw3IEBACiAJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAogCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUwogCisKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgppbmRleCA3ZGYzYjA2Li5kZjdkMmNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCkBAIC01Nyw5ICs1Nyw3IEBACiAjZW5kaWYKIAogLyogU3BlY2lmeSB3aGljaCBhcmNoaXRlY3R1cmUgbGliZmZpIGlzIGNvbmZpZ3VyZWQgZm9yLiAqLwotI2lmbmRlZiBAVEFSR0VUQAogI2RlZmluZSBAVEFSR0VUQAotI2VuZGlmCiAKIC8qIC0tLS0gU3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTY3LDYgKzY1LDEwIEBACiAKICNpZm5kZWYgTElCRkZJX0FTTQogCisjaWZkZWYgX01TQ19WRVIKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyhYKQorI2VuZGlmCisKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KIApAQCAtMjQ5LDEyICsyNTEsMTkgQEAKIAogI2lmIEZGSV9DTE9TVVJFUwogCisjaWZkZWYgX01TQ19WRVIKK19fZGVjbHNwZWMoYWxpZ24oOCkpCisjZW5kaWYKIHR5cGVkZWYgc3RydWN0IHsKICAgY2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKICAgZmZpX2NpZiAgICpjaWY7CiAgIHZvaWQgICAgICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOwogICB2b2lkICAgICAgKnVzZXJfZGF0YTsKKyNpZmRlZiBfX0dOVUNfXwogfSBmZmlfY2xvc3VyZSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkICg4KSkpOworI2Vsc2UKK30gZmZpX2Nsb3N1cmU7CisjZW5kaWYKIAogdm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7CiB2b2lkIGZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQgKik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaAppbmRleCA2YWY0YjVmLi40MmNhY2U5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKQEAgLTE4LDcgKzE4LDEwIEBACiAvKiBEbyBub3QgbW92ZSB0aGlzLiBTb21lIHZlcnNpb25zIG9mIEFJWCBhcmUgdmVyeSBwaWNreSBhYm91dCB3aGVyZQogICAgdGhpcyBpcyBwb3NpdGlvbmVkLiAqLwogI2lmZGVmIF9fR05VQ19fCisvKiBtaW5ndzY0IGRlZmluZXMgdGhpcyBhbHJlYWR5IGluIG1hbGxvYy5oLiAqLworI2lmbmRlZiBhbGxvY2EKICMgZGVmaW5lIGFsbG9jYSBfX2J1aWx0aW5fYWxsb2NhCisjZW5kaWYKICMgZGVmaW5lIE1BWUJFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKICNlbHNlCiAjIGRlZmluZSBNQVlCRV9VTlVTRUQKQEAgLTI5LDcgKzMyLDExIEBACiAgI3ByYWdtYSBhbGxvY2EKICMgIGVsc2UKICMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLworIyAgICBpZmRlZiBfTVNDX1ZFUgorIyAgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgIGVsc2UKIGNoYXIgKmFsbG9jYSAoKTsKKyMgICAgZW5kaWYKICMgICBlbmRpZgogIyAgZW5kaWYKICMgZW5kaWYKQEAgLTc3LDYgKzg0LDIyIEBACiB9IGV4dGVuZGVkX2NpZjsKIAogLyogVGVyc2Ugc2l6ZWQgdHlwZSBkZWZpbml0aW9ucy4gICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX3NnaSkKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgICBTSU5UODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVUlOVDE2OwordHlwZWRlZiBzaWduZWQgc2hvcnQgICBTSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMzI7Cit0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UMzI7CisjIGlmZGVmIF9NU0NfVkVSCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgVUlOVDY0OwordHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgIFNJTlQ2NDsKKyMgZWxzZQorIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiB1aW50NjRfdCBVSU5UNjQ7Cit0eXBlZGVmIGludDY0X3QgIFNJTlQ2NDsKKyMgZW5kaWYKKyNlbHNlCiB0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UOCAgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwogdHlwZWRlZiBzaWduZWQgaW50ICAgU0lOVDggIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKIHR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQxNiBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CkBAIC04NSw2ICsxMDgsNyBAQAogdHlwZWRlZiBzaWduZWQgaW50ICAgU0lOVDMyIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKIHR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ2NCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CiB0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UNjQgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOworI2VuZGlmCiAKIHR5cGVkZWYgZmxvYXQgRkxPQVQzMjsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmUxYzdiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4KQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9JHtsaWJkaXJ9L0BQQUNLQUdFX05BTUVALUBQQUNLQUdFX1ZFUlNJT05AL2luY2x1ZGUKKworTmFtZTogQFBBQ0tBR0VfTkFNRUAKK0Rlc2NyaXB0aW9uOiBMaWJyYXJ5IHN1cHBvcnRpbmcgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2VzCitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxmZmkKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjgwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbgpAQCAtMCwwICsxLDI5IEBACisjIFRoaXMgZmlsZSBpcyB1c2VkIHRvIG1haW50YWluIGxpYnRvb2wgdmVyc2lvbiBpbmZvIGZvciBsaWJmZmkuICBTZWUKKyMgdGhlIGxpYnRvb2wgbWFudWFsIHRvIHVuZGVyc3RhbmQgdGhlIG1lYW5pbmcgb2YgdGhlIGZpZWxkcy4gIFRoaXMgaXMKKyMgYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQgdmVyc2lvbiB1cGRhdGVzIGRvbid0IGludm9sdmUgcmUtcnVubmluZworIyBhdXRvbWFrZS4KKyMKKyMgSGVyZSBhcmUgYSBzZXQgb2YgcnVsZXMgdG8gaGVscCB5b3UgdXBkYXRlIHlvdXIgbGlicmFyeSB2ZXJzaW9uCisjIGluZm9ybWF0aW9uOgorIyAKKyMgMS4gU3RhcnQgd2l0aCB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIGAwOjA6MCcgZm9yIGVhY2ggbGlidG9vbCBsaWJyYXJ5LgorIworIyAyLiBVcGRhdGUgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gb25seSBpbW1lZGlhdGVseSBiZWZvcmUgYSBwdWJsaWMKKyMgICAgcmVsZWFzZSBvZiB5b3VyIHNvZnR3YXJlLiBNb3JlIGZyZXF1ZW50IHVwZGF0ZXMgYXJlIHVubmVjZXNzYXJ5LAorIyAgICBhbmQgb25seSBndWFyYW50ZWUgdGhhdCB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIGdldHMgbGFyZ2VyCisjICAgIGZhc3Rlci4KKyMKKyMgMy4gSWYgdGhlIGxpYnJhcnkgc291cmNlIGNvZGUgaGFzIGNoYW5nZWQgYXQgYWxsIHNpbmNlIHRoZSBsYXN0CisjICAgIHVwZGF0ZSwgdGhlbiBpbmNyZW1lbnQgcmV2aXNpb24gKGBjOnI6YScgYmVjb21lcyBgYzpyKzE6YScpLgorIworIyA0LiBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQsIHJlbW92ZWQsIG9yIGNoYW5nZWQgc2luY2UgdGhlCisjICAgIGxhc3QgdXBkYXRlLCBpbmNyZW1lbnQgY3VycmVudCwgYW5kIHNldCByZXZpc2lvbiB0byAwLgorIworIyA1LiBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UsCisjICAgIHRoZW4gaW5jcmVtZW50IGFnZS4KKyMKKyMgNi4gSWYgYW55IGludGVyZmFjZXMgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgdGhlIGxhc3QgcHVibGljCisjICAgIHJlbGVhc2UsIHRoZW4gc2V0IGFnZSB0byAwLgorIworIyBDVVJSRU5UOlJFVklTSU9OOkFHRQorNToxMDowCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5MzlkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaApAQCAtMCwwICsxLDg0MDYgQEAKKyMgR2VuZXJhdGVkIGZyb20gbHRtYWluLm00c2guCisKKyMgbHRtYWluLnNoIChHTlUgbGlidG9vbCkgMi4yLjYKKyMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwKKyMgb3Igb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KKyMKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjCisjICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIyAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworIyAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyMgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorIyAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKKyMgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyMgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKKyMgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCisjICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisjIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZQorIworIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgIGNsZWFuICAgICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisjICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisjICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorIyAgICAgICBmaW5pc2ggICAgICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworIyAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyMgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorIyAgICAgICB1bmluc3RhbGwgICAgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKyMKKyMgTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLgorIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KKyMKKyMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCisjIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKyMKKyMgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAorIyAgICAgICBzaGVsbDoJCSRTSEVMTAorIyAgICAgICBjb21waWxlcjoJCSRMVENDCisjICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisjICAgICAgIGxpbmtlcjoJCSRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCisjICAgICAgICRwcm9nbmFtZToJCShHTlUgbGlidG9vbCkgMi4yLjYKKyMgICAgICAgYXV0b21ha2U6CQkkYXV0b21ha2VfdmVyc2lvbgorIyAgICAgICBhdXRvY29uZjoJCSRhdXRvY29uZl92ZXJzaW9uCisjCisjIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KKworUFJPR1JBTT1sdG1haW4uc2gKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0yLjIuNgorVElNRVNUQU1QPSIiCitwYWNrYWdlX3JldmlzaW9uPTEuMzAxMgorCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgorIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KKyMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCisjIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQorZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCitkbworICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICBzYXZlXyRsdF92YXI9XCQkbHRfdmFyCisgICAgICAgICAgJGx0X3Zhcj1DCisJICBleHBvcnQgJGx0X3ZhcgorCSAgbHRfdXNlcl9sb2NhbGU9XCIkbHRfdmFyPVxcXCRzYXZlX1wkbHRfdmFyOyBcJGx0X3VzZXJfbG9jYWxlXCIKKwkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKwlmaSIKK2RvbmUKKworJGx0X3Vuc2V0IENEUEFUSAorCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke0VDSE89ImVjaG8ifQorOiAke0VHUkVQPSIvYmluL2dyZXAgLUUifQorOiAke0ZHUkVQPSIvYmluL2dyZXAgLUYifQorOiAke0dSRVA9Ii9iaW4vZ3JlcCJ9Cis6ICR7TE5fUz0ibG4gLXMifQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NFRD0iL2Jpbi9zZWQifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Cis6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKworIyBHbG9iYWwgdmFyaWFibGVzOgorRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUworCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorbHRfbmw9JworJworSUZTPSIgCSRsdF9ubCIKKworZGlybmFtZT0icywvW14vXSokLCwiCitiYXNlbmFtZT0icyxeLiovLCwiCisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUuCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0iJDAiCisKKyMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgorIyBJbiB0aGUgdW5saWtlbHkgZXZlbnQgJHByb2duYW1lIGJlZ2FuIHdpdGggYSAnLScsIGl0IHdvdWxkIHBsYXkgaGF2b2Mgd2l0aAorIyBmdW5jX2VjaG8gKGltYWdpbmUgcHJvZ25hbWU9LW4pLCBzbyB3ZSBwcmVwZW5kIC4vIGluIHRoYXQgY2FzZToKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKK3Byb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorY2FzZSAkcHJvZ25hbWUgaW4KKyAgLSopIHByb2duYW1lPS4vJHByb2duYW1lIDs7Citlc2FjCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcGF0aCBmb3IgcmVleGVjdXRpb246CitjYXNlICRwcm9ncGF0aCBpbgorICBbXFwvXSp8W0EtWmEtel06XFwqKSA7OworICAqW1xcL10qKQorICAgICBwcm9nZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworICAqKQorICAgICBzYXZlX0lGUz0iJElGUyIKKyAgICAgSUZTPToKKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0iJHNhdmVfSUZTIgorICAgICB0ZXN0IC1uICIkcHJvZ2RpciIgfHwgcHJvZ2Rpcj1gcHdkYAorICAgICBwcm9ncGF0aD0iJHByb2dkaXIvJHByb2duYW1lIgorICAgICA7OworZXNhYworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0iJHtTRUR9IicgLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtgIiRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQorIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCisjIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCisjIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KK2JzPSdcXCcKK2JzMj0nXFxcXCcKK2JzND0nXFxcXFxcXFwnCitkb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kYnM0LyZcXAorL2cKKyAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KKyAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCisgIHMvXG4vL2ciCisKKyMgU3RhbmRhcmQgb3B0aW9uczoKK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfaGVscD1mYWxzZQorb3B0X3F1aWV0PWZhbHNlCitvcHRfdmVyYm9zZT1mYWxzZQorb3B0X3dhcm5pbmc9OgorCisjIGZ1bmNfZWNobyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCisjIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KK2Z1bmNfZWNobyAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICQqIgorfQorCisjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KK2Z1bmNfdmVyYm9zZSAoKQoreworICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisKKyAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KKyAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bworICAgICMgd29yayBhcm91bmQgdGhhdDoKKyAgICA6Cit9CisKKyMgZnVuY19lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfZXJyb3IgKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9IDE+JjIKK30KKworIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiB3YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKKworICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgOgorfQorCisjIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgorZnVuY19mYXRhbF9lcnJvciAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgorfQoraGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAorCisKKyMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKKyMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgorZnVuY19ncmVwICgpCit7CisgICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQorfQorCisKKyMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCisjIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgorZnVuY19ta2Rpcl9wICgpCit7CisgICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgorICAgIG15X2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCisgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OworICAgICAgZXNhYworCisgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCisgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCisgICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAorCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KKyAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICJYJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgICAgICBkb25lCisgICAgICBteV9kaXJfbGlzdD1gJEVDSE8gIlgkbXlfZGlyX2xpc3QiIHwgJFhzZWQgLWUgJ3MsOiokLCwnYAorCisgICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JworICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisJSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCisgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQorICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKKyAgICBlbHNlCisKKyAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKKyAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisKKyAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKKworICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCisgICAgICAgIHVtYXNrIDAwNzcKKyAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgorICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKKyAgICAgIGZpCisKKyAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQorICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIlgkbXlfdG1wZGlyIiB8ICRYc2VkCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAorIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKKyMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycworIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXCRdKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIlgkMSIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQorICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgorICAgIGVzYWMKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCW15X2FyZz1gJEVDSE8gIlgkMSIgfCAkWHNlZCBcCisJICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKyAgICAgICopCisgICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbXlfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0iJG15X2FyZyIKK30KKworCisjIGZ1bmNfc2hvd19ldmFsIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgorZnVuY19zaG93X2V2YWwgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbXlfY21kIgorICAgICAgbXlfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCisJZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAgIGZpCisgICAgZmkKK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQorIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgbXlfY21kPSIkMSIKKyAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorCisgICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7CisgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisgICAgfQorCisgICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQorICAgICAgZXZhbCAiJGx0X3VzZXJfbG9jYWxlCisJICAgICRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRsdF9zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKworCisKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRTRUQgLW4gJy9eIyAnJFBST0dSQU0nIChHTlUgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKyAgICAgICAgcy9cKChDKVwpWyAwLTksLV0qXCggWzEtOV1bMC05XSpcKS9cMVwyLworICAgICAgICBwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAgZXhpdCAkPworfQorCisjIGZ1bmNfdXNhZ2UKKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIC1oLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCisJcAorICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICAkRUNITworICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfaGVscAorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfaGVscCAoKQoreworICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisgICAgICAgIHMvXiMgLy8KKwlzL14jICokLy8KKwlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCisJcypcJGhvc3QqJyIkaG9zdCInKgorCXMqXCRTSEVMTConIiRTSEVMTCInKgorCXMqXCRMVENDKiciJExUQ0MiJyoKKwlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKKwlzKlwkTEQqJyIkTEQiJyoKKwlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KKwlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKwlwCisgICAgIH0nIDwgIiRwcm9ncGF0aCIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKyMgZXhpdF9jbWQuCitmdW5jX21pc3NpbmdfYXJnICgpCit7CisgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEiCisgICAgZXhpdF9jbWQ9ZXhpdAorfQorCitleGl0X2NtZD06CisKKworCisKKworIyBDaGVjayB0aGF0IHdlIGhhdmUgYSB3b3JraW5nICRFQ0hPLgoraWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgc2hpZnQKK2VsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgorICAjIFlpcHBlZSwgJEVDSE8gd29ya3MhCisgIDoKK2Vsc2UKKyAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSAkRUNITyB3aWxsIHdvcmsuCisgIGV4ZWMgJFNIRUxMICIkcHJvZ3BhdGgiIC0tbm8tcmVleGVjICR7MSsiJEAifQorZmkKKworaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKyAgc2hpZnQKKyAgY2F0IDw8RU9GCiskKgorRU9GCisgIGV4aXQgJEVYSVRfU1VDQ0VTUworZmkKKworbWFnaWM9IiUlJU1BR0lDIHZhcmlhYmxlJSUlIgorbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KKyMgJG1vZGUgaXMgdW5zZXQKK25vbm9wdD0KK2V4ZWN1dGVfZGxmaWxlcz0KK3ByZXNlcnZlX2FyZ3M9CitsbzJvPSJzL1xcLmxvXCQvLiR7b2JqZXh0fS8iCitvMmxvPSJzL1xcLiR7b2JqZXh0fVwkLy5sby8iCitleHRyYWN0ZWRfYXJjaGl2ZXM9CitleHRyYWN0ZWRfc2VyaWFsPTAKKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9kdXBsaWNhdGVfZGVwcz1mYWxzZQorb3B0X3NpbGVudD1mYWxzZQorb3B0X2RlYnVnPToKKworIyBJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBhbnkgb2YgdGhlIGFjdGlvbnMsIHRoZSBjb21tYW5kIGluIGl0CisjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyMgbGVmdCBvdmVyIGJ5IHNoZWxscy4KK2V4ZWNfY21kPQorCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisgICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCit9CisKKworIyBmdW5jX2NvbmZpZworIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCitmdW5jX2NvbmZpZyAoKQoreworICAgIHJlX2JlZ2luY2Y9J14jICMjIyBCRUdJTiBMSUJUT09MJworICAgIHJlX2VuZGNmPSdeIyAjIyMgRU5EIExJQlRPT0wnCisKKyAgICAjIERlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAgICAkU0VEICIxLC8kcmVfYmVnaW5jZiBDT05GSUcvZDsvJHJlX2VuZGNmIENPTkZJRy8sXCRkIiA8ICIkcHJvZ3BhdGgiCisKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJFNFRCAtbiAiLyRyZV9iZWdpbmNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvLC8kcmVfZW5kY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZmVhdHVyZXMKKyMgRGlzcGxheSB0aGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorZnVuY19mZWF0dXJlcyAoKQoreworICAgICRFQ0hPICJob3N0OiAkaG9zdCIKKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgJEVDSE8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgICRFQ0hPICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkRUNITyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJEVDSE8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZW5hYmxlX3RhZyB0YWduYW1lCisjIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKKyMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAorIyB2YXJpYWJsZSBoZXJlLgorZnVuY19lbmFibGVfdGFnICgpCit7CisgICMgR2xvYmFsIHZhcmlhYmxlOgorICB0YWduYW1lPSIkMSIKKworICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorCisgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgICpbIS1fQS1aYS16MC05LC9dKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgOzsKKyAgZXNhYworCisgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICBjYXNlICR0YWduYW1lIGluCisgICAgQ0MpIDs7CisgICAgKikKKyAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisKKwkjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisJIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisJZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4KKyMgdGhlIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGBsaWJ0b29sIC0tdmVyc2lvbicgaGFwcGVuIHF1aWNrbHkuCit7CisKKyAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgIGNhc2UgJDEgaW4KKyAgY2xlYW58Y2xlYXxjbGV8Y2wpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgbGlua3xsaW58bGl8bCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGVzYWMKKworICAjIFBhcnNlIG5vbi1tb2RlIHNwZWNpZmljIGFyZ3VtZW50czoKKyAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbworICAgIG9wdD0iJDEiCisgICAgc2hpZnQKKworICAgIGNhc2UgJG9wdCBpbgorICAgICAgLS1jb25maWcpCQlmdW5jX2NvbmZpZwkJCQkJOzsKKworICAgICAgLS1kZWJ1ZykJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisJCQlvcHRfZGVidWc9J3NldCAteCcKKwkJCSRvcHRfZGVidWcKKwkJCTs7CisKKyAgICAgIC1kbG9wZW4pCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCWV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkMSIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtLWRyeS1ydW4gfCAtbikJb3B0X2RyeV9ydW49OgkJCQkJOzsKKyAgICAgIC0tZmVhdHVyZXMpICAgICAgIGZ1bmNfZmVhdHVyZXMJCQkJCTs7CisgICAgICAtLWZpbmlzaCkJCW1vZGU9ImZpbmlzaCIJCQkJCTs7CisKKyAgICAgIC0tbW9kZSkJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJY2FzZSAkMSBpbgorCQkJICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorCQkJICBjbGVhbikJOzsKKwkJCSAgY29tcGlsZSkJOzsKKwkJCSAgZXhlY3V0ZSkJOzsKKwkJCSAgZmluaXNoKQk7OworCQkJICBpbnN0YWxsKQk7OworCQkJICBsaW5rKQkJOzsKKwkJCSAgcmVsaW5rKQk7OworCQkJICB1bmluc3RhbGwpCTs7CisKKwkJCSAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisJCQkgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCisJCQkgICAgIGV4aXRfY21kPWV4aXQKKwkJCSAgICAgYnJlYWsKKwkJCSAgICAgOzsKKwkJICAgICAgICBlc2FjCisKKwkJCW1vZGU9IiQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisJCQlvcHRfZHVwbGljYXRlX2RlcHM9OgkJCQk7OworCisgICAgICAtLXF1aWV0fC0tc2lsZW50KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJb3B0X3NpbGVudD06CisJCQk7OworCisgICAgICAtLXZlcmJvc2V8IC12KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorCQkJb3B0X3NpbGVudD1mYWxzZQorCQkJOzsKKworICAgICAgLS10YWcpCQl0ZXN0ICIkIyIgLWVxIDAgJiYgZnVuY19taXNzaW5nX2FyZyAiJG9wdCIgJiYgYnJlYWsKKwkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQgJDEiCisJCQlmdW5jX2VuYWJsZV90YWcgIiQxIgkjIHRhZ25hbWUgaXMgc2V0IGhlcmUKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zOgorICAgICAgLWRsb3Blbj0qfC0tbW9kZT0qfC0tdGFnPSopCisJCQlmdW5jX29wdF9zcGxpdCAiJG9wdCIKKwkJCXNldCBkdW1teSAiJGZ1bmNfb3B0X3NwbGl0X29wdCIgIiRmdW5jX29wdF9zcGxpdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CisgICAgICAtLWhlbHApCQlvcHRfaGVscD06CQkJCQk7OworICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJCTs7CisKKyAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciCTs7CisKKyAgICAgICopCQlub25vcHQ9IiRvcHQiCisJCQlicmVhaworCQkJOzsKKyAgICBlc2FjCisgIGRvbmUKKworCisgIGNhc2UgJGhvc3QgaW4KKyAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgorICAgICAgOzsKKyAgICAqKQorICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X2R1cGxpY2F0ZV9kZXBzCisgICAgICA7OworICBlc2FjCisKKyAgIyBIYXZpbmcgd2FybmVkIGFib3V0IGFsbCBtaXMtc3BlY2lmaWVkIG9wdGlvbnMsIGJhaWwgb3V0IGlmCisgICMgYW55dGhpbmcgd2FzIHdyb25nLgorICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCisgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICBmaQorCisgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICBmaQorfQorCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworJG9wdF9oZWxwIHx8IHsKKyAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisgIGZpCisKKyAgdGVzdCAteiAiJG1vZGUiICYmIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERS4iCisKKworICAjIERhcndpbiBzdWNrcworICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisKKyAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgaWYgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgdGVzdCAiJG1vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCisgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgIGZpCisKKyAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICBnZW5lcmljX2hlbHA9IiRoZWxwIgorICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorfQorCisKKyMgZnVuY19sYWxpYl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2xhbGliX3AgKCkKK3sKKyAgICB0ZXN0IC1mICIkMSIgJiYKKyAgICAgICRTRUQgLWUgNHEgIiQxIiAyPi9kZXYvbnVsbCBcCisgICAgICAgIHwgJEdSRVAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIiA+IC9kZXYvbnVsbCAyPiYxCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgYGZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgIiRsYWxpYl9wX2xpbmUiIGluCisJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKKwkgICAgZXNhYworCWRvbmUKKwlleGVjIDA8JjUgNTwmLQorICAgIGZpCisgICAgdGVzdCAiJGxhbGliX3AiID0geWVzCit9CisKKyMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdAorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICgpCit7CisgICAgZnVuY19sYWxpYl9wICIkMSIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iIgorICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiOyB0aGVuCisJZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorCWZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKyAgICBmaQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvciB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9wICgpCit7CisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiQxIiB8fCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiQxIgorfQorCisKKyMgZnVuY19leGVjdXRlX2NtZHMgY29tbWFuZHMgZmFpbF9jbWQKKyMgRXhlY3V0ZSB0aWxkZS1kZWxpbWl0ZWQgQ09NTUFORFMuCisjIElmIEZBSUxfQ01EIGlzIGdpdmVuLCBldmFsIHRoYXQgdXBvbiBmYWlsdXJlLgorIyBGQUlMX0NNRCBtYXkgcmVhZC1hY2Nlc3MgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiB2YXJpYWJsZSBDTUQhCitmdW5jX2V4ZWN1dGVfY21kcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc2F2ZV9pZnMKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkMSBpbgorICAgICovKiB8ICpcXCopCS4gIiQxIiA7OworICAgICopCQkuICIuLyQxIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfaW5mZXJfdGFnIGFyZworIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgorIyBPbmx5IGF0dGVtcHQgdGhpcyBpZiB0aGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZQorIyBjb21tYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIGRlZmF1bHQgY29tcGlsZXIuCisjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJworZnVuY19pbmZlcl90YWcgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBkb25lCisgICAgICBjYXNlICRAIGluCisgICAgICAjIEJsYW5rcyBpbiB0aGUgY29tbWFuZCBtYXkgaGF2ZSBiZWVuIHN0cmlwcGVkIGJ5IHRoZSBjYWxsaW5nIHNoZWxsLAorICAgICAgIyBidXQgbm90IGZyb20gdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gY29uZmlndXJlIHdhcyBydW4uCisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkRUNITyAkQ0NgICIqIHwgImAkRUNITyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRFQ0hPICRDQ19xdW90ZWRgICIqIHwgImAkRUNITyAkQ0NfcXVvdGVkYCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCisJICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgICBDQ19xdW90ZWQ9IiRDQ19xdW90ZWQgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgICBkb25lCisJICAgIGNhc2UgIiRAICIgaW4KKwkgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkRUNITyAkQ0NgICIqIHwgImAkRUNITyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRFQ0hPICRDQ19xdW90ZWRgICIqIHwgImAkRUNITyAkQ0NfcXVvdGVkYCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorIwllbHNlCisjCSAgZnVuY192ZXJib3NlICJ1c2luZyAkdGFnbmFtZSB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgZmkKK30KKworCisKKyMgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCBvdXRwdXRfbmFtZSBwaWNfbmFtZSBub25waWNfbmFtZQorIyBDcmVhdGUgYSBsaWJ0b29sIG9iamVjdCBmaWxlIChhbmFsb2dvdXMgdG8gYSAiLmxhIiBmaWxlKSwKKyMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCitmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCit7CisgICAgd3JpdGVfbGlib2JqPSR7MX0KKyAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9vbGRvYmo9bm9uZQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCisjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgorcGljX29iamVjdD0kd3JpdGVfbG9iagorCisjIE5hbWUgb2YgdGhlIG5vbi1QSUMgb2JqZWN0Citub25fcGljX29iamVjdD0kd3JpdGVfb2xkb2JqCisKK0VPRgorICAgICAgJE1WICIke3dyaXRlX2xpYm9ian1UIiAiJHt3cml0ZV9saWJvYmp9IgorICAgIH0KK30KKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCisgICAgYmFzZV9jb21waWxlPQorICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCTs7CisKKyAgICAgIHRhcmdldCApCisJbGlib2JqPSIkYXJnIgorCWFyZ19tb2RlPW5vcm1hbAorCWNvbnRpbnVlCisJOzsKKworICAgICAgbm9ybWFsICkKKwkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCisJY2FzZSAkYXJnIGluCisJLW8pCisJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKKwkgIGFyZ19tb2RlPXRhcmdldAorCSAgY29udGludWUKKwkgIDs7CisKKwktcGllIHwgLWZwaWUgfCAtZlBJRSkKKyAgICAgICAgICBwaWVfZmxhZz0iJHBpZV9mbGFnICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCisJICBsYXRlcj0iJGxhdGVyICRhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCS1uby1zdXBwcmVzcykKKwkgIHN1cHByZXNzX29wdD1ubworCSAgY29udGludWUKKwkgIDs7CisKKwktWGNvbXBpbGVyKQorCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAorCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKKwkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCisKKwktV2MsKikKKwkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgbGFzdGFyZz0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KKwkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCisJICBzcmNmaWxlPSIkYXJnIgorCSAgOzsKKwllc2FjICAjICBjYXNlICRhcmcKKwk7OworICAgICAgZXNhYyAgICAjICBjYXNlICRhcmdfbW9kZQorCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxhc3RhcmciCisgICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUgIyBmb3IgYXJnCisKKyAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgIGFyZykKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKKyAgICAgIDs7CisgICAgdGFyZ2V0KQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgfQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICoub2JqIHwgKi5zeCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OworICAgICopCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtcHJlZmVyLXBpYykKKwlwaWNfbW9kZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItbm9uLXBpYykKKwlwaWNfbW9kZT1ubworCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgorICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAorICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCisgICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKKworICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgICAgOzsKKyAgICBlc2FjCisgICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgcGljX21vZGU9ZGVmYXVsdAorICAgIGZpCisKKyAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcworICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYworICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICJYJHNyY2ZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9CisgICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmoiCisgICAgICAkRUNITyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgaWYgdGVzdCAtbiAiJGZpeF9zcmNmaWxlX3BhdGgiOyB0aGVuCisgICAgICBldmFsIHNyY2ZpbGU9XCIkZml4X3NyY2ZpbGVfcGF0aFwiCisgICAgZmkKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkc3JjZmlsZSIKKyAgICBxc3JjZmlsZT0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKworICAgICMgT25seSBidWlsZCBhIFBJQyBvYmplY3QgaWYgd2UgYXJlIGJ1aWxkaW5nIGxpYnRvb2wgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgorICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCisKKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBlbHNlCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZmkKKworICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkLCB0aGVuIGdvIG9uIHRvIGNvbXBpbGUgdGhlIG5leHQgb25lCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRsb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJGxvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKworICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgorICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KKwlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCisgICAgICBlbHNlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKyAgICAgIGZpCisKKyAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgorICAgICAgY29tbWFuZD0iJGNvbW1hbmQkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICckTVYgIiRvdXRwdXRfb2JqIiAiJG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKKworICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAorICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKKyAgICAgICAgJFJNICIkbG9ja2ZpbGUiCisgICAgICBmaQorICAgIH0KKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCiskb3B0X2hlbHAgfHwgewordGVzdCAiJG1vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KK30KKworZnVuY19tb2RlX2hlbHAgKCkKK3sKKyAgICAjIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KKyAgICBjYXNlICRtb2RlIGluCisgICAgICAiIikKKyAgICAgICAgIyBHZW5lcmljIGhlbHAgaXMgZXh0cmFjdGVkIGZyb20gdGhlIHVzYWdlIGNvbW1lbnRzCisgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KKyAgICAgICAgZnVuY19oZWxwCisgICAgICAgIDs7CisKKyAgICAgIGNsZWFuKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y2xlYW4gUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkaW5nIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkaW5nIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zdGF0aWMgICAgICAgICAgIG9ubHkgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KKworVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCitTT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvIFxgLWRsb3BlbicKK2ZsYWdzLgorCitJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCitpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdW5pbnN0YWxsZWQgYmluYXJ5LCBhbmQgYW55IG9mIHRoZWlyIHJlcXVpcmVkIGxpYnJhcnkKK2RpcmVjdG9yaWVzIGFyZSBhZGRlZCB0byB0aGUgbGlicmFyeSBwYXRoLgorCitUaGVuLCBDT01NQU5EIGlzIGV4ZWN1dGVkLCB3aXRoIEFSR1MgYXMgYXJndW1lbnRzLiIKKyAgICAgICAgOzsKKworICAgICAgZmluaXNoKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZmluaXNoIFtMSUJESVJdLi4uCisKK0NvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMuCisKK0VhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCisKK1RoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQordGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIGluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1pbnN0YWxsIElOU1RBTEwtQ09NTUFORC4uLgorCitJbnN0YWxsIGV4ZWN1dGFibGVzIG9yIGxpYnJhcmllcy4KKworSU5TVEFMTC1DT01NQU5EIGlzIHRoZSBpbnN0YWxsYXRpb24gY29tbWFuZC4gIFRoZSBmaXJzdCBjb21wb25lbnQgc2hvdWxkIGJlCitlaXRoZXIgdGhlIFxgaW5zdGFsbCcgb3IgXGBjcCcgcHJvZ3JhbS4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIElOU1RBTEwtQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWluc3QtcHJlZml4IFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKKyAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKKyAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIGxpc3RlZCBpbiBTWU1GSUxFCisgIC1leHBvcnQtc3ltYm9scy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc2hhcmVkICAgICAgICAgICBvbmx5IGRvIGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtc2hyZXh0IFNVRkZJWCAgICBvdmVycmlkZSB0aGUgc3RhbmRhcmQgc2hhcmVkIGxpYnJhcnkgZmlsZSBleHRlbnNpb24KKyAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXN0YXRpYy1saWJ0b29sLWxpYnMKKyAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorICAtd2VhayBMSUJOQU1FICAgICBkZWNsYXJlIHRoYXQgdGhlIHRhcmdldCBwcm92aWRlcyB0aGUgTElCTkFNRSBpbnRlcmZhY2UKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgICRFQ0hPCisgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKKworICAgIGV4aXQgJD8KK30KKworICAjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKKyAgJG9wdF9oZWxwICYmIGZ1bmNfbW9kZV9oZWxwCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRleGVjdXRlX2RsZmlsZXM7IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKworICAgICAgZGlyPQorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi5sYSkKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJIyBSZWFkIHRoZSBsaWJ0b29sIGxpYnJhcnkuCisJZGxuYW1lPQorCWxpYnJhcnlfbmFtZXM9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCisJICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICBjb250aW51ZQorCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBkaXI9IiRkaXIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKikgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmaWxlIgorICAgICAgYXJncz0iJGFyZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgIlgkb3B0X2RyeV9ydW4iID0gWGZhbHNlOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyAgICAgIGRvCisJZXZhbCAiaWYgdGVzdCBcIlwke3NhdmVfJGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KKyAgICAgICAgICAgICAgICAkbHRfdmFyPVwkc2F2ZV8kbHRfdmFyOyBleHBvcnQgJGx0X3ZhcgorCSAgICAgIGVsc2UKKwkJJGx0X3Vuc2V0ICRsdF92YXIKKwkgICAgICBmaSIKKyAgICAgIGRvbmUKKworICAgICAgIyBOb3cgcHJlcGFyZSB0byBhY3R1YWxseSBleGVjIHRoZSBjb21tYW5kLgorICAgICAgZXhlY19jbWQ9IlwkY21kJGFyZ3MiCisgICAgZWxzZQorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJJEVDSE8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gZXhlY3V0ZSAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGxpYmRpcnM9IiRub25vcHQiCisgICAgYWRtaW5jbWRzPQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBkaXIKKyAgICAgIGRvCisJbGliZGlycz0iJGxpYmRpcnMgJGRpciIKKyAgICAgIGRvbmUKKworICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwlpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMiOyB0aGVuCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRmaW5pc2hfY21kcyIgJ2FkbWluY21kcz0iJGFkbWluY21kcworJyIkY21kIiciJworCWZpCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorCSAgIyBEbyB0aGUgc2luZ2xlIGZpbmlzaF9ldmFsLgorCSAgZXZhbCBjbWRzPVwiJGZpbmlzaF9ldmFsXCIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICAkRUNITyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisgICAgICAkRUNITyAiICAgJGxpYmRpciIKKyAgICBkb25lCisgICAgJEVDSE8KKyAgICAkRUNITyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisgICAgJEVDSE8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICRFQ0hPICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorICAgICRFQ0hPICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBleGVjdXRpb24iCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisgICAgICAkRUNITyAiICAgICBkdXJpbmcgbGlua2luZyIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgbGliZGlyPUxJQkRJUgorICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCisgICAgICAkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgZmkKKyAgICAkRUNITworCisgICAgJEVDSE8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCisgICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorCSRFQ0hPICJwYWdlcy4iCisJOzsKKyAgICAgICopCisgICAgICAgICRFQ0hPICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgJEVDSE8gIlgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiB8ICRYc2VkCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKK3Rlc3QgIiRtb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICAkRUNITyAiWCRub25vcHQiIHwgJEdSRVAgc2h0b29sID4vZGV2L251bGw7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCisJZmlsZXM9IiRmaWxlcyAkZGVzdCIKKwlkZXN0PSRhcmcKKwljb250aW51ZQorICAgICAgZmkKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZikKKwljYXNlICIgJGluc3RhbGxfcHJvZyAiIGluCisJKltcXFwgL11jcFwgKikgOzsKKwkqKSBwcmV2PSRhcmcgOzsKKwllc2FjCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJGRlc3QiOyB0aGVuCisJZnVuY19mYXRhbF9oZWxwICJubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKyAgICAgIGVsc2UKKwlmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3QiCisgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KKyAgICAgIHNldCBkdW1teSAkZmlsZXM7IHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgorICAgIGZpCisgICAgY2FzZSAkZGVzdGRpciBpbgorICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKyAgICAqKQorICAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCWNhc2UgJGZpbGUgaW4KKwkqLmxvKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGN1cnJlbnRfbGliZGlycz0iJGN1cnJlbnRfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnV0dXJlX2xpYmRpcnM9IiRmdXR1cmVfbGliZGlycyAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0iJGRpciRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRkZXN0ZGlyIiB8ICRYc2VkIC1lICJzJSRsaWJkaXJcJCUlImAKKworCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KKwkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCisJICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KKwkgIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImVycm9yOiBjYW5ub3QgaW5zdGFsbCBcYCRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCisJICBmaQorCisJICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKKwkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9IiQxIgorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqLmRsbC5hKQorCSAgICAgIHRzdHJpcG1lPSIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAtbiAiJHRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkc3RyaXBsaWIiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiAnZXhpdCAkPycKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgorCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAorCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCisJICAgIGZvciBsaW5rbmFtZQorCSAgICBkbworCSAgICAgIHRlc3QgIiRsaW5rbmFtZSIgIT0gIiRyZWFsbmFtZSIgXAorCQkmJiBmdW5jX3Nob3dfZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRSTSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0aW5zdGFsbF9jbWRzIiAnZXhpdCAkPycKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9IiIKKwljYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCisJICBmaW5hbGl6ZT15ZXMKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCisJICAgICAgZmluYWxpemU9bm8KKwkgICAgZmkKKwkgIGRvbmUKKworCSAgcmVsaW5rX2NvbW1hbmQ9CisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgIG91dHB1dG5hbWU9CisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCisJCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAorCisJICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IgorCQkgICRvcHRfZHJ5X3J1biB8fCAke1JNfXIgIiR0bXBkaXIiCisJCSAgY29udGludWUKKwkgICAgICAgIGZpCisJICAgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgXGAkZmlsZSciCisJICAgICAgZmkKKwkgICAgfQorCSAgZWxzZQorCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCisJICAgIGZpbGU9YCRFQ0hPICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorCisgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRtb2RlIiA9IGluc3RhbGwgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CisKKworIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKKyMgRXh0cmFjdCBzeW1ib2xzIGZyb20gZGxwcmVmaWxlcyBhbmQgY3JlYXRlICR7b3V0cHV0bmFtZX1TLm8gd2l0aAorIyBhIGRscHJlb3BlbiBzeW1ib2wgdGFibGUuCitmdW5jX2dlbmVyYXRlX2Rsc3ltcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9vdXRwdXRuYW1lPSIkMSIKKyAgICBteV9vcmlnaW5hdG9yPSIkMiIKKyAgICBteV9waWNfcD0iJHszLW5vfSIKKyAgICBteV9wcmVmaXg9YCRFQ0hPICIkbXlfb3JpZ2luYXRvciIgfCBzZWQgJ3MlW15hLXpBLVowLTldJV8lZydgCisgICAgbXlfZGxzeW1zPQorCisgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwlteV9kbHN5bXM9IiR7bXlfb3V0cHV0bmFtZX1TLmMiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfS5ubSIKKworCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCisKKwkjIFBhcnNlIHRoZSBuYW1lIGxpc3QgaW50byBhIHNvdXJjZSBmaWxlLgorCWZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKworCSRvcHRfZHJ5X3J1biB8fCAkRUNITyA+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICJYJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJHByb2dmaWxlJyIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkcHJvZ2ZpbGUgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgKmN5Z3dpbiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGUiCisJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICBldmFsICIkTk0gJGRscHJlZmlsZSAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICB9CisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgJEVDSE8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgZmkKKworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAqYWRkcmVzczsKK30gbHRfZGxzeW1saXN0OworIgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZQorICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKyAgIG9uIHBzZXVkby1yZWxvY3MuICAqLyIKKwkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CisJICAqb3NmNSopCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICopCisJICAgIGx0X2Rsc3ltX2NvbnN0PWNvbnN0IDs7CisJICBlc2FjCisKKwkgICRFQ0hPID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorZXh0ZXJuICRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKKyRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7XAorICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKKworCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCisJICBubykKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICAqKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCIgOzsKKwkgICotKi1ocHV4KikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgorCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXN5bXRhYl9jZmxhZ3M9CisJZm9yIGFyZyBpbiAkTFRDRkxBR1M7IGRvCisJICBjYXNlICRhcmcgaW4KKwkgIC1waWUgfCAtZnBpZSB8IC1mUElFKSA7OworCSAgKikgc3ltdGFiX2NmbGFncz0iJHN5bXRhYl9jZmxhZ3MgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaQorCSAgOzsKKwkqKQorCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICopCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKyAgICBmaQorfQorCisjIGZ1bmNfd2luMzJfbGliaWQgYXJnCisjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKKyMKKyMgTmVlZCBhIGxvdCBvZiBnb28gdG8gaGFuZGxlICpib3RoKiBETExzIGFuZCBpbXBvcnQgbGlicworIyBIYXMgdG8gYmUgYSBzaGVsbCBmdW5jdGlvbiBpbiBvcmRlciB0byAnZWF0JyB0aGUgYXJndW1lbnQKKyMgdGhhdCBpcyBzdXBwbGllZCB3aGVuICRmaWxlX21hZ2ljX2NvbW1hbmQgaXMgY2FsbGVkLgorZnVuY193aW4zMl9saWJpZCAoKQoreworICAkb3B0X2RlYnVnCisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCBwZS1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nID4vZGV2L251bGwgOyB0aGVuCisgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgJDEgfAorCSRTRUQgLW4gLWUgJworCSAgICAxLDEwMHsKKwkJLyBJIC97CisJCSAgICBzLC4qLGltcG9ydCwKKwkJICAgIHAKKwkJICAgIHEKKwkJfQorCSAgICB9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiICdleGl0ICQ/JworICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCisgICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKwkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgJE5MMlNQYAorCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisJICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0CisJICAgICRSTSAtcmYgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICRkYXJ3aW5fb3JpZ19kaXIKKwkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJfSAjICEkb3B0X2RyeV9ydW4KKwk7OworICAgICAgKikKKyAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisgICAgZG9uZQorCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisKKworCisjIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxIFthcmc9bm9dCisjCisjIEVtaXQgdGhlIGZpcnN0IHBhcnQgb2YgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZGVzY3JpcHRpb24gYXNzb2NpYXRlZCB3aXRoCisjIGZ1bmNfZW1pdF93cmFwcGVyKCksIGJlbG93LgorZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MV9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDFfYXJnMT0kMQorCWZpCisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPScke1NFRH0gLWUgMXMvXlgvLycKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorICBnZW5lcmF0ZWRfYnlfbGlidG9vbF92ZXJzaW9uPSckbWFjcm9fdmVyc2lvbicKKyAgbm90aW5zdF9kZXBsaWJzPSckbm90aW5zdF9kZXBsaWJzJworZWxzZQorICAjIFdoZW4gd2UgYXJlIHNvdXJjZWQgaW4gZXhlY3V0ZSBtb2RlLCBcJGZpbGUgYW5kIFwkRUNITyBhcmUgYWxyZWFkeSBzZXQuCisgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICBFQ0hPPVwiJHFlY2hvXCIKKyAgICBmaWxlPVwiXCQwXCIKKyAgICAjIE1ha2Ugc3VyZSBlY2hvIHdvcmtzLgorICAgIGlmIHRlc3QgXCJYXCQxXCIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgICAgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICAgICAgc2hpZnQKKyAgICBlbGlmIHRlc3QgXCJYXGB7IFwkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsXGBcIiA9ICdYXHQnOyB0aGVuCisgICAgICAjIFlpcHBlZSwgXCRFQ0hPIHdvcmtzIQorICAgICAgOgorICAgIGVsc2UKKyAgICAgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgXCRFQ0hPIHdpbGwgd29yay4KKyAgICAgIGV4ZWMgJFNIRUxMIFwiXCQwXCIgLS1uby1yZWV4ZWMgXCR7MStcIlwkQFwifQorICAgIGZpCisgIGZpXAorIgorCSRFQ0hPICJcCisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisiCit9CisjIGVuZDogZnVuY19lbWl0X3dyYXBwZXJfcGFydDEKKworIyBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiBbYXJnPW5vXQorIworIyBFbWl0IHRoZSBzZWNvbmQgcGFydCBvZiBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyMgZnVuY19lbWl0X3dyYXBwZXIoKSwgYmVsb3cuCitmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxPSQxCisJZmkKKworCSRFQ0hPICJcCisKKyAgIyBVc3VhbGx5ICdubycsIGV4Y2VwdCBvbiBjeWd3aW4vbWluZ3cgd2hlbiBlbWJlZGRlZCBpbnRvCisgICMgdGhlIGN3cmFwcGVyLgorICBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUj0kZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMQorICBpZiB0ZXN0IFwiXCRXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUlwiID0gXCJ5ZXNcIjsgdGhlbgorICAgICMgc3BlY2lhbCBjYXNlIGZvciAnLicKKyAgICBpZiB0ZXN0IFwiXCR0aGlzZGlyXCIgPSBcIi5cIjsgdGhlbgorICAgICAgdGhpc2Rpcj1cYHB3ZFxgCisgICAgZmkKKyAgICAjIHJlbW92ZSAubGlicyBmcm9tIHRoaXNkaXIKKyAgICBjYXNlIFwiXCR0aGlzZGlyXCIgaW4KKyAgICAqW1xcXFwvXSRvYmpkaXIgKSB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkdGhpc2RpclwiIHwgXCRYc2VkIC1lICdzJVtcXFxcL11bXlxcXFwvXSokJSUnXGAgOzsKKyAgICAkb2JqZGlyICkgICB0aGlzZGlyPS4gOzsKKyAgICBlc2FjCisgIGZpCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRFQ0hPICJcCisgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKKyAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKKworICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCisKKyAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgorCisgICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KKyAgICAgICRNS0RJUiBcIlwkcHJvZ2RpclwiCisgICAgZWxzZQorICAgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgICAgZmkiCisKKwkgICRFQ0hPICJcCisKKyAgICAjIHJlbGluayBleGVjdXRhYmxlIGlmIG5lY2Vzc2FyeQorICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKyAgICAgIGlmIHJlbGlua19jb21tYW5kX291dHB1dD1cYGV2YWwgXCRyZWxpbmtfY29tbWFuZCAyPiYxXGA7IHRoZW4gOgorICAgICAgZWxzZQorCSRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlhcJCRzaGxpYnBhdGhfdmFyXCIgfCBcJFhzZWQgLWUgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorIgorCWNhc2UgJGhvc3QgaW4KKwkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKwkqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgJEVDSE8gIlwKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorCSAgOzsKKworCSopCisJICAkRUNITyAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCWVzYWMKKwkkRUNITyAiXAorICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKyAgZWxzZQorICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KKyAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCisgICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCisgICAgJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisjIGVuZDogZnVuY19lbWl0X3dyYXBwZXJfcGFydDIKKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JDEKKwlmaQorCisJIyBzcGxpdCB0aGlzIHVwIHNvIHRoYXQgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCSMgY2FuIGNhbGwgZWFjaCBwYXJ0IGluZGVwZW5kZW50bHkuCisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgIiR7ZnVuY19lbWl0X3dyYXBwZXJfYXJnMX0iCisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgIiR7ZnVuY19lbWl0X3dyYXBwZXJfYXJnMX0iCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBhcmcKKyMKKyMgQ29udmVydCBwYXRocyB0byBob3N0IGZvcm1hdCB3aGVuIHVzZWQgd2l0aCBidWlsZCB0b29scy4KKyMgSW50ZW5kZWQgZm9yIHVzZSB3aXRoICJuYXRpdmUiIG1pbmd3ICh3aGVyZSBsaWJ0b29sIGl0c2VsZgorIyBpcyBydW5uaW5nIHVuZGVyIHRoZSBtc3lzIHNoZWxsKSwgb3IgaW4gdGhlIGZvbGxvd2luZyBjcm9zcy0KKyMgYnVpbGQgZW52aXJvbm1lbnRzOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMgd2hlcmUgd2luZSBpcyBlcXVpcHBlZCB3aXRoIHRoZSBgd2luZXBhdGgnIGV4ZWN1dGFibGUuCisjIEluIHRoZSBuYXRpdmUgbWluZ3cgY2FzZSwgdGhlIChtc3lzKSBzaGVsbCBhdXRvbWF0aWNhbGx5CisjIGNvbnZlcnRzIHBhdGhzIGZvciBhbnkgbm9uLW1zeXMgYXBwbGljYXRpb25zIGl0IGxhdW5jaGVzLAorIyBidXQgdGhhdCBmYWNpbGl0eSBpc24ndCBhdmFpbGFibGUgZnJvbSBpbnNpZGUgdGhlIGN3cmFwcGVyLgorIyBTaW1pbGFyIGFjY29tbW9kYXRpb25zIGFyZSBuZWNlc3NhcnkgZm9yICRob3N0IG1pbmd3IGFuZAorIyAkYnVpbGQgY3lnd2luLiAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm8gaGFybSBmb3Igb3RoZXIKKyMgJGhvc3QvJGJ1aWxkIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGFib3ZlLgorIworIyBBUkcgaXMgdGhlIHBhdGggKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gZm9yICRob3N0LiBUaGUgcmVzdWx0IGlzIHN0b3JlZAorIyBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICptaW5ndyogKQorICAgICAgICBsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisgICAgICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAgICAgKm1pbmd3KiApICMgYWN0dWFsbHksIG1zeXMKKyAgICAgICAgICAgICMgYXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdAorICAgICAgICAgICAgbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcz0icy9bIF0qXCQvLyIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9YCggY21kIC8vYyBlY2hvICIkMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9zdHJpcF90cmFpbGluZ19zcGFjZXMiICkgMj4vZGV2L251bGwgfHwgZWNobyAiImAKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gY3lncGF0aCAtdyAiJDEiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqICkKKyAgICAgICAgICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8KKyAgICAgICAgICAgICMgZXJyb3IgY29kZSwgc28gd2UgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2YKKyAgICAgICAgICAgICMgc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGNvbW1hbmQgaXMgbm90CisgICAgICAgICAgICAjIGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKKyAgICAgICAgICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aAorICAgICAgICAgICAgIyBlcnJvciBjb2RlIG9mIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zCisgICAgICAgICAgICAjIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfdG9faG9zdF9wYXRoX3RtcDF9IjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBBbGxvdyB3YXJuaW5nIGJlbG93LgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvdWxkIG5vdCBkZXRlcm1pbmUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgICAgICAgZnVuY19lcnJvciAiICAnJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2s6CisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIGZpCit9CisjIGVuZDogZnVuY190b19ob3N0X3BhdGgKKworIyBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgYXJnCisjCisjIENvbnZlcnQgcGF0aGxpc3RzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBTZWUgZnVuY190b19ob3N0X3BhdGgoKSwgYWJvdmUuIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlCisjIGZvbGxvd2luZyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zIChidXQgZG9lcyBubyBoYXJtIGZvcgorIyBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBoZXJlKToKKyMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CisjICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorIyAgICBjeWd3aW4gICAgICAgICAgbWluZ3cKKyMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CisjCisjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvCisjICRob3N0IGZvcm1hdC4gSWYgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgorIyBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0IGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpCisjIG9uIG91dHB1dC4KKyMKKyMgQVJHIGlzIGEgcGF0aGxpc3QgKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCisjIHRoZSBwcm9wZXIgcmVwcmVzZW50YXRpb24gb24gJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGhsaXN0ICgpCit7CisgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KKyAgICAgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9IiQxIgorICAgICAgICAjIE9uY2Ugc2V0IGZvciB0aGlzIGNhbGwsIHRoaXMgdmFyaWFibGUgc2hvdWxkIG5vdCBiZQorICAgICAgICAjIHJlYXNzaWduZWQuIEl0IGlzIHVzZWQgaW4gdGhhIGZhbGxiYWNrIGNhc2UuCisgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxPWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgJFNFRCAtZSAnc3xeOip8fCcgLWUgJ3N8OiokfHwnYAorICAgICAgICBjYXNlICRidWlsZCBpbgorICAgICAgICAgICptaW5ndyogKSAjIEFjdHVhbGx5LCBtc3lzLgorICAgICAgICAgICAgIyBBd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0LgorICAgICAgICAgICAgbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcz0icy9bIF0qXCQvLyIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyPWAoIGNtZCAvL2MgZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcyIgKSAyPi9kZXYvbnVsbCB8fCBlY2hvICIiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICpjeWd3aW4qICkKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyPWBjeWdwYXRoIC13IC1wICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAyIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICogKQorICAgICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aGxpc3RzCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIiCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTPSRJRlMKKyAgICAgICAgICAgIElGUz06CisgICAgICAgICAgICBmb3IgZnVuY190b19ob3N0X3BhdGhsaXN0X2YgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIDsgZG8KKyAgICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIgOyB0aGVuCisgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ7JGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoKHMpIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgICAgICAgZnVuY19lcnJvciAiICAnJDEnIgorICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICAgICAgICMgRmFsbGJhY2suIFRoaXMgbWF5IGJyZWFrIGlmICQxIGNvbnRhaW5zIERPUy1zdHlsZSBkcml2ZQorICAgICAgICAgICMgc3BlY2lmaWNhdGlvbnMuIFRoZSBmaXggaXMgbm90IHRvIGNvbXBsaWNhdGUgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgICAjIGJlbG93LCBidXQgZm9yIHRoZSB1c2VyIHRvIHByb3ZpZGUgYSB3b3JraW5nIHdpbmUgaW5zdGFsbGF0aW9uCisgICAgICAgICAgIyB3aXRoIHdpbmVwYXRoIHNvIHRoYXQgcGF0aCB0cmFuc2xhdGlvbiBpbiB0aGUgY3Jvc3MtdG8tbWluZ3cKKyAgICAgICAgICAjIGNhc2Ugd29ya3MgcHJvcGVybHkuCisgICAgICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3M9InN8Onw7fGciCisgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8XAorICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9uaXhfdG9fZG9zImAKKyAgICAgICAgZmkKKyAgICAgICAgIyBOb3csIGFkZCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3JzIGJhY2sKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgOiogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSI7JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAgICo6ICkgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ7IgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aGxpc3QKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIiRTSEVMTCAkb3V0cHV0IiwKKyAgIGJ1dCBjb3VsZCBldmVudHVhbGx5IGFic29yYiBhbGwgb2YgdGhlIHNjcmlwdHMgZnVuY3Rpb25hbGl0eSBhbmQKKyAgIGV4ZWMgJG9iamRpci8kb3V0cHV0bmFtZSBkaXJlY3RseS4KKyovCitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPGRpcmVjdC5oPgorIyBpbmNsdWRlIDxwcm9jZXNzLmg+CisjIGluY2x1ZGUgPGlvLmg+CisjIGRlZmluZSBzZXRtb2RlIF9zZXRtb2RlCisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjIGlmZGVmIF9fQ1lHV0lOX18KKyMgIGluY2x1ZGUgPGlvLmg+CisjICBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2ludCBwdXRlbnYgKGNoYXIgKik7CitpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaWYgZGVmaW5lZChQQVRIX01BWCkKKyMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKKyNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgorI2Vsc2UKKyMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyBkZWZpbmUgU19JWE9USCAwCisjZW5kaWYKKyNpZm5kZWYgU19JWEdSUAorIyBkZWZpbmUgU19JWEdSUCAwCisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCisjIGRlZmluZSBzdGF0IF9zdGF0CisjIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIGludHB0cl90IGludAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUgorIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKKyMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCisgIGRlZmluZWQgKF9fT1MyX18pCisjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKKyMgZW5kaWYKKyMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQorI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCisJKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjaWZkZWYgX19DWUdXSU5fXworIyBkZWZpbmUgRk9QRU5fV0IgIndiIgorI2VuZGlmCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyN1bmRlZiBMVFdSQVBQRVJfREVCVUdQUklOVEYKKyNpZiBkZWZpbmVkIERFQlVHV1JBUFBFUgorIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpIGx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiBhcmdzCitzdGF0aWMgdm9pZAorbHR3cmFwcGVyX2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgdmFfZW5kIChhcmdzKTsKK30KKyNlbHNlCisjIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChjb25zdCBjaGFyICphcmcpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoY29uc3QgY2hhciAqYXJnKTsKK3ZvaWQgbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoY29uc3QgY2hhciAqYXJnKTsKK2ludCBsdF9zcGxpdF9uYW1lX3ZhbHVlIChjb25zdCBjaGFyICphcmcsIGNoYXIqKiBuYW1lLCBjaGFyKiogdmFsdWUpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3JpcHRfdGV4dF9wYXJ0MSA9CitFT0YKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSB5ZXMgfAorCSAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAgIC1lICdzL14vICAiLycgLWUgJ3MvJC9cXG4iLycKKwkgICAgZWNobyAiOyIKKwkgICAgY2F0IDw8RU9GCisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3JpcHRfdGV4dF9wYXJ0MiA9CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXJfcGFydDIgeWVzIHwKKwkgICAgICAgICRTRUQgLWUgJ3MvXChbXFwiXVwpL1xcXDEvZycgXAorCSAgICAgICAgICAgICAtZSAncy9eLyAgIi8nIC1lICdzLyQvXFxuIi8nCisJICAgIGVjaG8gIjsiCisKKwkgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiR0ZW1wX3JwYXRoIgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGZpCisKKworCSAgICBjYXQgPDwiRU9GIgorCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgorI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggIDUKKworc3RhdGljIGNvbnN0IHNpemVfdCBvcHRfcHJlZml4X2xlbiAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIOworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZW52X3NldF9vcHRfbGVuICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCArIDc7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X3NldF9vcHQgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LXNldCI7CisgIC8qIGFyZ3VtZW50IGlzIHB1dGVudi1zdHlsZSAiZm9vPWJhciIsIHZhbHVlIG9mIGZvbyBpcyBzZXQgdG8gYmFyICovCisKK3N0YXRpYyBjb25zdCBzaXplX3QgZW52X3ByZXBlbmRfb3B0X2xlbiA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCArIDExOworc3RhdGljIGNvbnN0IGNoYXIgKmVudl9wcmVwZW5kX29wdCAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImVudi1wcmVwZW5kIjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgbmV3IHZhbHVlIG9mIGZvbyBpcyBiYXIke2Zvb30gKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfYXBwZW5kX29wdF9sZW4gID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgMTA7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X2FwcGVuZF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LWFwcGVuZCI7CisgIC8qIGFyZ3VtZW50IGlzIHB1dGVudi1zdHlsZSAiZm9vPWJhciIsIG5ldyB2YWx1ZSBvZiBmb28gaXMgJHtmb299YmFyICovCisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludHB0cl90IHJ2YWwgPSAxMjc7CisKKyAgaW50IGk7CisKKyAgcHJvZ3JhbV9uYW1lID0gKGNoYXIgKikgeHN0cmR1cCAoYmFzZV9uYW1lIChhcmd2WzBdKSk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgYXJndlswXSAgICAgIDogJXNcbiIsIGFyZ3ZbMF0pKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQgKi8KKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKwl7CitFT0YKKwkgICAgY2FzZSAiJGhvc3QiIGluCisJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKKwkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncworCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgorCQk7OworCSAgICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorCSAgcHJpbnRmICgiJXMiLCBzY3JpcHRfdGV4dF9wYXJ0MSk7CisJICBwcmludGYgKCIlcyIsIHNjcmlwdF90ZXh0X3BhcnQyKTsKKwkgIHJldHVybiAwOworCX0KKyAgICB9CisKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJDb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKwkJCSAgdG1wX3BhdGhzcGVjKSk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0IDogJXNcbiIsCisJCQkgIGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCggYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCQkgIHRhcmdldF9uYW1lKSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9zZXRfb3B0LCBlbnZfc2V0X29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfc2V0X29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfc2V0X29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9zZXRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfc2V0X29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBlbnZfcHJlcGVuZF9vcHQsIGVudl9wcmVwZW5kX29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfcHJlcGVuZF9vcHRfbGVuXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBhcmd2W2ldICsgZW52X3ByZXBlbmRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9wcmVwZW5kX29wdF9sZW5dID09ICdcMCcgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9wcmVwZW5kX29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBlbnZfYXBwZW5kX29wdCwgZW52X2FwcGVuZF9vcHRfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGFyZ3ZbaV1bZW52X2FwcGVuZF9vcHRfbGVuXSA9PSAnPScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnAgPSBhcmd2W2ldICsgZW52X2FwcGVuZF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAocCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoYXJndltpXVtlbnZfYXBwZW5kX29wdF9sZW5dID09ICdcMCcgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X2FwcGVuZF9vcHQpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIG9wdF9wcmVmaXhfbGVuKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKyAgICAgICAgICAgICB0aGV5IGFyZSBhbGxvd2VkIHRvIHVzZSBvcHRpb25zIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisgICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCisgICAgICAgICAgICAgb3IgYSBjb25maWd1cmUuYWMtc2V0dGFibGUgdmFsdWUuCisgICAgICAgICAgICovCisgICAgICAgICAgbHRfZmF0YWwgKCJVbnJlY29nbml6ZWQgb3B0aW9uIGluICVzIG5hbWVzcGFjZTogJyVzJyIsCisgICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKKyAgICAgICAgfQorICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7CisgICAgfQorICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAgICAgKCgiKG1haW4pIGx0X2FyZ3ZfemVybyA6ICVzXG4iLCAobHRfYXJndl96ZXJvID8gbHRfYXJndl96ZXJvIDogIjxOVUxMPiIpKSk7CisgIGZvciAoaSA9IDA7IGkgPCBuZXdhcmdjOyBpKyspCisgICAgeworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsIGksIChuZXdhcmd6W2ldID8gbmV3YXJneltpXSA6ICI8TlVMTD4iKSkpOworICAgIH0KKworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKyAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KKyAgcnZhbCA9IF9zcGF3bnYgKF9QX1dBSVQsIGx0X2FyZ3ZfemVybywgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBuZXdhcmd6KTsKKyAgaWYgKHJ2YWwgPT0gLTEpCisgICAgeworICAgICAgLyogZmFpbGVkIHRvIHN0YXJ0IHByb2Nlc3MgKi8KKyAgICAgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZmFpbGVkIHRvIGxhdW5jaCB0YXJnZXQgXCIlc1wiOiBlcnJubyA9ICVkXG4iLCBsdF9hcmd2X3plcm8sIGVycm5vKSk7CisgICAgICByZXR1cm4gMTI3OworICAgIH0KKyAgcmV0dXJuIHJ2YWw7CitFT0YKKwkJOzsKKwkgICAgICAqKQorCQljYXQgPDwiRU9GIgorICBleGVjdiAobHRfYXJndl96ZXJvLCBuZXdhcmd6KTsKKyAgcmV0dXJuIHJ2YWw7IC8qID0xMjcsIGJ1dCBhdm9pZHMgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgKi8KK0VPRgorCQk7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKK30KKwordm9pZCAqCit4bWFsbG9jIChzaXplX3QgbnVtKQoreworICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKKyAgICBuYW1lICs9IDI7CisjZW5kaWYKKworICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCisgICAgICBiYXNlID0gbmFtZSArIDE7CisgIHJldHVybiBiYXNlOworfQorCitpbnQKK2NoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoY2hlY2tfZXhlY3V0YWJsZSkgIDogJXNcbiIsCisJCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKKyAgICAgICYmIChzdC5zdF9tb2RlICYgKFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCkpKQorICAgIHJldHVybiAxOworICBlbHNlCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBpbnQgcnZhbCA9IDA7CisgIHN0cnVjdCBzdGF0IHN0OworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFrZV9leGVjdXRhYmxlKSAgIDogJXNcbiIsCisJCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgIHsKKyAgICAgIHJ2YWwgPSBjaG1vZCAocGF0aCwgc3Quc3RfbW9kZSB8IFNfSVhPVEggfCBTX0lYR1JQIHwgU19JWFVTUik7CisgICAgfQorICByZXR1cm4gcnZhbDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlCisgICBEb2VzIG5vdCBjaGFzZSBzeW1saW5rcywgZXZlbiBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoZW0uCisqLworY2hhciAqCitmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCit7CisgIGludCBoYXNfc2xhc2ggPSAwOworICBjb25zdCBjaGFyICpwOworICBjb25zdCBjaGFyICpwX25leHQ7CisgIC8qIHN0YXRpYyBidWZmZXIgZm9yIGdldGN3ZCAqLworICBjaGFyIHRtcFtMVF9QQVRITUFYICsgMV07CisgIGludCB0bXBfbGVuOworICBjaGFyICpjb25jYXRfbmFtZTsKKworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGZpbmRfZXhlY3V0YWJsZSkgICA6ICVzXG4iLAorCQkJICB3cmFwcGVyID8gKCp3cmFwcGVyID8gd3JhcHBlciA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgICAgfQorI2VuZGlmCisKKyAgZm9yIChwID0gd3JhcHBlcjsgKnA7IHArKykKKyAgICBpZiAoKnAgPT0gJy8nKQorICAgICAgeworCWhhc19zbGFzaCA9IDE7CisJYnJlYWs7CisgICAgICB9CisgIGlmICghaGFzX3NsYXNoKQorICAgIHsKKyAgICAgIC8qIG5vIHNsYXNoZXM7IHNlYXJjaCBQQVRIICovCisgICAgICBjb25zdCBjaGFyICpwYXRoID0gZ2V0ZW52ICgiUEFUSCIpOworICAgICAgaWYgKHBhdGggIT0gTlVMTCkKKwl7CisJICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKwkgICAgeworCSAgICAgIGNvbnN0IGNoYXIgKnE7CisJICAgICAgc2l6ZV90IHBfbGVuOworCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCisJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQorCQkgIGJyZWFrOworCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKwkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisJCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmNhdF9uYW1lID0KKwkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7CisJCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkJcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7CisJICAgIH0KKwl9CisgICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLworICAgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCQkgICAgICB0bXBfcGF0aHNwZWMpKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNoYXIgKmVycnN0ciA9IHN0cmVycm9yIChlcnJubyk7CisJICBsdF9mYXRhbCAoIkVycm9yIGFjY2Vzc2luZyBmaWxlICVzICglcykiLCB0bXBfcGF0aHNwZWMsIGVycnN0cik7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKCJDb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKyAgICB9CisgIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOworI2VuZGlmCit9CisKK2NoYXIgKgorc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKyAgc2l6ZV90IGxlbiwgcGF0bGVuOworCisgIGFzc2VydCAoc3RyICE9IE5VTEwpOworICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4gKHN0cik7CisgIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKKworICBpZiAocGF0bGVuIDw9IGxlbikKKyAgICB7CisgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisJKnN0ciA9ICdcMCc7CisgICAgfQorICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICptb2RlLAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQoreworICBmcHJpbnRmIChzdGRlcnIsICIlczogJXM6ICIsIHByb2dyYW1fbmFtZSwgbW9kZSk7CisgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKKyAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisKKyAgaWYgKGV4aXRfc3RhdHVzID49IDApCisgICAgZXhpdCAoZXhpdF9zdGF0dXMpOworfQorCit2b2lkCitsdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3ZvaWQKK2x0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK2ludAorbHRfc3BsaXRfbmFtZV92YWx1ZSAoY29uc3QgY2hhciAqYXJnLCBjaGFyKiogbmFtZSwgY2hhcioqIHZhbHVlKQoreworICBjb25zdCBjaGFyICpwOworICBpbnQgbGVuOworICBpZiAoIWFyZyB8fCAhKmFyZykKKyAgICByZXR1cm4gMTsKKworICBwID0gc3RyY2hyIChhcmcsIChpbnQpJz0nKTsKKworICBpZiAoIXApCisgICAgcmV0dXJuIDE7CisKKyAgKnZhbHVlID0geHN0cmR1cCAoKytwKTsKKworICBsZW4gPSBzdHJsZW4gKGFyZykgLSBzdHJsZW4gKCp2YWx1ZSk7CisgICpuYW1lID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgc3RybmNweSAoKm5hbWUsIGFyZywgbGVuLTEpOworICAoKm5hbWUpW2xlbiAtIDFdID0gJ1wwJzsKKworICByZXR1cm4gMDsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9zZXRfb3B0LCBhcmcpOworICAgIH0KKworICBsdF9zZXRlbnYgKG5hbWUsIHZhbHVlKTsKKyAgWEZSRUUgKG5hbWUpOworICBYRlJFRSAodmFsdWUpOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfcHJlcGVuZCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworICBjaGFyICpuZXdfdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9wcmVwZW5kX29wdCwgYXJnKTsKKyAgICB9CisKKyAgbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgIFhGUkVFIChuZXdfdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgY2hhciAqbmFtZSA9IE5VTEw7CisgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgY2hhciAqbmV3X3ZhbHVlID0gTlVMTDsKKworICBpZiAobHRfc3BsaXRfbmFtZV92YWx1ZSAoYXJnLCAmbmFtZSwgJnZhbHVlKSAhPSAwKQorICAgIHsKKyAgICAgIFhGUkVFIChuYW1lKTsKKyAgICAgIFhGUkVFICh2YWx1ZSk7CisgICAgICBsdF9mYXRhbCAoImJhZCBhcmd1bWVudCBmb3IgJXM6ICclcyciLCBlbnZfYXBwZW5kX29wdCwgYXJnKTsKKyAgICB9CisKKyAgbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDEpOworICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgIFhGUkVFIChuZXdfdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlID8gdmFsdWUgOiAiPE5VTEw+IikpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgICB7CisgICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKwordm9pZAorbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKKworRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgorZnVuY19tb2RlX2xpbmsgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCisgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0CisgICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKKyAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5CisgICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KKyAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgICopCisgICAgICBhbGxvd191bmRlZmluZWQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAorICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAorCisgICAgY29tcGlsZV9ycGF0aD0KKyAgICBmaW5hbGl6ZV9ycGF0aD0KKyAgICBjb21waWxlX3NobGlicGF0aD0KKyAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9CisgICAgY29udmVuaWVuY2U9CisgICAgb2xkX2NvbnZlbmllbmNlPQorICAgIGRlcGxpYnM9CisgICAgb2xkX2RlcGxpYnM9CisgICAgY29tcGlsZXJfZmxhZ3M9CisgICAgbGlua2VyX2ZsYWdzPQorICAgIGRsbHNlYXJjaHBhdGg9CisgICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCisgICAgaW5zdF9wcmVmaXhfZGlyPQorICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQorCisgICAgYXZvaWRfdmVyc2lvbj1ubworICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBub25fcGljX29iamVjdHM9CisgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CisgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCisgICAgcHJlbG9hZD1ubworICAgIHByZXY9CisgICAgcHJldmFyZz0KKyAgICByZWxlYXNlPQorICAgIHJwYXRoPQorICAgIHhycGF0aD0KKyAgICBwZXJtX3JwYXRoPQorICAgIHRlbXBfcnBhdGg9CisgICAgdGhyZWFkX3NhZmU9bm8KKyAgICB2aW5mbz0KKyAgICB2aW5mb19udW1iZXI9bm8KKyAgICB3ZWFrX2xpYnM9CisgICAgc2luZ2xlX21vZHVsZT0iJHt3bH0tc2luZ2xlX21vZHVsZSIKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCWNhc2UgJHByZXYgaW4KKwlvdXRwdXQpCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAT1VUUFVUQCIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcHJldiBpbgorCWRsZmlsZXN8ZGxwcmVmaWxlcykKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBTWU1GSUxFQCIKKwkgICAgcHJlbG9hZD15ZXMKKwkgIGZpCisJICBjYXNlICRhcmcgaW4KKwkgICoubGEgfCAqLmxvKSA7OyAgIyBXZSBoYW5kbGUgdGhlc2UgY2FzZXMgYmVsb3cuCisJICBmb3JjZSkKKwkgICAgaWYgdGVzdCAiJGRsc2VsZiIgPSBubzsgdGhlbgorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgc2VsZikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzICYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgIT0geWVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbHNlCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWV4cHN5bXMpCisJICBleHBvcnRfc3ltYm9scz0iJGFyZyIKKwkgIHRlc3QgLWYgIiRhcmciIFwKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZnJhbWV3b3JrKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgICAqLSotZGFyd2luKikKKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworCQkqKSBkZXBsaWJzPSIkZGVwbGlicyAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgbW9yZWFyZ3M9IiRtb3JlYXJncyAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJCWZpCisKKwkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJlbGVhc2UpCisJICByZWxlYXNlPSItJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlycGF0aCB8IHhycGF0aCkKKwkgICMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCSAgY2FzZSAkYXJnIGluCisJICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJICAqKQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCisJICAgIGNhc2UgIiRycGF0aCAiIGluCisJICAgICoiICRhcmcgIiopIDs7CisJICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZWxzZQorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRhcmciIDs7CisJICAgIGVzYWMKKwkgIGZpCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorCSAgc2hyZXh0X2NtZHM9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJd2VhaykKKwkgIHdlYWtfbGlicz0iJHdlYWtfbGlicyAkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXhjY2xpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwkqKQorCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMKKyAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCisKKyAgICAgIHByZXZhcmc9IiRhcmciCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisJOzsKKworICAgICAgLWF2b2lkLXZlcnNpb24pCisJYXZvaWRfdmVyc2lvbj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbG9wZW4pCisJcHJldj1kbGZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZGxwcmVvcGVuKQorCXByZXY9ZGxwcmVmaWxlcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1keW5hbWljKQorCWV4cG9ydF9keW5hbWljPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKKwlmaQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlpZiB0ZXN0IC16ICIkZGlyIjsgdGhlbgorCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgXGAtTCcgb3B0aW9uIgorCSAgZmkKKwlmaQorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCisJICBkaXI9IiRhYnNkaXIiCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqKSA7OworCSopCisJICBkZXBsaWJzPSIkZGVwbGlicyAtTCRkaXIiCisJICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKwkgIDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIlgkZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1sKikKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKikKKwkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vczIqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJIGNhc2UgJGhvc3QgaW4KKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tb2R1bGUpCisJbW9kdWxlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUcnU2NCBVTklYIHVzZXMgLW1vZGVsIFthcmddIHRvIGRldGVybWluZSB0aGUgbGF5b3V0IG9mIEMrKworICAgICAgIyBjbGFzc2VzLCBuYW1lIG1hbmdsaW5nLCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLgorICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKyAgICAgIC1tb2RlbHwtYXJjaHwtaXN5c3Jvb3QpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGFyZyIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbXVsdGlfbW9kdWxlKQorCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQorCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCisJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby11bmRlZmluZWQpCisJYWxsb3dfdW5kZWZpbmVkPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtb2JqZWN0bGlzdCkKKwlwcmV2PW9iamVjdGxpc3QKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKwkgIDs7CisJZXNhYworCWNhc2UgIiR4cnBhdGggIiBpbgorCSoiICRkaXIgIiopIDs7CisJKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQorCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CisJIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cworCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAorCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCisJY29udGludWUKKwk7OworCisgICAgICAtdGhyZWFkLXNhZmUpCisJdGhyZWFkX3NhZmU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1pbmZvKQorCXByZXY9dmluZm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXdlYWspCisgICAgICAgIHByZXY9d2VhaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgYXJnPSIkYXJnICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtV2wsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICMgLTY0LCAtbWlwc1swLTldIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC1yWzAtOV1bMC05XSogc3BlY2lmaWVzIHRoZSBwcm9jZXNzb3Igb24gdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgb24gdGhlIFN1biBjb21waWxlcgorICAgICAgIyArREEqLCArREQqIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqIHBhc3MgdGhyb3VnaCBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKyAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCisgICAgICAjIC1GL3BhdGggZ2l2ZXMgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCisgICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCisgICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCisgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgorICAgICAgLSogfCArKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlvYmpzPSIkb2JqcyAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkgIHBpY19vYmplY3Q9CisJICBub25fcGljX29iamVjdD0KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgIiRhcmciCisKKwkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCWRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCSAgICAgIHByZXY9CisJICAgIGZpCisKKwkgICAgIyBBIFBJQyBvYmplY3QuCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgYXJnPSIkcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgTm9uLVBJQyBvYmplY3QuCisJICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBmaQorCWVsc2UKKwkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJICAgIGZ1bmNfbG8ybyAiJGFyZyIKKwkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLiRsaWJleHQpCisJIyBBbiBhcmNoaXZlLgorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJb2xkX2RlcGxpYnM9IiRvbGRfZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgKi5sYSkKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisKKwlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwkgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICBwcmV2PQorCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisJICBwcmV2PQorCWVsc2UKKwkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBhcmd1bWVudC4KKyAgICAgICopCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICBmaQorCisgICAgb2xkbGlicz0KKyAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CisgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKworICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlhcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFhzZWQgLWUgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKworICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICIiKQorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgc3BlY2lhbGRlcGxpYnM9CisKKyAgICBsaWJzPQorICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQorICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwczsgdGhlbgorCWZvciBwcmVfcG9zdF9kZXAgaW4gJHByZWRlcHMgJHBvc3RkZXBzOyBkbworCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkcHJlX3Bvc3RfZGVwcyIgOzsKKwkgIGVzYWMKKwkgIHByZV9wb3N0X2RlcHM9IiRwcmVfcG9zdF9kZXBzICRwcmVfcG9zdF9kZXAiCisJZG9uZQorICAgICAgZmkKKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgZmkKKworICAgIGRlcGxpYnM9CisgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKyAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKKyAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgorCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbworCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5sYSkgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworCisgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KKyAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQorICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisJIyMgRklYTUU6IEZpbmQgdGhlIHBsYWNlIHdoZXJlIHRoZSBsaXN0IGlzIHJlYnVpbHQgaW4gdGhlIHdyb25nCisJIyMgICAgICAgIG9yZGVyLCBhbmQgZml4IGl0IHRoZXJlIHByb3Blcmx5CisgICAgICAgIHRtcF9kZXBsaWJzPQorCWZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICB0bXBfZGVwbGlicz0iJGRlcGxpYiAkdG1wX2RlcGxpYnMiCisJZG9uZQorCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgorCWxpYnM9IiRkZXBsaWJzIgorCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKKwlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkbGliIiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworICAgICAgICAgICAgZGVwbGliX2Jhc2U9YCRFQ0hPICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGRlcGxpYnM9IiRkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlkb25lCisJbGlicz0iJGRscHJlZmlsZXMiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcworCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisKKyAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCisJbGliPQorCWZvdW5kPW5vCisJY2FzZSAkZGVwbGliIGluCisJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKKwkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkJICAgIGVsc2UKKwkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgIGZpCisJCSAgICBjb250aW51ZQorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCSoubHRmcmFtZXdvcmspCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgY29udGludWUKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgOzsKKwkgICopCisJICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisJKi4kbGliZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgICMgTGlua2luZyBjb252ZW5pZW5jZSBtb2R1bGVzIGludG8gc2hhcmVkIGxpYnJhcmllcyBpcyBhbGxvd2VkLAorCSAgICAjIGJ1dCBsaW5raW5nIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMgaXMgbm9uLXBvcnRhYmxlLgorCSAgICBjYXNlICIgJGRscHJlY29udmVuaWVuY2VsaWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICAgKikKKwkgICAgICB2YWxpZF9hX2xpYj1ubworCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJCW1hdGNoX3BhdHRlcm4qKQorCQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCQkgIGlmIGV2YWwgIlwkRUNITyBcIlgkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFhzZWQgLWUgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPXllcworCQkgIGZpCisJCTs7CisJCXBhc3NfYWxsKQorCQkgIHZhbGlkX2FfbGliPXllcworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCQkkRUNITworCQkkRUNITyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSRFQ0hPICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKKwkJJEVDSE8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZWxzZQorCQkkRUNITworCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisJCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorCQlkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjb250aW51ZQorCSAgICA7OworCSAgcHJvZykKKwkgICAgaWYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgOzsgIyAqLiRsaWJleHQKKwkqLmxvIHwgKi4kb2JqZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAorCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgorCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJJURFUExJQlMlKQorCSAgYWxsZGVwbGlicz15ZXMKKwkgIGNvbnRpbnVlCisJICA7OworCWVzYWMgIyBjYXNlICRkZXBsaWIKKworCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWRsbmFtZT0KKwlkbG9wZW49CisJZGxwcmVvcGVuPQorCWxpYmRpcj0KKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCWluaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisJIyBJZiB0aGUgbGlicmFyeSB3YXMgaW5zdGFsbGVkIHdpdGggYW4gb2xkIHJlbGVhc2Ugb2YgbGlidG9vbCwKKwkjIGl0IHdpbGwgbm90IHJlZGVmaW5lIHZhcmlhYmxlcyBpbnN0YWxsZWQsIG9yIHNob3VsZG5vdGxpbmsKKwlpbnN0YWxsZWQ9eWVzCisJc2hvdWxkbm90bGluaz1ubworCWF2b2lkdGVtcHJwYXRoPQorCisKKwkjIFJlYWQgdGhlIC5sYSBmaWxlCisJZnVuY19zb3VyY2UgIiRsaWIiCisKKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorCWlmIHRlc3QgLW4gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIjsgdGhlbgorCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFhzZWQgLWUgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAorCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKwkgICAgICAqKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIlggJGRlcGVuZGVuY3lfbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAorCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBkbGZpbGVzPSIkZGxmaWxlcyAkZGxvcGVuIgorCSAgdGVzdCAtbiAiJGRscHJlb3BlbiIgJiYgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGRscHJlb3BlbiIKKwlmaQorCisJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgIyBPbmx5IGNoZWNrIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJICAgIGZpCisJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKwkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIG9sZF9jb252ZW5pZW5jZT0iJG9sZF9jb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCisJICBmaQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBjb252CisKKworCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KKwlsaW5rbGliPQorCWZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgIGxpbmtsaWI9IiRsIgorCWRvbmUKKwlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJICBmaQorCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQlkbHByZWNvbnZlbmllbmNlbGlicz0iJGRscHJlY29udmVuaWVuY2VsaWJzICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kZGxuYW1lIgorCSAgZWxzZQorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRsaW5rbGliIgorCSAgZmkKKwlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisKKwlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcworCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkKKworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCisJICBsaW5rYWxsZGVwbGlicz1ubworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGZpCisKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICAgICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQkgOzsKKwkgICAgZXNhYworCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CisJICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUgIyBmb3IgZGVwbGliCisJICBjb250aW51ZQorCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8CisJICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGgkYWJzZGlyOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIHVzZV9zdGF0aWNfbGlicz1ubworCWZpCisJaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCisJICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorCSAgICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24gc29tZQorCSAgIyBzeXN0ZW1zIChkYXJ3aW4pLiAgRG9uJ3QgYmxlYXQgYWJvdXQgZGxvcGVuZWQgbW9kdWxlcyB0aG91Z2ghCisJICBkbG9wZW5tb2R1bGU9IiIKKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9IiRkbHByZW1vZHVsZXRlc3QiCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgICRFQ0hPCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKKwkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgorCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQorCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKKwkgICAgc2hpZnQKKwkgICAgcmVhbG5hbWU9IiQxIgorCSAgICBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkgICAgIyB1c2UgZGxuYW1lIGlmIHdlIGdvdCBpdC4gaXQncyBwZXJmZWN0bHkgZ29vZCwgbm8/CisJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgc29uYW1lPSIkZGxuYW1lIgorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCisJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRzb3Jvb3QiCisJICAgIHNvbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisKKwkgICAgIyBDcmVhdGUgJG5ld2xpYgorCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbmV3bGliIjsgdGhlbiA6OyBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiICdleGl0ICQ/JworCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgIGxpYl9saW5rZWQ9eWVzCisJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgorCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QKKwkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCisJCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKKwkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCisJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCisJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorCQkJICAkRUNITworCQkJICAkRUNITyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCisJCQkgICRFQ0hPICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCWZpCisJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJICAgICAgZmkKKwkJICAgIGZpCisJCWVzYWMKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0iJGRpciIgOzsKKwkJZXNhYworCQlhZGRfZGlyPSItTCRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IG5vOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgIHJlbGluaykKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCisJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKKwkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgorCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCQkqIjokbGliZGlyOiIqKSA7OworCQkqKSBmaW5hbGl6ZV9zaGxpYnBhdGg9IiRmaW5hbGl6ZV9zaGxpYnBhdGgkbGliZGlyOiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgYWRkX3NobGlicGF0aD0KKwkgICAgYWRkX2Rpcj0KKwkgICAgYWRkPQorCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgorCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgorCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgorCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkJYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJY2FzZSAkbGliZGlyIGluCisJCSAgW1xcL10qKQorCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgIGZpCisJICBmaQorCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAorCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgorCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICAkRUNITworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICAkRUNITyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCisJICAgICAgJEVDSE8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKKwkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCQkkRUNITworCQkkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJCSRFQ0hPICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQkkRUNITyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgorCQkkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAorCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8CisJICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCisJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgICAtTCopIHBhdGg9IiRkZXBsaWIiIDs7CisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfZGlybmFtZSAiJGRlcGxpYiIgIiIgIi4iCisJCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CisJCSopCisJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkJICAgIGFic2Rpcj0iJGRpciIKKwkJICBmaQorCQkgIDs7CisJCWVzYWMKKwkJaWYgJEdSRVAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotZGFyd2luKikKKwkJICBkZXBkZXBsPQorCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyIgOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzIDsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiIDsgdGhlbgorCQkgICAgICBkZXBkZXBsPSIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0x9IC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBmaQorCQkgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CisJCSAgICBmaQorCQkgIGZpCisJCSAgOzsKKwkJKikKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICA7OworCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaQorICAgICAgZmkKKyAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKKwlmb3IgZGVwbGliIGluICRzYXZlX2RlcGxpYnM7IGRvCisJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCWRvbmUKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gZGxvcGVuOyB0aGVuCisJaWYgdGVzdCAiJHBhc3MiICE9IGNvbnY7IHRoZW4KKwkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgIGxpYl9zZWFyY2hfcGF0aD0KKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKwkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9CisJZmkKKworCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KKwkgIHZhcnM9ImRlcGxpYnMiCisJZWxzZQorCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisJZmkKKwlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKwkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgorCSAgbmV3X2xpYnM9CisJICBmb3IgZGVwbGliIGluICR0bXBfbGliczsgZG8KKwkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KKwkgICAgIyAgICAgICAgdGhhdCBzb21lIG5hc3R5IGRlcGVuZGVuY3kgbG9vcCBpc24ndCBhY2NpZGVudGFsbHkKKwkgICAgIyAgICAgICAgYnJva2VuOgorCSAgICAjbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIgorCSAgICAjIFByYWdtYXRpY2FsbHksIHRoaXMgc2VlbXMgdG8gY2F1c2UgdmVyeSBmZXcgcHJvYmxlbXMgaW4KKwkgICAgIyBwcmFjdGljZToKKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAtUiopIDs7CisJICAgICopCisJICAgICAgIyBBbmQgaGVyZSBpcyB0aGUgcmVhc29uOiB3aGVuIGEgbGlicmFyeSBhcHBlYXJzIG1vcmUKKwkgICAgICAjIHRoYW4gb25jZSBhcyBhbiBleHBsaWNpdCBkZXBlbmRlbmNlIG9mIGEgbGlicmFyeSwgb3IKKwkgICAgICAjIGlzIGltcGxpY2l0bHkgbGlua2VkIGluIG1vcmUgdGhhbiBvbmNlIGJ5IHRoZQorCSAgICAgICMgY29tcGlsZXIsIGl0IGlzIGNvbnNpZGVyZWQgc3BlY2lhbCwgYW5kIG11bHRpcGxlCisJICAgICAgIyBvY2N1cnJlbmNlcyB0aGVyZW9mIGFyZSBub3QgcmVtb3ZlZC4gIENvbXBhcmUgdGhpcworCSAgICAgICMgd2l0aCBoYXZpbmcgdGhlIHNhbWUgbGlicmFyeSBiZWluZyBsaXN0ZWQgYXMgYQorCSAgICAgICMgZGVwZW5kZW5jeSBvZiBtdWx0aXBsZSBvdGhlciBsaWJyYXJpZXM6IGluIHRoaXMgY2FzZSwKKwkgICAgICAjIHdlIGtub3cgKHBlZGFudGljYWxseSwgd2UgYXNzdW1lKSB0aGUgbGlicmFyeSBkb2VzIG5vdAorCSAgICAgICMgbmVlZCB0byBiZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIGtlZXAgb25seSB0aGUKKwkgICAgICAjIGxhc3QgY29weS4gIFRoaXMgaXMgbm90IGFsd2F5cyByaWdodCwgYnV0IGl0IGlzIHJhcmUKKwkgICAgICAjIGVub3VnaCB0aGF0IHdlIHJlcXVpcmUgdXNlcnMgdGhhdCByZWFsbHkgbWVhbiB0byBwbGF5CisJICAgICAgIyBzdWNoIHVucG9ydGFibGUgbGlua2luZyB0cmlja3MgdG8gbGluayB0aGUgbGlicmFyeQorCSAgICAgICMgdXNpbmcgLVdsLC1sbmFtZSwgc28gdGhhdCBsaWJ0b29sIGRvZXMgbm90IGNvbnNpZGVyIGl0CisJICAgICAgIyBmb3IgZHVwbGljYXRlIHJlbW92YWwuCisJICAgICAgY2FzZSAiICRzcGVjaWFsZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OworCSAgICAgICopCisJCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCQkqIiAkZGVwbGliICIqKSA7OworCQkqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJCWVzYWMKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRuZXdfbGliczsgZG8KKwkgICAgY2FzZSAkZGVwbGliIGluCisJICAgIC1MKikKKwkgICAgICBjYXNlICIgJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAgICopIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJICBldmFsICR2YXI9XCIkdG1wX2xpYnNcIgorCWRvbmUgIyBmb3IgdmFyCisgICAgICBmaQorICAgICAgIyBMYXN0IHN0ZXA6IHJlbW92ZSBydW50aW1lIGxpYnMgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKyAgICAgICMgKHRoZXkgc3RheSBpbiBkZXBsaWJzKQorICAgICAgdG1wX2xpYnM9CisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzIDsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0iIgorCSAgOzsKKwllc2FjCisJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCSAgdG1wX2xpYnM9IiR0bXBfbGlicyAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisgICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorICAgIGZpCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIG9sZGxpYikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKKyAgICAgIGVzYWMKKworICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0iJG91dHB1dCIKKyAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgorICAgICAgOzsKKworICAgIGxpYikKKyAgICAgICMgTWFrZSBzdXJlIHdlIG9ubHkgZ2VuZXJhdGUgbGlicmFyaWVzIG9mIHRoZSBmb3JtIGBsaWJOQU1FLmxhJy4KKyAgICAgIGNhc2UgJG91dHB1dG5hbWUgaW4KKyAgICAgIGxpYiopCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRvdXRwdXRuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJOzsKKyAgICAgICopCisJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciCisKKwlpZiB0ZXN0ICIkbmVlZF9saWJfcHJlZml4IiAhPSBubzsgdGhlbgorCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KKwlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKKwllbHNlCisJICAkRUNITworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKKwlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorCisgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKworCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKyAgICAgIGVsc2UKKworCSMgUGFyc2UgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXJndW1lbnQuCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JzonCisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSIkc2F2ZV9pZnMiCisKKwl0ZXN0IC1uICIkNyIgJiYgXAorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvIFxgLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDEiCisJICBudW1iZXJfbWlub3I9IiQyIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8ZnJlZWJzZC1lbGZ8c3Vub3MpCisJICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBhZ2U9IjAiCisJICAgIDs7CisJICBpcml4fG5vbnN0b3B1eCkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCisJICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBsdF9pcml4X2luY3JlbWVudD1ubworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlubykKKwkgIGN1cnJlbnQ9IiQxIgorCSAgcmV2aXNpb249IiQyIgorCSAgYWdlPSIkMyIKKwkgIDs7CisJZXNhYworCisJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KKwljYXNlICRjdXJyZW50IGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRyZXZpc2lvbiBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRhZ2UgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgorCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKKwkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB4bGN2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwlmcmVlYnNkLWFvdXQpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIjsKKwkgIDs7CisKKwlmcmVlYnNkLWVsZikKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIDs7CisKKwlpcml4IHwgbm9uc3RvcHV4KQorCSAgaWYgdGVzdCAiWCRsdF9pcml4X2luY3JlbWVudCIgPSAiWG5vIjsgdGhlbgorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgZWxzZQorCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKKwkgIGZpCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKworCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKKwkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OworCSAgZXNhYworCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRyZXZpc2lvbgorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgorCSAgZG9uZQorCisJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiBgLicuCisJICBtYWpvcj0uJG1ham9yCisJICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCisJICA7OworCisJbGludXgpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICA7OworCisJb3NmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorCSAgOzsKKworCXFueCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIDs7CisKKwlzdW5vcykKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJd2luZG93cykKKwkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZXN5c3RlbXMuCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJICA7OworCisJKikKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgorCSAgOzsKKwllc2FjCisKKwkjIENsZWFyIHRoZSB2ZXJzaW9uIGluZm8gaWYgd2UgZGVmYXVsdGVkLCBhbmQgdGhleSBzcGVjaWZpZWQgYSByZWxlYXNlLgorCWlmIHRlc3QgLXogIiR2aW5mbyIgJiYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJICBtYWpvcj0KKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2luKQorCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKKwkgICAgIyBwcm9ibGVtcywgc28gd2UgcmVzZXQgaXQgY29tcGxldGVseQorCSAgICB2ZXJzdHJpbmc9CisJICAgIDs7CisJICAqKQorCSAgICB2ZXJzdHJpbmc9IjAuMCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgICAgdmVyc3VmZml4PQorCSAgZWxzZQorCSAgICB2ZXJzdWZmaXg9Ii4wLjAiCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0ICIkYXZvaWRfdmVyc2lvbiIgPSB5ZXMgJiYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9IiIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgorCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIgorCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICBmaQorCWVsc2UKKwkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgorCWZpCisKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorICAgICAgbGlib2Jqcz0iJGxpYm9ianMgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCisJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKKwkJIHRoZW4KKwkJICAgY29udGludWUKKwkJIGZpCisJICAgICAgIGZpCisJICAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRwIgorCSAgICAgICA7OworCSAgICAqKSA7OworCSAgZXNhYworCWRvbmUKKwl0ZXN0IC1uICIkcmVtb3ZlbGlzdCIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiR7Uk19ciBcJHJlbW92ZWxpc3QiCisgICAgICBmaQorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCisJb2xkbGlicz0iJG9sZGxpYnMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKworCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0nJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KKyAgICAgICNmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworICAgICAgIwlsaWJfc2VhcmNoX3BhdGg9YCRFQ0hPICJYJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFhzZWQgLWUgInMlICRwYXRoICUgJWciYAorICAgICAgIwlkZXBsaWJzPWAkRUNITyAiWCRkZXBsaWJzICIgfCAkWHNlZCAtZSAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCRkZXBlbmRlbmN5X2xpYnMgIiB8ICRYc2VkIC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgI2RvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyopCisJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKKwkgICAgOzsKKwkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCisJIyBUcmFuc2Zvcm0gZGVwbGlicyBpbnRvIG9ubHkgZGVwbGlicyB0aGF0IGNhbiBiZSBsaW5rZWQgaW4gc2hhcmVkLgorCW5hbWVfc2F2ZT0kbmFtZQorCWxpYm5hbWVfc2F2ZT0kbGlibmFtZQorCXJlbGVhc2Vfc2F2ZT0kcmVsZWFzZQorCXZlcnN1ZmZpeF9zYXZlPSR2ZXJzdWZmaXgKKwltYWpvcl9zYXZlPSRtYWpvcgorCSMgSSdtIG5vdCBzdXJlIGlmIEknbSB0cmVhdGluZyB0aGUgcmVsZWFzZSBjb3JyZWN0bHkuICBJIHRoaW5rCisJIyByZWxlYXNlIHNob3VsZCBzaG93IHVwIGluIHRoZSAtbCAoaWUgLWxnbXA1KSBzbyB3ZSBkb24ndCB3YW50IHRvCisJIyBhZGQgaXQgaW4gdHdpY2UuICBJcyB0aGF0IGNvcnJlY3Q/CisJcmVsZWFzZT0iIgorCXZlcnN1ZmZpeD0iIgorCW1ham9yPSIiCisJbmV3ZGVwbGlicz0KKwlkcm9wcGVkZGVwcz1ubworCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJcGFzc19hbGwpCisJICAjIERvbid0IGNoZWNrIGZvciBzaGFyZWQvc3RhdGljLiAgRXZlcnl0aGluZyB3b3Jrcy4KKwkgICMgVGhpcyBtaWdodCBiZSBhIGxpdHRsZSBuYWl2ZS4gIFdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sKKwkgICMgd2hldGhlciB0aGUgbGlicmFyeSBleGlzdHMgb3Igbm90LiAgQnV0IHRoaXMgaXMgb24KKwkgICMgb3NmMyAmIG9zZjQgYW5kIEknbSBub3QgcmVhbGx5IHN1cmUuLi4gSnVzdAorCSAgIyBpbXBsZW1lbnRpbmcgd2hhdCB3YXMgYWxyZWFkeSB0aGUgYmVoYXZpb3IuCisJICBuZXdkZXBsaWJzPSRkZXBsaWJzCisJICA7OworCXRlc3RfY29tcGlsZSkKKwkgICMgVGhpcyBjb2RlIHN0cmVzc2VzIHRoZSAibGlicmFyaWVzIGFyZSBwcm9ncmFtcyIgcGFyYWRpZ20gdG8gaXRzCisJICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAorCSAgIyBhZ2FpbnN0IHRoZSBkZXBsaWJzIGFzIGEgcHJveHkgZm9yIHRoZSBsaWJyYXJ5LiAgVGhlbiB3ZSBjYW4gY2hlY2sKKwkgICMgd2hldGhlciB0aGV5IGxpbmtlZCBpbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggbGRkLgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdC5jCisJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAorCSAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KKwkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgKiIgJGkgIiopCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGk9IiIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgZGVwbGliX21hdGNoPSQxCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAkRUNITworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgICAgJEVDSE8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCQk7OworCSAgICAgICopCisJCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJCWlmICRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpOyB0aGVuCisJCSAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAorCQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgICBpPSIiCisJCSAgICAgIDs7CisJCSAgICBlc2FjCisJCSAgZmkKKwkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICAkRUNITworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgICRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgICAkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgorCQkgICAgICAkRUNITyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgJEVDSE8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgICRFQ0hPICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCisJCSAgJEVDSE8gIioqKiBsaWJyYXJ5IHRoYXQgaXQgZGVwZW5kcyBvbiBiZWZvcmUgdGhpcyBsaWJyYXJ5IHdpbGwgYmUgZnVsbHkiCisJCSAgJEVDSE8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaQorCSAgOzsKKwlmaWxlX21hZ2ljKikKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIGNhc2UgJGFfZGVwbGliIGluCisJICAgIC1sKikKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgorCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9IiIKKwkJICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQkkRUNITworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCWVsc2UKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFhzZWQgLWUgMTBxIHwgXAorCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0iIgorCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIFwKKwkgICAgICAtZSAncy8gLWxjJC8vJyAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgInMsJGksLCJgCisJICAgIGRvbmUKKwkgIGZpCisJICBpZiAkRUNITyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvWwkgXS8vZycgfAorCSAgICAgJEdSRVAgLiA+L2Rldi9udWxsOyB0aGVuCisJICAgICRFQ0hPCisJICAgIGlmIHRlc3QgIlgkZGVwbGlic19jaGVja19tZXRob2QiID0gIlhub25lIjsgdGhlbgorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkgIGZpCisJICA7OworCWVzYWMKKwl2ZXJzdWZmaXg9JHZlcnN1ZmZpeF9zYXZlCisJbWFqb3I9JG1ham9yX3NhdmUKKwlyZWxlYXNlPSRyZWxlYXNlX3NhdmUKKwlsaWJuYW1lPSRsaWJuYW1lX3NhdmUKKwluYW1lPSRuYW1lX3NhdmUKKworCWNhc2UgJGhvc3QgaW4KKwkqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkZHJvcHBlZGRlcHMiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICAkRUNITworCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKKwkgICAgJEVDSE8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICAkRUNITyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgorCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgICAgICRFQ0hPCisJICAgICAgJEVDSE8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgICRFQ0hPICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgICRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgJEVDSE8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgZWxzZQorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBmaQorCSAgZWxzZQorCSAgICAkRUNITyAiKioqIFRoZSBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyB0aGF0IGhhdmUgYmVlbiBkcm9wcGVkIGhlcmUgd2lsbCBiZSIKKwkgICAgJEVDSE8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgICRFQ0hPICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCisKKwkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorCSAgICAgICRFQ0hPCisJICAgICAgJEVDSE8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgJEVDSE8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgorCSAgICAgICRFQ0hPICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCisJICAgICAgJEVDSE8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKKwkJYnVpbGRfb2xkX2xpYnM9eWVzCisJICAgICAgZWxzZQorCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgICBmaQorCSAgICBmaQorCSAgZmkKKwlmaQorCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQorCWRlcGxpYnM9JG5ld2RlcGxpYnMKKyAgICAgIGZpCisgICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisgICAgICBjYXNlICRob3N0IGluCisJKi0qLWRhcndpbiopCisJICBuZXdkZXBsaWJzPWAkRUNITyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiWCAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiWCAkZGVwbGlicyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorCSAgICBlbHNlCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZpCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXNoaWZ0CisJcmVhbG5hbWU9IiQxIgorCXNoaWZ0CisKKwlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJZWxzZQorCSAgc29uYW1lPSIkcmVhbG5hbWUiCisJZmkKKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgZGxuYW1lPSRzb25hbWUKKwlmaQorCisJbGliPSIkb3V0cHV0X29iamRpci8kcmVhbG5hbWUiCisJbGlua25hbWVzPQorCWZvciBsaW5rCisJZG8KKwkgIGxpbmtuYW1lcz0iJGxpbmtuYW1lcyAkbGluayIKKwlkb25lCisKKwkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworCXRlc3QgLXogIiRwaWNfZmxhZyIgJiYgbGlib2Jqcz1gJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzIgorCWZpCisKKwlvcmlnX2V4cG9ydF9zeW1ib2xzPQorCWNhc2UgJGhvc3Rfb3MgaW4KKwljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQorCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKKwkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZworCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KKwkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCisJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQorCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIGZpCisJICBmaQorCSAgOzsKKwllc2FjCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAgIGZ1bmNfbGVuICIgJGNtZCIKKwkgICAgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxzZQorCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkJc2tpcHBlZF9leHBvcnQ9OgorCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQorCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KKwkJYnJlYWsKKwkgICAgICBmaQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICB0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgorCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KKwkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCisJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZWxzZQorCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCWZpCisKKwlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwlmaQorCisJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVUgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBvdXRwdXRfbGE9YCRFQ0hPICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKKworCSAgIyBDbGVhciB0aGUgcmVsb2FkYWJsZSBvYmplY3QgY3JlYXRpb24gY29tbWFuZCBxdWV1ZSBhbmQKKwkgICMgaW5pdGlhbGl6ZSBrIHRvIG9uZS4KKwkgIHRlc3RfY21kcz0KKwkgIGNvbmNhdF9jbWRzPQorCSAgb2JqbGlzdD0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgICRFQ0hPICdJTlBVVCAoJyA+ICRvdXRwdXQKKwkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgIGRvCisJICAgICAgJEVDSE8gIiRvYmoiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICAkRUNITyAnKScgPj4gJG91dHB1dAorCSAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJG91dHB1dFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAorCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJCSAgZWxzZQorCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKwkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ian5cJFJNICRsYXN0X3JvYmpcIgorCQkgIGZpCisJCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgZnVuY19hcml0aCAkayArIDEKKwkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIG9iamxpc3Q9JG9iagorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCisJICAgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkJICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgIH0KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCQlsdF9leGl0PSQ/CisKKwkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0iJHNhdmVfaWZzIgorCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZmkKKwkgIGZpCisKKwkgIGxpYm9ianM9JG91dHB1dAorCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCisJICBvdXRwdXQ9JHNhdmVfb3V0cHV0CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSIgJiYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorCSAgIyB2YWx1ZSBvZiAkbGlib2JqcyBmb3IgcGllY2V3aXNlIGxpbmtpbmcuCisKKwkgICMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJZmkKKworCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCWZvciBjbWQgaW4gJGNtZHM7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICAkb3B0X3NpbGVudCB8fCB7CisJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgfQorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkgICAgbHRfZXhpdD0kPworCisJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCisJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCSAgICBmaQorCSAgZmkKKworCSAgZXhpdCAkRVhJVF9TVUNDRVNTCisJZmkKKworCSMgQ3JlYXRlIGxpbmtzIHRvIHRoZSByZWFsIGxpYnJhcnkuCisJZm9yIGxpbmtuYW1lIGluICRsaW5rbmFtZXM7IGRvCisJICBpZiB0ZXN0ICIkcmVhbG5hbWUiICE9ICIkbGlua25hbWUiOyB0aGVuCisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgZmkKKworICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgorICAgICAgKlwgLWwqIHwgKlwgLUwqKQorCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIGNhc2UgJG91dHB1dCBpbgorICAgICAgKi5sbykKKwl0ZXN0IC1uICIkb2JqcyRvbGRfZGVwbGlicyIgJiYgXAorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgorCisJbGlib2JqPSRvdXRwdXQKKwlmdW5jX2xvMm8gIiRsaWJvYmoiCisJb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJOzsKKyAgICAgICopCisJbGlib2JqPQorCW9iaj0iJG91dHB1dCIKKwk7OworICAgICAgZXNhYworCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG9iamVjdHMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvYmogJGxpYm9iagorCisgICAgICAjIE9iamVjdHMgZnJvbSBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBUaGlzIGFzc3VtZXMKKyAgICAgICMgc2luZ2xlLXZlcnNpb24gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgV2hlbmV2ZXIgd2UgY3JlYXRlCisgICAgICAjIGRpZmZlcmVudCBvbmVzIGZvciBQSUMvbm9uLVBJQywgdGhpcyB3ZSdsbCBoYXZlIHRvIGR1cGxpY2F0ZQorICAgICAgIyB0aGUgZXh0cmFjdGlvbi4KKyAgICAgIHJlbG9hZF9jb252X29ianM9CisgICAgICBnZW50b3A9CisgICAgICAjIHJlbG9hZF9jbWRzIHJ1bnMgJExEIGRpcmVjdGx5LCBzbyBsZXQgdXMgZ2V0IHJpZCBvZgorICAgICAgIyAtV2wgZnJvbSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBhbmQgaG9wZSB3ZSBjYW4gZ2V0IGJ5IHdpdGgKKyAgICAgICMgdHVybmluZyBjb21tYSBpbnRvIHNwYWNlLi4KKyAgICAgIHdsPQorCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICJYJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRYc2VkIC1lICdzfCx8IHxnJ2AKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSQnL2QnIC1lICcvXC5saWIkL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAorICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAorCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCisJICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLWRhcndpbiopCisJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycworCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICJYICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCTs7CisgICAgICBlc2FjCisKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRjb21waWxlX2RlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkY29tcGlsZV9kZXBsaWJzOyBkbworCWNhc2UgJGRlcGxpYiBpbgorCS1MKikKKwkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSAgKiIgJGRlcGxpYiAiKikgOzsKKwkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgIGVzYWMKKwkgIDs7CisJKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19saWJzIgorCisKKyAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkY29tcGlsZV9kZXBsaWJzIgorICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokbGliZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgZWxzZQorCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KKwkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgorCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKwkJOzsKKwkgICAgICAqKQorCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBlbHNlCisJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgIGZpCisJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcGVybV9ycGF0aD0iJGZpbmFsaXplX3Blcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgZmkKKyAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisKKyAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCisgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICpjZWdjYykKKyAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgIiR3cmFwcGVyc19yZXF1aXJlZCIgPSBubzsgdGhlbgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KKwlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJZmluYWxpemVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRmaW5hbGl6ZV9jb21tYW5kIgorICAgICAgZmkKKworICAgICAgY29tcGlsZV92YXI9CisgICAgICBmaW5hbGl6ZV92YXI9CisgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBjb21waWxlX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluYWxpemVfcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJGZpbmFsaXplX3Blcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGZpbmFsaXplX3Zhcj0iJHJ1bnBhdGhfdmFyPVwiJHJwYXRoXCQkcnVucGF0aF92YXJcIiAiCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQKKwkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgorCSMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisKKwlmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCWZ1bmNfd2FybmluZyAiXGAkb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgIT0gbm87IHRoZW4KKwkgIGxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKwkgIGVsc2UKKwkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCisJICAgIHJlbGlua19jb21tYW5kPQorCSAgZmkKKwllbHNlCisJICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZXMuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRvdXRwdXQgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgJG91dHB1dF9vYmpkaXIvbHQtJG91dHB1dG5hbWUKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFF1b3RlIHRoZSByZWxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICBpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorCWZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCSAgaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZWxzZQorCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBmaQorCWRvbmUKKwlyZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkcmVsaW5rX2NvbW1hbmQpIgorCXJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIFF1b3RlICRFQ0hPIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgIlgkRUNITyIgPSAiWCRTSEVMTCAkcHJvZ3BhdGggLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorCWNhc2UgJHByb2dwYXRoIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBxZWNobz0iJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKwkqKSBxZWNobz0iJFNIRUxMIGBwd2RgLyRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOzsKKwllc2FjCisJcWVjaG89YCRFQ0hPICJYJHFlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGVsc2UKKwlxZWNobz1gJEVDSE8gIlgkRUNITyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisJICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKwkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKKwkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQorCisJICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCisJICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQorCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCisJICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKKwkgICAgfQorCisJICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6CisJICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCisJICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCisJICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KKwkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBlbHNlCisJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZmkKKwkgICAgfQorCSAgOzsKKwkgICogKQorCSAgICAkUk0gJG91dHB1dAorCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKKwkgICAgY2htb2QgK3ggJG91dHB1dAorCSAgOzsKKwllc2FjCisgICAgICB9CisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCisgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgorCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJYWRkbGlicz0iJGNvbnZlbmllbmNlIgorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgZWxzZQorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCisJICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJZWxzZQorCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCisJICAgIG9sZG9ianM9IiRvbGRvYmpzICRzeW1maWxlb2JqIgorCSAgZmkKKwlmaQorCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKwlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKKwlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworICAgICAgZWxzZQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICRFQ0hPICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJICBmdW5jX21rZGlyX3AgIiRnZW50b3AiCisJICBzYXZlX29sZG9ianM9JG9sZG9ianMKKwkgIG9sZG9ianM9CisJICBjb3VudGVyPTEKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIDs7CisJICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbHNlCisJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cworCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PworCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBsYXN0X29sZG9iaj0kb2JqCisJICBkb25lCisJICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKKwkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgbGVuPSRsZW4wCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGZ1bmNfbGVuICIgJG9iaiIKKwkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAorCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgorCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgICAgICBmaQorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgb2JqbGlzdD0KKwkgICAgICBsZW49JGxlbjAKKwkgICAgZmkKKwkgIGRvbmUKKwkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkgIG9sZG9ianM9JG9iamxpc3QKKwkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwllbHNlCisJICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorCXJlbGlua19jb21tYW5kPQorICAgICAgZmkKKworICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbworCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICAgIG91dHB1dD0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiaQorCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgICoubGEpCisJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBuZXdkbGZpbGVzPQorCisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQluZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQorCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KKwkJIyB0aGUgbGlicmFyeToKKwkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZWxzZQorCSAgICBuZXdkbGZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBuZXdkbHByZWZpbGVzPQorCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgICAgIGNhc2UgJGxpYiBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorCSAgICBkb25lCisJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgZmkKKwkgICRSTSAkb3V0cHV0CisJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpIHRkbG5hbWU9Li4vYmluLyRkbG5hbWUgOzsKKwkgIGVzYWMKKwkgICRFQ0hPID4gJG91dHB1dCAiXAorIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vICYmIHRlc3QgIiRuZWVkX3JlbGluayIgPSB5ZXM7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworeyB0ZXN0ICIkbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgfSAmJgorICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV91bmluc3RhbGwgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgUk09IiRub25vcHQiCisgICAgZmlsZXM9CisgICAgcm1mb3JjZT0KKyAgICBleGl0X3N0YXR1cz0wCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtZikgUk09IiRSTSAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC0qKSBSTT0iJFJNICRhcmciIDs7CisgICAgICAqKSBmaWxlcz0iJGZpbGVzICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIG9yaWdvYmpkaXI9IiRvYmpkaXIiCisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisgICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKyAgICAgIGZpCisgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKyAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisKKyAgICAgICMgUmVtZW1iZXIgb2JqZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisJY2FzZSAiICRybWRpcnMgIiBpbgorCSAgKiIgJG9iamRpciAiKikgOzsKKwkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuIgorCSAgZG9uZQorCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRvbGRfbGlicmFyeSIKKworCSAgY2FzZSAiJG1vZGUiIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICAkbGlicmFyeV9uYW1lcyAiIGluCisJICAgICMgIiAgIiBpbiB0aGUgYmVnaW5uaW5nIGNhdGNoZXMgZW1wdHkgJGRsbmFtZQorCSAgICAqIiAkZGxuYW1lICIqKSA7OworCSAgICAqKSBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCisKKwkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KKwkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgZmkKKwkgIGZpCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgZnVuY19zaG93X2V2YWwgIiRSTSAkcm1maWxlcyIgJ2V4aXRfc3RhdHVzPTEnCisgICAgZG9uZQorICAgIG9iamRpcj0iJG9yaWdvYmpkaXIiCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCisgICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKKyAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKK30KKworeyB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG1vZGUiID0gY2xlYW47IH0gJiYKKyAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorCit0ZXN0IC16ICIkbW9kZSIgJiYgeworICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CisjIHZpOnN3PTIKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWNkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKQEAgLTAsMCArMSw3MzYwIEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCitdKQorCisjIHNlcmlhbCA1NiBMVF9JTklUCisKKworIyBMVF9QUkVSRVEoVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgorbTRfZGVmdW4oW0xUX1BSRVJFUV0sCitbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCisgICAgICAgW200X2RlZmF1bHQoWyQzXSwKKwkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKKwkJICAgICAgICAgICAgIDYzKV0pXSwKKyAgICAgICBbJDJdKV0pCisKKworIyBfTFRfQ0hFQ0tfQlVJTERESVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKK200X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAorW2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Citlc2FjCitdKQorCisKKyMgTFRfSU5JVChbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0lOSVRdLAorW0FDX1BSRVJFUShbMi41OF0pZG5sIFdlIHVzZSBBQ19JTkNMVURFU19ERUZBVUxUCitBQ19CRUZPUkUoWyQwXSwgW0xUX0xBTkddKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorQUNfQkVGT1JFKFskMF0sIFtMVERMX0lOSVRdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX0JVSUxERElSXSlkbmwKKworZG5sIEF1dG9jb25mIGRvZXNuJ3QgY2F0Y2ggdW5leHBhbmRlZCBMVF8gbWFjcm9zIGJ5IGRlZmF1bHQ6CittNF9wYXR0ZXJuX2ZvcmJpZChbXl8/TFRfW0EtWl9dKyRdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbXihfTFRfRU9GfExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1d8TFRfTVVMVElfTU9EVUxFKSRdKWRubAorZG5sIGFjbG9jYWwgZG9lc24ndCBwdWxsIGx0b3B0aW9ucy5tNCwgbHRzdWdhci5tNCwgb3IgbHR2ZXJzaW9uLm00CitkbmwgdW5sZXNzIHdlIHJlcXVpcmUgYW4gQUNfREVGVU5lZCBtYWNybzoKK0FDX1JFUVVJUkUoW0xUT1BUSU9OU19WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUU1VHQVJfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVFZFUlNJT05fVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtMVE9CU09MRVRFX1ZFUlNJT05dKWRubAorbTRfcmVxdWlyZShbX0xUX1BST0dfTFRNQUlOXSlkbmwKKworZG5sIFBhcnNlIE9QVElPTlMKK19MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRsdG1haW4iCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX0NDX0JBU0VOQU1FKENDKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGN1bGF0ZSBjY19iYXNlbmFtZS4gIFNraXAga25vd24gY29tcGlsZXIgd3JhcHBlcnMgYW5kIGNyb3NzLXByZWZpeC4KK200X2RlZnVuKFtfTFRfQ0NfQkFTRU5BTUVdLAorW2ZvciBjY190ZW1wIGluICQxIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltbXFwvXV1jb21waWxlIHwgY2NhY2hlIHwgKltbXFwvXV1jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAorXSkKKworCisjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0CisjIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAorWzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KK10pIyBfTFRfRklMRVVUSUxTX0RFRkFVTFRTCisKKworIyBfTFRfU0VUVVAKKyMgLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1NFVFVQXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X2FsaWFzXSwgWzBdLCBbVGhlIGhvc3Qgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbaG9zdF9vc10sIFswXSlkbmwKK2RubAorX0xUX0RFQ0woW10sIFtidWlsZF9hbGlhc10sIFswXSwgW1RoZSBidWlsZCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF0sIFswXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfb3NdLCBbMF0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK19MVF9ERUNMKFtdLCBbTE5fU10sIFsxXSwgW1doZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3NdKWRubAorZG5sCitBQ19SRVFVSVJFKFtMVF9DTURfTUFYX0xFTl0pZG5sCitfTFRfREVDTChbb2JqZXh0XSwgW2FjX29iamV4dF0sIFswXSwgW09iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCitkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfUkVMT0FEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9PTERfQVJDSElWRV0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCitdKQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbWyJgJFxcXV1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1siYFxcXV1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBfTFRfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQorX0xUX0xBTkdfQ19DT05GSUcKK19MVF9MQU5HX0RFRkFVTFRfQ09ORklHCitfTFRfQ09ORklHX0NPTU1BTkRTCitdKSMgX0xUX1NFVFVQCisKKworIyBfTFRfUFJPR19MVE1BSU4KKyMgLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSBgY29uZmlndXJlJywgYW5kIGBjb25maWcuc3RhdHVzJworIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorIyBgY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCittNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKK1ttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorXSkjIF9MVF9QUk9HX0xUTUFJTgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEFjY3VtdWxhdGUgY29kZSBmb3IgY3JlYXRpbmcgbGlidG9vbC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKKyMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKKyMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSBgbGlidG9vbCcKKyMgbGFiZWwuCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbSU5JVC1DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgSU5JVC1DT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xfSU5JVF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSkKKworCisjIF9MVF9DT05GSUdfTElCVE9PTChbQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVnaXN0ZXIgQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sCisgICAgICAgICAgICAgICAgICAgICBbJDEKK10pXSldKQorCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10pCisKKworIyBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoW0NPTU1BTkRTXSwgW0lOSVRfQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT05GSUdfU0FWRV9DT01NQU5EU10sCitbX0xUX0NPTkZJR19MSUJUT09MKFskMV0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbJDJdKQorXSkKKworCisjIF9MVF9GT1JNQVRfQ09NTUVOVChbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBsZWFkaW5nIGNvbW1lbnQgbWFya3MgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggbGluZSwgYW5kIGEgdHJhaWxpbmcKKyMgZnVsbC1zdG9wIHRvIHRoZSB3aG9sZSBjb21tZW50IGlmIG9uZSBpcyBub3QgcHJlc2VudCBhbHJlYWR5LgorbTRfZGVmaW5lKFtfTFRfRk9STUFUX0NPTU1FTlRdLAorW200X2lmdmFsKFskMV0sIFsKK200X2JwYXRzdWJzdChbbTRfYnBhdHN1YnN0KFskMV0sIFteICpdLCBbIyBdKV0sCisgICAgICAgICAgICAgIFtbJ2AkXF1dLCBbXFxcJl0pXW00X2JtYXRjaChbJDFdLCBbWyE/Ll0kXSwgW10sIFsuXSkKKyldKQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGSVhNRTogRWxpbWluYXRlIFZBUk5BTUUgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgX0xUX0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSwgW0lTLVRBR0dFRD9dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENPTkZJR05BTUUgaXMgdGhlIG5hbWUgZ2l2ZW4gdG8gdGhlIHZhbHVlIGluIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyMgVkFSTkFNRSBpcyB0aGUgKGJhc2UpIG5hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyMgVkFMVUUgbWF5IGJlIDAsIDEgb3IgMiBmb3IgYSBjb21wdXRlZCBxdW90ZSBlc2NhcGVkIHZhbHVlIGJhc2VkIG9uCisjIFZBUk5BTUUuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgorbTRfZGVmaW5lKFtfTFRfREVDTF0sCitbbHRfaWZfYXBwZW5kX3VuaXEoW2x0X2RlY2xfdmFybmFtZXNdLCBbJDJdLCBbLCBdLAorICAgIFtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtsaWJ0b29sX25hbWVdLAorCVttNF9pZnZhbChbJDFdLCBbJDFdLCBbJDJdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbdmFsdWVdLCBbJDNdKQorICAgIG00X2lmdmFsKFskNF0sCisJW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2Rlc2NyaXB0aW9uXSwgWyQ0XSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwKKwlbdGFnZ2VkP10sIFttNF9pZnZhbChbJDVdLCBbeWVzXSwgW25vXSldKV0pCitdKQorCisKKyMgX0xUX1RBR0RFQ0woW0NPTkZJR05BTUVdLCBWQVJOQU1FLCBWQUxVRSwgW0RFU0NSSVBUSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR0RFQ0xdLCBbX0xUX0RFQ0woWyQxXSwgWyQyXSwgWyQzXSwgWyQ0XSwgW3llc10pXSkKKworCisjIGx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF90YWdfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFt5ZXNdLCAkQCldKQorCisKKyMgX2x0X2RlY2xfZmlsdGVyKFNVQktFWSwgVkFMVUUsIFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfbHRfZGVjbF9maWx0ZXJdLAorW200X2Nhc2UoWyQjXSwKKyAgWzBdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCNdKV0sCisgIFsxXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjOiAkMV0pXSwKKyAgWzJdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFszXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbJDNdLCBsdF9kZWNsX3Zhcm5hbWVzKV0sCisgIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgJEApXSlbXWRubAorXSkKKworCisjIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMV0sICRAKV0pCisKKworIyBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzJdLCAkQCldKQorCisKKyMgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfYXNzZXJ0KFskIyA8PSAyXSlkbmwKK18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgIG00X2lmdmFsKFskMl0sIFtbJDJdXSwgW200X2RxdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyldKSwKKyAgICBtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfcXVvdGUoX0xUX1RBR1MpKSwgWyBdKSldKQorbTRfZGVmaW5lKFtfbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2lmdmFsKFskM10sIFtsdF9jb21iaW5lKFskMV0sIFskMl0sIFtfXSwgJDMpXSldKQorCisKKyMgbHRfZGVjbF9hbGxfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2FsbF92YXJuYW1lc10sCitbXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgIG00X2lmKFskMl0sIFtdLAorCSAgIG00X3F1b3RlKGx0X2RlY2xfdmFybmFtZXMpLAorCW00X3F1b3RlKG00X3NoaWZ0KCRAKSkpKVtdZG5sCitdKQorbTRfZGVmaW5lKFtfbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW2x0X2pvaW4oJEAsIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFskMV0sCisJCQlsdF9kZWNsX3RhZ192YXJuYW1lcyhbWywgXV0sIG00X3NoaWZ0KCRAKSkpKWRubAorXSkKKworCisjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gYGNvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCisjIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBgY29uZmlndXJlJy4gIFZBUk5BTUUKKyMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKK1skMT0nYCRFQ0hPICJYJF1bJDEiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiWCQ8dmFyPiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0iX0xUX1RBR1MiZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgYGxpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvIGBjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluIGBjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRml4LXVwIGZhbGxiYWNrIGVjaG8gaWYgaXQgd2FzIG1hbmdsZWQgYnkgdGhlIGFib3ZlIHF1b3RpbmcgcnVsZXMuCitjYXNlIFwkbHRfRUNITyBpbgorKidcXFxbJF0wIC0tZmFsbGJhY2stZWNobyInKWRubCAiCisgIGx0X0VDSE89XGBcJEVDSE8gIlhcJGx0X0VDSE8iIHwgXCRYc2VkIC1lICdzL1xcXFxcXFxcXFxcXFxcXFskXTAgLS1mYWxsYmFjay1lY2hvIlxbJF0vXFskXTAgLS1mYWxsYmFjay1lY2hvIi8nXGAKKyAgOzsKK2VzYWMKKworX0xUX09VVFBVVF9MSUJUT09MX0lOSVQKK10pCisKKworIyBMVF9PVVRQVVQKKyMgLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKKyMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKyMgdGVzdHMuCitBQ19ERUZVTihbTFRfT1VUUFVUXSwKK1s6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCitjYXQgPiIkQ09ORklHX0xUIiA8PF9MVEVPRgorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCisjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorCitsdF9jbF9zaWxlbnQ9ZmFsc2UKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCisKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworeworICBlY2hvCisgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKK30gPiZBU19NRVNTQUdFX0xPR19GRAorCitsdF9jbF9oZWxwPSJcCitcYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiAkbHRfY2xfc2lsZW50OyB0aGVuCisgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKK2ZpCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKK0FTX0VYSVQoMCkKK19MVEVPRgorY2htb2QgK3ggIiRDT05GSUdfTFQiCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisjIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAorIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCisjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgbHRfY2xfc3VjY2Vzcz06CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgorICBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorICAkU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCisgIGV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKKyAgJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorZmkKK10pIyBMVF9PVVRQVVQKKworCisjIF9MVF9DT05GSUcoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0KKyMgSWYgVEFHIGlzIHRoZSBidWlsdC1pbiB0YWcsIGNyZWF0ZSBhbiBpbml0aWFsIGxpYnRvb2wgc2NyaXB0IHdpdGggYQorIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdW50YWdnZWQgY29uZmlnIHZhcnMuICBPdGhlcndpc2UgYWRkIGNvZGUKKyMgdG8gY29uZmlnLnN0YXR1cyBmb3IgYXBwZW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG5hbWVkIGJ5IFRBRyBmcm9tIHRoZQorIyBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCittNF9kZWZ1bihbX0xUX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWworICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKKyAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKKyAgICAkUk0gIiRjZmdmaWxlIgorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjISAkU0hFTEwKKworIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyMKK19MVF9DT1BZSU5HCitfTFRfTElCVE9PTF9UQUdTCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworICBfTFRfUFJPR19MVE1BSU4KKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisKKyAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCitdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCitdKSMgX0xUX0NPTkZJRworCisKKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCisjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisjICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCitBQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQorCisKKyMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCittNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCisKKworIyBMVF9MQU5HKExBTkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCitBQ19ERUZVTihbTFRfTEFOR10sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorbTRfY2FzZShbJDFdLAorICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKKyAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCisgIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKyAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAorICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKyAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKyAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCisgICAgW19MVF9MQU5HKCQxKV0sCisgICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKK10pIyBMVF9MQU5HCisKKworIyBfTFRfTEFORyhMQU5HTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkddLAorW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKyAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAorICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKK10pIyBfTFRfTEFORworCisKKyMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgW0xUX0xBTkcoQ1hYKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisgIFtMVF9MQU5HKEY3NyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCisgIFtMVF9MQU5HKEZDKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisKK2RubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgW0xUX0xBTkcoR0NKKV0sCisgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCisgICAgICBbTFRfTEFORyhHQ0opXSwKKyAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCisJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAorICBbTFRfTEFORyhSQyldLAorICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQorXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisKKyMgT2Jzb2xldGUgbWFjcm9zOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorCisKKyMgX0xUX1RBR19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RBR19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKK19MVF9ERUNMKFtMVENDXSwgW0NDXSwgWzFdLCBbQSBDIGNvbXBpbGVyXSlkbmwKK19MVF9ERUNMKFtMVENGTEFHU10sIFtDRkxBR1NdLCBbMV0sIFtMVENDIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19MVF9UQUdERUNMKFtDQ10sIFtjb21waWxlcl0sIFsxXSwgW0EgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXJdKWRubAorX0xUX1RBR0RFQ0woW3dpdGhfZ2NjXSwgW0dDQ10sIFswXSwgW0lzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyP10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfVEFHX0NPTVBJTEVSCisKKworIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKK10pIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKworCisjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgbGlua2VyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgbGluayB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSAtciBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW5fb25jZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLFsKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgQUNfQ0hFQ0tfVE9PTChbRFNZTVVUSUxdLCBbZHN5bXV0aWxdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTk1FRElUXSwgW25tZWRpdF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtMSVBPXSwgW2xpcG9dLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0xdLCBbb3Rvb2xdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbT1RPT0w2NF0sIFtvdG9vbDY0XSwgWzpdKQorICAgIF9MVF9ERUNMKFtdLCBbRFNZTVVUSUxdLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtOTUVESVRdLCBbMV0sCisgICAgICBbVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTElQT10sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MXSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW09UT09MNjRdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjRdKQorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAorICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpXSkKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWddLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdF0sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIF0pCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLltbMDEyXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJworICAgIGZpCisgICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGVsc2UKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGZpCisgICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKKworCisjIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KK200X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCitbCisgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG00X2lmKFskMV0sIFtDWFhdLAorWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGZpCitdLFtdKQorICBlbHNlCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgZmkKK10pCisKKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KK200X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0xJTktfSUZFTFNFKEFDX0xBTkdfUFJPR1JBTSxbCitsdF9haXhfbGlicGF0aF9zZWQ9JworICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkvXjAvIHsKKwkgICAgcy9eMCAgKlwoLipcKSQvXDEvCisJICAgIHAKKwl9CisgICAgfScKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKK2ZpXSxbXSkKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisKKworIyBfTFRfU0hFTExfSU5JVChBUkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1NIRUxMX0lOSVRdLAorW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwKKwkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCisJIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKKyQxCitBQ19ESVZFUlRfUE9QCitdKSMgX0xUX1NIRUxMX0lOSVQKKworCisjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAorIyB3aWxsIGZpbmQgYW4gZWNobyBjb21tYW5kIHdoaWNoIGRvZXNuJ3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tfTFRfU0hFTExfSU5JVChbCisjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCitjYXNlIFgkbHRfRUNITyBpbgorWCotLWZhbGxiYWNrLWVjaG8pCisgICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCisgIEVDSE89YGVjaG8gIiRsdF9FQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKKyAgOzsKK2VzYWMKKworRUNITz0ke2x0X0VDSE8tZWNob30KK2lmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgc2hpZnQKK2VsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgorICAjIFlpcHBlZSwgJEVDSE8gd29ya3MhCisgIDoKK2Vsc2UKKyAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorICBleGVjICRTSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KK2ZpCisKK2lmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KKyAgc2hpZnQKKyAgY2F0IDw8X0xUX0VPRgorWyRdKgorX0xUX0VPRgorICBleGl0IDAKK2ZpCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK2lmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorICBpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICAjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCisgICAgICBpZiB7IGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGA7IH0gMj4vZGV2L251bGwgJiYKKwkgeyB0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGwKKyAgICAgIHRoZW4KKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQorCisgIGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgIDoKKyAgZWxzZQorICAgICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQorICAgICMgYmFja3NsYXNoZXMuICBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgdG8gcXVvdGUgYmFja3NsYXNoZXMgdXNpbmcKKyAgICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworICAgICMKKyAgICAjIFNvLCBmaXJzdCB3ZSBsb29rIGZvciBhIHdvcmtpbmcgZWNobyBpbiB0aGUgdXNlcidzIFBBVEguCisKKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgICBFQ0hPPSIkZGlyL2VjaG8iCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKworICAgIGlmIHRlc3QgIlgkRUNITyIgPSBYZWNobzsgdGhlbgorICAgICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCisgICAgICBpZiB0ZXN0ICJYYHsgcHJpbnQgLXIgJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgcHJpbnQgLXIgIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgICAjIFRoaXMgc2hlbGwgaGFzIGEgYnVpbHRpbiBwcmludCAtciB0aGF0IGRvZXMgdGhlIHRyaWNrLgorICAgICAgICBFQ0hPPSdwcmludCAtcicKKyAgICAgIGVsaWYgeyB0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0OyB9ICYmCisJICAgdGVzdCAiWCRDT05GSUdfU0hFTEwiICE9IFgvYmluL2tzaDsgdGhlbgorICAgICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KKyAgICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisgICAgICAgIGV4cG9ydCBPUklHSU5BTF9DT05GSUdfU0hFTEwKKyAgICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCisgICAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKyAgICAgICAgZXhlYyAkQ09ORklHX1NIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorICAgICAgZWxzZQorICAgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworICAgICAgICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICAjIENvb2wsIHByaW50ZiB3b3JrcworCSAgOgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIENPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCisJICBleHBvcnQgQ09ORklHX1NIRUxMCisJICBTSEVMTD0iJENPTkZJR19TSEVMTCIKKwkgIGV4cG9ydCBTSEVMTAorCSAgRUNITz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbHNlCisJICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCSAgcHJldj06CisKKwkgIGZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbworCSAgICBpZiB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIjsgfSAyPi9kZXYvbnVsbAorCSAgICB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgcHJldj0iJGNtZCIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICJbJF0wIic7IHRoZW4KKwkgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgICAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKKwkgICAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIlskXTAiICR7MSsiWyRdQCJ9CisJICBlbHNlCisJICAgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCisJICAgIEVDSE89ZWNobworCSAgZmkKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCisKKyMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KKyMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgorbHRfRUNITz0kRUNITworaWYgdGVzdCAiWCRsdF9FQ0hPIiA9ICJYJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKyAgIGx0X0VDSE89IiRDT05GSUdfU0hFTEwgXFxcJFxbJF0wIC0tZmFsbGJhY2stZWNobyIKK2ZpCisKK0FDX1NVQlNUKGx0X0VDSE8pCitdKQorX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLAorICAgIFtBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ1sjXWxpbmUgX19vbGluZV9fICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisgICAgW0FDX0xBTkdfUFVTSChDKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1BPUF0pCisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CitzcGFyYyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorXSkjIF9MVF9FTkFCTEVfTE9DSworCisKKyMgX0xUX0NNRF9PTERfQVJDSElWRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9PTERfQVJDSElWRV0sCitbQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQordGVzdCAteiAiJEFSIiAmJiBBUj1hcgordGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSkKKworQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKK19MVF9ERUNMKFtdLCBbU1RSSVBdLCBbMV0sIFtBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbV0pCisKK0FDX0NIRUNLX1RPT0woUkFOTElCLCByYW5saWIsIDopCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorX0xUX0RFQ0woW10sIFtSQU5MSUJdLCBbMV0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdGluc3RhbGxfY21kc10sIFsyXSkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCitdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorCisKKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCitmaQorXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKworCisjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkRUNITyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKK2Vsc2UKKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitmaQorXSkjIF9MVF9MSU5LRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW19MVF9MSU5LRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwgW10pCisKKworIyBMVF9DTURfTUFYX0xFTgorIy0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0NNRF9NQVhfTEVOXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbCSBdXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlhYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCisJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKK2lmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vbmUpCitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorX0xUX0RFQ0woW10sIFttYXhfY21kX2xlbl0sIFswXSwKKyAgICBbV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kP10pCitdKSMgTFRfQ01EX01BWF9MRU4KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtMVF9DTURfTUFYX0xFTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW10pCisKKworIyBfTFRfSEVBREVSX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfSEVBREVSX0RMRkNOXSwKK1tBQ19DSEVDS19IRUFERVJTKFtkbGZjbi5oXSwgW10sIFtdLCBbQUNfSU5DTFVERVNfREVGQVVMVF0pZG5sCitdKSMgX0xUX0hFQURFUl9ETEZDTgorCisKKyMgX0xUX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVFJZX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitbI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK31dCitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICAkMworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKK10pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCisKKworIyBMVF9TWVNfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICBdKQorICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisJICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQorICAgIF0pCisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitdKSMgTFRfU1lTX0RMT1BFTl9TRUxGCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKK10pCitfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKK10pIyBfTFRfQ09NUElMRVJfQ19PCisKKworIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK200X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCitbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQorCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKK10pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUworCisKKyMgX0xUX0NIRUNLX09CSkRJUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKK29iamRpcj0kbHRfY3Zfb2JqZGlyCitfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKyAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitdKSMgX0xUX0NIRUNLX09CSkRJUgorCisKKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCitbQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK19MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAorICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCitdKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICisKKworIyBfTFRfQ01EX1NUUklQTElCCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKK10pIyBfTFRfQ01EX1NUUklQTElCCisKKworIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQorbTRfaWYoWyQxXSwKKwlbXSwgWworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKKyAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgIGlmICRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICBlbHNlCisgICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICBmaQorICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxzZQorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30geworICBsdF9mb289IiI7CisgIGx0X2NvdW50PTA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmldKQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFtbNC05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8ICRHUkVQICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKK200X2lmKFskMV0sIFtdLFsKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICA7OworCitpbnRlcml4W1szLTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCogfCBrKmJzZCotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSlcIjsgXAorICAgICAgIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICBbQVNfSUYoWyAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGxdLAorICAgICAgIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzXSldKQorICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgbGliZGlyPSRzYXZlX2xpYmRpcgorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQWRkIEFCSS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgc3lzdGVtIGxpYnJhcnkgcGF0aC4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWI2NCAvdXNyL2xpYjY0IC9saWIgL3Vzci9saWIiCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKKyAgZWxzZQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7CisgICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OworICBlc2FjCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3RwZiopCisgICMgVFBGIGlzIGEgY3Jvc3MtdGFyZ2V0IG9ubHkuICBQcmVmZXJyZWQgY3Jvc3MtaG9zdCA9IEdOVS9MaW51eC4KKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNdLCBbMl0sCisgICAgW1J1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8kMTsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJDEiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhY10pCitNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CittNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAorW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIF9MVF9QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCisgIGVsc2UKKyAgICBNQUdJQ19DTUQ9OgorICBmaQorZmkKK10pIyBfTFRfUEFUSF9NQUdJQworCisKKyMgTFRfUEFUSF9MRAorIyAtLS0tLS0tLS0tCisjIGZpbmQgdGhlIHBhdGhuYW1lIHRvIHRoZSBHTlUgb3Igbm9uLUdOVSBsaW5rZXIKK0FDX0RFRlVOKFtMVF9QQVRIX0xEXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorCitBQ19BUkdfV0lUSChbZ251LWxkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAorCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAorICAgIFt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXNdLAorICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK19MVF9QQVRIX0xEX0dOVQorQUNfU1VCU1QoW0xEXSkKKworX0xUX1RBR0RFQ0woW10sIFtMRF0sIFsxXSwgW1RoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXNdKQorXSkjIExUX1BBVEhfTEQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK0FVX0FMSUFTKFtBQ19QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTERdLCBbXSkKKworCisjIF9MVF9QQVRIX0xEX0dOVQorIy0gLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUEFUSF9MRF9HTlVdLAorW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGx0X2N2X3Byb2dfZ251X2xkLAorWyMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhY10pCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKK10pIyBfTFRfUEFUSF9MRF9HTlUKKworCisjIF9MVF9DTURfUkVMT0FECisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgcmVsb2FkIGZsYWcgZm9yIGxpbmtlcgorIyAgIC0tIFBPUlRNRSBTb21lIGxpbmtlcnMgbWF5IG5lZWQgYSBkaWZmZXJlbnQgcmVsb2FkIGZsYWcuCittNF9kZWZ1bihbX0xUX0NNRF9SRUxPQURdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9ERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9ERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFtbNC05XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYykKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pW1szLTldXTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JworICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICBmaQorICA7OworCitnbnUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nXQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAorICAgIDs7CisgICopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18UEEtUklTQ1tbMC05XV0uW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUpCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKK10pCitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKK19MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgW01ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19jbWRdLCBbMV0sCisgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiXSkKK10pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisKKworIyBMVF9QQVRIX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKK0FDX0RFRlVOKFtMVF9QQVRIX05NXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpXSkKK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2Vsc2UKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIEFDX0NIRUNLX1RPT0xTKERVTVBCSU4sIFsiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiXSwgOikKKyAgQUNfU1VCU1QoW0RVTVBCSU5dKQorICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCisgICAgTk09IiREVU1QQklOIgorICBmaQorZmkKK3Rlc3QgLXogIiROTSIgJiYgTk09bm0KK0FDX1NVQlNUKFtOTV0pCitfTFRfREVDTChbXSwgW05NXSwgWzFdLCBbQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXJdKWRubAorCitBQ19DQUNIRV9DSEVDSyhbdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLAorICBbbHRfY3Zfbm1faW50ZXJmYWNlPSJCU0Qgbm0iCisgIGVjaG8gImludCBzb21lX3ZhcmlhYmxlID0gMDsiID4gY29uZnRlc3QuJGFjX2V4dAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkYWNfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186IG91dHB1dFwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICBjYXQgY29uZnRlc3Qub3V0ID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgaWYgJEdSRVAgJ0V4dGVybmFsLipzb21lX3ZhcmlhYmxlJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9ubV9pbnRlcmZhY2U9Ik1TIGR1bXBiaW4iCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitdKSMgTFRfUEFUSF9OTQorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorQVVfQUxJQVMoW0FDX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTk1dLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19OTV0sIFtdKQorCisKKyMgTFRfTElCX00KKyMgLS0tLS0tLS0KKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorQUNfREVGVU4oW0xUX0xJQl9NXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitMSUJNPQorY2FzZSAkaG9zdCBpbgorKi0qLWJlb3MqIHwgKi0qLWN5Z3dpbiogfCAqLSotcHczMiogfCAqLSotZGFyd2luKikKKyAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CisgIDs7CisqLW5jci1zeXN2NC4zKikKKyAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCisgIDs7CisqKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisKKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zLAorICAgIFstZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwgW10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIl0pCitmaQorX0xUX1RBR0RFQ0woW25vX2J1aWx0aW5fZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9uc10pCitdKSMgX0xUX0NPTVBJTEVSX05PX1JUVEkKKworCisjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK0FDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAorWworIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCisjIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQorCisjIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCitzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCisKKyMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCitjYXNlICRob3N0X29zIGluCithaXgqKQorICBzeW1jb2RlPSdbW0JDRFRdXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIDs7Citpcml4KiB8IG5vbnN0b3B1eCopCisgIHN5bWNvZGU9J1tbQkNERUdSU1RdXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tbQkNERUdRUlNUXV0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW1tCRFJUXV0nCisgIDs7CitzY28zLjJ2NSopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbW0FCRFRdXScKKyAgOzsKK3N5c3Y0KQorICBzeW1jb2RlPSdbW0RGTlNUVV1dJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OworZXNhYworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCisjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKKyIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAorIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tbXV0gPQoreworICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCitfTFRfRU9GCisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitfTFRfRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF9waXBlXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLCBbMV0sCisgICAgW1Rha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXNdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb25dKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4W1s0LTldXSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRndXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBlYysrKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgICAgOzsKKwkgIGljcGMqICkKKwkgICAgIyBJbnRlbCBDKyssIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorCSAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqIHwgcGdjcHAqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgeGxjKiB8IHhsQyopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctLXNoYXJlZCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworCTs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIHhsKikKKwkjIElCTSBYTCBDIDguMC9Gb3J0cmFuIDEwLjEgb24gUFBDCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgOzsKKwkqU3VuXCBGKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHJkb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKK10pCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdERUNMKFt3bF0sIFtsdF9wcm9nX2NvbXBpbGVyX3dsXSwgWzFdLAorCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSldLAorICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK19MVF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCisgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKyAgJGx0X3RtcF9zdGF0aWNfZmxhZywKKyAgW10sCisgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKK19MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nXSkKK10pIyBfTFRfQ09NUElMRVJfUElDCisKKworIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCitbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBjYXNlICRob3N0X29zIGluCisgIGFpeFtbNC05XV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChbc3Vic3RyXShcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICBlc2FjCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorXSwgWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgorICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgd2xhcmM9JyR7d2x9JworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCisgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKwkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWVsc2UKKwkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwlmaX4KKwkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9CisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW1tjQ11dKikJCQkjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4W1s0LTldXSopCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKwkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSIiCisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGAkRUNITyAiWCRkZXBsaWJzIiB8ICRYc2VkIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIF9MVF9UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoaW50IGZvbyh2b2lkKSB7fSwKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICAgKQorICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgIGVsc2UKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCSopCisJICB3bGFyYz0nJHt3bH0nCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworICAgICAgKikKKwkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAorCitfTFRfREVDTChbXSwgW2xpYmV4dF0sIFswXSwgW09sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKV0pZG5sCitfTFRfREVDTChbXSwgW3NocmV4dF9jbWRzXSwgWzFdLCBbU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIildKWRubAorX0xUX0RFQ0woW10sIFtleHRyYWN0X2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dKQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIHNvbmFtZT1jb25mdGVzdAorICAgICAgICBsaWI9Y29uZnRlc3QKKyAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisgICAgICAgIGRlcGxpYnM9CisgICAgICAgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCXBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgICAgICAgaWYgQUNfVFJZX0VWQUwoX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKyAgICAgICAgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIGVsc2UKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRSTSBjb25mdGVzdCoKKyAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXSwgWzFdLAorICAgIFtbSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5CisgICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbZml4X3NyY2ZpbGVfcGF0aF0sIFsxXSwKKyAgICBbRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlc10pCitkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK2RubCBfTFRfVEFHREVDTChbXSwgW3RocmVhZF9zYWZlX2ZsYWdfc3BlY10sIFsxXSwKK2RubCAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQgc2FmZSBvYmplY3RzXSkKK10pIyBfTFRfTElOS0VSX1NITElCUworCisKKyMgX0xUX0xBTkdfQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK2x0X3NhdmVfQ0M9IiRDQyIKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorQUNfTEFOR19QT1AKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX1BST0dfQ1hYCisjIC0tLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0NYWCBpcyBicm9rZW4sIGluIHRoYXQgaXQgcmV0dXJucyBnKysgaWYgdGhlcmUgaXMgbm8gYysrCisjIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0NYWF0sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzXSkKK0FDX1BST0dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfQ1hYCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbX0xUX1BST0dfQ1hYXSwgW10pCisKKworIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19DWFhdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKyAgICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICAgICAjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIDs7CisgICAgICAgICAgZXNhYworCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICAgIGZpCisKKyAgICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKKyAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJICAjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworICAgICAgICAgIGVsc2UKKwkgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0bworCSMgZXhwb3J0LgorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgIyBleGVjdXRhYmxlLgorICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gJEVDSE8gIlgke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiB8ICRYc2VkOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKworICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKyAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgZWxzZQorCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2RbWzEyXV0qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGdudSopCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU0dJIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251KQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisJICBpY3BjKiB8IGVjcGMqICkKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgd2l0aF9nbnVfbGQ9eWVzCisJICAgICMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJICAgICMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJICAgICMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisJICAgIGNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSAgICAgICoiVmVyc2lvbiA3LiIqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgICAgICAgdG1wX2lkeW49CisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKKwkJZXNhYworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXSogfCAqcGdjcHBcIFtbMS01XV0qKQorCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisJCSRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IHdpbGwgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QyKikKKyAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworCisgICAgICBvcGVuYnNkKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWVjaG8KKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWAkRUNITyAiWCR0ZW1wbGlzdCIgfCAkWHNlZCAtZSAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAgIG9zZjMqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgICAgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisJICAgICAgZmkKKworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCSAgKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCisgICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoJDEpCisgICAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICAgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICAgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICAgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgICAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgICAgX0xUX0NPTkZJRygkMSkKKyAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX1NZU19ISURERU5fTElCREVQUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorIyBjb21waWxlciBvdXRwdXQgd2hlbiBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCittNF9kZWZ1bihbX0xUX1NZU19ISURERU5fTElCREVQU10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10pCitkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Citkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgoraWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICRwIGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK200X2lmKFskMV0sIFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbWzMtOV1dKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworXSkKKworY2FzZSAiICRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgorKiIgLWxjICIqKSBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKK2VzYWMKKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQoraWYgdGVzdCAtbiAiJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSI7IHRoZW4KKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfUFJPR19GNzcKKyMgLS0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfRjc3IGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcKKyMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KK200X2RlZnVuKFtfTFRfUFJPR19GNzddLAorWworcHVzaGRlZihbQUNfTVNHX0VSUk9SXSwgW19sdF9kaXNhYmxlX0Y3Nz15ZXNdKQorQUNfUFJPR19GNzcKK2lmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfRjc3CisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbX0xUX1BST0dfRjc3XSwgW10pCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfUkVRVUlSRShbX0xUX1BST0dfRjc3XSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSIkbHRfc2F2ZV9DQyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX1BST0dfRkMKKyMgLS0tLS0tLS0tLS0KKyMgU2luY2UgQUNfUFJPR19GQyBpcyBicm9rZW4sIGluIHRoYXQgaXQgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nCisjIGlmIHRoZXJlIGlzIG5vIGZvcnRyYW4gY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfRkNdLAorWworcHVzaGRlZihbQUNfTVNHX0VSUk9SXSwgW19sdF9kaXNhYmxlX0ZDPXllc10pCitBQ19QUk9HX0ZDCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRkM9eWVzCitmaQorcG9wZGVmKFtBQ19NU0dfRVJST1JdKQorXSkjIF9MVF9QUk9HX0ZDCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbX0xUX1BST0dfRkNdLCBbXSkKKworCisjIF9MVF9MQU5HX0ZDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19GQ10pZG5sCitBQ19MQU5HX1BVU0goRm9ydHJhbikKKworX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGZjIHRlc3Qgc291cmNlcy4KK2FjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZmMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCisgICAgICBzdWJyb3V0aW5lIHQKKyAgICAgIHJldHVybgorICAgICAgZW5kCisiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCisgICAgICBwcm9ncmFtIHQKKyAgICAgIGVuZAorIgorCisgICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKyAgX0xUX1RBR19DT01QSUxFUgorCisgICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCisgIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0dDQz0kR0NDCisgIENDPSR7RkMtImY5NSJ9CisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisJICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSIkbHRfc2F2ZV9DQyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHQ0otImdjaiJ9Citjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisKKworIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9HQ0M9JEdDQworR0NDPQorQ0M9JHtSQy0id2luZHJlcyJ9Citjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICA6CisgIF9MVF9DT05GSUcoJDEpCitmaQorCitHQ0M9JGx0X3NhdmVfR0NDCitBQ19MQU5HX1JFU1RPUkUKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBfTFRfTEFOR19SQ19DT05GSUcKKworCisjIExUX1BST0dfR0NKCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19HQ0pdLAorW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sIFtBQ19QUk9HX0dDSl0sCisgIFttNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sIFtBXVtNX1BST0dfR0NKXSwKKyAgICBbQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwpCisgICAgICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgICAgIEFDX1NVQlNUKEdDSkZMQUdTKV0pXSlbXWRubAorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX0dDSl0sIFtMVF9QUk9HX0dDSl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwgW10pCisKKworIyBMVF9QUk9HX1JDCisjIC0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX1JDXSwKK1tBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCkKK10pCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19SQ10sIFtMVF9QUk9HX1JDXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sIFtdKQorCisKKyMgX0xUX0RFQ0xfRUdSRVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IGdyZXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfRUdSRVBdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19GR1JFUF0pZG5sCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCitfTFRfREVDTChbXSwgW0dSRVBdLCBbMV0sIFtBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lc10pCitfTFRfREVDTChbXSwgW0VHUkVQXSwgWzFdLCBbQW4gRVJFIG1hdGNoZXJdKQorX0xUX0RFQ0woW10sIFtGR1JFUF0sIFsxXSwgW0EgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlcl0pCitkbmwgTm9uLWJsZWVkaW5nLWVkZ2UgYXV0b2NvbmYgZG9lc24ndCBzdWJzdCBHUkVQLCBzbyBkbyBpdCBoZXJlIHRvbworQUNfU1VCU1QoW0dSRVBdKQorXSkKKworCisjIF9MVF9ERUNMX09CSkRVTVAKKyMgLS0tLS0tLS0tLS0tLS0KKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBlbm91Z2ggQXV0b2NvbmYgdG8gY2hvb3NlIHRoZSBiZXN0IG9iamR1bXAKKyMgYXZhaWxhYmxlLCBjaG9vc2UgdGhlIG9uZSBmaXJzdCBpbiB0aGUgdXNlcidzIFBBVEguCittNF9kZWZ1bihbX0xUX0RFQ0xfT0JKRFVNUF0sCitbQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKK0FDX1NVQlNUKFtPQkpEVU1QXSkKK10pCisKKworIyBfTFRfREVDTF9TRUQKKyMgLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBhIGZ1bGx5LWZ1bmN0aW9uYWwgc2VkIHByb2dyYW0sIHRoYXQgdHJ1bmNhdGVzCisjIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlLiAgUHJlZmVyIEdOVSBzZWQgaWYgZm91bmQuCittNF9kZWZ1bihbX0xUX0RFQ0xfU0VEXSwKK1tBQ19QUk9HX1NFRAordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorX0xUX0RFQ0woW10sIFtTRURdLCBbMV0sIFtBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK19MVF9ERUNMKFtdLCBbWHNlZF0sIFsiXCRTRUQgLWUgMXMvXlgvLyJdLAorICAgIFtTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbl0pCitdKSMgX0xUX0RFQ0xfU0VECisKK200X2lmbmRlZihbQUNfUFJPR19TRURdLCBbCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIworIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCisjICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKKyMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK200X2RlZnVuKFtBQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitJRlM9JGFzX3NhdmVfSUZTCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorXSkKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKK0FDX1NVQlNUKFtTRURdKQorQUNfTVNHX1JFU1VMVChbJFNFRF0pCitdKSNBQ19QUk9HX1NFRAorXSkjbTRfaWZuZGVmCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQorCisKKyMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCisjIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0c10pCisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLCwgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCitBQ19NU0dfUkVTVUxUKFskeHNpX3NoZWxsXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAiKz0iXSkKK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK0FDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCddKQorCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCitfTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCisKKyMgdGVzdCBFQkNESUMgb3IgQVNDSUkKK2Nhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KKyBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQorICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKKyAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKKyAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJworICA7OworICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQorICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKKyAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCisgIDs7Citlc2FjCitfTFRfREVDTChbU1AyTkxdLCBbbHRfU1AyTkxdLCBbMV0sIFt0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzXSlkbmwKK19MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAorXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworCisKKyMgX0xUX1BST0dfWFNJX1NIRUxMRk5TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCb3VybmUgYW5kIFhTSSBjb21wYXRpYmxlIHZhcmlhbnRzIG9mIHNvbWUgdXNlZnVsIHNoZWxsIGZ1bmN0aW9ucy4KK200X2RlZnVuKFtfTFRfUFJPR19YU0lfU0hFTExGTlNdLAorW2Nhc2UgJHhzaV9zaGVsbCBpbgorICB5ZXMpCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorfQorCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKyAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgZXNhYworfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSkKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorfQorCitfTFRfRU9GCisgICAgOzsKKyAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCitkbmwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZQorZG5sIEEgcG9ydGFibGUgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBnZW5lcmFsLm00c2gKK2RubCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBoZXJlLgorCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKyAgICAgICAgICAgfCAkWHNlZCAtZSAicyVeJHsxfSUlIiAtZSAicyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfQorCisjIHNlZCBzY3JpcHRzOgorbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW1tePV1dKlwpPS4qL1wxLztxJworbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtbXj1dXSo9Ly8nCisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkbXlfc2VkX2xvbmdfb3B0ImAKKyAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19hcmciYAorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRsbzJvImAKK30KKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAncy9cLltbXi5dXSokLy5sby8nYAorfQorCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkW0BdImAKK30KKworIyBmdW5jX2xlbiBzdHJpbmcKKyMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KK2Z1bmNfbGVuICgpCit7CisgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJFsxXSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorfQorCitfTFRfRU9GCitlc2FjCisKK2Nhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorICB5ZXMpCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJFsxXSs9XCRbMl0iCit9CitfTFRfRU9GCisgICAgOzsKKyAgKikKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkWzFdPVwkJFsxXVwkWzJdIgorfQorCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQxNTFhMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00CkBAIC0wLDAgKzEsMzY4IEBACisjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0b3B0aW9ucy5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCisKKyMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCitbW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCisKKworIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCisjIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCisjIHNhdmVkIGFzIGEgZmxhZy4KK200X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKK200X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKK10pCisKKworIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgorbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKK1ttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQorCisKKyMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKKyMgYXJlIHNldC4KK200X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKK1ttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKwkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAorCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCittNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKK10pW11kbmwKK10pCisKKworIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAorIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAorIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKKyMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgorbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCitbIyBTZXQgb3B0aW9ucworbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisgICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKKworbTRfaWYoWyQxXSxbTFRfSU5JVF0sWworICBkbmwKKyAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90CisgIGRubCBzcGVjaWZpZWQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubworICBdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KKyAgXSkKKyAgZG5sCisgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCisgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCisgIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCisgIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKyAgXSkKK10pIyBfTFRfU0VUX09QVElPTlMKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1hY3JvcyB0byBoYW5kbGUgTFRfSU5JVCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCitbW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKKworCisjIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAorW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCitdKSMgTFRfT1BUSU9OX0RFRklORQorCisKKyMgZGxvcGVuCisjIC0tLS0tLQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKK10pCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKKworCisjIHdpbjMyLWRsbAorIyAtLS0tLS0tLS0KKyMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAorW2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFswXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzBdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMF0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKKyMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAorIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCisjIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgTFRfSU5JVCBvcHRpb25zLgorIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorW0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY10sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbcGljX21vZGU9IiR3aXRodmFsIl0sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQorCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExURExfSU5JVCBPcHRpb25zICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwMGEwNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNApAQCAtMCwwICsxLDEyMyBAQAorIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRzdWdhci5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQorCisKKyMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKyMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKyMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KK200X2RlZmluZShbbHRfam9pbl0sCitbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorbTRfZGVmaW5lKFtfbHRfam9pbl0sCitbbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbHRfY2FyKExJU1QpCisjIGx0X2NkcihMSVNUKQorIyAtLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KK200X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQorbTRfZGVmaW5lKFtsdF9jZHJdLAorW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCisgICAgICAgWyQjXSwgMSwgW10sCisgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCisKKworIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCisjIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgorIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKKyMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCisjCisjIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKKyMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KK200X2RlZmluZShbbHRfYXBwZW5kXSwKK1ttNF9kZWZpbmUoWyQxXSwKKwkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKworCisKKyMgbHRfY29tYmluZShTRVAsIFBSRUZJWC1MSVNULCBJTkZJWCwgU1VGRklYMSwgW1NVRkZJWDIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKKyMgUFJFRklYLUxJU1Qgd2l0aCBTVUZGSVgxIHRocm91Z2ggU1VGRklYbi4gIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdAorIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2NvbWJpbmUgYWRkZWQgaW4gQXV0b2NvbmYgMi42Mi4KK200X2RlZmluZShbbHRfY29tYmluZV0sCitbbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX0x0X3NlcF0sIFttNF9kZWZpbmUoW19MdF9zZXBdLCBtNF9kZWZuKFtsdF9jYXJdKSldKV1dZG5sCitbW200X2ZvcmVhY2goW19MdF9wcmVmaXhdLCBbJDJdLAorCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAorCQldbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKSkpWywKKwlbX0x0X3NlcChbJDFdKVtdbTRfZGVmbihbX0x0X3ByZWZpeF0pWyQzXW00X2RlZm4oW19MdF9zdWZmaXhdKV0pXSldKV0pCisKKworIyBsdF9pZl9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBWQVJOQU1FLCBbU0VQQVJBVE9SXSwgW1VOSVFdLCBbTk9ULVVOSVFdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCisjIGJ5IFNFUEFSQVRPUiBpZiBzdXBwbGllZCkgYW5kIGV4cGFuZCBVTklRLCBlbHNlIE5PVC1VTklRLgorbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCitbbTRfaWZkZWYoWyQxXSwKKwkgIFttNF9pZihtNF9pbmRleChbJDNdbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKKwkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCisJCSBbJDVdKV0sCisJICBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdKV0pCisKKworIyBsdF9kaWN0X2FkZChESUNULCBLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCitbbTRfZGVmaW5lKFskMSgkMildLCBbJDNdKV0pCisKKworIyBsdF9kaWN0X2FkZF9zdWJrZXkoRElDVCwgS0VZLCBTVUJLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAorW200X2RlZmluZShbJDEoJDI6JDMpXSwgWyQ0XSldKQorCisKKyMgbHRfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAorW200X2lmdmFsKFskM10sCisJbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAorICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQorCisKKyMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCitbbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKKwlbJDVdLAorICAgIFskNl0pXSkKKworCisjIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmlsdGVyXSwKK1ttNF9pZihbJDVdLCBbXSwgW10sCisgIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCisgICAgICAgICAgIGx0X3VucXVvdGUobTRfc3BsaXQobTRfbm9ybWFsaXplKG00X2ZvcmVhY2goX0x0X2tleSwgbHRfY2FyKFttNF9zaGlmdG4oNCwgJEApXSksCisJCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAorXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlMTU0ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00CkBAIC0wLDAgKzEsMjMgQEAKKyMgbHR2ZXJzaW9uLm00IC0tIHZlcnNpb24gbnVtYmVycwkJCS0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBHZW5lcmF0ZWQgZnJvbSBsdHZlcnNpb24uaW4uCisKKyMgc2VyaWFsIDMwMTIgbHR2ZXJzaW9uLm00CisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCisKK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuMi42XSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMwMTJdKQorCitBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAorW21hY3JvX3ZlcnNpb249JzIuMi42JworbWFjcm9fcmV2aXNpb249JzEuMzAxMicKK19MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKK10pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzdiYjIwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNApAQCAtMCwwICsxLDkyIEBACisjIGx0fm9ic29sZXRlLm00IC0tIGFjbG9jYWwgc2F0aXNmeWluZyBvYnNvbGV0ZSBkZWZpbml0aW9ucy4gICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0LgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDQgbHR+b2Jzb2xldGUubTQKKworIyBUaGVzZSBleGlzdCBlbnRpcmVseSB0byBmb29sIGFjbG9jYWwgd2hlbiBib290c3RyYXBwaW5nIGxpYnRvb2wuCisjCisjIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKQorIyB3aGljaCBoYXZlIGxhdGVyIGJlZW4gY2hhbmdlZCB0byBtNF9kZWZpbmUgYXMgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUKKyMgZXhwb3J0ZWQgQVBJLCBvciBtb3ZlZCB0byBBdXRvY29uZiBvciBBdXRvbWFrZSB3aGVyZSB0aGV5IGJlbG9uZy4KKyMKKyMgVGhlIHRyb3VibGUgaXMsIGFjbG9jYWwgaXMgYSBiaXQgdGhpY2suICBJdCdsbCBzZWUgdGhlIG9sZCBBQ19ERUZVTgorIyBpbiAvdXNyL3NoYXJlL2FjbG9jYWwvbGlidG9vbC5tNCBhbmQgcmVtZW1iZXIgaXQsIHRoZW4gd2hlbiBpdCBzZWVzIHVzCisjIHVzaW5nIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGluIG91ciBsb2NhbCBtNC9saWJ0b29sLm00IGl0J2xsCisjIHB1bGwgdGhlIG9sZCBsaWJ0b29sLm00IGluIChpdCBkb2Vzbid0IHNlZSBvdXIgc2hpbnkgbmV3IG00X2RlZmluZQorIyBhbmQgZG9lc24ndCBrbm93IGFib3V0IEF1dG9jb25mIG1hY3JvcyBhdCBhbGwuKQorIworIyBTbyB3ZSBwcm92aWRlIHRoaXMgZmlsZSwgd2hpY2ggaGFzIGEgc2lsbHkgZmlsZW5hbWUgc28gaXQncyBhbHdheXMKKyMgaW5jbHVkZWQgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBwcm92aWRlcyBhY2xvY2FsIHdpdGggdGhlCisjIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisjIGJlY2F1c2UgdGhvc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QsIG9yIHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisjIFdlIHVzZSBBQ19ERUZVTiBvdmVyIEFVX0RFRlVOIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWNsb2NhbC0xLjYuIAorIworIyBBbnl0aW1lIHdlIHdpdGhkcmF3IGFuIEFDX0RFRlVOIG9yIEFVX0RFRlVOLCByZW1lbWJlciB0byBhZGQgaXQgaGVyZS4KKyMgWWVzLCB0aGF0IG1lYW5zIGV2ZXJ5IG5hbWUgb25jZSB0YWtlbiB3aWxsIG5lZWQgdG8gcmVtYWluIGhlcmUgdW50aWwKKyMgd2UgZ2l2ZSB1cCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgYmVmb3JlIDEuNywgYXQgd2hpY2ggcG9pbnQKKyMgd2UgbmVlZCB0byBrZWVwIG9ubHkgdGhvc2UgbmFtZXMgd2hpY2ggd2Ugc3RpbGwgcmVmZXIgdG8uCisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPQlNPTEVURV9WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU0hFTExfSU5JVF0sCQlbQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19MVE1BSU5dLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19MVE1BSU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdWQVJdLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX1BSRU9QRU5dLAkJW0FDX0RFRlVOKFtBQ19MVERMX1BSRU9QRU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfQ09NUElMRVJdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfQ09NUElMRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MT0NLXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xPQ0tdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCVtBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTFRETF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdKV0pCittNF9pZm5kZWYoW0FDX1BBVEhfTUFHSUNdLAkJW0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX0dOVV0sCQlbQUNfREVGVU4oW0FDX1BST0dfTERfR05VXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSldKQorbTRfaWZuZGVmKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0sCVtBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX1NFRF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSldKQorbTRfaWZuZGVmKFtfTFRfQ0NfQkFTRU5BTUVdLAkJW0FDX0RFRlVOKFtfTFRfQ0NfQkFTRU5BTUVdKV0pCittNF9pZm5kZWYoW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfQUNfUFJPR19MSUJUT09MXSwJCVtBQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TRVRVUF0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19DSEVDS19ETEZDTl0sCQlbQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHQ09ORklHXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1JDXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5hbSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTkyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDggQEAKKyMjIFByb2Nlc3MgdGhpcyB3aXRoIGF1dG9tYWtlIHRvIGNyZWF0ZSBNYWtlZmlsZS5pbgorCitBVVRPTUFLRV9PUFRJT05TPWZvcmVpZ24KKworRVhUUkFfRElTVCA9IGZmaS4zIGZmaV9jYWxsLjMgZmZpX3ByZXBfY2lmLjMKKworbWFuX01BTlMgPSBmZmkuMyBmZmlfY2FsbC4zIGZmaV9wcmVwX2NpZi4zCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U0MGJlMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDQ4IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExIGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK3N1YmRpciA9IG1hbgorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCithbV9fY29uZmlndXJlX2RlcHMgPSAkKGFtX19hY2xvY2FsX200X2RlcHMpICQoQ09ORklHVVJFX0RFUEVOREVOQ0lFUykgXAorCSQoQUNMT0NBTF9NNCkKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKK21hbjNkaXIgPSAkKG1hbmRpcikvbWFuMworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKG1hbjNkaXIpIgorTlJPRkYgPSBucm9mZgorTUFOUyA9ICQobWFuX01BTlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FNVEFSID0gQEFNVEFSQAorQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDQVMgPSBAQ0NBU0AKK0NDQVNERVBNT0RFID0gQENDQVNERVBNT0RFQAorQ0NBU0ZMQUdTID0gQENDQVNGTEFHU0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0ZHUkVQID0gQEZHUkVQQAorR1JFUCA9IEBHUkVQQAorSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMRCA9IEBMREAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xJUE8gPSBATElQT0AKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitNQUlOVCA9IEBNQUlOVEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFOTElCID0gQFJBTkxJQkAKK1NFRCA9IEBTRURACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitUQVJHRVQgPSBAVEFSR0VUQAorVEFSR0VURElSID0gQFRBUkdFVERJUkAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitidWlsZGRpciA9IEBidWlsZGRpckAKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZG9jZGlyID0gQGRvY2RpckAKK2R2aWRpciA9IEBkdmlkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitodG1sZGlyID0gQGh0bWxkaXJACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwZGZkaXIgPSBAcGRmZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3BzZGlyID0gQHBzZGlyQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzcmNkaXIgPSBAc3JjZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAordG9vbGV4ZWNkaXIgPSBAdG9vbGV4ZWNkaXJACit0b29sZXhlY2xpYmRpciA9IEB0b29sZXhlY2xpYmRpckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKK3RvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorRVhUUkFfRElTVCA9IGZmaS4zIGZmaV9jYWxsLjMgZmZpX3ByZXBfY2lmLjMKK21hbl9NQU5TID0gZmZpLjMgZmZpX2NhbGwuMyBmZmlfcHJlcF9jaWYuMworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIG1hbi9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbWFuL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworaW5zdGFsbC1tYW4zOiAkKG1hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobWFuM2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKG1hbjNkaXIpIgorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjNkaXIpIiB8fCBleGl0IDA7IFwKKwl7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjNbYS16XSokJC9wJzsgXAorCX0gfCB3aGlsZSByZWFkIHA7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgZWNobyAiJCRwIjsgXAorCWRvbmUgfCBcCisJc2VkIC1lICduO3MsLiovLCw7cDtoO3MsLipcLiwsO3MsXlteM11bMC05YS16XSokJCwzLDt4JyBcCisJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnIHwgXAorCXNlZCAnTjtOO3MsXG4sICxnJyB8IHsgXAorCWxpc3Q9OyB3aGlsZSByZWFkIGZpbGUgYmFzZSBpbnN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJGJhc2UiID0gIiQkaW5zdCI7IHRoZW4gbGlzdD0iJCRsaXN0ICQkZmlsZSI7IGVsc2UgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGZpbGUnICckKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QnIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgIiQkZmlsZSIgIiQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCIgfHwgZXhpdCAkJD87IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQobWFuM2RpciknIjsgXAorCSAgICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQobWFuM2RpcikiIHx8IGV4aXQgJCQ/OyB9OyBcCisJZG9uZTsgfQorCit1bmluc3RhbGwtbWFuMzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PScnOyB0ZXN0IC1uICIkKG1hbjNkaXIpIiB8fCBleGl0IDA7IFwKKwlmaWxlcz1geyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmU7IFwKKwlsMj0nJChtYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4zW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCisJICBlY2hvICIgKCBjZCAnJChERVNURElSKSQobWFuM2RpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCSAgY2QgIiQoREVTVERJUikkKG1hbjNkaXIpIiAmJiBybSAtZiAkJGZpbGVzOyB9Cit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKKwkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAorCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKKwkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSBcYG1pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKKwkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKKwkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5IFxgbWFrZSBtYWludGFpbmVyLWNsZWFuJyB3aWxsIHJlbW92ZSB0aGVtIiA+JjI7IFwKKwkgICAgZXhpdCAxOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZWxzZSA6OyBmaQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTUFOUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKG1hbjNkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQoTUtESVJfUCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06IGluc3RhbGwtbWFuCisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuMworCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1tYW4KKwordW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjMKKworLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuMyBcCisJaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1tYW4zCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpLjMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI1ZDVkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpLjMKQEAgLTAsMCArMSwzMSBAQAorLkRkIEZlYnJ1YXJ5IDE1LCAyMDA4CisuRHQgRkZJIDMKKy5TaCBOQU1FCisuTm0gRkZJCisuTmQgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKy5TaCBMSUJSQVJZCitsaWJmZmksIC1sZmZpCisuU2ggU1lOT1BTSVMKKy5JbiBmZmkuaAorLkZ0IGZmaV9zdGF0dXMKKy5GbyBmZmlfcHJlcF9jaWYKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJmZmlfYWJpIGFiaSIKKy5GYSAidW5zaWduZWQgaW50IG5hcmdzIgorLkZhICJmZmlfdHlwZSAqcnR5cGUiCisuRmEgImZmaV90eXBlICoqYXR5cGVzIgorLkZjCisuRnQgdm9pZAorLkZvIGZmaV9jYWxsCisuRmEgImZmaV9jaWYgKmNpZiIKKy5GYSAidm9pZCAoKmZuKSh2b2lkKSIKKy5GYSAidm9pZCAqcnZhbHVlIgorLkZhICJ2b2lkICoqYXZhbHVlIgorLkZjCisuU2ggREVTQ1JJUFRJT04KK1RoZSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBwcm92aWRlcyBhIG1lY2hhbmlzbSBieSB3aGljaCBhIGZ1bmN0aW9uIGNhbgorZ2VuZXJhdGUgYSBjYWxsIHRvIGFub3RoZXIgZnVuY3Rpb24gYXQgcnVudGltZSB3aXRob3V0IHJlcXVpcmluZyBrbm93bGVkZ2Ugb2YKK3RoZSBjYWxsZWQgZnVuY3Rpb24ncyBpbnRlcmZhY2UgYXQgY29tcGlsZSB0aW1lLgorLlNoIFNFRSBBTFNPCisuWHIgZmZpX3ByZXBfY2lmIDMgLAorLlhyIGZmaV9jYWxsIDMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9jYWxsLjMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmlfY2FsbC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTE1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmlfY2FsbC4zCkBAIC0wLDAgKzEsMTAzIEBACisuRGQgRmVicnVhcnkgMTUsIDIwMDgKKy5EdCBmZmlfY2FsbCAzCisuU2ggTkFNRQorLk5tIGZmaV9jYWxsCisuTmQgSW52b2tlIGEgZm9yZWlnbiBmdW5jdGlvbi4KKy5TaCBTWU5PUFNJUworLkluIGZmaS5oCisuRnQgdm9pZAorLkZvIGZmaV9jYWxsCisuRmEgImZmaV9jaWYgKmNpZiIKKy5GYSAidm9pZCAoKmZuKSh2b2lkKSIKKy5GYSAidm9pZCAqcnZhbHVlIgorLkZhICJ2b2lkICoqYXZhbHVlIgorLkZjCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tIGZmaV9jYWxsCitmdW5jdGlvbiBwcm92aWRlcyBhIHNpbXBsZSBtZWNoYW5pc20gZm9yIGludm9raW5nIGEgZnVuY3Rpb24gd2l0aG91dAorcmVxdWlyaW5nIGtub3dsZWRnZSBvZiB0aGUgZnVuY3Rpb24ncyBpbnRlcmZhY2UgYXQgY29tcGlsZSB0aW1lLgorLkZhIGZuCitpcyBjYWxsZWQgd2l0aCB0aGUgdmFsdWVzIHJldHJpZXZlZCBmcm9tIHRoZSBwb2ludGVycyBpbiB0aGUKKy5GYSBhdmFsdWUKK2FycmF5LiBUaGUgcmV0dXJuIHZhbHVlIGZyb20KKy5GYSBmbgoraXMgcGxhY2VkIGluIHN0b3JhZ2UgcG9pbnRlZCB0byBieQorLkZhIHJ2YWx1ZSAuCisuRmEgY2lmCitjb250YWlucyBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSBkYXRhIHR5cGVzLCBzaXplcyBhbmQgYWxpZ25tZW50cyBvZiB0aGUKK2FyZ3VtZW50cyB0byBhbmQgcmV0dXJuIHZhbHVlIGZyb20KKy5GYSBmbiAsCithbmQgbXVzdCBiZSBpbml0aWFsaXplZCB3aXRoCisuTm0gZmZpX3ByZXBfY2lmCitiZWZvcmUgaXQgaXMgdXNlZCB3aXRoCisuTm0gZmZpX2NhbGwgLgorLlBwCisuRmEgcnZhbHVlCittdXN0IHBvaW50IHRvIHN0b3JhZ2UgdGhhdCBpcyBzaXplb2YoZmZpX2FyZykgb3IgbGFyZ2VyIGZvciBub24tZmxvYXRpbmcgcG9pbnQKK3R5cGVzLiBGb3Igc21hbGxlci1zaXplZCByZXR1cm4gdmFsdWUgdHlwZXMsIHRoZQorLk5tIGZmaV9hcmcKK29yCisuTm0gZmZpX3NhcmcKK2ludGVncmFsIHR5cGUgbXVzdCBiZSB1c2VkIHRvIGhvbGQKK3RoZSByZXR1cm4gdmFsdWUuCisuU2ggRVhBTVBMRVMKKy5CZCAtbGl0ZXJhbAorI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3Vuc2lnbmVkIGNoYXIKK2Zvbyh1bnNpZ25lZCBpbnQsIGZsb2F0KTsKKworaW50CittYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKyAgICBmZmlfY2lmIGNpZjsKKyAgICBmZmlfdHlwZSAqYXJnX3R5cGVzWzJdOworICAgIHZvaWQgKmFyZ192YWx1ZXNbMl07CisgICAgZmZpX3N0YXR1cyBzdGF0dXM7CisKKyAgICAvLyBCZWNhdXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBmb28oKSBpcyBzbWFsbGVyIHRoYW4gc2l6ZW9mKGxvbmcpLCBpdAorICAgIC8vIG11c3QgYmUgcGFzc2VkIGFzIGZmaV9hcmcgb3IgZmZpX3NhcmcuCisgICAgZmZpX2FyZyByZXN1bHQ7CisKKyAgICAvLyBTcGVjaWZ5IHRoZSBkYXRhIHR5cGUgb2YgZWFjaCBhcmd1bWVudC4gQXZhaWxhYmxlIHR5cGVzIGFyZSBkZWZpbmVkCisgICAgLy8gaW4gPGZmaS9mZmkuaD4uCisgICAgYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworCisgICAgLy8gUHJlcGFyZSB0aGUgZmZpX2NpZiBzdHJ1Y3R1cmUuCisgICAgaWYgKChzdGF0dXMgPSBmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLAorICAgICAgICAyLCAmZmZpX3R5cGVfdWludDgsIGFyZ190eXBlcykpICE9IEZGSV9PSykKKyAgICB7CisgICAgICAgIC8vIEhhbmRsZSB0aGUgZmZpX3N0YXR1cyBlcnJvci4KKyAgICB9CisKKyAgICAvLyBTcGVjaWZ5IHRoZSB2YWx1ZXMgb2YgZWFjaCBhcmd1bWVudC4KKyAgICB1bnNpZ25lZCBpbnQgYXJnMSA9IDQyOworICAgIGZsb2F0IGFyZzIgPSA1LjE7CisKKyAgICBhcmdfdmFsdWVzWzBdID0gJmFyZzE7CisgICAgYXJnX3ZhbHVlc1sxXSA9ICZhcmcyOworCisgICAgLy8gSW52b2tlIHRoZSBmdW5jdGlvbi4KKyAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oZm9vKSwgJnJlc3VsdCwgYXJnX3ZhbHVlcyk7CisKKyAgICAvLyBUaGUgZmZpX2FyZyAncmVzdWx0JyBub3cgY29udGFpbnMgdGhlIHVuc2lnbmVkIGNoYXIgcmV0dXJuZWQgZnJvbSBmb28oKSwKKyAgICAvLyB3aGljaCBjYW4gYmUgYWNjZXNzZWQgYnkgYSB0eXBlY2FzdC4KKyAgICBwcmludGYoInJlc3VsdCBpcyAlaGh1IiwgKHVuc2lnbmVkIGNoYXIpcmVzdWx0KTsKKworICAgIHJldHVybiAwOworfQorCisvLyBUaGUgdGFyZ2V0IGZ1bmN0aW9uLgordW5zaWduZWQgY2hhcgorZm9vKHVuc2lnbmVkIGludCB4LCBmbG9hdCB5KQoreworICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0ID0geCAtIHk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKy5FZAorLlNoIFNFRSBBTFNPCisuWHIgZmZpIDMgLAorLlhyIGZmaV9wcmVwX2NpZiAzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmlfcHJlcF9jaWYuMyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9wcmVwX2NpZi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MzZiMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmlfcHJlcF9jaWYuMwpAQCAtMCwwICsxLDY2IEBACisuRGQgRmVicnVhcnkgMTUsIDIwMDgKKy5EdCBmZmlfcHJlcF9jaWYgMworLlNoIE5BTUUKKy5ObSBmZmlfcHJlcF9jaWYKKy5OZCBQcmVwYXJlIGEKKy5ObSBmZmlfY2lmCitzdHJ1Y3R1cmUgZm9yIHVzZSB3aXRoCisuTm0gZmZpX2NhbGwgCisuCisuU2ggU1lOT1BTSVMKKy5JbiBmZmkuaAorLkZ0IGZmaV9zdGF0dXMKKy5GbyBmZmlfcHJlcF9jaWYKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJmZmlfYWJpIGFiaSIKKy5GYSAidW5zaWduZWQgaW50IG5hcmdzIgorLkZhICJmZmlfdHlwZSAqcnR5cGUiCisuRmEgImZmaV90eXBlICoqYXR5cGVzIgorLkZjCisuU2ggREVTQ1JJUFRJT04KK1RoZQorLk5tIGZmaV9wcmVwX2NpZgorZnVuY3Rpb24gcHJlcGFyZXMgYQorLk5tIGZmaV9jaWYKK3N0cnVjdHVyZSBmb3IgdXNlIHdpdGggCisuTm0gZmZpX2NhbGwKKy4KKy5GYSBhYmkKK3NwZWNpZmllcyBhIHNldCBvZiBjYWxsaW5nIGNvbnZlbnRpb25zIHRvIHVzZS4KKy5GYSBhdHlwZXMKK2lzIGFuIGFycmF5IG9mCisuRmEgbmFyZ3MKK3BvaW50ZXJzIHRvCisuTm0gZmZpX3R5cGUKK3N0cnVjdHMgdGhhdCBkZXNjcmliZSB0aGUgZGF0YSB0eXBlLCBzaXplIGFuZCBhbGlnbm1lbnQgb2YgZWFjaCBhcmd1bWVudC4KKy5GYSBydHlwZQorcG9pbnRzIHRvIGFuCisuTm0gZmZpX3R5cGUKK3RoYXQgZGVzY3JpYmVzIHRoZSBkYXRhIHR5cGUsIHNpemUgYW5kIGFsaWdubWVudCBvZiB0aGUKK3JldHVybiB2YWx1ZS4KKy5TaCBSRVRVUk4gVkFMVUVTCitVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwKKy5ObSBmZmlfcHJlcF9jaWYKK3JldHVybnMKKy5ObSBGRklfT0sgLgorSXQgd2lsbCByZXR1cm4KKy5ObSBGRklfQkFEX1RZUEVERUYKK2lmCisuRmEgY2lmCitpcworLk5tIE5VTEwKK29yCisuRmEgYXR5cGVzCitvcgorLkZhIHJ0eXBlCitpcyBtYWxmb3JtZWQuIElmCisuRmEgYWJpCitkb2VzIG5vdCByZWZlciB0byBhIHZhbGlkIEFCSSwKKy5ObSBGRklfQkFEX0FCSQord2lsbCBiZSByZXR1cm5lZC4gQXZhaWxhYmxlIEFCSXMgYXJlCitkZWZpbmVkIGluCisuTm0gPGZmaXRhcmdldC5oPgorLgorLlNoIFNFRSBBTFNPCisuWHIgZmZpIDMgLAorLlhyIGZmaV9jYWxsIDMgCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDkxNmMwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaApAQCAtMCwwICsxLDIwMSBAQAorIyEvYmluL3NoCisjIEdldCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCBwcmV0dHktcHJpbnQgaXQuCisKK3NjcmlwdHZlcnNpb249MjAwNS0wNi0yOS4yMgorCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgd3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIEp1bmUgMTk5NQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogbWRhdGUtc2ggWy0taGVscF0gWy0tdmVyc2lvbl0gRklMRQorCitQcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIEZJTEUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gIm1kYXRlLXNoICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCisjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KK0xBTkc9QworZXhwb3J0IExBTkcKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQ19USU1FPUMKK2V4cG9ydCBMQ19USU1FCisKKyMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCisjIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgoraWYgdGVzdCAiJHtUSU1FX1NUWUxFK3NldH0iID0gc2V0OyB0aGVuCisgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KKyAgZXhwb3J0IFRJTUVfU1RZTEUKK2ZpCisKK3NhdmVfYXJnMT0kMQorCisjIEZpbmQgb3V0IGhvdyB0byBnZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5LgoraWYgbHMgLUwgL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0nbHMgLUwgLWwgLWQnCitlbHNlCisgIGxzX2NvbW1hbmQ9J2xzIC1sIC1kJworZmkKKworIyBBIGBscyAtbCcgbGluZSBsb29rcyBhcyBmb2xsb3dzIG9uIE9TLzIuCisjICBkcnd4cnd4LS0tICAgICAgICAwIEF1ZyAxMSAgMjAwMSBmb28KKyMgVGhpcyBkaWZmZXJzIGZyb20gVW5peCwgd2hpY2ggYWRkcyBvd25lcnNoaXAgaW5mb3JtYXRpb24uCisjICBkcnd4cnd4LS0tICAgMiByb290ICByb290ICAgICAgNDA5NiBBdWcgMTEgIDIwMDEgZm9vCisjCisjIFRvIGZpbmQgdGhlIGRhdGUsIHdlIHNwbGl0IHRoZSBsaW5lIG9uIHNwYWNlcyBhbmQgaXRlcmF0ZSBvbiB3b3JkcworIyB1bnRpbCB3ZSBmaW5kIGEgbW9udGguICBUaGlzIGNhbm5vdCB3b3JrIHdpdGggZmlsZXMgd2hvc2Ugb3duZXIgaXMgYQorIyB1c2VyIG5hbWVkIGBKYW4nLCBvciBgRmViJywgZXRjLiAgSG93ZXZlciwgaXQncyB1bmxpa2VseSB0aGF0IGAvJworIyB3aWxsIGJlIG93bmVkIGJ5IGEgdXNlciB3aG9zZSBuYW1lIGlzIGEgbW9udGguICBTbyB3ZSBmaXJzdCBsb29rIGF0CisjIHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGRlY2lkZSBob3cgbWFueQorIyB3b3JkcyBzaG91bGQgYmUgc2tpcHBlZCB0byBnZXQgdGhlIGRhdGUuCisKKyMgT24gSFBVWCAvYmluL3NoLCAic2V0IiBpbnRlcnByZXRzICItcnctci0tci0tIiBhcyBvcHRpb25zLCBzbyB0aGUgIngiIGJlbG93Lgorc2V0IHhgbHMgLWwgLWQgL2AKKworIyBGaW5kIHdoaWNoIGFyZ3VtZW50IGlzIHRoZSBtb250aC4KK21vbnRoPQorY29tbWFuZD0KK3VudGlsIHRlc3QgJG1vbnRoCitkbworICBzaGlmdAorICAjIEFkZCBhbm90aGVyIHNoaWZ0IHRvIHRoZSBjb21tYW5kLgorICBjb21tYW5kPSIkY29tbWFuZCBzaGlmdDsiCisgIGNhc2UgJDEgaW4KKyAgICBKYW4pIG1vbnRoPUphbnVhcnk7IG51bW1vbnRoPTE7OworICAgIEZlYikgbW9udGg9RmVicnVhcnk7IG51bW1vbnRoPTI7OworICAgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICAgIEFwcikgbW9udGg9QXByaWw7IG51bW1vbnRoPTQ7OworICAgIE1heSkgbW9udGg9TWF5OyBudW1tb250aD01OzsKKyAgICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICAgIEp1bCkgbW9udGg9SnVseTsgbnVtbW9udGg9Nzs7CisgICAgQXVnKSBtb250aD1BdWd1c3Q7IG51bW1vbnRoPTg7OworICAgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgICBPY3QpIG1vbnRoPU9jdG9iZXI7IG51bW1vbnRoPTEwOzsKKyAgICBOb3YpIG1vbnRoPU5vdmVtYmVyOyBudW1tb250aD0xMTs7CisgICAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworICBlc2FjCitkb25lCisKKyMgR2V0IHRoZSBleHRlbmRlZCBscyBvdXRwdXQgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5Lgorc2V0IGR1bW15IHhgZXZhbCAiJGxzX2NvbW1hbmQgXCJcJHNhdmVfYXJnMVwiImAKKworIyBSZW1vdmUgYWxsIHByZWNlZGluZyBhcmd1bWVudHMKK2V2YWwgJGNvbW1hbmQKKworIyBCZWNhdXNlIG9mIHRoZSBkdW1teSBhcmd1bWVudCBhYm92ZSwgbW9udGggaXMgaW4gJDIuCisjCisjIE9uIGEgUE9TSVggc3lzdGVtLCB3ZSBzaG91bGQgaGF2ZQorIworIyAkIyA9IDUKKyMgJDEgPSBmaWxlIHNpemUKKyMgJDIgPSBtb250aAorIyAkMyA9IGRheQorIyAkNCA9IHllYXIgb3IgdGltZQorIyAkNSA9IGZpbGVuYW1lCisjCisjIE9uIERhcndpbiA3LjcuMCBhbmQgNy42LjAsIHdlIGhhdmUKKyMKKyMgJCMgPSA0CisjICQxID0gZGF5CisjICQyID0gbW9udGgKKyMgJDMgPSB5ZWFyIG9yIHRpbWUKKyMgJDQgPSBmaWxlbmFtZQorCisjIEdldCB0aGUgbW9udGguCitjYXNlICQyIGluCisgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgIEZlYikgbW9udGg9RmVicnVhcnk7IG51bW1vbnRoPTI7OworICBNYXIpIG1vbnRoPU1hcmNoOyBudW1tb250aD0zOzsKKyAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgIE1heSkgbW9udGg9TWF5OyBudW1tb250aD01OzsKKyAgSnVuKSBtb250aD1KdW5lOyBudW1tb250aD02OzsKKyAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgQXVnKSBtb250aD1BdWd1c3Q7IG51bW1vbnRoPTg7OworICBTZXApIG1vbnRoPVNlcHRlbWJlcjsgbnVtbW9udGg9OTs7CisgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICBOb3YpIG1vbnRoPU5vdmVtYmVyOyBudW1tb250aD0xMTs7CisgIERlYykgbW9udGg9RGVjZW1iZXI7IG51bW1vbnRoPTEyOzsKK2VzYWMKKworY2FzZSAkMyBpbgorICA/Pz8qKSBkYXk9JDE7OworICAqKSBkYXk9JDM7IHNoaWZ0OzsKK2VzYWMKKworIyBIZXJlIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwcm9ibGVtIHRoYXQgdGhlIGxzIG91dHB1dCBnaXZlcyBlaXRoZXIKKyMgdGhlIHRpbWUgb2YgZGF5IG9yIHRoZSB5ZWFyLgorY2FzZSAkMyBpbgorICAqOiopIHNldCBgZGF0ZWA7IGV2YWwgeWVhcj1cJCQjCisgICAgICAgY2FzZSAkMiBpbgorCSBKYW4pIG51bW1vbnRodG9kPTE7OworCSBGZWIpIG51bW1vbnRodG9kPTI7OworCSBNYXIpIG51bW1vbnRodG9kPTM7OworCSBBcHIpIG51bW1vbnRodG9kPTQ7OworCSBNYXkpIG51bW1vbnRodG9kPTU7OworCSBKdW4pIG51bW1vbnRodG9kPTY7OworCSBKdWwpIG51bW1vbnRodG9kPTc7OworCSBBdWcpIG51bW1vbnRodG9kPTg7OworCSBTZXApIG51bW1vbnRodG9kPTk7OworCSBPY3QpIG51bW1vbnRodG9kPTEwOzsKKwkgTm92KSBudW1tb250aHRvZD0xMTs7CisJIERlYykgbnVtbW9udGh0b2Q9MTI7OworICAgICAgIGVzYWMKKyAgICAgICAjIEZvciB0aGUgZmlyc3Qgc2l4IG1vbnRoIG9mIHRoZSB5ZWFyIHRoZSB0aW1lIG5vdGF0aW9uIGNhbiBhbHNvCisgICAgICAgIyBiZSB1c2VkIGZvciBmaWxlcyBtb2RpZmllZCBpbiB0aGUgbGFzdCB5ZWFyLgorICAgICAgIGlmIChleHByICRudW1tb250aCBcPiAkbnVtbW9udGh0b2QpID4gL2Rldi9udWxsOworICAgICAgIHRoZW4KKwkgeWVhcj1gZXhwciAkeWVhciAtIDFgCisgICAgICAgZmk7OworICAqKSB5ZWFyPSQzOzsKK2VzYWMKKworIyBUaGUgcmVzdWx0LgorZWNobyAkZGF5ICRtb250aCAkeWVhcgorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKaW5kZXggNjRiNWY5MC4uODk0ZTc4NiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZwpAQCAtMSw5ICsxLDkgQEAKICMhIC9iaW4vc2gKICMgQ29tbW9uIHN0dWIgZm9yIGEgZmV3IG1pc3NpbmcgR05VIHByb2dyYW1zIHdoaWxlIGluc3RhbGxpbmcuCiAKLXNjcmlwdHZlcnNpb249MjAwNC0wOS0wNy4wOAorc2NyaXB0dmVyc2lvbj0yMDA1LTA2LTA4LjIxCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0CisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OSwgMjAwMCwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQogIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KIApAQCAtMTksOCArMTksOCBAQAogCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQotIyAwMjExMS0xMzA3LCBVU0EuCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgogCiAjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKICMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCkBAIC04NywxMiArODcsMTIgQEAKICAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQogCiBTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgotICAgIGV4aXQgMAorICAgIGV4aXQgJD8KICAgICA7OwogCiAgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKICAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgotICAgIGV4aXQgMAorICAgIGV4aXQgJD8KICAgICA7OwogCiAgIC0qKQpAQCAtMjg4LDExICsyODgsMTggQEAKICAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCiAgICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKICAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgogICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAncy8uKi1vIFwoW14gXSpcKS4qL1wxL3AnYAogICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgotICAgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAotICAgICAgZmlsZT1gc2VkIC1uICcvXkBzZXRmaWxlbmFtZS8geyBzLy4qIFwoW14gXSpcKSAqJC9cMS87IHA7IHE7IH0nICRmaWxlYAorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnL15Ac2V0ZmlsZW5hbWUvIHsgcy8uKiBcKFteIF0qXCkgKiQvXDEvOyBwOyBxOyB9JyAkaW5maWxlYAorICAgICAgIyAuLi4gb3IgaXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgbmFtZSAoZGlyL2YudGV4aSBiZWNvbWVzIGYuaW5mbykKKyAgICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkaW5maWxlIiB8IHNlZCAncywuKi8sLDtzLC5bXi5dKiQsLCdgLmluZm8KICAgICBmaQorICAgICMgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSB1c2VyIHJlYWxseSBuZWVkcyBtYWtlaW5mbzsKKyAgICAjIGxldCdzIGZhaWwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KKyAgICB0ZXN0IC1mICRmaWxlIHx8IGV4aXQgMQogICAgIHRvdWNoICRmaWxlCiAgICAgOzsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMTgzOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2gKQEAgLTAsMCArMSwxODUgQEAKKyMhL2Jpbi9zaAorCisjICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioqKioKKyMgVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisjCisjIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbgorIyAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyMgdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKyMKKyMgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywKKyMgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisjIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisjIExpY2Vuc2UuCisjCisjIFRoZSBPcmlnaW5hbCBDb2RlIGlzIHRoZSBNU1ZDIHdyYXBwaWZpY2F0b3IuCisjCisjIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcworIyBUaW1vdGh5IFdhbGwgPHR3YWxsamF2YUBkZXYuamF2YS5uZXQ+LgorIyBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDA5CisjIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgQ29udHJpYnV0b3Iocyk6CisjICAgRGFuaWVsIFdpdHRlIDxkd2l0dGVAbW96aWxsYS5jb20+CisjCisjIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisjIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorIyB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9yIGxhdGVyICh0aGUgIkxHUEwiKSwKKyMgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyMgb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BMLCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworIyB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorIyBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorIyBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BMIG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorIyB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisjIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisjCisjICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqCisKKyMKKyMgR0NDLWNvbXBhdGlibGUgd3JhcHBlciBmb3IgY2wuZXhlIGFuZCBtbC5leGUuIEFyZ3VtZW50cyBhcmUgZ2l2ZW4gaW4gR0NDCisjIGZvcm1hdCBhbmQgdHJhbnNsYXRlZCBpbnRvIHNvbWV0aGluZyBzZW5zaWJsZSBmb3IgY2wgb3IgbWwuCisjCisKKyMgRGlzYWJsZSBzcGVjaWZpYyB3YXJuaW5ncywgYW5kIGVuYWJsZSB3YXJuaW5ncy1hcy1lcnJvcnMgc28gd2UgY2F0Y2ggYW55CisjIG1pc3RyYW5zbGF0ZWQgYXJncy4KK25vd2Fybj0iLXdkNDEyNyAtd2Q0ODIwIC13ZDQ3MDYgLXdkNDEwMCAtd2Q0MjU1IC13ZDQ2NjggLXdkNDA1MyAtd2Q0MzI0IgorYXJncz0iLW5vbG9nbyAtVzMgLVdYICRub3dhcm4iCittZD0tTUQKK2NsPSJjbCIKK21sPSJtbCIKK291dHB1dD0KKword2hpbGUgWyAkIyAtZ3QgMCBdCitkbworICBjYXNlICQxCisgIGluCisgICAgLWZleGNlcHRpb25zKQorICAgICAgIyBEb24ndCBlbmFibGUgZXhjZXB0aW9ucyBmb3Igbm93LgorICAgICAgI2FyZ3M9IiRhcmdzIC1FSGFjIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLW0zMikKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1tNjQpCisgICAgICBjbD0iY2wiICAgIyAiJE1TVkMveDg2X2FtZDY0L2NsIgorICAgICAgbWw9Im1sNjQiICMgIiRNU1ZDL3g4Nl9hbWQ2NC9tbDY0IgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLU8qKQorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtZykKKyAgICAgICMgQ2FuJ3Qgc3BlY2lmeSAtUlRDMSBvciAtWmkgaW4gb3B0LiAtR3kgaXMgb2suIFVzZSAtT1BUOlJFRj8KKyAgICAgIGFyZ3M9IiRhcmdzIC1EX0RFQlVHIC1SVEMxIC1aaSIKKyAgICAgIG1kPS1NRGQKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1jKQorICAgICAgYXJncz0iJGFyZ3MgLWMiCisgICAgICBhcmdzPSIkKGVjaG8gJGFyZ3MgfCBzZWQgJ3MlL0ZlJS9GbyVnJykiCisgICAgICBzaW5nbGU9Ii1jIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLUQqPSopCisgICAgICBuYW1lPSIkKGVjaG8gJDF8c2VkICdzLy1EXChbXj1dW149XSpcKT0uKi9cMS9nJykiCisgICAgICB2YWx1ZT0iJChlY2hvICQxfHNlZCAncy8tRFtePV1bXj1dKj0vL2cnKSIKKyAgICAgIGFyZ3M9IiRhcmdzIC1EJHtuYW1lfT0nJHZhbHVlJyIKKyAgICAgIGRlZmluZXM9IiRkZWZpbmVzIC1EJHtuYW1lfT0nJHZhbHVlJyIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1EKikKKyAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgZGVmaW5lcz0iJGRlZmluZXMgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtSSkKKyAgICAgIGFyZ3M9IiRhcmdzIC1JJDIiCisgICAgICBpbmNsdWRlcz0iJGluY2x1ZGVzIC1JJDIiCisgICAgICBzaGlmdCAyCisgICAgOzsKKyAgICAtSSopCisgICAgICBhcmdzPSIkYXJncyAkMSIKKyAgICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtV3wtV2V4dHJhKQorICAgICAgIyBUT0RPIG1hcCBleHRyYSB3YXJuaW5ncworICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLVdhbGwpCisgICAgICBhcmdzPSIkYXJncyAtV2FsbCIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1XZXJyb3IpCisgICAgICBhcmdzPSIkYXJncyAtV1giCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtVyopCisgICAgICAjIFRPRE8gbWFwIHNwZWNpZmljIHdhcm5pbmdzCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtUykKKyAgICAgIGFyZ3M9IiRhcmdzIC1GQXMiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtbykKKyAgICAgIG91dGRpcj0iJChkaXJuYW1lICQyKSIKKyAgICAgIGJhc2U9IiQoYmFzZW5hbWUgJDJ8c2VkICdzL1wuW14uXSovL2cnKSIKKyAgICAgIGlmIFsgLW4gIiRzaW5nbGUiIF07IHRoZW4gCisgICAgICAgIG91dHB1dD0iLUZvJDIiCisgICAgICBlbHNlCisgICAgICAgIG91dHB1dD0iLUZlJDIiCisgICAgICBmaQorICAgICAgaWYgWyAtbiAiJGFzc2VtYmx5IiBdOyB0aGVuCisgICAgICAgIGFyZ3M9IiRhcmdzICRvdXRwdXQiCisgICAgICBlbHNlCisgICAgICAgIGFyZ3M9IiRhcmdzICRvdXRwdXQgLUZkJG91dGRpci8kYmFzZSAtRnAkb3V0ZGlyLyRiYXNlIC1GYSRvdXRkaXIvJGJhc2UiCisgICAgICBmaQorICAgICAgc2hpZnQgMgorICAgIDs7CisgICAgKi5TKQorICAgICAgc3JjPSQxCisgICAgICBhc3NlbWJseT0idHJ1ZSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgICouYykKKyAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgKikKKyAgICAgICMgQXNzdW1lIGl0J3MgYW4gTVNWQyBhcmd1bWVudCwgYW5kIHBhc3MgaXQgdGhyb3VnaC4KKyAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgIGVzYWMKK2RvbmUKKworaWYgWyAtbiAiJGFzc2VtYmx5IiBdOyB0aGVuCisgICAgaWYgWyAteiAiJG91dGRpciIgXTsgdGhlbgorICAgICAgb3V0ZGlyPSIuIgorICAgIGZpCisgICAgcHBzcmM9IiRvdXRkaXIvJChiYXNlbmFtZSAkc3JjfHNlZCAncy8uUyQvLmFzbS9nJykiCisgICAgZWNobyAiJGNsIC1ub2xvZ28gLUVQICRpbmNsdWRlcyAkZGVmaW5lcyAkc3JjID4gJHBwc3JjIgorICAgICIkY2wiIC1ub2xvZ28gLUVQICRpbmNsdWRlcyAkZGVmaW5lcyAkc3JjID4gJHBwc3JjIHx8IGV4aXQgJD8KKyAgICBvdXRwdXQ9IiQoZWNobyAkb3V0cHV0IHwgc2VkICdzJS9GW2RwYV1bXiBdKiUlZycpIgorICAgIGFyZ3M9Ii1ub2xvZ28gLXNhZmVzZWggJHNpbmdsZSAkb3V0cHV0ICRwcHNyYyIKKworICAgIGVjaG8gIiRtbCAkYXJncyIKKyAgICBldmFsICJcIiRtbFwiICRhcmdzIgorICAgIHJlc3VsdD0kPworCisgICAgIyByZXF1aXJlZCB0byBmaXggbWw2NCBicm9rZW4gb3V0cHV0PworICAgICNtdiAqLm9iaiAkb3V0ZGlyCitlbHNlCisgICAgYXJncz0iJG1kICRhcmdzIgorICAgIGVjaG8gIiRjbCAkYXJncyIKKyAgICBldmFsICJcIiRjbFwiICRhcmdzIgorICAgIHJlc3VsdD0kPworZmkKKworZXhpdCAkcmVzdWx0CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCmluZGV4IDRjMjg5YzYuLjkwNjQzMTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwpAQCAtNzQsNyArNzQsOCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fQVJNX0FSQ0hfN19fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN0FfXykgXAotICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN1JfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdNX18pCisgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF83Ul9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfN01fXykgXAorCXx8IGRlZmluZWQoX19BUk1fQVJDSF83RU1fXykKICMgdW5kZWYgX19BUk1fQVJDSF9fCiAjIGRlZmluZSBfX0FSTV9BUkNIX18gNwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZmJhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZmkuYwpAQCAtMCwwICsxLDQyMSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDA5ICBCcmFkbGV5IFNtaXRoIDxicmFkQGJyYWQtc21pdGguY28udWs+CisKKyAgIEFWUjMyIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworLyogI2RlZmluZSBERUJVRyAqLworCitleHRlcm4gdm9pZCBmZmlfY2FsbF9TWVNWKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKKyAgICB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KiwgdW5zaWduZWQgaW50LAorICAgIHZvaWQgKCpmbikodm9pZCkpOworZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKik7CisKK3Vuc2lnbmVkIGludCBwYXNzX3N0cnVjdF9vbl9zdGFjayhmZmlfdHlwZSAqdHlwZSkKK3sKKyAgICBpZih0eXBlLT50eXBlICE9IEZGSV9UWVBFX1NUUlVDVCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZih0eXBlLT5hbGlnbm1lbnQgPCB0eXBlLT5zaXplICYmCisgICAgICAgICEodHlwZS0+c2l6ZSA9PSA0IHx8IHR5cGUtPnNpemUgPT0gOCkgJiYKKyAgICAgICAgISh0eXBlLT5zaXplID09IDggJiYgdHlwZS0+YWxpZ25tZW50ID49IDQpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmKHR5cGUtPnNpemUgPT0gMyB8fCB0eXBlLT5zaXplID09IDUgfHwgdHlwZS0+c2l6ZSA9PSA2IHx8CisgICAgICAgIHR5cGUtPnNpemUgPT0gNykKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQorICogaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMKKyAqCisgKiBUaGlzIGlzIGFubm95aW5nbHkgY29tcGxleCBzaW5jZSB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdXNlZAorICogcmVnaXN0ZXJzLgorICovCisKK3ZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQoreworICAgIHVuc2lnbmVkIGludCBpOworICAgIHZvaWQgKipwX2FyZ3Y7CisgICAgZmZpX3R5cGUgKipwX2FyZzsKKyAgICBjaGFyICpyZWdfYmFzZSA9IHN0YWNrOworICAgIGNoYXIgKnN0YWNrX2Jhc2UgPSBzdGFjayArIDIwOworICAgIHVuc2lnbmVkIGludCBzdGFja19vZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGludCByZWdfbWFzayA9IDA7CisKKyAgICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisKKyAgICAvKiBJZiBjaWYtPmZsYWdzIGlzIHN0cnVjdCB0aGVuIHdlIGtub3cgaXQncyBub3QgcGFzc2VkIGluIHJlZ2lzdGVycyAqLworICAgIGlmKGVjaWYtPmNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHsKKyAgICAgICAgKih2b2lkKiopcmVnX2Jhc2UgPSBlY2lmLT5ydmFsdWU7CisgICAgICAgIHJlZ19tYXNrIHw9IDE7CisgICAgfQorCisgICAgZm9yKGkgPSAwLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOyBpIDwgZWNpZi0+Y2lmLT5uYXJnczsKKyAgICAgICAgaSsrLCBwX2FyZysrKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgICAgaW50IGFsaWdubWVudCA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7CisgICAgICAgIGludCB0eXBlID0gKCpwX2FyZyktPnR5cGU7CisgICAgICAgIGNoYXIgKmFkZHIgPSAwOworCisgICAgICAgIGlmKHogJSA0ICE9IDApCisgICAgICAgICAgICB6ICs9ICg0IC0geiAlIDQpOworCisgICAgICAgIGlmKHJlZ19tYXNrICE9IDB4MWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBhc3Nfc3RydWN0X29uX3N0YWNrKCpwX2FyZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWRkciA9IHN0YWNrX2Jhc2UgKyBzdGFja19vZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RhY2tfb2Zmc2V0ICs9IHo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHogPT0gc2l6ZW9mKGludCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBpbmRleCA9IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSgocmVnX21hc2sgPj4gaW5kZXgpICYgMSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgIGFkZHIgPSByZWdfYmFzZSArIChpbmRleCAqIDQpOworICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgxIDw8IGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoeiA9PSAyICogc2l6ZW9mKGludCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoISgocmVnX21hc2sgPj4gMSkgJiAxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHIgPSByZWdfYmFzZSArIDQ7CisgICAgICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgzIDw8IDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCEoKHJlZ19tYXNrID4+IDMpICYgMSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhZGRyID0gcmVnX2Jhc2UgKyAxMjsKKyAgICAgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDMgPDwgMyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoIWFkZHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZHIgPSBzdGFja19iYXNlICsgc3RhY2tfb2Zmc2V0OworICAgICAgICAgICAgc3RhY2tfb2Zmc2V0ICs9IHo7CisgICAgICAgIH0KKworICAgICAgICBpZih0eXBlID09IEZGSV9UWVBFX1NUUlVDVCAmJiAoKnBfYXJnKS0+ZWxlbWVudHNbMV0gPT0gTlVMTCkKKyAgICAgICAgICAgIHR5cGUgPSAoKnBfYXJnKS0+ZWxlbWVudHNbMF0tPnR5cGU7CisKKyAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICAgICAgICAgICoodW5zaWduZWQgaW50ICopYWRkciA9ICh1bnNpZ25lZCBpbnQpKihVSU5UOCAqKSgqcF9hcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgICAgICAgICAgKihzaWduZWQgaW50ICopYWRkciA9IChzaWduZWQgaW50KSooU0lOVDggKikoKnBfYXJndik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAqKHVuc2lnbmVkIGludCAqKWFkZHIgPSAodW5zaWduZWQgaW50KSooVUlOVDE2ICopKCpwX2FyZ3YpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgICAgICAgICAgKihzaWduZWQgaW50ICopYWRkciA9IChzaWduZWQgaW50KSooU0lOVDE2ICopKCpwX2FyZ3YpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtZW1jcHkoYWRkciwgKnBfYXJndiwgeik7CisgICAgICAgIH0KKworICAgICAgICBwX2FyZ3YrKzsKKyAgICB9CisKKyNpZmRlZiBERUJVRworICAgIC8qIERlYnVnZ2luZyAqLworICAgIGZvcihpID0gMDsgaSA8IDU7IGkrKykKKyAgICB7CisgICAgICAgIGlmKChyZWdfbWFzayAmICgxIDw8IGkpKSA9PSAwKQorICAgICAgICAgICAgcHJpbnRmKCJyJWQ6ICh1bnVzZWQpXG4iLCAxMiAtIGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoInIlZDogMHglMDh4XG4iLCAxMiAtIGksICgodW5zaWduZWQgaW50KilyZWdfYmFzZSlbaV0pOworICAgIH0KKworICAgIGZvcihpID0gMDsgaSA8IHN0YWNrX29mZnNldCAvIDQ7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50Zigic3ArJWQ6IDB4JTA4eFxuIiwgaSo0LCAoKHVuc2lnbmVkIGludCopc3RhY2tfYmFzZSlbaV0pOworICAgIH0KKyNlbmRpZgorfQorCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCitmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKGZmaV9jaWYgKmNpZikKK3sKKyAgICAvKiBSb3VuZCB0aGUgc3RhY2sgdXAgdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLiAgVGhpcyBpc24ndCBuZWVkZWQKKyAgICAgKiBldmVyeXdoZXJlLCBidXQgaXQgaXMgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCBpdCBkb2Vzbid0IGhhcm0KKyAgICAgKiBhbnl0aGluZyB3aGVuIGl0IGlzbid0IG5lZWRlZC4gKi8KKyAgICBjaWYtPmJ5dGVzID0gKGNpZi0+Ynl0ZXMgKyA3KSAmIH43OworCisgICAgLyogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IGhlIHJldHVybiB2YWx1ZSBpcyBpbiBmYWN0IGEgc3RydWN0ICovCisgICAgY2lmLT5yc3RydWN0X2ZsYWcgPSAwOworCisgICAgLyogU2V0IHRoZSByZXR1cm4gdHlwZSBmbGFnICovCisgICAgc3dpdGNoKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UODsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDE2OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKyAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UMzI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQ2NDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICAgIGNpZi0+cnN0cnVjdF9mbGFnID0gMTsKKyAgICAgICAgaWYoIXBhc3Nfc3RydWN0X29uX3N0YWNrKGNpZi0+cnR5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZihjaWYtPnJ0eXBlLT5zaXplIDw9IDEpCisgICAgICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UODsKKyAgICAgICAgICAgIGVsc2UgaWYoY2lmLT5ydHlwZS0+c2l6ZSA8PSAyKQorICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDE2OworICAgICAgICAgICAgZWxzZSBpZihjaWYtPnJ0eXBlLT5zaXplIDw9IDQpCisgICAgICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UMzI7CisgICAgICAgICAgICBlbHNlIGlmKGNpZi0+cnR5cGUtPnNpemUgPD0gOCkKKyAgICAgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQ2NDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKWNpZi0+cnR5cGUtPnR5cGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCljaWYtPnJ0eXBlLT50eXBlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKWNpZi0+cnR5cGUtPnR5cGU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBGRklfT0s7Cit9CisKK3ZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit7CisgICAgZXh0ZW5kZWRfY2lmIGVjaWY7CisKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDAsIGkgPSAwOworICAgIGZmaV90eXBlICoqcF9hcmc7CisKKyAgICBlY2lmLmNpZiA9IGNpZjsKKyAgICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKworICAgIGZvcihpID0gMCwgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgcF9hcmcrKykKKyAgICAgICAgc2l6ZSArPSAoKnBfYXJnKS0+c2l6ZSArICg0IC0gKCpwX2FyZyktPnNpemUgJSA0KTsKKworICAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gdmFsdWUKKyAgICAgKiBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZSAqLworCisgICAgLyogSWYgY2lmLT5mbGFncyBpcyBzdHJ1Y3QgdGhlbiBpdCdzIG5vdCBzdWl0YWJsZSBmb3IgcmVnaXN0ZXJzICovCisgICAgaWYoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpKQorICAgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICBlbHNlCisgICAgICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworCisgICAgc3dpdGNoKGNpZi0+YWJpKQorICAgIHsKKyAgICBjYXNlIEZGSV9TWVNWOgorICAgICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBzaXplLCBjaWYtPmZsYWdzLAorICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGNpZi0+cnN0cnVjdF9mbGFnLCBmbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEZGSV9BU1NFUlQoMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGNoYXIgKnN0YWNrLCB2b2lkICoqcnZhbHVlLAorICAgIHZvaWQgKiphdmFsdWUsIGZmaV9jaWYgKmNpZikKK3sKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgcmVnX21hc2sgPSAwOworICAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CisgICAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKKyAgICByZWdpc3RlciBjaGFyICpyZWdfYmFzZSA9IHN0YWNrOworICAgIHJlZ2lzdGVyIGNoYXIgKnN0YWNrX2Jhc2UgPSBzdGFjayArIDIwOworICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBzdGFja19vZmZzZXQgPSAwOworCisjaWZkZWYgREVCVUcKKyAgICAvKiBEZWJ1Z2dpbmcgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBjaWYtPm5hcmdzICsgNzsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzcCslZDogMHglMDh4XG4iLCBpKjQsICgodW5zaWduZWQgaW50KilzdGFjaylbaV0pOworICAgIH0KKyNlbmRpZgorCisgICAgLyogSWYgY2lmLT5mbGFncyBpcyBzdHJ1Y3QgdGhlbiB3ZSBrbm93IGl0J3Mgbm90IHBhc3NlZCBpbiByZWdpc3RlcnMgKi8KKyAgICBpZihjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICB7CisgICAgICAgICpydmFsdWUgPSAqKHZvaWQgKiopcmVnX2Jhc2U7CisgICAgICAgIHJlZ19tYXNrIHw9IDE7CisgICAgfQorCisgICAgcF9hcmd2ID0gYXZhbHVlOworCisgICAgZm9yKGkgPSAwLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyBpIDwgY2lmLT5uYXJnczsgaSsrLCBwX2FyZysrKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgICAgaW50IGFsaWdubWVudCA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7CisKKyAgICAgICAgKnBfYXJndiA9IDA7CisKKyAgICAgICAgaWYoeiAlIDQgIT0gMCkKKyAgICAgICAgICAgIHogKz0gKDQgLSB6ICUgNCk7CisKKyAgICAgICAgaWYocmVnX21hc2sgIT0gMHgxZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYocGFzc19zdHJ1Y3Rfb25fc3RhY2soKnBfYXJnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKXN0YWNrX2Jhc2UgKyBzdGFja19vZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RhY2tfb2Zmc2V0ICs9IHo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHogPD0gc2l6ZW9mKGludCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2hhciBpbmRleCA9IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSgocmVnX21hc2sgPj4gaW5kZXgpICYgMSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopcmVnX2Jhc2UgKyAoaW5kZXggKiA0KTsKKyAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMSA8PCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHogPT0gMiAqIHNpemVvZihpbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCEoKHJlZ19tYXNrID4+IDEpICYgMSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKXJlZ19iYXNlICsgNDsKKyAgICAgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDMgPDwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoISgocmVnX21hc2sgPj4gMykgJiAxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopcmVnX2Jhc2UgKyAxMjsKKyAgICAgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDMgPDwgMyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoISpwX2FyZ3YpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopc3RhY2tfYmFzZSArIHN0YWNrX29mZnNldDsKKyAgICAgICAgICAgIHN0YWNrX29mZnNldCArPSB6OworICAgICAgICB9CisKKyAgICAgICAgaWYoKCpwX2FyZyktPnR5cGUgIT0gRkZJX1RZUEVfU1RSVUNUIHx8CisgICAgICAgICAgICAoKnBfYXJnKS0+ZWxlbWVudHNbMV0gPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoYWxpZ25tZW50ID09IDEpCisgICAgICAgICAgICAgICAgKioodW5zaWduZWQgaW50KiopcF9hcmd2IDw8PSAyNDsKKyAgICAgICAgICAgIGVsc2UgaWYoYWxpZ25tZW50ID09IDIpCisgICAgICAgICAgICAgICAgKioodW5zaWduZWQgaW50KiopcF9hcmd2IDw8PSAxNjsKKyAgICAgICAgfQorCisgICAgICAgIHBfYXJndisrOworICAgIH0KKworI2lmZGVmIERFQlVHCisgICAgLyogRGVidWdnaW5nICovCisgICAgZm9yKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJzcCslZDogMHglMDh4XG4iLCBpKjQsICooKCh1bnNpZ25lZCBpbnQqKilhdmFsdWUpW2ldKSk7CisgICAgfQorI2VuZGlmCit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMganVtcGVkIHRvIGJ5IHRoZSB0cmFtcG9saW5lICovCisKK3Vuc2lnbmVkIGludCBmZmlfY2xvc3VyZV9TWVNWX2lubmVyKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICoqcmVzcHAsCisgICAgdm9pZCAqYXJncykKK3sKKyAgICBmZmlfY2lmICpjaWY7CisgICAgdm9pZCAqKmFyZ19hcmVhOworICAgIHVuc2lnbmVkIGludCBpLCBzaXplID0gMDsKKyAgICBmZmlfdHlwZSAqKnBfYXJnOworCisgICAgY2lmID0gY2xvc3VyZS0+Y2lmOworCisgICAgZm9yKGkgPSAwLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyBpIDwgY2lmLT5uYXJnczsgaSsrLCBwX2FyZysrKQorICAgICAgICBzaXplICs9ICgqcF9hcmcpLT5zaXplICsgKDQgLSAoKnBfYXJnKS0+c2l6ZSAlIDQpOworCisgICAgYXJnX2FyZWEgPSAodm9pZCAqKilhbGxvY2Eoc2l6ZSk7CisKKyAgICAvKiB0aGlzIGNhbGwgd2lsbCBpbml0aWFsaXplIEFSR19BUkVBLCBzdWNoIHRoYXQgZWFjaCBlbGVtZW50IGluIHRoYXQKKyAgICAgKiBhcnJheSBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb24gdGhlIHN0YWNrOyBhbmQgaWYgdGhlCisgICAgICogZnVuY3Rpb24gcmV0dXJucyBhIHN0cnVjdHVyZSwgaXQgd2lsbCByZS1zZXQgUkVTUCB0byBwb2ludCB0byB0aGUKKyAgICAgKiBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICovCisKKyAgICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoYXJncywgcmVzcHAsIGFyZ19hcmVhLCBjaWYpOworCisgICAgKGNsb3N1cmUtPmZ1bikoY2lmLCAqcmVzcHAsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgICAgcmV0dXJuIGNpZi0+ZmxhZ3M7Cit9CisKK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2xvc3VyZV9sb2MoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsIGZmaV9jaWYqIGNpZiwKKyAgICB2b2lkICgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLCB2b2lkICp1c2VyX2RhdGEsCisgICAgdm9pZCAqY29kZWxvYykKK3sKKyAgICBGRklfQVNTRVJUKGNpZi0+YWJpID09IEZGSV9TWVNWKTsKKworICAgIHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKCZjbG9zdXJlLT50cmFtcFswXSk7CisgICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKCZmZmlfY2xvc3VyZV9TWVNWKTsKKyAgICB1bnNpZ25lZCBpbnQgIF9fY3R4ID0gKHVuc2lnbmVkIGludCkoY29kZWxvYyk7CisgICAgdW5zaWduZWQgaW50ICBfX3JzdHJ1Y3RfZmxhZyA9ICh1bnNpZ25lZCBpbnQpKGNpZi0+cnN0cnVjdF9mbGFnKTsKKyAgICB1bnNpZ25lZCBpbnQgIF9faW5uZXIgPSAodW5zaWduZWQgaW50KSgmZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik7CisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFswXSA9IDB4ZWJjZDFmMDA7ICAgIC8qIHB1c2htICByOC1yMTIgKi8KKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzRdID0gMHhmZWZjMDAxMDsgICAgLyogbGQudyAgIHIxMiwgcGNbMTZdICovCisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFs4XSA9IDB4ZmVmYjAwMTA7ICAgIC8qIGxkLncgICByMTEsIHBjWzE2XSAqLworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMTJdID0gMHhmZWZhMDAxMDsgICAvKiBsZC53ICAgcjEwLCBwY1sxNl0gKi8KKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzE2XSA9IDB4ZmVmZjAwMTA7ICAgLyogbGQudyAgIHBjLCBwY1sxNl0gKi8KKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzIwXSA9IF9fY3R4OworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMjRdID0gX19yc3RydWN0X2ZsYWc7CisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsyOF0gPSBfX2lubmVyOworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMzJdID0gX19mdW47CisgICAgc3lzY2FsbChfX05SX2NhY2hlZmx1c2gsIDAsICgmX190cmFtcFswXSksIDM2KTsKKworICAgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgY2xvc3VyZS0+ZnVuICA9IGZ1bjsKKworICAgIHJldHVybiBGRklfT0s7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3OTliMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi1DLSotCisgICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMjAwOSAgQnJhZGxleSBTbWl0aCA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciBBVlIzMi4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkgeworICBGRklfRklSU1RfQUJJID0gMCwKKyAgRkZJX1NZU1YsCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAorICBGRklfTEFTVF9BQkkgPSBGRklfREVGQVVMVF9BQkkgKyAxCit9IGZmaV9hYmk7CisjZW5kaWYKKworI2RlZmluZSBGRklfRVhUUkFfQ0lGX0ZJRUxEUyB1bnNpZ25lZCBpbnQgcnN0cnVjdF9mbGFnCisKKy8qIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMzYKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9zeXN2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4NGIzYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL3N5c3YuUwpAQCAtMCwwICsxLDIwOCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwOSAgQnJhZGxleSBTbWl0aCA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorCisgICBBVlIzMiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTElCRkZJX0FTTQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorCisgICAgLyogcjEyOiAgZmZpX3ByZXBfYXJncworICAgICAqIHIxMTogICZlY2lmCisgICAgICogcjEwOiAgc2l6ZQorICAgICAqIHI5OiAgIGNpZi0+ZmxhZ3MKKyAgICAgKiByODogICBlY2lmLnJ2YWx1ZQorICAgICAqIHNwKzA6IGNpZi0+cnN0cnVjdF9mbGFnCisgICAgICogc3ArNDogZm4gKi8KKworICAgIC50ZXh0CisgICAgLmFsaWduICAxCisgICAgLmdsb2JsICBmZmlfY2FsbF9TWVNWCisgICAgLnR5cGUgICBmZmlfY2FsbF9TWVNWLCBAZnVuY3Rpb24KK2ZmaV9jYWxsX1NZU1Y6CisgICAgc3RtICAgICAtLXNwLCByMCxyMSxscgorICAgIHN0bSAgICAgLS1zcCwgcjgtcjEyCisgICAgbW92ICAgICByMCwgc3AKKworICAgIC8qIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4gKi8KKyAgICBzdWIgICAgIHNwLCByMTAKKyAgICAvKiBQYWQgdG8gbWFrZSB3YXkgZm9yIHBvdGVudGlhbCBza2lwcGVkIHJlZ2lzdGVycyAqLworICAgIHN1YiAgICAgc3AsIDIwCisKKyAgICAvKiBDYWxsIGZmaV9wcmVwX2FyZ3Moc3RhY2ssICZlY2lmKS4gKi8KKyAgICAvKiByMTEgYWxyZWFkeSBzZXQgKi8KKyAgICBtb3YgICAgIHIxLCByMTIKKyAgICBtb3YgICAgIHIxMiwgc3AKKyAgICBpY2FsbCAgIHIxCisKKyAgICAvKiBTYXZlIG5ldyBhcmd1bWVudCBzaXplICovCisgICAgbW92ICAgICByMSwgcjEyCisKKyAgICAvKiBNb3ZlIGZpcnN0IDUgcGFyYW1ldGVycyBpbiByZWdpc3RlcnMuICovCisgICAgbGRtICAgICBzcCsrLCByOC1yMTIKKworICAgIC8qIGNhbGwgKGZuKSAoLi4uKS4gKi8KKyAgICBsZC53ICAgIHIxLCByMFszNl0KKyAgICBpY2FsbCAgIHIxCisKKyAgICAvKiBSZW1vdmUgdGhlIHNwYWNlIHdlIHB1c2hlZCBmb3IgdGhlIGFyZ3MuICovCisgICAgbW92ICAgICBzcCwgcjAKKworICAgIC8qIExvYWQgcjEgd2l0aCB0aGUgcnN0cnVjdCBmbGFnLiAqLworICAgIGxkLncgICAgcjEsIHNwWzMyXQorCisgICAgLyogTG9hZCByOSB3aXRoIHRoZSByZXR1cm4gdHlwZSBjb2RlLiAqLworICAgIGxkLncgICAgcjksIHNwWzEyXQorCisgICAgLyogTG9hZCByOCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlci4gKi8KKyAgICBsZC53ICAgIHI4LCBzcFsxNl0KKworICAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLiAqLworICAgIGNwLncgICAgcjgsIDAKKyAgICBicmVxICAgIC5MZW5kCisKKyAgICAvKiBDaGVjayBpZiByZXR1cm4gdHlwZSBpcyBhY3R1YWxseSBhIHN0cnVjdCAqLworICAgIGNwLncgICAgcjEsIDAKKyAgICBicmVxICAgIDFmCisKKyAgICAvKiBSZXR1cm4gOGJpdCAqLworICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQ4CisgICAgYnJlcSAgICAuTHN0b3JlOAorCisgICAgLyogUmV0dXJuIDE2Yml0ICovCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDE2CisgICAgYnJlcSAgICAuTHN0b3JlMTYKKworMToKKyAgICAvKiBSZXR1cm4gMzJiaXQgKi8KKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UMzIKKyAgICBicmVxICAgIC5Mc3RvcmUzMgorICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQxNgorICAgIGJyZXEgICAgLkxzdG9yZTMyCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDgKKyAgICBicmVxICAgIC5Mc3RvcmUzMgorCisgICAgLyogUmV0dXJuIDY0Yml0ICovCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDY0CisgICAgYnJlcSAgICAuTHN0b3JlNjQKKworICAgIC8qIERpZG4ndCBtYXRjaCBhbnl0aGluZyAqLworICAgIGJyYWwgICAgLkxlbmQKKworLkxzdG9yZTY0OgorICAgIHN0LncgICAgcjhbMF0sIHIxMQorICAgIHN0LncgICAgcjhbNF0sIHIxMAorICAgIGJyYWwgICAgLkxlbmQKKworLkxzdG9yZTMyOgorICAgIHN0LncgICAgcjhbMF0sIHIxMgorICAgIGJyYWwgICAgLkxlbmQKKworLkxzdG9yZTE2OgorICAgIHN0LmggICAgcjhbMF0sIHIxMgorICAgIGJyYWwgICAgLkxlbmQKKworLkxzdG9yZTg6CisgICAgc3QuYiAgICByOFswXSwgcjEyCisgICAgYnJhbCAgICAuTGVuZAorCisuTGVuZDoKKyAgICBzdWIgICAgIHNwLCAtMjAKKyAgICBsZG0gICAgIHNwKyssIHIwLHIxLHBjCisKKyAgICAuc2l6ZSAgIGZmaV9jYWxsX1NZU1YsIC4gLSBmZmlfY2FsbF9TWVNWCisKKworICAgIC8qIHIxMjogIF9fY3R4CisgICAgICogcjExOiAgX19yc3RydWN0X2ZsYWcKKyAgICAgKiByMTA6ICBfX2lubmVyICovCisKKyAgICAuYWxpZ24gIDEKKyAgICAuZ2xvYmwgIGZmaV9jbG9zdXJlX1NZU1YKKyAgICAudHlwZSAgIGZmaV9jbG9zdXJlX1NZU1YsIEBmdW5jdGlvbgorZmZpX2Nsb3N1cmVfU1lTVjoKKyAgICBzdG0gICAgIC0tc3AsIHIwLGxyCisgICAgbW92ICAgICByMCwgcjExCisgICAgbW92ICAgICByOCwgcjEwCisgICAgc3ViICAgICByMTAsIHNwLCAtOAorICAgIHN1YiAgICAgc3AsIDEyCisgICAgc3QudyAgICBzcFs4XSwgc3AKKyAgICBzdWIgICAgIHIxMSwgc3AsIC04CisgICAgaWNhbGwgICByOAorCisgICAgLyogQ2hlY2sgaWYgcmV0dXJuIHR5cGUgaXMgYWN0dWFsbHkgYSBzdHJ1Y3QgKi8KKyAgICBjcC53ICAgIHIwLCAwCisgICAgYnJlcSAgICAxZgorCisgICAgLyogUmV0dXJuIDhiaXQgKi8KKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDgKKyAgICBicmVxICAgIC5MZ2V0OAorCisgICAgLyogUmV0dXJuIDE2Yml0ICovCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQxNgorICAgIGJyZXEgICAgLkxnZXQxNgorCisxOgorICAgIC8qIFJldHVybiAzMmJpdCAqLworICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UMzIKKyAgICBicmVxICAgIC5MZ2V0MzIKKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDE2CisgICAgYnJlcSAgICAuTGdldDMyCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQ4CisgICAgYnJlcSAgICAuTGdldDMyCisKKyAgICAvKiBSZXR1cm4gNjRiaXQgKi8KKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDY0CisgICAgYnJlcSAgICAuTGdldDY0CisKKyAgICAvKiBEaWRuJ3QgbWF0Y2ggYW55dGhpbmcgKi8KKyAgICBicmFsICAgIC5MY2xlbmQKKworLkxnZXQ2NDoKKyAgICBsZC53ICAgIHIxMSwgc3BbMF0KKyAgICBsZC53ICAgIHIxMCwgc3BbNF0KKyAgICBicmFsICAgIC5MY2xlbmQKKworLkxnZXQzMjoKKyAgICBsZC53ICAgIHIxMiwgc3BbMF0KKyAgICBicmFsICAgIC5MY2xlbmQKKworLkxnZXQxNjoKKyAgICBsZC51aCAgIHIxMiwgc3BbMF0KKyAgICBicmFsICAgIC5MY2xlbmQKKworLkxnZXQ4OgorICAgIGxkLnViICAgcjEyLCBzcFswXQorICAgIGJyYWwgICAgLkxjbGVuZAorCisuTGNsZW5kOgorICAgIHN1YiAgICAgc3AsIC0xMgorICAgIGxkbSAgICAgc3ArKywgcjAsbHIKKyAgICBzdWIgICAgIHNwLCAtMjAKKyAgICBtb3YgICAgIHBjLCBscgorCisgICAgLnNpemUgICBmZmlfY2xvc3VyZV9TWVNWLCAuIC0gZmZpX2Nsb3N1cmVfU1lTVgorCisjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisgICAgLnNlY3Rpb24gICAgLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjE1NmUwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYwpAQCAtMCwwICsxLDYxMCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGNsb3N1cmVzLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDcgIFJlZCBIYXQsIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworCisgICBDb2RlIHRvIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIG1lbW9yeSBmb3IgY2xvc3VyZXMuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiAhZGVmaW5lZCBfR05VX1NPVVJDRQorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjZW5kaWYKKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2lmbmRlZiBGRklfTU1BUF9FWEVDX1dSSVQKKyMgaWYgX19nbnVfbGludXhfXworLyogVGhpcyBtYWNybyBpbmRpY2F0ZXMgaXQgbWF5IGJlIGZvcmJpZGRlbiB0byBtYXAgYW5vbnltb3VzIG1lbW9yeQorICAgd2l0aCBib3RoIHdyaXRlIGFuZCBleGVjdXRlIHBlcm1pc3Npb24uICBDb2RlIGNvbXBpbGVkIHdoZW4gdGhpcworICAgb3B0aW9uIGlzIGRlZmluZWQgd2lsbCBhdHRlbXB0IHRvIG1hcCBzdWNoIHBhZ2VzIG9uY2UsIGJ1dCBpZiBpdAorICAgZmFpbHMsIGl0IGZhbGxzIGJhY2sgdG8gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgZmlsZSBpbiBhIHdyaXRhYmxlIGFuZAorICAgZXhlY3V0YWJsZSBmaWxlc3lzdGVtIGFuZCBtYXBwaW5nIHBhZ2VzIGZyb20gaXQgaW50byBzZXBhcmF0ZQorICAgbG9jYXRpb25zIGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzcGFjZSwgb25lIGxvY2F0aW9uIHdyaXRhYmxlIGFuZAorICAgYW5vdGhlciBleGVjdXRhYmxlLiAgKi8KKyMgIGRlZmluZSBGRklfTU1BUF9FWEVDX1dSSVQgMQorIyAgZGVmaW5lIEhBVkVfTU5URU5UIDEKKyMgZW5kaWYKKyMgaWYgZGVmaW5lZChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X1dJTjY0KQorLyogV2luZG93cyBzeXN0ZW1zIG1heSBoYXZlIERhdGEgRXhlY3V0aW9uIFByb3RlY3Rpb24gKERFUCkgZW5hYmxlZCwgCisgICB3aGljaCByZXF1aXJlcyB0aGUgdXNlIG9mIFZpcnR1YWxNYWxsb2MvVmlydHVhbEZyZWUgdG8gYWxsb2MvZnJlZQorICAgZXhlY3V0YWJsZSBtZW1vcnkuICovCisjICBkZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIDEKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgRkZJX01NQVBfRVhFQ19XUklUICYmICFkZWZpbmVkIEZGSV9NTUFQX0VYRUNfU0VMSU5VWAorIyBpZmRlZiBfX2xpbnV4X18KKy8qIFdoZW4gZGVmaW5lZCB0byAxIGNoZWNrIGZvciBTRUxpbnV4IGFuZCBpZiBTRUxpbnV4IGlzIGFjdGl2ZSwKKyAgIGRvbid0IGF0dGVtcHQgUFJPVF9FWEVDfFBST1RfV1JJVEUgbWFwcGluZyBhdCBhbGwsIGFzIHRoYXQKKyAgIG1pZ2h0IGNhdXNlIGF1ZGl0IG1lc3NhZ2VzLiAgKi8KKyMgIGRlZmluZSBGRklfTU1BUF9FWEVDX1NFTElOVVggMQorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBGRklfQ0xPU1VSRVMKKworIyBpZiBGRklfTU1BUF9FWEVDX1dSSVQKKworI2RlZmluZSBVU0VfTE9DS1MgMQorI2RlZmluZSBVU0VfRExfUFJFRklYIDEKKyNpZmRlZiBfX0dOVUNfXworI2lmbmRlZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDEKKyNlbmRpZgorI2VuZGlmCisKKy8qIFdlIG5lZWQgdG8gdXNlIG1tYXAsIG5vdCBzYnJrLiAgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisKKy8qIFdlIGNvdWxkLCBpbiB0aGVvcnksIHN1cHBvcnQgbXJlbWFwLCBidXQgaXQgd291bGRuJ3QgYnV5IHVzIGFueXRoaW5nLiAgKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorCisvKiBXZSBoYXZlIG5vIHVzZSBmb3IgdGhpcywgc28gc2F2ZSBzb21lIGNvZGUgYW5kIGRhdGEuICAqLworI2RlZmluZSBOT19NQUxMSU5GTyAxCisKKy8qIFdlIG5lZWQgYWxsIGFsbG9jYXRpb25zIHRvIGJlIGluIHJlZ3VsYXIgc2VnbWVudHMsIG90aGVyd2lzZSB3ZQorICAgbG9zZSB0cmFjayBvZiB0aGUgY29ycmVzcG9uZGluZyBjb2RlIGFkZHJlc3MuICAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKworLyogRG9uJ3QgYWxsb2NhdGUgbW9yZSB0aGFuIGEgcGFnZSB1bmxlc3MgbmVlZGVkLiAgKi8KKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoKHNpemVfdCltYWxsb2NfZ2V0cGFnZXNpemUpCisKKyNpZiBGRklfQ0xPU1VSRV9URVNUCisvKiBEb24ndCByZWxlYXNlIHNpbmdsZSBwYWdlcywgdG8gYXZvaWQgYSB3b3JzdC1jYXNlIHNjZW5hcmlvIG9mCisgICBjb250aW51b3VzbHkgYWxsb2NhdGluZyBhbmQgcmVsZWFzaW5nIHNpbmdsZSBwYWdlcywgYnV0IHJlbGVhc2UKKyAgIHBhaXJzIG9mIHBhZ2VzLCB3aGljaCBzaG91bGQgZG8ganVzdCBhcyB3ZWxsIGdpdmVuIHRoYXQgYWxsb2NhdGlvbnMKKyAgIGFyZSBsaWtlbHkgdG8gYmUgc21hbGwuICAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KW1hbGxvY19nZXRwYWdlc2l6ZSkKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmICFkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoWDg2X1dJTjY0KQorI2lmZGVmIEhBVkVfTU5URU5UCisjaW5jbHVkZSA8bW50ZW50Lmg+CisjZW5kaWYgLyogSEFWRV9NTlRFTlQgKi8KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKy8qIFdlIGRvbid0IHdhbnQgc3lzL21tYW4uaCB0byBiZSBpbmNsdWRlZCBhZnRlciB3ZSByZWRlZmluZSBtbWFwIGFuZAorICAgZGxtdW5tYXAuICAqLworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjZGVmaW5lIExBQ0tTX1NZU19NTUFOX0ggMQorCisjaWYgRkZJX01NQVBfRVhFQ19TRUxJTlVYCisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgaW50IHNlbGludXhfZW5hYmxlZCA9IC0xOworCitzdGF0aWMgaW50CitzZWxpbnV4X2VuYWJsZWRfY2hlY2sgKHZvaWQpCit7CisgIHN0cnVjdCBzdGF0ZnMgc2ZzOworICBGSUxFICpmOworICBjaGFyICpidWYgPSBOVUxMOworICBzaXplX3QgbGVuID0gMDsKKworICBpZiAoc3RhdGZzICgiL3NlbGludXgiLCAmc2ZzKSA+PSAwCisgICAgICAmJiAodW5zaWduZWQgaW50KSBzZnMuZl90eXBlID09IDB4Zjk3Y2ZmOGNVKQorICAgIHJldHVybiAxOworICBmID0gZm9wZW4gKCIvcHJvYy9tb3VudHMiLCAiciIpOworICBpZiAoZiA9PSBOVUxMKQorICAgIHJldHVybiAwOworICB3aGlsZSAoZ2V0bGluZSAoJmJ1ZiwgJmxlbiwgZikgPj0gMCkKKyAgICB7CisgICAgICBjaGFyICpwID0gc3RyY2hyIChidWYsICcgJyk7CisgICAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICBicmVhazsKKyAgICAgIHAgPSBzdHJjaHIgKHAgKyAxLCAnICcpOworICAgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgICBpZiAoc3RybmNtcCAocCArIDEsICJzZWxpbnV4ZnMgIiwgMTApICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBmcmVlIChidWYpOworICAgICAgICAgIGZjbG9zZSAoZik7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgIGZyZWUgKGJ1Zik7CisgIGZjbG9zZSAoZik7CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIGlzX3NlbGludXhfZW5hYmxlZCgpIChzZWxpbnV4X2VuYWJsZWQgPj0gMCA/IHNlbGludXhfZW5hYmxlZCBcCisJCQkgICAgICA6IChzZWxpbnV4X2VuYWJsZWQgPSBzZWxpbnV4X2VuYWJsZWRfY2hlY2sgKCkpKQorCisjZWxzZQorCisjZGVmaW5lIGlzX3NlbGludXhfZW5hYmxlZCgpIDAKKworI2VuZGlmIC8qICFGRklfTU1BUF9FWEVDX1NFTElOVVggKi8KKworI2VsaWYgZGVmaW5lZCAoX19DWUdXSU5fXykKKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKy8qIEN5Z3dpbiBpcyBMaW51eC1saWtlLCBidXQgbm90IHF1aXRlIHRoYXQgTGludXgtbGlrZS4gICovCisjZGVmaW5lIGlzX3NlbGludXhfZW5hYmxlZCgpIDAKKworI2VuZGlmIC8qICFkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoWDg2X1dJTjY0KSAqLworCisvKiBEZWNsYXJlIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBkbG1hbGxvYy5jIGFzIHN0YXRpYy4gICovCitzdGF0aWMgdm9pZCAqZGxtYWxsb2Moc2l6ZV90KTsKK3N0YXRpYyB2b2lkIGRsZnJlZSh2b2lkKik7CitzdGF0aWMgdm9pZCAqZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkICpkbHJlYWxsb2Modm9pZCAqLCBzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkICpkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCAqZGx2YWxsb2Moc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgaW50IGRsbWFsbG9wdChpbnQsIGludCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHNpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHNpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKikgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90Kiwgdm9pZCoqKSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCAqZGxwdmFsbG9jKHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIGludCBkbG1hbGxvY190cmltKHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHNpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKikgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQgZGxtYWxsb2Nfc3RhdHModm9pZCkgTUFZQkVfVU5VU0VEOworCisjaWYgIShkZWZpbmVkKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfV0lONjQpKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKQorLyogVXNlIHRoZXNlIGZvciBtbWFwIGFuZCBtdW5tYXAgd2l0aGluIGRsbWFsbG9jLmMuICAqLworc3RhdGljIHZvaWQgKmRsbW1hcCh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpOworc3RhdGljIGludCBkbG11bm1hcCh2b2lkICosIHNpemVfdCk7CisjZW5kaWYgLyogIShkZWZpbmVkKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfV0lONjQpKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKSAqLworCisjZGVmaW5lIG1tYXAgZGxtbWFwCisjZGVmaW5lIG11bm1hcCBkbG11bm1hcAorCisjaW5jbHVkZSAiZGxtYWxsb2MuYyIKKworI3VuZGVmIG1tYXAKKyN1bmRlZiBtdW5tYXAKKworI2lmICEoZGVmaW5lZChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X1dJTjY0KSkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykKKworLyogQSBtdXRleCB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byAqZXhlYyogdmFyaWFibGVzIGluIHRoaXMgZmlsZS4gICovCitzdGF0aWMgcHRocmVhZF9tdXRleF90IG9wZW5fdGVtcF9leGVjX2ZpbGVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisvKiBBIGZpbGUgZGVzY3JpcHRvciBvZiBhIHRlbXBvcmFyeSBmaWxlIGZyb20gd2hpY2ggd2UnbGwgbWFwCisgICBleGVjdXRhYmxlIHBhZ2VzLiAgKi8KK3N0YXRpYyBpbnQgZXhlY2ZkID0gLTE7CisKKy8qIFRoZSBhbW91bnQgb2Ygc3BhY2UgYWxyZWFkeSBhbGxvY2F0ZWQgZnJvbSB0aGUgdGVtcG9yYXJ5IGZpbGUuICAqLworc3RhdGljIHNpemVfdCBleGVjc2l6ZSA9IDA7CisKKy8qIE9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBuYW1lLCBhbmQgaW1tZWRpYXRlbHkgdW5saW5rIGl0LiAgKi8KK3N0YXRpYyBpbnQKK29wZW5fdGVtcF9leGVjX2ZpbGVfbmFtZSAoY2hhciAqbmFtZSkKK3sKKyAgaW50IGZkID0gbWtzdGVtcCAobmFtZSk7CisKKyAgaWYgKGZkICE9IC0xKQorICAgIHVubGluayAobmFtZSk7CisKKyAgcmV0dXJuIGZkOworfQorCisvKiBPcGVuIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIG5hbWVkIGRpcmVjdG9yeS4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlX2RpciAoY29uc3QgY2hhciAqZGlyKQoreworICBzdGF0aWMgY29uc3QgY2hhciBzdWZmaXhbXSA9ICIvZmZpWFhYWFhYIjsKKyAgaW50IGxlbmRpciA9IHN0cmxlbiAoZGlyKTsKKyAgY2hhciAqdGVtcG5hbWUgPSBfX2J1aWx0aW5fYWxsb2NhIChsZW5kaXIgKyBzaXplb2YgKHN1ZmZpeCkpOworCisgIGlmICghdGVtcG5hbWUpCisgICAgcmV0dXJuIC0xOworCisgIG1lbWNweSAodGVtcG5hbWUsIGRpciwgbGVuZGlyKTsKKyAgbWVtY3B5ICh0ZW1wbmFtZSArIGxlbmRpciwgc3VmZml4LCBzaXplb2YgKHN1ZmZpeCkpOworCisgIHJldHVybiBvcGVuX3RlbXBfZXhlY19maWxlX25hbWUgKHRlbXBuYW1lKTsKK30KKworLyogT3BlbiBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBkaXJlY3RvcnkgaW4gdGhlIG5hbWVkIGVudmlyb25tZW50CisgICB2YXJpYWJsZS4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlX2VudiAoY29uc3QgY2hhciAqZW52dmFyKQoreworICBjb25zdCBjaGFyICp2YWx1ZSA9IGdldGVudiAoZW52dmFyKTsKKworICBpZiAoIXZhbHVlKQorICAgIHJldHVybiAtMTsKKworICByZXR1cm4gb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIgKHZhbHVlKTsKK30KKworI2lmZGVmIEhBVkVfTU5URU5UCisvKiBPcGVuIGEgdGVtcG9yYXJ5IGZpbGUgaW4gYW4gZXhlY3V0YWJsZSBhbmQgd3JpdGFibGUgbW91bnQgcG9pbnQKKyAgIGxpc3RlZCBpbiB0aGUgbW91bnRzIGZpbGUuICBTdWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWUgbW91bnRzCisgICBrZWVwIHNlYXJjaGluZyBmb3IgbW91bnQgcG9pbnRzIGluIHRoZSBzYW1lIGZpbGUuICBQcm92aWRpbmcgTlVMTAorICAgYXMgdGhlIG1vdW50cyBmaWxlIGNsb3NlcyB0aGUgZmlsZS4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlX21udCAoY29uc3QgY2hhciAqbW91bnRzKQoreworICBzdGF0aWMgY29uc3QgY2hhciAqbGFzdF9tb3VudHM7CisgIHN0YXRpYyBGSUxFICpsYXN0X21udGVudDsKKworICBpZiAobW91bnRzICE9IGxhc3RfbW91bnRzKQorICAgIHsKKyAgICAgIGlmIChsYXN0X21udGVudCkKKwllbmRtbnRlbnQgKGxhc3RfbW50ZW50KTsKKworICAgICAgbGFzdF9tb3VudHMgPSBtb3VudHM7CisKKyAgICAgIGlmIChtb3VudHMpCisJbGFzdF9tbnRlbnQgPSBzZXRtbnRlbnQgKG1vdW50cywgInIiKTsKKyAgICAgIGVsc2UKKwlsYXN0X21udGVudCA9IE5VTEw7CisgICAgfQorCisgIGlmICghbGFzdF9tbnRlbnQpCisgICAgcmV0dXJuIC0xOworCisgIGZvciAoOzspCisgICAgeworICAgICAgaW50IGZkOworICAgICAgc3RydWN0IG1udGVudCBtbnQ7CisgICAgICBjaGFyIGJ1ZltNQVhQQVRITEVOICogM107CisKKyAgICAgIGlmIChnZXRtbnRlbnRfciAobGFzdF9tbnRlbnQsICZtbnQsIGJ1Ziwgc2l6ZW9mIChidWYpKSkKKwlyZXR1cm4gLTE7CisKKyAgICAgIGlmIChoYXNtbnRvcHQgKCZtbnQsICJybyIpCisJICB8fCBoYXNtbnRvcHQgKCZtbnQsICJub2V4ZWMiKQorCSAgfHwgYWNjZXNzIChtbnQubW50X2RpciwgV19PSykpCisJY29udGludWU7CisKKyAgICAgIGZkID0gb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIgKG1udC5tbnRfZGlyKTsKKworICAgICAgaWYgKGZkICE9IC0xKQorCXJldHVybiBmZDsKKyAgICB9Cit9CisjZW5kaWYgLyogSEFWRV9NTlRFTlQgKi8KKworLyogSW5zdHJ1Y3Rpb25zIHRvIGxvb2sgZm9yIGEgbG9jYXRpb24gdG8gaG9sZCBhIHRlbXBvcmFyeSBmaWxlIHRoYXQKKyAgIGNhbiBiZSBtYXBwZWQgaW4gZm9yIGV4ZWN1dGlvbi4gICovCitzdGF0aWMgc3RydWN0Cit7CisgIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIgKik7CisgIGNvbnN0IGNoYXIgKmFyZzsKKyAgaW50IHJlcGVhdDsKK30gb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW10gPSB7CisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9lbnYsICJUTVBESVIiLCAwIH0sCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIsICIvdG1wIiwgMCB9LAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyLCAiL3Zhci90bXAiLCAwIH0sCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIsICIvZGV2L3NobSIsIDAgfSwKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX2VudiwgIkhPTUUiLCAwIH0sCisjaWZkZWYgSEFWRV9NTlRFTlQKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX21udCwgIi9ldGMvbXRhYiIsIDEgfSwKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX21udCwgIi9wcm9jL21vdW50cyIsIDEgfSwKKyNlbmRpZiAvKiBIQVZFX01OVEVOVCAqLworfTsKKworLyogQ3VycmVudCBpbmRleCBpbnRvIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0cy4gICovCitzdGF0aWMgaW50IG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHggPSAwOworCisvKiBSZXNldCBhIGN1cnJlbnQgbXVsdGktY2FsbCBmdW5jLCB0aGVuIGFkdmFuY2VzIHRvIHRoZSBuZXh0IGVudHJ5LgorICAgSWYgd2UncmUgYXQgdGhlIGxhc3QsIGdvIGJhY2sgdG8gdGhlIGZpcnN0IGFuZCByZXR1cm4gbm9uemVybywKKyAgIG90aGVyd2lzZSByZXR1cm4gemVyby4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfbmV4dCAodm9pZCkKK3sKKyAgaWYgKG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5yZXBlYXQpCisgICAgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzW29wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHhdLmZ1bmMgKE5VTEwpOworCisgIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHgrKzsKKyAgaWYgKG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHgKKyAgICAgID09IChzaXplb2YgKG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0cykKKwkgIC8gc2l6ZW9mICgqb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzKSkpCisgICAgeworICAgICAgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeCA9IDA7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBvZiBhIHRlbXBvcmFyeSB6ZXJvLXNpemVkIGZpbGUgaW4gYQorICAgd3JpdGFibGUgYW5kIGV4ZXh1dGFibGUgZmlsZXN5c3RlbS4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlICh2b2lkKQoreworICBpbnQgZmQ7CisKKyAgZG8KKyAgICB7CisgICAgICBmZCA9IG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5mdW5jCisJKG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5hcmcpOworCisgICAgICBpZiAoIW9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5yZXBlYXQKKwkgIHx8IGZkID09IC0xKQorCXsKKwkgIGlmIChvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfbmV4dCAoKSkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKyAgd2hpbGUgKGZkID09IC0xKTsKKworICByZXR1cm4gZmQ7Cit9CisKKy8qIE1hcCBpbiBhIGNodW5rIG9mIG1lbW9yeSBmcm9tIHRoZSB0ZW1wb3JhcnkgZXhlYyBmaWxlIGludG8gc2VwYXJhdGUKKyAgIGxvY2F0aW9ucyBpbiB0aGUgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBzcGFjZSwgb25lIHdyaXRhYmxlIGFuZCBvbmUKKyAgIGV4ZWN1dGFibGUuICBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSB3cml0YWJsZSBwb3J0aW9uLCBhZnRlcgorICAgc3RvcmluZyBhbiBvZmZzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXhlY3V0YWJsZSBwb3J0aW9uIGF0IHRoZQorICAgbGFzdCB3b3JkIG9mIHRoZSByZXF1ZXN0ZWQgY2h1bmsuICAqLworc3RhdGljIHZvaWQgKgorZGxtbWFwX2xvY2tlZCAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIG9mZl90IG9mZnNldCkKK3sKKyAgdm9pZCAqcHRyOworCisgIGlmIChleGVjZmQgPT0gLTEpCisgICAgeworICAgICAgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeCA9IDA7CisgICAgcmV0cnlfb3BlbjoKKyAgICAgIGV4ZWNmZCA9IG9wZW5fdGVtcF9leGVjX2ZpbGUgKCk7CisgICAgICBpZiAoZXhlY2ZkID09IC0xKQorCXJldHVybiBNRkFJTDsKKyAgICB9CisKKyAgb2Zmc2V0ID0gZXhlY3NpemU7CisKKyAgaWYgKGZ0cnVuY2F0ZSAoZXhlY2ZkLCBvZmZzZXQgKyBsZW5ndGgpKQorICAgIHJldHVybiBNRkFJTDsKKworICBmbGFncyAmPSB+KE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyk7CisgIGZsYWdzIHw9IE1BUF9TSEFSRUQ7CisKKyAgcHRyID0gbW1hcCAoTlVMTCwgbGVuZ3RoLCAocHJvdCAmIH5QUk9UX1dSSVRFKSB8IFBST1RfRVhFQywKKwkgICAgICBmbGFncywgZXhlY2ZkLCBvZmZzZXQpOworICBpZiAocHRyID09IE1GQUlMKQorICAgIHsKKyAgICAgIGlmICghb2Zmc2V0KQorCXsKKwkgIGNsb3NlIChleGVjZmQpOworCSAgZ290byByZXRyeV9vcGVuOworCX0KKyAgICAgIGZ0cnVuY2F0ZSAoZXhlY2ZkLCBvZmZzZXQpOworICAgICAgcmV0dXJuIE1GQUlMOworICAgIH0KKyAgZWxzZSBpZiAoIW9mZnNldAorCSAgICYmIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5yZXBlYXQpCisgICAgb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX25leHQgKCk7CisKKyAgc3RhcnQgPSBtbWFwIChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgZXhlY2ZkLCBvZmZzZXQpOworCisgIGlmIChzdGFydCA9PSBNRkFJTCkKKyAgICB7CisgICAgICBtdW5tYXAgKHB0ciwgbGVuZ3RoKTsKKyAgICAgIGZ0cnVuY2F0ZSAoZXhlY2ZkLCBvZmZzZXQpOworICAgICAgcmV0dXJuIHN0YXJ0OworICAgIH0KKworICBtbWFwX2V4ZWNfb2Zmc2V0ICgoY2hhciAqKXN0YXJ0LCBsZW5ndGgpID0gKGNoYXIqKXB0ciAtIChjaGFyKilzdGFydDsKKworICBleGVjc2l6ZSArPSBsZW5ndGg7CisKKyAgcmV0dXJuIHN0YXJ0OworfQorCisvKiBNYXAgaW4gYSB3cml0YWJsZSBhbmQgZXhlY3V0YWJsZSBjaHVuayBvZiBtZW1vcnkgaWYgcG9zc2libGUuCisgICBGYWlsaW5nIHRoYXQsIGZhbGwgYmFjayB0byBkbG1tYXBfbG9ja2VkLiAgKi8KK3N0YXRpYyB2b2lkICoKK2RsbW1hcCAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LAorCWludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisgIHZvaWQgKnB0cjsKKworICBhc3NlcnQgKHN0YXJ0ID09IE5VTEwgJiYgbGVuZ3RoICUgbWFsbG9jX2dldHBhZ2VzaXplID09IDAKKwkgICYmIHByb3QgPT0gKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpCisJICAmJiBmbGFncyA9PSAoTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKQorCSAgJiYgZmQgPT0gLTEgJiYgb2Zmc2V0ID09IDApOworCisjaWYgRkZJX0NMT1NVUkVfVEVTVAorICBwcmludGYgKCJtYXBwaW5nIGluICV6aVxuIiwgbGVuZ3RoKTsKKyNlbmRpZgorCisgIGlmIChleGVjZmQgPT0gLTEgJiYgIWlzX3NlbGludXhfZW5hYmxlZCAoKSkKKyAgICB7CisgICAgICBwdHIgPSBtbWFwIChzdGFydCwgbGVuZ3RoLCBwcm90IHwgUFJPVF9FWEVDLCBmbGFncywgZmQsIG9mZnNldCk7CisKKyAgICAgIGlmIChwdHIgIT0gTUZBSUwgfHwgKGVycm5vICE9IEVQRVJNICYmIGVycm5vICE9IEVBQ0NFUykpCisJLyogQ29vbCwgbm8gbmVlZCB0byBtZXNzIHdpdGggc2VwYXJhdGUgc2VnbWVudHMuICAqLworCXJldHVybiBwdHI7CisKKyAgICAgIC8qIElmIE1SRU1BUF9EVVAgaXMgZXZlciBpbnRyb2R1Y2VkIGFuZCBpbXBsZW1lbnRlZCwgdHJ5IG1tYXAKKwkgd2l0aCAoKHByb3QgJiB+UFJPVF9XUklURSkgfCBQUk9UX0VYRUMpIGFuZCBtcmVtYXAgd2l0aAorCSBNUkVNQVBfRFVQIGFuZCBwcm90IGF0IHRoaXMgcG9pbnQuICAqLworICAgIH0KKworICBpZiAoZXhlY3NpemUgPT0gMCB8fCBleGVjZmQgPT0gLTEpCisgICAgeworICAgICAgcHRocmVhZF9tdXRleF9sb2NrICgmb3Blbl90ZW1wX2V4ZWNfZmlsZV9tdXRleCk7CisgICAgICBwdHIgPSBkbG1tYXBfbG9ja2VkIChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgb2Zmc2V0KTsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmb3Blbl90ZW1wX2V4ZWNfZmlsZV9tdXRleCk7CisKKyAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgIHJldHVybiBkbG1tYXBfbG9ja2VkIChzdGFydCwgbGVuZ3RoLCBwcm90LCBmbGFncywgb2Zmc2V0KTsKK30KKworLyogUmVsZWFzZSBtZW1vcnkgYXQgdGhlIGdpdmVuIGFkZHJlc3MsIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcKKyAgIGV4ZWN1dGFibGUgcGFnZSBpZiBpdCdzIHNlcGFyYXRlLiAgKi8KK3N0YXRpYyBpbnQKK2RsbXVubWFwICh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgLyogV2UgZG9uJ3QgYm90aGVyIGRlY3JlYXNpbmcgZXhlY3NpemUgb3IgdHJ1bmNhdGluZyB0aGUgZmlsZSwgc2luY2UKKyAgICAgd2UgY2FuJ3QgcXVpdGUgdGVsbCB3aGV0aGVyIHdlJ3JlIHVubWFwcGluZyB0aGUgZW5kIG9mIHRoZSBmaWxlLgorICAgICBXZSBkb24ndCBleHBlY3QgZnJlcXVlbnQgZGVhbGxvY2F0aW9uIGFueXdheS4gIElmIHdlIGRpZCwgd2UKKyAgICAgY291bGQgbG9jYXRlIHBhZ2VzIGluIHRoZSBmaWxlIGJ5IHdyaXRpbmcgdG8gdGhlIHBhZ2VzIGJlaW5nCisgICAgIGRlYWxsb2NhdGVkIGFuZCBjaGVja2luZyB0aGF0IHRoZSBmaWxlIGNvbnRlbnRzIGNoYW5nZS4KKyAgICAgWXVjay4gICovCisgIG1zZWdtZW50cHRyIHNlZyA9IHNlZ21lbnRfaG9sZGluZyAoZ20sIHN0YXJ0KTsKKyAgdm9pZCAqY29kZTsKKworI2lmIEZGSV9DTE9TVVJFX1RFU1QKKyAgcHJpbnRmICgidW5tYXBwaW5nICV6aVxuIiwgbGVuZ3RoKTsKKyNlbmRpZgorCisgIGlmIChzZWcgJiYgKGNvZGUgPSBhZGRfc2VnbWVudF9leGVjX29mZnNldCAoc3RhcnQsIHNlZykpICE9IHN0YXJ0KQorICAgIHsKKyAgICAgIGludCByZXQgPSBtdW5tYXAgKGNvZGUsIGxlbmd0aCk7CisgICAgICBpZiAocmV0KQorCXJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiBtdW5tYXAgKHN0YXJ0LCBsZW5ndGgpOworfQorCisjaWYgRkZJX0NMT1NVUkVfRlJFRV9DT0RFCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGNvZGUgYWRkcmVzcy4gICovCitzdGF0aWMgbXNlZ21lbnRwdHIKK3NlZ21lbnRfaG9sZGluZ19jb2RlIChtc3RhdGUgbSwgY2hhciogYWRkcikKK3sKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQgKHNwLT5iYXNlLCBzcCkKKwkmJiBhZGRyIDwgYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQgKHNwLT5iYXNlLCBzcCkgKyBzcC0+c2l6ZSkKKyAgICAgIHJldHVybiBzcDsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhKGRlZmluZWQoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkpIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pICovCisKKy8qIEFsbG9jYXRlIGEgY2h1bmsgb2YgbWVtb3J5IHdpdGggdGhlIGdpdmVuIHNpemUuICBSZXR1cm5zIGEgcG9pbnRlcgorICAgdG8gdGhlIHdyaXRhYmxlIGFkZHJlc3MsIGFuZCBzZXRzICpDT0RFIHRvIHRoZSBleGVjdXRhYmxlCisgICBjb3JyZXNwb25kaW5nIHZpcnR1YWwgYWRkcmVzcy4gICovCit2b2lkICoKK2ZmaV9jbG9zdXJlX2FsbG9jIChzaXplX3Qgc2l6ZSwgdm9pZCAqKmNvZGUpCit7CisgIHZvaWQgKnB0cjsKKworICBpZiAoIWNvZGUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcHRyID0gZGxtYWxsb2MgKHNpemUpOworCisgIGlmIChwdHIpCisgICAgeworICAgICAgbXNlZ21lbnRwdHIgc2VnID0gc2VnbWVudF9ob2xkaW5nIChnbSwgcHRyKTsKKworICAgICAgKmNvZGUgPSBhZGRfc2VnbWVudF9leGVjX29mZnNldCAocHRyLCBzZWcpOworICAgIH0KKworICByZXR1cm4gcHRyOworfQorCisvKiBSZWxlYXNlIGEgY2h1bmsgb2YgbWVtb3J5IGFsbG9jYXRlZCB3aXRoIGZmaV9jbG9zdXJlX2FsbG9jLiAgSWYKKyAgIEZGSV9DTE9TVVJFX0ZSRUVfQ09ERSBpcyBub256ZXJvLCB0aGUgZ2l2ZW4gYWRkcmVzcyBjYW4gYmUgdGhlCisgICB3cml0YWJsZSBvciB0aGUgZXhlY3V0YWJsZSBhZGRyZXNzIGdpdmVuLiAgT3RoZXJ3aXNlLCBvbmx5IHRoZQorICAgd3JpdGFibGUgYWRkcmVzcyBjYW4gYmUgcHJvdmlkZWQgaGVyZS4gICovCit2b2lkCitmZmlfY2xvc3VyZV9mcmVlICh2b2lkICpwdHIpCit7CisjaWYgRkZJX0NMT1NVUkVfRlJFRV9DT0RFCisgIG1zZWdtZW50cHRyIHNlZyA9IHNlZ21lbnRfaG9sZGluZ19jb2RlIChnbSwgcHRyKTsKKworICBpZiAoc2VnKQorICAgIHB0ciA9IHN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0IChwdHIsIHNlZyk7CisjZW5kaWYKKworICBkbGZyZWUgKHB0cik7Cit9CisKKworI2lmIEZGSV9DTE9TVVJFX1RFU1QKKy8qIERvIHNvbWUgaW50ZXJuYWwgc2FuaXR5IHRlc3RpbmcgdG8gbWFrZSBzdXJlIGFsbG9jYXRpb24gYW5kCisgICBkZWFsbG9jYXRpb24gb2YgcGFnZXMgYXJlIHdvcmtpbmcgYXMgaW50ZW5kZWQuICAqLworaW50IG1haW4gKCkKK3sKKyAgdm9pZCAqcFszXTsKKyNkZWZpbmUgR0VUKGlkeCwgbGVuKSBkbyB7IHBbaWR4XSA9IGRsbWFsbG9jIChsZW4pOyBwcmludGYgKCJhbGxvY2F0ZWQgJXppIGZvciBwWyVpXVxuIiwgKGxlbiksIChpZHgpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUKGlkeCkgZG8geyBwcmludGYgKCJmcmVlaW5nIHBbJWldXG4iLCAoaWR4KSk7IGRsZnJlZSAocFtpZHhdKTsgfSB3aGlsZSAoMCkKKyAgR0VUICgwLCBtYWxsb2NfZ2V0cGFnZXNpemUgLyAyKTsKKyAgR0VUICgxLCAyICogbWFsbG9jX2dldHBhZ2VzaXplIC0gNjQgKiBzaXplb2YgKHZvaWQqKSk7CisgIFBVVCAoMSk7CisgIEdFVCAoMSwgMiAqIG1hbGxvY19nZXRwYWdlc2l6ZSk7CisgIEdFVCAoMiwgbWFsbG9jX2dldHBhZ2VzaXplIC8gMik7CisgIFBVVCAoMSk7CisgIFBVVCAoMCk7CisgIFBVVCAoMik7CisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIEZGSV9DTE9TVVJFX1RFU1QgKi8KKyMgZWxzZSAvKiAhIEZGSV9NTUFQX0VYRUNfV1JJVCAqLworCisvKiBPbiBtYW55IHN5c3RlbXMsIG1lbW9yeSByZXR1cm5lZCBieSBtYWxsb2MgaXMgd3JpdGFibGUgYW5kCisgICBleGVjdXRhYmxlLCBzbyBqdXN0IHVzZSBpdC4gICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordm9pZCAqCitmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKQoreworICBpZiAoIWNvZGUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgcmV0dXJuICpjb2RlID0gbWFsbG9jIChzaXplKTsKK30KKwordm9pZAorZmZpX2Nsb3N1cmVfZnJlZSAodm9pZCAqcHRyKQoreworICBmcmVlIChwdHIpOworfQorCisjIGVuZGlmIC8qICEgRkZJX01NQVBfRVhFQ19XUklUICovCisjZW5kaWYgLyogRkZJX0NMT1NVUkVTICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kYXJ3aW4vZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kYXJ3aW4vZmZpdGFyZ2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYzMwOGEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGFyd2luL2ZmaXRhcmdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBmb3IgTWFjT1NYIG9ubHkuIERpc3BhdGNoIHRvIHRoZSByaWdodCBhcmNoaXRlY3R1cmUgaW5jbHVkZQotICogZmlsZSBiYXNlZCBvbiB0aGUgY3VycmVudCBhcmNoaWN0ZWN0dXJlIChpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBzeW1saW5rCi0gKiBjcmVhdGVkIGJ5IGNvbmZpZ3VyZSkuIFRoaXMgbWFrZXMgaXMgcG9zc2libGUgdG8gYnVpbGQgYSB1bml2ZXJhbCBiaW5hcnkKLSAqIG9mIGN0eXBlcyBpbiBvbmUgZ28uCi0gKi8KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotCi0jaWZuZGVmIFg4Nl9EQVJXSU4KLSNkZWZpbmUgWDg2X0RBUldJTgotI2VuZGlmCi0jdW5kZWYgUE9XRVJQQ19EQVJXSU4KLQotI2luY2x1ZGUgIi4uL3NyYy94ODYvZmZpdGFyZ2V0LmgiCi0KLSNlbGlmIGRlZmluZWQoX19wcGNfXykKLQotI2lmbmRlZiBQT1dFUlBDX0RBUldJTgotI2RlZmluZSBQT1dFUlBDX0RBUldJTgotI2VuZGlmCi0jdW5kZWYgWDg2X0RBUldJTgotCi0jaW5jbHVkZSAiLi4vc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGVidWcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkY2ZjZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RlYnVnLmMKQEAgLTAsMCArMSw1OSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGRlYnVnLmMgLSBDb3B5cmlnaHQgKGMpIDE5OTYgUmVkIEhhdCwgSW5jLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIEdlbmVyYWwgZGVidWdnaW5nIHJvdXRpbmVzICovCisKK3ZvaWQgZmZpX3N0b3BfaGVyZSh2b2lkKQoreworICAvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgIFBsYWNlIGEgYnJlYWtwb2ludCBvbiBmZmlfc3RvcF9oZXJlIHRvIGJlIG5vdGlmaWVkIG9mCisgICAgIHNpZ25pZmljYW50IGV2ZW50cy4gKi8KK30KKworLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgdmlhIHRoZSBGRklfQVNTRVJUKCkgbWFjcm8gKi8KKwordm9pZCBmZmlfYXNzZXJ0KGNoYXIgKmV4cHIsIGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICBmcHJpbnRmKHN0ZGVyciwgIkFTU0VSVElPTiBGQUlMVVJFOiAlcyBhdCAlczolZFxuIiwgZXhwciwgZmlsZSwgbGluZSk7CisgIGZmaV9zdG9wX2hlcmUoKTsKKyAgYWJvcnQoKTsKK30KKworLyogUGVyZm9ybSBhIHNhbml0eSBjaGVjayBvbiBhbiBmZmlfdHlwZSBzdHJ1Y3R1cmUgKi8KKwordm9pZCBmZmlfdHlwZV90ZXN0KGZmaV90eXBlICphLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgRkZJX0FTU0VSVF9BVChhICE9IE5VTEwsIGZpbGUsIGxpbmUpOworCisgIEZGSV9BU1NFUlRfQVQoYS0+dHlwZSA8PSBGRklfVFlQRV9MQVNULCBmaWxlLCBsaW5lKTsKKyAgRkZJX0FTU0VSVF9BVChhLT50eXBlID09IEZGSV9UWVBFX1ZPSUQgfHwgYS0+c2l6ZSA+IDAsIGZpbGUsIGxpbmUpOworICBGRklfQVNTRVJUX0FUKGEtPnR5cGUgPT0gRkZJX1RZUEVfVk9JRCB8fCBhLT5hbGlnbm1lbnQgPiAwLCBmaWxlLCBsaW5lKTsKKyAgRkZJX0FTU0VSVF9BVChhLT50eXBlICE9IEZGSV9UWVBFX1NUUlVDVCB8fCBhLT5lbGVtZW50cyAhPSBOVUxMLCBmaWxlLCBsaW5lKTsKKworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzYzVjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKQEAgLTAsMCArMSw1MDk5IEBACisvKgorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkKKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAgU2VuZCBxdWVzdGlvbnMsCisgIGNvbW1lbnRzLCBjb21wbGFpbnRzLCBwZXJmb3JtYW5jZSBkYXRhLCBldGMgdG8gZGxAY3Mub3N3ZWdvLmVkdQorCisqIFZlcnNpb24gMi44LjMgVGh1IFNlcCAyMiAxMToxNjoxNSAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKworICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyBvYnRhaW5hYmxlIGF0CisgICAgICAgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jCisgICAgICAgICBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKKworKiBRdWlja3N0YXJ0CisKKyAgVGhpcyBsaWJyYXJ5IGlzIGFsbCBpbiBvbmUgZmlsZSB0byBzaW1wbGlmeSB0aGUgbW9zdCBjb21tb24gdXNhZ2U6CisgIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8zKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dyYW0uIEFsbCBvZgorICB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25hYmxlIHZhbHVlcyBmb3IgdXNlIG9uCisgIG1vc3QgcGxhdGZvcm1zLiAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gc3RlcCB0aHJvdWdoIHZhcmlvdXMKKyAgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljIHR1bmluZyBvcHRpb25zLgorCisgIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVzaW5nIHRoaXMgbWFsbG9jIGlzIGF0OgorICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MtMi44LjMuaAorICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxlIHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90CisgIGRlZmluZWQgaW4geW91ciBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCisgIGV4Y2VycHRzIGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0MrKworICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1lIG9wdGlvbnMgYWJvdXQKKyAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBkbywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCisgIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5jbHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKKyAgaW5kaWNhdGVkIGJlbG93LiBOb3RlIHRoYXQgeW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDCisgIGxpYnJhcnkgY29udGFpbmluZyBhIG1hbGxvYyB0aGF0IGlzIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzCisgIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4gbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZQorICBpbiB0aGlzIGZpbGUgdG8gY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFkcyBhc3NvY2lhdGVkCisgIHdpdGggbGlicmFyeSB2ZXJzaW9ucy4KKworKiBWaXRhbCBzdGF0aXN0aWNzOgorCisgIFN1cHBvcnRlZCBwb2ludGVyL3NpemVfdCByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCisgICAgICAgc2l6ZV90IE1VU1QgYmUgYW4gdW5zaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICAgICAgIHBvaW50ZXJzLiAoSWYgeW91IGFyZSB1c2luZyBhbiBhbmNpZW50IHN5c3RlbSB0aGF0IGRlY2xhcmVzCisgICAgICAgc2l6ZV90IGFzIGEgc2lnbmVkIHR5cGUsIG9yIG5lZWQgaXQgdG8gYmUgYSBkaWZmZXJlbnQgd2lkdGgKKyAgICAgICB0aGFuIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSBhIHByZXZpb3VzIHJlbGVhc2Ugb2YgdGhpcyBtYWxsb2MKKyAgICAgICAoZS5nLiAyLjcuMikgc3VwcG9ydGluZyB0aGVzZS4pCisKKyAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIChkZWZhdWx0KQorICAgICAgIFRoaXMgc3VmZmljZXMgZm9yIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5lcyBhbmQgQyBjb21waWxlcnMuCisgICAgICAgSG93ZXZlciwgeW91IGNhbiBkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMKKyAgICAgICBpZiBuZWNlc3NhcnkgKHVwIHRvIDEyOGJ5dGVzKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgbW9yZSBzcGFjZS4KKworICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6ICAgNCBvciAgOCBieXRlcyAoaWYgNGJ5dGUgc2l6ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IG9yIDE2IGJ5dGVzIChpZiA4Ynl0ZSBzaXplcykKKyAgICAgICBFYWNoIG1hbGxvY2VkIGNodW5rIGhhcyBhIGhpZGRlbiB3b3JkIG9mIG92ZXJoZWFkIGhvbGRpbmcgc2l6ZQorICAgICAgIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24sIGFuZCBhZGRpdGlvbmFsIGNyb3NzLWNoZWNrIHdvcmQKKyAgICAgICBpZiBGT09URVJTIGlzIGRlZmluZWQuCisKKyAgTWluaW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHB0cnM6ICAxNiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorICAgICAgICAgICAgICAgICAgICAgICAgICA4LWJ5dGUgcHRyczogIDMyIGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisKKyAgICAgICBFdmVuIGEgcmVxdWVzdCBmb3IgemVybyBieXRlcyAoaS5lLiwgbWFsbG9jKDApKSByZXR1cm5zIGEKKyAgICAgICBwb2ludGVyIHRvIHNvbWV0aGluZyBvZiB0aGUgbWluaW11bSBhbGxvY2F0YWJsZSBzaXplLgorICAgICAgIFRoZSBtYXhpbXVtIG92ZXJoZWFkIHdhc3RhZ2UgKGkuZS4sIG51bWJlciBvZiBleHRyYSBieXRlcworICAgICAgIGFsbG9jYXRlZCB0aGFuIHdlcmUgcmVxdWVzdGVkIGluIG1hbGxvYykgaXMgbGVzcyB0aGFuIG9yIGVxdWFsCisgICAgICAgdG8gdGhlIG1pbmltdW0gc2l6ZSwgZXhjZXB0IGZvciByZXF1ZXN0cyA+PSBtbWFwX3RocmVzaG9sZCB0aGF0CisgICAgICAgYXJlIHNlcnZpY2VkIHZpYSBtbWFwKCksIHdoZXJlIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgYWJvdXQKKyAgICAgICAzMiBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbAorICAgICAgIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IG9yIDgxOTIgYnl0ZXMuCisKKyAgU2VjdXJpdHk6IHN0YXRpYy1zYWZlOyBvcHRpb25hbGx5IG1vcmUgb3IgbGVzcworICAgICAgIFRoZSAic2VjdXJpdHkiIG9mIG1hbGxvYyByZWZlcnMgdG8gdGhlIGFiaWxpdHkgb2YgbWFsaWNpb3VzCisgICAgICAgY29kZSB0byBhY2NlbnR1YXRlIHRoZSBlZmZlY3RzIG9mIGVycm9ycyAoZm9yIGV4YW1wbGUsIGZyZWVpbmcKKyAgICAgICBzcGFjZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgbWFsbG9jJ2VkIG9yIG92ZXJ3cml0aW5nIHBhc3QgdGhlCisgICAgICAgZW5kcyBvZiBjaHVua3MpIGluIGNvZGUgdGhhdCBjYWxscyBtYWxsb2MuICBUaGlzIG1hbGxvYworICAgICAgIGd1YXJhbnRlZXMgbm90IHRvIG1vZGlmeSBhbnkgbWVtb3J5IGxvY2F0aW9ucyBiZWxvdyB0aGUgYmFzZSBvZgorICAgICAgIGhlYXAsIGkuZS4sIHN0YXRpYyB2YXJpYWJsZXMsIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHVzYWdlCisgICAgICAgZXJyb3JzLiAgVGhlIHJvdXRpbmVzIGFkZGl0aW9uYWxseSBkZXRlY3QgbW9zdCBpbXByb3BlciBmcmVlcworICAgICAgIGFuZCByZWFsbG9jcy4gIEFsbCB0aGlzIGhvbGRzIGFzIGxvbmcgYXMgdGhlIHN0YXRpYyBib29ra2VlcGluZworICAgICAgIGZvciBtYWxsb2MgaXRzZWxmIGlzIG5vdCBjb3JydXB0ZWQgYnkgc29tZSBvdGhlciBtZWFucy4gIFRoaXMKKyAgICAgICBpcyBvbmx5IG9uZSBhc3BlY3Qgb2Ygc2VjdXJpdHkgLS0gdGhlc2UgY2hlY2tzIGRvIG5vdCwgYW5kCisgICAgICAgY2Fubm90LCBkZXRlY3QgYWxsIHBvc3NpYmxlIHByb2dyYW1taW5nIGVycm9ycy4KKworICAgICAgIElmIEZPT1RFUlMgaXMgZGVmaW5lZCBub256ZXJvLCB0aGVuIGVhY2ggYWxsb2NhdGVkIGNodW5rCisgICAgICAgY2FycmllcyBhbiBhZGRpdGlvbmFsIGNoZWNrIHdvcmQgdG8gdmVyaWZ5IHRoYXQgaXQgd2FzIG1hbGxvY2VkCisgICAgICAgZnJvbSBpdHMgc3BhY2UuICBUaGVzZSBjaGVjayB3b3JkcyBhcmUgdGhlIHNhbWUgd2l0aGluIGVhY2gKKyAgICAgICBleGVjdXRpb24gb2YgYSBwcm9ncmFtIHVzaW5nIG1hbGxvYywgYnV0IGRpZmZlciBhY3Jvc3MKKyAgICAgICBleGVjdXRpb25zLCBzbyBleHRlcm5hbGx5IGNyYWZ0ZWQgZmFrZSBjaHVua3MgY2Fubm90IGJlCisgICAgICAgZnJlZWQuIFRoaXMgaW1wcm92ZXMgc2VjdXJpdHkgYnkgcmVqZWN0aW5nIGZyZWVzL3JlYWxsb2NzIHRoYXQKKyAgICAgICBjb3VsZCBjb3JydXB0IGhlYXAgbWVtb3J5LCBpbiBhZGRpdGlvbiB0byB0aGUgY2hlY2tzIHByZXZlbnRpbmcKKyAgICAgICB3cml0ZXMgdG8gc3RhdGljcyB0aGF0IGFyZSBhbHdheXMgb24uICBUaGlzIG1heSBmdXJ0aGVyIGltcHJvdmUKKyAgICAgICBzZWN1cml0eSBhdCB0aGUgZXhwZW5zZSBvZiB0aW1lIGFuZCBzcGFjZSBvdmVyaGVhZC4gIChOb3RlIHRoYXQKKyAgICAgICBGT09URVJTIG1heSBhbHNvIGJlIHdvcnRoIHVzaW5nIHdpdGggTVNQQUNFUy4pCisKKyAgICAgICBCeSBkZWZhdWx0IGRldGVjdGVkIGVycm9ycyBjYXVzZSB0aGUgcHJvZ3JhbSB0byBhYm9ydCAoY2FsbGluZworICAgICAgICJhYm9ydCgpIikuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbnN0ZWFkIHByb2NlZWQgcGFzdAorICAgICAgIGVycm9ycyBieSBkZWZpbmluZyBQUk9DRUVEX09OX0VSUk9SLiAgSW4gdGhpcyBjYXNlLCBhIGJhZCBmcmVlCisgICAgICAgaGFzIG5vIGVmZmVjdCwgYW5kIGEgbWFsbG9jIHRoYXQgZW5jb3VudGVycyBhIGJhZCBhZGRyZXNzCisgICAgICAgY2F1c2VkIGJ5IHVzZXIgb3ZlcndyaXRlcyB3aWxsIGlnbm9yZSB0aGUgYmFkIGFkZHJlc3MgYnkKKyAgICAgICBkcm9wcGluZyBwb2ludGVycyBhbmQgaW5kaWNlcyB0byBhbGwga25vd24gbWVtb3J5LiBUaGlzIG1heQorICAgICAgIGJlIGFwcHJvcHJpYXRlIGZvciBwcm9ncmFtcyB0aGF0IHNob3VsZCBjb250aW51ZSBpZiBhdCBhbGwKKyAgICAgICBwb3NzaWJsZSBpbiB0aGUgZmFjZSBvZiBwcm9ncmFtbWluZyBlcnJvcnMsIGFsdGhvdWdoIHRoZXkgbWF5CisgICAgICAgcnVuIG91dCBvZiBtZW1vcnkgYmVjYXVzZSBkcm9wcGVkIG1lbW9yeSBpcyBuZXZlciByZWNsYWltZWQuCisKKyAgICAgICBJZiB5b3UgZG9uJ3QgbGlrZSBlaXRoZXIgb2YgdGhlc2Ugb3B0aW9ucywgeW91IGNhbiBkZWZpbmUKKyAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBhbmQgVVNBR0VfRVJST1JfQUNUSU9OIHRvIGRvIGFueXRoaW5nCisgICAgICAgZWxzZS4gQW5kIGlmIGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdXIgcHJvZ3JhbSB1c2luZyBtYWxsb2MgaGFzCisgICAgICAgbm8gZXJyb3JzIG9yIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiBkZWZpbmUgSU5TRUNVUkUgdG8gMSwKKyAgICAgICB3aGljaCBtaWdodCAob3IgbWlnaHQgbm90KSBwcm92aWRlIGEgc21hbGwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCisKKyAgVGhyZWFkLXNhZmV0eTogTk9UIHRocmVhZC1zYWZlIHVubGVzcyBVU0VfTE9DS1MgZGVmaW5lZAorICAgICAgIFdoZW4gVVNFX0xPQ0tTIGlzIGRlZmluZWQsIGVhY2ggcHVibGljIGNhbGwgdG8gbWFsbG9jLCBmcmVlLAorICAgICAgIGV0YyBpcyBzdXJyb3VuZGVkIHdpdGggZWl0aGVyIGEgcHRocmVhZCBtdXRleCBvciBhIHdpbjMyCisgICAgICAgc3BpbmxvY2sgKGRlcGVuZGluZyBvbiBXSU4zMikuIFRoaXMgaXMgbm90IGVzcGVjaWFsbHkgZmFzdCwgYW5kCisgICAgICAgY2FuIGJlIGEgbWFqb3IgYm90dGxlbmVjay4gIEl0IGlzIGRlc2lnbmVkIG9ubHkgdG8gcHJvdmlkZQorICAgICAgIG1pbmltYWwgcHJvdGVjdGlvbiBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5kIHRvIHByb3ZpZGUgYQorICAgICAgIGJhc2lzIGZvciBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50CisgICAgICAgcHJvZ3JhbSwgY29uc2lkZXIgaW5zdGVhZCB1c2luZyBwdG1hbGxvYywgd2hpY2ggaXMgZGVyaXZlZCBmcm9tCisgICAgICAgYSB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jLiAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKS4KKworICBTeXN0ZW0gcmVxdWlyZW1lbnRzOiBBbnkgY29tYmluYXRpb24gb2YgTU9SRUNPUkUgYW5kL29yIE1NQVAvTVVOTUFQCisgICAgICAgVGhpcyBtYWxsb2MgY2FuIHVzZSB1bml4IHNicmsgb3IgYW55IGVtdWxhdGlvbiAoaW52b2tlZCB1c2luZworICAgICAgIHRoZSBDQUxMX01PUkVDT1JFIG1hY3JvKSBhbmQvb3IgbW1hcC9tdW5tYXAgb3IgYW55IGVtdWxhdGlvbgorICAgICAgIChpbnZva2VkIHVzaW5nIENBTExfTU1BUC9DQUxMX01VTk1BUCkgdG8gZ2V0IGFuZCByZWxlYXNlIHN5c3RlbQorICAgICAgIG1lbW9yeS4gIE9uIG1vc3QgdW5peCBzeXN0ZW1zLCBpdCB0ZW5kcyB0byB3b3JrIGJlc3QgaWYgYm90aAorICAgICAgIE1PUkVDT1JFIGFuZCBNTUFQIGFyZSBlbmFibGVkLiAgT24gV2luMzIsIGl0IHVzZXMgZW11bGF0aW9ucworICAgICAgIGJhc2VkIG9uIFZpcnR1YWxBbGxvYy4gSXQgYWxzbyB1c2VzIGNvbW1vbiBDIGxpYnJhcnkgZnVuY3Rpb25zCisgICAgICAgbGlrZSBtZW1zZXQuCisKKyAgQ29tcGxpYW5jZTogSSBiZWxpZXZlIGl0IGlzIGNvbXBsaWFudCB3aXRoIHRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uCisgICAgICAgKFNlZSBodHRwOi8vd3d3LnVuaXgub3JnKS4gQWxzbyBTVklEL1hQRywgQU5TSSBDLCBhbmQgcHJvYmFibHkKKyAgICAgICBvdGhlcnMgYXMgd2VsbC4KKworKiBPdmVydmlldyBvZiBhbGdvcml0aG1zCisKKyAgVGhpcyBpcyBub3QgdGhlIGZhc3Rlc3QsIG1vc3Qgc3BhY2UtY29uc2VydmluZywgbW9zdCBwb3J0YWJsZSwgb3IKKyAgbW9zdCB0dW5hYmxlIG1hbGxvYyBldmVyIHdyaXR0ZW4uIEhvd2V2ZXIgaXQgaXMgYW1vbmcgdGhlIGZhc3Rlc3QKKyAgd2hpbGUgYWxzbyBiZWluZyBhbW9uZyB0aGUgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBwb3J0YWJsZSBhbmQKKyAgdHVuYWJsZS4gIENvbnNpc3RlbnQgYmFsYW5jZSBhY3Jvc3MgdGhlc2UgZmFjdG9ycyByZXN1bHRzIGluIGEgZ29vZAorICBnZW5lcmFsLXB1cnBvc2UgYWxsb2NhdG9yIGZvciBtYWxsb2MtaW50ZW5zaXZlIHByb2dyYW1zLgorCisgIEluIG1vc3Qgd2F5cywgdGhpcyBtYWxsb2MgaXMgYSBiZXN0LWZpdCBhbGxvY2F0b3IuIEdlbmVyYWxseSwgaXQKKyAgY2hvb3NlcyB0aGUgYmVzdC1maXR0aW5nIGV4aXN0aW5nIGNodW5rIGZvciBhIHJlcXVlc3QsIHdpdGggdGllcworICBicm9rZW4gaW4gYXBwcm94aW1hdGVseSBsZWFzdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhpcyBzdHJhdGVneQorICBub3JtYWxseSBtYWludGFpbnMgbG93IGZyYWdtZW50YXRpb24uKSBIb3dldmVyLCBmb3IgcmVxdWVzdHMgbGVzcworICB0aGFuIDI1NmJ5dGVzLCBpdCBkZXZpYXRlcyBmcm9tIGJlc3QtZml0IHdoZW4gdGhlcmUgaXMgbm90IGFuCisgIGV4YWN0bHkgZml0dGluZyBhdmFpbGFibGUgY2h1bmsgYnkgcHJlZmVycmluZyB0byB1c2Ugc3BhY2UgYWRqYWNlbnQKKyAgdG8gdGhhdCB1c2VkIGZvciB0aGUgcHJldmlvdXMgc21hbGwgcmVxdWVzdCwgYXMgd2VsbCBhcyBieSBicmVha2luZworICB0aWVzIGluIGFwcHJveGltYXRlbHkgbW9zdC1yZWNlbnRseS11c2VkIG9yZGVyLiAoVGhlc2UgZW5oYW5jZQorICBsb2NhbGl0eSBvZiBzZXJpZXMgb2Ygc21hbGwgYWxsb2NhdGlvbnMuKSAgQW5kIGZvciB2ZXJ5IGxhcmdlIHJlcXVlc3RzCisgICg+PSAyNTZLYiBieSBkZWZhdWx0KSwgaXQgcmVsaWVzIG9uIHN5c3RlbSBtZW1vcnkgbWFwcGluZworICBmYWNpbGl0aWVzLCBpZiBzdXBwb3J0ZWQuICAoVGhpcyBoZWxwcyBhdm9pZCBjYXJyeWluZyBhcm91bmQgYW5kCisgIHBvc3NpYmx5IGZyYWdtZW50aW5nIG1lbW9yeSB1c2VkIG9ubHkgZm9yIGxhcmdlIGNodW5rcy4pCisKKyAgQWxsIG9wZXJhdGlvbnMgKGV4Y2VwdCBtYWxsb2Nfc3RhdHMgYW5kIG1hbGxpbmZvKSBoYXZlIGV4ZWN1dGlvbgorICB0aW1lcyB0aGF0IGFyZSBib3VuZGVkIGJ5IGEgY29uc3RhbnQgZmFjdG9yIG9mIHRoZSBudW1iZXIgb2YgYml0cyBpbgorICBhIHNpemVfdCwgbm90IGNvdW50aW5nIGFueSBjbGVhcmluZyBpbiBjYWxsb2Mgb3IgY29weWluZyBpbiByZWFsbG9jLAorICBvciBhY3Rpb25zIHN1cnJvdW5kaW5nIE1PUkVDT1JFIGFuZCBNTUFQIHRoYXQgaGF2ZSB0aW1lcworICBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiBub24tY29udGlndW91cyByZWdpb25zIHJldHVybmVkIGJ5CisgIHN5c3RlbSBhbGxvY2F0aW9uIHJvdXRpbmVzLCB3aGljaCBpcyBvZnRlbiBqdXN0IDEuCisKKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB2ZXJ5IG1vZHVsYXIgYW5kIHNlcmlvdXNseSBvdmVydXNlcworICBtYWNyb3MuIFBlcmhhcHMgc29tZWRheSBhbGwgQyBjb21waWxlcnMgd2lsbCBkbyBhcyBnb29kIGEgam9iCisgIGlubGluaW5nIG1vZHVsYXIgY29kZSBhcyBjYW4gbm93IGJlIGRvbmUgYnkgYnJ1dGUtZm9yY2UgZXhwYW5zaW9uLAorICBidXQgbm93LCBlbm91Z2ggb2YgdGhlbSBzZWVtIG5vdCB0by4KKworICBTb21lIGNvbXBpbGVycyBpc3N1ZSBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBjb2RlIHRoYXQgaXMKKyAgZGVhZC91bnJlYWNoYWJsZSBvbmx5IG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgYWxzbyBhYm91dCBpbnRlbnRpb25hbAorICB1c2VzIG9mIG5lZ2F0aW9uIG9uIHVuc2lnbmVkIHR5cGVzLiBBbGwga25vd24gY2FzZXMgb2YgZWFjaCBjYW4gYmUKKyAgaWdub3JlZC4KKworICBGb3IgYSBsb25nZXIgYnV0IG91dCBvZiBkYXRlIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24sIHNlZQorICAgICBodHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbAorCisqIE1TUEFDRVMKKyAgSWYgTVNQQUNFUyBpcyBkZWZpbmVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIG1hbGxvYywgZnJlZSwgZXRjLiwKKyAgdGhpcyBmaWxlIGFsc28gZGVmaW5lcyBtc3BhY2VfbWFsbG9jLCBtc3BhY2VfZnJlZSwgZXRjLiBUaGVzZQorICBhcmUgdmVyc2lvbnMgb2YgbWFsbG9jIHJvdXRpbmVzIHRoYXQgdGFrZSBhbiAibXNwYWNlIiBhcmd1bWVudAorICBvYnRhaW5lZCB1c2luZyBjcmVhdGVfbXNwYWNlLCB0byBjb250cm9sIGFsbCBpbnRlcm5hbCBib29ra2VlcGluZy4KKyAgSWYgT05MWV9NU1BBQ0VTIGlzIGRlZmluZWQsIG9ubHkgdGhlc2UgdmVyc2lvbnMgYXJlIGNvbXBpbGVkLgorICBTbyBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhpcyBhbGxvY2F0b3IgZm9yIG9ubHkgc29tZSBhbGxvY2F0aW9ucywKKyAgYW5kIHlvdXIgc3lzdGVtIG1hbGxvYyBmb3Igb3RoZXJzLCB5b3UgY2FuIGNvbXBpbGUgd2l0aAorICBPTkxZX01TUEFDRVMgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UuLi4KKyAgICBzdGF0aWMgbXNwYWNlIG15bXNwYWNlID0gY3JlYXRlX21zcGFjZSgwLDApOyAvLyBmb3IgZXhhbXBsZQorICAgICNkZWZpbmUgbXltYWxsb2MoYnl0ZXMpICBtc3BhY2VfbWFsbG9jKG15bXNwYWNlLCBieXRlcykKKworICAoTm90ZTogSWYgeW91IG9ubHkgbmVlZCBvbmUgaW5zdGFuY2Ugb2YgYW4gbXNwYWNlLCB5b3UgY2FuIGluc3RlYWQKKyAgdXNlICJVU0VfRExfUFJFRklYIiB0byByZWxhYmVsIHRoZSBnbG9iYWwgbWFsbG9jLikKKworICBZb3UgY2FuIHNpbWlsYXJseSBjcmVhdGUgdGhyZWFkLWxvY2FsIGFsbG9jYXRvcnMgYnkgc3RvcmluZworICBtc3BhY2VzIGFzIHRocmVhZC1sb2NhbHMuIEZvciBleGFtcGxlOgorICAgIHN0YXRpYyBfX3RocmVhZCBtc3BhY2UgdGxtcyA9IDA7CisgICAgdm9pZCogIHRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgICAgaWYgKHRsbXMgPT0gMCkgdGxtcyA9IGNyZWF0ZV9tc3BhY2UoMCwgMCk7CisgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyh0bG1zLCBieXRlcyk7CisgICAgfQorICAgIHZvaWQgIHRsZnJlZSh2b2lkKiBtZW0pIHsgbXNwYWNlX2ZyZWUodGxtcywgbWVtKTsgfQorCisgIFVubGVzcyBGT09URVJTIGlzIGRlZmluZWQsIGVhY2ggbXNwYWNlIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCisgIFlvdSBjYW5ub3QgYWxsb2NhdGUgZnJvbSBvbmUgYW5kIGZyZWUgdG8gYW5vdGhlciAoYWx0aG91Z2gKKyAgY29uZm9ybWFuY2UgaXMgb25seSB3ZWFrbHkgY2hlY2tlZCwgc28gdXNhZ2UgZXJyb3JzIGFyZSBub3QgYWx3YXlzCisgIGNhdWdodCkuIElmIEZPT1RFUlMgaXMgZGVmaW5lZCwgdGhlbiBlYWNoIGNodW5rIGNhcnJpZXMgYXJvdW5kIGEgdGFnCisgIGluZGljYXRpbmcgaXRzIG9yaWdpbmF0aW5nIG1zcGFjZSwgYW5kIGZyZWVzIGFyZSBkaXJlY3RlZCB0byB0aGVpcgorICBvcmlnaW5hdGluZyBzcGFjZXMuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDb21waWxlLXRpbWUgb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgY2FyZWZ1bCBpbiBzZXR0aW5nICNkZWZpbmUgdmFsdWVzIGZvciBudW1lcmljYWwgY29uc3RhbnRzIG9mIHR5cGUKK3NpemVfdC4gT24gc29tZSBzeXN0ZW1zLCBsaXRlcmFsIHZhbHVlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQKK3RvIHNpemVfdCBwcmVjaXNpb24gdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgY2FzdGVkLgorCitXSU4zMiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBpZiBfV0lOMzIgZGVmaW5lZAorICBEZWZpbmluZyBXSU4zMiBzZXRzIHVwIGRlZmF1bHRzIGZvciBNUyBlbnZpcm9ubWVudCBhbmQgY29tcGlsZXJzLgorICBPdGhlcndpc2UgZGVmYXVsdHMgYXJlIGZvciB1bml4LgorCitNQUxMT0NfQUxJR05NRU5UICAgICAgICAgZGVmYXVsdDogKHNpemVfdCk4CisgIENvbnRyb2xzIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgbWFsbG9jJ2VkIGNodW5rcy4gIEl0IG11c3QgYmUgYQorICBwb3dlciBvZiB0d28gYW5kIGF0IGxlYXN0IDgsIGV2ZW4gb24gbWFjaGluZXMgZm9yIHdoaWNoIHNtYWxsZXIKKyAgYWxpZ25tZW50cyB3b3VsZCBzdWZmaWNlLiBJdCBtYXkgYmUgZGVmaW5lZCBhcyBsYXJnZXIgdGhhbiB0aGlzCisgIHRob3VnaC4gTm90ZSBob3dldmVyIHRoYXQgY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBvcHRpbWl6ZWQgZm9yCisgIHRoZSBjYXNlIG9mIDgtYnl0ZSBhbGlnbm1lbnQuCisKK01TUEFDRVMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgY29tcGlsZSBpbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudCBhbGxvY2F0aW9uIHNwYWNlcy4KKyAgVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBpZiBIQVZFX01NQVAgaXMgdHJ1ZS4KKworT05MWV9NU1BBQ0VTICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBvbmx5IGNvbXBpbGUgaW4gbXNwYWNlIHZlcnNpb25zLCBub3QgcmVndWxhciB2ZXJzaW9ucy4KKworVVNFX0xPQ0tTICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBDYXVzZXMgZWFjaCBjYWxsIHRvIGVhY2ggcHVibGljIHJvdXRpbmUgdG8gYmUgc3Vycm91bmRlZCB3aXRoCisgIHB0aHJlYWQgb3IgV0lOMzIgbXV0ZXggbG9jay91bmxvY2suIChJZiBzZXQgdHJ1ZSwgdGhpcyBjYW4gYmUKKyAgb3ZlcnJpZGRlbiBvbiBhIHBlci1tc3BhY2UgYmFzaXMgZm9yIG1zcGFjZSB2ZXJzaW9ucy4pCisKK0ZPT1RFUlMgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIHByb3ZpZGUgZXh0cmEgY2hlY2tpbmcgYW5kIGRpc3BhdGNoaW5nIGJ5IHBsYWNpbmcKKyAgaW5mb3JtYXRpb24gaW4gdGhlIGZvb3RlcnMgb2YgYWxsb2NhdGVkIGNodW5rcy4gVGhpcyBhZGRzCisgIHNwYWNlIGFuZCB0aW1lIG92ZXJoZWFkLgorCitJTlNFQ1VSRSAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBvbWl0IGNoZWNrcyBmb3IgdXNhZ2UgZXJyb3JzIGFuZCBoZWFwIHNwYWNlIG92ZXJ3cml0ZXMuCisKK1VTRV9ETF9QUkVGSVggICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBDYXVzZXMgY29tcGlsZXIgdG8gcHJlZml4IGFsbCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCisgIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBvbmx5IHdhbnQgdG8gdXNlIHRoaXMgbWFsbG9jIGluIG9uZSBwYXJ0CisgIG9mIGEgcHJvZ3JhbSwgdXNpbmcgeW91ciByZWd1bGFyIHN5c3RlbSBtYWxsb2MgZWxzZXdoZXJlLgorCitBQk9SVCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyBhYm9ydCgpCisgIERlZmluZXMgaG93IHRvIGFib3J0IG9uIGZhaWxlZCBjaGVja3MuICBPbiBtb3N0IHN5c3RlbXMsIGEgZmFpbGVkCisgIGNoZWNrIGNhbm5vdCBkaWUgd2l0aCBhbiAiYXNzZXJ0IiBvciBldmVuIHByaW50IGFuIGluZm9ybWF0aXZlCisgIG1lc3NhZ2UsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgcHJpbnQgcm91dGluZXMgaW4gdHVybiBjYWxsIG1hbGxvYywKKyAgd2hpY2ggd2lsbCBmYWlsIGFnYWluLiAgR2VuZXJhbGx5LCB0aGUgYmVzdCBwb2xpY3kgaXMgdG8gc2ltcGx5IGNhbGwKKyAgYWJvcnQoKS4gSXQncyBub3QgdmVyeSB1c2VmdWwgdG8gZG8gbW9yZSB0aGFuIHRoaXMgYmVjYXVzZSBtYW55CisgIGVycm9ycyBkdWUgdG8gb3ZlcndyaXRpbmcgd2lsbCBzaG93IHVwIGFzIGFkZHJlc3MgZmF1bHRzIChudWxsLCBvZGQKKyAgYWRkcmVzc2VzIGV0YykgcmF0aGVyIHRoYW4gbWFsbG9jLXRyaWdnZXJlZCBjaGVja3MsIHNvIHdpbGwgYWxzbworICBhYm9ydC4gIEFsc28sIG1vc3QgY29tcGlsZXJzIGtub3cgdGhhdCBhYm9ydCgpIGRvZXMgbm90IHJldHVybiwgc28KKyAgY2FuIGJldHRlciBvcHRpbWl6ZSBjb2RlIGNvbmRpdGlvbmFsbHkgY2FsbGluZyBpdC4KKworUFJPQ0VFRF9PTl9FUlJPUiAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBhcyAwIChmYWxzZSkKKyAgQ29udHJvbHMgd2hldGhlciBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzIGNhdXNlIHRoZW0gdG8gYnlwYXNzZWQKKyAgcmF0aGVyIHRoYW4gYWJvcnRpbmcuIElmIHNldCwgZGV0ZWN0ZWQgYmFkIGFyZ3VtZW50cyB0byBmcmVlIGFuZAorICByZWFsbG9jIGFyZSBpZ25vcmVkLiBBbmQgYWxsIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uIGlzIHplcm9lZCBvdXQKKyAgdXBvbiBhIGRldGVjdGVkIG92ZXJ3cml0ZSBvZiBmcmVlZCBoZWFwIHNwYWNlLCB0aHVzIGxvc2luZyB0aGUKKyAgYWJpbGl0eSB0byBldmVyIHJldHVybiBpdCBmcm9tIG1hbGxvYyBhZ2FpbiwgYnV0IGVuYWJsaW5nIHRoZQorICBhcHBsaWNhdGlvbiB0byBwcm9jZWVkLiBJZiBQUk9DRUVEX09OX0VSUk9SIGlzIGRlZmluZWQsIHRoZQorICBzdGF0aWMgdmFyaWFibGUgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQgaXMgY29tcGlsZWQgaW4KKyAgYW5kIGNhbiBiZSBleGFtaW5lZCB0byBzZWUgaWYgZXJyb3JzIGhhdmUgb2NjdXJyZWQuIFRoaXMgb3B0aW9uCisgIGdlbmVyYXRlcyBzbG93ZXIgY29kZSB0aGFuIHRoZSBkZWZhdWx0IGFib3J0IHBvbGljeS4KKworREVCVUcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRoZSBERUJVRyBzZXR0aW5nIGlzIG1haW5seSBpbnRlbmRlZCBmb3IgcGVvcGxlIHRyeWluZyB0byBtb2RpZnkKKyAgdGhpcyBjb2RlIG9yIGRpYWdub3NlIHByb2JsZW1zIHdoZW4gcG9ydGluZyB0byBuZXcgcGxhdGZvcm1zLgorICBIb3dldmVyLCBpdCBtYXkgYWxzbyBiZSBhYmxlIHRvIGJldHRlciBpc29sYXRlIHVzZXIgZXJyb3JzIHRoYW4ganVzdAorICB1c2luZyBydW50aW1lIGNoZWNrcy4gIFRoZSBhc3NlcnRpb25zIGluIHRoZSBjaGVjayByb3V0aW5lcyBzcGVsbAorICBvdXQgaW4gbW9yZSBkZXRhaWwgdGhlIGFzc3VtcHRpb25zIGFuZCBpbnZhcmlhbnRzIHVuZGVybHlpbmcgdGhlCisgIGFsZ29yaXRobXMuICBUaGUgY2hlY2tpbmcgaXMgZmFpcmx5IGV4dGVuc2l2ZSwgYW5kIHdpbGwgc2xvdyBkb3duCisgIGV4ZWN1dGlvbiBub3RpY2VhYmx5LiBDYWxsaW5nIG1hbGxvY19zdGF0cyBvciBtYWxsaW5mbyB3aXRoIERFQlVHCisgIHNldCB3aWxsIGF0dGVtcHQgdG8gY2hlY2sgZXZlcnkgbm9uLW1tYXBwZWQgYWxsb2NhdGVkIGFuZCBmcmVlIGNodW5rCisgIGluIHRoZSBjb3Vyc2Ugb2YgY29tcHV0aW5nIHRoZSBzdW1tYXJpZXMuCisKK0FCT1JUX09OX0FTU0VSVF9GQUlMVVJFICAgZGVmYXVsdDogZGVmaW5lZCBhcyAxICh0cnVlKQorICBEZWJ1Z2dpbmcgYXNzZXJ0aW9uIGZhaWx1cmVzIGNhbiBiZSBuZWFybHkgaW1wb3NzaWJsZSBpZiB5b3VyCisgIHZlcnNpb24gb2YgdGhlIGFzc2VydCBtYWNybyBjYXVzZXMgbWFsbG9jIHRvIGJlIGNhbGxlZCwgd2hpY2ggd2lsbAorICBsZWFkIHRvIGEgY2FzY2FkZSBvZiBmdXJ0aGVyIGZhaWx1cmVzLCBibG93aW5nIHRoZSBydW50aW1lIHN0YWNrLgorICBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSBjYXVzZSBhc3NlcnRpb25zIGZhaWx1cmVzIHRvIGNhbGwgYWJvcnQoKSwKKyAgd2hpY2ggd2lsbCB1c3VhbGx5IG1ha2UgZGVidWdnaW5nIGVhc2llci4KKworTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICAgICBkZWZhdWx0OiBzZXRzIGVycm5vIHRvIEVOT01FTSwgb3Igbm8tb3Agb24gd2luMzIKKyAgVGhlIGFjdGlvbiB0byB0YWtlIGJlZm9yZSAicmV0dXJuIDAiIHdoZW4gbWFsbG9jIGZhaWxzIHRvIGJlIGFibGUgdG8KKyAgcmV0dXJuIG1lbW9yeSBiZWNhdXNlIHRoZXJlIGlzIG5vbmUgYXZhaWxhYmxlLgorCitIQVZFX01PUkVDT1JFICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIHVubGVzcyB3aW4zMiBvciBPTkxZX01TUEFDRVMKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBzYnJrIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4KKworTU9SRUNPUkUgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBzYnJrCisgIFRoZSBuYW1lIG9mIHRoZSBzYnJrLXN0eWxlIHN5c3RlbSByb3V0aW5lIHRvIGNhbGwgdG8gb2J0YWluIG1vcmUKKyAgbWVtb3J5LiAgU2VlIGJlbG93IGZvciBndWlkYW5jZSBvbiB3cml0aW5nIGN1c3RvbSBNT1JFQ09SRQorICBmdW5jdGlvbnMuIFRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudCB0byBzYnJrL01PUkVDT1JFIHZhcmllcyBhY3Jvc3MKKyAgc3lzdGVtcy4gIEl0IGNhbm5vdCBiZSBzaXplX3QsIGJlY2F1c2UgaXQgc3VwcG9ydHMgbmVnYXRpdmUKKyAgYXJndW1lbnRzLCBzbyBpdCBpcyBub3JtYWxseSB0aGUgc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgc2l6ZV90IChzb21ldGltZXMgZGVjbGFyZWQgYXMgImludHB0cl90IikuICBJdCBkb2Vzbid0IG11Y2ggbWF0dGVyCisgIHRob3VnaC4gSW50ZXJuYWxseSwgd2Ugb25seSBjYWxsIGl0IHdpdGggYXJndW1lbnRzIGxlc3MgdGhhbiBoYWxmCisgIHRoZSBtYXggdmFsdWUgb2YgYSBzaXplX3QsIHdoaWNoIHNob3VsZCB3b3JrIGFjcm9zcyBhbGwgcmVhc29uYWJsZQorICBwb3NzaWJpbGl0aWVzLCBhbHRob3VnaCBzb21ldGltZXMgZ2VuZXJhdGluZyBjb21waWxlciB3YXJuaW5ncy4gIFNlZQorICBuZWFyIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciBndWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbQorICB2ZXJzaW9uIG9mIE1PUkVDT1JFLgorCitNT1JFQ09SRV9DT05USUdVT1VTICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpCisgIElmIHRydWUsIHRha2UgYWR2YW50YWdlIG9mIGZhY3QgdGhhdCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRQorICB3aXRoIHBvc2l0aXZlIGFyZ3VtZW50cyBhbHdheXMgcmV0dXJuIGNvbnRpZ3VvdXMgaW5jcmVhc2luZworICBhZGRyZXNzZXMuICBUaGlzIGlzIHRydWUgb2YgdW5peCBzYnJrLiBJdCBkb2VzIG5vdCBodXJ0IHRvbyBtdWNoIHRvCisgIHNldCBpdCB0cnVlIGFueXdheSwgc2luY2UgbWFsbG9jIGNvcGVzIHdpdGggbm9uLWNvbnRpZ3VpdGllcy4KKyAgU2V0dGluZyBpdCBmYWxzZSB3aGVuIGRlZmluaXRlbHkgbm9uLWNvbnRpZ3VvdXMgc2F2ZXMgdGltZQorICBhbmQgcG9zc2libHkgd2FzdGVkIHNwYWNlIGl0IHdvdWxkIHRha2UgdG8gZGlzY292ZXIgdGhpcyB0aG91Z2guCisKK01PUkVDT1JFX0NBTk5PVF9UUklNICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVHJ1ZSBpZiBNT1JFQ09SRSBjYW5ub3QgcmVsZWFzZSBzcGFjZSBiYWNrIHRvIHRoZSBzeXN0ZW0gd2hlbiBnaXZlbgorICBuZWdhdGl2ZSBhcmd1bWVudHMuIFRoaXMgaXMgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBvbmx5IGlmIHlvdSBhcmUKKyAgdXNpbmcgYSBoYW5kLWNyYWZ0ZWQgTU9SRUNPUkUgZnVuY3Rpb24gdGhhdCBjYW5ub3QgaGFuZGxlIG5lZ2F0aXZlCisgIGFyZ3VtZW50cy4KKworSEFWRV9NTUFQICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIG1tYXAgb3IgYW4gZW11bGF0aW9uIG9mIGl0LiAgSWYgc28sIGFuZAorICBIQVZFX01PUkVDT1JFIGlzIG5vdCB0cnVlLCBNTUFQIGlzIHVzZWQgZm9yIGFsbCBzeXN0ZW0KKyAgYWxsb2NhdGlvbi4gSWYgc2V0IGFuZCBIQVZFX01PUkVDT1JFIGlzIHRydWUgYXMgd2VsbCwgTU1BUCBpcworICBwcmltYXJpbHkgdXNlZCB0byBkaXJlY3RseSBhbGxvY2F0ZSB2ZXJ5IGxhcmdlIGJsb2Nrcy4gSXQgaXMgYWxzbworICB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdoZXJlIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUKKyAgc3BhY2UgZnJvbSBzeXN0ZW0uIE5vdGU6IEEgc2luZ2xlIGNhbGwgdG8gTVVOTUFQIGlzIGFzc3VtZWQgdG8gYmUKKyAgYWJsZSB0byB1bm1hcCBtZW1vcnkgdGhhdCBtYXkgaGF2ZSBiZSBhbGxvY2F0ZWQgdXNpbmcgbXVsdGlwbGUgY2FsbHMKKyAgdG8gTU1BUCwgc28gbG9uZyBhcyB0aGV5IGFyZSBhZGphY2VudC4KKworSEFWRV9NUkVNQVAgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIGxpbnV4LCBlbHNlIDAKKyAgSWYgdHJ1ZSByZWFsbG9jKCkgdXNlcyBtcmVtYXAoKSB0byByZS1hbGxvY2F0ZSBsYXJnZSBibG9ja3MgYW5kCisgIGV4dGVuZCBvciBzaHJpbmsgYWxsb2NhdGlvbiBzcGFjZXMuCisKK01NQVBfQ0xFQVJTICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiB1bml4CisgIFRydWUgaWYgbW1hcCBjbGVhcnMgbWVtb3J5IHNvIGNhbGxvYyBkb2Vzbid0IG5lZWQgdG8uIFRoaXMgaXMgdHJ1ZQorICBmb3Igc3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVyby4KKworVVNFX0JVSUxUSU5fRkZTICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIHRoZSBidWlsdGluIGZmcygpIGZ1bmN0aW9uIHRvIGNvbXB1dGUgaW5kaWNlcy4KKyAgU29tZSBjb21waWxlcnMgbWF5IHJlY29nbml6ZSBhbmQgaW50cmluc2lmeSBmZnMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlCisgIHN1cHBsaWVkIEMgdmVyc2lvbi4gQWxzbywgdGhlIGNhc2Ugb2YgeDg2IHVzaW5nIGdjYyBpcyBzcGVjaWFsLWNhc2VkCisgIHRvIGFuIGFzbSBpbnN0cnVjdGlvbiwgc28gaXMgYWxyZWFkeSBhcyBmYXN0IGFzIGl0IGNhbiBiZSwgYW5kIHNvCisgIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LiAoT24gbW9zdCB4ODZzLCB0aGUgYXNtIHZlcnNpb24gaXMgb25seQorICBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uLikKKworbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVmYXVsdDogZGVyaXZlIGZyb20gc3lzdGVtIGluY2x1ZGVzLCBvciA0MDk2LgorICBUaGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcworICBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4gIFRoaXMgbWF5IGJlIChhbmQKKyAgdXN1YWxseSBpcykgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGlzIGlzIGlnbm9yZWQKKyAgaWYgV0lOMzIsIHdoZXJlIHBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIGdldFN5c3RlbUluZm8gZHVyaW5nCisgIGluaXRpYWxpemF0aW9uLgorCitVU0VfREVWX1JBTkRPTSAgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgL2Rldi9yYW5kb20gdG8gaW5pdGlhbGl6ZSBzZWN1cmUgbWFnaWMgc2VlZCBmb3IKKyAgc3RhbXBpbmcgZm9vdGVycy4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuCisKK05PX01BTExJTkZPICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgZGVmaW5lZCwgZG9uJ3QgY29tcGlsZSAibWFsbGluZm8iLiBUaGlzIGNhbiBiZSBhIHNpbXBsZSB3YXkKKyAgb2YgZGVhbGluZyB3aXRoIG1pc21hdGNoZXMgYmV0d2VlbiBzeXN0ZW0gZGVjbGFyYXRpb25zIGFuZAorICB0aG9zZSBpbiB0aGlzIGZpbGUuCisKK01BTExJTkZPX0ZJRUxEX1RZUEUgICAgICAgIGRlZmF1bHQ6IHNpemVfdAorICBUaGUgdHlwZSBvZiB0aGUgZmllbGRzIGluIHRoZSBtYWxsaW5mbyBzdHJ1Y3QuIFRoaXMgd2FzIG9yaWdpbmFsbHkKKyAgZGVmaW5lZCBhcyAiaW50IiBpbiBTVklEIGV0YywgYnV0IGlzIG1vcmUgdXNlZnVsbHkgZGVmaW5lZCBhcworICBzaXplX3QuIFRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgaWYgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgbm90IHNldAorCitSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgICAgZGVmYXVsdDogbm90IGRlZmluZWQKKyAgVGhpcyBzaG91bGQgYmUgc2V0IGlmIGEgY2FsbCB0byByZWFsbG9jIHdpdGggemVybyBieXRlcyBzaG91bGQgCisgIGJlIHRoZSBzYW1lIGFzIGEgY2FsbCB0byBmcmVlLiBTb21lIHBlb3BsZSB0aGluayBpdCBzaG91bGQuIE90aGVyd2lzZSwgCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzIAorICByZWFsbG9jKHAsIDApLgorCitMQUNLU19VTklTVERfSCwgTEFDS1NfRkNOVExfSCwgTEFDS1NfU1lTX1BBUkFNX0gsIExBQ0tTX1NZU19NTUFOX0gKK0xBQ0tTX1NUUklOR1NfSCwgTEFDS1NfU1RSSU5HX0gsIExBQ0tTX1NZU19UWVBFU19ILCAgTEFDS1NfRVJSTk9fSAorTEFDS1NfU1RETElCX0ggICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQgdW5sZXNzIG9uIFdJTjMyCisgIERlZmluZSB0aGVzZSBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZXNlIGhlYWRlciBmaWxlcy4KKyAgWW91IG1pZ2h0IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHByb3ZpZGUuCisKK0RFRkFVTFRfR1JBTlVMQVJJVFkgICAgICAgIGRlZmF1bHQ6IHBhZ2Ugc2l6ZSBpZiBNT1JFQ09SRV9DT05USUdVT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSBpbiBXSU4zMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIDY0Sy4KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQorICBUaGUgdW5pdCBmb3IgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uICBPbgorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8KKyAgZWl0aGVyIHJlcXVpcmUgb3IgZW5jb3VyYWdlIGxhcmdlciBncmFudWxhcml0aWVzLiAgWW91IGNhbiBpbmNyZWFzZQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbworICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgIHBhZ2UgYW5kIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBTZXR0aW5nIHRvIDAgY2F1c2VzIGluaXRpYWxpemF0aW9uCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMKKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkCisgICJUT1BfUEFEIikKKworREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUIKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX1RSSU1fVEhSRVNIT0xELCB4KQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkKKyAgdXNlZnVsIGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMgdXNpbmcgY29udGlndW91cyBNT1JFQ09SRS4gIEJlY2F1c2UKKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlCisgIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2ggZW5vdWdoIHNvIHRoYXQgeW91cgorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gKKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQorICBhdmVyYWdlIHNpemUgb2YgYSBwcm9jZXNzIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQorICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlIGFsbG9jYXRlZAorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcworICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQorICB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdC4gIFRvCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaworICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0CisgIHByb2dyYW0gc3RhcnR1cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbSBtZW1vcnksIGRvZXNuJ3QKKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkKKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgorCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQorICBUaGUgcmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgTU1BUCB0byBkaXJlY3RseSBzZXJ2aWNlIGEKKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZAorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoCisgIG5vcm1hbCBmcmVlZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKSAgVXNpbmcgbW1hcAorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdAorICBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueSBvdGhlciByZXF1ZXN0IChhdCBsZWFzdAorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUKKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcworICB0aGUgYmVuZWZpdHMgdGhhdDogTW1hcHBlZCBzcGFjZSBjYW4gYWx3YXlzIGJlIGluZGl2aWR1YWxseSByZWxlYXNlZAorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcworICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lCisgIGBsb2NrZWQnIGJldHdlZW4gb3RoZXIgY2h1bmtzLCBhcyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QKKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UKKyAgY2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbiB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIKKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcAorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlCisgIHZhbHVlIG9mICJsYXJnZSIgbWF5IHZhcnkgYWNyb3NzIHN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyBhbgorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4KKworKi8KKworI2lmbmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgIC8qIF9XSU4zMiAqLworI2VuZGlmICAvKiBXSU4zMiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZGVmaW5lIEhBVkVfTU1BUCAxCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBMQUNLU19VTklTVERfSAorI2RlZmluZSBMQUNLU19TWVNfUEFSQU1fSAorI2RlZmluZSBMQUNLU19TWVNfTU1BTl9ICisjZGVmaW5lIExBQ0tTX1NUUklOR19ICisjZGVmaW5lIExBQ0tTX1NUUklOR1NfSAorI2RlZmluZSBMQUNLU19TWVNfVFlQRVNfSAorI2RlZmluZSBMQUNLU19FUlJOT19ICisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNTUFQX0NMRUFSUyAwIC8qIFdJTkNFIGFuZCBzb21lIG90aGVycyBhcHBhcmVudGx5IGRvbid0IGNsZWFyICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjZW5kaWYgIC8qIERBUldJTiAqLworCisjaWZuZGVmIExBQ0tTX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAvKiBGb3Igc2l6ZV90ICovCisjZW5kaWYgIC8qIExBQ0tTX1NZU19UWVBFU19IICovCisKKy8qIFRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemVfdCB2YWx1ZSBoYXMgYWxsIGJpdHMgc2V0ICovCisjZGVmaW5lIE1BWF9TSVpFX1QgICAgICAgICAgICh+KHNpemVfdCkwKQorCisjaWZuZGVmIE9OTFlfTVNQQUNFUworI2RlZmluZSBPTkxZX01TUEFDRVMgMAorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZm5kZWYgTVNQQUNFUworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBNU1BBQ0VTIDEKKyNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCisjZGVmaW5lIE1TUEFDRVMgMAorI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KKyNlbmRpZiAgLyogTVNQQUNFUyAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpOFUpCisjZW5kaWYgIC8qIE1BTExPQ19BTElHTk1FTlQgKi8KKyNpZm5kZWYgRk9PVEVSUworI2RlZmluZSBGT09URVJTIDAKKyNlbmRpZiAgLyogRk9PVEVSUyAqLworI2lmbmRlZiBBQk9SVAorI2RlZmluZSBBQk9SVCAgYWJvcnQoKQorI2VuZGlmICAvKiBBQk9SVCAqLworI2lmbmRlZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAxCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaWZuZGVmIFBST0NFRURfT05fRVJST1IKKyNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwCisjZW5kaWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8KKyNpZm5kZWYgVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLUyAwCisjZW5kaWYgIC8qIFVTRV9MT0NLUyAqLworI2lmbmRlZiBJTlNFQ1VSRQorI2RlZmluZSBJTlNFQ1VSRSAwCisjZW5kaWYgIC8qIElOU0VDVVJFICovCisjaWZuZGVmIEhBVkVfTU1BUAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLworI2lmbmRlZiBIQVZFX01SRU1BUAorI2lmZGVmIGxpbnV4CisjZGVmaW5lIEhBVkVfTVJFTUFQIDEKKyNlbHNlICAgLyogbGludXggKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorI2VuZGlmICAvKiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsKKyNlbmRpZiAgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZiAhSEFWRV9NT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkUgc2JyaworI2VuZGlmICAvKiBNT1JFQ09SRSAqLworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyNlbHNlICAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9HUkFOVUxBUklUWSAqLworI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEwMjRVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTI1NlUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBIQVZFX01NQVAgKi8KKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmICAvKiBERUZBVUxUX01NQVBfVEhSRVNIT0xEICovCisjaWZuZGVmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMAorI2VuZGlmICAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNpZm5kZWYgVVNFX0RFVl9SQU5ET00KKyNkZWZpbmUgVVNFX0RFVl9SQU5ET00gMAorI2VuZGlmICAvKiBVU0VfREVWX1JBTkRPTSAqLworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYgIC8qIE5PX01BTExJTkZPICovCisjaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUKKyNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QKKyNlbmRpZiAgLyogTUFMTElORk9fRklFTERfVFlQRSAqLworCisvKgorICBtYWxsb3B0IHR1bmluZyBvcHRpb25zLiAgU1ZJRC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlcgorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzCisgIG1hbGxvYyBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorKi8KKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbworICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4KKyAgZGVjbGFyYXRpb24gbmVlZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZCAoYnktY29weSkKKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQKKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUKKyAgYXJlIGluc3RlYWQgZmlsbGVkIGJ5IG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YKKyAgaW50ZXJlc3QuCisKKyAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlvdSBoYXZlIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzCisgIGRlY2xhcmVkIGJlbG93LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yIG1hbGxpbmZvKCkgdG8KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdAorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzCisgIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3VyIHN5c3RlbSBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCisqLworCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCisjZWxzZSAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisKK3N0cnVjdCBtYWxsaW5mbyB7CisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CisKKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERlY2xhcmF0aW9ucyBvZiBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKKyNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlCisjZGVmaW5lIGRsbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCisjZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCisjZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jCisjZGVmaW5lIGRscHZhbGxvYyAgICAgICAgICAgICAgcHZhbGxvYworI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisjZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAorI2RlZmluZSBkbG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCisjZGVmaW5lIGRsbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisjZGVmaW5lIGRsbWFsbG9jX3VzYWJsZV9zaXplICAgbWFsbG9jX3VzYWJsZV9zaXplCisjZGVmaW5lIGRsbWFsbG9jX2Zvb3RwcmludCAgICAgbWFsbG9jX2Zvb3RwcmludAorI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50CisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKKyNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCisKKworLyoKKyAgbWFsbG9jKHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBvcgorICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNCisgIG9uIEFOU0kgQyBzeXN0ZW1zLgorCisgIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0KKyAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdAorICBzeXN0ZW1zLikgIE5vdGUgdGhhdCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMgd2l0aAorICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzCisgIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlCisgIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4gZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlzIGluIGFsbAorICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4KKyovCit2b2lkKiBkbG1hbGxvYyhzaXplX3QpOworCisvKgorICBmcmVlKHZvaWQqIHApCisgIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKKyAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCisgIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQorICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KKyovCit2b2lkICBkbGZyZWUodm9pZCopOworCisvKgorICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMKKyAgc2V0IHRvIHplcm8uCisqLwordm9pZCogZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOworCisvKgorICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQorICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNpemUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKKyAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKKyAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLgorCisgIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0KKyAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdAorICBlbXBsb3lzIHRoZSBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4KKworICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuCisKKyAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24KKyAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgorCisgIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKKyAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplCisgIGFyZ3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCisKKyAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsKKyAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQuCisqLworCit2b2lkKiBkbHJlYWxsb2Modm9pZCosIHNpemVfdCk7CisKKy8qCisgIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZAorICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50LgorCisgIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMKKyAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuCisgIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBub3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAorICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KKworICBPdmVycmVsaWFuY2Ugb24gbWVtYWxpZ24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KKyovCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCisgIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KKyovCit2b2lkKiBkbHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQorICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQorICAwLiAgU1ZJRC9YUEcvQU5TSSBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKKyAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywKKyAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCisgIG9wdGlvbnMgaW4gbWFsbG9wdC4gU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgQnJpZWZseSwgc3VwcG9ydGVkCisgIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3MgKGxpc3RlZCBkZWZhdWx0cyBhcmUgZm9yICJ0eXBpY2FsIgorICBjb25maWd1cmF0aW9ucykuCisKKyAgU3ltYm9sICAgICAgICAgICAgcGFyYW0gIyAgZGVmYXVsdCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcworICBNX1RSSU1fVEhSRVNIT0xEICAgICAtMSAgIDIqMTAyNCoxMDI0ICAgYW55ICAgKE1BWF9TSVpFX1QgZGlzYWJsZXMpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKworLyoKKyAgbWFsbG9jX2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHRvdGFsCisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzCisgIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQKKyAgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uCisgIEV2ZW4gaWYgbG9ja3MgYXJlIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLAorICBzbyByZXN1bHRzIG1pZ2h0IG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCk7CisKKy8qCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcworICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywKKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQKKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlCisgIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLCBzbyByZXN1bHRzIG1pZ2h0CisgIG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtYWxsaW5mbygpCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6CisKKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MKKyAgc21ibGtzOiAgICBhbHdheXMgemVyby4KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMKKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucworICB1c21ibGtzOiAgIHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisgICAgICAgICAgICAgICBiYWNrIHRvIHN5c3RlbSB2aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgaXQgaWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQorCisgIEJlY2F1c2UgdGhlc2UgZmllbGRzIGFyZSBpbnRzLCBidXQgaW50ZXJuYWwgYm9va2tlZXBpbmcgbWF5CisgIGJlIGtlcHQgYXMgbG9uZ3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kCisgIHRodXMgYmUgaW5hY2N1cmF0ZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhCisgIHNpbmdsZSBjbGVhcmVkIHNwYWNlLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG5fZWxlbWVudHMKKyAgaW5kZXBlbmRlbnQgZWxlbWVudHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaAorICBvZiB3aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwKKyAgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhZGphY2VudGx5CisgIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoIG11bHRpcGxlIGNhbGxvY3Mgb3IKKyAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkgaW4gc29tZQorICBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMKKyAgcHJvYmFibHkgdGhlIG1vc3QgdHlwaWNhbCB1c2FnZSkuIElmIGl0IGlzIG51bGwsIHRoZSByZXR1cm5lZCBhcnJheQorICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbyBiZSBmcmVlZCB3aGVuIGl0IGlzCisgIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0CisgIG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgcG9pbnRlcnMgdG8gdGhlCisgIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY2FsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgImNodW5rcyIKKyAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIHJlZ3VsYXIgY2FsbG9jIGFuZCBhc3NpZ24gcG9pbnRlcnMgaW50byB0aGlzCisgIHNwYWNlIHRvIHJlcHJlc2VudCBlbGVtZW50cy4gIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UgY2Fubm90CisgIGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5kIHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywKKyAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHNvbWUgb2YgdGhlIG5vZGVzCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsKKworICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsKKyAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7CisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsKKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKKyAgICBwb29sID0gKHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUpLCAwKTsKKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsKKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4KKyAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOworICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkKKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07CisgICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5vdCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQorICAgIHJldHVybiBmaXJzdDsKKyAgfQorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCoqKTsKKworLyoKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQgb25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cworICBjaHVua3Mgd2l0aCBzaXplcyBpbmRpY2F0ZWQgaW4gdGhlICJzaXplcyIgYXJyYXkuICAgIEl0IHJldHVybnMKKyAgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlCisgIGluZGVwZW5kZW50bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8KKyAgYmUgYWRqYWNlbnRseSBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aAorICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5CisgIGluIHNvbWUgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBpcyBudWxsCisgIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbworICBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheQorICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKKyAgcG9pbnRlcnMgdG8gdGhlIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMKKyAgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIGEgc2luZ2xlIHJlZ3VsYXIgbWFsbG9jLCBhbmQgYXNzaWduIHBvaW50ZXJzIGF0CisgIHBhcnRpY3VsYXIgb2Zmc2V0cyBpbiB0aGUgYWdncmVnYXRlIHNwYWNlLiAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91CisgIGNhbm5vdCBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NvbWFsbGFjIGRpZmZlcnMgZnJvbSBpbmRlcGVuZGVudF9jYWxsb2MgaW4gdGhhdCBlYWNoCisgIGVsZW1lbnQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdAorICBhdXRvbWF0aWNhbGx5IGNsZWFyIGVsZW1lbnRzLgorCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMKKyAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9yIG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQorICBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgSGVhZCB7IC4uLiB9CisgIHN0cnVjdCBGb290IHsgLi4uIH0KKworICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsKKyAgICBpbnQgbXNnbGVuID0gc3RybGVuKG1zZyk7CisgICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQpLCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsKKyAgICB2b2lkKiBjaHVua3NbM107CisgICAgaWYgKGluZGVwZW5kZW50X2NvbWFsbG9jKDMsIHNpemVzLCBjaHVua3MpID09IDApCisgICAgICBkaWUoKTsKKyAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1swXSk7CisgICAgY2hhciogICAgICAgIGJvZHkgPSAoY2hhciopKGNodW5rc1sxXSk7CisgICAgc3RydWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOworICAgIC8vIC4uLgorICB9CisKKyAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRoIHVzaW5nIG9ubHkgZm9yCisgIGxhcmdlciB2YWx1ZXMgb2Ygbl9lbGVtZW50cy4gRm9yIHNtYWxsIHZhbHVlcywgeW91IHByb2JhYmx5IHdvbid0CisgIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBmcm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLgorCisgIE92ZXJ1c2Ugb2YgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGluY3JlYXNlIG92ZXJhbGwgbWVtb3J5IHVzYWdlLAorICBzaW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3MgdGhhdAorICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLgorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90Kiwgdm9pZCoqKTsKKworCisvKgorICBwdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikpLCB0aGF0IGlzLAorICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCisgKi8KK3ZvaWQqICBkbHB2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7CisKKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9yeSBhdCB0aGUgYGhpZ2gnIGVuZCBvZiB0aGUgbWFsbG9jCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcKKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkKKyAgcmVxdWlyZW1lbnRzIG9mIGEgcHJvZ3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UKKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YKKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQorICBnaXZlbiBiYWNrIHRvIHRoZSBzeXN0ZW0uCisKKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCisgIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLCBvbmx5CisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gKKyAgdHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZSBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCisKKyAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KKyovCitpbnQgIGRsbWFsbG9jX3RyaW0oc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOworCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCisgIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgorICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgorCisgIHAgPSBtYWxsb2Mobik7CisgIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKKyovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOworCisvKgorICBtYWxsb2Nfc3RhdHMoKTsKKyAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAorICB2aWEgc2JyayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgorICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKKyAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCisgIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKKyAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCisgIGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdyZWF0ZXIgdGhhbgorICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLgorCisgIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKKyAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLgorCisgIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgorICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgorKi8KK3ZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOworCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV9tYWxsb2MgYmVoYXZlcyBhcyBtYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKTsKKworLyoKKyAgbXNwYWNlX2ZyZWUgYmVoYXZlcyBhcyBmcmVlLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9mcmVlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQuCisgIGZyZWUgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9mcmVlIGJlY2F1c2UgZnJlZWQgY2h1bmtzIGZyb20KKyAgYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHNwYWNlcy4KKyovCit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSk7CisKKy8qCisgIG1zcGFjZV9yZWFsbG9jIGJlaGF2ZXMgYXMgcmVhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfcmVhbGxvYyBpcyBub3QgYWN0dWFsbHkKKyAgbmVlZGVkLiAgcmVhbGxvYyBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX3JlYWxsb2MgYmVjYXVzZQorICByZWFsbG9jZWQgY2h1bmtzIGZyb20gYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nCisgIHNwYWNlcy4KKyovCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBtZW0sIHNpemVfdCBuZXdzaXplKTsKKworLyoKKyAgbXNwYWNlX2NhbGxvYyBiZWhhdmVzIGFzIGNhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7CisKKy8qCisgIG1zcGFjZV9tZW1hbGlnbiBiZWhhdmVzIGFzIG1lbWFsaWduLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NhbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzCisgIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX3RyaW0gYmVoYXZlcyBhcyBtYWxsb2NfdHJpbSwgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpOworCisvKgorICBBbiBhbGlhcyBmb3IgbWFsbG9wdC4KKyovCitpbnQgbXNwYWNlX21hbGxvcHQoaW50LCBpbnQpOworCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK307ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKy8qCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBUbyBtYWtlIGEgZnVsbHkgY3VzdG9taXphYmxlIG1hbGxvYy5oIGhlYWRlciBmaWxlLCBjdXQgZXZlcnl0aGluZworICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVkaXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0CisgIG9uIHRoZSBuZXh0IGxpbmUsIGFzIHdlbGwgYXMgaW4gcHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBtYWxsb2MuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworLyogI2luY2x1ZGUgIm1hbGxvYy5oIiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcm5hbCAjaW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxNDYgKSAvKiBubyAidW5zaWduZWQiIHdhcm5pbmdzICovCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KKworI2lmbmRlZiBMQUNLU19FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KKyNpZiBGT09URVJTCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogRk9PVEVSUyAqLworI2lmbmRlZiBMQUNLU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCisjZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KKyNpZmRlZiBERUJVRworI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERFQlVHICovCisjZGVmaW5lIGFzc2VydCh4KQorI2VuZGlmIC8qIERFQlVHICovCisjaWZuZGVmIExBQ0tTX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8KKyNpZiBVU0VfQlVJTFRJTl9GRlMKKyNpZm5kZWYgTEFDS1NfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLworI2VuZGlmIC8qIExBQ0tTX1NUUklOR1NfSCAqLworI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmIEhBVkVfTU1BUAorI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICisjaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8KKyNlbmRpZiAvKiBMQUNLU19TWVNfTU1BTl9IICovCisjaWZuZGVmIExBQ0tTX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNpZiBIQVZFX01PUkVDT1JFCisjaWZuZGVmIExBQ0tTX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3Igc2JyayAqLworI2Vsc2UgLyogTEFDS1NfVU5JU1REX0ggKi8KKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pCitleHRlcm4gdm9pZCogICAgIHNicmsocHRyZGlmZl90KTsKKyNlbmRpZiAvKiBGcmVlQlNEIGV0YyAqLworI2VuZGlmIC8qIExBQ0tTX1VOSVNURF9IICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfU0NfUEFHRV9TSVpFCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOworIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLworIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgICAgZWxzZQorIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgICAgICAgZW5kaWYKKyMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCisjICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKKyMgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZW5kaWYKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIHNpemVfdCBhbmQgYWxpZ25tZW50IHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGJ5dGUgYW5kIGJpdCBzaXplIG9mIGEgc2l6ZV90ICovCisjZGVmaW5lIFNJWkVfVF9TSVpFICAgICAgICAgKHNpemVvZihzaXplX3QpKQorI2RlZmluZSBTSVpFX1RfQklUU0laRSAgICAgIChzaXplb2Yoc2l6ZV90KSA8PCAzKQorCisvKiBTb21lIGNvbnN0YW50cyBjb2VyY2VkIHRvIHNpemVfdCAqLworLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGFmdG9ybXMgKi8KKyNkZWZpbmUgU0laRV9UX1pFUk8gICAgICAgICAoKHNpemVfdCkwKQorI2RlZmluZSBTSVpFX1RfT05FICAgICAgICAgICgoc2l6ZV90KTEpCisjZGVmaW5lIFNJWkVfVF9UV08gICAgICAgICAgKChzaXplX3QpMikKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgIUhBVkVfTU1BUAorI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX1pFUk8pCisjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgIChTSVpFX1RfWkVSTykKKyNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgTUZBSUwKKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgKC0xKQorI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICBNRkFJTAorCisjZWxzZSAvKiBIQVZFX01NQVAgKi8KKyNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgIChTSVpFX1RfT05FKQorCisjaWZuZGVmIFdJTjMyCisjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCAtMSwgMCkKKyNlbHNlIC8qIE1BUF9BTk9OWU1PVVMgKi8KKy8qCisgICBOZWFybHkgYWxsIHZlcnNpb25zIG9mIG1tYXAgc3VwcG9ydCBNQVBfQU5PTllNT1VTLCBzbyB0aGUgZm9sbG93aW5nCisgICBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQsIGJ1dCBpcyBzdXBwbGllZCBqdXN0IGluIGNhc2UuCisqLworI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEUpCitzdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7IC8qIENhY2hlZCBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvemVyby4gKi8KKyNkZWZpbmUgQ0FMTF9NTUFQKHMpICgoZGV2X3plcm9fZmQgPCAwKSA/IFwKKyAgICAgICAgICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAorICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKSA6IFwKKyAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkKKyNlbmRpZiAvKiBNQVBfQU5PTllNT1VTICovCisKKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgQ0FMTF9NTUFQKHMpCisjZWxzZSAvKiBXSU4zMiAqLworCisvKiBXaW4zMiBNTUFQIHZpYSBWaXJ0dWFsQWxsb2MgKi8KK3N0YXRpYyB2b2lkKiB3aW4zMm1tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVQsIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9FWEVDVVRFX1JFQURXUklURSk7CisgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNlZCBzZWdtZW50cyAqLworc3RhdGljIGludCB3aW4zMm11bm1hcCh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisgIE1FTU9SWV9CQVNJQ19JTkZPUk1BVElPTiBtaW5mbzsKKyAgY2hhciogY3B0ciA9IHB0cjsKKyAgd2hpbGUgKHNpemUpIHsKKyAgICBpZiAoVmlydHVhbFF1ZXJ5KGNwdHIsICZtaW5mbywgc2l6ZW9mKG1pbmZvKSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobWluZm8uQmFzZUFkZHJlc3MgIT0gY3B0ciB8fCBtaW5mby5BbGxvY2F0aW9uQmFzZSAhPSBjcHRyIHx8CisgICAgICAgIG1pbmZvLlN0YXRlICE9IE1FTV9DT01NSVQgfHwgbWluZm8uUmVnaW9uU2l6ZSA+IHNpemUpCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFZpcnR1YWxGcmVlKGNwdHIsIDAsIE1FTV9SRUxFQVNFKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGNwdHIgKz0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgICBzaXplIC09IG1pbmZvLlJlZ2lvblNpemU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgd2luMzJtbWFwKHMpCisjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgIHdpbjMybXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICB3aW4zMmRpcmVjdF9tbWFwKHMpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUAorI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIG1yZW1hcCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyNlbHNlICAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKyNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBNRkFJTAorI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworCisjaWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICBNT1JFQ09SRShTKQorI2Vsc2UgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCisKKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworI2RlZmluZSBVU0VfTk9OQ09OVElHVU9VU19CSVQgKDRVKQorCisvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8KKyNkZWZpbmUgRVhURVJOX0JJVCAgICAgICAgICAgICg4VSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9jayBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgVVNFX0xPQ0tTCisKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGFyZSB1cCB0byB0d28gZ2xvYmFsIGxvY2tzOgorCisgICogSWYgSEFWRV9NT1JFQ09SRSwgbW9yZWNvcmVfbXV0ZXggcHJvdGVjdHMgc2VxdWVuY2VzIG9mIGNhbGxzIHRvCisgICAgTU9SRUNPUkUuICBJbiBtYW55IGNhc2VzIHN5c19hbGxvYyByZXF1aXJlcyB0d28gY2FsbHMsIHRoYXQgc2hvdWxkCisgICAgbm90IGJlIGludGVybGVhdmVkIHdpdGggY2FsbHMgYnkgb3RoZXIgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QKKyAgICBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFIGJ5IG90aGVyIHRocmVhZHMgbm90CisgICAgdXNpbmcgdGhpcyBsb2NrLCBzbyB0aGVyZSBpcyBzdGlsbCBjb2RlIHRvIGNvcGUgdGhlIGJlc3Qgd2UgY2FuIG9uCisgICAgaW50ZXJmZXJlbmNlLgorCisgICogbWFnaWNfaW5pdF9tdXRleCBlbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIKKyAgICB1bmlxdWUgbXBhcmFtcyB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KKyovCisKKyNpZm5kZWYgV0lOMzIKKy8qIEJ5IGRlZmF1bHQgdXNlIHBvc2l4IGxvY2tzICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2RlZmluZSBNTE9DS19UIHB0aHJlYWRfbXV0ZXhfdAorI2RlZmluZSBJTklUSUFMX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X2luaXQobCwgTlVMTCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF9sb2NrKGwpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKGwpCisKKyNpZiBIQVZFX01PUkVDT1JFCitzdGF0aWMgTUxPQ0tfVCBtb3JlY29yZV9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCitzdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworI2Vsc2UgLyogV0lOMzIgKi8KKy8qCisgICBCZWNhdXNlIGxvY2stcHJvdGVjdGVkIHJlZ2lvbnMgaGF2ZSBib3VuZGVkIHRpbWVzLCBhbmQgdGhlcmUKKyAgIGFyZSBubyByZWN1cnNpdmUgbG9jayBjYWxscywgd2UgY2FuIHVzZSBzaW1wbGUgc3BpbmxvY2tzLgorKi8KKworI2RlZmluZSBNTE9DS19UIGxvbmcKK3N0YXRpYyBpbnQgd2luMzJfYWNxdWlyZV9sb2NrIChNTE9DS19UICpzbCkgeworICBmb3IgKDs7KSB7CisjaWZkZWYgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2VQb2ludGVyCisgICAgaWYgKCFJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZShzbCwgMSwgMCkpCisgICAgICByZXR1cm4gMDsKKyNlbHNlICAvKiBVc2Ugb2xkZXIgdm9pZCogdmVyc2lvbiAqLworICAgIGlmICghSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKHZvaWQqKilzbCwgKHZvaWQqKTEsICh2b2lkKikwKSkKKyAgICAgIHJldHVybiAwOworI2VuZGlmIC8qIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlciAqLworICAgIFNsZWVwICgwKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCB3aW4zMl9yZWxlYXNlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIEludGVybG9ja2VkRXhjaGFuZ2UgKHNsLCAwKTsKK30KKworI2RlZmluZSBJTklUSUFMX0xPQ0sobCkgICAgICAqKGwpPTAKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKGwpICAgICAgd2luMzJfYWNxdWlyZV9sb2NrKGwpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhsKSAgICAgIHdpbjMyX3JlbGVhc2VfbG9jayhsKQorI2lmIEhBVkVfTU9SRUNPUkUKK3N0YXRpYyBNTE9DS19UIG1vcmVjb3JlX211dGV4OworI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KK3N0YXRpYyBNTE9DS19UIG1hZ2ljX2luaXRfbXV0ZXg7CisjZW5kaWYgLyogV0lOMzIgKi8KKworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMlUpCisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKSAgICBBQ1FVSVJFX0xPQ0soJm1vcmVjb3JlX211dGV4KTsKKyNkZWZpbmUgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCkgICAgUkVMRUFTRV9MT0NLKCZtb3JlY29yZV9tdXRleCk7CisjZWxzZSAvKiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRSAqLworI2RlZmluZSBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKQorI2RlZmluZSBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAmJiBIQVZFX01PUkVDT1JFICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgQUNRVUlSRV9NQUdJQ19JTklUX0xPQ0soKSAgQUNRVUlSRV9MT0NLKCZtYWdpY19pbml0X211dGV4KTsKKyNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKSAgUkVMRUFTRV9MT0NLKCZtYWdpY19pbml0X211dGV4KTsKKyNlbHNlICAvKiBVU0VfTE9DS1MgKi8KKyNkZWZpbmUgQUNRVUlSRV9NQUdJQ19JTklUX0xPQ0soKQorI2RlZmluZSBSRUxFQVNFX01BR0lDX0lOSVRfTE9DSygpCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikKKworICBUaGUgbWFsbG9jX2NodW5rIGRlY2xhcmF0aW9uIGJlbG93IGlzIG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQKKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bworICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuCisKKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcworICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uCisgIGZ0cDovL2Z0cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhIHN1cnZleSBvZiBzdWNoCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZgorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQKKyAgY2h1bmtzIGludG8gYmlnZ2VyIGNodW5rcyBmYXN0LiAgVGhlIGhlYWQgZmllbGRzIGFsc28gaG9sZCBiaXRzCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuCisKKyAgSGVyZSBhcmUgc29tZSBwaWN0dXJlcyB0byBtYWtlIGl0IGNsZWFyZXIuICBUaGV5IGFyZSAiZXhwbG9kZWQiIHRvCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUKKyAgcHJldl9mb290IGFuZCBQSU5VU0VfQklUIGJpdCBvZiB0aGUgZm9sbG93aW5nIGNodW5rIGhlYWRlci4KKworICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToKKworICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHNpemVfdCkgYXZhaWxhYmxlIHBheWxvYWQgYnl0ZXMgICAgICAgICAgLSsKKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtYXkgb3IgbWF5IG5vdCBiZSBpbiB1c2UpICAgICAgICAgICAgICAgfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgQW5kIGlmIGl0J3MgZnJlZSwgaXQgbG9va3MgbGlrZSB0aGlzOgorCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICAgIHwgVXNlciBwYXlsb2FkIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQhKSAgICAgICB8CisgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8IFByZXYgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICArLSAgICAgIHNpemUgLSBzaXplb2Yoc3RydWN0IGNodW5rKSB1bnVzZWQgYnl0ZXMgICAgICAgICAgICAgICAtKworICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDB8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCl8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICArLSBVc2VyIHBheWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwwfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0rCisgIE5vdGUgdGhhdCBzaW5jZSB3ZSBhbHdheXMgbWVyZ2UgYWRqYWNlbnQgZnJlZSBjaHVua3MsIHRoZSBjaHVua3MKKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLgorCisgIEdpdmVuIGEgcG9pbnRlciB0byBhIGNodW5rICh3aGljaCBjYW4gYmUgZGVyaXZlZCB0cml2aWFsbHkgZnJvbSB0aGUKKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQKKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQorICBhcmUgb24gYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY3VycmVudCBjaHVuay4KKworICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24KKyAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICBUaGUgUCAoUElOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRoZQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCisgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZworICBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9yeS4gSWYgcGludXNlIGlzIHNldCBmb3IKKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbgorICB0cnlpbmcgdG8gZG8gc28uCisKKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YKKyAgdGhlIGNodW5rIHNpemUgcmVkdW5kYW50bHkgcmVjb3JkcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNodW5rIGlzCisgIGludXNlLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZSBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsCisgIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZyBhbmQgY29uc29saWRhdGluZyBjaHVua3MuCisKKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuCisgIFRoYXQgaXMsIGVhY2ggYWxsb2NhdGVkIGNodW5rIGJvcmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcworICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55CisgIGZvdW5kIGNodW5rLiAgRnVydGhlciwgbm8gZnJlZSBjaHVuayBwaHlzaWNhbGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsCisgIHNvIGVhY2ggZnJlZSBjaHVuayBpcyBrbm93biB0byBiZSBwcmVjZWRlZCBhbmQgZm9sbG93ZWQgYnkgZWl0aGVyCisgIGludXNlIGNodW5rcyBvciB0aGUgZW5kcyBvZiBtZW1vcnkuCisKKyAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQgY2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKKyAgYXMgdGhlIHByZXZfZm9vdCBvZiB0aGUgTkVYVCBjaHVuay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8KKyAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4gYmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcKKyAgdG8gZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KKworICBUaGUgZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKKworICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBpcyB0aGUgdG9wLW1vc3QgYXZhaWxhYmxlIGNodW5rIChpLmUuLAorICAgICAgICB0aGUgb25lIGJvcmRlcmluZyB0aGUgZW5kIG9mIGF2YWlsYWJsZSBtZW1vcnkpLiBJdCBpcyB0cmVhdGVkCisgICAgICAgIHNwZWNpYWxseS4gIFRvcCBpcyBuZXZlciBpbmNsdWRlZCBpbiBhbnkgYmluLCBpcyB1c2VkIG9ubHkgaWYKKyAgICAgICAgbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUKKyAgICAgICAgc3lzdGVtIGlmIGl0IGlzIHZlcnkgbGFyZ2UgKHNlZSBNX1RSSU1fVEhSRVNIT0xEKS4gIEluIGVmZmVjdCwKKyAgICAgICAgdGhlIHRvcCBjaHVuayBpcyB0cmVhdGVkIGFzIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsCisgICAgICAgIGZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZSBjaHVuay4gIFRoZSB0b3AgY2h1bmsKKyAgICAgICAgZG9lc24ndCB1cGRhdGUgaXRzIHRyYWlsaW5nIHNpemUgZmllbGQgc2luY2UgdGhlcmUgaXMgbm8gbmV4dAorICAgICAgICBjb250aWd1b3VzIGNodW5rIHRoYXQgd291bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIEhvd2V2ZXIsCisgICAgICAgIHNwYWNlIGlzIHN0aWxsIGFsbG9jYXRlZCBmb3IgaXQgKFRPUF9GT09UX1NJWkUpIHRvIGVuYWJsZQorICAgICAgICBzZXBhcmF0aW9uIG9yIG1lcmdpbmcgd2hlbiBzcGFjZSBpcyBleHRlbmRlZC4KKworICAgICAzLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFwLCB3aGljaCBoYXZlIHRoZSBsb3dlc3Qtb3JkZXIgYml0CisgICAgICAgIChJU19NTUFQUEVEX0JJVCkgc2V0IGluIHRoZWlyIHByZXZfZm9vdCBmaWVsZHMsIGFuZCBkbyBub3Qgc2V0CisgICAgICAgIFBJTlVTRV9CSVQgaW4gdGhlaXIgaGVhZCBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlIGFsbG9jYXRlZAorICAgICAgICBvbmUtYnktb25lLCBlYWNoIG11c3QgY2FycnkgaXRzIG93biBwcmV2X2Zvb3QgZmllbGQsIHdoaWNoIGlzCisgICAgICAgIGFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkCisgICAgICAgIHJlZ2lvbiwgd2hpY2ggaXMgbmVlZGVkIHRvIHByZXNlcnZlIGFsaWdubWVudC4gRWFjaCBtbWFwcGVkCisgICAgICAgIGNodW5rIGlzIHRyYWlsZWQgYnkgdGhlIGZpcnN0IHR3byBmaWVsZHMgb2YgYSBmYWtlIG5leHQtY2h1bmsKKyAgICAgICAgZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLgorCisqLworCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2h1bmtzIHNpemVzIGFuZCBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpCisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKworLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLworI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQorLyogLi4uIGFuZCBhZGRpdGlvbmFsIHBhZGRpbmcgZm9yIGZha2UgbmV4dC1jaHVuayBhdCBmb290ICovCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQorCisvKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLworI2RlZmluZSBNSU5fQ0hVTktfU0laRVwKKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLworI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gVFdPX1NJWkVfVF9TSVpFUykpCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkKKworLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpCisjZGVmaW5lIE1JTl9SRVFVRVNUICAgICAgICAgKE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQgLSBTSVpFX1RfT05FKQorCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8KKyNkZWZpbmUgcGFkX3JlcXVlc3QocmVxKSBcCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBwYWQgcmVxdWVzdCwgY2hlY2tpbmcgZm9yIG1pbmltdW0gKGJ1dCBub3QgbWF4aW11bSkgKi8KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXAorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cworICBhZGphY2VudCBjaHVuayBpbiB1c2UsIGFuZCBvcidlZCB3aXRoIENJTlVTRV9CSVQgaWYgdGhpcyBjaHVuayBpcyBpbgorICB1c2UuIElmIHRoZSBjaHVuayB3YXMgb2J0YWluZWQgd2l0aCBtbWFwLCB0aGUgcHJldl9mb290IGZpZWxkIGhhcworICBJU19NTUFQUEVEX0JJVCBzZXQsIG90aGVyd2lzZSBob2xkaW5nIHRoZSBvZmZzZXQgb2YgdGhlIGJhc2Ugb2YgdGhlCisgIG1tYXBwZWQgcmVnaW9uIHRvIHRoZSBiYXNlIG9mIHRoZSBjaHVuay4KKyovCisKKyNkZWZpbmUgUElOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykKKyNkZWZpbmUgSU5VU0VfQklUUyAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUKQorCisvKiBIZWFkIHZhbHVlIGZvciBmZW5jZXBvc3RzICovCisjZGVmaW5lIEZFTkNFUE9TVF9IRUFEICAgICAgKElOVVNFX0JJVFN8U0laRV9UX1NJWkUpCisKKy8qIGV4dHJhY3Rpb24gb2YgZmllbGRzIGZyb20gaGVhZCB3b3JkcyAqLworI2RlZmluZSBjaW51c2UocCkgICAgICAgICAgICgocCktPmhlYWQgJiBDSU5VU0VfQklUKQorI2RlZmluZSBwaW51c2UocCkgICAgICAgICAgICgocCktPmhlYWQgJiBQSU5VU0VfQklUKQorI2RlZmluZSBjaHVua3NpemUocCkgICAgICAgICgocCktPmhlYWQgJiB+KElOVVNFX0JJVFMpKQorCisjZGVmaW5lIGNsZWFyX3BpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+UElOVVNFX0JJVCkKKyNkZWZpbmUgY2xlYXJfY2ludXNlKHApICAgICAoKHApLT5oZWFkICY9IH5DSU5VU0VfQklUKQorCisvKiBUcmVhdCBzcGFjZSBhdCBwdHIgKy8tIG9mZnNldCBhcyBhIGNodW5rICovCisjZGVmaW5lIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHMpICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSkKKyNkZWZpbmUgY2h1bmtfbWludXNfb2Zmc2V0KHAsIHMpICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgLSAocykpKQorCisvKiBQdHIgdG8gbmV4dCBvciBwcmV2aW91cyBwaHlzaWNhbCBtYWxsb2NfY2h1bmsuICovCisjZGVmaW5lIG5leHRfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgKyAoKHApLT5oZWFkICYgfklOVVNFX0JJVFMpKSkKKyNkZWZpbmUgcHJldl9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSAtICgocCktPnByZXZfZm9vdCkgKSkKKworLyogZXh0cmFjdCBuZXh0IGNodW5rJ3MgcGludXNlIGJpdCAqLworI2RlZmluZSBuZXh0X3BpbnVzZShwKSAgKChuZXh0X2NodW5rKHApLT5oZWFkKSAmIFBJTlVTRV9CSVQpCisKKy8qIEdldC9zZXQgc2l6ZSBhdCBmb290ZXIgKi8KKyNkZWZpbmUgZ2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QpCisjZGVmaW5lIHNldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgYW5kIGZvb3QgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVCksIHNldF9mb290KHAsIHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgZm9vdCwgYW5kIGNsZWFyIG5leHQgcGludXNlICovCisjZGVmaW5lIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHMsIG4pXAorICAoY2xlYXJfcGludXNlKG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpCisKKyNkZWZpbmUgaXNfbW1hcHBlZChwKVwKKyAgKCEoKHApLT5oZWFkICYgUElOVVNFX0JJVCkgJiYgKChwKS0+cHJldl9mb290ICYgSVNfTU1BUFBFRF9CSVQpKQorCisvKiBHZXQgdGhlIGludGVybmFsIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBjaHVuayBwICovCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwKKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLworI2lmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1hcHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQorI2VuZGlmIC8qIE1NQVBfQ0xFQVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcgorICBsaXN0cyBvciB0cmVlcy4KKworICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaworICBsaWtlIHRoaXM6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBMYXJnZXIgY2h1bmtzIGFyZSBrZXB0IGluIGEgZm9ybSBvZiBiaXR3aXNlIGRpZ2l0YWwgdHJlZXMgKGFrYQorICB0cmllcykga2V5ZWQgb24gY2h1bmtzaXplcy4gIEJlY2F1c2UgbWFsbG9jX3RyZWVfY2h1bmtzIGFyZSBvbmx5IGZvcgorICBmcmVlIGNodW5rcyBncmVhdGVyIHRoYW4gMjU2IGJ5dGVzLCB0aGVpciBzaXplIGRvZXNuJ3QgaW1wb3NlIGFueQorICBjb25zdHJhaW50cyBvbiB1c2VyIGNodW5rIHNpemVzLiAgRWFjaCBub2RlIGxvb2tzIGxpa2U6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHJpZ2h0IGNoaWxkIChjaGlsZFsxXSkgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MKKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkKKyAgdGhlIG9sZGVzdCBjaHVuayAodGhlIG5leHQgdG8gYmUgdXNlZCwgaW4gb3VyIEZJRk8gb3JkZXJpbmcpCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFuIGFuIGV4aXN0aW5nIG5vZGUKKyAgaXMgaW5zZXJ0ZWQsIGl0IGlzIGxpbmtlZCBvZmYgdGhlIGV4aXN0aW5nIG5vZGUgdXNpbmcgcG9pbnRlcnMgdGhhdAorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuCisKKyAgRWFjaCB0cmVlIGNvbnRhaW5zIGEgcG93ZXIgb2YgMiBzaXplZCByYW5nZSBvZiBjaHVuayBzaXplcyAodGhlCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDAKKyAgPD0geCA8IDB4MTQwIGZvciB0aGUgdG9wIG5vc2UpIGluIHRoZSBsZWZ0IHN1YnRyZWUgYW5kIHRoZSBsYXJnZXIKKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwKKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4KKworICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoCisgIHN1YnRyZWUgaGFzIG5vIHBhcnRpY3VsYXIgb3JkZXJpbmcgcmVsYXRpb25zaGlwIHRvIGVpdGhlci4gIChUaGUKKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQorICB0cmVlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQgd2l0aCBhIGxlYWYgbm9kZS4gIFRoZSB0cmVlIG9yZGVyaW5nCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuCisKKyAgVGhlIHNtYWxsZXN0IGNodW5rIGluIGEgdHJlZSAoYSBjb21tb24gb3BlcmF0aW9uIGluIGEgYmVzdC1maXQKKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQKKyAgcG9pbnRlcnMgdW50aWwgd2UgcmVhY2ggYSBudWxsLCBoZXJlIHdlIGZvbGxvdyB0aGUgcmlnaHQgY2hpbGQKKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgKKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQorICBzb21ld2hlcmUgYWxvbmcgdGhhdCBwYXRoLgorCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMKKyAgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50aWF0aW5nIGNodW5rcyB3aXRoaW4KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjEKKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQorICBpcyBvZiBjb3Vyc2UgbXVjaCBiZXR0ZXIuCisqLworCitzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgeworICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovCisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290OworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAgdGNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRjaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovCisKKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGEKKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUKKyAgdG9wLW1vc3Qgc3BhY2UuIFNlZ21lbnRzIGFsc28gaW5jbHVkZSBmbGFncyBob2xkaW5nIHByb3BlcnRpZXMgb2YKKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdAorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZAorICBkZXN0cm95ZWQgd2l0aG91dCBvdGhlcndpc2Uga2VlcGluZyB0cmFjayBvZiB0aGVtLgorCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5CisgIE1NQVAuICBBbnkgY2FsbCB0byBNTUFQIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXR1cm4gbWVtb3J5IHRoYXQgaXMKKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsCisgIHdoaWNoIGlzIHNpbXBsZXIgYW5kIGZhc3RlciB0byBkZWFsIHdpdGguIChUaGlzIGlzIHdoeSBNT1JFQ09SRSBpcworICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUKKyAgaGludGluZyBtZWNoYW5pc21zIChpbmNvbnNpc3RlbnRseSkgc3VwcG9ydGVkIGluIHZhcmlvdXMKKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQKKyAgY29udGlndWl0eSB3aGVuIHdlIGdldCBpdC4gIEl0IGlzIHByb2JhYmx5IHBvc3NpYmxlIHRvIGRvCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMKKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuCisKKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcworICBub3JtYWxseSBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gSG93ZXZlciwKKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkKKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQKKyAgKG9jY3VycmluZyBvbmx5IHdoZW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFuZCB0aGF0IHdlCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoKKworICAqIFNlZ21lbnRzIGFyZSBub3QgaW5kZXhlZCwgc28gdHJhdmVyc2FsIHJlcXVpcmVzIGxpbmVhciBzY2Fucy4gIChJdAorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikKKyAgKiBOZXcgc2VnbWVudHMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gb2xkIG9uZXMgd2hlbiBob2xkaW5nIHRvcC1tb3N0CisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLgorCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nCisgIHNlZ21lbnQgcmVjb3JkcyBvbnRvIHRoZSBsaXN0IGhlYWRlZCBieSAmbXN0YXRlLnNlZyBmb3IgdGhlCisgIGNvbnRhaW5pbmcgbXN0YXRlLgorCisgIFNlZ21lbnQgZmxhZ3MgY29udHJvbCBhbGxvY2F0aW9uL21lcmdlL2RlYWxsb2NhdGlvbiBwb2xpY2llczoKKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwKKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4KKyAgICAoVGhpcyBjdXJyZW50bHkgaG9sZHMgb25seSBmb3IgdGhlIGluaXRpYWwgc2VnbWVudCBwYXNzZWQKKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikKKyAgKiBJZiBJU19NTUFQUEVEX0JJVCBzZXQsIHRoZSBzZWdtZW50IG1heSBiZSBtZXJnZWQgd2l0aAorICAgIG90aGVyIHN1cnJvdW5kaW5nIG1tYXBwZWQgc2VnbWVudHMgYW5kIHRyaW1tZWQvZGUtYWxsb2NhdGVkCisgICAgdXNpbmcgbXVubWFwLgorICAqIElmIG5laXRoZXIgYml0IGlzIHNldCwgdGhlbiB0aGUgc2VnbWVudCB3YXMgb2J0YWluZWQgdXNpbmcKKyAgICBNT1JFQ09SRSBzbyBjYW4gYmUgbWVyZ2VkIHdpdGggc3Vycm91bmRpbmcgTU9SRUNPUkUnZCBzZWdtZW50cworICAgIGFuZCBkZWFsbG9jYXRlZC90cmltbWVkIHVzaW5nIE1PUkVDT1JFIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzLgorKi8KKworc3RydWN0IG1hbGxvY19zZWdtZW50IHsKKyAgY2hhciogICAgICAgIGJhc2U7ICAgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyAqLworICBzaXplX3QgICAgICAgc2l6ZTsgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgKi8KKyAgc3RydWN0IG1hbGxvY19zZWdtZW50KiBuZXh0OyAgIC8qIHB0ciB0byBuZXh0IHNlZ21lbnQgKi8KKyNpZiBGRklfTU1BUF9FWEVDX1dSSVQKKyAgLyogVGhlIG1tYXAgbWFnaWMgaXMgc3VwcG9zZWQgdG8gc3RvcmUgdGhlIGFkZHJlc3Mgb2YgdGhlIGV4ZWN1dGFibGUKKyAgICAgc2VnbWVudCBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHJlcXVlc3RlZCBibG9jay4gICovCisKKyMgZGVmaW5lIG1tYXBfZXhlY19vZmZzZXQoYixzKSAoKihwdHJkaWZmX3QqKSgoYikrKHMpLXNpemVvZihwdHJkaWZmX3QpKSkKKworICAvKiBXZSBjYW4gb25seSBtZXJnZSBzZWdtZW50cyBpZiB0aGVpciBjb3JyZXNwb25kaW5nIGV4ZWN1dGFibGUKKyAgICAgc2VnbWVudHMgYXJlIGF0IGlkZW50aWNhbCBvZmZzZXRzLiAgKi8KKyMgZGVmaW5lIGNoZWNrX3NlZ21lbnRfbWVyZ2UoUyxiLHMpIFwKKyAgKG1tYXBfZXhlY19vZmZzZXQoKGIpLChzKSkgPT0gKFMpLT5leGVjX29mZnNldCkKKworIyBkZWZpbmUgYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQocCxTKSAoKGNoYXIqKShwKSArIChTKS0+ZXhlY19vZmZzZXQpCisjIGRlZmluZSBzdWJfc2VnbWVudF9leGVjX29mZnNldChwLFMpICgoY2hhciopKHApIC0gKFMpLT5leGVjX29mZnNldCkKKworICAvKiBUaGUgcmVtb3ZhbCBvZiBzZmxhZ3Mgb25seSB3b3JrcyB3aXRoIEhBVkVfTU9SRUNPUkUgPT0gMC4gICovCisKKyMgZGVmaW5lIGdldF9zZWdtZW50X2ZsYWdzKFMpICAgKElTX01NQVBQRURfQklUKQorIyBkZWZpbmUgc2V0X3NlZ21lbnRfZmxhZ3MoUyx2KSBcCisgICgoKHYpICE9IElTX01NQVBQRURfQklUKSA/IChBQk9SVCwgKHYpKSA6CQkJCVwKKyAgICgoKFMpLT5leGVjX29mZnNldCA9CQkJCQkJCVwKKyAgICAgbW1hcF9leGVjX29mZnNldCgoUyktPmJhc2UsIChTKS0+c2l6ZSkpLAkJCQlcCisgICAgKG1tYXBfZXhlY19vZmZzZXQoKFMpLT5iYXNlICsgKFMpLT5leGVjX29mZnNldCwgKFMpLT5zaXplKSAhPQlcCisgICAgIChTKS0+ZXhlY19vZmZzZXQpID8gKEFCT1JULCAodikpIDoJCQkJCVwKKyAgIChtbWFwX2V4ZWNfb2Zmc2V0KChTKS0+YmFzZSwgKFMpLT5zaXplKSA9IDApLCAodikpKQorCisgIC8qIFdlIHVzZSBhbiBvZmZzZXQgaGVyZSwgaW5zdGVhZCBvZiBhIHBvaW50ZXIsIGJlY2F1c2UgdGhlbiwgd2hlbgorICAgICBiYXNlIGNoYW5nZXMsIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5IHRoaXMuICBPbiBhcmNoaXRlY3R1cmVzCisgICAgIHdpdGggc2VnbWVudGVkIGFkZHJlc3NlcywgdGhpcyBtaWdodCBub3Qgd29yay4gICovCisgIHB0cmRpZmZfdCAgICBleGVjX29mZnNldDsKKyNlbHNlCisKKyMgZGVmaW5lIGdldF9zZWdtZW50X2ZsYWdzKFMpICAgKChTKS0+c2ZsYWdzKQorIyBkZWZpbmUgc2V0X3NlZ21lbnRfZmxhZ3MoUyx2KSAoKFMpLT5zZmxhZ3MgPSAodikpCisjIGRlZmluZSBjaGVja19zZWdtZW50X21lcmdlKFMsYixzKSAoMSkKKworICBmbGFnX3QgICAgICAgc2ZsYWdzOyAgICAgICAgICAgLyogbW1hcCBhbmQgZXh0ZXJuIGZsYWcgKi8KKyNlbmRpZgorfTsKKworI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgIChnZXRfc2VnbWVudF9mbGFncyhTKSAmIElTX01NQVBQRURfQklUKQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgIChnZXRfc2VnbWVudF9mbGFncyhTKSAmIEVYVEVSTl9CSVQpCisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuCisgICBUaGUgbWFpbiBmaWVsZHMgYXJlOgorCisgIFRvcAorICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzCisgICAgY2FjaGVkIGluIHRvcHNpemUuICBUaGUgYWN0dWFsIHNpemUgb2YgdG9wbW9zdCBzcGFjZSBpcworICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZworICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUKKyAgICBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSBhdCB3aGljaCB0byBhdXRvdHJpbSB0b3AgaXMKKyAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmCisgICAgYW4gYXV0b3RyaW0gZmFpbHMuCisKKyAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQorICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQKKyAgICBkb24ndCBoYXZlIGV4YWN0IGZpdHMuICBJdCBpcyBub3JtYWxseSB0aGUgY2h1bmsgc3BsaXQgb2ZmIG1vc3QKKyAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbgorICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0CisgICAgaXMgbm90IGtlcHQgaW4gYSBiaW4uCisKKyAgU21hbGxCaW5zCisgICAgQW4gYXJyYXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiAgVGhlc2UgYmlucyBob2xkIGNodW5rcworICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucworICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQorICAgIHVzZSBpbiBkb3VibGUtbGlua2VkIGxpc3RzLCBlYWNoIGJpbiBoZWFkZXIgYWN0cyBhcyBhIG1hbGxvY19jaHVuaworICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bworICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZAorICAgIHdhc3RlLCB3ZSBhbGxvY2F0ZSBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UKKyAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuCisKKyAgVHJlZUJpbnMKKyAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZgorICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28KKyAgICBmcm9tIFRSRUVfU0hJRlQgdG8gVFJFRV9TSElGVCsxNi4gVGhlIGxhc3QgYmluIGhvbGRzIGFueXRoaW5nCisgICAgbGFyZ2VyLgorCisgIEJpbiBtYXBzCisgICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yCisgICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kCisgICAgY2xlYXJzIHRoZSBiaXQgd2hlbiBlbXB0eS4gIEJpdCBvcGVyYXRpb25zIGFyZSB0aGVuIHVzZWQgdG8gYXZvaWQKKyAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyCisgICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMKKyAgICBjb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRiaXQgc3lzdGVtLgorICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZAorICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kCisgICAgc3VwcGxlbWVudCBhdCBodHRwOi8vaGFja2Vyc2RlbGlnaHQub3JnLykuIE1hbnkgb2YgdGhlc2UgYXJlCisgICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzCisgICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4KKworICBTZWdtZW50cworICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkCisgICAgcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHNwYWNlLgorCisgIEFkZHJlc3MgY2hlY2sgc3VwcG9ydAorICAgIFRoZSBsZWFzdF9hZGRyIGZpZWxkIGlzIHRoZSBsZWFzdCBhZGRyZXNzIGV2ZXIgb2J0YWluZWQgZnJvbQorICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcworICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLgorCisgIE1hZ2ljIHRhZworICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLgorCisgIEZsYWdzCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKKworICBTdGF0aXN0aWNzCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorKi8KKworLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCisjZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKKyNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQorCitzdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKKyAgYmlubWFwX3QgICBzbWFsbG1hcDsKKyAgYmlubWFwX3QgICB0cmVlbWFwOworICBzaXplX3QgICAgIGR2c2l6ZTsKKyAgc2l6ZV90ICAgICB0b3BzaXplOworICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7CisgIG1jaHVua3B0ciAgZHY7CisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7CisgIHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9vdHByaW50OworICBzaXplX3QgICAgIG1heF9mb290cHJpbnQ7CisgIGZsYWdfdCAgICAgbWZsYWdzOworI2lmIFVTRV9MT0NLUworICBNTE9DS19UICAgIG11dGV4OyAgICAgLyogbG9jYXRlIGxvY2sgYW1vbmcgZmllbGRzIHRoYXQgcmFyZWx5IGNoYW5nZSAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworICBtc2VnbWVudCAgIHNlZzsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zdGF0ZSogICAgbXN0YXRlOworCisvKiAtLS0tLS0tLS0tLS0tIEdsb2JhbCBtYWxsb2Nfc3RhdGUgYW5kIG1hbGxvY19wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBtYWxsb2NfcGFyYW1zIGhvbGRzIGdsb2JhbCBwcm9wZXJ0aWVzLCBpbmNsdWRpbmcgdGhvc2UgdGhhdCBjYW4gYmUKKyAgZHluYW1pY2FsbHkgc2V0IHVzaW5nIG1hbGxvcHQuIFRoZXJlIGlzIGEgc2luZ2xlIGluc3RhbmNlLCBtcGFyYW1zLAorICBpbml0aWFsaXplZCBpbiBpbml0X21wYXJhbXMuCisqLworCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsKKyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVfdCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisKKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFjZSIgY2FsbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3N0YXRlIF9nbV87CisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCisKKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorCisjZGVmaW5lIHNldF9sb2NrKE0sTClcCisgKChNKS0+bWZsYWdzID0gKEwpP1wKKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKKworLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwKKyAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQorCisvKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkpKSAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQorCisjZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCisjZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQorCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLworc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCisgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCisjZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKworLyoKKyAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldworICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KKyovCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCisgIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KKyAgYW55dGhpbmcgeW91IGxpa2UuCisqLworCisjaWYgVVNFX0xPQ0tTCisKKy8qIEVuc3VyZSBsb2NrcyBhcmUgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgR0xPQkFMTFlfSU5JVElBTElaRSgpIChtcGFyYW1zLnBhZ2Vfc2l6ZSA9PSAwICYmIGluaXRfbXBhcmFtcygpKQorCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKChHTE9CQUxMWV9JTklUSUFMSVpFKCkgfHwgdXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICEgREVCVUcKKworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQorCisjZWxzZSAvKiBERUJVRyAqLworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190b3BfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOworc3RhdGljIGludCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgaXNfc21hbGwocykgICAgICAgICAoKChzKSA+PiBTTUFMTEJJTl9TSElGVCkgPCBOU01BTExCSU5TKQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgICgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSSAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybCAlMSwlMFxuXHQiIDogIj1yIiAoSykgOiAicm0iICAoWCkpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgWSA9ICh1bnNpZ25lZCBpbnQpWDtcCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcCisgICAgTiArPSBLO1wKKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wKKyAgICBJID0gKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSk7XAorICB9XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKworLyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBhcyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwKKyAgICAoKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpIC0gKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikpKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovCisjZGVmaW5lIG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwKKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisKKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl9zbWFsbG1hcChNLGkpICAgICAoKE0pLT5zbWFsbG1hcCAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpCisKKyNkZWZpbmUgbWFya190cmVlbWFwKE0saSkgICAgICAgKChNKS0+dHJlZW1hcCAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkKKworLyogaW5kZXggY29ycmVzcG9uZGluZyB0byBnaXZlbiBiaXQgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfX2FzbV9fKCJic2ZsICUxLCUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbHNlIC8qIEdOVUMgKi8KKyNpZiAgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XAorICB1bnNpZ25lZCBpbnQgSyA9IFkgPj4gKDE2LTQpICYgMTY7XAorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDQtMikgJiAgNDsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcCisgIEkgPSAoYmluZGV4X3QpKE4gKyBZKTtcCit9CisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZW5kaWYgLyogR05VQyAqLworCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyAgaWYgKG1wYXJhbXMucGFnZV9zaXplID09IDApIHsKKyAgICBzaXplX3QgczsKKworICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOworICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOworI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVDsKKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVR8VVNFX05PTkNPTlRJR1VPVVNfQklUOworI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisgICAgICAgICAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAgICAgcyA9ICooKHNpemVfdCAqKSBidWYpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogVVNFX0RFVl9SQU5ET00gKi8KKyAgICAgICAgcyA9IChzaXplX3QpKHRpbWUoMCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKworICAgICAgcyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgcyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKworICAgIH0KKyNlbHNlIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBzID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgQUNRVUlSRV9NQUdJQ19JTklUX0xPQ0soKTsKKyAgICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgICBtcGFyYW1zLm1hZ2ljID0gczsKKyAgICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgICBJTklUSUFMX0xPQ0soJmdtLT5tdXRleCk7CisgICAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICB9CisgICAgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKTsKKworI2lmbmRlZiBXSU4zMgorICAgIG1wYXJhbXMucGFnZV9zaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogbXBhcmFtcy5wYWdlX3NpemUpOworI2Vsc2UgLyogV0lOMzIgKi8KKyAgICB7CisgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgICAgIG1wYXJhbXMucGFnZV9zaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisgICAgICAgIChNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fAorICAgICAgICAoc2l6ZW9mKGludCkgPCA0KSAgfHwKKyAgICAgICAgKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorICAgICAgICAoKE1BTExPQ19BTElHTk1FTlQgICAgJiAoTUFMTE9DX0FMSUdOTUVOVC1TSVpFX1RfT05FKSkgICAgIT0gMCkgfHwKKyAgICAgICAgKChNQ0hVTktfU0laRSAgICAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICAgICE9IDApIHx8CisgICAgICAgICgobXBhcmFtcy5ncmFudWxhcml0eSAmIChtcGFyYW1zLmdyYW51bGFyaXR5LVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorICAgICAgICAoKG1wYXJhbXMucGFnZV9zaXplICAgJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpICAgIT0gMCkpCisgICAgICBBQk9SVDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHNpemVfdCl2YWx1ZTsKKyAgaW5pdF9tcGFyYW1zKCk7CisgIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgorICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2UgTV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZiBERUJVRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBhbnkgY2h1bmssIHdoZXRoZXIgZnJlZSwgaW51c2UsIG1tYXBwZWQgZXRjICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIHRvcCBjaHVuayAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopcCk7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBzeik7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KCFjaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGNpbnVzZShuZXh0KSk7CisgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOworICAgICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKKyAgICB9CisgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8KKyAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7CisgIH0KK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3QgcykgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KHN6ID49IHMpOworICAgIC8qIHVubGVzcyBtbWFwcGVkLCBzaXplIGlzIGxlc3MgdGhhbiBNSU5fQ0hVTktfU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLworICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOworICB9Cit9CisKKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KSB7CisgIHRjaHVua3B0ciBoZWFkID0gMDsKKyAgdGNodW5rcHRyIHUgPSB0OworICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsKKyAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsKKyAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOworICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOworICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsKKyAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TLTEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCsxKSkpKTsKKworICBkbyB7IC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7CisgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh1KSA9PSB0c2l6ZSk7CisgICAgYXNzZXJ0KCFjaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorICAgICAgICAgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKyAgICAgICAgICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKyAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPT0geCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKyAgICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICAgIHNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworICAgICAgICB0Y2h1bmtwdHIgdSA9IHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgc3VtICs9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgaWYgKGNpbnVzZShxKSkgeworICAgICAgICAgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworICAgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsKKyAgICAgICAgICBhc3NlcnQobGFzdHEgPT0gMCB8fCBjaW51c2UobGFzdHEpKTsgLyogTm90IDIgY29uc2VjdXRpdmUgZnJlZSAqLworICAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgICAgICAgIH0KKyAgICAgICAgbGFzdHEgPSBxOworICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBzaXplX3QgbmZyZWUgPSBTSVpFX1RfT05FOyAvKiB0b3AgYWx3YXlzIGZyZWUgKi8KKyAgICAgIHNpemVfdCBtZnJlZSA9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgICAgc2l6ZV90IHN1bSA9IG1mcmVlOworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisgICAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgICAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOworICAgICAgICAgIHN1bSArPSBzejsKKyAgICAgICAgICBpZiAoIWNpbnVzZShxKSkgeworICAgICAgICAgICAgbWZyZWUgKz0gc3o7CisgICAgICAgICAgICArK25mcmVlOworICAgICAgICAgIH0KKyAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgICAgfQorICAgICAgICBzID0gcy0+bmV4dDsKKyAgICAgIH0KKworICAgICAgbm0uYXJlbmEgICAgPSBzdW07CisgICAgICBubS5vcmRibGtzICA9IG5mcmVlOworICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07CisgICAgICBubS51c21ibGtzICA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOworICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKKyAgICAgIG5tLmtlZXBjb3N0ID0gbS0+dG9wc2l6ZTsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9CisgIHJldHVybiBubTsKK30KKyNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8KKworc3RhdGljIHZvaWQgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zdGF0ZSBtKSB7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgc2l6ZV90IG1heGZwID0gMDsKKyAgICBzaXplX3QgZnAgPSAwOworICAgIHNpemVfdCB1c2VkID0gMDsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIG1heGZwID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIGZwID0gbS0+Zm9vdHByaW50OworICAgICAgdXNlZCA9IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsKKworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAgIGlmICghY2ludXNlKHEpKQorICAgICAgICAgICAgdXNlZCAtPSBjaHVua3NpemUocSk7CisgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHMtPm5leHQ7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShtYXhmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsKKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbgorICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsCisgIHBhdGhzLiAgVGhpcyBpcyB1Z2x5IGJ1dCByZWR1Y2VzIHJlbGlhbmNlIG9uIGlubGluaW5nIHN1cHBvcnQgb2YKKyAgY29tcGlsZXJzLgorKi8KKworLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLworI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgYmluZGV4X3QgSSAgPSBzbWFsbF9pbmRleChTKTtcCisgIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XAorICBtY2h1bmtwdHIgRiA9IEI7XAorICBhc3NlcnQoUyA+PSBNSU5fQ0hVTktfU0laRSk7XAorICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcCisgICAgbWFya19zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBCLT5mZCkpKVwKKyAgICBGID0gQi0+ZmQ7XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorICBCLT5mZCA9IFA7XAorICBGLT5iayA9IFA7XAorICBQLT5mZCA9IEY7XAorICBQLT5iayA9IEI7XAorfQorCisvKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4gICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisgICAgICAgICAgICAgICAgICAgKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEIpKSkpIHtcCisgICAgRi0+YmsgPSBCO1wKKyAgICBCLT5mZCA9IEY7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbiAqLworI2RlZmluZSB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoTSwgQiwgUCwgSSkge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEIgPT0gRilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgIEItPmZkID0gRjtcCisgICAgRi0+YmsgPSBCO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XAorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcCisgIH1cCisgIE0tPmR2c2l6ZSA9IFM7XAorICBNLT5kdiA9IFA7XAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XAorICB0YmlucHRyKiBIO1wKKyAgYmluZGV4X3QgSTtcCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcCisgIEggPSB0cmVlYmluX2F0KE0sIEkpO1wKKyAgWC0+aW5kZXggPSBJO1wKKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XAorICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7XAorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcCisgICAgKkggPSBYO1wKKyAgICBYLT5wYXJlbnQgPSAodGNodW5rcHRyKUg7XAorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciBUID0gKkg7XAorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XAorICAgIGZvciAoOzspIHtcCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcCisgICAgICAgIHRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcCisgICAgICAgIEsgPDw9IDE7XAorICAgICAgICBpZiAoKkMgIT0gMClcCisgICAgICAgICAgVCA9ICpDO1wKKyAgICAgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKyAgICAgICAgICAqQyA9IFg7XAorICAgICAgICAgIFgtPnBhcmVudCA9IFQ7XAorICAgICAgICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKyAgICAgICAgdGNodW5rcHRyIEYgPSBULT5mZDtcCisgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICAgICAgVC0+ZmQgPSBGLT5iayA9IFg7XAorICAgICAgICAgIFgtPmZkID0gRjtcCisgICAgICAgICAgWC0+YmsgPSBUO1wKKyAgICAgICAgICBYLT5wYXJlbnQgPSAwO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorKi8KKworI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wKKyAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wKKyAgdGNodW5rcHRyIFI7XAorICBpZiAoWC0+YmsgIT0gWCkge1wKKyAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wKKyAgICBSID0gWC0+Yms7XAorICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgRi0+YmsgPSBSO1wKKyAgICAgIFItPmZkID0gRjtcCisgICAgfVwKKyAgICBlbHNlIHtcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciogUlA7XAorICAgIGlmICgoKFIgPSAqKFJQID0gJihYLT5jaGlsZFsxXSkpKSAhPSAwKSB8fFwKKyAgICAgICAgKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMF0pKSkgIT0gMCkpIHtcCisgICAgICB0Y2h1bmtwdHIqIENQO1wKKyAgICAgIHdoaWxlICgoKihDUCA9ICYoUi0+Y2hpbGRbMV0pKSAhPSAwKSB8fFwKKyAgICAgICAgICAgICAoKihDUCA9ICYoUi0+Y2hpbGRbMF0pKSAhPSAwKSkge1wKKyAgICAgICAgUiA9ICooUlAgPSBDUCk7XAorICAgICAgfVwKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUlApKSlcCisgICAgICAgICpSUCA9IDA7XAorICAgICAgZWxzZSB7XAorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICB9XAorICAgIH1cCisgIH1cCisgIGlmIChYUCAhPSAwKSB7XAorICAgIHRiaW5wdHIqIEggPSB0cmVlYmluX2F0KE0sIFgtPmluZGV4KTtcCisgICAgaWYgKFggPT0gKkgpIHtcCisgICAgICBpZiAoKCpIID0gUikgPT0gMCkgXAorICAgICAgICBjbGVhcl90cmVlbWFwKE0sIFgtPmluZGV4KTtcCisgICAgfVwKKyAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgWFApKSkge1wKKyAgICAgIGlmIChYUC0+Y2hpbGRbMF0gPT0gWCkgXAorICAgICAgICBYUC0+Y2hpbGRbMF0gPSBSO1wKKyAgICAgIGVsc2UgXAorICAgICAgICBYUC0+Y2hpbGRbMV0gPSBSO1wKKyAgICB9XAorICAgIGVsc2VcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgaWYgKFIgIT0gMCkge1wKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgUikpKSB7XAorICAgICAgICB0Y2h1bmtwdHIgQzAsIEMxO1wKKyAgICAgICAgUi0+cGFyZW50ID0gWFA7XAorICAgICAgICBpZiAoKEMwID0gWC0+Y2hpbGRbMF0pICE9IDApIHtcCisgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMCkpKSB7XAorICAgICAgICAgICAgUi0+Y2hpbGRbMF0gPSBDMDtcCisgICAgICAgICAgICBDMC0+cGFyZW50ID0gUjtcCisgICAgICAgICAgfVwKKyAgICAgICAgICBlbHNlXAorICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICB9XAorICAgICAgICBpZiAoKEMxID0gWC0+Y2hpbGRbMV0pICE9IDApIHtcCisgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDMSkpKSB7XAorICAgICAgICAgICAgUi0+Y2hpbGRbMV0gPSBDMTtcCisgICAgICAgICAgICBDMS0+cGFyZW50ID0gUjtcCisgICAgICAgICAgfVwKKyAgICAgICAgICBlbHNlXAorICAgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICAgIGVsc2VcCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorfQorCisvKiBSZWxheXMgdG8gbGFyZ2UgdnMgc21hbGwgYmluIG9wZXJhdGlvbnMgKi8KKworI2RlZmluZSBpbnNlcnRfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IGluc2VydF9sYXJnZV9jaHVuayhNLCBUUCwgUyk7IH0KKworI2RlZmluZSB1bmxpbmtfY2h1bmsoTSwgUCwgUylcCisgIGlmIChpc19zbWFsbChTKSkgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpXAorICBlbHNlIHsgdGNodW5rcHRyIFRQID0gKHRjaHVua3B0cikoUCk7IHVubGlua19sYXJnZV9jaHVuayhNLCBUUCk7IH0KKworCisvKiBSZWxheXMgdG8gaW50ZXJuYWwgY2FsbHMgdG8gbWFsbG9jL2ZyZWUgZnJvbSByZWFsbG9jLCBtZW1hbGlnbiBldGMgKi8KKworI2lmIE9OTFlfTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogT05MWV9NU1BBQ0VTICovCisjaWYgTVNQQUNFUworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYilcCisgICAobSA9PSBnbSk/IGRsbWFsbG9jKGIpIDogbXNwYWNlX21hbGxvYyhtLCBiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogTVNQQUNFUyAqLworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pCisjZW5kaWYgLyogTVNQQUNFUyAqLworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRGlyZWN0LW1tYXBwaW5nIGNodW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBEaXJlY3RseSBtbWFwcGVkIGNodW5rcyBhcmUgc2V0IHVwIHdpdGggYW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsCisgIGFuZCBhbHNvIGFsbG93cyBhZGp1c3RtZW50IG9mIHRoZSByZXR1cm5lZCBjaHVuayB0byBtZWV0IGFsaWdubWVudAorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLiAgVGhlcmUgaXMgYWxzbyBlbm91Z2ggc3BhY2UKKyAgYWxsb2NhdGVkIHRvIGhvbGQgYSBmYWtlIG5leHQgY2h1bmsgb2Ygc2l6ZSBTSVpFX1RfU0laRSB0byBtYWludGFpbgorICB0aGUgUElOVVNFIGJpdCBzbyBmcmVlcyBjYW4gYmUgY2hlY2tlZC4KKyovCisKKy8qIE1hbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgdm9pZCogbW1hcF9hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBtbXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01GQUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLworICAgIHJldHVybiAwOworICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmCisgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkKKyAgICByZXR1cm4gb2xkcDsKKyAgZWxzZSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVDsKKyAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7CisgICAgc2l6ZV90IG5ld21tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0FMSUdOX01BU0spOworICAgIGNoYXIqIGNwID0gKGNoYXIqKUNBTExfTVJFTUFQKChjaGFyKilvbGRwIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgbS0+bGVhc3RfYWRkciA9IGNwOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXplIC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbGJpbnMgPSBtLT50cmVlYmlucyA9IDA7CisgIG0tPmR2c2l6ZSA9IG0tPnRvcHNpemUgPSAwOworICBtLT5zZWcuYmFzZSA9IDA7CisgIG0tPnNlZy5zaXplID0gMDsKKyAgbS0+c2VnLm5leHQgPSAwOworICBtLT50b3AgPSBtLT5kdiA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7CisgIGluaXRfYmlucyhtKTsKK30KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLworc3RhdGljIHZvaWQqIHByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIqIG5ld2Jhc2UsIGNoYXIqIG9sZGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmIpIHsKKyAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsKKyAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7CisgIHNpemVfdCBwc2l6ZSA9IChjaGFyKilvbGRmaXJzdCAtIChjaGFyKilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChjaGFyKilvbGRmaXJzdCA+IChjaGFyKilxKTsKKyAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOworICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworCisgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovCisgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApIHsKKyAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOworICAgIG0tPnRvcCA9IHE7CisgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICBjaGVja190b3BfY2h1bmsobSwgcSk7CisgIH0KKyAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpIHsKKyAgICBzaXplX3QgZHNpemUgPSBtLT5kdnNpemUgKz0gcXNpemU7CisgICAgbS0+ZHYgPSBxOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFjaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8KK3N0YXRpYyB2b2lkIGFkZF9zZWdtZW50KG1zdGF0ZSBtLCBjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1hcHBlZCkgeworICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovCisgIGNoYXIqIG9sZF90b3AgPSAoY2hhciopbS0+dG9wOworICBtc2VnbWVudHB0ciBvbGRzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCBvbGRfdG9wKTsKKyAgY2hhciogb2xkX2VuZCA9IG9sZHNwLT5iYXNlICsgb2xkc3AtPnNpemU7CisgIHNpemVfdCBzc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKTsKKyAgY2hhciogcmF3c3AgPSBvbGRfZW5kIC0gKHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgY2hhciogYXNwID0gcmF3c3AgKyBvZmZzZXQ7CisgIGNoYXIqIGNzcCA9IChhc3AgPCAob2xkX3RvcCArIE1JTl9DSFVOS19TSVpFKSk/IG9sZF90b3AgOiBhc3A7CisgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOworICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7CisgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7CisgIG1jaHVua3B0ciBwID0gdG5leHQ7CisgIGludCBuZmVuY2VzID0gMDsKKworICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovCisgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisKKyAgLyogU2V0IHVwIHNlZ21lbnQgcmVjb3JkICovCisgIGFzc2VydChpc19hbGlnbmVkKHNzKSk7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgc3AsIHNzaXplKTsKKyAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCisgIG0tPnNlZy5iYXNlID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gdHNpemU7CisgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBwZWQpOworICBtLT5zZWcubmV4dCA9IHNzOworCisgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCisgIGZvciAoOzspIHsKKyAgICBtY2h1bmtwdHIgbmV4dHAgPSBjaHVua19wbHVzX29mZnNldChwLCBTSVpFX1RfU0laRSk7CisgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICsrbmZlbmNlczsKKyAgICBpZiAoKGNoYXIqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBvbGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3NwICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5rX3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7CisgIH0KKworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovCitzdGF0aWMgdm9pZCogc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgY2hhciogdGJhc2UgPSBDTUZBSUw7CisgIHNpemVfdCB0c2l6ZSA9IDA7CisgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOworCisgIGluaXRfbXBhcmFtcygpOworCisgIC8qIERpcmVjdGx5IG1hcCBsYXJnZSBjaHVua3MgKi8KKyAgaWYgKHVzZV9tbWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpIHsKKyAgICB2b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICBpZiAobWVtICE9IDApCisgICAgICByZXR1cm4gbWVtOworICB9CisKKyAgLyoKKyAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvCisgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToKKyAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yCisgICAgICAgb3IgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkKKyAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLgorICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvCisgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzCisgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAKKyAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQorICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvCisgICAgICAgZmluZCBzcGFjZS4KKyAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIHNpemVfdCBhc2l6ZSA9IDA7CisgICAgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICAgICAgLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8KKyAgICAgICAgaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpCisgICAgICAgICAgYXNpemUgKz0gKHBhZ2VfYWxpZ24oKHNpemVfdCliYXNlKSAtIChzaXplX3QpYmFzZSk7CisgICAgICAgIC8qIENhbid0IGNhbGwgTU9SRUNPUkUgaWYgc2l6ZSBpcyBuZWdhdGl2ZSB3aGVuIHRyZWF0ZWQgYXMgc2lnbmVkICovCisgICAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IGJhc2UpIHsKKyAgICAgICAgICB0YmFzZSA9IGJhc2U7CisgICAgICAgICAgdHNpemUgPSBhc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFN1YnRyYWN0IG91dCBleGlzdGluZyBhdmFpbGFibGUgdG9wIHNwYWNlIGZyb20gTU9SRUNPUkUgcmVxdWVzdC4gKi8KKyAgICAgIGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOworICAgICAgLyogVXNlIG1lbSBoZXJlIG9ubHkgaWYgaXQgZGlkIGNvbnRpbnVvdXNseSBleHRlbmQgb2xkIHNwYWNlICovCisgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gc3MtPmJhc2Urc3MtPnNpemUpIHsKKyAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGJhc2UgPT0gQ01GQUlMKSB7ICAgIC8qIENvcGUgd2l0aCBwYXJ0aWFsIGZhaWx1cmUgKi8KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVHJ5IHRvIHVzZS9leHRlbmQgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKyAgICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgICBhc2l6ZSA8IG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpIHsKKyAgICAgICAgICBzaXplX3QgZXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FIC0gYXNpemUpOworICAgICAgICAgIGlmIChlc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgICAgICAgY2hhciogZW5kID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoZXNpemUpOworICAgICAgICAgICAgaWYgKGVuZCAhPSBDTUZBSUwpCisgICAgICAgICAgICAgIGFzaXplICs9IGVzaXplOworICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLworICAgICAgICAgICAgICAodm9pZClDQUxMX01PUkVDT1JFKC1hc2l6ZSk7CisgICAgICAgICAgICAgIGJyID0gQ01GQUlMOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBVc2UgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKyAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgZGlzYWJsZV9jb250aWd1b3VzKG0pOyAvKiBEb24ndCB0cnkgY29udGlndW91cyBwYXRoIGluIHRoZSBmdXR1cmUgKi8KKyAgICB9CisKKyAgICBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKTsKKyAgfQorCisgIGlmIChIQVZFX01NQVAgJiYgdGJhc2UgPT0gQ01GQUlMKSB7ICAvKiBUcnkgTU1BUCAqLworICAgIHNpemVfdCByZXEgPSBuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FOworICAgIHNpemVfdCByc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJlcSk7CisgICAgaWYgKHJzaXplID4gbmIpIHsgLyogRmFpbCBpZiB3cmFwcyBhcm91bmQgemVybyAqLworICAgICAgY2hhciogbXAgPSAoY2hhciopKENBTExfTU1BUChyc2l6ZSkpOworICAgICAgaWYgKG1wICE9IENNRkFJTCkgeworICAgICAgICB0YmFzZSA9IG1wOworICAgICAgICB0c2l6ZSA9IHJzaXplOworICAgICAgICBtbWFwX2ZsYWcgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoSEFWRV9NT1JFQ09SRSAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgLyogVHJ5IG5vbmNvbnRpZ3VvdXMgTU9SRUNPUkUgKi8KKyAgICBzaXplX3QgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgICAgY2hhciogZW5kID0gQ01GQUlMOworICAgICAgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICBiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpOworICAgICAgZW5kID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOworICAgICAgaWYgKGJyICE9IENNRkFJTCAmJiBlbmQgIT0gQ01GQUlMICYmIGJyIDwgZW5kKSB7CisgICAgICAgIHNpemVfdCBzc2l6ZSA9IGVuZCAtIGJyOworICAgICAgICBpZiAoc3NpemUgPiBuYiArIFRPUF9GT09UX1NJWkUpIHsKKyAgICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICAgIHRzaXplID0gc3NpemU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisKKyAgICBpZiAoKG0tPmZvb3RwcmludCArPSB0c2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKworICAgIGlmICghaXNfaW5pdGlhbGl6ZWQobSkpIHsgLyogZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbiAqLworICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICAgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcF9mbGFnKTsKKyAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgICAgIGluaXRfYmlucyhtKTsKKyAgICAgIGlmIChpc19nbG9iYWwobSkpIAorICAgICAgICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworICAgICAgZWxzZSB7CisgICAgICAgIC8qIE9mZnNldCB0b3AgYnkgZW1iZWRkZWQgbWFsbG9jX3N0YXRlICovCisgICAgICAgIG1jaHVua3B0ciBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgICAgICAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLVRPUF9GT09UX1NJWkUpOworICAgICAgfQorICAgIH0KKworICAgIGVsc2UgeworICAgICAgLyogVHJ5IHRvIG1lcmdlIHdpdGggYW4gZXhpc3Rpbmcgc2VnbWVudCAqLworICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKyAgICAgICAgc3AgPSBzcC0+bmV4dDsKKyAgICAgIGlmIChzcCAhPSAwICYmCisgICAgICAgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgY2hlY2tfc2VnbWVudF9tZXJnZShzcCwgdGJhc2UsIHRzaXplKSAmJgorICAgICAgICAgIChnZXRfc2VnbWVudF9mbGFncyhzcCkgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisgICAgICAgICAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkgeyAvKiBhcHBlbmQgKi8KKyAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICAgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgICAgc3AgPSAmbS0+c2VnOworICAgICAgICB3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQorICAgICAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICAgIGlmIChzcCAhPSAwICYmCisgICAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisJICAgIGNoZWNrX3NlZ21lbnRfbWVyZ2Uoc3AsIHRiYXNlLCB0c2l6ZSkgJiYKKyAgICAgICAgICAgIChnZXRfc2VnbWVudF9mbGFncyhzcCkgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnKSB7CisgICAgICAgICAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOworICAgICAgICAgIHNwLT5iYXNlID0gdGJhc2U7CisgICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgICAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCisgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorCisgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7CisgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OworICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApICYmICFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsoYmFzZSk7CisgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAvKiBDYW4gdW5tYXAgaWYgZmlyc3QgY2h1bmsgaG9sZHMgZW50aXJlIHNlZ21lbnQgYW5kIG5vdCBwaW5uZWQgKi8KKyAgICAgIGlmICghY2ludXNlKHApICYmIChjaGFyKilwICsgcHNpemUgPj0gYmFzZSArIHNpemUgLSBUT1BfRk9PVF9TSVpFKSB7CisgICAgICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKyAgICAgICAgYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyKilzcCkpOworICAgICAgICBpZiAocCA9PSBtLT5kdikgeworICAgICAgICAgIG0tPmR2ID0gMDsKKyAgICAgICAgICBtLT5kdnNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB0cCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApIHsKKyAgICAgICAgICByZWxlYXNlZCArPSBzaXplOworICAgICAgICAgIG0tPmZvb3RwcmludCAtPSBzaXplOworICAgICAgICAgIC8qIHVubGluayBvYnNvbGV0ZWQgcmVjb3JkICovCisgICAgICAgICAgc3AgPSBwcmVkOworICAgICAgICAgIHNwLT5uZXh0ID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovCisgICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKG0sIHRwLCBwc2l6ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcHJlZCA9IHNwOworICAgIHNwID0gbmV4dDsKKyAgfQorICByZXR1cm4gcmVsZWFzZWQ7Cit9CisKK3N0YXRpYyBpbnQgc3lzX3RyaW0obXN0YXRlIG0sIHNpemVfdCBwYWQpIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgcGFkICs9IFRPUF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAqLworCisgICAgaWYgKG0tPnRvcHNpemUgPiBwYWQpIHsKKyAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8KKyAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKKyAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtCisgICAgICAgICAgICAgICAgICAgICAgU0laRV9UX09ORSkgKiB1bml0OworICAgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisKKyAgICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisgICAgICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKSB7CisgICAgICAgICAgaWYgKEhBVkVfTU1BUCAmJgorICAgICAgICAgICAgICBzcC0+c2l6ZSA+PSBleHRyYSAmJgorICAgICAgICAgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpIHsgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLworICAgICAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBzcC0+c2l6ZSAtIGV4dHJhOworICAgICAgICAgICAgLyogUHJlZmVyIG1yZW1hcCwgZmFsbCBiYWNrIHRvIG11bm1hcCAqLworICAgICAgICAgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fAorICAgICAgICAgICAgICAgIChDQUxMX01VTk1BUChzcC0+YmFzZSArIG5ld3NpemUsIGV4dHJhKSA9PSAwKSkgeworICAgICAgICAgICAgICByZWxlYXNlZCA9IGV4dHJhOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChIQVZFX01PUkVDT1JFKSB7CisgICAgICAgICAgaWYgKGV4dHJhID49IEhBTEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8KKyAgICAgICAgICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsKKyAgICAgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBNYWtlIHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KKyAgICAgICAgICAgIGNoYXIqIG9sZF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICAgICAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKyAgICAgICAgICAgICAgY2hhciogcmVsX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKC1leHRyYSkpOworICAgICAgICAgICAgICBjaGFyKiBuZXdfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgICAgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisgICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmIChyZWxlYXNlZCAhPSAwKSB7CisgICAgICAgIHNwLT5zaXplIC09IHJlbGVhc2VkOworICAgICAgICBtLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7CisgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSAtIHJlbGVhc2VkKTsKKyAgICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICB9CisgICAgfQorCisgICAgLyogVW5tYXAgYW55IHVudXNlZCBtbWFwcGVkIHNlZ21lbnRzICovCisgICAgaWYgKEhBVkVfTU1BUCkgCisgICAgICByZWxlYXNlZCArPSByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtKTsKKworICAgIC8qIE9uIGZhaWx1cmUsIGRpc2FibGUgYXV0b3RyaW0gdG8gYXZvaWQgcmVwZWF0ZWQgZmFpbGVkIGZ1dHVyZSBjYWxscyAqLworICAgIGlmIChyZWxlYXNlZCA9PSAwKQorICAgICAgbS0+dHJpbV9jaGVjayA9IE1BWF9TSVpFX1Q7CisgIH0KKworICByZXR1cm4gKHJlbGVhc2VkICE9IDApPyAxIDogMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWxsb2NhdGUgYSBsYXJnZSByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHYgPSAwOworICBzaXplX3QgcnNpemUgPSAtbmI7IC8qIFVuc2lnbmVkIG5lZ2F0aW9uICovCisgIHRjaHVua3B0ciB0OworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsKKworICBpZiAoKHQgPSAqdHJlZWJpbl9hdChtLCBpZHgpKSAhPSAwKSB7CisgICAgLyogVHJhdmVyc2UgdHJlZSBmb3IgdGhpcyBiaW4gbG9va2luZyBmb3Igbm9kZSB3aXRoIHNpemUgPT0gbmIgKi8KKyAgICBzaXplX3Qgc2l6ZWJpdHMgPSBuYiA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaWR4KTsKKyAgICB0Y2h1bmtwdHIgcnN0ID0gMDsgIC8qIFRoZSBkZWVwZXN0IHVudGFrZW4gcmlnaHQgc3VidHJlZSAqLworICAgIGZvciAoOzspIHsKKyAgICAgIHRjaHVua3B0ciBydDsKKyAgICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICAgIHYgPSB0OworICAgICAgICBpZiAoKHJzaXplID0gdHJlbSkgPT0gMCkKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHJ0ID0gdC0+Y2hpbGRbMV07CisgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKyAgICAgIGlmIChydCAhPSAwICYmIHJ0ICE9IHQpCisgICAgICAgIHJzdCA9IHJ0OworICAgICAgaWYgKHQgPT0gMCkgeworICAgICAgICB0ID0gcnN0OyAvKiBzZXQgdCB0byBsZWFzdCBzdWJ0cmVlIGhvbGRpbmcgc2l6ZXMgPiBuYiAqLworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIHNpemViaXRzIDw8PSAxOworICAgIH0KKyAgfQorCisgIGlmICh0ID09IDAgJiYgdiA9PSAwKSB7IC8qIHNldCB0IHRvIHJvb3Qgb2YgbmV4dCBub24tZW1wdHkgdHJlZWJpbiAqLworICAgIGJpbm1hcF90IGxlZnRiaXRzID0gbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSkgJiBtLT50cmVlbWFwOworICAgIGlmIChsZWZ0Yml0cyAhPSAwKSB7CisgICAgICBiaW5kZXhfdCBpOworICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgICAgIHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgICB9CisgIH0KKworICB3aGlsZSAodCAhPSAwKSB7IC8qIGZpbmQgc21hbGxlc3Qgb2YgdHJlZSBvciBzdWJ0cmVlICovCisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgICAgdCA9IGxlZnRtb3N0X2NoaWxkKHQpOworICB9CisKKyAgLyogIElmIGR2IGlzIGEgYmV0dGVyIGZpdCwgcmV0dXJuIDAgc28gbWFsbG9jIHdpbGwgdXNlIGl0ICovCisgIGlmICh2ICE9IDAgJiYgcnNpemUgPCAoc2l6ZV90KShtLT5kdnNpemUgLSBuYikpIHsKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeyAvKiBzcGxpdCAqLworICAgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKyAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKyAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICAgIGluc2VydF9jaHVuayhtLCByLCByc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICAgIH0KKyAgICB9CisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIGFsbG9jYXRlIGEgc21hbGwgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19zbWFsbChtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB0LCB2OworICBzaXplX3QgcnNpemU7CisgIGJpbmRleF90IGk7CisgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KG0tPnRyZWVtYXApOworICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworCisgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgIHJzaXplID0gY2h1bmtzaXplKHQpIC0gbmI7CisKKyAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDApIHsKKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgfQorCisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7CisgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHJlcGxhY2VfZHYobSwgciwgcnNpemUpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICB9CisgIH0KKworICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9yZWFsbG9jKG1zdGF0ZSBtLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpIHsKKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworICAgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgb2xkc2l6ZSk7CisgICAgbWNodW5rcHRyIG5ld3AgPSAwOworICAgIHZvaWQqIGV4dHJhID0gMDsKKworICAgIC8qIFRyeSB0byBlaXRoZXIgc2hyaW5rIG9yIGV4dGVuZCBpbnRvIHRvcC4gRWxzZSBtYWxsb2MtY29weS1mcmVlICovCisKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIG9sZHApICYmIG9rX2NpbnVzZShvbGRwKSAmJgorICAgICAgICAgICAgICAgIG9rX25leHQob2xkcCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICAgIGlmIChpc19tbWFwcGVkKG9sZHApKQorICAgICAgICBuZXdwID0gbW1hcF9yZXNpemUobSwgb2xkcCwgbmIpOworICAgICAgZWxzZSBpZiAob2xkc2l6ZSA+PSBuYikgeyAvKiBhbHJlYWR5IGJpZyBlbm91Z2ggKi8KKyAgICAgICAgc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOworICAgICAgICBuZXdwID0gb2xkcDsKKyAgICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICAgICAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgbmV3cCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJzaXplKTsKKyAgICAgICAgICBleHRyYSA9IGNodW5rMm1lbShyZW1haW5kZXIpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmIChuZXh0ID09IG0tPnRvcCAmJiBvbGRzaXplICsgbS0+dG9wc2l6ZSA+IG5iKSB7CisgICAgICAgIC8qIEV4cGFuZCBpbnRvIHRvcCAqLworICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IG9sZHNpemUgKyBtLT50b3BzaXplOworICAgICAgICBzaXplX3QgbmV3dG9wc2l6ZSA9IG5ld3NpemUgLSBuYjsKKyAgICAgICAgbWNodW5rcHRyIG5ld3RvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG5iKTsKKyAgICAgICAgc2V0X2ludXNlKG0sIG9sZHAsIG5iKTsKKyAgICAgICAgbmV3dG9wLT5oZWFkID0gbmV3dG9wc2l6ZSB8UElOVVNFX0JJVDsKKyAgICAgICAgbS0+dG9wID0gbmV3dG9wOworICAgICAgICBtLT50b3BzaXplID0gbmV3dG9wc2l6ZTsKKyAgICAgICAgbmV3cCA9IG9sZHA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKworICAgIGlmIChuZXdwICE9IDApIHsKKyAgICAgIGlmIChleHRyYSAhPSAwKSB7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgZXh0cmEpOworICAgICAgfQorICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKG5ld3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHZvaWQqIG5ld21lbSA9IGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgICAgICBpZiAobmV3bWVtICE9IDApIHsKKyAgICAgICAgc2l6ZV90IG9jID0gb2xkc2l6ZSAtIG92ZXJoZWFkX2ZvcihvbGRwKTsKKyAgICAgICAgbWVtY3B5KG5ld21lbSwgb2xkbWVtLCAob2MgPCBieXRlcyk/IG9jIDogYnl0ZXMpOworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIG9sZG1lbSk7CisgICAgICB9CisgICAgICByZXR1cm4gbmV3bWVtOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lbWFsaWduIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX21lbWFsaWduKG1zdGF0ZSBtLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKSAgICAvKiBDYW4ganVzdCB1c2UgbWFsbG9jICovCisgICAgcmV0dXJuIGludGVybmFsX21hbGxvYyhtLCBieXRlcyk7CisgIGlmIChhbGlnbm1lbnQgPCAgTUlOX0NIVU5LX1NJWkUpIC8qIG11c3QgYmUgYXQgbGVhc3QgYSBtaW5pbXVtIGNodW5rIHNpemUgKi8KKyAgICBhbGlnbm1lbnQgPSBNSU5fQ0hVTktfU0laRTsKKyAgaWYgKChhbGlnbm1lbnQgJiAoYWxpZ25tZW50LVNJWkVfVF9PTkUpKSAhPSAwKSB7LyogRW5zdXJlIGEgcG93ZXIgb2YgMiAqLworICAgIHNpemVfdCBhID0gTUFMTE9DX0FMSUdOTUVOVCA8PCAxOworICAgIHdoaWxlIChhIDwgYWxpZ25tZW50KSBhIDw8PSAxOworICAgIGFsaWdubWVudCA9IGE7CisgIH0KKyAgCisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkgeworICAgIGlmIChtICE9IDApICB7IC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgIHNpemVfdCByZXEgPSBuYiArIGFsaWdubWVudCArIE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQ7CisgICAgY2hhciogbWVtID0gKGNoYXIqKWludGVybmFsX21hbGxvYyhtLCByZXEpOworICAgIGlmIChtZW0gIT0gMCkgeworICAgICAgdm9pZCogbGVhZGVyID0gMDsKKyAgICAgIHZvaWQqIHRyYWlsZXIgPSAwOworICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKworICAgICAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCisgICAgICAgIC8qCisgICAgICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCisgICAgICAgICAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmCisgICAgICAgICAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4KKyAgICAgICAgICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KKyAgICAgICAgICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAqLworICAgICAgICBjaGFyKiBiciA9IChjaGFyKiltZW0yY2h1bmsoKHNpemVfdCkoKChzaXplX3QpKG1lbSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSkgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWFsaWdubWVudCkpOworICAgICAgICBjaGFyKiBwb3MgPSAoKHNpemVfdCkoYnIgLSAoY2hhciopKHApKSA+PSBNSU5fQ0hVTktfU0laRSk/CisgICAgICAgICAgYnIgOiBicithbGlnbm1lbnQ7CisgICAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7CisgICAgICAgIHNpemVfdCBsZWFkc2l6ZSA9IHBvcyAtIChjaGFyKikocCk7CisgICAgICAgIHNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7CisKKyAgICAgICAgaWYgKGlzX21tYXBwZWQocCkpIHsgLyogRm9yIG1tYXBwZWQgY2h1bmtzLCBqdXN0IGFkanVzdCBvZmZzZXQgKi8KKyAgICAgICAgICBuZXdwLT5wcmV2X2Zvb3QgPSBwLT5wcmV2X2Zvb3QgKyBsZWFkc2l6ZTsKKyAgICAgICAgICBuZXdwLT5oZWFkID0gKG5ld3NpemV8Q0lOVVNFX0JJVCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7IC8qIE90aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCisgICAgICAgICAgc2V0X2ludXNlKG0sIG5ld3AsIG5ld3NpemUpOworICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7CisgICAgICAgICAgbGVhZGVyID0gY2h1bmsybWVtKHApOworICAgICAgICB9CisgICAgICAgIHAgPSBuZXdwOworICAgICAgfQorCisgICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCisgICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIGlmIChzaXplID4gbmIgKyBNSU5fQ0hVTktfU0laRSkgeworICAgICAgICAgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKKyAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworICAgICAgICAgIHRyYWlsZXIgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBhc3NlcnQgKGNodW5rc2l6ZShwKSA+PSBuYik7CisgICAgICBhc3NlcnQoKCgoc2l6ZV90KShjaHVuazJtZW0ocCkpKSAlIGFsaWdubWVudCkgPT0gMCk7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICBpZiAobGVhZGVyICE9IDApIHsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBsZWFkZXIpOworICAgICAgfQorICAgICAgaWYgKHRyYWlsZXIgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIHRyYWlsZXIpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21hbGxvYy9jb2FsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiogaWFsbG9jKG1zdGF0ZSBtLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHNpemVzLAorICAgICAgICAgICAgICAgICAgICAgaW50IG9wdHMsCisgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgeworICAvKgorICAgIFRoaXMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nCisgICAgYWxsIG9mIHRoZSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gcmVzdWx0LgorCisgICAgVGhlIG9wdHMgYXJnIGhhczoKKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCisgICovCisKKyAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLworICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KKyAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLworICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLworICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KKyAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCisgIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KKyAgc2l6ZV90ICAgIHNpemU7CisgIHNpemVfdCAgICBpOworCisgIC8qIGNvbXB1dGUgYXJyYXkgbGVuZ3RoLCBpZiBuZWVkZWQgKi8KKyAgaWYgKGNodW5rcyAhPSAwKSB7CisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiBjaHVua3M7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICBtYXJyYXkgPSBjaHVua3M7CisgICAgYXJyYXlfc2l6ZSA9IDA7CisgIH0KKyAgZWxzZSB7CisgICAgLyogaWYgZW1wdHkgcmVxLCBtdXN0IHN0aWxsIHJldHVybiBjaHVuayByZXByZXNlbnRpbmcgZW1wdHkgYXJyYXkgKi8KKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuICh2b2lkKiopaW50ZXJuYWxfbWFsbG9jKG0sIDApOworICAgIG1hcnJheSA9IDA7CisgICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZih2b2lkKikpKTsKKyAgfQorCisgIC8qIGNvbXB1dGUgdG90YWwgZWxlbWVudCBzaXplICovCisgIGlmIChvcHRzICYgMHgxKSB7IC8qIGFsbC1zYW1lLXNpemUgKi8KKyAgICBlbGVtZW50X3NpemUgPSByZXF1ZXN0MnNpemUoKnNpemVzKTsKKyAgICBjb250ZW50c19zaXplID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKKyAgfQorICBlbHNlIHsgLyogYWRkIHVwIGFsbCB0aGUgc2l6ZXMgKi8KKyAgICBlbGVtZW50X3NpemUgPSAwOworICAgIGNvbnRlbnRzX3NpemUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICB9CisKKyAgc2l6ZSA9IGNvbnRlbnRzX3NpemUgKyBhcnJheV9zaXplOworCisgIC8qCisgICAgIEFsbG9jYXRlIHRoZSBhZ2dyZWdhdGUgY2h1bmsuICBGaXJzdCBkaXNhYmxlIGRpcmVjdC1tbWFwcGluZyBzbworICAgICBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlcgorICAgICBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgorICAqLworICB3YXNfZW5hYmxlZCA9IHVzZV9tbWFwKG0pOworICBkaXNhYmxlX21tYXAobSk7CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBzaXplIC0gQ0hVTktfT1ZFUkhFQUQpOworICBpZiAod2FzX2VuYWJsZWQpCisgICAgZW5hYmxlX21tYXAobSk7CisgIGlmIChtZW0gPT0gMCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgcCA9IG1lbTJjaHVuayhtZW0pOworICByZW1haW5kZXJfc2l6ZSA9IGNodW5rc2l6ZShwKTsKKworICBhc3NlcnQoIWlzX21tYXBwZWQocCkpOworCisgIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovCisgICAgbWVtc2V0KChzaXplX3QqKW1lbSwgMCwgcmVtYWluZGVyX3NpemUgLSBTSVpFX1RfU0laRSAtIGFycmF5X3NpemUpOworICB9CisKKyAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJheSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovCisgIGlmIChtYXJyYXkgPT0gMCkgeworICAgIHNpemVfdCAgYXJyYXlfY2h1bmtfc2l6ZTsKKyAgICBhcnJheV9jaHVuayA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIGNvbnRlbnRzX3NpemUpOworICAgIGFycmF5X2NodW5rX3NpemUgPSByZW1haW5kZXJfc2l6ZSAtIGNvbnRlbnRzX3NpemU7CisgICAgbWFycmF5ID0gKHZvaWQqKikgKGNodW5rMm1lbShhcnJheV9jaHVuaykpOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgYXJyYXlfY2h1bmssIGFycmF5X2NodW5rX3NpemUpOworICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsKKyAgfQorCisgIC8qIHNwbGl0IG91dCBlbGVtZW50cyAqLworICBmb3IgKGkgPSAwOyA7ICsraSkgeworICAgIG1hcnJheVtpXSA9IGNodW5rMm1lbShwKTsKKyAgICBpZiAoaSAhPSBuX2VsZW1lbnRzLTEpIHsKKyAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkKKyAgICAgICAgc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKKyAgICAgIGVsc2UKKyAgICAgICAgc2l6ZSA9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBzaXplKTsKKyAgICAgIHAgPSBjaHVua19wbHVzX29mZnNldChwLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgcmVtYWluZGVyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyNpZiBERUJVRworICBpZiAobWFycmF5ICE9IGNodW5rcykgeworICAgIC8qIGZpbmFsIGVsZW1lbnQgbXVzdCBoYXZlIGV4YWN0bHkgZXhoYXVzdGVkIGNodW5rICovCisgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7CisgICAgfQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXkpKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5W2ldKSk7CisKKyNlbmRpZiAvKiBERUJVRyAqLworCisgIFBPU1RBQ1RJT04obSk7CisgIHJldHVybiBtYXJyYXk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFPTkxZX01TUEFDRVMKKwordm9pZCogZGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIC8qCisgICAgIEJhc2ljIGFsZ29yaXRobToKKyAgICAgSWYgYSBzbWFsbCByZXF1ZXN0ICg8IDI1NiBieXRlcyBtaW51cyBwZXItY2h1bmsgb3ZlcmhlYWQpOgorICAgICAgIDEuIElmIG9uZSBleGlzdHMsIHVzZSBhIHJlbWFpbmRlcmxlc3MgY2h1bmsgaW4gYXNzb2NpYXRlZCBzbWFsbGJpbi4KKyAgICAgICAgICAoUmVtYWluZGVybGVzcyBtZWFucyB0aGF0IHRoZXJlIGFyZSB0b28gZmV3IGV4Y2VzcyBieXRlcyB0bworICAgICAgICAgIHJlcHJlc2VudCBhcyBhIGNodW5rLikKKyAgICAgICAyLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIGR2IGNodW5rLCB3aGljaCBpcyBub3JtYWxseSB0aGUKKyAgICAgICAgICBjaHVuayBhZGphY2VudCB0byB0aGUgb25lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBzbWFsbCByZXF1ZXN0LgorICAgICAgIDMuIElmIG9uZSBleGlzdHMsIHNwbGl0IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgY2h1bmsgaW4gYSBiaW4sCisgICAgICAgICAgc2F2aW5nIHJlbWFpbmRlciBpbiBkdi4KKyAgICAgICA0LiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorICAgICBPdGhlcndpc2UsIGZvciBhIGxhcmdlIHJlcXVlc3Q6CisgICAgICAgMS4gRmluZCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJpbm5lZCBjaHVuayB0aGF0IGZpdHMsIGFuZCB1c2UgaXQKKyAgICAgICAgICBpZiBpdCBpcyBiZXR0ZXIgZml0dGluZyB0aGFuIGR2IGNodW5rLCBzcGxpdHRpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAgIDIuIElmIGJldHRlciBmaXR0aW5nIHRoYW4gYW55IGJpbm5lZCBjaHVuaywgdXNlIHRoZSBkdiBjaHVuay4KKyAgICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KKyAgICAgICA0LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFwIHRoaXMgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKworICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCisgICovCisKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IGdtLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworICAgICAgICBtY2h1bmtwdHIgYiwgcDsKKyAgICAgICAgaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLworICAgICAgICBiID0gc21hbGxiaW5fYXQoZ20sIGlkeCk7CisgICAgICAgIHAgPSBiLT5mZDsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGlkeCk7CisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IGdtLT5kdnNpemUpIHsKKyAgICAgICAgaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCisgICAgICAgICAgbWNodW5rcHRyIGIsIHAsIHI7CisgICAgICAgICAgc2l6ZV90IHJzaXplOworICAgICAgICAgIGJpbmRleF90IGk7CisgICAgICAgICAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKyAgICAgICAgICBiID0gc21hbGxiaW5fYXQoZ20sIGkpOworICAgICAgICAgIHAgPSBiLT5mZDsKKyAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOworICAgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaSk7CisgICAgICAgICAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisgICAgICAgICAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KKyAgICAgICAgICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgICAgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7CisgICAgICAgICAgfQorICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisKKyAgICAgICAgZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKSB7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKSB7CisgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8PSBnbS0+ZHZzaXplKSB7CisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+ZHZzaXplIC0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT5kdjsKKyAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLworICAgICAgICBtY2h1bmtwdHIgciA9IGdtLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgZ20tPmR2c2l6ZSA9IHJzaXplOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworICAgICAgICBzaXplX3QgZHZzID0gZ20tPmR2c2l6ZTsKKyAgICAgICAgZ20tPmR2c2l6ZSA9IDA7CisgICAgICAgIGdtLT5kdiA9IDA7CisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgZ20tPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gZ20tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsoZ20sIGdtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhnbSwgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihnbSk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIGRsZnJlZSh2b2lkKiBtZW0pIHsKKyAgLyoKKyAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZworICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkCisgICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuCisgICovCisKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgZm0gZ20KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisgICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisgICAgICAgIGlmICghcGludXNlKHApKSB7CisgICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworICAgICAgICAgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworICAgICAgICAgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOworICAgICAgICAgICAgcCA9IHByZXY7CisgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKyAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7CisgICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisgICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+ZHYgPSBwOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsKKyAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgIGluc2VydF9jaHVuayhmbSwgcCwgcHNpemUpOworICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9CisjaWYgIUZPT1RFUlMKKyN1bmRlZiBmbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KK30KKwordm9pZCogZGxjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisgICAgICAgIChyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBkbG1hbGxvYyhyZXEpOworICBpZiAobWVtICE9IDAgJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQorICAgIG1lbXNldChtZW0sIDAsIHJlcSk7CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIGRsbWFsbG9jKGJ5dGVzKTsKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgaWYgKGJ5dGVzID09IDApIHsKKyAgICBkbGZyZWUob2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiAhIEZPT1RFUlMKKyAgICBtc3RhdGUgbSA9IGdtOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3IobWVtMmNodW5rKG9sZG1lbSkpOworICAgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24oZ20sIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCit2b2lkKiBkbHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgaW5pdF9tcGFyYW1zKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsKK30KKwordm9pZCogZGxwdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBpbml0X21wYXJhbXMoKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgKGJ5dGVzICsgcGFnZXN6IC0gU0laRV9UX09ORSkgJiB+KHBhZ2VzeiAtIFNJWkVfVF9PTkUpKTsKK30KKworaW50IGRsbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisgICAgICAgICAgICAgICAgIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKyAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgfQorICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CisgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgRVhURVJOX0JJVCk7CisgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IGdldF9zZWdtZW50X2ZsYWdzKHNwKTsKKyAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICBpZiAoKGZsYWcgJiBJU19NTUFQUEVEX0JJVCkgJiYgIShmbGFnICYgRVhURVJOX0JJVCkgJiYKKyAgICAgICAgICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQorICAgICAgICBmcmVlZCArPSBzaXplOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiBmcmVlZDsKK30KKworLyoKKyAgbXNwYWNlIHZlcnNpb25zIG9mIHJvdXRpbmVzIGFyZSBuZWFyLWNsb25lcyBvZiB0aGUgZ2xvYmFsCisgIHZlcnNpb25zLiBUaGlzIGlzIG5vdCBzbyBuaWNlIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmVzLgorKi8KKworCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKyAgICAgICAgbWNodW5rcHRyIGIsIHA7CisgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKyAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOworICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKSB7CisgICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOworICAgICAgICAgIHNpemVfdCByc2l6ZTsKKyAgICAgICAgICBiaW5kZXhfdCBpOworICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsKKyAgICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOworICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICAgICAgcmVwbGFjZV9kdihtcywgciwgcnNpemUpOworICAgICAgICAgIH0KKyAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwobXMsIG5iKSkgIT0gMCkgeworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UobXMsIG5iKSkgIT0gMCkgeworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKyAgICAgICAgbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgIG1zLT5kdnNpemUgPSByc2l6ZTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKyAgICAgICAgc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7CisgICAgICAgIG1zLT5kdnNpemUgPSAwOworICAgICAgICBtcy0+ZHYgPSAwOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MobXMsIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04obXMpOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBmbSA9IChtc3RhdGUpbXNwOworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7CisgICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisgICAgICAgIGlmICghcGludXNlKHApKSB7CisgICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworICAgICAgICAgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworICAgICAgICAgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOworICAgICAgICAgICAgcCA9IHByZXY7CisgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKyAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7CisgICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisgICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+ZHYgPSBwOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsKKyAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgIGluc2VydF9jaHVuayhmbSwgcCwgcHNpemUpOworICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKyAgICAgICAgKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgcmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmIEZPT1RFUlMKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBtc3RhdGUgbXMgPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobXMsIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24obXMsIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgICAgcmVzdWx0ID0gc3lzX3RyaW0obXMsIHBhZCk7CisgICAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGludGVybmFsX21hbGxvY19zdGF0cyhtcyk7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorfQorCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQ7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPmZvb3RwcmludDsKKyAgfQorICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICByZXR1cm4gcmVzdWx0OworfQorCisKK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQ7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPm1heF9mb290cHJpbnQ7CisgIH0KKyAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8obXMpOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK2ludCBtc3BhY2VfbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIHZlcnNpb24gb2YgTU9SRUNPUkU6CisKKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgTU9SRUNPUkUgc2hvdWxkIGFsbG9jYXRlIGluIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KKyAgKiBNT1JFQ09SRSBtYXkgYWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQuIChPciBldmVuIGxlc3MsCisgICAgICBidXQgdGhpcyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQorICAqIE1PUkVDT1JFIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dAorICAgICAgaW5zdGVhZCByZXR1cm4gb25lIHBhc3QgdGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBmcm9tIHByZXZpb3VzCisgICAgICBub256ZXJvIGNhbGwuCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUKKyAgICAgIGFyZ3VtZW50cyBzaG91bGQgcmV0dXJuIGluY3JlYXNpbmcgYWRkcmVzc2VzLCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgIHNwYWNlIGhhcyBiZWVuIGNvbnRpZ3VvdXNseSBleHRlbmRlZC4KKyAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cworICAgICAgYWRkcmVzc2VzLCBpdCBtdXN0IGJlIE9LIGZvciBtYWxsb2MnZWQgY2h1bmtzIHRvIHNwYW4gbXVsdGlwbGUKKyAgICAgIHJlZ2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91cy4KKyAgKiBNT1JFQ09SRSBuZWVkIG5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzIC0tIGl0IG1heSBpbnN0ZWFkCisgICAgICBqdXN0IHJldHVybiBNRkFJTCB3aGVuIGdpdmVuIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUKKyAgICAgIG11c3Qgbm90IG1pc2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkCisgICAgICBhcmdzLiBZb3UgY2FuIHN1cHByZXNzIGFsbCBzdWNoIGNhbGxzIGZyb20gZXZlbiBvY2N1cnJpbmcgYnkgZGVmaW5pbmcKKyAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLAorCisgIEFzIGFuIGV4YW1wbGUgYWx0ZXJuYXRpdmUgTU9SRUNPUkUsIGhlcmUgaXMgYSBjdXN0b20gYWxsb2NhdG9yCisgIGtpbmRseSBjb250cmlidXRlZCBmb3IgcHJlLU9TWCBtYWNPUy4gIEl0IHVzZXMgdmlydHVhbGx5IGJ1dCBub3QKKyAgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzIG5vbi1wYWdlZCBtZW1vcnkgKGxvY2tlZCBpbiwKKyAgcHJlc2VudCBhbmQgd29uJ3QgZ2V0IHN3YXBwZWQgb3V0KS4gIFlvdSBjYW4gdXNlIGl0IGJ5IHVuY29tbWVudGluZworICB0aGlzIHNlY3Rpb24sIGFkZGluZyBzb21lICNpbmNsdWRlcywgYW5kIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlCisgIGRlZmluZXMgYWJvdmU6CisKKyAgICAgICNkZWZpbmUgTU9SRUNPUkUgb3NNb3JlQ29yZQorCisgIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRoYXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgorICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBleGl0LgorCisgICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKKyAgI2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjRVKQorICBzdGF0aWMgaW50IG5leHRfb3NfcG9vbDsKKyAgdm9pZCAqb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOworCisgIHZvaWQgKm9zTW9yZUNvcmUoaW50IHNpemUpCisgIHsKKyAgICB2b2lkICpwdHIgPSAwOworICAgIHN0YXRpYyB2b2lkICpzYnJrX3RvcCA9IDA7CisKKyAgICBpZiAoc2l6ZSA+IDApCisgICAgeworICAgICAgaWYgKHNpemUgPCBNSU5JTVVNX01PUkVDT1JFX1NJWkUpCisgICAgICAgICBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOworICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpCisgICAgICAgICBwdHIgPSBQb29sQWxsb2NhdGVSZXNpZGVudChzaXplICsgUk1fUEFHRV9TSVpFLCAwKTsKKyAgICAgIGlmIChwdHIgPT0gMCkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgICAgfQorICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1cmluZyBjbGVhbnVwCisgICAgICBvdXJfb3NfcG9vbHNbbmV4dF9vc19wb29sXSA9IHB0cjsKKyAgICAgIG5leHRfb3NfcG9vbCsrOworICAgICAgcHRyID0gKHZvaWQgKikgKCgoKHNpemVfdCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsKKyAgICAgIHNicmtfdG9wID0gKGNoYXIgKikgcHRyICsgc2l6ZTsKKyAgICAgIHJldHVybiBwdHI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPCAwKQorICAgIHsKKyAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNocmluayBiZWhhdmlvcgorICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIHNicmtfdG9wOworICAgIH0KKyAgfQorCisgIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMKKyAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRvd24gZHJpdmVyCisKKyAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKKyAgeworICAgIHZvaWQgKipwdHI7CisKKyAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCisgICAgICBpZiAoKnB0cikKKyAgICAgIHsKKyAgICAgICAgIFBvb2xEZWFsbG9jYXRlKCpwdHIpOworICAgICAgICAgKnB0ciA9IDA7CisgICAgICB9CisgIH0KKworKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSGlzdG9yeToKKyAgICBWMi44LjMgVGh1IFNlcCAyMiAxMToxNjozMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkIG1heF9mb290cHJpbnQgZnVuY3Rpb25zCisgICAgICAqIEVuc3VyZSBhbGwgYXBwcm9wcmlhdGUgbGl0ZXJhbHMgYXJlIHNpemVfdAorICAgICAgKiBGaXggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbSBmb3Igc29tZSAjZGVmaW5lIHNldHRpbmdzCisgICAgICAqIEF2b2lkIGNvbmNhdGVuYXRpbmcgc2VnbWVudHMgd2l0aCB0aGUgb25lIHByb3ZpZGVkCisgICAgICAgIGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlCisgICAgICAqIFJlbmFtZSBzb21lIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciBzaGFkb3dpbmcgd2FybmluZ3MKKyAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uCisgICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4KKyAgICAgICogU2ltcGxpZnkgYW5kIGZpeCBzZWdtZW50IGluc2VydGlvbiwgdHJpbW1pbmcgYW5kIG1zcGFjZV9kZXN0cm95CisgICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngKKyAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLgorCisgICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4KKworICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrCisgICAgICAqIEFkZCBleHBsaWNpdCBjYXN0cyBuZWVkZWQgZm9yIEMrKworCisgICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFVzZSB0cmVlcyBmb3IgbGFyZ2UgYmlucworICAgICAgKiBTdXBwb3J0IG1zcGFjZXMKKyAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sCisgICAgICAgIHJlbW92aW5nIG5lZWQgZm9yIGVtdWxhdGlvbiBvbiBtb3N0IHBsYXRmb3JtcyB3aXRob3V0IHNicmsuCisgICAgICAqIERlZmF1bHQgc2FmZXR5IGNoZWNrcworICAgICAgKiBPcHRpb25hbCBmb290ZXIgY2hlY2tzLiBUaGFua3MgdG8gV2lsbGlhbSBSb2JlcnRzb24gZm9yIHRoZSBpZGVhLgorICAgICAgKiBJbnRlcm5hbCBjb2RlIHJlZmFjdG9yaW5nCisgICAgICAqIEluY29ycG9yYXRlIHN1Z2dlc3Rpb25zIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICBUaGFua3MgdG8gRGVubmlzIEZsYW5hZ2FuLCBDb2xpbiBQbHVtYiwgTmlhbGwgRG91Z2xhcywKKyAgICAgICAgQWFyb24gQmFjaG1hbm4sICBFbWVyeSBCZXJnZXIsIGFuZCBvdGhlcnMuCisgICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4KKyAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLgorICAgICAgKiBSZW1vdmUgaW50ZXJuYWwgbWVtY3B5LCBtZW1zZXQuIENvbXBpbGVycyBoYW5kbGUgYnVpbHRpbnMgYmV0dGVyLgorICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4KKworICAgIFYyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbgorCisgICAgVjIuNy4xIFRodSBKdWwgMjUgMTA6NTg6MDMgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUKKyAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuCisgICAgICAqIEJldHRlciBkZXRlY3Rpb24gYW5kIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzbmVzcyBvZiBNT1JFQ09SRS4KKyAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gsIGFuZCBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8gZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuCisgICAgICAqIEZpeCBmcmVlaW5nIG9mIG9sZCB0b3Agbm9uLWNvbnRpZ3VvdXMgY2h1bmsgaW0gc3lzbWFsbG9jLgorICAgICAgKiBSYWlzZWQgZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLgorICAgICAgKiBGaXggbW1hcC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuCisgICAgICAqIEZpeCBjb3B5IG1hY3JvczsgYWRkZWQgTEFDS1NfRkNOVExfSC4gVGhhbmtzIHRvIE5lYWwgV2FsZmllbGQuCisgICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbgorICAgICAgKiBEZWZhdWx0IHRyaW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4KKworICAgIFYyLjcuMCBTdW4gTWFyIDExIDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRyb2R1Y2UgaW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4KKyAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgUGFjaG9zIGZvciBtb3RpdmF0aW9uIGFuZCBoZWxwLgorICAgICAgKiBNYWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlCisgICAgICAqIEFsbG93ID4gMkdCIHJlcXVlc3RzIG9uIDMyYml0IHN5c3RlbXMuCisgICAgICAqIG5ldyBXSU4zMiBzYnJrLCBtbWFwLCBtdW5tYXAsIGxvY2sgY29kZSBmcm9tIDxXYWx0ZXJAR2VOZVN5cy1lLmRlPi4KKyAgICAgICAgVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKKyAgICAgICAgYW5kIEFub255bW91cy4KKyAgICAgICogQWxsb3cgb3ZlcnJpZGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAoVGhhbmtzIHRvIFJ1dWQgV2FpaiBmb3IKKyAgICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQorICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25tZW50IGFyZworICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3YXJkcywgc2luY2UgdGhpcworICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKKyAgICAgICAgc2VlbSB0byBoZWxwIGluIGFueSBvdGhlcnMuCisgICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lzdGVtIG1lbW9yeSBpbnRvIHN5c21hbGxvYworICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8gc2JyaworICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCisgICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKKyAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKKyAgICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sKKyAgICAgICogSW50cm9kdWNlIE1BTExPQ19GQUlMVVJFX0FDVElPTiwgTU9SRUNPUkVfQ09OVElHVU9VUworICAgICAgICBUaGFua3MgdG8gVG9ueSBFLiBCZW5uZXR0IDx0YmVubmV0dEBudmlkaWEuY29tPiBhbmQgb3RoZXJzLgorICAgICAgKiBJbmNsdWRlIGVycm5vLmggdG8gc3VwcG9ydCBkZWZhdWx0IGZhaWx1cmUgYWN0aW9uLgorCisgICAgVjIuNi42IFN1biBEZWMgIDUgMDc6NDI6MTkgMTk5OSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIHJldHVybiBudWxsIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgICAgICogQWRkZWQgU2V2ZXJhbCBXSU4zMiBjbGVhbnVwcyBmcm9tIE1hcnRpbiBDLiBGb25nIDxtY2ZvbmcgYXQgeWFob28uY29tPgorICAgICAgICAgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcKKyAgICAgICAgICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCisgICAgICAgICAqIENsZWFudXAgaGVhZGVyIGZpbGUgaW5jbHVzaW9uIGZvciBXSU4zMiBwbGF0Zm9ybXMKKyAgICAgICAgICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMKKyAgICAgICAgICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCisgICAgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzCisgICAgICAgICAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspCisgICAgICAgICAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KKyAgICAgICAgICAgdXNhZ2Ugb2YgJ2Fzc2VydCcgaW4gbm9uLVdJTjMyIGNvZGUKKyAgICAgICAgICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvCisgICAgICAgICAgIGF2b2lkIGluZmluaXRlIGxvb3AKKyAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKKworICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXhlZCBvcmRlcmluZyBwcm9ibGVtIHdpdGggYm91bmRhcnktc3RhbXBpbmcKKworICAgIFYyLjYuMyBTdW4gTWF5IDE5IDA4OjE3OjU4IDE5OTYgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBwdmFsbG9jLCBhcyByZWNvbW1lbmRlZCBieSBILkouIExpdQorICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20gV29sZnJhbSBHbG9nZXIKKyAgICAgICogQWRkZWQgYW5vbnltb3VzbHkgZG9uYXRlZCBXSU4zMiBzYnJrIGVtdWxhdGlvbgorICAgICAgKiBNYWxsb2MsIGNhbGxvYywgZ2V0cGFnZXNpemU6IGFkZCBvcHRpbWl6YXRpb25zIGZyb20gUmF5bW9uZCBOaWpzc2VuCisgICAgICAqIG1hbGxvY19leHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyCisgICAgICAgIGZvcmVpZ24gc2Jya3MKKyAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKKworICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgorICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KKyAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCisgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAorICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgorICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCisgICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCisgICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bworICAgICAgICBhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCisgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgorICAgICAgICAocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgICAgICAqIEFkZCBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSBhbmQgdG9wX3BhZCBtYWxsb3B0IHBhcmFtZXRlci4KKyAgICAgICogTW9yZSBwcmVjYXV0aW9ucyBmb3IgY2FzZXMgd2hlcmUgb3RoZXIgcm91dGluZXMgY2FsbCBzYnJrLAorICAgICAgICBjb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQorICAgICAgICBILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCisgICAgICAqIEludmVydGVkIHRoaXMgaGlzdG9yeSBsaXN0CisKKyAgICBWMi42LjEgU2F0IERlYyAgMiAxNDoxMDo1NyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmUtdHVuZWQgYW5kIGZpeGVkIHRvIGJlaGF2ZSBtb3JlIG5pY2VseSB3aXRoIFYyLjYuMCBjaGFuZ2VzLgorICAgICAgKiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hlbWUKKyAgICAgICAgdGhlIHdvcmsgcmVxdWlyZWQgdG8gdW5kbyBiYWQgcHJlYWxsb2NhdGlvbnMgZXhjZWVkcworICAgICAgICB0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCisgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQorICAgICAgICBubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAorICAgICAgICBnaXZlbiBhYm92ZSBjaGFuZ2VzLgorICAgICAgKiBVc2UgYmVzdCBmaXQgZm9yIHZlcnkgbGFyZ2UgY2h1bmtzIHRvIHByZXZlbnQgc29tZSB3b3JzdC1jYXNlcy4KKyAgICAgICogQWRkZWQgc29tZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcKKworICAgIFYyLjYuMCBTYXQgTm92ICA0IDA3OjA1OjIzIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZW1vdmVkIGZvb3RlcnMgd2hlbiBjaHVua3MgYXJlIGluIHVzZS4gVGhhbmtzIHRvCisgICAgICAgIFBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKyAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAgICh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgorCisgICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorCisgICAgVjIuNS4yIFR1ZSBBcHIgIDUgMTY6MjA6NDAgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiByZWFsbG9jOiB0cnkgdG8gZXhwYW5kIGluIGJvdGggZGlyZWN0aW9ucworICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0cmF0ZWd5OworICAgICAgKiByZWFsbG9jOiBvbmx5IGNvbmRpdGlvbmFsbHkgZXhwYW5kIGJhY2t3YXJkcworICAgICAgKiBUcnkgbm90IHRvIHNjYXZlbmdlIHVzZWQgYmlucworICAgICAgKiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24KKyAgICAgICogT2NjYXNpb25hbGx5IGJpbiByZXR1cm4gbGlzdCBjaHVua3MgaW4gZmlyc3Qgc2NhbgorICAgICAgKiBBZGQgYSBmZXcgb3B0aW1pemF0aW9ucyBmcm9tIGNvbGluQG55eDEwLmNzLmR1LmVkdQorCisgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQorICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKKyAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCisgICAgICAgICAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKKyAgICAgICogU2NhbiAyIHJldHVybnMgY2h1bmtzIChub3QganVzdCAxKQorICAgICAgKiBQcm9wYWdhdGUgZmFpbHVyZSBpbiByZWFsbG9jIGlmIG1hbGxvYyByZXR1cm5zIDAKKyAgICAgICogQWRkIHN0dWZmIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIG5vbi1BTlNJIGNvbXBpbGVycworICAgICAgICAgIGZyb20ga3B2QHJlc2VhcmNoLmF0dC5jb20KKworICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogcmVtb3ZlZCBwb3RlbnRpYWwgZm9yIG9kZCBhZGRyZXNzIGFjY2VzcyBpbiBwcmV2X2NodW5rCisgICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oCisgICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24KKyAgICAgICogYW50aWNvc21ldGljczogbWFuZ2xlZCBuYW1lcyBpbiBtYWNyb3MgdG8gZXZhZGUgZGVidWdnZXIgc3RyYW5nZW5lc3MKKyAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDAKKyAgICAgICAgICB3aXRoIGdjYyAmIG5hdGl2ZSBjYyAoaHAsIGRlYyBvbmx5KSBhbGxvd2luZworICAgICAgICAgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCisKKyAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCisgICAgICAgICBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisgCisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZnJ2L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZnJ2L2ZmaS5jCmluZGV4IGNlYzU3ODEuLjU2OThjODkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Zydi9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9mcnYvZmZpLmMKQEAgLTEsNiArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZmZpLmMgLSBDb3B5cmlnaHQgKEMpIDIwMDQgIEFudGhvbnkgR3JlZW4KLSAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAJICAgQ29weXJpZ2h0IChDKSAyMDA4ICBSZWQgSGF0LCBJbmMuCiAgICAKICAgIEZSLVYgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9qYXZhX3Jhd19hcGkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2phdmFfcmF3X2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTM4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9qYXZhX3Jhd19hcGkuYwpAQCAtMCwwICsxLDM1NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGphdmFfcmF3X2FwaS5jIC0gQ29weXJpZ2h0IChjKSAxOTk5LCAyMDA3LCAyMDA4ICBSZWQgSGF0LCBJbmMuCisKKyAgIENsb25lZCBmcm9tIHJhd19hcGkuYworCisgICBSYXdfYXBpLmMgYXV0aG9yOiBLcmVzdGVuIEtyYWIgVGhvcnVwIDxrcmFiQGdudS5vcmc+CisgICBKYXZhX3Jhd19hcGkuYyBhdXRob3I6IEhhbnMtSi4gQm9laG0gPGhib2VobUBocGwuaHAuY29tPgorCisgICAkSWQgJAorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGlzIGRlZmluZXMgYSBKYXZhLSBhbmQgNjQtYml0IHNwZWNpZmljIHZhcmlhbnQgb2YgdGhlIHJhdyBBUEkuCSovCisvKiBJdCBhc3N1bWVzIHRoYXQgInJhdyIgYXJndW1lbnQgYmxvY2tzIGxvb2sgbGlrZSBKYXZhIHN0YWNrcyBvbiBhCSovCisvKiA2NC1iaXQgbWFjaGluZS4gIEFyZ3VtZW50cyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gYSBzaW5nbGUgc3RhY2sJKi8KKy8qIHN0YWNrIHNsb3RzIChsb25ncywgZG91Ymxlcykgb2NjdXB5IDEyOCBiaXRzLCBidXQgb25seSB0aGUgZmlyc3QJKi8KKy8qIDY0IGJpdHMgYXJlIGFjdHVhbGx5IHVzZWQuCQkJCQkJKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmICFkZWZpbmVkKE5PX0pBVkFfUkFXX0FQSSkgJiYgIWRlZmluZWQoRkZJX05PX1JBV19BUEkpCisKK3NpemVfdAorZmZpX2phdmFfcmF3X3NpemUgKGZmaV9jaWYgKmNpZikKK3sKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIGludCBpOworCisgIGZmaV90eXBlICoqYXQgPSBjaWYtPmFyZ190eXBlczsKKworICBmb3IgKGkgPSBjaWYtPm5hcmdzLTE7IGkgPj0gMDsgaS0tLCBhdCsrKQorICAgIHsKKyAgICAgIHN3aXRjaCgoKmF0KSAtPiB0eXBlKSB7CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICByZXN1bHQgKz0gMiAqIEZGSV9TSVpFT0ZfSkFWQV9SQVc7CisJICBicmVhazsKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIC8qIE5vIHN0cnVjdHVyZSBwYXJhbWV0ZXJzIGluIEphdmEuCSovCisJICBhYm9ydCgpOworCWRlZmF1bHQ6CisJICByZXN1bHQgKz0gRkZJX1NJWkVPRl9KQVZBX1JBVzsKKyAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkgKGZmaV9jaWYgKmNpZiwgZmZpX2phdmFfcmF3ICpyYXcsIHZvaWQgKiphcmdzKQoreworICB1bnNpZ25lZCBpOworICBmZmlfdHlwZSAqKnRwID0gY2lmLT5hcmdfdHlwZXM7CisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgeworICAgICAgc3dpdGNoICgoKnRwKS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgKmFyZ3MgPSAodm9pZCopICgoY2hhciopKHJhdysrKSArIDMpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICphcmdzID0gKHZvaWQqKSAoKGNoYXIqKShyYXcrKykgKyAyKTsKKwkgIGJyZWFrOworCisjaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA4CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICAqYXJncyA9ICh2b2lkICopcmF3OworCSAgcmF3ICs9IDI7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgKmFyZ3MgPSAodm9pZCopICYocmF3KyspLT5wdHI7CisJICBicmVhazsKKworCWRlZmF1bHQ6CisJICAqYXJncyA9IHJhdzsKKwkgIHJhdyArPQorCSAgICBBTElHTiAoKCp0cCktPnNpemUsIHNpemVvZihmZmlfamF2YV9yYXcpKSAvIHNpemVvZihmZmlfamF2YV9yYXcpOworCX0KKyAgICB9CisKKyNlbHNlIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisjaWYgIVBEUAorCisgIC8qIHRoZW4gYXNzdW1lIGxpdHRsZSBlbmRpYW4gKi8KKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsKKyNpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDgKKyAgICAgIHN3aXRjaCgoKnRwKS0+dHlwZSkgeworCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgKmFyZ3MgPSAodm9pZCopIHJhdzsKKwkgIHJhdyArPSAyOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICphcmdzID0gKHZvaWQqKSByYXcrKzsKKyAgICAgIH0KKyNlbHNlIC8qIEZGSV9TSVpFT0ZfSkFWQV9SQVcgIT0gOCAqLworCSphcmdzID0gKHZvaWQqKSByYXc7CisJcmF3ICs9CisJICBBTElHTiAoKCp0cCktPnNpemUsIHNpemVvZihmZmlfamF2YV9yYXcpKSAvIHNpemVvZihmZmlfamF2YV9yYXcpOworI2VuZGlmIC8qIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gOCAqLworICAgIH0KKworI2Vsc2UKKyNlcnJvciAicGRwIGVuZGlhbiBub3Qgc3VwcG9ydGVkIgorI2VuZGlmIC8qICEgUERQICovCisKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KK30KKwordm9pZAorZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKiphcmdzLCBmZmlfamF2YV9yYXcgKnJhdykKK3sKKyAgdW5zaWduZWQgaTsKKyAgZmZpX3R5cGUgKip0cCA9IGNpZi0+YXJnX3R5cGVzOworCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CisgICAgICBzd2l0Y2ggKCgqdHApLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihVSU5UMzIqKShyYXcrKykgPSAqKFVJTlQ4KikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT51aW50ID0gKihVSU5UOCopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UODoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooU0lOVDMyKikocmF3KyspID0gKihTSU5UOCopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDgqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihVSU5UMzIqKShyYXcrKykgPSAqKFVJTlQxNiopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDE2KikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooU0lOVDMyKikocmF3KyspID0gKihTSU5UMTYqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQxNiopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFVJTlQzMiopKHJhdysrKSA9ICooVUlOVDMyKikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT51aW50ID0gKihVSU5UMzIqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihTSU5UMzIqKShyYXcrKykgPSAqKFNJTlQzMiopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDMyKikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgKHJhdysrKS0+Zmx0ID0gKihGTE9BVDMyKikgKCphcmdzKTsKKwkgIGJyZWFrOworCisjaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA4CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICByYXctPnVpbnQgPSAqKFVJTlQ2NCopICgqYXJncyk7CisJICByYXcgKz0gMjsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICAocmF3KyspLT5wdHIgPSAqKih2b2lkKioqKSBhcmdzOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gOAorCSAgRkZJX0FTU0VSVCgwKTsJLyogU2hvdWxkIGhhdmUgY292ZXJlZCBhbGwgY2FzZXMgKi8KKyNlbHNlCisJICBtZW1jcHkgKCh2b2lkKikgcmF3LT5kYXRhLCAodm9pZCopKmFyZ3MsICgqdHApLT5zaXplKTsKKwkgIHJhdyArPQorCSAgICBBTElHTiAoKCp0cCktPnNpemUsIHNpemVvZihmZmlfamF2YV9yYXcpKSAvIHNpemVvZihmZmlfamF2YV9yYXcpOworI2VuZGlmCisJfQorICAgIH0KK30KKworI2lmICFGRklfTkFUSVZFX1JBV19BUEkKKworc3RhdGljIHZvaWQKK2ZmaV9qYXZhX3J2YWx1ZV90b19yYXcgKGZmaV9jaWYgKmNpZiwgdm9pZCAqcnZhbHVlKQoreworI2lmIFdPUkRTX0JJR0VORElBTiAmJiBGRklfU0laRU9GX0FSRyA9PSA4CisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICAgICooVUlOVDY0ICopcnZhbHVlIDw8PSAzMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyAgICBjYXNlIEZGSV9UWVBFX0lOVDoKKyNpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDQKKyAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisjZW5kaWYKKyAgICAgICooU0lOVDY0ICopcnZhbHVlIDw8PSAzMjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSAoZmZpX2NpZiAqY2lmLCB2b2lkICpydmFsdWUpCit7CisjaWYgV09SRFNfQklHRU5ESUFOICYmIEZGSV9TSVpFT0ZfQVJHID09IDgKKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgICAgKihVSU5UNjQgKilydmFsdWUgPj49IDMyOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorICAgIGNhc2UgRkZJX1RZUEVfSU5UOgorICAgICAgKihTSU5UNjQgKilydmFsdWUgPj49IDMyOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCit9CisKKy8qIFRoaXMgaXMgYSBnZW5lcmljIGRlZmluaXRpb24gb2YgZmZpX3Jhd19jYWxsLCB0byBiZSB1c2VkIGlmIHRoZQorICogbmF0aXZlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGEgbWFjaGluZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAqIEhhdmluZyB0aGlzLCBhbGxvd3MgY29kZSB0byBiZSB3cml0dGVuIGZvciB0aGUgcmF3IEFQSSwgd2l0aG91dAorICogdGhlIG5lZWQgZm9yIHN5c3RlbS1zcGVjaWZpYyBjb2RlIHRvIGhhbmRsZSBpbnB1dCBpbiB0aGF0IGZvcm1hdDsKKyAqIHRoZXNlIGZvbGxvd2luZyBjb3VwbGUgb2YgZnVuY3Rpb25zIHdpbGwgaGFuZGxlIHRoZSB0cmFuc2xhdGlvbiBmb3J0aAorICogYW5kIGJhY2sgYXV0b21hdGljYWxseS4gKi8KKwordm9pZCBmZmlfamF2YV9yYXdfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsCisJCQlmZmlfamF2YV9yYXcgKnJhdykKK3sKKyAgdm9pZCAqKmF2YWx1ZSA9ICh2b2lkKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCopKTsKKyAgZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5IChjaWYsIHJhdywgYXZhbHVlKTsKKyAgZmZpX2NhbGwgKGNpZiwgZm4sIHJ2YWx1ZSwgYXZhbHVlKTsKKyAgZmZpX2phdmFfcnZhbHVlX3RvX3JhdyAoY2lmLCBydmFsdWUpOworfQorCisjaWYgRkZJX0NMT1NVUkVTCQkvKiBiYXNlIHN5c3RlbSBwcm92aWRlcyBjbG9zdXJlcyAqLworCitzdGF0aWMgdm9pZAorZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MgKGZmaV9jaWYgKmNpZiwgdm9pZCAqcnZhbHVlLAorCQkgICAgdm9pZCAqKmF2YWx1ZSwgdm9pZCAqdXNlcl9kYXRhKQoreworICBmZmlfamF2YV9yYXcgKnJhdyA9IChmZmlfamF2YV9yYXcqKWFsbG9jYSAoZmZpX2phdmFfcmF3X3NpemUgKGNpZikpOworICBmZmlfcmF3X2Nsb3N1cmUgKmNsID0gKGZmaV9yYXdfY2xvc3VyZSopdXNlcl9kYXRhOworCisgIGZmaV9qYXZhX3B0cmFycmF5X3RvX3JhdyAoY2lmLCBhdmFsdWUsIHJhdyk7CisgICgqY2wtPmZ1bikgKGNpZiwgcnZhbHVlLCByYXcsIGNsLT51c2VyX2RhdGEpOworICBmZmlfamF2YV9yYXdfdG9fcnZhbHVlIChjaWYsIHJ2YWx1ZSk7Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jIChmZmlfamF2YV9yYXdfY2xvc3VyZSogY2wsCisJCQkgICAgICAgZmZpX2NpZiAqY2lmLAorCQkJICAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9qYXZhX3Jhdyosdm9pZCopLAorCQkJICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCSAgICAgICB2b2lkICpjb2RlbG9jKQoreworICBmZmlfc3RhdHVzIHN0YXR1czsKKworICBzdGF0dXMgPSBmZmlfcHJlcF9jbG9zdXJlX2xvYyAoKGZmaV9jbG9zdXJlKikgY2wsCisJCQkJIGNpZiwKKwkJCQkgJmZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzLAorCQkJCSBjb2RlbG9jLAorCQkJCSBjb2RlbG9jKTsKKyAgaWYgKHN0YXR1cyA9PSBGRklfT0spCisgICAgeworICAgICAgY2wtPmZ1biAgICAgICA9IGZ1bjsKKyAgICAgIGNsLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qIEFnYWluLCBoZXJlIGlzIHRoZSBnZW5lcmljIHZlcnNpb24gb2YgZmZpX3ByZXBfcmF3X2Nsb3N1cmUsIHdoaWNoCisgKiB3aWxsIGluc3RhbGwgYW4gaW50ZXJtZWRpYXRlICJodWIiIGZvciB0cmFuc2xhdGlvbiBvZiBhcmd1bWVudHMgZnJvbQorICogdGhlIHBvaW50ZXItYXJyYXkgZm9ybWF0LCB0byB0aGUgcmF3IGZvcm1hdCAqLworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlIChmZmlfamF2YV9yYXdfY2xvc3VyZSogY2wsCisJCQkgICBmZmlfY2lmICpjaWYsCisJCQkgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJCSAgIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgcmV0dXJuIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jIChjbCwgY2lmLCBmdW4sIHVzZXJfZGF0YSwgY2wpOworfQorCisjZW5kaWYgLyogRkZJX0NMT1NVUkVTICovCisjZW5kaWYgLyogIUZGSV9OQVRJVkVfUkFXX0FQSSAqLworI2VuZGlmIC8qICFGRklfTk9fUkFXX0FQSSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKaW5kZXggYjY4ODdiZS4uZDcxNGNjOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCkBAIC05OSw3ICs5OSw3IEBACiAKICAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOwogCi0gIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7IGk7IGktLSwgcF9hcmcrKykKKyAgZm9yIChpID0gMCwgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsgaSA8IGVjaWYtPmNpZi0+bmFyZ3M7IGkrKywgcF9hcmcrKykKICAgICB7CiAgICAgICBzaXplX3QgejsKICAgICAgIHVuc2lnbmVkIGludCBhOwpAQCAtMTIzLDkgKzEyMywyNSBAQAogCiAgICAgICAgICAgLyogVGhlIHNpemUgb2YgYSBwb2ludGVyIGRlcGVuZHMgb24gdGhlIEFCSSAqLwogICAgICAgICAgIGlmICh0eXBlID09IEZGSV9UWVBFX1BPSU5URVIpCi0gICAgICAgICAgICB0eXBlID0KLSAgICAgICAgICAgICAgKGVjaWYtPmNpZi0+YWJpID09IEZGSV9ONjQpID8gRkZJX1RZUEVfU0lOVDY0IDogRkZJX1RZUEVfU0lOVDMyOworICAgICAgICAgICAgdHlwZSA9IChlY2lmLT5jaWYtPmFiaSA9PSBGRklfTjY0CisJCSAgICB8fCBlY2lmLT5jaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQpCisJICAgICAgPyBGRklfVFlQRV9TSU5UNjQgOiBGRklfVFlQRV9TSU5UMzI7CiAKKwlpZiAoaSA8IDggJiYgKGVjaWYtPmNpZi0+YWJpID09IEZGSV9OMzJfU09GVF9GTE9BVAorCQkgICAgICB8fCBlY2lmLT5jaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQpKQorCSAgeworCSAgICBzd2l0Y2ggKHR5cGUpCisJICAgICAgeworCSAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJCXR5cGUgPSBGRklfVFlQRV9VSU5UMzI7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCQl0eXBlID0gRkZJX1RZUEVfVUlOVDY0OworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgICB9CisJICB9CiAJICBzd2l0Y2ggKHR5cGUpCiAJICAgIHsKIAkgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgpAQCAtMjA1LDEzICsyMjEsMTcgQEAKICAgIGRlZmluaXRpb25zIGFuZCBnZW5lcmF0ZXMgdGhlIGFwcHJvcHJpYXRlIGZsYWdzLiAqLwogCiBzdGF0aWMgdW5zaWduZWQKLWNhbGNfbjMyX3N0cnVjdF9mbGFncyhmZmlfdHlwZSAqYXJnLCB1bnNpZ25lZCAqbG9jLCB1bnNpZ25lZCAqYXJnX3JlZykKK2NhbGNfbjMyX3N0cnVjdF9mbGFncyhpbnQgc29mdF9mbG9hdCwgZmZpX3R5cGUgKmFyZywKKwkJICAgICAgdW5zaWduZWQgKmxvYywgdW5zaWduZWQgKmFyZ19yZWcpCiB7CiAgIHVuc2lnbmVkIGZsYWdzID0gMDsKICAgdW5zaWduZWQgaW5kZXggPSAwOwogCiAgIGZmaV90eXBlICplOwogCisgIGlmIChzb2Z0X2Zsb2F0KQorICAgIHJldHVybiAwOworCiAgIHdoaWxlICgoZSA9IGFyZy0+ZWxlbWVudHNbaW5kZXhdKSkKICAgICB7CiAgICAgICAvKiBBbGlnbiB0aGlzIG9iamVjdC4gICovCkBAIC0yMzYsNyArMjU2LDcgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkCi1jYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKGZmaV90eXBlICphcmcpCitjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKGludCBzb2Z0X2Zsb2F0LCBmZmlfdHlwZSAqYXJnKQogewogICB1bnNpZ25lZCBmbGFncyA9IDA7CiAgIHVuc2lnbmVkIHNtYWxsID0gRkZJX1RZUEVfU01BTExTVFJVQ1Q7CkBAIC0yNTYsNiArMjc2LDcgQEAKICAgICBzbWFsbCA9IEZGSV9UWVBFX1NNQUxMU1RSVUNUMjsKIAogICBlID0gYXJnLT5lbGVtZW50c1swXTsKKwogICBpZiAoZS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCiAgICAgZmxhZ3MgPSBGRklfVFlQRV9ET1VCTEU7CiAgIGVsc2UgaWYgKGUtPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCkBAIC0yNzYsNiArMjk3LDggQEAKIAkgICAgIGZsb2F0cyEgVGhpcyBtdXN0IGJlIHBhc3NlZCB0aGUgb2xkIHdheS4gKi8KIAkgIHJldHVybiBzbWFsbDsKIAl9CisgICAgICBpZiAoc29mdF9mbG9hdCkKKwlmbGFncyArPSBGRklfVFlQRV9TVFJVQ1RfU09GVDsKICAgICB9CiAgIGVsc2UKICAgICBpZiAoIWZsYWdzKQpAQCAtMzgyLDE2ICs0MDUsMTkgQEAKICNpZmRlZiBGRklfTUlQU19OMzIKICAgLyogU2V0IHRoZSBmbGFncyBuZWNlc3NhcnkgZm9yIE4zMiBwcm9jZXNzaW5nICovCiAgIHsKKyAgICBpbnQgdHlwZTsKICAgICB1bnNpZ25lZCBhcmdfcmVnID0gMDsKICAgICB1bnNpZ25lZCBsb2MgPSAwOwogICAgIHVuc2lnbmVkIGNvdW50ID0gKGNpZi0+bmFyZ3MgPCA4KSA/IGNpZi0+bmFyZ3MgOiA4OwogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKIAogICAgIHVuc2lnbmVkIHN0cnVjdF9mbGFncyA9IDA7CisgICAgaW50IHNvZnRfZmxvYXQgPSAoY2lmLT5hYmkgPT0gRkZJX04zMl9TT0ZUX0ZMT0FUCisJCSAgICAgIHx8IGNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVCk7CiAKICAgICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCiAgICAgICB7Ci0Jc3RydWN0X2ZsYWdzID0gY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyhjaWYtPnJ0eXBlKTsKKwlzdHJ1Y3RfZmxhZ3MgPSBjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKHNvZnRfZmxvYXQsIGNpZi0+cnR5cGUpOwogCiAJaWYgKHN0cnVjdF9mbGFncyA9PSAwKQogCSAgewpAQCAtNDExLDcgKzQzNywyMiBAQAogCiAgICAgd2hpbGUgKGNvdW50LS0gPiAwICYmIGFyZ19yZWcgPCA4KQogICAgICAgewotCXN3aXRjaCAoKGNpZi0+YXJnX3R5cGVzKVtpbmRleF0tPnR5cGUpCisJdHlwZSA9IChjaWYtPmFyZ190eXBlcylbaW5kZXhdLT50eXBlOworCWlmIChzb2Z0X2Zsb2F0KQorCSAgeworCSAgICBzd2l0Y2ggKHR5cGUpCisJICAgICAgeworCSAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJCXR5cGUgPSBGRklfVFlQRV9VSU5UMzI7CisJCWJyZWFrOworCSAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCQl0eXBlID0gRkZJX1RZUEVfVUlOVDY0OworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgICB9CisJICB9CisJc3dpdGNoICh0eXBlKQogCSAgewogCSAgY2FzZSBGRklfVFlQRV9GTE9BVDoKIAkgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgpAQCAtNDIzLDE3ICs0NjQsMjUgQEAKICAgICAgICAgICAgIC8qIEFsaWduIGl0LiAgKi8KICAgICAgICAgICAgIGFyZ19yZWcgPSBBTElHTihhcmdfcmVnLCAyKTsKICAgICAgICAgICAgIC8qIFRyZWF0IGl0IGFzIHR3byBhZGphY2VudCBkb3VibGVzLiAgKi8KLQkgICAgY2lmLT5mbGFncyArPQotICAgICAgICAgICAgICAoRkZJX1RZUEVfRE9VQkxFIDw8IChhcmdfcmVnICogRkZJX0ZMQUdfQklUUykpOwotICAgICAgICAgICAgYXJnX3JlZysrOwotCSAgICBjaWYtPmZsYWdzICs9Ci0gICAgICAgICAgICAgIChGRklfVFlQRV9ET1VCTEUgPDwgKGFyZ19yZWcgKiBGRklfRkxBR19CSVRTKSk7Ci0gICAgICAgICAgICBhcmdfcmVnKys7CisJICAgIGlmIChzb2Z0X2Zsb2F0KSAKKwkgICAgICB7CisJCWFyZ19yZWcgKz0gMjsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCWNpZi0+ZmxhZ3MgKz0KKwkJICAoRkZJX1RZUEVfRE9VQkxFIDw8IChhcmdfcmVnICogRkZJX0ZMQUdfQklUUykpOworCQlhcmdfcmVnKys7CisJCWNpZi0+ZmxhZ3MgKz0KKwkJICAoRkZJX1RZUEVfRE9VQkxFIDw8IChhcmdfcmVnICogRkZJX0ZMQUdfQklUUykpOworCQlhcmdfcmVnKys7CisJICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKIAkgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgogICAgICAgICAgICAgbG9jID0gYXJnX3JlZyAqIEZGSV9TSVpFT0ZfQVJHOwotCSAgICBjaWYtPmZsYWdzICs9IGNhbGNfbjMyX3N0cnVjdF9mbGFncygoY2lmLT5hcmdfdHlwZXMpW2luZGV4XSwKKwkgICAgY2lmLT5mbGFncyArPSBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3Moc29mdF9mbG9hdCwKKwkJCQkJCShjaWYtPmFyZ190eXBlcylbaW5kZXhdLAogCQkJCQkJJmxvYywgJmFyZ19yZWcpOwogCSAgICBicmVhazsKIApAQCAtNDY5LDE3ICs1MTgsNDMgQEAKICAgICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKIAkvKiBEbyBub3RoaW5nLCAnY2F1c2UgRkZJX1RZUEVfVk9JRCBpcyAwICovCiAJYnJlYWs7Ci0JCi0gICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgotICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JY2lmLT5mbGFncyArPSBjaWYtPnJ0eXBlLT50eXBlIDw8IChGRklfRkxBR19CSVRTICogOCk7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwlpZiAoY2lmLT5hYmkgPT0gRkZJX04zMl9TT0ZUX0ZMT0FUIHx8IGNpZi0+YWJpID09IEZGSV9OMzIpCisJICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NJTlQzMiA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCWVsc2UKKwkgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfSU5UIDw8IChGRklfRkxBR19CSVRTICogOCk7CiAJYnJlYWs7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJaWYgKHNvZnRfZmxvYXQpCisJICB7CisJICAgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU0lOVDMyIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJICAgIGJyZWFrOworCSAgfQorCS8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKwlpZiAoc29mdF9mbG9hdCkKKwkgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfSU5UIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJZWxzZQorCSAgY2lmLT5mbGFncyArPSBjaWYtPnJ0eXBlLT50eXBlIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJYnJlYWs7CisKICAgICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKIAkvKiBMb25nIGRvdWJsZSBpcyByZXR1cm5lZCBhcyBpZiBpdCB3ZXJlIGEgc3RydWN0IGNvbnRhaW5pbmcKIAkgICB0d28gZG91Ymxlcy4gICovCi0JY2lmLT5mbGFncyArPSBGRklfVFlQRV9TVFJVQ1QgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKLQljaWYtPmZsYWdzICs9IChGRklfVFlQRV9ET1VCTEUgKyAoRkZJX1RZUEVfRE9VQkxFIDw8IEZGSV9GTEFHX0JJVFMpKQotCQkgICAgICA8PCAoNCArIChGRklfRkxBR19CSVRTICogOCkpOworCWlmIChzb2Z0X2Zsb2F0KQorCSAgeworCSAgICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NUUlVDVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCSAgICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NNQUxMU1RSVUNUMiA8PCAoNCArIChGRklfRkxBR19CSVRTICogOCkpOworIAkgIH0KKwllbHNlCisJICB7CisJICAgIGNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU1RSVUNUIDw8IChGRklfRkxBR19CSVRTICogOCk7CisJICAgIGNpZi0+ZmxhZ3MgKz0gKEZGSV9UWVBFX0RPVUJMRQorCQkJICAgKyAoRkZJX1RZUEVfRE9VQkxFIDw8IEZGSV9GTEFHX0JJVFMpKQorCQkJCQkgICAgICA8PCAoNCArIChGRklfRkxBR19CSVRTICogOCkpOworCSAgfQogCWJyZWFrOwogICAgICAgZGVmYXVsdDoKIAljaWYtPmZsYWdzICs9IEZGSV9UWVBFX0lOVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOwpAQCAtNDk5LDcgKzU3NCw3IEBACiAvKiBMb3cgbGV2ZWwgcm91dGluZSBmb3IgY2FsbGluZyBOMzIgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGZmaV9jYWxsX04zMih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqLCBpbnQsIGludCksIAogCQkJZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCAKLQkJCXVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqKSh2b2lkKSk7CisJCQl1bnNpZ25lZCwgdm9pZCAqLCB2b2lkICgqKSh2b2lkKSk7CiAKIHZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCiB7CkBAIC01MjksMTAgKzYwNCwxMyBAQAogCiAjaWZkZWYgRkZJX01JUFNfTjMyCiAgICAgY2FzZSBGRklfTjMyOgorICAgIGNhc2UgRkZJX04zMl9TT0ZUX0ZMT0FUOgogICAgIGNhc2UgRkZJX042NDoKKyAgICBjYXNlIEZGSV9ONjRfU09GVF9GTE9BVDoKICAgICAgIHsKICAgICAgICAgaW50IGNvcHlfcnZhbHVlID0gMDsKLSAgICAgICAgdm9pZCAqcnZhbHVlX2NvcHkgPSBlY2lmLnJ2YWx1ZTsKKwlpbnQgY29weV9vZmZzZXQgPSAwOworICAgICAgICBjaGFyICpydmFsdWVfY29weSA9IGVjaWYucnZhbHVlOwogICAgICAgICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgY2lmLT5ydHlwZS0+c2l6ZSA8IDE2KQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIEZvciBzdHJ1Y3R1cmVzIHNtYWxsZXIgdGhhbiAxNiBieXRlcyB3ZSBjbG9iYmVyIG1lbW9yeQpAQCAtNTQxLDEwICs2MTksMjAgQEAKICAgICAgICAgICAgIHJ2YWx1ZV9jb3B5ID0gYWxsb2NhKDE2KTsKICAgICAgICAgICAgIGNvcHlfcnZhbHVlID0gMTsKICAgICAgICAgICB9CisJZWxzZSBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVAorCQkgJiYgKGNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVAorCQkgICAgIHx8IGNpZi0+YWJpID09IEZGSV9OMzJfU09GVF9GTE9BVCkpCisJICB7CisJICAgIHJ2YWx1ZV9jb3B5ID0gYWxsb2NhICg4KTsKKwkgICAgY29weV9ydmFsdWUgPSAxOworI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfTUlQU0VCKQorCSAgICBjb3B5X29mZnNldCA9IDQ7CisjZW5kaWYKKwkgIH0KICAgICAgICAgZmZpX2NhbGxfTjMyKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgY2lmLT5mbGFncywgcnZhbHVlX2NvcHksIGZuKTsKICAgICAgICAgaWYgKGNvcHlfcnZhbHVlKQotICAgICAgICAgIG1lbWNweShlY2lmLnJ2YWx1ZSwgcnZhbHVlX2NvcHksIGNpZi0+cnR5cGUtPnNpemUpOworICAgICAgICAgIG1lbWNweShlY2lmLnJ2YWx1ZSwgcnZhbHVlX2NvcHkgKyBjb3B5X29mZnNldCwgY2lmLT5ydHlwZS0+c2l6ZSk7CiAgICAgICB9CiAgICAgICBicmVhazsKICNlbmRpZgpAQCAtNjg0LDkgKzc3MiwxMCBAQAogICAgIHsKICAgICAgIGlmIChpIDwgMiAmJiAhc2Vlbl9pbnQgJiYKIAkgIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQgfHwKLQkgICBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKSkKKwkgICBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFIHx8CisJICAgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpKQogCXsKLSNpZmRlZiBfX01JUFNFQl9fCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9NSVBTRUIpCiAJICBpZiAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQogCSAgICBhdmFsdWVwW2ldID0gKChjaGFyICopICZmcHJbaV0pICsgc2l6ZW9mIChmbG9hdCk7CiAJICBlbHNlCkBAIC03NTUsNyArODQ0LDcgQEAKIHN0YXRpYyB2b2lkCiBjb3B5X3N0cnVjdF9OMzIoY2hhciAqdGFyZ2V0LCB1bnNpZ25lZCBvZmZzZXQsIGZmaV9hYmkgYWJpLCBmZmlfdHlwZSAqdHlwZSwKICAgICAgICAgICAgICAgICBpbnQgYXJnbiwgdW5zaWduZWQgYXJnX29mZnNldCwgZmZpX2FyZyAqYXIsCi0gICAgICAgICAgICAgICAgZmZpX2FyZyAqZnByKQorICAgICAgICAgICAgICAgIGZmaV9hcmcgKmZwciwgaW50IHNvZnRfZmxvYXQpCiB7CiAgIGZmaV90eXBlICoqZWx0X3R5cGVwID0gdHlwZS0+ZWxlbWVudHM7CiAgIHdoaWxlKCplbHRfdHlwZXApCkBAIC03NzcsNyArODY2LDcgQEAKIAogICAgICAgdHAgPSB0YXJnZXQgKyBvZmZzZXQ7CiAKLSAgICAgIGlmIChlbHRfdHlwZS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisgICAgICBpZiAoZWx0X3R5cGUtPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFICYmICFzb2Z0X2Zsb2F0KQogICAgICAgICAqKGRvdWJsZSAqKXRwID0gKihkb3VibGUgKilmcHA7CiAgICAgICBlbHNlCiAgICAgICAgIG1lbWNweSh0cCwgYXJncCArIGFyZ19vZmZzZXQsIGVsdF90eXBlLT5zaXplKTsKQEAgLTgxNSw4ICs5MDQsMTIgQEAKICAgZmZpX2FyZyAqYXZhbHVlOwogICBmZmlfdHlwZSAqKmFyZ190eXBlczsKICAgaW50IGksIGF2biwgYXJnbjsKKyAgaW50IHNvZnRfZmxvYXQ7CisgIGZmaV9hcmcgKmFyZ3A7CiAKICAgY2lmID0gY2xvc3VyZS0+Y2lmOworICBzb2Z0X2Zsb2F0ID0gY2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUCisgICAgfHwgY2lmLT5hYmkgPT0gRkZJX04zMl9TT0ZUX0ZMT0FUOwogICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKGZmaV9hcmcpKTsKICAgYXZhbHVlcCA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAoZmZpX2FyZykpOwogCkBAIC04MzksMTAgKzkzMiwxNiBAQAogICB3aGlsZSAoaSA8IGF2bikKICAgICB7CiAgICAgICBpZiAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUCi0gICAgICAgICAgfHwgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKwkgIHx8IGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUKKwkgIHx8IGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQogICAgICAgICB7Ci0gICAgICAgICAgZmZpX2FyZyAqYXJncCA9IGFyZ24gPj0gOCA/IGFyICsgYXJnbiA6IGZwciArIGFyZ247Ci0jaWZkZWYgX19NSVBTRUJfXworICAgICAgICAgIGFyZ3AgPSAoYXJnbiA+PSA4IHx8IHNvZnRfZmxvYXQpID8gYXIgKyBhcmduIDogZnByICsgYXJnbjsKKyAgICAgICAgICBpZiAoKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKSAmJiAoKHVuc2lnbmVkKWFyZ3AgJiAoYXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQtMSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBhcmdwPShmZmlfYXJnKilBTElHTihhcmdwLGFyZ190eXBlc1tpXS0+YWxpZ25tZW50KTsKKyAgICAgICAgICAgICAgYXJnbisrOworICAgICAgICAgICAgfQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfTUlQU0VCKQogICAgICAgICAgIGlmIChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQgJiYgYXJnbiA8IDgpCiAgICAgICAgICAgICBhdmFsdWVwW2ldID0gKChjaGFyICopIGFyZ3ApICsgc2l6ZW9mIChmbG9hdCk7CiAgICAgICAgICAgZWxzZQpAQCAtODU2LDExICs5NTUsMTUgQEAKICAgICAgICAgICBpZiAoYXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQgPiBzaXplb2YoZmZpX2FyZykpCiAgICAgICAgICAgICBhcmduID0gQUxJR04oYXJnbiwgYXJnX3R5cGVzW2ldLT5hbGlnbm1lbnQgLyBzaXplb2YoZmZpX2FyZykpOwogCi0gICAgICAgICAgZmZpX2FyZyAqYXJncCA9IGFyICsgYXJnbjsKKyAgICAgICAgICBhcmdwID0gYXIgKyBhcmduOwogCiAgICAgICAgICAgLyogVGhlIHNpemUgb2YgYSBwb2ludGVyIGRlcGVuZHMgb24gdGhlIEFCSSAqLwogICAgICAgICAgIGlmICh0eXBlID09IEZGSV9UWVBFX1BPSU5URVIpCi0gICAgICAgICAgICB0eXBlID0gKGNpZi0+YWJpID09IEZGSV9ONjQpID8gRkZJX1RZUEVfU0lOVDY0IDogRkZJX1RZUEVfU0lOVDMyOworICAgICAgICAgICAgdHlwZSA9IChjaWYtPmFiaSA9PSBGRklfTjY0IHx8IGNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVCkKKwkgICAgICA/IEZGSV9UWVBFX1NJTlQ2NCA6IEZGSV9UWVBFX1NJTlQzMjsKKworCSAgaWYgKHNvZnRfZmxvYXQgJiYgdHlwZSA9PSAgRkZJX1RZUEVfRkxPQVQpCisJICAgIHR5cGUgPSBGRklfVFlQRV9VSU5UMzI7CiAKICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAgICB7CkBAIC05MDEsNyArMTAwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBpdCB3YXMgcGFzc2VkIGluIHJlZ2lzdGVycy4gICovCiAgICAgICAgICAgICAgICAgICBhdmFsdWVwW2ldID0gYWxsb2NhKGFyZ190eXBlc1tpXS0+c2l6ZSk7CiAgICAgICAgICAgICAgICAgICBjb3B5X3N0cnVjdF9OMzIoYXZhbHVlcFtpXSwgMCwgY2lmLT5hYmksIGFyZ190eXBlc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmduLCAwLCBhciwgZnByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmduLCAwLCBhciwgZnByLCBzb2Z0X2Zsb2F0KTsKIAogICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpdGFyZ2V0LmgKaW5kZXggMjE0YWZlNC4uYzVmNGUwNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaXRhcmdldC5oCkBAIC0yOCw3ICsyOCwxMCBAQAogI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKIAogI2lmZGVmIGxpbnV4Ci0jaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyMgaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPHNnaWRlZnMuaD4KKyNlbmRpZgogIyAgaWZuZGVmIF9BQklOMzIKICMgICAgZGVmaW5lIF9BQklOMzIgX01JUFNfU0lNX05BQkkzMgogIyAgZW5kaWYKQEAgLTM4LDcgKzQxLDYgQEAKICMgIGlmbmRlZiBfQUJJTzMyCiAjICAgIGRlZmluZSBfQUJJTzMyIF9NSVBTX1NJTV9BQkkzMgogIyAgZW5kaWYKLSNlbmRpZgogCiAjaWYgIWRlZmluZWQoX01JUFNfU0lNKQogLS0gc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcgLS0KQEAgLTk1LDYgKzk3LDE1IEBACiAjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9ERiAgICAgMTg5CiAjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9TTUFMTCAgOTMKICNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX1NNQUxMMiAxMDkKKworLyogYW5kIGZvciBuMzIgc29mdCBmbG9hdCwgYWRkIDE2ICogMl40ICovCisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9EX1NPRlQgICAgICAzMTcKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0ZfU09GVCAgICAgIDMwMQorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCAgICAgNTA5CisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9GRl9TT0ZUICAgICA0MjkKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQgICAgIDQ5MworI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfREZfU09GVCAgICAgNDQ1CisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9TT0ZUICAgICAgICAxNgogI2VuZGlmCiAKICNpZmRlZiBMSUJGRklfQVNNCkBAIC0xNDUsNyArMTU2LDggQEAKICMgZW5kaWYgLyogX01JUFNfU0lNPT1fQUJJNjQgKi8KICNlbmRpZiAvKiAhRkZJX01JUFNfTzMyICovCiAjZWxzZSAvKiAhTElCRkZJX0FTTSAqLwotI2lmZGVmIEZGSV9NSVBTX08zMgorIyBpZmRlZiBfX0dOVUNfXworIyAgaWZkZWYgRkZJX01JUFNfTzMyCiAvKiBPMzIgc3RhY2sgZnJhbWVzIGhhdmUgMzJiaXQgaW50ZWdlciBhcmdzICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgZmZpX2FyZyBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CiB0eXBlZGVmIHNpZ25lZCAgIGludCAgICAgZmZpX3NhcmcgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwpAQCAtMTUzLDcgKzE2NSwxOCBAQAogLyogTjMyIGFuZCBONjQgZnJhbWVzIGhhdmUgNjRiaXQgaW50ZWdlciBhcmdzICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgZmZpX2FyZyBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CiB0eXBlZGVmIHNpZ25lZCAgIGludCAgICAgZmZpX3NhcmcgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwotI2VuZGlmCisjICBlbmRpZgorIyBlbHNlCisjICBpZmRlZiBGRklfTUlQU19PMzIKKy8qIE8zMiBzdGFjayBmcmFtZXMgaGF2ZSAzMmJpdCBpbnRlZ2VyIGFyZ3MgKi8KK3R5cGVkZWYgX191aW50MzJfdCBmZmlfYXJnOwordHlwZWRlZiBfX2ludDMyX3QgZmZpX3Nhcmc7CisjICBlbHNlCisvKiBOMzIgYW5kIE42NCBmcmFtZXMgaGF2ZSA2NGJpdCBpbnRlZ2VyIGFyZ3MgKi8KK3R5cGVkZWYgX191aW50NjRfdCBmZmlfYXJnOwordHlwZWRlZiBfX2ludDY0X3QgZmZpX3Nhcmc7CisjICBlbmRpZgorIyBlbmRpZiAvKiBfX0dOVUNfXyAqLwogCiB0eXBlZGVmIGVudW0gZmZpX2FiaSB7CiAgIEZGSV9GSVJTVF9BQkkgPSAwLApAQCAtMTYxLDYgKzE4NCw4IEBACiAgIEZGSV9OMzIsCiAgIEZGSV9ONjQsCiAgIEZGSV9PMzJfU09GVF9GTE9BVCwKKyAgRkZJX04zMl9TT0ZUX0ZMT0FULAorICBGRklfTjY0X1NPRlRfRkxPQVQsCiAKICNpZmRlZiBGRklfTUlQU19PMzIKICNpZmRlZiBfX21pcHNfc29mdF9mbG9hdApAQCAtMTcwLDkgKzE5NSwxNyBAQAogI2VuZGlmCiAjZWxzZQogIyBpZiBfTUlQU19TSU09PV9BQkk2NAorIyAgaWZkZWYgX19taXBzX3NvZnRfZmxvYXQKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX042NF9TT0ZUX0ZMT0FULAorIyAgZWxzZQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfTjY0LAorIyAgZW5kaWYKICMgZWxzZQorIyAgaWZkZWYgX19taXBzX3NvZnRfZmxvYXQKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX04zMl9TT0ZUX0ZMT0FULAorIyAgZWxzZQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfTjMyLAorIyAgZW5kaWYKICMgZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUwppbmRleCAyODYwN2IwLi5hZTIzMDk0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgbjMyLlMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTgsIDIwMDUgIFJlZCBIYXQsIEluYy4KKyAgIG4zMi5TIC0gQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk4LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwICBSZWQgSGF0LCBJbmMuCiAgICAKICAgIE1JUFMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCiAKQEAgLTE0LDE0ICsxNCwxNCBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgTElCRkZJX0FTTQkKQEAgLTQwLDcgKzQwLDkgQEAKIAogI2RlZmluZSBTSVpFT0ZfRlJBTUUJKCA4ICogRkZJX1NJWkVPRl9BUkcgKQogCisjaWZkZWYgX19HTlVDX18KIAkuYWJpY2FsbHMKKyNlbmRpZgogCS50ZXh0CiAJLmFsaWduCTIKIAkuZ2xvYmwJZmZpX2NhbGxfTjMyCkBAIC0yMTcsOCArMjE5LDEwIEBACiAKIAkjIFNoaWZ0IHRoZSByZXR1cm4gdHlwZSBmbGFnIG92ZXIKIAlTUkwJdDYsIDgqRkZJX0ZMQUdfQklUUwotCQorCisJYmVxCXQ2LCBGRklfVFlQRV9TSU5UMzIsIHJldGludAkKIAlibmUgICAgIHQ2LCBGRklfVFlQRV9JTlQsIHJldGZsb2F0CityZXRpbnQ6CiAJamFsCXQ5CiAJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQogCVJFR19TCXYwLCAwKHQ0KQpAQCAtMjc3LDEyICsyODEsNTggQEAKIAliCWVwaWxvZ3VlCiAJCiByZXRzdHJ1Y3RfZl9kOgkKLQlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9GRCwgcmV0c3RydWN0X3NtYWxsCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRkQsIHJldHN0cnVjdF9kX3NvZnQKIAlqYWwJdDkKIAlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCiAJcy5zCSRmMCwgMCh0NCkKIAlzLmQJJGYyLCA4KHQ0KQogCWIJZXBpbG9ndWUKKworcmV0c3RydWN0X2Rfc29mdDoKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9EX1NPRlQsIHJldHN0cnVjdF9mX3NvZnQKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc2QJdjAsIDAodDQpCisJYgllcGlsb2d1ZQorCQorcmV0c3RydWN0X2Zfc29mdDoJCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRl9TT0ZULCByZXRzdHJ1Y3RfZF9kX3NvZnQKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc3cJdjAsIDAodDQpCisJYgllcGlsb2d1ZQorCQorcmV0c3RydWN0X2RfZF9zb2Z0OgkKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9ERF9TT0ZULCByZXRzdHJ1Y3RfZl9mX3NvZnQKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc2QJdjAsIDAodDQpCisJc2QJdjEsIDgodDQpCisJYgllcGlsb2d1ZQorCQorcmV0c3RydWN0X2ZfZl9zb2Z0OgkKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9GRl9TT0ZULCByZXRzdHJ1Y3RfZF9mX3NvZnQKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc3cJdjAsIDAodDQpCisJc3cJdjEsIDQodDQpCisJYgllcGlsb2d1ZQorCQorcmV0c3RydWN0X2RfZl9zb2Z0OgkKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9ERl9TT0ZULCByZXRzdHJ1Y3RfZl9kX3NvZnQKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc2QJdjAsIDAodDQpCisJc3cJdjEsIDgodDQpCisJYgllcGlsb2d1ZQorCQorcmV0c3RydWN0X2ZfZF9zb2Z0OgkKKwlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9GRF9TT0ZULCByZXRzdHJ1Y3Rfc21hbGwKKwlqYWwJdDkKKwlSRUdfTAl0NCwgNCpGRklfU0laRU9GX0FSRygkZnApCisJc3cJdjAsIDAodDQpCisJc2QJdjEsIDgodDQpCisJYgllcGlsb2d1ZQogCQogcmV0c3RydWN0X3NtYWxsOgkKIAlibmUJdDYsIEZGSV9UWVBFX1NUUlVDVF9TTUFMTCwgcmV0c3RydWN0X3NtYWxsMgpAQCAtNDEzLDYgKzQ2MywxMSBAQAogCWphbHIJdDkKIAogCSMgUmV0dXJuIGZsYWdzIGFyZSBpbiB2MAorCWJuZSAgICAgdjAsIEZGSV9UWVBFX1NJTlQzMiwgY2xzX3JldGludAorCWx3CXYwLCBWMF9PRkYyKCRzcCkKKwliCWNsc19lcGlsb2d1ZQorCitjbHNfcmV0aW50OgogCWJuZSAgICAgdjAsIEZGSV9UWVBFX0lOVCwgY2xzX3JldGZsb2F0CiAJUkVHX0wJdjAsIFYwX09GRjIoJHNwKQogCWIJY2xzX2VwaWxvZ3VlCkBAIC00NzQsNiArNTI5LDcgQEAKIC5MRkUyOgkKIAkuZW5kCWZmaV9jbG9zdXJlX04zMgogCisjaWZkZWYgX19HTlVDX18KICAgICAgICAgLnNlY3Rpb24gICAgICAgIC5laF9mcmFtZSwiYXciLEBwcm9nYml0cwogLkxmcmFtZTE6CiAgICAgICAgIC40Ynl0ZSAgLkxFQ0lFMS0uTFNDSUUxCQkjIGxlbmd0aApAQCAtNTMwLDUgKzU4Niw2IEBACiAJLnVsZWIxMjggKFNJWkVPRl9GUkFNRTIgLSBSQV9PRkYyKS80CiAJLmFsaWduCUVIX0ZSQU1FX0FMSUdOCiAuTEVGREUzOgorI2VuZGlmIC8qIF9fR05VQ19fICovCQogCQogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL28zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9vMzIuUwppbmRleCAyZTgwZTljLi5lYjI3OTgxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL28zMi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbzMyLlMKQEAgLTE0LDE0ICsxNCwxNCBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgTElCRkZJX0FTTQkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2VhYmkuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2VhYmkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzllYTRiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZWFiaS5TCkBAIC0wLDAgKzEsMTI4IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZWFiaS5TIC0gQ29weXJpZ2h0IChjKSAyMDA0ICBBbnRob255IEdyZWVuCisgICAKKyAgIEZSLVYgQXNzZW1ibHkgZ2x1ZS4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBMSUJGRklfQVNNCQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorCisJLmdsb2JsIGZmaV9wcmVwX2FyZ3NfRUFCSQorCisJLnRleHQKKwkucDJhbGlnbiA0CisJLmdsb2JsIGZmaV9jYWxsX0VBQkkKKwkudHlwZSBmZmlfY2FsbF9FQUJJLCBAZnVuY3Rpb24KKworCSMgZ3I4IDogICBmZmlfcHJlcF9hcmdzCisJIyBncjkgOiAgICZlY2lmCisJIyBncjEwOiAgIGNpZi0+Ynl0ZXMKKwkjIGdyMTE6ICAgZmlnLT5mbGFncworCSMgZ3IxMjogICBlY2lmLnJ2YWx1ZQorCSMgZ3IxMzogICBmbgorCQorZmZpX2NhbGxfRUFCSToJCisJYWRkaQlzcCwgIy04MCwgc3AKKwlzdGkJZnAsIEAoc3AsICMyNCkKKwlhZGRpCXNwLCAjMjQsIGZwCisJbW92c2cJbHIsIGdyNQorCisJLyogTWFrZSByb29tIGZvciB0aGUgbmV3IGFyZ3VtZW50cy4gICovCisJLyogc3ViaQlzcCwgZnAsIGdyMTAgKi8KKwkKKwkvKiBTdG9yZSByZXR1cm4gYWRkcmVzcyBhbmQgaW5jb21pbmcgYXJncyBvbiBzdGFjay4gICovCisJc3RpCWdyNSwgQChmcCwgIzgpCisJc3RpCWdyOCwgQChmcCwgIy00KQorCXN0aQlncjksIEAoZnAsICMtOCkKKwlzdGkJZ3IxMCwgQChmcCwgIy0xMikKKwlzdGkJZ3IxMSwgQChmcCwgIy0xNikKKwlzdGkJZ3IxMiwgQChmcCwgIy0yMCkKKwlzdGkJZ3IxMywgQChmcCwgIy0yNCkKKworCXN1YiAgICAgc3AsIGdyMTAsIHNwCisJCisJLyogQ2FsbCBmZmlfcHJlcF9hcmdzLiAgKi8KKwlsZGkJQChmcCwgIy00KSwgZ3I0CisJYWRkaQlzcCwgIzAsIGdyOAorCWxkaQlAKGZwLCAjLTgpLCBncjkKKyNpZmRlZiBfX0ZSVl9GRFBJQ19fCisJbGRkCUAoZ3I0LCBncjApLCBncjE0CisJY2FsbGwJQChncjE0LCBncjApCisjZWxzZQorCWNhbGxsCUAoZ3I0LCBncjApCisjZW5kaWYJCisKKwkvKiBmZmlfcHJlcF9hcmdzIHJldHVybnMgdGhlIG5ldyBzdGFjayBwb2ludGVyLiAgKi8KKwltb3YJZ3I4LCBncjQKKwkJCisJbGRpCUAoc3AsICMwKSwgZ3I4CisJbGRpCUAoc3AsICM0KSwgZ3I5CisJbGRpCUAoc3AsICM4KSwgZ3IxMAorCWxkaQlAKHNwLCAjMTIpLCBncjExCisJbGRpCUAoc3AsICMxNiksIGdyMTIKKwlsZGkJQChzcCwgIzIwKSwgZ3IxMworCisJLyogQWx3YXlzIGNvcHkgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGludG8gdGhlIGhpZGRlbgorCSAgIHBhcmFtZXRlciByZWdpc3Rlci4gIFRoaXMgaXMgb25seSBzdHJpY3RseSBuZWNlc3NhcnkKKwkgICB3aGVuIHdlJ3JlIHJldHVybmluZyBhbiBhZ2dyZWdhdGUgdHlwZSwgYnV0IGl0IGRvZXNuJ3QKKwkgICBodXJ0IHRvIGRvIHRoaXMgYWxsIHRoZSB0aW1lLCBhbmQgaXQgc2F2ZXMgYSBicmFuY2guICAqLworCWxkaQlAKGZwLCAjLTIwKSwgZ3IzCisKKwkvKiBVc2UgdGhlIGZmaV9wcmVwX2FyZ3MgcmV0dXJuIHZhbHVlIGZvciB0aGUgbmV3IHNwLiAgKi8KKwltb3YJZ3I0LCBzcAorCQorCS8qIENhbGwgdGhlIHRhcmdldCBmdW5jdGlvbi4gICovCisJbGRpCUAoZnAsIC0yNCksIGdyNAorI2lmZGVmIF9fRlJWX0ZEUElDX18KKwlsZGQJQChncjQsIGdyMCksIGdyMTQKKwljYWxsbAlAKGdyMTQsIGdyMCkKKyNlbHNlCisJY2FsbGwJQChncjQsIGdyMCkKKyNlbmRpZgkKKworCS8qIFN0b3JlIHRoZSByZXN1bHQuICovCisJbGRpCUAoZnAsICMtMTYpLCBncjEwICAvKiBmaWctPmZsYWdzICovCisJbGRpCUAoZnAsICMtMjApLCBncjQgICAvKiBlY2lmLnJ2YWx1ZSAqLworCisJLyogSXMgdGhlIHJldHVybiB2YWx1ZSBzdG9yZWQgaW4gdHdvIHJlZ2lzdGVycz8gICovCisJY21waQlncjEwLCAjOCwgaWNjMAorCWJuZQlpY2MwLCAwLCAuTDIKKwkvKiAgIFllcywgc2F2ZSB0aGVtLiAgKi8KKwlzdGkJZ3I4LCBAKGdyNCwgIzApCisJc3RpCWdyOSwgQChncjQsICM0KQorCWJyYQkuTDMKKy5MMjoKKwkvKiBJcyB0aGUgcmV0dXJuIHZhbHVlIGEgc3RydWN0dXJlPyAgKi8KKwljbXBpCWdyMTAsICMtMSwgaWNjMAorCWJlcQlpY2MwLCAwLCAuTDMKKwkvKiAgIE5vLCBzYXZlIGEgNCBieXRlIHJldHVybiB2YWx1ZS4gICovCisJc3RpCWdyOCwgQChncjQsICMwKQorLkwzOgkKKworCS8qIFJlc3RvcmUgdGhlIHN0YWNrLCBhbmQgcmV0dXJuLiAgKi8KKwlsZGkJQChmcCwgOCksIGdyNQorCWxkCUAoZnAsIGdyMCksIGZwCisJYWRkaQlzcCwjODAsc3AKKwlqbXBsCUAoZ3I1LGdyMCkKKwkuc2l6ZSBmZmlfY2FsbF9FQUJJLCAuLWZmaV9jYWxsX0VBQkkKKwkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjYmJiOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaS5jCkBAIC0wLDAgKzEsMjc2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpLmMgLSBDb3B5cmlnaHQgKEMpIDIwMDkgIEFudGhvbnkgR3JlZW4KKyAgIAorICAgTW94aWUgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQorICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgKi8KKwordm9pZCAqZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQoreworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKKyAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKKyAgcmVnaXN0ZXIgY2hhciAqYXJncDsKKyAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKKyAgcmVnaXN0ZXIgaW50IGNvdW50ID0gMDsKKworICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisgIGFyZ3AgPSBzdGFjazsKKworICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOworICAgICAgIChpICE9IDApOworICAgICAgIGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKyAgICAgIAorICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworCisgICAgICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorCXsKKwkgIHogPSBzaXplb2Yodm9pZCopOworCSAgKih2b2lkICoqKSBhcmdwID0gKnBfYXJndjsKKwl9IAorICAgICAgLyogICAgICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCisJeworCSAgaWYgKGNvdW50ID4gMjQpCisJICAgIHsKKwkgICAgICAvLyBUaGlzIGlzIGdvaW5nIG9uIHRoZSBzdGFjay4gIFR1cm4gaXQgaW50byBhIGRvdWJsZS4gIAorCSAgICAgICooZG91YmxlICopIGFyZ3AgPSAoZG91YmxlKSAqKGZsb2F0KikoKiBwX2FyZ3YpOworCSAgICAgIHogPSBzaXplb2YoZG91YmxlKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICAqKHZvaWQgKiopIGFyZ3AgPSAqKHZvaWQgKiopKCogcF9hcmd2KTsKKwl9ICAqLworICAgICAgZWxzZSBpZiAoeiA8IHNpemVvZihpbnQpKQorCXsKKwkgIHogPSBzaXplb2YoaW50KTsKKwkgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDggKikoKiBwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKiBwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCSAgICAgIAorCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDE2ICopKCogcF9hcmd2KTsKKwkgICAgICBicmVhazsKKwkJICAKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKiBwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCQkgIAorCSAgICBkZWZhdWx0OgorCSAgICAgIEZGSV9BU1NFUlQoMCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmICh6ID09IHNpemVvZihpbnQpKQorCXsKKwkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOworCX0KKyAgICAgIHBfYXJndisrOworICAgICAgYXJncCArPSB6OworICAgICAgY291bnQgKz0gejsKKyAgICB9CisKKyAgcmV0dXJuIChzdGFjayArICgoY291bnQgPiAyNCkgPyAyNCA6IEFMSUdOX0RPV04oY291bnQsIDgpKSk7Cit9CisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXAoZmZpX2NpZiAqY2lmKQoreworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgY2lmLT5mbGFncyA9IC0xOworICBlbHNlCisgICAgY2lmLT5mbGFncyA9IGNpZi0+cnR5cGUtPnNpemU7CisKKyAgY2lmLT5ieXRlcyA9IEFMSUdOIChjaWYtPmJ5dGVzLCA4KTsKKworICByZXR1cm4gRkZJX09LOworfQorCitleHRlcm4gdm9pZCBmZmlfY2FsbF9FQUJJKHZvaWQgKigqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgCisJCQkgIGV4dGVuZGVkX2NpZiAqLCAKKwkJCSAgdW5zaWduZWQsIHVuc2lnbmVkLCAKKwkJCSAgdW5zaWduZWQgKiwgCisJCQkgIHZvaWQgKCpmbikodm9pZCkpOworCit2b2lkIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgCisJICAgICAgdm9pZCAoKmZuKSh2b2lkKSwgCisJICAgICAgdm9pZCAqcnZhbHVlLCAKKwkgICAgICB2b2lkICoqYXZhbHVlKQoreworICBleHRlbmRlZF9jaWYgZWNpZjsKKworICBlY2lmLmNpZiA9IGNpZjsKKyAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisgIAorICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuCSovCisgIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lCQkgICAgICAgICovCisKKyAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgCisgICAgICAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpKQorICAgIHsKKyAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOworICAgIH0KKyAgZWxzZQorICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworICAgIAorICAKKyAgc3dpdGNoIChjaWYtPmFiaSkgCisgICAgeworICAgIGNhc2UgRkZJX0VBQkk6CisgICAgICBmZmlfY2FsbF9FQUJJKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCAKKwkJICAgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgRkZJX0FTU0VSVCgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBmZmlfY2xvc3VyZV9lYWJpICh1bnNpZ25lZCBhcmcxLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25lZCBhcmczLAorCQkgICAgICAgdW5zaWduZWQgYXJnNCwgdW5zaWduZWQgYXJnNSwgdW5zaWduZWQgYXJnNikKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYSB0cmFtcG9saW5lLiAgVGhlIHRyYW1wb2xpbmUgc3Rvd3MgYQorICAgICBwb2ludGVyIHRvIHRoZSBmZmlfY2xvc3VyZSBvYmplY3QgaW4gZ3I3LiAgV2UgbXVzdCBzYXZlIHRoaXMKKyAgICAgcG9pbnRlciBpbiBhIHBsYWNlIHRoYXQgd2lsbCBwZXJzaXN0IHdoaWxlIHdlIGRvIG91ciB3b3JrLiAgKi8KKyAgcmVnaXN0ZXIgZmZpX2Nsb3N1cmUgKmNyZWcgX19hc21fXyAoImdyNyIpOworICBmZmlfY2xvc3VyZSAqY2xvc3VyZSA9IGNyZWc7CisKKyAgLyogQXJndW1lbnRzIHRoYXQgZG9uJ3QgZml0IGluIHJlZ2lzdGVycyBhcmUgZm91bmQgb24gdGhlIHN0YWNrCisgICAgIGF0IGEgZml4ZWQgb2Zmc2V0IGFib3ZlIHRoZSBjdXJyZW50IGZyYW1lIHBvaW50ZXIuICAqLworICByZWdpc3RlciBjaGFyICpmcmFtZV9wb2ludGVyIF9fYXNtX18gKCJmcCIpOworICBjaGFyICpzdGFja19hcmdzID0gZnJhbWVfcG9pbnRlciArIDE2OworCisgIC8qIExheSB0aGUgcmVnaXN0ZXIgYXJndW1lbnRzIGRvd24gaW4gYSBjb250aW51b3VzIGNodW5rIG9mIG1lbW9yeS4gICovCisgIHVuc2lnbmVkIHJlZ2lzdGVyX2FyZ3NbNl0gPQorICAgIHsgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiB9OworCisgIGZmaV9jaWYgKmNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgZmZpX3R5cGUgKiphcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKKyAgdm9pZCAqKmF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZih2b2lkICopKTsKKyAgY2hhciAqcHRyID0gKGNoYXIgKikgcmVnaXN0ZXJfYXJnczsKKyAgaW50IGk7CisKKyAgLyogRmluZCB0aGUgYWRkcmVzcyBvZiBlYWNoIGFyZ3VtZW50LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKykKKyAgICB7CisgICAgICBzd2l0Y2ggKGFyZ190eXBlc1tpXS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgYXZhbHVlW2ldID0gcHRyICsgMzsKKwkgIGJyZWFrOworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgYXZhbHVlW2ldID0gcHRyICsgMjsKKwkgIGJyZWFrOworCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBhdmFsdWVbaV0gPSBwdHI7CisJICBicmVhazsKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIGF2YWx1ZVtpXSA9ICoodm9pZCoqKXB0cjsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICAvKiBUaGlzIGlzIGFuIDgtYnl0ZSB2YWx1ZS4gICovCisJICBhdmFsdWVbaV0gPSBwdHI7CisJICBwdHIgKz0gNDsKKwkgIGJyZWFrOworCX0KKyAgICAgIHB0ciArPSA0OworCisgICAgICAvKiBJZiB3ZSd2ZSBoYW5kbGVkIG1vcmUgYXJndW1lbnRzIHRoYW4gZml0IGluIHJlZ2lzdGVycywKKwkgc3RhcnQgbG9va2luZyBhdCB0aGUgdGhvc2UgcGFzc2VkIG9uIHRoZSBzdGFjay4gICovCisgICAgICBpZiAocHRyID09ICgoY2hhciAqKXJlZ2lzdGVyX2FyZ3MgKyAoNio0KSkpCisJcHRyID0gc3RhY2tfYXJnczsKKyAgICB9CisKKyAgLyogSW52b2tlIHRoZSBjbG9zdXJlLiAgKi8KKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHsKKyAgICAgIC8qIFRoZSBjYWxsZXIgYWxsb2NhdGVzIHNwYWNlIGZvciB0aGUgcmV0dXJuIHN0cnVjdHVyZSwgYW5kCisgICAgICAgcGFzc2VzIGEgcG9pbnRlciB0byB0aGlzIHNwYWNlIGluIGdyMy4gIFVzZSB0aGlzIHZhbHVlIGRpcmVjdGx5CisgICAgICAgYXMgdGhlIHJldHVybiB2YWx1ZS4gICovCisgICAgICByZWdpc3RlciB2b2lkICpyZXR1cm5fc3RydWN0X3B0ciBfX2FzbV9fKCJncjMiKTsKKyAgICAgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJldHVybl9zdHJ1Y3RfcHRyLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBydmFsdWU7CisgICAgICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCAmcnZhbHVlLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgICAgIC8qIEZ1bmN0aW9ucyByZXR1cm4gNC1ieXRlIG9yIHNtYWxsZXIgcmVzdWx0cyBpbiBncjguICA4LWJ5dGUKKwkgdmFsdWVzIGFsc28gdXNlIGdyOS4gIFdlIGZpbGwgdGhlIGJvdGgsIGV2ZW4gZm9yIHNtYWxsIHJldHVybgorCSB2YWx1ZXMsIGp1c3QgdG8gYXZvaWQgYSBicmFuY2guICAqLyAKKyAgICAgIGFzbSAoImxkaSAgQCglMCwgIzApLCBncjgiIDogOiAiciIgKCZydmFsdWUpKTsKKyAgICAgIGFzbSAoImxkaSAgQCglMCwgIzApLCBncjkiIDogOiAiciIgKCYoKGludCAqKSAmcnZhbHVlKVsxXSkpOworICAgIH0KK30KKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLAorCQkgICAgICBmZmlfY2lmKiBjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJICAgICAgdm9pZCAqY29kZWxvYykKK3sKKyAgdW5zaWduZWQgaW50ICp0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgJmNsb3N1cmUtPnRyYW1wWzBdOworICB1bnNpZ25lZCBsb25nIGZuID0gKGxvbmcpIGZmaV9jbG9zdXJlX2VhYmk7CisgIHVuc2lnbmVkIGxvbmcgY2xzID0gKGxvbmcpIGNvZGVsb2M7CisgIGludCBpOworCisgIGZuID0gKHVuc2lnbmVkIGxvbmcpIGZmaV9jbG9zdXJlX2VhYmk7CisKKyAgdHJhbXBbMF0gPSAweDhjZmMwMDAwICsgKGZuICAmIDB4ZmZmZik7IC8qIHNldGxvcyBsbyhmbiksIGdyNiAgICAqLworICB0cmFtcFsxXSA9IDB4OGVmYzAwMDAgKyAoY2xzICYgMHhmZmZmKTsgLyogc2V0bG9zIGxvKGNscyksIGdyNyAgICovCisgIHRyYW1wWzJdID0gMHg4Y2Y4MDAwMCArIChmbiAgPj4gMTYpOwkgIC8qIHNldGhpIGhpKGZuKSwgZ3I2ICAgICAqLworICB0cmFtcFszXSA9IDB4OGVmODAwMDAgKyAoY2xzID4+IDE2KTsgICAgLyogc2V0aGkgaGkoY2xzKSwgZ3I3ICAgICovCisgIHRyYW1wWzRdID0gMHg4MDMwMDAwNjsgICAgICAgICAgICAgICAgICAvKiBqbXBsIEAoZ3IwLCBncjYpICAgICAgKi8KKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIC8qIENhY2hlIGZsdXNoaW5nLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IEZGSV9UUkFNUE9MSU5FX1NJWkU7IGkrKykKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgiZGNmIEAoJTAsJTEpXG5cdGljaSBAKCUyLCUxKSIgOjogInIiICh0cmFtcCksICJyIiAoaSksCisJCSAgICAgICJyIiAoY29kZWxvYykpOworCisgIHJldHVybiBGRklfT0s7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzA1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZml0YXJnZXQuaApAQCAtMCwwICsxLDU2IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQorICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDIwMDkgQW50aG9ueSBHcmVlbgorICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciBNb3hpZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisvKiAtLS0tIFN5c3RlbSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaSB7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorCisjaWZkZWYgTU9YSUUKKyAgRkZJX0VBQkksCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9FQUJJLAorI2VuZGlmCisKKyAgRkZJX0xBU1RfQUJJID0gRkZJX0RFRkFVTFRfQUJJICsgMQorfSBmZmlfYWJpOworI2VuZGlmCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgZm9yIGNsb3N1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIDAKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKworLyogVHJhbXBvbGluZXMgYXJlIDUgNC1ieXRlIGluc3RydWN0aW9ucyBsb25nLiAgKi8KKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAoNSo0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3BhL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcGEvZmZpLmMKaW5kZXggYzdhMTQzNS4uNmQ3NjA2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcGEvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcGEvZmZpLmMKQEAgLTQ5Miw2ICs0OTIsMTMgQEAKIAkgIGF2YWx1ZVtpXSA9ICh2b2lkICopKHN0YWNrIC0gc2xvdCk7CiAJICBicmVhazsKIAorI2lmZGVmIFBBX0hQVVgKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICAvKiBMb25nIGRvdWJsZXMgYXJlIHRyZWF0ZWQgbGlrZSBhIGJpZyBzdHJ1Y3R1cmUuICAqLworCSAgYXZhbHVlW2ldID0gKHZvaWQgKikgKihzdGFjayAtIHNsb3QpOworCSAgYnJlYWs7CisjZW5kaWYKKwogCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgogCSAgLyogU3RydWN0cyBzbWFsbGVyIG9yIGVxdWFsIHRoYW4gNCBieXRlcyBhcmUgcGFzc2VkIGluIG9uZQogCSAgICAgcmVnaXN0ZXIuIFN0cnVjdHMgc21hbGxlciBvciBlcXVhbCA4IGJ5dGVzIGFyZSBwYXNzZWQgaW4gdHdvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXguUwppbmRleCA0NTUwMmY3Li5jNmY4NzY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4LlMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgYWl4LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBhaXguUyAtIENvcHlyaWdodCAoYykgMjAwMiwyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAgYmFzZWQgb24gZGFyd2luLlMgYnkgSm9obiBIb3Jua3Zpc3QKIAogICAgUG93ZXJQQyBBc3NlbWJseSBnbHVlLgpAQCAtODYsOSArODYsMTMgQEAKICNkZWZpbmUgTCh4KSB4CiAJLmZpbGUgImFpeC5TIgogCS50b2MKLQkuY3NlY3QgLnRleHRbUFJdCi0JLmFsaWduIDIKLS5nbG9ibCBmZmlfcHJlcF9hcmdzCisKKwkvKiB2b2lkIGZmaV9jYWxsX0FJWChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJICoJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgKnJ2YWx1ZSwKKwkgKgkJICAgICB2b2lkICgqZm4pKCksCisJICoJCSAgICAgdm9pZCAoKnByZXBfYXJncykoZXh0ZW5kZWRfY2lmKiwgdW5zaWduZWQgKmNvbnN0KSk7CisJICogcjM9ZWNpZiwgcjQ9Ynl0ZXMsIHI1PWZsYWdzLCByNj1ydmFsdWUsIHI3PWZuLCByOD1wcmVwX2FyZ3MKKwkgKi8KIAogLmNzZWN0IC50ZXh0W1BSXQogCS5hbGlnbiAyCkBAIC05Niw2MSArMTAwLDE1MSBAQAogCS5nbG9ibCAuZmZpX2NhbGxfQUlYCiAuY3NlY3QgZmZpX2NhbGxfQUlYW0RTXQogZmZpX2NhbGxfQUlYOgorI2lmZGVmIF9fNjRCSVRfXworCS5sbG9uZyAuZmZpX2NhbGxfQUlYLCBUT0NbdGMwXSwgMAorCS5jc2VjdCAudGV4dFtQUl0KKy5mZmlfY2FsbF9BSVg6CisJLyogU2F2ZSByZWdpc3RlcnMgd2UgdXNlLiAgKi8KKwltZmxyCXIwCisKKwlzdGQJcjI4LC0zMihyMSkKKwlzdGQJcjI5LC0yNChyMSkKKwlzdGQJcjMwLC0xNihyMSkKKwlzdGQJcjMxLCAtOChyMSkKKworCXN0ZAlyMCwgMTYocjEpCisJbXIJcjI4LCByMQkJLyogb3VyIEFQLiAgKi8KKwlzdGR1eAlyMSwgcjEsIHI0CisKKwkvKiBTYXZlIGFyZ3VtZW50cyBvdmVyIGNhbGwuLi4gICovCisJbXIJcjMxLCByNQkvKiBmbGFncywgKi8KKwltcglyMzAsIHI2CS8qIHJ2YWx1ZSwgKi8KKwltcglyMjksIHI3CS8qIGZ1bmN0aW9uIGFkZHJlc3MuICAqLworCXN0ZAlyMiwgNDAocjEpCisKKwkvKiBDYWxsIGZmaV9wcmVwX2FyZ3MuICAqLworCW1yCXI0LCByMQorCWJsCS5mZmlfcHJlcF9hcmdzCisKKwkvKiBOb3cgZG8gdGhlIGNhbGwuICAqLworCWxkCXIwLCAwKHIyOSkKKwlsZAlyMiwgOChyMjkpCisJbGQJcjExLCAxNihyMjkpCisJLyogU2V0IHVwIGNyMSB3aXRoIGJpdHMgNC03IG9mIHRoZSBmbGFncy4gICovCisJbXRjcmYJMHg0MCwgcjMxCisJbXRjdHIJcjAKKwkvKiBMb2FkIGFsbCB0aG9zZSBhcmd1bWVudCByZWdpc3RlcnMuICAqLworCS8vIFdlIGhhdmUgc2V0IHVwIGEgbmljZSBzdGFjayBmcmFtZSwganVzdCBsb2FkIGl0IGludG8gcmVnaXN0ZXJzLgorCWxkCXIzLCA0MCsoMSo4KShyMSkKKwlsZAlyNCwgNDArKDIqOCkocjEpCisJbGQJcjUsIDQwKygzKjgpKHIxKQorCWxkCXI2LCA0MCsoNCo4KShyMSkKKwlub3AKKwlsZAlyNywgNDArKDUqOCkocjEpCisJbGQJcjgsIDQwKyg2KjgpKHIxKQorCWxkCXI5LCA0MCsoNyo4KShyMSkKKwlsZAlyMTAsNDArKDgqOCkocjEpCisKK0wxOgorCS8qIExvYWQgYWxsIHRoZSBGUCByZWdpc3RlcnMuICAqLworCWJmCTYsTDIgLy8gMmYgKyAweDE4CisJbGZkCWYxLC0zMi0oMTMqOCkocjI4KQorCWxmZAlmMiwtMzItKDEyKjgpKHIyOCkKKwlsZmQJZjMsLTMyLSgxMSo4KShyMjgpCisJbGZkCWY0LC0zMi0oMTAqOCkocjI4KQorCW5vcAorCWxmZAlmNSwtMzItKDkqOCkocjI4KQorCWxmZAlmNiwtMzItKDgqOCkocjI4KQorCWxmZAlmNywtMzItKDcqOCkocjI4KQorCWxmZAlmOCwtMzItKDYqOCkocjI4KQorCW5vcAorCWxmZAlmOSwtMzItKDUqOCkocjI4KQorCWxmZAlmMTAsLTMyLSg0KjgpKHIyOCkKKwlsZmQJZjExLC0zMi0oMyo4KShyMjgpCisJbGZkCWYxMiwtMzItKDIqOCkocjI4KQorCW5vcAorCWxmZAlmMTMsLTMyLSgxKjgpKHIyOCkKKworTDI6CisJLyogTWFrZSB0aGUgY2FsbC4gICovCisJYmN0cmwKKwlsZAlyMiwgNDAocjEpCisKKwkvKiBOb3csIGRlYWwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKwltdGNyZgkweDAxLCByMzEKKworCWJ0CTMwLCBMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCWJ0CTI5LCBMKGZwX3JldHVybl92YWx1ZSkKKwlzdGQJcjMsIDAocjMwKQorCisJLyogRmFsbCB0aHJvdWdoLi4uICAqLworCitMKGRvbmVfcmV0dXJuX3ZhbHVlKToKKwkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgd2UgdXNlZCBhbmQgcmV0dXJuLiAgKi8KKwltcglyMSwgcjI4CisJbGQJcjAsIDE2KHIyOCkKKwlsZAlyMjgsIC0zMihyMSkKKwltdGxyCXIwCisJbGQJcjI5LCAtMjQocjEpCisJbGQJcjMwLCAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKwlibHIKKworTChmcF9yZXR1cm5fdmFsdWUpOgorCWJmCTI4LCBMKGZsb2F0X3JldHVybl92YWx1ZSkKKwlzdGZkCWYxLCAwKHIzMCkKKwliZgkzMSwgTChkb25lX3JldHVybl92YWx1ZSkKKwlzdGZkCWYyLCA4KHIzMCkKKwliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCitMKGZsb2F0X3JldHVybl92YWx1ZSk6CisJc3RmcwlmMSwgMChyMzApCisJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCisjZWxzZSAvKiAhIF9fNjRCSVRfXyAqLworCQogCS5sb25nIC5mZmlfY2FsbF9BSVgsIFRPQ1t0YzBdLCAwCiAJLmNzZWN0IC50ZXh0W1BSXQogLmZmaV9jYWxsX0FJWDoKLQltciAgICAgIHIxMixyOCAvLyBXZSBvbmx5IG5lZWQgcjEyIHVudGlsIHRoZSBjYWxsLCBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgc2F2ZWQuLi4KLQkvKiBTYXZlIHRoZSBvbGQgc3RhY2sgcG9pbnRlciBhcyBBUC4gICovCi0JbXIJcjgscjEKLQotCS8qIEFsbG9jYXRlIHRoZSBzdGFjayBzcGFjZSB3ZSBuZWVkLiAgKi8KLQlzdHd1eAlyMSxyMSxyNAotCiAJLyogU2F2ZSByZWdpc3RlcnMgd2UgdXNlLiAgKi8KLQltZmxyCXI5CisJbWZscglyMAogCi0Jc3R3CXIyOCwtMTYocjgpCi0Jc3R3CXIyOSwtMTIocjgpCi0Jc3R3CXIzMCwgLTgocjgpCi0Jc3R3CXIzMSwgLTQocjgpCisJc3R3CXIyOCwtMTYocjEpCisJc3R3CXIyOSwtMTIocjEpCisJc3R3CXIzMCwgLTgocjEpCisJc3R3CXIzMSwgLTQocjEpCiAKLQlzdHcJcjksICA4KHI4KQotCXN0dwlyMiwgMjAocjEpCisJc3R3CXIwLCA4KHIxKQorCW1yCXIyOCwgcjEJCS8qIG91dCBBUC4gICovCisJc3R3dXgJcjEsIHIxLCByNAogCiAJLyogU2F2ZSBhcmd1bWVudHMgb3ZlciBjYWxsLi4uICAqLwotCW1yCXIzMSxyNQkvKiBmbGFncywgKi8KLQltcglyMzAscjYJLyogcnZhbHVlLCAqLwotCW1yCXIyOSxyNwkvKiBmdW5jdGlvbiBhZGRyZXNzLCAqLwotCW1yCXIyOCxyOAkvKiBvdXIgQVAuICovCisJbXIJcjMxLCByNQkvKiBmbGFncywgKi8KKwltcglyMzAsIHI2CS8qIHJ2YWx1ZSwgKi8KKwltcglyMjksIHI3CS8qIGZ1bmN0aW9uIGFkZHJlc3MsICovCisJc3R3CXIyLCAyMChyMSkKIAogCS8qIENhbGwgZmZpX3ByZXBfYXJncy4gICovCi0JbXIJcjQscjEKLQlsaQlyOSwwCi0KLQlsd3oJcjIsNChyMTIpCi0JbHd6CXIxMiwwKHIxMikKLQltdGN0cglyMTIgLy8gcjEyIGhvbGRzIGFkZHJlc3Mgb2YgX2ZmaV9wcmVwX2FyZ3MKLQliY3RybAotCWx3eiAgICAgcjIsMjAocjEpCisJbXIJcjQsIHIxCisJYmwJLmZmaV9wcmVwX2FyZ3MKIAogCS8qIE5vdyBkbyB0aGUgY2FsbC4gICovCi0JbHd6CXIxMiwwKHIyOSkKKwlsd3oJcjAsIDAocjI5KQorCWx3eglyMiwgNChyMjkpCisJbHd6CXIxMSwgOChyMjkpCiAJLyogU2V0IHVwIGNyMSB3aXRoIGJpdHMgNC03IG9mIHRoZSBmbGFncy4gICovCi0JbXRjcmYJMHg0MCxyMzEKLQlzdHcJcjIsMjAocjEpCi0JbXRjdHIJcjEyCi0JbHd6CXIyLDQocjI5KQorCW10Y3JmCTB4NDAsIHIzMQorCW10Y3RyCXIwCiAJLyogTG9hZCBhbGwgdGhvc2UgYXJndW1lbnQgcmVnaXN0ZXJzLiAgKi8KIAkvLyBXZSBoYXZlIHNldCB1cCBhIG5pY2Ugc3RhY2sgZnJhbWUsIGp1c3QgbG9hZCBpdCBpbnRvIHJlZ2lzdGVycy4KLQlsd3ogICAgIHIzLCAyMCsoMSo0KShyMSkKLQlsd3ogICAgIHI0LCAyMCsoMio0KShyMSkKLQlsd3ogICAgIHI1LCAyMCsoMyo0KShyMSkKLQlsd3ogICAgIHI2LCAyMCsoNCo0KShyMSkKKwlsd3oJcjMsIDIwKygxKjQpKHIxKQorCWx3eglyNCwgMjArKDIqNCkocjEpCisJbHd6CXI1LCAyMCsoMyo0KShyMSkKKwlsd3oJcjYsIDIwKyg0KjQpKHIxKQogCW5vcAotCWx3eiAgICAgcjcsIDIwKyg1KjQpKHIxKQotCWx3eiAgICAgcjgsIDIwKyg2KjQpKHIxKQotCWx3eiAgICAgcjksIDIwKyg3KjQpKHIxKQotCWx3eiAgICAgcjEwLDIwKyg4KjQpKHIxKQorCWx3eglyNywgMjArKDUqNCkocjEpCisJbHd6CXI4LCAyMCsoNio0KShyMSkKKwlsd3oJcjksIDIwKyg3KjQpKHIxKQorCWx3eglyMTAsMjArKDgqNCkocjEpCiAKIEwxOgogCS8qIExvYWQgYWxsIHRoZSBGUCByZWdpc3RlcnMuICAqLwpAQCAtMTY1LDQ3ICsyNTksNDggQEAKIAlsZmQJZjcsLTE2LSg3KjgpKHIyOCkKIAlsZmQJZjgsLTE2LSg2KjgpKHIyOCkKIAlub3AKLQlsZmQgICAgIGY5LC0xNi0oNSo4KShyMjgpCi0JbGZkICAgICBmMTAsLTE2LSg0KjgpKHIyOCkKLQlsZmQgICAgIGYxMSwtMTYtKDMqOCkocjI4KQotCWxmZCAgICAgZjEyLC0xNi0oMio4KShyMjgpCisJbGZkCWY5LC0xNi0oNSo4KShyMjgpCisJbGZkCWYxMCwtMTYtKDQqOCkocjI4KQorCWxmZAlmMTEsLTE2LSgzKjgpKHIyOCkKKwlsZmQJZjEyLC0xNi0oMio4KShyMjgpCiAJbm9wCi0JbGZkICAgICBmMTMsLTE2LSgxKjgpKHIyOCkKKwlsZmQJZjEzLC0xNi0oMSo4KShyMjgpCiAKIEwyOgogCS8qIE1ha2UgdGhlIGNhbGwuICAqLwogCWJjdHJsCi0JbHd6IHIyLDIwKHIxKQorCWx3eglyMiwgMjAocjEpCiAKIAkvKiBOb3csIGRlYWwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KLQltdGNyZgkweDAxLHIzMQorCW10Y3JmCTB4MDEsIHIzMQogCi0JYnQJMzAsTChkb25lX3JldHVybl92YWx1ZSkKLQlidAkyOSxMKGZwX3JldHVybl92YWx1ZSkKLQlzdHcJcjMsMChyMzApCi0JYmYJMjgsTChkb25lX3JldHVybl92YWx1ZSkKLQlzdHcJcjQsNChyMzApCisJYnQJMzAsIEwoZG9uZV9yZXR1cm5fdmFsdWUpCisJYnQJMjksIEwoZnBfcmV0dXJuX3ZhbHVlKQorCXN0dwlyMywgMChyMzApCisJYmYJMjgsIEwoZG9uZV9yZXR1cm5fdmFsdWUpCisJc3R3CXI0LCA0KHIzMCkKIAogCS8qIEZhbGwgdGhyb3VnaC4uLiAgKi8KIAogTChkb25lX3JldHVybl92YWx1ZSk6CiAJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHdlIHVzZWQgYW5kIHJldHVybi4gICovCi0JbHd6CXI5LCAgIDgocjI4KQotCWx3eglyMzEsICAtNChyMjgpCi0JbXRscglyOQotCWx3eglyMzAsIC04KHIyOCkKLQlsd3oJcjI5LC0xMihyMjgpCi0JbHd6CXIyOCwtMTYocjI4KQotCWx3eglyMSwwKHIxKQorCW1yCXIxLCByMjgKKwlsd3oJcjAsIDgocjI4KQorCWx3eglyMjgsLTE2KHIxKQorCW10bHIJcjAKKwlsd3oJcjI5LC0xMihyMSkKKwlsd3oJcjMwLCAtOChyMSkKKwlsd3oJcjMxLCAtNChyMSkKIAlibHIKIAogTChmcF9yZXR1cm5fdmFsdWUpOgotCWJmCTI4LEwoZmxvYXRfcmV0dXJuX3ZhbHVlKQotCXN0ZmQJZjEsMChyMzApCisJYmYJMjgsIEwoZmxvYXRfcmV0dXJuX3ZhbHVlKQorCXN0ZmQJZjEsIDAocjMwKQogCWIJTChkb25lX3JldHVybl92YWx1ZSkKIEwoZmxvYXRfcmV0dXJuX3ZhbHVlKToKLQlzdGZzCWYxLDAocjMwKQorCXN0ZnMJZjEsIDAocjMwKQogCWIJTChkb25lX3JldHVybl92YWx1ZSkKKyNlbmRpZgogCS5sb25nIDAKIAkuYnl0ZSAwLDAsMCwxLDEyOCw0LDAsMAogLy9FTkQoZmZpX2NhbGxfQUlYKQpAQCAtMjE2LDcgKzMxMSwxMSBAQAogCS5nbG9ibCAuZmZpX2NhbGxfREFSV0lOCiAuY3NlY3QgZmZpX2NhbGxfREFSV0lOW0RTXQogZmZpX2NhbGxfREFSV0lOOgorI2lmZGVmIF9fNjRCSVRfXworCS5sbG9uZyAuZmZpX2NhbGxfREFSV0lOLCBUT0NbdGMwXSwgMAorI2Vsc2UKIAkubG9uZyAuZmZpX2NhbGxfREFSV0lOLCBUT0NbdGMwXSwgMAorI2VuZGlmCiAJLmNzZWN0IC50ZXh0W1BSXQogLmZmaV9jYWxsX0RBUldJTjoKIAlibHIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUwppbmRleCA3YmY1YzY1Li41Yzc0NDQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGFpeF9jbG9zdXJlLlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIGFpeF9jbG9zdXJlLlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICBiYXNlZCBvbiBkYXJ3aW5fY2xvc3VyZS5TCiAKICAgIFBvd2VyUEMgQXNzZW1ibHkgZ2x1ZS4KQEAgLTk0LDY1ICs5NCw2NiBAQAogCS5nbG9ibCBmZmlfY2xvc3VyZV9BU00KIAkuZ2xvYmwgLmZmaV9jbG9zdXJlX0FTTQogLmNzZWN0IGZmaV9jbG9zdXJlX0FTTVtEU10KLQogZmZpX2Nsb3N1cmVfQVNNOgotCS5sb25nIC5mZmlfY2xvc3VyZV9BU00sIFRPQ1t0YzBdLCAwCisjaWZkZWYgX182NEJJVF9fCisJLmxsb25nIC5mZmlfY2xvc3VyZV9BU00sIFRPQ1t0YzBdLCAwCiAJLmNzZWN0IC50ZXh0W1BSXQogLmZmaV9jbG9zdXJlX0FTTToKLQotCW1mbHIgcjAJCQkvKiBleHRyYWN0IHJldHVybiBhZGRyZXNzICovCi0Jc3R3IHIwLCA4KHIxKQkJLyogc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KLQotCS8qIDI0IEJ5dGVzIChMaW5rYWdlIEFyZWEpICovCi0JLyogMzIgQnl0ZXMgKHBhcmFtcykgKi8KLQkvKiAxMDQgQnl0ZXMgKDEzKjggZnJvbSBGUFIpICovCi0JLyogOCBCeXRlcyAocmVzdWx0KSAqLwotCS8qIDE2OCBCeXRlcyAqLwotCi0Jc3R3dSByMSwtMTc2KHIxKQkvKiBza2lwIG92ZXIgY2FsbGVyIHNhdmUgYXJlYQotCQkJCWtlZXAgc3RhY2sgYWxpZ25lZCB0byAxNiAgKi8KLQogLyogd2Ugd2FudCB0byBidWlsZCB1cCBhbiBhcmVhIGZvciB0aGUgcGFyYW1ldGVycyBwYXNzZWQgKi8KIC8qIGluIHJlZ2lzdGVycyAoYm90aCBmbG9hdGluZyBwb2ludCBhbmQgaW50ZWdlcikgKi8KIAogCS8qIHdlIHN0b3JlIGdwciAzIHRvIGdwciAxMCAoYWxpZ25lZCB0byA0KQogCWluIHRoZSBwYXJlbnRzIG91dGdvaW5nIGFyZWEgICovCi0Jc3R3ICAgcjMsIDIwMChyMSkKLQlzdHcgICByNCwgMjA0KHIxKQotCXN0dyAgIHI1LCAyMDgocjEpCi0Jc3R3ICAgcjYsIDIxMihyMSkKLQlzdHcgICByNywgMjE2KHIxKQotCXN0dyAgIHI4LCAyMjAocjEpCi0Jc3R3ICAgcjksIDIyNChyMSkKLQlzdHcgICByMTAsIDIyOChyMSkKKwlzdGQgICByMywgNDgrKDAqOCkocjEpCisJc3RkICAgcjQsIDQ4KygxKjgpKHIxKQorCXN0ZCAgIHI1LCA0OCsoMio4KShyMSkKKwlzdGQgICByNiwgNDgrKDMqOCkocjEpCisJbWZsciAgcjAKKworCXN0ZCAgIHI3LCA0OCsoNCo4KShyMSkKKwlzdGQgICByOCwgNDgrKDUqOCkocjEpCisJc3RkICAgcjksIDQ4Kyg2KjgpKHIxKQorCXN0ZCAgIHIxMCwgNDgrKDcqOCkocjEpCisJc3RkICAgcjAsIDE2KHIxKQkvKiBzYXZlIHRoZSByZXR1cm4gYWRkcmVzcyAqLworCisKKwkvKiA0OCAgQnl0ZXMgKExpbmthZ2UgQXJlYSkgKi8KKwkvKiA2NCAgQnl0ZXMgKHBhcmFtcykgKi8KKwkvKiAxNiAgQnl0ZXMgKHJlc3VsdCkgKi8KKwkvKiAxMDQgQnl0ZXMgKDEzKjggZnJvbSBGUFIpICovCisJLyogOCAgIEJ5dGVzIChhbGlnbm1lbnQpICovCisJLyogMjQwIEJ5dGVzICovCisKKwlzdGR1ICByMSwgLTI0MChyMSkJLyogc2tpcCBvdmVyIGNhbGxlciBzYXZlIGFyZWEKKwkJCQkgICBrZWVwIHN0YWNrIGFsaWduZWQgdG8gMTYgICovCiAKIAkvKiBuZXh0IHNhdmUgZnByIDEgdG8gZnByIDEzIChhbGlnbmVkIHRvIDgpICovCi0Jc3RmZCAgZjEsIDU2KHIxKQotCXN0ZmQgIGYyLCA2NChyMSkKLQlzdGZkICBmMywgNzIocjEpCi0Jc3RmZCAgZjQsIDgwKHIxKQotCXN0ZmQgIGY1LCA4OChyMSkKLQlzdGZkICBmNiwgOTYocjEpCi0Jc3RmZCAgZjcsIDEwNChyMSkKLQlzdGZkICBmOCwgMTEyKHIxKQotCXN0ZmQgIGY5LCAxMjAocjEpCi0Jc3RmZCAgZjEwLCAxMjgocjEpCi0Jc3RmZCAgZjExLCAxMzYocjEpCi0Jc3RmZCAgZjEyLCAxNDQocjEpCi0Jc3RmZCAgZjEzLCAxNTIocjEpCisJc3RmZCAgZjEsIDEyOCsoMCo4KShyMSkKKwlzdGZkICBmMiwgMTI4KygxKjgpKHIxKQorCXN0ZmQgIGYzLCAxMjgrKDIqOCkocjEpCisJc3RmZCAgZjQsIDEyOCsoMyo4KShyMSkKKwlzdGZkICBmNSwgMTI4Kyg0KjgpKHIxKQorCXN0ZmQgIGY2LCAxMjgrKDUqOCkocjEpCisJc3RmZCAgZjcsIDEyOCsoNio4KShyMSkKKwlzdGZkICBmOCwgMTI4Kyg3KjgpKHIxKQorCXN0ZmQgIGY5LCAxMjgrKDgqOCkocjEpCisJc3RmZCAgZjEwLCAxMjgrKDkqOCkocjEpCisJc3RmZCAgZjExLCAxMjgrKDEwKjgpKHIxKQorCXN0ZmQgIGYxMiwgMTI4KygxMSo4KShyMSkKKwlzdGZkICBmMTMsIDEyOCsoMTIqOCkocjEpCiAKIAkvKiBzZXQgdXAgcmVnaXN0ZXJzIGZvciB0aGUgcm91dGluZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsgKi8KIAkvKiBnZXQgdGhlIGNvbnRleHQgcG9pbnRlciBmcm9tIHRoZSB0cmFtcG9saW5lICovCi0JbXIgcjMscjExCisJbXIgcjMsIHIxMQogCiAJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdG9yYWdlICovCi0JYWRkaSByNCxyMSwxNjAKKwlhZGRpIHI0LCByMSwgMTEyCiAKIAkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZ3ByIHJlZ2lzdGVycyAqLwotCWFkZGkgcjUscjEsMjAwCisJYWRkaSByNSwgcjEsIDI4OAogCiAJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGZwciByZWdpc3RlcnMgKi8KLQlhZGRpIHI2LHIxLDU2CisJYWRkaSByNiwgcjEsIDEyOAogCiAJLyogbWFrZSB0aGUgY2FsbCAqLwogCWJsIC5mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOCkBAIC0xNjQsODQgKzE2NSwyNzkgQEAKIAogCS8qIGxvb2sgdXAgdGhlIHByb3BlciBzdGFydGluZyBwb2ludCBpbiB0YWJsZSAgKi8KIAkvKiBieSB1c2luZyByZXR1cm4gdHlwZSBhcyBvZmZzZXQgKi8KLQlhZGRpIHI1LHIxLDE2MAkJLyogZ2V0IHBvaW50ZXIgdG8gcmVzdWx0cyBhcmVhICovCi0JbHd6IHI0LExDLi42MCgyKQkvKiBnZXQgYWRkcmVzcyBvZiBqdW1wIHRhYmxlICovCi0Jc2x3aSByMyxyMywyCQkvKiBub3cgbXVsdGlwbHkgcmV0dXJuIHR5cGUgYnkgNCAqLwotCWx3enggcjMscjQscjMJCS8qIGdldCB0aGUgY29udGVudHMgb2YgdGhhdCB0YWJsZSB2YWx1ZSAqLwotCWFkZCByMyxyMyxyNAkJLyogYWRkIGNvbnRlbnRzIG9mIHRhYmxlIHRvIHRhYmxlIGFkZHJlc3MgKi8KLQltdGN0ciByMworCWxkCXI0LCBMQy4uNjAoMikJLyogZ2V0IGFkZHJlc3Mgb2YganVtcCB0YWJsZSAqLworCXNsZGkJcjMsIHIzLCA0CS8qIG5vdyBtdWx0aXBseSByZXR1cm4gdHlwZSBieSAxNiAqLworCWxkCXIwLCAyNDArMTYocjEpCS8qIGxvYWQgcmV0dXJuIGFkZHJlc3MgKi8KKwlhZGQJcjMsIHIzLCByNAkvKiBhZGQgY29udGVudHMgb2YgdGFibGUgdG8gdGFibGUgYWRkcmVzcyAqLworCW10Y3RyCXIzCiAJYmN0cgkJCS8qIGp1bXAgdG8gaXQgKi8KIAorLyogRWFjaCBmcmFnbWVudCBtdXN0IGJlIGV4YWN0bHkgMTYgYnl0ZXMgbG9uZyAoNCBpbnN0cnVjdGlvbnMpLgorICAgQWxpZ24gdG8gMTYgYnl0ZSBib3VuZGFyeSBmb3IgY2FjaGUgYW5kIGRpc3BhdGNoIGVmZmljaWVuY3kuICAqLworCS5hbGlnbiA0CisKIEwuLjYwOgotCS5sb25nIEwuLjQ0LUwuLjYwICAgIC8qIEZGSV9UWVBFX1ZPSUQgKi8KLQkubG9uZyBMLi41MC1MLi42MCAgICAvKiBGRklfVFlQRV9JTlQgKi8KLQkubG9uZyBMLi40Ny1MLi42MCAgICAvKiBGRklfVFlQRV9GTE9BVCAqLwotCS5sb25nIEwuLjQ2LUwuLjYwICAgIC8qIEZGSV9UWVBFX0RPVUJMRSAqLwotCS5sb25nIEwuLjQ2LUwuLjYwICAgIC8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KLQkubG9uZyBMLi41Ni1MLi42MCAgICAvKiBGRklfVFlQRV9VSU5UOCAqLwotCS5sb25nIEwuLjU1LUwuLjYwICAgIC8qIEZGSV9UWVBFX1NJTlQ4ICovCi0JLmxvbmcgTC4uNTgtTC4uNjAgICAgLyogRkZJX1RZUEVfVUlOVDE2ICovCi0JLmxvbmcgTC4uNTctTC4uNjAgICAgLyogRkZJX1RZUEVfU0lOVDE2ICovCi0JLmxvbmcgTC4uNTAtTC4uNjAgICAgLyogRkZJX1RZUEVfVUlOVDMyICovCi0JLmxvbmcgTC4uNTAtTC4uNjAgICAgLyogRkZJX1RZUEVfU0lOVDMyICovCi0JLmxvbmcgTC4uNDgtTC4uNjAgICAgLyogRkZJX1RZUEVfVUlOVDY0ICovCi0JLmxvbmcgTC4uNDgtTC4uNjAgICAgLyogRkZJX1RZUEVfU0lOVDY0ICovCi0JLmxvbmcgTC4uNDQtTC4uNjAgICAgLyogRkZJX1RZUEVfU1RSVUNUICovCi0JLmxvbmcgTC4uNTAtTC4uNjAgICAgLyogRkZJX1RZUEVfUE9JTlRFUiAqLworLyogY2FzZSBGRklfVFlQRV9WT0lEICovCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKwlub3AKIAotCi0vKiBjYXNlIGRvdWJsZSAqLwotTC4uNDY6Ci0JbGZkIGYxLDAocjUpCi0JYiBMLi40NAotCi0vKiBjYXNlIGZsb2F0ICovCi1MLi40NzoKLQlsZnMgZjEsMChyNSkKLQliIEwuLjQ0Ci0KLS8qIGNhc2UgbG9uZyBsb25nICovCi1MLi40ODoKLQlsd3ogcjMsMChyNSkKLQlsd3ogcjQsNChyNSkKLQliIEwuLjQ0Ci0KLS8qIGNhc2UgZGVmYXVsdCAvIGludDMyIC8gcG9pbnRlciAqLwotTC4uNTA6Ci0JbHd6IHIzLDAocjUpCi0JYiBMLi40NAotCi0vKiBjYXNlIHNpZ25lZCBpbnQ4CSAqLwotTC4uNTU6Ci0JYWRkaSByNSxyNSwzCi0JbGJ6IHIzLDAocjUpCi0Jc2x3aSByMyxyMywyNAotCXNyYXdpIHIzLHIzLDI0Ci0JYiBMLi40NAotCi0vKiBjYXNlIHVuc2lnbmVkIGludDgJICovCi1MLi41NjoKLQlhZGRpIHI1LHI1LDMKLQlsYnogcjMsMChyNSkKLQliIEwuLjQ0Ci0KLS8qIGNhc2Ugc2lnbmVkIGludDE2ICovCi1MLi41NzoKLQlhZGRpIHI1LHI1LDIKLQlsaHogcjMsMChyNSkKLQlleHRzaCByMyxyMwotCWIgTC4uNDQKLQotLyogY2FzZSB1bnNpZ25lZCBpbnQxNiAqLwotTC4uNTg6Ci0JYWRkaSByNSxyNSwyCi0JbGh6IHIzLDAocjUpCi0KLS8qIGNhc2Ugdm9pZCAvIGRvbmUJICovCi1MLi40NDoKLQlhZGRpIHIxLHIxLDE3NgkJLyogcmVzdG9yZSBzdGFjayBwb2ludGVyICovCi0JbHd6IHIwLDgocjEpCQkvKiBnZXQgcmV0dXJuIGFkZHJlc3MgKi8KLQltdGxyIHIwCQkJLyogcmVzZXQgbGluayByZWdpc3RlciAqLworLyogY2FzZSBGRklfVFlQRV9JTlQgKi8KKwlsd2EgcjMsIDExMis0KHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCiAJYmxyCiAKKy8qIGNhc2UgRkZJX1RZUEVfRkxPQVQgKi8KKwlsZnMgZjEsIDExMiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfRE9VQkxFICovCisJbGZkIGYxLCAxMTIrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwlsZmQgZjEsIDExMiswKHIxKQorCW10bHIgcjAKKwlsZmQgZjIsIDExMis4KHIxKQorCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDggKi8KKwlsYnogcjMsIDExMis3KHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDggKi8KKwlsYnogcjMsIDExMis3KHIxKQorCW10bHIgcjAKKwlleHRzYiByMywgcjMKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQxNiAqLworCWxoeiByMywgMTEyKzYocjEpCisJbXRsciByMAorTC4uZmluaXNoOgorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UMTYgKi8KKwlsaGEgcjMsIDExMis2KHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDMyICovCisJbHd6IHIzLCAxMTIrNChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQzMiAqLworCWx3YSByMywgMTEyKzQocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9VSU5UNjQgKi8KKwlsZCByMywgMTEyKzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UNjQgKi8KKwlsZCByMywgMTEyKzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TVFJVQ1QgKi8KKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCW5vcAorCisvKiBjYXNlIEZGSV9UWVBFX1BPSU5URVIgKi8KKwlsZCByMywgMTEyKzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworI2Vsc2UgLyogISBfXzY0QklUX18gKi8KKwkKKwkubG9uZyAuZmZpX2Nsb3N1cmVfQVNNLCBUT0NbdGMwXSwgMAorCS5jc2VjdCAudGV4dFtQUl0KKy5mZmlfY2xvc3VyZV9BU006CisvKiB3ZSB3YW50IHRvIGJ1aWxkIHVwIGFuIGFyZWEgZm9yIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCAqLworLyogaW4gcmVnaXN0ZXJzIChib3RoIGZsb2F0aW5nIHBvaW50IGFuZCBpbnRlZ2VyKSAqLworCisJLyogd2Ugc3RvcmUgZ3ByIDMgdG8gZ3ByIDEwIChhbGlnbmVkIHRvIDQpCisJaW4gdGhlIHBhcmVudHMgb3V0Z29pbmcgYXJlYSAgKi8KKwlzdHcgICByMywgMjQrKDAqNCkocjEpCisJc3R3ICAgcjQsIDI0KygxKjQpKHIxKQorCXN0dyAgIHI1LCAyNCsoMio0KShyMSkKKwlzdHcgICByNiwgMjQrKDMqNCkocjEpCisJbWZsciAgcjAKKworCXN0dyAgIHI3LCAyNCsoNCo0KShyMSkKKwlzdHcgICByOCwgMjQrKDUqNCkocjEpCisJc3R3ICAgcjksIDI0Kyg2KjQpKHIxKQorCXN0dyAgIHIxMCwgMjQrKDcqNCkocjEpCisJc3R3ICAgcjAsIDgocjEpCisKKwkvKiAyNCBCeXRlcyAoTGlua2FnZSBBcmVhKSAqLworCS8qIDMyIEJ5dGVzIChwYXJhbXMpICovCisJLyogMTYgIEJ5dGVzIChyZXN1bHQpICovCisJLyogMTA0IEJ5dGVzICgxMyo4IGZyb20gRlBSKSAqLworCS8qIDE3NiBCeXRlcyAqLworCisJc3R3dSAgcjEsIC0xNzYocjEpCS8qIHNraXAgb3ZlciBjYWxsZXIgc2F2ZSBhcmVhCisJCQkJICAga2VlcCBzdGFjayBhbGlnbmVkIHRvIDE2ICAqLworCisJLyogbmV4dCBzYXZlIGZwciAxIHRvIGZwciAxMyAoYWxpZ25lZCB0byA4KSAqLworCXN0ZmQgIGYxLCA3MisoMCo4KShyMSkKKwlzdGZkICBmMiwgNzIrKDEqOCkocjEpCisJc3RmZCAgZjMsIDcyKygyKjgpKHIxKQorCXN0ZmQgIGY0LCA3MisoMyo4KShyMSkKKwlzdGZkICBmNSwgNzIrKDQqOCkocjEpCisJc3RmZCAgZjYsIDcyKyg1KjgpKHIxKQorCXN0ZmQgIGY3LCA3MisoNio4KShyMSkKKwlzdGZkICBmOCwgNzIrKDcqOCkocjEpCisJc3RmZCAgZjksIDcyKyg4KjgpKHIxKQorCXN0ZmQgIGYxMCwgNzIrKDkqOCkocjEpCisJc3RmZCAgZjExLCA3MisoMTAqOCkocjEpCisJc3RmZCAgZjEyLCA3MisoMTEqOCkocjEpCisJc3RmZCAgZjEzLCA3MisoMTIqOCkocjEpCisKKwkvKiBzZXQgdXAgcmVnaXN0ZXJzIGZvciB0aGUgcm91dGluZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsgKi8KKwkvKiBnZXQgdGhlIGNvbnRleHQgcG9pbnRlciBmcm9tIHRoZSB0cmFtcG9saW5lICovCisJbXIgcjMsIHIxMQorCisJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdG9yYWdlICovCisJYWRkaSByNCwgcjEsIDU2CisKKwkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZ3ByIHJlZ2lzdGVycyAqLworCWFkZGkgcjUsIHIxLCAyMDAKKworCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBmcHIgcmVnaXN0ZXJzICovCisJYWRkaSByNiwgcjEsIDcyCisKKwkvKiBtYWtlIHRoZSBjYWxsICovCisJYmwgLmZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4KKwlub3AKKworCS8qIG5vdyByMyBjb250YWlucyB0aGUgcmV0dXJuIHR5cGUgKi8KKwkvKiBzbyB1c2UgaXQgdG8gbG9vayB1cCBpbiBhIHRhYmxlICovCisJLyogc28gd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoIGVhY2ggdHlwZSAqLworCisJLyogbG9vayB1cCB0aGUgcHJvcGVyIHN0YXJ0aW5nIHBvaW50IGluIHRhYmxlICAqLworCS8qIGJ5IHVzaW5nIHJldHVybiB0eXBlIGFzIG9mZnNldCAqLworCWx3eglyNCwgTEMuLjYwKDIpCS8qIGdldCBhZGRyZXNzIG9mIGp1bXAgdGFibGUgKi8KKwlzbHdpCXIzLCByMywgNAkvKiBub3cgbXVsdGlwbHkgcmV0dXJuIHR5cGUgYnkgNCAqLworCWx3eglyMCwgMTc2KzgocjEpCS8qIGxvYWQgcmV0dXJuIGFkZHJlc3MgKi8KKwlhZGQJcjMsIHIzLCByNAkvKiBhZGQgY29udGVudHMgb2YgdGFibGUgdG8gdGFibGUgYWRkcmVzcyAqLworCW10Y3RyCXIzCisJYmN0cgkJCS8qIGp1bXAgdG8gaXQgKi8KKworLyogRWFjaCBmcmFnbWVudCBtdXN0IGJlIGV4YWN0bHkgMTYgYnl0ZXMgbG9uZyAoNCBpbnN0cnVjdGlvbnMpLgorICAgQWxpZ24gdG8gMTYgYnl0ZSBib3VuZGFyeSBmb3IgY2FjaGUgYW5kIGRpc3BhdGNoIGVmZmljaWVuY3kuICAqLworCS5hbGlnbiA0CisKK0wuLjYwOgorLyogY2FzZSBGRklfVFlQRV9WT0lEICovCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKwlub3AKKworLyogY2FzZSBGRklfVFlQRV9JTlQgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9GTE9BVCAqLworCWxmcyBmMSwgNTYrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX0RPVUJMRSAqLworCWxmZCBmMSwgNTYrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwlsZmQgZjEsIDU2KzAocjEpCisJbXRsciByMAorCWxmZCBmMiwgNTYrOChyMSkKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQ4ICovCisJbGJ6IHIzLCA1NiszKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDggKi8KKwlsYnogcjMsIDU2KzMocjEpCisJbXRsciByMAorCWV4dHNiIHIzLCByMworCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDE2ICovCisJbGh6IHIzLCA1NisyKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDE2ICovCisJbGhhIHIzLCA1NisyKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDMyICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDMyICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDY0ICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKKwlsd3ogcjQsIDU2KzQocjEpCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9TSU5UNjQgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorCWx3eiByNCwgNTYrNChyMSkKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1NUUlVDVCAqLworCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisJbm9wCisKKy8qIGNhc2UgRkZJX1RZUEVfUE9JTlRFUiAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCitMLi5maW5pc2g6CisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorI2VuZGlmCiAvKiBFTkQoZmZpX2Nsb3N1cmVfQVNNKSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKaW5kZXggYzJkMjUzMC4uNzU3ODRhOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCkBAIC0xLDYgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAxOTk4IEdlb2ZmcmV5IEtlYXRpbmcKLSAgIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYworICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCiAgICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jCiAKICAgIFBvd2VyUEMgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKQEAgLTQzLDYgKzQzLDExIEBACiAgIEZMQUdfUkVUVVJOU182NEJJVFMgICA9IDEgPDwgKDMxLTI4KSwKIAogICBGTEFHX1JFVFVSTlNfMTI4QklUUyAgPSAxIDw8ICgzMS0yNyksIC8qIGNyNiAgKi8KKyAgRkxBR19TWVNWX1NNU1RfUjQgICAgID0gMSA8PCAoMzEtMjYpLCAvKiB1c2UgcjQgZm9yIEZGSV9TWVNWIDggYnl0ZQorCQkJCQkgICBzdHJ1Y3RzLiAgKi8KKyAgRkxBR19TWVNWX1NNU1RfUjMgICAgID0gMSA8PCAoMzEtMjUpLCAvKiB1c2UgcjMgZm9yIEZGSV9TWVNWIDQgYnl0ZQorCQkJCQkgICBzdHJ1Y3RzLiAgKi8KKyAgLyogQml0cyAoMzEtMjQpIHRocm91Z2ggKDMxLTE5KSBzdG9yZSBzaGlmdCB2YWx1ZSBmb3IgU01TVCAqLwogCiAgIEZMQUdfQVJHX05FRURTX0NPUFkgICA9IDEgPDwgKDMxLSA3KSwKICAgRkxBR19GUF9BUkdVTUVOVFMgICAgID0gMSA8PCAoMzEtIDYpLCAvKiBjcjEuZXE7IHNwZWNpZmllZCBieSBBQkkgKi8KQEAgLTE4MCw2ICsxODUsNyBAQAogCSAgICB7CiAJICAgICAgKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7CiAJICAgICAgbmV4dF9hcmcudSArPSAxOworCSAgICAgIGludGFyZ19jb3VudCsrOwogCSAgICB9CiAJICBlbHNlCiAJICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwpAQCAtNjgwLDE1ICs2ODYsMTUgQEAKIAkJIFRoZSBzYW1lIGFwcGxpZXMgZm9yIHRoZSBzdHJ1Y3RzIHJldHVybmVkIGluIHIzL3I0LiAgKi8KIAkgICAgICBpZiAoc2l6ZSA8PSA0KQogCQl7Ci0JCSAgZmxhZ3MgfD0gMSA8PCAoMzEgLSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEpOwotCQkgIGZsYWdzIHw9IDggKiAoNCAtIHNpemUpIDw8IDQ7CisJCSAgZmxhZ3MgfD0gRkxBR19TWVNWX1NNU1RfUjM7CisJCSAgZmxhZ3MgfD0gOCAqICg0IC0gc2l6ZSkgPDwgODsKIAkJICBicmVhazsKIAkJfQogCSAgICAgIC8qIFRoZXNlIHN0cnVjdHMgYXJlIHJldHVybmVkIGluIHIzIGFuZCByNC4gU2VlIGFib3ZlLiAgICovCiAJICAgICAgaWYgIChzaXplIDw9IDgpCiAJCXsKLQkJICBmbGFncyB8PSAxIDw8ICgzMSAtIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMik7Ci0JCSAgZmxhZ3MgfD0gOCAqICg4IC0gc2l6ZSkgPDwgNDsKKwkJICBmbGFncyB8PSBGTEFHX1NZU1ZfU01TVF9SMyB8IEZMQUdfU1lTVl9TTVNUX1I0OworCQkgIGZsYWdzIHw9IDggKiAoOCAtIHNpemUpIDw8IDg7CiAJCSAgYnJlYWs7CiAJCX0KIAkgICAgfQpAQCAtMTE0NCw2ICsxMTUwLDcgQEAKIAkJcHN0Kys7CiAJICAgICAgYXZhbHVlW2ldID0gcHN0OwogCSAgICAgIHBzdCArPSAyOworCSAgICAgIG5nID0gODsKIAkgICAgfQogCSAgYnJlYWs7CiAKQEAgLTEyMTcsNiArMTIyNCw3IEBACiAJCXsKIAkJICBhdmFsdWVbaV0gPSBwc3Q7CiAJCSAgcHN0ICs9IDQ7CisJCSAgbmcgPSA4OwogCQl9CiAJICAgICAgYnJlYWs7CiAJICAgIH0KQEAgLTEyNDksMTAgKzEyNTcsMTUgQEAKIAogICAvKiBUZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHBlcmZvcm0gcmV0dXJuIHR5cGUgcHJvbW90aW9ucy4KICAgICAgQmVjYXVzZSB0aGUgRkZJX1NZU1YgQUJJIHJldHVybnMgdGhlIHN0cnVjdHVyZXMgPD0gOCBieXRlcyBpbiByMy9yNAotICAgICB3ZSBoYXZlIHRvIHRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gdHJlYXQgdGhlbS4gICovCisgICAgIHdlIGhhdmUgdG8gdGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byB0cmVhdCB0aGVtLiBXZSBjb21iaW5lIHRoZSBiYXNlCisgICAgIHR5cGUgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxICB3aXRoIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QuCisgICAgIFNvIGEgb25lIGJ5dGUgc3RydWN0IGdldHMgdGhlIHJldHVybiB0eXBlIDE2LiBSZXR1cm4gdHlwZSAxIHRvIDE1IGFyZQorICAgICBhbHJlYWR5IHVzZWQgYW5kIHdlIG5ldmVyIGhhdmUgYSBzdHJ1Y3Qgd2l0aCBzaXplIHplcm8uIFRoYXQgaXMgdGhlIHJlYXNvbgorICAgICBmb3IgdGhlIHN1YnRyYWN0aW9uIG9mIDEuIFNlZSB0aGUgY29tbWVudCBpbiBmZml0YXJnZXQuaCBhYm91dCBvcmRlcmluZy4KKyAgKi8KICAgaWYgKGNpZi0+YWJpID09IEZGSV9TWVNWICYmIGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCiAgICAgICAmJiBzaXplIDw9IDgpCi0gICAgcmV0dXJuIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgc2l6ZTsKKyAgICByZXR1cm4gKEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSkgKyBzaXplOwogI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCiAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogCSAgICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWCAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVhfU09GVF9GTE9BVCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKaW5kZXggNTAxMDM1ZC4uZDg0ZjFjMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKQEAgLTMsNyArMyw3IEBACiAKICAgIENvcHlyaWdodCAoQykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCiAgICBDb3B5cmlnaHQgKEMpIDIwMDEgSm9obiBIb3Jua3Zpc3QKLSAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgRkZJIHN1cHBvcnQgZm9yIERhcndpbiBhbmQgQUlYLgogICAgCkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAotZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfQVNNKHZvaWQpOworZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfQVNNICh2b2lkKTsKIAogZW51bSB7CiAgIC8qIFRoZSBhc3NlbWJseSBkZXBlbmRzIG9uIHRoZXNlIGV4YWN0IGZsYWdzLiAgKi8KQEAgLTgwLDM0ICs4MCwzNyBAQAogCiAgICAqLwogCi12b2lkIGZmaV9wcmVwX2FyZ3MoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCAqY29uc3Qgc3RhY2spCit2b2lkCitmZmlfcHJlcF9hcmdzIChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkIGxvbmcgKmNvbnN0IHN0YWNrKQogewogICBjb25zdCB1bnNpZ25lZCBieXRlcyA9IGVjaWYtPmNpZi0+Ynl0ZXM7CiAgIGNvbnN0IHVuc2lnbmVkIGZsYWdzID0gZWNpZi0+Y2lmLT5mbGFnczsKKyAgY29uc3QgdW5zaWduZWQgbmFyZ3MgPSBlY2lmLT5jaWYtPm5hcmdzOworICBjb25zdCBmZmlfYWJpIGFiaSA9IGVjaWYtPmNpZi0+YWJpOwogCiAgIC8qICdzdGFja3RvcCcgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlci4gICovCi0gIHVuc2lnbmVkICpjb25zdCBzdGFja3RvcCA9IHN0YWNrICsgKGJ5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkKSk7CisgIHVuc2lnbmVkIGxvbmcgKmNvbnN0IHN0YWNrdG9wID0gc3RhY2sgKyAoYnl0ZXMgLyBzaXplb2YodW5zaWduZWQgbG9uZykpOwogCiAgIC8qICdmcHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZnByMSwgYW5kIGdyb3dzIHVwd2FyZHMgYXMKICAgICAgd2UgdXNlIEZQUiByZWdpc3RlcnMuICAqLwotICBkb3VibGUgKmZwcl9iYXNlID0gKGRvdWJsZSopIChzdGFja3RvcCAtIEFTTV9ORUVEU19SRUdJU1RFUlMpIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOworICBkb3VibGUgKmZwcl9iYXNlID0gKGRvdWJsZSAqKSAoc3RhY2t0b3AgLSBBU01fTkVFRFNfUkVHSVNURVJTKSAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKICAgaW50IGZwYXJnX2NvdW50ID0gMDsKIAogCiAgIC8qICduZXh0X2FyZycgZ3Jvd3MgdXAgYXMgd2UgcHV0IHBhcmFtZXRlcnMgaW4gaXQuICAqLwotICB1bnNpZ25lZCAqbmV4dF9hcmcgPSBzdGFjayArIDY7IC8qIDYgcmVzZXJ2ZWQgcG9zaXRpb25zLiAgKi8KKyAgdW5zaWduZWQgbG9uZyAqbmV4dF9hcmcgPSBzdGFjayArIDY7IC8qIDYgcmVzZXJ2ZWQgcG9zaXRpb25zLiAgKi8KIAotICBpbnQgaSA9IGVjaWYtPmNpZi0+bmFyZ3M7CisgIGludCBpOwogICBkb3VibGUgZG91YmxlX3RtcDsKICAgdm9pZCAqKnBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKLSAgdW5zaWduZWQgZ3BydmFsdWU7CisgIHVuc2lnbmVkIGxvbmcgZ3BydmFsdWU7CiAgIGZmaV90eXBlKiogcHRyID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CiAgIGNoYXIgKmRlc3RfY3B5OwogICB1bnNpZ25lZCBzaXplX2FsID0gMDsKIAogICAvKiBDaGVjayB0aGF0IGV2ZXJ5dGhpbmcgc3RhcnRzIGFsaWduZWQgcHJvcGVybHkuICAqLwotICBGRklfQVNTRVJUKCgodW5zaWduZWQpKGNoYXIgKilzdGFjayAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQoKCh1bnNpZ25lZCkoY2hhciAqKXN0YWNrdG9wICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCgoKHVuc2lnbmVkKSAoY2hhciAqKSBzdGFjayAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQoKCh1bnNpZ25lZCkgKGNoYXIgKikgc3RhY2t0b3AgJiAweEYpID09IDApOwogICBGRklfQVNTRVJUKChieXRlcyAmIDB4RikgPT0gMCk7CiAKICAgLyogRGVhbCB3aXRoIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFzcy1ieS1yZWZlcmVuY2UuCkBAIC0xMTUsMTIgKzExOCwxMCBAQAogICAgICBSZXR1cm4gdmFsdWVzIGFyZSByZWZlcmVuY2VkIGJ5IHIzLCBzbyByNCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiAgKi8KIAogICBpZiAoZmxhZ3MgJiBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UpCi0gICAgKm5leHRfYXJnKysgPSAodW5zaWduZWQpKGNoYXIgKillY2lmLT5ydmFsdWU7CisgICAgKm5leHRfYXJnKysgPSAodW5zaWduZWQgbG9uZykgKGNoYXIgKikgZWNpZi0+cnZhbHVlOwogCiAgIC8qIE5vdyBmb3IgdGhlIGFyZ3VtZW50cy4gICovCi0gIGZvciAoOwotICAgICAgIGkgPiAwOwotICAgICAgIGktLSwgcHRyKyssIHBfYXJndisrKQorICBmb3IgKGkgPSBuYXJnczsgaSA+IDA7IGktLSwgcHRyKyssIHBfYXJndisrKQogICAgIHsKICAgICAgIHN3aXRjaCAoKCpwdHIpLT50eXBlKQogCXsKQEAgLTEyOCw3ICsxMjksNyBAQAogCSAgIHB1cnBvc2UgcmVnaXN0ZXJzIGFyZSBmaWxsZWQsIHRoZSBjb3JyZXNwb25kaW5nIEdQUnMgdGhhdCBtYXRjaAogCSAgIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZy1wb2ludCBwYXJhbWV0ZXIgYXJlIHNraXBwZWQuICAqLwogCWNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICBkb3VibGVfdG1wID0gKihmbG9hdCAqKSpwX2FyZ3Y7CisJICBkb3VibGVfdG1wID0gKihmbG9hdCAqKSAqcF9hcmd2OwogCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKIAkgICAgKihkb3VibGUgKiluZXh0X2FyZyA9IGRvdWJsZV90bXA7CiAJICBlbHNlCkBAIC0xMzksMTIgKzE0MCwxNiBAQAogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgIGRvdWJsZV90bXAgPSAqKGRvdWJsZSAqKSpwX2FyZ3Y7CisJICBkb3VibGVfdG1wID0gKihkb3VibGUgKikgKnBfYXJndjsKIAkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCiAJICAgICooZG91YmxlICopbmV4dF9hcmcgPSBkb3VibGVfdG1wOwogCSAgZWxzZQogCSAgICAqZnByX2Jhc2UrKyA9IGRvdWJsZV90bXA7CisjaWZkZWYgUE9XRVJQQzY0CisJICBuZXh0X2FyZysrOworI2Vsc2UKIAkgIG5leHRfYXJnICs9IDI7CisjZW5kaWYKIAkgIGZwYXJnX2NvdW50Kys7CiAJICBGRklfQVNTRVJUKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwogCSAgYnJlYWs7CkBAIC0xNTIsNDIgKzE1Nyw3MSBAQAogI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCiAKIAljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICBkb3VibGVfdG1wID0gKChkb3VibGUgKikqcF9hcmd2KVswXTsKLQkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0JICAgICooZG91YmxlICopbmV4dF9hcmcgPSBkb3VibGVfdG1wOworI2lmZGVmIFBPV0VSUEM2NAorCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgICAqKGxvbmcgZG91YmxlICopIGZwcl9iYXNlKysgPSAqKGxvbmcgZG91YmxlICopICpwX2FyZ3Y7CiAJICBlbHNlCisJICAgICoobG9uZyBkb3VibGUgKikgbmV4dF9hcmcgPSAqKGxvbmcgZG91YmxlICopICpwX2FyZ3Y7CisJICBuZXh0X2FyZyArPSAyOworCSAgZnBhcmdfY291bnQgKz0gMjsKKyNlbHNlCisJICBkb3VibGVfdG1wID0gKChkb3VibGUgKikgKnBfYXJndilbMF07CisJICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCiAJICAgICpmcHJfYmFzZSsrID0gZG91YmxlX3RtcDsKKwkgIGVsc2UKKwkgICAgKihkb3VibGUgKikgbmV4dF9hcmcgPSBkb3VibGVfdG1wOwogCSAgbmV4dF9hcmcgKz0gMjsKIAkgIGZwYXJnX2NvdW50Kys7Ci0JICBkb3VibGVfdG1wID0gKChkb3VibGUgKikqcF9hcmd2KVsxXTsKLQkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0JICAgICooZG91YmxlICopbmV4dF9hcmcgPSBkb3VibGVfdG1wOwotCSAgZWxzZQorCisJICBkb3VibGVfdG1wID0gKChkb3VibGUgKikgKnBfYXJndilbMV07CisJICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCiAJICAgICpmcHJfYmFzZSsrID0gZG91YmxlX3RtcDsKKwkgIGVsc2UKKwkgICAgKihkb3VibGUgKikgbmV4dF9hcmcgPSBkb3VibGVfdG1wOwogCSAgbmV4dF9hcmcgKz0gMjsKIAkgIGZwYXJnX2NvdW50Kys7CisjZW5kaWYKIAkgIEZGSV9BU1NFUlQoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CiAJICBicmVhazsKICNlbmRpZgogCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgogCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCSAgKihsb25nIGxvbmcgKiluZXh0X2FyZyA9ICoobG9uZyBsb25nICopKnBfYXJndjsKLQkgIG5leHRfYXJnKz0yOworI2lmZGVmIFBPV0VSUEM2NAorCSAgZ3BydmFsdWUgPSAqKGxvbmcgbG9uZyAqKSAqcF9hcmd2OworCSAgZ290byBwdXRncHI7CisjZWxzZQorCSAgKihsb25nIGxvbmcgKikgbmV4dF9hcmcgPSAqKGxvbmcgbG9uZyAqKSAqcF9hcmd2OworCSAgbmV4dF9hcmcgKz0gMjsKKyNlbmRpZgogCSAgYnJlYWs7CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgKnBfYXJndjsKKwkgIGdvdG8gcHV0Z3ByOwogCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgY2hhciAqKSpwX2FyZ3Y7CisJICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgY2hhciAqKSAqcF9hcmd2OwogCSAgZ290byBwdXRncHI7CiAJY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgIGdwcnZhbHVlID0gKihzaWduZWQgY2hhciAqKSpwX2FyZ3Y7CisJICBncHJ2YWx1ZSA9ICooc2lnbmVkIGNoYXIgKikgKnBfYXJndjsKIAkgIGdvdG8gcHV0Z3ByOwogCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIHNob3J0ICopKnBfYXJndjsKKwkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBzaG9ydCAqKSAqcF9hcmd2OwogCSAgZ290byBwdXRncHI7CiAJY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICooc2lnbmVkIHNob3J0ICopKnBfYXJndjsKKwkgIGdwcnZhbHVlID0gKihzaWduZWQgc2hvcnQgKikgKnBfYXJndjsKIAkgIGdvdG8gcHV0Z3ByOwogCiAJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisjaWZkZWYgUE9XRVJQQzY0CisJICBkZXN0X2NweSA9IChjaGFyICopIG5leHRfYXJnOworCSAgc2l6ZV9hbCA9ICgqcHRyKS0+c2l6ZTsKKwkgIGlmICgoKnB0ciktPmVsZW1lbnRzWzBdLT50eXBlID09IDMpCisJICAgIHNpemVfYWwgPSBBTElHTigoKnB0ciktPnNpemUsIDgpOworCSAgaWYgKHNpemVfYWwgPCAzICYmIGFiaSA9PSBGRklfREFSV0lOKQorCSAgICBkZXN0X2NweSArPSA0IC0gc2l6ZV9hbDsKKworCSAgbWVtY3B5ICgoY2hhciAqKSBkZXN0X2NweSwgKGNoYXIgKikgKnBfYXJndiwgc2l6ZV9hbCk7CisJICBuZXh0X2FyZyArPSAoc2l6ZV9hbCArIDcpIC8gODsKKyNlbHNlCiAJICBkZXN0X2NweSA9IChjaGFyICopIG5leHRfYXJnOwogCiAJICAvKiBTdHJ1Y3R1cmVzIHRoYXQgbWF0Y2ggdGhlIGJhc2ljIG1vZGVzIChRSSAxIGJ5dGUsIEhJIDIgYnl0ZXMsCkBAIC0xOTUsMjIgKzIyOSwyNCBAQAogCSAgICAgU3RydWN0dXJlcyB3aXRoIDMgYnl0ZSBpbiBzaXplIGFyZSBwYWRkZWQgdXB3YXJkcy4gICovCiAJICBzaXplX2FsID0gKCpwdHIpLT5zaXplOwogCSAgLyogSWYgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgZG91YmxlLCB0aGVuIGFsaWduCi0JICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLgotCSAgICAgVHlwZSAzIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9mZmkuaC4gI2RlZmluZSBGRklfVFlQRV9ET1VCTEUgMy4gICovCi0JICBpZiAoKCpwdHIpLT5lbGVtZW50c1swXS0+dHlwZSA9PSAzKQorCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4gICovCisJICBpZiAoKCpwdHIpLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCiAJICAgIHNpemVfYWwgPSBBTElHTigoKnB0ciktPnNpemUsIDgpOwotCSAgaWYgKHNpemVfYWwgPCAzICYmIGVjaWYtPmNpZi0+YWJpID09IEZGSV9EQVJXSU4pCisJICBpZiAoc2l6ZV9hbCA8IDMgJiYgYWJpID09IEZGSV9EQVJXSU4pCiAJICAgIGRlc3RfY3B5ICs9IDQgLSBzaXplX2FsOwogCi0JICBtZW1jcHkoKGNoYXIgKilkZXN0X2NweSwgKGNoYXIgKikqcF9hcmd2LCBzaXplX2FsKTsKKwkgIG1lbWNweSgoY2hhciAqKSBkZXN0X2NweSwgKGNoYXIgKikgKnBfYXJndiwgc2l6ZV9hbCk7CiAJICBuZXh0X2FyZyArPSAoc2l6ZV9hbCArIDMpIC8gNDsKKyNlbmRpZgogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX0lOVDoKLQljYXNlIEZGSV9UWVBFX1VJTlQzMjoKIAljYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgKikqcF9hcmd2OworCSAgZ3BydmFsdWUgPSAqKHNpZ25lZCBpbnQgKikgKnBfYXJndjsKKwkgIGdvdG8gcHV0Z3ByOworCisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgaW50ICopICpwX2FyZ3Y7CiAJcHV0Z3ByOgogCSAgKm5leHRfYXJnKysgPSBncHJ2YWx1ZTsKIAkgIGJyZWFrOwpAQCAtMjY4LDggKzMwNCw0NCBAQAogICAvKiBEbyBub3QgYWRkIGFkZGl0aW9uYWwgdGFpbCBwYWRkaW5nLiAgKi8KIH0KIAorLyogQWRqdXN0IHRoZSBzaXplIG9mIFMgdG8gYmUgY29ycmVjdCBmb3IgQUlYLgorICAgV29yZC1hbGlnbiBkb3VibGUgdW5sZXNzIGl0IGlzIHRoZSBmaXJzdCBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUuICAqLworCitzdGF0aWMgdm9pZAorYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgKGZmaV90eXBlICpzKQoreworICBpbnQgaTsKKworICBpZiAocy0+dHlwZSAhPSBGRklfVFlQRV9TVFJVQ1QpCisgICAgcmV0dXJuOworCisgIHMtPnNpemUgPSAwOworICBmb3IgKGkgPSAwOyBzLT5lbGVtZW50c1tpXSAhPSBOVUxMOyBpKyspCisgICAgeworICAgICAgZmZpX3R5cGUgKnA7CisgICAgICBpbnQgYWxpZ247CisgICAgICAKKyAgICAgIHAgPSBzLT5lbGVtZW50c1tpXTsKKyAgICAgIGFpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzIChwKTsKKyAgICAgIGFsaWduID0gcC0+YWxpZ25tZW50OworICAgICAgaWYgKGkgIT0gMCAmJiBwLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKwlhbGlnbiA9IDQ7CisgICAgICBzLT5zaXplID0gQUxJR04ocy0+c2l6ZSwgYWxpZ24pICsgcC0+c2l6ZTsKKyAgICB9CisgIAorICBzLT5zaXplID0gQUxJR04ocy0+c2l6ZSwgcy0+YWxpZ25tZW50KTsKKyAgCisgIGlmIChzLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9VSU5UNjQKKyAgICAgIHx8IHMtPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX1NJTlQ2NAorICAgICAgfHwgcy0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFCisgICAgICB8fCBzLT5lbGVtZW50c1swXS0+YWxpZ25tZW50ID09IDgpCisgICAgcy0+YWxpZ25tZW50ID0gcy0+YWxpZ25tZW50ID4gOCA/IHMtPmFsaWdubWVudCA6IDg7CisgIC8qIERvIG5vdCBhZGQgYWRkaXRpb25hbCB0YWlsIHBhZGRpbmcuICAqLworfQorCiAvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nLiAgKi8KLWZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXAoZmZpX2NpZiAqY2lmKQorZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKmNpZikKIHsKICAgLyogQWxsIHRoaXMgaXMgZm9yIHRoZSBEQVJXSU4gQUJJLiAgKi8KICAgaW50IGk7CkBAIC0yOTAsNiArMzYyLDEzIEBACiAJZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgKGNpZi0+YXJnX3R5cGVzW2ldKTsKICAgICB9CiAKKyAgaWYgKGNpZi0+YWJpID09IEZGSV9BSVgpCisgICAgeworICAgICAgYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgKGNpZi0+cnR5cGUpOworICAgICAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKykKKwlhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyAoY2lmLT5hcmdfdHlwZXNbaV0pOworICAgIH0KKwogICAvKiBTcGFjZSBmb3IgdGhlIGZyYW1lIHBvaW50ZXIsIGNhbGxlZSdzIExSLCBDUiwgZXRjLCBhbmQgZm9yCiAgICAgIHRoZSBhc20ncyB0ZW1wIHJlZ3MuICAqLwogCkBAIC0zMjQsNiArNDAzLDkgQEAKIAogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorI2lmZGVmIFBPV0VSUEM2NAorICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKyNlbmRpZgogICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKICAgICAgIGJyZWFrOwogCkBAIC0zODcsMTEgKzQ2OSwxNCBAQAogCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgogCSAgc2l6ZV9hbCA9ICgqcHRyKS0+c2l6ZTsKIAkgIC8qIElmIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdCBpcyBhIGRvdWJsZSwgdGhlbiBhbGlnbgotCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4KLQkgICAgIFR5cGUgMyBpcyBkZWZpbmVkIGluIGluY2x1ZGUvZmZpLmguICNkZWZpbmUgRkZJX1RZUEVfRE9VQkxFIDMuICAqLwotCSAgaWYgKCgqcHRyKS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gMykKKwkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuICAqLworCSAgaWYgKCgqcHRyKS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQogCSAgICBzaXplX2FsID0gQUxJR04oKCpwdHIpLT5zaXplLCA4KTsKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGludGFyZ19jb3VudCArPSAoc2l6ZV9hbCArIDcpIC8gODsKKyNlbHNlCiAJICBpbnRhcmdfY291bnQgKz0gKHNpemVfYWwgKyAzKSAvIDQ7CisjZW5kaWYKIAkgIGJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQxMCw4ICs0OTUsMTMgQEAKICAgICBieXRlcyArPSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YoZG91YmxlKTsKIAogICAvKiBTdGFjayBzcGFjZS4gICovCisjaWZkZWYgUE9XRVJQQzY0CisgIGlmICgoaW50YXJnX2NvdW50ICsgZnBhcmdfY291bnQpID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorICAgIGJ5dGVzICs9IChpbnRhcmdfY291bnQgKyBmcGFyZ19jb3VudCkgKiBzaXplb2YobG9uZyk7CisjZWxzZQogICBpZiAoKGludGFyZ19jb3VudCArIDIgKiBmcGFyZ19jb3VudCkgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCiAgICAgYnl0ZXMgKz0gKGludGFyZ19jb3VudCArIDIgKiBmcGFyZ19jb3VudCkgKiBzaXplb2YobG9uZyk7CisjZW5kaWYKICAgZWxzZQogICAgIGJ5dGVzICs9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZihsb25nKTsKIApAQCAtNDI0LDEyICs1MTQsMTMgQEAKICAgcmV0dXJuIEZGSV9PSzsKIH0KIAotZXh0ZXJuIHZvaWQgZmZpX2NhbGxfQUlYKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosCitleHRlcm4gdm9pZCBmZmlfY2FsbF9BSVgoZXh0ZW5kZWRfY2lmICosIGxvbmcsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAogCQkJIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKCpmbjIpKHZvaWQpKTsKLWV4dGVybiB2b2lkIGZmaV9jYWxsX0RBUldJTihleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAorZXh0ZXJuIHZvaWQgZmZpX2NhbGxfREFSV0lOKGV4dGVuZGVkX2NpZiAqLCBsb25nLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKIAkJCSAgICB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICgqZm4yKSh2b2lkKSk7CiAKLXZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit2b2lkCitmZmlfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCiB7CiAgIGV4dGVuZGVkX2NpZiBlY2lmOwogCkBAIC00NDIsNyArNTMzLDcgQEAKICAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYKICAgICAgIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkpCiAgICAgewotICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CiAgICAgfQogICBlbHNlCiAgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CkBAIC00NTAsMTEgKzU0MSwxMSBAQAogICBzd2l0Y2ggKGNpZi0+YWJpKQogICAgIHsKICAgICBjYXNlIEZGSV9BSVg6Ci0gICAgICBmZmlfY2FsbF9BSVgoJmVjaWYsIC1jaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4sCisgICAgICBmZmlfY2FsbF9BSVgoJmVjaWYsIC0obG9uZyljaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4sCiAJCSAgIGZmaV9wcmVwX2FyZ3MpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRklfREFSV0lOOgotICAgICAgZmZpX2NhbGxfREFSV0lOKCZlY2lmLCAtY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuLAorICAgICAgZmZpX2NhbGxfREFSV0lOKCZlY2lmLCAtKGxvbmcpY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuLAogCQkgICAgICBmZmlfcHJlcF9hcmdzKTsKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC02MTcsOCArNzA4LDkgQEAKICAgZG91YmxlIGQ7CiB9IGZmaV9kYmxmbDsKIAotaW50IGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gKGZmaV9jbG9zdXJlKiwgdm9pZCosCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyosIGZmaV9kYmxmbCopOworaW50CitmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIChmZmlfY2xvc3VyZSAqLCB2b2lkICosCisJCQkgICB1bnNpZ25lZCBsb25nICosIGZmaV9kYmxmbCAqKTsKIAogLyogQmFzaWNhbGx5IHRoZSB0cmFtcG9saW5lIGludm9rZXMgZmZpX2Nsb3N1cmVfQVNNLCBhbmQgb24KICAgIGVudHJ5LCByMTEgaG9sZHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsb3N1cmUuCkBAIC02MjcsOCArNzE5LDkgQEAKICAgIHVwIHNwYWNlIGZvciBhIHJldHVybiB2YWx1ZSwgZmZpX2Nsb3N1cmVfQVNNIGludm9rZXMgdGhlCiAgICBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsuICAqLwogCi1pbnQgZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsIHZvaWQgKiBydmFsdWUsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyAqIHBnciwgZmZpX2RibGZsICogcGZyKQoraW50CitmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAorCQkJICAgdW5zaWduZWQgbG9uZyAqcGdyLCBmZmlfZGJsZmwgKnBmcikKIHsKICAgLyogcnZhbHVlIGlzIHRoZSBwb2ludGVyIHRvIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaW4gY2xvc3VyZSBhc3NlbWJseQogICAgICBwZ3IgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgcjMtcjEwIGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfQVNNCkBAIC02NDUsMTggKzczOCwxMiBAQAogICB2b2lkICoqICAgICAgICAgIGF2YWx1ZTsKICAgZmZpX3R5cGUgKiogICAgICBhcmdfdHlwZXM7CiAgIGxvbmcgICAgICAgICAgICAgaSwgYXZuOwotICBsb25nICAgICAgICAgICAgIG5mOyAgIC8qIG51bWJlciBvZiBmbG9hdGluZyByZWdpc3RlcnMgYWxyZWFkeSB1c2VkLiAgKi8KLSAgbG9uZyAgICAgICAgICAgICBuZzsgICAvKiBudW1iZXIgb2YgZ2VuZXJhbCByZWdpc3RlcnMgYWxyZWFkeSB1c2VkLiAgKi8KICAgZmZpX2NpZiAqICAgICAgICBjaWY7Ci0gIGRvdWJsZSAgICAgICAgICAgdGVtcDsKKyAgZmZpX2RibGZsICogICAgICBlbmRfcGZyID0gcGZyICsgTlVNX0ZQUl9BUkdfUkVHSVNURVJTOwogICB1bnNpZ25lZCAgICAgICAgIHNpemVfYWw7Ci0gIHVuaW9uIGxkdSAgICAgICAgdGVtcF9sZDsKIAogICBjaWYgPSBjbG9zdXJlLT5jaWY7Ci0gIGF2YWx1ZSA9IGFsbG9jYShjaWYtPm5hcmdzICogc2l6ZW9mKHZvaWQgKikpOwotCi0gIG5mID0gMDsKLSAgbmcgPSAwOworICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2Yodm9pZCAqKSk7CiAKICAgLyogQ29weSB0aGUgY2FsbGVyJ3Mgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBhZGRyZXNzIHNvIHRoYXQgdGhlIGNsb3N1cmUKICAgICAgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLiAgKi8KQEAgLTY2NCw3ICs3NTEsNiBAQAogICAgIHsKICAgICAgIHJ2YWx1ZSA9ICh2b2lkICopICpwZ3I7CiAgICAgICBwZ3IrKzsKLSAgICAgIG5nKys7CiAgICAgfQogCiAgIGkgPSAwOwpAQCAtNjc4LDU4ICs3NjQsODIgQEAKIAl7CiAJY2FzZSBGRklfVFlQRV9TSU5UODoKIAljYXNlIEZGSV9UWVBFX1VJTlQ4OgorI2lmZGVmIFBPV0VSUEM2NAorCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgNzsKKyNlbHNlCiAJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAzOwotCSAgbmcrKzsKKyNlbmRpZgogCSAgcGdyKys7CiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgogCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorI2lmZGVmIFBPV0VSUEM2NAorCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgNjsKKyNlbHNlCiAJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAyOwotCSAgbmcrKzsKKyNlbmRpZgogCSAgcGdyKys7CiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgogCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorI2lmZGVmIFBPV0VSUEM2NAorCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgNDsKKyNlbHNlCiAJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgogCSAgYXZhbHVlW2ldID0gcGdyOwotCSAgbmcrKzsKKyNlbmRpZgogCSAgcGdyKys7CiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorI2lmZGVmIFBPV0VSUEM2NAorCSAgc2l6ZV9hbCA9IGFyZ190eXBlc1tpXS0+c2l6ZTsKKwkgIGlmIChhcmdfdHlwZXNbaV0tPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKwkgICAgc2l6ZV9hbCA9IEFMSUdOIChhcmdfdHlwZXNbaV0tPnNpemUsIDgpOworCSAgaWYgKHNpemVfYWwgPCAzICYmIGNpZi0+YWJpID09IEZGSV9EQVJXSU4pCisJICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopIHBnciArIDggLSBzaXplX2FsOworCSAgZWxzZQorCSAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSBwZ3I7CisJICBwZ3IgKz0gKHNpemVfYWwgKyA3KSAvIDg7CisjZWxzZQogCSAgLyogU3RydWN0dXJlcyB0aGF0IG1hdGNoIHRoZSBiYXNpYyBtb2RlcyAoUUkgMSBieXRlLCBISSAyIGJ5dGVzLAogCSAgICAgU0kgNCBieXRlcykgYXJlIGFsaWduZWQgYXMgaWYgdGhleSB3ZXJlIHRob3NlIG1vZGVzLiAgKi8KIAkgIHNpemVfYWwgPSBhcmdfdHlwZXNbaV0tPnNpemU7CiAJICAvKiBJZiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3QgaXMgYSBkb3VibGUsIHRoZW4gYWxpZ24KLQkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuCi0JICAgICBUeXBlIDMgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2ZmaS5oLiAjZGVmaW5lIEZGSV9UWVBFX0RPVUJMRSAzLiAgKi8KLQkgIGlmIChhcmdfdHlwZXNbaV0tPmVsZW1lbnRzWzBdLT50eXBlID09IDMpCisJICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLiAgKi8KKwkgIGlmIChhcmdfdHlwZXNbaV0tPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKIAkgICAgc2l6ZV9hbCA9IEFMSUdOKGFyZ190eXBlc1tpXS0+c2l6ZSwgOCk7CiAJICBpZiAoc2l6ZV9hbCA8IDMgJiYgY2lmLT5hYmkgPT0gRkZJX0RBUldJTikKIAkgICAgYXZhbHVlW2ldID0gKHZvaWQqKSBwZ3IgKyA0IC0gc2l6ZV9hbDsKIAkgIGVsc2UKIAkgICAgYXZhbHVlW2ldID0gKHZvaWQqKSBwZ3I7Ci0JICBuZyArPSAoc2l6ZV9hbCArIDMpIC8gNDsKIAkgIHBnciArPSAoc2l6ZV9hbCArIDMpIC8gNDsKKyNlbmRpZgogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKIAljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyNpZmRlZiBQT1dFUlBDNjQKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICBhdmFsdWVbaV0gPSBwZ3I7CisJICBwZ3IrKzsKKwkgIGJyZWFrOworI2Vsc2UKIAkgIC8qIExvbmcgbG9uZyBpbnRzIGFyZSBwYXNzZWQgaW4gdHdvIGdwcidzLiAgKi8KIAkgIGF2YWx1ZVtpXSA9IHBncjsKLQkgIG5nICs9IDI7CiAJICBwZ3IgKz0gMjsKIAkgIGJyZWFrOworI2VuZGlmCiAKIAljYXNlIEZGSV9UWVBFX0ZMT0FUOgogCSAgLyogQSBmbG9hdCB2YWx1ZSBjb25zdW1lcyBhIEdQUi4KIAkgICAgIFRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICAqLwotCSAgaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgaWYgKHBmciA8IGVuZF9wZnIpCiAJICAgIHsKLQkgICAgICB0ZW1wID0gcGZyLT5kOwotCSAgICAgIHBmci0+ZiA9IChmbG9hdCl0ZW1wOworCSAgICAgIGRvdWJsZSB0ZW1wID0gcGZyLT5kOworCSAgICAgIHBmci0+ZiA9IChmbG9hdCkgdGVtcDsKIAkgICAgICBhdmFsdWVbaV0gPSBwZnI7CiAJICAgICAgcGZyKys7CiAJICAgIH0KQEAgLTczNywxNSArODQ3LDEzIEBACiAJICAgIHsKIAkgICAgICBhdmFsdWVbaV0gPSBwZ3I7CiAJICAgIH0KLQkgIG5mKys7Ci0JICBuZysrOwogCSAgcGdyKys7CiAJICBicmVhazsKIAogCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgogCSAgLyogQSBkb3VibGUgdmFsdWUgY29uc3VtZXMgdHdvIEdQUnMuCiAJICAgICBUaGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgKi8KLQkgIGlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgIGlmIChwZnIgPCBlbmRfcGZyKQogCSAgICB7CiAJICAgICAgYXZhbHVlW2ldID0gcGZyOwogCSAgICAgIHBmcisrOwpAQCAtNzU0LDE3ICs4NjIsMzYgQEAKIAkgICAgewogCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKIAkgICAgfQotCSAgbmYrKzsKLQkgIG5nICs9IDI7CisjaWZkZWYgUE9XRVJQQzY0CisJICBwZ3IrKzsKKyNlbHNlCiAJICBwZ3IgKz0gMjsKKyNlbmRpZgogCSAgYnJlYWs7CiAKICNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQogCiAJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2lmZGVmIFBPV0VSUEM2NAorCSAgaWYgKHBmciArIDEgPCBlbmRfcGZyKQorCSAgICB7CisJICAgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICAgIHBmciArPSAyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAocGZyIDwgZW5kX3BmcikKKwkJeworCQkgICpwZ3IgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGZyOworCQkgIHBmcisrOworCQl9CisJICAgICAgYXZhbHVlW2ldID0gcGdyOworCSAgICB9CisJICBwZ3IgKz0gMjsKKyNlbHNlICAvKiBQT1dFUlBDNjQgKi8KIAkgIC8qIEEgbG9uZyBkb3VibGUgdmFsdWUgY29uc3VtZXMgZm91ciBHUFJzIGFuZCB0d28gRlBScy4KIAkgICAgIFRoZXJlIGFyZSAxMyA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuICAqLwotCSAgaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIC0gMSkKKwkgIGlmIChwZnIgKyAxIDwgZW5kX3BmcikKIAkgICAgewogCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKIAkgICAgICBwZnIgKz0gMjsKQEAgLTc3MiwxOSArODk5LDIwIEBACiAJICAvKiBIZXJlIHdlIGhhdmUgdGhlIHNpdHVhdGlvbiB3aGVyZSBvbmUgcGFydCBvZiB0aGUgbG9uZyBkb3VibGUKIAkgICAgIGlzIHN0b3JlZCBpbiBmcHIxMyBhbmQgdGhlIG90aGVyIHBhcnQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCiAJICAgICBXZSB1c2UgYSB1bmlvbiB0byBwYXNzIHRoZSBsb25nIGRvdWJsZSB0byBhdmFsdWVbaV0uICAqLwotCSAgZWxzZSBpZiAobmYgPT0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTIC0gMSkKKwkgIGVsc2UgaWYgKHBmciArIDEgPT0gZW5kX3BmcikKIAkgICAgeworCSAgICAgIHVuaW9uIGxkdSB0ZW1wX2xkOwogCSAgICAgIG1lbWNweSAoJnRlbXBfbGQubGJbMF0sIHBmciwgc2l6ZW9mKGxkYml0cykpOwogCSAgICAgIG1lbWNweSAoJnRlbXBfbGQubGJbMV0sIHBnciArIDIsIHNpemVvZihsZGJpdHMpKTsKIAkgICAgICBhdmFsdWVbaV0gPSAmdGVtcF9sZC5sZDsKKwkgICAgICBwZnIrKzsKIAkgICAgfQogCSAgZWxzZQogCSAgICB7CiAJICAgICAgYXZhbHVlW2ldID0gcGdyOwogCSAgICB9Ci0JICBuZiArPSAyOwotCSAgbmcgKz0gNDsKIAkgIHBnciArPSA0OworI2VuZGlmICAvKiBQT1dFUlBDNjQgKi8KIAkgIGJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCmluZGV4IGY0OTlhYzMuLmI0Zjk5MmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi1DLSotCiAgICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDAzICBSZWQgSGF0LCBJbmMuCi0gICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYwogICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciBQb3dlclBDLgogCiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKQEAgLTMwLDcgKzMwLDExIEBACiAKIC8qIC0tLS0gU3lzdGVtIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZiBkZWZpbmVkIChQT1dFUlBDKSAmJiBkZWZpbmVkIChfX3Bvd2VycGM2NF9fKQorI2lmIGRlZmluZWQgKFBPV0VSUEMpICYmIGRlZmluZWQgKF9fcG93ZXJwYzY0X18pCS8qIGxpbnV4NjQgKi8KKyNkZWZpbmUgUE9XRVJQQzY0CisjZWxpZiBkZWZpbmVkIChQT1dFUlBDX0RBUldJTikgJiYgZGVmaW5lZCAoX19wcGM2NF9fKQkvKiBEYXJ3aW4gKi8KKyNkZWZpbmUgUE9XRVJQQzY0CisjZWxpZiBkZWZpbmVkIChQT1dFUlBDX0FJWCkgJiYgZGVmaW5lZCAoX182NEJJVF9fKQkvKiBBSVg2NCAqLwogI2RlZmluZSBQT1dFUlBDNjQKICNlbmRpZgogCkBAIC03OCw2ICs4Miw4IEBACiAgIEZGSV9TWVNWLAogICBGRklfR0NDX1NZU1YsCiAgIEZGSV9MSU5VWDY0LAorICBGRklfTElOVVgsCisgIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULAogICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTViwKICNlbmRpZgogCkBAIC05Niw3ICsxMDIsOSBAQAogLyogTmVlZGVkIGZvciBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOCBzdXBwb3J0LiAgKi8KICNkZWZpbmUgRkZJX1RZUEVfVUlOVDEyOCAoRkZJX1RZUEVfTEFTVCArIDEpCiAKLS8qIE5lZWRlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0dXJlIHJldHVybnMuICAqLworLyogTmVlZGVkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucy4KKyAgIFdlIHVzZSB0d28gZmxhZyBiaXRzLCAoRkxBR19TWVNWX1NNU1RfUjMsIEZMQUdfU1lTVl9TTVNUX1I0KSB3aGljaCBhcmUKKyAgIGRlZmluZWQgaW4gZmZpLmMsIHRvIGRldGVybWluZSB0aGUgZXhhY3QgcmV0dXJuIHR5cGUgYW5kIGl0cyBzaXplLiAgKi8KICNkZWZpbmUgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKEZGSV9UWVBFX0xBU1QgKyAyKQogCiAjaWYgZGVmaW5lZChQT1dFUlBDNjQpIHx8IGRlZmluZWQoUE9XRVJQQ19BSVgpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCmluZGV4IGMwNjMxMWYuLjk2ZWEyMmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCkBAIC0xMzYsMjkgKzEzNiwxOCBAQAogCWIJTChkb25lX3JldHVybl92YWx1ZSkKIAogTChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKToKLQltdGNyZgkweDEwLCVyMzEJLyogY3IzICAqLwotCWJ0LQkxNSxMKHNtc3Rfb25lX3JlZ2lzdGVyKQotCW10Y3JmCTB4MDgsJXIzMQkvKiBjcjQgICovCi0JYnQtCTE2LEwoc21zdF90d29fcmVnaXN0ZXIpCi0JYiAgICAgICBMKGRvbmVfcmV0dXJuX3ZhbHVlKQotCi1MKHNtc3Rfb25lX3JlZ2lzdGVyKToKLQlybHdpbm0gICVyNSwlcjMxLDUrMjMsMzItNSwzMSAvKiBFeHRyYWN0IHRoZSB2YWx1ZSB0byBzaGlmdC4gICovCi0Jc2x3CSVyMywlcjMsJXI1Ci0Jc3R3CSVyMywwKCVyMzApCi0JYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQotTChzbXN0X3R3b19yZWdpc3Rlcik6Ci0Jcmx3aW5tICAlcjUsJXIzMSw1KzIzLDMyLTUsMzEgLyogRXh0cmFjdCB0aGUgdmFsdWUgdG8gc2hpZnQuICAqLwotCWNtcHdpCSVyNSwwCi0Jc3ViZmljCSVyOSwlcjUsMzIKLQlzbHcJJXIyOSwlcjMsJXI1Ci0Jc3J3CSVyOSwlcjQsJXI5Ci0JYmVxLQlMKHNtc3RfOGJ5dGUpCi0Jb3IJJXIzLCVyOSwlcjI5Ci0Jc2x3CSVyNCwlcjQsJXI1Ci1MKHNtc3RfOGJ5dGUpOgotCXN0dwklcjMsMCglcjMwKQotCXN0dwklcjQsNCglcjMwKQorCWV4dHJ3aQklcjYsJXIzMSwyLDE5ICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHBhZGRpbmcgPSBzaGlmdC84ICovCisJbXRjcmYJMHgwMiwlcjMxCSAgICAgIC8qIGNvcHkgZmxhZ3MgdG8gY3JbMjQ6MjddIChjcjYpICovCisJZXh0cndpCSVyNSwlcjMxLDUsMTkgICAgICAgICAvKiByNSA8LSBudW1iZXIgb2YgYml0cyBvZiBwYWRkaW5nICovCisJc3ViZmljICAlcjYsJXI2LDQgICAgICAgICAgICAgLyogcjYgPC0gbnVtYmVyIG9mIHVzZWZ1bCBieXRlcyBpbiByMyAqLworCWJmLQkyNSxMKGRvbmVfcmV0dXJuX3ZhbHVlKSAvKiBzdHJ1Y3QgaW4gcjMgPyBpZiBub3QsIGRvbmUuICovCisvKiBzbXN0X29uZV9yZWdpc3RlcjogKi8KKwlzbHcJJXIzLCVyMywlcjUgICAgICAgICAgIC8qIExlZnQtanVzdGlmeSB2YWx1ZSBpbiByMyAqLworCW10eGVyCSVyNiAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIGJ5dGUgY291bnQgdG8gWEVSIC4uLiAqLworCXN0c3d4CSVyMywwLCVyMzAgICAgICAgICAgICAvKiAuLi4gYW5kIHN0b3JlIHRoYXQgbWFueSBieXRlcyAqLworCWJmKwkyNixMKGRvbmVfcmV0dXJuX3ZhbHVlKSAgLyogc3RydWN0IGluIHIzOnI0ID8gKi8KKwlhZGQJJXI2LCVyNiwlcjMwICAgICAgICAgIC8qIGFkanVzdCBwb2ludGVyICovCisJc3Rzd2kJJXI0LCVyNiw0ICAgICAgICAgICAgIC8qIHN0b3JlIGxhc3QgZm91ciBieXRlcyAqLwogCWIJTChkb25lX3JldHVybl92YWx1ZSkKIAogLkxGRTE6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYwppbmRleCBlYjc4ZjlhLi5jMWMzYjlhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKQEAgLTEwOSwxNiArMTA5LDEzIEBACiAgIC8qIFBlcmZvcm0gYSBzYW5pdHkgY2hlY2sgb24gdGhlIHJldHVybiB0eXBlICovCiAgIEZGSV9BU1NFUlRfVkFMSURfVFlQRShjaWYtPnJ0eXBlKTsKIAotICAvKiB4ODYtNjQgYW5kIHMzOTAgc3RhY2sgc3BhY2UgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIGluIHByZXBfbWFjaGRlcC4gICovCi0jaWYgIWRlZmluZWQgTTY4SyAmJiAhZGVmaW5lZCBfX3g4Nl82NF9fICYmICFkZWZpbmVkIFMzOTAgJiYgIWRlZmluZWQgUEEKKyAgLyogeDg2LCB4ODYtNjQgYW5kIHMzOTAgc3RhY2sgc3BhY2UgYWxsb2NhdGlvbiBpcyBoYW5kbGVkIGluIHByZXBfbWFjaGRlcC4gKi8KKyNpZiAhZGVmaW5lZCBNNjhLICYmICFkZWZpbmVkIF9faTM4Nl9fICYmICFkZWZpbmVkIF9feDg2XzY0X18gJiYgIWRlZmluZWQgUzM5MCAmJiAhZGVmaW5lZCBQQQogICAvKiBNYWtlIHNwYWNlIGZvciB0aGUgcmV0dXJuIHN0cnVjdHVyZSBwb2ludGVyICovCiAgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAogI2lmZGVmIFNQQVJDCiAgICAgICAmJiAoY2lmLT5hYmkgIT0gRkZJX1Y5IHx8IGNpZi0+cnR5cGUtPnNpemUgPiAzMikKICNlbmRpZgotI2lmZGVmIFg4Nl9EQVJXSU4KLSAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplID4gOCkKLSNlbmRpZgogICAgICApCiAgICAgYnl0ZXMgPSBTVEFDS19BUkdfU0laRShzaXplb2Yodm9pZCopKTsKICNlbmRpZgpAQCAtMTM0LDcgKzEzMSw3IEBACiAJIGNoZWNrIGFmdGVyIHRoZSBpbml0aWFsaXphdGlvbi4gICovCiAgICAgICBGRklfQVNTRVJUX1ZBTElEX1RZUEUoKnB0cik7CiAKLSNpZiAhZGVmaW5lZCBfX3g4Nl82NF9fICYmICFkZWZpbmVkIFMzOTAgJiYgIWRlZmluZWQgUEEKKyNpZiAhZGVmaW5lZCBfX2kzODZfXyAmJiAhZGVmaW5lZCBfX3g4Nl82NF9fICYmICFkZWZpbmVkIFMzOTAgJiYgIWRlZmluZWQgUEEKICNpZmRlZiBTUEFSQwogICAgICAgaWYgKCgoKnB0ciktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCiAJICAgJiYgKCgqcHRyKS0+c2l6ZSA+IDE2IHx8IGNpZi0+YWJpICE9IEZGSV9WOSkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9yYXdfYXBpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9yYXdfYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyMTM3MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Jhd19hcGkuYwpAQCAtMCwwICsxLDI1NCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHJhd19hcGkuYyAtIENvcHlyaWdodCAoYykgMTk5OSwgMjAwOCAgUmVkIEhhdCwgSW5jLgorCisgICBBdXRob3I6IEtyZXN0ZW4gS3JhYiBUaG9ydXAgPGtyYWJAZ251Lm9yZz4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhpcyBmaWxlIGRlZmluZXMgZ2VuZXJpYyBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSByYXcgYXBpLiAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaWYgIUZGSV9OT19SQVdfQVBJCisKK3NpemVfdAorZmZpX3Jhd19zaXplIChmZmlfY2lmICpjaWYpCit7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBpbnQgaTsKKworICBmZmlfdHlwZSAqKmF0ID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgZm9yIChpID0gY2lmLT5uYXJncy0xOyBpID49IDA7IGktLSwgYXQrKykKKyAgICB7CisjaWYgIUZGSV9OT19TVFJVQ1RTCisgICAgICBpZiAoKCphdCktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorCXJlc3VsdCArPSBBTElHTiAoc2l6ZW9mICh2b2lkKiksIEZGSV9TSVpFT0ZfQVJHKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorCXJlc3VsdCArPSBBTElHTiAoKCphdCktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKTsKKyAgICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitmZmlfcmF3X3RvX3B0cmFycmF5IChmZmlfY2lmICpjaWYsIGZmaV9yYXcgKnJhdywgdm9pZCAqKmFyZ3MpCit7CisgIHVuc2lnbmVkIGk7CisgIGZmaV90eXBlICoqdHAgPSBjaWYtPmFyZ190eXBlczsKKworI2lmIFdPUkRTX0JJR0VORElBTgorCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CSAgCisgICAgICBzd2l0Y2ggKCgqdHApLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAqYXJncyA9ICh2b2lkKikgKChjaGFyKikocmF3KyspICsgRkZJX1NJWkVPRl9BUkcgLSAxKTsKKwkgIGJyZWFrOworCSAgCisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAqYXJncyA9ICh2b2lkKikgKChjaGFyKikocmF3KyspICsgRkZJX1NJWkVPRl9BUkcgLSAyKTsKKwkgIGJyZWFrOworCisjaWYgRkZJX1NJWkVPRl9BUkcgPj0gNAkgIAorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCSAgKmFyZ3MgPSAodm9pZCopICgoY2hhciopKHJhdysrKSArIEZGSV9TSVpFT0ZfQVJHIC0gNCk7CisJICBicmVhazsKKyNlbmRpZgorCQorI2lmICFGRklfTk9fU1RSVUNUUyAgCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAqYXJncyA9IChyYXcrKyktPnB0cjsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICAqYXJncyA9ICh2b2lkKikgJihyYXcrKyktPnB0cjsKKwkgIGJyZWFrOworCSAgCisJZGVmYXVsdDoKKwkgICphcmdzID0gcmF3OworCSAgcmF3ICs9IEFMSUdOICgoKnRwKS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpIC8gRkZJX1NJWkVPRl9BUkc7CisJfQorICAgIH0KKworI2Vsc2UgLyogV09SRFNfQklHRU5ESUFOICovCisKKyNpZiAhUERQCisKKyAgLyogdGhlbiBhc3N1bWUgbGl0dGxlIGVuZGlhbiAqLworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgewkgIAorI2lmICFGRklfTk9fU1RSVUNUUworICAgICAgaWYgKCgqdHApLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKwl7CisJICAqYXJncyA9IChyYXcrKyktPnB0cjsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwl7CisJICAqYXJncyA9ICh2b2lkKikgcmF3OworCSAgcmF3ICs9IEFMSUdOICgoKnRwKS0+c2l6ZSwgc2l6ZW9mICh2b2lkKikpIC8gc2l6ZW9mICh2b2lkKik7CisJfQorICAgIH0KKworI2Vsc2UKKyNlcnJvciAicGRwIGVuZGlhbiBub3Qgc3VwcG9ydGVkIgorI2VuZGlmIC8qICEgUERQICovCisKKyNlbmRpZiAvKiBXT1JEU19CSUdFTkRJQU4gKi8KK30KKwordm9pZAorZmZpX3B0cmFycmF5X3RvX3JhdyAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX3JhdyAqcmF3KQoreworICB1bnNpZ25lZCBpOworICBmZmlfdHlwZSAqKnRwID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsJICAKKyAgICAgIHN3aXRjaCAoKCp0cCktPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAocmF3KyspLT51aW50ID0gKihVSU5UOCopICgqYXJncyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAocmF3KyspLT5zaW50ID0gKihTSU5UOCopICgqYXJncyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDE2KikgKCphcmdzKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAocmF3KyspLT5zaW50ID0gKihTSU5UMTYqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKyNpZiBGRklfU0laRU9GX0FSRyA+PSA0CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJICAocmF3KyspLT51aW50ID0gKihVSU5UMzIqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQzMiopICgqYXJncyk7CisJICBicmVhazsKKyNlbmRpZgorCisjaWYgIUZGSV9OT19TVFJVQ1RTCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAocmF3KyspLT5wdHIgPSAqYXJnczsKKwkgIGJyZWFrOworI2VuZGlmCisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICAocmF3KyspLT5wdHIgPSAqKih2b2lkKioqKSBhcmdzOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgbWVtY3B5ICgodm9pZCopIHJhdy0+ZGF0YSwgKHZvaWQqKSphcmdzLCAoKnRwKS0+c2l6ZSk7CisJICByYXcgKz0gQUxJR04gKCgqdHApLT5zaXplLCBGRklfU0laRU9GX0FSRykgLyBGRklfU0laRU9GX0FSRzsKKwl9CisgICAgfQorfQorCisjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCisKKy8qIFRoaXMgaXMgYSBnZW5lcmljIGRlZmluaXRpb24gb2YgZmZpX3Jhd19jYWxsLCB0byBiZSB1c2VkIGlmIHRoZQorICogbmF0aXZlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIGEgbWFjaGluZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAqIEhhdmluZyB0aGlzLCBhbGxvd3MgY29kZSB0byBiZSB3cml0dGVuIGZvciB0aGUgcmF3IEFQSSwgd2l0aG91dAorICogdGhlIG5lZWQgZm9yIHN5c3RlbS1zcGVjaWZpYyBjb2RlIHRvIGhhbmRsZSBpbnB1dCBpbiB0aGF0IGZvcm1hdDsKKyAqIHRoZXNlIGZvbGxvd2luZyBjb3VwbGUgb2YgZnVuY3Rpb25zIHdpbGwgaGFuZGxlIHRoZSB0cmFuc2xhdGlvbiBmb3J0aAorICogYW5kIGJhY2sgYXV0b21hdGljYWxseS4gKi8KKwordm9pZCBmZmlfcmF3X2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCBmZmlfcmF3ICpyYXcpCit7CisgIHZvaWQgKiphdmFsdWUgPSAodm9pZCoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQqKSk7CisgIGZmaV9yYXdfdG9fcHRyYXJyYXkgKGNpZiwgcmF3LCBhdmFsdWUpOworICBmZmlfY2FsbCAoY2lmLCBmbiwgcnZhbHVlLCBhdmFsdWUpOworfQorCisjaWYgRkZJX0NMT1NVUkVTCQkvKiBiYXNlIHN5c3RlbSBwcm92aWRlcyBjbG9zdXJlcyAqLworCitzdGF0aWMgdm9pZAorZmZpX3RyYW5zbGF0ZV9hcmdzIChmZmlfY2lmICpjaWYsIHZvaWQgKnJ2YWx1ZSwKKwkJICAgIHZvaWQgKiphdmFsdWUsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZmZpX3JhdyAqcmF3ID0gKGZmaV9yYXcqKWFsbG9jYSAoZmZpX3Jhd19zaXplIChjaWYpKTsKKyAgZmZpX3Jhd19jbG9zdXJlICpjbCA9IChmZmlfcmF3X2Nsb3N1cmUqKXVzZXJfZGF0YTsKKworICBmZmlfcHRyYXJyYXlfdG9fcmF3IChjaWYsIGF2YWx1ZSwgcmF3KTsKKyAgKCpjbC0+ZnVuKSAoY2lmLCBydmFsdWUsIHJhdywgY2wtPnVzZXJfZGF0YSk7Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyAoZmZpX3Jhd19jbG9zdXJlKiBjbCwKKwkJCSAgZmZpX2NpZiAqY2lmLAorCQkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksCisJCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCSAgdm9pZCAqY29kZWxvYykKK3sKKyAgZmZpX3N0YXR1cyBzdGF0dXM7CisKKyAgc3RhdHVzID0gZmZpX3ByZXBfY2xvc3VyZV9sb2MgKChmZmlfY2xvc3VyZSopIGNsLAorCQkJCSBjaWYsCisJCQkJICZmZmlfdHJhbnNsYXRlX2FyZ3MsCisJCQkJIGNvZGVsb2MsCisJCQkJIGNvZGVsb2MpOworICBpZiAoc3RhdHVzID09IEZGSV9PSykKKyAgICB7CisgICAgICBjbC0+ZnVuICAgICAgID0gZnVuOworICAgICAgY2wtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgICB9CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmIC8qIEZGSV9DTE9TVVJFUyAqLworI2VuZGlmIC8qICFGRklfTkFUSVZFX1JBV19BUEkgKi8KKworI2lmIEZGSV9DTE9TVVJFUworCisvKiBBZ2FpbiwgaGVyZSBpcyB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGZmaV9wcmVwX3Jhd19jbG9zdXJlLCB3aGljaAorICogd2lsbCBpbnN0YWxsIGFuIGludGVybWVkaWF0ZSAiaHViIiBmb3IgdHJhbnNsYXRpb24gb2YgYXJndW1lbnRzIGZyb20KKyAqIHRoZSBwb2ludGVyLWFycmF5IGZvcm1hdCwgdG8gdGhlIHJhdyBmb3JtYXQgKi8KKworZmZpX3N0YXR1cworZmZpX3ByZXBfcmF3X2Nsb3N1cmUgKGZmaV9yYXdfY2xvc3VyZSogY2wsCisJCSAgICAgIGZmaV9jaWYgKmNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9pZCopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEpCit7CisgIHJldHVybiBmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MgKGNsLCBjaWYsIGZ1biwgdXNlcl9kYXRhLCBjbCk7Cit9CisKKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8KKworI2VuZGlmIC8qICFGRklfTk9fUkFXX0FQSSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwppbmRleCBiNGMxZGQ1Li40NzMxYTMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zMzkwL3N5c3YuUwpAQCAtMSw3ICsxLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDAgU29mdHdhcmUgQUcKICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCBSZWQgSGF0LCBJbmMuCi0JCisgCiAgICBTMzkwIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAgCiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKaW5kZXggZDdmYTFkNC4uNjliZDAyNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgS2F6IEtvamltYQorICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggS2F6IEtvamltYQogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggUmVkIEhhdCwgSW5jLgogICAgCiAgICBTdXBlckggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCkBAIC00NjEsNyArNDYxLDcgQEAKIAkJICAgICAgdm9pZCAqY29kZWxvYykKIHsKICAgdW5zaWduZWQgaW50ICp0cmFtcDsKLSAgdW5zaWduZWQgc2hvcnQgaW5zbjsKKyAgdW5zaWduZWQgaW50IGluc247CiAKICAgRkZJX0FTU0VSVCAoY2lmLT5hYmkgPT0gRkZJX0dDQ19TWVNWKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvc3lzdi5TCmluZGV4IGVhNzk4ZjcuLjViZTc1MTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9zeXN2LlMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA2IEtheiBLb2ppbWEKKyAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiwgMjAwOCBLYXogS29qaW1hCiAgICAKICAgIFN1cGVySCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKIApAQCAtMTQsMTQgKzE0LDE0IEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBMSUJGRklfQVNNCQpAQCAtNzAyLDYgKzcwMiwxMCBAQAogLmZmaV9jbG9zdXJlX1NZU1ZfZW5kOgogICAgICAgICAuc2l6ZSAgICBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKSwuZmZpX2Nsb3N1cmVfU1lTVl9lbmQtQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKIAorI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyNlbmRpZgorCiAJLnNlY3Rpb24JIi5laF9mcmFtZSIsImF3IixAcHJvZ2JpdHMKIF9fRlJBTUVfQkVHSU5fXzoKIAkuNGJ5dGUJLkxFQ0lFMS0uTFNDSUUxCS8qIExlbmd0aCBvZiBDb21tb24gSW5mb3JtYXRpb24gRW50cnkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L2ZmaS5jCmluZGV4IGIxN2NmMmMuLjhmYmMwNWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9mZmkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBLYXogS29qaW1hCisgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNiwgMjAwNyBLYXogS29qaW1hCiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCBBbnRob255IEdyZWVuCiAgICAKICAgIFN1cGVySCBTSG1lZGlhIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIApAQCAtNTYsOSArNTYsNyBAQAogLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQogICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgKi8KIAotLypALWV4cG9ydGhlYWRlckAqLwogdm9pZCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCi0vKkA9ZXhwb3J0aGVhZGVyQCovCiB7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOwogICByZWdpc3RlciB1bnNpZ25lZCBpbnQgYXZuOwpAQCAtMTYyLDYgKzE2MCw3IEBACiAgIGludCBuLCBtOwogICBpbnQgZ3JlZzsKICAgaW50IGZyZWc7CisgIGludCBmcGFpciA9IC0xOwogCiAgIGdyZWcgPSAocmV0dXJuX3R5cGUgKGNpZi0+cnR5cGUpID09IEZGSV9UWVBFX1NUUlVDVCA/IDEgOiAwKTsKICAgZnJlZyA9IDA7CkBAIC0xNzcsNyArMTc2LDEzIEBACiAJICBjaWYtPmJ5dGVzICs9IHNpemVvZiAoVUlOVDY0KSAtIHNpemVvZiAoZmxvYXQpOwogCSAgaWYgKGZyZWcgPj0gTkZSRUdBUkcgLSAxKQogCSAgICBjb250aW51ZTsKLQkgIGZyZWcrKzsKKwkgIGlmIChmcGFpciA8IDApCisJICAgIHsKKwkgICAgICBmcGFpciA9IGZyZWc7CisJICAgICAgZnJlZyArPSAyOworCSAgICB9CisJICBlbHNlCisJICAgIGZwYWlyID0gLTE7CiAJICBjaWYtPmZsYWdzMiArPSAoKGNpZi0+YXJnX3R5cGVzKVtpXS0+dHlwZSkgPDwgKDIgKiBqKyspOwogCSAgYnJlYWs7CiAKQEAgLTE4Niw3ICsxOTEsNiBAQAogCSAgICBjb250aW51ZTsKIAkgIGlmICgoZnJlZyArIDEpIDwgTkZSRUdBUkcpCiAJICAgIHsKLQkgICAgICBmcmVnID0gKGZyZWcgKyAxKSAmIH4xOwogCSAgICAgIGZyZWcgKz0gMjsKIAkgICAgICBjaWYtPmZsYWdzMiArPSAoKGNpZi0+YXJnX3R5cGVzKVtpXS0+dHlwZSkgPDwgKDIgKiBqKyspOwogCSAgICB9CkBAIC0yNjQsOSArMjY4LDcgQEAKICAgZWxzZSBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAKICAgICAgIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkpCiAgICAgewotICAgICAgLypALXN5c3VucmVjb2dAKi8KICAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOwotICAgICAgLypAPXN5c3VucmVjb2dAKi8KICAgICB9CiAgIGVsc2UKICAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKQEAgLTI3NCwxMCArMjc2LDggQEAKICAgc3dpdGNoIChjaWYtPmFiaSkgCiAgICAgewogICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgICAvKkAtdXNlZGVmQCovCi0gICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCAKLQkJICAgIGNpZi0+ZmxhZ3MsIGNpZi0+ZmxhZ3MyLCBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgLypAPXVzZWRlZkAqLworICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgY2lmLT5mbGFnczIsCisJCSAgICBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQoMCk7CkBAIC0yOTQsMTAgKzI5NCwxMSBAQAogZXh0ZXJuIHZvaWQgX19pY19pbnZhbGlkYXRlICh2b2lkICpsaW5lKTsKIAogZmZpX3N0YXR1cwotZmZpX3ByZXBfY2xvc3VyZSAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCi0JCSAgZmZpX2NpZiAqY2lmLAotCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCi0JCSAgdm9pZCAqdXNlcl9kYXRhKQorZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICpjbG9zdXJlLAorCQkgICAgICBmZmlfY2lmICpjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJICAgICAgdm9pZCAqY29kZWxvYykKIHsKICAgdW5zaWduZWQgaW50ICp0cmFtcDsKIApAQCAtMzIxLDggKzMyMiw4IEBACiAgIHRyYW1wWzJdID0gMHhjYzAwMDAxMCB8ICgoKFVJTlQzMikgZmZpX2Nsb3N1cmVfU1lTVikgPj4gMTYpIDw8IDEwOwogICB0cmFtcFszXSA9IDB4YzgwMDAwMTAgfCAoKChVSU5UMzIpIGZmaV9jbG9zdXJlX1NZU1YpICYgMHhmZmZmKSA8PCAxMDsKICAgdHJhbXBbNF0gPSAweDZiZjEwNjAwOwotICB0cmFtcFs1XSA9IDB4Y2MwMDAwMTAgfCAoKChVSU5UMzIpIGNsb3N1cmUpID4+IDE2KSA8PCAxMDsKLSAgdHJhbXBbNl0gPSAweGM4MDAwMDEwIHwgKCgoVUlOVDMyKSBjbG9zdXJlKSAmIDB4ZmZmZikgPDwgMTA7CisgIHRyYW1wWzVdID0gMHhjYzAwMDAxMCB8ICgoKFVJTlQzMikgY29kZWxvYykgPj4gMTYpIDw8IDEwOworICB0cmFtcFs2XSA9IDB4YzgwMDAwMTAgfCAoKChVSU5UMzIpIGNvZGVsb2MpICYgMHhmZmZmKSA8PCAxMDsKICAgdHJhbXBbN10gPSAweDQ0MDFmZmYwOwogCiAgIGNsb3N1cmUtPmNpZiA9IGNpZjsKQEAgLTMzMCw3ICszMzEsOCBAQAogICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CiAKICAgLyogRmx1c2ggdGhlIGljYWNoZS4gICovCi0gIGFzbSB2b2xhdGlsZSAoIm9jYndiICUwLDA7IHN5bmNvOyBpY2JpICUwLDA7IHN5bmNpIiA6IDogInIiICh0cmFtcCkpOworICBhc20gdm9sYXRpbGUgKCJvY2J3YiAlMCwwOyBzeW5jbzsgaWNiaSAlMSwwOyBzeW5jaSIgOiA6ICJyIiAodHJhbXApLAorCQkiciIoY29kZWxvYykpOwogCiAgIHJldHVybiBGRklfT0s7CiB9CkBAIC0zNTIsNiArMzU0LDcgQEAKICAgaW50IGksIGF2bjsKICAgaW50IGdyZWcsIGZyZWc7CiAgIGZmaV9jaWYgKmNpZjsKKyAgaW50IGZwYWlyID0gLTE7CiAKICAgY2lmID0gY2xvc3VyZS0+Y2lmOwogICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOwpAQCAtMzYwLDcgKzM2Myw3IEBACiAgICAgIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4gICovCiAgIGlmIChyZXR1cm5fdHlwZSAoY2lmLT5ydHlwZSkgPT0gRkZJX1RZUEVfU1RSVUNUKQogICAgIHsKLSAgICAgIHJ2YWx1ZSA9ICpwZ3I7CisgICAgICBydmFsdWUgPSAoVUlOVDY0ICopICpwZ3I7CiAgICAgICBncmVnID0gMTsKICAgICB9CiAgIGVsc2UKQEAgLTQwNCwxMSArNDA3LDI0IEBACiAJICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCiAJICAgIHsKIAkgICAgICBpZiAoZnJlZyA8IE5GUkVHQVJHIC0gMSkKKwkJeworCQkgIGlmIChmcGFpciA+PSAwKQorCQkgICAgeworCQkgICAgICBhdmFsdWVbaV0gPSAoVUlOVDMyICopIHBmciArIGZwYWlyOworCQkgICAgICBmcGFpciA9IC0xOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwotCQlhdmFsdWVbaV0gPSAoVUlOVDMyICopIHBmciArICgxIF4gZnJlZysrKTsKKwkJICAgICAgZnBhaXIgPSBmcmVnOworCQkgICAgICBhdmFsdWVbaV0gPSAoVUlOVDMyICopIHBmciArICgxIF4gZnJlZyk7CiAjZWxzZQotCQlhdmFsdWVbaV0gPSAoVUlOVDMyICopIHBmciArIGZyZWcrKzsKKwkJICAgICAgZnBhaXIgPSAxIF4gZnJlZzsKKwkJICAgICAgYXZhbHVlW2ldID0gKFVJTlQzMiAqKSBwZnIgKyBmcmVnOwogI2VuZGlmCisJCSAgICAgIGZyZWcgKz0gMjsKKwkJICAgIH0KKwkJfQogCSAgICAgIGVsc2UKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwogCQlhdmFsdWVbaV0gPSBwZ3IgKyBncmVnOwpAQCAtNDMwLDcgKzQ0Niw2IEBACiAJICAgIGF2YWx1ZVtpXSA9IHBnciArIGdyZWc7CiAJICBlbHNlCiAJICAgIHsKLQkgICAgICBmcmVnID0gKGZyZWcgKyAxKSAmIH4xOwogCSAgICAgIGF2YWx1ZVtpXSA9IHBmciArIChmcmVnID4+IDEpOwogCSAgICAgIGZyZWcgKz0gMjsKIAkgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L3N5c3YuUwppbmRleCBiNmEyNDhkLi5jNDU4N2Q1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L3N5c3YuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgS2F6IEtvamltYQorICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA2LCAyMDA4IEtheiBLb2ppbWEKICAgIAogICAgU3VwZXJIIFNIbWVkaWEgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCiAKQEAgLTE0LDE0ICsxNCwxNSBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorIAorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgTElCRkZJX0FTTQkKQEAgLTg1LDYgKzg2LDcgQEAKIAlhZGRpCXIxNSwgNjQsIHIyMgogCW1vdmkJMCwgcjAKIAltb3ZpCTAsIHIxCisJbW92aQktMSwgcjIzCiAKIAlwdC9sCTFmLCB0cjEKIAlibmVpL2wJcjI5LCBGRklfVFlQRV9TVFJVQ1QsIHRyMQpAQCAtMTA3LDkgKzEwOSw2IEBACiAKIC5MX3Bhc3NfZDoKIAlhZGRpCXIwLCAxLCByMAotCWFkZGkJcjEsIDEsIHIxCi0JYW5kaQlyMSwgfjEsIHIxCi0KIAlwdC9sCTNmLCB0cjAKIAltb3ZpCTEyLCByMjAKIAliZ2UvbAlyMSwgcjIwLCB0cjAKQEAgLTE1OSwxMyArMTU4LDIzIEBACiAJYWRkaS5sCXIxNSwgOCwgcjE1CiAzOgogCXB0L2wJLkxfcGFzcywgdHIwCi0JYWRkaQlyMSwgMSwgcjEKIAlibGluawl0cjAsIHI2MwogCiAuTF9wb3BfZjoKIAlwdC9sCS5MX3BvcF9mX3RibCwgdHIxCisJcHQvbAk1ZiwgdHIyCiAJZ2V0dHIJdHIxLCByMjAKKwliZ2UvbAlyMjMsIHI2MywgdHIyCisJYWRkCXIxLCByNjMsIHIyMyAKIAlzaGxsaQlyMSwgMywgcjIxCisJYWRkaQlyMSwgMiwgcjEKKwlhZGQJcjIwLCByMjEsIHIyMAorCXB0YWJzL2wJcjIwLCB0cjEKKwlibGluawl0cjEsIHI2MworNToKKwlhZGRpCXIyMywgMSwgcjIxCisJbW92aQktMSwgcjIzCisJc2hsbGkJcjIxLCAzLCByMjEKIAlhZGQJcjIwLCByMjEsIHIyMAogCXB0YWJzL2wJcjIwLCB0cjEKIAlibGluawl0cjEsIHI2MwpAQCAtNDMwLDYgKzQzOSwxMCBAQAogLmZmaV9jbG9zdXJlX1NZU1ZfZW5kOgogCS5zaXplCSBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKSwuZmZpX2Nsb3N1cmVfU1lTVl9lbmQtQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKIAorI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyNlbmRpZgorCiAJLnNlY3Rpb24JIi5laF9mcmFtZSIsImF3IixAcHJvZ2JpdHMKIF9fRlJBTUVfQkVHSU5fXzoKIAkuNGJ5dGUJLkxFQ0lFMS0uTFNDSUUxCS8qIExlbmd0aCBvZiBDb21tb24gSW5mb3JtYXRpb24gRW50cnkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvZmZpLmMKaW5kZXggNGNkZDFiOS4uMWQwMWY1OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvZmZpLmMKQEAgLTMwOCwxNCArMzA4LDI0IEBACiAJY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NUUlVDVDsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgICAgaWYgKGNpZi0+YWJpID09IEZGSV9WOSkKKwljaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOworICAgICAgZWxzZQorCWNpZi0+ZmxhZ3MgPSBjaWYtPnJ0eXBlLT50eXBlOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLSAgICAgIGlmIChjaWYtPmFiaSAhPSBGRklfVjkpCi0JewotCSAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQ2NDsKLQkgIGJyZWFrOwotCX0KLSAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX1Y5KQorCWNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CisgICAgICBlbHNlCisJY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQ2NDsKKyAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CiAgICAgICBicmVhazsKQEAgLTU4OSw2ICs1OTksMTEgQEAKIAkgIC8qIFJpZ2h0LWp1c3RpZnkuICAqLwogCSAgYXJnbiArPSBBTElHTihhcmdfdHlwZXNbaV0tPnNpemUsIEZGSV9TSVpFT0ZfQVJHKSAvIEZGSV9TSVpFT0ZfQVJHOwogCisJICAvKiBBbGlnbiBvbiBhIDE2LWJ5dGUgYm91bmRhcnkuICAqLworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJICBpZiAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUgJiYgKGFyZ24gJSAyKSAhPSAwKQorCSAgICBhcmduKys7CisjZW5kaWYKIAkgIGlmIChpIDwgZnBfc2xvdF9tYXgKIAkgICAgICAmJiAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUCiAJCSAgfHwgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvdjguUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMKaW5kZXggOWViNTQ2Ny4uYmVmMWI2OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvdjguUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy92OC5TCkBAIC03MywyMSArNzMsNjMgQEAKIAliZSxhCWRvbmUKIAlzdAklZjAsIFslaTQrMF0JISAoZGVsYXkpCiAKLQljbXAJJWkzLCBGRklfVFlQRV9TSU5UNjQKLQliZQlsb25nbG9uZwotCiAJY21wCSVpMywgRkZJX1RZUEVfRE9VQkxFCi0JYm5lCWRvbmUKLQlub3AKLQlzdAklZjAsIFslaTQrMF0KLQlzdAklZjEsIFslaTQrNF0KLQkKKwliZSxhCWRvdWJsZQorCXN0CSVmMCwgWyVpNCswXQkhIChkZWxheSkKKworCWNtcAklaTMsIEZGSV9UWVBFX1NJTlQ4CisJYmUsYQlzaW50OAorCXNsbAklbzAsIDI0LCAlbzAJISAoZGVsYXkpCisKKwljbXAJJWkzLCBGRklfVFlQRV9VSU5UOAorCWJlLGEJdWludDgKKwlzbGwJJW8wLCAyNCwgJW8wCSEgKGRlbGF5KQorCisJY21wCSVpMywgRkZJX1RZUEVfU0lOVDE2CisJYmUsYQlzaW50MTYKKwlzbGwJJW8wLCAxNiwgJW8wCSEgKGRlbGF5KQorCisJY21wCSVpMywgRkZJX1RZUEVfVUlOVDE2CisJYmUsYQl1aW50MTYKKwlzbGwJJW8wLCAxNiwgJW8wCSEgKGRlbGF5KQorCisJY21wCSVpMywgRkZJX1RZUEVfU0lOVDY0CisJYmUsYQlsb25nbG9uZworCXN0CSVvMCwgWyVpNCswXQkhIChkZWxheSkKIGRvbmU6CiAJcmV0CiAJcmVzdG9yZQogCi1sb25nbG9uZzoKK2RvdWJsZToKKwlzdAklZjEsIFslaTQrNF0KKwlyZXQKKwlyZXN0b3JlCisKK3NpbnQ4OgorCXNyYQklbzAsIDI0LCAlbzAKIAlzdAklbzAsIFslaTQrMF0KKwlyZXQKKwlyZXN0b3JlCisKK3VpbnQ4OgorCXNybAklbzAsIDI0LCAlbzAKKwlzdAklbzAsIFslaTQrMF0KKwlyZXQKKwlyZXN0b3JlCisKK3NpbnQxNjoKKwlzcmEJJW8wLCAxNiwgJW8wCisJc3QJJW8wLCBbJWk0KzBdCisJcmV0CisJcmVzdG9yZQorCit1aW50MTY6CisJc3JsCSVvMCwgMTYsICVvMAorCXN0CSVvMCwgWyVpNCswXQorCXJldAorCXJlc3RvcmUKKworbG9uZ2xvbmc6CiAJc3QJJW8xLCBbJWk0KzRdCiAJcmV0CiAJcmVzdG9yZQpAQCAtMTQ4LDcgKzE5MCw4IEBACiAJYmUJZG9uZTEKIAogCWNtcAklbzAsIEZGSV9UWVBFX0lOVAotCWJlCWludGVnZXIKKwliZQlkb25lMQorCSBsZAlbJWZwLThdLCAlaTAKIAogCWNtcAklbzAsIEZGSV9UWVBFX0ZMT0FUCiAJYmUsYQlkb25lMQpAQCAtMTY2LDEzICsyMDksMTUgQEAKIAljbXAJJW8wLCBGRklfVFlQRV9TVFJVQ1QKIAliZQlkb25lMgogCi0JISBGRklfVFlQRV9TSU5UNjQKLQkhIEZGSV9UWVBFX1VJTlQ2NAotCWxkCVslZnAtNF0sICVpMQorCWNtcAklbzAsIEZGSV9UWVBFX1NJTlQ2NAorCWJlLGEJZG9uZTEKKwkgbGRkCVslZnAtOF0sICVpMAogCi1pbnRlZ2VyOgorCWNtcAklbzAsIEZGSV9UWVBFX1VJTlQ2NAorCWJlLGEJZG9uZTEKKwkgbGRkCVslZnAtOF0sICVpMAorCiAJbGQJWyVmcC04XSwgJWkwCi0KIGRvbmUxOgogCWptcAklaTcrOAogCSByZXN0b3JlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTExZWIwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYwpAQCAtMCwwICsxLDc3IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgdHlwZXMuYyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCAgUmVkIEhhdCwgSW5jLgorICAgCisgICBQcmVkZWZpbmVkIGZmaV90eXBlcyBuZWVkZWQgYnkgbGliZmZpLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBIaWRlIHRoZSBiYXNpYyB0eXBlIGRlZmluaXRpb25zIGZyb20gdGhlIGhlYWRlciBmaWxlLCBzbyB0aGF0IHdlCisgICBjYW4gcmVkZWZpbmUgdGhlbSBoZXJlIGFzICJjb25zdCIuICAqLworI2RlZmluZSBMSUJGRklfSElERV9CQVNJQ19UWVBFUworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisvKiBUeXBlIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgRkZJX1RZUEVERUYobmFtZSwgdHlwZSwgaWQpCQlcCitzdHJ1Y3Qgc3RydWN0X2FsaWduXyMjbmFtZSB7CQkJXAorICBjaGFyIGM7CQkJCQlcCisgIHR5cGUgeDsJCQkJCVwKK307CQkJCQkJXAorY29uc3QgZmZpX3R5cGUgZmZpX3R5cGVfIyNuYW1lID0gewkJXAorICBzaXplb2YodHlwZSksCQkJCQlcCisgIG9mZnNldG9mKHN0cnVjdCBzdHJ1Y3RfYWxpZ25fIyNuYW1lLCB4KSwJXAorICBpZCwgTlVMTAkJCQkJXAorfQorCisvKiBTaXplIGFuZCBhbGlnbm1lbnQgYXJlIGZha2UgaGVyZS4gVGhleSBtdXN0IG5vdCBiZSAwLiAqLworY29uc3QgZmZpX3R5cGUgZmZpX3R5cGVfdm9pZCA9IHsKKyAgMSwgMSwgRkZJX1RZUEVfVk9JRCwgTlVMTAorfTsKKworRkZJX1RZUEVERUYodWludDgsIFVJTlQ4LCBGRklfVFlQRV9VSU5UOCk7CitGRklfVFlQRURFRihzaW50OCwgU0lOVDgsIEZGSV9UWVBFX1NJTlQ4KTsKK0ZGSV9UWVBFREVGKHVpbnQxNiwgVUlOVDE2LCBGRklfVFlQRV9VSU5UMTYpOworRkZJX1RZUEVERUYoc2ludDE2LCBTSU5UMTYsIEZGSV9UWVBFX1NJTlQxNik7CitGRklfVFlQRURFRih1aW50MzIsIFVJTlQzMiwgRkZJX1RZUEVfVUlOVDMyKTsKK0ZGSV9UWVBFREVGKHNpbnQzMiwgU0lOVDMyLCBGRklfVFlQRV9TSU5UMzIpOworRkZJX1RZUEVERUYodWludDY0LCBVSU5UNjQsIEZGSV9UWVBFX1VJTlQ2NCk7CitGRklfVFlQRURFRihzaW50NjQsIFNJTlQ2NCwgRkZJX1RZUEVfU0lOVDY0KTsKKworRkZJX1RZUEVERUYocG9pbnRlciwgdm9pZCosIEZGSV9UWVBFX1BPSU5URVIpOworCitGRklfVFlQRURFRihmbG9hdCwgZmxvYXQsIEZGSV9UWVBFX0ZMT0FUKTsKK0ZGSV9UWVBFREVGKGRvdWJsZSwgZG91YmxlLCBGRklfVFlQRV9ET1VCTEUpOworCisjaWZkZWYgX19hbHBoYV9fCisvKiBFdmVuIGlmIHdlJ3JlIG5vdCBjb25maWd1cmVkIHRvIGRlZmF1bHQgdG8gMTI4LWJpdCBsb25nIGRvdWJsZSwgCisgICBtYWludGFpbiBiaW5hcnkgY29tcGF0aWJpbGl0eSwgYXMgLW1sb25nLWRvdWJsZS0xMjggY2FuIGJlIHVzZWQKKyAgIGF0IGFueSB0aW1lLiAgKi8KKy8qIFZhbGlkYXRlIHRoZSBoYXJkLWNvZGVkIG51bWJlciBiZWxvdy4gICovCisjIGlmIGRlZmluZWQoX19MT05HX0RPVUJMRV8xMjhfXykgJiYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSA0CisjICBlcnJvciBGRklfVFlQRV9MT05HRE9VQkxFIG91dCBvZiBkYXRlCisjIGVuZGlmCitjb25zdCBmZmlfdHlwZSBmZmlfdHlwZV9sb25nZG91YmxlID0geyAxNiwgMTYsIDQsIE5VTEwgfTsKKyNlbGlmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCitGRklfVFlQRURFRihsb25nZG91YmxlLCBsb25nIGRvdWJsZSwgRkZJX1RZUEVfTE9OR0RPVUJMRSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9kYXJ3aW4uUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9kYXJ3aW4uUwppbmRleCBiMGI4Y2RmLi44ZjBmMDcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2Rhcndpbi5TCkBAIC0xNSwxNSArMTUsMTYgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICovCiAKICNpZm5kZWYgX194ODZfNjRfXwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKaW5kZXggNjBkN2Y0Ny4uODA0OTY1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYwpAQCAtMyw3ICszLDcgQEAKICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyICBSYW5qaXQgTWF0aGV3CiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiAgQm8gVGhvcnNlbgogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgIFJvZ2VyIFNheWxlCi0JICAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgeDg2IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAKQEAgLTI4LDcgKzI4LDExIEBACiAgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWZuZGVmIF9feDg2XzY0X18KKyNpZiAhZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9XSU42NCkKKworI2lmZGVmIF9XSU42NAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8ZmZpLmg+CiAjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgpAQCAtNDcsMTAgKzUxLDE1IEBACiAKICAgYXJncCA9IHN0YWNrOwogCi0gIGlmIChlY2lmLT5jaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgaWYgKGVjaWYtPmNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUCisjaWZkZWYgWDg2X1dJTjY0CisgICAgICAmJiAoZWNpZi0+Y2lmLT5ydHlwZS0+c2l6ZSAhPSAxICYmIGVjaWYtPmNpZi0+cnR5cGUtPnNpemUgIT0gMgorICAgICAgICAgICYmIGVjaWYtPmNpZi0+cnR5cGUtPnNpemUgIT0gNCAmJiBlY2lmLT5jaWYtPnJ0eXBlLT5zaXplICE9IDgpCisjZW5kaWYKKyAgICAgICkKICAgICB7CiAgICAgICAqKHZvaWQgKiopIGFyZ3AgPSBlY2lmLT5ydmFsdWU7Ci0gICAgICBhcmdwICs9IDQ7CisgICAgICBhcmdwICs9IHNpemVvZih2b2lkKik7CiAgICAgfQogCiAgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKQEAgLTYyLDUzICs3MSw3NSBAQAogICAgICAgc2l6ZV90IHo7CiAKICAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKChzaXplb2YoaW50KSAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQotCWFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBzaXplb2YoaW50KSk7CisgICAgICBpZiAoKHNpemVvZih2b2lkKikgLSAxKSAmIChzaXplX3QpIGFyZ3ApCisgICAgICAgIGFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBzaXplb2Yodm9pZCopKTsKIAogICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOwotICAgICAgaWYgKHogPCBzaXplb2YoaW50KSkKLQl7Ci0JICB6ID0gc2l6ZW9mKGludCk7Ci0JICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQotCSAgICB7Ci0JICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQ4ICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDE2ICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDMyICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQzMiAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMzIgKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGRlZmF1bHQ6Ci0JICAgICAgRkZJX0FTU0VSVCgwKTsKLQkgICAgfQotCX0KKyNpZmRlZiBYODZfV0lONjQKKyAgICAgIGlmICh6ID4gc2l6ZW9mKGZmaV9hcmcpCisgICAgICAgICAgfHwgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICAgICAgICAmJiAoeiAhPSAxICYmIHogIT0gMiAmJiB6ICE9IDQgJiYgeiAhPSA4KSkKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgICAgIHx8ICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQorI2VuZGlmCisgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgeiA9IHNpemVvZihmZmlfYXJnKTsKKyAgICAgICAgICAqKHZvaWQgKiopYXJncCA9ICpwX2FyZ3Y7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQorICAgICAgICB7CisgICAgICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOworICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOwotCX0KKyNlbmRpZgorICAgICAgaWYgKHogPCBzaXplb2YoZmZpX2FyZykpCisgICAgICAgIHsKKyAgICAgICAgICB6ID0gc2l6ZW9mKGZmaV9hcmcpOworICAgICAgICAgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgICAgICAgICAgICAqKGZmaV9zYXJnICopIGFyZ3AgPSAoZmZpX3NhcmcpKihTSU5UOCAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorICAgICAgICAgICAgICAqKGZmaV9hcmcgKikgYXJncCA9IChmZmlfYXJnKSooVUlOVDggKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgICAgICAgICAgICooZmZpX3NhcmcgKikgYXJncCA9IChmZmlfc2FyZykqKFNJTlQxNiAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICAgICAgICAgICAgKihmZmlfYXJnICopIGFyZ3AgPSAoZmZpX2FyZykqKFVJTlQxNiAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyAgICAgICAgICAgICAgKihmZmlfc2FyZyAqKSBhcmdwID0gKGZmaV9zYXJnKSooU0lOVDMyICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgICAqKGZmaV9hcmcgKikgYXJncCA9IChmZmlfYXJnKSooVUlOVDMyICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgICAgICAgICAqKGZmaV9hcmcgKikgYXJncCA9ICooZmZpX2FyZyAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICBGRklfQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CisgICAgICAgIH0KICAgICAgIHBfYXJndisrOworI2lmZGVmIFg4Nl9XSU42NAorICAgICAgYXJncCArPSAoeiArIHNpemVvZih2b2lkKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQqKSAtIDEpOworI2Vsc2UKICAgICAgIGFyZ3AgKz0gejsKKyNlbmRpZgogICAgIH0KICAgCiAgIHJldHVybjsKQEAgLTExNywzMyArMTQ4LDQzIEBACiAvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCiBmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKGZmaV9jaWYgKmNpZikKIHsKKyAgdW5zaWduZWQgaW50IGk7CisgIGZmaV90eXBlICoqcHRyOworCiAgIC8qIFNldCB0aGUgcmV0dXJuIHR5cGUgZmxhZyAqLwogICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCiAgICAgewogICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKLSNpZmRlZiBYODYKLSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKLSNlbmRpZgotI2lmIGRlZmluZWQoWDg2KSB8fCBkZWZpbmVkKFg4Nl9EQVJXSU4pCisjaWYgZGVmaW5lZChYODYpIHx8IGRlZmluZWQgKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfRlJFRUJTRCkgfHwgZGVmaW5lZChYODZfREFSV0lOKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CiAjZW5kaWYKLQorI2lmZGVmIFg4Nl9XSU42NAorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyNpZm5kZWYgWDg2X1dJTjY0CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjZW5kaWYKKyNlbmRpZgogICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCkgY2lmLT5ydHlwZS0+dHlwZTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisjaWZkZWYgWDg2X1dJTjY0CisgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorI2VuZGlmCiAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OwogICAgICAgYnJlYWs7CiAKLSNpZm5kZWYgWDg2CiAgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisjaWZuZGVmIFg4NgogICAgICAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gMSkKICAgICAgICAgewogICAgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUI7IC8qIHNhbWUgYXMgY2hhciBzaXplICovCkBAIC0xNTQsMjQgKzE5NSw0OSBAQAogICAgICAgICB9CiAgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IDQpCiAgICAgICAgIHsKKyNpZmRlZiBYODZfV0lONjQKKyAgICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCOworI2Vsc2UKICAgICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOyAvKiBzYW1lIGFzIGludCB0eXBlICovCisjZW5kaWYKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSA4KQogICAgICAgICB7CiAgICAgICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQ2NDsgLyogc2FtZSBhcyBpbnQ2NCB0eXBlICovCiAgICAgICAgIH0KICAgICAgIGVsc2UKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgICAgICAgICAvLyBhbGxvY2F0ZSBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIHBvaW50ZXIKKyAgICAgICAgICBjaWYtPmJ5dGVzICs9IEFMSUdOKHNpemVvZih2b2lkKiksIEZGSV9TSVpFT0ZfQVJHKTsKICAgICAgICAgfQogICAgICAgYnJlYWs7Ci0jZW5kaWYKIAogICAgIGRlZmF1bHQ6CisjaWZkZWYgWDg2X1dJTjY0CisgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9JTlQ6CisgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDMyOworI2Vsc2UKICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CisjZW5kaWYKICAgICAgIGJyZWFrOwogICAgIH0KIAorICBmb3IgKHB0ciA9IGNpZi0+YXJnX3R5cGVzLCBpID0gY2lmLT5uYXJnczsgaSA+IDA7IGktLSwgcHRyKyspCisgICAgeworICAgICAgaWYgKCgoKnB0ciktPmFsaWdubWVudCAtIDEpICYgY2lmLT5ieXRlcykKKyAgICAgICAgY2lmLT5ieXRlcyA9IEFMSUdOKGNpZi0+Ynl0ZXMsICgqcHRyKS0+YWxpZ25tZW50KTsKKyAgICAgIGNpZi0+Ynl0ZXMgKz0gQUxJR04oKCpwdHIpLT5zaXplLCBGRklfU0laRU9GX0FSRyk7CisgICAgfQorCisjaWZkZWYgWDg2X1dJTjY0CisgIC8vIGVuc3VyZSBzcGFjZSBmb3Igc3RvcmluZyBmb3VyIHJlZ2lzdGVycworICBjaWYtPmJ5dGVzICs9IDQgKiBzaXplb2YoZmZpX2FyZyk7CisjZW5kaWYKKwogI2lmZGVmIFg4Nl9EQVJXSU4KICAgY2lmLT5ieXRlcyA9IChjaWYtPmJ5dGVzICsgMTUpICYgfjB4RjsKICNlbmRpZgpAQCAtMTc5LDE0ICsyNDUsMTggQEAKICAgcmV0dXJuIEZGSV9PSzsKIH0KIAorI2lmZGVmIFg4Nl9XSU42NAorZXh0ZXJuIGludAorZmZpX2NhbGxfd2luNjQodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAorICAgICAgICAgICAgICAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKKyNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQorZXh0ZXJuIHZvaWQKK2ZmaV9jYWxsX3dpbjMyKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7CisjZWxzZQogZXh0ZXJuIHZvaWQgZmZpX2NhbGxfU1lTVih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCi0JCQkgIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7Ci0KLSNpZmRlZiBYODZfV0lOMzIKLWV4dGVybiB2b2lkIGZmaV9jYWxsX1NURENBTEwodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAotCQkJICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOwotCi0jZW5kaWYgLyogWDg2X1dJTjMyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7CisjZW5kaWYKIAogdm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKIHsKQEAgLTE5NSwzMCArMjY1LDY2IEBACiAgIGVjaWYuY2lmID0gY2lmOwogICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKICAgCi0gIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4JKi8KLSAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUJCSAgICAgICAgKi8KKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiAqLworICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZSAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgCi0gICAgICAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpKQorI2lmZGVmIFg4Nl9XSU42NAorICBpZiAocnZhbHVlID09IE5VTEwKKyAgICAgICYmIGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDEgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSAyCisgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDQgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSA4KQorICAgIHsKKyAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKChjaWYtPnJ0eXBlLT5zaXplICsgMHhGKSAmIH4weEYpOworICAgIH0KKyNlbHNlCisgIGlmIChydmFsdWUgPT0gTlVMTAorICAgICAgJiYgY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpCiAgICAgewogICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7CiAgICAgfQorI2VuZGlmCiAgIGVsc2UKICAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKICAgICAKICAgCiAgIHN3aXRjaCAoY2lmLT5hYmkpIAogICAgIHsKKyNpZmRlZiBYODZfV0lONjQKKyAgICBjYXNlIEZGSV9XSU42NDoKKyAgICAgIHsKKyAgICAgICAgLy8gTWFrZSBjb3BpZXMgb2YgYWxsIHN0cnVjdCBhcmd1bWVudHMKKyAgICAgICAgLy8gTk9URTogbm90IHN1cmUgaWYgcmVzcG9uc2liaWxpdHkgc2hvdWxkIGJlIGhlcmUgb3IgaW4gY2FsbGVyCisgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICBmb3IgKGk9MDsgaSA8IGNpZi0+bmFyZ3M7aSsrKSB7CisgICAgICAgICAgc2l6ZV90IHNpemUgPSBjaWYtPmFyZ190eXBlc1tpXS0+c2l6ZTsKKyAgICAgICAgICBpZiAoKGNpZi0+YXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICAgICAgICAgJiYgKHNpemUgIT0gMSAmJiBzaXplICE9IDIgJiYgc2l6ZSAhPSA0ICYmIHNpemUgIT0gOCkpCisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgICAgICAgICAgICAgfHwgY2lmLT5hcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRQorI2VuZGlmCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdm9pZCAqbG9jYWwgPSBhbGxvY2Eoc2l6ZSk7CisgICAgICAgICAgICAgIG1lbWNweShsb2NhbCwgYXZhbHVlW2ldLCBzaXplKTsKKyAgICAgICAgICAgICAgYXZhbHVlW2ldID0gbG9jYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmZpX2NhbGxfd2luNjQoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICB9CisgICAgICBicmVhazsKKyNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQorICAgIGNhc2UgRkZJX1NZU1Y6CisgICAgY2FzZSBGRklfU1REQ0FMTDoKKyAgICAgIGZmaV9jYWxsX3dpbjMyKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworI2Vsc2UKICAgICBjYXNlIEZGSV9TWVNWOgogICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsCi0JCSAgICBmbik7CisgICAgICAgICAgICAgICAgICAgIGZuKTsKICAgICAgIGJyZWFrOwotI2lmZGVmIFg4Nl9XSU4zMgotICAgIGNhc2UgRkZJX1NURENBTEw6Ci0gICAgICBmZmlfY2FsbF9TVERDQUxMKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAotCQkgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQoMCk7CiAgICAgICBicmVhazsKQEAgLTIyOCw4ICszMzQsMTAgQEAKIAogLyoqIHByaXZhdGUgbWVtYmVycyAqKi8KIAorLyogVGhlIGZvbGxvd2luZyBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDEpKSkgZGVjb3JhdGlvbnMgd2lsbCBoYXZlIG5vIGVmZmVjdAorICAgb24gTVNWQyAtIHN0YW5kYXJkIGNkZWNsIGNvbnZlbnRpb24gYXBwbGllcy4gKi8KIHN0YXRpYyB2b2lkIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViAoY2hhciAqc3RhY2ssIHZvaWQgKipyZXQsCi0JCQkJCSB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFyZ3MsIGZmaV9jaWYqIGNpZik7CiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKIHVuc2lnbmVkIGludCBGRklfSElEREVOIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgKGZmaV9jbG9zdXJlICosIHZvaWQgKiosIHZvaWQgKikKQEAgLTI0MCwxNCArMzQ4LDQ0IEBACiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1REQ0FMTCAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKICNlbmRpZgorI2lmZGVmIFg4Nl9XSU42NAordm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX3dpbjY0IChmZmlfY2xvc3VyZSAqKTsKKyNlbmRpZgogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGp1bXBlZCB0byBieSB0aGUgdHJhbXBvbGluZSAqLwogCi11bnNpZ25lZCBpbnQgRkZJX0hJRERFTgotZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciAoY2xvc3VyZSwgcmVzcHAsIGFyZ3MpCi0gICAgIGZmaV9jbG9zdXJlICpjbG9zdXJlOwotICAgICB2b2lkICoqcmVzcHA7Ci0gICAgIHZvaWQgKmFyZ3M7CisjaWZkZWYgWDg2X1dJTjY0Cit2b2lkICogRkZJX0hJRERFTgorZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICphcmdzKSB7CisgIGZmaV9jaWYgICAgICAgKmNpZjsKKyAgdm9pZCAgICAgICAgICoqYXJnX2FyZWE7CisgIHZvaWQgICAgICAgICAgKnJlc3VsdDsKKyAgdm9pZCAgICAgICAgICAqcmVzcCA9ICZyZXN1bHQ7CisKKyAgY2lmICAgICAgICAgPSBjbG9zdXJlLT5jaWY7CisgIGFyZ19hcmVhICAgID0gKHZvaWQqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkKikpOyAgCisKKyAgLyogdGhpcyBjYWxsIHdpbGwgaW5pdGlhbGl6ZSBBUkdfQVJFQSwgc3VjaCB0aGF0IGVhY2gKKyAgICogZWxlbWVudCBpbiB0aGF0IGFycmF5IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyAKKyAgICogdmFsdWUgb24gdGhlIHN0YWNrOyBhbmQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAgICogYSBzdHJ1Y3R1cmUsIGl0IHdpbGwgY2hhbmdlIFJFU1AgdG8gcG9pbnQgdG8gdGhlCisgICAqIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gICovCisKKyAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGFyZ3MsICZyZXNwLCBhcmdfYXJlYSwgY2lmKTsKKyAgCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJlc3AsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIC8qIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgaW4gcmF4LiAgVGhpcyBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IKKyAgICAgcmVzdWx0IHR5cGVzIGV4Y2VwdCBmb3IgZmxvYXRzOyB3ZSBoYXZlIHRvICdtb3YgeG1tMCwgcmF4JyBpbiB0aGUKKyAgICAgY2FsbGVyIHRvIGNvcnJlY3QgdGhpcy4KKyAgICAgVE9ETzogc3RydWN0dXJlIHNpemVzIG9mIDMgNSA2IDcgYXJlIHJldHVybmVkIGJ5IHJlZmVyZW5jZSwgdG9vISEhCisgICovCisgIHJldHVybiBjaWYtPnJ0eXBlLT5zaXplID4gc2l6ZW9mKHZvaWQgKikgPyByZXNwIDogKih2b2lkICoqKXJlc3A7Cit9CisKKyNlbHNlCit1bnNpZ25lZCBpbnQgRkZJX0hJRERFTiBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpCitmZmlfY2xvc3VyZV9TWVNWX2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqKnJlc3BwLCB2b2lkICphcmdzKQogewogICAvKiBvdXIgdmFyaW91cyB0aGluZ3MuLi4gICovCiAgIGZmaV9jaWYgICAgICAgKmNpZjsKQEAgLTI1OSw3ICszOTcsNyBAQAogICAvKiB0aGlzIGNhbGwgd2lsbCBpbml0aWFsaXplIEFSR19BUkVBLCBzdWNoIHRoYXQgZWFjaAogICAgKiBlbGVtZW50IGluIHRoYXQgYXJyYXkgcG9pbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIAogICAgKiB2YWx1ZSBvbiB0aGUgc3RhY2s7IGFuZCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucwotICAgKiBhIHN0cnVjdHVyZSwgaXQgd2lsbCByZS1zZXQgUkVTUCB0byBwb2ludCB0byB0aGUKKyAgICogYSBzdHJ1Y3R1cmUsIGl0IHdpbGwgY2hhbmdlIFJFU1AgdG8gcG9pbnQgdG8gdGhlCiAgICAqIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gICovCiAKICAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGFyZ3MsIHJlc3BwLCBhcmdfYXJlYSwgY2lmKTsKQEAgLTI2OCwxMCArNDA2LDExIEBACiAKICAgcmV0dXJuIGNpZi0+ZmxhZ3M7CiB9CisjZW5kaWYgLyogIVg4Nl9XSU42NCAqLwogCiBzdGF0aWMgdm9pZAogZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGNoYXIgKnN0YWNrLCB2b2lkICoqcnZhbHVlLCB2b2lkICoqYXZhbHVlLAotCQkJICAgIGZmaV9jaWYgKmNpZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZmlfY2lmICpjaWYpCiB7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOwogICByZWdpc3RlciB2b2lkICoqcF9hcmd2OwpAQCAtMjgwLDEwICs0MTksMjAgQEAKIAogICBhcmdwID0gc3RhY2s7CiAKKyNpZmRlZiBYODZfV0lONjQKKyAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPiBzaXplb2YoZmZpX2FyZykKKyAgICAgIHx8IChjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplICE9IDEgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSAyCisgICAgICAgICAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gNCAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDgpKSkgeworICAgICpydmFsdWUgPSAqKHZvaWQgKiopIGFyZ3A7CisgICAgYXJncCArPSBzaXplb2Yodm9pZCAqKTsKKyAgfQorI2Vsc2UKICAgaWYgKCBjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCApIHsKICAgICAqcnZhbHVlID0gKih2b2lkICoqKSBhcmdwOwotICAgIGFyZ3AgKz0gNDsKKyAgICBhcmdwICs9IHNpemVvZih2b2lkICopOwogICB9CisjZW5kaWYKIAogICBwX2FyZ3YgPSBhdmFsdWU7CiAKQEAgLTI5MiwzOCArNDQxLDczIEBACiAgICAgICBzaXplX3QgejsKIAogICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoKHNpemVvZihpbnQpIC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApIHsKLQlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgc2l6ZW9mKGludCkpOworICAgICAgaWYgKChzaXplb2Yodm9pZCopIC0gMSkgJiAoc2l6ZV90KSBhcmdwKSB7CisgICAgICAgIGFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBzaXplb2Yodm9pZCopKTsKICAgICAgIH0KIAotICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOwotCi0gICAgICAvKiBiZWNhdXNlIHdlJ3JlIGxpdHRsZSBlbmRpYW4sIHRoaXMgaXMgd2hhdCBpdCB0dXJucyBpbnRvLiAgICovCi0KLSAgICAgICpwX2FyZ3YgPSAodm9pZCopIGFyZ3A7Ci0KKyNpZmRlZiBYODZfV0lONjQKKyAgICAgIGlmICgoKnBfYXJnKS0+c2l6ZSA+IHNpemVvZihmZmlfYXJnKQorICAgICAgICAgIHx8ICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgICAgICAgJiYgKCgqcF9hcmcpLT5zaXplICE9IDEgJiYgKCpwX2FyZyktPnNpemUgIT0gMgorICAgICAgICAgICAgICAgICAgJiYgKCpwX2FyZyktPnNpemUgIT0gNCAmJiAoKnBfYXJnKS0+c2l6ZSAhPSA4KSkpCisgICAgICAgIHsKKyAgICAgICAgICB6ID0gc2l6ZW9mKHZvaWQgKik7CisgICAgICAgICAgKnBfYXJndiA9ICoodm9pZCAqKilhcmdwOworICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgICAgICAKKyAgICAgICAgICAvKiBiZWNhdXNlIHdlJ3JlIGxpdHRsZSBlbmRpYW4sIHRoaXMgaXMgd2hhdCBpdCB0dXJucyBpbnRvLiAgICovCisgICAgICAgICAgCisgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKikgYXJncDsKKyAgICAgICAgfQorICAgICAgICAgIAogICAgICAgcF9hcmd2Kys7CisjaWZkZWYgWDg2X1dJTjY0CisgICAgICBhcmdwICs9ICh6ICsgc2l6ZW9mKHZvaWQqKSAtIDEpICYgfihzaXplb2Yodm9pZCopIC0gMSk7CisjZWxzZQogICAgICAgYXJncCArPSB6OworI2VuZGlmCiAgICAgfQogICAKICAgcmV0dXJuOwogfQogCisjZGVmaW5lIEZGSV9JTklUX1RSQU1QT0xJTkVfV0lONjQoVFJBTVAsRlVOLENUWCxNQVNLKSBcCit7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAorICAgdm9pZCogIF9fZnVuID0gKHZvaWQqKShGVU4pOyBcCisgICB2b2lkKiAgX19jdHggPSAodm9pZCopKENUWCk7IFwKKyAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzBdID0gMHg0MTsgXAorICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbMV0gPSAweGJiOyBcCisgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzJdID0gTUFTSzsgLyogbW92ICRtYXNrLCAlcjExICovIFwKKyAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzZdID0gMHg0ODsgXAorICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbN10gPSAweGI4OyBcCisgICAqKHZvaWQqKikgJl9fdHJhbXBbOF0gPSBfX2N0eDsgLyogbW92IF9fY3R4LCAlcmF4ICovIFwKKyAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMTZdID0gMHg0OTsgXAorICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsxN10gPSAweGJhOyBcCisgICAqKHZvaWQqKikgJl9fdHJhbXBbMThdID0gX19mdW47IC8qIG1vdiBfX2Z1biwgJXIxMCAqLyBcCisgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzI2XSA9IDB4NDE7IFwKKyAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMjddID0gMHhmZjsgXAorICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsyOF0gPSAweGUyOyAvKiBqbXAgJXIxMCAqLyBcCisgfQorCiAvKiBIb3cgdG8gbWFrZSBhIHRyYW1wb2xpbmUuICBEZXJpdmVkIGZyb20gZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4gKi8KIAogI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FKFRSQU1QLEZVTixDVFgpIFwKLSh7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAoreyB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKShUUkFNUCk7IFwKICAgIHVuc2lnbmVkIGludCAgX19mdW4gPSAodW5zaWduZWQgaW50KShGVU4pOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fY3R4ID0gKHVuc2lnbmVkIGludCkoQ1RYKTsgXAotICAgdW5zaWduZWQgaW50ICBfX2RpcyA9IF9fZnVuIC0gKF9fY3R4ICsgMTApOwlcCisgICB1bnNpZ25lZCBpbnQgIF9fZGlzID0gX19mdW4gLSAoX19jdHggKyAxMCk7ICBcCiAgICAqKHVuc2lnbmVkIGNoYXIqKSAmX190cmFtcFswXSA9IDB4Yjg7IFwKICAgICoodW5zaWduZWQgaW50KikgICZfX3RyYW1wWzFdID0gX19jdHg7IC8qIG1vdmwgX19jdHgsICVlYXggKi8gXAogICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFs1XSA9IDB4ZTk7IFwKICAgICoodW5zaWduZWQgaW50KikgICZfX3RyYW1wWzZdID0gX19kaXM7IC8qIGptcCBfX2Z1biAgKi8gXAotIH0pCisgfQogCiAjZGVmaW5lIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTChUUkFNUCxGVU4sQ1RYLFNJWkUpICBcCi0oeyB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKShUUkFNUCk7IFwKK3sgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoRlVOKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKENUWCk7IFwKICAgIHVuc2lnbmVkIGludCAgX19kaXMgPSBfX2Z1biAtIChfX2N0eCArIDEwKTsgXApAQCAtMzM0LDE3ICs1MTgsMjkgQEAKICAgICoodW5zaWduZWQgaW50KikgICZfX3RyYW1wWzZdID0gX19kaXM7IC8qIGNhbGwgX19mdW4gICovIFwKICAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMTBdID0gMHhjMjsgXAogICAgKih1bnNpZ25lZCBzaG9ydCopICAmX190cmFtcFsxMV0gPSBfX3NpemU7IC8qIHJldCBfX3NpemUgICovIFwKLSB9KQorIH0KIAogLyogdGhlIGNpZiBtdXN0IGFscmVhZHkgYmUgcHJlcCdlZCAqLwogCiBmZmlfc3RhdHVzCiBmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCi0JCSAgICAgIGZmaV9jaWYqIGNpZiwKLQkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKLQkJICAgICAgdm9pZCAqdXNlcl9kYXRhLAotCQkgICAgICB2b2lkICpjb2RlbG9jKQorICAgICAgICAgICAgICAgICAgICAgIGZmaV9jaWYqIGNpZiwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb2RlbG9jKQogeworI2lmZGVmIFg4Nl9XSU42NAorI2RlZmluZSBJU0ZMT0FUKElEWCkgKGNpZi0+YXJnX3R5cGVzW0lEWF0tPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQgfHwgY2lmLT5hcmdfdHlwZXNbSURYXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisjZGVmaW5lIEZMQUcoSURYKSAoY2lmLT5uYXJncz4oSURYKSYmSVNGTE9BVChJRFgpPygxPDwoSURYKSk6MCkKKyAgaWYgKGNpZi0+YWJpID09IEZGSV9XSU42NCkgCisgICAgeworICAgICAgaW50IG1hc2sgPSBGTEFHKDApfEZMQUcoMSl8RkxBRygyKXxGTEFHKDMpOworICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9XSU42NCAoJmNsb3N1cmUtPnRyYW1wWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZmaV9jbG9zdXJlX3dpbjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWxvYywgbWFzayk7CisgICAgICAvKiBtYWtlIHN1cmUgd2UgY2FuIGV4ZWN1dGUgaGVyZSAqLworICAgIH0KKyNlbHNlCiAgIGlmIChjaWYtPmFiaSA9PSBGRklfU1lTVikKICAgICB7CiAgICAgICBGRklfSU5JVF9UUkFNUE9MSU5FICgmY2xvc3VyZS0+dHJhbXBbMF0sCkBAIC0zNTgsNyArNTU0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZmaV9jbG9zdXJlX1NURENBTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiljb2RlbG9jLCBjaWYtPmJ5dGVzKTsKICAgICB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBYODZfV0lOMzIgKi8KKyNlbmRpZiAvKiAhWDg2X1dJTjY0ICovCiAgIGVsc2UKICAgICB7CiAgICAgICByZXR1cm4gRkZJX0JBRF9BQkk7CkBAIC0zNzcsMTAgKzU3NCwxMCBAQAogCiBmZmlfc3RhdHVzCiBmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MgKGZmaV9yYXdfY2xvc3VyZSogY2xvc3VyZSwKLQkJCSAgZmZpX2NpZiogY2lmLAotCQkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksCi0JCQkgIHZvaWQgKnVzZXJfZGF0YSwKLQkJCSAgdm9pZCAqY29kZWxvYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmZpX2NpZiogY2lmLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWxvYykKIHsKICAgaW50IGk7CiAKQEAgLTM4OSw5ICs1ODYsOSBAQAogICB9CiAKICAgLyogd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgY2VydGFpbiBraW5kcyBvZiBhcmd1bWVudHMgZm9yIHJhdwotICAvLyBjbG9zdXJlcy4gIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGEgc2VwYXJhdGUgYXNzZW1ibHkgbGFuZ3VhZ2UKLSAgLy8gcm91dGluZSwgc2luY2UgaXQgd291bGQgcmVxdWlyZSBhcmd1bWVudCBwcm9jZXNzaW5nLCBzb21ldGhpbmcgd2UKLSAgLy8gZG9uJ3QgZG8gbm93IGZvciBwZXJmb3JtYW5jZS4gKi8KKyAgICAgY2xvc3VyZXMuICBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHNlcGFyYXRlIGFzc2VtYmx5CisgICAgIGxhbmd1YWdlIHJvdXRpbmUsIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgYXJndW1lbnQgcHJvY2Vzc2luZywKKyAgICAgc29tZXRoaW5nIHdlIGRvbid0IGRvIG5vdyBmb3IgcGVyZm9ybWFuY2UuICAqLwogCiAgIGZvciAoaSA9IGNpZi0+bmFyZ3MtMTsgaSA+PSAwOyBpLS0pCiAgICAgewpAQCAtNDAxLDcgKzU5OCw3IEBACiAgIAogCiAgIEZGSV9JTklUX1RSQU1QT0xJTkUgKCZjbG9zdXJlLT50cmFtcFswXSwgJmZmaV9jbG9zdXJlX3Jhd19TWVNWLAotCQkgICAgICAgY29kZWxvYyk7CisgICAgICAgICAgICAgICAgICAgICAgIGNvZGVsb2MpOwogICAgIAogICBjbG9zdXJlLT5jaWYgID0gY2lmOwogICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CkBAIC00MjEsMTYgKzYxOCw2IEBACiAgKiBsaWJmZmktMS4yMCwgdGhpcyBpcyBub3QgdGhlIGNhc2UuKQogICovCiAKLWV4dGVybiB2b2lkCi1mZmlfY2FsbF9TWVNWKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIAotCSAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLQotI2lmZGVmIFg4Nl9XSU4zMgotZXh0ZXJuIHZvaWQKLWZmaV9jYWxsX1NURENBTEwodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwKLQkJIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLSNlbmRpZiAvKiBYODZfV0lOMzIgKi8KLQogdm9pZAogZmZpX3Jhd19jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCBmZmlfcmF3ICpmYWtlX2F2YWx1ZSkKIHsKQEAgLTQ0MCw4ICs2MjcsOCBAQAogICBlY2lmLmNpZiA9IGNpZjsKICAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CiAgIAotICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuCSovCi0gIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lCQkgICAgICAgICovCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gKi8KKyAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUgICAgICAgICAgICAgICAgICAgICAqLwogCiAgIGlmICgocnZhbHVlID09IE5VTEwpICYmIAogICAgICAgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSkKQEAgLTQ1NCwxNiArNjQxLDE4IEBACiAgIAogICBzd2l0Y2ggKGNpZi0+YWJpKSAKICAgICB7CisjaWZkZWYgWDg2X1dJTjMyCisgICAgY2FzZSBGRklfU1lTVjoKKyAgICBjYXNlIEZGSV9TVERDQUxMOgorICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworI2Vsc2UKICAgICBjYXNlIEZGSV9TWVNWOgogICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCi0JCSAgICBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgICAgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgYnJlYWs7Ci0jaWZkZWYgWDg2X1dJTjMyCi0gICAgY2FzZSBGRklfU1REQ0FMTDoKLSAgICAgIGZmaV9jYWxsX1NURENBTEwoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAotCQkgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIGJyZWFrOwotI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQoMCk7CiAgICAgICBicmVhazsKQEAgLTQ3Miw0ICs2NjEsNSBAQAogCiAjZW5kaWYKIAotI2VuZGlmIC8qIF9feDg2XzY0X18gICovCisjZW5kaWYgLyogIV9feDg2XzY0X18gIHx8IFg4Nl9XSU42NCAqLworCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCmluZGV4IGZhOTkyNTUuLjA3YTI2MjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCkBAIC0xLDYgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3ICBCbyBUaG9yc2VuIDxib0BzdXNlLmRlPgotICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggIFJlZCBIYXQsIEluYy4KKyAgIGZmaTY0LmMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgIEJvIFRob3JzZW4gPGJvQHN1c2UuZGU+CisgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4ICBSZWQgSGF0LCBJbmMuCiAgICAKICAgIHg4Ni02NCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKIApAQCAtNTAsOSArNTAsMTAgQEAKICAgIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMuIERvICpub3QqIGNoYW5nZSBvbmUgd2l0aG91dCB0aGUgb3RoZXIuICAqLwogCiAvKiBSZWdpc3RlciBjbGFzcyB1c2VkIGZvciBwYXNzaW5nIGdpdmVuIDY0Yml0IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgotICAgVGhlc2UgcmVwcmVzZW50IGNsYXNzZXMgYXMgZG9jdW1lbnRlZCBieSB0aGUgUFMgQUJJLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgIG9mIFNTRVNGLCBTU0VERiBjbGFzc2VzLCB0aGF0IGFyZSBiYXNpY2FsbHkgU1NFIGNsYXNzLCBqdXN0IGdjYyB3aWxsCi0gICB1c2UgU0Ygb3IgREZtb2RlIG1vdmUgaW5zdGVhZCBvZiBESW1vZGUgdG8gYXZvaWQgcmVmb3JtYXR0aW5nIHBlbmFsdGllcy4KKyAgIFRoZXNlIHJlcHJlc2VudCBjbGFzc2VzIGFzIGRvY3VtZW50ZWQgYnkgdGhlIFBTIEFCSSwgd2l0aCB0aGUKKyAgIGV4Y2VwdGlvbiBvZiBTU0VTRiwgU1NFREYgY2xhc3NlcywgdGhhdCBhcmUgYmFzaWNhbGx5IFNTRSBjbGFzcywKKyAgIGp1c3QgZ2NjIHdpbGwgdXNlIFNGIG9yIERGbW9kZSBtb3ZlIGluc3RlYWQgb2YgREltb2RlIHRvIGF2b2lkCisgICByZWZvcm1hdHRpbmcgcGVuYWx0aWVzLgogCiAgICBTaW1pbGFyeSB3ZSBwbGF5IGdhbWVzIHdpdGggSU5URUdFUlNJX0NMQVNTIHRvIHVzZSBjaGVhcGVyIFNJbW9kZSBtb3ZlcwogICAgd2hlbmV2ZXIgcG9zc2libGUgKHVwcGVyIGhhbGYgZG9lcyBjb250YWluIHBhZGRpbmcpLiAgKi8KQEAgLTE0NSwxMyArMTQ2LDM1IEBACiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotICAgICAgaWYgKGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZSA8PSA0KQotCWNsYXNzZXNbMF0gPSBYODZfNjRfSU5URUdFUlNJX0NMQVNTOwotICAgICAgZWxzZQotCWNsYXNzZXNbMF0gPSBYODZfNjRfSU5URUdFUl9DTEFTUzsKLSAgICAgIHJldHVybiAxOworICAgICAgeworCWludCBzaXplID0gYnl0ZV9vZmZzZXQgKyB0eXBlLT5zaXplOworCisJaWYgKHNpemUgPD0gNCkKKwkgIHsKKwkgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9JTlRFR0VSU0lfQ0xBU1M7CisJICAgIHJldHVybiAxOworCSAgfQorCWVsc2UgaWYgKHNpemUgPD0gOCkKKwkgIHsKKwkgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9JTlRFR0VSX0NMQVNTOworCSAgICByZXR1cm4gMTsKKwkgIH0KKwllbHNlIGlmIChzaXplIDw9IDEyKQorCSAgeworCSAgICBjbGFzc2VzWzBdID0gWDg2XzY0X0lOVEVHRVJfQ0xBU1M7CisJICAgIGNsYXNzZXNbMV0gPSBYODZfNjRfSU5URUdFUlNJX0NMQVNTOworCSAgICByZXR1cm4gMjsKKwkgIH0KKwllbHNlIGlmIChzaXplIDw9IDE2KQorCSAgeworCSAgICBjbGFzc2VzWzBdID0gY2xhc3Nlc1sxXSA9IFg4Nl82NF9JTlRFR0VSU0lfQ0xBU1M7CisJICAgIHJldHVybiAyOworCSAgfQorCWVsc2UKKwkgIEZGSV9BU1NFUlQgKDApOworICAgICAgfQogICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0gICAgICBpZiAoYnl0ZV9vZmZzZXQgPT0gMCkKKyAgICAgIGlmICghKGJ5dGVfb2Zmc2V0ICUgOCkpCiAJY2xhc3Nlc1swXSA9IFg4Nl82NF9TU0VTRl9DTEFTUzsKICAgICAgIGVsc2UKIAljbGFzc2VzWzBdID0gWDg2XzY0X1NTRV9DTEFTUzsKQEAgLTE3MSwxMyArMTk0LDIxIEBACiAJaW50IGk7CiAJZW51bSB4ODZfNjRfcmVnX2NsYXNzIHN1YmNsYXNzZXNbTUFYX0NMQVNTRVNdOwogCi0JLyogSWYgdGhlIHN0cnVjdCBpcyBsYXJnZXIgdGhhbiAxNiBieXRlcywgcGFzcyBpdCBvbiB0aGUgc3RhY2suICAqLwotCWlmICh0eXBlLT5zaXplID4gMTYpCisJLyogSWYgdGhlIHN0cnVjdCBpcyBsYXJnZXIgdGhhbiAzMiBieXRlcywgcGFzcyBpdCBvbiB0aGUgc3RhY2suICAqLworCWlmICh0eXBlLT5zaXplID4gMzIpCiAJICByZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKQogCSAgY2xhc3Nlc1tpXSA9IFg4Nl82NF9OT19DTEFTUzsKIAorCS8qIFplcm8gc2l6ZWQgYXJyYXlzIG9yIHN0cnVjdHVyZXMgYXJlIE5PX0NMQVNTLiAgV2UgcmV0dXJuIDAgdG8KKwkgICBzaWduYWxpemUgbWVtb3J5IGNsYXNzLCBzbyBoYW5kbGUgaXQgYXMgc3BlY2lhbCBjYXNlLiAgKi8KKwlpZiAoIXdvcmRzKQorCSAgeworCSAgICBjbGFzc2VzWzBdID0gWDg2XzY0X05PX0NMQVNTOworCSAgICByZXR1cm4gMTsKKwkgIH0KKwogCS8qIE1lcmdlIHRoZSBmaWVsZHMgb2Ygc3RydWN0dXJlLiAgKi8KIAlmb3IgKHB0ciA9IHR5cGUtPmVsZW1lbnRzOyAqcHRyICE9IE5VTEw7IHB0cisrKQogCSAgewpAQCAtMTk4LDYgKzIyOSwyMCBAQAogCSAgICBieXRlX29mZnNldCArPSAoKnB0ciktPnNpemU7CiAJICB9CiAKKwlpZiAod29yZHMgPiAyKQorCSAgeworCSAgICAvKiBXaGVuIHNpemUgPiAxNiBieXRlcywgaWYgdGhlIGZpcnN0IG9uZSBpc24ndAorCSAgICAgICBYODZfNjRfU1NFX0NMQVNTIG9yIGFueSBvdGhlciBvbmVzIGFyZW4ndAorCSAgICAgICBYODZfNjRfU1NFVVBfQ0xBU1MsIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHBhc3NlZCBpbgorCSAgICAgICBtZW1vcnkuICAqLworCSAgICBpZiAoY2xhc3Nlc1swXSAhPSBYODZfNjRfU1NFX0NMQVNTKQorCSAgICAgIHJldHVybiAwOworCisJICAgIGZvciAoaSA9IDE7IGkgPCB3b3JkczsgaSsrKQorCSAgICAgIGlmIChjbGFzc2VzW2ldICE9IFg4Nl82NF9TU0VVUF9DTEFTUykKKwkJcmV0dXJuIDA7CisJICB9CisKIAkvKiBGaW5hbCBtZXJnZXIgY2xlYW51cC4gICovCiAJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspCiAJICB7CkBAIC0yMDcsMTUgKzI1MiwyNSBAQAogCSAgICAgIHJldHVybiAwOwogCiAJICAgIC8qIFRoZSBYODZfNjRfU1NFVVBfQ0xBU1Mgc2hvdWxkIGJlIGFsd2F5cyBwcmVjZWRlZCBieQotCSAgICAgICBYODZfNjRfU1NFX0NMQVNTLiAgKi8KKwkgICAgICAgWDg2XzY0X1NTRV9DTEFTUyBvciBYODZfNjRfU1NFVVBfQ0xBU1MuICAqLwogCSAgICBpZiAoY2xhc3Nlc1tpXSA9PSBYODZfNjRfU1NFVVBfQ0xBU1MKLQkJJiYgKGkgPT0gMCB8fCBjbGFzc2VzW2kgLSAxXSAhPSBYODZfNjRfU1NFX0NMQVNTKSkKLQkgICAgICBjbGFzc2VzW2ldID0gWDg2XzY0X1NTRV9DTEFTUzsKKwkJJiYgY2xhc3Nlc1tpIC0gMV0gIT0gWDg2XzY0X1NTRV9DTEFTUworCQkmJiBjbGFzc2VzW2kgLSAxXSAhPSBYODZfNjRfU1NFVVBfQ0xBU1MpCisJICAgICAgeworCQkvKiBUaGUgZmlyc3Qgb25lIHNob3VsZCBuZXZlciBiZSBYODZfNjRfU1NFVVBfQ0xBU1MuICAqLworCQlGRklfQVNTRVJUIChpICE9IDApOworCQljbGFzc2VzW2ldID0gWDg2XzY0X1NTRV9DTEFTUzsKKwkgICAgICB9CiAKLQkgICAgLyogIFg4Nl82NF9YODdVUF9DTEFTUyBzaG91bGQgYmUgcHJlY2VkZWQgYnkgWDg2XzY0X1g4N19DTEFTUy4gICovCisJICAgIC8qICBJZiBYODZfNjRfWDg3VVBfQ0xBU1MgaXNuJ3QgcHJlY2VkZWQgYnkgWDg2XzY0X1g4N19DTEFTUywKKwkJZXZlcnl0aGluZyBzaG91bGQgYmUgcGFzc2VkIGluIG1lbW9yeS4gICovCiAJICAgIGlmIChjbGFzc2VzW2ldID09IFg4Nl82NF9YODdVUF9DTEFTUwotCQkmJiAoaSA9PSAwIHx8IGNsYXNzZXNbaSAtIDFdICE9IFg4Nl82NF9YODdfQ0xBU1MpKQotCSAgICAgIGNsYXNzZXNbaV0gPSBYODZfNjRfU1NFX0NMQVNTOworCQkmJiAoY2xhc3Nlc1tpIC0gMV0gIT0gWDg2XzY0X1g4N19DTEFTUykpCisJICAgICAgeworCQkvKiBUaGUgZmlyc3Qgb25lIHNob3VsZCBuZXZlciBiZSBYODZfNjRfWDg3VVBfQ0xBU1MuICAqLworCQlGRklfQVNTRVJUIChpICE9IDApOworCQlyZXR1cm4gMDsKKwkgICAgICB9CiAJICB9CiAJcmV0dXJuIHdvcmRzOwogICAgICAgfQpAQCAtNTI4LDEwICs1ODMsMTAgQEAKIAkgIGFyZ3AgKz0gYXJnX3R5cGVzW2ldLT5zaXplOwogCX0KICAgICAgIC8qIElmIHRoZSBhcmd1bWVudCBpcyBpbiBhIHNpbmdsZSByZWdpc3Rlciwgb3IgdHdvIGNvbnNlY3V0aXZlCi0JIHJlZ2lzdGVycywgdGhlbiB3ZSBjYW4gdXNlIHRoYXQgYWRkcmVzcyBkaXJlY3RseS4gICovCisJIGludGVnZXIgcmVnaXN0ZXJzLCB0aGVuIHdlIGNhbiB1c2UgdGhhdCBhZGRyZXNzIGRpcmVjdGx5LiAgKi8KICAgICAgIGVsc2UgaWYgKG4gPT0gMQotCSAgICAgICB8fCAobiA9PSAyCi0JCSAgICYmIFNTRV9DTEFTU19QIChjbGFzc2VzWzBdKSA9PSBTU0VfQ0xBU1NfUCAoY2xhc3Nlc1sxXSkpKQorCSAgICAgICB8fCAobiA9PSAyICYmICEoU1NFX0NMQVNTX1AgKGNsYXNzZXNbMF0pCisJCQkgICAgICAgfHwgU1NFX0NMQVNTX1AgKGNsYXNzZXNbMV0pKSkpCiAJewogCSAgLyogVGhlIGFyZ3VtZW50IGlzIGluIGEgc2luZ2xlIHJlZ2lzdGVyLiAgKi8KIAkgIGlmIChTU0VfQ0xBU1NfUCAoY2xhc3Nlc1swXSkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKaW5kZXggODE3OGQwNi4uODlhODk4MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi1DLSotCi0gICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDAzICBSZWQgSGF0LCBJbmMuCisgICBmZml0YXJnZXQuaCAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDAzLCAyMDEwICBSZWQgSGF0LCBJbmMuCiAgICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICBUYXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgZm9yIHg4NiBhbmQgeDg2LTY0LgpAQCAtMzYsMTEgKzM2LDI2IEBACiAjZGVmaW5lIFg4NgogI2VuZGlmCiAKKyNpZmRlZiBYODZfV0lONjQKKyNkZWZpbmUgRkZJX1NJWkVPRl9BUkcgOAorI2RlZmluZSBVU0VfQlVJTFRJTl9GRlMgMCAvLyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1pbmd3LTY0IAorI2VuZGlmCisKIC8qIC0tLS0gR2VuZXJpYyB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZm5kZWYgTElCRkZJX0FTTQorI2lmZGVmIFg4Nl9XSU42NAorI2lmZGVmIF9NU0NfVkVSCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgX19pbnQ2NCAgICAgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2FyZzsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRpZgorI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBmZmlfYXJnOwogdHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgIGZmaV9zYXJnOworI2VuZGlmCiAKIHR5cGVkZWYgZW51bSBmZmlfYWJpIHsKICAgRkZJX0ZJUlNUX0FCSSA9IDAsCkBAIC01MywxNiArNjgsMjIgQEAKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YsCiAjZW5kaWYKIAorI2lmZGVmIFg4Nl9XSU42NAorICBGRklfV0lONjQsCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9XSU42NCwKKyNlbHNlCisKICAgLyogLS0tLSBJbnRlbCB4ODYgYW5kIEFNRCB4ODYtNjQgLSAqLwotI2lmICFkZWZpbmVkKFg4Nl9XSU4zMikgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjaWYgIWRlZmluZWQoWDg2X1dJTjMyKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2FtZDY0KSkKICAgRkZJX1NZU1YsCiAgIEZGSV9VTklYNjQsICAgLyogVW5peCB2YXJpYW50cyBhbGwgdXNlIHRoZSBzYW1lIEFCSSBmb3IgeDg2LTY0ICAqLwotI2lmZGVmIF9faTM4Nl9fCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAogI2Vsc2UKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1VOSVg2NCwKICNlbmRpZgogI2VuZGlmCisjZW5kaWYgLyogWDg2X1dJTjY0ICovCiAKICAgRkZJX0xBU1RfQUJJID0gRkZJX0RFRkFVTFRfQUJJICsgMQogfSBmZmlfYWJpOwpAQCAtNzMsNiArOTQsNyBAQAogI2RlZmluZSBGRklfQ0xPU1VSRVMgMQogI2RlZmluZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKEZGSV9UWVBFX0xBU1QgKyAxKQogI2RlZmluZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKEZGSV9UWVBFX0xBU1QgKyAyKQorI2RlZmluZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKEZGSV9UWVBFX0xBU1QgKyAzKQogCiAjaWYgZGVmaW5lZCAoWDg2XzY0KSB8fCAoZGVmaW5lZCAoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoWDg2X0RBUldJTikpCiAjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMjQKQEAgLTgxLDEwICsxMDMsMTggQEAKICNpZmRlZiBYODZfV0lOMzIKICNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAxMwogI2Vsc2UKKyNpZmRlZiBYODZfV0lONjQKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAyOQorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorI2RlZmluZSBGRklfTk9fUkFXX0FQSSAxCisjZWxzZQogI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDEwCiAjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBYODZfV0lONjQKICNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDEJLyogeDg2IGhhcyBuYXRpdmUgcmF3IGFwaSBzdXBwb3J0ICovCiAjZW5kaWYKKyNlbmRpZgogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKaW5kZXggMjcxMWZkZS4uZjRiNmMxZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvc3lzdi5TCkBAIC0yNDIsOSArMjQyLDIwIEBACiAKICNpZiAhRkZJX05PX1JBV19BUEkKIAorLyogUHJlY2FsY3VsYXRlIGZvciBlLmcuIHRoZSBTb2xhcmlzIDEwL3g4NiBhc3NlbWJsZXIuICAqLworI2lmIEZGSV9UUkFNUE9MSU5FX1NJWkUgPT0gMTAKKyNkZWZpbmUgUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCAxMgorI2RlZmluZSBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUIDE2CisjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgMjAKKyNlbGlmIEZGSV9UUkFNUE9MSU5FX1NJWkUgPT0gMjQKKyNkZWZpbmUgUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCAyNAorI2RlZmluZSBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUIDI4CisjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgMzIKKyNlbHNlCiAjZGVmaW5lIFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgKChGRklfVFJBTVBPTElORV9TSVpFICsgMykgJiB+MykKICNkZWZpbmUgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCAoUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCArIDQpCiAjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgKFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKyA0KQorI2VuZGlmCiAjZGVmaW5lIENJRl9GTEFHU19PRkZTRVQgMjAKIAogCS5hbGlnbgk0CkBAIC0zNDMsMTAgKzM1NCwxMiBAQAogCS5sb25nCS5MRUZERTEtLkxBU0ZERTEJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTE6CiAJLmxvbmcJLkxBU0ZERTEtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KLSNpZmRlZiBfX1BJQ19fCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKIAkubG9uZwkuTEZCMS0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxpZiBkZWZpbmVkIF9fUElDX18KKwkubG9uZwkuTEZCMUByZWwKICNlbHNlCi0JLmxvbmcJLkxGQjEJLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKwkubG9uZwkuTEZCMQogI2VuZGlmCiAJLmxvbmcJLkxGRTEtLkxGQjEJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KICNpZmRlZiBfX1BJQ19fCkBAIC0zNjgsOCArMzgxLDEwIEBACiAJLmxvbmcJLkxFRkRFMi0uTEFTRkRFMgkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMjoKIAkubG9uZwkuTEFTRkRFMi0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLwotI2lmZGVmIF9fUElDX18KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAogCS5sb25nCS5MRkIyLS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbGlmIGRlZmluZWQgX19QSUNfXworCS5sb25nCS5MRkIyQHJlbAogI2Vsc2UKIAkubG9uZwkuTEZCMgogI2VuZGlmCkBAIC00MDIsOCArNDE3LDEwIEBACiAJLmxvbmcJLkxFRkRFMy0uTEFTRkRFMwkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMzoKIAkubG9uZwkuTEFTRkRFMy0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLwotI2lmZGVmIF9fUElDX18KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAogCS5sb25nCS5MRkIzLS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbGlmIGRlZmluZWQgX19QSUNfXworCS5sb25nCS5MRkIzQHJlbAogI2Vsc2UKIAkubG9uZwkuTEZCMwogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKaW5kZXggMDQ2NTY0ZC4uZmUzZjRmZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwpAQCAtODksNyArODksNiBAQAogCWFkZHEJJXIxMSwgJXIxMAogCWptcAkqJXIxMAogCi0JLnNlY3Rpb24gLnJvZGF0YQogLkxzdG9yZV90YWJsZToKIAkubG9uZwkuTHN0X3ZvaWQtLkxzdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfVk9JRCAqLwogCS5sb25nCS5Mc3Rfc2ludDMyLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfSU5UICovCkBAIC0xMDcsNyArMTA2LDYgQEAKIAkubG9uZwkuTHN0X3N0cnVjdC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLwogCS5sb25nCS5Mc3RfaW50NjQtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9QT0lOVEVSICovCiAKLQkudGV4dAogCS5hbGlnbiAyCiAuTHN0X3ZvaWQ6CiAJcmV0CkBAIC0yNDAsNyArMjM4LDYgQEAKIAlhZGRxCSVyMTEsICVyMTAKIAlqbXAJKiVyMTAKIAotCS5zZWN0aW9uIC5yb2RhdGEKIC5MbG9hZF90YWJsZToKIAkubG9uZwkuTGxkX3ZvaWQtLkxsb2FkX3RhYmxlCQkvKiBGRklfVFlQRV9WT0lEICovCiAJLmxvbmcJLkxsZF9pbnQzMi0uTGxvYWRfdGFibGUJCS8qIEZGSV9UWVBFX0lOVCAqLwpAQCAtMjU4LDcgKzI1NSw2IEBACiAJLmxvbmcJLkxsZF9zdHJ1Y3QtLkxsb2FkX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLwogCS5sb25nCS5MbGRfaW50NjQtLkxsb2FkX3RhYmxlCQkvKiBGRklfVFlQRV9QT0lOVEVSICovCiAKLQkudGV4dAogCS5hbGlnbiAyCiAuTGxkX3ZvaWQ6CiAJcmV0CkBAIC0zNTEsNyArMzQ3LDExIEBACiAJLmxvbmcJLkxFRkRFMS0uTEFTRkRFMQkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMToKIAkubG9uZwkuTEFTRkRFMS0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIEhBVkVfQVNfWDg2X1BDUkVMCiAJLmxvbmcJLkxVVzAtLgkJCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MVVcwQHJlbAorI2VuZGlmCiAJLmxvbmcJLkxVVzQtLkxVVzAJCS8qIEZERSBhZGRyZXNzIHJhbmdlICovCiAJLnVsZWIxMjggMHgwCQkJLyogQXVnbWVudGF0aW9uIHNpemUgKi8KIApAQCAtMzg5LDcgKzM4OSwxMSBAQAogCS5sb25nCS5MRUZERTMtLkxBU0ZERTMJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTM6CiAJLmxvbmcJLkxBU0ZERTMtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBIQVZFX0FTX1g4Nl9QQ1JFTAogCS5sb25nCS5MVVc1LS4JCQkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTFVXNUByZWwKKyNlbmRpZgogCS5sb25nCS5MVVc5LS5MVVc1CQkvKiBGREUgYWRkcmVzcyByYW5nZSAqLwogCS51bGViMTI4IDB4MAkJCS8qIEF1Z21lbnRhdGlvbiBzaXplICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKaW5kZXggZWJhMTFjMS4uYWMxZWQ2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMKQEAgLTEsNyArMSw4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgd2luMzIuUyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCwgMjAwMSwgMjAwMiAgUmVkIEhhdCwgSW5jLgorICAgd2luMzIuUyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCwgMjAwMSwgMjAwMiwgMjAwOSAgUmVkIEhhdCwgSW5jLgogCSAgICAgQ29weXJpZ2h0IChjKSAyMDAxICBKb2huIEJlbml0b24KIAkgICAgIENvcHlyaWdodCAoYykgMjAwMiAgUmFuaml0IE1hdGhldworCSAgICAgQ29weXJpZ2h0IChjKSAyMDA5ICBEYW5pZWwgV2l0dGUKIAkJCQogIAogICAgWDg2IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCkBAIC0xNywzMiArMTgsMzkwIEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAgCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKi8KICAKICNkZWZpbmUgTElCRkZJX0FTTQogI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgogI2luY2x1ZGUgPGZmaS5oPgotIAotLnRleHQKLSAKLS5nbG9ibCBmZmlfcHJlcF9hcmdzCisKKyNpZmRlZiBfTVNDX1ZFUgorCisuMzg2CisuTU9ERUwgRkxBVCwgQworCitFWFRSTiBmZmlfY2xvc3VyZV9TWVNWX2lubmVyOk5FQVIKKworX1RFWFQgU0VHTUVOVAorCitmZmlfY2FsbF93aW4zMiBQUk9DIE5FQVIsCisgICAgZmZpX3ByZXBfYXJncyA6IE5FQVIgUFRSIERXT1JELAorICAgIGVjaWYgICAgICAgICAgOiBORUFSIFBUUiBEV09SRCwKKyAgICBjaWZfYnl0ZXMgICAgIDogRFdPUkQsCisgICAgY2lmX2ZsYWdzICAgICA6IERXT1JELAorICAgIHJ2YWx1ZSAgICAgICAgOiBORUFSIFBUUiBEV09SRCwKKyAgICBmbiAgICAgICAgICAgIDogTkVBUiBQVFIgRFdPUkQKKworICAgICAgICA7OyBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuCisgICAgICAgIG1vdiAgZWN4LCBjaWZfYnl0ZXMKKyAgICAgICAgc3ViICBlc3AsIGVjeAorCisgICAgICAgIG1vdiAgZWF4LCBlc3AKKworICAgICAgICA7OyBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24KKyAgICAgICAgcHVzaCBlY2lmCisgICAgICAgIHB1c2ggZWF4CisgICAgICAgIGNhbGwgZmZpX3ByZXBfYXJncworCisgICAgICAgIDs7IFJldHVybiBzdGFjayB0byBwcmV2aW91cyBzdGF0ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWRkICBlc3AsIDgKKworICAgICAgICBjYWxsIGZuCisKKyAgICAgICAgOzsgY2RlY2w6ICAgd2UgcmVzdG9yZSBlc3AgaW4gdGhlIGVwaWxvZ3VlLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8KKyAgICAgICAgOzsgICAgICAgICAgcmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzLgorICAgICAgICA7OyBzdGRjYWxsOiB0aGUgY2FsbGVlIGhhcyBhbHJlYWR5IGNsZWFuZWQgdGhlIHN0YWNrLgorCisgICAgICAgIDs7IExvYWQgZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKKyAgICAgICAgbW92ICBlY3gsIGNpZl9mbGFncworCisgICAgICAgIDs7IElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICBjbXAgIHJ2YWx1ZSwgMAorICAgICAgICBqbmUgIGNhX2p1bXB0YWJsZQorCisgICAgICAgIDs7IEV2ZW4gaWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUsIHdlIGFyZQorICAgICAgICA7OyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisgICAgICAgIGNtcCAgZWN4LCBGRklfVFlQRV9GTE9BVAorICAgICAgICBqbmUgIGNhX2VwaWxvZ3VlCisgICAgICAgIGZzdHAgc3QoMCkKKworICAgICAgICBqbXAgIGNhX2VwaWxvZ3VlCisKK2NhX2p1bXB0YWJsZToKKyAgICAgICAgam1wICBbY2FfanVtcGRhdGEgKyA0ICogZWN4XQorY2FfanVtcGRhdGE6CisgICAgICAgIDs7IERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIGxhYmVsIGFuZCBqdW1wIHRhYmxlLgorICAgICAgICBkZCBvZmZzZXQgY2FfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfVk9JRAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfSU5UCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRmbG9hdCAgICAgICA7OyBGRklfVFlQRV9GTE9BVAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0ZG91YmxlICAgICAgOzsgRkZJX1RZUEVfRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRsb25nZG91YmxlICA7OyBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9VSU5UOAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU0lOVDE2CisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9VSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfVUlOVDY0CisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9TSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNhX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfUE9JTlRFUgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QgorCitjYV9yZXRpbnQ4OgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIG1vdiAgIFtlY3ggKyAwXSwgYWwKKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0aW50MTY6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgbW92ICAgW2VjeCArIDBdLCBheAorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRpbnQ6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgbW92ICAgW2VjeCArIDBdLCBlYXgKKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0aW50NjQ6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgbW92ICAgW2VjeCArIDBdLCBlYXgKKyAgICAgICAgbW92ICAgW2VjeCArIDRdLCBlZHgKKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0ZmxvYXQ6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgZnN0cCAgRFdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGRvdWJsZToKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBmc3RwICBRV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0bG9uZ2RvdWJsZToKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBmc3RwICBUQllURSBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfZXBpbG9ndWU6CisgICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KKyAgICAgICAgcmV0CitmZmlfY2FsbF93aW4zMiBFTkRQCisKK2ZmaV9jbG9zdXJlX1NZU1YgUFJPQyBORUFSIEZPUkNFRlJBTUUKKyAgICA7OyB0aGUgZmZpX2Nsb3N1cmUgY3R4IGlzIHBhc3NlZCBpbiBlYXggYnkgdGhlIHRyYW1wb2xpbmUuCisKKyAgICAgICAgc3ViICBlc3AsIDQwCisgICAgICAgIGxlYSAgZWR4LCBbZWJwIC0gMjRdCisgICAgICAgIG1vdiAgW2VicCAtIDEyXSwgZWR4ICAgICAgICAgOzsgcmVzcAorICAgICAgICBsZWEgIGVkeCwgW2VicCArIDhdCisgICAgICAgIG1vdiAgW2VzcCArIDhdLCBlZHggICAgICAgICAgOzsgYXJncworICAgICAgICBsZWEgIGVkeCwgW2VicCAtIDEyXQorICAgICAgICBtb3YgIFtlc3AgKyA0XSwgZWR4ICAgICAgICAgIDs7ICZyZXNwCisgICAgICAgIG1vdiAgW2VzcF0sIGVheCAgICAgICAgICAgICAgOzsgY2xvc3VyZQorICAgICAgICBjYWxsIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKyAgICAgICAgbW92ICBlY3gsIFtlYnAgLSAxMl0KKworY3NfanVtcHRhYmxlOgorICAgICAgICBqbXAgIFtjc19qdW1wZGF0YSArIDQgKiBlYXhdCitjc19qdW1wZGF0YToKKyAgICAgICAgOzsgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGxhYmVsIGFuZCBqdW1wIHRhYmxlLgorICAgICAgICBkZCBvZmZzZXQgY3NfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfVk9JRAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfSU5UCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRmbG9hdCAgICAgICA7OyBGRklfVFlQRV9GTE9BVAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0ZG91YmxlICAgICAgOzsgRkZJX1RZUEVfRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRsb25nZG91YmxlICA7OyBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9VSU5UOAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU0lOVDE2CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9VSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfVUlOVDY0CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9TSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldHN0cnVjdCAgICAgIDs7IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfUE9JTlRFUgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QgorCitjc19yZXRpbnQ4OgorICAgICAgICBtb3YgICBhbCwgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0aW50MTY6CisgICAgICAgIG1vdiAgIGF4LCBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRpbnQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0aW50NjQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeCArIDBdCisgICAgICAgIG1vdiAgIGVkeCwgW2VjeCArIDRdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGZsb2F0OgorICAgICAgICBmbGQgICBEV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0ZG91YmxlOgorICAgICAgICBmbGQgICBRV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0bG9uZ2RvdWJsZToKKyAgICAgICAgZmxkICAgVEJZVEUgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldHN0cnVjdDoKKyAgICAgICAgOzsgQ2FsbGVyIGV4cGVjdHMgdXMgdG8gcG9wIHN0cnVjdCByZXR1cm4gdmFsdWUgcG9pbnRlciBoaWRkZW4gYXJnLgorICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCisgICAgICAgIHJldAk0CisKK2NzX2VwaWxvZ3VlOgorICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCisgICAgICAgIHJldAorZmZpX2Nsb3N1cmVfU1lTViBFTkRQCisKKyNpZiAhRkZJX05PX1JBV19BUEkKKworI2RlZmluZSBSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUICgoRkZJX1RSQU1QT0xJTkVfU0laRSArIDMpIEFORCBOT1QgMykKKyNkZWZpbmUgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCAoUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCArIDQpCisjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgKFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKyA0KQorI2RlZmluZSBDSUZfRkxBR1NfT0ZGU0VUIDIwCisKK2ZmaV9jbG9zdXJlX3Jhd19TWVNWIFBST0MgTkVBUiBVU0VTIGVzaQorICAgIDs7IHRoZSBmZmlfY2xvc3VyZSBjdHggaXMgcGFzc2VkIGluIGVheCBieSB0aGUgdHJhbXBvbGluZS4KKworICAgICAgICBzdWIgIGVzcCwgNDAKKyAgICAgICAgbW92ICBlc2ksIFtlYXggKyBSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUXSAgICAgICAgOzsgY2xvc3VyZS0+Y2lmCisgICAgICAgIG1vdiAgZWR4LCBbZWF4ICsgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVF0gIDs7IGNsb3N1cmUtPnVzZXJfZGF0YQorICAgICAgICBtb3YgIFtlc3AgKyAxMl0sIGVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB1c2VyX2RhdGEKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgKyA4XQorICAgICAgICBtb3YgIFtlc3AgKyA4XSwgZWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyByYXdfYXJncworICAgICAgICBsZWEgIGVkeCwgW2VicCAtIDI0XQorICAgICAgICBtb3YgIFtlc3AgKyA0XSwgZWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyAmcmVzCisgICAgICAgIG1vdiAgW2VzcF0sIGVzaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGNpZgorICAgICAgICBjYWxsIERXT1JEIFBUUiBbZWF4ICsgUkFXX0NMT1NVUkVfRlVOX09GRlNFVF0gICA7OyBjbG9zdXJlLT5mdW4KKyAgICAgICAgbW92ICBlYXgsIFtlc2kgKyBDSUZfRkxBR1NfT0ZGU0VUXSAgICAgICAgICAgICAgOzsgY2lmLT5mbGFncworICAgICAgICBsZWEgIGVjeCwgW2VicCAtIDI0XQorCitjcl9qdW1wdGFibGU6CisgICAgICAgIGptcCAgW2NyX2p1bXBkYXRhICsgNCAqIGVheF0KK2NyX2p1bXBkYXRhOgorICAgICAgICA7OyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGp1bXAgdGFibGUuCisgICAgICAgIGRkIG9mZnNldCBjcl9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9WT0lECisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9JTlQKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGZsb2F0ICAgICAgIDs7IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRkb3VibGUgICAgICA7OyBGRklfVFlQRV9ET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGxvbmdkb3VibGUgIDs7IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TSU5UOAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfVUlOVDE2CisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1VJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDMyCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9VSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY3JfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfU1RSVUNUCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9QT0lOVEVSCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCCisKK2NyX3JldGludDg6CisgICAgICAgIG1vdiAgIGFsLCBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRpbnQxNjoKKyAgICAgICAgbW92ICAgYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGludDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRpbnQ2NDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4ICsgMF0KKyAgICAgICAgbW92ICAgZWR4LCBbZWN4ICsgNF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0ZmxvYXQ6CisgICAgICAgIGZsZCAgIERXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRkb3VibGU6CisgICAgICAgIGZsZCAgIFFXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRsb25nZG91YmxlOgorICAgICAgICBmbGQgICBUQllURSBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfZXBpbG9ndWU6CisgICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KKyAgICAgICAgcmV0CitmZmlfY2xvc3VyZV9yYXdfU1lTViBFTkRQCisKKyNlbmRpZiAvKiAhRkZJX05PX1JBV19BUEkgKi8KKworZmZpX2Nsb3N1cmVfU1REQ0FMTCBQUk9DIE5FQVIgRk9SQ0VGUkFNRQorICAgIDs7IHRoZSBmZmlfY2xvc3VyZSBjdHggaXMgcGFzc2VkIGluIGVheCBieSB0aGUgdHJhbXBvbGluZS4KKworICAgICAgICBzdWIgIGVzcCwgNDAKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgLSAyNF0KKyAgICAgICAgbW92ICBbZWJwIC0gMTJdLCBlZHggICAgICAgICA7OyByZXNwCisgICAgICAgIGxlYSAgZWR4LCBbZWJwICsgMTJdICAgICAgICAgOzsgYWNjb3VudCBmb3Igc3R1YiByZXR1cm4gYWRkcmVzcyBvbiBzdGFjaworICAgICAgICBtb3YgIFtlc3AgKyA4XSwgZWR4ICAgICAgICAgIDs7IGFyZ3MKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgLSAxMl0KKyAgICAgICAgbW92ICBbZXNwICsgNF0sIGVkeCAgICAgICAgICA7OyAmcmVzcAorICAgICAgICBtb3YgIFtlc3BdLCBlYXggICAgICAgICAgICAgIDs7IGNsb3N1cmUKKyAgICAgICAgY2FsbCBmZmlfY2xvc3VyZV9TWVNWX2lubmVyCisgICAgICAgIG1vdiAgZWN4LCBbZWJwIC0gMTJdCisKK2NkX2p1bXB0YWJsZToKKyAgICAgICAgam1wICBbY2RfanVtcGRhdGEgKyA0ICogZWF4XQorY2RfanVtcGRhdGE6CisgICAgICAgIDs7IERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBsYWJlbCBhbmQganVtcCB0YWJsZS4KKyAgICAgICAgZGQgb2Zmc2V0IGNkX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1ZPSUQKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX0lOVAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0ZmxvYXQgICAgICAgOzsgRkZJX1RZUEVfRkxPQVQKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGRvdWJsZSAgICAgIDs7IEZGSV9UWVBFX0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0bG9uZ2RvdWJsZSAgOzsgRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9VSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDMyCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfU0lOVDY0CisgICAgICAgIGRkIG9mZnNldCBjZF9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1BPSU5URVIKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIKKworY2RfcmV0aW50ODoKKyAgICAgICAgbW92ICAgYWwsIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGludDE2OgorICAgICAgICBtb3YgICBheCwgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0aW50OgorICAgICAgICBtb3YgICBlYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGludDY0OgorICAgICAgICBtb3YgICBlYXgsIFtlY3ggKyAwXQorICAgICAgICBtb3YgICBlZHgsIFtlY3ggKyA0XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRmbG9hdDoKKyAgICAgICAgZmxkICAgRFdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGRvdWJsZToKKyAgICAgICAgZmxkICAgUVdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGxvbmdkb3VibGU6CisgICAgICAgIGZsZCAgIFRCWVRFIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9lcGlsb2d1ZToKKyAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgorICAgICAgICByZXQKK2ZmaV9jbG9zdXJlX1NURENBTEwgRU5EUAorCitfVEVYVCBFTkRTCitFTkQKKworI2Vsc2UKKworCS50ZXh0CiAgCiAgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCiAgICAgICAgIC5iYWxpZ24gMTYKLS5nbG9ibCBfZmZpX2NhbGxfU1lTVgotIAotX2ZmaV9jYWxsX1NZU1Y6CisJLmdsb2JsCV9mZmlfY2FsbF93aW4zMgorCS5kZWYJX2ZmaV9jYWxsX3dpbjMyOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKK19mZmlfY2FsbF93aW4zMjoKKy5MRkIxOgogICAgICAgICBwdXNobCAlZWJwCisuTENGSTA6CiAgICAgICAgIG1vdmwgICVlc3AsJWVicAotIAorLkxDRkkxOgogICAgICAgICAjIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KICAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIHN1YmwgICVlY3gsJWVzcApAQCAtNjAsMjI1ICs0MTksMTQxIEBACiAgICAgICAgICMgRklYTUU6IEFsaWduIHRoZSBzdGFjayB0byBhIDEyOC1iaXQgYm91bmRhcnkgdG8gYXZvaWQKICAgICAgICAgIyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaGl0cy4KIAotCWNhbGwgICoyOCglZWJwKQotIAotICAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2Ugd2UgcHVzaGVkIGZvciB0aGUgYXJncwotICAgICAgICBtb3ZsICAxNiglZWJwKSwlZWN4Ci0gICAgICAgIGFkZGwgICVlY3gsJWVzcAotIAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSByZXR1cm4gdHlwZSBjb2RlCi0gICAgICAgIG1vdmwgIDIwKCVlYnApLCVlY3gKLSAKLSAgICAgICAgIyBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4KLSAgICAgICAgY21wbCAgJDAsMjQoJWVicCkKLSAgICAgICAgam5lICAgcmV0aW50Ci0gCi0gICAgICAgICMgRXZlbiBpZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSwgd2UgYXJlCi0gICAgICAgICMgb2JsaWdlZCB0byBoYW5kbGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICBub3JldHZhbAotICAgICAgICBmc3RwICAlc3QoMCkKLSAKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGludDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0lOVCwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGZsb2F0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0ZmxvYXQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGRvdWJsZSAgIAotICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cHMgKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9ET1VCTEUsJWVjeAotICAgICAgICBqbmUgICByZXRsb25nZG91YmxlCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIGZzdHBsICglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0bG9uZ2RvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0xPTkdET1VCTEUsJWVjeAotICAgICAgICBqbmUgICByZXRpbnQ2NAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwdCAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGludDY0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDY0LCVlY3gKLSAgICAgICAgam5lICAgcmV0c3RydWN0MWIKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIG1vdmwgICVlZHgsNCglZWN4KQotIAotcmV0c3RydWN0MWI6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UOCwlZWN4Ci0gICAgICAgIGpuZSAgIHJldHN0cnVjdDJiCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdmIgICVhbCwwKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRzdHJ1Y3QyYjoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQxNiwlZWN4Ci0gICAgICAgIGpuZSAgIHJldHN0cnVjdAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3Z3ICAlYXgsMCglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0c3RydWN0OgotICAgICAgICAjIE5vdGhpbmcgdG8gZG8hCi0gCi1ub3JldHZhbDoKLWVwaWxvZ3VlOgotICAgICAgICBtb3ZsICVlYnAsJWVzcAotICAgICAgICBwb3BsICVlYnAKLSAgICAgICAgcmV0Ci0gCi0uZmZpX2NhbGxfU1lTVl9lbmQ6Ci0KLSAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KLSAgICAgICAgLmJhbGlnbiAxNgotLmdsb2JsIF9mZmlfY2FsbF9TVERDQUxMCi0KLV9mZmlfY2FsbF9TVERDQUxMOgotICAgICAgICBwdXNobCAlZWJwCi0gICAgICAgIG1vdmwgICVlc3AsJWVicAotCi0gICAgICAgICMgTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLgotICAgICAgICBtb3ZsICAxNiglZWJwKSwlZWN4IAotICAgICAgICBzdWJsICAlZWN4LCVlc3AKLQotICAgICAgICBtb3ZsICAlZXNwLCVlYXgKLQotICAgICAgICAjIFBsYWNlIGFsbCBvZiB0aGUgZmZpX3ByZXBfYXJncyBpbiBwb3NpdGlvbgotICAgICAgICBwdXNobCAxMiglZWJwKQotICAgICAgICBwdXNobCAlZWF4Ci0gICAgICAgIGNhbGwgICo4KCVlYnApCi0KLSAgICAgICAgIyBSZXR1cm4gc3RhY2sgdG8gcHJldmlvdXMgc3RhdGUgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uCi0gICAgICAgIGFkZGwgICQ4LCVlc3AKLQotICAgICAgICAjIEZJWE1FOiBBbGlnbiB0aGUgc3RhY2sgdG8gYSAxMjgtYml0IGJvdW5kYXJ5IHRvIGF2b2lkCi0gICAgICAgICMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhpdHMuCi0KICAgICAgICAgY2FsbCAgKjI4KCVlYnApCi0KKyAKICAgICAgICAgIyBzdGRjYWxsIGZ1bmN0aW9ucyBwb3AgYXJndW1lbnRzIG9mZiB0aGUgc3RhY2sgdGhlbXNlbHZlcwogCiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKICAgICAgICAgbW92bCAgMjAoJWVicCksJWVjeAotCisgCiAgICAgICAgICMgSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuCiAgICAgICAgIGNtcGwgICQwLDI0KCVlYnApCi0gICAgICAgIGpuZSAgIHNjX3JldGludAotCisgICAgICAgIGpuZSAgIDBmCisgCiAgICAgICAgICMgRXZlbiBpZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSwgd2UgYXJlCiAgICAgICAgICMgb2JsaWdlZCB0byBoYW5kbGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgogICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICBzY19ub3JldHZhbAorICAgICAgICBqbmUgICAuTG5vcmV0dmFsCiAgICAgICAgIGZzdHAgICVzdCgwKQorIAorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCiAKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKKzA6CisJY2FsbAkxZgorCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgorLkxzdG9yZV90YWJsZToKKwkubG9uZwkuTG5vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5McmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxyZXRkb3VibGUJCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5McmV0bG9uZ2RvdWJsZQkJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5McmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxyZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHJldHVpbnQxNgkJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxyZXRzaW50MTYJCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxyZXRpbnQ2NAkJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxyZXRpbnQ2NAkJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QJCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QxYgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QyYgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxyZXRzdHJ1Y3Q0YgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisxOgorCWFkZAklZWN4LCAlZWN4CisJYWRkCSVlY3gsICVlY3gKKwlhZGQJKCVlc3ApLCVlY3gKKwlhZGQJJDQsICVlc3AKKwlqbXAJKiglZWN4KQogCi1zY19yZXRpbnQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9JTlQsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRmbG9hdAorCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLworLkxyZXRzaW50ODoKKwltb3ZzYmwJJWFsLCAlZWF4CisJam1wCS5McmV0aW50CisKKy5McmV0c2ludDE2OgorCW1vdnN3bAklYXgsICVlYXgKKwlqbXAJLkxyZXRpbnQKKworLkxyZXR1aW50ODoKKwltb3Z6YmwJJWFsLCAlZWF4CisJam1wCS5McmV0aW50CisKKy5McmV0dWludDE2OgorCW1vdnp3bAklYXgsICVlYXgKKwlqbXAJLkxyZXRpbnQKKworLkxyZXRpbnQ6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRmbG9hdDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0ZG91YmxlCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKyAKKy5McmV0ZmxvYXQ6CiAgICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBmc3RwcyAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0ZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0bG9uZ2RvdWJsZQorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisgCisuTHJldGRvdWJsZToKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgZnN0cGwgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGxvbmdkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9MT05HRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0aW50NjQKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorIAorLkxyZXRsb25nZG91YmxlOgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBmc3RwdCAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0aW50NjQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UNjQsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRzdHJ1Y3QxYgorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisgCisuTHJldGludDY0OgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKICAgICAgICAgbW92bCAgJWVkeCw0KCVlY3gpCisJam1wICAgLkxlcGlsb2d1ZQogCi1zY19yZXRzdHJ1Y3QxYjoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQ4LCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0c3RydWN0MmIKKy5McmV0c3RydWN0MWI6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIG1vdmIgICVhbCwwKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldHN0cnVjdDJiOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDE2LCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0c3RydWN0CisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKyAKKy5McmV0c3RydWN0MmI6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIG1vdncgICVheCwwKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKIAotc2NfcmV0c3RydWN0OgorLkxyZXRzdHJ1Y3Q0YjoKKyAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKKyAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKworLkxyZXRzdHJ1Y3Q6CiAgICAgICAgICMgTm90aGluZyB0byBkbyEKLQotc2Nfbm9yZXR2YWw6Ci1zY19lcGlsb2d1ZToKKyAKKy5Mbm9yZXR2YWw6CisuTGVwaWxvZ3VlOgogICAgICAgICBtb3ZsICVlYnAsJWVzcAogICAgICAgICBwb3BsICVlYnAKICAgICAgICAgcmV0CisuZmZpX2NhbGxfd2luMzJfZW5kOgorLkxGRTE6CiAKLS5mZmlfY2FsbF9TVERDQUxMX2VuZDoKLQotCS5nbG9ibCBfZmZpX2Nsb3N1cmVfU1REQ0FMTAotX2ZmaV9jbG9zdXJlX1NURENBTEw6Ci0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwgJWVicAotCXN1YmwJJDQwLCAlZXNwCi0JbGVhbAktMjQoJWVicCksICVlZHgKLQltb3ZsCSVlZHgsIC0xMiglZWJwKQkvKiByZXNwICovCi0JbGVhbAkxMiglZWJwKSwgJWVkeCAgLyogYWNjb3VudCBmb3Igc3R1YiByZXR1cm4gYWRkcmVzcyBvbiBzdGFjayAqLwotCW1vdmwJJWVkeCwgNCglZXNwKQkvKiBhcmdzICovCi0JbGVhbAktMTIoJWVicCksICVlZHgKLQltb3ZsCSVlZHgsICglZXNwKQkvKiAmcmVzcCAqLwotCWNhbGwJX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKLQltb3ZsCS0xMiglZWJwKSwgJWVjeAotCWptcCAgICAgLkxjbHNfcmV0dXJuX3Jlc3VsdAotLmZmaV9jbG9zdXJlX1NURENBTExfZW5kOgotCi0JLmdsb2JsIF9mZmlfY2xvc3VyZV9TWVNWCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCisgICAgICAgIC5iYWxpZ24gMTYKKwkuZ2xvYmwJX2ZmaV9jbG9zdXJlX1NZU1YKKwkuZGVmCV9mZmlfY2xvc3VyZV9TWVNWOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKIF9mZmlfY2xvc3VyZV9TWVNWOgorLkxGQjM6CiAJcHVzaGwJJWVicAorLkxDRkk0OgogCW1vdmwJJWVzcCwgJWVicAorLkxDRkk1OgogCXN1YmwJJDQwLCAlZXNwCiAJbGVhbAktMjQoJWVicCksICVlZHgKIAltb3ZsCSVlZHgsIC0xMiglZWJwKQkvKiByZXNwICovCkBAIC0yODgsNDggKzU2MywxMDAgQEAKIAltb3ZsCSVlZHgsICglZXNwKQkvKiAmcmVzcCAqLwogCWNhbGwJX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKIAltb3ZsCS0xMiglZWJwKSwgJWVjeAotLkxjbHNfcmV0dXJuX3Jlc3VsdDoKLQljbXBsCSRGRklfVFlQRV9JTlQsICVlYXgKLQlqZQkuTGNsc19yZXRpbnQKLQljbXBsCSRGRklfVFlQRV9GTE9BVCwgJWVheAotCWplCS5MY2xzX3JldGZsb2F0Ci0JY21wbAkkRkZJX1RZUEVfRE9VQkxFLCAlZWF4Ci0JamUJLkxjbHNfcmV0ZG91YmxlCi0JY21wbAkkRkZJX1RZUEVfTE9OR0RPVUJMRSwgJWVheAotCWplCS5MY2xzX3JldGxkb3VibGUKLQljbXBsCSRGRklfVFlQRV9TSU5UNjQsICVlYXgKLQlqZQkuTGNsc19yZXRsbG9uZwotCWNtcGwJJEZGSV9UWVBFX1NJTlQ4LCAlZWF4CS8qIDEtYnl0ZSBzdHJ1Y3QgKi8KLQlqZQkuTGNsc19yZXRzdHJ1Y3QxCi0JY21wbAkkRkZJX1RZUEVfU0lOVDE2LCAlZWF4CS8qIDItYnl0ZXMgc3RydWN0ICovCi0JamUJLkxjbHNfcmV0c3RydWN0MgotLkxjbHNfZXBpbG9ndWU6Ci0JbW92bAklZWJwLCAlZXNwCi0JcG9wbAklZWJwCi0JcmV0CisKKzA6CisJY2FsbAkxZgorCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgorLkxjbHNfc3RvcmVfdGFibGU6CisJLmxvbmcJLkxjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5MY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5MY2xzX3JldGRvdWJsZQkJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxjbHNfcmV0dWludDE2CQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTGNsc19yZXRzaW50MTYJCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTGNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdAkJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisKKzE6CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJJWVheCwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCWFkZAkkNCwgJWVzcAorCWptcAkqKCVlYXgpCisKKwkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KKy5MY2xzX3JldHNpbnQ4OgorCW1vdnNibAkoJWVjeCksICVlYXgKKwlqbXAJLkxjbHNfZXBpbG9ndWUKKworLkxjbHNfcmV0c2ludDE2OgorCW1vdnN3bAkoJWVjeCksICVlYXgKKwlqbXAJLkxjbHNfZXBpbG9ndWUKKworLkxjbHNfcmV0dWludDg6CisJbW92emJsCSglZWN4KSwgJWVheAorCWptcAkuTGNsc19lcGlsb2d1ZQorCisuTGNsc19yZXR1aW50MTY6CisJbW92endsCSglZWN4KSwgJWVheAorCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRpbnQ6CiAJbW92bAkoJWVjeCksICVlYXgKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0ZmxvYXQ6CiAJZmxkcwkoJWVjeCkKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0ZG91YmxlOgogCWZsZGwJKCVlY3gpCiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldGxkb3VibGU6CiAJZmxkdAkoJWVjeCkKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0bGxvbmc6CiAJbW92bAkoJWVjeCksICVlYXgKIAltb3ZsCTQoJWVjeCksICVlZHgKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0c3RydWN0MToKIAltb3ZzYmwJKCVlY3gpLCAlZWF4CiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldHN0cnVjdDI6CiAJbW92c3dsCSglZWN4KSwgJWVheAogCWptcAkuTGNsc19lcGlsb2d1ZQorCisuTGNsc19yZXRzdHJ1Y3Q0OgorCW1vdmwJKCVlY3gpLCAlZWF4CisJam1wCS5MY2xzX2VwaWxvZ3VlCisKKy5MY2xzX3JldHN0cnVjdDoKKyAgICAgICAgIyBDYWxsZXIgZXhwZWN0cyB1cyB0byBwb3Agc3RydWN0IHJldHVybiB2YWx1ZSBwb2ludGVyIGhpZGRlbiBhcmcuCisJbW92bAklZWJwLCAlZXNwCisJcG9wbAklZWJwCisJcmV0CSQweDQKKworLkxjbHNfbm9yZXR2YWw6CisuTGNsc19lcGlsb2d1ZToKKwltb3ZsCSVlYnAsICVlc3AKKwlwb3BsCSVlYnAKKwlyZXQKIC5mZmlfY2xvc3VyZV9TWVNWX2VuZDoKKy5MRkUzOgogCiAjaWYgIUZGSV9OT19SQVdfQVBJCiAKQEAgLTMzOCwxMiArNjY1LDE4IEBACiAjZGVmaW5lIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgKFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKyA0KQogI2RlZmluZSBDSUZfRkxBR1NfT0ZGU0VUIDIwCiAKLQkuYmFsaWduCTE2Ci0JLmdsb2JsIF9mZmlfY2xvc3VyZV9yYXdfU1lTVgorICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgorICAgICAgICAuYmFsaWduIDE2CisJLmdsb2JsCV9mZmlfY2xvc3VyZV9yYXdfU1lTVgorCS5kZWYJX2ZmaV9jbG9zdXJlX3Jhd19TWVNWOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKIF9mZmlfY2xvc3VyZV9yYXdfU1lTVjoKKy5MRkI0OgogCXB1c2hsCSVlYnAKKy5MQ0ZJNjoKIAltb3ZsCSVlc3AsICVlYnAKKy5MQ0ZJNzoKIAlwdXNobAklZXNpCisuTENGSTg6CiAJc3VibAkkMzYsICVlc3AKIAltb3ZsCVJBV19DTE9TVVJFX0NJRl9PRkZTRVQoJWVheCksICVlc2kJIC8qIGNsb3N1cmUtPmNpZiAqLwogCW1vdmwJUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCglZWF4KSwgJWVkeCAvKiBjbG9zdXJlLT51c2VyX2RhdGEgKi8KQEAgLTM1NSwzNyArNjg4LDM2OCBAQAogCW1vdmwJJWVzaSwgKCVlc3ApCS8qIGNpZiAqLwogCWNhbGwJKlJBV19DTE9TVVJFX0ZVTl9PRkZTRVQoJWVheCkJCSAvKiBjbG9zdXJlLT5mdW4gKi8KIAltb3ZsCUNJRl9GTEFHU19PRkZTRVQoJWVzaSksICVlYXgJCSAvKiBydHlwZSAqLwotCWNtcGwJJEZGSV9UWVBFX0lOVCwgJWVheAotCWplCS5McmNsc19yZXRpbnQKLQljbXBsCSRGRklfVFlQRV9GTE9BVCwgJWVheAotCWplCS5McmNsc19yZXRmbG9hdAotCWNtcGwJJEZGSV9UWVBFX0RPVUJMRSwgJWVheAotCWplCS5McmNsc19yZXRkb3VibGUKLQljbXBsCSRGRklfVFlQRV9MT05HRE9VQkxFLCAlZWF4Ci0JamUJLkxyY2xzX3JldGxkb3VibGUKLQljbXBsCSRGRklfVFlQRV9TSU5UNjQsICVlYXgKLQlqZQkuTHJjbHNfcmV0bGxvbmcKKzA6CisJY2FsbAkxZgorCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgorLkxyY2xzX3N0b3JlX3RhYmxlOgorCS5sb25nCS5McmNsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5McmNsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHJjbHNfcmV0ZG91YmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5McmNsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHJjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxyY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5McmNsc19yZXR1aW50MTYJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxyY2xzX3JldHNpbnQxNgkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5McmNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdAkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisxOgorCWFkZAklZWF4LCAlZWF4CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwlhZGQJJDQsICVlc3AKKwlqbXAJKiglZWF4KQorCisJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCisuTHJjbHNfcmV0c2ludDg6CisJbW92c2JsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHNpbnQxNjoKKwltb3Zzd2wJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0dWludDg6CisJbW92emJsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHVpbnQxNjoKKwltb3Z6d2wJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0aW50OgorCW1vdmwJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0ZmxvYXQ6CisJZmxkcwktMjQoJWVicCkKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRkb3VibGU6CisJZmxkbAktMjQoJWVicCkKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRsZG91YmxlOgorCWZsZHQJLTI0KCVlYnApCisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0bGxvbmc6CisJbW92bAktMjQoJWVicCksICVlYXgKKwltb3ZsCS0yMCglZWJwKSwgJWVkeAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHN0cnVjdDE6CisJbW92c2JsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHN0cnVjdDI6CisJbW92c3dsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHN0cnVjdDQ6CisJbW92bAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRzdHJ1Y3Q6CisJIyBOb3RoaW5nIHRvIGRvIQorCisuTHJjbHNfbm9yZXR2YWw6CiAuTHJjbHNfZXBpbG9ndWU6CiAJYWRkbAkkMzYsICVlc3AKIAlwb3BsCSVlc2kKIAlwb3BsCSVlYnAKIAlyZXQKLS5McmNsc19yZXRpbnQ6Ci0JbW92bAktMjQoJWVicCksICVlYXgKLQlqbXAJLkxyY2xzX2VwaWxvZ3VlCi0uTHJjbHNfcmV0ZmxvYXQ6Ci0JZmxkcwktMjQoJWVicCkKLQlqbXAJLkxyY2xzX2VwaWxvZ3VlCi0uTHJjbHNfcmV0ZG91YmxlOgotCWZsZGwJLTI0KCVlYnApCi0Jam1wCS5McmNsc19lcGlsb2d1ZQotLkxyY2xzX3JldGxkb3VibGU6Ci0JZmxkdAktMjQoJWVicCkKLQlqbXAJLkxyY2xzX2VwaWxvZ3VlCi0uTHJjbHNfcmV0bGxvbmc6Ci0JbW92bAktMjQoJWVicCksICVlYXgKLQltb3ZsCS0yMCglZWJwKSwgJWVkeAotCWptcAkuTHJjbHNfZXBpbG9ndWUKIC5mZmlfY2xvc3VyZV9yYXdfU1lTVl9lbmQ6CisuTEZFNDoKIAorI2VuZGlmIC8qICFGRklfTk9fUkFXX0FQSSAqLworCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCisJLmJhbGlnbgkxNgorCS5nbG9ibAlfZmZpX2Nsb3N1cmVfU1REQ0FMTAorCS5kZWYJX2ZmaV9jbG9zdXJlX1NURENBTEw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgorX2ZmaV9jbG9zdXJlX1NURENBTEw6CisuTEZCNToKKwlwdXNobAklZWJwCisuTENGSTk6CisJbW92bAklZXNwLCAlZWJwCisuTENGSTEwOgorCXN1YmwJJDQwLCAlZXNwCisJbGVhbAktMjQoJWVicCksICVlZHgKKwltb3ZsCSVlZHgsIC0xMiglZWJwKQkvKiByZXNwICovCisJbGVhbAkxMiglZWJwKSwgJWVkeCAgLyogYWNjb3VudCBmb3Igc3R1YiByZXR1cm4gYWRkcmVzcyBvbiBzdGFjayAqLworCW1vdmwJJWVkeCwgNCglZXNwKQkvKiBhcmdzICovCisJbGVhbAktMTIoJWVicCksICVlZHgKKwltb3ZsCSVlZHgsICglZXNwKQkvKiAmcmVzcCAqLworCWNhbGwJX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKwltb3ZsCS0xMiglZWJwKSwgJWVjeAorMDoKKwljYWxsCTFmCisJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCisuTHNjbHNfc3RvcmVfdGFibGU6CisJLmxvbmcJLkxzY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxzY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5Mc2Nsc19yZXRkb3VibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxzY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5Mc2Nsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHNjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxzY2xzX3JldHVpbnQxNgkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHNjbHNfcmV0c2ludDE2CS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5Mc2Nsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxzY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0CS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKzE6CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJJWVheCwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCWFkZAkkNCwgJWVzcAorCWptcAkqKCVlYXgpCisKKwkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KKy5Mc2Nsc19yZXRzaW50ODoKKwltb3ZzYmwJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0c2ludDE2OgorCW1vdnN3bAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXR1aW50ODoKKwltb3Z6YmwJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0dWludDE2OgorCW1vdnp3bAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRpbnQ6CisJbW92bAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRmbG9hdDoKKwlmbGRzCSglZWN4KQorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldGRvdWJsZToKKwlmbGRsCSglZWN4KQorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldGxkb3VibGU6CisJZmxkdAkoJWVjeCkKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRsbG9uZzoKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJNCglZWN4KSwgJWVkeAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHN0cnVjdDE6CisJbW92c2JsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHN0cnVjdDI6CisJbW92c3dsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHN0cnVjdDQ6CisJbW92bAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRzdHJ1Y3Q6CisJIyBOb3RoaW5nIHRvIGRvIQorCisuTHNjbHNfbm9yZXR2YWw6CisuTHNjbHNfZXBpbG9ndWU6CisJbW92bAklZWJwLCAlZXNwCisJcG9wbAklZWJwCisJcmV0CisuZmZpX2Nsb3N1cmVfU1REQ0FMTF9lbmQ6CisuTEZFNToKKworCS5zZWN0aW9uCS5laF9mcmFtZSwidyIKKy5MZnJhbWUxOgorLkxTQ0lFMToKKwkubG9uZwkuTEVDSUUxLS5MQVNDSUUxICAvKiBMZW5ndGggb2YgQ29tbW9uIEluZm9ybWF0aW9uIEVudHJ5ICovCisuTEFTQ0lFMToKKwkubG9uZwkweDAJLyogQ0lFIElkZW50aWZpZXIgVGFnICovCisJLmJ5dGUJMHgxCS8qIENJRSBWZXJzaW9uICovCisjaWZkZWYgX19QSUNfXworCS5hc2NpaSAielJcMCIJLyogQ0lFIEF1Z21lbnRhdGlvbiAqLworI2Vsc2UKKwkuYXNjaWkgIlwwIgkvKiBDSUUgQXVnbWVudGF0aW9uICovCiAjZW5kaWYKKwkuYnl0ZQkweDEJLyogLnVsZWIxMjggMHgxOyBDSUUgQ29kZSBBbGlnbm1lbnQgRmFjdG9yICovCisJLmJ5dGUJMHg3YwkvKiAuc2xlYjEyOCAtNDsgQ0lFIERhdGEgQWxpZ25tZW50IEZhY3RvciAqLworCS5ieXRlCTB4OAkvKiBDSUUgUkEgQ29sdW1uICovCisjaWZkZWYgX19QSUNfXworCS5ieXRlCTB4MQkvKiAudWxlYjEyOCAweDE7IEF1Z21lbnRhdGlvbiBzaXplICovCisJLmJ5dGUJMHgxYgkvKiBGREUgRW5jb2RpbmcgKHBjcmVsIHNkYXRhNCkgKi8KKyNlbmRpZgorCS5ieXRlCTB4YwkvKiBEV19DRkFfZGVmX2NmYSBDRkEgPSByNCArIDQgPSA0KCVlc3ApICovCisJLmJ5dGUJMHg0CS8qIC51bGViMTI4IDB4NCAqLworCS5ieXRlCTB4NAkvKiAudWxlYjEyOCAweDQgKi8KKwkuYnl0ZQkweDg4CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDggJWVpcCBhdCBDRkEgKyAxICogLTQgKi8KKwkuYnl0ZQkweDEJLyogLnVsZWIxMjggMHgxICovCisJLmFsaWduIDQKKy5MRUNJRTE6CisKKy5MU0ZERTE6CisJLmxvbmcJLkxFRkRFMS0uTEFTRkRFMQkvKiBGREUgTGVuZ3RoICovCisuTEFTRkRFMToKKwkubG9uZwkuTEFTRkRFMS0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCisJLmxvbmcJLkxGQjEtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTEZCMQorI2VuZGlmCisJLmxvbmcJLkxGRTEtLkxGQjEJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KKyNpZmRlZiBfX1BJQ19fCisJLmJ5dGUJMHgwCS8qIC51bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUgKi8KKyNlbmRpZgorCS8qIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucyBnbyBoZXJlLiAgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkkwLS5MRkIxCisJLmJ5dGUJMHhlCS8qIERXX0NGQV9kZWZfY2ZhX29mZnNldCBDRkEgPSByNCArIDggPSA4KCVlc3ApICovCisJLmJ5dGUJMHg4CS8qIC51bGViMTI4IDB4OCAqLworCS5ieXRlCTB4ODUJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4NSAlZWJwIGF0IENGQSArIDIgKiAtNCAqLworCS5ieXRlCTB4MgkvKiAudWxlYjEyOCAweDIgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkkxLS5MQ0ZJMAorCS5ieXRlCTB4ZAkvKiBEV19DRkFfZGVmX2NmYV9yZWdpc3RlciBDRkEgPSByNSA9ICVlYnAgKi8KKwkuYnl0ZQkweDUJLyogLnVsZWIxMjggMHg1ICovCisKKwkvKiBFbmQgb2YgRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zLiAgKi8KKwkuYWxpZ24gNAorLkxFRkRFMToKKworCisuTFNGREUzOgorCS5sb25nCS5MRUZERTMtLkxBU0ZERTMJLyogRkRFIExlbmd0aCAqLworLkxBU0ZERTM6CisJLmxvbmcJLkxBU0ZERTMtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAorCS5sb25nCS5MRkIzLS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxGQjMKKyNlbmRpZgorCS5sb25nCS5MRkUzLS5MRkIzCS8qIEZERSBhZGRyZXNzIHJhbmdlICovCisjaWZkZWYgX19QSUNfXworCS5ieXRlCTB4MAkvKiAudWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplICovCisjZW5kaWYKKwkvKiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMgZ28gaGVyZS4gICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJNC0uTEZCMworCS5ieXRlCTB4ZQkvKiBEV19DRkFfZGVmX2NmYV9vZmZzZXQgQ0ZBID0gcjQgKyA4ID0gOCglZXNwKSAqLworCS5ieXRlCTB4OAkvKiAudWxlYjEyOCAweDggKi8KKwkuYnl0ZQkweDg1CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDUgJWVicCBhdCBDRkEgKyAyICogLTQgKi8KKwkuYnl0ZQkweDIJLyogLnVsZWIxMjggMHgyICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJNS0uTENGSTQKKwkuYnl0ZQkweGQJLyogRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgQ0ZBID0gcjUgPSAlZWJwICovCisJLmJ5dGUJMHg1CS8qIC51bGViMTI4IDB4NSAqLworCisJLyogRW5kIG9mIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucy4gICovCisJLmFsaWduIDQKKy5MRUZERTM6CisKKyNpZiAhRkZJX05PX1JBV19BUEkKKworLkxTRkRFNDoKKwkubG9uZwkuTEVGREU0LS5MQVNGREU0CS8qIEZERSBMZW5ndGggKi8KKy5MQVNGREU0OgorCS5sb25nCS5MQVNGREU0LS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKKwkubG9uZwkuTEZCNC0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MRkI0CisjZW5kaWYKKwkubG9uZwkuTEZFNC0uTEZCNAkvKiBGREUgYWRkcmVzcyByYW5nZSAqLworI2lmZGVmIF9fUElDX18KKwkuYnl0ZQkweDAJLyogLnVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZSAqLworI2VuZGlmCisJLyogRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zIGdvIGhlcmUuICAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTYtLkxGQjQKKwkuYnl0ZQkweGUJLyogRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0IENGQSA9IHI0ICsgOCA9IDgoJWVzcCkgKi8KKwkuYnl0ZQkweDgJLyogLnVsZWIxMjggMHg4ICovCisJLmJ5dGUJMHg4NQkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg1ICVlYnAgYXQgQ0ZBICsgMiAqIC00ICovCisJLmJ5dGUJMHgyCS8qIC51bGViMTI4IDB4MiAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTctLkxDRkk2CisJLmJ5dGUJMHhkCS8qIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyIENGQSA9IHI1ID0gJWVicCAqLworCS5ieXRlCTB4NQkvKiAudWxlYjEyOCAweDUgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk4LS5MQ0ZJNworCS5ieXRlCTB4ODYJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4NiAlZXNpIGF0IENGQSArIDMgKiAtNCAqLworCS5ieXRlCTB4MwkvKiAudWxlYjEyOCAweDMgKi8KKworCS8qIEVuZCBvZiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMuICAqLworCS5hbGlnbiA0CisuTEVGREU0OgorCisjZW5kaWYgLyogIUZGSV9OT19SQVdfQVBJICovCisKKy5MU0ZERTU6CisJLmxvbmcJLkxFRkRFNS0uTEFTRkRFNQkvKiBGREUgTGVuZ3RoICovCisuTEFTRkRFNToKKwkubG9uZwkuTEFTRkRFNS0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCisJLmxvbmcJLkxGQjUtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTEZCNQorI2VuZGlmCisJLmxvbmcJLkxGRTUtLkxGQjUJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KKyNpZmRlZiBfX1BJQ19fCisJLmJ5dGUJMHgwCS8qIC51bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUgKi8KKyNlbmRpZgorCS8qIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucyBnbyBoZXJlLiAgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk5LS5MRkI1CisJLmJ5dGUJMHhlCS8qIERXX0NGQV9kZWZfY2ZhX29mZnNldCBDRkEgPSByNCArIDggPSA4KCVlc3ApICovCisJLmJ5dGUJMHg4CS8qIC51bGViMTI4IDB4OCAqLworCS5ieXRlCTB4ODUJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4NSAlZWJwIGF0IENGQSArIDIgKiAtNCAqLworCS5ieXRlCTB4MgkvKiAudWxlYjEyOCAweDIgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkkxMC0uTENGSTkKKwkuYnl0ZQkweGQJLyogRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgQ0ZBID0gcjUgPSAlZWJwICovCisJLmJ5dGUJMHg1CS8qIC51bGViMTI4IDB4NSAqLworCisJLyogRW5kIG9mIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucy4gICovCisJLmFsaWduIDQKKy5MRUZERTU6CisKKyNlbmRpZiAvKiAhX01TQ19WRVIgKi8KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjY0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTkxODE4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjY0LlMKQEAgLTAsMCArMSw0NjAgQEAKKyNkZWZpbmUgTElCRkZJX0FTTQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorCQorLyogQ29uc3RhbnRzIGZvciBmZmlfY2FsbF93aW42NCAqLwkKKyNkZWZpbmUgU1RBQ0sgMAorI2RlZmluZSBQUkVQX0FSR1NfRk4gMzIKKyNkZWZpbmUgRUNJRiA0MAorI2RlZmluZSBDSUZfQllURVMgNDgKKyNkZWZpbmUgQ0lGX0ZMQUdTIDU2CisjZGVmaW5lIFJWQUxVRSA2NAorI2RlZmluZSBGTiA3MgorCisvKiBmZmlfY2FsbF93aW42NCAodm9pZCAoKnByZXBfYXJnc19mbikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksCisgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCBieXRlcywgdW5zaWduZWQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnJ2YWx1ZSwgdm9pZCAoKmZuKSgpKTsKKyAqLworCisjaWZkZWYgX01TQ19WRVIKK1BVQkxJQwlmZmlfY2FsbF93aW42NAorCitFWFRSTglfX2Noa3N0azpORUFSCitFWFRSTglmZmlfY2xvc3VyZV93aW42NF9pbm5lcjpORUFSCisKK19URVhUCVNFR01FTlQKKworOzs7IGZmaV9jbG9zdXJlX3dpbjY0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlc2UgcmVnaXN0ZXJzIHNldDoKKzs7OyAgICByYXggcG9pbnRzIHRvICdjbG9zdXJlJworOzs7ICAgIHIxMSBjb250YWlucyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRoZQorOzs7ICAgIGZpcnN0IGZvdXIgcGFyYW1ldGVycyBhcmUgZmxvYXQgb3IgZG91YmxlCis7OzsKKzs7OyBJdCBtdXN0IG1vdmUgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluIHJlZ2lzdGVycyB0byB0aGVpciBzdGFjayBsb2NhdGlvbiwKKzs7OyBjYWxsIGZmaV9jbG9zdXJlX3dpbjY0X2lubmVyIGZvciB0aGUgYWN0dWFsIHdvcmssIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQuCis7OzsgCitmZmlfY2xvc3VyZV93aW42NCBQUk9DIEZSQU1FCisJOzsgY29weSByZWdpc3RlciBhcmd1bWVudHMgb250byBzdGFjaworCXRlc3QJcjExLCAxCisJam5lCWZpcnN0X2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCs4XSwgcmN4CisJam1wCXNlY29uZAorZmlyc3RfaXNfZmxvYXQ6CisJbW92bHBkCVFXT1JEIFBUUiBbcnNwKzhdLCB4bW0wCisKK3NlY29uZDoKKwl0ZXN0CXIxMSwgMgorCWpuZQlzZWNvbmRfaXNfZmxvYXQJCisJbW92CVFXT1JEIFBUUiBbcnNwKzE2XSwgcmR4CisJam1wCXRoaXJkCitzZWNvbmRfaXNfZmxvYXQ6CisJbW92bHBkCVFXT1JEIFBUUiBbcnNwKzE2XSwgeG1tMQorCit0aGlyZDoKKwl0ZXN0CXIxMSwgNAorCWpuZQl0aGlyZF9pc19mbG9hdAkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMjRdLCByOAorCWptcAlmb3VydGgKK3RoaXJkX2lzX2Zsb2F0OgorCW1vdmxwZAlRV09SRCBQVFIgW3JzcCsyNF0sIHhtbTIKKworZm91cnRoOgorCXRlc3QJcjExLCA4CisJam5lCWZvdXJ0aF9pc19mbG9hdAkKKwltb3YJUVdPUkQgUFRSIFtyc3ArMzJdLCByOQorCWptcAlkb25lCitmb3VydGhfaXNfZmxvYXQ6CisJbW92bHBkCVFXT1JEIFBUUiBbcnNwKzMyXSwgeG1tMworCitkb25lOgorICAgICAgICAuQUxMT0NTVEFDSyA0MAorCXN1Yglyc3AsIDQwCisgICAgICAgIC5FTkRQUk9MT0cKKwltb3YJcmN4LCByYXgJOyBjb250ZXh0IGlzIGZpcnN0IHBhcmFtZXRlcgorCW1vdglyZHgsIHJzcAk7IHN0YWNrIGlzIHNlY29uZCBwYXJhbWV0ZXIKKwlhZGQJcmR4LCA0OAkJOyBwb2ludCB0byBzdGFydCBvZiBhcmd1bWVudHMKKwltb3YJcmF4LCBmZmlfY2xvc3VyZV93aW42NF9pbm5lcgorCWNhbGwJcmF4CQk7IGNhbGwgdGhlIHJlYWwgY2xvc3VyZSBmdW5jdGlvbgorCWFkZAlyc3AsIDQwCisJbW92ZAl4bW0wLCByYXgJOyBJZiB0aGUgY2xvc3VyZSByZXR1cm5lZCBhIGZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGZmaV9jbG9zdXJlX3dpbjY0X2lubmVyIHdyb3RlIGl0IHRvIHJheAorCXJldAkwCitmZmlfY2xvc3VyZV93aW42NCBFTkRQCisKK2ZmaV9jYWxsX3dpbjY0IFBST0MgRlJBTUUKKyAgICAgICAgOzsgY29weSByZWdpc3RlcnMgb250byBzdGFjaworCW1vdglRV09SRCBQVFIgW3JzcCszMl0sIHI5CisJbW92CVFXT1JEIFBUUiBbcnNwKzI0XSwgcjgKKwltb3YJUVdPUkQgUFRSIFtyc3ArMTZdLCByZHgKKwltb3YJUVdPUkQgUFRSIFtyc3ArOF0sIHJjeAorICAgICAgICAuUFVTSFJFRyByYnAKKwlwdXNoCXJicAorICAgICAgICAuQUxMT0NTVEFDSyA0OAorCXN1Yglyc3AsIDQ4CQkJCQk7IDAwMDAwMDMwSAorICAgICAgICAuU0VURlJBTUUgcmJwLCAzMgorCWxlYQlyYnAsIFFXT1JEIFBUUiBbcnNwKzMyXQorICAgICAgICAuRU5EUFJPTE9HCisKKwltb3YJZWF4LCBEV09SRCBQVFIgQ0lGX0JZVEVTW3JicF0KKwlhZGQJcmF4LCAxNQorCWFuZAlyYXgsIC0xNgorCWNhbGwJX19jaGtzdGsKKwlzdWIJcnNwLCByYXgKKwlsZWEJcmF4LCBRV09SRCBQVFIgW3JzcCszMl0KKwltb3YJUVdPUkQgUFRSIFNUQUNLW3JicF0sIHJheAorCisJbW92CXJkeCwgUVdPUkQgUFRSIEVDSUZbcmJwXQorCW1vdglyY3gsIFFXT1JEIFBUUiBTVEFDS1tyYnBdCisJY2FsbAlRV09SRCBQVFIgUFJFUF9BUkdTX0ZOW3JicF0KKworCW1vdglyc3AsIFFXT1JEIFBUUiBTVEFDS1tyYnBdCisKKwltb3ZscGQJeG1tMywgUVdPUkQgUFRSIFtyc3ArMjRdCisJbW92ZAlyOSwgeG1tMworCisJbW92bHBkCXhtbTIsIFFXT1JEIFBUUiBbcnNwKzE2XQorCW1vdmQJcjgsIHhtbTIKKworCW1vdmxwZAl4bW0xLCBRV09SRCBQVFIgW3JzcCs4XQorCW1vdmQJcmR4LCB4bW0xCisKKwltb3ZscGQJeG1tMCwgUVdPUkQgUFRSIFtyc3BdCisJbW92ZAlyY3gsIHhtbTAKKworCWNhbGwJUVdPUkQgUFRSIEZOW3JicF0KK3JldF9zdHJ1Y3Q0YiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QgorIAlqbmUJcmV0X3N0cnVjdDJiJAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92CURXT1JEIFBUUiBbcmN4XSwgZWF4CisJam1wCXJldF92b2lkJAorCityZXRfc3RydWN0MmIkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIKKyAJam5lCXJldF9zdHJ1Y3QxYiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdglXT1JEIFBUUiBbcmN4XSwgYXgKKwlqbXAJcmV0X3ZvaWQkCisKK3JldF9zdHJ1Y3QxYiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQgorIAlqbmUJcmV0X3VpbnQ4JAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92CUJZVEUgUFRSIFtyY3hdLCBhbAorCWptcAlyZXRfdm9pZCQKKworcmV0X3VpbnQ4JDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfVUlOVDgKKyAJam5lCXJldF9zaW50OCQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdnp4ICAgcmF4LCBhbAorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlyZXRfdm9pZCQKKworcmV0X3NpbnQ4JDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU0lOVDgKKyAJam5lCXJldF91aW50MTYkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3ZzeCAgIHJheCwgYWwKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJcmV0X3ZvaWQkCisKK3JldF91aW50MTYkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9VSU5UMTYKKyAJam5lCXJldF9zaW50MTYkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3Z6eCAgIHJheCwgYXgKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF9zaW50MTYkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TSU5UMTYKKyAJam5lCXJldF91aW50MzIkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3ZzeCAgIHJheCwgYXgKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF91aW50MzIkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9VSU5UMzIKKyAJam5lCXJldF9zaW50MzIkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3YgICAgIGVheCwgZWF4CisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfc2ludDMyJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU0lOVDMyCisgCWpuZQlyZXRfZmxvYXQkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwljZHFlCisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfZmxvYXQkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9GTE9BVAorIAlqbmUJU0hPUlQgcmV0X2RvdWJsZSQKKworIAltb3YJcmF4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKyAJbW92c3MJRFdPUkQgUFRSIFtyYXhdLCB4bW0wCisgCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X2RvdWJsZSQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX0RPVUJMRQorIAlqbmUJU0hPUlQgcmV0X3NpbnQ2NCQKKworIAltb3YJcmF4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKyAJbW92bHBkCVFXT1JEIFBUUiBbcmF4XSwgeG1tMAorIAlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF9zaW50NjQkOgorICAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU0lOVDY0CisgIAlqbmUJcmV0X3ZvaWQkCisKKyAJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisgCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorIAlqbXAJU0hPUlQgcmV0X3ZvaWQkCisJCityZXRfdm9pZCQ6CisJeG9yCXJheCwgcmF4CisKKwlsZWEJcnNwLCBRV09SRCBQVFIgW3JicCsxNl0KKwlwb3AJcmJwCisJcmV0CTAKK2ZmaV9jYWxsX3dpbjY0IEVORFAKK19URVhUCUVORFMKK0VORAorI2Vsc2UgICAgICAgIAorLnRleHQKKworLmV4dGVybiBfZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIKKworIyBmZmlfY2xvc3VyZV93aW42NCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZXNlIHJlZ2lzdGVycyBzZXQ6CisjICAgIHJheCBwb2ludHMgdG8gJ2Nsb3N1cmUnCisjICAgIHIxMSBjb250YWlucyBhIGJpdCBtYXNrIHRoYXQgc3BlY2lmaWVzIHdoaWNoIG9mIHRoZQorIyAgICBmaXJzdCBmb3VyIHBhcmFtZXRlcnMgYXJlIGZsb2F0IG9yIGRvdWJsZQorIworIyBJdCBtdXN0IG1vdmUgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGluIHJlZ2lzdGVycyB0byB0aGVpciBzdGFjayBsb2NhdGlvbiwKKyMgY2FsbCBmZmlfY2xvc3VyZV93aW42NF9pbm5lciBmb3IgdGhlIGFjdHVhbCB3b3JrLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0LgorIyAKKwkuYmFsaWduIDE2CisgICAgICAgIC5nbG9ibCBfZmZpX2Nsb3N1cmVfd2luNjQJCitfZmZpX2Nsb3N1cmVfd2luNjQ6ICAgICAKKwkjIGNvcHkgcmVnaXN0ZXIgYXJndW1lbnRzIG9udG8gc3RhY2sKKwl0ZXN0CSQxLCVyMTEKKwlqbmUJLkxmaXJzdF9pc19mbG9hdAkKKwltb3YJJXJjeCwgOCglcnNwKQorCWptcAkuTHNlY29uZAorLkxmaXJzdF9pc19mbG9hdDoKKwltb3ZscGQJJXhtbTAsIDgoJXJzcCkKKworLkxzZWNvbmQ6CisJdGVzdAkkMiwgJXIxMQorCWpuZQkuTHNlY29uZF9pc19mbG9hdAkKKwltb3YJJXJkeCwgMTYoJXJzcCkKKwlqbXAJLkx0aGlyZAorLkxzZWNvbmRfaXNfZmxvYXQ6CisJbW92bHBkCSV4bW0xLCAxNiglcnNwKQorCisuTHRoaXJkOgorCXRlc3QJJDQsICVyMTEKKwlqbmUJLkx0aGlyZF9pc19mbG9hdAkKKwltb3YJJXI4LDI0KCVyc3ApCisJam1wCS5MZm91cnRoCisuTHRoaXJkX2lzX2Zsb2F0OgorCW1vdmxwZAkleG1tMiwgMjQoJXJzcCkKKworLkxmb3VydGg6CisJdGVzdAkkOCwgJXIxMQorCWpuZQkuTGZvdXJ0aF9pc19mbG9hdAkKKwltb3YJJXI5LCAzMiglcnNwKQorCWptcAkuTGRvbmUKKy5MZm91cnRoX2lzX2Zsb2F0OgorCW1vdmxwZAkleG1tMywgMzIoJXJzcCkKKworLkxkb25lOgorIy5BTExPQ1NUQUNLIDQwCisJc3ViCSQ0MCwgJXJzcAorIy5FTkRQUk9MT0cKKwltb3YJJXJheCwgJXJjeAkjIGNvbnRleHQgaXMgZmlyc3QgcGFyYW1ldGVyCisJbW92CSVyc3AsICVyZHgJIyBzdGFjayBpcyBzZWNvbmQgcGFyYW1ldGVyCisJYWRkCSQ0OCwgJXJkeAkjIHBvaW50IHRvIHN0YXJ0IG9mIGFyZ3VtZW50cworCW1vdgkkX2ZmaV9jbG9zdXJlX3dpbjY0X2lubmVyLCAlcmF4CisJY2FsbHEJKiVyYXgJCSMgY2FsbCB0aGUgcmVhbCBjbG9zdXJlIGZ1bmN0aW9uCisJYWRkCSQ0MCwgJXJzcAorCW1vdnEJJXJheCwgJXhtbTAJIyBJZiB0aGUgY2xvc3VyZSByZXR1cm5lZCBhIGZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZmaV9jbG9zdXJlX3dpbjY0X2lubmVyIHdyb3RlIGl0IHRvIHJheAorCXJldHEKKy5mZmlfY2xvc3VyZV93aW42NF9lbmQ6CisKKwkuYmFsaWduIDE2CisgICAgICAgIC5nbG9ibAlfZmZpX2NhbGxfd2luNjQKK19mZmlfY2FsbF93aW42NDogICAgICAgIAorICAgICAgICAjIGNvcHkgcmVnaXN0ZXJzIG9udG8gc3RhY2sKKwltb3YJJXI5LDMyKCVyc3ApCisJbW92CSVyOCwyNCglcnNwKQorCW1vdgklcmR4LDE2KCVyc3ApCisJbW92CSVyY3gsOCglcnNwKQorICAgICAgICAjLlBVU0hSRUcgcmJwCisJcHVzaAklcmJwCisgICAgICAgICMuQUxMT0NTVEFDSyA0OAorCXN1YgkkNDgsJXJzcAorICAgICAgICAjLlNFVEZSQU1FIHJicCwgMzIKKwlsZWEJMzIoJXJzcCksJXJicAorICAgICAgICAjLkVORFBST0xPRworCisJbW92CUNJRl9CWVRFUyglcmJwKSwlZWF4CisJYWRkCSQxNSwgJXJheAorCWFuZAkkLTE2LCAlcmF4CisJY21wcQkkMHgxMDAwLCAlcmF4CisJamIJTGNoX2RvbmUKK0xjaF9wcm9iZToKKwlzdWJxCSQweDEwMDAsJXJzcAorCW9ybAkkMHgwLCAoJXJzcCkKKwlzdWJxCSQweDEwMDAsJXJheAorCWNtcHEJJDB4MTAwMCwlcmF4CisJamEJTGNoX3Byb2JlCitMY2hfZG9uZToKKwlzdWJxCSVyYXgsICVyc3AKKwlvcmwJJDB4MCwgKCVyc3ApCisJbGVhCTMyKCVyc3ApLCAlcmF4CisJbW92CSVyYXgsIFNUQUNLKCVyYnApCisKKwltb3YJRUNJRiglcmJwKSwgJXJkeAorCW1vdglTVEFDSyglcmJwKSwgJXJjeAorCWNhbGxxCSpQUkVQX0FSR1NfRk4oJXJicCkKKworCW1vdglTVEFDSyglcmJwKSwgJXJzcAorCisJbW92bHBkCTI0KCVyc3ApLCAleG1tMworCW1vdmQJJXhtbTMsICVyOQorCisJbW92bHBkCTE2KCVyc3ApLCAleG1tMgorCW1vdmQJJXhtbTIsICVyOAorCisJbW92bHBkCTgoJXJzcCksICV4bW0xCisJbW92ZAkleG1tMSwgJXJkeAorCisJbW92bHBkCSglcnNwKSwgJXhtbTAKKwltb3ZkCSV4bW0wLCAlcmN4CisKKwljYWxscQkqRk4oJXJicCkKKy5McmV0X3N0cnVjdDRiOgorIAljbXBsCSRGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIsIENJRl9GTEFHUyglcmJwKQorIAlqbmUgLkxyZXRfc3RydWN0MmIKKworCW1vdglSVkFMVUUoJXJicCksICVyY3gKKwltb3YJJWVheCwgKCVyY3gpCisJam1wCS5McmV0X3ZvaWQKKworLkxyZXRfc3RydWN0MmI6CisJY21wbAkkRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCLCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfc3RydWN0MWIKKwkKKwltb3YJUlZBTFVFKCVyYnApLCAlcmN4CisJbW92CSVheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKwkKKy5McmV0X3N0cnVjdDFiOgorCWNtcGwJJEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3VpbnQ4CisJCisJbW92CVJWQUxVRSglcmJwKSwgJXJjeAorCW1vdgklYWwsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3VpbnQ4OgorCWNtcGwJJEZGSV9UWVBFX1VJTlQ4LCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfc2ludDgKKwkKKyAgICAgICAgbW92ICAgICBSVkFMVUUoJXJicCksICVyY3gKKyAgICAgICAgbW92emJxICAlYWwsICVyYXgKKwltb3ZxICAgICVyYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3NpbnQ4OgorCWNtcGwJJEZGSV9UWVBFX1NJTlQ4LCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfdWludDE2CisJCisgICAgICAgIG1vdiAgICAgUlZBTFVFKCVyYnApLCAlcmN4CisgICAgICAgIG1vdnNicSAgJWFsLCAlcmF4CisJbW92cSAgICAlcmF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF91aW50MTY6CisJY21wbAkkRkZJX1RZUEVfVUlOVDE2LCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfc2ludDE2CisJCisgICAgICAgIG1vdiAgICAgUlZBTFVFKCVyYnApLCAlcmN4CisgICAgICAgIG1vdnp3cSAgJWF4LCAlcmF4CisJbW92cSAgICAlcmF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF9zaW50MTY6CisJY21wbAkkRkZJX1RZUEVfU0lOVDE2LCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfdWludDMyCisJCisgICAgICAgIG1vdiAgICAgUlZBTFVFKCVyYnApLCAlcmN4CisgICAgICAgIG1vdnN3cSAgJWF4LCAlcmF4CisJbW92cSAgICAlcmF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF91aW50MzI6CisJY21wbAkkRkZJX1RZUEVfVUlOVDMyLCBDSUZfRkxBR1MoJXJicCkKKwlqbmUgLkxyZXRfc2ludDMyCisJCisgICAgICAgIG1vdiAgICAgUlZBTFVFKCVyYnApLCAlcmN4CisgICAgICAgIG1vdmwgICAgJWVheCwgJWVheAorCW1vdnEgICAgJXJheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfc2ludDMyOgorIAljbXBsCSRGRklfVFlQRV9TSU5UMzIsIENJRl9GTEFHUyglcmJwKQorIAlqbmUJLkxyZXRfZmxvYXQKKworCW1vdglSVkFMVUUoJXJicCksICVyY3gKKwljbHRxCisJbW92cQklcmF4LCAoJXJjeCkKKwlqbXAJLkxyZXRfdm9pZAorCisuTHJldF9mbG9hdDoKKyAJY21wbAkkRkZJX1RZUEVfRkxPQVQsIENJRl9GTEFHUyglcmJwKQorIAlqbmUJLkxyZXRfZG91YmxlCisKKyAJbW92CVJWQUxVRSglcmJwKSwgJXJheAorIAltb3ZzcwkleG1tMCwgKCVyYXgpCisgCWptcAkuTHJldF92b2lkCisKKy5McmV0X2RvdWJsZToKKyAJY21wbAkkRkZJX1RZUEVfRE9VQkxFLCBDSUZfRkxBR1MoJXJicCkKKyAJam5lCS5McmV0X3NpbnQ2NAorCisgCW1vdglSVkFMVUUoJXJicCksICVyYXgKKyAJbW92bHBkCSV4bW0wLCAoJXJheCkKKyAJam1wCS5McmV0X3ZvaWQKKworLkxyZXRfc2ludDY0OgorICAJY21wbAkkRkZJX1RZUEVfU0lOVDY0LCBDSUZfRkxBR1MoJXJicCkKKyAgCWpuZQkuTHJldF92b2lkCisKKyAJbW92CVJWQUxVRSglcmJwKSwgJXJjeAorIAltb3YJJXJheCwgKCVyY3gpCisgCWptcAkuTHJldF92b2lkCisJCisuTHJldF92b2lkOgorCXhvcgklcmF4LCAlcmF4CisKKwlsZWEJMTYoJXJicCksICVyc3AKKwlwb3AJJXJicAorCXJldHEKKy5mZmlfY2FsbF93aW42NF9lbmQ6CisjZW5kaWYgLyogIV9NU0NfVkVSICovCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlM2Q3NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsODAgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4KKworQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gZGVqYWdudQorCisjIFNldHVwIHRoZSB0ZXN0aW5nIGZyYW1ld29yaywgaWYgeW91IGhhdmUgb25lCitFWFBFQ1QgPSBgaWYgWyAtZiAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCBdIDsgdGhlbiBcCisgICAgICAgICAgICBlY2hvICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IDsgXAorICAgICAgICAgIGVsc2UgZWNobyBleHBlY3QgOyBmaWAKKworUlVOVEVTVCA9IGBpZiBbIC1mICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IF0gOyB0aGVuIFwKKwkgICAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCA7IFwKKwkgICAgZWxzZSBlY2hvIHJ1bnRlc3Q7IGZpYAorCitBTV9SVU5URVNURkxBR1MgPQorCitDTEVBTkZJTEVTID0gKi5leGUgY29yZSogKi5sb2cgKi5zdW0KKworRVhUUkFfRElTVCA9IGxpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCVwKK2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyBcCitsaWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggY29uZmlnL2RlZmF1bHQuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAgXAorbGliL2xpYmZmaS1kZy5leHAgbGliL3dyYXBwZXIuZXhwIGxpYmZmaS5jYWxsL2Zsb2F0LmMgXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgbGliZmZpLmNhbGwvZmxvYXQzLmMgXAorbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyBsaWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYyBcCitsaWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBsaWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBcCitsaWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgXAorbGliZmZpLmNhbGwvY2xzX3VpbnQuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMgXAorbGliZmZpLmNhbGwvZmxvYXQxLmMgbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvY2xzXzRieXRlLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDcuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIFwKK2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBsaWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgXAorbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYyBcCitsaWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIFwKK2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jIGxpYmZmaS5jYWxsL3JldHVybl9zYy5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMJXAorbGliZmZpLmNhbGwvcmV0dXJuX2xsLmMgbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyBcCitsaWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jIGxpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgXAorbGliZmZpLmNhbGwvY2FsbC5leHAgbGliZmZpLmNhbGwvZmZpdGVzdC5oIGxpYmZmaS5jYWxsL3N0cmxlbi5jCVwKK2xpYmZmaS5jYWxsL3JldHVybl9zbC5jIGxpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgXAorbGliZmZpLmNhbGwvc3RydWN0MS5jIGxpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyBsaWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBcCitsaWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMJXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYwlcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZmwuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgbGliZmZpLmNhbGwvc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jIGxpYmZmaS5jYWxsL2Nsc19zaW50LmMgbGliZmZpLmNhbGwvZmxvYXQyLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBcCitsaWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIGxpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgXAorbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMJXAorbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19zY2hhci5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIFwKK2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMJXAorbGliZmZpLmNhbGwvc3RydWN0Mi5jIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYwlcCitsaWJmZmkuY2FsbC9wcm9ibGVtMS5jIGxpYmZmaS5jYWxsL2Zsb2F0NC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q5LmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jIGxpYmZmaS5jYWxsL21hbnkuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvbmVnaW50LmMgbGliZmZpLmNhbGwvc3RydWN0NS5jIFwKK2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgXAorbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYyBcCitsaWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5OGM0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDQ4MiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMSBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACit0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACitzdWJkaXIgPSB0ZXN0c3VpdGUKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbgorQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAorYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvYWNpbmNsdWRlLm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChpbnN0YWxsX3NoKSAtZAorQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9mZmljb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitTT1VSQ0VTID0KK0RJU1RfU09VUkNFUyA9CitERUpBVE9PTCA9ICQoUEFDS0FHRSkKK1JVTlRFU1RERUZBVUxURkxBR1MgPSAtLXRvb2wgJCR0b29sIC0tc3JjZGlyICQkc3JjZGlyCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQUxMT0NBID0gQEFMTE9DQUAKK0FNVEFSID0gQEFNVEFSQAorQU1fUlVOVEVTVEZMQUdTID0gCitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0FTID0gQENDQVNACitDQ0FTREVQTU9ERSA9IEBDQ0FTREVQTU9ERUAKK0NDQVNGTEFHUyA9IEBDQ0FTRkxBR1NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRFNZTVVUSUwgPSBARFNZTVVUSUxACitEVU1QQklOID0gQERVTVBCSU5ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGR1JFUCA9IEBGR1JFUEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKK0lOU1RBTEwgPSBASU5TVEFMTEAKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACitMREZMQUdTID0gQExERkxBR1NACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTUFJTlQgPSBATUFJTlRACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK01LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKK09CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVEFSR0VUID0gQFRBUkdFVEAKK1RBUkdFVERJUiA9IEBUQVJHRVRESVJACitWRVJTSU9OID0gQFZFUlNJT05ACithYnNfYnVpbGRkaXIgPSBAYWJzX2J1aWxkZGlyQAorYWJzX3NyY2RpciA9IEBhYnNfc3JjZGlyQAorYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAorYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraHRtbGRpciA9IEBodG1sZGlyQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2FsZWRpciA9IEBsb2NhbGVkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACitsdF9FQ0hPID0gQGx0X0VDSE9ACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcGRmZGlyID0gQHBkZmRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitwc2RpciA9IEBwc2RpckAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3JjZGlyID0gQHNyY2RpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK3Rvb2xleGVjZGlyID0gQHRvb2xleGVjZGlyQAordG9vbGV4ZWNsaWJkaXIgPSBAdG9vbGV4ZWNsaWJkaXJACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACit0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gZGVqYWdudQorCisjIFNldHVwIHRoZSB0ZXN0aW5nIGZyYW1ld29yaywgaWYgeW91IGhhdmUgb25lCitFWFBFQ1QgPSBgaWYgWyAtZiAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCBdIDsgdGhlbiBcCisgICAgICAgICAgICBlY2hvICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IDsgXAorICAgICAgICAgIGVsc2UgZWNobyBleHBlY3QgOyBmaWAKKworUlVOVEVTVCA9IGBpZiBbIC1mICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IF0gOyB0aGVuIFwKKwkgICAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCA7IFwKKwkgICAgZWxzZSBlY2hvIHJ1bnRlc3Q7IGZpYAorCitDTEVBTkZJTEVTID0gKi5leGUgY29yZSogKi5sb2cgKi5zdW0KK0VYVFJBX0RJU1QgPSBsaWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cAlcCitsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgXAorbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGNvbmZpZy9kZWZhdWx0LmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwIFwKK2xpYi9saWJmZmktZGcuZXhwIGxpYi93cmFwcGVyLmV4cCBsaWJmZmkuY2FsbC9mbG9hdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIGxpYmZmaS5jYWxsL2Zsb2F0My5jIFwKK2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgXAorbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMgXAorbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgXAorbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfZmxvYXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jIFwKK2xpYmZmaS5jYWxsL2Nsc191aW50LmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIFwKK2xpYmZmaS5jYWxsL2Zsb2F0MS5jIGxpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIGxpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q3LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyBcCitsaWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jIFwKK2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgXAorbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgXAorbGliZmZpLmNhbGwvc3RydWN0Ni5jIGxpYmZmaS5jYWxsL3JldHVybl91Yy5jIGxpYmZmaS5jYWxsL3JldHVybl9sbDEuYyBcCitsaWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMgbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyBsaWJmZmkuY2FsbC9yZXR1cm5fc2MuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIGxpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jCVwKK2xpYmZmaS5jYWxsL3JldHVybl9sbC5jIGxpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgXAorbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIFwKK2xpYmZmaS5jYWxsL2NhbGwuZXhwIGxpYmZmaS5jYWxsL2ZmaXRlc3QuaCBsaWJmZmkuY2FsbC9zdHJsZW4uYwlcCitsaWJmZmkuY2FsbC9yZXR1cm5fc2wuYyBsaWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgXAorbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIGxpYmZmaS5jYWxsL21hbnlfd2luMzIuYyBcCitsaWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jCVwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMJXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmMgXAorbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIGxpYmZmaS5jYWxsL3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9jbHNfdWNoYXIuYyBsaWJmZmkuY2FsbC9jbHNfc2ludC5jIGxpYmZmaS5jYWxsL2Zsb2F0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMgXAorbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgXAorbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIFwKK2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIGxpYmZmaS5jYWxsL3B5b2JqYy10Yy5jCVwKK2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyBsaWJmZmkuY2FsbC9jbHNfc2NoYXIuYyBcCitsaWJmZmkuY2FsbC9jbHNfMThieXRlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyBcCitsaWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCVwKK2xpYmZmaS5jYWxsL3N0cnVjdDIuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMJXAorbGliZmZpLmNhbGwvcHJvYmxlbTEuYyBsaWJmZmkuY2FsbC9mbG9hdDQuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgbGliZmZpLmNhbGwvc3RydWN0OS5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfN2J5dGUuYyBsaWJmZmkuY2FsbC9tYW55LmMgXAorbGliZmZpLmNhbGwvc3RydWN0OC5jIGxpYmZmaS5jYWxsL25lZ2ludC5jIGxpYmZmaS5jYWxsL3N0cnVjdDUuYyBcCitsaWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIFwKK2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgXAorbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYworCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gdGVzdHN1aXRlL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiB0ZXN0c3VpdGUvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCit0YWdzOiBUQUdTCitUQUdTOgorCitjdGFnczogQ1RBR1MKK0NUQUdTOgorCisKK2NoZWNrLURFSkFHTlU6IHNpdGUuZXhwCisJc3JjZGlyPWAkKGFtX19jZCkgJChzcmNkaXIpICYmIHB3ZGA7IGV4cG9ydCBzcmNkaXI7IFwKKwlFWFBFQ1Q9JChFWFBFQ1QpOyBleHBvcnQgRVhQRUNUOyBcCisJcnVudGVzdD0kKFJVTlRFU1QpOyBcCisJaWYgJChTSEVMTCkgLWMgIiQkcnVudGVzdCAtLXZlcnNpb24iID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgZXhpdF9zdGF0dXM9MDsgbD0nJChERUpBVE9PTCknOyBmb3IgdG9vbCBpbiAkJGw7IGRvIFwKKwkgICAgaWYgJCRydW50ZXN0ICQoQU1fUlVOVEVTVEZMQUdTKSAkKFJVTlRFU1RERUZBVUxURkxBR1MpICQoUlVOVEVTVEZMQUdTKTsgXAorCSAgICB0aGVuIDo7IGVsc2UgZXhpdF9zdGF0dXM9MTsgZmk7IFwKKwkgIGRvbmU7IFwKKwllbHNlIGVjaG8gIldBUk5JTkc6IGNvdWxkIG5vdCBmaW5kIFxgcnVudGVzdCciIDE+JjI7IDo7XAorCWZpOyBcCisJZXhpdCAkJGV4aXRfc3RhdHVzCitzaXRlLmV4cDogTWFrZWZpbGUKKwlAZWNobyAnTWFraW5nIGEgbmV3IHNpdGUuZXhwIGZpbGUuLi4nCisJQGVjaG8gJyMjIHRoZXNlIHZhcmlhYmxlcyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgbWFrZSAjIycgPnNpdGUudG1wCisJQGVjaG8gJyMgRG8gbm90IGVkaXQgaGVyZS4gIElmIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZXNlIHZhbHVlcycgPj5zaXRlLnRtcAorCUBlY2hvICcjIGVkaXQgdGhlIGxhc3Qgc2VjdGlvbicgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgc3JjZGlyICQoc3JjZGlyKScgPj5zaXRlLnRtcAorCUBlY2hvICJzZXQgb2JqZGlyIGBwd2RgIiA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCBidWlsZF9hbGlhcyAiJChidWlsZF9hbGlhcykiJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCBidWlsZF90cmlwbGV0ICQoYnVpbGRfdHJpcGxldCknID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IGhvc3RfYWxpYXMgIiQoaG9zdF9hbGlhcykiJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCBob3N0X3RyaXBsZXQgJChob3N0X3RyaXBsZXQpJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCB0YXJnZXRfYWxpYXMgIiQodGFyZ2V0X2FsaWFzKSInID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IHRhcmdldF90cmlwbGV0ICQodGFyZ2V0X3RyaXBsZXQpJyA+PnNpdGUudG1wCisJQGVjaG8gJyMjIEFsbCB2YXJpYWJsZXMgYWJvdmUgYXJlIGdlbmVyYXRlZCBieSBjb25maWd1cmUuIERvIE5vdCBFZGl0ICMjJyA+PnNpdGUudG1wCisJQHRlc3QgISAtZiBzaXRlLmV4cCB8fCBcCisJICBzZWQgJzEsL14jIyBBbGwgdmFyaWFibGVzIGFib3ZlIGFyZS4qIyMvIGQnIHNpdGUuZXhwID4+IHNpdGUudG1wCisJQC1ybSAtZiBzaXRlLmJhaworCUB0ZXN0ICEgLWYgc2l0ZS5leHAgfHwgbXYgc2l0ZS5leHAgc2l0ZS5iYWsKKwlAbXYgc2l0ZS50bXAgc2l0ZS5leHAKKworZGlzdGNsZWFuLURFSkFHTlU6CisJLXJtIC1mIHNpdGUuZXhwIHNpdGUuYmFrCisJLWw9JyQoREVKQVRPT0wpJzsgZm9yIHRvb2wgaW4gJCRsOyBkbyBcCisJICBybSAtZiAkJHRvb2wuc3VtICQkdG9vbC5sb2c7IFwKKwlkb25lCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLURFSkFHTlUKK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChDTEVBTkZJTEVTKQorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKwktdGVzdCAuID0gIiQoc3JjZGlyKSIgfHwgdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tREVKQUdOVSBkaXN0Y2xlYW4tZ2VuZXJpYworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaHRtbC1hbToKKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZHZpOiBpbnN0YWxsLWR2aS1hbQorCitpbnN0YWxsLWR2aS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQorCitpbnN0YWxsLWh0bWwtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtaW5mby1hbToKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbToKKworLk1BS0U6IGNoZWNrLWFtIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAorCisuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stREVKQUdOVSBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGRpc3RjbGVhbiBkaXN0Y2xlYW4tREVKQUdOVSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0KKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA5NjdjYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2NvbmZpZy9kZWZhdWx0LmV4cApAQCAtMCwwICsxIEBACitsb2FkX2xpYiAic3RhbmRhcmQuZXhwIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzhhMzA2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAKQEAgLTAsMCArMSwzMDAgQEAKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworcHJvYyBsb2FkX2djY19saWIgeyBmaWxlbmFtZSB9IHsKKyAgICBnbG9iYWwgc3JjZGlyCisgICAgbG9hZF9maWxlICRzcmNkaXIvbGliLyRmaWxlbmFtZQorfQorCitsb2FkX2xpYiBkZy5leHAKK2xvYWRfbGliIGxpYmdsb3NzLmV4cAorbG9hZF9nY2NfbGliIHRhcmdldC1saWJwYXRoLmV4cAorbG9hZF9nY2NfbGliIHdyYXBwZXIuZXhwCisKKworIyBEZWZpbmUgbGliZmZpIGNhbGxiYWNrcyBmb3IgZGcuZXhwLgorCitwcm9jIGxpYmZmaS1kZy10ZXN0LTEgeyB0YXJnZXRfY29tcGlsZSBwcm9nIGRvX3doYXQgZXh0cmFfdG9vbF9mbGFncyB9IHsKKworICAgICMgVG8gZ2V0IGFsbCBcbiBpbiBkZy1vdXRwdXQgdGVzdCBzdHJpbmdzIHRvIG1hdGNoIHByaW50ZiBvdXRwdXQKKyAgICAjIGluIGEgc3lzdGVtIHRoYXQgb3V0cHV0cyBpdCBhcyBcMDE1XDAxMiAoaS5lLiBub3QganVzdCBcMDEyKSwgd2UKKyAgICAjIG5lZWQgdG8gY2hhbmdlIGFsbCBcbiBpbnRvIFxyP1xuLiAgQXMgdGhlcmUgaXMgbm8gZGVqYWdudSBmbGFnCisgICAgIyBvciBob29rIHRvIGRvIHRoYXQsIHdlIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQgYmVpbmcgdGVzdGVkLgorICAgICMgVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byBrbm93IHRoYXQgdGhlIHZhcmlhYmxlIGlzIGNhbGxlZAorICAgICMgZGctb3V0cHV0LXRleHQgYW5kIGxpdmVzIGluIHRoZSBjYWxsZXIgb2YgbGliZmZpLWRnLXRlc3QsIHdoaWNoCisgICAgIyBpcyB0d28gY2FsbHMgdXAuICBPdmVycmlkaW5nIHByb2MgZGctb3V0cHV0IHdvdWxkIGJlIGxvbmdlciBhbmQKKyAgICAjIHdvdWxkIG5lY2Vzc2FyaWx5IGhhdmUgdGhlIHNhbWUgYXNzdW1wdGlvbi4KKyAgICB1cHZhciAyIGRnLW91dHB1dC10ZXh0IG91dHB1dF9tYXRjaAorCisgICAgaWYgeyBbbGxlbmd0aCAkb3V0cHV0X21hdGNoXSA+IDEgfSB7CisJcmVnc3ViIC1hbGwgIlxuIiBbbGluZGV4ICRvdXRwdXRfbWF0Y2ggMV0gIlxyP1xuIiB4CisJc2V0IG91dHB1dF9tYXRjaCBbbHJlcGxhY2UgJG91dHB1dF9tYXRjaCAxIDEgJHhdCisgICAgfQorCisgICAgIyBTZXQgdXAgdGhlIGNvbXBpbGVyIGZsYWdzLCBiYXNlZCBvbiB3aGF0IHdlJ3JlIGdvaW5nIHRvIGRvLgorCisgICAgc2V0IG9wdGlvbnMgW2xpc3RdCisgICAgc3dpdGNoICRkb193aGF0IHsKKwkiY29tcGlsZSIgeworCSAgICBzZXQgY29tcGlsZV90eXBlICJhc3NlbWJseSIKKwkgICAgc2V0IG91dHB1dF9maWxlICJbZmlsZSByb290bmFtZSBbZmlsZSB0YWlsICRwcm9nXV0ucyIKKwl9CisJImxpbmsiIHsKKwkgICAgc2V0IGNvbXBpbGVfdHlwZSAiZXhlY3V0YWJsZSIKKwkgICAgc2V0IG91dHB1dF9maWxlICJbZmlsZSByb290bmFtZSBbZmlsZSB0YWlsICRwcm9nXV0uZXhlIgorCSAgICAjIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBuZWVkZWQgZm9yIHRhcmdldHMgbGlrZSB0aGUgaTk2MCB3aGVyZQorCSAgICAjIHRoZSBkZWZhdWx0IG91dHB1dCBmaWxlIGlzIGIub3V0LiAgU2lnaC4KKwl9CisJInJ1biIgeworCSAgICBzZXQgY29tcGlsZV90eXBlICJleGVjdXRhYmxlIgorCSAgICAjIEZJWE1FOiAiLi8iIGlzIHRvIGNvcGUgd2l0aCAiLiIgbm90IGJlaW5nIGluICRQQVRILgorCSAgICAjIFNob3VsZCB0aGlzIGJlIGhhbmRsZWQgZWxzZXdoZXJlPworCSAgICAjIFlFUy4KKwkgICAgc2V0IG91dHB1dF9maWxlICIuL1tmaWxlIHJvb3RuYW1lIFtmaWxlIHRhaWwgJHByb2ddXS5leGUiCisJICAgICMgVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSB3ZSBjYXJlIGlmIGFuIGV4ZWN1dGFibGUgd2FzCisJICAgICMgY3JlYXRlZCBvciBub3QuICBJZiBpdCB3YXMsIGRnLmV4cCB3aWxsIHRyeSB0byBydW4gaXQuCisJICAgIHJlbW90ZV9maWxlIGJ1aWxkIGRlbGV0ZSAkb3V0cHV0X2ZpbGU7CisJfQorCWRlZmF1bHQgeworCSAgICBwZXJyb3IgIiRkb193aGF0OiBub3QgYSB2YWxpZCBkZy1kbyBrZXl3b3JkIgorCSAgICByZXR1cm4gIiIKKwl9CisgICAgfQorCisgICAgaWYgeyAkZXh0cmFfdG9vbF9mbGFncyAhPSAiIiB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9JGV4dHJhX3Rvb2xfZmxhZ3MiCisgICAgfQorCisgICAgc2V0IGNvbXBfb3V0cHV0IFtsaWJmZmlfdGFyZ2V0X2NvbXBpbGUgIiRwcm9nIiAiJG91dHB1dF9maWxlIiAiJGNvbXBpbGVfdHlwZSIgJG9wdGlvbnNdOworCisKKyAgICByZXR1cm4gW2xpc3QgJGNvbXBfb3V0cHV0ICRvdXRwdXRfZmlsZV0KK30KKworCitwcm9jIGxpYmZmaS1kZy10ZXN0IHsgcHJvZyBkb193aGF0IGV4dHJhX3Rvb2xfZmxhZ3MgfSB7CisgICAgcmV0dXJuIFtsaWJmZmktZGctdGVzdC0xIHRhcmdldF9jb21waWxlICRwcm9nICRkb193aGF0ICRleHRyYV90b29sX2ZsYWdzXQorfQorCitwcm9jIGxpYmZmaS1pbml0IHsgYXJncyB9IHsKKyAgICBnbG9iYWwgZ2x1ZWZpbGUgd3JhcF9mbGFnczsKKyAgICBnbG9iYWwgc3JjZGlyCisgICAgZ2xvYmFsIGJsZGRpcmZmaQorICAgIGdsb2JhbCBvYmpkaXIKKyAgICBnbG9iYWwgVE9PTF9PUFRJT05TCisgICAgZ2xvYmFsIHRvb2wKKyAgICBnbG9iYWwgbGliZmZpX2luY2x1ZGUKKyAgICBnbG9iYWwgbGliZmZpX2xpbmtfZmxhZ3MKKyAgICBnbG9iYWwgdG9vbF9yb290X2RpcgorICAgIGdsb2JhbCBsZF9saWJyYXJ5X3BhdGgKKworICAgIHNldCBibGRkaXJmZmkgW3B3ZF0vLi4KKyAgICB2ZXJib3NlICJsaWJmZmkgJGJsZGRpcmZmaSIKKworICAgIHNldCBnY2NkaXIgW2xvb2tmb3JfZmlsZSAkdG9vbF9yb290X2RpciBnY2MvbGliZ2NjLmFdCisgICAgaWYgeyRnY2NkaXIgIT0gIiJ9IHsKKwlzZXQgZ2NjZGlyIFtmaWxlIGRpcm5hbWUgJGdjY2Rpcl0KKyAgICB9CisgICAgdmVyYm9zZSAiZ2NjZGlyICRnY2NkaXIiCisKKyAgICBzZXQgbGRfbGlicmFyeV9wYXRoICIuIgorICAgIGFwcGVuZCBsZF9saWJyYXJ5X3BhdGggIjoke2djY2Rpcn0iCisKKyAgICBzZXQgY29tcGlsZXIgIiR7Z2NjZGlyfS94Z2NjIgorICAgIGlmIHsgW2lzX3JlbW90ZSBob3N0XSA9PSAwICYmIFt3aGljaCAkY29tcGlsZXJdICE9IDAgfSB7CisJZm9yZWFjaCBpICJbZXhlYyAkY29tcGlsZXIgLS1wcmludC1tdWx0aS1saWJdIiB7CisJICAgIHNldCBtbGRpciAiIgorCSAgICByZWdleHAgLS0gIlxbYS16MC05PV8vXC4tXF0qOyIgJGkgbWxkaXIKKwkgICAgc2V0IG1sZGlyIFtzdHJpbmcgdHJpbXJpZ2h0ICRtbGRpciAiXDtAIl0KKwkgICAgaWYgeyAiJG1sZGlyIiA9PSAiLiIgfSB7CisJCWNvbnRpbnVlCisJICAgIH0KKwkgICAgaWYgeyBbbGxlbmd0aCBbZ2xvYiAtbm9jb21wbGFpbiAke2djY2Rpcn0vJHttbGRpcn0vbGliZ2NjX3MqLnNvLipdXSA+PSAxIH0geworCQlhcHBlbmQgbGRfbGlicmFyeV9wYXRoICI6JHtnY2NkaXJ9LyR7bWxkaXJ9IgorCSAgICB9CisJfQorICAgIH0KKyAgICAjIGFkZCB0aGUgbGlicmFyeSBwYXRoIGZvciBsaWJmZmkuCisgICAgYXBwZW5kIGxkX2xpYnJhcnlfcGF0aCAiOiR7YmxkZGlyZmZpfS8ubGlicyIKKworICAgIHZlcmJvc2UgImxkX2xpYnJhcnlfcGF0aDogJGxkX2xpYnJhcnlfcGF0aCIKKworICAgICMgUG9pbnQgdG8gdGhlIExpYmZmaSBoZWFkZXJzIGluIGxpYmZmaS4KKyAgICBzZXQgbGliZmZpX2luY2x1ZGUgIiR7YmxkZGlyZmZpfS9pbmNsdWRlIgorICAgIHZlcmJvc2UgImxpYmZmaV9pbmNsdWRlICRsaWJmZmlfaW5jbHVkZSIKKworICAgIHNldCBsaWJmZmlfZGlyICAiJHtibGRkaXJmZml9Ly5saWJzIgorICAgIHZlcmJvc2UgImxpYmZmaV9kaXIgJGxpYmZmaV9kaXIiCisgICAgaWYgeyAkbGliZmZpX2RpciAhPSAiIiB9IHsKKwlzZXQgbGliZmZpX2RpciBbZmlsZSBkaXJuYW1lICR7bGliZmZpX2Rpcn1dCisJc2V0IGxpYmZmaV9saW5rX2ZsYWdzICItTCR7bGliZmZpX2Rpcn0vLmxpYnMiCisgICAgfQorCisgICAgc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycworICAgIGxpYmZmaV9tYXliZV9idWlsZF93cmFwcGVyICIke29iamRpcn0vdGVzdGdsdWUubyIKK30KKworcHJvYyBsaWJmZmlfZXhpdCB7IH0geworICAgIGdsb2JhbCBnbHVlZmlsZTsKKworICAgIGlmIFtpbmZvIGV4aXN0cyBnbHVlZmlsZV0geworCWZpbGVfb25fYnVpbGQgZGVsZXRlICRnbHVlZmlsZTsKKwl1bnNldCBnbHVlZmlsZTsKKyAgICB9Cit9CisKK3Byb2MgbGliZmZpX3RhcmdldF9jb21waWxlIHsgc291cmNlIGRlc3QgdHlwZSBvcHRpb25zIH0geworICAgIGdsb2JhbCBnbHVlZmlsZSB3cmFwX2ZsYWdzOworICAgIGdsb2JhbCBzcmNkaXIKKyAgICBnbG9iYWwgYmxkZGlyZmZpCisgICAgZ2xvYmFsIFRPT0xfT1BUSU9OUworICAgIGdsb2JhbCBsaWJmZmlfbGlua19mbGFncworICAgIGdsb2JhbCBsaWJmZmlfaW5jbHVkZQorICAgIGdsb2JhbCB0YXJnZXRfdHJpcGxldAorCisKKyAgICBpZiB7IFt0YXJnZXRfaW5mbyBuZWVkc19zdGF0dXNfd3JhcHBlcl0hPSIiICYmIFtpbmZvIGV4aXN0cyBnbHVlZmlsZV0gfSB7CisJbGFwcGVuZCBvcHRpb25zICJsaWJzPSR7Z2x1ZWZpbGV9IgorCWxhcHBlbmQgb3B0aW9ucyAibGRmbGFncz0kd3JhcF9mbGFncyIKKyAgICB9CisKKyAgICAjIFRPT0xfT1BUSU9OUyBtdXN0IGNvbWUgZmlyc3QsIHNvIHRoYXQgaXQgZG9lc24ndCBvdmVycmlkZSB0ZXN0Y2FzZQorICAgICMgc3BlY2lmaWMgb3B0aW9ucy4KKyAgICBpZiBbaW5mbyBleGlzdHMgVE9PTF9PUFRJT05TXSB7CisJbGFwcGVuZCAgb3B0aW9ucyBbY29uY2F0ICJhZGRpdGlvbmFsX2ZsYWdzPSRUT09MX09QVElPTlMiICRvcHRpb25zXTsKKyAgICB9CisKKyAgICAjIHNlYXJjaCBmb3IgZmZpX21pcHMuaCBpbiBzcmNkaXIsIHRvbworICAgIGxhcHBlbmQgb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0tSSR7bGliZmZpX2luY2x1ZGV9IC1JJHtzcmNkaXJ9Ly4uL2luY2x1ZGUgIC1JJHtsaWJmZmlfaW5jbHVkZX0vLi4iCisgICAgbGFwcGVuZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPSR7bGliZmZpX2xpbmtfZmxhZ3N9IgorCisgICAgIyBEYXJ3aW4gbmVlZHMgYSBzdGFjayBleGVjdXRpb24gYWxsb3dlZCBmbGFnLgorCisgICAgaWYgeyBbaXN0YXJnZXQgIiotKi1kYXJ3aW45KiJdIHx8IFtpc3RhcmdldCAiKi0qLWRhcndpbjEqIl0KKwkgfHwgW2lzdGFyZ2V0ICIqLSotZGFyd2luMioiXSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9LVdsLC1hbGxvd19zdGFja19leGVjdXRlIgorICAgIH0KKworICAgICMgSWYgeW91J3JlIGJ1aWxkaW5nIHRoZSBjb21waWxlciB3aXRoIC0tcHJlZml4IHNldCB0byBhIHBsYWNlCisgICAgIyB3aGVyZSBpdCdzIG5vdCB5ZXQgaW5zdGFsbGVkLCB0aGVuIHRoZSBsaW5rZXIgd29uJ3QgYmUgYWJsZSB0bworICAgICMgZmluZCB0aGUgbGliZ2NjIHVzZWQgYnkgbGliZmZpLmR5bGliLiAgV2UgY291bGQgcGFzcyB0aGUKKyAgICAjIC1keWxpYl9maWxlIG9wdGlvbiwgYnV0IHRoYXQncyBjb21wbGljYXRlZCwgYW5kIGl0J3MgbXVjaCBlYXNpZXIKKyAgICAjIHRvIGp1c3QgbWFrZSB0aGUgbGlua2VyIGZpbmQgbGliZ2NjIHVzaW5nIC1MIG9wdGlvbnMuCisgICAgaWYgeyBbc3RyaW5nIG1hdGNoICIqLSotZGFyd2luKiIgJHRhcmdldF90cmlwbGV0XSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImxpYnM9IC1zaGFyZWQtbGliZ2NjIgorICAgIH0KKworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKi0qLW9wZW5ic2QqIiAkdGFyZ2V0X3RyaXBsZXRdIH0geworCWxhcHBlbmQgb3B0aW9ucyAibGlicz0gLWxwdGhyZWFkIgorICAgIH0KKworICAgIGxhcHBlbmQgb3B0aW9ucyAibGlicz0gLWxmZmkiCisKKyAgICB2ZXJib3NlICJvcHRpb25zOiAkb3B0aW9ucyIKKyAgICByZXR1cm4gW3RhcmdldF9jb21waWxlICRzb3VyY2UgJGRlc3QgJHR5cGUgJG9wdGlvbnNdCit9CisKKyMgVXRpbGl0eSByb3V0aW5lcy4KKworIworIyBzZWFyY2hfZm9yIC0tIGxvb2tzIGZvciBhIHN0cmluZyBtYXRjaCBpbiBhIGZpbGUKKyMKK3Byb2Mgc2VhcmNoX2ZvciB7IGZpbGUgcGF0dGVybiB9IHsKKyAgICBzZXQgZmQgW29wZW4gJGZpbGUgcl0KKyAgICB3aGlsZSB7IFtnZXRzICRmZCBjdXJfbGluZV0+PTAgfSB7CisJaWYgW3N0cmluZyBtYXRjaCAiKiRwYXR0ZXJuKiIgJGN1cl9saW5lXSB0aGVuIHsKKwkgICAgY2xvc2UgJGZkCisJICAgIHJldHVybiAxCisJfQorICAgIH0KKyAgICBjbG9zZSAkZmQKKyAgICByZXR1cm4gMAorfQorCisjIE1vZGlmaWVkIGRnLXJ1bnRlc3QgdGhhdCBjYW4gY3ljbGUgdGhyb3VnaCBhIGxpc3Qgb2Ygb3B0aW1pemF0aW9uIG9wdGlvbnMKKyMgYXMgYy10b3J0dXJlIGRvZXMuCitwcm9jIGxpYmZmaS1kZy1ydW50ZXN0IHsgdGVzdGNhc2VzIGRlZmF1bHQtZXh0cmEtZmxhZ3MgfSB7CisgICAgZ2xvYmFsIHJ1bnRlc3RzCisKKyAgICBmb3JlYWNoIHRlc3QgJHRlc3RjYXNlcyB7CisJIyBJZiB3ZSdyZSBvbmx5IHRlc3Rpbmcgc3BlY2lmaWMgZmlsZXMgYW5kIHRoaXMgaXNuJ3Qgb25lIG9mCisJIyB0aGVtLCBza2lwIGl0LgorCWlmICFbcnVudGVzdF9maWxlX3AgJHJ1bnRlc3RzICR0ZXN0XSB7CisJICAgIGNvbnRpbnVlCisJfQorCisJIyBMb29rIGZvciBhIGxvb3Agd2l0aGluIHRoZSBzb3VyY2UgY29kZSAtIGlmIHdlIGRvbid0IGZpbmQgb25lLAorCSMgZG9uJ3QgcGFzcyAtZnVucm9sbFstYWxsXS1sb29wcy4KKwlnbG9iYWwgdG9ydHVyZV93aXRoX2xvb3BzIHRvcnR1cmVfd2l0aG91dF9sb29wcworCWlmIFtleHByIFtzZWFyY2hfZm9yICR0ZXN0ICJmb3IqKCJdK1tzZWFyY2hfZm9yICR0ZXN0ICJ3aGlsZSooIl1dIHsKKwkgICAgc2V0IG9wdGlvbl9saXN0ICR0b3J0dXJlX3dpdGhfbG9vcHMKKwl9IGVsc2UgeworCSAgICBzZXQgb3B0aW9uX2xpc3QgJHRvcnR1cmVfd2l0aG91dF9sb29wcworCX0KKworCXNldCBuc2hvcnQgW2ZpbGUgdGFpbCBbZmlsZSBkaXJuYW1lICR0ZXN0XV0vW2ZpbGUgdGFpbCAkdGVzdF0KKworCWZvcmVhY2ggZmxhZ3MgJG9wdGlvbl9saXN0IHsKKwkgICAgdmVyYm9zZSAiVGVzdGluZyAkbnNob3J0LCAkZmxhZ3MiIDEKKwkgICAgZGctdGVzdCAkdGVzdCAkZmxhZ3MgJHtkZWZhdWx0LWV4dHJhLWZsYWdzfQorCX0KKyAgICB9Cit9CisKKworIyBMaWtlIGNoZWNrX2NvbmRpdGlvbmFsX3hmYWlsLCBidXQgY2FsbGFibGUgZnJvbSBhIGRnIHRlc3QuCisKK3Byb2MgZGcteGZhaWwtaWYgeyBhcmdzIH0geworICAgIHNldCBhcmdzIFtscmVwbGFjZSAkYXJncyAwIDBdCisgICAgc2V0IHNlbGVjdG9yICJ0YXJnZXQgW2pvaW4gW2xpbmRleCAkYXJncyAxXV0iCisgICAgaWYgeyBbZGctcHJvY2Vzcy10YXJnZXQgJHNlbGVjdG9yXSA9PSAiUyIgfSB7CisJZ2xvYmFsIGNvbXBpbGVyX2NvbmRpdGlvbmFsX3hmYWlsX2RhdGEKKwlzZXQgY29tcGlsZXJfY29uZGl0aW9uYWxfeGZhaWxfZGF0YSAkYXJncworICAgIH0KK30KKworCisjIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYWRkaXRpb25hbF9maWxlcyBhbmQgYWRkaXRpb25hbF9zb3VyY2VzCisjIGFyZSBib3RoIGNsZWFyZWQgb3V0IGFmdGVyIGV2ZXJ5IHRlc3QuICBJdCBpcyBub3QgZW5vdWdoIHRvIGNsZWFyCisjIHRoZW0gb3V0ICpiZWZvcmUqIHRoZSBuZXh0IHRlc3QgcnVuIGJlY2F1c2UgZ2NjLXRhcmdldC1jb21waWxlIGdldHMKKyMgcnVuIGRpcmVjdGx5IGZyb20gc29tZSAuZXhwIGZpbGVzIChvdXRzaWRlIG9mIGFueSB0ZXN0KS4gIChUaG9zZQorIyB1c2VzIHNob3VsZCBldmVudHVhbGx5IGJlIGVsaW1pbmF0ZWQuKQorCisjIEJlY2F1c2UgdGhlIERHIGZyYW1ld29yayBkb2Vzbid0IHByb3ZpZGUgYSBob29rIHRoYXQgaXMgcnVuIGF0IHRoZQorIyBlbmQgb2YgYSB0ZXN0LCB3ZSBtdXN0IHJlcGxhY2UgZGctdGVzdCB3aXRoIGEgd3JhcHBlci4KKworaWYgeyBbaW5mbyBwcm9jcyBzYXZlZC1kZy10ZXN0XSA9PSBbbGlzdF0gfSB7CisgICAgcmVuYW1lIGRnLXRlc3Qgc2F2ZWQtZGctdGVzdAorCisgICAgcHJvYyBkZy10ZXN0IHsgYXJncyB9IHsKKwlnbG9iYWwgYWRkaXRpb25hbF9maWxlcworCWdsb2JhbCBhZGRpdGlvbmFsX3NvdXJjZXMKKwlnbG9iYWwgZXJyb3JJbmZvCisKKwlpZiB7IFsgY2F0Y2ggeyBldmFsIHNhdmVkLWRnLXRlc3QgJGFyZ3MgfSBlcnJtc2cgXSB9IHsKKwkgICAgc2V0IHNhdmVkX2luZm8gJGVycm9ySW5mbworCSAgICBzZXQgYWRkaXRpb25hbF9maWxlcyAiIgorCSAgICBzZXQgYWRkaXRpb25hbF9zb3VyY2VzICIiCisJICAgIGVycm9yICRlcnJtc2cgJHNhdmVkX2luZm8KKwl9CisJc2V0IGFkZGl0aW9uYWxfZmlsZXMgIiIKKwlzZXQgYWRkaXRpb25hbF9zb3VyY2VzICIiCisgICAgfQorfQorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgdGNsLWluZGVudC1sZXZlbDo0CisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTlhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwCkBAIC0wLDAgKzEsMjYzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIHdhcyBjb250cmlidXRlZCBieSBKb2huIERhdmlkIEFuZ2xpbiAoZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2EpCisKK3NldCBvcmlnX2Vudmlyb25tZW50X3NhdmVkIDAKK3NldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCAwCitzZXQgb3JpZ19sZF9ydW5fcGF0aF9zYXZlZCAwCitzZXQgb3JpZ19zaGxpYl9wYXRoX3NhdmVkIDAKK3NldCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZCAwCitzZXQgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZCAwCitzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQgMAorc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkIDAKK3NldCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkIDAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgcHJvYyBzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzIHsgfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2Mgc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyB7IH0geworICBnbG9iYWwgbGRfbGlicmFyeV9wYXRoCisgIGdsb2JhbCBvcmlnX2Vudmlyb25tZW50X3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9ydW5fcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19zaGxpYl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkCisgIGdsb2JhbCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9ydW5fcGF0aAorICBnbG9iYWwgb3JpZ19zaGxpYl9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzIKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0CisgIGdsb2JhbCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoCisgIGdsb2JhbCBHQ0NfRVhFQ19QUkVGSVgKKworICAjIFNldCB0aGUgcmVsb2NhdGVkIGNvbXBpbGVyIHByZWZpeCwgYnV0IG9ubHkgaWYgdGhlIHVzZXIgaGFzbid0IHNwZWNpZmllZCBvbmUuCisgIGlmIHsgW2luZm8gZXhpc3RzIEdDQ19FWEVDX1BSRUZJWF0gJiYgIVtpbmZvIGV4aXN0cyBlbnYoR0NDX0VYRUNfUFJFRklYKV0gfSB7CisgICAgc2V0ZW52IEdDQ19FWEVDX1BSRUZJWCAiJEdDQ19FWEVDX1BSRUZJWCIKKyAgfQorCisgICMgU2V0dGluZyB0aGUgbGQgbGlicmFyeSBwYXRoIGNhdXNlcyB0cm91YmxlIHdoZW4gdGVzdGluZyBjcm9zcy1jb21waWxlcnMuCisgIGlmIHsgW2lzX3JlbW90ZSB0YXJnZXRdIH0geworICAgIHJldHVybgorICB9CisKKyAgaWYgeyAkb3JpZ19lbnZpcm9ubWVudF9zYXZlZCA9PSAwIH0geworICAgIGdsb2JhbCBlbnYKKworICAgIHNldCBvcmlnX2Vudmlyb25tZW50X3NhdmVkIDEKKworICAgICMgU2F2ZSB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQuCisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGggIiRlbnYoTERfTElCUkFSWV9QQVRIKSIKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfUlVOX1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19sZF9ydW5fcGF0aCAiJGVudihMRF9SVU5fUEFUSCkiCisgICAgICBzZXQgb3JpZ19sZF9ydW5fcGF0aF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoU0hMSUJfUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX3NobGliX3BhdGggIiRlbnYoU0hMSUJfUEFUSCkiCisgICAgICBzZXQgb3JpZ19zaGxpYl9wYXRoX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZTjMyX1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGggIiRlbnYoTERfTElCUkFSWU4zMl9QQVRIKSIKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWTY0X1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aCAiJGVudihMRF9MSUJSQVJZNjRfUEFUSCkiCisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIXzMyKV0geworICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyICIkZW52KExEX0xJQlJBUllfUEFUSF8zMikiCisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSF82NCldIHsKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NCAiJGVudihMRF9MSUJSQVJZX1BBVEhfNjQpIgorICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihEWUxEX0xJQlJBUllfUEFUSCldIHsKKyAgICAgIHNldCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoICIkZW52KERZTERfTElCUkFSWV9QQVRIKSIKKyAgICAgIHNldCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkIDEKKyAgICB9CisgIH0KKworICAjIFdlIG5lZWQgdG8gc2V0IGxkIGxpYnJhcnkgcGF0aCBpbiB0aGUgZW52aXJvbm1lbnQuICBDdXJyZW50bHksCisgICMgdW5peC5leHAgZG9lc24ndCBzZXQgdGhlIGVudmlyb25tZW50IGNvcnJlY3RseSBmb3IgYWxsIHN5c3RlbXMuCisgICMgSXQgb25seSBzZXRzIFNITElCX1BBVEggYW5kIExEX0xJQlJBUllfUEFUSCB3aGVuIGl0IGV4ZWN1dGVzIGEKKyAgIyBwcm9ncmFtLiAgV2UgYWxzbyBuZWVkIHRoZSBlbnZpcm9ubWVudCBzZXQgZm9yIGNvbXBpbGF0aW9ucywgZXRjLgorICAjCisgICMgT24gSVJJWCA2LCB3ZSBoYXZlIHRvIHNldCB2YXJpYWJsZXMgYWtpbiB0byBMRF9MSUJSQVJZX1BBVEgsIGJ1dAorICAjIGNhbGxlZCBMRF9MSUJSQVJZTjMyX1BBVEggKGZvciB0aGUgTjMyIEFCSSkgYW5kIExEX0xJQlJBUlk2NF9QQVRICisgICMgKGZvciB0aGUgNjQtYml0IEFCSSkuICBUaGUgc2FtZSBhcHBsaWVzIHRvIERhcndpbiAoRFlMRF9MSUJSQVJZX1BBVEgpLAorICAjIFNvbGFyaXMgMzIgYml0IChMRF9MSUJSQVJZX1BBVEhfMzIpLCBTb2xhcmlzIDY0IGJpdCAoTERfTElCUkFSWV9QQVRIXzY0KSwKKyAgIyBhbmQgSFAtVVggKFNITElCX1BBVEgpLiAgSW4gc29tZSBjYXNlcywgdGhlIHZhcmlhYmxlcyBhcmUgaW5kZXBlbmRlbnQKKyAgIyBvZiBMRF9MSUJSQVJZX1BBVEgsIGFuZCBpbiBvdGhlciBjYXNlcyBMRF9MSUJSQVJZX1BBVEggaXMgdXNlZCBpZiB0aGUKKyAgIyB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZC4KKyAgIworICAjIERvaW5nIHRoaXMgaXMgc29tZXdoYXQgb2YgYSBoYWNrIGFzIGxkX2xpYnJhcnlfcGF0aCBnZXRzIHJlcGVhdGVkIGluCisgICMgU0hMSUJfUEFUSCBhbmQgTERfTElCUkFSWV9QQVRIIHdoZW4gdW5peF9sb2FkIHNldHMgdGhlc2UgdmFyaWFibGVzLgorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX1JVTl9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX3J1bl9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9SVU5fUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICAjIFRoZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGR5bmFtaWMgcGF0aCBzZWFyY2ggZm9yIDY0LWJpdAorICAjIEhQLVVYIGV4ZWN1dGFibGVzIHNlYXJjaGVzIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgU0hMSUJfUEFUSC4KKyAgIyBMRF9MSUJSQVJZX1BBVEggaXNuJ3QgdXNlZCBmb3IgMzItYml0IGV4ZWN1dGFibGVzLiAgVGh1cywgd2UKKyAgIyBzZXQgTERfTElCUkFSWV9QQVRIIGFuZCBTSExJQl9QQVRIIGFzIGlmIHRoZXkgd2VyZSBpbmRlcGVuZGVudC4KKyAgaWYgeyAkb3JpZ19zaGxpYl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBTSExJQl9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX3NobGliX3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IFNITElCX1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllOMzJfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGgiCisgIH0gZWxzZWlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZTjMyX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9MSUJSQVJZTjMyX1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWTY0X1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeTY0X3BhdGgiCisgIH0gZWxzZWlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZNjRfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX0xJQlJBUlk2NF9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfMzIgIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyIgorICB9IGVsc2VpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzMyICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzMyICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfNjQgIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0IgorICB9IGVsc2VpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzY0ICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzY0ICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IERZTERfTElCUkFSWV9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2R5bGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBEWUxEX0xJQlJBUllfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorCisgIHZlcmJvc2UgLWxvZyAic2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFyczogbGRfbGlicmFyeV9wYXRoPSRsZF9saWJyYXJ5X3BhdGgiCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBwcm9jIHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzIHsgfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2MgcmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMgeyB9IHsKKyAgZ2xvYmFsIG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX3J1bl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX3NobGliX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfZHlsZF9saWJyYXJ5X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX3J1bl9wYXRoCisgIGdsb2JhbCBvcmlnX3NobGliX3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnk2NF9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMgorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjQKKyAgZ2xvYmFsIG9yaWdfZHlsZF9saWJyYXJ5X3BhdGgKKworICBpZiB7ICRvcmlnX2Vudmlyb25tZW50X3NhdmVkID09IDAgfSB7CisgICAgcmV0dXJuCisgIH0KKworICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIICIkb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIKV0geworICAgIHVuc2V0ZW52IExEX0xJQlJBUllfUEFUSAorICB9CisgIGlmIHsgJG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX1JVTl9QQVRIICIkb3JpZ19sZF9ydW5fcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9SVU5fUEFUSCldIHsKKyAgICB1bnNldGVudiBMRF9SVU5fUEFUSAorICB9CisgIGlmIHsgJG9yaWdfc2hsaWJfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgU0hMSUJfUEFUSCAiJG9yaWdfc2hsaWJfcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihTSExJQl9QQVRIKV0geworICAgIHVuc2V0ZW52IFNITElCX1BBVEgKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWU4zMl9QQVRIICIkb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWU4zMl9QQVRIKV0geworICAgIHVuc2V0ZW52IExEX0xJQlJBUllOMzJfUEFUSAorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUlk2NF9QQVRIICIkb3JpZ19sZF9saWJyYXJ5NjRfcGF0aCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZNjRfUEFUSCldIHsKKyAgICB1bnNldGVudiBMRF9MSUJSQVJZNjRfUEFUSAorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfMzIgIiRvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMiIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEhfMzIpXSB7CisgICAgdW5zZXRlbnYgTERfTElCUkFSWV9QQVRIXzMyCisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjRfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF82NCAiJG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0IgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSF82NCldIHsKKyAgICB1bnNldGVudiBMRF9MSUJSQVJZX1BBVEhfNjQKKyAgfQorICBpZiB7ICRvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBEWUxEX0xJQlJBUllfUEFUSCAiJG9yaWdfZHlsZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoRFlMRF9MSUJSQVJZX1BBVEgpXSB7CisgICAgdW5zZXRlbnYgRFlMRF9MSUJSQVJZX1BBVEgKKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgcHJvYyBnZXRfc2hsaWJfZXh0ZW5zaW9uIHsgfQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2MgZ2V0X3NobGliX2V4dGVuc2lvbiB7IH0geworICAgIGdsb2JhbCBzaGxpYl9leHQKKworICAgIGlmIHsgWyBpc3RhcmdldCAqLSotZGFyd2luKiBdIH0geworCXNldCBzaGxpYl9leHQgImR5bGliIgorICAgIH0gZWxzZWlmIHsgWyBpc3RhcmdldCAqLSotY3lnd2luKiBdIHx8IFsgaXN0YXJnZXQgKi0qLW1pbmd3KiBdIH0geworCXNldCBzaGxpYl9leHQgImRsbCIKKyAgICB9IGVsc2VpZiB7IFsgaXN0YXJnZXQgaHBwYSotKi1ocHV4KiBdIH0geworCXNldCBzaGxpYl9leHQgInNsIgorICAgIH0gZWxzZSB7CisJc2V0IHNobGliX2V4dCAic28iCisgICAgfQorICAgIHJldHVybiAkc2hsaWJfZXh0Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi93cmFwcGVyLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi93cmFwcGVyLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTVhZTQzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3dyYXBwZXIuZXhwCkBAIC0wLDAgKzEsNDUgQEAKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgVGhpcyBmaWxlIGNvbnRhaW5zIEdDQy1zcGVjaWZpY3MgZm9yIHN0YXR1cyB3cmFwcGVycyBmb3IgdGVzdCBwcm9ncmFtcy4KKworIyAke3Rvb2x9X21heWJlX2J1aWxkX3dyYXBwZXIgLS0gQnVpbGQgd3JhcHBlciBvYmplY3QgaWYgdGhlIHRhcmdldAorIyBuZWVkcyBpdC4gIEZJTEVOQU1FIGlzIHRoZSBwYXRoIHRvIHRoZSB3cmFwcGVyIGZpbGUuICBJZiB0aGVyZSBhcmUKKyMgYWRkaXRpb25hbCBhcmd1bWVudHMsIHRoZXkgYXJlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRvIHByb3ZpZGUgdG8KKyMgdGhlIGNvbXBpbGVyIHdoZW4gY29tcGlsaW5nIEZJTEVOQU1FLgorCitwcm9jICR7dG9vbH1fbWF5YmVfYnVpbGRfd3JhcHBlciB7IGZpbGVuYW1lIGFyZ3MgfSB7CisgICAgZ2xvYmFsIGdsdWVmaWxlIHdyYXBfZmxhZ3MKKworICAgIGlmIHsgW3RhcmdldF9pbmZvIG5lZWRzX3N0YXR1c193cmFwcGVyXSAhPSAiIiBcCisgCSAmJiBbdGFyZ2V0X2luZm8gbmVlZHNfc3RhdHVzX3dyYXBwZXJdICE9ICIwIiBcCisJICYmICFbaW5mbyBleGlzdHMgZ2x1ZWZpbGVdIH0geworCXNldCBzYXZlZF93cmFwX2NvbXBpbGVfZmxhZ3MgW3RhcmdldF9pbmZvIHdyYXBfY29tcGlsZV9mbGFnc10KKwlzZXQgZmxhZ3MgW2pvaW4gJGFyZ3MgIiAiXQorCSMgVGhlIHdyYXBwZXIgY29kZSBtYXkgY29udGFpbiBjb2RlIHRoYXQgZ2NjIG9iamVjdHMgb24uICBUaGlzCisJIyBiZWNhbWUgdHJ1ZSBmb3IgZGVqYWdudS0xLjQuNC4gIFRoZSBzZXQgb2Ygd2FybmluZ3MgYW5kIGNvZGUKKwkjIHRoYXQgZ2NjIG9iamVjdHMgb24gbWF5IGNoYW5nZSwgc28ganVzdCBtYWtlIHN1cmUgLXcgaXMgYWx3YXlzCisJIyBwYXNzZWQgdG8gdHVybiBvZmYgYWxsIHdhcm5pbmdzLgorCXNldF9jdXJydGFyZ2V0X2luZm8gd3JhcF9jb21waWxlX2ZsYWdzIFwKKwkgICAgIiRzYXZlZF93cmFwX2NvbXBpbGVfZmxhZ3MgLXcgJGZsYWdzIgorCXNldCByZXN1bHQgW2J1aWxkX3dyYXBwZXIgJGZpbGVuYW1lXQorCXNldF9jdXJydGFyZ2V0X2luZm8gd3JhcF9jb21waWxlX2ZsYWdzICIkc2F2ZWRfd3JhcF9jb21waWxlX2ZsYWdzIgorCWlmIHsgJHJlc3VsdCAhPSAiIiB9IHsKKwkgICAgc2V0IGdsdWVmaWxlIFtsaW5kZXggJHJlc3VsdCAwXQorCSAgICBzZXQgd3JhcF9mbGFncyBbbGluZGV4ICRyZXN1bHQgMV0KKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTk5ODVlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAKQEAgLTAsMCArMSwzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIGxpYmZmaSB0ZXN0c3VpdGUgdGhhdCB1c2VzIHRoZSAnZGcuZXhwJyBkcml2ZXIuCisKK2xvYWRfbGliIGxpYmZmaS1kZy5leHAKKworZGctaW5pdAorbGliZmZpLWluaXQKKworZ2xvYmFsIHNyY2RpciBzdWJkaXIKKworZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMCAtVyAtV2FsbCIgIiIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzIiICIiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8zIiAiIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PcyIgIiIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiICIiCisKK2RnLWZpbmlzaAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgdGNsLWluZGVudC1sZXZlbDo0CisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzlmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3RfZm4wKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdKSArIChpbnQpKihpbnQgKilhcmdzWzNdICsKKyAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1s2XSArIChpbnQpKCooaW50ICopYXJnc1s3XSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSkgKyAoaW50KSooaW50ICopYXJnc1s5XSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzE0XSkgKyAgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSksCisJIChpbnQpKihpbnQgKilhcmdzWzNdLCAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0pLAorCSAoaW50KSooaW50ICopYXJnc1s2XSwgKGludCkoKihpbnQgKilhcmdzWzddKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJIChpbnQpKCooaW50ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooaW50ICopYXJnc1sxM10pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwqKGludCAqKWFyZ3NbMTVdLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMCkodW5zaWduZWQgbG9uZyBsb25nLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIGludCwgc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBsb25nIGxvbmcsIGludCwKKwkJCQkgIGludCwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQsIGludCwgaW50LAorCQkJCSAgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKiBjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkpCisgICAgKDFMTCwgMiwgM0xMLCA0LCAxMjcsIDQyOUxMLCA3LCA4LCA5LjUsIDEwLCAxMSwgMTIsIDEzLAorICAgICAxOSwgMjEsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNDI5IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogNjgwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY4MCIgfSAqLworICAgICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyMzE3MwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMKQEAgLTAsMCArMSw4MSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsLgorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKKworc3RhdGljIHZvaWQgY2xvc3VyZV90ZXN0X2ZuMShmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0gKyhpbnQpKCooZmxvYXQgKilhcmdzWzFdKSArCisgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pICsgKGludCkqKGZsb2F0ICopYXJnc1szXSArCisgICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzVdKSArCisgICAgKGludCkqKGZsb2F0ICopYXJnc1s2XSArIChpbnQpKCooaW50ICopYXJnc1s3XSkgKworICAgIChpbnQpKCooZG91YmxlKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooaW50ICopYXJnc1sxM10pICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0sIChpbnQpKCooZmxvYXQgKilhcmdzWzFdKSwKKwkgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pLCAoaW50KSooZmxvYXQgKilhcmdzWzNdLAorCSAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSksCisJIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1s4XSksIChpbnQpKihpbnQgKilhcmdzWzldLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzE0XSksICooaW50ICopYXJnc1sxNV0sCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMSkoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIHNpZ25lZCBzaG9ydCwKKwkJCQkgIGZsb2F0LCBmbG9hdCwgaW50LCBkb3VibGUsIGludCwgaW50LCBmbG9hdCwKKwkJCQkgIGludCwgaW50LCBpbnQsIGludCk7CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTEpY29kZSkpCisgICAgKDEuMSwgMi4yLCAzLjMsIDQuNCwgMTI3LCA1LjUsIDYuNiwgOCwgOSwgMTAsIDExLCAxMi4wLCAxMywKKyAgICAgMTksIDIxLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDUgNiA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU1IiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGZmOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwpAQCAtMCwwICsxLDgxIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbG9zdXJlX3Rlc3RfZm4yKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKGRvdWJsZSAqKWFyZ3NbMF0gKyhpbnQpKCooZG91YmxlICopYXJnc1sxXSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1syXSkgKyAoaW50KSooZG91YmxlICopYXJnc1szXSArCisgICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSArIChpbnQpKCooZG91YmxlICopYXJnc1s1XSkgKworICAgIChpbnQpKihkb3VibGUgKilhcmdzWzZdICsgKGludCkoKihpbnQgKilhcmdzWzddKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooZmxvYXQgKilhcmdzWzEzXSkgKworICAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pICsgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKGRvdWJsZSAqKWFyZ3NbMF0sIChpbnQpKCooZG91YmxlICopYXJnc1sxXSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1syXSksIChpbnQpKihkb3VibGUgKilhcmdzWzNdLAorCSAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pLCAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbNV0pLAorCSAoaW50KSooZG91YmxlICopYXJnc1s2XSwgKGludCkoKihpbnQgKilhcmdzWzddKSwKKwkgKGludCkoKihkb3VibGUqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTNdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzE0XSksICooaW50ICopYXJnc1sxNV0sIChpbnQpKGludHB0cl90KXVzZXJkYXRhLAorCSAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMikoZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBzaWduZWQgc2hvcnQsCisJCQkJICBkb3VibGUsIGRvdWJsZSwgaW50LCBkb3VibGUsIGludCwgaW50LCBmbG9hdCwKKwkJCQkgIGludCwgZmxvYXQsIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUyKWNvZGUpKQorICAgICgxLCAyLCAzLCA0LCAxMjcsIDUsIDYsIDgsIDksIDEwLCAxMSwgMTIuMCwgMTMsCisgICAgIDE5LjAsIDIxLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDUgNiA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU1IiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU0ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYwpAQCAtMCwwICsxLDgyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbG9zdXJlX3Rlc3RfZm4zKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgdm9pZCogdXNlcmRhdGEpCisgeworICAgKihmZmlfYXJnKilyZXNwID0KKyAgICAgKGludCkqKGZsb2F0ICopYXJnc1swXSArKGludCkoKihmbG9hdCAqKWFyZ3NbMV0pICsKKyAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pICsgKGludCkqKGZsb2F0ICopYXJnc1szXSArCisgICAgIChpbnQpKCooZmxvYXQgKilhcmdzWzRdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzVdKSArCisgICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0gKyAoaW50KSgqKGZsb2F0ICopYXJnc1s3XSkgKworICAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgICAoaW50KSgqKGZsb2F0ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgIChpbnQpKihpbnQgKilhcmdzWzEyXSArIChpbnQpKCooZmxvYXQgKilhcmdzWzEzXSkgKworICAgICAoaW50KSgqKGZsb2F0ICopYXJnc1sxNF0pICsgICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAgKGludCkqKGZsb2F0ICopYXJnc1swXSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMV0pLAorCSAgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pLCAoaW50KSooZmxvYXQgKilhcmdzWzNdLAorCSAgKGludCkoKihmbG9hdCAqKWFyZ3NbNF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSksCisJICAoaW50KSooZmxvYXQgKilhcmdzWzZdLCAoaW50KSgqKGZsb2F0ICopYXJnc1s3XSksCisJICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgIChpbnQpKCooZmxvYXQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJICAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooZmxvYXQgKilhcmdzWzEzXSksCisJICAoaW50KSgqKGZsb2F0ICopYXJnc1sxNF0pLCAqKGludCAqKWFyZ3NbMTVdLCAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwKKwkgIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKKyB9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUzKShmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LAorCQkJCSAgZmxvYXQsIGZsb2F0LCBkb3VibGUsIGludCwgZmxvYXQsIGZsb2F0LCBpbnQsCisJCQkJICBmbG9hdCwgZmxvYXQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMyljb2RlKSkKKyAgICAoMS4xLCAyLjIsIDMuMywgNC40LCA1LjUsIDYuNiwgNy43LCA4LjgsIDksIDEwLCAxMS4xMSwgMTIuMCwgMTMsCisgICAgIDE5LjE5LCAyMS4yMSwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDEzNSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzUiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YTE1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgbG9uZyBsb25nIHZhbHVlcyBwYXNzaW5nLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTAyNgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0X2ZuMChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzFdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzNdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s0XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s2XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzddICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s4XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzldICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMF0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzExXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTJdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxM10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzE0XSArCisgICAgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzFdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbM10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzRdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzddLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s4XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEwXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTFdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEzXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTRdLAorCSAqKGludCAqKWFyZ3NbMTVdLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMCkodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgaSwgcmVzOworCisgIGZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKSB7CisgICAgY2xfYXJnX3R5cGVzW2ldID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgfQorICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKQorICAgICgxTEwsIDJMTCwgM0xMLCA0TEwsIDEyN0xMLCA0MjlMTCwgN0xMLCA4TEwsIDlMTCwgMTBMTCwgMTFMTCwgMTJMTCwKKyAgICAgMTNMTCwgMTlMTCwgMjFMTCwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA0MjkgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiA2ODAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjgwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDc0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgbG9uZyBsb25nIHZhbHVlcyBwYXNzaW5nLgorCQlFeGNlZWQgdGhlIGxpbWl0IG9mIGdwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzEwMjYJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3RfZm41KGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbM10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzRdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzZdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbN10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzhdICsgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOV0gKworICAgIChpbnQpKihpbnQgKilhcmdzWzEwXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTFdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMl0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEzXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTRdICsKKyAgICAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1szXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s2XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbN10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzhdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s5XSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTBdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEyXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTNdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxNF0sCisJICooaW50ICopYXJnc1sxNV0sCisJIChpbnQpKGludHB0cl90KXVzZXJkYXRhLCAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUwKSh1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCBpLCByZXM7CisKKyAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBjbF9hcmdfdHlwZXNbaV0gPSAmZmZpX3R5cGVfdWludDY0OworICB9CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgZm9yIChpID0gMTE7IGkgPCAxNTsgaSsrKSB7CisgICAgY2xfYXJnX3R5cGVzW2ldID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgfQorICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKQorICAgICgxTEwsIDJMTCwgM0xMLCA0TEwsIDEyN0xMLCA0MjlMTCwgN0xMLCA4TEwsIDlMTCwgMTBMTCwgMTEsIDEyTEwsCisgICAgIDEzTEwsIDE5TEwsIDIxTEwsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNDI5IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogNjgwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY4MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M1NGZkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIyMzQwNAorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDgzMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdF9mbjAoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0gKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxXSkgKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSkgKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzNdICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbNF0pICsgKGludCkoKihkb3VibGUgKilhcmdzWzVdKSArCisgICAgKGludCkqKGRvdWJsZSAqKWFyZ3NbNl0gKyAoaW50KSgqKGZsb2F0ICopYXJnc1s3XSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSkgKyAoaW50KSooZG91YmxlICopYXJnc1s5XSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgKGludCkoKihkb3VibGUgKilhcmdzWzE0XSkgKyAgKGludCkqKGRvdWJsZSAqKWFyZ3NbMTVdICsKKyAgICAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgICopYXJnc1swXSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgICopYXJnc1sxXSksCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICAqKWFyZ3NbMl0pLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICAqKWFyZ3NbM10sCisJIChpbnQpKCooaW50ICopYXJnc1s0XSksIChpbnQpKCooZG91YmxlICopYXJnc1s1XSksCisJIChpbnQpKihkb3VibGUgKilhcmdzWzZdLCAoaW50KSgqKGZsb2F0ICopYXJnc1s3XSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1s4XSksIChpbnQpKihkb3VibGUgKilhcmdzWzldLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzE0XSksIChpbnQpKCooZG91YmxlICopYXJnc1sxNV0pLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMCkodW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgaW50LCBkb3VibGUsIGRvdWJsZSwgZmxvYXQsIGRvdWJsZSwgZG91YmxlLAorCQkJCSAgaW50LCBmbG9hdCwgaW50LCBpbnQsIGRvdWJsZSwgZG91YmxlKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSkKKyAgICAoMSwgMiwgMywgNCwgMTI3LCA0MjkuLCA3LiwgOC4sIDkuNSwgMTAuLCAxMSwgMTIuLCAxMywKKyAgICAgMTksIDIxLiwgMS4pOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNDI5IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogNjgwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY4MCIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FmYTBiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMKQEAgLTAsMCArMSw5NSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfbG9jX3Rlc3RfZm4wKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzJdKSArIChpbnQpKihpbnQgKilhcmdzWzNdICsKKyAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1s2XSArIChpbnQpKCooaW50ICopYXJnc1s3XSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSkgKyAoaW50KSooaW50ICopYXJnc1s5XSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzE0XSkgKyAgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSksCisJIChpbnQpKihpbnQgKilhcmdzWzNdLCAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0pLAorCSAoaW50KSooaW50ICopYXJnc1s2XSwgKGludCkoKihpbnQgKilhcmdzWzddKSwKKwkgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJIChpbnQpKCooaW50ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooaW50ICopYXJnc1sxM10pLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwqKGludCAqKWFyZ3NbMTVdLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfbG9jX3Rlc3RfdHlwZTApKHVuc2lnbmVkIGxvbmcgbG9uZywgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICBpbnQsIHNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQsCisJCQkJICBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LCBpbnQsIGludCwKKwkJCQkgIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfY2xvc3VyZSAqcGNsOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisgIHZvaWQgKmNvZGVsb2M7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGVsb2MpOworICBDSEVDSyhwY2wgIT0gTlVMTCk7CisgIENIRUNLKGNvZGVsb2MgIT0gTlVMTCk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX2xvY190ZXN0X2ZuMCwKKwkJCSAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlbG9jKSA9PSBGRklfT0spOworICAKKyAgQ0hFQ0sobWVtY21wKHBjbCwgY29kZWxvYywgc2l6ZW9mKCpwY2wpKSA9PSAwKTsKKworICByZXMgPSAoKigoY2xvc3VyZV9sb2NfdGVzdF90eXBlMCljb2RlbG9jKSkKKyAgICAoMUxMLCAyLCAzTEwsIDQsIDEyNywgNDI5TEwsIDcsIDgsIDkuNSwgMTAsIDExLCAxMiwgMTMsCisgICAgIDE5LCAyMSwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA0MjkgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiA2ODAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNjgwIiB9ICovCisgICAgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZmNjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYwpAQCAtMCwwICsxLDY0IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwgKHN0ZGNhbGwgY29udmVudGlvbikKKyAgIFB1cnBvc2U6CUNoZWNrIGhhbmRsaW5nIHdoZW4gY2FsbGVyIGV4cGVjdHMgc3RkY2FsbCBjYWxsZWUKKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPHR3YWxsamF2YUBkZXYuamF2YS5uZXQ+ICovCisKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0X3N0ZGNhbGwoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKGludCAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pCisgICAgKyAoaW50KSgqKGludCAqKWFyZ3NbMl0pICArIChpbnQpKCooaW50ICopYXJnc1szXSkKKyAgICArIChpbnQpKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSooaW50ICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzJdKSwgKGludCkoKihpbnQgKilhcmdzWzNdKSwKKyAgICAgICAgIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKF9fc3RkY2FsbCAqY2xvc3VyZV90ZXN0X3R5cGUwKShpbnQsIGludCwgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKyAgdm9pZCogc3BfcHJlOworICB2b2lkKiBzcF9wb3N0OworICBjaGFyIGJ1ZlsxMDI0XTsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCA0LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3Rfc3RkY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wcmUpKTsKKyAgcmVzID0gKCooY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKDAsIDEsIDIsIDMpOworICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wb3N0KSk7CisgIC8qIHsgZGctb3V0cHV0ICIwIDEgMiAzOiA5IiB9ICovCisKKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOSIgfSAqLworCisgIHNwcmludGYoYnVmLCAibWlzbWF0Y2g6IHByZT0lcCB2cyBwb3N0PSVwIiwgc3BfcHJlLCBzcF9wb3N0KTsKKyAgcHJpbnRmKCJzdGFjayBwb2ludGVyICVzXG4iLCAoc3BfcHJlID09IHNwX3Bvc3QgPyAibWF0Y2giIDogYnVmKSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnN0YWNrIHBvaW50ZXIgbWF0Y2giIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGEzMzRmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSB7CisgIGludCBhOworICBpbnQgYjsKKyAgaW50IGM7Cit9IGNsc19zdHJ1Y3RfMTJieXRlOworCitjbHNfc3RydWN0XzEyYnl0ZSBjbHNfc3RydWN0XzEyYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIGIyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjEuYSArIGIyLmE7CisgIHJlc3VsdC5iID0gYjEuYiArIGIyLmI7CisgIHJlc3VsdC5jID0gYjEuYyArIGIyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGIxLmEsIGIxLmIsIGIxLmMsIGIyLmEsIGIyLmIsIGIyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsc19zdHJ1Y3RfMTJieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCSB2b2lkKiogYXJncyAsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSBiMSwgYjI7CisKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSopKGFyZ3NbMF0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzEyYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTJieXRlX2ZuKGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIGhfZGJsID0geyA3LCA0LCA5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSBqX2RibCA9IHsgMSwgNSwgMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmpfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMTJieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjcgNCA5IDEgNSAzOiA4IDkgMTIiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDkgMTIiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMTJieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8xMmJ5dGUoKikoY2xzX3N0cnVjdF8xMmJ5dGUsIGNsc19zdHJ1Y3RfMTJieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgNCA5IDEgNSAzOiA4IDkgMTIiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDkgMTIiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTI5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMKQEAgLTAsMCArMSw5NSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgeworICBpbnQgYTsKKyAgZG91YmxlIGI7CisgIGludCBjOworfSBjbHNfc3RydWN0XzE2Ynl0ZTsKKworY2xzX3N0cnVjdF8xNmJ5dGUgY2xzX3N0cnVjdF8xNmJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIxLmEgKyBiMi5hOworICByZXN1bHQuYiA9IGIxLmIgKyBiMi5iOworICByZXN1bHQuYyA9IGIxLmMgKyBiMi5jOworCisgIHByaW50ZigiJWQgJWcgJWQgJWQgJWcgJWQ6ICVkICVnICVkXG4iLCBiMS5hLCBiMS5iLCBiMS5jLCBiMi5hLCBiMi5iLCBiMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjbHNfc3RydWN0XzE2Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwKKwkJCQkgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSBiMSwgYjI7CisKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSopKGFyZ3NbMF0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzE2Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTZieXRlX2ZuKGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIGhfZGJsID0geyA3LCA4LjAsIDkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIGpfZGJsID0geyAxLCA5LjAsIDMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmpfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMTZieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjcgOCA5IDEgOSAzOiA4IDE3IDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyAxMiIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDAuMDsKKyAgcmVzX2RibC5jID0gMDsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMTZieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMTZieXRlKCopKGNsc19zdHJ1Y3RfMTZieXRlLCBjbHNfc3RydWN0XzE2Ynl0ZSkpKGNvZGUpKShoX2RibCwgal9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG43IDggOSAxIDkgMzogOCAxNyAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggMTcgMTIiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMKQEAgLTAsMCArMSw5NiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBEb3VibGUgYWxpZ25tZW50IGNoZWNrIG9uIGRhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxNQkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgeworICBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIGRvdWJsZSBkOworfSBjbHNfc3RydWN0XzE4Ynl0ZTsKKworY2xzX3N0cnVjdF8xOGJ5dGUgY2xzX3N0cnVjdF8xOGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworCisKKyAgcHJpbnRmKCIlZyAlZCAlZCAlZyAlZyAlZCAlZCAlZzogJWcgJWQgJWQgJWdcbiIsIGExLmEsIGExLmIsIGExLmMsIGExLmQsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMThieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8xOGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzE4Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSBnX2RibCA9IHsgMS4wLCAxMjcsIDEyNiwgMy4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSBmX2RibCA9IHsgNC4wLCAxMjUsIDEyNCwgNS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xOGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAxMjcgMTI2IDMgNCAxMjUgMTI0IDU6IDUgMjUyIDI1MCA4IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZCAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDI1MiAyNTAgOCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xOGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8xOGJ5dGUoKikoY2xzX3N0cnVjdF8xOGJ5dGUsIGNsc19zdHJ1Y3RfMThieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMTI3IDEyNiAzIDQgMTI1IDEyNCA1OiA1IDI1MiAyNTAgOCIgfSAqLworICBwcmludGYoInJlczogJWcgJWQgJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSAyNTIgMjUwIDgiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNjQyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gRG91YmxlIGFsaWdubWVudCBjaGVjayBvbiBkYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTUJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIHsKKyAgZG91YmxlIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICBkb3VibGUgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBjbHNfc3RydWN0XzE5Ynl0ZTsKKworY2xzX3N0cnVjdF8xOWJ5dGUgY2xzX3N0cnVjdF8xOWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworICByZXN1bHQuZSA9IGExLmUgKyBhMi5lOworCisKKyAgcHJpbnRmKCIlZyAlZCAlZCAlZyAlZCAlZyAlZCAlZCAlZyAlZDogJWcgJWQgJWQgJWcgJWRcbiIsCisJIGExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kLCByZXN1bHQuZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzE5Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMTlieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xOWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzZdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgZ19kYmwgPSB7IDEuMCwgMTI3LCAxMjYsIDMuMCwgMTIwIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSBmX2RibCA9IHsgNC4wLCAxMjUsIDEyNCwgNS4wLCAxMTkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xOWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAxMjcgMTI2IDMgMTIwIDQgMTI1IDEyNCA1IDExOTogNSAyNTIgMjUwIDggMjM5IiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZCAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgMjUyIDI1MCA4IDIzOSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xOWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8xOWJ5dGUoKikoY2xzX3N0cnVjdF8xOWJ5dGUsIGNsc19zdHJ1Y3RfMTlieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMTI3IDEyNiAzIDEyMCA0IDEyNSAxMjQgNSAxMTk6IDUgMjUyIDI1MCA4IDIzOSIgfSAqLworICBwcmludGYoInJlczogJWcgJWQgJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDI1MiAyNTAgOCAyMzkiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0MDJkNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMKQEAgLTAsMCArMSw4OSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkwMgkgKi8KKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKK30gY2xzX3N0cnVjdF8xXzFieXRlOworCitjbHNfc3RydWN0XzFfMWJ5dGUgY2xzX3N0cnVjdF8xXzFieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKworICBwcmludGYoIiVkICVkOiAlZFxuIiwgYTEuYSwgYTIuYSwgcmVzdWx0LmEpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xXzFieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8xXzFieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xXzFieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1syXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSBnX2RibCA9IHsgMTIgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSBmX2RibCA9IHsgMTc4IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzFfMWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgMTc4OiAxOTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfZGJsLmEpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xXzFieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMV8xYnl0ZSgqKShjbHNfc3RydWN0XzFfMWJ5dGUsIGNsc19zdHJ1Y3RfMV8xYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiAxNzg6IDE5MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19kYmwuYSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRkN2FjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHsKKyAgZG91YmxlIGE7CisgIGRvdWJsZSBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8yMGJ5dGU7CisKK2Nsc19zdHJ1Y3RfMjBieXRlIGNsc19zdHJ1Y3RfMjBieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVnICVnICVkICVnICVnICVkOiAlZyAlZyAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzIwYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMjBieXRlKilyZXNwID0gY2xzX3N0cnVjdF8yMGJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgZ19kYmwgPSB7IDEuMCwgMi4wLCAzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBmX2RibCA9IHsgNC4wLCA1LjAsIDcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8yMGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDc6IDUgNyAxMCIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyAxMCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8yMGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8yMGJ5dGUoKikoY2xzX3N0cnVjdF8yMGJ5dGUsIGNsc19zdHJ1Y3RfMjBieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA3OiA1IDcgMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDcgMTAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiY2JiZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMKQEAgLTAsMCArMSw5MyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHsKKyAgaW50IGE7CisgIGRvdWJsZSBiOworICBkb3VibGUgYzsKK30gY2xzX3N0cnVjdF8yMGJ5dGU7CisKK2Nsc19zdHJ1Y3RfMjBieXRlIGNsc19zdHJ1Y3RfMjBieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVnICVnICVkICVnICVnOiAlZCAlZyAlZ1xuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzIwYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMjBieXRlKilyZXNwID0gY2xzX3N0cnVjdF8yMGJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgZ19kYmwgPSB7IDEsIDIuMCwgMy4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBmX2RibCA9IHsgNCwgNS4wLCA3LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8yMGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDc6IDUgNyAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyAxMCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8yMGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8yMGJ5dGUoKikoY2xzX3N0cnVjdF8yMGJ5dGUsIGNsc19zdHJ1Y3RfMjBieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA3OiA1IDcgMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDcgMTAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YTZlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIHsKKyAgZG91YmxlIGE7CisgIGRvdWJsZSBiOworICBpbnQgYzsKKyAgZmxvYXQgZDsKK30gY2xzX3N0cnVjdF8yNGJ5dGU7CisKK2Nsc19zdHJ1Y3RfMjRieXRlIGNsc19zdHJ1Y3RfMjRieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBiMCwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGIyLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBiMykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIwLmEgKyBiMS5hICsgYjIuYSArIGIzLmE7CisgIHJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKyAgcmVzdWx0LmMgPSBiMC5jICsgYjEuYyArIGIyLmMgKyBiMy5jOworICByZXN1bHQuZCA9IGIwLmQgKyBiMS5kICsgYjIuZCArIGIzLmQ7CisKKyAgcHJpbnRmKCIlZyAlZyAlZCAlZyAlZyAlZyAlZCAlZyAlZyAlZyAlZCAlZyAlZyAlZyAlZCAlZzogJWcgJWcgJWQgJWdcbiIsCisJIGIwLmEsIGIwLmIsIGIwLmMsIGIwLmQsCisJIGIxLmEsIGIxLmIsIGIxLmMsIGIxLmQsCisJIGIyLmEsIGIyLmIsIGIyLmMsIGIyLmQsCisJIGIzLmEsIGIzLmIsIGIzLmMsIGIyLmQsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8yNGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBiMCwgYjEsIGIyLCBiMzsKKworICBiMCA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSopKGFyZ3NbMl0pOworICBiMyA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlKikoYXJnc1szXSk7CisKKyAgKihjbHNfc3RydWN0XzI0Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMjRieXRlX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgZV9kYmwgPSB7IDkuMCwgMi4wLCA2LCA1LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGZfZGJsID0geyAxLjAsIDIuMCwgMywgNy4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcsIDkuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgaF9kYmwgPSB7IDguMCwgNi4wLCAxLCA0LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzI0Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI5IDIgNiA1IDEgMiAzIDcgNCA1IDcgOSA4IDYgMSA5OiAyMiAxNSAxNyAyNSIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMjRieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMjRieXRlKCopKGNsc19zdHJ1Y3RfMjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfMjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfMjRieXRlLAorCQkJCSAgIGNsc19zdHJ1Y3RfMjRieXRlKSkKKwkgICAgIChjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG45IDIgNiA1IDEgMiAzIDcgNCA1IDcgOSA4IDYgMSA5OiAyMiAxNSAxNyAyNSIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDFlMTMwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBjbHNfc3RydWN0XzJieXRlOworCitjbHNfc3RydWN0XzJieXRlIGNsc19zdHJ1Y3RfMmJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8yYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzJieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzJieXRlKilyZXNwID0gY2xzX3N0cnVjdF8yYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIGdfZGJsID0geyAxMiwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIGZfZGJsID0geyAxLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzJieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDEyNyAxIDEzOiAxMyAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzJieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMmJ5dGUoKikoY2xzX3N0cnVjdF8yYnl0ZSwgY2xzX3N0cnVjdF8yYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiAxMjcgMSAxMzogMTMgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzc4MGMzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYwpAQCAtMCwwICsxLDk1IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTAyCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0XzNfMWJ5dGU7CisKK2Nsc19zdHJ1Y3RfM18xYnl0ZSBjbHNfc3RydWN0XzNfMWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLAorCSBhMi5hLCBhMi5iLCBhMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfM18xYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfM18xYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfM18xYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgZ19kYmwgPSB7IDEyLCAxMywgMTQgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSBmX2RibCA9IHsgMTc4LCAxNzksIDE4MCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzNfMWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgMTMgMTQgMTc4IDE3OSAxODA6IDE5MCAxOTIgMTk0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIDE5MiAxOTQiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfM18xYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzNfMWJ5dGUoKikoY2xzX3N0cnVjdF8zXzFieXRlLCBjbHNfc3RydWN0XzNfMWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgMTMgMTQgMTc4IDE3OSAxODA6IDE5MCAxOTIgMTk0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIDE5MiAxOTQiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDVjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgeworICB1bnNpZ25lZCBzaG9ydCBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IGNsc19zdHJ1Y3RfM2J5dGU7CisKK2Nsc19zdHJ1Y3RfM2J5dGUgY2xzX3N0cnVjdF8zYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWQgJWRcbiIsIGExLmEsIGExLmIsIGEyLmEsIGEyLmIsIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzNieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfM2J5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzNieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgZ19kYmwgPSB7IDEyLCAxMTkgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgZl9kYmwgPSB7IDEsIDE1IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzNieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDExOSAxIDE1OiAxMyAxMzQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTM0IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzNieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfM2J5dGUoKikoY2xzX3N0cnVjdF8zYnl0ZSwgY2xzX3N0cnVjdF8zYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiAxMTkgMSAxNTogMTMgMTM0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDEzNCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3NzBhMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRXNwZWNpYWxseSB3aXRoIHNtYWxsIHN0cnVjdHVyZXMgd2hpY2ggbWF5IGZpdCBpbiBvbmUKKwkJcmVnaXN0ZXIuIERlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBzaG9ydCBiOworfSBjbHNfc3RydWN0XzNieXRlXzE7CisKK2Nsc19zdHJ1Y3RfM2J5dGVfMSBjbHNfc3RydWN0XzNieXRlX2ZuMShzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWQgJWRcbiIsIGExLmEsIGExLmIsIGEyLmEsIGEyLmIsIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzNieXRlX2duMShmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8zYnl0ZV8xKilyZXNwID0gY2xzX3N0cnVjdF8zYnl0ZV9mbjEoYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIGdfZGJsID0geyAxNSwgMTI1IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgZl9kYmwgPSB7IDksIDE5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfM2J5dGVfZm4xKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjE1IDEyNSA5IDE5OiAyNCAxNDQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjQgMTQ0IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzNieXRlX2duMSwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzNieXRlXzEoKikoY2xzX3N0cnVjdF8zYnl0ZV8xLCBjbHNfc3RydWN0XzNieXRlXzEpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTUgMTI1IDkgMTk6IDI0IDE0NCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNCAxNDQiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4MDZkNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMKQEAgLTAsMCArMSw5OCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkwMgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworfSBjbHNfc3RydWN0XzRfMWJ5dGU7CisKK2Nsc19zdHJ1Y3RfNF8xYnl0ZSBjbHNfc3RydWN0XzRfMWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzRfMWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzRfMWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzRfMWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIGdfZGJsID0geyAxMiwgMTMsIDE0LCAxNSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIGZfZGJsID0geyAxNzgsIDE3OSwgMTgwLCAxODEgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNF8xYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiAxMyAxNCAxNSAxNzggMTc5IDE4MCAxODE6IDE5MCAxOTIgMTk0IDE5NiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIDE5MiAxOTQgMTk2IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzRfMWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF80XzFieXRlKCopKGNsc19zdHJ1Y3RfNF8xYnl0ZSwgY2xzX3N0cnVjdF80XzFieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDEzIDE0IDE1IDE3OCAxNzkgMTgwIDE4MTogMTkwIDE5MiAxOTQgMTk2IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAgMTkyIDE5NCAxOTYiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWFiYTNjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIHsKKyAgdW5zaWduZWQgc2hvcnQgYTsKKyAgdW5zaWduZWQgc2hvcnQgYjsKK30gY2xzX3N0cnVjdF80Ynl0ZTsKKworY2xzX3N0cnVjdF80Ynl0ZSBjbHNfc3RydWN0XzRieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTIuYSwgYTIuYiwgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzRieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF80Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNGJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSBnX2RibCA9IHsgMTI3LCAxMjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgZl9kYmwgPSB7IDEyLCAxMjggfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzRieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMTIgMTI4OiAxMzkgMjQ4IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDgiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF80Ynl0ZSgqKShjbHNfc3RydWN0XzRieXRlLCBjbHNfc3RydWN0XzRieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMTIgMTI4OiAxMzkgMjQ4IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDgiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ViYTNkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTA3MDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICB1bnNpZ25lZCBjaGFyIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gY2xzX3N0cnVjdF81Ynl0ZTsKKworY2xzX3N0cnVjdF81Ynl0ZSBjbHNfc3RydWN0XzVieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKyAgcmVzdWx0LmUgPSBhMS5lICsgYTIuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZCAlZFxuIiwKKwkgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwgYTIuZSwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQsIHJlc3VsdC5lKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF81Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfNWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzZdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBnX2RibCA9IHsgMTI3LCAxMjAsIDEsIDMsIDQgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgZl9kYmwgPSB7IDEyLCAxMjgsIDksIDMsIDQgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgcmVzX2RibCA9IHsgMCwgMCwgMCwgMCwgMCB9OworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNV0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzVieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAzIDQgMTIgMTI4IDkgMyA0OiAxMzkgMjQ4IDEwIDYgOCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisgIHJlc19kYmwuZCA9IDA7CisgIHJlc19kYmwuZSA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzVieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNWJ5dGUoKikoY2xzX3N0cnVjdF81Ynl0ZSwgY2xzX3N0cnVjdF81Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMyA0IDEyIDEyOCA5IDMgNDogMTM5IDI0OCAxMCA2IDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDgiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ1OTVjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMKQEAgLTAsMCArMSw5OCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIHNob3J0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF81Ynl0ZTsKKworY2xzX3N0cnVjdF81Ynl0ZSBjbHNfc3RydWN0XzVieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywKKwkgYTIuYSwgYTIuYiwgYTIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzVieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzVieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHJlc19kYmwgPSB7IDAsIDAsIDAgfTsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF81Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMjcgMTIwIDEgMTIgMTI4IDk6IDEzOSAyNDggMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIiB9ICovCisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMDsKKyAgcmVzX2RibC5jID0gMDsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF81Ynl0ZSgqKShjbHNfc3RydWN0XzVieXRlLCBjbHNfc3RydWN0XzVieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAxMiAxMjggOTogMTM5IDI0OCAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmViZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgYmlnZ2VyIHN0cnVjdCB3aGljaCBvdmVybGFwcworCQl0aGUgZ3AgYW5kIGZwIHJlZ2lzdGVyIGNvdW50IG9uIERhcndpbi9BSVgvcHBjNjQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIHsKKyAgZG91YmxlIGE7CisgIGRvdWJsZSBiOworICBkb3VibGUgYzsKKyAgZG91YmxlIGQ7CisgIGRvdWJsZSBlOworICBkb3VibGUgZjsKKyAgZG91YmxlIGc7CisgIGRvdWJsZSBoOworfSBjbHNfc3RydWN0XzY0Ynl0ZTsKKworY2xzX3N0cnVjdF82NGJ5dGUgY2xzX3N0cnVjdF82NGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGIwLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgYjIsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGIzKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjAuYSArIGIxLmEgKyBiMi5hICsgYjMuYTsKKyAgcmVzdWx0LmIgPSBiMC5iICsgYjEuYiArIGIyLmIgKyBiMy5iOworICByZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisgIHJlc3VsdC5kID0gYjAuZCArIGIxLmQgKyBiMi5kICsgYjMuZDsKKyAgcmVzdWx0LmUgPSBiMC5lICsgYjEuZSArIGIyLmUgKyBiMy5lOworICByZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisgIHJlc3VsdC5nID0gYjAuZyArIGIxLmcgKyBiMi5nICsgYjMuZzsKKyAgcmVzdWx0LmggPSBiMC5oICsgYjEuaCArIGIyLmggKyBiMy5oOworCisgIHByaW50ZigiJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWdcbiIsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsCisJIHJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nLCByZXN1bHQuaCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfNjRieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgYjAsIGIxLCBiMiwgYjM7CisKKyAgYjAgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUqKShhcmdzWzJdKTsKKyAgYjMgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSopKGFyZ3NbM10pOworCisgICooY2xzX3N0cnVjdF82NGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzY0Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s5XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDYuMCwgNy4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbOF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbM10gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzRdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF82NGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzY0Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzY0Ynl0ZSgqKShjbHNfc3RydWN0XzY0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzY0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzY0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzY0Ynl0ZSkpCisJICAgICAoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCIgfSAqLworICBwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyZWZmNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwNzA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworICB1bnNpZ25lZCBjaGFyIGU7CisgIHVuc2lnbmVkIGNoYXIgZjsKK30gY2xzX3N0cnVjdF82Ynl0ZTsKKworY2xzX3N0cnVjdF82Ynl0ZSBjbHNfc3RydWN0XzZieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKyAgcmVzdWx0LmUgPSBhMS5lICsgYTIuZTsKKyAgcmVzdWx0LmYgPSBhMS5mICsgYTIuZjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKKwkgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwgYTEuZSwgYTEuZiwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwgYTIuZSwgYTIuZiwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQsIHJlc3VsdC5lLCByZXN1bHQuZik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzZieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzZieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s3XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAzLCA0LCA1IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAzLCA0LCA1IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIHJlc19kYmwgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s2XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDMgNCA1IDEyIDEyOCA5IDMgNCA1OiAxMzkgMjQ4IDEwIDYgOCAxMCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgNiA4IDEwIiB9ICovCisKKyAgcmVzX2RibC5hID0gMDsKKyAgcmVzX2RibC5iID0gMDsKKyAgcmVzX2RibC5jID0gMDsKKyAgcmVzX2RibC5kID0gMDsKKyAgcmVzX2RibC5lID0gMDsKKyAgcmVzX2RibC5mID0gMDsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNmJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF82Ynl0ZSgqKShjbHNfc3RydWN0XzZieXRlLCBjbHNfc3RydWN0XzZieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAzIDQgNSAxMiAxMjggOSAzIDQgNTogMTM5IDI0OCAxMCA2IDggMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCAxMCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjU3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYwpAQCAtMCwwICsxLDk5IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgeworICB1bnNpZ25lZCBzaG9ydCBhOworICB1bnNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHVuc2lnbmVkIGNoYXIgZDsKK30gY2xzX3N0cnVjdF82Ynl0ZTsKKworY2xzX3N0cnVjdF82Ynl0ZSBjbHNfc3RydWN0XzZieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF82Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzZieXRlKilyZXNwID0gY2xzX3N0cnVjdF82Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMTI4IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDEyOCAxMiAxMjggOSAxMjc6IDEzOSAyNDggMTAgMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDI1NSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF82Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzZieXRlKCopKGNsc19zdHJ1Y3RfNmJ5dGUsIGNsc19zdHJ1Y3RfNmJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDEyOCAxMiAxMjggOSAxMjc6IDEzOSAyNDggMTAgMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDI1NSIgfSAqLworCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkMDljOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwNzA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworICB1bnNpZ25lZCBjaGFyIGU7CisgIHVuc2lnbmVkIGNoYXIgZjsKKyAgdW5zaWduZWQgY2hhciBnOworfSBjbHNfc3RydWN0XzdieXRlOworCitjbHNfc3RydWN0XzdieXRlIGNsc19zdHJ1Y3RfN2J5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworICByZXN1bHQuZSA9IGExLmUgKyBhMi5lOworICByZXN1bHQuZiA9IGExLmYgKyBhMi5mOworICByZXN1bHQuZyA9IGExLmcgKyBhMi5nOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkICVkICVkICVkXG4iLAorCSBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLCBhMS5lLCBhMS5mLCBhMS5nLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLCBhMi5lLCBhMi5mLCBhMi5nLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzdieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfN2J5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzdieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s4XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAzLCA0LCA1LCA2IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAzLCA0LCA1LCA2IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHJlc19kYmwgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbN10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzdieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAzIDQgNSA2IDEyIDEyOCA5IDMgNCA1IDY6IDEzOSAyNDggMTAgNiA4IDEwIDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCAxMCAxMiIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisgIHJlc19kYmwuZCA9IDA7CisgIHJlc19kYmwuZSA9IDA7CisgIHJlc19kYmwuZiA9IDA7CisgIHJlc19kYmwuZyA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzdieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfN2J5dGUoKikoY2xzX3N0cnVjdF83Ynl0ZSwgY2xzX3N0cnVjdF83Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMyA0IDUgNiAxMiAxMjggOSAzIDQgNSA2OiAxMzkgMjQ4IDEwIDYgOCAxMCAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDggMTAgMTIiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMwMDAwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMKQEAgLTAsMCArMSw5NyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIHNob3J0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgc2hvcnQgZDsKK30gY2xzX3N0cnVjdF83Ynl0ZTsKKworY2xzX3N0cnVjdF83Ynl0ZSBjbHNfc3RydWN0XzdieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF83Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzdieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzdieXRlKilyZXNwID0gY2xzX3N0cnVjdF83Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMjU0IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAyNTUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzdieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAyNTQgMTIgMTI4IDkgMjU1OiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA1MDkiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfN2J5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF83Ynl0ZSgqKShjbHNfc3RydWN0XzdieXRlLCBjbHNfc3RydWN0XzdieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAyNTQgMTIgMTI4IDkgMjU1OiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA1MDkiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE5OWQxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMKQEAgLTAsMCArMSw4OCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSB7CisgIGludCBhOworICBmbG9hdCBiOworfSBjbHNfc3RydWN0XzhieXRlOworCitjbHNfc3RydWN0XzhieXRlIGNsc19zdHJ1Y3RfOGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWcgJWQgJWc6ICVkICVnXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF84Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzhieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzhieXRlKilyZXNwID0gY2xzX3N0cnVjdF84Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIGdfZGJsID0geyAxLCAyLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgZl9kYmwgPSB7IDQsIDUuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfOGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDQgNTogNSA3IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyIgfSAqLworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF84Ynl0ZSgqKShjbHNfc3RydWN0XzhieXRlLCBjbHNfc3RydWN0XzhieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiA0IDU6IDUgNyIgfSAqLworICBwcmludGYoInJlczogJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWU5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBEYXJ3aW4vQUlYIGRvIGRvdWJsZS13b3JkCisJCWFsaWdubWVudCBvZiB0aGUgc3RydWN0IGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZG91YmxlLgorCQlDaGVjayB0aGF0IGl0IGRvZXMgbm90IGhlcmUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTQJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgeworICBpbnQgYTsKKyAgZG91YmxlIGI7Cit9IGNsc19zdHJ1Y3RfOWJ5dGU7CisKK2Nsc19zdHJ1Y3RfOWJ5dGUgY2xzX3N0cnVjdF85Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjEuYSArIGIyLmE7CisgIHJlc3VsdC5iID0gYjEuYiArIGIyLmI7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZzogJWQgJWdcbiIsIGIxLmEsIGIxLmIsICBiMi5hLCBiMi5iLAorCSByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsc19zdHJ1Y3RfOWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGIxLCBiMjsKKworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUqKShhcmdzWzBdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzlieXRlKilyZXNwID0gY2xzX3N0cnVjdF85Ynl0ZV9mbihiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGhfZGJsID0geyA3LCA4LjB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBqX2RibCA9IHsgMSwgOS4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmal9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF85Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI3IDggMSA5OiA4IDE3IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggMTciIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF85Ynl0ZSgqKShjbHNfc3RydWN0XzlieXRlLCBjbHNfc3RydWN0XzlieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgOCAxIDk6IDggMTciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwYmEwZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIERhcndpbi9BSVggZG8gZG91YmxlLXdvcmQKKwkJYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3QgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBkb3VibGUuCisJCUNoZWNrIHRoYXQgaXQgZG9lcyBoZXJlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTE0CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHsKKyAgZG91YmxlIGE7CisgIGludCBiOworfSBjbHNfc3RydWN0XzlieXRlOworCitjbHNfc3RydWN0XzlieXRlIGNsc19zdHJ1Y3RfOWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgYjIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIxLmEgKyBiMi5hOworICByZXN1bHQuYiA9IGIxLmIgKyBiMi5iOworCisgIHByaW50ZigiJWcgJWQgJWcgJWQ6ICVnICVkXG4iLCBiMS5hLCBiMS5iLCAgYjIuYSwgYjIuYiwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjbHNfc3RydWN0XzlieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCXZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMSwgYjI7CisKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlKikoYXJnc1swXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF85Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfOWJ5dGVfZm4oYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBoX2RibCA9IHsgNy4wLCA4fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgal9kYmwgPSB7IDEuMCwgOX07CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmpfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfOWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiNyA4IDEgOTogOCAxNyIgfSAqLworICBwcmludGYoInJlczogJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IiB9ICovCisKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF85Ynl0ZSgqKShjbHNfc3RydWN0XzlieXRlLCBjbHNfc3RydWN0XzlieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgOCAxIDk6IDggMTciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiOTRkNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwpAQCAtMCwwICsxLDkzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgZG91YmxlIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVnICVkICVkICVnICVkOiAlZCAlZyAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYzN2YyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMKQEAgLTAsMCArMSw5MSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBmbG9hdCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZCAlZyAlZDogJWQgJWcgJWRcbiIsIGExLmEsIChkb3VibGUpYTEuYiwgYTEuYywgYTIuYSwgKGRvdWJsZSlhMi5iLCBhMi5jLCByZXN1bHQuYSwgKGRvdWJsZSlyZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgKGRvdWJsZSlyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgKGRvdWJsZSlyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzgwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBsb25nIGRvdWJsZSBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZCAlZyAlZDogJWQgJWcgJWRcbiIsIGExLmEsIChkb3VibGUpYTEuYiwgYTEuYywgYTIuYSwgKGRvdWJsZSlhMi5iLCBhMi5jLCByZXN1bHQuYSwgKGRvdWJsZSlyZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3NGFmMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1leGNlc3MtZXJyb3JzICJubyBsb25nIGRvdWJsZSBmb3JtYXQiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworLyogeyBkZy1vcHRpb25zIC1tbG9uZy1kb3VibGUtMTI4IHsgdGFyZ2V0IHBvd2VycGM2NCotKi0qIH0gfSAqLworLyogeyBkZy1vdXRwdXQgIiIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIGxvbmcgZG91YmxlIGE7CisgIGxvbmcgZG91YmxlIGI7CisgIGxvbmcgZG91YmxlIGM7CisgIGxvbmcgZG91YmxlIGQ7CisgIGxvbmcgZG91YmxlIGU7CisgIGxvbmcgZG91YmxlIGY7CisgIGxvbmcgZG91YmxlIGc7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbigKKwljbHNfc3RydWN0X2FsaWduCWExLAorCWNsc19zdHJ1Y3RfYWxpZ24JYTIpCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcjsKKworCXIuYSA9IGExLmEgKyBhMi5hOworCXIuYiA9IGExLmIgKyBhMi5iOworCXIuYyA9IGExLmMgKyBhMi5jOworCXIuZCA9IGExLmQgKyBhMi5kOworCXIuZSA9IGExLmUgKyBhMi5lOworCXIuZiA9IGExLmYgKyBhMi5mOworCXIuZyA9IGExLmcgKyBhMi5nOworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAiCisJCSIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCWEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsIGEyLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuMigKKwljbHNfc3RydWN0X2FsaWduCWExKQoreworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHI7CisKKwlyLmEgPSBhMS5hICsgMTsKKwlyLmIgPSBhMS5iICsgMTsKKwlyLmMgPSBhMS5jICsgMTsKKwlyLmQgPSBhMS5kICsgMTsKKwlyLmUgPSBhMS5lICsgMTsKKwlyLmYgPSBhMS5mICsgMTsKKwlyLmcgPSBhMS5nICsgMTsKKworCXByaW50ZigiJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAiCisJCSIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCAKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisJYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisJYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKwkqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbM107CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzhdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCB9OworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gTlVMTDsKKworCWRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NfZGJsWzBdID0gJmdfZGJsOworCWFyZ3NfZGJsWzFdID0gJmZfZGJsOworCWFyZ3NfZGJsWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQ6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKwlwcmludGYoInJlczogJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQ6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKwlwcmludGYoInJlczogJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OGYwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYwpAQCAtMCwwICsxLDExNyBAQAorLyoJQXJlYToJCQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisJUHVycG9zZToJCUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisJTGltaXRhdGlvbnM6CW5vbmUuCisJUFI6CQkJCW5vbmUuCisJT3JpZ2luYXRvcjoJCUJsYWtlIENoYWZmaW4JNi8xOC8yMDA3CisqLworCisvKiB7IGRnLWV4Y2Vzcy1lcnJvcnMgIm5vIGxvbmcgZG91YmxlIGZvcm1hdCIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgLW1sb25nLWRvdWJsZS0xMjggeyB0YXJnZXQgcG93ZXJwYzY0Ki0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgbG9uZyBkb3VibGUgYTsKKyAgbG9uZyBkb3VibGUgYjsKKyAgbG9uZyBkb3VibGUgYzsKKyAgbG9uZyBkb3VibGUgZDsKKyAgbG9uZyBkb3VibGUgZTsKKyAgZG91YmxlIGY7CisgIGxvbmcgZG91YmxlIGc7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbigKKwljbHNfc3RydWN0X2FsaWduCWExLAorCWNsc19zdHJ1Y3RfYWxpZ24JYTIpCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcjsKKworCXIuYSA9IGExLmEgKyBhMi5hOworCXIuYiA9IGExLmIgKyBhMi5iOworCXIuYyA9IGExLmMgKyBhMi5jOworCXIuZCA9IGExLmQgKyBhMi5kOworCXIuZSA9IGExLmUgKyBhMi5lOworCXIuZiA9IGExLmYgKyBhMi5mOworCXIuZyA9IGExLmcgKyBhMi5nOworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZzogIgorCQkiJUxnICVMZyAlTGcgJUxnICVMZyAlZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCWEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsIGEyLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCAKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisJYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisJYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKwkqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbM107CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzhdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCB9OworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbN10gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZ19kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworCS8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNDogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCXByaW50ZigicmVzOiAlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0OiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisJcHJpbnRmKCJyZXM6ICVMZyAlTGcgJUxnICVMZyAlTGcgJWcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CisKKworCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0Zjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwpAQCAtMCwwICsxLDk1IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHBvaW50ZXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdm9pZCAqYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9ICh2b2lkICopKCh1aW50cHRyX3QpYTEuYiArICh1aW50cHRyX3QpYTIuYik7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlIiBQUkl1UFRSICIgJWQgJWQgJSIgUFJJdVBUUiAiICVkOiAlZCAlIiBQUkl1UFRSICIgJWRcbiIsIAorICAgICAgICAgYTEuYSwgKHVpbnRwdHJfdClhMS5iLCBhMS5jLAorCSBhMi5hLCAodWludHB0cl90KWEyLmIsIGEyLmMsCisgICAgICAgICByZXN1bHQuYSwgKHVpbnRwdHJfdClyZXN1bHQuYiwKKwkgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCAodm9pZCAqKTQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgKHZvaWQgKik5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUkl1UFRSICIgJWRcbiIsIHJlc19kYmwuYSwgKHVpbnRwdHJfdClyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJSIgUFJJdVBUUiAiICVkXG4iLCByZXNfZGJsLmEsICh1aW50cHRyX3QpcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzZWE0MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHNpbnQxNi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBzaWduZWQgc2hvcnQgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1ZDc4YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHNpbnQzMi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBzaWduZWQgaW50IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ1M2FmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2Ygc2ludDY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHNpZ25lZCBsb25nIGxvbmcgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJSIgUFJJZExMICIgJWQgJWQgJSIgUFJJZExMICIgJWQ6ICVkICUiIFBSSWRMTCAiICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc2ludDY0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJSIgUFJJZExMICIgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2Yjc0OAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHVpbnQxNi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUzZDNlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgdWludDMyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGludCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91aW50OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1Yzc5ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYwpAQCAtMCwwICsxLDkzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHVpbnQ2NC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlIiBQUklkTEwgIiAlZCAlZCAlIiBQUklkTEwgIiAlZDogJWQgJSIgUFJJZExMICIgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICUiIFBSSWRMTCAiICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwZGFiYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgZG91YmxlIGFyZ3VtZW50cyBpbiBzdHJ1Y3RzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzIzLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBEYmxzIHsKKwlkb3VibGUgeDsKKwlkb3VibGUgeTsKK30gRGJsczsKKwordm9pZAorY2xvc3VyZV90ZXN0X2ZuKERibHMgcCkKK3sKKwlwcmludGYoIiUuMWYgJS4xZlxuIiwgcC54LCBwLnkpOworfQorCit2b2lkCitjbG9zdXJlX3Rlc3RfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKKwkJdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJY2xvc3VyZV90ZXN0X2ZuKCooRGJscyopYXJnc1swXSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjIF9fVU5VU0VEX18sIGNoYXIqKiBhcmd2IF9fVU5VU0VEX18pCit7CisJZmZpX2NpZiBjaWY7CisKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSoJcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCWZmaV90eXBlKgkJY2xfYXJnX3R5cGVzWzFdOworCisJZmZpX3R5cGUJdHMxX3R5cGU7CisJZmZpX3R5cGUqCXRzMV90eXBlX2VsZW1lbnRzWzRdOworCisJdHMxX3R5cGUuc2l6ZSA9IDA7CisJdHMxX3R5cGUuYWxpZ25tZW50ID0gMDsKKwl0czFfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXRzMV90eXBlLmVsZW1lbnRzID0gdHMxX3R5cGVfZWxlbWVudHM7CisKKwl0czFfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJdHMxX3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCXRzMV90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworCWNsX2FyZ190eXBlc1swXSA9ICZ0czFfdHlwZTsKKworCURibHMgYXJnID0geyAxLjAsIDIuMCB9OworCisJLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJCQkgJmZmaV90eXBlX3ZvaWQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJKCh2b2lkKigqKShEYmxzKSkoY29kZSkpKGFyZyk7CisJLyogeyBkZy1vdXRwdXQgIjEuMCAyLjBcbiIgfSAqLworCisJY2xvc3VyZV90ZXN0X2ZuKGFyZyk7CisJLyogeyBkZy1vdXRwdXQgIjEuMCAyLjBcbiIgfSAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhZDRjYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfZG91YmxlX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgKihkb3VibGUgKilyZXNwID0gKihkb3VibGUgKilhcmdzWzBdOworCisgICBwcmludGYoIiVmOiAlZlxuIiwqKGRvdWJsZSAqKWFyZ3NbMF0sCisJICAqKGRvdWJsZSAqKXJlc3ApOworIH0KK3R5cGVkZWYgZG91YmxlICgqY2xzX3JldF9kb3VibGUpKGRvdWJsZSk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIGRvdWJsZSByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X2RvdWJsZV9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsc19yZXRfZG91YmxlKWNvZGUpKSgyMTQ3NC43ODkpOworICAvKiB7IGRnLW91dHB1dCAiMjE0NzQuNzg5MDAwOiAyMTQ3NC43ODkwMDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICUuNmZcbiIsIHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjE0NzQuNzg5MDAwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk1ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJVGVzdCBkb3VibGVzIHBhc3NlZCBpbiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0cy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIGF2cjMyKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xzX2RvdWJsZV92YV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgCisJCSB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwljaGFyKglmb3JtYXQJCT0gKihjaGFyKiopYXJnc1swXTsKKwlkb3VibGUJZG91YmxlVmFsdWUJPSAqKGRvdWJsZSopYXJnc1sxXTsKKworCSooZmZpX2FyZyopcmVzcCA9IHByaW50Zihmb3JtYXQsIGRvdWJsZVZhbHVlKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzWzNdOworCWZmaV90eXBlKiBhcmdfdHlwZXNbM107CisKKwljaGFyKglmb3JtYXQJCT0gIiUuMWZcbiI7CisJZG91YmxlCWRvdWJsZUFyZwk9IDc7CisJZmZpX2FyZwlyZXMJCQk9IDA7CisKKwlhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKwlhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfc2ludCwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZmb3JtYXQ7CisJYXJnc1sxXSA9ICZkb3VibGVBcmc7CisJYXJnc1syXSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJpbnRmKSwgJnJlcywgYXJncyk7CisJLy8geyBkZy1vdXRwdXQgIjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2RvdWJsZV92YV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcwk9ICgoaW50KCopKGNoYXIqLCBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBkb3VibGVBcmcpOworCS8vIHsgZGctb3V0cHV0ICJcbjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTBmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF9mbG9hdF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgKihmbG9hdCAqKXJlc3AgPSAqKGZsb2F0ICopYXJnc1swXTsKKworICAgcHJpbnRmKCIlZzogJWdcbiIsKihmbG9hdCAqKWFyZ3NbMF0sCisJICAqKGZsb2F0ICopcmVzcCk7CisgfQorCit0eXBlZGVmIGZsb2F0ICgqY2xzX3JldF9mbG9hdCkoZmxvYXQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICBmbG9hdCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF9mbG9hdF9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisgIHJlcyA9ICgoKChjbHNfcmV0X2Zsb2F0KWNvZGUpKC0yMTIyLjEyKSkpOworICAvKiB7IGRnLW91dHB1dCAiXFwtMjEyMi4xMjogXFwtMjEyMi4xMiIgfSAqLworICBwcmludGYoInJlczogJS42ZlxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiBcLTIxMjIuMTIwMTE3IiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFmNmNmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBsb25nIGRvdWJsZSBhcmd1bWVudHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluCSovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAibm8gbG9uZyBkb3VibGUgZm9ybWF0IiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBhcm0qLSotKiBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAtbWxvbmctZG91YmxlLTEyOCB7IHRhcmdldCBwb3dlcnBjNjQqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK2xvbmcgZG91YmxlIGNsc19sZG91YmxlX2ZuKAorCWxvbmcgZG91YmxlCWExLAorCWxvbmcgZG91YmxlCWEyLAorCWxvbmcgZG91YmxlCWEzLAorCWxvbmcgZG91YmxlCWE0LAorCWxvbmcgZG91YmxlCWE1LAorCWxvbmcgZG91YmxlCWE2LAorCWxvbmcgZG91YmxlCWE3LAorCWxvbmcgZG91YmxlCWE4KQoreworCWxvbmcgZG91YmxlCXIgPSBhMSArIGEyICsgYTMgKyBhNCArIGE1ICsgYTYgKyBhNyArIGE4OworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAlTGdcbiIsCisJCWExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgcik7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19sZG91YmxlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJbG9uZyBkb3VibGUJYTEJPSAqKGxvbmcgZG91YmxlKilhcmdzWzBdOworCWxvbmcgZG91YmxlCWEyCT0gKihsb25nIGRvdWJsZSopYXJnc1sxXTsKKwlsb25nIGRvdWJsZQlhMwk9ICoobG9uZyBkb3VibGUqKWFyZ3NbMl07CisJbG9uZyBkb3VibGUJYTQJPSAqKGxvbmcgZG91YmxlKilhcmdzWzNdOworCWxvbmcgZG91YmxlCWE1CT0gKihsb25nIGRvdWJsZSopYXJnc1s0XTsKKwlsb25nIGRvdWJsZQlhNgk9ICoobG9uZyBkb3VibGUqKWFyZ3NbNV07CisJbG9uZyBkb3VibGUJYTcJPSAqKGxvbmcgZG91YmxlKilhcmdzWzZdOworCWxvbmcgZG91YmxlCWE4CT0gKihsb25nIGRvdWJsZSopYXJnc1s3XTsKKworCSoobG9uZyBkb3VibGUqKXJlc3AgPSBjbHNfbGRvdWJsZV9mbigKKwkJYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsKK30KKworaW50IG1haW4odm9pZCkKK3sKKwlmZmlfY2lmCWNpZjsKKyAgICAgICAgdm9pZCogY29kZTsKKwlmZmlfY2xvc3VyZSoJcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCXZvaWQqCQkJYXJnc1s5XTsKKwlmZmlfdHlwZSoJCWFyZ190eXBlc1s5XTsKKwlsb25nIGRvdWJsZQkJcmVzCT0gMDsKKworCWxvbmcgZG91YmxlCWFyZzEJPSAxOworCWxvbmcgZG91YmxlCWFyZzIJPSAyOworCWxvbmcgZG91YmxlCWFyZzMJPSAzOworCWxvbmcgZG91YmxlCWFyZzQJPSA0OworCWxvbmcgZG91YmxlCWFyZzUJPSA1OworCWxvbmcgZG91YmxlCWFyZzYJPSA2OworCWxvbmcgZG91YmxlCWFyZzcJPSA3OworCWxvbmcgZG91YmxlCWFyZzgJPSA4OworCisJYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzhdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDgsICZmZmlfdHlwZV9sb25nZG91YmxlLAorCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzWzBdID0gJmFyZzE7CisJYXJnc1sxXSA9ICZhcmcyOworCWFyZ3NbMl0gPSAmYXJnMzsKKwlhcmdzWzNdID0gJmFyZzQ7CisJYXJnc1s0XSA9ICZhcmc1OworCWFyZ3NbNV0gPSAmYXJnNjsKKwlhcmdzWzZdID0gJmFyZzc7CisJYXJnc1s3XSA9ICZhcmc4OworCWFyZ3NbOF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19sZG91YmxlX2ZuKSwgJnJlcywgYXJncyk7CisJLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgODogMzYiIH0gKi8KKwlwcmludGYoInJlczogJUxnXG4iLCByZXMpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMzYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xkb3VibGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXMgPSAoKGxvbmcgZG91YmxlKCopKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLAorCQlsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkpKGNvZGUpKShhcmcxLCBhcmcyLAorCQlhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4KTsKKwkvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNiA3IDg6IDM2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVMZ1xuIiwgcmVzKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDM2IiB9ICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTY0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJVGVzdCBsb25nIGRvdWJsZXMgcGFzc2VkIGluIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzYvMjAwNwkgKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgYXZyMzIqLSotKiB4ODZfNjQtKi1taW5ndyogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xzX2xvbmdkb3VibGVfdmFfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIAorCQkgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCWNoYXIqCQlmb3JtYXQJPSAqKGNoYXIqKilhcmdzWzBdOworCWxvbmcgZG91YmxlCWxkVmFsdWUJPSAqKGxvbmcgZG91YmxlKilhcmdzWzFdOworCisJKihmZmlfYXJnKilyZXNwID0gcHJpbnRmKGZvcm1hdCwgbGRWYWx1ZSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc1szXTsKKwlmZmlfdHlwZSogYXJnX3R5cGVzWzNdOworCisJY2hhcioJCWZvcm1hdAk9ICIlLjFMZlxuIjsKKwlsb25nIGRvdWJsZQlsZEFyZwk9IDc7CisJZmZpX2FyZwkJcmVzCQk9IDA7CisKKwlhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKwlhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbMl0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmZmaV90eXBlX3NpbnQsCisJCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NbMF0gPSAmZm9ybWF0OworCWFyZ3NbMV0gPSAmbGRBcmc7CisJYXJnc1syXSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJpbnRmKSwgJnJlcywgYXJncyk7CisJLy8geyBkZy1vdXRwdXQgIjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xvbmdkb3VibGVfdmFfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXMJPSAoKGludCgqKShjaGFyKiwgbG9uZyBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBsZEFyZyk7CisJLy8geyBkZy1vdXRwdXQgIlxuNy4wIiB9CisJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZjdiNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgc2lnbmVkIGNoYXIgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzExMjkgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3NpZ25lZCBjaGFyIHRlc3RfZnVuY19mbihzaWduZWQgY2hhciBhMSwgc2lnbmVkIGNoYXIgYTIpCit7CisgIHNpZ25lZCBjaGFyIHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHNpZ25lZCBjaGFyIGExLCBhMjsKKworICBhMSA9ICooc2lnbmVkIGNoYXIgKilhdmFsc1swXTsKKyAgYTIgPSAqKHNpZ25lZCBjaGFyICopYXZhbHNbMV07CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIpOworCit9CisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCp0ZXN0X3R5cGUpKHNpZ25lZCBjaGFyLCBzaWduZWQgY2hhcik7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1szXTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgc2lnbmVkIGNoYXIgYSwgYiwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDI7CisgIGIgPSAxMjU7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9zY2hhciwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjIgMTI1OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAoc2lnbmVkIGNoYXIpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEyNyIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDIsIDEyNSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjIgMTI1OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTI3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM5MTUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgc2lnbmVkIHNob3J0IHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc2lnbmVkIHNob3J0IHRlc3RfZnVuY19mbihzaWduZWQgc2hvcnQgYTEsIHNpZ25lZCBzaG9ydCBhMikKK3sKKyAgc2lnbmVkIHNob3J0IHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHNpZ25lZCBzaG9ydCBhMSwgYTI7CisKKyAgYTEgPSAqKHNpZ25lZCBzaG9ydCAqKWF2YWxzWzBdOworICBhMiA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIpOworCit9CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKShzaWduZWQgc2hvcnQsIHNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1szXTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgc2hvcnQgYSwgYiwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDI7CisgIGIgPSAzMjc2NTsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfc3Nob3J0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMiAzMjc2NTogMzI3NjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAodW5zaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY3IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMiwgMzI3NjUpOworICAvKiB7IGRnLW91dHB1dCAiXG4yIDMyNzY1OiAzMjc2NyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzMjc2NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNhZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYwpAQCAtMCwwICsxLDg2IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBwYXNzaW5nIG9mIG11bHRpcGxlIHNpZ25lZCBzaG9ydC9jaGFyIHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc2lnbmVkIHNob3J0IHRlc3RfZnVuY19mbihzaWduZWQgY2hhciBhMSwgc2lnbmVkIHNob3J0IGEyLAorCQkJICBzaWduZWQgY2hhciBhMywgc2lnbmVkIHNob3J0IGE0KQoreworICBzaWduZWQgc2hvcnQgcmVzdWx0OworCisgIHJlc3VsdCA9IGExICsgYTIgKyBhMyArIGE0OworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIGEzLCBhNCwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVuY19nbihmZmlfY2lmICpjaWYgX19VTlVTRURfXywgdm9pZCAqcnZhbCwgdm9pZCAqKmF2YWxzLAorCQkJIHZvaWQgKmRhdGEgX19VTlVTRURfXykKK3sKKyAgc2lnbmVkIGNoYXIgYTEsIGEzOworICBzaWduZWQgc2hvcnQgYTIsIGE0OworCisgIGExID0gKihzaWduZWQgY2hhciAqKWF2YWxzWzBdOworICBhMiA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisgIGEzID0gKihzaWduZWQgY2hhciAqKWF2YWxzWzJdOworICBhNCA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbM107CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIsIGEzLCBhNCk7CisKK30KKwordHlwZWRlZiBzaWduZWQgc2hvcnQgKCp0ZXN0X3R5cGUpKHNpZ25lZCBjaGFyLCBzaWduZWQgc2hvcnQsCisJCQkJICBzaWduZWQgY2hhciwgc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkICogYXJnc19kYmxbNV07CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzVdOworICBmZmlfYXJnIHJlc19jYWxsOworICBzaWduZWQgY2hhciBhLCBjOworICBzaWduZWQgc2hvcnQgYiwgZCwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDE7CisgIGIgPSAzMjc2NTsKKyAgYyA9IDEyNzsKKyAgZCA9IC0xMjg7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSAmYzsKKyAgYXJnc19kYmxbM10gPSAmZDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9zc2hvcnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDMyNzY1IDEyNyAtMTI4OiAzMjc2NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIChzaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY1IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMSwgMzI3NjUsIDEyNywgLTEyOCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMzI3NjUgMTI3IC0xMjg6IDMyNzY1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzX2Nsb3N1cmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5YzAyYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgdW5zaWduZWQgY2hhciB2YWx1ZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIxMzIyMS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMjkgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3Vuc2lnbmVkIGNoYXIgdGVzdF9mdW5jX2ZuKHVuc2lnbmVkIGNoYXIgYTEsIHVuc2lnbmVkIGNoYXIgYTIsCisJCQkgICB1bnNpZ25lZCBjaGFyIGEzLCB1bnNpZ25lZCBjaGFyIGE0KQoreworICB1bnNpZ25lZCBjaGFyIHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyICsgYTMgKyBhNDsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwgYTEsIGEyLCBhMywgYTQsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHVuc2lnbmVkIGNoYXIgYTEsIGEyLCBhMywgYTQ7CisKKyAgYTEgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1swXTsKKyAgYTIgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1sxXTsKKyAgYTMgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1syXTsKKyAgYTQgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1szXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMiwgYTMsIGE0KTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKCp0ZXN0X3R5cGUpKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsCisJCQkJICAgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CisKK3ZvaWQgdGVzdF9mdW5jKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsIF9fVU5VU0VEX18sIHZvaWQgKiphdmFscywKKwkgICAgICAgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICBwcmludGYoIiVkICVkICVkICVkXG4iLCAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1swXSwKKwkgKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMV0sICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzJdLAorCSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1szXSk7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQgKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbNV07CisgIGZmaV9hcmcgcmVzX2NhbGw7CisgIHVuc2lnbmVkIGNoYXIgYSwgYiwgYywgZCwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDE7CisgIGIgPSAyOworICBjID0gMTI3OworICBkID0gMTI1OworCisgIGFyZ3NfZGJsWzBdID0gJmE7CisgIGFyZ3NfZGJsWzFdID0gJmI7CisgIGFyZ3NfZGJsWzJdID0gJmM7CisgIGFyZ3NfZGJsWzNdID0gJmQ7CisgIGFyZ3NfZGJsWzRdID0gTlVMTDsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3VjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDEyNyAxMjU6IDI1NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsICh1bnNpZ25lZCBjaGFyKXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTUiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgxLCAyLCAxMjcsIDEyNSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAxMjcgMTI1OiAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDEwY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTI5ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit1bnNpZ25lZCBzaG9ydCB0ZXN0X2Z1bmNfZm4odW5zaWduZWQgc2hvcnQgYTEsIHVuc2lnbmVkIHNob3J0IGEyKQoreworICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CisKKyAgcmVzdWx0ID0gYTEgKyBhMjsKKworICBwcmludGYoIiVkICVkOiAlZFxuIiwgYTEsIGEyLCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9mdW5jX2duKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsLCB2b2lkICoqYXZhbHMsCisJCQkgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICB1bnNpZ25lZCBzaG9ydCBhMSwgYTI7CisKKyAgYTEgPSAqKHVuc2lnbmVkIHNob3J0ICopYXZhbHNbMF07CisgIGEyID0gKih1bnNpZ25lZCBzaG9ydCAqKWF2YWxzWzFdOworCisgICooZmZpX2FyZyAqKXJ2YWwgPSB0ZXN0X2Z1bmNfZm4oYTEsIGEyKTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQgKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbM107CisgIGZmaV9hcmcgcmVzX2NhbGw7CisgIHVuc2lnbmVkIHNob3J0IGEsIGIsIHJlc19jbG9zdXJlOworCisgIGEgPSAyOworICBiID0gMzI3NjU7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsCisJCSAgICAgJmZmaV90eXBlX3VzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjIgMzI3NjU6IDMyNzY3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHVuc2lnbmVkIHNob3J0KXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzMjc2NyIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDIsIDMyNzY1KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMiAzMjc2NTogMzI3NjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMzI3NjciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4OGU5NwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMKQEAgLTAsMCArMSw4NiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSB1bnNpZ25lZCBzaG9ydC9jaGFyIHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordW5zaWduZWQgc2hvcnQgdGVzdF9mdW5jX2ZuKHVuc2lnbmVkIGNoYXIgYTEsIHVuc2lnbmVkIHNob3J0IGEyLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgYTMsIHVuc2lnbmVkIHNob3J0IGE0KQoreworICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CisKKyAgcmVzdWx0ID0gYTEgKyBhMiArIGEzICsgYTQ7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsIGExLCBhMiwgYTMsIGE0LCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9mdW5jX2duKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsLCB2b2lkICoqYXZhbHMsCisJCQkgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICB1bnNpZ25lZCBjaGFyIGExLCBhMzsKKyAgdW5zaWduZWQgc2hvcnQgYTIsIGE0OworCisgIGExID0gKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMF07CisgIGEyID0gKih1bnNpZ25lZCBzaG9ydCAqKWF2YWxzWzFdOworICBhMyA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzJdOworICBhNCA9ICoodW5zaWduZWQgc2hvcnQgKilhdmFsc1szXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMiwgYTMsIGE0KTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBzaG9ydCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1s1XTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgY2hhciBhLCBjOworICB1bnNpZ25lZCBzaG9ydCBiLCBkLCByZXNfY2xvc3VyZTsKKworICBhID0gMTsKKyAgYiA9IDI7CisgIGMgPSAxMjc7CisgIGQgPSAxMjg7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSAmYzsKKyAgYXJnc19kYmxbM10gPSAmZDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV91c2hvcnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMTI3IDEyODogMjU4IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHVuc2lnbmVkIHNob3J0KXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTgiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgxLCAyLCAxMjcsIDEyOCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAxMjcgMTI4OiAyNTgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZGQzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgcG9pbnRlciBhcmd1bWVudHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNi8yMDA3CSovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit2b2lkKiBjbHNfcG9pbnRlcl9mbih2b2lkKiBhMSwgdm9pZCogYTIpCit7CisJdm9pZCoJcmVzdWx0CT0gKHZvaWQqKSgoaW50cHRyX3QpYTEgKyAoaW50cHRyX3QpYTIpOworCisJcHJpbnRmKCIweCUwOHggMHglMDh4OiAweCUwOHhcbiIsIAorCSAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIGExLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSBhMiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfcG9pbnRlcl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgCisJICAgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCXZvaWQqCWExCT0gKih2b2lkKiopKGFyZ3NbMF0pOworCXZvaWQqCWEyCT0gKih2b2lkKiopKGFyZ3NbMV0pOworCisJKih2b2lkKiopcmVzcCA9IGNsc19wb2ludGVyX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYJY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCoJCQlhcmdzWzNdOworLy8JZmZpX3R5cGUJCWNsc19wb2ludGVyX3R5cGU7CisJZmZpX3R5cGUqCQlhcmdfdHlwZXNbM107CisKKy8qCWNsc19wb2ludGVyX3R5cGUuc2l6ZSA9IHNpemVvZih2b2lkKik7CisJY2xzX3BvaW50ZXJfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19wb2ludGVyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1BPSU5URVI7CisJY2xzX3BvaW50ZXJfdHlwZS5lbGVtZW50cyA9IE5VTEw7Ki8KKworCXZvaWQqCWFyZzEJPSAodm9pZCopMHgxMjM0NTY3ODsKKwl2b2lkKglhcmcyCT0gKHZvaWQqKTB4ODlhYmNkZWY7CisJZmZpX2FyZwlyZXMJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfcG9pbnRlciwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZhcmcxOworCWFyZ3NbMV0gPSAmYXJnMjsKKwlhcmdzWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfcG9pbnRlcl9mbiksICZyZXMsIGFyZ3MpOworCS8qIHsgZGctb3V0cHV0ICIweDEyMzQ1Njc4IDB4ODlhYmNkZWY6IDB4OWJlMDI0NjciIH0gKi8KKwlwcmludGYoInJlczogMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSByZXMpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMHg5YmUwMjQ2NyIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcG9pbnRlcl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcyA9IChmZmlfYXJnKSgodm9pZCooKikodm9pZCosIHZvaWQqKSkoY29kZSkpKGFyZzEsIGFyZzIpOworCS8qIHsgZGctb3V0cHV0ICJcbjB4MTIzNDU2NzggMHg4OWFiY2RlZjogMHg5YmUwMjQ2NyIgfSAqLworCXByaW50ZigicmVzOiAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHJlcyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAweDliZTAyNDY3IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3ZjI3MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgcG9pbnRlciBhcmd1bWVudHMgYWNyb3NzIG11bHRpcGxlIGhpZGVvdXMgc3RhY2sgZnJhbWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzcvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljCWxvbmcgZHVtbXlWYXI7CisKK2xvbmcgZHVtbXlfZnVuYygKKwlsb25nIGRvdWJsZSBhMSwgY2hhciBiMSwKKwlsb25nIGRvdWJsZSBhMiwgY2hhciBiMiwKKwlsb25nIGRvdWJsZSBhMywgY2hhciBiMywKKwlsb25nIGRvdWJsZSBhNCwgY2hhciBiNCkKK3sKKwlyZXR1cm4gYTEgKyBiMSArIGEyICsgYjIgKyBhMyArIGIzICsgYTQgKyBiNDsKK30KKwordm9pZCogY2xzX3BvaW50ZXJfZm4yKHZvaWQqIGExLCB2b2lkKiBhMikKK3sKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwl2b2lkKglyZXN1bHQJPSAodm9pZCopKChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMik7CisKKwlwcmludGYoIjB4JTA4eCAweCUwOHg6IDB4JTA4eFxuIiwgCisJICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgYTEsCisgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIGEyLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogY2xzX3BvaW50ZXJfZm4xKHZvaWQqIGExLCB2b2lkKiBhMikKK3sKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwl2b2lkKglyZXN1bHQJPSAodm9pZCopKChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMik7CisKKwlwcmludGYoIjB4JTA4eCAweCUwOHg6IDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSBhMSwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSBhMiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSByZXN1bHQpOworCisJcmVzdWx0CT0gY2xzX3BvaW50ZXJfZm4yKHJlc3VsdCwgYTEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19wb2ludGVyX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJdm9pZCoJYTEJPSAqKHZvaWQqKikoYXJnc1swXSk7CisJdm9pZCoJYTIJPSAqKHZvaWQqKikoYXJnc1sxXSk7CisKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwkqKHZvaWQqKilyZXNwID0gY2xzX3BvaW50ZXJfZm4xKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYJY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCoJCQlhcmdzWzNdOworLy8JZmZpX3R5cGUJCWNsc19wb2ludGVyX3R5cGU7CisJZmZpX3R5cGUqCQlhcmdfdHlwZXNbM107CisKKy8qCWNsc19wb2ludGVyX3R5cGUuc2l6ZSA9IHNpemVvZih2b2lkKik7CisJY2xzX3BvaW50ZXJfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19wb2ludGVyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1BPSU5URVI7CisJY2xzX3BvaW50ZXJfdHlwZS5lbGVtZW50cyA9IE5VTEw7Ki8KKworCXZvaWQqCWFyZzEJPSAodm9pZCopMHgwMTIzNDU2NzsKKwl2b2lkKglhcmcyCT0gKHZvaWQqKTB4ODlhYmNkZWY7CisJZmZpX2FyZwlyZXMJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfcG9pbnRlciwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZhcmcxOworCWFyZ3NbMV0gPSAmYXJnMjsKKwlhcmdzWzJdID0gTlVMTDsKKworCXByaW50ZigiXG4iKTsKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3BvaW50ZXJfZm4xKSwgJnJlcywgYXJncyk7CisKKwlwcmludGYoInJlczogMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbjB4MDEyMzQ1NjcgMHg4OWFiY2RlZjogMHg4YWNmMTM1NiIgfQorCS8vIHsgZGctb3V0cHV0ICJcbjB4OGFjZjEzNTYgMHgwMTIzNDU2NzogMHg4YmYyNThiZCIgfQorCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMHg4YmYyNThiZCIgfQorCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcG9pbnRlcl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcyA9IChmZmlfYXJnKSgodm9pZCooKikodm9pZCosIHZvaWQqKSkoY29kZSkpKGFyZzEsIGFyZzIpOworCisJcHJpbnRmKCJyZXM6IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG4weDAxMjM0NTY3IDB4ODlhYmNkZWY6IDB4OGFjZjEzNTYiIH0KKwkvLyB7IGRnLW91dHB1dCAiXG4weDhhY2YxMzU2IDB4MDEyMzQ1Njc6IDB4OGJmMjU4YmQiIH0KKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDB4OGJmMjU4YmQiIH0KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTg2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzY2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEwOAkgKi8KKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfc2NoYXJfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICAqKGZmaV9hcmcqKXJlc3AgPSAqKHNpZ25lZCBjaGFyICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKihzaWduZWQgY2hhciAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCpjbHNfcmV0X3NjaGFyKShzaWduZWQgY2hhcik7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHNpZ25lZCBjaGFyIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3NjaGFyX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF9zY2hhciljb2RlKSkoMTI3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNzogMTI3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMjciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMTNiNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMKQEAgLTAsMCArMSw0MiBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgc2ludDMyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X3NpbnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICooc2lnbmVkIGludCAqKWFyZ3NbMF07CisgIHByaW50ZigiJWQ6ICVkXG4iLCooc2lnbmVkIGludCAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgc2lnbmVkIGludCAoKmNsc19yZXRfc2ludCkoc2lnbmVkIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHNpZ25lZCBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3NpbnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3NpbnQpY29kZSkpKDY1NTM0KTsKKyAgLyogeyBkZy1vdXRwdXQgIjY1NTM0OiA2NTUzNCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2NTUzNCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2ZDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzc2hvcnQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfc3Nob3J0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICooc2lnbmVkIHNob3J0ICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKihzaWduZWQgc2hvcnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCAoKmNsc19yZXRfc3Nob3J0KShzaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICBzaWduZWQgc2hvcnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF9zc2hvcnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3NzaG9ydCljb2RlKSkoMjU1KTsKKyAgLyogeyBkZy1vdXRwdXQgIjI1NTogMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1NSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzE3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1Y2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF91Y2hhcl9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICoodW5zaWduZWQgY2hhciAqKWFyZ3NbMF07CisgIHByaW50ZigiJWQ6ICVkXG4iLCoodW5zaWduZWQgY2hhciAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKmNsc19yZXRfdWNoYXIpKHVuc2lnbmVkIGNoYXIpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICB1bnNpZ25lZCBjaGFyIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3VjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3VjaGFyX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF91Y2hhciljb2RlKSkoMTI3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNzogMTI3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEyNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVjZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1aW50LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X3VpbnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyAqKXJlc3AgPSAqKHVuc2lnbmVkIGludCAqKWFyZ3NbMF07CisKKyAgcHJpbnRmKCIlZDogJWRcbiIsKih1bnNpZ25lZCBpbnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHVuc2lnbmVkIGludCAoKmNsc19yZXRfdWludCkodW5zaWduZWQgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdWludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF91aW50X2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF91aW50KWNvZGUpKSgyMTQ3NDgzNjQ3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjIxNDc0ODM2NDc6IDIxNDc0ODM2NDciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjE0NzQ4MzY0NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1YWI0NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYwpAQCAtMCwwICsxLDQ3IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBsb25nIGxvbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfdWxvbmdsb25nX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCSB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilyZXNwPSAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdOworCisgIHByaW50ZigiJSIgUFJJdUxMICI6ICUiIFBSSXVMTCAiXG4iLCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwKKwkgKih1bnNpZ25lZCBsb25nIGxvbmcgKikocmVzcCkpOworfQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgKCpjbHNfcmV0X3Vsb25nbG9uZykodW5zaWduZWQgbG9uZyBsb25nKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV91aW50NjQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3Vsb25nbG9uZ19mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisgIHJlcyA9ICgqKChjbHNfcmV0X3Vsb25nbG9uZyljb2RlKSkoMjE0TEwpOworICAvKiB7IGRnLW91dHB1dCAiMjE0OiAyMTQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICUiIFBSSWRMTCAiXG4iLCByZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIxNCIgfSAqLworCisgIHJlcyA9ICgqKChjbHNfcmV0X3Vsb25nbG9uZyljb2RlKSkoOTIyMzM3MjAzNTg1NDc3NTgwOExMKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuOTIyMzM3MjAzNTg1NDc3NTgwODogOTIyMzM3MjAzNTg1NDc3NTgwOCIgfSAqLworICBwcmludGYoInJlczogJSIgUFJJZExMICJcbiIsIHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOTIyMzM3MjAzNTg1NDc3NTgwOCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMTAwZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1c2hvcnQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfdXNob3J0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICoodW5zaWduZWQgc2hvcnQgKilhcmdzWzBdOworCisgIHByaW50ZigiJWQ6ICVkXG4iLCoodW5zaWduZWQgc2hvcnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqY2xzX3JldF91c2hvcnQpKHVuc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgc2hvcnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3VzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF91c2hvcnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3VzaG9ydCljb2RlKSkoNjU1MzUpOworICAvKiB7IGRnLW91dHB1dCAiNjU1MzU6IDY1NTM1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY1NTM1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMWEzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIEFyZWE6CQlmZmlfcHJlcF9jaWYsIGZmaV9wcmVwX2Nsb3N1cmUKKyAgIFB1cnBvc2U6CQlUZXN0IGVycm9yIHJldHVybiBmb3IgYmFkIEFCSXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNi8yMDA3CSAqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2R1bW15X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwIF9fVU5VU0VEX18sIAorCSB2b2lkKiogYXJncyBfX1VOVVNFRF9fLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQore30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzWzFdOworCWZmaV90eXBlKiBhcmdfdHlwZXNbMV07CisKKwlhcmdfdHlwZXNbMF0gPSBOVUxMOworCWFyZ3NbMF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIDI1NSwgMCwgJmZmaV90eXBlX3ZvaWQsCisJCWFyZ190eXBlcykgPT0gRkZJX0JBRF9BQkkpOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMCwgJmZmaV90eXBlX3ZvaWQsCisJCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWNpZi5hYmk9IDI1NTsKKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgZHVtbXlfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9CQURfQUJJKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmZjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYwpAQCAtMCwwICsxLDI1IEBACisvKiBBcmVhOgkJZmZpX3ByZXBfY2lmCisgICBQdXJwb3NlOgkJVGVzdCBlcnJvciByZXR1cm4gZm9yIGJhZCB0eXBlZGVmcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlmZmlfY2lmIGNpZjsKKwlmZmlfdHlwZSogYXJnX3R5cGVzWzFdOworCisJYXJnX3R5cGVzWzBdID0gTlVMTDsKKworCWZmaV90eXBlCWJhZFR5cGUJPSBmZmlfdHlwZV92b2lkOworCisJYmFkVHlwZS5zaXplID0gMDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDAsICZiYWRUeXBlLAorCQlhcmdfdHlwZXMpID09IEZGSV9CQURfVFlQRURFRik7CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjk4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKQEAgLTAsMCArMSwxMjkgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSAiZmZpY29uZmlnLmgiCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0FSR1MgMjU2CisKKyNkZWZpbmUgQ0hFQ0soeCkgISh4KSA/IGFib3J0KCkgOiAwCisKKy8qIERlZmluZSBfX1VOVVNFRF9fIHRoYXQgYWxzbyBvdGhlciBjb21waWxlcnMgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLworI3VuZGVmIF9fVU5VU0VEX18KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBfX1VOVVNFRF9fIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorI2Vsc2UKKyNkZWZpbmUgX19VTlVTRURfXworI2VuZGlmCisKKy8qIFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQorICAgZmlsZSBvcGVuLiAgKi8KKyNpZmRlZiBIQVZFX01NQVBfQU5PTgorIyB1bmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQgKE1BUF9BTk9OKQorIyAgZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKy8qIE1pbkdXIGtsdWRnZS4gICovCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIFBSSWRMTCAiSTY0ZCIKKyNkZWZpbmUgUFJJdUxMICJJNjR1IgorI2Vsc2UKKyNkZWZpbmUgUFJJZExMICJsbGQiCisjZGVmaW5lIFBSSXVMTCAibGx1IgorI2VuZGlmCisKKy8qIFRydTY0IFVOSVgga2x1ZGdlLiAgKi8KKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX29zZl9fKQorLyogVHJ1NjQgVU5JWCBWNC4wIGRvZXNuJ3Qgc3VwcG9ydCAlbGxkLyVsbGQsIGJ1dCBsb25nIGlzIDY0LWJpdC4gICovCisjdW5kZWYgUFJJZExMCisjZGVmaW5lIFBSSWRMTCAibGQiCisjdW5kZWYgUFJJdUxMCisjZGVmaW5lIFBSSXVMTCAibHUiCisjZGVmaW5lIFBSSWQ2NCAibGQiCisjZGVmaW5lIFBSSXU2NCAibHUiCisjZGVmaW5lIFBSSXVQVFIgImx1IgorI2VuZGlmCisKKy8qIFBBIEhQLVVYIGtsdWRnZS4gICovCisjaWYgZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX2hwdXhfXykgJiYgIWRlZmluZWQoUFJJdVBUUikKKyNkZWZpbmUgUFJJdVBUUiAibHUiCisjZW5kaWYKKworLyogU29sYXJpcyA8IDEwIGtsdWRnZS4gICovCisjaWYgZGVmaW5lZChfX3N1bl9fKSAmJiBkZWZpbmVkKF9fc3ZyNF9fKSAmJiAhZGVmaW5lZChQUkl1UFRSKQorI2lmIGRlZmluZWQoX19hcmNoNjRfXykgfHwgZGVmaW5lZCAoX194ODZfNjRfXykKKyNkZWZpbmUgUFJJdVBUUiAibHUiCisjZWxzZQorI2RlZmluZSBQUkl1UFRSICJ1IgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVTSU5HX01NQVAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCithbGxvY2F0ZV9tbWFwIChzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcGFnZTsKKyNpZiBkZWZpbmVkIChIQVZFX01NQVBfREVWX1pFUk8pCisgIHN0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisgIGlmIChkZXZfemVyb19mZCA9PSAtMSkKKyAgICB7CisgICAgICBkZXZfemVyb19mZCA9IG9wZW4gKCIvZGV2L3plcm8iLCBPX1JET05MWSk7CisgICAgICBpZiAoZGV2X3plcm9fZmQgPT0gLTEpCisJeworCSAgcGVycm9yICgib3BlbiAvZGV2L3plcm86ICVtIik7CisJICBleGl0ICgxKTsKKwl9CisgICAgfQorI2VuZGlmCisKKworI2lmZGVmIEhBVkVfTU1BUF9BTk9OCisgIHBhZ2UgPSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCSAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworICBwYWdlID0gbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgICAgTUFQX1BSSVZBVEUsIGRldl96ZXJvX2ZkLCAwKTsKKyNlbmRpZgorCisgIGlmIChwYWdlID09ICh2b2lkICopIE1BUF9GQUlMRUQpCisgICAgeworICAgICAgcGVycm9yICgidmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgcmV0dXJuIHBhZ2U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjMjcyZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBpbnQgZmxvYXRpbmcoaW50IGEsIGZsb2F0IGIsIGRvdWJsZSBjLCBsb25nIGRvdWJsZSBkKQoreworICBpbnQgaTsKKworICBpID0gKGludCkgKChmbG9hdClhL2IgKyAoKGZsb2F0KWMvKGZsb2F0KWQpKTsKKworICByZXR1cm4gaTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICBmbG9hdCBmOworICBzaWduZWQgaW50IHNpMTsKKyAgZG91YmxlIGQ7CisgIGxvbmcgZG91YmxlIGxkOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJnNpMTsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzFdID0gJmY7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMl0gPSAmZDsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbM10gPSAmbGQ7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgc2kxID0gNjsKKyAgZiA9IDMuMTQxNTk7CisgIGQgPSAoZG91YmxlKTEuMC8oZG91YmxlKTMuMDsKKyAgbGQgPSAyLjcxODI4MTgyODQ2TDsKKworICBmbG9hdGluZyAoc2kxLCBmLCBkLCBsZCk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZsb2F0aW5nKSwgJnJpbnQsIHZhbHVlcyk7CisKKyAgcHJpbnRmICgiJWQgdnMgJWRcbiIsIChpbnQpcmludCwgZmxvYXRpbmcgKHNpMSwgZiwgZCwgbGQpKTsKKworICBDSEVDSygoaW50KXJpbnQgPT0gZmxvYXRpbmcoc2kxLCBmLCBkLCBsZCkpOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTFkMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMKQEAgLTAsMCArMSw1OCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSBkOworICB1bnNpZ25lZCBjaGFyIGNbc2l6ZW9mIChkb3VibGUpXTsKK30gdmFsdWVfdHlwZTsKKworI2RlZmluZSBDQU5BUlkgMHhiYQorCitzdGF0aWMgZG91YmxlIGRibGl0KGZsb2F0IGYpCit7CisgIHJldHVybiBmLzMuMDsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGY7CisgIHZhbHVlX3R5cGUgcmVzdWx0WzJdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGYgPSAzLjE0MTU5OworCisgIC8qIFB1dCBhIGNhbmFyeSBpbiB0aGUgcmV0dXJuIGFycmF5LiAgVGhpcyBpcyBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IKKyAgICAgYSBidWZmZXIgb3ZlcnJ1bi4gICovCisgIG1lbXNldChyZXN1bHRbMV0uYywgQ0FOQVJZLCBzaXplb2YgKGRvdWJsZSkpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihkYmxpdCksICZyZXN1bHRbMF0uZCwgdmFsdWVzKTsKKworICAvKiBUaGVzZSBhcmUgbm90IGFsd2F5cyB0aGUgc2FtZSEhIENoZWNrIGZvciBhIHJlYXNvbmFibGUgZGVsdGEgKi8KKworICBDSEVDSyhyZXN1bHRbMF0uZCAtIGRibGl0KGYpIDwgREJMX0VQU0lMT04pOworCisgIC8qIENoZWNrIHRoZSBjYW5hcnkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkb3VibGUpOyArK2kpCisgICAgQ0hFQ0socmVzdWx0WzFdLmNbaV0gPT0gQ0FOQVJZKTsKKworICBleGl0KDApOworCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjI5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYwpAQCAtMCwwICsxLDU4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGxvbmcgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAiZmFpbHMiIHsgdGFyZ2V0IHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgorCitzdGF0aWMgbG9uZyBkb3VibGUgbGRibGl0KGZsb2F0IGYpCit7CisgIHJldHVybiAobG9uZyBkb3VibGUpICgoKGxvbmcgZG91YmxlKSBmKS8gKGxvbmcgZG91YmxlKSAzLjApOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZjsKKyAgbG9uZyBkb3VibGUgbGQ7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2xvbmdkb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZiA9IDMuMTQxNTk7CisKKyNpZiAxCisgIC8qIFRoaXMgaXMgaWZkZWYnZCBvdXQgZm9yIG5vdy4gbG9uZyBkb3VibGUgc3VwcG9ydCB1bmRlciBTdW5PUy9nY2MKKyAgICAgaXMgcHJldHR5IG11Y2ggbm9uLWV4aXN0ZW50LiAgWW91J2xsIGdldCB0aGUgb2RkIGJ1cyBlcnJvciBpbiBsaWJyYXJ5CisgICAgIHJvdXRpbmVzIGxpa2UgcHJpbnRmKCkuICAqLworICBwcmludGYgKCIlTGZcbiIsIGxkYmxpdChmKSk7CisjZW5kaWYKKyAgbGQgPSA2NjY7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihsZGJsaXQpLCAmbGQsIHZhbHVlcyk7CisKKyNpZiAxCisgIC8qIFRoaXMgaXMgaWZkZWYnZCBvdXQgZm9yIG5vdy4gbG9uZyBkb3VibGUgc3VwcG9ydCB1bmRlciBTdW5PUy9nY2MKKyAgICAgaXMgcHJldHR5IG11Y2ggbm9uLWV4aXN0ZW50LiAgWW91J2xsIGdldCB0aGUgb2RkIGJ1cyBlcnJvciBpbiBsaWJyYXJ5CisgICAgIHJvdXRpbmVzIGxpa2UgcHJpbnRmKCkuICAqLworICBwcmludGYgKCIlTGYsICVMZiwgJUxmLCAlTGZcbiIsIGxkLCBsZGJsaXQoZiksIGxkIC0gbGRibGl0KGYpLCBMREJMX0VQU0lMT04pOworI2VuZGlmCisKKyAgLyogVGhlc2UgYXJlIG5vdCBhbHdheXMgdGhlIHNhbWUhISBDaGVjayBmb3IgYSByZWFzb25hYmxlIGRlbHRhICovCisgIGlmIChsZCAtIGxkYmxpdChmKSA8IExEQkxfRVBTSUxPTikKKyAgICBwdXRzKCJsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUgdGVzdHMgb2shIik7CisgIGVsc2UKKyAgICBDSEVDSygwKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJkNWYyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmMKQEAgLTAsMCArMSw3MiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGZsb2F0IGFyZ3VtZW50cyB3aXRoIGRpZmZlcmVudCBvcmRlcnMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3N0YXRpYyBkb3VibGUgZmxvYXRpbmdfMShmbG9hdCBhLCBkb3VibGUgYiwgbG9uZyBkb3VibGUgYykKK3sKKyAgcmV0dXJuIChkb3VibGUpIGEgKyBiICsgKGRvdWJsZSkgYzsKK30KKworc3RhdGljIGRvdWJsZSBmbG9hdGluZ18yKGxvbmcgZG91YmxlIGEsIGRvdWJsZSBiLCBmbG9hdCBjKQoreworICByZXR1cm4gKGRvdWJsZSkgYSArIGIgKyAoZG91YmxlKSBjOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIHJkOworCisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworICBsb25nIGRvdWJsZSBsZDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZjsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1sxXSA9ICZkOworICBhcmdzWzJdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIHZhbHVlc1syXSA9ICZsZDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGYgPSAzLjE0MTU5OworICBkID0gKGRvdWJsZSkxLjAvKGRvdWJsZSkzLjA7CisgIGxkID0gMi43MTgyODE4Mjg0Nkw7CisKKyAgZmxvYXRpbmdfMSAoZiwgZCwgbGQpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihmbG9hdGluZ18xKSwgJnJkLCB2YWx1ZXMpOworCisgIENIRUNLKHJkIC0gZmxvYXRpbmdfMShmLCBkLCBsZCkgPCBEQkxfRVBTSUxPTik7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbMF0gPSAmbGQ7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMV0gPSAmZDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzJdID0gJmY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsCisJCSAgICAgJmZmaV90eXBlX2RvdWJsZSwgYXJncykgPT0gRkZJX09LKTsKKworICBmbG9hdGluZ18yIChsZCwgZCwgZik7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZsb2F0aW5nXzIpLCAmcmQsIHZhbHVlcyk7CisKKyAgQ0hFQ0socmQgLSBmbG9hdGluZ18yKGxkLCBkLCBmKSA8IERCTF9FUFNJTE9OKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkNmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBkZW5vcm0gZG91YmxlIHZhbHVlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMjY0ODMuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1pZWVlIiB7IHRhcmdldCBhbHBoYSotKi0qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGNoYXIgY1tzaXplb2YgKGRvdWJsZSldOworfSB2YWx1ZV90eXBlOworCisjZGVmaW5lIENBTkFSWSAweGJhCisKK3N0YXRpYyBkb3VibGUgZGJsaXQoZG91YmxlIGQpCit7CisgIHJldHVybiBkOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGQ7CisgIHZhbHVlX3R5cGUgcmVzdWx0WzJdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmQ7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgZCA9IERCTF9NSU4gLyAyOworICAKKyAgLyogUHV0IGEgY2FuYXJ5IGluIHRoZSByZXR1cm4gYXJyYXkuICBUaGlzIGlzIGEgcmVncmVzc2lvbiB0ZXN0IGZvcgorICAgICBhIGJ1ZmZlciBvdmVycnVuLiAgKi8KKyAgbWVtc2V0KHJlc3VsdFsxXS5jLCBDQU5BUlksIHNpemVvZiAoZG91YmxlKSk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGRibGl0KSwgJnJlc3VsdFswXS5kLCB2YWx1ZXMpOworICAKKyAgLyogVGhlIHN0YW5kYXJkIGRlbHRhIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGVub3Jtcy4gIFNpbmNlIHdlIGRpZG4ndCBkbworICAgICBhbnkgYXJpdGhtZXRpYywgd2Ugc2hvdWxkIGdldCB0aGUgb3JpZ2luYWwgcmVzdWx0IGJhY2ssIGFuZCBoZW5jZSBhbgorICAgICBleGFjdCBjaGVjayBzaG91bGQgYmUgT0sgaGVyZS4gICovCisgCisgIENIRUNLKHJlc3VsdFswXS5kID09IGRibGl0KGQpKTsKKworICAvKiBDaGVjayB0aGUgY2FuYXJ5LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoZG91YmxlKTsgKytpKQorICAgIENIRUNLKHJlc3VsdFsxXS5jW2ldID09IENBTkFSWSk7CisKKyAgZXhpdCgwKTsKKworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmZmI3MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qCUFyZWE6CQkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorCVB1cnBvc2U6CQlDaGVjayBsYXJnZSBzdHJ1Y3R1cmUgcmV0dXJucy4KKwlMaW1pdGF0aW9uczoJbm9uZS4KKwlQUjoJCQkJbm9uZS4KKwlPcmlnaW5hdG9yOgkJQmxha2UgQ2hhZmZpbgk2LzE4LzIwMDcKKyovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAiIiB7IHRhcmdldCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgLW1sb25nLWRvdWJsZS0xMjggeyB0YXJnZXQgcG93ZXJwYzY0Ki0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmCXN0cnVjdCBCaWdTdHJ1Y3R7CisJdWludDhfdAkJYTsKKwlpbnQ4X3QJCWI7CisJdWludDE2X3QJYzsKKwlpbnQxNl90CQlkOworCXVpbnQzMl90CWU7CisJaW50MzJfdAkJZjsKKwl1aW50NjRfdAlnOworCWludDY0X3QJCWg7CisJZmxvYXQJCWk7CisJZG91YmxlCQlqOworCWxvbmcgZG91YmxlCWs7CisJY2hhcioJCWw7CisJdWludDhfdAkJbTsKKwlpbnQ4X3QJCW47CisJdWludDE2X3QJbzsKKwlpbnQxNl90CQlwOworCXVpbnQzMl90CXE7CisJaW50MzJfdAkJcjsKKwl1aW50NjRfdAlzOworCWludDY0X3QJCXQ7CisJZmxvYXQJCXU7CisJZG91YmxlCQl2OworCWxvbmcgZG91YmxlCXc7CisJY2hhcioJCXg7CisJdWludDhfdAkJeTsKKwlpbnQ4X3QJCXo7CisJdWludDE2X3QJYWE7CisJaW50MTZfdAkJYmI7CisJdWludDMyX3QJY2M7CisJaW50MzJfdAkJZGQ7CisJdWludDY0X3QJZWU7CisJaW50NjRfdAkJZmY7CisJZmxvYXQJCWdnOworCWRvdWJsZQkJaGg7CisJbG9uZyBkb3VibGUJaWk7CisJY2hhcioJCWpqOworCXVpbnQ4X3QJCWtrOworCWludDhfdAkJbGw7CisJdWludDE2X3QJbW07CisJaW50MTZfdAkJbm47CisJdWludDMyX3QJb287CisJaW50MzJfdAkJcHA7CisJdWludDY0X3QJcXE7CisJaW50NjRfdAkJcnI7CisJZmxvYXQJCXNzOworCWRvdWJsZQkJdHQ7CisJbG9uZyBkb3VibGUJdXU7CisJY2hhcioJCXZ2OworCXVpbnQ4X3QJCXd3OworCWludDhfdAkJeHg7Cit9IEJpZ1N0cnVjdDsKKworQmlnU3RydWN0Cit0ZXN0X2xhcmdlX2ZuKAorCXVpbnQ4X3QJCXVpOF8xLAorCWludDhfdAkJc2k4XzEsCisJdWludDE2X3QJdWkxNl8xLAorCWludDE2X3QJCXNpMTZfMSwKKwl1aW50MzJfdAl1aTMyXzEsCisJaW50MzJfdAkJc2kzMl8xLAorCXVpbnQ2NF90CXVpNjRfMSwKKwlpbnQ2NF90CQlzaTY0XzEsCisJZmxvYXQJCWZfMSwKKwlkb3VibGUJCWRfMSwKKwlsb25nIGRvdWJsZQlsZF8xLAorCWNoYXIqCQlwXzEsCisJdWludDhfdAkJdWk4XzIsCisJaW50OF90CQlzaThfMiwKKwl1aW50MTZfdAl1aTE2XzIsCisJaW50MTZfdAkJc2kxNl8yLAorCXVpbnQzMl90CXVpMzJfMiwKKwlpbnQzMl90CQlzaTMyXzIsCisJdWludDY0X3QJdWk2NF8yLAorCWludDY0X3QJCXNpNjRfMiwKKwlmbG9hdAkJZl8yLAorCWRvdWJsZQkJZF8yLAorCWxvbmcgZG91YmxlCWxkXzIsCisJY2hhcioJCXBfMiwKKwl1aW50OF90CQl1aThfMywKKwlpbnQ4X3QJCXNpOF8zLAorCXVpbnQxNl90CXVpMTZfMywKKwlpbnQxNl90CQlzaTE2XzMsCisJdWludDMyX3QJdWkzMl8zLAorCWludDMyX3QJCXNpMzJfMywKKwl1aW50NjRfdAl1aTY0XzMsCisJaW50NjRfdAkJc2k2NF8zLAorCWZsb2F0CQlmXzMsCisJZG91YmxlCQlkXzMsCisJbG9uZyBkb3VibGUJbGRfMywKKwljaGFyKgkJcF8zLAorCXVpbnQ4X3QJCXVpOF80LAorCWludDhfdAkJc2k4XzQsCisJdWludDE2X3QJdWkxNl80LAorCWludDE2X3QJCXNpMTZfNCwKKwl1aW50MzJfdAl1aTMyXzQsCisJaW50MzJfdAkJc2kzMl80LAorCXVpbnQ2NF90CXVpNjRfNCwKKwlpbnQ2NF90CQlzaTY0XzQsCisJZmxvYXQJCWZfNCwKKwlkb3VibGUJCWRfNCwKKwlsb25nIGRvdWJsZQlsZF80LAorCWNoYXIqCQlwXzQsCisJdWludDhfdAkJdWk4XzUsCisJaW50OF90CQlzaThfNSkKK3sKKwlCaWdTdHJ1Y3QJcmV0VmFsCT0geworCQl1aThfMSArIDEsIHNpOF8xICsgMSwgdWkxNl8xICsgMSwgc2kxNl8xICsgMSwgdWkzMl8xICsgMSwgc2kzMl8xICsgMSwKKwkJCXVpNjRfMSArIDEsIHNpNjRfMSArIDEsIGZfMSArIDEsIGRfMSArIDEsIGxkXzEgKyAxLCAoY2hhciopKChpbnRwdHJfdClwXzEgKyAxKSwgCisJCXVpOF8yICsgMiwgc2k4XzIgKyAyLCB1aTE2XzIgKyAyLCBzaTE2XzIgKyAyLCB1aTMyXzIgKyAyLCBzaTMyXzIgKyAyLAorCQkJdWk2NF8yICsgMiwgc2k2NF8yICsgMiwgZl8yICsgMiwgZF8yICsgMiwgbGRfMiArIDIsIChjaGFyKikoKGludHB0cl90KXBfMiArIDIpLCAKKwkJdWk4XzMgKyAzLCBzaThfMyArIDMsIHVpMTZfMyArIDMsIHNpMTZfMyArIDMsIHVpMzJfMyArIDMsIHNpMzJfMyArIDMsCisJCQl1aTY0XzMgKyAzLCBzaTY0XzMgKyAzLCBmXzMgKyAzLCBkXzMgKyAzLCBsZF8zICsgMywgKGNoYXIqKSgoaW50cHRyX3QpcF8zICsgMyksIAorCQl1aThfNCArIDQsIHNpOF80ICsgNCwgdWkxNl80ICsgNCwgc2kxNl80ICsgNCwgdWkzMl80ICsgNCwgc2kzMl80ICsgNCwKKwkJCXVpNjRfNCArIDQsIHNpNjRfNCArIDQsIGZfNCArIDQsIGRfNCArIDQsIGxkXzQgKyA0LCAoY2hhciopKChpbnRwdHJfdClwXzQgKyA0KSwgCisJCXVpOF81ICsgNSwgc2k4XzUgKyA1fTsKKworCXByaW50ZigiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggJWhodSAlaGhkOiAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAlaGh1ICVoaGRcbiIsCisJICAgICAgIHVpOF8xLCBzaThfMSwgdWkxNl8xLCBzaTE2XzEsIHVpMzJfMSwgc2kzMl8xLCB1aTY0XzEsIHNpNjRfMSwgZl8xLCBkXzEsIGxkXzEsICh1bnNpZ25lZCBsb25nKXBfMSwKKwkJdWk4XzIsIHNpOF8yLCB1aTE2XzIsIHNpMTZfMiwgdWkzMl8yLCBzaTMyXzIsIHVpNjRfMiwgc2k2NF8yLCBmXzIsIGRfMiwgbGRfMiwgKHVuc2lnbmVkIGxvbmcpcF8yLAorCQl1aThfMywgc2k4XzMsIHVpMTZfMywgc2kxNl8zLCB1aTMyXzMsIHNpMzJfMywgdWk2NF8zLCBzaTY0XzMsIGZfMywgZF8zLCBsZF8zLCAodW5zaWduZWQgbG9uZylwXzMsCisJCXVpOF80LCBzaThfNCwgdWkxNl80LCBzaTE2XzQsIHVpMzJfNCwgc2kzMl80LCB1aTY0XzQsIHNpNjRfNCwgZl80LCBkXzQsIGxkXzQsICh1bnNpZ25lZCBsb25nKXBfNCwgdWk4XzUsIHNpOF81LAorCQlyZXRWYWwuYSwgcmV0VmFsLmIsIHJldFZhbC5jLCByZXRWYWwuZCwgcmV0VmFsLmUsIHJldFZhbC5mLAorCSAgICAgICByZXRWYWwuZywgcmV0VmFsLmgsIHJldFZhbC5pLCByZXRWYWwuaiwgcmV0VmFsLmssICh1bnNpZ25lZCBsb25nKXJldFZhbC5sLAorCQlyZXRWYWwubSwgcmV0VmFsLm4sIHJldFZhbC5vLCByZXRWYWwucCwgcmV0VmFsLnEsIHJldFZhbC5yLAorCSAgICAgICByZXRWYWwucywgcmV0VmFsLnQsIHJldFZhbC51LCByZXRWYWwudiwgcmV0VmFsLncsICh1bnNpZ25lZCBsb25nKXJldFZhbC54LAorCQlyZXRWYWwueSwgcmV0VmFsLnosIHJldFZhbC5hYSwgcmV0VmFsLmJiLCByZXRWYWwuY2MsIHJldFZhbC5kZCwKKwkgICAgICAgcmV0VmFsLmVlLCByZXRWYWwuZmYsIHJldFZhbC5nZywgcmV0VmFsLmhoLCByZXRWYWwuaWksICh1bnNpZ25lZCBsb25nKXJldFZhbC5qaiwKKwkJcmV0VmFsLmtrLCByZXRWYWwubGwsIHJldFZhbC5tbSwgcmV0VmFsLm5uLCByZXRWYWwub28sIHJldFZhbC5wcCwKKwkgICAgICAgcmV0VmFsLnFxLCByZXRWYWwucnIsIHJldFZhbC5zcywgcmV0VmFsLnR0LCByZXRWYWwudXUsICh1bnNpZ25lZCBsb25nKXJldFZhbC52diwgcmV0VmFsLnd3LCByZXRWYWwueHgpOworCisJcmV0dXJuCXJldFZhbDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19sYXJnZV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJdWludDhfdAkJdWk4XzEJPSAqKHVpbnQ4X3QqKWFyZ3NbMF07CisJaW50OF90CQlzaThfMQk9ICooaW50OF90KilhcmdzWzFdOworCXVpbnQxNl90CXVpMTZfMQk9ICoodWludDE2X3QqKWFyZ3NbMl07CisJaW50MTZfdAkJc2kxNl8xCT0gKihpbnQxNl90KilhcmdzWzNdOworCXVpbnQzMl90CXVpMzJfMQk9ICoodWludDMyX3QqKWFyZ3NbNF07CisJaW50MzJfdAkJc2kzMl8xCT0gKihpbnQzMl90KilhcmdzWzVdOworCXVpbnQ2NF90CXVpNjRfMQk9ICoodWludDY0X3QqKWFyZ3NbNl07CisJaW50NjRfdAkJc2k2NF8xCT0gKihpbnQ2NF90KilhcmdzWzddOworCWZsb2F0CQlmXzEJCT0gKihmbG9hdCopYXJnc1s4XTsKKwlkb3VibGUJCWRfMQkJPSAqKGRvdWJsZSopYXJnc1s5XTsKKwlsb25nIGRvdWJsZQlsZF8xCT0gKihsb25nIGRvdWJsZSopYXJnc1sxMF07CisJY2hhcioJCXBfMQkJPSAqKGNoYXIqKilhcmdzWzExXTsKKwl1aW50OF90CQl1aThfMgk9ICoodWludDhfdCopYXJnc1sxMl07CisJaW50OF90CQlzaThfMgk9ICooaW50OF90KilhcmdzWzEzXTsKKwl1aW50MTZfdAl1aTE2XzIJPSAqKHVpbnQxNl90KilhcmdzWzE0XTsKKwlpbnQxNl90CQlzaTE2XzIJPSAqKGludDE2X3QqKWFyZ3NbMTVdOworCXVpbnQzMl90CXVpMzJfMgk9ICoodWludDMyX3QqKWFyZ3NbMTZdOworCWludDMyX3QJCXNpMzJfMgk9ICooaW50MzJfdCopYXJnc1sxN107CisJdWludDY0X3QJdWk2NF8yCT0gKih1aW50NjRfdCopYXJnc1sxOF07CisJaW50NjRfdAkJc2k2NF8yCT0gKihpbnQ2NF90KilhcmdzWzE5XTsKKwlmbG9hdAkJZl8yCQk9ICooZmxvYXQqKWFyZ3NbMjBdOworCWRvdWJsZQkJZF8yCQk9ICooZG91YmxlKilhcmdzWzIxXTsKKwlsb25nIGRvdWJsZQlsZF8yCT0gKihsb25nIGRvdWJsZSopYXJnc1syMl07CisJY2hhcioJCXBfMgkJPSAqKGNoYXIqKilhcmdzWzIzXTsKKwl1aW50OF90CQl1aThfMwk9ICoodWludDhfdCopYXJnc1syNF07CisJaW50OF90CQlzaThfMwk9ICooaW50OF90KilhcmdzWzI1XTsKKwl1aW50MTZfdAl1aTE2XzMJPSAqKHVpbnQxNl90KilhcmdzWzI2XTsKKwlpbnQxNl90CQlzaTE2XzMJPSAqKGludDE2X3QqKWFyZ3NbMjddOworCXVpbnQzMl90CXVpMzJfMwk9ICoodWludDMyX3QqKWFyZ3NbMjhdOworCWludDMyX3QJCXNpMzJfMwk9ICooaW50MzJfdCopYXJnc1syOV07CisJdWludDY0X3QJdWk2NF8zCT0gKih1aW50NjRfdCopYXJnc1szMF07CisJaW50NjRfdAkJc2k2NF8zCT0gKihpbnQ2NF90KilhcmdzWzMxXTsKKwlmbG9hdAkJZl8zCQk9ICooZmxvYXQqKWFyZ3NbMzJdOworCWRvdWJsZQkJZF8zCQk9ICooZG91YmxlKilhcmdzWzMzXTsKKwlsb25nIGRvdWJsZQlsZF8zCT0gKihsb25nIGRvdWJsZSopYXJnc1szNF07CisJY2hhcioJCXBfMwkJPSAqKGNoYXIqKilhcmdzWzM1XTsKKwl1aW50OF90CQl1aThfNAk9ICoodWludDhfdCopYXJnc1szNl07CisJaW50OF90CQlzaThfNAk9ICooaW50OF90KilhcmdzWzM3XTsKKwl1aW50MTZfdAl1aTE2XzQJPSAqKHVpbnQxNl90KilhcmdzWzM4XTsKKwlpbnQxNl90CQlzaTE2XzQJPSAqKGludDE2X3QqKWFyZ3NbMzldOworCXVpbnQzMl90CXVpMzJfNAk9ICoodWludDMyX3QqKWFyZ3NbNDBdOworCWludDMyX3QJCXNpMzJfNAk9ICooaW50MzJfdCopYXJnc1s0MV07CisJdWludDY0X3QJdWk2NF80CT0gKih1aW50NjRfdCopYXJnc1s0Ml07CisJaW50NjRfdAkJc2k2NF80CT0gKihpbnQ2NF90KilhcmdzWzQzXTsKKwlmbG9hdAkJZl80CQk9ICooZmxvYXQqKWFyZ3NbNDRdOworCWRvdWJsZQkJZF80CQk9ICooZG91YmxlKilhcmdzWzQ1XTsKKwlsb25nIGRvdWJsZQlsZF80CT0gKihsb25nIGRvdWJsZSopYXJnc1s0Nl07CisJY2hhcioJCXBfNAkJPSAqKGNoYXIqKilhcmdzWzQ3XTsKKwl1aW50OF90CQl1aThfNQk9ICoodWludDhfdCopYXJnc1s0OF07CisJaW50OF90CQlzaThfNQk9ICooaW50OF90KilhcmdzWzQ5XTsKKworCSooQmlnU3RydWN0KilyZXNwID0gdGVzdF9sYXJnZV9mbigKKwkJdWk4XzEsIHNpOF8xLCB1aTE2XzEsIHNpMTZfMSwgdWkzMl8xLCBzaTMyXzEsIHVpNjRfMSwgc2k2NF8xLCBmXzEsIGRfMSwgbGRfMSwgcF8xLAorCQl1aThfMiwgc2k4XzIsIHVpMTZfMiwgc2kxNl8yLCB1aTMyXzIsIHNpMzJfMiwgdWk2NF8yLCBzaTY0XzIsIGZfMiwgZF8yLCBsZF8yLCBwXzIsCisJCXVpOF8zLCBzaThfMywgdWkxNl8zLCBzaTE2XzMsIHVpMzJfMywgc2kzMl8zLCB1aTY0XzMsIHNpNjRfMywgZl8zLCBkXzMsIGxkXzMsIHBfMywKKwkJdWk4XzQsIHNpOF80LCB1aTE2XzQsIHNpMTZfNCwgdWkzMl80LCBzaTMyXzQsIHVpNjRfNCwgc2k2NF80LCBmXzQsIGRfNCwgbGRfNCwgcF80LAorCQl1aThfNSwgc2k4XzUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgX19VTlVTRURfXywgY29uc3QgY2hhcioqIGFyZ3YgX19VTlVTRURfXykKK3sKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCisJZmZpX2NpZgkJY2lmOworCWZmaV90eXBlKglhcmdUeXBlc1s1MV07CisJdm9pZCoJCWFyZ1ZhbHVlc1s1MV07CisKKwlmZmlfdHlwZQlyZXRfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqCXN0X2ZpZWxkc1s1MV07CisJQmlnU3RydWN0CXJldFZhbDsKKworCW1lbXNldCAoJnJldFZhbCwgMCwgc2l6ZW9mKHJldFZhbCkpOworCisJcmV0X3N0cnVjdF90eXBlLnNpemUgPSAwOworCXJldF9zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworCXJldF9zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXJldF9zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IHN0X2ZpZWxkczsKKworCXN0X2ZpZWxkc1swXQk9IHN0X2ZpZWxkc1sxMl0JPSBzdF9maWVsZHNbMjRdCT0gc3RfZmllbGRzWzM2XQk9IHN0X2ZpZWxkc1s0OF0JPSAmZmZpX3R5cGVfdWludDg7CisJc3RfZmllbGRzWzFdCT0gc3RfZmllbGRzWzEzXQk9IHN0X2ZpZWxkc1syNV0JPSBzdF9maWVsZHNbMzddCT0gc3RfZmllbGRzWzQ5XQk9ICZmZmlfdHlwZV9zaW50ODsKKwlzdF9maWVsZHNbMl0JPSBzdF9maWVsZHNbMTRdCT0gc3RfZmllbGRzWzI2XQk9IHN0X2ZpZWxkc1szOF0JPSAmZmZpX3R5cGVfdWludDE2OworCXN0X2ZpZWxkc1szXQk9IHN0X2ZpZWxkc1sxNV0JPSBzdF9maWVsZHNbMjddCT0gc3RfZmllbGRzWzM5XQk9ICZmZmlfdHlwZV9zaW50MTY7CisJc3RfZmllbGRzWzRdCT0gc3RfZmllbGRzWzE2XQk9IHN0X2ZpZWxkc1syOF0JPSBzdF9maWVsZHNbNDBdCT0gJmZmaV90eXBlX3VpbnQzMjsKKwlzdF9maWVsZHNbNV0JPSBzdF9maWVsZHNbMTddCT0gc3RfZmllbGRzWzI5XQk9IHN0X2ZpZWxkc1s0MV0JPSAmZmZpX3R5cGVfc2ludDMyOworCXN0X2ZpZWxkc1s2XQk9IHN0X2ZpZWxkc1sxOF0JPSBzdF9maWVsZHNbMzBdCT0gc3RfZmllbGRzWzQyXQk9ICZmZmlfdHlwZV91aW50NjQ7CisJc3RfZmllbGRzWzddCT0gc3RfZmllbGRzWzE5XQk9IHN0X2ZpZWxkc1szMV0JPSBzdF9maWVsZHNbNDNdCT0gJmZmaV90eXBlX3NpbnQ2NDsKKwlzdF9maWVsZHNbOF0JPSBzdF9maWVsZHNbMjBdCT0gc3RfZmllbGRzWzMyXQk9IHN0X2ZpZWxkc1s0NF0JPSAmZmZpX3R5cGVfZmxvYXQ7CisJc3RfZmllbGRzWzldCT0gc3RfZmllbGRzWzIxXQk9IHN0X2ZpZWxkc1szM10JPSBzdF9maWVsZHNbNDVdCT0gJmZmaV90eXBlX2RvdWJsZTsKKwlzdF9maWVsZHNbMTBdCT0gc3RfZmllbGRzWzIyXQk9IHN0X2ZpZWxkc1szNF0JPSBzdF9maWVsZHNbNDZdCT0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJc3RfZmllbGRzWzExXQk9IHN0X2ZpZWxkc1syM10JPSBzdF9maWVsZHNbMzVdCT0gc3RfZmllbGRzWzQ3XQk9ICZmZmlfdHlwZV9wb2ludGVyOworCisJc3RfZmllbGRzWzUwXSA9IE5VTEw7CisKKwl1aW50OF90CQl1aTgJCT0gMTsKKwlpbnQ4X3QJCXNpOAkJPSAyOworCXVpbnQxNl90CXVpMTYJPSAzOworCWludDE2X3QJCXNpMTYJPSA0OworCXVpbnQzMl90CXVpMzIJPSA1OworCWludDMyX3QJCXNpMzIJPSA2OworCXVpbnQ2NF90CXVpNjQJPSA3OworCWludDY0X3QJCXNpNjQJPSA4OworCWZsb2F0CQlmCQk9IDk7CisJZG91YmxlCQlkCQk9IDEwOworCWxvbmcgZG91YmxlCWxkCQk9IDExOworCWNoYXIqCQlwCQk9IChjaGFyKikweDEyMzQ1Njc4OworCisJYXJnVHlwZXNbMF0JCT0gYXJnVHlwZXNbMTJdCT0gYXJnVHlwZXNbMjRdCT0gYXJnVHlwZXNbMzZdCT0gYXJnVHlwZXNbNDhdCT0gJmZmaV90eXBlX3VpbnQ4OworCWFyZ1ZhbHVlc1swXQk9IGFyZ1ZhbHVlc1sxMl0JPSBhcmdWYWx1ZXNbMjRdCT0gYXJnVmFsdWVzWzM2XQk9IGFyZ1ZhbHVlc1s0OF0JPSAmdWk4OworCWFyZ1R5cGVzWzFdCQk9IGFyZ1R5cGVzWzEzXQk9IGFyZ1R5cGVzWzI1XQk9IGFyZ1R5cGVzWzM3XQk9IGFyZ1R5cGVzWzQ5XQk9ICZmZmlfdHlwZV9zaW50ODsKKwlhcmdWYWx1ZXNbMV0JPSBhcmdWYWx1ZXNbMTNdCT0gYXJnVmFsdWVzWzI1XQk9IGFyZ1ZhbHVlc1szN10JPSBhcmdWYWx1ZXNbNDldCT0gJnNpODsKKwlhcmdUeXBlc1syXQkJPSBhcmdUeXBlc1sxNF0JPSBhcmdUeXBlc1syNl0JPSBhcmdUeXBlc1szOF0JPSAmZmZpX3R5cGVfdWludDE2OworCWFyZ1ZhbHVlc1syXQk9IGFyZ1ZhbHVlc1sxNF0JPSBhcmdWYWx1ZXNbMjZdCT0gYXJnVmFsdWVzWzM4XQk9ICZ1aTE2OworCWFyZ1R5cGVzWzNdCQk9IGFyZ1R5cGVzWzE1XQk9IGFyZ1R5cGVzWzI3XQk9IGFyZ1R5cGVzWzM5XQk9ICZmZmlfdHlwZV9zaW50MTY7CisJYXJnVmFsdWVzWzNdCT0gYXJnVmFsdWVzWzE1XQk9IGFyZ1ZhbHVlc1syN10JPSBhcmdWYWx1ZXNbMzldCT0gJnNpMTY7CisJYXJnVHlwZXNbNF0JCT0gYXJnVHlwZXNbMTZdCT0gYXJnVHlwZXNbMjhdCT0gYXJnVHlwZXNbNDBdCT0gJmZmaV90eXBlX3VpbnQzMjsKKwlhcmdWYWx1ZXNbNF0JPSBhcmdWYWx1ZXNbMTZdCT0gYXJnVmFsdWVzWzI4XQk9IGFyZ1ZhbHVlc1s0MF0JPSAmdWkzMjsKKwlhcmdUeXBlc1s1XQkJPSBhcmdUeXBlc1sxN10JPSBhcmdUeXBlc1syOV0JPSBhcmdUeXBlc1s0MV0JPSAmZmZpX3R5cGVfc2ludDMyOworCWFyZ1ZhbHVlc1s1XQk9IGFyZ1ZhbHVlc1sxN10JPSBhcmdWYWx1ZXNbMjldCT0gYXJnVmFsdWVzWzQxXQk9ICZzaTMyOworCWFyZ1R5cGVzWzZdCQk9IGFyZ1R5cGVzWzE4XQk9IGFyZ1R5cGVzWzMwXQk9IGFyZ1R5cGVzWzQyXQk9ICZmZmlfdHlwZV91aW50NjQ7CisJYXJnVmFsdWVzWzZdCT0gYXJnVmFsdWVzWzE4XQk9IGFyZ1ZhbHVlc1szMF0JPSBhcmdWYWx1ZXNbNDJdCT0gJnVpNjQ7CisJYXJnVHlwZXNbN10JCT0gYXJnVHlwZXNbMTldCT0gYXJnVHlwZXNbMzFdCT0gYXJnVHlwZXNbNDNdCT0gJmZmaV90eXBlX3NpbnQ2NDsKKwlhcmdWYWx1ZXNbN10JPSBhcmdWYWx1ZXNbMTldCT0gYXJnVmFsdWVzWzMxXQk9IGFyZ1ZhbHVlc1s0M10JPSAmc2k2NDsKKwlhcmdUeXBlc1s4XQkJPSBhcmdUeXBlc1syMF0JPSBhcmdUeXBlc1szMl0JPSBhcmdUeXBlc1s0NF0JPSAmZmZpX3R5cGVfZmxvYXQ7CisJYXJnVmFsdWVzWzhdCT0gYXJnVmFsdWVzWzIwXQk9IGFyZ1ZhbHVlc1szMl0JPSBhcmdWYWx1ZXNbNDRdCT0gJmY7CisJYXJnVHlwZXNbOV0JCT0gYXJnVHlwZXNbMjFdCT0gYXJnVHlwZXNbMzNdCT0gYXJnVHlwZXNbNDVdCT0gJmZmaV90eXBlX2RvdWJsZTsKKwlhcmdWYWx1ZXNbOV0JPSBhcmdWYWx1ZXNbMjFdCT0gYXJnVmFsdWVzWzMzXQk9IGFyZ1ZhbHVlc1s0NV0JPSAmZDsKKwlhcmdUeXBlc1sxMF0JPSBhcmdUeXBlc1syMl0JPSBhcmdUeXBlc1szNF0JPSBhcmdUeXBlc1s0Nl0JPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdWYWx1ZXNbMTBdCT0gYXJnVmFsdWVzWzIyXQk9IGFyZ1ZhbHVlc1szNF0JPSBhcmdWYWx1ZXNbNDZdCT0gJmxkOworCWFyZ1R5cGVzWzExXQk9IGFyZ1R5cGVzWzIzXQk9IGFyZ1R5cGVzWzM1XQk9IGFyZ1R5cGVzWzQ3XQk9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ1ZhbHVlc1sxMV0JPSBhcmdWYWx1ZXNbMjNdCT0gYXJnVmFsdWVzWzM1XQk9IGFyZ1ZhbHVlc1s0N10JPSAmcDsKKworCWFyZ1R5cGVzWzUwXQk9IE5VTEw7CisJYXJnVmFsdWVzWzUwXQk9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA1MCwgJnJldF9zdHJ1Y3RfdHlwZSwgYXJnVHlwZXMpID09IEZGSV9PSyk7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9sYXJnZV9mbiksICZyZXRWYWwsIGFyZ1ZhbHVlcyk7CisJLy8geyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyOiAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMHgxMjM0NTY3OSAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDB4MTIzNDU2N2EgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMHgxMjM0NTY3YiA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMHgxMjM0NTY3YyA2IDciIH0KKwlwcmludGYoInJlczogJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggJWhodSAlaGhkXG4iLAorCQlyZXRWYWwuYSwgcmV0VmFsLmIsIHJldFZhbC5jLCByZXRWYWwuZCwgcmV0VmFsLmUsIHJldFZhbC5mLAorCSAgICAgICByZXRWYWwuZywgcmV0VmFsLmgsIHJldFZhbC5pLCByZXRWYWwuaiwgcmV0VmFsLmssICh1bnNpZ25lZCBsb25nKXJldFZhbC5sLAorCQlyZXRWYWwubSwgcmV0VmFsLm4sIHJldFZhbC5vLCByZXRWYWwucCwgcmV0VmFsLnEsIHJldFZhbC5yLAorCSAgICAgICByZXRWYWwucywgcmV0VmFsLnQsIHJldFZhbC51LCByZXRWYWwudiwgcmV0VmFsLncsICh1bnNpZ25lZCBsb25nKXJldFZhbC54LAorCQlyZXRWYWwueSwgcmV0VmFsLnosIHJldFZhbC5hYSwgcmV0VmFsLmJiLCByZXRWYWwuY2MsIHJldFZhbC5kZCwKKwkgICAgICAgcmV0VmFsLmVlLCByZXRWYWwuZmYsIHJldFZhbC5nZywgcmV0VmFsLmhoLCByZXRWYWwuaWksICh1bnNpZ25lZCBsb25nKXJldFZhbC5qaiwKKwkJcmV0VmFsLmtrLCByZXRWYWwubGwsIHJldFZhbC5tbSwgcmV0VmFsLm5uLCByZXRWYWwub28sIHJldFZhbC5wcCwKKwkgICAgICAgcmV0VmFsLnFxLCByZXRWYWwucnIsIHJldFZhbC5zcywgcmV0VmFsLnR0LCByZXRWYWwudXUsICh1bnNpZ25lZCBsb25nKXJldFZhbC52diwgcmV0VmFsLnd3LCByZXRWYWwueHgpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDB4MTIzNDU2NzkgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAweDEyMzQ1NjdhIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDB4MTIzNDU2N2IgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDB4MTIzNDU2N2MgNiA3IiB9CisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19sYXJnZV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJldFZhbAk9ICgoQmlnU3RydWN0KCopKAorCQl1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90LCBpbnQxNl90LCB1aW50MzJfdCwgaW50MzJfdCwgdWludDY0X3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlLCBjaGFyKiwKKwkJdWludDhfdCwgaW50OF90LCB1aW50MTZfdCwgaW50MTZfdCwgdWludDMyX3QsIGludDMyX3QsIHVpbnQ2NF90LCBpbnQ2NF90LCBmbG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZSwgY2hhciosCisJCXVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QsIGludDE2X3QsIHVpbnQzMl90LCBpbnQzMl90LCB1aW50NjRfdCwgaW50NjRfdCwgZmxvYXQsIGRvdWJsZSwgbG9uZyBkb3VibGUsIGNoYXIqLAorCQl1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90LCBpbnQxNl90LCB1aW50MzJfdCwgaW50MzJfdCwgdWludDY0X3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlLCBjaGFyKiwKKwkJdWludDhfdCwgaW50OF90KSkoY29kZSkpKAorCQl1aTgsIHNpOCwgdWkxNiwgc2kxNiwgdWkzMiwgc2kzMiwgdWk2NCwgc2k2NCwgZiwgZCwgbGQsIHAsCisJCXVpOCwgc2k4LCB1aTE2LCBzaTE2LCB1aTMyLCBzaTMyLCB1aTY0LCBzaTY0LCBmLCBkLCBsZCwgcCwKKwkJdWk4LCBzaTgsIHVpMTYsIHNpMTYsIHVpMzIsIHNpMzIsIHVpNjQsIHNpNjQsIGYsIGQsIGxkLCBwLAorCQl1aTgsIHNpOCwgdWkxNiwgc2kxNiwgdWkzMiwgc2kzMiwgdWk2NCwgc2k2NCwgZiwgZCwgbGQsIHAsCisJCXVpOCwgc2k4KTsKKwkvLyB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMjogMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDB4MTIzNDU2NzkgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAweDEyMzQ1NjdhIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDB4MTIzNDU2N2IgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDB4MTIzNDU2N2MgNiA3IiB9CisJcHJpbnRmKCJyZXM6ICVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICVoaHUgJWhoZFxuIiwKKwkJcmV0VmFsLmEsIHJldFZhbC5iLCByZXRWYWwuYywgcmV0VmFsLmQsIHJldFZhbC5lLCByZXRWYWwuZiwKKwkgICAgICAgcmV0VmFsLmcsIHJldFZhbC5oLCByZXRWYWwuaSwgcmV0VmFsLmosIHJldFZhbC5rLCAodW5zaWduZWQgbG9uZylyZXRWYWwubCwKKwkJcmV0VmFsLm0sIHJldFZhbC5uLCByZXRWYWwubywgcmV0VmFsLnAsIHJldFZhbC5xLCByZXRWYWwuciwKKwkgICAgICAgcmV0VmFsLnMsIHJldFZhbC50LCByZXRWYWwudSwgcmV0VmFsLnYsIHJldFZhbC53LCAodW5zaWduZWQgbG9uZylyZXRWYWwueCwKKwkJcmV0VmFsLnksIHJldFZhbC56LCByZXRWYWwuYWEsIHJldFZhbC5iYiwgcmV0VmFsLmNjLCByZXRWYWwuZGQsCisJICAgICAgIHJldFZhbC5lZSwgcmV0VmFsLmZmLCByZXRWYWwuZ2csIHJldFZhbC5oaCwgcmV0VmFsLmlpLCAodW5zaWduZWQgbG9uZylyZXRWYWwuamosCisJCXJldFZhbC5raywgcmV0VmFsLmxsLCByZXRWYWwubW0sIHJldFZhbC5ubiwgcmV0VmFsLm9vLCByZXRWYWwucHAsCisJICAgICAgIHJldFZhbC5xcSwgcmV0VmFsLnJyLCByZXRWYWwuc3MsIHJldFZhbC50dCwgcmV0VmFsLnV1LCAodW5zaWduZWQgbG9uZylyZXRWYWwudnYsIHJldFZhbC53dywgcmV0VmFsLnh4KTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAweDEyMzQ1Njc5IDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMHgxMjM0NTY3YSA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAweDEyMzQ1NjdiIDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAweDEyMzQ1NjdjIDYgNyIgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2OWJhOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYwpAQCAtMCwwICsxLDY5IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LCB3aXRoIG1hbnkgYXJndW1lbnRzCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKK3N0YXRpYyBmbG9hdCBtYW55KGZsb2F0IGYxLAorCQkgIGZsb2F0IGYyLAorCQkgIGZsb2F0IGYzLAorCQkgIGZsb2F0IGY0LAorCQkgIGZsb2F0IGY1LAorCQkgIGZsb2F0IGY2LAorCQkgIGZsb2F0IGY3LAorCQkgIGZsb2F0IGY4LAorCQkgIGZsb2F0IGY5LAorCQkgIGZsb2F0IGYxMCwKKwkJICBmbG9hdCBmMTEsCisJCSAgZmxvYXQgZjEyLAorCQkgIGZsb2F0IGYxMykKK3sKKyNpZiAwCisgIHByaW50ZigiJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWZcbiIsCisJIChkb3VibGUpIGYxLCAoZG91YmxlKSBmMiwgKGRvdWJsZSkgZjMsIChkb3VibGUpIGY0LCAoZG91YmxlKSBmNSwgCisJIChkb3VibGUpIGY2LCAoZG91YmxlKSBmNywgKGRvdWJsZSkgZjgsIChkb3VibGUpIGY5LCAoZG91YmxlKSBmMTAsCisJIChkb3VibGUpIGYxMSwgKGRvdWJsZSkgZjEyLCAoZG91YmxlKSBmMTMpOworI2VuZGlmCisKKyAgcmV0dXJuICgoZjEvZjIrZjMvZjQrZjUvZjYrZjcvZjgrZjkvZjEwK2YxMS9mMTIpICogZjEzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1sxM107CisgIHZvaWQgKnZhbHVlc1sxM107CisgIGZsb2F0IGZhWzEzXTsKKyAgZmxvYXQgZiwgZmY7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQorICAgIHsKKyAgICAgIGFyZ3NbaV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICB2YWx1ZXNbaV0gPSAmZmFbaV07CisgICAgICBmYVtpXSA9IChmbG9hdCkgaTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxMywgCisJCSAgICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obWFueSksICZmLCB2YWx1ZXMpOworCisgICAgZmYgPSAgbWFueShmYVswXSwgZmFbMV0sCisJICAgICAgIGZhWzJdLCBmYVszXSwKKwkgICAgICAgZmFbNF0sIGZhWzVdLAorCSAgICAgICBmYVs2XSwgZmFbN10sCisJICAgICAgIGZhWzhdLCBmYVs5XSwKKwkgICAgICAgZmFbMTBdLGZhWzExXSxmYVsxMl0pOworCisgICAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQorICAgICAgZXhpdCgwKTsKKyAgICBlbHNlCisgICAgICBhYm9ydCgpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjYzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMKQEAgLTAsMCArMSw2MyBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgbWFueSBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworc3RhdGljIGZsb2F0IF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSBzdGRjYWxsX21hbnkoZmxvYXQgZjEsCisJCQkJCQkgICBmbG9hdCBmMiwKKwkJCQkJCSAgIGZsb2F0IGYzLAorCQkJCQkJICAgZmxvYXQgZjQsCisJCQkJCQkgICBmbG9hdCBmNSwKKwkJCQkJCSAgIGZsb2F0IGY2LAorCQkJCQkJICAgZmxvYXQgZjcsCisJCQkJCQkgICBmbG9hdCBmOCwKKwkJCQkJCSAgIGZsb2F0IGY5LAorCQkJCQkJICAgZmxvYXQgZjEwLAorCQkJCQkJICAgZmxvYXQgZjExLAorCQkJCQkJICAgZmxvYXQgZjEyLAorCQkJCQkJICAgZmxvYXQgZjEzKQoreworICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzWzEzXTsKKyAgdm9pZCAqdmFsdWVzWzEzXTsKKyAgZmxvYXQgZmFbMTNdOworICBmbG9hdCBmLCBmZjsKKyAgdW5zaWduZWQgbG9uZyB1bDsKKworICBmb3IgKHVsID0gMDsgdWwgPCAxMzsgdWwrKykKKyAgICB7CisgICAgICBhcmdzW3VsXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIHZhbHVlc1t1bF0gPSAmZmFbdWxdOworCWZhW3VsXSA9IChmbG9hdCkgdWw7CisgICAgfQorCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDEzLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKworICBmZiA9ICBzdGRjYWxsX21hbnkoZmFbMF0sIGZhWzFdLAorCQkgICAgIGZhWzJdLCBmYVszXSwKKwkJICAgICBmYVs0XSwgZmFbNV0sCisJCSAgICAgZmFbNl0sIGZhWzddLAorCQkgICAgIGZhWzhdLCBmYVs5XSwKKwkJICAgICBmYVsxMF0sIGZhWzExXSwgZmFbMTJdKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RkY2FsbF9tYW55KSwgJmYsIHZhbHVlcyk7CisKKyAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQorICAgIHByaW50Zigic3RkY2FsbCBtYW55IGFyZyB0ZXN0cyBvayFcbiIpOworICBlbHNlCisgICAgQ0hFQ0soMCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjgxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYwpAQCAtMCwwICsxLDUzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgdGhhdCBuZWdhdGl2ZSBpbnRlZ2VycyBhcmUgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgLU8yIH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGludCBjaGVja2luZyhpbnQgYSwgc2hvcnQgYiwgc2lnbmVkIGNoYXIgYykKK3sKKworICByZXR1cm4gKGEgPCAwICYmIGIgPCAwICYmIGMgPCAwKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICBzaWduZWQgaW50IHNpOworICBzaWduZWQgc2hvcnQgc3M7CisgIHNpZ25lZCBjaGFyIHNjOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJnNpOworICBhcmdzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgdmFsdWVzWzFdID0gJnNzOworICBhcmdzWzJdID0gJmZmaV90eXBlX3NjaGFyOworICB2YWx1ZXNbMl0gPSAmc2M7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgc2kgPSAtNjsKKyAgc3MgPSAtMTI7CisgIHNjID0gLTE7CisKKyAgY2hlY2tpbmcgKHNpLCBzcywgc2MpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjaGVja2luZyksICZyaW50LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVkIHZzICVkXG4iLCAoaW50KXJpbnQsIGNoZWNraW5nIChzaSwgc3MsIHNjKSk7CisKKyAgQ0hFQ0socmludCAhPSAwKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWE1MjdlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSB7CisgIGRvdWJsZSBhOworICBmbG9hdCBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xNmJ5dGUxOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgeworICBpbnQgaWk7CisgIGRvdWJsZSBkZDsKKyAgZmxvYXQgZmY7Cit9IGNsc19zdHJ1Y3RfMTZieXRlMjsKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGNsc19zdHJ1Y3RfMTZieXRlMSBkOworICBjbHNfc3RydWN0XzE2Ynl0ZTIgZTsKK30gY2xzX3N0cnVjdF9jb21iaW5lZDsKKworY2xzX3N0cnVjdF9jb21iaW5lZCBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjAsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgcmVzdWx0OworCisgIHJlc3VsdC5kLmEgPSBiMC5hICsgYjEuZGQgKyBiMi5kLmE7CisgIHJlc3VsdC5kLmIgPSBiMC5iICsgYjEuZmYgKyBiMi5kLmI7CisgIHJlc3VsdC5kLmMgPSBiMC5jICsgYjEuaWkgKyBiMi5kLmM7CisgIHJlc3VsdC5lLmlpID0gYjAuYyArIGIxLmlpICsgYjIuZS5paTsKKyAgcmVzdWx0LmUuZGQgPSBiMC5hICsgYjEuZGQgKyBiMi5lLmRkOworICByZXN1bHQuZS5mZiA9IGIwLmIgKyBiMS5mZiArIGIyLmUuZmY7CisKKyAgcHJpbnRmKCIlZyAlZyAlZCAlZCAlZyAlZyAlZyAlZyAlZCAlZCAlZyAlZzogJWcgJWcgJWQgJWQgJWcgJWdcbiIsCisJIGIwLmEsIGIwLmIsIGIwLmMsCisJIGIxLmlpLCBiMS5kZCwgYjEuZmYsCisJIGIyLmQuYSwgYjIuZC5iLCBiMi5kLmMsCisJIGIyLmUuaWksIGIyLmUuZGQsIGIyLmUuZmYsCisJIHJlc3VsdC5kLmEsIHJlc3VsdC5kLmIsIHJlc3VsdC5kLmMsCisJIHJlc3VsdC5lLmlpLCByZXN1bHQuZS5kZCwgcmVzdWx0LmUuZmYpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2NvbWJpbmVkX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjA7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgYjE7CisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGIyOworCisgIGIwID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUyKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCopKGFyZ3NbMl0pOworCisKKyAgKihjbHNfc3RydWN0X2NvbWJpbmVkKilyZXNwID0gY2xzX3N0cnVjdF9jb21iaW5lZF9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGVfZGJsID0geyA5LjAsIDIuMCwgNn07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgZl9kYmwgPSB7IDEsIDIuMCwgMy4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgZ19kYmwgPSB7ezQuMCwgNS4wLCA2fSwKKwkJCQkgICAgICB7MywgMS4wLCA4LjB9fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzNdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczJbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczJbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTIsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfY29tYmluZWRfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiOSAyIDYgMSAyIDMgNCA1IDYgMyAxIDg6IDE1IDEwIDEzIDEwIDEyIDEzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLmQuYSA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZC5hKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZC5iKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYyA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZC5jKSk7CisgIENIRUNLKCByZXNfZGJsLmUuaWkgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmUuaWkpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5kZCA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZS5kZCkpOworICBDSEVDSyggcmVzX2RibC5lLmZmID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5lLmZmKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2NvbWJpbmVkX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfY29tYmluZWQoKikoY2xzX3N0cnVjdF8xNmJ5dGUxLAorCQkJCSAgICAgY2xzX3N0cnVjdF8xNmJ5dGUyLAorCQkJCSAgICAgY2xzX3N0cnVjdF9jb21iaW5lZCkpCisJICAgICAoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG45IDIgNiAxIDIgMyA0IDUgNiAzIDEgODogMTUgMTAgMTMgMTAgMTIgMTMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwuZC5hID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5kLmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5iID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5kLmIpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5jID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5kLmMpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5paSA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZS5paSkpOworICBDSEVDSyggcmVzX2RibC5lLmRkID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5lLmRkKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZmYgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmUuZmYpKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWY1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jCkBAIC0wLDAgKzEsMTYxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSB7CisgIGRvdWJsZSBhOworICBmbG9hdCBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xNmJ5dGUxOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgeworICBpbnQgaWk7CisgIGRvdWJsZSBkZDsKKyAgZmxvYXQgZmY7Cit9IGNsc19zdHJ1Y3RfMTZieXRlMjsKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGNsc19zdHJ1Y3RfMTZieXRlMSBkOworICBjbHNfc3RydWN0XzE2Ynl0ZTIgZTsKK30gY2xzX3N0cnVjdF9jb21iaW5lZDsKKworY2xzX3N0cnVjdF9jb21iaW5lZCBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjAsCisJCQkJCSAgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgYjEsCisJCQkJCSAgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGIyLAorCQkJCQkgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGIzKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXN1bHQ7CisKKyAgcmVzdWx0LmQuYSA9IGIwLmEgKyBiMS5kZCArIGIyLmQuYTsKKyAgcmVzdWx0LmQuYiA9IGIwLmIgKyBiMS5mZiArIGIyLmQuYjsKKyAgcmVzdWx0LmQuYyA9IGIwLmMgKyBiMS5paSArIGIyLmQuYzsKKyAgcmVzdWx0LmUuaWkgPSBiMC5jICsgYjEuaWkgKyBiMi5lLmlpOworICByZXN1bHQuZS5kZCA9IGIwLmEgKyBiMS5kZCArIGIyLmUuZGQ7CisgIHJlc3VsdC5lLmZmID0gYjAuYiArIGIxLmZmICsgYjIuZS5mZjsKKworICBwcmludGYoIiVnICVnICVkICVkICVnICVnICVnICVnICVkICVkICVnICVnICVnICVnICVkOiAlZyAlZyAlZCAlZCAlZyAlZ1xuIiwKKwkgYjAuYSwgYjAuYiwgYjAuYywKKwkgYjEuaWksIGIxLmRkLCBiMS5mZiwKKwkgYjIuZC5hLCBiMi5kLmIsIGIyLmQuYywKKwkgYjIuZS5paSwgYjIuZS5kZCwgYjIuZS5mZiwKKwkgYjMuYSwgYjMuYiwgYjMuYywKKwkgcmVzdWx0LmQuYSwgcmVzdWx0LmQuYiwgcmVzdWx0LmQuYywKKwkgcmVzdWx0LmUuaWksIHJlc3VsdC5lLmRkLCByZXN1bHQuZS5mZik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfY29tYmluZWRfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMDsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgYjI7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjM7CisKKyAgYjAgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkKikoYXJnc1syXSk7CisgIGIzID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxKikoYXJnc1szXSk7CisKKworICAqKGNsc19zdHJ1Y3RfY29tYmluZWQqKXJlc3AgPSBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGVfZGJsID0geyA5LjAsIDIuMCwgNn07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgZl9kYmwgPSB7IDEsIDIuMCwgMy4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgZ19kYmwgPSB7ezQuMCwgNS4wLCA2fSwKKwkJCQkgICAgICB7MywgMS4wLCA4LjB9fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBoX2RibCA9IHsgMy4wLCAyLjAsIDR9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczFbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZTIsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjkgMiA2IDEgMiAzIDQgNSA2IDMgMSA4IDMgMiA0OiAxNSAxMCAxMyAxMCAxMiAxMyIgfSAqLworICBDSEVDSyggcmVzX2RibC5kLmEgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmQuYSkpOworICBDSEVDSyggcmVzX2RibC5kLmIgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmQuYikpOworICBDSEVDSyggcmVzX2RibC5kLmMgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmQuYykpOworICBDSEVDSyggcmVzX2RibC5lLmlpID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5lLmlpKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZGQgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmUuZGQpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5mZiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZS5mZikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9jb21iaW5lZF9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2NvbWJpbmVkKCopKGNsc19zdHJ1Y3RfMTZieXRlMSwKKwkJCQkgICAgIGNsc19zdHJ1Y3RfMTZieXRlMiwKKwkJCQkgICAgIGNsc19zdHJ1Y3RfY29tYmluZWQsCisJCQkJICAgICBjbHNfc3RydWN0XzE2Ynl0ZTEpKQorCSAgICAgKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjkgMiA2IDEgMiAzIDQgNSA2IDMgMSA4IDMgMiA0OiAxNSAxMCAxMyAxMCAxMiAxMyIgfSAqLworICBDSEVDSyggcmVzX2RibC5kLmEgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmQuYSkpOworICBDSEVDSyggcmVzX2RibC5kLmIgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmQuYikpOworICBDSEVDSyggcmVzX2RibC5kLmMgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmQuYykpOworICBDSEVDSyggcmVzX2RibC5lLmlpID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5lLmlpKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZGQgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmUuZGQpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5mZiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZS5mZikpOworICAvLyAgQ0hFQ0soIDEgPT0gMCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YTcxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYwpAQCAtMCwwICsxLDEzMyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICB1bnNpZ25lZCBjaGFyIHk7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGludCB6OworfSBCOworCit0eXBlZGVmIHN0cnVjdCBDIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gQzsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMsIHN0cnVjdCBDIGI0KQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmEgKyBiMy56ICsgYjQuZDsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55ICsgYjQuZTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iICsgYjQuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LCBiMy56LCAoaW50KWI0LmQsIGI0LmUsCisJIChpbnQpcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworICBzdHJ1Y3QgQyBiMjsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgQyopKGFyZ3NbMl0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNF07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMlszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxLCBjbHNfc3RydWN0X3R5cGUyOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s0XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgY2xzX3N0cnVjdF90eXBlMi5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTIuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczI7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDFMTCwgN307CisgIHN0cnVjdCBCIGZfZGJsID0geyA5OSwgezEyTEwgLCAxMjd9LCAyNTV9OworICBzdHJ1Y3QgQyBnX2RibCA9IHsgMkxMLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9ICZmZmlfdHlwZV91aW50OworICBjbHNfc3RydWN0X2ZpZWxkczFbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OSAyNTUgMiA5OiAyNzAgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBmX2RibC56ICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIsIEMpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTkgMjU1IDIgOTogMjcwIDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZl9kYmwueiArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxNTg0YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTEJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICB1bnNpZ25lZCBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKworQiBCX2ZuKHN0cnVjdCBBIGIwLCBzdHJ1Y3QgQiBiMSkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMC5hICsgYjEueC5hOworICByZXN1bHQueC5iID0gYjAuYiArIGIxLnguYiArIGIxLnk7CisgIHJlc3VsdC55ID0gYjAuYiArIGIxLnguYjsKKworICBwcmludGYoIiVsdSAlZCAlbHUgJWQgJWQ6ICVsdSAlZCAlZFxuIiwgYjAuYSwgYjAuYiwgYjEueC5hLCBiMS54LmIsIGIxLnksCisJIHJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyICwgMTI3fSwgOTl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCKSkoY29kZSkpKGVfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFhODUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYwpAQCAtMCwwICsxLDExMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxMQkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK0IgQl9mbihzdHJ1Y3QgQSBiMCwgc3RydWN0IEIgYjEpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjAuYSArIGIxLnguYTsKKyAgcmVzdWx0LnguYiA9IGIwLmIgKyBiMS54LmIgKyBiMS55OworICByZXN1bHQueSA9IGIwLmIgKyBiMS54LmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjAuYSwgYjAuYiwKKwkgKGludCliMS54LmEsIGIxLnguYiwgYjEueSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTE7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMUxMLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyTEwgLCAxMjd9LCA5OX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU0OTFlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYwpAQCAtMCwwICsxLDExMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUiAyNTYzMC4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMykKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnk7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLjAsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgbG9uZyBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMykKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnk7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLjAsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmIyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSIDI1NjMwLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICBsb25nIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gQzsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMsIHN0cnVjdCBDIGI0KQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmEgKyBiNC5kOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnkgKyBiNC5lOworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmIgKyBiNC5lOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCAoaW50KWIyLmEsIGIyLmIsCisJIChpbnQpYjMueC5hLCBiMy54LmIsIGIzLnksIChpbnQpYjQuZCwgYjQuZSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisgIHN0cnVjdCBDIGIyOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBDKikoYXJnc1syXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzRdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMS4wLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyLjAgLCAxMjd9LCA5OX07CisgIHN0cnVjdCBDIGdfZGJsID0geyAyLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmZmaV90eXBlX3Nsb25nOworICBjbHNfc3RydWN0X2ZpZWxkczJbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTI7CisgIGRibF9hcmdfdHlwZXNbM10gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsICZjbHNfc3RydWN0X3R5cGUxLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbM10gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCLCBDKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzcwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYTsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55OworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjIuYSwgYjIuYiwKKwkgKGludCliMy54LmEsIGIzLnguYiwgYjMueSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTE7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMUxMLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyLjAgLCAxMjd9LCA5OX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCKSkoY29kZSkpKGVfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjc3ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwpAQCAtMCwwICsxLDEzMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICB1bnNpZ25lZCBsb25nIGxvbmcgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBDOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMywgc3RydWN0IEMgYjQpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYSArIGI0LmQ7CisgIHJlc3VsdC54LmIgPSBiMi5iICsgYjMueC5iICsgYjMueSArIGI0LmU7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYiArIGI0LmU7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjIuYSwgYjIuYiwKKwkgKGludCliMy54LmEsIGIzLnguYiwgYjMueSwgKGludCliNC5kLCBiNC5lLAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKyAgc3RydWN0IEMgYjI7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IEMqKShhcmdzWzJdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzRdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczJbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMSwgY2xzX3N0cnVjdF90eXBlMjsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNF07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIGNsc19zdHJ1Y3RfdHlwZTIuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUyLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMyOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxTEwsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTJMTCAsIDEyN30sIDk5fTsKKyAgc3RydWN0IEMgZ19kYmwgPSB7IDJMTCwgOX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIsIEMpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNTQxYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCit0eXBlZGVmIHN0cnVjdCBDIHsKKyAgdW5zaWduZWQgbG9uZyBkOworICB1bnNpZ25lZCBjaGFyIGU7Cit9IEM7CisKK3N0YXRpYyBCIEJfZm4oc3RydWN0IEEgYjIsIHN0cnVjdCBCIGIzLCBzdHJ1Y3QgQyBiNCkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hICsgYjQuZDsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55ICsgYjQuZTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iICsgYjQuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYjIuYSwgKGludCliMi5iLAorCSBiMy54LmEsIChpbnQpYjMueC5iLCBiMy55LCAoaW50KWI0LmQsIGI0LmUsCisJIHJlc3VsdC54LmEsIChpbnQpcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworICBzdHJ1Y3QgQyBiMjsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgQyopKGFyZ3NbMl0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNF07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMlszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxLCBjbHNfc3RydWN0X3R5cGUyOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s0XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgY2xzX3N0cnVjdF90eXBlMi5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTIuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczI7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDEsIDdMTH07CisgIHN0cnVjdCBCIGZfZGJsID0ge3sxMi4wICwgMTI3fSwgOTl9OworICBzdHJ1Y3QgQyBnX2RibCA9IHsgMiwgOX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91bG9uZzsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQiwgQykpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkxNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCB7CisgIGRvdWJsZSBhOworICBkb3VibGUgYjsKKyAgZG91YmxlIGM7Cit9IG15X2ZmaV9zdHJ1Y3Q7CisKK215X2ZmaV9zdHJ1Y3QgY2FsbGVlKHN0cnVjdCBteV9mZmlfc3RydWN0IGExLCBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBhMikKK3sKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgcmVzdWx0OworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisKKyAgcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZzogJWcgJWcgJWdcbiIsIGExLmEsIGExLmIsIGExLmMsCisJIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3R1YihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBhMTsKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBteV9mZmlfc3RydWN0KikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgbXlfZmZpX3N0cnVjdCopKGFyZ3NbMV0pOworCisgICoobXlfZmZpX3N0cnVjdCAqKXJlc3AgPSBjYWxsZWUoYTEsIGEyKTsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworICBmZmlfdHlwZSogbXlfZmZpX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIG15X2ZmaV9zdHJ1Y3RfdHlwZTsKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NbNF07CisgIGZmaV90eXBlKiBhcmdfdHlwZXNbM107CisKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgZyA9IHsgMS4wLCAyLjAsIDMuMCB9OworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBmID0geyAxLjAsIDIuMCwgMy4wIH07CisgIHN0cnVjdCBteV9mZmlfc3RydWN0IHJlczsKKworICBteV9mZmlfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIG15X2ZmaV9zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBteV9mZmlfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgbXlfZmZpX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gbXlfZmZpX3N0cnVjdF9maWVsZHM7CisKKyAgbXlfZmZpX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBteV9mZmlfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIG15X2ZmaV9zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgbXlfZmZpX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGFyZ190eXBlc1swXSA9ICZteV9mZmlfc3RydWN0X3R5cGU7CisgIGFyZ190eXBlc1sxXSA9ICZteV9mZmlfc3RydWN0X3R5cGU7CisgIGFyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJm15X2ZmaV9zdHJ1Y3RfdHlwZSwKKwkJICAgICBhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc1swXSA9ICZnOworICBhcmdzWzFdID0gJmY7CisgIGFyZ3NbMl0gPSBOVUxMOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2FsbGVlKSwgJnJlcywgYXJncyk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyAxIDIgMzogMiA0IDYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnXG4iLCByZXMuYSwgcmVzLmIsIHJlcy5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyIDQgNiIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgc3R1YiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKG15X2ZmaV9zdHJ1Y3QoKikoc3RydWN0IG15X2ZmaV9zdHJ1Y3QsIHN0cnVjdCBteV9mZmlfc3RydWN0KSkoY29kZSkpKGcsIGYpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyAxIDIgMzogMiA0IDYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnXG4iLCByZXMuYSwgcmVzLmIsIHJlcy5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyIDQgNiIgfSAqLworCisgIGV4aXQoMCk7OworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDU2MTYxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CVByb21vdGlvbiB0ZXN0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCitzdGF0aWMgaW50IHByb21vdGlvbihzaWduZWQgY2hhciBzYywgc2lnbmVkIHNob3J0IHNzLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgdWMsIHVuc2lnbmVkIHNob3J0IHVzKQoreworICBpbnQgciA9IChpbnQpIHNjICsgKGludCkgc3MgKyAoaW50KSB1YyArIChpbnQpIHVzOworCisgIHJldHVybiByOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBzaWduZWQgY2hhciBzYzsKKyAgdW5zaWduZWQgY2hhciB1YzsKKyAgc2lnbmVkIHNob3J0IHNzOworICB1bnNpZ25lZCBzaG9ydCB1czsKKyAgdW5zaWduZWQgbG9uZyB1bDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NjaGFyOworICBhcmdzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIHZhbHVlc1swXSA9ICZzYzsKKyAgdmFsdWVzWzFdID0gJnNzOworICB2YWx1ZXNbMl0gPSAmdWM7CisgIHZhbHVlc1szXSA9ICZ1czsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKworICB1cyA9IDA7CisgIHVsID0gMDsKKworICBmb3IgKHNjID0gKHNpZ25lZCBjaGFyKSAtMTI3OworICAgICAgIHNjIDw9IChzaWduZWQgY2hhcikgMTIwOyBzYyArPSAxKQorICAgIGZvciAoc3MgPSAtMzAwMDA7IHNzIDw9IDMwMDAwOyBzcyArPSAxMDAwMCkKKyAgICAgIGZvciAodWMgPSAodW5zaWduZWQgY2hhcikgMDsKKwkgICB1YyA8PSAodW5zaWduZWQgY2hhcikgMjAwOyB1YyArPSAyMCkKKwlmb3IgKHVzID0gMDsgdXMgPD0gNjAwMDA7IHVzICs9IDEwMDAwKQorCSAgeworCSAgICB1bCsrOworCSAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJvbW90aW9uKSwgJnJpbnQsIHZhbHVlcyk7CisJICAgIENIRUNLKChpbnQpcmludCA9PSAoc2lnbmVkIGNoYXIpIHNjICsgKHNpZ25lZCBzaG9ydCkgc3MgKworCQkgICh1bnNpZ25lZCBjaGFyKSB1YyArICh1bnNpZ25lZCBzaG9ydCkgdXMpOworCSAgfQorICBwcmludGYoIiVsdSBwcm9tb3Rpb24gdGVzdHMgcnVuXG4iLCB1bCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOWJkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYwpAQCAtMCwwICsxLDExNCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglSb25hbGQgT3Vzc29yZW4gPG91c3NvcmVuQGNpc3Ryb24ubmw+IDIwMDMwODI0CSovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IFBvaW50IHsKKwlmbG9hdCB4OworCWZsb2F0IHk7Cit9IFBvaW50OworCit0eXBlZGVmIHN0cnVjdCBTaXplIHsKKwlmbG9hdCBoOworCWZsb2F0IHc7Cit9IFNpemU7CisKK3R5cGVkZWYgc3RydWN0IFJlY3QgeworCVBvaW50IG87CisJU2l6ZSAgczsKK30gUmVjdDsKKworaW50IGRvaXQoaW50IG8sIGNoYXIqIHMsIFBvaW50IHAsIFJlY3QgciwgaW50IGxhc3QpCit7CisJcHJpbnRmKCJDQUxMRUQgV0lUSCAlZCAlcyB7JWYgJWZ9IHt7JWYgJWZ9IHslZiAlZn19ICVkXG4iLAorCQlvLCBzLCBwLngsIHAueSwgci5vLngsIHIuby55LCByLnMuaCwgci5zLncsIGxhc3QpOworCXJldHVybiA0MjsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworCWZmaV90eXBlIHBvaW50X3R5cGU7CisJZmZpX3R5cGUgc2l6ZV90eXBlOworCWZmaV90eXBlIHJlY3RfdHlwZTsKKwlmZmlfY2lmIGNpZjsKKwlmZmlfdHlwZSogYXJnbGlzdFs2XTsKKwl2b2lkKiB2YWx1ZXNbNl07CisJaW50IHI7CisKKwkvKgorCSAqICBGaXJzdCBzZXQgdXAgRkZJIHR5cGVzIGZvciB0aGUgMyBzdHJ1Y3QgdHlwZXMKKwkgKi8KKworCXBvaW50X3R5cGUuc2l6ZSA9IDA7IC8qc2l6ZW9mKFBvaW50KTsqLworCXBvaW50X3R5cGUuYWxpZ25tZW50ID0gMDsgLypfX2FsaWdub2ZfXyhQb2ludCk7Ki8KKwlwb2ludF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJcG9pbnRfdHlwZS5lbGVtZW50cyA9IG1hbGxvYygzICogc2l6ZW9mKGZmaV90eXBlKikpOworCXBvaW50X3R5cGUuZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisJcG9pbnRfdHlwZS5lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlwb2ludF90eXBlLmVsZW1lbnRzWzJdID0gTlVMTDsKKworCXNpemVfdHlwZS5zaXplID0gMDsvKiBzaXplb2YoU2l6ZSk7Ki8KKwlzaXplX3R5cGUuYWxpZ25tZW50ID0gMDsvKiBfX2FsaWdub2ZfXyhTaXplKTsqLworCXNpemVfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXNpemVfdHlwZS5lbGVtZW50cyA9IG1hbGxvYygzICogc2l6ZW9mKGZmaV90eXBlKikpOworCXNpemVfdHlwZS5lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlzaXplX3R5cGUuZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisJc2l6ZV90eXBlLmVsZW1lbnRzWzJdID0gTlVMTDsKKworCXJlY3RfdHlwZS5zaXplID0gMDsvKnNpemVvZihSZWN0KTsqLworCXJlY3RfdHlwZS5hbGlnbm1lbnQgPTA7LyogX19hbGlnbm9mX18oUmVjdCk7Ki8KKwlyZWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwlyZWN0X3R5cGUuZWxlbWVudHMgPSBtYWxsb2MoMyAqIHNpemVvZihmZmlfdHlwZSopKTsKKwlyZWN0X3R5cGUuZWxlbWVudHNbMF0gPSAmcG9pbnRfdHlwZTsKKwlyZWN0X3R5cGUuZWxlbWVudHNbMV0gPSAmc2l6ZV90eXBlOworCXJlY3RfdHlwZS5lbGVtZW50c1syXSA9IE5VTEw7CisKKwkvKgorCSAqIENyZWF0ZSBhIENJRgorCSAqLworCWFyZ2xpc3RbMF0gPSAmZmZpX3R5cGVfc2ludDsKKwlhcmdsaXN0WzFdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnbGlzdFsyXSA9ICZwb2ludF90eXBlOworCWFyZ2xpc3RbM10gPSAmcmVjdF90eXBlOworCWFyZ2xpc3RbNF0gPSAmZmZpX3R5cGVfc2ludDsKKwlhcmdsaXN0WzVdID0gTlVMTDsKKworCXIgPSBmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLAorCQkJNSwgJmZmaV90eXBlX3NpbnQsIGFyZ2xpc3QpOworCWlmIChyICE9IEZGSV9PSykgeworCQlhYm9ydCgpOworCX0KKworCisJLyogQW5kIGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggdGhlIENJRiAqLworCisJeworCVBvaW50IHAgPSB7IDEuMCwgMi4wIH07CisJUmVjdCAgciA9IHsgeyA5LjAsIDEwLjB9LCB7IC0xLjAsIC0yLjAgfSB9OworCWludCAgIG8gPSAwOworCWludCAgIGwgPSA0MjsKKwljaGFyKiBtID0gIm15TWV0aG9kIjsKKwlmZmlfYXJnIHJlc3VsdDsKKworCXZhbHVlc1swXSA9ICZvOworCXZhbHVlc1sxXSA9ICZtOworCXZhbHVlc1syXSA9ICZwOworCXZhbHVlc1szXSA9ICZyOworCXZhbHVlc1s0XSA9ICZsOworCXZhbHVlc1s1XSA9IE5VTEw7CisKKwlwcmludGYoIkNBTExJTkcgV0lUSCAlZCAlcyB7JWYgJWZ9IHt7JWYgJWZ9IHslZiAlZn19ICVkXG4iLAorCQlvLCBtLCBwLngsIHAueSwgci5vLngsIHIuby55LCByLnMuaCwgci5zLncsIGwpOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGRvaXQpLCAmcmVzdWx0LCB2YWx1ZXMpOworCisJcHJpbnRmICgiVGhlIHJlc3VsdCBpcyAlZFxuIiwgKGludClyZXN1bHQpOworCisJfQorCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYwpAQCAtMCwwICsxLDM1IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwpCit7CisgIHJldHVybiAyICogZGJsOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGRvdWJsZSBkYmwsIHJkYmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1swXSA9ICZkYmw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2RvdWJsZSwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKGRibCA9IC0xMjcuMzsgZGJsIDwgIDEyNzsgZGJsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9kYmwpLCAmcmRibCwgdmFsdWVzKTsKKyAgICAgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZGJsLCByZXR1cm5fZGJsKGRibCkpOworICAgICAgQ0hFQ0socmRibCA9PSAyICogZGJsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE1ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwxLCBmbG9hdCBmbDIsIHVuc2lnbmVkIGludCBpbjMsIGRvdWJsZSBkYmw0KQoreworICByZXR1cm4gZGJsMSArIGZsMiArIGluMyArIGRibDQ7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGRibDEsIGRibDQsIHJkYmw7CisgIGZsb2F0IGZsMjsKKyAgdW5zaWduZWQgaW50IGluMzsKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1swXSA9ICZkYmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZGJsNDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICBkYmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBpbjMgPSAyNTU7CisgIGRibDQgPSA1MTIuNzsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2RibCksICZyZGJsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmRibCwgcmV0dXJuX2RibChkYmwxLCBmbDIsIGluMywgZGJsNCkpOworICBDSEVDSyhyZGJsID09ICBkYmwxICsgZmwyICsgaW4zICsgZGJsNCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzgxOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwxLCBkb3VibGUgZGJsMiwgdW5zaWduZWQgaW50IGluMywgZG91YmxlIGRibDQpCit7CisgIHJldHVybiBkYmwxICsgZGJsMiArIGluMyArIGRibDQ7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGRibDEsIGRibDIsIGRibDQsIHJkYmw7CisgIHVuc2lnbmVkIGludCBpbjM7CisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBhcmdzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91aW50OworICBhcmdzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmRibDE7CisgIHZhbHVlc1sxXSA9ICZkYmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZGJsNDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICBkYmwxID0gMTI3LjA7CisgIGRibDIgPSAxMjguMDsKKyAgaW4zID0gMjU1OworICBkYmw0ID0gNTEyLjc7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9kYmwpLCAmcmRibCwgdmFsdWVzKTsKKyAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJkYmwsIHJldHVybl9kYmwoZGJsMSwgZGJsMiwgaW4zLCBkYmw0KSk7CisgIENIRUNLKHJkYmwgPT0gIGRibDEgKyBkYmwyICsgaW4zICsgZGJsNCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGEwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYwpAQCAtMCwwICsxLDM1IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsKQoreworICByZXR1cm4gMiAqIGZsOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsLCByZmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmZsOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKGZsID0gLTEyNy4wOyBmbCA8ICAxMjc7IGZsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9mbCksICZyZmwsIHZhbHVlcyk7CisgICAgICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmZsLCByZXR1cm5fZmwoZmwpKTsKKyAgICAgIENIRUNLKHJmbCA9PSAgMiAqIGZsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkOTJjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYwpAQCAtMCwwICsxLDM2IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsMSwgZmxvYXQgZmwyKQoreworICByZXR1cm4gZmwxICsgZmwyOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsMSwgZmwyLCByZmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmZsMTsKKyAgdmFsdWVzWzFdID0gJmZsMjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7CisgIGZsMSA9IDEyNy4wOworICBmbDIgPSAxMjguMDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2ZsKSwgJnJmbCwgdmFsdWVzKTsKKyAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJmbCwgcmV0dXJuX2ZsKGZsMSwgZmwyKSk7CisgIENIRUNLKHJmbCA9PSAgZmwxICsgZmwyKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI5NzZjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTAyMTIgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKKy8qIFVzZSB2b2xhdGlsZSBmbG9hdCB0byBhdm9pZCBmYWxzZSBuZWdhdGl2ZSBvbiBpeDg2LiAgU2VlIFBSIHRhcmdldC8zMjMuICAqLworc3RhdGljIGZsb2F0IHJldHVybl9mbChmbG9hdCBmbDEsIGZsb2F0IGZsMiwgZmxvYXQgZmwzLCBmbG9hdCBmbDQpCit7CisgIHZvbGF0aWxlIGZsb2F0IHN1bTsKKworICBzdW0gPSBmbDEgKyBmbDIgKyBmbDMgKyBmbDQ7CisgIHJldHVybiBzdW07Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZmwxLCBmbDIsIGZsMywgZmw0LCByZmw7CisgIHZvbGF0aWxlIGZsb2F0IHN1bTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmZmwzOworICB2YWx1ZXNbM10gPSAmZmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKyAgZmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBmbDMgPSAyNTUuMTsKKyAgZmw0ID0gNTEyLjc7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9mbCksICZyZmwsIHZhbHVlcyk7CisgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZmwsIHJldHVybl9mbChmbDEsIGZsMiwgZmwzLCBmbDQpKTsKKworICBzdW0gPSBmbDEgKyBmbDIgKyBmbDMgKyBmbDQ7CisgIENIRUNLKHJmbCA9PSBzdW0pOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzg3N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMKQEAgLTAsMCArMSw0MiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGZsb2F0IHJldHVybl9mbChmbG9hdCBmbDEsIGZsb2F0IGZsMiwgdW5zaWduZWQgaW50IGluMywgZmxvYXQgZmw0KQoreworICByZXR1cm4gZmwxICsgZmwyICsgaW4zICsgZmw0OworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsMSwgZmwyLCBmbDQsIHJmbDsKKyAgdW5zaWduZWQgaW50IGluMzsKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91aW50OworICBhcmdzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKyAgZmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBpbjMgPSAyNTU7CisgIGZsNCA9IDUxMi43OworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fZmwpLCAmcmZsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmZsLCByZXR1cm5fZmwoZmwxLCBmbDIsIGluMywgZmw0KSk7CisgIENIRUNLKHJmbCA9PSAgZmwxICsgZmwyICsgaW4zICsgZmw0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJmZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNzExMTMgICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgbG9uZyBkb3VibGUgcmV0dXJuX2xkbChsb25nIGRvdWJsZSBsZGwpCit7CisgIHJldHVybiAyKmxkbDsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBsb25nIGRvdWJsZSBsZGwsIHJsZGw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbMF0gPSAmbGRsOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9sb25nZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAobGRsID0gLTEyNy4wOyBsZGwgPCAgMTI3LjA7IGxkbCsrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fbGRsKSwgJnJsZGwsIHZhbHVlcyk7CisgICAgICBDSEVDSyhybGRsID09ICAyICogbGRsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGExZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYwpAQCAtMCwwICsxLDQxIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGxvbmcgbG9uZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIGxvbmcgbG9uZyByZXR1cm5fbGwobG9uZyBsb25nIGxsKQoreworICByZXR1cm4gbGw7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBsb25nIGxvbmcgcmxvbmdsb25nOworICBsb25nIGxvbmcgbGw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zaW50NjQ7CisgIHZhbHVlc1swXSA9ICZsbDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfc2ludDY0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAobGwgPSAwTEw7IGxsIDwgMTAwTEw7IGxsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9sbCksICZybG9uZ2xvbmcsIHZhbHVlcyk7CisgICAgICBDSEVDSyhybG9uZ2xvbmcgPT0gbGwpOworICAgIH0KKworICBmb3IgKGxsID0gNTU1NTU1NTU1NTUwMDBMTDsgbGwgPCA1NTU1NTU1NTU1NTEwMExMOyBsbCsrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fbGwpLCAmcmxvbmdsb25nLCB2YWx1ZXMpOworICAgICAgQ0hFQ0socmxvbmdsb25nID09IGxsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZThhMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgaWYgbG9uZyBsb25nIGFyZSBwYXNzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVncyBvbiBwcGMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJMjAxMDQuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjIyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1Xbm8tZm9ybWF0IiB7IHRhcmdldCBhbHBoYSotZGVjLW9zZiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIGxvbmcgbG9uZyByZXR1cm5fbGwoaW50IGxsMCwgbG9uZyBsb25nIGxsMSwgaW50IGxsMikKK3sKKyAgcmV0dXJuIGxsMCArIGxsMSArIGxsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGxvbmcgbG9uZyBybG9uZ2xvbmc7CisgIGxvbmcgbG9uZyBsbDE7CisgIHVuc2lnbmVkIGxsMCwgbGwyOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9zaW50NjQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJmxsMDsKKyAgdmFsdWVzWzFdID0gJmxsMTsKKyAgdmFsdWVzWzJdID0gJmxsMjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfc2ludDY0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGxsMCA9IDExMTExMTExOworICBsbDEgPSAxMTExMTExMTExMTAwMExMOworICBsbDIgPSAxMTExMTExMTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2xsKSwgJnJsb25nbG9uZywgdmFsdWVzKTsKKyAgcHJpbnRmKCJyZXM6ICUiIFBSSWRMTCAiLCAlIiBQUklkTEwgIlxuIiwgcmxvbmdsb25nLCBsbDAgKyBsbDEgKyBsbDIpOworICAvKiB7IGRnLW91dHB1dCAicmVzOiAxMTExMTEzMzMzMzIyMiwgMTExMTExMzMzMzMyMjIiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2MDhlZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgc2lnbmVkIGNoYXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHNpZ25lZCBjaGFyIHJldHVybl9zYyhzaWduZWQgY2hhciBzYykKK3sKKyAgcmV0dXJuIHNjOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKyAgc2lnbmVkIGNoYXIgc2M7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgdmFsdWVzWzBdID0gJnNjOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9zY2hhciwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKHNjID0gKHNpZ25lZCBjaGFyKSAtMTI3OworICAgICAgIHNjIDwgKHNpZ25lZCBjaGFyKSAxMjc7IHNjKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9zYyksICZyaW50LCB2YWx1ZXMpOworICAgICAgQ0hFQ0socmludCA9PSAoZmZpX2FyZykgc2MpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZDM0NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBpZiBsb25nIGFzIHJldHVybiB0eXBlIGlzIGhhbmRsZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3N0YXRpYyBsb25nIHJldHVybl9zbChsb25nIGwxLCBsb25nIGwyKQoreworICByZXR1cm4gbDEgLSBsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmVzOworICB1bnNpZ25lZCBsb25nIGwxLCBsMjsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3Nsb25nOworICBhcmdzWzFdID0gJmZmaV90eXBlX3Nsb25nOworICB2YWx1ZXNbMF0gPSAmbDE7CisgIHZhbHVlc1sxXSA9ICZsMjsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9zbG9uZywgYXJncykgPT0gRkZJX09LKTsKKworICBsMSA9IDEwNzM3NDE4MjNMOworICBsMiA9IDEwNzM3NDE4MjRMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fc2wpLCAmcmVzLCB2YWx1ZXMpOworICBwcmludGYoInJlczogJWxkLCAlbGRcbiIsIChsb25nKXJlcywgbDEgLSBsMik7CisgIC8qIHsgZGctb3V0cHV0ICJyZXM6IC0xLCAtMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzQ1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYwpAQCAtMCwwICsxLDM4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHVuc2lnbmVkIGNoYXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcmV0dXJuX3VjKHVuc2lnbmVkIGNoYXIgdWMpCit7CisgIHJldHVybiB1YzsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICB1bnNpZ25lZCBjaGFyIHVjOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIHZhbHVlc1swXSA9ICZ1YzsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdWNoYXIsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZm9yICh1YyA9ICh1bnNpZ25lZCBjaGFyKSAnXHgwMCc7CisgICAgICAgdWMgPCAodW5zaWduZWQgY2hhcikgJ1x4ZmYnOyB1YysrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fdWMpLCAmcmludCwgdmFsdWVzKTsKKyAgICAgIENIRUNLKHJpbnQgPT0gKHNpZ25lZCBpbnQpIHVjKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjI2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYwpAQCAtMCwwICsxLDM4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgaWYgdW5zaWduZWQgbG9uZyBhcyByZXR1cm4gdHlwZSBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGthZmZlZXRpc2NoIGF0IGdteCBkb3QgZGU+IDIwMDYwNzI0ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIHVuc2lnbmVkIGxvbmcgcmV0dXJuX3VsKHVuc2lnbmVkIGxvbmcgdWwxLCB1bnNpZ25lZCBsb25nIHVsMikKK3sKKyAgcmV0dXJuIHVsMSArIHVsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmVzOworICB1bnNpZ25lZCBsb25nIHVsMSwgdWwyOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIHZhbHVlc1swXSA9ICZ1bDE7CisgIHZhbHVlc1sxXSA9ICZ1bDI7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfdWxvbmcsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgdWwxID0gMTA3Mzc0MTgyM0w7CisgIHVsMiA9IDEwNzM3NDE4MjRMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fdWwpLCAmcmVzLCB2YWx1ZXMpOworICBwcmludGYoInJlczogJWx1LCAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXJlcywgdWwxICsgdWwyKTsKKyAgLyogeyBkZy1vdXRwdXQgInJlczogMjE0NzQ4MzY0NywgMjE0NzQ4MzY0NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E5M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYwpAQCAtMCwwICsxLDE0NSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCisvLyAxMyBGUFJzOiAxMDQgYnl0ZXMKKy8vIDE0IEZQUnM6IDExMiBieXRlcworCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfMTA4Ynl0ZSB7CisJZG91YmxlIGE7CisJZG91YmxlIGI7CisJZG91YmxlIGM7CisJZG91YmxlIGQ7CisJZG91YmxlIGU7CisJZG91YmxlIGY7CisJZG91YmxlIGc7CisJZG91YmxlIGg7CisJZG91YmxlIGk7CisJZG91YmxlIGo7CisJZG91YmxlIGs7CisJZG91YmxlIGw7CisJZG91YmxlIG07CisJaW50IG47Cit9IHN0cnVjdF8xMDhieXRlOworCitzdHJ1Y3RfMTA4Ynl0ZSBjbHNfc3RydWN0XzEwOGJ5dGVfZm4oCisJc3RydWN0XzEwOGJ5dGUgYjAsCisJc3RydWN0XzEwOGJ5dGUgYjEsCisJc3RydWN0XzEwOGJ5dGUgYjIsCisJc3RydWN0XzEwOGJ5dGUgYjMpCit7CisJc3RydWN0XzEwOGJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisJcmVzdWx0LmogPSBiMC5qICsgYjEuaiArIGIyLmogKyBiMy5qOworCXJlc3VsdC5rID0gYjAuayArIGIxLmsgKyBiMi5rICsgYjMuazsKKwlyZXN1bHQubCA9IGIwLmwgKyBiMS5sICsgYjIubCArIGIzLmw7CisJcmVzdWx0Lm0gPSBiMC5tICsgYjEubSArIGIyLm0gKyBiMy5tOworCXJlc3VsdC5uID0gYjAubiArIGIxLm4gKyBiMi5uICsgYjMubjsKKworCXByaW50ZigiJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWRcbiIsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsCisJCXJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nLCByZXN1bHQuaCwgcmVzdWx0LmksCisJCXJlc3VsdC5qLCByZXN1bHQuaywgcmVzdWx0LmwsIHJlc3VsdC5tLCByZXN1bHQubik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xMDhieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfMTA4Ynl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMF0pOworCWIxID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbM10pOworCisJKihzdHJ1Y3RfMTA4Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTA4Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzE1XTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfMTA4Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDQuMCwgOC4wLCAxLjAsIDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA3IH07CisJc3RydWN0XzEwOGJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDYuMCwgNy4wLCA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgNCB9OworCXN0cnVjdF8xMDhieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgMS4wLCAyLjAsIDkuMCwgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMgfTsKKwlzdHJ1Y3RfMTA4Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMuMCwgMy4wLCAxLjAsIDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCAyIH07CisJc3RydWN0XzEwOGJ5dGUgcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s3XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzldID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzExXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTJdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxM10gPSAmZmZpX3R5cGVfc2ludDMyOworCWNsc19zdHJ1Y3RfZmllbGRzWzE0XSA9IE5VTEw7CisKKwlkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCWRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzX2RibFswXSA9ICZlX2RibDsKKwlhcmdzX2RibFsxXSA9ICZmX2RibDsKKwlhcmdzX2RibFsyXSA9ICZnX2RibDsKKwlhcmdzX2RibFszXSA9ICZoX2RibDsKKwlhcmdzX2RibFs0XSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xMDhieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pLAorCQlyZXNfZGJsLmosIHJlc19kYmwuaywgcmVzX2RibC5sLCByZXNfZGJsLm0sIHJlc19kYmwubik7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMTYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xMDhieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzEwOGJ5dGUoKikoc3RydWN0XzEwOGJ5dGUsIHN0cnVjdF8xMDhieXRlLAorCQlzdHJ1Y3RfMTA4Ynl0ZSwgc3RydWN0XzEwOGJ5dGUpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4pOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDE2IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU5OWQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgc3RydWN0dXJlIHJldHVybmluZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgYmlnZ2VyIHN0cnVjdCB3aGljaCBvdmVybGFwcworCQkJCXRoZSBncCBhbmQgZnAgcmVnaXN0ZXIgY291bnQgb24gRGFyd2luL0FJWC9wcGM2NC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4JNi8yMS8yMDA3CSovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworLy8gMTMgRlBSczogMTA0IGJ5dGVzCisvLyAxNCBGUFJzOiAxMTIgYnl0ZXMKKwordHlwZWRlZiBzdHJ1Y3Qgc3RydWN0XzExNmJ5dGUgeworCWRvdWJsZSBhOworCWRvdWJsZSBiOworCWRvdWJsZSBjOworCWRvdWJsZSBkOworCWRvdWJsZSBlOworCWRvdWJsZSBmOworCWRvdWJsZSBnOworCWRvdWJsZSBoOworCWRvdWJsZSBpOworCWRvdWJsZSBqOworCWRvdWJsZSBrOworCWRvdWJsZSBsOworCWRvdWJsZSBtOworCWRvdWJsZSBuOworCWludCBvOworfSBzdHJ1Y3RfMTE2Ynl0ZTsKKworc3RydWN0XzExNmJ5dGUgY2xzX3N0cnVjdF8xMTZieXRlX2ZuKAorCXN0cnVjdF8xMTZieXRlIGIwLAorCXN0cnVjdF8xMTZieXRlIGIxLAorCXN0cnVjdF8xMTZieXRlIGIyLAorCXN0cnVjdF8xMTZieXRlIGIzKQoreworCXN0cnVjdF8xMTZieXRlCXJlc3VsdDsKKworCXJlc3VsdC5hID0gYjAuYSArIGIxLmEgKyBiMi5hICsgYjMuYTsKKwlyZXN1bHQuYiA9IGIwLmIgKyBiMS5iICsgYjIuYiArIGIzLmI7CisJcmVzdWx0LmMgPSBiMC5jICsgYjEuYyArIGIyLmMgKyBiMy5jOworCXJlc3VsdC5kID0gYjAuZCArIGIxLmQgKyBiMi5kICsgYjMuZDsKKwlyZXN1bHQuZSA9IGIwLmUgKyBiMS5lICsgYjIuZSArIGIzLmU7CisJcmVzdWx0LmYgPSBiMC5mICsgYjEuZiArIGIyLmYgKyBiMy5mOworCXJlc3VsdC5nID0gYjAuZyArIGIxLmcgKyBiMi5nICsgYjMuZzsKKwlyZXN1bHQuaCA9IGIwLmggKyBiMS5oICsgYjIuaCArIGIzLmg7CisJcmVzdWx0LmkgPSBiMC5pICsgYjEuaSArIGIyLmkgKyBiMy5pOworCXJlc3VsdC5qID0gYjAuaiArIGIxLmogKyBiMi5qICsgYjMuajsKKwlyZXN1bHQuayA9IGIwLmsgKyBiMS5rICsgYjIuayArIGIzLms7CisJcmVzdWx0LmwgPSBiMC5sICsgYjEubCArIGIyLmwgKyBiMy5sOworCXJlc3VsdC5tID0gYjAubSArIGIxLm0gKyBiMi5tICsgYjMubTsKKwlyZXN1bHQubiA9IGIwLm4gKyBiMS5uICsgYjIubiArIGIzLm47CisJcmVzdWx0Lm8gPSBiMC5vICsgYjEubyArIGIyLm8gKyBiMy5vOworCisJcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywKKwkJcmVzdWx0LmQsIHJlc3VsdC5lLCByZXN1bHQuZiwgcmVzdWx0LmcsIHJlc3VsdC5oLCByZXN1bHQuaSwKKwkJcmVzdWx0LmosIHJlc3VsdC5rLCByZXN1bHQubCwgcmVzdWx0Lm0sIHJlc3VsdC5uLCByZXN1bHQubyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xMTZieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfMTE2Ynl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMF0pOworCWIxID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbM10pOworCisJKihzdHJ1Y3RfMTE2Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTE2Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzE2XTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfMTE2Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDQuMCwgOC4wLCAxLjAsIDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDcgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCA2LjAsIDQgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAsIDguMCwgNi4wLCAxLjAsIDQuMCwgMC4wLCA3LjAsIDMgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMuMCwgMy4wLCAxLjAsIDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCA4LjAsIDIgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEwXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEzXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTRdID0gJmZmaV90eXBlX3NpbnQzMjsKKwljbHNfc3RydWN0X2ZpZWxkc1sxNV0gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZV9kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSAmZ19kYmw7CisJYXJnc19kYmxbM10gPSAmaF9kYmw7CisJYXJnc19kYmxbNF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMTE2Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4sIHJlc19kYmwubyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMjYgMTYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xMTZieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzExNmJ5dGUoKikoc3RydWN0XzExNmJ5dGUsIHN0cnVjdF8xMTZieXRlLAorCQlzdHJ1Y3RfMTE2Ynl0ZSwgc3RydWN0XzExNmJ5dGUpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4sIHJlc19kYmwubyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMjYgMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzZhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYwpAQCAtMCwwICsxLDEyNCBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfNzJieXRlIHsKKwlkb3VibGUgYTsKKwlkb3VibGUgYjsKKwlkb3VibGUgYzsKKwlkb3VibGUgZDsKKwlkb3VibGUgZTsKKwlkb3VibGUgZjsKKwlkb3VibGUgZzsKKwlkb3VibGUgaDsKKwlkb3VibGUgaTsKK30gc3RydWN0XzcyYnl0ZTsKKworc3RydWN0XzcyYnl0ZSBjbHNfc3RydWN0XzcyYnl0ZV9mbigKKwlzdHJ1Y3RfNzJieXRlIGIwLAorCXN0cnVjdF83MmJ5dGUgYjEsCisJc3RydWN0XzcyYnl0ZSBiMiwKKwlzdHJ1Y3RfNzJieXRlIGIzKQoreworCXN0cnVjdF83MmJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisKKwlwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCQlyZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgsIHJlc3VsdC5pKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzcyYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0XzcyYnl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzFdKTsKKwliMiA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF83MmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzcyYnl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzEwXTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfNzJieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgNy4wIH07CisJc3RydWN0XzcyYnl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQuMCB9OworCXN0cnVjdF83MmJ5dGUgZ19kYmwgPSB7IDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCAxLjAsIDIuMCwgOS4wLCAzLjAgfTsKKwlzdHJ1Y3RfNzJieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgMi4wIH07CisJc3RydWN0XzcyYnl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZV9kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSAmZ19kYmw7CisJYXJnc19kYmxbM10gPSAmaF9kYmw7CisJYXJnc19kYmxbNF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNzJieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkJcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNzJieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzcyYnl0ZSgqKShzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlLAorCQlzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiXG4yMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCQlyZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyZjJmYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYwpAQCAtMCwwICsxLDEyNSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1Xbm8tZm9ybWF0IiB7IHRhcmdldCBhbHBoYSotZGVjLW9zZiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfNzJieXRlIHsKKwlkb3VibGUgYTsKKwlkb3VibGUgYjsKKwlkb3VibGUgYzsKKwlkb3VibGUgZDsKKwlkb3VibGUgZTsKKwlkb3VibGUgZjsKKwlkb3VibGUgZzsKKwlkb3VibGUgaDsKKwlsb25nIGxvbmcgaTsKK30gc3RydWN0XzcyYnl0ZTsKKworc3RydWN0XzcyYnl0ZSBjbHNfc3RydWN0XzcyYnl0ZV9mbigKKwlzdHJ1Y3RfNzJieXRlIGIwLAorCXN0cnVjdF83MmJ5dGUgYjEsCisJc3RydWN0XzcyYnl0ZSBiMiwKKwlzdHJ1Y3RfNzJieXRlIGIzKQoreworCXN0cnVjdF83MmJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisKKwlwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnICUiIFBSSWRMTCAiXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCQlyZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgsIHJlc3VsdC5pKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzcyYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0XzcyYnl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzFdKTsKKwliMiA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF83MmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzcyYnl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzEwXTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfNzJieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgNyB9OworCXN0cnVjdF83MmJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDYuMCwgNy4wLCA0IH07CisJc3RydWN0XzcyYnl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAsIDMgfTsKKwlzdHJ1Y3RfNzJieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgMiB9OworCXN0cnVjdF83MmJ5dGUgcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s3XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOF0gPSAmZmZpX3R5cGVfc2ludDY0OworCWNsc19zdHJ1Y3RfZmllbGRzWzldID0gTlVMTDsKKworCWRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NfZGJsWzBdID0gJmVfZGJsOworCWFyZ3NfZGJsWzFdID0gJmZfZGJsOworCWFyZ3NfZGJsWzJdID0gJmdfZGJsOworCWFyZ3NfZGJsWzNdID0gJmhfZGJsOworCWFyZ3NfZGJsWzRdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzcyYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKwlwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJSIgUFJJZExMICJcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJCXJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oLCByZXNfZGJsLmkpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzcyYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlc19kYmwgPSAoKHN0cnVjdF83MmJ5dGUoKikoc3RydWN0XzcyYnl0ZSwgc3RydWN0XzcyYnl0ZSwKKwkJc3RydWN0XzcyYnl0ZSwgc3RydWN0XzcyYnl0ZSkpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlIiBQUklkTEwgIlxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkJcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGU0NWRlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMKQEAgLTAsMCArMSw0NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cmxlbiBmdW5jdGlvbiBjYWxsLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBzaXplX3QgbXlfc3RybGVuKGNoYXIgKnMpCit7CisgIHJldHVybiAoc3RybGVuKHMpKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKyAgY2hhciAqczsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICBzID0gImEiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMSk7CisgIAorICBzID0gIjEyMzQ1NjciOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gNyk7CisgIAorICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMjUpOworICAKKyAgZXhpdCAoMCk7Cit9CisgIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJjYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMKQEAgLTAsMCArMSw0NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgc3RybGVuIGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHNpemVfdCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgbXlfc3RkY2FsbF9zdHJsZW4oY2hhciAqcykKK3sKKyAgcmV0dXJuIChzdHJsZW4ocykpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBjaGFyICpzOworICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCAxLAorCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICBzID0gImEiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSAxKTsKKyAgCisgIHMgPSAiMTIzNDU2NyI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOworICBDSEVDSyhyaW50ID09IDcpOworICAKKyAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMjUpOworICAKKyAgcHJpbnRmKCJzdGRjYWxsIHN0cmxlbiB0ZXN0cyBwYXNzZWRcbiIpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzZjODUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKQEAgLTAsMCArMSw2NSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgY2hhciB1YzsKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGludCB1aTsKK30gdGVzdF9zdHJ1Y3R1cmVfMTsKKworc3RhdGljIHRlc3Rfc3RydWN0dXJlXzEgc3RydWN0MSh0ZXN0X3N0cnVjdHVyZV8xIHRzKQoreworICB0cy51YysrOworICB0cy5kLS07CisgIHRzLnVpKys7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHMxX3R5cGU7CisgIGZmaV90eXBlICp0czFfdHlwZV9lbGVtZW50c1s0XTsKKyAgdHMxX3R5cGUuc2l6ZSA9IDA7CisgIHRzMV90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzMV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzMV90eXBlLmVsZW1lbnRzID0gdHMxX3R5cGVfZWxlbWVudHM7CisgIHRzMV90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICB0czFfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzMV90eXBlX2VsZW1lbnRzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIHRzMV90eXBlX2VsZW1lbnRzWzNdID0gTlVMTDsKKyAgCisgIHRlc3Rfc3RydWN0dXJlXzEgdHMxX2FyZzsKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzEgKnRzMV9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMSAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8xKSk7CisgIAorICBhcmdzWzBdID0gJnRzMV90eXBlOworICB2YWx1ZXNbMF0gPSAmdHMxX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAmdHMxX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czFfYXJnLnVjID0gJ1x4MDEnOworICB0czFfYXJnLmQgPSAzLjE0MTU5OworICB0czFfYXJnLnVpID0gNTU1OworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QxKSwgdHMxX3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIENIRUNLKHRzMV9yZXN1bHQtPnVpID09IDU1Nik7CisgIENIRUNLKHRzMV9yZXN1bHQtPmQgPT0gMy4xNDE1OSAtIDEpOworIAorICBmcmVlICh0czFfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJjOWZkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGRvdWJsZSBkMTsKKyAgZG91YmxlIGQyOworfSB0ZXN0X3N0cnVjdHVyZV8yOworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMiBzdHJ1Y3QyKHRlc3Rfc3RydWN0dXJlXzIgdHMpCit7CisgIHRzLmQxLS07CisgIHRzLmQyLS07CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgdGVzdF9zdHJ1Y3R1cmVfMiB0czJfYXJnOworICBmZmlfdHlwZSB0czJfdHlwZTsKKyAgZmZpX3R5cGUgKnRzMl90eXBlX2VsZW1lbnRzWzNdOworICB0czJfdHlwZS5zaXplID0gMDsKKyAgdHMyX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHMyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHMyX3R5cGUuZWxlbWVudHMgPSB0czJfdHlwZV9lbGVtZW50czsKKyAgdHMyX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czJfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzMl90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworICAKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzIgKnRzMl9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMiAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8yKSk7CisgIAorICBhcmdzWzBdID0gJnRzMl90eXBlOworICB2YWx1ZXNbMF0gPSAmdHMyX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHMyX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czJfYXJnLmQxID0gNS41NTsKKyAgdHMyX2FyZy5kMiA9IDYuNjY7CisgIAorICBwcmludGYgKCIlZ1xuIiwgdHMyX2FyZy5kMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czJfYXJnLmQyKTsKKyAgCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QyKSwgdHMyX3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMik7CisgIAorICBDSEVDSyh0czJfcmVzdWx0LT5kMSA9PSA1LjU1IC0gMSk7CisgIENIRUNLKHRzMl9yZXN1bHQtPmQyID09IDYuNjYgLSAxKTsKKyAgCisgIGZyZWUgKHRzMl9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmIwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IHNpOworfSB0ZXN0X3N0cnVjdHVyZV8zOworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMyBzdHJ1Y3QzKHRlc3Rfc3RydWN0dXJlXzMgdHMpCit7CisgIHRzLnNpID0gLSh0cy5zaSoyKTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBpbnQgY29tcGFyZV92YWx1ZTsKKyAgZmZpX3R5cGUgdHMzX3R5cGU7CisgIGZmaV90eXBlICp0czNfdHlwZV9lbGVtZW50c1syXTsKKyAgdHMzX3R5cGUuc2l6ZSA9IDA7CisgIHRzM190eXBlLmFsaWdubWVudCA9IDA7CisgIHRzM190eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzM190eXBlLmVsZW1lbnRzID0gdHMzX3R5cGVfZWxlbWVudHM7CisgIHRzM190eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIHRzM190eXBlX2VsZW1lbnRzWzFdID0gTlVMTDsKKworICB0ZXN0X3N0cnVjdHVyZV8zIHRzM19hcmc7CisgIHRlc3Rfc3RydWN0dXJlXzMgKnRzM19yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMyAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8zKSk7CisgIAorICBhcmdzWzBdID0gJnRzM190eXBlOworICB2YWx1ZXNbMF0gPSAmdHMzX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAmdHMzX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czNfYXJnLnNpID0gLTEyMzsKKyAgY29tcGFyZV92YWx1ZSA9IHRzM19hcmcuc2k7CisgIAorICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0MyksIHRzM19yZXN1bHQsIHZhbHVlcyk7CisgIAorICBwcmludGYgKCIlZCAlZFxuIiwgdHMzX3Jlc3VsdC0+c2ksIC0oY29tcGFyZV92YWx1ZSoyKSk7CisgIAorICBDSEVDSyh0czNfcmVzdWx0LT5zaSA9PSAtKGNvbXBhcmVfdmFsdWUqMikpOworIAorICBmcmVlICh0czNfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQwYTgzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuc2lnbmVkIHVpMTsKKyAgdW5zaWduZWQgdWkyOworICB1bnNpZ25lZCB1aTM7Cit9IHRlc3Rfc3RydWN0dXJlXzQ7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV80IHN0cnVjdDQodGVzdF9zdHJ1Y3R1cmVfNCB0cykKK3sKKyAgdHMudWkzID0gdHMudWkxICogdHMudWkyICogdHMudWkzOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzNF90eXBlOworICBmZmlfdHlwZSAqdHM0X3R5cGVfZWxlbWVudHNbNF07ICAKKyAgdHM0X3R5cGUuc2l6ZSA9IDA7CisgIHRzNF90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzNF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRlc3Rfc3RydWN0dXJlXzQgdHM0X2FyZzsKKyAgdHM0X3R5cGUuZWxlbWVudHMgPSB0czRfdHlwZV9lbGVtZW50czsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbM10gPSBOVUxMOworCisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNCAqdHM0X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV80ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzQpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM0X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czRfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czRfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzNF9hcmcudWkxID0gMjsKKyAgdHM0X2FyZy51aTIgPSAzOworICB0czRfYXJnLnVpMyA9IDQ7CisgIAorICBmZmlfY2FsbCAoJmNpZiwgRkZJX0ZOKHN0cnVjdDQpLCB0czRfcmVzdWx0LCB2YWx1ZXMpOworICAKKyAgQ0hFQ0sodHM0X3Jlc3VsdC0+dWkzID09IDJVICogM1UgKiA0VSk7CisgCisgIAorICBmcmVlICh0czRfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNjYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCit0eXBlZGVmIHN0cnVjdAoreworICBjaGFyIGMxOworICBjaGFyIGMyOworfSB0ZXN0X3N0cnVjdHVyZV81OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNSBzdHJ1Y3Q1KHRlc3Rfc3RydWN0dXJlXzUgdHMxLCB0ZXN0X3N0cnVjdHVyZV81IHRzMikKK3sKKyAgdHMxLmMxICs9IHRzMi5jMTsKKyAgdHMxLmMyIC09IHRzMi5jMjsKKyAgCisgIHJldHVybiB0czE7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czVfdHlwZTsKKyAgZmZpX3R5cGUgKnRzNV90eXBlX2VsZW1lbnRzWzNdOworICB0czVfdHlwZS5zaXplID0gMDsKKyAgdHM1X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM1X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHM1X3R5cGUuZWxlbWVudHMgPSB0czVfdHlwZV9lbGVtZW50czsKKyAgdHM1X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIHRzNV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX3NjaGFyOworICB0czVfdHlwZV9lbGVtZW50c1syXSA9IE5VTEw7CisKKyAgdGVzdF9zdHJ1Y3R1cmVfNSB0czVfYXJnMSwgdHM1X2FyZzI7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNSAqdHM1X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV81ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzUpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM1X3R5cGU7CisgIGFyZ3NbMV0gPSAmdHM1X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czVfYXJnMTsKKyAgdmFsdWVzWzFdID0gJnRzNV9hcmcyOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZ0czVfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzNV9hcmcxLmMxID0gMjsKKyAgdHM1X2FyZzEuYzIgPSA2OworICB0czVfYXJnMi5jMSA9IDU7CisgIHRzNV9hcmcyLmMyID0gMzsKKyAgCisgIGZmaV9jYWxsICgmY2lmLCBGRklfRk4oc3RydWN0NSksIHRzNV9yZXN1bHQsIHZhbHVlcyk7CisgIAorICBDSEVDSyh0czVfcmVzdWx0LT5jMSA9PSA3KTsgCisgIENIRUNLKHRzNV9yZXN1bHQtPmMyID09IDMpOworICAKKyAgCisgIGZyZWUgKHRzNV9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGI5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKQEAgLTAsMCArMSw2NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworfSB0ZXN0X3N0cnVjdHVyZV82OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNiBzdHJ1Y3Q2ICh0ZXN0X3N0cnVjdHVyZV82IHRzKQoreworICB0cy5mICs9IDE7CisgIHRzLmQgKz0gMTsKKyAgCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzNl90eXBlOworICBmZmlfdHlwZSAqdHM2X3R5cGVfZWxlbWVudHNbM107CisgIHRzNl90eXBlLnNpemUgPSAwOworICB0czZfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czZfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czZfdHlwZS5lbGVtZW50cyA9IHRzNl90eXBlX2VsZW1lbnRzOworICB0czZfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM2X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czZfdHlwZV9lbGVtZW50c1syXSA9IE5VTEw7CisKKworICB0ZXN0X3N0cnVjdHVyZV82IHRzNl9hcmc7CisKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzYgKnRzNl9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfNiAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV82KSk7CisgIAorICBhcmdzWzBdID0gJnRzNl90eXBlOworICB2YWx1ZXNbMF0gPSAmdHM2X2FyZzsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzNl90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM2X2FyZy5mID0gNS41NWY7CisgIHRzNl9hcmcuZCA9IDYuNjY7CisgIAorICBwcmludGYgKCIlZ1xuIiwgdHM2X2FyZy5mKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzNl9hcmcuZCk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDYpLCB0czZfcmVzdWx0LCB2YWx1ZXMpOworICAgIAorICBDSEVDSyh0czZfcmVzdWx0LT5mID09IDUuNTVmICsgMSk7CisgIENIRUNLKHRzNl9yZXN1bHQtPmQgPT0gNi42NiArIDEpOworICAgIAorICBmcmVlICh0czZfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFhYzRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCit0eXBlZGVmIHN0cnVjdAoreworICBmbG9hdCBmMTsKKyAgZmxvYXQgZjI7CisgIGRvdWJsZSBkOworfSB0ZXN0X3N0cnVjdHVyZV83OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNyBzdHJ1Y3Q3ICh0ZXN0X3N0cnVjdHVyZV83IHRzKQoreworICB0cy5mMSArPSAxOworICB0cy5mMiArPSAxOworICB0cy5kICs9IDE7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHM3X3R5cGU7CisgIGZmaV90eXBlICp0czdfdHlwZV9lbGVtZW50c1s0XTsKKyAgdHM3X3R5cGUuc2l6ZSA9IDA7CisgIHRzN190eXBlLmFsaWdubWVudCA9IDA7CisgIHRzN190eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzN190eXBlLmVsZW1lbnRzID0gdHM3X3R5cGVfZWxlbWVudHM7CisgIHRzN190eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czdfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM3X3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czdfdHlwZV9lbGVtZW50c1szXSA9IE5VTEw7CisKKworICB0ZXN0X3N0cnVjdHVyZV83IHRzN19hcmc7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNyAqdHM3X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV83ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzcpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM3X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czdfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czdfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzN19hcmcuZjEgPSA1LjU1ZjsKKyAgdHM3X2FyZy5mMiA9IDU1LjVmOworICB0czdfYXJnLmQgPSA2LjY2OworCisgIHByaW50ZiAoIiVnXG4iLCB0czdfYXJnLmYxKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzN19hcmcuZjIpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X2FyZy5kKTsKKyAgCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3Q3KSwgdHM3X3Jlc3VsdCwgdmFsdWVzKTsKKworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZjEpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZjIpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZCk7CisgIAorICBDSEVDSyh0czdfcmVzdWx0LT5mMSA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czdfcmVzdWx0LT5mMiA9PSA1NS41ZiArIDEpOworICBDSEVDSyh0czdfcmVzdWx0LT5kID09IDYuNjYgKyAxKTsKKyAgCisgIGZyZWUgKHRzN19yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzNhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKQEAgLTAsMCArMSw4MCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGYxOworICBmbG9hdCBmMjsKKyAgZmxvYXQgZjM7CisgIGZsb2F0IGY0OworfSB0ZXN0X3N0cnVjdHVyZV84OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOCBzdHJ1Y3Q4ICh0ZXN0X3N0cnVjdHVyZV84IHRzKQoreworICB0cy5mMSArPSAxOworICB0cy5mMiArPSAxOworICB0cy5mMyArPSAxOworICB0cy5mNCArPSAxOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzOF90eXBlOworICBmZmlfdHlwZSAqdHM4X3R5cGVfZWxlbWVudHNbNV07CisgIHRzOF90eXBlLnNpemUgPSAwOworICB0czhfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czhfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czhfdHlwZS5lbGVtZW50cyA9IHRzOF90eXBlX2VsZW1lbnRzOworICB0czhfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM4X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzOF90eXBlX2VsZW1lbnRzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czhfdHlwZV9lbGVtZW50c1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM4X3R5cGVfZWxlbWVudHNbNF0gPSBOVUxMOworCisgIHRlc3Rfc3RydWN0dXJlXzggdHM4X2FyZzsKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV84ICp0czhfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzggKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfOCkpOworICAKKyAgYXJnc1swXSA9ICZ0czhfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzOF9hcmc7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzOF90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM4X2FyZy5mMSA9IDUuNTVmOworICB0czhfYXJnLmYyID0gNTUuNWY7CisgIHRzOF9hcmcuZjMgPSAtNS41NWY7CisgIHRzOF9hcmcuZjQgPSAtNTUuNWY7CisKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9hcmcuZjEpOworICBwcmludGYgKCIlZ1xuIiwgdHM4X2FyZy5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfYXJnLmYzKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9hcmcuZjQpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDgpLCB0czhfcmVzdWx0LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMyk7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mNCk7CisgIAorICBDSEVDSyh0czhfcmVzdWx0LT5mMSA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czhfcmVzdWx0LT5mMiA9PSA1NS41ZiArIDEpOworICBDSEVDSyh0czhfcmVzdWx0LT5mMyA9PSAtNS41NWYgKyAxKTsKKyAgQ0hFQ0sodHM4X3Jlc3VsdC0+ZjQgPT0gLTU1LjVmICsgMSk7CisgIAorICBmcmVlICh0czhfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzAwOTFmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGY7CisgIGludCBpOworfSB0ZXN0X3N0cnVjdHVyZV85OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOSBzdHJ1Y3Q5ICh0ZXN0X3N0cnVjdHVyZV85IHRzKQoreworICB0cy5mICs9IDE7CisgIHRzLmkgKz0gMTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czlfdHlwZTsKKyAgZmZpX3R5cGUgKnRzOV90eXBlX2VsZW1lbnRzWzNdOworICB0czlfdHlwZS5zaXplID0gMDsKKyAgdHM5X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM5X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHM5X3R5cGUuZWxlbWVudHMgPSB0czlfdHlwZV9lbGVtZW50czsKKyAgdHM5X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzOV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIHRzOV90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworICB0ZXN0X3N0cnVjdHVyZV85IHRzOV9hcmc7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfOSAqdHM5X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV85ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzkpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM5X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czlfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czlfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzOV9hcmcuZiA9IDUuNTVmOworICB0czlfYXJnLmkgPSA1OworICAKKyAgcHJpbnRmICgiJWdcbiIsIHRzOV9hcmcuZik7CisgIHByaW50ZiAoIiVkXG4iLCB0czlfYXJnLmkpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDkpLCB0czlfcmVzdWx0LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVnXG4iLCB0czlfcmVzdWx0LT5mKTsKKyAgcHJpbnRmICgiJWRcbiIsIHRzOV9yZXN1bHQtPmkpOworICAKKyAgQ0hFQ0sodHM5X3Jlc3VsdC0+ZiA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czlfcmVzdWx0LT5pID09IDUgKyAxKTsKKworICBmcmVlICh0czlfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWNjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCTQxOTA4LgorICAgT3JpZ2luYXRvcjoJPHJmbUBnbnUub3JnPiAyMDA5MTEwMgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGZsb2F0IGE7CisgIGZsb2F0IGI7CisgIGZsb2F0IGM7CisgIGZsb2F0IGQ7Cit9IGNsc19zdHJ1Y3RfY29tYmluZWQ7CisKK3ZvaWQgY2xzX3N0cnVjdF9jb21iaW5lZF9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBhcmcpCit7CisgIHByaW50ZigiJWcgJWcgJWcgJWdcbiIsCisJIGFyZy5hLCBhcmcuYiwKKwkgYXJnLmMsIGFyZy5kKTsKKyAgZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2NvbWJpbmVkX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwIF9fVU5VU0VEX18sCisgICAgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBhMDsKKworICBhMCA9ICooc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQqKShhcmdzWzBdKTsKKworICBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKGEwKTsKK30KKworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczBbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTA7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZTAuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTAuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMC50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUwLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMwOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGdfZGJsID0gezQuMCwgNS4wLCAxLjAsIDguMH07CisKKyAgY2xzX3N0cnVjdF9maWVsZHMwWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczBbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMFsyXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHMwWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczBbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlMDsKKyAgZGJsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJmZmaV90eXBlX3ZvaWQsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfY29tYmluZWRfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgKCh2b2lkKCopKGNsc19zdHJ1Y3RfY29tYmluZWQpKSAoY29kZSkpKGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjQgNSAxIDgiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y1NDQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSAiZmZpY29uZmlnLmgiCisKKyNkZWZpbmUgTUFYX0FSR1MgMjU2CisKKworLyogRGVmaW5lIF9fVU5VU0VEX18gdGhhdCBhbHNvIG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCisjdW5kZWYgX19VTlVTRURfXworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZSBfX1VOVVNFRF9fCisjZW5kaWYKKworI2RlZmluZSBDSEVDSyh4KSAoISh4KSA/IGFib3J0KCkgOiAodm9pZCkwKQorCisvKiBQcmVmZXIgTUFQX0FOT04oWU1PVVMpIHRvIC9kZXYvemVybywgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEKKyAgIGZpbGUgb3Blbi4gICovCisjaWZkZWYgSEFWRV9NTUFQX0FOT04KKyMgdW5kZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisKKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIE1BUF9GQUlMRUQKKyMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkIChNQVBfQU5PTikKKyMgIGRlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCisjIGVuZGlmCisjIGRlZmluZSBVU0lOR19NTUFQCisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisKKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIE1BUF9GQUlMRUQKKyMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCisjIGVuZGlmCisjIGRlZmluZSBVU0lOR19NTUFQCisKKyNlbmRpZgorCisKKy8qIE1pbkdXIGtsdWRnZS4gICovCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIFBSSWRMTCAiSTY0ZCIKKyNkZWZpbmUgUFJJdUxMICJJNjR1IgorI2Vsc2UKKyNkZWZpbmUgUFJJZExMICJsbGQiCisjZGVmaW5lIFBSSXVMTCAibGx1IgorI2VuZGlmCisKKyNpZmRlZiBVU0lOR19NTUFQCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYWxsb2NhdGVfbW1hcCAoc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnBhZ2U7CisjaWYgZGVmaW5lZCAoSEFWRV9NTUFQX0RFVl9aRVJPKQorICBzdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworICBpZiAoZGV2X3plcm9fZmQgPT0gLTEpCisgICAgeworICAgICAgZGV2X3plcm9fZmQgPSBvcGVuICgiL2Rldi96ZXJvIiwgT19SRE9OTFkpOworICAgICAgaWYgKGRldl96ZXJvX2ZkID09IC0xKQorCXsKKwkgIHBlcnJvciAoIm9wZW4gL2Rldi96ZXJvOiAlbSIpOworCSAgZXhpdCAoMSk7CisJfQorICAgIH0KKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX01NQVBfQU5PTgorICBwYWdlID0gbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKyAgcGFnZSA9IG1tYXAgKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCisJICAgICAgIE1BUF9QUklWQVRFLCBkZXZfemVyb19mZCwgMCk7CisjZW5kaWYKKworICBpZiAocGFnZSA9PSAoY2hhciAqKSBNQVBfRkFJTEVEKQorICAgIHsKKyAgICAgIHBlcnJvciAoInZpcnR1YWwgbWVtb3J5IGV4aGF1c3RlZCIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIHJldHVybiBwYWdlOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2N2U4NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbG9hZF9saWIgbGliZmZpLWRnLmV4cAorCitkZy1pbml0CitsaWJmZmktaW5pdAorCitnbG9iYWwgc3JjZGlyIHN1YmRpcgorCitnbG9iYWwgY3h4X29wdGlvbnMKKworc2V0IGN4eF9vcHRpb25zICIgLXNoYXJlZC1saWJnY2MgLWxzdGRjKysiCisKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzAgLVcgLVdhbGwiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8yIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMyIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItT3MiCisKK2RnLWZpbmlzaAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgdGNsLWluZGVudC1sZXZlbDo0CisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmZkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCkBAIC0wLDAgKzEsMTI0IEBACisvKiBBcmVhOglmZmlfY2xvc3VyZSwgdW53aW5kIGluZm8KKyAgIFB1cnBvc2U6CUNoZWNrIGlmIHRoZSB1bndpbmQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJSmVmZiBTdHVybSA8anN0dXJtQG9uZS1wb2ludC5jb20+ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdGN4eC5oIgorCisjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCit2b2lkCitjbG9zdXJlX3Rlc3RfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKKwkJdm9pZCoqIGFyZ3MgX19VTlVTRURfXywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgdGhyb3cgOTsKK30KKwordHlwZWRlZiB2b2lkICgqY2xvc3VyZV90ZXN0X3R5cGUpKCk7CisKK3ZvaWQgY2xvc3VyZV90ZXN0X2ZuMShmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwKKwkJICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgICooZmZpX2FyZyopcmVzcCA9CisgICAgICAoaW50KSooZmxvYXQgKilhcmdzWzBdICsoaW50KSgqKGZsb2F0ICopYXJnc1sxXSkgKworICAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pICsgKGludCkqKGZsb2F0ICopYXJnc1szXSArCisgICAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pICsKKyAgICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAgIChpbnQpKCooZG91YmxlKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICooaW50ICopYXJnc1sxNV0gKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKKworICAgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0sIChpbnQpKCooZmxvYXQgKilhcmdzWzFdKSwKKwkgICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSksIChpbnQpKihmbG9hdCAqKWFyZ3NbM10sCisJICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pLAorCSAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJICAgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJICAgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwgKihpbnQgKilhcmdzWzE1XSwKKwkgICAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcqKXJlc3ApOworCisgICAgdGhyb3cgKGludCkqKGZmaV9hcmcqKXJlc3A7Cit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUxKShmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgc2lnbmVkIHNob3J0LAorCQkJCSAgZmxvYXQsIGZsb2F0LCBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LAorCQkJCSAgaW50LCBpbnQsIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gKGZmaV9jbG9zdXJlICopZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisKKyAgeworICAgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAwLAorCQkgICAgICAgJmZmaV90eXBlX3ZvaWQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKyAgICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICAgIHRyeQorICAgICAgeworCSgqKChjbG9zdXJlX3Rlc3RfdHlwZSkoY29kZSkpKSgpOworICAgICAgfSBjYXRjaCAoaW50IGV4Y2VwdGlvbl9jb2RlKQorICAgICAgeworCUNIRUNLKGV4Y2VwdGlvbl9jb2RlID09IDkpOworICAgICAgfQorCisgICAgcHJpbnRmKCJwYXJ0IG9uZSBPS1xuIik7CisgICAgLyogeyBkZy1vdXRwdXQgInBhcnQgb25lIE9LIiB9ICovCisgICAgfQorCisgICAgeworCisgICAgICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICAgICAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICAgICAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICAgICAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCQkgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICAgICAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgID09IEZGSV9PSyk7CisgICAgICB0cnkKKwl7CisJICAoKigoY2xvc3VyZV90ZXN0X3R5cGUxKWNvZGUpKQorCSAgICAoMS4xLCAyLjIsIDMuMywgNC40LCAxMjcsIDUuNSwgNi42LCA4LCA5LCAxMCwgMTEsIDEyLjAsIDEzLAorCSAgICAgMTksIDIxLCAxKTsKKwkgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgMTI3IDUgNiA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiAyNTUiIH0gKi8KKwl9IGNhdGNoIChpbnQgZXhjZXB0aW9uX2NvZGUpCisJeworCSAgQ0hFQ0soZXhjZXB0aW9uX2NvZGUgPT0gMjU1KTsKKwl9CisgICAgICBwcmludGYoInBhcnQgdHdvIE9LXG4iKTsKKyAgICAgIC8qIHsgZGctb3V0cHV0ICJcbnBhcnQgdHdvIE9LIiB9ICovCisgICAgfQorICAgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTczOWNkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpAQCAtMCwwICsxLDUzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgdW53aW5kIGluZm8KKyAgIFB1cnBvc2U6CUNoZWNrIGlmIHRoZSB1bndpbmQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJQW5kcmVhcyBUb2JsZXIgPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA2MTIxMyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3RjeHguaCIKKworc3RhdGljIGludCBjaGVja2luZyhpbnQgYSBfX1VOVVNFRF9fLCBzaG9ydCBiIF9fVU5VU0VEX18sCisJCSAgICBzaWduZWQgY2hhciBjIF9fVU5VU0VEX18pCit7CisgIHRocm93IDk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfYXJnIHJpbnQ7CisKKyAgc2lnbmVkIGludCBzaTsKKyAgc2lnbmVkIHNob3J0IHNzOworICBzaWduZWQgY2hhciBzYzsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIHZhbHVlc1swXSA9ICZzaTsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIHZhbHVlc1sxXSA9ICZzczsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgdmFsdWVzWzJdID0gJnNjOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOworCisgIHNpID0gLTY7CisgIHNzID0gLTEyOworICBzYyA9IC0xOworICB7CisgICAgdHJ5CisgICAgICB7CisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNoZWNraW5nKSwgJnJpbnQsIHZhbHVlcyk7CisgICAgICB9IGNhdGNoIChpbnQgZXhjZXB0aW9uX2NvZGUpCisgICAgICB7CisJQ0hFQ0soZXhjZXB0aW9uX2NvZGUgPT0gOSk7CisgICAgICB9CisgICAgcHJpbnRmKCJwYXJ0IG9uZSBPS1xuIik7CisgICAgLyogeyBkZy1vdXRwdXQgInBhcnQgb25lIE9LIiB9ICovCisgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmM0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4CkBAIC0wLDAgKzEsNzIxMCBAQAorJSB0ZXhpbmZvLnRleCAtLSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgorJQorJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCitcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQorJQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDA1LTA3LTA1LjE5fQorJQorJSBDb3B5cmlnaHQgKEMpIDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQorJSBGb3VuZGF0aW9uLCBJbmMuCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorJSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCislCislIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCislIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKKyUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislCislIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIHJlYWQgYnkgVGVYIHdoZW4gcHJvY2Vzc2luZworJSBhIFRleGluZm8gc291cmNlIGRvY3VtZW50LCB5b3UgbWF5IHVzZSB0aGUgcmVzdWx0IHdpdGhvdXQKKyUgcmVzdHJpY3Rpb24uICAoVGhpcyBoYXMgYmVlbiBvdXIgaW50ZW50IHNpbmNlIFRleGluZm8gd2FzIGludmVudGVkLikKKyUKKyUgUGxlYXNlIHRyeSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGV4aW5mby50ZXggYmVmb3JlIHN1Ym1pdHRpbmcgYnVnCislIHJlcG9ydHM7IHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tOgorJSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyAodGhlIFRleGluZm8gaG9tZSBwYWdlKSwgb3IKKyUgICBmdHA6Ly90dWcub3JnL3RleC90ZXhpbmZvLnRleAorJSAgICAgKGFuZCBhbGwgQ1RBTiBtaXJyb3JzLCBzZWUgaHR0cDovL3d3dy5jdGFuLm9yZykuCislIFRoZSB0ZXhpbmZvLnRleCBpbiBhbnkgZ2l2ZW4gZGlzdHJpYnV0aW9uIGNvdWxkIHdlbGwgYmUgb3V0CislIG9mIGRhdGUsIHNvIGlmIHRoYXQncyB3aGF0IHlvdSdyZSB1c2luZywgcGxlYXNlIGNoZWNrLgorJQorJSBTZW5kIGJ1ZyByZXBvcnRzIHRvIGJ1Zy10ZXhpbmZvQGdudS5vcmcuICBQbGVhc2UgaW5jbHVkZSBpbmNsdWRpbmcgYQorJSBjb21wbGV0ZSBkb2N1bWVudCBpbiBlYWNoIGJ1ZyByZXBvcnQgd2l0aCB3aGljaCB3ZSBjYW4gcmVwcm9kdWNlIHRoZQorJSBwcm9ibGVtLiAgUGF0Y2hlcyBhcmUsIG9mIGNvdXJzZSwgZ3JlYXRseSBhcHByZWNpYXRlZC4KKyUKKyUgVG8gcHJvY2VzcyBhIFRleGluZm8gbWFudWFsIHdpdGggVGVYLCBpdCdzIG1vc3QgcmVsaWFibGUgdG8gdXNlIHRoZQorJSB0ZXhpMmR2aSBzaGVsbCBzY3JpcHQgdGhhdCBjb21lcyB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgYSBzaW1wbGUKKyUgbWFudWFsIGZvby50ZXhpLCBob3dldmVyLCB5b3UgY2FuIGdldCBhd2F5IHdpdGggdGhpczoKKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXhpbmRleCBmb28uPz8KKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXggZm9vLnRleGkKKyUgICBkdmlwcyBmb28uZHZpIC1vICAjIG9yIHdoYXRldmVyOyB0aGlzIG1ha2VzIGZvby5wcy4KKyUgVGhlIGV4dHJhIFRlWCBydW5zIGdldCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGluZm9ybWF0aW9uIGNvcnJlY3QuCislIFNvbWV0aW1lcyBvbmUgcnVuIGFmdGVyIHRleGluZGV4IHN1ZmZpY2VzLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIG1vcmUKKyUgdGhhbiB0d287IHRleGkyZHZpIGRvZXMgaXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCislCislIEl0IGlzIHBvc3NpYmxlIHRvIGFkYXB0IHRleGluZm8udGV4IGZvciBvdGhlciBsYW5ndWFnZXMsIHRvIHNvbWUKKyUgZXh0ZW50LiAgWW91IGNhbiBnZXQgdGhlIGV4aXN0aW5nIGxhbmd1YWdlLXNwZWNpZmljIGZpbGVzIGZyb20gdGhlCislIGZ1bGwgVGV4aW5mbyBkaXN0cmlidXRpb24uCislCislIFRoZSBHTlUgVGV4aW5mbyBob21lIHBhZ2UgaXMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8uCisKKworXG1lc3NhZ2V7TG9hZGluZyB0ZXhpbmZvIFt2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl06fQorCislIElmIGluIGEgLmZtdCBmaWxlLCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIKKyUgYW5kIHR1cm4gb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCB3ZSBjb3VsZG4ndCBkbyBlYXJsaWVyIGJlY2F1c2UKKyUgdGhleSBtaWdodCBoYXZlIGFwcGVhcmVkIGluIHRoZSBpbnB1dCBmaWxlIG5hbWUuCitcZXZlcnlqb2J7XG1lc3NhZ2V7W1RleGluZm8gdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dfSUKKyAgXGNhdGNvZGVgKz1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmV9CisKK1xtZXNzYWdle0Jhc2ljcyx9CitcY2hhcmRlZlxvdGhlcj0xMgorCislIFdlIG5ldmVyIHdhbnQgcGxhaW4ncyBcb3V0ZXIgZGVmaW5pdGlvbiBvZiBcKyBpbiBUZXhpbmZvLgorJSBGb3IgQHRleCwgd2UgY2FuIHVzZSBcdGFiYWxpZ24uCitcbGV0XCsgPSBccmVsYXgKKworJSBTYXZlIHNvbWUgcGxhaW4gdGV4IG1hY3JvcyB3aG9zZSBuYW1lcyB3ZSB3aWxsIHJlZGVmaW5lLgorXGxldFxwdGV4Yj1cYgorXGxldFxwdGV4YnVsbGV0PVxidWxsZXQKK1xsZXRccHRleGM9XGMKK1xsZXRccHRleGNvbW1hPVwsCitcbGV0XHB0ZXhkb3Q9XC4KK1xsZXRccHRleGRvdHM9XGRvdHMKK1xsZXRccHRleGVuZD1cZW5kCitcbGV0XHB0ZXhlcXVpdj1cZXF1aXYKK1xsZXRccHRleGV4Y2xhbT1cIQorXGxldFxwdGV4Zm9vdG5vdGU9XGZvb3Rub3RlCitcbGV0XHB0ZXhndHI9PgorXGxldFxwdGV4aGF0PV4KK1xsZXRccHRleGk9XGkKK1xsZXRccHRleGluZGVudD1caW5kZW50CitcbGV0XHB0ZXhpbnNlcnQ9XGluc2VydAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCitcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorCislIElmIHRoaXMgY2hhcmFjdGVyIGFwcGVhcnMgaW4gYW4gZXJyb3IgbWVzc2FnZSBvciBoZWxwIHN0cmluZywgaXQKKyUgc3RhcnRzIGEgbmV3IGxpbmUgaW4gdGhlIG91dHB1dC4KK1xuZXdsaW5lY2hhciA9IGBeXkoKKworJSBVc2UgVGVYIDMuMCdzIFxpbnB1dGxpbmVubyB0byBnZXQgdGhlIGxpbmUgbnVtYmVyLCBmb3IgYmV0dGVyIGVycm9yCislIG1lc3NhZ2VzLCBidXQgaWYgd2UncmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4KKyUKK1xpZnhcaW5wdXRsaW5lbm9cdGhpc2lzdW5kZWZpbmVkCisgIFxsZXRcbGluZW51bWJlciA9IFxlbXB0eSAlIFByZS0zLjAuCitcZWxzZQorICBcZGVmXGxpbmVudW1iZXJ7bC5cdGhlXGlucHV0bGluZW5vOlxzcGFjZX0KK1xmaQorCislIFNldCB1cCBmaXhlZCB3b3JkcyBmb3IgRW5nbGlzaCBpZiBub3QgYWxyZWFkeSBzZXQuCitcaWZ4XHB1dHdvcmRBcHBlbmRpeFx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRBcHBlbmRpeHtBcHBlbmRpeH1cZmkKK1xpZnhccHV0d29yZENoYXB0ZXJcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZENoYXB0ZXJ7Q2hhcHRlcn1cZmkKK1xpZnhccHV0d29yZGZpbGVcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZGZpbGV7ZmlsZX1cZmkKK1xpZnhccHV0d29yZGluXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZGlue2lufVxmaQorXGlmeFxwdXR3b3JkSW5kZXhJc0VtcHR5XHVuZGVmaW5lZCAgICAgXGdkZWZccHV0d29yZEluZGV4SXNFbXB0eXsoSW5kZXggaXMgZW1wdHkpfVxmaQorXGlmeFxwdXR3b3JkSW5kZXhOb25leGlzdGVudFx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluZGV4Tm9uZXhpc3RlbnR7KEluZGV4IGlzIG5vbmV4aXN0ZW50KX1cZmkKK1xpZnhccHV0d29yZEluZm9cdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZEluZm97SW5mb31cZmkKK1xpZnhccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZlx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZntJbnN0YW5jZSBWYXJpYWJsZSBvZn1cZmkKK1xpZnhccHV0d29yZE1ldGhvZG9uXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZE1ldGhvZG9ue01ldGhvZCBvbn1cZmkKK1xpZnhccHV0d29yZE5vVGl0bGVcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZE5vVGl0bGV7Tm8gVGl0bGV9XGZpCitcaWZ4XHB1dHdvcmRvZlx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvZntvZn1cZmkKK1xpZnhccHV0d29yZG9uXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9ue29ufVxmaQorXGlmeFxwdXR3b3JkcGFnZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkcGFnZXtwYWdlfVxmaQorXGlmeFxwdXR3b3Jkc2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3Jkc2VjdGlvbntzZWN0aW9ufVxmaQorXGlmeFxwdXR3b3JkU2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkU2VjdGlvbntTZWN0aW9ufVxmaQorXGlmeFxwdXR3b3Jkc2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3Jkc2Vle3NlZX1cZmkKK1xpZnhccHV0d29yZFNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFNlZXtTZWV9XGZpCitcaWZ4XHB1dHdvcmRTaG9ydFRPQ1x1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRTaG9ydFRPQ3tTaG9ydCBDb250ZW50c31cZmkKK1xpZnhccHV0d29yZFRPQ1x1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFRPQ3tUYWJsZSBvZiBDb250ZW50c31cZmkKKyUKK1xpZnhccHV0d29yZE1KYW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSmFue0phbnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNRmViXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUZlYntGZWJydWFyeX1cZmkKK1xpZnhccHV0d29yZE1NYXJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWFye01hcmNofVxmaQorXGlmeFxwdXR3b3JkTUFwclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BcHJ7QXByaWx9XGZpCitcaWZ4XHB1dHdvcmRNTWF5XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1heXtNYXl9XGZpCitcaWZ4XHB1dHdvcmRNSnVuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bntKdW5lfVxmaQorXGlmeFxwdXR3b3JkTUp1bFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdWx7SnVseX1cZmkKK1xpZnhccHV0d29yZE1BdWdcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXVne0F1Z3VzdH1cZmkKK1xpZnhccHV0d29yZE1TZXBcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNU2Vwe1NlcHRlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1PY3RcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNT2N0e09jdG9iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNTm92XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU5vdntOb3ZlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1EZWNcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRGVje0RlY2VtYmVyfVxmaQorJQorXGlmeFxwdXR3b3JkRGVmbWFjXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmbWFje01hY3JvfVxmaQorXGlmeFxwdXR3b3JkRGVmc3BlY1x1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkRGVmc3BlY3tTcGVjaWFsIEZvcm19XGZpCitcaWZ4XHB1dHdvcmREZWZ2YXJcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZ2YXJ7VmFyaWFibGV9XGZpCitcaWZ4XHB1dHdvcmREZWZvcHRcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZvcHR7VXNlciBPcHRpb259XGZpCitcaWZ4XHB1dHdvcmREZWZmdW5jXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZmdW5je0Z1bmN0aW9ufVxmaQorCislIEluIHNvbWUgbWFjcm9zLCB3ZSBjYW5ub3QgdXNlIHRoZSBgXD8gbm90YXRpb24tLS10aGUgbGVmdCBxdW90ZSBpcworJSBpbiBzb21lIGNhc2VzIHRoZSBlc2NhcGUgY2hhci4KK1xjaGFyZGVmXGJhY2tDaGFyICA9IGBcXAorXGNoYXJkZWZcY29sb25DaGFyID0gYFw6CitcY2hhcmRlZlxjb21tYUNoYXIgPSBgXCwKK1xjaGFyZGVmXGRvdENoYXIgICA9IGBcLgorXGNoYXJkZWZcZXhjbGFtQ2hhcj0gYFwhCitcY2hhcmRlZlxwbHVzQ2hhciAgPSBgXCsKK1xjaGFyZGVmXHF1ZXN0Q2hhciA9IGBcPworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CitcY2hhcmRlZlx1bmRlckNoYXIgPSBgXF8KKworXGNoYXJkZWZcc3BhY2VDaGFyID0gYFwgJQorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVcc3BhY2VDaGFyPVxzcGFjZWNhdH0KKworeyUgZm9yIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuCisgJSBleGFtcGxlIHVzYWdlOiBcZXhwYW5kYWZ0ZXJcc2hvd1xhY3RpdmViYWNrc2xhc2gKKyBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcYWN0aXZlCisgIWdsb2JhbCFkZWYhYWN0aXZlYmFja3NsYXNoe1x9Cit9CisKKyUgSWdub3JlIGEgdG9rZW4uCislCitcZGVmXGdvYmJsZSMxe30KKworJSBUaGUgZm9sbG93aW5nIGlzIHVzZWQgaW5zaWRlIHNldmVyYWwgXGVkZWYncy4KK1xkZWZcbWFrZWNzbmFtZSMxe1xleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWUjMVxlbmRjc25hbWV9CisKKyUgSHlwaGVuYXRpb24gZml4ZXMuCitcaHlwaGVuYXRpb257CisgIEZsb3ItaS1kYSBHaG9zdC1zY3JpcHQgR2hvc3QtdmlldyBNYWMtT1MgUG9zdC1TY3JpcHQKKyAgYXAtcGVuLWRpeCBiaXQtbWFwIGJpdC1tYXBzCisgIGRhdGEtYmFzZSBkYXRhLWJhc2VzIGVzaGVsbCBmYWxsLWluZyBoYWxmLXdheSBsb25nLWVzdCBtYW4tdS1zY3JpcHQKKyAgbWFuLXUtc2NyaXB0cyBtaW5pLWJ1Zi1mZXIgbWluaS1idWYtZmVycyBvdmVyLXZpZXcgcGFyLWEtZGlnbQorICBwYXItYS1kaWdtcyByYXRoLWVyIHJlYy10YW4tZ3UtbGFyIHJvLWJvdC1pY3Mgc2UtdmVyZS1seSBzZXQtdXAgc3BhLWNlcworICBzcGVsbC1pbmcgc3BlbGwtaW5ncworICBzdGFuZC1hbG9uZSBzdHJvbmctZXN0IHRpbWUtc3RhbXAgdGltZS1zdGFtcHMgd2hpY2gtZXZlciB3aGl0ZS1zcGFjZQorICB3aWRlLXNwcmVhZCB3cmFwLWFyb3VuZAorfQorCislIE1hcmdpbiB0byBhZGQgdG8gcmlnaHQgb2YgZXZlbiBwYWdlcywgdG8gbGVmdCBvZiBvZGQgcGFnZXMuCitcbmV3ZGltZW5cYmluZGluZ29mZnNldAorXG5ld2RpbWVuXG5vcm1hbG9mZnNldAorXG5ld2RpbWVuXHBhZ2V3aWR0aCBcbmV3ZGltZW5ccGFnZWhlaWdodAorCislIEZvciBhIGZpbmFsIGNvcHksIHRha2Ugb3V0IHRoZSByZWN0YW5nbGVzCislIHRoYXQgbWFyayBvdmVyZnVsbCBib3hlcyAoaW4gY2FzZSB5b3UgaGF2ZSBkZWNpZGVkCislIHRoYXQgdGhlIHRleHQgbG9va3Mgb2sgZXZlbiB0aG91Z2ggaXQgcGFzc2VzIHRoZSBtYXJnaW4pLgorJQorXGRlZlxmaW5hbG91dHtcb3ZlcmZ1bGxydWxlPTBwdH0KKworJSBAfCBpbnNlcnRzIGEgY2hhbmdlYmFyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGxpbmUuICBJdCBzaG91bGQKKyUgc3Vycm91bmQgYW55IGNoYW5nZWQgdGV4dC4gIFRoaXMgYXBwcm9hY2ggZG9lcyAqbm90KiB3b3JrIGlmIHRoZQorJSBjaGFuZ2Ugc3BhbnMgbW9yZSB0aGFuIHR3byBsaW5lcyBvZiBvdXRwdXQuICBUbyBoYW5kbGUgdGhhdCwgd2Ugd291bGQKKyUgaGF2ZSBhZG9wdCBhIG11Y2ggbW9yZSBkaWZmaWN1bHQgYXBwcm9hY2ggKHB1dHRpbmcgbWFya3MgaW50byB0aGUgbWFpbgorJSB2ZXJ0aWNhbCBsaXN0IGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZWFjaCBjaGFuZ2UpLgorJQorXGRlZlx8eyUKKyAgJSBcdmFkanVzdCBjYW4gb25seSBiZSB1c2VkIGluIGhvcml6b250YWwgbW9kZS4KKyAgXGxlYXZldm1vZGUKKyAgJQorICAlIEFwcGVuZCB0aGlzIHZlcnRpY2FsIG1vZGUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgb3V0cHV0LgorICBcdmFkanVzdHslCisgICAgJSBXZSB3YW50IHRvIGluc2VydCBhIHJ1bGUgd2l0aCB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgY3VycmVudAorICAgICUgbGVhZGluZzsgdGhhdCBpcyBleGFjdGx5IHdoYXQgXHN0cnV0Ym94IGlzIHN1cHBvc2VkIHRvIHJlY29yZC4KKyAgICBcdnNraXAtXGJhc2VsaW5lc2tpcAorICAgICUKKyAgICAlIFx2YWRqdXN0LWl0ZW1zIGFyZSBpbnNlcnRlZCBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0eXBlLiAgU28KKyAgICAlIHRoZSBcbGxhcCBoZXJlIG1vdmVzIG91dCBpbnRvIHRoZSBsZWZ0LWhhbmQgbWFyZ2luLgorICAgIFxsbGFweyUKKyAgICAgICUKKyAgICAgICUgRm9yIGEgdGhpY2tlciBvciB0aGlubmVyIGJhciwgY2hhbmdlIHRoZSBgMXB0Jy4KKyAgICAgIFx2cnVsZSBoZWlnaHRcYmFzZWxpbmVza2lwIHdpZHRoMXB0CisgICAgICAlCisgICAgICAlIFRoaXMgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRleHQuCisgICAgICBcaHNraXAgMTJwdAorICAgIH0lCisgIH0lCit9CisKKyUgU29tZXRpbWVzIGl0IGlzIGNvbnZlbmllbnQgdG8gaGF2ZSBldmVyeXRoaW5nIGluIHRoZSB0cmFuc2NyaXB0IGZpbGUKKyUgYW5kIG5vdGhpbmcgb24gdGhlIHRlcm1pbmFsLiAgV2UgZG9uJ3QganVzdCBjYWxsIFx0cmFjaW5nYWxsIGhlcmUsCislIHNpbmNlIHRoYXQgcHJvZHVjZXMgc29tZSB1c2VsZXNzIG91dHB1dCBvbiB0aGUgdGVybWluYWwuICBXZSBhbHNvIG1ha2UKKyUgc29tZSBlZmZvcnQgdG8gb3JkZXIgdGhlIHRyYWNpbmcgY29tbWFuZHMgdG8gcmVkdWNlIG91dHB1dCBpbiB0aGUgbG9nCislIGZpbGU7IGNmLiB0cmFjZS5zdHkgaW4gTGFUZVguCislCitcZGVmXGdsb2dnaW5nYWxse1xiZWdpbmdyb3VwIFxnbG9iYWxkZWZzID0gMSBcbG9nZ2luZ2FsbCBcZW5kZ3JvdXB9JQorXGRlZlxsb2dnaW5nYWxseyUKKyAgXHRyYWNpbmdzdGF0czIKKyAgXHRyYWNpbmdwYWdlczEKKyAgXHRyYWNpbmdsb3N0Y2hhcnMyICAlIDIgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFx0cmFjaW5ncGFyYWdyYXBoczEKKyAgXHRyYWNpbmdvdXRwdXQxCisgIFx0cmFjaW5nbWFjcm9zMgorICBcdHJhY2luZ3Jlc3RvcmVzMQorICBcc2hvd2JveGJyZWFkdGhcbWF4ZGltZW4gXHNob3dib3hkZXB0aFxtYXhkaW1lbgorICBcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZFxlbHNlICUgZXRleCBnaXZlcyB1cyBtb3JlIGxvZ2dpbmcKKyAgICBcdHJhY2luZ3NjYW50b2tlbnMxCisgICAgXHRyYWNpbmdpZnMxCisgICAgXHRyYWNpbmdncm91cHMxCisgICAgXHRyYWNpbmduZXN0aW5nMgorICAgIFx0cmFjaW5nYXNzaWduczEKKyAgXGZpCisgIFx0cmFjaW5nY29tbWFuZHMzICAlIDMgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFxlcnJvcmNvbnRleHRsaW5lczE2Cit9JQorCislIGFkZCBjaGVjayBmb3IgXGxhc3RwZW5hbHR5IHRvIHBsYWluJ3MgZGVmaW5pdGlvbnMuICBJZiB0aGUgbGFzdCB0aGluZworJSB3ZSBkaWQgd2FzIGEgXG5vYnJlYWssIHdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0IG1vcmUgc3BhY2UuCislCitcZGVmXHNtYWxsYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcc21hbGxza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTUwXHNtYWxsc2tpcFxmaVxmaX0KK1xkZWZcbWVkYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcbWVkc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0xMDBcbWVkc2tpcFxmaVxmaX0KK1xkZWZcYmlnYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcYmlnc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0yMDBcYmlnc2tpcFxmaVxmaX0KKworJSBGb3IgQGNyb3BtYXJrcyBjb21tYW5kLgorJSBEbyBAY3JvcG1hcmtzIHRvIGdldCBjcm9wIG1hcmtzLgorJQorXG5ld2lmXGlmY3JvcG1hcmtzCitcbGV0XGNyb3BtYXJrcyA9IFxjcm9wbWFya3N0cnVlCislCislIERpbWVuc2lvbnMgdG8gYWRkIGNyb3BtYXJrcyBhdCBjb3JuZXJzLgorJSBBZGRlZCBieSBQLiBBLiBNYWNLYXksIDEyIE5vdi4gMTk4NgorJQorXG5ld2RpbWVuXG91dGVyaHNpemUgXG5ld2RpbWVuXG91dGVydnNpemUgJSBzZXQgYnkgdGhlIHBhcGVyIHNpemUgcm91dGluZXMKK1xuZXdkaW1lblxjb3JuZXJsb25nICBcY29ybmVybG9uZz0xcGMKK1xuZXdkaW1lblxjb3JuZXJ0aGljayBcY29ybmVydGhpY2s9LjNwdAorXG5ld2RpbWVuXHRvcGFuZGJvdHRvbW1hcmdpbiBcdG9wYW5kYm90dG9tbWFyZ2luPS43NWluCisKKyUgTWFpbiBvdXRwdXQgcm91dGluZS4KK1xjaGFyZGVmXFBBR0UgPSAyNTUKK1xvdXRwdXQgPSB7XG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xQQUdFfX0KKworXG5ld2JveFxoZWFkbGluZWJveAorXG5ld2JveFxmb290bGluZWJveAorCislIFxvbmVwYWdlb3V0IHRha2VzIGEgdmJveCBhcyBhbiBhcmd1bWVudC4gIE5vdGUgdGhhdCBccGFnZWNvbnRlbnRzCislIGRvZXMgaW5zZXJ0aW9ucywgYnV0IHlvdSBoYXZlIHRvIGNhbGwgaXQgeW91cnNlbGYuCitcZGVmXG9uZXBhZ2VvdXQjMXslCisgIFxpZmNyb3BtYXJrcyBcaG9mZnNldD0wcHQgXGVsc2UgXGhvZmZzZXQ9XG5vcm1hbG9mZnNldCBcZmkKKyAgJQorICBcaWZvZGRccGFnZW5vICBcYWR2YW5jZVxob2Zmc2V0IGJ5IFxiaW5kaW5nb2Zmc2V0CisgIFxlbHNlIFxhZHZhbmNlXGhvZmZzZXQgYnkgLVxiaW5kaW5nb2Zmc2V0XGZpCisgICUKKyAgJSBEbyB0aGlzIG91dHNpZGUgb2YgdGhlIFxzaGlwb3V0IHNvIEBjb2RlIGV0Yy4gd2lsbCBiZSBleHBhbmRlZCBpbgorICAlIHRoZSBoZWFkbGluZSBhcyB0aGV5IHNob3VsZCBiZSwgbm90IHRha2VuIGxpdGVyYWxseSAob3V0cHV0dGluZyAnJ2NvZGUpLgorICBcc2V0Ym94XGhlYWRsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlaGVhZGxpbmV9JQorICBcc2V0Ym94XGZvb3RsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlZm9vdGxpbmV9JQorICAlCisgIHslCisgICAgJSBIYXZlIHRvIGRvIHRoaXMgc3R1ZmYgb3V0c2lkZSB0aGUgXHNoaXBvdXQgYmVjYXVzZSB3ZSB3YW50IGl0IHRvCisgICAgJSB0YWtlIGVmZmVjdCBpbiBcd3JpdGUncywgeWV0IHRoZSBncm91cCBkZWZpbmVkIGJ5IHRoZSBcdmJveCBlbmRzCisgICAgJSBiZWZvcmUgdGhlIFxzaGlwb3V0IHJ1bnMuCisgICAgJQorICAgIFxpbmRleGR1bW1pZXMgICAgICAgICAlIGRvbid0IGV4cGFuZCBjb21tYW5kcyBpbiB0aGUgb3V0cHV0LgorICAgIFxzaGlwb3V0XHZib3h7JQorICAgICAgJSBEbyB0aGlzIGVhcmx5IHNvIHBkZiByZWZlcmVuY2VzIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuCisgICAgICBcaWZwZGZtYWtlcGFnZWRlc3QgXHBkZmRlc3QgbmFtZXtcdGhlXHBhZ2Vub30geHl6XGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MgXHZib3ggdG8gXG91dGVydnNpemVcYmdyb3VwCisgICAgICAgIFxoc2l6ZSA9IFxvdXRlcmhzaXplCisgICAgICAgIFx2c2tpcC1cdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFx2dG9wIHRvMHB0eyUKKyAgICAgICAgICBcbGluZXtcZXd0b3BcaGZpbFxld3RvcH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXHZzc30lCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXGxpbmVcYmdyb3VwCisgICAgICAgICAgXGhmaWwgJSBjZW50ZXIgdGhlIHBhZ2Ugd2l0aGluIHRoZSBvdXRlciAocGFnZSkgaHNpemUuCisgICAgICAgICAgXGlmb2RkXHBhZ2Vub1xoc2tpcFxiaW5kaW5nb2Zmc2V0XGZpCisgICAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFx1bnZib3hcaGVhZGxpbmVib3gKKyAgICAgIFxwYWdlYm9keXsjMX0lCisgICAgICBcaWZkaW1caHRcZm9vdGxpbmVib3ggPiAwcHQKKyAgICAgICAgJSBPbmx5IGxlYXZlIHRoaXMgc3BhY2UgaWYgdGhlIGZvb3RsaW5lIGlzIG5vbmVtcHR5LgorICAgICAgICAlIChXZSBsZXNzZW5lZCBcdnNpemUgZm9yIGl0IGluIFxvZGRmb290aW5neHh4LikKKyAgICAgICAgJSBUaGUgXGJhc2VsaW5lc2tpcD0yNHB0IGluIHBsYWluJ3MgXG1ha2Vmb290bGluZSBoYXMgbm8gZWZmZWN0LgorICAgICAgICBcdnNraXAgMlxiYXNlbGluZXNraXAKKyAgICAgICAgXHVudmJveFxmb290bGluZWJveAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MKKyAgICAgICAgICBcZWdyb3VwICUgZW5kIG9mIFx2Ym94XGJncm91cAorICAgICAgICBcaGZpbFxlZ3JvdXAgJSBlbmQgb2YgKGNlbnRlcmluZykgXGxpbmVcYmdyb3VwCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4gcGx1czFmaWxsIG1pbnVzMWZpbGwKKyAgICAgICAgXGJveG1heGRlcHRoID0gXGNvcm5lcnRoaWNrCisgICAgICAgIFx2Ym94IHRvMHB0e1x2c3MKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXtcZXdib3RcaGZpbFxld2JvdH0lCisgICAgICAgIH0lCisgICAgICBcZWdyb3VwICUgXHZib3ggZnJvbSBmaXJzdCBjcm9wbWFya3MgY2xhdXNlCisgICAgICBcZmkKKyAgICB9JSBlbmQgb2YgXHNoaXBvdXRcdmJveAorICB9JSBlbmQgb2YgZ3JvdXAgd2l0aCBcaW5kZXhkdW1taWVzCisgIFxhZHZhbmNlcGFnZW5vCisgIFxpZm51bVxvdXRwdXRwZW5hbHR5Pi0yMDAwMCBcZWxzZVxkb3N1cGVyZWplY3RcZmkKK30KKworXG5ld2luc2VydFxtYXJnaW4gXGRpbWVuXG1hcmdpbj1cbWF4ZGltZW4KKworXGRlZlxwYWdlYm9keSMxe1x2Ym94IHRvXHBhZ2VoZWlnaHR7XGJveG1heGRlcHRoPVxtYXhkZXB0aCAjMX19Cit7XGNhdGNvZGVgXEAgPTExCitcZ2RlZlxwYWdlY29udGVudHMjMXtcaWZ2b2lkXHRvcGluc1xlbHNlXHVudmJveFx0b3BpbnNcZmkKKyUgbWFyZ2luYWwgaGFja3MsIGp1aGFAdmlpc2EudXVjcCAoSnVoYSBUYWthbGEpCitcaWZ2b2lkXG1hcmdpblxlbHNlICUgbWFyZ2luYWwgaW5mbyBpcyBwcmVzZW50CisgIFxybGFwe1xrZXJuXGhzaXplXHZib3ggdG9cekB7XGtlcm4xcHRcYm94XG1hcmdpbiBcdnNzfX1cZmkKK1xkaW1lbkA9XGRwIzEgXHVudmJveCMxCitcaWZ2b2lkXGZvb3RpbnNcZWxzZVx2c2tpcFxza2lwXGZvb3RpbnNcZm9vdG5vdGVydWxlIFx1bnZib3hcZm9vdGluc1xmaQorXGlmckBnZ2VkYm90dG9tIFxrZXJuLVxkaW1lbkAgXHZmaWwgXGZpfQorfQorCislIEhlcmUgYXJlIHRoZSBydWxlcyBmb3IgdGhlIGNyb3BtYXJrcy4gIE5vdGUgdGhhdCB0aGV5IGFyZQorJSBvZmZzZXQgc28gdGhhdCB0aGUgc3BhY2UgYmV0d2VlbiB0aGVtIGlzIHRydWx5IFxvdXRlcmhzaXplIG9yIFxvdXRlcnZzaXplCislIChQLiBBLiBNYWNLYXksIDEyIE5vdmVtYmVyLCAxOTg2KQorJQorXGRlZlxld3RvcHtcdnJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoMHB0IHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zdG9we1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoXGNvcm5lcmxvbmcgd2lkdGhcY29ybmVydGhpY2t9fQorXGRlZlxld2JvdHtcdnJ1bGUgaGVpZ2h0MHB0IGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zYm90e1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcmxvbmcgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVydGhpY2t9fQorCislIFBhcnNlIGFuIGFyZ3VtZW50LCB0aGVuIHBhc3MgaXQgdG8gIzEuICBUaGUgYXJndW1lbnQgaXMgdGhlIHJlc3Qgb2YKKyUgdGhlIGlucHV0IGxpbmUgKGV4Y2VwdCB3ZSByZW1vdmUgYSB0cmFpbGluZyBjb21tZW50KS4gICMxIHNob3VsZCBiZSBhCislIG1hY3JvIHdoaWNoIGV4cGVjdHMgYW4gb3JkaW5hcnkgdW5kZWxpbWl0ZWQgVGVYIGFyZ3VtZW50LgorJQorXGRlZlxwYXJzZWFyZ3tccGFyc2Vhcmd1c2luZ3t9fQorXGRlZlxwYXJzZWFyZ3VzaW5nIzEjMnslCisgIFxkZWZcbmV4dHsjMn0lCisgIFxiZWdpbmdyb3VwCisgICAgXG9iZXlsaW5lcworICAgIFxzcGFjZWlzc3BhY2UKKyAgICAjMSUKKyAgICBccGFyc2VhcmdsaW5lXGVtcHR5JSBJbnNlcnQgdGhlIFxlbXB0eSB0b2tlbiwgc2VlIFxmaW5pc2hwYXJzZWFyZyBiZWxvdy4KK30KKwore1xvYmV5bGluZXMgJQorICBcZ2RlZlxwYXJzZWFyZ2xpbmUjMV5eTXslCisgICAgXGVuZGdyb3VwICUgRW5kIG9mIHRoZSBncm91cCBzdGFydGVkIGluIFxwYXJzZWFyZy4KKyAgICBcYXJncmVtb3ZlY29tbWVudCAjMVxjb21tZW50XEFyZ1Rlcm0lCisgIH0lCit9CisKKyUgRmlyc3QgcmVtb3ZlIGFueSBAY29tbWVudCwgdGhlbiBhbnkgQGMgY29tbWVudC4KK1xkZWZcYXJncmVtb3ZlY29tbWVudCMxXGNvbW1lbnQjMlxBcmdUZXJte1xhcmdyZW1vdmVjICMxXGNcQXJnVGVybX0KK1xkZWZcYXJncmVtb3ZlYyMxXGMjMlxBcmdUZXJte1xhcmdjaGVja3NwYWNlcyMxXF5eTVxBcmdUZXJtfQorCislIEVhY2ggb2NjdXJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBXZSBjYW5ub3QgdXNlIFxuZXh0IGhlcmUsIGFzIGl0IGhvbGRzIHRoZSBtYWNybyB0byBydW47CisgICAgJSB0aHVzIHdlIHJldXNlIFx0ZW1wLgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcbmV4dC4KKyUgKFNpbWlsYXJpbHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxuZXh0XGV4cGFuZGFmdGVyeyMxfX0KKworJSBccGFyc2VhcmdkZWZcZm9vey4uLn0KKyUJaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCislIFxkZWZcZm9ve1xwYXJzZWFyZ1xYZm9vfQorJSBcZGVmXFhmb28jMXsuLi59CislCislIEFjdHVhbGx5LCBJIHVzZSBcY3NuYW1lXHN0cmluZ1xmb29cZW5kY3NuYW1lLCBpZS4gXFxmb28sIGFzIGl0IGlzIG15CislIGZhdm91cml0ZSBUZVggdHJpY2suICAtLWthc2FsLCAxNm5vdjAzCisKK1xkZWZccGFyc2VhcmdkZWYjMXslCisgIFxleHBhbmRhZnRlciBcZG9wYXJzZWFyZ2RlZiBcY3NuYW1lXHN0cmluZyMxXGVuZGNzbmFtZSAjMSUKK30KK1xkZWZcZG9wYXJzZWFyZ2RlZiMxIzJ7JQorICBcZGVmIzJ7XHBhcnNlYXJnIzF9JQorICBcZGVmIzEjIzElCit9CisKKyUgU2V2ZXJhbCB1dGlsaXR5IGRlZmluaXRpb25zIHdpdGggYWN0aXZlIHNwYWNlOgoreworICBcb2JleXNwYWNlcworICBcZ2RlZlxvYmV5ZWRzcGFjZXsgfQorCisgICUgTWFrZSBlYWNoIHNwYWNlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgcHJvZHVjZSBhIG5vcm1hbCBpbnRlcndvcmQKKyAgJSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgRG9uJ3QgYWxsb3cgYSBsaW5lIGJyZWFrIGF0IHRoaXMgc3BhY2UsIGFzIHRoaXMKKyAgJSBpcyB1c2VkIG9ubHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgQGV4YW1wbGUsIHdoZXJlIGVhY2ggbGluZSBvZiBpbnB1dAorICAlIHNob3VsZCBwcm9kdWNlIGEgbGluZSBvZiBvdXRwdXQgYW55d2F5LgorICAlCisgIFxnZGVmXHNlcHNwYWNlc3tcb2JleXNwYWNlc1xsZXQgPVx0aWV9CisKKyAgJSBJZiBhbiBpbmRleCBjb21tYW5kIGlzIHVzZWQgaW4gYW4gQGV4YW1wbGUgZW52aXJvbm1lbnQsIGFueSBzcGFjZXMKKyAgJSB0aGVyZWluIHNob3VsZCBiZWNvbWUgcmVndWxhciBzcGFjZXMgaW4gdGhlIHJhdyBpbmRleCBmaWxlLCBub3QgdGhlCisgICUgZXhwYW5zaW9uIG9mIFx0aWUgKFxsZWF2ZXZtb2RlIFxwZW5hbHR5IFxATSBcICkuCisgIFxnZGVmXHVuc2Vwc3BhY2Vze1xsZXQgPVxzcGFjZX0KK30KKworCitcZGVmXGZsdXNoY3J7XGlmeFxwYXJcbGlzcHBhciBcZGVmXG5leHQjIzF7fVxlbHNlIFxsZXRcbmV4dD1ccmVsYXggXGZpIFxuZXh0fQorCislIERlZmluZSB0aGUgZnJhbWV3b3JrIGZvciBlbnZpcm9ubWVudHMgaW4gdGV4aW5mby50ZXguICBJdCdzIHVzZWQgbGlrZSB0aGlzOgorJQorJSAgIFxlbnZkZWZcZm9vey4uLn0KKyUgICBcZGVmXEVmb297Li4ufQorJQorJSBJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBcZW52ZGVmIHRvIGluc2VydCBcYmVnaW5ncm91cCBiZWZvcmUgdGhlCislIGFjdHVhbCBib2R5OyBAZW5kIGNsb3NlcyB0aGUgZ3JvdXAgYWZ0ZXIgY2FsbGluZyBcRWZvby4gIFxlbnZkZWYgYWxzbworJSBkZWZpbmVzIFx0aGlzZW52LCBzbyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBrbm93bjsgQGVuZCBjaGVja3MKKyUgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgbmFtZSBtYXRjaGVzLiAgVGhlIFxjaGVja2VudiBtYWNybyBjYW4gYWxzbyBiZQorJSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgdGhlIG9uZSBleHBlY3RlZC4KKyUKKyUgTm9uLWZhbHNlIGNvbmRpdGlvbmFscyAoQGlmdGV4LCBAaWZzZXQpIGRvbid0IGZpdCBpbnRvIHRoaXMsIHNvIHRoZXkKKyUgYXJlIG5vdCB0cmVhdGVkIGFzIGVudmlyb21lbnRzOyB0aGV5IGRvbid0IG9wZW4gYSBncm91cC4gIChUaGUKKyUgaW1wbGVtZW50YXRpb24gb2YgQGVuZCB0YWtlcyBjYXJlIG5vdCB0byBjYWxsIFxlbmRncm91cCBpbiB0aGlzCislIHNwZWNpYWwgY2FzZS4pCisKKworJSBBdCBydW50aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgorXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQorJSBpbml0aWFsaXplCitcbGV0XHRoaXNlbnZcZW1wdHkKKworJSAuLi4gYnV0IHRoZXkgZ2V0IGRlZmluZWQgdmlhIGBgXGVudmRlZlxmb297Li4ufScnOgorXGxvbmdcZGVmXGVudmRlZiMxIzJ7XGRlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CitcZGVmXGVudnBhcnNlYXJnZGVmIzEjMntccGFyc2VhcmdkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorCislIENoZWNrIHdoZXRoZXIgd2UncmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorXGRlZlxjaGVja2VudiMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgXGVsc2UKKyAgICBcYmFkZW52ZXJyCisgIFxmaQorfQorCislIEV2aXJvbm1lbnQgbWlzbWF0Y2gsICMxIGV4cGVjdGVkOgorXGRlZlxiYWRlbnZlcnJ7JQorICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgY2FuIGFwcGVhciBvbmx5IFxpbmVudmlyb25tZW50XHRlbXAsCisgICAgbm90IFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorfQorXGRlZlxpbmVudmlyb25tZW50IzF7JQorICBcaWZ4IzFcZW1wdHkKKyAgICBvdXQgb2YgYW55IGVudmlyb25tZW50JQorICBcZWxzZQorICAgIGluIGVudmlyb25tZW50IFxleHBhbmRhZnRlclxzdHJpbmcjMSUKKyAgXGZpCit9CisKKyUgQGVuZCBmb28gZXhlY3V0ZXMgdGhlIGRlZmluaXRpb24gb2YgXEVmb28uCislIEJ1dCBmaXJzdCwgaXQgZXhlY3V0ZXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIFxjaGVja2VudgorJQorXHBhcnNlYXJnZGVmXGVuZHslCisgIFxpZiAxXGNzbmFtZSBpc2NvbmQuIzFcZW5kY3NuYW1lCisgIFxlbHNlCisgICAgJSBUaGUgZ2VuZXJhbCB3b3JkaW5nIG9mIFxiYWRlbnZlcnIgbWF5IG5vdCBiZSBpZGVhbCwgYnV0Li4uIC0ta2FzYWwsIDA2bm92MDMKKyAgICBcZXhwYW5kYWZ0ZXJcY2hlY2tlbnZcY3NuYW1lIzFcZW5kY3NuYW1lCisgICAgXGNzbmFtZSBFIzFcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCitcbmV3aGVscFxFTXNpbXBsZXtQcmVzcyBSRVRVUk4gdG8gY29udGludWUufQorCisKKyUlIFNpbXBsZSBzaW5nbGUtY2hhcmFjdGVyIEAgY29tbWFuZHMKKworJSBAQCBwcmludHMgYW4gQAorJSBLbHVkZ2UgdGhpcyB1bnRpbCB0aGUgZm9udHMgYXJlIHJpZ2h0IChncnIpLgorXGRlZlxAe3tcdHRcY2hhcjY0fX0KKworJSBUaGlzIGlzIHR1cm5lZCBvZmYgYmVjYXVzZSBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZAorJSBhbmQgeW91IGNhbiB1c2UgQHd7Li4ufSBhcm91bmQgYSBxdW90ZSB0byBzdXBwcmVzcyBsaWdhdHVyZXMuCislJSBEZWZpbmUgQGAgYW5kIEAnIHRvIGJlIHRoZSBzYW1lIGFzIGAgYW5kICcKKyUlIGJ1dCBzdXBwcmVzc2luZyBsaWdhdHVyZXMuCislXGRlZlxge3tgfX0KKyVcZGVmXCd7eyd9fQorCislIFVzZWQgdG8gZ2VuZXJhdGUgcXVvdGVkIGJyYWNlcy4KK1xkZWZcbXlsYnJhY2Uge3tcdHRcY2hhcjEyM319CitcZGVmXG15cmJyYWNlIHt7XHR0XGNoYXIxMjV9fQorXGxldFx7PVxteWxicmFjZQorXGxldFx9PVxteXJicmFjZQorXGJlZ2luZ3JvdXAKKyAgJSBEZWZpbml0aW9ucyB0byBwcm9kdWNlIFx7IGFuZCBcfSBjb21tYW5kcyBmb3IgaW5kaWNlcywKKyAgJSBhbmQgQHsgYW5kIEB9IGZvciB0aGUgYXV4L3RvYyBmaWxlcy4KKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgXGNhdGNvZGVgXFsgPSAxIFxjYXRjb2RlYFxdID0gMgorICBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcb3RoZXIKKyAgIWdkZWYhbGJyYWNlY21kW1x7XSUKKyAgIWdkZWYhcmJyYWNlY21kW1x9XSUKKyAgIWdkZWYhbGJyYWNlYXRjbWRbQHtdJQorICAhZ2RlZiFyYnJhY2VhdGNtZFtAfV0lCishZW5kZ3JvdXAKKworJSBAY29tbWF7fSB0byBhdm9pZCAsIHBhcnNpbmcgcHJvYmxlbXMuCitcbGV0XGNvbW1hID0gLAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBcYworXGxldFxkb3RhY2NlbnQgPSBcLgorXGRlZlxyaW5nYWNjZW50IzF7e1xhY2NlbnQyMyAjMX19CitcbGV0XHRpZWFjY2VudCA9IFx0CitcbGV0XHViYXJhY2NlbnQgPSBcYgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24gQG9yZGYgQG9yZG0KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CitcZGVmXG9yZGZ7XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7YX19fQorXGRlZlxvcmRte1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye299fX0KKworJSBEb3RsZXNzIGkgYW5kIGRvdGxlc3MgaiwgdXNlZCBmb3IgYWNjZW50cy4KK1xkZWZcaW1hY3Jve2l9CitcZGVmXGptYWNyb3tqfQorXGRlZlxkb3RsZXNzIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcaW1hY3JvIFxwdGV4aQorICBcZWxzZVxpZnhcdGVtcFxqbWFjcm8gXGoKKyAgXGVsc2UgXGVycm1lc3NhZ2V7QGRvdGxlc3MgY2FuIGJlIHVzZWQgb25seSB3aXRoIGkgb3Igan0lCisgIFxmaVxmaQorfQorCislIFRoZSBcVGVYe30gbG9nbywgYXMgaW4gcGxhaW4sIGJ1dCByZXNldHRpbmcgdGhlIHNwYWNpbmcgc28gdGhhdCBhCislIHBlcmlvZCBmb2xsb3dpbmcgY291bnRzIGFzIGVuZGluZyBhIHNlbnRlbmNlLiAgKElkZWEgZm91bmQgaW4gbGF0ZXguKQorJQorXGVkZWZcVGVYe1xUZVggXHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEBMYVRlWHt9IGxvZ28uICBOb3QgcXVpdGUgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgZGVmaW5pdGlvbiBpbgorJSBsYXRleC5sdHgsIHNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudCBmb250IGZvciB0aGUgcmFpc2VkIEE7IGl0J3MgbW9zdAorJSBjb252ZW5pZW50IGZvciB1cyB0byB1c2UgYW4gZXhwbGljaXRseSBzbWFsbGVyIGZvbnQsIHJhdGhlciB0aGFuIHVzaW5nCislIHRoZSBcc2NyaXB0c3R5bGUgZm9udCAoc2luY2Ugd2UgZG9uJ3QgcmVzZXQgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUpLgorJQorXGRlZlxMYVRlWHslCisgIExca2Vybi0uMzZlbQorICB7XHNldGJveDA9XGhib3h7VH0lCisgICBcdmJveCB0byBcaHQwe1xoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIEF9XHZzc319JQorICBca2Vybi0uMTVlbQorICBcVGVYCit9CisKKyUgQmUgc3VyZSB3ZSdyZSBpbiBob3Jpem9udGFsIG1vZGUgd2hlbiBkb2luZyBhIHRpZSwgc2luY2Ugd2UgbWFrZSBzcGFjZQorJSBlcXVpdmFsZW50IHRvIHRoaXMgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMuIE90aGVyd2lzZSwgYSBzcGFjZQorJSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aWxsIHN0YXJ0IHdpdGggXHBlbmFsdHkgLS0gYW5kCislIHNpbmNlIFxwZW5hbHR5IGlzIHZhbGlkIGluIHZlcnRpY2FsIG1vZGUsIHdlJ2QgZW5kIHVwIHB1dHRpbmcgdGhlCislIHBlbmFsdHkgb24gdGhlIHZlcnRpY2FsIGxpc3QgaW5zdGVhZCBvZiBpbiB0aGUgbmV3IHBhcmFncmFwaC4KK3tcY2F0Y29kZWBAID0gMTEKKyAlIEF2b2lkIHVzaW5nIFxATSBkaXJlY3RseSwgYmVjYXVzZSB0aGF0IGNhdXNlcyB0cm91YmxlCisgJSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB3cml0dGVuIGludG8gYW4gaW5kZXggZmlsZS4KKyBcZ2xvYmFsXGxldFx0aWVwZW5hbHR5ID0gXEBNCisgXGdkZWZcdGlle1xsZWF2ZXZtb2RlXHBlbmFsdHlcdGllcGVuYWx0eVwgfQorfQorCislIEA6IGZvcmNlcyBub3JtYWwgc2l6ZSB3aGl0ZXNwYWNlIGZvbGxvd2luZy4KK1xkZWZcOntcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQCogZm9yY2VzIGEgbGluZSBicmVhay4KK1xkZWZcKntcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQorCislIEAvIGFsbG93cyBhIGxpbmUgYnJlYWsuCitcbGV0XC89XGFsbG93YnJlYWsKKworJSBALiBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcGVyaW9kLgorXGRlZlwuey5cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAISBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgYmFuZy4KK1xkZWZcIXshXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQD8gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHF1ZXJ5LgorXGRlZlw/ez9cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAZnJlbmNoc3BhY2luZyBvbnxvZmYgIHNheXMgd2hldGhlciB0byBwdXQgZXh0cmEgc3BhY2UgYWZ0ZXIgcHVuY3R1YXRpb24uCislIAorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJQorXGRlZlxpbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcaW5jbHVkZXp6en0KK1xkZWZcaW5jbHVkZXp6eiMxeyUKKyAgXHB1c2h0aGlzZmlsZXN0YWNrCisgIFxkZWZcdGhpc2ZpbGV7IzF9JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1we1xpbnB1dCAjMSB9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAKKyAgXHBvcHRoaXNmaWxlc3RhY2sKK30KK1xkZWZcZmlsZW5hbWVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWB+PVxvdGhlcgorICBcY2F0Y29kZWBePVxvdGhlcgorICBcY2F0Y29kZWBfPVxvdGhlcgorICBcY2F0Y29kZWB8PVxvdGhlcgorICBcY2F0Y29kZWA8PVxvdGhlcgorICBcY2F0Y29kZWA+PVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlcgorICBcY2F0Y29kZWAtPVxvdGhlcgorfQorCitcZGVmXHB1c2h0aGlzZmlsZXN0YWNreyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWFxwb3B0aGlzZmlsZXN0YWNrXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1h7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tZXHRoaXNmaWxlXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1kgIzFcU3RhY2tUZXJtICMyXFN0YWNrVGVybSB7JQorICBcZ2RlZlxwb3B0aGlzZmlsZXN0YWNre1xnZGVmXHRoaXNmaWxleyMxfVxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7IzJ9fSUKK30KKworXGRlZlxwb3B0aGlzZmlsZXN0YWNre1xlcnJ0aGlzZmlsZXN0YWNrZW1wdHl9CitcZGVmXGVycnRoaXNmaWxlc3RhY2tlbXB0eXtcZXJybWVzc2FnZXtJbnRlcm5hbCBlcnJvcjoKKyAgdGhlIHN0YWNrIG9mIGZpbGVuYW1lcyBpcyBlbXB0eS59fQorCitcZGVmXHRoaXNmaWxle30KKworJSBAY2VudGVyIGxpbmUKKyUgb3V0cHV0cyB0aGF0IGxpbmUsIGNlbnRlcmVkLgorJQorXHBhcnNlYXJnZGVmXGNlbnRlcnslCisgIFxpZmhtb2RlCisgICAgXGxldFxuZXh0XGNlbnRlckgKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcY2VudGVyVgorICBcZmkKKyAgXG5leHR7XGhmaWwgXGlnbm9yZXNwYWNlcyMxXHVuc2tpcCBcaGZpbH0lCit9CitcZGVmXGNlbnRlckgjMXslCisgIHslCisgICAgXGhmaWxcYnJlYWsKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgICBcbGluZXsjMX0lCisgICAgXGJyZWFrCisgIH0lCit9CitcZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CisKKyUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKKworXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CisKKyUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCislIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CislIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKKworXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQorXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCitcY29tbWVudHh4eH0KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KKworXGxldFxjPVxjb21tZW50CisKKyUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTLCBjbG9zZSBlbm91Z2guCislIE5DSEFSUyBjYW4gYWxzbyBiZSB0aGUgd29yZCBgYXNpcycgb3IgYG5vbmUnLgorJSBXZSBjYW5ub3QgZmVhc2libHkgaW1wbGVtZW50IEBwYXJhZ3JhcGhpbmRlbnQgYXNpcywgdGhvdWdoLgorJQorXGRlZlxhc2lzd29yZHthc2lzfSAlIG5vIHRyYW5zbGF0aW9uLCB0aGVzZSBhcmUga2V5d29yZHMKK1xkZWZcbm9uZXdvcmR7bm9uZX0KKyUKK1xwYXJzZWFyZ2RlZlxwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gIzFlbQorICAgIFxmaQorICBcZmkKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50Cit9CisKKyUgQGV4YW1wbGVpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUyBsaWtlIEBwYXJhZ3JhcGhpbmRlbnQuCislIEl0IHNlZW1zIEBleGFtcGxlaW5kZW50IGFzaXMgaXNuJ3QgbmVjZXNzYXJ5LCBidXQKKyUgSSBwcmVzZXJ2ZSBpdCB0byBtYWtlIGl0IHNpbWlsYXIgdG8gQHBhcmFncmFwaGluZGVudC4KK1xwYXJzZWFyZ2RlZlxleGFtcGxlaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcbGlzcG5hcnJvd2luZyA9IDBwdAorICAgIFxlbHNlCisgICAgICBcbGlzcG5hcnJvd2luZyA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCit9CisKKyUgQGZpcnN0cGFyYWdyYXBoaW5kZW50IFdPUkQKKyUgSWYgV09SRCBpcyBgbm9uZScsIHRoZW4gc3VwcHJlc3MgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcmFncmFwaAorJSBhZnRlciBhIHNlY3Rpb24gaGVhZGluZy4gIElmIFdPUkQgaXMgYGluc2VydCcsIHRoZW4gZG8gaW5kZW50IGF0IHN1Y2gKKyUgcGFyYWdyYXBocy4KKyUKKyUgVGhlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBpcyBzdXBwcmVzc2VkIG9yIG5vdCBieSBjYWxsaW5nCislIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50LCB3aGljaCB0aGUgc2VjdGlvbmluZyBjb21tYW5kcyBkby4KKyUgV2Ugc3dpdGNoIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYmFjayBhbmQgZm9ydGggYWNjb3JkaW5nIHRvIFdPUkQuCislIEJ5IGRlZmF1bHQsIHdlIHN1cHByZXNzIGluZGVudGF0aW9uLgorJQorXGRlZlxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50e1xkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXHBhcnNlYXJnZGVmXGZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVcdW5kZXJDaGFyID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRodW5kZXJzY29yZXslCisgICAgXGNhdGNvZGVcdW5kZXJDaGFyPVxhY3RpdmUKKyAgICBcZGVmX3tcaWZudW1cZmFtPVxzbGZhbSBcX1xlbHNlXHNiXGZpfSUKKyAgfQorfQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KKyUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0CislIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90CislIG90aGVyd2lzZSBkZWZpbmUgQFwuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGh1bmRlcnNjb3JlCisgIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCisgIFxtYXRoYWN0aXZlCisgICRcZmluaXNobWF0aAorfQorXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCisKKyUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCislIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50CislIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCislCit7CisgIFxjYXRjb2RlYF4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYDwgPSBcYWN0aXZlCisgIFxjYXRjb2RlYD4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYCsgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGhhY3RpdmV7JQorICAgIFxsZXReID0gXHB0ZXhoYXQKKyAgICBcbGV0PCA9IFxwdGV4bGVzcworICAgIFxsZXQ+ID0gXHB0ZXhndHIKKyAgICBcbGV0KyA9IFxwdGV4cGx1cworICB9Cit9CisKKyUgQGJ1bGxldCBhbmQgQG1pbnVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIEBtYXRoLCBqdXN0IGFib3ZlLgorXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KK1xkZWZcbWludXN7JC0kfQorCislIEBkb3Rze30gb3V0cHV0cyBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgorJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiBhIHR5cGV3cml0ZXIKKyUgZm9udCBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnMuCislCitcZGVmXGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcaGJveCB0byAxLjVlbXslCisgICAgXGhza2lwIDBwdCBwbHVzIDAuMjVmaWwKKyAgICAuXGhmaWwuXGhmaWwuJQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwKKyAgfSUKK30KKworJSBAZW5kZG90c3t9IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBlbGxpcHNpcy4KKyUKK1xkZWZcZW5kZG90c3slCisgIFxkb3RzCisgIFxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yCit9CisKKyUgQGNvbW1he30gaXMgc28gY29tbWFzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRleHQgd2l0aG91dCBtZXNzaW5nIHVwCislIFRleGluZm8ncyBwYXJzaW5nLgorJQorXGxldFxjb21tYSA9ICwKKworJSBAcmVmaWxsIGlzIGEgbm8tb3AuCitcbGV0XHJlZmlsbD1ccmVsYXgKKworJSBJZiB3b3JraW5nIG9uIGEgbGFyZ2UgZG9jdW1lbnQgaW4gY2hhcHRlcnMsIGl0IGlzIGNvbnZlbmllbnQgdG8KKyUgYmUgYWJsZSB0byBkaXNhYmxlIGluZGV4aW5nLCBjcm9zcy1yZWZlcmVuY2luZywgYW5kIGNvbnRlbnRzLCBmb3IgdGVzdCBydW5zLgorJSBUaGlzIGlzIGRvbmUgd2l0aCBAbm92YWxpZGF0ZSAoYmVmb3JlIEBzZXRmaWxlbmFtZSkuCislCitcbmV3aWZcaWZsaW5rcyBcbGlua3N0cnVlICUgYnkgZGVmYXVsdCB3ZSB3YW50IHRoZSBhdXggZmlsZXMuCitcbGV0XG5vdmFsaWRhdGUgPSBcbGlua3NmYWxzZQorCislIEBzZXRmaWxlbmFtZSBpcyBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgdGV4aW5mbyBmaWxlLgorJSBTbyBvcGVuIGhlcmUgdGhlIGZpbGVzIHdlIG5lZWQgdG8gaGF2ZSBvcGVuIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0LgorJSBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1ha2UgYSAuZm10IGZpbGUgZm9yIHRleGluZm8uCitcZGVmXHNldGZpbGVuYW1leyUKKyAgIFxmaXhiYWNrc2xhc2ggICUgVHVybiBvZmYgaGFjayB0byBzd2FsbG93IGBcaW5wdXQgdGV4aW5mbycuCisgICBcaWZsaW5rcworICAgICBcdHJ5YXV4ZmlsZQorICAgICAlIE9wZW4gdGhlIG5ldyBhdXggZmlsZS4gIFRlWCB3aWxsIGNsb3NlIGl0IGF1dG9tYXRpY2FsbHkgYXQgZXhpdC4KKyAgICAgXGltbWVkaWF0ZVxvcGVub3V0XGF1eGZpbGU9XGpvYm5hbWUuYXV4CisgICBcZmkgJSBcb3BlbmluZGljZXMgbmVlZHMgdG8gZG8gc29tZSB3b3JrIGluIGFueSBjYXNlLgorICAgXG9wZW5pbmRpY2VzCisgICBcbGV0XHNldGZpbGVuYW1lPVxjb21tZW50ICUgSWdub3JlIGV4dHJhIEBzZXRmaWxlbmFtZSBjbWRzLgorICAgJQorICAgJSBJZiB0ZXhpbmZvLmNuZiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0sIHJlYWQgaXQuCisgICAlIFVzZWZ1bCBmb3Igc2l0ZS13aWRlIEBhZm91cnBhcGVyLCBldGMuCisgICBcb3BlbmluIDEgdGV4aW5mby5jbmYKKyAgIFxpZmVvZiAxIFxlbHNlIFxpbnB1dCB0ZXhpbmZvLmNuZiBcZmkKKyAgIFxjbG9zZWluIDEKKyAgICUKKyAgIFxjb21tZW50ICUgSWdub3JlIHRoZSBhY3R1YWwgZmlsZW5hbWUuCit9CisKKyUgQ2FsbGVkIGZyb20gXHNldGZpbGVuYW1lLgorJQorXGRlZlxvcGVuaW5kaWNlc3slCisgIFxuZXdpbmRleHtjcH0lCisgIFxuZXdjb2RlaW5kZXh7Zm59JQorICBcbmV3Y29kZWluZGV4e3ZyfSUKKyAgXG5ld2NvZGVpbmRleHt0cH0lCisgIFxuZXdjb2RlaW5kZXh7a3l9JQorICBcbmV3Y29kZWluZGV4e3BnfSUKK30KKworJSBAYnllLgorXG91dGVyXGRlZlxieWV7XHBhZ2VhbGlnbm1hY3JvXHRyYWNpbmdzdGF0cz0xXHB0ZXhlbmR9CisKKworXG1lc3NhZ2V7cGRmLH0KKyUgYWRvYmUgYHBvcnRhYmxlJyBkb2N1bWVudCBmb3JtYXQKK1xuZXdjb3VudFx0ZW1wbnVtCitcbmV3Y291bnRcbG5rY291bnQKK1xuZXd0b2tzXGZpbGVuYW1lCitcbmV3Y291bnRcZmlsZW5hbWVsZW5ndGgKK1xuZXdjb3VudFxwZ24KK1xuZXd0b2tzXHRva3NBCitcbmV3dG9rc1x0b2tzQgorXG5ld3Rva3NcdG9rc0MKK1xuZXd0b2tzXHRva3NECitcbmV3Ym94XGJveEEKK1xuZXdjb3VudFxjb3VudEEKK1xuZXdpZlxpZnBkZgorXG5ld2lmXGlmcGRmbWFrZXBhZ2VkZXN0CisKKyUgd2hlbiBwZGZ0ZXggaXMgcnVuIGluIGR2aSBtb2RlLCBccGRmb3V0cHV0IGlzIGRlZmluZWQgKHNvIFxwZGZvdXRwdXQ9MQorJSBjYW4gYmUgc2V0KS4gIFNvIHdlIHRlc3QgZm9yIFxyZWxheCBhbmQgMCBhcyB3ZWxsIGFzIFx1bmRlZmluZWQsCislIGJvcnJvd2VkIGZyb20gaWZwZGYuc3R5LgorXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCitcZWxzZQorICBcaWZ4XHBkZm91dHB1dFxyZWxheAorICBcZWxzZQorICAgIFxpZmNhc2VccGRmb3V0cHV0CisgICAgXGVsc2UKKyAgICAgIFxwZGZ0cnVlCisgICAgXGZpCisgIFxmaQorXGZpCisKKyUgUERGIHVzZXMgUG9zdFNjcmlwdCBzdHJpbmcgY29uc3RhbnRzIGZvciB0aGUgbmFtZXMgb2YgeHJlZiB0YXJnZXRzLCB0bworJSBmb3IgZGlzcGxheSBpbiB0aGUgb3V0bGluZXMsIGFuZCBpbiBvdGhlciBwbGFjZXMuICBUaHVzLCB3ZSBoYXZlIHRvCislIGRvdWJsZSBhbnkgYmFja3NsYXNoZXMuICBPdGhlcndpc2UsIGEgbmFtZSBsaWtlICJcbm9kZSIgd2lsbCBiZQorJSBpbnRlcnByZXRlZCBhcyBhIG5ld2xpbmUgKFxuKSwgZm9sbG93ZWQgYnkgbywgZCwgZS4gIE5vdCBnb29kLgorJSBodHRwOi8vd3d3Lm50Zy5ubC9waXBlcm1haWwvbnRnLXBkZnRleC8yMDA0LUp1bHkvMDAwNjU0Lmh0bWwKKyUgKGFuZCByZWxhdGVkIG1lc3NhZ2VzLCB0aGUgZmluYWwgb3V0Y29tZSBpcyB0aGF0IGl0IGlzIHVwIHRvIHRoZSBUZVgKKyUgdXNlciB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGFuZCBvdGhlcndpc2UgbWFrZSB0aGUgc3RyaW5nIHZhbGlkLCBzbworJSB0aGF0J3Mgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislIAore1xjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaHtAY2F0Y29kZWBAXD1AYWN0aXZlIEBvdGhlcmJhY2tzbGFzaH0KKyBAZ2RlZkBhY3RpdmViYWNrc2xhc2hkb3VibGV7JQorICAgQGNhdGNvZGVAYmFja0NoYXI9QGFjdGl2ZQorICAgQGxldFw9QGRvdWJsZWJhY2tzbGFzaH0KK30KKworJSBUbyBoYW5kbGUgcGFyZW5zLCB3ZSBtdXN0IGFkb3B0IGEgZGlmZmVyZW50IGFwcHJvYWNoLCBzaW5jZSBwYXJlbnMgYXJlCislIG5vdCBhY3RpdmUgY2hhcmFjdGVycy4gIGh5cGVycmVmLmR0eCAod2hpY2ggaGFzIHRoZSBzYW1lIHByb2JsZW0gYXMKKyUgdXMpIGhhbmRsZXMgaXQgd2l0aCB0aGlzIGFtYXppbmcgbWFjcm8gdG8gcmVwbGFjZSB0b2tlbnMuICBJJ3ZlCislIHRpbmtlcmVkIHdpdGggaXQgYSBsaXR0bGUgZm9yIHRleGluZm8sIGJ1dCBpdCdzIGRlZmluaXRlbHkgZnJvbSB0aGVyZS4KKyUgCislICMxIGlzIHRoZSB0b2tlbnMgdG8gcmVwbGFjZS4KKyUgIzIgaXMgdGhlIHJlcGxhY2VtZW50LgorJSAjMyBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdHJpbmcuCislIAorXGRlZlxIeVBzZFN1YnN0IzEjMiMzeyUKKyAgXGRlZlxIeVBzZFJlcGxhY2UjIzEjMSMjMlxFTkR7JQorICAgICMjMSUKKyAgICBcaWZ4XFwjIzJcXCUKKyAgICBcZWxzZQorICAgICAgIzIlCisgICAgICBcSHlSZXR1cm5BZnRlckZpeyUKKyAgICAgICAgXEh5UHNkUmVwbGFjZSMjMlxFTkQKKyAgICAgIH0lCisgICAgXGZpCisgIH0lCisgIFx4ZGVmIzN7XGV4cGFuZGFmdGVyXEh5UHNkUmVwbGFjZSMzIzFcRU5EfSUKK30KK1xsb25nXGRlZlxIeVJldHVybkFmdGVyRmkjMVxmaXtcZmkjMX0KKworJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KK1xkZWZcYmFja3NsYXNocGFyZW5zIzF7JQorICBceGRlZiMxeyMxfSUgcmVkZWZpbmUgaXQgYXMgaXRzIGV4cGFuc2lvbjsgdGhlIGRlZmluaXRpb24gaXMgc2ltcGx5CisgICAgICAgICAgICAgJSBcbGFzdG5vZGUgd2hlbiBjYWxsZWQgZnJvbSBcc2V0cmVmIC0+IFxwZGZta2Rlc3QuCisgIFxIeVBzZFN1YnN0eyh9e1xiYWNrc2xhc2hscGFyZW59eyMxfSUKKyAgXEh5UHNkU3Vic3R7KX17XGJhY2tzbGFzaHJwYXJlbn17IzF9JQorfQorCit7XGNhdGNvZGVcZXhjbGFtQ2hhciA9IDAgXGNhdGNvZGVcYmFja0NoYXIgPSBcb3RoZXIKKyAhZ2RlZiFiYWNrc2xhc2hscGFyZW57XCh9JQorICFnZGVmIWJhY2tzbGFzaHJwYXJlbntcKX0lCit9CisKK1xpZnBkZgorICBcaW5wdXQgcGRmY29sb3IKKyAgXHBkZmNhdGFsb2d7L1BhZ2VNb2RlIC9Vc2VPdXRsaW5lc30lCisgIFxkZWZcZG9wZGZpbWFnZSMxIzIjM3slCisgICAgXGRlZlxpbWFnZXdpZHRoeyMyfSUKKyAgICBcZGVmXGltYWdlaGVpZ2h0eyMzfSUKKyAgICAlIHdpdGhvdXQgXGltbWVkaWF0ZSwgcGRmdGV4IHNlZyBmYXVsdHMgd2hlbiB0aGUgc2FtZSBpbWFnZSBpcworICAgICUgaW5jbHVkZWQgdHdpY2UuICAoVmVyc2lvbiAzLjE0MTU5LXByZS0xLjAtdW5vZmZpY2lhbC0yMDAxMDcwNC4pCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAorICAgICAgXGltbWVkaWF0ZVxwZGZpbWFnZQorICAgIFxlbHNlCisgICAgICBcaW1tZWRpYXRlXHBkZnhpbWFnZQorICAgIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZXdpZHRoXGVsc2Ugd2lkdGggXGltYWdld2lkdGggXGZpCisgICAgICBcaWZ4XGVtcHR5XGltYWdlaGVpZ2h0XGVsc2UgaGVpZ2h0IFxpbWFnZWhlaWdodCBcZmkKKyAgICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uPDEzCisgICAgICAgICAjMS5wZGYlCisgICAgICAgXGVsc2UKKyAgICAgICAgIHsjMS5wZGZ9JQorICAgICAgIFxmaQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQgXGVsc2UKKyAgICAgIFxwZGZyZWZ4aW1hZ2UgXHBkZmxhc3R4aW1hZ2UKKyAgICBcZml9CisgIFxkZWZccGRmbWtkZXN0IzF7eyUKKyAgICAlIFdlIGhhdmUgdG8gc2V0IGR1bW1pZXMgc28gY29tbWFuZHMgc3VjaCBhcyBAY29kZSwgYW5kIGNoYXJhY3RlcnMKKyAgICAlIHN1Y2ggYXMgXCwgYXJlbid0IGV4cGFuZGVkIHdoZW4gcHJlc2VudCBpbiBhIHNlY3Rpb24gdGl0bGUuCisgICAgXGF0ZHVtbWllcworICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcZGVmXHBkZmRlc3RuYW1leyMxfSUKKyAgICBcYmFja3NsYXNocGFyZW5zXHBkZmRlc3RuYW1lCisgICAgXHBkZmRlc3QgbmFtZXtccGRmZGVzdG5hbWV9IHh5eiUKKyAgfX0lCisgICUKKyAgJSB1c2VkIHRvIG1hcmsgdGFyZ2V0IG5hbWVzOyBtdXN0IGJlIGV4cGFuZGFibGUuCisgIFxkZWZccGRmbWtwZ24jMXsjMX0lCisgICUKKyAgXGxldFxsaW5rY29sb3IgPSBcQmx1ZSAgJSB3YXMgQ3lhbiwgYnV0IHRoYXQgc2VlbXMgbGlnaHQ/CisgIFxkZWZcZW5kbGlua3tcQmxhY2tccGRmZW5kbGlua30KKyAgJSBBZGRpbmcgb3V0bGluZXMgdG8gUERGOyBtYWNyb3MgZm9yIGNhbGN1bGF0aW5nIHN0cnVjdHVyZSBvZiBvdXRsaW5lcworICAlIGNvbWUgZnJvbSBQZXRyIE9sc2FrCisgIFxkZWZcZXhwbnVtYmVyIzF7XGV4cGFuZGFmdGVyXGlmeFxjc25hbWUjMVxlbmRjc25hbWVccmVsYXggMCUKKyAgICBcZWxzZSBcY3NuYW1lIzFcZW5kY3NuYW1lIFxmaX0KKyAgXGRlZlxhZHZhbmNlbnVtYmVyIzF7XHRlbXBudW09XGV4cG51bWJlcnsjMX1ccmVsYXgKKyAgICBcYWR2YW5jZVx0ZW1wbnVtIGJ5IDEKKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMVxlbmRjc25hbWV7XHRoZVx0ZW1wbnVtfX0KKyAgJQorICAlICMxIGlzIHRoZSBzZWN0aW9uIHRleHQsIHdoaWNoIGlzIHdoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlCisgICUgb3V0bGluZSBieSB0aGUgcGRmIHZpZXdlci4gICMyIGlzIHRoZSBwZGYgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlcgorICAlIG9mIHN1YmVudHJpZXMgKG9yIGVtcHR5LCBmb3Igc3Vic3Vic2VjdGlvbnMpLiAgIzMgaXMgdGhlIG5vZGUgdGV4dCwKKyAgJSB3aGljaCBtaWdodCBiZSBlbXB0eSBpZiB0aGlzIHRvYyBlbnRyeSBoYWQgbm8gY29ycmVzcG9uZGluZyBub2RlLgorICAlICM0IGlzIHRoZSBwYWdlIG51bWJlcgorICAlCisgIFxkZWZcZG9wZGZvdXRsaW5lIzEjMiMzIzR7JQorICAgICUgR2VuZXJhdGUgYSBsaW5rIHRvIHRoZSBub2RlIHRleHQgaWYgdGhhdCBleGlzdHM7IGVsc2UsIHVzZSB0aGUKKyAgICAlIHBhZ2UgbnVtYmVyLiAgV2UgY291bGQgZ2VuZXJhdGUgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIHNlY3Rpb24KKyAgICAlIHRleHQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBzZWN0aW9uIGhhcyBubyBub2RlLCBidXQgaXQgZG9lc24ndAorICAgICUgc2VlbSB3b3J0aCB0aGUgdHJvdWJsZSwgc2luY2UgbW9zdCBkb2N1bWVudHMgYXJlIG5vcm1hbGx5IHN0cnVjdHVyZWQuCisgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgXGlmeFxwZGZvdXRsaW5lZGVzdFxlbXB0eQorICAgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjNH0lCisgICAgXGVsc2UKKyAgICAgICUgRG91YmxlZCBiYWNrc2xhc2hlcyBpbiB0aGUgbmFtZS4KKyAgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmVkZXN0fSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBBbHNvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgaW4gdGhlIGRpc3BsYXkgc3RyaW5nLgorICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmV0ZXh0eyMxfSUKKyAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5ldGV4dH0lCisgICAgJQorICAgIFxwZGZvdXRsaW5lIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZm91dGxpbmVkZXN0fX0jMntccGRmb3V0bGluZXRleHR9JQorICB9CisgICUKKyAgXGRlZlxwZGZtYWtlb3V0bGluZXN7JQorICAgIFxiZWdpbmdyb3VwCisgICAgICAlIFRoYW5oJ3MgaGFjayAvIHByb3BlciBicmFjZXMgaW4gYm9va21hcmtzCisgICAgICBcZWRlZlxteWxicmFjZXtcaWZ0cnVlIFxzdHJpbmd7XGVsc2V9XGZpfVxsZXRcez1cbXlsYnJhY2UKKyAgICAgIFxlZGVmXG15cmJyYWNle1xpZmZhbHNle1xlbHNlXHN0cmluZ31cZml9XGxldFx9PVxteXJicmFjZQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzaWxlbnRseSwgdG8gZ2V0IGNvdW50cyBvZiBzdWJlbnRyaWVzIGZvciBccGRmb3V0bGluZS4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKwlcZGVmXHRoaXNjaGFwbnVteyMjMn0lCisJXGRlZlx0aGlzc2VjbnVtezB9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntjaGFwXHRoaXNjaGFwbnVtfSUKKwlcZGVmXHRoaXNzZWNudW17IyMyfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c2VjXHRoaXNzZWNudW19JQorCVxkZWZcdGhpc3N1YnNlY251bXsjIzJ9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3N1YnNlY1x0aGlzc3Vic2VjbnVtfSUKKyAgICAgIH0lCisgICAgICBcZGVmXHRoaXNjaGFwbnVtezB9JQorICAgICAgXGRlZlx0aGlzc2VjbnVtezB9JQorICAgICAgXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgJQorICAgICAgJSB1c2UgXGRlZiByYXRoZXIgdGhhbiBcbGV0IGhlcmUgYmVjYXVzZSB3ZSByZWRlZmluZSBcY2hhcGVudHJ5IGV0CisgICAgICAlIGFsLiBhIHNlY29uZCB0aW1lLCBiZWxvdy4KKyAgICAgIFxkZWZcYXBwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXGFwcHNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubmNoYXBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcdW5uc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxyZWFkZGF0YWZpbGV7dG9jfSUKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2Vjb25kIHRpbWUsIHRoaXMgdGltZSBhY3R1YWxseSBwcm9kdWNpbmcgdGhlIG91dGxpbmVzLgorICAgICAgJSBUaGUgYC0nIG1lYW5zIHRha2UgdGhlIFxleHBudW1iZXIgYXMgdGhlIGFic29sdXRlIG51bWJlciBvZgorICAgICAgJSBzdWJlbnRyaWVzLCB3aGljaCB3ZSBjYWxjdWxhdGVkIG9uIG91ciBmaXJzdCByZWFkIG9mIHRoZSAudG9jIGFib3ZlLgorICAgICAgJQorICAgICAgJSBXZSB1c2UgdGhlIG5vZGUgbmFtZXMgYXMgdGhlIGRlc3RpbmF0aW9ucy4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7Y2hhcCMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzdWJzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslIGNvdW50IGlzIGFsd2F5cyB6ZXJvCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXt9eyMjM317IyM0fX0lCisgICAgICAlCisgICAgICAlIFBERiBvdXRsaW5lcyBhcmUgZGlzcGxheWVkIHVzaW5nIHN5c3RlbSBmb250cywgaW5zdGVhZCBvZgorICAgICAgJSBkb2N1bWVudCBmb250cy4gIFRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICUgc2luY2UgdGhlIGVuY29kaW5nIGlzIHVua25vd24uICBGb3IgZXhhbXBsZSwgdGhlIGVvZ29uZWsgZnJvbQorICAgICAgJSBMYXRpbiAyICgweGVhKSBnZXRzIHRyYW5zbGF0ZWQgdG8gYSB8IGNoYXJhY3Rlci4gIEluZm8gZnJvbQorICAgICAgJSBTdGFzemVrIFdhd3J5a2lld2ljeiwgMTkgSmFuIDIwMDQgMDQ6MDk6MjQgKzAxMDAuCisgICAgICAlCisgICAgICAlIHh4IHRvIGRvIHRoaXMgcmlnaHQsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIDgtYml0IGNoYXJhY3RlcnMgdG8KKyAgICAgICUgdGhlaXIgImJlc3QiIGVxdWl2YWxlbnQsIGJhc2VkIG9uIHRoZSBAZG9jdW1lbnRlbmNvZGluZy4gIFJpZ2h0CisgICAgICAlIG5vdywgSSBndWVzcyB3ZSdsbCBqdXN0IGxldCB0aGUgcGRmIHJlYWRlciBoYXZlIGl0cyB3YXkuCisgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICBcc2V0dXBkYXRhZmlsZQorICAgICAgXGFjdGl2ZWJhY2tzbGFzaAorICAgICAgXGlucHV0IFxqb2JuYW1lLnRvYworICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlXGRlZlxAe0B9JQorICAgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICAgIFxsZWF2ZXZtb2RlXFJlZAorICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgIHVzZXJ7L1N1YnR5cGUgL0xpbmsgL0EgPDwgL1MgL1VSSSAvVVJJICgjMSkgPj59JQorICAgIFxlbmRncm91cH0KKyAgXGRlZlxwZGZnZXR0b2tzIzEue1xzZXRib3hcYm94QT1caGJveHtcdG9rc0E9eyMxLn1cdG9rc0I9e31cbWFrZXRva3N9fQorICBcZGVmXGFkZHRva2VucyMxIzJ7XGVkZWZcYWRkdG9rc3tcbm9leHBhbmQjMT17XHRoZSMxIzJ9fVxhZGR0b2tzfQorICBcZGVmXGFkbiMxe1xhZGR0b2tlbnN7XHRva3NDfXsjMX1cZ2xvYmFsXGNvdW50QT0xXGxldFxuZXh0PVxtYWtldG9rc30KKyAgXGRlZlxwb3B0b2tzIzEjMnxFTkRUT0tTfHtcbGV0XGZpcnN0PSMxXHRva3NEPXsjMX1cdG9rc0E9eyMyfX0KKyAgXGRlZlxtYWtldG9rc3slCisgICAgXGV4cGFuZGFmdGVyXHBvcHRva3NcdGhlXHRva3NBfEVORFRPS1N8XHJlbGF4CisgICAgXGlmeFxmaXJzdDBcYWRuMAorICAgIFxlbHNlXGlmeFxmaXJzdDFcYWRuMSBcZWxzZVxpZnhcZmlyc3QyXGFkbjIgXGVsc2VcaWZ4XGZpcnN0M1xhZG4zCisgICAgXGVsc2VcaWZ4XGZpcnN0NFxhZG40IFxlbHNlXGlmeFxmaXJzdDVcYWRuNSBcZWxzZVxpZnhcZmlyc3Q2XGFkbjYKKyAgICBcZWxzZVxpZnhcZmlyc3Q3XGFkbjcgXGVsc2VcaWZ4XGZpcnN0OFxhZG44IFxlbHNlXGlmeFxmaXJzdDlcYWRuOQorICAgIFxlbHNlCisgICAgICBcaWZudW0wPVxjb3VudEFcZWxzZVxtYWtlbGlua1xmaQorICAgICAgXGlmeFxmaXJzdC5cbGV0XG5leHQ9XGRvbmVcZWxzZQorICAgICAgICBcbGV0XG5leHQ9XG1ha2V0b2tzCisgICAgICAgIFxhZGR0b2tlbnN7XHRva3NCfXtcdGhlXHRva3NEfQorICAgICAgICBcaWZ4XGZpcnN0LFxhZGR0b2tlbnN7XHRva3NCfXtcc3BhY2V9XGZpCisgICAgICBcZmkKKyAgICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgICBcbmV4dH0KKyAgXGRlZlxtYWtlbGlua3tcYWRkdG9rZW5ze1x0b2tzQn0lCisgICAge1xub2V4cGFuZFxwZGZsaW5re1x0aGVcdG9rc0N9fVx0b2tzQz17fVxnbG9iYWxcY291bnRBPTB9CisgIFxkZWZccGRmbGluayMxeyUKKyAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0KKyAgICBcbGlua2NvbG9yICMxXGVuZGxpbmt9CisgIFxkZWZcZG9uZXtcZWRlZlxzdHtcZ2xvYmFsXG5vZXhwYW5kXHRva3NBPXtcdGhlXHRva3NCfX1cc3R9CitcZWxzZQorICBcbGV0XHBkZm1rZGVzdCA9IFxnb2JibGUKKyAgXGxldFxwZGZ1cmwgPSBcZ29iYmxlCisgIFxsZXRcZW5kbGluayA9IFxyZWxheAorICBcbGV0XGxpbmtjb2xvciA9IFxyZWxheAorICBcbGV0XHBkZm1ha2VvdXRsaW5lcyA9IFxyZWxheAorXGZpICAlIFxpZnhccGRmb3V0cHV0CisKKworXG1lc3NhZ2V7Zm9udHMsfQorCislIENoYW5nZSB0aGUgY3VycmVudCBmb250IHN0eWxlIHRvICMxLCByZW1lbWJlcmluZyBpdCBpbiBcY3VyZm9udHN0eWxlLgorJSBGb3Igbm93LCB3ZSBkbyBub3QgYWNjdW11bGF0ZSBmb250IHN0eWxlczogQGJ7QGl7Zm9vfX0gcHJpbnRzIGZvbyBpbgorJSBpdGFsaWNzLCBub3QgYm9sZCBpdGFsaWNzLgorJQorXGRlZlxzZXRmb250c3R5bGUjMXslCisgIFxkZWZcY3VyZm9udHN0eWxleyMxfSUgbm90IGFzIGEgY29udHJvbCBzZXF1ZW5jZSwgYmVjYXVzZSB3ZSBhcmUgXGVkZWYnZC4KKyAgXGNzbmFtZSB0ZW4jMVxlbmRjc25hbWUgICUgY2hhbmdlIHRoZSBjdXJyZW50IGZvbnQKK30KKworJSBTZWxlY3QgIzEgZm9udHMgd2l0aCB0aGUgY3VycmVudCBzdHlsZS4KKyUKK1xkZWZcc2VsZWN0Zm9udHMjMXtcY3NuYW1lICMxZm9udHNcZW5kY3NuYW1lIFxjc25hbWVcY3VyZm9udHN0eWxlXGVuZGNzbmFtZX0KKworXGRlZlxybXtcZmFtPTAgXHNldGZvbnRzdHlsZXtybX19CitcZGVmXGl0e1xmYW09XGl0ZmFtIFxzZXRmb250c3R5bGV7aXR9fQorXGRlZlxzbHtcZmFtPVxzbGZhbSBcc2V0Zm9udHN0eWxle3NsfX0KK1xkZWZcYmZ7XGZhbT1cYmZmYW0gXHNldGZvbnRzdHlsZXtiZn19XGRlZlxiZnN0eWxlbmFtZXtiZn0KK1xkZWZcdHR7XGZhbT1cdHRmYW0gXHNldGZvbnRzdHlsZXt0dH19CisKKyUgVGV4aW5mbyBzb3J0IG9mIHN1cHBvcnRzIHRoZSBzYW5zIHNlcmlmIGZvbnQgc3R5bGUsIHdoaWNoIHBsYWluIFRlWCBkb2VzIG5vdC4KKyUgU28gd2Ugc2V0IHVwIGEgXHNmLgorXG5ld2ZhbVxzZmZhbQorXGRlZlxzZntcZmFtPVxzZmZhbSBcc2V0Zm9udHN0eWxle3NmfX0KK1xsZXRcbGkgPSBcc2YgJSBTb21ldGltZXMgd2UgY2FsbCBpdCBcbGksIG5vdCBcc2YuCisKKyUgV2UgZG9uJ3QgbmVlZCBtYXRoIGZvciB0aGlzIGZvbnQgc3R5bGUuCitcZGVmXHR0c2x7XHNldGZvbnRzdHlsZXt0dHNsfX0KKworJSBEZWZhdWx0IGxlYWRpbmcuCitcbmV3ZGltZW5cdGV4dGxlYWRpbmcgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorCislIFNldCB0aGUgYmFzZWxpbmVza2lwIHRvICMxLCBhbmQgdGhlIGxpbmVza2lwIGFuZCBzdHJ1dCBzaXplCislIGNvcnJlc3BvbmRpbmdseS4gIFRoZXJlIGlzIG5vIGRlZXAgbWVhbmluZyBiZWhpbmQgdGhlc2UgbWFnaWMgbnVtYmVycworJSB1c2VkIGFzIGZhY3RvcnM7IHRoZXkganVzdCBtYXRjaCAoY2xvc2VseSBlbm91Z2gpIHdoYXQgS251dGggZGVmaW5lZC4KKyUKK1xkZWZcbGluZXNraXBmYWN0b3J7LjA4MzMzfQorXGRlZlxzdHJ1dGhlaWdodHBlcmNlbnR7LjcwODMzfQorXGRlZlxzdHJ1dGRlcHRocGVyY2VudCB7LjI5MTY3fQorJQorXGRlZlxzZXRsZWFkaW5nIzF7JQorICBcbm9ybWFsYmFzZWxpbmVza2lwID0gIzFccmVsYXgKKyAgXG5vcm1hbGxpbmVza2lwID0gXGxpbmVza2lwZmFjdG9yXG5vcm1hbGJhc2VsaW5lc2tpcAorICBcbm9ybWFsYmFzZWxpbmVzCisgIFxzZXRib3hcc3RydXRib3ggPVxoYm94eyUKKyAgICBcdnJ1bGUgd2lkdGgwcHQgaGVpZ2h0XHN0cnV0aGVpZ2h0cGVyY2VudFxiYXNlbGluZXNraXAKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggXHN0cnV0ZGVwdGhwZXJjZW50IFxiYXNlbGluZXNraXAKKyAgfSUKK30KKworJSBTZXQgdGhlIGZvbnQgbWFjcm8gIzEgdG8gdGhlIGZvbnQgbmFtZWQgIzIsIGFkZGluZyBvbiB0aGUKKyUgc3BlY2lmaWVkIGZvbnQgcHJlZml4IChub3JtYWxseSBgY20nKS4KKyUgIzMgaXMgdGhlIGZvbnQncyBkZXNpZ24gc2l6ZSwgIzQgaXMgYSBzY2FsZSBmYWN0b3IKK1xkZWZcc2V0Zm9udCMxIzIjMyM0e1xmb250IzE9XGZvbnRwcmVmaXgjMiMzIHNjYWxlZCAjNH0KKworJSBVc2UgY20gYXMgdGhlIGRlZmF1bHQgZm9udCBwcmVmaXguCislIFRvIHNwZWNpZnkgdGhlIGZvbnQgcHJlZml4LCB5b3UgbXVzdCBkZWZpbmUgXGZvbnRwcmVmaXgKKyUgYmVmb3JlIHlvdSByZWFkIGluIHRleGluZm8udGV4LgorXGlmeFxmb250cHJlZml4XHVuZGVmaW5lZAorXGRlZlxmb250cHJlZml4e2NtfQorXGZpCislIFN1cHBvcnQgZm9udCBmYW1pbGllcyB0aGF0IGRvbid0IHVzZSB0aGUgc2FtZSBuYW1pbmcgc2NoZW1lIGFzIENNLgorXGRlZlxybXNoYXBle3J9CitcZGVmXHJtYnNoYXBle2J4fSAgICAgICAgICAgICAgICV3aGVyZSB0aGUgbm9ybWFsIGZhY2UgaXMgYm9sZAorXGRlZlxiZnNoYXBle2J9CitcZGVmXGJ4c2hhcGV7Ynh9CitcZGVmXHR0c2hhcGV7dHR9CitcZGVmXHR0YnNoYXBle3R0fQorXGRlZlx0dHNsc2hhcGV7c2x0dH0KK1xkZWZcaXRzaGFwZXt0aX0KK1xkZWZcaXRic2hhcGV7Ynh0aX0KK1xkZWZcc2xzaGFwZXtzbH0KK1xkZWZcc2xic2hhcGV7YnhzbH0KK1xkZWZcc2ZzaGFwZXtzc30KK1xkZWZcc2Zic2hhcGV7c3N9CitcZGVmXHNjc2hhcGV7Y3NjfQorXGRlZlxzY2JzaGFwZXtjc2N9CisKKyUgVGV4dCBmb250cyAoMTEuMnB0LCBtYWdzdGVwMSkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMXB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXGF1dGhvcnJte1xzZWNybX0KK1xkZWZcYXV0aG9ydHR7XHNlY3R0fQorCislIENoYXB0ZXIgKGFuZCB1bm51bWJlcmVkKSBmb250cyAoMTcuMjhwdCkuCitcZGVmXGNoYXBub21pbmFsc2l6ZXsxN3B0fQorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xsZXRcY2hhcGJmPVxjaGFwcm0KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXGZvbnRcY2hhcGk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDIKK1xmb250XGNoYXBzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMworCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcZGVmXHNlY25vbWluYWxzaXplezE0cHR9Citcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWNpdFxpdGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX0KK1xmb250XHNzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXBoYWxmCitcZm9udFxzc2Vjc3k9Y21zeTEwIHNjYWxlZCAxMzE1CisKKyUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoMTBwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXsxMHB0fQorXHNldGZvbnRccmVkdWNlZHJtXHJtc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9CitcZm9udFxyZWR1Y2VkaT1jbW1pMTAKK1xmb250XHJlZHVjZWRzeT1jbXN5MTAKKworJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCislIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKKyUgdGV4aW5mbyBkb2Vzbid0IGFsbG93IGZvciBwcm9kdWNpbmcgc3Vic2NyaXB0cyBhbmQgc3VwZXJzY3JpcHRzIGV4Y2VwdAorJSBpbiB0aGUgbWFpbiB0ZXh0LCB3ZSBkb24ndCBib3RoZXIgdG8gcmVzZXQgXHNjcmlwdGZvbnQgYW5kCislIFxzY3JpcHRzY3JpcHRmb250ICh3aGljaCB3b3VsZCBhbHNvIHJlcXVpcmUgbG9hZGluZyBhIGxvdCBtb3JlIGZvbnRzKS4KKyUKK1xkZWZccmVzZXRtYXRoZm9udHN7JQorICBcdGV4dGZvbnQwPVx0ZW5ybSBcdGV4dGZvbnQxPVx0ZW5pIFx0ZXh0Zm9udDI9XHRlbnN5CisgIFx0ZXh0Zm9udFxpdGZhbT1cdGVuaXQgXHRleHRmb250XHNsZmFtPVx0ZW5zbCBcdGV4dGZvbnRcYmZmYW09XHRlbmJmCisgIFx0ZXh0Zm9udFx0dGZhbT1cdGVudHQgXHRleHRmb250XHNmZmFtPVx0ZW5zZgorfQorCislIFRoZSBmb250LWNoYW5naW5nIGNvbW1hbmRzIHJlZGVmaW5lIHRoZSBtZWFuaW5ncyBvZiBcdGVuU1RZTEUsIGluc3RlYWQKKyUgb2YganVzdCBcU1RZTEUuICBXZSBkbyB0aGlzIGJlY2F1c2UgXFNUWUxFIG5lZWRzIHRvIGFsc28gc2V0IHRoZQorJSBjdXJyZW50IFxmYW0gZm9yIG1hdGggbW9kZS4gIE91ciBcU1RZTEUgKGUuZy4sIFxybSkgY29tbWFuZHMgaGFyZHdpcmUKKyUgXHRlblNUWUxFIHRvIHNldCB0aGUgY3VycmVudCBmb250LgorJQorJSBFYWNoIGZvbnQtY2hhbmdpbmcgY29tbWFuZCBhbHNvIHNldHMgdGhlIG5hbWVzIFxsc2l6ZSAob25lIHNpemUgbG93ZXIpCislIGFuZCBcbGxsc2l6ZSAodGhyZWUgc2l6ZXMgbG93ZXIpLiAgVGhlc2UgcmVsYXRpdmUgY29tbWFuZHMgYXJlIHVzZWQgaW4KKyUgdGhlIExhVGVYIGxvZ28gYW5kIGFjcm9ueW1zLgorJQorJSBUaGlzIGFsbCBuZWVkcyBnZW5lcmFsaXppbmcsIGJhZGx5LgorJQorXGRlZlx0ZXh0Zm9udHN7JQorICBcbGV0XHRlbnJtPVx0ZXh0cm0gXGxldFx0ZW5pdD1cdGV4dGl0IFxsZXRcdGVuc2w9XHRleHRzbAorICBcbGV0XHRlbmJmPVx0ZXh0YmYgXGxldFx0ZW50dD1cdGV4dHR0IFxsZXRcc21hbGxjYXBzPVx0ZXh0c2MKKyAgXGxldFx0ZW5zZj1cdGV4dHNmIFxsZXRcdGVuaT1cdGV4dGkgXGxldFx0ZW5zeT1cdGV4dHN5CisgIFxsZXRcdGVudHRzbD1cdGV4dHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0ZXh0fSUKKyAgXGRlZlxsc2l6ZXtyZWR1Y2VkfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ319CitcZGVmXHRpdGxlZm9udHN7JQorICBcbGV0XHRlbnJtPVx0aXRsZXJtIFxsZXRcdGVuaXQ9XHRpdGxlaXQgXGxldFx0ZW5zbD1cdGl0bGVzbAorICBcbGV0XHRlbmJmPVx0aXRsZWJmIFxsZXRcdGVudHQ9XHRpdGxldHQgXGxldFxzbWFsbGNhcHM9XHRpdGxlc2MKKyAgXGxldFx0ZW5zZj1cdGl0bGVzZiBcbGV0XHRlbmk9XHRpdGxlaSBcbGV0XHRlbnN5PVx0aXRsZXN5CisgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGl0bGV9JQorICBcZGVmXGxzaXple2NoYXB9XGRlZlxsbGxzaXple3N1YnNlY30lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KK1xkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KK1xkZWZcY2hhcGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cY2hhcHJtIFxsZXRcdGVuaXQ9XGNoYXBpdCBcbGV0XHRlbnNsPVxjaGFwc2wKKyAgXGxldFx0ZW5iZj1cY2hhcGJmIFxsZXRcdGVudHQ9XGNoYXB0dCBcbGV0XHNtYWxsY2Fwcz1cY2hhcHNjCisgIFxsZXRcdGVuc2Y9XGNoYXBzZiBcbGV0XHRlbmk9XGNoYXBpIFxsZXRcdGVuc3k9XGNoYXBzeQorICBcbGV0XHRlbnR0c2w9XGNoYXB0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7Y2hhcH0lCisgIFxkZWZcbHNpemV7c2VjfVxkZWZcbGxsc2l6ZXt0ZXh0fSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE5cHR9fQorXGRlZlxzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNlY3JtIFxsZXRcdGVuaXQ9XHNlY2l0IFxsZXRcdGVuc2w9XHNlY3NsCisgIFxsZXRcdGVuYmY9XHNlY2JmIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcc21hbGxjYXBzPVxzZWNzYworICBcbGV0XHRlbnNmPVxzZWNzZiBcbGV0XHRlbmk9XHNlY2kgXGxldFx0ZW5zeT1cc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c2VjfSUKKyAgXGRlZlxsc2l6ZXtzdWJzZWN9XGRlZlxsbGxzaXple3JlZHVjZWR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTZwdH19CitcZGVmXHN1YnNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc3NlY3JtIFxsZXRcdGVuaXQ9XHNzZWNpdCBcbGV0XHRlbnNsPVxzc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc3NlY2JmIFxsZXRcdGVudHQ9XHNzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc3NlY3NjCisgIFxsZXRcdGVuc2Y9XHNzZWNzZiBcbGV0XHRlbmk9XHNzZWNpIFxsZXRcdGVuc3k9XHNzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c3NlY30lCisgIFxkZWZcbHNpemV7dGV4dH1cZGVmXGxsbHNpemV7c21hbGx9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTVwdH19CitcbGV0XHN1YnN1YnNlY2ZvbnRzID0gXHN1YnNlY2ZvbnRzCitcZGVmXHJlZHVjZWRmb250c3slCisgIFxsZXRcdGVucm09XHJlZHVjZWRybSBcbGV0XHRlbml0PVxyZWR1Y2VkaXQgXGxldFx0ZW5zbD1ccmVkdWNlZHNsCisgIFxsZXRcdGVuYmY9XHJlZHVjZWRiZiBcbGV0XHRlbnR0PVxyZWR1Y2VkdHQgXGxldFxyZWR1Y2VkY2Fwcz1ccmVkdWNlZHNjCisgIFxsZXRcdGVuc2Y9XHJlZHVjZWRzZiBcbGV0XHRlbmk9XHJlZHVjZWRpIFxsZXRcdGVuc3k9XHJlZHVjZWRzeQorICBcbGV0XHRlbnR0c2w9XHJlZHVjZWR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7cmVkdWNlZH0lCisgIFxkZWZcbHNpemV7c21hbGx9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxscm0gXGxldFx0ZW5pdD1cc21hbGxpdCBcbGV0XHRlbnNsPVxzbWFsbHNsCisgIFxsZXRcdGVuYmY9XHNtYWxsYmYgXGxldFx0ZW50dD1cc21hbGx0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxzYworICBcbGV0XHRlbnNmPVxzbWFsbHNmIFxsZXRcdGVuaT1cc21hbGxpIFxsZXRcdGVuc3k9XHNtYWxsc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbH0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGVyZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbGVycm0gXGxldFx0ZW5pdD1cc21hbGxlcml0IFxsZXRcdGVuc2w9XHNtYWxsZXJzbAorICBcbGV0XHRlbmJmPVxzbWFsbGVyYmYgXGxldFx0ZW50dD1cc21hbGxlcnR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbGVyc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxlcnNmIFxsZXRcdGVuaT1cc21hbGxlcmkgXGxldFx0ZW5zeT1cc21hbGxlcnN5CisgIFxsZXRcdGVudHRzbD1cc21hbGxlcnR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbGVyfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezkuNXB0fX0KKworJSBTZXQgdGhlIGZvbnRzIHRvIHVzZSB3aXRoIHRoZSBAc21hbGwuLi4gZW52aXJvbm1lbnRzLgorXGxldFxzbWFsbGV4YW1wbGVmb250cyA9IFxzbWFsbGZvbnRzCisKKyUgQWJvdXQgXHNtYWxsZXhhbXBsZWZvbnRzLiAgSWYgd2UgdXNlIFxzbWFsbGZvbnRzICg5cHQpLCBAc21hbGxleGFtcGxlCislIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTg2ICAgc21hbGxib29rPTcyICBhND05MCAgYTU9NjkKKyUgSWYgd2UgdXNlIFxzY3JpcHRmb250cyAoOHB0KSwgdGhlbiB3ZSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT05MCsgIHNtYWxsYm9vaz04MCAgYTQ9OTArICBhNT03NworJSBGb3IgbWUsIHN1YmplY3RpdmVseSwgdGhlIGZldyBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgZml0IGFyZW4ndCB3b3J0aAorJSB0aGUgYWRkaXRpb25hbCBzbWFsbG5lc3Mgb2YgOHB0LiAgU28gSSdtIG1ha2luZyB0aGUgZGVmYXVsdCA5cHQuCislCislIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgorJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKKyUKKyUgSSB3aXNoIHRoZSBVU0EgdXNlZCBBNCBwYXBlci4KKyUgLS1rYXJsLCAyNGphbjAzLgorCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXHRleHRmb250cyBccm0KKworJSBEZWZpbmUgdGhlc2Ugc28gdGhleSBjYW4gYmUgZWFzaWx5IGNoYW5nZWQgZm9yIG90aGVyIGZvbnRzLgorXGRlZlxhbmdsZWxlZnR7JFxsYW5nbGUkfQorXGRlZlxhbmdsZXJpZ2h0eyRccmFuZ2xlJH0KKworJSBDb3VudCBkZXB0aCBpbiBmb250LWNoYW5nZXMsIGZvciBlcnJvciBjaGVja3MKK1xuZXdjb3VudFxmb250ZGVwdGggXGZvbnRkZXB0aD0wCisKKyUgRm9udHMgZm9yIHNob3J0IHRhYmxlIG9mIGNvbnRlbnRzLgorXHNldGZvbnRcc2hvcnRjb250cm1ccm1zaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udGJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0gICUgbm8gY21iMTIKK1xzZXRmb250XHNob3J0Y29udHNsXHNsc2hhcGV7MTJ9ezEwMDB9Citcc2V0Zm9udFxzaG9ydGNvbnR0dFx0dHNoYXBlezEyfXsxMDAwfQorCislJSBBZGQgc2NyaWJlLWxpa2UgZm9udCBlbnZpcm9ubWVudHMsIHBsdXMgQGwgZm9yIGlubGluZSBsaXNwICh1c3VhbGx5IHNhbnMKKyUlIHNlcmlmKSBhbmQgQGlpIGZvciBUZVggaXRhbGljCisKKyUgXHNtYXJ0aXRhbGlje0FSR30gb3V0cHV0cyBhcmcgaW4gaXRhbGljcywgZm9sbG93ZWQgYnkgYW4gaXRhbGljIGNvcnJlY3Rpb24KKyUgdW5sZXNzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIHN1Y2ggYXMgbm90IHRvIG5lZWQgb25lLgorXGRlZlxzbWFydGl0YWxpY3h7XGlmeFxuZXh0LFxlbHNlXGlmeFxuZXh0LVxlbHNlXGlmeFxuZXh0LlxlbHNlCisgICAgICAgICAgICAgICAgICAgIFxwdGV4c2xhc2hcZmlcZmlcZml9CitcZGVmXHNtYXJ0c2xhbnRlZCMxe3tcaWZ1c2luZ3R0XHR0c2xcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KK1xkZWZcc21hcnRpdGFsaWMjMXt7XGlmdXNpbmd0dFx0dHNsXGl0ICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKKyUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBcdHRzbC4KKyUgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW4gYXJndW1lbnRzLgorXGRlZlx0dHNsYW50ZWQjMXt7XHR0c2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudAorJSB0dHNsIGZvciBib29rIHRpdGxlcywgZG8gd2U/CitcZGVmXGNpdGUjMXt7XHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKK1xsZXRcaT1cc21hcnRpdGFsaWMKK1xsZXRcc2xhbnRlZD1cc21hcnRzbGFudGVkCitcbGV0XHZhcj1cc21hcnRzbGFudGVkCitcbGV0XGRmbj1cc21hcnRzbGFudGVkCitcbGV0XGVtcGg9XHNtYXJ0aXRhbGljCisKKyUgQGIsIGV4cGxpY2l0IGJvbGQuCitcZGVmXGIjMXt7XGJmICMxfX0KK1xsZXRcc3Ryb25nPVxiCisKKyUgQHNhbnNzZXJpZiwgZXhwbGljaXQgc2Fucy4KK1xkZWZcc2Fuc3NlcmlmIzF7e1xzZiAjMX19CisKKyUgV2UgY2FuJ3QganVzdCB1c2UgXGV4aHlwaGVucGVuYWx0eSwgYmVjYXVzZSB0aGF0IG9ubHkgaGFzIGVmZmVjdCBhdAorJSB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLiAgUmVzdG9yZSBub3JtYWwgaHlwaGVuYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUKKyUgZ3JvdXAgd2l0aGluIHdoaWNoIFxub2h5cGhlbmF0aW9uIGlzIHByZXN1bWFibHkgY2FsbGVkLgorJQorXGRlZlxub2h5cGhlbmF0aW9ue1xoeXBoZW5jaGFyXGZvbnQgPSAtMSAgXGFmdGVyZ3JvdXBccmVzdG9yZWh5cGhlbmF0aW9ufQorXGRlZlxyZXN0b3JlaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IGAtIH0KKworJSBTZXQgc2Zjb2RlIHRvIG5vcm1hbCBmb3IgdGhlIGNoYXJzIHRoYXQgdXN1YWxseSBoYXZlIGFub3RoZXIgdmFsdWUuCislIENhbid0IHVzZSBwbGFpbidzIFxmcmVuY2hzcGFjaW5nIGJlY2F1c2UgaXQgdXNlcyB0aGUgYFx4IG5vdGF0aW9uLCBhbmQKKyUgc29tZXRpbWVzIFx4IGhhcyBhbiBhY3RpdmUgZGVmaW5pdGlvbiB0aGF0IG1lc3NlcyB0aGluZ3MgdXAuCislCitcY2F0Y29kZWBAPTExCisgIFxkZWZccGxhaW5mcmVuY2hzcGFjaW5neyUKKyAgICBcc2Zjb2RlXGRvdENoYXIgID1cQG0gXHNmY29kZVxxdWVzdENoYXI9XEBtIFxzZmNvZGVcZXhjbGFtQ2hhcj1cQG0KKyAgICBcc2Zjb2RlXGNvbG9uQ2hhcj1cQG0gXHNmY29kZVxzZW1pQ2hhciA9XEBtIFxzZmNvZGVcY29tbWFDaGFyID1cQG0KKyAgICBcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnsxMDAwfSUgZm9yIEAuIGFuZCBmcmllbmRzCisgIH0KKyAgXGRlZlxwbGFpbm5vbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVgXC4zMDAwXHNmY29kZWBcPzMwMDBcc2Zjb2RlYFwhMzAwMAorICAgIFxzZmNvZGVgXDoyMDAwXHNmY29kZWBcOzE1MDBcc2Zjb2RlYFwsMTI1MAorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorXGNhdGNvZGVgQD1cb3RoZXIKK1xkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBkZWZhdWx0CisKK1xkZWZcdCMxeyUKKyAge1x0dCBccmF3YmFja3NsYXNoIFxwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcbnVsbAorfQorXGRlZlxzYW1wIzF7YFx0Y2xvc2V7IzF9J1xudWxsfQorXHNldGZvbnRca2V5cm1ccm1zaGFwZXs4fXsxMDAwfQorXGZvbnRca2V5c3k9Y21zeTkKK1xkZWZca2V5IzF7e1xrZXlybVx0ZXh0Zm9udDI9XGtleXN5IFxsZWF2ZXZtb2RlXGhib3h7JQorICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCisgICAgXHZib3h7XGhydWxlXGtlcm4tMC40cHQKKyAgICAgXGhib3h7XHJhaXNlMC40cHRcaGJveHtcdnBoYW50b217XGFuZ2xlbGVmdH19IzF9fSUKKyAgICBca2Vybi0wLjRwdFxocnVsZX0lCisgIFxrZXJuLS4wNmVtXHJhaXNlMC40cHRcaGJveHtcYW5nbGVyaWdodH19fX0KKyUgVGhlIG9sZCBkZWZpbml0aW9uLCB3aXRoIG5vIGxvemVuZ2U6CislXGRlZlxrZXkgIzF7e1x0dHNsIFxub2h5cGhlbmF0aW9uIFx1cHBlcmNhc2V7IzF9fVxudWxsfQorXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQorCislIEBmaWxlLCBAb3B0aW9uIGFyZSB0aGUgc2FtZSBhcyBAc2FtcC4KK1xsZXRcZmlsZT1cc2FtcAorXGxldFxvcHRpb249XHNhbXAKKworJSBAY29kZSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBAdCwKKyUgd2hpY2ggbWFrZXMgc3BhY2VzIHRoZSBzYW1lIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorXGRlZlx0Y2xvc2UjMXslCisgIHslCisgICAgJSBDaGFuZ2Ugbm9ybWFsIGludGVyd29yZCBzcGFjZSB0byBiZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBmb250LgorICAgIFxzcGFjZXNraXAgPSBcZm9udGRpbWVuMlxmb250CisgICAgJQorICAgICUgU3dpdGNoIHRvIHR5cGV3cml0ZXIuCisgICAgXHR0CisgICAgJQorICAgICUgQnV0IGBcICcgcHJvZHVjZXMgdGhlIGxhcmdlIHR5cGV3cml0ZXIgaW50ZXJ3b3JkIHNwYWNlLgorICAgIFxkZWZcIHt7XHNwYWNlc2tpcCA9IDBwdHt9IH19JQorICAgICUKKyAgICAlIFR1cm4gb2ZmIGh5cGhlbmF0aW9uLgorICAgIFxub2h5cGhlbmF0aW9uCisgICAgJQorICAgIFxyYXdiYWNrc2xhc2gKKyAgICBccGxhaW5mcmVuY2hzcGFjaW5nCisgICAgIzElCisgIH0lCisgIFxudWxsCit9CisKKyUgV2UgKm11c3QqIHR1cm4gb24gaHlwaGVuYXRpb24gYXQgYC0nIGFuZCBgXycgaW4gQGNvZGUuCislIE90aGVyd2lzZSwgaXQgaXMgdG9vIGhhcmQgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzCislIGluIHRoZSBFbWFjcyBtYW51YWwsIHRoZSBMaWJyYXJ5IG1hbnVhbCwgZXRjLgorCislIFVuZm9ydHVuYXRlbHksIFRlWCB1c2VzIG9uZSBwYXJhbWV0ZXIgKFxoeXBoZW5jaGFyKSB0byBjb250cm9sCislIGJvdGggaHlwaGVuYXRpb24gYXQgLSBhbmQgaHlwaGVuYXRpb24gd2l0aGluIHdvcmRzLgorJSBXZSBtdXN0IHRoZXJlZm9yZSB0dXJuIHRoZW0gYm90aCBvZmYgKFx0Y2xvc2UgZG9lcyB0aGF0KQorJSBhbmQgYXJyYW5nZSBleHBsaWNpdGx5IHRvIGh5cGhlbmF0ZSBhdCBhIGRhc2guCislICAtLSBybXMuCit7CisgIFxjYXRjb2RlYFwtPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAlCisgIFxnbG9iYWxcZGVmXGNvZGV7XGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcLT1cYWN0aXZlICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGlmYWxsb3djb2RlYnJlYWtzCisgICAgIFxsZXQtXGNvZGVkYXNoCisgICAgIFxsZXRfXGNvZGV1bmRlcgorICAgIFxlbHNlCisgICAgIFxsZXQtXHJlYWxkYXNoCisgICAgIFxsZXRfXHJlYWx1bmRlcgorICAgIFxmaQorICAgIFxjb2RleAorICB9Cit9CisKK1xkZWZccmVhbGRhc2h7LX0KK1xkZWZcY29kZWRhc2h7LVxkaXNjcmV0aW9uYXJ5e317fXt9fQorXGRlZlxjb2RldW5kZXJ7JQorICAlIHRoaXMgaXMgYWxsIHNvIEBtYXRoe0Bjb2Rle3Zhcl9uYW1lfSsxfSBjYW4gd29yay4gIEluIG1hdGggbW9kZSwgXworICAlIGlzICJhY3RpdmUiIChtYXRoY29kZSI4MDAwKSBhbmQgXG5vcm1hbHVuZGVyc2NvcmUgKG9yIFxjaGFyOTUsIGV0Yy4pCisgICUgd2lsbCB0aGVyZWZvcmUgZXhwYW5kIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBfLCB3aGljaCBpcyB1cworICAlIChpbnNpZGUgQGNvZGUgdGhhdCBpcyksIHRoZXJlZm9yZSBhbiBlbmRsZXNzIGxvb3AuCisgIFxpZnVzaW5ndHR7XGlmbW1vZGUKKyAgICAgICAgICAgICAgIFxtYXRoY2hhciIwNzVGICUgY2xhc3MgMD1vcmRpbmFyeSwgZmFtaWx5IDc9dHRmYW0sIHBvcyAweDVGPV8uCisgICAgICAgICAgICAgXGVsc2Vcbm9ybWFsdW5kZXJzY29yZSBcZmkKKyAgICAgICAgICAgICBcZGlzY3JldGlvbmFyeXt9e317fX0lCisgICAgICAgICAgICB7XF99JQorfQorXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KKworJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAorJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCislIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgorJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCislIAorXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorCitcZGVmXGtleXdvcmR0cnVle3RydWV9CitcZGVmXGtleXdvcmRmYWxzZXtmYWxzZX0KKworXHBhcnNlYXJnZGVmXGFsbG93Y29kZWJyZWFrc3slCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdca2V5d29yZHRydWUKKyAgICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorICBcZWxzZVxpZnhcdHhpYXJnXGtleXdvcmRmYWxzZQorICAgIFxhbGxvd2NvZGVicmVha3NmYWxzZQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmkKK30KKworJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorCislIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAorJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAorJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgorXHBhcnNlYXJnZGVmXGtiZGlucHV0c3R5bGV7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXHdvcmRkaXN0aW5jdAorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0c2x9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRleGFtcGxlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRjb2RlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0fVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGtiZGlucHV0c3R5bGUgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaVxmaQorfQorXGRlZlx3b3JkZGlzdGluY3R7ZGlzdGluY3R9CitcZGVmXHdvcmRleGFtcGxle2V4YW1wbGV9CitcZGVmXHdvcmRjb2Rle2NvZGV9CisKKyUgRGVmYXVsdCBpcyBgZGlzdGluY3QuJworXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCitcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKKyUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKKyUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybAorJSBpdHNlbGYuICBGaXJzdCAobWFuZGF0b3J5KSBhcmcgaXMgdGhlIHVybC4gIFBlcmhhcHMgZXZlbnR1YWxseSBwdXQgaW4KKyUgYSBoeXBlcnRleCBcc3BlY2lhbCBoZXJlLgorJQorXGRlZlx1cmVmIzF7XGRvdXJlZiAjMSwsLFxmaW5pc2h9CitcZGVmXGRvdXJlZiMxLCMyLCMzLCM0XGZpbmlzaHtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXHBkZnVybHsjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcdW5oYm94MCAlIHRoaXJkIGFyZyBnaXZlbiwgc2hvdyBvbmx5IHRoYXQKKyAgXGVsc2UKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICAgIFxpZnBkZgorICAgICAgICBcdW5oYm94MCAgICAgICAgICAgICAlIFBERjogMm5kIGFyZyBnaXZlbiwgc2hvdyBvbmx5IGl0CisgICAgICBcZWxzZQorICAgICAgICBcdW5oYm94MFwgKFxjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcY29kZXsjMX0lIG9ubHkgdXJsIGdpdmVuLCBzbyBzaG93IGl0CisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KKyUKK1xsZXRcdXJsPVx1cmVmCisKKyUgcm1zIGRvZXMgbm90IGxpa2UgYW5nbGUgYnJhY2tldHMgLS1rYXJsLCAxN21heTk3LgorJSBTbyBub3cgQGVtYWlsIGlzIGp1c3QgbGlrZSBAdXJlZiwgdW5sZXNzIHdlIGFyZSBwZGYuCislCislXGRlZlxlbWFpbCMxe1xhbmdsZWxlZnR7XHR0ICMxfVxhbmdsZXJpZ2h0fQorXGlmcGRmCisgIFxkZWZcZW1haWwjMXtcZG9lbWFpbCMxLCxcZmluaXNofQorICBcZGVmXGRvZW1haWwjMSwjMiwjM1xmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgICBcdW5zZXBzcGFjZXMKKyAgICBccGRmdXJse21haWx0bzojMX0lCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwPjBwdFx1bmhib3gwXGVsc2VcY29kZXsjMX1cZmkKKyAgICBcZW5kbGluaworICBcZW5kZ3JvdXB9CitcZWxzZQorICBcbGV0XGVtYWlsPVx1cmVmCitcZmkKKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKK1xkZWZca2JkIzF7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn0KKworJSBAbCB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byBtZWFuIGBgc3dpdGNoIHRvIHRoZSBMaXNwIGZvbnQnJywKKyUgYW5kIGl0IGlzIG5vdCB1c2VkIGFzIHN1Y2ggaW4gYW55IG1hbnVhbCBJIGNhbiBmaW5kLiAgV2UgbmVlZCBpdCBmb3IKKyUgUG9saXNoIHN1cHByZXNzZWQtbC4gIC0ta2FybCwgMjJzZXA5Ni4KKyVcZGVmXGwjMXt7XGxpICMxfVxudWxsfQorCislIEV4cGxpY2l0IGZvbnQgY2hhbmdlczogQHIsIEBzYywgdW5kb2N1bWVudGVkIEBpaS4KK1xkZWZcciMxe3tccm0gIzF9fSAgICAgICAgICAgICAgJSByb21hbiBmb250CitcZGVmXHNjIzF7e1xzbWFsbGNhcHMjMX19ICAgICAgICUgc21hbGxjYXBzIGZvbnQKK1xkZWZcaWkjMXt7XGl0ICMxfX0gICAgICAgICAgICAgJSBpdGFsaWMgZm9udAorCislIEBhY3JvbnltIGZvciAiRkJJIiwgIk5BVE8iLCBhbmQgdGhlIGxpa2UuCislIFdlIHByaW50IHRoaXMgb25lIHBvaW50IHNpemUgc21hbGxlciwgc2luY2UgaXQncyBpbnRlbmRlZCBmb3IKKyUgYWxsLXVwcGVyY2FzZS4KKyUgCitcZGVmXGFjcm9ueW0jMXtcZG9hY3JvbnltICMxLCxcZmluaXNofQorXGRlZlxkb2Fjcm9ueW0jMSwjMiwjM1xmaW5pc2h7JQorICB7XHNlbGVjdGZvbnRzXGxzaXplICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAYWJiciBmb3IgIkNvbXB1dC4gSi4iIGFuZCB0aGUgbGlrZS4KKyUgTm8gZm9udCBjaGFuZ2UsIGJ1dCBkb24ndCBkbyBlbmQtb2Ytc2VudGVuY2Ugc3BhY2luZy4KKyUgCitcZGVmXGFiYnIjMXtcZG9hYmJyICMxLCxcZmluaXNofQorXGRlZlxkb2FiYnIjMSwjMiwjM1xmaW5pc2h7JQorICB7XHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIFxzcGFjZSAoe1x1bnNlcHNwYWNlcyBcaWdub3Jlc3BhY2VzIFx0ZW1wIFx1bnNraXB9KSUKKyAgXGZpCit9CisKKyUgQHBvdW5kc3t9IGlzIGEgc3Rlcmxpbmcgc2lnbiwgd2hpY2ggS251dGggcHV0IGluIHRoZSBDTSBpdGFsaWMgZm9udC4KKyUKK1xkZWZccG91bmRze3tcaXRcJH19CisKKyUgQGV1cm97fSBjb21lcyBmcm9tIGEgc2VwYXJhdGUgZm9udCwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0eWxlLgorJSBXZSB1c2UgdGhlIGZyZWUgZmV5bSogZm9udHMgZnJvbSB0aGUgZXVyb3N5bSBwYWNrYWdlIGJ5IEhlbnJpaworJSBUaGVpbGluZywgd2hpY2ggc3VwcG9ydCByZWd1bGFyLCBzbGFudGVkLCBib2xkIGFuZCBib2xkIHNsYW50ZWQgKGFuZAorJSAib3V0bGluZWQiIChibGFja2JvYXJkIGJvYXJkLCBzb3J0IG9mKSB2ZXJzaW9ucywgd2hpY2ggd2UgZG9uJ3QgbmVlZCkuCislIEl0IGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY3Rhbi5vcmcvdGV4LWFyY2hpdmUvZm9udHMvZXVyb3N5bS4KKyUgCislIEFsdGhvdWdoIG9ubHkgcmVndWxhciBpcyB0aGUgdHJ1bHkgb2ZmaWNpYWwgRXVybyBzeW1ib2wsIHdlIGlnbm9yZQorJSB0aGF0LiAgVGhlIEV1cm8gaXMgZGVzaWduZWQgdG8gYmUgc2xpZ2h0bHkgdGFsbGVyIHRoYW4gdGhlIHJlZ3VsYXIKKyUgZm9udCBoZWlnaHQuCislIAorJSBmZXltciAtIHJlZ3VsYXIKKyUgZmV5bW8gLSBzbGFudGVkCislIGZleWJyIC0gYm9sZAorJSBmZXlibyAtIGJvbGQgc2xhbnRlZAorJSAKKyUgVGhlcmUgaXMgbm8gZ29vZCAoZnJlZSkgdHlwZXdyaXRlciB2ZXJzaW9uLCB0byBteSBrbm93bGVkZ2UuCislIEEgZmV5bXIxMCBldXJvIGlzIH43LjNwdCB3aWRlLCB3aGlsZSBhIG5vcm1hbCBjbXR0MTAgY2hhciBpcyB+NS4yNXB0IHdpZGUuCislIEhtbS4KKyUgCislIEFsc28gZG9lc24ndCB3b3JrIGluIG1hdGguICBEbyB3ZSBuZWVkIHRvIGRvIG1hdGggd2l0aCBldXJvIHN5bWJvbHM/CislIEhvcGUgbm90LgorJSAKKyUgCitcZGVmXGV1cm97e1xldXJvZm9udCBlfX0KK1xkZWZcZXVyb2ZvbnR7JQorICAlIFdlIHNldCB0aGUgZm9udCBhdCBlYWNoIGNvbW1hbmQsIHJhdGhlciB0aGFuIHByZWRlZmluaW5nIGl0IGluCisgICUgXHRleHRmb250cyBhbmQgdGhlIG90aGVyIGZvbnQtc3dpdGNoaW5nIGNvbW1hbmRzLCBzbyB0aGF0CisgICUgaW5zdGFsbGF0aW9ucyB3aGljaCBuZXZlciBuZWVkIHRoZSBzeW1ib2wgZG9uJ3QgaGF2ZSB0byBoYXZlIHRoZQorICAlIGZvbnQgaW5zdGFsbGVkLgorICAlIAorICAlIFRoZXJlIGlzIG9ubHkgb25lIGRlc2lnbmVkIHNpemUgKG5vbWluYWwgMTBwdCksIHNvIHdlIGFsd2F5cyBzY2FsZQorICAlIHRoYXQgdG8gdGhlIGN1cnJlbnQgbm9taW5hbCBzaXplLgorICAlIAorICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKKyAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgorICAlIAorICBcZGVmXGV1cm9zaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKKyAgJQorICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZSAKKyAgICAlIGJvbGQ6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXlibzEwfXtmZXlicjEwfSBhdCBcZXVyb3NpemUKKyAgXGVsc2UgCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5bW8xMH17ZmV5bXIxMH0gYXQgXGV1cm9zaXplCisgIFxmaQorICBcdGhpc2V1cm9mb250Cit9CisKKyUgQHJlZ2lzdGVyZWRzeW1ib2wgLSBSIGluIGEgY2lyY2xlLiAgVGhlIGZvbnQgZm9yIHRoZSBSIHNob3VsZCByZWFsbHkKKyUgYmUgc21hbGxlciB5ZXQsIGJ1dCBsbGxzaXplIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorJSBBZGFwdGVkIGZyb20gdGhlIHBsYWluLnRleCBkZWZpbml0aW9uIG9mIFxjb3B5cmlnaHQuCislCitcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7JQorICAkXnt7XG9vYWxpZ257XGhmaWxccmFpc2UuMDdleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFJ9JQorICAgICAgICAgICAgICAgXGhmaWxcY3JjclxPcmJ9fSUKKyAgICB9JCUKK30KKworJSBMYXVyZW50IFNpZWJlbm1hbm4gcmVwb3J0cyBcT3JiIHVuZGVmaW5lZCB3aXRoOgorJSAgVGV4dHVyZXMgMS43LjcgKHByZWxvYWRlZCBmb3JtYXQ9cGxhaW4gOTMuMTAuMTQpICAoNjhLKSAgMTYgQVBSIDIwMDQgMDI6MzgKKyUgc28gd2UnbGwgZGVmaW5lIGl0IGlmIG5lY2Vzc2FyeS4KKyUgCitcaWZ4XE9yYlx1bmRlZmluZWQKK1xkZWZcT3Jie1xtYXRoaGV4Ym94MjBEfQorXGZpCisKKworXG1lc3NhZ2V7cGFnZSBoZWFkaW5ncyx9CisKK1xuZXdza2lwXHRpdGxlcGFnZXRvcGdsdWUgXHRpdGxlcGFnZXRvcGdsdWUgPSAxLjVpbgorXG5ld3NraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZSBcdGl0bGVwYWdlYm90dG9tZ2x1ZSA9IDJwYworCislIEZpcnN0IHRoZSB0aXRsZSBwYWdlLiAgTXVzdCBkbyBAc2V0dGl0bGUgYmVmb3JlIEB0aXRsZXBhZ2UuCitcbmV3aWZcaWZzZWVuYXV0aG9yCitcbmV3aWZcaWZmaW5pc2hlZHRpdGxlcGFnZQorCislIERvIGFuIGltcGxpY2l0IEBjb250ZW50cyBvciBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZSBpZiB0aGUKKyUgdXNlciBzYXlzIEBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlIG9yIEBzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UuCislCitcbmV3aWZcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCitcbmV3aWZcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCisKK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXtcYmVnaW5ncm91cFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgICAgICAgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQorCitcZW52ZGVmXHRpdGxlcGFnZXslCisgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50PTBwdCBcdGV4dGZvbnRzCisgICAgJSBMZWF2ZSBzb21lIHNwYWNlIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgcGFnZS4KKyAgICBcdmdsdWVcdGl0bGVwYWdldG9wZ2x1ZQorICAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorICAgICUKKyAgICAlIE1vc3QgdGl0bGUgYGBwYWdlcycnIGFyZSBhY3R1YWxseSB0d28gcGFnZXMgbG9uZywgd2l0aCBzcGFjZQorICAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgICBcbGV0XG9sZHBhZ2UgPSBccGFnZQorICAgIFxkZWZccGFnZXslCisgICAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJIFxmaW5pc2h0aXRsZXBhZ2UKKyAgICAgIFxmaQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxwYWdlCisgICAgICBcbnVsbAorICAgIH0lCit9CisKK1xkZWZcRXRpdGxlcGFnZXslCisgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCVxmaW5pc2h0aXRsZXBhZ2UKKyAgICBcZmkKKyAgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICAlIGJlY2F1c2UgdGhlIGhlYWRsaW5lIGFuZCBmb290bGluZSBhcmUgb25seSBlbXB0eSBpbnNpZGUgdGhlIGdyb3VwLgorICAgICUgSWYgd2UgdXNlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBccGFnZSwgd2UgYWx3YXlzIGdldCBhIGJsYW5rIHBhZ2UKKyAgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgICBcb2xkcGFnZQorICBcZW5kZ3JvdXAKKyAgJQorICAlIE5lZWQgdGhpcyBiZWZvcmUgdGhlIFwuLi5hZnRlcnRpdGxlcGFnZSBjaGVja3Mgc28gdGhhdCBpZiB0aGV5IGFyZQorICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgIFxIRUFESU5HU29uCisgICUKKyAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgIFxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxzaG9ydGNvbnRlbnRzCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorICAlCisgIFxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgMnB0IHdpZHRoIFxoc2l6ZQorICBcdnNraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZQorICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKKworXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30KKworXGRlZlxhdXRob3Jmb250e1xhdXRob3JybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTZwdCBcbm9ybWFsYmFzZWxpbmVzCisJCVxsZXRcdHQ9XGF1dGhvcnR0fQorCitccGFyc2VhcmdkZWZcdGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIFxsZWZ0bGluZXtcdGl0bGVmb250c1xybSAjMX0KKyAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCisgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCisgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0Cit9CisKK1xwYXJzZWFyZ2RlZlxzdWJ0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAge1xzdWJ0aXRsZWZvbnQgXHJpZ2h0bGluZXsjMX19JQorfQorCislIEBhdXRob3Igc2hvdWxkIGNvbWUgbGFzdCwgYnV0IG1heSBjb21lIG1hbnkgdGltZXMuCislIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIEBxdW90YXRpb24uCislCitccGFyc2VhcmdkZWZcYXV0aG9yeyUKKyAgXGRlZlx0ZW1we1xxdW90YXRpb259JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICAgIFxkZWZccXVvdGF0aW9uYXV0aG9yeyMxfSUgcHJpbnRlZCBpbiBcRXF1b3RhdGlvbi4KKyAgXGVsc2UKKyAgICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgICAgXGlmc2VlbmF1dGhvclxlbHNlIFx2c2tpcCAwcHQgcGx1cyAxZmlsbGwgXHNlZW5hdXRob3J0cnVlIFxmaQorICAgIHtcYXV0aG9yZm9udCBcbGVmdGxpbmV7IzF9fSUKKyAgXGZpCit9CisKKworJSUlIFNldCB1cCBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncy4KKworXGxldFx0aGlzcGFnZT1cZm9saW8KKworXG5ld3Rva3NcZXZlbmhlYWRsaW5lICAgICUgaGVhZGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkaGVhZGxpbmUgICAgICUgaGVhZGxpbmUgb24gb2RkIHBhZ2VzCitcbmV3dG9rc1xldmVuZm9vdGxpbmUgICAgJSBmb290bGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRmb290bGluZSAgICAgJSBmb290bGluZSBvbiBvZGQgcGFnZXMKKworJSBOb3cgbWFrZSBUZVggdXNlIHRob3NlIHZhcmlhYmxlcworXGhlYWRsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkaGVhZGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5oZWFkbGluZSBcZml9fQorXGZvb3RsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkZm9vdGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5mb290bGluZSBcZml9XEhFQURJTkdTaG9va30KK1xsZXRcSEVBRElOR1Nob29rPVxyZWxheAorCislIENvbW1hbmRzIHRvIHNldCB0aG9zZSB2YXJpYWJsZXMuCislIEZvciBleGFtcGxlLCB0aGlzIGlzIHdoYXQgIEBoZWFkaW5ncyBvbiAgZG9lcworJSBAZXZlbmhlYWRpbmcgQHRoaXN0aXRsZXxAdGhpc3BhZ2V8QHRoaXNjaGFwdGVyCislIEBvZGRoZWFkaW5nIEB0aGlzY2hhcHRlcnxAdGhpc3BhZ2V8QHRoaXN0aXRsZQorJSBAZXZlbmZvb3RpbmcgQHRoaXNmaWxlfHwKKyUgQG9kZGZvb3RpbmcgfHxAdGhpc2ZpbGUKKworCitcZGVmXGV2ZW5oZWFkaW5ne1xwYXJzZWFyZ1xldmVuaGVhZGluZ3h4eH0KK1xkZWZcZXZlbmhlYWRpbmd4eHggIzF7XGV2ZW5oZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxldmVuaGVhZGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXGRlZlxvZGRoZWFkaW5ne1xwYXJzZWFyZ1xvZGRoZWFkaW5neHh4fQorXGRlZlxvZGRoZWFkaW5neHh4ICMxe1xvZGRoZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxvZGRoZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xwYXJzZWFyZ2RlZlxldmVyeWhlYWRpbmd7XG9kZGhlYWRpbmd4eHh7IzF9XGV2ZW5oZWFkaW5neHh4eyMxfX0lCisKK1xkZWZcZXZlbmZvb3Rpbmd7XHBhcnNlYXJnXGV2ZW5mb290aW5neHh4fQorXGRlZlxldmVuZm9vdGluZ3h4eCAjMXtcZXZlbmZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5mb290aW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGZvb3Rpbmd7XHBhcnNlYXJnXG9kZGZvb3Rpbmd4eHh9CitcZGVmXG9kZGZvb3Rpbmd4eHggIzF7XG9kZGZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKKyAgXGdsb2JhbFxvZGRmb290bGluZSA9IHtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX0lCisgICUKKyAgJSBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgZm9vdGxpbmUuICBIb3BlZnVsbHkgb2sgdG8gYXNzdW1lCisgICUgQGV2ZW5mb290aW5nIHdpbGwgbm90IGJlIHVzZWQgYnkgaXRzZWxmLgorICBcZ2xvYmFsXGFkdmFuY2VccGFnZWhlaWdodCBieSAtXGJhc2VsaW5lc2tpcAorICBcZ2xvYmFsXGFkdmFuY2VcdnNpemUgYnkgLVxiYXNlbGluZXNraXAKK30KKworXHBhcnNlYXJnZGVmXGV2ZXJ5Zm9vdGluZ3tcb2RkZm9vdGluZ3h4eHsjMX1cZXZlbmZvb3Rpbmd4eHh7IzF9fQorCisKKyUgQGhlYWRpbmdzIGRvdWJsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBzaW5nbGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgb2ZmICAgICAgICAgdHVybnMgdGhlbSBvZmYuCislIEBoZWFkaW5ncyBvbiAgICAgICAgICBzYW1lIGFzIEBoZWFkaW5ncyBkb3VibGUsIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgorJSBAaGVhZGluZ3MgYWZ0ZXIgICAgICAgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIGRvdWJsZWFmdGVyIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBzaW5nbGVhZnRlciB0dXJucyBvbiBzaW5nbGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBCeSBkZWZhdWx0LCB0aGV5IGFyZSBvZmYgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQsCislIGFuZCB0dXJuZWQgYG9uJyBhZnRlciBAZW5kIHRpdGxlcGFnZS4KKworXGRlZlxoZWFkaW5ncyAjMSB7XGNzbmFtZSBIRUFESU5HUyMxXGVuZGNzbmFtZX0KKworXGRlZlxIRUFESU5HU29mZnslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH19CitcSEVBRElOR1NvZmYKKyUgV2hlbiB3ZSB0dXJuIGhlYWRpbmdzIG9uLCBzZXQgdGhlIHBhZ2UgbnVtYmVyIHRvIDEuCislIEZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcsIHB1dCBjdXJyZW50IGZpbGUgbmFtZSBpbiBsb3dlciBsZWZ0IGNvcm5lciwKKyUgY2hhcHRlciBuYW1lIG9uIGluc2lkZSB0b3Agb2YgcmlnaHQgaGFuZCBwYWdlcywgZG9jdW1lbnQKKyUgdGl0bGUgb24gaW5zaWRlIHRvcCBvZiBsZWZ0IGhhbmQgcGFnZXMsIGFuZCBwYWdlIG51bWJlcnMgb24gb3V0c2lkZSB0b3AKKyUgZWRnZSBvZiBhbGwgcGFnZXMuCitcZGVmXEhFQURJTkdTZG91YmxleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KK1xsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorCislIEZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcsIGNoYXB0ZXIgdGl0bGUgZ29lcyBhY3Jvc3MgdG9wIGxlZnQgb2YgcGFnZSwKKyUgcGFnZSBudW1iZXIgb24gdG9wIHJpZ2h0LgorXGRlZlxIRUFESU5HU3NpbmdsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CitcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfQorCitcZGVmXEhFQURJTkdTYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTZG91YmxleH0KK1xsZXRcSEVBRElOR1Nkb3VibGVhZnRlcj1cSEVBRElOR1NhZnRlcgorXGRlZlxIRUFESU5HU2RvdWJsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorCitcZGVmXEhFQURJTkdTc2luZ2xlYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTc2luZ2xleH0KK1xkZWZcSEVBRElOR1NzaW5nbGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KKworJSBTdWJyb3V0aW5lcyB1c2VkIGluIGdlbmVyYXRpbmcgaGVhZGluZ3MKKyUgVGhpcyBwcm9kdWNlcyBEYXkgTW9udGggWWVhciBzdHlsZSBvZiBvdXRwdXQuCislIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGluIGNhc2UgYSB0eGktPz8udGV4IGZpbGUgaGFzIHNldAorJSB1cCBhIGRpZmZlcmVudCBmb3JtYXQgKGUuZy4sIHR4aS1jcy50ZXggZG9lcyB0aGlzKS4KK1xpZnhcdG9kYXlcdW5kZWZpbmVkCitcZGVmXHRvZGF5eyUKKyAgXG51bWJlclxkYXlcc3BhY2UKKyAgXGlmY2FzZVxtb250aAorICBcb3JccHV0d29yZE1KYW5cb3JccHV0d29yZE1GZWJcb3JccHV0d29yZE1NYXJcb3JccHV0d29yZE1BcHIKKyAgXG9yXHB1dHdvcmRNTWF5XG9yXHB1dHdvcmRNSnVuXG9yXHB1dHdvcmRNSnVsXG9yXHB1dHdvcmRNQXVnCisgIFxvclxwdXR3b3JkTVNlcFxvclxwdXR3b3JkTU9jdFxvclxwdXR3b3JkTU5vdlxvclxwdXR3b3JkTURlYworICBcZmkKKyAgXHNwYWNlXG51bWJlclx5ZWFyfQorXGZpCisKKyUgQHNldHRpdGxlIGxpbmUuLi4gIHNwZWNpZmllcyB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LCBmb3IgaGVhZGluZ3MuCislIEl0IGdlbmVyYXRlcyBubyBvdXRwdXQgb2YgaXRzIG93bi4KK1xkZWZcdGhpc3RpdGxle1xwdXR3b3JkTm9UaXRsZX0KK1xkZWZcc2V0dGl0bGV7XHBhcnNlYXJne1xnZGVmXHRoaXN0aXRsZX19CisKKworXG1lc3NhZ2V7dGFibGVzLH0KKyUgVGFibGVzIC0tIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZSwgQGl0ZW0oeCkuCisKKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiB0YWJsZSB0ZXh0CitcbmV3ZGltZW5cdGFibGVpbmRlbnQgXHRhYmxlaW5kZW50PS44aW4KKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZSB0ZXh0CitcbmV3ZGltZW5caXRlbWluZGVudCAgXGl0ZW1pbmRlbnQ9LjNpbgorJSBtYXJnaW4gYmV0d2VlbiBlbmQgb2YgdGFibGUgaXRlbSBhbmQgc3RhcnQgb2YgdGFibGUgdGV4dC4KK1xuZXdkaW1lblxpdGVtbWFyZ2luICBcaXRlbW1hcmdpbj0uMWluCisKKyUgdXNlZCBpbnRlcm5hbGx5IGZvciBcaXRlbWluZGVudCBtaW51cyBcaXRlbW1hcmdpbgorXG5ld2RpbWVuXGl0ZW1tYXgKKworJSBOb3RlIEB0YWJsZSwgQGZ0YWJsZSwgYW5kIEB2dGFibGUgZGVmaW5lIEBpdGVtLCBAaXRlbXgsIGV0Yy4sIHdpdGgKKyUgdGhlc2UgZGVmcy4KKyUgVGhleSBhbHNvIGRlZmluZSBcaXRlbWluZGV4CislIHRvIGluZGV4IHRoZSBpdGVtIG5hbWUgaW4gd2hhdGV2ZXIgbWFubmVyIGlzIGRlc2lyZWQgKHBlcmhhcHMgbm9uZSkuCisKK1xuZXdpZlxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwCisKK1xkZWZcaXRlbXhwYXJ7XHBhclxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwXG5vYnJlYWtcdnNraXAtXHBhcnNraXBcbm9icmVha1xmaX0KKworXGRlZlxpbnRlcm5hbEJpdGVte1xzbWFsbGJyZWFrIFxwYXJzZWFyZ1xpdGVtenp6fQorXGRlZlxpbnRlcm5hbEJpdGVteHtcaXRlbXhwYXIgXHBhcnNlYXJnXGl0ZW16enp9CisKK1xkZWZcaXRlbXp6eiAjMXtcYmVnaW5ncm91cCAlCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1cdGFibGVpbmRlbnQKKyAgXHNldGJveDA9XGhib3h7XGl0ZW1pbmRpY2F0ZXsjMX19JQorICBcaXRlbWluZGV4eyMxfSUKKyAgXG5vYnJlYWsgJSBUaGlzIHByZXZlbnRzIGEgYnJlYWsgYmVmb3JlIEBpdGVteC4KKyAgJQorICAlIElmIHRoZSBpdGVtIHRleHQgZG9lcyBub3QgZml0IGluIHRoZSBzcGFjZSB3ZSBoYXZlLCBwdXQgaXQgb24gYSBsaW5lCisgICUgYnkgaXRzZWxmLCBhbmQgZG8gbm90IGFsbG93IGEgcGFnZSBicmVhayBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoYXQKKyAgJSBsaW5lLiAgV2UgZG8gbm90IHN0YXJ0IGEgcGFyYWdyYXBoIGhlcmUgYmVjYXVzZSB0aGVuIGlmIHRoZSBuZXh0CisgICUgY29tbWFuZCBpcywgZS5nLiwgQGtpbmRleCwgdGhlIHdoYXRzaXQgd291bGQgZ2V0IHB1dCBpbnRvIHRoZQorICAlIGhvcml6b250YWwgbGlzdCBvbiBhIGxpbmUgYnkgaXRzZWxmLCByZXN1bHRpbmcgaW4gZXh0cmEgYmxhbmsgc3BhY2UuCisgIFxpZmRpbSBcd2QwPlxpdGVtbWF4CisgICAgJQorICAgICUgTWFrZSB0aGlzIGEgcGFyYWdyYXBoIHNvIHdlIGdldCB0aGUgXHBhcnNraXAgZ2x1ZSBhbmQgd3JhcHBpbmcsCisgICAgJSBidXQgbGVhdmUgaXQgcmFnZ2VkLXJpZ2h0LgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieS1cdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXGhzaXplIGJ5XHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkwcHQgcGx1czFmaWwKKyAgICAgIFxsZWF2ZXZtb2RlXHVuaGJveDBccGFyCisgICAgXGVuZGdyb3VwCisgICAgJQorICAgICUgV2UncmUgZ29pbmcgdG8gYmUgc3RhcnRpbmcgYSBwYXJhZ3JhcGgsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZQorICAgICUgXHBhcnNraXAgZ2x1ZSAtLSBsb2dpY2FsbHkgaXQncyBwYXJ0IG9mIHRoZSBAaXRlbSB3ZSBqdXN0IHN0YXJ0ZWQuCisgICAgXG5vYnJlYWsgXHZza2lwLVxwYXJza2lwCisgICAgJQorICAgICUgU3RvcCBhIHBhZ2UgYnJlYWsgYXQgdGhlIFxwYXJza2lwIGdsdWUgY29taW5nIHVwLiAgSG93ZXZlciwgaWYKKyAgICAlIHdoYXQgZm9sbG93cyBpcyBhbiBlbnZpcm9ubWVudCBzdWNoIGFzIEBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIG5vCisgICAgJSBccGFyc2tpcCBnbHVlOyB0aGVuIHRoZSBuZWdhdGl2ZSB2c2tpcCB3ZSBqdXN0IGluc2VydGVkIHdvdWxkCisgICAgJSBjYXVzZSB0aGUgZXhhbXBsZSBhbmQgdGhlIGl0ZW0gdG8gY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcworICAgICUgYml6YXJyZSB2YWx1ZSBvZiAxMDAwMSBhcyBhIHNpZ25hbCB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUgYWZ0ZXIgYWxsLiAgU2VjdGlvbiB0aXRsZXMgYXJlIGhhbmRsZWQgdGhpcyB3YXkgYWxzby4KKyAgICAlIAorICAgIFxwZW5hbHR5IDEwMDAxCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwZmFsc2UKKyAgXGVsc2UKKyAgICAlIFRoZSBpdGVtIHRleHQgZml0cyBpbnRvIHRoZSBzcGFjZS4gIFN0YXJ0IGEgcGFyYWdyYXBoLCBzbyB0aGF0IHRoZQorICAgICUgZm9sbG93aW5nIHRleHQgKGlmIGFueSkgd2lsbCBlbmQgdXAgb24gdGhlIHNhbWUgbGluZS4KKyAgICBcbm9pbmRlbnQKKyAgICAlIERvIHRoaXMgd2l0aCBrZXJucyBhbmQgXHVuaGJveCBzbyB0aGF0IGlmIHRoZXJlIGlzIGEgZm9vdG5vdGUgaW4KKyAgICAlIHRoZSBpdGVtIHRleHQsIGl0IGNhbiBtaWdyYXRlIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QgYW5kCisgICAgJSBldmVudHVhbGx5IGJlIHByaW50ZWQuCisgICAgXG5vYnJlYWtca2Vybi1cdGFibGVpbmRlbnQKKyAgICBcZGltZW4wID0gXGl0ZW1tYXggIFxhZHZhbmNlXGRpbWVuMCBieSBcaXRlbW1hcmdpbiBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAKKyAgICBcdW5oYm94MAorICAgIFxub2JyZWFrXGtlcm5cZGltZW4wCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwdHJ1ZQorICBcZmkKK30KKworXGRlZlxpdGVte1xlcnJtZXNzYWdle0BpdGVtIHdoaWxlIG5vdCBpbiBhIGxpc3QgZW52aXJvbm1lbnR9fQorXGRlZlxpdGVteHtcZXJybWVzc2FnZXtAaXRlbXggd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CisKKyUgQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLgorXGVudmRlZlx0YWJsZXslCisgIFxsZXRcaXRlbWluZGV4XGdvYmJsZQorICBcdGFibGVjaGVja3t0YWJsZX0lCit9CitcZW52ZGVmXGZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge2ZufXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre2Z0YWJsZX0lCit9CitcZW52ZGVmXHZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge3ZyfXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre3Z0YWJsZX0lCit9CitcZGVmXHRhYmxlY2hlY2sjMXslCisgIFxpZm51bSBcdGhlXGNhdGNvZGVgXF5eTT1cYWN0aXZlCisgICAgXGVuZGdyb3VwCisgICAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIHdvbid0IHdvcmsgaW4gdGhpcyBjb250ZXh0OyBwZXJoYXBzIHRoZSBwcm9ibGVtIGlzCisgICAgICB0aGF0IHdlIGFyZSBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKKyAgICBcZGVmXG5leHR7XGRvaWdub3JleyMxfX0lCisgIFxlbHNlCisgICAgXGxldFxuZXh0XHRhYmxleAorICBcZmkKKyAgXG5leHQKK30KK1xkZWZcdGFibGV4IzF7JQorICBcZGVmXGl0ZW1pbmRpY2F0ZXsjMX0lCisgIFxwYXJzZWFyZ1x0YWJsZXkKK30KK1xkZWZcdGFibGV5IzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcdGFibGV6ICMxXHNwYWNlXHNwYWNlXHNwYWNlfSUKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVx0ZW1wIFxlbmR0YWJsZXoKK30KK1xkZWZcdGFibGV6ICMxICMyICMzICM0XGVuZHRhYmxlenslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpZm51bSAwIzE+MCBcYWR2YW5jZSBcbGVmdHNraXAgYnkgIzFcbWlsIFxmaQorICBcaWZudW0gMCMyPjAgXHRhYmxlaW5kZW50PSMyXG1pbCBcZmkKKyAgXGlmbnVtIDAjMz4wIFxhZHZhbmNlIFxyaWdodHNraXAgYnkgIzNcbWlsIFxmaQorICBcaXRlbW1heD1cdGFibGVpbmRlbnQKKyAgXGFkdmFuY2UgXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcdGFibGVpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cdGFibGVpbmRlbnQKKyAgXHBhcmluZGVudCA9IDBwdAorICBccGFyc2tpcCA9IFxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltIFxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpCisgIFxsZXRcaXRlbSA9IFxpbnRlcm5hbEJpdGVtCisgIFxsZXRcaXRlbXggPSBcaW50ZXJuYWxCaXRlbXgKK30KK1xkZWZcRXRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWt9CitcbGV0XEVmdGFibGVcRXRhYmxlCitcbGV0XEV2dGFibGVcRXRhYmxlCitcbGV0XEVpdGVtaXplXEV0YWJsZQorXGxldFxFZW51bWVyYXRlXEV0YWJsZQorCislIFRoaXMgaXMgdGhlIGNvdW50ZXIgdXNlZCBieSBAZW51bWVyYXRlLCB3aGljaCBpcyByZWFsbHkgQGl0ZW1pemUKKworXG5ld2NvdW50IFxpdGVtbm8KKworXGVudmRlZlxpdGVtaXple1xwYXJzZWFyZ1xkb2l0ZW1pemV9CisKK1xkZWZcZG9pdGVtaXplIzF7JQorICBcYWJvdmVlbnZicmVhaworICBcaXRlbW1heD1caXRlbWluZGVudAorICBcYWR2YW5jZVxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcaXRlbWluZGVudAorICBcZXhkZW50YW1vdW50PVxpdGVtaW5kZW50CisgIFxwYXJpbmRlbnQ9MHB0CisgIFxwYXJza2lwPVxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGRlZlxpdGVtY29udGVudHN7IzF9JQorICAlIEBpdGVtaXplIHdpdGggbm8gYXJnIGlzIGVxdWl2YWxlbnQgdG8gQGl0ZW1pemUgQGJ1bGxldC4KKyAgXGlmeFxpdGVtY29udGVudHNcZW1wdHlcZGVmXGl0ZW1jb250ZW50c3tcYnVsbGV0fVxmaQorICBcbGV0XGl0ZW09XGl0ZW1pemVpdGVtCit9CisKKyUgRGVmaW5pdGlvbiBvZiBAaXRlbSB3aGlsZSBpbnNpZGUgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUuCislCitcZGVmXGl0ZW1pemVpdGVteyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IDEgICUgZm9yIGVudW1lcmF0aW9ucworICB7XGxldFxwYXI9XGVuZGdyYWYgXHNtYWxsYnJlYWt9JSByZWFzb25hYmxlIHBsYWNlIHRvIGJyZWFrCisgIHslCisgICAlIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gQGl0ZW1pemUgZGlyZWN0bHkgYWZ0ZXIgYSBzZWN0aW9uIHRpdGxlLCBhCisgICAlIFxub2JyZWFrIHdpbGwgYmUgbGFzdCBvbiB0aGUgbGlzdCwgYW5kIFxzZWN0aW9uaGVhZGluZyB3aWxsIGhhdmUKKyAgICUgZG9uZSBhIFx2c2tpcC1ccGFyc2tpcC4gIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byB6ZXJvCisgICAlIHBhcnNraXAsIG9yIHRoZSBpdGVtIHRleHQgd2lsbCBjcmFzaCB3aXRoIHRoZSBoZWFkaW5nLiAgT24gdGhlCisgICAlIG90aGVyIGhhbmQsIHdoZW4gdGhlcmUgaXMgbm9ybWFsIHRleHQgcHJlY2VkaW5nIHRoZSBpdGVtIChhcyB0aGVyZQorICAgJSB1c3VhbGx5IGlzKSwgd2UgZG8gd2FudCB0byB6ZXJvIHBhcnNraXAsIG9yIHRoZXJlIHdvdWxkIGJlIHRvbyBtdWNoCisgICAlIHNwYWNlLiAgSW4gdGhhdCBjYXNlLCB3ZSB3b24ndCBoYXZlIGEgXG5vYnJlYWsgYmVmb3JlLiAgQXQgbGVhc3QKKyAgICUgdGhhdCdzIHRoZSB0aGVvcnkuCisgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBhcnNraXA9MGluIFxmaQorICAgXG5vaW5kZW50CisgICBcaGJveCB0byAwcHR7XGhzcyBcaXRlbWNvbnRlbnRzIFxrZXJuXGl0ZW1tYXJnaW59JQorICAgXHZhZGp1c3R7XHBlbmFsdHkgMTIwMH19JSBub3QgZ29vZCB0byBicmVhayBhZnRlciBmaXJzdCBsaW5lIG9mIGl0ZW0uCisgIFxmbHVzaGNyCit9CisKKyUgXHNwbGl0b2ZmIFRPS0VOU1xlbmRtYXJrIGRlZmluZXMgXGZpcnN0IHRvIGJlIHRoZSBmaXJzdCB0b2tlbiBpbgorJSBUT0tFTlMsIGFuZCBccmVzdCB0byBiZSB0aGUgcmVtYWluZGVyLgorJQorXGRlZlxzcGxpdG9mZiMxIzJcZW5kbWFya3tcZGVmXGZpcnN0eyMxfVxkZWZccmVzdHsjMn19JQorCislIEFsbG93IGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGxvd2VyY2FzZSBsZXR0ZXIsCislIG9yIG51bWJlciwgdG8gc3BlY2lmeSB0aGUgZmlyc3QgbGFiZWwgaW4gdGhlIGVudW1lcmF0ZWQgbGlzdC4gIE5vCislIGFyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIGAxJy4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxlbnVtZXJhdGV7XGVudW1lcmF0ZXkgIzEgIFxlbmRlbnVtZXJhdGV5fQorXGRlZlxlbnVtZXJhdGV5ICMxICMyXGVuZGVudW1lcmF0ZXl7JQorICAlIElmIHdlIHdlcmUgZ2l2ZW4gbm8gYXJndW1lbnQsIHByZXRlbmQgd2Ugd2VyZSBnaXZlbiBgMScuCisgIFxkZWZcdGhlYXJneyMxfSUKKyAgXGlmeFx0aGVhcmdcZW1wdHkgXGRlZlx0aGVhcmd7MX1cZmkKKyAgJQorICAlIERldGVjdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzaW5nbGUgdG9rZW4uICBJZiBzbywgaXQgbWlnaHQgYmUgYQorICAlIGxldHRlci4gIE90aGVyd2lzZSwgdGhlIG9ubHkgdmFsaWQgdGhpbmcgaXQgY2FuIGJlIGlzIGEgbnVtYmVyLgorICAlIChXZSB3aWxsIGFsd2F5cyBoYXZlIG9uZSB0b2tlbiwgYmVjYXVzZSBvZiB0aGUgdGVzdCB3ZSBqdXN0IG1hZGUuCisgICUgVGhpcyBpcyBhIGdvb2QgdGhpbmcsIHNpbmNlIFxzcGxpdG9mZiBkb2Vzbid0IHdvcmsgZ2l2ZW4gbm90aGluZyBhdAorICAlIGFsbCAtLSB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHVuZGVsaW1pdGVkLikKKyAgXGV4cGFuZGFmdGVyXHNwbGl0b2ZmXHRoZWFyZ1xlbmRtYXJrCisgIFxpZnhccmVzdFxlbXB0eQorICAgICUgT25seSBvbmUgdG9rZW4gaW4gdGhlIGFyZ3VtZW50LiAgSXQgY291bGQgc3RpbGwgYmUgYW55dGhpbmcuCisgICAgJSBBIGBgbG93ZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIG5vbnplcm8uCisgICAgJSBBbiBgYHVwcGVyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBib3RoIG5vbnplcm8sIGFuZAorICAgICUgICBub3QgZXF1YWwgdG8gaXRzZWxmLgorICAgICUgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgaXQncyBhIG51bWJlci4KKyAgICAlCisgICAgJSBXZSBuZWVkIHRoZSBccmVsYXggYXQgdGhlIGVuZCBvZiB0aGUgXGlmbnVtIGxpbmVzIHRvIHN0b3AgVGVYIGZyb20KKyAgICAlIGNvbnRpbnVpbmcgdG8gbG9vayBmb3IgYSA8bnVtYmVyPi4KKyAgICAlCisgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPTBccmVsYXgKKyAgICAgIFxudW1lcmljZW51bWVyYXRlICUgYSBudW1iZXIgKHdlIGhvcGUpCisgICAgXGVsc2UKKyAgICAgICUgSXQncyBhIGxldHRlci4KKyAgICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz1cZXhwYW5kYWZ0ZXJgXHRoZWFyZ1xyZWxheAorICAgICAgICBcbG93ZXJjYXNlZW51bWVyYXRlICUgbG93ZXJjYXNlIGxldHRlcgorICAgICAgXGVsc2UKKyAgICAgICAgXHVwcGVyY2FzZWVudW1lcmF0ZSAlIHVwcGVyY2FzZSBsZXR0ZXIKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgTXVsdGlwbGUgdG9rZW5zIGluIHRoZSBhcmd1bWVudC4gIFdlIGhvcGUgaXQncyBhIG51bWJlci4KKyAgICBcbnVtZXJpY2VudW1lcmF0ZQorICBcZmkKK30KKworJSBBbiBAZW51bWVyYXRlIHdob3NlIGxhYmVscyBhcmUgaW50ZWdlcnMuICBUaGUgc3RhcnRpbmcgaW50ZWdlciBpcworJSBnaXZlbiBpbiBcdGhlYXJnLgorJQorXGRlZlxudW1lcmljZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257XHRoZVxpdGVtbm99JQorfQorCislIFRoZSBzdGFydGluZyAobG93ZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcbG93ZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0lCisgICAgXGZpCisgICAgXGNoYXJcbGNjb2RlXGl0ZW1ubworICB9JQorfQorCislIFRoZSBzdGFydGluZyAodXBwZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcdXBwZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgdXBwZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0KKyAgICBcZmkKKyAgICBcY2hhclx1Y2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgQ2FsbCBcZG9pdGVtaXplLCBhZGRpbmcgYSBwZXJpb2QgdG8gdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzdXBwbHlpbmcgdGhlCislIGNvbW1vbiBsYXN0IHR3byBhcmd1bWVudHMuICBBbHNvIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBpbml0aWFsIHZhbHVlIGluCislIFxpdGVtbm8sIHNpbmNlIEBpdGVtIGluY3JlbWVudHMgXGl0ZW1uby4KKyUKK1xkZWZcc3RhcnRlbnVtZXJhdGlvbiMxeyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IC0xCisgIFxkb2l0ZW1pemV7IzEufVxmbHVzaGNyCit9CisKKyUgQGFscGhhZW51bWVyYXRlIGFuZCBAY2Fwc2VudW1lcmF0ZSBhcmUgYWJicmV2aWF0aW9ucyBmb3IgZ2l2aW5nIGFuIGFyZworJSB0byBAZW51bWVyYXRlLgorJQorXGRlZlxhbHBoYWVudW1lcmF0ZXtcZW51bWVyYXRle2F9fQorXGRlZlxjYXBzZW51bWVyYXRle1xlbnVtZXJhdGV7QX19CitcZGVmXEVhbHBoYWVudW1lcmF0ZXtcRWVudW1lcmF0ZX0KK1xkZWZcRWNhcHNlbnVtZXJhdGV7XEVlbnVtZXJhdGV9CisKKworJSBAbXVsdGl0YWJsZSBtYWNyb3MKKyUgQW15IEhlbmRyaWNrc29uLCA4LzE4Lzk0LCAzLzYvOTYKKyUKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSB3aWxsIG1ha2UgYXMgbWFueSBjb2x1bW5zIGFzIGRlc2lyZWQuCislIENvbnRlbnRzIG9mIGVhY2ggY29sdW1uIHdpbGwgd3JhcCBhdCB3aWR0aCBnaXZlbiBpbiBwcmVhbWJsZS4gIFdpZHRoCislIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIHdpdGggc2FtcGxlIHRleHQgZ2l2ZW4gaW4gYSB0ZW1wbGF0ZSBsaW5lLAorJSBvciBpbiBwZXJjZW50IG9mIFxoc2l6ZSwgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGV4dCBvbiBwYWdlLgorCislIFRhYmxlIGNhbiBjb250aW51ZSBvdmVyIHBhZ2VzIGJ1dCB3aWxsIG9ubHkgYnJlYWsgYmV0d2VlbiBsaW5lcy4KKworJSBUbyBtYWtlIHByZWFtYmxlOgorJQorJSBFaXRoZXIgZGVmaW5lIHdpZHRocyBvZiBjb2x1bW5zIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplOgorJSAgIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjI1IC4zIC40NQorJSAgIEBpdGVtIC4uLgorJQorJSAgIE51bWJlcnMgZm9sbG93aW5nIEBjb2x1bW5mcmFjdGlvbnMgYXJlIHRoZSBwZXJjZW50IG9mIHRoZSB0b3RhbAorJSAgIGN1cnJlbnQgaHNpemUgdG8gYmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4uIFlvdSBtYXkgdXNlIGFzIG1hbnkKKyUgICBjb2x1bW5zIGFzIGRlc2lyZWQuCisKKworJSBPciB1c2UgYSB0ZW1wbGF0ZToKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIC4uLgorJSAgIHVzaW5nIHRoZSB3aWRlc3QgdGVybSBkZXNpcmVkIGluIGVhY2ggY29sdW1uLgorCislIEVhY2ggbmV3IHRhYmxlIGxpbmUgc3RhcnRzIHdpdGggQGl0ZW0sIGVhY2ggc3Vic2VxdWVudCBuZXcgY29sdW1uCislIHN0YXJ0cyB3aXRoIEB0YWIuIEVtcHR5IGNvbHVtbnMgbWF5IGJlIHByb2R1Y2VkIGJ5IHN1cHBseWluZyBAdGFiJ3MKKyUgd2l0aCBub3RoaW5nIGJldHdlZW4gdGhlbSBmb3IgYXMgbWFueSB0aW1lcyBhcyBlbXB0eSBjb2x1bW5zIGFyZSBuZWVkZWQsCislIGllLCBAdGFiQHRhYkB0YWIgd2lsbCBwcm9kdWNlIHR3byBlbXB0eSBjb2x1bW5zLgorCislIEBpdGVtLCBAdGFiIGRvIG5vdCBuZWVkIHRvIGJlIG9uIHRoZWlyIG93biBsaW5lcywgYnV0IGl0IHdpbGwgbm90IGh1cnQKKyUgaWYgdGhleSBhcmUuCisKKyUgU2FtcGxlIG11bHRpdGFibGU6CisKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYgQHRhYiB0aGlyZCBjb2wKKyUgICBAaXRlbQorJSAgIGZpcnN0IGNvbCBzdHVmZgorJSAgIEB0YWIKKyUgICBzZWNvbmQgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHRoaXJkIGNvbAorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiIE1hbnkgcGFyYWdyYXBocyBvZiB0ZXh0IG1heSBiZSB1c2VkIGluIGFueSBjb2x1bW4uCislCislICAgICAgICAgVGhleSB3aWxsIHdyYXAgYXQgdGhlIHdpZHRoIGRldGVybWluZWQgYnkgdGhlIHRlbXBsYXRlLgorJSAgIEBpdGVtQHRhYkB0YWIgVGhpcyB3aWxsIGJlIGluIHRoaXJkIGNvbHVtbi4KKyUgICBAZW5kIG11bHRpdGFibGUKKworJSBEZWZhdWx0IGRpbWVuc2lvbnMgbWF5IGJlIHJlc2V0IGJ5IHVzZXIuCislIEBtdWx0aXRhYmxlcGFyc2tpcCBpcyB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlcGFyaW5kZW50IGlzIHBhcmFncmFwaCBpbmRlbnQgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlY29sbWFyZ2luIGlzIGhvcml6b250YWwgc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIGNvbHVtbnMuCislIEBtdWx0aXRhYmxlbGluZXNwYWNlIGlzIHNwYWNlIHRvIGxlYXZlIGJldHdlZW4gdGFibGUgaXRlbXMsIGJhc2VsaW5lCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmFzZWxpbmUuCislICAgMHB0IG1lYW5zIGl0IGRlcGVuZHMgb24gY3VycmVudCBub3JtYWwgbGluZSBzcGFjaW5nLgorJQorXG5ld3NraXBcbXVsdGl0YWJsZXBhcnNraXAKK1xuZXdza2lwXG11bHRpdGFibGVwYXJpbmRlbnQKK1xuZXdkaW1lblxtdWx0aXRhYmxlY29sc3BhY2UKK1xuZXdza2lwXG11bHRpdGFibGVsaW5lc3BhY2UKK1xtdWx0aXRhYmxlcGFyc2tpcD0wcHQKK1xtdWx0aXRhYmxlcGFyaW5kZW50PTZwdAorXG11bHRpdGFibGVjb2xzcGFjZT0xMnB0CitcbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKKworJSBNYWNyb3MgdXNlZCB0byBzZXQgdXAgaGFsaWduIHByZWFtYmxlOgorJQorXGxldFxlbmRzZXR1cHRhYmxlXHJlbGF4CitcZGVmXHhlbmRzZXR1cHRhYmxle1xlbmRzZXR1cHRhYmxlfQorXGxldFxjb2x1bW5mcmFjdGlvbnNccmVsYXgKK1xkZWZceGNvbHVtbmZyYWN0aW9uc3tcY29sdW1uZnJhY3Rpb25zfQorXG5ld2lmXGlmc2V0cGVyY2VudAorCislICMxIGlzIHRoZSBAY29sdW1uZnJhY3Rpb24sIHVzdWFsbHkgYSBkZWNpbWFsIG51bWJlciBsaWtlIC41LCBidXQgbWlnaHQKKyUgYmUganVzdCAxLiAgV2UganVzdCB1c2UgaXQsIHdoYXRldmVyIGl0IGlzLgorJQorXGRlZlxwaWNrdXB3aG9sZWZyYWN0aW9uIzEgeyUKKyAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1leyMxXGhzaXplfSUKKyAgXHNldHVwdGFibGUKK30KKworXG5ld2NvdW50XGNvbGNvdW50CitcZGVmXHNldHVwdGFibGUjMXslCisgIFxkZWZcZmlyc3Rhcmd7IzF9JQorICBcaWZ4XGZpcnN0YXJnXHhlbmRzZXR1cHRhYmxlCisgICAgXGxldFxnbyA9IFxyZWxheAorICBcZWxzZQorICAgIFxpZnhcZmlyc3RhcmdceGNvbHVtbmZyYWN0aW9ucworICAgICAgXGdsb2JhbFxzZXRwZXJjZW50dHJ1ZQorICAgIFxlbHNlCisgICAgICBcaWZzZXRwZXJjZW50CisgICAgICAgICBcbGV0XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgIFxlbHNlCisgICAgICAgICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICAgICAgICAgXHNldGJveDA9XGhib3h7IzFcdW5za2lwXHNwYWNlfSUgQWRkIGEgbm9ybWFsIHdvcmQgc3BhY2UgYXMgYQorICAgICAgICAgICAgICAgICAgICUgc2VwYXJhdG9yOyB0eXBpY2FsbHkgdGhhdCBpcyBhbHdheXMgaW4gdGhlIGlucHV0LCBhbnl3YXkuCisgICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7XHRoZVx3ZDB9JQorICAgICAgXGZpCisgICAgXGZpCisgICAgXGlmeFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICAlIFB1dCB0aGUgYXJndW1lbnQgYmFjayBmb3IgdGhlIFxwaWNrdXB3aG9sZWZyYWN0aW9uIGNhbGwsIHNvCisgICAgICAlIHdlJ2xsIGFsd2F5cyBoYXZlIGEgcGVyaW9kIHRoZXJlIHRvIGJlIHBhcnNlZC4KKyAgICAgIFxkZWZcZ297XHBpY2t1cHdob2xlZnJhY3Rpb24jMX0lCisgICAgXGVsc2UKKyAgICAgIFxsZXRcZ28gPSBcc2V0dXB0YWJsZQorICAgIFxmaSUKKyAgXGZpCisgIFxnbworfQorCislIG11bHRpdGFibGUtb25seSBjb21tYW5kcy4KKyUKKyUgQGhlYWRpdGVtIHN0YXJ0cyBhIGhlYWRpbmcgcm93LCB3aGljaCB3ZSB0eXBlc2V0IGluIGJvbGQuCislIEFzc2lnbm1lbnRzIGhhdmUgdG8gYmUgZ2xvYmFsIHNpbmNlIHdlIGFyZSBpbnNpZGUgdGhlIGltcGxpY2l0IGdyb3VwCislIG9mIGFuIGFsaWdubWVudCBlbnRyeS4gIE5vdGUgdGhhdCBcZXZlcnljciByZXNldHMgXGV2ZXJ5dGFiLgorXGRlZlxoZWFkaXRlbXtcY2hlY2tlbnZcbXVsdGl0YWJsZSBcY3JjciBcZ2xvYmFsXGV2ZXJ5dGFiPXtcYmZ9XHRoZVxldmVyeXRhYn0lCislCislIEEgXHRhYiB1c2VkIHRvIGluY2x1ZGUgXGhza2lwMXNwLiAgQnV0IHRoZW4gdGhlIHNwYWNlIGluIGEgdGVtcGxhdGUKKyUgbGluZSBpcyBub3QgZW5vdWdoLiAgVGhhdCBpcyBiYWQuICBTbyBsZXQncyBnbyBiYWNrIHRvIGp1c3QgYCYnIHVudGlsCislIHdlIGVuY291bnRlciB0aGUgcHJvYmxlbSBpdCB3YXMgaW50ZW5kZWQgdG8gc29sdmUgYWdhaW4uCislCQkJCQktLWthcmwsIG5hdGhhbkBhY20ub3JnLCAyMGFwcjk5LgorXGRlZlx0YWJ7XGNoZWNrZW52XG11bHRpdGFibGUgJlx0aGVcZXZlcnl0YWJ9JQorCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgZGVmaW5pdGlvbnM6CislCitcbmV3dG9rc1xldmVyeXRhYiAgJSBpbnNlcnQgYWZ0ZXIgZXZlcnkgdGFiLgorJQorXGVudmRlZlxtdWx0aXRhYmxleyUKKyAgXHZza2lwXHBhcnNraXAKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgQGl0ZW0gd2l0aGluIGEgbXVsdGl0YWJsZSBzdGFydHMgYSBub3JtYWwgcm93LgorICAlIFdlIHVzZSBcZGVmIGluc3RlYWQgb2YgXGxldCBzbyB0aGF0IGlmIG9uZSBvZiB0aGUgbXVsdGl0YWJsZSBlbnRyaWVzCisgICUgY29udGFpbnMgYW4gQGl0ZW1pemUsIHdlIGRvbid0IGNob2tlIG9uIHRoZSBcaXRlbSAoc2VlbiBhcyBcY3JjciBha2EKKyAgJSBcZW5kdGVtcGxhdGUpIGV4cGFuZGluZyBcZG9pdGVtaXplLgorICBcZGVmXGl0ZW17XGNyY3J9JQorICAlCisgIFx0b2xlcmFuY2U9OTUwMAorICBcaGJhZG5lc3M9OTUwMAorICBcc2V0bXVsdGl0YWJsZXNwYWNpbmcKKyAgXHBhcnNraXA9XG11bHRpdGFibGVwYXJza2lwCisgIFxwYXJpbmRlbnQ9XG11bHRpdGFibGVwYXJpbmRlbnQKKyAgXG92ZXJmdWxscnVsZT0wcHQKKyAgXGdsb2JhbFxjb2xjb3VudD0wCisgICUKKyAgXGV2ZXJ5Y3IgPSB7JQorICAgIFxub2FsaWdueyUKKyAgICAgIFxnbG9iYWxcZXZlcnl0YWI9e30lCisgICAgICBcZ2xvYmFsXGNvbGNvdW50PTAgJSBSZXNldCB0aGUgY29sdW1uIGNvdW50ZXIuCisgICAgICAlIENoZWNrIGZvciBzYXZlZCBmb290bm90ZXMsIGV0Yy4KKyAgICAgIFxjaGVja2luc2VydHMKKyAgICAgICUgS2VlcHMgdW5kZXJmdWxsIGJveCBtZXNzYWdlcyBvZmYgd2hlbiB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4KKyAgICAgICVcZmlsYnJlYWsKKwklIE1heWJlIHNvLCBidXQgaXQgYWxzbyBjcmVhdGVzIHJlYWxseSB3ZWlyZCBwYWdlIGJyZWFrcyB3aGVuIHRoZQorCSUgdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuIFdvdWxkbid0IFx2ZmlsIGJlIGJldHRlcj8gIFdhaXQgdW50aWwgdGhlCisJJSBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYsIHNvIGl0IGNhbiBiZSBmaXhlZCBmb3IgcmVhbCAtLWthcmwuCisgICAgfSUKKyAgfSUKKyAgJQorICBccGFyc2VhcmdcZG9tdWx0aXRhYmxlCit9CitcZGVmXGRvbXVsdGl0YWJsZSMxeyUKKyAgJSBUbyBwYXJzZSBldmVyeXRoaW5nIGJldHdlZW4gQG11bHRpdGFibGUgYW5kIEBpdGVtOgorICBcc2V0dXB0YWJsZSMxIFxlbmRzZXR1cHRhYmxlCisgICUKKyAgJSBUaGlzIHByZWFtYmxlIHNldHMgdXAgYSBnZW5lcmljIGNvbHVtbiBkZWZpbml0aW9uLCB3aGljaCB3aWxsCisgICUgYmUgdXNlZCBhcyBtYW55IHRpbWVzIGFzIHVzZXIgY2FsbHMgZm9yIGNvbHVtbnMuCisgICUgXHZ0b3Agd2lsbCBzZXQgYSBzaW5nbGUgbGluZSBhbmQgd2lsbCBhbHNvIGxldCB0ZXh0IHdyYXAgYW5kCisgICUgY29udGludWUgZm9yIG1hbnkgcGFyYWdyYXBocyBpZiBkZXNpcmVkLgorICBcaGFsaWduXGJncm91cCAmJQorICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgXG11bHRpc3RydXQKKyAgICBcdnRvcHslCisgICAgICAlIFVzZSB0aGUgY3VycmVudCBcY29sY291bnQgdG8gZmluZCB0aGUgY29ycmVjdCBjb2x1bW4gd2lkdGg6CisgICAgICBcaHNpemU9XGV4cGFuZGFmdGVyXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZQorICAgICAgJQorICAgICAgJSBJbiBvcmRlciB0byBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlcgorICAgICAgJSB3ZSB3aWxsIGFkZCBhIFxsZWZ0c2tpcCBvZiBcbXVsdGl0YWJsZWNvbHNwYWNlIHRvIGFsbCBjb2x1bW5zIGFmdGVyCisgICAgICAlIHRoZSBmaXJzdCBvbmUuCisgICAgICAlCisgICAgICAlIElmIGEgdGVtcGxhdGUgaGFzIGJlZW4gdXNlZCwgd2Ugd2lsbCBhZGQgXG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgJSB0byB0aGUgd2lkdGggb2YgZWFjaCB0ZW1wbGF0ZSBlbnRyeS4KKyAgICAgICUKKyAgICAgICUgSWYgdGhlIHVzZXIgaGFzIHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZSB3ZSB3aWxsCisgICAgICAlIHVzZSB0aGF0IGRpbWVuc2lvbiBhcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiwgYW5kIHRoZSBcbGVmdHNraXAKKyAgICAgICUgd2lsbCBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlci4gIFRhYmxlIHdpbGwgc3RhcnQgYXQKKyAgICAgICUgbGVmdCBtYXJnaW4gYW5kIGZpbmFsIGNvbHVtbiB3aWxsIGp1c3RpZnkgYXQgcmlnaHQgbWFyZ2luLgorICAgICAgJQorICAgICAgJSBNYWtlIHN1cmUgd2UgZG9uJ3QgaW5oZXJpdCBccmlnaHRza2lwIGZyb20gdGhlIG91dGVyIGVudmlyb25tZW50LgorICAgICAgXHJpZ2h0c2tpcD0wcHQKKyAgICAgIFxpZm51bVxjb2xjb3VudD0xCisJJSBUaGUgZmlyc3QgY29sdW1uIHdpbGwgYmUgaW5kZW50ZWQgd2l0aCB0aGUgc3Vycm91bmRpbmcgdGV4dC4KKwlcYWR2YW5jZVxoc2l6ZSBieVxsZWZ0c2tpcAorICAgICAgXGVsc2UKKwlcaWZzZXRwZXJjZW50IFxlbHNlCisJICAlIElmIHVzZXIgaGFzIG5vdCBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUKKwkgICUgd2Ugd2lsbCBhZHZhbmNlIFxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlLgorCSAgXGFkdmFuY2VcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZQorCVxmaQorICAgICAgICUgSW4gZWl0aGVyIGNhc2Ugd2Ugd2lsbCBtYWtlIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlOgorICAgICAgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2UKKyAgICAgIFxmaQorICAgICAgJSBJZ25vcmluZyBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYXZvaWRzIGFuIG9jY2FzaW9uYWwgc3B1cmlvdXMKKyAgICAgICUgYmxhbmsgbGluZSwgd2hlbiBUZVggZGVjaWRlcyB0byBicmVhayB0aGUgbGluZSBhdCB0aGUgc3BhY2UgYmVmb3JlIHRoZQorICAgICAgJSBib3ggZnJvbSB0aGUgbXVsdGlzdHJ1dCwgc28gdGhlIHN0cnV0IGVuZHMgdXAgb24gYSBsaW5lIGJ5IGl0c2VsZi4KKyAgICAgICUgRm9yIGV4YW1wbGU6CisgICAgICAlIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjExIC44OQorICAgICAgJSBAaXRlbSBAY29kZXsjfQorICAgICAgJSBAdGFiIExlZ2FsIGhvbGlkYXkgd2hpY2ggaXMgdmFsaWQgaW4gbWFqb3IgcGFydHMgb2YgdGhlIHdob2xlIGNvdW50cnkuCisgICAgICAlIElzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgd2l0aCBoaWdobGlnaHRpbmcgc2VxdWVuY2VzIHJlc3BlY3RpdmVseQorICAgICAgJSBtYXJraW5nIGNoYXJhY3RlcnMuCisgICAgICBcbm9pbmRlbnRcaWdub3Jlc3BhY2VzIyNcdW5za2lwXG11bHRpc3RydXQKKyAgICB9XGNyCit9CitcZGVmXEVtdWx0aXRhYmxleyUKKyAgXGNyY3IKKyAgXGVncm91cCAlIGVuZCB0aGUgXGhhbGlnbgorICBcZ2xvYmFsXHNldHBlcmNlbnRmYWxzZQorfQorCitcZGVmXHNldG11bHRpdGFibGVzcGFjaW5neyUKKyAgXGRlZlxtdWx0aXN0cnV0e1xzdHJ1dH0lIGp1c3QgdXNlIHRoZSBzdGFuZGFyZCBsaW5lIHNwYWNpbmcKKyAgJQorICAlIENvbXB1dGUgXG11bHRpdGFibGVsaW5lc3BhY2UgKGlmIG5vdCBkZWZpbmVkIGJ5IHVzZXIpIGZvciB1c2UgaW4KKyAgJSBcbXVsdGl0YWJsZXBhcnNraXAgY2FsY3VsYXRpb24uICBXZSB1c2VkIGRlZmluZSBcbXVsdGlzdHJ1dCBiYXNlZCBvbgorICAlIHRoaXMsIGJ1dCAoaXJvbmljYWxseSkgdGhhdCBjYXVzZWQgdGhlIHNwYWNpbmcgdG8gYmUgb2ZmLgorICAlIFNlZSBidWctdGV4aW5mbyByZXBvcnQgZnJvbSBXZXJuZXIgTGVtYmVyZywgMzEgT2N0IDIwMDQgMTI6NTI6MjAgKzAxMDAuCitcaWZkaW1cbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKK1xzZXRib3gwPVx2Ym94e1h9XGdsb2JhbFxtdWx0aXRhYmxlbGluZXNwYWNlPVx0aGVcYmFzZWxpbmVza2lwCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZWxpbmVzcGFjZSBieS1caHQwCitcZmkKKyUlIFRlc3QgdG8gc2VlIGlmIHBhcnNraXAgaXMgbGFyZ2VyIHRoYW4gc3BhY2UgYmV0d2VlbiBsaW5lcyBvZgorJSUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUlICAgICAgICBJZiBzbywgc2V0IHRvIHNhbWUgZGltZW5zaW9uIGFzIG11bHRpdGFibGVsaW5lc3BhY2UuCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA+XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpJQorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPTBwdAorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZml9CisKKworXG1lc3NhZ2V7Y29uZGl0aW9uYWxzLH0KKworJSBAaWZ0ZXgsIEBpZm5vdGRvY2Jvb2ssIEBpZm5vdGh0bWwsIEBpZm5vdGluZm8sIEBpZm5vdHBsYWludGV4dCwKKyUgQGlmbm90eG1sIGFsd2F5cyBzdWNjZWVkLiAgVGhleSBjdXJyZW50bHkgZG8gbm90aGluZzsgd2UgZG9uJ3QKKyUgYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBjb25kaXRpb25hbHMgYXJlIHByb3Blcmx5IG5lc3RlZC4gIEJ1dCB3ZQorJSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWxzLCBzbyB0aGF0IEBlbmQgZG9lc24ndAorJSBhdHRlbXB0IHRvIGNsb3NlIGFuIGVudmlyb25tZW50IGdyb3VwLgorJQorXGRlZlxtYWtlY29uZCMxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgIzFcZW5kY3NuYW1lID0gXHJlbGF4CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUgPSAxCit9CitcbWFrZWNvbmR7aWZ0ZXh9CitcbWFrZWNvbmR7aWZub3Rkb2Nib29rfQorXG1ha2Vjb25ke2lmbm90aHRtbH0KK1xtYWtlY29uZHtpZm5vdGluZm99CitcbWFrZWNvbmR7aWZub3RwbGFpbnRleHR9CitcbWFrZWNvbmR7aWZub3R4bWx9CisKKyUgSWdub3JlIEBpZ25vcmUsIEBpZmh0bWwsIEBpZmluZm8sIGFuZCB0aGUgbGlrZS4KKyUKK1xkZWZcZGlyZW50cnl7XGRvaWdub3Jle2RpcmVudHJ5fX0KK1xkZWZcZG9jdW1lbnRkZXNjcmlwdGlvbntcZG9pZ25vcmV7ZG9jdW1lbnRkZXNjcmlwdGlvbn19CitcZGVmXGRvY2Jvb2t7XGRvaWdub3Jle2RvY2Jvb2t9fQorXGRlZlxodG1se1xkb2lnbm9yZXtodG1sfX0KK1xkZWZcaWZkb2Nib29re1xkb2lnbm9yZXtpZmRvY2Jvb2t9fQorXGRlZlxpZmh0bWx7XGRvaWdub3Jle2lmaHRtbH19CitcZGVmXGlmaW5mb3tcZG9pZ25vcmV7aWZpbmZvfX0KK1xkZWZcaWZub3R0ZXh7XGRvaWdub3Jle2lmbm90dGV4fX0KK1xkZWZcaWZwbGFpbnRleHR7XGRvaWdub3Jle2lmcGxhaW50ZXh0fX0KK1xkZWZcaWZ4bWx7XGRvaWdub3Jle2lmeG1sfX0KK1xkZWZcaWdub3Jle1xkb2lnbm9yZXtpZ25vcmV9fQorXGRlZlxtZW51e1xkb2lnbm9yZXttZW51fX0KK1xkZWZceG1se1xkb2lnbm9yZXt4bWx9fQorCislIElnbm9yZSB0ZXh0IHVudGlsIGEgbGluZSBgQGVuZCAjMScsIGtlZXBpbmcgdHJhY2sgb2YgbmVzdGVkIGNvbmRpdGlvbmFscy4KKyUKKyUgQSBjb3VudCB0byByZW1lbWJlciB0aGUgZGVwdGggb2YgbmVzdGluZy4KK1xuZXdjb3VudFxkb2lnbm9yZWNvdW50CisKK1xkZWZcZG9pZ25vcmUjMXtcYmVnaW5ncm91cAorICAlIFNjYW4gaW4gYGB2ZXJiYXRpbScnIG1vZGU6CisgIFxjYXRjb2RlYFxAID0gXG90aGVyCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyCisgIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgICUKKyAgJSBNYWtlIHN1cmUgdGhhdCBzcGFjZXMgdHVybiBpbnRvIHRva2VucyB0aGF0IG1hdGNoIHdoYXQgXGRvaWdub3JldGV4dCB3YW50cy4KKyAgXHNwYWNlaXNzcGFjZQorICAlCisgICUgQ291bnQgbnVtYmVyIG9mICMxJ3MgdGhhdCB3ZSd2ZSBzZWVuLgorICBcZG9pZ25vcmVjb3VudCA9IDAKKyAgJQorICAlIFN3YWxsb3cgdGV4dCB1bnRpbCB3ZSByZWFjaCB0aGUgbWF0Y2hpbmcgYEBlbmQgIzEnLgorICBcZG9kb2lnbm9yZXsjMX0lCit9CisKK3sgXGNhdGNvZGVgXz0xMSAlIFdlIHdhbnQgdG8gdXNlIFxfU1RPUF8gd2hpY2ggY2Fubm90IGFwcGVhciBpbiB0ZXhpbmZvIHNvdXJjZS4KKyAgXG9iZXlsaW5lcyAlCisgICUKKyAgXGdkZWZcZG9kb2lnbm9yZSMxeyUKKyAgICAlICMxIGNvbnRhaW5zIHRoZSBjb21tYW5kIG5hbWUgYXMgYSBzdHJpbmcsIGUuZy4sIGBpZmluZm8nLgorICAgICUKKyAgICAlIERlZmluZSBhIGNvbW1hbmQgdG8gZmluZCB0aGUgbmV4dCBgQGVuZCAjMScsIHdoaWNoIG11c3QgYmUgb24gYSBsaW5lCisgICAgJSBieSBpdHNlbGYuCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dCMjMV5eTUBlbmQgIzF7XGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMVxfU1RPUF99JQorICAgICUgQW5kIHRoaXMgY29tbWFuZCB0byBmaW5kIGFub3RoZXIgIzEgY29tbWFuZCwgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICAgJSBsaW5lLiAgKE90aGVyd2lzZSwgd2Ugd291bGQgY29uc2lkZXIgYSBsaW5lIGBAYyBAaWZzZXQnLCBmb3IKKyAgICAlIGV4YW1wbGUsIHRvIGNvdW50IGFzIGFuIEBpZnNldCBmb3IgbmVzdGluZy4pCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMSMjMlxfU1RPUF97XGRvaWdub3JleXl5eyMjMn1cX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgbm93IGV4cGFuZCB0aGF0IGNvbW1hbmQuCisgICAgXG9iZXlsaW5lcyAlCisgICAgXGRvaWdub3JldGV4dCBeXk0lCisgIH0lCit9CisKK1xkZWZcZG9pZ25vcmV5eXkjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eQkJCSUgTm90aGluZyBmb3VuZC4KKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0enp6CisgIFxlbHNlCQkJCQklIEZvdW5kIGEgbmVzdGVkIGNvbmRpdGlvbiwgLi4uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAxCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHl5eQkJJSAuLi4sIGxvb2sgZm9yIGFub3RoZXIuCisgICAgJSBJZiB3ZSdyZSBoZXJlLCAjMSBlbmRzIHdpdGggXl5NXGlmaW5mbyAoZm9yIGV4YW1wbGUpLgorICBcZmkKKyAgXG5leHQgIzElIHRoZSB0b2tlbiBcX1NUT1BfIGlzIHByZXNlbnQganVzdCBhZnRlciB0aGlzIG1hY3JvLgorfQorCislIFdlIGhhdmUgdG8gc3dhbGxvdyB0aGUgcmVtYWluaW5nICJcX1NUT1BfIi4KKyUKK1xkZWZcZG9pZ25vcmV0ZXh0enp6IzF7JQorICBcaWZudW1cZG9pZ25vcmVjb3VudCA9IDAJJSBXZSBoYXZlIGp1c3QgZm91bmQgdGhlIG91dGVybW9zdCBAZW5kLgorICAgIFxsZXRcbmV4dFxlbmRkb2lnbm9yZQorICBcZWxzZQkJCQklIFN0aWxsIGluc2lkZSBhIG5lc3RlZCBjb25kaXRpb24uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAtMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHQgICAgICAlIExvb2sgZm9yIHRoZSBuZXh0IEBlbmQuCisgIFxmaQorICBcbmV4dAorfQorCislIEZpbmlzaCBvZmYgaWdub3JlZCB0ZXh0LgorXGRlZlxlbmRkb2lnbm9yZXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfQorCisKKyUgQHNldCBWQVIgc2V0cyB0aGUgdmFyaWFibGUgVkFSIHRvIGFuIGVtcHR5IHZhbHVlLgorJSBAc2V0IFZBUiBSRVNULU9GLUxJTkUgc2V0cyBWQVIgdG8gdGhlIHZhbHVlIFJFU1QtT0YtTElORS4KKyUKKyUgU2luY2Ugd2Ugd2FudCB0byBzZXBhcmF0ZSBWQVIgZnJvbSBSRVNULU9GLUxJTkUgKHdoaWNoIG1pZ2h0IGJlCislIGVtcHR5KSwgd2UgY2FuJ3QganVzdCB1c2UgXHBhcnNlYXJnOyB3ZSBoYXZlIHRvIGluc2VydCBhIHNwYWNlIG9mIG91cgorJSBvd24gdG8gZGVsaW1pdCB0aGUgcmVzdCBvZiB0aGUgbGluZSwgYW5kIHRoZW4gdGFrZSBpdCBvdXQgYWdhaW4gaWYgd2UKKyUgZGlkbid0IG5lZWQgaXQuCislIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBccGFyc2Vhcmcgc2V0cyBcY2F0Y29kZWBcID0xMC4KKyUKK1xwYXJzZWFyZ2RlZlxzZXR7XHNldHl5eSMxIFxlbmRzZXR5eXl9CitcZGVmXHNldHl5eSMxICMyXGVuZHNldHl5eXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7IzJ9JQorICAgIFxlZGVmXG5leHR7XGdkZWZcbWFrZWNzbmFtZXtTRVQjMX19JQorICAgIFxpZnhcdGVtcFxlbXB0eQorICAgICAgXG5leHR7fSUKKyAgICBcZWxzZQorICAgICAgXHNldHp6eiMyXGVuZHNldHp6egorICAgIFxmaQorICB9JQorfQorJSBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIFxzZXR4eHggaW5zZXJ0ZWQuCitcZGVmXHNldHp6eiMxIFxlbmRzZXR6enp7XG5leHR7IzF9fQorCislIEBjbGVhciBWQVIgY2xlYXJzIChpLmUuLCB1bnNldHMpIHRoZSB2YXJpYWJsZSBWQVIuCislCitccGFyc2VhcmdkZWZcY2xlYXJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZT1ccmVsYXgKKyAgfSUKK30KKworJSBAdmFsdWV7Zm9vfSBnZXRzIHRoZSB0ZXh0IHNhdmVkIGluIHZhcmlhYmxlIGZvby4KK1xkZWZcdmFsdWV7XGJlZ2luZ3JvdXBcbWFrZXZhbHVlZXhwYW5kYWJsZVx2YWx1ZXh4eH0KK1xkZWZcdmFsdWV4eHgjMXtcZXhwYW5kYWJsZXZhbHVleyMxfVxlbmRncm91cH0KK3sKKyAgXGNhdGNvZGVgXC0gPSBcYWN0aXZlIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICAlCisgIFxnZGVmXG1ha2V2YWx1ZWV4cGFuZGFibGV7JQorICAgIFxsZXRcdmFsdWUgPSBcZXhwYW5kYWJsZXZhbHVlCisgICAgJSBXZSBkb24ndCB3YW50IHRoZXNlIGNoYXJhY3RlcnMgYWN0aXZlLCAuLi4KKyAgICBcY2F0Y29kZWBcLT1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyCisgICAgJSAuLi4sIGJ1dCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBhY3RpdmUgb25lcyBpbiB0aGUgYXJndW1lbnQgaWYKKyAgICAlIHdlJ3JlIGNhbGxlZCBmcm9tIEBjb2RlLCBhcyBAY29kZXtAdmFsdWV7Zm9vLWJhcl99fSwgdGhvdWdoLgorICAgICUgU28gXGxldCB0aGVtIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4KKyAgICBcbGV0LVxyZWFsZGFzaCBcbGV0X1xub3JtYWx1bmRlcnNjb3JlCisgIH0KK30KKworJSBXZSBoYXZlIHRoaXMgc3Vicm91dGluZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgYXQgbGVhc3Qgc29tZSBAdmFsdWUncworJSBwcm9wZXJseSBpbiBpbmRleGVzICh3ZSBjYWxsIFxtYWtldmFsdWVleHBhbmRhYmxlIGluIFxpbmRleGR1bW1pZXMpLgorJSBUaGUgY29tbWFuZCBoYXMgdG8gYmUgZnVsbHkgZXhwYW5kYWJsZSAoaWYgdGhlIHZhcmlhYmxlIGlzIHNldCksIHNpbmNlCislIHRoZSByZXN1bHQgd2luZHMgdXAgaW4gdGhlIGluZGV4IGZpbGUuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlCislIHZhcmlhYmxlJ3MgdmFsdWUgY29udGFpbnMgb3RoZXIgVGV4aW5mbyBjb21tYW5kcywgaXQncyBhbG1vc3QgY2VydGFpbgorJSBpdCB3aWxsIGZhaWwgKGFsdGhvdWdoIHBlcmhhcHMgd2UgY291bGQgZml4IHRoYXQgd2l0aCBzdWZmaWNpZW50IHdvcmsKKyUgdG8gZG8gYSBvbmUtbGV2ZWwgZXhwYW5zaW9uIG9uIHRoZSByZXN1bHQsIGluc3RlYWQgb2YgY29tcGxldGUpLgorJQorXGRlZlxleHBhbmRhYmxldmFsdWUjMXslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZVxyZWxheAorICAgIHtbTm8gdmFsdWUgZm9yIGBgIzEnJ119JQorICAgIFxtZXNzYWdle1ZhcmlhYmxlIGAjMScsIHVzZWQgaW4gQHZhbHVlLCBpcyBub3Qgc2V0Ln0lCisgIFxlbHNlCisgICAgXGNzbmFtZSBTRVQjMVxlbmRjc25hbWUKKyAgXGZpCit9CisKKyUgQGlmc2V0IFZBUiAuLi4gQGVuZCBpZnNldCByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgYmVlbiBkZWZpbmVkCislIHdpdGggQHNldC4KKyUKKyUgVG8gZ2V0IHNwZWNpYWwgdHJlYXRtZW50IG9mIGBAZW5kIGlmc2V0LCcgY2FsbCBcbWFrZW9uZCBhbmQgdGhlIHJlZGVmaW5lLgorJQorXG1ha2Vjb25ke2lmc2V0fQorXGRlZlxpZnNldHtccGFyc2Vhcmd7XGRvaWZzZXR7XGxldFxuZXh0PVxpZnNldGZhaWx9fX0KK1xkZWZcZG9pZnNldCMxIzJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGxldFxuZXh0PVxlbXB0eQorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMyXGVuZGNzbmFtZVxyZWxheAorICAgICAgIzElIElmIG5vdCBzZXQsIHJlZGVmaW5lIFxuZXh0LgorICAgIFxmaQorICAgIFxleHBhbmRhZnRlcgorICB9XG5leHQKK30KK1xkZWZcaWZzZXRmYWlse1xkb2lnbm9yZXtpZnNldH19CisKKyUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGlmY2xlYXIgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KKyUgZGVmaW5lZCB3aXRoIEBzZXQsIG9yIGhhcyBiZWVuIHVuZGVmaW5lZCB3aXRoIEBjbGVhci4KKyUKKyUgVGhlIGBcZWxzZScgaW5zaWRlIHRoZSBgXGRvaWZzZXQnIHBhcmFtZXRlciBpcyBhIHRyaWNrIHRvIHJldXNlIHRoZQorJSBhYm92ZSBjb2RlOiBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgZG8gbm90aGluZywgaWYgaXQgaXMgc2V0LAorJSB0aGVuIHJlZGVmaW5lIFxuZXh0IHRvIFxpZmNsZWFyZmFpbC4KKyUKK1xtYWtlY29uZHtpZmNsZWFyfQorXGRlZlxpZmNsZWFye1xwYXJzZWFyZ3tcZG9pZnNldHtcZWxzZSBcbGV0XG5leHQ9XGlmY2xlYXJmYWlsfX19CitcZGVmXGlmY2xlYXJmYWlse1xkb2lnbm9yZXtpZmNsZWFyfX0KKworJSBAZGlyY2F0ZWdvcnkgQ0FURUdPUlkgIC0tIHNwZWNpZnkgYSBjYXRlZ29yeSBvZiB0aGUgZGlyIGZpbGUKKyUgd2hpY2ggdGhpcyBmaWxlIHNob3VsZCBiZWxvbmcgdG8uICBJZ25vcmUgdGhpcyBpbiBUZVguCitcbGV0XGRpcmNhdGVnb3J5PVxjb21tZW50CisKKyUgQGRlZmluaW5mb2VuY2xvc2UuCitcbGV0XGRlZmluZm9lbmNsb3NlPVxjb21tZW50CisKKworXG1lc3NhZ2V7aW5kZXhpbmcsfQorJSBJbmRleCBnZW5lcmF0aW9uIGZhY2lsaXRpZXMKKworJSBEZWZpbmUgXG5ld3dyaXRlIHRvIGJlIGlkZW50aWNhbCB0byBwbGFpbiB0ZXgncyBcbmV3d3JpdGUKKyUgZXhjZXB0IG5vdCBcb3V0ZXIsIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhpbiBtYWNyb3MgYW5kIFxpZidzLgorXGVkZWZcbmV3d3JpdGV7XG1ha2Vjc25hbWV7cHRleG5ld3dyaXRlfX0KKworJSBcbmV3aW5kZXgge2Zvb30gZGVmaW5lcyBhbiBpbmRleCBuYW1lZCBmb28uCislIEl0IGF1dG9tYXRpY2FsbHkgZGVmaW5lcyBcZm9vaW5kZXggc3VjaCB0aGF0CislIFxmb29pbmRleCAuLi5yZXN0IG9mIGxpbmUuLi4gcHV0cyBhbiBlbnRyeSBpbiB0aGUgaW5kZXggZm9vLgorJSBJdCBhbHNvIGRlZmluZXMgXGZvb2luZGZpbGUgdG8gYmUgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgZm9yCislIHRoZSBmaWxlIHRoYXQgYWNjdW11bGF0ZXMgdGhpcyBpbmRleC4gIFRoZSBmaWxlJ3MgZXh0ZW5zaW9uIGlzIGZvby4KKyUgVGhlIG5hbWUgb2YgYW4gaW5kZXggc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyIGNoYXJhY3RlcnMgbG9uZworJSBmb3IgdGhlIHNha2Ugb2Ygdm1zLgorJQorXGRlZlxuZXdpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMSAlIE9wZW4gdGhlIGZpbGUKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUgICAgICUgRGVmaW5lIEAjMWluZGV4CisgICAgXG5vZXhwYW5kXGRvaW5kZXh7IzF9fQorfQorCislIEBkZWZpbmRleCBmb28gID09ICBcbmV3aW5kZXh7Zm9vfQorJQorXGRlZlxkZWZpbmRleHtccGFyc2VhcmdcbmV3aW5kZXh9CisKKyUgRGVmaW5lIEBkZWZjb2RlaW5kZXgsIGxpa2UgQGRlZmluZGV4IGV4Y2VwdCBwdXQgYWxsIGVudHJpZXMgaW4gQGNvZGUuCislCitcZGVmXGRlZmNvZGVpbmRleHtccGFyc2VhcmdcbmV3Y29kZWluZGV4fQorJQorXGRlZlxuZXdjb2RlaW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUKKyAgICBcbm9leHBhbmRcZG9jb2RlaW5kZXh7IzF9fSUKK30KKworCislIEBzeW5pbmRleCBmb28gYmFyICAgIG1ha2VzIGluZGV4IGZvbyBmZWVkIGludG8gaW5kZXggYmFyLgorJSBEbyB0aGlzIGluc3RlYWQgb2YgQGRlZmluZGV4IGZvbyBpZiB5b3UgZG9uJ3Qgd2FudCBpdCBhcyBhIHNlcGFyYXRlIGluZGV4LgorJQorJSBAc3luY29kZWluZGV4IGZvbyBiYXIgICBzaW1pbGFyLCBidXQgcHV0IGFsbCBlbnRyaWVzIG1hZGUgZm9yIGluZGV4IGZvbworJSBpbnNpZGUgQGNvZGUuCislCitcZGVmXHN5bmluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvaW5kZXh7IzF9eyMyfX0KK1xkZWZcc3luY29kZWluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvY29kZWluZGV4eyMxfXsjMn19CisKKyUgIzEgaXMgXGRvaW5kZXggb3IgXGRvY29kZWluZGV4LCAjMiB0aGUgaW5kZXggZ2V0dGluZyByZWRlZmluZWQgKGZvbyksCislICMzIHRoZSB0YXJnZXQgaW5kZXggKGJhcikuCitcZGVmXGRvc3luaW5kZXgjMSMyIzN7JQorICAlIE9ubHkgZG8gXGNsb3Nlb3V0IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIGl0LCBlbHNlIHdlJ2xsIGVuZCB1cAorICAlIGNsb3NpbmcgdGhlIHRhcmdldCBpbmRleC4KKyAgXGV4cGFuZGFmdGVyIFxpZnhcY3NuYW1lIGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSBcdW5kZWZpbmVkCisgICAgJSBUaGUgXGNsb3Nlb3V0IGhlbHBzIHJlZHVjZSB1bm5lY2Vzc2FyeSBvcGVuIGZpbGVzOyB0aGUgbGltaXQgb24gdGhlCisgICAgJSBBY29ybiBSSVNDIE9TIGlzIGEgbWVyZSAxNiBmaWxlcy4KKyAgICBcZXhwYW5kYWZ0ZXJcY2xvc2VvdXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lXGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSA9IDEKKyAgXGZpCisgICUgcmVkZWZpbmUgXGZvb2luZGZpbGU6CisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGVtcFxleHBhbmRhZnRlcj1cY3NuYW1lIzNpbmRmaWxlXGVuZGNzbmFtZQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWU9XHRlbXAKKyAgJSByZWRlZmluZSBcZm9vaW5kZXg6CisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMyaW5kZXhcZW5kY3NuYW1le1xub2V4cGFuZCMxeyMzfX0lCit9CisKKyUgRGVmaW5lIFxkb2luZGV4LCB0aGUgZHJpdmVyIGZvciBhbGwgXGZvb2luZGV4IG1hY3Jvcy4KKyUgQXJndW1lbnQgIzEgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsaW5nIFxmb29pbmRleCBtYWNybywKKyUgIGFuZCBpdCBpcyAiZm9vIiwgdGhlIG5hbWUgb2YgdGhlIGluZGV4LgorCislIFxkb2luZGV4IGp1c3QgdXNlcyBccGFyc2Vhcmc7IGl0IGNhbGxzIFxkb2luZCBmb3IgdGhlIGFjdHVhbCB3b3JrLgorJSBUaGlzIGlzIGJlY2F1c2UgXGRvaW5kIGlzIG1vcmUgdXNlZnVsIHRvIGNhbGwgZnJvbSBvdGhlciBtYWNyb3MuCisKKyUgVGhlcmUgaXMgYWxzbyBcZG9zdWJpbmQge2luZGV4fXt0b3BpY317c3VidG9waWN9CislIHdoaWNoIG1ha2VzIGFuIGVudHJ5IGluIGEgdHdvLWxldmVsIGluZGV4IHN1Y2ggYXMgdGhlIG9wZXJhdGlvbiBpbmRleC4KKworXGRlZlxkb2luZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVpbmRleGVyfQorXGRlZlxzaW5nbGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXsjMX19CisKKyUgbGlrZSB0aGUgcHJldmlvdXMgdHdvLCBidXQgdGhleSBwdXQgQGNvZGUgYXJvdW5kIHRoZSBhcmd1bWVudC4KK1xkZWZcZG9jb2RlaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWNvZGVpbmRleGVyfQorXGRlZlxzaW5nbGVjb2RlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17XGNvZGV7IzF9fX0KKworJSBUYWtlIGNhcmUgb2YgVGV4aW5mbyBjb21tYW5kcyB0aGF0IGNhbiBhcHBlYXIgaW4gYW4gaW5kZXggZW50cnkuCislIFNpbmNlIHRoZXJlIGFyZSBzb21lIGNvbW1hbmRzIHdlIHdhbnQgdG8gZXhwYW5kLCBhbmQgb3RoZXJzIHdlIGRvbid0LAorJSB3ZSBoYXZlIHRvIGxhYm9yaW91c2x5IHByZXZlbnQgZXhwYW5zaW9uIGZvciB0aG9zZSB0aGF0IHdlIGRvbid0LgorJQorXGRlZlxpbmRleGR1bW1pZXN7JQorICBcZXNjYXBlY2hhciA9IGBcXCAgICAgJSB1c2UgYmFja3NsYXNoIGluIG91dHB1dCBmaWxlcy4KKyAgXGRlZlxAe0B9JSBjaGFuZ2UgdG8gQEAgd2hlbiB3ZSBzd2l0Y2ggdG8gQCBhcyBlc2NhcGUgY2hhciBpbiBpbmRleCBmaWxlcy4KKyAgXGRlZlwge1xyZWFsYmFja3NsYXNoXHNwYWNlIH0lCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKK30KKworJSBGb3IgdGhlIGF1eCBhbmQgdG9jIGZpbGVzLCBAIGlzIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAgU28gd2Ugd2FudCB0bworJSByZWRlZmluZSBldmVyeXRoaW5nIHVzaW5nIEAgYXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKGluc3RlYWQgb2YKKyUgXHJlYWxiYWNrc2xhc2gsIHN0aWxsIHVzZWQgZm9yIGluZGV4IGZpbGVzKS4gIFdoZW4gZXZlcnl0aGluZyB1c2VzIEAsCislIHRoaXMgd2lsbCBiZSBzaW1wbGVyLgorJQorXGRlZlxhdGR1bW1pZXN7JQorICBcZGVmXEB7QEB9JQorICBcZGVmXCB7QCB9JQorICBcbGV0XHsgPSBcbGJyYWNlYXRjbWQKKyAgXGxldFx9ID0gXHJicmFjZWF0Y21kCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKK30KKworJSBDYWxsZWQgZnJvbSBcaW5kZXhkdW1taWVzIGFuZCBcYXRkdW1taWVzLgorJQorXGRlZlxjb21tb25kdW1taWVzeyUKKyAgJQorICAlIFxkZWZpbmVkdW1teXdvcmQgZGVmaW5lcyBcIzEgYXMgXHN0cmluZ1wjMVxzcGFjZSwgdGh1cyBlZmZlY3RpdmVseQorICAlIHByZXZlbnRpbmcgaXRzIGV4cGFuc2lvbi4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBjb250cm9sJSB3b3JkcywKKyAgJSBub3QgY29udHJvbCBsZXR0ZXJzLCBiZWNhdXNlIHRoZSBcc3BhY2Ugd291bGQgYmUgaW5jb3JyZWN0IGZvcgorICAlIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgY29udHJvbCB3b3JkCisgICUgZnJvbSB3aGF0ZXZlciBmb2xsb3dzLgorICAlCisgICUgRm9yIGNvbnRyb2wgbGV0dGVycywgd2UgaGF2ZSBcZGVmaW5lZHVtbXlsZXR0ZXIsIHdoaWNoIG9taXRzIHRoZQorICAlIHNwYWNlLgorICAlCisgICUgVGhlc2UgY2FuIGJlIHVzZWQgYm90aCBmb3IgY29udHJvbCB3b3JkcyB0aGF0IHRha2UgYW4gYXJndW1lbnQgYW5kCisgICUgdGhvc2UgdGhhdCBkbyBub3QuICBJZiBpdCBpcyBmb2xsb3dlZCBieSB7YXJnfSBpbiB0aGUgaW5wdXQsIHRoZW4KKyAgJSB0aGF0IHdpbGwgZHV0aWZ1bGx5IGdldCB3cml0dGVuIHRvIHRoZSBpbmRleCAob3Igd2hlcmV2ZXIpLgorICAlCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkICAjIzF7XGRlZiMjMXtcc3RyaW5nIyMxXHNwYWNlfX0lCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGRlZiMjMXtcc3RyaW5nIyMxfX0lCisgIFxsZXRcZGVmaW5lZHVtbXlhY2NlbnRcZGVmaW5lZHVtbXlsZXR0ZXIKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcXyUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcQUEKKyAgXGRlZmluZWR1bW15d29yZFxBRQorICBcZGVmaW5lZHVtbXl3b3JkXEwKKyAgXGRlZmluZWR1bW15d29yZFxPRQorICBcZGVmaW5lZHVtbXl3b3JkXE8KKyAgXGRlZmluZWR1bW15d29yZFxhYQorICBcZGVmaW5lZHVtbXl3b3JkXGFlCisgIFxkZWZpbmVkdW1teXdvcmRcbAorICBcZGVmaW5lZHVtbXl3b3JkXG9lCisgIFxkZWZpbmVkdW1teXdvcmRcbworICBcZGVmaW5lZHVtbXl3b3JkXHNzCisgIFxkZWZpbmVkdW1teXdvcmRcZXhjbGFtZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXHF1ZXN0aW9uZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZGYKKyAgXGRlZmluZWR1bW15d29yZFxvcmRtCisgICUKKyAgJSBBbHRob3VnaCB0aGVzZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGRuJ3Qgc2hvdyB1cCwgc29tZXRpbWVzIHRoZXkgZG8uCisgIFxkZWZpbmVkdW1teXdvcmRcYmYKKyAgXGRlZmluZWR1bW15d29yZFxndHIKKyAgXGRlZmluZWR1bW15d29yZFxoYXQKKyAgXGRlZmluZWR1bW15d29yZFxsZXNzCisgIFxkZWZpbmVkdW1teXdvcmRcc2YKKyAgXGRlZmluZWR1bW15d29yZFxzbAorICBcZGVmaW5lZHVtbXl3b3JkXHRjbG9zZQorICBcZGVmaW5lZHVtbXl3b3JkXHR0CisgICUKKyAgXGRlZmluZWR1bW15d29yZFxMYVRlWAorICBcZGVmaW5lZHVtbXl3b3JkXFRlWAorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcZGVmaW5lZHVtbXl3b3JkXGJ1bGxldAorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hCisgIFxkZWZpbmVkdW1teXdvcmRcY29weXJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRccmVnaXN0ZXJlZHN5bWJvbAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlbmRkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZXF1aXYKKyAgXGRlZmluZWR1bW15d29yZFxlcnJvcgorICBcZGVmaW5lZHVtbXl3b3JkXGV1cm8KKyAgXGRlZmluZWR1bW15d29yZFxleHBhbnNpb24KKyAgXGRlZmluZWR1bW15d29yZFxtaW51cworICBcZGVmaW5lZHVtbXl3b3JkXHBvdW5kcworICBcZGVmaW5lZHVtbXl3b3JkXHBvaW50CisgIFxkZWZpbmVkdW1teXdvcmRccHJpbnQKKyAgXGRlZmluZWR1bW15d29yZFxyZXN1bHQKKyAgJQorICAlIFdlIHdhbnQgdG8gZGlzYWJsZSBhbGwgbWFjcm9zIHNvIHRoYXQgdGhleSBhcmUgbm90IGV4cGFuZGVkIGJ5IFx3cml0ZS4KKyAgXG1hY3JvbGlzdAorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBIYW5kbGUgc29tZSBjYXNlcyBvZiBAdmFsdWUgLS0gd2hlcmUgaXQgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgJSAobm9uLWZ1bGx5LWV4cGFuZGFibGUpIGNvbW1hbmRzLgorICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorfQorCislIFxjb21tb25kdW1taWVzbm9mb250czogY29tbW9uIHRvIFxjb21tb25kdW1taWVzIGFuZCBcaW5kZXhub2ZvbnRzLgorJQorJSBCZXR0ZXIgaGF2ZSB0aGlzIHdpdGhvdXQgYWN0aXZlIGNoYXJzLgoreworICBcY2F0Y29kZWBcfj1cb3RoZXIKKyAgXGdkZWZcY29tbW9uZHVtbWllc25vZm9udHN7JQorICAgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICAgIFxkZWZpbmVkdW1teWxldHRlclwhJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwiJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwqJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwsJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwvJQorICAgIFxkZWZpbmVkdW1teWxldHRlclw6JQorICAgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICAgIFxkZWZpbmVkdW1teWxldHRlclw/JQorICAgIFxkZWZpbmVkdW1teWFjY2VudFxeJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFx+JQorICAgIFxkZWZpbmVkdW1teXdvcmRcdQorICAgIFxkZWZpbmVkdW1teXdvcmRcdgorICAgIFxkZWZpbmVkdW1teXdvcmRcSAorICAgIFxkZWZpbmVkdW1teXdvcmRcZG90YWNjZW50CisgICAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgICAgXGRlZmluZWR1bW15d29yZFx0aWVhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHViYXJhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGRvdGxlc3MKKyAgICAlCisgICAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgICAgXGRlZmluZWR1bW15d29yZFxiCisgICAgXGRlZmluZWR1bW15d29yZFxpCisgICAgXGRlZmluZWR1bW15d29yZFxyCisgICAgXGRlZmluZWR1bW15d29yZFxzYworICAgIFxkZWZpbmVkdW1teXdvcmRcdAorICAgICUKKyAgICAlIENvbW1hbmRzIHRoYXQgdGFrZSBhcmd1bWVudHMuCisgICAgXGRlZmluZWR1bW15d29yZFxhY3JvbnltCisgICAgXGRlZmluZWR1bW15d29yZFxjaXRlCisgICAgXGRlZmluZWR1bW15d29yZFxjb2RlCisgICAgXGRlZmluZWR1bW15d29yZFxjb21tYW5kCisgICAgXGRlZmluZWR1bW15d29yZFxkZm4KKyAgICBcZGVmaW5lZHVtbXl3b3JkXGVtcGgKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGVudgorICAgIFxkZWZpbmVkdW1teXdvcmRcZmlsZQorICAgIFxkZWZpbmVkdW1teXdvcmRca2JkCisgICAgXGRlZmluZWR1bW15d29yZFxrZXkKKyAgICBcZGVmaW5lZHVtbXl3b3JkXG1hdGgKKyAgICBcZGVmaW5lZHVtbXl3b3JkXG9wdGlvbgorICAgIFxkZWZpbmVkdW1teXdvcmRcc2FtcAorICAgIFxkZWZpbmVkdW1teXdvcmRcc3Ryb25nCisgICAgXGRlZmluZWR1bW15d29yZFx0aWUKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVyZWYKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVybAorICAgIFxkZWZpbmVkdW1teXdvcmRcdmFyCisgICAgXGRlZmluZWR1bW15d29yZFx2ZXJiCisgICAgXGRlZmluZWR1bW15d29yZFx3CisgIH0KK30KKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4bm9mb250c3slCisgICUgQWNjZW50IGNvbW1hbmRzIHNob3VsZCBiZWNvbWUgQGFzaXMuCisgIFxkZWZcZGVmaW5lZHVtbXlhY2NlbnQjIzF7XGxldCMjMVxhc2lzfSUKKyAgJSBXZSBjYW4ganVzdCBpZ25vcmUgb3RoZXIgY29udHJvbCBsZXR0ZXJzLgorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xsZXQjIzFcZW1wdHl9JQorICAlIEhvcGVmdWxseSwgYWxsIGNvbnRyb2wgd29yZHMgY2FuIGJlY29tZSBAYXNpcy4KKyAgXGxldFxkZWZpbmVkdW1teXdvcmRcZGVmaW5lZHVtbXlhY2NlbnQKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICAlIERvbid0IG5vLW9wIFx0dCwgc2luY2UgaXQgaXNuJ3QgYSB1c2VyLWxldmVsIGNvbW1hbmQKKyAgJSBhbmQgaXMgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGFjdGl2ZSBjaGFycyBsaWtlIDwsID4sIHwsIGV0Yy4KKyAgJSBMaWtld2lzZSB3aXRoIHRoZSBvdGhlciBwbGFpbiB0ZXggZm9udCBjb21tYW5kcy4KKyAgJVxsZXRcdHQ9XGFzaXMKKyAgJQorICBcZGVmXCB7IH0lCisgIFxkZWZcQHtAfSUKKyAgJSBob3cgdG8gaGFuZGxlIGJyYWNlcz8KKyAgXGRlZlxfe1xub3JtYWx1bmRlcnNjb3JlfSUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxMe0x9JQorICBcZGVmXE9Fe09FfSUKKyAgXGRlZlxPe099JQorICBcZGVmXGFhe2FhfSUKKyAgXGRlZlxhZXthZX0lCisgIFxkZWZcbHtsfSUKKyAgXGRlZlxvZXtvZX0lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxzc3tzc30lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgIFxkZWZcb3JkZnthfSUKKyAgXGRlZlxvcmRte299JQorICAlCisgIFxkZWZcTGFUZVh7TGFUZVh9JQorICBcZGVmXFRlWHtUZVh9JQorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAlIChUaGUgZm9sbG93aW5nIHt9IHdpbGwgZW5kIHVwIGluIHRoZSBzb3J0IHN0cmluZywgYnV0IHRoYXQncyBvay4pCisgIFxkZWZcYnVsbGV0e2J1bGxldH0lCisgIFxkZWZcY29tbWF7LH0lCisgIFxkZWZcY29weXJpZ2h0e2NvcHlyaWdodH0lCisgIFxkZWZccmVnaXN0ZXJlZHN5bWJvbHtSfSUKKyAgXGRlZlxkb3Rzey4uLn0lCisgIFxkZWZcZW5kZG90c3suLi59JQorICBcZGVmXGVxdWl2ez09fSUKKyAgXGRlZlxlcnJvcntlcnJvcn0lCisgIFxkZWZcZXVyb3tldXJvfSUKKyAgXGRlZlxleHBhbnNpb257PT0+fSUKKyAgXGRlZlxtaW51c3stfSUKKyAgXGRlZlxwb3VuZHN7cG91bmRzfSUKKyAgXGRlZlxwb2ludHsufSUKKyAgXGRlZlxwcmludHstfH0lCisgIFxkZWZccmVzdWx0ez0+fSUKKyAgJQorICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCisgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCisgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCisgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CisgICUgdGhhdCBzdGFydHMgd2l0aCBcLgorICAlIAorICAlIFNpbmNlIG1hY3JvIGludm9jYXRpb25zIGFyZSBmb2xsb3dlZCBieSBicmFjZXMsIHdlIGNhbiBqdXN0IHJlZGVmaW5lIHRoZW0KKyAgJSB0byB0YWtlIGEgc2luZ2xlIFRlWCBhcmd1bWVudC4gIFRoZSBjYXNlIG9mIGEgbWFjcm8gaW52b2NhdGlvbiB0aGF0CisgICUgZ29lcyB0byBlbmQtb2YtbGluZSBpcyBub3QgaGFuZGxlZC4KKyAgJSAKKyAgXG1hY3JvbGlzdAorfQorCitcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KK1xsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPworCislIE1vc3QgaW5kZXggZW50cmllcyBnbyB0aHJvdWdoIGhlcmUsIGJ1dCBcZG9zdWJpbmQgaXMgdGhlIGdlbmVyYWwgY2FzZS4KKyUgIzEgaXMgdGhlIGluZGV4IG5hbWUsICMyIGlzIHRoZSBlbnRyeSB0ZXh0LgorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBlbXB0eSBpZiBjYWxsZWQgZnJvbSBcZG9pbmQsIGFzIHdlIHVzdWFsbHkgYXJlICh0aGUgbWFpbiBleGNlcHRpb24KKyUgaXMgd2l0aCBtb3N0IGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseSkuCislCitcZGVmXGRvc3ViaW5kIzEjMiMzeyUKKyAgXGlmbGlua3MKKyAgeyUKKyAgICAlIFN0b3JlIHRoZSBtYWluIGluZGV4IGVudHJ5IHRleHQgKGluY2x1ZGluZyB0aGUgdGhpcmQgYXJnKS4KKyAgICBcdG9rczAgPSB7IzJ9JQorICAgICUgSWYgdGhpcmQgYXJnIGlzIHByZXNlbnQsIHByZWNlZGUgaXQgd2l0aCBhIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcaWZ2bW9kZQorICAgICAgXGRvc3ViaW5kc2FuaXRpemUKKyAgICBcZWxzZQorICAgICAgXGRvc3ViaW5kd3JpdGUKKyAgICBcZmkKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IGluIFx0b2tzMCB0byB0aGUgaW5kZXggZmlsZToKKyUKK1xkZWZcZG9zdWJpbmR3cml0ZXslCisgICUgUHV0IHRoZSBpbmRleCBlbnRyeSBpbiB0aGUgbWFyZ2luIGlmIGRlc2lyZWQuCisgIFxpZnhcU0VUbWFyZ2luaW5kZXhccmVsYXhcZWxzZQorICAgIFxpbnNlcnRcbWFyZ2lue1xoYm94e1x2cnVsZSBoZWlnaHQ4cHQgZGVwdGgzcHQgd2lkdGgwcHQgXHRoZVx0b2tzMH19JQorICBcZmkKKyAgJQorICAlIFJlbWVtYmVyLCB3ZSBhcmUgd2l0aGluIGEgZ3JvdXAuCisgIFxpbmRleGR1bW1pZXMgJSBNdXN0IGRvIHRoaXMgaGVyZSwgc2luY2UgXGJmLCBldGMgZXhwYW5kIGF0IHRoaXMgc3RhZ2UKKyAgXGRlZlxiYWNrc2xhc2hjdXJmb250e1xpbmRleGJhY2tzbGFzaH0lIFxpbmRleGJhY2tzbGFzaCBpc24ndCBkZWZpbmVkIG5vdworICAgICAgJSBzbyBpdCB3aWxsIGJlIG91dHB1dCBhcyBpczsgYW5kIGl0IHdpbGwgcHJpbnQgYXMgYmFja3NsYXNoLgorICAlCisgICUgUHJvY2VzcyB0aGUgaW5kZXggZW50cnkgd2l0aCBhbGwgZm9udCBjb21tYW5kcyB0dXJuZWQgb2ZmLCB0bworICAlIGdldCB0aGUgc3RyaW5nIHRvIHNvcnQgYnkuCisgIHtcaW5kZXhub2ZvbnRzCisgICBcZWRlZlx0ZW1we1x0aGVcdG9rczB9JSBuZWVkIGZ1bGwgZXhwYW5zaW9uCisgICBceGRlZlxpbmRleHNvcnR0bXB7XHRlbXB9JQorICB9JQorICAlCisgICUgU2V0IHVwIHRoZSBjb21wbGV0ZSBpbmRleCBlbnRyeSwgd2l0aCBib3RoIHRoZSBzb3J0IGtleSBhbmQKKyAgJSB0aGUgb3JpZ2luYWwgdGV4dCwgaW5jbHVkaW5nIGFueSBmb250IGNvbW1hbmRzLiAgV2Ugd3JpdGUKKyAgJSB0aHJlZSBhcmd1bWVudHMgdG8gXGVudHJ5IHRvIHRoZSAuPz8gZmlsZSAoZm91ciBpbiB0aGUKKyAgJSBzdWJlbnRyeSBjYXNlKSwgdGV4aW5kZXggcmVkdWNlcyB0byB0d28gd2hlbiB3cml0aW5nIHRoZSAuPz9zCisgICUgc29ydGVkIHJlc3VsdC4KKyAgXGVkZWZcdGVtcHslCisgICAgXHdyaXRlXHdyaXRldG97JQorICAgICAgXHN0cmluZ1xlbnRyeXtcaW5kZXhzb3J0dG1wfXtcbm9leHBhbmRcZm9saW99e1x0aGVcdG9rczB9fSUKKyAgfSUKKyAgXHRlbXAKK30KKworJSBUYWtlIGNhcmUgb2YgdW53YW50ZWQgcGFnZSBicmVha3M6CislCislIElmIGEgc2tpcCBpcyB0aGUgbGFzdCB0aGluZyBvbiB0aGUgbGlzdCBub3csIHByZXNlcnZlIGl0CislIGJ5IGJhY2tpbmcgdXAgYnkgXGxhc3Rza2lwLCBkb2luZyB0aGUgXHdyaXRlLCB0aGVuIGluc2VydGluZworJSB0aGUgc2tpcCBhZ2Fpbi4gIE90aGVyd2lzZSwgdGhlIHdoYXRzaXQgZ2VuZXJhdGVkIGJ5IHRoZQorJSBcd3JpdGUgd2lsbCBtYWtlIFxsYXN0c2tpcCB6ZXJvLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHNlcXVlbmNlcworJSBsaWtlIHRoaXM6CislIEBlbmQgZGVmdW4KKyUgQHRpbmRleCB3aGF0ZXZlcgorJSBAZGVmdW4gLi4uCislIHdpbGwgaGF2ZSBleHRyYSBzcGFjZSBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgXG1lZGJyZWFrIGluIHRoZQorJSBzdGFydCBvZiB0aGUgQGRlZnVuIHdvbid0IHNlZSB0aGUgc2tpcCBpbnNlcnRlZCBieSB0aGUgQGVuZCBvZgorJSB0aGUgcHJldmlvdXMgZGVmdW4uCislCislIEJ1dCBkb24ndCBkbyBhbnkgb2YgdGhpcyBpZiB3ZSdyZSBub3QgaW4gdmVydGljYWwgbW9kZS4gIFdlCislIGRvbid0IHdhbnQgdG8gZG8gYSBcdnNraXAgYW5kIHByZW1hdHVyZWx5IGVuZCBhIHBhcmFncmFwaC4KKyUKKyUgQXZvaWQgcGFnZSBicmVha3MgZHVlIHRvIHRoZXNlIGV4dHJhIHNraXBzLCB0b28uCislCislIEJ1dCB3YWl0LCB0aGVyZSBpcyBhIGNhdGNoIHRoZXJlOgorJSBXZSdsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgXGxhc3Rza2lwIGlzIHplcm8gc2tpcC4gIFxpZmRpbSBpcyBub3QKKyUgc3VmZmljaWVudCBmb3IgdGhpcyBwdXJwb3NlLCBhcyBpdCBpZ25vcmVzIHN0cmV0Y2ggYW5kIHNocmluayBwYXJ0cworJSBvZiB0aGUgc2tpcC4gIFRoZSBvbmx5IHdheSBzZWVtcyB0byBiZSB0byBjaGVjayB0aGUgdGV4dHVhbAorJSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2tpcC4KKyUKKyUgVGhlIGZvbGxvd2luZyBpcyBhbG1vc3QgbGlrZSBcZGVmXHplcm9za2lwbWFjcm97MC4wcHR9IGV4Y2VwdCB0aGF0CislIHRoZSBgYHAnJyBhbmQgYGB0JycgY2hhcmFjdGVycyBoYXZlIGNhdGNvZGUgXG90aGVyLCBub3QgMTEgKGxldHRlcikuCislCitcZWRlZlx6ZXJvc2tpcG1hY3Jve1xleHBhbmRhZnRlclx0aGVcY3NuYW1lIHpAc2tpcFxlbmRjc25hbWV9CislCislIC4uLiwgcmVhZHksIEdPOgorJQorXGRlZlxkb3N1YmluZHNhbml0aXpleyUKKyAgJSBcbGFzdHNraXAgYW5kIFxsYXN0cGVuYWx0eSBjYW5ub3QgYm90aCBiZSBub256ZXJvIHNpbXVsdGFuZW91c2x5LgorICBcc2tpcDAgPSBcbGFzdHNraXAKKyAgXGVkZWZcbGFzdHNraXBtYWNyb3tcdGhlXGxhc3Rza2lwfSUKKyAgXGNvdW50MjU1ID0gXGxhc3RwZW5hbHR5CisgICUKKyAgJSBJZiBcbGFzdHNraXAgaXMgbm9uemVybywgdGhhdCBtZWFucyB0aGUgbGFzdCBpdGVtIHdhcyBhCisgICUgc2tpcC4gIEFuZCBzaW5jZSBhIHNraXAgaXMgZGlzY2FyZGFibGUsIHRoYXQgbWVhbnMgdGhpcworICAlIC1cc2tpcDAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQorICAlIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCB0aGVyZWZvcmUgaXQgaXMgbm90IGEgcG90ZW50aWFsCisgICUgYnJlYWtwb2ludCwgdGhlcmVmb3JlIG5vIFxub2JyZWFrIG5lZWRlZC4KKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgXGVsc2UKKyAgICBcdnNraXAtXHNraXAwCisgIFxmaQorICAlCisgIFxkb3N1YmluZHdyaXRlCisgICUKKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgICAlIElmIFxsYXN0c2tpcCB3YXMgemVybywgcGVyaGFwcyB0aGUgbGFzdCBpdGVtIHdhcyBhIHBlbmFsdHksIGFuZAorICAgICUgcGVyaGFwcyBpdCB3YXMgPj0xMDAwMCwgZS5nLiwgYSBcbm9icmVhay4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgICUgdG8gcmUtaW5zZXJ0IHRoZSBzYW1lIHBlbmFsdHkgKHZhbHVlcyA+MTAwMDAgYXJlIHVzZWQgZm9yIHZhcmlvdXMKKyAgICAlIHNpZ25hbHMpOyBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIGFueQorICAgICUgZm9sbG93aW5nIGdsdWUgKHN1Y2ggYXMgYSBccGFyc2tpcCkgd291bGQgYmUgYSBicmVha3BvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgJSAKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVxjb3VudDI1NT45OTk5IFxwZW5hbHR5XGNvdW50MjU1IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcc2tpcDAKKyAgXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgJQorICAlIFNlZSBpZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LgorICAlIENoYW5nZSBjYXRjb2RlIG9mIEAgaGVyZSBzbyB0aGF0IGlmIHRoZSBpbmRleCBmaWxlIGNvbnRhaW5zCisgICUgXGluaXRpYWwge0B9CisgICUgYXMgaXRzIGZpcnN0IGxpbmUsIFRlWCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IG1pc21hdGNoZWQgYnJhY2VzCisgICUgKGJlY2F1c2UgaXQgdGhpbmtzIEB9IGlzIGEgY29udHJvbCBzZXF1ZW5jZSkuCisgIFxjYXRjb2RlYFxAID0gMTEKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLiMxcworICBcaWZlb2YgMQorICAgICUgXGVuZGRvdWJsZWNvbHVtbnMgZ2V0cyBjb25mdXNlZCBpZiB0aGVyZSBpcyBubyB0ZXh0IGluIHRoZSBpbmRleCwKKyAgICAlIGFuZCBpdCBsb3NlcyB0aGUgY2hhcHRlciB0aXRsZSBhbmQgdGhlIGF1eCBmaWxlIGVudHJpZXMgZm9yIHRoZQorICAgICUgaW5kZXguICBUaGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIHByb2JsZW0gaXMgdG8gbWFrZSBzdXJlCisgICAgJSB0aGVyZSBpcyBzb21lIHRleHQuCisgICAgXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50CisgIFxlbHNlCisgICAgJQorICAgICUgSWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgdGhlbiBcb3BlbmluIGxlYXZlcyBcaWZlb2YKKyAgICAlIGZhbHNlLiAgV2UgaGF2ZSB0byBtYWtlIFRlWCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgZnJvbSB0aGUgZmlsZSwgc28KKyAgICAlIGl0IGNhbiBkaXNjb3ZlciBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiBpdC4KKyAgICBccmVhZCAxIHRvIFx0ZW1wCisgICAgXGlmZW9mIDEKKyAgICAgIFxwdXR3b3JkSW5kZXhJc0VtcHR5CisgICAgXGVsc2UKKyAgICAgICUgSW5kZXggZmlsZXMgYXJlIGFsbW9zdCBUZXhpbmZvIHNvdXJjZSwgYnV0IHdlIHVzZSBcIGFzIHRoZSBlc2NhcGUKKyAgICAgICUgY2hhcmFjdGVyLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBALCBidXQgdGhhdCdzIHRvbyBiaWcgYSBjaGFuZ2UKKyAgICAgICUgdG8gbWFrZSByaWdodCBub3cuCisgICAgICBcZGVmXGluZGV4YmFja3NsYXNoe1xiYWNrc2xhc2hjdXJmb250fSUKKyAgICAgIFxjYXRjb2RlYFxcID0gMAorICAgICAgXGVzY2FwZWNoYXIgPSBgXFwKKyAgICAgIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgICAgIFxpbnB1dCBcam9ibmFtZS4jMXMKKyAgICAgIFxlbmRkb3VibGVjb2x1bW5zCisgICAgXGZpCisgIFxmaQorICBcY2xvc2VpbiAxCitcZW5kZ3JvdXB9CisKKyUgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBzb3J0ZWQgaW5kZXggZmlsZSBpdHNlbGYuCislIENoYW5nZSB0aGVtIHRvIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGluZGV4LgorCitcZGVmXGluaXRpYWwjMXt7JQorICAlIFNvbWUgbWlub3IgZm9udCBjaGFuZ2VzIGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHR0PVxzZWN0dCBcbGV0XHNmPVxzZWN0dAorICAlCisgICUgUmVtb3ZlIGFueSBnbHVlIHdlIG1heSBoYXZlLCB3ZSdsbCBiZSBpbnNlcnRpbmcgb3VyIG93bi4KKyAgXHJlbW92ZWxhc3Rza2lwCisgICUKKyAgJSBXZSBsaWtlIGJyZWFrcyBiZWZvcmUgdGhlIGluZGV4IGluaXRpYWxzLCBzbyBpbnNlcnQgYSBib251cy4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIDBwdCBwbHVzIDNcYmFzZWxpbmVza2lwCisgIFxwZW5hbHR5IDAKKyAgXHZza2lwIDBwdCBwbHVzIC0zXGJhc2VsaW5lc2tpcAorICAlCisgICUgVHlwZXNldCB0aGUgaW5pdGlhbC4gIE1ha2luZyB0aGlzIGFkZCB1cCB0byBhIHdob2xlIG51bWJlciBvZgorICAlIGJhc2VsaW5lc2tpcHMgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgdGhlIGRvdHMgbGluaW5nIHVwIGZyb20gY29sdW1uCisgICUgdG8gY29sdW1uLiAgSXQgc3RpbGwgd29uJ3Qgb2Z0ZW4gYmUgcGVyZmVjdCwgYmVjYXVzZSBvZiB0aGUgc3RyZXRjaAorICAlIHdlIG5lZWQgYmVmb3JlIGVhY2ggZW50cnksIGJ1dCBpdCdzIGJldHRlci4KKyAgJQorICAlIE5vIHNocmluayBiZWNhdXNlIGl0IGNvbmZ1c2VzIFxiYWxhbmNlY29sdW1ucy4KKyAgXHZza2lwIDEuNjdcYmFzZWxpbmVza2lwIHBsdXMgLjVcYmFzZWxpbmVza2lwCisgIFxsZWZ0bGluZXtcc2VjYmYgIzF9JQorICAlIERvIG91ciBiZXN0IG5vdCB0byBicmVhayBhZnRlciB0aGUgaW5pdGlhbC4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIC4zM1xiYXNlbGluZXNraXAgcGx1cyAuMVxiYXNlbGluZXNraXAKK319CisKKyUgXGVudHJ5IHR5cGVzZXRzIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgdGhlIHRleHQgKCMxKSwgZG90IGxlYWRlcnMsIGFuZAorJSB0aGVuIHBhZ2UgbnVtYmVyICgjMikgZmx1c2hlZCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgSXQgaXMgdXNlZCBmb3IgaW5kZXgKKyUgYW5kIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJpZXMuICBUaGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IFxsZWZ0c2tpcC4KKyUKKyUgQSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gd291bGQgc3RhcnQgbGlrZSB0aGlzOgorJQlcZGVmXGVudHJ5IzEjMnsuLi4KKyUgQnV0IHRoaXMgZnJvemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxkZWZcdGVtcGF7e1xybSB9fSUKKyAgICBcZGVmXHRlbXBieyMxfSUKKyAgICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICAgIFxlZGVmXHRlbXBke1x0ZW1wYn0lCisgICAgXGlmeFx0ZW1wY1x0ZW1wZAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBcZG90ZmlsbCBleGNlcHQgdGFrZXMgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUgJHtcaXQgLn0kIFxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CisKK1xkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KKworXG5ld3NraXBcc2Vjb25kYXJ5aW5kZW50IFxzZWNvbmRhcnlpbmRlbnQ9MC41Y20KK1xkZWZcc2Vjb25kYXJ5IzEjMnt7JQorICBccGFyZmlsbHNraXA9MGluCisgIFxwYXJza2lwPTBpbgorICBcaGFuZ2luZGVudD0xaW4KKyAgXGhhbmdhZnRlcj0xCisgIFxub2luZGVudFxoc2tpcFxzZWNvbmRhcnlpbmRlbnRcaGJveHsjMX1caW5kZXhkb3RmaWxsCisgIFxpZnBkZgorICAgIFxwZGZnZXR0b2tzIzIuXCBcdGhlXHRva3NBICUgVGhlIHBhZ2UgbnVtYmVyIGVuZHMgdGhlIHBhcmFncmFwaC4KKyAgXGVsc2UKKyAgICAjMgorICBcZmkKKyAgXHBhcgorfX0KKworJSBEZWZpbmUgdHdvLWNvbHVtbiBtb2RlLCB3aGljaCB3ZSB1c2UgdG8gdHlwZXNldCBpbmRleGVzLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2ssIHBhZ2UgNDE2LCB3aGljaCBpcyB0byBzYXksCislIHRoZSBtYW5tYWMudGV4IGZvcm1hdCB1c2VkIHRvIHByaW50IHRoZSBUZVhib29rIGl0c2VsZi4KK1xjYXRjb2RlYFxAPTExCisKK1xuZXdib3hccGFydGlhbHBhZ2UKK1xuZXdkaW1lblxkb3VibGVjb2x1bW5oc2l6ZQorCitcZGVmXGJlZ2luZG91YmxlY29sdW1uc3tcYmVnaW5ncm91cCAlIGVuZGVkIGJ5IFxlbmRkb3VibGVjb2x1bW5zCisgICUgR3JhYiBhbnkgc2luZ2xlLWNvbHVtbiBtYXRlcmlhbCBhYm92ZSB1cy4KKyAgXG91dHB1dCA9IHslCisgICAgJQorICAgICUgSGVyZSBpcyBhIHBvc3NpYmlsaXR5IG5vdCBmb3Jlc2VlbiBpbiBtYW5tYWM6IGlmIHdlIGFjY3VtdWxhdGUgYQorICAgICUgd2hvbGUgbG90IG9mIG1hdGVyaWFsLCB3ZSBtaWdodCBlbmQgdXAgY2FsbGluZyB0aGlzIFxvdXRwdXQKKyAgICAlIHJvdXRpbmUgdHdpY2UgaW4gYSByb3cgKHNlZSB0aGUgZG91YmxlY29sLWxvc2UgdGVzdCwgd2hpY2ggaXMKKyAgICAlIGVzc2VudGlhbGx5IGEgY291cGxlIG9mIGluZGV4ZXMgd2l0aCBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmKS4gIEluCisgICAgJSB0aGF0IGNhc2Ugd2UganVzdCBzaGlwIG91dCB3aGF0IGlzIGluIFxwYXJ0aWFscGFnZSB3aXRoIHRoZSBub3JtYWwKKyAgICAlIG91dHB1dCByb3V0aW5lLiAgR2VuZXJhbGx5LCBccGFydGlhbHBhZ2Ugd2lsbCBiZSBlbXB0eSB3aGVuIHRoaXMKKyAgICAlIHJ1bnMgYW5kIHRoaXMgd2lsbCBiZSBhIG5vLW9wLiAgU2VlIHRoZSBpbmRleHNwcmVhZC50ZXggdGVzdCBjYXNlLgorICAgIFxpZnZvaWRccGFydGlhbHBhZ2UgXGVsc2UKKyAgICAgIFxvbmVwYWdlb3V0e1xwYWdlY29udGVudHNccGFydGlhbHBhZ2V9JQorICAgIFxmaQorICAgICUKKyAgICBcZ2xvYmFsXHNldGJveFxwYXJ0aWFscGFnZSA9IFx2Ym94eyUKKyAgICAgICUgVW52Ym94IHRoZSBtYWluIG91dHB1dCBwYWdlLgorICAgICAgXHVudmJveFxQQUdFCisgICAgICBca2Vybi1cdG9wc2tpcCBca2VyblxiYXNlbGluZXNraXAKKyAgICB9JQorICB9JQorICBcZWplY3QgJSBydW4gdGhhdCBvdXRwdXQgcm91dGluZSB0byBzZXQgXHBhcnRpYWxwYWdlCisgICUKKyAgJSBVc2UgdGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIHN1YnNlcXVlbnQgcGFnZXMuCisgIFxvdXRwdXQgPSB7XGRvdWJsZWNvbHVtbm91dH0lCisgICUKKyAgJSBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLiAgV2UgY291bGQgZG8gdGhpcyBvbmNlIG91dHNpZGUgdGhpcworICAlIHJvdXRpbmUsIGluIGVhY2ggb2YgQHNtYWxsYm9vaywgQGFmb3VycGFwZXIsIGFuZCB0aGUgZGVmYXVsdCA4LjV4MTEKKyAgJSBmb3JtYXQsIGJ1dCB0aGVuIHdlIHJlcGVhdCB0aGUgc2FtZSBjb21wdXRhdGlvbi4gIFJlcGVhdGluZyBhIGNvdXBsZQorICAlIG9mIGFzc2lnbm1lbnRzIG9uY2UgcGVyIGluZGV4IGlzIGNsZWFybHkgbWVhbmluZ2xlc3MgZm9yIHRoZQorICAlIGV4ZWN1dGlvbiB0aW1lLCBzbyB3ZSBtYXkgYXMgd2VsbCBkbyBpdCBpbiBvbmUgcGxhY2UuCisgICUKKyAgJSBGaXJzdCB3ZSBoYWx2ZSB0aGUgbGluZSBsZW5ndGgsIGxlc3MgYSBsaXR0bGUgZm9yIHRoZSBndXR0ZXIgYmV0d2VlbgorICAlIHRoZSBjb2x1bW5zLiAgV2UgY29tcHV0ZSB0aGUgZ3V0dGVyIGJhc2VkIG9uIHRoZSBsaW5lIGxlbmd0aCwgc28gaXQKKyAgJSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgcGFwZXIgZm9ybWF0LiAgVGhlIG1hZ2ljIGNvbnN0YW50CisgICUgYmVsb3cgaXMgY2hvc2VuIHNvIHRoYXQgdGhlIGd1dHRlciBoYXMgdGhlIHNhbWUgdmFsdWUgKHdlbGwsICstPDFwdCkKKyAgJSBhcyBpdCBkaWQgd2hlbiB3ZSBoYXJkLWNvZGVkIGl0LgorICAlCisgICUgV2UgcHV0IHRoZSByZXN1bHQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlciwgXGRvdWJsZWNvbHVtaHNpemUsIHNvIHdlCisgICUgY2FuIHJlc3RvcmUgaXQgaW4gXHBhZ2Vzb2ZhciwgYWZ0ZXIgXGhzaXplIGl0c2VsZiBoYXMgKHBvdGVudGlhbGx5KQorICAlIGJlZW4gY2xvYmJlcmVkLgorICAlCisgIFxkb3VibGVjb2x1bW5oc2l6ZSA9IFxoc2l6ZQorICAgIFxhZHZhbmNlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IC0uMDQxNTRcaHNpemUKKyAgICBcZGl2aWRlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IDIKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgICUKKyAgJSBEb3VibGUgdGhlIFx2c2l6ZSBhcyB3ZWxsLiAgKFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSByZWdpc3RlciBoZXJlLAorICAlIHNpbmNlIG5vYm9keSBjbG9iYmVycyBcdnNpemUuKQorICBcdnNpemUgPSAyXHZzaXplCit9CisKKyUgVGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIGFsbCBkb3VibGUtY29sdW1uIHBhZ2VzIGV4Y2VwdAorJSB0aGUgbGFzdC4KKyUKK1xkZWZcZG91YmxlY29sdW1ub3V0eyUKKyAgXHNwbGl0dG9wc2tpcD1cdG9wc2tpcCBcc3BsaXRtYXhkZXB0aD1cbWF4ZGVwdGgKKyAgJSBHZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb2x1bW5zIC0tIHRoZSBub3JtYWwKKyAgJSAodW5kb3VibGVkKSBwYWdlIGhlaWdodCBtaW51cyBhbnkgbWF0ZXJpYWwgbGVmdCBvdmVyIGZyb20gdGhlCisgICUgcHJldmlvdXMgcGFnZS4KKyAgXGRpbWVuQCA9IFx2c2l6ZQorICBcZGl2aWRlXGRpbWVuQCBieSAyCisgIFxhZHZhbmNlXGRpbWVuQCBieSAtXGh0XHBhcnRpYWxwYWdlCisgICUKKyAgJSBib3gwIHdpbGwgYmUgdGhlIGxlZnQtaGFuZCBjb2x1bW4sIGJveDIgdGhlIHJpZ2h0LgorICBcc2V0Ym94MD1cdnNwbGl0MjU1IHRvXGRpbWVuQCBcc2V0Ym94Mj1cdnNwbGl0MjU1IHRvXGRpbWVuQAorICBcb25lcGFnZW91dFxwYWdlc29mYXIKKyAgXHVudmJveDI1NQorICBccGVuYWx0eVxvdXRwdXRwZW5hbHR5Cit9CislCislIFJlLW91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBwYWdlIC0tIGFueSBwcmV2aW91cyBtYXRlcmlhbCwKKyUgZm9sbG93ZWQgYnkgdGhlIHR3byBib3hlcyB3ZSBqdXN0IHNwbGl0LCBpbiBib3gwIGFuZCBib3gyLgorXGRlZlxwYWdlc29mYXJ7JQorICBcdW52Ym94XHBhcnRpYWxwYWdlCisgICUKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgIFx3ZDA9XGhzaXplIFx3ZDI9XGhzaXplCisgIFxoYm94IHRvXHBhZ2V3aWR0aHtcYm94MFxoZmlsXGJveDJ9JQorfQorJQorJSBBbGwgZG9uZSB3aXRoIGRvdWJsZSBjb2x1bW5zLgorXGRlZlxlbmRkb3VibGVjb2x1bW5zeyUKKyAgXG91dHB1dCA9IHslCisgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQorICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KKyAgICBcYmFsYW5jZWNvbHVtbnMKKyAgICAlCisgICAgJSBJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHRvbyBtdWNoIG1hdGVyaWFsIGZvciB0aGUgY3VycmVudCBwYWdlLAorICAgICUgdGhvdWdoLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIFxvdXRwdXQKKyAgICAlIGludm9jYXRpb24gZW5kcy4gIEhhdmluZyBjYWxsZWQgXGJhbGFuY2Vjb2x1bW5zIG9uY2UsIHdlIGRvIG5vdAorICAgICUgd2FudCB0byBjYWxsIGl0IGFnYWluLiAgVGhlcmVmb3JlLCByZXNldCBcb3V0cHV0IHRvIGl0cyBub3JtYWwKKyAgICAlIGRlZmluaXRpb24gcmlnaHQgYXdheS4gIChXZSBob3BlIFxiYWxhbmNlY29sdW1ucyB3aWxsIG5ldmVyIGJlCisgICAgJSBjYWxsZWQgb24gdG8gYmFsYW5jZSB0b28gbXVjaCBtYXRlcmlhbCwgYnV0IGlmIGl0IGlzLCB0aGlzIG1ha2VzCisgICAgJSB0aGUgb3V0cHV0IHNvbWV3aGF0IG1vcmUgcGFsYXRhYmxlLikKKyAgICBcZ2xvYmFsXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fSUKKyAgfSUKKyAgXGVqZWN0CisgIFxlbmRncm91cCAlIHN0YXJ0ZWQgaW4gXGJlZ2luZG91YmxlY29sdW1ucworICAlCisgICUgXHBhZ2Vnb2FsIHdhcyBzZXQgdG8gdGhlIGRvdWJsZWQgXHZzaXplIGFib3ZlLCBzaW5jZSB3ZSByZXN0YXJ0ZWQKKyAgJSB0aGUgY3VycmVudCBwYWdlLiAgV2UncmUgbm93IGJhY2sgdG8gbm9ybWFsIHNpbmdsZS1jb2x1bW4KKyAgJSB0eXBlc2V0dGluZywgc28gcmVzZXQgXHBhZ2Vnb2FsIHRvIHRoZSBub3JtYWwgXHZzaXplIChhZnRlciB0aGUKKyAgJSBcZW5kZ3JvdXAgd2hlcmUgXHZzaXplIGdvdCByZXN0b3JlZCkuCisgIFxwYWdlZ29hbCA9IFx2c2l6ZQorfQorJQorJSBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG91YmxlIGNvbHVtbiBtYXRlcmlhbC4KK1xkZWZcYmFsYW5jZWNvbHVtbnN7JQorICBcc2V0Ym94MCA9IFx2Ym94e1x1bnZib3gyNTV9JSBsaWtlIFxib3gyNTUgYnV0IG1vcmUgZWZmaWNpZW50LCBzZWUgcC4xMjAuCisgIFxkaW1lbkAgPSBcaHQwCisgIFxhZHZhbmNlXGRpbWVuQCBieSBcdG9wc2tpcAorICBcYWR2YW5jZVxkaW1lbkAgYnktXGJhc2VsaW5lc2tpcAorICBcZGl2aWRlXGRpbWVuQCBieSAyICUgdGFyZ2V0IHRvIHNwbGl0IHRvCisgICVkZWJ1Z1xtZXNzYWdle2ZpbmFsIDItY29sdW1uIG1hdGVyaWFsIGhlaWdodD1cdGhlXGh0MCwgdGFyZ2V0PVx0aGVcZGltZW5ALn0lCisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlIExvb3AgdW50aWwgd2UgZ2V0IGEgZGVjZW50IGJyZWFrcG9pbnQuCisgIHslCisgICAgXHZiYWRuZXNzID0gMTAwMDAKKyAgICBcbG9vcAorICAgICAgXGdsb2JhbFxzZXRib3gzID0gXGNvcHkwCisgICAgICBcZ2xvYmFsXHNldGJveDEgPSBcdnNwbGl0MyB0byBcZGltZW5ACisgICAgXGlmZGltXGh0Mz5cZGltZW5ACisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZGltZW5AIGJ5IDFwdAorICAgIFxyZXBlYXQKKyAgfSUKKyAgJWRlYnVnXG1lc3NhZ2V7c3BsaXQgdG8gXHRoZVxkaW1lbkAsIGNvbHVtbiBoZWlnaHRzOiBcdGhlXGh0MSwgXHRoZVxodDMufSUKKyAgXHNldGJveDA9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gxfSUKKyAgXHNldGJveDI9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gzfSUKKyAgJQorICBccGFnZXNvZmFyCit9CitcY2F0Y29kZWBcQCA9IFxvdGhlcgorCisKK1xtZXNzYWdle3NlY3Rpb25pbmcsfQorJSBDaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4KKworJSBcdW5udW1iZXJlZG5vIGlzIGFuIG94eW1vcm9uLCBvZiBjb3Vyc2UuICBCdXQgd2UgY291bnQgdGhlIHVubnVtYmVyZWQKKyUgc2VjdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhlbSB1bmFtYmlndW91c2x5IGluIHRoZSBwZGYKKyUgb3V0bGluZXMgYnkgdGhlaXIgInNlY3Rpb24gbnVtYmVyIi4gIFdlIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBjaGFwdGVyCislIG51bWJlcnMgYnkgc3RhcnRpbmcgdGhlbSBhdCAxMDAwMC4gIChJZiBhIGRvY3VtZW50IGV2ZXIgaGFzIDEwMDAwCislIGNoYXB0ZXJzLCB3ZSdyZSBpbiB0cm91YmxlIGFueXdheSwgSSdtIHN1cmUuKQorXG5ld2NvdW50XHVubnVtYmVyZWRubyBcdW5udW1iZXJlZG5vID0gMTAwMDAKK1xuZXdjb3VudFxjaGFwbm8KK1xuZXdjb3VudFxzZWNubyAgICAgICAgXHNlY25vPTAKK1xuZXdjb3VudFxzdWJzZWNubyAgICAgXHN1YnNlY25vPTAKK1xuZXdjb3VudFxzdWJzdWJzZWNubyAgXHN1YnN1YnNlY25vPTAKKworJSBUaGlzIGNvdW50ZXIgaXMgZnVubnkgc2luY2UgaXQgY291bnRzIHRocm91Z2ggY2hhcmNvZGVzIG9mIGxldHRlcnMgQSwgQiwgLi4uCitcbmV3Y291bnRcYXBwZW5kaXhubyAgXGFwcGVuZGl4bm8gPSBgXEAKKyUKKyUgXGRlZlxhcHBlbmRpeGxldHRlcntcY2hhclx0aGVcYXBwZW5kaXhub30KKyUgV2UgZG8gdGhlIGZvbGxvd2luZyB1Z2x5IGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgdGhlIGFib3ZlIHNpbXBsZQorJSBjb25zdHJ1Y3QgZm9yIHRoZSBzYWtlIG9mIHBkZnRleCwgd2hpY2ggbmVlZHMgdGhlIGFjdHVhbAorJSBsZXR0ZXIgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdHlwZXNldC4KKyUKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KKyUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCislIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCitcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc3NlY3Rpb257fQorCitcbmV3Y291bnRcYWJzc2VjbGV2ZWwgJSB1c2VkIHRvIGNhbGN1bGF0ZSBwcm9wZXIgaGVhZGluZyBsZXZlbAorXG5ld2NvdW50XHNlY2Jhc2Vcc2VjYmFzZT0wICUgQHJhaXNlc2VjdGlvbnMvQGxvd2Vyc2VjdGlvbnMgbW9kaWZ5IHRoaXMgY291bnQKKworJSBAcmFpc2VzZWN0aW9uczogdHJlYXQgQHNlY3Rpb24gYXMgY2hhcHRlciwgQHN1YnNlY3Rpb24gYXMgc2VjdGlvbiwgZXRjLgorXGRlZlxyYWlzZXNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IC0xfQorXGxldFx1cD1ccmFpc2VzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIEBsb3dlcnNlY3Rpb25zOiB0cmVhdCBAY2hhcHRlciBhcyBzZWN0aW9uLCBAc2VjdGlvbiBhcyBzdWJzZWN0aW9uLCBldGMuCitcZGVmXGxvd2Vyc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgMX0KK1xsZXRcZG93bj1cbG93ZXJzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIHdlIG9ubHkgaGF2ZSBzdWJzdWIuCitcY2hhcmRlZlxtYXhzZWNsZXZlbCA9IDMKKyUKKyUgQSBudW1iZXJlZCBzZWN0aW9uIHdpdGhpbiBhbiB1bm51bWJlcmVkIGNoYW5nZXMgdG8gdW5udW1iZXJlZCB0b28uCislIFRvIGFjaGl2ZSB0aGlzLCByZW1lbWJlciB0aGUgImJpZ2dlc3QiIHVubnVtLiBzZWMuIHdlIGFyZSBjdXJyZW50bHkgaW46CitcY2hhcmRlZlx1bm1sZXZlbCA9IFxtYXhzZWNsZXZlbAorJQorJSBUcmFjZSB3aGV0aGVyIHRoZSBjdXJyZW50IGNoYXB0ZXIgaXMgYW4gYXBwZW5kaXggb3Igbm90OgorJSBcY2hhcGhlYWR0eXBlIGlzICJOIiBvciAiQSIsIHVubnVtYmVyZWQgY2hhcHRlcnMgYXJlIGlnbm9yZWQuCitcZGVmXGNoYXBoZWFkdHlwZXtOfQorCislIENob29zZSBhIGhlYWRpbmcgbWFjcm8KKyUgIzEgaXMgaGVhZGluZyB0eXBlCislICMyIGlzIGhlYWRpbmcgbGV2ZWwKKyUgIzMgaXMgdGV4dCBmb3IgaGVhZGluZworXGRlZlxnZW5oZWFkIzEjMiMzeyUKKyAgJSBDb21wdXRlIHRoZSBhYnMuIHNlYy4gbGV2ZWw6CisgIFxhYnNzZWNsZXZlbD0jMgorICBcYWR2YW5jZVxhYnNzZWNsZXZlbCBieSBcc2VjYmFzZQorICAlIE1ha2Ugc3VyZSBcYWJzc2VjbGV2ZWwgZG9lc24ndCBmYWxsIG91dHNpZGUgdGhlIHJhbmdlOgorICBcaWZudW0gXGFic3NlY2xldmVsIDwgMAorICAgIFxhYnNzZWNsZXZlbCA9IDAKKyAgXGVsc2UKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gMworICAgICAgXGFic3NlY2xldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBUaGUgaGVhZGluZyB0eXBlOgorICBcZGVmXGhlYWR0eXBleyMxfSUKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCBcdW5tbGV2ZWwKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gXGFic3NlY2xldmVsCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBDaGVjayBmb3IgYXBwZW5kaXggc2VjdGlvbnM6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA9IDAKKyAgICAgIFxlZGVmXGNoYXBoZWFkdHlwZXtcaGVhZHR5cGV9JQorICAgIFxlbHNlCisgICAgICBcaWYgXGhlYWR0eXBlIEFcaWYgXGNoYXBoZWFkdHlwZSBOJQorCVxlcnJtZXNzYWdle0BhcHBlbmRpeC4uLiB3aXRoaW4gYSBub24tYXBwZW5kaXggY2hhcHRlcn0lCisgICAgICBcZmlcZmkKKyAgICBcZmkKKyAgICAlIENoZWNrIGZvciBudW1iZXJlZCB3aXRoaW4gdW5udW1iZXJlZDoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gXHVubWxldmVsCisgICAgICBcZGVmXGhlYWR0eXBle1V9JQorICAgIFxlbHNlCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgTm93IHByaW50IHRoZSBoZWFkaW5nOgorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCVx1bm51bWJlcmVkenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWYgXGhlYWR0eXBlIEElCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcYXBwZW5kaXh6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHNlY3Rpb256enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcY2hhcHRlcnp6ensjM30lCisgICAgICBcb3IgXHNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIGFuIGludGVyZmFjZToKK1xkZWZcbnVtaGVhZHtcZ2VuaGVhZCBOfQorXGRlZlxhcHBoZWFke1xnZW5oZWFkIEF9CitcZGVmXHVubm1oZWFke1xnZW5oZWFkIFV9CisKKyUgQGNoYXB0ZXIsIEBhcHBlbmRpeCwgQHVubnVtYmVyZWQuICBJbmNyZW1lbnQgdG9wLWxldmVsIGNvdW50ZXIsIHJlc2V0CislIGFsbCBsb3dlci1sZXZlbCBzZWN0aW9uaW5nIGNvdW50ZXJzIHRvIHplcm8uCislCislIEFsc28gc2V0IFxjaGFwbGV2ZWxwcmVmaXgsIHdoaWNoIHdlIHByZXBlbmQgdG8gQGZsb2F0IHNlcXVlbmNlIG51bWJlcnMKKyUgKGUuZy4sIGZpZ3VyZXMpLCBxLnYuICBCeSBkZWZhdWx0IChiZWZvcmUgYW55IGNoYXB0ZXIpLCB0aGF0IGlzIGVtcHR5LgorXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyUKK1xvdXRlclxwYXJzZWFyZ2RlZlxjaGFwdGVye1xudW1oZWFkMHsjMX19ICUgbm9ybWFsbHkgbnVtaGVhZDAgY2FsbHMgY2hhcHRlcnp6egorXGRlZlxjaGFwdGVyenp6IzF7JQorICAlIHNlY3Rpb24gcmVzZXR0aW5nIGlzIFxnbG9iYWwgaW4gY2FzZSB0aGUgY2hhcHRlciBpcyBpbiBhIGdyb3VwLCBzdWNoCisgICUgYXMgYW4gQGluY2x1ZGUgZmlsZS4KKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcY2hhcG5vIGJ5IDEKKyAgJQorICAlIFVzZWQgZm9yIFxmbG9hdC4KKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1x0aGVcY2hhcG5vLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXG1lc3NhZ2V7XHB1dHdvcmRDaGFwdGVyXHNwYWNlIFx0aGVcY2hhcG5vfSUKKyAgJQorICAlIFdyaXRlIHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgXGNoYXBtYWNyb3sjMX17WW51bWJlcmVkfXtcdGhlXGNoYXBub30lCisgICUKKyAgJSBTbyBAc2VjdGlvbiBhbmQgdGhlIGxpa2UgYXJlIG51bWJlcmVkIHVuZGVybmVhdGggdGhpcyBjaGFwdGVyLgorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXh7XGFwcGhlYWQweyMxfX0gJSBub3JtYWxseSBhcHBoZWFkMCBjYWxscyBhcHBlbmRpeHp6egorXGRlZlxhcHBlbmRpeHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcYXBwZW5kaXhsZXR0ZXIufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcZGVmXGFwcGVuZGl4bnVte1xwdXR3b3JkQXBwZW5kaXhcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKKyAgXG1lc3NhZ2V7XGFwcGVuZGl4bnVtfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxhcHBlbmRpeHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWR7XHVubm1oZWFkMHsjMX19ICUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6enoKK1xkZWZcdW5udW1iZXJlZHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcdW5udW1iZXJlZG5vIGJ5IDEKKyAgJQorICAlIFNpbmNlIGFuIHVubnVtYmVyZWQgaGFzIG5vIG51bWJlciwgbm8gcHJlZml4IGZvciBmaWd1cmVzLgorICBcZ2xvYmFsXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICAlIFRoaXMgdXNlZCB0byBiZSBzaW1wbHkgXG1lc3NhZ2V7IzF9LCBidXQgVGVYIGZ1bGx5IGV4cGFuZHMgdGhlCisgICUgYXJndW1lbnQgdG8gXG1lc3NhZ2UuICBUaGVyZWZvcmUsIGlmICMxIGNvbnRhaW5lZCBALWNvbW1hbmRzLCBUZVgKKyAgJSBleHBhbmRlZCB0aGVtLiAgRm9yIGV4YW1wbGUsIGluIGBAdW5udW1iZXJlZCBUaGUgQGNpdGV7Qm9va30nLCBUZVgKKyAgJSBleHBhbmRlZCBAY2l0ZSAod2hpY2ggdHVybnMgb3V0IHRvIGNhdXNlIGVycm9ycyBiZWNhdXNlIFxjaXRlIGlzIG1lYW50CisgICUgdG8gYmUgZXhlY3V0ZWQsIG5vdCBleHBhbmRlZCkuCisgICUKKyAgJSBBbnl3YXksIHdlIGRvbid0IHdhbnQgdGhlIGZ1bGx5LWV4cGFuZGVkIGRlZmluaXRpb24gb2YgQGNpdGUgdG8gYXBwZWFyCisgICUgYXMgYSByZXN1bHQgb2YgdGhlIFxtZXNzYWdlLCB3ZSBqdXN0IHdhbnQgYEBjaXRlJyBpdHNlbGYuICBXZSB1c2UKKyAgJSBcdGhlPHRva3MgcmVnaXN0ZXI+IHRvIGFjaGlldmUgdGhpczogVGVYIGV4cGFuZHMgXHRoZTx0b2tzPiBvbmx5IG9uY2UsCisgICUgc2ltcGx5IHlpZWxkaW5nIHRoZSBjb250ZW50cyBvZiA8dG9rcyByZWdpc3Rlcj4uICAoV2UgYWxzbyBkbyB0aGlzIGZvcgorICAlIHRoZSB0b2MgZW50cmllcy4pCisgIFx0b2tzMCA9IHsjMX0lCisgIFxtZXNzYWdleyhcdGhlXHRva3MwKX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXHVubnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnN1YnNlYworfQorCislIEBjZW50ZXJjaGFwIGlzIGxpa2UgQHVubnVtYmVyZWQsIGJ1dCB0aGUgaGVhZGluZyBpcyBjZW50ZXJlZC4KK1xvdXRlclxwYXJzZWFyZ2RlZlxjZW50ZXJjaGFweyUKKyAgJSBXZWxsLCB3ZSBjb3VsZCBkbyB0aGUgZm9sbG93aW5nIGluIGEgZ3JvdXAsIGJ1dCB0aGF0IHdvdWxkIGJyZWFrCisgICUgYW4gYXNzdW1wdGlvbiB0aGF0IFxjaGFwbWFjcm8gaXMgY2FsbGVkIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwuCisgICUgVGh1cyB3ZSBhcmUgc2FmZXIgdGhpcyB3YXk6CQktLWthc2FsLCAyNGZlYjA0CisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXGNlbnRlcnBhcmFtZXRlcnMKKyAgXHVubm1oZWFkMHsjMX0lCisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4Cit9CisKKyUgQHRvcCBpcyBsaWtlIEB1bm51bWJlcmVkLgorXGxldFx0b3BcdW5udW1iZXJlZAorCislIFNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc2Vje1xudW1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgc2Vjenp6CitcZGVmXHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHNlY3Rpb257XGFwcGhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHNlY3Rpb256enoKK1xkZWZcYXBwZW5kaXhzZWN0aW9uenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNub30lCit9CitcbGV0XGFwcGVuZGl4c2VjXGFwcGVuZGl4c2VjdGlvbgorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHNlY3tcdW5ubWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc2Vjenp6CitcZGVmXHVubnVtYmVyZWRzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNub30lCit9CisKKyUgU3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzZWN7XGFwcGhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnNlY3tcdW5ubWhlYWQyeyMxfX0gJW5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworJSBTdWJzdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnN1YnNlY3tcbnVtaGVhZDN7IzF9fSAlIG5vcm1hbGx5IG51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic3Vic2Vje1xhcHBoZWFkM3sjMX19ICUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN7XHVubm1oZWFkM3sjMX19ICVub3JtYWxseSB1bm51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGNvbnRyb2wgd2hhdCB0aGUgc2VjdGlvbiBjb21tYW5kcyBkbywgYWNjb3JkaW5nCislIHRvIHdoYXQga2luZCBvZiBjaGFwdGVyIHdlIGFyZSBpbiAob3JkaW5hcnksIGFwcGVuZGl4LCBvciB1bm51bWJlcmVkKS4KKyUgRGVmaW5lIHRoZW0gYnkgZGVmYXVsdCBmb3IgYSBudW1iZXJlZCBjaGFwdGVyLgorXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCitcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKK1xsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworCislIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKKworJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6CislICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKKyUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KKyUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQorJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgorJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCislICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KKworCitcZGVmXG1ham9yaGVhZGluZ3slCisgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCisgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egorfQorCitcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQorXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKKyAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXHBhcnNlYXJnZGVmXGhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3Vic3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworJSUlIERlZmluZSBwbGFpbiBjaGFwdGVyIHN0YXJ0cywgYW5kIHBhZ2Ugb24vb2ZmIHN3aXRjaGluZyBmb3IgaXQKKyUgUGFyYW1ldGVyIGNvbnRyb2xsaW5nIHNraXAgYmVmb3JlIGNoYXB0ZXIgaGVhZGluZ3MgKGlmIG5lZWRlZCkKKworXG5ld3NraXBcY2hhcGhlYWRpbmdza2lwCisKK1xkZWZcY2hhcGJyZWFre1xkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXAgey00MDAwfX0KK1xkZWZcY2hhcHBhZ2Vye1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KK1xkZWZcY2hhcG9kZHBhZ2V7XGNoYXBwYWdlciBcaWZvZGRccGFnZW5vIFxlbHNlIFxoYm94IHRvIDBwdHt9IFxjaGFwcGFnZXJcZml9CisKK1xkZWZcc2V0Y2hhcHRlcm5ld3BhZ2UgIzEge1xjc25hbWUgQ0hBUFBBRyMxXGVuZGNzbmFtZX0KKworXGRlZlxDSEFQUEFHb2ZmeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBicmVhaworXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcn0KKworXGRlZlxDSEFQUEFHb257JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU3NpbmdsZX19CisKK1xkZWZcQ0hBUFBBR29kZHslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfX0KKworXENIQVBQQUdvbgorCislIENoYXB0ZXIgb3BlbmluZy4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIHR5cGUgKFludW1iZXJlZCwgWW5vdGhpbmcsCislIFlhcHBlbmRpeCwgWW9taXRmcm9tdG9jKSwgIzMgdGhlIGNoYXB0ZXIgbnVtYmVyLgorJQorJSBUbyB0ZXN0IGFnYWluc3Qgb3VyIGFyZ3VtZW50LgorXGRlZlxZbm90aGluZ2tleXdvcmR7WW5vdGhpbmd9CitcZGVmXFlvbWl0ZnJvbXRvY2tleXdvcmR7WW9taXRmcm9tdG9jfQorXGRlZlxZYXBwZW5kaXhrZXl3b3Jke1lhcHBlbmRpeH0KKyUKK1xkZWZcY2hhcG1hY3JvIzEjMiMzeyUKKyAgXHBjaGFwc2VwbWFjcm8KKyAgeyUKKyAgICBcY2hhcGZvbnRzIFxybQorICAgICUKKyAgICAlIEhhdmUgdG8gZGVmaW5lIFx0aGlzc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBcZG9ub2RlcmVmLCBiZWNhdXNlIHRoZQorICAgICUgeHJlZiBjb2RlIGV2ZW50dWFsbHkgdXNlcyBpdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBoYXMgdG8gYmUgY2FsbGVkCisgICAgJSBhZnRlciBccGNoYXBzZXBtYWNybywgb3IgdGhlIGhlYWRsaW5lIHdpbGwgY2hhbmdlIHRvbyBzb29uLgorICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZ2RlZlx0aGlzY2hhcHRlcm5hbWV7IzF9JQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzZXBhcmF0aW5nIHNwYWNlIGlmIHdlIGhhdmUgYSBjaGFwdGVyL2FwcGVuZGl4CisgICAgJSBudW1iZXIsIGFuZCBkb24ndCBwcmludCB0aGUgdW5udW1iZXJlZCBgYG51bWJlcicnLgorICAgIFxkZWZcdGVtcHR5cGV7IzJ9JQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5uY2hhcH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUgY29udGVudHMgbGlrZSB1bm51bWJlcmVkLCBidXQgbm8gdG9jIGVudHJ5CisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnt9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgJSBXZSBkb24ndCBzdWJzdGl0dXRlIHRoZSBhY3R1YWwgY2hhcHRlciBuYW1lIGludG8gXHRoaXNjaGFwdGVyCisgICAgICAlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpdHMgbWFjcm9zIGV2YWx1YXRlZCBub3cuICBBbmQgd2UgZG9uJ3QKKyAgICAgICUgdXNlIFx0aGlzc2VjdGlvbiBiZWNhdXNlIHRoYXQgY2hhbmdlcyB3aXRoIGVhY2ggc2VjdGlvbi4KKyAgICAgICUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQXBwZW5kaXh7fSBcYXBwZW5kaXhsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW1jaGFwfSUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQ2hhcHRlcnt9IFx0aGVcY2hhcG5vOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSBmb3IgdGhpcyBjaGFwdGVyLiAgTXVzdCBjb21lIGJlZm9yZSB0aGUKKyAgICAlIFxkb25vZGVyZWYsIGJlY2F1c2Ugd2UgaW5jbHVkZSB0aGUgY3VycmVudCBub2RlIG5hbWUgaW4gdGhlIHRvYworICAgICUgZW50cnksIGFuZCBcZG9ub2RlcmVmIHJlc2V0cyBpdCB0byBlbXB0eS4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZX17IzF9eyMzfSUKKyAgICAlCisgICAgJSBGb3IgcGRmdGV4LCB3ZSBoYXZlIHRvIHdyaXRlIG91dCB0aGUgbm9kZSBkZWZpbml0aW9uIChha2EsIG1ha2UKKyAgICAlIHRoZSBwZGZkZXN0KSBhZnRlciBhbnkgcGFnZSBicmVhaywgYnV0IGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgaGFzCisgICAgJSBiZWVuIHR5cGVzZXQuICBJZiB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBwZGYgb3V0bGluZSBpcyBhZnRlciB0aGUKKyAgICAlIHRleHQsIHRoZW4ganVtcGluZyBmcm9tIHRoZSBvdXRsaW5lIG1heSB3aW5kIHVwIHdpdGggdGhlIHRleHQgbm90CisgICAgJSBiZWluZyB2aXNpYmxlLCBmb3IgaW5zdGFuY2UgdW5kZXIgaGlnaCBtYWduaWZpY2F0aW9uLgorICAgIFxkb25vZGVyZWZ7IzJ9JQorICAgICUKKyAgICAlIFR5cGVzZXQgdGhlIGFjdHVhbCBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKKyAgICAgICAgICBcdW5oYm94MCAjMVxwYXJ9JQorICB9JQorICBcbm9icmVha1xiaWdza2lwICUgbm8gcGFnZSBicmVhayBhZnRlciBhIGNoYXB0ZXIgdGl0bGUKKyAgXG5vYnJlYWsKK30KKworJSBAY2VudGVyY2hhcCAtLSBjZW50ZXJlZCBhbmQgdW5udW1iZXJlZC4KK1xsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4CitcZGVmXGNlbnRlcnBhcmFtZXRlcnN7JQorICBcYWR2YW5jZVxyaWdodHNraXAgYnkgM1xyaWdodHNraXAKKyAgXGxlZnRza2lwID0gXHJpZ2h0c2tpcAorICBccGFyZmlsbHNraXAgPSAwcHQKK30KKworCislIEkgZG9uJ3QgdGhpbmsgdGhpcyBjaGFwdGVyIHN0eWxlIGlzIHN1cHBvcnRlZCBhbnkgbW9yZSwgc28gSSdtIG5vdAorJSB1cGRhdGluZyBpdCB3aXRoIHRoZSBuZXcgbm9kZXJlZiBzdHVmZi4gIFdlJ2xsIHNlZS4gIC0ta2FybCwgMTFhdWcwMy4KKyUKK1xkZWZcc2V0Y2hhcHRlcnN0eWxlICMxIHtcY3NuYW1lIENIQVBGIzFcZW5kY3NuYW1lfQorJQorXGRlZlx1bm5jaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAorICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybSAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxDSEFQRm9wZW57JQorICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KKyAgXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUKK1xuZXdza2lwXHNlY2hlYWRpbmdza2lwCitcZGVmXHNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc2VjaGVhZGluZ3NraXB7LTEwMDB9fQorCislIFN1YnNlY3Rpb24gdGl0bGVzLgorXG5ld3NraXBcc3Vic2VjaGVhZGluZ3NraXAKK1xkZWZcc3Vic2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzdWJzZWNoZWFkaW5nc2tpcHstNTAwfX0KKworJSBTdWJzdWJzZWN0aW9uIHRpdGxlcy4KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ3NraXB7XHN1YnNlY2hlYWRpbmdza2lwfQorXGRlZlxzdWJzdWJzZWNoZWFkaW5nYnJlYWt7XHN1YnNlY2hlYWRpbmdicmVha30KKworCislIFByaW50IGFueSBzaXplLCBhbnkgdHlwZSwgc2VjdGlvbiB0aXRsZS4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIGxldmVsIChzZWMvc3Vic2VjL3N1YnN1YnNlYyksICMzIGlzCislIHRoZSBzZWN0aW9uIHR5cGUgZm9yIHhyZWZzIChZbnVtYmVyZWQsIFlub3RoaW5nLCBZYXBwZW5kaXgpLCAjNCBpcyB0aGUKKyUgc2VjdGlvbiBudW1iZXIuCislCitcZGVmXHNlY3Rpb25oZWFkaW5nIzEjMiMzIzR7JQorICB7JQorICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCisgICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICAlCisgICAgJSBJbnNlcnQgc3BhY2UgYWJvdmUgdGhlIGhlYWRpbmcuCisgICAgXGNzbmFtZSAjMmhlYWRpbmdicmVha1xlbmRjc25hbWUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGRlZlxzZWN0aW9ubGV2ZWx7IzJ9JQorICAgIFxkZWZcdGVtcHR5cGV7IzN9JQorICAgICUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bX0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGZwbGFpbi4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZVxzZWN0aW9ubGV2ZWx9eyMxfXsjNH0lCisgICAgJQorICAgICUgV3JpdGUgdGhlIG5vZGUgcmVmZXJlbmNlICg9IHBkZiBkZXN0aW5hdGlvbiBmb3IgcGRmdGV4KS4KKyAgICAlIEFnYWluLCBzZWUgY29tbWVudHMgaW4gXGNoZnBsYWluLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCAgJSB6ZXJvIGlmIG5vIHNlY3Rpb24gbnVtYmVyCisgICAgICAgICAgXHVuaGJveDAgIzF9JQorICB9JQorICAlIEFkZCBleHRyYSBzcGFjZSBhZnRlciB0aGUgaGVhZGluZyAtLSBoYWxmIG9mIHdoYXRldmVyIGNhbWUgYWJvdmUgaXQuCisgICUgRG9uJ3QgYWxsb3cgc3RyZXRjaCwgdGhvdWdoLgorICBca2VybiAuNSBcY3NuYW1lICMyaGVhZGluZ3NraXBcZW5kY3NuYW1lCisgICUKKyAgJSBEbyBub3QgbGV0IHRoZSBrZXJuIGJlIGEgcG90ZW50aWFsIGJyZWFrcG9pbnQsIGFzIGl0IHdvdWxkIGJlIGlmIGl0CisgICUgd2FzIGZvbGxvd2VkIGJ5IGdsdWUuCisgIFxub2JyZWFrCisgICUKKyAgJSBXZSdsbCBhbG1vc3QgY2VydGFpbmx5IHN0YXJ0IGEgcGFyYWdyYXBoIG5leHQsIHNvIGRvbid0IGxldCB0aGF0CisgICUgZ2x1ZSBhY2N1bXVsYXRlLiAgKE5vdCBhIGJyZWFrcG9pbnQgYmVjYXVzZSBpdCdzIHByZWNlZGVkIGJ5IGEKKyAgJSBkaXNjYXJkYWJsZSBpdGVtLikKKyAgXHZza2lwLVxwYXJza2lwCisgICUgCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlIAorICAlICAgQHNlY3Rpb24gc2VjLXdoYXRldmVyCisgICUgICBAZGVmZm4gZGVmLXdoYXRldmVyCisgIFxwZW5hbHR5IDEwMDAxCit9CisKKworXG1lc3NhZ2V7dG9jLH0KKyUgVGFibGUgb2YgY29udGVudHMuCitcbmV3d3JpdGVcdG9jZmlsZQorCislIFdyaXRlIGFuIGVudHJ5IHRvIHRoZSB0b2MgZmlsZSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCislIENhbGxlZCBmcm9tIEBjaGFwdGVyLCBldGMuCislCislIEV4YW1wbGUgdXNhZ2U6IFx3cml0ZXRvY2VudHJ5e3NlY317U2VjdGlvbiBOYW1lfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfQorJSBXZSBhcHBlbmQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIChpZiBhbnkpIGFuZCBwYWdlIG51bWJlciBhcyBhZGRpdGlvbmFsCislIGFyZ3VtZW50cyBmb3IgdGhlIFx7Y2hhcCxzZWMsLi4ufWVudHJ5IG1hY3JvcyB3aGljaCB3aWxsIGV2ZW50dWFsbHkKKyUgcmVhZCB0aGlzLiAgVGhlIG5vZGUgbmFtZSBpcyB1c2VkIGluIHRoZSBwZGYgb3V0bGluZXMgYXMgdGhlCislIGRlc3RpbmF0aW9uIHRvIGp1bXAgdG8uCislCislIFdlIG9wZW4gdGhlIC50b2MgZmlsZSBmb3Igd3JpdGluZyBoZXJlIGluc3RlYWQgb2YgYXQgQHNldGZpbGVuYW1lIChvcgorJSBhbnkgb3RoZXIgZml4ZWQgdGltZSkgc28gdGhhdCBAY29udGVudHMgY2FuIGJlIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudC4KKyUgQnV0IGlmICMxIGlzIGBvbWl0JywgdGhlbiB3ZSBkb24ndCBkbyBhbnl0aGluZy4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlCislIHRhYmxlIG9mIGNvbnRlbnRzIGNoYXB0ZXIgb3BlbmluZ3MgdGhlbXNlbHZlcy4KKyUKK1xuZXdpZlxpZnRvY2ZpbGVvcGVuZWQKK1xkZWZcb21pdGtleXdvcmR7b21pdH0lCislCitcZGVmXHdyaXRldG9jZW50cnkjMSMyIzN7JQorICBcZWRlZlx3cml0ZXRvY3R5cGV7IzF9JQorICBcaWZ4XHdyaXRldG9jdHlwZVxvbWl0a2V5d29yZCBcZWxzZQorICAgIFxpZnRvY2ZpbGVvcGVuZWRcZWxzZQorICAgICAgXGltbWVkaWF0ZVxvcGVub3V0XHRvY2ZpbGUgPSBcam9ibmFtZS50b2MKKyAgICAgIFxnbG9iYWxcdG9jZmlsZW9wZW5lZHRydWUKKyAgICBcZmkKKyAgICAlCisgICAgXGlmbGlua3MKKyAgICAgIHtcYXRkdW1taWVzCisgICAgICAgXGVkZWZcdGVtcHslCisgICAgICAgICBcd3JpdGVcdG9jZmlsZXtAIzFlbnRyeXsjMn17IzN9e1xsYXN0bm9kZX17XG5vZXhwYW5kXGZvbGlvfX19JQorICAgICAgIFx0ZW1wCisgICAgICB9CisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJSAKK1xkZWZcYWN0aXZlY2F0Y29kZXN7JQorICBcY2F0Y29kZWBcIj1cYWN0aXZlCisgIFxjYXRjb2RlYFwkPVxhY3RpdmUKKyAgXGNhdGNvZGVgXDw9XGFjdGl2ZQorICBcY2F0Y29kZWBcPj1cYWN0aXZlCisgIFxjYXRjb2RlYFxcPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF49XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgIFxjYXRjb2RlYFx8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXH49XGFjdGl2ZQorfQorCisKKyUgUmVhZCB0aGUgdG9jIGZpbGUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IFRleGluZm8gaW5wdXQuCitcZGVmXHJlYWR0b2NmaWxleyUKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGFjdGl2ZWNhdGNvZGVzCisgIFxpbnB1dCBcam9ibmFtZS50b2MKK30KKworXG5ld3NraXBcY29udGVudHNyaWdodG1hcmdpbiBcY29udGVudHNyaWdodG1hcmdpbj0xaW4KK1xuZXdjb3VudFxzYXZlcGFnZW5vCitcbmV3Y291bnRcbGFzdG5lZ2F0aXZlcGFnZW5vIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSAtMQorCislIFByZXBhcmUgdG8gcmVhZCB3aGF0IHdlJ3ZlIHdyaXR0ZW4gdG8gXHRvY2ZpbGUuCislCitcZGVmXHN0YXJ0Y29udGVudHMjMXslCisgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAlIHN0YXJ0IG9uIGFuIG9kZCBwYWdlLCB1bmxpa2UgY2hhcHRlcnMuICBUaHVzLCB3ZSBtYWludGFpbgorICAlIFxjb250ZW50c2FsaWdubWFjcm8gaW4gcGFyYWxsZWwgd2l0aCBccGFnZWFsaWdubWFjcm8uCisgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICBcY29udGVudHNhbGlnbm1hY3JvCisgIFxpbW1lZGlhdGVcY2xvc2VvdXRcdG9jZmlsZQorICAlCisgICUgRG9uJ3QgbmVlZCB0byBwdXQgYENvbnRlbnRzJyBvciBgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KKyAgJSBJdCBpcyBhYnVuZGFudGx5IGNsZWFyIHdoYXQgdGhleSBhcmUuCisgIFxkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgXGNoYXBtYWNyb3sjMX17WW9taXRmcm9tdG9jfXt9JQorICAlCisgIFxzYXZlcGFnZW5vID0gXHBhZ2VubworICBcYmVnaW5ncm91cCAgICAgICAgICAgICAgICAgICUgU2V0IHVwIHRvIGhhbmRsZSBjb250ZW50cyBmaWxlcyBwcm9wZXJseS4KKyAgICBccmFnZ2VkYm90dG9tICAgICAgICAgICAgICAlIFdvcnJ5IG1vcmUgYWJvdXQgYnJlYWtwb2ludHMgdGhhbiB0aGUgYm90dG9tLgorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cY29udGVudHNyaWdodG1hcmdpbiAlIERvbid0IHVzZSB0aGUgZnVsbCBsaW5lIGxlbmd0aC4KKyAgICAlCisgICAgJSBSb21hbiBudW1lcmFscyBmb3IgcGFnZSBudW1iZXJzLgorICAgIFxpZm51bSBccGFnZW5vPjAgXGdsb2JhbFxwYWdlbm8gPSBcbGFzdG5lZ2F0aXZlcGFnZW5vIFxmaQorfQorCisKKyUgTm9ybWFsIChsb25nKSB0b2MuCitcZGVmXGNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxwZGZtYWtlb3V0bGluZXMKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CisKKyUgQW5kIGp1c3QgdGhlIGNoYXB0ZXJzLgorXGRlZlxzdW1tYXJ5Y29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFNob3J0VE9DfSUKKyAgICAlCisgICAgXGxldFxudW1jaGFwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XGFwcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFx1bm5jaGFwZW50cnkgPSBcc2hvcnR1bm5jaGFwZW50cnkKKyAgICAlIFdlIHdhbnQgYSB0cnVlIHJvbWFuIGhlcmUgZm9yIHRoZSBwYWdlIG51bWJlcnMuCisgICAgXHNlY2ZvbnRzCisgICAgXGxldFxybT1cc2hvcnRjb250cm0gXGxldFxiZj1cc2hvcnRjb250YmYKKyAgICBcbGV0XHNsPVxzaG9ydGNvbnRzbCBcbGV0XHR0PVxzaG9ydGNvbnR0dAorICAgIFxybQorICAgIFxoeXBoZW5wZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxiYXNlbGluZXNraXAgYnkgMXB0ICUgT3BlbiBpdCB1cCBhIGxpdHRsZS4KKyAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0e30KKyAgICBcbGV0XGFwcHNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlCisgICUgV2UnZCBsaWtlIHRvIHJpZ2h0LWp1c3RpZnkgY2hhcHRlciBudW1iZXJzLCBidXQgdGhhdCBsb29rcyBzdHJhbmdlCisgICUgd2l0aCBhcHBlbmRpeCBsZXR0ZXJzLiAgQW5kIHJpZ2h0LWp1c3RpZnlpbmcgbnVtYmVycyBhbmQKKyAgJSBsZWZ0LWp1c3RpZnlpbmcgbGV0dGVycyBsb29rcyBzdHJhbmdlIHdoZW4gdGhlcmUgaXMgbGVzcyB0aGFuIDEwCisgICUgY2hhcHRlcnMuICBIYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRvYyBvbmNlIHRvIGtub3cgaG93IG1hbnkgY2hhcHRlcnMKKyAgJSB0aGVyZSBhcmUgYmVmb3JlIGRlY2lkaW5nIC4uLgorICBcaGJveCB0byAxZW17IzFcaHNzfSUKK30KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4KKyUgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjaGFwdGVyIG9yIHNlY3Rpb24gbmFtZS4KKyUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgorJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgorCislIENoYXB0ZXJzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KK1xkZWZcbnVtY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorJQorJSBDaGFwdGVycywgaW4gdGhlIHNob3J0IHRvYy4KKyUgU2VlIGNvbW1lbnRzIGluIFxkb2NoYXBlbnRyeSByZSB2Ym94IGFuZCByZWxhdGVkIHNldHRpbmdzLgorXGRlZlxzaG9ydGNoYXBlbnRyeSMxIzIjMyM0eyUKKyAgXHRvY2VudHJ5e1xzaG9ydGNoYXBsYWJlbHsjMn1cbGFiZWxzcGFjZSAjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfSUKK30KKworJSBBcHBlbmRpY2VzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KKyUgTmVlZCB0aGUgd29yZCBBcHBlbmRpeCwgYW5kIGEgZml4ZWQtc2l6ZSBib3guCislCitcZGVmXGFwcGVuZGl4Ym94IzF7JQorICAlIFdlIHVzZSBNIHNpbmNlIGl0J3MgcHJvYmFibHkgdGhlIHdpZGVzdCBsZXR0ZXIuCisgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9IE19JQorICBcaGJveCB0byBcd2Qwe1xwdXR3b3JkQXBwZW5kaXh7fSAjMVxoc3N9fQorJQorXGRlZlxhcHBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXtcYXBwZW5kaXhib3h7IzJ9XGxhYmVsc3BhY2UjMX17IzR9fQorCislIFVubnVtYmVyZWQgY2hhcHRlcnMuCitcZGVmXHVubmNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMX17IzR9fQorXGRlZlxzaG9ydHVubmNoYXBlbnRyeSMxIzIjMyM0e1x0b2NlbnRyeXsjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfX0KKworJSBTZWN0aW9ucy4KK1xkZWZcbnVtc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc2VjZW50cnk9XG51bXNlY2VudHJ5CitcZGVmXHVubnNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzF9eyM0fX0KKworJSBTdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic2VjZW50cnk9XG51bXN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBBbmQgc3Vic3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnN1YnNlY2VudHJ5PVxudW1zdWJzdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGxldmVscy4KKyUgU2FtZSBhcyBcZGVmYXVsdHBhcmluZGVudC4KK1xuZXdkaW1lblx0b2NpbmRlbnQgXHRvY2luZGVudCA9IDE1cHQKKworJSBOb3cgZm9yIHRoZSBhY3R1YWwgdHlwZXNldHRpbmcuIEluIGFsbCB0aGVzZSwgIzEgaXMgdGhlIHRleHQgYW5kICMyIGlzIHRoZQorJSBwYWdlIG51bWJlci4KKyUKKyUgSWYgdGhlIHRvYyBoYXMgdG8gYmUgYnJva2VuIG92ZXIgcGFnZXMsIHdlIHdhbnQgaXQgdG8gYmUgYXQgY2hhcHRlcnMKKyUgaWYgYXQgYWxsIHBvc3NpYmxlOyBoZW5jZSB0aGUgXHBlbmFsdHkuCitcZGVmXGRvY2hhcGVudHJ5IzEjMnslCisgICBccGVuYWx0eS0zMDAgXHZza2lwMVxiYXNlbGluZXNraXAgcGx1cy4zM1xiYXNlbGluZXNraXAgbWludXMuMjVcYmFzZWxpbmVza2lwCisgICBcYmVnaW5ncm91cAorICAgICBcY2hhcGVudHJ5Zm9udHMKKyAgICAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKKyAgIFxlbmRncm91cAorICAgXG5vYnJlYWtcdnNraXAgLjI1XGJhc2VsaW5lc2tpcCBwbHVzLjFcYmFzZWxpbmVza2lwCit9CisKK1xkZWZcZG9zZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPVx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9Mlx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnN1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9M1x0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworJSBXZSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIGFzIGZvciB0aGUgaW5kZXggZW50cmllcy4KK1xsZXRcdG9jZW50cnkgPSBcZW50cnkKKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQorCislIFRoZSBAZXJyb3J7fSBjb21tYW5kLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCislCitcbmV3Ym94XGVycm9yYm94CislCit7XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KK1xkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcworJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQorXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0CisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CisKKyUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCislCitcbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZvcm1hdC9Ac21hbGxmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXG1ha2VkaXNwZW52e2Zvcm1hdH17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZsdXNobGVmdDogc2FtZSBhcyBAZm9ybWF0LCBidXQgZG9lc24ndCBvYmV5IFxTRVRkaXNwZW52c2l6ZS4KK1xlbnZkZWZcZmx1c2hsZWZ0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hsZWZ0ID0gXGFmdGVyZW52YnJlYWsKKworJSBAZmx1c2hyaWdodC4KKyUKK1xlbnZkZWZcZmx1c2hyaWdodHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNocmlnaHQgPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQorJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQorJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAorJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgorJQorXGVudmRlZlxxdW90YXRpb257JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCit9CisKKyUgV2UgaGF2ZSByZXRhaW5lZCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZQorJSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRXF1b3RhdGlvbnslCisgIFxwYXIKKyAgXGlmeFxxdW90YXRpb25hdXRob3JcdW5kZWZpbmVkXGVsc2UKKyAgICAlIGluZGVudCBhIGJpdC4KKyAgICBcbGVmdGxpbmV7XGtlcm4gMlxsZWZ0c2tpcCBcc2wgLS0tXHF1b3RhdGlvbmF1dGhvcn0lCisgIFxmaQorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KKworJSBJZiB3ZSdyZSBnaXZlbiBhbiBhcmd1bWVudCwgdHlwZXNldCBpdCBpbiBib2xkIHdpdGggYSBjb2xvbiBhZnRlci4KK1xkZWZccXVvdGF0aW9ubGFiZWwjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIHtcYmYgIzE6IH0lCisgIFxmaQorfQorCisKKyUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CislIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCislIHdlIG5lZWQgdGhlIGN1cmx5IGJyYWNlcyBzbyB0aGF0IG1ha2VpbmZvIHNlZXMgdGhlIEB2ZXJiIGNvbW1hbmQsIGVnOgorJSBgQHZlcmJ4Li4ueCcgd291bGQgbG9vayBsaWtlIHRoZSAnQHZlcmJ4JyBjb21tYW5kLiAgLS1qYW5uZWtlQGdudS5vcmcKKyUKKyUgW0tudXRoXTogRG9uYWxkIEVydmluIEtudXRoLCAxOTk2LiAgVGhlIFRlWGJvb2suCislCislIFtLbnV0aF0gcC4zNDQ7IG9ubHkgd2UgbmVlZCB0byBkbyB0aGUgb3RoZXIgY2hhcmFjdGVycyBUZXhpbmZvIHNldHMKKyUgYWN0aXZlIHRvby4gIE90aGVyd2lzZSwgdGhleSBnZXQgbG9zdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKKyUgdmVyYmF0aW0gbGluZS4KK1xkZWZcZG9zcGVjaWFsc3slCisgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKKyAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQorICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxCislIERpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcYD1cYWN0aXZlXGdkZWZge1xyZWxheFxscX0KK1xlbmRncm91cAorJQorJSBTZXR1cCBmb3IgdGhlIEB2ZXJiIGNvbW1hbmQuCislCislIEVpZ2h0IHNwYWNlcyBmb3IgYSB0YWIKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJlaWdodHNwYWNlc3tcY2F0Y29kZWBcXl5JPVxhY3RpdmVcZGVmXl5Je1wgXCBcIFwgXCBcIFwgXCB9fQorXGVuZGdyb3VwCislCitcZGVmXHNldHVwdmVyYnslCisgIFx0dCAgJSBlYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmVpZ2h0c3BhY2VzCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCit9CisKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYmF0aW0gZW52aXJvbm1lbnQKKyUKKyUgUmVhbCB0YWIgZXhwYW5zaW9uCitcbmV3ZGltZW5cdGFidyBcc2V0Ym94MD1caGJveHtcdHRcc3BhY2V9IFx0YWJ3PThcd2QwICUgdGFiIGFtb3VudAorJQorXGRlZlxzdGFydHRhYmJveHtcc2V0Ym94MD1caGJveFxiZ3JvdXB9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZXhwYW5keyUKKyAgICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgICBcZGVmXl5Je1xsZWF2ZXZtb2RlXGVncm91cAorICAgICAgXGRpbWVuMD1cd2QwICUgdGhlIHdpZHRoIHNvIGZhciwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHRhYgorICAgICAgXGRpdmlkZVxkaW1lbjAgYnlcdGFidworICAgICAgXG11bHRpcGx5XGRpbWVuMCBieVx0YWJ3ICUgY29tcHV0ZSBwcmV2aW91cyBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXGFkdmFuY2VcZGltZW4wIGJ5XHRhYncgICUgYWR2YW5jZSB0byBuZXh0IG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcd2QwPVxkaW1lbjAgXGJveDAgXHN0YXJ0dGFiYm94CisgICAgfSUKKyAgfQorXGVuZGdyb3VwCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworICBcZXZlcnlwYXJ7XHN0YXJ0dGFiYm94fSUKK30KKworJSBEbyB0aGUgQHZlcmIgbWFnaWM6IHZlcmJhdGltIHRleHQgaXMgcXVvdGVkIGJ5IHVuaXF1ZQorJSBkZWxpbWl0ZXIgY2hhcmFjdGVycy4gIEJlZm9yZSBmaXJzdCBkZWxpbWl0ZXIgZXhwZWN0IGEKKyUgcmlnaHQgYnJhY2UsIGFmdGVyIGxhc3QgZGVsaW1pdGVyIGV4cGVjdCBjbG9zaW5nIGJyYWNlOgorJQorJSAgICBcZGVmXGRvdmVyYid7JzxjaGFyPiMxPGNoYXI+J30neyMxfQorJQorJSBbS251dGhdIHAuIDM4Mjsgb25seSBlYXQgb3V0ZXIge30KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFs9MVxjYXRjb2RlYF09MlxjYXRjb2RlYFx7PVxvdGhlclxjYXRjb2RlYFx9PVxvdGhlcgorICBcZ2RlZlxkb3ZlcmJ7IzFbXGRlZlxuZXh0IyMxIzF9WyMjMVxlbmRncm91cF1cbmV4dF0KK1xlbmRncm91cAorJQorXGRlZlx2ZXJie1xiZWdpbmdyb3VwXHNldHVwdmVyYlxkb3ZlcmJ9CislCislCislIERvIHRoZSBAdmVyYmF0aW0gbWFnaWM6IGRlZmluZSB0aGUgbWFjcm8gXGRvdmVyYmF0aW0gc28gdGhhdAorJSB0aGUgKGZpcnN0KSBhcmd1bWVudCBlbmRzIHdoZW4gJ0BlbmQgdmVyYmF0aW0nIGlzIHJlYWNoZWQsIGllOgorJQorJSAgICAgXGRlZlxkb3ZlcmJhdGltIzFAZW5kIHZlcmJhdGlteyMxfQorJQorJSBGb3IgVGV4aW5mbyBpdCdzIGEgbG90IGVhc2llciB0aGFuIGZvciBMYVRlWCwKKyUgYmVjYXVzZSB0ZXhpbmZvJ3MgXHZlcmJhdGltIGRvZXNuJ3Qgc3RvcCBhdCAnXGVuZHt2ZXJiYXRpbX0nOgorJSB3ZSBuZWVkIG5vdCByZWRlZmluZSAnXCcsICd7JyBhbmQgJ30nLgorJQorJSBJbnNwaXJlZCBieSBMYVRlWCdzIHZlcmJhdGltIGNvbW1hbmQgc2V0IFtsYXRleC5sdHhdCislCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcID1cYWN0aXZlCisgIFxvYmV5bGluZXMgJQorICAlIGlnbm9yZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBmaXJzdCBeXk0sIHRoYXQncyB0aGUgbmV3bGluZSBhdCB0aGUgZW5kCisgICUgb2YgdGhlIEB2ZXJiYXRpbSBpbnB1dCBsaW5lIGl0c2VsZi4gIE90aGVyd2lzZSB3ZSBnZXQgYW4gZXh0cmEgYmxhbmsKKyAgJSBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx4ZGVmXGRvdmVyYmF0aW0jMV5eTSMyQGVuZCB2ZXJiYXRpbXsjMlxub2V4cGFuZFxlbmRcZ29iYmxlIHZlcmJhdGltfSUKKyAgJSBXZSByZWFsbHkgd2FudCB7Li4uXGVuZCB2ZXJiYXRpbX0gaW4gdGhlIGJvZHkgb2YgdGhlIG1hY3JvLCBidXQKKyAgJSB3aXRob3V0IHRoZSBhY3RpdmUgc3BhY2U7IHRodXMgd2UgaGF2ZSB0byB1c2UgXHhkZWYgYW5kIFxnb2JibGUuCitcZW5kZ3JvdXAKKyUKK1xlbnZkZWZcdmVyYmF0aW17JQorICAgIFxzZXR1cHZlcmJhdGltXGRvdmVyYmF0aW0KK30KK1xsZXRcRXZlcmJhdGltID0gXGFmdGVyZW52YnJlYWsKKworCislIEB2ZXJiYXRpbWluY2x1ZGUgRklMRSAtIGluc2VydCB0ZXh0IG9mIGZpbGUgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnQuCislCitcZGVmXHZlcmJhdGltaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGRvdmVyYmF0aW1pbmNsdWRlfQorJQorXGRlZlxkb3ZlcmJhdGltaW5jbHVkZSMxeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxzZXR1cHZlcmJhdGltCisgICAgXGlucHV0ICMxCisgICAgXGFmdGVyZW52YnJlYWsKKyAgfSUKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLgorJQorJSBXZSBzYXZlIHRoZSB1bmludGVycHJldGVkIHRva2VucywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBib3guCislIFNhdmluZyB0aGUgdGV4dCBpbiBhIGJveCB3b3VsZCBiZSBtdWNoIGVhc2llciwgYnV0IHRoZW4gYWxsIHRoZQorJSB0eXBlc2V0dGluZyBjb21tYW5kcyAoQHNtYWxsYm9vaywgZm9udCBjaGFuZ2VzLCBldGMuKSBoYXZlIHRvIGJlIGRvbmUKKyUgYmVmb3JlaGFuZCAtLSBhbmQgYSkgd2Ugd2FudCBAY29weWluZyB0byBiZSBkb25lIGZpcnN0IGluIHRoZSBzb3VyY2UKKyUgZmlsZTsgYikgbGV0dGluZyB1c2VycyBkZWZpbmUgdGhlIGZyb250bWF0dGVyIGluIGFzIGZsZXhpYmxlIG9yZGVyIGFzCislIHBvc3NpYmxlIGlzIHZlcnkgZGVzaXJhYmxlLgorJQorXGRlZlxjb3B5aW5ne1xjaGVja2Vudnt9XGJlZ2luZ3JvdXBcc2NhbmFyZ2N0eHRcZG9jb3B5aW5nfQorXGRlZlxkb2NvcHlpbmcjMUBlbmQgY29weWluZ3tcZW5kZ3JvdXBcZGVmXGNvcHlpbmd0ZXh0eyMxfX0KKyUKK1xkZWZcaW5zZXJ0Y29weWluZ3slCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudCA9IDBwdCAgJSBwYXJhZ3JhcGggaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgb24gdGl0bGUgcGFnZQorICAgIFxzY2FuZXhwXGNvcHlpbmd0ZXh0CisgIFxlbmRncm91cAorfQorCitcbWVzc2FnZXtkZWZ1bnMsfQorJSBAZGVmdW4gZXRjLgorCitcbmV3c2tpcFxkZWZib2R5aW5kZW50IFxkZWZib2R5aW5kZW50PS40aW4KK1xuZXdza2lwXGRlZmFyZ3NpbmRlbnQgXGRlZmFyZ3NpbmRlbnQ9NTBwdAorXG5ld3NraXBcZGVmbGFzdGFyZ21hcmdpbiBcZGVmbGFzdGFyZ21hcmdpbj0xOHB0CisKKyUgU3RhcnQgdGhlIHByb2Nlc3Npbmcgb2YgQGRlZmZuOgorXGRlZlxzdGFydGRlZnVueyUKKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwCisgICAgXG1lZGJyZWFrCisgIFxlbHNlCisgICAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgICAlIHdoaWNoIGlzIHRoZXJlIHRvIGtlZXAgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvZ2V0aGVyIHdpdGggaXRzCisgICAgJSBoZWFkZXIuICBCdXQgaWYgdGhlcmUncyBub3RoaW5nIGJ1dCBoZWFkZXJzLCB3ZSBuZWVkIHRvIGFsbG93IGEKKyAgICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIHNwZWNpZmljYWxseSBmb3IgcGVuYWx0eSAxMDAwMiwgaW5zZXJ0ZWQKKyAgICAlIGJ5IFxkZWZhcmdzY29tbW9uZW5kaW5nLCBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAgICUgY29tbWFuZHMgYWxzbyBpbnNlcnQgYSBub2JyZWFrIHBlbmFsdHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93CisgICAgJSBhIGJyZWFrIGJldHdlZW4gYSBzZWN0aW9uIGhlYWRpbmcgYW5kIGEgZGVmdW4uCisgICAgJSAKKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZmkKKyAgJQorICAlIEFuZCBub3csIGl0J3MgdGltZSB0byByZXVzZSB0aGUgYm9keSBvZiB0aGUgb3JpZ2luYWwgZGVmdW46CisgIFxleHBhbmRhZnRlclxnb2JibGVkZWZ1biMxJQorfQorXGRlZlxnb2JibGVkZWZ1biMxXHN0YXJ0ZGVmdW57fQorCislIFxwcmludGRlZnVubGluZSBcZGVmZm5oZWFkZXJ7dGV4dH0KKyUKK1xkZWZccHJpbnRkZWZ1bmxpbmUjMSMyeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlIGNhbGwgXGRlZmZuaGVhZGVyOgorICAgICMxIzIgXGVuZGhlYWRlcgorICAgICUgY29tbW9uIGVuZGluZzoKKyAgICBcaW50ZXJsaW5lcGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgICBcZW5kZ3JhZgorICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAorICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUKKyAgICAlIEkndmUgdmVyaWZpZWQgdGhhdCBpdCBpcyBuZWNlc3NhcnkgYm90aCBmb3IgZS1UZVggYW5kIGZvciBvcmRpbmFyeSBUZVgKKyAgICAlCQkJCQkJCS0ta2FzYWwsIDI5bm92MDMKKyAgICBcc2NhbnRva2Vuc3sjMVxlbmRpbnB1dH0lCisgIFxlbmRncm91cAorfQorCitcZGVmXHNjYW5leHAjMXslCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHNjYW5tYWNyb3sjMX19JQorICBcdGVtcAorfQorCitcbmV3Y291bnRccGFyYW1ubyAgICUgQ291bnQgb2YgcGFyYW1ldGVycworXG5ld3Rva3NcbWFjbmFtZSAgICAlIE1hY3JvIG5hbWUKK1xuZXdpZlxpZnJlY3Vyc2l2ZSAgJSBJcyBpdCByZWN1cnNpdmU/CisKKyUgTGlzdCBvZiBhbGwgZGVmaW5lZCBtYWNyb3MgaW4gdGhlIGZvcm0KKyUgICAgXGRlZmluZWR1bW15d29yZFxtYWNybzFcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMi4uLgorJSBDdXJyZW50bHkgaXMgYWxzbyBjb250YWlucyBhbGwgQGFsaWFzZXM7IHRoZSBsaXN0IGNhbiBiZSBzcGxpdAorJSBpZiB0aGVyZSBpcyBhIG5lZWQuCitcZGVmXG1hY3JvbGlzdHt9CisKKyUgQWRkIHRoZSBtYWNybyB0byBcbWFjcm9saXN0CitcZGVmXGFkZHRvbWFjcm9saXN0IzF7XGV4cGFuZGFmdGVyIFxhZGR0b21hY3JvbGlzdHh4eCBcY3NuYW1lIzFcZW5kY3NuYW1lfQorXGRlZlxhZGR0b21hY3JvbGlzdHh4eCMxeyUKKyAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xtYWNyb2xpc3RcZGVmaW5lZHVtbXl3b3JkIzF9JQorICAgICBceGRlZlxtYWNyb2xpc3R7XHRoZVx0b2tzMH0lCit9CisKKyUgVXRpbGl0eSByb3V0aW5lcy4KKyUgVGhpcyBkb2VzIFxsZXQgIzEgPSAjMiwgd2l0aCBcY3NuYW1lczsgdGhhdCBpcywKKyUgICBcbGV0IFxjc25hbWUjMVxlbmRjc25hbWUgPSBcY3NuYW1lIzJcZW5kY3NuYW1lCislIChleGNlcHQgb2YgY291cnNlIHdlIGhhdmUgdG8gcGxheSBleHBhbnNpb24gZ2FtZXMpLgorJSAKK1xkZWZcY3NsZXQjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGxldAorICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCisgIFxjc25hbWUjMlxlbmRjc25hbWUKK30KKworJSBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgYSBzdHJpbmcuCislIENvbmNlcHRzIGZyb20gYXJvLWJlbmQgcHJvYmxlbSAxNSAoc2VlIENUQU4pLgore1xjYXRjb2RlYFxAPTExCitcZ2RlZlxlYXRzcGFjZXMgIzF7XGV4cGFuZGFmdGVyXHRyaW1AXGV4cGFuZGFmdGVyeyMxIH19CitcZ2RlZlx0cmltQCAjMXtcdHJpbUBAIEAjMSBAICMxIEAgQEB9CitcZ2RlZlx0cmltQEAgIzFAICMyQCAjM0BAe1x0cmltQEBAXGVtcHR5ICMyIEB9CitcZGVmXHVuYnJhY2UjMXsjMX0KK1x1bmJyYWNle1xnZGVmXHRyaW1AQEAgIzEgfSAjMkB7IzF9Cit9CisKKyUgVHJpbSBhIHNpbmdsZSB0cmFpbGluZyBeXk0gb2ZmIGEgc3RyaW5nLgore1xjYXRjb2RlYFxeXk09XG90aGVyIFxjYXRjb2RlYFxRPTMlCitcZ2RlZlxlYXRjciAjMXtcZWF0Y3JhICMxUV5eTVF9JQorXGdkZWZcZWF0Y3JhIzFeXk1Re1xlYXRjcmIjMVF9JQorXGdkZWZcZWF0Y3JiIzFRIzJReyMxfSUKK30KKworJSBNYWNybyBib2RpZXMgYXJlIGFic29yYmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgY29udGV4dCB3aGVyZQorJSBhbGwgY2hhcmFjdGVycyBhcmUgY2F0Y29kZSAxMCwgMTEgb3IgMTIsIGV4Y2VwdCBcIHdoaWNoIGlzIGFjdGl2ZQorJSAoYXMgaW4gbm9ybWFsIHRleGluZm8pLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIFwuCisKKyUgSXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBoYXJkIENScyB3aGVuIHRoZSBtYWNybyBpcyBleGVjdXRlZC4gVGhpcyBpcworJSBkb25lIGJ5ICBtYWtpbmcgXl5NIChcZW5kbGluZWNoYXIpIGNhdGNvZGUgMTIgd2hlbiByZWFkaW5nIHRoZSBtYWNybworJSBib2R5LCBhbmQgdGhlbiBtYWtpbmcgaXQgdGhlIFxuZXdsaW5lY2hhciBpbiBcc2Nhbm1hY3JvLgorCitcZGVmXHNjYW5jdHh0eyUKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFwrPVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcfj1cb3RoZXIKK30KKworXGRlZlxzY2FuYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKK30KKworXGRlZlxtYWNyb2JvZHljdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFx7PVxvdGhlcgorICBcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKKyAgXHVzZW1ib2R5YmFja3NsYXNoCit9CisKK1xkZWZcbWFjcm9hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorfQorCislIFxtYm9keWJhY2tzbGFzaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBcIGluIEBtYWNybyBib2RpZXMuCislIEl0IG1hcHMgXGZvb1wgPT4gXGNzbmFtZSBtYWNhcmcuZm9vXGVuZGNzbmFtZSA9PiAjTgorJSB3aGVyZSBOIGlzIHRoZSBtYWNybyBwYXJhbWV0ZXIgbnVtYmVyLgorJSBXZSBkZWZpbmUgXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZSB0byBiZSBccmVhbGJhY2tzbGFzaCwgc28KKyUgXFwgaW4gbWFjcm8gcmVwbGFjZW1lbnQgdGV4dCBnZXRzIHlvdSBhIGJhY2tzbGFzaC4KKwore1xjYXRjb2RlYEA9MCBAY2F0Y29kZWBAXD1AYWN0aXZlCisgQGdkZWZAdXNlbWJvZHliYWNrc2xhc2h7QGxldFw9QG1ib2R5YmFja3NsYXNofQorIEBnZGVmQG1ib2R5YmFja3NsYXNoIzFce0Bjc25hbWUgbWFjYXJnLiMxQGVuZGNzbmFtZX0KK30KK1xleHBhbmRhZnRlclxkZWZcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1le1xyZWFsYmFja3NsYXNofQorCitcZGVmXG1hY3Jve1xyZWN1cnNpdmVmYWxzZVxwYXJzZWFyZ1xtYWNyb3h4eH0KK1xkZWZccm1hY3Jve1xyZWN1cnNpdmV0cnVlXHBhcnNlYXJnXG1hY3JveHh4fQorCitcZGVmXG1hY3JveHh4IzF7JQorICBcZ2V0YXJnc3sjMX0lICAgICAgICAgICBub3cgXG1hY25hbWUgaXMgdGhlIG1hY25hbWUgYW5kIFxhcmdsIHRoZSBhcmdsaXN0CisgIFxpZnhcYXJnbFxlbXB0eSAgICAgICAlIG5vIGFyZ3VtZW50cworICAgICBccGFyYW1ubz0wJQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJccGFyc2VtYXJnZGVmIFxhcmdsOyUKKyAgXGZpCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZQorICAgICBcbWVzc2FnZXtXYXJuaW5nOiByZWRlZmluaW5nIFx0aGVcbWFjbmFtZX0lCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFx0aGVcbWFjbmFtZVxlbmRjc25hbWUgXHJlbGF4CisgICAgIFxlbHNlIFxlcnJtZXNzYWdle01hY3JvIG5hbWUgXHRoZVxtYWNuYW1lXHNwYWNlIGFscmVhZHkgZGVmaW5lZH1cZmkKKyAgICAgXGdsb2JhbFxjc2xldHttYWNzYXZlLlx0aGVcbWFjbmFtZX17XHRoZVxtYWNuYW1lfSUKKyAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZT0xJQorICAgICBcYWRkdG9tYWNyb2xpc3R7XHRoZVxtYWNuYW1lfSUKKyAgXGZpCisgIFxiZWdpbmdyb3VwIFxtYWNyb2JvZHljdHh0CisgIFxpZnJlY3Vyc2l2ZSBcZXhwYW5kYWZ0ZXJccGFyc2VybWFjYm9keQorICBcZWxzZSBcZXhwYW5kYWZ0ZXJccGFyc2VtYWNib2R5CisgIFxmaX0KKworXHBhcnNlYXJnZGVmXHVubWFjcm97JQorICBcaWYxXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZQorICAgIFxnbG9iYWxcY3NsZXR7IzF9e21hY3NhdmUuIzF9JQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0IFxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWU9MCUKKyAgICAlIFJlbW92ZSB0aGUgbWFjcm8gbmFtZSBmcm9tIFxtYWNyb2xpc3Q6CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzFcZW5kY3NuYW1lIFxyZWxheAorICAgICAgXGxldFxkZWZpbmVkdW1teXdvcmRcdW5tYWNyb2RvCisgICAgICBceGRlZlxtYWNyb2xpc3R7XG1hY3JvbGlzdH0lCisgICAgXGVuZGdyb3VwCisgIFxlbHNlCisgICAgXGVycm1lc3NhZ2V7TWFjcm8gIzEgbm90IGRlZmluZWR9JQorICBcZmkKK30KKworJSBDYWxsZWQgYnkgXGRvIGZyb20gXGRvdW5tYWNybyBvbiBlYWNoIG1hY3JvLiAgVGhlIGlkZWEgaXMgdG8gb21pdCBhbnkKKyUgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCB0byBccmVsYXguCislCitcZGVmXHVubWFjcm9kbyMxeyUKKyAgXGlmeCAjMVxyZWxheAorICAgICUgcmVtb3ZlIHRoaXMKKyAgXGVsc2UKKyAgICBcbm9leHBhbmRcZGVmaW5lZHVtbXl3b3JkIFxub2V4cGFuZCMxJQorICBcZmkKK30KKworJSBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgb2JzY3VyZSBmZWF0dXJlIHRoYXQgaWYgdGhlIGxhc3QgdG9rZW4gb2YgYQorJSA8cGFyYW1ldGVyIGxpc3Q+IGlzICMsIHRoZW4gdGhlIHByZWNlZGluZyBhcmd1bWVudCBpcyBkZWxpbWl0ZWQgYnkKKyUgYW4gb3BlbmluZyBicmFjZSwgYW5kIHRoYXQgb3BlbmluZyBicmFjZSBpcyBub3QgY29uc3VtZWQuCitcZGVmXGdldGFyZ3MjMXtcZ2V0YXJnc3h4eCMxe319CitcZGVmXGdldGFyZ3N4eHgjMSN7XGdldG1hY25hbWUgIzEgXHJlbGF4XGdldG1hY2FyZ3N9CitcZGVmXGdldG1hY25hbWUgIzEgIzJccmVsYXh7XG1hY25hbWU9eyMxfX0KK1xkZWZcZ2V0bWFjYXJncyMxe1xkZWZcYXJnbHsjMX19CisKKyUgUGFyc2UgdGhlIG9wdGlvbmFsIHtwYXJhbXN9IGxpc3QuICBTZXQgdXAgXHBhcmFtbm8gYW5kIFxwYXJhbWxpc3QKKyUgc28gXGRlZm1hY3JvIGtub3dzIHdoYXQgdG8gZG8uICBEZWZpbmUgXG1hY2FyZy5ibGFoIGZvciBlYWNoIGJsYWgKKyUgaW4gdGhlIHBhcmFtcyBsaXN0LCB0byBiZSAjI04gd2hlcmUgTiBpcyB0aGUgcG9zaXRpb24gaW4gdGhhdCBsaXN0LgorJSBUaGF0IGdldHMgdXNlZCBieSBcbWJvZHliYWNrc2xhc2ggKGFib3ZlKS4KKworJSBXZSBuZWVkIHRvIGdldCBgbWFjcm8gcGFyYW1ldGVyIGNoYXIgIycgaW50byBzZXZlcmFsIGRlZmluaXRpb25zLgorJSBUaGUgdGVjaG5pcXVlIHVzZWQgaXMgc3RvbGVuIGZyb20gTGFUZVg6ICBsZXQgXGhhc2ggYmUgc29tZXRoaW5nCislIHVuZXhwYW5kYWJsZSwgaW5zZXJ0IHRoYXQgd2hlcmV2ZXIgeW91IG5lZWQgYSAjLCBhbmQgdGhlbiByZWRlZmluZQorJSBpdCB0byAjIGp1c3QgYmVmb3JlIHVzaW5nIHRoZSB0b2tlbiBsaXN0IHByb2R1Y2VkLgorJQorJSBUaGUgc2FtZSB0ZWNobmlxdWUgaXMgdXNlZCB0byBwcm90ZWN0IFxlYXRzcGFjZXMgdGlsbCBqdXN0IGJlZm9yZQorJSB0aGUgbWFjcm8gaXMgdXNlZC4KKworXGRlZlxwYXJzZW1hcmdkZWYjMTt7XHBhcmFtbm89MFxkZWZccGFyYW1saXN0e30lCisgICAgICAgIFxsZXRcaGFzaFxyZWxheFxsZXRceGVhdHNwYWNlc1xyZWxheFxwYXJzZW1hcmdkZWZ4eHgjMSw7LH0KK1xkZWZccGFyc2VtYXJnZGVmeHh4IzEseyUKKyAgXGlmIzE7XGxldFxuZXh0PVxyZWxheAorICBcZWxzZSBcbGV0XG5leHQ9XHBhcnNlbWFyZ2RlZnh4eAorICAgIFxhZHZhbmNlXHBhcmFtbm8gYnkgMSUKKyAgICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgbWFjYXJnLlxlYXRzcGFjZXN7IzF9XGVuZGNzbmFtZQorICAgICAgICB7XHhlYXRzcGFjZXN7XGhhc2hcdGhlXHBhcmFtbm99fSUKKyAgICBcZWRlZlxwYXJhbWxpc3R7XHBhcmFtbGlzdFxoYXNoXHRoZVxwYXJhbW5vLH0lCisgIFxmaVxuZXh0fQorCislIFRoZXNlIHR3byBjb21tYW5kcyByZWFkIHJlY3Vyc2l2ZSBhbmQgbm9ucmVjdXJzaXZlIG1hY3JvIGJvZGllcy4KKyUgKFRoZXkncmUgZGlmZmVyZW50IHNpbmNlIHJlYyBhbmQgbm9ucmVjIG1hY3JvcyBlbmQgZGlmZmVyZW50bHkuKQorCitcbG9uZ1xkZWZccGFyc2VtYWNib2R5IzFAZW5kIG1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorXGxvbmdcZGVmXHBhcnNlcm1hY2JvZHkjMUBlbmQgcm1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorCislIFRoaXMgZGVmaW5lcyB0aGUgbWFjcm8gaXRzZWxmLiBUaGVyZSBhcmUgc2l4IGNhc2VzOiByZWN1cnNpdmUgYW5kCislIG5vbnJlY3Vyc2l2ZSBtYWNyb3Mgb2YgemVybywgb25lLCBhbmQgbWFueSBhcmd1bWVudHMuCislIE11Y2ggbWFnaWMgd2l0aCBcZXhwYW5kYWZ0ZXIgaGVyZS4KKyUgXHhkZWYgaXMgdXNlZCBzbyB0aGF0IG1hY3JvIGRlZmluaXRpb25zIHdpbGwgc3Vydml2ZSB0aGUgZmlsZQorJSB0aGV5J3JlIGRlZmluZWQgaW47IEBpbmNsdWRlIHJlYWRzIHRoZSBmaWxlIGluc2lkZSBhIGdyb3VwLgorXGRlZlxkZWZtYWNyb3slCisgIFxsZXRcaGFzaD0jIyUgY29udmVydCBwbGFjZWhvbGRlcnMgdG8gbWFjcm8gcGFyYW1ldGVyIGNoYXJzCisgIFxpZnJlY3Vyc2l2ZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICBcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICAgIFxwYXJhbWxpc3R7XGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICBcZWdyb3VwCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICBccGFyYW1saXN0eyUKKyAgICAgICAgICBcZWdyb3VwCisgICAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGZpCisgIFxmaX0KKworXGRlZlxub3JlY3Vyc2UjMXtcYmdyb3VwXGNzbGV0eyMxfXttYWNzYXZlLiMxfX0KKworJSBcYnJhY2VvcmxpbmUgZGVjaWRlcyB3aGV0aGVyIHRoZSBuZXh0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEKKyUgey4gIElmIHNvIGl0IHJlYWRzIHVwIHRvIHRoZSBjbG9zaW5nIH0sIGlmIG5vdCwgaXQgcmVhZHMgdGhlIHdob2xlCislIGxpbmUuICBXaGF0ZXZlciB3YXMgcmVhZCBpcyB0aGVuIGZlZCB0byB0aGUgbmV4dCBjb250cm9sIHNlcXVlbmNlCislIGFzIGFuIGFyZ3VtZW50IChieSBccGFyc2VicmFjZSBvciBccGFyc2VhcmcpCitcZGVmXGJyYWNlb3JsaW5lIzF7XGxldFxuZXh0PSMxXGZ1dHVyZWxldFxuY2hhclxicmFjZW9ybGluZXh4eH0KK1xkZWZcYnJhY2VvcmxpbmV4eHh7JQorICBcaWZ4XG5jaGFyXGJncm91cFxlbHNlCisgICAgXGV4cGFuZGFmdGVyXHBhcnNlYXJnCisgIFxmaSBcbmV4dH0KKworCislIEBhbGlhcy4KKyUgV2UgbmVlZCBzb21lIHRyaWNrZXJ5IHRvIHJlbW92ZSB0aGUgb3B0aW9uYWwgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWwKKyUgc2lnbi4gIEp1c3QgbWFrZSB0aGVtIGFjdGl2ZSBhbmQgdGhlbiBleHBhbmQgdGhlbSBhbGwgdG8gbm90aGluZy4KK1xkZWZcYWxpYXN7XHBhcnNlYXJndXNpbmdcb2JleXNwYWNlc1xhbGlhc3h4eH0KK1xkZWZcYWxpYXN4eHggIzF7XGFsaWFzeXl5IzFccmVsYXh9CitcZGVmXGFsaWFzeXl5ICMxPSMyXHJlbGF4eyUKKyAgeyUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XG9iZXllZHNwYWNlPVxlbXB0eQorICAgIFxhZGR0b21hY3JvbGlzdHsjMX0lCisgICAgXHhkZWZcbmV4dHtcZ2xvYmFsXGxldFxtYWtlY3NuYW1leyMxfT1cbWFrZWNzbmFtZXsjMn19JQorICB9JQorICBcbmV4dAorfQorCisKK1xtZXNzYWdle2Nyb3NzIHJlZmVyZW5jZXMsfQorCitcbmV3d3JpdGVcYXV4ZmlsZQorCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXHRoaXNzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGlzc2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFx3cml0ZXhyZGVme3BnfXtcZm9saW99JSB3aWxsIGJlIHdyaXR0ZW4gbGF0ZXIsIGR1cmluZyBcc2hpcG91dAorICAgIH0lCisgIFxmaQorfQorCislIEB4cmVmLCBAcHhyZWYsIGFuZCBAcmVmIGdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jZXMuICBGb3IgXHhyZWZYLCAjMSBpcworJSB0aGUgbm9kZSBuYW1lLCAjMiB0aGUgbmFtZSBvZiB0aGUgSW5mbyBjcm9zcy1yZWZlcmVuY2UsICMzIHRoZSBwcmludGVkCislIG5vZGUgbmFtZSwgIzQgdGhlIG5hbWUgb2YgdGhlIEluZm8gZmlsZSwgIzUgdGhlIG5hbWUgb2YgdGhlIHByaW50ZWQKKyUgbWFudWFsLiAgQWxsIGJ1dCB0aGUgbm9kZSBuYW1lIGNhbiBiZSBvbWl0dGVkLgorJQorXGRlZlxweHJlZiMxe1xwdXR3b3Jkc2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWYjMXtccHV0d29yZFNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlxyZWYjMXtceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZlhbIzEsIzIsIzMsIzQsIzUsIzZde1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxzZXRib3gxPVxoYm94e1xwcmludGVkbWFudWFsXHVuc2tpcH0lCisgIFxzZXRib3gwPVxoYm94e1xwcmludGVkcmVmbmFtZVx1bnNraXB9JQorICBcaWZkaW0gXHdkMCA9IDBwdAorICAgICUgTm8gcHJpbnRlZCBub2RlIG5hbWUgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uCisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZVxlbmRjc25hbWVccmVsYXgKKyAgICAgICUgVXNlIHRoZSBub2RlIG5hbWUgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgIFxlbHNlCisgICAgICAlIFVzZSB0aGUgYWN0dWFsIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBhcHBlYXIgaW5zaWRlCisgICAgICAlIHRoZSBzcXVhcmUgYnJhY2tldHMuICBVc2UgdGhlIHJlYWwgc2VjdGlvbiB0aXRsZSBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgICAgJSBJdCBpcyBpbiBhbm90aGVyIG1hbnVhbCwgc28gd2UgZG9uJ3QgaGF2ZSBpdC4KKyAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICAgICUgV2Uga25vdyB0aGUgcmVhbCB0aXRsZSBpZiB3ZSBoYXZlIHRoZSB4cmVmIHZhbHVlcy4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xyZWZ4eyMxLXRpdGxlfXt9fSUKKyAgICAgICAgXGVsc2UKKyAgICAgICAgICAlIE90aGVyd2lzZSBqdXN0IGNvcHkgdGhlIEluZm8gbm9kZSBuYW1lLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICAgIFxmaSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIE1ha2UgbGluayBpbiBwZGYgb3V0cHV0LgorICBcaWZwZGYKKyAgICBcbGVhdmV2bW9kZQorICAgIFxnZXRmaWxlbmFtZXsjNH0lCisgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICUgU2VlIGNvbW1lbnRzIGF0IFxhY3RpdmViYWNrc2xhc2hkb3VibGUuCisgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZnhyZWZkZXN0eyMxfSUKKyAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmeHJlZmRlc3R9JQorICAgICAlCisgICAgIFxpZm51bVxmaWxlbmFtZWxlbmd0aD4wCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZnhyZWZkZXN0fX0lCisgICAgIFxmaQorICAgIH0lCisgICAgXGxpbmtjb2xvcgorICBcZmkKKyAgJQorICAlIEZsb2F0IHJlZmVyZW5jZXMgYXJlIHByaW50ZWQgY29tcGxldGVseSBkaWZmZXJlbnRseTogIkZpZ3VyZSAxLjIiCisgICUgaW5zdGVhZCBvZiAiW3NvbWVub2RlXSwgcC4zIi4gIFdlIGRpc3Rpbmd1aXNoIHRoZW0gYnkgdGhlCisgICUgTEFCRUwtdGl0bGUgYmVpbmcgc2V0IHRvIGEgbWFnaWMgc3RyaW5nLgorICB7JQorICAgICUgSGF2ZSB0byBvdGhlcmlmeSBldmVyeXRoaW5nIHNwZWNpYWwgdG8gYWxsb3cgdGhlIFxjc25hbWUgdG8KKyAgICAlIGluY2x1ZGUgYW4gXyBpbiB0aGUgeHJlZiBuYW1lLCBldGMuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcWHRoaXNyZWZ0aXRsZQorICAgICAgXGNzbmFtZSBYUiMxLXRpdGxlXGVuZGNzbmFtZQorICB9JQorICBcaWZmbG9hdFxYdGhpc3JlZnRpdGxlCisgICAgJSBJZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIHByaW50IG5hbWUgKHRoaXJkIGFyZykgdG8gdGhlIHJlZiwKKyAgICAlIHByaW50IGl0IGluc3RlYWQgb2Ygb3VyIHVzdWFsICJGaWd1cmUgMS4yIi4KKyAgICBcaWZkaW1cd2QwID0gMHB0CisgICAgICBccmVmeHsjMS1zbnR9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRzZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGdkZWZcY3NuYW1lIFhSIzFcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmIHZhbHVlLgorICAlCisgICUgV2FzIHRoYXQgeHJlZiBjb250cm9sIHNlcXVlbmNlIHRoYXQgd2UganVzdCBkZWZpbmVkIGZvciBhIGZsb2F0PworICBcZXhwYW5kYWZ0ZXJcaWZmbG9hdFxjc25hbWUgWFIjMVxlbmRjc25hbWUKKyAgICAlIGl0IHdhcyBhIGZsb2F0LCBhbmQgd2UgaGF2ZSB0aGUgKHNhZmUpIGZsb2F0IHR5cGUgaW4gXGlmZmxvYXR0eXBlLgorICAgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcZmxvYXRsaXN0CisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICAlCisgICAgJSBJcyB0aGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBmbG9hdCB0eXBlPworICAgIFxleHBhbmRhZnRlclxpZnhcZmxvYXRsaXN0XHJlbGF4CisgICAgICBcdG9rczAgPSB7XGRvfSUgeWVzLCBzbyBqdXN0IFxkbworICAgIFxlbHNlCisgICAgICAlIGhhZCBpdCBiZWZvcmUsIHNvIHByZXNlcnZlIHByZXZpb3VzIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XGZsb2F0bGlzdFxkb30lCisgICAgXGZpCisgICAgJQorICAgICUgUmVtZW1iZXIgdGhpcyB4cmVmIGluIHRoZSBjb250cm9sIHNlcXVlbmNlIFxmbG9hdGxpc3RGTE9BVFRZUEUsCisgICAgJSBmb3IgbGF0ZXIgdXNlIGluIFxsaXN0b2ZmbG9hdHMuCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWV7XHRoZVx0b2tzMHsjMX19JQorICBcZmkKK30KKworJSBSZWFkIHRoZSBsYXN0IGV4aXN0aW5nIGF1eCBmaWxlLCBpZiBhbnkuICBObyBlcnJvciBpZiBub25lIGV4aXN0cy4KKyUKK1xkZWZcdHJ5YXV4ZmlsZXslCisgIFxvcGVuaW4gMSBcam9ibmFtZS5hdXgKKyAgXGlmZW9mIDEgXGVsc2UKKyAgICBccmVhZGRhdGFmaWxle2F1eH0lCisgICAgXGdsb2JhbFxoYXZleHJlZnN0cnVlCisgIFxmaQorICBcY2xvc2VpbiAxCit9CisKK1xkZWZcc2V0dXBkYXRhZmlsZXslCisgIFxjYXRjb2RlYFxeXkA9XG90aGVyCisgIFxjYXRjb2RlYFxeXkE9XG90aGVyCisgIFxjYXRjb2RlYFxeXkI9XG90aGVyCisgIFxjYXRjb2RlYFxeXkM9XG90aGVyCisgIFxjYXRjb2RlYFxeXkQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXkU9XG90aGVyCisgIFxjYXRjb2RlYFxeXkY9XG90aGVyCisgIFxjYXRjb2RlYFxeXkc9XG90aGVyCisgIFxjYXRjb2RlYFxeXkg9XG90aGVyCisgIFxjYXRjb2RlYFxeXks9XG90aGVyCisgIFxjYXRjb2RlYFxeXkw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk49XG90aGVyCisgIFxjYXRjb2RlYFxeXlA9XG90aGVyCisgIFxjYXRjb2RlYFxeXlE9XG90aGVyCisgIFxjYXRjb2RlYFxeXlI9XG90aGVyCisgIFxjYXRjb2RlYFxeXlM9XG90aGVyCisgIFxjYXRjb2RlYFxeXlQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXlU9XG90aGVyCisgIFxjYXRjb2RlYFxeXlY9XG90aGVyCisgIFxjYXRjb2RlYFxeXlc9XG90aGVyCisgIFxjYXRjb2RlYFxeXlg9XG90aGVyCisgIFxjYXRjb2RlYFxeXlo9XG90aGVyCisgIFxjYXRjb2RlYFxeXls9XG90aGVyCisgIFxjYXRjb2RlYFxeXlw9XG90aGVyCisgIFxjYXRjb2RlYFxeXl09XG90aGVyCisgIFxjYXRjb2RlYFxeXl49XG90aGVyCisgIFxjYXRjb2RlYFxeXl89XG90aGVyCisgICUgSXQgd2FzIHN1Z2dlc3RlZCB0byBzZXQgdGhlIGNhdGNvZGUgb2YgXiB0byA3LCB3aGljaCB3b3VsZCBhbGxvdyBeXmU0IGV0Yy4KKyAgJSBpbiB4cmVmIHRhZ3MsIGkuZS4sIG5vZGUgbmFtZXMuICBCdXQgc2luY2UgXl5lNCBub3RhdGlvbiBpc24ndAorICAlIHN1cHBvcnRlZCBpbiB0aGUgbWFpbiB0ZXh0LCBpdCBkb2Vzbid0IHNlZW0gZGVzaXJhYmxlLiAgRnVydGhlcm1vcmUsCisgICUgdGhhdCBpcyBub3QgZW5vdWdoOiBmb3Igbm9kZSBuYW1lcyB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gYSBeCisgICUgY2hhcmFjdGVyLCB3ZSB3b3VsZCBlbmQgdXAgd3JpdGluZyBhIGxpbmUgbGlrZSB0aGlzOiAneHJkZWYgeydoYXQKKyAgJSBiLXRpdGxlfXsnaGF0IGJ9IGFuZCBceHJkZWYgZG9lcyBhIFxjc25hbWUuLi5cZW5kY3NuYW1lIG9uIHRoZSBmaXJzdAorICAlIGFyZ3VtZW50LCBhbmQgXGhhdCBpcyBub3QgYW4gZXhwYW5kYWJsZSBjb250cm9sIHNlcXVlbmNlLiAgSXQgY291bGQKKyAgJSBhbGwgYmUgd29ya2VkIG91dCwgYnV0IHdoeT8gIEVpdGhlciB3ZSBzdXBwb3J0IF5eIG9yIHdlIGRvbid0LgorICAlCisgICUgVGhlIG90aGVyIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoaXMgd2FzIHRvIGRlZmluZSBcYXV4aGF0OgorICAlIFxkZWZcYXV4aGF0e1xkZWZeeydoYXQgfX0lIGV4dHJhIHNwYWNlIHNvIG9rIGlmIGZvbGxvd2VkIGJ5IGxldHRlcgorICAlIGFuZCB0aGVuIHRvIGNhbGwgXGF1eGhhdCBpbiBcc2V0cS4KKyAgJQorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgJQorICAlIFNwZWNpYWwgY2hhcmFjdGVycy4gIFNob3VsZCBiZSB0dXJuZWQgb2ZmIGFueXdheSwgYnV0Li4uCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcY2F0Y29kZWBcWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF09XG90aGVyCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXCQ9XG90aGVyCisgIFxjYXRjb2RlYFwjPVxvdGhlcgorICBcY2F0Y29kZWBcJj1cb3RoZXIKKyAgXGNhdGNvZGVgXCU9XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyICUgYXZvaWQgXCsgZm9yIHBhcmFub2lhIGV2ZW4gdGhvdWdoIHdlJ3ZlIHR1cm5lZCBpdCBvZmYKKyAgJQorICAlIFRoaXMgaXMgdG8gc3VwcG9ydCBcIGluIG5vZGUgbmFtZXMgYW5kIHRpdGxlcywgc2luY2UgdGhlIFwKKyAgJSBjaGFyYWN0ZXJzIGVuZCB1cCBpbiBhIFxjc25hbWUuICBJdCdzIGVhc2llciB0aGFuCisgICUgbGVhdmluZyBpdCBhY3RpdmUgYW5kIG1ha2luZyBpdHMgYWN0aXZlIGRlZmluaXRpb24gYW4gYWN0dWFsIFwKKyAgJSBjaGFyYWN0ZXIuICBXaGF0IEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyB3aHkgaXQgd29ya3MgaW4gdGhlICp2YWx1ZSoKKyAgJSBvZiB0aGUgeHJkZWYuICBTZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGNhdGNvZGUxMiBcLCBhbmQgdGhhdAorICAlIHNob3VsZCBub3QgdHlwZXNldCBwcm9wZXJseS4gIEJ1dCBpdCB3b3Jrcywgc28gSSdtIG1vdmluZyBvbiBmb3IKKyAgJSBub3cuICAtLWthcmwsIDE1amFuMDQuCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAlCisgICUgTWFrZSB0aGUgY2hhcmFjdGVycyAxMjgtMjU1IGJlIHByaW50aW5nIGNoYXJhY3RlcnMuCisgIHslCisgICAgXGNvdW50MT0xMjgKKyAgICBcZGVmXGxvb3B7JQorICAgICAgXGNhdGNvZGVcY291bnQxPVxvdGhlcgorICAgICAgXGFkdmFuY2VcY291bnQxIGJ5IDEKKyAgICAgIFxpZm51bSBcY291bnQxPDI1NiBcbG9vcCBcZmkKKyAgICB9JQorICB9JQorICAlCisgICUgQCBpcyBvdXIgZXNjYXBlIGNoYXJhY3RlciBpbiAuYXV4IGZpbGVzLCBhbmQgd2UgbmVlZCBicmFjZXMuCisgIFxjYXRjb2RlYFx7PTEKKyAgXGNhdGNvZGVgXH09MgorICBcY2F0Y29kZWBcQD0wCit9CisKK1xkZWZccmVhZGRhdGFmaWxlIzF7JQorXGJlZ2luZ3JvdXAKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGlucHV0XGpvYm5hbWUuIzEKK1xlbmRncm91cH0KKworXG1lc3NhZ2V7aW5zZXJ0aW9ucyx9CislIGluY2x1ZGluZyBmb290bm90ZXMuCisKK1xuZXdjb3VudCBcZm9vdG5vdGVubworCislIFRoZSB0cmFpbGluZyBzcGFjZSBpbiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gZm9yIHN1cGVyZWplY3QgaXMKKyUgdml0YWwgZm9yIHByb3BlciBmaWxsaW5nOyBwYWdlcyBjb21lIG91dCB1bmFsaWduZWQgd2hlbiB5b3UgZG8gYQorJSBwYWdlYWxpZ25tYWNybyBjYWxsIGlmIHRoYXQgc3BhY2UgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlIGlzCislIHJlbW92ZWQuIChHZW5lcmFsbHksIG51bWVyaWMgY29uc3RhbnRzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgYQorJSBzcGFjZSB0byBwcmV2ZW50IHN0cmFuZ2UgZXhwYW5zaW9uIGVycm9ycy4pCitcZGVmXHN1cGVyZWplY3R7XHBhclxwZW5hbHR5IC0yMDAwMFxmb290bm90ZW5vID0wIH0KKworJSBAZm9vdG5vdGVzdHlsZSBpcyBtZWFuaW5nZnVsIGZvciBpbmZvIG91dHB1dCBvbmx5LgorXGxldFxmb290bm90ZXN0eWxlPVxjb21tZW50CisKK3tcY2F0Y29kZSBgXEA9MTEKKyUKKyUgQXV0by1udW1iZXIgZm9vdG5vdGVzLiAgT3RoZXJ3aXNlIGxpa2UgcGxhaW4uCitcZ2RlZlxmb290bm90ZXslCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcZ2xvYmFsXGFkdmFuY2VcZm9vdG5vdGVubyBieSBcQG5lCisgIFxlZGVmXHRoaXNmb290bm97JF57XHRoZVxmb290bm90ZW5vfSR9JQorICAlCisgICUgSW4gY2FzZSB0aGUgZm9vdG5vdGUgY29tZXMgYXQgdGhlIGVuZCBvZiBhIHNlbnRlbmNlLCBwcmVzZXJ2ZSB0aGUKKyAgJSBleHRyYSBzcGFjaW5nIGFmdGVyIHdlIGRvIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFxsZXRcQHNmXGVtcHR5CisgIFxpZmhtb2RlXGVkZWZcQHNme1xzcGFjZWZhY3Rvclx0aGVcc3BhY2VmYWN0b3J9XHB0ZXhzbGFzaFxmaQorICAlCisgICUgUmVtb3ZlIGluYWR2ZXJ0ZW50IGJsYW5rIHNwYWNlIGJlZm9yZSB0eXBlc2V0dGluZyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcdW5za2lwCisgIFx0aGlzZm9vdG5vXEBzZgorICBcZG9mb290bm90ZQorfSUKKworJSBEb24ndCBib3RoZXIgd2l0aCB0aGUgdHJpY2tlcnkgaW4gcGxhaW4udGV4IHRvIG5vdCByZXF1aXJlIHRoZQorJSBmb290bm90ZSB0ZXh0IGFzIGEgcGFyYW1ldGVyLiAgT3VyIGZvb3Rub3RlcyBkb24ndCBuZWVkIHRvIGJlIHNvIGdlbmVyYWwuCislCislIE9oIHllcywgdGhleSBkbzsgb3RoZXJ3aXNlLCBAaWZzZXQgKGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcworJSBccGFyc2VhcmdsaW5lKSBmYWlscyBpbnNpZGUgZm9vdG5vdGVzIGJlY2F1c2UgdGhlIHRva2VucyBhcmUgZml4ZWQgd2hlbgorJSB0aGUgZm9vdG5vdGUgaXMgcmVhZC4gIC0ta2FybCwgMTZub3Y5Ni4KKyUKK1xnZGVmXGRvZm9vdG5vdGV7JQorICBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwCisgICUgV2Ugd2FudCB0byB0eXBlc2V0IHRoaXMgdGV4dCBhcyBhIG5vcm1hbCBwYXJhZ3JhcGgsIGV2ZW4gaWYgdGhlCisgICUgZm9vdG5vdGUgcmVmZXJlbmNlIG9jY3VycyBpbiAoZm9yIGV4YW1wbGUpIGEgZGlzcGxheSBlbnZpcm9ubWVudC4KKyAgJSBTbyByZXNldCBzb21lIHBhcmFtZXRlcnMuCisgIFxoc2l6ZT1ccGFnZXdpZHRoCisgIFxpbnRlcmxpbmVwZW5hbHR5XGludGVyZm9vdG5vdGVsaW5lcGVuYWx0eQorICBcc3BsaXR0b3Bza2lwXGh0XHN0cnV0Ym94ICUgdG9wIGJhc2VsaW5lIGZvciBicm9rZW4gZm9vdG5vdGVzCisgIFxzcGxpdG1heGRlcHRoXGRwXHN0cnV0Ym94CisgIFxmbG9hdGluZ3BlbmFsdHlcQE1NCisgIFxsZWZ0c2tpcFx6QHNraXAKKyAgXHJpZ2h0c2tpcFx6QHNraXAKKyAgXHNwYWNlc2tpcFx6QHNraXAKKyAgXHhzcGFjZXNraXBcekBza2lwCisgIFxwYXJpbmRlbnRcZGVmYXVsdHBhcmluZGVudAorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICAlCisgICUgQmVjYXVzZSB3ZSB1c2UgaGFuZ2luZyBpbmRlbnRhdGlvbiBpbiBmb290bm90ZXMsIGEgQG5vaW5kZW50IGFwcGVhcnMKKyAgJSB0byBleGRlbnQgdGhpcyB0ZXh0LCBzbyBtYWtlIGl0IGJlIGEgbm8tb3AuICBtYWtlaW5mbyBkb2VzIG5vdCB1c2UKKyAgJSBoYW5naW5nIGluZGVudGF0aW9uIHNvIEBub2luZGVudCBjYW4gc3RpbGwgYmUgbmVlZGVkIHdpdGhpbiBmb290bm90ZQorICAlIHRleHQgYWZ0ZXIgYW4gQGV4YW1wbGUgb3IgdGhlIGxpa2UgKG5vdCB0aGF0IHRoaXMgaXMgZ29vZCBzdHlsZSkuCisgIFxsZXRcbm9pbmRlbnQgPSBccmVsYXgKKyAgJQorICAlIEhhbmcgdGhlIGZvb3Rub3RlIHRleHQgb2ZmIHRoZSBudW1iZXIuICBVc2UgXGV2ZXJ5cGFyIGluIGNhc2UgdGhlCisgICUgZm9vdG5vdGUgZXh0ZW5kcyBmb3IgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGguCisgIFxldmVyeXBhciA9IHtcaGFuZ30lCisgIFx0ZXh0aW5kZW50e1x0aGlzZm9vdG5vfSUKKyAgJQorICAlIERvbid0IGNyYXNoIGludG8gdGhlIGxpbmUgYWJvdmUgdGhlIGZvb3Rub3RlIHRleHQuICBTaW5jZSB0aGlzCisgICUgZXhwYW5kcyBpbnRvIGEgYm94LCBpdCBtdXN0IGNvbWUgd2l0aGluIHRoZSBwYXJhZ3JhcGgsIGxlc3QgaXQKKyAgJSBwcm92aWRlIGEgcGxhY2Ugd2hlcmUgVGVYIGNhbiBzcGxpdCB0aGUgZm9vdG5vdGUuCisgIFxmb290c3RydXQKKyAgXGZ1dHVyZWxldFxuZXh0XGZvQHQKK30KK30lZW5kIFxjYXRjb2RlIGBcQD0xMQorCislIEluIGNhc2UgYSBAZm9vdG5vdGUgYXBwZWFycyBpbiBhIHZib3gsIHNhdmUgdGhlIGZvb3Rub3RlIHRleHQgYW5kIGNyZWF0ZQorJSB0aGUgcmVhbCBcaW5zZXJ0IGp1c3QgYWZ0ZXIgdGhlIHZib3ggZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24KKyUgd291bGQgYmUgbG9zdC4KKyUgU2ltaWxhcmlseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSB0ZXh0IHRvIGEgYm94IGFuZCBtYWtlIHRoZSBcaW5zZXJ0IHdoZW4gYSByb3cgb2YgdGhlIHRhYmxlIGlzIGZpbmlzaGVkLgorJSBBbmQgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIG90aGVyIGluc2VydCBjbGFzc2VzLiAgLS1rYXNhbCwgMTZub3YwMy4KKworJSBSZXBsYWNlIHRoZSBcaW5zZXJ0IHByaW1pdGl2ZSBieSBhIGNoZWF0aW5nIG1hY3JvLgorJSBEZWVwZXIgaW5zaWRlLCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBzYXZlZCBpbnNlcnRpb25zIGFyZSBub3Qgc3BpbGxlZAorJSBvdXQgcHJlbWF0dXJlbHkuCislCitcZGVmXHN0YXJ0c2F2aW5naW5zZXJ0c3slCisgIFxpZnggXGluc2VydFxwdGV4aW5zZXJ0CisgICAgXGxldFxpbnNlcnRcc2F2ZWluc2VydAorICBcZWxzZQorICAgIFxsZXRcY2hlY2tpbnNlcnRzXHJlbGF4CisgIFxmaQorfQorCislIFRoaXMgXGluc2VydCByZXBsYWNlbWVudCB3b3JrcyBmb3IgYm90aCBcaW5zZXJ0XGZvb3RpbnN7Zm9vfSBhbmQKKyUgXGluc2VydFxmb290aW5zXGJncm91cCBmb29cZWdyb3VwLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBcaW5zZXJ0Mjd7Zm9vfS4KKyUKK1xkZWZcc2F2ZWluc2VydCMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcc2F2ZXRvYm94IFxtYWtlU0FWRW5hbWUjMX0lCisgIFxhZnRlcmFzc2lnbm1lbnRcbmV4dAorICAlIHN3YWxsb3cgdGhlIGxlZnQgYnJhY2UKKyAgXGxldFx0ZW1wID0KK30KK1xkZWZcbWFrZVNBVkVuYW1lIzF7XG1ha2Vjc25hbWV7U0FWRVxleHBhbmRhZnRlclxnb2JibGVcc3RyaW5nIzF9fQorXGRlZlxzYXZldG9ib3gjMXtcZ2xvYmFsXHNldGJveCMxID0gXHZib3hcYmdyb3VwIFx1bnZib3gjMX0KKworXGRlZlxjaGVja3NhdmVpbnMjMXtcaWZ2b2lkIzFcZWxzZSBccGxhY2VzYXZlaW5zIzFcZml9CisKK1xkZWZccGxhY2VzYXZlaW5zIzF7JQorICBccHRleGluc2VydCBcY3NuYW1lXGV4cGFuZGFmdGVyXGdvYmJsZXNhdmVcc3RyaW5nIzFcZW5kY3NuYW1lCisgICAge1xib3gjMX0lCit9CisKKyUgZWF0IEBTQVZFIC0tIGJld2FyZSwgYWxsIG9mIHRoZW0gaGF2ZSBjYXRjb2RlIFxvdGhlcjoKK3sKKyAgXGRlZlxkb3NwZWNpYWxze1xkbyBTXGRvIEFcZG8gVlxkbyBFfSBcdW5jYXRjb2Rlc3BlY2lhbHMgICUgIDstKQorICBcZ2RlZlxnb2JibGVzYXZlIEBTQVZFe30KK30KKworJSBpbml0aWFsaXphdGlvbjoKK1xkZWZcbmV3c2F2ZWlucyAjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXG5ld3NhdmVpbnNYIFxtYWtlU0FWRW5hbWUjMX0lCisgIFxuZXh0Cit9CitcZGVmXG5ld3NhdmVpbnNYICMxeyUKKyAgXGNzbmFtZSBuZXdib3hcZW5kY3NuYW1lICMxJQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXGNoZWNraW5zZXJ0c1xleHBhbmRhZnRlcntcY2hlY2tpbnNlcnRzCisgICAgXGNoZWNrc2F2ZWlucyAjMX0lCit9CisKKyUgaW5pdGlhbGl6ZToKK1xsZXRcY2hlY2tpbnNlcnRzXGVtcHR5CitcbmV3c2F2ZWluc1xmb290aW5zCitcbmV3c2F2ZWluc1xtYXJnaW4KKworCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgICUgRG8gbm90IGJvdGhlciBzaG93aW5nIGJhbm5lciB3aXRoIGVwc2YudGV4IHYyLjdrIChhdmFpbGFibGUgaW4KKyAgJSBkb2MvZXBzZi50ZXggYW5kIG9uIGN0YW4pLgorICBcZGVmXGVwc2Zhbm5vdW5jZXtcdG9rczAgPSB9JQorICBcaW5wdXQgZXBzZi50ZXgKK1xmaQorXGNsb3NlaW4gMQorJQorJSBXZSB3aWxsIG9ubHkgY29tcGxhaW4gb25jZSBhYm91dCBsYWNrIG9mIGVwc2YudGV4LgorXG5ld2lmXGlmd2FybmVkbm9lcHNmCitcbmV3aGVscFxub2Vwc2ZoZWxwe2Vwc2YudGV4IG11c3QgYmUgaW5zdGFsbGVkIGZvciBpbWFnZXMgdG8KKyAgd29yay4gIEl0IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFRleGluZm8gZGlzdHJpYnV0aW9uLCBvciB5b3UgY2FuIGdldAorICBpdCBmcm9tIGZ0cDovL3R1Zy5vcmcvdGV4L2Vwc2YudGV4Ln0KKyUKK1xkZWZcaW1hZ2UjMXslCisgIFxpZnhcZXBzZmJveFx1bmRlZmluZWQKKyAgICBcaWZ3YXJuZWRub2Vwc2YgXGVsc2UKKyAgICAgIFxlcnJoZWxwID0gXG5vZXBzZmhlbHAKKyAgICAgIFxlcnJtZXNzYWdle2Vwc2YudGV4IG5vdCBmb3VuZCwgaW1hZ2VzIHdpbGwgYmUgaWdub3JlZH0lCisgICAgICBcZ2xvYmFsXHdhcm5lZG5vZXBzZnRydWUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaW1hZ2V4eHggIzEsLCwsLFxmaW5pc2gKKyAgXGZpCit9CislCislIEFyZ3VtZW50cyB0byBAaW1hZ2U6CislICMxIGlzIChtYW5kYXRvcnkpIGltYWdlIGZpbGVuYW1lOyB3ZSB0YWNrIG9uIC5lcHMgZXh0ZW5zaW9uLgorJSAjMiBpcyAob3B0aW9uYWwpIHdpZHRoLCAjMyBpcyAob3B0aW9uYWwpIGhlaWdodC4KKyUgIzQgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGh0bWwgYWx0IHRleHQuCislICM1IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBleHRlbnNpb24uCislICM2IGlzIGp1c3QgdGhlIHVzdWFsIGV4dHJhIGlnbm9yZWQgYXJnIGZvciBwYXJzaW5nIHRoaXMgc3R1ZmYuCitcbmV3aWZcaWZpbWFnZXZtb2RlCitcZGVmXGltYWdleHh4IzEsIzIsIzMsIzQsIzUsIzZcZmluaXNoe1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXk0gPSA1ICAgICAlIGluIGNhc2Ugd2UncmUgaW5zaWRlIGFuIGV4YW1wbGUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgYWxsb3cgXyBldCBhbC4gaW4gbmFtZXMKKyAgJSBJZiB0aGUgaW1hZ2UgaXMgYnkgaXRzZWxmLCBjZW50ZXIgaXQuCisgIFxpZnZtb2RlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXG5vYnJlYWtcYmlnc2tpcAorICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCisgICAgJSBhYm92ZSBhbmQgYmVsb3cuCisgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAorICAgIFxub2JyZWFrCisgICAgXGxpbmVcYmdyb3VwXGhzcworICBcZmkKKyAgJQorICAlIE91dHB1dCB0aGUgaW1hZ2UuCisgIFxpZnBkZgorICAgIFxkb3BkZmltYWdleyMxfXsjMn17IzN9JQorICBcZWxzZQorICAgICUgXGVwc2Zib3ggaXRzZWxmIHJlc2V0cyBcZXBzZj9zaXplIGF0IGVhY2ggZmlndXJlLgorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxlcHNmeHNpemU9IzJccmVsYXggXGZpCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z5c2l6ZT0jM1xyZWxheCBcZmkKKyAgICBcZXBzZmJveHsjMS5lcHN9JQorICBcZmkKKyAgJQorICBcaWZpbWFnZXZtb2RlIFxoc3MgXGVncm91cCBcYmlnYnJlYWsgXGZpICAlIHNwYWNlIGFmdGVyIHRoZSBpbWFnZQorXGVuZGdyb3VwfQorCisKKyUgQGZsb2F0IEZMT0FUVFlQRSxMQUJFTCxMT0MgLi4uIEBlbmQgZmxvYXQgZm9yIGRpc3BsYXllZCBmaWd1cmVzLCB0YWJsZXMsCislIGV0Yy4gIFdlIGRvbid0IGFjdHVhbGx5IGltcGxlbWVudCBmbG9hdGluZyB5ZXQsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZQorJSBmbG9hdCAiaGVyZSIuICBCdXQgaXQgc2VlbWVkIHRoZSBiZXN0IG5hbWUgZm9yIHRoZSBmdXR1cmUuCislCitcZW52cGFyc2VhcmdkZWZcZmxvYXR7XGVhdGNvbW1hc3BhY2VcZWF0Y29tbWFzcGFjZVxkb2Zsb2F0IzEsICwgLFxmaW5pc2h9CisKKyUgVGhlcmUgbWF5IGJlIGEgc3BhY2UgYmVmb3JlIHNlY29uZCBhbmQvb3IgdGhpcmQgcGFyYW1ldGVyOyBkZWxldGUgaXQuCitcZGVmXGVhdGNvbW1hc3BhY2UjMSwgeyMxLH0KKworJSAjMSBpcyB0aGUgb3B0aW9uYWwgRkxPQVRUWVBFLCB0aGUgdGV4dCBsYWJlbCBmb3IgdGhpcyBmbG9hdCwgdHlwaWNhbGx5CislICJGaWd1cmUiLCAiVGFibGUiLCAiRXhhbXBsZSIsIGV0Yy4gIENhbid0IGNvbnRhaW4gY29tbWFzLiAgSWYgb21pdHRlZCwKKyUgdGhpcyBmbG9hdCB3aWxsIG5vdCBiZSBudW1iZXJlZCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvLgorJQorJSAjMiBpcyB0aGUgb3B0aW9uYWwgeHJlZiBsYWJlbC4gIEFsc28gbXVzdCBiZSBwcmVzZW50IGZvciB0aGUgZmxvYXQgdG8KKyUgYmUgcmVmZXJhYmxlLgorJQorJSAjMyBpcyB0aGUgb3B0aW9uYWwgcG9zaXRpb25pbmcgYXJndW1lbnQ7IGZvciBub3csIGl0IGlzIGlnbm9yZWQuICBJdAorJSB3aWxsIHNvbWVob3cgc3BlY2lmeSB0aGUgcG9zaXRpb25zIGFsbG93ZWQgdG8gZmxvYXQgdG8gKGhlcmUsIHRvcCwgYm90dG9tKS4KKyUKKyUgV2Uga2VlcCBhIHNlcGFyYXRlIGNvdW50ZXIgZm9yIGVhY2ggRkxPQVRUWVBFLCB3aGljaCB3ZSByZXNldCBhdCBlYWNoCislIGNoYXB0ZXItbGV2ZWwgY29tbWFuZC4KK1xsZXRccmVzZXRhbGxmbG9hdG5vcz1cZW1wdHkKKyUKK1xkZWZcZG9mbG9hdCMxLCMyLCMzLCM0XGZpbmlzaHslCisgIFxsZXRcdGhpc2NhcHRpb249XGVtcHR5CisgIFxsZXRcdGhpc3Nob3J0Y2FwdGlvbj1cZW1wdHkKKyAgJQorICAlIGRvbid0IGxvc2UgZm9vdG5vdGVzIGluc2lkZSBAZmxvYXQuCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBXZSBjYW4ndCBiZSB1c2VkIGluc2lkZSBhIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgIFx2dG9wXGJncm91cAorICAgIFxkZWZcZmxvYXR0eXBleyMxfSUKKyAgICBcZGVmXGZsb2F0bGFiZWx7IzJ9JQorICAgIFxkZWZcZmxvYXRsb2N7IzN9JSB3ZSBkbyBub3RoaW5nIHdpdGggdGhpcyB5ZXQuCisgICAgJQorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5CisgICAgICBcbGV0XHNhZmVmbG9hdHR5cGU9XGVtcHR5CisgICAgXGVsc2UKKyAgICAgIHslCisgICAgICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICAgICAgXGluZGV4bm9mb250cworICAgICAgICBcdHVybm9mZmFjdGl2ZQorICAgICAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBsYWJlbCBpcyBnaXZlbiBidXQgbm8gdHlwZSwgd2UgaGFuZGxlIHRoYXQgYXMgdGhlIGVtcHR5IHR5cGUuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdlIHdhbnQgZWFjaCBGTE9BVFRZUEUgdG8gYmUgbnVtYmVyZWQgc2VwYXJhdGVseSAoRmlndXJlIDEsCisgICAgICAlIFRhYmxlIDEsIEZpZ3VyZSAyLCAuLi4pLiAgKEFuZCBpZiBubyBsYWJlbCwgbm8gbnVtYmVyLikKKyAgICAgICUKKyAgICAgIFxleHBhbmRhZnRlclxnZXRmbG9hdG5vXGNzbmFtZVxzYWZlZmxvYXR0eXBlIGZsb2F0bm9cZW5kY3NuYW1lCisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZmxvYXRubyBieSAxCisgICAgICAlCisgICAgICB7JQorICAgICAgICAlIFRoaXMgbWFnaWMgdmFsdWUgZm9yIFx0aGlzc2VjdGlvbiBpcyBvdXRwdXQgYnkgXHNldHJlZiBhcyB0aGUKKyAgICAgICAgJSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUuICBceHJlZlggdXNlcyBpdCB0byBkaXN0aW5ndWlzaCBmbG9hdAorICAgICAgICAlIGxhYmVscyAod2hpY2ggaGF2ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXQpIGZyb20KKyAgICAgICAgJSBub2RlIGFuZCBhbmNob3IgbGFiZWxzLiAgQW5kIFx4cmRlZiB1c2VzIGl0IHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgJSBsaXN0cyBvZiBmbG9hdHMuCisgICAgICAgICUKKyAgICAgICAgXGVkZWZcdGhpc3NlY3Rpb257XGZsb2F0bWFnaWM9XHNhZmVmbG9hdHR5cGV9JQorICAgICAgICBcc2V0cmVme1xmbG9hdGxhYmVsfXtZZmxvYXR9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBzdGFydCB3aXRoIFxwYXJza2lwIGdsdWUsIEkgZ3Vlc3MuCisgICAgXHZza2lwXHBhcnNraXAKKyAgICAlCisgICAgJSBEb24ndCBzdXBwcmVzcyBpbmRlbnRhdGlvbiBpZiBhIGZsb2F0IGhhcHBlbnMgdG8gc3RhcnQgYSBzZWN0aW9uLgorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSB3ZSBoYXZlIHRoZXNlIHBvc3NpYmlsaXRpZXM6CislIEBmbG9hdCBGb28sbGJsICYgQGNhcHRpb257Q2FwfTogRm9vIDEuMTogQ2FwCislIEBmbG9hdCBGb28sbGJsICYgbm8gY2FwdGlvbjogICAgRm9vIDEuMQorJSBAZmxvYXQgRm9vICYgQGNhcHRpb257Q2FwfTogICAgIEZvbzogQ2FwCislIEBmbG9hdCBGb28gJiBubyBjYXB0aW9uOiAgICAgICAgRm9vCislIEBmbG9hdCAsbGJsICYgQ2FwdGlvbntDYXB9OiAgICAgMS4xOiBDYXAKKyUgQGZsb2F0ICxsYmwgJiBubyBjYXB0aW9uOiAgICAgICAxLjEKKyUgQGZsb2F0ICYgQGNhcHRpb257Q2FwfTogICAgICAgICBDYXAKKyUgQGZsb2F0ICYgbm8gY2FwdGlvbjoKKyUKK1xkZWZcRWZsb2F0eyUKKyAgICBcbGV0XGZsb2F0aWRlbnQgPSBcZW1wdHkKKyAgICAlCisgICAgJSBJbiBhbGwgY2FzZXMsIGlmIHdlIGhhdmUgYSBmbG9hdCB0eXBlLCBpdCBjb21lcyBmaXJzdC4KKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSBcZGVmXGZsb2F0aWRlbnR7XGZsb2F0dHlwZX1cZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFuIHhyZWYgbGFiZWwsIHRoZSBudW1iZXIgY29tZXMgbmV4dC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlICUgaWYgYWxzbyBoYWQgZmxvYXQgdHlwZSwgbmVlZCB0aWUgZmlyc3QuCisgICAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XHRpZX0lCisgICAgICBcZmkKKyAgICAgICUgdGhlIG51bWJlci4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisgICAgXGZpCisgICAgJQorICAgICUgU3RhcnQgdGhlIHByaW50ZWQgY2FwdGlvbiB3aXRoIHdoYXQgd2UndmUgY29uc3RydWN0ZWQgaW4KKyAgICAlIFxmbG9hdGlkZW50LCBidXQga2VlcCBpdCBzZXBhcmF0ZTsgd2UgbmVlZCBcZmxvYXRpZGVudCBhZ2Fpbi4KKyAgICBcbGV0XGNhcHRpb25saW5lID0gXGZsb2F0aWRlbnQKKyAgICAlCisgICAgXGlmeFx0aGlzY2FwdGlvblxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdGlkZW50XGVtcHR5IFxlbHNlCisJXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7OiB9JSBoYWQgaWRlbnQsIHNvIG5lZWQgYSBjb2xvbiBiZXR3ZWVuCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgICUgY2FwdGlvbiB0ZXh0LgorICAgICAgXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7XHNjYW5leHBcdGhpc2NhcHRpb259JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gcHJpbnQsIHByaW50IGl0LCB3aXRoIHNwYWNlIGJlZm9yZS4KKyAgICAlIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZWNvbWUgYW4gXGluc2VydC4KKyAgICBcaWZ4XGNhcHRpb25saW5lXGVtcHR5IFxlbHNlCisgICAgICBcdnNraXAuNVxwYXJza2lwCisgICAgICBcY2FwdGlvbmxpbmUKKyAgICAgICUKKyAgICAgICUgU3BhY2UgYmVsb3cgY2FwdGlvbi4KKyAgICAgIFx2c2tpcFxwYXJza2lwCisgICAgXGZpCisgICAgJQorICAgICUgSWYgaGF2ZSBhbiB4cmVmIGxhYmVsLCB3cml0ZSB0aGUgbGlzdCBvZiBmbG9hdHMgaW5mby4gIERvIHRoaXMKKyAgICAlIGFmdGVyIHRoZSBjYXB0aW9uLCB0byBhdm9pZCBjaGFuY2Ugb2YgaXQgYmVpbmcgYSBicmVha3BvaW50LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXcml0ZSB0aGUgdGV4dCB0aGF0IGdvZXMgaW4gdGhlIGxvZiB0byB0aGUgYXV4IGZpbGUgYXMKKyAgICAgICUgXGZsb2F0bGFiZWwtbG9mLiAgQmVzaWRlcyBcZmxvYXRpZGVudCwgd2UgaW5jbHVkZSB0aGUgc2hvcnQKKyAgICAgICUgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2UgdGhlIGZ1bGwgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2Ugbm90aGluZy4KKyAgICAgIHslCisgICAgICAgIFxhdGR1bW1pZXMKKyAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KKyAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbworICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCisJXHNjYW5leHB7JQorCSAgXHhkZWZcbm9leHBhbmRcZ3RlbXB7JQorCSAgICBcaWZ4XHRoaXNzaG9ydGNhcHRpb25cZW1wdHkKKwkgICAgICBcdGhpc2NhcHRpb24KKwkgICAgXGVsc2UKKwkgICAgICBcdGhpc3Nob3J0Y2FwdGlvbgorCSAgICBcZmkKKwkgIH0lCisJfSUKKyAgICAgICAgXGltbWVkaWF0ZVx3cml0ZVxhdXhmaWxle0B4cmRlZntcZmxvYXRsYWJlbC1sb2Z9e1xmbG9hdGlkZW50CisJICBcaWZ4XGd0ZW1wXGVtcHR5IFxlbHNlIDogXGd0ZW1wIFxmaX19JQorICAgICAgfSUKKyAgICBcZmkKKyAgXGVncm91cCAgJSBlbmQgb2YgXHZ0b3AKKyAgJQorICAlIHBsYWNlIHRoZSBjYXB0dXJlZCBpbnNlcnRzCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcY2hlY2tpbnNlcnRzCit9CisKKyUgQXBwZW5kIHRoZSB0b2tlbnMgIzIgdG8gdGhlIGRlZmluaXRpb24gb2YgbWFjcm8gIzEsIG5vdCBleHBhbmRpbmcgZWl0aGVyLgorJQorXGRlZlxhcHBlbmR0b21hY3JvIzEjMnslCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXIjMVxleHBhbmRhZnRlcnsjMSMyfSUKK30KKworJSBAY2FwdGlvbiwgQHNob3J0Y2FwdGlvbgorJQorXGRlZlxjYXB0aW9ue1xkb2NhcHRpb25cdGhpc2NhcHRpb259CitcZGVmXHNob3J0Y2FwdGlvbntcZG9jYXB0aW9uXHRoaXNzaG9ydGNhcHRpb259CitcZGVmXGRvY2FwdGlvbntcY2hlY2tlbnZcZmxvYXQgXGJncm91cFxzY2FuYXJnY3R4dFxkZWZjYXB0aW9ufQorXGRlZlxkZWZjYXB0aW9uIzEjMntcZWdyb3VwIFxkZWYjMXsjMn19CisKKyUgVGhlIHBhcmFtZXRlciBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSBpZGVudGlmeWluZyB0aGUgY291bnRlciB3ZSBhcmUKKyUgZ29pbmcgdG8gdXNlLiAgQ3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIGFzc2lnbiBpdCB0byBcZmxvYXRuby4KK1xkZWZcZ2V0ZmxvYXRubyMxeyUKKyAgXGlmeCMxXHJlbGF4CisgICAgICAlIEhhdmVuJ3Qgc2VlbiB0aGlzIGZpZ3VyZSB0eXBlIGJlZm9yZS4KKyAgICAgIFxjc25hbWUgbmV3Y291bnRcZW5kY3NuYW1lICMxJQorICAgICAgJQorICAgICAgJSBSZW1lbWJlciB0byByZXNldCB0aGlzIGZsb2F0bm8gYXQgdGhlIG5leHQgY2hhcC4KKyAgICAgIFxleHBhbmRhZnRlclxnZGVmXGV4cGFuZGFmdGVyXHJlc2V0YWxsZmxvYXRub3MKKyAgICAgICAgXGV4cGFuZGFmdGVye1xyZXNldGFsbGZsb2F0bm9zICMxPTAgfSUKKyAgXGZpCisgIFxsZXRcZmxvYXRubyMxJQorfQorCislIFxzZXRyZWYgY2FsbHMgdGhpcyB0byBnZXQgdGhlIFhSRUZMQUJFTC1zbnQgdmFsdWUuICBXZSB3YW50IGFuIEB4cmVmCislIHRvIHRoZSBGTE9BVExBQkVMIHRvIGV4cGFuZCB0byAiRmlndXJlIDMuMSIuICBXZSBjYWxsIFxzZXRyZWYgd2hlbiB3ZQorJSBmaXJzdCByZWFkIHRoZSBAZmxvYXQgY29tbWFuZC4KKyUKK1xkZWZcWWZsb2F0e1xmbG9hdHR5cGVAdGllIFxjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorCislIE1hZ2ljIHN0cmluZyB1c2VkIGZvciB0aGUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLCBzbyBceHJlZlggY2FuCislIGRpc3Rpbmd1aXNoIGZsb2F0cyBmcm9tIG90aGVyIHhyZWYgdHlwZXMuCitcZGVmXGZsb2F0bWFnaWN7ISFmbG9hdCEhfQorCislICMxIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdlIGFyZSBwYXNzZWQ7IHdlIGV4cGFuZCBpbnRvIGEgY29uZGl0aW9uYWwKKyUgd2hpY2ggaXMgdHJ1ZSBpZiAjMSByZXByZXNlbnRzIGEgZmxvYXQgcmVmLiAgVGhhdCBpcywgdGhlIG1hZ2ljCislIFx0aGlzc2VjdGlvbiB2YWx1ZSB3aGljaCB3ZSBcc2V0cmVmIGFib3ZlLgorJQorXGRlZlxpZmZsb2F0IzF7XGV4cGFuZGFmdGVyXGRvaWZmbG9hdCMxPT1cZmluaXNofQorJQorJSAjMSBpcyAobWF5YmUpIHRoZSBcZmxvYXRtYWdpYyBzdHJpbmcuICBJZiBzbywgIzIgd2lsbCBiZSB0aGUKKyUgKHNhZmUpIGZsb2F0IHR5cGUgZm9yIHRoaXMgZmxvYXQuICBXZSBzZXQgXGlmZmxvYXR0eXBlIHRvICMyLgorJQorXGRlZlxkb2lmZmxvYXQjMT0jMj0jM1xmaW5pc2h7JQorICBcZGVmXHRlbXB7IzF9JQorICBcZGVmXGlmZmxvYXR0eXBleyMyfSUKKyAgXGlmeFx0ZW1wXGZsb2F0bWFnaWMKK30KKworJSBAbGlzdG9mZmxvYXRzIEZMT0FUVFlQRSAtIHByaW50IGEgbGlzdCBvZiBmbG9hdHMgbGlrZSBhIHRhYmxlIG9mIGNvbnRlbnRzLgorJQorXHBhcnNlYXJnZGVmXGxpc3RvZmZsb2F0c3slCisgIFxkZWZcZmxvYXR0eXBleyMxfSUgZmxvYXR0eXBlCisgIHslCisgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgfSUKKyAgJQorICAlIFx4cmRlZiBzYXZlcyB0aGUgZmxvYXRzIGFzIGEgXGRvLWxpc3QgaW4gXGZsb2F0bGlzdFNBRkVGTE9BVFRZUEUuCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZSBccmVsYXgKKyAgICBcaWZoYXZleHJlZnMKKyAgICAgICUgaWYgdGhlIHVzZXIgc2FpZCBAbGlzdG9mZmxvYXRzIGZvbyBidXQgbmV2ZXIgQGZsb2F0IGZvby4KKyAgICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIE5vIGBcc2FmZWZsb2F0dHlwZScgZmxvYXRzIHRvIGxpc3QufSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGxlZnRza2lwPVx0b2NpbmRlbnQgICUgaW5kZW50IHRoZXNlIGVudHJpZXMgbGlrZSBhIHRvYworICAgICAgXGxldFxkbz1cbGlzdG9mZmxvYXRzZG8KKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCislIFRoaXMgaXMgY2FsbGVkIG9uIGVhY2ggZW50cnkgaW4gYSBsaXN0IG9mIGZsb2F0cy4gIFdlJ3JlIHBhc3NlZCB0aGUKKyUgeHJlZiBsYWJlbCwgaW4gdGhlIGZvcm0gTEFCRUwtdGl0bGUsIHdoaWNoIGlzIGhvdyB3ZSBzYXZlIGl0IGluIHRoZQorJSBhdXggZmlsZS4gIFdlIHN0cmlwIG9mZiB0aGUgLXRpdGxlIGFuZCBsb29rIHVwIFxYUkxBQkVMLWxvZiwgd2hpY2gKKyUgaGFzIHRoZSB0ZXh0IHdlJ3JlIHN1cHBvc2VkIHRvIHR5cGVzZXQgaGVyZS4KKyUKKyUgRmlndXJlcyB3aXRob3V0IHhyZWYgbGFiZWxzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IChzaW5jZQorJSB0aGV5IHdvbid0IGFwcGVhciBpbiB0aGUgYXV4IGZpbGUpLgorJQorXGRlZlxsaXN0b2ZmbG9hdHNkbyMxe1xsaXN0b2ZmbG9hdHNkb2VudHJ5IzFcZmluaXNofQorXGRlZlxsaXN0b2ZmbG9hdHNkb2VudHJ5IzEtdGl0bGVcZmluaXNoe3slCisgICUgQ2FuJ3QgZnVsbHkgZXhwYW5kIFhSIzEtbG9mIGJlY2F1c2UgaXQgY2FuIGNvbnRhaW4gYW55dGhpbmcuICBKdXN0CisgICUgcGFzcyB0aGUgY29udHJvbCBzZXF1ZW5jZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBYUiMxLXBnIGlzIGp1c3QgdGhlCisgICUgcGFnZSBudW1iZXIsIGFuZCB3ZSB3YW50IHRvIGZ1bGx5IGV4cGFuZCB0aGF0IHNvIHdlIGNhbiBnZXQgYSBsaW5rCisgICUgaW4gcGRmIG91dHB1dC4KKyAgXHRva3NBID0gXGV4cGFuZGFmdGVye1xjc25hbWUgWFIjMS1sb2ZcZW5kY3NuYW1lfSUKKyAgJQorICAlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gd2UgdXNlIHRvIGdlbmVyYXRlIHRoZSBUT0MgYW5kIGluZGV4LgorICBcZWRlZlx3cml0ZWVudHJ5e1xub2V4cGFuZFxlbnRyeXtcdGhlXHRva3NBfXtcY3NuYW1lIFhSIzEtcGdcZW5kY3NuYW1lfX0lCisgIFx3cml0ZWVudHJ5Cit9fQorCitcbWVzc2FnZXtsb2NhbGl6YXRpb24sfQorJSBhbmQgaTE4bi4KKworJSBAZG9jdW1lbnRsYW5ndWFnZSBpcyB1c3VhbGx5IGdpdmVuIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIKKyUgQHNldGZpbGVuYW1lLiAgSWYgZG9uZSB0b28gbGF0ZSwgaXQgbWF5IG5vdCBvdmVycmlkZSBldmVyeXRoaW5nCislIHByb3Blcmx5LiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uCislIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgc2V0IHVwIGEgaHlwaGVuYXRpb24gZmlsZSBoZXJlLgorJQorXHBhcnNlYXJnZGVmXGRvY3VtZW50bGFuZ3VhZ2V7JQorICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgorICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgXG9wZW5pbiAxIHR4aS0jMS50ZXgKKyAgICBcaWZlb2YgMQorICAgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcZWxzZQorICAgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKworJSBAZG9jdW1lbnRlbmNvZGluZyBzaG91bGQgY2hhbmdlIHNvbWV0aGluZyBpbiBUZVggZXZlbnR1YWxseSwgbW9zdAorJSBsaWtlbHksIGJ1dCBmb3Igbm93IGp1c3QgcmVjb2duaXplIGl0LgorXGxldFxkb2N1bWVudGVuY29kaW5nID0gXGNvbW1lbnQKKworCislIFBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLgorJQorXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCitcd2lkb3dwZW5hbHR5PTEwMDAwCitcY2x1YnBlbmFsdHk9MTAwMDAKKworJSBVc2UgVGVYIDMuMCdzIFxlbWVyZ2VuY3lzdHJldGNoIHRvIGhlbHAgbGluZSBicmVha2luZywgYnV0IGlmIHdlJ3JlCislIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuICBXZSB3YW50IHRoZSBhbW91bnQgb2YKKyUgc3RyZXRjaCBhZGRlZCB0byBkZXBlbmQgb24gdGhlIGxpbmUgbGVuZ3RoLCBoZW5jZSB0aGUgZGVwZW5kZW5jZSBvbgorJSBcaHNpemUuICBXZSBjYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIHBhcGVyIHNpemUgaXMgc2V0LgorJQorXGRlZlxzZXRlbWVyZ2VuY3lzdHJldGNoeyUKKyAgXGlmeFxlbWVyZ2VuY3lzdHJldGNoXHRoaXNpc3VuZGVmaW5lZAorICAgICUgQWxsb3cgdXMgdG8gYXNzaWduIHRvIFxlbWVyZ2VuY3lzdHJldGNoIGFueXdheS4KKyAgICBcZGVmXGVtZXJnZW5jeXN0cmV0Y2h7XGRpbWVuMH0lCisgIFxlbHNlCisgICAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAuMTVcaHNpemUKKyAgXGZpCit9CisKKyUgUGFyYW1ldGVycyBpbiBvcmRlcjogMSkgdGV4dGhlaWdodDsgMikgdGV4dHdpZHRoOworJSAzKSB2b2Zmc2V0OyA0KSBob2Zmc2V0OyA1KSBiaW5kaW5nIG9mZnNldDsgNikgdG9wc2tpcDsKKyUgNykgcGh5c2ljYWwgcGFnZSBoZWlnaHQ7IDgpIHBoeXNpY2FsIHBhZ2Ugd2lkdGguCislCislIFdlIGFsc28gY2FsbCBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBkZWZpbmUKKyUgXHRleHRsZWFkaW5nLiAgVGhlIGNhbGxlciBzaG91bGQgYWxzbyBzZXQgXHBhcnNraXAuCislCitcZGVmXGludGVybmFscGFnZXNpemVzIzEjMiMzIzQjNSM2IzcjOHslCisgIFx2b2Zmc2V0ID0gIzNccmVsYXgKKyAgXHRvcHNraXAgPSAjNlxyZWxheAorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJQorICBcdnNpemUgPSAjMVxyZWxheAorICBcYWR2YW5jZVx2c2l6ZSBieSBcdG9wc2tpcAorICBcb3V0ZXJ2c2l6ZSA9IFx2c2l6ZQorICBcYWR2YW5jZVxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luCisgIFxwYWdlaGVpZ2h0ID0gXHZzaXplCisgICUKKyAgXGhzaXplID0gIzJccmVsYXgKKyAgXG91dGVyaHNpemUgPSBcaHNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJoc2l6ZSBieSAwLjVpbgorICBccGFnZXdpZHRoID0gXGhzaXplCisgICUKKyAgXG5vcm1hbG9mZnNldCA9ICM0XHJlbGF4CisgIFxiaW5kaW5nb2Zmc2V0ID0gIzVccmVsYXgKKyAgJQorICBcaWZwZGYKKyAgICBccGRmcGFnZWhlaWdodCAjN1xyZWxheAorICAgIFxwZGZwYWdld2lkdGggIzhccmVsYXgKKyAgXGZpCisgICUKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQorICAlCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorICBcc2V0ZW1lcmdlbmN5c3RyZXRjaAorfQorCislIEBsZXR0ZXJwYXBlciAodGhlIGRlZmF1bHQpLgorXGRlZlxsZXR0ZXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIElmIHBhZ2UgaXMgbm90aGluZyBidXQgdGV4dCwgbWFrZSBpdCBjb21lIG91dCBldmVuLgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NDZcYmFzZWxpbmVza2lwfXs2aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKK319CisKKyUgVXNlIEBzbWFsbGJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgN3g5LjI1IHRyaW0gc2l6ZS4KK1xkZWZcc21hbGxib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjVpbn17NWlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MTZwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5LjI1aW59ezdpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjNpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC41Y20KK319CisKKyUgVXNlIEBzbWFsbGVyYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA2eDkgdHJpbSBzaXplLgorJSAoSnVzdCB0ZXN0aW5nLCBwYXJhbWV0ZXJzIHN0aWxsIGluIGZsdXguKQorXGRlZlxzbWFsbGVyYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMS41cHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjRpbn17NC44aW59JQorICAgICAgICAgICAgICAgICAgICB7LS4yaW59ey0uNGlufSUKKyAgICAgICAgICAgICAgICAgICAgezBwdH17MTRwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5aW59ezZpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjI1aW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNGNtCit9fQorCislIFVzZSBAYWZvdXJwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNCBwYXBlci4KK1xkZWZcYWZvdXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIERvdWJsZS1zaWRlIHByaW50aW5nIHZpYSBwb3N0c2NyaXB0IG9uIExhc2VyamV0IDQwNTAKKyAgJSBwcmludHMgZG91YmxlLXNpZGVkIG5pY2VseSB3aGVuIFxiaW5kaW5nb2Zmc2V0PTEwbW0gYW5kIFxob2Zmc2V0PS02bW0uCisgICUgVG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmb3IgYSBkaWZmZXJlbnQgcHJpbnRlciBvciBzaXR1YXRpb24sIGFkanVzdAorICAlIFxub3JtYWxvZmZzZXQgdW50aWwgdGhlIGZyb250LXNpZGUgYW5kIGJhY2stc2lkZSB0ZXh0cyBhbGlnbi4gIFRoZW4KKyAgJSBkbyB0aGUgc2FtZSBmb3IgXGJpbmRpbmdvZmZzZXQuICBZb3UgY2FuIHNldCB0aGVzZSBmb3IgdGVzdGluZyBpbgorICAlIHlvdXIgdGV4aW5mbyBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisgICUgQHRleAorICAlIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0gLTZtbQorICAlIFxnbG9iYWxcYmluZGluZ29mZnNldCA9IDEwbW0KKyAgJSBAZW5kIHRleAorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NTFcYmFzZWxpbmVza2lwfXsxNjBtbX0KKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gNW1tCit9fQorCislIFVzZSBAYWZpdmVwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNSBwYXBlci4KKyUgRnJvbSByb21pbGRvQHVyYW5vLmljZWIudWZvcC5iciwgMiBKdWx5IDIwMDAuCislIEhlIGFsc28gcmVjb21tZW5kcyBtYWtpbmcgQGV4YW1wbGUgYW5kIEBsaXNwIGJlIHNtYWxsLgorXGRlZlxhZml2ZXBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQgbWludXMgMC4xcHQKKyAgXHRleHRsZWFkaW5nID0gMTIuNXB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezE2MG1tfXsxMjBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezhwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyMTBtbX17MTQ4bW19JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yaW4KKyAgXHRvbGVyYW5jZSA9IDgwMAorICBcaGZ1enogPSAxLjJwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDJtbQorICBcdGFibGVpbmRlbnQgPSAxMm1tCit9fQorCislIEEgc3BlY2lmaWMgdGV4dCBsYXlvdXQsIDI0eDE1Y20gb3ZlcmFsbCwgaW50ZW5kZWQgZm9yIEE0IHBhcGVyLgorXGRlZlxhZm91cmxhdGV4e3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezIzN21tfXsxNTBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17NC42bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgICUgTXVzdCBleHBsaWNpdGx5IHJlc2V0IHRvIDAgYmVjYXVzZSB3ZSBjYWxsIFxhZm91cnBhcGVyLgorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgVXNlIEBhZm91cndpZGUgdG8gcHJpbnQgb24gQTQgcGFwZXIgaW4gbGFuZHNjYXBlIGZvcm1hdC4KK1xkZWZcYWZvdXJ3aWRle3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezI0MW1tfXsxNjVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LTIuOTVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBAcGFnZXNpemVzIFRFWFRIRUlHSFRbLFRFWFRXSURUSF0KKyUgUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgc2V0dGluZyB0aGUgbWFyZ2lucywgXHRvcHNraXAsIFxwYXJza2lwLAorJSBhbmQvb3IgbGVhZGluZywgYWxzby4gT3IgcGVyaGFwcyB3ZSBzaG91bGQgY29tcHV0ZSB0aGVtIHNvbWVob3cuCislCitccGFyc2VhcmdkZWZccGFnZXNpemVze1xwYWdlc2l6ZXN5eXkgIzEsLFxmaW5pc2h9CitcZGVmXHBhZ2VzaXplc3l5eSMxLCMyLCMzXGZpbmlzaHt7JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcaHNpemU9IzJccmVsYXggXGZpCisgIFxnbG9iYWxkZWZzID0gMQorICAlCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9JQorICAlCisgIFxkaW1lbjAgPSAjMQorICBcYWR2YW5jZVxkaW1lbjAgYnkgXHZvZmZzZXQKKyAgJQorICBcZGltZW4yID0gXGhzaXplCisgIFxhZHZhbmNlXGRpbWVuMiBieSBcbm9ybWFsb2Zmc2V0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzeyMxfXtcaHNpemV9JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xub3JtYWxvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7XGRpbWVuMH17XGRpbWVuMn0lCit9fQorCislIFNldCBkZWZhdWx0IHRvIGxldHRlci4KKyUKK1xsZXR0ZXJwYXBlcgorCisKK1xtZXNzYWdle2FuZCB0dXJuaW5nIG9uIHRleGluZm8gaW5wdXQgZm9ybWF0Ln0KKworJSBEZWZpbmUgbWFjcm9zIHRvIG91dHB1dCB2YXJpb3VzIGNoYXJhY3RlcnMgd2l0aCBjYXRjb2RlIGZvciBub3JtYWwgdGV4dC4KK1xjYXRjb2RlYFwiPVxvdGhlcgorXGNhdGNvZGVgXH49XG90aGVyCitcY2F0Y29kZWBcXj1cb3RoZXIKK1xjYXRjb2RlYFxfPVxvdGhlcgorXGNhdGNvZGVgXHw9XG90aGVyCitcY2F0Y29kZWBcPD1cb3RoZXIKK1xjYXRjb2RlYFw+PVxvdGhlcgorXGNhdGNvZGVgXCs9XG90aGVyCitcY2F0Y29kZWBcJD1cb3RoZXIKK1xkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xkZWZcbm9ybWFsdGlsZGV7fn0KK1xkZWZcbm9ybWFsY2FyZXR7Xn0KK1xkZWZcbm9ybWFsdW5kZXJzY29yZXtffQorXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGRlZlxub3JtYWxsZXNzezx9CitcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xkZWZcbm9ybWFscGx1c3srfQorXGRlZlxub3JtYWxkb2xsYXJ7JH0lJCBmb250LWxvY2sgZml4CisKKyUgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnQgb25lIHdheSBpbiBcdHQKKyUgKHdoZXJlIGl0IGNhbiBwcm9iYWJseSBiZSBvdXRwdXQgYXMtaXMpLCBhbmQgYW5vdGhlciB3YXkgaW4gb3RoZXIgZm9udHMsCislIHdoZXJlIHNvbWV0aGluZyBoYWlyaWVyIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUuCislCislICMxIGlzIHdoYXQgdG8gcHJpbnQgaWYgd2UgYXJlIGluZGVlZCB1c2luZyBcdHQ7ICMyIGlzIHdoYXQgdG8gcHJpbnQKKyUgb3RoZXJ3aXNlLiAgU2luY2UgYWxsIHRoZSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8KKyUgaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZCBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsCislIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZSB0aGlzLCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZ1c2luZ3R0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjNcZm9udD0wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgZm9yIGl0YWxpYyBmb250LiAgQWN0dWFsbHkgdGhpcyBhbHNvIGNhdGNoZXMKKyUgbm9uLWl0YWxpYyBzbGFudGVkIGZvbnRzIHNpbmNlIGl0IGlzIGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCislIGl0YWxpYyBmb250cy4gIEJ1dCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSAkIGFuZCBpdCB1c2VzIFxzbCBhbnl3YXkKKyUgdGhpcyBpcyBub3QgYSBwcm9ibGVtLgorXGRlZlxpZnVzaW5naXQjMSMye1xpZmRpbSBcZm9udGRpbWVuMVxmb250PjBwdCAjMVxlbHNlICMyXGZpfQorCislIFR1cm4gb2ZmIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0IEAKKyUgKGFuZCB0aG9zZSB3aGljaCB0aGUgdXNlciBjYW4gdXNlIGFzIGlmIHRoZXkgd2VyZSBvcmRpbmFyeSkuCislIE1vc3Qgb2YgdGhlc2Ugd2Ugc2ltcGx5IHByaW50IGZyb20gdGhlIFx0dCBmb250LCBidXQgZm9yIHNvbWUsIHdlIGNhbgorJSB1c2UgbWF0aCBvciBvdGhlciB2YXJpYW50cyB0aGF0IGxvb2sgYmV0dGVyIGluIG5vcm1hbCB0ZXh0LgorCitcY2F0Y29kZWBcIj1cYWN0aXZlCitcZGVmXGFjdGl2ZWRvdWJsZXF1b3Rle3tcdHRcY2hhcjM0fX0KK1xsZXQiPVxhY3RpdmVkb3VibGVxdW90ZQorXGNhdGNvZGVgXH49XGFjdGl2ZQorXGRlZn57e1x0dFxjaGFyMTI2fX0KK1xjaGFyZGVmXGhhdD1gXF4KK1xjYXRjb2RlYFxePVxhY3RpdmUKK1xkZWZee3tcdHQgXGhhdH19CisKK1xjYXRjb2RlYFxfPVxhY3RpdmUKK1xkZWZfe1xpZnVzaW5ndHRcbm9ybWFsdW5kZXJzY29yZVxffQorXGxldFxyZWFsdW5kZXI9XworJSBTdWJyb3V0aW5lIGZvciB0aGUgcHJldmlvdXMgbWFjcm8uCitcZGVmXF97XGxlYXZldm1vZGUgXGtlcm4uMDdlbSBcdmJveHtcaHJ1bGUgd2lkdGguM2VtIGhlaWdodC4xZXh9XGtlcm4gLjA3ZW0gfQorCitcY2F0Y29kZWBcfD1cYWN0aXZlCitcZGVmfHt7XHR0XGNoYXIxMjR9fQorXGNoYXJkZWYgXGxlc3M9YFw8CitcY2F0Y29kZWBcPD1cYWN0aXZlCitcZGVmPHt7XHR0IFxsZXNzfX0KK1xjaGFyZGVmIFxndHI9YFw+CitcY2F0Y29kZWBcPj1cYWN0aXZlCitcZGVmPnt7XHR0IFxndHJ9fQorXGNhdGNvZGVgXCs9XGFjdGl2ZQorXGRlZit7e1x0dCBcY2hhciA0M319CitcY2F0Y29kZWBcJD1cYWN0aXZlCitcZGVmJHtcaWZ1c2luZ2l0e3tcc2xcJH19XG5vcm1hbGRvbGxhcn0lJCBmb250LWxvY2sgZml4CisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiBhIGZpbGUKKyUgbmFtZSBjYW5ub3QgYmUgYWN0aXZlIHVudGlsIHdlIGhhdmUgcGFyc2VkIHRoZSBjb21tYW5kIGxpbmUuCislIFNvIHR1cm4gdGhlbSBvZmYgYWdhaW4sIGFuZCBoYXZlIFxldmVyeWpvYiAob3IgQHNldGZpbGVuYW1lKSB0dXJuIHRoZW0gb24uCislIFxvdGhlcmlmeWFjdGl2ZSBpcyBjYWxsZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK1xkZWZcb3RoZXJpZnlhY3RpdmV7XGNhdGNvZGVgKz1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyfQorCitcY2F0Y29kZWBcQD0wCisKKyUgXGJhY2tzbGFzaGN1cmZvbnQgb3V0cHV0cyBvbmUgYmFja3NsYXNoIGNoYXJhY3RlciBpbiBjdXJyZW50IGZvbnQsCislIGFzIGluIFxjaGFyYFxcLgorXGdsb2JhbFxjaGFyZGVmXGJhY2tzbGFzaGN1cmZvbnQ9YFxcCitcZ2xvYmFsXGxldFxyYXdiYWNrc2xhc2h4eD1cYmFja3NsYXNoY3VyZm9udCAgJSBsZXQgZXhpc3RpbmcgLj8/cyBmaWxlcyB3b3JrCisKKyUgXHJhd2JhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGRvIFxiYWNrc2xhc2hjdXJmb250LgorJSBcb3RoZXJiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBiZSBhIGxpdGVyYWwgYFwnIGNoYXJhY3RlciB3aXRoCislIGNhdGNvZGUgb3RoZXIuCit7XGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQHJhd2JhY2tzbGFzaHtAbGV0XD1AYmFja3NsYXNoY3VyZm9udH0KKyBAZ2RlZkBvdGhlcmJhY2tzbGFzaHtAbGV0XD1AcmVhbGJhY2tzbGFzaH0KK30KKworJSBccmVhbGJhY2tzbGFzaCBpcyBhbiBhY3R1YWwgY2hhcmFjdGVyIGBcJyB3aXRoIGNhdGNvZGUgb3RoZXIsIGFuZAorJSBcZG91YmxlYmFja3NsYXNoIGlzIHR3byBvZiB0aGVtIChmb3IgdGhlIHBkZiBvdXRsaW5lcykuCit7XGNhdGNvZGVgXFw9XG90aGVyIEBnZGVmQHJlYWxiYWNrc2xhc2h7XH0gQGdkZWZAZG91YmxlYmFja3NsYXNoe1xcfX0KKworJSBcbm9ybWFsYmFja3NsYXNoIG91dHB1dHMgb25lIGJhY2tzbGFzaCBpbiBmaXhlZCB3aWR0aCBmb250LgorXGRlZlxub3JtYWxiYWNrc2xhc2h7e1x0dFxiYWNrc2xhc2hjdXJmb250fX0KKworXGNhdGNvZGVgXFw9XGFjdGl2ZQorCislIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzCislIGV2ZW4gYWZ0ZXIgcGFyc2luZyB0aGVtLgorQGRlZkB0dXJub2ZmYWN0aXZleyUKKyAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgIEBsZXRcPUByZWFsYmFja3NsYXNoCisgIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgIEBsZXQ8PUBub3JtYWxsZXNzCisgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgIEBsZXQrPUBub3JtYWxwbHVzCisgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAdW5zZXBzcGFjZXMKK30KKworJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuICAoVGh1cywgXCBpcyBub3QgZXhwYW5kYWJsZSB3aGVuIHRoaXMgaXMgaW4KKyUgZWZmZWN0LikKKyUKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXtAdHVybm9mZmFjdGl2ZSBAbGV0XD1Abm9ybWFsYmFja3NsYXNofQorCislIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCislIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KK0BvdGhlcmlmeWFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgdG8gc2hvdyB1cC4KKyUgVGhhdCBpcyB3aGF0IFxlYXRpbnB1dCBpcyBmb3I7IGFmdGVyIHRoYXQsIHRoZSBgXCcgc2hvdWxkIHJldmVydCB0byBwcmludGluZworJSBhIGJhY2tzbGFzaC4KKyUKK0BnZGVmQGVhdGlucHV0IGlucHV0IHRleGluZm97QGZpeGJhY2tzbGFzaH0KK0BnbG9iYWxAbGV0XCA9IEBlYXRpbnB1dAorCislIE9uIHRoZSBvdGhlciBoYW5kLCBwZXJoYXBzIHRoZSBmaWxlIGRpZCBub3QgaGF2ZSBhIGBcaW5wdXQgdGV4aW5mbycuIFRoZW4KKyUgdGhlIGZpcnN0IGBceyBpbiB0aGUgZmlsZSB3b3VsZCBjYXVzZSBhbiBlcnJvci4gVGhpcyBtYWNybyB0cmllcyB0byBmaXgKKyUgdGhhdCwgYXNzdW1pbmcgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgYFwnIGNvdWxkIHBsYXVzaWJseSBvY2N1ci4KKyUgQWxzbyB0dXJuIGJhY2sgb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gdGhlIGlucHV0CislIGZpbGUgbmFtZSwgaW4gY2FzZSBub3QgdXNpbmcgYSBwcmUtZHVtcGVkIGZvcm1hdC4KKyUKK0BnZGVmQGZpeGJhY2tzbGFzaHslCisgIEBpZnhcQGVhdGlucHV0IEBsZXRcID0gQG5vcm1hbGJhY2tzbGFzaCBAZmkKKyAgQGNhdGNvZGVgKz1AYWN0aXZlCisgIEBjYXRjb2RlYEBfPUBhY3RpdmUKK30KKworJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgorQGVzY2FwZWNoYXIgPSBgQEAKKworJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCitAY2F0Y29kZWBAJiA9IEBvdGhlcgorQGNhdGNvZGVgQCMgPSBAb3RoZXIKK0BjYXRjb2RlYEAlID0gQG90aGVyCisKKworQGMgTG9jYWwgdmFyaWFibGVzOgorQGMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorQGMgcGFnZS1kZWxpbWl0ZXI6ICJeXFxcXG1lc3NhZ2UiCitAYyB0aW1lLXN0YW1wLXN0YXJ0OiAiZGVmXFxcXHRleGluZm92ZXJzaW9ueyIKK0BjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorQGMgdGltZS1zdGFtcC1lbmQ6ICJ9IgorQGMgRW5kOgorCitAYyB2aW06c3c9MjoKKworQGlnbm9yZQorICAgYXJjaC10YWc6IGUxYjM2ZTMyLWM5NmUtNDEzNS1hNDFhLTBiMmVmYTJlYTExNQorQGVuZCBpZ25vcmUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYwppbmRleCBlM2UyMzQ0Li5mYjJlNDVlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCkBAIC0zNCw3ICszNCw3IEBACiAvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCiAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cyAqLwogCi1leHRlcm4gdm9pZCBQeV9GYXRhbEVycm9yKGNoYXIgKm1zZyk7CitleHRlcm4gdm9pZCBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZyk7CiAKIC8qQC1leHBvcnRoZWFkZXJAKi8KIHZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQpAQCAtMTQ4LDI3ICsxNDgsMTIgQEAKIH0KIAogI2lmZGVmIF9XSU4zMgotLypALWRlY2x1bmRlZkAqLwotLypALWV4cG9ydGhlYWRlckAqLwogZXh0ZXJuIGludAotZmZpX2NhbGxfU1lTVih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgCi0JICAgICAgLypAb3V0QCovIGV4dGVuZGVkX2NpZiAqLCAKLQkgICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIAotCSAgICAgIC8qQG91dEAqLyB1bnNpZ25lZCAqLCAKLQkgICAgICB2b2lkICgqZm4pKCkpOwotLypAPWRlY2x1bmRlZkAqLwotLypAPWV4cG9ydGhlYWRlckAqLwotCi0vKkAtZGVjbHVuZGVmQCovCi0vKkAtZXhwb3J0aGVhZGVyQCovCi1leHRlcm4gaW50Ci1mZmlfY2FsbF9TVERDQUxMKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAotCQkgLypAb3V0QCovIGV4dGVuZGVkX2NpZiAqLAotCQkgdW5zaWduZWQsIHVuc2lnbmVkLAotCQkgLypAb3V0QCovIHVuc2lnbmVkICosCi0JCSB2b2lkICgqZm4pKCkpOwotLypAPWRlY2x1bmRlZkAqLwotLypAPWV4cG9ydGhlYWRlckAqLworZmZpX2NhbGxfeDg2KHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCAKKwkgICAgIC8qQG91dEAqLyBleHRlbmRlZF9jaWYgKiwgCisJICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIAorCSAgICAgLypAb3V0QCovIHVuc2lnbmVkICosIAorCSAgICAgdm9pZCAoKmZuKSgpKTsKICNlbmRpZgogCiAjaWZkZWYgX1dJTjY0CkBAIC0yMDksMTcgKzE5NCw5IEBACiAgICAgewogI2lmICFkZWZpbmVkKF9XSU42NCkKICAgICBjYXNlIEZGSV9TWVNWOgotICAgICAgLypALXVzZWRlZkAqLwotICAgICAgcmV0dXJuIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIAotCQkJICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIC8qQD11c2VkZWZAKi8KLSAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBGRklfU1REQ0FMTDoKLSAgICAgIC8qQC11c2VkZWZAKi8KLSAgICAgIHJldHVybiBmZmlfY2FsbF9TVERDQUxMKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAotCQkJICAgICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIC8qQD11c2VkZWZAKi8KKyAgICAgIHJldHVybiBmZmlfY2FsbF94ODYoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIAorCQkJICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgYnJlYWs7CiAjZWxzZQogICAgIGNhc2UgRkZJX1NZU1Y6CkBAIC0zOTQsMTUgKzM3MSwxNiBAQAogZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfT1VURVIoKTsKIAogZmZpX3N0YXR1cwotZmZpX3ByZXBfY2xvc3VyZSAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCi0JCSAgZmZpX2NpZiogY2lmLAotCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCi0JCSAgdm9pZCAqdXNlcl9kYXRhKQorZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLAorCQkJCQkgIGZmaV9jaWYqIGNpZiwKKwkJCQkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAorCQkJCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCQkJICB2b2lkICpjb2RlbG9jKQogewogICBzaG9ydCBieXRlczsKICAgY2hhciAqdHJhbXA7CiAjaWZkZWYgX1dJTjY0Ci0gIGludCBtYXNrOworICBpbnQgbWFzayA9IDA7CiAjZW5kaWYKICAgRkZJX0FTU0VSVCAoY2lmLT5hYmkgPT0gRkZJX1NZU1YpOwogICAKQEAgLTQ3NSw2ICs0NTMsNSBAQAogICBjbG9zdXJlLT5jaWYgID0gY2lmOwogICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CiAgIGNsb3N1cmUtPmZ1biAgPSBmdW47Ci0KICAgcmV0dXJuIEZGSV9PSzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaAppbmRleCBhODhkODc0Li5lZmIxNGM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5oCkBAIC0yMjEsMTEgKzIyMSwxNSBAQAogICB2b2lkICAgICAgKnVzZXJfZGF0YTsKIH0gZmZpX2Nsb3N1cmU7CiAKK3ZvaWQgZmZpX2Nsb3N1cmVfZnJlZSh2b2lkICopOwordm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7CisKIGZmaV9zdGF0dXMKLWZmaV9wcmVwX2Nsb3N1cmUgKGZmaV9jbG9zdXJlKiwKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSosCiAJCSAgZmZpX2NpZiAqLAogCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCi0JCSAgdm9pZCAqdXNlcl9kYXRhKTsKKwkJICB2b2lkICp1c2VyX2RhdGEsCisJCSAgdm9pZCAqY29kZWxvYyk7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgY2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy93aW4zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3dpbjMyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjODJhYjkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3dpbjMyLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHdpbjMyLlMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTgsIDIwMDEsIDIwMDIgIFJlZCBIYXQsIEluYy4KLQkgICAgIENvcHlyaWdodCAoYykgMjAwMSAgSm9obiBCZW5pdG9uCi0JICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgIFJhbmppdCBNYXRoZXcKLQkJCQotIAotICAgWDg2IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCi0gCi0gICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLSAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0gICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0gICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLSAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIAotICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKLSAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgQ1lHTlVTIFNPTFVUSU9OUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gCi0jZGVmaW5lIExJQkZGSV9BU00KLSNpbmNsdWRlIDxmZmljb25maWcuaD4KLSNpbmNsdWRlIDxmZmkuaD4KLSAKLS50ZXh0Ci0gCi0uZ2xvYmwgZmZpX3ByZXBfYXJncwotIAotICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgotICAgICAgICAuYmFsaWduIDE2Ci0uZ2xvYmwgX2ZmaV9jYWxsX1NZU1YKLSAKLV9mZmlfY2FsbF9TWVNWOgotICAgICAgICBwdXNobCAlZWJwCi0gICAgICAgIG1vdmwgICVlc3AsJWVicAotCi0JI1RIZTogc2F2ZSBwcmV2aW91cyAlZXNpLCBhbmQgc3RvcmUgdGhlIGN1cnJlbnQgc3RhY2sgcG9pbnRlciBpbiAlZXNpCi0JcHVzaGwgJWVzaQotCW1vdmwgJWVzcCwlZXNpCi0KLSAgICAgICAgIyBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuCi0gICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBzdWJsICAlZWN4LCVlc3AKLSAKLSAgICAgICAgbW92bCAgJWVzcCwlZWF4Ci0gCi0gICAgICAgICMgUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uCi0gICAgICAgIHB1c2hsIDEyKCVlYnApCi0gICAgICAgIHB1c2hsICVlYXgKLSAgICAgICAgY2FsbCAgKjgoJWVicCkKLSAKLSAgICAgICAgIyBSZXR1cm4gc3RhY2sgdG8gcHJldmlvdXMgc3RhdGUgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uCi0gICAgICAgIGFkZGwgICQ4LCVlc3AKLSAKLSAgICAgICAgIyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAotICAgICAgICAjIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgotCi0JY2FsbCAgKjI4KCVlYnApCi0gCi0gICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzCi0gICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3gKLSAgICAgICAgYWRkbCAgJWVjeCwlZXNwCi0KLQlzdWIgJWVzcCwlZXNpICMgY2FsY3VsYXRlIHN0YWNrIHBvaW50ZXIgZGlmZmVyZW5jZQotCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKLSAgICAgICAgbW92bCAgMjAoJWVicCksJWVjeAotIAotICAgICAgICAjIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLgotICAgICAgICBjbXBsICAkMCwyNCglZWJwKQotICAgICAgICBqbmUgICByZXRpbnQKLSAKLSAgICAgICAgIyBFdmVuIGlmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUKLSAgICAgICAgIyBvYmxpZ2VkIHRvIGhhbmRsZSBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCi0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIG5vcmV0dmFsCi0gICAgICAgIGZzdHAgICVzdCgwKQotIAotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0aW50OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfSU5ULCVlY3gKLSAgICAgICAgam5lICAgcmV0ZmxvYXQKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRmbG9hdDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgcmV0ZG91YmxlICAgCi0gICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwcyAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGRvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGxvbmdkb3VibGUKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cGwgKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRsb25nZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfTE9OR0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHJldGludDY0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIGZzdHB0ICglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0aW50NjQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UNjQsJWVjeAotICAgICAgICBqbmUgICByZXRzdHJ1Y3QKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCi0gICAgICAgIG1vdmwgICVlZHgsNCglZWN4KQotIAotcmV0c3RydWN0OgotICAgICAgICAjIE5vdGhpbmcgdG8gZG8hCi0gCi1ub3JldHZhbDoKLWVwaWxvZ3VlOgotCW1vdmwgJWVzaSwlZWF4ICMgcmV0dXJuIHRoZSBzdGFjayBwb2ludGVyIGRldGx0YSBpbiAlZWF4Ci0JcG9wbCAlZXNpICMgcmVzdG9yZSBwcmV2aW91cyAlZXNpCi0gICAgICAgIG1vdmwgJWVicCwlZXNwCi0gICAgICAgIHBvcGwgJWVicAotICAgICAgICByZXQKLSAKLS5mZmlfY2FsbF9TWVNWX2VuZDoKLQotICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgotICAgICAgICAuYmFsaWduIDE2Ci0uZ2xvYmwgX2ZmaV9jYWxsX1NURENBTEwKLQotX2ZmaV9jYWxsX1NURENBTEw6Ci0gICAgICAgIHB1c2hsICVlYnAKLSAgICAgICAgbW92bCAgJWVzcCwlZWJwCi0KLQkjVEhlOiBzYXZlIHByZXZpb3VzICVlc2ksIGFuZCBzdG9yZSB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGluICVlc2kKLQlwdXNobCAlZXNpCi0JbW92bCAlZXNwLCVlc2kKLQkKLSAgICAgICAgIyBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuCi0gICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3ggCi0gICAgICAgIHN1YmwgICVlY3gsJWVzcAotCi0gICAgICAgIG1vdmwgICVlc3AsJWVheAotCi0gICAgICAgICMgUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uCi0gICAgICAgIHB1c2hsIDEyKCVlYnApCi0gICAgICAgIHB1c2hsICVlYXgKLSAgICAgICAgY2FsbCAgKjgoJWVicCkKLQotICAgICAgICAjIFJldHVybiBzdGFjayB0byBwcmV2aW91cyBzdGF0ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24KLSAgICAgICAgYWRkbCAgJDgsJWVzcAotCi0gICAgICAgICMgRklYTUU6IEFsaWduIHRoZSBzdGFjayB0byBhIDEyOC1iaXQgYm91bmRhcnkgdG8gYXZvaWQKLSAgICAgICAgIyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaGl0cy4KLQotICAgICAgICBjYWxsICAqMjgoJWVicCkKLQotCXN1YiAlZXNwLCVlc2kgIyBkaWZmZXJlbmNlIGluIHN0YWNrCi0KLSAgICAgICAgIyBzdGRjYWxsIGZ1bmN0aW9ucyBwb3AgYXJndW1lbnRzIG9mZiB0aGUgc3RhY2sgdGhlbXNlbHZlcwotCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKLSAgICAgICAgbW92bCAgMjAoJWVicCksJWVjeAotCi0gICAgICAgICMgSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuCi0gICAgICAgIGNtcGwgICQwLDI0KCVlYnApCi0gICAgICAgIGpuZSAgIHNjX3JldGludAotCi0gICAgICAgICMgRXZlbiBpZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIHJldHVybiB2YWx1ZSwgd2UgYXJlCi0gICAgICAgICMgb2JsaWdlZCB0byBoYW5kbGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICBzY19ub3JldHZhbAotICAgICAgICBmc3RwICAlc3QoMCkKLQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRpbnQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9JTlQsJWVjeAotICAgICAgICBqbmUgICBzY19yZXRmbG9hdAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0ZmxvYXQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGRvdWJsZQotICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cHMgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGRvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGxvbmdkb3VibGUKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cGwgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGxvbmdkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9MT05HRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0aW50NjQKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cHQgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGludDY0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDY0LCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0c3RydWN0Ci0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQotICAgICAgICBtb3ZsICAlZWR4LDQoJWVjeCkKLQotc2NfcmV0c3RydWN0OgotICAgICAgICAjIE5vdGhpbmcgdG8gZG8hCi0KLXNjX25vcmV0dmFsOgotc2NfZXBpbG9ndWU6Ci0gICAgICAgIG1vdmwgJWVzaSwlZWF4ICMgcmV0dXJuIHRoZSBzdGFjayBkaWZmZXJlbmNlCi0JcG9wbCAlZXNpICMgcmVzdG9yZSBwcmV2aW91cyAlZXNpIHZhbHVlCi0gICAgICAgIG1vdmwgJWVicCwlZXNwCi0gICAgICAgIHBvcGwgJWVicAotICAgICAgICByZXQKLQotLmZmaV9jYWxsX1NURENBTExfZW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuYwppbmRleCAwNjcwYzhjLi5kMTE0OWE4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvd2luMzIuYwpAQCAtMjksMjEgKzI5LDIxIEBACiAvKiB0aGVsbGVyOiBhbG1vc3QgdmVyYmF0aW0gdHJhbnNsYXRpb24gZnJvbSBnYXMgc3ludGF4IHRvIE1TVkMgaW5saW5lCiAgICBhc3NlbWJsZXIgY29kZS4gKi8KIAotLyogdGhlbGxlcjogZmZpX2NhbGxfU1lTViBhbmQgZmZpX2NhbGxfU1REQ0FMTCBub3cgcmV0dXJuIGFuIGludGVnZXIgLSB0aGUKLSAgIGRpZmZlcmVuY2Ugb2YgdGhlIHN0YWNrIHBvaW50ZXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgZnVuY3Rpb24gY2FsbC4gIElmCi0gICBldmVyeXRoaW5nIGlzIG9rLCB6ZXJvIGlzIHJldHVybmVkLiAgSWYgc3RkY2FsbCBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0aGUKLSAgIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMsIHRoZSBkaWZmZXJlbmNlIHdpbGwgYmUgbm9uemVyby4gKi8KKy8qIHRoZWxsZXI6IGZmaV9jYWxsX3g4NiBub3cgcmV0dXJucyBhbiBpbnRlZ2VyIC0gdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIHN0YWNrCisgICBwb2ludGVyIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwuICBJZiBldmVyeXRoaW5nIGlzIG9rLCB6ZXJvIGlzCisgICByZXR1cm5lZC4gIElmIHN0ZGNhbGwgZnVuY3Rpb25zIGFyZSBwYXNzZWQgdGhlIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMsCisgICB0aGUgZGlmZmVyZW5jZSB3aWxsIGJlIG5vbnplcm8uICovCiAKICNpbmNsdWRlIDxmZmkuaD4KICNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CiAKIF9fZGVjbHNwZWMobmFrZWQpIGludAotZmZpX2NhbGxfU1lTVih2b2lkICgqIHByZXBmdW5jKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgLyogOCAqLwotCQkgZXh0ZW5kZWRfY2lmICplY2lmLCAvKiAxMiAqLwotCQkgdW5zaWduZWQgYnl0ZXMsIC8qIDE2ICovCi0JCSB1bnNpZ25lZCBmbGFncywgLyogMjAgKi8KLQkJIHVuc2lnbmVkICpydmFsdWUsIC8qIDI0ICovCi0JCSB2b2lkICgqZm4pKCkpIC8qIDI4ICovCitmZmlfY2FsbF94ODYodm9pZCAoKiBwcmVwZnVuYykoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIC8qIDggKi8KKwkgICAgIGV4dGVuZGVkX2NpZiAqZWNpZiwgLyogMTIgKi8KKwkgICAgIHVuc2lnbmVkIGJ5dGVzLCAvKiAxNiAqLworCSAgICAgdW5zaWduZWQgZmxhZ3MsIC8qIDIwICovCisJICAgICB1bnNpZ25lZCAqcnZhbHVlLCAvKiAyNCAqLworCSAgICAgdm9pZCAoKmZuKSgpKSAvKiAyOCAqLwogewogCV9hc20gewogCQlwdXNoIGVicApAQCAtNjksMTI1ICs2OSwyMCBAQAogLy8gRklYTUU6IEFsaWduIHRoZSBzdGFjayB0byBhIDEyOC1iaXQgYm91bmRhcnkgdG8gYXZvaWQKIC8vIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgogCQljYWxsIFtlYnAgKyAyOF0KLS8vIFJlbW92ZSB0aGUgc3BhY2Ugd2UgcHVzaGVkIGZvciB0aGUgYXJncworCisvLyBMb2FkIGVjaWYtPmNpZi0+YWJpCisJCW1vdiBlY3gsIFtlYnAgKyAxMl0KKwkJbW92IGVjeCwgW2VjeF1lY2lmLmNpZgorCQltb3YgZWN4LCBbZWN4XWVjaWYuY2lmLmFiaQorCQkKKwkJY21wIGVjeCwgRkZJX1NURENBTEwKKwkJamUgbm9jbGVhbgorLy8gU1REQ0FMTDogUmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzCiAJCW1vdiBlY3gsIFtlYnAgKyAxNl0KIAkJYWRkIGVzcCwgZWN4Ci0KLS8vIFhYWCBBU1NFUlQgVEhBVCBFU1AgSVMgVEhFIFNBTUUgTk9XIFRIQU4gQkVGT1JFIQotCQlzdWIgZXNpLCBlc3AKLQotLy8gTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKLQkJbW92IGVjeCwgW2VicCArIDIwXQotCi0vLyBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4KLS8qCi0gIEludGVsIGFzbSBpcyB3ZWlyZC4gV2UgaGF2ZSB0byBleHBsaWNpdGVseSBzcGVjaWZ5ICdEV09SRCBQVFInIGluIHRoZSBuZXhyIGluc3RydWN0aW9uLAotICBvdGhlcndpc2Ugb25seSBvbmUgQllURSB3aWxsIGJlIGNvbXBhcmVkIChpbnN0ZWFkIG9mIGEgRFdPUkQpIQotICovCi0JCWNtcCBEV09SRCBQVFIgW2VicCArIDI0XSwgMAotCQlqbmUgc2NfcmV0aW50Ci0KLS8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUsIHdlIGFyZQotLy8gb2JsaWdlZCB0byBoYW5kbGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotCQljbXAgZWN4LCBGRklfVFlQRV9GTE9BVAotCQlqbmUgc2Nfbm9yZXR2YWwKLS8vICAgICAgICBmc3RwICAlc3QoMCkKLQkJZnN0cCBzdCgwKQotCi0JCWptcCBzY19lcGlsb2d1ZQotCi1zY19yZXRpbnQ6Ci0JCWNtcCBlY3gsIEZGSV9UWVBFX0lOVAotCQlqbmUgc2NfcmV0ZmxvYXQKLS8vICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLQkJbW92IGVjeCwgW2VicCArIDI0XQotCQltb3YgW2VjeCArIDBdLCBlYXgKLQkJam1wIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGZsb2F0OgotCQljbXAgZWN4LCBGRklfVFlQRV9GTE9BVAotCQlqbmUgc2NfcmV0ZG91YmxlCi0vLyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0JCW1vdiBlY3gsIFtlYnArMjRdCi0vLyAgICAgICAgZnN0cHMgKCVlY3gpCi0JCWZzdHAgRFdPUkQgUFRSIFtlY3hdCi0JCWptcCBzY19lcGlsb2d1ZQotCi1zY19yZXRkb3VibGU6Ci0JCWNtcCBlY3gsIEZGSV9UWVBFX0RPVUJMRQotCQlqbmUgc2NfcmV0bG9uZ2RvdWJsZQotLy8gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLQkJbW92IGVjeCwgW2VicCsyNF0KLQkJZnN0cCBRV09SRCBQVFIgW2VjeF0KLQkJam1wIHNjX2VwaWxvZ3VlCi0KLQkJam1wIHNjX3JldGxvbmdkb3VibGUgLy8gYXZvaWQgd2FybmluZyBhYm91dCB1bnVzZWQgbGFiZWwKLXNjX3JldGxvbmdkb3VibGU6Ci0JCWNtcCBlY3gsIEZGSV9UWVBFX0xPTkdET1VCTEUKLQkJam5lIHNjX3JldGludDY0Ci0vLyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0JCW1vdiBlY3gsIFtlYnArMjRdCi0vLyAgICAgICAgZnN0cHQgKCVlY3gpCi0JCWZzdHAgUVdPUkQgUFRSIFtlY3hdIC8qIFhYWCA/Pz8gKi8KLQkJam1wIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGludDY0OgotCQljbXAgZWN4LCBGRklfVFlQRV9TSU5UNjQKLQkJam5lIHNjX3JldHN0cnVjdAotLy8gTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotCQltb3YgZWN4LCBbZWJwKzI0XQotCQltb3YgW2VjeCswXSwgZWF4Ci0JCW1vdiBbZWN4KzRdLCBlZHgKLQotc2NfcmV0c3RydWN0OgotLy8gTm90aGluZyB0byBkbyEKLQotc2Nfbm9yZXR2YWw6Ci1zY19lcGlsb2d1ZToKLQkJbW92IGVheCwgZXNpCi0JCXBvcCBlc2kgLy8gTkVXIHJlc3RvcmU6IG11c3QgYmUgcHJlc2VydmVkIGFjcm9zcyBmdW5jdGlvbiBjYWxscwotCQltb3YgZXNwLCBlYnAKLQkJcG9wIGVicAotCQlyZXQKLQl9Ci19Ci0KLV9fZGVjbHNwZWMobmFrZWQpIGludAotZmZpX2NhbGxfU1REQ0FMTCh2b2lkICgqIHByZXBmdW5jKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgLyogOCAqLwotCQkgZXh0ZW5kZWRfY2lmICplY2lmLCAvKiAxMiAqLwotCQkgdW5zaWduZWQgYnl0ZXMsIC8qIDE2ICovCi0JCSB1bnNpZ25lZCBmbGFncywgLyogMjAgKi8KLQkJIHVuc2lnbmVkICpydmFsdWUsIC8qIDI0ICovCi0JCSB2b2lkICgqZm4pKCkpIC8qIDI4ICovCi17Ci0JX2FzbSB7Ci0JCXB1c2ggZWJwCi0JCW1vdiBlYnAsIGVzcAotCi0JCXB1c2ggZXNpIC8vIE5FVzogdGhpcyByZWdpc3RlciBtdXN0IGJlIHByZXNlcnZlZCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMKLQotLy8gWFhYIFNBVkUgRVNQIE5PVyEKLQkJbW92IGVzaSwgZXNwCi0KLS8vIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KLQkJbW92IGVjeCwgW2VicCsxNl0KLQkJc3ViIGVzcCwgZWN4Ci0JCQotCQltb3YgZWF4LCBlc3AKLQotLy8gUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uCi0JCXB1c2ggW2VicCArIDEyXSAvLyBlY2lmCi0JCXB1c2ggZWF4Ci0JCWNhbGwgW2VicCArIDhdIC8vIHByZXBmdW5jCi0KLS8vIFJldHVybiBzdGFjayB0byBwcmV2aW91cyBzdGF0ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24KLQkJYWRkIGVzcCwgOAotLy8gRklYTUU6IEFsaWduIHRoZSBzdGFjayB0byBhIDEyOC1iaXQgYm91bmRhcnkgdG8gYXZvaWQKLS8vIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgotCQljYWxsIFtlYnAgKyAyOF0KLS8vIHN0ZGNhbGwgZnVuY3Rpb25zIHBvcCBhcmd1bWVudHMgb2ZmIHRoZSBzdGFjayB0aGVtc2VsdmVzCi0KLS8vIFhYWCBJUyBFU1AgTk9XIFRIRSBTQU1FIEFTIEJFRk9SRT8KKy8vIENERUNMOiBDYWxsZXIgaGFzIGFscmVhZHkgY2xlYW5lZCB0aGUgc3RhY2sKK25vY2xlYW46CisvLyBDaGVjayB0aGF0IGVzcCBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgYmVmb3JlIQogCQlzdWIgZXNpLCBlc3AKIAogLy8gTG9hZCAlZWN4IHdpdGggdGhlIHJldHVybiB0eXBlIGNvZGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2luY2x1ZGUvZmZpLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9pbmNsdWRlL2ZmaS5oCmluZGV4IDNkMzkwNjQuLmMxMDRhNWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2luY2x1ZGUvZmZpLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvaW5jbHVkZS9mZmkuaApAQCAtMjY0LDYgKzI2NCw5IEBACiAJdm9pZAkJCSgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAogCXZvaWQqCQkJdXNlcl9kYXRhKTsKIAordm9pZCBmZmlfY2xvc3VyZV9mcmVlKHZvaWQgKik7Cit2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKTsKKwogdHlwZWRlZiBzdHJ1Y3QgZmZpX3Jhd19jbG9zdXJlIHsKIAljaGFyCQl0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKIAlmZmlfY2lmKgljaWY7CkBAIC0zNDksNCArMzUyLDQgQEAKIH0KICNlbmRpZgogCi0jZW5kaWYJLy8gI2lmbmRlZiBMSUJGRklfSApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyNlbmRpZgkvLyAjaWZuZGVmIExJQkZGSV9ICmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYyBiL01vZHVsZXMvX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jCmluZGV4IGM1MGQ1M2UuLmI5OGQ0M2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jCkBAIC05Myw3ICs5Myw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBwdXQgdGhlIGl0ZW0gYmFjayBpbnRvIHRoZSBmcmVlIGxpc3QgKi8KLXZvaWQgRnJlZUNsb3N1cmUodm9pZCAqcCkKK3ZvaWQgZmZpX2Nsb3N1cmVfZnJlZSh2b2lkICpwKQogewogICAgIElURU0gKml0ZW0gPSAoSVRFTSAqKXA7CiAgICAgaXRlbS0+bmV4dCA9IGZyZWVfbGlzdDsKQEAgLTEwMSw3ICsxMDEsNyBAQAogfQogCiAvKiByZXR1cm4gb25lIGl0ZW0gZnJvbSB0aGUgZnJlZSBsaXN0LCBhbGxvY2F0aW5nIG1vcmUgaWYgbmVlZGVkICovCi12b2lkICpNYWxsb2NDbG9zdXJlKHZvaWQpCit2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyhzaXplX3QgaWdub3JlZCwgdm9pZCoqIGNvZGVsb2MpCiB7CiAgICAgSVRFTSAqaXRlbTsKICAgICBpZiAoIWZyZWVfbGlzdCkKQEAgLTExMCw1ICsxMTAsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpdGVtID0gZnJlZV9saXN0OwogICAgIGZyZWVfbGlzdCA9IGl0ZW0tPm5leHQ7Ci0gICAgcmV0dXJuIGl0ZW07CisgICAgKmNvZGVsb2MgPSAodm9pZCAqKWl0ZW07CisgICAgcmV0dXJuICh2b2lkICopaXRlbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCmluZGV4IDhhZTA5YmYuLjRlN2VhMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwpAQCAtMjEsNyArMjEsNyBAQAogICogUHlEaWN0X1NldEl0ZW0oKSAobWFfbG9va3VwIGlzIE5VTEwpCiAgKi8KIHN0YXRpYyBpbnQKLVN0Z0RpY3RfaW5pdChTdGdEaWN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitQeUNTdGdEaWN0X2luaXQoU3RnRGljdE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIGlmIChQeURpY3RfVHlwZS50cF9pbml0KChQeU9iamVjdCAqKXNlbGYsIGFyZ3MsIGt3ZHMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzIsNyArMzIsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1TdGdEaWN0X2NsZWFyKFN0Z0RpY3RPYmplY3QgKnNlbGYpCitQeUNTdGdEaWN0X2NsZWFyKFN0Z0RpY3RPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cHJvdG8pOwogICAgIFB5X0NMRUFSKHNlbGYtPmFyZ3R5cGVzKTsKQEAgLTQzLDkgKzQzLDkgQEAKIH0KIAogc3RhdGljIHZvaWQKLVN0Z0RpY3RfZGVhbGxvYyhTdGdEaWN0T2JqZWN0ICpzZWxmKQorUHlDU3RnRGljdF9kZWFsbG9jKFN0Z0RpY3RPYmplY3QgKnNlbGYpCiB7Ci0gICAgU3RnRGljdF9jbGVhcihzZWxmKTsKKyAgICBQeUNTdGdEaWN0X2NsZWFyKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+Zm9ybWF0KTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPnNoYXBlKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmZmaV90eXBlX3BvaW50ZXIuZWxlbWVudHMpOwpAQCAtNTMsMTIgKzUzLDEyIEBACiB9CiAKIGludAotU3RnRGljdF9jbG9uZShTdGdEaWN0T2JqZWN0ICpkc3QsIFN0Z0RpY3RPYmplY3QgKnNyYykKK1B5Q1N0Z0RpY3RfY2xvbmUoU3RnRGljdE9iamVjdCAqZHN0LCBTdGdEaWN0T2JqZWN0ICpzcmMpCiB7CiAgICAgY2hhciAqZCwgKnM7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgU3RnRGljdF9jbGVhcihkc3QpOworICAgIFB5Q1N0Z0RpY3RfY2xlYXIoZHN0KTsKICAgICBQeU1lbV9GcmVlKGRzdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyk7CiAgICAgUHlNZW1fRnJlZShkc3QtPmZvcm1hdCk7CiAgICAgZHN0LT5mb3JtYXQgPSBOVUxMOwpAQCAtMTA2LDEyICsxMDYsMTIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlUeXBlT2JqZWN0IFN0Z0RpY3RfVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBQeUNTdGdEaWN0X1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIlN0Z0RpY3QiLAogICAgIHNpemVvZihTdGdEaWN0T2JqZWN0KSwKICAgICAwLAotICAgIChkZXN0cnVjdG9yKVN0Z0RpY3RfZGVhbGxvYywgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIChkZXN0cnVjdG9yKVB5Q1N0Z0RpY3RfZGVhbGxvYywgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpU3RnRGljdF9pbml0LCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAoaW5pdHByb2MpUHlDU3RnRGljdF9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgdHlwZSA9IChQeVR5cGVPYmplY3QgKilvYmo7CiAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX0hBVkVfQ0xBU1MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIXR5cGUtPnRwX2RpY3QgfHwgIVN0Z0RpY3RfQ2hlY2tFeGFjdCh0eXBlLT50cF9kaWN0KSkKKyAgICBpZiAoIXR5cGUtPnRwX2RpY3QgfHwgIVB5Q1N0Z0RpY3RfQ2hlY2tFeGFjdCh0eXBlLT50cF9kaWN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIChTdGdEaWN0T2JqZWN0ICopdHlwZS0+dHBfZGljdDsKIH0KQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgIFB5VHlwZU9iamVjdCAqdHlwZSA9IHNlbGYtPm9iX3R5cGU7CiAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX0hBVkVfQ0xBU1MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIXR5cGUtPnRwX2RpY3QgfHwgIVN0Z0RpY3RfQ2hlY2tFeGFjdCh0eXBlLT50cF9kaWN0KSkKKyAgICBpZiAoIXR5cGUtPnRwX2RpY3QgfHwgIVB5Q1N0Z0RpY3RfQ2hlY2tFeGFjdCh0eXBlLT50cF9kaWN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIChTdGdEaWN0T2JqZWN0ICopdHlwZS0+dHBfZGljdDsKIH0KQEAgLTIxNSw3ICsyMTUsNyBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGZpZWxkbGlzdCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFB5X1RZUEUoZmRlc2NyKSAhPSAmQ0ZpZWxkX1R5cGUpIHsKKyAgICAgICAgaWYgKFB5X1RZUEUoZmRlc2NyKSAhPSAmUHlDRmllbGRfVHlwZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVuZXhwZWN0ZWQgdHlwZSIpOwogICAgICAgICAgICAgUHlfREVDUkVGKGZkZXNjcik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmllbGRsaXN0KTsKQEAgLTIzMiwxMyArMjMyLDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBuZXdfZGVzY3IgPSAoQ0ZpZWxkT2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgoUHlPYmplY3QgKikmQ0ZpZWxkX1R5cGUsIE5VTEwpOworICAgICAgICBuZXdfZGVzY3IgPSAoQ0ZpZWxkT2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgoUHlPYmplY3QgKikmUHlDRmllbGRfVHlwZSwgTlVMTCk7CiAgICAgICAgIGlmIChuZXdfZGVzY3IgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGZkZXNjcik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmllbGRsaXN0KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQoUHlfVFlQRShuZXdfZGVzY3IpID09ICZDRmllbGRfVHlwZSk7CisgICAgICAgIGFzc2VydChQeV9UWVBFKG5ld19kZXNjcikgPT0gJlB5Q0ZpZWxkX1R5cGUpOwogICAgICAgICBuZXdfZGVzY3ItPnNpemUgPSBmZGVzY3ItPnNpemU7CiAgICAgICAgIG5ld19kZXNjci0+b2Zmc2V0ID0gZmRlc2NyLT5vZmZzZXQgKyBvZmZzZXQ7CiAgICAgICAgIG5ld19kZXNjci0+aW5kZXggPSBmZGVzY3ItPmluZGV4ICsgaW5kZXg7CkBAIC0yODYsNyArMjg2LDcgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm9uX25hbWVzKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQoUHlfVFlQRShkZXNjcikgPT0gJkNGaWVsZF9UeXBlKTsKKyAgICAgICAgYXNzZXJ0KFB5X1RZUEUoZGVzY3IpID09ICZQeUNGaWVsZF9UeXBlKTsKICAgICAgICAgZGVzY3ItPmFub255bW91cyA9IDE7CiAKICAgICAgICAgLyogZGVzY3IgaXMgaW4gdGhlIGZpZWxkIGRlc2NyaXB0b3IuICovCkBAIC0zMDksNyArMzA5LDcgQEAKICAgYW5kIGNyZWF0ZSBhbiBTdGdEaWN0T2JqZWN0LiAgVXNlZCBmb3IgU3RydWN0dXJlIGFuZCBVbmlvbiBzdWJjbGFzc2VzLgogKi8KIGludAotU3RydWN0VW5pb25UeXBlX3VwZGF0ZV9zdGdkaWN0KFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqZmllbGRzLCBpbnQgaXNTdHJ1Y3QpCitQeUNTdHJ1Y3RVbmlvblR5cGVfdXBkYXRlX3N0Z2RpY3QoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpmaWVsZHMsIGludCBpc1N0cnVjdCkKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCAqYmFzZWRpY3Q7CiAgICAgUHlfc3NpemVfdCBsZW4sIG9mZnNldCwgc2l6ZSwgYWxpZ24sIGk7CkBAIC00MTgsMTIgKzQxOCwxMiBAQAogCiAgICAgYXNzZXJ0KHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKTsKICAgICBpZiAoaXNTdHJ1Y3QgJiYgIWlzUGFja2VkKSB7Ci0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIlR7Iik7CisgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiVHsiKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBQRVAzMTE4IGRvZXNuJ3Qgc3VwcG9ydCB1bmlvbiwgb3IgcGFja2VkIHN0cnVjdHVyZXMgKHdlbGwsCiAgICAgICAgICAgIG9ubHkgc3RhbmRhcmQgcGFja2luZywgYnV0IHdlIGRvbnQgc3VwcG9ydCB0aGUgcGVwIGZvcgogICAgICAgICAgICB0aGF0KS4gVXNlICdCJyBmb3IgYnl0ZXMuICovCi0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IGFsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKKyAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CiAgICAgfQogCiAjZGVmaW5lIHJlYWxkaWN0ICgoUHlPYmplY3QgKikmc3RnZGljdC0+ZGljdCkKQEAgLTQ2OCw5ICs0NjgsOSBAQAogICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgogICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0gICAgICAgICAgICAgICAgaWYgKGRpY3QtPmdldGZ1bmMgIT0gZ2V0ZW50cnkoImMiKS0+Z2V0ZnVuYworICAgICAgICAgICAgICAgIGlmIChkaWN0LT5nZXRmdW5jICE9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiYyIpLT5nZXRmdW5jCiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKLSAgICAgICAgICAgICAgICAgICAgJiYgZGljdC0+Z2V0ZnVuYyAhPSBnZXRlbnRyeSgidSIpLT5nZXRmdW5jCisgICAgICAgICAgICAgICAgICAgICYmIGRpY3QtPmdldGZ1bmMgIT0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ1IiktPmdldGZ1bmMKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTAwLDcgKzUwMCw3IEBACiAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiVzOiVzOiIsIGZpZWxkZm10LCBmaWVsZG5hbWUpOwogCiAgICAgICAgICAgICBwdHIgPSBzdGdkaWN0LT5mb3JtYXQ7Ci0gICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBhbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgYnVmKTsKKyAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhzdGdkaWN0LT5mb3JtYXQsIGJ1Zik7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKHB0cik7CiAKICAgICAgICAgICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgewpAQCAtNTA5LDcgKzUwOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzU3RydWN0KSB7Ci0gICAgICAgICAgICBwcm9wID0gQ0ZpZWxkX0Zyb21EZXNjKGRlc2MsIGksCisgICAgICAgICAgICBwcm9wID0gUHlDRmllbGRfRnJvbURlc2MoZGVzYywgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX3NpemUsIGJpdHNpemUsICZiaXRvZnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaXplLCAmb2Zmc2V0LCAmYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2ssIGJpZ19lbmRpYW4pOwpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgICAgICAgICBzaXplID0gMDsKICAgICAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBhbGlnbiA9IDA7Ci0gICAgICAgICAgICBwcm9wID0gQ0ZpZWxkX0Zyb21EZXNjKGRlc2MsIGksCisgICAgICAgICAgICBwcm9wID0gUHlDRmllbGRfRnJvbURlc2MoZGVzYywgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX3NpemUsIGJpdHNpemUsICZiaXRvZnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaXplLCAmb2Zmc2V0LCAmYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2ssIGJpZ19lbmRpYW4pOwpAQCAtNTQxLDcgKzU0MSw3IEBACiAKICAgICBpZiAoaXNTdHJ1Y3QgJiYgIWlzUGFja2VkKSB7CiAgICAgICAgIGNoYXIgKnB0ciA9IHN0Z2RpY3QtPmZvcm1hdDsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gYWxsb2NfZm9ybWF0X3N0cmluZyhzdGdkaWN0LT5mb3JtYXQsICJ9Iik7CisgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhzdGdkaWN0LT5mb3JtYXQsICJ9Iik7CiAgICAgICAgIFB5TWVtX0ZyZWUocHRyKTsKICAgICAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwppbmRleCBmYjgzM2JjLi41ZjI2YzdmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwpAQCAtMzEsOCArMzEsNiBAQAogICogICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLS8qIENWUzogJElkJCAqLwotCiAvKgogCiAgIEEgbnVtYmVyIG9mIFN5c1Ygb3IgbmN1cnNlcyBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSB3cmFwcGVycyB5ZXQ7IGlmIHlvdQpAQCAtMTc0LDcgKzE3Miw3IEBACiAvKgogICogQ2hlY2sgdGhlIHJldHVybiBjb2RlIGZyb20gYSBjdXJzZXMgZnVuY3Rpb24gYW5kIHJldHVybiBOb25lCiAgKiBvciByYWlzZSBhbiBleGNlcHRpb24gYXMgYXBwcm9wcmlhdGUuICBUaGVzZSBhcmUgZXhwb3J0ZWQgdXNpbmcgdGhlCi0gKiBDT2JqZWN0IEFQSS4KKyAqIGNhcHN1bGUgQVBJLgogICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yMDcsNyArMjA1LDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotLyogRnVuY3Rpb24gdmVyc2lvbnMgb2YgdGhlIDMgZnVuY3Rpb25zIGZvciB0ZXN0ZWQgd2hldGhlciBjdXJzZXMgaGFzIGJlZW4KKy8qIEZ1bmN0aW9uIHZlcnNpb25zIG9mIHRoZSAzIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyB3aGV0aGVyIGN1cnNlcyBoYXMgYmVlbgogICAgaW5pdGlhbGlzZWQgb3Igbm90LiAqLwogCiBzdGF0aWMgaW50IGZ1bmNfUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQodm9pZCkKQEAgLTI0NCw0MyArMjQyLDUwIEBACiAgICBQQVJTRVNUUiAtIGZvcm1hdCBzdHJpbmcgZm9yIGFyZ3VtZW50IHBhcnNpbmcKICovCiAKLSNkZWZpbmUgV2luZG93X05vQXJnTm9SZXR1cm5GdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKlB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIFwKKyNkZWZpbmUgV2luZG93X05vQXJnTm9SZXR1cm5GdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgICAgICAgIFwKICAgICB7IHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKFgoc2VsZi0+d2luKSwgIyBYKTsgfQogCiAjZGVmaW5lIFdpbmRvd19Ob0FyZ1RydWVGYWxzZUZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChYIChzZWxmLT53aW4pID09IEZBTFNFKSB7IFB5X0lOQ1JFRihQeV9GYWxzZSk7IHJldHVybiBQeV9GYWxzZTsgfSBcCiAgICAgICAgIGVsc2UgeyBQeV9JTkNSRUYoUHlfVHJ1ZSk7IHJldHVybiBQeV9UcnVlOyB9IH0KIAotI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgWChzZWxmLT53aW4pOyBQeV9JTkNSRUYoUHlfTm9uZSk7IHJldHVybiBQeV9Ob25lOyB9CiAKICNkZWZpbmUgV2luZG93X05vQXJnMlR1cGxlUmV0dXJuRnVuY3Rpb24oWCwgVFlQRSwgRVJHU1RSKSAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVFlQRSBhcmcxLCBhcmcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgWChzZWxmLT53aW4sYXJnMSxhcmcyKTsgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRVJHU1RSLCBhcmcxLCBhcmcyKTsgfQogCiAjZGVmaW5lIFdpbmRvd19PbmVBcmdOb1JldHVyblZvaWRGdW5jdGlvbihYLCBUWVBFLCBQQVJTRVNUUikgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VTVFIsICZhcmcxKSkgcmV0dXJuIE5VTEw7ICAgICAgXAogICAgICAgICBYKHNlbGYtPndpbixhcmcxKTsgUHlfSU5DUkVGKFB5X05vbmUpOyByZXR1cm4gUHlfTm9uZTsgfQogCiAjZGVmaW5lIFdpbmRvd19PbmVBcmdOb1JldHVybkZ1bmN0aW9uKFgsIFRZUEUsIFBBUlNFU1RSKSAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncyxQQVJTRVNUUiwgJmFyZzEpKSByZXR1cm4gTlVMTDsgICAgICAgXAogICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihYKHNlbGYtPndpbiwgYXJnMSksICMgWCk7IH0KIAogI2RlZmluZSBXaW5kb3dfVHdvQXJnTm9SZXR1cm5GdW5jdGlvbihYLCBUWVBFLCBQQVJTRVNUUikgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVFlQRSBhcmcxLCBhcmcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsUEFSU0VTVFIsICZhcmcxLCAmYXJnMikpIHJldHVybiBOVUxMOyBcCkBAIC0xMjI4LDEwICsxMjMzLDExIEBACiAgICAgaW50IHJ0bjsKIAogI2lmbmRlZiBXSU5ET1dfSEFTX0ZMQUdTCi0gICAgaWYgKDApIHsKKyAgICBpZiAoMCkKICNlbHNlCi0gICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkgeworICAgICAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpCiAjZW5kaWYKKyAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewogICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLApAQCAtMTI2MSwxNjI0ICsxMjY3LDE2MjYgQEAKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJ3bm91dHJlZnJlc2giKTsKICAgICAgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfT3ZlcmxheShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKnRlbXA7CisgICAgaW50IHVzZV9jb3B5d2luID0gRkFMU0U7CisgICAgaW50IHNtaW5yb3csIHNtaW5jb2wsIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2w7CisgICAgaW50IHJ0bjsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hO3dpbmRvdyBvYmplY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDc6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpaWlpaWk7d2luZG93IG9iamVjdCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXAsICZzbWlucm93LCAmc21pbmNvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB1c2VfY29weXdpbiA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcmxheSByZXF1aXJlcyBvbmUgb3Igc2V2ZW4gYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X092ZXJsYXkoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgIHsKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKnRlbXA7Ci0gICAgICAgIGludCB1c2VfY29weXdpbiA9IEZBTFNFOwotICAgICAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKLSAgICAgICAgaW50IHJ0bjsKKyAgICBpZiAodXNlX2NvcHl3aW4gPT0gVFJVRSkgeworICAgICAgICBydG4gPSBjb3B5d2luKHNlbGYtPndpbiwgdGVtcC0+d2luLCBzbWlucm93LCBzbWluY29sLAorICAgICAgICAgICAgICAgICAgICAgIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2wsIFRSVUUpOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJjb3B5d2luIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBydG4gPSBvdmVybGF5KHNlbGYtPndpbiwgdGVtcC0+d2luKTsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAib3ZlcmxheSIpOworICAgIH0KK30KIAotICAgICAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hO3dpbmRvdyBvYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIWlpaWlpaTt3aW5kb3cgb2JqZWN0LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXAsICZzbWlucm93LCAmc21pbmNvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG1pbnJvdywgJmRtaW5jb2wsICZkbWF4cm93LCAmZG1heGNvbCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB1c2VfY29weXdpbiA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJsYXkgcmVxdWlyZXMgb25lIG9yIHNldmVuIGFyZ3VtZW50cyIpOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKnRlbXA7CisgICAgaW50IHVzZV9jb3B5d2luID0gRkFMU0U7CisgICAgaW50IHNtaW5yb3csIHNtaW5jb2wsIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2w7CisgICAgaW50IHJ0bjsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hO3dpbmRvdyBvYmplY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZV9jb3B5d2luID09IFRSVUUpIHsKLSAgICAgICAgICAgIHJ0biA9IGNvcHl3aW4oc2VsZi0+d2luLCB0ZW1wLT53aW4sIHNtaW5yb3csIHNtaW5jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2wsIFRSVUUpOwotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAiY29weXdpbiIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gb3ZlcmxheShzZWxmLT53aW4sIHRlbXAtPndpbik7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJvdmVybGF5Iik7Ci0gICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wLCAmc21pbnJvdywgJnNtaW5jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG1pbnJvdywgJmRtaW5jb2wsICZkbWF4cm93LCAmZG1heGNvbCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgdXNlX2NvcHl3aW4gPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJ3cml0ZSByZXF1aXJlcyBvbmUgb3Igc2V2ZW4gYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgewotICAgICAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKLSAgICAgICAgaW50IHVzZV9jb3B5d2luID0gRkFMU0U7Ci0gICAgICAgIGludCBzbWlucm93LCBzbWluY29sLCBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sOwotICAgICAgICBpbnQgcnRuOwotCi0gICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcndyaXRlIHJlcXVpcmVzIG9uZSBvciBzZXZlbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVzZV9jb3B5d2luID09IFRSVUUpIHsKLSAgICAgICAgICAgIHJ0biA9IGNvcHl3aW4oc2VsZi0+d2luLCB0ZW1wLT53aW4sIHNtaW5yb3csIHNtaW5jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2wsIEZBTFNFKTsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgImNvcHl3aW4iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJ0biA9IG92ZXJ3cml0ZShzZWxmLT53aW4sIHRlbXAtPndpbik7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJvdmVyd3JpdGUiKTsKLSAgICAgICAgfQorICAgIGlmICh1c2VfY29weXdpbiA9PSBUUlVFKSB7CisgICAgICAgIHJ0biA9IGNvcHl3aW4oc2VsZi0+d2luLCB0ZW1wLT53aW4sIHNtaW5yb3csIHNtaW5jb2wsCisgICAgICAgICAgICAgICAgICAgICAgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgRkFMU0UpOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJjb3B5d2luIik7CiAgICAgfQotCi0gICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dfUHV0V2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTztmaWxlb2JqIiwgJnRlbXApKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmICghUHlGaWxlX0NoZWNrKHRlbXApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUgb2JqZWN0Iik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihwdXR3aW4oc2VsZi0+d2luLCBQeUZpbGVfQXNGaWxlKHRlbXApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1dHdpbiIpOworICAgIGVsc2UgeworICAgICAgICBydG4gPSBvdmVyd3JpdGUoc2VsZi0+d2luLCB0ZW1wLT53aW4pOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJvdmVyd3JpdGUiKTsKICAgICB9Cit9CiAKLSAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICBQeUN1cnNlc1dpbmRvd19SZWRyYXdMaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICB7Ci0gICAgICAgIGludCBiZWcsIG51bTsKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTtiZWcsbnVtIiwgJmJlZywgJm51bSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3JlZHJhd2xuKHNlbGYtPndpbixiZWcsbnVtKSwgInJlZHJhd2xuIik7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfUHV0V2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqdGVtcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTztmaWxlb2JqIiwgJnRlbXApKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5RmlsZV9DaGVjayh0ZW1wKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihwdXR3aW4oc2VsZi0+d2luLCBQeUZpbGVfQXNGaWxlKHRlbXApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHV0d2luIik7Cit9CiAKLSAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICBQeUN1cnNlc1dpbmRvd19SZWZyZXNoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICB7Ci0gICAgICAgIGludCBwbWlucm93LHBtaW5jb2wsc21pbnJvdyxzbWluY29sLHNtYXhyb3csc21heGNvbDsKLSAgICAgICAgaW50IHJ0bjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19SZWRyYXdMaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYmVnLCBudW07CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTtiZWcsbnVtIiwgJmJlZywgJm51bSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdyZWRyYXdsbihzZWxmLT53aW4sYmVnLG51bSksICJyZWRyYXdsbiIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfUmVmcmVzaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHBtaW5yb3cscG1pbmNvbCxzbWlucm93LHNtaW5jb2wsc21heHJvdyxzbWF4Y29sOworICAgIGludCBydG47CiAKICNpZm5kZWYgV0lORE9XX0hBU19GTEFHUwotICAgICAgICBpZiAoMCkgeworICAgIGlmICgwKQogI2Vsc2UKLSAgICAgICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkgeworICAgICAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpCiAjZW5kaWYKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpaWlpaWk7IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG1pbnJvdyxwbWluY29sLHNtaW5yb3csc21pbmNvbCxzbWF4cm93LHNtYXhjb2wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBtaW5yb3csICZwbWluY29sLCAmc21pbnJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbWluY29sLCAmc21heHJvdywgJnNtYXhjb2wpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlpaWlpaTsiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBtaW5yb3cscG1pbmNvbCxzbWlucm93LHNtaW5jb2wsc21heHJvdyxzbWF4Y29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBtaW5yb3csICZwbWluY29sLCAmc21pbnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNtaW5jb2wsICZzbWF4cm93LCAmc21heGNvbCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgICAgICAgICAgcnRuID0gcHJlZnJlc2goc2VsZi0+d2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbWlucm93LCBwbWluY29sLCBzbWlucm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWluY29sLCBzbWF4cm93LCBzbWF4Y29sKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAicHJlZnJlc2giKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZyZXNoKCkgZm9yIGEgcGFkIHJlcXVpcmVzIDYgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6cmVmcmVzaCIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgcnRuID0gd3JlZnJlc2goc2VsZi0+d2luKTsKKyAgICAgICAgICAgICAgICBydG4gPSBwcmVmcmVzaChzZWxmLT53aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1pbnJvdywgcG1pbmNvbCwgc21pbnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWluY29sLCBzbWF4cm93LCBzbWF4Y29sKTsKICAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgInByZWZyZXNoIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfU2V0U2Nyb2xsUmVnaW9uKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7dG9wLCBib3R0b20iLCZ5LCZ4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdzZXRzY3JyZWcoc2VsZi0+d2luLHkseCksICJ3c2V0c2NycmVnIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfU3ViV2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgV0lORE9XICp3aW47Ci0gICAgICAgICAgICBpbnQgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feDsKLQotICAgICAgICAgICAgbmxpbmVzID0gMDsKLSAgICAgICAgICAgIG5jb2xzICA9IDA7Ci0gICAgICAgICAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtiZWdpbl95LGJlZ2luX3giLCZiZWdpbl95LCZiZWdpbl94KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWlpO25saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3giLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmxpbmVzLCZuY29scywmYmVnaW5feSwmYmVnaW5feCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3Vid2luIHJlcXVpcmVzIDIgb3IgNCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZnJlc2goKSBmb3IgYSBwYWQgcmVxdWlyZXMgNiBhcmd1bWVudHMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOnJlZnJlc2giKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIHJ0biA9IHdyZWZyZXNoKHNlbGYtPndpbik7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAicHJlZnJlc2giKTsKKyAgICAgICAgfQorfQogCi0gICAgICAgICAgICAvKiBwcmludGYoIlN1YndpbjogJWkgJWkgJWkgJWkgICBcbiIsIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOyAqLworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1NldFNjcm9sbFJlZ2lvbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHgsIHk7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3RvcCwgYm90dG9tIiwmeSwmeCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdzZXRzY3JyZWcoc2VsZi0+d2luLHkseCksICJ3c2V0c2NycmVnIik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19TdWJXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFdJTkRPVyAqd2luOworICAgIGludCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94OworCisgICAgbmxpbmVzID0gMDsKKyAgICBuY29scyAgPSAwOworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7YmVnaW5feSxiZWdpbl94IiwmYmVnaW5feSwmYmVnaW5feCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaWk7bmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmxpbmVzLCZuY29scywmYmVnaW5feSwmYmVnaW5feCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInN1YndpbiByZXF1aXJlcyAyIG9yIDQgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIHByaW50ZigiU3Vid2luOiAlaSAlaSAlaSAlaSAgIFxuIiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7ICovCiAjaWZkZWYgV0lORE9XX0hBU19GTEFHUwotICAgICAgICAgICAgaWYgKHNlbGYtPndpbi0+X2ZsYWdzICYgX0lTUEFEKQotICAgICAgICAgICAgICAgIHdpbiA9IHN1YnBhZChzZWxmLT53aW4sIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOwotICAgICAgICAgICAgZWxzZQorICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkKKyAgICAgICAgd2luID0gc3VicGFkKHNlbGYtPndpbiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7CisgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICAgICAgd2luID0gc3Vid2luKHNlbGYtPndpbiwgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feCk7CisgICAgICAgIHdpbiA9IHN1YndpbihzZWxmLT53aW4sIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOwogCi0gICAgICAgICAgICBpZiAod2luID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfU2Nyb2xsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbmxpbmVzOworICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHNjcm9sbChzZWxmLT53aW4pLCAic2Nyb2xsIik7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7bmxpbmVzIiwgJm5saW5lcykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3Njcmwoc2VsZi0+d2luLCBubGluZXMpLCAic2Nyb2xsIik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInNjcm9sbCByZXF1aXJlcyAwIG9yIDEgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1RvdWNoTGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHN0LCBjbnQsIHZhbDsKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3N0YXJ0LGNvdW50Iiwmc3QsJmNudCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodG91Y2hsaW5lKHNlbGYtPndpbixzdCxjbnQpLCAidG91Y2hsaW5lIik7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaTtzdGFydCxjb3VudCx2YWwiLCAmc3QsICZjbnQsICZ2YWwpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHd0b3VjaGxuKHNlbGYtPndpbiwgc3QsIGNudCwgdmFsKSwgInRvdWNobGluZSIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ0b3VjaGxpbmUgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19WbGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnRlbXA7CisgICAgY2h0eXBlIGNoOworICAgIGludCBuLCB4LCB5LCBjb2RlID0gT0s7CisgICAgYXR0cl90IGF0dHIgPSBBX05PUk1BTDsKKyAgICBsb25nIGxhdHRyOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k7Y2ggb3IgaW50LG4iLCAmdGVtcCwgJm4pKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaWw7Y2ggb3IgaW50LG4sYXR0ciIsICZ0ZW1wLCAmbiwgJmxhdHRyKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhdHRyID0gbGF0dHI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9pO3kseCxjaCBvciBpbnQsbiIsICZ5LCAmeCwgJnRlbXAsICZuKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjb2RlID0gd21vdmUoc2VsZi0+d2luLCB5LCB4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2lsOyB5LHgsY2ggb3IgaW50LG4sYXR0ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeSwgJngsICZ0ZW1wLCAmbiwgJmxhdHRyKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhdHRyID0gbGF0dHI7CisgICAgICAgIGNvZGUgPSB3bW92ZShzZWxmLT53aW4sIHksIHgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidmxpbmUgcmVxdWlyZXMgMiB0byA1IGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY29kZSAhPSBFUlIpIHsKKyAgICAgICAgaWYgKCFQeUN1cnNlc19Db252ZXJ0VG9DaHR5cGUodGVtcCwgJmNoKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgMSBvciAzIG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHd2bGluZShzZWxmLT53aW4sIGNoIHwgYXR0ciwgbiksICJ2bGluZSIpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihjb2RlLCAid21vdmUiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfU2Nyb2xsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG5saW5lczsKLSAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihzY3JvbGwoc2VsZi0+d2luKSwgInNjcm9sbCIpOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtubGluZXMiLCAmbmxpbmVzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3Njcmwoc2VsZi0+d2luLCBubGluZXMpLCAic2Nyb2xsIik7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzY3JvbGwgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X1RvdWNoTGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzdCwgY250LCB2YWw7Ci0gICAgICAgICAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtzdGFydCxjb3VudCIsJnN0LCZjbnQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih0b3VjaGxpbmUoc2VsZi0+d2luLHN0LGNudCksICJ0b3VjaGxpbmUiKTsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaTtzdGFydCxjb3VudCx2YWwiLCAmc3QsICZjbnQsICZ2YWwpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3dG91Y2hsbihzZWxmLT53aW4sIHN0LCBjbnQsIHZhbCksICJ0b3VjaGxpbmUiKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInRvdWNobGluZSByZXF1aXJlcyAyIG9yIDMgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNXaW5kb3dfVmxpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdGVtcDsKLSAgICAgICAgICAgIGNodHlwZSBjaDsKLSAgICAgICAgICAgIGludCBuLCB4LCB5LCBjb2RlID0gT0s7Ci0gICAgICAgICAgICBhdHRyX3QgYXR0ciA9IEFfTk9STUFMOwotICAgICAgICAgICAgbG9uZyBsYXR0cjsKLQotICAgICAgICAgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pO2NoIG9yIGludCxuIiwgJnRlbXAsICZuKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaWw7Y2ggb3IgaW50LG4sYXR0ciIsICZ0ZW1wLCAmbiwgJmxhdHRyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYXR0ciA9IGxhdHRyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPaTt5LHgsY2ggb3IgaW50LG4iLCAmeSwgJngsICZ0ZW1wLCAmbikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGNvZGUgPSB3bW92ZShzZWxmLT53aW4sIHksIHgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPaWw7IHkseCxjaCBvciBpbnQsbixhdHRyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmdGVtcCwgJm4sICZsYXR0cikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgICAgICAgICBjb2RlID0gd21vdmUoc2VsZi0+d2luLCB5LCB4KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInZsaW5lIHJlcXVpcmVzIDIgdG8gNSBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvZGUgIT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUN1cnNlc19Db252ZXJ0VG9DaHR5cGUodGVtcCwgJmNoKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IDEgb3IgMyBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3dmxpbmUoc2VsZi0+d2luLCBjaCB8IGF0dHIsIG4pLCAidmxpbmUiKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGNvZGUsICJ3bW92ZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzV2luZG93X01ldGhvZHNbXSA9IHsKLSAgICAgICAgICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYWRkc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZFN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYXR0cm9mZiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJPZmYsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImF0dHJvbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT24sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImF0dHJzZXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyU2V0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJia2dkIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQmtnZCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY2hnYXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0NoZ0F0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJia2dkc2V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQmtnZFNldCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYm9yZGVyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JvcmRlciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYm94IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JveCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbGVhciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJjbGVhcm9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfY2xlYXJvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY2xydG9ib3QiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbHJ0b2JvdCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJjbHJ0b2VvbCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NscnRvZW9sLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImN1cnN5bmN1cCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y3Vyc3luY3VwLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImRlbGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19EZWxDaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZGVsZXRlbG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dkZWxldGVsbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJkZXJ3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRGVyV2luLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJlY2hvY2hhciIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRWNob0NoYXIsIE1FVEhfVkFSQVJHU30sCitzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0geworICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYWRkbnN0ciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZE5TdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJhZGRzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkU3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYXR0cm9mZiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJPZmYsIE1FVEhfVkFSQVJHU30sCisgICAgeyJhdHRyb24iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9uLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYXR0cnNldCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJTZXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJia2dkIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQmtnZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNoZ2F0IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19DaGdBdCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImJrZ2RzZXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ca2dkU2V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYm9yZGVyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JvcmRlciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImJveCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Cb3gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjbGVhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NsZWFyLCBNRVRIX05PQVJHU30sCisgICAgeyJjbGVhcm9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfY2xlYXJvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNscnRvYm90IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xydG9ib3QsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImNscnRvZW9sIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xydG9lb2wsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImN1cnN5bmN1cCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y3Vyc3luY3VwLCBNRVRIX05PQVJHU30sCisgICAgeyJkZWxjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRGVsQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJkZWxldGVsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2RlbGV0ZWxuLCBNRVRIX05PQVJHU30sCisgICAgeyJkZXJ3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRGVyV2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZWNob2NoYXIiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0VjaG9DaGFyLCBNRVRIX1ZBUkFSR1N9LAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgeyJlbmNsb3NlIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRW5jbG9zZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImVuY2xvc2UiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19FbmNsb3NlLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7ImVyYXNlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193ZXJhc2UsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0YmVneXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldGJlZ3l4LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImdldGJrZ2QiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRCa2dkLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImdldGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRDaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0a2V5IiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldEtleSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0bWF4eXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldG1heHl4LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImdldHBhcnl4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRwYXJ5eCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXRzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0U3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJnZXR5eCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0eXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiaGxpbmUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0hsaW5lLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpZGNvayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaWRjb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImlkbG9rIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pZGxvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW1tZWRvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2ltbWVkb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImluY2giLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbkNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbnNjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zQ2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Imluc2RlbGxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193aW5zZGVsbG4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Imluc2VydGxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193aW5zZXJ0bG4sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiaW5zbnN0ciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc05TdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Imluc3N0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNTdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Imluc3RyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JblN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaXNfbGluZXRvdWNoZWQiLCAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0lzX0xpbmVUb3VjaGVkLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpc193aW50b3VjaGVkIiwgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaXNfd2ludG91Y2hlZCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJrZXlwYWQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfa2V5cGFkLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJsZWF2ZW9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbGVhdmVvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibW92ZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dtb3ZlLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJtdmRlcndpbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbXZkZXJ3aW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im12d2luIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19tdndpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibm9kZWxheSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X25vZGVsYXksIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5vdGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5vdXRyZWZyZXNoIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFsaWFzIC0tIHJlbW92ZSBpbiBQeXRob24gMi4zICovCi0gICAgICAgICAgICB7Im5vb3V0cmVmcmVzaCIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im92ZXJsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVybGF5LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJvdmVyd3JpdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcndyaXRlLAotICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InB1dHdpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19QdXRXaW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InJlZHJhd2xuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19SZWRyYXdMaW5lLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJyZWRyYXd3aW4iLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfcmVkcmF3d2luLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InJlZnJlc2giLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19SZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZXJhc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dlcmFzZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0YmVneXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldGJlZ3l4LCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRia2dkIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0QmtnZCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0Y2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0a2V5IiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldEtleSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldG1heHl4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRtYXh5eCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0cGFyeXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldHBhcnl4LCBNRVRIX05PQVJHU30sCisgICAgeyJnZXRzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0U3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0eXgiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldHl4LCBNRVRIX05PQVJHU30sCisgICAgeyJobGluZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSGxpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpZGNvayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaWRjb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJpZGxvayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaWRsb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbW1lZG9rIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaW1tZWRvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluY2giLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbkNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5zY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc0NoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5zZGVsbG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dpbnNkZWxsbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imluc2VydGxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193aW5zZXJ0bG4sIE1FVEhfTk9BUkdTfSwKKyAgICB7Imluc25zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNOU3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5zc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc1N0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imluc3RyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JblN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlzX2xpbmV0b3VjaGVkIiwgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Jc19MaW5lVG91Y2hlZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlzX3dpbnRvdWNoZWQiLCAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pc193aW50b3VjaGVkLCBNRVRIX05PQVJHU30sCisgICAgeyJrZXlwYWQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfa2V5cGFkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibGVhdmVvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2xlYXZlb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJtb3ZlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd21vdmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJtdmRlcndpbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbXZkZXJ3aW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJtdndpbiIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbXZ3aW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJub2RlbGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm9kZWxheSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5vdGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJub3V0cmVmcmVzaCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgLS0gcmVtb3ZlIGluIFB5dGhvbiAyLjMgKi8KKyAgICB7Im5vb3V0cmVmcmVzaCIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJvdmVybGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcmxheSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im92ZXJ3cml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVyd3JpdGUsCisgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJwdXR3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUHV0V2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVkcmF3bG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1JlZHJhd0xpbmUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWRyYXd3aW4iLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfcmVkcmF3d2luLCBNRVRIX05PQVJHU30sCisgICAgeyJyZWZyZXNoIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgICAgICB7InJlc2l6ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193cmVzaXplLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVzaXplIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dyZXNpemUsIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsic2Nyb2xsIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1Njcm9sbCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic2Nyb2xsb2siLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3Njcm9sbG9rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzZXRzY3JyZWciLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU2V0U2Nyb2xsUmVnaW9uLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzdGFuZGVuZCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N0YW5kZW5kLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InN0YW5kb3V0IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3RhbmRvdXQsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsic3VicGFkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1N1YldpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic3Vid2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1N1YldpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic3luY2Rvd24iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzeW5jZG93biwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJzeW5jb2siLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfc3luY29rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzeW5jdXAiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N5bmN1cCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ0aW1lb3V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InRvdWNobGluZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ub3VjaExpbmUsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InRvdWNod2luIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd190b3VjaHdpbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ1bnRvdWNod2luIiwgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfdW50b3VjaHdpbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ2bGluZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfVmxpbmUsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCi0gICAgICAgIH07CisgICAgeyJzY3JvbGwiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU2Nyb2xsLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic2Nyb2xsb2siLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3Njcm9sbG9rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic2V0c2NycmVnIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1NldFNjcm9sbFJlZ2lvbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InN0YW5kZW5kIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3RhbmRlbmQsIE1FVEhfTk9BUkdTfSwKKyAgICB7InN0YW5kb3V0IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3RhbmRvdXQsIE1FVEhfTk9BUkdTfSwKKyAgICB7InN1YnBhZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TdWJXaW4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJzdWJ3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU3ViV2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic3luY2Rvd24iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzeW5jZG93biwgTUVUSF9OT0FSR1N9LAorICAgIHsic3luY29rIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3N5bmNvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InN5bmN1cCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3luY3VwLCBNRVRIX05PQVJHU30sCisgICAgeyJ0aW1lb3V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0b3VjaGxpbmUiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfVG91Y2hMaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidG91Y2h3aW4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3RvdWNod2luLCBNRVRIX05PQVJHU30sCisgICAgeyJ1bnRvdWNod2luIiwgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfdW50b3VjaHdpbiwgTUVUSF9OT0FSR1N9LAorICAgIHsidmxpbmUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1ZsaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KK307CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X0dldEF0dHIoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQeV9GaW5kTWV0aG9kKFB5Q3Vyc2VzV2luZG93X01ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfR2V0QXR0cihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKK3sKKyAgICByZXR1cm4gUHlfRmluZE1ldGhvZChQeUN1cnNlc1dpbmRvd19NZXRob2RzLCAoUHlPYmplY3QgKilzZWxmLCBuYW1lKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSAgICAgICAgUHlUeXBlT2JqZWN0IFB5Q3Vyc2VzV2luZG93X1R5cGUgPSB7Ci0gICAgICAgICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAgICAgICAgICJfY3Vyc2VzLmN1cnNlcyB3aW5kb3ciLCAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgICAgICAgICBzaXplb2YoUHlDdXJzZXNXaW5kb3dPYmplY3QpLCAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCi0gICAgICAgICAgICAvKiBtZXRob2RzICovCi0gICAgICAgICAgICAoZGVzdHJ1Y3RvcilQeUN1cnNlc1dpbmRvd19EZWFsbG9jLCAvKnRwX2RlYWxsb2MqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgICAgICAgICAgKGdldGF0dHJmdW5jKVB5Q3Vyc2VzV2luZG93X0dldEF0dHIsIC8qdHBfZ2V0YXR0ciovCi0gICAgICAgICAgICAoc2V0YXR0cmZ1bmMpMCwgLyp0cF9zZXRhdHRyKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAgICAgfTsKK1B5VHlwZU9iamVjdCBQeUN1cnNlc1dpbmRvd19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfY3Vyc2VzLmN1cnNlcyB3aW5kb3ciLCAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKFB5Q3Vyc2VzV2luZG93T2JqZWN0KSwgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpUHlDdXJzZXNXaW5kb3dfRGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgKGdldGF0dHJmdW5jKVB5Q3Vyc2VzV2luZG93X0dldEF0dHIsIC8qdHBfZ2V0YXR0ciovCisgICAgKHNldGF0dHJmdW5jKTAsIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgR2xvYmFsIEZ1bmN0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oYmVlcCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihkZWZfcHJvZ19tb2RlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9zaGVsbF9tb2RlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRvdXBkYXRlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGVuZHdpbikKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihmbGFzaCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub2NicmVhaykKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub2VjaG8pCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24obm9ubCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub3JhdykKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9wcm9nX21vZGUpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24ocmVzZXRfc2hlbGxfbW9kZSkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldHR5KQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKHNhdmV0dHkpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oYmVlcCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihkZWZfcHJvZ19tb2RlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9zaGVsbF9tb2RlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRvdXBkYXRlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGVuZHdpbikKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihmbGFzaCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub2NicmVhaykKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub2VjaG8pCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24obm9ubCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub3JhdykKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9wcm9nX21vZGUpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24ocmVzZXRfc2hlbGxfbW9kZSkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldHR5KQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKHNhdmV0dHkpCiAKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihjYnJlYWspCi0gICAgICAgICAgICBOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24oZWNobykKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihubCkKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihyYXcpCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24oY2JyZWFrKQorTm9BcmdPckZsYWdOb1JldHVybkZ1bmN0aW9uKGVjaG8pCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24obmwpCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24ocmF3KQogCi0gICAgICAgICAgICBOb0FyZ1JldHVybkludEZ1bmN0aW9uKGJhdWRyYXRlKQotICAgICAgICAgICAgTm9BcmdSZXR1cm5JbnRGdW5jdGlvbih0ZXJtYXR0cnMpCitOb0FyZ1JldHVybkludEZ1bmN0aW9uKGJhdWRyYXRlKQorTm9BcmdSZXR1cm5JbnRGdW5jdGlvbih0ZXJtYXR0cnMpCiAKLSAgICAgICAgICAgIE5vQXJnUmV0dXJuU3RyaW5nRnVuY3Rpb24odGVybW5hbWUpCi0gICAgICAgICAgICBOb0FyZ1JldHVyblN0cmluZ0Z1bmN0aW9uKGxvbmduYW1lKQorTm9BcmdSZXR1cm5TdHJpbmdGdW5jdGlvbih0ZXJtbmFtZSkKK05vQXJnUmV0dXJuU3RyaW5nRnVuY3Rpb24obG9uZ25hbWUpCiAKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oY2FuX2NoYW5nZV9jb2xvcikKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaGFzX2NvbG9ycykKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaGFzX2ljKQotICAgICAgICAgICAgTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfaWwpCi0gICAgICAgICAgICBOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGlzZW5kd2luKQotICAgICAgICAgICAgTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihmbHVzaGlucCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5Wb2lkRnVuY3Rpb24obm9xaWZsdXNoKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihjYW5fY2hhbmdlX2NvbG9yKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfY29sb3JzKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfaWMpCitOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGhhc19pbCkKK05vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaXNlbmR3aW4pCitOb0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKGZsdXNoaW5wKQorTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihub3FpZmx1c2gpCiAKLSAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19maWx0ZXIoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIG5vdCBjaGVja2luZyBmb3IgUHlDdXJzZXNJbml0aWFsaXNlZCBoZXJlIHNpbmNlIGZpbHRlcigpIG11c3QKLSAgICAgICAgICAgICAgIGJlIGNhbGxlZCBiZWZvcmUgaW5pdHNjcigpICovCi0gICAgICAgICAgICBmaWx0ZXIoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfZmlsdGVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIC8qIG5vdCBjaGVja2luZyBmb3IgUHlDdXJzZXNJbml0aWFsaXNlZCBoZXJlIHNpbmNlIGZpbHRlcigpIG11c3QKKyAgICAgICBiZSBjYWxsZWQgYmVmb3JlIGluaXRzY3IoKSAqLworICAgIGZpbHRlcigpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfQ29sb3JfQ29udGVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNob3J0IGNvbG9yLHIsZyxiOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IGNvbG9yLHIsZyxiOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImg6Y29sb3JfY29udGVudCIsICZjb2xvcikpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaDpjb2xvcl9jb250ZW50IiwgJmNvbG9yKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmIChjb2xvcl9jb250ZW50KGNvbG9yLCAmciwgJmcsICZiKSAhPSBFUlIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgciwgZywgYik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gQ2hlY2sgdmFsdWUgb2YgQ09MT1JTLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKGNvbG9yX2NvbnRlbnQoY29sb3IsICZyLCAmZywgJmIpICE9IEVSUikKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgciwgZywgYik7CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gQ2hlY2sgdmFsdWUgb2YgQ09MT1JTLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX2NvbG9yX3BhaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19jb2xvcl9wYWlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbjsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmNvbG9yX3BhaXIiLCAmbikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSAobiA8PCA4KSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Y29sb3JfcGFpciIsICZuKSkgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSAobiA8PCA4KSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0N1cnNfU2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHZpcyxlcmc7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfQ3Vyc19TZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCB2aXMsZXJnOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpjdXJzX3NldCIsICZ2aXMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Y3Vyc19zZXQiLCAmdmlzKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGVyZyA9IGN1cnNfc2V0KHZpcyk7Ci0gICAgICAgICAgICBpZiAoZXJnID09IEVSUikgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoZXJnLCAiY3Vyc19zZXQiKTsKKyAgICBlcmcgPSBjdXJzX3NldCh2aXMpOworICAgIGlmIChlcmcgPT0gRVJSKSByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihlcmcsICJjdXJzX3NldCIpOwogCi0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIGVyZyk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIGVyZyk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0RlbGF5X091dHB1dChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtczsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19EZWxheV9PdXRwdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBtczsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZGVsYXlfb3V0cHV0IiwgJm1zKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmRlbGF5X291dHB1dCIsICZtcykpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihkZWxheV9vdXRwdXQobXMpLCAiZGVsYXlfb3V0cHV0Iik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihkZWxheV9vdXRwdXQobXMpLCAiZGVsYXlfb3V0cHV0Iik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0VyYXNlQ2hhcihQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBjaDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19FcmFzZUNoYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgY2hhciBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBjaCA9IGVyYXNlY2hhcigpOworICAgIGNoID0gZXJhc2VjaGFyKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmY2gsIDEpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZjaCwgMSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX2dldHN5eChQeU9iamVjdCAqc2VsZikKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHgseTsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19nZXRzeXgoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHggPSAwOworICAgIGludCB5ID0gMDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBnZXRzeXgoeSwgeCk7CisgICAgZ2V0c3l4KHksIHgpOwogCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHksIHgpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCB5LCB4KTsKK30KIAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfR2V0TW91c2UoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBydG47Ci0gICAgICAgICAgICBNRVZFTlQgZXZlbnQ7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfR2V0TW91c2UoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHJ0bjsKKyAgICBNRVZFTlQgZXZlbnQ7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgcnRuID0gZ2V0bW91c2UoICZldmVudCApOwotICAgICAgICAgICAgaWYgKHJ0biA9PSBFUlIpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgImdldG1vdXNlKCkgcmV0dXJuZWQgRVJSIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGhpaWlsKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpZXZlbnQuaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC54LCBldmVudC55LCBldmVudC56LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGV2ZW50LmJzdGF0ZSk7Ci0gICAgICAgIH0KKyAgICBydG4gPSBnZXRtb3VzZSggJmV2ZW50ICk7CisgICAgaWYgKHJ0biA9PSBFUlIpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJnZXRtb3VzZSgpIHJldHVybmVkIEVSUiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihoaWlpbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzaG9ydClldmVudC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC54LCBldmVudC55LCBldmVudC56LAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBldmVudC5ic3RhdGUpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19VbmdldE1vdXNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgTUVWRU5UIGV2ZW50Oworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VuZ2V0TW91c2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIE1FVkVOVCBldmVudDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGlpaWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQuaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudC54LCAmZXZlbnQueSwgJmV2ZW50LnosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgKikgJmV2ZW50LmJzdGF0ZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaWlpbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LngsICZldmVudC55LCAmZXZlbnQueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKSAmZXZlbnQuYnN0YXRlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHVuZ2V0bW91c2UoJmV2ZW50KSwgInVuZ2V0bW91c2UiKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHVuZ2V0bW91c2UoJmV2ZW50KSwgInVuZ2V0bW91c2UiKTsKK30KICNlbmRpZgogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0ZW1wKQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0ZW1wKQoreworICAgIFdJTkRPVyAqd2luOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlGaWxlX0NoZWNrKHRlbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgZmlsZSBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIGlmICghUHlGaWxlX0NoZWNrKHRlbXApKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgZmlsZSBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICB3aW4gPSBnZXR3aW4oUHlGaWxlX0FzRmlsZSh0ZW1wKSk7CisgICAgd2luID0gZ2V0d2luKFB5RmlsZV9Bc0ZpbGUodGVtcCkpOwogCi0gICAgICAgICAgICBpZiAod2luID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0hhbGZEZWxheShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdGVudGhzOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0hhbGZEZWxheShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgdW5zaWduZWQgY2hhciB0ZW50aHM7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJiOmhhbGZkZWxheSIsICZ0ZW50aHMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImI6aGFsZmRlbGF5IiwgJnRlbnRocykpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihoYWxmZGVsYXkodGVudGhzKSwgImhhbGZkZWxheSIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaGFsZmRlbGF5KHRlbnRocyksICJoYWxmZGVsYXkiKTsKK30KIAogI2lmbmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKLSAgICAgICAgLyogTm8gaGFzX2tleSEgKi8KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNfaGFzX2tleShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjaDsKKy8qIE5vIGhhc19rZXkhICovCitzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc19oYXNfa2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgY2g7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpIiwmY2gpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgaWYgKGhhc19rZXkoY2gpID09IEZBTFNFKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKLSAgICAgICAgfQorICAgIGlmIChoYXNfa2V5KGNoKSA9PSBGQUxTRSkgeworICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgfQorICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICByZXR1cm4gUHlfVHJ1ZTsKK30KICNlbmRpZiAvKiBTVFJJQ1RfU1lTVl9DVVJTRVMgKi8KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSW5pdF9Db2xvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNob3J0IGNvbG9yLCByLCBnLCBiOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0luaXRfQ29sb3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IGNvbG9yLCByLCBnLCBiOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImhoaGg7Y29sb3IscixnLGIiLCAmY29sb3IsICZyLCAmZywgJmIpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluaXRfY29sb3IgcmVxdWlyZXMgNCBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoaDtjb2xvcixyLGcsYiIsICZjb2xvciwgJnIsICZnLCAmYikpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5pdF9jb2xvciByZXF1aXJlcyA0IGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGluaXRfY29sb3IoY29sb3IsIHIsIGcsIGIpLCAiaW5pdF9jb2xvciIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9jb2xvcihjb2xvciwgciwgZywgYiksICJpbml0X2NvbG9yIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0luaXRfUGFpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNob3J0IHBhaXIsIGYsIGI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSW5pdF9QYWlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBzaG9ydCBwYWlyLCBmLCBiOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpICE9IDMpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluaXRfcGFpciByZXF1aXJlcyAzIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSAhPSAzKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbml0X3BhaXIgcmVxdWlyZXMgMyBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImhoaDtwYWlyLCBmLCBiIiwgJnBhaXIsICZmLCAmYikpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoO3BhaXIsIGYsIGIiLCAmcGFpciwgJmYsICZiKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGluaXRfcGFpcihwYWlyLCBmLCBiKSwgImluaXRfcGFpciIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9wYWlyKHBhaXIsIGYsIGIpLCAiaW5pdF9wYWlyIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpNb2REaWN0Oworc3RhdGljIFB5T2JqZWN0ICpNb2REaWN0OwogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Jbml0U2NyKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Jbml0U2NyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFdJTkRPVyAqd2luOwogCi0gICAgICAgICAgICBpZiAoaW5pdGlhbGlzZWQgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIHdyZWZyZXNoKHN0ZHNjcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyhzdGRzY3IpOwotICAgICAgICAgICAgfQorICAgIGlmIChpbml0aWFsaXNlZCA9PSBUUlVFKSB7CisgICAgICAgIHdyZWZyZXNoKHN0ZHNjcik7CisgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcoc3Rkc2NyKTsKKyAgICB9CiAKLSAgICAgICAgICAgIHdpbiA9IGluaXRzY3IoKTsKKyAgICB3aW4gPSBpbml0c2NyKCk7CiAKLSAgICAgICAgICAgIGlmICh3aW4gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAod2luID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIGluaXRpYWxpc2VkID0gaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKKyAgICBpbml0aWFsaXNlZCA9IGluaXRpYWxpc2VkX3NldHVwdGVybSA9IFRSVUU7CiAKIC8qIFRoaXMgd2FzIG1vdmVkIGZyb20gaW5pdGN1cnNlcygpIGJlY2F1c2UgaXQgY29yZSBkdW1wZWQgb24gU0dJLAogICAgd2hlcmUgdGhleSdyZSBub3QgZGVmaW5lZCB1bnRpbCB5b3UndmUgY2FsbGVkIGluaXRzY3IoKSAqLwogI2RlZmluZSBTZXREaWN0SW50KHN0cmluZyxjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvID0gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIChjaCkpOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChvICYmIFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsIHN0cmluZywgbykgPT0gMCkgICAgIHsgXAotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSB3aGlsZSAoMCkKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKm8gPSBQeUludF9Gcm9tTG9uZygobG9uZykgKGNoKSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG8gJiYgUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgc3RyaW5nLCBvKSA9PSAwKSAgICAgeyAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0gICAgICAgICAgICAvKiBIZXJlIGFyZSBzb21lIGdyYXBoaWMgc3ltYm9scyB5b3UgY2FuIHVzZSAqLwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1VMQ09STkVSIiwgICAgICAoQUNTX1VMQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTExDT1JORVIiLCAgICAgIChBQ1NfTExDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19VUkNPUk5FUiIsICAgICAgKEFDU19VUkNPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0xSQ09STkVSIiwgICAgICAoQUNTX0xSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTFRFRSIsICAgICAgICAgIChBQ1NfTFRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1JURUUiLCAgICAgICAgICAoQUNTX1JURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19CVEVFIiwgICAgICAgICAgKEFDU19CVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVFRFRSIsICAgICAgICAgIChBQ1NfVFRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0hMSU5FIiwgICAgICAgICAoQUNTX0hMSU5FKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVkxJTkUiLCAgICAgICAgIChBQ1NfVkxJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19QTFVTIiwgICAgICAgICAgKEFDU19QTFVTKSk7CisgICAgLyogSGVyZSBhcmUgc29tZSBncmFwaGljIHN5bWJvbHMgeW91IGNhbiB1c2UgKi8KKyAgICBTZXREaWN0SW50KCJBQ1NfVUxDT1JORVIiLCAgICAgIChBQ1NfVUxDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTExDT1JORVIiLCAgICAgIChBQ1NfTExDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfVVJDT1JORVIiLCAgICAgIChBQ1NfVVJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTFJDT1JORVIiLCAgICAgIChBQ1NfTFJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTFRFRSIsICAgICAgICAgIChBQ1NfTFRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19SVEVFIiwgICAgICAgICAgKEFDU19SVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JURUUiLCAgICAgICAgICAoQUNTX0JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfVFRFRSIsICAgICAgICAgIChBQ1NfVFRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19ITElORSIsICAgICAgICAgKEFDU19ITElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19WTElORSIsICAgICAgICAgKEFDU19WTElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19QTFVTIiwgICAgICAgICAgKEFDU19QTFVTKSk7CiAjaWYgIWRlZmluZWQoX19ocHV4KSB8fCBkZWZpbmVkKEhBVkVfTkNVUlNFU19IKQotICAgICAgICAgICAgLyogT24gSFAvVVggMTEsIHRoZXNlIGFyZSBvZiB0eXBlIGNjaGFyX3QsIHdoaWNoIGlzIG5vdCBhbgotICAgICAgICAgICAgICAgaW50ZWdyYWwgdHlwZS4gSWYgdGhpcyBpcyBhIHByb2JsZW0gb24gbW9yZSBwbGF0Zm9ybXMsIGEKLSAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0ZXN0IHNob3VsZCBiZSBhZGRlZCB0byBkZXRlcm1pbmUgd2hldGhlciBBQ1NfUzEKLSAgICAgICAgICAgICAgIGlzIG9mIGludGVncmFsIHR5cGUuICovCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUzEiLCAgICAgICAgICAgIChBQ1NfUzEpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TOSIsICAgICAgICAgICAgKEFDU19TOSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0RJQU1PTkQiLCAgICAgICAoQUNTX0RJQU1PTkQpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19DS0JPQVJEIiwgICAgICAgKEFDU19DS0JPQVJEKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfREVHUkVFIiwgICAgICAgIChBQ1NfREVHUkVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUExNSU5VUyIsICAgICAgIChBQ1NfUExNSU5VUykpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JVTExFVCIsICAgICAgICAoQUNTX0JVTExFVCkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0xBUlJPVyIsICAgICAgICAoQUNTX0xBUlJPVykpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1JBUlJPVyIsICAgICAgICAoQUNTX1JBUlJPVykpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0RBUlJPVyIsICAgICAgICAoQUNTX0RBUlJPVykpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1VBUlJPVyIsICAgICAgICAoQUNTX1VBUlJPVykpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JPQVJEIiwgICAgICAgICAoQUNTX0JPQVJEKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTEFOVEVSTiIsICAgICAgIChBQ1NfTEFOVEVSTikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JMT0NLIiwgICAgICAgICAoQUNTX0JMT0NLKSk7CisgICAgLyogT24gSFAvVVggMTEsIHRoZXNlIGFyZSBvZiB0eXBlIGNjaGFyX3QsIHdoaWNoIGlzIG5vdCBhbgorICAgICAgIGludGVncmFsIHR5cGUuIElmIHRoaXMgaXMgYSBwcm9ibGVtIG9uIG1vcmUgcGxhdGZvcm1zLCBhCisgICAgICAgY29uZmlndXJlIHRlc3Qgc2hvdWxkIGJlIGFkZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIEFDU19TMQorICAgICAgIGlzIG9mIGludGVncmFsIHR5cGUuICovCisgICAgU2V0RGljdEludCgiQUNTX1MxIiwgICAgICAgICAgICAoQUNTX1MxKSk7CisgICAgU2V0RGljdEludCgiQUNTX1M5IiwgICAgICAgICAgICAoQUNTX1M5KSk7CisgICAgU2V0RGljdEludCgiQUNTX0RJQU1PTkQiLCAgICAgICAoQUNTX0RJQU1PTkQpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQ0tCT0FSRCIsICAgICAgIChBQ1NfQ0tCT0FSRCkpOworICAgIFNldERpY3RJbnQoIkFDU19ERUdSRUUiLCAgICAgICAgKEFDU19ERUdSRUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUExNSU5VUyIsICAgICAgIChBQ1NfUExNSU5VUykpOworICAgIFNldERpY3RJbnQoIkFDU19CVUxMRVQiLCAgICAgICAgKEFDU19CVUxMRVQpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTEFSUk9XIiwgICAgICAgIChBQ1NfTEFSUk9XKSk7CisgICAgU2V0RGljdEludCgiQUNTX1JBUlJPVyIsICAgICAgICAoQUNTX1JBUlJPVykpOworICAgIFNldERpY3RJbnQoIkFDU19EQVJST1ciLCAgICAgICAgKEFDU19EQVJST1cpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfVUFSUk9XIiwgICAgICAgIChBQ1NfVUFSUk9XKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JPQVJEIiwgICAgICAgICAoQUNTX0JPQVJEKSk7CisgICAgU2V0RGljdEludCgiQUNTX0xBTlRFUk4iLCAgICAgICAoQUNTX0xBTlRFUk4pKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQkxPQ0siLCAgICAgICAgIChBQ1NfQkxPQ0spKTsKICNlbmRpZgotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JTU0IiLCAgICAgICAgICAoQUNTX1VMQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU1NCQiIsICAgICAgICAgIChBQ1NfTExDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19CQlNTIiwgICAgICAgICAgKEFDU19VUkNPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NCQlMiLCAgICAgICAgICAoQUNTX0xSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU0JTUyIsICAgICAgICAgIChBQ1NfUlRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NTU0IiLCAgICAgICAgICAoQUNTX0xURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TU0JTIiwgICAgICAgICAgKEFDU19CVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlNTUyIsICAgICAgICAgIChBQ1NfVFRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JTQlMiLCAgICAgICAgICAoQUNTX0hMSU5FKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU0JTQiIsICAgICAgICAgIChBQ1NfVkxJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TU1NTIiwgICAgICAgICAgKEFDU19QTFVTKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JTU0IiLCAgICAgICAgICAoQUNTX1VMQ09STkVSKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NTQkIiLCAgICAgICAgICAoQUNTX0xMQ09STkVSKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JCU1MiLCAgICAgICAgICAoQUNTX1VSQ09STkVSKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NCQlMiLCAgICAgICAgICAoQUNTX0xSQ09STkVSKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NCU1MiLCAgICAgICAgICAoQUNTX1JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU1NTQiIsICAgICAgICAgIChBQ1NfTFRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19TU0JTIiwgICAgICAgICAgKEFDU19CVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JTU1MiLCAgICAgICAgICAoQUNTX1RURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlNCUyIsICAgICAgICAgIChBQ1NfSExJTkUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU0JTQiIsICAgICAgICAgIChBQ1NfVkxJTkUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU1NTUyIsICAgICAgICAgIChBQ1NfUExVUykpOwogCi0gICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGFyZSBuZXZlciBhdmFpbGFibGUgd2l0aCBzdHJpY3QgU1lTViBjdXJzZXMgKi8KKyAgICAvKiBUaGUgZm9sbG93aW5nIGFyZSBuZXZlciBhdmFpbGFibGUgd2l0aCBzdHJpY3QgU1lTViBjdXJzZXMgKi8KICNpZmRlZiBBQ1NfUzMKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TMyIsICAgICAgICAgICAgKEFDU19TMykpOworICAgIFNldERpY3RJbnQoIkFDU19TMyIsICAgICAgICAgICAgKEFDU19TMykpOwogI2VuZGlmCiAjaWZkZWYgQUNTX1M3Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUzciLCAgICAgICAgICAgIChBQ1NfUzcpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUzciLCAgICAgICAgICAgIChBQ1NfUzcpKTsKICNlbmRpZgogI2lmZGVmIEFDU19MRVFVQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MRVFVQUwiLCAgICAgICAgKEFDU19MRVFVQUwpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTEVRVUFMIiwgICAgICAgIChBQ1NfTEVRVUFMKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfR0VRVUFMCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfR0VRVUFMIiwgICAgICAgIChBQ1NfR0VRVUFMKSk7CisgICAgU2V0RGljdEludCgiQUNTX0dFUVVBTCIsICAgICAgICAoQUNTX0dFUVVBTCkpOwogI2VuZGlmCiAjaWZkZWYgQUNTX1BJCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUEkiLCAgICAgICAgICAgIChBQ1NfUEkpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUEkiLCAgICAgICAgICAgIChBQ1NfUEkpKTsKICNlbmRpZgogI2lmZGVmIEFDU19ORVFVQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19ORVFVQUwiLCAgICAgICAgKEFDU19ORVFVQUwpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTkVRVUFMIiwgICAgICAgIChBQ1NfTkVRVUFMKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfU1RFUkxJTkcKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TVEVSTElORyIsICAgICAgKEFDU19TVEVSTElORykpOworICAgIFNldERpY3RJbnQoIkFDU19TVEVSTElORyIsICAgICAgKEFDU19TVEVSTElORykpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkxJTkVTIiwgTElORVMpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MUyIsIENPTFMpOworICAgIFNldERpY3RJbnQoIkxJTkVTIiwgTElORVMpOworICAgIFNldERpY3RJbnQoIkNPTFMiLCBDT0xTKTsKIAotICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3NldHVwdGVybShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0KiBrZXl3ZHMpCit7CisgICAgaW50IGZkID0gLTE7CisgICAgaW50IGVycjsKKyAgICBjaGFyKiB0ZXJtc3RyID0gTlVMTDsKKworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsidGVybSIsICJmZCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoCisgICAgICAgICAgICBhcmdzLCBrZXl3ZHMsICJ8emk6c2V0dXB0ZXJtIiwga3dsaXN0LCAmdGVybXN0ciwgJmZkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgUHlPYmplY3QqIHN5c19zdGRvdXQ7CisKKyAgICAgICAgc3lzX3N0ZG91dCA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisKKyAgICAgICAgaWYgKHN5c19zdGRvdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFB5Q3Vyc2VzRXJyb3IsCisgICAgICAgICAgICAgICAgImxvc3Qgc3lzLnN0ZG91dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfc2V0dXB0ZXJtKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QqIGtleXdkcykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZkID0gLTE7Ci0gICAgICAgICAgICBpbnQgZXJyOwotICAgICAgICAgICAgY2hhciogdGVybXN0ciA9IE5VTEw7CisgICAgICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihzeXNfc3Rkb3V0KTsKIAotICAgICAgICAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0ZXJtIiwgImZkIiwgTlVMTH07CisgICAgICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKAotICAgICAgICAgICAgICAgICAgICBhcmdzLCBrZXl3ZHMsICJ8emk6c2V0dXB0ZXJtIiwga3dsaXN0LCAmdGVybXN0ciwgJmZkKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICghaW5pdGlhbGlzZWRfc2V0dXB0ZXJtICYmIHNldHVwdGVybSh0ZXJtc3RyLGZkLCZlcnIpID09IEVSUikgeworICAgICAgICBjaGFyKiBzID0gInNldHVwdGVybTogdW5rbm93biBlcnJvciI7CiAKLSAgICAgICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzeXNfc3Rkb3V0OwotCi0gICAgICAgICAgICAgICAgc3lzX3N0ZG91dCA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3lzX3N0ZG91dCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5Q3Vyc2VzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9zdCBzeXMuc3Rkb3V0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihzeXNfc3Rkb3V0KTsKLQotICAgICAgICAgICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaW5pdGlhbGlzZWRfc2V0dXB0ZXJtICYmIHNldHVwdGVybSh0ZXJtc3RyLGZkLCZlcnIpID09IEVSUikgewotICAgICAgICAgICAgICAgIGNoYXIqIHMgPSAic2V0dXB0ZXJtOiB1bmtub3duIGVycm9yIjsKLQotICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzID0gInNldHVwdGVybTogY291bGQgbm90IGZpbmQgdGVybWluYWwiOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5mbyBkYXRhYmFzZSI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3Iscyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluaXRpYWxpc2VkX3NldHVwdGVybSA9IFRSVUU7Ci0KLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICBpZiAoZXJyID09IDApIHsKKyAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5hbCI7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IC0xKSB7CisgICAgICAgICAgICBzID0gInNldHVwdGVybTogY291bGQgbm90IGZpbmQgdGVybWluZm8gZGF0YWJhc2UiOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0ludHJGbHVzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjaDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3Iscyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIGluaXRpYWxpc2VkX3NldHVwdGVybSA9IFRSVUU7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtUcnVlKDEpLCBGYWxzZSgwKSIsJmNoKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnRyZmx1c2ggcmVxdWlyZXMgMSBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihpbnRyZmx1c2goTlVMTCxjaCksICJpbnRyZmx1c2giKTsKLSAgICAgICAgfQorc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0ludHJGbHVzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGNoOworCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKworICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmY2gpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImludHJmbHVzaCByZXF1aXJlcyAxIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGludHJmbHVzaChOVUxMLGNoKSwgImludHJmbHVzaCIpOworfQogCiAjaWZkZWYgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVECi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Jc19UZXJtX1Jlc2l6ZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGluZXM7Ci0gICAgICAgICAgICBpbnQgY29sdW1uczsKLSAgICAgICAgICAgIGludCByZXN1bHQ7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSXNfVGVybV9SZXNpemVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbGluZXM7CisgICAgaW50IGNvbHVtbnM7CisgICAgaW50IHJlc3VsdDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6aXNfdGVybV9yZXNpemVkIiwgJmxpbmVzLCAmY29sdW1ucykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmVzdWx0ID0gaXNfdGVybV9yZXNpemVkKGxpbmVzLCBjb2x1bW5zKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6aXNfdGVybV9yZXNpemVkIiwgJmxpbmVzLCAmY29sdW1ucykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IGlzX3Rlcm1fcmVzaXplZChsaW5lcywgY29sdW1ucyk7CisgICAgaWYgKHJlc3VsdCA9PSBUUlVFKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKKyAgICAgICAgcmV0dXJuIFB5X1RydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOworICAgIH0KK30KICNlbmRpZiAvKiBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQgKi8KIAogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19LZXlOYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqa25wOwotICAgICAgICAgICAgaW50IGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0tleU5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNvbnN0IGNoYXIgKmtucDsKKyAgICBpbnQgY2g7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpIiwmY2gpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgaWYgKGNoIDwgMCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBrZXkgbnVtYmVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBrbnAgPSBrZXluYW1lKGNoKTsKKyAgICBpZiAoY2ggPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBrZXkgbnVtYmVyIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBrbnAgPSBrZXluYW1lKGNoKTsKIAotICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoKGtucCA9PSBOVUxMKSA/ICIiIDogKGNoYXIgKilrbnApOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoKGtucCA9PSBOVUxMKSA/ICIiIDogKGNoYXIgKilrbnApOworfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0tpbGxDaGFyKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0tpbGxDaGFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIgY2g7CiAKLSAgICAgICAgICAgIGNoID0ga2lsbGNoYXIoKTsKKyAgICBjaCA9IGtpbGxjaGFyKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmY2gsIDEpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKCZjaCwgMSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX01ldGEoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTWV0YShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGNoOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmY2gpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm1ldGEgcmVxdWlyZXMgMSBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZjaCkpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibWV0YSByZXF1aXJlcyAxIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIobWV0YShzdGRzY3IsIGNoKSwgIm1ldGEiKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKG1ldGEoc3Rkc2NyLCBjaCksICJtZXRhIik7Cit9CiAKICNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX01vdXNlSW50ZXJ2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW50ZXJ2YWw7Ci0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTW91c2VJbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGludGVydmFsOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtpbnRlcnZhbCIsJmludGVydmFsKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihtb3VzZWludGVydmFsKGludGVydmFsKSwgIm1vdXNlaW50ZXJ2YWwiKTsKLSAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO2ludGVydmFsIiwmaW50ZXJ2YWwpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihtb3VzZWludGVydmFsKGludGVydmFsKSwgIm1vdXNlaW50ZXJ2YWwiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTW91c2VNYXNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG5ld21hc2s7Ci0gICAgICAgICAgICBtbWFza190IG9sZG1hc2ssIGF2YWlsbWFzazsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Nb3VzZU1hc2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBuZXdtYXNrOworICAgIG1tYXNrX3Qgb2xkbWFzaywgYXZhaWxtYXNrOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7bW91c2VtYXNrIiwmbmV3bWFzaykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgYXZhaWxtYXNrID0gbW91c2VtYXNrKG5ld21hc2ssICZvbGRtYXNrKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobGwpIiwgKGxvbmcpYXZhaWxtYXNrLCAobG9uZylvbGRtYXNrKTsKLSAgICAgICAgfQorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7bW91c2VtYXNrIiwmbmV3bWFzaykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGF2YWlsbWFzayA9IG1vdXNlbWFzayhuZXdtYXNrLCAmb2xkbWFzayk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihsbCkiLCAobG9uZylhdmFpbG1hc2ssIChsb25nKW9sZG1hc2spOworfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX05hcG1zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG1zOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX05hcG1zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbXM7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7bXMiLCAmbXMpKSByZXR1cm4gTlVMTDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTttcyIsICZtcykpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIG5hcG1zKG1zKSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIG5hcG1zKG1zKSk7Cit9CiAKIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTmV3UGFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgV0lORE9XICp3aW47Ci0gICAgICAgICAgICBpbnQgbmxpbmVzLCBuY29sczsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19OZXdQYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFdJTkRPVyAqd2luOworICAgIGludCBubGluZXMsIG5jb2xzOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtubGluZXMsbmNvbHMiLCZubGluZXMsJm5jb2xzKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO25saW5lcyxuY29scyIsJm5saW5lcywmbmNvbHMpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgd2luID0gbmV3cGFkKG5saW5lcywgbmNvbHMpOworICAgIHdpbiA9IG5ld3BhZChubGluZXMsIG5jb2xzKTsKIAotICAgICAgICAgICAgaWYgKHdpbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICh3aW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOwotICAgICAgICB9CisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19OZXdXaW5kb3coUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKLSAgICAgICAgICAgIGludCBubGluZXMsIG5jb2xzLCBiZWdpbl95PTAsIGJlZ2luX3g9MDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19OZXdXaW5kb3coUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFdJTkRPVyAqd2luOworICAgIGludCBubGluZXMsIG5jb2xzLCBiZWdpbl95PTAsIGJlZ2luX3g9MDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO25saW5lcyxuY29scyIsJm5saW5lcywmbmNvbHMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWlpO25saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3giLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5saW5lcywmbmNvbHMsJmJlZ2luX3ksJmJlZ2luX3gpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJuZXd3aW4gcmVxdWlyZXMgMiBvciA0IGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtubGluZXMsbmNvbHMiLCZubGluZXMsJm5jb2xzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpaTtubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZubGluZXMsJm5jb2xzLCZiZWdpbl95LCZiZWdpbl94KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibmV3d2luIHJlcXVpcmVzIDIgb3IgNCBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICB3aW4gPSBuZXd3aW4obmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCk7Ci0gICAgICAgICAgICBpZiAod2luID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgd2luID0gbmV3d2luKG5saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3gpOworICAgIGlmICh3aW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOwotICAgICAgICB9CisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19QYWlyX0NvbnRlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaG9ydCBwYWlyLGYsYjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19QYWlyX0NvbnRlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IHBhaXIsZixiOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImg7cGFpciIsICZwYWlyKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJwYWlyX2NvbnRlbnQgcmVxdWlyZXMgMSBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoO3BhaXIiLCAmcGFpcikpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicGFpcl9jb250ZW50IHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICBpZiAocGFpcl9jb250ZW50KHBhaXIsICZmLCAmYik9PUVSUikgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgMSB3YXMgb3V0IG9mIHJhbmdlLiAoMS4uQ09MT1JfUEFJUlMtMSkiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAocGFpcl9jb250ZW50KHBhaXIsICZmLCAmYik9PUVSUikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCAxIHdhcyBvdXQgb2YgcmFuZ2UuICgxLi5DT0xPUl9QQUlSUy0xKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZiwgYik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGYsIGIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19wYWlyX251bWJlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3BhaXJfbnVtYmVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbjsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO3BhaXJ2YWx1ZSIsICZuKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFpcl9udW1iZXIgcmVxdWlyZXMgMSBhcmd1bWVudCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO3BhaXJ2YWx1ZSIsICZuKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicGFpcl9udW1iZXIgcmVxdWlyZXMgMSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgKChuICYgQV9DT0xPUikgPj4gOCkpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSAoKG4gJiBBX0NPTE9SKSA+PiA4KSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1B1dHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpzdHI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUHV0cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqc3RyOwogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywicztzdHIiLCAmc3RyKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihwdXRwKHN0ciksICJwdXRwIik7Ci0gICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywicztzdHIiLCAmc3RyKSkgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocHV0cChzdHIpLCAicHV0cCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19RaUZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZsYWcgPSAwOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1FpRmx1c2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmbGFnID0gMDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICBxaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7VHJ1ZSgxKSBvciBGYWxzZSgwKSIsICZmbGFnKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmbGFnKSBxaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugbm9xaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInFpZmx1c2ggcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAwOgorICAgICAgICBxaWZsdXNoKCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7VHJ1ZSgxKSBvciBGYWxzZSgwKSIsICZmbGFnKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChmbGFnKSBxaWZsdXNoKCk7CisgICAgICAgIGVsc2Ugbm9xaWZsdXNoKCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInFpZmx1c2ggcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKIC8qIEludGVybmFsIGhlbHBlciB1c2VkIGZvciB1cGRhdGluZyBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTLCBfY3Vyc2VzLkxJTkVTCiAgKiBhbmQgX2N1cnNlcy5DT0xTICovCiAjaWYgZGVmaW5lZChIQVZFX0NVUlNFU19SRVNJWkVURVJNKSB8fCBkZWZpbmVkKEhBVkVfQ1VSU0VTX1JFU0laRV9URVJNKQotICAgICAgICBzdGF0aWMgaW50Ci0gICAgICAgICAgICB1cGRhdGVfbGluZXNfY29scyh2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbzsKLSAgICAgICAgICAgIFB5T2JqZWN0ICptID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygiY3Vyc2VzIik7CitzdGF0aWMgaW50Cit1cGRhdGVfbGluZXNfY29scyh2b2lkKQoreworICAgIFB5T2JqZWN0ICpvOworICAgIFB5T2JqZWN0ICptID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygiY3Vyc2VzIik7CiAKLSAgICAgICAgICAgIGlmICghbSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBvID0gUHlJbnRfRnJvbUxvbmcoTElORVMpOwotICAgICAgICAgICAgaWYgKCFvKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcobSwgIkxJTkVTIiwgbykpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJMSU5FUyIsIG8pKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICAgICAgICAgIG8gPSBQeUludF9Gcm9tTG9uZyhDT0xTKTsKLSAgICAgICAgICAgIGlmICghbykgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKG0sICJDT0xTIiwgbykpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xTIiwgbykpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KKyAgICBvID0gUHlJbnRfRnJvbUxvbmcoTElORVMpOworICAgIGlmICghbykgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhtLCAiTElORVMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiTElORVMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFB5X0RFQ1JFRihvKTsKKyAgICBvID0gUHlJbnRfRnJvbUxvbmcoQ09MUyk7CisgICAgaWYgKCFvKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKG0sICJDT0xTIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkNPTFMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFB5X0RFQ1JFRihvKTsKKyAgICBQeV9ERUNSRUYobSk7CisgICAgcmV0dXJuIDE7Cit9CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1Jlc2l6ZVRlcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbGluZXM7Ci0gICAgICAgICAgICBpbnQgY29sdW1uczsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUmVzaXplVGVybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGxpbmVzOworICAgIGludCBjb2x1bW5zOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpOnJlc2l6ZXRlcm0iLCAmbGluZXMsICZjb2x1bW5zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpOnJlc2l6ZXRlcm0iLCAmbGluZXMsICZjb2x1bW5zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5Q3Vyc2VzQ2hlY2tFUlIocmVzaXpldGVybShsaW5lcywgY29sdW1ucyksICJyZXNpemV0ZXJtIik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICghdXBkYXRlX2xpbmVzX2NvbHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KKyAgICByZXN1bHQgPSBQeUN1cnNlc0NoZWNrRVJSKHJlc2l6ZXRlcm0obGluZXMsIGNvbHVtbnMpLCAicmVzaXpldGVybSIpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIXVwZGF0ZV9saW5lc19jb2xzKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1Jlc2l6ZV9UZXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxpbmVzOwotICAgICAgICAgICAgaW50IGNvbHVtbnM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUmVzaXplX1Rlcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBsaW5lczsKKyAgICBpbnQgY29sdW1uczsKIAotICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTpyZXNpemVfdGVybSIsICZsaW5lcywgJmNvbHVtbnMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6cmVzaXplX3Rlcm0iLCAmbGluZXMsICZjb2x1bW5zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5Q3Vyc2VzQ2hlY2tFUlIocmVzaXplX3Rlcm0obGluZXMsIGNvbHVtbnMpLCAicmVzaXplX3Rlcm0iKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgaWYgKCF1cGRhdGVfbGluZXNfY29scygpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQorICAgIHJlc3VsdCA9IFB5Q3Vyc2VzQ2hlY2tFUlIocmVzaXplX3Rlcm0obGluZXMsIGNvbHVtbnMpLCAicmVzaXplX3Rlcm0iKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCF1cGRhdGVfbGluZXNfY29scygpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcmVzdWx0OworfQogI2VuZGlmIC8qIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJNICovCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3NldHN5eChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5LHg7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfc2V0c3l4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgeSx4OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykhPTIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInNldHN5eCByZXF1aXJlcyAyIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSE9MikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic2V0c3l4IHJlcXVpcmVzIDIgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTt5LCB4IiwgJnksICZ4KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTt5LCB4IiwgJnksICZ4KSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHNldHN5eCh5LHgpOworICAgIHNldHN5eCh5LHgpOwogCi0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgfQorICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfU3RhcnRfQ29sb3IoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjb2RlOwotICAgICAgICAgICAgUHlPYmplY3QgKmMsICpjcDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19TdGFydF9Db2xvcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgY29kZTsKKyAgICBQeU9iamVjdCAqYywgKmNwOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGNvZGUgPSBzdGFydF9jb2xvcigpOwotICAgICAgICAgICAgaWYgKGNvZGUgIT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGlzZWRjb2xvcnMgPSBUUlVFOwotICAgICAgICAgICAgICAgIGMgPSBQeUludF9Gcm9tTG9uZygobG9uZykgQ09MT1JTKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JTIiwgYyk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGMpOwotICAgICAgICAgICAgICAgIGNwID0gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIENPTE9SX1BBSVJTKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JfUEFJUlMiLCBjcCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGNwKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAic3RhcnRfY29sb3IoKSByZXR1cm5lZCBFUlIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGNvZGUgPSBzdGFydF9jb2xvcigpOworICAgIGlmIChjb2RlICE9IEVSUikgeworICAgICAgICBpbml0aWFsaXNlZGNvbG9ycyA9IFRSVUU7CisgICAgICAgIGMgPSBQeUludF9Gcm9tTG9uZygobG9uZykgQ09MT1JTKTsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkNPTE9SUyIsIGMpOworICAgICAgICBQeV9ERUNSRUYoYyk7CisgICAgICAgIGNwID0gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIENPTE9SX1BBSVJTKTsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkNPTE9SX1BBSVJTIiwgY3ApOworICAgICAgICBQeV9ERUNSRUYoY3ApOworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAic3RhcnRfY29sb3IoKSByZXR1cm5lZCBFUlIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc190aWdldGZsYWcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpjYXBuYW1lOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3RpZ2V0ZmxhZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqY2FwbmFtZTsKIAotICAgICAgICAgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CisgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmY2FwbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoIChsb25nKSB0aWdldGZsYWcoIGNhcG5hbWUgKSApOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKCAobG9uZykgdGlnZXRmbGFnKCBjYXBuYW1lICkgKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfdGlnZXRudW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpjYXBuYW1lOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3RpZ2V0bnVtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjYXBuYW1lOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyggKGxvbmcpIHRpZ2V0bnVtKCBjYXBuYW1lICkgKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyggKGxvbmcpIHRpZ2V0bnVtKCBjYXBuYW1lICkgKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfdGlnZXRzdHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpjYXBuYW1lOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3RpZ2V0c3RyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjYXBuYW1lOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGNhcG5hbWUgPSB0aWdldHN0ciggY2FwbmFtZSApOwotICAgICAgICAgICAgaWYgKGNhcG5hbWUgPT0gMCB8fCBjYXBuYW1lID09IChjaGFyKikgLTEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyggY2FwbmFtZSApOwotICAgICAgICB9CisgICAgY2FwbmFtZSA9IHRpZ2V0c3RyKCBjYXBuYW1lICk7CisgICAgaWYgKGNhcG5hbWUgPT0gMCB8fCBjYXBuYW1lID09IChjaGFyKikgLTEpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIGNhcG5hbWUgKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfdHBhcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyKiBmbXQ7Ci0gICAgICAgICAgICBjaGFyKiByZXN1bHQgPSBOVUxMOwotICAgICAgICAgICAgaW50IGkxPTAsaTI9MCxpMz0wLGk0PTAsaTU9MCxpNj0wLGk3PTAsaTg9MCxpOT0wOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3RwYXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyKiBmbXQ7CisgICAgY2hhciogcmVzdWx0ID0gTlVMTDsKKyAgICBpbnQgaTE9MCxpMj0wLGkzPTAsaTQ9MCxpNT0wLGk2PTAsaTc9MCxpOD0wLGk5PTA7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOworICAgIFB5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOwogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInN8aWlpaWlpaWlpOnRwYXJtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm10LCAmaTEsICZpMiwgJmkzLCAmaTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmk1LCAmaTYsICZpNywgJmk4LCAmaTkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfGlpaWlpaWlpaTp0cGFybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZmbXQsICZpMSwgJmkyLCAmaTMsICZpNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmk1LCAmaTYsICZpNywgJmk4LCAmaTkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0ID0gdHBhcm0oZm10LGkxLGkyLGkzLGk0LGk1LGk2LGk3LGk4LGk5KTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJ0cGFybSgpIHJldHVybmVkIE5VTEwiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICByZXN1bHQgPSB0cGFybShmbXQsaTEsaTIsaTMsaTQsaTUsaTYsaTcsaTgsaTkpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidHBhcm0oKSByZXR1cm5lZCBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzdWx0KTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlc3VsdCk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1R5cGVBaGVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmZDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19UeXBlQWhlYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtmZCIsJmZkKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7ZmQiLCZmZCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih0eXBlYWhlYWQoIGZkICksICJ0eXBlYWhlYWQiKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHR5cGVhaGVhZCggZmQgKSwgInR5cGVhaGVhZCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19VbkN0cmwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdGVtcDsKLSAgICAgICAgICAgIGNodHlwZSBjaDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19VbkN0cmwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp0ZW1wOworICAgIGNodHlwZSBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIk87Y2ggb3IgaW50IiwmdGVtcCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoUHlJbnRfQ2hlY2sodGVtcCkpCi0gICAgICAgICAgICAgICAgY2ggPSAoY2h0eXBlKSBQeUludF9Bc0xvbmcodGVtcCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayh0ZW1wKSkKLSAgICAgICAgICAgICAgICBjaCA9IChjaHR5cGUpICpQeVN0cmluZ19Bc1N0cmluZyh0ZW1wKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKFB5SW50X0NoZWNrKHRlbXApKQorICAgICAgICBjaCA9IChjaHR5cGUpIFB5SW50X0FzTG9uZyh0ZW1wKTsKKyAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayh0ZW1wKSkKKyAgICAgICAgY2ggPSAoY2h0eXBlKSAqUHlTdHJpbmdfQXNTdHJpbmcodGVtcCk7CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcodW5jdHJsKGNoKSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyh1bmN0cmwoY2gpKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVW5nZXRDaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotICAgICAgICAgICAgaW50IGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VuZ2V0Q2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp0ZW1wOworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIk87Y2ggb3IgaW50IiwmdGVtcCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoUHlJbnRfQ2hlY2sodGVtcCkpCi0gICAgICAgICAgICAgICAgY2ggPSAoaW50KSBQeUludF9Bc0xvbmcodGVtcCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayh0ZW1wKSkKLSAgICAgICAgICAgICAgICBjaCA9IChpbnQpICpQeVN0cmluZ19Bc1N0cmluZyh0ZW1wKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKFB5SW50X0NoZWNrKHRlbXApKQorICAgICAgICBjaCA9IChpbnQpIFB5SW50X0FzTG9uZyh0ZW1wKTsKKyAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayh0ZW1wKSkKKyAgICAgICAgY2ggPSAoaW50KSAqUHlTdHJpbmdfQXNTdHJpbmcodGVtcCk7CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodW5nZXRjaChjaCksICJ1bmdldGNoIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih1bmdldGNoKGNoKSwgInVuZ2V0Y2giKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVXNlX0VudihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmbGFnOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VzZV9FbnYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmbGFnOwogCi0gICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZmbGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ1c2VfZW52IHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZV9lbnYoZmxhZyk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmZmxhZykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVzZV9lbnYgcmVxdWlyZXMgMSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdXNlX2VudihmbGFnKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CiAKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Vc2VfRGVmYXVsdF9Db2xvcnMoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjb2RlOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VzZV9EZWZhdWx0X0NvbG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgY29kZTsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgY29kZSA9IHVzZV9kZWZhdWx0X2NvbG9ycygpOwotICAgICAgICAgICAgaWYgKGNvZGUgIT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgInVzZV9kZWZhdWx0X2NvbG9ycygpIHJldHVybmVkIEVSUiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29kZSA9IHVzZV9kZWZhdWx0X2NvbG9ycygpOworICAgIGlmIChjb2RlICE9IEVSUikgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidXNlX2RlZmF1bHRfY29sb3JzKCkgcmV0dXJuZWQgRVJSIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KICNlbmRpZiAvKiBTVFJJQ1RfU1lTVl9DVVJTRVMgKi8KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlICovCiAKLSAgICAgICAgc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzX21ldGhvZHNbXSA9IHsKLSAgICAgICAgICAgIHsiYmF1ZHJhdGUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19iYXVkcmF0ZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJiZWVwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JlZXAsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY2FuX2NoYW5nZV9jb2xvciIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYW5fY2hhbmdlX2NvbG9yLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImNicmVhayIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY2JyZWFrLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjb2xvcl9jb250ZW50IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNvbG9yX3BhaXIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY29sb3JfcGFpciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY3Vyc19zZXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19DdXJzX1NldCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZGVmX3Byb2dfbW9kZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kZWZfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImRlZl9zaGVsbF9tb2RlIiwgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZGVmX3NoZWxsX21vZGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZGVsYXlfb3V0cHV0IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19EZWxheV9PdXRwdXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImRvdXBkYXRlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZG91cGRhdGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZWNobyIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19lY2hvLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJlbmR3aW4iLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2VuZHdpbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJlcmFzZWNoYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0VyYXNlQ2hhciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJmaWx0ZXIiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2ZpbHRlciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJmbGFzaCIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2ZsYXNoLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImZsdXNoaW5wIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmx1c2hpbnAsIE1FVEhfTk9BUkdTfSwKK3N0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc19tZXRob2RzW10gPSB7CisgICAgeyJiYXVkcmF0ZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JhdWRyYXRlLCBNRVRIX05PQVJHU30sCisgICAgeyJiZWVwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JlZXAsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImNhbl9jaGFuZ2VfY29sb3IiLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY2FuX2NoYW5nZV9jb2xvciwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2JyZWFrIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYnJlYWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2xvcl9jb250ZW50IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2xvcl9wYWlyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2NvbG9yX3BhaXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjdXJzX3NldCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0N1cnNfU2V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZGVmX3Byb2dfbW9kZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kZWZfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZWZfc2hlbGxfbW9kZSIsICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2RlZl9zaGVsbF9tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZWxheV9vdXRwdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0RlbGF5X091dHB1dCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImRvdXBkYXRlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZG91cGRhdGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImVjaG8iLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZWNobywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImVuZHdpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZW5kd2luLCBNRVRIX05PQVJHU30sCisgICAgeyJlcmFzZWNoYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0VyYXNlQ2hhciwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsdGVyIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19maWx0ZXIsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImZsYXNoIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmxhc2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImZsdXNoaW5wIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmx1c2hpbnAsIE1FVEhfTk9BUkdTfSwKICNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KLSAgICAgICAgICAgIHsiZ2V0bW91c2UiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19HZXRNb3VzZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ1bmdldG1vdXNlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0TW91c2UsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRtb3VzZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0dldE1vdXNlLCBNRVRIX05PQVJHU30sCisgICAgeyJ1bmdldG1vdXNlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0TW91c2UsIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsiZ2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19nZXRzeXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0d2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19HZXRXaW4sIE1FVEhfT30sCi0gICAgICAgICAgICB7Imhhc19jb2xvcnMiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2NvbG9ycywgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJoYXNfaWMiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pYywgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJoYXNfaWwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pbCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19nZXRzeXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldHdpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfR2V0V2luLCBNRVRIX099LAorICAgIHsiaGFzX2NvbG9ycyIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfY29sb3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJoYXNfaWMiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pYywgTUVUSF9OT0FSR1N9LAorICAgIHsiaGFzX2lsIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfaWwsIE1FVEhfTk9BUkdTfSwKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgICAgICB7Imhhc19rZXkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2tleSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imhhc19rZXkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2tleSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJoYWxmZGVsYXkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0hhbGZEZWxheSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5pdF9jb2xvciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0X0NvbG9yLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbml0X3BhaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0luaXRfUGFpciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5pdHNjciIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0U2NyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImludHJmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW50ckZsdXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpc2VuZHdpbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2lzZW5kd2luLCBNRVRIX05PQVJHU30sCisgICAgeyJoYWxmZGVsYXkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0hhbGZEZWxheSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluaXRfY29sb3IiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW5pdF9Db2xvciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluaXRfcGFpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW5pdF9QYWlyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5pdHNjciIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0U2NyLCBNRVRIX05PQVJHU30sCisgICAgeyJpbnRyZmx1c2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0ludHJGbHVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlzZW5kd2luIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaXNlbmR3aW4sIE1FVEhfTk9BUkdTfSwKICNpZmRlZiBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQKLSAgICAgICAgICAgIHsiaXNfdGVybV9yZXNpemVkIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jc19UZXJtX1Jlc2l6ZWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpc190ZXJtX3Jlc2l6ZWQiLCAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0lzX1Rlcm1fUmVzaXplZCwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgICAgICB7ImtleW5hbWUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfS2V5TmFtZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImtleW5hbWUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfS2V5TmFtZSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJraWxsY2hhciIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0tpbGxDaGFyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImxvbmduYW1lIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbG9uZ25hbWUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsibWV0YSIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19NZXRhLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsia2lsbGNoYXIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19LaWxsQ2hhciwgTUVUSF9OT0FSR1N9LAorICAgIHsibG9uZ25hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19sb25nbmFtZSwgTUVUSF9OT0FSR1N9LAorICAgIHsibWV0YSIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19NZXRhLCBNRVRIX1ZBUkFSR1N9LAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgeyJtb3VzZWludGVydmFsIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01vdXNlSW50ZXJ2YWwsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im1vdXNlbWFzayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTW91c2VNYXNrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibW91c2VpbnRlcnZhbCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Nb3VzZUludGVydmFsLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibW91c2VtYXNrIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Nb3VzZU1hc2ssIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsibmFwbXMiLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OYXBtcywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibmV3cGFkIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OZXdQYWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5ld3dpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmV3V2luZG93LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJubCIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25sLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJub2NicmVhayIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vY2JyZWFrLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vZWNobyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9lY2hvLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vbmwiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9ubCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJub3FpZmx1c2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcWlmbHVzaCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJub3JhdyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcmF3LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InBhaXJfY29udGVudCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUGFpcl9Db250ZW50LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJwYWlyX251bWJlciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3BhaXJfbnVtYmVyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJwdXRwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1B1dHAsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InFpZmx1c2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUWlGbHVzaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicmF3IiwgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yYXcsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InJlc2V0X3Byb2dfbW9kZSIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InJlc2V0X3NoZWxsX21vZGUiLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfc2hlbGxfbW9kZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJyZXNldHR5IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Jlc2V0dHksIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5hcG1zIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmFwbXMsIE1FVEhfVkFSQVJHU30sCisgICAgeyJuZXdwYWQiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX05ld1BhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5ld3dpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmV3V2luZG93LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibmwiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ubCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5vY2JyZWFrIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9jYnJlYWssIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vZWNobyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9lY2hvLCBNRVRIX05PQVJHU30sCisgICAgeyJub25sIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vbmwsIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vcWlmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9xaWZsdXNoLCBNRVRIX05PQVJHU30sCisgICAgeyJub3JhdyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcmF3LCBNRVRIX05PQVJHU30sCisgICAgeyJwYWlyX2NvbnRlbnQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1BhaXJfQ29udGVudCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InBhaXJfbnVtYmVyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcGFpcl9udW1iZXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJwdXRwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1B1dHAsIE1FVEhfVkFSQVJHU30sCisgICAgeyJxaWZsdXNoIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1FpRmx1c2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyYXciLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3JhdywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlc2V0X3Byb2dfbW9kZSIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJyZXNldF9zaGVsbF9tb2RlIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Jlc2V0X3NoZWxsX21vZGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlc2V0dHkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXR0eSwgTUVUSF9OT0FSR1N9LAogI2lmZGVmIEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0KLSAgICAgICAgICAgIHsicmVzaXpldGVybSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVUZXJtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVzaXpldGVybSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVUZXJtLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0KLSAgICAgICAgICAgIHsicmVzaXplX3Rlcm0iLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVfVGVybSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlc2l6ZV90ZXJtIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUmVzaXplX1Rlcm0sIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsic2F2ZXR0eSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zYXZldHR5LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InNldHN5eCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2V0c3l4LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzZXR1cHRlcm0iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NldHVwdGVybSwKLSAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCi0gICAgICAgICAgICB7InN0YXJ0X2NvbG9yIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfU3RhcnRfQ29sb3IsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidGVybWF0dHJzIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtYXR0cnMsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidGVybW5hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtbmFtZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ0aWdldGZsYWciLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RpZ2V0ZmxhZywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidGlnZXRudW0iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldG51bSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidGlnZXRzdHIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldHN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidHBhcm0iLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190cGFybSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidHlwZWFoZWFkIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19UeXBlQWhlYWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InVuY3RybCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5DdHJsLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ1bmdldGNoIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0Q2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InVzZV9lbnYiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0VudiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InNhdmV0dHkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2F2ZXR0eSwgTUVUSF9OT0FSR1N9LAorICAgIHsic2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zZXRzeXgsIE1FVEhfVkFSQVJHU30sCisgICAgeyJzZXR1cHRlcm0iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NldHVwdGVybSwKKyAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsic3RhcnRfY29sb3IiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19TdGFydF9Db2xvciwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVybWF0dHJzIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtYXR0cnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlcm1uYW1lIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGVybW5hbWUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRpZ2V0ZmxhZyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGlnZXRmbGFnLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGlnZXRudW0iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldG51bSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRpZ2V0c3RyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGlnZXRzdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0cGFybSIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RwYXJtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidHlwZWFoZWFkIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19UeXBlQWhlYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ1bmN0cmwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuQ3RybCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVuZ2V0Y2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVzZV9lbnYiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0VudiwgTUVUSF9WQVJBUkdTfSwKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgICAgICB7InVzZV9kZWZhdWx0X2NvbG9ycyIsICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0RlZmF1bHRfQ29sb3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ1c2VfZGVmYXVsdF9jb2xvcnMiLCAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VzZV9EZWZhdWx0X0NvbG9ycywgTUVUSF9OT0FSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCi0gICAgICAgIH07CisgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKIAogLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKi8KIAotICAgICAgICBQeU1PRElOSVRfRlVOQwotICAgICAgICAgICAgaW5pdF9jdXJzZXModm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKmNfYXBpX29iamVjdDsKLSAgICAgICAgICAgIHN0YXRpYyB2b2lkICpQeUN1cnNlc19BUElbUHlDdXJzZXNfQVBJX3BvaW50ZXJzXTsKK1B5TU9ESU5JVF9GVU5DCitpbml0X2N1cnNlcyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptLCAqZCwgKnYsICpjX2FwaV9vYmplY3Q7CisgICAgc3RhdGljIHZvaWQgKlB5Q3Vyc2VzX0FQSVtQeUN1cnNlc19BUElfcG9pbnRlcnNdOwogCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlICovCi0gICAgICAgICAgICBQeV9UWVBFKCZQeUN1cnNlc1dpbmRvd19UeXBlKSA9ICZQeVR5cGVfVHlwZTsKKyAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlICovCisgICAgUHlfVFlQRSgmUHlDdXJzZXNXaW5kb3dfVHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAKLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEMgQVBJIHBvaW50ZXIgYXJyYXkgKi8KLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVswXSA9ICh2b2lkICopJlB5Q3Vyc2VzV2luZG93X1R5cGU7Ci0gICAgICAgICAgICBQeUN1cnNlc19BUElbMV0gPSAodm9pZCAqKWZ1bmNfUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7Ci0gICAgICAgICAgICBQeUN1cnNlc19BUElbMl0gPSAodm9pZCAqKWZ1bmNfUHlDdXJzZXNJbml0aWFsaXNlZDsKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVszXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CisgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyBBUEkgcG9pbnRlciBhcnJheSAqLworICAgIFB5Q3Vyc2VzX0FQSVswXSA9ICh2b2lkICopJlB5Q3Vyc2VzV2luZG93X1R5cGU7CisgICAgUHlDdXJzZXNfQVBJWzFdID0gKHZvaWQgKilmdW5jX1B5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOworICAgIFB5Q3Vyc2VzX0FQSVsyXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzX0FQSVszXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLwotICAgICAgICAgICAgbSA9IFB5X0luaXRNb2R1bGUoIl9jdXJzZXMiLCBQeUN1cnNlc19tZXRob2RzKTsKLSAgICAgICAgICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLworICAgIG0gPSBQeV9Jbml0TW9kdWxlKCJfY3Vyc2VzIiwgUHlDdXJzZXNfbWV0aG9kcyk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotICAgICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgICAgICBpZiAoZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIE1vZERpY3QgPSBkOyAvKiBGb3IgUHlDdXJzZXNfSW5pdFNjciB0byB1c2UgbGF0ZXIgKi8KKyAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLworICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOworICAgIGlmIChkID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICBNb2REaWN0ID0gZDsgLyogRm9yIFB5Q3Vyc2VzX0luaXRTY3IgdG8gdXNlIGxhdGVyICovCiAKLSAgICAgICAgICAgIC8qIEFkZCBhIENPYmplY3QgZm9yIHRoZSBDIEFQSSAqLwotICAgICAgICAgICAgY19hcGlfb2JqZWN0ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCh2b2lkICopUHlDdXJzZXNfQVBJLCBOVUxMKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfQ19BUEkiLCBjX2FwaV9vYmplY3QpOwotICAgICAgICAgICAgUHlfREVDUkVGKGNfYXBpX29iamVjdCk7CisgICAgLyogQWRkIGEgY2Fwc3VsZSBmb3IgdGhlIEMgQVBJICovCisgICAgY19hcGlfb2JqZWN0ID0gUHlDYXBzdWxlX05ldyhQeUN1cnNlc19BUEksIFB5Q3Vyc2VzX0NBUFNVTEVfTkFNRSwgTlVMTCk7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9DX0FQSSIsIGNfYXBpX29iamVjdCk7CisgICAgUHlfREVDUkVGKGNfYXBpX29iamVjdCk7CiAKLSAgICAgICAgICAgIC8qIEZvciBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCi0gICAgICAgICAgICBQeUN1cnNlc0Vycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfY3Vyc2VzLmVycm9yIiwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiZXJyb3IiLCBQeUN1cnNlc0Vycm9yKTsKKyAgICAvKiBGb3IgZXhjZXB0aW9uIGN1cnNlcy5lcnJvciAqLworICAgIFB5Q3Vyc2VzRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9jdXJzZXMuZXJyb3IiLCBOVUxMLCBOVUxMKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiZXJyb3IiLCBQeUN1cnNlc0Vycm9yKTsKIAotICAgICAgICAgICAgLyogTWFrZSB0aGUgdmVyc2lvbiBhdmFpbGFibGUgKi8KLSAgICAgICAgICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5Q3Vyc2VzVmVyc2lvbik7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAidmVyc2lvbiIsIHYpOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fdmVyc2lvbl9fIiwgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgLyogTWFrZSB0aGUgdmVyc2lvbiBhdmFpbGFibGUgKi8KKyAgICB2ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhQeUN1cnNlc1ZlcnNpb24pOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJ2ZXJzaW9uIiwgdik7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fdmVyc2lvbl9fIiwgdik7CisgICAgUHlfREVDUkVGKHYpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJFUlIiLCBFUlIpOwotICAgICAgICAgICAgU2V0RGljdEludCgiT0siLCBPSyk7CisgICAgU2V0RGljdEludCgiRVJSIiwgRVJSKTsKKyAgICBTZXREaWN0SW50KCJPSyIsIE9LKTsKIAotICAgICAgICAgICAgLyogSGVyZSBhcmUgc29tZSBhdHRyaWJ1dGVzIHlvdSBjYW4gYWRkIHRvIGNoYXJzIHRvIHByaW50ICovCisgICAgLyogSGVyZSBhcmUgc29tZSBhdHRyaWJ1dGVzIHlvdSBjYW4gYWRkIHRvIGNoYXJzIHRvIHByaW50ICovCiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQVRUUklCVVRFUyIsICAgICAgQV9BVFRSSUJVVEVTKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfTk9STUFMIiwgICAgICAgICAgICAgIEFfTk9STUFMKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfU1RBTkRPVVQiLCAgICAgICAgICAgIEFfU1RBTkRPVVQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9VTkRFUkxJTkUiLCAgICAgICAgICAgQV9VTkRFUkxJTkUpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9SRVZFUlNFIiwgICAgICAgICAgICAgQV9SRVZFUlNFKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQkxJTksiLCAgICAgICAgICAgICAgIEFfQkxJTkspOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9ESU0iLCAgICAgICAgICAgICAgICAgQV9ESU0pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9CT0xEIiwgICAgICAgICAgICAgICAgQV9CT0xEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQUxUQ0hBUlNFVCIsICAgICAgICAgIEFfQUxUQ0hBUlNFVCk7CisgICAgU2V0RGljdEludCgiQV9BVFRSSUJVVEVTIiwgICAgICBBX0FUVFJJQlVURVMpOworICAgIFNldERpY3RJbnQoIkFfTk9STUFMIiwgICAgICAgICAgICAgIEFfTk9STUFMKTsKKyAgICBTZXREaWN0SW50KCJBX1NUQU5ET1VUIiwgICAgICAgICAgICBBX1NUQU5ET1VUKTsKKyAgICBTZXREaWN0SW50KCJBX1VOREVSTElORSIsICAgICAgICAgICBBX1VOREVSTElORSk7CisgICAgU2V0RGljdEludCgiQV9SRVZFUlNFIiwgICAgICAgICAgICAgQV9SRVZFUlNFKTsKKyAgICBTZXREaWN0SW50KCJBX0JMSU5LIiwgICAgICAgICAgICAgICBBX0JMSU5LKTsKKyAgICBTZXREaWN0SW50KCJBX0RJTSIsICAgICAgICAgICAgICAgICBBX0RJTSk7CisgICAgU2V0RGljdEludCgiQV9CT0xEIiwgICAgICAgICAgICAgICAgQV9CT0xEKTsKKyAgICBTZXREaWN0SW50KCJBX0FMVENIQVJTRVQiLCAgICAgICAgICBBX0FMVENIQVJTRVQpOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0lOVklTIiwgICAgICAgICAgIEFfSU5WSVMpOworICAgIFNldERpY3RJbnQoIkFfSU5WSVMiLCAgICAgICAgICAgQV9JTlZJUyk7CiAjZW5kaWYKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfUFJPVEVDVCIsICAgICAgICAgQV9QUk9URUNUKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQ0hBUlRFWFQiLCAgICAgICAgQV9DSEFSVEVYVCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0NPTE9SIiwgICAgICAgICAgIEFfQ09MT1IpOworICAgIFNldERpY3RJbnQoIkFfUFJPVEVDVCIsICAgICAgICAgQV9QUk9URUNUKTsKKyAgICBTZXREaWN0SW50KCJBX0NIQVJURVhUIiwgICAgICAgIEFfQ0hBUlRFWFQpOworICAgIFNldERpY3RJbnQoIkFfQ09MT1IiLCAgICAgICAgICAgQV9DT0xPUik7CiAKLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLworICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLwogI2lmZGVmIEFfSE9SSVpPTlRBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9IT1JJWk9OVEFMIiwgICAgICBBX0hPUklaT05UQUwpOworICAgIFNldERpY3RJbnQoIkFfSE9SSVpPTlRBTCIsICAgICAgQV9IT1JJWk9OVEFMKTsKICNlbmRpZgogI2lmZGVmIEFfTEVGVAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9MRUZUIiwgICAgICAgICAgICBBX0xFRlQpOworICAgIFNldERpY3RJbnQoIkFfTEVGVCIsICAgICAgICAgICAgQV9MRUZUKTsKICNlbmRpZgogI2lmZGVmIEFfTE9XCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0xPVyIsICAgICAgICAgICAgIEFfTE9XKTsKKyAgICBTZXREaWN0SW50KCJBX0xPVyIsICAgICAgICAgICAgIEFfTE9XKTsKICNlbmRpZgogI2lmZGVmIEFfUklHSFQKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfUklHSFQiLCAgICAgICAgICAgQV9SSUdIVCk7CisgICAgU2V0RGljdEludCgiQV9SSUdIVCIsICAgICAgICAgICBBX1JJR0hUKTsKICNlbmRpZgogI2lmZGVmIEFfVE9QCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX1RPUCIsICAgICAgICAgICAgIEFfVE9QKTsKKyAgICBTZXREaWN0SW50KCJBX1RPUCIsICAgICAgICAgICAgIEFfVE9QKTsKICNlbmRpZgogI2lmZGVmIEFfVkVSVElDQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfVkVSVElDQUwiLCAgICAgICAgQV9WRVJUSUNBTCk7CisgICAgU2V0RGljdEludCgiQV9WRVJUSUNBTCIsICAgICAgICBBX1ZFUlRJQ0FMKTsKICNlbmRpZgogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9CTEFDSyIsICAgICAgIENPTE9SX0JMQUNLKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX1JFRCIsICAgICAgICAgQ09MT1JfUkVEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX0dSRUVOIiwgICAgICAgQ09MT1JfR1JFRU4pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfWUVMTE9XIiwgICAgICBDT0xPUl9ZRUxMT1cpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfQkxVRSIsICAgICAgICBDT0xPUl9CTFVFKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX01BR0VOVEEiLCAgICAgQ09MT1JfTUFHRU5UQSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9DWUFOIiwgICAgICAgIENPTE9SX0NZQU4pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfV0hJVEUiLCAgICAgICBDT0xPUl9XSElURSk7CisgICAgU2V0RGljdEludCgiQ09MT1JfQkxBQ0siLCAgICAgICBDT0xPUl9CTEFDSyk7CisgICAgU2V0RGljdEludCgiQ09MT1JfUkVEIiwgICAgICAgICBDT0xPUl9SRUQpOworICAgIFNldERpY3RJbnQoIkNPTE9SX0dSRUVOIiwgICAgICAgQ09MT1JfR1JFRU4pOworICAgIFNldERpY3RJbnQoIkNPTE9SX1lFTExPVyIsICAgICAgQ09MT1JfWUVMTE9XKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9CTFVFIiwgICAgICAgIENPTE9SX0JMVUUpOworICAgIFNldERpY3RJbnQoIkNPTE9SX01BR0VOVEEiLCAgICAgQ09MT1JfTUFHRU5UQSk7CisgICAgU2V0RGljdEludCgiQ09MT1JfQ1lBTiIsICAgICAgICBDT0xPUl9DWUFOKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9XSElURSIsICAgICAgIENPTE9SX1dISVRFKTsKIAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgLyogTW91c2UtcmVsYXRlZCBjb25zdGFudHMgKi8KLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjFfUFJFU1NFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04xX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04xX1JFTEVBU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjFfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04xX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04xX0RPVUJMRV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOworICAgIC8qIE1vdXNlLXJlbGF0ZWQgY29uc3RhbnRzICovCisgICAgU2V0RGljdEludCgiQlVUVE9OMV9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9OMV9QUkVTU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04xX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04xX1JFTEVBU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04xX0NMSUNLRUQiLCAgICAgICAgICBCVVRUT04xX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX1BSRVNTRUQiLCAgICAgICAgICBCVVRUT04yX1BSRVNTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMl9SRUxFQVNFRCIsICAgICAgICAgQlVUVE9OMl9SRUxFQVNFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX0NMSUNLRUQiLCAgICAgICAgICBCVVRUT04yX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT04yX1RSSVBMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04yX1BSRVNTRUQiLCAgICAgICAgICBCVVRUT04yX1BSRVNTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjJfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjJfUkVMRUFTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjJfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjJfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjNfUFJFU1NFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04zX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04zX1JFTEVBU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjNfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04zX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjNfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjNfUFJFU1NFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OM19SRUxFQVNFRCIsICAgICAgICAgQlVUVE9OM19SRUxFQVNFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OM19DTElDS0VEIiwgICAgICAgICAgQlVUVE9OM19DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT04zX1RSSVBMRV9DTElDS0VEKTsKIAotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9ONF9QUkVTU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjRfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjRfUkVMRUFTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9DTElDS0VEIiwgICAgICAgICAgQlVUVE9ONF9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjRfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9ONF9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9ONF9QUkVTU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT040X1JFTEVBU0VEIiwgICAgICAgICBCVVRUT040X1JFTEVBU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT040X0NMSUNLRUQiLCAgICAgICAgICBCVVRUT040X0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjRfVFJJUExFX0NMSUNLRUQpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT05fU0hJRlQiLCAgICAgICAgICAgICBCVVRUT05fU0hJRlQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OX0NUUkwiLCAgICAgICAgICAgICAgQlVUVE9OX0NUUkwpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OX0FMVCIsICAgICAgICAgICAgICAgQlVUVE9OX0FMVCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OX1NISUZUIiwgICAgICAgICAgICAgQlVUVE9OX1NISUZUKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT05fQ1RSTCIsICAgICAgICAgICAgICBCVVRUT05fQ1RSTCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OX0FMVCIsICAgICAgICAgICAgICAgQlVUVE9OX0FMVCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFMTF9NT1VTRV9FVkVOVFMiLCAgICAgICAgIEFMTF9NT1VTRV9FVkVOVFMpOwotICAgICAgICAgICAgU2V0RGljdEludCgiUkVQT1JUX01PVVNFX1BPU0lUSU9OIiwgICAgUkVQT1JUX01PVVNFX1BPU0lUSU9OKTsKKyAgICBTZXREaWN0SW50KCJBTExfTU9VU0VfRVZFTlRTIiwgICAgICAgICBBTExfTU9VU0VfRVZFTlRTKTsKKyAgICBTZXREaWN0SW50KCJSRVBPUlRfTU9VU0VfUE9TSVRJT04iLCAgICBSRVBPUlRfTU9VU0VfUE9TSVRJT04pOwogI2VuZGlmCi0gICAgICAgICAgICAvKiBOb3cgc2V0IGV2ZXJ5dGhpbmcgdXAgZm9yIEtFWV8gdmFyaWFibGVzICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGtleTsKLSAgICAgICAgICAgICAgICBjaGFyICprZXlfbjsKLSAgICAgICAgICAgICAgICBjaGFyICprZXlfbjI7CisgICAgLyogTm93IHNldCBldmVyeXRoaW5nIHVwIGZvciBLRVlfIHZhcmlhYmxlcyAqLworICAgIHsKKyAgICAgICAgaW50IGtleTsKKyAgICAgICAgY2hhciAqa2V5X247CisgICAgICAgIGNoYXIgKmtleV9uMjsKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKQotICAgICAgICAgICAgICAgIGZvciAoa2V5PUtFWV9NSU47a2V5IDwgS0VZX01BWDsga2V5KyspIHsKLSAgICAgICAgICAgICAgICAgICAga2V5X24gPSAoY2hhciAqKWtleW5hbWUoa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleV9uID09IE5VTEwgfHwgc3RyY21wKGtleV9uLCJVTktOT1dOIEtFWSIpPT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKGtleV9uLCJLRVlfRigiLDYpPT0wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWtleV9uMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMSA9IGtleV9uOwotICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBrZXlfbjI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwMSAhPSAnKCcgJiYgKnAxICE9ICcpJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcDIgPSAqcDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcDIgPSAoY2hhcikwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOwotICAgICAgICAgICAgICAgICAgICBTZXREaWN0SW50KGtleV9uMixrZXkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOworICAgICAgICBmb3IgKGtleT1LRVlfTUlOO2tleSA8IEtFWV9NQVg7IGtleSsrKSB7CisgICAgICAgICAgICBrZXlfbiA9IChjaGFyICopa2V5bmFtZShrZXkpOworICAgICAgICAgICAgaWYgKGtleV9uID09IE5VTEwgfHwgc3RyY21wKGtleV9uLCJVTktOT1dOIEtFWSIpPT0wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKKyAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOworICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgIFNldERpY3RJbnQoIktFWV9NSU4iLCBLRVlfTUlOKTsKLSAgICAgICAgICAgICAgICBTZXREaWN0SW50KCJLRVlfTUFYIiwgS0VZX01BWCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcDEgPSBrZXlfbjsKKyAgICAgICAgICAgICAgICBwMiA9IGtleV9uMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKnAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqcDEgIT0gJygnICYmICpwMSAhPSAnKScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwMiA9ICpwMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcDErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnAyID0gKGNoYXIpMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOworICAgICAgICAgICAgU2V0RGljdEludChrZXlfbjIsa2V5KTsKKyAgICAgICAgICAgIGlmIChrZXlfbjIgIT0ga2V5X24pCisgICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOwogICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgU2V0RGljdEludCgiS0VZX01JTiIsIEtFWV9NSU4pOworICAgICAgICBTZXREaWN0SW50KCJLRVlfTUFYIiwgS0VZX01BWCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKaW5kZXggNjg0MDgxYy4uNDMxMWJhMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYworKysgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCkBAIC0xLDIxICsxLDE1IEBACiAvKgogICogRWxlbWVudFRyZWUKLSAqICRJZDogX2VsZW1lbnR0cmVlLmMgMjY1NyAyMDA2LTAzLTEyIDIwOjUwOjMyWiBmcmVkcmlrICQKKyAqICRJZDogX2VsZW1lbnR0cmVlLmMgMzQ3MyAyMDA5LTAxLTExIDIyOjUzOjU1WiBmcmVkcmlrICQKICAqCiAgKiBlbGVtZW50dHJlZSBhY2NlbGVyYXRvcgogICoKICAqIEhpc3Rvcnk6CiAgKiAxOTk5LTA2LTIwIGZsICBjcmVhdGVkIChhcyBwYXJ0IG9mIHNnbWxvcCkKICAqIDIwMDEtMDUtMjkgZmwgIGVmZmRvbSBlZGl0aW9uCi0gKiAyMDAxLTA2LTA1IGZsICBiYWNrcG9ydGVkIHRvIHVuaXg7IGZpeGVkIGJvZ3VzIGZyZWUgaW4gY2xlYXIKLSAqIDIwMDEtMDctMTAgZmwgIGFkZGVkIGZpbmRhbGwgaGVscGVyCiAgKiAyMDAzLTAyLTI3IGZsICBlbGVtZW50dHJlZSBlZGl0aW9uIChhbHBoYSkKICAqIDIwMDQtMDYtMDMgZmwgIHVwZGF0ZXMgZm9yIGVsZW1lbnR0cmVlIDEuMgotICogMjAwNS0wMS0wNSBmbCAgYWRkZWQgdW5pdmVyc2FsIG5hbWUgY2FjaGUsIEVsZW1lbnQvU3ViRWxlbWVudCBmYWN0b3JpZXMKLSAqIDIwMDUtMDEtMDYgZmwgIG1vdmVkIHB5dGhvbiBoZWxwZXJzIGludG8gQyBtb2R1bGU7IHJlbW92ZWQgMS41LjIgc3VwcG9ydAotICogMjAwNS0wMS0wNyBmbCAgYWRkZWQgMi4xIHN1cHBvcnQ7IHdvcmsgYXJvdW5kIGJyb2tlbiBfX2NvcHlfXyBpbiAyLjMKLSAqIDIwMDUtMDEtMDggZmwgIGFkZGVkIG1ha2VlbGVtZW50IG1ldGhvZDsgZml4ZWQgcGF0aCBzdXBwb3J0Ci0gKiAyMDA1LTAxLTEwIGZsICBvcHRpbWl6ZWQgbWVtb3J5IHVzYWdlCisgKiAyMDA1LTAxLTA1IGZsICBtYWpvciBvcHRpbWl6YXRpb24gZWZmb3J0CiAgKiAyMDA1LTAxLTExIGZsICBmaXJzdCBwdWJsaWMgcmVsZWFzZSAoY0VsZW1lbnRUcmVlIDAuOCkKICAqIDIwMDUtMDEtMTIgZmwgIHNwbGl0IGVsZW1lbnQgb2JqZWN0IGludG8gYmFzZSBhbmQgZXh0cmFzCiAgKiAyMDA1LTAxLTEzIGZsICB1c2UgdGFnZ2VkIHBvaW50ZXJzIGZvciB0YWlsL3RleHQgKGNFbGVtZW50VHJlZSAwLjkpCkBAIC0zNSwxNiArMjksMjMgQEAKICAqIDIwMDUtMTItMTYgZmwgIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1zdGFuZGFyZCBlbmNvZGluZ3MKICAqIDIwMDYtMDMtMDggZmwgIGZpeGVkIGEgY291cGxlIG9mIHBvdGVudGlhbCBudWxsLXJlZnMgYW5kIGxlYWtzCiAgKiAyMDA2LTAzLTEyIGZsICBtZXJnZSBpbiAyLjUgc3NpemVfdCBjaGFuZ2VzCisgKiAyMDA3LTA4LTI1IGZsICBjYWxsIGN1c3RvbSBidWlsZGVyJ3MgY2xvc2UgbWV0aG9kIGZyb20gWE1MUGFyc2VyCisgKiAyMDA3LTA4LTMxIGZsICBhZGRlZCBpdGVyLCBleHRlbmQgZnJvbSBFVCAxLjMKKyAqIDIwMDctMDktMDEgZmwgIGZpeGVkIFBhcnNlRXJyb3IgZXhjZXB0aW9uLCBzZXRzbGljZSBzb3VyY2UgdHlwZSwgZXRjCisgKiAyMDA3LTA5LTAzIGZsICBmaXhlZCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBpbnNlcnQgaW5kZXhlcworICogMjAwNy0wOS0wNCBmbCAgYWRkZWQgaXRlcnRleHQgZnJvbSBFVCAxLjMKKyAqIDIwMDctMDktMDYgZmwgIGFkZGVkIHBvc2l0aW9uIGF0dHJpYnV0ZSB0byBQYXJzZUVycm9yIGV4Y2VwdGlvbgorICogMjAwOC0wNi0wNiBmbCAgZGVsYXkgZXJyb3IgcmVwb3J0aW5nIGluIGl0ZXJwYXJzZSAoZnJvbSBIcnZvamUgTmlrc2ljKQogICoKLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IGJ5IEZyZWRyaWsgTHVuZGguCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBGcmVkcmlrIEx1bmRoLgogICoKICAqIGluZm9AcHl0aG9ud2FyZS5jb20KICAqIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20KICAqLwogCiAvKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuICovCi0vKiBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4gKi8KKy8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKQEAgLTU2LDcgKzU3LDcgQEAKIC8qIExlYXZlIGRlZmluZWQgdG8gaW5jbHVkZSB0aGUgZXhwYXQtYmFzZWQgWE1MUGFyc2VyIHR5cGUgKi8KICNkZWZpbmUgVVNFX0VYUEFUCiAKLS8qIERlZmluZSB0byB0byBhbGwgZXhwYXQgY2FsbHMgdmlhIHB5ZXhwYXQncyBlbWJlZGRlZCBleHBhdCBsaWJyYXJ5ICovCisvKiBEZWZpbmUgdG8gZG8gYWxsIGV4cGF0IGNhbGxzIHZpYSBweWV4cGF0J3MgZW1iZWRkZWQgZXhwYXQgbGlicmFyeSAqLwogLyogI2RlZmluZSBVU0VfUFlFWFBBVF9DQVBJICovCiAKIC8qIEFuIGVsZW1lbnQgY2FuIGhvbGQgdGhpcyBtYW55IGNoaWxkcmVuIHdpdGhvdXQgZXh0cmEgbWVtb3J5CkBAIC05NCw2ICs5NSwxMSBAQAogI2VuZGlmCiAKIC8qIGNvbXBhdGliaWxpdHkgbWFjcm9zICovCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCkKKyNkZWZpbmUgUHlfUkVGQ05UKG9iKSAoKChQeU9iamVjdCopKG9iKSktPm9iX3JlZmNudCkKKyNkZWZpbmUgUHlfVFlQRShvYikgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQorI2VuZGlmCisKICNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQogdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKICNkZWZpbmUgbGVuZnVuYyBpbnF1aXJ5CkBAIC0xMDEsMTggKzEwNywxMSBAQAogCiAjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA0MDAwMCkKICNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgUHlEaWN0X0NoZWNrCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjAyMDAwMCkKLSNkZWZpbmUgUHlMaXN0X0NoZWNrRXhhY3QgUHlMaXN0X0NoZWNrCi0jZGVmaW5lIFB5U3RyaW5nX0NoZWNrRXhhY3QgUHlTdHJpbmdfQ2hlY2sKLSNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMTA2MDAwMCkKLSNkZWZpbmUgUHlfVVNJTkdfVU5JQ09ERSAvKiBhbHdheXMgZW5hYmxlZCBmb3IgMi4wIGFuZCAyLjEgKi8KLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKIAogI2lmICFkZWZpbmVkKFB5X1JFVFVSTl9OT05FKQogI2RlZmluZSBQeV9SRVRVUk5fTk9ORSByZXR1cm4gUHlfSU5DUkVGKFB5X05vbmUpLCBQeV9Ob25lCiAjZW5kaWYKKyNlbmRpZgogCiAvKiBtYWNyb3MgdXNlZCB0byBzdG9yZSAnam9pbicgZmxhZ3MgaW4gc3RyaW5nIG9iamVjdCBwb2ludGVycy4gIG5vdGUKICAgIHRoYXQgYWxsIHVzZSBvZiB0ZXh0IGFuZCB0YWlsIGFzIG9iamVjdCBwb2ludGVycyBtdXN0IGJlIHdyYXBwZWQgaW4KQEAgLTEyMyw5ICsxMjIsMTEgQEAKICNkZWZpbmUgSk9JTl9PQkoocCkgKChQeU9iamVjdCopICgoUHlfdWludHB0cl90KSAocCkgJiB+MSkpCiAKIC8qIGdsdWUgZnVuY3Rpb25zIChzZWUgdGhlIGluaXQgZnVuY3Rpb24gZm9yIGRldGFpbHMpICovCitzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqOwogc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9jb3B5ZWxlbWVudF9vYmo7CiBzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfZ2V0aXRlcmF0b3Jfb2JqOworc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9pdGVyX29iajsKK3N0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfaXRlcnRleHRfb2JqOwogc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50cGF0aF9vYmo7CiAKIC8qIGhlbHBlcnMgKi8KQEAgLTIwOSwyMyArMjEwLDYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjAyMDAwMCkKLUxPQ0FMKGludCkKLVB5RGljdF9VcGRhdGUoUHlPYmplY3QqIGRpY3QsIFB5T2JqZWN0KiBvdGhlcikKLXsKLSAgICAvKiBQeURpY3RfVXBkYXRlIGVtdWxhdGlvbiBmb3IgMi4xIGFuZCBlYXJsaWVyICovCi0KLSAgICBQeU9iamVjdCogcmVzOwotICAgIAotICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZGljdCwgInVwZGF0ZSIsICJPIiwgb3RoZXIpOwotICAgIGlmICghcmVzKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9ERUNSRUYocmVzKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdGhlIGVsZW1lbnQgdHlwZSAqLwogCkBAIC0zMzAsNyArMzE0LDcgQEAKICAgICAgICAgaWYgKGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQl9CisgICAgICAgIH0KIAogICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoID0gMDsKICAgICAgICAgc2VsZi0+ZXh0cmEtPmFsbG9jYXRlZCA9IFNUQVRJQ19DSElMRFJFTjsKQEAgLTQyOCw2ICs0MTIsNyBAQAogICAgIFB5T2JqZWN0KiByZXMgPSBzZWxmLT5leHRyYS0+YXR0cmliOwogCiAgICAgaWYgKHJlcyA9PSBQeV9Ob25lKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICAvKiBjcmVhdGUgbWlzc2luZyBkaWN0aW9uYXJ5ICovCiAgICAgICAgIHJlcyA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgaWYgKCFyZXMpCkBAIC03MDksNiArNjk0LDggQEAKIAogICAgIC8qIGFkZCBvYmplY3QgdG8gbWVtbyBkaWN0aW9uYXJ5IChzbyBkZWVwY29weSB3b24ndCB2aXNpdCBpdCBhZ2FpbikgKi8KICAgICBpZCA9IFB5SW50X0Zyb21Mb25nKChQeV91aW50cHRyX3QpIHNlbGYpOworICAgIGlmICghaWQpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpID0gUHlEaWN0X1NldEl0ZW0obWVtbywgaWQsIChQeU9iamVjdCopIGVsZW1lbnQpOwogCkBAIC03MzIsNyArNzE5LDggQEAKIAogICAgIC8qIGNoZWNrIGlmIGEgdGFnIGNvbnRhaW5zIGFuIHhwYXRoIGNoYXJhY3RlciAqLwogCi0jZGVmaW5lIFBBVEhDSEFSKGNoKSAoY2ggPT0gJy8nIHx8IGNoID09ICcqJyB8fCBjaCA9PSAnWycgfHwgY2ggPT0gJ0AnKQorI2RlZmluZSBQQVRIQ0hBUihjaCkgXAorICAgIChjaCA9PSAnLycgfHwgY2ggPT0gJyonIHx8IGNoID09ICdbJyB8fCBjaCA9PSAnQCcgfHwgY2ggPT0gJy4nKQogCiAjaWYgZGVmaW5lZChQeV9VU0lOR19VTklDT0RFKQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodGFnKSkgewpAQCAtNzY1LDE3ICs3NTMsNTEgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgorZWxlbWVudF9leHRlbmQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgUHlPYmplY3QqIHNlcTsKKyAgICBQeV9zc2l6ZV90IGksIHNlcWxlbiA9IDA7CisKKyAgICBQeU9iamVjdCogc2VxX2luOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpleHRlbmQiLCAmc2VxX2luKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3Qoc2VxX2luLCAiIik7CisgICAgaWYgKCFzZXEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImV4cGVjdGVkIHNlcXVlbmNlLCBub3QgXCIlLjIwMHNcIiIsIFB5X1RZUEUoc2VxX2luKS0+dHBfbmFtZQorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0KiBlbGVtZW50ID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7CisgICAgICAgIGlmIChlbGVtZW50X2FkZF9zdWJlbGVtZW50KHNlbGYsIGVsZW1lbnQpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFB5X0RFQ1JFRihzZXEpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfZmluZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBpbnQgaTsKIAogICAgIFB5T2JqZWN0KiB0YWc7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmZpbmQiLCAmdGFnKSkKKyAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE86ZmluZCIsICZ0YWcsICZuYW1lc3BhY2VzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoY2hlY2twYXRoKHRhZykpCisgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICJmaW5kIiwgIk9PIiwgc2VsZiwgdGFnCisgICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICJmaW5kIiwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKIAogICAgIGlmICghc2VsZi0+ZXh0cmEpCkBAIC04MDAsMTIgKzgyMiwxMyBAQAogCiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE86ZmluZHRleHQiLCAmdGFnLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPTzpmaW5kdGV4dCIsICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGNoZWNrcGF0aCh0YWcpKQorICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiZmluZHRleHQiLCAiT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlCisgICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICJmaW5kdGV4dCIsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewpAQCAtODM1LDEyICs4NTgsMTMgQEAKICAgICBQeU9iamVjdCogb3V0OwogCiAgICAgUHlPYmplY3QqIHRhZzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZmluZGFsbCIsICZ0YWcpKQorICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpmaW5kYWxsIiwgJnRhZywgJm5hbWVzcGFjZXMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChjaGVja3BhdGgodGFnKSkKKyAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmRhbGwiLCAiT08iLCBzZWxmLCB0YWcKKyAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmRhbGwiLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgb3V0ID0gUHlMaXN0X05ldygwKTsKQEAgLTg2NSw2ICs4ODksMTkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgorZWxlbWVudF9pdGVyZmluZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCogdGFnOworICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzppdGVyZmluZCIsICZ0YWcsICZuYW1lc3BhY2VzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZCgKKyAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiaXRlcmZpbmQiLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfZ2V0KEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIFB5T2JqZWN0KiB2YWx1ZTsKQEAgLTg5Miw2ICs5MjksOCBAQAogICAgIGludCBpOwogICAgIFB5T2JqZWN0KiBsaXN0OwogCisgICAgLyogRklYTUU6IHJlcG9ydCBhcyBkZXByZWNhdGVkPyAqLworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Z2V0Y2hpbGRyZW4iKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTkxMiwxOCArOTUxLDE4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfZ2V0aXRlcmF0b3IoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCitlbGVtZW50X2l0ZXIoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKICAgICAKICAgICBQeU9iamVjdCogdGFnID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOmdldGl0ZXJhdG9yIiwgJnRhZykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzppdGVyIiwgJnRhZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFlbGVtZW50dHJlZV9nZXRpdGVyYXRvcl9vYmopIHsKKyAgICBpZiAoIWVsZW1lbnR0cmVlX2l0ZXJfb2JqKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICJnZXRpdGVyYXRvciBoZWxwZXIgbm90IGZvdW5kIgorICAgICAgICAgICAgIml0ZXIgaGVscGVyIG5vdCBmb3VuZCIKICAgICAgICAgICAgICk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTkzNSw3ICs5NzQsMzcgQEAKICAgICBQeV9JTkNSRUYoc2VsZik7IFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgKFB5T2JqZWN0Kikgc2VsZik7CiAgICAgUHlfSU5DUkVGKHRhZyk7ICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDEsIChQeU9iamVjdCopIHRhZyk7CiAKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2dldGl0ZXJhdG9yX29iaiwgYXJncyk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChlbGVtZW50dHJlZV9pdGVyX29iaiwgYXJncyk7CisKKyAgICBQeV9ERUNSRUYoYXJncyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU9iamVjdCoKK2VsZW1lbnRfaXRlcnRleHQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgUHlPYmplY3QqIHJlc3VsdDsKKyAgICAKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjppdGVydGV4dCIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghZWxlbWVudHRyZWVfaXRlcnRleHRfb2JqKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICJpdGVydGV4dCBoZWxwZXIgbm90IGZvdW5kIgorICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYXJncyA9IFB5VHVwbGVfTmV3KDEpOworICAgIGlmICghYXJncykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoc2VsZik7IFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgKFB5T2JqZWN0Kikgc2VsZik7CisKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2l0ZXJ0ZXh0X29iaiwgYXJncyk7CiAKICAgICBQeV9ERUNSRUYoYXJncyk7CiAKQEAgLTk2MCwzOSArMTAyOSw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfZ2V0c2xpY2UoUHlPYmplY3QqIHNlbGZfLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKLXsKLSAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QqIGxpc3Q7Ci0KLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKLQotICAgIC8qIHN0YW5kYXJkIGNsYW1waW5nICovCi0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgPSAwOwotICAgIGlmIChlbmQgPiBzZWxmLT5leHRyYS0+bGVuZ3RoKQotICAgICAgICBlbmQgPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotICAgIGlmIChzdGFydCA+IGVuZCkKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0KLSAgICBsaXN0ID0gUHlMaXN0X05ldyhlbmQgLSBzdGFydCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QqIGl0ZW0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07Ci0gICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGkgLSBzdGFydCwgaXRlbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfaW5zZXJ0KEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBpOwpAQCAtMTAwNiw4ICsxMDQyLDExIEBACiAgICAgaWYgKCFzZWxmLT5leHRyYSkKICAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7CiAKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRleCA9IDA7CisgICAgaWYgKGluZGV4IDwgMCkgeworICAgICAgICBpbmRleCArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOworICAgICAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICAgICAgaW5kZXggPSAwOworICAgIH0KICAgICBpZiAoaW5kZXggPiBzZWxmLT5leHRyYS0+bGVuZ3RoKQogICAgICAgICBpbmRleCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CiAKQEAgLTExNTEsMTUgKzExOTAsMTYgQEAKIHN0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfcmVwcihFbGVtZW50T2JqZWN0KiBzZWxmKQogewotICAgIFB5T2JqZWN0KiByZXByOwotICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgCi0gICAgcmVwciA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIjxFbGVtZW50ICIpOworICAgIFB5T2JqZWN0ICpyZXByLCAqdGFnOwogCi0gICAgUHlTdHJpbmdfQ29uY2F0QW5kRGVsKCZyZXByLCBQeU9iamVjdF9SZXByKHNlbGYtPnRhZykpOworICAgIHRhZyA9IFB5T2JqZWN0X1JlcHIoc2VsZi0+dGFnKTsKKyAgICBpZiAoIXRhZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzcHJpbnRmKGJ1ZmZlciwgIiBhdCAlcD4iLCBzZWxmKTsKLSAgICBQeVN0cmluZ19Db25jYXRBbmREZWwoJnJlcHIsIFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmZmVyKSk7CisgICAgcmVwciA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxFbGVtZW50ICVzIGF0ICVwPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKHRhZyksIHNlbGYpOworCisgICAgUHlfREVDUkVGKHRhZyk7CiAKICAgICByZXR1cm4gcmVwcjsKIH0KQEAgLTExODgsNzcgKzEyMjgsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1lbGVtZW50X3NldHNsaWNlKFB5T2JqZWN0KiBzZWxmXywgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIFB5T2JqZWN0KiBpdGVtKQotewotICAgIEVsZW1lbnRPYmplY3QqIHNlbGYgPSAoRWxlbWVudE9iamVjdCopIHNlbGZfOwotICAgIFB5X3NzaXplX3QgaSwgbmV3LCBvbGQ7Ci0gICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOwotCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7Ci0KLSAgICAvKiBzdGFuZGFyZCBjbGFtcGluZyAqLwotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLSAgICBpZiAoZW5kID4gc2VsZi0+ZXh0cmEtPmxlbmd0aCkKLSAgICAgICAgZW5kID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKLSAgICBpZiAoc3RhcnQgPiBlbmQpCi0gICAgICAgIHN0YXJ0ID0gZW5kOwotCi0gICAgb2xkID0gZW5kIC0gc3RhcnQ7Ci0KLSAgICBpZiAoaXRlbSA9PSBOVUxMKQotICAgICAgICBuZXcgPSAwOwotICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KGl0ZW0pKSB7Ci0gICAgICAgIG5ldyA9IFB5TGlzdF9HRVRfU0laRShpdGVtKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBGSVhNRTogc3VwcG9ydCBhcmJpdHJhcnkgc2VxdWVuY2VzPyAqLwotICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZXhwZWN0ZWQgbGlzdCwgbm90IFwiJS4yMDBzXCIiLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lCi0gICAgICAgICAgICApOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKG9sZCA+IDApIHsKLSAgICAgICAgLyogdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIHRoaXMgbWV0aG9kICh2aWEgZGVjcmVmKSwgbW92ZQotICAgICAgICAgICBvbGQgaXRlbXMgdG8gdGhlIHJlY3ljbGUgYmluIGhlcmUsIGFuZCBnZXQgcmlkIG9mIHRoZW0gd2hlbgotICAgICAgICAgICB3ZSdyZSBkb25lIG1vZGlmeWluZyB0aGUgZWxlbWVudCAqLwotICAgICAgICByZWN5Y2xlID0gUHlMaXN0X05ldyhvbGQpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkOyBpKyspCi0gICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocmVjeWNsZSwgaSwgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBzdGFydF0pOwotICAgIH0KLQotICAgIGlmIChuZXcgPCBvbGQpIHsKLSAgICAgICAgLyogZGVsZXRlIHNsaWNlICovCi0gICAgICAgIGZvciAoaSA9IGVuZDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpICsgbmV3IC0gb2xkXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICB9IGVsc2UgaWYgKG5ldyA+IG9sZCkgewotICAgICAgICAvKiBpbnNlcnQgc2xpY2UgKi8KLSAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKHNlbGYsIG5ldyAtIG9sZCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBmb3IgKGkgPSBzZWxmLT5leHRyYS0+bGVuZ3RoLTE7IGkgPj0gZW5kOyBpLS0pCi0gICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIG5ldyAtIG9sZF0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07Ci0gICAgfQotCi0gICAgLyogcmVwbGFjZSB0aGUgc2xpY2UgKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbmV3OyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QqIGVsZW1lbnQgPSBQeUxpc3RfR0VUX0lURU0oaXRlbSwgaSk7Ci0gICAgICAgIFB5X0lOQ1JFRihlbGVtZW50KTsKLSAgICAgICAgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBzdGFydF0gPSBlbGVtZW50OwotICAgIH0KLQotICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggKz0gbmV3IC0gb2xkOwotCi0gICAgLyogZGlzY2FyZCB0aGUgcmVjeWNsZSBiaW4sIGFuZCBldmVyeXRoaW5nIGluIGl0ICovCi0gICAgUHlfWERFQ1JFRihyZWN5Y2xlKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBlbGVtZW50X3NldGl0ZW0oUHlPYmplY3QqIHNlbGZfLCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCogaXRlbSkKIHsKICAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKQEAgLTEyODgsNiArMTI1NywxOTAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFB5T2JqZWN0KgorZWxlbWVudF9zdWJzY3IoUHlPYmplY3QqIHNlbGZfLCBQeU9iamVjdCogaXRlbSkKK3sKKyAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKKworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCisgICAgaWYgKFB5SW50X0NoZWNrKGl0ZW0pIHx8IFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICBsb25nIGkgPSBQeUludF9Bc0xvbmcoaXRlbSk7CisjZWxzZQorICAgIGlmIChQeUluZGV4X0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpdGVtLCBQeUV4Y19JbmRleEVycm9yKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChpID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChpIDwgMCAmJiBzZWxmLT5leHRyYSkKKyAgICAgICAgICAgIGkgKz0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnRfZ2V0aXRlbShzZWxmXywgaSk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIGN1ciwgaTsKKyAgICAgICAgUHlPYmplY3QqIGxpc3Q7CisKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICAgICAgICAgIHJldHVybiBQeUxpc3RfTmV3KDApOworCisgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCAqKWl0ZW0sCisgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNsaWNlbGVuIDw9IDApCisgICAgICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBsaXN0ID0gUHlMaXN0X05ldyhzbGljZWxlbik7CisgICAgICAgICAgICBpZiAoIWxpc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47CisgICAgICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCogaXRlbSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltjdXJdOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSwgaXRlbSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJlbGVtZW50IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK2VsZW1lbnRfYXNzX3N1YnNjcihQeU9iamVjdCogc2VsZl8sIFB5T2JqZWN0KiBpdGVtLCBQeU9iamVjdCogdmFsdWUpCit7CisgICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87CisKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQorICAgIGlmIChQeUludF9DaGVjayhpdGVtKSB8fCBQeUxvbmdfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgbG9uZyBpID0gUHlJbnRfQXNMb25nKGl0ZW0pOworI2Vsc2UKKyAgICBpZiAoUHlJbmRleF9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaXRlbSwgUHlFeGNfSW5kZXhFcnJvcik7CisjZW5kaWYKKworICAgICAgICBpZiAoaSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPCAwICYmIHNlbGYtPmV4dHJhKQorICAgICAgICAgICAgaSArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOworICAgICAgICByZXR1cm4gZWxlbWVudF9zZXRpdGVtKHNlbGZfLCBpLCB2YWx1ZSk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIG5ld2xlbiwgY3VyLCBpOworCisgICAgICAgIFB5T2JqZWN0KiByZWN5Y2xlID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QqIHNlcSA9IE5VTEw7CisKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICAgICAgICAgIGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIE5VTEwpOworCisgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCAqKWl0ZW0sCisgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgbmV3bGVuID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QodmFsdWUsICIiKTsKKyAgICAgICAgICAgIGlmICghc2VxKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzZXF1ZW5jZSwgbm90IFwiJS4yMDBzXCIiLCBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld2xlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZXAgIT0gIDEgJiYgbmV3bGVuICE9IHNsaWNlbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQorICAgICAgICAgICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiBzZXF1ZW5jZSBvZiBzaXplICVkICIKKyAgICAgICAgICAgICAgICAidG8gZXh0ZW5kZWQgc2xpY2Ugb2Ygc2l6ZSAlZCIsCisjZWxzZQorICAgICAgICAgICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiBzZXF1ZW5jZSBvZiBzaXplICV6ZCAiCisgICAgICAgICAgICAgICAgInRvIGV4dGVuZGVkIHNsaWNlIG9mIHNpemUgJXpkIiwKKyNlbmRpZgorICAgICAgICAgICAgICAgIG5ld2xlbiwgc2xpY2VsZW4KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKworICAgICAgICAvKiBSZXNpemUgYmVmb3JlIGNyZWF0aW5nIHRoZSByZWN5Y2xlIGJpbiwgdG8gcHJldmVudCByZWZsZWFrcy4gKi8KKyAgICAgICAgaWYgKG5ld2xlbiA+IHNsaWNlbGVuKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoc2VsZiwgbmV3bGVuIC0gc2xpY2VsZW4pIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChzZXEpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbGljZWxlbiA+IDApIHsKKyAgICAgICAgICAgIC8qIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGlzIG1ldGhvZCAodmlhIGRlY3JlZiksIG1vdmUKKyAgICAgICAgICAgICAgIG9sZCBpdGVtcyB0byB0aGUgcmVjeWNsZSBiaW4gaGVyZSwgYW5kIGdldCByaWQgb2YgdGhlbSB3aGVuCisgICAgICAgICAgICAgICB3ZSdyZSBkb25lIG1vZGlmeWluZyB0aGUgZWxlbWVudCAqLworICAgICAgICAgICAgcmVjeWNsZSA9IFB5TGlzdF9OZXcoc2xpY2VsZW4pOworICAgICAgICAgICAgaWYgKCFyZWN5Y2xlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKKyAgICAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocmVjeWNsZSwgaSwgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2N1cl0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ld2xlbiA8IHNsaWNlbGVuKSB7CisgICAgICAgICAgICAvKiBkZWxldGUgc2xpY2UgKi8KKyAgICAgICAgICAgIGZvciAoaSA9IHN0b3A7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBuZXdsZW4gLSBzbGljZWxlbl0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07CisgICAgICAgIH0gZWxzZSBpZiAobmV3bGVuID4gc2xpY2VsZW4pIHsKKyAgICAgICAgICAgIC8qIGluc2VydCBzbGljZSAqLworICAgICAgICAgICAgZm9yIChpID0gc2VsZi0+ZXh0cmEtPmxlbmd0aC0xOyBpID49IHN0b3A7IGktLSkKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIG5ld2xlbiAtIHNsaWNlbGVuXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlcGxhY2UgdGhlIHNsaWNlICovCisgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgbmV3bGVuOworICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0KiBlbGVtZW50ID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7CisgICAgICAgICAgICBQeV9JTkNSRUYoZWxlbWVudCk7CisgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5bY3VyXSA9IGVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IG5ld2xlbiAtIHNsaWNlbGVuOworCisgICAgICAgIGlmIChzZXEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICB9CisKKyAgICAgICAgLyogZGlzY2FyZCB0aGUgcmVjeWNsZSBiaW4sIGFuZCBldmVyeXRoaW5nIGluIGl0ICovCisgICAgICAgIFB5X1hERUNSRUYocmVjeWNsZSk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJlbGVtZW50IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZWxlbWVudF9tZXRob2RzW10gPSB7CiAKICAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2NsZWFyLCBNRVRIX1ZBUkFSR1N9LApAQCAtMTMwMCwxMCArMTQ1MywxNSBAQAogICAgIHsiZmluZGFsbCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9maW5kYWxsLCBNRVRIX1ZBUkFSR1N9LAogCiAgICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfYXBwZW5kLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2V4dGVuZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pbnNlcnQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfcmVtb3ZlLCBNRVRIX1ZBUkFSR1N9LAogCi0gICAgeyJnZXRpdGVyYXRvciIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9nZXRpdGVyYXRvciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Iml0ZXIiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Iml0ZXJ0ZXh0IiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXJ0ZXh0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXRlcmZpbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlcmZpbmQsIE1FVEhfVkFSQVJHU30sCisKKyAgICB7ImdldGl0ZXJhdG9yIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRjaGlsZHJlbiIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9nZXRjaGlsZHJlbiwgTUVUSF9WQVJBUkdTfSwKIAogICAgIHsiaXRlbXMiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlbXMsIE1FVEhfVkFSQVJHU30sCkBAIC0xMzM0LDIyICsxNDkyLDMxIEBACiB7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIC8qIGhhbmRsZSBjb21tb24gYXR0cmlidXRlcyBmaXJzdCAqLworICAgIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKKyAgICAgICAgcmVzID0gc2VsZi0+dGFnOworICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGV4dCIpID09IDApIHsKKyAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGV4dChzZWxmKTsKKyAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLyogbWV0aG9kcyAqLwogICAgIHJlcyA9IFB5X0ZpbmRNZXRob2QoZWxlbWVudF9tZXRob2RzLCAoUHlPYmplY3QqKSBzZWxmLCBuYW1lKTsKICAgICBpZiAocmVzKQotCXJldHVybiByZXM7CisgICAgICAgIHJldHVybiByZXM7CiAKICAgICBQeUVycl9DbGVhcigpOwogCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkKLQlyZXMgPSBzZWxmLT50YWc7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZXh0IikgPT0gMCkKLSAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGV4dChzZWxmKTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhaWwiKSA9PSAwKSB7CisgICAgLyogbGVzcyBjb21tb24gYXR0cmlidXRlcyAqLworICAgIGlmIChzdHJjbXAobmFtZSwgInRhaWwiKSA9PSAwKSB7CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RhaWwoc2VsZik7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKICAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKICAgICAgICAgICAgIGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIE5VTEwpOwotCXJlcyA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKKyAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQwNCw5ICsxNTcxLDE1IEBACiAgICAgMCwgLyogc3FfY29uY2F0ICovCiAgICAgMCwgLyogc3FfcmVwZWF0ICovCiAgICAgZWxlbWVudF9nZXRpdGVtLAotICAgIGVsZW1lbnRfZ2V0c2xpY2UsCisgICAgMCwKICAgICBlbGVtZW50X3NldGl0ZW0sCi0gICAgZWxlbWVudF9zZXRzbGljZSwKKyAgICAwLAorfTsKKworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgZWxlbWVudF9hc19tYXBwaW5nID0geworICAgIChsZW5mdW5jKSBlbGVtZW50X2xlbmd0aCwKKyAgICAoYmluYXJ5ZnVuYykgZWxlbWVudF9zdWJzY3IsCisgICAgKG9iam9iamFyZ3Byb2MpIGVsZW1lbnRfYXNzX3N1YnNjciwKIH07CiAKIHN0YXRpY2hlcmUgUHlUeXBlT2JqZWN0IEVsZW1lbnRfVHlwZSA9IHsKQEAgLTE0MjEsNiArMTU5NCw3IEBACiAgICAgKHJlcHJmdW5jKWVsZW1lbnRfcmVwciwgLyogdHBfcmVwciAqLwogICAgIDAsIC8qIHRwX2FzX251bWJlciAqLwogICAgICZlbGVtZW50X2FzX3NlcXVlbmNlLCAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgICZlbGVtZW50X2FzX21hcHBpbmcsIC8qIHRwX2FzX21hcHBpbmcgKi8KIH07CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0xNTU4LDcgKzE3MzIsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZWxmLT5yb290KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IsCisgICAgICAgICAgICAgICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosCiAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGVsZW1lbnRzIG9uIHRvcCBsZXZlbCIKICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTE2OTksNyArMTg3Myw3IEBACiAKIExPQ0FMKHZvaWQpCiB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKFRyZWVCdWlsZGVyT2JqZWN0KiBzZWxmLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgY2hhciAqdXJpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHJlZml4LCBQeU9iamVjdCAqdXJpKQogewogICAgIFB5T2JqZWN0KiByZXM7CiAgICAgUHlPYmplY3QqIGFjdGlvbjsKQEAgLTE3MTIsOCArMTg4Niw3IEBACiAgICAgICAgIGlmICghc2VsZi0+c3RhcnRfbnNfZXZlbnRfb2JqKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBhY3Rpb24gPSBzZWxmLT5zdGFydF9uc19ldmVudF9vYmo7Ci0gICAgICAgIC8qIEZJWE1FOiBwcmVmaXggYW5kIHVyaSB1c2UgdXRmLTggZW5jb2RpbmchICovCi0gICAgICAgIHBhcmNlbCA9IFB5X0J1aWxkVmFsdWUoInNzIiwgKHByZWZpeCkgPyBwcmVmaXggOiAiIiwgdXJpKTsKKyAgICAgICAgcGFyY2VsID0gUHlfQnVpbGRWYWx1ZSgiT08iLCBwcmVmaXgsIHVyaSk7CiAgICAgICAgIGlmICghcGFyY2VsKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBQeV9JTkNSRUYoYWN0aW9uKTsKQEAgLTE4NTcsNiArMjAzMCw3IEBACiAgICAgUHlPYmplY3QqIG5hbWVzOwogCiAgICAgUHlPYmplY3QqIGhhbmRsZV94bWw7CisKICAgICBQeU9iamVjdCogaGFuZGxlX3N0YXJ0OwogICAgIFB5T2JqZWN0KiBoYW5kbGVfZGF0YTsKICAgICBQeU9iamVjdCogaGFuZGxlX2VuZDsKQEAgLTE4NjQsNiArMjAzOCw4IEBACiAgICAgUHlPYmplY3QqIGhhbmRsZV9jb21tZW50OwogICAgIFB5T2JqZWN0KiBoYW5kbGVfcGk7CiAKKyAgICBQeU9iamVjdCogaGFuZGxlX2Nsb3NlOworCiB9IFhNTFBhcnNlck9iamVjdDsKIAogc3RhdGljZm9yd2FyZCBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGU7CkBAIC0xOTcxLDYgKzIxNDcsMzYgQEAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyB2b2lkCitleHBhdF9zZXRfZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCit7CisgICAgUHlPYmplY3QgKmVycm9yOworICAgIFB5T2JqZWN0ICpwb3NpdGlvbjsKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOworCisgICAgc3ByaW50ZihidWZmZXIsICIlczogbGluZSAlZCwgY29sdW1uICVkIiwgbWVzc2FnZSwgbGluZSwgY29sdW1uKTsKKworICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCAicyIsIGJ1ZmZlcik7CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogYWRkIHBvc2l0aW9uIGF0dHJpYnV0ZSAqLworICAgIHBvc2l0aW9uID0gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGxpbmUsIGNvbHVtbik7CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBQeV9ERUNSRUYoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKGVycm9yLCAicG9zaXRpb24iLCBwb3NpdGlvbikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGVycm9yKTsKKyAgICAgICAgUHlfREVDUkVGKHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQeV9ERUNSRUYocG9zaXRpb24pOworCisgICAgUHlFcnJfU2V0T2JqZWN0KGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CisgICAgUHlfREVDUkVGKGVycm9yKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGhhbmRsZXJzICovCiAKQEAgLTIwMDEsMTAgKzIyMDcsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzID0gTlVMTDsKICAgICAgICAgUHlfWERFQ1JFRihyZXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgIFB5RXhjX1N5bnRheEVycm9yLCAidW5kZWZpbmVkIGVudGl0eSAmJXM7OiBsaW5lICVsZCwgY29sdW1uICVsZCIsCi0gICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoa2V5KSwKKyAgICB9IGVsc2UgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIC8qIFJlcG9ydCB0aGUgZmlyc3QgZXJyb3IsIG5vdCB0aGUgbGFzdCAqLworICAgICAgICBjaGFyIG1lc3NhZ2VbMTI4XTsKKyAgICAgICAgc3ByaW50ZihtZXNzYWdlLCAidW5kZWZpbmVkIGVudGl0eSAmJS4xMDBzOyIsIFB5U3RyaW5nX0FTX1NUUklORyhrZXkpKTsKKyAgICAgICAgZXhwYXRfc2V0X2Vycm9yKAorICAgICAgICAgICAgbWVzc2FnZSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yTGluZU51bWJlcikoc2VsZi0+cGFyc2VyKSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yQ29sdW1uTnVtYmVyKShzZWxmLT5wYXJzZXIpCiAgICAgICAgICAgICApOwpAQCAtMjA1OSw5ICsyMjY3LDE1IEBACiAgICAgICAgIC8qIHNob3J0Y3V0ICovCiAgICAgICAgIHJlcyA9IHRyZWVidWlsZGVyX2hhbmRsZV9zdGFydCgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIGF0dHJpYik7Ci0gICAgZWxzZSBpZiAoc2VsZi0+aGFuZGxlX3N0YXJ0KQorICAgIGVsc2UgaWYgKHNlbGYtPmhhbmRsZV9zdGFydCkgeworICAgICAgICBpZiAoYXR0cmliID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyaWIpOworICAgICAgICAgICAgYXR0cmliID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKCFhdHRyaWIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5oYW5kbGVfc3RhcnQsICJPTyIsIHRhZywgYXR0cmliKTsKLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIHJlcyA9IE5VTEw7CiAKICAgICBQeV9ERUNSRUYodGFnKTsKQEAgLTIxMjEsOSArMjMzNSwyOCBAQAogZXhwYXRfc3RhcnRfbnNfaGFuZGxlcihYTUxQYXJzZXJPYmplY3QqIHNlbGYsIGNvbnN0IFhNTF9DaGFyKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmkpCiB7CisgICAgUHlPYmplY3QqIHNwcmVmaXggPSBOVUxMOworICAgIFB5T2JqZWN0KiBzdXJpID0gTlVMTDsKKworICAgIHN1cmkgPSBtYWtlc3RyaW5nKHVyaSwgc3RybGVuKHVyaSkpOworICAgIGlmICghc3VyaSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByZWZpeCkKKyAgICAgICAgc3ByZWZpeCA9IG1ha2VzdHJpbmcocHJlZml4LCBzdHJsZW4ocHJlZml4KSk7CisgICAgZWxzZQorICAgICAgICBzcHJlZml4ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOworICAgIGlmICghc3ByZWZpeCkgeworICAgICAgICBQeV9ERUNSRUYoc3VyaSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKAotICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDEsIHByZWZpeCwgdXJpCisgICAgICAgIChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwgMSwgc3ByZWZpeCwgc3VyaQogICAgICAgICApOworCisgICAgUHlfREVDUkVGKHNwcmVmaXgpOworICAgIFB5X0RFQ1JFRihzdXJpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIyMDAsMTAgKzI0MzMsMTAgQEAKICAgICBwID0gUHlVbmljb2RlX0FTX1VOSUNPREUodSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQlpZiAocFtpXSAhPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikKLQkgICAgaW5mby0+bWFwW2ldID0gcFtpXTsKKyAgICAgICAgaWYgKHBbaV0gIT0gUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVIpCisgICAgICAgICAgICBpbmZvLT5tYXBbaV0gPSBwW2ldOwogICAgICAgICBlbHNlCi0JICAgIGluZm8tPm1hcFtpXSA9IC0xOworICAgICAgICAgICAgaW5mby0+bWFwW2ldID0gLTE7CiAgICAgfQogCiAgICAgUHlfREVDUkVGKHUpOwpAQCAtMjI4OCw2ICsyNTIxLDcgQEAKICAgICBzZWxmLT5oYW5kbGVfZW5kID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJlbmQiKTsKICAgICBzZWxmLT5oYW5kbGVfY29tbWVudCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiY29tbWVudCIpOwogICAgIHNlbGYtPmhhbmRsZV9waSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAicGkiKTsKKyAgICBzZWxmLT5oYW5kbGVfY2xvc2UgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgImNsb3NlIik7CiAKICAgICBQeUVycl9DbGVhcigpOwogCkBAIC0yMzMzLDYgKzI1NjcsNyBAQAogewogICAgIEVYUEFUKFBhcnNlckZyZWUpKHNlbGYtPnBhcnNlcik7CiAKKyAgICBQeV9YREVDUkVGKHNlbGYtPmhhbmRsZV9jbG9zZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5oYW5kbGVfcGkpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aGFuZGxlX2NvbW1lbnQpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aGFuZGxlX2VuZCk7CkBAIC0yMzYzLDggKzI1OTgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghb2spIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IsICIlczogbGluZSAlbGQsIGNvbHVtbiAlbGQiLAorICAgICAgICBleHBhdF9zZXRfZXJyb3IoCiAgICAgICAgICAgICBFWFBBVChFcnJvclN0cmluZykoRVhQQVQoR2V0RXJyb3JDb2RlKShzZWxmLT5wYXJzZXIpKSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yTGluZU51bWJlcikoc2VsZi0+cGFyc2VyKSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yQ29sdW1uTnVtYmVyKShzZWxmLT5wYXJzZXIpCkBAIC0yMzg1LDEzICsyNjE5LDE3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmVzID0gZXhwYXRfcGFyc2Uoc2VsZiwgIiIsIDAsIDEpOworICAgIGlmICghcmVzKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChyZXMgJiYgVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CisgICAgaWYgKFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHRyZWVidWlsZGVyX2RvbmUoKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOworICAgIH0gaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5oYW5kbGVfY2xvc2UsICIiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMjU3NSwxNCArMjgxMywxNCBAQAogCiAgICAgcmVzID0gUHlfRmluZE1ldGhvZCh4bWxwYXJzZXJfbWV0aG9kcywgKFB5T2JqZWN0Kikgc2VsZiwgbmFtZSk7CiAgICAgaWYgKHJlcykKLQlyZXR1cm4gcmVzOworICAgICAgICByZXR1cm4gcmVzOwogCiAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgIGlmIChzdHJjbXAobmFtZSwgImVudGl0eSIpID09IDApCi0JcmVzID0gc2VsZi0+ZW50aXR5OworICAgICAgICByZXMgPSBzZWxmLT5lbnRpdHk7CiAgICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0YXJnZXQiKSA9PSAwKQotCXJlcyA9IHNlbGYtPnRhcmdldDsKKyAgICAgICAgcmVzID0gc2VsZi0+dGFyZ2V0OwogICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidmVyc2lvbiIpID09IDApIHsKICAgICAgICAgY2hhciBidWZmZXJbMTAwXTsKICAgICAgICAgc3ByaW50ZihidWZmZXIsICJFeHBhdCAlZC4lZC4lZCIsIFhNTF9NQUpPUl9WRVJTSU9OLApAQCAtMjYyOCw5ICsyODY2LDYgQEAKICAgICBQeU9iamVjdCogbTsKICAgICBQeU9iamVjdCogZzsKICAgICBjaGFyKiBib290c3RyYXA7Ci0jaWYgZGVmaW5lZChVU0VfUFlFWFBBVF9DQVBJKQotICAgIHN0cnVjdCBQeUV4cGF0X0NBUEkqIGNhcGk7Ci0jZW5kaWYKIAogICAgIC8qIFBhdGNoIG9iamVjdCB0eXBlICovCiAgICAgUHlfVFlQRSgmRWxlbWVudF9UeXBlKSA9IFB5X1RZUEUoJlRyZWVCdWlsZGVyX1R5cGUpID0gJlB5VHlwZV9UeXBlOwpAQCAtMjY1MiwxMCArMjg4Nyw2IEBACiAKICAgICBib290c3RyYXAgPSAoCiAKLSNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAyMDAwMCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMzAwMDApCi0gICAgICAgICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcnNcbiIgLyogZW5hYmxlIHlpZWxkIHVuZGVyIDIuMiAqLwotI2VuZGlmCi0KICAgICAgICAgImZyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHlcbiIKIAogICAgICAgICAidHJ5OlxuIgpAQCAtMjY3MywxMSArMjkwNCwxNCBAQAogICAgICAgICAiICBkZWYgY29weWVsZW1lbnQoZWxlbSk6XG4iCiAgICAgICAgICIgICAgcmV0dXJuIGVsZW1cbiIKIAotICAgICAgICAiZGVmIENvbW1lbnQodGV4dD1Ob25lKTpcbiIgLyogcHVibGljICovCisgICAgICAgICJjbGFzcyBDb21tZW50UHJveHk6XG4iCisgICAgICAgICIgZGVmIF9fY2FsbF9fKHNlbGYsIHRleHQ9Tm9uZSk6XG4iCiAgICAgICAgICIgIGVsZW1lbnQgPSBjRWxlbWVudFRyZWUuRWxlbWVudChFVC5Db21tZW50KVxuIgogICAgICAgICAiICBlbGVtZW50LnRleHQgPSB0ZXh0XG4iCiAgICAgICAgICIgIHJldHVybiBlbGVtZW50XG4iCi0gICAgICAgICJjRWxlbWVudFRyZWUuQ29tbWVudCA9IENvbW1lbnRcbiIKKyAgICAgICAgIiBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6XG4iCisgICAgICAgICIgIHJldHVybiBjbXAoRVQuQ29tbWVudCwgb3RoZXIpXG4iCisgICAgICAgICJjRWxlbWVudFRyZWUuQ29tbWVudCA9IENvbW1lbnRQcm94eSgpXG4iCiAKICAgICAgICAgImNsYXNzIEVsZW1lbnRUcmVlKEVULkVsZW1lbnRUcmVlKTpcbiIgLyogcHVibGljICovCiAgICAgICAgICIgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKTpcbiIKQEAgLTI2OTYsMjMgKzI5MzAsMjMgQEAKICAgICAgICAgIiAgICByZXR1cm4gc2VsZi5fcm9vdFxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLkVsZW1lbnRUcmVlID0gRWxlbWVudFRyZWVcbiIKIAotICAgICAgICAiZGVmIGdldGl0ZXJhdG9yKG5vZGUsIHRhZz1Ob25lKTpcbiIgLyogaGVscGVyICovCisgICAgICAgICJkZWYgaXRlcihub2RlLCB0YWc9Tm9uZSk6XG4iIC8qIGhlbHBlciAqLwogICAgICAgICAiICBpZiB0YWcgPT0gJyonOlxuIgogICAgICAgICAiICAgIHRhZyA9IE5vbmVcbiIKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDIwMDAwKQotICAgICAgICAiICBub2RlcyA9IFtdXG4iIC8qIDIuMSBkb2Vzbid0IGhhdmUgeWllbGQgKi8KLSAgICAgICAgIiAgaWYgdGFnIGlzIE5vbmUgb3Igbm9kZS50YWcgPT0gdGFnOlxuIgotICAgICAgICAiICAgIG5vZGVzLmFwcGVuZChub2RlKVxuIgotICAgICAgICAiICBmb3Igbm9kZSBpbiBub2RlOlxuIgotICAgICAgICAiICAgIG5vZGVzLmV4dGVuZChnZXRpdGVyYXRvcihub2RlLCB0YWcpKVxuIgotICAgICAgICAiICByZXR1cm4gbm9kZXNcbiIKLSNlbHNlCiAgICAgICAgICIgIGlmIHRhZyBpcyBOb25lIG9yIG5vZGUudGFnID09IHRhZzpcbiIKICAgICAgICAgIiAgICB5aWVsZCBub2RlXG4iCiAgICAgICAgICIgIGZvciBub2RlIGluIG5vZGU6XG4iCi0gICAgICAgICIgICAgZm9yIG5vZGUgaW4gZ2V0aXRlcmF0b3Iobm9kZSwgdGFnKTpcbiIKKyAgICAgICAgIiAgICBmb3Igbm9kZSBpbiBpdGVyKG5vZGUsIHRhZyk6XG4iCiAgICAgICAgICIgICAgICB5aWVsZCBub2RlXG4iCi0jZW5kaWYKKworICAgICAgICAiZGVmIGl0ZXJ0ZXh0KG5vZGUpOlxuIiAvKiBoZWxwZXIgKi8KKyAgICAgICAgIiAgaWYgbm9kZS50ZXh0OlxuIgorICAgICAgICAiICAgIHlpZWxkIG5vZGUudGV4dFxuIgorICAgICAgICAiICBmb3IgZSBpbiBub2RlOlxuIgorICAgICAgICAiICAgIGZvciBzIGluIGUuaXRlcnRleHQoKTpcbiIKKyAgICAgICAgIiAgICAgIHlpZWxkIHNcbiIKKyAgICAgICAgIiAgICBpZiBlLnRhaWw6XG4iCisgICAgICAgICIgICAgICB5aWVsZCBlLnRhaWxcbiIKIAogICAgICAgICAiZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOlxuIiAvKiBwdWJsaWMgKi8KICAgICAgICAgIiAgdHJlZSA9IEVsZW1lbnRUcmVlKClcbiIKQEAgLTI3MjAsNDggKzI5NTQsNTIgQEAKICAgICAgICAgIiAgcmV0dXJuIHRyZWVcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS5wYXJzZSA9IHBhcnNlXG4iCiAKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDIwMDAwKQotICAgICAgICAiaWYgaGFzYXR0cihFVCwgJ2l0ZXJwYXJzZScpOlxuIgotICAgICAgICAiICAgIGNFbGVtZW50VHJlZS5pdGVycGFyc2UgPSBFVC5pdGVycGFyc2VcbiIgLyogZGVsZWdhdGUgb24gMi4xICovCi0jZWxzZQogICAgICAgICAiY2xhc3MgaXRlcnBhcnNlKG9iamVjdCk6XG4iCiAgICAgICAgICIgcm9vdCA9IE5vbmVcbiIKICAgICAgICAgIiBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZXZlbnRzPU5vbmUpOlxuIgogICAgICAgICAiICBpZiBub3QgaGFzYXR0cihmaWxlLCAncmVhZCcpOlxuIgogICAgICAgICAiICAgIGZpbGUgPSBvcGVuKGZpbGUsICdyYicpXG4iCiAgICAgICAgICIgIHNlbGYuX2ZpbGUgPSBmaWxlXG4iCi0gICAgICAgICIgIHNlbGYuX2V2ZW50cyA9IGV2ZW50c1xuIgotICAgICAgICAiIGRlZiBfX2l0ZXJfXyhzZWxmKTpcbiIgCi0gICAgICAgICIgIGV2ZW50cyA9IFtdXG4iCisgICAgICAgICIgIHNlbGYuX2V2ZW50cyA9IFtdXG4iCisgICAgICAgICIgIHNlbGYuX2luZGV4ID0gMFxuIgorICAgICAgICAiICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZVxuIgogICAgICAgICAiICBiID0gY0VsZW1lbnRUcmVlLlRyZWVCdWlsZGVyKClcbiIKLSAgICAgICAgIiAgcCA9IGNFbGVtZW50VHJlZS5YTUxQYXJzZXIoYilcbiIKLSAgICAgICAgIiAgcC5fc2V0ZXZlbnRzKGV2ZW50cywgc2VsZi5fZXZlbnRzKVxuIgorICAgICAgICAiICBzZWxmLl9wYXJzZXIgPSBjRWxlbWVudFRyZWUuWE1MUGFyc2VyKGIpXG4iCisgICAgICAgICIgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50cywgZXZlbnRzKVxuIgorICAgICAgICAiIGRlZiBuZXh0KHNlbGYpOlxuIgogICAgICAgICAiICB3aGlsZSAxOlxuIgotICAgICAgICAiICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpXG4iCi0gICAgICAgICIgICAgaWYgbm90IGRhdGE6XG4iCi0gICAgICAgICIgICAgICBicmVha1xuIgotICAgICAgICAiICAgIHAuZmVlZChkYXRhKVxuIgotICAgICAgICAiICAgIGZvciBldmVudCBpbiBldmVudHM6XG4iCi0gICAgICAgICIgICAgICB5aWVsZCBldmVudFxuIgotICAgICAgICAiICAgIGRlbCBldmVudHNbOl1cbiIKLSAgICAgICAgIiAgcm9vdCA9IHAuY2xvc2UoKVxuIgotICAgICAgICAiICBmb3IgZXZlbnQgaW4gZXZlbnRzOlxuIgotICAgICAgICAiICAgIHlpZWxkIGV2ZW50XG4iCi0gICAgICAgICIgIHNlbGYucm9vdCA9IHJvb3RcbiIKKyAgICAgICAgIiAgICB0cnk6XG4iCisgICAgICAgICIgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XVxuIgorICAgICAgICAiICAgIGV4Y2VwdCBJbmRleEVycm9yOlxuIgorICAgICAgICAiICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6XG4iCisgICAgICAgICIgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3RcbiIKKyAgICAgICAgIiAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvblxuIgorICAgICAgICAiICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlclxuIgorICAgICAgICAiICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XVxuIgorICAgICAgICAiICAgICAgc2VsZi5faW5kZXggPSAwXG4iCisgICAgICAgICIgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KVxuIgorICAgICAgICAiICAgICAgaWYgZGF0YTpcbiIKKyAgICAgICAgIiAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSlcbiIKKyAgICAgICAgIiAgICAgIGVsc2U6XG4iCisgICAgICAgICIgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKVxuIgorICAgICAgICAiICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lXG4iCisgICAgICAgICIgICAgZWxzZTpcbiIKKyAgICAgICAgIiAgICAgIHNlbGYuX2luZGV4ID0gc2VsZi5faW5kZXggKyAxXG4iCisgICAgICAgICIgICAgICByZXR1cm4gaXRlbVxuIgorICAgICAgICAiIGRlZiBfX2l0ZXJfXyhzZWxmKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIHNlbGZcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS5pdGVycGFyc2UgPSBpdGVycGFyc2VcbiIKLSNlbmRpZgogCi0gICAgICAgICJkZWYgUEkodGFyZ2V0LCB0ZXh0PU5vbmUpOlxuIiAvKiBwdWJsaWMgKi8KLSAgICAgICAgIiAgZWxlbWVudCA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbilcbiIKKyAgICAgICAgImNsYXNzIFBJUHJveHk6XG4iCisgICAgICAgICIgZGVmIF9fY2FsbF9fKHNlbGYsIHRhcmdldCwgdGV4dD1Ob25lKTpcbiIKKyAgICAgICAgIiAgZWxlbWVudCA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlBJKVxuIgogICAgICAgICAiICBlbGVtZW50LnRleHQgPSB0YXJnZXRcbiIKICAgICAgICAgIiAgaWYgdGV4dDpcbiIKICAgICAgICAgIiAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50LnRleHQgKyAnICcgKyB0ZXh0XG4iCiAgICAgICAgICIgIHJldHVybiBlbGVtZW50XG4iCi0KLSAgICAgICAgIiAgZWxlbSA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlBJKVxuIgotICAgICAgICAiICBlbGVtLnRleHQgPSB0ZXh0XG4iCi0gICAgICAgICIgIHJldHVybiBlbGVtXG4iCi0gICAgICAgICJjRWxlbWVudFRyZWUuUEkgPSBjRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUElcbiIKKyAgICAgICAgIiBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6XG4iCisgICAgICAgICIgIHJldHVybiBjbXAoRVQuUEksIG90aGVyKVxuIgorICAgICAgICAiY0VsZW1lbnRUcmVlLlBJID0gY0VsZW1lbnRUcmVlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IFBJUHJveHkoKVxuIgogCiAgICAgICAgICJkZWYgWE1MKHRleHQpOlxuIiAvKiBwdWJsaWMgKi8KICAgICAgICAgIiAgcGFyc2VyID0gY0VsZW1lbnRUcmVlLlhNTFBhcnNlcigpXG4iCkBAIC0yNzcyLDI1ICszMDEwLDM0IEBACiAgICAgICAgICJkZWYgWE1MSUQodGV4dCk6XG4iIC8qIHB1YmxpYyAqLwogICAgICAgICAiICB0cmVlID0gWE1MKHRleHQpXG4iCiAgICAgICAgICIgIGlkcyA9IHt9XG4iCi0gICAgICAgICIgIGZvciBlbGVtIGluIHRyZWUuZ2V0aXRlcmF0b3IoKTpcbiIKKyAgICAgICAgIiAgZm9yIGVsZW0gaW4gdHJlZS5pdGVyKCk6XG4iCiAgICAgICAgICIgICAgaWQgPSBlbGVtLmdldCgnaWQnKVxuIgogICAgICAgICAiICAgIGlmIGlkOlxuIgogICAgICAgICAiICAgICAgaWRzW2lkXSA9IGVsZW1cbiIKICAgICAgICAgIiAgcmV0dXJuIHRyZWUsIGlkc1xuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLlhNTElEID0gWE1MSURcbiIKIAorICAgICAgICAidHJ5OlxuIgorICAgICAgICAiIHJlZ2lzdGVyX25hbWVzcGFjZSA9IEVULnJlZ2lzdGVyX25hbWVzcGFjZVxuIgorICAgICAgICAiZXhjZXB0IEF0dHJpYnV0ZUVycm9yOlxuIgorICAgICAgICAiIGRlZiByZWdpc3Rlcl9uYW1lc3BhY2UocHJlZml4LCB1cmkpOlxuIgorICAgICAgICAiICBFVC5fbmFtZXNwYWNlX21hcFt1cmldID0gcHJlZml4XG4iCisgICAgICAgICJjRWxlbWVudFRyZWUucmVnaXN0ZXJfbmFtZXNwYWNlID0gcmVnaXN0ZXJfbmFtZXNwYWNlXG4iCisKICAgICAgICAgImNFbGVtZW50VHJlZS5kdW1wID0gRVQuZHVtcFxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLkVsZW1lbnRQYXRoID0gRWxlbWVudFBhdGggPSBFVC5FbGVtZW50UGF0aFxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLmlzZWxlbWVudCA9IEVULmlzZWxlbWVudFxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLlFOYW1lID0gRVQuUU5hbWVcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS50b3N0cmluZyA9IEVULnRvc3RyaW5nXG4iCisgICAgICAgICJjRWxlbWVudFRyZWUuZnJvbXN0cmluZ2xpc3QgPSBFVC5mcm9tc3RyaW5nbGlzdFxuIgorICAgICAgICAiY0VsZW1lbnRUcmVlLnRvc3RyaW5nbGlzdCA9IEVULnRvc3RyaW5nbGlzdFxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLlZFUlNJT04gPSAnIiBWRVJTSU9OICInXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuX192ZXJzaW9uX18gPSAnIiBWRVJTSU9OICInXG4iCi0gICAgICAgICJjRWxlbWVudFRyZWUuWE1MUGFyc2VyRXJyb3IgPSBTeW50YXhFcnJvclxuIgogCiAgICAgICAgKTsKIAotICAgIFB5UnVuX1N0cmluZyhib290c3RyYXAsIFB5X2ZpbGVfaW5wdXQsIGcsIE5VTEwpOworICAgIGlmICghUHlSdW5fU3RyaW5nKGJvb3RzdHJhcCwgUHlfZmlsZV9pbnB1dCwgZywgTlVMTCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGVsZW1lbnRwYXRoX29iaiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGcsICJFbGVtZW50UGF0aCIpOwogCkBAIC0yODA1LDIxICszMDUyLDI4IEBACiAgICAgICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICBlbGVtZW50dHJlZV9kZWVwY29weV9vYmogPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnLCAiZGVlcGNvcHkiKTsKLSAgICBlbGVtZW50dHJlZV9nZXRpdGVyYXRvcl9vYmogPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnLCAiZ2V0aXRlcmF0b3IiKTsKKyAgICBlbGVtZW50dHJlZV9pdGVyX29iaiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGcsICJpdGVyIik7CisgICAgZWxlbWVudHRyZWVfaXRlcnRleHRfb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZywgIml0ZXJ0ZXh0Iik7CiAKICNpZiBkZWZpbmVkKFVTRV9QWUVYUEFUX0NBUEkpCiAgICAgLyogbGluayBhZ2FpbnN0IHB5ZXhwYXQsIGlmIHBvc3NpYmxlICovCi0gICAgY2FwaSA9IFB5Q09iamVjdF9JbXBvcnQoInB5ZXhwYXQiLCAiZXhwYXRfQ0FQSSIpOwotICAgIGlmIChjYXBpICYmCi0gICAgICAgIHN0cmNtcChjYXBpLT5tYWdpYywgUHlFeHBhdF9DQVBJX01BR0lDKSA9PSAwICYmCi0gICAgICAgIGNhcGktPnNpemUgPD0gc2l6ZW9mKCpleHBhdF9jYXBpKSAmJgotICAgICAgICBjYXBpLT5NQUpPUl9WRVJTSU9OID09IFhNTF9NQUpPUl9WRVJTSU9OICYmCi0gICAgICAgIGNhcGktPk1JTk9SX1ZFUlNJT04gPT0gWE1MX01JTk9SX1ZFUlNJT04gJiYKLSAgICAgICAgY2FwaS0+TUlDUk9fVkVSU0lPTiA9PSBYTUxfTUlDUk9fVkVSU0lPTikKLSAgICAgICAgZXhwYXRfY2FwaSA9IGNhcGk7Ci0gICAgZWxzZQotICAgICAgICBleHBhdF9jYXBpID0gTlVMTDsKKyAgICBleHBhdF9jYXBpID0gUHlDYXBzdWxlX0ltcG9ydChQeUV4cGF0X0NBUFNVTEVfTkFNRSwgMCk7CisgICAgaWYgKGV4cGF0X2NhcGkpIHsKKyAgICAgICAgLyogY2hlY2sgdGhhdCBpdCdzIHVzYWJsZSAqLworICAgICAgICBpZiAoc3RyY21wKGV4cGF0X2NhcGktPm1hZ2ljLCBQeUV4cGF0X0NBUElfTUFHSUMpICE9IDAgfHwKKyAgICAgICAgICAgIGV4cGF0X2NhcGktPnNpemUgPCBzaXplb2Yoc3RydWN0IFB5RXhwYXRfQ0FQSSkgfHwKKyAgICAgICAgICAgIGV4cGF0X2NhcGktPk1BSk9SX1ZFUlNJT04gIT0gWE1MX01BSk9SX1ZFUlNJT04gfHwKKyAgICAgICAgICAgIGV4cGF0X2NhcGktPk1JTk9SX1ZFUlNJT04gIT0gWE1MX01JTk9SX1ZFUlNJT04gfHwKKyAgICAgICAgICAgIGV4cGF0X2NhcGktPk1JQ1JPX1ZFUlNJT04gIT0gWE1MX01JQ1JPX1ZFUlNJT04pCisgICAgICAgICAgICBleHBhdF9jYXBpID0gTlVMTDsKKyAgICB9CiAjZW5kaWYKIAorICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAorICAgICAgICAiY0VsZW1lbnRUcmVlLlBhcnNlRXJyb3IiLCBQeUV4Y19TeW50YXhFcnJvciwgTlVMTAorICAgICAgICApOworICAgIFB5X0lOQ1JFRihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwppbmRleCAzZTBlMDc3Li41NzJlN2ZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwpAQCAtMjc0LDYgKzI3NCw1MyBAQAogICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLwogfTsKIAorLyogUGlja2xlIHN0cmF0ZWd5OgorICAgX19yZWR1Y2VfXyBieSBpdHNlbGYgZG9lc24ndCBzdXBwb3J0IGdldHRpbmcga3dhcmdzIGluIHRoZSB1bnBpY2tsZQorICAgb3BlcmF0aW9uIHNvIHdlIGRlZmluZSBhIF9fc2V0c3RhdGVfXyB0aGF0IHJlcGxhY2VzIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZSBwYXJ0aWFsLiAgSWYgd2Ugb25seSByZXBsYWNlZCBwYXJ0IG9mIGl0IHNvbWVvbmUgd291bGQgdXNlCisgICBpdCBhcyBhIGhvb2sgdG8gZG8gc3RhbmdlIHRoaW5ncy4KKyAqLworCitQeU9iamVjdCAqCitwYXJ0aWFsX3JlZHVjZShwYXJ0aWFsb2JqZWN0ICpwdG8sIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oTykoT09PTykiLCBQeV9UWVBFKHB0byksIHB0by0+Zm4sIHB0by0+Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgcHRvLT5hcmdzLCBwdG8tPmt3LAorICAgICAgICAgICAgICAgICAgICAgICAgIHB0by0+ZGljdCA/IHB0by0+ZGljdCA6IFB5X05vbmUpOworfQorCitQeU9iamVjdCAqCitwYXJ0aWFsX3NldHN0YXRlKHBhcnRpYWxvYmplY3QgKnB0bywgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmZuLCAqZm5hcmdzLCAqa3csICpkaWN0OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiKE9PT08pOl9fc2V0c3RhdGVfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZmbiwgJmZuYXJncywgJmt3LCAmZGljdCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1hERUNSRUYocHRvLT5mbik7CisgICAgUHlfWERFQ1JFRihwdG8tPmFyZ3MpOworICAgIFB5X1hERUNSRUYocHRvLT5rdyk7CisgICAgUHlfWERFQ1JFRihwdG8tPmRpY3QpOworICAgIHB0by0+Zm4gPSBmbjsKKyAgICBwdG8tPmFyZ3MgPSBmbmFyZ3M7CisgICAgcHRvLT5rdyA9IGt3OworICAgIGlmIChkaWN0ICE9IFB5X05vbmUpIHsKKyAgICAgIHB0by0+ZGljdCA9IGRpY3Q7CisgICAgICBQeV9JTkNSRUYoZGljdCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHB0by0+ZGljdCA9IE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihmbik7CisgICAgUHlfSU5DUkVGKGZuYXJncyk7CisgICAgUHlfSU5DUkVGKGt3KTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHBhcnRpYWxfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilwYXJ0aWFsX3JlZHVjZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiX19zZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKXBhcnRpYWxfc2V0c3RhdGUsIE1FVEhfVkFSQVJHU30sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKIHN0YXRpYyBQeVR5cGVPYmplY3QgcGFydGlhbF90eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJmdW5jdG9vbHMucGFydGlhbCIsICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTMwNCw3ICszNTEsNyBAQAogICAgIG9mZnNldG9mKHBhcnRpYWxvYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgcGFydGlhbF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIHBhcnRpYWxfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBwYXJ0aWFsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwppbmRleCA2OTFkMWU4Li5hYTlkZDRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCisrKyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKQEAgLTE2LDIwICsxNiw1MCBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAorICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9CisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAorICAgICAgICB9CisjZWxzZQorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKKyNlbmRpZgorCiAvKiBFVlAgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgdG8gaGFzaGluZyBpbiBPcGVuU1NMICovCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KIAogI2RlZmluZSBNVU5DSF9TSVpFIElOVF9NQVgKIAorLyogVE9ETyhncHMpOiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgbW9kdWxlIG9yIEVWUG9iamVjdCBhdHRyaWJ1dGUKKyAqIHRvIGFsbG93IHRoZSB1c2VyIHRvIG9wdGltaXplIGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSB0aGV5J3JlIHVzaW5nLiAqLworI2RlZmluZSBIQVNITElCX0dJTF9NSU5TSVpFIDIwNDgKIAogI2lmbmRlZiBIQVNIX09CSl9DT05TVFJVQ1RPUgogI2RlZmluZSBIQVNIX09CSl9DT05TVFJVQ1RPUiAwCiAjZW5kaWYKIAorLyogTWluaW11bSBPcGVuU1NMIHZlcnNpb24gbmVlZGVkIHRvIHN1cHBvcnQgc2hhMjI0IGFuZCBoaWdoZXIuICovCisjaWYgZGVmaW5lZChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSKSAmJiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MDAwKQorI2RlZmluZSBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAgICAgICAgICAgICpuYW1lOyAgLyogbmFtZSBvZiB0aGlzIGhhc2ggYWxnb3JpdGhtICovCiAgICAgRVZQX01EX0NUWCAgICAgICAgICBjdHg7ICAgIC8qIE9wZW5TU0wgbWVzc2FnZSBkaWdlc3QgY29udGV4dCAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlUaHJlYWRfdHlwZV9sb2NrICBsb2NrOyAgIC8qIE9wZW5TU0wgY29udGV4dCBsb2NrICovCisjZW5kaWYKIH0gRVZQb2JqZWN0OwogCiAKQEAgLTQzLDEwICs3MywxMiBAQAogCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcobWQ1KQogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTEpCisjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTIyNCkKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGEyNTYpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMzg0KQogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTUxMikKKyNlbmRpZgogCiAKIHN0YXRpYyBFVlBvYmplY3QgKgpAQCAtNTgsMjYgKzkwLDU3IEBACiAgICAgaWYgKHJldHZhbCAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKICAgICAgICAgcmV0dmFsLT5uYW1lID0gbmFtZTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICByZXR2YWwtPmxvY2sgPSBOVUxMOworI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHZvaWQKK0VWUF9oYXNoKEVWUG9iamVjdCAqc2VsZiwgY29uc3Qgdm9pZCAqdnAsIFB5X3NzaXplX3QgbGVuKQoreworICAgIHVuc2lnbmVkIGludCBwcm9jZXNzOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil2cDsKKyAgICB3aGlsZSAoMCA8IGxlbikKKyAgICB7CisgICAgICAgIGlmIChsZW4gPiAoUHlfc3NpemVfdClNVU5DSF9TSVpFKQorICAgICAgICAgICAgcHJvY2VzcyA9IE1VTkNIX1NJWkU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb2Nlc3MgPSBQeV9TQUZFX0RPV05DQVNUKGxlbiwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KTsKKyAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCAoY29uc3Qgdm9pZCopY3AsIHByb2Nlc3MpOworICAgICAgICBsZW4gLT0gcHJvY2VzczsKKyAgICAgICAgY3AgKz0gcHJvY2VzczsKKyAgICB9Cit9CisKIC8qIEludGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KIAogc3RhdGljIHZvaWQKLUVWUF9kZWFsbG9jKFB5T2JqZWN0ICpwdHIpCitFVlBfZGVhbGxvYyhFVlBvYmplY3QgKnNlbGYpCiB7Ci0gICAgRVZQX01EX0NUWF9jbGVhbnVwKCYoKEVWUG9iamVjdCAqKXB0ciktPmN0eCk7Ci0gICAgUHlfWERFQ1JFRigoKEVWUG9iamVjdCAqKXB0ciktPm5hbWUpOwotICAgIFB5T2JqZWN0X0RlbChwdHIpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgaWYgKHNlbGYtPmxvY2sgIT0gTlVMTCkKKyAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPmxvY2spOworI2VuZGlmCisgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZzZWxmLT5jdHgpOworICAgIFB5X1hERUNSRUYoc2VsZi0+bmFtZSk7CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCitzdGF0aWMgdm9pZCBsb2NrZWRfRVZQX01EX0NUWF9jb3B5KEVWUF9NRF9DVFggKm5ld19jdHhfcCwgRVZQb2JqZWN0ICpzZWxmKQoreworICAgIEVOVEVSX0hBU0hMSUIoc2VsZik7CisgICAgRVZQX01EX0NUWF9jb3B5KG5ld19jdHhfcCwgJnNlbGYtPmN0eCk7CisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKK30KIAogLyogRXh0ZXJuYWwgbWV0aG9kcyBmb3IgYSBoYXNoIG9iamVjdCAqLwogCiBQeURvY19TVFJWQVIoRVZQX2NvcHlfX2RvY19fLCAiUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuIik7CiAKKwogc3RhdGljIFB5T2JqZWN0ICoKIEVWUF9jb3B5KEVWUG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTg2LDcgKzE0OSw3IEBACiAgICAgaWYgKCAobmV3b2JqID0gbmV3RVZQb2JqZWN0KHNlbGYtPm5hbWUpKT09TlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBFVlBfTURfQ1RYX2NvcHkoJm5ld29iai0+Y3R4LCAmc2VsZi0+Y3R4KTsKKyAgICBsb2NrZWRfRVZQX01EX0NUWF9jb3B5KCZuZXdvYmotPmN0eCwgc2VsZik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKIH0KIApAQCAtMTAxLDcgKzE2NCw3IEBACiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemU7CiAKLSAgICBFVlBfTURfQ1RYX2NvcHkoJnRlbXBfY3R4LCAmc2VsZi0+Y3R4KTsKKyAgICBsb2NrZWRfRVZQX01EX0NUWF9jb3B5KCZ0ZW1wX2N0eCwgc2VsZik7CiAgICAgZGlnZXN0X3NpemUgPSBFVlBfTURfQ1RYX3NpemUoJnRlbXBfY3R4KTsKICAgICBFVlBfRGlnZXN0RmluYWwoJnRlbXBfY3R4LCBkaWdlc3QsIE5VTEwpOwogCkBAIC0xMjMsNyArMTg2LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgaSwgaiwgZGlnZXN0X3NpemU7CiAKICAgICAvKiBHZXQgdGhlIHJhdyAoYmluYXJ5KSBkaWdlc3QgdmFsdWUgKi8KLSAgICBFVlBfTURfQ1RYX2NvcHkoJnRlbXBfY3R4LCAmc2VsZi0+Y3R4KTsKKyAgICBsb2NrZWRfRVZQX01EX0NUWF9jb3B5KCZ0ZW1wX2N0eCwgc2VsZik7CiAgICAgZGlnZXN0X3NpemUgPSBFVlBfTURfQ1RYX3NpemUoJnRlbXBfY3R4KTsKICAgICBFVlBfRGlnZXN0RmluYWwoJnRlbXBfY3R4LCBkaWdlc3QsIE5VTEwpOwogCkBAIC0xMzQsMjEgKzE5NywyMSBAQAogICAgIC8qIChub3QgYSBwcm9ibGVtIGJlY2F1c2Ugd2UgaG9sZCB0aGUgR0lMIGJ5IGRlZmF1bHQpICovCiAgICAgcmV0dmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZGlnZXN0X3NpemUgKiAyKTsKICAgICBpZiAoIXJldHZhbCkKLQkgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICBoZXhfZGlnZXN0ID0gUHlTdHJpbmdfQXNTdHJpbmcocmV0dmFsKTsKICAgICBpZiAoIWhleF9kaWdlc3QpIHsKLQkgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0JICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBNYWtlIGhleCB2ZXJzaW9uIG9mIHRoZSBkaWdlc3QgKi8KICAgICBmb3IoaT1qPTA7IGk8ZGlnZXN0X3NpemU7IGkrKykgewogICAgICAgICBjaGFyIGM7CiAgICAgICAgIGMgPSAoZGlnZXN0W2ldID4+IDQpICYgMHhmOwotCWMgPSAoYz45KSA/IGMrJ2EnLTEwIDogYyArICcwJzsKKyAgICAgICAgYyA9IChjPjkpID8gYysnYSctMTAgOiBjICsgJzAnOwogICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBjOwogICAgICAgICBjID0gKGRpZ2VzdFtpXSAmIDB4Zik7Ci0JYyA9IChjPjkpID8gYysnYSctMTAgOiBjICsgJzAnOworICAgICAgICBjID0gKGM+OSkgPyBjKydhJy0xMCA6IGMgKyAnMCc7CiAgICAgICAgIGhleF9kaWdlc3RbaisrXSA9IGM7CiAgICAgfQogICAgIHJldHVybiByZXR2YWw7CkBAIC0xNjAsNDYgKzIyMyw1NyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEVWUF91cGRhdGUoRVZQb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBQeV9idWZmZXIgdmlldzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6dXBkYXRlIiwgJmNwLCAmbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOnVwZGF0ZSIsICZ2aWV3KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gMCAmJiBsZW4gPD0gTVVOQ0hfU0laRSkgewotICAgIEVWUF9EaWdlc3RVcGRhdGUoJnNlbGYtPmN0eCwgY3AsIFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlfc3NpemVfdCBvZmZzZXQgPSAwOwotICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvY2VzcyA9IGxlbiA+IE1VTkNIX1NJWkUgPyBNVU5DSF9TSVpFIDogbGVuOwotICAgICAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCBjcCArIG9mZnNldCwgcHJvY2Vzcyk7Ci0gICAgICAgICAgICBsZW4gLT0gcHJvY2VzczsKLSAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzOwotICAgICAgICB9CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMICYmIHZpZXcubGVuID49IEhBU0hMSUJfR0lMX01JTlNJWkUpIHsKKyAgICAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgLyogZmFpbD8gbG9jayA9IE5VTEwgYW5kIHdlIGZhaWwgb3ZlciB0byBub24tdGhyZWFkZWQgY29kZS4gKi8KICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworCisgICAgaWYgKHNlbGYtPmxvY2sgIT0gTlVMTCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrLCAxKTsKKyAgICAgICAgRVZQX2hhc2goc2VsZiwgdmlldy5idWYsIHZpZXcubGVuKTsKKyAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPmxvY2spOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIEVWUF9oYXNoKHNlbGYsIHZpZXcuYnVmLCB2aWV3Lmxlbik7CisgICAgfQorCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIEVWUF9tZXRob2RzW10gPSB7Ci0gICAgeyJ1cGRhdGUiLAkgIChQeUNGdW5jdGlvbilFVlBfdXBkYXRlLCAgICBNRVRIX1ZBUkFSR1MsIEVWUF91cGRhdGVfX2RvY19ffSwKLSAgICB7ImRpZ2VzdCIsCSAgKFB5Q0Z1bmN0aW9uKUVWUF9kaWdlc3QsICAgIE1FVEhfTk9BUkdTLCAgRVZQX2RpZ2VzdF9fZG9jX199LAorICAgIHsidXBkYXRlIiwgICAgKFB5Q0Z1bmN0aW9uKUVWUF91cGRhdGUsICAgIE1FVEhfVkFSQVJHUywgRVZQX3VwZGF0ZV9fZG9jX199LAorICAgIHsiZGlnZXN0IiwgICAgKFB5Q0Z1bmN0aW9uKUVWUF9kaWdlc3QsICAgIE1FVEhfTk9BUkdTLCAgRVZQX2RpZ2VzdF9fZG9jX199LAogICAgIHsiaGV4ZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKUVWUF9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCAgRVZQX2hleGRpZ2VzdF9fZG9jX199LAotICAgIHsiY29weSIsCSAgKFB5Q0Z1bmN0aW9uKUVWUF9jb3B5LCAgICAgIE1FVEhfTk9BUkdTLCAgRVZQX2NvcHlfX2RvY19ffSwKLSAgICB7TlVMTCwJICBOVUxMfQkJLyogc2VudGluZWwgKi8KKyAgICB7ImNvcHkiLCAgICAgIChQeUNGdW5jdGlvbilFVlBfY29weSwgICAgICBNRVRIX05PQVJHUywgIEVWUF9jb3B5X19kb2NfX30sCisgICAge05VTEwsICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgogRVZQX2dldF9ibG9ja19zaXplKEVWUG9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoRVZQX01EX0NUWF9ibG9ja19zaXplKCYoKEVWUG9iamVjdCAqKXNlbGYpLT5jdHgpKTsKKyAgICBsb25nIGJsb2NrX3NpemU7CisgICAgYmxvY2tfc2l6ZSA9IEVWUF9NRF9DVFhfYmxvY2tfc2l6ZSgmc2VsZi0+Y3R4KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGJsb2NrX3NpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogRVZQX2dldF9kaWdlc3Rfc2l6ZShFVlBvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKEVWUF9NRF9DVFhfc2l6ZSgmKChFVlBvYmplY3QgKilzZWxmKS0+Y3R4KSk7CisgICAgbG9uZyBzaXplOworICAgIHNpemUgPSBFVlBfTURfQ1RYX3NpemUoJnNlbGYtPmN0eCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzaXplKTsKIH0KIAogc3RhdGljIFB5TWVtYmVyRGVmIEVWUF9tZW1iZXJzW10gPSB7CkBAIC0yNDEsMjQgKzMxNSwyNSBAQAogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJzdHJpbmciLCBOVUxMfTsKICAgICBQeU9iamVjdCAqbmFtZV9vYmogPSBOVUxMOworICAgIFB5X2J1ZmZlciB2aWV3ID0geyAwIH07CiAgICAgY2hhciAqbmFtZVN0cjsKLSAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSAwOwogICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98cyM6SEFTSCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9vYmosICZjcCwgJmxlbikpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzKjpIQVNIIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX29iaiwgJnZpZXcpKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlKG5hbWVfb2JqLCAicyIsICZuYW1lU3RyKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibmFtZSBtdXN0IGJlIGEgc3RyaW5nIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgZGlnZXN0ID0gRVZQX2dldF9kaWdlc3RieW5hbWUobmFtZVN0cik7CiAgICAgaWYgKCFkaWdlc3QpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIGhhc2ggZnVuY3Rpb24iKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgRVZQX0RpZ2VzdEluaXQoJnNlbGYtPmN0eCwgZGlnZXN0KTsKQEAgLTI2NiwyMSArMzQxLDE3IEBACiAgICAgc2VsZi0+bmFtZSA9IG5hbWVfb2JqOwogICAgIFB5X0lOQ1JFRihzZWxmLT5uYW1lKTsKIAotICAgIGlmIChjcCAmJiBsZW4pIHsKLSAgICAgICAgaWYgKGxlbiA+IDAgJiYgbGVuIDw9IE1VTkNIX1NJWkUpIHsKLSAgICAgICAgRVZQX0RpZ2VzdFVwZGF0ZSgmc2VsZi0+Y3R4LCBjcCwgUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KSk7CisgICAgaWYgKHZpZXcub2JqKSB7CisgICAgICAgIGlmICh2aWV3LmxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBFVlBfaGFzaChzZWxmLCB2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIHdoaWxlIChsZW4pIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJvY2VzcyA9IGxlbiA+IE1VTkNIX1NJWkUgPyBNVU5DSF9TSVpFIDogbGVuOwotICAgICAgICAgICAgICAgIEVWUF9EaWdlc3RVcGRhdGUoJnNlbGYtPmN0eCwgY3AgKyBvZmZzZXQsIHByb2Nlc3MpOwotICAgICAgICAgICAgICAgIGxlbiAtPSBwcm9jZXNzOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgRVZQX2hhc2goc2VsZiwgdmlldy5idWYsIHZpZXcubGVuKTsKICAgICAgICAgfQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMzA1LDExICszNzYsMTEgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgRVZQdHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2hhc2hsaWIuSEFTSCIsICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKEVWUG9iamVjdCksCS8qdHBfYmFzaWNzaXplKi8KLSAgICAwLAkJCS8qdHBfaXRlbXNpemUqLworICAgIHNpemVvZihFVlBvYmplY3QpLCAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCiAgICAgLyogbWV0aG9kcyAqLwotICAgIEVWUF9kZWFsbG9jLAkvKnRwX2RlYWxsb2MqLwotICAgIDAsCQkJLyp0cF9wcmludCovCisgICAgKGRlc3RydWN0b3IpRVZQX2RlYWxsb2MsICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlKi8KQEAgLTMyNiwxMyArMzk3LDEzIEBACiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyp0cF9mbGFncyovCiAgICAgaGFzaHR5cGVfZG9jLCAgICAgICAvKnRwX2RvYyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLAkJCS8qdHBfY2xlYXIqLwotICAgIDAsCQkJLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwJCQkvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLAkJCS8qdHBfaXRlciovCi0gICAgMCwJCQkvKnRwX2l0ZXJuZXh0Ki8KLSAgICBFVlBfbWV0aG9kcywJLyogdHBfbWV0aG9kcyAqLwotICAgIEVWUF9tZW1iZXJzLAkvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgRVZQX21ldGhvZHMsICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgRVZQX21lbWJlcnMsICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgRVZQX2dldHNldGVycywgICAgICAvKiB0cF9nZXRzZXQgKi8KICNpZiAxCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0zNjgsMTcgKzQzOSwxMiBAQAogICAgIH0KIAogICAgIGlmIChjcCAmJiBsZW4pIHsKLSAgICAgICAgaWYgKGxlbiA+IDAgJiYgbGVuIDw9IE1VTkNIX1NJWkUpIHsKLSAgICAgICAgICAgIEVWUF9EaWdlc3RVcGRhdGUoJnNlbGYtPmN0eCwgY3AsIFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAgaWYgKGxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBFVlBfaGFzaChzZWxmLCBjcCwgbGVuKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHByb2Nlc3MgPSBsZW4gPiBNVU5DSF9TSVpFID8gTVVOQ0hfU0laRSA6IGxlbjsKLSAgICAgICAgICAgICAgICBFVlBfRGlnZXN0VXBkYXRlKCZzZWxmLT5jdHgsIGNwICsgb2Zmc2V0LCBwcm9jZXNzKTsKLSAgICAgICAgICAgICAgICBsZW4gLT0gcHJvY2VzczsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gcHJvY2VzczsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVWUF9oYXNoKHNlbGYsIGNwLCBsZW4pOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MDAsMTMgKzQ2NiwxMyBAQAogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJzdHJpbmciLCBOVUxMfTsKICAgICBQeU9iamVjdCAqbmFtZV9vYmogPSBOVUxMOworICAgIFB5X2J1ZmZlciB2aWV3ID0geyAwIH07CisgICAgUHlPYmplY3QgKnJldF9vYmo7CiAgICAgY2hhciAqbmFtZTsKICAgICBjb25zdCBFVlBfTUQgKmRpZ2VzdDsKLSAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiT3xzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfb2JqLCAmY3AsICZsZW4pKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiT3xzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfb2JqLCAmdmlldykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC00MTcsNyArNDgzLDExIEBACiAKICAgICBkaWdlc3QgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShuYW1lKTsKIAotICAgIHJldHVybiBFVlBuZXcobmFtZV9vYmosIGRpZ2VzdCwgTlVMTCwgY3AsIGxlbik7CisgICAgcmV0X29iaiA9IEVWUG5ldyhuYW1lX29iaiwgZGlnZXN0LCBOVUxMLCAodW5zaWduZWQgY2hhciopdmlldy5idWYsCisgICAgICAgICAgICAgICAgICAgICB2aWV3Lmxlbik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisKKyAgICByZXR1cm4gcmV0X29iajsKIH0KIAogLyoKQEAgLTQzMSwxOCArNTAxLDIwIEBACiAgICAgc3RhdGljIFB5T2JqZWN0ICogXAogICAgIEVWUF9uZXdfICMjIE5BTUUgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAogICAgIHsgXAotICAgICAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7IFwKLSAgICAgICAgUHlfc3NpemVfdCBsZW4gPSAwOyBcCisgICAgICAgIFB5X2J1ZmZlciB2aWV3ID0geyAwIH07IFwKKyAgICAgICAgUHlPYmplY3QgKnJldF9vYmo7IFwKICAgICAgXAotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxzIzoiICNOQU1FICwgJmNwLCAmbGVuKSkgeyBcCisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHMqOiIgI05BTUUgLCAmdmlldykpIHsgXAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKICAgICAgICAgfSBcCiAgICAgIFwKLSAgICAgICAgcmV0dXJuIEVWUG5ldyggXAotICAgICAgICAgICAgICAgIENPTlNUXyAjIyBOQU1FICMjIF9uYW1lX29iaiwgXAotICAgICAgICAgICAgICAgIE5VTEwsIFwKLSAgICAgICAgICAgICAgICBDT05TVF9uZXdfICMjIE5BTUUgIyMgX2N0eF9wLCBcCi0gICAgICAgICAgICAgICAgY3AsIGxlbik7IFwKKyAgICAgICAgcmV0X29iaiA9IEVWUG5ldyggXAorICAgICAgICAgICAgICAgICAgICBDT05TVF8gIyMgTkFNRSAjIyBfbmFtZV9vYmosIFwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgXAorICAgICAgICAgICAgICAgICAgICBDT05TVF9uZXdfICMjIE5BTUUgIyMgX2N0eF9wLCBcCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKil2aWV3LmJ1Ziwgdmlldy5sZW4pOyBcCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOyBcCisgICAgICAgIHJldHVybiByZXRfb2JqOyBcCiAgICAgfQogCiAvKiBhIFB5TWV0aG9kRGVmIHN0cnVjdHVyZSBmb3IgdGhlIGNvbnN0cnVjdG9yICovCkBAIC00NjMsMTAgKzUzNSwxMiBAQAogCiBHRU5fQ09OU1RSVUNUT1IobWQ1KQogR0VOX0NPTlNUUlVDVE9SKHNoYTEpCisjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgogR0VOX0NPTlNUUlVDVE9SKHNoYTIyNCkKIEdFTl9DT05TVFJVQ1RPUihzaGEyNTYpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMzg0KQogR0VOX0NPTlNUUlVDVE9SKHNoYTUxMikKKyNlbmRpZgogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLwogCkBAIC00NzQsMTEgKzU0OCwxMyBAQAogICAgIHsibmV3IiwgKFB5Q0Z1bmN0aW9uKUVWUF9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBFVlBfbmV3X19kb2NfX30sCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYobWQ1KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGExKSwKKyNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMjI0KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGEyNTYpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTM4NCksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhNTEyKSwKLSAgICB7TlVMTCwJTlVMTH0JCSAvKiBTZW50aW5lbCAqLworI2VuZGlmCisgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIAogCkBAIC01MTIsOCArNTg4LDEwIEBACiAgICAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGJ5IHRoZSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvcnMgKi8KICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhtZDUpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTEpOworI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGEyMjQpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTI1Nik7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMzg0KTsKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGE1MTIpOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwppbmRleCBmNzA1ZWMxLi45NDllNWIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKQEAgLTIsNyArMiw3IEBACiAKIEMgaW1wbGVtZW50YXRpb24gZGVyaXZlZCBkaXJlY3RseSBmcm9tIGhlYXBxLnB5IGluIFB5Mi4zCiB3aGljaCB3YXMgd3JpdHRlbiBieSBLZXZpbiBPJ0Nvbm5vciwgYXVnbWVudGVkIGJ5IFRpbSBQZXRlcnMsCi1hbm5vdGF0ZWQgYnkgRnJhbudvaXMgUGluYXJkLCBhbmQgY29udmVydGVkIHRvIEMgYnkgUmF5bW9uZCBIZXR0aW5nZXIuCithbm5vdGF0ZWQgYnkgRnJhbsOnb2lzIFBpbmFyZCwgYW5kIGNvbnZlcnRlZCB0byBDIGJ5IFJheW1vbmQgSGV0dGluZ2VyLgogCiAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzEyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuYwpAQCAtMCwwICsxLDc2OCBAQAorLyoKKyAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IEkvTyBsaWIgYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgorICAgIAorICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBVbnN1cHBvcnRlZE9wZXJhdGlvbiwgQmxvY2tpbmdJT0Vycm9yLgorICAgIEZ1bmN0aW9ucyBkZWZpbmVkIGhlcmU6IG9wZW4oKS4KKyAgICAKKyAgICBNb3N0bHkgd3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYworKi8KKworI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYgLyogSEFWRV9TWVNfVFlQRVNfSCAqLworCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19TVEFUX0ggKi8KKworCisvKiBWYXJpb3VzIGludGVybmVkIHN0cmluZ3MgKi8KKworUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2VkOworUHlPYmplY3QgKl9QeUlPX3N0cl9kZWNvZGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX2VuY29kZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfZmlsZW5vOworUHlPYmplY3QgKl9QeUlPX3N0cl9mbHVzaDsKK1B5T2JqZWN0ICpfUHlJT19zdHJfZ2V0c3RhdGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX2lzYXR0eTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfbmV3bGluZXM7CitQeU9iamVjdCAqX1B5SU9fc3RyX25sOworUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkOworUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkMTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfcmVhZGFibGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWRpbnRvOworUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkbGluZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfcmVzZXQ7CitQeU9iamVjdCAqX1B5SU9fc3RyX3NlZWs7CitQeU9iamVjdCAqX1B5SU9fc3RyX3NlZWthYmxlOworUHlPYmplY3QgKl9QeUlPX3N0cl9zZXRzdGF0ZTsKK1B5T2JqZWN0ICpfUHlJT19zdHJfdGVsbDsKK1B5T2JqZWN0ICpfUHlJT19zdHJfdHJ1bmNhdGU7CitQeU9iamVjdCAqX1B5SU9fc3RyX3dyaXRhYmxlOworUHlPYmplY3QgKl9QeUlPX3N0cl93cml0ZTsKKworUHlPYmplY3QgKl9QeUlPX2VtcHR5X3N0cjsKK1B5T2JqZWN0ICpfUHlJT19lbXB0eV9ieXRlczsKK1B5T2JqZWN0ICpfUHlJT196ZXJvOworCisMCitQeURvY19TVFJWQVIobW9kdWxlX2RvYywKKyJUaGUgaW8gbW9kdWxlIHByb3ZpZGVzIHRoZSBQeXRob24gaW50ZXJmYWNlcyB0byBzdHJlYW0gaGFuZGxpbmcuIFRoZVxuIgorImJ1aWx0aW4gb3BlbiBmdW5jdGlvbiBpcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLlxuIgorIlxuIgorIkF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdFxuIgorImRlZmluZXMgdGhlIGJhc2ljIGludGVyZmFjZSB0byBhIHN0cmVhbS4gTm90ZSwgaG93ZXZlciwgdGhhdCB0aGVyZSBpcyBub1xuIgorInNlcGVyYXRpb24gYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHN0cmVhbXM7IGltcGxlbWVudGF0aW9ucyBhcmVcbiIKKyJhbGxvd2VkIHRvIHRocm93IGFuIElPRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi5cbiIKKyJcbiIKKyJFeHRlbmRpbmcgSU9CYXNlIGlzIFJhd0lPQmFzZSB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUgcmVhZGluZyBhbmRcbiIKKyJ3cml0aW5nIG9mIHJhdyBieXRlcyB0byBhIHN0cmVhbS4gRmlsZUlPIHN1YmNsYXNzZXMgUmF3SU9CYXNlIHRvIHByb3ZpZGVcbiIKKyJhbiBpbnRlcmZhY2UgdG8gT1MgZmlsZXMuXG4iCisiXG4iCisiQnVmZmVyZWRJT0Jhc2UgZGVhbHMgd2l0aCBidWZmZXJpbmcgb24gYSByYXcgYnl0ZSBzdHJlYW0gKFJhd0lPQmFzZSkuIEl0c1xuIgorInN1YmNsYXNzZXMsIEJ1ZmZlcmVkV3JpdGVyLCBCdWZmZXJlZFJlYWRlciwgYW5kIEJ1ZmZlcmVkUldQYWlyIGJ1ZmZlclxuIgorInN0cmVhbXMgdGhhdCBhcmUgcmVhZGFibGUsIHdyaXRhYmxlLCBhbmQgYm90aCByZXNwZWN0aXZlbHkuXG4iCisiQnVmZmVyZWRSYW5kb20gcHJvdmlkZXMgYSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2Vzc1xuIgorInN0cmVhbXMuIEJ5dGVzSU8gaXMgYSBzaW1wbGUgc3RyZWFtIG9mIGluLW1lbW9yeSBieXRlcy5cbiIKKyJcbiIKKyJBbm90aGVyIElPQmFzZSBzdWJjbGFzcywgVGV4dElPQmFzZSwgZGVhbHMgd2l0aCB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nXG4iCisib2Ygc3RyZWFtcyBpbnRvIHRleHQuIFRleHRJT1dyYXBwZXIsIHdoaWNoIGV4dGVuZHMgaXQsIGlzIGEgYnVmZmVyZWQgdGV4dFxuIgorImludGVyZmFjZSB0byBhIGJ1ZmZlcmVkIHJhdyBzdHJlYW0gKGBCdWZmZXJlZElPQmFzZWApLiBGaW5hbGx5LCBTdHJpbmdJT1xuIgorImlzIGEgaW4tbWVtb3J5IHN0cmVhbSBmb3IgdGV4dC5cbiIKKyJcbiIKKyJBcmd1bWVudCBuYW1lcyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24sIGFuZCBvbmx5IHRoZSBhcmd1bWVudHNcbiIKKyJvZiBvcGVuKCkgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuXG4iCisiXG4iCisiZGF0YTpcbiIKKyJcbiIKKyJERUZBVUxUX0JVRkZFUl9TSVpFXG4iCisiXG4iCisiICAgQW4gaW50IGNvbnRhaW5pbmcgdGhlIGRlZmF1bHQgYnVmZmVyIHNpemUgdXNlZCBieSB0aGUgbW9kdWxlJ3MgYnVmZmVyZWRcbiIKKyIgICBJL08gY2xhc3Nlcy4gb3BlbigpIHVzZXMgdGhlIGZpbGUncyBibGtzaXplIChhcyBvYnRhaW5lZCBieSBvcy5zdGF0KSBpZlxuIgorIiAgIHBvc3NpYmxlLlxuIgorICAgICk7CisMCisKKy8qCisgKiBCbG9ja2luZ0lPRXJyb3IgZXh0ZW5kcyBJT0Vycm9yCisgKi8KKworc3RhdGljIGludAorYmxvY2tpbmdpb2Vycm9yX2luaXQoUHlCbG9ja2luZ0lPRXJyb3JPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMOworICAgIFB5T2JqZWN0ICpiYXNlYXJncyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCB3cml0dGVuID0gMDsKKworICAgIGFzc2VydChQeVR1cGxlX0NoZWNrKGFyZ3MpKTsKKworICAgIHNlbGYtPndyaXR0ZW4gPSAwOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT098bjpCbG9ja2luZ0lPRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmbXllcnJubywgJnN0cmVycm9yLCAmd3JpdHRlbikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGJhc2VhcmdzID0gUHlUdXBsZV9QYWNrKDIsIG15ZXJybm8sIHN0cmVycm9yKTsKKyAgICBpZiAoYmFzZWFyZ3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIFRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgaW5pdGlhbGl6aW5nIG9mIG15ZXJybm8gYW5kIHN0cmVycm9yIG1lbWJlcnMgKi8KKyAgICBpZiAoKChQeVR5cGVPYmplY3QgKilQeUV4Y19JT0Vycm9yKS0+dHBfaW5pdCgKKyAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilzZWxmLCBiYXNlYXJncywga3dkcykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGJhc2VhcmdzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQeV9ERUNSRUYoYmFzZWFyZ3MpOworCisgICAgc2VsZi0+d3JpdHRlbiA9IHdyaXR0ZW47CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU1lbWJlckRlZiBibG9ja2luZ2lvZXJyb3JfbWVtYmVyc1tdID0geworICAgIHsiY2hhcmFjdGVyc193cml0dGVuIiwgVF9QWVNTSVpFVCwgb2Zmc2V0b2YoUHlCbG9ja2luZ0lPRXJyb3JPYmplY3QsIHdyaXR0ZW4pLCAwfSwKKyAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IF9QeUV4Y19CbG9ja2luZ0lPRXJyb3IgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIkJsb2NraW5nSU9FcnJvciIsIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKFB5QmxvY2tpbmdJT0Vycm9yT2JqZWN0KSwgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKnRwX2ZsYWdzKi8KKyAgICBQeURvY19TVFIoIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBJL08gd291bGQgYmxvY2sgIgorICAgICAgICAgICAgICAib24gYSBub24tYmxvY2tpbmcgSS9PIHN0cmVhbSIpLCAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgYmxvY2tpbmdpb2Vycm9yX21lbWJlcnMsICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAoaW5pdHByb2MpYmxvY2tpbmdpb2Vycm9yX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9OworUHlPYmplY3QgKlB5RXhjX0Jsb2NraW5nSU9FcnJvciA9IChQeU9iamVjdCAqKSZfUHlFeGNfQmxvY2tpbmdJT0Vycm9yOworDAorCisvKgorICogVGhlIG1haW4gb3BlbigpIGZ1bmN0aW9uCisgKi8KK1B5RG9jX1NUUlZBUihvcGVuX2RvYywKKyJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLlxuIgorIlxuIgorImZpbGUgaXMgZWl0aGVyIGEgdGV4dCBvciBieXRlIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgKGFuZCB0aGUgcGF0aFxuIgorImlmIHRoZSBmaWxlIGlzbid0IGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5KSBvZiB0aGUgZmlsZSB0b1xuIgorImJlIG9wZW5lZCBvciBhbiBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBiZVxuIgorIndyYXBwZWQuIChJZiBhIGZpbGUgZGVzY3JpcHRvciBpcyBnaXZlbiwgaXQgaXMgY2xvc2VkIHdoZW4gdGhlXG4iCisicmV0dXJuZWQgSS9PIG9iamVjdCBpcyBjbG9zZWQsIHVubGVzcyBjbG9zZWZkIGlzIHNldCB0byBGYWxzZS4pXG4iCisiXG4iCisibW9kZSBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGZpbGVcbiIKKyJpcyBvcGVuZWQuIEl0IGRlZmF1bHRzIHRvICdyJyB3aGljaCBtZWFucyBvcGVuIGZvciByZWFkaW5nIGluIHRleHRcbiIKKyJtb2RlLiAgT3RoZXIgY29tbW9uIHZhbHVlcyBhcmUgJ3cnIGZvciB3cml0aW5nICh0cnVuY2F0aW5nIHRoZSBmaWxlIGlmXG4iCisiaXQgYWxyZWFkeSBleGlzdHMpLCBhbmQgJ2EnIGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIHNvbWUgVW5peCBzeXN0ZW1zLFxuIgorIm1lYW5zIHRoYXQgYWxsIHdyaXRlcyBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSByZWdhcmRsZXNzIG9mIHRoZVxuIgorImN1cnJlbnQgc2VlayBwb3NpdGlvbikuIEluIHRleHQgbW9kZSwgaWYgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZCB0aGVcbiIKKyJlbmNvZGluZyB1c2VkIGlzIHBsYXRmb3JtIGRlcGVuZGVudC4gKEZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJhd1xuIgorImJ5dGVzIHVzZSBiaW5hcnkgbW9kZSBhbmQgbGVhdmUgZW5jb2RpbmcgdW5zcGVjaWZpZWQuKSBUaGUgYXZhaWxhYmxlXG4iCisibW9kZXMgYXJlOlxuIgorIlxuIgorIj09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKKyJDaGFyYWN0ZXIgTWVhbmluZ1xuIgorIi0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyIncicgICAgICAgb3BlbiBmb3IgcmVhZGluZyAoZGVmYXVsdClcbiIKKyIndycgICAgICAgb3BlbiBmb3Igd3JpdGluZywgdHJ1bmNhdGluZyB0aGUgZmlsZSBmaXJzdFxuIgorIidhJyAgICAgICBvcGVuIGZvciB3cml0aW5nLCBhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiBpdCBleGlzdHNcbiIKKyInYicgICAgICAgYmluYXJ5IG1vZGVcbiIKKyIndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KVxuIgorIicrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZylcbiIKKyInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZFxuIgorIiAgICAgICAgICBmb3IgbmV3IGNvZGUpXG4iCisiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorIlxuIgorIlRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb21cbiIKKyJhY2Nlc3MsIHRoZSBtb2RlICd3K2InIG9wZW5zIGFuZCB0cnVuY2F0ZXMgdGhlIGZpbGUgdG8gMCBieXRlcywgd2hpbGVcbiIKKyIncitiJyBvcGVucyB0aGUgZmlsZSB3aXRob3V0IHRydW5jYXRpb24uXG4iCisiXG4iCisiUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmaWxlcyBvcGVuZWQgaW4gYmluYXJ5IGFuZCB0ZXh0IG1vZGVzLFxuIgorImV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXNuJ3QuIEZpbGVzIG9wZW5lZCBpblxuIgorImJpbmFyeSBtb2RlIChhcHBlbmRpbmcgJ2InIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSByZXR1cm4gY29udGVudHMgYXNcbiIKKyJieXRlcyBvYmplY3RzIHdpdGhvdXQgYW55IGRlY29kaW5nLiBJbiB0ZXh0IG1vZGUgKHRoZSBkZWZhdWx0LCBvciB3aGVuXG4iCisiJ3QnIGlzIGFwcGVuZGVkIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZVxuIgorInJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGFcbiIKKyJwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi5cbiIKKyJcbiIKKyJidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS5cbiIKKyJQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0XG4iCisibGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZVxuIgorInRoZSBzaXplIG9mIGEgZml4ZWQtc2l6ZSBjaHVuayBidWZmZXIuICBXaGVuIG5vIGJ1ZmZlcmluZyBhcmd1bWVudCBpc1xuIgorImdpdmVuLCB0aGUgZGVmYXVsdCBidWZmZXJpbmcgcG9saWN5IHdvcmtzIGFzIGZvbGxvd3M6XG4iCisiXG4iCisiKiBCaW5hcnkgZmlsZXMgYXJlIGJ1ZmZlcmVkIGluIGZpeGVkLXNpemUgY2h1bmtzOyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyXG4iCisiICBpcyBjaG9zZW4gdXNpbmcgYSBoZXVyaXN0aWMgdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdW5kZXJseWluZyBkZXZpY2Unc1xuIgorIiAgXCJibG9jayBzaXplXCIgYW5kIGZhbGxpbmcgYmFjayBvbiBgaW8uREVGQVVMVF9CVUZGRVJfU0laRWAuXG4iCisiICBPbiBtYW55IHN5c3RlbXMsIHRoZSBidWZmZXIgd2lsbCB0eXBpY2FsbHkgYmUgNDA5NiBvciA4MTkyIGJ5dGVzIGxvbmcuXG4iCisiXG4iCisiKiBcIkludGVyYWN0aXZlXCIgdGV4dCBmaWxlcyAoZmlsZXMgZm9yIHdoaWNoIGlzYXR0eSgpIHJldHVybnMgVHJ1ZSlcbiIKKyIgIHVzZSBsaW5lIGJ1ZmZlcmluZy4gIE90aGVyIHRleHQgZmlsZXMgdXNlIHRoZSBwb2xpY3kgZGVzY3JpYmVkIGFib3ZlXG4iCisiICBmb3IgYmluYXJ5IGZpbGVzLlxuIgorIlxuIgorImVuY29kaW5nIGlzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSBvciBlbmNvZGUgdGhlXG4iCisiZmlsZS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXNcbiIKKyJwbGF0Zm9ybSBkZXBlbmRlbnQsIGJ1dCBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmVcbiIKKyJwYXNzZWQuICBTZWUgdGhlIGNvZGVjcyBtb2R1bGUgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBlbmNvZGluZ3MuXG4iCisiXG4iCisiZXJyb3JzIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyBob3cgZW5jb2RpbmcgZXJyb3JzIGFyZSB0b1xuIgorImJlIGhhbmRsZWQtLS10aGlzIGFyZ3VtZW50IHNob3VsZCBub3QgYmUgdXNlZCBpbiBiaW5hcnkgbW9kZS4gUGFzc1xuIgorIidzdHJpY3QnIHRvIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3JcbiIKKyIodGhlIGRlZmF1bHQgb2YgTm9uZSBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyAnaWdub3JlJyB0byBpZ25vcmVcbiIKKyJlcnJvcnMuIChOb3RlIHRoYXQgaWdub3JpbmcgZW5jb2RpbmcgZXJyb3JzIGNhbiBsZWFkIHRvIGRhdGEgbG9zcy4pXG4iCisiU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBjb2RlY3MucmVnaXN0ZXIgZm9yIGEgbGlzdCBvZiB0aGUgcGVybWl0dGVkXG4iCisiZW5jb2RpbmcgZXJyb3Igc3RyaW5ncy5cbiIKKyJcbiIKKyJuZXdsaW5lIGNvbnRyb2xzIGhvdyB1bml2ZXJzYWwgbmV3bGluZXMgd29ya3MgKGl0IG9ubHkgYXBwbGllcyB0byB0ZXh0XG4iCisibW9kZSkuIEl0IGNhbiBiZSBOb25lLCAnJywgJ1xcbicsICdcXHInLCBhbmQgJ1xcclxcbicuICBJdCB3b3JrcyBhc1xuIgorImZvbGxvd3M6XG4iCisiXG4iCisiKiBPbiBpbnB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpc1xuIgorIiAgZW5hYmxlZC4gTGluZXMgaW4gdGhlIGlucHV0IGNhbiBlbmQgaW4gJ1xcbicsICdcXHInLCBvciAnXFxyXFxuJywgYW5kXG4iCisiICB0aGVzZSBhcmUgdHJhbnNsYXRlZCBpbnRvICdcXG4nIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGVcbiIKKyIgIGNhbGxlci4gSWYgaXQgaXMgJycsIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgaXMgZW5hYmxlZCwgYnV0IGxpbmVcbiIKKyIgIGVuZGluZ3MgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLiBJZiBpdCBoYXMgYW55IG9mXG4iCisiICB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBpbnB1dCBsaW5lcyBhcmUgb25seSB0ZXJtaW5hdGVkIGJ5IHRoZSBnaXZlblxuIgorIiAgc3RyaW5nLCBhbmQgdGhlIGxpbmUgZW5kaW5nIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLlxuIgorIlxuIgorIiogT24gb3V0cHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIGFueSAnXFxuJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlXG4iCisiICB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaW5lIHNlcGFyYXRvciwgb3MubGluZXNlcC4gSWZcbiIKKyIgIG5ld2xpbmUgaXMgJycsIG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiBJZiBuZXdsaW5lIGlzIGFueSBvZiB0aGVcbiIKKyIgIG90aGVyIGxlZ2FsIHZhbHVlcywgYW55ICdcXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUgdHJhbnNsYXRlZCB0b1xuIgorIiAgdGhlIGdpdmVuIHN0cmluZy5cbiIKKyJcbiIKKyJJZiBjbG9zZWZkIGlzIEZhbHNlLCB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBrZXB0IG9wZW5cbiIKKyJ3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gVGhpcyBkb2VzIG5vdCB3b3JrIHdoZW4gYSBmaWxlIG5hbWUgaXMgZ2l2ZW5cbiIKKyJhbmQgbXVzdCBiZSBUcnVlIGluIHRoYXQgY2FzZS5cbiIKKyJcbiIKKyJvcGVuKCkgcmV0dXJucyBhIGZpbGUgb2JqZWN0IHdob3NlIHR5cGUgZGVwZW5kcyBvbiB0aGUgbW9kZSwgYW5kXG4iCisidGhyb3VnaCB3aGljaCB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVhZGluZyBhbmQgd3JpdGluZ1xuIgorImFyZSBwZXJmb3JtZWQuIFdoZW4gb3BlbigpIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0IG1vZGUgKCd3JyxcbiIKKyIncicsICd3dCcsICdydCcsIGV0Yy4pLCBpdCByZXR1cm5zIGEgVGV4dElPV3JhcHBlci4gV2hlbiB1c2VkIHRvIG9wZW5cbiIKKyJhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSwgdGhlIHJldHVybmVkIGNsYXNzIHZhcmllczogaW4gcmVhZCBiaW5hcnlcbiIKKyJtb2RlLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRSZWFkZXI7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeVxuIgorIm1vZGVzLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRXcml0ZXIsIGFuZCBpbiByZWFkL3dyaXRlIG1vZGUsIGl0IHJldHVybnNcbiIKKyJhIEJ1ZmZlcmVkUmFuZG9tLlxuIgorIlxuIgorIkl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgc3RyaW5nIG9yIGJ5dGVhcnJheSBhcyBhIGZpbGUgZm9yIGJvdGhcbiIKKyJyZWFkaW5nIGFuZCB3cml0aW5nLiBGb3Igc3RyaW5ncyBTdHJpbmdJTyBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZVxuIgorIm9wZW5lZCBpbiBhIHRleHQgbW9kZSwgYW5kIGZvciBieXRlcyBhIEJ5dGVzSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGVcbiIKKyJvcGVuZWQgaW4gYSBiaW5hcnkgbW9kZS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9fb3BlbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgIm1vZGUiLCAiYnVmZmVyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAiZW5jb2RpbmciLCAiZXJyb3JzIiwgIm5ld2xpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICJjbG9zZWZkIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgY2hhciAqbW9kZSA9ICJyIjsKKyAgICBpbnQgYnVmZmVyaW5nID0gLTEsIGNsb3NlZmQgPSAxOworICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTCwgKmVycm9ycyA9IE5VTEwsICpuZXdsaW5lID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpOworCisgICAgaW50IHJlYWRpbmcgPSAwLCB3cml0aW5nID0gMCwgYXBwZW5kaW5nID0gMCwgdXBkYXRpbmcgPSAwOworICAgIGludCB0ZXh0ID0gMCwgYmluYXJ5ID0gMCwgdW5pdmVyc2FsID0gMDsKKworICAgIGNoYXIgcmF3bW9kZVs1XSwgKm07CisgICAgaW50IGxpbmVfYnVmZmVyaW5nLCBpc2F0dHk7CisKKyAgICBQeU9iamVjdCAqcmF3LCAqbW9kZW9iaiA9IE5VTEwsICpidWZmZXIgPSBOVUxMLCAqd3JhcHBlciA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzaXp6emk6b3BlbiIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJm1vZGUsICZidWZmZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY29kaW5nLCAmZXJyb3JzLCAmbmV3bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xvc2VmZCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZSkgJiYKKwkhUHlCeXRlc19DaGVjayhmaWxlKSAmJgorCSFQeU51bWJlcl9DaGVjayhmaWxlKSkgeworICAgICAgICBQeU9iamVjdCAqcmVwciA9IFB5T2JqZWN0X1JlcHIoZmlsZSk7CisgICAgICAgIGlmIChyZXByICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJpbnZhbGlkIGZpbGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocmVwcikpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIERlY29kZSBtb2RlICovCisgICAgZm9yIChpID0gMDsgaSA8IHN0cmxlbihtb2RlKTsgaSsrKSB7CisgICAgICAgIGNoYXIgYyA9IG1vZGVbaV07CisKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgcmVhZGluZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndyc6CisgICAgICAgICAgICB3cml0aW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgIGFwcGVuZGluZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICB1cGRhdGluZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICB0ZXh0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgIGJpbmFyeSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVSc6CisgICAgICAgICAgICB1bml2ZXJzYWwgPSAxOworICAgICAgICAgICAgcmVhZGluZyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9tb2RlOworICAgICAgICB9CisKKyAgICAgICAgLyogYyBtdXN0IG5vdCBiZSBkdXBsaWNhdGVkICovCisgICAgICAgIGlmIChzdHJjaHIobW9kZStpKzEsIGMpKSB7CisgICAgICAgICAgaW52YWxpZF9tb2RlOgorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIG1vZGU6ICclcyciLCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBtID0gcmF3bW9kZTsKKyAgICBpZiAocmVhZGluZykgICAqKG0rKykgPSAncic7CisgICAgaWYgKHdyaXRpbmcpICAgKihtKyspID0gJ3cnOworICAgIGlmIChhcHBlbmRpbmcpICoobSsrKSA9ICdhJzsKKyAgICBpZiAodXBkYXRpbmcpICAqKG0rKykgPSAnKyc7CisgICAgKm0gPSAnXDAnOworCisgICAgLyogUGFyYW1ldGVycyB2YWxpZGF0aW9uICovCisgICAgaWYgKHVuaXZlcnNhbCkgeworICAgICAgICBpZiAod3JpdGluZyB8fCBhcHBlbmRpbmcpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgVSBhbmQgd3JpdGluZyBtb2RlIGF0IG9uY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJlYWRpbmcgPSAxOworICAgIH0KKworICAgIGlmICh0ZXh0ICYmIGJpbmFyeSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBoYXZlIHRleHQgYW5kIGJpbmFyeSBtb2RlIGF0IG9uY2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHJlYWRpbmcgKyB3cml0aW5nICsgYXBwZW5kaW5nID4gMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgZXhhY3RseSBvbmUgb2YgcmVhZC93cml0ZS9hcHBlbmQgbW9kZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYmluYXJ5ICYmIGVuY29kaW5nICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGFuIGVuY29kaW5nIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChiaW5hcnkgJiYgZXJyb3JzICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiYmluYXJ5IG1vZGUgZG9lc24ndCB0YWtlIGFuIGVycm9ycyBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYmluYXJ5ICYmIG5ld2xpbmUgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiaW5hcnkgbW9kZSBkb2Vzbid0IHRha2UgYSBuZXdsaW5lIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgUmF3IGZpbGUgc3RyZWFtICovCisgICAgcmF3ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZQeUZpbGVJT19UeXBlLAorCQkJCSJPc2kiLCBmaWxlLCByYXdtb2RlLCBjbG9zZWZkKTsKKyAgICBpZiAocmF3ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbW9kZW9iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZGUpOworICAgIGlmIChtb2Rlb2JqID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBidWZmZXJpbmcgKi8KKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJhdywgImlzYXR0eSIsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpc2F0dHkgPSBQeUxvbmdfQXNMb25nKHJlcyk7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBpZiAoaXNhdHR5ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChidWZmZXJpbmcgPT0gMSB8fCAoYnVmZmVyaW5nIDwgMCAmJiBpc2F0dHkpKSB7CisgICAgICAgIGJ1ZmZlcmluZyA9IC0xOworICAgICAgICBsaW5lX2J1ZmZlcmluZyA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbGluZV9idWZmZXJpbmcgPSAwOworCisgICAgaWYgKGJ1ZmZlcmluZyA8IDApIHsKKyAgICAgICAgYnVmZmVyaW5nID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMS1NJWkUKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICAgICAgICBsb25nIGZpbGVubzsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJhdywgImZpbGVubyIsIE5VTEwpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGZpbGVubyA9IFB5SW50X0FzTG9uZyhyZXMpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBpZiAoZmlsZW5vID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKGZzdGF0KGZpbGVubywgJnN0KSA+PSAwICYmIHN0LnN0X2Jsa3NpemUgPiAxKQorICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyA9IHN0LnN0X2Jsa3NpemU7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBpZiAoYnVmZmVyaW5nIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGJ1ZmZlcmluZyBzaXplIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgLyogaWYgbm90IGJ1ZmZlcmluZywgcmV0dXJucyB0aGUgcmF3IGZpbGUgb2JqZWN0ICovCisgICAgaWYgKGJ1ZmZlcmluZyA9PSAwKSB7CisgICAgICAgIGlmICghYmluYXJ5KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgUHlfREVDUkVGKG1vZGVvYmopOworICAgICAgICByZXR1cm4gcmF3OworICAgIH0KKworICAgIC8qIHdyYXBzIGludG8gYSBidWZmZXJlZCBmaWxlICovCisgICAgeworICAgICAgICBQeU9iamVjdCAqQnVmZmVyZWRfY2xhc3M7CisKKyAgICAgICAgaWYgKHVwZGF0aW5nKQorICAgICAgICAgICAgQnVmZmVyZWRfY2xhc3MgPSAoUHlPYmplY3QgKikmUHlCdWZmZXJlZFJhbmRvbV9UeXBlOworICAgICAgICBlbHNlIGlmICh3cml0aW5nIHx8IGFwcGVuZGluZykKKyAgICAgICAgICAgIEJ1ZmZlcmVkX2NsYXNzID0gKFB5T2JqZWN0ICopJlB5QnVmZmVyZWRXcml0ZXJfVHlwZTsKKyAgICAgICAgZWxzZSBpZiAocmVhZGluZykKKyAgICAgICAgICAgIEJ1ZmZlcmVkX2NsYXNzID0gKFB5T2JqZWN0ICopJlB5QnVmZmVyZWRSZWFkZXJfVHlwZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBtb2RlOiAnJXMnIiwgbW9kZSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKEJ1ZmZlcmVkX2NsYXNzLCAiT2kiLCByYXcsIGJ1ZmZlcmluZyk7CisgICAgfQorICAgIFB5X0NMRUFSKHJhdyk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisKKyAgICAvKiBpZiBiaW5hcnksIHJldHVybnMgdGhlIGJ1ZmZlcmVkIGZpbGUgKi8KKyAgICBpZiAoYmluYXJ5KSB7CisgICAgICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisKKyAgICAvKiB3cmFwcyBpbnRvIGEgVGV4dElPV3JhcHBlciAqLworICAgIHdyYXBwZXIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopJlB5VGV4dElPV3JhcHBlcl9UeXBlLAorCQkJCSAgICAiT3Nzc2kiLAorCQkJCSAgICBidWZmZXIsCisJCQkJICAgIGVuY29kaW5nLCBlcnJvcnMsIG5ld2xpbmUsCisJCQkJICAgIGxpbmVfYnVmZmVyaW5nKTsKKyAgICBQeV9DTEVBUihidWZmZXIpOworICAgIGlmICh3cmFwcGVyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyh3cmFwcGVyLCAibW9kZSIsIG1vZGVvYmopIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9ERUNSRUYobW9kZW9iaik7CisgICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihyYXcpOworICAgIFB5X1hERUNSRUYobW9kZW9iaik7CisgICAgUHlfWERFQ1JFRihidWZmZXIpOworICAgIFB5X1hERUNSRUYod3JhcHBlcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisMCisvKgorICogUHJpdmF0ZSBoZWxwZXJzIGZvciB0aGUgaW8gbW9kdWxlLgorICovCisKK1B5X29mZl90CitQeU51bWJlcl9Bc09mZl90KFB5T2JqZWN0ICppdGVtLCBQeU9iamVjdCAqZXJyKQoreworICAgIFB5X29mZl90IHJlc3VsdDsKKyAgICBQeU9iamVjdCAqcnVuZXJyOworICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5TnVtYmVyX0luZGV4KGl0ZW0pOworICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoUHlJbnRfQ2hlY2sodmFsdWUpKSB7CisgICAgICAgIC8qIFdlIGFzc3VtZSBhIGxvbmcgYWx3YXlzIGZpdHMgaW4gYSBQeV9vZmZfdC4uLiAqLworICAgICAgICByZXN1bHQgPSAoUHlfb2ZmX3QpIFB5SW50X0FTX0xPTkcodmFsdWUpOworICAgICAgICBnb3RvIGZpbmlzaDsKKyAgICB9CisKKyAgICAvKiBXZSdyZSBkb25lIGlmIFB5TG9uZ19Bc1NzaXplX3QoKSByZXR1cm5zIHdpdGhvdXQgZXJyb3IuICovCisgICAgcmVzdWx0ID0gUHlMb25nX0FzT2ZmX3QodmFsdWUpOworICAgIGlmIChyZXN1bHQgIT0gLTEgfHwgIShydW5lcnIgPSBQeUVycl9PY2N1cnJlZCgpKSkKKyAgICAgICAgZ290byBmaW5pc2g7CisKKyAgICAvKiBFcnJvciBoYW5kbGluZyBjb2RlIC0tIG9ubHkgbWFuYWdlIE92ZXJmbG93RXJyb3IgZGlmZmVyZW50bHkgKi8KKyAgICBpZiAoIVB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhydW5lcnIsIFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICBnb3RvIGZpbmlzaDsKKworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgLyogSWYgbm8gZXJyb3ItaGFuZGxpbmcgZGVzaXJlZCB0aGVuIHRoZSBkZWZhdWx0IGNsaXBwaW5nCisgICAgICAgaXMgc3VmZmljaWVudC4KKyAgICAgKi8KKyAgICBpZiAoIWVycikgeworICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHZhbHVlKSk7CisgICAgICAgIC8qIFdoZXRoZXIgb3Igbm90IGl0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgICAgICAgICB6ZXJvIGlzIGRldGVybWluZWQgYnkgdGhlIHNpZ24gb2Ygb2Jfc2l6ZQorICAgICAgICAqLworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHZhbHVlKSA8IDApCisgICAgICAgICAgICByZXN1bHQgPSBQWV9PRkZfVF9NSU47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IFBZX09GRl9UX01BWDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIE90aGVyd2lzZSByZXBsYWNlIHRoZSBlcnJvciB3aXRoIGNhbGxlcidzIGVycm9yIG9iamVjdC4gKi8KKyAgICAgICAgUHlFcnJfRm9ybWF0KGVyciwKKyAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZml0ICclLjIwMHMnIGludG8gYW4gb2Zmc2V0LXNpemVkIGludGVnZXIiLAorICAgICAgICAgICAgICAgICAgICAgaXRlbS0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgfQorCisgZmluaXNoOgorICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBCYXNpY2FsbHkgdGhlICJuIiBmb3JtYXQgY29kZSB3aXRoIHRoZSBhYmlsaXR5IHRvIHR1cm4gTm9uZSBpbnRvIC0xLiAqLworaW50IAorX1B5SU9fQ29udmVydFNzaXplX3QoUHlPYmplY3QgKm9iaiwgdm9pZCAqcmVzdWx0KSB7CisgICAgUHlfc3NpemVfdCBsaW1pdDsKKyAgICBpZiAob2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgbGltaXQgPSAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlOdW1iZXJfQ2hlY2sob2JqKSkgeworICAgICAgICBsaW1pdCA9IFB5TnVtYmVyX0FzU3NpemVfdChvYmosIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgICAgICBpZiAobGltaXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICooKFB5X3NzaXplX3QgKilyZXN1bHQpID0gbGltaXQ7CisgICAgcmV0dXJuIDE7Cit9CisKKworLyoKKyAqIE1vZHVsZSBkZWZpbml0aW9uCisgKi8KKworUHlPYmplY3QgKl9QeUlPX29zX21vZHVsZSA9IE5VTEw7CitQeU9iamVjdCAqX1B5SU9fbG9jYWxlX21vZHVsZSA9IE5VTEw7CitQeU9iamVjdCAqX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uID0gTlVMTDsKKworc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7CisgICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWlvX29wZW4sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvcGVuX2RvY30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitQeU1PRElOSVRfRlVOQworaW5pdF9pbyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptID0gUHlfSW5pdE1vZHVsZTQoIl9pbyIsIG1vZHVsZV9tZXRob2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2RvYywgTlVMTCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBwdXQgb3MgaW4gdGhlIG1vZHVsZSBzdGF0ZSAqLworICAgIF9QeUlPX29zX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgib3MiKTsKKyAgICBpZiAoX1B5SU9fb3NfbW9kdWxlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKworI2RlZmluZSBBRERfVFlQRSh0eXBlLCBuYW1lKSBcCisgICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApIFwKKyAgICAgICAgZ290byBmYWlsOyBcCisgICAgUHlfSU5DUkVGKHR5cGUpOyBcCisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lLCAoUHlPYmplY3QgKil0eXBlKSA8IDApIHsgIFwKKyAgICAgICAgUHlfREVDUkVGKHR5cGUpOyBcCisgICAgICAgIGdvdG8gZmFpbDsgXAorICAgIH0KKworICAgIC8qIERFRkFVTFRfQlVGRkVSX1NJWkUgKi8KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGQVVMVF9CVUZGRVJfU0laRSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBVbnN1cHBvcnRlZE9wZXJhdGlvbiBpbmhlcml0cyBmcm9tIFZhbHVlRXJyb3IgYW5kIElPRXJyb3IgKi8KKyAgICBfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24gPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oCisgICAgICAgIChQeU9iamVjdCAqKSZQeVR5cGVfVHlwZSwgInMoT08pe30iLAorICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb24iLCBQeUV4Y19WYWx1ZUVycm9yLCBQeUV4Y19JT0Vycm9yKTsKKyAgICBpZiAoX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBQeV9JTkNSRUYoX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJVbnN1cHBvcnRlZE9wZXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24pIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogQmxvY2tpbmdJT0Vycm9yICovCisgICAgX1B5RXhjX0Jsb2NraW5nSU9FcnJvci50cF9iYXNlID0gKFB5VHlwZU9iamVjdCAqKSBQeUV4Y19JT0Vycm9yOworICAgIEFERF9UWVBFKCZfUHlFeGNfQmxvY2tpbmdJT0Vycm9yLCAiQmxvY2tpbmdJT0Vycm9yIik7CisKKyAgICAvKiBDb25jcmV0ZSBiYXNlIHR5cGVzIG9mIHRoZSBJTyBBQkNzLgorICAgICAgICh0aGUgQUJDcyB0aGVtc2VsdmVzIGFyZSBkZWNsYXJlZCB0aHJvdWdoIGluaGVyaXRhbmNlIGluIGlvLnB5KQorICAgICovCisgICAgQUREX1RZUEUoJlB5SU9CYXNlX1R5cGUsICJfSU9CYXNlIik7CisgICAgQUREX1RZUEUoJlB5UmF3SU9CYXNlX1R5cGUsICJfUmF3SU9CYXNlIik7CisgICAgQUREX1RZUEUoJlB5QnVmZmVyZWRJT0Jhc2VfVHlwZSwgIl9CdWZmZXJlZElPQmFzZSIpOworICAgIEFERF9UWVBFKCZQeVRleHRJT0Jhc2VfVHlwZSwgIl9UZXh0SU9CYXNlIik7CisKKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBvZiBjb25jcmV0ZSBJTyBvYmplY3RzLiAqLworICAgIC8qIEZpbGVJTyAqLworICAgIFB5RmlsZUlPX1R5cGUudHBfYmFzZSA9ICZQeVJhd0lPQmFzZV9UeXBlOworICAgIEFERF9UWVBFKCZQeUZpbGVJT19UeXBlLCAiRmlsZUlPIik7CisKKyAgICAvKiBCeXRlc0lPICovCisgICAgUHlCeXRlc0lPX1R5cGUudHBfYmFzZSA9ICZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5Qnl0ZXNJT19UeXBlLCAiQnl0ZXNJTyIpOworCisgICAgLyogU3RyaW5nSU8gKi8KKyAgICBQeVN0cmluZ0lPX1R5cGUudHBfYmFzZSA9ICZQeVRleHRJT0Jhc2VfVHlwZTsKKyAgICBBRERfVFlQRSgmUHlTdHJpbmdJT19UeXBlLCAiU3RyaW5nSU8iKTsKKworICAgIC8qIEJ1ZmZlcmVkUmVhZGVyICovCisgICAgUHlCdWZmZXJlZFJlYWRlcl9UeXBlLnRwX2Jhc2UgPSAmUHlCdWZmZXJlZElPQmFzZV9UeXBlOworICAgIEFERF9UWVBFKCZQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUsICJCdWZmZXJlZFJlYWRlciIpOworCisgICAgLyogQnVmZmVyZWRXcml0ZXIgKi8KKyAgICBQeUJ1ZmZlcmVkV3JpdGVyX1R5cGUudHBfYmFzZSA9ICZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5QnVmZmVyZWRXcml0ZXJfVHlwZSwgIkJ1ZmZlcmVkV3JpdGVyIik7CisKKyAgICAvKiBCdWZmZXJlZFJXUGFpciAqLworICAgIFB5QnVmZmVyZWRSV1BhaXJfVHlwZS50cF9iYXNlID0gJlB5QnVmZmVyZWRJT0Jhc2VfVHlwZTsKKyAgICBBRERfVFlQRSgmUHlCdWZmZXJlZFJXUGFpcl9UeXBlLCAiQnVmZmVyZWRSV1BhaXIiKTsKKworICAgIC8qIEJ1ZmZlcmVkUmFuZG9tICovCisgICAgUHlCdWZmZXJlZFJhbmRvbV9UeXBlLnRwX2Jhc2UgPSAmUHlCdWZmZXJlZElPQmFzZV9UeXBlOworICAgIEFERF9UWVBFKCZQeUJ1ZmZlcmVkUmFuZG9tX1R5cGUsICJCdWZmZXJlZFJhbmRvbSIpOworCisgICAgLyogVGV4dElPV3JhcHBlciAqLworICAgIFB5VGV4dElPV3JhcHBlcl9UeXBlLnRwX2Jhc2UgPSAmUHlUZXh0SU9CYXNlX1R5cGU7CisgICAgQUREX1RZUEUoJlB5VGV4dElPV3JhcHBlcl9UeXBlLCAiVGV4dElPV3JhcHBlciIpOworCisgICAgLyogSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciAqLworICAgIEFERF9UWVBFKCZQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfVHlwZSwgIkluY3JlbWVudGFsTmV3bGluZURlY29kZXIiKTsKKworICAgIC8qIEludGVybmVkIHN0cmluZ3MgKi8KKyAgICBpZiAoIShfUHlJT19zdHJfY2xvc2UgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJjbG9zZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9jbG9zZWQgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJjbG9zZWQiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfZGVjb2RlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZGVjb2RlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX2VuY29kZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImVuY29kZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9maWxlbm8gPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJmaWxlbm8iKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfZmx1c2ggPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJmbHVzaCIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9nZXRzdGF0ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImdldHN0YXRlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX2lzYXR0eSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImlzYXR0eSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9uZXdsaW5lcyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIm5ld2xpbmVzIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX25sID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiXG4iKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfcmVhZCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInJlYWQiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfcmVhZDEgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJyZWFkMSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9yZWFkYWJsZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInJlYWRhYmxlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3JlYWRpbnRvID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygicmVhZGludG8iKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfcmVhZGxpbmUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJyZWFkbGluZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl9yZXNldCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInJlc2V0IikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3NlZWsgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJzZWVrIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3NlZWthYmxlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygic2Vla2FibGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfc2V0c3RhdGUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJzZXRzdGF0ZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl90ZWxsID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygidGVsbCIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmICghKF9QeUlPX3N0cl90cnVuY2F0ZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoInRydW5jYXRlIikpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9fc3RyX3dyaXRlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygid3JpdGUiKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19zdHJfd3JpdGFibGUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ3cml0YWJsZSIpKSkKKyAgICAgICAgZ290byBmYWlsOworICAgIAorICAgIGlmICghKF9QeUlPX2VtcHR5X3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKSkpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIShfUHlJT19lbXB0eV9ieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCkpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCEoX1B5SU9femVybyA9IFB5TG9uZ19Gcm9tTG9uZygwTCkpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXR1cm47CisKKyAgZmFpbDoKKyAgICBQeV9DTEVBUihfUHlJT19vc19tb2R1bGUpOworICAgIFB5X0NMRUFSKF9QeUlPX3Vuc3VwcG9ydGVkX29wZXJhdGlvbik7CisgICAgUHlfREVDUkVGKG0pOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmggYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE1MzkxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBEZWNsYXJhdGlvbnMgc2hhcmVkIGJldHdlZW4gdGhlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgaW8gbW9kdWxlCisgKi8KKworLyogQUJDcyAqLworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUlPQmFzZV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeVJhd0lPQmFzZV9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5VGV4dElPQmFzZV9UeXBlOworCisvKiBDb25jcmV0ZSBjbGFzc2VzICovCitleHRlcm4gUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5Qnl0ZXNJT19UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeVN0cmluZ0lPX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRSZWFkZXJfVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFdyaXRlcl9UeXBlOworZXh0ZXJuIFB5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkUldQYWlyX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRSYW5kb21fVHlwZTsKK2V4dGVybiBQeVR5cGVPYmplY3QgUHlUZXh0SU9XcmFwcGVyX1R5cGU7CitleHRlcm4gUHlUeXBlT2JqZWN0IFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlOworCisKK2V4dGVybiBpbnQgX1B5SU9fQ29udmVydFNzaXplX3QoUHlPYmplY3QgKiwgdm9pZCAqKTsKKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGFzIE1FVEhfTk9BUkdTIG1ldGhvZHMsIGFyZSBub3JtYWxseSBjYWxsZWQKKyAqIHdpdGggYXJncz1OVUxMLCBhbmQgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZS4KKyAqIEJVVCB3aGVuIGFyZ3M9UHlfVHJ1ZSBpcyBwYXNzZWQsIHRoZXkgcmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlLgorICovCitleHRlcm4gUHlPYmplY3QqIF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOworZXh0ZXJuIFB5T2JqZWN0KiBfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKK2V4dGVybiBQeU9iamVjdCogX1B5SU9CYXNlX2NoZWNrX3NlZWthYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitleHRlcm4gUHlPYmplY3QqIF9QeUlPQmFzZV9jaGVja19jbG9zZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKKworLyogSGVscGVyIGZvciBmaW5hbGl6YXRpb24uCisgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV2aXZlIGFuIG9iamVjdCByZWFkeSB0byBiZSBkZWFsbG9jYXRlZCBhbmQgdHJ5IHRvCisgICBjbG9zZSgpIGl0LiBJdCByZXR1cm5zIDAgaWYgdGhlIG9iamVjdCBjYW4gYmUgZGVzdHJveWVkLCBvciAtMSBpZiBpdAorICAgaXMgYWxpdmUgYWdhaW4uICovCitleHRlcm4gaW50IF9QeUlPQmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZik7CisKKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gRmlsZUlPIG9iamVjdCBpcyBjbG9zZWQuCisgICBEb2Vzbid0IGNoZWNrIHRoZSBhcmd1bWVudCB0eXBlLCBzbyBiZSBjYXJlZnVsISAqLworZXh0ZXJuIGludCBfUHlGaWxlSU9fY2xvc2VkKFB5T2JqZWN0ICpzZWxmKTsKKworLyogU2hvcnRjdXQgdG8gdGhlIGNvcmUgb2YgdGhlIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIuZGVjb2RlIG1ldGhvZCAqLworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZSgKKyAgICBQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmlucHV0LCBpbnQgZmluYWwpOworCisvKiBGaW5kcyB0aGUgZmlyc3QgbGluZSBlbmRpbmcgYmV0d2VlbiBgc3RhcnRgIGFuZCBgZW5kYC4KKyAgIElmIGZvdW5kLCByZXR1cm5zIHRoZSBpbmRleCBhZnRlciB0aGUgbGluZSBlbmRpbmcgYW5kIGRvZXNuJ3QgdG91Y2gKKyAgIGAqY29uc3VtZWRgLgorICAgSWYgbm90IGZvdW5kLCByZXR1cm5zIC0xIGFuZCBzZXRzIGAqY29uc3VtZWRgIHRvIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycworICAgd2hpY2ggY2FuIGJlIHNhZmVseSBwdXQgYXNpZGUgdW50aWwgYW5vdGhlciBzZWFyY2guCisgICAKKyAgIE5PVEU6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBgZW5kYCBtdXN0IHBvaW50IHRvIGEgTlVMIGNoYXJhY3RlciAoJ1wwJykuIAorICAgT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gd2lsbCBzY2FuIGZ1cnRoZXIgYW5kIHJldHVybiBnYXJiYWdlLiAqLworZXh0ZXJuIFB5X3NzaXplX3QgX1B5SU9fZmluZF9saW5lX2VuZGluZygKKyAgICBpbnQgdHJhbnNsYXRlZCwgaW50IHVuaXZlcnNhbCwgUHlPYmplY3QgKnJlYWRubCwKKyAgICBQeV9VTklDT0RFICpzdGFydCwgUHlfVU5JQ09ERSAqZW5kLCBQeV9zc2l6ZV90ICpjb25zdW1lZCk7CisKKworI2RlZmluZSBERUZBVUxUX0JVRkZFUl9TSVpFICg4ICogMTAyNCkgIC8qIGJ5dGVzICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIFB5RXhjZXB0aW9uX0hFQUQgaW4gMy54ICovCisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICphcmdzOworICAgIFB5T2JqZWN0ICptZXNzYWdlOworCisgICAgUHlPYmplY3QgKm15ZXJybm87CisgICAgUHlPYmplY3QgKnN0cmVycm9yOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsgLyogTm90IHVzZWQsIGJ1dCBwYXJ0IG9mIHRoZSBJT0Vycm9yIG9iamVjdCAqLworICAgIFB5X3NzaXplX3Qgd3JpdHRlbjsKK30gUHlCbG9ja2luZ0lPRXJyb3JPYmplY3Q7CitQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX0Jsb2NraW5nSU9FcnJvcjsKKworLyoKKyAqIE9mZnNldCB0eXBlIGZvciBwb3NpdGlvbmluZy4KKyAqLworCisvKiBQcmludGluZyBhIHZhcmlhYmxlIG9mIHR5cGUgb2ZmX3QgKHdpdGggZS5nLiwgUHlTdHJpbmdfRnJvbUZvcm1hdCkKKyAgIGNvcnJlY3RseSBhbmQgd2l0aG91dCBwcm9kdWNpbmcgY29tcGlsZXIgd2FybmluZ3MgaXMgc3VycHJpc2luZ2x5IHBhaW5mdWwuCisgICBXZSBpZGVudGlmeSBhbiBpbnRlZ2VyIHR5cGUgd2hvc2Ugc2l6ZSBtYXRjaGVzIG9mZl90IGFuZCB0aGVuOiAoMSkgY2FzdCB0aGUKKyAgIG9mZl90IHRvIHRoYXQgaW50ZWdlciB0eXBlIGFuZCAoMikgdXNlIHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9uCisgICBzcGVjaWZpY2F0aW9uLiAgVGhlIGNhc3QgaXMgbmVjZXNzYXJ5OiBnY2MgY29tcGxhaW5zIGFib3V0IGZvcm1hdHRpbmcgYQorICAgbG9uZyB3aXRoICIlbGxkIiBldmVuIHdoZW4gYm90aCBsb25nIGFuZCBsb25nIGxvbmcgaGF2ZSB0aGUgc2FtZQorICAgcHJlY2lzaW9uLiAqLworCisjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorCisvKiBXaW5kb3dzIHVzZXMgbG9uZyBsb25nIGZvciBvZmZzZXRzICovCit0eXBlZGVmIFBZX0xPTkdfTE9ORyBQeV9vZmZfdDsKKyMgZGVmaW5lIFB5TG9uZ19Bc09mZl90ICAgICBQeUxvbmdfQXNMb25nTG9uZworIyBkZWZpbmUgUHlMb25nX0Zyb21PZmZfdCAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyMgZGVmaW5lIFBZX09GRl9UX01BWCAgICAgICBQWV9MTE9OR19NQVgKKyMgZGVmaW5lIFBZX09GRl9UX01JTiAgICAgICBQWV9MTE9OR19NSU4KKyMgZGVmaW5lIFBZX09GRl9UX0NPTVBBVCAgICBQWV9MT05HX0xPTkcgLyogdHlwZSBjb21wYXRpYmxlIHdpdGggb2ZmX3QgKi8KKyMgZGVmaW5lIFBZX1BSSWRPRkYgICAgICAgICAibGxkIiAgICAgICAgLyogZm9ybWF0IHRvIHVzZSBmb3IgdGhhdCB0eXBlICovCisKKyNlbHNlCisKKy8qIE90aGVyIHBsYXRmb3JtcyB1c2Ugb2ZmX3QgKi8KK3R5cGVkZWYgb2ZmX3QgUHlfb2ZmX3Q7CisjaWYgKFNJWkVPRl9PRkZfVCA9PSBTSVpFT0ZfU0laRV9UKQorIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc1NzaXplX3QKKyMgZGVmaW5lIFB5TG9uZ19Gcm9tT2ZmX3QgICBQeUxvbmdfRnJvbVNzaXplX3QKKyMgZGVmaW5lIFBZX09GRl9UX01BWCAgICAgICBQWV9TU0laRV9UX01BWAorIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIFBZX1NTSVpFX1RfTUlOCisjIGRlZmluZSBQWV9PRkZfVF9DT01QQVQgICAgUHlfc3NpemVfdAorIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJ6ZCIKKyNlbGlmIChIQVZFX0xPTkdfTE9ORyAmJiBTSVpFT0ZfT0ZGX1QgPT0gU0laRU9GX0xPTkdfTE9ORykKKyMgZGVmaW5lIFB5TG9uZ19Bc09mZl90ICAgICBQeUxvbmdfQXNMb25nTG9uZworIyBkZWZpbmUgUHlMb25nX0Zyb21PZmZfdCAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyMgZGVmaW5lIFBZX09GRl9UX01BWCAgICAgICBQWV9MTE9OR19NQVgKKyMgZGVmaW5lIFBZX09GRl9UX01JTiAgICAgICBQWV9MTE9OR19NSU4KKyMgZGVmaW5lIFBZX09GRl9UX0NPTVBBVCAgICBQWV9MT05HX0xPTkcKKyMgZGVmaW5lIFBZX1BSSWRPRkYgICAgICAgICAibGxkIgorI2VsaWYgKFNJWkVPRl9PRkZfVCA9PSBTSVpFT0ZfTE9ORykKKyMgZGVmaW5lIFB5TG9uZ19Bc09mZl90ICAgICBQeUxvbmdfQXNMb25nCisjIGRlZmluZSBQeUxvbmdfRnJvbU9mZl90ICAgUHlMb25nX0Zyb21Mb25nCisjIGRlZmluZSBQWV9PRkZfVF9NQVggICAgICAgTE9OR19NQVgKKyMgZGVmaW5lIFBZX09GRl9UX01JTiAgICAgICBMT05HX01JTgorIyBkZWZpbmUgUFlfT0ZGX1RfQ09NUEFUICAgIGxvbmcKKyMgZGVmaW5lIFBZX1BSSWRPRkYgICAgICAgICAibGQiCisjZWxzZQorIyBlcnJvciBvZmZfdCBkb2VzIG5vdCBtYXRjaCBlaXRoZXIgc2l6ZV90LCBsb25nLCBvciBsb25nIGxvbmchCisjZW5kaWYKKworI2VuZGlmCisKK2V4dGVybiBQeV9vZmZfdCBQeU51bWJlcl9Bc09mZl90KFB5T2JqZWN0ICppdGVtLCBQeU9iamVjdCAqZXJyKTsKKworLyogSW1wbGVtZW50YXRpb24gZGV0YWlscyAqLworCitleHRlcm4gUHlPYmplY3QgKl9QeUlPX29zX21vZHVsZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fbG9jYWxlX21vZHVsZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uOworCitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlZDsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2RlY29kZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2VuY29kZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2ZpbGVubzsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2ZsdXNoOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZ2V0c3RhdGU7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9pc2F0dHk7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9uZXdsaW5lczsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX25sOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfcmVhZDsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWQxOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfcmVhZGFibGU7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9yZWFkaW50bzsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3JlYWRsaW5lOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfcmVzZXQ7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9zZWVrOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfc2Vla2FibGU7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9zZXRzdGF0ZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3RlbGw7CitleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl90cnVuY2F0ZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX3dyaXRhYmxlOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfd3JpdGU7CisKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fZW1wdHlfc3RyOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19lbXB0eV9ieXRlczsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9femVybzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE2YTkzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCkBAIC0wLDAgKzEsMjM4OSBAQAorLyoKKyAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJlZCBJL08gYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgorICAgIAorICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBCdWZmZXJlZElPQmFzZSwgQnVmZmVyZWRSZWFkZXIsIEJ1ZmZlcmVkV3JpdGVyLAorICAgIEJ1ZmZlcmVkUmFuZG9tLgorICAgIAorICAgIFdyaXR0ZW4gYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMgYW5kIEFudG9pbmUgUGl0cm91CisqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKyNpbmNsdWRlICJweXRocmVhZC5oIgorI2luY2x1ZGUgIl9pb21vZHVsZS5oIgorCisvKgorICogQnVmZmVyZWRJT0Jhc2UgY2xhc3MsIGluaGVyaXRzIGZyb20gSU9CYXNlLgorICovCitQeURvY19TVFJWQVIoYnVmZmVyZWRpb2Jhc2VfZG9jLAorICAgICJCYXNlIGNsYXNzIGZvciBidWZmZXJlZCBJTyBvYmplY3RzLlxuIgorICAgICJcbiIKKyAgICAiVGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIFJhd0lPQmFzZSBpcyB0aGF0IHRoZSByZWFkKCkgbWV0aG9kXG4iCisgICAgInN1cHBvcnRzIG9taXR0aW5nIHRoZSBzaXplIGFyZ3VtZW50LCBhbmQgZG9lcyBub3QgaGF2ZSBhIGRlZmF1bHRcbiIKKyAgICAiaW1wbGVtZW50YXRpb24gdGhhdCBkZWZlcnMgdG8gcmVhZGludG8oKS5cbiIKKyAgICAiXG4iCisgICAgIkluIGFkZGl0aW9uLCByZWFkKCksIHJlYWRpbnRvKCkgYW5kIHdyaXRlKCkgbWF5IHJhaXNlXG4iCisgICAgIkJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluIG5vbi1ibG9ja2luZ1xuIgorICAgICJtb2RlIGFuZCBub3QgcmVhZHk7IHVubGlrZSB0aGVpciByYXcgY291bnRlcnBhcnRzLCB0aGV5IHdpbGwgbmV2ZXJcbiIKKyAgICAicmV0dXJuIE5vbmUuXG4iCisgICAgIlxuIgorICAgICJBIHR5cGljYWwgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBpbmhlcml0IGZyb20gYSBSYXdJT0Jhc2VcbiIKKyAgICAiaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRpb2Jhc2VfcmVhZGludG8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlPYmplY3QgKmRhdGE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIncqOnJlYWRpbnRvIiwgJmJ1ZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZiwgInJlYWQiLCAibiIsIGJ1Zi5sZW4pOworICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGF0YSkpIHsKKyAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVhZCgpIHNob3VsZCByZXR1cm4gYnl0ZXMiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBsZW4gPSBQeV9TSVpFKGRhdGEpOworICAgIG1lbWNweShidWYuYnVmLCBQeUJ5dGVzX0FTX1NUUklORyhkYXRhKSwgbGVuKTsKKworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgUHlfREVDUkVGKGRhdGEpOworCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZGlvYmFzZV91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIFB5RXJyX1NldFN0cmluZyhfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIoYnVmZmVyZWRpb2Jhc2VfZGV0YWNoX2RvYywKKyAgICAiRGlzY29ubmVjdCB0aGlzIGJ1ZmZlciBmcm9tIGl0cyB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gYW5kIHJldHVybiBpdC5cbiIKKyAgICAiXG4iCisgICAgIkFmdGVyIHRoZSByYXcgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgYnVmZmVyIGlzIGluIGFuIHVudXNhYmxlXG4iCisgICAgInN0YXRlLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZGlvYmFzZV9kZXRhY2goUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKCJkZXRhY2giKTsKK30KKworUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkaW9iYXNlX3JlYWRfZG9jLAorICAgICJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcy5cbiIKKyAgICAiXG4iCisgICAgIklmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kXG4iCisgICAgInJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLlxuIgorICAgICJcbiIKKyAgICAiSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpc1xuIgorICAgICJub3QgJ2ludGVyYWN0aXZlJywgbXVsdGlwbGUgcmF3IHJlYWRzIG1heSBiZSBpc3N1ZWQgdG8gc2F0aXNmeVxuIgorICAgICJ0aGUgYnl0ZSBjb3VudCAodW5sZXNzIEVPRiBpcyByZWFjaGVkIGZpcnN0KS4gIEJ1dCBmb3JcbiIKKyAgICAiaW50ZXJhY3RpdmUgcmF3IHN0cmVhbXMgKGFzIHdlbGwgYXMgc29ja2V0cyBhbmQgcGlwZXMpLCBhdCBtb3N0XG4iCisgICAgIm9uZSByYXcgcmVhZCB3aWxsIGJlIGlzc3VlZCwgYW5kIGEgc2hvcnQgcmVzdWx0IGRvZXMgbm90IGltcGx5XG4iCisgICAgInRoYXQgRU9GIGlzIGltbWluZW50LlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBhbiBlbXB0eSBieXRlcyBvYmplY3Qgb24gRU9GLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBOb25lIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gd2FzIG9wZW4gaW4gbm9uLWJsb2NraW5nXG4iCisgICAgIm1vZGUgYW5kIG5vIGRhdGEgaXMgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkaW9iYXNlX3JlYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBidWZmZXJlZGlvYmFzZV91bnN1cHBvcnRlZCgicmVhZCIpOworfQorCitQeURvY19TVFJWQVIoYnVmZmVyZWRpb2Jhc2VfcmVhZDFfZG9jLAorICAgICJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgY2FsbFxuIgorICAgICJ0byB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtLiBBIHNob3J0IHJlc3VsdCBkb2VzIG5vdCBpbXBseVxuIgorICAgICJ0aGF0IEVPRiBpcyBpbW1pbmVudC5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybnMgYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IG9uIEVPRi5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRpb2Jhc2VfcmVhZDEoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBidWZmZXJlZGlvYmFzZV91bnN1cHBvcnRlZCgicmVhZDEiKTsKK30KKworUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkaW9iYXNlX3dyaXRlX2RvYywKKyAgICAiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIGlzIG5ldmVyIGxlc3MgdGhhblxuIgorICAgICJsZW4oYikuXG4iCisgICAgIlxuIgorICAgICJSYWlzZXMgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgdGhlXG4iCisgICAgInVuZGVybHlpbmcgcmF3IHN0cmVhbSBjYW5ub3QgYWNjZXB0IG1vcmUgZGF0YSBhdCB0aGUgbW9tZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZGlvYmFzZV93cml0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpOworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZGlvYmFzZV9tZXRob2RzW10gPSB7CisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRpb2Jhc2VfZGV0YWNoLCBNRVRIX05PQVJHUywgYnVmZmVyZWRpb2Jhc2VfZGV0YWNoX2RvY30sCisgICAgeyJyZWFkIiwgYnVmZmVyZWRpb2Jhc2VfcmVhZCwgTUVUSF9WQVJBUkdTLCBidWZmZXJlZGlvYmFzZV9yZWFkX2RvY30sCisgICAgeyJyZWFkMSIsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxLCBNRVRIX1ZBUkFSR1MsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxX2RvY30sCisgICAgeyJyZWFkaW50byIsIGJ1ZmZlcmVkaW9iYXNlX3JlYWRpbnRvLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAorICAgIHsid3JpdGUiLCBidWZmZXJlZGlvYmFzZV93cml0ZSwgTUVUSF9WQVJBUkdTLCBidWZmZXJlZGlvYmFzZV93cml0ZV9kb2N9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRJT0Jhc2VfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLl9CdWZmZXJlZElPQmFzZSIsICAgICAgLyp0cF9uYW1lKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgYnVmZmVyZWRpb2Jhc2VfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgYnVmZmVyZWRpb2Jhc2VfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAmUHlJT0Jhc2VfVHlwZSwgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorCisgICAgUHlPYmplY3QgKnJhdzsKKyAgICBpbnQgb2s7ICAgIC8qIEluaXRpYWxpemVkPyAqLworICAgIGludCBkZXRhY2hlZDsKKyAgICBpbnQgcmVhZGFibGU7CisgICAgaW50IHdyaXRhYmxlOworICAgIAorICAgIC8qIFRydWUgaWYgdGhpcyBpcyBhIHZhbmlsbGEgQnVmZmVyZWQgb2JqZWN0IChyYXRoZXIgdGhhbiBhIHVzZXIgZGVyaXZlZAorICAgICAgIGNsYXNzKSAqYW5kKiB0aGUgcmF3IHN0cmVhbSBpcyBhIHZhbmlsbGEgRmlsZUlPIG9iamVjdC4gKi8KKyAgICBpbnQgZmFzdF9jbG9zZWRfY2hlY2tzOworCisgICAgLyogQWJzb2x1dGUgcG9zaXRpb24gaW5zaWRlIHRoZSByYXcgc3RyZWFtICgtMSBpZiB1bmtub3duKS4gKi8KKyAgICBQeV9vZmZfdCBhYnNfcG9zOworCisgICAgLyogQSBzdGF0aWMgYnVmZmVyIG9mIHNpemUgYGJ1ZmZlcl9zaXplYCAqLworICAgIGNoYXIgKmJ1ZmZlcjsKKyAgICAvKiBDdXJyZW50IGxvZ2ljYWwgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlci4gKi8KKyAgICBQeV9vZmZfdCBwb3M7CisgICAgLyogUG9zaXRpb24gb2YgdGhlIHJhdyBzdHJlYW0gaW4gdGhlIGJ1ZmZlci4gKi8KKyAgICBQeV9vZmZfdCByYXdfcG9zOworCisgICAgLyogSnVzdCBhZnRlciB0aGUgbGFzdCBidWZmZXJlZCBieXRlIGluIHRoZSBidWZmZXIsIG9yIC0xIGlmIHRoZSBidWZmZXIKKyAgICAgICBpc24ndCByZWFkeSBmb3IgcmVhZGluZy4gKi8KKyAgICBQeV9vZmZfdCByZWFkX2VuZDsKKworICAgIC8qIEp1c3QgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSBhY3R1YWxseSB3cml0dGVuICovCisgICAgUHlfb2ZmX3Qgd3JpdGVfcG9zOworICAgIC8qIEp1c3QgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSB3YWl0aW5nIHRvIGJlIHdyaXR0ZW4sIG9yIC0xIGlmIHRoZSBidWZmZXIKKyAgICAgICBpc24ndCByZWFkeSBmb3Igd3JpdGluZy4gKi8KKyAgICBQeV9vZmZfdCB3cml0ZV9lbmQ7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrOworICAgIHZvbGF0aWxlIGxvbmcgb3duZXI7CisjZW5kaWYKKworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemU7CisgICAgUHlfc3NpemVfdCBidWZmZXJfbWFzazsKKworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKK30gYnVmZmVyZWQ7CisKKy8qCisgICAgSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgCisgICAgKiBCdWZmZXJlZFJlYWRlciwgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tIHRyeSB0byBzaGFyZSBtb3N0CisgICAgICBtZXRob2RzICh0aGlzIGlzIGhlbHBlZCBieSB0aGUgbWVtYmVycyBgcmVhZGFibGVgIGFuZCBgd3JpdGFibGVgLCB3aGljaAorICAgICAgYXJlIGluaXRpYWxpemVkIGluIHRoZSByZXNwZWN0aXZlIGNvbnN0cnVjdG9ycykKKyAgICAqIFRoZXkgYWxzbyBzaGFyZSBhIHNpbmdsZSBidWZmZXIgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIFRoaXMgZW5hYmxlcworICAgICAgaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB3aXRob3V0IGZsdXNoaW5nLiBJdCBhbHNvIG1ha2VzIHRoZSBsb2dpYworICAgICAgYSBiaXQgdHJpY2tpZXIgdG8gZ2V0IHJpZ2h0LgorICAgICogVGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSByYXcgc3RyZWFtIGlzIGNhY2hlZCwgaWYgcG9zc2libGUsIGluIHRoZQorICAgICAgYGFic19wb3NgIG1lbWJlci4gSXQgbXVzdCBiZSB1cGRhdGVkIGV2ZXJ5IHRpbWUgYW4gb3BlcmF0aW9uIGlzIGRvbmUKKyAgICAgIG9uIHRoZSByYXcgc3RyZWFtLiBJZiBub3Qgc3VyZSwgaXQgY2FuIGJlIHJlaW5pdGlhbGl6ZWQgYnkgY2FsbGluZworICAgICAgX2J1ZmZlcmVkX3Jhd190ZWxsKCksIHdoaWNoIHF1ZXJpZXMgdGhlIHJhdyBzdHJlYW0gKF9idWZmZXJlZF9yYXdfc2VlaygpCisgICAgICBhbHNvIGRvZXMgaXQpLiBUbyByZWFkIGl0LCB1c2UgUkFXX1RFTEwoKS4KKyAgICAqIFRocmVlIGhlbHBlcnMsIF9idWZmZXJlZHJlYWRlcl9yYXdfcmVhZCwgX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZSBhbmQKKyAgICAgIF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZCBkbyBhIGxvdCBvZiB1c2VmdWwgaG91c2VrZWVwaW5nLgorCisgICAgTk9URTogd2Ugc2hvdWxkIHRyeSB0byBtYWludGFpbiBibG9jayBhbGlnbm1lbnQgb2YgcmVhZHMgYW5kIHdyaXRlcyB0byB0aGUKKyAgICByYXcgc3RyZWFtIChhY2NvcmRpbmcgdG8gdGhlIGJ1ZmZlciBzaXplKSwgYnV0IGZvciBub3cgaXQgaXMgb25seSBkb25lCisgICAgaW4gcmVhZCgpIGFuZCBmcmllbmRzLgorICAgIAorKi8KKworLyogVGhlc2UgbWFjcm9zIHByb3RlY3QgdGhlIGJ1ZmZlcmVkIG9iamVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4gKi8KKworI2lmZGVmIFdJVEhfVEhSRUFECisKK3N0YXRpYyBpbnQKK19lbnRlcl9idWZmZXJlZF9idXN5KGJ1ZmZlcmVkICpzZWxmKQoreworICAgIGlmIChzZWxmLT5vd25lciA9PSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpIHsKKyAgICAgICAgUHlPYmplY3QgKnIgPSBQeU9iamVjdF9SZXByKChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICAgICAgaWYgKHIgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVlbnRyYW50IGNhbGwgaW5zaWRlICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocikpOworICAgICAgICAgICAgUHlfREVDUkVGKHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPmxvY2ssIDEpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgRU5URVJfQlVGRkVSRUQoc2VsZikgXAorICAgICggKFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrLCAwKSA/IFwKKyAgICAgICAxIDogX2VudGVyX2J1ZmZlcmVkX2J1c3koc2VsZikpIFwKKyAgICAgJiYgKHNlbGYtPm93bmVyID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLCAxKSApCisKKyNkZWZpbmUgTEVBVkVfQlVGRkVSRUQoc2VsZikgXAorICAgIGRvIHsgXAorICAgICAgICBzZWxmLT5vd25lciA9IDA7IFwKKyAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPmxvY2spOyBcCisgICAgfSB3aGlsZSgwKTsKKworI2Vsc2UKKyNkZWZpbmUgRU5URVJfQlVGRkVSRUQoc2VsZikgMQorI2RlZmluZSBMRUFWRV9CVUZGRVJFRChzZWxmKQorI2VuZGlmCisKKyNkZWZpbmUgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikgXAorICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKKyAgICAgICAgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICJyYXcgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgIH0KKworI2RlZmluZSBDSEVDS19JTklUSUFMSVpFRF9JTlQoc2VsZikgXAorICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKKyAgICAgICAgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICJyYXcgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gLTE7IFwKKyAgICB9CisKKyNkZWZpbmUgSVNfQ0xPU0VEKHNlbGYpIFwKKyAgICAoc2VsZi0+ZmFzdF9jbG9zZWRfY2hlY2tzIFwKKyAgICAgPyBfUHlGaWxlSU9fY2xvc2VkKHNlbGYtPnJhdykgXAorICAgICA6IGJ1ZmZlcmVkX2Nsb3NlZChzZWxmKSkKKworI2RlZmluZSBDSEVDS19DTE9TRUQoc2VsZiwgZXJyb3JfbXNnKSBcCisgICAgaWYgKElTX0NMT1NFRChzZWxmKSkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBlcnJvcl9tc2cpOyBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisKKyNkZWZpbmUgVkFMSURfUkVBRF9CVUZGRVIoc2VsZikgXAorICAgIChzZWxmLT5yZWFkYWJsZSAmJiBzZWxmLT5yZWFkX2VuZCAhPSAtMSkKKworI2RlZmluZSBWQUxJRF9XUklURV9CVUZGRVIoc2VsZikgXAorICAgIChzZWxmLT53cml0YWJsZSAmJiBzZWxmLT53cml0ZV9lbmQgIT0gLTEpCisKKyNkZWZpbmUgQURKVVNUX1BPU0lUSU9OKHNlbGYsIF9uZXdfcG9zKSBcCisgICAgZG8geyBcCisgICAgICAgIHNlbGYtPnBvcyA9IF9uZXdfcG9zOyBcCisgICAgICAgIGlmIChWQUxJRF9SRUFEX0JVRkZFUihzZWxmKSAmJiBzZWxmLT5yZWFkX2VuZCA8IHNlbGYtPnBvcykgXAorICAgICAgICAgICAgc2VsZi0+cmVhZF9lbmQgPSBzZWxmLT5wb3M7IFwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgUkVBREFIRUFEKHNlbGYpIFwKKyAgICAoKHNlbGYtPnJlYWRhYmxlICYmIFZBTElEX1JFQURfQlVGRkVSKHNlbGYpKSBcCisgICAgICAgID8gKHNlbGYtPnJlYWRfZW5kIC0gc2VsZi0+cG9zKSA6IDApCisKKyNkZWZpbmUgUkFXX09GRlNFVChzZWxmKSBcCisgICAgKCgoVkFMSURfUkVBRF9CVUZGRVIoc2VsZikgfHwgVkFMSURfV1JJVEVfQlVGRkVSKHNlbGYpKSBcCisgICAgICAgICYmIHNlbGYtPnJhd19wb3MgPj0gMCkgPyBzZWxmLT5yYXdfcG9zIC0gc2VsZi0+cG9zIDogMCkKKworI2RlZmluZSBSQVdfVEVMTChzZWxmKSBcCisgICAgKHNlbGYtPmFic19wb3MgIT0gLTEgPyBzZWxmLT5hYnNfcG9zIDogX2J1ZmZlcmVkX3Jhd190ZWxsKHNlbGYpKQorCisjZGVmaW5lIE1JTlVTX0xBU1RfQkxPQ0soc2VsZiwgc2l6ZSkgXAorICAgIChzZWxmLT5idWZmZXJfbWFzayA/IFwKKyAgICAgICAgKHNpemUgJiB+c2VsZi0+YnVmZmVyX21hc2spIDogXAorICAgICAgICAoc2VsZi0+YnVmZmVyX3NpemUgKiAoc2l6ZSAvIHNlbGYtPmJ1ZmZlcl9zaXplKSkpCisKKworc3RhdGljIHZvaWQKK2J1ZmZlcmVkX2RlYWxsb2MoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgICAgICByZXR1cm47CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgc2VsZi0+b2sgPSAwOworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXNlbGYpOworICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CisgICAgaWYgKHNlbGYtPmJ1ZmZlcikgeworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorI2lmZGVmIFdJVEhfVEhSRUFECisgICAgaWYgKHNlbGYtPmxvY2spIHsKKyAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPmxvY2spOworICAgICAgICBzZWxmLT5sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOworfQorCitzdGF0aWMgaW50CitidWZmZXJlZF90cmF2ZXJzZShidWZmZXJlZCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoc2VsZi0+cmF3KTsKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnVmZmVyZWRfY2xlYXIoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc2VsZi0+b2sgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBfQnVmZmVyZWRJT01peGluIG1ldGhvZHMKKyAqIFRoaXMgaXMgbm90IGEgY2xhc3MsIGp1c3QgYSBjb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCB3aWxsIGJlIHJldXNlZAorICogYnkgQnVmZmVyZWRSZWFkZXIgYW5kIEJ1ZmZlcmVkV3JpdGVyCisgKi8KKworLyogRmx1c2ggYW5kIGNsb3NlICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9zaW1wbGVfZmx1c2goYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKK30KKworc3RhdGljIGludAorYnVmZmVyZWRfY2xvc2VkKGJ1ZmZlcmVkICpzZWxmKQoreworICAgIGludCBjbG9zZWQ7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBDSEVDS19JTklUSUFMSVpFRF9JTlQoc2VsZikKKyAgICByZXMgPSBQeU9iamVjdF9HZXRBdHRyKHNlbGYtPnJhdywgX1B5SU9fc3RyX2Nsb3NlZCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgY2xvc2VkID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIGNsb3NlZDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX2Nsb3NlZF9nZXQoYnVmZmVyZWQgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5yYXcsIF9QeUlPX3N0cl9jbG9zZWQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfY2xvc2UoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIGludCByOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHIgPSBidWZmZXJlZF9jbG9zZWQoc2VsZik7CisgICAgaWYgKHIgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBpZiAociA+IDApIHsKKyAgICAgICAgcmVzID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICAvKiBmbHVzaCgpIHdpbGwgbW9zdCBwcm9iYWJseSByZS10YWtlIHRoZSBsb2NrLCBzbyBkcm9wIGl0IGZpcnN0ICovCisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKilzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgUHlfWERFQ1JFRihyZXMpOworCisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXR1cm4gcmVzOworfQorCisvKiBkZXRhY2ggKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX2RldGFjaChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJhdywgKnJlczsKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICByYXcgPSBzZWxmLT5yYXc7CisgICAgc2VsZi0+cmF3ID0gTlVMTDsKKyAgICBzZWxmLT5kZXRhY2hlZCA9IDE7CisgICAgc2VsZi0+b2sgPSAwOworICAgIHJldHVybiByYXc7Cit9CisKKy8qIElucXVpcmllcyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfc2Vla2FibGUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3NlZWthYmxlLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3JlYWRhYmxlKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9yZWFkYWJsZSwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF93cml0YWJsZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfd3JpdGFibGUsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfbmFtZV9nZXQoYnVmZmVyZWQgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmLT5yYXcsICJuYW1lIik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9tb2RlX2dldChidWZmZXJlZCAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNlbGYtPnJhdywgIm1vZGUiKTsKK30KKworLyogTG93ZXItbGV2ZWwgQVBJcyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfZmlsZW5vKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9maWxlbm8sIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfaXNhdHR5KGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9pc2F0dHksIE5VTEwpOworfQorCisKKy8qIEZvcndhcmQgZGVjbHMgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoYnVmZmVyZWQgKiwgaW50KTsKK3N0YXRpYyBQeV9zc2l6ZV90CitfYnVmZmVyZWRyZWFkZXJfZmlsbF9idWZmZXIoYnVmZmVyZWQgKnNlbGYpOworc3RhdGljIHZvaWQKK19idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoYnVmZmVyZWQgKnNlbGYpOworc3RhdGljIHZvaWQKK19idWZmZXJlZHdyaXRlcl9yZXNldF9idWYoYnVmZmVyZWQgKnNlbGYpOworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9wZWVrX3VubG9ja2VkKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90KTsKK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoYnVmZmVyZWQgKnNlbGYpOworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9yZWFkX2Zhc3QoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QpOworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9yZWFkX2dlbmVyaWMoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QpOworCisKKy8qCisgKiBIZWxwZXJzCisgKi8KKworLyogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgYHdyaXR0ZW5gIG1lbWJlciBpZiBhIEJsb2NraW5nSU9FcnJvciB3YXMKKyAgIHJhaXNlZCwgTlVMTCBvdGhlcndpc2UuIFRoZSBlcnJvciBpcyBhbHdheXMgcmUtcmFpc2VkLiAqLworc3RhdGljIFB5X3NzaXplX3QgKgorX2J1ZmZlcmVkX2NoZWNrX2Jsb2NraW5nX2Vycm9yKHZvaWQpCit7CisgICAgUHlPYmplY3QgKnQsICp2LCAqdGI7CisgICAgUHlCbG9ja2luZ0lPRXJyb3JPYmplY3QgKmVycjsKKworICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKKyAgICBpZiAodiA9PSBOVUxMIHx8ICFQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXModiwgUHlFeGNfQmxvY2tpbmdJT0Vycm9yKSkgeworICAgICAgICBQeUVycl9SZXN0b3JlKHQsIHYsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVyciA9IChQeUJsb2NraW5nSU9FcnJvck9iamVjdCAqKSB2OworICAgIC8qIFRPRE86IHNhbml0eSBjaGVjayAoZXJyLT53cml0dGVuID49IDApICovCisgICAgUHlFcnJfUmVzdG9yZSh0LCB2LCB0Yik7CisgICAgcmV0dXJuICZlcnItPndyaXR0ZW47Cit9CisKK3N0YXRpYyBQeV9vZmZfdAorX2J1ZmZlcmVkX3Jhd190ZWxsKGJ1ZmZlcmVkICpzZWxmKQoreworICAgIFB5X29mZl90IG47CisgICAgUHlPYmplY3QgKnJlczsKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl90ZWxsLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBuID0gUHlOdW1iZXJfQXNPZmZfdChyZXMsIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChuIDwgMCkgeworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmF3IHN0cmVhbSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uICUiIFBZX1BSSWRPRkYsCisJCQkgKFBZX09GRl9UX0NPTVBBVCluKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5hYnNfcG9zID0gbjsKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIFB5X29mZl90CitfYnVmZmVyZWRfcmF3X3NlZWsoYnVmZmVyZWQgKnNlbGYsIFB5X29mZl90IHRhcmdldCwgaW50IHdoZW5jZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzLCAqcG9zb2JqLCAqd2hlbmNlb2JqOworICAgIFB5X29mZl90IG47CisKKyAgICBwb3NvYmogPSBQeUxvbmdfRnJvbU9mZl90KHRhcmdldCk7CisgICAgaWYgKHBvc29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgd2hlbmNlb2JqID0gUHlMb25nX0Zyb21Mb25nKHdoZW5jZSk7CisgICAgaWYgKHdoZW5jZW9iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihwb3NvYmopOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3NlZWssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zb2JqLCB3aGVuY2VvYmosIE5VTEwpOworICAgIFB5X0RFQ1JFRihwb3NvYmopOworICAgIFB5X0RFQ1JFRih3aGVuY2VvYmopOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIG4gPSBQeU51bWJlcl9Bc09mZl90KHJlcywgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKG4gPCAwKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJSYXcgc3RyZWFtIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24gJSIgUFlfUFJJZE9GRiwKKwkJCSAoUFlfT0ZGX1RfQ09NUEFUKW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPmFic19wb3MgPSBuOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgaW50CitfYnVmZmVyZWRfaW5pdChidWZmZXJlZCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IG47CisgICAgaWYgKHNlbGYtPmJ1ZmZlcl9zaXplIDw9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAiYnVmZmVyIHNpemUgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChzZWxmLT5idWZmZXIpCisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKKyAgICBzZWxmLT5idWZmZXIgPSBQeU1lbV9NYWxsb2Moc2VsZi0+YnVmZmVyX3NpemUpOworICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2lmZGVmIFdJVEhfVEhSRUFECisgICAgaWYgKHNlbGYtPmxvY2spCisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5sb2NrKTsKKyAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbid0IGFsbG9jYXRlIHJlYWQgbG9jayIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPm93bmVyID0gMDsKKyNlbmRpZgorICAgIC8qIEZpbmQgb3V0IHdoZXRoZXIgYnVmZmVyX3NpemUgaXMgYSBwb3dlciBvZiAyICovCisgICAgLyogWFhYIGlzIHRoaXMgb3B0aW1pemF0aW9uIHVzZWZ1bD8gKi8KKyAgICBmb3IgKG4gPSBzZWxmLT5idWZmZXJfc2l6ZSAtIDE7IG4gJiAxOyBuID4+PSAxKQorICAgICAgICA7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgc2VsZi0+YnVmZmVyX21hc2sgPSBzZWxmLT5idWZmZXJfc2l6ZSAtIDE7CisgICAgZWxzZQorICAgICAgICBzZWxmLT5idWZmZXJfbWFzayA9IDA7CisgICAgaWYgKF9idWZmZXJlZF9yYXdfdGVsbChzZWxmKSA9PSAtMSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogUmV0dXJuIDEgaWYgYW4gRW52aXJvbm1lbnRFcnJvciB3aXRoIGVycm5vID09IEVJTlRSIGlzIHNldCAoYW5kIHRoZW4KKyAgIGNsZWFycyB0aGUgZXJyb3IgaW5kaWNhdG9yKSwgMCBvdGhlcndpc2UuCisgICBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBQeUVycl9PY2N1cnJlZCgpIGlzIHRydWUuCisqLworc3RhdGljIGludAorX3RyYXBfZWludHIodm9pZCkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVpbnRyX2ludCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnR5cCwgKnZhbCwgKnRiOworICAgIFB5RW52aXJvbm1lbnRFcnJvck9iamVjdCAqZW52X2VycjsKKworICAgIGlmIChlaW50cl9pbnQgPT0gTlVMTCkgeworICAgICAgICBlaW50cl9pbnQgPSBQeUxvbmdfRnJvbUxvbmcoRUlOVFIpOworICAgICAgICBhc3NlcnQoZWludHJfaW50ICE9IE5VTEwpOworICAgIH0KKyAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfRW52aXJvbm1lbnRFcnJvcikpCisgICAgICAgIHJldHVybiAwOworICAgIFB5RXJyX0ZldGNoKCZ0eXAsICZ2YWwsICZ0Yik7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXAsICZ2YWwsICZ0Yik7CisgICAgZW52X2VyciA9IChQeUVudmlyb25tZW50RXJyb3JPYmplY3QgKikgdmFsOworICAgIGFzc2VydChlbnZfZXJyICE9IE5VTEwpOworICAgIGlmIChlbnZfZXJyLT5teWVycm5vICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGVudl9lcnItPm15ZXJybm8sIGVpbnRyX2ludCwgUHlfRVEpID4gMCkgeworICAgICAgICBQeV9ERUNSRUYodHlwKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIFB5X1hERUNSRUYodGIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgLyogVGhpcyBzaWxlbmNlcyBhbnkgZXJyb3Igc2V0IGJ5IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgpICovCisgICAgUHlFcnJfUmVzdG9yZSh0eXAsIHZhbCwgdGIpOworICAgIHJldHVybiAwOworfQorCisvKgorICogU2hhcmVkIG1ldGhvZHMgYW5kIHdyYXBwZXJzCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX2ZsdXNoKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgImZsdXNoIG9mIGNsb3NlZCBmaWxlIikKKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChzZWxmLCAwKTsKKyAgICBpZiAocmVzICE9IE5VTEwgJiYgc2VsZi0+cmVhZGFibGUpIHsKKyAgICAgICAgLyogUmV3aW5kIHRoZSByYXcgc3RyZWFtIHNvIHRoYXQgaXRzIHBvc2l0aW9uIGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgIHRoZSBjdXJyZW50IGxvZ2ljYWwgcG9zaXRpb24uICovCisgICAgICAgIFB5X29mZl90IG47CisgICAgICAgIG4gPSBfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgLVJBV19PRkZTRVQoc2VsZiksIDEpOworICAgICAgICBpZiAobiA9PSAtMSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgfQorICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCisKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcGVlayhidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBuID0gMDsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwZWVrIiwgJm4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPndyaXRhYmxlKSB7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChzZWxmLCAxKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgfQorICAgIHJlcyA9IF9idWZmZXJlZHJlYWRlcl9wZWVrX3VubG9ja2VkKHNlbGYsIG4pOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcmVhZChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBuID0gLTE7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZCIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJm4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobiA8IC0xKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUgb3IgLTEiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYsICJyZWFkIG9mIGNsb3NlZCBmaWxlIikKKworICAgIGlmIChuID09IC0xKSB7CisgICAgICAgIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaXMgdW5zcGVjaWZpZWQsIHJlYWQgdW50aWwgdGhlIGVuZCBvZiBzdHJlYW0gKi8KKyAgICAgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoc2VsZik7CisgICAgICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXMgPSBfYnVmZmVyZWRyZWFkZXJfcmVhZF9mYXN0KHNlbGYsIG4pOworICAgICAgICBpZiAocmVzID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJlcyA9IF9idWZmZXJlZHJlYWRlcl9yZWFkX2dlbmVyaWMoc2VsZiwgbik7CisgICAgICAgICAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3JlYWQxKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG4sIGhhdmUsIHI7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibjpyZWFkMSIsICZuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobiA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CisKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDEpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICB9CisKKyAgICAvKiBSZXR1cm4gdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQorICAgICAgIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuICovCisKKyAgICAvKiBYWFg6IHRoaXMgbWltaWNrcyB0aGUgaW8ucHkgaW1wbGVtZW50YXRpb24gYnV0IGlzIHByb2JhYmx5IHdyb25nLgorICAgICAgIElmIHdlIG5lZWQgdG8gcmVhZCBmcm9tIHRoZSByYXcgc3RyZWFtLCB0aGVuIHdlIGNvdWxkIGFjdHVhbGx5IHJlYWQKKyAgICAgICBhbGwgYG5gIGJ5dGVzIGFza2VkIGJ5IHRoZSBjYWxsZXIgKGFuZCBwb3NzaWJseSBtb3JlLCBzbyBhcyB0byBmaWxsCisgICAgICAgb3VyIGJ1ZmZlciBmb3IgdGhlIG5leHQgcmVhZHMpLiAqLworCisgICAgaGF2ZSA9IFB5X1NBRkVfRE9XTkNBU1QoUkVBREFIRUFEKHNlbGYpLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgaWYgKGhhdmUgPiAwKSB7CisgICAgICAgIGlmIChuID4gaGF2ZSkKKyAgICAgICAgICAgIG4gPSBoYXZlOworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgbik7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBzZWxmLT5wb3MgKz0gbjsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogRmlsbCB0aGUgYnVmZmVyIGZyb20gdGhlIHJhdyBzdHJlYW0sIGFuZCBjb3B5IGl0IHRvIHRoZSByZXN1bHQuICovCisgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICByID0gX2J1ZmZlcmVkcmVhZGVyX2ZpbGxfYnVmZmVyKHNlbGYpOworICAgIGlmIChyID09IC0xKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBpZiAociA9PSAtMikKKyAgICAgICAgciA9IDA7CisgICAgaWYgKG4gPiByKQorICAgICAgICBuID0gcjsKKyAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1ZmZlciwgbik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBzZWxmLT5wb3MgPSBuOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfcmVhZGludG8oYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICAKKyAgICAvKiBUT0RPOiB1c2UgcmF3LnJlYWRpbnRvKCkgaW5zdGVhZCEgKi8KKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMCk7CisgICAgICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgcmVzID0gYnVmZmVyZWRpb2Jhc2VfcmVhZGludG8oKFB5T2JqZWN0ICopc2VsZiwgYXJncyk7CisKK2VuZDoKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkX3JlYWRsaW5lKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IGxpbWl0KQoreworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjaHVua3MgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgbiwgd3JpdHRlbiA9IDA7CisgICAgY29uc3QgY2hhciAqc3RhcnQsICpzLCAqZW5kOworCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYsICJyZWFkbGluZSBvZiBjbG9zZWQgZmlsZSIpCisKKyAgICAvKiBGaXJzdCwgdHJ5IHRvIGZpbmQgYSBsaW5lIGluIHRoZSBidWZmZXIuIFRoaXMgY2FuIHJ1biB1bmxvY2tlZCBiZWNhdXNlCisgICAgICAgdGhlIGNhbGxzIHRvIHRoZSBDIEFQSSBhcmUgc2ltcGxlIGVub3VnaCB0aGF0IHRoZXkgY2FuJ3QgdHJpZ2dlcgorICAgICAgIGFueSB0aHJlYWQgc3dpdGNoLiAqLworICAgIG4gPSBQeV9TQUZFX0RPV05DQVNUKFJFQURBSEVBRChzZWxmKSwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgIGlmIChsaW1pdCA+PSAwICYmIG4gPiBsaW1pdCkKKyAgICAgICAgbiA9IGxpbWl0OworICAgIHN0YXJ0ID0gc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zOworICAgIHMgPSBtZW1jaHIoc3RhcnQsICdcbicsIG4pOworICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzdGFydCwgcyAtIHN0YXJ0ICsgMSk7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkKKyAgICAgICAgICAgIHNlbGYtPnBvcyArPSBzIC0gc3RhcnQgKyAxOworICAgICAgICBnb3RvIGVuZF91bmxvY2tlZDsKKyAgICB9CisgICAgaWYgKG4gPT0gbGltaXQpIHsKKyAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzdGFydCwgbik7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkKKyAgICAgICAgICAgIHNlbGYtPnBvcyArPSBuOworICAgICAgICBnb3RvIGVuZF91bmxvY2tlZDsKKyAgICB9CisKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICBnb3RvIGVuZF91bmxvY2tlZDsKKworICAgIC8qIE5vdyB3ZSB0cnkgdG8gZ2V0IHNvbWUgbW9yZSBmcm9tIHRoZSByYXcgc3RyZWFtICovCisgICAgaWYgKHNlbGYtPndyaXRhYmxlKSB7CisgICAgICAgIHJlcyA9IF9idWZmZXJlZHdyaXRlcl9mbHVzaF91bmxvY2tlZChzZWxmLCAxKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgfQorICAgIGNodW5rcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKGNodW5rcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBpZiAobiA+IDApIHsKKyAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzdGFydCwgbik7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIHJlcykgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgd3JpdHRlbiArPSBuOworICAgICAgICBpZiAobGltaXQgPj0gMCkKKyAgICAgICAgICAgIGxpbWl0IC09IG47CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgICAgICBuID0gX2J1ZmZlcmVkcmVhZGVyX2ZpbGxfYnVmZmVyKHNlbGYpOworICAgICAgICBpZiAobiA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAobiA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChsaW1pdCA+PSAwICYmIG4gPiBsaW1pdCkKKyAgICAgICAgICAgIG4gPSBsaW1pdDsKKyAgICAgICAgc3RhcnQgPSBzZWxmLT5idWZmZXI7CisgICAgICAgIGVuZCA9IHN0YXJ0ICsgbjsKKyAgICAgICAgcyA9IHN0YXJ0OworICAgICAgICB3aGlsZSAocyA8IGVuZCkgeworICAgICAgICAgICAgaWYgKCpzKysgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc3RhcnQsIHMgLSBzdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgICAgICBzZWxmLT5wb3MgPSBzIC0gc3RhcnQ7CisgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCBuKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGlmIChuID09IGxpbWl0KSB7CisgICAgICAgICAgICBzZWxmLT5wb3MgPSBuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCByZXMpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgIHdyaXR0ZW4gKz0gbjsKKyAgICAgICAgaWYgKGxpbWl0ID49IDApCisgICAgICAgICAgICBsaW1pdCAtPSBuOworICAgIH0KK2ZvdW5kOgorICAgIGlmIChyZXMgIT0gTlVMTCAmJiBQeUxpc3RfQXBwZW5kKGNodW5rcywgcmVzKSA8IDApIHsKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIFB5X0NMRUFSKHJlcyk7CisgICAgcmVzID0gX1B5Qnl0ZXNfSm9pbihfUHlJT19lbXB0eV9ieXRlcywgY2h1bmtzKTsKKworZW5kOgorICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCitlbmRfdW5sb2NrZWQ6CisgICAgUHlfWERFQ1JFRihjaHVua3MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZF9yZWFkbGluZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBsaW1pdCA9IC0xOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkbGluZSIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJmxpbWl0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9idWZmZXJlZF9yZWFkbGluZShzZWxmLCBsaW1pdCk7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3RlbGwoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X29mZl90IHBvczsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgcG9zID0gX2J1ZmZlcmVkX3Jhd190ZWxsKHNlbGYpOworICAgIGlmIChwb3MgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHBvcyAtPSBSQVdfT0ZGU0VUKHNlbGYpOworICAgIC8qIFRPRE86IHNhbml0eSBjaGVjayAocG9zID49IDApICovCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tT2ZmX3QocG9zKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3NlZWsoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X29mZl90IHRhcmdldCwgbjsKKyAgICBpbnQgd2hlbmNlID0gMDsKKyAgICBQeU9iamVjdCAqdGFyZ2V0b2JqLCAqcmVzID0gTlVMTDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6c2VlayIsICZ0YXJnZXRvYmosICZ3aGVuY2UpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAod2hlbmNlIDwgMCB8fCB3aGVuY2UgPiAyKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIndoZW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMiwgbm90ICVkIiwgd2hlbmNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYsICJzZWVrIG9mIGNsb3NlZCBmaWxlIikKKworICAgIHRhcmdldCA9IFB5TnVtYmVyX0FzT2ZmX3QodGFyZ2V0b2JqLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICBpZiAodGFyZ2V0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHdoZW5jZSAhPSAyICYmIHNlbGYtPnJlYWRhYmxlKSB7CisgICAgICAgIFB5X29mZl90IGN1cnJlbnQsIGF2YWlsOworICAgICAgICAvKiBDaGVjayBpZiBzZWVraW5nIGxlYXZlcyB1cyBpbnNpZGUgdGhlIGN1cnJlbnQgYnVmZmVyLAorICAgICAgICAgICBzbyBhcyB0byByZXR1cm4gcXVpY2tseSBpZiBwb3NzaWJsZS4gQWxzbywgd2UgbmVlZG4ndCB0YWtlIHRoZQorICAgICAgICAgICBsb2NrIGluIHRoaXMgZmFzdCBwYXRoLgorICAgICAgICAgICBEb24ndCBrbm93IGhvdyB0byBkbyB0aGF0IHdoZW4gd2hlbmNlID09IDIsIHRob3VnaC4gKi8KKyAgICAgICAgLyogTk9URTogUkFXX1RFTEwoKSBjYW4gcmVsZWFzZSB0aGUgR0lMIGJ1dCB0aGUgb2JqZWN0IGlzIGluIGEgc3RhYmxlCisgICAgICAgICAgIHN0YXRlIGF0IHRoaXMgcG9pbnQuICovCisgICAgICAgIGN1cnJlbnQgPSBSQVdfVEVMTChzZWxmKTsKKyAgICAgICAgYXZhaWwgPSBSRUFEQUhFQUQoc2VsZik7CisgICAgICAgIGlmIChhdmFpbCA+IDApIHsKKyAgICAgICAgICAgIFB5X29mZl90IG9mZnNldDsKKyAgICAgICAgICAgIGlmICh3aGVuY2UgPT0gMCkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB0YXJnZXQgLSAoY3VycmVudCAtIFJBV19PRkZTRVQoc2VsZikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHRhcmdldDsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gLXNlbGYtPnBvcyAmJiBvZmZzZXQgPD0gYXZhaWwpIHsKKyAgICAgICAgICAgICAgICBzZWxmLT5wb3MgKz0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbU9mZl90KGN1cnJlbnQgLSBhdmFpbCArIG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIEZhbGxiYWNrOiBpbnZva2UgcmF3IHNlZWsoKSBtZXRob2QgYW5kIGNsZWFyIGJ1ZmZlciAqLworICAgIGlmIChzZWxmLT53cml0YWJsZSkgeworICAgICAgICByZXMgPSBfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoc2VsZiwgMCk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIH0KKworICAgIC8qIFRPRE86IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5IGFuZCByZWFkIGJ1ZmZlciBpZiBuZWVkZWQ/ICovCisgICAgaWYgKHdoZW5jZSA9PSAxKQorICAgICAgICB0YXJnZXQgLT0gUkFXX09GRlNFVChzZWxmKTsKKyAgICBuID0gX2J1ZmZlcmVkX3Jhd19zZWVrKHNlbGYsIHRhcmdldCwgd2hlbmNlKTsKKyAgICBpZiAobiA9PSAtMSkKKyAgICAgICAgZ290byBlbmQ7CisgICAgc2VsZi0+cmF3X3BvcyA9IC0xOworICAgIHJlcyA9IFB5TG9uZ19Gcm9tT2ZmX3Qobik7CisgICAgaWYgKHJlcyAhPSBOVUxMICYmIHNlbGYtPnJlYWRhYmxlKQorICAgICAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfdHJ1bmNhdGUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwb3MgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJnBvcykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFFTlRFUl9CVUZGRVJFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDApOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICB9CisgICAgaWYgKHNlbGYtPnJlYWRhYmxlKSB7CisgICAgICAgIGlmIChwb3MgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgLyogUmV3aW5kIHRoZSByYXcgc3RyZWFtIHNvIHRoYXQgaXRzIHBvc2l0aW9uIGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgICAgICB0aGUgY3VycmVudCBsb2dpY2FsIHBvc2l0aW9uLiAqLworICAgICAgICAgICAgaWYgKF9idWZmZXJlZF9yYXdfc2VlayhzZWxmLCAtUkFXX09GRlNFVChzZWxmKSwgMSkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfdHJ1bmNhdGUsIHBvcywgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKyAgICAvKiBSZXNldCBjYWNoZWQgcG9zaXRpb24gKi8KKyAgICBpZiAoX2J1ZmZlcmVkX3Jhd190ZWxsKHNlbGYpID09IC0xKQorICAgICAgICBQeUVycl9DbGVhcigpOworCitlbmQ6CisgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfaXRlcm5leHQoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmxpbmU7CisgICAgUHlUeXBlT2JqZWN0ICp0cDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworCisgICAgdHAgPSBQeV9UWVBFKHNlbGYpOworICAgIGlmICh0cCA9PSAmUHlCdWZmZXJlZFJlYWRlcl9UeXBlIHx8CisgICAgICAgIHRwID09ICZQeUJ1ZmZlcmVkUmFuZG9tX1R5cGUpIHsKKyAgICAgICAgLyogU2tpcCBtZXRob2QgY2FsbCBvdmVyaGVhZCBmb3Igc3BlZWQgKi8KKyAgICAgICAgbGluZSA9IF9idWZmZXJlZF9yZWFkbGluZShzZWxmLCAtMSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsaW5lID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT19zdHJfcmVhZGxpbmUsIE5VTEwpOworICAgICAgICBpZiAobGluZSAmJiAhUHlCeXRlc19DaGVjayhsaW5lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBieXRlcyBvYmplY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShsaW5lKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaW5lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUobGluZSkgPT0gMCkgeworICAgICAgICAvKiBSZWFjaGVkIEVPRiBvciB3b3VsZCBoYXZlIGJsb2NrZWQgKi8KKyAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX3JlcHIoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm5hbWVvYmosICpyZXM7CisKKyAgICBuYW1lb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKikgc2VsZiwgIm5hbWUiKTsKKyAgICBpZiAobmFtZW9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8JXM+IiwgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqcmVwciA9IFB5T2JqZWN0X1JlcHIobmFtZW9iaik7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lb2JqKTsKKyAgICAgICAgaWYgKHJlcHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8JXMgbmFtZT0lcz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocmVwcikpOworICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qCisgKiBjbGFzcyBCdWZmZXJlZFJlYWRlcgorICovCisKK1B5RG9jX1NUUlZBUihidWZmZXJlZHJlYWRlcl9kb2MsCisgICAgICAgICAgICAgIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuIik7CisKK3N0YXRpYyB2b2lkIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgc2VsZi0+cmVhZF9lbmQgPSAtMTsKK30KKworc3RhdGljIGludAorYnVmZmVyZWRyZWFkZXJfaW5pdChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJyYXciLCAiYnVmZmVyX3NpemUiLCBOVUxMfTsKKyAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKyAgICBQeU9iamVjdCAqcmF3OworCisgICAgc2VsZi0+b2sgPSAwOworICAgIHNlbGYtPmRldGFjaGVkID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG46QnVmZmVyZWRSZWFkZXIiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CisgICAgUHlfSU5DUkVGKHJhdyk7CisgICAgc2VsZi0+cmF3ID0gcmF3OworICAgIHNlbGYtPmJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemU7CisgICAgc2VsZi0+cmVhZGFibGUgPSAxOworICAgIHNlbGYtPndyaXRhYmxlID0gMDsKKworICAgIGlmIChfYnVmZmVyZWRfaW5pdChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworCisgICAgc2VsZi0+ZmFzdF9jbG9zZWRfY2hlY2tzID0gKFB5X1RZUEUoc2VsZikgPT0gJlB5QnVmZmVyZWRSZWFkZXJfVHlwZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHJhdykgPT0gJlB5RmlsZUlPX1R5cGUpOworCisgICAgc2VsZi0+b2sgPSAxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorX2J1ZmZlcmVkcmVhZGVyX3Jhd19yZWFkKGJ1ZmZlcmVkICpzZWxmLCBjaGFyICpzdGFydCwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeU9iamVjdCAqbWVtb2JqLCAqcmVzOworICAgIFB5X3NzaXplX3QgbjsKKyAgICAvKiBOT1RFOiB0aGUgYnVmZmVyIG5lZWRuJ3QgYmUgcmVsZWFzZWQgYXMgaXRzIG9iamVjdCBpcyBOVUxMLiAqLworICAgIGlmIChQeUJ1ZmZlcl9GaWxsSW5mbygmYnVmLCBOVUxMLCBzdGFydCwgbGVuLCAwLCBQeUJVRl9DT05USUcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbWVtb2JqID0gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmJ1Zik7CisgICAgaWYgKG1lbW9iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyogTk9URTogUHlFcnJfU2V0RnJvbUVycm5vKCkgY2FsbHMgUHlFcnJfQ2hlY2tTaWduYWxzKCkgd2hlbiBFSU5UUgorICAgICAgIG9jY3VycyBzbyB3ZSBuZWVkbid0IGRvIGl0IG91cnNlbHZlcy4KKyAgICAgICBXZSB0aGVuIHJldHJ5IHJlYWRpbmcsIGlnbm9yaW5nIHRoZSBzaWduYWwgaWYgbm8gaGFuZGxlciBoYXMKKyAgICAgICByYWlzZWQgKHNlZSBpc3N1ZSAjMTA5NTYpLgorICAgICovCisgICAgZG8geworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5yYXcsIF9QeUlPX3N0cl9yZWFkaW50bywgbWVtb2JqLCBOVUxMKTsKKyAgICB9IHdoaWxlIChyZXMgPT0gTlVMTCAmJiBfdHJhcF9laW50cigpKTsKKyAgICBQeV9ERUNSRUYobWVtb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAocmVzID09IFB5X05vbmUpIHsKKyAgICAgICAgLyogTm9uLWJsb2NraW5nIHN0cmVhbSB3b3VsZCBoYXZlIGJsb2NrZWQuIFNwZWNpYWwgcmV0dXJuIGNvZGUhICovCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICAgIG4gPSBQeU51bWJlcl9Bc1NzaXplX3QocmVzLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICBpZiAobiA8IDAgfHwgbiA+IGxlbikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJyYXcgcmVhZGludG8oKSByZXR1cm5lZCBpbnZhbGlkIGxlbmd0aCAlemQgIgorICAgICAgICAgICAgICAgICAgICAgIihzaG91bGQgaGF2ZSBiZWVuIGJldHdlZW4gMCBhbmQgJXpkKSIsIG4sIGxlbik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG4gPiAwICYmIHNlbGYtPmFic19wb3MgIT0gLTEpCisgICAgICAgIHNlbGYtPmFic19wb3MgKz0gbjsKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIFB5X3NzaXplX3QKK19idWZmZXJlZHJlYWRlcl9maWxsX2J1ZmZlcihidWZmZXJlZCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHN0YXJ0LCBsZW4sIG47CisgICAgaWYgKFZBTElEX1JFQURfQlVGRkVSKHNlbGYpKQorICAgICAgICBzdGFydCA9IFB5X1NBRkVfRE9XTkNBU1Qoc2VsZi0+cmVhZF9lbmQsIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICBlbHNlCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICBsZW4gPSBzZWxmLT5idWZmZXJfc2l6ZSAtIHN0YXJ0OworICAgIG4gPSBfYnVmZmVyZWRyZWFkZXJfcmF3X3JlYWQoc2VsZiwgc2VsZi0+YnVmZmVyICsgc3RhcnQsIGxlbik7CisgICAgaWYgKG4gPD0gMCkKKyAgICAgICAgcmV0dXJuIG47CisgICAgc2VsZi0+cmVhZF9lbmQgPSBzdGFydCArIG47CisgICAgc2VsZi0+cmF3X3BvcyA9IHN0YXJ0ICsgbjsKKyAgICByZXR1cm4gbjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9yZWFkX2FsbChidWZmZXJlZCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGN1cnJlbnRfc2l6ZTsKKyAgICBQeU9iamVjdCAqcmVzLCAqZGF0YSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNodW5rcyA9IFB5TGlzdF9OZXcoMCk7CisKKyAgICBpZiAoY2h1bmtzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogRmlyc3QgY29weSB3aGF0IHdlIGhhdmUgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiAqLworICAgIGN1cnJlbnRfc2l6ZSA9IFB5X1NBRkVfRE9XTkNBU1QoUkVBREFIRUFEKHNlbGYpLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgaWYgKGN1cnJlbnRfc2l6ZSkgeworICAgICAgICBkYXRhID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgY3VycmVudF9zaXplKTsKKyAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgIC8qIFdlJ3JlIGdvaW5nIHBhc3QgdGhlIGJ1ZmZlcidzIGJvdW5kcywgZmx1c2ggaXQgKi8KKyAgICBpZiAoc2VsZi0+d3JpdGFibGUpIHsKKyAgICAgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDEpOworICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICB9CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgZGF0YSkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgLyogUmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkIGJsb2NrLiAqLworICAgICAgICBkYXRhID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfcmVhZCwgTlVMTCk7CisgICAgICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRhdGEgIT0gUHlfTm9uZSAmJiAhUHlCeXRlc19DaGVjayhkYXRhKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVhZCgpIHNob3VsZCByZXR1cm4gYnl0ZXMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChkYXRhID09IFB5X05vbmUgfHwgUHlCeXRlc19HRVRfU0laRShkYXRhKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudF9zaXplID09IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlcyA9IF9QeUJ5dGVzX0pvaW4oX1B5SU9fZW1wdHlfYnl0ZXMsIGNodW5rcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudF9zaXplICs9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7CisgICAgICAgIGlmIChzZWxmLT5hYnNfcG9zICE9IC0xKQorICAgICAgICAgICAgc2VsZi0+YWJzX3BvcyArPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOworICAgIH0KK30KKworLyogUmVhZCBuIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBpZiBpdCBjYW4sIG90aGVyd2lzZSByZXR1cm4gTm9uZS4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgc2ltcGxlIGVub3VnaCB0aGF0IGl0IGNhbiBydW4gdW5sb2NrZWQuICovCitzdGF0aWMgUHlPYmplY3QgKgorX2J1ZmZlcmVkcmVhZGVyX3JlYWRfZmFzdChidWZmZXJlZCAqc2VsZiwgUHlfc3NpemVfdCBuKQoreworICAgIFB5X3NzaXplX3QgY3VycmVudF9zaXplOworCisgICAgY3VycmVudF9zaXplID0gUHlfU0FGRV9ET1dOQ0FTVChSRUFEQUhFQUQoc2VsZiksIFB5X29mZl90LCBQeV9zc2l6ZV90KTsKKyAgICBpZiAobiA8PSBjdXJyZW50X3NpemUpIHsKKyAgICAgICAgLyogRmFzdCBwYXRoOiB0aGUgZGF0YSB0byByZWFkIGlzIGZ1bGx5IGJ1ZmZlcmVkLiAqLworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3MsIG4pOworICAgICAgICBpZiAocmVzICE9IE5VTEwpCisgICAgICAgICAgICBzZWxmLT5wb3MgKz0gbjsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIEdlbmVyaWMgcmVhZCBmdW5jdGlvbjogcmVhZCBmcm9tIHRoZSBzdHJlYW0gdW50aWwgZW5vdWdoIGJ5dGVzIGFyZSByZWFkLAorICogb3IgdW50aWwgYW4gRU9GIG9jY3VycyBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWRyZWFkZXJfcmVhZF9nZW5lcmljKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IG4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBjdXJyZW50X3NpemUsIHJlbWFpbmluZywgd3JpdHRlbjsKKyAgICBjaGFyICpvdXQ7CisKKyAgICBjdXJyZW50X3NpemUgPSBQeV9TQUZFX0RPV05DQVNUKFJFQURBSEVBRChzZWxmKSwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgIGlmIChuIDw9IGN1cnJlbnRfc2l6ZSkKKyAgICAgICAgcmV0dXJuIF9idWZmZXJlZHJlYWRlcl9yZWFkX2Zhc3Qoc2VsZiwgbik7CisKKyAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG4pOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBvdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXMpOworICAgIHJlbWFpbmluZyA9IG47CisgICAgd3JpdHRlbiA9IDA7CisgICAgaWYgKGN1cnJlbnRfc2l6ZSA+IDApIHsKKyAgICAgICAgbWVtY3B5KG91dCwgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBjdXJyZW50X3NpemUpOworICAgICAgICByZW1haW5pbmcgLT0gY3VycmVudF9zaXplOworICAgICAgICB3cml0dGVuICs9IGN1cnJlbnRfc2l6ZTsKKyAgICB9CisgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICB3aGlsZSAocmVtYWluaW5nID4gMCkgeworICAgICAgICAvKiBXZSB3YW50IHRvIHJlYWQgYSB3aG9sZSBibG9jayBhdCB0aGUgZW5kIGludG8gYnVmZmVyLgorICAgICAgICAgICBJZiB3ZSBoYWQgcmVhZHYoKSB3ZSBjb3VsZCBkbyB0aGlzIGluIG9uZSBwYXNzLiAqLworICAgICAgICBQeV9zc2l6ZV90IHIgPSBNSU5VU19MQVNUX0JMT0NLKHNlbGYsIHJlbWFpbmluZyk7CisgICAgICAgIGlmIChyID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgciA9IF9idWZmZXJlZHJlYWRlcl9yYXdfcmVhZChzZWxmLCBvdXQgKyB3cml0dGVuLCByKTsKKyAgICAgICAgaWYgKHIgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gLTIpIHsKKyAgICAgICAgICAgIC8qIEVPRiBvY2N1cnJlZCBvciByZWFkKCkgd291bGQgYmxvY2suICovCisgICAgICAgICAgICBpZiAociA9PSAwIHx8IHdyaXR0ZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzLCB3cml0dGVuKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgfQorICAgICAgICByZW1haW5pbmcgLT0gcjsKKyAgICAgICAgd3JpdHRlbiArPSByOworICAgIH0KKyAgICBhc3NlcnQocmVtYWluaW5nIDw9IHNlbGYtPmJ1ZmZlcl9zaXplKTsKKyAgICBzZWxmLT5wb3MgPSAwOworICAgIHNlbGYtPnJhd19wb3MgPSAwOworICAgIHNlbGYtPnJlYWRfZW5kID0gMDsKKyAgICAvKiBOT1RFOiB3aGVuIHRoZSByZWFkIGlzIHNhdGlzZmllZCwgd2UgYXZvaWQgaXNzdWluZyBhbnkgYWRkaXRpb25hbAorICAgICAgIHJlYWRzLCB3aGljaCBjb3VsZCBibG9jayBpbmRlZmluaXRlbHkgKGUuZy4gb24gYSBzb2NrZXQpLgorICAgICAgIFNlZSBpc3N1ZSAjOTU1MC4gKi8KKyAgICB3aGlsZSAocmVtYWluaW5nID4gMCAmJiBzZWxmLT5yZWFkX2VuZCA8IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CisgICAgICAgIFB5X3NzaXplX3QgciA9IF9idWZmZXJlZHJlYWRlcl9maWxsX2J1ZmZlcihzZWxmKTsKKyAgICAgICAgaWYgKHIgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gLTIpIHsKKyAgICAgICAgICAgIC8qIEVPRiBvY2N1cnJlZCBvciByZWFkKCkgd291bGQgYmxvY2suICovCisgICAgICAgICAgICBpZiAociA9PSAwIHx8IHdyaXR0ZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzLCB3cml0dGVuKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVtYWluaW5nID4gcikgeworICAgICAgICAgICAgbWVtY3B5KG91dCArIHdyaXR0ZW4sIHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgcik7CisgICAgICAgICAgICB3cml0dGVuICs9IHI7CisgICAgICAgICAgICBzZWxmLT5wb3MgKz0gcjsKKyAgICAgICAgICAgIHJlbWFpbmluZyAtPSByOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgIG1lbWNweShvdXQgKyB3cml0dGVuLCBzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3MsIHJlbWFpbmluZyk7CisgICAgICAgICAgICB3cml0dGVuICs9IHJlbWFpbmluZzsKKyAgICAgICAgICAgIHNlbGYtPnBvcyArPSByZW1haW5pbmc7CisgICAgICAgICAgICByZW1haW5pbmcgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXM7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocmVzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19idWZmZXJlZHJlYWRlcl9wZWVrX3VubG9ja2VkKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IG4pCit7CisgICAgUHlfc3NpemVfdCBoYXZlLCByOworCisgICAgaGF2ZSA9IFB5X1NBRkVfRE9XTkNBU1QoUkVBREFIRUFEKHNlbGYpLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgLyogQ29uc3RyYWludHM6CisgICAgICAgMS4gd2UgZG9uJ3Qgd2FudCB0byBhZHZhbmNlIHRoZSBmaWxlIHBvc2l0aW9uLgorICAgICAgIDIuIHdlIGRvbid0IHdhbnQgdG8gbG9zZSBibG9jayBhbGlnbm1lbnQsIHNvIHdlIGNhbid0IHNoaWZ0IHRoZSBidWZmZXIKKyAgICAgICAgICB0byBtYWtlIHNvbWUgcGxhY2UuCisgICAgICAgVGhlcmVmb3JlLCB3ZSBlaXRoZXIgcmV0dXJuIGBoYXZlYCBieXRlcyAoaWYgPiAwKSwgb3IgYSBmdWxsIGJ1ZmZlci4KKyAgICAqLworICAgIGlmIChoYXZlID4gMCkgeworICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3MsIGhhdmUpOworICAgIH0KKworICAgIC8qIEZpbGwgdGhlIGJ1ZmZlciBmcm9tIHRoZSByYXcgc3RyZWFtLCBhbmQgY29weSBpdCB0byB0aGUgcmVzdWx0LiAqLworICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgciA9IF9idWZmZXJlZHJlYWRlcl9maWxsX2J1ZmZlcihzZWxmKTsKKyAgICBpZiAociA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHIgPT0gLTIpCisgICAgICAgIHIgPSAwOworICAgIHNlbGYtPnBvcyA9IDA7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+YnVmZmVyLCByKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkcmVhZGVyX21ldGhvZHNbXSA9IHsKKyAgICAvKiBCdWZmZXJlZElPTWl4aW4gbWV0aG9kcyAqLworICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RldGFjaCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2ltcGxlX2ZsdXNoLCBNRVRIX05PQVJHU30sCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9jbG9zZSwgTUVUSF9OT0FSR1N9LAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsZW5vIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZpbGVubywgTUVUSF9OT0FSR1N9LAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJwZWVrIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3BlZWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkMSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkMSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGVsbCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF90ZWxsLCBNRVRIX05PQVJHU30sCisgICAgeyJ0cnVuY2F0ZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF90cnVuY2F0ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJlYWRlcl9tZW1iZXJzW10gPSB7CisgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBidWZmZXJlZHJlYWRlcl9nZXRzZXRbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpYnVmZmVyZWRfY2xvc2VkX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJuYW1lIiwgKGdldHRlcilidWZmZXJlZF9uYW1lX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJtb2RlIiwgKGdldHRlcilidWZmZXJlZF9tb2RlX2dldCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCisKK1B5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5CdWZmZXJlZFJlYWRlciIsICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKGJ1ZmZlcmVkKSwgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3IpYnVmZmVyZWRfZGVhbGxvYywgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAocmVwcmZ1bmMpYnVmZmVyZWRfcmVwciwgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgIGJ1ZmZlcmVkcmVhZGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYylidWZmZXJlZF9pdGVybmV4dCwgLyogdHBfaXRlcm5leHQgKi8KKyAgICBidWZmZXJlZHJlYWRlcl9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnMsICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgYnVmZmVyZWRyZWFkZXJfZ2V0c2V0LCAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCBkaWN0KSwgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylidWZmZXJlZHJlYWRlcl9pbml0LCAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKwwKKworCitzdGF0aWMgaW50Citjb21wbGFpbl9hYm91dF9tYXhfYnVmZmVyX3NpemUodm9pZCkKK3sKKyAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICJtYXhfYnVmZmVyX3NpemUgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qCisgKiBjbGFzcyBCdWZmZXJlZFdyaXRlcgorICovCitQeURvY19TVFJWQVIoYnVmZmVyZWR3cml0ZXJfZG9jLAorICAgICJBIGJ1ZmZlciBmb3IgYSB3cml0ZWFibGUgc2VxdWVudGlhbCBSYXdJTyBvYmplY3QuXG4iCisgICAgIlxuIgorICAgICJUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIEJ1ZmZlcmVkV3JpdGVyIGZvciB0aGUgZ2l2ZW4gd3JpdGVhYmxlIHJhd1xuIgorICAgICJzdHJlYW0uIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvXG4iCisgICAgIkRFRkFVTFRfQlVGRkVSX1NJWkUuIG1heF9idWZmZXJfc2l6ZSBpc24ndCB1c2VkIGFueW1vcmUuXG4iCisgICAgKTsKKworc3RhdGljIHZvaWQKK19idWZmZXJlZHdyaXRlcl9yZXNldF9idWYoYnVmZmVyZWQgKnNlbGYpCit7CisgICAgc2VsZi0+d3JpdGVfcG9zID0gMDsKKyAgICBzZWxmLT53cml0ZV9lbmQgPSAtMTsKK30KKworc3RhdGljIGludAorYnVmZmVyZWR3cml0ZXJfaW5pdChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIC8qIFRPRE86IHByb3Blcmx5IGRlcHJlY2F0ZSBtYXhfYnVmZmVyX3NpemUgKi8KKyAgICBjaGFyICprd2xpc3RbXSA9IHsicmF3IiwgImJ1ZmZlcl9zaXplIiwgIm1heF9idWZmZXJfc2l6ZSIsIE5VTEx9OworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworICAgIFB5X3NzaXplX3QgbWF4X2J1ZmZlcl9zaXplID0gLTIzNDsKKyAgICBQeU9iamVjdCAqcmF3OworCisgICAgc2VsZi0+b2sgPSAwOworICAgIHNlbGYtPmRldGFjaGVkID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG5uOkJ1ZmZlcmVkUmVhZGVyIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyYXcsICZidWZmZXJfc2l6ZSwgJm1heF9idWZmZXJfc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChtYXhfYnVmZmVyX3NpemUgIT0gLTIzNCAmJiAhY29tcGxhaW5fYWJvdXRfbWF4X2J1ZmZlcl9zaXplKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUocmF3LCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQeV9DTEVBUihzZWxmLT5yYXcpOworICAgIFB5X0lOQ1JFRihyYXcpOworICAgIHNlbGYtPnJhdyA9IHJhdzsKKyAgICBzZWxmLT5yZWFkYWJsZSA9IDA7CisgICAgc2VsZi0+d3JpdGFibGUgPSAxOworCisgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICBpZiAoX2J1ZmZlcmVkX2luaXQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgX2J1ZmZlcmVkd3JpdGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICBzZWxmLT5wb3MgPSAwOworCisgICAgc2VsZi0+ZmFzdF9jbG9zZWRfY2hlY2tzID0gKFB5X1RZUEUoc2VsZikgPT0gJlB5QnVmZmVyZWRXcml0ZXJfVHlwZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHJhdykgPT0gJlB5RmlsZUlPX1R5cGUpOworCisgICAgc2VsZi0+b2sgPSAxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZShidWZmZXJlZCAqc2VsZiwgY2hhciAqc3RhcnQsIFB5X3NzaXplX3QgbGVuKQoreworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlPYmplY3QgKm1lbW9iaiwgKnJlczsKKyAgICBQeV9zc2l6ZV90IG47CisgICAgLyogTk9URTogdGhlIGJ1ZmZlciBuZWVkbid0IGJlIHJlbGVhc2VkIGFzIGl0cyBvYmplY3QgaXMgTlVMTC4gKi8KKyAgICBpZiAoUHlCdWZmZXJfRmlsbEluZm8oJmJ1ZiwgTlVMTCwgc3RhcnQsIGxlbiwgMSwgUHlCVUZfQ09OVElHX1JPKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIG1lbW9iaiA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZidWYpOworICAgIGlmIChtZW1vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIE5PVEU6IFB5RXJyX1NldEZyb21FcnJubygpIGNhbGxzIFB5RXJyX0NoZWNrU2lnbmFscygpIHdoZW4gRUlOVFIKKyAgICAgICBvY2N1cnMgc28gd2UgbmVlZG4ndCBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgV2UgdGhlbiByZXRyeSB3cml0aW5nLCBpZ25vcmluZyB0aGUgc2lnbmFsIGlmIG5vIGhhbmRsZXIgaGFzCisgICAgICAgcmFpc2VkIChzZWUgaXNzdWUgIzEwOTU2KS4KKyAgICAqLworICAgIGRvIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfd3JpdGUsIG1lbW9iaiwgTlVMTCk7CisgICAgfSB3aGlsZSAocmVzID09IE5VTEwgJiYgX3RyYXBfZWludHIoKSk7CisgICAgUHlfREVDUkVGKG1lbW9iaik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbiA9IFB5TnVtYmVyX0FzU3NpemVfdChyZXMsIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChuIDwgMCB8fCBuID4gbGVuKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgInJhdyB3cml0ZSgpIHJldHVybmVkIGludmFsaWQgbGVuZ3RoICV6ZCAiCisgICAgICAgICAgICAgICAgICAgICAiKHNob3VsZCBoYXZlIGJlZW4gYmV0d2VlbiAwIGFuZCAlemQpIiwgbiwgbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAobiA+IDAgJiYgc2VsZi0+YWJzX3BvcyAhPSAtMSkKKyAgICAgICAgc2VsZi0+YWJzX3BvcyArPSBuOworICAgIHJldHVybiBuOworfQorCisvKiBgcmVzdG9yZV9wb3NgIGlzIDEgaWYgd2UgbmVlZCB0byByZXN0b3JlIHRoZSByYXcgc3RyZWFtIHBvc2l0aW9uIGF0CisgICB0aGUgZW5kLCAwIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfYnVmZmVyZWR3cml0ZXJfZmx1c2hfdW5sb2NrZWQoYnVmZmVyZWQgKnNlbGYsIGludCByZXN0b3JlX3BvcykKK3sKKyAgICBQeV9zc2l6ZV90IHdyaXR0ZW4gPSAwOworICAgIFB5X29mZl90IG4sIHJld2luZDsKKworICAgIGlmICghVkFMSURfV1JJVEVfQlVGRkVSKHNlbGYpIHx8IHNlbGYtPndyaXRlX3BvcyA9PSBzZWxmLT53cml0ZV9lbmQpCisgICAgICAgIGdvdG8gZW5kOworICAgIC8qIEZpcnN0LCByZXdpbmQgKi8KKyAgICByZXdpbmQgPSBSQVdfT0ZGU0VUKHNlbGYpICsgKHNlbGYtPnBvcyAtIHNlbGYtPndyaXRlX3Bvcyk7CisgICAgaWYgKHJld2luZCAhPSAwKSB7CisgICAgICAgIG4gPSBfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgLXJld2luZCwgMSk7CisgICAgICAgIGlmIChuIDwgMCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzZWxmLT5yYXdfcG9zIC09IHJld2luZDsKKyAgICB9CisgICAgd2hpbGUgKHNlbGYtPndyaXRlX3BvcyA8IHNlbGYtPndyaXRlX2VuZCkgeworICAgICAgICBuID0gX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZShzZWxmLAorICAgICAgICAgICAgc2VsZi0+YnVmZmVyICsgc2VsZi0+d3JpdGVfcG9zLAorICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChzZWxmLT53cml0ZV9lbmQgLSBzZWxmLT53cml0ZV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X29mZl90LCBQeV9zc2l6ZV90KSk7CisgICAgICAgIGlmIChuID09IC0xKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90ICp3ID0gX2J1ZmZlcmVkX2NoZWNrX2Jsb2NraW5nX2Vycm9yKCk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBzZWxmLT53cml0ZV9wb3MgKz0gKnc7CisgICAgICAgICAgICBzZWxmLT5yYXdfcG9zID0gc2VsZi0+d3JpdGVfcG9zOworICAgICAgICAgICAgd3JpdHRlbiArPSAqdzsKKyAgICAgICAgICAgICp3ID0gd3JpdHRlbjsKKyAgICAgICAgICAgIC8qIEFscmVhZHkgcmUtcmFpc2VkICovCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHNlbGYtPndyaXRlX3BvcyArPSBuOworICAgICAgICBzZWxmLT5yYXdfcG9zID0gc2VsZi0+d3JpdGVfcG9zOworICAgICAgICB3cml0dGVuICs9IFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgICAgICAvKiBQYXJ0aWFsIHdyaXRlcyBjYW4gcmV0dXJuIHN1Y2Nlc3NmdWxseSB3aGVuIGludGVycnVwdGVkIGJ5IGEKKyAgICAgICAgICAgc2lnbmFsIChzZWUgd3JpdGUoMikpLiAgV2UgbXVzdCBydW4gc2lnbmFsIGhhbmRsZXJzIGJlZm9yZQorICAgICAgICAgICBibG9ja2luZyBhbm90aGVyIHRpbWUsIHBvc3NpYmx5IGluZGVmaW5pdGVseS4gKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHJlc3RvcmVfcG9zKSB7CisgICAgICAgIFB5X29mZl90IGZvcndhcmQgPSByZXdpbmQgLSB3cml0dGVuOworICAgICAgICBpZiAoZm9yd2FyZCAhPSAwKSB7CisgICAgICAgICAgICBuID0gX2J1ZmZlcmVkX3Jhd19zZWVrKHNlbGYsIGZvcndhcmQsIDEpOworICAgICAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNlbGYtPnJhd19wb3MgKz0gZm9yd2FyZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKHNlbGYpOworCitlbmQ6CisgICAgUHlfUkVUVVJOX05PTkU7CisKK2Vycm9yOgorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWR3cml0ZXJfd3JpdGUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlfc3NpemVfdCB3cml0dGVuLCBhdmFpbCwgcmVtYWluaW5nOworICAgIFB5X29mZl90IG9mZnNldDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjp3cml0ZSIsICZidWYpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChJU19DTE9TRUQoc2VsZikpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ3cml0ZSB0byBjbG9zZWQgZmlsZSIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIEZhc3QgcGF0aDogdGhlIGRhdGEgdG8gd3JpdGUgY2FuIGJlIGZ1bGx5IGJ1ZmZlcmVkLiAqLworICAgIGlmICghVkFMSURfUkVBRF9CVUZGRVIoc2VsZikgJiYgIVZBTElEX1dSSVRFX0JVRkZFUihzZWxmKSkgeworICAgICAgICBzZWxmLT5wb3MgPSAwOworICAgICAgICBzZWxmLT5yYXdfcG9zID0gMDsKKyAgICB9CisgICAgYXZhaWwgPSBQeV9TQUZFX0RPV05DQVNUKHNlbGYtPmJ1ZmZlcl9zaXplIC0gc2VsZi0+cG9zLCBQeV9vZmZfdCwgUHlfc3NpemVfdCk7CisgICAgaWYgKGJ1Zi5sZW4gPD0gYXZhaWwpIHsKKyAgICAgICAgbWVtY3B5KHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgICAgIGlmICghVkFMSURfV1JJVEVfQlVGRkVSKHNlbGYpKSB7CisgICAgICAgICAgICBzZWxmLT53cml0ZV9wb3MgPSBzZWxmLT5wb3M7CisgICAgICAgIH0KKyAgICAgICAgQURKVVNUX1BPU0lUSU9OKHNlbGYsIHNlbGYtPnBvcyArIGJ1Zi5sZW4pOworICAgICAgICBpZiAoc2VsZi0+cG9zID4gc2VsZi0+d3JpdGVfZW5kKQorICAgICAgICAgICAgc2VsZi0+d3JpdGVfZW5kID0gc2VsZi0+cG9zOworICAgICAgICB3cml0dGVuID0gYnVmLmxlbjsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgLyogRmlyc3Qgd3JpdGUgdGhlIGN1cnJlbnQgYnVmZmVyICovCisgICAgcmVzID0gX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKHNlbGYsIDApOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICBQeV9zc2l6ZV90ICp3ID0gX2J1ZmZlcmVkX2NoZWNrX2Jsb2NraW5nX2Vycm9yKCk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cmVhZGFibGUpCisgICAgICAgICAgICBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKHNlbGYpOworICAgICAgICAvKiBNYWtlIHNvbWUgcGxhY2UgYnkgc2hpZnRpbmcgdGhlIGJ1ZmZlci4gKi8KKyAgICAgICAgYXNzZXJ0KFZBTElEX1dSSVRFX0JVRkZFUihzZWxmKSk7CisgICAgICAgIG1lbW1vdmUoc2VsZi0+YnVmZmVyLCBzZWxmLT5idWZmZXIgKyBzZWxmLT53cml0ZV9wb3MsCisgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChzZWxmLT53cml0ZV9lbmQgLSBzZWxmLT53cml0ZV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9vZmZfdCwgUHlfc3NpemVfdCkpOworICAgICAgICBzZWxmLT53cml0ZV9lbmQgLT0gc2VsZi0+d3JpdGVfcG9zOworICAgICAgICBzZWxmLT5yYXdfcG9zIC09IHNlbGYtPndyaXRlX3BvczsKKyAgICAgICAgc2VsZi0+cG9zIC09IHNlbGYtPndyaXRlX3BvczsKKyAgICAgICAgc2VsZi0+d3JpdGVfcG9zID0gMDsKKyAgICAgICAgYXZhaWwgPSBQeV9TQUZFX0RPV05DQVNUKHNlbGYtPmJ1ZmZlcl9zaXplIC0gc2VsZi0+d3JpdGVfZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOworICAgICAgICBpZiAoYnVmLmxlbiA8PSBhdmFpbCkgeworICAgICAgICAgICAgLyogRXZlcnl0aGluZyBjYW4gYmUgYnVmZmVyZWQgKi8KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+d3JpdGVfZW5kLCBidWYuYnVmLCBidWYubGVuKTsKKyAgICAgICAgICAgIHNlbGYtPndyaXRlX2VuZCArPSBidWYubGVuOworICAgICAgICAgICAgd3JpdHRlbiA9IGJ1Zi5sZW47CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICAvKiBCdWZmZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gKi8KKyAgICAgICAgbWVtY3B5KHNlbGYtPmJ1ZmZlciArIHNlbGYtPndyaXRlX2VuZCwgYnVmLmJ1ZiwgYXZhaWwpOworICAgICAgICBzZWxmLT53cml0ZV9lbmQgKz0gYXZhaWw7CisgICAgICAgIC8qIEFscmVhZHkgcmUtcmFpc2VkICovCisgICAgICAgICp3ID0gYXZhaWw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKHJlcyk7CisKKyAgICAvKiBBZGp1c3QgdGhlIHJhdyBzdHJlYW0gcG9zaXRpb24gaWYgaXQgaXMgYXdheSBmcm9tIHRoZSBsb2dpY2FsIHN0cmVhbQorICAgICAgIHBvc2l0aW9uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIHJlYWQgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCBidXQgbm90CisgICAgICAgbW9kaWZpZWQgKGFuZCB0aGVyZWZvcmUgX2J1ZmZlcmVkd3JpdGVyX2ZsdXNoX3VubG9ja2VkKCkgZGlkbid0IHJld2luZAorICAgICAgIHRoZSByYXcgc3RyZWFtIGJ5IGl0c2VsZikuCisgICAgICAgRml4ZXMgaXNzdWUgIzY2MjkuCisgICAgKi8KKyAgICBvZmZzZXQgPSBSQVdfT0ZGU0VUKHNlbGYpOworICAgIGlmIChvZmZzZXQgIT0gMCkgeworICAgICAgICBpZiAoX2J1ZmZlcmVkX3Jhd19zZWVrKHNlbGYsIC1vZmZzZXQsIDEpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHNlbGYtPnJhd19wb3MgLT0gb2Zmc2V0OworICAgIH0KKworICAgIC8qIFRoZW4gd3JpdGUgYnVmIGl0c2VsZi4gQXQgdGhpcyBwb2ludCB0aGUgYnVmZmVyIGhhcyBiZWVuIGVtcHRpZWQuICovCisgICAgcmVtYWluaW5nID0gYnVmLmxlbjsKKyAgICB3cml0dGVuID0gMDsKKyAgICB3aGlsZSAocmVtYWluaW5nID4gc2VsZi0+YnVmZmVyX3NpemUpIHsKKyAgICAgICAgUHlfc3NpemVfdCBuID0gX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZSgKKyAgICAgICAgICAgIHNlbGYsIChjaGFyICopIGJ1Zi5idWYgKyB3cml0dGVuLCBidWYubGVuIC0gd3JpdHRlbik7CisgICAgICAgIGlmIChuID09IC0xKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90ICp3ID0gX2J1ZmZlcmVkX2NoZWNrX2Jsb2NraW5nX2Vycm9yKCk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3cml0dGVuICs9ICp3OworICAgICAgICAgICAgcmVtYWluaW5nIC09ICp3OworICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA+IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CisgICAgICAgICAgICAgICAgLyogQ2FuJ3QgYnVmZmVyIGV2ZXJ5dGhpbmcsIHN0aWxsIGJ1ZmZlciBhcyBtdWNoIGFzIHBvc3NpYmxlICovCisgICAgICAgICAgICAgICAgbWVtY3B5KHNlbGYtPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgYnVmLmJ1ZiArIHdyaXR0ZW4sIHNlbGYtPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5yYXdfcG9zID0gMDsKKyAgICAgICAgICAgICAgICBBREpVU1RfUE9TSVRJT04oc2VsZiwgc2VsZi0+YnVmZmVyX3NpemUpOworICAgICAgICAgICAgICAgIHNlbGYtPndyaXRlX2VuZCA9IHNlbGYtPmJ1ZmZlcl9zaXplOworICAgICAgICAgICAgICAgICp3ID0gd3JpdHRlbiArIHNlbGYtPmJ1ZmZlcl9zaXplOworICAgICAgICAgICAgICAgIC8qIEFscmVhZHkgcmUtcmFpc2VkICovCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB3cml0dGVuICs9IG47CisgICAgICAgIHJlbWFpbmluZyAtPSBuOworICAgICAgICAvKiBQYXJ0aWFsIHdyaXRlcyBjYW4gcmV0dXJuIHN1Y2Nlc3NmdWxseSB3aGVuIGludGVycnVwdGVkIGJ5IGEKKyAgICAgICAgICAgc2lnbmFsIChzZWUgd3JpdGUoMikpLiAgV2UgbXVzdCBydW4gc2lnbmFsIGhhbmRsZXJzIGJlZm9yZQorICAgICAgICAgICBibG9ja2luZyBhbm90aGVyIHRpbWUsIHBvc3NpYmx5IGluZGVmaW5pdGVseS4gKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChzZWxmLT5yZWFkYWJsZSkKKyAgICAgICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICBpZiAocmVtYWluaW5nID4gMCkgeworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyLCAoY2hhciAqKSBidWYuYnVmICsgd3JpdHRlbiwgcmVtYWluaW5nKTsKKyAgICAgICAgd3JpdHRlbiArPSByZW1haW5pbmc7CisgICAgfQorICAgIHNlbGYtPndyaXRlX3BvcyA9IDA7CisgICAgLyogVE9ETzogc2FuaXR5IGNoZWNrIChyZW1haW5pbmcgPj0gMCkgKi8KKyAgICBzZWxmLT53cml0ZV9lbmQgPSByZW1haW5pbmc7CisgICAgQURKVVNUX1BPU0lUSU9OKHNlbGYsIHJlbWFpbmluZyk7CisgICAgc2VsZi0+cmF3X3BvcyA9IDA7CisKK2VuZDoKKyAgICByZXMgPSBQeUxvbmdfRnJvbVNzaXplX3Qod3JpdHRlbik7CisKK2Vycm9yOgorICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgYnVmZmVyZWR3cml0ZXJfbWV0aG9kc1tdID0geworICAgIC8qIEJ1ZmZlcmVkSU9NaXhpbiBtZXRob2RzICovCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9jbG9zZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RldGFjaCwgTUVUSF9OT0FSR1N9LAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsZW5vIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZpbGVubywgTUVUSF9OT0FSR1N9LAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHdyaXRlcl93cml0ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmx1c2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2VlaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdGVsbCwgTUVUSF9OT0FSR1N9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkd3JpdGVyX21lbWJlcnNbXSA9IHsKKyAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGJ1ZmZlcmVkd3JpdGVyX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilidWZmZXJlZF9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX25hbWVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im1vZGUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX21vZGVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKKworUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRXcml0ZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLkJ1ZmZlcmVkV3JpdGVyIiwgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoYnVmZmVyZWQpLCAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilidWZmZXJlZF9kZWFsbG9jLCAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIChyZXByZnVuYylidWZmZXJlZF9yZXByLCAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgIGJ1ZmZlcmVkd3JpdGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgYnVmZmVyZWR3cml0ZXJfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBidWZmZXJlZHdyaXRlcl9tZW1iZXJzLCAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGJ1ZmZlcmVkd3JpdGVyX2dldHNldCwgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICBvZmZzZXRvZihidWZmZXJlZCwgZGljdCksICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylidWZmZXJlZHdyaXRlcl9pbml0LCAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKwwKKworCisvKgorICogQnVmZmVyZWRSV1BhaXIKKyAqLworCitQeURvY19TVFJWQVIoYnVmZmVyZWRyd3BhaXJfZG9jLAorICAgICJBIGJ1ZmZlcmVkIHJlYWRlciBhbmQgd3JpdGVyIG9iamVjdCB0b2dldGhlci5cbiIKKyAgICAiXG4iCisgICAgIkEgYnVmZmVyZWQgcmVhZGVyIG9iamVjdCBhbmQgYnVmZmVyZWQgd3JpdGVyIG9iamVjdCBwdXQgdG9nZXRoZXIgdG9cbiIKKyAgICAiZm9ybSBhIHNlcXVlbnRpYWwgSU8gb2JqZWN0IHRoYXQgY2FuIHJlYWQgYW5kIHdyaXRlLiBUaGlzIGlzIHR5cGljYWxseVxuIgorICAgICJ1c2VkIHdpdGggYSBzb2NrZXQgb3IgdHdvLXdheSBwaXBlLlxuIgorICAgICJcbiIKKyAgICAicmVhZGVyIGFuZCB3cml0ZXIgYXJlIFJhd0lPQmFzZSBvYmplY3RzIHRoYXQgYXJlIHJlYWRhYmxlIGFuZFxuIgorICAgICJ3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0b1xuIgorICAgICJERUZBVUxUX0JVRkZFUl9TSVpFLlxuIgorICAgICk7CisKKy8qIFhYWCBUaGUgdXNlZnVsbmVzcyBvZiB0aGlzIChjb21wYXJlZCB0byBoYXZpbmcgdHdvIHNlcGFyYXRlIElPIG9iamVjdHMpIGlzCisgKiBxdWVzdGlvbmFibGUuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBidWZmZXJlZCAqcmVhZGVyOworICAgIGJ1ZmZlcmVkICp3cml0ZXI7CisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OworfSByd3BhaXI7CisKK3N0YXRpYyBpbnQKK2J1ZmZlcmVkcndwYWlyX2luaXQocndwYWlyICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKnJlYWRlciwgKndyaXRlcjsKKyAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKyAgICBQeV9zc2l6ZV90IG1heF9idWZmZXJfc2l6ZSA9IC0yMzQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PfG5uOkJ1ZmZlcmVkUldQYWlyIiwgJnJlYWRlciwgJndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmZlcl9zaXplLCAmbWF4X2J1ZmZlcl9zaXplKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG1heF9idWZmZXJfc2l6ZSAhPSAtMjM0ICYmICFjb21wbGFpbl9hYm91dF9tYXhfYnVmZmVyX3NpemUoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZShyZWFkZXIsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3dyaXRhYmxlKHdyaXRlciwgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2VsZi0+cmVhZGVyID0gKGJ1ZmZlcmVkICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKKyAgICAgICAgICAgIChQeU9iamVjdCAqKSAmUHlCdWZmZXJlZFJlYWRlcl9UeXBlLCAiT24iLCByZWFkZXIsIGJ1ZmZlcl9zaXplKTsKKyAgICBpZiAoc2VsZi0+cmVhZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNlbGYtPndyaXRlciA9IChidWZmZXJlZCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oCisgICAgICAgICAgICAoUHlPYmplY3QgKikgJlB5QnVmZmVyZWRXcml0ZXJfVHlwZSwgIk9uIiwgd3JpdGVyLCBidWZmZXJfc2l6ZSk7CisgICAgaWYgKHNlbGYtPndyaXRlciA9PSBOVUxMKSB7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRlcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnVmZmVyZWRyd3BhaXJfdHJhdmVyc2UocndwYWlyICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnVmZmVyZWRyd3BhaXJfY2xlYXIocndwYWlyICpzZWxmKQoreworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+d3JpdGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2J1ZmZlcmVkcndwYWlyX2RlYWxsb2MocndwYWlyICpzZWxmKQoreworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+d3JpdGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKSBzZWxmKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19mb3J3YXJkX2NhbGwoYnVmZmVyZWQgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmV0OworCisgICAgaWYgKGZ1bmMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmMsIGFyZ3MpOworICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRyd3BhaXJfcmVhZChyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgInJlYWQiLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3BlZWsocndwYWlyICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gX2ZvcndhcmRfY2FsbChzZWxmLT5yZWFkZXIsICJwZWVrIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9yZWFkMShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgInJlYWQxIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9yZWFkaW50byhyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgInJlYWRpbnRvIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl93cml0ZShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgIndyaXRlIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9mbHVzaChyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgImZsdXNoIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9yZWFkYWJsZShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgInJlYWRhYmxlIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl93cml0YWJsZShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgIndyaXRhYmxlIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9jbG9zZShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXQgPSBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgImNsb3NlIiwgYXJncyk7CisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYocmV0KTsKKworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgImNsb3NlIiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9pc2F0dHkocndwYWlyICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0ID0gX2ZvcndhcmRfY2FsbChzZWxmLT53cml0ZXIsICJpc2F0dHkiLCBhcmdzKTsKKworICAgIGlmIChyZXQgIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgLyogZWl0aGVyIFRydWUgb3IgZXhjZXB0aW9uICovCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIFB5X0RFQ1JFRihyZXQpOworCisgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAiaXNhdHR5IiwgYXJncyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWZmZXJlZHJ3cGFpcl9jbG9zZWRfZ2V0KHJ3cGFpciAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cigoUHlPYmplY3QgKikgc2VsZi0+d3JpdGVyLCBfUHlJT19zdHJfY2xvc2VkKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkcndwYWlyX21ldGhvZHNbXSA9IHsKKyAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcGVlaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX3JlYWQxLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZGludG8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZGludG8sIE1FVEhfVkFSQVJHU30sCisKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfZmx1c2gsIE1FVEhfTk9BUkdTfSwKKworICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCisKKyAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX2Nsb3NlLCBNRVRIX05PQVJHU30sCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfaXNhdHR5LCBNRVRIX05PQVJHU30sCisKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBidWZmZXJlZHJ3cGFpcl9nZXRzZXRbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpYnVmZmVyZWRyd3BhaXJfY2xvc2VkX2dldCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCitQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFJXUGFpcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uQnVmZmVyZWRSV1BhaXIiLCAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihyd3BhaXIpLCAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3IpYnVmZmVyZWRyd3BhaXJfZGVhbGxvYywgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKHJ3cGFpciwgd2Vha3JlZmxpc3QpLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGJ1ZmZlcmVkcndwYWlyX21ldGhvZHMsICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBidWZmZXJlZHJ3cGFpcl9nZXRzZXQsICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgb2Zmc2V0b2YocndwYWlyLCBkaWN0KSwgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAoaW5pdHByb2MpYnVmZmVyZWRyd3BhaXJfaW5pdCwgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisMCisKKworLyoKKyAqIEJ1ZmZlcmVkUmFuZG9tCisgKi8KKworUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkcmFuZG9tX2RvYywKKyAgICAiQSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2VzcyBzdHJlYW1zLlxuIgorICAgICJcbiIKKyAgICAiVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSByZWFkZXIgYW5kIHdyaXRlciBmb3IgYSBzZWVrYWJsZSBzdHJlYW0sXG4iCisgICAgInJhdywgZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdFxuIgorICAgICJkZWZhdWx0cyB0byBERUZBVUxUX0JVRkZFUl9TSVpFLiBtYXhfYnVmZmVyX3NpemUgaXNuJ3QgdXNlZCBhbnltb3JlLlxuIgorICAgICk7CisKK3N0YXRpYyBpbnQKK2J1ZmZlcmVkcmFuZG9tX2luaXQoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsicmF3IiwgImJ1ZmZlcl9zaXplIiwgIm1heF9idWZmZXJfc2l6ZSIsIE5VTEx9OworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworICAgIFB5X3NzaXplX3QgbWF4X2J1ZmZlcl9zaXplID0gLTIzNDsKKyAgICBQeU9iamVjdCAqcmF3OworCisgICAgc2VsZi0+b2sgPSAwOworICAgIHNlbGYtPmRldGFjaGVkID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG5uOkJ1ZmZlcmVkUmVhZGVyIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyYXcsICZidWZmZXJfc2l6ZSwgJm1heF9idWZmZXJfc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChtYXhfYnVmZmVyX3NpemUgIT0gLTIzNCAmJiAhY29tcGxhaW5fYWJvdXRfbWF4X2J1ZmZlcl9zaXplKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfc2Vla2FibGUocmF3LCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3dyaXRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICBQeV9JTkNSRUYocmF3KTsKKyAgICBzZWxmLT5yYXcgPSByYXc7CisgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICBzZWxmLT5yZWFkYWJsZSA9IDE7CisgICAgc2VsZi0+d3JpdGFibGUgPSAxOworCisgICAgaWYgKF9idWZmZXJlZF9pbml0KHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgX2J1ZmZlcmVkd3JpdGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICBzZWxmLT5wb3MgPSAwOworCisgICAgc2VsZi0+ZmFzdF9jbG9zZWRfY2hlY2tzID0gKFB5X1RZUEUoc2VsZikgPT0gJlB5QnVmZmVyZWRSYW5kb21fVHlwZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHJhdykgPT0gJlB5RmlsZUlPX1R5cGUpOworCisgICAgc2VsZi0+b2sgPSAxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgYnVmZmVyZWRyYW5kb21fbWV0aG9kc1tdID0geworICAgIC8qIEJ1ZmZlcmVkSU9NaXhpbiBtZXRob2RzICovCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9jbG9zZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RldGFjaCwgTUVUSF9OT0FSR1N9LAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsZW5vIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZpbGVubywgTUVUSF9OT0FSR1N9LAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9mbHVzaCwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NlZWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RlbGwsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZDEiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZDEsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkaW50byIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkaW50bywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicGVlayIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9wZWVrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWR3cml0ZXJfd3JpdGUsIE1FVEhfVkFSQVJHU30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyYW5kb21fbWVtYmVyc1tdID0geworICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgYnVmZmVyZWRyYW5kb21fZ2V0c2V0W10gPSB7CisgICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWJ1ZmZlcmVkX2Nsb3NlZF9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsibmFtZSIsIChnZXR0ZXIpYnVmZmVyZWRfbmFtZV9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHsibW9kZSIsIChnZXR0ZXIpYnVmZmVyZWRfbW9kZV9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworCitQeVR5cGVPYmplY3QgUHlCdWZmZXJlZFJhbmRvbV9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uQnVmZmVyZWRSYW5kb20iLCAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihidWZmZXJlZCksICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWJ1ZmZlcmVkX2RlYWxsb2MsICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgKHJlcHJmdW5jKWJ1ZmZlcmVkX3JlcHIsICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIHdlYWtyZWZsaXN0KSwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKWJ1ZmZlcmVkX2l0ZXJuZXh0LCAvKiB0cF9pdGVybmV4dCAqLworICAgIGJ1ZmZlcmVkcmFuZG9tX21ldGhvZHMsICAgICAvKiB0cF9tZXRob2RzICovCisgICAgYnVmZmVyZWRyYW5kb21fbWVtYmVycywgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBidWZmZXJlZHJhbmRvbV9nZXRzZXQsICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCBkaWN0KSwgLyp0cF9kaWN0b2Zmc2V0Ki8KKyAgICAoaW5pdHByb2MpYnVmZmVyZWRyYW5kb21faW5pdCwgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2J5dGVzaW8uYyBiL01vZHVsZXMvX2lvL2J5dGVzaW8uYwpzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBNb2R1bGVzL19ieXRlc2lvLmMKcmVuYW1lIHRvIE1vZHVsZXMvX2lvL2J5dGVzaW8uYwppbmRleCBlMzY5ZjgxLi41MWZhZDIxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19ieXRlc2lvLmMKKysrIGIvTW9kdWxlcy9faW8vYnl0ZXNpby5jCkBAIC0xLDQgKzEsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIiAgICAgICAvKiBmb3Igb2Zmc2V0b2YoKSAqLworI2luY2x1ZGUgIl9pb21vZHVsZS5oIgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtNiw3ICs4LDkgQEAKICAgICBQeV9zc2l6ZV90IHBvczsKICAgICBQeV9zc2l6ZV90IHN0cmluZ19zaXplOwogICAgIHNpemVfdCBidWZfc2l6ZTsKLX0gQnl0ZXNJT09iamVjdDsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7Cit9IGJ5dGVzaW87CiAKICNkZWZpbmUgQ0hFQ0tfQ0xPU0VEKHNlbGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoKHNlbGYpLT5idWYgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE5LDcgKzIzLDcgQEAKICAgIG9iamVjdC4gUmV0dXJucyB0aGUgbGVuZ3RoIGJldHdlZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlCiAgICBuZXh0IG5ld2xpbmUgY2hhcmFjdGVyLiAqLwogc3RhdGljIFB5X3NzaXplX3QKLWdldF9saW5lKEJ5dGVzSU9PYmplY3QgKnNlbGYsIGNoYXIgKipvdXRwdXQpCitnZXRfbGluZShieXRlc2lvICpzZWxmLCBjaGFyICoqb3V0cHV0KQogewogICAgIGNoYXIgKm47CiAgICAgY29uc3QgY2hhciAqc3RyX2VuZDsKQEAgLTUyLDcgKzU2LDcgQEAKICAgIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSAnc2l6ZScgYXJndW1lbnQgaXMgbm9uLW5lZ2F0aXZlLiAgUmV0dXJucwogICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuICovCiBzdGF0aWMgaW50Ci1yZXNpemVfYnVmZmVyKEJ5dGVzSU9PYmplY3QgKnNlbGYsIHNpemVfdCBzaXplKQorcmVzaXplX2J1ZmZlcihieXRlc2lvICpzZWxmLCBzaXplX3Qgc2l6ZSkKIHsKICAgICAvKiBIZXJlLCB1bnNpZ25lZCB0eXBlcyBhcmUgdXNlZCB0byBhdm9pZCBkZWFsaW5nIHdpdGggc2lnbmVkIGludGVnZXIKICAgICAgICBvdmVyZmxvdywgd2hpY2ggaXMgdW5kZWZpbmVkIGluIEMuICovCkBAIC0xMDQsNyArMTA4LDcgQEAKIC8qIEludGVybmFsIHJvdXRpbmUgZm9yIHdyaXRpbmcgYSBzdHJpbmcgb2YgYnl0ZXMgdG8gdGhlIGJ1ZmZlciBvZiBhIEJ5dGVzSU8KICAgIG9iamVjdC4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyb3RlLCBvciAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci13cml0ZV9ieXRlcyhCeXRlc0lPT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpieXRlcywgUHlfc3NpemVfdCBsZW4pCit3cml0ZV9ieXRlcyhieXRlc2lvICpzZWxmLCBjb25zdCBjaGFyICpieXRlcywgUHlfc3NpemVfdCBsZW4pCiB7CiAgICAgYXNzZXJ0KHNlbGYtPmJ1ZiAhPSBOVUxMKTsKICAgICBhc3NlcnQoc2VsZi0+cG9zID49IDApOwpAQCAtMTQyLDE3ICsxNDYsMTkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fZ2V0X2Nsb3NlZChCeXRlc0lPT2JqZWN0ICpzZWxmKQorYnl0ZXNpb19nZXRfY2xvc2VkKGJ5dGVzaW8gKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPmJ1ZiA9PSBOVUxMKQorICAgIGlmIChzZWxmLT5idWYgPT0gTlVMTCkgewogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKLSAgICBlbHNlCisgICAgfQorICAgIGVsc2UgewogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CisgICAgfQogfQogCiAvKiBHZW5lcmljIGdldHRlciBmb3IgdGhlIHdyaXRhYmxlLCByZWFkYWJsZSBhbmQgc2Vla2FibGUgcHJvcGVydGllcyAqLwogc3RhdGljIFB5T2JqZWN0ICoKLXJldHVybl90cnVlKEJ5dGVzSU9PYmplY3QgKnNlbGYpCityZXR1cm5fdHJ1ZShieXRlc2lvICpzZWxmKQogewogICAgIFB5X1JFVFVSTl9UUlVFOwogfQpAQCAtMTYxLDcgKzE2Nyw3IEBACiAiZmx1c2goKSAtPiBOb25lLiAgRG9lcyBub3RoaW5nLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19mbHVzaChCeXRlc0lPT2JqZWN0ICpzZWxmKQorYnl0ZXNpb19mbHVzaChieXRlc2lvICpzZWxmKQogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTE3MywxMCArMTc5LDEwIEBACiAiUmV0cmlldmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgQnl0ZXNJTyBvYmplY3QuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2dldHZhbHVlKEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2dldHZhbHVlKGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwotICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWYsIHNlbGYtPnN0cmluZ19zaXplKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWYsIHNlbGYtPnN0cmluZ19zaXplKTsKIH0KIAogUHlEb2NfU1RSVkFSKGlzYXR0eV9kb2MsCkBAIC0xODYsNyArMTkyLDcgQEAKICJ0byBhIHR0eS1saWtlIGRldmljZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9faXNhdHR5KEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2lzYXR0eShieXRlc2lvICpzZWxmKQogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBQeV9SRVRVUk5fRkFMU0U7CkBAIC0xOTYsMTAgKzIwMiwxMCBAQAogInRlbGwoKSAtPiBjdXJyZW50IGZpbGUgcG9zaXRpb24sIGFuIGludGVnZXJcbiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb190ZWxsKEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX3RlbGwoYnl0ZXNpbyAqc2VsZikKIHsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5wb3MpOwogfQogCiBQeURvY19TVFJWQVIocmVhZF9kb2MsCkBAIC0yMDksNyArMjE1LDcgQEAKICJSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZChCeXRlc0lPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVzaW9fcmVhZChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG47CiAgICAgY2hhciAqb3V0cHV0OwpAQCAtMjIwLDcgKzIyNiw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkIiwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5SW5kZXhfQ2hlY2soYXJnKSkgeworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CiAgICAgICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKICAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjQ3LDcgKzI1Myw3IEBACiAgICAgb3V0cHV0ID0gc2VsZi0+YnVmICsgc2VsZi0+cG9zOwogICAgIHNlbGYtPnBvcyArPSBzaXplOwogCi0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKG91dHB1dCwgc2l6ZSk7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBzaXplKTsKIH0KIAogCkBAIC0yNTgsNyArMjY0LDcgQEAKICJSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZDEoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKm4pCitieXRlc2lvX3JlYWQxKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpuKQogewogICAgIFB5T2JqZWN0ICphcmcsICpyZXM7CiAKQEAgLTI3OCw3ICsyODQsNyBAQAogIlJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLlxuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3JlYWRsaW5lKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNpb19yZWFkbGluZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG47CiAgICAgY2hhciAqb3V0cHV0OwpAQCAtMjg5LDcgKzI5NSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkbGluZSIsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeUluZGV4X0NoZWNrKGFyZykpIHsKKyAgICBpZiAoUHlOdW1iZXJfQ2hlY2soYXJnKSkgewogICAgICAgICBzaXplID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CiAgICAgICAgIGlmIChzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMxMiw3ICszMTgsNyBAQAogICAgICAgICBzZWxmLT5wb3MgLT0gc2l6ZTsKICAgICB9CiAKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBuKTsKKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIG4pOwogfQogCiBQeURvY19TVFJWQVIocmVhZGxpbmVzX2RvYywKQEAgLTMyMyw3ICszMjksNyBAQAogInRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbGluZXMgcmV0dXJuZWQuXG4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZGxpbmVzKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNpb19yZWFkbGluZXMoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBtYXhzaXplLCBzaXplLCBuOwogICAgIFB5T2JqZWN0ICpyZXN1bHQsICpsaW5lOwpAQCAtMzM1LDcgKzM0MSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkbGluZXMiLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlJbmRleF9DaGVjayhhcmcpKSB7CisgICAgaWYgKFB5TnVtYmVyX0NoZWNrKGFyZykpIHsKICAgICAgICAgbWF4c2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX092ZXJmbG93RXJyb3IpOwogICAgICAgICBpZiAobWF4c2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTYsNyArMzYyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB3aGlsZSAoKG4gPSBnZXRfbGluZShzZWxmLCAmb3V0cHV0KSkgIT0gMCkgewotICAgICAgICBsaW5lID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBuKTsKKyAgICAgICAgbGluZSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBuKTsKICAgICAgICAgaWYgKCFsaW5lKQogICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmVzdWx0LCBsaW5lKSA9PSAtMSkgewpAQCAtMzgyLDM1ICszODgsNDIgQEAKICJpcyBzZXQgbm90IHRvIGJsb2NrIGFzIGhhcyBubyBkYXRhIHRvIHJlYWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3JlYWRpbnRvKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpidWZmZXIpCitieXRlc2lvX3JlYWRpbnRvKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHZvaWQgKnJhd19idWZmZXI7Ci0gICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IGxlbiwgbjsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmIChQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKGJ1ZmZlciwgJnJhd19idWZmZXIsICZsZW4pID09IC0xKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyoiLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoc2VsZi0+cG9zICsgbGVuID4gc2VsZi0+c3RyaW5nX3NpemUpCi0gICAgICAgIGxlbiA9IHNlbGYtPnN0cmluZ19zaXplIC0gc2VsZi0+cG9zOworICAgIGxlbiA9IGJ1Zi5sZW47CisgICAgLyogYWRqdXN0IGludmFsaWQgc2l6ZXMgKi8KKyAgICBuID0gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3M7CisgICAgaWYgKGxlbiA+IG4pIHsKKyAgICAgICAgbGVuID0gbjsKKyAgICAgICAgaWYgKGxlbiA8IDApCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KIAotICAgIG1lbWNweShyYXdfYnVmZmVyLCBzZWxmLT5idWYgKyBzZWxmLT5wb3MsIGxlbik7CisgICAgbWVtY3B5KGJ1Zi5idWYsIHNlbGYtPmJ1ZiArIHNlbGYtPnBvcywgbGVuKTsKICAgICBhc3NlcnQoc2VsZi0+cG9zICsgbGVuIDwgUFlfU1NJWkVfVF9NQVgpOwogICAgIGFzc2VydChsZW4gPj0gMCk7CiAgICAgc2VsZi0+cG9zICs9IGxlbjsKIAotICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChsZW4pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwogfQogCiBQeURvY19TVFJWQVIodHJ1bmNhdGVfZG9jLAogInRydW5jYXRlKFtzaXplXSkgLT4gaW50LiAgVHJ1bmNhdGUgdGhlIGZpbGUgdG8gYXQgbW9zdCBzaXplIGJ5dGVzLlxuIgogIlxuIgogIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLlxuIgotIlJldHVybnMgdGhlIG5ldyBzaXplLiAgSW1wbHkgYW4gYWJzb2x1dGUgc2VlayB0byB0aGUgcG9zaXRpb24gc2l6ZS4iKTsKKyJUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIHVuY2hhbmdlZC4gIFJldHVybnMgdGhlIG5ldyBzaXplLlxuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3RydW5jYXRlKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNpb190cnVuY2F0ZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CkBAIC00MjAsNyArNDMzLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5SW5kZXhfQ2hlY2soYXJnKSkgeworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CiAgICAgICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKICAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDQ3LDExICs0NjAsMTEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChzaXplKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19pdGVybmV4dChCeXRlc0lPT2JqZWN0ICpzZWxmKQorYnl0ZXNpb19pdGVybmV4dChieXRlc2lvICpzZWxmKQogewogICAgIGNoYXIgKm5leHQ7CiAgICAgUHlfc3NpemVfdCBuOwpAQCAtNDYzLDcgKzQ3Niw3IEBACiAgICAgaWYgKCFuZXh0IHx8IG4gPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUobmV4dCwgbik7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUobmV4dCwgbik7CiB9CiAKIFB5RG9jX1NUUlZBUihzZWVrX2RvYywKQEAgLTQ3NiwyNyArNDg5LDIxIEBACiAiUmV0dXJucyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19zZWVrKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNpb19zZWVrKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpwb3Nfb2JqLCAqbW9kZV9vYmo7CisgICAgUHlPYmplY3QgKnBvc29iajsKICAgICBQeV9zc2l6ZV90IHBvczsKICAgICBpbnQgbW9kZSA9IDA7CiAKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKLSAgICAvKiBTcGVjaWFsLWNhc2UgZm9yIDIueCB0byBwcmV2ZW50IGZsb2F0cyBmcm9tIHBhc3NpbmcgdGhyb3VnaC4KLSAgICAgICBUaGlzIG9ubHkgbmVlZGVkIHRvIG1ha2UgYSB0ZXN0IGluIHRlc3RfaW8gc3VjY2VlZC4gKi8KLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZWVrIiwgMSwgMiwgJnBvc19vYmosICZtb2RlX29iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeUZsb2F0X0NoZWNrKHBvc19vYmopKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibnxpOnNlZWsiLCAmcG9zLCAmbW9kZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6c2VlayIsICZwb3NvYmosICZtb2RlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBwb3MgPSBQeU51bWJlcl9Bc1NzaXplX3QocG9zb2JqLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICBpZiAocG9zID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAogICAgIGlmIChwb3MgPCAwICYmIG1vZGUgPT0gMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJuZWdhdGl2ZSBzZWVrIHZhbHVlICV6ZCIsIHBvcyk7CkBAIC01MzIsNyArNTM5LDcgQEAKICAgICAgICAgcG9zID0gMDsKICAgICBzZWxmLT5wb3MgPSBwb3M7CiAKLSAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3Qoc2VsZi0+cG9zKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7CiB9CiAKIFB5RG9jX1NUUlZBUih3cml0ZV9kb2MsCkBAIC01NDEsMzEgKzU0OCwyNCBAQAogIlJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3dyaXRlKEJ5dGVzSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCitieXRlc2lvX3dyaXRlKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgY29uc3QgY2hhciAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X3NzaXplX3QgbiA9IDA7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIC8qIFNwZWNpYWwtY2FzZSBpbiAyLnggdG8gcHJldmVudCB1bmljb2RlIG9iamVjdHMgdG8gcGFzcyB0aHJvdWdoLiAqLwotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sob2JqKSkgewotCSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGluZyBhIGJ5dGVzIG9iamVjdCwgZ290IHVuaWNvZGUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcihvYmosICh2b2lkICopJmJ5dGVzLCAmc2l6ZSkgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmYnVmLCBQeUJVRl9DT05USUdfUk8pIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoc2l6ZSAhPSAwKSB7Ci0gICAgICAgIG4gPSB3cml0ZV9ieXRlcyhzZWxmLCBieXRlcywgc2l6ZSk7Ci0gICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoYnVmLmxlbiAhPSAwKQorICAgICAgICBuID0gd3JpdGVfYnl0ZXMoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgaWYgKG4gPj0gMCkKKyAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogCi0gICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KG4pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKHdyaXRlbGluZXNfZG9jLApAQCAtNTc2LDcgKzU3Niw3IEBACiAiZWFjaCBzdHJpbmcuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3dyaXRlbGluZXMoQnl0ZXNJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCitieXRlc2lvX3dyaXRlbGluZXMoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlPYmplY3QgKml0LCAqaXRlbTsKICAgICBQeU9iamVjdCAqcmV0OwpAQCAtNjA5LDcgKzYwOSw3IEBACiAiY2xvc2UoKSAtPiBOb25lLiAgRGlzYWJsZSBhbGwgSS9PIG9wZXJhdGlvbnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2Nsb3NlKEJ5dGVzSU9PYmplY3QgKnNlbGYpCitieXRlc2lvX2Nsb3NlKGJ5dGVzaW8gKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmKTsKQEAgLTYxOCwyOSArNjE4LDE0NyBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgdm9pZAotYnl0ZXNpb19kZWFsbG9jKEJ5dGVzSU9PYmplY3QgKnNlbGYpCisvKiBQaWNrbGluZyBzdXBwb3J0LgorCisgICBOb3RlIHRoYXQgb25seSBwaWNrbGUgcHJvdG9jb2wgMiBhbmQgb253YXJkIGFyZSBzdXBwb3J0ZWQgc2luY2Ugd2UgdXNlCisgICBleHRlbmRlZCBfX3JlZHVjZV9fIEFQSSBvZiBQRVAgMzA3IHRvIG1ha2UgQnl0ZXNJTyBpbnN0YW5jZXMgcGlja2xhYmxlLgorCisgICBQcm92aWRpbmcgc3VwcG9ydCBmb3IgcHJvdG9jb2wgPCAyIHdvdWxkIHJlcXVpcmUgdGhlIF9fcmVkdWNlX2V4X18gbWV0aG9kCisgICB3aGljaCBpcyBub3RhYmx5IGxvbmctd2luZGVkIHdoZW4gZGVmaW5lZCBwcm9wZXJseS4KKworICAgRm9yIEJ5dGVzSU8sIHRoZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBzaW1pbGFyIHRvIG9uZSBjb2RlZCBmb3IKKyAgIG9iamVjdC5fX3JlZHVjZV9leF9fLCBidXQgc2xpZ2h0bHkgbGVzcyBnZW5lcmFsLiBUbyBiZSBtb3JlIHNwZWNpZmljLCB3ZQorICAgY291bGQgY2FsbCBieXRlc2lvX2dldHN0YXRlIGRpcmVjdGx5IGFuZCBhdm9pZCBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mCisgICBhIGZhbGxiYWNrIF9fcmVkdWNlX18gbWV0aG9kLiBIb3dldmVyLCB3ZSB3b3VsZCBzdGlsbCBuZWVkIGEgX19uZXdvYmpfXworICAgZnVuY3Rpb24gdG8gdXNlIHRoZSBlZmZpY2llbnQgaW5zdGFuY2UgcmVwcmVzZW50YXRpb24gb2YgUEVQIDMwNy4KKyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNpb19nZXRzdGF0ZShieXRlc2lvICpzZWxmKQogeworICAgIFB5T2JqZWN0ICppbml0dmFsdWUgPSBieXRlc2lvX2dldHZhbHVlKHNlbGYpOworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKworICAgIGlmIChpbml0dmFsdWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNlbGYtPmRpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIGRpY3QgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGljdCA9IFB5RGljdF9Db3B5KHNlbGYtPmRpY3QpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RhdGUgPSBQeV9CdWlsZFZhbHVlKCIoT25OKSIsIGluaXR2YWx1ZSwgc2VsZi0+cG9zLCBkaWN0KTsKKyAgICBQeV9ERUNSRUYoaW5pdHZhbHVlKTsKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc2lvX3NldHN0YXRlKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpwb3NpdGlvbl9vYmo7CisgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgUHlfc3NpemVfdCBwb3M7CisKKyAgICBhc3NlcnQoc3RhdGUgIT0gTlVMTCk7CisKKyAgICAvKiBXZSBhbGxvdyB0aGUgc3RhdGUgdHVwbGUgdG8gYmUgbG9uZ2VyIHRoYW4gMywgYmVjYXVzZSB3ZSBtYXkgbmVlZAorICAgICAgIHNvbWVkYXkgdG8gZXh0ZW5kIHRoZSBvYmplY3QncyBzdGF0ZSB3aXRob3V0IGJyZWFraW5nCisgICAgICAgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4gKi8KKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpIHx8IFB5X1NJWkUoc3RhdGUpIDwgMykgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcy5fX3NldHN0YXRlX18gYXJndW1lbnQgc2hvdWxkIGJlIDMtdHVwbGUsIGdvdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgUHlfVFlQRShzdGF0ZSktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogUmVzZXQgdGhlIG9iamVjdCB0byBpdHMgZGVmYXVsdCBzdGF0ZS4gVGhpcyBpcyBvbmx5IG5lZWRlZCB0byBoYW5kbGUKKyAgICAgICB0aGUgY2FzZSBvZiByZXBlYXRlZCBjYWxscyB0byBfX3NldHN0YXRlX18uICovCisgICAgc2VsZi0+c3RyaW5nX3NpemUgPSAwOworICAgIHNlbGYtPnBvcyA9IDA7CisKKyAgICAvKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuIElmIHN0YXRlWzBdIGRvZXMgbm90IHN1cHBvcnQgdGhlCisgICAgICAgYnVmZmVyIHByb3RvY29sLCBieXRlc2lvX3dyaXRlIHdpbGwgcmFpc2UgdGhlIGFwcHJvcHJpYXRlIFR5cGVFcnJvci4gKi8KKyAgICByZXN1bHQgPSBieXRlc2lvX3dyaXRlKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDApKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworCisgICAgLyogU2V0IGNhcmVmdWxseSB0aGUgcG9zaXRpb24gdmFsdWUuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHVzZSB0aGUgc2VlaworICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBzZWxmLT5wb3MgZGlyZWN0bHkgdG8gYmV0dGVyIHByb3RlY3QgdGhlCisgICAgICAgb2JqZWN0IGludGVybmFsIHN0YXRlIGFnYWluc3QgZXJybmVvdXMgKG9yIG1hbGljaW91cykgaW5wdXRzLiAqLworICAgIHBvc2l0aW9uX29iaiA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDEpOworICAgIGlmICghUHlJbmRleF9DaGVjayhwb3NpdGlvbl9vYmopKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGl0ZW0gb2Ygc3RhdGUgbXVzdCBiZSBhbiBpbnRlZ2VyLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocG9zaXRpb25fb2JqKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwb3MgPSBQeU51bWJlcl9Bc1NzaXplX3QocG9zaXRpb25fb2JqLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICBpZiAocG9zID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChwb3MgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2VsZi0+cG9zID0gcG9zOworCisgICAgLyogU2V0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMuICovCisgICAgZGljdCA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDIpOworICAgIGlmIChkaWN0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gb2Ygc3RhdGUgc2hvdWxkIGJlIGEgZGljdCwgZ290IGEgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3QpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChzZWxmLT5kaWN0KSB7CisgICAgICAgICAgICAvKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCByZXBsYWNlIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICBjb21wbGV0ZWx5LiBIb3dldmVyLCBpdCBzZWVtcyBtb3JlIHByYWN0aWNhbCB0byBqdXN0IHVwZGF0ZSBpdC4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKHNlbGYtPmRpY3QsIGRpY3QpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHNlbGYtPmRpY3QgPSBkaWN0OworICAgICAgICB9CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkCitieXRlc2lvX2RlYWxsb2MoYnl0ZXNpbyAqc2VsZikKK3sKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+YnVmICE9IE5VTEwpIHsKICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWYpOwogICAgICAgICBzZWxmLT5idWYgPSBOVUxMOwogICAgIH0KKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzaW9fbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIEJ5dGVzSU9PYmplY3QgKnNlbGY7CisgICAgYnl0ZXNpbyAqc2VsZjsKIAogICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7Ci0gICAgc2VsZiA9IChCeXRlc0lPT2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgc2VsZiA9IChieXRlc2lvICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IDA7Ci0gICAgc2VsZi0+cG9zID0gMDsKLSAgICBzZWxmLT5idWZfc2l6ZSA9IDA7CisgICAgLyogdHBfYWxsb2MgaW5pdGlhbGl6ZXMgYWxsIHRoZSBmaWVsZHMgdG8gemVyby4gU28gd2UgZG9uJ3QgaGF2ZSB0bworICAgICAgIGluaXRpYWxpemUgdGhlbSBoZXJlLiAqLworCiAgICAgc2VsZi0+YnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2MoMCk7CiAgICAgaWYgKHNlbGYtPmJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKQEAgLTY1MSwxMSArNzY5LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ5dGVzaW9faW5pdChCeXRlc0lPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitieXRlc2lvX2luaXQoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogeworICAgIGNoYXIgKmt3bGlzdFtdID0geyJpbml0aWFsX2J5dGVzIiwgTlVMTH07CiAgICAgUHlPYmplY3QgKmluaXR2YWx1ZSA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOkJ5dGVzSU8iLCAmaW5pdHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE86Qnl0ZXNJTyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5pdHZhbHVlKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogSW4gY2FzZSwgX19pbml0X18gaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiAqLwpAQCAtNjc0LDEwICs3OTQsMjUgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorYnl0ZXNpb190cmF2ZXJzZShieXRlc2lvICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYnl0ZXNpb19jbGVhcihieXRlc2lvICpzZWxmKQoreworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCisKIHN0YXRpYyBQeUdldFNldERlZiBieXRlc2lvX2dldHNldGxpc3RbXSA9IHsKICAgICB7ImNsb3NlZCIsICAoZ2V0dGVyKWJ5dGVzaW9fZ2V0X2Nsb3NlZCwgTlVMTCwKICAgICAgIlRydWUgaWYgdGhlIGZpbGUgaXMgY2xvc2VkLiJ9LAotICAgIHswfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBieXRlc2lvX21ldGhvZHNbXSA9IHsKQEAgLTY5MSwxMyArODI2LDE1IEBACiAgICAgeyJ3cml0ZSIsICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fd3JpdGUsICAgICAgTUVUSF9PLCB3cml0ZV9kb2N9LAogICAgIHsid3JpdGVsaW5lcyIsIChQeUNGdW5jdGlvbilieXRlc2lvX3dyaXRlbGluZXMsIE1FVEhfTywgd3JpdGVsaW5lc19kb2N9LAogICAgIHsicmVhZDEiLCAgICAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWQxLCAgICAgIE1FVEhfTywgcmVhZDFfZG9jfSwKLSAgICB7InJlYWRpbnRvIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkaW50bywgICBNRVRIX08sIHJlYWRpbnRvX2RvY30sCisgICAgeyJyZWFkaW50byIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZGludG8sICAgTUVUSF9WQVJBUkdTLCByZWFkaW50b19kb2N9LAogICAgIHsicmVhZGxpbmUiLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWRsaW5lLCAgIE1FVEhfVkFSQVJHUywgcmVhZGxpbmVfZG9jfSwKICAgICB7InJlYWRsaW5lcyIsICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkbGluZXMsICBNRVRIX1ZBUkFSR1MsIHJlYWRsaW5lc19kb2N9LAogICAgIHsicmVhZCIsICAgICAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWQsICAgICAgIE1FVEhfVkFSQVJHUywgcmVhZF9kb2N9LAotICAgIHsiZ2V0dmFsdWUiLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX2dldHZhbHVlLCAgIE1FVEhfVkFSQVJHUywgZ2V0dmFsX2RvY30sCisgICAgeyJnZXR2YWx1ZSIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0dmFsdWUsICAgTUVUSF9OT0FSR1MsICBnZXR2YWxfZG9jfSwKICAgICB7InNlZWsiLCAgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19zZWVrLCAgICAgICBNRVRIX1ZBUkFSR1MsIHNlZWtfZG9jfSwKICAgICB7InRydW5jYXRlIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb190cnVuY2F0ZSwgICBNRVRIX1ZBUkFSR1MsIHRydW5jYXRlX2RvY30sCisgICAgeyJfX2dldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0c3RhdGUsICBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX3NldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fc2V0c3RhdGUsICBNRVRIX08sIE5VTEx9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTcwNywxNiArODQ0LDE2IEBACiAiQ3JlYXRlIGEgYnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBieXRlc1xuIgogImJ1ZmZlciwgcmVhZHkgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIik7CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgQnl0ZXNJT19UeXBlID0geworUHlUeXBlT2JqZWN0IFB5Qnl0ZXNJT19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfYnl0ZXNpby5fQnl0ZXNJTyIsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihCeXRlc0lPT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgIl9pby5CeXRlc0lPIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKGJ5dGVzaW8pLCAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCiAgICAgKGRlc3RydWN0b3IpYnl0ZXNpb19kZWFsbG9jLCAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KQEAgLTcyNywxMiArODY0LDEzIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwKKyAgICBQeV9UUEZMQUdTX0hBVkVfR0MsICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCiAgICAgYnl0ZXNpb19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgICh0cmF2ZXJzZXByb2MpYnl0ZXNpb190cmF2ZXJzZSwgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAoaW5xdWlyeSlieXRlc2lvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICBvZmZzZXRvZihieXRlc2lvLCB3ZWFrcmVmbGlzdCksICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgKGl0ZXJuZXh0ZnVuYylieXRlc2lvX2l0ZXJuZXh0LCAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIGJ5dGVzaW9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwpAQCAtNzQyLDIyICs4ODAsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KKyAgICBvZmZzZXRvZihieXRlc2lvLCBkaWN0KSwgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KICAgICAoaW5pdHByb2MpYnl0ZXNpb19pbml0LCAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgYnl0ZXNpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KIH07Ci0KLVB5TU9ESU5JVF9GVU5DCi1pbml0X2J5dGVzaW8odm9pZCkKLXsKLSAgICBQeU9iamVjdCAqbTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJkJ5dGVzSU9fVHlwZSkgPCAwKQotICAgICAgICByZXR1cm47Ci0gICAgbSA9IFB5X0luaXRNb2R1bGUoIl9ieXRlc2lvIiwgTlVMTCk7Ci0gICAgaWYgKG0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5X0lOQ1JFRigmQnl0ZXNJT19UeXBlKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9CeXRlc0lPIiwgKFB5T2JqZWN0ICopJkJ5dGVzSU9fVHlwZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2ZpbGVpby5jCnJlbmFtZSB0byBNb2R1bGVzL19pby9maWxlaW8uYwppbmRleCA1NDM2YTY0Li44MzkyMWVhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19maWxlaW8uYworKysgYi9Nb2R1bGVzL19pby9maWxlaW8uYwpAQCAtMiwxMCArMiwxNyBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9GQ05UTF9ICiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBGb3Igb2Zmc2V0b2YgKi8KKyNpbmNsdWRlICJfaW9tb2R1bGUuaCIKIAogLyoKICAqIEtub3duIGxpa2VseSBwcm9ibGVtczoKQEAgLTI3LDYzICszNCw5OCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCisjaWYgQlVGU0laIDwgKDgqMTAyNCkKKyNkZWZpbmUgU01BTExDSFVOSyAoOCoxMDI0KQorI2VsaWYgKEJVRlNJWiA+PSAoMiA8PCAyNSkpCisjZXJyb3IgInVucmVhc29uYWJsZSBCVUZTSVogPiA2NE1CIGRlZmluZWQiCisjZWxzZQorI2RlZmluZSBTTUFMTENIVU5LIEJVRlNJWgorI2VuZGlmCisKKyNpZiBTSVpFT0ZfSU5UIDwgNAorI2RlZmluZSBCSUdDSFVOSyAgKDUxMiAqIDMyKQorI2Vsc2UKKyNkZWZpbmUgQklHQ0hVTksgICg1MTIgKiAxMDI0KQorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgaW50IGZkOwogICAgIHVuc2lnbmVkIGludCByZWFkYWJsZSA6IDE7CiAgICAgdW5zaWduZWQgaW50IHdyaXRhYmxlIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwotICAgIHNpZ25lZCBpbnQgY2xvc2VmZCA6IDE7CisgICAgdW5zaWduZWQgaW50IGNsb3NlZmQgOiAxOwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKLX0gUHlGaWxlSU9PYmplY3Q7CisgICAgUHlPYmplY3QgKmRpY3Q7Cit9IGZpbGVpbzsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CiAKICNkZWZpbmUgUHlGaWxlSU9fQ2hlY2sob3ApIChQeU9iamVjdF9UeXBlQ2hlY2soKG9wKSwgJlB5RmlsZUlPX1R5cGUpKQogCitpbnQKK19QeUZpbGVJT19jbG9zZWQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuICgoZmlsZWlvICopc2VsZiktPmZkIDwgMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIHBvcnRhYmxlX2xzZWVrKGludCBmZCwgUHlPYmplY3QgKnBvc29iaiwgaW50IHdoZW5jZSk7CiAKLS8qIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyAod2hpY2ggaXMgPCAwKSBvbiBmYWlsdXJlLiAqLworc3RhdGljIFB5T2JqZWN0ICpwb3J0YWJsZV9sc2VlayhpbnQgZmQsIFB5T2JqZWN0ICpwb3NvYmosIGludCB3aGVuY2UpOworCisvKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgd2l0aCBleGNlcHRpb24gc2V0IG9uIGZhaWx1cmUuICovCiBzdGF0aWMgaW50Ci1pbnRlcm5hbF9jbG9zZShQeUZpbGVJT09iamVjdCAqc2VsZikKK2ludGVybmFsX2Nsb3NlKGZpbGVpbyAqc2VsZikKIHsKKyAgICBpbnQgZXJyID0gMDsKICAgICBpbnQgc2F2ZV9lcnJubyA9IDA7CiAgICAgaWYgKHNlbGYtPmZkID49IDApIHsKICAgICAgICAgaW50IGZkID0gc2VsZi0+ZmQ7CiAgICAgICAgIHNlbGYtPmZkID0gLTE7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgaWYgKGNsb3NlKGZkKSA8IDApCisgICAgICAgIC8qIGZkIGlzIGFjY2Vzc2libGUgYW5kIHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBjbG9zZWQgaXQgKi8KKyAgICAgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IGNsb3NlKGZkKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgIHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzYXZlX2Vycm5vID0gZXJybm87Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gc2F2ZV9lcnJubzsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBlcnJubyA9IHNhdmVfZXJybm87CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19jbG9zZShQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19jbG9zZShmaWxlaW8gKnNlbGYpCiB7CiAgICAgaWYgKCFzZWxmLT5jbG9zZWZkKSB7CiAgICAgICAgIHNlbGYtPmZkID0gLTE7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KICAgICBlcnJubyA9IGludGVybmFsX2Nsb3NlKHNlbGYpOwotICAgIGlmIChlcnJubyA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgIGlmIChlcnJubyA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAotICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKChQeU9iamVjdCopJlB5UmF3SU9CYXNlX1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgIk8iLCBzZWxmKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmtld3MpCitmaWxlaW9fbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIFB5RmlsZUlPT2JqZWN0ICpzZWxmOworICAgIGZpbGVpbyAqc2VsZjsKIAogICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CiAKLSAgICBzZWxmID0gKFB5RmlsZUlPT2JqZWN0ICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIHNlbGYgPSAoZmlsZWlvICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwogICAgIGlmIChzZWxmICE9IE5VTEwpIHsKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKICAgICAgICAgc2VsZi0+cmVhZGFibGUgPSAwOwpAQCAtMTAxLDcgKzE0Myw3IEBACiAgICBkaXJlY3Rvcmllcywgc28gd2UgbmVlZCBhIGNoZWNrLiAgKi8KIAogc3RhdGljIGludAotZGlyY2hlY2soUHlGaWxlSU9PYmplY3QqIHNlbGYsIGNoYXIgKm5hbWUpCitkaXJjaGVjayhmaWxlaW8qIHNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAjaWYgZGVmaW5lZChIQVZFX0ZTVEFUKSAmJiBkZWZpbmVkKFNfSUZESVIpICYmIGRlZmluZWQoRUlTRElSKQogICAgIHN0cnVjdCBzdGF0IGJ1ZjsKQEAgLTExMCw3ICsxNTIsOCBAQAogICAgIGlmIChmc3RhdChzZWxmLT5mZCwgJmJ1ZikgPT0gMCAmJiBTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgewogICAgICAgICBjaGFyICptc2cgPSBzdHJlcnJvcihFSVNESVIpOwogICAgICAgICBQeU9iamVjdCAqZXhjOwotICAgICAgICBpbnRlcm5hbF9jbG9zZShzZWxmKTsKKyAgICAgICAgaWYgKGludGVybmFsX2Nsb3NlKHNlbGYpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgIGV4YyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19JT0Vycm9yLCAiKGlzcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUlTRElSLCBtc2csIG5hbWUpOwpAQCAtMTI3LDcgKzE3MCw3IEBACiB7CiAjaWYgZGVmaW5lZChIQVZFX0ZTVEFUKQogICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICBpZiAoZnN0YXQoZmQsICZidWYpIDwgMCAmJiBlcnJubyA9PSBFQkFERikgeworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSB8fCAoZnN0YXQoZmQsICZidWYpIDwgMCAmJiBlcnJubyA9PSBFQkFERikpIHsKICAgICAgICAgUHlPYmplY3QgKmV4YzsKICAgICAgICAgY2hhciAqbXNnID0gc3RyZXJyb3IoRUJBREYpOwogICAgICAgICBleGMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfT1NFcnJvciwgIihpcykiLApAQCAtMTQ0LDkgKzE4NywxMCBAQAogc3RhdGljIGludAogZmlsZWlvX2luaXQoUHlPYmplY3QgKm9zZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgUHlGaWxlSU9PYmplY3QgKnNlbGYgPSAoUHlGaWxlSU9PYmplY3QgKikgb3NlbGY7CisgICAgZmlsZWlvICpzZWxmID0gKGZpbGVpbyAqKSBvc2VsZjsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAibW9kZSIsICJjbG9zZWZkIiwgTlVMTH07Ci0gICAgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWVvYmosICpzdHJpbmdvYmogPSBOVUxMOwogICAgIGNoYXIgKm1vZGUgPSAiciI7CiAgICAgY2hhciAqczsKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0xNjUsNDEgKzIwOSw1NSBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIml8c2k6ZmlsZWlvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmZkLCAmbW9kZSwgJmNsb3NlZmQpKSB7Ci0gICAgICAgIGlmIChmZCA8IDApIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzaTpmaWxlaW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm5hbWVvYmosICZtb2RlLCAmY2xvc2VmZCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChQeUZsb2F0X0NoZWNrKG5hbWVvYmopKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmZCA9IFB5TG9uZ19Bc0xvbmcobmFtZW9iaik7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWdhdGl2ZSBmaWxlZGVzY3JpcHRvciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjaGVja19mZChmZCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGVsc2UgewogICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotICAgICAgICBpZiAoR2V0VmVyc2lvbigpIDwgMHg4MDAwMDAwMCkgewotICAgICAgICAvKiBPbiBOVCwgc28gd2lkZSBBUEkgYXZhaWxhYmxlICovCi0gICAgICAgIFB5T2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiVXxzaTpmaWxlaW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnBvLCAmbW9kZSwgJmNsb3NlZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICB3aWRlbmFtZSA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93Ci0gICAgICAgICAgICAgICBzdHJpbmdzIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh3aWRlbmFtZSA9PSBOVUxMKQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQorICAgICAgICB3aWRlbmFtZSA9IFB5VW5pY29kZV9BU19VTklDT0RFKG5hbWVvYmopOworICAgIGlmICh3aWRlbmFtZSA9PSBOVUxMKQogI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImV0fHNpOmZpbGVpbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZtb2RlLCAmY2xvc2VmZCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGZkIDwgMCkKKyAgICB7CisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKG5hbWVvYmopIHx8IFB5Qnl0ZUFycmF5X0NoZWNrKG5hbWVvYmopKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG5hbWVsZW47CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKG5hbWVvYmosICZuYW1lLCAmbmFtZWxlbikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp1ID0gUHlVbmljb2RlX0Zyb21PYmplY3QobmFtZW9iaik7CisKKyAgICAgICAgICAgIGlmICh1ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICBzdHJpbmdvYmogPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKAorICAgICAgICAgICAgICAgIHUsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgaWYgKHN0cmluZ29iaiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICghUHlCeXRlc19DaGVjayhzdHJpbmdvYmopKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kZXIgZmFpbGVkIHRvIHJldHVybiBieXRlcyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuYW1lID0gUHlCeXRlc19BU19TVFJJTkcoc3RyaW5nb2JqKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEwLDcgKzI2OCw4IEBACiAgICAgICAgICAgICBpZiAocndhKSB7CiAgICAgICAgICAgICBiYWRfbW9kZToKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiByZWFkL3dyaXRlL2FwcGVuZCBtb2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXN0IGhhdmUgZXhhY3RseSBvbmUgb2YgcmVhZC93cml0ZS9hcHBlbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kZSBhbmQgYXQgbW9zdCBvbmUgcGx1cyIpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByd2EgPSAxOwpAQCAtMjY2LDYgKzMyNSw4IEBACiAjZW5kaWYKIAogICAgIGlmIChmZCA+PSAwKSB7CisgICAgICAgIGlmIChjaGVja19mZChmZCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzZWxmLT5mZCA9IGZkOwogICAgICAgICBzZWxmLT5jbG9zZWZkID0gY2xvc2VmZDsKICAgICB9CkBAIC0yOTksMTMgKzM2MCwyMSBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAibmFtZSIsIG5hbWVvYmopIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKwogICAgIGlmIChhcHBlbmQpIHsKICAgICAgICAgLyogRm9yIGNvbnNpc3RlbnQgYmVoYXZpb3VyLCB3ZSBleHBsaWNpdGx5IHNlZWsgdG8gdGhlCiAgICAgICAgICAgIGVuZCBvZiBmaWxlIChvdGhlcndpc2UsIGl0IG1pZ2h0IGJlIGRvbmUgb25seSBvbiB0aGUKICAgICAgICAgICAgZmlyc3Qgd3JpdGUoKSkuICovCiAgICAgICAgIFB5T2JqZWN0ICpwb3MgPSBwb3J0YWJsZV9sc2VlayhzZWxmLT5mZCwgTlVMTCwgMik7Ci0gICAgICAgIGlmIChwb3MgPT0gTlVMTCkKKyAgICAgICAgaWYgKHBvcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoY2xvc2VmZCkgeworICAgICAgICAgICAgICAgIGNsb3NlKHNlbGYtPmZkKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5mZCA9IC0xOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYocG9zKTsKICAgICB9CiAKQEAgLTMxNSwyNCArMzg0LDMzIEBACiAgICAgcmV0ID0gLTE7CiAKICBkb25lOgotICAgIFB5TWVtX0ZyZWUobmFtZSk7CisgICAgUHlfQ0xFQVIoc3RyaW5nb2JqKTsKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZAotZmlsZWlvX2RlYWxsb2MoUHlGaWxlSU9PYmplY3QgKnNlbGYpCitzdGF0aWMgaW50CitmaWxlaW9fdHJhdmVyc2UoZmlsZWlvICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZmlsZWlvX2NsZWFyKGZpbGVpbyAqc2VsZikKK3sKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ZpbGVpb19kZWFsbG9jKGZpbGVpbyAqc2VsZikKK3sKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7Ci0KLSAgICBpZiAoc2VsZi0+ZmQgPj0gMCAmJiBzZWxmLT5jbG9zZWZkKSB7Ci0gICAgICAgIGVycm5vID0gaW50ZXJuYWxfY2xvc2Uoc2VsZik7Ci0gICAgICAgIGlmIChlcnJubyA8IDApIHsKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJjbG9zZSBmYWlsZWQ6IFtFcnJubyAlZF0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CiAKQEAgLTM1MSw3ICs0MjksNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX2ZpbGVubyhQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19maWxlbm8oZmlsZWlvICpzZWxmKQogewogICAgIGlmIChzZWxmLT5mZCA8IDApCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CkBAIC0zNTksNyArNDM3LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZWFkYWJsZShQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19yZWFkYWJsZShmaWxlaW8gKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKQEAgLTM2Nyw3ICs0NDUsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3dyaXRhYmxlKFB5RmlsZUlPT2JqZWN0ICpzZWxmKQorZmlsZWlvX3dyaXRhYmxlKGZpbGVpbyAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtMzc1LDI1ICs0NTMsMjUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19zZWVrYWJsZShQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19zZWVrYWJsZShmaWxlaW8gKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICBpZiAoc2VsZi0+c2Vla2FibGUgPCAwKSB7Ci0gICAgICAgIGludCByZXQ7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmV0ID0gbHNlZWsoc2VsZi0+ZmQsIDAsIFNFRUtfQ1VSKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgIFB5T2JqZWN0ICpwb3MgPSBwb3J0YWJsZV9sc2VlayhzZWxmLT5mZCwgTlVMTCwgU0VFS19DVVIpOworICAgICAgICBpZiAocG9zID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBzZWxmLT5zZWVrYWJsZSA9IDA7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihwb3MpOwogICAgICAgICAgICAgc2VsZi0+c2Vla2FibGUgPSAxOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIHNlbGYtPnNlZWthYmxlKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZWFkaW50byhQeUZpbGVJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmaWxlaW9fcmVhZGludG8oZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICBQeV9zc2l6ZV90IG47CkBAIC00MDYsMTAgKzQ4NCwxMyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyoiLCAmcGJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVycm5vID0gMDsKLSAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IGVsc2UKKyAgICAgICAgbiA9IC0xOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIGlmIChuIDwgMCkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQpAQCAtNDIxLDIzICs1MDIsNjIgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCi0jZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgKDgqMTAyNCkKK3N0YXRpYyBzaXplX3QKK25ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplKQoreworI2lmZGVmIEhBVkVfRlNUQVQKKyAgICBvZmZfdCBwb3MsIGVuZDsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBpZiAoZnN0YXQoc2VsZi0+ZmQsICZzdCkgPT0gMCkgeworICAgICAgICBlbmQgPSBzdC5zdF9zaXplOworICAgICAgICBwb3MgPSBsc2VlayhzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKKyAgICAgICAgLyogRmlsZXMgY2xhaW1pbmcgYSBzaXplIHNtYWxsZXIgdGhhbiBTTUFMTENIVU5LIG1heQorICAgICAgICAgICBhY3R1YWxseSBiZSBzdHJlYW1pbmcgcHNldWRvLWZpbGVzLiBJbiB0aGlzIGNhc2UsIHdlCisgICAgICAgICAgIGFwcGx5IHRoZSBtb3JlIGFnZ3Jlc3NpdmUgYWxnb3JpdGhtIGJlbG93LgorICAgICAgICAqLworICAgICAgICBpZiAoZW5kID49IFNNQUxMQ0hVTksgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCkgeworICAgICAgICAgICAgLyogQWRkIDEgc28gaWYgdGhlIGZpbGUgd2VyZSB0byBncm93IHdlJ2Qgbm90aWNlLiAqLworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRzaXplICsgZW5kIC0gcG9zICsgMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChjdXJyZW50c2l6ZSA+IFNNQUxMQ0hVTkspIHsKKyAgICAgICAgLyogS2VlcCBkb3VibGluZyB1bnRpbCB3ZSByZWFjaCBCSUdDSFVOSzsKKyAgICAgICAgICAgdGhlbiBrZWVwIGFkZGluZyBCSUdDSFVOSy4gKi8KKyAgICAgICAgaWYgKGN1cnJlbnRzaXplIDw9IEJJR0NIVU5LKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRzaXplICsgY3VycmVudHNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50c2l6ZSArIEJJR0NIVU5LOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudHNpemUgKyBTTUFMTENIVU5LOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3JlYWRhbGwoUHlGaWxlSU9PYmplY3QgKnNlbGYpCitmaWxlaW9fcmVhZGFsbChmaWxlaW8gKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IHRvdGFsID0gMDsKICAgICBpbnQgbjsKIAotICAgIHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIERFRkFVTFRfQlVGRkVSX1NJWkUpOworICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgU01BTExDSFVOSyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgbmV3c2l6ZSA9IHRvdGFsICsgREVGQVVMVF9CVUZGRVJfU0laRTsKLSAgICAgICAgaWYgKFB5U3RyaW5nX0dFVF9TSVpFKHJlc3VsdCkgPCBuZXdzaXplKSB7Ci0gICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCBuZXdzaXplKSA8IDApIHsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCk7CisgICAgICAgIGlmIChuZXdzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgbmV3c2l6ZSA8PSAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAidW5ib3VuZGVkIHJlYWQgcmV0dXJuZWQgbW9yZSBieXRlcyAiCisgICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gc3RyaW5nIGNhbiBob2xkICIpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdCluZXdzaXplKSB7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIG5ld3NpemUpIDwgMCkgewogICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ0OSw3ICs1NjksNyBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsCi0gICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCisgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyB0b3RhbCwKICAgICAgICAgICAgICAgICAgbmV3c2l6ZSAtIHRvdGFsKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgaWYgKG4gPT0gMCkKQEAgLTQ2OCw4ICs1ODgsOCBAQAogICAgICAgICB0b3RhbCArPSBuOwogICAgIH0KIAotICAgIGlmIChQeVN0cmluZ19HRVRfU0laRShyZXN1bHQpID4gdG90YWwpIHsKLSAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgdG90YWwpIDwgMCkgeworICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiB0b3RhbCkgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIHRvdGFsKSA8IDApIHsKICAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGp1c3QgaW4gY2FzZSAqLwogICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ3OSw3ICs1OTksNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3JlYWQoUHlGaWxlSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZmlsZWlvX3JlYWQoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpwdHI7CiAgICAgUHlfc3NpemVfdCBuOwpAQCAtNDkxLDI0ICs2MTEsMjggQEAKICAgICBpZiAoIXNlbGYtPnJlYWRhYmxlKQogICAgICAgICByZXR1cm4gZXJyX21vZGUoInJlYWRpbmciKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG4iLCAmc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyYiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgcmV0dXJuIGZpbGVpb19yZWFkYWxsKHNlbGYpOwogICAgIH0KIAotICAgIGJ5dGVzID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSk7CisgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoYnl0ZXMpOworICAgIHB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKTsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBlcnJubyA9IDA7Ci0gICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgc2l6ZSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgc2l6ZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSBlbHNlCisgICAgICAgIG4gPSAtMTsKIAogICAgIGlmIChuIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKQEAgLTUxNiw3ICs2NDAsNyBAQAogICAgIH0KIAogICAgIGlmIChuICE9IHNpemUpIHsKLSAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJmJ5dGVzLCBuKSA8IDApIHsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmYnl0ZXMsIG4pIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC01MjYsNyArNjUwLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb193cml0ZShQeUZpbGVJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmaWxlaW9fd3JpdGUoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICBQeV9zc2l6ZV90IG47CkBAIC01MzksMTAgKzY2MywxMyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyoiLCAmcGJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVycm5vID0gMDsKLSAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHBidWYuYnVmLCBwYnVmLmxlbik7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gZWxzZQorICAgICAgICBuID0gLTE7CiAKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKIApAQCAtNTU4LDEyICs2ODUsNiBAQAogCiAvKiBYWFggV2luZG93cyBzdXBwb3J0IGJlbG93IGlzIGxpa2VseSBpbmNvbXBsZXRlICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCi10eXBlZGVmIFBZX0xPTkdfTE9ORyBQeV9vZmZfdDsKLSNlbHNlCi10eXBlZGVmIG9mZl90IFB5X29mZl90OwotI2VuZGlmCi0KIC8qIENyaWJiZWQgZnJvbSBwb3NpeF9sc2VlaygpICovCiBzdGF0aWMgUHlPYmplY3QgKgogcG9ydGFibGVfbHNlZWsoaW50IGZkLCBQeU9iamVjdCAqcG9zb2JqLCBpbnQgd2hlbmNlKQpAQCAtNTc5LDcgKzcwMCw3IEBACiAjaWYgU0VFS19DVVIgIT0gMQogICAgIGNhc2UgMTogd2hlbmNlID0gU0VFS19DVVI7IGJyZWFrOwogI2VuZGlmCi0jaWYgU0VFTF9FTkQgIT0gMgorI2lmIFNFRUtfRU5EICE9IDIKICAgICBjYXNlIDI6IHdoZW5jZSA9IFNFRUtfRU5EOyBicmVhazsKICNlbmRpZgogICAgIH0KQEAgLTYwMSwxMyArNzIyLDE2IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKLSAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKKyAgICAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIHdoZW5jZSk7CiAjZWxzZQotICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CisgICAgICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CiAjZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gZWxzZQorICAgICAgICByZXMgPSAtMTsKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIApAQCAtNjE5LDcgKzc0Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fc2VlayhQeUZpbGVJT09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmaWxlaW9fc2VlayhmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpwb3NvYmo7CiAgICAgaW50IHdoZW5jZSA9IDA7CkBAIC02MzQsNyArNzU4LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb190ZWxsKFB5RmlsZUlPT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2ZpbGVpb190ZWxsKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKQEAgLTY0NCw3ICs3NjgsNyBAQAogCiAjaWZkZWYgSEFWRV9GVFJVTkNBVEUKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fdHJ1bmNhdGUoUHlGaWxlSU9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZmlsZWlvX3RydW5jYXRlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnBvc29iaiA9IE5VTEw7IC8qIHRoZSBuZXcgc2l6ZSB3YW50ZWQgYnkgdGhlIHVzZXIgKi8KICNpZm5kZWYgTVNfV0lORE9XUwpAQCAtNzQ2LDcgKzg3MCw3IEBACiAjZW5kaWYgLyogSEFWRV9GVFJVTkNBVEUgKi8KIAogc3RhdGljIGNoYXIgKgotbW9kZV9zdHJpbmcoUHlGaWxlSU9PYmplY3QgKnNlbGYpCittb2RlX3N0cmluZyhmaWxlaW8gKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPnJlYWRhYmxlKSB7CiAgICAgICAgIGlmIChzZWxmLT53cml0YWJsZSkKQEAgLTc1OSwxNyArODgzLDM3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fcmVwcihQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19yZXByKGZpbGVpbyAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+ZmQgPCAwKQotICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCgiX2ZpbGVpby5fRmlsZUlPKC0xKSIpOworICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcmVzOwogCi0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIl9maWxlaW8uX0ZpbGVJTyglZCwgJyVzJykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZkLCBtb2RlX3N0cmluZyhzZWxmKSk7CisgICAgaWYgKHNlbGYtPmZkIDwgMCkKKyAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxfaW8uRmlsZUlPIFtjbG9zZWRdPiIpOworCisgICAgbmFtZW9iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopIHNlbGYsICJuYW1lIik7CisgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmVzID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiPF9pby5GaWxlSU8gZmQ9JWQgbW9kZT0nJXMnPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZkLCBtb2RlX3N0cmluZyhzZWxmKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqcmVwciA9IFB5T2JqZWN0X1JlcHIobmFtZW9iaik7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lb2JqKTsKKyAgICAgICAgaWYgKHJlcHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8X2lvLkZpbGVJTyBuYW1lPSVzIG1vZGU9JyVzJz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfc3RyaW5nKHNlbGYpKTsKKyAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgIH0KKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX2lzYXR0eShQeUZpbGVJT09iamVjdCAqc2VsZikKK2ZpbGVpb19pc2F0dHkoZmlsZWlvICpzZWxmKQogewogICAgIGxvbmcgcmVzOwogCkBAIC04MzgsNyArOTgyLDcgQEAKICJ0ZWxsKCkgLT4gaW50LiAgQ3VycmVudCBmaWxlIHBvc2l0aW9uIik7CiAKIFB5RG9jX1NUUlZBUihyZWFkaW50b19kb2MsCi0icmVhZGludG8oKSAtPiBVbmRvY3VtZW50ZWQuICBEb24ndCB1c2UgdGhpczsgaXQgbWF5IGdvIGF3YXkuIik7CisicmVhZGludG8oKSAtPiBTYW1lIGFzIFJhd0lPQmFzZS5yZWFkaW50bygpLiIpOwogCiBQeURvY19TVFJWQVIoY2xvc2VfZG9jLAogImNsb3NlKCkgLT4gTm9uZS4gIENsb3NlIHRoZSBmaWxlLlxuIgpAQCAtODgwLDIxICsxMDI0LDIxIEBACiAvKiAnY2xvc2VkJyBhbmQgJ21vZGUnIGFyZSBhdHRyaWJ1dGVzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0X2Nsb3NlZChQeUZpbGVJT09iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK2dldF9jbG9zZWQoZmlsZWlvICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpKHNlbGYtPmZkIDwgMCkpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0X2Nsb3NlZmQoUHlGaWxlSU9PYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCitnZXRfY2xvc2VmZChmaWxlaW8gKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZykoc2VsZi0+Y2xvc2VmZCkpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0X21vZGUoUHlGaWxlSU9PYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCitnZXRfbW9kZShmaWxlaW8gKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcobW9kZV9zdHJpbmcoc2VsZikpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2RlX3N0cmluZyhzZWxmKSk7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBmaWxlaW9fZ2V0c2V0bGlzdFtdID0gewpAQCAtOTAyLDE5ICsxMDQ2LDE5IEBACiAgICAgeyJjbG9zZWZkIiwgKGdldHRlcilnZXRfY2xvc2VmZCwgTlVMTCwKICAgICAgICAgIlRydWUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGNsb3NlZCJ9LAogICAgIHsibW9kZSIsIChnZXR0ZXIpZ2V0X21vZGUsIE5VTEwsICJTdHJpbmcgZ2l2aW5nIHRoZSBmaWxlIG1vZGUifSwKLSAgICB7MH0sCisgICAge05VTEx9LAogfTsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9GaWxlSU8iLAotICAgIHNpemVvZihQeUZpbGVJT09iamVjdCksCisgICAgIl9pby5GaWxlSU8iLAorICAgIHNpemVvZihmaWxlaW8pLAogICAgIDAsCiAgICAgKGRlc3RydWN0b3IpZmlsZWlvX2RlYWxsb2MsICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KICAgICAocmVwcmZ1bmMpZmlsZWlvX3JlcHIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KQEAgLTkyNSwxMiArMTA2OSwxMyBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgZmlsZWlvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgICh0cmF2ZXJzZXByb2MpZmlsZWlvX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlmaWxlaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIG9mZnNldG9mKFB5RmlsZUlPT2JqZWN0LCB3ZWFrcmVmbGlzdCksICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihmaWxlaW8sIHdlYWtyZWZsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBmaWxlaW9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTk0MCwyOCArMTA4NSw5IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIG9mZnNldG9mKGZpbGVpbywgZGljdCksICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwogICAgIGZpbGVpb19pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBmaWxlaW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIFB5T2JqZWN0X0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKLQotc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAge05VTEwsIE5VTEx9Ci19OwotCi1QeU1PRElOSVRfRlVOQwotaW5pdF9maWxlaW8odm9pZCkKLXsKLSAgICBQeU9iamVjdCAqbTsgICAgICAgIC8qIGEgbW9kdWxlIG9iamVjdCAqLwotCi0gICAgbSA9IFB5X0luaXRNb2R1bGUzKCJfZmlsZWlvIiwgbW9kdWxlX21ldGhvZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICJGYXN0IGltcGxlbWVudGF0aW9uIG9mIGlvLkZpbGVJTy4iKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWxlSU9fVHlwZSkgPCAwKQotICAgICAgICByZXR1cm47Ci0gICAgUHlfSU5DUkVGKCZQeUZpbGVJT19UeXBlKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9GaWxlSU8iLCAoUHlPYmplY3QgKikgJlB5RmlsZUlPX1R5cGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vaW9iYXNlLmMgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmMwMDdjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKQEAgLTAsMCArMSw4ODUgQEAKKy8qCisgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEkvTyBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGllcmFyY2h5CisgICAgYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgorICAgIAorICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBJT0Jhc2UsIFJhd0lPQmFzZS4KKyAgICAKKyAgICBXcml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjIGFuZCBBbnRvaW5lIFBpdHJvdQorKi8KKworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKyNpbmNsdWRlICJfaW9tb2R1bGUuaCIKKworLyoKKyAqIElPQmFzZSBjbGFzcywgYW4gYWJzdHJhY3QgY2xhc3MKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIAorICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKK30gaW9iYXNlOworCitQeURvY19TVFJWQVIoaW9iYXNlX2RvYywKKyAgICAiVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFsbCBJL08gY2xhc3NlcywgYWN0aW5nIG9uIHN0cmVhbXMgb2ZcbiIKKyAgICAiYnl0ZXMuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci5cbiIKKyAgICAiXG4iCisgICAgIlRoaXMgY2xhc3MgcHJvdmlkZXMgZHVtbXkgaW1wbGVtZW50YXRpb25zIGZvciBtYW55IG1ldGhvZHMgdGhhdFxuIgorICAgICJkZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHNlbGVjdGl2ZWx5OyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnNcbiIKKyAgICAicmVwcmVzZW50IGEgZmlsZSB0aGF0IGNhbm5vdCBiZSByZWFkLCB3cml0dGVuIG9yIHNlZWtlZC5cbiIKKyAgICAiXG4iCisgICAgIkV2ZW4gdGhvdWdoIElPQmFzZSBkb2VzIG5vdCBkZWNsYXJlIHJlYWQsIHJlYWRpbnRvLCBvciB3cml0ZSBiZWNhdXNlXG4iCisgICAgInRoZWlyIHNpZ25hdHVyZXMgd2lsbCB2YXJ5LCBpbXBsZW1lbnRhdGlvbnMgYW5kIGNsaWVudHMgc2hvdWxkXG4iCisgICAgImNvbnNpZGVyIHRob3NlIG1ldGhvZHMgcGFydCBvZiB0aGUgaW50ZXJmYWNlLiBBbHNvLCBpbXBsZW1lbnRhdGlvbnNcbiIKKyAgICAibWF5IHJhaXNlIGEgSU9FcnJvciB3aGVuIG9wZXJhdGlvbnMgdGhleSBkbyBub3Qgc3VwcG9ydCBhcmUgY2FsbGVkLlxuIgorICAgICJcbiIKKyAgICAiVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzXG4iCisgICAgImJ5dGVzLiBieXRlYXJyYXlzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzXG4iCisgICAgInJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLlxuIgorICAgICJcbiIKKyAgICAiTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpc1xuIgorICAgICJ1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgSU9FcnJvciBpbiB0aGlzIGNhc2UuXG4iCisgICAgIlxuIgorICAgICJJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmdcbiIKKyAgICAidGhhdCBhbiBJT0Jhc2Ugb2JqZWN0IGNhbiBiZSBpdGVyYXRlZCBvdmVyIHlpZWxkaW5nIHRoZSBsaW5lcyBpbiBhXG4iCisgICAgInN0cmVhbS5cbiIKKyAgICAiXG4iCisgICAgIklPQmFzZSBhbHNvIHN1cHBvcnRzIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiBJbiB0aGlzIGV4YW1wbGUsXG4iCisgICAgImZwIGlzIGNsb3NlZCBhZnRlciB0aGUgc3VpdGUgb2YgdGhlIHdpdGggc3RhdG1lbnQgaXMgY29tcGxldGU6XG4iCisgICAgIlxuIgorICAgICJ3aXRoIG9wZW4oJ3NwYW0udHh0JywgJ3InKSBhcyBmcDpcbiIKKyAgICAiICAgIGZwLndyaXRlKCdTcGFtIGFuZCBlZ2dzIScpXG4iKTsKKworLyogVXNlIHRoaXMgbWFjcm8gd2hlbmV2ZXIgeW91IHdhbnQgdG8gY2hlY2sgdGhlIGludGVybmFsIGBjbG9zZWRgIHN0YXR1cworICAgb2YgdGhlIElPQmFzZSBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHZpcnR1YWwgYGNsb3NlZGAgYXR0cmlidXRlIGFzIHJldHVybmVkCisgICBieSB3aGF0ZXZlciBzdWJjbGFzcy4gKi8KKworI2RlZmluZSBJU19DTE9TRUQoc2VsZikgXAorICAgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoc2VsZiwgIl9fSU9CYXNlX2Nsb3NlZCIpCisKKy8qIEludGVybmFsIG1ldGhvZHMgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoX1B5SU9fdW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogUG9zaXRpb25uaW5nICovCisKK1B5RG9jX1NUUlZBUihpb2Jhc2Vfc2Vla19kb2MsCisgICAgIkNoYW5nZSBzdHJlYW0gcG9zaXRpb24uXG4iCisgICAgIlxuIgorICAgICJDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byBieXRlIG9mZnNldCBvZmZzZXQuIG9mZnNldCBpc1xuIgorICAgICJpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHdoZW5jZS4gIFZhbHVlc1xuIgorICAgICJmb3Igd2hlbmNlIGFyZTpcbiIKKyAgICAiXG4iCisgICAgIiogMCAtLSBzdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KTsgb2Zmc2V0IHNob3VsZCBiZSB6ZXJvIG9yIHBvc2l0aXZlXG4iCisgICAgIiogMSAtLSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbjsgb2Zmc2V0IG1heSBiZSBuZWdhdGl2ZVxuIgorICAgICIqIDIgLS0gZW5kIG9mIHN0cmVhbTsgb2Zmc2V0IGlzIHVzdWFsbHkgbmVnYXRpdmVcbiIKKyAgICAiXG4iCisgICAgIlJldHVybiB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3NlZWsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBpb2Jhc2VfdW5zdXBwb3J0ZWQoInNlZWsiKTsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV90ZWxsX2RvYywKKyAgICAgICAgICAgICAiUmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3RlbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYsICJzZWVrIiwgImlpIiwgMCwgMSk7Cit9CisKK1B5RG9jX1NUUlZBUihpb2Jhc2VfdHJ1bmNhdGVfZG9jLAorICAgICJUcnVuY2F0ZSBmaWxlIHRvIHNpemUgYnl0ZXMuXG4iCisgICAgIlxuIgorICAgICJGaWxlIHBvaW50ZXIgaXMgbGVmdCB1bmNoYW5nZWQuICBTaXplIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IElPXG4iCisgICAgInBvc2l0aW9uIGFzIHJlcG9ydGVkIGJ5IHRlbGwoKS4gIFJldHVybnMgdGhlIG5ldyBzaXplLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3RydW5jYXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gaW9iYXNlX3Vuc3VwcG9ydGVkKCJ0cnVuY2F0ZSIpOworfQorCisvKiBGbHVzaCBhbmQgY2xvc2UgbWV0aG9kcyAqLworCitQeURvY19TVFJWQVIoaW9iYXNlX2ZsdXNoX2RvYywKKyAgICAiRmx1c2ggd3JpdGUgYnVmZmVycywgaWYgYXBwbGljYWJsZS5cbiIKKyAgICAiXG4iCisgICAgIlRoaXMgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkLW9ubHkgYW5kIG5vbi1ibG9ja2luZyBzdHJlYW1zLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfZmx1c2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIC8qIFhYWCBTaG91bGQgdGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuPz8/ICovCisgICAgaWYgKElTX0NMT1NFRChzZWxmKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9jbG9zZV9kb2MsCisgICAgIkZsdXNoIGFuZCBjbG9zZSB0aGUgSU8gb2JqZWN0LlxuIgorICAgICJcbiIKKyAgICAiVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC5cbiIpOworCitzdGF0aWMgaW50Citpb2Jhc2VfY2xvc2VkKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaW50IGNsb3NlZDsKKyAgICAvKiBUaGlzIGdldHMgdGhlIGRlcml2ZWQgYXR0cmlidXRlLCB3aGljaCBpcyAqbm90KiBfX0lPQmFzZV9jbG9zZWQKKyAgICAgICBpbiBtb3N0IGNhc2VzISAqLworICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZiwgX1B5SU9fc3RyX2Nsb3NlZCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjbG9zZWQgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICByZXR1cm4gY2xvc2VkOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX2Nsb3NlZF9nZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhJU19DTE9TRUQoc2VsZikpOworfQorCitQeU9iamVjdCAqCitfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpZiAoaW9iYXNlX2Nsb3NlZChzZWxmKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBQeV9UcnVlKQorICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKiBYWFg6IElPQmFzZSB0aGlua3MgaXQgaGFzIHRvIG1haW50YWluIGl0cyBvd24gaW50ZXJuYWwgc3RhdGUgaW4KKyAgIGBfX0lPQmFzZV9jbG9zZWRgIGFuZCBjYWxsIGZsdXNoKCkgYnkgaXRzZWxmLCBidXQgaXQgaXMgcmVkdW5kYW50IHdpdGgKKyAgIHdoYXRldmVyIGJlaGF2aW91ciBhIG5vbi10cml2aWFsIGRlcml2ZWQgY2xhc3Mgd2lsbCBpbXBsZW1lbnQuICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfY2xvc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CisgICAgUHlPYmplY3RfU2V0QXR0clN0cmluZyhzZWxmLCAiX19JT0Jhc2VfY2xvc2VkIiwgUHlfVHJ1ZSk7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9YREVDUkVGKHJlcyk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIEZpbmFsaXphdGlvbiBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIHN1cHBvcnQgKi8KKworaW50CitfUHlJT0Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeU9iamVjdCAqdHAsICp2LCAqdGI7CisgICAgaW50IGNsb3NlZCA9IDE7CisgICAgaW50IGlzX3pvbWJpZTsKKworICAgIC8qIElmIF9QeUlPQmFzZV9maW5hbGl6ZSgpIGlzIGNhbGxlZCBmcm9tIGEgZGVzdHJ1Y3Rvciwgd2UgbmVlZCB0bworICAgICAgIHJlc3VycmVjdCB0aGUgb2JqZWN0IGFzIGNhbGxpbmcgY2xvc2UoKSBjYW4gaW52b2tlIGFyYml0cmFyeSBjb2RlLiAqLworICAgIGlzX3pvbWJpZSA9IChQeV9SRUZDTlQoc2VsZikgPT0gMCk7CisgICAgaWYgKGlzX3pvbWJpZSkgeworICAgICAgICArK1B5X1JFRkNOVChzZWxmKTsKKyAgICB9CisgICAgUHlFcnJfRmV0Y2goJnRwLCAmdiwgJnRiKTsKKyAgICAvKiBJZiBgY2xvc2VkYCBkb2Vzbid0IGV4aXN0IG9yIGNhbid0IGJlIGV2YWx1YXRlZCBhcyBib29sLCB0aGVuIHRoZQorICAgICAgIG9iamVjdCBpcyBwcm9iYWJseSBpbiBhbiB1bnVzYWJsZSBzdGF0ZSwgc28gaWdub3JlLiAqLworICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZiwgX1B5SU9fc3RyX2Nsb3NlZCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICBjbG9zZWQgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIGlmIChjbG9zZWQgPT0gLTEpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBpZiAoY2xvc2VkID09IDApIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopIHNlbGYsIF9QeUlPX3N0cl9jbG9zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAvKiBTaWxlbmNpbmcgSS9PIGVycm9ycyBpcyBiYWQsIGJ1dCBwcmludGluZyBzcHVyaW91cyB0cmFjZWJhY2tzIGlzCisgICAgICAgICAgIGVxdWFsbHkgYXMgYmFkLCBhbmQgcG90ZW50aWFsbHkgbW9yZSBmcmVxdWVudCAoYmVjYXVzZSBvZgorICAgICAgICAgICBzaHV0ZG93biBpc3N1ZXMpLiAqLworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgUHlFcnJfUmVzdG9yZSh0cCwgdiwgdGIpOworICAgIGlmIChpc196b21iaWUpIHsKKyAgICAgICAgaWYgKC0tUHlfUkVGQ05UKHNlbGYpICE9IDApIHsKKyAgICAgICAgICAgIC8qIFRoZSBvYmplY3QgbGl2ZXMgYWdhaW4uIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0YWtlbiBmcm9tCisgICAgICAgICAgICAgICBzbG90X3RwX2RlbCBpbiB0eXBlb2JqZWN0LmMuICovCisgICAgICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IFB5X1JFRkNOVChzZWxmKTsKKyAgICAgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7CisgICAgICAgICAgICBQeV9SRUZDTlQoc2VsZikgPSByZWZjbnQ7CisgICAgICAgICAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLworICAgICAgICAgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAgICAgICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KKyAgICAgICAgICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAgICAgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgKiB1bmRvbmUuCisgICAgICAgICAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citpb2Jhc2VfdHJhdmVyc2UoaW9iYXNlICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW9iYXNlX2NsZWFyKGlvYmFzZSAqc2VsZikKK3sKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworLyogRGVzdHJ1Y3RvciAqLworCitzdGF0aWMgdm9pZAoraW9iYXNlX2RlYWxsb2MoaW9iYXNlICpzZWxmKQoreworICAgIC8qIE5PVEU6IHNpbmNlIElPQmFzZU9iamVjdCBoYXMgaXRzIG93biBkaWN0LCBQeXRob24tZGVmaW5lZCBhdHRyaWJ1dGVzCisgICAgICAgYXJlIHN0aWxsIGF2YWlsYWJsZSBoZXJlIGZvciBjbG9zZSgpIHRvIHVzZS4KKyAgICAgICBIb3dldmVyLCBpZiB0aGUgZGVyaXZlZCBjbGFzcyBkZWNsYXJlcyBhIF9fc2xvdHNfXywgdGhvc2Ugc2xvdHMgYXJlCisgICAgICAgYWxyZWFkeSBnb25lLgorICAgICovCisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKSB7CisgICAgICAgIC8qIFdoZW4gY2FsbGVkIGZyb20gYSBoZWFwIHR5cGUncyBkZWFsbG9jLCB0aGUgdHlwZSB3aWxsIGJlCisgICAgICAgICAgIGRlY3JlZidlZCBvbiByZXR1cm4gKHNlZSBlLmcuIHN1YnR5cGVfZGVhbGxvYyBpbiB0eXBlb2JqZWN0LmMpLiAqLworICAgICAgICBpZiAoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShzZWxmKSwgUHlfVFBGTEFHU19IRUFQVFlQRSkpCisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVFlQRShzZWxmKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopIHNlbGYpOworfQorCisvKiBJbnF1aXJ5IG1ldGhvZHMgKi8KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9zZWVrYWJsZV9kb2MsCisgICAgIlJldHVybiB3aGV0aGVyIG9iamVjdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLlxuIgorICAgICJcbiIKKyAgICAiSWYgRmFsc2UsIHNlZWsoKSwgdGVsbCgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgSU9FcnJvci5cbiIKKyAgICAiVGhpcyBtZXRob2QgbWF5IG5lZWQgdG8gZG8gYSB0ZXN0IHNlZWsoKS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9zZWVrYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCitQeU9iamVjdCAqCitfUHlJT0Jhc2VfY2hlY2tfc2Vla2FibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3NlZWthYmxlLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChyZXMgIT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IFB5X1RydWUpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK1B5RG9jX1NUUlZBUihpb2Jhc2VfcmVhZGFibGVfZG9jLAorICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3IgcmVhZGluZy5cbiIKKyAgICAiXG4iCisgICAgIklmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3JlYWRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKKy8qIE1heSBiZSBjYWxsZWQgd2l0aCBhbnkgb2JqZWN0ICovCitQeU9iamVjdCAqCitfUHlJT0Jhc2VfY2hlY2tfcmVhZGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3JlYWRhYmxlLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChyZXMgIT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCByZWFkYWJsZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IFB5X1RydWUpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK1B5RG9jX1NUUlZBUihpb2Jhc2Vfd3JpdGFibGVfZG9jLAorICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy5cbiIKKyAgICAiXG4iCisgICAgIklmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3dyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKKy8qIE1heSBiZSBjYWxsZWQgd2l0aCBhbnkgb2JqZWN0ICovCitQeU9iamVjdCAqCitfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXMgID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3dyaXRhYmxlLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChyZXMgIT0gUHlfVHJ1ZSkgeworICAgICAgICBQeV9DTEVBUihyZXMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCB3cml0YWJsZS4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IFB5X1RydWUpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qIENvbnRleHQgbWFuYWdlciAqLworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX2VudGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9leGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX2Nsb3NlLCBOVUxMKTsKK30KKworLyogTG93ZXItbGV2ZWwgQVBJcyAqLworCisvKiBYWFggU2hvdWxkIHRoZXNlIGJlIHByZXNlbnQgZXZlbiBpZiB1bmltcGxlbWVudGVkPyAqLworCitQeURvY19TVFJWQVIoaW9iYXNlX2ZpbGVub19kb2MsCisgICAgIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgaWYgb25lIGV4aXN0cy5cbiIKKyAgICAiXG4iCisgICAgIkFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfZmlsZW5vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gaW9iYXNlX3Vuc3VwcG9ydGVkKCJmaWxlbm8iKTsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9pc2F0dHlfZG9jLAorICAgICJSZXR1cm4gd2hldGhlciB0aGlzIGlzIGFuICdpbnRlcmFjdGl2ZScgc3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIEZhbHNlIGlmIGl0IGNhbid0IGJlIGRldGVybWluZWQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9pc2F0dHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkKHNlbGYsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9GQUxTRTsKK30KKworLyogUmVhZGxpbmUocykgYW5kIHdyaXRlbGluZXMgKi8KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9yZWFkbGluZV9kb2MsCisgICAgIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC5cbiIKKyAgICAiXG4iCisgICAgIlRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0XG4iCisgICAgImZpbGVzLCB0aGUgbmV3bGluZXMgYXJndW1lbnQgdG8gb3BlbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmVcbiIKKyAgICAidGVybWluYXRvcihzKSByZWNvZ25pemVkLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfcmVhZGxpbmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYSAoc2xvd2lzaCkgcmVhZGxpbmUoKS4gKi8KKworICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKKyAgICBpbnQgaGFzX3BlZWsgPSAwOworICAgIFB5T2JqZWN0ICpidWZmZXIsICpyZXN1bHQ7CisgICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmUiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZsaW1pdCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoc2VsZiwgInBlZWsiKSkKKyAgICAgICAgaGFzX3BlZWsgPSAxOworCisgICAgYnVmZmVyID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlIChsaW1pdCA8IDAgfHwgUHlfU0laRShidWZmZXIpIDwgbGltaXQpIHsKKyAgICAgICAgUHlfc3NpemVfdCBucmVhZGFoZWFkID0gMTsKKyAgICAgICAgUHlPYmplY3QgKmI7CisKKyAgICAgICAgaWYgKGhhc19wZWVrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVhZGFoZWFkID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAicGVlayIsICJpIiwgMSk7CisgICAgICAgICAgICBpZiAocmVhZGFoZWFkID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKHJlYWRhaGVhZCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlZWsoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGJ5dGVzIG9iamVjdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShyZWFkYWhlYWQpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVhZGFoZWFkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZWFkYWhlYWQpID4gMCkgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9IDA7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmID0gUHlCeXRlc19BU19TVFJJTkcocmVhZGFoZWFkKTsKKyAgICAgICAgICAgICAgICBpZiAobGltaXQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA+PSBQeUJ5dGVzX0dFVF9TSVpFKHJlYWRhaGVhZCkgfHwgbiA+PSBsaW1pdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZbbisrXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID49IFB5Qnl0ZXNfR0VUX1NJWkUocmVhZGFoZWFkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZbbisrXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbnJlYWRhaGVhZCA9IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVhZGFoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIGIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYsICJyZWFkIiwgIm4iLCBucmVhZGFoZWFkKTsKKyAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGIpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIHNob3VsZCBoYXZlIHJldHVybmVkIGEgYnl0ZXMgb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIFB5X1RZUEUoYiktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgb2xkX3NpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShidWZmZXIpOworICAgICAgICBQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOworICAgICAgICBtZW1jcHkoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ1ZmZlcikgKyBvbGRfc2l6ZSwKKyAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGIpLCBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKKworICAgICAgICBQeV9ERUNSRUYoYik7CisKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpW1B5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcikgLSAxXSA9PSAnXG4nKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcikpOworICAgIFB5X0RFQ1JFRihidWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7CisgIGZhaWw6CisgICAgUHlfREVDUkVGKGJ1ZmZlcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2VfaXRlcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2lvYmFzZV9pdGVybmV4dChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbGluZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9yZWFkbGluZSwgTlVMTCk7CisKKyAgICBpZiAobGluZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU9iamVjdF9TaXplKGxpbmUpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZTsKK30KKworUHlEb2NfU1RSVkFSKGlvYmFzZV9yZWFkbGluZXNfZG9jLAorICAgICJSZXR1cm4gYSBsaXN0IG9mIGxpbmVzIGZyb20gdGhlIHN0cmVhbS5cbiIKKyAgICAiXG4iCisgICAgImhpbnQgY2FuIGJlIHNwZWNpZmllZCB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZDogbm8gbW9yZVxuIgorICAgICJsaW5lcyB3aWxsIGJlIHJlYWQgaWYgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzL2NoYXJhY3RlcnMpIG9mIGFsbFxuIgorICAgICJsaW5lcyBzbyBmYXIgZXhjZWVkcyBoaW50LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraW9iYXNlX3JlYWRsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBoaW50ID0gLTEsIGxlbmd0aCA9IDA7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lcyIsICZfUHlJT19Db252ZXJ0U3NpemVfdCwgJmhpbnQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChoaW50IDw9IDApIHsKKyAgICAgICAgLyogWFhYIHNwZWNpYWwtY2FzaW5nIHRoaXMgbWFkZSBzZW5zZSBpbiB0aGUgUHl0aG9uIHZlcnNpb24gaW4gb3JkZXIKKyAgICAgICAgICAgdG8gcmVtb3ZlIHRoZSBieXRlY29kZSBpbnRlcnByZXRhdGlvbiBvdmVyaGVhZCwgYnV0IGl0IGNvdWxkCisgICAgICAgICAgIHByb2JhYmx5IGJlIHJlbW92ZWQgaGVyZS4gKi8KKyAgICAgICAgUHlPYmplY3QgKnJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVzdWx0LCAiZXh0ZW5kIiwgIk8iLCBzZWxmKTsKKyAgICAgICAgaWYgKHJldCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFB5T2JqZWN0ICpsaW5lID0gUHlJdGVyX05leHQoc2VsZik7CisgICAgICAgIGlmIChsaW5lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIFN0b3BJdGVyYXRpb24gcmFpc2VkICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIGxpbmUpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBsZW5ndGggKz0gUHlPYmplY3RfU2l6ZShsaW5lKTsKKyAgICAgICAgUHlfREVDUkVGKGxpbmUpOworCisgICAgICAgIGlmIChsZW5ndGggPiBoaW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpb2Jhc2Vfd3JpdGVsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmxpbmVzLCAqaXRlciwgKnJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp3cml0ZWxpbmVzIiwgJmxpbmVzKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKGxpbmVzKTsKKyAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFB5T2JqZWN0ICpsaW5lID0gUHlJdGVyX05leHQoaXRlcik7CisgICAgICAgIGlmIChsaW5lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBTdG9wIEl0ZXJhdGlvbiAqLworICAgICAgICB9CisKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX3dyaXRlLCBsaW5lLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgIH0KKyAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBpb2Jhc2VfbWV0aG9kc1tdID0geworICAgIHsic2VlayIsIGlvYmFzZV9zZWVrLCBNRVRIX1ZBUkFSR1MsIGlvYmFzZV9zZWVrX2RvY30sCisgICAgeyJ0ZWxsIiwgaW9iYXNlX3RlbGwsIE1FVEhfTk9BUkdTLCBpb2Jhc2VfdGVsbF9kb2N9LAorICAgIHsidHJ1bmNhdGUiLCBpb2Jhc2VfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHUywgaW9iYXNlX3RydW5jYXRlX2RvY30sCisgICAgeyJmbHVzaCIsIGlvYmFzZV9mbHVzaCwgTUVUSF9OT0FSR1MsIGlvYmFzZV9mbHVzaF9kb2N9LAorICAgIHsiY2xvc2UiLCBpb2Jhc2VfY2xvc2UsIE1FVEhfTk9BUkdTLCBpb2Jhc2VfY2xvc2VfZG9jfSwKKworICAgIHsic2Vla2FibGUiLCBpb2Jhc2Vfc2Vla2FibGUsIE1FVEhfTk9BUkdTLCBpb2Jhc2Vfc2Vla2FibGVfZG9jfSwKKyAgICB7InJlYWRhYmxlIiwgaW9iYXNlX3JlYWRhYmxlLCBNRVRIX05PQVJHUywgaW9iYXNlX3JlYWRhYmxlX2RvY30sCisgICAgeyJ3cml0YWJsZSIsIGlvYmFzZV93cml0YWJsZSwgTUVUSF9OT0FSR1MsIGlvYmFzZV93cml0YWJsZV9kb2N9LAorCisgICAgeyJfY2hlY2tDbG9zZWQiLCAgIF9QeUlPQmFzZV9jaGVja19jbG9zZWQsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9jaGVja1NlZWthYmxlIiwgX1B5SU9CYXNlX2NoZWNrX3NlZWthYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJfY2hlY2tSZWFkYWJsZSIsIF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiX2NoZWNrV3JpdGFibGUiLCBfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKKworICAgIHsiZmlsZW5vIiwgaW9iYXNlX2ZpbGVubywgTUVUSF9OT0FSR1MsIGlvYmFzZV9maWxlbm9fZG9jfSwKKyAgICB7ImlzYXR0eSIsIGlvYmFzZV9pc2F0dHksIE1FVEhfTk9BUkdTLCBpb2Jhc2VfaXNhdHR5X2RvY30sCisKKyAgICB7Il9fZW50ZXJfXyIsIGlvYmFzZV9lbnRlciwgTUVUSF9OT0FSR1N9LAorICAgIHsiX19leGl0X18iLCBpb2Jhc2VfZXhpdCwgTUVUSF9WQVJBUkdTfSwKKworICAgIHsicmVhZGxpbmUiLCBpb2Jhc2VfcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgaW9iYXNlX3JlYWRsaW5lX2RvY30sCisgICAgeyJyZWFkbGluZXMiLCBpb2Jhc2VfcmVhZGxpbmVzLCBNRVRIX1ZBUkFSR1MsIGlvYmFzZV9yZWFkbGluZXNfZG9jfSwKKyAgICB7IndyaXRlbGluZXMiLCBpb2Jhc2Vfd3JpdGVsaW5lcywgTUVUSF9WQVJBUkdTfSwKKworICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGlvYmFzZV9nZXRzZXRbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpaW9iYXNlX2Nsb3NlZF9nZXQsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworCitQeVR5cGVPYmplY3QgUHlJT0Jhc2VfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLl9JT0Jhc2UiLCAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoaW9iYXNlKSwgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3Rvcilpb2Jhc2VfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgIGlvYmFzZV9kb2MsICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWlvYmFzZV90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSlpb2Jhc2VfY2xlYXIsICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihpb2Jhc2UsIHdlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBpb2Jhc2VfaXRlciwgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIGlvYmFzZV9pdGVybmV4dCwgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGlvYmFzZV9tZXRob2RzLCAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBpb2Jhc2VfZ2V0c2V0LCAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgb2Zmc2V0b2YoaW9iYXNlLCBkaWN0KSwgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKKworLyoKKyAqIFJhd0lPQmFzZSBjbGFzcywgSW5oZXJpdHMgZnJvbSBJT0Jhc2UuCisgKi8KK1B5RG9jX1NUUlZBUihyYXdpb2Jhc2VfZG9jLAorICAgICAgICAgICAgICJCYXNlIGNsYXNzIGZvciByYXcgYmluYXJ5IEkvTy4iKTsKKworLyoKKyAqIFRoZSByZWFkKCkgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgcmVhZGludG8oKTsgZGVyaXZlZCBjbGFzc2VzCisgKiB0aGF0IHdhbnQgdG8gc3VwcG9ydCByZWFkKCkgb25seSBuZWVkIHRvIGltcGxlbWVudCByZWFkaW50bygpIGFzIGEKKyAqIHByaW1pdGl2ZSBvcGVyYXRpb24uICBJbiBnZW5lcmFsLCByZWFkaW50bygpIGNhbiBiZSBtb3JlIGVmZmljaWVudCB0aGFuCisgKiByZWFkKCkuCisgKgorICogKEl0IHdvdWxkIGJlIHRlbXB0aW5nIHRvIGFsc28gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiByZWFkaW50bygpIGluCisgKiB0ZXJtcyBvZiByZWFkKCksIGluIGNhc2UgdGhlIGxhdHRlciBpcyBhIG1vcmUgc3VpdGFibGUgcHJpbWl0aXZlIG9wZXJhdGlvbiwKKyAqIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UgYSBzdWJjbGFzcyBkb2Vzbid0IGltcGxlbWVudAorICogZWl0aGVyLikKKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCityYXdpb2Jhc2VfcmVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBuID0gLTE7CisgICAgUHlPYmplY3QgKmIsICpyZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnJlYWQiLCAmbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKG4gPCAwKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAicmVhZGFsbCIsIE5VTEwpOworCisgICAgLyogVE9ETzogYWxsb2NhdGUgYSBieXRlcyBvYmplY3QgZGlyZWN0bHkgaW5zdGVhZCBhbmQgbWFudWFsbHkgY29uc3RydWN0CisgICAgICAgYSB3cml0YWJsZSBtZW1vcnl2aWV3IHBvaW50aW5nIHRvIGl0LiAqLworICAgIGIgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBuKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9yZWFkaW50bywgYiwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMIHx8IHJlcyA9PSBQeV9Ob25lKSB7CisgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICBuID0gUHlOdW1iZXJfQXNTc2l6ZV90KHJlcywgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlCeXRlQXJyYXlfQXNTdHJpbmcoYiksIG4pOworICAgIFB5X0RFQ1JFRihiKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKK1B5RG9jX1NUUlZBUihyYXdpb2Jhc2VfcmVhZGFsbF9kb2MsCisgICAgICAgICAgICAgIlJlYWQgdW50aWwgRU9GLCB1c2luZyBtdWx0aXBsZSByZWFkKCkgY2FsbC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Jhd2lvYmFzZV9yZWFkYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgcjsKKyAgICBQeU9iamVjdCAqY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIAorICAgIGlmIChjaHVua3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBQeU9iamVjdCAqZGF0YSA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZiwgInJlYWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLCBERUZBVUxUX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgaWYgKCFkYXRhKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVhZCgpIHNob3VsZCByZXR1cm4gYnl0ZXMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpID09IDApIHsKKyAgICAgICAgICAgIC8qIEVPRiAqLworICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgciA9IFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBkYXRhKTsKKyAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVua3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ID0gX1B5Qnl0ZXNfSm9pbihfUHlJT19lbXB0eV9ieXRlcywgY2h1bmtzKTsKKyAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlNZXRob2REZWYgcmF3aW9iYXNlX21ldGhvZHNbXSA9IHsKKyAgICB7InJlYWQiLCByYXdpb2Jhc2VfcmVhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlYWRhbGwiLCByYXdpb2Jhc2VfcmVhZGFsbCwgTUVUSF9OT0FSR1MsIHJhd2lvYmFzZV9yZWFkYWxsX2RvY30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitQeVR5cGVPYmplY3QgUHlSYXdJT0Jhc2VfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLl9SYXdJT0Jhc2UiLCAgICAgICAgICAgICAgICAvKnRwX25hbWUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICByYXdpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICByYXdpb2Jhc2VfbWV0aG9kcywgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgICZQeUlPQmFzZV9UeXBlLCAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2MWEyNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKQEAgLTAsMCArMSw4ODIgQEAKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgIl9pb21vZHVsZS5oIgorCisvKiBJbXBsZW1lbnRhdGlvbiBub3RlOiB0aGUgYnVmZmVyIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGxvbmdlcgorICAgdGhhbiB0aGUgZW5jbG9zZWQgc3RyaW5nLCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIF9QeUlPX2ZpbmRfbGluZV9lbmRpbmcuCisqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5X1VOSUNPREUgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IHBvczsKKyAgICBQeV9zc2l6ZV90IHN0cmluZ19zaXplOworICAgIHNpemVfdCBidWZfc2l6ZTsKKworICAgIGNoYXIgb2s7IC8qIGluaXRpYWxpemVkPyAqLworICAgIGNoYXIgY2xvc2VkOworICAgIGNoYXIgcmVhZHVuaXZlcnNhbDsKKyAgICBjaGFyIHJlYWR0cmFuc2xhdGU7CisgICAgUHlPYmplY3QgKmRlY29kZXI7CisgICAgUHlPYmplY3QgKnJlYWRubDsKKyAgICBQeU9iamVjdCAqd3JpdGVubDsKKyAgICAKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7Cit9IHN0cmluZ2lvOworCisjZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpIFwKKyAgICBpZiAoc2VsZi0+b2sgPD0gMCkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisjZGVmaW5lIENIRUNLX0NMT1NFRChzZWxmKSBcCisgICAgaWYgKHNlbGYtPmNsb3NlZCkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpOyBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fZG9jLAorICAgICJUZXh0IEkvTyBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnVmZmVyLlxuIgorICAgICJcbiIKKyAgICAiVGhlIGluaXRpYWxfdmFsdWUgYXJndW1lbnQgc2V0cyB0aGUgdmFsdWUgb2Ygb2JqZWN0LiAgVGhlIG5ld2xpbmVcbiIKKyAgICAiYXJndW1lbnQgaXMgbGlrZSB0aGUgb25lIG9mIFRleHRJT1dyYXBwZXIncyBjb25zdHJ1Y3Rvci4iKTsKKworCisvKiBJbnRlcm5hbCByb3V0aW5lIGZvciBjaGFuZ2luZyB0aGUgc2l6ZSwgaW4gdGVybXMgb2YgY2hhcmFjdGVycywgb2YgdGhlCisgICBidWZmZXIgb2YgU3RyaW5nSU8gb2JqZWN0cy4gIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSAnc2l6ZScKKyAgIGFyZ3VtZW50IGlzIG5vbi1uZWdhdGl2ZS4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuICovCitzdGF0aWMgaW50CityZXNpemVfYnVmZmVyKHN0cmluZ2lvICpzZWxmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBIZXJlLCB1bnNpZ25lZCB0eXBlcyBhcmUgdXNlZCB0byBhdm9pZCBkZWFsaW5nIHdpdGggc2lnbmVkIGludGVnZXIKKyAgICAgICBvdmVyZmxvdywgd2hpY2ggaXMgdW5kZWZpbmVkIGluIEMuICovCisgICAgc2l6ZV90IGFsbG9jID0gc2VsZi0+YnVmX3NpemU7CisgICAgUHlfVU5JQ09ERSAqbmV3X2J1ZiA9IE5VTEw7CisKKyAgICBhc3NlcnQoc2VsZi0+YnVmICE9IE5VTEwpOworCisgICAgLyogUmVzZXJ2ZSBvbmUgbW9yZSBjaGFyIGZvciBsaW5lIGVuZGluZyBkZXRlY3Rpb24uICovCisgICAgc2l6ZSA9IHNpemUgKyAxOworICAgIC8qIEZvciBzaW1wbGljaXR5LCBzdGF5IGluIHRoZSByYW5nZSBvZiB0aGUgc2lnbmVkIHR5cGUuIEFueXdheSwgUHl0aG9uCisgICAgICAgZG9lc24ndCBhbGxvdyBzdHJpbmdzIHRvIGJlIGxvbmdlciB0aGFuIHRoaXMuICovCisgICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIGlmIChzaXplIDwgYWxsb2MgLyAyKSB7CisgICAgICAgIC8qIE1ham9yIGRvd25zaXplOyByZXNpemUgZG93biB0byBleGFjdCBzaXplLiAqLworICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgYWxsb2MpIHsKKyAgICAgICAgLyogV2l0aGluIGFsbG9jYXRlZCBzaXplOyBxdWljayBleGl0ICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgLyogTW9kZXJhdGUgdXBzaXplOyBvdmVyYWxsb2NhdGUgc2ltaWxhciB0byBsaXN0X3Jlc2l6ZSgpICovCisgICAgICAgIGFsbG9jID0gc2l6ZSArIChzaXplID4+IDMpICsgKHNpemUgPCA5ID8gMyA6IDYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLworICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgIH0KKworICAgIGlmIChhbGxvYyA+ICgoc2l6ZV90KS0xKSAvIHNpemVvZihQeV9VTklDT0RFKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICBuZXdfYnVmID0gKFB5X1VOSUNPREUgKilQeU1lbV9SZWFsbG9jKHNlbGYtPmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICBpZiAobmV3X2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+YnVmX3NpemUgPSBhbGxvYzsKKyAgICBzZWxmLT5idWYgPSBuZXdfYnVmOworCisgICAgcmV0dXJuIDA7CisKKyAgb3ZlcmZsb3c6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJuZXcgYnVmZmVyIHNpemUgdG9vIGxhcmdlIik7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBJbnRlcm5hbCByb3V0aW5lIGZvciB3cml0aW5nIGEgd2hvbGUgUHlVbmljb2RlIG9iamVjdCB0byB0aGUgYnVmZmVyIG9mIGEKKyAgIFN0cmluZ0lPIG9iamVjdC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9yLiAqLworc3RhdGljIFB5X3NzaXplX3QKK3dyaXRlX3N0cihzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeV9VTklDT0RFICpzdHI7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBOVUxMOworICAgIGFzc2VydChzZWxmLT5idWYgIT0gTlVMTCk7CisgICAgYXNzZXJ0KHNlbGYtPnBvcyA+PSAwKTsKKworICAgIGlmIChzZWxmLT5kZWNvZGVyICE9IE5VTEwpIHsKKyAgICAgICAgZGVjb2RlZCA9IF9QeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKAorICAgICAgICAgICAgc2VsZi0+ZGVjb2Rlciwgb2JqLCAxIC8qIGFsd2F5cyBmaW5hbCAqLyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZWNvZGVkID0gb2JqOworICAgICAgICBQeV9JTkNSRUYoZGVjb2RlZCk7CisgICAgfQorICAgIGlmIChzZWxmLT53cml0ZW5sKSB7CisgICAgICAgIFB5T2JqZWN0ICp0cmFuc2xhdGVkID0gUHlVbmljb2RlX1JlcGxhY2UoCisgICAgICAgICAgICBkZWNvZGVkLCBfUHlJT19zdHJfbmwsIHNlbGYtPndyaXRlbmwsIC0xKTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZWQpOworICAgICAgICBkZWNvZGVkID0gdHJhbnNsYXRlZDsKKyAgICB9CisgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhkZWNvZGVkKSk7CisgICAgc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUoZGVjb2RlZCk7CisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKGRlY29kZWQpOworCisgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgIC8qIFRoaXMgb3ZlcmZsb3cgY2hlY2sgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeS4gSG93ZXZlciwgaXQgYXZvaWRzIHVzIHRvCisgICAgICAgZGVhbCB3aXRoIGZ1bmt5IHRoaW5ncyBsaWtlIGNvbXBhcmluZyBhbiB1bnNpZ25lZCBhbmQgYSBzaWduZWQKKyAgICAgICBpbnRlZ2VyLiAqLworICAgIGlmIChzZWxmLT5wb3MgPiBQWV9TU0laRV9UX01BWCAtIGxlbikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgcG9zaXRpb24gdG9vIGxhcmdlIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgaWYgKHNlbGYtPnBvcyArIGxlbiA+IHNlbGYtPnN0cmluZ19zaXplKSB7CisgICAgICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIHNlbGYtPnBvcyArIGxlbikgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChzZWxmLT5wb3MgPiBzZWxmLT5zdHJpbmdfc2l6ZSkgeworICAgICAgICAvKiBJbiBjYXNlIG9mIG92ZXJzZWVrLCBwYWQgd2l0aCBudWxsIGJ5dGVzIHRoZSBidWZmZXIgcmVnaW9uIGJldHdlZW4KKyAgICAgICAgICAgdGhlIGVuZCBvZiBzdHJlYW0gYW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorCisgICAgICAgICAgMCAgIGxvICAgICAgc3RyaW5nX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICBoaQorICAgICAgICAgIHwgICB8PC0tLXVzZWQtLS0+fDwtLS0tLS0tLS0tYXZhaWxhYmxlLS0tLS0tLS0tLS0+fAorICAgICAgICAgIHwgICB8ICAgICAgICAgICAgPC0tdG8gcGFkLS0+fDwtLS10byB3cml0ZS0tLT4gICAgfAorICAgICAgICAgIDAgICBidWYgICAgICAgICAgICAgICAgICAgcG9zaXRvbgorCisgICAgICAgICovCisgICAgICAgIG1lbXNldChzZWxmLT5idWYgKyBzZWxmLT5zdHJpbmdfc2l6ZSwgJ1wwJywKKyAgICAgICAgICAgICAgIChzZWxmLT5wb3MgLSBzZWxmLT5zdHJpbmdfc2l6ZSkgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgIH0KKworICAgIC8qIENvcHkgdGhlIGRhdGEgdG8gdGhlIGludGVybmFsIGJ1ZmZlciwgb3ZlcndyaXRpbmcgc29tZSBvZiB0aGUKKyAgICAgICBleGlzdGluZyBkYXRhIGlmIHNlbGYtPnBvcyA8IHNlbGYtPnN0cmluZ19zaXplLiAqLworICAgIG1lbWNweShzZWxmLT5idWYgKyBzZWxmLT5wb3MsIHN0ciwgbGVuICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICBzZWxmLT5wb3MgKz0gbGVuOworCisgICAgLyogU2V0IHRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBpbnRlcm5hbCBzdHJpbmcgaWYgaXQgaGFzIGNoYW5nZWQuICovCisgICAgaWYgKHNlbGYtPnN0cmluZ19zaXplIDwgc2VsZi0+cG9zKSB7CisgICAgICAgIHNlbGYtPnN0cmluZ19zaXplID0gc2VsZi0+cG9zOworICAgIH0KKworICAgIFB5X0RFQ1JFRihkZWNvZGVkKTsKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBQeV9YREVDUkVGKGRlY29kZWQpOworICAgIHJldHVybiAtMTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX2dldHZhbHVlX2RvYywKKyAgICAiUmV0cmlldmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fZ2V0dmFsdWUoc3RyaW5naW8gKnNlbGYpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoc2VsZi0+YnVmLCBzZWxmLT5zdHJpbmdfc2l6ZSk7Cit9CisKK1B5RG9jX1NUUlZBUihzdHJpbmdpb190ZWxsX2RvYywKKyAgICAiVGVsbCB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fdGVsbChzdHJpbmdpbyAqc2VsZikKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5wb3MpOworfQorCitQeURvY19TVFJWQVIoc3RyaW5naW9fcmVhZF9kb2MsCisgICAgIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMsIHJldHVybmVkIGFzIGEgc3RyaW5nLlxuIgorICAgICJcbiIKKyAgICAiSWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GXG4iCisgICAgImlzIHJlYWNoZWQuIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19yZWFkKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IHNpemUsIG47CisgICAgUHlfVU5JQ09ERSAqb3V0cHV0OworICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkIiwgJmFyZykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CisgICAgICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChhcmcgPT0gUHlfTm9uZSkgeworICAgICAgICAvKiBSZWFkIHVudGlsIEVPRiBpcyByZWFjaGVkLCBieSBkZWZhdWx0LiAqLworICAgICAgICBzaXplID0gLTE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290ICclcyciLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShhcmcpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogYWRqdXN0IGludmFsaWQgc2l6ZXMgKi8KKyAgICBuID0gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3M7CisgICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPiBuKSB7CisgICAgICAgIHNpemUgPSBuOworICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgICAgICBzaXplID0gMDsKKyAgICB9CisKKyAgICBvdXRwdXQgPSBzZWxmLT5idWYgKyBzZWxmLT5wb3M7CisgICAgc2VsZi0+cG9zICs9IHNpemU7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShvdXRwdXQsIHNpemUpOworfQorCisvKiBJbnRlcm5hbCBoZWxwZXIsIHVzZWQgYnkgc3RyaW5naW9fcmVhZGxpbmUgYW5kIHN0cmluZ2lvX2l0ZXJuZXh0ICovCitzdGF0aWMgUHlPYmplY3QgKgorX3N0cmluZ2lvX3JlYWRsaW5lKHN0cmluZ2lvICpzZWxmLCBQeV9zc2l6ZV90IGxpbWl0KQoreworICAgIFB5X1VOSUNPREUgKnN0YXJ0LCAqZW5kLCBvbGRfY2hhcjsKKyAgICBQeV9zc2l6ZV90IGxlbiwgY29uc3VtZWQ7CisKKyAgICAvKiBJbiBjYXNlIG9mIG92ZXJzZWVrLCByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyAqLworICAgIGlmIChzZWxmLT5wb3MgPj0gc2VsZi0+c3RyaW5nX3NpemUpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CisKKyAgICBzdGFydCA9IHNlbGYtPmJ1ZiArIHNlbGYtPnBvczsKKyAgICBpZiAobGltaXQgPCAwIHx8IGxpbWl0ID4gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3MpCisgICAgICAgIGxpbWl0ID0gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3M7CisKKyAgICBlbmQgPSBzdGFydCArIGxpbWl0OworICAgIG9sZF9jaGFyID0gKmVuZDsKKyAgICAqZW5kID0gJ1wwJzsKKyAgICBsZW4gPSBfUHlJT19maW5kX2xpbmVfZW5kaW5nKAorICAgICAgICBzZWxmLT5yZWFkdHJhbnNsYXRlLCBzZWxmLT5yZWFkdW5pdmVyc2FsLCBzZWxmLT5yZWFkbmwsCisgICAgICAgIHN0YXJ0LCBlbmQsICZjb25zdW1lZCk7CisgICAgKmVuZCA9IG9sZF9jaGFyOworICAgIC8qIElmIHdlIGhhdmVuJ3QgZm91bmQgYW55IGxpbmUgZW5kaW5nLCB3ZSBqdXN0IHJldHVybiBldmVyeXRoaW5nCisgICAgICAgKGBjb25zdW1lZGAgaXMgaWdub3JlZCkuICovCisgICAgaWYgKGxlbiA8IDApCisgICAgICAgIGxlbiA9IGxpbWl0OworICAgIHNlbGYtPnBvcyArPSBsZW47CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShzdGFydCwgbGVuKTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3JlYWRsaW5lX2RvYywKKyAgICAiUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRi5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIEVPRiBpcyBoaXQgaW1tZWRpYXRlbHkuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3JlYWRsaW5lKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKKyAgICBQeV9zc2l6ZV90IGxpbWl0ID0gLTE7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRsaW5lIiwgJmFyZykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CisgICAgICAgIGxpbWl0ID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgICAgIGlmIChsaW1pdCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGFyZyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIF9zdHJpbmdpb19yZWFkbGluZShzZWxmLCBsaW1pdCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19pdGVybmV4dChzdHJpbmdpbyAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbGluZTsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVN0cmluZ0lPX1R5cGUpIHsKKyAgICAgICAgLyogU2tpcCBtZXRob2QgY2FsbCBvdmVyaGVhZCBmb3Igc3BlZWQgKi8KKyAgICAgICAgbGluZSA9IF9zdHJpbmdpb19yZWFkbGluZShzZWxmLCAtMSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBYWFggaXMgc3ViY2xhc3NpbmcgU3RyaW5nSU8gcmVhbGx5IHN1cHBvcnRlZD8gKi8KKyAgICAgICAgbGluZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX3JlYWRsaW5lLCBOVUxMKTsKKyAgICAgICAgaWYgKGxpbmUgJiYgIVB5VW5pY29kZV9DaGVjayhsaW5lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYW4gc3RyIG9iamVjdCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKGxpbmUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGxpbmUpID09IDApIHsKKyAgICAgICAgLyogUmVhY2hlZCBFT0YgKi8KKyAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3RydW5jYXRlX2RvYywKKyAgICAiVHJ1bmNhdGUgc2l6ZSB0byBwb3MuXG4iCisgICAgIlxuIgorICAgICJUaGUgcG9zIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24sIGFzXG4iCisgICAgInJldHVybmVkIGJ5IHRlbGwoKS4gIFRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLlxuIgorICAgICJSZXR1cm5zIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3RydW5jYXRlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJmFyZykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CisgICAgICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoYXJnLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChhcmcgPT0gUHlfTm9uZSkgeworICAgICAgICAvKiBUcnVuY2F0ZSB0byBjdXJyZW50IHBvc2l0aW9uIGlmIG5vIGFyZ3VtZW50IGlzIHBhc3NlZC4gKi8KKyAgICAgICAgc2l6ZSA9IHNlbGYtPnBvczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSB2YWx1ZSAlemQiLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNpemUgPCBzZWxmLT5zdHJpbmdfc2l6ZSkgeworICAgICAgICBpZiAocmVzaXplX2J1ZmZlcihzZWxmLCBzaXplKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgc2VsZi0+c3RyaW5nX3NpemUgPSBzaXplOworICAgIH0KKworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7Cit9CisKK1B5RG9jX1NUUlZBUihzdHJpbmdpb19zZWVrX2RvYywKKyAgICAiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi5cbiIKKyAgICAiXG4iCisgICAgIlNlZWsgdG8gY2hhcmFjdGVyIG9mZnNldCBwb3MgcmVsYXRpdmUgdG8gcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHdoZW5jZTpcbiIKKyAgICAiICAgIDAgIFN0YXJ0IG9mIHN0cmVhbSAodGhlIGRlZmF1bHQpLiAgcG9zIHNob3VsZCBiZSA+PSAwO1xuIgorICAgICIgICAgMSAgQ3VycmVudCBwb3NpdGlvbiAtIHBvcyBtdXN0IGJlIDA7XG4iCisgICAgIiAgICAyICBFbmQgb2Ygc3RyZWFtIC0gcG9zIG11c3QgYmUgMC5cbiIKKyAgICAiUmV0dXJucyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19zZWVrKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcG9zb2JqOworICAgIFB5X3NzaXplX3QgcG9zOworICAgIGludCBtb2RlID0gMDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLCAmcG9zb2JqLCAmbW9kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcG9zID0gUHlOdW1iZXJfQXNTc2l6ZV90KHBvc29iaiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgaWYgKHBvcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICBpZiAobW9kZSAhPSAwICYmIG1vZGUgIT0gMSAmJiBtb2RlICE9IDIpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCB3aGVuY2UgKCVpLCBzaG91bGQgYmUgMCwgMSBvciAyKSIsIG1vZGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAocG9zIDwgMCAmJiBtb2RlID09IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiTmVnYXRpdmUgc2VlayBwb3NpdGlvbiAlemQiLCBwb3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSAhPSAwICYmIHBvcyAhPSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGRvIG5vbnplcm8gY3VyLXJlbGF0aXZlIHNlZWtzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIG1vZGUgMDogb2Zmc2V0IHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAgIG1vZGUgMTogbm8gY2hhbmdlIHRvIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgbW9kZSAyOiBjaGFuZ2UgcG9zaXRpb24gdG8gZW5kIG9mIGZpbGUuICovCisgICAgaWYgKG1vZGUgPT0gMSkgeworICAgICAgICBwb3MgPSBzZWxmLT5wb3M7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gMikgeworICAgICAgICBwb3MgPSBzZWxmLT5zdHJpbmdfc2l6ZTsKKyAgICB9CisKKyAgICBzZWxmLT5wb3MgPSBwb3M7CisKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7Cit9CisKK1B5RG9jX1NUUlZBUihzdHJpbmdpb193cml0ZV9kb2MsCisgICAgIldyaXRlIHN0cmluZyB0byBmaWxlLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgd2hpY2ggaXMgYWx3YXlzIGVxdWFsIHRvXG4iCisgICAgInRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fd3JpdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlfc3NpemVfdCBzaXplOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sob2JqKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAic3RyaW5nIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUob2JqKTsKKworICAgIGlmIChzaXplID4gMCAmJiB3cml0ZV9zdHIoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKK30KKworUHlEb2NfU1RSVkFSKHN0cmluZ2lvX2Nsb3NlX2RvYywKKyAgICAiQ2xvc2UgdGhlIElPIG9iamVjdC4gQXR0ZW1wdGluZyBhbnkgZnVydGhlciBvcGVyYXRpb24gYWZ0ZXIgdGhlXG4iCisgICAgIm9iamVjdCBpcyBjbG9zZWQgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3IuXG4iCisgICAgIlxuIgorICAgICJUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgY2xvc2VkLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19jbG9zZShzdHJpbmdpbyAqc2VsZikKK3sKKyAgICBzZWxmLT5jbG9zZWQgPSAxOworICAgIC8qIEZyZWUgdXAgc29tZSBtZW1vcnkgKi8KKyAgICBpZiAocmVzaXplX2J1ZmZlcihzZWxmLCAwKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+d3JpdGVubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2Rlcik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBpbnQKK3N0cmluZ2lvX3RyYXZlcnNlKHN0cmluZ2lvICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc3RyaW5naW9fY2xlYXIoc3RyaW5naW8gKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzdHJpbmdpb19kZWFsbG9jKHN0cmluZ2lvICpzZWxmKQoreworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOworICAgIHNlbGYtPm9rID0gMDsKKyAgICBpZiAoc2VsZi0+YnVmKSB7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmKTsKKyAgICAgICAgc2VsZi0+YnVmID0gTlVMTDsKKyAgICB9CisgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZG5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT53cml0ZW5sKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVyKTsKKyAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKKyAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CisgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBzdHJpbmdpbyAqc2VsZjsKKworICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CisgICAgc2VsZiA9IChzdHJpbmdpbyAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogdHBfYWxsb2MgaW5pdGlhbGl6ZXMgYWxsIHRoZSBmaWVsZHMgdG8gemVyby4gU28gd2UgZG9uJ3QgaGF2ZSB0bworICAgICAgIGluaXRpYWxpemUgdGhlbSBoZXJlLiAqLworCisgICAgc2VsZi0+YnVmID0gKFB5X1VOSUNPREUgKilQeU1lbV9NYWxsb2MoMCk7CisgICAgaWYgKHNlbGYtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyBpbnQKK3N0cmluZ2lvX2luaXQoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiaW5pdGlhbF92YWx1ZSIsICJuZXdsaW5lIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnZhbHVlID0gTlVMTDsKKyAgICBjaGFyICpuZXdsaW5lID0gIlxuIjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T3o6X19pbml0X18iLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlLCAmbmV3bGluZSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuZXdsaW5lICYmIG5ld2xpbmVbMF0gIT0gJ1wwJworICAgICAgICAmJiAhKG5ld2xpbmVbMF0gPT0gJ1xuJyAmJiBuZXdsaW5lWzFdID09ICdcMCcpCisgICAgICAgICYmICEobmV3bGluZVswXSA9PSAnXHInICYmIG5ld2xpbmVbMV0gPT0gJ1wwJykKKyAgICAgICAgJiYgIShuZXdsaW5lWzBdID09ICdccicgJiYgbmV3bGluZVsxXSA9PSAnXG4nICYmIG5ld2xpbmVbMl0gPT0gJ1wwJykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaWxsZWdhbCBuZXdsaW5lIHZhbHVlOiAlcyIsIG5ld2xpbmUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPSBQeV9Ob25lICYmICFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbF92YWx1ZSBtdXN0IGJlIHVuaWNvZGUgb3IgTm9uZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzZWxmLT5vayA9IDA7CisKKyAgICBQeV9DTEVBUihzZWxmLT5yZWFkbmwpOworICAgIFB5X0NMRUFSKHNlbGYtPndyaXRlbmwpOworICAgIFB5X0NMRUFSKHNlbGYtPmRlY29kZXIpOworCisgICAgaWYgKG5ld2xpbmUpIHsKKyAgICAgICAgc2VsZi0+cmVhZG5sID0gUHlTdHJpbmdfRnJvbVN0cmluZyhuZXdsaW5lKTsKKyAgICAgICAgaWYgKHNlbGYtPnJlYWRubCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5yZWFkdW5pdmVyc2FsID0gKG5ld2xpbmUgPT0gTlVMTCB8fCBuZXdsaW5lWzBdID09ICdcMCcpOworICAgIHNlbGYtPnJlYWR0cmFuc2xhdGUgPSAobmV3bGluZSA9PSBOVUxMKTsKKyAgICAvKiBJZiBuZXdsaW5lID09ICIiLCB3ZSBkb24ndCB0cmFuc2xhdGUgYW55dGhpbmcuCisgICAgICAgSWYgbmV3bGluZSA9PSAiXG4iIG9yIG5ld2xpbmUgPT0gTm9uZSwgd2UgdHJhbnNsYXRlIHRvICJcbiIsIHdoaWNoIGlzCisgICAgICAgYSBuby1vcC4KKyAgICAgICAoZm9yIG5ld2xpbmUgPT0gTm9uZSwgVGV4dElPV3JhcHBlciB0cmFuc2xhdGVzIHRvIG9zLnNlcGxpbmUsIGJ1dCBpdAorICAgICAgIGlzIHBvaW50bGVzcyBmb3IgU3RyaW5nSU8pCisgICAgKi8KKyAgICBpZiAobmV3bGluZSAhPSBOVUxMICYmIG5ld2xpbmVbMF0gPT0gJ1xyJykgeworICAgICAgICBzZWxmLT53cml0ZW5sID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmV3bGluZSk7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnJlYWR1bml2ZXJzYWwpIHsKKyAgICAgICAgc2VsZi0+ZGVjb2RlciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKKyAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfVHlwZSwKKyAgICAgICAgICAgICJPaSIsIFB5X05vbmUsIChpbnQpIHNlbGYtPnJlYWR0cmFuc2xhdGUpOworICAgICAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIE5vdyBldmVyeXRoaW5nIGlzIHNldCB1cCwgcmVzaXplIGJ1ZmZlciB0byBzaXplIG9mIGluaXRpYWwgdmFsdWUsCisgICAgICAgYW5kIGNvcHkgaXQgKi8KKyAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IDA7CisgICAgaWYgKHZhbHVlICYmIHZhbHVlICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBQeVVuaWNvZGVfR2V0U2l6ZSh2YWx1ZSk7CisgICAgICAgIC8qIFRoaXMgaXMgYSBoZXVyaXN0aWMsIGZvciBuZXdsaW5lIHRyYW5zbGF0aW9uIG1pZ2h0IGNoYW5nZQorICAgICAgICAgICB0aGUgc3RyaW5nIGxlbmd0aC4gKi8KKyAgICAgICAgaWYgKHJlc2l6ZV9idWZmZXIoc2VsZiwgbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHNlbGYtPnBvcyA9IDA7CisgICAgICAgIGlmICh3cml0ZV9zdHIoc2VsZiwgdmFsdWUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIDApIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+cG9zID0gMDsKKworICAgIHNlbGYtPmNsb3NlZCA9IDA7CisgICAgc2VsZi0+b2sgPSAxOworICAgIHJldHVybiAwOworfQorCisvKiBQcm9wZXJ0aWVzIGFuZCBwc2V1ZG8tcHJvcGVydGllcyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3NlZWthYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBQeV9SRVRVUk5fVFJVRTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3JlYWRhYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBQeV9SRVRVUk5fVFJVRTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3dyaXRhYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBQeV9SRVRVUk5fVFJVRTsKK30KKworLyogUGlja2xpbmcgc3VwcG9ydC4KKworICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZ2V0c3RhdGVfXyBpcyBzaW1pbGFyIHRvIHRoZSBvbmUgZm9yIEJ5dGVzSU8sCisgICBleGNlcHQgdGhhdCB3ZSBhbHNvIHNhdmUgdGhlIG5ld2xpbmUgcGFyYW1ldGVyLiBGb3IgX19zZXRzdGF0ZV9fIGFuZCB1bmxpa2UKKyAgIEJ5dGVzSU8sIHdlIGNhbGwgX19pbml0X18gdG8gcmVzdG9yZSB0aGUgb2JqZWN0J3Mgc3RhdGUuIERvaW5nIHNvIGFsbG93cyB1cworICAgdG8gYXZvaWQgZGVjb2RpbmcgdGhlIGNvbXBsZXggbmV3bGluZSBzdGF0ZSB3aGlsZSBrZWVwaW5nIHRoZSBvYmplY3QKKyAgIHJlcHJlc2VudGF0aW9uIGNvbXBhY3QuCisKKyAgIFNlZSBjb21tZW50IGluIGJ5dGVzaW8uYyByZWdhcmRpbmcgd2h5IG9ubHkgcGlja2xlIHByb3RvY29scyBhbmQgb253YXJkIGFyZQorICAgc3VwcG9ydGVkLgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2dldHN0YXRlKHN0cmluZ2lvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICppbml0dmFsdWUgPSBzdHJpbmdpb19nZXR2YWx1ZShzZWxmKTsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisKKyAgICBpZiAoaW5pdHZhbHVlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZWxmLT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICBkaWN0ID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRpY3QgPSBQeURpY3RfQ29weShzZWxmLT5kaWN0KTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXRlID0gUHlfQnVpbGRWYWx1ZSgiKE9Pbk4pIiwgaW5pdHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5yZWFkbmwgPyBzZWxmLT5yZWFkbmwgOiBQeV9Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wb3MsIGRpY3QpOworICAgIFB5X0RFQ1JFRihpbml0dmFsdWUpOworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3NldHN0YXRlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKmluaXRhcmc7CisgICAgUHlPYmplY3QgKnBvc2l0aW9uX29iajsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeV9zc2l6ZV90IHBvczsKKworICAgIGFzc2VydChzdGF0ZSAhPSBOVUxMKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICAvKiBXZSBhbGxvdyB0aGUgc3RhdGUgdHVwbGUgdG8gYmUgbG9uZ2VyIHRoYW4gNCwgYmVjYXVzZSB3ZSBtYXkgbmVlZAorICAgICAgIHNvbWVkYXkgdG8gZXh0ZW5kIHRoZSBvYmplY3QncyBzdGF0ZSB3aXRob3V0IGJyZWFraW5nCisgICAgICAgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4gKi8KKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpIHx8IFB5X1NJWkUoc3RhdGUpIDwgNCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcy5fX3NldHN0YXRlX18gYXJndW1lbnQgc2hvdWxkIGJlIDQtdHVwbGUsIGdvdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgUHlfVFlQRShzdGF0ZSktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBvYmplY3QncyBzdGF0ZS4gKi8KKyAgICBpbml0YXJnID0gUHlUdXBsZV9HZXRTbGljZShzdGF0ZSwgMCwgMik7CisgICAgaWYgKGluaXRhcmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHN0cmluZ2lvX2luaXQoc2VsZiwgaW5pdGFyZywgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpbml0YXJnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0RFQ1JFRihpbml0YXJnKTsKKworICAgIC8qIFJlc3RvcmUgdGhlIGJ1ZmZlciBzdGF0ZS4gRXZlbiBpZiBfX2luaXRfXyBkaWQgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLAorICAgICAgIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBpdCBhZ2FpbiBzaW5jZSBfX2luaXRfXyBtYXkgdHJhbnNsYXRlcyB0aGUKKyAgICAgICBuZXdsaW5lcyBpbiB0aGUgaW5pdGFsX3ZhbHVlIHN0cmluZy4gV2UgY2xlYXJseSBkbyBub3Qgd2FudCB0aGF0CisgICAgICAgYmVjYXVzZSB0aGUgc3RyaW5nIHZhbHVlIGluIHRoZSBzdGF0ZSB0dXBsZSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQKKyAgICAgICBvbmNlIGJ5IF9faW5pdF9fLiBTbyB3ZSBkbyBub3QgdGFrZSBhbnkgY2hhbmNlIGFuZCByZXBsYWNlIG9iamVjdCdzCisgICAgICAgYnVmZmVyIGNvbXBsZXRlbHkuICovCisgICAgeworICAgICAgICBQeV9VTklDT0RFICpidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCAwKSk7CisgICAgICAgIFB5X3NzaXplX3QgYnVmc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCAwKSk7CisgICAgICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIGJ1ZnNpemUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmLCBidWYsIGJ1ZnNpemUgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IGJ1ZnNpemU7CisgICAgfQorCisgICAgLyogU2V0IGNhcmVmdWxseSB0aGUgcG9zaXRpb24gdmFsdWUuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHVzZSB0aGUgc2VlaworICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBzZWxmLT5wb3MgZGlyZWN0bHkgdG8gYmV0dGVyIHByb3RlY3QgdGhlCisgICAgICAgb2JqZWN0IGludGVybmFsIHN0YXRlIGFnYWluc3QgZXJybmVvdXMgKG9yIG1hbGljaW91cykgaW5wdXRzLiAqLworICAgIHBvc2l0aW9uX29iaiA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDIpOworICAgIGlmICghUHlJbmRleF9DaGVjayhwb3NpdGlvbl9vYmopKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidGhpcmQgaXRlbSBvZiBzdGF0ZSBtdXN0IGJlIGFuIGludGVnZXIsIGdvdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwb3NpdGlvbl9vYmopLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBvcyA9IFB5TnVtYmVyX0FzU3NpemVfdChwb3NpdGlvbl9vYmosIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIGlmIChwb3MgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzZWxmLT5wb3MgPSBwb3M7CisKKyAgICAvKiBTZXQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcy4gKi8KKyAgICBkaWN0ID0gUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMyk7CisgICAgaWYgKGRpY3QgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm91cnRoIGl0ZW0gb2Ygc3RhdGUgc2hvdWxkIGJlIGEgZGljdCwgZ290IGEgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3QpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChzZWxmLT5kaWN0KSB7CisgICAgICAgICAgICAvKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCByZXBsYWNlIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICBjb21wbGV0ZWx5LiBIb3dldmVyLCBpdCBzZWVtcyBtb3JlIHByYWN0aWNhbCB0byBqdXN0IHVwZGF0ZSBpdC4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKHNlbGYtPmRpY3QsIGRpY3QpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHNlbGYtPmRpY3QgPSBkaWN0OworICAgICAgICB9CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2Nsb3NlZChzdHJpbmdpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHNlbGYtPmNsb3NlZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdHJpbmdpb19saW5lX2J1ZmZlcmluZyhzdHJpbmdpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3RyaW5naW9fbmV3bGluZXMoc3RyaW5naW8gKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKHNlbGYtPmRlY29kZXIsIF9QeUlPX3N0cl9uZXdsaW5lcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgc3RyaW5naW9fbWV0aG9kc1tdID0geworICAgIHsiY2xvc2UiLCAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fY2xvc2UsICAgIE1FVEhfTk9BUkdTLCAgc3RyaW5naW9fY2xvc2VfZG9jfSwKKyAgICB7ImdldHZhbHVlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX2dldHZhbHVlLCBNRVRIX05PQVJHUywgIHN0cmluZ2lvX2dldHZhbHVlX2RvY30sCisgICAgeyJyZWFkIiwgICAgIChQeUNGdW5jdGlvbilzdHJpbmdpb19yZWFkLCAgICAgTUVUSF9WQVJBUkdTLCBzdHJpbmdpb19yZWFkX2RvY30sCisgICAgeyJyZWFkbGluZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb19yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBzdHJpbmdpb19yZWFkbGluZV9kb2N9LAorICAgIHsidGVsbCIsICAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fdGVsbCwgICAgIE1FVEhfTk9BUkdTLCAgc3RyaW5naW9fdGVsbF9kb2N9LAorICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fdHJ1bmNhdGUsIE1FVEhfVkFSQVJHUywgc3RyaW5naW9fdHJ1bmNhdGVfZG9jfSwKKyAgICB7InNlZWsiLCAgICAgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3NlZWssICAgICBNRVRIX1ZBUkFSR1MsIHN0cmluZ2lvX3NlZWtfZG9jfSwKKyAgICB7IndyaXRlIiwgICAgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3dyaXRlLCAgICBNRVRIX08sICAgICAgIHN0cmluZ2lvX3dyaXRlX2RvY30sCisKKyAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3NlZWthYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb19yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKKworICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCisgICAgeyJfX3NldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2V0c3RhdGUsIE1FVEhfT30sCisgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIHN0cmluZ2lvX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgICAgICAgICAoZ2V0dGVyKXN0cmluZ2lvX2Nsb3NlZCwgICAgICAgICBOVUxMLCBOVUxMfSwKKyAgICB7Im5ld2xpbmVzIiwgICAgICAgKGdldHRlcilzdHJpbmdpb19uZXdsaW5lcywgICAgICAgTlVMTCwgTlVMTH0sCisgICAgLyogIChmb2xsb3dpbmcgY29tbWVudHMgc3RyYWlnaHQgb2ZmIG9mIHRoZSBvcmlnaW5hbCBQeXRob24gd3JhcHBlcjopCisgICAgICAgIFhYWCBDcnVmdCB0byBzdXBwb3J0IHRoZSBUZXh0SU9XcmFwcGVyIEFQSS4gVGhpcyB3b3VsZCBvbmx5CisgICAgICAgIGJlIG1lYW5pbmdmdWwgaWYgU3RyaW5nSU8gc3VwcG9ydGVkIHRoZSBidWZmZXIgYXR0cmlidXRlLgorICAgICAgICBIb3BlZnVsbHksIGEgYmV0dGVyIHNvbHV0aW9uLCB0aGFuIGFkZGluZyB0aGVzZSBwc2V1ZG8tYXR0cmlidXRlcywKKyAgICAgICAgd2lsbCBiZSBmb3VuZC4KKyAgICAqLworICAgIHsibGluZV9idWZmZXJpbmciLCAoZ2V0dGVyKXN0cmluZ2lvX2xpbmVfYnVmZmVyaW5nLCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeVN0cmluZ0lPX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5TdHJpbmdJTyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKHN0cmluZ2lvKSwgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3Ipc3RyaW5naW9fZGVhbGxvYywgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgICAgICAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgIHN0cmluZ2lvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgKHRyYXZlcnNlcHJvYylzdHJpbmdpb190cmF2ZXJzZSwgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIChpbnF1aXJ5KXN0cmluZ2lvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCisgICAgb2Zmc2V0b2Yoc3RyaW5naW8sIHdlYWtyZWZsaXN0KSwgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KKyAgICAoaXRlcm5leHRmdW5jKXN0cmluZ2lvX2l0ZXJuZXh0LCAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgc3RyaW5naW9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3RyaW5naW9fZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCisgICAgb2Zmc2V0b2Yoc3RyaW5naW8sIGRpY3QpLCAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCisgICAgKGluaXRwcm9jKXN0cmluZ2lvX2luaXQsICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLworICAgIHN0cmluZ2lvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCit9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vdGV4dGlvLmMgYi9Nb2R1bGVzL19pby90ZXh0aW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWQ3Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKQEAgLTAsMCArMSwyNjE3IEBACisvKgorICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIFRleHQgSS9PIGFzIGRlZmluZWQgYnkgUEVQIDMxMTYgLSAiTmV3IEkvTyIKKworICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBUZXh0SU9CYXNlLCBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLCBUZXh0SU9XcmFwcGVyLgorCisgICAgV3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyBhbmQgQW50b2luZSBQaXRyb3UKKyovCisKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgIl9pb21vZHVsZS5oIgorCisvKiBUZXh0SU9CYXNlICovCisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX2RvYywKKyAgICAiQmFzZSBjbGFzcyBmb3IgdGV4dCBJL08uXG4iCisgICAgIlxuIgorICAgICJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGludGVyZmFjZSB0byBzdHJlYW1cbiIKKyAgICAiSS9PLiBUaGVyZSBpcyBubyByZWFkaW50byBtZXRob2QgYmVjYXVzZSBQeXRob24ncyBjaGFyYWN0ZXIgc3RyaW5nc1xuIgorICAgICJhcmUgaW1tdXRhYmxlLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuXG4iCisgICAgKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK191bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQoreworICAgIFB5RXJyX1NldFN0cmluZyhfUHlJT191bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIodGV4dGlvYmFzZV9kZXRhY2hfZG9jLAorICAgICJTZXBhcmF0ZSB0aGUgdW5kZXJseWluZyBidWZmZXIgZnJvbSB0aGUgVGV4dElPQmFzZSBhbmQgcmV0dXJuIGl0LlxuIgorICAgICJcbiIKKyAgICAiQWZ0ZXIgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgVGV4dElPIGlzIGluIGFuXG4iCisgICAgInVudXNhYmxlIHN0YXRlLlxuIgorICAgICk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW9iYXNlX2RldGFjaChQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gX3Vuc3VwcG9ydGVkKCJkZXRhY2giKTsKK30KKworUHlEb2NfU1RSVkFSKHRleHRpb2Jhc2VfcmVhZF9kb2MsCisgICAgIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0uXG4iCisgICAgIlxuIgorICAgICJSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBuIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi5cbiIKKyAgICAiSWYgbiBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV9yZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gX3Vuc3VwcG9ydGVkKCJyZWFkIik7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX3JlYWRsaW5lX2RvYywKKyAgICAiUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRi5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIEVPRiBpcyBoaXQgaW1tZWRpYXRlbHkuXG4iCisgICAgKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb2Jhc2VfcmVhZGxpbmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfdW5zdXBwb3J0ZWQoInJlYWRsaW5lIik7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX3dyaXRlX2RvYywKKyAgICAiV3JpdGUgc3RyaW5nIHRvIHN0cmVhbS5cbiIKKyAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiAod2hpY2ggaXMgYWx3YXlzIGVxdWFsIHRvXG4iCisgICAgInRoZSBsZW5ndGggb2YgdGhlIHN0cmluZykuXG4iCisgICAgKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb2Jhc2Vfd3JpdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfdW5zdXBwb3J0ZWQoIndyaXRlIik7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX2VuY29kaW5nX2RvYywKKyAgICAiRW5jb2Rpbmcgb2YgdGhlIHRleHQgc3RyZWFtLlxuIgorICAgICJcbiIKKyAgICAiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUuXG4iCisgICAgKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb2Jhc2VfZW5jb2RpbmdfZ2V0KFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodGV4dGlvYmFzZV9uZXdsaW5lc19kb2MsCisgICAgIkxpbmUgZW5kaW5ncyB0cmFuc2xhdGVkIHNvIGZhci5cbiIKKyAgICAiXG4iCisgICAgIk9ubHkgbGluZSBlbmRpbmdzIHRyYW5zbGF0ZWQgZHVyaW5nIHJlYWRpbmcgYXJlIGNvbnNpZGVyZWQuXG4iCisgICAgIlxuIgorICAgICJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV9uZXdsaW5lc19nZXQoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0ZXh0aW9iYXNlX2Vycm9yc19kb2MsCisgICAgIlRoZSBlcnJvciBzZXR0aW5nIG9mIHRoZSBkZWNvZGVyIG9yIGVuY29kZXIuXG4iCisgICAgIlxuIgorICAgICJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZS5cbiIKKyAgICApOworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvYmFzZV9lcnJvcnNfZ2V0KFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiB0ZXh0aW9iYXNlX21ldGhvZHNbXSA9IHsKKyAgICB7ImRldGFjaCIsIChQeUNGdW5jdGlvbil0ZXh0aW9iYXNlX2RldGFjaCwgTUVUSF9OT0FSR1MsIHRleHRpb2Jhc2VfZGV0YWNoX2RvY30sCisgICAgeyJyZWFkIiwgdGV4dGlvYmFzZV9yZWFkLCBNRVRIX1ZBUkFSR1MsIHRleHRpb2Jhc2VfcmVhZF9kb2N9LAorICAgIHsicmVhZGxpbmUiLCB0ZXh0aW9iYXNlX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1MsIHRleHRpb2Jhc2VfcmVhZGxpbmVfZG9jfSwKKyAgICB7IndyaXRlIiwgdGV4dGlvYmFzZV93cml0ZSwgTUVUSF9WQVJBUkdTLCB0ZXh0aW9iYXNlX3dyaXRlX2RvY30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgdGV4dGlvYmFzZV9nZXRzZXRbXSA9IHsKKyAgICB7ImVuY29kaW5nIiwgKGdldHRlcil0ZXh0aW9iYXNlX2VuY29kaW5nX2dldCwgTlVMTCwgdGV4dGlvYmFzZV9lbmNvZGluZ19kb2N9LAorICAgIHsibmV3bGluZXMiLCAoZ2V0dGVyKXRleHRpb2Jhc2VfbmV3bGluZXNfZ2V0LCBOVUxMLCB0ZXh0aW9iYXNlX25ld2xpbmVzX2RvY30sCisgICAgeyJlcnJvcnMiLCAoZ2V0dGVyKXRleHRpb2Jhc2VfZXJyb3JzX2dldCwgTlVMTCwgdGV4dGlvYmFzZV9lcnJvcnNfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeVRleHRJT0Jhc2VfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLl9UZXh0SU9CYXNlIiwgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgdGV4dGlvYmFzZV9kb2MsICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgdGV4dGlvYmFzZV9tZXRob2RzLCAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIHRleHRpb2Jhc2VfZ2V0c2V0LCAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAmUHlJT0Jhc2VfVHlwZSwgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKworCisvKiBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyICovCisKK1B5RG9jX1NUUlZBUihpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RvYywKKyAgICAiQ29kZWMgdXNlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLiAgSXQgd3JhcHNcbiIKKyAgICAiYW5vdGhlciBpbmNyZW1lbnRhbCBkZWNvZGVyLCB0cmFuc2xhdGluZyBcXHJcXG4gYW5kIFxcciBpbnRvIFxcbi4gIEl0IGFsc29cbiIKKyAgICAicmVjb3JkcyB0aGUgdHlwZXMgb2YgbmV3bGluZXMgZW5jb3VudGVyZWQuICBXaGVuIHVzZWQgd2l0aFxuIgorICAgICJ0cmFuc2xhdGU9RmFsc2UsIGl0IGVuc3VyZXMgdGhhdCB0aGUgbmV3bGluZSBzZXF1ZW5jZSBpcyByZXR1cm5lZCBpblxuIgorICAgICJvbmUgcGllY2UuIFdoZW4gdXNlZCB3aXRoIGRlY29kZXI9Tm9uZSwgaXQgZXhwZWN0cyB1bmljb2RlIHN0cmluZ3MgYXNcbiIKKyAgICAiZGVjb2RlIGlucHV0IGFuZCB0cmFuc2xhdGVzIG5ld2xpbmVzIHdpdGhvdXQgZmlyc3QgaW52b2tpbmcgYW4gZXh0ZXJuYWxcbiIKKyAgICAiZGVjb2Rlci5cbiIKKyAgICApOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICpkZWNvZGVyOworICAgIFB5T2JqZWN0ICplcnJvcnM7CisgICAgc2lnbmVkIGludCBwZW5kaW5nY3I6IDE7CisgICAgc2lnbmVkIGludCB0cmFuc2xhdGU6IDE7CisgICAgdW5zaWduZWQgaW50IHNlZW5ubDogMzsKK30gbmxkZWNvZGVyX29iamVjdDsKKworc3RhdGljIGludAoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9pbml0KG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5T2JqZWN0ICpkZWNvZGVyOworICAgIGludCB0cmFuc2xhdGU7CisgICAgUHlPYmplY3QgKmVycm9ycyA9IE5VTEw7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImRlY29kZXIiLCAidHJhbnNsYXRlIiwgImVycm9ycyIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9pfE86SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZGVjb2RlciwgJnRyYW5zbGF0ZSwgJmVycm9ycykpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNlbGYtPmRlY29kZXIgPSBkZWNvZGVyOworICAgIFB5X0lOQ1JFRihkZWNvZGVyKTsKKworICAgIGlmIChlcnJvcnMgPT0gTlVMTCkgeworICAgICAgICBzZWxmLT5lcnJvcnMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygic3RyaWN0Iik7CisgICAgICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihlcnJvcnMpOworICAgICAgICBzZWxmLT5lcnJvcnMgPSBlcnJvcnM7CisgICAgfQorCisgICAgc2VsZi0+dHJhbnNsYXRlID0gdHJhbnNsYXRlOworICAgIHNlbGYtPnNlZW5ubCA9IDA7CisgICAgc2VsZi0+cGVuZGluZ2NyID0gMDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kZWFsbG9jKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2Rlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOworfQorCisjZGVmaW5lIFNFRU5fQ1IgICAxCisjZGVmaW5lIFNFRU5fTEYgICAyCisjZGVmaW5lIFNFRU5fQ1JMRiA0CisjZGVmaW5lIFNFRU5fQUxMIChTRUVOX0NSIHwgU0VFTl9MRiB8IFNFRU5fQ1JMRikKKworUHlPYmplY3QgKgorX1B5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9kZWNvZGUoUHlPYmplY3QgKl9zZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlucHV0LCBpbnQgZmluYWwpCit7CisgICAgUHlPYmplY3QgKm91dHB1dDsKKyAgICBQeV9zc2l6ZV90IG91dHB1dF9sZW47CisgICAgbmxkZWNvZGVyX29iamVjdCAqc2VsZiA9IChubGRlY29kZXJfb2JqZWN0ICopIF9zZWxmOworCisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLl9faW5pdF9fIG5vdCBjYWxsZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogZGVjb2RlIGlucHV0ICh3aXRoIHRoZSBldmVudHVhbCBcciBmcm9tIGEgcHJldmlvdXMgcGFzcykgKi8KKyAgICBpZiAoc2VsZi0+ZGVjb2RlciAhPSBQeV9Ob25lKSB7CisgICAgICAgIG91dHB1dCA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICBfUHlJT19zdHJfZGVjb2RlLCBpbnB1dCwgZmluYWwgPyBQeV9UcnVlIDogUHlfRmFsc2UsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgb3V0cHV0ID0gaW5wdXQ7CisgICAgICAgIFB5X0lOQ1JFRihvdXRwdXQpOworICAgIH0KKworICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhvdXRwdXQpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVjb2RlciBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlc3VsdCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIG91dHB1dF9sZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUob3V0cHV0KTsKKyAgICBpZiAoc2VsZi0+cGVuZGluZ2NyICYmIChmaW5hbCB8fCBvdXRwdXRfbGVuID4gMCkpIHsKKyAgICAgICAgUHlfVU5JQ09ERSAqb3V0OworICAgICAgICBQeU9iamVjdCAqbW9kaWZpZWQgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgb3V0cHV0X2xlbiArIDEpOworICAgICAgICBpZiAobW9kaWZpZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIG91dCA9IFB5VW5pY29kZV9BU19VTklDT0RFKG1vZGlmaWVkKTsKKyAgICAgICAgb3V0WzBdID0gJ1xyJzsKKyAgICAgICAgbWVtY3B5KG91dCArIDEsIFB5VW5pY29kZV9BU19VTklDT0RFKG91dHB1dCksCisgICAgICAgICAgICAgICBvdXRwdXRfbGVuICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICAgICAgUHlfREVDUkVGKG91dHB1dCk7CisgICAgICAgIG91dHB1dCA9IG1vZGlmaWVkOworICAgICAgICBzZWxmLT5wZW5kaW5nY3IgPSAwOworICAgICAgICBvdXRwdXRfbGVuKys7CisgICAgfQorCisgICAgLyogcmV0YWluIGxhc3QgXHIgZXZlbiB3aGVuIG5vdCB0cmFuc2xhdGluZyBkYXRhOgorICAgICAqIHRoZW4gcmVhZGxpbmUoKSBpcyBzdXJlIHRvIGdldCBcclxuIGluIG9uZSBwYXNzCisgICAgICovCisgICAgaWYgKCFmaW5hbCkgeworICAgICAgICBpZiAob3V0cHV0X2xlbiA+IDAKKyAgICAgICAgICAgICYmIFB5VW5pY29kZV9BU19VTklDT0RFKG91dHB1dClbb3V0cHV0X2xlbiAtIDFdID09ICdccicpIHsKKworICAgICAgICAgICAgaWYgKFB5X1JFRkNOVChvdXRwdXQpID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmb3V0cHV0LCBvdXRwdXRfbGVuIC0gMSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1vZGlmaWVkID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShvdXRwdXQpLAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVkID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG91dHB1dCk7CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9kaWZpZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLT5wZW5kaW5nY3IgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmVjb3JkIHdoaWNoIG5ld2xpbmVzIGFyZSByZWFkIGFuZCBkbyBuZXdsaW5lIHRyYW5zbGF0aW9uIGlmIGRlc2lyZWQsCisgICAgICAgYWxsIGluIG9uZSBwYXNzLiAqLworICAgIHsKKyAgICAgICAgUHlfVU5JQ09ERSAqaW5fc3RyOworICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgaW50IHNlZW5ubCA9IHNlbGYtPnNlZW5ubDsKKyAgICAgICAgaW50IG9ubHlfbGYgPSAwOworCisgICAgICAgIGluX3N0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKG91dHB1dCk7CisgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShvdXRwdXQpOworCisgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7CisKKyAgICAgICAgLyogSWYsIHVwIHRvIG5vdywgbmV3bGluZXMgYXJlIGNvbnNpc3RlbnRseSBcbiwgZG8gYSBxdWljayBjaGVjaworICAgICAgICAgICBmb3IgdGhlIFxyICpieXRlKiB3aXRoIHRoZSBsaWJjJ3Mgb3B0aW1pemVkIG1lbWNoci4KKyAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKHNlZW5ubCA9PSBTRUVOX0xGIHx8IHNlZW5ubCA9PSAwKSB7CisgICAgICAgICAgICBvbmx5X2xmID0gKG1lbWNocihpbl9zdHIsICdccicsIGxlbiAqIHNpemVvZihQeV9VTklDT0RFKSkgPT0gTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAob25seV9sZikgeworICAgICAgICAgICAgLyogSWYgbm90IGFscmVhZHkgc2VlbiwgcXVpY2sgc2NhbiBmb3IgYSBwb3NzaWJsZSAiXG4iIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICAgICh0aGVyZSdzIG5vdGhpbmcgZWxzZSB0byBiZSBkb25lLCBldmVuIHdoZW4gaW4gdHJhbnNsYXRpb24gbW9kZSkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoc2Vlbm5sID09IDAgJiYKKyAgICAgICAgICAgICAgICBtZW1jaHIoaW5fc3RyLCAnXG4nLCBsZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpzLCAqZW5kOworICAgICAgICAgICAgICAgIHMgPSBpbl9zdHI7CisgICAgICAgICAgICAgICAgZW5kID0gaW5fc3RyICsgbGVuOworICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjOworICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IGxvb3AgZm9yIG5vbi1jb250cm9sIGNoYXJhY3RlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpzID4gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICAgICAgYyA9ICpzKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5ubCB8PSBTRUVOX0xGOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPiBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBGaW5pc2hlZDogd2UgaGF2ZSBzY2FubmVkIGZvciBuZXdsaW5lcywgYW5kIG5vbmUgb2YgdGhlbQorICAgICAgICAgICAgICAgbmVlZCB0cmFuc2xhdGluZyAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFzZWxmLT50cmFuc2xhdGUpIHsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKnMsICplbmQ7CisgICAgICAgICAgICAvKiBXZSBoYXZlIGFscmVhZHkgc2VlbiBhbGwgbmV3bGluZSB0eXBlcywgbm8gbmVlZCB0byBzY2FuIGFnYWluICovCisgICAgICAgICAgICBpZiAoc2Vlbm5sID09IFNFRU5fQUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kc2NhbjsKKyAgICAgICAgICAgIHMgPSBpbl9zdHI7CisgICAgICAgICAgICBlbmQgPSBpbl9zdHIgKyBsZW47CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjOworICAgICAgICAgICAgICAgIC8qIEZhc3QgbG9vcCBmb3Igbm9uLWNvbnRyb2wgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgIHdoaWxlICgqcyA+ICdccicpCisgICAgICAgICAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgICAgICBjID0gKnMrKzsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXG4nKQorICAgICAgICAgICAgICAgICAgICBzZWVubmwgfD0gU0VFTl9MRjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5ubCB8PSBTRUVOX0NSTEY7CisgICAgICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbm5sIHw9IFNFRU5fQ1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzID4gZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoc2Vlbm5sID09IFNFRU5fQUxMKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kc2NhbjoKKyAgICAgICAgICAgIDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0cmFuc2xhdGVkID0gTlVMTDsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKm91dF9zdHI7CisgICAgICAgICAgICBQeV9VTklDT0RFICppbiwgKm91dCwgKmVuZDsKKyAgICAgICAgICAgIGlmIChQeV9SRUZDTlQob3V0cHV0KSAhPSAxKSB7CisgICAgICAgICAgICAgICAgLyogV2UgY291bGQgdHJ5IHRvIG9wdGltaXplIHRoaXMgc28gdGhhdCB3ZSBvbmx5IGRvIGEgY29weQorICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlcmUgaXMgc29tZXRoaW5nIHRvIHRyYW5zbGF0ZS4gT24gdGhlIG90aGVyIGhhbmQsCisgICAgICAgICAgICAgICAgICAgbW9zdCBkZWNvZGVycyBzaG91bGQgb25seSBvdXRwdXQgbm9uLXNoYXJlZCBzdHJpbmdzLCBpLmUuCisgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24gaXMgZG9uZSBpbiBwbGFjZS4gKi8KKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIGxlbik7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZWQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBhc3NlcnQoUHlfUkVGQ05UKHRyYW5zbGF0ZWQpID09IDEpOworICAgICAgICAgICAgICAgIG1lbWNweShQeVVuaWNvZGVfQVNfVU5JQ09ERSh0cmFuc2xhdGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUob3V0cHV0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGVuICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQgPSBvdXRwdXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRfc3RyID0gUHlVbmljb2RlX0FTX1VOSUNPREUodHJhbnNsYXRlZCk7CisgICAgICAgICAgICBpbiA9IGluX3N0cjsKKyAgICAgICAgICAgIG91dCA9IG91dF9zdHI7CisgICAgICAgICAgICBlbmQgPSBpbl9zdHIgKyBsZW47CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjOworICAgICAgICAgICAgICAgIC8qIEZhc3QgbG9vcCBmb3Igbm9uLWNvbnRyb2wgY2hhcmFjdGVycyAqLworICAgICAgICAgICAgICAgIHdoaWxlICgoYyA9ICppbisrKSA+ICdccicpCisgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9IGM7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSBjOworICAgICAgICAgICAgICAgICAgICBzZWVubmwgfD0gU0VFTl9MRjsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCppbiA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbm5sIHw9IFNFRU5fQ1JMRjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVubmwgfD0gU0VFTl9DUjsKKyAgICAgICAgICAgICAgICAgICAgKm91dCsrID0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpbiA+IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgKm91dCsrID0gYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkICE9IG91dHB1dCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvdXRwdXQpOworICAgICAgICAgICAgICAgIG91dHB1dCA9IHRyYW5zbGF0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3V0IC0gb3V0X3N0ciAhPSBsZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmb3V0cHV0LCBvdXQgLSBvdXRfc3RyKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+c2Vlbm5sIHw9IHNlZW5ubDsKKyAgICB9CisKKyAgICByZXR1cm4gb3V0cHV0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihvdXRwdXQpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kZWNvZGUobmxkZWNvZGVyX29iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqaW5wdXQ7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfGk6SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmaW5wdXQsICZmaW5hbCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZSgoUHlPYmplY3QgKikgc2VsZiwgaW5wdXQsIGZpbmFsKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2luY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c3RhdGUobmxkZWNvZGVyX29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgZmxhZzsKKworICAgIGlmIChzZWxmLT5kZWNvZGVyICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlPYmplY3QgKnN0YXRlID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwKKyAgICAgICAgICAgX1B5SU9fc3RyX2dldHN0YXRlLCBOVUxMKTsKKyAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZShzdGF0ZSwgIihPSykiLCAmYnVmZmVyLCAmZmxhZykpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoYnVmZmVyKTsKKyAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7CisgICAgICAgIGZsYWcgPSAwOworICAgIH0KKyAgICBmbGFnIDw8PSAxOworICAgIGlmIChzZWxmLT5wZW5kaW5nY3IpCisgICAgICAgIGZsYWcgfD0gMTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTksiLCBidWZmZXIsIGZsYWcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9zZXRzdGF0ZShubGRlY29kZXJfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKmJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgZmxhZzsKKworICAgIGlmICghUHlBcmdfUGFyc2Uoc3RhdGUsICIoT0spIiwgJmJ1ZmZlciwgJmZsYWcpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnBlbmRpbmdjciA9IChpbnQpIGZsYWcgJiAxOworICAgIGZsYWcgPj49IDE7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlciAhPSBQeV9Ob25lKQorICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c3RhdGUiLCAiKChPSykpIiwgYnVmZmVyLCBmbGFnKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9yZXNldChubGRlY29kZXJfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBzZWxmLT5zZWVubmwgPSAwOworICAgIHNlbGYtPnBlbmRpbmdjciA9IDA7CisgICAgaWYgKHNlbGYtPmRlY29kZXIgIT0gUHlfTm9uZSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsIF9QeUlPX3N0cl9yZXNldCwgTlVMTCk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2luY3JlbWVudGFsbmV3bGluZWRlY29kZXJfbmV3bGluZXNfZ2V0KG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgc3dpdGNoIChzZWxmLT5zZWVubmwpIHsKKyAgICBjYXNlIFNFRU5fQ1I6CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiXHIiKTsKKyAgICBjYXNlIFNFRU5fTEY6CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiXG4iKTsKKyAgICBjYXNlIFNFRU5fQ1JMRjoKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJcclxuIik7CisgICAgY2FzZSBTRUVOX0NSIHwgU0VFTl9MRjoKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInNzIiwgIlxyIiwgIlxuIik7CisgICAgY2FzZSBTRUVOX0NSIHwgU0VFTl9DUkxGOgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgic3MiLCAiXHIiLCAiXHJcbiIpOworICAgIGNhc2UgU0VFTl9MRiB8IFNFRU5fQ1JMRjoKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInNzIiwgIlxuIiwgIlxyXG4iKTsKKyAgICBjYXNlIFNFRU5fQ1IgfCBTRUVOX0xGIHwgU0VFTl9DUkxGOgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgic3NzIiwgIlxyIiwgIlxuIiwgIlxyXG4iKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgIH0KKworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX21ldGhvZHNbXSA9IHsKKyAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RlY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsiZ2V0c3RhdGUiLCAoUHlDRnVuY3Rpb24paW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAorICAgIHsic2V0c3RhdGUiLCAoUHlDRnVuY3Rpb24paW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9zZXRzdGF0ZSwgTUVUSF9PfSwKKyAgICB7InJlc2V0IiwgKFB5Q0Z1bmN0aW9uKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfcmVzZXQsIE1FVEhfTk9BUkdTfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2dldHNldFtdID0geworICAgIHsibmV3bGluZXMiLCAoZ2V0dGVyKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfbmV3bGluZXNfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIiLCAvKnRwX25hbWUqLworICAgIHNpemVvZihubGRlY29kZXJfb2JqZWN0KSwgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RlYWxsb2MsIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX21ldGhvZHMsIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c2V0LCAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCit9OworCisKKy8qIFRleHRJT1dyYXBwZXIgKi8KKworUHlEb2NfU1RSVkFSKHRleHRpb3dyYXBwZXJfZG9jLAorICAgICJDaGFyYWN0ZXIgYW5kIGxpbmUgYmFzZWQgbGF5ZXIgb3ZlciBhIEJ1ZmZlcmVkSU9CYXNlIG9iamVjdCwgYnVmZmVyLlxuIgorICAgICJcbiIKKyAgICAiZW5jb2RpbmcgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHRoYXQgdGhlIHN0cmVhbSB3aWxsIGJlXG4iCisgICAgImRlY29kZWQgb3IgZW5jb2RlZCB3aXRoLiBJdCBkZWZhdWx0cyB0byBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcuXG4iCisgICAgIlxuIgorICAgICJlcnJvcnMgZGV0ZXJtaW5lcyB0aGUgc3RyaWN0bmVzcyBvZiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKHNlZSB0aGVcbiIKKyAgICAiY29kZWNzLnJlZ2lzdGVyKSBhbmQgZGVmYXVsdHMgdG8gXCJzdHJpY3RcIi5cbiIKKyAgICAiXG4iCisgICAgIm5ld2xpbmUgY2FuIGJlIE5vbmUsICcnLCAnXFxuJywgJ1xccicsIG9yICdcXHJcXG4nLiAgSXQgY29udHJvbHMgdGhlXG4iCisgICAgImhhbmRsaW5nIG9mIGxpbmUgZW5kaW5ncy4gSWYgaXQgaXMgTm9uZSwgdW5pdmVyc2FsIG5ld2xpbmVzIGlzXG4iCisgICAgImVuYWJsZWQuICBXaXRoIHRoaXMgZW5hYmxlZCwgb24gaW5wdXQsIHRoZSBsaW5lcyBlbmRpbmdzICdcXG4nLCAnXFxyJyxcbiIKKyAgICAib3IgJ1xcclxcbicgYXJlIHRyYW5zbGF0ZWQgdG8gJ1xcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZVxuIgorICAgICJjYWxsZXIuIENvbnZlcnNlbHksIG9uIG91dHB1dCwgJ1xcbicgaXMgdHJhbnNsYXRlZCB0byB0aGUgc3lzdGVtXG4iCisgICAgImRlZmF1bHQgbGluZSBzZXBlcmF0b3IsIG9zLmxpbmVzZXAuIElmIG5ld2xpbmUgaXMgYW55IG90aGVyIG9mIGl0c1xuIgorICAgICJsZWdhbCB2YWx1ZXMsIHRoYXQgbmV3bGluZSBiZWNvbWVzIHRoZSBuZXdsaW5lIHdoZW4gdGhlIGZpbGUgaXMgcmVhZFxuIgorICAgICJhbmQgaXQgaXMgcmV0dXJuZWQgdW50cmFuc2xhdGVkLiBPbiBvdXRwdXQsICdcXG4nIGlzIGNvbnZlcnRlZCB0byB0aGVcbiIKKyAgICAibmV3bGluZS5cbiIKKyAgICAiXG4iCisgICAgIklmIGxpbmVfYnVmZmVyaW5nIGlzIFRydWUsIGEgY2FsbCB0byBmbHVzaCBpcyBpbXBsaWVkIHdoZW4gYSBjYWxsIHRvXG4iCisgICAgIndyaXRlIGNvbnRhaW5zIGEgbmV3bGluZSBjaGFyYWN0ZXIuIgorICAgICk7CisKK3R5cGVkZWYgUHlPYmplY3QgKgorICAgICAgICAoKmVuY29kZWZ1bmNfdCkoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUHlPYmplY3RfSEVBRAorICAgIGludCBvazsgLyogaW5pdGlhbGl6ZWQ/ICovCisgICAgaW50IGRldGFjaGVkOworICAgIFB5X3NzaXplX3QgY2h1bmtfc2l6ZTsKKyAgICBQeU9iamVjdCAqYnVmZmVyOworICAgIFB5T2JqZWN0ICplbmNvZGluZzsKKyAgICBQeU9iamVjdCAqZW5jb2RlcjsKKyAgICBQeU9iamVjdCAqZGVjb2RlcjsKKyAgICBQeU9iamVjdCAqcmVhZG5sOworICAgIFB5T2JqZWN0ICplcnJvcnM7CisgICAgY29uc3QgY2hhciAqd3JpdGVubDsgLyogdXRmLTggZW5jb2RlZCwgTlVMTCBzdGFuZHMgZm9yIFxuICovCisgICAgY2hhciBsaW5lX2J1ZmZlcmluZzsKKyAgICBjaGFyIHJlYWR1bml2ZXJzYWw7CisgICAgY2hhciByZWFkdHJhbnNsYXRlOworICAgIGNoYXIgd3JpdGV0cmFuc2xhdGU7CisgICAgY2hhciBzZWVrYWJsZTsKKyAgICBjaGFyIHRlbGxpbmc7CisgICAgLyogU3BlY2lhbGl6ZWQgZW5jb2RpbmcgZnVuYyAoc2VlIGJlbG93KSAqLworICAgIGVuY29kZWZ1bmNfdCBlbmNvZGVmdW5jOworICAgIC8qIFdoZXRoZXIgb3Igbm90IGl0J3MgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKi8KKyAgICBjaGFyIGVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbTsKKworICAgIC8qIFJlYWRzIGFuZCB3cml0ZXMgYXJlIGludGVybmFsbHkgYnVmZmVyZWQgaW4gb3JkZXIgdG8gc3BlZWQgdGhpbmdzIHVwLgorICAgICAgIEhvd2V2ZXIsIGFueSByZWFkIHdpbGwgZmlyc3QgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlciBpZiBpdHNuJ3QgZW1wdHkuCisKKyAgICAgICBQbGVhc2UgYWxzbyBub3RlIHRoYXQgdGV4dCB0byBiZSB3cml0dGVuIGlzIGZpcnN0IGVuY29kZWQgYmVmb3JlIGJlaW5nCisgICAgICAgYnVmZmVyZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQgZW5jb2RpbmcgZXJyb3JzIGFyZSBpbW1lZGlhdGVseQorICAgICAgIHJlcG9ydGVkIHRvIHRoZSBjYWxsZXIsIGJ1dCBpdCB1bmZvcnR1bmF0ZWx5IG1lYW5zIHRoYXQgdGhlCisgICAgICAgSW5jcmVtZW50YWxFbmNvZGVyICh3aG9zZSBlbmNvZGUoKSBtZXRob2QgaXMgYWx3YXlzIHdyaXR0ZW4gaW4gUHl0aG9uKQorICAgICAgIGJlY29tZXMgYSBib3R0bGVuZWNrIGZvciBzbWFsbCB3cml0ZXMuCisgICAgKi8KKyAgICBQeU9iamVjdCAqZGVjb2RlZF9jaGFyczsgICAgICAgLyogYnVmZmVyIGZvciB0ZXh0IHJldHVybmVkIGZyb20gZGVjb2RlciAqLworICAgIFB5X3NzaXplX3QgZGVjb2RlZF9jaGFyc191c2VkOyAvKiBvZmZzZXQgaW50byBfZGVjb2RlZF9jaGFycyBmb3IgcmVhZCgpICovCisgICAgUHlPYmplY3QgKnBlbmRpbmdfYnl0ZXM7ICAgICAgIC8qIGxpc3Qgb2YgYnl0ZXMgb2JqZWN0cyB3YWl0aW5nIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4sIG9yIE5VTEwgKi8KKyAgICBQeV9zc2l6ZV90IHBlbmRpbmdfYnl0ZXNfY291bnQ7CisgICAgUHlPYmplY3QgKnNuYXBzaG90OworICAgIC8qIHNuYXBzaG90IGlzIGVpdGhlciBOb25lLCBvciBhIHR1cGxlIChkZWNfZmxhZ3MsIG5leHRfaW5wdXQpIHdoZXJlCisgICAgICogZGVjX2ZsYWdzIGlzIHRoZSBzZWNvbmQgKGludGVnZXIpIGl0ZW0gb2YgdGhlIGRlY29kZXIgc3RhdGUgYW5kCisgICAgICogbmV4dF9pbnB1dCBpcyB0aGUgY2h1bmsgb2YgaW5wdXQgYnl0ZXMgdGhhdCBjb21lcyBuZXh0IGFmdGVyIHRoZQorICAgICAqIHNuYXBzaG90IHBvaW50LiAgV2UgdXNlIHRoaXMgdG8gcmVjb25zdHJ1Y3QgZGVjb2RlciBzdGF0ZXMgaW4gdGVsbCgpLgorICAgICAqLworCisgICAgLyogQ2FjaGUgcmF3IG9iamVjdCBpZiBpdCdzIGEgRmlsZUlPIG9iamVjdCAqLworICAgIFB5T2JqZWN0ICpyYXc7CisKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CisgICAgUHlPYmplY3QgKmRpY3Q7Cit9IHRleHRpbzsKKworCisvKiBBIGNvdXBsZSBvZiBzcGVjaWFsaXplZCBjYXNlcyBpbiBvcmRlciB0byBieXBhc3MgdGhlIHNsb3cgaW5jcmVtZW50YWwKKyAgIGVuY29kaW5nIG1ldGhvZHMgZm9yIHRoZSBtb3N0IHBvcHVsYXIgZW5jb2RpbmdzLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZW5jb2RlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVBU0NJSShQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycykpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordXRmMTZiZV9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjE2KFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSwgMSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYxNmxlX2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlVVRGMTYoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5lcnJvcnMpLCAtMSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYxNl9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgeworICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorICAgICAgICByZXR1cm4gdXRmMTZiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CisjZWxzZQorICAgICAgICByZXR1cm4gdXRmMTZsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVVVEYxNihQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycyksIDApOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordXRmMzJiZV9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjMyKFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSwgMSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYzMmxlX2VuY29kZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICp0ZXh0KQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlVVRGMzIoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5lcnJvcnMpLCAtMSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1dGYzMl9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgeworICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorICAgICAgICByZXR1cm4gdXRmMzJiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CisjZWxzZQorICAgICAgICByZXR1cm4gdXRmMzJsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVVVEYzMihQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycyksIDApOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordXRmOF9lbmNvZGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqdGV4dCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjgoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+ZXJyb3JzKSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitsYXRpbjFfZW5jb2RlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVMYXRpbjEoUHlVbmljb2RlX0FTX1VOSUNPREUodGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmVycm9ycykpOworfQorCisvKiBNYXAgbm9ybWFsaXplZCBlbmNvZGluZyBuYW1lcyBvbnRvIHRoZSBzcGVjaWFsaXplZCBlbmNvZGluZyBmdW5jcyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBlbmNvZGVmdW5jX3QgZW5jb2RlZnVuYzsKK30gZW5jb2RlZnVuY2VudHJ5OworCitzdGF0aWMgZW5jb2RlZnVuY2VudHJ5IGVuY29kZWZ1bmNzW10gPSB7CisgICAgeyJhc2NpaSIsICAgICAgIChlbmNvZGVmdW5jX3QpIGFzY2lpX2VuY29kZX0sCisgICAgeyJpc284ODU5LTEiLCAgIChlbmNvZGVmdW5jX3QpIGxhdGluMV9lbmNvZGV9LAorICAgIHsidXRmLTgiLCAgICAgICAoZW5jb2RlZnVuY190KSB1dGY4X2VuY29kZX0sCisgICAgeyJ1dGYtMTYtYmUiLCAgIChlbmNvZGVmdW5jX3QpIHV0ZjE2YmVfZW5jb2RlfSwKKyAgICB7InV0Zi0xNi1sZSIsICAgKGVuY29kZWZ1bmNfdCkgdXRmMTZsZV9lbmNvZGV9LAorICAgIHsidXRmLTE2IiwgICAgICAoZW5jb2RlZnVuY190KSB1dGYxNl9lbmNvZGV9LAorICAgIHsidXRmLTMyLWJlIiwgICAoZW5jb2RlZnVuY190KSB1dGYzMmJlX2VuY29kZX0sCisgICAgeyJ1dGYtMzItbGUiLCAgIChlbmNvZGVmdW5jX3QpIHV0ZjMybGVfZW5jb2RlfSwKKyAgICB7InV0Zi0zMiIsICAgICAgKGVuY29kZWZ1bmNfdCkgdXRmMzJfZW5jb2RlfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKKworc3RhdGljIGludAordGV4dGlvd3JhcHBlcl9pbml0KHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJidWZmZXIiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwKKyAgICAgICAgICAgICAgICAgICAgICAibmV3bGluZSIsICJsaW5lX2J1ZmZlcmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgTlVMTH07CisgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJhdzsKKyAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBjaGFyICpuZXdsaW5lID0gTlVMTDsKKyAgICBpbnQgbGluZV9idWZmZXJpbmcgPSAwOworCisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgcjsKKworICAgIHNlbGYtPm9rID0gMDsKKyAgICBzZWxmLT5kZXRhY2hlZCA9IDA7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98enp6aTpmaWxlaW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJ1ZmZlciwgJmVuY29kaW5nLCAmZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdsaW5lLCAmbGluZV9idWZmZXJpbmcpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobmV3bGluZSAmJiBuZXdsaW5lWzBdICE9ICdcMCcKKyAgICAgICAgJiYgIShuZXdsaW5lWzBdID09ICdcbicgJiYgbmV3bGluZVsxXSA9PSAnXDAnKQorICAgICAgICAmJiAhKG5ld2xpbmVbMF0gPT0gJ1xyJyAmJiBuZXdsaW5lWzFdID09ICdcMCcpCisgICAgICAgICYmICEobmV3bGluZVswXSA9PSAnXHInICYmIG5ld2xpbmVbMV0gPT0gJ1xuJyAmJiBuZXdsaW5lWzJdID09ICdcMCcpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImlsbGVnYWwgbmV3bGluZSB2YWx1ZTogJXMiLCBuZXdsaW5lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPmRlY29kZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2RlZF9jaGFycyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+cGVuZGluZ19ieXRlcyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+c25hcHNob3QpOworICAgIFB5X0NMRUFSKHNlbGYtPmVycm9ycyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICBzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQgPSAwOworICAgIHNlbGYtPnBlbmRpbmdfYnl0ZXNfY291bnQgPSAwOworICAgIHNlbGYtPmVuY29kZWZ1bmMgPSBOVUxMOworICAgIHNlbGYtPndyaXRlbmwgPSBOVUxMOworCisgICAgaWYgKGVuY29kaW5nID09IE5VTEwgJiYgc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5SU9fbG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBfUHlJT19sb2NhbGVfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJsb2NhbGUiKTsKKyAgICAgICAgICAgIGlmIChfUHlJT19sb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBjYXRjaF9JbXBvcnRFcnJvcjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIHVzZV9sb2NhbGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdXNlX2xvY2FsZToKKyAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgKKyAgICAgICAgICAgICAgICBfUHlJT19sb2NhbGVfbW9kdWxlLCAiZ2V0cHJlZmVycmVkZW5jb2RpbmciLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgIGNhdGNoX0ltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgIEltcG9ydGluZyBsb2NhbGUgY2FuIHJhaXNlIGEgSW1wb3J0RXJyb3IgYmVjYXVzZSBvZgorICAgICAgICAgICAgICAgICBfZnVuY3Rvb2xzLCBhbmQgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nIGNhbiByYWlzZSBhCisgICAgICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgICAgIGR1cmluZyBtb2R1bGUgYnVpbGRpbmcuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJhc2NpaSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghUHlTdHJpbmdfQ2hlY2soc2VsZi0+ZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgIT0gTlVMTCkKKyAgICAgICAgZW5jb2RpbmcgPSBQeVN0cmluZ19Bc1N0cmluZyhzZWxmLT5lbmNvZGluZyk7CisgICAgZWxzZSBpZiAoZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoZW5jb2RpbmcpOworICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGV0ZXJtaW5lIGRlZmF1bHQgZW5jb2RpbmciKTsKKyAgICB9CisKKyAgICBpZiAoZXJyb3JzID09IE5VTEwpCisgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOworICAgIHNlbGYtPmVycm9ycyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhlcnJvcnMpOworICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIHNlbGYtPmNodW5rX3NpemUgPSA4MTkyOworICAgIHNlbGYtPnJlYWR1bml2ZXJzYWwgPSAobmV3bGluZSA9PSBOVUxMIHx8IG5ld2xpbmVbMF0gPT0gJ1wwJyk7CisgICAgc2VsZi0+bGluZV9idWZmZXJpbmcgPSBsaW5lX2J1ZmZlcmluZzsKKyAgICBzZWxmLT5yZWFkdHJhbnNsYXRlID0gKG5ld2xpbmUgPT0gTlVMTCk7CisgICAgaWYgKG5ld2xpbmUpIHsKKyAgICAgICAgc2VsZi0+cmVhZG5sID0gUHlTdHJpbmdfRnJvbVN0cmluZyhuZXdsaW5lKTsKKyAgICAgICAgaWYgKHNlbGYtPnJlYWRubCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT53cml0ZXRyYW5zbGF0ZSA9IChuZXdsaW5lID09IE5VTEwgfHwgbmV3bGluZVswXSAhPSAnXDAnKTsKKyAgICBpZiAoIXNlbGYtPnJlYWR1bml2ZXJzYWwgJiYgc2VsZi0+d3JpdGV0cmFuc2xhdGUpIHsKKyAgICAgICAgc2VsZi0+d3JpdGVubCA9IFB5U3RyaW5nX0FzU3RyaW5nKHNlbGYtPnJlYWRubCk7CisgICAgICAgIGlmICghc3RyY21wKHNlbGYtPndyaXRlbmwsICJcbiIpKQorICAgICAgICAgICAgc2VsZi0+d3JpdGVubCA9IE5VTEw7CisgICAgfQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBlbHNlCisgICAgICAgIHNlbGYtPndyaXRlbmwgPSAiXHJcbiI7CisjZW5kaWYKKworICAgIC8qIEJ1aWxkIHRoZSBkZWNvZGVyIG9iamVjdCAqLworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoYnVmZmVyLCAicmVhZGFibGUiLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgciA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChyID09IC0xKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChyID09IDEpIHsKKyAgICAgICAgc2VsZi0+ZGVjb2RlciA9IFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyKAorICAgICAgICAgICAgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChzZWxmLT5yZWFkdW5pdmVyc2FsKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqaW5jcmVtZW50YWxEZWNvZGVyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKAorICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfVHlwZSwKKyAgICAgICAgICAgICAgICAiT2kiLCBzZWxmLT5kZWNvZGVyLCAoaW50KXNlbGYtPnJlYWR0cmFuc2xhdGUpOworICAgICAgICAgICAgaWYgKGluY3JlbWVudGFsRGVjb2RlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVyKTsKKyAgICAgICAgICAgIHNlbGYtPmRlY29kZXIgPSBpbmNyZW1lbnRhbERlY29kZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBCdWlsZCB0aGUgZW5jb2RlciBvYmplY3QgKi8KKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGJ1ZmZlciwgIndyaXRhYmxlIiwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHIgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICBpZiAociA9PSAtMSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAociA9PSAxKSB7CisgICAgICAgIFB5T2JqZWN0ICpjaTsKKyAgICAgICAgc2VsZi0+ZW5jb2RlciA9IFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyKAorICAgICAgICAgICAgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAvKiBHZXQgdGhlIG5vcm1hbGl6ZWQgbmFtZWQgb2YgdGhlIGNvZGVjICovCisgICAgICAgIGNpID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKKyAgICAgICAgaWYgKGNpID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNpLCAibmFtZSIpOworICAgICAgICBQeV9ERUNSRUYoY2kpOworICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzKSkgeworICAgICAgICAgICAgZW5jb2RlZnVuY2VudHJ5ICplID0gZW5jb2RlZnVuY3M7CisgICAgICAgICAgICB3aGlsZSAoZS0+bmFtZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoUHlTdHJpbmdfQVNfU1RSSU5HKHJlcyksIGUtPm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kZWZ1bmMgPSBlLT5lbmNvZGVmdW5jOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFB5X1hERUNSRUYocmVzKTsKKyAgICB9CisKKyAgICBzZWxmLT5idWZmZXIgPSBidWZmZXI7CisgICAgUHlfSU5DUkVGKGJ1ZmZlcik7CisKKyAgICBpZiAoUHlfVFlQRShidWZmZXIpID09ICZQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUgfHwKKyAgICAgICAgUHlfVFlQRShidWZmZXIpID09ICZQeUJ1ZmZlcmVkV3JpdGVyX1R5cGUgfHwKKyAgICAgICAgUHlfVFlQRShidWZmZXIpID09ICZQeUJ1ZmZlcmVkUmFuZG9tX1R5cGUpIHsKKyAgICAgICAgcmF3ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhidWZmZXIsICJyYXciKTsKKyAgICAgICAgLyogQ2FjaGUgdGhlIHJhdyBGaWxlSU8gb2JqZWN0IHRvIHNwZWVkIHVwICdjbG9zZWQnIGNoZWNrcyAqLworICAgICAgICBpZiAocmF3ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlfVFlQRShyYXcpID09ICZQeUZpbGVJT19UeXBlKQorICAgICAgICAgICAgc2VsZi0+cmF3ID0gcmF3OworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmF3KTsKKyAgICB9CisKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGJ1ZmZlciwgInNlZWthYmxlIiwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHNlbGYtPnNlZWthYmxlID0gc2VsZi0+dGVsbGluZyA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMDsKKyAgICBpZiAoc2VsZi0+c2Vla2FibGUgJiYgc2VsZi0+ZW5jb2RlcikgeworICAgICAgICBQeU9iamVjdCAqY29va2llT2JqOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSA9IDE7CisKKyAgICAgICAgY29va2llT2JqID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoYnVmZmVyLCBfUHlJT19zdHJfdGVsbCwgTlVMTCk7CisgICAgICAgIGlmIChjb29raWVPYmogPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNvb2tpZU9iaiwgX1B5SU9femVybywgUHlfRVEpOworICAgICAgICBQeV9ERUNSRUYoY29va2llT2JqKTsKKyAgICAgICAgaWYgKGNtcCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSA9IDA7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5lbmNvZGVyLCBfUHlJT19zdHJfc2V0c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT196ZXJvLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZWxmLT5vayA9IDE7CisgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitfdGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc2VsZi0+b2sgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPmRlY29kZXIpOworICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRubCk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2RlZF9jaGFycyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+cGVuZGluZ19ieXRlcyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+c25hcHNob3QpOworICAgIFB5X0NMRUFSKHNlbGYtPmVycm9ycyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RleHRpb3dyYXBwZXJfZGVhbGxvYyh0ZXh0aW8gKnNlbGYpCit7CisgICAgaWYgKF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOworICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXNlbGYpOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK3RleHRpb3dyYXBwZXJfdHJhdmVyc2UodGV4dGlvICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5idWZmZXIpOworICAgIFB5X1ZJU0lUKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeV9WSVNJVChzZWxmLT5lbmNvZGVyKTsKKyAgICBQeV9WSVNJVChzZWxmLT5kZWNvZGVyKTsKKyAgICBQeV9WSVNJVChzZWxmLT5yZWFkbmwpOworICAgIFB5X1ZJU0lUKHNlbGYtPmRlY29kZWRfY2hhcnMpOworICAgIFB5X1ZJU0lUKHNlbGYtPnBlbmRpbmdfYnl0ZXMpOworICAgIFB5X1ZJU0lUKHNlbGYtPnNuYXBzaG90KTsKKyAgICBQeV9WSVNJVChzZWxmLT5lcnJvcnMpOworICAgIFB5X1ZJU0lUKHNlbGYtPnJhdyk7CisKKyAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCit7CisgICAgaWYgKF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCk7CisKKy8qIFRoaXMgbWFjcm8gdGFrZXMgc29tZSBzaG9ydGN1dHMgdG8gbWFrZSB0aGUgY29tbW9uIGNhc2UgZmFzdGVyLiAqLworI2RlZmluZSBDSEVDS19DTE9TRUQoc2VsZikgXAorICAgIGRvIHsgXAorICAgICAgICBpbnQgcjsgXAorICAgICAgICBQeU9iamVjdCAqX3JlczsgXAorICAgICAgICBpZiAoUHlfVFlQRShzZWxmKSA9PSAmUHlUZXh0SU9XcmFwcGVyX1R5cGUpIHsgXAorICAgICAgICAgICAgaWYgKHNlbGYtPnJhdyAhPSBOVUxMKSBcCisgICAgICAgICAgICAgICAgciA9IF9QeUZpbGVJT19jbG9zZWQoc2VsZi0+cmF3KTsgXAorICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAgICAgICBfcmVzID0gdGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0KHNlbGYsIE5VTEwpOyBcCisgICAgICAgICAgICAgICAgaWYgKF9yZXMgPT0gTlVMTCkgXAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgICAgICAgICAgICAgIHIgPSBQeU9iamVjdF9Jc1RydWUoX3Jlcyk7IFwKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoX3Jlcyk7IFwKKyAgICAgICAgICAgICAgICBpZiAociA8IDApIFwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgaWYgKHIgPiAwKSB7IFwKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZS4iKTsgXAorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgfSBcCisgICAgICAgIGVsc2UgaWYgKF9QeUlPQmFzZV9jaGVja19jbG9zZWQoKFB5T2JqZWN0ICopc2VsZiwgUHlfVHJ1ZSkgPT0gTlVMTCkgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpIFwKKyAgICBpZiAoc2VsZi0+b2sgPD0gMCkgeyBcCisgICAgICAgIGlmIChzZWxmLT5kZXRhY2hlZCkgeyBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICAidW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgIH0KKworI2RlZmluZSBDSEVDS19JTklUSUFMSVpFRF9JTlQoc2VsZikgXAorICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKKyAgICAgICAgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOyBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgfSBcCisgICAgICAgIHJldHVybiAtMTsgXAorICAgIH0KKworCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9kZXRhY2godGV4dGlvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpidWZmZXIsICpyZXM7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGJ1ZmZlciA9IHNlbGYtPmJ1ZmZlcjsKKyAgICBzZWxmLT5idWZmZXIgPSBOVUxMOworICAgIHNlbGYtPmRldGFjaGVkID0gMTsKKyAgICBzZWxmLT5vayA9IDA7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworUHlfTE9DQUxfSU5MSU5FKGNvbnN0IFB5X1VOSUNPREUgKikKK2ZpbmRjaGFyKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgUHlfVU5JQ09ERSBjaCkKK3sKKyAgICAvKiBsaWtlIHdjc2NociwgYnV0IGRvZXNuJ3Qgc3RvcCBhdCBOVUxMIGNoYXJhY3RlcnMgKi8KKyAgICB3aGlsZSAoc2l6ZS0tID4gMCkgeworICAgICAgICBpZiAoKnMgPT0gY2gpCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgcysrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogRmx1c2ggdGhlIGludGVybmFsIHdyaXRlIGJ1ZmZlci4gVGhpcyBkb2Vzbid0IGV4cGxpY2l0bHkgZmx1c2ggdGhlCisgICB1bmRlcmx5aW5nIGJ1ZmZlcmVkIG9iamVjdCwgdGhvdWdoLiAqLworc3RhdGljIGludAorX3RleHRpb3dyYXBwZXJfd3JpdGVmbHVzaCh0ZXh0aW8gKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnBlbmRpbmcsICpiLCAqcmV0OworCisgICAgaWYgKHNlbGYtPnBlbmRpbmdfYnl0ZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwZW5kaW5nID0gc2VsZi0+cGVuZGluZ19ieXRlczsKKyAgICBQeV9JTkNSRUYocGVuZGluZyk7CisgICAgc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA9IDA7CisgICAgUHlfQ0xFQVIoc2VsZi0+cGVuZGluZ19ieXRlcyk7CisKKyAgICBiID0gX1B5Qnl0ZXNfSm9pbihfUHlJT19lbXB0eV9ieXRlcywgcGVuZGluZyk7CisgICAgUHlfREVDUkVGKHBlbmRpbmcpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXQgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9fc3RyX3dyaXRlLCBiLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoYik7CisgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJldCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3dyaXRlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldDsKKyAgICBQeU9iamVjdCAqdGV4dDsgLyogb3duZWQgcmVmZXJlbmNlICovCisgICAgUHlPYmplY3QgKmI7CisgICAgUHlfc3NpemVfdCB0ZXh0bGVuOworICAgIGludCBoYXNsZiA9IDA7CisgICAgaW50IG5lZWRmbHVzaCA9IDA7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTp3cml0ZSIsICZ0ZXh0KSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICBpZiAoc2VsZi0+ZW5jb2RlciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAibm90IHdyaXRhYmxlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0lOQ1JFRih0ZXh0KTsKKworICAgIHRleHRsZW4gPSBQeVVuaWNvZGVfR2V0U2l6ZSh0ZXh0KTsKKworICAgIGlmICgoc2VsZi0+d3JpdGV0cmFuc2xhdGUgJiYgc2VsZi0+d3JpdGVubCAhPSBOVUxMKSB8fCBzZWxmLT5saW5lX2J1ZmZlcmluZykKKyAgICAgICAgaWYgKGZpbmRjaGFyKFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLCAnXG4nKSkKKyAgICAgICAgICAgIGhhc2xmID0gMTsKKworICAgIGlmIChoYXNsZiAmJiBzZWxmLT53cml0ZXRyYW5zbGF0ZSAmJiBzZWxmLT53cml0ZW5sICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKm5ld3RleHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKAorICAgICAgICAgICAgdGV4dCwgInJlcGxhY2UiLCAic3MiLCAiXG4iLCBzZWxmLT53cml0ZW5sKTsKKyAgICAgICAgUHlfREVDUkVGKHRleHQpOworICAgICAgICBpZiAobmV3dGV4dCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHRleHQgPSBuZXd0ZXh0OworICAgIH0KKworICAgIGlmIChzZWxmLT5saW5lX2J1ZmZlcmluZyAmJgorICAgICAgICAoaGFzbGYgfHwKKyAgICAgICAgIGZpbmRjaGFyKFB5VW5pY29kZV9BU19VTklDT0RFKHRleHQpLAorICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRleHQpLCAnXHInKSkpCisgICAgICAgIG5lZWRmbHVzaCA9IDE7CisKKyAgICAvKiBYWFggV2hhdCBpZiB3ZSB3ZXJlIGp1c3QgcmVhZGluZz8gKi8KKyAgICBpZiAoc2VsZi0+ZW5jb2RlZnVuYyAhPSBOVUxMKSB7CisgICAgICAgIGIgPSAoKnNlbGYtPmVuY29kZWZ1bmMpKChQeU9iamVjdCAqKSBzZWxmLCB0ZXh0KTsKKyAgICAgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBiID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9lbmNvZGUsIHRleHQsIE5VTEwpOworICAgIFB5X0RFQ1JFRih0ZXh0KTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzID09IE5VTEwpIHsKKyAgICAgICAgc2VsZi0+cGVuZGluZ19ieXRlcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHNlbGYtPnBlbmRpbmdfYnl0ZXNfY291bnQgPSAwOworICAgIH0KKyAgICBpZiAoUHlMaXN0X0FwcGVuZChzZWxmLT5wZW5kaW5nX2J5dGVzLCBiKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCArPSBQeUJ5dGVzX0dFVF9TSVpFKGIpOworICAgIFB5X0RFQ1JFRihiKTsKKyAgICBpZiAoc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA+IHNlbGYtPmNodW5rX3NpemUgfHwgbmVlZGZsdXNoKSB7CisgICAgICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChuZWVkZmx1c2gpIHsKKyAgICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+YnVmZmVyLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOworICAgICAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfREVDUkVGKHJldCk7CisgICAgfQorCisgICAgUHlfQ0xFQVIoc2VsZi0+c25hcHNob3QpOworCisgICAgaWYgKHNlbGYtPmRlY29kZXIpIHsKKyAgICAgICAgcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLCAicmVzZXQiLCBOVUxMKTsKKyAgICAgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRihyZXQpOworICAgIH0KKworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QodGV4dGxlbik7Cit9CisKKy8qIFN0ZWFsIGEgcmVmZXJlbmNlIHRvIGNoYXJzIGFuZCBzdG9yZSBpdCBpbiB0aGUgZGVjb2RlZF9jaGFyIGJ1ZmZlcjsKKyAqLworc3RhdGljIHZvaWQKK3RleHRpb3dyYXBwZXJfc2V0X2RlY29kZWRfY2hhcnModGV4dGlvICpzZWxmLCBQeU9iamVjdCAqY2hhcnMpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGVjb2RlZF9jaGFycyk7CisgICAgc2VsZi0+ZGVjb2RlZF9jaGFycyA9IGNoYXJzOworICAgIHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9IDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2dldF9kZWNvZGVkX2NoYXJzKHRleHRpbyAqc2VsZiwgUHlfc3NpemVfdCBuKQoreworICAgIFB5T2JqZWN0ICpjaGFyczsKKyAgICBQeV9zc2l6ZV90IGF2YWlsOworCisgICAgaWYgKHNlbGYtPmRlY29kZWRfY2hhcnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKKworICAgIGF2YWlsID0gKFB5VW5pY29kZV9HRVRfU0laRShzZWxmLT5kZWNvZGVkX2NoYXJzKQorICAgICAgICAgICAgIC0gc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkKTsKKworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChuIDwgMCB8fCBuID4gYXZhaWwpCisgICAgICAgIG4gPSBhdmFpbDsKKworICAgIGlmIChzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQgPiAwIHx8IG4gPCBhdmFpbCkgeworICAgICAgICBjaGFycyA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgKKyAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHNlbGYtPmRlY29kZWRfY2hhcnMpCisgICAgICAgICAgICArIHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCwgbik7CisgICAgICAgIGlmIChjaGFycyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBjaGFycyA9IHNlbGYtPmRlY29kZWRfY2hhcnM7CisgICAgICAgIFB5X0lOQ1JFRihjaGFycyk7CisgICAgfQorCisgICAgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkICs9IG47CisgICAgcmV0dXJuIGNoYXJzOworfQorCisvKiBSZWFkIGFuZCBkZWNvZGUgdGhlIG5leHQgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBCdWZmZXJlZFJlYWRlci4KKyAqLworc3RhdGljIGludAordGV4dGlvd3JhcHBlcl9yZWFkX2NodW5rKHRleHRpbyAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqZGVjX2J1ZmZlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmRlY19mbGFncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmlucHV0X2NodW5rID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZGVjb2RlZF9jaGFycywgKmNodW5rX3NpemU7CisgICAgaW50IGVvZjsKKworICAgIC8qIFRoZSByZXR1cm4gdmFsdWUgaXMgVHJ1ZSB1bmxlc3MgRU9GIHdhcyByZWFjaGVkLiAgVGhlIGRlY29kZWQgc3RyaW5nIGlzCisgICAgICogcGxhY2VkIGluIHNlbGYuX2RlY29kZWRfY2hhcnMgKHJlcGxhY2luZyBpdHMgcHJldmlvdXMgdmFsdWUpLiAgVGhlCisgICAgICogZW50aXJlIGlucHV0IGNodW5rIGlzIHNlbnQgdG8gdGhlIGRlY29kZXIsIHRob3VnaCBzb21lIG9mIGl0IG1heSByZW1haW4KKyAgICAgKiBidWZmZXJlZCBpbiB0aGUgZGVjb2RlciwgeWV0IHRvIGJlIGNvbnZlcnRlZC4KKyAgICAgKi8KKworICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsICJub3QgcmVhZGFibGUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzZWxmLT50ZWxsaW5nKSB7CisgICAgICAgIC8qIFRvIHByZXBhcmUgZm9yIHRlbGwoKSwgd2UgbmVlZCB0byBzbmFwc2hvdCBhIHBvaW50IGluIHRoZSBmaWxlCisgICAgICAgICAqIHdoZXJlIHRoZSBkZWNvZGVyJ3MgaW5wdXQgYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICAgKi8KKworICAgICAgICBQeU9iamVjdCAqc3RhdGUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT19zdHJfZ2V0c3RhdGUsIE5VTEwpOworICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgLyogR2l2ZW4gdGhpcywgd2Uga25vdyB0aGVyZSB3YXMgYSB2YWxpZCBzbmFwc2hvdCBwb2ludAorICAgICAgICAgKiBsZW4oZGVjX2J1ZmZlcikgYnl0ZXMgYWdvIHdpdGggZGVjb2RlciBzdGF0ZSAoYicnLCBkZWNfZmxhZ3MpLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKFB5QXJnX1BhcnNlKHN0YXRlLCAiKE9PKSIsICZkZWNfYnVmZmVyLCAmZGVjX2ZsYWdzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGRlY19idWZmZXIpOworICAgICAgICBQeV9JTkNSRUYoZGVjX2ZsYWdzKTsKKyAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICB9CisKKyAgICAvKiBSZWFkIGEgY2h1bmssIGRlY29kZSBpdCwgYW5kIHB1dCB0aGUgcmVzdWx0IGluIHNlbGYuX2RlY29kZWRfY2hhcnMuICovCisgICAgY2h1bmtfc2l6ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5jaHVua19zaXplKTsKKyAgICBpZiAoY2h1bmtfc2l6ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaW5wdXRfY2h1bmsgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5idWZmZXIsCisgICAgICAgIF9QeUlPX3N0cl9yZWFkMSwgY2h1bmtfc2l6ZSwgTlVMTCk7CisgICAgUHlfREVDUkVGKGNodW5rX3NpemUpOworICAgIGlmIChpbnB1dF9jaHVuayA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2soaW5wdXRfY2h1bmspKTsKKworICAgIGVvZiA9IChQeUJ5dGVzX1NpemUoaW5wdXRfY2h1bmspID09IDApOworCisgICAgaWYgKFB5X1RZUEUoc2VsZi0+ZGVjb2RlcikgPT0gJlB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlKSB7CisgICAgICAgIGRlY29kZWRfY2hhcnMgPSBfUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZSgKKyAgICAgICAgICAgIHNlbGYtPmRlY29kZXIsIGlucHV0X2NodW5rLCBlb2YpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGVjb2RlZF9jaGFycyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICBfUHlJT19zdHJfZGVjb2RlLCBpbnB1dF9jaHVuaywgZW9mID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlLCBOVUxMKTsKKyAgICB9CisKKyAgICAvKiBUT0RPIHNhbml0eSBjaGVjazogaXNpbnN0YW5jZShkZWNvZGVkX2NoYXJzLCB1bmljb2RlKSAqLworICAgIGlmIChkZWNvZGVkX2NoYXJzID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB0ZXh0aW93cmFwcGVyX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIGRlY29kZWRfY2hhcnMpOworICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUoZGVjb2RlZF9jaGFycykgPiAwKQorICAgICAgICBlb2YgPSAwOworCisgICAgaWYgKHNlbGYtPnRlbGxpbmcpIHsKKyAgICAgICAgLyogQXQgdGhlIHNuYXBzaG90IHBvaW50LCBsZW4oZGVjX2J1ZmZlcikgYnl0ZXMgYmVmb3JlIHRoZSByZWFkLCB0aGUKKyAgICAgICAgICogbmV4dCBpbnB1dCB0byBiZSBkZWNvZGVkIGlzIGRlY19idWZmZXIgKyBpbnB1dF9jaHVuay4KKyAgICAgICAgICovCisgICAgICAgIFB5T2JqZWN0ICpuZXh0X2lucHV0ID0gUHlOdW1iZXJfQWRkKGRlY19idWZmZXIsIGlucHV0X2NodW5rKTsKKyAgICAgICAgaWYgKG5leHRfaW5wdXQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgYXNzZXJ0IChQeUJ5dGVzX0NoZWNrKG5leHRfaW5wdXQpKTsKKyAgICAgICAgUHlfREVDUkVGKGRlY19idWZmZXIpOworICAgICAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgICAgIHNlbGYtPnNuYXBzaG90ID0gUHlfQnVpbGRWYWx1ZSgiTk4iLCBkZWNfZmxhZ3MsIG5leHRfaW5wdXQpOworICAgIH0KKyAgICBQeV9ERUNSRUYoaW5wdXRfY2h1bmspOworCisgICAgcmV0dXJuIChlb2YgPT0gMCk7CisKKyAgZmFpbDoKKyAgICBQeV9YREVDUkVGKGRlY19idWZmZXIpOworICAgIFB5X1hERUNSRUYoZGVjX2ZsYWdzKTsKKyAgICBQeV9YREVDUkVGKGlucHV0X2NodW5rKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3JlYWQodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG4gPSAtMTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKmNodW5rcyA9IE5VTEw7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWQiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZuKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAibm90IHJlYWRhYmxlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobiA8IDApIHsKKyAgICAgICAgLyogUmVhZCBldmVyeXRoaW5nICovCisgICAgICAgIFB5T2JqZWN0ICpieXRlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAicmVhZCIsIE5VTEwpOworICAgICAgICBQeU9iamVjdCAqZGVjb2RlZCwgKmZpbmFsOworICAgICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgZGVjb2RlZCA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsIF9QeUlPX3N0cl9kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlcywgUHlfVHJ1ZSwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgIGlmIChkZWNvZGVkID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcmVzdWx0ID0gdGV4dGlvd3JhcHBlcl9nZXRfZGVjb2RlZF9jaGFycyhzZWxmLCAtMSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGVjb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsID0gUHlVbmljb2RlX0NvbmNhdChyZXN1bHQsIGRlY29kZWQpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZWQpOworICAgICAgICBpZiAoZmluYWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgICAgIHJldHVybiBmaW5hbDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCByZXMgPSAxOworICAgICAgICBQeV9zc2l6ZV90IHJlbWFpbmluZyA9IG47CisKKyAgICAgICAgcmVzdWx0ID0gdGV4dGlvd3JhcHBlcl9nZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBuKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICByZW1haW5pbmcgLT0gUHlVbmljb2RlX0dFVF9TSVpFKHJlc3VsdCk7CisKKyAgICAgICAgLyogS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyB0byByZXR1cm4gKi8KKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgIHJlcyA9IHRleHRpb3dyYXBwZXJfcmVhZF9jaHVuayhzZWxmKTsKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gMCkgIC8qIEVPRiAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgcmVzdWx0KSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSB0ZXh0aW93cmFwcGVyX2dldF9kZWNvZGVkX2NoYXJzKHNlbGYsIHJlbWFpbmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgcmVtYWluaW5nIC09IFB5VW5pY29kZV9HRVRfU0laRShyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaHVua3MgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMICYmIFB5TGlzdF9BcHBlbmQoY2h1bmtzLCByZXN1bHQpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4oX1B5SU9fZW1wdHlfc3RyLCBjaHVua3MpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIFB5X0NMRUFSKGNodW5rcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIGZhaWw6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisvKiBOT1RFOiBgZW5kYCBtdXN0IHBvaW50IHRvIHRoZSByZWFsIGVuZCBvZiB0aGUgUHlfVU5JQ09ERSBzdG9yYWdlLAorICAgdGhhdCBpcyB0byB0aGUgTlVMIGNoYXJhY3Rlci4gT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiB3aWxsIHByb2R1Y2UKKyAgIGluY29ycmVjdCByZXN1bHRzLiAqLworc3RhdGljIFB5X1VOSUNPREUgKgorZmluZF9jb250cm9sX2NoYXIoUHlfVU5JQ09ERSAqc3RhcnQsIFB5X1VOSUNPREUgKmVuZCwgUHlfVU5JQ09ERSBjaCkKK3sKKyAgICBQeV9VTklDT0RFICpzID0gc3RhcnQ7CisgICAgZm9yICg7OykgeworICAgICAgICB3aGlsZSAoKnMgPiBjaCkKKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgaWYgKCpzID09IGNoKQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIGlmIChzID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBzKys7CisgICAgfQorfQorCitQeV9zc2l6ZV90CitfUHlJT19maW5kX2xpbmVfZW5kaW5nKAorICAgIGludCB0cmFuc2xhdGVkLCBpbnQgdW5pdmVyc2FsLCBQeU9iamVjdCAqcmVhZG5sLAorICAgIFB5X1VOSUNPREUgKnN0YXJ0LCBQeV9VTklDT0RFICplbmQsIFB5X3NzaXplX3QgKmNvbnN1bWVkKQoreworICAgIFB5X3NzaXplX3QgbGVuID0gZW5kIC0gc3RhcnQ7CisKKyAgICBpZiAodHJhbnNsYXRlZCkgeworICAgICAgICAvKiBOZXdsaW5lcyBhcmUgYWxyZWFkeSB0cmFuc2xhdGVkLCBvbmx5IHNlYXJjaCBmb3IgXG4gKi8KKyAgICAgICAgUHlfVU5JQ09ERSAqcG9zID0gZmluZF9jb250cm9sX2NoYXIoc3RhcnQsIGVuZCwgJ1xuJyk7CisgICAgICAgIGlmIChwb3MgIT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBwb3MgLSBzdGFydCArIDE7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKmNvbnN1bWVkID0gbGVuOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHVuaXZlcnNhbCkgeworICAgICAgICAvKiBVbml2ZXJzYWwgbmV3bGluZSBzZWFyY2guIEZpbmQgYW55IG9mIFxyLCBcclxuLCBcbgorICAgICAgICAgKiBUaGUgZGVjb2RlciBlbnN1cmVzIHRoYXQgXHJcbiBhcmUgbm90IHNwbGl0IGluIHR3byBwaWVjZXMKKyAgICAgICAgICovCisgICAgICAgIFB5X1VOSUNPREUgKnMgPSBzdGFydDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgUHlfVU5JQ09ERSBjaDsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igbm9uLWNvbnRyb2wgY2hhcnMuIFRoZSBsb29wIGFsd2F5cyBlbmRzCisgICAgICAgICAgICAgICBzaW5jZSB0aGUgUHlfVU5JQ09ERSBzdG9yYWdlIGlzIE5VTC10ZXJtaW5hdGVkLiAqLworICAgICAgICAgICAgd2hpbGUgKCpzID4gJ1xyJykKKyAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAocyA+PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqY29uc3VtZWQgPSBsZW47CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSAqcysrOworICAgICAgICAgICAgaWYgKGNoID09ICdcbicpCisgICAgICAgICAgICAgICAgcmV0dXJuIHMgLSBzdGFydDsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgaWYgKCpzID09ICdcbicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzIC0gc3RhcnQgKyAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMgLSBzdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogTm9uLXVuaXZlcnNhbCBtb2RlLiAqLworICAgICAgICBQeV9zc2l6ZV90IHJlYWRubF9sZW4gPSBQeVN0cmluZ19HRVRfU0laRShyZWFkbmwpOworICAgICAgICB1bnNpZ25lZCBjaGFyICpubCA9ICh1bnNpZ25lZCBjaGFyICopIFB5U3RyaW5nX0FTX1NUUklORyhyZWFkbmwpOworICAgICAgICBpZiAocmVhZG5sX2xlbiA9PSAxKSB7CisgICAgICAgICAgICBQeV9VTklDT0RFICpwb3MgPSBmaW5kX2NvbnRyb2xfY2hhcihzdGFydCwgZW5kLCBubFswXSk7CisgICAgICAgICAgICBpZiAocG9zICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvcyAtIHN0YXJ0ICsgMTsKKyAgICAgICAgICAgICpjb25zdW1lZCA9IGxlbjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKnMgPSBzdGFydDsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKmUgPSBlbmQgLSByZWFkbmxfbGVuICsgMTsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgKnBvczsKKyAgICAgICAgICAgIGlmIChlIDwgcykKKyAgICAgICAgICAgICAgICBlID0gczsKKyAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpwb3MgPSBmaW5kX2NvbnRyb2xfY2hhcihzLCBlbmQsIG5sWzBdKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zID09IE5VTEwgfHwgcG9zID49IGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCByZWFkbmxfbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc1tpXSAhPSBubFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaSA9PSByZWFkbmxfbGVuKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zIC0gc3RhcnQgKyByZWFkbmxfbGVuOworICAgICAgICAgICAgICAgIHMgPSBwb3MgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zID0gZmluZF9jb250cm9sX2NoYXIoZSwgZW5kLCBubFswXSk7CisgICAgICAgICAgICBpZiAocG9zID09IE5VTEwpCisgICAgICAgICAgICAgICAgKmNvbnN1bWVkID0gbGVuOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpjb25zdW1lZCA9IHBvcyAtIHN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3RleHRpb3dyYXBwZXJfcmVhZGxpbmUodGV4dGlvICpzZWxmLCBQeV9zc2l6ZV90IGxpbWl0KQoreworICAgIFB5T2JqZWN0ICpsaW5lID0gTlVMTCwgKmNodW5rcyA9IE5VTEwsICpyZW1haW5pbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc3RhcnQsIGVuZHBvcywgY2h1bmtlZCwgb2Zmc2V0X3RvX2J1ZmZlcjsKKyAgICBpbnQgcmVzOworCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGNodW5rZWQgPSAwOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlfVU5JQ09ERSAqcHRyOworICAgICAgICBQeV9zc2l6ZV90IGxpbmVfbGVuOworICAgICAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gMDsKKworICAgICAgICAvKiBGaXJzdCwgZ2V0IHNvbWUgZGF0YSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgcmVzID0gMTsKKyAgICAgICAgd2hpbGUgKCFzZWxmLT5kZWNvZGVkX2NoYXJzIHx8CisgICAgICAgICAgICAgICAhUHlVbmljb2RlX0dFVF9TSVpFKHNlbGYtPmRlY29kZWRfY2hhcnMpKSB7CisgICAgICAgICAgICByZXMgPSB0ZXh0aW93cmFwcGVyX3JlYWRfY2h1bmsoc2VsZik7CisgICAgICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIHRleHRpb3dyYXBwZXJfc2V0X2RlY29kZWRfY2hhcnMoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgICAgICAgICBzdGFydCA9IGVuZHBvcyA9IG9mZnNldF90b19idWZmZXIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVtYWluaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLT5kZWNvZGVkX2NoYXJzOworICAgICAgICAgICAgc3RhcnQgPSBzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQ7CisgICAgICAgICAgICBvZmZzZXRfdG9fYnVmZmVyID0gMDsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQgPT0gMCk7CisgICAgICAgICAgICBsaW5lID0gUHlVbmljb2RlX0NvbmNhdChyZW1haW5pbmcsIHNlbGYtPmRlY29kZWRfY2hhcnMpOworICAgICAgICAgICAgc3RhcnQgPSAwOworICAgICAgICAgICAgb2Zmc2V0X3RvX2J1ZmZlciA9IFB5VW5pY29kZV9HRVRfU0laRShyZW1haW5pbmcpOworICAgICAgICAgICAgUHlfQ0xFQVIocmVtYWluaW5nKTsKKyAgICAgICAgICAgIGlmIChsaW5lID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHB0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKGxpbmUpOworICAgICAgICBsaW5lX2xlbiA9IFB5VW5pY29kZV9HRVRfU0laRShsaW5lKTsKKworICAgICAgICBlbmRwb3MgPSBfUHlJT19maW5kX2xpbmVfZW5kaW5nKAorICAgICAgICAgICAgc2VsZi0+cmVhZHRyYW5zbGF0ZSwgc2VsZi0+cmVhZHVuaXZlcnNhbCwgc2VsZi0+cmVhZG5sLAorICAgICAgICAgICAgcHRyICsgc3RhcnQsIHB0ciArIGxpbmVfbGVuLCAmY29uc3VtZWQpOworICAgICAgICBpZiAoZW5kcG9zID49IDApIHsKKyAgICAgICAgICAgIGVuZHBvcyArPSBzdGFydDsKKyAgICAgICAgICAgIGlmIChsaW1pdCA+PSAwICYmIChlbmRwb3MgLSBzdGFydCkgKyBjaHVua2VkID49IGxpbWl0KQorICAgICAgICAgICAgICAgIGVuZHBvcyA9IHN0YXJ0ICsgbGltaXQgLSBjaHVua2VkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBXZSBjYW4gcHV0IGFzaWRlIHVwIHRvIGBlbmRwb3NgICovCisgICAgICAgIGVuZHBvcyA9IGNvbnN1bWVkICsgc3RhcnQ7CisgICAgICAgIGlmIChsaW1pdCA+PSAwICYmIChlbmRwb3MgLSBzdGFydCkgKyBjaHVua2VkID49IGxpbWl0KSB7CisgICAgICAgICAgICAvKiBEaWRuJ3QgZmluZCBsaW5lIGVuZGluZywgYnV0IHJlYWNoZWQgbGVuZ3RoIGxpbWl0ICovCisgICAgICAgICAgICBlbmRwb3MgPSBzdGFydCArIGxpbWl0IC0gY2h1bmtlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVuZHBvcyA+IHN0YXJ0KSB7CisgICAgICAgICAgICAvKiBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIHB1dCBhc2lkZSBjdXJyZW50IGRhdGEgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpzOworICAgICAgICAgICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHB0ciArIHN0YXJ0LCBlbmRwb3MgLSBzdGFydCk7CisgICAgICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIHMpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2h1bmtlZCArPSBQeVVuaWNvZGVfR0VUX1NJWkUocyk7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CisgICAgICAgIH0KKyAgICAgICAgLyogVGhlcmUgbWF5IGJlIHNvbWUgcmVtYWluaW5nIGJ5dGVzIHdlJ2xsIGhhdmUgdG8gcHJlcGVuZCB0byB0aGUKKyAgICAgICAgICAgbmV4dCBjaHVuayBvZiBkYXRhICovCisgICAgICAgIGlmIChlbmRwb3MgPCBsaW5lX2xlbikgeworICAgICAgICAgICAgcmVtYWluaW5nID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgICAgICAgICBwdHIgKyBlbmRwb3MsIGxpbmVfbGVuIC0gZW5kcG9zKTsKKyAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGxpbmUpOworICAgICAgICAvKiBXZSBoYXZlIGNvbnN1bWVkIHRoZSBidWZmZXIgKi8KKyAgICAgICAgdGV4dGlvd3JhcHBlcl9zZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBOVUxMKTsKKyAgICB9CisKKyAgICBpZiAobGluZSAhPSBOVUxMKSB7CisgICAgICAgIC8qIE91ciBsaW5lIGVuZHMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyICovCisgICAgICAgIHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9IGVuZHBvcyAtIG9mZnNldF90b19idWZmZXI7CisgICAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kcG9zIDwgUHlVbmljb2RlX0dFVF9TSVpFKGxpbmUpKSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgPT0gMCAmJiBQeV9SRUZDTlQobGluZSkgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZsaW5lLCBlbmRwb3MpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUobGluZSkgKyBzdGFydCwgZW5kcG9zIC0gc3RhcnQpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKGxpbmUpOworICAgICAgICAgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgbGluZSA9IHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlbWFpbmluZyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkgeworICAgICAgICAgICAgY2h1bmtzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgcmVtYWluaW5nKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9DTEVBUihyZW1haW5pbmcpOworICAgIH0KKyAgICBpZiAoY2h1bmtzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGxpbmUgIT0gTlVMTCAmJiBQeUxpc3RfQXBwZW5kKGNodW5rcywgbGluZSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfQ0xFQVIobGluZSk7CisgICAgICAgIGxpbmUgPSBQeVVuaWNvZGVfSm9pbihfUHlJT19lbXB0eV9zdHIsIGNodW5rcyk7CisgICAgICAgIGlmIChsaW5lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICB9CisgICAgaWYgKGxpbmUgPT0gTlVMTCkKKyAgICAgICAgbGluZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKKworICAgIHJldHVybiBsaW5lOworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKKyAgICBQeV9YREVDUkVGKHJlbWFpbmluZyk7CisgICAgUHlfWERFQ1JFRihsaW5lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfcmVhZGxpbmUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqbGltaXRvYmogPSBOVUxMOworICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cmVhZGxpbmUiLCAmbGltaXRvYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobGltaXRvYmopIHsKKyAgICAgICAgaWYgKCFQeU51bWJlcl9DaGVjayhsaW1pdG9iaikpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShsaW1pdG9iaiktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbGltaXQgPSBQeU51bWJlcl9Bc1NzaXplX3QobGltaXRvYmosIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgICAgICBpZiAobGltaXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gX3RleHRpb3dyYXBwZXJfcmVhZGxpbmUoc2VsZiwgbGltaXQpOworfQorCisvKiBTZWVrIGFuZCBUZWxsICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9vZmZfdCBzdGFydF9wb3M7CisgICAgaW50IGRlY19mbGFnczsKKyAgICBpbnQgYnl0ZXNfdG9fZmVlZDsKKyAgICBpbnQgY2hhcnNfdG9fc2tpcDsKKyAgICBjaGFyIG5lZWRfZW9mOworfSBjb29raWVfdHlwZTsKKworLyoKKyAgIFRvIHNwZWVkIHVwIGNvb2tpZSBwYWNraW5nL3VucGFja2luZywgd2Ugc3RvcmUgdGhlIGZpZWxkcyBpbiBhIHRlbXBvcmFyeQorICAgc3RyaW5nIGFuZCBjYWxsIF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgpIG9yIF9QeUxvbmdfQXNCeXRlQXJyYXkgKHJlc3AuKS4KKyAgIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGRlZmluZSBhdCB3aGljaCBvZmZzZXRzIGluIHRoZSBpbnRlcm1lZGlhcnkgYnl0ZQorICAgc3RyaW5nIHRoZSB2YXJpb3VzIENvb2tpZVN0cnVjdCBmaWVsZHMgd2lsbCBiZSBzdG9yZWQuCisgKi8KKworI2RlZmluZSBDT09LSUVfQlVGX0xFTiAgICAgIChzaXplb2YoUHlfb2ZmX3QpICsgMyAqIHNpemVvZihpbnQpICsgc2l6ZW9mKGNoYXIpKQorCisjaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisKKyMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAwCisKKy8qIFdlIHdhbnQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHRvIGFsc28gYmUgdGhlIGxlYXN0CisgICBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYmlnLWVuZGlhbiBtb2RlIHdlCisgICBtdXN0IGNvcHkgdGhlIGZpZWxkcyBpbiByZXZlcnNlIG9yZGVyLiAqLworCisjIGRlZmluZSBPRkZfU1RBUlRfUE9TICAgICAgKHNpemVvZihjaGFyKSArIDMgKiBzaXplb2YoaW50KSkKKyMgZGVmaW5lIE9GRl9ERUNfRkxBR1MgICAgICAoc2l6ZW9mKGNoYXIpICsgMiAqIHNpemVvZihpbnQpKQorIyBkZWZpbmUgT0ZGX0JZVEVTX1RPX0ZFRUQgIChzaXplb2YoY2hhcikgKyBzaXplb2YoaW50KSkKKyMgZGVmaW5lIE9GRl9DSEFSU19UT19TS0lQICAoc2l6ZW9mKGNoYXIpKQorIyBkZWZpbmUgT0ZGX05FRURfRU9GICAgICAgIDAKKworI2Vsc2UKKworIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDEKKworLyogTGl0dGxlLWVuZGlhbiBtb2RlOiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiBzdGFydF9wb3Mgd2lsbAorICAgbmF0dXJhbGx5IGVuZCB1cCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgY29va2llLiAqLworCisjIGRlZmluZSBPRkZfU1RBUlRfUE9TICAgICAgMAorIyBkZWZpbmUgT0ZGX0RFQ19GTEFHUyAgICAgIChzaXplb2YoUHlfb2ZmX3QpKQorIyBkZWZpbmUgT0ZGX0JZVEVTX1RPX0ZFRUQgIChzaXplb2YoUHlfb2ZmX3QpICsgc2l6ZW9mKGludCkpCisjIGRlZmluZSBPRkZfQ0hBUlNfVE9fU0tJUCAgKHNpemVvZihQeV9vZmZfdCkgKyAyICogc2l6ZW9mKGludCkpCisjIGRlZmluZSBPRkZfTkVFRF9FT0YgICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkpCisKKyNlbmRpZgorCitzdGF0aWMgaW50Cit0ZXh0aW93cmFwcGVyX3BhcnNlX2Nvb2tpZShjb29raWVfdHlwZSAqY29va2llLCBQeU9iamVjdCAqY29va2llT2JqKQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyW0NPT0tJRV9CVUZfTEVOXTsKKyAgICBQeUxvbmdPYmplY3QgKmNvb2tpZUxvbmcgPSAoUHlMb25nT2JqZWN0ICopUHlOdW1iZXJfTG9uZyhjb29raWVPYmopOworICAgIGlmIChjb29raWVMb25nID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChfUHlMb25nX0FzQnl0ZUFycmF5KGNvb2tpZUxvbmcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihjb29raWVMb25nKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQeV9ERUNSRUYoY29va2llTG9uZyk7CisKKyAgICBtZW1jcHkoJmNvb2tpZS0+c3RhcnRfcG9zLCBidWZmZXIgKyBPRkZfU1RBUlRfUE9TLCBzaXplb2YoY29va2llLT5zdGFydF9wb3MpKTsKKyAgICBtZW1jcHkoJmNvb2tpZS0+ZGVjX2ZsYWdzLCBidWZmZXIgKyBPRkZfREVDX0ZMQUdTLCBzaXplb2YoY29va2llLT5kZWNfZmxhZ3MpKTsKKyAgICBtZW1jcHkoJmNvb2tpZS0+Ynl0ZXNfdG9fZmVlZCwgYnVmZmVyICsgT0ZGX0JZVEVTX1RPX0ZFRUQsIHNpemVvZihjb29raWUtPmJ5dGVzX3RvX2ZlZWQpKTsKKyAgICBtZW1jcHkoJmNvb2tpZS0+Y2hhcnNfdG9fc2tpcCwgYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKKyAgICBtZW1jcHkoJmNvb2tpZS0+bmVlZF9lb2YsIGJ1ZmZlciArIE9GRl9ORUVEX0VPRiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9idWlsZF9jb29raWUoY29va2llX3R5cGUgKmNvb2tpZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcltDT09LSUVfQlVGX0xFTl07CisKKyAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX1NUQVJUX1BPUywgJmNvb2tpZS0+c3RhcnRfcG9zLCBzaXplb2YoY29va2llLT5zdGFydF9wb3MpKTsKKyAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0RFQ19GTEFHUywgJmNvb2tpZS0+ZGVjX2ZsYWdzLCBzaXplb2YoY29va2llLT5kZWNfZmxhZ3MpKTsKKyAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0JZVEVTX1RPX0ZFRUQsICZjb29raWUtPmJ5dGVzX3RvX2ZlZWQsIHNpemVvZihjb29raWUtPmJ5dGVzX3RvX2ZlZWQpKTsKKyAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsICZjb29raWUtPmNoYXJzX3RvX3NraXAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKKyAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX05FRURfRU9GLCAmY29va2llLT5uZWVkX2VvZiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKKworICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgSVNfTElUVExFX0VORElBTiwgMCk7Cit9CisjdW5kZWYgSVNfTElUVExFX0VORElBTgorCitzdGF0aWMgaW50CitfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIC8qIFdoZW4gc2Vla2luZyB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSwgd2UgY2FsbCBkZWNvZGVyLnJlc2V0KCkKKyAgICAgICByYXRoZXIgdGhhbiBkZWNvZGVyLmdldHN0YXRlKCkuCisgICAgICAgVGhpcyBpcyBmb3IgYSBmZXcgZGVjb2RlcnMgc3VjaCBhcyB1dGYtMTYgZm9yIHdoaWNoIHRoZSBzdGF0ZSB2YWx1ZQorICAgICAgIGF0IHN0YXJ0IGlzIG5vdCAoYiIiLCAwKSBidXQgZS5nLiAoYiIiLCAyKSAobWVhbmluZywgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICB1dGYtMTYsIHRoYXQgd2UgYXJlIGV4cGVjdGluZyBhIEJPTSkuCisgICAgKi8KKyAgICBpZiAoY29va2llLT5zdGFydF9wb3MgPT0gMCAmJiBjb29raWUtPmRlY19mbGFncyA9PSAwKQorICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5kZWNvZGVyLCBfUHlJT19zdHJfcmVzZXQsIE5VTEwpOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLCAic2V0c3RhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoKHNpKSkiLCAiIiwgY29va2llLT5kZWNfZmxhZ3MpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfdGV4dGlvd3JhcHBlcl9lbmNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIC8qIFNhbWUgYXMgX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSgpIGFib3ZlLiAqLworICAgIGlmIChjb29raWUtPnN0YXJ0X3BvcyA9PSAwICYmIGNvb2tpZS0+ZGVjX2ZsYWdzID09IDApIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZW5jb2RlciwgX1B5SU9fc3RyX3Jlc2V0LCBOVUxMKTsKKyAgICAgICAgc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmVuY29kZXIsIF9QeUlPX3N0cl9zZXRzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5SU9femVybywgTlVMTCk7CisgICAgICAgIHNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSA9IDA7CisgICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9zZWVrKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmNvb2tpZU9iaiwgKnBvc29iajsKKyAgICBjb29raWVfdHlwZSBjb29raWU7CisgICAgaW50IHdoZW5jZSA9IDA7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgY21wOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpzZWVrIiwgJmNvb2tpZU9iaiwgJndoZW5jZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIFB5X0lOQ1JFRihjb29raWVPYmopOworCisgICAgaWYgKCFzZWxmLT5zZWVrYWJsZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICh3aGVuY2UgPT0gMSkgeworICAgICAgICAvKiBzZWVrIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNvb2tpZU9iaiwgX1B5SU9femVybywgUHlfRVEpOworICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkbyBub256ZXJvIGN1ci1yZWxhdGl2ZSBzZWVrcyIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogU2Vla2luZyB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBzaG91bGQgYXR0ZW1wdCB0bworICAgICAgICAgKiBzeW5jIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aXRoIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgUHlfREVDUkVGKGNvb2tpZU9iaik7CisgICAgICAgIGNvb2tpZU9iaiA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKFB5T2JqZWN0ICopc2VsZiwgInRlbGwiLCBOVUxMKTsKKyAgICAgICAgaWYgKGNvb2tpZU9iaiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBlbHNlIGlmICh3aGVuY2UgPT0gMikgeworICAgICAgICAvKiBzZWVrIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlICovCisKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNvb2tpZU9iaiwgX1B5SU9femVybywgUHlfRVEpOworICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBpZiAoY21wID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkbyBub256ZXJvIGVuZC1yZWxhdGl2ZSBzZWVrcyIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilzZWxmLCAiZmx1c2giLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKworICAgICAgICB0ZXh0aW93cmFwcGVyX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIE5VTEwpOworICAgICAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisgICAgICAgIGlmIChzZWxmLT5kZWNvZGVyKSB7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmRlY29kZXIsICJyZXNldCIsIE5VTEwpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJzZWVrIiwgImlpIiwgMCwgMik7CisgICAgICAgIFB5X1hERUNSRUYoY29va2llT2JqKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZWxzZSBpZiAod2hlbmNlICE9IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB3aGVuY2UgKCVkLCBzaG91bGQgYmUgMCwgMSBvciAyKSIsIHdoZW5jZSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY29va2llT2JqLCBfUHlJT196ZXJvLCBQeV9MVCk7CisgICAgaWYgKGNtcCA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChjbXAgPT0gMSkgeworICAgICAgICBQeU9iamVjdCAqcmVwciA9IFB5T2JqZWN0X1JlcHIoY29va2llT2JqKTsKKyAgICAgICAgaWYgKHJlcHIgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIHNlZWsgcG9zaXRpb24gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgICAgIH0KKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICAvKiBUaGUgc3RyYXRlZ3kgb2Ygc2VlaygpIGlzIHRvIGdvIGJhY2sgdG8gdGhlIHNhZmUgc3RhcnQgcG9pbnQKKyAgICAgKiBhbmQgcmVwbGF5IHRoZSBlZmZlY3Qgb2YgcmVhZChjaGFyc190b19za2lwKSBmcm9tIHRoZXJlLgorICAgICAqLworICAgIGlmICh0ZXh0aW93cmFwcGVyX3BhcnNlX2Nvb2tpZSgmY29va2llLCBjb29raWVPYmopIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogU2VlayBiYWNrIHRvIHRoZSBzYWZlIHN0YXJ0IHBvaW50LiAqLworICAgIHBvc29iaiA9IFB5TG9uZ19Gcm9tT2ZmX3QoY29va2llLnN0YXJ0X3Bvcyk7CisgICAgaWYgKHBvc29iaiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9zZWVrLCBwb3NvYmosIE5VTEwpOworICAgIFB5X0RFQ1JFRihwb3NvYmopOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgdGV4dGlvd3JhcHBlcl9zZXRfZGVjb2RlZF9jaGFycyhzZWxmLCBOVUxMKTsKKyAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7CisKKyAgICAvKiBSZXN0b3JlIHRoZSBkZWNvZGVyIHRvIGl0cyBzdGF0ZSBmcm9tIHRoZSBzYWZlIHN0YXJ0IHBvaW50LiAqLworICAgIGlmIChzZWxmLT5kZWNvZGVyKSB7CisgICAgICAgIGlmIChfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHNlbGYsICZjb29raWUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoY29va2llLmNoYXJzX3RvX3NraXApIHsKKyAgICAgICAgLyogSnVzdCBsaWtlIF9yZWFkX2NodW5rLCBmZWVkIHRoZSBkZWNvZGVyIGFuZCBzYXZlIGEgc25hcHNob3QuICovCisgICAgICAgIFB5T2JqZWN0ICppbnB1dF9jaHVuayA9IFB5T2JqZWN0X0NhbGxNZXRob2QoCisgICAgICAgICAgICBzZWxmLT5idWZmZXIsICJyZWFkIiwgImkiLCBjb29raWUuYnl0ZXNfdG9fZmVlZCk7CisgICAgICAgIFB5T2JqZWN0ICpkZWNvZGVkOworCisgICAgICAgIGlmIChpbnB1dF9jaHVuayA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGFzc2VydCAoUHlCeXRlc19DaGVjayhpbnB1dF9jaHVuaykpOworCisgICAgICAgIHNlbGYtPnNuYXBzaG90ID0gUHlfQnVpbGRWYWx1ZSgiaU4iLCBjb29raWUuZGVjX2ZsYWdzLCBpbnB1dF9jaHVuayk7CisgICAgICAgIGlmIChzZWxmLT5zbmFwc2hvdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW5wdXRfY2h1bmspOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgZGVjb2RlZCA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+ZGVjb2RlciwgImRlY29kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPaSIsIGlucHV0X2NodW5rLCAoaW50KWNvb2tpZS5uZWVkX2VvZik7CisKKyAgICAgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICB0ZXh0aW93cmFwcGVyX3NldF9kZWNvZGVkX2NoYXJzKHNlbGYsIGRlY29kZWQpOworCisgICAgICAgIC8qIFNraXAgY2hhcnNfdG9fc2tpcCBvZiB0aGUgZGVjb2RlZCBjaGFyYWN0ZXJzLiAqLworICAgICAgICBpZiAoUHlVbmljb2RlX0dldFNpemUoc2VsZi0+ZGVjb2RlZF9jaGFycykgPCBjb29raWUuY2hhcnNfdG9fc2tpcCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsICJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIHNlbGYtPmRlY29kZWRfY2hhcnNfdXNlZCA9IGNvb2tpZS5jaGFyc190b19za2lwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+c25hcHNob3QgPSBQeV9CdWlsZFZhbHVlKCJpcyIsIGNvb2tpZS5kZWNfZmxhZ3MsICIiKTsKKyAgICAgICAgaWYgKHNlbGYtPnNuYXBzaG90ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogRmluYWxseSwgcmVzZXQgdGhlIGVuY29kZXIgKG1lcmVseSB1c2VmdWwgZm9yIHByb3BlciBCT00gaGFuZGxpbmcpICovCisgICAgaWYgKHNlbGYtPmVuY29kZXIpIHsKKyAgICAgICAgaWYgKF90ZXh0aW93cmFwcGVyX2VuY29kZXJfc2V0c3RhdGUoc2VsZiwgJmNvb2tpZSkgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICByZXR1cm4gY29va2llT2JqOworICBmYWlsOgorICAgIFB5X1hERUNSRUYoY29va2llT2JqKTsKKyAgICByZXR1cm4gTlVMTDsKKworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl90ZWxsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeU9iamVjdCAqcG9zb2JqID0gTlVMTDsKKyAgICBjb29raWVfdHlwZSBjb29raWUgPSB7MCwwLDAsMCwwfTsKKyAgICBQeU9iamVjdCAqbmV4dF9pbnB1dDsKKyAgICBQeV9zc2l6ZV90IGNoYXJzX3RvX3NraXAsIGNoYXJzX2RlY29kZWQ7CisgICAgUHlPYmplY3QgKnNhdmVkX3N0YXRlID0gTlVMTDsKKyAgICBjaGFyICppbnB1dCwgKmlucHV0X2VuZDsKKworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKworICAgIGlmICghc2VsZi0+c2Vla2FibGUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIik7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgaWYgKCFzZWxmLT50ZWxsaW5nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilzZWxmLCAiZmx1c2giLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBQeV9ERUNSRUYocmVzKTsKKworICAgIHBvc29iaiA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAidGVsbCIsIE5VTEwpOworICAgIGlmIChwb3NvYmogPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCB8fCBzZWxmLT5zbmFwc2hvdCA9PSBOVUxMKSB7CisgICAgICAgIGFzc2VydCAoc2VsZi0+ZGVjb2RlZF9jaGFycyA9PSBOVUxMIHx8IFB5VW5pY29kZV9HZXRTaXplKHNlbGYtPmRlY29kZWRfY2hhcnMpID09IDApOworICAgICAgICByZXR1cm4gcG9zb2JqOworICAgIH0KKworI2lmIGRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKKyAgICBjb29raWUuc3RhcnRfcG9zID0gUHlMb25nX0FzTG9uZ0xvbmcocG9zb2JqKTsKKyNlbHNlCisgICAgY29va2llLnN0YXJ0X3BvcyA9IFB5TG9uZ19Bc0xvbmcocG9zb2JqKTsKKyNlbmRpZgorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBTa2lwIGJhY2t3YXJkIHRvIHRoZSBzbmFwc2hvdCBwb2ludCAoc2VlIF9yZWFkX2NodW5rKS4gKi8KKyAgICBpZiAoIVB5QXJnX1BhcnNlKHNlbGYtPnNuYXBzaG90LCAiKGlPKSIsICZjb29raWUuZGVjX2ZsYWdzLCAmbmV4dF9pbnB1dCkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGFzc2VydCAoUHlCeXRlc19DaGVjayhuZXh0X2lucHV0KSk7CisKKyAgICBjb29raWUuc3RhcnRfcG9zIC09IFB5Qnl0ZXNfR0VUX1NJWkUobmV4dF9pbnB1dCk7CisKKyAgICAvKiBIb3cgbWFueSBkZWNvZGVkIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHVzZWQgdXAgc2luY2UgdGhlIHNuYXBzaG90PyAqLworICAgIGlmIChzZWxmLT5kZWNvZGVkX2NoYXJzX3VzZWQgPT0gMCkgIHsKKyAgICAgICAgLyogV2UgaGF2ZW4ndCBtb3ZlZCBmcm9tIHRoZSBzbmFwc2hvdCBwb2ludC4gKi8KKyAgICAgICAgUHlfREVDUkVGKHBvc29iaik7CisgICAgICAgIHJldHVybiB0ZXh0aW93cmFwcGVyX2J1aWxkX2Nvb2tpZSgmY29va2llKTsKKyAgICB9CisKKyAgICBjaGFyc190b19za2lwID0gc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkOworCisgICAgLyogU3RhcnRpbmcgZnJvbSB0aGUgc25hcHNob3QgcG9zaXRpb24sIHdlIHdpbGwgd2FsayB0aGUgZGVjb2RlcgorICAgICAqIGZvcndhcmQgdW50aWwgaXQgZ2l2ZXMgdXMgZW5vdWdoIGRlY29kZWQgY2hhcmFjdGVycy4KKyAgICAgKi8KKyAgICBzYXZlZF9zdGF0ZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlJT19zdHJfZ2V0c3RhdGUsIE5VTEwpOworICAgIGlmIChzYXZlZF9zdGF0ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LiAqLworICAgIGlmIChfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHNlbGYsICZjb29raWUpIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogRmVlZCB0aGUgZGVjb2RlciBvbmUgYnl0ZSBhdCBhIHRpbWUuICBBcyB3ZSBnbywgbm90ZSB0aGUKKyAgICAgKiBuZWFyZXN0ICJzYWZlIHN0YXJ0IHBvaW50IiBiZWZvcmUgdGhlIGN1cnJlbnQgbG9jYXRpb24KKyAgICAgKiAoYSBwb2ludCB3aGVyZSB0aGUgZGVjb2RlciBoYXMgbm90aGluZyBidWZmZXJlZCwgc28gc2VlaygpCisgICAgICogY2FuIHNhZmVseSBzdGFydCBmcm9tIHRoZXJlIGFuZCBhZHZhbmNlIHRvIHRoaXMgbG9jYXRpb24pLgorICAgICAqLworICAgIGNoYXJzX2RlY29kZWQgPSAwOworICAgIGlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcobmV4dF9pbnB1dCk7CisgICAgaW5wdXRfZW5kID0gaW5wdXQgKyBQeUJ5dGVzX0dFVF9TSVpFKG5leHRfaW5wdXQpOworICAgIHdoaWxlIChpbnB1dCA8IGlucHV0X2VuZCkgeworICAgICAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgICAgIGNoYXIgKmRlY19idWZmZXI7CisgICAgICAgIFB5X3NzaXplX3QgZGVjX2J1ZmZlcl9sZW47CisgICAgICAgIGludCBkZWNfZmxhZ3M7CisKKyAgICAgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKAorICAgICAgICAgICAgc2VsZi0+ZGVjb2RlciwgImRlY29kZSIsICJzIyIsIGlucHV0LCAxKTsKKyAgICAgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2soZGVjb2RlZCkpOworICAgICAgICBjaGFyc19kZWNvZGVkICs9IFB5VW5pY29kZV9HRVRfU0laRShkZWNvZGVkKTsKKyAgICAgICAgUHlfREVDUkVGKGRlY29kZWQpOworCisgICAgICAgIGNvb2tpZS5ieXRlc190b19mZWVkICs9IDE7CisKKyAgICAgICAgc3RhdGUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9nZXRzdGF0ZSwgTlVMTCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKHN0YXRlLCAiKHMjaSkiLCAmZGVjX2J1ZmZlciwgJmRlY19idWZmZXJfbGVuLCAmZGVjX2ZsYWdzKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworCisgICAgICAgIGlmIChkZWNfYnVmZmVyX2xlbiA9PSAwICYmIGNoYXJzX2RlY29kZWQgPD0gY2hhcnNfdG9fc2tpcCkgeworICAgICAgICAgICAgLyogRGVjb2RlciBidWZmZXIgaXMgZW1wdHksIHNvIHRoaXMgaXMgYSBzYWZlIHN0YXJ0IHBvaW50LiAqLworICAgICAgICAgICAgY29va2llLnN0YXJ0X3BvcyArPSBjb29raWUuYnl0ZXNfdG9fZmVlZDsKKyAgICAgICAgICAgIGNoYXJzX3RvX3NraXAgLT0gY2hhcnNfZGVjb2RlZDsKKyAgICAgICAgICAgIGNvb2tpZS5kZWNfZmxhZ3MgPSBkZWNfZmxhZ3M7CisgICAgICAgICAgICBjb29raWUuYnl0ZXNfdG9fZmVlZCA9IDA7CisgICAgICAgICAgICBjaGFyc19kZWNvZGVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhcnNfZGVjb2RlZCA+PSBjaGFyc190b19za2lwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlucHV0Kys7CisgICAgfQorICAgIGlmIChpbnB1dCA9PSBpbnB1dF9lbmQpIHsKKyAgICAgICAgLyogV2UgZGlkbid0IGdldCBlbm91Z2ggZGVjb2RlZCBkYXRhOyBzaWduYWwgRU9GIHRvIGdldCBtb3JlLiAqLworICAgICAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoCisgICAgICAgICAgICBzZWxmLT5kZWNvZGVyLCAiZGVjb2RlIiwgInNpIiwgIiIsIC8qIGZpbmFsID0gKi8gMSk7CisgICAgICAgIGlmIChkZWNvZGVkID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzc2VydCAoUHlVbmljb2RlX0NoZWNrKGRlY29kZWQpKTsKKyAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBQeVVuaWNvZGVfR0VUX1NJWkUoZGVjb2RlZCk7CisgICAgICAgIFB5X0RFQ1JFRihkZWNvZGVkKTsKKyAgICAgICAgY29va2llLm5lZWRfZW9mID0gMTsKKworICAgICAgICBpZiAoY2hhcnNfZGVjb2RlZCA8IGNoYXJzX3RvX3NraXApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGZpbmFsbHkgKi8KKyAgICBQeV9YREVDUkVGKHBvc29iaik7CisgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5kZWNvZGVyLCAic2V0c3RhdGUiLCAiKE8pIiwgc2F2ZWRfc3RhdGUpOworICAgIFB5X0RFQ1JFRihzYXZlZF9zdGF0ZSk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYocmVzKTsKKworICAgIC8qIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4gKi8KKyAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IFB5X1NBRkVfRE9XTkNBU1QoY2hhcnNfdG9fc2tpcCwgUHlfc3NpemVfdCwgaW50KTsKKyAgICByZXR1cm4gdGV4dGlvd3JhcHBlcl9idWlsZF9jb29raWUoJmNvb2tpZSk7CisKKyAgZmFpbDoKKyAgICBQeV9YREVDUkVGKHBvc29iaik7CisgICAgaWYgKHNhdmVkX3N0YXRlKSB7CisgICAgICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7CisgICAgICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworCisgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+ZGVjb2RlciwgInNldHN0YXRlIiwgIihPKSIsIHNhdmVkX3N0YXRlKTsKKyAgICAgICAgUHlfREVDUkVGKHNhdmVkX3N0YXRlKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl90cnVuY2F0ZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwb3MgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmcG9zKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKikgc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmJ1ZmZlciwgX1B5SU9fc3RyX3RydW5jYXRlLCBwb3MsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9yZXByKHRleHRpbyAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnJlczsKKyAgICBQeU9iamVjdCAqbmFtZXJlcHIgPSBOVUxMLCAqZW5jcmVwciA9IE5VTEw7CisKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKworICAgIG5hbWVvYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKSBzZWxmLCAibmFtZSIpOworICAgIGlmIChuYW1lb2JqID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgZW5jcmVwciA9IFB5T2JqZWN0X1JlcHIoc2VsZi0+ZW5jb2RpbmcpOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8X2lvLlRleHRJT1dyYXBwZXIgZW5jb2Rpbmc9JXM+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKGVuY3JlcHIpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVuY3JlcHIgPSBQeU9iamVjdF9SZXByKHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgbmFtZXJlcHIgPSBQeU9iamVjdF9SZXByKG5hbWVvYmopOworICAgICAgICByZXMgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0lcyBlbmNvZGluZz0lcz4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcobmFtZXJlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoZW5jcmVwcikpOworICAgICAgICBQeV9ERUNSRUYobmFtZW9iaik7CisgICAgfQorICAgIFB5X1hERUNSRUYobmFtZXJlcHIpOworICAgIFB5X1hERUNSRUYoZW5jcmVwcik7CisgICAgcmV0dXJuIHJlczsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihuYW1lcmVwcik7CisgICAgUHlfWERFQ1JFRihlbmNyZXByKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisvKiBJbnF1aXJpZXMgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfZmlsZW5vKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAiZmlsZW5vIiwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX3NlZWthYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+YnVmZmVyLCAic2Vla2FibGUiLCBOVUxMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfcmVhZGFibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJyZWFkYWJsZSIsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl93cml0YWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgIndyaXRhYmxlIiwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXh0aW93cmFwcGVyX2lzYXR0eSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgImlzYXR0eSIsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9mbHVzaCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKyAgICBzZWxmLT50ZWxsaW5nID0gc2VsZi0+c2Vla2FibGU7CisgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJmbHVzaCIsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9jbG9zZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaW50IHI7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisKKyAgICByZXMgPSB0ZXh0aW93cmFwcGVyX2Nsb3NlZF9nZXQoc2VsZiwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKHIgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBpZiAociA+IDApIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7IC8qIHN0cmVhbSBhbHJlYWR5IGNsb3NlZCAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKilzZWxmLCAiZmx1c2giLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKworICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLT5idWZmZXIsICJjbG9zZSIsIE5VTEwpOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfaXRlcm5leHQodGV4dGlvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpsaW5lOworCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisKKyAgICBzZWxmLT50ZWxsaW5nID0gMDsKKyAgICBpZiAoUHlfVFlQRShzZWxmKSA9PSAmUHlUZXh0SU9XcmFwcGVyX1R5cGUpIHsKKyAgICAgICAgLyogU2tpcCBtZXRob2QgY2FsbCBvdmVyaGVhZCBmb3Igc3BlZWQgKi8KKyAgICAgICAgbGluZSA9IF90ZXh0aW93cmFwcGVyX3JlYWRsaW5lKHNlbGYsIC0xKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxpbmUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUlPX3N0cl9yZWFkbGluZSwgTlVMTCk7CisgICAgICAgIGlmIChsaW5lICYmICFQeVVuaWNvZGVfQ2hlY2sobGluZSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIGFuIHN0ciBvYmplY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShsaW5lKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsaW5lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5VW5pY29kZV9HRVRfU0laRShsaW5lKSA9PSAwKSB7CisgICAgICAgIC8qIFJlYWNoZWQgRU9GIG9yIHdvdWxkIGhhdmUgYmxvY2tlZCAqLworICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNuYXBzaG90KTsKKyAgICAgICAgc2VsZi0+dGVsbGluZyA9IHNlbGYtPnNlZWthYmxlOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbGluZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfbmFtZV9nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQoreworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNlbGYtPmJ1ZmZlciwgIm5hbWUiKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfY2xvc2VkX2dldCh0ZXh0aW8gKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHIoc2VsZi0+YnVmZmVyLCBfUHlJT19zdHJfY2xvc2VkKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RleHRpb3dyYXBwZXJfbmV3bGluZXNfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIGlmIChzZWxmLT5kZWNvZGVyID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJlcyA9IFB5T2JqZWN0X0dldEF0dHIoc2VsZi0+ZGVjb2RlciwgX1B5SU9fc3RyX25ld2xpbmVzKTsKKyAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9lcnJvcnNfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBQeV9JTkNSRUYoc2VsZi0+ZXJyb3JzKTsKKyAgICByZXR1cm4gc2VsZi0+ZXJyb3JzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9jaHVua19zaXplX2dldCh0ZXh0aW8gKnNlbGYsIHZvaWQgKmNvbnRleHQpCit7CisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5jaHVua19zaXplKTsKK30KKworc3RhdGljIGludAordGV4dGlvd3JhcHBlcl9jaHVua19zaXplX3NldCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmNvbnRleHQpCit7CisgICAgUHlfc3NpemVfdCBuOworICAgIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKTsKKyAgICBuID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfVHlwZUVycm9yKTsKKyAgICBpZiAobiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG4gPD0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhIHN0cmljdGx5IHBvc2l0aXZlIGludGVnZXIgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5jaHVua19zaXplID0gbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHRleHRpb3dyYXBwZXJfbWV0aG9kc1tdID0geworICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfZGV0YWNoLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3JlYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkbGluZSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9mbHVzaCwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9jbG9zZSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9maWxlbm8sIE1FVEhfTk9BUkdTfSwKKyAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfc2VlaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl90ZWxsLCBNRVRIX05PQVJHU30sCisgICAgeyJ0cnVuY2F0ZSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIHRleHRpb3dyYXBwZXJfbWVtYmVyc1tdID0geworICAgIHsiZW5jb2RpbmciLCBUX09CSkVDVCwgb2Zmc2V0b2YodGV4dGlvLCBlbmNvZGluZyksIFJFQURPTkxZfSwKKyAgICB7ImJ1ZmZlciIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGJ1ZmZlciksIFJFQURPTkxZfSwKKyAgICB7ImxpbmVfYnVmZmVyaW5nIiwgVF9CT09MLCBvZmZzZXRvZih0ZXh0aW8sIGxpbmVfYnVmZmVyaW5nKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIHRleHRpb3dyYXBwZXJfZ2V0c2V0W10gPSB7CisgICAgeyJuYW1lIiwgKGdldHRlcil0ZXh0aW93cmFwcGVyX25hbWVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpdGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKy8qICAgIHsibW9kZSIsIChnZXR0ZXIpVGV4dElPV3JhcHBlcl9tb2RlX2dldCwgTlVMTCwgTlVMTH0sCisqLworICAgIHsibmV3bGluZXMiLCAoZ2V0dGVyKXRleHRpb3dyYXBwZXJfbmV3bGluZXNfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7ImVycm9ycyIsIChnZXR0ZXIpdGV4dGlvd3JhcHBlcl9lcnJvcnNfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Il9DSFVOS19TSVpFIiwgKGdldHRlcil0ZXh0aW93cmFwcGVyX2NodW5rX3NpemVfZ2V0LAorICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKXRleHRpb3dyYXBwZXJfY2h1bmtfc2l6ZV9zZXQsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5VGV4dElPV3JhcHBlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uVGV4dElPV3JhcHBlciIsICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZih0ZXh0aW8pLCAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKXRleHRpb3dyYXBwZXJfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBzX2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIChyZXByZnVuYyl0ZXh0aW93cmFwcGVyX3JlcHIsLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgIHRleHRpb3dyYXBwZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKXRleHRpb3dyYXBwZXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpdGV4dGlvd3JhcHBlcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZih0ZXh0aW8sIHdlYWtyZWZsaXN0KSwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKXRleHRpb3dyYXBwZXJfaXRlcm5leHQsIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgdGV4dGlvd3JhcHBlcl9tZXRob2RzLCAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICB0ZXh0aW93cmFwcGVyX21lbWJlcnMsICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIHRleHRpb3dyYXBwZXJfZ2V0c2V0LCAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICBvZmZzZXRvZih0ZXh0aW8sIGRpY3QpLCAvKnRwX2RpY3RvZmZzZXQqLworICAgIChpbml0cHJvYyl0ZXh0aW93cmFwcGVyX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCit9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fanNvbi5jIGIvTW9kdWxlcy9fanNvbi5jCmluZGV4IDJlNzdmMWMuLjcxZDNlNTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2pzb24uYworKysgYi9Nb2R1bGVzL19qc29uLmMKQEAgLTEsMTkgKzEsMTY2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1RZUEUpCisjZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCisjZW5kaWYKKyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCit0eXBlZGVmIGludCBQeV9zc2l6ZV90OworI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCisjZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KKyNkZWZpbmUgUHlJbnRfRnJvbVNzaXplX3QgUHlJbnRfRnJvbUxvbmcKKyNkZWZpbmUgUHlJbnRfQXNTc2l6ZV90IFB5SW50X0FzTG9uZworI2VuZGlmCisjaWZuZGVmIFB5X0lTX0ZJTklURQorI2RlZmluZSBQeV9JU19GSU5JVEUoWCkgKCFQeV9JU19JTkZJTklUWShYKSAmJiAhUHlfSVNfTkFOKFgpKQorI2VuZGlmCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZSBVTlVTRUQKKyNlbmRpZgogCiAjZGVmaW5lIERFRkFVTFRfRU5DT0RJTkcgInV0Zi04IgotI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKLSNkZWZpbmUgTUlOX0VYUEFOU0lPTiA2CiAKKyNkZWZpbmUgUHlTY2FubmVyX0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeVNjYW5uZXJUeXBlKQorI2RlZmluZSBQeVNjYW5uZXJfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeVNjYW5uZXJUeXBlKQorI2RlZmluZSBQeUVuY29kZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5RW5jb2RlclR5cGUpCisjZGVmaW5lIFB5RW5jb2Rlcl9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RW5jb2RlclR5cGUpCisKK3N0YXRpYyBQeVR5cGVPYmplY3QgUHlTY2FubmVyVHlwZTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgUHlFbmNvZGVyVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgX1B5U2Nhbm5lck9iamVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICplbmNvZGluZzsKKyAgICBQeU9iamVjdCAqc3RyaWN0OworICAgIFB5T2JqZWN0ICpvYmplY3RfaG9vazsKKyAgICBQeU9iamVjdCAqcGFpcnNfaG9vazsKKyAgICBQeU9iamVjdCAqcGFyc2VfZmxvYXQ7CisgICAgUHlPYmplY3QgKnBhcnNlX2ludDsKKyAgICBQeU9iamVjdCAqcGFyc2VfY29uc3RhbnQ7Cit9IFB5U2Nhbm5lck9iamVjdDsKKworc3RhdGljIFB5TWVtYmVyRGVmIHNjYW5uZXJfbWVtYmVyc1tdID0geworICAgIHsiZW5jb2RpbmciLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBlbmNvZGluZyksIFJFQURPTkxZLCAiZW5jb2RpbmcifSwKKyAgICB7InN0cmljdCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHN0cmljdCksIFJFQURPTkxZLCAic3RyaWN0In0sCisgICAgeyJvYmplY3RfaG9vayIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIG9iamVjdF9ob29rKSwgUkVBRE9OTFksICJvYmplY3RfaG9vayJ9LAorICAgIHsib2JqZWN0X3BhaXJzX2hvb2siLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBwYWlyc19ob29rKSwgUkVBRE9OTFksICJvYmplY3RfcGFpcnNfaG9vayJ9LAorICAgIHsicGFyc2VfZmxvYXQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlTY2FubmVyT2JqZWN0LCBwYXJzZV9mbG9hdCksIFJFQURPTkxZLCAicGFyc2VfZmxvYXQifSwKKyAgICB7InBhcnNlX2ludCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhcnNlX2ludCksIFJFQURPTkxZLCAicGFyc2VfaW50In0sCisgICAgeyJwYXJzZV9jb25zdGFudCIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVNjYW5uZXJPYmplY3QsIHBhcnNlX2NvbnN0YW50KSwgUkVBRE9OTFksICJwYXJzZV9jb25zdGFudCJ9LAorICAgIHtOVUxMfQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgX1B5RW5jb2Rlck9iamVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICptYXJrZXJzOworICAgIFB5T2JqZWN0ICpkZWZhdWx0Zm47CisgICAgUHlPYmplY3QgKmVuY29kZXI7CisgICAgUHlPYmplY3QgKmluZGVudDsKKyAgICBQeU9iamVjdCAqa2V5X3NlcGFyYXRvcjsKKyAgICBQeU9iamVjdCAqaXRlbV9zZXBhcmF0b3I7CisgICAgUHlPYmplY3QgKnNvcnRfa2V5czsKKyAgICBQeU9iamVjdCAqc2tpcGtleXM7CisgICAgaW50IGZhc3RfZW5jb2RlOworICAgIGludCBhbGxvd19uYW47Cit9IFB5RW5jb2Rlck9iamVjdDsKKworc3RhdGljIFB5TWVtYmVyRGVmIGVuY29kZXJfbWVtYmVyc1tdID0geworICAgIHsibWFya2VycyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIG1hcmtlcnMpLCBSRUFET05MWSwgIm1hcmtlcnMifSwKKyAgICB7ImRlZmF1bHQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBkZWZhdWx0Zm4pLCBSRUFET05MWSwgImRlZmF1bHQifSwKKyAgICB7ImVuY29kZXIiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBlbmNvZGVyKSwgUkVBRE9OTFksICJlbmNvZGVyIn0sCisgICAgeyJpbmRlbnQiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBpbmRlbnQpLCBSRUFET05MWSwgImluZGVudCJ9LAorICAgIHsia2V5X3NlcGFyYXRvciIsIFRfT0JKRUNULCBvZmZzZXRvZihQeUVuY29kZXJPYmplY3QsIGtleV9zZXBhcmF0b3IpLCBSRUFET05MWSwgImtleV9zZXBhcmF0b3IifSwKKyAgICB7Iml0ZW1fc2VwYXJhdG9yIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RW5jb2Rlck9iamVjdCwgaXRlbV9zZXBhcmF0b3IpLCBSRUFET05MWSwgIml0ZW1fc2VwYXJhdG9yIn0sCisgICAgeyJzb3J0X2tleXMiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBzb3J0X2tleXMpLCBSRUFET05MWSwgInNvcnRfa2V5cyJ9LAorICAgIHsic2tpcGtleXMiLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlFbmNvZGVyT2JqZWN0LCBza2lwa2V5cyksIFJFQURPTkxZLCAic2tpcGtleXMifSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeV9zc2l6ZV90Cithc2NpaV9lc2NhcGVfY2hhcihQeV9VTklDT0RFIGMsIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycyk7CitzdGF0aWMgUHlPYmplY3QgKgorYXNjaWlfZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKTsKK3N0YXRpYyBQeU9iamVjdCAqCithc2NpaV9lc2NhcGVfc3RyKFB5T2JqZWN0ICpweXN0cik7CitzdGF0aWMgUHlPYmplY3QgKgorcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYgVU5VU0VELCBQeU9iamVjdCAqcHlzdHIpOwordm9pZCBpbml0X2pzb24odm9pZCk7CitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbl9vbmNlX3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cik7CitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbl9vbmNlX3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpOworc3RhdGljIFB5T2JqZWN0ICoKK19idWlsZF9ydmFsX2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9zc2l6ZV90IGlkeCk7CitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbm5lcl9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOworc3RhdGljIGludAorc2Nhbm5lcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOworc3RhdGljIHZvaWQKK3NjYW5uZXJfZGVhbGxvYyhQeU9iamVjdCAqc2VsZik7CitzdGF0aWMgaW50CitzY2FubmVyX2NsZWFyKFB5T2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitzdGF0aWMgaW50CitlbmNvZGVyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitzdGF0aWMgdm9pZAorZW5jb2Rlcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBpbnQKK2VuY29kZXJfY2xlYXIoUHlPYmplY3QgKnNlbGYpOworc3RhdGljIGludAorZW5jb2Rlcl9saXN0ZW5jb2RlX2xpc3QoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcnZhbCwgUHlPYmplY3QgKnNlcSwgUHlfc3NpemVfdCBpbmRlbnRfbGV2ZWwpOworc3RhdGljIGludAorZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqb2JqLCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7CitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfZGljdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqZGN0LCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCk7CitzdGF0aWMgUHlPYmplY3QgKgorX2VuY29kZWRfY29uc3QoUHlPYmplY3QgKm9iaik7CitzdGF0aWMgdm9pZAorcmFpc2VfZXJybXNnKGNoYXIgKm1zZywgUHlPYmplY3QgKnMsIFB5X3NzaXplX3QgZW5kKTsKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9zdHJpbmcoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKK3N0YXRpYyBpbnQKK19jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cik7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cik7CitzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKKworI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKKyNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0gJ1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQorCisjZGVmaW5lIE1JTl9FWFBBTlNJT04gNgogI2lmZGVmIFB5X1VOSUNPREVfV0lERQogI2RlZmluZSBNQVhfRVhQQU5TSU9OICgyICogTUlOX0VYUEFOU0lPTikKICNlbHNlCiAjZGVmaW5lIE1BWF9FWFBBTlNJT04gTUlOX0VYUEFOU0lPTgogI2VuZGlmCiAKK3N0YXRpYyBpbnQKK19jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cikKK3sKKyAgICAvKiBQeU9iamVjdCB0byBQeV9zc2l6ZV90IGNvbnZlcnRlciAqLworICAgICpzaXplX3B0ciA9IFB5SW50X0FzU3NpemVfdChvKTsKKyAgICBpZiAoKnNpemVfcHRyID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdChQeV9zc2l6ZV90ICpzaXplX3B0cikKK3sKKyAgICAvKiBQeV9zc2l6ZV90IHRvIFB5T2JqZWN0IGNvbnZlcnRlciAqLworICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdCgqc2l6ZV9wdHIpOworfQorCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX2NoYXIoUHlfVU5JQ09ERSBjLCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCiB7Ci0gICAgUHlfVU5JQ09ERSB4OworICAgIC8qIEVzY2FwZSB1bmljb2RlIGNvZGUgcG9pbnQgYyB0byBBU0NJSSBlc2NhcGUgc2VxdWVuY2VzCisgICAgaW4gY2hhciAqb3V0cHV0LiBvdXRwdXQgbXVzdCBoYXZlIGF0IGxlYXN0IDEyIGJ5dGVzIHVudXNlZCB0bworICAgIGFjY29tbW9kYXRlIGFuIGVzY2FwZWQgc3Vycm9nYXRlIHBhaXIgIlx1WFhYWFx1WFhYWCIgKi8KICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOwogICAgIHN3aXRjaCAoYykgewogICAgICAgICBjYXNlICdcXCc6IG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7IGJyZWFrOwpAQCAtMzAsMjcgKzE3NywxOSBAQAogICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdiA9IGMgLSAweDEwMDAwOwogICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKLSAgICAgICAgICAgICAgICB4ID0gKGMgJiAweGYwMDApID4+IDEyOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgICAgIHggPSAoYyAmIDB4MGYwMCkgPj4gODsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgICAgICB4ID0gKGMgJiAweDAwZjApID4+IDQ7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICAgICAgeCA9IChjICYgMHgwMDBmKTsKLSAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgICAgICApICYgMHhmXTsKICAgICAgICAgICAgICAgICBjID0gMHhkYzAwIHwgKHYgJiAweDNmZik7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgeCA9IChjICYgMHhmMDAwKSA+PiAxMjsKLSAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICh4IDwgMTApID8gJzAnICsgeCA6ICdhJyArICh4IC0gMTApOwotICAgICAgICAgICAgeCA9IChjICYgMHgwZjAwKSA+PiA4OwotICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKHggPCAxMCkgPyAnMCcgKyB4IDogJ2EnICsgKHggLSAxMCk7Ci0gICAgICAgICAgICB4ID0gKGMgJiAweDAwZjApID4+IDQ7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKLSAgICAgICAgICAgIHggPSAoYyAmIDB4MDAwZik7Ci0gICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAoeCA8IDEwKSA/ICcwJyArIHggOiAnYScgKyAoeCAtIDEwKTsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyhjID4+ICA4KSAmIDB4Zl07CisgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKGMgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlsoYyAgICAgICkgJiAweGZdOwogICAgIH0KICAgICByZXR1cm4gY2hhcnM7CiB9CkBAIC01OCw5ICsxOTcsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhc2NpaV9lc2NhcGVfdW5pY29kZShQeU9iamVjdCAqcHlzdHIpCiB7CisgICAgLyogVGFrZSBhIFB5VW5pY29kZSBweXN0ciBhbmQgcmV0dXJuIGEgbmV3IEFTQ0lJLW9ubHkgZXNjYXBlZCBQeVN0cmluZyAqLwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IGlucHV0X2NoYXJzOwogICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7CisgICAgUHlfc3NpemVfdCBtYXhfb3V0cHV0X3NpemU7CiAgICAgUHlfc3NpemVfdCBjaGFyczsKICAgICBQeU9iamVjdCAqcnZhbDsKICAgICBjaGFyICpvdXRwdXQ7CkBAIC02OCw4ICsyMDksMTAgQEAKIAogICAgIGlucHV0X2NoYXJzID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKICAgICBpbnB1dF91bmljb2RlID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOworCiAgICAgLyogT25lIGNoYXIgaW5wdXQgY2FuIGJlIHVwIHRvIDYgY2hhcnMgb3V0cHV0LCBlc3RpbWF0ZSA0IG9mIHRoZXNlICovCiAgICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworICAgIG1heF9vdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKICAgICBydmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwogICAgIGlmIChydmFsID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MiwyMCArMjI1LDI0IEBACiAgICAgICAgIGlmIChTX0NIQVIoYykpIHsKICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IChjaGFyKWM7CiAgICAgICAgIH0KLQllbHNlIHsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFycyA9IGFzY2lpX2VzY2FwZV9jaGFyKGMsIG91dHB1dCwgY2hhcnMpOwogICAgICAgICB9CiAgICAgICAgIGlmIChvdXRwdXRfc2l6ZSAtIGNoYXJzIDwgKDEgKyBNQVhfRVhQQU5TSU9OKSkgewogICAgICAgICAgICAgLyogVGhlcmUncyBtb3JlIHRoYW4gZm91ciwgc28gbGV0J3MgcmVzaXplIGJ5IGEgbG90ICovCi0gICAgICAgICAgICBvdXRwdXRfc2l6ZSAqPSAyOworICAgICAgICAgICAgUHlfc3NpemVfdCBuZXdfb3V0cHV0X3NpemUgPSBvdXRwdXRfc2l6ZSAqIDI7CiAgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIHVwcGVyIGJvdW5kICovCi0gICAgICAgICAgICBpZiAob3V0cHV0X3NpemUgPiAyICsgKGlucHV0X2NoYXJzICogTUFYX0VYUEFOU0lPTikpIHsKLSAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IDIgKyAoaW5wdXRfY2hhcnMgKiBNQVhfRVhQQU5TSU9OKTsKKyAgICAgICAgICAgIGlmIChuZXdfb3V0cHV0X3NpemUgPiBtYXhfb3V0cHV0X3NpemUpIHsKKyAgICAgICAgICAgICAgICBuZXdfb3V0cHV0X3NpemUgPSBtYXhfb3V0cHV0X3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgb3V0cHV0X3NpemUpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgb3V0cHV0IHNpemUgY2hhbmdlZCBiZWZvcmUgcmVzaXppbmcgKi8KKyAgICAgICAgICAgIGlmIChuZXdfb3V0cHV0X3NpemUgIT0gb3V0cHV0X3NpemUpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IG5ld19vdXRwdXRfc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnZhbCwgb3V0cHV0X3NpemUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwdXQgPSBQeVN0cmluZ19BU19TVFJJTkcocnZhbCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwpAQCAtMTA4LDYgKzI1NSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXNjaWlfZXNjYXBlX3N0cihQeU9iamVjdCAqcHlzdHIpCiB7CisgICAgLyogVGFrZSBhIFB5U3RyaW5nIHB5c3RyIGFuZCByZXR1cm4gYSBuZXcgQVNDSUktb25seSBlc2NhcGVkIFB5U3RyaW5nICovCiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgaW5wdXRfY2hhcnM7CiAgICAgUHlfc3NpemVfdCBvdXRwdXRfc2l6ZTsKQEAgLTExOCwzMyArMjY2LDU2IEBACiAKICAgICBpbnB1dF9jaGFycyA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKTsKICAgICBpbnB1dF9zdHIgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOwotICAgIC8qIE9uZSBjaGFyIGlucHV0IGNhbiBiZSB1cCB0byA2IGNoYXJzIG91dHB1dCwgZXN0aW1hdGUgNCBvZiB0aGVzZSAqLwotICAgIG91dHB1dF9zaXplID0gMiArIChNSU5fRVhQQU5TSU9OICogNCkgKyBpbnB1dF9jaGFyczsKKworICAgIC8qIEZhc3QgcGF0aCBmb3IgYSBzdHJpbmcgdGhhdCdzIGFscmVhZHkgQVNDSUkgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykgeworICAgICAgICBQeV9VTklDT0RFIGMgPSAoUHlfVU5JQ09ERSkodW5zaWduZWQgY2hhcilpbnB1dF9zdHJbaV07CisgICAgICAgIGlmICghU19DSEFSKGMpKSB7CisgICAgICAgICAgICAvKiBJZiB3ZSBoYXZlIHRvIGVzY2FwZSBzb21ldGhpbmcsIHNjYW4gdGhlIHN0cmluZyBmb3IgdW5pY29kZSAqLworICAgICAgICAgICAgUHlfc3NpemVfdCBqOworICAgICAgICAgICAgZm9yIChqID0gaTsgaiA8IGlucHV0X2NoYXJzOyBqKyspIHsKKyAgICAgICAgICAgICAgICBjID0gKFB5X1VOSUNPREUpKHVuc2lnbmVkIGNoYXIpaW5wdXRfc3RyW2pdOworICAgICAgICAgICAgICAgIGlmIChjID4gMHg3ZikgeworICAgICAgICAgICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFjdGVyLCBiYWlsIHRvIHVuaWNvZGUgbW9kZSAqLworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pOworICAgICAgICAgICAgICAgICAgICB1bmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChpbnB1dF9zdHIsIGlucHV0X2NoYXJzLCAic3RyaWN0Iik7CisgICAgICAgICAgICAgICAgICAgIGlmICh1bmkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2VzY2FwZV91bmljb2RlKHVuaSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpID09IGlucHV0X2NoYXJzKSB7CisgICAgICAgIC8qIElucHV0IGlzIGFscmVhZHkgQVNDSUkgKi8KKyAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgaW5wdXRfY2hhcnM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBPbmUgY2hhciBpbnB1dCBjYW4gYmUgdXAgdG8gNiBjaGFycyBvdXRwdXQsIGVzdGltYXRlIDQgb2YgdGhlc2UgKi8KKyAgICAgICAgb3V0cHV0X3NpemUgPSAyICsgKE1JTl9FWFBBTlNJT04gKiA0KSArIGlucHV0X2NoYXJzOworICAgIH0KICAgICBydmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0cHV0X3NpemUpOwogICAgIGlmIChydmFsID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG91dHB1dCA9IFB5U3RyaW5nX0FTX1NUUklORyhydmFsKTsKLSAgICBjaGFycyA9IDA7Ci0gICAgb3V0cHV0W2NoYXJzKytdID0gJyInOwotICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IChQeV9VTklDT0RFKWlucHV0X3N0cltpXTsKKyAgICBvdXRwdXRbMF0gPSAnIic7CisKKyAgICAvKiBXZSBrbm93IHRoYXQgZXZlcnl0aGluZyB1cCB0byBpIGlzIEFTQ0lJIGFscmVhZHkgKi8KKyAgICBjaGFycyA9IGkgKyAxOworICAgIG1lbWNweSgmb3V0cHV0WzFdLCBpbnB1dF9zdHIsIGkpOworCisgICAgZm9yICg7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VOSUNPREUgYyA9IChQeV9VTklDT0RFKSh1bnNpZ25lZCBjaGFyKWlucHV0X3N0cltpXTsKICAgICAgICAgaWYgKFNfQ0hBUihjKSkgewogICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gKGNoYXIpYzsKICAgICAgICAgfQotCWVsc2UgaWYgKGMgPiAweDdGKSB7Ci0gICAgICAgICAgICAvKiBXZSBoaXQgYSBub24tQVNDSUkgY2hhcmFjdGVyLCBiYWlsIHRvIHVuaWNvZGUgbW9kZSAqLwotICAgICAgICAgICAgUHlPYmplY3QgKnVuaTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKLSAgICAgICAgICAgIHVuaSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGlucHV0X3N0ciwgaW5wdXRfY2hhcnMsICJzdHJpY3QiKTsKLSAgICAgICAgICAgIGlmICh1bmkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcnZhbCA9IGFzY2lpX2VzY2FwZV91bmljb2RlKHVuaSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodW5pKTsKLSAgICAgICAgICAgIHJldHVybiBydmFsOwotICAgICAgICB9Ci0JZWxzZSB7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhcnMgPSBhc2NpaV9lc2NhcGVfY2hhcihjLCBvdXRwdXQsIGNoYXJzKTsKICAgICAgICAgfQogICAgICAgICAvKiBBbiBBU0NJSSBjaGFyIGNhbid0IHBvc3NpYmx5IGV4cGFuZCB0byBhIHN1cnJvZ2F0ZSEgKi8KQEAgLTE2Nyw5ICszMzgsMTEgQEAKICAgICByZXR1cm4gcnZhbDsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJhaXNlX2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCkKIHsKKyAgICAvKiBVc2UgdGhlIFB5dGhvbiBmdW5jdGlvbiBqc29uLmRlY29kZXIuZXJybXNnIHRvIHJhaXNlIGEgbmljZQorICAgIGxvb2tpbmcgVmFsdWVFcnJvciBleGNlcHRpb24gKi8KICAgICBzdGF0aWMgUHlPYmplY3QgKmVycm1zZ19mbiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnB5bXNnOwogICAgIGlmIChlcnJtc2dfZm4gPT0gTlVMTCkgewpAQCAtMTc3LDYxICszNTAsOTYgQEAKICAgICAgICAgaWYgKGRlY29kZXIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZXJybXNnX2ZuID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhkZWNvZGVyLCAiZXJybXNnIik7CisgICAgICAgIFB5X0RFQ1JFRihkZWNvZGVyKTsKICAgICAgICAgaWYgKGVycm1zZ19mbiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBQeV9ERUNSRUYoZGVjb2Rlcik7CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T24pIiwgbXNnLCBzLCBlbmQpOworICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdCwgJmVuZCk7CiAgICAgaWYgKHB5bXNnKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19WYWx1ZUVycm9yLCBweW1zZyk7CiAgICAgICAgIFB5X0RFQ1JFRihweW1zZyk7CiAgICAgfQotLyoKLQotZGVmIGxpbmVjb2woZG9jLCBwb3MpOgotICAgIGxpbmVubyA9IGRvYy5jb3VudCgnXG4nLCAwLCBwb3MpICsgMQotICAgIGlmIGxpbmVubyA9PSAxOgotICAgICAgICBjb2xubyA9IHBvcwotICAgIGVsc2U6Ci0gICAgICAgIGNvbG5vID0gcG9zIC0gZG9jLnJpbmRleCgnXG4nLCAwLCBwb3MpCi0gICAgcmV0dXJuIGxpbmVubywgY29sbm8KLQotZGVmIGVycm1zZyhtc2csIGRvYywgcG9zLCBlbmQ9Tm9uZSk6Ci0gICAgbGluZW5vLCBjb2xubyA9IGxpbmVjb2woZG9jLCBwb3MpCi0gICAgaWYgZW5kIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiAnJXM6IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkKScgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCi0gICAgZW5kbGluZW5vLCBlbmRjb2xubyA9IGxpbmVjb2woZG9jLCBlbmQpCi0gICAgcmV0dXJuICclczogbGluZSAlZCBjb2x1bW4gJWQgLSBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCAtICVkKScgJSAoCi0gICAgICAgIG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCi0KLSovCiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBqb2luX2xpc3RfdW5pY29kZShQeU9iamVjdCAqbHN0KQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqdXN0ciA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpqb2luc3RyID0gTlVMTDsKLSAgICBpZiAodXN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IDA7Ci0gICAgICAgIHVzdHIgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJmMsIDApOworICAgIC8qIHJldHVybiB1Jycuam9pbihsc3QpICovCisgICAgc3RhdGljIFB5T2JqZWN0ICpqb2luZm4gPSBOVUxMOworICAgIGlmIChqb2luZm4gPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqdXN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCAwKTsKKyAgICAgICAgaWYgKHVzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGpvaW5mbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodXN0ciwgImpvaW4iKTsKKyAgICAgICAgUHlfREVDUkVGKHVzdHIpOworICAgICAgICBpZiAoam9pbmZuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGpvaW5zdHIgPT0gTlVMTCkgewotICAgICAgICBqb2luc3RyID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiam9pbiIpOwotICAgIH0KLSAgICBpZiAoam9pbnN0ciA9PSBOVUxMIHx8IHVzdHIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHVzdHIsIGpvaW5zdHIsIGxzdCwgTlVMTCk7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moam9pbmZuLCBsc3QsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotc2NhbnN0cmluZ19zdHIoUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGVuZCwgY2hhciAqZW5jb2RpbmcsIGludCBzdHJpY3QpCitqb2luX2xpc3Rfc3RyaW5nKFB5T2JqZWN0ICpsc3QpCiB7CisgICAgLyogcmV0dXJuICcnLmpvaW4obHN0KSAqLworICAgIHN0YXRpYyBQeU9iamVjdCAqam9pbmZuID0gTlVMTDsKKyAgICBpZiAoam9pbmZuID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnVzdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKKyAgICAgICAgaWYgKHVzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGpvaW5mbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodXN0ciwgImpvaW4iKTsKKyAgICAgICAgUHlfREVDUkVGKHVzdHIpOworICAgICAgICBpZiAoam9pbmZuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moam9pbmZuLCBsc3QsIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUoUHlPYmplY3QgKnJ2YWwsIFB5X3NzaXplX3QgaWR4KSB7CisgICAgLyogcmV0dXJuIChydmFsLCBpZHgpIHR1cGxlLCBzdGVhbGluZyByZWZlcmVuY2UgdG8gcnZhbCAqLworICAgIFB5T2JqZWN0ICp0cGw7CisgICAgUHlPYmplY3QgKnB5aWR4OworICAgIC8qCisgICAgc3RlYWwgYSByZWZlcmVuY2UgdG8gcnZhbCwgcmV0dXJucyAocnZhbCwgaWR4KQorICAgICovCisgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcHlpZHggPSBQeUludF9Gcm9tU3NpemVfdChpZHgpOworICAgIGlmIChweWlkeCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRwbCA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmICh0cGwgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocHlpZHgpOworICAgICAgICBQeV9ERUNSRUYocnZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRwbCwgMCwgcnZhbCk7CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cGwsIDEsIHB5aWR4KTsKKyAgICByZXR1cm4gdHBsOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc2NhbnN0cmluZ19zdHIoUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGVuZCwgY2hhciAqZW5jb2RpbmcsIGludCBzdHJpY3QsIFB5X3NzaXplX3QgKm5leHRfZW5kX3B0cikKK3sKKyAgICAvKiBSZWFkIHRoZSBKU09OIHN0cmluZyBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGVuZCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgcXVvdGUuCisgICAgZW5jb2RpbmcgaXMgdGhlIGVuY29kaW5nIG9mIHB5c3RyIChtdXN0IGJlIGFuIEFTQ0lJIHN1cGVyc2V0KQorICAgIGlmIHN0cmljdCBpcyB6ZXJvIHRoZW4gbGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQKKyAgICAqbmV4dF9lbmRfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyCisgICAgICAgIGFmdGVyIHRoZSBlbmQgcXVvdGUKKworICAgIFJldHVybiB2YWx1ZSBpcyBhIG5ldyBQeVN0cmluZyAoaWYgQVNDSUktb25seSkgb3IgUHlVbmljb2RlCisgICAgKi8KICAgICBQeU9iamVjdCAqcnZhbDsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKTsKICAgICBQeV9zc2l6ZV90IGJlZ2luID0gZW5kIC0gMTsKLSAgICBQeV9zc2l6ZV90IG5leHQgPSBiZWdpbjsKKyAgICBQeV9zc2l6ZV90IG5leHQ7CiAgICAgY2hhciAqYnVmID0gUHlTdHJpbmdfQVNfU1RSSU5HKHB5c3RyKTsKICAgICBQeU9iamVjdCAqY2h1bmtzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsKQEAgLTI0Niw3ICs0NTQsNyBAQAogICAgICAgICBQeV9VTklDT0RFIGMgPSAwOwogICAgICAgICBQeU9iamVjdCAqY2h1bmsgPSBOVUxMOwogICAgICAgICBmb3IgKG5leHQgPSBlbmQ7IG5leHQgPCBsZW47IG5leHQrKykgewotICAgICAgICAgICAgYyA9IGJ1ZltuZXh0XTsKKyAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcilidWZbbmV4dF07CiAgICAgICAgICAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yNjEsNyArNDY5LDcgQEAKICAgICAgICAgfQogICAgICAgICAvKiBQaWNrIHVwIHRoaXMgY2h1bmsgaWYgaXQncyBub3QgemVybyBsZW5ndGggKi8KICAgICAgICAgaWYgKG5leHQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqc3RyY2h1bmsgPSBQeUJ1ZmZlcl9Gcm9tTWVtb3J5KCZidWZbZW5kXSwgbmV4dCAtIGVuZCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RyY2h1bmsgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgmYnVmW2VuZF0sIG5leHQgLSBlbmQpOwogICAgICAgICAgICAgaWYgKHN0cmNodW5rID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC0zMTUsMTggKzUyMywxOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwogICAgICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2hsID0gKGVuZCAtIG5leHQgLSAxKSA8PCAyOwogICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07CisgICAgICAgICAgICAgICAgYyA8PD0gNDsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpZ2l0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnMCcpIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnYScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ2EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgogICAgICAgICAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ0EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICdBJyArIDEwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkludmFsaWQgXFx1WFhYWCBlc2NhcGUiLCBweXN0ciwgZW5kIC0gNSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CkBAIC0zMzQsMzggKzU0Miw0NiBAQAogICAgICAgICAgICAgfQogI2lmZGVmIFB5X1VOSUNPREVfV0lERQogICAgICAgICAgICAgLyogU3Vycm9nYXRlIHBhaXIgKi8KLSAgICAgICAgICAgIGlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZikgeworICAgICAgICAgICAgaWYgKChjICYgMHhmYzAwKSA9PSAweGQ4MDApIHsKICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGMyID0gMDsKICAgICAgICAgICAgICAgICBpZiAoZW5kICsgNiA+PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIiwgcHlzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoYnVmW25leHQrK10gIT0gJ1xcJyB8fCBidWZbbmV4dCsrXSAhPSAndScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFhcXHVYWFhYIHN1cnJvZ2F0ZSBwYWlyIiwgcHlzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbmQgKz0gNjsKICAgICAgICAgICAgICAgICAvKiBEZWNvZGUgNCBoZXggZGlnaXRzICovCiAgICAgICAgICAgICAgICAgZm9yICg7IG5leHQgPCBlbmQ7IG5leHQrKykgewotICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNobCA9IChlbmQgLSBuZXh0IC0gMSkgPDwgMjsKICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBkaWdpdCA9IGJ1ZltuZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgYzIgPDw9IDQ7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGlnaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnMCcpIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJzAnKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnYScgKyAxMCkgPDwgc2hsOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiB8PSAoZGlnaXQgLSAnYScgKyAxMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ0EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ0EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlzdHIsIGVuZCAtIDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGMyICYgMHhmYzAwKSAhPSAweGRjMDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJVbnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjID0gMHgxMDAwMCArICgoKGMgLSAweGQ4MDApIDw8IDEwKSB8IChjMiAtIDB4ZGMwMCkpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKGMgJiAweGZjMDApID09IDB4ZGMwMCkgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgbG93IHN1cnJvZ2F0ZSIsIHB5c3RyLCBlbmQgLSA1KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBjaHVuayA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMSk7CkBAIC0zNzksMjUgKzU5NSwzNSBAQAogICAgICAgICBQeV9ERUNSRUYoY2h1bmspOwogICAgIH0KIAotICAgIHJ2YWwgPSBqb2luX2xpc3RfdW5pY29kZShjaHVua3MpOworICAgIHJ2YWwgPSBqb2luX2xpc3Rfc3RyaW5nKGNodW5rcyk7CiAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgewogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogICAgIFB5X0NMRUFSKGNodW5rcyk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCBydmFsLCBlbmQpOworICAgICpuZXh0X2VuZF9wdHIgPSBlbmQ7CisgICAgcmV0dXJuIHJ2YWw7CiBiYWlsOgorICAgICpuZXh0X2VuZF9wdHIgPSAtMTsKICAgICBQeV9YREVDUkVGKGNodW5rcyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLXNjYW5zdHJpbmdfdW5pY29kZShQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBpbnQgc3RyaWN0KQorc2NhbnN0cmluZ191bmljb2RlKFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBlbmQsIGludCBzdHJpY3QsIFB5X3NzaXplX3QgKm5leHRfZW5kX3B0cikKIHsKKyAgICAvKiBSZWFkIHRoZSBKU09OIHN0cmluZyBmcm9tIFB5VW5pY29kZSBweXN0ci4KKyAgICBlbmQgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIHF1b3RlLgorICAgIGlmIHN0cmljdCBpcyB6ZXJvIHRoZW4gbGl0ZXJhbCBjb250cm9sIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQKKyAgICAqbmV4dF9lbmRfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyCisgICAgICAgIGFmdGVyIHRoZSBlbmQgcXVvdGUKKworICAgIFJldHVybiB2YWx1ZSBpcyBhIG5ldyBQeVVuaWNvZGUKKyAgICAqLwogICAgIFB5T2JqZWN0ICpydmFsOwogICAgIFB5X3NzaXplX3QgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKICAgICBQeV9zc2l6ZV90IGJlZ2luID0gZW5kIC0gMTsKLSAgICBQeV9zc2l6ZV90IG5leHQgPSBiZWdpbjsKKyAgICBQeV9zc2l6ZV90IG5leHQ7CiAgICAgY29uc3QgUHlfVU5JQ09ERSAqYnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUocHlzdHIpOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChjaHVua3MgPT0gTlVMTCkgewpAQCAtNDc2LDE4ICs3MDIsMTggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIERlY29kZSA0IGhleCBkaWdpdHMgKi8KICAgICAgICAgICAgIGZvciAoOyBuZXh0IDwgZW5kOyBuZXh0KyspIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNobCA9IChlbmQgLSBuZXh0IC0gMSkgPDwgMjsKICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGRpZ2l0ID0gYnVmW25leHRdOworICAgICAgICAgICAgICAgIGMgPDw9IDQ7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChkaWdpdCkgewogICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJzAnKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnMCcpOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgfD0gKGRpZ2l0IC0gJ2EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICdhJyArIDEwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjIHw9IChkaWdpdCAtICdBJyArIDEwKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAoZGlnaXQgLSAnQScgKyAxMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIiwgcHlzdHIsIGVuZCAtIDUpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwpAQCAtNDk1LDM4ICs3MjEsNDYgQEAKICAgICAgICAgICAgIH0KICNpZmRlZiBQeV9VTklDT0RFX1dJREUKICAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICBpZiAoYyA+PSAweGQ4MDAgJiYgYyA8PSAweGRiZmYpIHsKKyAgICAgICAgICAgIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSB7CiAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjMiA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKGVuZCArIDYgPj0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYXFx1WFhYWCBzdXJyb2dhdGUgcGFpciIsIHB5c3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGJ1ZltuZXh0KytdICE9ICdcXCcgfHwgYnVmW25leHQrK10gIT0gJ3UnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYXFx1WFhYWCBzdXJyb2dhdGUgcGFpciIsIHB5c3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZW5kICs9IDY7CiAgICAgICAgICAgICAgICAgLyogRGVjb2RlIDQgaGV4IGRpZ2l0cyAqLwogICAgICAgICAgICAgICAgIGZvciAoOyBuZXh0IDwgZW5kOyBuZXh0KyspIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaGwgPSAoZW5kIC0gbmV4dCAtIDEpIDw8IDI7CiAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgZGlnaXQgPSBidWZbbmV4dF07CisgICAgICAgICAgICAgICAgICAgIGMyIDw8PSA0OwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpZ2l0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJzAnKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICcwJyk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzogY2FzZSAnZCc6IGNhc2UgJ2UnOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ2EnICsgMTApIDw8IHNobDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgfD0gKGRpZ2l0IC0gJ2EnICsgMTApOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdBJyArIDEwKSA8PCBzaGw7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyIHw9IChkaWdpdCAtICdBJyArIDEwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHB5c3RyLCBlbmQgLSA1KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChjMiAmIDB4ZmMwMCkgIT0gMHhkYzAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiVW5wYWlyZWQgaGlnaCBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjIC0gMHhkODAwKSA8PCAxMCkgfCAoYzIgLSAweGRjMDApKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChjICYgMHhmYzAwKSA9PSAweGRjMDApIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIlVucGFpcmVkIGxvdyBzdXJyb2dhdGUiLCBweXN0ciwgZW5kIC0gNSk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgY2h1bmsgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJmMsIDEpOwpAQCAtNTQ0LDQ5ICs3NzgsNjggQEAKICAgICBpZiAocnZhbCA9PSBOVUxMKSB7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9Ci0gICAgUHlfQ0xFQVIoY2h1bmtzKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJ2YWwsIGVuZCk7CisgICAgUHlfREVDUkVGKGNodW5rcyk7CisgICAgKm5leHRfZW5kX3B0ciA9IGVuZDsKKyAgICByZXR1cm4gcnZhbDsKIGJhaWw6CisgICAgKm5leHRfZW5kX3B0ciA9IC0xOwogICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKHB5ZG9jX3NjYW5zdHJpbmcsCi0ic2NhbnN0cmluZyhiYXNlc3RyaW5nLCBlbmQsIGVuY29kaW5nKSAtPiAoc3RyLCBlbmQpXG4iKTsKKyAgICAic2NhbnN0cmluZyhiYXNlc3RyaW5nLCBlbmQsIGVuY29kaW5nLCBzdHJpY3Q9VHJ1ZSkgLT4gKHN0ciwgZW5kKVxuIgorICAgICJcbiIKKyAgICAiU2NhbiB0aGUgc3RyaW5nIHMgZm9yIGEgSlNPTiBzdHJpbmcuIEVuZCBpcyB0aGUgaW5kZXggb2YgdGhlXG4iCisgICAgImNoYXJhY3RlciBpbiBzIGFmdGVyIHRoZSBxdW90ZSB0aGF0IHN0YXJ0ZWQgdGhlIEpTT04gc3RyaW5nLlxuIgorICAgICJVbmVzY2FwZXMgYWxsIHZhbGlkIEpTT04gc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZXMgYW5kIHJhaXNlcyBWYWx1ZUVycm9yXG4iCisgICAgIm9uIGF0dGVtcHQgdG8gZGVjb2RlIGFuIGludmFsaWQgc3RyaW5nLiBJZiBzdHJpY3QgaXMgRmFsc2UgdGhlbiBsaXRlcmFsXG4iCisgICAgImNvbnRyb2wgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgc3RyaW5nLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJucyBhIHR1cGxlIG9mIHRoZSBkZWNvZGVkIHN0cmluZyBhbmQgdGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gc1xuIgorICAgICJhZnRlciB0aGUgZW5kIHF1b3RlLiIKKyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1weV9zY2Fuc3RyaW5nKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncykKK3B5X3NjYW5zdHJpbmcoUHlPYmplY3QqIHNlbGYgVU5VU0VELCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcHlzdHI7CisgICAgUHlPYmplY3QgKnJ2YWw7CiAgICAgUHlfc3NpemVfdCBlbmQ7CisgICAgUHlfc3NpemVfdCBuZXh0X2VuZCA9IC0xOwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBpbnQgc3RyaWN0ID0gMDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9ufHppOnNjYW5zdHJpbmciLCAmcHlzdHIsICZlbmQsICZlbmNvZGluZywgJnN0cmljdCkpIHsKKyAgICBpbnQgc3RyaWN0ID0gMTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnx6aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmVuZCwgJmVuY29kaW5nLCAmc3RyaWN0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HOwogICAgIH0KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2socHlzdHIpKSB7Ci0gICAgICAgIHJldHVybiBzY2Fuc3RyaW5nX3N0cihweXN0ciwgZW5kLCBlbmNvZGluZywgc3RyaWN0KTsKKyAgICAgICAgcnZhbCA9IHNjYW5zdHJpbmdfc3RyKHB5c3RyLCBlbmQsIGVuY29kaW5nLCBzdHJpY3QsICZuZXh0X2VuZCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKLSAgICAgICAgcmV0dXJuIHNjYW5zdHJpbmdfdW5pY29kZShweXN0ciwgZW5kLCBzdHJpY3QpOworICAgICAgICBydmFsID0gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBlbmQsIHN0cmljdCwgJm5leHRfZW5kKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsIAotICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgdW5pY29kZSwgbm90ICUuODBzIiwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShweXN0ciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgcmV0dXJuIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKHJ2YWwsIG5leHRfZW5kKTsKIH0KIAogUHlEb2NfU1RSVkFSKHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAotImVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKGJhc2VzdHJpbmcpIC0+IHN0clxuIik7CisgICAgImVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKGJhc2VzdHJpbmcpIC0+IHN0clxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIGFuIEFTQ0lJLW9ubHkgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmciCispOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpweXN0cikKK3B5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKFB5T2JqZWN0KiBzZWxmIFVOVVNFRCwgUHlPYmplY3QgKnB5c3RyKQogeworICAgIC8qIFJldHVybiBhbiBBU0NJSS1vbmx5IEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nICovCiAgICAgLyogTUVUSF9PICovCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHB5c3RyKSkgewogICAgICAgICByZXR1cm4gYXNjaWlfZXNjYXBlX3N0cihweXN0cik7CkBAIC01OTUsMTggKzg0OCwxNTM4IEBACiAgICAgICAgIHJldHVybiBhc2NpaV9lc2NhcGVfdW5pY29kZShweXN0cik7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAKLSAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuaWNvZGUsIG5vdCAlLjgwcyIsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90ICUuODBzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQogCi1zdGF0aWMgUHlNZXRob2REZWYganNvbl9tZXRob2RzW10gPSB7Ci0gICAgeyJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSIsIChQeUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwKLSAgICAgTUVUSF9PLCBweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaX0sCi0gICAgeyJzY2Fuc3RyaW5nIiwgKFB5Q0Z1bmN0aW9uKXB5X3NjYW5zdHJpbmcsIE1FVEhfVkFSQVJHUywKLSAgICAgcHlkb2Nfc2NhbnN0cmluZ30sCitzdGF0aWMgdm9pZAorc2Nhbm5lcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQoreworICAgIC8qIERlYWxsb2NhdGUgc2Nhbm5lciBvYmplY3QgKi8KKyAgICBzY2FubmVyX2NsZWFyKHNlbGYpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK3NjYW5uZXJfdHJhdmVyc2UoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5U2Nhbm5lck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisgICAgUHlfVklTSVQocy0+ZW5jb2RpbmcpOworICAgIFB5X1ZJU0lUKHMtPnN0cmljdCk7CisgICAgUHlfVklTSVQocy0+b2JqZWN0X2hvb2spOworICAgIFB5X1ZJU0lUKHMtPnBhaXJzX2hvb2spOworICAgIFB5X1ZJU0lUKHMtPnBhcnNlX2Zsb2F0KTsKKyAgICBQeV9WSVNJVChzLT5wYXJzZV9pbnQpOworICAgIFB5X1ZJU0lUKHMtPnBhcnNlX2NvbnN0YW50KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2Nhbm5lcl9jbGVhcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVNjYW5uZXJPYmplY3QgKnM7CisgICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7CisgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOworICAgIFB5X0NMRUFSKHMtPmVuY29kaW5nKTsKKyAgICBQeV9DTEVBUihzLT5zdHJpY3QpOworICAgIFB5X0NMRUFSKHMtPm9iamVjdF9ob29rKTsKKyAgICBQeV9DTEVBUihzLT5wYWlyc19ob29rKTsKKyAgICBQeV9DTEVBUihzLT5wYXJzZV9mbG9hdCk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfaW50KTsKKyAgICBQeV9DTEVBUihzLT5wYXJzZV9jb25zdGFudCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGFyc2Vfb2JqZWN0X3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIG9iamVjdCBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyBjdXJseSBicmFjZS4KKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjbG9zaW5nIGN1cmx5IGJyYWNlLgorCisgICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCAodXN1YWxseSBhIGRpY3QsIGJ1dCBvYmplY3RfaG9vayBjYW4gY2hhbmdlIHRoYXQpCisgICAgKi8KKyAgICBjaGFyICpzdHIgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKSAtIDE7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlPYmplY3QgKnBhaXJzOworICAgIFB5T2JqZWN0ICppdGVtOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOworICAgIGNoYXIgKmVuY29kaW5nID0gUHlTdHJpbmdfQVNfU1RSSU5HKHMtPmVuY29kaW5nKTsKKyAgICBpbnQgc3RyaWN0ID0gUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKworICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocGFpcnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgeyAqLworICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KKyAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KKyAgICAgICAgICAgIGlmIChzdHJbaWR4XSAhPSAnIicpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ19zdHIocHlzdHIsIGlkeCArIDEsIGVuY29kaW5nLCBzdHJpY3QsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBkZWxpbWl0ZXIsIHJlYWQgOiwgc2tpcCB3aGl0ZXNwYWNlICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJzonKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgOiBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gZGF0YSB0eXBlICovCisgICAgICAgICAgICB2YWwgPSBzY2FuX29uY2Vfc3RyKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBpdGVtID0gUHlUdXBsZV9QYWNrKDIsIGtleSwgdmFsKTsKKyAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgUHlfQ0xFQVIoa2V5KTsKKyAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwYWlycywgaXRlbSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZWZvcmUgfSBvciAsICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBvYmplY3QgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICd9JyAqLworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhdICE9ICd9JykgeworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvKiBpZiBwYWlyc19ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0X3BhaXJzX2hvb2socGFpcnMpICovCisgICAgaWYgKHMtPnBhaXJzX2hvb2sgIT0gUHlfTm9uZSkgeworICAgICAgICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhaXJzX2hvb2ssIHBhaXJzLCBOVUxMKTsKKyAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBQeV9ERUNSRUYocGFpcnMpOworICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKKyAgICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisKKyAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygoUHlPYmplY3QgKikoJlB5RGljdF9UeXBlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLCBOVUxMKTsKKyAgICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgUHlfQ0xFQVIocGFpcnMpOworCisgICAgLyogaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBvYmplY3RfaG9vayhydmFsKSAqLworICAgIGlmIChzLT5vYmplY3RfaG9vayAhPSBQeV9Ob25lKSB7CisgICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+b2JqZWN0X2hvb2ssIHJ2YWwsIE5VTEwpOworICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICAgICAgcnZhbCA9IHZhbDsKKyAgICAgICAgdmFsID0gTlVMTDsKKyAgICB9CisgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CisgICAgcmV0dXJuIHJ2YWw7CitiYWlsOgorICAgIFB5X1hERUNSRUYoa2V5KTsKKyAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgUHlfWERFQ1JFRihwYWlycyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGFyc2Vfb2JqZWN0X3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBvYmplY3QgZnJvbSBQeVVuaWNvZGUgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGN1cmx5IGJyYWNlLgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIGNsb3NpbmcgY3VybHkgYnJhY2UuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0ICh1c3VhbGx5IGEgZGljdCwgYnV0IG9iamVjdF9ob29rIGNhbiBjaGFuZ2UgdGhhdCkKKyAgICAqLworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBQeU9iamVjdCAqcGFpcnM7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnZhbCA9IE5VTEw7CisgICAgaW50IHN0cmljdCA9IFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpOworICAgIFB5X3NzaXplX3QgbmV4dF9pZHg7CisKKyAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHBhaXJzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyIHsgKi8KKyAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgLyogb25seSBsb29wIGlmIHRoZSBvYmplY3QgaXMgbm9uLWVtcHR5ICovCisgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9ICd9JykgeworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICAgICAgICAgIC8qIHJlYWQga2V5ICovCisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gIT0gJyInKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtleSA9IHNjYW5zdHJpbmdfdW5pY29kZShweXN0ciwgaWR4ICsgMSwgc3RyaWN0LCAmbmV4dF9pZHgpOworICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIGlkeCA9IG5leHRfaWR4OworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYmV0d2VlbiBrZXkgYW5kIDogZGVsaW1pdGVyLCByZWFkIDosIHNraXAgd2hpdGVzcGFjZSAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IHN0cltpZHhdICE9ICc6JykgeworICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIDogZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgICAgICAgICAvKiByZWFkIGFueSBKU09OIHRlcm0gKi8KKyAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBpdGVtID0gUHlUdXBsZV9QYWNrKDIsIGtleSwgdmFsKTsKKyAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgUHlfQ0xFQVIoa2V5KTsKKyAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwYWlycywgaXRlbSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZWZvcmUgfSBvciAsICovCisgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShzdHJbaWR4XSkpIGlkeCsrOworCisgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBvYmplY3QgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gPT0gJ30nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCBkZWxpbWl0ZXIgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ30nKSB7CisgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIC8qIGlmIHBhaXJzX2hvb2sgaXMgbm90IE5vbmU6IHJ2YWwgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykgKi8KKyAgICBpZiAocy0+cGFpcnNfaG9vayAhPSBQeV9Ob25lKSB7CisgICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFpcnNfaG9vaywgcGFpcnMsIE5VTEwpOworICAgICAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0RFQ1JFRihwYWlycyk7CisgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgICAgICByZXR1cm4gdmFsOworICAgIH0KKworICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKChQeU9iamVjdCAqKSgmUHlEaWN0X1R5cGUpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcnMsIE5VTEwpOworICAgIGlmIChydmFsID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBQeV9DTEVBUihwYWlycyk7CisKKyAgICAvKiBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZTogcnZhbCA9IG9iamVjdF9ob29rKHJ2YWwpICovCisgICAgaWYgKHMtPm9iamVjdF9ob29rICE9IFB5X05vbmUpIHsKKyAgICAgICAgdmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5vYmplY3RfaG9vaywgcnZhbCwgTlVMTCk7CisgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgUHlfREVDUkVGKHJ2YWwpOworICAgICAgICBydmFsID0gdmFsOworICAgICAgICB2YWwgPSBOVUxMOworICAgIH0KKyAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKKyAgICByZXR1cm4gcnZhbDsKK2JhaWw6CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICBQeV9YREVDUkVGKHBhaXJzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9hcnJheV9zdHIoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBhcnJheSBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyBicmFjZS4KKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjbG9zaW5nIGJyYWNlLgorCisgICAgUmV0dXJucyBhIG5ldyBQeUxpc3QKKyAgICAqLworICAgIGNoYXIgKnN0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7CisgICAgUHlfc3NpemVfdCBlbmRfaWR4ID0gUHlTdHJpbmdfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKyAgICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciBbICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgYXJyYXkgaXMgbm9uLWVtcHR5ICovCisgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9ICddJykgeworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKworICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtIGFuZCBkZS10dXBsZWZ5IHRoZSAocnZhbCwgaWR4KSAqLworICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3N0cihzLCBweXN0ciwgaWR4LCAmbmV4dF9pZHgpOworICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgdmFsKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJldHdlZW4gdGVybSBhbmQgLCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RyW2lkeF0gPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzdHJbaWR4XSAhPSAnLCcpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAsIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOworICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkeCsrOworCisgICAgICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgYWZ0ZXIgLCAqLworICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHZlcmlmeSB0aGF0IGlkeCA8IGVuZF9pZHgsIHN0cltpZHhdIHNob3VsZCBiZSAnXScgKi8KKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBzdHJbaWR4XSAhPSAnXScpIHsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyAxOworICAgIHJldHVybiBydmFsOworYmFpbDoKKyAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgUHlfREVDUkVGKHJ2YWwpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BhcnNlX2FycmF5X3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgaWR4LCBQeV9zc2l6ZV90ICpuZXh0X2lkeF9wdHIpIHsKKyAgICAvKiBSZWFkIGEgSlNPTiBhcnJheSBmcm9tIFB5U3RyaW5nIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgb3BlbmluZyBicmFjZS4KKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjbG9zaW5nIGJyYWNlLgorCisgICAgUmV0dXJucyBhIG5ldyBQeUxpc3QKKyAgICAqLworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKyAgICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHNraXAgd2hpdGVzcGFjZSBhZnRlciBbICovCisgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0Uoc3RyW2lkeF0pKSBpZHgrKzsKKworICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgYXJyYXkgaXMgbm9uLWVtcHR5ICovCisgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdICE9ICddJykgeworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKworICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtICAqLworICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICAgICAgICAgIGlmICh2YWwgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHZhbCkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworCisgICAgICAgICAgICBQeV9DTEVBUih2YWwpOworICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CisKKyAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIHRlcm0gYW5kICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisKKyAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIGFycmF5IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOworICAgICAgICAgICAgaWYgKHN0cltpZHhdID09ICddJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoc3RyW2lkeF0gIT0gJywnKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHgrKzsKKworICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGFmdGVyICwgKi8KKyAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKHN0cltpZHhdKSkgaWR4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ10nICovCisgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgc3RyW2lkeF0gIT0gJ10nKSB7CisgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKKyAgICByZXR1cm4gcnZhbDsKK2JhaWw6CisgICAgUHlfWERFQ1JFRih2YWwpOworICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19wYXJzZV9jb25zdGFudChQeVNjYW5uZXJPYmplY3QgKnMsIGNoYXIgKmNvbnN0YW50LCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gY29uc3RhbnQgZnJvbSBQeVN0cmluZyBweXN0ci4KKyAgICBjb25zdGFudCBpcyB0aGUgY29uc3RhbnQgc3RyaW5nIHRoYXQgd2FzIGZvdW5kCisgICAgICAgICgiTmFOIiwgIkluZmluaXR5IiwgIi1JbmZpbml0eSIpLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgY29uc3RhbnQKKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBjb25zdGFudC4KKworICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBwYXJzZV9jb25zdGFudAorICAgICovCisgICAgUHlPYmplY3QgKmNzdHI7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgLyogY29uc3RhbnQgaXMgIk5hTiIsICJJbmZpbml0eSIsIG9yICItSW5maW5pdHkiICovCisgICAgY3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoY29uc3RhbnQpOworICAgIGlmIChjc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcnZhbCA9IHBhcnNlX2NvbnN0YW50KGNvbnN0YW50KSAqLworICAgIHJ2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPnBhcnNlX2NvbnN0YW50LCBjc3RyLCBOVUxMKTsKKyAgICBpZHggKz0gUHlTdHJpbmdfR0VUX1NJWkUoY3N0cik7CisgICAgUHlfREVDUkVGKGNzdHIpOworICAgICpuZXh0X2lkeF9wdHIgPSBpZHg7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbWF0Y2hfbnVtYmVyX3N0cihQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gbnVtYmVyIGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBudW1iZXIKKyAgICAqbmV4dF9pZHhfcHRyIGlzIGEgcmV0dXJuLWJ5LXJlZmVyZW5jZSBpbmRleCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIuCisKKyAgICBSZXR1cm5zIGEgbmV3IFB5T2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoYXQgbnVtYmVyOgorICAgICAgICBQeUludCwgUHlMb25nLCBvciBQeUZsb2F0LgorICAgICAgICBNYXkgcmV0dXJuIG90aGVyIHR5cGVzIGlmIHBhcnNlX2ludCBvciBwYXJzZV9mbG9hdCBhcmUgc2V0CisgICAgKi8KKyAgICBjaGFyICpzdHIgPSBQeVN0cmluZ19BU19TVFJJTkcocHlzdHIpOworICAgIFB5X3NzaXplX3QgZW5kX2lkeCA9IFB5U3RyaW5nX0dFVF9TSVpFKHB5c3RyKSAtIDE7CisgICAgUHlfc3NpemVfdCBpZHggPSBzdGFydDsKKyAgICBpbnQgaXNfZmxvYXQgPSAwOworICAgIFB5T2JqZWN0ICpydmFsOworICAgIFB5T2JqZWN0ICpudW1zdHI7CisKKyAgICAvKiByZWFkIGEgc2lnbiBpZiBpdCdzIHRoZXJlLCBtYWtlIHN1cmUgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCisgICAgaWYgKHN0cltpZHhdID09ICctJykgeworICAgICAgICBpZHgrKzsKKyAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgYXMgbWFueSBpbnRlZ2VyIGRpZ2l0cyBhcyB3ZSBmaW5kIGFzIGxvbmcgYXMgaXQgZG9lc24ndCBzdGFydCB3aXRoIDAgKi8KKyAgICBpZiAoc3RyW2lkeF0gPj0gJzEnICYmIHN0cltpZHhdIDw9ICc5JykgeworICAgICAgICBpZHgrKzsKKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworICAgIH0KKyAgICAvKiBpZiBpdCBzdGFydHMgd2l0aCAwIHdlIG9ubHkgZXhwZWN0IG9uZSBpbnRlZ2VyIGRpZ2l0ICovCisgICAgZWxzZSBpZiAoc3RyW2lkeF0gPT0gJzAnKSB7CisgICAgICAgIGlkeCsrOworICAgIH0KKyAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0cywgZXJyb3IgKi8KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogaWYgdGhlIG5leHQgY2hhciBpcyAnLicgZm9sbG93ZWQgYnkgYSBkaWdpdCB0aGVuIHJlYWQgYWxsIGZsb2F0IGRpZ2l0cyAqLworICAgIGlmIChpZHggPCBlbmRfaWR4ICYmIHN0cltpZHhdID09ICcuJyAmJiBzdHJbaWR4ICsgMV0gPj0gJzAnICYmIHN0cltpZHggKyAxXSA8PSAnOScpIHsKKyAgICAgICAgaXNfZmxvYXQgPSAxOworICAgICAgICBpZHggKz0gMjsKKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworICAgIH0KKworICAgIC8qIGlmIHRoZSBuZXh0IGNoYXIgaXMgJ2UnIG9yICdFJyB0aGVuIG1heWJlIHJlYWQgdGhlIGV4cG9uZW50IChvciBiYWNrdHJhY2spICovCisgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgKHN0cltpZHhdID09ICdlJyB8fCBzdHJbaWR4XSA9PSAnRScpKSB7CisKKyAgICAgICAgLyogc2F2ZSB0aGUgaW5kZXggb2YgdGhlICdlJyBvciAnRScganVzdCBpbiBjYXNlIHdlIG5lZWQgdG8gYmFja3RyYWNrICovCisgICAgICAgIFB5X3NzaXplX3QgZV9zdGFydCA9IGlkeDsKKyAgICAgICAgaWR4Kys7CisKKyAgICAgICAgLyogcmVhZCBhbiBleHBvbmVudCBzaWduIGlmIHByZXNlbnQgKi8KKyAgICAgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgKHN0cltpZHhdID09ICctJyB8fCBzdHJbaWR4XSA9PSAnKycpKSBpZHgrKzsKKworICAgICAgICAvKiByZWFkIGFsbCBkaWdpdHMgKi8KKyAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIHN0cltpZHhdID49ICcwJyAmJiBzdHJbaWR4XSA8PSAnOScpIGlkeCsrOworCisgICAgICAgIC8qIGlmIHdlIGdvdCBhIGRpZ2l0LCB0aGVuIHBhcnNlIGFzIGZsb2F0LiBpZiBub3QsIGJhY2t0cmFjayAqLworICAgICAgICBpZiAoc3RyW2lkeCAtIDFdID49ICcwJyAmJiBzdHJbaWR4IC0gMV0gPD0gJzknKSB7CisgICAgICAgICAgICBpc19mbG9hdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZHggPSBlX3N0YXJ0OworICAgICAgICB9CisgICAgfQorCisgICAgLyogY29weSB0aGUgc2VjdGlvbiB3ZSBkZXRlcm1pbmVkIHRvIGJlIGEgbnVtYmVyICovCisgICAgbnVtc3RyID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoJnN0cltzdGFydF0sIGlkeCAtIHN0YXJ0KTsKKyAgICBpZiAobnVtc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChpc19mbG9hdCkgeworICAgICAgICAvKiBwYXJzZSBhcyBhIGZsb2F0IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNhbGwgdXNlciBkZWZpbmVkIG1ldGhvZCAqLworICAgICAgICBpZiAocy0+cGFyc2VfZmxvYXQgIT0gKFB5T2JqZWN0ICopJlB5RmxvYXRfVHlwZSkgeworICAgICAgICAgICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfZmxvYXQsIG51bXN0ciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBkb3VibGUgZCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShQeVN0cmluZ19BU19TVFJJTkcobnVtc3RyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKGQgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcnZhbCA9IFB5RmxvYXRfRnJvbURvdWJsZShkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogcGFyc2UgYXMgYW4gaW50IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNhbGwgdXNlciBkZWZpbmVkIG1ldGhvZCAqLworICAgICAgICBpZiAocy0+cGFyc2VfaW50ICE9IChQeU9iamVjdCAqKSZQeUludF9UeXBlKSB7CisgICAgICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9pbnQsIG51bXN0ciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydmFsID0gUHlJbnRfRnJvbVN0cmluZyhQeVN0cmluZ19BU19TVFJJTkcobnVtc3RyKSwgTlVMTCwgMTApOworICAgICAgICB9CisgICAgfQorICAgIFB5X0RFQ1JFRihudW1zdHIpOworICAgICpuZXh0X2lkeF9wdHIgPSBpZHg7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbWF0Y2hfbnVtYmVyX3VuaWNvZGUoUHlTY2FubmVyT2JqZWN0ICpzLCBQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgeworICAgIC8qIFJlYWQgYSBKU09OIG51bWJlciBmcm9tIFB5VW5pY29kZSBweXN0ci4KKyAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIG51bWJlcgorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIG51bWJlci4KKworICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhhdCBudW1iZXI6CisgICAgICAgIFB5SW50LCBQeUxvbmcsIG9yIFB5RmxvYXQuCisgICAgICAgIE1heSByZXR1cm4gb3RoZXIgdHlwZXMgaWYgcGFyc2VfaW50IG9yIHBhcnNlX2Zsb2F0IGFyZSBzZXQKKyAgICAqLworICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKKyAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpIC0gMTsKKyAgICBQeV9zc2l6ZV90IGlkeCA9IHN0YXJ0OworICAgIGludCBpc19mbG9hdCA9IDA7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlPYmplY3QgKm51bXN0cjsKKworICAgIC8qIHJlYWQgYSBzaWduIGlmIGl0J3MgdGhlcmUsIG1ha2Ugc3VyZSBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKi8KKyAgICBpZiAoc3RyW2lkeF0gPT0gJy0nKSB7CisgICAgICAgIGlkeCsrOworICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgeworICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyogcmVhZCBhcyBtYW55IGludGVnZXIgZGlnaXRzIGFzIHdlIGZpbmQgYXMgbG9uZyBhcyBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggMCAqLworICAgIGlmIChzdHJbaWR4XSA+PSAnMScgJiYgc3RyW2lkeF0gPD0gJzknKSB7CisgICAgICAgIGlkeCsrOworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisgICAgfQorICAgIC8qIGlmIGl0IHN0YXJ0cyB3aXRoIDAgd2Ugb25seSBleHBlY3Qgb25lIGludGVnZXIgZGlnaXQgKi8KKyAgICBlbHNlIGlmIChzdHJbaWR4XSA9PSAnMCcpIHsKKyAgICAgICAgaWR4Kys7CisgICAgfQorICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLworICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgbmV4dCBjaGFyIGlzICcuJyBmb2xsb3dlZCBieSBhIGRpZ2l0IHRoZW4gcmVhZCBhbGwgZmxvYXQgZGlnaXRzICovCisgICAgaWYgKGlkeCA8IGVuZF9pZHggJiYgc3RyW2lkeF0gPT0gJy4nICYmIHN0cltpZHggKyAxXSA+PSAnMCcgJiYgc3RyW2lkeCArIDFdIDw9ICc5JykgeworICAgICAgICBpc19mbG9hdCA9IDE7CisgICAgICAgIGlkeCArPSAyOworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisgICAgfQorCisgICAgLyogaWYgdGhlIG5leHQgY2hhciBpcyAnZScgb3IgJ0UnIHRoZW4gbWF5YmUgcmVhZCB0aGUgZXhwb25lbnQgKG9yIGJhY2t0cmFjaykgKi8KKyAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJ2UnIHx8IHN0cltpZHhdID09ICdFJykpIHsKKyAgICAgICAgUHlfc3NpemVfdCBlX3N0YXJ0ID0gaWR4OworICAgICAgICBpZHgrKzsKKworICAgICAgICAvKiByZWFkIGFuIGV4cG9uZW50IHNpZ24gaWYgcHJlc2VudCAqLworICAgICAgICBpZiAoaWR4IDwgZW5kX2lkeCAmJiAoc3RyW2lkeF0gPT0gJy0nIHx8IHN0cltpZHhdID09ICcrJykpIGlkeCsrOworCisgICAgICAgIC8qIHJlYWQgYWxsIGRpZ2l0cyAqLworICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gPj0gJzAnICYmIHN0cltpZHhdIDw9ICc5JykgaWR4Kys7CisKKyAgICAgICAgLyogaWYgd2UgZ290IGEgZGlnaXQsIHRoZW4gcGFyc2UgYXMgZmxvYXQuIGlmIG5vdCwgYmFja3RyYWNrICovCisgICAgICAgIGlmIChzdHJbaWR4IC0gMV0gPj0gJzAnICYmIHN0cltpZHggLSAxXSA8PSAnOScpIHsKKyAgICAgICAgICAgIGlzX2Zsb2F0ID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlkeCA9IGVfc3RhcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBjb3B5IHRoZSBzZWN0aW9uIHdlIGRldGVybWluZWQgdG8gYmUgYSBudW1iZXIgKi8KKyAgICBudW1zdHIgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJnN0cltzdGFydF0sIGlkeCAtIHN0YXJ0KTsKKyAgICBpZiAobnVtc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChpc19mbG9hdCkgeworICAgICAgICAvKiBwYXJzZSBhcyBhIGZsb2F0IHVzaW5nIGEgZmFzdCBwYXRoIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNhbGwgdXNlciBkZWZpbmVkIG1ldGhvZCAqLworICAgICAgICBpZiAocy0+cGFyc2VfZmxvYXQgIT0gKFB5T2JqZWN0ICopJlB5RmxvYXRfVHlwZSkgeworICAgICAgICAgICAgcnZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+cGFyc2VfZmxvYXQsIG51bXN0ciwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydmFsID0gUHlGbG9hdF9Gcm9tU3RyaW5nKG51bXN0ciwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5vIGZhc3QgcGF0aCBmb3IgdW5pY29kZSAtPiBpbnQsIGp1c3QgY2FsbCAqLworICAgICAgICBydmFsID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5wYXJzZV9pbnQsIG51bXN0ciwgTlVMTCk7CisgICAgfQorICAgIFB5X0RFQ1JFRihudW1zdHIpOworICAgICpuZXh0X2lkeF9wdHIgPSBpZHg7CisgICAgcmV0dXJuIHJ2YWw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzY2FuX29uY2Vfc3RyKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKQoreworICAgIC8qIFJlYWQgb25lIEpTT04gdGVybSAob2YgYW55IGtpbmQpIGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB0ZXJtCisgICAgKm5leHRfaWR4X3B0ciBpcyBhIHJldHVybi1ieS1yZWZlcmVuY2UgaW5kZXggdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyLgorCisgICAgUmV0dXJucyBhIG5ldyBQeU9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVybS4KKyAgICAqLworICAgIGNoYXIgKnN0ciA9IFB5U3RyaW5nX0FTX1NUUklORyhweXN0cik7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBQeVN0cmluZ19HRVRfU0laRShweXN0cik7CisgICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKKyAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaCAoc3RyW2lkeF0pIHsKKyAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAvKiBzdHJpbmcgKi8KKyAgICAgICAgICAgIHJldHVybiBzY2Fuc3RyaW5nX3N0cihweXN0ciwgaWR4ICsgMSwKKyAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcocy0+ZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpLAorICAgICAgICAgICAgICAgIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgLyogb2JqZWN0ICovCisgICAgICAgICAgICByZXR1cm4gX3BhcnNlX29iamVjdF9zdHIocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgLyogYXJyYXkgKi8KKyAgICAgICAgICAgIHJldHVybiBfcGFyc2VfYXJyYXlfc3RyKHMsIHB5c3RyLCBpZHggKyAxLCBuZXh0X2lkeF9wdHIpOworICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgIC8qIG51bGwgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICd1JyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAnbCcpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAvKiB0cnVlICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDMgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAncicgJiYgc3RyW2lkeCArIDJdID09ICd1JyAmJiBzdHJbaWR4ICsgM10gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgICAgICAgICAgICAgICpuZXh0X2lkeF9wdHIgPSBpZHggKyA0OworICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgLyogZmFsc2UgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgNCA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2wnICYmIHN0cltpZHggKyAzXSA9PSAncycgJiYgc3RyW2lkeCArIDRdID09ICdlJykgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7CisgICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDU7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ04nOgorICAgICAgICAgICAgLyogTmFOICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDIgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnYScgJiYgc3RyW2lkeCArIDJdID09ICdOJykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcGFyc2VfY29uc3RhbnQocywgIk5hTiIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIC8qIEluZmluaXR5ICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDcgPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnbicgJiYgc3RyW2lkeCArIDJdID09ICdmJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2knICYmIHN0cltpZHggKyA0XSA9PSAnbicgJiYgc3RyW2lkeCArIDVdID09ICdpJyAmJiBzdHJbaWR4ICsgNl0gPT0gJ3QnICYmIHN0cltpZHggKyA3XSA9PSAneScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3BhcnNlX2NvbnN0YW50KHMsICJJbmZpbml0eSIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIC8qIC1JbmZpbml0eSAqLworICAgICAgICAgICAgaWYgKChpZHggKyA4IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ0knICYmIHN0cltpZHggKyAyXSA9PSAnbicgJiYgc3RyW2lkeCArIDNdID09ICdmJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ2knICYmIHN0cltpZHggKyA1XSA9PSAnbicgJiYgc3RyW2lkeCArIDZdID09ICdpJyAmJiBzdHJbaWR4ICsgN10gPT0gJ3QnICYmIHN0cltpZHggKyA4XSA9PSAneScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX3BhcnNlX2NvbnN0YW50KHMsICItSW5maW5pdHkiLCBpZHgsIG5leHRfaWR4X3B0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgLyogRGlkbid0IGZpbmQgYSBzdHJpbmcsIG9iamVjdCwgYXJyYXksIG9yIG5hbWVkIGNvbnN0YW50LiBMb29rIGZvciBhIG51bWJlci4gKi8KKyAgICByZXR1cm4gX21hdGNoX251bWJlcl9zdHIocywgcHlzdHIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5fb25jZV91bmljb2RlKFB5U2Nhbm5lck9iamVjdCAqcywgUHlPYmplY3QgKnB5c3RyLCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKQoreworICAgIC8qIFJlYWQgb25lIEpTT04gdGVybSAob2YgYW55IGtpbmQpIGZyb20gUHlVbmljb2RlIHB5c3RyLgorICAgIGlkeCBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdGVybQorICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIG51bWJlci4KKworICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRlcm0uCisgICAgKi8KKyAgICBQeV9VTklDT0RFICpzdHIgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpOworICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7CisgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzd2l0Y2ggKHN0cltpZHhdKSB7CisgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgLyogc3RyaW5nICovCisgICAgICAgICAgICByZXR1cm4gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLAorICAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpLAorICAgICAgICAgICAgICAgIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgLyogb2JqZWN0ICovCisgICAgICAgICAgICByZXR1cm4gX3BhcnNlX29iamVjdF91bmljb2RlKHMsIHB5c3RyLCBpZHggKyAxLCBuZXh0X2lkeF9wdHIpOworICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIC8qIGFycmF5ICovCisgICAgICAgICAgICByZXR1cm4gX3BhcnNlX2FycmF5X3VuaWNvZGUocywgcHlzdHIsIGlkeCArIDEsIG5leHRfaWR4X3B0cik7CisgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgLyogbnVsbCAqLworICAgICAgICAgICAgaWYgKChpZHggKyAzIDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ3UnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdsJykgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIC8qIHRydWUgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdyJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ3UnICYmIHN0cltpZHggKyAzXSA9PSAnZScpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7CisgICAgICAgICAgICAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5X1RydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAvKiBmYWxzZSAqLworICAgICAgICAgICAgaWYgKChpZHggKyA0IDwgbGVuZ3RoKSAmJiBzdHJbaWR4ICsgMV0gPT0gJ2EnICYmIHN0cltpZHggKyAyXSA9PSAnbCcgJiYgc3RyW2lkeCArIDNdID09ICdzJyAmJiBzdHJbaWR4ICsgNF0gPT0gJ2UnKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X0ZhbHNlKTsKKyAgICAgICAgICAgICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgNTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAgICAvKiBOYU4gKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgMiA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICdhJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ04nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9wYXJzZV9jb25zdGFudChzLCAiTmFOIiwgaWR4LCBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgLyogSW5maW5pdHkgKi8KKyAgICAgICAgICAgIGlmICgoaWR4ICsgNyA8IGxlbmd0aCkgJiYgc3RyW2lkeCArIDFdID09ICduJyAmJiBzdHJbaWR4ICsgMl0gPT0gJ2YnICYmIHN0cltpZHggKyAzXSA9PSAnaScgJiYgc3RyW2lkeCArIDRdID09ICduJyAmJiBzdHJbaWR4ICsgNV0gPT0gJ2knICYmIHN0cltpZHggKyA2XSA9PSAndCcgJiYgc3RyW2lkeCArIDddID09ICd5JykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcGFyc2VfY29uc3RhbnQocywgIkluZmluaXR5IiwgaWR4LCBuZXh0X2lkeF9wdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgLyogLUluZmluaXR5ICovCisgICAgICAgICAgICBpZiAoKGlkeCArIDggPCBsZW5ndGgpICYmIHN0cltpZHggKyAxXSA9PSAnSScgJiYgc3RyW2lkeCArIDJdID09ICduJyAmJiBzdHJbaWR4ICsgM10gPT0gJ2YnICYmIHN0cltpZHggKyA0XSA9PSAnaScgJiYgc3RyW2lkeCArIDVdID09ICduJyAmJiBzdHJbaWR4ICsgNl0gPT0gJ2knICYmIHN0cltpZHggKyA3XSA9PSAndCcgJiYgc3RyW2lkeCArIDhdID09ICd5JykgeworICAgICAgICAgICAgICAgIHJldHVybiBfcGFyc2VfY29uc3RhbnQocywgIi1JbmZpbml0eSIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBEaWRuJ3QgZmluZCBhIHN0cmluZywgb2JqZWN0LCBhcnJheSwgb3IgbmFtZWQgY29uc3RhbnQuIExvb2sgZm9yIGEgbnVtYmVyLiAqLworICAgIHJldHVybiBfbWF0Y2hfbnVtYmVyX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgbmV4dF9pZHhfcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3NjYW5uZXJfY2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIC8qIFB5dGhvbiBjYWxsYWJsZSBpbnRlcmZhY2UgdG8gc2Nhbl9vbmNlX3tzdHIsdW5pY29kZX0gKi8KKyAgICBQeU9iamVjdCAqcHlzdHI7CisgICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlfc3NpemVfdCBpZHg7CisgICAgUHlfc3NpemVfdCBuZXh0X2lkeCA9IC0xOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgImlkeCIsIE5VTEx9OworICAgIFB5U2Nhbm5lck9iamVjdCAqczsKKyAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpZHgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVN0cmluZ19DaGVjayhweXN0cikpIHsKKyAgICAgICAgcnZhbCA9IHNjYW5fb25jZV9zdHIocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgeworICAgICAgICBydmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBub3QgJS44MHMiLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHB5c3RyKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUocnZhbCwgbmV4dF9pZHgpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc2Nhbm5lcl9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlTY2FubmVyT2JqZWN0ICpzOworICAgIHMgPSAoUHlTY2FubmVyT2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICBzLT5lbmNvZGluZyA9IE5VTEw7CisgICAgICAgIHMtPnN0cmljdCA9IE5VTEw7CisgICAgICAgIHMtPm9iamVjdF9ob29rID0gTlVMTDsKKyAgICAgICAgcy0+cGFpcnNfaG9vayA9IE5VTEw7CisgICAgICAgIHMtPnBhcnNlX2Zsb2F0ID0gTlVMTDsKKyAgICAgICAgcy0+cGFyc2VfaW50ID0gTlVMTDsKKyAgICAgICAgcy0+cGFyc2VfY29uc3RhbnQgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKFB5T2JqZWN0ICopczsKK30KKworc3RhdGljIGludAorc2Nhbm5lcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogSW5pdGlhbGl6ZSBTY2FubmVyIG9iamVjdCAqLworICAgIFB5T2JqZWN0ICpjdHg7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjb250ZXh0IiwgTlVMTH07CisgICAgUHlTY2FubmVyT2JqZWN0ICpzOworCisgICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7CisgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk86bWFrZV9zY2FubmVyIiwga3dsaXN0LCAmY3R4KSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogUHlTdHJpbmdfQVNfU1RSSU5HIGlzIHVzZWQgb24gZW5jb2RpbmcgKi8KKyAgICBzLT5lbmNvZGluZyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAiZW5jb2RpbmciKTsKKyAgICBpZiAocy0+ZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIGlmIChzLT5lbmNvZGluZyA9PSBQeV9Ob25lKSB7CisgICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcy0+ZW5jb2RpbmcgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKERFRkFVTFRfRU5DT0RJTkcpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2socy0+ZW5jb2RpbmcpKSB7CisgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHMtPmVuY29kaW5nLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHMtPmVuY29kaW5nKTsKKyAgICAgICAgcy0+ZW5jb2RpbmcgPSB0bXA7CisgICAgfQorICAgIGlmIChzLT5lbmNvZGluZyA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayhzLT5lbmNvZGluZykpCisgICAgICAgIGdvdG8gYmFpbDsKKworICAgIC8qIEFsbCBvZiB0aGVzZSB3aWxsIGZhaWwgImdyYWNlZnVsbHkiIHNvIHdlIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoZW0gKi8KKyAgICBzLT5zdHJpY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInN0cmljdCIpOworICAgIGlmIChzLT5zdHJpY3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIHMtPm9iamVjdF9ob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJvYmplY3RfaG9vayIpOworICAgIGlmIChzLT5vYmplY3RfaG9vayA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+cGFpcnNfaG9vayA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAib2JqZWN0X3BhaXJzX2hvb2siKTsKKyAgICBpZiAocy0+cGFpcnNfaG9vayA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcy0+cGFyc2VfZmxvYXQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInBhcnNlX2Zsb2F0Iik7CisgICAgaWYgKHMtPnBhcnNlX2Zsb2F0ID09IE5VTEwpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBzLT5wYXJzZV9pbnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGN0eCwgInBhcnNlX2ludCIpOworICAgIGlmIChzLT5wYXJzZV9pbnQgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIHMtPnBhcnNlX2NvbnN0YW50ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjdHgsICJwYXJzZV9jb25zdGFudCIpOworICAgIGlmIChzLT5wYXJzZV9jb25zdGFudCA9PSBOVUxMKQorICAgICAgICBnb3RvIGJhaWw7CisKKyAgICByZXR1cm4gMDsKKworYmFpbDoKKyAgICBQeV9DTEVBUihzLT5lbmNvZGluZyk7CisgICAgUHlfQ0xFQVIocy0+c3RyaWN0KTsKKyAgICBQeV9DTEVBUihzLT5vYmplY3RfaG9vayk7CisgICAgUHlfQ0xFQVIocy0+cGFpcnNfaG9vayk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfZmxvYXQpOworICAgIFB5X0NMRUFSKHMtPnBhcnNlX2ludCk7CisgICAgUHlfQ0xFQVIocy0+cGFyc2VfY29uc3RhbnQpOworICAgIHJldHVybiAtMTsKK30KKworUHlEb2NfU1RSVkFSKHNjYW5uZXJfZG9jLCAiSlNPTiBzY2FubmVyIG9iamVjdCIpOworCitzdGF0aWMKK1B5VHlwZU9iamVjdCBQeVNjYW5uZXJUeXBlID0geworICAgIFB5T2JqZWN0X0hFQURfSU5JVChOVUxMKQorICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbnRlcm5hbCAqLworICAgICJfanNvbi5TY2FubmVyIiwgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihQeVNjYW5uZXJPYmplY3QpLCAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICBzY2FubmVyX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgc2Nhbm5lcl9jYWxsLCAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwvKiBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgKi8gICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwvKiBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciwgKi8gICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgIHNjYW5uZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBzY2FubmVyX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICBzY2FubmVyX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgc2Nhbm5lcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIHNjYW5uZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLC8qIFB5VHlwZV9HZW5lcmljQWxsb2MsICovICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIHNjYW5uZXJfbmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLC8qIFB5T2JqZWN0X0dDX0RlbCwgKi8gICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgIHMtPm1hcmtlcnMgPSBOVUxMOworICAgICAgICBzLT5kZWZhdWx0Zm4gPSBOVUxMOworICAgICAgICBzLT5lbmNvZGVyID0gTlVMTDsKKyAgICAgICAgcy0+aW5kZW50ID0gTlVMTDsKKyAgICAgICAgcy0+a2V5X3NlcGFyYXRvciA9IE5VTEw7CisgICAgICAgIHMtPml0ZW1fc2VwYXJhdG9yID0gTlVMTDsKKyAgICAgICAgcy0+c29ydF9rZXlzID0gTlVMTDsKKyAgICAgICAgcy0+c2tpcGtleXMgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKFB5T2JqZWN0ICopczsKK30KKworc3RhdGljIGludAorZW5jb2Rlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgLyogaW5pdGlhbGl6ZSBFbmNvZGVyIG9iamVjdCAqLworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibWFya2VycyIsICJkZWZhdWx0IiwgImVuY29kZXIiLCAiaW5kZW50IiwgImtleV9zZXBhcmF0b3IiLCAiaXRlbV9zZXBhcmF0b3IiLCAic29ydF9rZXlzIiwgInNraXBrZXlzIiwgImFsbG93X25hbiIsIE5VTEx9OworCisgICAgUHlFbmNvZGVyT2JqZWN0ICpzOworICAgIFB5T2JqZWN0ICptYXJrZXJzLCAqZGVmYXVsdGZuLCAqZW5jb2RlciwgKmluZGVudCwgKmtleV9zZXBhcmF0b3I7CisgICAgUHlPYmplY3QgKml0ZW1fc2VwYXJhdG9yLCAqc29ydF9rZXlzLCAqc2tpcGtleXMsICphbGxvd19uYW47CisKKyAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKKyAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PT09PT09POm1ha2VfZW5jb2RlciIsIGt3bGlzdCwKKyAgICAgICAgJm1hcmtlcnMsICZkZWZhdWx0Zm4sICZlbmNvZGVyLCAmaW5kZW50LCAma2V5X3NlcGFyYXRvciwgJml0ZW1fc2VwYXJhdG9yLAorICAgICAgICAmc29ydF9rZXlzLCAmc2tpcGtleXMsICZhbGxvd19uYW4pKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzLT5tYXJrZXJzID0gbWFya2VyczsKKyAgICBzLT5kZWZhdWx0Zm4gPSBkZWZhdWx0Zm47CisgICAgcy0+ZW5jb2RlciA9IGVuY29kZXI7CisgICAgcy0+aW5kZW50ID0gaW5kZW50OworICAgIHMtPmtleV9zZXBhcmF0b3IgPSBrZXlfc2VwYXJhdG9yOworICAgIHMtPml0ZW1fc2VwYXJhdG9yID0gaXRlbV9zZXBhcmF0b3I7CisgICAgcy0+c29ydF9rZXlzID0gc29ydF9rZXlzOworICAgIHMtPnNraXBrZXlzID0gc2tpcGtleXM7CisgICAgcy0+ZmFzdF9lbmNvZGUgPSAoUHlDRnVuY3Rpb25fQ2hlY2socy0+ZW5jb2RlcikgJiYgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24ocy0+ZW5jb2RlcikgPT0gKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKTsKKyAgICBzLT5hbGxvd19uYW4gPSBQeU9iamVjdF9Jc1RydWUoYWxsb3dfbmFuKTsKKworICAgIFB5X0lOQ1JFRihzLT5tYXJrZXJzKTsKKyAgICBQeV9JTkNSRUYocy0+ZGVmYXVsdGZuKTsKKyAgICBQeV9JTkNSRUYocy0+ZW5jb2Rlcik7CisgICAgUHlfSU5DUkVGKHMtPmluZGVudCk7CisgICAgUHlfSU5DUkVGKHMtPmtleV9zZXBhcmF0b3IpOworICAgIFB5X0lOQ1JFRihzLT5pdGVtX3NlcGFyYXRvcik7CisgICAgUHlfSU5DUkVGKHMtPnNvcnRfa2V5cyk7CisgICAgUHlfSU5DUkVGKHMtPnNraXBrZXlzKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfY2FsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIC8qIFB5dGhvbiBjYWxsYWJsZSBpbnRlcmZhY2UgdG8gZW5jb2RlX2xpc3RlbmNvZGVfb2JqICovCisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmoiLCAiX2N1cnJlbnRfaW5kZW50X2xldmVsIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICBQeV9zc2l6ZV90IGluZGVudF9sZXZlbDsKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CisgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCisgICAgICAgICZvYmosIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaW5kZW50X2xldmVsKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGVuY29kZXJfbGlzdGVuY29kZV9vYmoocywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2ZWwpKSB7CisgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2VuY29kZWRfY29uc3QoUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIE5vbmUsIFRydWUsIEZhbHNlICovCisgICAgaWYgKG9iaiA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqc19udWxsID0gTlVMTDsKKyAgICAgICAgaWYgKHNfbnVsbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzX251bGwgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKHNfbnVsbCk7CisgICAgICAgIHJldHVybiBzX251bGw7CisgICAgfQorICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9UcnVlKSB7CisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqc190cnVlID0gTlVMTDsKKyAgICAgICAgaWYgKHNfdHJ1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzX3RydWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ0cnVlIik7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKHNfdHJ1ZSk7CisgICAgICAgIHJldHVybiBzX3RydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9GYWxzZSkgeworICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnNfZmFsc2UgPSBOVUxMOworICAgICAgICBpZiAoc19mYWxzZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzX2ZhbHNlID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc19mYWxzZSk7CisgICAgICAgIHJldHVybiBzX2ZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJub3QgYSBjb25zdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdCAqLworICAgIGRvdWJsZSBpID0gUHlGbG9hdF9BU19ET1VCTEUob2JqKTsKKyAgICBpZiAoIVB5X0lTX0ZJTklURShpKSkgeworICAgICAgICBpZiAoIXMtPmFsbG93X25hbikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIkluZmluaXR5Iik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCItSW5maW5pdHkiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKCJOYU4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCisgICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIob2JqKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RyaW5nICovCisgICAgaWYgKHMtPmZhc3RfZW5jb2RlKQorICAgICAgICByZXR1cm4gcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkoTlVMTCwgb2JqKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPmVuY29kZXIsIG9iaiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK19zdGVhbF9saXN0X2FwcGVuZChQeU9iamVjdCAqbHN0LCBQeU9iamVjdCAqc3RvbGVuKQoreworICAgIC8qIEFwcGVuZCBzdG9sZW4gYW5kIHRoZW4gZGVjcmVtZW50IGl0cyByZWZlcmVuY2UgY291bnQgKi8KKyAgICBpbnQgcnZhbCA9IFB5TGlzdF9BcHBlbmQobHN0LCBzdG9sZW4pOworICAgIFB5X0RFQ1JFRihzdG9sZW4pOworICAgIHJldHVybiBydmFsOworfQorCitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpvYmosIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKQoreworICAgIC8qIEVuY29kZSBQeXRob24gb2JqZWN0IG9iaiB0byBhIEpTT04gdGVybSwgcnZhbCBpcyBhIFB5TGlzdCAqLworICAgIFB5T2JqZWN0ICpuZXdvYmo7CisgICAgaW50IHJ2OworCisgICAgaWYgKG9iaiA9PSBQeV9Ob25lIHx8IG9iaiA9PSBQeV9UcnVlIHx8IG9iaiA9PSBQeV9GYWxzZSkgeworICAgICAgICBQeU9iamVjdCAqY3N0ciA9IF9lbmNvZGVkX2NvbnN0KG9iaik7CisgICAgICAgIGlmIChjc3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBfc3RlYWxfbGlzdF9hcHBlbmQocnZhbCwgY3N0cik7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKG9iaikgfHwgUHlVbmljb2RlX0NoZWNrKG9iaikpCisgICAgeworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX3N0cmluZyhzLCBvYmopOworICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gX3N0ZWFsX2xpc3RfYXBwZW5kKHJ2YWwsIGVuY29kZWQpOworICAgIH0KKyAgICBlbHNlIGlmIChQeUludF9DaGVjayhvYmopIHx8IFB5TG9uZ19DaGVjayhvYmopKSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBfc3RlYWxfbGlzdF9hcHBlbmQocnZhbCwgZW5jb2RlZCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgeworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX2Zsb2F0KHMsIG9iaik7CisgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBfc3RlYWxfbGlzdF9hcHBlbmQocnZhbCwgZW5jb2RlZCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVjayhvYmopIHx8IFB5VHVwbGVfQ2hlY2sob2JqKSkgeworICAgICAgICByZXR1cm4gZW5jb2Rlcl9saXN0ZW5jb2RlX2xpc3QocywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2ZWwpOworICAgIH0KKyAgICBlbHNlIGlmIChQeURpY3RfQ2hlY2sob2JqKSkgeworICAgICAgICByZXR1cm4gZW5jb2Rlcl9saXN0ZW5jb2RlX2RpY3QocywgcnZhbCwgb2JqLCBpbmRlbnRfbGV2ZWwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsKKyAgICAgICAgaWYgKHMtPm1hcmtlcnMgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgaW50IGhhc19rZXk7CisgICAgICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihvYmopOworICAgICAgICAgICAgaWYgKGlkZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaGFzX2tleSA9IFB5RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7CisgICAgICAgICAgICBpZiAoaGFzX2tleSkgeworICAgICAgICAgICAgICAgIGlmIChoYXNfa2V5ICE9IC0xKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpZGVudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHMtPm1hcmtlcnMsIGlkZW50LCBvYmopKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlkZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmV3b2JqID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzLT5kZWZhdWx0Zm4sIG9iaiwgTlVMTCk7CisgICAgICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfWERFQ1JFRihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcnYgPSBlbmNvZGVyX2xpc3RlbmNvZGVfb2JqKHMsIHJ2YWwsIG5ld29iaiwgaW5kZW50X2xldmVsKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIGlmIChydikgeworICAgICAgICAgICAgUHlfWERFQ1JFRihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlkZW50ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbShzLT5tYXJrZXJzLCBpZGVudCkpIHsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnY7CisgICAgfQorfQorCitzdGF0aWMgaW50CitlbmNvZGVyX2xpc3RlbmNvZGVfZGljdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpydmFsLCBQeU9iamVjdCAqZGN0LCBQeV9zc2l6ZV90IGluZGVudF9sZXZlbCkKK3sKKyAgICAvKiBFbmNvZGUgUHl0aG9uIGRpY3QgZGN0IGEgSlNPTiB0ZXJtLCBydmFsIGlzIGEgUHlMaXN0ICovCisgICAgc3RhdGljIFB5T2JqZWN0ICpvcGVuX2RpY3QgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqY2xvc2VfZGljdCA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICplbXB0eV9kaWN0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa3N0ciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmlkZW50ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa2V5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICppdCA9IE5VTEw7CisgICAgaW50IHNraXBrZXlzOworICAgIFB5X3NzaXplX3QgaWR4OworCisgICAgaWYgKG9wZW5fZGljdCA9PSBOVUxMIHx8IGNsb3NlX2RpY3QgPT0gTlVMTCB8fCBlbXB0eV9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgb3Blbl9kaWN0ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygieyIpOworICAgICAgICBjbG9zZV9kaWN0ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygifSIpOworICAgICAgICBlbXB0eV9kaWN0ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygie30iKTsKKyAgICAgICAgaWYgKG9wZW5fZGljdCA9PSBOVUxMIHx8IGNsb3NlX2RpY3QgPT0gTlVMTCB8fCBlbXB0eV9kaWN0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChQeV9TSVpFKGRjdCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5TGlzdF9BcHBlbmQocnZhbCwgZW1wdHlfZGljdCk7CisKKyAgICBpZiAocy0+bWFya2VycyAhPSBQeV9Ob25lKSB7CisgICAgICAgIGludCBoYXNfa2V5OworICAgICAgICBpZGVudCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihkY3QpOworICAgICAgICBpZiAoaWRlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgaGFzX2tleSA9IFB5RGljdF9Db250YWlucyhzLT5tYXJrZXJzLCBpZGVudCk7CisgICAgICAgIGlmIChoYXNfa2V5KSB7CisgICAgICAgICAgICBpZiAoaGFzX2tleSAhPSAtMSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpOworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzLT5tYXJrZXJzLCBpZGVudCwgZGN0KSkgeworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgb3Blbl9kaWN0KSkKKyAgICAgICAgZ290byBiYWlsOworCisgICAgaWYgKHMtPmluZGVudCAhPSBQeV9Ob25lKSB7CisgICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLworICAgICAgICBpbmRlbnRfbGV2ZWwgKz0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgYnVmICs9IG5ld2xpbmVfaW5kZW50CisgICAgICAgICovCisgICAgfQorCisgICAgLyogVE9ETzogQyBzcGVlZHVwIG5vdCBpbXBsZW1lbnRlZCBmb3Igc29ydF9rZXlzICovCisKKyAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoZGN0KTsKKyAgICBpZiAoaXQgPT0gTlVMTCkKKyAgICAgICAgZ290byBiYWlsOworICAgIHNraXBrZXlzID0gUHlPYmplY3RfSXNUcnVlKHMtPnNraXBrZXlzKTsKKyAgICBpZHggPSAwOworICAgIHdoaWxlICgoa2V5ID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworCisgICAgICAgIGlmIChQeVN0cmluZ19DaGVjayhrZXkpIHx8IFB5VW5pY29kZV9DaGVjayhrZXkpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKKyAgICAgICAgICAgIGtzdHIgPSBrZXk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVjayhrZXkpKSB7CisgICAgICAgICAgICBrc3RyID0gZW5jb2Rlcl9lbmNvZGVfZmxvYXQocywga2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5SW50X0NoZWNrKGtleSkgfHwgUHlMb25nX0NoZWNrKGtleSkpIHsKKyAgICAgICAgICAgIGtzdHIgPSBQeU9iamVjdF9TdHIoa2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSBQeV9UcnVlIHx8IGtleSA9PSBQeV9GYWxzZSB8fCBrZXkgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAga3N0ciA9IF9lbmNvZGVkX2NvbnN0KGtleSk7CisgICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChza2lwa2V5cykgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFRPRE86IGluY2x1ZGUgcmVwciBvZiBrZXkgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJrZXlzIG11c3QgYmUgYSBzdHJpbmciKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZHgpIHsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHMtPml0ZW1fc2VwYXJhdG9yKSkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEl0ZW0oZGN0LCBrZXkpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKworICAgICAgICBlbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKHMsIGtzdHIpOworICAgICAgICBQeV9DTEVBUihrc3RyKTsKKyAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgZW5jb2RlZCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHMtPmtleV9zZXBhcmF0b3IpKQorICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICBpZiAoZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihzLCBydmFsLCB2YWx1ZSwgaW5kZW50X2xldmVsKSkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgaWR4ICs9IDE7CisgICAgICAgIFB5X0NMRUFSKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgUHlfQ0xFQVIoaXQpOworCisgICAgaWYgKGlkZW50ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHMtPm1hcmtlcnMsIGlkZW50KSkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgUHlfQ0xFQVIoaWRlbnQpOworICAgIH0KKyAgICBpZiAocy0+aW5kZW50ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogVE9ETzogRE9FUyBOT1QgUlVOICovCisgICAgICAgIC8qCisgICAgICAgICAgICBpbmRlbnRfbGV2ZWwgLT0gMTsKKworICAgICAgICAgICAgeWllbGQgJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICovCisgICAgfQorICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIGNsb3NlX2RpY3QpKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgcmV0dXJuIDA7CisKK2JhaWw6CisgICAgUHlfWERFQ1JFRihpdCk7CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsdWUpOworICAgIFB5X1hERUNSRUYoa3N0cik7CisgICAgUHlfWERFQ1JFRihpZGVudCk7CisgICAgcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyBpbnQKK2VuY29kZXJfbGlzdGVuY29kZV9saXN0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKnJ2YWwsIFB5T2JqZWN0ICpzZXEsIFB5X3NzaXplX3QgaW5kZW50X2xldmVsKQoreworICAgIC8qIEVuY29kZSBQeXRob24gbGlzdCBzZXEgdG8gYSBKU09OIHRlcm0sIHJ2YWwgaXMgYSBQeUxpc3QgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKm9wZW5fYXJyYXkgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqY2xvc2VfYXJyYXkgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqZW1wdHlfYXJyYXkgPSBOVUxMOworICAgIFB5T2JqZWN0ICppZGVudCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnNfZmFzdCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBudW1faXRlbXM7CisgICAgUHlPYmplY3QgKipzZXFfaXRlbXM7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgaWYgKG9wZW5fYXJyYXkgPT0gTlVMTCB8fCBjbG9zZV9hcnJheSA9PSBOVUxMIHx8IGVtcHR5X2FycmF5ID09IE5VTEwpIHsKKyAgICAgICAgb3Blbl9hcnJheSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIlsiKTsKKyAgICAgICAgY2xvc2VfYXJyYXkgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJdIik7CisgICAgICAgIGVtcHR5X2FycmF5ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiW10iKTsKKyAgICAgICAgaWYgKG9wZW5fYXJyYXkgPT0gTlVMTCB8fCBjbG9zZV9hcnJheSA9PSBOVUxMIHx8IGVtcHR5X2FycmF5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlkZW50ID0gTlVMTDsKKyAgICBzX2Zhc3QgPSBQeVNlcXVlbmNlX0Zhc3Qoc2VxLCAiX2l0ZXJlbmNvZGVfbGlzdCBuZWVkcyBhIHNlcXVlbmNlIik7CisgICAgaWYgKHNfZmFzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbnVtX2l0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNfZmFzdCk7CisgICAgaWYgKG51bV9pdGVtcyA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzX2Zhc3QpOworICAgICAgICByZXR1cm4gUHlMaXN0X0FwcGVuZChydmFsLCBlbXB0eV9hcnJheSk7CisgICAgfQorCisgICAgaWYgKHMtPm1hcmtlcnMgIT0gUHlfTm9uZSkgeworICAgICAgICBpbnQgaGFzX2tleTsKKyAgICAgICAgaWRlbnQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoc2VxKTsKKyAgICAgICAgaWYgKGlkZW50ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIGhhc19rZXkgPSBQeURpY3RfQ29udGFpbnMocy0+bWFya2VycywgaWRlbnQpOworICAgICAgICBpZiAoaGFzX2tleSkgeworICAgICAgICAgICAgaWYgKGhhc19rZXkgIT0gLTEpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocy0+bWFya2VycywgaWRlbnQsIHNlcSkpIHsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNlcV9pdGVtcyA9IFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhzX2Zhc3QpOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIG9wZW5fYXJyYXkpKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgaWYgKHMtPmluZGVudCAhPSBQeV9Ob25lKSB7CisgICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLworICAgICAgICBpbmRlbnRfbGV2ZWwgKz0gMTsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgYnVmICs9IG5ld2xpbmVfaW5kZW50CisgICAgICAgICovCisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBudW1faXRlbXM7IGkrKykgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gc2VxX2l0ZW1zW2ldOworICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocnZhbCwgcy0+aXRlbV9zZXBhcmF0b3IpKQorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5jb2Rlcl9saXN0ZW5jb2RlX29iaihzLCBydmFsLCBvYmosIGluZGVudF9sZXZlbCkpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChpZGVudCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbShzLT5tYXJrZXJzLCBpZGVudCkpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIFB5X0NMRUFSKGlkZW50KTsKKyAgICB9CisgICAgaWYgKHMtPmluZGVudCAhPSBQeV9Ob25lKSB7CisgICAgICAgIC8qIFRPRE86IERPRVMgTk9UIFJVTiAqLworICAgICAgICAvKgorICAgICAgICAgICAgaW5kZW50X2xldmVsIC09IDE7CisKKyAgICAgICAgICAgIHlpZWxkICdcbicgKyAoJyAnICogKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpKQorICAgICAgICAqLworICAgIH0KKyAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBjbG9zZV9hcnJheSkpCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICBQeV9ERUNSRUYoc19mYXN0KTsKKyAgICByZXR1cm4gMDsKKworYmFpbDoKKyAgICBQeV9YREVDUkVGKGlkZW50KTsKKyAgICBQeV9ERUNSRUYoc19mYXN0KTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitlbmNvZGVyX2RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgLyogRGVhbGxvY2F0ZSBFbmNvZGVyICovCisgICAgZW5jb2Rlcl9jbGVhcihzZWxmKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOworfQorCitzdGF0aWMgaW50CitlbmNvZGVyX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeUVuY29kZXJPYmplY3QgKnM7CisgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CisgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOworICAgIFB5X1ZJU0lUKHMtPm1hcmtlcnMpOworICAgIFB5X1ZJU0lUKHMtPmRlZmF1bHRmbik7CisgICAgUHlfVklTSVQocy0+ZW5jb2Rlcik7CisgICAgUHlfVklTSVQocy0+aW5kZW50KTsKKyAgICBQeV9WSVNJVChzLT5rZXlfc2VwYXJhdG9yKTsKKyAgICBQeV9WSVNJVChzLT5pdGVtX3NlcGFyYXRvcik7CisgICAgUHlfVklTSVQocy0+c29ydF9rZXlzKTsKKyAgICBQeV9WSVNJVChzLT5za2lwa2V5cyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2VuY29kZXJfY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgLyogRGVhbGxvY2F0ZSBFbmNvZGVyICovCisgICAgUHlFbmNvZGVyT2JqZWN0ICpzOworICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOworICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKKyAgICBQeV9DTEVBUihzLT5tYXJrZXJzKTsKKyAgICBQeV9DTEVBUihzLT5kZWZhdWx0Zm4pOworICAgIFB5X0NMRUFSKHMtPmVuY29kZXIpOworICAgIFB5X0NMRUFSKHMtPmluZGVudCk7CisgICAgUHlfQ0xFQVIocy0+a2V5X3NlcGFyYXRvcik7CisgICAgUHlfQ0xFQVIocy0+aXRlbV9zZXBhcmF0b3IpOworICAgIFB5X0NMRUFSKHMtPnNvcnRfa2V5cyk7CisgICAgUHlfQ0xFQVIocy0+c2tpcGtleXMpOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoZW5jb2Rlcl9kb2MsICJfaXRlcmVuY29kZShvYmosIF9jdXJyZW50X2luZGVudF9sZXZlbCkgLT4gaXRlcmFibGUiKTsKKworc3RhdGljCitQeVR5cGVPYmplY3QgUHlFbmNvZGVyVHlwZSA9IHsKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoTlVMTCkKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaW50ZXJuYWwgKi8KKyAgICAiX2pzb24uRW5jb2RlciIsICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoUHlFbmNvZGVyT2JqZWN0KSwgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgZW5jb2Rlcl9kZWFsbG9jLCAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIGVuY29kZXJfY2FsbCwgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyogdHBfZmxhZ3MgKi8KKyAgICBlbmNvZGVyX2RvYywgICAgICAgICAgLyogdHBfZG9jICovCisgICAgZW5jb2Rlcl90cmF2ZXJzZSwgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgZW5jb2Rlcl9jbGVhciwgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGVuY29kZXJfbWVtYmVycywgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgZW5jb2Rlcl9pbml0LCAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBlbmNvZGVyX25ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBzcGVlZHVwc19tZXRob2RzW10gPSB7CisgICAgeyJlbmNvZGVfYmFzZXN0cmluZ19hc2NpaSIsCisgICAgICAgIChQeUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSwKKyAgICAgICAgTUVUSF9PLAorICAgICAgICBweWRvY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaX0sCisgICAgeyJzY2Fuc3RyaW5nIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X3NjYW5zdHJpbmcsCisgICAgICAgIE1FVEhfVkFSQVJHUywKKyAgICAgICAgcHlkb2Nfc2NhbnN0cmluZ30sCiAgICAge05VTEwsIE5VTEwsIDAsIE5VTEx9CiB9OwogCkBAIC02MTcsNSArMjM5MCwxNSBAQAogaW5pdF9qc29uKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07Ci0gICAgbSA9IFB5X0luaXRNb2R1bGUzKCJfanNvbiIsIGpzb25fbWV0aG9kcywgbW9kdWxlX2RvYyk7CisgICAgUHlTY2FubmVyVHlwZS50cF9uZXcgPSBQeVR5cGVfR2VuZXJpY05ldzsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVNjYW5uZXJUeXBlKSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBQeUVuY29kZXJUeXBlLnRwX25ldyA9IFB5VHlwZV9HZW5lcmljTmV3OworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RW5jb2RlclR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIG0gPSBQeV9Jbml0TW9kdWxlMygiX2pzb24iLCBzcGVlZHVwc19tZXRob2RzLCBtb2R1bGVfZG9jKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikmUHlTY2FubmVyVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJtYWtlX3NjYW5uZXIiLCAoUHlPYmplY3QqKSZQeVNjYW5uZXJUeXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikmUHlFbmNvZGVyVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJtYWtlX2VuY29kZXIiLCAoUHlPYmplY3QqKSZQeUVuY29kZXJUeXBlKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKaW5kZXggN2U0NzVkYS4uMjUzYTRkYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKQEAgLTMyLDEwICszMiw2IEBACiAjaW5jbHVkZSA8d2NoYXIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjaW5jbHVkZSA8d2luZG93cy5oPgpAQCAtNjIsOCArNTgsOCBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQsICp2YWwgPSBOVUxMOwogCiAgICAgaWYgKHNbMF0gPT0gJ1wwJykKLSAgICAgICAgLyogZW1wdHkgc3RyaW5nOiBubyBncm91cGluZyBhdCBhbGwgKi8KLSAgICAgICAgcmV0dXJuIFB5TGlzdF9OZXcoMCk7CisgICAgLyogZW1wdHkgc3RyaW5nOiBubyBncm91cGluZyBhdCBhbGwgKi8KKyAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKIAogICAgIGZvciAoaSA9IDA7IHNbaV0gIT0gJ1wwJyAmJiBzW2ldICE9IENIQVJfTUFYOyBpKyspCiAgICAgICAgIDsgLyogbm90aGluZyAqLwpAQCAtMTY1LDI2ICsxNjEsMzQgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0X29iamVjdDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXx6OnNldGxvY2FsZSIsICZjYXRlZ29yeSwgJmxvY2FsZSkpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGlmIChjYXRlZ29yeSA8IExDX01JTiB8fCBjYXRlZ29yeSA+IExDX01BWCkKKyAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgImludmFsaWQgbG9jYWxlIGNhdGVnb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKGxvY2FsZSkgewotICAgICAgICAvKiBzZXQgbG9jYWxlICovCi0gICAgICAgIHJlc3VsdCA9IHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxlKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIG9wZXJhdGlvbiBmYWlsZWQsIG5vIHNldHRpbmcgd2FzIGNoYW5nZWQgKi8KLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgInVuc3VwcG9ydGVkIGxvY2FsZSBzZXR0aW5nIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICByZXN1bHRfb2JqZWN0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXN1bHQpOwotICAgICAgICBpZiAoIXJlc3VsdF9vYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogcmVjb3JkIGNoYW5nZXMgdG8gTENfQ1RZUEUgKi8KLSAgICAgICAgaWYgKGNhdGVnb3J5ID09IExDX0NUWVBFIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKLSAgICAgICAgICAgIGZpeHVwX3VsY2FzZSgpOworICAgIC8qIHNldCBsb2NhbGUgKi8KKyAgICByZXN1bHQgPSBzZXRsb2NhbGUoY2F0ZWdvcnksIGxvY2FsZSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgLyogb3BlcmF0aW9uIGZhaWxlZCwgbm8gc2V0dGluZyB3YXMgY2hhbmdlZCAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJ1bnN1cHBvcnRlZCBsb2NhbGUgc2V0dGluZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0X29iamVjdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzdWx0KTsKKyAgICBpZiAoIXJlc3VsdF9vYmplY3QpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIHJlY29yZCBjaGFuZ2VzIHRvIExDX0NUWVBFICovCisgICAgaWYgKGNhdGVnb3J5ID09IExDX0NUWVBFIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKyAgICAgICAgZml4dXBfdWxjYXNlKCk7CiAgICAgICAgIC8qIHRoaW5ncyB0aGF0IGdvdCB3cm9uZyB1cCB0byBoZXJlIGFyZSBpZ25vcmVkICovCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogZ2V0IGxvY2FsZSAqLworICAgIC8qIGdldCBsb2NhbGUgKi8KICAgICAgICAgcmVzdWx0ID0gc2V0bG9jYWxlKGNhdGVnb3J5LCBOVUxMKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgImxvY2FsZSBxdWVyeSBmYWlsZWQiKTsKQEAgLTI5Myw5ICsyOTcsOSBAQAogICAgIH0KICAgICAvKiBDb252ZXJ0IHRoZSBub24tdW5pY29kZSBhcmd1bWVudCB0byB1bmljb2RlLiAqLwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG9zMSkpIHsKLSAgICAgICAgb3MxID0gUHlVbmljb2RlX0Zyb21PYmplY3Qob3MxKTsKLSAgICAgICAgaWYgKCFvczEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvczEgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChvczEpOworICAgIGlmICghb3MxKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVsMSA9IDE7CiAgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG9zMikpIHsKQEAgLTQxMiwzOCArNDE2LDYgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0vKgotKiogRmluZCBvdXQgd2hhdCB0aGUgY3VycmVudCBzY3JpcHQgaXMuCi0qKiBEb25hdGVkIGJ5IEZyZWRyaWsgTHVuZGguCi0qLwotc3RhdGljIGNoYXIgKm1hY19nZXRzY3JpcHQodm9pZCkKLXsKLSAgICBDRlN0cmluZ0VuY29kaW5nIGVuYyA9IENGU3RyaW5nR2V0U3lzdGVtRW5jb2RpbmcoKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgbmFtZSA9IE5VTEw7Ci0gICAgLyogUmV0dXJuIHRoZSBjb2RlIG5hbWUgZm9yIHRoZSBlbmNvZGluZ3MgZm9yIHdoaWNoIHdlIGhhdmUgY29kZWNzLiAqLwotICAgIHN3aXRjaChlbmMpIHsKLSAgICBjYXNlIGtDRlN0cmluZ0VuY29kaW5nTWFjUm9tYW46IHJldHVybiAibWFjLXJvbWFuIjsKLSAgICBjYXNlIGtDRlN0cmluZ0VuY29kaW5nTWFjR3JlZWs6IHJldHVybiAibWFjLWdyZWVrIjsKLSAgICBjYXNlIGtDRlN0cmluZ0VuY29kaW5nTWFjQ3lyaWxsaWM6IHJldHVybiAibWFjLWN5cmlsbGljIjsKLSAgICBjYXNlIGtDRlN0cmluZ0VuY29kaW5nTWFjVHVya2lzaDogcmV0dXJuICJtYWMtdHVya2lzaCI7Ci0gICAgY2FzZSBrQ0ZTdHJpbmdFbmNvZGluZ01hY0ljZWxhbmRpYzogcmV0dXJuICJtYWMtaWNlbGFuZGljIjsKLSAgICAvKiBYWFggd2hpY2ggb25lIGlzIG1hYy1sYXRpbjI/ICovCi0gICAgfQotICAgIGlmICghbmFtZSkgewotICAgICAgICAvKiBUaGlzIGxlYWtzIGFuIG9iamVjdC4gKi8KLSAgICAgICAgbmFtZSA9IENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9JQU5BQ2hhclNldE5hbWUoZW5jKTsKLSAgICB9Ci0gICAgcmV0dXJuIChjaGFyICopQ0ZTdHJpbmdHZXRDU3RyaW5nUHRyKG5hbWUsIDApOwotfQotCi1zdGF0aWMgUHlPYmplY3QqCi1QeUxvY2FsZV9nZXRkZWZhdWx0bG9jYWxlKFB5T2JqZWN0KiBzZWxmKQotewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPcyIsIFB5X05vbmUsIG1hY19nZXRzY3JpcHQoKSk7Ci19Ci0jZW5kaWYKLQogI2lmZGVmIEhBVkVfTEFOR0lORk9fSAogI2RlZmluZSBMQU5HSU5GTyhYKSB7I1gsIFh9CiBzdGF0aWMgc3RydWN0IGxhbmdpbmZvX2NvbnN0YW50ewpAQCAtNTYyLDE3ICs1MzQsMTcgQEAKIHsKICAgICBpbnQgaXRlbSwgaTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bmxfbGFuZ2luZm8iLCAmaXRlbSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBOVUxMOwogICAgIC8qIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIHN1cHBvcnRlZCBjb25zdGFudC4gR05VIGxpYmMgc29tZXRpbWVzCiAgICAgICAgcmV0dXJucyBudW1lcmljIHZhbHVlcyBpbiB0aGUgY2hhciogcmV0dXJuIHZhbHVlLCB3aGljaCB3b3VsZAogICAgICAgIGNyYXNoIFB5U3RyaW5nX0Zyb21TdHJpbmcuICAqLwogICAgIGZvciAoaSA9IDA7IGxhbmdpbmZvX2NvbnN0YW50c1tpXS5uYW1lOyBpKyspCi0gICAgaWYgKGxhbmdpbmZvX2NvbnN0YW50c1tpXS52YWx1ZSA9PSBpdGVtKSB7Ci0gICAgICAgIC8qIENoZWNrIE5VTEwgYXMgYSB3b3JrYXJvdW5kIGZvciBHTlUgbGliYydzIHJldHVybmluZyBOVUxMCi0gICAgICAgICAgIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nIGZvciBubF9sYW5naW5mbyhFUkEpLiAgKi8KLSAgICAgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gbmxfbGFuZ2luZm8oaXRlbSk7Ci0gICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlc3VsdCAhPSBOVUxMID8gcmVzdWx0IDogIiIpOwotICAgIH0KKyAgICAgICAgaWYgKGxhbmdpbmZvX2NvbnN0YW50c1tpXS52YWx1ZSA9PSBpdGVtKSB7CisgICAgICAgICAgICAvKiBDaGVjayBOVUxMIGFzIGEgd29ya2Fyb3VuZCBmb3IgR05VIGxpYmMncyByZXR1cm5pbmcgTlVMTAorICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcgZm9yIG5sX2xhbmdpbmZvKEVSQSkuICAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqcmVzdWx0ID0gbmxfbGFuZ2luZm8oaXRlbSk7CisgICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXN1bHQgIT0gTlVMTCA/IHJlc3VsdCA6ICIiKTsKKyAgICAgICAgfQogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5zdXBwb3J0ZWQgbGFuZ2luZm8gY29uc3RhbnQiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTY4OSw3ICs2NjEsNyBAQAogICAgTUVUSF9WQVJBUkdTLCBzdHJjb2xsX19kb2NfX30sCiAgIHsic3RyeGZybSIsIChQeUNGdW5jdGlvbikgUHlMb2NhbGVfc3RyeGZybSwKICAgIE1FVEhfVkFSQVJHUywgc3RyeGZybV9fZG9jX199LAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICB7Il9nZXRkZWZhdWx0bG9jYWxlIiwgKFB5Q0Z1bmN0aW9uKSBQeUxvY2FsZV9nZXRkZWZhdWx0bG9jYWxlLCBNRVRIX05PQVJHU30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKZGlmZiAtLWdpdCBhL01vZHVsZXMvX21hdGguYyBiL01vZHVsZXMvX21hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVmNDgxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fbWF0aC5jCkBAIC0wLDAgKzEsMjMyIEBACisvKiBEZWZpbml0aW9ucyBvZiBzb21lIEM5OSBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zLCBmb3IgdGhvc2UgcGxhdGZvcm1zCisgICB0aGF0IGRvbid0IGltcGxlbWVudCB0aGVzZSBmdW5jdGlvbnMgYWxyZWFkeS4gKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSAiX21hdGguaCIKKworLyogVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGxpZXMgdG8gdGhlIG9yaWdpbmFsCisgICBpbXBsZW1lbnRhdGlvbnMgb2YgYWNvc2gsIGFzaW5oIGFuZCBhdGFuaC4gKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIGxuMiA9IDYuOTMxNDcxODA1NTk5NDUyODYyMjdFLTAxOworc3RhdGljIGNvbnN0IGRvdWJsZSB0d29fcG93X20yOCA9IDMuNzI1MjkwMjk4NDYxOTE0MUUtMDk7IC8qIDIqKi0yOCAqLworc3RhdGljIGNvbnN0IGRvdWJsZSB0d29fcG93X3AyOCA9IDI2ODQzNTQ1Ni4wOyAvKiAyKioyOCAqLworc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOworCisvKiBhY29zaCh4KQorICogTWV0aG9kIDoKKyAqICAgICAgQmFzZWQgb24KKyAqICAgICAgICAgICAgYWNvc2goeCkgPSBsb2cgWyB4ICsgc3FydCh4KngtMSkgXQorICogICAgICB3ZSBoYXZlCisgKiAgICAgICAgICAgIGFjb3NoKHgpIDo9IGxvZyh4KStsbjIsIGlmIHggaXMgbGFyZ2U7IGVsc2UKKyAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKDJ4LTEvKHNxcnQoeCp4LTEpK3gpKSBpZiB4PjI7IGVsc2UKKyAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nMXAodCtzcXJ0KDIuMCp0K3QqdCkpOyB3aGVyZSB0PXgtMS4KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBhY29zaCh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeDwxLgorICogICAgICBhY29zaChOYU4pIGlzIE5hTiB3aXRob3V0IHNpZ25hbC4KKyAqLworCitkb3VibGUKK19QeV9hY29zaChkb3VibGUgeCkKK3sKKyAgICBpZiAoUHlfSVNfTkFOKHgpKSB7CisgICAgICAgIHJldHVybiB4K3g7CisgICAgfQorICAgIGlmICh4IDwgMS4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIHggPCAxOyAgcmV0dXJuIGEgc2lnbmFsaW5nIE5hTiAqLworICAgICAgICBlcnJubyA9IEVET007CisjaWZkZWYgUHlfTkFOCisgICAgICAgIHJldHVybiBQeV9OQU47CisjZWxzZQorICAgICAgICByZXR1cm4gKHgteCkvKHgteCk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSBpZiAoeCA+PSB0d29fcG93X3AyOCkgeyAgICAgICAgLyogeCA+IDIqKjI4ICovCisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh4KSkgeworICAgICAgICAgICAgcmV0dXJuIHgreDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsb2coeCkrbG4yOyAgICAgICAgICAvKiBhY29zaChodWdlKT1sb2coMngpICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoeCA9PSAxLikgeworICAgICAgICByZXR1cm4gMC4wOyAgICAgICAgICAgICAgICAgICAgIC8qIGFjb3NoKDEpID0gMCAqLworICAgIH0KKyAgICBlbHNlIGlmICh4ID4gMi4pIHsgICAgICAgICAgICAgICAgICAvKiAyIDwgeCA8IDIqKjI4ICovCisgICAgICAgIGRvdWJsZSB0ID0geCp4OworICAgICAgICByZXR1cm4gbG9nKDIuMCp4IC0gMS4wIC8gKHggKyBzcXJ0KHQgLSAxLjApKSk7CisgICAgfQorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPCB4IDw9IDIgKi8KKyAgICAgICAgZG91YmxlIHQgPSB4IC0gMS4wOworICAgICAgICByZXR1cm4gbV9sb2cxcCh0ICsgc3FydCgyLjAqdCArIHQqdCkpOworICAgIH0KK30KKworCisvKiBhc2luaCh4KQorICogTWV0aG9kIDoKKyAqICAgICAgQmFzZWQgb24KKyAqICAgICAgICAgICAgICBhc2luaCh4KSA9IHNpZ24oeCkgKiBsb2cgWyB8eHwgKyBzcXJ0KHgqeCsxKSBdCisgKiAgICAgIHdlIGhhdmUKKyAqICAgICAgYXNpbmgoeCkgOj0geCAgaWYgIDEreCp4PTEsCisgKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqKGxvZyh4KStsbjIpKSBmb3IgbGFyZ2UgfHh8LCBlbHNlCisgKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqbG9nKDJ8eHwrMS8ofHh8K3NxcnQoeCp4KzEpKSkgaWZ8eHw+MiwgZWxzZQorICogICAgICAgICAgICAgICA6PSBzaWduKHgpKmxvZzFwKHx4fCArIHheMi8oMSArIHNxcnQoMSt4XjIpKSkKKyAqLworCitkb3VibGUKK19QeV9hc2luaChkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgdzsKKyAgICBkb3VibGUgYWJzeCA9IGZhYnMoeCk7CisKKyAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IFB5X0lTX0lORklOSVRZKHgpKSB7CisgICAgICAgIHJldHVybiB4K3g7CisgICAgfQorICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLworICAgICAgICByZXR1cm4geDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KKyAgICB9CisgICAgaWYgKGFic3ggPiB0d29fcG93X3AyOCkgeyAgICAgICAgICAgLyogfHh8ID4gMioqMjggKi8KKyAgICAgICAgdyA9IGxvZyhhYnN4KStsbjI7CisgICAgfQorICAgIGVsc2UgaWYgKGFic3ggPiAyLjApIHsgICAgICAgICAgICAgIC8qIDIgPCB8eHwgPCAyKioyOCAqLworICAgICAgICB3ID0gbG9nKDIuMCphYnN4ICsgMS4wIC8gKHNxcnQoeCp4ICsgMS4wKSArIGFic3gpKTsKKyAgICB9CisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMioqLTI4IDw9IHx4fCA8IDI9ICovCisgICAgICAgIGRvdWJsZSB0ID0geCp4OworICAgICAgICB3ID0gbV9sb2cxcChhYnN4ICsgdCAvICgxLjAgKyBzcXJ0KDEuMCArIHQpKSk7CisgICAgfQorICAgIHJldHVybiBjb3B5c2lnbih3LCB4KTsKKworfQorCisvKiBhdGFuaCh4KQorICogTWV0aG9kIDoKKyAqICAgIDEuUmVkdWNlZCB4IHRvIHBvc2l0aXZlIGJ5IGF0YW5oKC14KSA9IC1hdGFuaCh4KQorICogICAgMi5Gb3IgeD49MC41CisgKiAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgIDJ4ICAgICAgICAgICAgICAgICAgICAgICAgICB4CisgKiAgICAgIGF0YW5oKHgpID0gLS0tICogbG9nKDEgKyAtLS0tLS0tKSA9IDAuNSAqIGxvZzFwKDIgKiAtLS0tLS0tKQorICogICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgIDEgLSB4ICAgICAgICAgICAgICAgICAgICAgIDEgLSB4CisgKgorICogICAgICBGb3IgeDwwLjUKKyAqICAgICAgYXRhbmgoeCkgPSAwLjUqbG9nMXAoMngrMngqeC8oMS14KSkKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBhdGFuaCh4KSBpcyBOYU4gaWYgfHh8ID49IDEgd2l0aCBzaWduYWw7CisgKiAgICAgIGF0YW5oKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWw7CisgKgorICovCisKK2RvdWJsZQorX1B5X2F0YW5oKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSBhYnN4OworICAgIGRvdWJsZSB0OworCisgICAgaWYgKFB5X0lTX05BTih4KSkgeworICAgICAgICByZXR1cm4geCt4OworICAgIH0KKyAgICBhYnN4ID0gZmFicyh4KTsKKyAgICBpZiAoYWJzeCA+PSAxLikgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPj0gMSAqLworICAgICAgICBlcnJubyA9IEVET007CisjaWZkZWYgUHlfTkFOCisgICAgICAgIHJldHVybiBQeV9OQU47CisjZWxzZQorICAgICAgICByZXR1cm4geC96ZXJvOworI2VuZGlmCisgICAgfQorICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLworICAgICAgICByZXR1cm4geDsKKyAgICB9CisgICAgaWYgKGFic3ggPCAwLjUpIHsgICAgICAgICAgICAgICAgICAgLyogfHh8IDwgMC41ICovCisgICAgICAgIHQgPSBhYnN4K2Fic3g7CisgICAgICAgIHQgPSAwLjUgKiBtX2xvZzFwKHQgKyB0KmFic3ggLyAoMS4wIC0gYWJzeCkpOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwLjUgPD0gfHh8IDw9IDEuMCAqLworICAgICAgICB0ID0gMC41ICogbV9sb2cxcCgoYWJzeCArIGFic3gpIC8gKDEuMCAtIGFic3gpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHlzaWduKHQsIHgpOworfQorCisvKiBNYXRoZW1hdGljYWxseSwgZXhwbTEoeCkgPSBleHAoeCkgLSAxLiAgVGhlIGV4cG0xIGZ1bmN0aW9uIGlzIGRlc2lnbmVkCisgICB0byBhdm9pZCB0aGUgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24gdGhhdCBhcmlzZXMgZnJvbSBkaXJlY3QKKyAgIGV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gZXhwKHgpIC0gMSwgZm9yIHggbmVhciAwLiAqLworCitkb3VibGUKK19QeV9leHBtMShkb3VibGUgeCkKK3sKKyAgICAvKiBGb3IgYWJzKHgpID49IGxvZygyKSwgaXQncyBzYWZlIHRvIGV2YWx1YXRlIGV4cCh4KSAtIDEgZGlyZWN0bHk7IHRoaXMKKyAgICAgICBhbHNvIHdvcmtzIGZpbmUgZm9yIGluZmluaXRpZXMgYW5kIG5hbnMuCisKKyAgICAgICBGb3Igc21hbGxlciB4LCB3ZSBjYW4gdXNlIGEgbWV0aG9kIGR1ZSB0byBLYWhhbiB0aGF0IGFjaGlldmVzIGNsb3NlIHRvCisgICAgICAgZnVsbCBhY2N1cmFjeS4KKyAgICAqLworCisgICAgaWYgKGZhYnMoeCkgPCAwLjcpIHsKKyAgICAgICAgZG91YmxlIHU7CisgICAgICAgIHUgPSBleHAoeCk7CisgICAgICAgIGlmICh1ID09IDEuMCkKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gKHUgLSAxLjApICogeCAvIGxvZyh1KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZXhwKHgpIC0gMS4wOworfQorCisvKiBsb2cxcCh4KSA9IGxvZygxK3gpLiAgVGhlIGxvZzFwIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGF2b2lkIHRoZQorICAgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24gdGhhdCBhcmlzZXMgZnJvbSBkaXJlY3QgZXZhbHVhdGlvbiB3aGVuIHggaXMKKyAgIHNtYWxsLiAqLworCitkb3VibGUKK19QeV9sb2cxcChkb3VibGUgeCkKK3sKKyAgICAvKiBGb3IgeCBzbWFsbCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guICBMZXQgeSBiZSB0aGUgbmVhcmVzdCBmbG9hdAorICAgICAgIHRvIDEreCwgdGhlbgorCisgICAgICAgICAxK3ggPSB5ICogKDEgLSAoeS0xLXgpL3kpCisKKyAgICAgICBzbyBsb2coMSt4KSA9IGxvZyh5KSArIGxvZygxLSh5LTEteCkveSkuICBTaW5jZSAoeS0xLXgpL3kgaXMgdGlueSwgdGhlCisgICAgICAgc2Vjb25kIHRlcm0gaXMgd2VsbCBhcHByb3hpbWF0ZWQgYnkgKHktMS14KS95LiAgSWYgYWJzKHgpID49CisgICAgICAgREJMX0VQU0lMT04vMiBvciB0aGUgcm91bmRpbmctbW9kZSBpcyBzb21lIGZvcm0gb2Ygcm91bmQtdG8tbmVhcmVzdAorICAgICAgIHRoZW4geS0xLXggd2lsbCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUsIGFuZCBpcyBjb21wdXRlZCBleGFjdGx5IGJ5CisgICAgICAgKHktMSkteC4KKworICAgICAgIElmIGFicyh4KSA8IERCTF9FUFNJTE9OLzIgYW5kIHRoZSByb3VuZGluZyBtb2RlIGlzIG5vdCBrbm93biB0byBiZQorICAgICAgIHJvdW5kLXRvLW5lYXJlc3QgdGhlbiB0aGlzIG1ldGhvZCBpcyBzbGlnaHRseSBkYW5nZXJvdXM6IDEreCBjb3VsZCBiZQorICAgICAgIHJvdW5kZWQgdXAgdG8gMStEQkxfRVBTSUxPTiBpbnN0ZWFkIG9mIGRvd24gdG8gMSwgYW5kIGluIHRoYXQgY2FzZQorICAgICAgIHktMS14IHdpbGwgbm90IGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhbnkgbW9yZSBhbmQgdGhlIHJlc3VsdCBjYW4gYmUKKyAgICAgICBvZmYgYnkgbWFueSB1bHBzLiAgQnV0IHRoaXMgaXMgZWFzaWx5IGZpeGVkOiBmb3IgYSBmbG9hdGluZy1wb2ludAorICAgICAgIG51bWJlciB8eHwgPCBEQkxfRVBTSUxPTi8yLiwgdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvCisgICAgICAgbG9nKDEreCkgaXMgZXhhY3RseSB4LgorICAgICovCisKKyAgICBkb3VibGUgeTsKKyAgICBpZiAoZmFicyh4KSA8IERCTF9FUFNJTE9OLzIuKSB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKyAgICBlbHNlIGlmICgtMC41IDw9IHggJiYgeCA8PSAxLikgeworICAgICAgICAvKiBXQVJOSU5HOiBpdCdzIHBvc3NpYmxlIHRoYW4gYW4gb3ZlcmVhZ2VyIGNvbXBpbGVyCisgICAgICAgICAgIHdpbGwgaW5jb3JyZWN0bHkgb3B0aW1pemUgdGhlIGZvbGxvd2luZyB0d28gbGluZXMKKyAgICAgICAgICAgdG8gdGhlIGVxdWl2YWxlbnQgb2YgInJldHVybiBsb2coMS4reCkiLiBJZiB0aGlzCisgICAgICAgICAgIGhhcHBlbnMsIHRoZW4gcmVzdWx0cyBmcm9tIGxvZzFwIHdpbGwgYmUgaW5hY2N1cmF0ZQorICAgICAgICAgICBmb3Igc21hbGwgeC4gKi8KKyAgICAgICAgeSA9IDEuK3g7CisgICAgICAgIHJldHVybiBsb2coeSktKCh5LTEuKS14KS95OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogTmFOcyBhbmQgaW5maW5pdGllcyBzaG91bGQgZW5kIHVwIGhlcmUgKi8KKyAgICAgICAgcmV0dXJuIGxvZygxLit4KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tYXRoLmggYi9Nb2R1bGVzL19tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjZWVjZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX21hdGguaApAQCAtMCwwICsxLDQ1IEBACitkb3VibGUgX1B5X2Fjb3NoKGRvdWJsZSB4KTsKK2RvdWJsZSBfUHlfYXNpbmgoZG91YmxlIHgpOworZG91YmxlIF9QeV9hdGFuaChkb3VibGUgeCk7Citkb3VibGUgX1B5X2V4cG0xKGRvdWJsZSB4KTsKK2RvdWJsZSBfUHlfbG9nMXAoZG91YmxlIHgpOworCisjaWZkZWYgSEFWRV9BQ09TSAorI2RlZmluZSBtX2Fjb3NoIGFjb3NoCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgYWNvc2gsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fYWNvc2ggX1B5X2Fjb3NoCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVNJTkgKKyNkZWZpbmUgbV9hc2luaCBhc2luaAorI2Vsc2UKKy8qIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGFzaW5oLCB1c2UgdGhlIHN1YnN0aXR1dGUKKyAgIGZ1bmN0aW9uIGRlZmluZWQgaW4gTW9kdWxlcy9fbWF0aC5jLiAqLworI2RlZmluZSBtX2FzaW5oIF9QeV9hc2luaAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FUQU5ICisjZGVmaW5lIG1fYXRhbmggYXRhbmgKKyNlbHNlCisvKiBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhdGFuaCwgdXNlIHRoZSBzdWJzdGl0dXRlCisgICBmdW5jdGlvbiBkZWZpbmVkIGluIE1vZHVsZXMvX21hdGguYy4gKi8KKyNkZWZpbmUgbV9hdGFuaCBfUHlfYXRhbmgKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FWFBNMQorI2RlZmluZSBtX2V4cG0xIGV4cG0xCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwbTEsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fZXhwbTEgX1B5X2V4cG0xCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTE9HMVAKKyNkZWZpbmUgbV9sb2cxcCBsb2cxcAorI2Vsc2UKKy8qIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGxvZzFwLCB1c2UgdGhlIHN1YnN0aXR1dGUKKyAgIGZ1bmN0aW9uIGRlZmluZWQgaW4gTW9kdWxlcy9fbWF0aC5jLiAqLworI2RlZmluZSBtX2xvZzFwIF9QeV9sb2cxcAorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5oIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24uaAppbmRleCBmNmRiODUxLi4xZDk3YmQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5oCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLmgKQEAgLTEzMSw4ICsxMzEsMTIgQEAKIAogICAgIHJlcyA9IGNvbm5fc2VuZF9zdHJpbmcoc2VsZiwgYnVmZmVyICsgb2Zmc2V0LCBzaXplKTsKIAotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoUHlFeGNfSU9FcnJvciwgcmVzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoUHlFeGNfSU9FcnJvciwgcmVzKTsKKyAgICB9CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwppbmRleCBlNTkzOTUwLi45M2YxYzQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCkBAIC04LDYgKzgsMTIgQEAKIAogI2luY2x1ZGUgIm11bHRpcHJvY2Vzc2luZy5oIgogCisjaWZkZWYgU0NNX1JJR0hUUworICAgICNkZWZpbmUgSEFWRV9GRF9UUkFOU0ZFUiAxCisjZWxzZQorICAgICNkZWZpbmUgSEFWRV9GRF9UUkFOU0ZFUiAwCisjZW5kaWYKKwogUHlPYmplY3QgKmNyZWF0ZV93aW4zMl9uYW1lc3BhY2Uodm9pZCk7CiAKIFB5T2JqZWN0ICpwaWNrbGVfZHVtcHMsICpwaWNrbGVfbG9hZHMsICpwaWNrbGVfcHJvdG9jb2w7CkBAIC0xMTYsNyArMTIyLDcgQEAKICAgICBjbXNnLT5jbXNnX3R5cGUgPSBTQ01fUklHSFRTOwogICAgIGNtc2ctPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkpOwogICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IGNtc2ctPmNtc2dfbGVuOwotICAgICooaW50KilDTVNHX0RBVEEoY21zZykgPSBmZDsKKyAgICAqQ01TR19EQVRBKGNtc2cpID0gZmQ7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gc2VuZG1zZyhjb25uLCAmbXNnLCAwKTsKQEAgLTE1OSw3ICsxNjUsNyBAQAogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogCi0gICAgZmQgPSAqKGludCopQ01TR19EQVRBKGNtc2cpOworICAgIGZkID0gKkNNU0dfREFUQShjbXNnKTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIGZkKTsKIH0KIApAQCAtMjQ0LDEzICsyNTAsMjUgQEAKICAgICBQeV9JTkNSRUYoJkNvbm5lY3Rpb25UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobW9kdWxlLCAiQ29ubmVjdGlvbiIsIChQeU9iamVjdCopJkNvbm5lY3Rpb25UeXBlKTsKIAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgSEFWRV9TRU1fT1BFTgorI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoZGVmaW5lZChIQVZFX1NFTV9PUEVOKSAmJiAhZGVmaW5lZChQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVEKSkKICAgICAvKiBBZGQgU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNlbUxvY2tUeXBlKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBQeV9JTkNSRUYoJlNlbUxvY2tUeXBlKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhTZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlfQnVpbGRWYWx1ZSgiaSIsIFNFTV9WQUxVRV9NQVgpKTsKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpweV9zZW1fdmFsdWVfbWF4OworICAgICAgICAvKiBTb21lIHN5c3RlbXMgZGVmaW5lIFNFTV9WQUxVRV9NQVggYXMgYW4gdW5zaWduZWQgdmFsdWUgdGhhdAorICAgICAgICAgKiBjYXVzZXMgaXQgdG8gYmUgbmVnYXRpdmUgd2hlbiB1c2VkIGFzIGFuIGludCAoTmV0QlNEKS4gKi8KKyAgICAgICAgaWYgKChpbnQpKFNFTV9WQUxVRV9NQVgpIDwgMCkKKyAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXggPSBQeUxvbmdfRnJvbUxvbmcoSU5UX01BWCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHB5X3NlbV92YWx1ZV9tYXggPSBQeUxvbmdfRnJvbUxvbmcoU0VNX1ZBTFVFX01BWCk7CisgICAgICAgIGlmIChweV9zZW1fdmFsdWVfbWF4ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKFNlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCk7CisgICAgfQogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmU2VtTG9ja1R5cGUpOwogI2VuZGlmCiAKQEAgLTI5MSw3ICszMDksNyBAQAogICAgICAgICBQeV9ERUNSRUYodGVtcCk7IFB5X0RFQ1JFRih2YWx1ZSk7IHJldHVybjsgfSAgICAgICAgICAgICAgXAogICAgIFB5X0RFQ1JFRih2YWx1ZSkKIAotI2lmZGVmIEhBVkVfU0VNX09QRU4KKyNpZiBkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpCiAgICAgQUREX0ZMQUcoSEFWRV9TRU1fT1BFTik7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1NFTV9USU1FRFdBSVQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaCBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAppbmRleCA0ZjRmOWQ3Li4xNDQyNWRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCkBAIC0zLDYgKzMsMTIgQEAKIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKKyNpZmRlZiBfX3N1bgorLyogVGhlIGNvbnRyb2wgbWVzc2FnZSBBUEkgaXMgb25seSBhdmFpbGFibGUgb24gU29sYXJpcyAKKyAgIGlmIFhQRyA0LjIgb3IgbGF0ZXIgaXMgcmVxdWVzdGVkLiAqLworI2RlZmluZSBfWE9QRU5fU09VUkNFIDUwMAorI2VuZGlmCisKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJweXRocmVhZC5oIgpAQCAtMTUsNyArMjEsNyBAQAogIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KICMgIGluY2x1ZGUgPHdpbnNvY2syLmg+Ci0jICBpbmNsdWRlIDxwcm9jZXNzLmg+CQkgICAgIC8qIGdldHBpZCgpICovCisjICBpbmNsdWRlIDxwcm9jZXNzLmg+ICAgICAgICAgICAgICAgLyogZ2V0cGlkKCkgKi8KICMgIGlmZGVmIFB5X0RFQlVHCiAjICAgIGluY2x1ZGUgPGNydGRiZy5oPgogIyAgZW5kaWYKQEAgLTI3LDcgKzMzLDcgQEAKICMgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICMgIGluY2x1ZGUgPHN5cy91aW8uaD4KICMgIGluY2x1ZGUgPGFycGEvaW5ldC5oPiAgICAgICAgICAgICAvKiBodG9ubCgpIGFuZCBudG9obCgpICovCi0jICBpZiBIQVZFX1NFTV9PUEVOCisjICBpZiBkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpCiAjICAgIGluY2x1ZGUgPHNlbWFwaG9yZS5oPgogICAgICB0eXBlZGVmIHNlbV90ICpTRU1fSEFORExFOwogIyAgZW5kaWYKQEAgLTQ1LDEzICs1MSwxOCBAQAogICogSXNzdWUgMzExMCAtIFNvbGFyaXMgZG9lcyBub3QgZGVmaW5lIFNFTV9WQUxVRV9NQVgKICAqLwogI2lmbmRlZiBTRU1fVkFMVUVfTUFYCi0jICBpZmRlZiBfU0VNX1ZBTFVFX01BWAotIyAgICBkZWZpbmUgU0VNX1ZBTFVFX01BWCBfU0VNX1ZBTFVFX01BWAotIyAgZWxzZQotIyAgICBkZWZpbmUgU0VNX1ZBTFVFX01BWCBJTlRfTUFYCi0jICBlbmRpZgorICAgICNpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfU0VNX1ZBTFVFX01BWCkKKyAgICAgICAgIyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBzeXNjb25mKF9TQ19TRU1fVkFMVUVfTUFYKQorICAgICNlbGlmIGRlZmluZWQoX1NFTV9WQUxVRV9NQVgpCisgICAgICAgICMgZGVmaW5lIFNFTV9WQUxVRV9NQVggX1NFTV9WQUxVRV9NQVgKKyAgICAjZWxpZiBkZWZpbmVkKF9QT1NJWF9TRU1fVkFMVUVfTUFYKQorICAgICAgICAjIGRlZmluZSBTRU1fVkFMVUVfTUFYIF9QT1NJWF9TRU1fVkFMVUVfTUFYCisgICAgI2Vsc2UKKyAgICAgICAgIyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBJTlRfTUFYCisgICAgI2VuZGlmCiAjZW5kaWYKIAorCiAvKgogICogTWFrZSBzdXJlIFB5X3NzaXplX3QgYXZhaWxhYmxlCiAgKi8KQEAgLTE1NywxMSArMTY4LDExIEBACiAjZGVmaW5lIENPTk5FQ1RJT05fQlVGRkVSX1NJWkUgMTAyNAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JUHlPYmplY3RfSEVBRAotCUhBTkRMRSBoYW5kbGU7Ci0JaW50IGZsYWdzOwotCVB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKLQljaGFyIGJ1ZmZlcltDT05ORUNUSU9OX0JVRkZFUl9TSVpFXTsKKyAgICBQeU9iamVjdF9IRUFECisgICAgSEFORExFIGhhbmRsZTsKKyAgICBpbnQgZmxhZ3M7CisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OworICAgIGNoYXIgYnVmZmVyW0NPTk5FQ1RJT05fQlVGRkVSX1NJWkVdOwogfSBDb25uZWN0aW9uT2JqZWN0OwogCiAvKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3BpcGVfY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3BpcGVfY29ubmVjdGlvbi5jCmluZGV4IGVlNTgzNmYuLjA1ZGRlMGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9waXBlX2Nvbm5lY3Rpb24uYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvcGlwZV9jb25uZWN0aW9uLmMKQEAgLTIzLDYgKzIzLDEyIEBACiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJldCA9IFdyaXRlRmlsZShjb25uLT5oYW5kbGUsIHN0cmluZywgbGVuZ3RoLCAmYW1vdW50X3dyaXR0ZW4sIE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0ID09IDAgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfTk9fU1lTVEVNX1JFU09VUkNFUykgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkNhbm5ub3Qgc2VuZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIGJ5dGVzIG92ZXIgY29ubmVjdGlvbiIsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBNUF9TVEFOREFSRF9FUlJPUjsKKyAgICB9CisKICAgICByZXR1cm4gcmV0ID8gTVBfU1VDQ0VTUyA6IE1QX1NUQU5EQVJEX0VSUk9SOwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKaW5kZXggMjYxZTY3Yy4uNWJkYTFjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwpAQCAtMTk3LDExICsxOTcsMTEgQEAKICNkZWZpbmUgU0VNX0dFVFZBTFVFKHNlbSwgcHZhbCkgc2VtX2dldHZhbHVlKHNlbSwgcHZhbCkKICNkZWZpbmUgU0VNX1VOTElOSyhuYW1lKSBzZW1fdW5saW5rKG5hbWUpCiAKLSNpZiBIQVZFX0JST0tFTl9TRU1fVU5MSU5LCisjaWZuZGVmIEhBVkVfU0VNX1VOTElOSwogIyAgZGVmaW5lIHNlbV91bmxpbmsobmFtZSkgMAogI2VuZGlmCiAKLSNpZiAhSEFWRV9TRU1fVElNRURXQUlUCisjaWZuZGVmIEhBVkVfU0VNX1RJTUVEV0FJVAogIyAgZGVmaW5lIHNlbV90aW1lZHdhaXQoc2VtLGRlYWRsaW5lKSBzZW1fdGltZWR3YWl0X3NhdmUoc2VtLGRlYWRsaW5lLF9zYXZlKQogCiBpbnQKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICB9CiAgICAgICAgIGFzc2VydChzZWxmLT5jb3VudCA9PSAxKTsKICAgICB9IGVsc2UgewotI2lmIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRQorI2lmZGVmIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRQogICAgICAgICAvKiBXZSB3aWxsIG9ubHkgY2hlY2sgcHJvcGVybHkgdGhlIG1heHZhbHVlID09IDEgY2FzZSAqLwogICAgICAgICBpZiAoc2VsZi0+bWF4dmFsdWUgPT0gMSkgewogICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoYXQgYWxyZWFkeSBsb2NrZWQgKi8KQEAgLTQzMyw3ICs0MzMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIvbXAlZC0lZCIsIGdldHBpZCgpLCBjb3VudGVyKyspOworICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi9tcCVsZC0lZCIsIChsb25nKWdldHBpZCgpLCBjb3VudGVyKyspOwogCiAgICAgU0VNX0NMRUFSX0VSUk9SKCk7CiAgICAgaGFuZGxlID0gU0VNX0NSRUFURShidWZmZXIsIHZhbHVlLCBtYXh2YWx1ZSk7CkBAIC00OTQsNyArNDk0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZW1sb2NrX2dldHZhbHVlKFNlbUxvY2tPYmplY3QgKnNlbGYpCiB7Ci0jaWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCisjaWZkZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCiAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKTsKICAgICByZXR1cm4gTlVMTDsKICNlbHNlCkBAIC01MTIsNyArNTEyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZW1sb2NrX2lzemVybyhTZW1Mb2NrT2JqZWN0ICpzZWxmKQogewotI2lmIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRQorI2lmZGVmIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRQogICAgIGlmIChzZW1fdHJ5d2FpdChzZWxmLT5oYW5kbGUpIDwgMCkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQogICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCmluZGV4IDJkODFkYWYuLjA4YzIyNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCkBAIC02LDcgKzYsNyBAQAogCiAgICBJdCB3YXMgbW9kaWZpZWQgaW4gMjAwMiBieSBSYXltb25kIEhldHRpbmdlciBhcyBmb2xsb3dzOgogCi0gICAgKiB0aGUgcHJpbmNpcGFsIGNvbXB1dGF0aW9uYWwgbGluZXMgdW50b3VjaGVkIGV4Y2VwdCBmb3IgdGFiYmluZy4KKyAgICAqIHRoZSBwcmluY2lwYWwgY29tcHV0YXRpb25hbCBsaW5lcyB1bnRvdWNoZWQuCiAKICAgICAqIHJlbmFtZWQgZ2VucmFuZF9yZXM1MygpIHRvIHJhbmRvbV9yYW5kb20oKSBhbmQgd3JhcHBlZAogICAgICAgaW4gcHl0aG9uIGNhbGxpbmcvcmV0dXJuIGNvZGUuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCmluZGV4IDg1MTE4ZmMuLjA2NTMzNjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogY2FjaGUgLmMgLSBhIExSVSBjYWNoZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKKyNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuaCBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5oCmluZGV4IGQ2ZjdmMTMuLmIwOTUxN2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogY2FjaGUuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgTFJVIGNhY2hlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCmluZGV4IDdlZTExYTkuLjc2NjY1ODAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNvbm5lY3Rpb24uYyAtIHRoZSBjb25uZWN0aW9uIHR5cGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKiAKQEAgLTM1LDcgKzM1LDE0IEBACiAjZGVmaW5lIEFDVElPTl9GSU5BTElaRSAxCiAjZGVmaW5lIEFDVElPTl9SRVNFVCAyCiAKKyNpZiBTUUxJVEVfVkVSU0lPTl9OVU1CRVIgPj0gMzAwMzAwOAorI2lmbmRlZiBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorI2RlZmluZSBIQVZFX0xPQURfRVhURU5TSU9OCisjZW5kaWYKKyNlbmRpZgorCiBzdGF0aWMgaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2lzb2xhdGlvbl9sZXZlbChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsKTsKK3N0YXRpYyB2b2lkIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9jdXJzb3JfcmVmZXJlbmNlcyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKTsKIAogCiBzdGF0aWMgdm9pZCBfc3FsaXRlM19yZXN1bHRfZXJyb3Ioc3FsaXRlM19jb250ZXh0KiBjdHgsIGNvbnN0IGNoYXIqIGVycm1zZywgaW50IGxlbikKQEAgLTczLDEwICs4MCwxMyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+aW5pdGlhbGl6ZWQgPSAxOworCiAgICAgc2VsZi0+YmVnaW5fc3RhdGVtZW50ID0gTlVMTDsKIAogICAgIHNlbGYtPnN0YXRlbWVudF9jYWNoZSA9IE5VTEw7CiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IE5VTEw7CisgICAgc2VsZi0+Y3Vyc29ycyA9IE5VTEw7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgc2VsZi0+cm93X2ZhY3RvcnkgPSBQeV9Ob25lOwpAQCAtMTUwLDExICsxNjAsMTUgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmNyZWF0ZWRfc3RhdGVtZW50cyA9IDA7CisgICAgc2VsZi0+Y3JlYXRlZF9jdXJzb3JzID0gMDsKKworICAgIC8qIENyZWF0ZSBsaXN0cyBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cy9jdXJzb3JzICovCiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnRzKSB7CisgICAgc2VsZi0+Y3Vyc29ycyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnRzIHx8ICFzZWxmLT5jdXJzb3JzKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2VsZi0+Y3JlYXRlZF9zdGF0ZW1lbnRzID0gMDsKIAogICAgIC8qIEJ5IGRlZmF1bHQsIHRoZSBDYWNoZSBjbGFzcyBJTkNSRUZzIHRoZSBmYWN0b3J5IGluIGl0cyBpbml0aWFsaXplciwgYW5kCiAgICAgICogZGVjcmVmcyBpdCBpbiBpdHMgZGVhbGxvY2F0b3IgbWV0aG9kLiBTaW5jZSB0aGlzIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyCkBAIC0yMTgsMTEgKzIzMiwxMiBAQAogfQogCiAvKiBhY3Rpb24gaW4gKEFDVElPTl9SRVNFVCwgQUNUSU9OX0ZJTkFMSVpFKSAqLwotdm9pZCBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBpbnQgYWN0aW9uKQordm9pZCBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBpbnQgYWN0aW9uLCBpbnQgcmVzZXRfY3Vyc29ycykKIHsKICAgICBpbnQgaTsKICAgICBQeU9iamVjdCogd2Vha3JlZjsKICAgICBQeU9iamVjdCogc3RhdGVtZW50OworICAgIHB5c3FsaXRlX0N1cnNvciogY3Vyc29yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPnN0YXRlbWVudHMpOyBpKyspIHsKICAgICAgICAgd2Vha3JlZiA9IFB5TGlzdF9HZXRJdGVtKHNlbGYtPnN0YXRlbWVudHMsIGkpOwpAQCAtMjM1LDYgKzI1MCwxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKHJlc2V0X2N1cnNvcnMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPmN1cnNvcnMpOyBpKyspIHsKKyAgICAgICAgICAgIHdlYWtyZWYgPSBQeUxpc3RfR2V0SXRlbShzZWxmLT5jdXJzb3JzLCBpKTsKKyAgICAgICAgICAgIGN1cnNvciA9IChweXNxbGl0ZV9DdXJzb3IqKVB5V2Vha3JlZl9HZXRPYmplY3Qod2Vha3JlZik7CisgICAgICAgICAgICBpZiAoKFB5T2JqZWN0KiljdXJzb3IgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgICAgIGN1cnNvci0+cmVzZXQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZGVhbGxvYyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKQpAQCAtMjYzLDE3ICsyODgsNDMgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPnRleHRfZmFjdG9yeSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jb2xsYXRpb25zKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnN0YXRlbWVudHMpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3Vyc29ycyk7CiAKICAgICBzZWxmLT5vYl90eXBlLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7CiB9CiAKKy8qCisgKiBSZWdpc3RlcnMgYSBjdXJzb3Igd2l0aCB0aGUgY29ubmVjdGlvbi4KKyAqCisgKiAwID0+IGVycm9yOyAxID0+IG9rCisgKi8KK2ludCBweXNxbGl0ZV9jb25uZWN0aW9uX3JlZ2lzdGVyX2N1cnNvcihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb25uZWN0aW9uLCBQeU9iamVjdCogY3Vyc29yKQoreworICAgIFB5T2JqZWN0KiB3ZWFrcmVmOworCisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KiljdXJzb3IsIE5VTEwpOworICAgIGlmICghd2Vha3JlZikgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbm5lY3Rpb24tPmN1cnNvcnMsIHdlYWtyZWYpICE9IDApIHsKKyAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgUHlfREVDUkVGKHdlYWtyZWYpOworCisgICAgcmV0dXJuIDE7CitlcnJvcjoKKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fY3Vyc29yKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmFjdG9yeSIsIE5VTEwsIE5VTEx9OwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBQeU9iamVjdCogY3Vyc29yOwogCi0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yODksNiArMzQwLDggQEAKIAogICAgIGN1cnNvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmYWN0b3J5LCAiTyIsIHNlbGYpOwogCisgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHNlbGYpOworCiAgICAgaWYgKGN1cnNvciAmJiBzZWxmLT5yb3dfZmFjdG9yeSAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X1hERUNSRUYoKChweXNxbGl0ZV9DdXJzb3IqKWN1cnNvciktPnJvd19mYWN0b3J5KTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnJvd19mYWN0b3J5KTsKQEAgLTMwNyw3ICszNjAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fRklOQUxJWkUpOworICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9GSU5BTElaRSwgMSk7CiAKICAgICBpZiAoc2VsZi0+ZGIpIHsKICAgICAgICAgaWYgKHNlbGYtPmFwc3dfY29ubmVjdGlvbikgewpAQCAtMzQxLDYgKzM5NCwxMSBAQAogICovCiBpbnQgcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb24pCiB7CisgICAgaWYgKCFjb24tPmluaXRpYWxpemVkKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiQmFzZSBDb25uZWN0aW9uLl9faW5pdF9fIG5vdCBjYWxsZWQuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGlmICghY29uLT5kYikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIkNhbm5vdCBvcGVyYXRlIG9uIGEgY2xvc2VkIGRhdGFiYXNlLiIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTM5OSw2ICs0NTcsOCBAQAogICAgIH0KIAogICAgIGlmIChzZWxmLT5pblRyYW5zYWN0aW9uKSB7CisgICAgICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9SRVNFVCwgMCk7CisKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICByYyA9IHNxbGl0ZTNfcHJlcGFyZShzZWxmLT5kYiwgIkNPTU1JVCIsIC0xLCAmc3RhdGVtZW50LCAmdGFpbCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC00NDMsNyArNTAzLDcgQEAKICAgICB9CiAKICAgICBpZiAoc2VsZi0+aW5UcmFuc2FjdGlvbikgewotICAgICAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fUkVTRVQpOworICAgICAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fUkVTRVQsIDEpOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcmMgPSBzcWxpdGUzX3ByZXBhcmUoc2VsZi0+ZGIsICJST0xMQkFDSyIsIC0xLCAmc3RhdGVtZW50LCAmdGFpbCk7CkBAIC02ODUsNyArNzQ1LDYgQEAKIHsKICAgICBQeU9iamVjdCogZnVuY3Rpb25fcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCoqIGFnZ3JlZ2F0ZV9pbnN0YW5jZTsKLSAgICBQeU9iamVjdCogYWdncmVnYXRlX2NsYXNzOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUdJTFN0YXRlX1NUQVRFIHRocmVhZHN0YXRlOwpAQCAtNjkzLDggKzc1Miw2IEBACiAgICAgdGhyZWFkc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCiAKLSAgICBhZ2dyZWdhdGVfY2xhc3MgPSAoUHlPYmplY3QqKXNxbGl0ZTNfdXNlcl9kYXRhKGNvbnRleHQpOwotCiAgICAgYWdncmVnYXRlX2luc3RhbmNlID0gKFB5T2JqZWN0Kiopc3FsaXRlM19hZ2dyZWdhdGVfY29udGV4dChjb250ZXh0LCBzaXplb2YoUHlPYmplY3QqKSk7CiAgICAgaWYgKCEqYWdncmVnYXRlX2luc3RhbmNlKSB7CiAgICAgICAgIC8qIHRoaXMgYnJhbmNoIGlzIGV4ZWN1dGVkIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24gaW4gdGhlIGFnZ3JlZ2F0ZSdzCkBAIC03MjQsNyArNzgxLDcgQEAKICNlbmRpZgogfQogCi12b2lkIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9zdGF0ZW1lbnRfcmVmZXJlbmNlcyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKQorc3RhdGljIHZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCiB7CiAgICAgUHlPYmplY3QqIG5ld19saXN0OwogICAgIFB5T2JqZWN0KiB3ZWFrcmVmOwpAQCAtNzU2LDYgKzgxMywzOCBAQAogICAgIHNlbGYtPnN0YXRlbWVudHMgPSBuZXdfbGlzdDsKIH0KIAorc3RhdGljIHZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCit7CisgICAgUHlPYmplY3QqIG5ld19saXN0OworICAgIFB5T2JqZWN0KiB3ZWFrcmVmOworICAgIGludCBpOworCisgICAgLyogd2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgb25jZSBpbiBhIHdoaWxlICovCisgICAgaWYgKHNlbGYtPmNyZWF0ZWRfY3Vyc29ycysrIDwgMjAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZWxmLT5jcmVhdGVkX2N1cnNvcnMgPSAwOworCisgICAgbmV3X2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmICghbmV3X2xpc3QpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfU2l6ZShzZWxmLT5jdXJzb3JzKTsgaSsrKSB7CisgICAgICAgIHdlYWtyZWYgPSBQeUxpc3RfR2V0SXRlbShzZWxmLT5jdXJzb3JzLCBpKTsKKyAgICAgICAgaWYgKFB5V2Vha3JlZl9HZXRPYmplY3Qod2Vha3JlZikgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobmV3X2xpc3QsIHdlYWtyZWYpICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmV3X2xpc3QpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFB5X0RFQ1JFRihzZWxmLT5jdXJzb3JzKTsKKyAgICBzZWxmLT5jdXJzb3JzID0gbmV3X2xpc3Q7Cit9CisKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2NyZWF0ZV9mdW5jdGlvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im5hbWUiLCAibmFyZyIsICJmdW5jIiwgTlVMTCwgTlVMTH07CkBAIC03ODIsNyArODcxLDggQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBjcmVhdGluZyBmdW5jdGlvbiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgZnVuYywgUHlfTm9uZSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgZnVuYywgUHlfTm9uZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwpAQCAtODEzLDcgKzkwMyw4IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9PcGVyYXRpb25hbEVycm9yLCAiRXJyb3IgY3JlYXRpbmcgYWdncmVnYXRlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBhZ2dyZWdhdGVfY2xhc3MsIFB5X05vbmUpOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGFnZ3JlZ2F0ZV9jbGFzcywgUHlfTm9uZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwpAQCAtODg1LDcgKzk3Niw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCi1QeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfYXV0aG9yaXplcihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3N0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfYXV0aG9yaXplcihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBQeU9iamVjdCogYXV0aG9yaXplcl9jYjsKIApAQCAtOTA3LDE0ICs5OTgsMTUgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBzZXR0aW5nIGF1dGhvcml6ZXIgY2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGF1dGhvcml6ZXJfY2IsIFB5X05vbmUpOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGF1dGhvcml6ZXJfY2IsIFB5X05vbmUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CiB9CiAKLVB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9wcm9ncmVzc19oYW5kbGVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorc3RhdGljIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9wcm9ncmVzc19oYW5kbGVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIFB5T2JqZWN0KiBwcm9ncmVzc19oYW5kbGVyOwogICAgIGludCBuOwpAQCAtOTM1LDEzICsxMDI3LDY0IEBACiAgICAgICAgIHNxbGl0ZTNfcHJvZ3Jlc3NfaGFuZGxlcihzZWxmLT5kYiwgMCwgMCwgKHZvaWQqKTApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNxbGl0ZTNfcHJvZ3Jlc3NfaGFuZGxlcihzZWxmLT5kYiwgbiwgX3Byb2dyZXNzX2hhbmRsZXIsIHByb2dyZXNzX2hhbmRsZXIpOwotICAgICAgICBQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgcHJvZ3Jlc3NfaGFuZGxlciwgUHlfTm9uZSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgcHJvZ3Jlc3NfaGFuZGxlciwgUHlfTm9uZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKKyNpZmRlZiBIQVZFX0xPQURfRVhURU5TSU9OCitzdGF0aWMgUHlPYmplY3QqIHB5c3FsaXRlX2VuYWJsZV9sb2FkX2V4dGVuc2lvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgcmM7CisgICAgaW50IG9ub2ZmOworCisgICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiwgJm9ub2ZmKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByYyA9IHNxbGl0ZTNfZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKHNlbGYtPmRiLCBvbm9mZik7CisKKyAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9PcGVyYXRpb25hbEVycm9yLCAiRXJyb3IgZW5hYmxpbmcgbG9hZCBleHRlbnNpb24iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfbG9hZF9leHRlbnNpb24ocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit7CisgICAgaW50IHJjOworICAgIGNoYXIqIGV4dGVuc2lvbl9uYW1lOworICAgIGNoYXIqIGVycm1zZzsKKworICAgIGlmICghcHlzcWxpdGVfY2hlY2tfdGhyZWFkKHNlbGYpIHx8ICFweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKHNlbGYpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZleHRlbnNpb25fbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmMgPSBzcWxpdGUzX2xvYWRfZXh0ZW5zaW9uKHNlbGYtPmRiLCBleHRlbnNpb25fbmFtZSwgMCwgJmVycm1zZyk7CisgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsIGVycm1zZyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorfQorI2VuZGlmCisKIGludCBweXNxbGl0ZV9jaGVja190aHJlYWQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZikKIHsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMTMzNSw5ICsxNDc4LDExIEBACiAgICAgfQogCiAgICAgaWYgKGNhbGxhYmxlICE9IFB5X05vbmUpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+Y29sbGF0aW9ucywgdXBwZXJjYXNlX25hbWUsIGNhbGxhYmxlKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHNlbGYtPmNvbGxhdGlvbnMsIHVwcGVyY2FzZV9uYW1lLCBjYWxsYWJsZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlEaWN0X0RlbEl0ZW0oc2VsZi0+Y29sbGF0aW9ucywgdXBwZXJjYXNlX25hbWUpOworICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW0oc2VsZi0+Y29sbGF0aW9ucywgdXBwZXJjYXNlX25hbWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAogICAgIHJjID0gc3FsaXRlM19jcmVhdGVfY29sbGF0aW9uKHNlbGYtPmRiLApAQCAtMTQyNiw2ICsxNTcxLDEyIEBACiAgICAgICAgIFB5RG9jX1NUUigiQ3JlYXRlcyBhIG5ldyBhZ2dyZWdhdGUuIE5vbi1zdGFuZGFyZC4iKX0sCiAgICAgeyJzZXRfYXV0aG9yaXplciIsIChQeUNGdW5jdGlvbilweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9hdXRob3JpemVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgUHlEb2NfU1RSKCJTZXRzIGF1dGhvcml6ZXIgY2FsbGJhY2suIE5vbi1zdGFuZGFyZC4iKX0sCisgICAgI2lmZGVmIEhBVkVfTE9BRF9FWFRFTlNJT04KKyAgICB7ImVuYWJsZV9sb2FkX2V4dGVuc2lvbiIsIChQeUNGdW5jdGlvbilweXNxbGl0ZV9lbmFibGVfbG9hZF9leHRlbnNpb24sIE1FVEhfVkFSQVJHUywKKyAgICAgICAgUHlEb2NfU1RSKCJFbmFibGUgZHluYW1pYyBsb2FkaW5nIG9mIFNRTGl0ZSBleHRlbnNpb24gbW9kdWxlcy4gTm9uLXN0YW5kYXJkLiIpfSwKKyAgICB7ImxvYWRfZXh0ZW5zaW9uIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2xvYWRfZXh0ZW5zaW9uLCBNRVRIX1ZBUkFSR1MsCisgICAgICAgIFB5RG9jX1NUUigiTG9hZCBTUUxpdGUgZXh0ZW5zaW9uIG1vZHVsZS4gTm9uLXN0YW5kYXJkLiIpfSwKKyAgICAjZW5kaWYKICAgICB7InNldF9wcm9ncmVzc19oYW5kbGVyIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X3Byb2dyZXNzX2hhbmRsZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBQeURvY19TVFIoIlNldHMgcHJvZ3Jlc3MgaGFuZGxlciBjYWxsYmFjay4gTm9uLXN0YW5kYXJkLiIpfSwKICAgICB7ImV4ZWN1dGUiLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlLCBNRVRIX1ZBUkFSR1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uaAppbmRleCAzYjFjNjMyLi4zZmM1YTcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjb25uZWN0aW9uLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIGNvbm5lY3Rpb24gdHlwZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC02MywxNyArNjMsMjEgQEAKICAgICAgKiB1c2VkIGZyb20gdGhlIHNhbWUgdGhyZWFkIGl0IHdhcyBjcmVhdGVkIGluICovCiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkOwogCisgICAgaW50IGluaXRpYWxpemVkOworCiAgICAgLyogdGhyZWFkIGlkZW50aWZpY2F0aW9uIG9mIHRoZSB0aHJlYWQgdGhlIGNvbm5lY3Rpb24gd2FzIGNyZWF0ZWQgaW4gKi8KICAgICBsb25nIHRocmVhZF9pZGVudDsKIAogICAgIHB5c3FsaXRlX0NhY2hlKiBzdGF0ZW1lbnRfY2FjaGU7CiAKLSAgICAvKiBBIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHN0YXRlbWVudHMgdXNlZCB3aXRoaW4gdGhpcyBjb25uZWN0aW9uICovCisgICAgLyogTGlzdHMgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHN0YXRlbWVudHMgYW5kIGN1cnNvcnMgdXNlZCB3aXRoaW4gdGhpcyBjb25uZWN0aW9uICovCiAgICAgUHlPYmplY3QqIHN0YXRlbWVudHM7CisgICAgUHlPYmplY3QqIGN1cnNvcnM7CiAKLSAgICAvKiBhIGNvdW50ZXIgZm9yIGhvdyBtYW55IHN0YXRlbWVudHMgd2VyZSBjcmVhdGVkIGluIHRoZSBjb25uZWN0aW9uLiBNYXkgYmUKKyAgICAvKiBDb3VudGVycyBmb3IgaG93IG1hbnkgc3RhdGVtZW50cy9jdXJzb3JzIHdlcmUgY3JlYXRlZCBpbiB0aGUgY29ubmVjdGlvbi4gTWF5IGJlCiAgICAgICogcmVzZXQgdG8gMCBhdCBjZXJ0YWluIGludGVydmFscyAqLwogICAgIGludCBjcmVhdGVkX3N0YXRlbWVudHM7CisgICAgaW50IGNyZWF0ZWRfY3Vyc29yczsKIAogICAgIFB5T2JqZWN0KiByb3dfZmFjdG9yeTsKIApAQCAtMTI1LDYgKzEyOSw3IEBACiBQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9uZXcoUHlUeXBlT2JqZWN0KiB0eXBlLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KTsKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpOwogCitpbnQgcHlzcWxpdGVfY29ubmVjdGlvbl9yZWdpc3Rlcl9jdXJzb3IocHlzcWxpdGVfQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgUHlPYmplY3QqIGN1cnNvcik7CiBpbnQgcHlzcWxpdGVfY2hlY2tfdGhyZWFkKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpOwogaW50IHB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24ocHlzcWxpdGVfQ29ubmVjdGlvbiogY29uKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCmluZGV4IDY1NzJhNTUuLjI2ZTMzMDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjdXJzb3IuYyAtIHRoZSBjdXJzb3IgdHlwZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0zNiw2ICszNiw4IEBACiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfaXRlcm5leHQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKTsKIAorc3RhdGljIGNoYXIqIGVycm1zZ19mZXRjaF9hY3Jvc3Nfcm9sbGJhY2sgPSAiQ3Vyc29yIG5lZWRlZCB0byBiZSByZXNldCBiZWNhdXNlIG9mIGNvbW1pdC9yb2xsYmFjayBhbmQgY2FuIG5vIGxvbmdlciBiZSBmZXRjaGVkIGZyb20uIjsKKwogc3RhdGljIHB5c3FsaXRlX1N0YXRlbWVudEtpbmQgZGV0ZWN0X3N0YXRlbWVudF90eXBlKGNoYXIqIHN0YXRlbWVudCkKIHsKICAgICBjaGFyIGJ1ZlsyMF07CkBAIC03NCw3ICs3Niw3IEBACiAgICAgfQogfQogCi1pbnQgcHlzcWxpdGVfY3Vyc29yX2luaXQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3N0YXRpYyBpbnQgcHlzcWxpdGVfY3Vyc29yX2luaXQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBweXNxbGl0ZV9Db25uZWN0aW9uKiBjb25uZWN0aW9uOwogCkBAIC04Nyw2ICs4OSw3IEBACiAgICAgc2VsZi0+Y29ubmVjdGlvbiA9IGNvbm5lY3Rpb247CiAgICAgc2VsZi0+c3RhdGVtZW50ID0gTlVMTDsKICAgICBzZWxmLT5uZXh0X3JvdyA9IE5VTEw7CisgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgc2VsZi0+cm93X2Nhc3RfbWFwID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIXNlbGYtPnJvd19jYXN0X21hcCkgewpAQCAtMTAwLDYgKzEwMyw4IEBACiAgICAgc2VsZi0+bGFzdHJvd2lkPSBQeV9Ob25lOwogCiAgICAgc2VsZi0+YXJyYXlzaXplID0gMTsKKyAgICBzZWxmLT5jbG9zZWQgPSAwOworICAgIHNlbGYtPnJlc2V0ID0gMDsKIAogICAgIHNlbGYtPnJvd2NvdW50ID0gLTFMOwogCkBAIC0xMTAsMTAgKzExNSwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgaWYgKCFweXNxbGl0ZV9jb25uZWN0aW9uX3JlZ2lzdGVyX2N1cnNvcihjb25uZWN0aW9uLCAoUHlPYmplY3QqKXNlbGYpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzZWxmLT5pbml0aWFsaXplZCA9IDE7CisKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBweXNxbGl0ZV9jdXJzb3JfZGVhbGxvYyhweXNxbGl0ZV9DdXJzb3IqIHNlbGYpCitzdGF0aWMgdm9pZCBweXNxbGl0ZV9jdXJzb3JfZGVhbGxvYyhweXNxbGl0ZV9DdXJzb3IqIHNlbGYpCiB7CiAgICAgaW50IHJjOwogCkBAIC0xMzAsNyArMTQxLDExIEBACiAgICAgUHlfWERFQ1JFRihzZWxmLT5yb3dfZmFjdG9yeSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5uZXh0X3Jvdyk7CiAKLSAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7CisgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QqKXNlbGYpOworICAgIH0KKworICAgIHNlbGYtPm9iX3R5cGUtPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKIH0KIAogUHlPYmplY3QqIF9weXNxbGl0ZV9nZXRfY29udmVydGVyKFB5T2JqZWN0KiBrZXkpCkBAIC0zMDEsNiArMzE2LDExIEBACiAgICAgY2hhciBidWZbMjAwXTsKICAgICBjb25zdCBjaGFyKiBjb2xuYW1lOwogCisgICAgaWYgKHNlbGYtPnJlc2V0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9JbnRlcmZhY2VFcnJvciwgZXJybXNnX2ZldGNoX2Fjcm9zc19yb2xsYmFjayk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBudW1jb2xzID0gc3FsaXRlM19kYXRhX2NvdW50KHNlbGYtPnN0YXRlbWVudC0+c3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC00MDYsNiArNDI2LDI2IEBACiAgICAgcmV0dXJuIHJvdzsKIH0KIAorLyoKKyAqIENoZWNrcyBpZiBhIGN1cnNvciBvYmplY3QgaXMgdXNhYmxlLgorICoKKyAqIDAgPT4gZXJyb3I7IDEgPT4gb2sKKyAqLworc3RhdGljIGludCBjaGVja19jdXJzb3IocHlzcWxpdGVfQ3Vyc29yKiBjdXIpCit7CisgICAgaWYgKCFjdXItPmluaXRpYWxpemVkKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiQmFzZSBDdXJzb3IuX19pbml0X18gbm90IGNhbGxlZC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKGN1ci0+Y2xvc2VkKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiQ2Fubm90IG9wZXJhdGUgb24gYSBjbG9zZWQgY3Vyc29yLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gcHlzcWxpdGVfY2hlY2tfdGhyZWFkKGN1ci0+Y29ubmVjdGlvbikgJiYgcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihjdXItPmNvbm5lY3Rpb24pOworICAgIH0KK30KKwogUHlPYmplY3QqIF9weXNxbGl0ZV9xdWVyeV9leGVjdXRlKHB5c3FsaXRlX0N1cnNvciogc2VsZiwgaW50IG11bHRpcGxlLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogb3BlcmF0aW9uOwpAQCAtNDI1LDEzICs0NjUsMTUgQEAKICAgICBQeU9iamVjdCogc2Vjb25kX2FyZ3VtZW50ID0gTlVMTDsKICAgICBpbnQgYWxsb3dfOGJpdF9jaGFyczsKIAotICAgIGlmICghcHlzcWxpdGVfY2hlY2tfdGhyZWFkKHNlbGYtPmNvbm5lY3Rpb24pIHx8ICFweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKHNlbGYtPmNvbm5lY3Rpb24pKSB7CisgICAgaWYgKCFjaGVja19jdXJzb3Ioc2VsZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgc2VsZi0+cmVzZXQgPSAwOworCiAgICAgLyogTWFrZSBzaG9vdGluZyB5b3Vyc2VsZiBpbiB0aGUgZm9vdCB3aXRoIG5vdCB1dGYtOCBkZWNvZGFibGUgOC1iaXQtc3RyaW5ncyBoYXJkZXIgKi8KICAgICBhbGxvd184Yml0X2NoYXJzID0gKChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgIT0gKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpICYmCi0gICAgICAgIChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgIT0gKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUgJiYgcHlzcWxpdGVfT3B0aW1pemVkVW5pY29kZSkpOworICAgICAgICAoc2VsZi0+Y29ubmVjdGlvbi0+dGV4dF9mYWN0b3J5ICE9IHB5c3FsaXRlX09wdGltaXplZFVuaWNvZGUpKTsKIAogICAgIFB5X1hERUNSRUYoc2VsZi0+bmV4dF9yb3cpOwogICAgIHNlbGYtPm5leHRfcm93ID0gTlVMTDsKQEAgLTc1MywxNiArNzk1LDE3IEBACiAgICAgc3FsaXRlM19zdG10KiBzdGF0ZW1lbnQ7CiAgICAgaW50IHJjOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7Ci0gICAgaW50IHN0YXRlbWVudF9jb21wbGV0ZWQgPSAwOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNjcmlwdF9vYmopKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghcHlzcWxpdGVfY2hlY2tfdGhyZWFkKHNlbGYtPmNvbm5lY3Rpb24pIHx8ICFweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKHNlbGYtPmNvbm5lY3Rpb24pKSB7CisgICAgaWYgKCFjaGVja19jdXJzb3Ioc2VsZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgc2VsZi0+cmVzZXQgPSAwOworCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHNjcmlwdF9vYmopKSB7CiAgICAgICAgIHNjcmlwdF9jc3RyID0gUHlTdHJpbmdfQXNTdHJpbmcoc2NyaXB0X29iaik7CiAgICAgfSBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soc2NyaXB0X29iaikpIHsKQEAgLTc4NSwxMSArODI4LDYgQEAKICAgICBQeV9ERUNSRUYocmVzdWx0KTsKIAogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmICghc3FsaXRlM19jb21wbGV0ZShzY3JpcHRfY3N0cikpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudF9jb21wbGV0ZWQgPSAxOwotCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcmMgPSBzcWxpdGUzX3ByZXBhcmUoc2VsZi0+Y29ubmVjdGlvbi0+ZGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9jc3RyLApAQCAtODIwLDE1ICs4NTgsMTUgQEAKICAgICAgICAgICAgIF9weXNxbGl0ZV9zZXRlcnJvcihzZWxmLT5jb25uZWN0aW9uLT5kYiwgTlVMTCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCpzY3JpcHRfY3N0ciA9PSAoY2hhcikwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogZXJyb3I6CiAgICAgUHlfWERFQ1JFRihzY3JpcHRfc3RyKTsKIAotICAgIGlmICghc3RhdGVtZW50X2NvbXBsZXRlZCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgInlvdSBkaWQgbm90IHByb3ZpZGUgYSBjb21wbGV0ZSBTUUwgc3RhdGVtZW50Iik7Ci0gICAgfQotCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKQEAgLTg0OSw3ICs4ODcsMTIgQEAKICAgICBQeU9iamVjdCogbmV4dF9yb3c7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZi0+Y29ubmVjdGlvbikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZi0+Y29ubmVjdGlvbikpIHsKKyAgICBpZiAoIWNoZWNrX2N1cnNvcihzZWxmKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+cmVzZXQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX0ludGVyZmFjZUVycm9yLCBlcnJtc2dfZmV0Y2hfYWNyb3NzX3JvbGxiYWNrKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05OTIsNiArMTAzNSw4IEBACiAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnN0YXRlbWVudCk7CiAgICAgfQogCisgICAgc2VsZi0+Y2xvc2VkID0gMTsKKwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTEwNTIsMTIgKzEwOTcsMTIgQEAKICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgICAgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfSVRFUnxQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLworICAgICAgICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX0lURVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfV0VBS1JFRlMsIC8qIHRwX2ZsYWdzICovCiAgICAgICAgIGN1cnNvcl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgICAgICBvZmZzZXRvZihweXNxbGl0ZV9DdXJzb3IsIGluX3dlYWtyZWZsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgICAgICAoZ2V0aXRlcmZ1bmMpcHlzcWxpdGVfY3Vyc29yX2dldGl0ZXIsICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgICAgIChpdGVybmV4dGZ1bmMpcHlzcWxpdGVfY3Vyc29yX2l0ZXJuZXh0LCAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgICAgIGN1cnNvcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuaCBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuaAppbmRleCA1NGQ4MTZkLi44MmY1OTcyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5oCkBAIC0xLDYgKzEsNiBAQAogLyogY3Vyc29yLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIGN1cnNvciB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTQwLDkgKzQwLDE0IEBACiAgICAgbG9uZyByb3djb3VudDsKICAgICBQeU9iamVjdCogcm93X2ZhY3Rvcnk7CiAgICAgcHlzcWxpdGVfU3RhdGVtZW50KiBzdGF0ZW1lbnQ7CisgICAgaW50IGNsb3NlZDsKKyAgICBpbnQgcmVzZXQ7CisgICAgaW50IGluaXRpYWxpemVkOwogCiAgICAgLyogdGhlIG5leHQgcm93IHRvIGJlIHJldHVybmVkLCBOVUxMIGlmIG5vIG5leHQgcm93IGF2YWlsYWJsZSAqLwogICAgIFB5T2JqZWN0KiBuZXh0X3JvdzsKKworICAgIFB5T2JqZWN0KiBpbl93ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH0gcHlzcWxpdGVfQ3Vyc29yOwogCiB0eXBlZGVmIGVudW0gewpAQCAtNTMsOCArNTgsNiBAQAogCiBleHRlcm4gUHlUeXBlT2JqZWN0IHB5c3FsaXRlX0N1cnNvclR5cGU7CiAKLWludCBweXNxbGl0ZV9jdXJzb3JfaW5pdChweXNxbGl0ZV9DdXJzb3IqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKTsKLXZvaWQgcHlzcWxpdGVfY3Vyc29yX2RlYWxsb2MocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKTsKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfZXhlY3V0ZShweXNxbGl0ZV9DdXJzb3IqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKTsKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfZXhlY3V0ZW1hbnkocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCogYXJncyk7CiBQeU9iamVjdCogcHlzcWxpdGVfY3Vyc29yX2dldGl0ZXIocHlzcWxpdGVfQ3Vyc29yICpzZWxmKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwppbmRleCBjMTZiN2M3Li4zMzYxMWQ5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogbW9kdWxlLmMgLSB0aGUgbW9kdWxlIGl0c2VsZgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmggYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmgKaW5kZXggYjE0YmUyYS4uOGQxN2Q2MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaApAQCAtMSw2ICsxLDYgQEAKIC8qIG1vZHVsZS5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBtb2R1bGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBQWVNRTElURV9NT0RVTEVfSAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jZGVmaW5lIFBZU1FMSVRFX1ZFUlNJT04gIjIuNC4xIgorI2RlZmluZSBQWVNRTElURV9WRVJTSU9OICIyLjYuMCIKIAogZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9FcnJvcjsKIGV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfV2FybmluZzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IGMwMThjOTYuLjllZDI1ZTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHByZXBhcmVfcHJvdG9jb2wuYyAtIHRoZSBwcm90b2NvbCBmb3IgcHJlcGFyaW5nIHZhbHVlcyBmb3IgU1FMaXRlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTIxLDYgKzIxLDcgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAorI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKIAogaW50IHB5c3FsaXRlX3ByZXBhcmVfcHJvdG9jb2xfaW5pdChweXNxbGl0ZV9QcmVwYXJlUHJvdG9jb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuaCBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmgKaW5kZXggMTUzNDcyZS4uMWNkZjcwOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5oCkBAIC0xLDYgKzEsNiBAQAogLyogcHJlcGFyZV9wcm90b2NvbC5oIC0gdGhlIHByb3RvY29sIGZvciBwcmVwYXJpbmcgdmFsdWVzIGZvciBTUUxpdGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCmluZGV4IGYxZTFjNDMuLjQ4MGI0ODIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKQEAgLTEsNiArMSw2IEBACiAvKiByb3cuYyAtIGFuIGVuaGFuY2VkIHR1cGxlIGZvciBkYXRhYmFzZSByb3dzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTE3NywxNyArMTc3LDE3IEBACiBzdGF0aWMgUHlPYmplY3QqIHB5c3FsaXRlX3Jvd19yaWNoY29tcGFyZShweXNxbGl0ZV9Sb3cgKnNlbGYsIFB5T2JqZWN0ICpfb3RoZXIsIGludCBvcGlkKQogewogICAgIGlmIChvcGlkICE9IFB5X0VRICYmIG9waWQgIT0gUHlfTkUpIHsKLQlQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwotCXJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwogICAgIH0KICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKF9vdGhlciksICZweXNxbGl0ZV9Sb3dUeXBlKSkgewotCXB5c3FsaXRlX1JvdyAqb3RoZXIgPSAocHlzcWxpdGVfUm93ICopX290aGVyOwotCVB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShzZWxmLT5kZXNjcmlwdGlvbiwgb3RoZXItPmRlc2NyaXB0aW9uLCBvcGlkKTsKLQlpZiAoKG9waWQgPT0gUHlfRVEgJiYgcmVzID09IFB5X1RydWUpCi0JICAgIHx8IChvcGlkID09IFB5X05FICYmIHJlcyA9PSBQeV9GYWxzZSkpIHsKLQkgICAgUHlfREVDUkVGKHJlcyk7Ci0JICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZShzZWxmLT5kYXRhLCBvdGhlci0+ZGF0YSwgb3BpZCk7Ci0JfQorICAgICAgICBweXNxbGl0ZV9Sb3cgKm90aGVyID0gKHB5c3FsaXRlX1JvdyAqKV9vdGhlcjsKKyAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRlc2NyaXB0aW9uLCBvdGhlci0+ZGVzY3JpcHRpb24sIG9waWQpOworICAgICAgICBpZiAoKG9waWQgPT0gUHlfRVEgJiYgcmVzID09IFB5X1RydWUpCisgICAgICAgICAgICB8fCAob3BpZCA9PSBQeV9ORSAmJiByZXMgPT0gUHlfRmFsc2UpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZShzZWxmLT5kYXRhLCBvdGhlci0+ZGF0YSwgb3BpZCk7CisgICAgICAgIH0KICAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmggYi9Nb2R1bGVzL19zcWxpdGUvcm93LmgKaW5kZXggOGVkNjlhZS4uZGQ5YjBjMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHJvdy5oIC0gYW4gZW5oYW5jZWQgdHVwbGUgZm9yIGRhdGFiYXNlIHJvd3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oIGIvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCmluZGV4IGMzNzk4MjUuLjM0MDhmYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKQEAgLTEsNiArMSw2IEBACiAvKiBzcWxpdGVjb21wYXQuaCAtIGNvbXBhdGliaWxpdHkgbWFjcm9zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0yMSw2ICsyMSw4IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKKyNpbmNsdWRlICJQeXRob24uaCIKKwogI2lmbmRlZiBQWVNRTElURV9DT01QQVRfSAogI2RlZmluZSBQWVNRTElURV9DT01QQVRfSAogCkBAIC0zMSw0ICszMywzMSBAQAogdHlwZWRlZiBpbnQgKCpsZW5mdW5jKShQeU9iamVjdCopOwogI2VuZGlmCiAKKworLyogZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0IGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLworI2lmbmRlZiBQeURpY3RfQ2hlY2tFeGFjdAorI2RlZmluZSBQeURpY3RfQ2hlY2tFeGFjdChvcCkgKChvcCktPm9iX3R5cGUgPT0gJlB5RGljdF9UeXBlKQorI2VuZGlmCisKKy8qIGRlZmluZSBQeV9DTEVBUiBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KKyNpZm5kZWYgUHlfQ0xFQVIKKyNkZWZpbmUgUHlfQ0xFQVIob3ApCQkJCVwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICAgICAgICAgIGlmIChvcCkgewkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSAoUHlPYmplY3QgKikob3ApOwlcCisgICAgICAgICAgICAgICAgICAgICAgICAob3ApID0gTlVMTDsJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwkJXAorICAgICAgICAgICAgICAgIH0JCQkJXAorICAgICAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgUHlWYXJPYmplY3RfSEVBRF9JTklUCisjZGVmaW5lIFB5VmFyT2JqZWN0X0hFQURfSU5JVCh0eXBlLCBzaXplKSBcCisgICAgUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpIHNpemUsCisjZW5kaWYKKworI2lmbmRlZiBQeV9UWVBFCisjZGVmaW5lIFB5X1RZUEUob2IpICgob2IpLT5vYl90eXBlKQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCmluZGV4IGYyMDBjNTYuLjlkMDhmMmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKQEAgLTEsNiArMSw2IEBACiAvKiBzdGF0ZW1lbnQuYyAtIHRoZSBzdGF0ZW1lbnQgdHlwZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmggYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmgKaW5kZXggYmZhMjA5MS4uMDVmZDVmZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHN0YXRlbWVudC5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBzdGF0ZW1lbnQgdHlwZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwppbmRleCA2YmUzOWFlLi42YjU3Yjc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKQEAgLTEsNiArMSw2IEBACiAvKiB1dGlsLmMgLSB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmggYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5oCmluZGV4IDJhNDU2MzYuLjQyNjkwMDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHV0aWwuaCAtIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3JlLmMgYi9Nb2R1bGVzL19zcmUuYwppbmRleCA3MzFiMTNkLi45MzE1ZjEwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcmUuYworKysgYi9Nb2R1bGVzL19zcmUuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfVU5JQ09ERSkKIAotI2RlZmluZSBTUkVfVU5JX0lTX0RJR0lUKGNoKSBQeV9VTklDT0RFX0lTRElHSVQoKFB5X1VOSUNPREUpKGNoKSkKKyNkZWZpbmUgU1JFX1VOSV9JU19ESUdJVChjaCkgUHlfVU5JQ09ERV9JU0RFQ0lNQUwoKFB5X1VOSUNPREUpKGNoKSkKICNkZWZpbmUgU1JFX1VOSV9JU19TUEFDRShjaCkgUHlfVU5JQ09ERV9JU1NQQUNFKChQeV9VTklDT0RFKShjaCkpCiAjZGVmaW5lIFNSRV9VTklfSVNfTElORUJSRUFLKGNoKSBQeV9VTklDT0RFX0lTTElORUJSRUFLKChQeV9VTklDT0RFKShjaCkpCiAjZGVmaW5lIFNSRV9VTklfSVNfQUxOVU0oY2gpIFB5X1VOSUNPREVfSVNBTE5VTSgoUHlfVU5JQ09ERSkoY2gpKQpAQCAtMTY4Niw3ICsxNjg2LDcgQEAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpIHsKICAgICAgICAgLyogdW5pY29kZSBzdHJpbmdzIGRvZXNuJ3QgYWx3YXlzIHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UgKi8KICAgICAgICAgcHRyID0gKHZvaWQqKSBQeVVuaWNvZGVfQVNfREFUQShzdHJpbmcpOwotICAgICAgICBieXRlcyA9IFB5VW5pY29kZV9HRVRfREFUQV9TSVpFKHN0cmluZyk7CisgICAgICAgIC8qIGJ5dGVzID0gUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUoc3RyaW5nKTsgKi8KICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShzdHJpbmcpOwogICAgICAgICBjaGFyc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKTsKIApAQCAtMjk2NywxMyArMjk2NywxMyBAQAogICAgICAgICAgICAgICAgICAgIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiA8ND1tYXg+OwogICAgICAgICAgICAgICAgICAgIElmIFNSRV9JTkZPX1BSRUZJWCBvciBTUkVfSU5GT19DSEFSU0VUIGlzIGluIHRoZSBmbGFncywKICAgICAgICAgICAgICAgICAgICBtb3JlIGZvbGxvd3MuICovCi0gICAgICAgICAgICAgICAgU1JFX0NPREUgZmxhZ3MsIG1pbiwgbWF4LCBpOworICAgICAgICAgICAgICAgIFNSRV9DT0RFIGZsYWdzLCBpOwogICAgICAgICAgICAgICAgIFNSRV9DT0RFICpuZXdjb2RlOwogICAgICAgICAgICAgICAgIEdFVF9TS0lQOwogICAgICAgICAgICAgICAgIG5ld2NvZGUgPSBjb2RlK3NraXAtMTsKICAgICAgICAgICAgICAgICBHRVRfQVJHOyBmbGFncyA9IGFyZzsKLSAgICAgICAgICAgICAgICBHRVRfQVJHOyBtaW4gPSBhcmc7Ci0gICAgICAgICAgICAgICAgR0VUX0FSRzsgbWF4ID0gYXJnOworICAgICAgICAgICAgICAgIEdFVF9BUkc7IC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdFVF9BUkc7IC8qIG1heCAqLwogICAgICAgICAgICAgICAgIC8qIENoZWNrIHRoYXQgb25seSB2YWxpZCBmbGFncyBhcmUgcHJlc2VudCAqLwogICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiB+KFNSRV9JTkZPX1BSRUZJWCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JFX0lORk9fTElURVJBTCB8CkBAIC0yOTg5LDkgKzI5ODksOSBAQAogICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgIC8qIFZhbGlkYXRlIHRoZSBwcmVmaXggKi8KICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19QUkVGSVgpIHsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NPREUgcHJlZml4X2xlbiwgcHJlZml4X3NraXA7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DT0RFIHByZWZpeF9sZW47CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7Ci0gICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9za2lwID0gYXJnOworICAgICAgICAgICAgICAgICAgICBHRVRfQVJHOyAvKiBwcmVmaXggc2tpcCAqLwogICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIGNvbWVzIHRoZSBwcmVmaXggc3RyaW5nICovCiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlK3ByZWZpeF9sZW4gPCBjb2RlIHx8IGNvZGUrcHJlZml4X2xlbiA+IG5ld2NvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwpAQCAtMzg3Niw4ICszODc2LDkgQEAKICAgICBQeU9iamVjdCogeDsKIAogICAgIC8qIFBhdGNoIG9iamVjdCB0eXBlcyAqLwotICAgIFBhdHRlcm5fVHlwZS5vYl90eXBlID0gTWF0Y2hfVHlwZS5vYl90eXBlID0KLSAgICAgICAgU2Nhbm5lcl9UeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUGF0dGVybl9UeXBlKSB8fCBQeVR5cGVfUmVhZHkoJk1hdGNoX1R5cGUpIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmU2Nhbm5lcl9UeXBlKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgbSA9IFB5X0luaXRNb2R1bGUoIl8iIFNSRV9NT0RVTEUsIF9mdW5jdGlvbnMpOwogICAgIGlmIChtID09IE5VTEwpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zc2wuYyBiL01vZHVsZXMvX3NzbC5jCmluZGV4IDQ2MTljZGEuLjZlZDBmNGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NzbC5jCisrKyBiL01vZHVsZXMvX3NzbC5jCkBAIC0yNjMsNyArMjYzLDcgQEAKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGUsCiAgICAgICAgICAgICAgICBlbnVtIHB5X3NzbF9jZXJ0X3JlcXVpcmVtZW50cyBjZXJ0cmVxLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfdmVyc2lvbiBwcm90b192ZXJzaW9uLAotICAgICAgICAgICAgICAgY2hhciAqY2FjZXJ0c19maWxlKQorICAgICAgICAgICAgICAgY2hhciAqY2FjZXJ0c19maWxlLCBjaGFyICpjaXBoZXJzKQogewogICAgIFB5U1NMT2JqZWN0ICpzZWxmOwogICAgIGNoYXIgKmVycnN0ciA9IE5VTEw7CkBAIC0zMTMsNiArMzEzLDE0IEBACiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKKyAgICBpZiAoY2lwaGVycyAhPSBOVUxMKSB7CisgICAgICAgIHJldCA9IFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KHNlbGYtPmN0eCwgY2lwaGVycyk7CisgICAgICAgIGlmIChyZXQgPT0gMCkgeworICAgICAgICAgICAgZXJyc3RyID0gRVJSU1RSKCJObyBjaXBoZXIgY2FuIGJlIHNlbGVjdGVkLiIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKGNlcnRyZXEgIT0gUFlfU1NMX0NFUlRfTk9ORSkgewogICAgICAgICBpZiAoY2FjZXJ0c19maWxlID09IE5VTEwpIHsKICAgICAgICAgICAgIGVycnN0ciA9IEVSUlNUUigiTm8gcm9vdCBjZXJ0aWZpY2F0ZXMgc3BlY2lmaWVkIGZvciAiCkBAIC00MTIsMTQgKzQyMCwxNSBAQAogICAgIGNoYXIgKmtleV9maWxlID0gTlVMTDsKICAgICBjaGFyICpjZXJ0X2ZpbGUgPSBOVUxMOwogICAgIGNoYXIgKmNhY2VydHNfZmlsZSA9IE5VTEw7CisgICAgY2hhciAqY2lwaGVycyA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haXx6emlpejpzc2x3cmFwIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haXx6emlpeno6c3Nsd3JhcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U29ja2V0TW9kdWxlLlNvY2tfVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleV9maWxlLCAmY2VydF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVyaWZpY2F0aW9uX21vZGUsICZwcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2VydHNfZmlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNlcnRzX2ZpbGUsICZjaXBoZXJzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgpAQCAtNDMyLDEyICs0NDEsMTMgQEAKIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgbmV3UHlTU0xPYmplY3QoU29jaywga2V5X2ZpbGUsIGNlcnRfZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlLCB2ZXJpZmljYXRpb25fbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sLCBjYWNlcnRzX2ZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wsIGNhY2VydHNfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnMpOwogfQogCiBQeURvY19TVFJWQVIoc3NsX2RvYywKICJzc2x3cmFwKHNvY2tldCwgc2VydmVyX3NpZGUsIFtrZXlmaWxlLCBjZXJ0ZmlsZSwgY2VydHNfbW9kZSwgcHJvdG9jb2wsXG4iCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0c2ZpbGVdKSAtPiBzc2xvYmplY3QiKTsKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzZmlsZSwgY2lwaGVyc10pIC0+IHNzbG9iamVjdCIpOwogCiAvKiBTU0wgb2JqZWN0IG1ldGhvZHMgKi8KIApAQCAtNDU0LDcgKzQ2NCw2IEBACiAKICAgICAvKiBBY3R1YWxseSBuZWdvdGlhdGUgU1NMIGNvbm5lY3Rpb24gKi8KICAgICAvKiBYWFggSWYgU1NMX2RvX2hhbmRzaGFrZSgpIHJldHVybnMgMCwgaXQncyBhbHNvIGEgZmFpbHVyZS4gKi8KLSAgICBzb2Nrc3RhdGUgPSAwOwogICAgIGRvIHsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICByZXQgPSBTU0xfZG9faGFuZHNoYWtlKHNlbGYtPnNzbCk7CkBAIC02NzEsMTIgKzY4MCwxNyBAQAogICAgIFg1MDlfRVhURU5TSU9OICpleHQgPSBOVUxMOwogICAgIEdFTkVSQUxfTkFNRVMgKm5hbWVzID0gTlVMTDsKICAgICBHRU5FUkFMX05BTUUgKm5hbWU7Ci0gICAgWDUwOVYzX0VYVF9NRVRIT0QgKm1ldGhvZDsKKyAgICBjb25zdCBYNTA5VjNfRVhUX01FVEhPRCAqbWV0aG9kOwogICAgIEJJTyAqYmlvYnVmID0gTlVMTDsKICAgICBjaGFyIGJ1ZlsyMDQ4XTsKICAgICBjaGFyICp2cHRyOwogICAgIGludCBsZW47CisgICAgLyogSXNzdWUgIzI5NzM6IEFTTjFfaXRlbV9kMmkoKSBBUEkgY2hhbmdlZCBpbiBPcGVuU1NMIDAuOS42bSAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwNjBkZkwKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwOworI2Vsc2UKKyAgICB1bnNpZ25lZCBjaGFyICpwOworI2VuZGlmCiAKICAgICBpZiAoY2VydGlmaWNhdGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIHBlZXJfYWx0X25hbWVzOwpAQCAtMTAyNywxNSArMTA0MSwxNSBAQAogc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9jaXBoZXIgKFB5U1NMT2JqZWN0ICpzZWxmKSB7CiAKICAgICBQeU9iamVjdCAqcmV0dmFsLCAqdjsKLSAgICBTU0xfQ0lQSEVSICpjdXJyZW50OworICAgIGNvbnN0IFNTTF9DSVBIRVIgKmN1cnJlbnQ7CiAgICAgY2hhciAqY2lwaGVyX25hbWU7CiAgICAgY2hhciAqY2lwaGVyX3Byb3RvY29sOwogCiAgICAgaWYgKHNlbGYtPnNzbCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgY3VycmVudCA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc2VsZi0+c3NsKTsKICAgICBpZiAoY3VycmVudCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICByZXR2YWwgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAocmV0dmFsID09IE5VTEwpCkBAIC0xMDQzLDYgKzEwNTcsNyBAQAogCiAgICAgY2lwaGVyX25hbWUgPSAoY2hhciAqKSBTU0xfQ0lQSEVSX2dldF9uYW1lKGN1cnJlbnQpOwogICAgIGlmIChjaXBoZXJfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIFB5X05vbmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGNpcGhlcl9uYW1lKTsKQEAgLTEwNTIsNiArMTA2Nyw3IEBACiAgICAgfQogICAgIGNpcGhlcl9wcm90b2NvbCA9IFNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24oY3VycmVudCk7CiAgICAgaWYgKGNpcGhlcl9wcm90b2NvbCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIFB5X05vbmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGNpcGhlcl9wcm90b2NvbCk7CkBAIC0xMTU0LDE0ICsxMTcwLDEzIEBACiAKIHN0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMd3JpdGUoUHlTU0xPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKmRhdGE7CisgICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBpbnQgbGVuOwotICAgIGludCBjb3VudDsKICAgICBpbnQgc29ja3N0YXRlOwogICAgIGludCBlcnI7CiAgICAgaW50IG5vbmJsb2NraW5nOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp3cml0ZSIsICZkYXRhLCAmY291bnQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6d3JpdGUiLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBqdXN0IGluIGNhc2UgdGhlIGJsb2NraW5nIHN0YXRlIG9mIHRoZSBzb2NrZXQgaGFzIGJlZW4gY2hhbmdlZCAqLwpAQCAtMTE3MywyNCArMTE4OCwyMyBAQAogICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U1NMRXJyb3JPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19CRUVOX0NMT1NFRCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcmx5aW5nIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQuIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0gZWxzZSBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9UT09fTEFSR0VfRk9SX1NFTEVDVCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcmx5aW5nIHNvY2tldCB0b28gbGFyZ2UgZm9yIHNlbGVjdCgpLiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZG8gewotICAgICAgICBlcnIgPSAwOwogICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGxlbiA9IFNTTF93cml0ZShzZWxmLT5zc2wsIGRhdGEsIGNvdW50KTsKKyAgICAgICAgbGVuID0gU1NMX3dyaXRlKHNlbGYtPnNzbCwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc2VsZi0+c3NsLCBsZW4pOwogICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZihQeUVycl9DaGVja1NpZ25hbHMoKSkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKICAgICAgICAgICAgIHNvY2tzdGF0ZSA9IGNoZWNrX3NvY2tldF9hbmRfd2FpdF9mb3JfdGltZW91dChzZWxmLT5Tb2NrZXQsIDApOwpAQCAtMTIwMiwxOSArMTIxNiwyNSBAQAogICAgICAgICBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfVElNRURfT1VUKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19CRUVOX0NMT1NFRCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U1NMRXJyb3JPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZGVybHlpbmcgc29ja2V0IGhhcyBiZWVuIGNsb3NlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0lTX05PTkJMT0NLSU5HKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEIHx8IGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSk7CisKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIGlmIChsZW4gPiAwKQogICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcobGVuKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBQeVNTTF9TZXRFcnJvcihzZWxmLCBsZW4sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisKK2Vycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUihQeVNTTF9TU0x3cml0ZV9kb2MsCkBAIC0xMjk1LDcgKzEzMTUsNiBAQAogICAgICAgICB9CiAgICAgfQogICAgIGRvIHsKLSAgICAgICAgZXJyID0gMDsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNlbGYtPnNzbCwgUHlTdHJpbmdfQXNTdHJpbmcoYnVmKSwgbGVuKTsKICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzZWxmLT5zc2wsIGNvdW50KTsKQEAgLTE2MjQsNyArMTY0Myw5IEBACiBQeU1PRElOSVRfRlVOQwogaW5pdF9zc2wodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm0sICpkLCAqcjsKKyAgICB1bnNpZ25lZCBsb25nIGxpYnZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXM7CiAKICAgICBQeV9UWVBFKCZQeVNTTF9UeXBlKSA9ICZQeVR5cGVfVHlwZTsKIApAQCAtMTY5NSw0ICsxNzE2LDMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMSk7CisKKyAgICAvKiBPcGVuU1NMIHZlcnNpb24gKi8KKyAgICAvKiBTU0xlYXkoKSBnaXZlcyB1cyB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBsaW5rZWQgYWdhaW5zdCwKKyAgICAgICB3aGljaCBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaGVhZGVycyB2ZXJzaW9uLgorICAgICovCisgICAgbGlidmVyID0gU1NMZWF5KCk7CisgICAgciA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGxpYnZlcik7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIiLCByKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0YXR1cyA9IGxpYnZlciAmIDB4RjsKKyAgICBsaWJ2ZXIgPj49IDQ7CisgICAgcGF0Y2ggPSBsaWJ2ZXIgJiAweEZGOworICAgIGxpYnZlciA+Pj0gODsKKyAgICBmaXggPSBsaWJ2ZXIgJiAweEZGOworICAgIGxpYnZlciA+Pj0gODsKKyAgICBtaW5vciA9IGxpYnZlciAmIDB4RkY7CisgICAgbGlidmVyID4+PSA4OworICAgIG1ham9yID0gbGlidmVyICYgMHhGRjsKKyAgICByID0gUHlfQnVpbGRWYWx1ZSgiSUlJSUkiLCBtYWpvciwgbWlub3IsIGZpeCwgcGF0Y2gsIHN0YXR1cyk7CisgICAgaWYgKHIgPT0gTlVMTCB8fCBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk9QRU5TU0xfVkVSU0lPTl9JTkZPIiwgcikpCisgICAgICAgIHJldHVybjsKKyAgICByID0gUHlTdHJpbmdfRnJvbVN0cmluZyhTU0xlYXlfdmVyc2lvbihTU0xFQVlfVkVSU0lPTikpOworICAgIGlmIChyID09IE5VTEwgfHwgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPUEVOU1NMX1ZFUlNJT04iLCByKSkKKyAgICAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RydWN0LmMgYi9Nb2R1bGVzL19zdHJ1Y3QuYwppbmRleCBiODVkMTA2Li43MWU3MWRkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zdHJ1Y3QuYworKysgYi9Nb2R1bGVzL19zdHJ1Y3QuYwpAQCAtMTcsMjkgKzE3LDEwIEBACiB0eXBlZGVmIGludCBQeV9zc2l6ZV90OwogI2VuZGlmCiAKLS8qIElmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HIGlzIGRlZmluZWQsIHRoZSBzdHJ1Y3QgbW9kdWxlIHdpbGwgd3JhcCBhbGwgaW5wdXQKLSAgIG51bWJlcnMgZm9yIGV4cGxpY2l0IGVuZGlhbnMgc3VjaCB0aGF0IHRoZXkgZml0IGluIHRoZSBnaXZlbiB0eXBlLCBtdWNoCi0gICBsaWtlIGV4cGxpY2l0IGNhc3RpbmcgaW4gQy4gQSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBudW1iZXIgZGlkCi0gICBub3Qgb3JpZ2luYWxseSBmaXQgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgcmVxdWVzdGVkIHR5cGUuIElmIGl0IGlzCi0gICBub3QgZGVmaW5lZCwgdGhlbiBhbGwgcmFuZ2UgZXJyb3JzIGFuZCBvdmVyZmxvdyB3aWxsIGJlIHN0cnVjdC5lcnJvcgotICAgZXhjZXB0aW9ucy4gKi8KLQotI2RlZmluZSBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORyAxCi0KLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotc3RhdGljIFB5T2JqZWN0ICpweWxvbmdfdWxvbmdfbWFzayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnB5aW50X3plcm8gPSBOVUxMOwotI2VuZGlmCi0KLS8qIElmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UgaXMgZGVmaW5lZCwgdGhlIHN0cnVjdCBtb2R1bGUgd2lsbCBhbGxvdyBmbG9hdAotICAgYXJndW1lbnRzIGZvciBpbnRlZ2VyIGZvcm1hdHMgd2l0aCBhIHdhcm5pbmcgZm9yIGJhY2t3YXJkcwotICAgY29tcGF0aWJpbGl0eS4gKi8KLQotI2RlZmluZSBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFIDEKLQotI2lmZGVmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UKLSNkZWZpbmUgRkxPQVRfQ09FUkNFICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiCi0jZW5kaWYKKy8qIHdhcm5pbmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgRkxPQVRfQ09FUkNFX1dBUk4gImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIKKyNkZWZpbmUgTk9OX0lOVEVHRVJfV0FSTiAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IG5vbi1pbnRlZ2VyICIgXAorICAgICIoaW1wbGljaXQgY29udmVyc2lvbiB1c2luZyBfX2ludF9fIGlzIGRlcHJlY2F0ZWQpIgogCiAKIC8qIFRoZSB0cmFuc2xhdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBmb3JtYXQgY2hhcmFjdGVyIGlzIHRhYmxlIGRyaXZlbiAqLwpAQCAtMTE5LDkzICsxMDAsMTMzIEBACiAjcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKICNlbmRpZgogCitzdGF0aWMgY2hhciAqaW50ZWdlcl9jb2RlcyA9ICJiQmhIaUlsTHFRIjsKKwogLyogSGVscGVyIHRvIGdldCBhIFB5TG9uZ09iamVjdCBieSBob29rIG9yIGJ5IGNyb29rLiAgQ2FsbGVyIHNob3VsZCBkZWNyZWYuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfcHlsb25nKFB5T2JqZWN0ICp2KQogewotICAgIFB5TnVtYmVyTWV0aG9kcyAqbTsKLQorICAgIFB5T2JqZWN0ICpyLCAqdzsKKyAgICBpbnQgY29udmVydGVkID0gMDsKICAgICBhc3NlcnQodiAhPSBOVUxMKTsKLSAgICBpZiAoUHlJbnRfQ2hlY2sodikpCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUHlJbnRfQVNfTE9ORyh2KSk7Ci0gICAgaWYgKFB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIHJldHVybiB2OwotICAgIH0KLSAgICBtID0gUHlfVFlQRSh2KS0+dHBfYXNfbnVtYmVyOwotICAgIGlmIChtICE9IE5VTEwgJiYgbS0+bmJfbG9uZyAhPSBOVUxMKSB7Ci0gICAgICAgIHYgPSBtLT5uYl9sb25nKHYpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgIGlmICghUHlJbnRfQ2hlY2sodikgJiYgIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICBQeU51bWJlck1ldGhvZHMgKm07CisgICAgICAgIC8qIE5vdCBhbiBpbnRlZ2VyOyBmaXJzdCB0cnkgdG8gdXNlIF9faW5kZXhfXyB0bworICAgICAgICAgICBjb252ZXJ0IHRvIGFuIGludGVnZXIuICBJZiB0aGUgX19pbmRleF9fIG1ldGhvZAorICAgICAgICAgICBkb2Vzbid0IGV4aXN0LCBvciByYWlzZXMgYSBUeXBlRXJyb3IsIHRyeSBfX2ludF9fLgorICAgICAgICAgICBVc2Ugb2YgdGhlIGxhdHRlciBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBmYWlsIGluCisgICAgICAgICAgIFB5dGhvbiAzLnguICovCisKKyAgICAgICAgbSA9IFB5X1RZUEUodiktPnRwX2FzX251bWJlcjsKKyAgICAgICAgaWYgKFB5SW5kZXhfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIHcgPSBQeU51bWJlcl9JbmRleCh2KTsKKyAgICAgICAgICAgIGlmICh3ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gdzsKKyAgICAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsbHkgY29udmVydGVkIHRvIGFuIGludGVnZXIgKi8KKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbnZlcnRlZCAmJiBtICE9IE5VTEwgJiYgbS0+bmJfaW50ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIFNwZWNpYWwgY2FzZSB3YXJuaW5nIG1lc3NhZ2UgZm9yIGZsb2F0cywgZm9yCisgICAgICAgICAgICAgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KKyAgICAgICAgICAgIGlmIChQeUZsb2F0X0NoZWNrKHYpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxPQVRfQ09FUkNFX1dBUk4sIDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PTl9JTlRFR0VSX1dBUk4sIDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHYgPSBtLT5uYl9pbnQodik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKCFQeUludF9DaGVjayh2KSAmJiAhUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW50X18gbWV0aG9kIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1pbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb252ZXJ0ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmICghY29udmVydGVkKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gaW50ZWdlciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpCi0gICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIC8qIEVuc3VyZSB3ZSBvd24gYSByZWZlcmVuY2UgdG8gdi4gKi8KKyAgICAgICAgUHlfSU5DUkVGKHYpOworCisgICAgYXNzZXJ0KFB5SW50X0NoZWNrKHYpIHx8IFB5TG9uZ19DaGVjayh2KSk7CisgICAgaWYgKFB5SW50X0NoZWNrKHYpKSB7CisgICAgICAgIHIgPSBQeUxvbmdfRnJvbUxvbmcoUHlJbnRfQVNfTE9ORyh2KSk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICB9Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgYXJndW1lbnQgdG8gbG9uZyIpOwotICAgIHJldHVybiBOVUxMOworICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKKyAgICAgICAgciA9IHY7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByID0gTlVMTDsgICAvKiBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQKKyAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZSAqLworICAgICAgICBhc3NlcnQoMCk7ICAvKiBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZSAqLworICAgIH0KKworICAgIHJldHVybiByOwogfQogCi0vKiBIZWxwZXIgcm91dGluZSB0byBnZXQgYSBQeXRob24gaW50ZWdlciBhbmQgcmFpc2UgdGhlIGFwcHJvcHJpYXRlIGVycm9yCi0gICBpZiBpdCBpc24ndCBvbmUgKi8KKy8qIEhlbHBlciB0byBjb252ZXJ0IGEgUHl0aG9uIG9iamVjdCB0byBhIEMgbG9uZy4gIFNldHMgYW4gZXhjZXB0aW9uCisgICAoc3RydWN0LmVycm9yIGZvciBhbiBpbmNvbnZlcnRpYmxlIHR5cGUsIE92ZXJmbG93RXJyb3IgZm9yCisgICBvdXQtb2YtcmFuZ2UgdmFsdWVzKSBhbmQgcmV0dXJucyAtMSBvbiBlcnJvci4gKi8KIAogc3RhdGljIGludAogZ2V0X2xvbmcoUHlPYmplY3QgKnYsIGxvbmcgKnApCiB7Ci0gICAgbG9uZyB4ID0gUHlJbnRfQXNMb25nKHYpOwotICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSNpZmRlZiBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFCi0gICAgICAgIGlmIChQeUZsb2F0X0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbzsKLSAgICAgICAgICAgIGludCByZXM7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIEZMT0FUX0NPRVJDRSwgMSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG8gPSBQeU51bWJlcl9JbnQodik7Ci0gICAgICAgICAgICBpZiAobyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHJlcyA9IGdldF9sb25nKG8sIHApOwotICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBhbiBpbnRlZ2VyIik7CisgICAgbG9uZyB4OworCisgICAgdiA9IGdldF9weWxvbmcodik7CisgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKKyAgICB4ID0gUHlMb25nX0FzTG9uZyh2KTsKKyAgICBQeV9ERUNSRUYodik7CisgICAgaWYgKHggPT0gKGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICpwID0geDsKICAgICByZXR1cm4gMDsKIH0KIAotCiAvKiBTYW1lLCBidXQgaGFuZGxpbmcgdW5zaWduZWQgbG9uZyAqLwogCi0jaWZuZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0KIHN0YXRpYyBpbnQKIGdldF91bG9uZyhQeU9iamVjdCAqdiwgdW5zaWduZWQgbG9uZyAqcCkKIHsKLSAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgeCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyh2KTsKLSAgICAgICAgaWYgKHggPT0gKHVuc2lnbmVkIGxvbmcpKC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAqcCA9IHg7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoZ2V0X2xvbmcodiwgKGxvbmcgKilwKSA8IDApCisgICAgdW5zaWduZWQgbG9uZyB4OworCisgICAgdiA9IGdldF9weWxvbmcodik7CisgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICgoKGxvbmcpKnApIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAidW5zaWduZWQgYXJndW1lbnQgaXMgPCAwIik7CisgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayh2KSk7CisgICAgeCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyh2KTsKKyAgICBQeV9ERUNSRUYodik7CisgICAgaWYgKHggPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICAqcCA9IHg7CiAgICAgcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORyAqLwotCiAjaWZkZWYgSEFWRV9MT05HX0xPTkcKIAogLyogU2FtZSwgYnV0IGhhbmRsaW5nIG5hdGl2ZSBsb25nIGxvbmcuICovCkBAIC0yNDgsMTA4ICsyNjksNiBAQAogCiAjZW5kaWYKIAotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0KLS8qIEhlbHBlciByb3V0aW5lIHRvIGdldCBhIFB5dGhvbiBpbnRlZ2VyIGFuZCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IKLSAgIGlmIGl0IGlzbid0IG9uZSAqLwotCi0jZGVmaW5lIElOVF9PVkVSRkxPVyAic3RydWN0IGludGVnZXIgb3ZlcmZsb3cgbWFza2luZyBpcyBkZXByZWNhdGVkIgotCi1zdGF0aWMgaW50Ci1nZXRfd3JhcHBlZF9sb25nKFB5T2JqZWN0ICp2LCBsb25nICpwKQotewotICAgIGlmIChnZXRfbG9uZyh2LCBwKSA8IDApIHsKLSAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSAmJgotICAgICAgICAgICAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkgewotICAgICAgICAgICAgUHlPYmplY3QgKndyYXBwZWQ7Ci0gICAgICAgICAgICBsb25nIHg7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotI2lmZGVmIFBZX1NUUlVDVF9GTE9BVF9DT0VSQ0UKLSAgICAgICAgICAgIGlmIChQeUZsb2F0X0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm87Ci0gICAgICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBGTE9BVF9DT0VSQ0UsIDEpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG8gPSBQeU51bWJlcl9JbnQodik7Ci0gICAgICAgICAgICAgICAgaWYgKG8gPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIHJlcyA9IGdldF93cmFwcGVkX2xvbmcobywgcCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBJTlRfT1ZFUkZMT1csIDEpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB3cmFwcGVkID0gUHlOdW1iZXJfQW5kKHYsIHB5bG9uZ191bG9uZ19tYXNrKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVkID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgeCA9IChsb25nKVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyh3cmFwcGVkKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3cmFwcGVkKTsKLSAgICAgICAgICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgKnAgPSB4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1nZXRfd3JhcHBlZF91bG9uZyhQeU9iamVjdCAqdiwgdW5zaWduZWQgbG9uZyAqcCkKLXsKLSAgICBsb25nIHggPSAobG9uZylQeUxvbmdfQXNVbnNpZ25lZExvbmcodik7Ci0gICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBQeU9iamVjdCAqd3JhcHBlZDsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSNpZmRlZiBQWV9TVFJVQ1RfRkxPQVRfQ09FUkNFCi0gICAgICAgIGlmIChQeUZsb2F0X0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbzsKLSAgICAgICAgICAgIGludCByZXM7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIEZMT0FUX0NPRVJDRSwgMSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG8gPSBQeU51bWJlcl9JbnQodik7Ci0gICAgICAgICAgICBpZiAobyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHJlcyA9IGdldF93cmFwcGVkX3Vsb25nKG8sIHApOwotICAgICAgICAgICAgUHlfREVDUkVGKG8pOwotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHdyYXBwZWQgPSBQeU51bWJlcl9BbmQodiwgcHlsb25nX3Vsb25nX21hc2spOwotICAgICAgICBpZiAod3JhcHBlZCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgSU5UX09WRVJGTE9XLCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3cmFwcGVkKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICB4ID0gKGxvbmcpUHlMb25nX0FzVW5zaWduZWRMb25nKHdyYXBwZWQpOwotICAgICAgICBQeV9ERUNSRUYod3JhcHBlZCk7Ci0gICAgICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgICpwID0gKHVuc2lnbmVkIGxvbmcpeDsKLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBSQU5HRV9FUlJPUih4LCBmLCBmbGFnLCBtYXNrKSBcCi0gICAgZG8geyBcCi0gICAgICAgIGlmIChfcmFuZ2VfZXJyb3IoZiwgZmxhZykgPCAwKSBcCi0gICAgICAgICAgICByZXR1cm4gLTE7IFwKLSAgICAgICAgZWxzZSBcCi0gICAgICAgICAgICAoeCkgJj0gKG1hc2spOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2Vsc2UKLQotI2RlZmluZSBnZXRfd3JhcHBlZF9sb25nIGdldF9sb25nCi0jZGVmaW5lIGdldF93cmFwcGVkX3Vsb25nIGdldF91bG9uZwotI2RlZmluZSBSQU5HRV9FUlJPUih4LCBmLCBmbGFnLCBtYXNrKSByZXR1cm4gX3JhbmdlX2Vycm9yKGYsIGZsYWcpCi0KLSNlbmRpZgotCiAvKiBGbG9hdGluZyBwb2ludCBoZWxwZXJzICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00MDMsMjYgKzMyMiw2IEBACiAgICAgICAgICAgICB+IGxhcmdlc3QsCiAgICAgICAgICAgICBsYXJnZXN0KTsKICAgICB9Ci0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLSAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICpwdHlwZSwgKnB2YWx1ZSwgKnB0cmFjZWJhY2s7Ci0gICAgICAgIFB5T2JqZWN0ICptc2c7Ci0gICAgICAgIGludCBydmFsOwotICAgICAgICBQeUVycl9GZXRjaCgmcHR5cGUsICZwdmFsdWUsICZwdHJhY2ViYWNrKTsKLSAgICAgICAgYXNzZXJ0KHB2YWx1ZSAhPSBOVUxMKTsKLSAgICAgICAgbXNnID0gUHlPYmplY3RfU3RyKHB2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYocHR5cGUpOwotICAgICAgICBQeV9YREVDUkVGKHB2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYocHRyYWNlYmFjayk7Ci0gICAgICAgIGlmIChtc2cgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcnZhbCA9IFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKG1zZyksIDEpOwotICAgICAgICBQeV9ERUNSRUYobXNnKTsKLSAgICAgICAgaWYgKHJ2YWwgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiAtMTsKIH0KIApAQCAtNjY3LDcgKzU2Niw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICNpZiAoU0laRU9GX0xPTkcgPiBTSVpFT0ZfSU5UKQogICAgIGlmICgoeCA8ICgobG9uZylJTlRfTUlOKSkgfHwgKHggPiAoKGxvbmcpSU5UX01BWCkpKQotICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAtMSk7CisgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMCk7CiAjZW5kaWYKICAgICB5ID0gKGludCl4OwogICAgIG1lbWNweShwLCAoY2hhciAqKSZ5LCBzaXplb2YgeSk7CkBAIC02NzksMTIgKzU3OCwxMiBAQAogewogICAgIHVuc2lnbmVkIGxvbmcgeDsKICAgICB1bnNpZ25lZCBpbnQgeTsKLSAgICBpZiAoZ2V0X3dyYXBwZWRfdWxvbmcodiwgJngpIDwgMCkKKyAgICBpZiAoZ2V0X3Vsb25nKHYsICZ4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICB5ID0gKHVuc2lnbmVkIGludCl4OwogI2lmIChTSVpFT0ZfTE9ORyA+IFNJWkVPRl9JTlQpCiAgICAgaWYgKHggPiAoKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVgpKQotICAgICAgICBSQU5HRV9FUlJPUih5LCBmLCAxLCAtMSk7CisgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMSk7CiAjZW5kaWYKICAgICBtZW1jcHkocCwgKGNoYXIgKikmeSwgc2l6ZW9mIHkpOwogICAgIHJldHVybiAwOwpAQCAtNzA0LDcgKzYwMyw3IEBACiBucF91bG9uZyhjaGFyICpwLCBQeU9iamVjdCAqdiwgY29uc3QgZm9ybWF0ZGVmICpmKQogewogICAgIHVuc2lnbmVkIGxvbmcgeDsKLSAgICBpZiAoZ2V0X3dyYXBwZWRfdWxvbmcodiwgJngpIDwgMCkKKyAgICBpZiAoZ2V0X3Vsb25nKHYsICZ4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBtZW1jcHkocCwgKGNoYXIgKikmeCwgc2l6ZW9mIHgpOwogICAgIHJldHVybiAwOwpAQCAtNzM3LDkgKzYzNiwxMyBAQAogc3RhdGljIGludAogbnBfYm9vbChjaGFyICpwLCBQeU9iamVjdCAqdiwgY29uc3QgZm9ybWF0ZGVmICpmKQogewotICAgIEJPT0xfVFlQRSB5OworICAgIGludCB5OworICAgIEJPT0xfVFlQRSB4OwogICAgIHkgPSBQeU9iamVjdF9Jc1RydWUodik7Ci0gICAgbWVtY3B5KHAsIChjaGFyICopJnksIHNpemVvZiB5KTsKKyAgICBpZiAoeSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICB4ID0geTsKKyAgICBtZW1jcHkocCwgKGNoYXIgKikmeCwgc2l6ZW9mIHgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC05MTEsMTkgKzgxNCwxNSBAQAogewogICAgIGxvbmcgeDsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaWYgKGdldF93cmFwcGVkX2xvbmcodiwgJngpIDwgMCkKKyAgICBpZiAoZ2V0X2xvbmcodiwgJngpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGkgPSBmLT5zaXplOwogICAgIGlmIChpICE9IFNJWkVPRl9MT05HKSB7CiAgICAgICAgIGlmICgoaSA9PSAyKSAmJiAoeCA8IC0zMjc2OCB8fCB4ID4gMzI3NjcpKQotICAgICAgICAgICAgUkFOR0VfRVJST1IoeCwgZiwgMCwgMHhmZmZmTCk7CisgICAgICAgICAgICByZXR1cm4gX3JhbmdlX2Vycm9yKGYsIDApOwogI2lmIChTSVpFT0ZfTE9ORyAhPSA0KQogICAgICAgICBlbHNlIGlmICgoaSA9PSA0KSAmJiAoeCA8IC0yMTQ3NDgzNjQ4TCB8fCB4ID4gMjE0NzQ4MzY0N0wpKQotICAgICAgICAgICAgUkFOR0VfRVJST1IoeCwgZiwgMCwgMHhmZmZmZmZmZkwpOwotI2VuZGlmCi0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLSAgICAgICAgZWxzZSBpZiAoKGkgPT0gMSkgJiYgKHggPCAtMTI4IHx8IHggPiAxMjcpKQotICAgICAgICAgICAgUkFOR0VfRVJST1IoeCwgZiwgMCwgMHhmZkwpOworICAgICAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAwKTsKICNlbmRpZgogICAgIH0KICAgICBkbyB7CkBAIC05MzgsMTQgKzgzNywxNCBAQAogewogICAgIHVuc2lnbmVkIGxvbmcgeDsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaWYgKGdldF93cmFwcGVkX3Vsb25nKHYsICZ4KSA8IDApCisgICAgaWYgKGdldF91bG9uZyh2LCAmeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaSA9IGYtPnNpemU7CiAgICAgaWYgKGkgIT0gU0laRU9GX0xPTkcpIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXhpbnQgPSAxOwogICAgICAgICBtYXhpbnQgPDw9ICh1bnNpZ25lZCBsb25nKShpICogOCk7CiAgICAgICAgIGlmICh4ID49IG1heGludCkKLSAgICAgICAgICAgIFJBTkdFX0VSUk9SKHgsIGYsIDEsIG1heGludCAtIDEpOworICAgICAgICAgICAgcmV0dXJuIF9yYW5nZV9lcnJvcihmLCAxKTsKICAgICB9CiAgICAgZG8gewogICAgICAgICBwWy0taV0gPSAoY2hhcil4OwpAQCAtMTAxNSwyMCArOTE0LDE2IEBACiB7CiAgICAgaW50IHk7CiAgICAgeSA9IFB5T2JqZWN0X0lzVHJ1ZSh2KTsKKyAgICBpZiAoeSA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICAqcCA9IChjaGFyKXk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBmb3JtYXRkZWYgYmlnZW5kaWFuX3RhYmxlW10gPSB7CiAgICAgeyd4JywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBOVUxMfSwKLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotICAgIC8qIE5hdGl2ZSBwYWNrZXJzIGRvIHJhbmdlIGNoZWNraW5nIHdpdGhvdXQgb3ZlcmZsb3cgbWFza2luZy4gKi8KLSAgICB7J2InLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIG51X2J5dGUsICAgICAgICBicF9pbnR9LAotICAgIHsnQicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfdWJ5dGUsICAgICAgIGJwX3VpbnR9LAotI2Vsc2UKICAgICB7J2InLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIG51X2J5dGUsICAgICAgICBucF9ieXRlfSwKICAgICB7J0InLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIG51X3VieXRlLCAgICAgICBucF91Ynl0ZX0sCi0jZW5kaWYKICAgICB7J2MnLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIG51X2NoYXIsICAgICAgICBucF9jaGFyfSwKICAgICB7J3MnLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIE5VTEx9LAogICAgIHsncCcsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgTlVMTH0sCkBAIC0xMTM5LDE5ICsxMDM0LDE1IEBACiB7CiAgICAgbG9uZyB4OwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBpZiAoZ2V0X3dyYXBwZWRfbG9uZyh2LCAmeCkgPCAwKQorICAgIGlmIChnZXRfbG9uZyh2LCAmeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaSA9IGYtPnNpemU7CiAgICAgaWYgKGkgIT0gU0laRU9GX0xPTkcpIHsKICAgICAgICAgaWYgKChpID09IDIpICYmICh4IDwgLTMyNzY4IHx8IHggPiAzMjc2NykpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmZmZMKTsKKyAgICAgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMCk7CiAjaWYgKFNJWkVPRl9MT05HICE9IDQpCiAgICAgICAgIGVsc2UgaWYgKChpID09IDQpICYmICh4IDwgLTIxNDc0ODM2NDhMIHx8IHggPiAyMTQ3NDgzNjQ3TCkpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmZmZmZmZmTCk7Ci0jZW5kaWYKLSNpZmRlZiBQWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORwotICAgICAgICBlbHNlIGlmICgoaSA9PSAxKSAmJiAoeCA8IC0xMjggfHwgeCA+IDEyNykpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAwLCAweGZmTCk7CisgICAgICAgICAgICByZXR1cm4gX3JhbmdlX2Vycm9yKGYsIDApOwogI2VuZGlmCiAgICAgfQogICAgIGRvIHsKQEAgLTExNjYsMTQgKzEwNTcsMTQgQEAKIHsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIGlmIChnZXRfd3JhcHBlZF91bG9uZyh2LCAmeCkgPCAwKQorICAgIGlmIChnZXRfdWxvbmcodiwgJngpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGkgPSBmLT5zaXplOwogICAgIGlmIChpICE9IFNJWkVPRl9MT05HKSB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4aW50ID0gMTsKICAgICAgICAgbWF4aW50IDw8PSAodW5zaWduZWQgbG9uZykoaSAqIDgpOwogICAgICAgICBpZiAoeCA+PSBtYXhpbnQpCi0gICAgICAgICAgICBSQU5HRV9FUlJPUih4LCBmLCAxLCBtYXhpbnQgLSAxKTsKKyAgICAgICAgICAgIHJldHVybiBfcmFuZ2VfZXJyb3IoZiwgMSk7CiAgICAgfQogICAgIGRvIHsKICAgICAgICAgKnArKyA9IChjaGFyKXg7CkBAIC0xMjQwLDE0ICsxMTMxLDggQEAKIAogc3RhdGljIGZvcm1hdGRlZiBsaWxlbmRpYW5fdGFibGVbXSA9IHsKICAgICB7J3gnLCAgICAgICAxLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIE5VTEx9LAotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0gICAgLyogTmF0aXZlIHBhY2tlcnMgZG8gcmFuZ2UgY2hlY2tpbmcgd2l0aG91dCBvdmVyZmxvdyBtYXNraW5nLiAqLwotICAgIHsnYicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfYnl0ZSwgICAgICAgIGxwX2ludH0sCi0gICAgeydCJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBudV91Ynl0ZSwgICAgICAgbHBfdWludH0sCi0jZWxzZQogICAgIHsnYicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfYnl0ZSwgICAgICAgIG5wX2J5dGV9LAogICAgIHsnQicsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfdWJ5dGUsICAgICAgIG5wX3VieXRlfSwKLSNlbmRpZgogICAgIHsnYycsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgbnVfY2hhciwgICAgICAgIG5wX2NoYXJ9LAogICAgIHsncycsICAgICAgIDEsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgTlVMTH0sCiAgICAgeydwJywgICAgICAgMSwgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICBOVUxMfSwKQEAgLTE2NTksNyArMTU0NCw4IEBACiAgICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7CiAgICAgICAgICAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKHYpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdzJyBtdXN0IGJlIGEgc3RyaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBzdHJpbmciKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUodik7CkBAIC0xNjcwLDcgKzE1NTYsOCBAQAogICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKICAgICAgICAgICAgIGlmICghUHlTdHJpbmdfQ2hlY2sodikpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncCcgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIHN0cmluZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBQeVN0cmluZ19HRVRfU0laRSh2KTsKQEAgLTE2ODEsMTMgKzE1NjgsMTQgQEAKICAgICAgICAgICAgIGlmIChuID4gMjU1KQogICAgICAgICAgICAgICAgIG4gPSAyNTU7CiAgICAgICAgICAgICAqcmVzID0gUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChlLT5wYWNrKHJlcywgdiwgZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uZyB0b28gbGFyZ2UgdG8gY29udmVydCB0byBpbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgeworICAgICAgICAgICAgaWYgKHN0cmNocihpbnRlZ2VyX2NvZGVzLCBlLT5mb3JtYXQpICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgb3V0IG9mIHJhbmdlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJWMnIGZvcm1hdCBjb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+Zm9ybWF0KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAzOSwxMCArMTkyNywxMCBAQAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1vZHVsZV9mdW5jdGlvbnNbXSA9IHsKICAgICB7Il9jbGVhcmNhY2hlIiwgICAgIChQeUNGdW5jdGlvbiljbGVhcmNhY2hlLCAgICAgICAgTUVUSF9OT0FSR1MsICAgIGNsZWFyY2FjaGVfZG9jfSwKLSAgICB7ImNhbGNzaXplIiwgICAgICAgIGNhbGNzaXplLCAgICAgICBNRVRIX08sICAgICAgICAgY2FsY3NpemVfZG9jfSwKKyAgICB7ImNhbGNzaXplIiwgICAgICAgIGNhbGNzaXplLCAgICAgICBNRVRIX08sIGNhbGNzaXplX2RvY30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBwYWNrLCAgICAgICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfZG9jfSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHBhY2tfaW50bywgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19pbnRvX2RvY30sCi0gICAgeyJ1bnBhY2siLCAgICAgICAgICB1bnBhY2ssICAgICAgICAgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LAorICAgIHsidW5wYWNrIiwgICAgICAgICAgdW5wYWNrLCBNRVRIX1ZBUkFSR1MsICAgdW5wYWNrX2RvY30sCiAgICAgeyJ1bnBhY2tfZnJvbSIsICAgICAoUHlDRnVuY3Rpb24pdW5wYWNrX2Zyb20sCiAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAgICAgICAgIHVucGFja19mcm9tX2RvY30sCiAgICAge05VTEwsICAgICAgIE5VTEx9ICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yMDk3LDI1ICsxOTg1LDkgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVN0cnVjdFR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKLSAgICBpZiAocHlpbnRfemVybyA9PSBOVUxMKSB7Ci0gICAgICAgIHB5aW50X3plcm8gPSBQeUludF9Gcm9tTG9uZygwKTsKLSAgICAgICAgaWYgKHB5aW50X3plcm8gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHB5bG9uZ191bG9uZ19tYXNrID09IE5VTEwpIHsKLSNpZiAoU0laRU9GX0xPTkcgPT0gNCkKLSAgICAgICAgcHlsb25nX3Vsb25nX21hc2sgPSBQeUxvbmdfRnJvbVN0cmluZygiRkZGRkZGRkYiLCBOVUxMLCAxNik7Ci0jZWxzZQotICAgICAgICBweWxvbmdfdWxvbmdfbWFzayA9IFB5TG9uZ19Gcm9tU3RyaW5nKCJGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOwotI2VuZGlmCi0gICAgICAgIGlmIChweWxvbmdfdWxvbmdfbWFzayA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2Vsc2UKLSAgICAvKiBUaGlzIHNwZWVkIHRyaWNrIGNhbid0IGJlIHVzZWQgdW50aWwgb3ZlcmZsb3cgbWFza2luZyBnb2VzIGF3YXksIGJlY2F1c2UKLSAgICAgICBuYXRpdmUgZW5kaWFuIGFsd2F5cyByYWlzZXMgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIG92ZXJmbG93IG1hc2tpbmcuICovCisgICAgLyogVGhpcyBzcGVlZCB0cmljayBjYW4ndCBiZSB1c2VkIHVudGlsIG92ZXJmbG93IG1hc2tpbmcgZ29lcworICAgICAgIGF3YXksIGJlY2F1c2UgbmF0aXZlIGVuZGlhbiBhbHdheXMgcmFpc2VzIGV4Y2VwdGlvbnMKKyAgICAgICBpbnN0ZWFkIG9mIG92ZXJmbG93IG1hc2tpbmcuICovCiAKICAgICAvKiBDaGVjayBlbmRpYW4gYW5kIHN3YXAgaW4gZmFzdGVyIGZ1bmN0aW9ucyAqLwogICAgIHsKQEAgLTIxNTUsNyArMjAyNyw2IEBACiAgICAgICAgICAgICBuYXRpdmUrKzsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogCiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBpZiAoU3RydWN0RXJyb3IgPT0gTlVMTCkgewpAQCAtMjE3MywxMSArMjA0NCw1IEBACiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfX3ZlcnNpb25fXyIsIHZlcik7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiX1BZX1NUUlVDVF9SQU5HRV9DSEVDS0lORyIsIDEpOwotI2lmZGVmIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIl9QWV9TVFJVQ1RfT1ZFUkZMT1dfTUFTS0lORyIsIDEpOwotI2VuZGlmCi0jaWZkZWYgUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJfUFlfU1RSVUNUX0ZMT0FUX0NPRVJDRSIsIDEpOwotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCmluZGV4IGVlNWFlNDguLjIzYTU2OTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgImRhdGV0aW1lLmgiCiAKICNpZmRlZiBXSVRIX1RIUkVBRAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCkBAIC0yODIsNiArMjgzLDEwMCBAQAogfQogCiAKKy8qIElzc3VlICM3Mzg1OiBDaGVjayB0aGF0IG1lbW9yeXZpZXcoKSBkb2VzIG5vdCBjcmFzaAorICogICB3aGVuIGJmX2dldGJ1ZmZlciByZXR1cm5zIGFuIGVycm9yCisgKi8KKworc3RhdGljIGludAorYnJva2VuX2J1ZmZlcl9nZXRidWZmZXIoUHlPYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQoreworICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgVGVzdEVycm9yLAorICAgICAgICAidGVzdF9icm9rZW5fbWVtb3J5dmlldzogZXhwZWN0ZWQgZXJyb3IgaW4gYmZfZ2V0YnVmZmVyIik7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgUHlCdWZmZXJQcm9jcyBtZW1vcnl2aWV3dGVzdGVyX2FzX2J1ZmZlciA9IHsKKyAgICAwLCAgICAgICAgICAvKiBiZl9nZXRyZWFkYnVmZmVyICovCisgICAgMCwgICAgICAgICAgLyogYmZfZ2V0d3JpdGVidWZmZXIgKi8KKyAgICAwLCAgICAgICAgICAvKiBiZl9nZXRzZWdjb3VudCAqLworICAgIDAsICAgICAgICAgIC8qIGJmX2dldGNoYXJidWZmZXIgKi8KKyAgICAoZ2V0YnVmZmVycHJvYylicm9rZW5fYnVmZmVyX2dldGJ1ZmZlciwgICAgIC8qIGJmX2dldGJ1ZmZlciAqLworICAgIDAsICAgICAgICAgIC8qIGJmX3JlbGVhc2VidWZmZXIgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgX01lbW9yeVZpZXdUZXN0ZXJfVHlwZSA9IHsKKyAgICBQeU9iamVjdF9IRUFEX0lOSVQoTlVMTCkKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGl0ZW1zIGZvciB2YXJvYmplY3QgKi8KKyAgICAibWVtb3J5dmlld3Rlc3RlciIsICAgICAgICAgLyogTmFtZSBvZiB0aGlzIHR5cGUgKi8KKyAgICBzaXplb2YoUHlPYmplY3QpLCAgICAgICAgICAgLyogQmFzaWMgb2JqZWN0IHNpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSXRlbSBzaXplIGZvciB2YXJvYmplY3QgKi8KKyAgICAoZGVzdHJ1Y3RvcilQeU9iamVjdF9EZWwsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgICZtZW1vcnl2aWV3dGVzdGVyX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSLCAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCoKK3Rlc3RfYnJva2VuX21lbW9yeXZpZXcoUHlPYmplY3QqIHNlbGYpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5T2JqZWN0X05ldyhQeU9iamVjdCwgJl9NZW1vcnlWaWV3VGVzdGVyX1R5cGUpOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgVGVzdEVycm9yLAorICAgICAgICAgICAgInRlc3RfYnJva2VuX21lbW9yeXZpZXc6IGZhaWxlZCB0byBjcmVhdGUgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlcyA9IFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KG9iaik7CisgICAgaWYgKHJlcyB8fCAhUHlFcnJfT2NjdXJyZWQoKSl7CisgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgIFRlc3RFcnJvciwKKyAgICAgICAgICAgICJ0ZXN0X2Jyb2tlbl9tZW1vcnl2aWV3OiBtZW1vcnl2aWV3KCkgZGlkbid0IHJhaXNlIGFuIEV4Y2VwdGlvbiIpOworICAgICAgICBQeV9YREVDUkVGKHJlcyk7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeUVycl9DbGVhcigpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisKIC8qIFRlc3RzIG9mIFB5TG9uZ197QXMsIEZyb219e1Vuc2lnbmVkLH1Mb25nKCksIGFuZCAoI2lmZGVmIEhBVkVfTE9OR19MT05HKQogICAgUHlMb25nX3tBcywgRnJvbX17VW5zaWduZWQsfUxvbmdMb25nKCkuCiAKQEAgLTM1Nyw2ICs0NTIsMzM2IEBACiAjdW5kZWYgRl9VX1RPX1BZCiAjdW5kZWYgRl9QWV9UT19VCiAKKy8qIFRlc3QgdGhlIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyBBUEkuIEdlbmVyYWwgY29udmVyc2lvbiB0byBQWV9MT05HCisgICBpcyB0ZXN0ZWQgYnkgdGVzdF9sb25nX2FwaV9pbm5lci4gVGhpcyB0ZXN0IHdpbGwgY29uY2VudHJhdGUgb24gcHJvcGVyCisgICBoYW5kbGluZyBvZiBvdmVyZmxvdy4KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2xvbmdfYW5kX292ZXJmbG93KFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpudW0sICpvbmUsICp0ZW1wOworICAgIGxvbmcgdmFsdWU7CisgICAgaW50IG92ZXJmbG93OworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIHNldCBwcm9wZXJseSBmb3IgYSBsYXJnZSB2YWx1ZS4gKi8KKyAgICAvKiBudW0gaXMgYSBudW1iZXIgbGFyZ2VyIHRoYW4gTE9OR19NQVggZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsIE5VTEwsIDE2KTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMTIzNDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IExPTkdfTUFYICsgMSAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhMT05HX01BWCk7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9BZGQobnVtLCBvbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIG51bSA9IHRlbXA7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gMSIpOworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIHNldCBwcm9wZXJseSBmb3IgYSBsYXJnZSBuZWdhdGl2ZSB2YWx1ZS4gKi8KKyAgICAvKiBudW0gaXMgYSBudW1iZXIgc21hbGxlciB0aGFuIExPTkdfTUlOIGV2ZW4gb24gNjQtYml0IHBsYXRmb3JtcyAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCItRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAtMSIpOworCisgICAgLyogU2FtZSBhZ2Fpbiwgd2l0aCBudW0gPSBMT05HX01JTiAtIDEgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmcoTE9OR19NSU4pOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICBpZiAob25lID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG51bSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0ZW1wID0gUHlOdW1iZXJfU3VidHJhY3QobnVtLCBvbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIG51bSA9IHRlbXA7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIC0xIik7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgY2xlYXJlZCBwcm9wZXJseSBmb3Igc21hbGwgdmFsdWVzLiAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCJGRiIsIE5VTEwsIDE2KTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMTIzNDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAweEZGKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSAweEZGIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBjbGVhcmVkIik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiLUZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0weEZGKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSAweEZGIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIHNldCBpbmNvcnJlY3RseSIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKExPTkdfTUFYKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMTIzNDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBMT05HX01BWCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgTE9OR19NQVgiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhMT05HX01JTik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTE9OR19NSU4pCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIExPTkdfTUlOIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBjbGVhcmVkIik7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKKy8qIFRlc3QgdGhlIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cgQVBJLiBHZW5lcmFsIGNvbnZlcnNpb24gdG8KKyAgIFBZX0xPTkdfTE9ORyBpcyB0ZXN0ZWQgYnkgdGVzdF9sb25nX2FwaV9pbm5lci4gVGhpcyB0ZXN0IHdpbGwKKyAgIGNvbmNlbnRyYXRlIG9uIHByb3BlciBoYW5kbGluZyBvZiBvdmVyZmxvdy4KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3coUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm51bSwgKm9uZSwgKnRlbXA7CisgICAgUFlfTE9OR19MT05HIHZhbHVlOworICAgIGludCBvdmVyZmxvdzsKKworICAgIC8qIFRlc3QgdGhhdCBvdmVyZmxvdyBpcyBzZXQgcHJvcGVybHkgZm9yIGEgbGFyZ2UgdmFsdWUuICovCisgICAgLyogbnVtIGlzIGEgbnVtYmVyIGxhcmdlciB0aGFuIFBZX0xMT05HX01BWCBvbiBhIHR5cGljYWwgbWFjaGluZS4gKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAxKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gMSIpOworCisgICAgLyogU2FtZSBhZ2Fpbiwgd2l0aCBudW0gPSBQWV9MTE9OR19NQVggKyAxICovCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MTE9OR19NQVgpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICBpZiAob25lID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG51bSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0ZW1wID0gUHlOdW1iZXJfQWRkKG51bSwgb25lKTsKKyAgICBQeV9ERUNSRUYob25lKTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBudW0gPSB0ZW1wOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAxKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gMSIpOworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIHNldCBwcm9wZXJseSBmb3IgYSBsYXJnZSBuZWdhdGl2ZSB2YWx1ZS4gKi8KKyAgICAvKiBudW0gaXMgYSBudW1iZXIgc21hbGxlciB0aGFuIFBZX0xMT05HX01JTiBvbiBhIHR5cGljYWwgcGxhdGZvcm0gKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiLUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRiIsIE5VTEwsIDE2KTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMTIzNDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAtMSIpOworCisgICAgLyogU2FtZSBhZ2Fpbiwgd2l0aCBudW0gPSBQWV9MTE9OR19NSU4gLSAxICovCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MTE9OR19NSU4pOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDFMKTsKKyAgICBpZiAob25lID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG51bSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0ZW1wID0gUHlOdW1iZXJfU3VidHJhY3QobnVtLCBvbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIG51bSA9IHRlbXA7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKworICAgIC8qIFRlc3QgdGhhdCBvdmVyZmxvdyBpcyBjbGVhcmVkIHByb3Blcmx5IGZvciBzbWFsbCB2YWx1ZXMuICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAweEZGKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIDB4RkYiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3QgY2xlYXJlZCIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIi1GRiIsIE5VTEwsIDE2KTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgMHhGRiIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIHNldCBpbmNvcnJlY3RseSIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MTE9OR19NQVgpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBQWV9MTE9OR19NQVgpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgUFlfTExPTkdfTUFYIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZ0xvbmcoUFlfTExPTkdfTUlOKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gUFlfTExPTkdfTUlOKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIFBZX0xMT05HX01JTiIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBjbGVhcmVkIik7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKIC8qIFRlc3QgdGhlIEwgY29kZSBmb3IgUHlBcmdfUGFyc2VUdXBsZS4gIFRoaXMgc2hvdWxkIGRlbGl2ZXIgYSBQWV9MT05HX0xPTkcKICAgIGZvciBib3RoIGxvbmcgYW5kIGludCBhcmd1bWVudHMuICBUaGUgdGVzdCBtYXkgbGVhayBhIGxpdHRsZSBtZW1vcnkgaWYKICAgIGl0IGZhaWxzLgpAQCAtNDUzLDYgKzg3OCwxNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19oKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBzaG9ydCB2YWx1ZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImgiLCAmdmFsdWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKXZhbHVlKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGdldGFyZ3NfSChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CkBAIC02MzAsNiArMTA2NCw0OCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgordGVzdF93aWRlY2hhcihQeU9iamVjdCAqc2VsZikKK3sKKyNpZiBkZWZpbmVkKFNJWkVPRl9XQ0hBUl9UKSAmJiAoU0laRU9GX1dDSEFSX1QgPT0gNCkKKyAgICBjb25zdCB3Y2hhcl90IHd0ZXh0WzJdID0geyh3Y2hhcl90KTB4MTBBQkNEdX07CisgICAgc2l6ZV90IHd0ZXh0bGVuID0gMTsKKyNlbHNlCisgICAgY29uc3Qgd2NoYXJfdCB3dGV4dFszXSA9IHsod2NoYXJfdCkweERCRUF1LCAod2NoYXJfdCkweERGQ0R1fTsKKyAgICBzaXplX3Qgd3RleHRsZW4gPSAyOworI2VuZGlmCisgICAgUHlPYmplY3QgKndpZGUsICp1dGY4OworCisgICAgd2lkZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3RleHQsIHd0ZXh0bGVuKTsKKyAgICBpZiAod2lkZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHV0ZjggPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXHhmNFx4OGFceGFmXHg4ZCIpOworICAgIGlmICh1dGY4ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKHdpZGUpICE9IFB5VW5pY29kZV9HRVRfU0laRSh1dGY4KSkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlIHN0cmluZyBhbmQgdXRmOCBzdHJpbmcgaGF2ZSBkaWZmZXJlbnQgbGVuZ3RoIik7CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZSh3aWRlLCB1dGY4KSkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlIHN0cmluZyBhbmQgdXRmOCBzdHJpbmcgYXJlIGRpZmZlcmVudHMiKTsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgUHlfREVDUkVGKHV0ZjgpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogdGVzdF9lbXB0eV9hcmdwYXJzZShQeU9iamVjdCAqc2VsZikKIHsKICAgICAvKiBUZXN0IHRoYXQgZm9ybWF0cyBjYW4gYmVnaW4gd2l0aCAnfCcuIFNlZSBpc3N1ZSAjNDcyMC4gKi8KQEAgLTc2Miw2ICsxMjM4LDMxIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKworc3RhdGljIGludCB0ZXN0X3J1bl9jb3VudGVyID0gMDsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfZGF0ZXRpbWVfY2FwaShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIHsKKyAgICBpZiAoUHlEYXRlVGltZUFQSSkgeworICAgICAgICBpZiAodGVzdF9ydW5fY291bnRlcikgeworICAgICAgICAgICAgLyogUHJvYmFibHkgcmVncnRlc3QucHkgLVIgKi8KKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0Fzc2VydGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeURhdGVUaW1lX0NBUEkgc29tZWhvdyBpbml0aWFsaXplZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgdGVzdF9ydW5fY291bnRlcisrOworICAgIFB5RGF0ZVRpbWVfSU1QT1JUOworICAgIGlmIChQeURhdGVUaW1lQVBJKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworfQorCisKICNpZmRlZiBXSVRIX1RIUkVBRAogCiAvKiB0ZXN0X3RocmVhZF9zdGF0ZSBzcGF3bnMgYSB0aHJlYWQgb2YgaXRzIG93biwgYW5kIHRoYXQgdGhyZWFkIHJlbGVhc2VzCkBAIC04NDYsNiArMTM0Nyw0MyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KKworLyogdGVzdCBQeV9BZGRQZW5kaW5nQ2FsbHMgdXNpbmcgdGhyZWFkcyAqLworc3RhdGljIGludCBfcGVuZGluZ19jYWxsYmFjayh2b2lkICphcmcpCit7CisgICAgLyogd2UgYXNzdW1lIHRoZSBhcmd1bWVudCBpcyBjYWxsYWJsZSBvYmplY3QgdG8gd2hpY2ggd2Ugb3duIGEgcmVmZXJlbmNlICovCisgICAgUHlPYmplY3QgKmNhbGxhYmxlID0gKFB5T2JqZWN0ICopYXJnOworICAgIFB5T2JqZWN0ICpyID0gUHlPYmplY3RfQ2FsbE9iamVjdChjYWxsYWJsZSwgTlVMTCk7CisgICAgUHlfREVDUkVGKGNhbGxhYmxlKTsKKyAgICBQeV9YREVDUkVGKHIpOworICAgIHJldHVybiByICE9IE5VTEwgPyAwIDogLTE7Cit9CisKKy8qIFRoZSBmb2xsb3dpbmcgcmVxdWVzdHMgbiBjYWxsYmFja3MgdG8gX3BlbmRpbmdfY2FsbGJhY2suICBJdCBjYW4gYmUKKyAqIHJ1biBmcm9tIGFueSBweXRob24gdGhyZWFkLgorICovCitQeU9iamVjdCAqcGVuZGluZ190aHJlYWRmdW5jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpjYWxsYWJsZTsKKyAgICBpbnQgcjsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmcsICJPIiwgJmNhbGxhYmxlKSA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIGNyZWF0ZSB0aGUgcmVmZXJlbmNlIGZvciB0aGUgY2FsbGJhY2t3aGlsZSB3ZSBob2xkIHRoZSBsb2NrICovCisgICAgUHlfSU5DUkVGKGNhbGxhYmxlKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByID0gUHlfQWRkUGVuZGluZ0NhbGwoJl9wZW5kaW5nX2NhbGxiYWNrLCBjYWxsYWJsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyPDApIHsKKyAgICAgICAgUHlfREVDUkVGKGNhbGxhYmxlKTsgLyogdW5zdWNjZXNzZnVsIGFkZCwgZGVzdHJveSB0aGUgZXh0cmEgcmVmZXJlbmNlICovCisgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7CisgICAgICAgIHJldHVybiBQeV9GYWxzZTsKKyAgICB9CisgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgIHJldHVybiBQeV9UcnVlOworfQogI2VuZGlmCiAKIC8qIFNvbWUgdGVzdHMgb2YgUHlTdHJpbmdfRnJvbUZvcm1hdCgpLiAgVGhpcyBuZWVkcyBtb3JlIHRlc3RzLiAqLwpAQCAtODc1LDYgKzE0MTMsMTIgQEAKICAgICBDSEVDS18xX0ZPUk1BVCgiJWx1IiwgdW5zaWduZWQgbG9uZyk7CiAgICAgQ0hFQ0tfMV9GT1JNQVQoIiV6dSIsIHNpemVfdCk7CiAKKyAgICAvKiAiJWxsZCIgYW5kICIlbGx1IiBzdXBwb3J0IGFkZGVkIGluIFB5dGhvbiAyLjcuICovCisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICBDSEVDS18xX0ZPUk1BVCgiJWxsdSIsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyk7CisgICAgQ0hFQ0tfMV9GT1JNQVQoIiVsbGQiLCBQWV9MT05HX0xPTkcpOworI2VuZGlmCisKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogIEZhaWw6CkBAIC04ODQsNiArMTQyOCwxNTcgQEAKICN1bmRlZiBDSEVDS18xX0ZPUk1BVAogfQogCisvKiBDb3ZlcmFnZSB0ZXN0aW5nIG9mIGNhcHN1bGUgb2JqZWN0cy4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmNhcHN1bGVfbmFtZSA9ICJjYXBzdWxlIG5hbWUiOworc3RhdGljICAgICAgIGNoYXIgKmNhcHN1bGVfcG9pbnRlciA9ICJjYXBzdWxlIHBvaW50ZXIiOworc3RhdGljICAgICAgIGNoYXIgKmNhcHN1bGVfY29udGV4dCA9ICJjYXBzdWxlIGNvbnRleHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmNhcHN1bGVfZXJyb3IgPSBOVUxMOworc3RhdGljIGludAorY2Fwc3VsZV9kZXN0cnVjdG9yX2NhbGxfY291bnQgPSAwOworCitzdGF0aWMgdm9pZAorY2Fwc3VsZV9kZXN0cnVjdG9yKFB5T2JqZWN0ICpvKSB7CisgICAgY2Fwc3VsZV9kZXN0cnVjdG9yX2NhbGxfY291bnQrKzsKKyAgICBpZiAoUHlDYXBzdWxlX0dldENvbnRleHQobykgIT0gY2Fwc3VsZV9jb250ZXh0KSB7CisgICAgICAgIGNhcHN1bGVfZXJyb3IgPSAiY29udGV4dCBkaWQgbm90IG1hdGNoIGluIGRlc3RydWN0b3IhIjsKKyAgICB9IGVsc2UgaWYgKFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yKG8pICE9IGNhcHN1bGVfZGVzdHJ1Y3RvcikgeworICAgICAgICBjYXBzdWxlX2Vycm9yID0gImRlc3RydWN0b3IgZGlkIG5vdCBtYXRjaCBpbiBkZXN0cnVjdG9yISAgKHdvYWghKSI7CisgICAgfSBlbHNlIGlmIChQeUNhcHN1bGVfR2V0TmFtZShvKSAhPSBjYXBzdWxlX25hbWUpIHsKKyAgICAgICAgY2Fwc3VsZV9lcnJvciA9ICJuYW1lIGRpZCBub3QgbWF0Y2ggaW4gZGVzdHJ1Y3RvciEiOworICAgIH0gZWxzZSBpZiAoUHlDYXBzdWxlX0dldFBvaW50ZXIobywgY2Fwc3VsZV9uYW1lKSAhPSBjYXBzdWxlX3BvaW50ZXIpIHsKKyAgICAgICAgY2Fwc3VsZV9lcnJvciA9ICJwb2ludGVyIGRpZCBub3QgbWF0Y2ggaW4gZGVzdHJ1Y3RvciEiOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgY2hhciAqbW9kdWxlOworICAgIGNoYXIgKmF0dHJpYnV0ZTsKK30ga25vd25fY2Fwc3VsZTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfY2Fwc3VsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iamVjdDsKKyAgICBjb25zdCBjaGFyICplcnJvciA9IE5VTEw7CisgICAgdm9pZCAqcG9pbnRlcjsKKyAgICB2b2lkICpwb2ludGVyMjsKKyAgICBrbm93bl9jYXBzdWxlIGtub3duX2NhcHN1bGVzW10gPSB7CisgICAgICAgICNkZWZpbmUgS05PV05fQ0FQU1VMRShtb2R1bGUsIG5hbWUpICAgICAgICAgICAgIHsgbW9kdWxlICIuIiBuYW1lLCBtb2R1bGUsIG5hbWUgfQorICAgICAgICBLTk9XTl9DQVBTVUxFKCJfc29ja2V0IiwgIkNBUEkiKSwKKyAgICAgICAgS05PV05fQ0FQU1VMRSgiX2N1cnNlcyIsICJfQ19BUEkiKSwKKyAgICAgICAgS05PV05fQ0FQU1VMRSgiZGF0ZXRpbWUiLCAiZGF0ZXRpbWVfQ0FQSSIpLAorICAgICAgICB7IE5VTEwsIE5VTEwgfSwKKyAgICB9OworICAgIGtub3duX2NhcHN1bGUgKmtub3duID0gJmtub3duX2NhcHN1bGVzWzBdOworCisjZGVmaW5lIEZBSUwoeCkgeyBlcnJvciA9ICh4KTsgZ290byBleGl0OyB9CisKKyNkZWZpbmUgQ0hFQ0tfREVTVFJVQ1RPUiBcCisgICAgaWYgKGNhcHN1bGVfZXJyb3IpIHsgXAorICAgICAgICBGQUlMKGNhcHN1bGVfZXJyb3IpOyBcCisgICAgfSBcCisgICAgZWxzZSBpZiAoIWNhcHN1bGVfZGVzdHJ1Y3Rvcl9jYWxsX2NvdW50KSB7ICAgICAgICAgIFwKKyAgICAgICAgRkFJTCgiZGVzdHJ1Y3RvciBub3QgY2FsbGVkISIpOyBcCisgICAgfSBcCisgICAgY2Fwc3VsZV9kZXN0cnVjdG9yX2NhbGxfY291bnQgPSAwOyBcCisKKyAgICBvYmplY3QgPSBQeUNhcHN1bGVfTmV3KGNhcHN1bGVfcG9pbnRlciwgY2Fwc3VsZV9uYW1lLCBjYXBzdWxlX2Rlc3RydWN0b3IpOworICAgIFB5Q2Fwc3VsZV9TZXRDb250ZXh0KG9iamVjdCwgY2Fwc3VsZV9jb250ZXh0KTsKKyAgICBjYXBzdWxlX2Rlc3RydWN0b3Iob2JqZWN0KTsKKyAgICBDSEVDS19ERVNUUlVDVE9SOworICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgIENIRUNLX0RFU1RSVUNUT1I7CisKKyAgICBvYmplY3QgPSBQeUNhcHN1bGVfTmV3KGtub3duLCAiaWdub3JlZCIsIE5VTEwpOworICAgIFB5Q2Fwc3VsZV9TZXRQb2ludGVyKG9iamVjdCwgY2Fwc3VsZV9wb2ludGVyKTsKKyAgICBQeUNhcHN1bGVfU2V0TmFtZShvYmplY3QsIGNhcHN1bGVfbmFtZSk7CisgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3Iob2JqZWN0LCBjYXBzdWxlX2Rlc3RydWN0b3IpOworICAgIFB5Q2Fwc3VsZV9TZXRDb250ZXh0KG9iamVjdCwgY2Fwc3VsZV9jb250ZXh0KTsKKyAgICBjYXBzdWxlX2Rlc3RydWN0b3Iob2JqZWN0KTsKKyAgICBDSEVDS19ERVNUUlVDVE9SOworICAgIC8qIGludGVudGlvbmFsbHkgYWNjZXNzIHVzaW5nIHRoZSB3cm9uZyBuYW1lICovCisgICAgcG9pbnRlcjIgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmplY3QsICJ0aGUgd3JvbmcgbmFtZSIpOworICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBGQUlMKCJQeUNhcHN1bGVfR2V0UG9pbnRlciBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZCBub3QhIik7CisgICAgfQorICAgIFB5RXJyX0NsZWFyKCk7CisgICAgaWYgKHBvaW50ZXIyKSB7CisgICAgICAgIGlmIChwb2ludGVyMiA9PSBjYXBzdWxlX3BvaW50ZXIpIHsKKyAgICAgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHNob3VsZCBub3QgaGF2ZSIKKyAgICAgICAgICAgICAgICAgICAgICIgcmV0dXJuZWQgdGhlIGludGVybmFsIHBvaW50ZXIhIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGQUlMKCJQeUNhcHN1bGVfR2V0UG9pbnRlciBzaG91bGQgaGF2ZSAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgTlVMTCBwb2ludGVyIGJ1dCBkaWQgbm90ISIpOworICAgICAgICB9CisgICAgfQorICAgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yKG9iamVjdCwgTlVMTCk7CisgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgaWYgKGNhcHN1bGVfZGVzdHJ1Y3Rvcl9jYWxsX2NvdW50KSB7CisgICAgICAgIEZBSUwoImRlc3RydWN0b3IgY2FsbGVkIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4hIik7CisgICAgfQorCisgICAgZm9yIChrbm93biA9ICZrbm93bl9jYXBzdWxlc1swXTsga25vd24tPm1vZHVsZSAhPSBOVUxMOyBrbm93bisrKSB7CisgICAgICAgIC8qIHllYWgsIG9yZGluYXJpbHkgSSB3b3VsZG4ndCBkbyB0aGlzIGVpdGhlciwKKyAgICAgICAgICAgYnV0IGl0J3MgZmluZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuCisgICAgICAgICovCisgICAgICAgIHN0YXRpYyBjaGFyIGJ1ZmZlclsyNTZdOworI3VuZGVmIEZBSUwKKyNkZWZpbmUgRkFJTCh4KSBcCisgICAgICAgIHsgXAorICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzIG1vZHVsZTogXCIlc1wiIGF0dHJpYnV0ZTogXCIlc1wiIiwgXAorICAgICAgICAgICAgeCwga25vd24tPm1vZHVsZSwga25vd24tPmF0dHJpYnV0ZSk7IFwKKyAgICAgICAgZXJyb3IgPSBidWZmZXI7IFwKKyAgICAgICAgZ290byBleGl0OyBcCisgICAgICAgIH0gXAorCisgICAgICAgIFB5T2JqZWN0ICptb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoa25vd24tPm1vZHVsZSk7CisgICAgICAgIGlmIChtb2R1bGUpIHsKKyAgICAgICAgICAgIHBvaW50ZXIgPSBQeUNhcHN1bGVfSW1wb3J0KGtub3duLT5uYW1lLCAwKTsKKyAgICAgICAgICAgIGlmICghcG9pbnRlcikgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOworICAgICAgICAgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHJldHVybmVkIE5VTEwgdW5leHBlY3RlZGx5ISIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqZWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2R1bGUsIGtub3duLT5hdHRyaWJ1dGUpOworICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvaW50ZXIyID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlZWJsZXMgd29iYmxlIGJ1dCB0aGV5IGRvbid0IGZhbGwgZG93biIpOworICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7CisgICAgICAgICAgICAgICAgRkFJTCgiUHlDYXBzdWxlX0dldFBvaW50ZXIgc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBkaWQgbm90ISIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyMikgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgICAgIGlmIChwb2ludGVyMiA9PSBwb2ludGVyKSB7CisgICAgICAgICAgICAgICAgICAgIEZBSUwoIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIHNob3VsZCBub3QgaGF2ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCBpdHMgaW50ZXJuYWwgcG9pbnRlciEiKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBGQUlMKCJQeUNhcHN1bGVfR2V0UG9pbnRlciBzaG91bGQgaGF2ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCBOVUxMIHBvaW50ZXIgYnV0IGRpZCBub3QhIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKworICBleGl0OgorICAgIGlmIChlcnJvcikgeworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfY2Fwc3VsZSIsIGVycm9yKTsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CisjdW5kZWYgRkFJTAorfQorCiAvKiBUaGlzIGlzIGhlcmUgdG8gcHJvdmlkZSBhIGRvY3N0cmluZyBmb3IgdGVzdF9kZXNjci4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXN0X3dpdGhfZG9jc3RyaW5nKFB5T2JqZWN0ICpzZWxmKQpAQCAtOTA5LDEzICsxNjA0LDUyIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qIFRvIHRlc3QgdGhhdCB0aGUgcmVzdWx0IG9mIFB5Q29kZV9OZXdFbXB0eSBoYXMgdGhlIHJpZ2h0IG1lbWJlcnMuICovCitzdGF0aWMgUHlPYmplY3QgKgorY29kZV9uZXdlbXB0eShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgICAgY29uc3QgY2hhciAqZnVuY25hbWU7CisgICAgaW50IGZpcnN0bGluZW5vOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc2k6Y29kZV9uZXdlbXB0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZSwgJmZ1bmNuYW1lLCAmZmlyc3RsaW5lbm8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiAoUHlPYmplY3QgKilQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBmaXJzdGxpbmVubyk7Cit9CisKKy8qIFRlc3QgUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyAoYWxzbyBleGVyY2lzZSBQeUVycl9OZXdFeGNlcHRpb24pLgorICAgUnVuIHZpYSBMaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkgKi8KK3N0YXRpYyBQeU9iamVjdCAqCittYWtlX2V4Y2VwdGlvbl93aXRoX2RvYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgY2hhciAqbmFtZTsKKyAgICBjaGFyICpkb2MgPSBOVUxMOworICAgIFB5T2JqZWN0ICpiYXNlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZGljdCA9IE5VTEw7CisKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im5hbWUiLCAiZG9jIiwgImJhc2UiLCAiZGljdCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAic3xzT086bWFrZV9leGNlcHRpb25fd2l0aF9kb2MiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZkb2MsICZiYXNlLCAmZGljdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MobmFtZSwgZG9jLCBiYXNlLCBkaWN0KTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIFRlc3RNZXRob2RzW10gPSB7CiAgICAgeyJyYWlzZV9leGNlcHRpb24iLCAgICAgICAgIHJhaXNlX2V4Y2VwdGlvbiwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ0ZXN0X2NvbmZpZyIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2NvbmZpZywgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfZGF0ZXRpbWVfY2FwaSIsICB0ZXN0X2RhdGV0aW1lX2NhcGksICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xpc3RfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xpc3RfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGljdF9pdGVyYXRpb24iLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfZGljdF9pdGVyYXRpb24sTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UiLCAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSxNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2Jyb2tlbl9tZW1vcnl2aWV3IiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfYnJva2VuX21lbW9yeXZpZXcsTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FwaSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FwaSwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hbmRfb3ZlcmZsb3csCisgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19udW1iaXRzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19udW1iaXRzLCAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9rX2NvZGUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9rX2NvZGUsICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2VtcHR5X2FyZ3BhcnNlIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfZW1wdHlfYXJncGFyc2UsTUVUSF9OT0FSR1N9LApAQCAtOTI5LDYgKzE2NjMsNyBAQAogICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZ2V0YXJnc19iIiwgICAgICAgICAgICAgICBnZXRhcmdzX2IsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19CIiwgICAgICAgICAgICAgICBnZXRhcmdzX0IsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19oIiwgICAgICAgICAgICAgICBnZXRhcmdzX2gsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19IIiwgICAgICAgICAgICAgICBnZXRhcmdzX0gsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19JIiwgICAgICAgICAgICAgICBnZXRhcmdzX0ksICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19rIiwgICAgICAgICAgICAgICBnZXRhcmdzX2ssICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LApAQCAtOTM5LDYgKzE2NzQsOCBAQAogICAgIHsiZ2V0YXJnc19MIiwgICAgICAgICAgICAgICBnZXRhcmdzX0wsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19LIiwgICAgICAgICAgICAgICBnZXRhcmdzX0ssICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsidGVzdF9sb25nbG9uZ19hcGkiLCAgICAgICB0ZXN0X2xvbmdsb25nX2FwaSwgICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93LCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X0xfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X0xfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7ImNvZGVjX2luY3JlbWVudGFsZW5jb2RlciIsCiAgICAgIChQeUNGdW5jdGlvbiljb2RlY19pbmNyZW1lbnRhbGVuY29kZXIsICAgICAgTUVUSF9WQVJBUkdTfSwKQEAgLTk0NywxMSArMTY4NCwxNyBAQAogI2VuZGlmCiAjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgIHsidGVzdF91X2NvZGUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF91X2NvZGUsICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3dpZGVjaGFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpZGVjaGFyLCAgICAgIE1FVEhfTk9BUkdTfSwKICNlbmRpZgogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgeyJfdGVzdF90aHJlYWRfc3RhdGUiLCAgdGVzdF90aHJlYWRfc3RhdGUsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJfcGVuZGluZ190aHJlYWRmdW5jIiwgICAgIHBlbmRpbmdfdGhyZWFkZnVuYywgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKKyAgICB7InRlc3RfY2Fwc3VsZSIsIChQeUNGdW5jdGlvbil0ZXN0X2NhcHN1bGUsIE1FVEhfTk9BUkdTfSwKICAgICB7InRyYWNlYmFja19wcmludCIsIHRyYWNlYmFja19wcmludCwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2RlX25ld2VtcHR5IiwgY29kZV9uZXdlbXB0eSwgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsibWFrZV9leGNlcHRpb25fd2l0aF9kb2MiLCAoUHlDRnVuY3Rpb24pbWFrZV9leGNlcHRpb25fd2l0aF9kb2MsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGtpbnRlci5jIGIvTW9kdWxlcy9fdGtpbnRlci5jCmluZGV4IGI4OTI5YjYuLjAxZDYyODQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RraW50ZXIuYworKysgYi9Nb2R1bGVzL190a2ludGVyLmMKQEAgLTksOSArOSw5IEBACiAKIC8qIFRDTC9USyBWRVJTSU9OIElORk86CiAKLSAgICBPbmx5IFRjbC9UayA4LjIgYW5kIGxhdGVyIGFyZSBzdXBwb3J0ZWQuICBPbGRlciB2ZXJzaW9ucyBhcmUgbm90Ci0gICAgc3VwcG9ydGVkLiAgKFVzZSBQeXRob24gMi4yIGlmIHlvdSBjYW5ub3QgdXBncmFkZSB5b3VyIFRjbC9UawotICAgIGxpYnJhcmllcy4pCisgICAgT25seSBUY2wvVGsgOC4zLjEgYW5kIGxhdGVyIGFyZSBzdXBwb3J0ZWQuICBPbGRlciB2ZXJzaW9ucyBhcmUgbm90CisgICAgc3VwcG9ydGVkLiBVc2UgUHl0aG9uIDIuNiBvciBvbGRlciBpZiB5b3UgY2Fubm90IHVwZ3JhZGUgeW91cgorICAgIFRjbC9UayBsaWJyYXJpZXMuCiAqLwogCiAvKiBYWFggRnVydGhlciBzcGVlZC11cCBpZGVhcywgaW52b2x2aW5nIFRjbCA4LjAgZmVhdHVyZXM6CkBAIC02Nyw2ICs2Nyw4IEBACiAjaW5jbHVkZSA8dGsuaD4KICNlbmRpZgogCisjaW5jbHVkZSAidGtpbnRlci5oIgorCiAvKiBGb3IgVGNsIDguMiBhbmQgOC4zLCBDT05TVCogaXMgbm90IGRlZmluZWQgKGV4Y2VwdCBvbiBDeWd3aW4pLiAqLwogI2lmbmRlZiBDT05TVDg0X1JFVFVSTgogI2RlZmluZSBDT05TVDg0X1JFVFVSTgpAQCAtNzQsMTAgKzc2LDggQEAKICNkZWZpbmUgQ09OU1QKICNlbmRpZgogCi0jZGVmaW5lIFRLTUFKT1JNSU5PUiAoVEtfTUFKT1JfVkVSU0lPTioxMDAwICsgVEtfTUlOT1JfVkVSU0lPTikKLQotI2lmIFRLTUFKT1JNSU5PUiA8IDgwMDIKLSNlcnJvciAiVGsgb2xkZXIgdGhhbiA4LjIgbm90IHN1cHBvcnRlZCIKKyNpZiBUS19WRVJTSU9OX0hFWCA8IDB4MDgwMzAxMDIKKyNlcnJvciAiVGsgb2xkZXIgdGhhbiA4LjMuMSBub3Qgc3VwcG9ydGVkIgogI2VuZGlmCiAKIC8qIFVuaWNvZGUgY29udmVyc2lvbiBhc3N1bWVzIHRoYXQgVGNsX1VuaUNoYXIgaXMgdHdvIGJ5dGVzLgpAQCAtMjgwLDYgKzI4MCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKnZhbEluQ21kOwogc3RhdGljIFB5T2JqZWN0ICp0cmJJbkNtZDsKIAorI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKK3N0YXRpYyBpbnQgdGtfbG9hZF9mYWlsZWQ7CisjZW5kaWYKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTU1LDIxICs1NTgsMzUgQEAKIGludAogVGNsX0FwcEluaXQoVGNsX0ludGVycCAqaW50ZXJwKQogewotICAgIFRrX1dpbmRvdyBtYWluOwogICAgIGNvbnN0IGNoYXIgKiBfdGtpbnRlcl9za2lwX3RrX2luaXQ7CiAKICAgICBpZiAoVGNsX0luaXQoaW50ZXJwKSA9PSBUQ0xfRVJST1IpIHsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlRjbF9Jbml0IGVycm9yOiAlc1xuIiwgVGNsX0dldFN0cmluZ1Jlc3VsdChpbnRlcnApKTsKICAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKICAgICB9Ci0gICAgX3RraW50ZXJfc2tpcF90a19pbml0ID0gICAgIFRjbF9HZXRWYXIoaW50ZXJwLCAiX3RraW50ZXJfc2tpcF90a19pbml0IiwgVENMX0dMT0JBTF9PTkxZKTsKLSAgICBpZiAoX3RraW50ZXJfc2tpcF90a19pbml0ID09IE5VTEwgfHwgc3RyY21wKF90a2ludGVyX3NraXBfdGtfaW5pdCwgIjEiKSAgICAgIT0gMCkgewotICAgICAgICBtYWluID0gVGtfTWFpbldpbmRvdyhpbnRlcnApOwotICAgICAgICBpZiAoVGtfSW5pdChpbnRlcnApID09IFRDTF9FUlJPUikgewotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlRrX0luaXQgZXJyb3I6ICVzXG4iLCBUY2xfR2V0U3RyaW5nUmVzdWx0KGludGVycCkpOwotICAgICAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKLSAgICAgICAgfQorCisgICAgX3RraW50ZXJfc2tpcF90a19pbml0ID0gVGNsX0dldFZhcihpbnRlcnAsCisgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlcl9za2lwX3RrX2luaXQiLCBUQ0xfR0xPQkFMX09OTFkpOworICAgIGlmIChfdGtpbnRlcl9za2lwX3RrX2luaXQgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICBzdHJjbXAoX3RraW50ZXJfc2tpcF90a19pbml0LCAiMSIpID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRDTF9PSzsKICAgICB9CisKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgaWYgKHRrX2xvYWRfZmFpbGVkKSB7CisgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJUa19Jbml0IGVycm9yOiAlc1xuIiwgVEtJTlRFUl9MT0FEVEtfRVJSTVNHKTsKKyAgICAgICAgcmV0dXJuIFRDTF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChUa19Jbml0KGludGVycCkgPT0gVENMX0VSUk9SKSB7CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CisjZW5kaWYKKyAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlRrX0luaXQgZXJyb3I6ICVzXG4iLCBUY2xfR2V0U3RyaW5nUmVzdWx0KGludGVycCkpOworICAgICAgICByZXR1cm4gVENMX0VSUk9SOworICAgIH0KKwogICAgIHJldHVybiBUQ0xfT0s7CiB9CiAjZW5kaWYgLyogIVdJVEhfQVBQSU5JVCAqLwpAQCAtNjUyLDggKzY2OSwxNSBAQAogICAgIGNrZnJlZShhcmd2MCk7CiAKICAgICBpZiAoISB3YW50VGspIHsKLSAgICAgICAgVGNsX1NldFZhcih2LT5pbnRlcnAsICJfdGtpbnRlcl9za2lwX3RrX2luaXQiLCAiMSIsICAgICBUQ0xfR0xPQkFMX09OTFkpOworICAgICAgICBUY2xfU2V0VmFyKHYtPmludGVycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlcl9za2lwX3RrX2luaXQiLCAiMSIsIFRDTF9HTE9CQUxfT05MWSk7CiAgICAgfQorI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICBlbHNlIGlmICh0a19sb2FkX2ZhaWxlZCkgeworICAgICAgICBUY2xfU2V0VmFyKHYtPmludGVycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlcl90a19mYWlsZWQiLCAiMSIsIFRDTF9HTE9CQUxfT05MWSk7CisgICAgfQorI2VuZGlmCiAKICAgICAvKiBzb21lIGluaXRpYWwgYXJndW1lbnRzIG5lZWQgdG8gYmUgaW4gYXJndiAqLwogICAgIGlmIChzeW5jIHx8IHVzZSkgewpAQCAtNjg4LDYgKzcxMiwxOCBAQAogCiAgICAgaWYgKFRjbF9BcHBJbml0KHYtPmludGVycCkgIT0gVENMX09LKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXYpOworI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICAgICAgaWYgKHdhbnRUaykgeworICAgICAgICAgICAgY29uc3QgY2hhciAqX3RraW50ZXJfdGtfZmFpbGVkOworICAgICAgICAgICAgX3RraW50ZXJfdGtfZmFpbGVkID0gVGNsX0dldFZhcih2LT5pbnRlcnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyX3RrX2ZhaWxlZCIsIFRDTF9HTE9CQUxfT05MWSk7CisKKyAgICAgICAgICAgIGlmICggX3RraW50ZXJfdGtfZmFpbGVkICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAoX3RraW50ZXJfdGtfZmFpbGVkLCAiMSIpID09IDApIHsKKyAgICAgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopdik7CiAgICAgICAgIHJldHVybiAoVGthcHBPYmplY3QgKilyZXN1bHQ7CiAgICAgfQpAQCAtNjk4LDYgKzczNCw3IEBACiB9CiAKIAorI2lmZGVmIFdJVEhfVEhSRUFECiBzdGF0aWMgdm9pZAogVGthcHBfVGhyZWFkU2VuZChUa2FwcE9iamVjdCAqc2VsZiwgVGNsX0V2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgVGNsX0NvbmRpdGlvbiAqY29uZCwgVGNsX011dGV4ICptdXRleCkKQEAgLTcxMCw2ICs3NDcsNyBAQAogICAgIFRjbF9NdXRleFVubG9jayhtdXRleCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIH0KKyNlbmRpZgogCiAKIC8qKiBUY2wgRXZhbCAqKi8KQEAgLTEwOTksOCArMTEzNyw4IEBACiAgICAgcmV0dXJuIG5ld1B5VGNsT2JqZWN0KHZhbHVlKTsKIH0KIAorI2lmZGVmIFdJVEhfVEhSRUFECiAvKiBUaGlzIG11dGV4IHN5bmNocm9uaXplcyBpbnRlci10aHJlYWQgY29tbWFuZCBjYWxscy4gKi8KLQogVENMX0RFQ0xBUkVfTVVURVgoY2FsbF9tdXRleCkKIAogdHlwZWRlZiBzdHJ1Y3QgVGthcHBfQ2FsbEV2ZW50IHsKQEAgLTExMTAsOCArMTE0OCw5IEBACiAgICAgaW50IGZsYWdzOwogICAgIFB5T2JqZWN0ICoqcmVzOwogICAgIFB5T2JqZWN0ICoqZXhjX3R5cGUsICoqZXhjX3ZhbHVlLCAqKmV4Y190YjsKLSAgICBUY2xfQ29uZGl0aW9uIGRvbmU7CisgICAgVGNsX0NvbmRpdGlvbiAqZG9uZTsKIH0gVGthcHBfQ2FsbEV2ZW50OworI2VuZGlmCiAKIHZvaWQKIFRrYXBwX0NhbGxEZWFsbG9jQXJncyhUY2xfT2JqKiogb2JqdiwgVGNsX09iaioqIG9ialN0b3JlLCBpbnQgb2JqYykKQEAgLTEyMjIsNiArMTI2MSw4IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorI2lmZGVmIFdJVEhfVEhSRUFECisKIC8qIFRrYXBwX0NhbGxQcm9jIGlzIHRoZSBldmVudCBwcm9jZWR1cmUgdGhhdCBpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZgogICAgdGhlIFRjbCBpbnRlcnByZXRlciB0aHJlYWQuIEluaXRpYWxseSwgaXQgaG9sZHMgdGhlIFRjbCBsb2NrLCBhbmQgZG9lc24ndAogICAgaG9sZCB0aGUgUHl0aG9uIGxvY2suICovCkBAIC0xMjYxLDExICsxMzAyLDEzIEBACiBkb25lOgogICAgIC8qIFdha2UgdXAgY2FsbGluZyB0aHJlYWQuICovCiAgICAgVGNsX011dGV4TG9jaygmY2FsbF9tdXRleCk7Ci0gICAgVGNsX0NvbmRpdGlvbk5vdGlmeSgmZS0+ZG9uZSk7CisgICAgVGNsX0NvbmRpdGlvbk5vdGlmeShlLT5kb25lKTsKICAgICBUY2xfTXV0ZXhVbmxvY2soJmNhbGxfbXV0ZXgpOwogICAgIHJldHVybiAxOwogfQogCisjZW5kaWYKKwogLyogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgY2FsbGluZyBhIFRjbCBjb21tYW5kLgogICAgSXQgc3VwcG9ydHMgdGhyZWUgY2FzZXMsIHdpdGggcmVnYXJkIHRvIHRocmVhZGluZzoKICAgIDEuIFRjbCBpcyBub3QgdGhyZWFkZWQ6IE11c3QgaGF2ZSB0aGUgVGNsIGxvY2ssIHRoZW4gY2FuIGludm9rZSBjb21tYW5kIGluCkBAIC0xMjk5LDYgKzEzNDIsNyBAQAogICAgICAgICAvKiBXZSBjYW5ub3QgY2FsbCB0aGUgY29tbWFuZCBkaXJlY3RseS4gSW5zdGVhZCwgd2UgbXVzdAogICAgICAgICAgICBtYXJzaGFsIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBpbnRlcnByZXRlciB0aHJlYWQuICovCiAgICAgICAgIFRrYXBwX0NhbGxFdmVudCAqZXY7CisgICAgICAgIFRjbF9Db25kaXRpb24gY29uZCA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICpleGNfdHlwZSwgKmV4Y192YWx1ZSwgKmV4Y190YjsKICAgICAgICAgaWYgKCFXYWl0Rm9yTWFpbmxvb3Aoc2VsZikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMTAsOSArMTM1NCw5IEBACiAgICAgICAgIGV2LT5leGNfdHlwZSA9ICZleGNfdHlwZTsKICAgICAgICAgZXYtPmV4Y192YWx1ZSA9ICZleGNfdmFsdWU7CiAgICAgICAgIGV2LT5leGNfdGIgPSAmZXhjX3RiOwotICAgICAgICBldi0+ZG9uZSA9IChUY2xfQ29uZGl0aW9uKTA7CisgICAgICAgIGV2LT5kb25lID0gJmNvbmQ7CiAKLSAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmV2LT5kb25lLCAmY2FsbF9tdXRleCk7CisgICAgICAgIFRrYXBwX1RocmVhZFNlbmQoc2VsZiwgKFRjbF9FdmVudCopZXYsICZjb25kLCAmY2FsbF9tdXRleCk7CiAKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoZXhjX3R5cGUpCkBAIC0xMzIwLDYgKzEzNjQsNyBAQAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChUa2ludGVyX1RjbEVycm9yLCBleGNfdmFsdWUpOwogICAgICAgICB9CisgICAgICAgIFRjbF9Db25kaXRpb25GaW5hbGl6ZSgmY29uZCk7CiAgICAgfQogICAgIGVsc2UKICNlbmRpZgpAQCAtMTQ5Myw5ICsxNTM4LDExIEBACiAKIC8qKiBUY2wgVmFyaWFibGUgKiovCiAKK3R5cGVkZWYgUHlPYmplY3QqICgqRXZlbnRGdW5jKShQeU9iamVjdCosIFB5T2JqZWN0ICphcmdzLCBpbnQgZmxhZ3MpOworCisjaWZkZWYgV0lUSF9USFJFQUQKIFRDTF9ERUNMQVJFX01VVEVYKHZhcl9tdXRleCkKIAotdHlwZWRlZiBQeU9iamVjdCogKCpFdmVudEZ1bmMpKFB5T2JqZWN0KiwgUHlPYmplY3QgKmFyZ3MsIGludCBmbGFncyk7CiB0eXBlZGVmIHN0cnVjdCBWYXJFdmVudCB7CiAgICAgVGNsX0V2ZW50IGV2OyAvKiBtdXN0IGJlIGZpcnN0ICovCiAgICAgUHlPYmplY3QgKnNlbGY7CkBAIC0xNTA1LDggKzE1NTIsOSBAQAogICAgIFB5T2JqZWN0ICoqcmVzOwogICAgIFB5T2JqZWN0ICoqZXhjX3R5cGU7CiAgICAgUHlPYmplY3QgKipleGNfdmFsOwotICAgIFRjbF9Db25kaXRpb24gY29uZDsKKyAgICBUY2xfQ29uZGl0aW9uICpjb25kOwogfSBWYXJFdmVudDsKKyNlbmRpZgogCiBzdGF0aWMgaW50CiB2YXJuYW1lX2NvbnZlcnRlcihQeU9iamVjdCAqaW4sIHZvaWQgKl9vdXQpCkBAIC0xNTI0LDYgKzE1NzIsOCBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgV0lUSF9USFJFQUQKKwogc3RhdGljIHZvaWQKIHZhcl9wZXJmb3JtKFZhckV2ZW50ICpldikKIHsKQEAgLTE1NDUsMjEgKzE1OTUsMjQgQEAKICAgICBFTlRFUl9QWVRIT04KICAgICB2YXJfcGVyZm9ybShldik7CiAgICAgVGNsX011dGV4TG9jaygmdmFyX211dGV4KTsKLSAgICBUY2xfQ29uZGl0aW9uTm90aWZ5KCZldi0+Y29uZCk7CisgICAgVGNsX0NvbmRpdGlvbk5vdGlmeShldi0+Y29uZCk7CiAgICAgVGNsX011dGV4VW5sb2NrKCZ2YXJfbXV0ZXgpOwogICAgIExFQVZFX1BZVEhPTgogICAgIHJldHVybiAxOwogfQogCisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogdmFyX2ludm9rZShFdmVudEZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGZwdHIsIFB5T2JqZWN0ICphcmdzLCBpbnQgZmxhZ3MpCiB7Ci0gICAgVGthcHBPYmplY3QgKnNlbGYgPSAoVGthcHBPYmplY3QqKXNlbGZwdHI7CiAjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBUa2FwcE9iamVjdCAqc2VsZiA9IChUa2FwcE9iamVjdCopc2VsZnB0cjsKICAgICBpZiAoc2VsZi0+dGhyZWFkZWQgJiYgc2VsZi0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsKICAgICAgICAgVGthcHBPYmplY3QgKnNlbGYgPSAoVGthcHBPYmplY3QqKXNlbGZwdHI7CiAgICAgICAgIFZhckV2ZW50ICpldjsKICAgICAgICAgUHlPYmplY3QgKnJlcywgKmV4Y190eXBlLCAqZXhjX3ZhbDsKKyAgICAgICAgVGNsX0NvbmRpdGlvbiBjb25kID0gTlVMTDsKIAogICAgICAgICAvKiBUaGUgY3VycmVudCB0aHJlYWQgaXMgbm90IHRoZSBpbnRlcnByZXRlciB0aHJlYWQuICBNYXJzaGFsCiAgICAgICAgICAgIHRoZSBjYWxsIHRvIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHRoZW4gd2FpdCBmb3IKQEAgLTE1NzYsOSArMTYyOSwxMCBAQAogICAgICAgICBldi0+cmVzID0gJnJlczsKICAgICAgICAgZXYtPmV4Y190eXBlID0gJmV4Y190eXBlOwogICAgICAgICBldi0+ZXhjX3ZhbCA9ICZleGNfdmFsOwotICAgICAgICBldi0+Y29uZCA9IE5VTEw7CisgICAgICAgIGV2LT5jb25kID0gJmNvbmQ7CiAgICAgICAgIGV2LT5ldi5wcm9jID0gKFRjbF9FdmVudFByb2MqKXZhcl9wcm9jOwotICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmZXYtPmNvbmQsICZ2YXJfbXV0ZXgpOworICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmY29uZCwgJnZhcl9tdXRleCk7CisgICAgICAgIFRjbF9Db25kaXRpb25GaW5hbGl6ZSgmY29uZCk7CiAgICAgICAgIGlmICghcmVzKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoZXhjX3R5cGUsIGV4Y192YWwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4Y190eXBlKTsKQEAgLTE5OTUsNyArMjA0OSw3IEBACiBQeXRob25DbWQoQ2xpZW50RGF0YSBjbGllbnREYXRhLCBUY2xfSW50ZXJwICppbnRlcnAsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgUHl0aG9uQ21kX0NsaWVudERhdGEgKmRhdGEgPSAoUHl0aG9uQ21kX0NsaWVudERhdGEgKiljbGllbnREYXRhOwotICAgIFB5T2JqZWN0ICpzZWxmLCAqZnVuYywgKmFyZywgKnJlczsKKyAgICBQeU9iamVjdCAqZnVuYywgKmFyZywgKnJlczsKICAgICBpbnQgaSwgcnY7CiAgICAgVGNsX09iaiAqb2JqX3JlczsKIApAQCAtMjAwNCw3ICsyMDU4LDYgQEAKICAgICAvKiBUQkQ6IG5vIGVycm9yIGNoZWNraW5nIGhlcmUgc2luY2Ugd2Uga25vdywgdmlhIHRoZQogICAgICAqIFRrYXBwX0NyZWF0ZUNvbW1hbmQoKSB0aGF0IHRoZSBjbGllbnQgZGF0YSBpcyBhIHR3by10dXBsZQogICAgICAqLwotICAgIHNlbGYgPSBkYXRhLT5zZWxmOwogICAgIGZ1bmMgPSBkYXRhLT5mdW5jOwogCiAgICAgLyogQ3JlYXRlIGFyZ3VtZW50IGxpc3QgKGFyZ3YxLCAuLi4sIGFyZ3ZOKSAqLwpAQCAtMjA1Niw2ICsyMTA5LDcgQEAKIAogCiAKKyNpZmRlZiBXSVRIX1RIUkVBRAogVENMX0RFQ0xBUkVfTVVURVgoY29tbWFuZF9tdXRleCkKIAogdHlwZWRlZiBzdHJ1Y3QgQ29tbWFuZEV2ZW50ewpAQCAtMjA2NSw3ICsyMTE5LDcgQEAKICAgICBpbnQgY3JlYXRlOwogICAgIGludCAqc3RhdHVzOwogICAgIENsaWVudERhdGEgKmRhdGE7Ci0gICAgVGNsX0NvbmRpdGlvbiBkb25lOworICAgIFRjbF9Db25kaXRpb24gKmRvbmU7CiB9IENvbW1hbmRFdmVudDsKIAogc3RhdGljIGludApAQCAtMjA3OCwxMCArMjEzMiwxMSBAQAogICAgIGVsc2UKICAgICAgICAgKmV2LT5zdGF0dXMgPSBUY2xfRGVsZXRlQ29tbWFuZChldi0+aW50ZXJwLCBldi0+bmFtZSk7CiAgICAgVGNsX011dGV4TG9jaygmY29tbWFuZF9tdXRleCk7Ci0gICAgVGNsX0NvbmRpdGlvbk5vdGlmeSgmZXYtPmRvbmUpOworICAgIFRjbF9Db25kaXRpb25Ob3RpZnkoZXYtPmRvbmUpOwogICAgIFRjbF9NdXRleFVubG9jaygmY29tbWFuZF9tdXRleCk7CiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0NyZWF0ZUNvbW1hbmQoUHlPYmplY3QgKnNlbGZwdHIsIFB5T2JqZWN0ICphcmdzKQpAQCAtMjExMyw3ICsyMTY4LDkgQEAKICAgICBkYXRhLT5zZWxmID0gc2VsZnB0cjsKICAgICBkYXRhLT5mdW5jID0gZnVuYzsKIAorI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKHNlbGYtPnRocmVhZGVkICYmIHNlbGYtPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7CisgICAgICAgIFRjbF9Db25kaXRpb24gY29uZCA9IE5VTEw7CiAgICAgICAgIENvbW1hbmRFdmVudCAqZXYgPSAoQ29tbWFuZEV2ZW50Kilja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ29tbWFuZFByb2M7CiAgICAgICAgIGV2LT5pbnRlcnAgPSBzZWxmLT5pbnRlcnA7CkBAIC0yMTIxLDEwICsyMTc4LDEzIEBACiAgICAgICAgIGV2LT5uYW1lID0gY21kTmFtZTsKICAgICAgICAgZXYtPmRhdGEgPSAoQ2xpZW50RGF0YSlkYXRhOwogICAgICAgICBldi0+c3RhdHVzID0gJmVycjsKLSAgICAgICAgZXYtPmRvbmUgPSBOVUxMOwotICAgICAgICBUa2FwcF9UaHJlYWRTZW5kKHNlbGYsIChUY2xfRXZlbnQqKWV2LCAmZXYtPmRvbmUsICZjb21tYW5kX211dGV4KTsKKyAgICAgICAgZXYtPmRvbmUgPSAmY29uZDsKKyAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmNvbmQsICZjb21tYW5kX211dGV4KTsKKyAgICAgICAgVGNsX0NvbmRpdGlvbkZpbmFsaXplKCZjb25kKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQorI2VuZGlmCisgICAgewogICAgICAgICBFTlRFUl9UQ0wKICAgICAgICAgZXJyID0gVGNsX0NyZWF0ZUNvbW1hbmQoCiAgICAgICAgICAgICBUa2FwcF9JbnRlcnAoc2VsZiksIGNtZE5hbWUsIFB5dGhvbkNtZCwKQEAgLTIxNTIsNyArMjIxMiwxMCBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmRlbGV0ZWNvbW1hbmQiLCAmY21kTmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCisjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoc2VsZi0+dGhyZWFkZWQgJiYgc2VsZi0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsKKyAgICAgICAgVGNsX0NvbmRpdGlvbiBjb25kID0gTlVMTDsKICAgICAgICAgQ29tbWFuZEV2ZW50ICpldjsKICAgICAgICAgZXYgPSAoQ29tbWFuZEV2ZW50Kilja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ29tbWFuZFByb2M7CkBAIC0yMTYwLDExICsyMjIzLDE0IEBACiAgICAgICAgIGV2LT5jcmVhdGUgPSAwOwogICAgICAgICBldi0+bmFtZSA9IGNtZE5hbWU7CiAgICAgICAgIGV2LT5zdGF0dXMgPSAmZXJyOwotICAgICAgICBldi0+ZG9uZSA9IE5VTEw7Ci0gICAgICAgIFRrYXBwX1RocmVhZFNlbmQoc2VsZiwgKFRjbF9FdmVudCopZXYsICZldi0+ZG9uZSwKKyAgICAgICAgZXYtPmRvbmUgPSAmY29uZDsKKyAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbW1hbmRfbXV0ZXgpOworICAgICAgICBUY2xfQ29uZGl0aW9uRmluYWxpemUoJmNvbmQpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CiAgICAgICAgIEVOVEVSX1RDTAogICAgICAgICBlcnIgPSBUY2xfRGVsZXRlQ29tbWFuZChzZWxmLT5pbnRlcnAsIGNtZE5hbWUpOwogICAgICAgICBMRUFWRV9UQ0wKQEAgLTIyNTYsNiArMjMyMiwxMiBAQAogICAgIFB5T2JqZWN0ICpmaWxlLCAqZnVuYzsKICAgICBpbnQgbWFzaywgdGZpbGU7CiAKKyAgICBpZiAoIXNlbGYgJiYgUHlfUHkza1dhcm5pbmdGbGFnKSB7CisgICAgICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyLmNyZWF0ZWZpbGVoYW5kbGVyIGlzIGdvbmUgaW4gMy54IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaU86Y3JlYXRlZmlsZWhhbmRsZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJm1hc2ssICZmdW5jKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzAwLDYgKzIzNzIsMTIgQEAKICAgICBQeU9iamVjdCAqZmlsZTsKICAgICBpbnQgdGZpbGU7CiAKKyAgICBpZiAoIXNlbGYgJiYgUHlfUHkza1dhcm5pbmdGbGFnKSB7CisgICAgICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyLmRlbGV0ZWZpbGVoYW5kbGVyIGlzIGdvbmUgaW4gMy54IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmRlbGV0ZWZpbGVoYW5kbGVyIiwgJmZpbGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjQ3Myw2ICsyNTUxLDEyIEBACiAgICAgUHlPYmplY3QgKmZ1bmM7CiAgICAgVGt0dE9iamVjdCAqdjsKIAorICAgIGlmICghc2VsZiAmJiBQeV9QeTNrV2FybmluZ0ZsYWcpIHsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3RraW50ZXIuY3JlYXRldGltZXJoYW5kbGVyIGlzIGdvbmUgaW4gMy54IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTzpjcmVhdGV0aW1lcmhhbmRsZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbWlsbGlzZWNvbmRzLCAmZnVuYykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjUxNiw2ICsyNjAwLDEyIEBACiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKICNlbmRpZgogCisgICAgaWYgKCFzZWxmICYmIFB5X1B5M2tXYXJuaW5nRmxhZykgeworICAgICAgICBpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlci5tYWlubG9vcCBpcyBnb25lIGluIDMueCIpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6bWFpbmxvb3AiLCAmdGhyZXNob2xkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI1OTEsNiArMjY4MSwxMiBAQAogICAgIGludCBmbGFncyA9IDA7CiAgICAgaW50IHJ2OwogCisgICAgaWYgKCFzZWxmICYmIFB5X1B5M2tXYXJuaW5nRmxhZykgeworICAgICAgICBpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlci5kb29uZWV2ZW50IGlzIGdvbmUgaW4gMy54IikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpkb29uZWV2ZW50IiwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI2MDQsNiArMjcwMCwxMiBAQAogVGthcHBfUXVpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAKKyAgICBpZiAoIXNlbGYgJiYgUHlfUHkza1dhcm5pbmdGbGFnKSB7CisgICAgICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90a2ludGVyLnF1aXQgaXMgZ29uZSBpbiAzLngiKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpxdWl0IikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNjI1LDIyICsyNzI3LDIxIEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfVGtJbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzdGF0aWMgaW50IGhhc19mYWlsZWQ7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwID0gVGthcHBfSW50ZXJwKHNlbGYpOwotICAgIFRrX1dpbmRvdyBtYWluX3dpbmRvdzsKICAgICBjb25zdCBjaGFyICogX3RrX2V4aXN0cyA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBtYWluX3dpbmRvdyA9IFRrX01haW5XaW5kb3coaW50ZXJwKTsKIAotICAgIC8qIEluIGFsbCBjdXJyZW50IHZlcnNpb25zIG9mIFRrIChpbmNsdWRpbmcgOC40LjEzKSwgVGtfSW5pdAotICAgICAgIGRlYWRsb2NrcyBvbiB0aGUgc2Vjb25kIGNhbGwgd2hlbiB0aGUgZmlyc3QgY2FsbCBmYWlsZWQuCi0gICAgICAgVG8gYXZvaWQgdGhlIGRlYWRsb2NrLCB3ZSBqdXN0IHJlZnVzZSB0aGUgc2Vjb25kIGNhbGwgdGhyb3VnaAotICAgICAgIGEgc3RhdGljIHZhcmlhYmxlLiAqLwotICAgIGlmIChoYXNfZmFpbGVkKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGxpbmcgVGtfSW5pdCBhZ2FpbiBhZnRlciBhIHByZXZpb3VzIGNhbGwgZmFpbGVkIG1pZ2h0IGRlYWRsb2NrIik7CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgIC8qIFVwIHRvIFRrIDguNC4xMywgVGtfSW5pdCBkZWFkbG9ja3Mgb24gdGhlIHNlY29uZCBjYWxsIHdoZW4gdGhlCisgICAgICogZmlyc3QgY2FsbCBmYWlsZWQuCisgICAgICogVG8gYXZvaWQgdGhlIGRlYWRsb2NrLCB3ZSBqdXN0IHJlZnVzZSB0aGUgc2Vjb25kIGNhbGwgdGhyb3VnaAorICAgICAqIGEgc3RhdGljIHZhcmlhYmxlLgorICAgICAqLworICAgIGlmICh0a19sb2FkX2ZhaWxlZCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVEtJTlRFUl9MT0FEVEtfRVJSTVNHKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorI2VuZGlmCiAKICAgICAvKiBXZSB3YW50IHRvIGd1YXJkIGFnYWluc3QgY2FsbGluZyBUa19Jbml0KCkgbXVsdGlwbGUgdGltZXMgKi8KICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKQEAgLTI2NjEsNyArMjc2Miw5IEBACiAgICAgaWYgKF90a19leGlzdHMgPT0gTlVMTCB8fCBzdHJjbXAoX3RrX2V4aXN0cywgIjEiKSAhPSAwKSAgICAgewogICAgICAgICBpZiAoVGtfSW5pdChpbnRlcnApICAgICAgICAgICAgID09IFRDTF9FUlJPUikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7Ci0gICAgICAgICAgICBoYXNfZmFpbGVkID0gMTsKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg3Myw3ICsyOTc2LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBjb250ZXh0Lm1heHNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXRlbSk7Ci0gICAgaWYgKGNvbnRleHQubWF4c2l6ZSA8PSAwKQorICAgIGlmIChjb250ZXh0Lm1heHNpemUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoY29udGV4dC5tYXhzaXplID09IDApCiAgICAgICAgIHJldHVybiBQeVR1cGxlX05ldygwKTsKIAogICAgIGNvbnRleHQudHVwbGUgPSBQeVR1cGxlX05ldyhjb250ZXh0Lm1heHNpemUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCmluZGV4IGRhMWJiMDIuLjE2MDJlNDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXJyYXltb2R1bGUuYworKysgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKQEAgLTc5OCw3ICs3OTgsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICB3aGlsZSAoKHYgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKGluczEoc2VsZiwgKGludCkgUHlfU0laRShzZWxmKSwgdikgIT0gMCkgeworICAgICAgICBpZiAoaW5zMShzZWxmLCBQeV9TSVpFKHNlbGYpLCB2KSAhPSAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9hcHBlbmQoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQogewotICAgIHJldHVybiBpbnMoc2VsZiwgKGludCkgUHlfU0laRShzZWxmKSwgdik7CisgICAgcmV0dXJuIGlucyhzZWxmLCBQeV9TSVpFKHNlbGYpLCB2KTsKIH0KIAogUHlEb2NfU1RSVkFSKGFwcGVuZF9kb2MsCkBAIC0xMTU3LDQwICsxMTU3LDYgQEAKIDQsIG9yIDggYnl0ZXMgaW4gc2l6ZSwgUnVudGltZUVycm9yIGlzIHJhaXNlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3JlZHVjZShhcnJheW9iamVjdCAqYXJyYXkpCi17Ci0gICAgUHlPYmplY3QgKmRpY3QsICpyZXN1bHQ7Ci0KLSAgICBkaWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKilhcnJheSwgIl9fZGljdF9fIik7Ci0gICAgaWYgKGRpY3QgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBkaWN0ID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwotICAgIH0KLSAgICBpZiAoUHlfU0laRShhcnJheSkgPiAwKSB7Ci0gICAgICAgIGlmIChhcnJheS0+b2JfZGVzY3ItPml0ZW1zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICA+IFBZX1NTSVpFX1RfTUFYIC8gYXJyYXktPm9iX3NpemUpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIk8oY3MjKU8iLAotICAgICAgICAgICAgUHlfVFlQRShhcnJheSksCi0gICAgICAgICAgICBhcnJheS0+b2JfZGVzY3ItPnR5cGVjb2RlLAotICAgICAgICAgICAgYXJyYXktPm9iX2l0ZW0sCi0gICAgICAgICAgICBQeV9TSVpFKGFycmF5KSAqIGFycmF5LT5vYl9kZXNjci0+aXRlbXNpemUsCi0gICAgICAgICAgICBkaWN0KTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCJPKGMpTyIsCi0gICAgICAgICAgICBQeV9UWVBFKGFycmF5KSwKLSAgICAgICAgICAgIGFycmF5LT5vYl9kZXNjci0+dHlwZWNvZGUsCi0gICAgICAgICAgICBkaWN0KTsKLSAgICB9Ci0gICAgUHlfREVDUkVGKGRpY3QpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVB5RG9jX1NUUlZBUihhcnJheV9kb2MsICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfcmV2ZXJzZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwpAQCAtMTUzMyw2ICsxNDk5LDM4IEBACiAKICNlbmRpZiAvKiBQeV9VU0lOR19VTklDT0RFICovCiAKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9yZWR1Y2UoYXJyYXlvYmplY3QgKmFycmF5KQoreworICAgIFB5T2JqZWN0ICpkaWN0LCAqcmVzdWx0LCAqbGlzdDsKKworICAgIGRpY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKWFycmF5LCAiX19kaWN0X18iKTsKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZGljdCA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICB9CisgICAgLyogVW5saWtlIGluIFB5dGhvbiAzLngsIHdlIG5ldmVyIHVzZSB0aGUgbW9yZSBlZmZpY2llbnQgbWVtb3J5CisgICAgICogcmVwcmVzZW50YXRpb24gb2YgYW4gYXJyYXkgZm9yIHBpY2tsaW5nLiAgVGhpcyBpcyB1bmZvcnR1bmF0ZWx5CisgICAgICogbmVjZXNzYXJ5IHRvIGFsbG93IGFycmF5IG9iamVjdHMgdG8gYmUgdW5waWNrbGVkIGJ5IFB5dGhvbiAzLngsCisgICAgICogc2luY2Ugc3RyIG9iamVjdHMgZnJvbSAyLnggYXJlIGFsd2F5cyBkZWNvZGVkIHRvIHVuaWNvZGUgaW4KKyAgICAgKiBQeXRob24gMy54LgorICAgICAqLworICAgIGxpc3QgPSBhcnJheV90b2xpc3QoYXJyYXksIE5VTEwpOworICAgIGlmIChsaXN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgKKyAgICAgICAgIk8oY08pTyIsIFB5X1RZUEUoYXJyYXkpLCBhcnJheS0+b2JfZGVzY3ItPnR5cGVjb2RlLCBsaXN0LCBkaWN0KTsKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5RG9jX1NUUlZBUihyZWR1Y2VfZG9jLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2dldF90eXBlY29kZShhcnJheW9iamVjdCAqYSwgdm9pZCAqY2xvc3VyZSkKQEAgLTE1ODksNyArMTU4Nyw3IEBACiAgICAgeyJyZWFkIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZnJvbWZpbGVfYXNfcmVhZCwgICAgTUVUSF9WQVJBUkdTLAogICAgICBmcm9tZmlsZV9kb2N9LAogICAgIHsiX19yZWR1Y2VfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3JlZHVjZSwgICAgICBNRVRIX05PQVJHUywKLSAgICAgYXJyYXlfZG9jfSwKKyAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJyZW1vdmUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfcmVtb3ZlLCAgICAgIE1FVEhfTywKICAgICAgcmVtb3ZlX2RvY30sCiAgICAgeyJyZXZlcnNlIiwgICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfcmV2ZXJzZSwgICAgIE1FVEhfTk9BUkdTLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCBjYjU0NDY4Li5mYjY5ZWQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNTExLDkgKzUxMSw4IEBACiAKICAgICBiZXN0X3Jlc3VsdCA9IHJlc3VsdDsKICAgICBiZXN0X2ogPSAwOwotICAgIGogPSAwOwogCi0gICAgZm9yICggaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgeworICAgIGZvciAoaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgewogICAgICAgICBhal9tMSA9IChkb3VibGUpY3AxW2otMV07CiAgICAgICAgIGFqX2xtMSA9IChkb3VibGUpY3AxW2orbGVuMi0xXTsKIApAQCAtNTk3LDkgKzU5Niw4IEBACiAKICAgICBiZXN0X3Jlc3VsdCA9IHJlc3VsdDsKICAgICBiZXN0X2ogPSAwOwotICAgIGogPSAwOwogCi0gICAgZm9yICggaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgeworICAgIGZvciAoaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgewogICAgICAgICBhal9tMSA9IChkb3VibGUpY3AxW2otMV07CiAgICAgICAgIGFqX2xtMSA9IChkb3VibGUpY3AxW2orbGVuMi0xXTsKIApAQCAtMTQxOSw3ICsxNDE3LDYgQEAKICAgICBpZiAoIHN0YXRlID09IFB5X05vbmUgKSB7CiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7Ci0gICAgICAgIHN0ZXAgPSA3OwogICAgICAgICBpbmRleCA9IDA7CiAgICAgfSBlbHNlIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpICkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTE5LDcgKzE1MTYsNiBAQAogICAgIGlmICggc3RhdGUgPT0gUHlfTm9uZSApIHsKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKLSAgICAgICAgc3RlcCA9IDc7CiAgICAgICAgIGluZGV4ID0gMDsKICAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCBkOTg1NzczLi4yZDkxYjdmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2JpbmFzY2lpLmMKKysrIGIvTW9kdWxlcy9iaW5hc2NpaS5jCkBAIC0xODgsNiArMTg4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9hMmJfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtMTk1LDggKzE5NiwxMCBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGFzY2lpX2xlbiwgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInQjOmEyYl91dSIsICZhc2NpaV9kYXRhLCAmYXNjaWlfbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YTJiX3V1IiwgJnBhc2NpaSkgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBwYXNjaWkubGVuOwogCiAgICAgYXNzZXJ0KGFzY2lpX2xlbiA+PSAwKTsKIApAQCAtMjA1LDkgKzIwOCwxMSBAQAogICAgIGFzY2lpX2xlbi0tOwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgYmluX2xlbiA+IDAgOyBhc2NpaV9sZW4tLSwgYXNjaWlfZGF0YSsrICkgewogICAgICAgICAvKiBYWFggaXMgaXQgcmVhbGx5IGJlc3QgdG8gYWRkIE5VTHMgaWYgdGhlcmUncyBubyBtb3JlIGRhdGEgKi8KQEAgLTIyNiw2ICsyMzEsNyBAQAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICggdGhpc19jaCA8ICcgJyB8fCB0aGlzX2NoID4gKCcgJyArIDY0KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIklsbGVnYWwgY2hhciIpOworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KQEAgLTI1NCwxMCArMjYwLDEyIEBACiAgICAgICAgIGlmICggdGhpc19jaCAhPSAnICcgJiYgdGhpc19jaCAhPSAnICcrNjQgJiYKICAgICAgICAgICAgICB0aGlzX2NoICE9ICdcbicgJiYgdGhpc19jaCAhPSAnXHInICkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiVHJhaWxpbmcgZ2FyYmFnZSIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMjY2LDYgKzI3NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfYjJhX3V1KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC0yNzMsMTggKzI4MiwyMyBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpiMmFfdXUiLCAmYmluX2RhdGEsICZiaW5fbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YjJhX3V1IiwgJnBiaW4pICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYmluX2RhdGEgPSBwYmluLmJ1ZjsKKyAgICBiaW5fbGVuID0gcGJpbi5sZW47CiAgICAgaWYgKCBiaW5fbGVuID4gNDUgKSB7CiAgICAgICAgIC8qIFRoZSA0NSBpcyBhIGxpbWl0IHRoYXQgYXBwZWFycyBpbiBhbGwgdXVlbmNvZGUncyAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJBdCBtb3N0IDQ1IGJ5dGVzIGF0IG9uY2UiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvIG11Y2ggKGZpeGVkIHVwIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDIgKyAoYmluX2xlbisyKS8zKjQpKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAyICsgKGJpbl9sZW4rMikvMyo0KSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIC8qIFN0b3JlIHRoZSBsZW5ndGggKi8KICAgICAqYXNjaWlfZGF0YSsrID0gJyAnICsgKGJpbl9sZW4gJiAwNzcpOwpAQCAtMzA2LDggKzMyMCwxMyBAQAogICAgIH0KICAgICAqYXNjaWlfZGF0YSsrID0gJ1xuJzsgICAgICAgLyogQXBwZW5kIGEgY291cnRlc3kgbmV3bGluZSAqLwogCi0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsIChhc2NpaV9kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LAorICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydikpKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJ2KTsKKyAgICAgICAgcnYgPSBOVUxMOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTM0Miw2ICszNjEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX2EyYl9iYXNlNjQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtMzUwLDIwICszNzAsMjYgQEAKICAgICBQeV9zc2l6ZV90IGFzY2lpX2xlbiwgYmluX2xlbjsKICAgICBpbnQgcXVhZF9wb3MgPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidCM6YTJiX2Jhc2U2NCIsICZhc2NpaV9kYXRhLCAmYXNjaWlfbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YTJiX2Jhc2U2NCIsICZwYXNjaWkpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXNjaWlfZGF0YSA9IHBhc2NpaS5idWY7CisgICAgYXNjaWlfbGVuID0gcGFzY2lpLmxlbjsKIAogICAgIGFzc2VydChhc2NpaV9sZW4gPj0gMCk7CiAKLSAgICBpZiAoYXNjaWlfbGVuID4gUFlfU1NJWkVfVF9NQVggLSAzKQorICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgYmluX2xlbiA9ICgoYXNjaWlfbGVuKzMpLzQpKjM7IC8qIFVwcGVyIGJvdW5kLCBjb3JyZWN0ZWQgbGF0ZXIgKi8KIAogICAgIC8qIEFsbG9jYXRlIHRoZSBidWZmZXIgKi8KLSAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApCisgICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydik7CisgICAgfQorICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpOwogICAgIGJpbl9sZW4gPSAwOwogCiAgICAgZm9yKCA7IGFzY2lpX2xlbiA+IDA7IGFzY2lpX2xlbi0tLCBhc2NpaV9kYXRhKyspIHsKQEAgLTQxNSw2ICs0NDEsNyBAQAogICAgIH0KIAogICAgIGlmIChsZWZ0Yml0cyAhPSAwKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIkluY29ycmVjdCBwYWRkaW5nIik7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDI0LDEyICs0NTEsMTcgQEAKICAgICAqKiAoYmVjYXVzZSB0aGUgaW5wdXQgd2FzIGFsbCBpbnZhbGlkKSByZXR1cm4gdGhlIHNoYXJlZCBlbXB0eQogICAgICoqIHN0cmluZyBpbnN0ZWFkOyBfUHlTdHJpbmdfUmVzaXplKCkgd29uJ3QgZG8gdGhpcyBmb3IgdXMuCiAgICAgKi8KLSAgICBpZiAoYmluX2xlbiA+IDApCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCBiaW5fbGVuKTsKKyAgICBpZiAoYmluX2xlbiA+IDApIHsKKyAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LCBiaW5fbGVuKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7CisgICAgICAgIHJ2ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtNDM4LDYgKzQ3MCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfYjJhX2Jhc2U2NChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBidWY7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNDQ1LDIyICs0NzgsMjcgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6YjJhX2Jhc2U2NCIsICZiaW5fZGF0YSwgJmJpbl9sZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpiMmFfYmFzZTY0IiwgJnBidWYpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYmluX2RhdGEgPSBwYnVmLmJ1ZjsKKyAgICBiaW5fbGVuID0gcGJ1Zi5sZW47CiAKICAgICBhc3NlcnQoYmluX2xlbiA+PSAwKTsKIAogICAgIGlmICggYmluX2xlbiA+IEJBU0U2NF9NQVhCSU4gKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIlRvbyBtdWNoIGRhdGEgZm9yIGJhc2U2NCBsaW5lIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBXZSdyZSBsYXp5IGFuZCBhbGxvY2F0ZSB0b28gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpLgogICAgICAgICIrMyIgbGVhdmVzIHJvb20gZm9yIHVwIHRvIHR3byBwYWQgY2hhcmFjdGVycyBhbmQgYSB0cmFpbGluZwogICAgICAgIG5ld2xpbmUuICBOb3RlIHRoYXQgJ2InIGdldHMgZW5jb2RlZCBhcyAnWWc9PVxuJyAoMSBpbiwgNSBvdXQpLiAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4qMiArIDMpKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKjIgKyAzKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBiaW5fbGVuID4gMCA7IGJpbl9sZW4tLSwgYmluX2RhdGErKyApIHsKICAgICAgICAgLyogU2hpZnQgdGhlIGRhdGEgaW50byBvdXIgYnVmZmVyICovCkBAIC00ODQsOCArNTIyLDEzIEBACiAgICAgfQogICAgICphc2NpaV9kYXRhKysgPSAnXG4nOyAgICAgICAvKiBBcHBlbmQgYSBjb3VydGVzeSBuZXdsaW5lICovCiAKLSAgICBfUHlTdHJpbmdfUmVzaXplKCZydiwgKGFzY2lpX2RhdGEgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydikpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcnYsCisgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocnYpOworICAgICAgICBydiA9IE5VTEw7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtNDk0LDYgKzUzNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC01MDIsMjAgKzU0NiwyNiBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBkb25lID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInQjOmEyYl9ocXgiLCAmYXNjaWlfZGF0YSwgJmxlbikgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOmEyYl9ocXgiLCAmcGFzY2lpKSApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOworICAgIGxlbiA9IHBhc2NpaS5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gMikKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgc3RyaW5nIHRoYXQgaXMgdG9vIGJpZyAoZml4ZWQgbGF0ZXIpCiAgICAgICAgQWRkIHR3byB0byB0aGUgaW5pdGlhbCBsZW5ndGggdG8gcHJldmVudCBpbnRlcm5pbmcgd2hpY2gKICAgICAgICB3b3VsZCBwcmVjbHVkZSBzdWJzZXF1ZW50IHJlc2l6aW5nLiAgKi8KLSAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKQorICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbisyKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICB9CisgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgbGVuID4gMCA7IGxlbi0tLCBhc2NpaV9kYXRhKysgKSB7CiAgICAgICAgIC8qIEdldCB0aGUgYnl0ZSBhbmQgbG9vayBpdCB1cCAqLwpAQCAtNTI0LDYgKzU3NCw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCB0aGlzX2NoID09IEZBSUwgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbGxlZ2FsIGNoYXIiKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTU0NiwxNyArNTk3LDI0IEBACiAgICAgaWYgKCBsZWZ0Yml0cyAmJiAhZG9uZSApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEluY29tcGxldGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGhhcyBpbmNvbXBsZXRlIG51bWJlciBvZiBieXRlcyIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgKLSAgICAgICAgJnJ2LCAoYmluX2RhdGEgLSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KSkpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGJpbl9kYXRhIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocnYpOworICAgICAgICBydiA9IE5VTEw7CisgICAgfQogICAgIGlmIChydikgewogICAgICAgICBQeU9iamVjdCAqcnJ2ID0gUHlfQnVpbGRWYWx1ZSgiT2kiLCBydiwgZG9uZSk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBycnY7CiAgICAgfQogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTY1LDIzICs2MjMsMzAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9ybGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBidWY7CiAgICAgdW5zaWduZWQgY2hhciAqaW5fZGF0YSwgKm91dF9kYXRhOwogICAgIFB5T2JqZWN0ICpydjsKICAgICB1bnNpZ25lZCBjaGFyIGNoOwogICAgIFB5X3NzaXplX3QgaW4sIGluZW5kLCBsZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpybGVjb2RlX2hxeCIsICZpbl9kYXRhLCAmbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6cmxlY29kZV9ocXgiLCAmcGJ1ZikgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbl9kYXRhID0gcGJ1Zi5idWY7CisgICAgbGVuID0gcGJ1Zi5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpCisgICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIDIpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KIAogICAgIC8qIFdvcnN0IGNhc2U6IG91dHB1dCBpcyB0d2ljZSBhcyBiaWcgYXMgaW5wdXQgKGZpeGVkIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMisyKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydik7CisgICAgfQorICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCBpbj0wOyBpbjxsZW47IGluKyspIHsKICAgICAgICAgY2ggPSBpbl9kYXRhW2luXTsKQEAgLTYwNyw4ICs2NzIsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBfUHlTdHJpbmdfUmVzaXplKCZydiwgKG91dF9kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LAorICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpKSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIHJ2ID0gTlVMTDsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC02MTcsNiArNjg3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV9iMmFfaHF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC02MjQsMTggKzY5NSwyNCBAQAogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmIyYV9ocXgiLCAmYmluX2RhdGEsICZsZW4pICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpiMmFfaHF4IiwgJnBiaW4pICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYmluX2RhdGEgPSBwYmluLmJ1ZjsKKyAgICBsZW4gPSBwYmluLmxlbjsKIAogICAgIGFzc2VydChsZW4gPj0gMCk7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLyAyIC0gMikKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLyAyIC0gMikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgdGhhdCBpcyBhdCBsZWFzdCBsYXJnZSBlbm91Z2ggKi8KLSAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMisyKSkgPT0gTlVMTCApCisgICAgaWYgKCAocnY9UHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19Bc1N0cmluZyhydik7CisgICAgfQorICAgIGFzY2lpX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgbGVuID4gMCA7IGxlbi0tLCBiaW5fZGF0YSsrICkgewogICAgICAgICAvKiBTaGlmdCBpbnRvIG91ciBidWZmZXIsIGFuZCBvdXRwdXQgYW55IDZiaXRzIHJlYWR5ICovCkBAIC02NTIsOCArNzI5LDEzIEBACiAgICAgICAgIGxlZnRjaGFyIDw8PSAoNi1sZWZ0Yml0cyk7CiAgICAgICAgICphc2NpaV9kYXRhKysgPSB0YWJsZV9iMmFfaHF4W2xlZnRjaGFyICYgMHgzZl07CiAgICAgfQotICAgIF9QeVN0cmluZ19SZXNpemUoJnJ2LCAoYXNjaWlfZGF0YSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KSkpOworICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZydiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpKSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIHJ2ID0gTlVMTDsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC02NjIsMjggKzc0NCwzNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX3JsZWRlY29kZV9ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwaW47CiAgICAgdW5zaWduZWQgY2hhciAqaW5fZGF0YSwgKm91dF9kYXRhOwogICAgIHVuc2lnbmVkIGNoYXIgaW5fYnl0ZSwgaW5fcmVwZWF0OwogICAgIFB5T2JqZWN0ICpydjsKICAgICBQeV9zc2l6ZV90IGluX2xlbiwgb3V0X2xlbiwgb3V0X2xlbl9sZWZ0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6cmxlZGVjb2RlX2hxeCIsICZpbl9kYXRhLCAmaW5fbGVuKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6cmxlZGVjb2RlX2hxeCIsICZwaW4pICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW5fZGF0YSA9IHBpbi5idWY7CisgICAgaW5fbGVuID0gcGluLmxlbjsKIAogICAgIGFzc2VydChpbl9sZW4gPj0gMCk7CiAKICAgICAvKiBFbXB0eSBzdHJpbmcgaXMgYSBzcGVjaWFsIGNhc2UgKi8KLSAgICBpZiAoIGluX2xlbiA9PSAwICkKLSAgICAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIiIpOwotICAgIGVsc2UgaWYgKGluX2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikKLSAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBpZiAoIGluX2xlbiA9PSAwICkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgLyogQWxsb2NhdGUgYSBidWZmZXIgb2YgcmVhc29uYWJsZSBzaXplLiBSZXNpemVkIHdoZW4gbmVlZGVkICovCiAgICAgb3V0X2xlbiA9IGluX2xlbioyOwotICAgIGlmICggKHJ2PVB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dF9sZW4pKSA9PSBOVUxMICkKKyAgICBpZiAoIChydj1QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRfbGVuKSkgPT0gTlVMTCApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW47Ci0gICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KTsKKyAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQVNfU1RSSU5HKHJ2KTsKIAogICAgIC8qCiAgICAgKiogV2UgbmVlZCB0d28gbWFjcm9zIGhlcmUgdG8gZ2V0L3B1dCBieXRlcyBhbmQgaGFuZGxlCkBAIC02OTQsNiArNzg1LDcgQEAKICAgICAgICAgICAgICBpZiAoIC0taW5fbGVuIDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoSW5jb21wbGV0ZSwgIiIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgXAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICAgICAgIH0gXAogICAgICAgICAgICAgIGIgPSAqaW5fZGF0YSsrOyBcCkBAIC03MDMsOSArNzk1LDkgQEAKICAgICBkbyB7IFwKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICBfUHlTdHJpbmdfUmVzaXplKCZydiwgMipvdXRfbGVuKTsgXAotICAgICAgICAgICAgICAgICAgICAgIGlmICggcnYgPT0gTlVMTCApIHJldHVybiBOVUxMOyBcCi0gICAgICAgICAgICAgICAgICAgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FzU3RyaW5nKHJ2KSBcCisgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LCAyKm91dF9sZW4pIDwgMCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9ERUNSRUYocnYpOyBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOyByZXR1cm4gTlVMTDsgfSBcCisgICAgICAgICAgICAgICAgICAgICAgb3V0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5U3RyaW5nX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW4gPSBvdXRfbGVuICogMjsgXApAQCAtNzI2LDYgKzgxOCw3IEBACiAgICAgICAgICAgICAqKiBvZiB0aGUgc3RyaW5nIG9ubHkpLiBUaGlzIGlzIGEgcHJvZ3JhbW1lciBlcnJvci4KICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJPcnBoYW5lZCBSTEUgY29kZSBhdCBzdGFydCIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNzUzLDggKzg0NiwxMyBAQAogICAgICAgICAgICAgT1VUQllURShpbl9ieXRlKTsKICAgICAgICAgfQogICAgIH0KLSAgICBfUHlTdHJpbmdfUmVzaXplKCZydiwgKG91dF9kYXRhIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlTdHJpbmdfQXNTdHJpbmcocnYpKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJ2LAorICAgICAgICAgICAgICAgICAgICAgICAob3V0X2RhdGEgLQorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeVN0cmluZ19BU19TVFJJTkcocnYpKSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIHJ2ID0gTlVMTDsKKyAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKQEAgLTc2NCwxNyArODYyLDIxIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfY3JjX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBpbjsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKICAgICB1bnNpZ25lZCBpbnQgY3JjOwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmNyY19ocXgiLCAmYmluX2RhdGEsICZsZW4sICZjcmMpICkKKyAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKmk6Y3JjX2hxeCIsICZwaW4sICZjcmMpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYmluX2RhdGEgPSBwaW4uYnVmOworICAgIGxlbiA9IHBpbi5sZW47CiAKICAgICB3aGlsZShsZW4tLSA+IDApIHsKICAgICAgICAgY3JjPSgoY3JjPDw4KSYweGZmMDApXmNyY3RhYl9ocXhbKChjcmM+PjgpJjB4ZmYpXipiaW5fZGF0YSsrXTsKICAgICB9CiAKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgY3JjKTsKIH0KIApAQCAtNzg3LDE3ICs4ODksMjEgQEAKIGJpbmFzY2lpX2NyYzMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICB1bnNpZ25lZCBpbnQgY3JjMzJ2YWwgPSAwOyAgLyogY3JjMzIoMEwsIFpfTlVMTCwgMCkgKi8KKyAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICBCeXRlICpidWY7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IHNpZ25lZF92YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfEk6Y3JjMzIiLCAmYnVmLCAmbGVuLCAmY3JjMzJ2YWwpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8STpjcmMzMiIsICZwYnVmLCAmY3JjMzJ2YWwpKQogICAgIHJldHVybiBOVUxMOwogICAgIC8qIEluIFB5dGhvbiAyLnggd2UgcmV0dXJuIGEgc2lnbmVkIGludGVnZXIgcmVnYXJkbGVzcyBvZiBuYXRpdmUgcGxhdGZvcm0KICAgICAgKiBsb25nIHNpemUgKHRoZSAzMmJpdCB1bnNpZ25lZCBsb25nIGlzIHRyZWF0ZWQgYXMgMzItYml0IHNpZ25lZCBhbmQgc2lnbgogICAgICAqIGV4dGVuZGVkIGludG8gYSA2NC1iaXQgbG9uZyBpbnNpZGUgdGhlIGludGVnZXIgb2JqZWN0KS4gIDMuMCBkb2VzIHRoZQogICAgICAqIHJpZ2h0IHRoaW5nIGFuZCByZXR1cm5zIHVuc2lnbmVkLiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIwMiAqLworICAgIGJ1ZiA9IChCeXRlKilwYnVmLmJ1ZjsKKyAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoc2lnbmVkX3ZhbCk7CiB9CiAjZWxzZSAgLyogVVNFX1pMSUJfQ1JDMzIgKi8KQEAgLTkyMiwxMyArMTAyOCwxNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJpbmFzY2lpX2NyYzMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsgLyogQnkgSmltIEFobHN0cm9tOyBBbGwgcmlnaHRzIHRyYW5zZmVycmVkIHRvIENOUkkgKi8KKyAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKICAgICB1bnNpZ25lZCBpbnQgY3JjID0gMFU7ICAgICAgLyogaW5pdGlhbCB2YWx1ZSBvZiBDUkMgKi8KICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8STpjcmMzMiIsICZiaW5fZGF0YSwgJmxlbiwgJmNyYykgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqfEk6Y3JjMzIiLCAmcGJpbiwgJmNyYykgKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiaW5fZGF0YSA9IHBiaW4uYnVmOworICAgIGxlbiA9IHBiaW4ubGVuOwogCiAgICAgY3JjID0gfiBjcmM7CiAgICAgd2hpbGUgKGxlbi0tID4gMCkKQEAgLTkzNiw2ICsxMDQ1LDcgQEAKICAgICAgICAgLyogTm90ZTogIChjcmMgPj4gOCkgTVVTVCB6ZXJvIGZpbGwgb24gbGVmdCAqLwogCiAgICAgcmVzdWx0ID0gKGludCkoY3JjIF4gMHhGRkZGRkZGRlUpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOwogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhyZXN1bHQpOwogfQogI2VuZGlmICAvKiBVU0VfWkxJQl9DUkMzMiAqLwpAQCAtOTQ0LDI1ICsxMDU0LDMwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfaGV4bGlmeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhcmc7CiAgICAgY2hhciogYXJnYnVmOwogICAgIFB5X3NzaXplX3QgYXJnbGVuOwogICAgIFB5T2JqZWN0ICpyZXR2YWw7CiAgICAgY2hhciogcmV0YnVmOwogICAgIFB5X3NzaXplX3QgaSwgajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6YjJhX2hleCIsICZhcmdidWYsICZhcmdsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YjJhX2hleCIsICZwYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYXJnYnVmID0gcGFyZy5idWY7CisgICAgYXJnbGVuID0gcGFyZy5sZW47CiAKICAgICBhc3NlcnQoYXJnbGVuID49IDApOwotICAgIGlmIChhcmdsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCisgICAgaWYgKGFyZ2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQogCiAgICAgcmV0dmFsID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYXJnbGVuKjIpOwotICAgIGlmICghcmV0dmFsKQorICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXRidWYgPSBQeVN0cmluZ19Bc1N0cmluZyhyZXR2YWwpOwotICAgIGlmICghcmV0YnVmKQotICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorICAgIHJldGJ1ZiA9IFB5U3RyaW5nX0FTX1NUUklORyhyZXR2YWwpOwogCiAgICAgLyogbWFrZSBoZXggdmVyc2lvbiBvZiBzdHJpbmcsIHRha2VuIGZyb20gc2hhbW9kdWxlLmMgKi8KICAgICBmb3IgKGk9aj0wOyBpIDwgYXJnbGVuOyBpKyspIHsKQEAgLTk3NCwxMSArMTA4OSw4IEBACiAgICAgICAgIGMgPSAoYz45KSA/IGMrJ2EnLTEwIDogYyArICcwJzsKICAgICAgICAgcmV0YnVmW2orK10gPSBjOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwotCi0gIGZpbmFsbHk6Ci0gICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfaGV4bGlmeSwKQEAgLTEwMDUsMTQgKzExMTcsMTcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBiaW5hc2NpaV91bmhleGxpZnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciBwYXJnOwogICAgIGNoYXIqIGFyZ2J1ZjsKICAgICBQeV9zc2l6ZV90IGFyZ2xlbjsKICAgICBQeU9iamVjdCAqcmV0dmFsOwogICAgIGNoYXIqIHJldGJ1ZjsKICAgICBQeV9zc2l6ZV90IGksIGo7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmEyYl9oZXgiLCAmYXJnYnVmLCAmYXJnbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOmEyYl9oZXgiLCAmcGFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFyZ2J1ZiA9IHBhcmcuYnVmOworICAgIGFyZ2xlbiA9IHBhcmcubGVuOwogCiAgICAgYXNzZXJ0KGFyZ2xlbiA+PSAwKTsKIApAQCAtMTAyMSwxNiArMTEzNiwxNyBAQAogICAgICAqIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICAgKi8KICAgICBpZiAoYXJnbGVuICUgMikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIk9kZC1sZW5ndGggc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHZhbCA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIChhcmdsZW4vMikpOwotICAgIGlmICghcmV0dmFsKQorICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXRidWYgPSBQeVN0cmluZ19Bc1N0cmluZyhyZXR2YWwpOwotICAgIGlmICghcmV0YnVmKQotICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorICAgIHJldGJ1ZiA9IFB5U3RyaW5nX0FTX1NUUklORyhyZXR2YWwpOwogCiAgICAgZm9yIChpPWo9MDsgaSA8IGFyZ2xlbjsgaSArPSAyKSB7CiAgICAgICAgIGludCB0b3AgPSB0b19pbnQoUHlfQ0hBUk1BU0soYXJnYnVmW2ldKSk7CkBAIC0xMDQyLDkgKzExNTgsMTEgQEAKICAgICAgICAgfQogICAgICAgICByZXRidWZbaisrXSA9ICh0b3AgPDwgNCkgKyBib3Q7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOwogICAgIHJldHVybiByZXR2YWw7CiAKICAgZmluYWxseToKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICBQeV9ERUNSRUYocmV0dmFsKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTEwNzcsMTUgKzExOTUsMTggQEAKIHsKICAgICBQeV9zc2l6ZV90IGluLCBvdXQ7CiAgICAgY2hhciBjaDsKKyAgICBQeV9idWZmZXIgcGRhdGE7CiAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKm9kYXRhOwogICAgIFB5X3NzaXplX3QgZGF0YWxlbiA9IDA7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YSIsICJoZWFkZXIiLCBOVUxMfTsKICAgICBpbnQgaGVhZGVyID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInMjfGkiLCBrd2xpc3QsICZkYXRhLAotICAgICAgICAgICZkYXRhbGVuLCAmaGVhZGVyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzKnxpIiwga3dsaXN0LCAmcGRhdGEsCisgICAgICAgICAgJmhlYWRlcikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGEgPSBwZGF0YS5idWY7CisgICAgZGF0YWxlbiA9IHBkYXRhLmxlbjsKIAogICAgIC8qIFdlIGFsbG9jYXRlIHRoZSBvdXRwdXQgc2FtZSBzaXplIGFzIGlucHV0LCB0aGlzIGlzIG92ZXJraWxsLgogICAgICAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB1c2VkIGNhbGxvYygpIHNvIHdlJ2xsIHplcm8gb3V0IHRoZQpAQCAtMTA5Myw2ICsxMjE0LDcgQEAKICAgICAgKi8KICAgICBvZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIFB5TWVtX01hbGxvYyhkYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTExNDMsOSArMTI2NSwxMSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmICgocnYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKW9kYXRhLCBvdXQpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgUHlNZW1fRnJlZShvZGF0YSk7CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTE3Niw2ICsxMzAwLDcgQEAKIGJpbmFzY2lpX2IyYV9xcCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIFB5X3NzaXplX3QgaW4sIG91dDsKKyAgICBQeV9idWZmZXIgcGRhdGE7CiAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwgKm9kYXRhOwogICAgIFB5X3NzaXplX3QgZGF0YWxlbiA9IDAsIG9kYXRhbGVuID0gMDsKICAgICBQeU9iamVjdCAqcnY7CkBAIC0xMTg5LDkgKzEzMTQsMTEgQEAKICAgICBpbnQgY3JsZiA9IDA7CiAgICAgdW5zaWduZWQgY2hhciAqcDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInMjfGlpaSIsIGt3bGlzdCwgJmRhdGEsCi0gICAgICAgICAgJmRhdGFsZW4sICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInMqfGlpaSIsIGt3bGlzdCwgJnBkYXRhLAorICAgICAgICAgICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkYXRhID0gcGRhdGEuYnVmOworICAgIGRhdGFsZW4gPSBwZGF0YS5sZW47CiAKICAgICAvKiBTZWUgaWYgdGhpcyBzdHJpbmcgaXMgdXNpbmcgQ1JMRiBsaW5lIGVuZHMgKi8KICAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBjb252ZXJ0aW5nIGFsbCBvZgpAQCAtMTI2OSw2ICsxMzk2LDcgQEAKICAgICAgKi8KICAgICBvZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIFB5TWVtX01hbGxvYyhvZGF0YWxlbik7CiAgICAgaWYgKG9kYXRhID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzQzLDkgKzE0NzEsMTEgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoKHJ2ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvZGF0YSwgb3V0KSkgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgIHJldHVybiBydjsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvYnNkZGIuaCBiL01vZHVsZXMvYnNkZGIuaAppbmRleCA2NzNmNWZjLi5hM2E2ODdiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2JzZGRiLmgKKysrIGIvTW9kdWxlcy9ic2RkYi5oCkBAIC03MCw2ICs3MCwxMCBAQAogICogREJMb2NrICAgICAgIChBIGxvY2sgaGFuZGxlKQogICogREJTZXF1ZW5jZSAgIChTZXF1ZW5jZSkKICAqCisgKiBOZXcgZGF0YXR5cGVzOgorICoKKyAqIERCTG9nQ3Vyc29yICAoTG9nIEN1cnNvcikKKyAqCiAgKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMDUsNyArMTA5LDcgQEAKICNlcnJvciAiZWVrISBEQlZFUiBjYW4ndCBoYW5kbGUgbWlub3IgdmVyc2lvbnMgPiA5IgogI2VuZGlmCiAKLSNkZWZpbmUgUFlfQlNEREJfVkVSU0lPTiAiNC43LjMiCisjZGVmaW5lIFBZX0JTRERCX1ZFUlNJT04gIjQuOC40LjEiCiAKIC8qIFB5dGhvbiBvYmplY3QgZGVmaW5pdGlvbnMgKi8KIApAQCAtMTIyLDYgKzEyNiw3IEBACiAKIHN0cnVjdCBEQk9iamVjdDsgICAgICAgICAgLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RydWN0IERCQ3Vyc29yT2JqZWN0OyAgICAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdHJ1Y3QgREJMb2dDdXJzb3JPYmplY3Q7IC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KIHN0cnVjdCBEQlR4bk9iamVjdDsgICAgICAgLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RydWN0IERCU2VxdWVuY2VPYmplY3Q7ICAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKQEAgLTEzNCw2ICsxMzksNyBAQAogICAgIFB5T2JqZWN0KiAgICAgICBldmVudF9ub3RpZnlDYWxsYmFjazsKICAgICBzdHJ1Y3QgREJPYmplY3QgKmNoaWxkcmVuX2RiczsKICAgICBzdHJ1Y3QgREJUeG5PYmplY3QgKmNoaWxkcmVuX3R4bnM7CisgICAgc3RydWN0IERCTG9nQ3Vyc29yT2JqZWN0ICpjaGlsZHJlbl9sb2djdXJzb3JzOwogICAgIFB5T2JqZWN0ICAgICAgICAqcHJpdmF0ZV9vYmo7CiAgICAgUHlPYmplY3QgICAgICAgICpyZXBfdHJhbnNwb3J0OwogICAgIFB5T2JqZWN0ICAgICAgICAqaW5fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCkBAIC0xNDUsNyArMTUxLDYgQEAKICAgICBEQkVudk9iamVjdCogICAgbXllbnZvYmo7ICAvKiBQeU9iamVjdCBjb250YWluaW5nIHRoZSBEQl9FTlYgKi8KICAgICB1X2ludDMyX3QgICAgICAgZmxhZ3M7ICAgICAvKiBzYXZlZCBmbGFncyBmcm9tIG9wZW4oKSAqLwogICAgIHVfaW50MzJfdCAgICAgICBzZXRmbGFnczsgIC8qIHNhdmVkIGZsYWdzIGZyb20gc2V0X2ZsYWdzKCkgKi8KLSAgICBpbnQgICAgICAgICAgICAgaGF2ZVN0YXQ7CiAgICAgc3RydWN0IGJlaGF2aW91ckZsYWdzIG1vZHVsZUZsYWdzOwogICAgIHN0cnVjdCBEQlR4bk9iamVjdCAqdHhuOwogICAgIHN0cnVjdCBEQkN1cnNvck9iamVjdCAqY2hpbGRyZW5fY3Vyc29yczsKQEAgLTE5Myw5ICsxOTgsMjAgQEAKIH0gREJUeG5PYmplY3Q7CiAKIAordHlwZWRlZiBzdHJ1Y3QgREJMb2dDdXJzb3JPYmplY3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBEQl9MT0dDKiAgICAgICAgbG9nYzsKKyAgICBEQkVudk9iamVjdCogICAgZW52OworICAgIHN0cnVjdCBEQkxvZ0N1cnNvck9iamVjdCAqKnNpYmxpbmdfcHJldl9wOworICAgIHN0cnVjdCBEQkxvZ0N1cnNvck9iamVjdCAqc2libGluZ19uZXh0OworICAgIFB5T2JqZWN0ICAgICAgICAqaW5fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCit9IERCTG9nQ3Vyc29yT2JqZWN0OworCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgREJfTE9DSyAgICAgICAgIGxvY2s7CisgICAgaW50ICAgICAgICAgICAgIGxvY2tfaW5pdGlhbGl6ZWQ7ICAvKiBTaWduYWwgaWYgd2UgYWN0dWFsbHkgaGF2ZSBhIGxvY2sgKi8KICAgICBQeU9iamVjdCAgICAgICAgKmluX3dlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBEQkxvY2tPYmplY3Q7CiAKQEAgLTIyMCw2ICsyMzYsNyBAQAogLyogVG8gYWNjZXNzIHRoZSBzdHJ1Y3R1cmUgZnJvbSBhbiBleHRlcm5hbCBtb2R1bGUsIHVzZSBjb2RlIGxpa2UgdGhlCiAgICBmb2xsb3dpbmcgKGVycm9yIGNoZWNraW5nIG1pc3NlZCBvdXQgZm9yIGNsYXJpdHkpOgogCisgICAgIC8vIElmIHlvdSBhcmUgdXNpbmcgUHl0aG9uIGJlZm9yZSAzLjI6CiAgICAgIEJTRERCX2FwaSogYnNkZGJfYXBpOwogICAgICBQeU9iamVjdCogIG1vZDsKICAgICAgUHlPYmplY3QqICBjb2JqOwpAQCAtMjMxLDYgKzI0OCwxNSBAQAogICAgICBQeV9ERUNSRUYoY29iaik7CiAgICAgIFB5X0RFQ1JFRihtb2QpOwogCisKKyAgICAgLy8gSWYgeW91IGFyZSB1c2luZyBQeXRob24gMy4yIG9yIHVwOgorICAgICBCU0REQl9hcGkqIGJzZGRiX2FwaTsKKworICAgICAvLyBVc2UgImJzZGRiMy5fcHlic2RkYi5hcGkiIGlmIHlvdSdyZSB1c2luZworICAgICAvLyB0aGUgc3RhbmRhbG9uZSBweWJzZGRiIGFkZC1vbi4KKyAgICAgYnNkZGJfYXBpID0gKHZvaWQgKiopUHlDYXBzdWxlX0ltcG9ydCgiYnNkZGIuX2JzZGRiLmFwaSIsIDEpOworCisKICAgIFRoZSBzdHJ1Y3R1cmUncyBtZW1iZXJzIG11c3Qgbm90IGJlIGNoYW5nZWQuCiAqLwogCkBAIC0yMzgsNiArMjY0LDcgQEAKICAgICAvKiBUeXBlIG9iamVjdHMgKi8KICAgICBQeVR5cGVPYmplY3QqIGRiX3R5cGU7CiAgICAgUHlUeXBlT2JqZWN0KiBkYmN1cnNvcl90eXBlOworICAgIFB5VHlwZU9iamVjdCogZGJsb2djdXJzb3JfdHlwZTsKICAgICBQeVR5cGVPYmplY3QqIGRiZW52X3R5cGU7CiAgICAgUHlUeXBlT2JqZWN0KiBkYnR4bl90eXBlOwogICAgIFB5VHlwZU9iamVjdCogZGJsb2NrX3R5cGU7CkBAIC0yNDcsNyArMjc0LDYgQEAKIAogICAgIC8qIEZ1bmN0aW9ucyAqLwogICAgIGludCAoKm1ha2VEQkVycm9yKShpbnQgZXJyKTsKLQogfSBCU0REQl9hcGk7CiAKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ic2RkYm1vZHVsZS5jIGIvTW9kdWxlcy9ic2RkYm1vZHVsZS5jCmluZGV4IDVmZDRmYjEuLjU3OGNmM2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYnNkZGJtb2R1bGUuYworKysgYi9Nb2R1bGVzL2JzZGRibW9kdWxlLmMKQEAgLTI3MCw3ICsyNzAsOCBAQAogewogICAgIGludCBzdGF0dXM7CiAgICAgREJUIGtyZWMsIGRyZWM7Ci0gICAgY2hhciAqZGF0YSxidWZbNDA5Nl07CisgICAgY2hhciAqZGF0YSA9IE5VTEw7CisgICAgY2hhciBidWZbNDA5Nl07CiAgICAgaW50IHNpemU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICByZWNub190IHJlY25vOwpAQCAtNTAzLDcgKzUwNCw4IEBACiB7CiAgICAgaW50IHN0YXR1czsKICAgICBEQlQga3JlYywgZHJlYzsKLSAgICBjaGFyICpkYXRhLGJ1Zls0MDk2XTsKKyAgICBjaGFyICpkYXRhID0gTlVMTDsKKyAgICBjaGFyIGJ1Zls0MDk2XTsKICAgICBpbnQgc2l6ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIHJlY25vX3QgcmVjbm87CkBAIC02MzUsNyArNjM3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKEJzZGRiRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKHN0YXR1cyA9IDApOworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygwKTsKIH0KIHN0YXRpYyBQeU1ldGhvZERlZiBic2RkYl9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilic2RkYl9jbG9zZSwgTUVUSF9OT0FSR1N9LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9iejJtb2R1bGUuYyBiL01vZHVsZXMvYnoybW9kdWxlLmMKaW5kZXggY2ZkOGQ3MS4uZGUyZTIwYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iejJtb2R1bGUuYworKysgYi9Nb2R1bGVzL2J6Mm1vZHVsZS5jCkBAIC0xMjM0LDYgKzEyMzQsMzYgQEAKICAgICByZXR1cm4gcmV0OwogfQogCitQeURvY19TVFJWQVIoQloyRmlsZV9lbnRlcl9kb2MsCisiX19lbnRlcl9fKCkgLT4gc2VsZi4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK0JaMkZpbGVfZW50ZXIoQloyRmlsZU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+bW9kZSA9PSBNT0RFX0NMT1NFRCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOworfQorCitQeURvY19TVFJWQVIoQloyRmlsZV9leGl0X2RvYywKKyJfX2V4aXRfXygqZXhjaW5mbykgLT4gTm9uZS4gIENsb3NlcyB0aGUgZmlsZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK0JaMkZpbGVfZXhpdChCWjJGaWxlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCgoUHlPYmplY3QgKikgc2VsZiwgImNsb3NlIiwgTlVMTCk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIC8qIElmIGVycm9yIG9jY3VycmVkLCBwYXNzIHRocm91Z2ggKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJldCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKwogc3RhdGljIFB5T2JqZWN0ICpCWjJGaWxlX2dldGl0ZXIoQloyRmlsZU9iamVjdCAqc2VsZik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBCWjJGaWxlX21ldGhvZHNbXSA9IHsKQEAgLTEyNDYsNiArMTI3Niw4IEBACiAgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKUJaMkZpbGVfc2VlaywgTUVUSF9WQVJBUkdTLCBCWjJGaWxlX3NlZWtfX2RvY19ffSwKICAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pQloyRmlsZV90ZWxsLCBNRVRIX05PQVJHUywgQloyRmlsZV90ZWxsX19kb2NfX30sCiAgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilCWjJGaWxlX2Nsb3NlLCBNRVRIX05PQVJHUywgQloyRmlsZV9jbG9zZV9fZG9jX199LAorICAgIHsiX19lbnRlcl9fIiwgKFB5Q0Z1bmN0aW9uKUJaMkZpbGVfZW50ZXIsIE1FVEhfTk9BUkdTLCBCWjJGaWxlX2VudGVyX2RvY30sCisgICAgeyJfX2V4aXRfXyIsIChQeUNGdW5jdGlvbilCWjJGaWxlX2V4aXQsIE1FVEhfVkFSQVJHUywgQloyRmlsZV9leGl0X2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTIyODgsOSArMjMyMCwxMiBAQAogewogICAgIFB5T2JqZWN0ICptOwogCi0gICAgUHlfVFlQRSgmQloyRmlsZV9UeXBlKSA9ICZQeVR5cGVfVHlwZTsKLSAgICBQeV9UWVBFKCZCWjJDb21wX1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5X1RZUEUoJkJaMkRlY29tcF9UeXBlKSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZCWjJGaWxlX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChQeVR5cGVfUmVhZHkoJkJaMkNvbXBfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmQloyRGVjb21wX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgbSA9IFB5X0luaXRNb2R1bGUzKCJiejIiLCBiejJfbWV0aG9kcywgYnoyX19kb2NfXyk7CiAgICAgaWYgKG0gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvY1BpY2tsZS5jIGIvTW9kdWxlcy9jUGlja2xlLmMKaW5kZXggZDliZmNlYi4uYmQ1NzdhZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jUGlja2xlLmMKKysrIGIvTW9kdWxlcy9jUGlja2xlLmMKQEAgLTkwMyw3ICs5MDMsNiBAQAogICAgICAgIGxpa2UgdGhpcyBydWxlLiBqbGYKICAgICAqLwogICAgIGlmICghaikgewotICAgICAgICBqPTE7CiAgICAgICAgIG5hbWU9X19tYWluX19fc3RyOwogICAgIH0KIApAQCAtMTE3MCwxNCArMTE2OSwyOSBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgY2hhciBjX3N0clsyNTBdOwotICAgICAgICBjX3N0clswXSA9IEZMT0FUOwotICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoY19zdHIgKyAxLCBzaXplb2YoY19zdHIpIC0gMiwgIiUuMTdnIiwgeCk7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgZm9ybWF0dGVkIHN0cmluZyB3aXRoIGEgbmV3bGluZSBjaGFyYWN0ZXIgKi8KLSAgICAgICAgc3RyY2F0KGNfc3RyLCAiXG4iKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IC0xOworICAgICAgICBjaGFyICpidWYgPSBOVUxMOworICAgICAgICBjaGFyIG9wID0gRkxPQVQ7CiAKLSAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgY19zdHIsIHN0cmxlbihjX3N0cikpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgJm9wLCAxKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsICdnJywgMTcsIDAsIE5VTEwpOworICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLT53cml0ZV9mdW5jKHNlbGYsIGJ1Ziwgc3RybGVuKGJ1ZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICBpZiAoc2VsZi0+d3JpdGVfZnVuYyhzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgcmVzdWx0ID0gMDsKK2RvbmU6CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTEyMjAsOSArMTIzNCw2IEBACiAgICAgICAgIGludCBpOwogICAgICAgICBjaGFyIGNfc3RyWzVdOwogCi0gICAgICAgIGlmICgoc2l6ZSA9IFB5U3RyaW5nX1NpemUoYXJncykpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQogICAgICAgICBpZiAoc2l6ZSA8IDI1NikgewogICAgICAgICAgICAgY19zdHJbMF0gPSBTSE9SVF9CSU5TVFJJTkc7CiAgICAgICAgICAgICBjX3N0clsxXSA9IHNpemU7CkBAIC0xODY1LDEzICsxODc2LDc0IEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKiBUaGlzIGlzIGEgdmFyaWFudCBvZiBiYXRjaF9kaWN0KCkgYWJvdmUgdGhhdCBzcGVjaWFsaXplcyBmb3IgZGljdHMsIHdpdGggbm8KKyAqIHN1cHBvcnQgZm9yIGRpY3Qgc3ViY2xhc3Nlcy4gTGlrZSBiYXRjaF9kaWN0KCksIHdlIGJhdGNoIHVwIGNodW5rcyBvZgorICogICAgIE1BUksga2V5IHZhbHVlIC4uLiBrZXkgdmFsdWUgU0VUSVRFTVMKKyAqIG9wY29kZSBzZXF1ZW5jZXMuICBDYWxsaW5nIGNvZGUgc2hvdWxkIGhhdmUgYXJyYW5nZWQgdG8gZmlyc3QgY3JlYXRlIGFuCisgKiBlbXB0eSBkaWN0LCBvciBkaWN0LWxpa2Ugb2JqZWN0LCBmb3IgdGhlIFNFVElURU1TIHRvIG9wZXJhdGUgb24uCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY3VycmVudGx5IGRvZXNuJ3Qgd29yayBmb3IgcHJvdG9jb2wgMC4KKyAqLworc3RhdGljIGludAorYmF0Y2hfZGljdF9leGFjdChQaWNrbGVyb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworICAgIGludCBpOworICAgIFB5X3NzaXplX3QgZGljdF9zaXplLCBwcG9zID0gMDsKKworICAgIHN0YXRpYyBjaGFyIHNldGl0ZW0gPSBTRVRJVEVNOworICAgIHN0YXRpYyBjaGFyIHNldGl0ZW1zID0gU0VUSVRFTVM7CisKKyAgICBhc3NlcnQob2JqICE9IE5VTEwpOworICAgIGFzc2VydChzZWxmLT5wcm90byA+IDApOworCisgICAgZGljdF9zaXplID0gUHlEaWN0X1NpemUob2JqKTsKKworICAgIC8qIFNwZWNpYWwtY2FzZSBsZW4oZCkgPT0gMSB0byBzYXZlIHNwYWNlLiAqLworICAgIGlmIChkaWN0X3NpemUgPT0gMSkgeworICAgICAgICBQeURpY3RfTmV4dChvYmosICZwcG9zLCAma2V5LCAmdmFsdWUpOworICAgICAgICBpZiAoc2F2ZShzZWxmLCBrZXksIDApIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNhdmUoc2VsZiwgdmFsdWUsIDApIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgJnNldGl0ZW0sIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogV3JpdGUgaW4gYmF0Y2hlcyBvZiBCQVRDSFNJWkUuICovCisgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlX2Z1bmMoc2VsZiwgJk1BUkt2LCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChvYmosICZwcG9zLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBrZXksIDApIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCB2YWx1ZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICgrK2kgPT0gQkFUQ0hTSVpFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzZWxmLT53cml0ZV9mdW5jKHNlbGYsICZzZXRpdGVtcywgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlEaWN0X1NpemUob2JqKSAhPSBkaWN0X3NpemUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgImRpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoaSA9PSBCQVRDSFNJWkUpOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBzYXZlX2RpY3QoUGlja2xlcm9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgaW50IHJlcyA9IC0xOwogICAgIGNoYXIgc1szXTsKICAgICBpbnQgbGVuOwotICAgIFB5T2JqZWN0ICppdGVyOwogCiAgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9lbnRlcihzZWxmLCBhcmdzKSkKICAgICAgICAgZ290byBmaW5hbGx5OwpAQCAtMTkwMywxNSArMTk3NSwyMyBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAKICAgICAvKiBNYXRlcmlhbGl6ZSB0aGUgZGljdCBpdGVtcy4gKi8KLSAgICBpdGVyID0gUHlPYmplY3RfQ2FsbE1ldGhvZChhcmdzLCAiaXRlcml0ZW1zIiwgIigpIik7Ci0gICAgaWYgKGl0ZXIgPT0gTlVMTCkKLSAgICAgICAgZ290byBmaW5hbGx5OwotICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSA9PSAwKQotICAgIHsKLSAgICAgICAgcmVzID0gYmF0Y2hfZGljdChzZWxmLCBpdGVyKTsKLSAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGFyZ3MpICYmIHNlbGYtPnByb3RvID4gMCkgeworICAgICAgICAvKiBXZSBjYW4gdGFrZSBjZXJ0YWluIHNob3J0Y3V0cyBpZiB3ZSBrbm93IHRoaXMgaXMgYSBkaWN0IGFuZAorICAgICAgICAgICBub3QgYSBkaWN0IHN1YmNsYXNzLiAqLworICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikgPT0gMCkgeworICAgICAgICAgICAgcmVzID0gYmF0Y2hfZGljdF9leGFjdChzZWxmLCBhcmdzKTsKKyAgICAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGFyZ3MsICJpdGVyaXRlbXMiLCAiKCkiKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIHBpY2tsaW5nIGFuIG9iamVjdCIpID09IDApIHsKKyAgICAgICAgICAgIHJlcyA9IGJhdGNoX2RpY3Qoc2VsZiwgaXRlcik7CisgICAgICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlcik7CiAgICAgfQotICAgIFB5X0RFQ1JFRihpdGVyKTsKIAogICBmaW5hbGx5OgogICAgIGlmIChzZWxmLT5mYXN0ICYmICFmYXN0X3NhdmVfbGVhdmUoc2VsZiwgYXJncykpCkBAIC0zNDY4LDExICszNTQ4LDExIEBACiAgICAgaWYgKGxlbiA8IDIpIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKICAgICBpZiAoISggcz1weXN0cm5kdXAocyxsZW4pKSkgIHJldHVybiAtMTsKIAotICAgIGVycm5vID0gMDsKLSAgICBkID0gUHlPU19hc2NpaV9zdHJ0b2QocywgJmVuZHB0cik7CisgICAgZCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAmZW5kcHRyLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKIAotICAgIGlmICgoZXJybm8gPT0gRVJBTkdFICYmICEoZmFicyhkKSA8PSAxLjApKSB8fAotICAgICAgICAoZW5kcHRyWzBdICE9ICdcbicpIHx8IChlbmRwdHJbMV0gIT0gJ1wwJykpIHsKKyAgICBpZiAoZCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgZ290byBmaW5hbGx5OworICAgIH0gZWxzZSBpZiAoKGVuZHB0clswXSAhPSAnXG4nKSB8fCAoZW5kcHRyWzFdICE9ICdcMCcpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBmbG9hdCIpOwogICAgICAgICBnb3RvIGZpbmFsbHk7CkBAIC00NDc3LDggKzQ1NTcsMTYgQEAKIAogICAgICAgICBpID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHN0YXRlLCAmaSwgJmRfa2V5LCAmZF92YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRJdGVtKGRpY3QsIGRfa2V5LCBkX3ZhbHVlKSA8IDApCisgICAgICAgICAgICAvKiBub3JtYWxseSB0aGUga2V5cyBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUKKyAgICAgICAgICAgICAgIGludGVybmVkLiAgd2Ugc2hvdWxkIHRyeSB0byBkbyB0aGF0IGhlcmUuICovCisgICAgICAgICAgICBQeV9JTkNSRUYoZF9rZXkpOworICAgICAgICAgICAgaWYgKFB5U3RyaW5nX0NoZWNrRXhhY3QoZF9rZXkpKQorICAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkluUGxhY2UoJmRfa2V5KTsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRJdGVtKGRpY3QsIGRfa2V5LCBkX3ZhbHVlKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZF9rZXkpOwogICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihkX2tleSk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgIH0KQEAgLTQ5NzEsNiArNTA1OSwzMyBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citub2xvYWRfYXBwZW5kKFVucGlja2xlcm9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIHNlbGYtPnN0YWNrLT5sZW5ndGggLSAxKTsKK30KKworc3RhdGljIGludAorbm9sb2FkX2FwcGVuZHMoVW5waWNrbGVyb2JqZWN0ICpzZWxmKQoreworICAgIGludCBpOworICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBpKTsKK30KKworc3RhdGljIGludAorbm9sb2FkX3NldGl0ZW0oVW5waWNrbGVyb2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgc2VsZi0+c3RhY2stPmxlbmd0aCAtIDIpOworfQorCitzdGF0aWMgaW50Citub2xvYWRfc2V0aXRlbXMoVW5waWNrbGVyb2JqZWN0ICpzZWxmKQoreworICAgIGludCBpOworICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBpKTsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIG5vbG9hZChVbnBpY2tsZXJvYmplY3QgKnNlbGYpCkBAIC01MTI5LDEyICs1MjQ0LDEyIEBACiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBjYXNlIEFQUEVORDoKLSAgICAgICAgICAgIGlmIChsb2FkX2FwcGVuZChzZWxmKSA8IDApCisgICAgICAgICAgICBpZiAobm9sb2FkX2FwcGVuZChzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBjYXNlIEFQUEVORFM6Ci0gICAgICAgICAgICBpZiAobG9hZF9hcHBlbmRzKHNlbGYpIDwgMCkKKyAgICAgICAgICAgIGlmIChub2xvYWRfYXBwZW5kcyhzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtNTIwOSwxMiArNTMyNCwxMiBAQAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgY2FzZSBTRVRJVEVNOgotICAgICAgICAgICAgaWYgKGxvYWRfc2V0aXRlbShzZWxmKSA8IDApCisgICAgICAgICAgICBpZiAobm9sb2FkX3NldGl0ZW0oc2VsZikgPCAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgY2FzZSBTRVRJVEVNUzoKLSAgICAgICAgICAgIGlmIChsb2FkX3NldGl0ZW1zKHNlbGYpIDwgMCkKKyAgICAgICAgICAgIGlmIChub2xvYWRfc2V0aXRlbXMoc2VsZikgPCAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY1N0cmluZ0lPLmMgYi9Nb2R1bGVzL2NTdHJpbmdJTy5jCmluZGV4IDdlMzMwMzMuLmJlOWFkNTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY1N0cmluZ0lPLmMKKysrIGIvTW9kdWxlcy9jU3RyaW5nSU8uYwpAQCAtMzM5LDEyICszMzksMTIgQEAKIAogLyogUmVhZC13cml0ZSBvYmplY3QgbWV0aG9kcyAqLwogCi1QeURvY19TVFJWQVIoT19zZWVrX19kb2NfXywKK1B5RG9jX1NUUlZBUihJT19zZWVrX19kb2NfXywKICJzZWVrKHBvc2l0aW9uKSAgICAgICAtLSBzZXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cbiIKICJzZWVrKHBvc2l0aW9uLCBtb2RlKSAtLSBtb2RlIDA6IGFic29sdXRlOyAxOiByZWxhdGl2ZTsgMjogcmVsYXRpdmUgdG8gRU9GIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1PX3NlZWsoT29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIHsKK0lPX3NlZWsoSW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIHsKICAgICBQeV9zc2l6ZV90IHBvc2l0aW9uOwogICAgIGludCBtb2RlID0gMDsKIApAQCAtMzU5LDI1ICszNTksMTAgQEAKICAgICAgICAgcG9zaXRpb24gKz0gc2VsZi0+cG9zOwogICAgIH0KIAotICAgIGlmIChwb3NpdGlvbiA+IHNlbGYtPmJ1Zl9zaXplKSB7Ci0gICAgICAgICAgICAgIGNoYXIgKm5ld2J1ZjsKLSAgICAgICAgICAgICAgc2VsZi0+YnVmX3NpemUqPTI7Ci0gICAgICAgICAgICAgIGlmIChzZWxmLT5idWZfc2l6ZSA8PSBwb3NpdGlvbikgc2VsZi0+YnVmX3NpemU9cG9zaXRpb24rMTsKLSAgICAgICAgICAgICAgbmV3YnVmID0gKGNoYXIqKSByZWFsbG9jKHNlbGYtPmJ1ZixzZWxmLT5idWZfc2l6ZSk7Ci0gICAgICAgICAgICAgIGlmICghbmV3YnVmKSB7Ci0gICAgICAgICAgICAgICAgICBmcmVlKHNlbGYtPmJ1Zik7Ci0gICAgICAgICAgICAgICAgICBzZWxmLT5idWYgPSAwOwotICAgICAgICAgICAgICAgICAgc2VsZi0+YnVmX3NpemU9c2VsZi0+cG9zPTA7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHNlbGYtPmJ1ZiA9IG5ld2J1ZjsKLSAgICAgIH0KLSAgICBlbHNlIGlmIChwb3NpdGlvbiA8IDApIHBvc2l0aW9uPTA7CisgICAgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb249MDsKIAogICAgIHNlbGYtPnBvcz1wb3NpdGlvbjsKIAotICAgIHdoaWxlICgtLXBvc2l0aW9uID49IHNlbGYtPnN0cmluZ19zaXplKSBzZWxmLT5idWZbcG9zaXRpb25dPTA7Ci0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC00MTQsNiArMzk5LDE5IEBACiAgICAgICAgIG9zZWxmLT5idWYgPSBuZXdidWY7CiAgICAgICB9CiAKKyAgICBpZiAob3NlbGYtPnN0cmluZ19zaXplIDwgb3NlbGYtPnBvcykgeworICAgICAgICAvKiBJbiBjYXNlIG9mIG92ZXJzZWVrLCBwYWQgd2l0aCBudWxsIGJ5dGVzIHRoZSBidWZmZXIgcmVnaW9uIGJldHdlZW4KKyAgICAgICAgICAgdGhlIGVuZCBvZiBzdHJlYW0gYW5kIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorCisgICAgICAgICAgMCAgIGxvICAgICAgc3RyaW5nX3NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICBoaQorICAgICAgICAgIHwgICB8PC0tLXVzZWQtLS0+fDwtLS0tLS0tLS0tYXZhaWxhYmxlLS0tLS0tLS0tLS0+fAorICAgICAgICAgIHwgICB8ICAgICAgICAgICAgPC0tdG8gcGFkLS0+fDwtLS10byB3cml0ZS0tLT4gICAgfAorICAgICAgICAgIDAgICBidWYgICAgICAgICAgICAgICAgICAgcG9zaXRpb24KKyAgICAgICAgKi8KKyAgICAgICAgbWVtc2V0KG9zZWxmLT5idWYgKyBvc2VsZi0+c3RyaW5nX3NpemUsICdcMCcsCisgICAgICAgICAgICAgICAob3NlbGYtPnBvcyAtIG9zZWxmLT5zdHJpbmdfc2l6ZSkgKiBzaXplb2YoY2hhcikpOworICAgIH0KKwogICAgIG1lbWNweShvc2VsZi0+YnVmK29zZWxmLT5wb3MsYyxsKTsKIAogICAgIGFzc2VydChvc2VsZi0+cG9zICsgbCA8IElOVF9NQVgpOwpAQCAtNDk3LDEyICs0OTUsMTIgQEAKICAgeyJyZWFkbGluZSIsICAoUHlDRnVuY3Rpb24pSU9fcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgSU9fcmVhZGxpbmVfX2RvY19ffSwKICAgeyJyZWFkbGluZXMiLCAoUHlDRnVuY3Rpb24pSU9fcmVhZGxpbmVzLE1FVEhfVkFSQVJHUywgSU9fcmVhZGxpbmVzX19kb2NfX30sCiAgIHsicmVzZXQiLCAgICAgKFB5Q0Z1bmN0aW9uKUlPX3Jlc2V0LCAgICBNRVRIX05PQVJHUywgIElPX3Jlc2V0X19kb2NfX30sCisgIHsic2VlayIsICAgICAgKFB5Q0Z1bmN0aW9uKUlPX3NlZWssICAgICBNRVRIX1ZBUkFSR1MsIElPX3NlZWtfX2RvY19ffSwKICAgeyJ0ZWxsIiwgICAgICAoUHlDRnVuY3Rpb24pSU9fdGVsbCwgICAgIE1FVEhfTk9BUkdTLCAgSU9fdGVsbF9fZG9jX199LAogICB7InRydW5jYXRlIiwgIChQeUNGdW5jdGlvbilJT190cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBJT190cnVuY2F0ZV9fZG9jX199LAogCiAgIC8qIFJlYWQtd3JpdGUgU3RyaW5nSU8gc3BlY2lmaWMgIG1ldGhvZHM6ICovCiAgIHsiY2xvc2UiLCAgICAgIChQeUNGdW5jdGlvbilPX2Nsb3NlLCAgICAgIE1FVEhfTk9BUkdTLCAgT19jbG9zZV9fZG9jX199LAotICB7InNlZWsiLCAgICAgICAoUHlDRnVuY3Rpb24pT19zZWVrLCAgICAgICBNRVRIX1ZBUkFSR1MsIE9fc2Vla19fZG9jX199LAogICB7IndyaXRlIiwgICAgICAoUHlDRnVuY3Rpb24pT193cml0ZSwgICAgICBNRVRIX1ZBUkFSR1MsIE9fd3JpdGVfX2RvY19ffSwKICAgeyJ3cml0ZWxpbmVzIiwgKFB5Q0Z1bmN0aW9uKU9fd3JpdGVsaW5lcywgTUVUSF9PLCAgICAgICBPX3dyaXRlbGluZXNfX2RvY19ffSwKICAge05VTEwsICAgICAgICAgTlVMTH0gICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTU5NSwyNiArNTkzLDYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLUlfc2VlayhJb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgewotICAgIFB5X3NzaXplX3QgcG9zaXRpb247Ci0gICAgaW50IG1vZGUgPSAwOwotCi0gICAgaWYgKCFJT19fb3BlbmNoZWNrKElPT09CSkVDVChzZWxmKSkpIHJldHVybiBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibnxpOnNlZWsiLCAmcG9zaXRpb24sICZtb2RlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAobW9kZSA9PSAyKSBwb3NpdGlvbiArPSBzZWxmLT5zdHJpbmdfc2l6ZTsKLSAgICBlbHNlIGlmIChtb2RlID09IDEpIHBvc2l0aW9uICs9IHNlbGYtPnBvczsKLQotICAgIGlmIChwb3NpdGlvbiA8IDApIHBvc2l0aW9uPTA7Ci0KLSAgICBzZWxmLT5wb3M9cG9zaXRpb247Ci0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgSV9tZXRob2RzW10gPSB7CiAgIC8qIENvbW1vbiBtZXRob2RzOiAqLwogICB7ImZsdXNoIiwgICAgIChQeUNGdW5jdGlvbilJT19mbHVzaCwgICAgTUVUSF9OT0FSR1MsICBJT19mbHVzaF9fZG9jX199LApAQCAtNjI0LDEyICs2MDIsMTIgQEAKICAgeyJyZWFkbGluZSIsICAoUHlDRnVuY3Rpb24pSU9fcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgSU9fcmVhZGxpbmVfX2RvY19ffSwKICAgeyJyZWFkbGluZXMiLCAoUHlDRnVuY3Rpb24pSU9fcmVhZGxpbmVzLE1FVEhfVkFSQVJHUywgSU9fcmVhZGxpbmVzX19kb2NfX30sCiAgIHsicmVzZXQiLCAgICAgKFB5Q0Z1bmN0aW9uKUlPX3Jlc2V0LCAgICBNRVRIX05PQVJHUywgIElPX3Jlc2V0X19kb2NfX30sCisgIHsic2VlayIsICAgICAgKFB5Q0Z1bmN0aW9uKUlPX3NlZWssICAgICBNRVRIX1ZBUkFSR1MsIElPX3NlZWtfX2RvY19ffSwKICAgeyJ0ZWxsIiwgICAgICAoUHlDRnVuY3Rpb24pSU9fdGVsbCwgICAgIE1FVEhfTk9BUkdTLCAgSU9fdGVsbF9fZG9jX199LAogICB7InRydW5jYXRlIiwgIChQeUNGdW5jdGlvbilJT190cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBJT190cnVuY2F0ZV9fZG9jX199LAogCiAgIC8qIFJlYWQtb25seSBTdHJpbmdJTyBzcGVjaWZpYyAgbWV0aG9kczogKi8KICAgeyJjbG9zZSIsICAgICAoUHlDRnVuY3Rpb24pSV9jbG9zZSwgICAgTUVUSF9OT0FSR1MsICBPX2Nsb3NlX19kb2NfX30sCi0gIHsic2VlayIsICAgICAgKFB5Q0Z1bmN0aW9uKUlfc2VlaywgICAgIE1FVEhfVkFSQVJHUywgT19zZWVrX19kb2NfX30sCiAgIHtOVUxMLCAgICAgICAgTlVMTH0KIH07CiAKQEAgLTc2MSw4ICs3MzksOCBAQAogICBQeV9UWVBFKCZPdHlwZSk9JlB5VHlwZV9UeXBlOwogICBpZiAoUHlUeXBlX1JlYWR5KCZPdHlwZSkgPCAwKSByZXR1cm47CiAgIGlmIChQeVR5cGVfUmVhZHkoJkl0eXBlKSA8IDApIHJldHVybjsKLSAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwiY1N0cmluZ0lPX0NBUEkiLAotICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKCZDQVBJLE5VTEwpKTsKKyAgdiA9IFB5Q2Fwc3VsZV9OZXcoJkNBUEksIFB5Y1N0cmluZ0lPX0NBUFNVTEVfTkFNRSwgTlVMTCk7CisgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsImNTdHJpbmdJT19DQVBJIiwgdik7CiAgIFB5X1hERUNSRUYodik7CiAKICAgLyogRXhwb3J0IFR5cGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaCBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCmluZGV4IGZhZTBjNjIuLjdlODM5MGEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgY29kZWNvYmogPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoKHZvaWQgKiljb2RlYywgTlVMTCk7CisgICAgY29kZWNvYmogPSBQeUNhcHN1bGVfTmV3KCh2b2lkICopY29kZWMsIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKICAgICBpZiAoY29kZWNvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgICAgICBpbnQgcjsKICAgICAgICAgc3RyY3B5KG1obmFtZSArIHNpemVvZigiX19tYXBfIikgLSAxLCBoLT5jaGFyc2V0KTsKICAgICAgICAgciA9IFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsIG1obmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0cigodm9pZCAqKWgsIE5VTEwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9OZXcoKHZvaWQgKiloLCBQeU11bHRpYnl0ZUNvZGVjX0NBUFNVTEVfTkFNRSwgTlVMTCkpOwogICAgICAgICBpZiAociA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zNjIsMTQgKzM2MiwxNCBAQAogICAgIG8gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZCwgKGNoYXIqKXN5bWJvbCk7CiAgICAgaWYgKG8gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgZWxzZSBpZiAoIVB5Q09iamVjdF9DaGVjayhvKSkgeworICAgIGVsc2UgaWYgKCFQeUNhcHN1bGVfSXNWYWxpZChvLCBQeU11bHRpYnl0ZUNvZGVjX0NBUFNVTEVfTkFNRSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibWFwIGRhdGEgbXVzdCBiZSBhIENPYmplY3QuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAibWFwIGRhdGEgbXVzdCBiZSBhIENhcHN1bGUuIik7CiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgc3RydWN0IGRiY3NfbWFwICptYXA7Ci0gICAgICAgIG1hcCA9IFB5Q09iamVjdF9Bc1ZvaWRQdHIobyk7CisgICAgICAgIG1hcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG8sIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FKTsKICAgICAgICAgaWYgKGVuY21hcCAhPSBOVUxMKQogICAgICAgICAgICAgKmVuY21hcCA9IG1hcC0+ZW5jbWFwOwogICAgICAgICBpZiAoZGVjbWFwICE9IE5VTEwpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwppbmRleCBhODNmNzNiLi4xZjMxNTk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKQEAgLTE3NzQsMTIgKzE3NzQsMTIgQEAKICAgICBNdWx0aWJ5dGVDb2RlY09iamVjdCAqc2VsZjsKICAgICBNdWx0aWJ5dGVDb2RlYyAqY29kZWM7CiAKLSAgICBpZiAoIVB5Q09iamVjdF9DaGVjayhhcmcpKSB7CisgICAgaWYgKCFQeUNhcHN1bGVfSXNWYWxpZChhcmcsIFB5TXVsdGlieXRlQ29kZWNfQ0FQU1VMRV9OQU1FKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImFyZ3VtZW50IHR5cGUgaW52YWxpZCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBjb2RlYyA9IFB5Q09iamVjdF9Bc1ZvaWRQdHIoYXJnKTsKKyAgICBjb2RlYyA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKGFyZywgUHlNdWx0aWJ5dGVDb2RlY19DQVBTVUxFX05BTUUpOwogICAgIGlmIChjb2RlYy0+Y29kZWNpbml0ICE9IE5VTEwgJiYgY29kZWMtPmNvZGVjaW5pdChjb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaCBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKaW5kZXggZjIwYzA3ZC4uMWI2ZWY1NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCkBAIC0xMzIsNiArMTMyLDkgQEAKICNkZWZpbmUgTUJFTkNfRkxVU0ggICAgICAgICAgICAgMHgwMDAxIC8qIGVuY29kZSBhbGwgY2hhcmFjdGVycyBlbmNvZGFibGUgKi8KICNkZWZpbmUgTUJFTkNfTUFYICAgICAgICAgICAgICAgTUJFTkNfRkxVU0gKIAorI2RlZmluZSBQeU11bHRpYnl0ZUNvZGVjX0NBUFNVTEVfTkFNRSAibXVsdGlieXRlY29kZWMuX19tYXBfKiIKKworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCmluZGV4IGVlYzYxYzAuLjgyNWY3YWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY21hdGhtb2R1bGUuYworKysgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKQEAgLTMsNiArMyw3IEBACiAvKiBtdWNoIGNvZGUgYm9ycm93ZWQgZnJvbSBtYXRobW9kdWxlLmMgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgIl9tYXRoLmgiCiAvKiB3ZSBuZWVkIERCTF9NQVgsIERCTF9NSU4sIERCTF9FUFNJTE9OLCBEQkxfTUFOVF9ESUcgYW5kIEZMVF9SQURJWCBmcm9tCiAgICBmbG9hdC5oLiAgV2UgYXNzdW1lIHRoYXQgRkxUX1JBRElYIGlzIGVpdGhlciAyIG9yIDE2LiAqLwogI2luY2x1ZGUgPGZsb2F0Lmg+CkBAIC0xNDksNyArMTUwLDcgQEAKICAgICAgICAgczIuaW1hZyA9IHouaW1hZzsKICAgICAgICAgczIgPSBjX3NxcnQoczIpOwogICAgICAgICByLnJlYWwgPSAyLiphdGFuMihzMS5yZWFsLCBzMi5yZWFsKTsKLSAgICAgICAgci5pbWFnID0gYXNpbmgoczIucmVhbCpzMS5pbWFnIC0gczIuaW1hZypzMS5yZWFsKTsKKyAgICAgICAgci5pbWFnID0gbV9hc2luaChzMi5yZWFsKnMxLmltYWcgLSBzMi5pbWFnKnMxLnJlYWwpOwogICAgIH0KICAgICBlcnJubyA9IDA7CiAgICAgcmV0dXJuIHI7CkBAIC0xODEsNyArMTgyLDcgQEAKICAgICAgICAgczIucmVhbCA9IHoucmVhbCArIDEuOwogICAgICAgICBzMi5pbWFnID0gei5pbWFnOwogICAgICAgICBzMiA9IGNfc3FydChzMik7Ci0gICAgICAgIHIucmVhbCA9IGFzaW5oKHMxLnJlYWwqczIucmVhbCArIHMxLmltYWcqczIuaW1hZyk7CisgICAgICAgIHIucmVhbCA9IG1fYXNpbmgoczEucmVhbCpzMi5yZWFsICsgczEuaW1hZypzMi5pbWFnKTsKICAgICAgICAgci5pbWFnID0gMi4qYXRhbjIoczEuaW1hZywgczIucmVhbCk7CiAgICAgfQogICAgIGVycm5vID0gMDsKQEAgLTIzOCw3ICsyMzksNyBAQAogICAgICAgICBzMi5yZWFsID0gMS4tei5pbWFnOwogICAgICAgICBzMi5pbWFnID0gei5yZWFsOwogICAgICAgICBzMiA9IGNfc3FydChzMik7Ci0gICAgICAgIHIucmVhbCA9IGFzaW5oKHMxLnJlYWwqczIuaW1hZy1zMi5yZWFsKnMxLmltYWcpOworICAgICAgICByLnJlYWwgPSBtX2FzaW5oKHMxLnJlYWwqczIuaW1hZy1zMi5yZWFsKnMxLmltYWcpOwogICAgICAgICByLmltYWcgPSBhdGFuMih6LmltYWcsIHMxLnJlYWwqczIucmVhbC1zMS5pbWFnKnMyLmltYWcpOwogICAgIH0KICAgICBlcnJubyA9IDA7CkBAIC0zNDIsNyArMzQzLDcgQEAKICAgICAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHIucmVhbCA9IGxvZzFwKDQuKnoucmVhbC8oKDEtei5yZWFsKSooMS16LnJlYWwpICsgYXkqYXkpKS80LjsKKyAgICAgICAgci5yZWFsID0gbV9sb2cxcCg0Lip6LnJlYWwvKCgxLXoucmVhbCkqKDEtei5yZWFsKSArIGF5KmF5KSkvNC47CiAgICAgICAgIHIuaW1hZyA9IC1hdGFuMigtMi4qei5pbWFnLCAoMS16LnJlYWwpKigxK3oucmVhbCkgLSBheSpheSkvMi47CiAgICAgICAgIGVycm5vID0gMDsKICAgICB9CkBAIC01NTIsNyArNTUzLDcgQEAKICAgICAgICAgaWYgKDAuNzEgPD0gaCAmJiBoIDw9IDEuNzMpIHsKICAgICAgICAgICAgIGFtID0gYXggPiBheSA/IGF4IDogYXk7ICAvKiBtYXgoYXgsIGF5KSAqLwogICAgICAgICAgICAgYW4gPSBheCA+IGF5ID8gYXkgOiBheDsgIC8qIG1pbihheCwgYXkpICovCi0gICAgICAgICAgICByLnJlYWwgPSBsb2cxcCgoYW0tMSkqKGFtKzEpK2FuKmFuKS8yLjsKKyAgICAgICAgICAgIHIucmVhbCA9IG1fbG9nMXAoKGFtLTEpKihhbSsxKSthbiphbikvMi47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByLnJlYWwgPSBsb2coaCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYyBiL01vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYwppbmRleCA5ODg0OGMxLi5mOTA3MDkzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9kYXRldGltZW1vZHVsZS5jCkBAIC0xNTIzLDcgKzE1MjMsNyBAQAogICAgICAgICBnb3RvIERvbmU7CiAgICAgUHlfREVDUkVGKHgxKTsKICAgICBQeV9ERUNSRUYoeDIpOwotICAgIHgxID0geDIgPSBOVUxMOworICAgIHgyID0gTlVMTDsKIAogICAgIC8qIHgzIGhhcyBkYXlzK3NlY29uZHMgaW4gc2Vjb25kcyAqLwogICAgIHgxID0gUHlOdW1iZXJfTXVsdGlwbHkoeDMsIHVzX3Blcl9zZWNvbmQpOyAgICAgICAgICAvKiB1cyAqLwpAQCAtMjA5Nyw2ICsyMDk3LDMwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitkZWx0YV90b3RhbF9zZWNvbmRzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp0b3RhbF9zZWNvbmRzOworICAgIFB5T2JqZWN0ICp0b3RhbF9taWNyb3NlY29uZHM7CisgICAgUHlPYmplY3QgKm9uZV9taWxsaW9uOworCisgICAgdG90YWxfbWljcm9zZWNvbmRzID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKChQeURhdGVUaW1lX0RlbHRhICopc2VsZik7CisgICAgaWYgKHRvdGFsX21pY3Jvc2Vjb25kcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9uZV9taWxsaW9uID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDBMKTsKKyAgICBpZiAob25lX21pbGxpb24gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdG90YWxfc2Vjb25kcyA9IFB5TnVtYmVyX1RydWVEaXZpZGUodG90YWxfbWljcm9zZWNvbmRzLCBvbmVfbWlsbGlvbik7CisKKyAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKKyAgICBQeV9ERUNSRUYob25lX21pbGxpb24pOworICAgIHJldHVybiB0b3RhbF9zZWNvbmRzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZGVsdGFfcmVkdWNlKFB5RGF0ZVRpbWVfRGVsdGEqIHNlbGYpCiB7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk9OIiwgUHlfVFlQRShzZWxmKSwgZGVsdGFfZ2V0c3RhdGUoc2VsZikpOwpAQCAtMjExOCw3ICsyMTQyLDEwIEBACiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgZGVsdGFfbWV0aG9kc1tdID0gewotICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilkZWx0YV9yZWR1Y2UsICAgICBNRVRIX05PQVJHUywKKyAgICB7InRvdGFsX3NlY29uZHMiLCAoUHlDRnVuY3Rpb24pZGVsdGFfdG90YWxfc2Vjb25kcywgTUVUSF9OT0FSR1MsCisgICAgIFB5RG9jX1NUUigiVG90YWwgc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uIil9LAorCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWRlbHRhX3JlZHVjZSwgTUVUSF9OT0FSR1MsCiAgICAgIFB5RG9jX1NUUigiX19yZWR1Y2VfXygpIC0+IChjbHMsIHN0YXRlKSIpfSwKIAogICAgIHtOVUxMLCAgICAgIE5VTEx9LApAQCAtMzk0NCw3ICszOTcxLDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnb29kX3RpbWV0dXBsZSA9IDA7CiAgICAgICAgICAgICAvKiBmb2xsb3cgdGhhdCB1cCB3aXRoIGEgbGl0dGxlIGRvc2Ugb2YgbWljcm9zZWNvbmRzICovCi0gICAgICAgICAgICBpZiAoUHlJbnRfQ2hlY2soZnJhYykpCisgICAgICAgICAgICBpZiAoZ29vZF90aW1ldHVwbGUgJiYgUHlJbnRfQ2hlY2soZnJhYykpCiAgICAgICAgICAgICAgICAgaWFbNl0gPSBQeUludF9Bc0xvbmcoZnJhYyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZ29vZF90aW1ldHVwbGUgPSAwOwpAQCAtNDg0OCw4ICs0ODc1LDcgQEAKICAgICBQeV9JTkNSRUYoJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ0emluZm8iLCAoUHlPYmplY3QgKikgJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSk7CiAKLSAgICB4ID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYygmQ0FQSSwgKHZvaWQqKSBEQVRFVElNRV9BUElfTUFHSUMsCi0gICAgICAgIE5VTEwpOworICAgIHggPSBQeUNhcHN1bGVfTmV3KCZDQVBJLCBQeURhdGVUaW1lX0NBUFNVTEVfTkFNRSwgTlVMTCk7CiAgICAgaWYgKHggPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGF0ZXRpbWVfQ0FQSSIsIHgpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9leHBhdC9DT1BZSU5HIGIvTW9kdWxlcy9leHBhdC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOTdiMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2V4cGF0L0NPUFlJTkcKQEAgLTAsMCArMSwyMSBAQAorQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5LCAyMDAwIFRoYWkgT3BlbiBTb3VyY2UgU29mdHdhcmUgQ2VudGVyIEx0ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDbGFyayBDb29wZXIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCithIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCitpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mY250bG1vZHVsZS5jIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCmluZGV4IDYzZDA2ZDMuLjk5Nzg2N2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmNudGxtb2R1bGUuYworKysgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKQEAgLTgyLDEwICs4MiwxMCBAQAogUGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBvbiBmaWxlIGRlc2NyaXB0b3IgZmQuICBUaGUgb3BlcmF0aW9uXG5cCiBpcyBkZWZpbmVkIGJ5IG9wIGFuZCBpcyBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudC4gIFRoZXNlIGNvbnN0YW50cyBhcmVcblwKIGF2YWlsYWJsZSBmcm9tIHRoZSBmY250bCBtb2R1bGUuICBUaGUgYXJndW1lbnQgYXJnIGlzIG9wdGlvbmFsLCBhbmRcblwKLWRlZmF1bHRzIHRvIDA7IGl0IG1heSBiZSBhbiBpbnQgb3IgYSBzdHJpbmcuIElmIGFyZyBpcyBnaXZlbiBhcyBhIHN0cmluZyxcblwKK2RlZmF1bHRzIHRvIDA7IGl0IG1heSBiZSBhbiBpbnQgb3IgYSBzdHJpbmcuICBJZiBhcmcgaXMgZ2l2ZW4gYXMgYSBzdHJpbmcsXG5cCiB0aGUgcmV0dXJuIHZhbHVlIG9mIGZjbnRsIGlzIGEgc3RyaW5nIG9mIHRoYXQgbGVuZ3RoLCBjb250YWluaW5nIHRoZVxuXAotcmVzdWx0aW5nIHZhbHVlIHB1dCBpbiB0aGUgYXJnIGJ1ZmZlciBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS5UaGUgbGVuZ3RoXG5cCi1vZiB0aGUgYXJnIHN0cmluZyBpcyBub3QgYWxsb3dlZCB0byBleGNlZWQgMTAyNCBieXRlcy4gSWYgdGhlIGFyZyBnaXZlblxuXAorcmVzdWx0aW5nIHZhbHVlIHB1dCBpbiB0aGUgYXJnIGJ1ZmZlciBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBsZW5ndGhcblwKK29mIHRoZSBhcmcgc3RyaW5nIGlzIG5vdCBhbGxvd2VkIHRvIGV4Y2VlZCAxMDI0IGJ5dGVzLiAgSWYgdGhlIGFyZyBnaXZlblxuXAogaXMgYW4gaW50ZWdlciBvciBpZiBub25lIGlzIHNwZWNpZmllZCwgdGhlIHJlc3VsdCB2YWx1ZSBpcyBhbiBpbnRlZ2VyXG5cCiBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZjbnRsIGNhbGwgaW4gdGhlIEMgY29kZS4iKTsKIApAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGFyZyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG11dGF0ZV9hcmcgJiYgKGxlbiA8IElPQ1RMX0JVRlNaKSkgeworICAgICAgICBpZiAobXV0YXRlX2FyZyAmJiAobGVuIDw9IElPQ1RMX0JVRlNaKSkgewogICAgICAgICAgICAgbWVtY3B5KHN0ciwgYnVmLCBsZW4pOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Z1dHVyZV9idWlsdGlucy5jIGIvTW9kdWxlcy9mdXR1cmVfYnVpbHRpbnMuYwppbmRleCAxYWFlMmNjLi5iMmEzZWQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Z1dHVyZV9idWlsdGlucy5jCisrKyBiL01vZHVsZXMvZnV0dXJlX2J1aWx0aW5zLmMKQEAgLTE0LDEyICsxNCwyMCBAQAogXG5cCiBGdW5jdGlvbnM6XG5cCiBcblwKLWhleChhcmcpIC0tIFJldHVybnMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXJcblwKLW9jdChhcmcpIC0tIFJldHVybnMgdGhlIG9jdGFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXJcblwKK2FzY2lpKGFyZykgLS0gUmV0dXJucyB0aGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuXG5cCitmaWx0ZXIocHJlZCwgaXRlcmFibGUpIC0tIFJldHVybnMgYW4gaXRlcmF0b3IgeWllbGRpbmcgdGhvc2UgaXRlbXMgb2YgXG5cCisgICAgICAgaXRlcmFibGUgZm9yIHdoaWNoIHByZWQoaXRlbSkgaXMgdHJ1ZS5cblwKK2hleChhcmcpIC0tIFJldHVybnMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCittYXAoZnVuYywgKml0ZXJhYmxlcykgLS0gUmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IGNvbXB1dGVzIHRoZSBmdW5jdGlvbiBcblwKKyAgICB1c2luZyBhcmd1bWVudHMgZnJvbSBlYWNoIG9mIHRoZSBpdGVyYWJsZXMuXG5cCitvY3QoYXJnKSAtLSBSZXR1cm5zIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAoremlwKGl0ZXIxIFssaXRlcjIgWy4uLl1dKSAtLSBSZXR1cm5zIGEgemlwIG9iamVjdCB3aG9zZSAubmV4dCgpIG1ldGhvZCBcblwKKyAgICByZXR1cm5zIGEgdHVwbGUgd2hlcmUgdGhlIGktdGggZWxlbWVudCBjb21lcyBmcm9tIHRoZSBpLXRoIGl0ZXJhYmxlIFxuXAorICAgIGFyZ3VtZW50LlxuXAogXG5cCiBUaGUgdHlwaWNhbCB1c2FnZSBvZiB0aGlzIG1vZHVsZSBpcyB0byByZXBsYWNlIGV4aXN0aW5nIGJ1aWx0aW5zIGluIGFcblwKIG1vZHVsZSdzIG5hbWVzcGFjZTpcbiBcblwKLWZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBoZXgsIG9jdFxuIik7Citmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgYXNjaWksIGZpbHRlciwgbWFwLCBoZXgsIG9jdCwgemlwXG4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5faGV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKQEAgLTg1LDExICs5MywxMiBAQAogICAgIGlmIChpdGVydG9vbHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLyogSWYgYW55dGhpbmcgaW4gdGhlIGZvbGxvd2luZyBsb29wIGZhaWxzLCB3ZSBmYWxsIHRocm91Z2guICovCiAgICAgZm9yIChjdXJfZnVuYyA9IGl0X2Z1bmNzOyAqY3VyX2Z1bmM7ICsrY3VyX2Z1bmMpewogICAgICAgICBpdGVyX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGl0ZXJ0b29scywgKmN1cl9mdW5jKTsKLSAgICAgICAgaWYgKGl0ZXJfZnVuYyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgKmN1cl9mdW5jKzEsIGl0ZXJfZnVuYyk7CisgICAgICAgIGlmIChpdGVyX2Z1bmMgPT0gTlVMTCB8fAorICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICpjdXJfZnVuYysxLCBpdGVyX2Z1bmMpIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBQeV9ERUNSRUYoaXRlcnRvb2xzKTsKICAgICAvKiBhbnkgb3RoZXIgaW5pdGlhbGl6YXRpb24gbmVlZGVkICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2djbW9kdWxlLmMgYi9Nb2R1bGVzL2djbW9kdWxlLmMKaW5kZXggM2NjYmE1NS4uMzg0YzQ3ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nY21vZHVsZS5jCisrKyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwpAQCAtNjMsNiArNjMsNTUgQEAKIC8qIFB5dGhvbiBzdHJpbmcgdXNlZCB0byBsb29rIGZvciBfX2RlbF9fIGF0dHJpYnV0ZS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqZGVsc3RyID0gTlVMTDsKIAorLyogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hvIHN1cnZpdmVkIHRoZSBsYXN0IGZ1bGwgY29sbGVjdGlvbi4gSXQKKyAgIGFwcHJveGltYXRlcyB0aGUgbnVtYmVyIG9mIGxvbmcgbGl2ZWQgb2JqZWN0cyB0cmFja2VkIGJ5IHRoZSBHQy4KKworICAgKGJ5ICJmdWxsIGNvbGxlY3Rpb24iLCB3ZSBtZWFuIGEgY29sbGVjdGlvbiBvZiB0aGUgb2xkZXN0IGdlbmVyYXRpb24pLgorKi8KK3N0YXRpYyBQeV9zc2l6ZV90IGxvbmdfbGl2ZWRfdG90YWwgPSAwOworCisvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB3aG8gc3Vydml2ZWQgYWxsICJub24tZnVsbCIgY29sbGVjdGlvbnMsCisgICBhbmQgYXJlIGF3YWl0aW5nIHRvIHVuZGVyZ28gYSBmdWxsIGNvbGxlY3Rpb24gZm9yIHRoZSBmaXJzdCB0aW1lLgorCisqLworc3RhdGljIFB5X3NzaXplX3QgbG9uZ19saXZlZF9wZW5kaW5nID0gMDsKKworLyoKKyAgIE5PVEU6IGFib3V0IHRoZSBjb3VudGluZyBvZiBsb25nLWxpdmVkIG9iamVjdHMuCisKKyAgIFRvIGxpbWl0IHRoZSBjb3N0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiwgdGhlcmUgYXJlIHR3byBzdHJhdGVnaWVzOworICAgICAtIG1ha2UgZWFjaCBjb2xsZWN0aW9uIGZhc3RlciwgZS5nLiBieSBzY2FubmluZyBmZXdlciBvYmplY3RzCisgICAgIC0gZG8gbGVzcyBjb2xsZWN0aW9ucworICAgVGhpcyBoZXVyaXN0aWMgaXMgYWJvdXQgdGhlIGxhdHRlciBzdHJhdGVneS4KKworICAgSW4gYWRkaXRpb24gdG8gdGhlIHZhcmlvdXMgY29uZmlndXJhYmxlIHRocmVzaG9sZHMsIHdlIG9ubHkgdHJpZ2dlciBhCisgICBmdWxsIGNvbGxlY3Rpb24gaWYgdGhlIHJhdGlvCisgICAgbG9uZ19saXZlZF9wZW5kaW5nIC8gbG9uZ19saXZlZF90b3RhbAorICAgaXMgYWJvdmUgYSBnaXZlbiB2YWx1ZSAoaGFyZHdpcmVkIHRvIDI1JSkuCisKKyAgIFRoZSByZWFzb24gaXMgdGhhdCwgd2hpbGUgIm5vbi1mdWxsIiBjb2xsZWN0aW9ucyAoaS5lLiwgY29sbGVjdGlvbnMgb2YKKyAgIHRoZSB5b3VuZyBhbmQgbWlkZGxlIGdlbmVyYXRpb25zKSB3aWxsIGFsd2F5cyBleGFtaW5lIHJvdWdobHkgdGhlIHNhbWUKKyAgIG51bWJlciBvZiBvYmplY3RzIC0tIGRldGVybWluZWQgYnkgdGhlIGFmb3JlbWVudGlvbmVkIHRocmVzaG9sZHMgLS0sCisgICB0aGUgY29zdCBvZiBhIGZ1bGwgY29sbGVjdGlvbiBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHRvdGFsIG51bWJlciBvZgorICAgbG9uZy1saXZlZCBvYmplY3RzLCB3aGljaCBpcyB2aXJ0dWFsbHkgdW5ib3VuZGVkLgorCisgICBJbmRlZWQsIGl0IGhhcyBiZWVuIHJlbWFya2VkIHRoYXQgZG9pbmcgYSBmdWxsIGNvbGxlY3Rpb24gZXZlcnkKKyAgIDxjb25zdGFudCBudW1iZXI+IG9mIG9iamVjdCBjcmVhdGlvbnMgZW50YWlscyBhIGRyYW1hdGljIHBlcmZvcm1hbmNlCisgICBkZWdyYWRhdGlvbiBpbiB3b3JrbG9hZHMgd2hpY2ggY29uc2lzdCBpbiBjcmVhdGluZyBhbmQgc3RvcmluZyBsb3RzIG9mCisgICBsb25nLWxpdmVkIG9iamVjdHMgKGUuZy4gYnVpbGRpbmcgYSBsYXJnZSBsaXN0IG9mIEdDLXRyYWNrZWQgb2JqZWN0cyB3b3VsZAorICAgc2hvdyBxdWFkcmF0aWMgcGVyZm9ybWFuY2UsIGluc3RlYWQgb2YgbGluZWFyIGFzIGV4cGVjdGVkOiBzZWUgaXNzdWUgIzQwNzQpLgorCisgICBVc2luZyB0aGUgYWJvdmUgcmF0aW8sIGluc3RlYWQsIHlpZWxkcyBhbW9ydGl6ZWQgbGluZWFyIHBlcmZvcm1hbmNlIGluCisgICB0aGUgdG90YWwgbnVtYmVyIG9mIG9iamVjdHMgKHRoZSBlZmZlY3Qgb2Ygd2hpY2ggY2FuIGJlIHN1bW1hcml6ZWQKKyAgIHRodXNseTogImVhY2ggZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgbW9yZSBhbmQgbW9yZSBjb3N0bHkgYXMgdGhlCisgICBudW1iZXIgb2Ygb2JqZWN0cyBncm93cywgYnV0IHdlIGRvIGZld2VyIGFuZCBmZXdlciBvZiB0aGVtIikuCisKKyAgIFRoaXMgaGV1cmlzdGljIHdhcyBzdWdnZXN0ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMgb24gcHl0aG9uLWRldiBpbgorICAgSnVuZSAyMDA4LiBIaXMgb3JpZ2luYWwgYW5hbHlzaXMgYW5kIHByb3Bvc2FsIGNhbiBiZSBmb3VuZCBhdDoKKyAgICBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDgtSnVuZS8wODA1NzkuaHRtbAorKi8KKworCiAvKiBzZXQgZm9yIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBERUJVR19TVEFUUyAgICAgICAgICAgICAoMTw8MCkgLyogcHJpbnQgY29sbGVjdGlvbiBzdGF0aXN0aWNzICovCiAjZGVmaW5lIERFQlVHX0NPTExFQ1RBQkxFICAgICAgICgxPDwxKSAvKiBwcmludCBjb2xsZWN0YWJsZSBvYmplY3RzICovCkBAIC0zODQsNiArNDMzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpc2l0cHJvYyl2aXNpdF9yZWFjaGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil5b3VuZyk7CiAgICAgICAgICAgICBuZXh0ID0gZ2MtPmdjLmdjX25leHQ7CisgICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KG9wKSkgeworICAgICAgICAgICAgICAgIF9QeVR1cGxlX01heWJlVW50cmFjayhvcCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChQeURpY3RfQ2hlY2tFeGFjdChvcCkpIHsKKyAgICAgICAgICAgICAgICBfUHlEaWN0X01heWJlVW50cmFjayhvcCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBUaGlzICptYXkqIGJlIHVucmVhY2hhYmxlLiAgVG8gbWFrZSBwcm9ncmVzcywKQEAgLTczNSw3ICs3OTAsOSBAQAogICAgICh2b2lkKVB5RnJhbWVfQ2xlYXJGcmVlTGlzdCgpOwogICAgICh2b2lkKVB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QoKTsKICAgICAodm9pZClQeVR1cGxlX0NsZWFyRnJlZUxpc3QoKTsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgKHZvaWQpUHlVbmljb2RlX0NsZWFyRnJlZUxpc3QoKTsKKyNlbmRpZgogICAgICh2b2lkKVB5SW50X0NsZWFyRnJlZUxpc3QoKTsKICAgICAodm9pZClQeUZsb2F0X0NsZWFyRnJlZUxpc3QoKTsKIH0KQEAgLTgyNiw4ICs4ODMsMTYgQEAKICAgICBtb3ZlX3VucmVhY2hhYmxlKHlvdW5nLCAmdW5yZWFjaGFibGUpOwogCiAgICAgLyogTW92ZSByZWFjaGFibGUgb2JqZWN0cyB0byBuZXh0IGdlbmVyYXRpb24uICovCi0gICAgaWYgKHlvdW5nICE9IG9sZCkKKyAgICBpZiAoeW91bmcgIT0gb2xkKSB7CisgICAgICAgIGlmIChnZW5lcmF0aW9uID09IE5VTV9HRU5FUkFUSU9OUyAtIDIpIHsKKyAgICAgICAgICAgIGxvbmdfbGl2ZWRfcGVuZGluZyArPSBnY19saXN0X3NpemUoeW91bmcpOworICAgICAgICB9CiAgICAgICAgIGdjX2xpc3RfbWVyZ2UoeW91bmcsIG9sZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb25nX2xpdmVkX3BlbmRpbmcgPSAwOworICAgICAgICBsb25nX2xpdmVkX3RvdGFsID0gZ2NfbGlzdF9zaXplKHlvdW5nKTsKKyAgICB9CiAKICAgICAvKiBBbGwgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSBhcmUgdHJhc2gsIGJ1dCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tCiAgICAgICogZmluYWxpemVycyBjYW4ndCBzYWZlbHkgYmUgZGVsZXRlZC4gIFB5dGhvbiBwcm9ncmFtbWVycyBzaG91bGQgdGFrZQpAQCAtODk1LDcgKzk2MCw3IEBACiAgICAgICovCiAgICAgKHZvaWQpaGFuZGxlX2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CiAKLSAgICAvKiBDbGVhciBmcmVlIGxpc3Qgb25seSBkdXJpbmcgdGhlIGNvbGxlY3Rpb24gb2YgdGhlIGhpZ2VzdAorICAgIC8qIENsZWFyIGZyZWUgbGlzdCBvbmx5IGR1cmluZyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgaGlnaGVzdAogICAgICAqIGdlbmVyYXRpb24gKi8KICAgICBpZiAoZ2VuZXJhdGlvbiA9PSBOVU1fR0VORVJBVElPTlMtMSkgewogICAgICAgICBjbGVhcl9mcmVlbGlzdHMoKTsKQEAgLTkxNiwxMSArOTgxLDE4IEBACiAgICAgaW50IGk7CiAgICAgUHlfc3NpemVfdCBuID0gMDsKIAotICAgIC8qIEZpbmQgdGhlIG9sZGVzdCBnZW5lcmF0aW9uIChoaWdlc3QgbnVtYmVyZWQpIHdoZXJlIHRoZSBjb3VudAorICAgIC8qIEZpbmQgdGhlIG9sZGVzdCBnZW5lcmF0aW9uIChoaWdoZXN0IG51bWJlcmVkKSB3aGVyZSB0aGUgY291bnQKICAgICAgKiBleGNlZWRzIHRoZSB0aHJlc2hvbGQuICBPYmplY3RzIGluIHRoZSB0aGF0IGdlbmVyYXRpb24gYW5kCiAgICAgICogZ2VuZXJhdGlvbnMgeW91bmdlciB0aGFuIGl0IHdpbGwgYmUgY29sbGVjdGVkLiAqLwogICAgIGZvciAoaSA9IE5VTV9HRU5FUkFUSU9OUy0xOyBpID49IDA7IGktLSkgewogICAgICAgICBpZiAoZ2VuZXJhdGlvbnNbaV0uY291bnQgPiBnZW5lcmF0aW9uc1tpXS50aHJlc2hvbGQpIHsKKyAgICAgICAgICAgIC8qIEF2b2lkIHF1YWRyYXRpYyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBudW1iZXIKKyAgICAgICAgICAgICAgIG9mIHRyYWNrZWQgb2JqZWN0cy4gU2VlIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcKKyAgICAgICAgICAgICAgIG9mIHRoaXMgZmlsZSwgYW5kIGlzc3VlICM0MDc0LgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChpID09IE5VTV9HRU5FUkFUSU9OUyAtIDEKKyAgICAgICAgICAgICAgICAmJiBsb25nX2xpdmVkX3BlbmRpbmcgPCBsb25nX2xpdmVkX3RvdGFsIC8gNCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG4gPSBjb2xsZWN0KGkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTExOTgsNiArMTI3MCwyNiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1B5RG9jX1NUUlZBUihnY19pc190cmFja2VkX19kb2NfXywKKyJpc190cmFja2VkKG9iaikgLT4gYm9vbFxuIgorIlxuIgorIlJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLlxuIgorIlNpbXBsZSBhdG9taWMgb2JqZWN0cyB3aWxsIHJldHVybiBmYWxzZS5cbiIKKyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnY19pc190cmFja2VkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgICBpZiAoUHlPYmplY3RfSVNfR0Mob2JqKSAmJiBJU19UUkFDS0VEKG9iaikpCisgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKKyAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAKIFB5RG9jX1NUUlZBUihnY19fZG9jX18sCiAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgcmVmZXJlbmNlIGN5Y2xlcy5cbiIKQEAgLTEyMTIsNiArMTMwNCw3IEBACiAic2V0X3RocmVzaG9sZCgpIC0tIFNldCB0aGUgY29sbGVjdGlvbiB0aHJlc2hvbGRzLlxuIgogImdldF90aHJlc2hvbGQoKSAtLSBSZXR1cm4gdGhlIGN1cnJlbnQgdGhlIGNvbGxlY3Rpb24gdGhyZXNob2xkcy5cbiIKICJnZXRfb2JqZWN0cygpIC0tIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9iamVjdHMgdHJhY2tlZCBieSB0aGUgY29sbGVjdG9yLlxuIgorImlzX3RyYWNrZWQoKSAtLSBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBvYmplY3QgaXMgdHJhY2tlZC5cbiIKICJnZXRfcmVmZXJyZXJzKCkgLS0gUmV0dXJuIHRoZSBsaXN0IG9mIG9iamVjdHMgdGhhdCByZWZlciB0byBhbiBvYmplY3QuXG4iCiAiZ2V0X3JlZmVyZW50cygpIC0tIFJldHVybiB0aGUgbGlzdCBvZiBvYmplY3RzIHRoYXQgYW4gb2JqZWN0IHJlZmVycyB0by5cbiIpOwogCkBAIC0xMjI3LDYgKzEzMjAsNyBAQAogICAgIHsiY29sbGVjdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWdjX2NvbGxlY3QsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgICAgICBnY19jb2xsZWN0X19kb2NfX30sCiAgICAgeyJnZXRfb2JqZWN0cyIsICAgIGdjX2dldF9vYmplY3RzLE1FVEhfTk9BUkdTLCAgZ2NfZ2V0X29iamVjdHNfX2RvY19ffSwKKyAgICB7ImlzX3RyYWNrZWQiLCAgICAgZ2NfaXNfdHJhY2tlZCwgTUVUSF9PLCAgICAgICBnY19pc190cmFja2VkX19kb2NfX30sCiAgICAgeyJnZXRfcmVmZXJyZXJzIiwgIGdjX2dldF9yZWZlcnJlcnMsIE1FVEhfVkFSQVJHUywKICAgICAgICAgZ2NfZ2V0X3JlZmVycmVyc19fZG9jX199LAogICAgIHsiZ2V0X3JlZmVyZW50cyIsICBnY19nZXRfcmVmZXJlbnRzLCBNRVRIX1ZBUkFSR1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dldHBhdGguYyBiL01vZHVsZXMvZ2V0cGF0aC5jCmluZGV4IGYyOGY0YzYuLjlmYWFmYTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0cGF0aC5jCisrKyBiL01vZHVsZXMvZ2V0cGF0aC5jCkBAIC0yMzIsNyArMjMyLDExIEBACiAgICAgaWYgKHBbMF0gPT0gU0VQKQogICAgICAgICBzdHJjcHkocGF0aCwgcCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGdldGN3ZChwYXRoLCBNQVhQQVRITEVOKTsKKyAgICAgICAgaWYgKCFnZXRjd2QocGF0aCwgTUFYUEFUSExFTikpIHsKKyAgICAgICAgICAgIC8qIHVuYWJsZSB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBzdHJjcHkocGF0aCwgcCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIHBbMV0gPT0gU0VQKQogICAgICAgICAgICAgcCArPSAyOwogICAgICAgICBqb2lucGF0aChwYXRoLCBwKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ3JwbW9kdWxlLmMgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCmluZGV4IGZmYjQ1MWUuLjA3ZGU4ODAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ3JwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwpAQCAtMTU4LDcgKzE1OCw5IEBACiBuYW1lIGlzIG5vdCB2YWxpZCwgcmFpc2UgS2V5RXJyb3IuIn0sCiAgICAgeyJnZXRncmFsbCIsCWdycF9nZXRncmFsbCwJTUVUSF9OT0FSR1MsCiAgICAgICJnZXRncmFsbCgpIC0+IGxpc3Qgb2YgdHVwbGVzXG5cCi1SZXR1cm4gYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgZ3JvdXAgZW50cmllcywgaW4gYXJiaXRyYXJ5IG9yZGVyLiJ9LAorUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGdyb3VwIGVudHJpZXMsIGluIGFyYml0cmFyeSBvcmRlci5cblwKK0FuIGVudHJ5IHdob3NlIG5hbWUgc3RhcnRzIHdpdGggJysnIG9yICctJyByZXByZXNlbnRzIGFuIGluc3RydWN0aW9uXG5cCit0byB1c2UgWVAvTklTIGFuZCBtYXkgbm90IGJlIGFjY2Vzc2libGUgdmlhIGdldGdybmFtIG9yIGdldGdyZ2lkLiJ9LAogICAgIHtOVUxMLAkJTlVMTH0JCS8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwppbmRleCA5MWI0ODJkLi5mZjI1MzM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCisrKyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKQEAgLTc0NSw4ICs3NDUsMTAgQEAKICAgICB3aGlsZSAoMSkgewogICAgICAgICBpdGVtID0gUHlJdGVyX05leHQobHotPml0KTsKICAgICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFsei0+Zmlyc3RwYXNzKQotICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobHotPnNhdmVkLCBpdGVtKTsKKyAgICAgICAgICAgIGlmICghbHotPmZpcnN0cGFzcyAmJiBQeUxpc3RfQXBwZW5kKGx6LT5zYXZlZCwgaXRlbSkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgfQogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtODg2LDcgKzg4OCw2IEBACiAgICAgbG9uZyBvazsKICAgICBQeU9iamVjdCAqKCppdGVybmV4dCkoUHlPYmplY3QgKik7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlcm5leHQgPSAqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0OwogICAgIGZvciAoOzspIHsKICAgICAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKQEAgLTEwMzEsNyArMTAzMiw2IEBACiAgICAgaWYgKGx6LT5zdG9wID09IDEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgYXNzZXJ0KFB5SXRlcl9DaGVjayhpdCkpOwogICAgIGl0ZW0gPSAoKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dCkoaXQpOwogICAgIGlmIChpdGVtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAiU3RvcCBhcmd1bWVudCBmb3IgaXNsaWNlKCkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG9yIE5vbmUuIik7CisgICAgICAgICAgICAgICAgICAgICJTdG9wIGFyZ3VtZW50IGZvciBpc2xpY2UoKSBtdXN0IGJlIE5vbmUgb3IgYW4gaW50ZWdlcjogMCA8PSB4IDw9IG1heGludC4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTE1MiwxNCArMTE1MiwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICJTdG9wIGFyZ3VtZW50IGZvciBpc2xpY2UoKSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgb3IgTm9uZS4iKTsKKyAgICAgICAgICAgICAgICAgICAiU3RvcCBhcmd1bWVudCBmb3IgaXNsaWNlKCkgbXVzdCBiZSBOb25lIG9yIGFuIGludGVnZXI6IDAgPD0geCA8PSBtYXhpbnQuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHN0YXJ0PDAgfHwgc3RvcDwtMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgIkluZGljZXMgZm9yIGlzbGljZSgpIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGludGVnZXJzIG9yIE5vbmUuIik7CisgICAgICAgICAgICJJbmRpY2VzIGZvciBpc2xpY2UoKSBtdXN0IGJlIE5vbmUgb3IgYW4gaW50ZWdlcjogMCA8PSB4IDw9IG1heGludC4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjE1LDEwICsxMjE1LDEwIEBACiB7CiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgUHlPYmplY3QgKml0ID0gbHotPml0OworICAgIFB5X3NzaXplX3Qgc3RvcCA9IGx6LT5zdG9wOwogICAgIFB5X3NzaXplX3Qgb2xkbmV4dDsKICAgICBQeU9iamVjdCAqKCppdGVybmV4dCkoUHlPYmplY3QgKik7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlcm5leHQgPSAqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0OwogICAgIHdoaWxlIChsei0+Y250IDwgbHotPm5leHQpIHsKICAgICAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKQEAgLTEyMjcsMTcgKzEyMjcsMTYgQEAKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICBsei0+Y250Kys7CiAgICAgfQotICAgIGlmIChsei0+c3RvcCAhPSAtMSAmJiBsei0+Y250ID49IGx6LT5zdG9wKQorICAgIGlmIChzdG9wICE9IC0xICYmIGx6LT5jbnQgPj0gc3RvcCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5SXRlcl9DaGVjayhpdCkpOwogICAgIGl0ZW0gPSBpdGVybmV4dChpdCk7CiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbHotPmNudCsrOwogICAgIG9sZG5leHQgPSBsei0+bmV4dDsKICAgICBsei0+bmV4dCArPSBsei0+c3RlcDsKLSAgICBpZiAobHotPm5leHQgPCBvbGRuZXh0KSAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCi0gICAgICAgIGx6LT5uZXh0ID0gbHotPnN0b3A7CisgICAgaWYgKGx6LT5uZXh0IDwgb2xkbmV4dCB8fCAoc3RvcCAhPSAtMSAmJiBsei0+bmV4dCA+IHN0b3ApKQorICAgICAgICBsei0+bmV4dCA9IHN0b3A7CiAgICAgcmV0dXJuIGl0ZW07CiB9CiAKQEAgLTEzNjEsNyArMTM2MCw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqaXQgPSBsei0+aXQ7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgYXJncyA9ICgqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0KShpdCk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODY3LDcgKzE4NjUsOCBAQAogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobHopOwogICAgIFB5X1hERUNSRUYobHotPnBvb2xzKTsKICAgICBQeV9YREVDUkVGKGx6LT5yZXN1bHQpOwotICAgIFB5TWVtX0ZyZWUobHotPmluZGljZXMpOworICAgIGlmIChsei0+aW5kaWNlcyAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKGx6LT5pbmRpY2VzKTsKICAgICBQeV9UWVBFKGx6KS0+dHBfZnJlZShseik7CiB9CiAKQEAgLTE5NzQsNiArMTk3Myw5IEBACiBUaGUgbGVmdG1vc3QgaXRlcmF0b3JzIGFyZSBpbiB0aGUgb3V0ZXJtb3N0IGZvci1sb29wLCBzbyB0aGUgb3V0cHV0IHR1cGxlc1xuXAogY3ljbGUgaW4gYSBtYW5uZXIgc2ltaWxhciB0byBhbiBvZG9tZXRlciAod2l0aCB0aGUgcmlnaHRtb3N0IGVsZW1lbnQgY2hhbmdpbmdcblwKIG9uIGV2ZXJ5IGl0ZXJhdGlvbikuXG5cblwKK1RvIGNvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgYW4gaXRlcmFibGUgd2l0aCBpdHNlbGYsIHNwZWNpZnkgdGhlIG51bWJlclxuXAorb2YgcmVwZXRpdGlvbnMgd2l0aCB0aGUgb3B0aW9uYWwgcmVwZWF0IGtleXdvcmQgYXJndW1lbnQuIEZvciBleGFtcGxlLFxuXAorcHJvZHVjdChBLCByZXBlYXQ9NCkgbWVhbnMgdGhlIHNhbWUgYXMgcHJvZHVjdChBLCBBLCBBLCBBKS5cblxuXAogcHJvZHVjdCgnYWInLCByYW5nZSgzKSkgLS0+ICgnYScsMCkgKCdhJywxKSAoJ2EnLDIpICgnYicsMCkgKCdiJywxKSAoJ2InLDIpXG5cCiBwcm9kdWN0KCgwLDEpLCAoMCwxKSwgKDAsMSkpIC0tPiAoMCwwLDApICgwLDAsMSkgKDAsMSwwKSAoMCwxLDEpICgxLDAsMCkgLi4uIik7CiAKQEAgLTIwOTUsNyArMjA5Nyw4IEBACiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhjbyk7CiAgICAgUHlfWERFQ1JFRihjby0+cG9vbCk7CiAgICAgUHlfWERFQ1JFRihjby0+cmVzdWx0KTsKLSAgICBQeU1lbV9GcmVlKGNvLT5pbmRpY2VzKTsKKyAgICBpZiAoY28tPmluZGljZXMgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRnJlZShjby0+aW5kaWNlcyk7CiAgICAgUHlfVFlQRShjbyktPnRwX2ZyZWUoY28pOwogfQogCkBAIC0yMjQ0LDYgKzIyNDcsMjUyIEBACiB9OwogCiAKKy8qIGNvbWJpbmF0aW9ucyB3aXRoIHJlcGxhY2VtZW50IG9iamVjdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBFcXVpdmFsZW50IHRvOgorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAiY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDIpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQyIKKyAgICAgICAgICAgICMgbnVtYmVyIGl0ZW1zIHJldHVybmVkOiAgKG4rci0xKSEgLyByISAvIChuLTEpIQorICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgaW5kaWNlcyA9IFswXSAqIHIKKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldICE9IG4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpbmRpY2VzW2k6XSA9IFtpbmRpY2VzW2ldICsgMV0gKiAociAtIGkpCisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudDIoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ0FsdGVybmF0ZSB2ZXJzaW9uIHRoYXQgZmlsdGVycyBmcm9tIHByb2R1Y3QoKScKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGZvciBpbmRpY2VzIGluIHByb2R1Y3QocmFuZ2UobiksIHJlcGVhdD1yKToKKyAgICAgICAgICAgICAgICBpZiBzb3J0ZWQoaW5kaWNlcykgPT0gbGlzdChpbmRpY2VzKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKnBvb2w7ICAgICAgICAgICAgICAgICAgICAgLyogaW5wdXQgY29udmVydGVkIHRvIGEgdHVwbGUgKi8KKyAgICBQeV9zc2l6ZV90ICppbmRpY2VzOyAgICAvKiBvbmUgaW5kZXggcGVyIHJlc3VsdCBlbGVtZW50ICovCisgICAgUHlPYmplY3QgKnJlc3VsdDsgICAgICAgLyogbW9zdCByZWNlbnRseSByZXR1cm5lZCByZXN1bHQgdHVwbGUgKi8KKyAgICBQeV9zc2l6ZV90IHI7ICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIG9mIHJlc3VsdCB0dXBsZSAqLworICAgIGludCBzdG9wcGVkOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCB0byAxIHdoZW4gdGhlIGN3ciBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KK30gY3dyb2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGN3cl90eXBlOworCitzdGF0aWMgUHlPYmplY3QgKgorY3dyX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjd3JvYmplY3QgKmNvOworICAgIFB5X3NzaXplX3QgbjsKKyAgICBQeV9zc2l6ZV90IHI7CisgICAgUHlPYmplY3QgKnBvb2wgPSBOVUxMOworICAgIFB5T2JqZWN0ICppdGVyYWJsZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCAqaW5kaWNlcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpOworICAgIHN0YXRpYyBjaGFyICprd2FyZ3NbXSA9IHsiaXRlcmFibGUiLCAiciIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50Iiwga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVyYWJsZSwgJnIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBvb2wgPSBQeVNlcXVlbmNlX1R1cGxlKGl0ZXJhYmxlKTsKKyAgICBpZiAocG9vbCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKHBvb2wpOworICAgIGlmIChyIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInIgbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpbmRpY2VzID0gUHlNZW1fTWFsbG9jKHIgKiBzaXplb2YoUHlfc3NpemVfdCkpOworICAgIGlmIChpbmRpY2VzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBmb3IgKGk9MCA7IGk8ciA7IGkrKykKKyAgICAgICAgaW5kaWNlc1tpXSA9IDA7CisKKyAgICAvKiBjcmVhdGUgY3dyb2JqZWN0IHN0cnVjdHVyZSAqLworICAgIGNvID0gKGN3cm9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChjbyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgY28tPnBvb2wgPSBwb29sOworICAgIGNvLT5pbmRpY2VzID0gaW5kaWNlczsKKyAgICBjby0+cmVzdWx0ID0gTlVMTDsKKyAgICBjby0+ciA9IHI7CisgICAgY28tPnN0b3BwZWQgPSAhbiAmJiByOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKWNvOworCitlcnJvcjoKKyAgICBpZiAoaW5kaWNlcyAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKGluZGljZXMpOworICAgIFB5X1hERUNSRUYocG9vbCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitjd3JfZGVhbGxvYyhjd3JvYmplY3QgKmNvKQoreworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soY28pOworICAgIFB5X1hERUNSRUYoY28tPnBvb2wpOworICAgIFB5X1hERUNSRUYoY28tPnJlc3VsdCk7CisgICAgaWYgKGNvLT5pbmRpY2VzICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZyZWUoY28tPmluZGljZXMpOworICAgIFB5X1RZUEUoY28pLT50cF9mcmVlKGNvKTsKK30KKworc3RhdGljIGludAorY3dyX3RyYXZlcnNlKGN3cm9iamVjdCAqY28sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKGNvLT5wb29sKTsKKyAgICBQeV9WSVNJVChjby0+cmVzdWx0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2N3cl9uZXh0KGN3cm9iamVjdCAqY28pCit7CisgICAgUHlPYmplY3QgKmVsZW07CisgICAgUHlPYmplY3QgKm9sZGVsZW07CisgICAgUHlPYmplY3QgKnBvb2wgPSBjby0+cG9vbDsKKyAgICBQeV9zc2l6ZV90ICppbmRpY2VzID0gY28tPmluZGljZXM7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IGNvLT5yZXN1bHQ7CisgICAgUHlfc3NpemVfdCBuID0gUHlUdXBsZV9HRVRfU0laRShwb29sKTsKKyAgICBQeV9zc2l6ZV90IHIgPSBjby0+cjsKKyAgICBQeV9zc2l6ZV90IGksIGosIGluZGV4OworCisgICAgaWYgKGNvLT5zdG9wcGVkKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAvKiBPbiB0aGUgZmlyc3QgcGFzcywgaW5pdGlhbGl6ZSByZXN1bHQgdHVwbGUgdXNpbmcgdGhlIGluZGljZXMgKi8KKyAgICAgICAgcmVzdWx0ID0gUHlUdXBsZV9OZXcocik7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZW1wdHk7CisgICAgICAgIGNvLT5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIGZvciAoaT0wOyBpPHIgOyBpKyspIHsKKyAgICAgICAgICAgIGluZGV4ID0gaW5kaWNlc1tpXTsKKyAgICAgICAgICAgIGVsZW0gPSBQeVR1cGxlX0dFVF9JVEVNKHBvb2wsIGluZGV4KTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihlbGVtKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBlbGVtKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qIENvcHkgdGhlIHByZXZpb3VzIHJlc3VsdCB0dXBsZSBvciByZS11c2UgaXQgaWYgYXZhaWxhYmxlICovCisgICAgICAgIGlmIChQeV9SRUZDTlQocmVzdWx0KSA+IDEpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvbGRfcmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0ID0gUHlUdXBsZV9OZXcocik7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlbXB0eTsKKyAgICAgICAgICAgIGNvLT5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBmb3IgKGk9MDsgaTxyIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZWxlbSA9IFB5VHVwbGVfR0VUX0lURU0ob2xkX3Jlc3VsdCwgaSk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBlbGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihvbGRfcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICAvKiBOb3csIHdlJ3ZlIGdvdCB0aGUgb25seSBjb3B5IHNvIHdlIGNhbiB1cGRhdGUgaXQgaW4tcGxhY2UgQ1B5dGhvbidzCisgICAgICAgICAgIGVtcHR5IHR1cGxlIGlzIGEgc2luZ2xldG9uIGFuZCBjYWNoZWQgaW4gUHlUdXBsZSdzIGZyZWVsaXN0LiAqLworICAgICAgICBhc3NlcnQociA9PSAwIHx8IFB5X1JFRkNOVChyZXN1bHQpID09IDEpOworCisgICAgLyogU2NhbiBpbmRpY2VzIHJpZ2h0LXRvLWxlZnQgdW50aWwgZmluZGluZyBvbmUgdGhhdCBpcyBub3QKKyAgICAgKiBhdCBpdHMgbWF4aW11bSAobi0xKS4gKi8KKyAgICAgICAgZm9yIChpPXItMSA7IGkgPj0gMCAmJiBpbmRpY2VzW2ldID09IG4tMTsgaS0tKQorICAgICAgICAgICAgOworCisgICAgICAgIC8qIElmIGkgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGluZGljZXMgYXJlIGFsbCBhdAorICAgICAgIHRoZWlyIG1heGltdW0gdmFsdWUgYW5kIHdlJ3JlIGRvbmUuICovCisgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW1wdHk7CisKKyAgICAgICAgLyogSW5jcmVtZW50IHRoZSBjdXJyZW50IGluZGV4IHdoaWNoIHdlIGtub3cgaXMgbm90IGF0IGl0cworICAgICAgIG1heGltdW0uICBUaGVuIHNldCBhbGwgdG8gdGhlIHJpZ2h0IHRvIHRoZSBzYW1lIHZhbHVlLiAqLworICAgICAgICBpbmRpY2VzW2ldKys7CisgICAgICAgIGZvciAoaj1pKzEgOyBqPHIgOyBqKyspCisgICAgICAgICAgICBpbmRpY2VzW2pdID0gaW5kaWNlc1tqLTFdOworCisgICAgICAgIC8qIFVwZGF0ZSB0aGUgcmVzdWx0IHR1cGxlIGZvciB0aGUgbmV3IGluZGljZXMKKyAgICAgICAgICAgc3RhcnRpbmcgd2l0aCBpLCB0aGUgbGVmdG1vc3QgaW5kZXggdGhhdCBjaGFuZ2VkICovCisgICAgICAgIGZvciAoIDsgaTxyIDsgaSsrKSB7CisgICAgICAgICAgICBpbmRleCA9IGluZGljZXNbaV07CisgICAgICAgICAgICBlbGVtID0gUHlUdXBsZV9HRVRfSVRFTShwb29sLCBpbmRleCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoZWxlbSk7CisgICAgICAgICAgICBvbGRlbGVtID0gUHlUdXBsZV9HRVRfSVRFTShyZXN1bHQsIGkpOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGksIGVsZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKG9sZGVsZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgUHlfSU5DUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKworZW1wdHk6CisgICAgY28tPnN0b3BwZWQgPSAxOworICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIoY3dyX2RvYywKKyJjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgLS0+IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50IG9iamVjdFxuXAorXG5cCitSZXR1cm4gc3VjY2Vzc2l2ZSByLWxlbmd0aCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxlXG5cCithbGxvd2luZyBpbmRpdmlkdWFsIGVsZW1lbnRzIHRvIGhhdmUgc3VjY2Vzc2l2ZSByZXBlYXRzLlxuXAorY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDIpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQyIpOworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGN3cl90eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQiLCAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoY3dyb2JqZWN0KSwgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpY3dyX2RlYWxsb2MsICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgY3dyX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWN3cl90cmF2ZXJzZSwgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKWN3cl9uZXh0LCAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBjd3JfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKKwogLyogcGVybXV0YXRpb25zIG9iamVjdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogZGVmIHBlcm11dGF0aW9ucyhpdGVyYWJsZSwgcj1Ob25lKToKQEAgLTI1MTEsNiArMjc2MCwxNjAgQEAKIH07CiAKIAorLyogY29tcHJlc3Mgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRXF1aXZhbGVudCB0bzoKKworICAgIGRlZiBjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpOgorICAgICAgICAiY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pIC0tPiBBIEMgRSBGIgorICAgICAgICByZXR1cm4gKGQgZm9yIGQsIHMgaW4gaXppcChkYXRhLCBzZWxlY3RvcnMpIGlmIHMpCisqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICpkYXRhOworICAgIFB5T2JqZWN0ICpzZWxlY3RvcnM7Cit9IGNvbXByZXNzb2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGNvbXByZXNzX3R5cGU7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21wcmVzc19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKnNlcTEsICpzZXEyOworICAgIFB5T2JqZWN0ICpkYXRhPU5VTEwsICpzZWxlY3RvcnM9TlVMTDsKKyAgICBjb21wcmVzc29iamVjdCAqbHo7CisgICAgc3RhdGljIGNoYXIgKmt3YXJnc1tdID0geyJkYXRhIiwgInNlbGVjdG9ycyIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9POmNvbXByZXNzIiwga3dhcmdzLCAmc2VxMSwgJnNlcTIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGRhdGEgPSBQeU9iamVjdF9HZXRJdGVyKHNlcTEpOworICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBzZWxlY3RvcnMgPSBQeU9iamVjdF9HZXRJdGVyKHNlcTIpOworICAgIGlmIChzZWxlY3RvcnMgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogY3JlYXRlIGNvbXByZXNzb2JqZWN0IHN0cnVjdHVyZSAqLworICAgIGx6ID0gKGNvbXByZXNzb2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKGx6ID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBsei0+ZGF0YSA9IGRhdGE7CisgICAgbHotPnNlbGVjdG9ycyA9IHNlbGVjdG9yczsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbHo7CisKK2ZhaWw6CisgICAgUHlfWERFQ1JFRihkYXRhKTsKKyAgICBQeV9YREVDUkVGKHNlbGVjdG9ycyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitjb21wcmVzc19kZWFsbG9jKGNvbXByZXNzb2JqZWN0ICpseikKK3sKKyAgICBQeU9iamVjdF9HQ19VblRyYWNrKGx6KTsKKyAgICBQeV9YREVDUkVGKGx6LT5kYXRhKTsKKyAgICBQeV9YREVDUkVGKGx6LT5zZWxlY3RvcnMpOworICAgIFB5X1RZUEUobHopLT50cF9mcmVlKGx6KTsKK30KKworc3RhdGljIGludAorY29tcHJlc3NfdHJhdmVyc2UoY29tcHJlc3NvYmplY3QgKmx6LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChsei0+ZGF0YSk7CisgICAgUHlfVklTSVQobHotPnNlbGVjdG9ycyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjb21wcmVzc19uZXh0KGNvbXByZXNzb2JqZWN0ICpseikKK3sKKyAgICBQeU9iamVjdCAqZGF0YSA9IGx6LT5kYXRhLCAqc2VsZWN0b3JzID0gbHotPnNlbGVjdG9yczsKKyAgICBQeU9iamVjdCAqZGF0dW0sICpzZWxlY3RvcjsKKyAgICBQeU9iamVjdCAqKCpkYXRhbmV4dCkoUHlPYmplY3QgKikgPSAqUHlfVFlQRShkYXRhKS0+dHBfaXRlcm5leHQ7CisgICAgUHlPYmplY3QgKigqc2VsZWN0b3JuZXh0KShQeU9iamVjdCAqKSA9ICpQeV9UWVBFKHNlbGVjdG9ycyktPnRwX2l0ZXJuZXh0OworICAgIGludCBvazsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIC8qIFN0ZXBzOiAgZ2V0IGRhdHVtLCBnZXQgc2VsZWN0b3IsIGV2YWx1YXRlIHNlbGVjdG9yLgorICAgICAgICAgICBPcmRlciBpcyBpbXBvcnRhbnQgKHRvIG1hdGNoIHRoZSBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgIGluIHRlcm1zIG9mIHdoaWNoIGlucHV0IGdldHMgYSBjaGFuY2UgdG8gcmFpc2UgYW4KKyAgICAgICAgICAgZXhjZXB0aW9uIGZpcnN0KS4KKyAgICAgICAgKi8KKworICAgICAgICBkYXR1bSA9IGRhdGFuZXh0KGRhdGEpOworICAgICAgICBpZiAoZGF0dW0gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JuZXh0KHNlbGVjdG9ycyk7CisgICAgICAgIGlmIChzZWxlY3RvciA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0dW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBvayA9IFB5T2JqZWN0X0lzVHJ1ZShzZWxlY3Rvcik7CisgICAgICAgIFB5X0RFQ1JFRihzZWxlY3Rvcik7CisgICAgICAgIGlmIChvayA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGRhdHVtOworICAgICAgICBQeV9ERUNSRUYoZGF0dW0pOworICAgICAgICBpZiAob2sgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUihjb21wcmVzc19kb2MsCisiY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKSAtLT4gaXRlcmF0b3Igb3ZlciBzZWxlY3RlZCBkYXRhXG5cCitcblwKK1JldHVybiBkYXRhIGVsZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdHJ1ZSBzZWxlY3RvciBlbGVtZW50cy5cblwKK0Zvcm1zIGEgc2hvcnRlciBpdGVyYXRvciBmcm9tIHNlbGVjdGVkIGRhdGEgZWxlbWVudHMgdXNpbmcgdGhlXG5cCitzZWxlY3RvcnMgdG8gY2hvb3NlIHRoZSBkYXRhIGVsZW1lbnRzLiIpOworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGNvbXByZXNzX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIml0ZXJ0b29scy5jb21wcmVzcyIsICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihjb21wcmVzc29iamVjdCksICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWNvbXByZXNzX2RlYWxsb2MsICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgY29tcHJlc3NfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpY29tcHJlc3NfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpY29tcHJlc3NfbmV4dCwgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIGNvbXByZXNzX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworCiAvKiBpZmlsdGVyIG9iamVjdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI1NzcsNyArMjk4MCw2IEBACiAgICAgbG9uZyBvazsKICAgICBQeU9iamVjdCAqKCppdGVybmV4dCkoUHlPYmplY3QgKik7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlcm5leHQgPSAqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0OwogICAgIGZvciAoOzspIHsKICAgICAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKQEAgLTI3MjEsNyArMzEyMyw2IEBACiAgICAgbG9uZyBvazsKICAgICBQeU9iamVjdCAqKCppdGVybmV4dCkoUHlPYmplY3QgKik7CiAKLSAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgaXRlcm5leHQgPSAqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0OwogICAgIGZvciAoOzspIHsKICAgICAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKQEAgLTI4MDMsNDcgKzMyMDQsOTggQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlfc3NpemVfdCBjbnQ7Ci0gICAgUHlPYmplY3QgKmxvbmdfY250OyAgICAgICAgIC8qIEFyYml0cmFyaWx5IGxhcmdlIGNvdW50IHdoZW4gY250ID49IFBZX1NTSVpFX1RfTUFYICovCisgICAgUHlPYmplY3QgKmxvbmdfY250OworICAgIFB5T2JqZWN0ICpsb25nX3N0ZXA7CiB9IGNvdW50b2JqZWN0OwogCisvKiBDb3VudGluZyBsb2dpYyBhbmQgaW52YXJpYW50czoKKworZmFzdF9tb2RlOiAgd2hlbiBjbnQgYW4gaW50ZWdlciA8IFBZX1NTSVpFX1RfTUFYIGFuZCBubyBzdGVwIGlzIHNwZWNpZmllZC4KKworICAgIGFzc2VydChjbnQgIT0gUFlfU1NJWkVfVF9NQVggJiYgbG9uZ19jbnQgPT0gTlVMTCAmJiBsb25nX3N0ZXA9PVB5SW50KDEpKTsKKyAgICBBZHZhbmNlcyB3aXRoOiAgY250ICs9IDEKKyAgICBXaGVuIGNvdW50IGhpdHMgWV9TU0laRV9UX01BWCwgc3dpdGNoIHRvIHNsb3dfbW9kZS4KKworc2xvd19tb2RlOiAgd2hlbiBjbnQgPT0gUFlfU1NJWkVfVF9NQVgsIHN0ZXAgaXMgbm90IGludCgxKSwgb3IgY250IGlzIGEgZmxvYXQuCisKKyAgICBhc3NlcnQoY250ID09IFBZX1NTSVpFX1RfTUFYICYmIGxvbmdfY250ICE9IE5VTEwgJiYgbG9uZ19zdGVwICE9IE5VTEwpOworICAgIEFsbCBjb3VudGluZyBpcyBkb25lIHdpdGggcHl0aG9uIG9iamVjdHMgKG5vIG92ZXJmbG93cyBvciB1bmRlcmZsb3dzKS4KKyAgICBBZHZhbmNlcyB3aXRoOiAgbG9uZ19jbnQgKz0gbG9uZ19zdGVwCisgICAgU3RlcCBtYXkgYmUgemVybyAtLSBlZmZlY3RpdmVseSBhIHNsb3cgdmVyc2lvbiBvZiByZXBlYXQoY250KS4KKyAgICBFaXRoZXIgbG9uZ19jbnQgb3IgbG9uZ19zdGVwIG1heSBiZSBhIGZsb2F0LCBGcmFjdGlvbiwgb3IgRGVjaW1hbC4KKyovCisKIHN0YXRpYyBQeVR5cGVPYmplY3QgY291bnRfdHlwZTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGNvdW50X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjb3VudG9iamVjdCAqbHo7CisgICAgaW50IHNsb3dfbW9kZSA9IDA7CiAgICAgUHlfc3NpemVfdCBjbnQgPSAwOwotICAgIFB5T2JqZWN0ICpjbnRfYXJnID0gTlVMTDsKICAgICBQeU9iamVjdCAqbG9uZ19jbnQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpsb25nX3N0ZXAgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RhcnQiLCAic3RlcCIsIDB9OwogCi0gICAgaWYgKHR5cGUgPT0gJmNvdW50X3R5cGUgJiYgIV9QeUFyZ19Ob0tleXdvcmRzKCJjb3VudCgpIiwga3dkcykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPTzpjb3VudCIsCisgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmxvbmdfY250LCAmbG9uZ19zdGVwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJjb3VudCIsIDAsIDEsICZjbnRfYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoY250X2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGNudCA9IFB5SW50X0FzU3NpemVfdChjbnRfYXJnKTsKLSAgICAgICAgaWYgKGNudCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2soY250X2FyZykpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9uZ19jbnQgPSBjbnRfYXJnOwotICAgICAgICAgICAgUHlfSU5DUkVGKGxvbmdfY250KTsKLSAgICAgICAgICAgIGNudCA9IFBZX1NTSVpFX1RfTUFYOwotICAgICAgICB9CisgICAgaWYgKChsb25nX2NudCAhPSBOVUxMICYmICFQeU51bWJlcl9DaGVjayhsb25nX2NudCkpIHx8CisgICAgICAgIChsb25nX3N0ZXAgIT0gTlVMTCAmJiAhUHlOdW1iZXJfQ2hlY2sobG9uZ19zdGVwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImEgbnVtYmVyIGlzIHJlcXVpcmVkIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChsb25nX2NudCAhPSBOVUxMKSB7CisgICAgICAgIGNudCA9IFB5SW50X0FzU3NpemVfdChsb25nX2NudCk7CisgICAgICAgIGlmICgoY250ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHx8ICFQeUludF9DaGVjayhsb25nX2NudCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBzbG93X21vZGUgPSAxOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihsb25nX2NudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY250ID0gMDsKKyAgICAgICAgbG9uZ19jbnQgPSBQeUludF9Gcm9tTG9uZygwKTsKKyAgICB9CisKKyAgICAvKiBJZiBub3Qgc3BlY2lmaWVkLCBzdGVwIGRlZmF1bHRzIHRvIDEgKi8KKyAgICBpZiAobG9uZ19zdGVwID09IE5VTEwpIHsKKyAgICAgICAgbG9uZ19zdGVwID0gUHlJbnRfRnJvbUxvbmcoMSk7CisgICAgICAgIGlmIChsb25nX3N0ZXAgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGxvbmdfY250KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFB5X0lOQ1JFRihsb25nX3N0ZXApOworCisgICAgYXNzZXJ0KGxvbmdfY250ICE9IE5VTEwgJiYgbG9uZ19zdGVwICE9IE5VTEwpOworCisgICAgLyogRmFzdCBtb2RlIG9ubHkgd29ya3Mgd2hlbiB0aGUgc3RlcCBpcyAxICovCisgICAgaWYgKCFQeUludF9DaGVjayhsb25nX3N0ZXApIHx8CisgICAgICAgIFB5SW50X0FTX0xPTkcobG9uZ19zdGVwKSAhPSAxKSB7CisgICAgICAgICAgICBzbG93X21vZGUgPSAxOworICAgIH0KKworICAgIGlmIChzbG93X21vZGUpCisgICAgICAgIGNudCA9IFBZX1NTSVpFX1RfTUFYOworICAgIGVsc2UKKyAgICAgICAgUHlfQ0xFQVIobG9uZ19jbnQpOworCisgICAgYXNzZXJ0KChjbnQgIT0gUFlfU1NJWkVfVF9NQVggJiYgbG9uZ19jbnQgPT0gTlVMTCAmJiAhc2xvd19tb2RlKSB8fAorICAgICAgICAgICAoY250ID09IFBZX1NTSVpFX1RfTUFYICYmIGxvbmdfY250ICE9IE5VTEwgJiYgc2xvd19tb2RlKSk7CisgICAgYXNzZXJ0KHNsb3dfbW9kZSB8fAorICAgICAgICAgICAoUHlJbnRfQ2hlY2sobG9uZ19zdGVwKSAmJiBQeUludF9BU19MT05HKGxvbmdfc3RlcCkgPT0gMSkpOworCiAgICAgLyogY3JlYXRlIGNvdW50b2JqZWN0IHN0cnVjdHVyZSAqLwotICAgIGx6ID0gKGNvdW50b2JqZWN0ICopUHlPYmplY3RfTmV3KGNvdW50b2JqZWN0LCAmY291bnRfdHlwZSk7CisgICAgbHogPSAoY291bnRvYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAobHogPT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKGxvbmdfY250KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGx6LT5jbnQgPSBjbnQ7CiAgICAgbHotPmxvbmdfY250ID0gbG9uZ19jbnQ7CisgICAgbHotPmxvbmdfc3RlcCA9IGxvbmdfc3RlcDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKilsejsKIH0KQEAgLTI4NTEsMzQgKzMzMDMsNDAgQEAKIHN0YXRpYyB2b2lkCiBjb3VudF9kZWFsbG9jKGNvdW50b2JqZWN0ICpseikKIHsKKyAgICBQeU9iamVjdF9HQ19VblRyYWNrKGx6KTsKICAgICBQeV9YREVDUkVGKGx6LT5sb25nX2NudCk7Ci0gICAgUHlPYmplY3RfRGVsKGx6KTsKKyAgICBQeV9YREVDUkVGKGx6LT5sb25nX3N0ZXApOworICAgIFB5X1RZUEUobHopLT50cF9mcmVlKGx6KTsKK30KKworc3RhdGljIGludAorY291bnRfdHJhdmVyc2UoY291bnRvYmplY3QgKmx6LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChsei0+bG9uZ19jbnQpOworICAgIFB5X1ZJU0lUKGx6LT5sb25nX3N0ZXApOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogY291bnRfbmV4dGxvbmcoY291bnRvYmplY3QgKmx6KQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqb25lID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY250OworICAgIFB5T2JqZWN0ICpsb25nX2NudDsKICAgICBQeU9iamVjdCAqc3RlcHBlZF91cDsKIAotICAgIGlmIChsei0+bG9uZ19jbnQgPT0gTlVMTCkgewotICAgICAgICBsei0+bG9uZ19jbnQgPSBQeUludF9Gcm9tU3NpemVfdChQWV9TU0laRV9UX01BWCk7Ci0gICAgICAgIGlmIChsei0+bG9uZ19jbnQgPT0gTlVMTCkKKyAgICBsb25nX2NudCA9IGx6LT5sb25nX2NudDsKKyAgICBpZiAobG9uZ19jbnQgPT0gTlVMTCkgeworICAgICAgICAvKiBTd2l0Y2ggdG8gc2xvd19tb2RlICovCisgICAgICAgIGxvbmdfY250ID0gUHlJbnRfRnJvbVNzaXplX3QoUFlfU1NJWkVfVF9NQVgpOworICAgICAgICBpZiAobG9uZ19jbnQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAob25lID09IE5VTEwpIHsKLSAgICAgICAgb25lID0gUHlJbnRfRnJvbUxvbmcoMSk7Ci0gICAgICAgIGlmIChvbmUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBjbnQgPSBsei0+bG9uZ19jbnQ7Ci0gICAgYXNzZXJ0KGNudCAhPSBOVUxMKTsKLSAgICBzdGVwcGVkX3VwID0gUHlOdW1iZXJfQWRkKGNudCwgb25lKTsKKyAgICBhc3NlcnQobHotPmNudCA9PSBQWV9TU0laRV9UX01BWCAmJiBsb25nX2NudCAhPSBOVUxMKTsKKworICAgIHN0ZXBwZWRfdXAgPSBQeU51bWJlcl9BZGQobG9uZ19jbnQsIGx6LT5sb25nX3N0ZXApOwogICAgIGlmIChzdGVwcGVkX3VwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGx6LT5sb25nX2NudCA9IHN0ZXBwZWRfdXA7Ci0gICAgcmV0dXJuIGNudDsKKyAgICByZXR1cm4gbG9uZ19jbnQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yODkyLDE3ICszMzUwLDI5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogY291bnRfcmVwcihjb3VudG9iamVjdCAqbHopCiB7Ci0gICAgUHlPYmplY3QgKmNudF9yZXByOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmNudF9yZXByLCAqc3RlcF9yZXByID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAogICAgIGlmIChsei0+Y250ICE9IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCgiY291bnQoJXpkKSIsIGx6LT5jbnQpOworICAgICAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCJjb3VudCglemQpIiwgbHotPmNudCk7CiAKICAgICBjbnRfcmVwciA9IFB5T2JqZWN0X1JlcHIobHotPmxvbmdfY250KTsKICAgICBpZiAoY250X3JlcHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiY291bnQoJXMpIiwgUHlTdHJpbmdfQVNfU1RSSU5HKGNudF9yZXByKSk7CisKKyAgICBpZiAoUHlJbnRfQ2hlY2sobHotPmxvbmdfc3RlcCkgJiYgUHlJbnRfQVNfTE9ORyhsei0+bG9uZ19zdGVwKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IGRpc3BsYXkgc3RlcCB3aGVuIGl0IGlzIGFuIGludGVnZXIgZXF1YWwgdG8gMSAqLworICAgICAgICAgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbUZvcm1hdCgiY291bnQoJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhjbnRfcmVwcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZXBfcmVwciA9IFB5T2JqZWN0X1JlcHIobHotPmxvbmdfc3RlcCk7CisgICAgICAgIGlmIChzdGVwX3JlcHIgIT0gTlVMTCkKKyAgICAgICAgICAgIHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoImNvdW50KCVzLCAlcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoY250X3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19BU19TVFJJTkcoc3RlcF9yZXByKSk7CisgICAgfQogICAgIFB5X0RFQ1JFRihjbnRfcmVwcik7CisgICAgUHlfWERFQ1JFRihzdGVwX3JlcHIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI5MTAsNyArMzM4MCw3IEBACiBjb3VudF9yZWR1Y2UoY291bnRvYmplY3QgKmx6KQogewogICAgIGlmIChsei0+Y250ID09IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPKSIsIFB5X1RZUEUobHopLCBsei0+bG9uZ19jbnQpOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTykiLCBQeV9UWVBFKGx6KSwgbHotPmxvbmdfY250LCBsei0+bG9uZ19zdGVwKTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhuKSIsIFB5X1RZUEUobHopLCBsei0+Y250KTsKIH0KIApAQCAtMjkyMywxMCArMzM5MywxNSBAQAogfTsKIAogUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKLSJjb3VudChbZmlyc3R2YWxdKSAtLT4gY291bnQgb2JqZWN0XG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdW50KHN0YXJ0PTAsIHN0ZXA9MSkgLS0+IGNvdW50IG9iamVjdFxuXAogXG5cCi1SZXR1cm4gYSBjb3VudCBvYmplY3Qgd2hvc2UgLm5leHQoKSBtZXRob2QgcmV0dXJucyBjb25zZWN1dGl2ZVxuXAotaW50ZWdlcnMgc3RhcnRpbmcgZnJvbSB6ZXJvIG9yLCBpZiBzcGVjaWZpZWQsIGZyb20gZmlyc3R2YWwuIik7CitSZXR1cm4gYSBjb3VudCBvYmplY3Qgd2hvc2UgLm5leHQoKSBtZXRob2QgcmV0dXJucyBjb25zZWN1dGl2ZSB2YWx1ZXMuXG5cCitFcXVpdmFsZW50IHRvOlxuXG5cCisgICAgZGVmIGNvdW50KGZpcnN0dmFsPTAsIHN0ZXA9MSk6XG5cCisgICAgeCA9IGZpcnN0dmFsXG5cCisgICAgd2hpbGUgMTpcblwKKyAgICAgICAgeWllbGQgeFxuXAorICAgICAgICB4ICs9IHN0ZXBcbiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IGNvdW50X3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCkBAIC0yOTQ5LDkgKzM0MjQsMTAgQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBjb3VudF9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgICh0cmF2ZXJzZXByb2MpY291bnRfdHJhdmVyc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCkBAIC0yOTY4LDYgKzM0NDQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGNvdW50X25ldywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKIApAQCAtMzA3NSw3ICszNTUyLDYgQEAKICAgICAgICAgUHlfSU5DUkVGKHJlc3VsdCk7CiAgICAgICAgIGZvciAoaT0wIDsgaSA8IHR1cGxlc2l6ZSA7IGkrKykgewogICAgICAgICAgICAgaXQgPSBQeVR1cGxlX0dFVF9JVEVNKGx6LT5pdHR1cGxlLCBpKTsKLSAgICAgICAgICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXQpKTsKICAgICAgICAgICAgIGl0ZW0gPSAoKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dCkoaXQpOwogICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtMzA5MSw3ICszNTY3LDYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGk9MCA7IGkgPCB0dXBsZXNpemUgOyBpKyspIHsKICAgICAgICAgICAgIGl0ID0gUHlUdXBsZV9HRVRfSVRFTShsei0+aXR0dXBsZSwgaSk7Ci0gICAgICAgICAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgICAgICAgICBpdGVtID0gKCpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQpKGl0KTsKICAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKQEAgLTMxNzQsMTEgKzM2NDksMTAgQEAKICAgICByZXBlYXRvYmplY3QgKnJvOwogICAgIFB5T2JqZWN0ICplbGVtZW50OwogICAgIFB5X3NzaXplX3QgY250ID0gLTE7CisgICAgc3RhdGljIGNoYXIgKmt3YXJnc1tdID0geyJvYmplY3QiLCAidGltZXMiLCBOVUxMfTsKIAotICAgIGlmICh0eXBlID09ICZyZXBlYXRfdHlwZSAmJiAhX1B5QXJnX05vS2V5d29yZHMoInJlcGVhdCgpIiwga3dkcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46cmVwZWF0IiwgJmVsZW1lbnQsICZjbnQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG46cmVwZWF0Iiwga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbGVtZW50LCAmY250KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpID09IDIgJiYgY250IDwgMCkKQEAgLTMyNTYsOCArMzczMCw4IEBACiB9OwogCiBQeURvY19TVFJWQVIocmVwZWF0X2RvYywKLSJyZXBlYXQoZWxlbWVudCBbLHRpbWVzXSkgLT4gY3JlYXRlIGFuIGl0ZXJhdG9yIHdoaWNoIHJldHVybnMgdGhlIGVsZW1lbnRcblwKLWZvciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0aW1lcy4gIElmIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgdGhlIGVsZW1lbnRcblwKKyJyZXBlYXQob2JqZWN0IFssdGltZXNdKSAtPiBjcmVhdGUgYW4gaXRlcmF0b3Igd2hpY2ggcmV0dXJucyB0aGUgb2JqZWN0XG5cCitmb3IgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMuICBJZiBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBvYmplY3RcblwKIGVuZGxlc3NseS4iKTsKIAogc3RhdGljIFB5VHlwZU9iamVjdCByZXBlYXRfdHlwZSA9IHsKQEAgLTM0MjcsNyArMzkwMSw2IEBACiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGx6LT5maWxsdmFsdWUpOwogICAgICAgICAgICAgICAgIGl0ZW0gPSBsei0+ZmlsbHZhbHVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgICAgICAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0KTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGx6LT5udW1hY3RpdmUgLT0gMTsKQEAgLTM0NTcsNyArMzkzMCw2IEBACiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGx6LT5maWxsdmFsdWUpOwogICAgICAgICAgICAgICAgIGl0ZW0gPSBsei0+ZmlsbHZhbHVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlJdGVyX0NoZWNrKGl0KSk7CiAgICAgICAgICAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0KTsKICAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGx6LT5udW1hY3RpdmUgLT0gMTsKQEAgLTM1NDUsOCArNDAxNywxMCBAQAogcmVwZWF0KGVsZW0gWyxuXSkgLS0+IGVsZW0sIGVsZW0sIGVsZW0sIC4uLiBlbmRsZXNzbHkgb3IgdXAgdG8gbiB0aW1lc1xuXAogXG5cCiBJdGVyYXRvcnMgdGVybWluYXRpbmcgb24gdGhlIHNob3J0ZXN0IGlucHV0IHNlcXVlbmNlOlxuXAotaXppcChwLCBxLCAuLi4pIC0tPiAocFswXSwgcVswXSksIChwWzFdLCBxWzFdKSwgLi4uIFxuXAotaXppcF9sb25nZXN0KHAsIHEsIC4uLikgLS0+IChwWzBdLCBxWzBdKSwgKHBbMV0sIHFbMV0pLCAuLi4gXG5cCitjaGFpbihwLCBxLCAuLi4pIC0tPiBwMCwgcDEsIC4uLiBwbGFzdCwgcTAsIHExLCAuLi4gXG5cCitjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIC0tPiAoZFswXSBpZiBzWzBdKSwgKGRbMV0gaWYgc1sxXSksIC4uLlxuXAorZHJvcHdoaWxlKHByZWQsIHNlcSkgLS0+IHNlcVtuXSwgc2VxW24rMV0sIHN0YXJ0aW5nIHdoZW4gcHJlZCBmYWlsc1xuXAorZ3JvdXBieShpdGVyYWJsZVssIGtleWZ1bmNdKSAtLT4gc3ViLWl0ZXJhdG9ycyBncm91cGVkIGJ5IHZhbHVlIG9mIGtleWZ1bmModilcblwKIGlmaWx0ZXIocHJlZCwgc2VxKSAtLT4gZWxlbWVudHMgb2Ygc2VxIHdoZXJlIHByZWQoZWxlbSkgaXMgVHJ1ZVxuXAogaWZpbHRlcmZhbHNlKHByZWQsIHNlcSkgLS0+IGVsZW1lbnRzIG9mIHNlcSB3aGVyZSBwcmVkKGVsZW0pIGlzIEZhbHNlXG5cCiBpc2xpY2Uoc2VxLCBbc3RhcnQsXSBzdG9wIFssIHN0ZXBdKSAtLT4gZWxlbWVudHMgZnJvbVxuXApAQCAtMzU1NCwxNSArNDAyOCwxNSBAQAogaW1hcChmdW4sIHAsIHEsIC4uLikgLS0+IGZ1bihwMCwgcTApLCBmdW4ocDEsIHExKSwgLi4uXG5cCiBzdGFybWFwKGZ1biwgc2VxKSAtLT4gZnVuKCpzZXFbMF0pLCBmdW4oKnNlcVsxXSksIC4uLlxuXAogdGVlKGl0LCBuPTIpIC0tPiAoaXQxLCBpdDIgLCAuLi4gaXRuKSBzcGxpdHMgb25lIGl0ZXJhdG9yIGludG8gblxuXAotY2hhaW4ocCwgcSwgLi4uKSAtLT4gcDAsIHAxLCAuLi4gcGxhc3QsIHEwLCBxMSwgLi4uIFxuXAogdGFrZXdoaWxlKHByZWQsIHNlcSkgLS0+IHNlcVswXSwgc2VxWzFdLCB1bnRpbCBwcmVkIGZhaWxzXG5cCi1kcm9wd2hpbGUocHJlZCwgc2VxKSAtLT4gc2VxW25dLCBzZXFbbisxXSwgc3RhcnRpbmcgd2hlbiBwcmVkIGZhaWxzXG5cCi1ncm91cGJ5KGl0ZXJhYmxlWywga2V5ZnVuY10pIC0tPiBzdWItaXRlcmF0b3JzIGdyb3VwZWQgYnkgdmFsdWUgb2Yga2V5ZnVuYyh2KVxuXAoraXppcChwLCBxLCAuLi4pIC0tPiAocFswXSwgcVswXSksIChwWzFdLCBxWzFdKSwgLi4uIFxuXAoraXppcF9sb25nZXN0KHAsIHEsIC4uLikgLS0+IChwWzBdLCBxWzBdKSwgKHBbMV0sIHFbMV0pLCAuLi4gXG5cCiBcblwKIENvbWJpbmF0b3JpYyBnZW5lcmF0b3JzOlxuXAogcHJvZHVjdChwLCBxLCAuLi4gW3JlcGVhdD0xXSkgLS0+IGNhcnRlc2lhbiBwcm9kdWN0XG5cCiBwZXJtdXRhdGlvbnMocFssIHJdKVxuXAogY29tYmluYXRpb25zKHAsIHIpXG5cCitjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChwLCByKVxuXAogIik7CiAKIApAQCAtMzU3OSw2ICs0MDUzLDcgQEAKICAgICBjaGFyICpuYW1lOwogICAgIFB5VHlwZU9iamVjdCAqdHlwZWxpc3RbXSA9IHsKICAgICAgICAgJmNvbWJpbmF0aW9uc190eXBlLAorICAgICAgICAmY3dyX3R5cGUsCiAgICAgICAgICZjeWNsZV90eXBlLAogICAgICAgICAmZHJvcHdoaWxlX3R5cGUsCiAgICAgICAgICZ0YWtld2hpbGVfdHlwZSwKQEAgLTM1ODYsNiArNDA2MSw3IEBACiAgICAgICAgICZzdGFybWFwX3R5cGUsCiAgICAgICAgICZpbWFwX3R5cGUsCiAgICAgICAgICZjaGFpbl90eXBlLAorICAgICAgICAmY29tcHJlc3NfdHlwZSwKICAgICAgICAgJmlmaWx0ZXJfdHlwZSwKICAgICAgICAgJmlmaWx0ZXJmYWxzZV90eXBlLAogICAgICAgICAmY291bnRfdHlwZSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvbGRfc29fYWl4IGIvTW9kdWxlcy9sZF9zb19haXguaW4Kb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBNb2R1bGVzL2xkX3NvX2FpeApyZW5hbWUgdG8gTW9kdWxlcy9sZF9zb19haXguaW4KaW5kZXggNmI4MzgyMy4uMzkyNTFkMgotLS0gYS9Nb2R1bGVzL2xkX3NvX2FpeAorKysgYi9Nb2R1bGVzL2xkX3NvX2FpeC5pbgpAQCAtMTMxLDExICsxMzEsMTQgQEAKICAgc2hpZnQKIGRvbmUKIAoraWYgdGVzdCAiJG9iamZpbGUiID0gImxpYnB5dGhvbkBWRVJTSU9OQC5zbyI7IHRoZW4KKyAgbGRzb2NvcmVtb2RlPSJ0cnVlIiAKK2ZpCiAKIGlmIHRlc3QgLXogIiRvYmpzIjsgdGhlbgogICBlY2hvICJsZF9zb19haXg6IE5vIGlucHV0IGZpbGVzOyBleGl0aW5nLiIKICAgZXhpdCAyCi1lbGlmIHRlc3QgISAtciAiJGltcGZpbGUiOyB0aGVuCitlbGlmIHRlc3QgISAtciAiJGltcGZpbGUiIC1hIC16ICIkbGRzb2NvcmVtb2RlIjsgdGhlbgogICBlY2hvICJsZF9zb19haXg6IEltcG9ydCBmaWxlICckaW1wZmlsZScgbm90IGZvdW5kIG9yIG5vdCByZWFkYWJsZTsgZXhpdGluZy4iCiAgIGV4aXQgMgogZmkKQEAgLTE2NiwxMSArMTY5LDEyIEBACiAjZWNobyAiICAtPiBvYmplY3QgZmlsZXM6ICRvYmpzIgogI2VjaG8gIiAgLT4gQ0MgYXJndW1lbnRzOiAkYXJncyIKIAotQ0NPUFQ9Ii1XbCwtZSRlbnRyeSAtV2wsLWJFOiRleHBmaWxlIC1XbCwtYkk6JGltcGZpbGUgLVdsLC1iaGFsdDo0IgotQ0NPUFQ9IiRDQ09QVCAtV2wsLWJNOlNSRSAtV2wsLVQ1MTIgLVdsLC1INTEyIC1sbSAtbyAkb2JqZmlsZSIKLSMgTm90ZTogdG8gdXNlIGR5bmFtaWMgbGlicmFyaWVzIGxpa2UgbGlidGNsOC40LnNvIGFuZCBsaWJ0azguNC5zbyAKLSMgeW91IG1heSBuZWVkIHRvIHJlcGxhY2UgdGhlIHNlY29uZCBDQ09QVCBsaW5lIGFib3ZlIHdpdGggdGhlIGZvbGxvd2luZzoKLSMgQ0NPUFQ9IiRDQ09QVCAtV2wsLWJNOlNSRSAtV2wsLVQ1MTIgLVdsLC1INTEyIC1icnRsIC1ibm9ydGxsaWIgLWxtIC1vICRvYmpmaWxlIgoraWYgdGVzdCAteiAiJGxkc29jb3JlbW9kZSI7IHRoZW4KKyAgQ0NPUFQ9Ii1XbCwtZSRlbnRyeSAtV2wsLWJFOiRleHBmaWxlIC1XbCwtYkk6JGltcGZpbGUgLVdsLC1iaGFsdDo0IgorZWxzZQorICBDQ09QVD0iLVdsLC1ibm9lbnRyeSAtV2wsLWJFOiRleHBmaWxlIC1XbCwtYmhhbHQ6NCIKK2ZpCitDQ09QVD0iJENDT1BUIC1XbCwtYk06U1JFIC1XbCwtVDUxMiAtV2wsLUg1MTIgLVdsLC1icnRsIC1XbCwtYm5vcnRsbGliIC1sbSAtbyAkb2JqZmlsZSIKIAogQ0NBUkdTPSIkYXJncyIKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tYWluLmMgYi9Nb2R1bGVzL21haW4uYwppbmRleCBkZDE5NmVmLi5hMTNkMTY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21haW4uYworKysgYi9Nb2R1bGVzL21haW4uYwpAQCAtODMsNiArODMsNyBAQAogICAgICAgICAgY2FuIGJlIHN1cHBsaWVkIG11bHRpcGxlIHRpbWVzIHRvIGluY3JlYXNlIHZlcmJvc2l0eVxuXAogLVYgICAgIDogcHJpbnQgdGhlIFB5dGhvbiB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdCAoYWxzbyAtLXZlcnNpb24pXG5cCiAtVyBhcmcgOiB3YXJuaW5nIGNvbnRyb2w7IGFyZyBpcyBhY3Rpb246bWVzc2FnZTpjYXRlZ29yeTptb2R1bGU6bGluZW5vXG5cCisgICAgICAgICBhbHNvIFBZVEhPTldBUk5JTkdTPWFyZ1xuXAogLXggICAgIDogc2tpcCBmaXJzdCBsaW5lIG9mIHNvdXJjZSwgYWxsb3dpbmcgdXNlIG9mIG5vbi1Vbml4IGZvcm1zIG9mICMhY21kXG5cCiAiOwogc3RhdGljIGNoYXIgKnVzYWdlXzQgPSAiXApAQCAtNDA1LDYgKzQwNiwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAoUHlfUHkza1dhcm5pbmdGbGFnICYmICFQeV9UYWJjaGVja0ZsYWcpCisgICAgICAgIC8qIC0zIGltcGxpZXMgLXQgKGJ1dCBub3QgLXR0KSAqLworICAgICAgICBQeV9UYWJjaGVja0ZsYWcgPSAxOworCiAgICAgaWYgKCFQeV9JbnNwZWN0RmxhZyAmJgogICAgICAgICAocCA9IFB5X0dFVEVOVigiUFlUSE9OSU5TUEVDVCIpKSAmJiAqcCAhPSAnXDAnKQogICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDE7CkBAIC00MTYsNiArNDIxLDIxIEBACiAgICAgICAgIChwID0gUHlfR0VURU5WKCJQWVRIT05OT1VTRVJTSVRFIikpICYmICpwICE9ICdcMCcpCiAgICAgICAgIFB5X05vVXNlclNpdGVEaXJlY3RvcnkgPSAxOwogCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05XQVJOSU5HUyIpKSAmJiAqcCAhPSAnXDAnKSB7CisgICAgICAgIGNoYXIgKmJ1ZiwgKndhcm5pbmc7CisKKyAgICAgICAgYnVmID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHApICsgMSk7CisgICAgICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCisgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOworICAgICAgICBzdHJjcHkoYnVmLCBwKTsKKyAgICAgICAgZm9yICh3YXJuaW5nID0gc3RydG9rKGJ1ZiwgIiwiKTsKKyAgICAgICAgICAgICB3YXJuaW5nICE9IE5VTEw7CisgICAgICAgICAgICAgd2FybmluZyA9IHN0cnRvayhOVUxMLCAiLCIpKQorICAgICAgICAgICAgUHlTeXNfQWRkV2Fybk9wdGlvbih3YXJuaW5nKTsKKyAgICAgICAgZnJlZShidWYpOworICAgIH0KKwogICAgIGlmIChjb21tYW5kID09IE5VTEwgJiYgbW9kdWxlID09IE5VTEwgJiYgX1B5T1Nfb3B0aW5kIDwgYXJnYyAmJgogICAgICAgICBzdHJjbXAoYXJndltfUHlPU19vcHRpbmRdLCAiLSIpICE9IDApCiAgICAgewpAQCAtNTAwLDcgKzUyMCw5IEBACiAKICAgICBpZiAobW9kdWxlICE9IE5VTEwpIHsKICAgICAgICAgLyogQmFja3VwIF9QeU9TX29wdGluZCBhbmQgZm9yY2Ugc3lzLmFyZ3ZbMF0gPSAnLWMnCi0gICAgICAgICAgIHNvIHRoYXQgUHlTeXNfU2V0QXJndiBjb3JyZWN0bHkgc2V0cyBzeXMucGF0aFswXSB0byAnJyovCisgICAgICAgICAgIHNvIHRoYXQgUHlTeXNfU2V0QXJndiBjb3JyZWN0bHkgc2V0cyBzeXMucGF0aFswXSB0byAnJworICAgICAgICAgICByYXRoZXIgdGhhbiBsb29raW5nIGZvciBhIGZpbGUgY2FsbGVkICItbSIuIFNlZQorICAgICAgICAgICB0cmFja2VyIGlzc3VlICM4MjAyIGZvciBkZXRhaWxzLiAqLwogICAgICAgICBfUHlPU19vcHRpbmQtLTsKICAgICAgICAgYXJndltfUHlPU19vcHRpbmRdID0gIi1jIjsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21hdGhtb2R1bGUuYyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCmluZGV4IDRiNTFlZTkuLmNkNzRiMGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCkBAIC01Myw1NCArNTMsNDc1IEBACiAgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImxvbmdpbnRyZXByLmgiIC8qIGp1c3QgZm9yIFNISUZUICovCisjaW5jbHVkZSAiX21hdGguaCIKIAogI2lmZGVmIF9PU0ZfU09VUkNFCiAvKiBPU0YxIDUuMSBkb2Vzbid0IG1ha2UgdGhpcyBhdmFpbGFibGUgd2l0aCBYT1BFTl9TT1VSQ0VfRVhURU5ERUQgZGVmaW5lZCAqLwogZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbihkb3VibGUsIGRvdWJsZSk7CiAjZW5kaWYKIAotLyogQ2FsbCBpc19lcnJvciB3aGVuIGVycm5vICE9IDAsIGFuZCB3aGVyZSB4IGlzIHRoZSByZXN1bHQgbGlibQotICogcmV0dXJuZWQuICBpc19lcnJvciB3aWxsIHVzdWFsbHkgc2V0IHVwIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuCi0gKiB0cnVlICgxKSwgYnV0IG1heSByZXR1cm4gZmFsc2UgKDApIHdpdGhvdXQgc2V0dGluZyB1cCBhbiBleGNlcHRpb24uCi0gKi8KLXN0YXRpYyBpbnQKLWlzX2Vycm9yKGRvdWJsZSB4KQotewotICAgIGludCByZXN1bHQgPSAxOyAgICAgLyogcHJlc3VtcHRpb24gb2YgZ3VpbHQgKi8KLSAgICBhc3NlcnQoZXJybm8pOyAgICAgIC8qIG5vbi16ZXJvIGVycm5vIGlzIGEgcHJlY29uZGl0aW9uIGZvciBjYWxsaW5nICovCi0gICAgaWYgKGVycm5vID09IEVET00pCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKy8qCisgICBzaW4ocGkqeCksIGdpdmluZyBhY2N1cmF0ZSByZXN1bHRzIGZvciBhbGwgZmluaXRlIHggKGVzcGVjaWFsbHkgeAorICAgaW50ZWdyYWwgb3IgY2xvc2UgdG8gYW4gaW50ZWdlcikuICBUaGlzIGlzIGhlcmUgZm9yIHVzZSBpbiB0aGUKKyAgIHJlZmxlY3Rpb24gZm9ybXVsYSBmb3IgdGhlIGdhbW1hIGZ1bmN0aW9uLiAgSXQgY29uZm9ybXMgdG8gSUVFRQorICAgNzU0LTIwMDggZm9yIGZpbml0ZSBhcmd1bWVudHMsIGJ1dCBub3QgZm9yIGluZmluaXRpZXMgb3IgbmFucy4KKyovCiAKLSAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKLSAgICAgICAgLyogQU5TSSBDIGdlbmVyYWxseSByZXF1aXJlcyBsaWJtIGZ1bmN0aW9ucyB0byBzZXQgRVJBTkdFCi0gICAgICAgICAqIG9uIG92ZXJmbG93LCBidXQgYWxzbyBnZW5lcmFsbHkgKmFsbG93cyogdGhlbSB0byBzZXQKLSAgICAgICAgICogRVJBTkdFIG9uIHVuZGVyZmxvdyB0b28uICBUaGVyZSdzIG5vIGNvbnNpc3RlbmN5IGFib3V0Ci0gICAgICAgICAqIHRoZSBsYXR0ZXIgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICAgICAgICogQWxhcywgQzk5IG5ldmVyIHJlcXVpcmVzIHRoYXQgZXJybm8gYmUgc2V0LgotICAgICAgICAgKiBIZXJlIHdlIHN1cHByZXNzIHRoZSB1bmRlcmZsb3cgZXJyb3JzIChsaWJtIGZ1bmN0aW9ucwotICAgICAgICAgKiBzaG91bGQgcmV0dXJuIGEgemVybyBvbiB1bmRlcmZsb3csIGFuZCArLSBIVUdFX1ZBTCBvbgotICAgICAgICAgKiBvdmVyZmxvdywgc28gdGVzdGluZyB0aGUgcmVzdWx0IGZvciB6ZXJvIHN1ZmZpY2VzIHRvCi0gICAgICAgICAqIGRpc3Rpbmd1aXNoIHRoZSBjYXNlcykuCi0gICAgICAgICAqCi0gICAgICAgICAqIE9uIHNvbWUgcGxhdGZvcm1zIChVYnVudHUvaWE2NCkgaXQgc2VlbXMgdGhhdCBlcnJubyBjYW4gYmUKLSAgICAgICAgICogc2V0IHRvIEVSQU5HRSBmb3Igc3Vibm9ybWFsIHJlc3VsdHMgdGhhdCBkbyAqbm90KiB1bmRlcmZsb3cKLSAgICAgICAgICogdG8gemVyby4gIFNvIHRvIGJlIHNhZmUsIHdlJ2xsIGlnbm9yZSBFUkFOR0Ugd2hlbmV2ZXIgdGhlCi0gICAgICAgICAqIGZ1bmN0aW9uIHJlc3VsdCBpcyBsZXNzIHRoYW4gb25lIGluIGFic29sdXRlIHZhbHVlLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGZhYnMoeCkgPCAxLjApCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF0aCByYW5nZSBlcnJvciIpOworc3RhdGljIGNvbnN0IGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3Oworc3RhdGljIGNvbnN0IGRvdWJsZSBzcXJ0cGkgPSAxLjc3MjQ1Mzg1MDkwNTUxNjAyNzI5ODE2NzQ4MzM0MTE0NTE4Mjc5ODsKKworc3RhdGljIGRvdWJsZQorc2lucGkoZG91YmxlIHgpCit7CisgICAgZG91YmxlIHksIHI7CisgICAgaW50IG47CisgICAgLyogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBmb3IgZmluaXRlIGFyZ3VtZW50cyAqLworICAgIGFzc2VydChQeV9JU19GSU5JVEUoeCkpOworICAgIHkgPSBmbW9kKGZhYnMoeCksIDIuMCk7CisgICAgbiA9IChpbnQpcm91bmQoMi4wKnkpOworICAgIGFzc2VydCgwIDw9IG4gJiYgbiA8PSA0KTsKKyAgICBzd2l0Y2ggKG4pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHIgPSBzaW4ocGkqeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgciA9IGNvcyhwaSooeS0wLjUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICAvKiBOLkIuIC1zaW4ocGkqKHktMS4wKSkgaXMgKm5vdCogZXF1aXZhbGVudDogaXQgd291bGQgZ2l2ZQorICAgICAgICAgICAtMC4wIGluc3RlYWQgb2YgMC4wIHdoZW4geSA9PSAxLjAuICovCisgICAgICAgIHIgPSBzaW4ocGkqKDEuMC15KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgciA9IC1jb3MocGkqKHktMS41KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgciA9IHNpbihwaSooeS0yLjApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOyAgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisgICAgICAgIHIgPSAtMS4yM2UyMDA7IC8qIHNpbGVuY2UgZ2NjIHdhcm5pbmcgKi8KICAgICB9Ci0gICAgZWxzZQotICAgICAgICAvKiBVbmV4cGVjdGVkIG1hdGggZXJyb3IgKi8KLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIHJldHVybiBjb3B5c2lnbigxLjAsIHgpKnI7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSByZWFsIGdhbW1hIGZ1bmN0aW9uLiAgSW4gZXh0ZW5zaXZlIGJ1dCBub24tZXhoYXVzdGl2ZQorICAgcmFuZG9tIHRlc3RzLCB0aGlzIGZ1bmN0aW9uIHByb3ZlZCBhY2N1cmF0ZSB0byB3aXRoaW4gPD0gMTAgdWxwcyBhY3Jvc3MgdGhlCisgICBlbnRpcmUgZmxvYXQgZG9tYWluLiAgTm90ZSB0aGF0IGFjY3VyYWN5IG1heSBkZXBlbmQgb24gdGhlIHF1YWxpdHkgb2YgdGhlCisgICBzeXN0ZW0gbWF0aCBmdW5jdGlvbnMsIHRoZSBwb3cgZnVuY3Rpb24gaW4gcGFydGljdWxhci4gIFNwZWNpYWwgY2FzZXMKKyAgIGZvbGxvdyBDOTkgYW5uZXggRi4gIFRoZSBwYXJhbWV0ZXJzIGFuZCBtZXRob2QgYXJlIHRhaWxvcmVkIHRvIHBsYXRmb3JtcworICAgd2hvc2UgZG91YmxlIGZvcm1hdCBpcyB0aGUgSUVFRSA3NTQgYmluYXJ5NjQgZm9ybWF0LgorCisgICBNZXRob2Q6IGZvciB4ID4gMC4wIHdlIHVzZSB0aGUgTGFuY3pvcyBhcHByb3hpbWF0aW9uIHdpdGggcGFyYW1ldGVycyBOPTEzCisgICBhbmQgZz02LjAyNDY4MDA0MDc3NjcyOTU4Mzc0MDIzNDM3NTsgdGhlc2UgcGFyYW1ldGVycyBhcmUgYW1vbmdzdCB0aG9zZQorICAgdXNlZCBieSB0aGUgQm9vc3QgbGlicmFyeS4gIEZvbGxvd2luZyBCb29zdCAoYWdhaW4pLCB3ZSByZS1leHByZXNzIHRoZQorICAgTGFuY3pvcyBzdW0gYXMgYSByYXRpb25hbCBmdW5jdGlvbiwgYW5kIGNvbXB1dGUgaXQgdGhhdCB3YXkuICBUaGUKKyAgIGNvZWZmaWNpZW50cyBiZWxvdyB3ZXJlIGNvbXB1dGVkIGluZGVwZW5kZW50bHkgdXNpbmcgTVBGUiwgYW5kIGhhdmUgYmVlbgorICAgZG91YmxlLWNoZWNrZWQgYWdhaW5zdCB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBCb29zdCBzb3VyY2UgY29kZS4KKworICAgRm9yIHggPCAwLjAgd2UgdXNlIHRoZSByZWZsZWN0aW9uIGZvcm11bGEuCisKKyAgIFRoZXJlJ3Mgb25lIG1pbm9yIHR3ZWFrIHRoYXQgZGVzZXJ2ZXMgZXhwbGFuYXRpb246IExhbmN6b3MnIGZvcm11bGEgZm9yCisgICBHYW1tYSh4KSBpbnZvbHZlcyBjb21wdXRpbmcgcG93KHgrZy0wLjUsIHgtMC41KSAvIGV4cCh4K2ctMC41KS4gIEZvciBtYW55IHgKKyAgIHZhbHVlcywgeCtnLTAuNSBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS4gIEhvd2V2ZXIsIGluIGNhc2VzIHdoZXJlIGl0CisgICBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IHRoZSBzbWFsbCBlcnJvciBpbiB4K2ctMC41IGNhbiBiZSBtYWduaWZpZWQKKyAgIHNpZ25pZmljYW50bHkgYnkgdGhlIHBvdyBhbmQgZXhwIGNhbGxzLCBlc3BlY2lhbGx5IGZvciBsYXJnZSB4LiAgQSBjaGVhcAorICAgY29ycmVjdGlvbiBpcyB0byBtdWx0aXBseSBieSAoMSArIGUqZy8oeCtnLTAuNSkpLCB3aGVyZSBlIGlzIHRoZSBlcnJvcgorICAgaW52b2x2ZWQgaW4gdGhlIGNvbXB1dGF0aW9uIG9mIHgrZy0wLjUgKHRoYXQgaXMsIGUgPSBjb21wdXRlZCB2YWx1ZSBvZgorICAgeCtnLTAuNSAtIGV4YWN0IHZhbHVlIG9mIHgrZy0wLjUpLiAgSGVyZSdzIHRoZSBwcm9vZjoKKworICAgQ29ycmVjdGlvbiBmYWN0b3IKKyAgIC0tLS0tLS0tLS0tLS0tLS0tCisgICBXcml0ZSB4K2ctMC41ID0geS1lLCB3aGVyZSB5IGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhbiBJRUVFIDc1NAorICAgZG91YmxlLCBhbmQgZSBpcyB0aW55LiAgVGhlbjoKKworICAgICBwb3coeCtnLTAuNSx4LTAuNSkvZXhwKHgrZy0wLjUpID0gcG93KHktZSwgeC0wLjUpL2V4cCh5LWUpCisgICAgID0gcG93KHksIHgtMC41KS9leHAoeSkgKiBDLAorCisgICB3aGVyZSB0aGUgY29ycmVjdGlvbl9mYWN0b3IgQyBpcyBnaXZlbiBieQorCisgICAgIEMgPSBwb3coMS1lL3ksIHgtMC41KSAqIGV4cChlKQorCisgICBTaW5jZSBlIGlzIHRpbnksIHBvdygxLWUveSwgeC0wLjUpIH4gMS0oeC0wLjUpKmUveSwgYW5kIGV4cCh4KSB+IDErZSwgc286CisKKyAgICAgQyB+ICgxLSh4LTAuNSkqZS95KSAqICgxK2UpIH4gMSArIGUqKHktKHgtMC41KSkveQorCisgICBCdXQgeS0oeC0wLjUpID0gZytlLCBhbmQgZytlIH4gZy4gIFNvIHdlIGdldCBDIH4gMSArIGUqZy95LCBhbmQKKworICAgICBwb3coeCtnLTAuNSx4LTAuNSkvZXhwKHgrZy0wLjUpIH4gcG93KHksIHgtMC41KS9leHAoeSkgKiAoMSArIGUqZy95KSwKKworICAgTm90ZSB0aGF0IGZvciBhY2N1cmFjeSwgd2hlbiBjb21wdXRpbmcgcipDIGl0J3MgYmV0dGVyIHRvIGRvCisKKyAgICAgciArIGUqZy95KnI7CisKKyAgIHRoYW4KKworICAgICByICogKDEgKyBlKmcveSk7CisKKyAgIHNpbmNlIHRoZSBhZGRpdGlvbiBpbiB0aGUgbGF0dGVyIHRocm93cyBhd2F5IG1vc3Qgb2YgdGhlIGJpdHMgb2YKKyAgIGluZm9ybWF0aW9uIGluIGUqZy95LgorKi8KKworI2RlZmluZSBMQU5DWk9TX04gMTMKK3N0YXRpYyBjb25zdCBkb3VibGUgbGFuY3pvc19nID0gNi4wMjQ2ODAwNDA3NzY3Mjk1ODM3NDAyMzQzNzU7CitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfZ19taW51c19oYWxmID0gNS41MjQ2ODAwNDA3NzY3Mjk1ODM3NDAyMzQzNzU7CitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfbnVtX2NvZWZmc1tMQU5DWk9TX05dID0geworICAgIDIzNTMxMzc2ODgwLjQxMDc1OTY4ODU3MjAwNzY3NDQ1MTYzNjc1NDczNDg0NjgwNDk0MCwKKyAgICA0MjkxOTgwMzY0Mi42NDkwOTg3Njg5NTc4OTkwNDcwMDE5ODg4NTA5MjYzNTU4NDg5NTksCisgICAgMzU3MTE5NTkyMzcuMzU1NjY4MDQ5NDQwMTg1NDUxNTQ3MTY2NzA1OTYwNDg4NjM1ODQzLAorICAgIDE3OTIxMDM0NDI2LjAzNzIwOTY5OTkxOTc1NTc1NDQ1ODkzMTExMjY3MTQwMzI2NTM5MCwKKyAgICA2MDM5NTQyNTg2LjM1MjAyODAwNTA2NDI5MTY0NDMwNzI5NzkyMTA2OTkzODg0MjA3MDgsCisgICAgMTQzOTcyMDQwNy4zMTE3MjE2NzM2NjMyMjMwNzI3OTQ5MTIzOTM5NzE1NDg1Nzg2NzcyLAorICAgIDI0ODg3NDU1Ny44NjIwNTQxNTY1MTE0NjAzODY0MTMyMjk0MjMyMTYzMjEyNTEyNzgwMSwKKyAgICAzMTQyNjQxNS41ODU0MDAxOTQzODA2MTQyMzE2MjgzMTgyMDUzNjI4NzQ2ODQ5ODc2NDAsCisgICAgMjg3NjM3MC42Mjg5MzUzNzI0NDEyMjU0MDkwNTE2MjA4NDk2MTM1OTkxMTQ1Mzc4NzY4LAorICAgIDE4NjA1Ni4yNjUzOTUyMjM0OTUwNDAyOTQ5ODk3MTYwNDU2OTkyODIyMDc4NDIzNjMyOCwKKyAgICA4MDcxLjY3MjAwMjM2NTgxNjIxMDYzODAwMjkwMjI3MjI1MDYxMzgyMTg1MTYzMjUwMjQsCisgICAgMjEwLjgyNDI3Nzc1MTU3OTM0NTg3MjUwOTczMzkyMDcxMzM2MjcxMTY2OTY5NTgwMjkxLAorICAgIDIuNTA2NjI4Mjc0NjMxMDAwMjcwMTY0OTA4MTc3MTMzODM3MzM4NjI2NDMxMDc5MzQwOAorfTsKKworLyogZGVub21pbmF0b3IgaXMgeCooeCsxKSouLi4qKHgrTEFOQ1pPU19OLTIpICovCitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfZGVuX2NvZWZmc1tMQU5DWk9TX05dID0geworICAgIDAuMCwgMzk5MTY4MDAuMCwgMTIwNTQzODQwLjAsIDE1MDkxNzk3Ni4wLCAxMDUyNTgwNzYuMCwgNDU5OTU3MzAuMCwKKyAgICAxMzMzOTUzNS4wLCAyNjM3NTU4LjAsIDM1NzQyMy4wLCAzMjY3MC4wLCAxOTI1LjAsIDY2LjAsIDEuMH07CisKKy8qIGdhbW1hIHZhbHVlcyBmb3Igc21hbGwgcG9zaXRpdmUgaW50ZWdlcnMsIDEgdGhvdWdoIE5HQU1NQV9JTlRFR1JBTCAqLworI2RlZmluZSBOR0FNTUFfSU5URUdSQUwgMjMKK3N0YXRpYyBjb25zdCBkb3VibGUgZ2FtbWFfaW50ZWdyYWxbTkdBTU1BX0lOVEVHUkFMXSA9IHsKKyAgICAxLjAsIDEuMCwgMi4wLCA2LjAsIDI0LjAsIDEyMC4wLCA3MjAuMCwgNTA0MC4wLCA0MDMyMC4wLCAzNjI4ODAuMCwKKyAgICAzNjI4ODAwLjAsIDM5OTE2ODAwLjAsIDQ3OTAwMTYwMC4wLCA2MjI3MDIwODAwLjAsIDg3MTc4MjkxMjAwLjAsCisgICAgMTMwNzY3NDM2ODAwMC4wLCAyMDkyMjc4OTg4ODAwMC4wLCAzNTU2ODc0MjgwOTYwMDAuMCwKKyAgICA2NDAyMzczNzA1NzI4MDAwLjAsIDEyMTY0NTEwMDQwODgzMjAwMC4wLCAyNDMyOTAyMDA4MTc2NjQwMDAwLjAsCisgICAgNTEwOTA5NDIxNzE3MDk0NDAwMDAuMCwgMTEyNDAwMDcyNzc3NzYwNzY4MDAwMC4wLAorfTsKKworLyogTGFuY3pvcycgc3VtIExfZyh4KSwgZm9yIHBvc2l0aXZlIHggKi8KKworc3RhdGljIGRvdWJsZQorbGFuY3pvc19zdW0oZG91YmxlIHgpCit7CisgICAgZG91YmxlIG51bSA9IDAuMCwgZGVuID0gMC4wOworICAgIGludCBpOworICAgIGFzc2VydCh4ID4gMC4wKTsKKyAgICAvKiBldmFsdWF0ZSB0aGUgcmF0aW9uYWwgZnVuY3Rpb24gbGFuY3pvc19zdW0oeCkuICBGb3IgbGFyZ2UKKyAgICAgICB4LCB0aGUgb2J2aW91cyBhbGdvcml0aG0gcmlza3Mgb3ZlcmZsb3csIHNvIHdlIGluc3RlYWQKKyAgICAgICByZXNjYWxlIHRoZSBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIG9mIHRoZSByYXRpb25hbAorICAgICAgIGZ1bmN0aW9uIGJ5IHgqKigxLUxBTkNaT1NfTikgYW5kIHRyZWF0IHRoaXMgYXMgYQorICAgICAgIHJhdGlvbmFsIGZ1bmN0aW9uIGluIDEveC4gIFRoaXMgYWxzbyByZWR1Y2VzIHRoZSBlcnJvciBmb3IKKyAgICAgICBsYXJnZXIgeCB2YWx1ZXMuICBUaGUgY2hvaWNlIG9mIGN1dG9mZiBwb2ludCAoNS4wIGJlbG93KSBpcworICAgICAgIHNvbWV3aGF0IGFyYml0cmFyeTsgaW4gdGVzdHMsIHNtYWxsZXIgY3V0b2ZmIHZhbHVlcyB0aGFuCisgICAgICAgdGhpcyByZXN1bHRlZCBpbiBsb3dlciBhY2N1cmFjeS4gKi8KKyAgICBpZiAoeCA8IDUuMCkgeworICAgICAgICBmb3IgKGkgPSBMQU5DWk9TX047IC0taSA+PSAwOyApIHsKKyAgICAgICAgICAgIG51bSA9IG51bSAqIHggKyBsYW5jem9zX251bV9jb2VmZnNbaV07CisgICAgICAgICAgICBkZW4gPSBkZW4gKiB4ICsgbGFuY3pvc19kZW5fY29lZmZzW2ldOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTEFOQ1pPU19OOyBpKyspIHsKKyAgICAgICAgICAgIG51bSA9IG51bSAvIHggKyBsYW5jem9zX251bV9jb2VmZnNbaV07CisgICAgICAgICAgICBkZW4gPSBkZW4gLyB4ICsgbGFuY3pvc19kZW5fY29lZmZzW2ldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudW0vZGVuOworfQorCitzdGF0aWMgZG91YmxlCittX3RnYW1tYShkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgYWJzeCwgciwgeSwgeiwgc3FydHBvdzsKKworICAgIC8qIHNwZWNpYWwgY2FzZXMgKi8KKyAgICBpZiAoIVB5X0lTX0ZJTklURSh4KSkgeworICAgICAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IHggPiAwLjApCisgICAgICAgICAgICByZXR1cm4geDsgIC8qIHRnYW1tYShuYW4pID0gbmFuLCB0Z2FtbWEoaW5mKSA9IGluZiAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVycm5vID0gRURPTTsKKyAgICAgICAgICAgIHJldHVybiBQeV9OQU47ICAvKiB0Z2FtbWEoLWluZikgPSBuYW4sIGludmFsaWQgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoeCA9PSAwLjApIHsKKyAgICAgICAgZXJybm8gPSBFRE9NOworICAgICAgICByZXR1cm4gMS4wL3g7IC8qIHRnYW1tYSgrLTAuMCkgPSArLWluZiwgZGl2aWRlLWJ5LXplcm8gKi8KKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIGFyZ3VtZW50cyAqLworICAgIGlmICh4ID09IGZsb29yKHgpKSB7CisgICAgICAgIGlmICh4IDwgMC4wKSB7CisgICAgICAgICAgICBlcnJubyA9IEVET007ICAvKiB0Z2FtbWEobikgPSBuYW4sIGludmFsaWQgZm9yICovCisgICAgICAgICAgICByZXR1cm4gUHlfTkFOOyAvKiBuZWdhdGl2ZSBpbnRlZ2VycyBuICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPD0gTkdBTU1BX0lOVEVHUkFMKQorICAgICAgICAgICAgcmV0dXJuIGdhbW1hX2ludGVncmFsWyhpbnQpeCAtIDFdOworICAgIH0KKyAgICBhYnN4ID0gZmFicyh4KTsKKworICAgIC8qIHRpbnkgYXJndW1lbnRzOiAgdGdhbW1hKHgpIH4gMS94IGZvciB4IG5lYXIgMCAqLworICAgIGlmIChhYnN4IDwgMWUtMjApIHsKKyAgICAgICAgciA9IDEuMC94OworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkocikpCisgICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorCisgICAgLyogbGFyZ2UgYXJndW1lbnRzOiBhc3N1bWluZyBJRUVFIDc1NCBkb3VibGVzLCB0Z2FtbWEoeCkgb3ZlcmZsb3dzIGZvcgorICAgICAgIHggPiAyMDAsIGFuZCB1bmRlcmZsb3dzIHRvICstMC4wIGZvciB4IDwgLTIwMCwgbm90IGEgbmVnYXRpdmUKKyAgICAgICBpbnRlZ2VyLiAqLworICAgIGlmIChhYnN4ID4gMjAwLjApIHsKKyAgICAgICAgaWYgKHggPCAwLjApIHsKKyAgICAgICAgICAgIHJldHVybiAwLjAvc2lucGkoeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHkgPSBhYnN4ICsgbGFuY3pvc19nX21pbnVzX2hhbGY7CisgICAgLyogY29tcHV0ZSBlcnJvciBpbiBzdW0gKi8KKyAgICBpZiAoYWJzeCA+IGxhbmN6b3NfZ19taW51c19oYWxmKSB7CisgICAgICAgIC8qIG5vdGU6IHRoZSBjb3JyZWN0aW9uIGNhbiBiZSBmb2lsZWQgYnkgYW4gb3B0aW1pemluZworICAgICAgICAgICBjb21waWxlciB0aGF0IChpbmNvcnJlY3RseSkgdGhpbmtzIHRoYXQgYW4gZXhwcmVzc2lvbiBsaWtlCisgICAgICAgICAgIGEgKyBiIC0gYSAtIGIgY2FuIGJlIG9wdGltaXplZCB0byAwLjAuICBUaGlzIHNob3VsZG4ndAorICAgICAgICAgICBoYXBwZW4gaW4gYSBzdGFuZGFyZHMtY29uZm9ybWluZyBjb21waWxlci4gKi8KKyAgICAgICAgZG91YmxlIHEgPSB5IC0gYWJzeDsKKyAgICAgICAgeiA9IHEgLSBsYW5jem9zX2dfbWludXNfaGFsZjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBxID0geSAtIGxhbmN6b3NfZ19taW51c19oYWxmOworICAgICAgICB6ID0gcSAtIGFic3g7CisgICAgfQorICAgIHogPSB6ICogbGFuY3pvc19nIC8geTsKKyAgICBpZiAoeCA8IDAuMCkgeworICAgICAgICByID0gLXBpIC8gc2lucGkoYWJzeCkgLyBhYnN4ICogZXhwKHkpIC8gbGFuY3pvc19zdW0oYWJzeCk7CisgICAgICAgIHIgLT0geiAqIHI7CisgICAgICAgIGlmIChhYnN4IDwgMTQwLjApIHsKKyAgICAgICAgICAgIHIgLz0gcG93KHksIGFic3ggLSAwLjUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3FydHBvdyA9IHBvdyh5LCBhYnN4IC8gMi4wIC0gMC4yNSk7CisgICAgICAgICAgICByIC89IHNxcnRwb3c7CisgICAgICAgICAgICByIC89IHNxcnRwb3c7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHIgPSBsYW5jem9zX3N1bShhYnN4KSAvIGV4cCh5KTsKKyAgICAgICAgciArPSB6ICogcjsKKyAgICAgICAgaWYgKGFic3ggPCAxNDAuMCkgeworICAgICAgICAgICAgciAqPSBwb3coeSwgYWJzeCAtIDAuNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzcXJ0cG93ID0gcG93KHksIGFic3ggLyAyLjAgLSAwLjI1KTsKKyAgICAgICAgICAgIHIgKj0gc3FydHBvdzsKKyAgICAgICAgICAgIHIgKj0gc3FydHBvdzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlfSVNfSU5GSU5JVFkocikpCisgICAgICAgIGVycm5vID0gRVJBTkdFOworICAgIHJldHVybiByOworfQorCisvKgorICAgbGdhbW1hOiAgbmF0dXJhbCBsb2cgb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBHYW1tYSBmdW5jdGlvbi4KKyAgIEZvciBsYXJnZSBhcmd1bWVudHMsIExhbmN6b3MnIGZvcm11bGEgd29ya3MgZXh0cmVtZWx5IHdlbGwgaGVyZS4KKyovCisKK3N0YXRpYyBkb3VibGUKK21fbGdhbW1hKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSByLCBhYnN4OworCisgICAgLyogc3BlY2lhbCBjYXNlcyAqLworICAgIGlmICghUHlfSVNfRklOSVRFKHgpKSB7CisgICAgICAgIGlmIChQeV9JU19OQU4oeCkpCisgICAgICAgICAgICByZXR1cm4geDsgIC8qIGxnYW1tYShuYW4pID0gbmFuICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsgLyogbGdhbW1hKCstaW5mKSA9ICtpbmYgKi8KKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIGFyZ3VtZW50cyAqLworICAgIGlmICh4ID09IGZsb29yKHgpICYmIHggPD0gMi4wKSB7CisgICAgICAgIGlmICh4IDw9IDAuMCkgeworICAgICAgICAgICAgZXJybm8gPSBFRE9NOyAgLyogbGdhbW1hKG4pID0gaW5mLCBkaXZpZGUtYnktemVybyBmb3IgKi8KKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsgLyogaW50ZWdlcnMgbiA8PSAwICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMC4wOyAvKiBsZ2FtbWEoMSkgPSBsZ2FtbWEoMikgPSAwLjAgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGFic3ggPSBmYWJzKHgpOworICAgIC8qIHRpbnkgYXJndW1lbnRzOiBsZ2FtbWEoeCkgfiAtbG9nKGZhYnMoeCkpIGZvciBzbWFsbCB4ICovCisgICAgaWYgKGFic3ggPCAxZS0yMCkKKyAgICAgICAgcmV0dXJuIC1sb2coYWJzeCk7CisKKyAgICAvKiBMYW5jem9zJyBmb3JtdWxhICovCisgICAgaWYgKHggPiAwLjApIHsKKyAgICAgICAgLyogd2UgY291bGQgc2F2ZSBhIGZyYWN0aW9uIG9mIGEgdWxwIGluIGFjY3VyYWN5IGJ5IGhhdmluZyBhCisgICAgICAgICAgIHNlY29uZCBzZXQgb2YgbnVtZXJhdG9yIGNvZWZmaWNpZW50cyBmb3IgbGFuY3pvc19zdW0gdGhhdAorICAgICAgICAgICBhYnNvcmJlZCB0aGUgZXhwKC1sYW5jem9zX2cpIHRlcm0sIGFuZCB0aHJvd2luZyBvdXQgdGhlCisgICAgICAgICAgIGxhbmN6b3NfZyBzdWJ0cmFjdGlvbiBiZWxvdzsgaXQncyBwcm9iYWJseSBub3Qgd29ydGggaXQuICovCisgICAgICAgIHIgPSBsb2cobGFuY3pvc19zdW0oeCkpIC0gbGFuY3pvc19nICsKKyAgICAgICAgICAgICh4LTAuNSkqKGxvZyh4K2xhbmN6b3NfZy0wLjUpLTEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgciA9IGxvZyhwaSkgLSBsb2coZmFicyhzaW5waShhYnN4KSkpIC0gbG9nKGFic3gpIC0KKyAgICAgICAgICAgIChsb2cobGFuY3pvc19zdW0oYWJzeCkpIC0gbGFuY3pvc19nICsKKyAgICAgICAgICAgICAoYWJzeC0wLjUpKihsb2coYWJzeCtsYW5jem9zX2ctMC41KS0xKSk7CisgICAgfQorICAgIGlmIChQeV9JU19JTkZJTklUWShyKSkKKyAgICAgICAgZXJybm8gPSBFUkFOR0U7CisgICAgcmV0dXJuIHI7Cit9CisKKy8qCisgICBJbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZih4KSBhbmQgdGhlIGNvbXBsZW1lbnRhcnkgZXJyb3IKKyAgIGZ1bmN0aW9uIGVyZmMoeCkuCisKKyAgIE1ldGhvZDogZm9sbG93aW5nICdOdW1lcmljYWwgUmVjaXBlcycgYnkgRmxhbm5lcnksIFByZXNzIGV0LiBhbC4gKDJuZCBlZC4sCisgICBDYW1icmlkZ2UgVW5pdmVyc2l0eSBQcmVzcyksIHdlIHVzZSBhIHNlcmllcyBhcHByb3hpbWF0aW9uIGZvciBlcmYgZm9yCisgICBzbWFsbCB4LCBhbmQgYSBjb250aW51ZWQgZnJhY3Rpb24gYXBwcm94aW1hdGlvbiBmb3IgZXJmYyh4KSBmb3IgbGFyZ2VyIHg7CisgICBjb21iaW5lZCB3aXRoIHRoZSByZWxhdGlvbnMgZXJmKC14KSA9IC1lcmYoeCkgYW5kIGVyZmMoeCkgPSAxLjAgLSBlcmYoeCksCisgICB0aGlzIGdpdmVzIHVzIGVyZih4KSBhbmQgZXJmYyh4KSBmb3IgYWxsIHguCisKKyAgIFRoZSBzZXJpZXMgZXhwYW5zaW9uIHVzZWQgaXM6CisKKyAgICAgIGVyZih4KSA9IHgqZXhwKC14KngpL3NxcnQocGkpICogWworICAgICAgICAgICAgICAgICAgICAgMi8xICsgNC8zIHgqKjIgKyA4LzE1IHgqKjQgKyAxNi8xMDUgeCoqNiArIC4uLl0KKworICAgVGhlIGNvZWZmaWNpZW50IG9mIHgqKigyay0yKSBoZXJlIGlzIDQqKmsqZmFjdG9yaWFsKGspL2ZhY3RvcmlhbCgyKmspLgorICAgVGhpcyBzZXJpZXMgY29udmVyZ2VzIHdlbGwgZm9yIHNtYWxsaXNoIHgsIGJ1dCBzbG93bHkgZm9yIGxhcmdlciB4LgorCisgICBUaGUgY29udGludWVkIGZyYWN0aW9uIGV4cGFuc2lvbiB1c2VkIGlzOgorCisgICAgICBlcmZjKHgpID0geCpleHAoLXgqeCkvc3FydChwaSkgKiBbMS8oMC41ICsgeCoqMiAtKSAwLjUvKDIuNSArIHgqKjIgLSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjAvKDQuNSArIHgqKjIgLSApIDcuNS8oNi41ICsgeCoqMiAtICkgLi4uXQorCisgICBhZnRlciB0aGUgZmlyc3QgdGVybSwgdGhlIGdlbmVyYWwgdGVybSBoYXMgdGhlIGZvcm06CisKKyAgICAgIGsqKGstMC41KS8oMiprKzAuNSArIHgqKjIgLSAuLi4pLgorCisgICBUaGlzIGV4cGFuc2lvbiBjb252ZXJnZXMgZmFzdCBmb3IgbGFyZ2VyIHgsIGJ1dCBjb252ZXJnZW5jZSBiZWNvbWVzCisgICBpbmZpbml0ZWx5IHNsb3cgYXMgeCBhcHByb2FjaGVzIDAuMC4gIFRoZSAoc29tZXdoYXQgbmFpdmUpIGNvbnRpbnVlZAorICAgZnJhY3Rpb24gZXZhbHVhdGlvbiBhbGdvcml0aG0gdXNlZCBiZWxvdyBhbHNvIHJpc2tzIG92ZXJmbG93IGZvciBsYXJnZSB4OworICAgYnV0IGZvciBsYXJnZSB4LCBlcmZjKHgpID09IDAuMCB0byB3aXRoaW4gbWFjaGluZSBwcmVjaXNpb24uICAoRm9yCisgICBleGFtcGxlLCBlcmZjKDMwLjApIGlzIGFwcHJveGltYXRlbHkgMi41NmUtMzkzKS4KKworICAgUGFyYW1ldGVyczogdXNlIHNlcmllcyBleHBhbnNpb24gZm9yIGFicyh4KSA8IEVSRl9TRVJJRVNfQ1VUT0ZGIGFuZAorICAgY29udGludWVkIGZyYWN0aW9uIGV4cGFuc2lvbiBmb3IgRVJGX1NFUklFU19DVVRPRkYgPD0gYWJzKHgpIDwKKyAgIEVSRkNfQ09OVEZSQUNfQ1VUT0ZGLiAgRVJGQ19TRVJJRVNfVEVSTVMgYW5kIEVSRkNfQ09OVEZSQUNfVEVSTVMgYXJlIHRoZQorICAgbnVtYmVycyBvZiB0ZXJtcyB0byB1c2UgZm9yIHRoZSByZWxldmFudCBleHBhbnNpb25zLiAgKi8KKworI2RlZmluZSBFUkZfU0VSSUVTX0NVVE9GRiAxLjUKKyNkZWZpbmUgRVJGX1NFUklFU19URVJNUyAyNQorI2RlZmluZSBFUkZDX0NPTlRGUkFDX0NVVE9GRiAzMC4wCisjZGVmaW5lIEVSRkNfQ09OVEZSQUNfVEVSTVMgNTAKKworLyoKKyAgIEVycm9yIGZ1bmN0aW9uLCB2aWEgcG93ZXIgc2VyaWVzLgorCisgICBHaXZlbiBhIGZpbml0ZSBmbG9hdCB4LCByZXR1cm4gYW4gYXBwcm94aW1hdGlvbiB0byBlcmYoeCkuCisgICBDb252ZXJnZXMgcmVhc29uYWJseSBmYXN0IGZvciBzbWFsbCB4LgorKi8KKworc3RhdGljIGRvdWJsZQorbV9lcmZfc2VyaWVzKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSB4MiwgYWNjLCBmaywgcmVzdWx0OworICAgIGludCBpLCBzYXZlZF9lcnJubzsKKworICAgIHgyID0geCAqIHg7CisgICAgYWNjID0gMC4wOworICAgIGZrID0gKGRvdWJsZSlFUkZfU0VSSUVTX1RFUk1TICsgMC41OworICAgIGZvciAoaSA9IDA7IGkgPCBFUkZfU0VSSUVTX1RFUk1TOyBpKyspIHsKKyAgICAgICAgYWNjID0gMi4wICsgeDIgKiBhY2MgLyBmazsKKyAgICAgICAgZmsgLT0gMS4wOworICAgIH0KKyAgICAvKiBNYWtlIHN1cmUgdGhlIGV4cCBjYWxsIGRvZXNuJ3QgYWZmZWN0IGVycm5vOworICAgICAgIHNlZSBtX2VyZmNfY29udGZyYWMgZm9yIG1vcmUuICovCisgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICByZXN1bHQgPSBhY2MgKiB4ICogZXhwKC14MikgLyBzcXJ0cGk7CisgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvKgorICAgQ29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiwgdmlhIGNvbnRpbnVlZCBmcmFjdGlvbiBleHBhbnNpb24uCisKKyAgIEdpdmVuIGEgcG9zaXRpdmUgZmxvYXQgeCwgcmV0dXJuIGFuIGFwcHJveGltYXRpb24gdG8gZXJmYyh4KS4gIENvbnZlcmdlcworICAgcmVhc29uYWJseSBmYXN0IGZvciB4IGxhcmdlIChzYXksIHggPiAyLjApLCBhbmQgc2hvdWxkIGJlIHNhZmUgZnJvbQorICAgb3ZlcmZsb3cgaWYgeCBhbmQgbnRlcm1zIGFyZSBub3QgdG9vIGxhcmdlLiAgT24gYW4gSUVFRSA3NTQgbWFjaGluZSwgd2l0aCB4CisgICA8PSAzMC4wLCB3ZSdyZSBzYWZlIHVwIHRvIG50ZXJtcyA9IDEwMC4gIEZvciB4ID49IDMwLjAsIGVyZmMoeCkgaXMgc21hbGxlcgorICAgdGhhbiB0aGUgc21hbGxlc3QgcmVwcmVzZW50YWJsZSBub256ZXJvIGZsb2F0LiAgKi8KKworc3RhdGljIGRvdWJsZQorbV9lcmZjX2NvbnRmcmFjKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSB4MiwgYSwgZGEsIHAsIHBfbGFzdCwgcSwgcV9sYXN0LCBiLCByZXN1bHQ7CisgICAgaW50IGksIHNhdmVkX2Vycm5vOworCisgICAgaWYgKHggPj0gRVJGQ19DT05URlJBQ19DVVRPRkYpCisgICAgICAgIHJldHVybiAwLjA7CisKKyAgICB4MiA9IHgqeDsKKyAgICBhID0gMC4wOworICAgIGRhID0gMC41OworICAgIHAgPSAxLjA7IHBfbGFzdCA9IDAuMDsKKyAgICBxID0gZGEgKyB4MjsgcV9sYXN0ID0gMS4wOworICAgIGZvciAoaSA9IDA7IGkgPCBFUkZDX0NPTlRGUkFDX1RFUk1TOyBpKyspIHsKKyAgICAgICAgZG91YmxlIHRlbXA7CisgICAgICAgIGEgKz0gZGE7CisgICAgICAgIGRhICs9IDIuMDsKKyAgICAgICAgYiA9IGRhICsgeDI7CisgICAgICAgIHRlbXAgPSBwOyBwID0gYipwIC0gYSpwX2xhc3Q7IHBfbGFzdCA9IHRlbXA7CisgICAgICAgIHRlbXAgPSBxOyBxID0gYipxIC0gYSpxX2xhc3Q7IHFfbGFzdCA9IHRlbXA7CisgICAgfQorICAgIC8qIElzc3VlICM4OTg2OiBPbiBzb21lIHBsYXRmb3JtcywgZXhwIHNldHMgZXJybm8gb24gdW5kZXJmbG93IHRvIHplcm87CisgICAgICAgc2F2ZSB0aGUgY3VycmVudCBlcnJubyB2YWx1ZSBzbyB0aGF0IHdlIGNhbiByZXN0b3JlIGl0IGxhdGVyLiAqLworICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgcmVzdWx0ID0gcCAvIHEgKiB4ICogZXhwKC14MikgLyBzcXJ0cGk7CisgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiBFcnJvciBmdW5jdGlvbiBlcmYoeCksIGZvciBnZW5lcmFsIHggKi8KKworc3RhdGljIGRvdWJsZQorbV9lcmYoZG91YmxlIHgpCit7CisgICAgZG91YmxlIGFic3gsIGNmOworCisgICAgaWYgKFB5X0lTX05BTih4KSkKKyAgICAgICAgcmV0dXJuIHg7CisgICAgYWJzeCA9IGZhYnMoeCk7CisgICAgaWYgKGFic3ggPCBFUkZfU0VSSUVTX0NVVE9GRikKKyAgICAgICAgcmV0dXJuIG1fZXJmX3Nlcmllcyh4KTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2YgPSBtX2VyZmNfY29udGZyYWMoYWJzeCk7CisgICAgICAgIHJldHVybiB4ID4gMC4wID8gMS4wIC0gY2YgOiBjZiAtIDEuMDsKKyAgICB9Cit9CisKKy8qIENvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gZXJmYyh4KSwgZm9yIGdlbmVyYWwgeC4gKi8KKworc3RhdGljIGRvdWJsZQorbV9lcmZjKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSBhYnN4LCBjZjsKKworICAgIGlmIChQeV9JU19OQU4oeCkpCisgICAgICAgIHJldHVybiB4OworICAgIGFic3ggPSBmYWJzKHgpOworICAgIGlmIChhYnN4IDwgRVJGX1NFUklFU19DVVRPRkYpCisgICAgICAgIHJldHVybiAxLjAgLSBtX2VyZl9zZXJpZXMoeCk7CisgICAgZWxzZSB7CisgICAgICAgIGNmID0gbV9lcmZjX2NvbnRmcmFjKGFic3gpOworICAgICAgICByZXR1cm4geCA+IDAuMCA/IGNmIDogMi4wIC0gY2Y7CisgICAgfQorfQorCisvKgogICAgd3JhcHBlciBmb3IgYXRhbjIgdGhhdCBkZWFscyBkaXJlY3RseSB3aXRoIHNwZWNpYWwgY2FzZXMgYmVmb3JlCiAgICBkZWxlZ2F0aW5nIHRvIHRoZSBwbGF0Zm9ybSBsaWJtIGZvciB0aGUgcmVtYWluaW5nIGNhc2VzLiAgVGhpcwogICAgaXMgbmVjZXNzYXJ5IHRvIGdldCBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgcGxhdGZvcm1zLgpAQCAtMTg4LDYgKzYwOSw0NiBAQAogfQogCiAKKy8qIENhbGwgaXNfZXJyb3Igd2hlbiBlcnJubyAhPSAwLCBhbmQgd2hlcmUgeCBpcyB0aGUgcmVzdWx0IGxpYm0KKyAqIHJldHVybmVkLiAgaXNfZXJyb3Igd2lsbCB1c3VhbGx5IHNldCB1cCBhbiBleGNlcHRpb24gYW5kIHJldHVybgorICogdHJ1ZSAoMSksIGJ1dCBtYXkgcmV0dXJuIGZhbHNlICgwKSB3aXRob3V0IHNldHRpbmcgdXAgYW4gZXhjZXB0aW9uLgorICovCitzdGF0aWMgaW50Citpc19lcnJvcihkb3VibGUgeCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMTsgICAgIC8qIHByZXN1bXB0aW9uIG9mIGd1aWx0ICovCisgICAgYXNzZXJ0KGVycm5vKTsgICAgICAvKiBub24temVybyBlcnJubyBpcyBhIHByZWNvbmRpdGlvbiBmb3IgY2FsbGluZyAqLworICAgIGlmIChlcnJubyA9PSBFRE9NKQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisKKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgLyogQU5TSSBDIGdlbmVyYWxseSByZXF1aXJlcyBsaWJtIGZ1bmN0aW9ucyB0byBzZXQgRVJBTkdFCisgICAgICAgICAqIG9uIG92ZXJmbG93LCBidXQgYWxzbyBnZW5lcmFsbHkgKmFsbG93cyogdGhlbSB0byBzZXQKKyAgICAgICAgICogRVJBTkdFIG9uIHVuZGVyZmxvdyB0b28uICBUaGVyZSdzIG5vIGNvbnNpc3RlbmN5IGFib3V0CisgICAgICAgICAqIHRoZSBsYXR0ZXIgYWNyb3NzIHBsYXRmb3Jtcy4KKyAgICAgICAgICogQWxhcywgQzk5IG5ldmVyIHJlcXVpcmVzIHRoYXQgZXJybm8gYmUgc2V0LgorICAgICAgICAgKiBIZXJlIHdlIHN1cHByZXNzIHRoZSB1bmRlcmZsb3cgZXJyb3JzIChsaWJtIGZ1bmN0aW9ucworICAgICAgICAgKiBzaG91bGQgcmV0dXJuIGEgemVybyBvbiB1bmRlcmZsb3csIGFuZCArLSBIVUdFX1ZBTCBvbgorICAgICAgICAgKiBvdmVyZmxvdywgc28gdGVzdGluZyB0aGUgcmVzdWx0IGZvciB6ZXJvIHN1ZmZpY2VzIHRvCisgICAgICAgICAqIGRpc3Rpbmd1aXNoIHRoZSBjYXNlcykuCisgICAgICAgICAqCisgICAgICAgICAqIE9uIHNvbWUgcGxhdGZvcm1zIChVYnVudHUvaWE2NCkgaXQgc2VlbXMgdGhhdCBlcnJubyBjYW4gYmUKKyAgICAgICAgICogc2V0IHRvIEVSQU5HRSBmb3Igc3Vibm9ybWFsIHJlc3VsdHMgdGhhdCBkbyAqbm90KiB1bmRlcmZsb3cKKyAgICAgICAgICogdG8gemVyby4gIFNvIHRvIGJlIHNhZmUsIHdlJ2xsIGlnbm9yZSBFUkFOR0Ugd2hlbmV2ZXIgdGhlCisgICAgICAgICAqIGZ1bmN0aW9uIHJlc3VsdCBpcyBsZXNzIHRoYW4gb25lIGluIGFic29sdXRlIHZhbHVlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGZhYnMoeCkgPCAxLjApCisgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF0aCByYW5nZSBlcnJvciIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIC8qIFVuZXhwZWN0ZWQgbWF0aCBlcnJvciAqLworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfVmFsdWVFcnJvcik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAgIG1hdGhfMSBpcyB1c2VkIHRvIHdyYXAgYSBsaWJtIGZ1bmN0aW9uIGYgdGhhdCB0YWtlcyBhIGRvdWJsZQogICAgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgZG91YmxlLgpAQCAtMjQ3LDYgKzcwOCwyNiBAQAogICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHIpOwogfQogCisvKiB2YXJpYW50IG9mIG1hdGhfMSwgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkIGlzIGtub3duIHRvCisgICBzZXQgZXJybm8gcHJvcGVybHkgKHRoYXQgaXMsIGVycm5vID0gRURPTSBmb3IgaW52YWxpZCBvciBkaXZpZGUtYnktemVybywKKyAgIGVycm5vID0gRVJBTkdFIGZvciBvdmVyZmxvdykuICovCisKK3N0YXRpYyBQeU9iamVjdCAqCittYXRoXzFhKFB5T2JqZWN0ICphcmcsIGRvdWJsZSAoKmZ1bmMpIChkb3VibGUpKQoreworICAgIGRvdWJsZSB4LCByOworICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKGFyZyk7CisgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlcnJubyA9IDA7CisgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiaW4gbWF0aF8xYSIsIHJldHVybiAwKTsKKyAgICByID0gKCpmdW5jKSh4KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChyKTsKKyAgICBpZiAoZXJybm8gJiYgaXNfZXJyb3IocikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUocik7Cit9CisKIC8qCiAgICBtYXRoXzIgaXMgdXNlZCB0byB3cmFwIGEgbGlibSBmdW5jdGlvbiBmIHRoYXQgdGFrZXMgdHdvIGRvdWJsZQogICAgYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgZG91YmxlLgpAQCAtMzEzLDYgKzc5NCwxMiBAQAogICAgIH1cCiAgICAgUHlEb2NfU1RSVkFSKG1hdGhfIyNmdW5jbmFtZSMjX2RvYywgZG9jc3RyaW5nKTsKIAorI2RlZmluZSBGVU5DMUEoZnVuY25hbWUsIGZ1bmMsIGRvY3N0cmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIG1hdGhfIyNmdW5jbmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIHsgXAorICAgICAgICByZXR1cm4gbWF0aF8xYShhcmdzLCBmdW5jKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH1cCisgICAgUHlEb2NfU1RSVkFSKG1hdGhfIyNmdW5jbmFtZSMjX2RvYywgZG9jc3RyaW5nKTsKKwogI2RlZmluZSBGVU5DMihmdW5jbmFtZSwgZnVuYywgZG9jc3RyaW5nKSBcCiAgICAgc3RhdGljIFB5T2JqZWN0ICogbWF0aF8jI2Z1bmNuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeyBcCiAgICAgICAgIHJldHVybiBtYXRoXzIoYXJncywgZnVuYywgI2Z1bmNuYW1lKTsgXApAQCAtMzIxLDE4ICs4MDgsMTggQEAKIAogRlVOQzEoYWNvcywgYWNvcywgMCwKICAgICAgICJhY29zKHgpXG5cblJldHVybiB0aGUgYXJjIGNvc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQotRlVOQzEoYWNvc2gsIGFjb3NoLCAwLAorRlVOQzEoYWNvc2gsIG1fYWNvc2gsIDAsCiAgICAgICAiYWNvc2goeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBjb3NpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMxKGFzaW4sIGFzaW4sIDAsCiAgICAgICAiYXNpbih4KVxuXG5SZXR1cm4gdGhlIGFyYyBzaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCi1GVU5DMShhc2luaCwgYXNpbmgsIDAsCitGVU5DMShhc2luaCwgbV9hc2luaCwgMCwKICAgICAgICJhc2luaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHNpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMxKGF0YW4sIGF0YW4sIDAsCiAgICAgICAiYXRhbih4KVxuXG5SZXR1cm4gdGhlIGFyYyB0YW5nZW50IChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCiBGVU5DMihhdGFuMiwgbV9hdGFuMiwKICAgICAgICJhdGFuMih5LCB4KVxuXG5SZXR1cm4gdGhlIGFyYyB0YW5nZW50IChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB5L3guXG4iCiAgICAgICAiVW5saWtlIGF0YW4oeS94KSwgdGhlIHNpZ25zIG9mIGJvdGggeCBhbmQgeSBhcmUgY29uc2lkZXJlZC4iKQotRlVOQzEoYXRhbmgsIGF0YW5oLCAwLAorRlVOQzEoYXRhbmgsIG1fYXRhbmgsIDAsCiAgICAgICAiYXRhbmgoeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyB0YW5nZW50IChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCiBGVU5DMShjZWlsLCBjZWlsLCAwLAogICAgICAgImNlaWwoeClcblxuUmV0dXJuIHRoZSBjZWlsaW5nIG9mIHggYXMgYSBmbG9hdC5cbiIKQEAgLTM0MywxNCArODMwLDI2IEBACiAgICAgICAiY29zKHgpXG5cblJldHVybiB0aGUgY29zaW5lIG9mIHggKG1lYXN1cmVkIGluIHJhZGlhbnMpLiIpCiBGVU5DMShjb3NoLCBjb3NoLCAxLAogICAgICAgImNvc2goeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4LiIpCitGVU5DMUEoZXJmLCBtX2VyZiwKKyAgICAgICAiZXJmKHgpXG5cbkVycm9yIGZ1bmN0aW9uIGF0IHguIikKK0ZVTkMxQShlcmZjLCBtX2VyZmMsCisgICAgICAgImVyZmMoeClcblxuQ29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBhdCB4LiIpCiBGVU5DMShleHAsIGV4cCwgMSwKICAgICAgICJleHAoeClcblxuUmV0dXJuIGUgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiB4LiIpCitGVU5DMShleHBtMSwgbV9leHBtMSwgMSwKKyAgICAgICJleHBtMSh4KVxuXG5SZXR1cm4gZXhwKHgpLTEuXG4iCisgICAgICAiVGhpcyBmdW5jdGlvbiBhdm9pZHMgdGhlIGxvc3Mgb2YgcHJlY2lzaW9uIGludm9sdmVkIGluIHRoZSBkaXJlY3QgIgorICAgICAgImV2YWx1YXRpb24gb2YgZXhwKHgpLTEgZm9yIHNtYWxsIHguIikKIEZVTkMxKGZhYnMsIGZhYnMsIDAsCiAgICAgICAiZmFicyh4KVxuXG5SZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBmbG9hdCB4LiIpCiBGVU5DMShmbG9vciwgZmxvb3IsIDAsCiAgICAgICAiZmxvb3IoeClcblxuUmV0dXJuIHRoZSBmbG9vciBvZiB4IGFzIGEgZmxvYXQuXG4iCiAgICAgICAiVGhpcyBpcyB0aGUgbGFyZ2VzdCBpbnRlZ3JhbCB2YWx1ZSA8PSB4LiIpCi1GVU5DMShsb2cxcCwgbG9nMXAsIDEsCitGVU5DMUEoZ2FtbWEsIG1fdGdhbW1hLAorICAgICAgImdhbW1hKHgpXG5cbkdhbW1hIGZ1bmN0aW9uIGF0IHguIikKK0ZVTkMxQShsZ2FtbWEsIG1fbGdhbW1hLAorICAgICAgImxnYW1tYSh4KVxuXG5OYXR1cmFsIGxvZ2FyaXRobSBvZiBhYnNvbHV0ZSB2YWx1ZSBvZiBHYW1tYSBmdW5jdGlvbiBhdCB4LiIpCitGVU5DMShsb2cxcCwgbV9sb2cxcCwgMSwKICAgICAgICJsb2cxcCh4KVxuXG5SZXR1cm4gdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEreCAoYmFzZSBlKS5cbiIKICAgICAgICJUaGUgcmVzdWx0IGlzIGNvbXB1dGVkIGluIGEgd2F5IHdoaWNoIGlzIGFjY3VyYXRlIGZvciB4IG5lYXIgemVyby4iKQogRlVOQzEoc2luLCBzaW4sIDAsCkBAIC01OTIsMTUgKzEwOTEsMjIgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqaW9iaiwgKm5ld3Jlc3VsdDsKIAogICAgIGlmIChQeUZsb2F0X0NoZWNrKGFyZykpIHsKKyAgICAgICAgUHlPYmplY3QgKmx4OwogICAgICAgICBkb3VibGUgZHggPSBQeUZsb2F0X0FTX0RPVUJMRSgoUHlGbG9hdE9iamVjdCAqKWFyZyk7Ci0gICAgICAgIGlmIChkeCAhPSBmbG9vcihkeCkpIHsKKyAgICAgICAgaWYgKCEoUHlfSVNfRklOSVRFKGR4KSAmJiBkeCA9PSBmbG9vcihkeCkpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAiZmFjdG9yaWFsKCkgb25seSBhY2NlcHRzIGludGVncmFsIHZhbHVlcyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgbHggPSBQeUxvbmdfRnJvbURvdWJsZShkeCk7CisgICAgICAgIGlmIChseCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHggPSBQeUxvbmdfQXNMb25nKGx4KTsKKyAgICAgICAgUHlfREVDUkVGKGx4KTsKICAgICB9CisgICAgZWxzZQorICAgICAgICB4ID0gUHlJbnRfQXNMb25nKGFyZyk7CiAKLSAgICB4ID0gUHlJbnRfQXNMb25nKGFyZyk7CiAgICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHggPCAwKSB7CkBAIC02NzksMzEgKzExODUsMTggQEAKICAgICBkb3VibGUgeCwgcjsKICAgICBQeU9iamVjdCAqb2V4cDsKICAgICBsb25nIGV4cDsKKyAgICBpbnQgb3ZlcmZsb3c7CiAgICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZE86bGRleHAiLCAmeCwgJm9leHApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeUxvbmdfQ2hlY2sob2V4cCkpIHsKKyAgICBpZiAoUHlMb25nX0NoZWNrKG9leHApIHx8IFB5SW50X0NoZWNrKG9leHApKSB7CiAgICAgICAgIC8qIG9uIG92ZXJmbG93LCByZXBsYWNlIGV4cG9uZW50IHdpdGggZWl0aGVyIExPTkdfTUFYCiAgICAgICAgICAgIG9yIExPTkdfTUlOLCBkZXBlbmRpbmcgb24gdGhlIHNpZ24uICovCi0gICAgICAgIGV4cCA9IFB5TG9uZ19Bc0xvbmcob2V4cCk7Ci0gICAgICAgIGlmIChleHAgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlfU0laRShvZXhwKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwID0gTE9OR19NSU47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBleHAgPSBMT05HX01BWDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIHByb3BhZ2F0ZSBhbnkgdW5leHBlY3RlZCBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChQeUludF9DaGVjayhvZXhwKSkgewotICAgICAgICBleHAgPSBQeUludF9BU19MT05HKG9leHApOworICAgICAgICBleHAgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2V4cCwgJm92ZXJmbG93KTsKKyAgICAgICAgaWYgKGV4cCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChvdmVyZmxvdykKKyAgICAgICAgICAgIGV4cCA9IG92ZXJmbG93IDwgMCA/IExPTkdfTUlOIDogTE9OR19NQVg7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtNzcyLDExICsxMjY1LDEyIEBACiAKIC8qIEEgZGVjZW50IGxvZ2FyaXRobSBpcyBlYXN5IHRvIGNvbXB1dGUgZXZlbiBmb3IgaHVnZSBsb25ncywgYnV0IGxpYm0gY2FuJ3QKICAgIGRvIHRoYXQgYnkgaXRzZWxmIC0tIGxvZ2hlbHBlciBjYW4uICBmdW5jIGlzIGxvZyBvciBsb2cxMCwgYW5kIG5hbWUgaXMKLSAgICJsb2ciIG9yICJsb2cxMCIuICBOb3RlIHRoYXQgb3ZlcmZsb3cgaXNuJ3QgcG9zc2libGU6ICBhIGxvbmcgY2FuIGNvbnRhaW4KLSAgIG5vIG1vcmUgdGhhbiBJTlRfTUFYICogU0hJRlQgYml0cywgc28gaGFzIHZhbHVlIGNlcnRhaW5seSBsZXNzIHRoYW4KLSAgIDIqKigyKio2NCAqIDIqKjE2KSA9PSAyKioyKio4MCwgYW5kIGxvZzIgb2YgdGhhdCBpcyAyKio4MCwgd2hpY2ggaXMKKyAgICJsb2ciIG9yICJsb2cxMCIuICBOb3RlIHRoYXQgb3ZlcmZsb3cgb2YgdGhlIHJlc3VsdCBpc24ndCBwb3NzaWJsZTogYSBsb25nCisgICBjYW4gY29udGFpbiBubyBtb3JlIHRoYW4gSU5UX01BWCAqIFNISUZUIGJpdHMsIHNvIGhhcyB2YWx1ZSBjZXJ0YWlubHkgbGVzcworICAgdGhhbiAyKiooMioqNjQgKiAyKioxNikgPT0gMioqMioqODAsIGFuZCBsb2cyIG9mIHRoYXQgaXMgMioqODAsIHdoaWNoIGlzCiAgICBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGFuIElFRUUgc2luZ2xlLiAgbG9nIGFuZCBsb2cxMCBhcmUgZXZlbiBzbWFsbGVyLgotKi8KKyAgIEhvd2V2ZXIsIGludGVybWVkaWF0ZSBvdmVyZmxvdyBpcyBwb3NzaWJsZSBmb3IgYSBsb25nIGlmIHRoZSBudW1iZXIgb2YgYml0cworICAgaW4gdGhhdCBsb25nIGlzIGxhcmdlciB0aGFuIFBZX1NTSVpFX1RfTUFYLiAqLwogCiBzdGF0aWMgUHlPYmplY3QqCiBsb2doZWxwZXIoUHlPYmplY3QqIGFyZywgZG91YmxlICgqZnVuYykoZG91YmxlKSwgY2hhciAqZnVuY25hbWUpCkBAIC03ODQsMTggKzEyNzgsMjEgQEAKICAgICAvKiBJZiBpdCBpcyBsb25nLCBkbyBpdCBvdXJzZWx2ZXMuICovCiAgICAgaWYgKFB5TG9uZ19DaGVjayhhcmcpKSB7CiAgICAgICAgIGRvdWJsZSB4OwotICAgICAgICBpbnQgZTsKLSAgICAgICAgeCA9IF9QeUxvbmdfQXNTY2FsZWREb3VibGUoYXJnLCAmZSk7CisgICAgICAgIFB5X3NzaXplX3QgZTsKKyAgICAgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKWFyZywgJmUpOworICAgICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKHggPD0gMC4wKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF0aCBkb21haW4gZXJyb3IiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIC8qIFZhbHVlIGlzIH49IHggKiAyKiooZSpQeUxvbmdfU0hJRlQpLCBzbyB0aGUgbG9nIH49Ci0gICAgICAgICAgIGxvZyh4KSArIGxvZygyKSAqIGUgKiBQeUxvbmdfU0hJRlQuCi0gICAgICAgICAgIENBVVRJT046ICBlKlB5TG9uZ19TSElGVCBtYXkgb3ZlcmZsb3cgdXNpbmcgaW50IGFyaXRobWV0aWMsCi0gICAgICAgICAgIHNvIGZvcmNlIHVzZSBvZiBkb3VibGUuICovCi0gICAgICAgIHggPSBmdW5jKHgpICsgKGUgKiAoZG91YmxlKVB5TG9uZ19TSElGVCkgKiBmdW5jKDIuMCk7CisgICAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbG9nKDEpLCB0byBtYWtlIHN1cmUgd2UgZ2V0IGFuCisgICAgICAgICAgIGV4YWN0IHJlc3VsdCB0aGVyZS4gKi8KKyAgICAgICAgaWYgKGUgPT0gMSAmJiB4ID09IDAuNSkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKTsKKyAgICAgICAgLyogVmFsdWUgaXMgfj0geCAqIDIqKmUsIHNvIHRoZSBsb2cgfj0gbG9nKHgpICsgbG9nKDIpICogZS4gKi8KKyAgICAgICAgeCA9IGZ1bmMoeCkgKyBmdW5jKDIuMCkgKiBlOwogICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOwogICAgIH0KIApAQCAtMTA3NCwxNyArMTU3MSwyMiBAQAogICAgIHsiY29zIiwgICAgICAgICAgICAgbWF0aF9jb3MsICAgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2Nvc19kb2N9LAogICAgIHsiY29zaCIsICAgICAgICAgICAgbWF0aF9jb3NoLCAgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2Nvc2hfZG9jfSwKICAgICB7ImRlZ3JlZXMiLCAgICAgICAgIG1hdGhfZGVncmVlcywgICBNRVRIX08sICAgICAgICAgbWF0aF9kZWdyZWVzX2RvY30sCisgICAgeyJlcmYiLCAgICAgICAgICAgICBtYXRoX2VyZiwgICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXJmX2RvY30sCisgICAgeyJlcmZjIiwgICAgICAgICAgICBtYXRoX2VyZmMsICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXJmY19kb2N9LAogICAgIHsiZXhwIiwgICAgICAgICAgICAgbWF0aF9leHAsICAgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2V4cF9kb2N9LAorICAgIHsiZXhwbTEiLCAgICAgICAgICAgbWF0aF9leHBtMSwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2V4cG0xX2RvY30sCiAgICAgeyJmYWJzIiwgICAgICAgICAgICBtYXRoX2ZhYnMsICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZmFic19kb2N9LAogICAgIHsiZmFjdG9yaWFsIiwgICAgICAgbWF0aF9mYWN0b3JpYWwsIE1FVEhfTywgICAgICAgICBtYXRoX2ZhY3RvcmlhbF9kb2N9LAogICAgIHsiZmxvb3IiLCAgICAgICAgICAgbWF0aF9mbG9vciwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2Zsb29yX2RvY30sCiAgICAgeyJmbW9kIiwgICAgICAgICAgICBtYXRoX2Ztb2QsICAgICAgTUVUSF9WQVJBUkdTLCAgIG1hdGhfZm1vZF9kb2N9LAogICAgIHsiZnJleHAiLCAgICAgICAgICAgbWF0aF9mcmV4cCwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2ZyZXhwX2RvY30sCiAgICAgeyJmc3VtIiwgICAgICAgICAgICBtYXRoX2ZzdW0sICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZnN1bV9kb2N9LAorICAgIHsiZ2FtbWEiLCAgICAgICAgICAgbWF0aF9nYW1tYSwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2dhbW1hX2RvY30sCiAgICAgeyJoeXBvdCIsICAgICAgICAgICBtYXRoX2h5cG90LCAgICAgTUVUSF9WQVJBUkdTLCAgIG1hdGhfaHlwb3RfZG9jfSwKICAgICB7ImlzaW5mIiwgICAgICAgICAgIG1hdGhfaXNpbmYsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9pc2luZl9kb2N9LAogICAgIHsiaXNuYW4iLCAgICAgICAgICAgbWF0aF9pc25hbiwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2lzbmFuX2RvY30sCiAgICAgeyJsZGV4cCIsICAgICAgICAgICBtYXRoX2xkZXhwLCAgICAgTUVUSF9WQVJBUkdTLCAgIG1hdGhfbGRleHBfZG9jfSwKKyAgICB7ImxnYW1tYSIsICAgICAgICAgIG1hdGhfbGdhbW1hLCAgICBNRVRIX08sICAgICAgICAgbWF0aF9sZ2FtbWFfZG9jfSwKICAgICB7ImxvZyIsICAgICAgICAgICAgIG1hdGhfbG9nLCAgICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9sb2dfZG9jfSwKICAgICB7ImxvZzFwIiwgICAgICAgICAgIG1hdGhfbG9nMXAsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9sb2cxcF9kb2N9LAogICAgIHsibG9nMTAiLCAgICAgICAgICAgbWF0aF9sb2cxMCwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2xvZzEwX2RvY30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21kNS5jIGIvTW9kdWxlcy9tZDUuYwppbmRleCA5ODJmZDdmLi44ZmRjNjAwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21kNS5jCisrKyBiL01vZHVsZXMvbWQ1LmMKQEAgLTMyMSwxMSArMzIxLDExIEBACiB9CiAKIHZvaWQKLW1kNV9hcHBlbmQobWQ1X3N0YXRlX3QgKnBtcywgY29uc3QgbWQ1X2J5dGVfdCAqZGF0YSwgaW50IG5ieXRlcykKK21kNV9hcHBlbmQobWQ1X3N0YXRlX3QgKnBtcywgY29uc3QgbWQ1X2J5dGVfdCAqZGF0YSwgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKICAgICBjb25zdCBtZDVfYnl0ZV90ICpwID0gZGF0YTsKLSAgICBpbnQgbGVmdCA9IG5ieXRlczsKLSAgICBpbnQgb2Zmc2V0ID0gKHBtcy0+Y291bnRbMF0gPj4gMykgJiA2MzsKKyAgICB1bnNpZ25lZCBpbnQgbGVmdCA9IG5ieXRlczsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gKHBtcy0+Y291bnRbMF0gPj4gMykgJiA2MzsKICAgICBtZDVfd29yZF90IG5iaXRzID0gKG1kNV93b3JkX3QpKG5ieXRlcyA8PCAzKTsKIAogICAgIGlmIChuYnl0ZXMgPD0gMCkKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAgICAgLyogdGhpcyBzcGVjaWFsIGNhc2UgaXMgaGFuZGxlZCByZWN1cnNpdmVseSAqLwogICAgIGlmIChuYnl0ZXMgPiBJTlRfTUFYIC0gb2Zmc2V0KSB7Ci0gICAgICAgIGludCBvdmVybGFwOworICAgICAgICB1bnNpZ25lZCBpbnQgb3ZlcmxhcDsKIAogICAgICAgICAvKiBoYW5kbGUgdGhlIGFwcGVuZCBpbiB0d28gc3RlcHMgdG8gcHJldmVudCBvdmVyZmxvdyAqLwogICAgICAgICBvdmVybGFwID0gNjQgLSBvZmZzZXQ7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAogICAgIC8qIFByb2Nlc3MgYW4gaW5pdGlhbCBwYXJ0aWFsIGJsb2NrLiAqLwogICAgIGlmIChvZmZzZXQpIHsKLSAgICAgICAgaW50IGNvcHkgPSAob2Zmc2V0ICsgbmJ5dGVzID4gNjQgPyA2NCAtIG9mZnNldCA6IG5ieXRlcyk7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3B5ID0gKG9mZnNldCArIG5ieXRlcyA+IDY0ID8gNjQgLSBvZmZzZXQgOiBuYnl0ZXMpOwogCiAgICAgICAgIG1lbWNweShwbXMtPmJ1ZiArIG9mZnNldCwgcCwgY29weSk7CiAgICAgICAgIGlmIChvZmZzZXQgKyBjb3B5IDwgNjQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21kNS5oIGIvTW9kdWxlcy9tZDUuaAppbmRleCA1ZWI2ZDZjLi4wYWIwZTY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21kNS5oCisrKyBiL01vZHVsZXMvbWQ1LmgKQEAgLTc5LDcgKzc5LDcgQEAKIHZvaWQgbWQ1X2luaXQobWQ1X3N0YXRlX3QgKnBtcyk7CiAKIC8qIEFwcGVuZCBhIHN0cmluZyB0byB0aGUgbWVzc2FnZS4gKi8KLXZvaWQgbWQ1X2FwcGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRhLCBpbnQgbmJ5dGVzKTsKK3ZvaWQgbWQ1X2FwcGVuZChtZDVfc3RhdGVfdCAqcG1zLCBjb25zdCBtZDVfYnl0ZV90ICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKIAogLyogRmluaXNoIHRoZSBtZXNzYWdlIGFuZCByZXR1cm4gdGhlIGRpZ2VzdC4gKi8KIHZvaWQgbWQ1X2ZpbmlzaChtZDVfc3RhdGVfdCAqcG1zLCBtZDVfYnl0ZV90IGRpZ2VzdFsxNl0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tZDVtb2R1bGUuYyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKaW5kZXggY2U5NGZiNS4uMDY4M2VmNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tZDVtb2R1bGUuYworKysgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCkBAIC01MCwxNiArNTAsMTYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtZDVfdXBkYXRlKG1kNW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgdmlldzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6dXBkYXRlIiwgJmNwLCAmbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOnVwZGF0ZSIsICZ2aWV3KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZDVfYXBwZW5kKCZzZWxmLT5tZDUsIGNwLCBsZW4pOworICAgIG1kNV9hcHBlbmQoJnNlbGYtPm1kNSwgKHVuc2lnbmVkIGNoYXIqKXZpZXcuYnVmLAorICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVCh2aWV3LmxlbiwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KSk7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIFB5RG9jX1NUUlZBUih1cGRhdGVfZG9jLApAQCAtMjYxLDE3ICsyNjEsMjEgQEAKIE1ENV9uZXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIG1kNW9iamVjdCAqbWQ1cDsKLSAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7Ci0gICAgaW50IGxlbiA9IDA7CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHMjOm5ldyIsICZjcCwgJmxlbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8cyo6bmV3IiwgJnZpZXcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgobWQ1cCA9IG5ld21kNW9iamVjdCgpKSA9PSBOVUxMKQorICAgIGlmICgobWQ1cCA9IG5ld21kNW9iamVjdCgpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAoY3ApCi0gICAgICAgIG1kNV9hcHBlbmQoJm1kNXAtPm1kNSwgY3AsIGxlbik7CisgICAgaWYgKHZpZXcubGVuID4gMCkgeworICAgICAgICBtZDVfYXBwZW5kKCZtZDVwLT5tZDUsICh1bnNpZ25lZCBjaGFyKil2aWV3LmJ1ZiwKKyAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1Qodmlldy5sZW4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGludCkpOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKiltZDVwOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCAyNGY3ODUxLi4yMTlkZGQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtOTAsNyArOTAsMTEgQEAKICAgICBjaGFyICogICAgICBkYXRhOwogICAgIHNpemVfdCAgICAgIHNpemU7CiAgICAgc2l6ZV90ICAgICAgcG9zOyAgICAvKiByZWxhdGl2ZSB0byBvZmZzZXQgKi8KLSAgICBzaXplX3QgICAgICBvZmZzZXQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFBZX0xPTkdfTE9ORyBvZmZzZXQ7CisjZWxzZQorICAgIG9mZl90ICAgICAgIG9mZnNldDsKKyNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIEhBTkRMRSAgICAgIG1hcF9oYW5kbGU7CkBAIC0xMjQsNyArMTI4LDggQEAKICAgICBpZiAobV9vYmotPmZkID49IDApCiAgICAgICAgICh2b2lkKSBjbG9zZShtX29iai0+ZmQpOwogICAgIGlmIChtX29iai0+ZGF0YSE9TlVMTCkgewotICAgICAgICBtc3luYyhtX29iai0+ZGF0YSwgbV9vYmotPnNpemUsIE1TX1NZTkMpOworICAgICAgICBpZiAobV9vYmotPmFjY2VzcyAhPSBBQ0NFU1NfUkVBRCAmJiBtX29iai0+YWNjZXNzICE9IEFDQ0VTU19DT1BZKQorICAgICAgICAgICAgbXN5bmMobV9vYmotPmRhdGEsIG1fb2JqLT5zaXplLCBNU19TWU5DKTsKICAgICAgICAgbXVubWFwKG1fb2JqLT5kYXRhLCBtX29iai0+c2l6ZSk7CiAgICAgfQogI2VuZGlmIC8qIFVOSVggKi8KQEAgLTQyMyw3ICs0MjgsMTEgQEAKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhtbWFwX21vZHVsZV9lcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QoYnVmLnN0X3NpemUpOworI2lmZGVmIEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoYnVmLnN0X3NpemUpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKGJ1Zi5zdF9zaXplKTsKKyNlbmRpZgogICAgIH0KICNlbmRpZiAvKiBVTklYICovCiB9CkBAIC00NTcsMTcgKzQ2NiwxMCBAQAogICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5tYXBfaGFuZGxlKTsKICAgICAgICAgc2VsZi0+bWFwX2hhbmRsZSA9IE5VTEw7CiAgICAgICAgIC8qIE1vdmUgdG8gdGhlIGRlc2lyZWQgRU9GIHBvc2l0aW9uICovCi0jaWYgU0laRU9GX1NJWkVfVCA+IDQKICAgICAgICAgbmV3U2l6ZUhpZ2ggPSAoRFdPUkQpKChzZWxmLT5vZmZzZXQgKyBuZXdfc2l6ZSkgPj4gMzIpOwogICAgICAgICBuZXdTaXplTG93ID0gKERXT1JEKSgoc2VsZi0+b2Zmc2V0ICsgbmV3X3NpemUpICYgMHhGRkZGRkZGRik7CiAgICAgICAgIG9mZl9oaSA9IChEV09SRCkoc2VsZi0+b2Zmc2V0ID4+IDMyKTsKICAgICAgICAgb2ZmX2xvID0gKERXT1JEKShzZWxmLT5vZmZzZXQgJiAweEZGRkZGRkZGKTsKLSNlbHNlCi0gICAgICAgIG5ld1NpemVIaWdoID0gMDsKLSAgICAgICAgbmV3U2l6ZUxvdyA9IChEV09SRCkoc2VsZi0+b2Zmc2V0ICsgbmV3X3NpemUpOwotICAgICAgICBvZmZfaGkgPSAwOwotICAgICAgICBvZmZfbG8gPSAoRFdPUkQpc2VsZi0+b2Zmc2V0OwotI2VuZGlmCiAgICAgICAgIFNldEZpbGVQb2ludGVyKHNlbGYtPmZpbGVfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICBuZXdTaXplTG93LCAmbmV3U2l6ZUhpZ2gsIEZJTEVfQkVHSU4pOwogICAgICAgICAvKiBDaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZpbGUgKi8KQEAgLTU1OSw2ICs1NjEsMTAgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJmbHVzaCB2YWx1ZXMgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIGlmIChzZWxmLT5hY2Nlc3MgPT0gQUNDRVNTX1JFQUQgfHwgc2VsZi0+YWNjZXNzID09IEFDQ0VTU19DT1BZKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOworCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgRmx1c2hWaWV3T2ZGaWxlKHNlbGYtPmRhdGErb2Zmc2V0LCBzaXplKSk7CiAjZWxpZiBkZWZpbmVkKFVOSVgpCkBAIC02MjAsMjMgKzYyNiwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1tYXBfbW92ZV9tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHVuc2lnbmVkIGxvbmcgZGVzdCwgc3JjLCBjb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGRlc3QsIHNyYywgY250OwogICAgIENIRUNLX1ZBTElEKE5VTEwpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2trOm1vdmUiLCAmZGVzdCwgJnNyYywgJmNvdW50KSB8fAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2trOm1vdmUiLCAmZGVzdCwgJnNyYywgJmNudCkgfHwKICAgICAgICAgIWlzX3dyaXRlYWJsZShzZWxmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBib3VuZHMgY2hlY2sgdGhlIHZhbHVlcyAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHBvcyA9IHNyYyA+IGRlc3QgPyBzcmMgOiBkZXN0OwotICAgICAgICBpZiAoc2VsZi0+c2l6ZSA8IHBvcyB8fCBjb3VudCA+IHNlbGYtPnNpemUgLSBwb3MpIHsKKyAgICAgICAgaWYgKGNudCA8IDAgfHwgKGNudCArIGRlc3QpIDwgY250IHx8IChjbnQgKyBzcmMpIDwgY250IHx8CisgICAgICAgICAgIHNyYyA8IDAgfHwgc3JjID4gc2VsZi0+c2l6ZSB8fCAoc3JjICsgY250KSA+IHNlbGYtPnNpemUgfHwKKyAgICAgICAgICAgZGVzdCA8IDAgfHwgZGVzdCA+IHNlbGYtPnNpemUgfHwgKGRlc3QgKyBjbnQpID4gc2VsZi0+c2l6ZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBvciBkZXN0aW5hdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICAic291cmNlLCBkZXN0aW5hdGlvbiwgb3IgY291bnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+ZGF0YStkZXN0LCBzZWxmLT5kYXRhK3NyYywgY291bnQpOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgICAgIH0KKyAgICAgICAgbWVtbW92ZShzZWxmLT5kYXRhK2Rlc3QsIHNlbGYtPmRhdGErc3JjLCBjbnQpOworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KIH0KIApAQCAtMTA5NCw2ICsxMTAwLDEyIEBACiB9CiAKICNpZmRlZiBVTklYCisjaWZkZWYgSEFWRV9MQVJHRUZJTEVfU1VQUE9SVAorI2RlZmluZSBfUHlfUEFSU0VfT0ZGX1QgIkwiCisjZWxzZQorI2RlZmluZSBfUHlfUEFSU0VfT0ZGX1QgImwiCisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0ICoKIG5ld19tbWFwX29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQogewpAQCAtMTEwMSw4ICsxMTEzLDkgQEAKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICNlbmRpZgogICAgIG1tYXBfb2JqZWN0ICptX29iajsKLSAgICBQeU9iamVjdCAqbWFwX3NpemVfb2JqID0gTlVMTCwgKm9mZnNldF9vYmogPSBOVUxMOwotICAgIFB5X3NzaXplX3QgbWFwX3NpemUsIG9mZnNldDsKKyAgICBQeU9iamVjdCAqbWFwX3NpemVfb2JqID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG1hcF9zaXplOworICAgIG9mZl90IG9mZnNldCA9IDA7CiAgICAgaW50IGZkLCBmbGFncyA9IE1BUF9TSEFSRUQsIHByb3QgPSBQUk9UX1dSSVRFIHwgUFJPVF9SRUFEOwogICAgIGludCBkZXZ6ZXJvID0gLTE7CiAgICAgaW50IGFjY2VzcyA9IChpbnQpQUNDRVNTX0RFRkFVTFQ7CkBAIC0xMTEwLDE2ICsxMTIzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsYWdzIiwgInByb3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3MiLCAib2Zmc2V0IiwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJpT3xpaWlPIiwga2V5d29yZHMsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaU98aWlpIiBfUHlfUEFSU0VfT0ZGX1QsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZCwgJm1hcF9zaXplX29iaiwgJmZsYWdzLCAmcHJvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWNjZXNzLCAmb2Zmc2V0X29iaikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFjY2VzcywgJm9mZnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG1hcF9zaXplID0gX0dldE1hcFNpemUobWFwX3NpemVfb2JqLCAic2l6ZSIpOwogICAgIGlmIChtYXBfc2l6ZSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG9mZnNldCA9IF9HZXRNYXBTaXplKG9mZnNldF9vYmosICJvZmZzZXQiKTsKLSAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICJtZW1vcnkgbWFwcGVkIG9mZnNldCBtdXN0IGJlIHBvc2l0aXZlIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmICgoYWNjZXNzICE9IChpbnQpQUNDRVNTX0RFRkFVTFQpICYmCiAgICAgICAgICgoZmxhZ3MgIT0gTUFQX1NIQVJFRCkgfHwgKHByb3QgIT0gKFBST1RfV1JJVEUgfCBQUk9UX1JFQUQpKSkpCkBAIC0xMTU5LDggKzExNzQsMTkgQEAKICMgIGVuZGlmCiAgICAgaWYgKGZkICE9IC0xICYmIGZzdGF0KGZkLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgewogICAgICAgICBpZiAobWFwX3NpemUgPT0gMCkgewotICAgICAgICAgICAgbWFwX3NpemUgPSBzdC5zdF9zaXplOwotICAgICAgICB9IGVsc2UgaWYgKChzaXplX3Qpb2Zmc2V0ICsgKHNpemVfdCltYXBfc2l6ZSA+IHN0LnN0X3NpemUpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gc3Quc3Rfc2l6ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW1hcCBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIGZpbGUgc2l6ZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2ZmX3QgY2FsY19zaXplID0gc3Quc3Rfc2l6ZSAtIG9mZnNldDsKKyAgICAgICAgICAgIG1hcF9zaXplID0gY2FsY19zaXplOworICAgICAgICAgICAgaWYgKG1hcF9zaXplICE9IGNhbGNfc2l6ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tYXAgbGVuZ3RoIGlzIHRvbyBsYXJnZSIpOworICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ICsgKHNpemVfdCltYXBfc2l6ZSA+IHN0LnN0X3NpemUpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbWFwIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZmlsZSBzaXplIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyMjAsMTIgKzEyNDYsMTkgQEAKICNlbmRpZiAvKiBVTklYICovCiAKICNpZmRlZiBNU19XSU5ET1dTCisKKy8qIEEgbm90ZSBvbiBzaXplcyBhbmQgb2Zmc2V0czogd2hpbGUgdGhlIGFjdHVhbCBtYXAgc2l6ZSBtdXN0IGhvbGQgaW4gYQorICAgUHlfc3NpemVfdCwgYm90aCB0aGUgdG90YWwgZmlsZSBzaXplIGFuZCB0aGUgc3RhcnQgb2Zmc2V0IGNhbiBiZSBsb25nZXIKKyAgIHRoYW4gYSBQeV9zc2l6ZV90LCBzbyB3ZSB1c2UgUFlfTE9OR19MT05HIHdoaWNoIGlzIGFsd2F5cyA2NC1iaXQuCisqLworCiBzdGF0aWMgUHlPYmplY3QgKgogbmV3X21tYXBfb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCiB7CiAgICAgbW1hcF9vYmplY3QgKm1fb2JqOwotICAgIFB5T2JqZWN0ICptYXBfc2l6ZV9vYmogPSBOVUxMLCAqb2Zmc2V0X29iaiA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBtYXBfc2l6ZSwgb2Zmc2V0OworICAgIFB5T2JqZWN0ICptYXBfc2l6ZV9vYmogPSBOVUxMOworICAgIFB5X3NzaXplX3QgbWFwX3NpemU7CisgICAgUFlfTE9OR19MT05HIG9mZnNldCA9IDAsIHNpemU7CiAgICAgRFdPUkQgb2ZmX2hpOyAgICAgICAvKiB1cHBlciAzMiBiaXRzIG9mIG9mZnNldCAqLwogICAgIERXT1JEIG9mZl9sbzsgICAgICAgLyogbG93ZXIgMzIgYml0cyBvZiBvZmZzZXQgKi8KICAgICBEV09SRCBzaXplX2hpOyAgICAgIC8qIHVwcGVyIDMyIGJpdHMgb2Ygc2l6ZSAqLwpAQCAtMTI0MCw5ICsxMjczLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhZ25hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXNzIiwgIm9mZnNldCIsIE5VTEwgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlPfHppTyIsIGtleXdvcmRzLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlPfHppTCIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbm8sICZtYXBfc2l6ZV9vYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZ25hbWUsICZhY2Nlc3MsICZvZmZzZXRfb2JqKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWduYW1lLCAmYWNjZXNzLCAmb2Zmc2V0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEyNjcsOSArMTMwMCwxMSBAQAogICAgIG1hcF9zaXplID0gX0dldE1hcFNpemUobWFwX3NpemVfb2JqLCAic2l6ZSIpOwogICAgIGlmIChtYXBfc2l6ZSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG9mZnNldCA9IF9HZXRNYXBTaXplKG9mZnNldF9vYmosICJvZmZzZXQiKTsKLSAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICJtZW1vcnkgbWFwcGVkIG9mZnNldCBtdXN0IGJlIHBvc2l0aXZlIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIC8qIGFzc3VtZSAtMSBhbmQgMCBib3RoIG1lYW4gaW52YWxpZCBmaWxlZGVzY3JpcHRvcgogICAgICAgIHRvICdhbm9ueW1vdXNseScgbWFwIG1lbW9yeS4KQEAgLTEyODAsNiArMTMxNSwxMSBAQAogICAgICAgICAgICAgICAgICAgICJkb24ndCB1c2UgMCBmb3IgYW5vbnltb3VzIG1lbW9yeSIpOwogICAgICAqLwogICAgIGlmIChmaWxlbm8gIT0gLTEgJiYgZmlsZW5vICE9IDApIHsKKyAgICAgICAgLyogRW5zdXJlIHRoYXQgZmlsZW5vIGlzIHdpdGhpbiB0aGUgQ1JUJ3MgdmFsaWQgcmFuZ2UgKi8KKyAgICAgICAgaWYgKF9QeVZlcmlmeV9mZChmaWxlbm8pID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhtbWFwX21vZHVsZV9lcnJvcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBmaCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmlsZW5vKTsKICAgICAgICAgaWYgKGZoPT0oSEFORExFKS0xKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8obW1hcF9tb2R1bGVfZXJyb3IpOwpAQCAtMTMyNywyMSArMTM2NywyNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0Vycihkd0Vycik7CiAgICAgICAgICAgICB9CiAKLSNpZiBTSVpFT0ZfU0laRV9UID4gNAotICAgICAgICAgICAgbV9vYmotPnNpemUgPSAoKChzaXplX3QpaGlnaCk8PDMyKSArIGxvdzsKLSNlbHNlCi0gICAgICAgICAgICBpZiAoaGlnaCkKLSAgICAgICAgICAgICAgICAvKiBGaWxlIGlzIHRvbyBsYXJnZSB0byBtYXAgY29tcGxldGVseSAqLwotICAgICAgICAgICAgICAgIG1fb2JqLT5zaXplID0gKHNpemVfdCktMTsKKyAgICAgICAgICAgIHNpemUgPSAoKChQWV9MT05HX0xPTkcpIGhpZ2gpIDw8IDMyKSArIGxvdzsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gc2l6ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW1hcCBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIGZpbGUgc2l6ZSIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2Zmc2V0IC0gc2l6ZSA+IFBZX1NTSVpFX1RfTUFYKQorICAgICAgICAgICAgICAgIC8qIE1hcCBhcmVhIHRvbyBsYXJnZSB0byBmaXQgaW4gbWVtb3J5ICovCisgICAgICAgICAgICAgICAgbV9vYmotPnNpemUgPSAoUHlfc3NpemVfdCkgLTE7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9vYmotPnNpemUgPSBsb3c7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBtX29iai0+c2l6ZSA9IChQeV9zc2l6ZV90KSAoc2l6ZSAtIG9mZnNldCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX29iai0+c2l6ZSA9IG1hcF9zaXplOworICAgICAgICAgICAgc2l6ZSA9IG9mZnNldCArIG1hcF9zaXplOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBtX29iai0+c2l6ZSA9IG1hcF9zaXplOworICAgICAgICBzaXplID0gb2Zmc2V0ICsgbWFwX3NpemU7CiAgICAgfQogCiAgICAgLyogc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uICovCkBAIC0xMzYxLDIyICsxNDA2LDEwIEBACiAgICAgICAgIG1fb2JqLT50YWduYW1lID0gTlVMTDsKIAogICAgIG1fb2JqLT5hY2Nlc3MgPSAoYWNjZXNzX21vZGUpYWNjZXNzOwotICAgIC8qIERXT1JEIGlzIGEgNC1ieXRlIGludC4gIElmIHdlJ3JlIG9uIGEgYm94IHdoZXJlIHNpemVfdCBjb25zdW1lcwotICAgICAqIG1vcmUgdGhhbiA0IGJ5dGVzLCB3ZSBuZWVkIHRvIGJyZWFrIGl0IGFwYXJ0LiAgRWxzZSAoc2l6ZV90Ci0gICAgICogY29uc3VtZXMgNCBieXRlcyksIEMgZG9lc24ndCBkZWZpbmUgd2hhdCBoYXBwZW5zIGlmIHdlIHNoaWZ0Ci0gICAgICogcmlnaHQgYnkgMzIsIHNvIHdlIG5lZWQgZGlmZmVyZW50IGNvZGUuCi0gICAgICovCi0jaWYgU0laRU9GX1NJWkVfVCA+IDQKLSAgICBzaXplX2hpID0gKERXT1JEKSgob2Zmc2V0ICsgbV9vYmotPnNpemUpID4+IDMyKTsKLSAgICBzaXplX2xvID0gKERXT1JEKSgob2Zmc2V0ICsgbV9vYmotPnNpemUpICYgMHhGRkZGRkZGRik7CisgICAgc2l6ZV9oaSA9IChEV09SRCkoc2l6ZSA+PiAzMik7CisgICAgc2l6ZV9sbyA9IChEV09SRCkoc2l6ZSAmIDB4RkZGRkZGRkYpOwogICAgIG9mZl9oaSA9IChEV09SRCkob2Zmc2V0ID4+IDMyKTsKICAgICBvZmZfbG8gPSAoRFdPUkQpKG9mZnNldCAmIDB4RkZGRkZGRkYpOwotI2Vsc2UKLSAgICBzaXplX2hpID0gMDsKLSAgICBzaXplX2xvID0gKERXT1JEKShvZmZzZXQgKyBtX29iai0+c2l6ZSk7Ci0gICAgb2ZmX2hpID0gMDsKLSAgICBvZmZfbG8gPSAoRFdPUkQpb2Zmc2V0OwotI2VuZGlmCiAgICAgLyogRm9yIGZpbGVzLCBpdCB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIHBhc3MgMCBhcyBzaXplLgogICAgICAgIEZvciBhbm9ueW1vdXMgbWFwcywgd2UgaGF2ZSB0byBwYXNzIHRoZSBzaXplIGV4cGxpY2l0bHkuICovCiAgICAgbV9vYmotPm1hcF9oYW5kbGUgPSBDcmVhdGVGaWxlTWFwcGluZyhtX29iai0+ZmlsZV9oYW5kbGUsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL25pc21vZHVsZS5jIGIvTW9kdWxlcy9uaXNtb2R1bGUuYwppbmRleCAwNGQ4NTcwLi42YWNhYjYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL25pc21vZHVsZS5jCisrKyBiL01vZHVsZXMvbmlzbW9kdWxlLmMKQEAgLTEyNCw2ICsxMjQsNyBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoa2V5KTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICAgICAgICAgIGluZGF0YS0+c3RhdGUgPSBQeUV2YWxfU2F2ZVRocmVhZCgpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oaW5kYXRhLT5kaWN0LCBrZXksIHZhbCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29wZXJhdG9yLmMgYi9Nb2R1bGVzL29wZXJhdG9yLmMKaW5kZXggNTkxYjVlYS4uMjc0ZDhhYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vcGVyYXRvci5jCisrKyBiL01vZHVsZXMvb3BlcmF0b3IuYwpAQCAtNjUsNyArNjUsMjYgQEAKICAgaWYoISBQeUFyZ19VbnBhY2tUdXBsZShhLCNPUCwyLDIsJmExLCZhMikpIHJldHVybiBOVUxMOyBcCiAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZShhMSxhMixBKTsgfQogCi1zcGFtaShpc0NhbGxhYmxlICAgICAgICwgUHlDYWxsYWJsZV9DaGVjaykKKy8qIERlcHJlY2F0ZWQgb3BlcmF0b3JzIHRoYXQgbmVlZCB3YXJuaW5ncy4gKi8KK3N0YXRpYyBpbnQKK29wX2lzQ2FsbGFibGUoUHlPYmplY3QgKngpCit7CisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJvcGVyYXRvci5pc0NhbGxhYmxlKCkgaXMgbm90IHN1cHBvcnRlZCBpbiAzLnguICIKKyAgICAgICAgICAgICAgICAgICAgICAgIlVzZSBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJykuIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFB5Q2FsbGFibGVfQ2hlY2soeCk7Cit9CisKK3N0YXRpYyBpbnQKK29wX3NlcXVlbmNlSW5jbHVkZXMoUHlPYmplY3QgKnNlcSwgUHlPYmplY3QqIG9iKQoreworICAgIGlmIChQeUVycl9XYXJuUHkzaygib3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcygpIGlzIG5vdCBzdXBwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAiaW4gMy54LiBVc2Ugb3BlcmF0b3IuY29udGFpbnMoKS4iLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gUHlTZXF1ZW5jZV9Db250YWlucyhzZXEsIG9iKTsKK30KKworc3BhbWkoaXNDYWxsYWJsZSAgICAgICAsIG9wX2lzQ2FsbGFibGUpCiBzcGFtaShpc051bWJlclR5cGUgICAgICwgUHlOdW1iZXJfQ2hlY2spCiBzcGFtaSh0cnV0aCAgICAgICAgICAgICwgUHlPYmplY3RfSXNUcnVlKQogc3BhbTIob3BfYWRkICAgICAgICAgICAsIFB5TnVtYmVyX0FkZCkKQEAgLTEwNCw3ICsxMjMsNyBAQAogc3BhbTIob3BfaWNvbmNhdCAgICAgICAsIFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdCkKIHNwYW1vaShvcF9pcmVwZWF0ICAgICAgLCBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQpCiBzcGFtaTJiKG9wX2NvbnRhaW5zICAgICAsIFB5U2VxdWVuY2VfQ29udGFpbnMpCi1zcGFtaTJiKHNlcXVlbmNlSW5jbHVkZXMsIFB5U2VxdWVuY2VfQ29udGFpbnMpCitzcGFtaTJiKHNlcXVlbmNlSW5jbHVkZXMsIG9wX3NlcXVlbmNlSW5jbHVkZXMpCiBzcGFtbjIoaW5kZXhPZiAgICAgICAgICwgUHlTZXF1ZW5jZV9JbmRleCkKIHNwYW1uMihjb3VudE9mICAgICAgICAgLCBQeVNlcXVlbmNlX0NvdW50KQogc3BhbWkoaXNNYXBwaW5nVHlwZSAgICAsIFB5TWFwcGluZ19DaGVjaykKZGlmZiAtLWdpdCBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCmluZGV4IGUxYjdhMmIuLmYwYWM1ZTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwpAQCAtOTM1LDEyICs5MzUsMTIgQEAKIFZBTElEQVRFUihhdG9tKTsgICAgICAgICAgICAgICAgVkFMSURBVEVSKGxhbWJkZWYpOwogVkFMSURBVEVSKHRyYWlsZXIpOyAgICAgICAgICAgICBWQUxJREFURVIoc3Vic2NyaXB0KTsKIFZBTElEQVRFUihzdWJzY3JpcHRsaXN0KTsgICAgICAgVkFMSURBVEVSKHNsaWNlb3ApOwotVkFMSURBVEVSKGV4cHJsaXN0KTsgICAgICAgICAgICBWQUxJREFURVIoZGljdG1ha2VyKTsKK1ZBTElEQVRFUihleHBybGlzdCk7ICAgICAgICAgICAgVkFMSURBVEVSKGRpY3RvcnNldG1ha2VyKTsKIFZBTElEQVRFUihhcmdsaXN0KTsgICAgICAgICAgICAgVkFMSURBVEVSKGFyZ3VtZW50KTsKIFZBTElEQVRFUihsaXN0bWFrZXIpOyAgICAgICAgICAgVkFMSURBVEVSKHlpZWxkX3N0bXQpOwotVkFMSURBVEVSKHRlc3RsaXN0MSk7ICAgICAgICAgICBWQUxJREFURVIoZ2VuX2Zvcik7Ci1WQUxJREFURVIoZ2VuX2l0ZXIpOyAgICAgICAgICAgIFZBTElEQVRFUihnZW5faWYpOwotVkFMSURBVEVSKHRlc3RsaXN0X2dleHApOyAgICAgICBWQUxJREFURVIoeWllbGRfZXhwcik7CitWQUxJREFURVIodGVzdGxpc3QxKTsgICAgICAgICAgIFZBTElEQVRFUihjb21wX2Zvcik7CitWQUxJREFURVIoY29tcF9pdGVyKTsgICAgICAgICAgIFZBTElEQVRFUihjb21wX2lmKTsKK1ZBTElEQVRFUih0ZXN0bGlzdF9jb21wKTsgICAgICAgVkFMSURBVEVSKHlpZWxkX2V4cHIpOwogVkFMSURBVEVSKHlpZWxkX29yX3Rlc3RsaXN0KTsgICBWQUxJREFURVIob3JfdGVzdCk7CiBWQUxJREFURVIob2xkX3Rlc3QpOyAgICAgICAgICAgIFZBTElEQVRFUihvbGRfbGFtYmRlZik7CiAKQEAgLTEzNDIsMTcgKzEzNDIsMTcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiAgZ2VuX2l0ZXI6ICBnZW5fZm9yIHwgZ2VuX2lmCisvKiAgY29tcF9pdGVyOiAgY29tcF9mb3IgfCBjb21wX2lmCiAgKi8KIHN0YXRpYyBpbnQKLXZhbGlkYXRlX2dlbl9pdGVyKG5vZGUgKnRyZWUpCit2YWxpZGF0ZV9jb21wX2l0ZXIobm9kZSAqdHJlZSkKIHsKLSAgICBpbnQgcmVzID0gKHZhbGlkYXRlX250eXBlKHRyZWUsIGdlbl9pdGVyKQotICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgMSwgImdlbl9pdGVyIikpOwotICAgIGlmIChyZXMgJiYgVFlQRShDSElMRCh0cmVlLCAwKSkgPT0gZ2VuX2ZvcikKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfZ2VuX2ZvcihDSElMRCh0cmVlLCAwKSk7CisgICAgaW50IHJlcyA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCBjb21wX2l0ZXIpCisgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9udW1ub2Rlcyh0cmVlLCAxLCAiY29tcF9pdGVyIikpOworICAgIGlmIChyZXMgJiYgVFlQRShDSElMRCh0cmVlLCAwKSkgPT0gY29tcF9mb3IpCisgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbXBfZm9yKENISUxEKHRyZWUsIDApKTsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX2dlbl9pZihDSElMRCh0cmVlLCAwKSk7CisgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbXBfaWYoQ0hJTEQodHJlZSwgMCkpOwogCiAgICAgcmV0dXJuIHJlczsKIH0KQEAgLTEzNzksMTggKzEzNzksMTggQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiAgZ2VuX2ZvcjogICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdCBbZ2VuX2l0ZXJdCisvKiAgY29tcF9mb3I6ICAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3QgW2NvbXBfaXRlcl0KICAqLwogc3RhdGljIGludAotdmFsaWRhdGVfZ2VuX2Zvcihub2RlICp0cmVlKQordmFsaWRhdGVfY29tcF9mb3Iobm9kZSAqdHJlZSkKIHsKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwogICAgIGludCByZXM7CiAKICAgICBpZiAobmNoID09IDUpCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX2dlbl9pdGVyKENISUxEKHRyZWUsIDQpKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9pdGVyKENISUxEKHRyZWUsIDQpKTsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDQsICJnZW5fZm9yIik7CisgICAgICAgIHJlcyA9IHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDQsICJjb21wX2ZvciIpOwogCiAgICAgaWYgKHJlcykKICAgICAgICAgcmVzID0gKHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMCksICJmb3IiKQpAQCAtMTQyMSwxOCArMTQyMSwxOCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qICBnZW5faWY6ICAnaWYnIG9sZF90ZXN0IFtnZW5faXRlcl0KKy8qICBjb21wX2lmOiAgJ2lmJyBvbGRfdGVzdCBbY29tcF9pdGVyXQogICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV9nZW5faWYobm9kZSAqdHJlZSkKK3ZhbGlkYXRlX2NvbXBfaWYobm9kZSAqdHJlZSkKIHsKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwogICAgIGludCByZXM7CiAKICAgICBpZiAobmNoID09IDMpCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX2dlbl9pdGVyKENISUxEKHRyZWUsIDIpKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9pdGVyKENISUxEKHRyZWUsIDIpKTsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDIsICJnZW5faWYiKTsKKyAgICAgICAgcmVzID0gdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgMiwgImNvbXBfaWYiKTsKIAogICAgIGlmIChyZXMpCiAgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV9uYW1lKENISUxEKHRyZWUsIDApLCAiaWYiKQpAQCAtMjQ2Myw3ICsyNDYzLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoVFlQRShDSElMRCh0cmVlLCAxKSk9PXlpZWxkX2V4cHIpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV95aWVsZF9leHByKENISUxEKHRyZWUsIDEpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0bGlzdF9nZXhwKENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX3Rlc3RsaXN0X2NvbXAoQ0hJTEQodHJlZSwgMSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBMU1FCOgpAQCAtMjQ4Miw3ICsyNDgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9udHlwZShDSElMRCh0cmVlLCBuY2ggLSAxKSwgUkJSQUNFKSk7CiAKICAgICAgICAgICAgIGlmIChyZXMgJiYgKG5jaCA9PSAzKSkKLSAgICAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV9kaWN0bWFrZXIoQ0hJTEQodHJlZSwgMSkpOworICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2RpY3RvcnNldG1ha2VyKENISUxEKHRyZWUsIDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgQkFDS1FVT1RFOgogICAgICAgICAgICAgcmVzID0gKChuY2ggPT0gMykKQEAgLTI1NDMsMjYgKzI1NDMsMjYgQEAKICAgICByZXR1cm4gb2s7CiB9CiAKLS8qICB0ZXN0bGlzdF9nZXhwOgotICogICAgdGVzdCAoIGdlbl9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCisvKiAgdGVzdGxpc3RfY29tcDoKKyAqICAgIHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKICAqLwogc3RhdGljIGludAotdmFsaWRhdGVfdGVzdGxpc3RfZ2V4cChub2RlICp0cmVlKQordmFsaWRhdGVfdGVzdGxpc3RfY29tcChub2RlICp0cmVlKQogewogICAgIGludCBuY2ggPSBOQ0godHJlZSk7CiAgICAgaW50IG9rID0gbmNoOwogCiAgICAgaWYgKG5jaCA9PSAwKQotICAgICAgICBlcnJfc3RyaW5nKCJtaXNzaW5nIGNoaWxkIG5vZGVzIG9mIHRlc3RsaXN0X2dleHAiKTsKKyAgICAgICAgZXJyX3N0cmluZygibWlzc2luZyBjaGlsZCBub2RlcyBvZiB0ZXN0bGlzdF9jb21wIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG9rID0gdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSk7CiAgICAgfQogCiAgICAgLyoKLSAgICAgKiAgZ2VuX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddCisgICAgICogIGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10KICAgICAgKi8KLSAgICBpZiAobmNoID09IDIgJiYgVFlQRShDSElMRCh0cmVlLCAxKSkgPT0gZ2VuX2ZvcikKLSAgICAgICAgb2sgPSB2YWxpZGF0ZV9nZW5fZm9yKENISUxEKHRyZWUsIDEpKTsKKyAgICBpZiAobmNoID09IDIgJiYgVFlQRShDSElMRCh0cmVlLCAxKSkgPT0gY29tcF9mb3IpCisgICAgICAgIG9rID0gdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMSkpOwogICAgIGVsc2UgewogICAgICAgICAvKiAgKCcsJyB0ZXN0KSogWycsJ10gICovCiAgICAgICAgIGludCBpID0gMTsKQEAgLTI1NzUsNyArMjU3NSw3IEBACiAgICAgICAgICAgICBvayA9IHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkpKTsKICAgICAgICAgZWxzZSBpZiAoaSAhPSBuY2gpIHsKICAgICAgICAgICAgIG9rID0gMDsKLSAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgdHJhaWxpbmcgbm9kZXMgZm9yIHRlc3RsaXN0X2dleHAiKTsKKyAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgdHJhaWxpbmcgbm9kZXMgZm9yIHRlc3RsaXN0X2NvbXAiKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gb2s7CkBAIC0yNjIyLDM2ICsyNjIyLDM5IEBACiAgICAgcmV0dXJuIG9rOwogfQogCi0vKiAgd2l0aF92YXIKLXdpdGhfdmFyOiAnYXMnIGV4cHIKKy8qICB3aXRoX2l0ZW06CisgKiAgIHRlc3QgWydhcycgZXhwcl0KICAqLwogc3RhdGljIGludAotdmFsaWRhdGVfd2l0aF92YXIobm9kZSAqdHJlZSkKK3ZhbGlkYXRlX3dpdGhfaXRlbShub2RlICp0cmVlKQogewogICAgIGludCBuY2ggPSBOQ0godHJlZSk7Ci0gICAgaW50IG9rID0gKHZhbGlkYXRlX250eXBlKHRyZWUsIHdpdGhfdmFyKQotICAgICAgICAmJiAobmNoID09IDIpCi0gICAgICAgICYmIHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMCksICJhcyIpCi0gICAgICAgICYmIHZhbGlkYXRlX2V4cHIoQ0hJTEQodHJlZSwgMSkpKTsKLSAgIHJldHVybiBvazsKKyAgICBpbnQgb2sgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgd2l0aF9pdGVtKQorICAgICAgICAgICAgICAmJiAobmNoID09IDEgfHwgbmNoID09IDMpCisgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpKTsKKyAgICBpZiAob2sgJiYgbmNoID09IDMpCisgICAgICAgIG9rID0gKHZhbGlkYXRlX25hbWUoQ0hJTEQodHJlZSwgMSksICJhcyIpCisgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2V4cHIoQ0hJTEQodHJlZSwgMikpKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKLS8qICB3aXRoX3N0bXQKLSAqICAgICAgICAgICAwICAgICAgMSAgICAgICAyICAgICAgIC0yICAgLTEKLXdpdGhfc3RtdDogJ3dpdGgnIHRlc3QgWyB3aXRoX3ZhciBdICc6JyBzdWl0ZQorLyogIHdpdGhfc3RtdDoKKyAqICAgIDAgICAgICAxICAgICAgICAgIC4uLiAgICAgICAgICAgICAtMiAgIC0xCisgKiAgICd3aXRoJyB3aXRoX2l0ZW0gKCcsJyB3aXRoX2l0ZW0pKiAnOicgc3VpdGUKICAqLwogc3RhdGljIGludAogdmFsaWRhdGVfd2l0aF9zdG10KG5vZGUgKnRyZWUpCiB7CisgICAgaW50IGk7CiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKICAgICBpbnQgb2sgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgd2l0aF9zdG10KQotICAgICAgICAmJiAoKG5jaCA9PSA0KSB8fCAobmNoID09IDUpKQorICAgICAgICAmJiAobmNoICUgMiA9PSAwKQogICAgICAgICAmJiB2YWxpZGF0ZV9uYW1lKENISUxEKHRyZWUsIDApLCAid2l0aCIpCi0gICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMSkpCi0gICAgICAgICYmIChuY2ggPT0gNCB8fCB2YWxpZGF0ZV93aXRoX3ZhcihDSElMRCh0cmVlLCAyKSkpCiAgICAgICAgICYmIHZhbGlkYXRlX2NvbG9uKFJDSElMRCh0cmVlLCAtMikpCiAgICAgICAgICYmIHZhbGlkYXRlX3N1aXRlKFJDSElMRCh0cmVlLCAtMSkpKTsKLSAgIHJldHVybiBvazsKKyAgICBmb3IgKGkgPSAxOyBvayAmJiBpIDwgbmNoIC0gMjsgaSArPSAyKQorICAgICAgICBvayA9IHZhbGlkYXRlX3dpdGhfaXRlbShDSElMRCh0cmVlLCBpKSk7CisgICAgcmV0dXJuIG9rOwogfQogCiAvKiAgZnVuY2RlZjoKQEAgLTI3NDgsNyArMjc1MSw3IEBACiAgICAgICAgIGZvciAoaT0wOyBpPG5jaDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoVFlQRShDSElMRCh0cmVlLCBpKSkgPT0gYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgICBub2RlICpjaCA9IENISUxEKHRyZWUsIGkpOwotICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDIgJiYgVFlQRShDSElMRChjaCwgMSkpID09IGdlbl9mb3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA9PSAyICYmIFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBjb21wX2ZvcikgewogICAgICAgICAgICAgICAgICAgICBlcnJfc3RyaW5nKCJuZWVkICcoJywgJyknIGZvciBnZW5lcmF0b3IgZXhwcmVzc2lvbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CkBAIC0yODE1LDcgKzI4MTgsNyBAQAogCiAvKiAgYXJndW1lbnQ6CiAgKgotICogIFt0ZXN0ICc9J10gdGVzdCBbZ2VuX2Zvcl0KKyAqICBbdGVzdCAnPSddIHRlc3QgW2NvbXBfZm9yXQogICovCiBzdGF0aWMgaW50CiB2YWxpZGF0ZV9hcmd1bWVudChub2RlICp0cmVlKQpAQCAtMjgyNiw3ICsyODI5LDcgQEAKICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpKTsKIAogICAgIGlmIChyZXMgJiYgKG5jaCA9PSAyKSkKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfZ2VuX2ZvcihDSElMRCh0cmVlLCAxKSk7CisgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbXBfZm9yKENISUxEKHRyZWUsIDEpKTsKICAgICBlbHNlIGlmIChyZXMgJiYgKG5jaCA9PSAzKSkKICAgICAgICAgcmVzID0gKHZhbGlkYXRlX2VxdWFsKENISUxEKHRyZWUsIDEpKQogICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAyKSkpOwpAQCAtMjk2NywzMyArMjk3MCw4NCBAQAogfQogCiAKKy8qCisgKiBkaWN0b3JzZXRtYWtlcjoKKyAqCisgKiAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKKyAqICh0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSkKKyAqLwogc3RhdGljIGludAotdmFsaWRhdGVfZGljdG1ha2VyKG5vZGUgKnRyZWUpCit2YWxpZGF0ZV9kaWN0b3JzZXRtYWtlcihub2RlICp0cmVlKQogewogICAgIGludCBuY2ggPSBOQ0godHJlZSk7Ci0gICAgaW50IHJlcyA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCBkaWN0bWFrZXIpCi0gICAgICAgICAgICAgICAmJiAobmNoID49IDMpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKQotICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29sb24oQ0hJTEQodHJlZSwgMSkpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDIpKSk7CisgICAgaW50IG9rID0gdmFsaWRhdGVfbnR5cGUodHJlZSwgZGljdG9yc2V0bWFrZXIpOworICAgIGludCBpID0gMDsKKyAgICBpbnQgY2hlY2tfdHJhaWxpbmdfY29tbWEgPSAwOwogCi0gICAgaWYgKHJlcyAmJiAoKG5jaCAlIDQpID09IDApKQotICAgICAgICByZXMgPSB2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCAtLW5jaCkpOwotICAgIGVsc2UgaWYgKHJlcykKLSAgICAgICAgcmVzID0gKChuY2ggJSA0KSA9PSAzKTsKKyAgICBhc3NlcnQobmNoID4gMCk7CiAKLSAgICBpZiAocmVzICYmIChuY2ggPiAzKSkgewotICAgICAgICBpbnQgcG9zID0gMzsKLSAgICAgICAgLyogICggJywnIHRlc3QgJzonIHRlc3QgKSogICovCi0gICAgICAgIHdoaWxlIChyZXMgJiYgKHBvcyA8IG5jaCkpIHsKLSAgICAgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCBwb3MpKQotICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgcG9zICsgMSkpCi0gICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29sb24oQ0hJTEQodHJlZSwgcG9zICsgMikpCi0gICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBwb3MgKyAzKSkpOwotICAgICAgICAgICAgcG9zICs9IDQ7CisgICAgaWYgKG9rICYmIChuY2ggPT0gMSB8fCBUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBDT01NQSkpIHsKKyAgICAgICAgLyogV2UgZ290IGEgc2V0OgorICAgICAgICAgKiAgICAgdGVzdCAoJywnIHRlc3QpKiBbJywnXQorICAgICAgICAgKi8KKyAgICAgICAgb2sgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrKykpOworICAgICAgICB3aGlsZSAob2sgJiYgbmNoIC0gaSA+PSAyKSB7CisgICAgICAgICAgICBvayA9ICh2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCBpKSkKKyAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMSkpKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBjaGVja190cmFpbGluZ19jb21tYSA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKG9rICYmIFRZUEUoQ0hJTEQodHJlZSwgMSkpID09IGNvbXBfZm9yKSB7CisgICAgICAgIC8qIFdlIGdvdCBhIHNldCBjb21wcmVoZW5zaW9uOgorICAgICAgICAgKiAgICAgdGVzdCBjb21wX2ZvcgorICAgICAgICAgKi8KKyAgICAgICAgb2sgPSAodmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSkKKyAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMSkpKTsKKyAgICB9CisgICAgZWxzZSBpZiAob2sgJiYgTkNIKHRyZWUpID4gMyAmJiBUWVBFKENISUxEKHRyZWUsIDMpKSA9PSBjb21wX2ZvcikgeworICAgICAgICAvKiBXZSBnb3QgYSBkaWN0IGNvbXByZWhlbnNpb246CisgICAgICAgICAqICAgICB0ZXN0ICc6JyB0ZXN0IGNvbXBfZm9yCisgICAgICAgICAqLworICAgICAgICBvayA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKQorICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb2xvbihDSElMRCh0cmVlLCAxKSkKKyAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAyKSkKKyAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMykpKTsKKyAgICB9CisgICAgZWxzZSBpZiAob2spIHsKKyAgICAgICAgLyogV2UgZ290IGEgZGljdDoKKyAgICAgICAgICogICAgIHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10KKyAgICAgICAgICovCisgICAgICAgIGlmIChuY2ggPj0gMykgeworICAgICAgICAgICAgb2sgPSAodmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKSkKKyAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2NvbG9uKENISUxEKHRyZWUsIGkrMSkpCisgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMikpKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgbnVtYmVyIG9mIG5vZGVzIGZvciBkaWN0b3JzZXRtYWtlciIpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKG9rICYmIG5jaCAtIGkgPj0gNCkgeworICAgICAgICAgICAgb2sgPSAodmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSkpCisgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMSkpCisgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb2xvbihDSElMRCh0cmVlLCBpKzIpKQorICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKzMpKSk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tfdHJhaWxpbmdfY29tbWEgPSAxOworICAgIH0KKyAgICBpZiAob2sgJiYgY2hlY2tfdHJhaWxpbmdfY29tbWEpIHsKKyAgICAgICAgaWYgKGkgPT0gbmNoLTEpCisgICAgICAgICAgICBvayA9IHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkpKTsKKyAgICAgICAgZWxzZSBpZiAoaSAhPSBuY2gpIHsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgdHJhaWxpbmcgbm9kZXMgZm9yIGRpY3RvcnNldG1ha2VyIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChyZXMpOworCisgICAgcmV0dXJuIG9rOwogfQogCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCA4MjJiYzExLi40ODc2MmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCkBAIC0yNjksNiArMjY5LDcgQEAKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKICNpbmNsdWRlICJvc2RlZnMuaCIKKyNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8c2hlbGxhcGkuaD4gICAvKiBmb3IgU2hlbGxFeGVjdXRlKCkgKi8KICNkZWZpbmUgcG9wZW4gICBfcG9wZW4KQEAgLTMzOSw2ICszNDAsOCBAQAogCiAvKiBjaG9vc2UgdGhlIGFwcHJvcHJpYXRlIHN0YXQgYW5kIGZzdGF0IGZ1bmN0aW9ucyBhbmQgcmV0dXJuIHN0cnVjdHMgKi8KICN1bmRlZiBTVEFUCisjdW5kZWYgRlNUQVQKKyN1bmRlZiBTVFJVQ1RfU1RBVAogI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICMgICAgICAgZGVmaW5lIFNUQVQgd2luMzJfc3RhdAogIyAgICAgICBkZWZpbmUgRlNUQVQgd2luMzJfZnN0YXQKQEAgLTM2MCw2ICszNjMsOTkgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAKKy8qIE1pY3Jvc29mdCBDUlQgaW4gVlMyMDA1IGFuZCBoaWdoZXIgd2lsbCB2ZXJpZnkgdGhhdCBhIGZpbGVoYW5kbGUgaXMKKyAqIHZhbGlkIGFuZCB0aHJvdyBhbiBhc3NlcnRpb24gaWYgaXQgaXNuJ3QuCisgKiBOb3JtYWxseSwgYW4gaW52YWxpZCBmZCBpcyBsaWtlbHkgdG8gYmUgYSBDIHByb2dyYW0gZXJyb3IgYW5kIHRoZXJlZm9yZQorICogYW4gYXNzZXJ0aW9uIGNhbiBiZSB1c2VmdWwsIGJ1dCBpdCBkb2VzIGNvbnRyYWRpY3QgdGhlIFBPU0lYIHN0YW5kYXJkCisgKiB3aGljaCBmb3Igd3JpdGUoMikgc3RhdGVzOgorICogICAgIk90aGVyd2lzZSwgLTEgc2hhbGwgYmUgcmV0dXJuZWQgYW5kIGVycm5vIHNldCB0byBpbmRpY2F0ZSB0aGUgZXJyb3IuIgorICogICAgIltFQkFERl0gVGhlIGZpbGRlcyBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3Igb3BlbiBmb3IKKyAqICAgICB3cml0aW5nLiIKKyAqIEZ1cnRoZXJtb3JlLCBweXRob24gYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGFueSBvbGQgaW50ZWdlcgorICogYXMgYSBmZCBhbmQgc2hvdWxkIG1lcmVseSByYWlzZSBhIHB5dGhvbiBleGNlcHRpb24gb24gZXJyb3IuCisgKiBUaGUgTWljcm9zb2Z0IENSVCBkb2Vzbid0IHByb3ZpZGUgYW4gb2ZmaWNpYWwgd2F5IHRvIGNoZWNrIGZvciB0aGUKKyAqIHZhbGlkaXR5IG9mIGEgZmlsZSBkZXNjcmlwdG9yLCBidXQgd2UgY2FuIGVtdWxhdGUgaXRzIGludGVybmFsIGJlaGF2aW91cgorICogYnkgdXNpbmcgdGhlIGV4cG9ydGVkIF9fcGluZm8gZGF0YSBtZW1iZXIgYW5kIGtub3dsZWRnZSBvZiB0aGUKKyAqIGludGVybmFsIHN0cnVjdHVyZXMgaW52b2x2ZWQuCisgKiBUaGUgc3RydWN0dXJlcyBiZWxvdyBtdXN0IGJlIHVwZGF0ZWQgZm9yIGVhY2ggdmVyc2lvbiBvZiB2aXN1YWwgc3R1ZGlvCisgKiBhY2NvcmRpbmcgdG8gdGhlIGZpbGUgaW50ZXJuYWwuaCBpbiB0aGUgQ1JUIHNvdXJjZSwgdW50aWwgTVMgY29tZXMKKyAqIHVwIHdpdGggYSBsZXNzIGhhY2t5IHdheSB0byBkbyB0aGlzLgorICogKGFsbCBvZiB0aGlzIGlzIHRvIGF2b2lkIGdsb2JhbGx5IG1vZGlmeWluZyB0aGUgQ1JUIGJlaGF2aW91ciB1c2luZworICogX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyKCkgYW5kIF9DcnRTZXRSZXBvcnRNb2RlKCkpCisgKi8KKy8qIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGlzIGRldGVybWluZWQgYXQgcnVudGltZS4KKyAqIE9ubHkgdGhlIGZpcnN0IGl0ZW1zIG11c3QgYmUgcHJlc2VudC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludHB0cl90IG9zZmhuZDsKKyAgICBjaGFyIG9zZmlsZTsKK30gbXlfaW9pbmZvOworCitleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgKiBfX3Bpb2luZm9bXTsKKyNkZWZpbmUgSU9JTkZPX0wyRSA1CisjZGVmaW5lIElPSU5GT19BUlJBWV9FTFRTICAgKDEgPDwgSU9JTkZPX0wyRSkKKyNkZWZpbmUgSU9JTkZPX0FSUkFZUyA2NAorI2RlZmluZSBfTkhBTkRMRV8gICAgICAgICAgIChJT0lORk9fQVJSQVlTICogSU9JTkZPX0FSUkFZX0VMVFMpCisjZGVmaW5lIEZPUEVOIDB4MDEKKyNkZWZpbmUgX05PX0NPTlNPTEVfRklMRU5PIChpbnRwdHJfdCktMgorCisvKiBUaGlzIGZ1bmN0aW9uIGVtdWxhdGVzIHdoYXQgdGhlIHdpbmRvd3MgQ1JUIGRvZXMgdG8gdmFsaWRhdGUgZmlsZSBoYW5kbGVzICovCitpbnQKK19QeVZlcmlmeV9mZChpbnQgZmQpCit7CisgICAgY29uc3QgaW50IGkxID0gZmQgPj4gSU9JTkZPX0wyRTsKKyAgICBjb25zdCBpbnQgaTIgPSBmZCAmICgoMSA8PCBJT0lORk9fTDJFKSAtIDEpOworCisgICAgc3RhdGljIGludCBzaXplb2ZfaW9pbmZvID0gMDsKKworICAgIC8qIERldGVybWluZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGlvaW5mbyBzdHJ1Y3R1cmUsCisgICAgICogYXMgdXNlZCBieSB0aGUgQ1JUIGxvYWRlZCBpbiBtZW1vcnkKKyAgICAgKi8KKyAgICBpZiAoc2l6ZW9mX2lvaW5mbyA9PSAwICYmIF9fcGlvaW5mb1swXSAhPSBOVUxMKSB7CisgICAgICAgIHNpemVvZl9pb2luZm8gPSBfbXNpemUoX19waW9pbmZvWzBdKSAvIElPSU5GT19BUlJBWV9FTFRTOworICAgIH0KKyAgICBpZiAoc2l6ZW9mX2lvaW5mbyA9PSAwKSB7CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uLi4gKi8KKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIC8qIFNlZSB0aGF0IGl0IGlzbid0IGEgc3BlY2lhbCBDTEVBUiBmaWxlbm8gKi8KKyAgICBpZiAoZmQgIT0gX05PX0NPTlNPTEVfRklMRU5PKSB7CisgICAgICAgIC8qIE1pY3Jvc29mdCBDUlQgd291bGQgY2hlY2sgdGhhdCAwPD1mZDxfbmhhbmRsZSBidXQgd2UgY2FuJ3QgZG8gdGhhdC4gIEluc3RlYWQKKyAgICAgICAgICogd2UgY2hlY2sgcG9pbnRlciB2YWxpZGl0eSBhbmQgb3RoZXIgaW5mbworICAgICAgICAgKi8KKyAgICAgICAgaWYgKDAgPD0gaTEgJiYgaTEgPCBJT0lORk9fQVJSQVlTICYmIF9fcGlvaW5mb1tpMV0gIT0gTlVMTCkgeworICAgICAgICAgICAgLyogZmluYWxseSwgY2hlY2sgdGhhdCB0aGUgZmlsZSBpcyBvcGVuICovCisgICAgICAgICAgICBteV9pb2luZm8qIGluZm8gPSAobXlfaW9pbmZvKikoX19waW9pbmZvW2kxXSArIGkyICogc2l6ZW9mX2lvaW5mbyk7CisgICAgICAgICAgICBpZiAoaW5mby0+b3NmaWxlICYgRk9QRU4pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgZmFpbDoKKyAgICBlcnJubyA9IEVCQURGOworICAgIHJldHVybiAwOworfQorCisvKiB0aGUgc3BlY2lhbCBjYXNlIG9mIGNoZWNraW5nIGR1cDIuICBUaGUgdGFyZ2V0IGZkIG11c3QgYmUgaW4gYSBzZW5zaWJsZSByYW5nZSAqLworc3RhdGljIGludAorX1B5VmVyaWZ5X2ZkX2R1cDIoaW50IGZkMSwgaW50IGZkMikKK3sKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZDEpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoZmQyID09IF9OT19DT05TT0xFX0ZJTEVOTykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCh1bnNpZ25lZClmZDIgPCBfTkhBTkRMRV8pCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZWxzZQorLyogZHVtbXkgdmVyc2lvbi4gX1B5VmVyaWZ5X2ZkKCkgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGZpbGVvYmplY3QuaCAqLworI2RlZmluZSBfUHlWZXJpZnlfZmRfZHVwMihBLCBCKSAoMSkKKyNlbmRpZgorCiAvKiBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBPU0lYIGVudmlyb25tZW50IHRhYmxlICovCiAjaWZkZWYgV0lUSF9ORVhUX0ZSQU1FV09SSwogLyogT24gRGFyd2luL01hY09TWCBhIHNoYXJlZCBsaWJyYXJ5IG9yIGZyYW1ld29yayBoYXMgbm8gYWNjZXNzIHRvCkBAIC00NDUsMTMgKzU0MSwxMyBAQAogICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwgbmFtZSk7CiB9CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKKyNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZXJyb3Jfd2l0aF91bmljb2RlX2ZpbGVuYW1lKFB5X1VOSUNPREUqIG5hbWUpCiB7CiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhVbmljb2RlRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwgbmFtZSk7CiB9Ci0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00NzgsNyArNTc0LDYgQEAKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm5vKTsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwogc3RhdGljIFB5T2JqZWN0ICoKIHdpbjMyX2Vycm9yX3VuaWNvZGUoY2hhciogZnVuY3Rpb24sIFB5X1VOSUNPREUqIGZpbGVuYW1lKQogewpAQCAtNDkwLDEwICs1ODUsNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKl9QeVVuaWNvZGVfRnJvbUZpbGVTeXN0ZW1FbmNvZGVkT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmopCi17Ci19Ci0KIHN0YXRpYyBpbnQKIGNvbnZlcnRfdG9fdW5pY29kZShQeU9iamVjdCAqKnBhcmFtKQogewpAQCAtNTExLDkgKzYwMiw3IEBACiAgICAgcmV0dXJuICgqcGFyYW0pICE9IE5VTEw7CiB9CiAKLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KLQotI2VuZGlmCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAjaWYgZGVmaW5lZChQWU9TX09TMikKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MDIsNiArNjkxLDggQEAKICAgICBmZCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IoZmRvYmopOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9ICgqZnVuYykoZmQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC02MTEsMjAgKzcwMiw2IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKLXN0YXRpYyBpbnQKLXVuaWNvZGVfZmlsZV9uYW1lcyh2b2lkKQotewotICAgIHN0YXRpYyBpbnQgY2FudXNld2lkZSA9IC0xOwotICAgIGlmIChjYW51c2V3aWRlID09IC0xKSB7Ci0gICAgICAgIC8qIEFzIHBlciBkb2MgZm9yIDo6R2V0VmVyc2lvbigpLCB0aGlzIGlzIHRoZSBjb3JyZWN0IHRlc3QgZm9yCi0gICAgICAgICAgIHRoZSBXaW5kb3dzIE5UIGZhbWlseS4gKi8KLSAgICAgICAgY2FudXNld2lkZSA9IChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKSA/IDEgOiAwOwotICAgIH0KLSAgICByZXR1cm4gY2FudXNld2lkZTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCiB7CkBAIC02NjYsNyArNzQzLDcgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBQeU9iamVjdCoKIHdpbjMyXzFzdHIoUHlPYmplY3QqIGFyZ3MsIGNoYXIqIGZ1bmMsCiAgICAgICAgICAgIGNoYXIqIGZvcm1hdCwgQk9PTCAoX19zdGRjYWxsICpmdW5jQSkoTFBDU1RSKSwKQEAgLTY3NSwxOCArNzUyLDE3IEBACiAgICAgUHlPYmplY3QgKnVuaTsKICAgICBjaGFyICphbnNpOwogICAgIEJPT0wgcmVzdWx0OwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNXKFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKSk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuYywgUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzdWx0ID0gZnVuY1coUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZShmdW5jLCBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaSkpOworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LCAmYW5zaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzA1LDcgKzc4MSw3IEBACiAgICBjaGRpciBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIFNldEN1cnJlbnREaXJlY3Rvcnk7IGhvd2V2ZXIsCiAgICBpdCBhbHNvIG5lZWRzIHRvIHNldCAibWFnaWMiIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmRpY2F0aW5nCiAgICB0aGUgcGVyLWRyaXZlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBhcmUgb2YgdGhlIGZvcm0gPTxkcml2ZT46ICovCi1CT09MIF9fc3RkY2FsbAorc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl9jaGRpcihMUENTVFIgcGF0aCkKIHsKICAgICBjaGFyIG5ld19wYXRoW01BWF9QQVRIKzFdOwpAQCAtNzMwLDcgKzgwNiw3IEBACiAKIC8qIFRoZSBVbmljb2RlIHZlcnNpb24gZGlmZmVycyBmcm9tIHRoZSBBTlNJIHZlcnNpb24KICAgIHNpbmNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBtaWdodCBleGNlZWQgTUFYX1BBVEggY2hhcmFjdGVycyAqLwotQk9PTCBfX3N0ZGNhbGwKK3N0YXRpYyBCT09MIF9fc3RkY2FsbAogd2luMzJfd2NoZGlyKExQQ1dTVFIgcGF0aCkKIHsKICAgICB3Y2hhcl90IF9uZXdfcGF0aFtNQVhfUEFUSCsxXSwgKm5ld19wYXRoID0gX25ld19wYXRoOwpAQCAtNzg0LDE4ICs4NjAsMTggQEAKICAgICBpbnQgc3RfZ2lkOwogICAgIGludCBzdF9yZGV2OwogICAgIF9faW50NjQgc3Rfc2l6ZTsKLSAgICBpbnQgc3RfYXRpbWU7CisgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwotICAgIGludCBzdF9tdGltZTsKKyAgICB0aW1lX3Qgc3RfbXRpbWU7CiAgICAgaW50IHN0X210aW1lX25zZWM7Ci0gICAgaW50IHN0X2N0aW1lOworICAgIHRpbWVfdCBzdF9jdGltZTsKICAgICBpbnQgc3RfY3RpbWVfbnNlYzsKIH07CiAKIHN0YXRpYyBfX2ludDY0IHNlY3NfYmV0d2Vlbl9lcG9jaHMgPSAxMTY0NDQ3MzYwMDsgLyogU2Vjb25kcyBiZXR3ZWVuIDEuMS4xNjAxIGFuZCAxLjEuMTk3MCAqLwogCiBzdGF0aWMgdm9pZAotRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKEZJTEVUSU1FICppbl9wdHIsIGludCAqdGltZV9vdXQsIGludCogbnNlY19vdXQpCitGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoRklMRVRJTUUgKmluX3B0ciwgdGltZV90ICp0aW1lX291dCwgaW50KiBuc2VjX291dCkKIHsKICAgICAvKiBYWFggZW5kaWFubmVzcy4gU2hvdWxkbid0IG1hdHRlciwgYXMgYWxsIFdpbmRvd3MgaW1wbGVtZW50YXRpb25zIGFyZSBsaXR0bGUtZW5kaWFuICovCiAgICAgLyogQ2Fubm90IHNpbXBseSBjYXN0IGFuZCBkZXJlZmVyZW5jZSBpbl9wdHIsCkBAIC04MDMsMTIgKzg3OSwxMSBAQAogICAgIF9faW50NjQgaW47CiAgICAgbWVtY3B5KCZpbiwgaW5fcHRyLCBzaXplb2YoaW4pKTsKICAgICAqbnNlY19vdXQgPSAoaW50KShpbiAlIDEwMDAwMDAwKSAqIDEwMDsgLyogRklMRVRJTUUgaXMgaW4gdW5pdHMgb2YgMTAwIG5zZWMuICovCi0gICAgLyogWFhYIFdpbjMyIHN1cHBvcnRzIHRpbWUgc3RhbXBzIHBhc3QgMjAzODsgd2UgY3VycmVudGx5IGRvbid0ICovCi0gICAgKnRpbWVfb3V0ID0gUHlfU0FGRV9ET1dOQ0FTVCgoaW4gLyAxMDAwMDAwMCkgLSBzZWNzX2JldHdlZW5fZXBvY2hzLCBfX2ludDY0LCBpbnQpOworICAgICp0aW1lX291dCA9IFB5X1NBRkVfRE9XTkNBU1QoKGluIC8gMTAwMDAwMDApIC0gc2Vjc19iZXR3ZWVuX2Vwb2NocywgX19pbnQ2NCwgdGltZV90KTsKIH0KIAogc3RhdGljIHZvaWQKLXRpbWVfdF90b19GSUxFX1RJTUUoaW50IHRpbWVfaW4sIGludCBuc2VjX2luLCBGSUxFVElNRSAqb3V0X3B0cikKK3RpbWVfdF90b19GSUxFX1RJTUUodGltZV90IHRpbWVfaW4sIGludCBuc2VjX2luLCBGSUxFVElNRSAqb3V0X3B0cikKIHsKICAgICAvKiBYWFggZW5kaWFubmVzcyAqLwogICAgIF9faW50NjQgb3V0OwpAQCAtODQ5LDIyICs5MjQsNiBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBFbXVsYXRlIEdldEZpbGVBdHRyaWJ1dGVzRXhbQVddIG9uIFdpbmRvd3MgOTUgKi8KLXN0YXRpYyBpbnQgY2hlY2tlZCA9IDA7Ci1zdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKmdmYXhhKShMUENTVFIsIEdFVF9GSUxFRVhfSU5GT19MRVZFTFMsIExQVk9JRCk7Ci1zdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKmdmYXh3KShMUENXU1RSLCBHRVRfRklMRUVYX0lORk9fTEVWRUxTLCBMUFZPSUQpOwotc3RhdGljIHZvaWQKLWNoZWNrX2dmYXgoKQotewotICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7Ci0gICAgaWYgKGNoZWNrZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBjaGVja2VkID0gMTsKLSAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyIik7Ci0gICAgKihGQVJQUk9DKikmZ2ZheGEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJHZXRGaWxlQXR0cmlidXRlc0V4QSIpOwotICAgICooRkFSUFJPQyopJmdmYXh3ID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLCAiR2V0RmlsZUF0dHJpYnV0ZXNFeFciKTsKLX0KLQogc3RhdGljIEJPT0wKIGF0dHJpYnV0ZXNfZnJvbV9kaXIoTFBDU1RSIHBzekZpbGUsIExQV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBwZmFkKQogewpAQCAtOTAxLDc0ICs5NjAsMTMgQEAKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIEJPT0wgV0lOQVBJCi1QeV9HZXRGaWxlQXR0cmlidXRlc0V4QShMUENTVFIgcHN6RmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUyBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHB2KQotewotICAgIEJPT0wgcmVzdWx0OwotICAgIExQV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBwZmFkID0gcHY7Ci0gICAgLyogRmlyc3QgdHJ5IHRvIHVzZSB0aGUgc3lzdGVtJ3MgaW1wbGVtZW50YXRpb24sIGlmIHRoYXQgaXMKLSAgICAgICBhdmFpbGFibGUgYW5kIGVpdGhlciBzdWNjZWVkcyB0byBnaXZlcyBhbiBlcnJvciBvdGhlciB0aGFuCi0gICAgICAgdGhhdCBpdCBpc24ndCBpbXBsZW1lbnRlZC4gKi8KLSAgICBjaGVja19nZmF4KCk7Ci0gICAgaWYgKGdmYXhhKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdmYXhhKHBzekZpbGUsIGxldmVsLCBwdik7Ci0gICAgICAgIGlmIChyZXN1bHQgfHwgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAvKiBJdCdzIGVpdGhlciBub3QgcHJlc2VudCwgb3Igbm90IGltcGxlbWVudGVkLgotICAgICAgIEVtdWxhdGUgdXNpbmcgRmluZEZpcnN0RmlsZS4gKi8KLSAgICBpZiAobGV2ZWwgIT0gR2V0RmlsZUV4SW5mb1N0YW5kYXJkKSB7Ci0gICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0gICAgLyogVXNlIEdldEZpbGVBdHRyaWJ1dGVzIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpbGUgbmFtZQotICAgICAgIGRvZXMgbm90IGNvbnRhaW4gd2lsZGNhcmRzICh3aGljaCBGaW5kRmlyc3RGaWxlIHdvdWxkCi0gICAgICAgYWNjZXB0KS4gKi8KLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNBKHBzekZpbGUpID09IDB4RkZGRkZGRkYpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXR1cm4gYXR0cmlidXRlc19mcm9tX2Rpcihwc3pGaWxlLCBwZmFkKTsKLX0KLQotc3RhdGljIEJPT0wgV0lOQVBJCi1QeV9HZXRGaWxlQXR0cmlidXRlc0V4VyhMUENXU1RSIHBzekZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIEdFVF9GSUxFRVhfSU5GT19MRVZFTFMgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCBwdikKLXsKLSAgICBCT09MIHJlc3VsdDsKLSAgICBMUFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgcGZhZCA9IHB2OwotICAgIC8qIEZpcnN0IHRyeSB0byB1c2UgdGhlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLCBpZiB0aGF0IGlzCi0gICAgICAgYXZhaWxhYmxlIGFuZCBlaXRoZXIgc3VjY2VlZHMgdG8gZ2l2ZXMgYW4gZXJyb3Igb3RoZXIgdGhhbgotICAgICAgIHRoYXQgaXQgaXNuJ3QgaW1wbGVtZW50ZWQuICovCi0gICAgY2hlY2tfZ2ZheCgpOwotICAgIGlmIChnZmF4YSkgewotICAgICAgICByZXN1bHQgPSBnZmF4dyhwc3pGaWxlLCBsZXZlbCwgcHYpOwotICAgICAgICBpZiAocmVzdWx0IHx8IEdldExhc3RFcnJvcigpICE9IEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgLyogSXQncyBlaXRoZXIgbm90IHByZXNlbnQsIG9yIG5vdCBpbXBsZW1lbnRlZC4KLSAgICAgICBFbXVsYXRlIHVzaW5nIEZpbmRGaXJzdEZpbGUuICovCi0gICAgaWYgKGxldmVsICE9IEdldEZpbGVFeEluZm9TdGFuZGFyZCkgewotICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIC8qIFVzZSBHZXRGaWxlQXR0cmlidXRlcyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWxlIG5hbWUKLSAgICAgICBkb2VzIG5vdCBjb250YWluIHdpbGRjYXJkcyAod2hpY2ggRmluZEZpcnN0RmlsZSB3b3VsZAotICAgICAgIGFjY2VwdCkuICovCi0gICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzVyhwc3pGaWxlKSA9PSAweEZGRkZGRkZGKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZXNfZnJvbV9kaXJfdyhwc3pGaWxlLCBwZmFkKTsKLX0KLQogc3RhdGljIGludAogd2luMzJfc3RhdChjb25zdCBjaGFyKiBwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0KQogewogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgaW5mbzsKICAgICBpbnQgY29kZTsKICAgICBjaGFyICpkb3Q7Ci0gICAgLyogWFhYIG5vdCBzdXBwb3J0ZWQgb24gV2luOTUgYW5kIE5UIDMueCAqLwotICAgIGlmICghUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeEEocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKKyAgICBpZiAoIUdldEZpbGVBdHRyaWJ1dGVzRXhBKHBhdGgsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmluZm8pKSB7CiAgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTikgewogICAgICAgICAgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICBzZXR0aW5nIGl0IHRvIGEgUE9TSVggZXJyb3IuIENhbGxlcnMgc2hvdWxkIHVzZSBHZXRMYXN0RXJyb3IuICovCkBAIC0xMDA1LDggKzEwMDMsNyBAQAogICAgIGludCBjb2RlOwogICAgIGNvbnN0IHdjaGFyX3QgKmRvdDsKICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGluZm87Ci0gICAgLyogWFhYIG5vdCBzdXBwb3J0ZWQgb24gV2luOTUgYW5kIE5UIDMueCAqLwotICAgIGlmICghUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeFcocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKKyAgICBpZiAoIUdldEZpbGVBdHRyaWJ1dGVzRXhXKHBhdGgsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmluZm8pKSB7CiAgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTikgewogICAgICAgICAgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICBzZXR0aW5nIGl0IHRvIGEgUE9TSVggZXJyb3IuIENhbGxlcnMgc2hvdWxkIHVzZSBHZXRMYXN0RXJyb3IuICovCkBAIC0xNDIyLDcgKzE0MTksNiBAQAogICAgICN1bmRlZiBJU1NMQVNICiB9CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKIHN0YXRpYyBCT09MCiBJc1VOQ1Jvb3RXKFB5X1VOSUNPREUgKnBhdGgsIGludCBwYXRobGVuKQogewpAQCAtMTQ0NSw3ICsxNDQxLDYgQEAKIAogICAgICN1bmRlZiBJU1NMQVNICiB9Ci0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTQ2NSwyOCArMTQ2MCwyNCBAQAogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotICAgIC8qIElmIG9uIHdpZGUtY2hhcmFjdGVyLWNhcGFibGUgT1Mgc2VlIGlmIGFyZ3VtZW50Ci0gICAgICAgaXMgVW5pY29kZSBhbmQgaWYgc28gdXNlIHdpZGUgQVBJLiAgKi8KLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnBvKSkgewotICAgICAgICAgICAgUHlfVU5JQ09ERSAqd3BhdGggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnBvKSkgeworICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKIAotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIHJlc3VsdCBPSyB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgdGhyZWFkIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICByZXMgPSB3c3RhdGZ1bmMod3BhdGgsICZzdCk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSByZXN1bHQgT0sgd2l0aG91dAorICAgICAgICAgICAgICAgdGhyZWFkIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCisgICAgICAgIHJlcyA9IHdzdGF0ZnVuYyh3cGF0aCwgJnN0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGF0Iiwgd3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAocmVzICE9IDApCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgic3RhdCIsIHdwYXRoKTsKKyAgICAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCkBAIC0xNTI4LDI1ICsxNTE5LDIzIEBACiAgICAgY2hhciAqcGF0aDsKICAgICBpbnQgbW9kZTsKIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBEV09SRCBhdHRyOwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWk6YWNjZXNzIiwgJnBvLCAmbW9kZSkpIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIE9LIHdpdGhvdXQgdGhyZWFkIGxvY2sgYXMKLSAgICAgICAgICAgICAgIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLwotICAgICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWk6YWNjZXNzIiwgJnBvLCAmbW9kZSkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZCBsb2NrIGFzCisgICAgICAgICAgIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLworICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGdvdG8gZmluaXNoOwogICAgIH0KKyAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0aTphY2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmcGF0aCwgJm1vZGUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTE1NjEsNyArMTU1MCw3IEBACiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyghKG1vZGUgJiAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIShhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpOwotI2Vsc2UKKyNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KICAgICBpbnQgcmVzOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpOmFjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRoLCAmbW9kZSkpCkBAIC0xNTcxLDcgKzE1NjAsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgUHlNZW1fRnJlZShwYXRoKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlcyA9PSAwKTsKLSNlbmRpZgorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIH0KIAogI2lmbmRlZiBGX09LCkBAIC0xNjgyLDMzICsxNjcxLDMyIEBACiAgICAgY2hhciAqcGF0aCA9IE5VTEw7CiAgICAgaW50IGk7CiAgICAgaW50IHJlczsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgRFdPUkQgYXR0cjsKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpfDpjaG1vZCIsICZwbywgJmkpKSB7Ci0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7Ci0gICAgICAgICAgICBpZiAoYXR0ciAhPSAweEZGRkZGRkZGKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgJiBfU19JV1JJVEUpCi0gICAgICAgICAgICAgICAgICAgIGF0dHIgJj0gfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9SRUFET05MWTsKLSAgICAgICAgICAgICAgICByZXMgPSBTZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pLCBhdHRyKTsKLSAgICAgICAgICAgIH0KKyAgICBQeVVuaWNvZGVPYmplY3QgKnBvOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVaXw6Y2htb2QiLCAmcG8sICZpKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKKyAgICAgICAgaWYgKGF0dHIgIT0gMHhGRkZGRkZGRikgeworICAgICAgICAgICAgaWYgKGkgJiBfU19JV1JJVEUpCisgICAgICAgICAgICAgICAgYXR0ciAmPSB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzID0gMDsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBpZiAoIXJlcykKLSAgICAgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgiY2htb2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOworICAgICAgICAgICAgcmVzID0gU2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSwgYXR0cik7CiAgICAgICAgIH0KLSAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKCFyZXMpCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgiY2htb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0aTpjaG1vZCIsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXRoLCAmaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTczMiw3ICsxNzIwLDcgQEAKICAgICBQeU1lbV9GcmVlKHBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbHNlIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLworI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpOmNobW9kIiwgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsICZpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODY1LDcgKzE4NTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2ZzeW5jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmRvYmopCiB7Ci0gICAgICAgcmV0dXJuIHBvc2l4X2ZpbGRlcyhmZG9iaiwgZnN5bmMpOworICAgIHJldHVybiBwb3NpeF9maWxkZXMoZmRvYmosIGZzeW5jKTsKIH0KICNlbmRpZiAvKiBIQVZFX0ZTWU5DICovCiAKQEAgLTE4ODMsNyArMTg3MSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZmRhdGFzeW5jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmRvYmopCiB7Ci0gICAgICAgcmV0dXJuIHBvc2l4X2ZpbGRlcyhmZG9iaiwgZmRhdGFzeW5jKTsKKyAgICByZXR1cm4gcG9zaXhfZmlsZGVzKGZkb2JqLCBmZGF0YXN5bmMpOwogfQogI2VuZGlmIC8qIEhBVkVfRkRBVEFTWU5DICovCiAKQEAgLTIwMzcsMzYgKzIwMjUsMzQgQEAKICAgICBjaGFyIGJ1ZlsxMDI2XTsKICAgICBjaGFyICpyZXM7CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgRFdPUkQgbGVuOwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICB3Y2hhcl90IHdidWZbMTAyNl07Ci0gICAgICAgIHdjaGFyX3QgKndidWYyID0gd2J1ZjsKLSAgICAgICAgUHlPYmplY3QgKnJlc29iajsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0sIHdidWYpOwotICAgICAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCwgbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlCi0gICAgICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCi0gICAgICAgICAgIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0ZXJtaW5hdG9yLiAqLwotICAgICAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgewotICAgICAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgICAgIGlmICh3YnVmMikKLSAgICAgICAgICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhsZW4sIHdidWYyKTsKLSAgICAgICAgfQotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIXdidWYyKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsZW4pIHsKLSAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiZ2V0Y3dkdSIsIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7Ci0gICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKLSAgICAgICAgcmV0dXJuIHJlc29iajsKKyAgICB3Y2hhcl90IHdidWZbMTAyNl07CisgICAgd2NoYXJfdCAqd2J1ZjIgPSB3YnVmOworICAgIFB5T2JqZWN0ICpyZXNvYmo7CisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSwgd2J1Zik7CisgICAgLyogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gsIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQorICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCisgICAgICAgdGhlIHNwYWNlIG5lZWRlZCBmb3IgdGhlIHRlcm1pbmF0b3IuICovCisgICAgaWYgKGxlbiA+PSBzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0pIHsKKyAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKHdidWYyKQorICAgICAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobGVuLCB3YnVmMik7CiAgICAgfQotI2VuZGlmCisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIXdidWYyKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIWxlbikgeworICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7CisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiZ2V0Y3dkdSIsIE5VTEwpOworICAgIH0KKyAgICByZXNvYmogPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdidWYyLCBsZW4pOworICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICByZXR1cm4gcmVzb2JqOworI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQpAQCAtMjA3OSw4ICsyMDY1LDggQEAKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGUoYnVmLCBzdHJsZW4oYnVmKSwgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywic3RyaWN0Iik7CiB9Ci0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIFB5X1VTSU5HX1VOSUNPREUgKi8KKyNlbmRpZiAvKiBIQVZFX0dFVENXRCAqLwogCiAKICNpZmRlZiBIQVZFX0xJTksKQEAgLTIxMjAsODkgKzIxMDYsODYgQEAKICAgICBjaGFyICpidWZwdHIgPSBuYW1lYnVmOwogICAgIFB5X3NzaXplX3QgbGVuID0gc2l6ZW9mKG5hbWVidWYpLTU7IC8qIG9ubHkgY2xhaW0gdG8gaGF2ZSBzcGFjZSBmb3IgTUFYX1BBVEggKi8KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotICAgIC8qIElmIG9uIHdpZGUtY2hhcmFjdGVyLWNhcGFibGUgT1Mgc2VlIGlmIGFyZ3VtZW50Ci0gICAgICAgaXMgVW5pY29kZSBhbmQgaWYgc28gdXNlIHdpZGUgQVBJLiAgKi8KLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpsaXN0ZGlyIiwgJnBvKSkgewotICAgICAgICAgICAgV0lOMzJfRklORF9EQVRBVyB3RmlsZURhdGE7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3bmFtZWJ1ZjsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgd2NoOwotICAgICAgICAgICAgLyogT3ZlcmFsbG9jYXRlIGZvciBcXCouKlwwICovCi0gICAgICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUocG8pOwotICAgICAgICAgICAgd25hbWVidWYgPSBtYWxsb2MoKGxlbiArIDUpICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgICAgIGlmICghd25hbWVidWYpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2NzY3B5KHduYW1lYnVmLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOwotICAgICAgICAgICAgd2NoID0gbGVuID4gMCA/IHduYW1lYnVmW2xlbi0xXSA6ICdcMCc7CisgICAgUHlPYmplY3QgKnBvOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmxpc3RkaXIiLCAmcG8pKSB7CisgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOworICAgICAgICBQeV9VTklDT0RFICp3bmFtZWJ1ZjsKKyAgICAgICAgLyogT3ZlcmFsbG9jYXRlIGZvciBcXCouKlwwICovCisgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShwbyk7CisgICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmICghd25hbWVidWYpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB3Y3NjcHkod25hbWVidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICBQeV9VTklDT0RFIHdjaCA9IHduYW1lYnVmW2xlbi0xXTsKICAgICAgICAgICAgIGlmICh3Y2ggIT0gTCcvJyAmJiB3Y2ggIT0gTCdcXCcgJiYgd2NoICE9IEwnOicpCiAgICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7CiAgICAgICAgICAgICB3Y3NjcHkod25hbWVidWYgKyBsZW4sIEwiKi4qIik7Ci0gICAgICAgICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoRmluZEZpbGUgPSBGaW5kRmlyc3RGaWxlVyh3bmFtZWJ1ZiwgJndGaWxlRGF0YSk7Ci0gICAgICAgICAgICBpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgICAgICAgICAgaW50IGVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmRGaXJzdEZpbGVXIiwgd25hbWVidWYpOwotICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciAuIGFuZCAuLiAqLwotICAgICAgICAgICAgICAgIGlmICh3Y3NjbXAod0ZpbGVEYXRhLmNGaWxlTmFtZSwgTCIuIikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICB3Y3NjbXAod0ZpbGVEYXRhLmNGaWxlTmFtZSwgTCIuLiIpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSh3RmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4od0ZpbGVEYXRhLmNGaWxlTmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gRmluZE5leHRGaWxlVyhoRmluZEZpbGUsICZ3RmlsZURhdGEpOwotICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgLyogRmluZE5leHRGaWxlIHNldHMgZXJyb3IgdG8gRVJST1JfTk9fTU9SRV9GSUxFUyBpZgotICAgICAgICAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCi0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmROZXh0RmlsZVciLCB3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIEZpbmRDbG9zZShoRmluZEZpbGUpOwotICAgICAgICAgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwotCi0gICAgICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZENsb3NlIiwgd25hbWVidWYpOwotICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaEZpbmRGaWxlID0gRmluZEZpcnN0RmlsZVcod25hbWVidWYsICZ3RmlsZURhdGEpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkgeworICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgICAgIHJldHVybiBkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIC8qIFNraXAgb3ZlciAuIGFuZCAuLiAqLworICAgICAgICAgICAgaWYgKHdjc2NtcCh3RmlsZURhdGEuY0ZpbGVOYW1lLCBMIi4iKSAhPSAwICYmCisgICAgICAgICAgICAgICAgd2NzY21wKHdGaWxlRGF0YS5jRmlsZU5hbWUsIEwiLi4iKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSh3RmlsZURhdGEuY0ZpbGVOYW1lLCB3Y3NsZW4od0ZpbGVEYXRhLmNGaWxlTmFtZSkpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgICAgICAgICBkID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICAgICAgICAgIGQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgcmVzdWx0ID0gRmluZE5leHRGaWxlVyhoRmluZEZpbGUsICZ3RmlsZURhdGEpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIC8qIEZpbmROZXh0RmlsZSBzZXRzIGVycm9yIHRvIEVSUk9SX05PX01PUkVfRklMRVMgaWYKKyAgICAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCisgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmROZXh0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgRmluZENsb3NlKGhGaW5kRmlsZSk7CisgICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKKworICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmRDbG9zZSIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZnJlZSh3bmFtZWJ1Zik7CisgICAgICAgIHJldHVybiBkOwogICAgIH0KLSNlbmRpZgorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldCM6bGlzdGRpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZidWZwdHIsICZsZW4pKQpAQCAtMjIxMSwxMyArMjE5NCwxNSBAQAogICAgICAgICBjaGFyIGNoID0gbmFtZWJ1ZltsZW4tMV07CiAgICAgICAgIGlmIChjaCAhPSBTRVAgJiYgY2ggIT0gQUxUU0VQICYmIGNoICE9ICc6JykKICAgICAgICAgICAgIG5hbWVidWZbbGVuKytdID0gJy8nOworICAgICAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOwogICAgIH0KLSAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOwogCiAgICAgaWYgKChkID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaEZpbmRGaWxlID0gRmluZEZpcnN0RmlsZShuYW1lYnVmLCAmRmlsZURhdGEpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKGhGaW5kRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQpAQCAtMjM0OSwxMSArMjMzNCwxNiBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0Omxpc3RkaXIiLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICgoZGlycCA9IG9wZW5kaXIobmFtZSkpID09IE5VTEwpIHsKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZGlycCA9IG9wZW5kaXIobmFtZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZGlycCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShuYW1lKTsKICAgICB9CiAgICAgaWYgKChkID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGNsb3NlZGlyKGRpcnApOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBQeU1lbV9GcmVlKG5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yMzY2LDcgKzIzNTYsOSBAQAogICAgICAgICAgICAgaWYgKGVycm5vID09IDApIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgICAgIGNsb3NlZGlyKGRpcnApOworICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShuYW1lKTsKICAgICAgICAgICAgIH0KQEAgLTI0MDcsNyArMjM5OSw5IEBACiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgY2xvc2VkaXIoZGlycCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBQeU1lbV9GcmVlKG5hbWUpOwogCiAgICAgcmV0dXJuIGQ7CkBAIC0yNDI2LDM3ICsyNDIwLDM1IEBACiAgICAgUHlfc3NpemVfdCBpbnNpemUgPSBzaXplb2YoaW5idWYpOwogICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIKjJdOwogICAgIGNoYXIgKnRlbXA7Ci0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5VW5pY29kZU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkgewotICAgICAgICAgICAgUHlfVU5JQ09ERSAqd3BhdGggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyk7Ci0gICAgICAgICAgICBQeV9VTklDT0RFIHdvdXRidWZbTUFYX1BBVEgqMl0sICp3b3V0YnVmcCA9IHdvdXRidWY7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3dGVtcDsKLSAgICAgICAgICAgIERXT1JEIHJlc3VsdDsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHdvdXRidWYpL3NpemVvZih3b3V0YnVmWzBdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPiBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pKSB7Ci0gICAgICAgICAgICAgICAgd291dGJ1ZnAgPSBtYWxsb2MocmVzdWx0ICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdvdXRidWZwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLCByZXN1bHQsIHdvdXRidWZwLCAmd3RlbXApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHdvdXRidWZwLCB3Y3NsZW4od291dGJ1ZnApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiR2V0RnVsbFBhdGhOYW1lVyIsIHdwYXRoKTsKLSAgICAgICAgICAgIGlmICh3b3V0YnVmcCAhPSB3b3V0YnVmKQotICAgICAgICAgICAgICAgIGZyZWUod291dGJ1ZnApOwotICAgICAgICAgICAgcmV0dXJuIHY7CisKKyAgICBQeVVuaWNvZGVPYmplY3QgKnBvOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkgeworICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKKyAgICAgICAgUHlfVU5JQ09ERSB3b3V0YnVmW01BWF9QQVRIKjJdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOworICAgICAgICBQeV9VTklDT0RFICp3dGVtcDsKKyAgICAgICAgRFdPUkQgcmVzdWx0OworICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvdXRidWYsICZ3dGVtcCk7CisgICAgICAgIGlmIChyZXN1bHQgPiBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pKSB7CisgICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICAgICAgaWYgKCF3b3V0YnVmcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUod291dGJ1ZnAsIHdjc2xlbih3b3V0YnVmcCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiR2V0RnVsbFBhdGhOYW1lVyIsIHdwYXRoKTsKKyAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCisgICAgICAgICAgICBmcmVlKHdvdXRidWZwKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotI2VuZGlmCisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJldCM6X2dldGZ1bGxwYXRobmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmaW5idWZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluc2l6ZSkpCkBAIC0yNDgzLDI0ICsyNDc1LDIyIEBACiAgICAgY2hhciAqcGF0aCA9IE5VTEw7CiAgICAgaW50IG1vZGUgPSAwNzc3OwogCi0jaWZkZWYgUHlfV0lOX1dJREVfRklMRU5BTUVTCi0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5VW5pY29kZU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfGk6bWtkaXIiLCAmcG8sICZtb2RlKSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcwotICAgICAgICAgICAgICAgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICByZXMgPSBDcmVhdGVEaXJlY3RvcnlXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSwgTlVMTCk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoIm1rZGlyIiwgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8aTpta2RpciIsICZwbywgJm1vZGUpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcworICAgICAgICAgICBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KKyAgICAgICAgcmVzID0gQ3JlYXRlRGlyZWN0b3J5VyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIE5VTEwpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoIXJlcykKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJta2RpciIsIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXR8aTpta2RpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRoLCAmbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjUxNyw3ICsyNTA3LDcgQEAKICAgICBQeU1lbV9GcmVlKHBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbHNlCisjZWxzZSAvKiBNU19XSU5ET1dTICovCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0fGk6bWtkaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmcGF0aCwgJm1vZGUpKQpAQCAtMjUzNCw3ICsyNTI0LDcgQEAKICAgICBQeU1lbV9GcmVlKHBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbmRpZgorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIH0KIAogCkBAIC0yNTkxLDI4ICsyNTgxLDI2IEBACiAgICAgUHlPYmplY3QgKm8xLCAqbzI7CiAgICAgY2hhciAqcDEsICpwMjsKICAgICBCT09MIHJlc3VsdDsKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpyZW5hbWUiLCAmbzEsICZvMikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpyZW5hbWUiLCAmbzEsICZvMikpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICghY29udmVydF90b191bmljb2RlKCZvMSkpCisgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8xKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8yKSkgeworICAgIGlmICghY29udmVydF90b191bmljb2RlKCZvMikpIHsKICAgICAgICAgUHlfREVDUkVGKG8xKTsKICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJlc3VsdCA9IE1vdmVGaWxlVyhQeVVuaWNvZGVfQXNVbmljb2RlKG8xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VuaWNvZGUobzIpKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgUHlfREVDUkVGKG8xKTsKLSAgICAgICAgUHlfREVDUkVGKG8yKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoInJlbmFtZSIsIE5VTEwpOwotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotZXJyb3I6Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXN1bHQgPSBNb3ZlRmlsZVcoUHlVbmljb2RlX0FzVW5pY29kZShvMSksCisgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VuaWNvZGUobzIpKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIFB5X0RFQ1JFRihvMSk7CisgICAgUHlfREVDUkVGKG8yKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJyZW5hbWUiLCBOVUxMKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7CitlcnJvcjoKKyAgICBQeUVycl9DbGVhcigpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3M6cmVuYW1lIiwgJnAxLCAmcDIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0yNzQwLDE1ICsyNzI4LDE5IEBACiAjZW5kaWYgLyogSEFWRV9VTkFNRSAqLwogCiBzdGF0aWMgaW50Ci1leHRyYWN0X3RpbWUoUHlPYmplY3QgKnQsIGxvbmcqIHNlYywgbG9uZyogdXNlYykKK2V4dHJhY3RfdGltZShQeU9iamVjdCAqdCwgdGltZV90KiBzZWMsIGxvbmcqIHVzZWMpCiB7Ci0gICAgbG9uZyBpbnR2YWw7CisgICAgdGltZV90IGludHZhbDsKICAgICBpZiAoUHlGbG9hdF9DaGVjayh0KSkgewogICAgICAgICBkb3VibGUgdHZhbCA9IFB5RmxvYXRfQXNEb3VibGUodCk7Ci0gICAgICAgIFB5T2JqZWN0ICppbnRvYmogPSBQeV9UWVBFKHQpLT50cF9hc19udW1iZXItPm5iX2ludCh0KTsKKyAgICAgICAgUHlPYmplY3QgKmludG9iaiA9IFB5TnVtYmVyX0xvbmcodCk7CiAgICAgICAgIGlmICghaW50b2JqKQogICAgICAgICAgICAgcmV0dXJuIC0xOworI2lmIFNJWkVPRl9USU1FX1QgPiBTSVpFT0ZfTE9ORworICAgICAgICBpbnR2YWwgPSBQeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKGludG9iaik7CisjZWxzZQogICAgICAgICBpbnR2YWwgPSBQeUludF9Bc0xvbmcoaW50b2JqKTsKKyNlbmRpZgogICAgICAgICBQeV9ERUNSRUYoaW50b2JqKTsKICAgICAgICAgaWYgKGludHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjc2MCw3ICsyNzUyLDExIEBACiAgICAgICAgICAgICAqdXNlYyA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyNpZiBTSVpFT0ZfVElNRV9UID4gU0laRU9GX0xPTkcKKyAgICBpbnR2YWwgPSBQeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKHQpOworI2Vsc2UKICAgICBpbnR2YWwgPSBQeUludF9Bc0xvbmcodCk7CisjZW5kaWYKICAgICBpZiAoaW50dmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAqc2VjID0gaW50dmFsOwpAQCAtMjc3NywzMSArMjc3MywzMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3V0aW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKmFyZzsKICAgICBQeVVuaWNvZGVPYmplY3QgKm9id3BhdGg7CiAgICAgd2NoYXJfdCAqd3BhdGggPSBOVUxMOwogICAgIGNoYXIgKmFwYXRoID0gTlVMTDsKICAgICBIQU5ETEUgaEZpbGU7Ci0gICAgbG9uZyBhdGltZXNlYywgbXRpbWVzZWMsIGF1c2VjLCBtdXNlYzsKKyAgICB0aW1lX3QgYXRpbWVzZWMsIG10aW1lc2VjOworICAgIGxvbmcgYXVzZWMsIG11c2VjOwogICAgIEZJTEVUSU1FIGF0aW1lLCBtdGltZTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVU98OnV0aW1lIiwgJm9id3BhdGgsICZhcmcpKSB7Ci0gICAgICAgICAgICB3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKG9id3BhdGgpOwotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlVyh3cGF0aCwgRklMRV9XUklURV9BVFRSSUJVVEVTLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJ1dGltZSIsIHdwYXRoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQorICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVT3w6dXRpbWUiLCAmb2J3cGF0aCwgJmFyZykpIHsKKyAgICAgICAgd3BhdGggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShvYndwYXRoKTsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKHdwYXRoLCBGSUxFX1dSSVRFX0FUVFJJQlVURVMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgT1BFTl9FWElTVElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJ1dGltZSIsIHdwYXRoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgIGlmICghd3BhdGgpIHsKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldE86dXRpbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJmFwYXRoLCAmYXJnKSkKQEAgLTI4MjYsNyArMjgyMiw3IEBACiAgICAgICAgICAgICAhU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJmF0aW1lKSkgewogICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CiAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soYXJnKSB8fCBQeVR1cGxlX1NpemUoYXJnKSAhPSAyKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC0yODQ5LDE2ICsyODQ1LDE4IEBACiAgICAgICAgICAgIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBmaWxlLCB3aGVuIGl0IGFsc28KICAgICAgICAgICAgY291bGQgYmUgdGhlIHRpbWUgc3RhbXAgdGhhdCBnaXZlcyBhIHByb2JsZW0uICovCiAgICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXN1bHQgPSBQeV9Ob25lOwogZG9uZToKICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbHNlIC8qIFB5X1dJTl9XSURFX0ZJTEVOQU1FUyAqLworI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogCiAgICAgY2hhciAqcGF0aCA9IE5VTEw7Ci0gICAgbG9uZyBhdGltZSwgbXRpbWUsIGF1c2VjLCBtdXNlYzsKKyAgICB0aW1lX3QgYXRpbWUsIG10aW1lOworICAgIGxvbmcgYXVzZWMsIG11c2VjOwogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QqIGFyZzsKIApAQCAtMjkyOSw3ICsyOTI3LDcgQEAKICN1bmRlZiBVVElNRV9BUkcKICN1bmRlZiBBVElNRQogI3VuZGVmIE1USU1FCi0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogfQogCiAKQEAgLTI5OTgsNiArMjk5NiwxMSBAQAogICAgICAgICBQeU1lbV9GcmVlKHBhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgaWYgKGFyZ2MgPCAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhlY3YoKSBhcmcgMiBtdXN0IG5vdCBiZSBlbXB0eSIpOworICAgICAgICBQeU1lbV9GcmVlKHBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7CiAgICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKQEAgLTM3MjEsNiArMzcyNCwxMCBAQAogI2Vsc2UKICNpZmRlZiBIQVZFX0xJQlVUSUxfSAogI2luY2x1ZGUgPGxpYnV0aWwuaD4KKyNlbHNlCisjaWZkZWYgSEFWRV9VVElMX0gKKyNpbmNsdWRlIDx1dGlsLmg+CisjZW5kaWYgLyogSEFWRV9VVElMX0ggKi8KICNlbmRpZiAvKiBIQVZFX0xJQlVUSUxfSCAqLwogI2VuZGlmIC8qIEhBVkVfUFRZX0ggKi8KICNpZmRlZiBIQVZFX1NUUk9QVFNfSApAQCAtMzkzOSw5ICszOTQ2LDkgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICAgICAgUHlPYmplY3QgKm8gPSBQeUludF9Gcm9tTG9uZygobG9uZylhbHRfZ3JvdXBsaXN0W2ldKTsKICAgICAgICAgICAgIGlmIChvID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocmVzdWx0LCBpLCBvKTsKICAgICAgICAgfQpAQCAtMzk1NSw2ICszOTYyLDMwIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfSU5JVEdST1VQUworUHlEb2NfU1RSVkFSKHBvc2l4X2luaXRncm91cHNfX2RvY19fLAorImluaXRncm91cHModXNlcm5hbWUsIGdpZCkgLT4gTm9uZVxuXG5cCitDYWxsIHRoZSBzeXN0ZW0gaW5pdGdyb3VwcygpIHRvIGluaXRpYWxpemUgdGhlIGdyb3VwIGFjY2VzcyBsaXN0IHdpdGggYWxsIG9mXG5cCit0aGUgZ3JvdXBzIG9mIHdoaWNoIHRoZSBzcGVjaWZpZWQgdXNlcm5hbWUgaXMgYSBtZW1iZXIsIHBsdXMgdGhlIHNwZWNpZmllZFxuXAorZ3JvdXAgaWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9pbml0Z3JvdXBzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICp1c2VybmFtZTsKKyAgICBsb25nIGdpZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2w6aW5pdGdyb3VwcyIsICZ1c2VybmFtZSwgJmdpZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGluaXRncm91cHModXNlcm5hbWUsIChnaWRfdCkgZ2lkKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9HRVRQR0lECiBQeURvY19TVFJWQVIocG9zaXhfZ2V0cGdpZF9fZG9jX18sCiAiZ2V0cGdpZChwaWQpIC0+IHBnaWRcblxuXApAQCAtNDEyMyw2ICs0MTU0LDUzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKK1B5RG9jX1NUUlZBUih3aW4zMl9raWxsX19kb2NfXywKKyJraWxsKHBpZCwgc2lnKVxuXG5cCitLaWxsIGEgcHJvY2VzcyB3aXRoIGEgc2lnbmFsLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgord2luMzJfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBEV09SRCBwaWQsIHNpZywgZXJyOworICAgIEhBTkRMRSBoYW5kbGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImtrOmtpbGwiLCAmcGlkLCAmc2lnKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBDb25zb2xlIHByb2Nlc3NlcyB3aGljaCBzaGFyZSBhIGNvbW1vbiBjb25zb2xlIGNhbiBiZSBzZW50IENUUkwrQyBvcgorICAgICAgIENUUkwrQlJFQUsgZXZlbnRzLCBwcm92aWRlZCB0aGV5IGhhbmRsZSBzYWlkIGV2ZW50cy4gKi8KKyAgICBpZiAoc2lnID09IENUUkxfQ19FVkVOVCB8fCBzaWcgPT0gQ1RSTF9CUkVBS19FVkVOVCkgeworICAgICAgICBpZiAoR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50KHNpZywgcGlkKSA9PSAwKSB7CisgICAgICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0KKworICAgIC8qIElmIHRoZSBzaWduYWwgaXMgb3V0c2lkZSBvZiB3aGF0IEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudCBjYW4gdXNlLAorICAgICAgIGF0dGVtcHQgdG8gb3BlbiBhbmQgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLworICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIHBpZCk7CisgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisKKyAgICBpZiAoVGVybWluYXRlUHJvY2VzcyhoYW5kbGUsIHNpZykgPT0gMCkgeworICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgcmVzdWx0ID0gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CisgICAgfQorCisgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKwogI2lmZGVmIEhBVkVfUExPQ0sKIAogI2lmZGVmIEhBVkVfU1lTX0xPQ0tfSApAQCAtNjMxOSwyMiArNjM5NywyMCBAQAogICAgIGludCBmZDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpfGk6bWtkaXIiLCAmcG8sICZmbGFnLCAmbW9kZSkpIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIE9LIHdpdGhvdXQgdGhyZWFkCi0gICAgICAgICAgICAgICBsb2NrIGFzIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLwotICAgICAgICAgICAgZmQgPSBfd29wZW4oUHlVbmljb2RlX0FTX1VOSUNPREUocG8pLCBmbGFnLCBtb2RlKTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBpZiAoZmQgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKWZkKTsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpfGk6bWtkaXIiLCAmcG8sICZmbGFnLCAmbW9kZSkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZAorICAgICAgICAgICBsb2NrIGFzIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLworICAgICAgICBmZCA9IF93b3BlbihQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGZsYWcsIG1vZGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZylmZCk7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0aXxpIiwKQEAgLTYzNjIsNiArNjQzOCw4IEBACiAgICAgaW50IGZkLCByZXM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmNsb3NlIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gY2xvc2UoZmQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC02Mzg0LDcgKzY0NjIsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZm9yIChpID0gZmRfZnJvbTsgaSA8IGZkX3RvOyBpKyspCi0gICAgICAgIGNsb3NlKGkpOworICAgICAgICBpZiAoX1B5VmVyaWZ5X2ZkKGkpKQorICAgICAgICAgICAgY2xvc2UoaSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTY0MDAsNiArNjQ3OSw4IEBACiAgICAgaW50IGZkOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkdXAiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBmZCA9IGR1cChmZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTY0MTksNiArNjUwMCw4IEBACiAgICAgaW50IGZkLCBmZDIsIHJlczsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmR1cDIiLCAmZmQsICZmZDIpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZF9kdXAyKGZkLCBmZDIpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtNjQ2Myw2ICs2NTQ2LDggQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CkBAIC02NDk5LDYgKzY1ODQsMTAgQEAKICAgICBidWZmZXIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIHNpemUpOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOworICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG4gPSByZWFkKGZkLCBQeVN0cmluZ19Bc1N0cmluZyhidWZmZXIpLCBzaXplKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtNjUyNSwxMCArNjYxNCwxNCBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpcyo6d3JpdGUiLCAmZmQsICZwYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChzaXplX3QpcGJ1Zi5sZW4pOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHNpemUpOwpAQCAtNjU1MSw2ICs2NjQ0LDggQEAKICAgICAvKiBvbiBPcGVuVk1TIHdlIG11c3QgZW5zdXJlIHRoYXQgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIHRvIHRoZSBmaWxlICovCiAgICAgZnN5bmMoZmQpOwogI2VuZGlmCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gRlNUQVQoZmQsICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTY1OTMsNiArNjY4OCw4IEBACiAgICAgICAgIFB5TWVtX0ZSRUUobW9kZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKEhBVkVfRkNOVExfSCkKICAgICBpZiAobW9kZVswXSA9PSAnYScpIHsKQEAgLTY2MzIsNiArNjcyOSw4IEBACiAgICAgaW50IGZkOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTppc2F0dHkiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpc2F0dHkoZmQpKTsKIH0KIApAQCAtNjgwNiwxMCArNjkwNSw4IEBACiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGZ0cnVuY2F0ZShmZCwgbGVuZ3RoKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC03MjEwLDEzICs3MzA3LDE3IEBACiAgICAgICAgICAgICAgICAgICAgInRlbXBuYW0gaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgcmlzayB0byB5b3VyIHByb2dyYW0iKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJ0ZW1wbmFtIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54OyAiCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHRlbXBmaWxlIG1vZHVsZSIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgbmFtZSA9IF90ZW1wbmFtKGRpciwgcGZ4KTsKICNlbHNlCiAgICAgbmFtZSA9IHRlbXBuYW0oZGlyLCBwZngpOwogI2VuZGlmCiAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhuYW1lKTsKICAgICBmcmVlKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC03MjM0LDkgKzczMzUsMTMgQEAKIHsKICAgICBGSUxFICpmcDsKIAorICAgIGlmIChQeUVycl9XYXJuUHkzaygidG1wZmlsZSBoYXMgYmVlbiByZW1vdmVkIGluIDMueDsgIgorICAgICAgICAgICAgICAgICAgICAgICAidXNlIHRoZSB0ZW1wZmlsZSBtb2R1bGUiLCAxKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZnAgPSB0bXBmaWxlKCk7CiAgICAgaWYgKGZwID09IE5VTEwpCi0gICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeUZpbGVfRnJvbUZpbGUoZnAsICI8dG1wZmlsZT4iLCAidytiIiwgZmNsb3NlKTsKIH0KICNlbmRpZgpAQCAtNzI1NywyMiArNzM2MiwyNiBAQAogICAgICAgICAgICAgICAgICAgICJ0bXBuYW0gaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgcmlzayB0byB5b3VyIHByb2dyYW0iKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCJ0bXBuYW0gaGFzIGJlZW4gcmVtb3ZlZCBpbiAzLng7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgInVzZSB0aGUgdGVtcGZpbGUgbW9kdWxlIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogI2lmZGVmIFVTRV9UTVBOQU1fUgogICAgIG5hbWUgPSB0bXBuYW1fcihidWZmZXIpOwogI2Vsc2UKICAgICBuYW1lID0gdG1wbmFtKGJ1ZmZlcik7CiAjZW5kaWYKICAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgUHlPYmplY3QgKmVyciA9IFB5X0J1aWxkVmFsdWUoImlzIiwgMCwKKyAgICAgICAgUHlPYmplY3QgKmVyciA9IFB5X0J1aWxkVmFsdWUoImlzIiwgMCwKICNpZmRlZiBVU0VfVE1QTkFNX1IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBOVUxMIGZyb20gdG1wbmFtX3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIE5VTEwgZnJvbSB0bXBuYW1fciIKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgTlVMTCBmcm9tIHRtcG5hbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgTlVMTCBmcm9tIHRtcG5hbSIKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIGVycik7Ci0gICAgUHlfWERFQ1JFRihlcnIpOwotICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfT1NFcnJvciwgZXJyKTsKKyAgICAgICAgUHlfWERFQ1JFRihlcnIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmZmVyKTsKIH0KQEAgLTczMDAsMzMgKzc0MDksMzMgQEAKICAgICAgICAgICAgICAgc2l6ZV90IHRhYmxlc2l6ZSkKIHsKICAgICBpZiAoUHlJbnRfQ2hlY2soYXJnKSkgewotICAgICp2YWx1ZXAgPSBQeUludF9BU19MT05HKGFyZyk7Ci0gICAgcmV0dXJuIDE7CisgICAgICAgICp2YWx1ZXAgPSBQeUludF9BU19MT05HKGFyZyk7CisgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBpZiAoUHlTdHJpbmdfQ2hlY2soYXJnKSkgewotICAgIC8qIGxvb2sgdXAgdGhlIHZhbHVlIGluIHRoZSB0YWJsZSB1c2luZyBhIGJpbmFyeSBzZWFyY2ggKi8KLSAgICBzaXplX3QgbG8gPSAwOworICAgICAgICAvKiBsb29rIHVwIHRoZSB2YWx1ZSBpbiB0aGUgdGFibGUgdXNpbmcgYSBiaW5hcnkgc2VhcmNoICovCisgICAgICAgIHNpemVfdCBsbyA9IDA7CiAgICAgICAgIHNpemVfdCBtaWQ7Ci0gICAgc2l6ZV90IGhpID0gdGFibGVzaXplOwotICAgIGludCBjbXA7Ci0gICAgY2hhciAqY29uZm5hbWUgPSBQeVN0cmluZ19BU19TVFJJTkcoYXJnKTsKLSAgICB3aGlsZSAobG8gPCBoaSkgewotICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyOwotICAgICAgICBjbXAgPSBzdHJjbXAoY29uZm5hbWUsIHRhYmxlW21pZF0ubmFtZSk7Ci0gICAgICAgIGlmIChjbXAgPCAwKQotICAgICAgICBoaSA9IG1pZDsKLSAgICAgICAgZWxzZSBpZiAoY21wID4gMCkKLSAgICAgICAgbG8gPSBtaWQgKyAxOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgKnZhbHVlcCA9IHRhYmxlW21pZF0udmFsdWU7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICBzaXplX3QgaGkgPSB0YWJsZXNpemU7CisgICAgICAgIGludCBjbXA7CisgICAgICAgIGNoYXIgKmNvbmZuYW1lID0gUHlTdHJpbmdfQVNfU1RSSU5HKGFyZyk7CisgICAgICAgIHdoaWxlIChsbyA8IGhpKSB7CisgICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyOworICAgICAgICAgICAgY21wID0gc3RyY21wKGNvbmZuYW1lLCB0YWJsZVttaWRdLm5hbWUpOworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgaGkgPSBtaWQ7CisgICAgICAgICAgICBlbHNlIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIGxvID0gbWlkICsgMTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICp2YWx1ZXAgPSB0YWJsZVttaWRdLnZhbHVlOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWNvZ25pemVkIGNvbmZpZ3VyYXRpb24gbmFtZSIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVucmVjb2duaXplZCBjb25maWd1cmF0aW9uIG5hbWUiKTsKICAgICB9CiAgICAgZWxzZQotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJjb25maWd1cmF0aW9uIG5hbWVzIG11c3QgYmUgc3RyaW5ncyBvciBpbnRlZ2VycyIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpZ3VyYXRpb24gbmFtZXMgbXVzdCBiZSBzdHJpbmdzIG9yIGludGVnZXJzIik7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTc0MDksMTQgKzc1MTgsMTQgQEAKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyY6ZnBhdGhjb25mIiwgJmZkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfcGF0aF9jb25mbmFtZSwgJm5hbWUpKSB7Ci0gICAgbG9uZyBsaW1pdDsKKyAgICAgICAgbG9uZyBsaW1pdDsKIAotICAgIGVycm5vID0gMDsKLSAgICBsaW1pdCA9IGZwYXRoY29uZihmZCwgbmFtZSk7Ci0gICAgaWYgKGxpbWl0ID09IC0xICYmIGVycm5vICE9IDApCi0gICAgICAgIHBvc2l4X2Vycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBQeUludF9Gcm9tTG9uZyhsaW1pdCk7CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgbGltaXQgPSBmcGF0aGNvbmYoZmQsIG5hbWUpOworICAgICAgICBpZiAobGltaXQgPT0gLTEgJiYgZXJybm8gIT0gMCkKKyAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IFB5SW50X0Zyb21Mb25nKGxpbWl0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0NDQsMTAgKzc1NTMsMTAgQEAKICAgICBsaW1pdCA9IHBhdGhjb25mKHBhdGgsIG5hbWUpOwogICAgIGlmIChsaW1pdCA9PSAtMSAmJiBlcnJubyAhPSAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCi0gICAgICAgIC8qIGNvdWxkIGJlIGEgcGF0aCBvciBuYW1lIHByb2JsZW0gKi8KLSAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgICAgIC8qIGNvdWxkIGJlIGEgcGF0aCBvciBuYW1lIHByb2JsZW0gKi8KKyAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoKTsKKyAgICAgICAgICAgIHBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUocGF0aCk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlJbnRfRnJvbUxvbmcobGltaXQpOwpAQCAtODIzNSwyMSArODM0NCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocG9zaXhfY29uc3RhbnRzX3BhdGhjb25mKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKHN0cnVjdCBjb25zdGRlZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoY29uZl9uYW1lcyIsIG1vZHVsZSkpCi0gICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0NPTkZTVFIKICAgICBpZiAoc2V0dXBfY29uZm5hbWVfdGFibGUocG9zaXhfY29uc3RhbnRzX2NvbmZzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwb3NpeF9jb25zdGFudHNfY29uZnN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihzdHJ1Y3QgY29uc3RkZWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZnN0cl9uYW1lcyIsIG1vZHVsZSkpCi0gICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1NZU0NPTkYKICAgICBpZiAoc2V0dXBfY29uZm5hbWVfdGFibGUocG9zaXhfY29uc3RhbnRzX3N5c2NvbmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwb3NpeF9jb25zdGFudHNfc3lzY29uZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZihzdHJ1Y3QgY29uc3RkZWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzY29uZl9uYW1lcyIsIG1vZHVsZSkpCi0gICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAjZW5kaWYKICAgICByZXR1cm4gMDsKIH0KQEAgLTgyOTUsNDIgKzg0MDQsMzggQEAKICAgICBjaGFyICpmaWxlcGF0aDsKICAgICBjaGFyICpvcGVyYXRpb24gPSBOVUxMOwogICAgIEhJTlNUQU5DRSByYzsKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnVuaXBhdGgsICp3b3BlcmF0aW9uID0gTlVMTDsKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfHM6c3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bmlwYXRoLCAmb3BlcmF0aW9uKSkgeworCisgICAgUHlPYmplY3QgKnVuaXBhdGgsICp3b3BlcmF0aW9uID0gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8czpzdGFydGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5pcGF0aCwgJm9wZXJhdGlvbikpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgZ290byBub3JtYWw7CisgICAgfQorCisgICAgaWYgKG9wZXJhdGlvbikgeworICAgICAgICB3b3BlcmF0aW9uID0gUHlVbmljb2RlX0RlY29kZUFTQ0lJKG9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ob3BlcmF0aW9uKSwgTlVMTCk7CisgICAgICAgIGlmICghd29wZXJhdGlvbikgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbiA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIG5vcm1hbDsKICAgICAgICAgfQotCi0KLSAgICAgICAgaWYgKG9wZXJhdGlvbikgewotICAgICAgICAgICAgd29wZXJhdGlvbiA9IFB5VW5pY29kZV9EZWNvZGVBU0NJSShvcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihvcGVyYXRpb24pLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICghd29wZXJhdGlvbikgewotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmMgPSBTaGVsbEV4ZWN1dGVXKChIV05EKTAsIHdvcGVyYXRpb24gPyBQeVVuaWNvZGVfQVNfVU5JQ09ERSh3b3BlcmF0aW9uKSA6IDAsCi0gICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmlwYXRoKSwKLSAgICAgICAgICAgIE5VTEwsIE5VTEwsIFNXX1NIT1dOT1JNQUwpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgICAgIFB5X1hERUNSRUYod29wZXJhdGlvbik7Ci0gICAgICAgIGlmIChyYyA8PSAoSElOU1RBTkNFKTMyKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZXJydmFsID0gd2luMzJfZXJyb3JfdW5pY29kZSgic3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXBhdGgpKTsKLSAgICAgICAgICAgIHJldHVybiBlcnJ2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9Ci0jZW5kaWYKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IFNoZWxsRXhlY3V0ZVcoKEhXTkQpMCwgd29wZXJhdGlvbiA/IFB5VW5pY29kZV9BU19VTklDT0RFKHdvcGVyYXRpb24pIDogMCwKKyAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pcGF0aCksCisgICAgICAgIE5VTEwsIE5VTEwsIFNXX1NIT1dOT1JNQUwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBQeV9YREVDUkVGKHdvcGVyYXRpb24pOworICAgIGlmIChyYyA8PSAoSElOU1RBTkNFKTMyKSB7CisgICAgICAgIFB5T2JqZWN0ICplcnJ2YWwgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGFydGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmlwYXRoKSk7CisgICAgICAgIHJldHVybiBlcnJ2YWw7CisgICAgfQorICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKIAogbm9ybWFsOgogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXR8czpzdGFydGZpbGUiLApAQCAtODM1MCw3ICs4NDU1LDcgQEAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKIFB5RG9jX1NUUlZBUihwb3NpeF9nZXRsb2FkYXZnX19kb2NfXywKQEAgLTgzNjQsMTAgKzg0NjksMTAgQEAKIHsKICAgICBkb3VibGUgbG9hZGF2Z1szXTsKICAgICBpZiAoZ2V0bG9hZGF2Zyhsb2FkYXZnLCAzKSE9MykgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLCAiTG9hZCBhdmVyYWdlcyBhcmUgdW5vYnRhaW5hYmxlIik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLCAiTG9hZCBhdmVyYWdlcyBhcmUgdW5vYnRhaW5hYmxlIik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJkZGQiLCBsb2FkYXZnWzBdLCBsb2FkYXZnWzFdLCBsb2FkYXZnWzJdKTsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImRkZCIsIGxvYWRhdmdbMF0sIGxvYWRhdmdbMV0sIGxvYWRhdmdbMl0pOwogfQogI2VuZGlmCiAKQEAgLTg0ODMsNiArODU4OCw4MiBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NFVFJFU1VJRAorUHlEb2NfU1RSVkFSKHBvc2l4X3NldHJlc3VpZF9fZG9jX18sCisic2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpXG5cblwKK1NldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldHJlc3VpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIC8qIFdlIGFzc3VtZSB1aWRfdCBpcyBubyBsYXJnZXIgdGhhbiBhIGxvbmcuICovCisgICAgbG9uZyBydWlkLCBldWlkLCBzdWlkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGxsIiwgJnJ1aWQsICZldWlkLCAmc3VpZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZXRyZXN1aWQocnVpZCwgZXVpZCwgc3VpZCkgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TRVRSRVNHSUQKK1B5RG9jX1NUUlZBUihwb3NpeF9zZXRyZXNnaWRfX2RvY19fLAorInNldHJlc2dpZChyZ2lkLCBlZ2lkLCBzZ2lkKVxuXG5cCitTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIGdyb3VwIGlkcy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfc2V0cmVzZ2lkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogV2UgYXNzdW1lIHVpZF90IGlzIG5vIGxhcmdlciB0aGFuIGEgbG9uZy4gKi8KKyAgICBsb25nIHJnaWQsIGVnaWQsIHNnaWQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsbGwiLCAmcmdpZCwgJmVnaWQsICZzZ2lkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNldHJlc2dpZChyZ2lkLCBlZ2lkLCBzZ2lkKSA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0dFVFJFU1VJRAorUHlEb2NfU1RSVkFSKHBvc2l4X2dldHJlc3VpZF9fZG9jX18sCisiZ2V0cmVzdWlkKCkgLT4gKHJ1aWQsIGV1aWQsIHN1aWQpXG5cblwKK0dldCB0dXBsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldHJlc3VpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgdWlkX3QgcnVpZCwgZXVpZCwgc3VpZDsKKyAgICBsb25nIGxfcnVpZCwgbF9ldWlkLCBsX3N1aWQ7CisgICAgaWYgKGdldHJlc3VpZCgmcnVpZCwgJmV1aWQsICZzdWlkKSA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIC8qIEZvcmNlIHRoZSB2YWx1ZXMgaW50byBsb25nJ3MgYXMgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB1aWRfdC4gKi8KKyAgICBsX3J1aWQgPSBydWlkOworICAgIGxfZXVpZCA9IGV1aWQ7CisgICAgbF9zdWlkID0gc3VpZDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGxsbCkiLCBsX3J1aWQsIGxfZXVpZCwgbF9zdWlkKTsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRSRVNHSUQKK1B5RG9jX1NUUlZBUihwb3NpeF9nZXRyZXNnaWRfX2RvY19fLAorImdldHJlc2dpZCgpIC0+IChyZ2lkLCBlZ2lkLCBzZ2lkKVxuXG5cCitHZXQgdHVwbGUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIGdyb3VwIGlkcy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcG9zaXhfZ2V0cmVzZ2lkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICB1aWRfdCByZ2lkLCBlZ2lkLCBzZ2lkOworICAgIGxvbmcgbF9yZ2lkLCBsX2VnaWQsIGxfc2dpZDsKKyAgICBpZiAoZ2V0cmVzZ2lkKCZyZ2lkLCAmZWdpZCwgJnNnaWQpIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgLyogRm9yY2UgdGhlIHZhbHVlcyBpbnRvIGxvbmcncyBhcyB3ZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIHVpZF90LiAqLworICAgIGxfcmdpZCA9IHJnaWQ7CisgICAgbF9lZ2lkID0gZWdpZDsKKyAgICBsX3NnaWQgPSBzZ2lkOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobGxsKSIsIGxfcmdpZCwgbF9lZ2lkLCBsX3NnaWQpOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU1ldGhvZERlZiBwb3NpeF9tZXRob2RzW10gPSB7CiAgICAgeyJhY2Nlc3MiLCAgICAgICAgICBwb3NpeF9hY2Nlc3MsIE1FVEhfVkFSQVJHUywgcG9zaXhfYWNjZXNzX19kb2NfX30sCiAjaWZkZWYgSEFWRV9UVFlOQU1FCkBAIC04NjIxLDYgKzg4MDIsNyBAQAogICAgIHsicG9wZW4zIiwgICAgICAgICAgd2luMzJfcG9wZW4zLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicG9wZW40IiwgICAgICAgICAgd2luMzJfcG9wZW40LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3RhcnRmaWxlIiwgICAgICAgd2luMzJfc3RhcnRmaWxlLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX3N0YXJ0ZmlsZV9fZG9jX199LAorICAgIHsia2lsbCIsICAgIHdpbjMyX2tpbGwsIE1FVEhfVkFSQVJHUywgd2luMzJfa2lsbF9fZG9jX199LAogI2Vsc2UKICNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQogICAgIHsicG9wZW4yIiwgICAgICAgICAgb3MyZW14X3BvcGVuMiwgTUVUSF9WQVJBUkdTfSwKQEAgLTg2NTAsNiArODgzMiw5IEBACiAjaWZkZWYgSEFWRV9TRVRHUk9VUFMKICAgICB7InNldGdyb3VwcyIsICAgICAgIHBvc2l4X3NldGdyb3VwcywgTUVUSF9PLCBwb3NpeF9zZXRncm91cHNfX2RvY19ffSwKICNlbmRpZiAvKiBIQVZFX1NFVEdST1VQUyAqLworI2lmZGVmIEhBVkVfSU5JVEdST1VQUworICAgIHsiaW5pdGdyb3VwcyIsICAgICAgcG9zaXhfaW5pdGdyb3VwcywgTUVUSF9WQVJBUkdTLCBwb3NpeF9pbml0Z3JvdXBzX19kb2NfX30sCisjZW5kaWYgLyogSEFWRV9JTklUR1JPVVBTICovCiAjaWZkZWYgSEFWRV9HRVRQR0lECiAgICAgeyJnZXRwZ2lkIiwgICAgICAgICBwb3NpeF9nZXRwZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2dldHBnaWRfX2RvY19ffSwKICNlbmRpZiAvKiBIQVZFX0dFVFBHSUQgKi8KQEAgLTg3OTMsNiArODk3OCwxOSBAQAogICNpZmRlZiBfX1ZNUwogICAgIHsidXJhbmRvbSIsIHZtc191cmFuZG9tLCBNRVRIX1ZBUkFSR1MsIHZtc191cmFuZG9tX19kb2NfX30sCiAgI2VuZGlmCisjaWZkZWYgSEFWRV9TRVRSRVNVSUQKKyAgICB7InNldHJlc3VpZCIsICAgICAgIHBvc2l4X3NldHJlc3VpZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zZXRyZXN1aWRfX2RvY19ffSwKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0VUUkVTR0lECisgICAgeyJzZXRyZXNnaWQiLCAgICAgICBwb3NpeF9zZXRyZXNnaWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0cmVzZ2lkX19kb2NfX30sCisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVFJFU1VJRAorICAgIHsiZ2V0cmVzdWlkIiwgICAgICAgcG9zaXhfZ2V0cmVzdWlkLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0cmVzdWlkX19kb2NfX30sCisjZW5kaWYKKyNpZmRlZiBIQVZFX0dFVFJFU0dJRAorICAgIHsiZ2V0cmVzZ2lkIiwgICAgICAgcG9zaXhfZ2V0cmVzZ2lkLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0cmVzZ2lkX19kb2NfX30sCisjZW5kaWYKKwogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggYWUzNThlMC4uNjcyOWM4NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC05OCw3ICs5OCw3IEBACiAiZ2V0cHd1aWQodWlkKSAtPiAocHdfbmFtZSxwd19wYXNzd2QscHdfdWlkLFxuXAogICAgICAgICAgICAgICAgICAgcHdfZ2lkLHB3X2dlY29zLHB3X2Rpcixwd19zaGVsbClcblwKIFJldHVybiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZW50cnkgZm9yIHRoZSBnaXZlbiBudW1lcmljIHVzZXIgSUQuXG5cCi1TZWUgcHdkLl9fZG9jX18gZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKK1NlZSBoZWxwKHB3ZCkgZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHB3ZF9nZXRwd3VpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xMTksNyArMTE5LDcgQEAKICJnZXRwd25hbShuYW1lKSAtPiAocHdfbmFtZSxwd19wYXNzd2QscHdfdWlkLFxuXAogICAgICAgICAgICAgICAgICAgICBwd19naWQscHdfZ2Vjb3MscHdfZGlyLHB3X3NoZWxsKVxuXAogUmV0dXJuIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHVzZXIgbmFtZS5cblwKLVNlZSBwd2QuX19kb2NfXyBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworU2VlIGhlbHAocHdkKSBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogcHdkX2dldHB3bmFtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTE0MSw3ICsxNDEsNyBAQAogImdldHB3YWxsKCkgLT4gbGlzdF9vZl9lbnRyaWVzXG5cCiBSZXR1cm4gYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcywgXAogaW4gYXJiaXRyYXJ5IG9yZGVyLlxuXAotU2VlIHB3ZC5fX2RvY19fIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CitTZWUgaGVscChwd2QpIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBwd2RfZ2V0cHdhbGwoUHlPYmplY3QgKnNlbGYpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B5ZXhwYXQuYyBiL01vZHVsZXMvcHlleHBhdC5jCmluZGV4IDFlOWI4OWYuLjA1NTViNmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHlleHBhdC5jCisrKyBiL01vZHVsZXMvcHlleHBhdC5jCkBAIC0yNjEsNTIgKzI2MSwxMSBAQAogc3RhdGljIFB5Q29kZU9iamVjdCoKIGdldGNvZGUoZW51bSBIYW5kbGVyVHlwZXMgc2xvdCwgY2hhciogZnVuY19uYW1lLCBpbnQgbGluZW5vKQogewotICAgIFB5T2JqZWN0ICpjb2RlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbmFtZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm51bGx0dXBsZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKLQogICAgIGlmIChoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgIGNvZGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKLSAgICAgICAgaWYgKGNvZGUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICBuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmdW5jX25hbWUpOwotICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIG51bGx0dXBsZSA9IFB5VHVwbGVfTmV3KDApOwotICAgICAgICBpZiAobnVsbHR1cGxlID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgZmlsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKF9fRklMRV9fKTsKICAgICAgICAgaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGUgPQotICAgICAgICAgICAgUHlDb2RlX05ldygwLCAgICAgICAgICAgICAgIC8qIGFyZ2NvdW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgLyogbmxvY2FscyAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIHN0YWNrc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGNvZGUsICAgICAgICAgICAgLyogY29kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIGNvbnN0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIG5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogdmFybmFtZXMgKi8KLSNpZiBQWVRIT05fQVBJX1ZFUlNJT04gPj0gMTAxMAotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIGZyZWV2YXJzICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogY2VsbHZhcnMgKi8KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgICAgICAgIC8qIGZpbGVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgICAgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sICAgICAgICAgIC8qIGZpcnN0bGluZW5vICovCi0gICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICAgICAgLyogbG5vdGFiICovCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKLSAgICAgICAgUHlfREVDUkVGKG51bGx0dXBsZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgIFB5Q29kZV9OZXdFbXB0eShfX0ZJTEVfXywgZnVuY19uYW1lLCBsaW5lbm8pOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGU7Ci0gZmFpbGVkOgotICAgIFB5X1hERUNSRUYoY29kZSk7Ci0gICAgUHlfWERFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogI2lmZGVmIEZJWF9UUkFDRQpAQCAtNDU2LDYgKzQxNSw5IEBACiAgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKnRlbXA7CiAKKyAgICBpZiAoIWhhdmVfaGFuZGxlcihzZWxmLCBDaGFyYWN0ZXJEYXRhKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDEpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEwMzQsNyArOTk2LDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBieXRlc19yZWFkID0gcmVhZGluc3QoYnVmLCBCVUZfU0laRSwgcmVhZG1ldGhvZCk7CiAgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA8IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVhZG1ldGhvZCk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihyZWFkbWV0aG9kKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjA5NCw4ICsyMDU2LDggQEAKICAgICBjYXBpLlNldFVua25vd25FbmNvZGluZ0hhbmRsZXIgPSBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcjsKICAgICBjYXBpLlNldFVzZXJEYXRhID0gWE1MX1NldFVzZXJEYXRhOwogCi0gICAgLyogZXhwb3J0IGFzIGNvYmplY3QgKi8KLSAgICBjYXBpX29iamVjdCA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cigmY2FwaSwgTlVMTCk7CisgICAgLyogZXhwb3J0IHVzaW5nIGNhcHN1bGUgKi8KKyAgICBjYXBpX29iamVjdCA9IFB5Q2Fwc3VsZV9OZXcoJmNhcGksIFB5RXhwYXRfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKICAgICBpZiAoY2FwaV9vYmplY3QpCiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXhwYXRfQ0FQSSIsIGNhcGlfb2JqZWN0KTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcmVhZGxpbmUuYyBiL01vZHVsZXMvcmVhZGxpbmUuYwppbmRleCAwMzhiNGQ2Li5iNWUyNThkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3JlYWRsaW5lLmMKKysrIGIvTW9kdWxlcy9yZWFkbGluZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaWYgZGVmaW5lZChfUkxfRlVOQ1RJT05fVFlQRURFRikKIGV4dGVybiBjaGFyICoqY29tcGxldGlvbl9tYXRjaGVzKGNoYXIgKiwgcmxfY29tcGVudHJ5X2Z1bmNfdCAqKTsKICNlbHNlCisKICNpZiAhZGVmaW5lZChfX0FQUExFX18pCiBleHRlcm4gY2hhciAqKmNvbXBsZXRpb25fbWF0Y2hlcyhjaGFyICosIENQRnVuY3Rpb24gKik7CiAjZW5kaWYKQEAgLTM1NSw2ICszNTYsMzggQEAKICJzZXRfY29tcGxldGVyX2RlbGltcyhzdHJpbmcpIC0+IE5vbmVcblwKIHNldCB0aGUgcmVhZGxpbmUgd29yZCBkZWxpbWl0ZXJzIGZvciB0YWItY29tcGxldGlvbiIpOwogCisvKiBfcHlfZnJlZV9oaXN0b3J5X2VudHJ5OiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGZyZWUgYSBoaXN0b3J5IGVudHJ5LiAqLworCisjaWYgZGVmaW5lZChSTF9SRUFETElORV9WRVJTSU9OKSAmJiBSTF9SRUFETElORV9WRVJTSU9OID49IDB4MDUwMAorCisvKiBSZWFkbGluZSB2ZXJzaW9uID49IDUuMCBpbnRyb2R1Y2VkIGEgdGltZXN0YW1wIGZpZWxkIGludG8gdGhlIGhpc3RvcnkgZW50cnkKKyAgIHN0cnVjdHVyZTsgdGhpcyBuZWVkcyB0byBiZSBmcmVlZCB0byBhdm9pZCBhIG1lbW9yeSBsZWFrLiAgVGhpcyB2ZXJzaW9uIG9mCisgICByZWFkbGluZSBhbHNvIGludHJvZHVjZWQgdGhlIGhhbmR5ICdmcmVlX2hpc3RvcnlfZW50cnknIGZ1bmN0aW9uLCB3aGljaAorICAgdGFrZXMgY2FyZSBvZiB0aGUgdGltZXN0YW1wLiAqLworCitzdGF0aWMgdm9pZAorX3B5X2ZyZWVfaGlzdG9yeV9lbnRyeShISVNUX0VOVFJZICplbnRyeSkKK3sKKyAgICBoaXN0ZGF0YV90IGRhdGEgPSBmcmVlX2hpc3RvcnlfZW50cnkoZW50cnkpOworICAgIGZyZWUoZGF0YSk7Cit9CisKKyNlbHNlCisKKy8qIE5vIGZyZWVfaGlzdG9yeV9lbnRyeSBmdW5jdGlvbjsgIGZyZWUgZXZlcnl0aGluZyBtYW51YWxseS4gKi8KKworc3RhdGljIHZvaWQKK19weV9mcmVlX2hpc3RvcnlfZW50cnkoSElTVF9FTlRSWSAqZW50cnkpCit7CisgICAgaWYgKGVudHJ5LT5saW5lKQorICAgICAgICBmcmVlKCh2b2lkICopZW50cnktPmxpbmUpOworICAgIGlmIChlbnRyeS0+ZGF0YSkKKyAgICAgICAgZnJlZShlbnRyeS0+ZGF0YSk7CisgICAgZnJlZShlbnRyeSk7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QgKgogcHlfcmVtb3ZlX2hpc3RvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMzc2LDEyICs0MDksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgaGlzdG9yeSBlbnRyeSAqLwotICAgIGlmIChlbnRyeS0+bGluZSkKLSAgICAgICAgZnJlZShlbnRyeS0+bGluZSk7Ci0gICAgaWYgKGVudHJ5LT5kYXRhKQotICAgICAgICBmcmVlKGVudHJ5LT5kYXRhKTsKLSAgICBmcmVlKGVudHJ5KTsKLQorICAgIF9weV9mcmVlX2hpc3RvcnlfZW50cnkoZW50cnkpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC00MTMsMTIgKzQ0MSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBvbGQgaGlzdG9yeSBlbnRyeSAqLwotICAgIGlmIChvbGRfZW50cnktPmxpbmUpCi0gICAgICAgIGZyZWUob2xkX2VudHJ5LT5saW5lKTsKLSAgICBpZiAob2xkX2VudHJ5LT5kYXRhKQotICAgICAgICBmcmVlKG9sZF9lbnRyeS0+ZGF0YSk7Ci0gICAgZnJlZShvbGRfZW50cnkpOwotCisgICAgX3B5X2ZyZWVfaGlzdG9yeV9lbnRyeShvbGRfZW50cnkpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC00ODksNiArNTEyLDI1IEBACiBcblwKIFJldHVybnMgY3VycmVudCBjb21wbGV0ZXIgZnVuY3Rpb24uIik7CiAKKy8qIFByaXZhdGUgZnVuY3Rpb24gdG8gZ2V0IGN1cnJlbnQgbGVuZ3RoIG9mIGhpc3RvcnkuICBYWFggSXQgbWF5IGJlCisgKiBwb3NzaWJsZSB0byByZXBsYWNlIHRoaXMgd2l0aCBhIGRpcmVjdCB1c2Ugb2YgaGlzdG9yeV9sZW5ndGggaW5zdGVhZCwKKyAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIEJTRCdzIGxpYmVkaXQga2VlcHMgaGlzdG9yeV9sZW5ndGggdXAgdG8gZGF0ZS4KKyAqIFNlZSBpc3N1ZSAjODA2NS4qLworCitzdGF0aWMgaW50CitfcHlfZ2V0X2hpc3RvcnlfbGVuZ3RoKHZvaWQpCit7CisgICAgSElTVE9SWV9TVEFURSAqaGlzdF9zdCA9IGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUoKTsKKyAgICBpbnQgbGVuZ3RoID0gaGlzdF9zdC0+bGVuZ3RoOworICAgIC8qIHRoZSBoaXN0b3J5IGRvY3MgZG9uJ3Qgc2F5IHNvLCBidXQgdGhlIGFkZHJlc3Mgb2YgaGlzdF9zdCBjaGFuZ2VzIGVhY2gKKyAgICAgICB0aW1lIGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUgaXMgY2FsbGVkIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MKKyAgICAgICBmcmVzaGx5IG1hbGxvYydkIG1lbW9yeS4uLiAgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBhZGRyZXNzIG9mIHRoZSBsYXN0CisgICAgICAgbGluZSBzdGF5cyB0aGUgc2FtZSBhcyBsb25nIGFzIGhpc3RvcnkgaXNuJ3QgZXh0ZW5kZWQsIHNvIGl0IGFwcGVhcnMgdG8KKyAgICAgICBiZSBtYWxsb2MnZCBidXQgbWFuYWdlZCBieSB0aGUgaGlzdG9yeSBwYWNrYWdlLi4uICovCisgICAgZnJlZShoaXN0X3N0KTsKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCiAvKiBFeHBvcnRlZCBmdW5jdGlvbiB0byBnZXQgYW55IGVsZW1lbnQgb2YgaGlzdG9yeSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTA3LDkgKzU0OSw3IEBACiAgICAgICAgICAqIGNvZGUgZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZQogICAgICAgICAgKiBkaWZmZXJlbmNlLgogICAgICAgICAgKi8KLSAgICAgICAgSElTVE9SWV9TVEFURSAqaGlzdF9zdDsKLSAgICAgICAgaGlzdF9zdCA9IGhpc3RvcnlfZ2V0X2hpc3Rvcnlfc3RhdGUoKTsKLQorICAgICAgICBpbnQgbGVuZ3RoID0gX3B5X2dldF9oaXN0b3J5X2xlbmd0aCgpOwogICAgICAgICBpZHggLS07CiAKICAgICAgICAgLyoKQEAgLTUxNyw3ICs1NTcsNyBAQAogICAgICAgICAgKiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCB0aGVyZWZvcmUKICAgICAgICAgICogdGVzdCBmb3IgdGhhdCBhbmQgZmFpbCBncmFjZWZ1bGx5LgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IGhpc3Rfc3QtPmxlbmd0aCkgeworICAgICAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICAgICAgfQogICAgIH0KQEAgLTUzOSwxMCArNTc5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIEhJU1RPUllfU1RBVEUgKmhpc3Rfc3Q7Ci0KLSAgICBoaXN0X3N0ID0gaGlzdG9yeV9nZXRfaGlzdG9yeV9zdGF0ZSgpOwotICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhoaXN0X3N0ID8gKGxvbmcpIGhpc3Rfc3QtPmxlbmd0aCA6IChsb25nKSAwKTsKKyAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpX3B5X2dldF9oaXN0b3J5X2xlbmd0aCgpKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCwKQEAgLTczOCwxMyArNzc1LDEzIEBACiAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOwogCi0gICAgUHlfREVDUkVGKG0pLCBtPU5VTEw7CisgICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CiAKICAgICBpZiAociA9PSBOVUxMIHx8CiAgICAgICAgIChyICE9IFB5X05vbmUgJiYgUHlJbnRfQXNMb25nKHIpID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIFB5X1hERUNSRUYociksIHI9TlVMTDsKKyAgICBQeV9YREVDUkVGKHIpOyByPU5VTEw7CiAKICAgICBpZiAoMCkgewogICAgIGVycm9yOgpAQCAtODI4LDYgKzg2NSwxNCBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJub3QgZW5vdWdoIG1lbW9yeSB0byBzYXZlIGxvY2FsZSIpOwogI2VuZGlmCiAKKyNpZmRlZiBfX0FQUExFX18KKyAgICAvKiB0aGUgbGliZWRpdCByZWFkbGluZSBlbXVsYXRpb24gcmVzZXRzIGtleSBiaW5kaW5ncyBldGMgCisgICAgICogd2hlbiBjYWxsaW5nIHJsX2luaXRpYWxpemUuICBTbyBjYWxsIGl0IHVwZnJvbnQKKyAgICAgKi8KKyAgICBpZiAodXNpbmdfbGliZWRpdF9lbXVsYXRpb24pCisgICAgICAgIHJsX2luaXRpYWxpemUoKTsKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKwogICAgIHVzaW5nX2hpc3RvcnkoKTsKIAogICAgIHJsX3JlYWRsaW5lX25hbWUgPSAicHl0aG9uIjsKQEAgLTg1OSw4ICs5MDQsMTMgQEAKICAgICAgKiBYWFg6IEEgYnVnIGluIHRoZSByZWFkbGluZS0yLjIgbGlicmFyeSBjYXVzZXMgYSBtZW1vcnkgbGVhawogICAgICAqIGluc2lkZSB0aGlzIGZ1bmN0aW9uLiAgTm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQuCiAgICAgICovCi0gICAgcmxfaW5pdGlhbGl6ZSgpOwotCisjaWZkZWYgX19BUFBMRV9fCisgICAgaWYgKHVzaW5nX2xpYmVkaXRfZW11bGF0aW9uKQorCXJsX3JlYWRfaW5pdF9maWxlKE5VTEwpOworICAgIGVsc2UKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKyAgICAgICAgcmxfaW5pdGlhbGl6ZSgpOworICAgIAogICAgIFJFU1RPUkVfTE9DQUxFKHNhdmVkX2xvY2FsZSkKIH0KIApAQCAtMTAyMiwzMCArMTA3MiwyMyBAQAogICAgIC8qIHdlIGhhdmUgYSB2YWxpZCBsaW5lICovCiAgICAgbiA9IHN0cmxlbihwKTsKICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgY2hhciAqbGluZTsKLSAgICAgICAgSElTVE9SWV9TVEFURSAqc3RhdGUgPSBoaXN0b3J5X2dldF9oaXN0b3J5X3N0YXRlKCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoID4gMCkKKyAgICAgICAgY29uc3QgY2hhciAqbGluZTsKKyAgICAgICAgaW50IGxlbmd0aCA9IF9weV9nZXRfaGlzdG9yeV9sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDApCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgICAgICAgICBpZiAodXNpbmdfbGliZWRpdF9lbXVsYXRpb24pIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIExpYmVkaXQncyBlbXVsYXRpb24gdXNlcyAwLWJhc2VkIGluZGV4ZXMsCiAgICAgICAgICAgICAgICAgICogdGhlIHJlYWwgcmVhZGxpbmUgdXNlcyAxLWJhc2VkIGluZGV4ZXMuCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbGluZSA9IGhpc3RvcnlfZ2V0KHN0YXRlLT5sZW5ndGggLSAxKS0+bGluZTsKKyAgICAgICAgICAgICAgICBsaW5lID0gaGlzdG9yeV9nZXQobGVuZ3RoIC0gMSktPmxpbmU7CiAgICAgICAgICAgICB9IGVsc2UKICNlbmRpZiAvKiBfX0FQUExFX18gKi8KLSAgICAgICAgICAgIGxpbmUgPSBoaXN0b3J5X2dldChzdGF0ZS0+bGVuZ3RoKS0+bGluZTsKKyAgICAgICAgICAgIGxpbmUgPSBoaXN0b3J5X2dldChsZW5ndGgpLT5saW5lOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsaW5lID0gIiI7CiAgICAgICAgIGlmIChzdHJjbXAocCwgbGluZSkpCiAgICAgICAgICAgICBhZGRfaGlzdG9yeShwKTsKLSAgICAgICAgLyogdGhlIGhpc3RvcnkgZG9jcyBkb24ndCBzYXkgc28sIGJ1dCB0aGUgYWRkcmVzcyBvZiBzdGF0ZQotICAgICAgICAgICBjaGFuZ2VzIGVhY2ggdGltZSBoaXN0b3J5X2dldF9oaXN0b3J5X3N0YXRlIGlzIGNhbGxlZAotICAgICAgICAgICB3aGljaCBtYWtlcyBtZSB0aGluayBpdCdzIGZyZXNobHkgbWFsbG9jJ2QgbWVtb3J5Li4uCi0gICAgICAgICAgIG9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBsaW5lIHN0YXlzIHRoZQotICAgICAgICAgICBzYW1lIGFzIGxvbmcgYXMgaGlzdG9yeSBpc24ndCBleHRlbmRlZCwgc28gaXQgYXBwZWFycyB0bwotICAgICAgICAgICBiZSBtYWxsb2MnZCBidXQgbWFuYWdlZCBieSB0aGUgaGlzdG9yeSBwYWNrYWdlLi4uICovCi0gICAgICAgIGZyZWUoc3RhdGUpOwogICAgIH0KICAgICAvKiBDb3B5IHRoZSBtYWxsb2MnZWQgYnVmZmVyIGludG8gYSBQeU1lbV9NYWxsb2MnZWQgb25lIGFuZAogICAgICAgIHJlbGVhc2UgdGhlIG9yaWdpbmFsLiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKaW5kZXggMDIyYzA5OS4uNTE5MmNlNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSMgIGluY2x1ZGUgPHdpbnNvY2suaD4KKyMgIGluY2x1ZGUgPHdpbnNvY2syLmg+CiAjZWxzZQogIyAgZGVmaW5lIFNPQ0tFVCBpbnQKICMgIGlmZGVmIF9fQkVPU19fCkBAIC05NCw3ICs5NCw3IEBACiAgICAgZmQyb2JqWzBdLm9iaiA9IChQeU9iamVjdCopMDsgICAgICAgICAgICAvKiBzZXQgbGlzdCB0byB6ZXJvIHNpemUgKi8KICAgICBGRF9aRVJPKHNldCk7CiAKLSAgICBmYXN0X3NlcT1QeVNlcXVlbmNlX0Zhc3Qoc2VxLCAiYXJndW1lbnRzIDEtMyBtdXN0IGJlIHNlcXVlbmNlcyIpOworICAgIGZhc3Rfc2VxID0gUHlTZXF1ZW5jZV9GYXN0KHNlcSwgImFyZ3VtZW50cyAxLTMgbXVzdCBiZSBzZXF1ZW5jZXMiKTsKICAgICBpZiAoIWZhc3Rfc2VxKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTExODUsNiArMTE4NSwzMCBAQAogCiAjZGVmaW5lIGtxdWV1ZV9xdWV1ZV9DaGVjayhvcCkgKFB5T2JqZWN0X1R5cGVDaGVjaygob3ApLCAma3F1ZXVlX3F1ZXVlX1R5cGUpKQogCisjaWYgKFNJWkVPRl9VSU5UUFRSX1QgIT0gU0laRU9GX1ZPSURfUCkKKyMgICBlcnJvciB1aW50cHRyX3QgZG9lcyBub3QgbWF0Y2ggdm9pZCAqIQorI2VsaWYgKFNJWkVPRl9VSU5UUFRSX1QgPT0gU0laRU9GX0xPTkdfTE9ORykKKyMgICBkZWZpbmUgVF9VSU5UUFRSVCAgICAgICAgIFRfVUxPTkdMT05HCisjICAgZGVmaW5lIFRfSU5UUFRSVCAgICAgICAgICBUX0xPTkdMT05HCisjICAgZGVmaW5lIFB5TG9uZ19Bc1VpbnRwdHJfdCBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisjICAgZGVmaW5lIFVJTlRQVFJUX0ZNVF9VTklUICAiSyIKKyMgICBkZWZpbmUgSU5UUFRSVF9GTVRfVU5JVCAgICJMIgorI2VsaWYgKFNJWkVPRl9VSU5UUFRSX1QgPT0gU0laRU9GX0xPTkcpCisjICAgZGVmaW5lIFRfVUlOVFBUUlQgICAgICAgICBUX1VMT05HCisjICAgZGVmaW5lIFRfSU5UUFRSVCAgICAgICAgICBUX0xPTkcKKyMgICBkZWZpbmUgUHlMb25nX0FzVWludHB0cl90IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworIyAgIGRlZmluZSBVSU5UUFRSVF9GTVRfVU5JVCAgImsiCisjICAgZGVmaW5lIElOVFBUUlRfRk1UX1VOSVQgICAibCIKKyNlbGlmIChTSVpFT0ZfVUlOVFBUUl9UID09IFNJWkVPRl9JTlQpCisjICAgZGVmaW5lIFRfVUlOVFBUUlQgICAgICAgICBUX1VJTlQKKyMgICBkZWZpbmUgVF9JTlRQVFJUICAgICAgICAgIFRfSU5UCisjICAgZGVmaW5lIFB5TG9uZ19Bc1VpbnRwdHJfdCBQeUxvbmdfQXNVbnNpZ25lZExvbmcKKyMgICBkZWZpbmUgVUlOVFBUUlRfRk1UX1VOSVQgICJJIgorIyAgIGRlZmluZSBJTlRQVFJUX0ZNVF9VTklUICAgImkiCisjZWxzZQorIyAgIGVycm9yIHVpbnRwdHJfdCBkb2VzIG5vdCBtYXRjaCBpbnQsIGxvbmcsIG9yIGxvbmcgbG9uZyEKKyNlbmRpZgorCiAvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCBzdG9yZSBweXRob24gb2JqZWN0cyBpbiB1ZGF0YSwgYmVjYXVzZQogICoga2V2ZW50cyBpbiB0aGUga2VybmVsIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgd2FybmluZywgd2hpY2ggd291bGQKICAqIGZvcmV2ZXIgbG9zZSB0aGUgcmVmY291bnQgb24gdGhlIG9iamVjdCBzdG9yZWQgd2l0aCBpdC4KQEAgLTExOTIsMTIgKzEyMTYsMTIgQEAKIAogI2RlZmluZSBLUV9PRkYoeCkgb2Zmc2V0b2Yoa3F1ZXVlX2V2ZW50X09iamVjdCwgeCkKIHN0YXRpYyBzdHJ1Y3QgUHlNZW1iZXJEZWYga3F1ZXVlX2V2ZW50X21lbWJlcnNbXSA9IHsKLSAgICB7ImlkZW50IiwgICAgICAgICAgIFRfVUlOVCwgICAgICAgICBLUV9PRkYoZS5pZGVudCl9LAorICAgIHsiaWRlbnQiLCAgICAgICAgICAgVF9VSU5UUFRSVCwgICAgIEtRX09GRihlLmlkZW50KX0sCiAgICAgeyJmaWx0ZXIiLCAgICAgICAgICBUX1NIT1JULCAgICAgICAgS1FfT0ZGKGUuZmlsdGVyKX0sCiAgICAgeyJmbGFncyIsICAgICAgICAgICBUX1VTSE9SVCwgICAgICAgS1FfT0ZGKGUuZmxhZ3MpfSwKICAgICB7ImZmbGFncyIsICAgICAgICAgIFRfVUlOVCwgICAgICAgICBLUV9PRkYoZS5mZmxhZ3MpfSwKLSAgICB7ImRhdGEiLCAgICAgICAgICAgIFRfSU5ULCAgICAgICAgICBLUV9PRkYoZS5kYXRhKX0sCi0gICAgeyJ1ZGF0YSIsICAgICAgICAgICBUX0lOVCwgICAgICAgICAgS1FfT0ZGKGUudWRhdGEpfSwKKyAgICB7ImRhdGEiLCAgICAgICAgICAgIFRfSU5UUFRSVCwgICAgICBLUV9PRkYoZS5kYXRhKX0sCisgICAgeyJ1ZGF0YSIsICAgICAgICAgICBUX1VJTlRQVFJULCAgICAgS1FfT0ZGKGUudWRhdGEpfSwKICAgICB7TlVMTH0gLyogU2VudGluZWwgKi8KIH07CiAjdW5kZWYgS1FfT0ZGCkBAIC0xMjA5LDEwICsxMjMzLDEwIEBACiAgICAgY2hhciBidWZbMTAyNF07CiAgICAgUHlPU19zbnByaW50ZigKICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgIjxzZWxlY3Qua2V2ZW50IGlkZW50PSVsdSBmaWx0ZXI9JWQgZmxhZ3M9MHgleCBmZmxhZ3M9MHgleCAiCi0gICAgICAgICJkYXRhPTB4JWx4IHVkYXRhPSVwPiIsCi0gICAgICAgICh1bnNpZ25lZCBsb25nKShzLT5lLmlkZW50KSwgcy0+ZS5maWx0ZXIsIHMtPmUuZmxhZ3MsCi0gICAgICAgIHMtPmUuZmZsYWdzLCAobG9uZykocy0+ZS5kYXRhKSwgcy0+ZS51ZGF0YSk7CisgICAgICAgICI8c2VsZWN0LmtldmVudCBpZGVudD0lenUgZmlsdGVyPSVkIGZsYWdzPTB4JXggZmZsYWdzPTB4JXggIgorICAgICAgICAiZGF0YT0weCV6ZCB1ZGF0YT0lcD4iLAorICAgICAgICAoc2l6ZV90KShzLT5lLmlkZW50KSwgcy0+ZS5maWx0ZXIsIHMtPmUuZmxhZ3MsCisgICAgICAgIHMtPmUuZmZsYWdzLCAoUHlfc3NpemVfdCkocy0+ZS5kYXRhKSwgcy0+ZS51ZGF0YSk7CiAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmKTsKIH0KIApAQCAtMTIyMiwxNyArMTI0NiwyMyBAQAogICAgIFB5T2JqZWN0ICpwZmQ7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJpZGVudCIsICJmaWx0ZXIiLCAiZmxhZ3MiLCAiZmZsYWdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiLCAidWRhdGEiLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqZm10ID0gIk98aGhpIiBJTlRQVFJUX0ZNVF9VTklUIFVJTlRQVFJUX0ZNVF9VTklUICI6a2V2ZW50IjsKIAogICAgIEVWX1NFVCgmKHNlbGYtPmUpLCAwLCBFVkZJTFRfUkVBRCwgRVZfQURELCAwLCAwLCAwKTsgLyogZGVmYXVsdHMgKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfGhoaWlpOmtldmVudCIsIGt3bGlzdCwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCBmbXQsIGt3bGlzdCwKICAgICAgICAgJnBmZCwgJihzZWxmLT5lLmZpbHRlciksICYoc2VsZi0+ZS5mbGFncyksCiAgICAgICAgICYoc2VsZi0+ZS5mZmxhZ3MpLCAmKHNlbGYtPmUuZGF0YSksICYoc2VsZi0+ZS51ZGF0YSkpKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzZWxmLT5lLmlkZW50ID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihwZmQpOwotICAgIGlmIChzZWxmLT5lLmlkZW50ID09IC0xKSB7CisgICAgaWYgKFB5TG9uZ19DaGVjayhwZmQpKSB7CisgICAgICAgIHNlbGYtPmUuaWRlbnQgPSBQeUxvbmdfQXNVaW50cHRyX3QocGZkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlbGYtPmUuaWRlbnQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKHBmZCk7CisgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xMjQyLDcgKzEyNzIsNyBAQAoga3F1ZXVlX2V2ZW50X3JpY2hjb21wYXJlKGtxdWV1ZV9ldmVudF9PYmplY3QgKnMsIGtxdWV1ZV9ldmVudF9PYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wKQogewotICAgIGludCByZXN1bHQgPSAwOworICAgIFB5X2ludHB0cl90IHJlc3VsdCA9IDA7CiAKICAgICBpZiAoIWtxdWV1ZV9ldmVudF9DaGVjayhvKSkgewogICAgICAgICBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKQEAgLTEyODUsNyArMTMxNSw3IEBACiAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgPiAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKXJlc3VsdCk7CiB9CiAKIHN0YXRpYyBQeVR5cGVPYmplY3Qga3F1ZXVlX2V2ZW50X1R5cGUgPSB7CkBAIC0xNzM3LDYgKzE3NjcsMTQgQEAKICAgICBQeV9JTkNSRUYoU2VsZWN0RXJyb3IpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBTZWxlY3RFcnJvcik7CiAKKyNpZmRlZiBQSVBFX0JVRgorI2lmZGVmIEhBVkVfQlJPS0VOX1BJUEVfQlVGCisjdW5kZWYgUElQRV9CVUYKKyNkZWZpbmUgUElQRV9CVUYgNTEyCisjZW5kaWYKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElQRV9CVUYiLCBQSVBFX0JVRik7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoSEFWRV9QT0xMKQogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmIChzZWxlY3RfaGF2ZV9icm9rZW5fcG9sbCgpKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCAwMjlmMjk4Li4yY2U4ZDkyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTQ4MCwxNiArNDgwLDE1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogU0hBMjU2X3VwZGF0ZShTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIGludCBsZW47CisgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6dXBkYXRlIiwgJmNwLCAmbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOnVwZGF0ZSIsICZidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNoYV91cGRhdGUoc2VsZiwgY3AsIGxlbik7CisgICAgc2hhX3VwZGF0ZShzZWxmLCBidWYuYnVmLCBidWYubGVuKTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgU0hBX21ldGhvZHNbXSA9IHsKQEAgLTYxNCwyNSArNjEzLDI5IEBACiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCBOVUxMfTsKICAgICBTSEFvYmplY3QgKm5ldzsKLSAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgYnVmID0geyAwIH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyM6bmV3Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbikpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyo6bmV3Iiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgobmV3ID0gbmV3U0hBMjU2b2JqZWN0KCkpID09IE5VTEwpCisgICAgaWYgKChuZXcgPSBuZXdTSEEyNTZvYmplY3QoKSkgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBzaGFfaW5pdChuZXcpOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ldyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoY3ApCi0gICAgICAgIHNoYV91cGRhdGUobmV3LCBjcCwgbGVuKTsKKyAgICBpZiAoYnVmLmxlbiA+IDApIHsKKyAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKIH0KQEAgLTY0NSwyNSArNjQ4LDI5IEBACiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCBOVUxMfTsKICAgICBTSEFvYmplY3QgKm5ldzsKLSAgICB1bnNpZ25lZCBjaGFyICpjcCA9IE5VTEw7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgYnVmID0geyAwIH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyM6bmV3Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbikpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyo6bmV3Iiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgobmV3ID0gbmV3U0hBMjI0b2JqZWN0KCkpID09IE5VTEwpCisgICAgaWYgKChuZXcgPSBuZXdTSEEyMjRvYmplY3QoKSkgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBzaGEyMjRfaW5pdChuZXcpOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ldyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoY3ApCi0gICAgICAgIHNoYV91cGRhdGUobmV3LCBjcCwgbGVuKTsKKyAgICBpZiAoYnVmLmxlbiA+IDApIHsKKyAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCmluZGV4IDQyNTQ4YmIuLmQ3YjM2OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwpAQCAtNTQ2LDE2ICs1NDYsMTUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEE1MTJfdXBkYXRlKFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzp1cGRhdGUiLCAmY3AsICZsZW4pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6dXBkYXRlIiwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2hhNTEyX3VwZGF0ZShzZWxmLCBjcCwgbGVuKTsKKyAgICBzaGE1MTJfdXBkYXRlKHNlbGYsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBTSEFfbWV0aG9kc1tdID0gewpAQCAtNjgwLDI1ICs2NzksMjkgQEAKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBidWYgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChuZXcgPSBuZXdTSEE1MTJvYmplY3QoKSkgPT0gTlVMTCkKKyAgICBpZiAoKG5ldyA9IG5ld1NIQTUxMm9iamVjdCgpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHNoYTUxMl9pbml0KG5ldyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcCkKLSAgICAgICAgc2hhNTEyX3VwZGF0ZShuZXcsIGNwLCBsZW4pOworICAgIGlmIChidWYubGVuID4gMCkgeworICAgICAgICBzaGE1MTJfdXBkYXRlKG5ldywgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwogfQpAQCAtNzExLDI1ICs3MTQsMjkgQEAKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBidWYgPSB7IDAgfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzIzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxzKjpuZXciLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKChuZXcgPSBuZXdTSEEzODRvYmplY3QoKSkgPT0gTlVMTCkKKyAgICBpZiAoKG5ldyA9IG5ld1NIQTM4NG9iamVjdCgpKSA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHNoYTM4NF9pbml0KG5ldyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChjcCkKLSAgICAgICAgc2hhNTEyX3VwZGF0ZShuZXcsIGNwLCBsZW4pOworICAgIGlmIChidWYubGVuID4gMCkgeworICAgICAgICBzaGE1MTJfdXBkYXRlKG5ldywgYnVmLmJ1ZiwgYnVmLmxlbik7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGFtb2R1bGUuYyBiL01vZHVsZXMvc2hhbW9kdWxlLmMKaW5kZXggZWZkNzIwNC4uYTg2ZTcyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGFtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYW1vZHVsZS5jCkBAIC0yMzYsOSArMjM2LDkgQEAKIC8qIHVwZGF0ZSB0aGUgU0hBIGRpZ2VzdCAqLwogCiBzdGF0aWMgdm9pZAotc2hhX3VwZGF0ZShTSEFvYmplY3QgKnNoYV9pbmZvLCBTSEFfQllURSAqYnVmZmVyLCBpbnQgY291bnQpCitzaGFfdXBkYXRlKFNIQW9iamVjdCAqc2hhX2luZm8sIFNIQV9CWVRFICpidWZmZXIsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKICAgICBTSEFfSU5UMzIgY2xvOwogCiAgICAgY2xvID0gc2hhX2luZm8tPmNvdW50X2xvICsgKChTSEFfSU5UMzIpIGNvdW50IDw8IDMpOwpAQCAtNDI4LDE2ICs0MjgsMTYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEFfdXBkYXRlKFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgdmlldzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6dXBkYXRlIiwgJmNwLCAmbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOnVwZGF0ZSIsICZ2aWV3KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzaGFfdXBkYXRlKHNlbGYsIGNwLCBsZW4pOworICAgIHNoYV91cGRhdGUoc2VsZiwgKHVuc2lnbmVkIGNoYXIqKXZpZXcuYnVmLAorICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVCh2aWV3LmxlbiwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KSk7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBTSEFfbWV0aG9kc1tdID0gewpAQCAtNTM1LDI1ICs1MzUsMzAgQEAKIHsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIHVuc2lnbmVkIGNoYXIgKmNwID0gTlVMTDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciB2aWV3ID0geyAwIH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyM6bmV3Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbikpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8cyo6bmV3Iiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKG5ldyA9IG5ld1NIQW9iamVjdCgpKSA9PSBOVUxMKQorICAgIGlmICgobmV3ID0gbmV3U0hBb2JqZWN0KCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHNoYV9pbml0KG5ldyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoY3ApCi0gICAgICAgIHNoYV91cGRhdGUobmV3LCBjcCwgbGVuKTsKKyAgICBpZiAodmlldy5sZW4gPiAwKSB7CisgICAgICAgIHNoYV91cGRhdGUobmV3LCAodW5zaWduZWQgY2hhciopdmlldy5idWYsCisgICAgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVCh2aWV3LmxlbiwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KSk7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IDhiMTM3NGIuLjI0NDEwOTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtNywxMiArNywxOCBAQAogI2luY2x1ZGUgImludHJjaGVjay5oIgogCiAjaWZkZWYgTVNfV0lORE9XUworI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNpZmRlZiBIQVZFX1BST0NFU1NfSAogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbmRpZgorI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NJR05BTF9ICiAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19USU1FX0gKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCkBAIC0xNjMsMTYgKzE2OSwyMCBAQAogc3RhdGljIHZvaWQKIHNpZ25hbF9oYW5kbGVyKGludCBzaWdfbnVtKQogewotI2lmZGVmIFdJVEhfVEhSRUFECi0jaWZkZWYgV0lUSF9QVEgKKyAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChXSVRIX1BUSCkKICAgICBpZiAoUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpICE9IG1haW5fdGhyZWFkKSB7CiAgICAgICAgIHB0aF9yYWlzZSgqKHB0aF90ICopIG1haW5fdGhyZWFkLCBzaWdfbnVtKTsKLSAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBlbHNlCiAjZW5kaWYKKyAgICB7CisjaWZkZWYgV0lUSF9USFJFQUQKICAgICAvKiBTZWUgTk9URVMgc2VjdGlvbiBhYm92ZSAqLwotICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkgeworICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkKICNlbmRpZgorICAgIHsKICAgICAgICAgSGFuZGxlcnNbc2lnX251bV0udHJpcHBlZCA9IDE7CiAgICAgICAgIC8qIFNldCBpc190cmlwcGVkIGFmdGVyIHNldHRpbmcgLnRyaXBwZWQsIGFzIGl0IGdldHMKICAgICAgICAgICAgY2xlYXJlZCBpbiBQeUVycl9DaGVja1NpZ25hbHMoKSBiZWZvcmUgLnRyaXBwZWQuICovCkBAIC0xODAsMjQgKzE5MCwyNiBAQAogICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbChjaGVja3NpZ25hbHNfd2l0aGFyZywgTlVMTCk7CiAgICAgICAgIGlmICh3YWtldXBfZmQgIT0gLTEpCiAgICAgICAgICAgICB3cml0ZSh3YWtldXBfZmQsICJcMCIsIDEpOwotI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgfQotI2VuZGlmCi0jaWZkZWYgU0lHQ0hMRAotICAgIGlmIChzaWdfbnVtID09IFNJR0NITEQpIHsKLSAgICAgICAgLyogVG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLCB0aGlzIHNpZ25hbCByZW1haW5zCi0gICAgICAgICAgIHJlc2V0IHVudGlsIGV4cGxpY2l0IHJlLWluc3RhdGVkLgotICAgICAgICAgICBEb24ndCBjbGVhciB0aGUgJ2Z1bmMnIGZpZWxkIGFzIGl0IGlzIG91ciBwb2ludGVyCi0gICAgICAgICAgIHRvIHRoZSBQeXRob24gaGFuZGxlci4uLiAqLwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisKICNpZm5kZWYgSEFWRV9TSUdBQ1RJT04KKyNpZmRlZiBTSUdDSExECisgICAgLyogVG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLCB0aGlzIHNpZ25hbCByZW1haW5zCisgICAgICAgcmVzZXQgdW50aWwgZXhwbGljaXQgcmUtaW5zdGF0ZWQuCisgICAgICAgRG9uJ3QgY2xlYXIgdGhlICdmdW5jJyBmaWVsZCBhcyBpdCBpcyBvdXIgcG9pbnRlcgorICAgICAgIHRvIHRoZSBQeXRob24gaGFuZGxlci4uLiAqLworICAgIGlmIChzaWdfbnVtICE9IFNJR0NITEQpCisjZW5kaWYKICAgICAvKiBJZiB0aGUgaGFuZGxlciB3YXMgbm90IHNldCB1cCB3aXRoIHNpZ2FjdGlvbiwgcmVpbnN0YWxsIGl0LiAgU2VlCiAgICAgICogUHl0aG9uL3B5dGhvbnJ1bi5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgUHlPU19zZXRzaWcgd2hpY2gKICAgICAgKiBtYWtlcyB0aGlzIHRydWUuICBTZWUgYWxzbyBpc3N1ZTgzNTQuICovCiAgICAgUHlPU19zZXRzaWcoc2lnX251bSwgc2lnbmFsX2hhbmRsZXIpOwogI2VuZGlmCisgICAgfQorCisgICAgLyogSXNzdWUgIzEwMzExOiBhc3luY2hyb25vdXNseSBleGVjdXRpbmcgc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBub3QKKyAgICAgICBtdXRhdGUgZXJybm8gdW5kZXIgdGhlIGZlZXQgb2YgdW5zdXNwZWN0aW5nIEMgY29kZS4gKi8KKyAgICBlcnJubyA9IHNhdmVfZXJybm87CiB9CiAKIApAQCAtMjUxLDYgKzI2MywyNSBAQAogICAgIHZvaWQgKCpmdW5jKShpbnQpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86c2lnbmFsIiwgJnNpZ19udW0sICZvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgLyogVmFsaWRhdGUgdGhhdCBzaWdfbnVtIGlzIG9uZSBvZiB0aGUgYWxsb3dhYmxlIHNpZ25hbHMgKi8KKyAgICBzd2l0Y2ggKHNpZ19udW0pIHsKKyAgICAgICAgY2FzZSBTSUdBQlJUOiBicmVhazsKKyNpZmRlZiBTSUdCUkVBSworICAgICAgICAvKiBJc3N1ZSAjMTAwMDM6IFNJR0JSRUFLIGlzIG5vdCBkb2N1bWVudGVkIGFzIHBlcm1pdHRlZCwgYnV0IHdvcmtzCisgICAgICAgICAgIGFuZCBjb3JyZXNwb25kcyB0byBDVFJMX0JSRUFLX0VWRU5ULiAqLworICAgICAgICBjYXNlIFNJR0JSRUFLOiBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIFNJR0ZQRTogYnJlYWs7CisgICAgICAgIGNhc2UgU0lHSUxMOiBicmVhazsKKyAgICAgICAgY2FzZSBTSUdJTlQ6IGJyZWFrOworICAgICAgICBjYXNlIFNJR1NFR1Y6IGJyZWFrOworICAgICAgICBjYXNlIFNJR1RFUk06IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIHNpZ25hbCB2YWx1ZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpICE9IG1haW5fdGhyZWFkKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtNzkzLDYgKzgyNCwxOCBAQAogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJJdGltZXJFcnJvciIsIEl0aW1lckVycm9yKTsKICNlbmRpZgogCisjaWZkZWYgQ1RSTF9DX0VWRU5UCisgICAgeCA9IFB5SW50X0Zyb21Mb25nKENUUkxfQ19FVkVOVCk7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkNUUkxfQ19FVkVOVCIsIHgpOworICAgIFB5X0RFQ1JFRih4KTsKKyNlbmRpZgorCisjaWZkZWYgQ1RSTF9CUkVBS19FVkVOVAorICAgIHggPSBQeUludF9Gcm9tTG9uZyhDVFJMX0JSRUFLX0VWRU5UKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ1RSTF9CUkVBS19FVkVOVCIsIHgpOworICAgIFB5X0RFQ1JFRih4KTsKKyNlbmRpZgorCiAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTg0NSw3ICs4ODgsNyBAQAogI2VuZGlmCiAKICAgICAvKgotICAgICAqIFRoZSBpc19zdHJpcHBlZCB2YXJpYWJsZSBpcyBtZWFudCB0byBzcGVlZCB1cCB0aGUgY2FsbHMgdG8KKyAgICAgKiBUaGUgaXNfdHJpcHBlZCB2YXJpYWJsZSBpcyBtZWFudCB0byBzcGVlZCB1cCB0aGUgY2FsbHMgdG8KICAgICAgKiBQeUVycl9DaGVja1NpZ25hbHMgKGJvdGggZGlyZWN0bHkgb3IgdmlhIHBlbmRpbmcgY2FsbHMpIHdoZW4gbm8KICAgICAgKiBzaWduYWwgaGFzIGFycml2ZWQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIDEgd2hlbiBhIHNpZ25hbCBhcnJpdmVzCiAgICAgICogYW5kIGl0IGlzIHNldCB0byAwIGhlcmUsIHdoZW4gd2Uga25vdyBzb21lIHNpZ25hbHMgYXJyaXZlZC4gVGhpcyB3YXkKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IGEyODExNmMuLmU0ZjZlNjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3NlCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9CTFVFVE9PVEhfSCkgfHwgZGVmaW5lZChIQVZFX0JMVUVUT09USF9CTFVFVE9PVEhfSCkgJiYgICFkZWZpbmVkKF9fTmV0QlNEX18pCisjaWYgKGRlZmluZWQoSEFWRV9CTFVFVE9PVEhfSCkgfHwgZGVmaW5lZChIQVZFX0JMVUVUT09USF9CTFVFVE9PVEhfSCkpICYmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCiAjZGVmaW5lIFVTRV9CTFVFVE9PVEggMQogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAjZGVmaW5lIEJUUFJPVE9fTDJDQVAgQkxVRVRPT1RIX1BST1RPX0wyQ0FQCkBAIC0zOTMsMTEgKzM5MywxMyBAQAogI2RlZmluZSBfQlRfTDJfTUVNQihzYSwgbWVtYikgKChzYSktPmwyY2FwXyMjbWVtYikKICNkZWZpbmUgX0JUX1JDX01FTUIoc2EsIG1lbWIpICgoc2EpLT5yZmNvbW1fIyNtZW1iKQogI2RlZmluZSBfQlRfSENJX01FTUIoc2EsIG1lbWIpICgoc2EpLT5oY2lfIyNtZW1iKQotI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCiAjZGVmaW5lIHNvY2thZGRyX2wyIHNvY2thZGRyX2J0CiAjZGVmaW5lIHNvY2thZGRyX3JjIHNvY2thZGRyX2J0CiAjZGVmaW5lIHNvY2thZGRyX2hjaSBzb2NrYWRkcl9idAogI2RlZmluZSBzb2NrYWRkcl9zY28gc29ja2FkZHJfYnQKKyNkZWZpbmUgU09MX0hDSSBCVFBST1RPX0hDSQorI2RlZmluZSBIQ0lfREFUQV9ESVIgU09fSENJX0RJUkVDVElPTgogI2RlZmluZSBfQlRfTDJfTUVNQihzYSwgbWVtYikgKChzYSktPmJ0XyMjbWVtYikKICNkZWZpbmUgX0JUX1JDX01FTUIoc2EsIG1lbWIpICgoc2EpLT5idF8jI21lbWIpCiAjZGVmaW5lIF9CVF9IQ0lfTUVNQihzYSwgbWVtYikgKChzYSktPmJ0XyMjbWVtYikKQEAgLTEwNzYsOSArMTA3OCwxMyBAQAogICAgICAgICBjYXNlIEJUUFJPVE9fSENJOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaGNpICphID0gKHN0cnVjdCBzb2NrYWRkcl9oY2kgKikgYWRkcjsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKKyAgICAgICAgICAgIHJldHVybiBtYWtlYmRhZGRyKCZfQlRfSENJX01FTUIoYSwgYmRhZGRyKSk7CisjZWxzZQogICAgICAgICAgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAgICAgICAgICAgICByZXQgPSBQeV9CdWlsZFZhbHVlKCJpIiwgX0JUX0hDSV9NRU1CKGEsIGRldikpOwogICAgICAgICAgICAgcmV0dXJuIHJldDsKKyNlbmRpZgogICAgICAgICB9CiAKICNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKQEAgLTEwOTYsNyArMTEwMiw3IEBACiAgICAgICAgIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0gKKyNpZiBkZWZpbmVkKEhBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IKSAmJiBkZWZpbmVkKFNJT0NHSUZOQU1FKQogICAgIGNhc2UgQUZfUEFDS0VUOgogICAgIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX2xsICphID0gKHN0cnVjdCBzb2NrYWRkcl9sbCAqKWFkZHI7CkBAIC0xMjYzLDYgKzEyNjksMTIgQEAKICAgICAgICAgUHlNZW1fRnJlZShob3N0KTsKICAgICAgICAgaWYgKHJlc3VsdCA8IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweGZmZmYpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICBQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICJnZXRzb2NrYWRkcmFyZzogcG9ydCBtdXN0IGJlIDAtNjU1MzUuIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICAgICAgYWRkci0+c2luX3BvcnQgPSBodG9ucygoc2hvcnQpcG9ydCk7CiAgICAgICAgICpsZW5fcmV0ID0gc2l6ZW9mICphZGRyOwpAQCAtMTI5NSw2ICsxMzA3LDEyIEBACiAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdCk7CiAgICAgICAgIGlmIChyZXN1bHQgPCAwKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4gMHhmZmZmKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAiZ2V0c29ja2FkZHJhcmc6IHBvcnQgbXVzdCBiZSAwLTY1NTM1LiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgYWRkci0+c2luNl9mYW1pbHkgPSBzLT5zb2NrX2ZhbWlseTsKICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHNob3J0KXBvcnQpOwogICAgICAgICBhZGRyLT5zaW42X2Zsb3dpbmZvID0gZmxvd2luZm87CkBAIC0xMzUwLDEyICsxMzY4LDI1IEBACiAgICAgICAgIGNhc2UgQlRQUk9UT19IQ0k6CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9oY2kgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2hjaSAqKWFkZHJfcmV0OworI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQorCQkJY2hhciAqc3RyYWRkciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGFyZ3MpOworCisJCQlfQlRfSENJX01FTUIoYWRkciwgZmFtaWx5KSA9IEFGX0JMVUVUT09USDsKKyAgICAgICAgICAgIGlmIChzdHJhZGRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X2Vycm9yLCAiZ2V0c29ja2FkZHJhcmc6ICIKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIGZvcm1hdCIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNldGJkYWRkcihzdHJhZGRyLCAmX0JUX0hDSV9NRU1CKGFkZHIsIGJkYWRkcikpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAgICAgICAgICBfQlRfSENJX01FTUIoYWRkciwgZmFtaWx5KSA9IEFGX0JMVUVUT09USDsKICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIsICZfQlRfSENJX01FTUIoYWRkciwgZGV2KSkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X2Vycm9yLCAiZ2V0c29ja2FkZHJhcmc6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGZvcm1hdCIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICAqbGVuX3JldCA9IHNpemVvZiAqYWRkcjsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CkBAIC0xMzg3LDcgKzE0MTgsNyBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0gKKyNpZiBkZWZpbmVkKEhBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IKSAmJiBkZWZpbmVkKFNJT0NHSUZJTkRFWCkKICAgICBjYXNlIEFGX1BBQ0tFVDoKICAgICB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9sbCogYWRkcjsKQEAgLTE0MjIsNiArMTQ1MywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFyZHdhcmUgYWRkcmVzcyBtdXN0IGJlIDggYnl0ZXMgb3IgbGVzcyIpOwogICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlmIChwcm90b051bWJlciA8IDAgfHwgcHJvdG9OdW1iZXIgPiAweGZmZmYpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICBQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICJnZXRzb2NrYWRkcmFyZzogcHJvdG9OdW1iZXIgbXVzdCBiZSAwLTY1NTM1LiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwqKWFkZHJfcmV0OwogICAgICAgICBhZGRyLT5zbGxfZmFtaWx5ID0gQUZfUEFDS0VUOwogICAgICAgICBhZGRyLT5zbGxfcHJvdG9jb2wgPSBodG9ucygoc2hvcnQpcHJvdG9OdW1iZXIpOwpAQCAtMjQzMiwxOSArMjQ2OSwyMCBAQAogCiAgICAgaW50IHJlY3ZsZW4gPSAwLCBmbGFncyA9IDA7CiAgICAgc3NpemVfdCByZWFkbGVuOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgYnVmbGVuOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlfc3NpemVfdCBidWZsZW47CiAKICAgICAvKiBHZXQgdGhlIGJ1ZmZlcidzIG1lbW9yeSAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ3I3xpaTpyZWN2X2ludG8iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZiwgJmJ1ZmxlbiwgJnJlY3ZsZW4sICZmbGFncykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIncqfGlpOnJlY3ZfaW50byIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLCAmcmVjdmxlbiwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KGJ1ZiAhPSAwICYmIGJ1ZmxlbiA+IDApOworICAgIGJ1ZmxlbiA9IGJ1Zi5sZW47CisgICAgYXNzZXJ0KGJ1Zi5idWYgIT0gMCAmJiBidWZsZW4gPiAwKTsKIAogICAgIGlmIChyZWN2bGVuIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJuZWdhdGl2ZSBidWZmZXJzaXplIGluIHJlY3ZfaW50byIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKHJlY3ZsZW4gPT0gMCkgewogICAgICAgICAvKiBJZiBuYnl0ZXMgd2FzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYnVmZmVyJ3MgbGVuZ3RoICovCkBAIC0yNDU1LDE5ICsyNDkzLDI0IEBACiAgICAgaWYgKGJ1ZmxlbiA8IHJlY3ZsZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyIHRvbyBzbWFsbCBmb3IgcmVxdWVzdGVkIGJ5dGVzIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIENhbGwgdGhlIGd1dHMgKi8KLSAgICByZWFkbGVuID0gc29ja19yZWN2X2d1dHMocywgYnVmLCByZWN2bGVuLCBmbGFncyk7CisgICAgcmVhZGxlbiA9IHNvY2tfcmVjdl9ndXRzKHMsIGJ1Zi5idWYsIHJlY3ZsZW4sIGZsYWdzKTsKICAgICBpZiAocmVhZGxlbiA8IDApIHsKICAgICAgICAgLyogUmV0dXJuIGFuIGVycm9yLiAqLwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBOb3RlIHRoYXQgd2UgZG8gbm90IGRvIGFueXRoaW5nCiAgICAgICAgc3BlY2lhbCBoZXJlIGluIHRoZSBjYXNlIHRoYXQgcmVhZGxlbiA8IHJlY3ZsZW4uICovCiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHJlYWRsZW4pOworCitlcnJvcjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIocmVjdl9pbnRvX2RvYywKQEAgLTI2MDYsMzcgKzI2NDksNDMgQEAKIAogICAgIGludCByZWN2bGVuID0gMCwgZmxhZ3MgPSAwOwogICAgIHNzaXplX3QgcmVhZGxlbjsKLSAgICBjaGFyICpidWY7CisgICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBpbnQgYnVmbGVuOwogCiAgICAgUHlPYmplY3QgKmFkZHIgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIncjfGlpOnJlY3Zmcm9tX2ludG8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJ1ZiwgJmJ1ZmxlbiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAidyp8aWk6cmVjdmZyb21faW50byIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWN2bGVuLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoYnVmICE9IDAgJiYgYnVmbGVuID4gMCk7CisgICAgYnVmbGVuID0gYnVmLmxlbjsKKyAgICBhc3NlcnQoYnVmLmJ1ZiAhPSAwICYmIGJ1ZmxlbiA+IDApOwogCiAgICAgaWYgKHJlY3ZsZW4gPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIGJ1ZmZlcnNpemUgaW4gcmVjdmZyb21faW50byIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKHJlY3ZsZW4gPT0gMCkgewogICAgICAgICAvKiBJZiBuYnl0ZXMgd2FzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYnVmZmVyJ3MgbGVuZ3RoICovCiAgICAgICAgIHJlY3ZsZW4gPSBidWZsZW47CiAgICAgfQogCi0gICAgcmVhZGxlbiA9IHNvY2tfcmVjdmZyb21fZ3V0cyhzLCBidWYsIHJlY3ZsZW4sIGZsYWdzLCAmYWRkcik7CisgICAgcmVhZGxlbiA9IHNvY2tfcmVjdmZyb21fZ3V0cyhzLCBidWYuYnVmLCByZWN2bGVuLCBmbGFncywgJmFkZHIpOwogICAgIGlmIChyZWFkbGVuIDwgMCkgewogICAgICAgICAvKiBSZXR1cm4gYW4gZXJyb3IgKi8KLSAgICAgICAgUHlfWERFQ1JFRihhZGRyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkIGFuZCB0aGUgYWRkcmVzcy4gIE5vdGUgdGhhdCB3ZSBkbwogICAgICAgIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGhlcmUgaW4gdGhlIGNhc2UgdGhhdCByZWFkbGVuIDwgcmVjdmxlbi4gKi8KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibE4iLCByZWFkbGVuLCBhZGRyKTsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihhZGRyKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIocmVjdmZyb21faW50b19kb2MsCkBAIC0yNjk5LDcgKzI3NDgsNyBAQAogc29ja19zZW5kYWxsKFB5U29ja2V0U29ja09iamVjdCAqcywgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqYnVmOwotICAgIGludCBsZW4sIG4gPSAtMSwgZmxhZ3MgPSAwLCB0aW1lb3V0OworICAgIGludCBsZW4sIG4gPSAtMSwgZmxhZ3MgPSAwLCB0aW1lb3V0LCBzYXZlZF9lcnJubzsKICAgICBQeV9idWZmZXIgcGJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8aTpzZW5kYWxsIiwgJnBidWYsICZmbGFncykpCkBAIC0yNzEyLDQyICsyNzYxLDQ0IEBACiAgICAgICAgIHJldHVybiBzZWxlY3RfZXJyb3IoKTsKICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3QocywgMSk7CiAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgaWYgKHRpbWVvdXQpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCF0aW1lb3V0KSB7CiAjaWZkZWYgX19WTVMKLSAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyAgICAgICAgICAgIG4gPSBzZW5kc2VnbWVudGVkKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZWxzZQotICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgorICAgICAgICB9CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmICh0aW1lb3V0ID09IDEpIHsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBQeUVycl9DaGVja1NpZ25hbHMoKSBtaWdodCBjaGFuZ2UgZXJybm8gKi8KKyAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAgICAgLyogV2UgbXVzdCBydW4gb3VyIHNpZ25hbCBoYW5kbGVycyBiZWZvcmUgbG9vcGluZyBhZ2Fpbi4KKyAgICAgICAgICAgc2VuZCgpIGNhbiByZXR1cm4gYSBzdWNjZXNzZnVsIHBhcnRpYWwgd3JpdGUgd2hlbiBpdCBpcworICAgICAgICAgICBpbnRlcnJ1cHRlZCwgc28gd2UgY2FuJ3QgcmVzdHJpY3Qgb3Vyc2VsdmVzIHRvIEVJTlRSLiAqLworICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIHsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwKSB7Ci0jaWZkZWYgRUlOVFIKLSAgICAgICAgICAgIC8qIFdlIG11c3QgaGFuZGxlIEVJTlRSIGhlcmUgYXMgdGhlcmUgaXMgbm8gd2F5IGZvcgotICAgICAgICAgICAgICogdGhlIGNhbGxlciB0byBrbm93IGhvdyBtdWNoIHdhcyBzZW50IG90aGVyd2lzZS4gICovCi0gICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsKLSAgICAgICAgICAgICAgICAvKiBSdW4gc2lnbmFsIGhhbmRsZXJzLiAgSWYgYW4gZXhjZXB0aW9uIHdhcwotICAgICAgICAgICAgICAgICAqIHJhaXNlZCwgYWJvcnQgYW5kIGxlYXZlIHRoaXMgc29ja2V0IGluCi0gICAgICAgICAgICAgICAgICogYW4gdW5rbm93biBzdGF0ZS4gKi8KLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLyogSWYgaW50ZXJydXB0ZWQsIHRyeSBhZ2FpbiAqLworICAgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IEVJTlRSKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWYgKz0gbjsKICAgICAgICAgbGVuIC09IG47CiAgICAgfSB3aGlsZSAobGVuID4gMCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKIAotICAgIGlmICh0aW1lb3V0ID09IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBpZiAobiA8IDApCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKIApAQCAtMjg1MCwyNCArMjkwMSw0MyBAQAogc29ja19pb2N0bChQeVNvY2tldFNvY2tPYmplY3QgKnMsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBjbWQgPSBTSU9fUkNWQUxMOwotICAgIHVuc2lnbmVkIGludCBvcHRpb24gPSBSQ1ZBTExfT047CisgICAgUHlPYmplY3QgKmFyZ087CiAgICAgRFdPUkQgcmVjdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmcsICJrSTppb2N0bCIsICZjbWQsICZvcHRpb24pKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmcsICJrTzppb2N0bCIsICZjbWQsICZhcmdPKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoV1NBSW9jdGwocy0+c29ja19mZCwgY21kLCAmb3B0aW9uLCBzaXplb2Yob3B0aW9uKSwKLSAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnJlY3YsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgewotICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisgICAgc3dpdGNoIChjbWQpIHsKKyAgICBjYXNlIFNJT19SQ1ZBTEw6IHsKKyAgICAgICAgdW5zaWduZWQgaW50IG9wdGlvbiA9IFJDVkFMTF9PTjsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZywgImtJOmlvY3RsIiwgJmNtZCwgJm9wdGlvbikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFdTQUlvY3RsKHMtPnNvY2tfZmQsIGNtZCwgJm9wdGlvbiwgc2l6ZW9mKG9wdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnJlY3YsIE5VTEwsIE5VTEwpID09IFNPQ0tFVF9FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZWN2KTsgfQorICAgIGNhc2UgU0lPX0tFRVBBTElWRV9WQUxTOiB7CisgICAgICAgIHN0cnVjdCB0Y3Bfa2VlcGFsaXZlIGthOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAiayhra2spOmlvY3RsIiwgJmNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZrYS5vbm9mZiwgJmthLmtlZXBhbGl2ZXRpbWUsICZrYS5rZWVwYWxpdmVpbnRlcnZhbCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFdTQUlvY3RsKHMtPnNvY2tfZmQsIGNtZCwgJmthLCBzaXplb2Yoa2EpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZyZWN2LCBOVUxMLCBOVUxMKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVjdik7IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgaW9jdGwgY29tbWFuZCAlZCIsIGNtZCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVjdik7CiB9CiBQeURvY19TVFJWQVIoc29ja19pb2N0bF9kb2MsCiAiaW9jdGwoY21kLCBvcHRpb24pIC0+IGxvbmdcblwKIFxuXAotQ29udHJvbCB0aGUgc29ja2V0IHdpdGggV1NBSW9jdGwgc3lzY2FsbC4gQ3VycmVudGx5IG9ubHkgc29ja2V0LlNJT19SQ1ZBTExcblwKLWlzIHN1cHBvcnRlZCBhcyBjb250cm9sLiBPcHRpb25zIG11c3QgYmUgb25lIG9mIHRoZSBzb2NrZXQuUkNWQUxMXypcblwKLWNvbnN0YW50cy4iKTsKK0NvbnRyb2wgdGhlIHNvY2tldCB3aXRoIFdTQUlvY3RsIHN5c2NhbGwuIEN1cnJlbnRseSBzdXBwb3J0ZWQgJ2NtZCcgdmFsdWVzIGFyZVxuXAorU0lPX1JDVkFMTDogICdvcHRpb24nIG11c3QgYmUgb25lIG9mIHRoZSBzb2NrZXQuUkNWQUxMXyogY29uc3RhbnRzLlxuXAorU0lPX0tFRVBBTElWRV9WQUxTOiAgJ29wdGlvbicgaXMgYSB0dXBsZSBvZiAob25vZmYsIHRpbWVvdXQsIGludGVydmFsKS4iKTsKIAogI2VuZGlmCiAKQEAgLTMzNzUsNyArMzQ0NSw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGFmID0gc2EtPnNhX2ZhbWlseTsKICAgICBhcCA9IE5VTEw7Ci0gICAgYWwgPSAwOwogICAgIHN3aXRjaCAoYWYpIHsKICAgICBjYXNlIEFGX0lORVQ6CiAgICAgICAgIGFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9hZGRyOwpAQCAtMzQ2NCwxMyArMzUzMywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9nZXRzZXJ2Ynlwb3J0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0OworICAgIGludCBwb3J0OwogICAgIGNoYXIgKnByb3RvPU5VTEw7CiAgICAgc3RydWN0IHNlcnZlbnQgKnNwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiSHxzOmdldHNlcnZieXBvcnQiLCAmcG9ydCwgJnByb3RvKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml8czpnZXRzZXJ2Ynlwb3J0IiwgJnBvcnQsICZwcm90bykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4gMHhmZmZmKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAiZ2V0c2VydmJ5cG9ydDogcG9ydCBtdXN0IGJlIDAtNjU1MzUuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3AgPSBnZXRzZXJ2Ynlwb3J0KGh0b25zKHBvcnQpLCBwcm90byk7CisgICAgc3AgPSBnZXRzZXJ2Ynlwb3J0KGh0b25zKChzaG9ydClwb3J0KSwgcHJvdG8pOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHNwID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF9lcnJvciwgInBvcnQvcHJvdG8gbm90IGZvdW5kIik7CkBAIC00NDQyLDcgKzQ1MTcsNyBAQAogCiAgICAgLyogRXhwb3J0IEMgQVBJICovCiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCBQeVNvY2tldF9DQVBJX05BTUUsCi0gICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0cigodm9pZCAqKSZQeVNvY2tldE1vZHVsZUFQSSwgTlVMTCkKKyAgICAgICAgICAgUHlDYXBzdWxlX05ldygmUHlTb2NrZXRNb2R1bGVBUEksIFB5U29ja2V0X0NBUFNVTEVfTkFNRSwgTlVMTCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAhPSAwKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ1ODgsOSArNDY2MywxMyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0wyQ0FQIiwgQlRQUk9UT19MMkNBUCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fSENJIiwgQlRQUk9UT19IQ0kpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSENJIiwgU09MX0hDSSk7CisjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0ZJTFRFUiIsIEhDSV9GSUxURVIpOworI2VuZGlmCiAjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgIWRlZmluZWQoX19OZXRCU0RfXykgJiYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX1RJTUVfU1RBTVAiLCBIQ0lfVElNRV9TVEFNUCk7CisjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0RBVEFfRElSIiwgSENJX0RBVEFfRElSKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19TQ08iLCBCVFBST1RPX1NDTyk7CiAjZW5kaWYKQEAgLTQ1OTksMTYgKzQ2NzgsMzIgQEAKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0xPQ0FMIiwgIjAwOjAwOjAwOkZGOkZGOkZGIik7CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfTkVUUEFDS0VUX1BBQ0tFVF9ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1BBQ0tFVCIsIEFGX1BBQ0tFVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1BBQ0tFVCIsIFBGX1BBQ0tFVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9IT1NUIiwgUEFDS0VUX0hPU1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQQUNLRVRfQlJPQURDQVNUIiwgUEFDS0VUX0JST0FEQ0FTVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBBQ0tFVF9NVUxUSUNBU1QiLCBQQUNLRVRfTVVMVElDQVNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEFDS0VUX09USEVSSE9TVCIsIFBBQ0tFVF9PVEhFUkhPU1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQQUNLRVRfT1VUR09JTkciLCBQQUNLRVRfT1VUR09JTkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQQUNLRVRfTE9PUEJBQ0siLCBQQUNLRVRfTE9PUEJBQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQQUNLRVRfRkFTVFJPVVRFIiwgUEFDS0VUX0ZBU1RST1VURSk7CisjaWZkZWYgQUZfUEFDS0VUCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUEFDS0VUKTsKKyNlbmRpZgorI2lmZGVmIFBGX1BBQ0tFVAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1BBQ0tFVCk7CisjZW5kaWYKKyNpZmRlZiBQQUNLRVRfSE9TVAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9IT1NUKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9CUk9BRENBU1QKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQQUNLRVRfQlJPQURDQVNUKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9NVUxUSUNBU1QKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQQUNLRVRfTVVMVElDQVNUKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9PVEhFUkhPU1QKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQQUNLRVRfT1RIRVJIT1NUKTsKKyNlbmRpZgorI2lmZGVmIFBBQ0tFVF9PVVRHT0lORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9PVVRHT0lORyk7CisjZW5kaWYKKyNpZmRlZiBQQUNLRVRfTE9PUEJBQ0sKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQQUNLRVRfTE9PUEJBQ0spOworI2VuZGlmCisjaWZkZWYgUEFDS0VUX0ZBU1RST1VURQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBBQ0tFVF9GQVNUUk9VVEUpOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xJTlVYX1RJUENfSApAQCAtNDcyNSw2ICs0ODIwLDkgQEAKICNpZmRlZiAgU09fVFlQRQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19UWVBFIiwgU09fVFlQRSk7CiAjZW5kaWYKKyNpZmRlZiBTT19TRVRGSUIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU0VURklCIiwgU09fU0VURklCKTsKKyNlbmRpZgogCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yICJsaXN0ZW4iICovCiAjaWZkZWYgIFNPTUFYQ09OTgpAQCAtNTI3MSwxMSArNTM2OSwxNiBAQAogCiAjaWZkZWYgU0lPX1JDVkFMTAogICAgIHsKLSAgICAgICAgUHlPYmplY3QgKnRtcDsKLSAgICAgICAgdG1wID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoU0lPX1JDVkFMTCk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSU9fUkNWQUxMIiwgdG1wKTsKKyAgICAgICAgRFdPUkQgY29kZXNbXSA9IHtTSU9fUkNWQUxMLCBTSU9fS0VFUEFMSVZFX1ZBTFN9OworICAgICAgICBjb25zdCBjaGFyICpuYW1lc1tdID0geyJTSU9fUkNWQUxMIiwgIlNJT19LRUVQQUxJVkVfVkFMUyJ9OworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yKGkgPSAwOyBpPHNpemVvZihjb2Rlcykvc2l6ZW9mKCpjb2Rlcyk7ICsraSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRtcDsKKyAgICAgICAgICAgIHRtcCA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGNvZGVzW2ldKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgbmFtZXNbaV0sIHRtcCk7CisgICAgICAgIH0KICAgICB9CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PRkYiLCBSQ1ZBTExfT0ZGKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09OIiwgUkNWQUxMX09OKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmggYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCmluZGV4IDliODU3NzMuLjg1MTU0OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaApAQCAtNzgsNiArNzgsNyBAQAogLyogUHl0aG9uIG1vZHVsZSBhbmQgQyBBUEkgbmFtZSAqLwogI2RlZmluZSBQeVNvY2tldF9NT0RVTEVfTkFNRSAgICAiX3NvY2tldCIKICNkZWZpbmUgUHlTb2NrZXRfQ0FQSV9OQU1FICAgICAgIkNBUEkiCisjZGVmaW5lIFB5U29ja2V0X0NBUFNVTEVfTkFNRSAgKFB5U29ja2V0X01PRFVMRV9OQU1FICIuIiBQeVNvY2tldF9DQVBJX05BTUUpCiAKIC8qIEFic3RyYWN0IHRoZSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yIHR5cGUgKi8KICNpZmRlZiBNU19XSU5ET1dTCkBAIC0xNDIsMTIgKzE0MywxMiBAQAogICAgIHRoZSBfc29ja2V0IG1vZHVsZS4gU2luY2UgY3Jvc3MtRExMIGxpbmtpbmcgaW50cm9kdWNlcyBhIGxvdCBvZgogICAgIHByb2JsZW1zIG9uIG1hbnkgcGxhdGZvcm1zLCB0aGUgInRyaWNrIiBpcyB0byB3cmFwIHRoZQogICAgIEMgQVBJIG9mIGEgbW9kdWxlIGluIGEgc3RydWN0IHdoaWNoIHRoZW4gZ2V0cyBleHBvcnRlZCB0bwotICAgIG90aGVyIG1vZHVsZXMgdmlhIGEgUHlDT2JqZWN0LgorICAgIG90aGVyIG1vZHVsZXMgdmlhIGEgUHlDYXBzdWxlLgogCiAgICAgVGhlIGNvZGUgaW4gc29ja2V0bW9kdWxlLmMgZGVmaW5lcyB0aGlzIHN0cnVjdCAod2hpY2ggY3VycmVudGx5CiAgICAgb25seSBjb250YWlucyB0aGUgdHlwZSBvYmplY3QgcmVmZXJlbmNlLCBidXQgY291bGQgdmVyeQogICAgIHdlbGwgYWxzbyBpbmNsdWRlIG90aGVyIEMgQVBJcyBuZWVkZWQgYnkgb3RoZXIgbW9kdWxlcykKLSAgICBhbmQgZXhwb3J0cyBpdCBhcyBQeUNPYmplY3QgdmlhIHRoZSBtb2R1bGUgZGljdGlvbmFyeQorICAgIGFuZCBleHBvcnRzIGl0IGFzIFB5Q2Fwc3VsZSB2aWEgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5CiAgICAgdW5kZXIgdGhlIG5hbWUgIkNBUEkiLgogCiAgICAgT3RoZXIgbW9kdWxlcyBjYW4gbm93IGluY2x1ZGUgdGhlIHNvY2tldG1vZHVsZS5oIGZpbGUKQEAgLTIyNiwzMyArMjI3LDE4IEBACiBzdGF0aWMKIGludCBQeVNvY2tldE1vZHVsZV9JbXBvcnRNb2R1bGVBbmRBUEkodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbW9kID0gMCwgKnYgPSAwOwotICAgIGNoYXIgKmFwaW1vZHVsZSA9IFB5U29ja2V0X01PRFVMRV9OQU1FOwotICAgIGNoYXIgKmFwaW5hbWUgPSBQeVNvY2tldF9DQVBJX05BTUU7CiAgICAgdm9pZCAqYXBpOwogCi0gICAgRFBSSU5URigiSW1wb3J0aW5nIHRoZSAlcyBDIEFQSS4uLlxuIiwgYXBpbW9kdWxlKTsKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKGFwaW1vZHVsZSk7Ci0gICAgaWYgKG1vZCA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgRFBSSU5URigiICVzIHBhY2thZ2UgZm91bmRcbiIsIGFwaW1vZHVsZSk7Ci0gICAgdiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobW9kLCBhcGluYW1lKTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgUHlfREVDUkVGKG1vZCk7Ci0gICAgRFBSSU5URigiIEFQSSBvYmplY3QgJXMgZm91bmRcbiIsIGFwaW5hbWUpOwotICAgIGFwaSA9IFB5Q09iamVjdF9Bc1ZvaWRQdHIodik7CisgIERQUklOVEYoIiBMb2FkaW5nIGNhcHN1bGUgJXNcbiIsIFB5U29ja2V0X0NBUFNVTEVfTkFNRSk7CisgIGFwaSA9IFB5Q2Fwc3VsZV9JbXBvcnQoUHlTb2NrZXRfQ0FQU1VMRV9OQU1FLCAxKTsKICAgICBpZiAoYXBpID09IE5VTEwpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeV9ERUNSRUYodik7CiAgICAgbWVtY3B5KCZQeVNvY2tldE1vZHVsZSwgYXBpLCBzaXplb2YoUHlTb2NrZXRNb2R1bGUpKTsKICAgICBEUFJJTlRGKCIgQVBJIG9iamVjdCBsb2FkZWQgYW5kIGluaXRpYWxpemVkLlxuIik7CiAgICAgcmV0dXJuIDA7CiAKICBvbkVycm9yOgogICAgIERQUklOVEYoIiBub3QgZm91bmQuXG4iKTsKLSAgICBQeV9YREVDUkVGKG1vZCk7Ci0gICAgUHlfWERFQ1JFRih2KTsKICAgICByZXR1cm4gLTE7CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3Ryb3Btb2R1bGUuYyBiL01vZHVsZXMvc3Ryb3Btb2R1bGUuYwppbmRleCAwOTBiMDdlLi40Njg0YmFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N0cm9wbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zdHJvcG1vZHVsZS5jCkBAIC04NzksMTAgKzg3OSwxMiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHN0cmluZyBmb3IgYXRvZigpIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlcnJubyA9IDA7CisKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJzdHJvcF9hdG9mIiwgcmV0dXJuIDApCi0gICAgeCA9IFB5T1NfYXNjaWlfc3RydG9kKHMsICZlbmQpOworICAgIHggPSBQeU9TX3N0cmluZ190b19kb3VibGUocywgJmVuZCwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QoeCkKKyAgICBpZiAoeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB3aGlsZSAoKmVuZCAmJiBpc3NwYWNlKFB5X0NIQVJNQVNLKCplbmQpKSkKICAgICAgICAgZW5kKys7CiAgICAgaWYgKCplbmQgIT0gJ1wwJykgewpAQCAtODkxLDEyICs4OTMsNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UgaWYgKGVycm5vICE9IDApIHsKLSAgICAgICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAgICAgICAgICAgICAgICJhdG9mKCkgbGl0ZXJhbCB0b28gbGFyZ2U6ICUuMjAwcyIsIHMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCA4NmM2NDgxLi42MGY5YmE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC01OSwxMSArNTksNyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfR0xPQkFMIiwgREVGX0dMT0JBTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9MT0NBTCIsIERFRl9MT0NBTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9QQVJBTSIsIERFRl9QQVJBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9TVEFSIiwgREVGX1NUQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRE9VQkxFU1RBUiIsIERFRl9ET1VCTEVTVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lOVFVQTEUiLCBERUZfSU5UVVBMRSk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFIiwgREVGX0ZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9HTE9CQUwiLCBERUZfRlJFRV9HTE9CQUwpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9DTEFTUyIsIERFRl9GUkVFX0NMQVNTKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lNUE9SVCIsIERFRl9JTVBPUlQpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfQk9VTkQiLCBERUZfQk9VTkQpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKaW5kZXggZTBmY2EwZC4uMzdlYWViYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCkBAIC0yNiw2ICsyNiwxMSBAQAogCiBSZXZpc2lvbiBoaXN0b3J5OgogCisyMDEwLzA0LzIwIChTZWFuIFJlaWZzY2huZWlkZXIpCisgIC0gVXNlIGJhc2VuYW1lKHN5cy5hcmd2WzBdKSBmb3IgdGhlIGRlZmF1bHQgImlkZW50Ii4KKyAgLSBBcmd1bWVudHMgdG8gb3BlbmxvZygpIGFyZSBub3cga2V5d29yZCBhcmdzIGFuZCBhcmUgYWxsIG9wdGlvbmFsLgorICAtIHN5c2xvZygpIGNhbGxzIG9wZW5sb2coKSBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNhbGxlZC4KKwogMTk5OC8wNC8yOCAoU2VhbiBSZWlmc2NobmVpZGVyKQogICAtIFdoZW4gZmFjaWxpdHkgbm90IHNwZWNpZmllZCB0byBzeXNsb2coKSBtZXRob2QsIHVzZSBkZWZhdWx0IGZyb20gb3BlbmxvZygpCiAgICAgKFRoaXMgaXMgaG93IGl0IHdhcyBjbGFpbWVkIHRvIHdvcmsgaW4gdGhlIGRvY3VtZW50YXRpb24pCkBAIC00NSwzMyArNTAsOTEgQEAKIC8qIHN5c2xvZyBtb2R1bGUgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgIm9zZGVmcy5oIgogCiAjaW5jbHVkZSA8c3lzbG9nLmg+CiAKIC8qICBvbmx5IG9uZSBpbnN0YW5jZSwgb25seSBvbmUgc3lzbG9nLCBzbyBnbG9iYWxzIHNob3VsZCBiZSBvayAgKi8KIHN0YXRpYyBQeU9iamVjdCAqU19pZGVudF9vID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgLyogIGlkZW50aWZpZXIsIGhlbGQgYnkgb3BlbmxvZygpICAqLworc3RhdGljIGNoYXIgU19sb2dfb3BlbiA9IDA7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLXN5c2xvZ19vcGVubG9nKFB5T2JqZWN0ICogc2VsZiwgUHlPYmplY3QgKiBhcmdzKQorc3lzbG9nX2dldF9hcmd2KHZvaWQpCit7CisgICAgLyogRmlndXJlIG91dCB3aGF0IHRvIHVzZSBmb3IgYXMgdGhlIHByb2dyYW0gImlkZW50IiBmb3Igb3BlbmxvZygpLgorICAgICAqIFRoaXMgc3dhbGxvd3MgZXhjZXB0aW9ucyBhbmQgY29udGludWVzIHJhdGhlciB0aGFuIGZhaWxpbmcgb3V0LAorICAgICAqIGJlY2F1c2UgdGhlIHN5c2xvZyBtb2R1bGUgY2FuIHN0aWxsIGJlIHVzZWQgYmVjYXVzZSBvcGVubG9nKDMpCisgICAgICogaXMgb3B0aW9uYWwuCisgICAgICovCisKKyAgICBQeV9zc2l6ZV90IGFyZ3ZfbGVuOworICAgIFB5T2JqZWN0ICpzY3JpcHRvYmo7CisgICAgY2hhciAqYXRzbGFzaDsKKyAgICBQeU9iamVjdCAqYXJndiA9IFB5U3lzX0dldE9iamVjdCgiYXJndiIpOworCisgICAgaWYgKGFyZ3YgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgYXJndl9sZW4gPSBQeUxpc3RfU2l6ZShhcmd2KTsKKyAgICBpZiAoYXJndl9sZW4gPT0gLTEpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICBpZiAoYXJndl9sZW4gPT0gMCkgeworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgc2NyaXB0b2JqID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7CisgICAgaWYgKCFQeVN0cmluZ19DaGVjayhzY3JpcHRvYmopKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgaWYgKFB5U3RyaW5nX0dFVF9TSVpFKHNjcmlwdG9iaikgPT0gMCkgeworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgYXRzbGFzaCA9IHN0cnJjaHIoUHlTdHJpbmdfQXNTdHJpbmcoc2NyaXB0b2JqKSwgU0VQKTsKKyAgICBpZiAoYXRzbGFzaCkgeworICAgICAgICByZXR1cm4oUHlTdHJpbmdfRnJvbVN0cmluZyhhdHNsYXNoICsgMSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihzY3JpcHRvYmopOworICAgICAgICByZXR1cm4oc2NyaXB0b2JqKTsKKyAgICB9CisKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK3N5c2xvZ19vcGVubG9nKFB5T2JqZWN0ICogc2VsZiwgUHlPYmplY3QgKiBhcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBsb25nIGxvZ29wdCA9IDA7CiAgICAgbG9uZyBmYWNpbGl0eSA9IExPR19VU0VSOwotICAgIFB5T2JqZWN0ICpuZXdfU19pZGVudF9vOworICAgIFB5T2JqZWN0ICpuZXdfU19pZGVudF9vID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiaWRlbnQiLCAibG9nb3B0aW9uIiwgImZhY2lsaXR5IiwgMH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlN8bGw7aWRlbnQgc3RyaW5nIFssIGxvZ29wdGlvbiBbLCBmYWNpbGl0eV1dIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19TX2lkZW50X28sICZsb2dvcHQsICZmYWNpbGl0eSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInxTbGw6b3BlbmxvZyIsIGtleXdvcmRzLCAmbmV3X1NfaWRlbnRfbywgJmxvZ29wdCwgJmZhY2lsaXR5KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9wZW5sb2coKSBkb2VzIE5PVCBtYWtlIGEgY29weQotICAgICAqIGFuZCBzeXNsb2coKSBsYXRlciB1c2VzIGl0Li4gY2Fubm90IHRyYXNoIGl0LgotICAgICAqLworICAgIGlmIChuZXdfU19pZGVudF9vKSB7IFB5X0lOQ1JFRihuZXdfU19pZGVudF9vKTsgfQorCisgICAgLyogIGdldCBzeXMuYXJndlswXSBvciBOVUxMIGlmIHdlIGNhbid0IGZvciBzb21lIHJlYXNvbiAgKi8KKyAgICBpZiAoIW5ld19TX2lkZW50X28pIHsKKyAgICAgICAgbmV3X1NfaWRlbnRfbyA9IHN5c2xvZ19nZXRfYXJndigpOworICAgICAgICB9CisKICAgICBQeV9YREVDUkVGKFNfaWRlbnRfbyk7CiAgICAgU19pZGVudF9vID0gbmV3X1NfaWRlbnRfbzsKLSAgICBQeV9JTkNSRUYoU19pZGVudF9vKTsKIAotICAgIG9wZW5sb2coUHlTdHJpbmdfQXNTdHJpbmcoU19pZGVudF9vKSwgbG9nb3B0LCBmYWNpbGl0eSk7CisgICAgLyogQXQgdGhpcyBwb2ludCwgU19pZGVudF9vIHNob3VsZCBiZSBJTkNSRUYoKWVkLiAgb3BlbmxvZygzKSBkb2VzIG5vdAorICAgICAqIG1ha2UgYSBjb3B5LCBhbmQgc3lzbG9nKDMpIGxhdGVyIHVzZXMgaXQuICBXZSBjYW4ndCBnYXJiYWdlY29sbGVjdCBpdAorICAgICAqIElmIE5VTEwsIGp1c3QgbGV0IG9wZW5sb2cgZmlndXJlIGl0IG91dCAocHJvYmFibHkgdXNpbmcgQyBhcmd2WzBdKS4KKyAgICAgKi8KKworICAgIG9wZW5sb2coU19pZGVudF9vID8gUHlTdHJpbmdfQXNTdHJpbmcoU19pZGVudF9vKSA6IE5VTEwsIGxvZ29wdCwgZmFjaWxpdHkpOworICAgIFNfbG9nX29wZW4gPSAxOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtOTIsNiArMTU1LDIxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiAgaWYgbG9nIGlzIG5vdCBvcGVuZWQsIG9wZW4gaXQgbm93ICAqLworICAgIGlmICghU19sb2dfb3BlbikgeworICAgICAgICBQeU9iamVjdCAqb3BlbmFyZ3M7CisKKyAgICAgICAgLyogQ29udGludWUgZXZlbiBpZiBQeVR1cGxlX05ldyBmYWlscywgYmVjYXVzZSBvcGVubG9nKDMpIGlzIG9wdGlvbmFsLgorICAgICAgICAgKiBTbywgd2UgY2FuIHN0aWxsIGRvIGxvZ2dpbiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhpbmdzIGFyZSBzbyBob3NlZAorICAgICAgICAgKiB0aGF0IHdlIGNhbid0IGRvIHRoaXMgdHVwbGUuCisgICAgICAgICAqLworICAgICAgICBpZiAoKG9wZW5hcmdzID0gUHlUdXBsZV9OZXcoMCkpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb3BlbmxvZ19yZXQgPSBzeXNsb2dfb3BlbmxvZyhzZWxmLCBvcGVuYXJncywgTlVMTCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKG9wZW5sb2dfcmV0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcGVuYXJncyk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwogICAgIHN5c2xvZyhwcmlvcml0eSwgIiVzIiwgbWVzc2FnZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CkBAIC0xMDIsOSArMTgwLDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3lzbG9nX2Nsb3NlbG9nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIGNsb3NlbG9nKCk7Ci0gICAgUHlfWERFQ1JFRihTX2lkZW50X28pOwotICAgIFNfaWRlbnRfbyA9IE5VTEw7CisgICAgaWYgKFNfbG9nX29wZW4pIHsKKyAgICAgICAgY2xvc2Vsb2coKTsKKyAgICAgICAgUHlfWERFQ1JFRihTX2lkZW50X28pOworICAgICAgICBTX2lkZW50X28gPSBOVUxMOworICAgICAgICBTX2xvZ19vcGVuID0gMDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMTQ1LDcgKzIyNiw3IEBACiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN5c2xvZ19tZXRob2RzW10gPSB7Ci0gICAgeyJvcGVubG9nIiwgICAgICAgICBzeXNsb2dfb3BlbmxvZywgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsib3BlbmxvZyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBzeXNsb2dfb3BlbmxvZywgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAogICAgIHsiY2xvc2Vsb2ciLCAgICAgICAgc3lzbG9nX2Nsb3NlbG9nLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsic3lzbG9nIiwgICAgICAgICAgc3lzbG9nX3N5c2xvZywgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InNldGxvZ21hc2siLCAgICAgIHN5c2xvZ19zZXRsb2dtYXNrLCAgICAgIE1FVEhfVkFSQVJHU30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Rlcm1pb3MuYyBiL01vZHVsZXMvdGVybWlvcy5jCmluZGV4IDg0NTkyNTcuLjU3ZjMwZGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGVybWlvcy5jCisrKyBiL01vZHVsZXMvdGVybWlvcy5jCkBAIC0zNTcsNiArMzU3LDkgQEAKICAgICB7IlRDU0FOT1ciLCBUQ1NBTk9XfSwKICAgICB7IlRDU0FEUkFJTiIsIFRDU0FEUkFJTn0sCiAgICAgeyJUQ1NBRkxVU0giLCBUQ1NBRkxVU0h9LAorI2lmZGVmIFRDU0FTT0ZUCisgICAgeyJUQ1NBU09GVCIsIFRDU0FTT0ZUfSwKKyNlbmRpZgogCiAgICAgLyogdGNmbHVzaCgpIGNvbnN0YW50cyAqLwogICAgIHsiVENJRkxVU0giLCBUQ0lGTFVTSH0sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Rlc3RjYXBpX2xvbmcuaCBiL01vZHVsZXMvdGVzdGNhcGlfbG9uZy5oCmluZGV4IGQ5YjY2NjMuLmZhOTRmZDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGVzdGNhcGlfbG9uZy5oCisrKyBiL01vZHVsZXMvdGVzdGNhcGlfbG9uZy5oCkBAIC05Nyw2ICs5NywxMCBAQAogICAgICAgICBpZiAodW91dCAhPSAodW5zaWduZWQgVFlQRU5BTUUpLTEgfHwgIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoCiAgICAgICAgICAgICAgICAgIlB5TG9uZ19Bc1Vuc2lnbmVkWFhYKC0xKSBkaWRuJ3QgY29tcGxhaW4iKTsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKAorICAgICAgICAgICAgICAgICJQeUxvbmdfQXNVbnNpZ25lZFhYWCgtMSkgcmFpc2VkICIKKyAgICAgICAgICAgICAgICAic29tZXRoaW5nIG90aGVyIHRoYW4gT3ZlcmZsb3dFcnJvciIpOwogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBVTkJJTkQoeCk7CiAKQEAgLTExNyw2ICsxMjEsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcigKICAgICAgICAgICAgICAgICAiUHlMb25nX0FzVW5zaWduZWRYWFgoMioqTkJJVFMpIGRpZG4ndCAiCiAgICAgICAgICAgICAgICAgImNvbXBsYWluIik7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcigKKyAgICAgICAgICAgICAgICAiUHlMb25nX0FzVW5zaWduZWRYWFgoMioqTkJJVFMpIHJhaXNlZCAiCisgICAgICAgICAgICAgICAgInNvbWV0aGluZyBvdGhlciB0aGFuIE92ZXJmbG93RXJyb3IiKTsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgICAgICAvKiBTaWduZWQgY29tcGxhaW5zIGFib3V0IDIqKihOQklUUy0xKT8KQEAgLTEzMiw2ICsxNDAsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcigKICAgICAgICAgICAgICAgICAiUHlMb25nX0FzWFhYKDIqKihOQklUUy0xKSkgZGlkbid0ICIKICAgICAgICAgICAgICAgICAiY29tcGxhaW4iKTsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yKAorICAgICAgICAgICAgICAgICJQeUxvbmdfQXNYWFgoMioqKE5CSVRTLTEpKSByYWlzZWQgIgorICAgICAgICAgICAgICAgICJzb21ldGhpbmcgb3RoZXIgdGhhbiBPdmVyZmxvd0Vycm9yIik7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAKICAgICAgICAgLyogU2lnbmVkIGNvbXBsYWlucyBhYm91dCAtMioqKE5CSVRTLTEpLTE/OwpAQCAtMTUzLDYgKzE2NSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKAogICAgICAgICAgICAgICAgICJQeUxvbmdfQXNYWFgoLTIqKihOQklUUy0xKS0xKSBkaWRuJ3QgIgogICAgICAgICAgICAgICAgICJjb21wbGFpbiIpOworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICByZXR1cm4gZXJyb3IoCisgICAgICAgICAgICAgICAgIlB5TG9uZ19Bc1hYWCgtMioqKE5CSVRTLTEpLTEpIHJhaXNlZCAiCisgICAgICAgICAgICAgICAgInNvbWV0aGluZyBvdGhlciB0aGFuIE92ZXJmbG93RXJyb3IiKTsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgVU5CSU5EKHkpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RocmVhZG1vZHVsZS5jIGIvTW9kdWxlcy90aHJlYWRtb2R1bGUuYwppbmRleCBkZTM0YWUyLi41M2E4MzNjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvdGhyZWFkbW9kdWxlLmMKQEAgLTMsNiArMyw3IEBACiAvKiBJbnRlcmZhY2UgdG8gU2pvZXJkJ3MgcG9ydGFibGUgQyB0aHJlYWQgbGlicmFyeSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiIC8qIG9mZnNldG9mICovCiAKICNpZm5kZWYgV0lUSF9USFJFQUQKICNlcnJvciAiRXJyb3IhICBUaGUgcmVzdCBvZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIHdpdGggdGhyZWFkIHN1cHBvcnQuIgpAQCAtMTMsMTggKzE0LDIyIEBACiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKIAogc3RhdGljIFB5T2JqZWN0ICpUaHJlYWRFcnJvcjsKLQorc3RhdGljIFB5T2JqZWN0ICpzdHJfZGljdDsKK3N0YXRpYyBsb25nIG5iX3RocmVhZHMgPSAwOwogCiAvKiBMb2NrIG9iamVjdHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeVRocmVhZF90eXBlX2xvY2sgbG9ja19sb2NrOworICAgIFB5T2JqZWN0ICppbl93ZWFrcmVmbGlzdDsKIH0gbG9ja29iamVjdDsKIAogc3RhdGljIHZvaWQKIGxvY2tfZGVhbGxvYyhsb2Nrb2JqZWN0ICpzZWxmKQogeworICAgIGlmIChzZWxmLT5pbl93ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKICAgICBpZiAoc2VsZi0+bG9ja19sb2NrICE9IE5VTEwpIHsKICAgICAgICAgLyogVW5sb2NrIHRoZSBsb2NrIHNvIGl0J3Mgc2FmZSB0byBmcmVlIGl0ICovCiAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrX2xvY2ssIDApOwpAQCAtMTE3LDE1ICsxMjIsOSBAQAogICAgICBNRVRIX1ZBUkFSR1MsIGFjcXVpcmVfZG9jfSwKICAgICB7Il9fZXhpdF9fIiwgICAgKFB5Q0Z1bmN0aW9uKWxvY2tfUHlUaHJlYWRfcmVsZWFzZV9sb2NrLAogICAgICBNRVRIX1ZBUkFSR1MsIHJlbGVhc2VfZG9jfSwKLSAgICB7TlVMTCwgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIHtOVUxMfSAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1sb2NrX2dldGF0dHIobG9ja29iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKLXsKLSAgICByZXR1cm4gUHlfRmluZE1ldGhvZChsb2NrX21ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotfQotCiBzdGF0aWMgUHlUeXBlT2JqZWN0IExvY2t0eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgInRocmVhZC5sb2NrIiwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KQEAgLTEzNCwxMCArMTMzLDI4IEBACiAgICAgLyogbWV0aG9kcyAqLwogICAgIChkZXN0cnVjdG9yKWxvY2tfZGVhbGxvYywgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgKGdldGF0dHJmdW5jKWxvY2tfZ2V0YXR0ciwgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfSEFWRV9XRUFLUkVGUywgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihsb2Nrb2JqZWN0LCBpbl93ZWFrcmVmbGlzdCksICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgbG9ja19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogfTsKIAogc3RhdGljIGxvY2tvYmplY3QgKgpAQCAtMTQ4LDYgKzE2NSw3IEBACiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+bG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBpZiAoc2VsZi0+bG9ja19sb2NrID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7CkBAIC0xNjAsMTkgKzE3OCwxNjAgQEAKIAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCisvKiBRdWljayBvdmVydmlldzoKKworICAgV2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlY2xhaW0gcmVmZXJlbmNlIGN5Y2xlcyBhcyBzb29uIGFzIHBvc3NpYmxlCisgICAoYm90aCB3aGVuIGEgdGhyZWFkIGlzIGJlaW5nIHRlcm1pbmF0ZWQsIG9yIGEgdGhyZWFkLWxvY2FsIG9iamVjdAorICAgIGJlY29tZXMgdW5yZWFjaGFibGUgZnJvbSB1c2VyIGRhdGEpLiAgQ29uc3RyYWludHM6CisgICAtIGl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIGZvciB0aHJlYWQtc3RhdGUgZGljdHMgdG8gYmUgaW52b2x2ZWQgaW4KKyAgICAgcmVmZXJlbmNlIGN5Y2xlcyAob3RoZXJ3aXNlIHRoZSBjeWNsaWMgR0Mgd2lsbCByZWZ1c2UgdG8gY29uc2lkZXIKKyAgICAgb2JqZWN0cyByZWZlcmVuY2VkIGZyb20gYSByZWFjaGFibGUgdGhyZWFkLXN0YXRlIGRpY3QsIGV2ZW4gdGhvdWdoCisgICAgIGxvY2FsX2RlYWxsb2Mgd291bGQgY2xlYXIgdGhlbSkKKyAgIC0gdGhlIGRlYXRoIG9mIGEgdGhyZWFkLXN0YXRlIGRpY3QgbXVzdCBzdGlsbCBpbXBseSBkZXN0cnVjdGlvbiBvZiB0aGUKKyAgICAgY29ycmVzcG9uZGluZyBsb2NhbCBkaWN0cyBpbiBhbGwgdGhyZWFkLWxvY2FsIG9iamVjdHMuCisKKyAgIE91ciBpbXBsZW1lbnRhdGlvbiB1c2VzIHNtYWxsICJsb2NhbGR1bW15IiBvYmplY3RzIGluIG9yZGVyIHRvIGJyZWFrCisgICB0aGUgcmVmZXJlbmNlIGNoYWluLiBUaGVzZSB0cml2aWFsIG9iamVjdHMgYXJlIGhhc2hhYmxlICh1c2luZyB0aGUKKyAgIGRlZmF1bHQgc2NoZW1lIG9mIGlkZW50aXR5IGhhc2hpbmcpIGFuZCB3ZWFrcmVmYWJsZS4KKyAgIEVhY2ggdGhyZWFkLXN0YXRlIGhvbGRzIGEgc2VwYXJhdGUgbG9jYWxkdW1teSBmb3IgZWFjaCBsb2NhbCBvYmplY3QKKyAgIChhcyBhIC9zdHJvbmcgcmVmZXJlbmNlLyksCisgICBhbmQgZWFjaCB0aHJlYWQtbG9jYWwgb2JqZWN0IGhvbGRzIGEgZGljdCBtYXBwaW5nIC93ZWFrIHJlZmVyZW5jZXMvCisgICBvZiBsb2NhbGR1bW1pZXMgdG8gbG9jYWwgZGljdHMuCisKKyAgIFRoZXJlZm9yZToKKyAgIC0gb25seSB0aGUgdGhyZWFkLXN0YXRlIGRpY3QgaG9sZHMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBkdW1taWVzCisgICAtIG9ubHkgdGhlIHRocmVhZC1sb2NhbCBvYmplY3QgaG9sZHMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbCBkaWN0cworICAgLSBvbmx5IG91dHNpZGUgb2JqZWN0cyAoYXBwbGljYXRpb24tIG9yIGxpYnJhcnktbGV2ZWwpIGhvbGQgc3Ryb25nCisgICAgIHJlZmVyZW5jZXMgdG8gdGhlIHRocmVhZC1sb2NhbCBvYmplY3RzCisgICAtIGFzIHNvb24gYXMgYSB0aHJlYWQtc3RhdGUgZGljdCBpcyBkZXN0cm95ZWQsIHRoZSB3ZWFrcmVmIGNhbGxiYWNrcyBvZiBhbGwKKyAgICAgZHVtbWllcyBhdHRhY2hlZCB0byB0aGF0IHRocmVhZCBhcmUgY2FsbGVkLCBhbmQgZGVzdHJveSB0aGUgY29ycmVzcG9uZGluZworICAgICBsb2NhbCBkaWN0cyBmcm9tIHRocmVhZC1sb2NhbCBvYmplY3RzCisgICAtIGFzIHNvb24gYXMgYSB0aHJlYWQtbG9jYWwgb2JqZWN0IGlzIGRlc3Ryb3llZCwgaXRzIGxvY2FsIGRpY3RzIGFyZQorICAgICBkZXN0cm95ZWQgYW5kIGl0cyBkdW1taWVzIGFyZSBtYW51YWxseSByZW1vdmVkIGZyb20gYWxsIHRocmVhZCBzdGF0ZXMKKyAgIC0gdGhlIEdDIGNhbiBkbyBpdHMgd29yayBjb3JyZWN0bHkgd2hlbiBhIHRocmVhZC1sb2NhbCBvYmplY3QgaXMgZGFuZ2xpbmcsCisgICAgIHdpdGhvdXQgYW55IGludGVyZmVyZW5jZSBmcm9tIHRoZSB0aHJlYWQtc3RhdGUgZGljdHMKKworICAgQXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24sIGVhY2ggbG9jYWxkdW1teSBob2xkcyBhIGJvcnJvd2VkIHJlZmVyZW5jZQorICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWxkaWN0LiAgVGhpcyBib3Jyb3dlZCByZWZlcmVuY2UgaXMgb25seSB1c2VkCisgICBieSB0aGUgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBoYXMgY3JlYXRlZCB0aGUgbG9jYWxkdW1teSwgd2hpY2ggc2hvdWxkCisgICBndWFyYW50ZWUgdGhhdCB0aGUgbG9jYWxkaWN0IHN0aWxsIGV4aXN0cyB3aGVuIGFjY2Vzc2VkLgorKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdCAqbG9jYWxkaWN0OyAgICAgICAgLyogQm9ycm93ZWQgcmVmZXJlbmNlISAqLworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgICAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBzZWxmICovCit9IGxvY2FsZHVtbXlvYmplY3Q7CisKK3N0YXRpYyB2b2lkCitsb2NhbGR1bW15X2RlYWxsb2MobG9jYWxkdW1teW9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CisgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IGxvY2FsZHVtbXl0eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgIC8qIHRwX25hbWUgICAgICAgICAgICovICJfdGhyZWFkLl9sb2NhbGR1bW15IiwKKyAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YobG9jYWxkdW1teW9iamVjdCksCisgICAgLyogdHBfaXRlbXNpemUgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZWFsbG9jICAgICAgICAqLyAoZGVzdHJ1Y3Rvcilsb2NhbGR1bW15X2RlYWxsb2MsCisgICAgLyogdHBfcHJpbnQgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9nZXRhdHRyICAgICAgICAqLyAwLAorICAgIC8qIHRwX3NldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfcmVzZXJ2ZWQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXByICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX251bWJlciAgICAgICovIDAsCisgICAgLyogdHBfYXNfc2VxdWVuY2UgICAgKi8gMCwKKyAgICAvKiB0cF9hc19tYXBwaW5nICAgICAqLyAwLAorICAgIC8qIHRwX2hhc2ggICAgICAgICAgICovIDAsCisgICAgLyogdHBfY2FsbCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9zdHIgICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHJvICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19idWZmZXIgICAgICAqLyAwLAorICAgIC8qIHRwX2ZsYWdzICAgICAgICAgICovIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICAvKiB0cF9kb2MgICAgICAgICAgICAqLyAiVGhyZWFkLWxvY2FsIGR1bW15IiwKKyAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIDAsCisgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyBvZmZzZXRvZihsb2NhbGR1bW15b2JqZWN0LCB3ZWFrcmVmbGlzdCkKK307CisKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5T2JqZWN0ICphcmdzOwogICAgIFB5T2JqZWN0ICprdzsKLSAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7ICAgICAgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc2VsZiAqLworICAgIC8qIEEge2xvY2FsZHVtbXkgd2Vha3JlZiAtPiBsb2NhbGRpY3R9IGRpY3QgKi8KKyAgICBQeU9iamVjdCAqZHVtbWllczsKKyAgICAvKiBUaGUgY2FsbGJhY2sgZm9yIHdlYWtyZWZzIHRvIGxvY2FsZHVtbWllcyAqLworICAgIFB5T2JqZWN0ICp3cl9jYWxsYmFjazsKIH0gbG9jYWxvYmplY3Q7CiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBQeU9iamVjdCAqX2xkaWN0KGxvY2Fsb2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBQeU9iamVjdCAqX2xvY2FsZHVtbXlfZGVzdHJveWVkKFB5T2JqZWN0ICptZXRoX3NlbGYsIFB5T2JqZWN0ICpkdW1teXdlYWtyZWYpOworCisvKiBDcmVhdGUgYW5kIHJlZ2lzdGVyIHRoZSBkdW1teSBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLgorICAgUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZyBsb2NhbCBkaWN0ICovCitzdGF0aWMgUHlPYmplY3QgKgorX2xvY2FsX2NyZWF0ZV9kdW1teShsb2NhbG9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqdGRpY3QsICpsZGljdCA9IE5VTEwsICp3ciA9IE5VTEw7CisgICAgbG9jYWxkdW1teW9iamVjdCAqZHVtbXkgPSBOVUxMOworICAgIGludCByOworCisgICAgdGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKKyAgICBpZiAodGRpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZ2V0IHRocmVhZC1zdGF0ZSBkaWN0aW9uYXJ5Iik7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworICAgIGxkaWN0ID0gUHlEaWN0X05ldygpOworICAgIGlmIChsZGljdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycjsKKyAgICBkdW1teSA9IChsb2NhbGR1bW15b2JqZWN0ICopIGxvY2FsZHVtbXl0eXBlLnRwX2FsbG9jKCZsb2NhbGR1bW15dHlwZSwgMCk7CisgICAgaWYgKGR1bW15ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyOworICAgIGR1bW15LT5sb2NhbGRpY3QgPSBsZGljdDsKKyAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIGR1bW15LCBzZWxmLT53cl9jYWxsYmFjayk7CisgICAgaWYgKHdyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyOworCisgICAgLyogQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyB3aWxsIGNhY2hlIHRoZSB3ZWFrcmVmJ3MgaGFzaCBiZWZvcmUgdGhlCisgICAgICAgZHVtbXkgZ2V0cyBkZWxldGVkICovCisgICAgciA9IFB5RGljdF9TZXRJdGVtKHNlbGYtPmR1bW1pZXMsIHdyLCBsZGljdCk7CisgICAgaWYgKHIgPCAwKQorICAgICAgICBnb3RvIGVycjsKKyAgICBQeV9DTEVBUih3cik7CisgICAgciA9IFB5RGljdF9TZXRJdGVtKHRkaWN0LCBzZWxmLT5rZXksIChQeU9iamVjdCAqKSBkdW1teSk7CisgICAgaWYgKHIgPCAwKQorICAgICAgICBnb3RvIGVycjsKKyAgICBQeV9DTEVBUihkdW1teSk7CisKKyAgICBQeV9ERUNSRUYobGRpY3QpOworICAgIHJldHVybiBsZGljdDsKKworZXJyOgorICAgIFB5X1hERUNSRUYobGRpY3QpOworICAgIFB5X1hERUNSRUYod3IpOworICAgIFB5X1hERUNSRUYoZHVtbXkpOworICAgIHJldHVybiBOVUxMOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9jYWxfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKICAgICBsb2NhbG9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqdGRpY3Q7CisgICAgUHlPYmplY3QgKndyOworICAgIHN0YXRpYyBQeU1ldGhvZERlZiB3cl9jYWxsYmFja19kZWYgPSB7CisgICAgICAgICJfbG9jYWxkdW1teV9kZXN0cm95ZWQiLCAoUHlDRnVuY3Rpb24pIF9sb2NhbGR1bW15X2Rlc3Ryb3llZCwgTUVUSF9PCisgICAgfTsKIAogICAgIGlmICh0eXBlLT50cF9pbml0ID09IFB5QmFzZU9iamVjdF9UeXBlLnRwX2luaXQKICAgICAgICAgJiYgKChhcmdzICYmIFB5T2JqZWN0X0lzVHJ1ZShhcmdzKSkKQEAgLTE5MCwyMyArMzQ5LDI1IEBACiAgICAgc2VsZi0+YXJncyA9IGFyZ3M7CiAgICAgUHlfWElOQ1JFRihrdyk7CiAgICAgc2VsZi0+a3cgPSBrdzsKLSAgICBzZWxmLT5kaWN0ID0gTlVMTDsgICAgICAgICAgLyogbWFraW5nIHN1cmUgKi8KICAgICBzZWxmLT5rZXkgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCJ0aHJlYWQubG9jYWwuJXAiLCBzZWxmKTsKICAgICBpZiAoc2VsZi0+a2V5ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwogCi0gICAgc2VsZi0+ZGljdCA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoc2VsZi0+ZGljdCA9PSBOVUxMKQorICAgIHNlbGYtPmR1bW1pZXMgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKHNlbGYtPmR1bW1pZXMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CiAKLSAgICB0ZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwotICAgIGlmICh0ZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBnZXQgdGhyZWFkLXN0YXRlIGRpY3Rpb25hcnkiKTsKKyAgICAvKiBXZSB1c2UgYSB3ZWFrIHJlZmVyZW5jZSB0byBzZWxmIGluIHRoZSBjYWxsYmFjayBjbG9zdXJlCisgICAgICAgaW4gb3JkZXIgdG8gYXZvaWQgc3B1cmlvdXMgcmVmZXJlbmNlIGN5Y2xlcyAqLworICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc2VsZiwgTlVMTCk7CisgICAgaWYgKHdyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwotICAgIH0KKyAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ldygmd3JfY2FsbGJhY2tfZGVmLCB3cik7CisgICAgUHlfREVDUkVGKHdyKTsKKyAgICBpZiAoc2VsZi0+d3JfY2FsbGJhY2sgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW0odGRpY3QsIHNlbGYtPmtleSwgc2VsZi0+ZGljdCkgPCAwKQorICAgIGlmIChfbG9jYWxfY3JlYXRlX2R1bW15KHNlbGYpID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CkBAIC0yMjEsMjMgKzM4MiwxOSBAQAogewogICAgIFB5X1ZJU0lUKHNlbGYtPmFyZ3MpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmt3KTsKLSAgICBQeV9WSVNJVChzZWxmLT5kaWN0KTsKKyAgICBQeV9WSVNJVChzZWxmLT5kdW1taWVzKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogbG9jYWxfY2xlYXIobG9jYWxvYmplY3QgKnNlbGYpCiB7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwogICAgIFB5X0NMRUFSKHNlbGYtPmFyZ3MpOwogICAgIFB5X0NMRUFSKHNlbGYtPmt3KTsKLSAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWxvY2FsX2RlYWxsb2MobG9jYWxvYmplY3QgKnNlbGYpCi17Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIFB5X0NMRUFSKHNlbGYtPmR1bW1pZXMpOworICAgIFB5X0NMRUFSKHNlbGYtPndyX2NhbGxiYWNrKTsKKyAgICAvKiBSZW1vdmUgYWxsIHN0cm9uZyByZWZlcmVuY2VzIHRvIGR1bW1pZXMgZnJvbSB0aGUgdGhyZWFkIHN0YXRlcyAqLwogICAgIGlmIChzZWxmLT5rZXkKICAgICAgICAgJiYgKHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCkpCiAgICAgICAgICYmIHRzdGF0ZS0+aW50ZXJwKSB7CkBAIC0yNDgsMTYgKzQwNSwyOSBAQAogICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtKHRzdGF0ZS0+ZGljdCwgc2VsZi0+a2V5KSkKICAgICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbSh0c3RhdGUtPmRpY3QsIHNlbGYtPmtleSk7CiAgICAgfQorICAgIHJldHVybiAwOworfQogCi0gICAgUHlfWERFQ1JFRihzZWxmLT5rZXkpOworc3RhdGljIHZvaWQKK2xvY2FsX2RlYWxsb2MobG9jYWxvYmplY3QgKnNlbGYpCit7CisgICAgLyogV2Vha3JlZnMgbXVzdCBiZSBpbnZhbGlkYXRlZCByaWdodCBub3csIG90aGVyd2lzZSB0aGV5IGNhbiBiZSB1c2VkCisgICAgICAgZnJvbSBjb2RlIGNhbGxlZCBiZWxvdywgd2hpY2ggaXMgdmVyeSBkYW5nZXJvdXMgc2luY2UgUHlfUkVGQ05UKHNlbGYpID09IDAgKi8KKyAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CisKKyAgICBQeU9iamVjdF9HQ19VblRyYWNrKHNlbGYpOworCiAgICAgbG9jYWxfY2xlYXIoc2VsZik7CisgICAgUHlfWERFQ1JFRihzZWxmLT5rZXkpOwogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKIH0KIAorLyogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbG9jYWwgZGljdCwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5ICovCiBzdGF0aWMgUHlPYmplY3QgKgogX2xkaWN0KGxvY2Fsb2JqZWN0ICpzZWxmKQogewotICAgIFB5T2JqZWN0ICp0ZGljdCwgKmxkaWN0OworICAgIFB5T2JqZWN0ICp0ZGljdCwgKmxkaWN0LCAqZHVtbXk7CiAKICAgICB0ZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOwogICAgIGlmICh0ZGljdCA9PSBOVUxMKSB7CkBAIC0yNjYsMjIgKzQzNiwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBsZGljdCA9IFB5RGljdF9HZXRJdGVtKHRkaWN0LCBzZWxmLT5rZXkpOwotICAgIGlmIChsZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgIGxkaWN0ID0gUHlEaWN0X05ldygpOyAvKiB3ZSBvd24gbGRpY3QgKi8KLQorICAgIGR1bW15ID0gUHlEaWN0X0dldEl0ZW0odGRpY3QsIHNlbGYtPmtleSk7CisgICAgaWYgKGR1bW15ID09IE5VTEwpIHsKKyAgICAgICAgbGRpY3QgPSBfbG9jYWxfY3JlYXRlX2R1bW15KHNlbGYpOwogICAgICAgICBpZiAobGRpY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBpID0gUHlEaWN0X1NldEl0ZW0odGRpY3QsIHNlbGYtPmtleSwgbGRpY3QpOwotICAgICAgICAgICAgUHlfREVDUkVGKGxkaWN0KTsgLyogbm93IGxkaWN0IGlzIGJvcnJvd2VkICovCi0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKLSAgICAgICAgUHlfSU5DUkVGKGxkaWN0KTsKLSAgICAgICAgc2VsZi0+ZGljdCA9IGxkaWN0OyAvKiBzdGlsbCBib3Jyb3dlZCAqLwogCiAgICAgICAgIGlmIChQeV9UWVBFKHNlbGYpLT50cF9pbml0ICE9IFB5QmFzZU9iamVjdF9UeXBlLnRwX2luaXQgJiYKICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX2luaXQoKFB5T2JqZWN0KilzZWxmLApAQCAtMjkyLDE1ICs0NTEsMTAgQEAKICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtKHRkaWN0LCBzZWxmLT5rZXkpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLQogICAgIH0KLQotICAgIC8qIFRoZSBjYWxsIHRvIHRwX2luaXQgYWJvdmUgbWF5IGhhdmUgY2F1c2VkIGFub3RoZXIgdGhyZWFkIHRvIHJ1bi4KLSAgICAgICBJbnN0YWxsIG91ciBsZGljdCBhZ2Fpbi4gKi8KLSAgICBpZiAoc2VsZi0+ZGljdCAhPSBsZGljdCkgewotICAgICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKLSAgICAgICAgUHlfSU5DUkVGKGxkaWN0KTsKLSAgICAgICAgc2VsZi0+ZGljdCA9IGxkaWN0OworICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoUHlfVFlQRShkdW1teSkgPT0gJmxvY2FsZHVtbXl0eXBlKTsKKyAgICAgICAgbGRpY3QgPSAoKGxvY2FsZHVtbXlvYmplY3QgKikgZHVtbXkpLT5sb2NhbGRpY3Q7CiAgICAgfQogCiAgICAgcmV0dXJuIGxkaWN0OwpAQCAtMzEwLDMyICs0NjQsMjUgQEAKIGxvY2FsX3NldGF0dHJvKGxvY2Fsb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlPYmplY3QgKmxkaWN0OworICAgIGludCByOwogCiAgICAgbGRpY3QgPSBfbGRpY3Qoc2VsZik7CiAgICAgaWYgKGxkaWN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljU2V0QXR0cigoUHlPYmplY3QgKilzZWxmLCBuYW1lLCB2KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWxvY2FsX2dldGRpY3QobG9jYWxvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCi17Ci0gICAgaWYgKHNlbGYtPmRpY3QgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2RpY3RfXyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG5hbWUsIHN0cl9kaWN0LCBQeV9FUSk7CisgICAgaWYgKHIgPT0gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3QgYXR0cmlidXRlICdfX2RpY3RfXycgaXMgcmVhZC1vbmx5IiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGlmIChyID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQeV9JTkNSRUYoc2VsZi0+ZGljdCk7Ci0gICAgcmV0dXJuIHNlbGYtPmRpY3Q7CisgICAgcmV0dXJuIF9QeU9iamVjdF9HZW5lcmljU2V0QXR0cldpdGhEaWN0KChQeU9iamVjdCAqKXNlbGYsIG5hbWUsIHYsIGxkaWN0KTsKIH0KIAotc3RhdGljIFB5R2V0U2V0RGVmIGxvY2FsX2dldHNldFtdID0gewotICAgIHsiX19kaWN0X18iLCAoZ2V0dGVyKWxvY2FsX2dldGRpY3QsIChzZXR0ZXIpTlVMTCwKLSAgICAgIkxvY2FsLWRhdGEgZGljdGlvbmFyeSIsIE5VTEx9LAotICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KLX07Ci0KIHN0YXRpYyBQeU9iamVjdCAqbG9jYWxfZ2V0YXR0cm8obG9jYWxvYmplY3QgKiwgUHlPYmplY3QgKik7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgbG9jYWx0eXBlID0gewpAQCAtMzU4LDIyICs1MDUsMjMgQEAKICAgICAvKiB0cF9nZXRhdHRybyAgICAgICAqLyAoZ2V0YXR0cm9mdW5jKWxvY2FsX2dldGF0dHJvLAogICAgIC8qIHRwX3NldGF0dHJvICAgICAgICovIChzZXRhdHRyb2Z1bmMpbG9jYWxfc2V0YXR0cm8sCiAgICAgLyogdHBfYXNfYnVmZmVyICAgICAgKi8gMCwKLSAgICAvKiB0cF9mbGFncyAgICAgICAgICAqLyBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLAorICAgIC8qIHRwX2ZsYWdzICAgICAgICAgICovIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCiAgICAgLyogdHBfZG9jICAgICAgICAgICAgKi8gIlRocmVhZC1sb2NhbCBkYXRhIiwKICAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAodHJhdmVyc2Vwcm9jKWxvY2FsX3RyYXZlcnNlLAogICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIChpbnF1aXJ5KWxvY2FsX2NsZWFyLAogICAgIC8qIHRwX3JpY2hjb21wYXJlICAgICovIDAsCi0gICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyBvZmZzZXRvZihsb2NhbG9iamVjdCwgd2Vha3JlZmxpc3QpLAogICAgIC8qIHRwX2l0ZXIgICAgICAgICAgICovIDAsCiAgICAgLyogdHBfaXRlcm5leHQgICAgICAgKi8gMCwKICAgICAvKiB0cF9tZXRob2RzICAgICAgICAqLyAwLAogICAgIC8qIHRwX21lbWJlcnMgICAgICAgICovIDAsCi0gICAgLyogdHBfZ2V0c2V0ICAgICAgICAgKi8gbG9jYWxfZ2V0c2V0LAorICAgIC8qIHRwX2dldHNldCAgICAgICAgICovIDAsCiAgICAgLyogdHBfYmFzZSAgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9kaWN0ICAgICAgICAgICAqLyAwLCAvKiBpbnRlcm5hbCB1c2UgKi8KICAgICAvKiB0cF9kZXNjcl9nZXQgICAgICAqLyAwLAogICAgIC8qIHRwX2Rlc2NyX3NldCAgICAgICovIDAsCi0gICAgLyogdHBfZGljdG9mZnNldCAgICAgKi8gb2Zmc2V0b2YobG9jYWxvYmplY3QsIGRpY3QpLAorICAgIC8qIHRwX2RpY3RvZmZzZXQgICAgICovIDAsCiAgICAgLyogdHBfaW5pdCAgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAogICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIGxvY2FsX25ldywKQEAgLTM4NSwyNSArNTMzLDYyIEBACiBsb2NhbF9nZXRhdHRybyhsb2NhbG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKmxkaWN0LCAqdmFsdWU7CisgICAgaW50IHI7CiAKICAgICBsZGljdCA9IF9sZGljdChzZWxmKTsKICAgICBpZiAobGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICByID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG5hbWUsIHN0cl9kaWN0LCBQeV9FUSk7CisgICAgaWYgKHIgPT0gMSkgeworICAgICAgICBQeV9JTkNSRUYobGRpY3QpOworICAgICAgICByZXR1cm4gbGRpY3Q7CisgICAgfQorICAgIGlmIChyID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmIChQeV9UWVBFKHNlbGYpICE9ICZsb2NhbHR5cGUpCiAgICAgICAgIC8qIHVzZSBnZW5lcmljIGxvb2t1cCBmb3Igc3VidHlwZXMgKi8KLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOworICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3QoKFB5T2JqZWN0ICopc2VsZiwgbmFtZSwgbGRpY3QpOwogCiAgICAgLyogT3B0aW1pemF0aW9uOiBqdXN0IGxvb2sgaW4gZGljdCBvdXJzZWx2ZXMgKi8KICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGxkaWN0LCBuYW1lKTsKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgLyogRmFsbCBiYWNrIG9uIGdlbmVyaWMgdG8gZ2V0IF9fY2xhc3NfXyBhbmQgX19kaWN0X18gKi8KLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOworICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3QoKFB5T2JqZWN0ICopc2VsZiwgbmFtZSwgbGRpY3QpOwogCiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKKy8qIENhbGxlZCB3aGVuIGEgZHVtbXkgaXMgZGVzdHJveWVkLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19sb2NhbGR1bW15X2Rlc3Ryb3llZChQeU9iamVjdCAqbG9jYWx3ZWFrcmVmLCBQeU9iamVjdCAqZHVtbXl3ZWFrcmVmKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgbG9jYWxvYmplY3QgKnNlbGY7CisgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihsb2NhbHdlYWtyZWYpKTsKKyAgICBvYmogPSBQeVdlYWtyZWZfR0VUX09CSkVDVChsb2NhbHdlYWtyZWYpOworICAgIGlmIChvYmogPT0gUHlfTm9uZSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgYXNzZXJ0KFB5T2JqZWN0X1R5cGVDaGVjayhvYmosICZsb2NhbHR5cGUpKTsKKyAgICAvKiBJZiB0aGUgdGhyZWFkLWxvY2FsIG9iamVjdCBpcyBzdGlsbCBhbGl2ZSBhbmQgbm90IGJlaW5nIGNsZWFyZWQsCisgICAgICAgcmVtb3ZlIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsIGRpY3QgKi8KKyAgICBzZWxmID0gKGxvY2Fsb2JqZWN0ICopIG9iajsKKyAgICBpZiAoc2VsZi0+ZHVtbWllcyAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpsZGljdDsKKyAgICAgICAgbGRpY3QgPSBQeURpY3RfR2V0SXRlbShzZWxmLT5kdW1taWVzLCBkdW1teXdlYWtyZWYpOworICAgICAgICBpZiAobGRpY3QgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW0oc2VsZi0+ZHVtbWllcywgZHVtbXl3ZWFrcmVmKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShvYmopOworICAgIH0KKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwogLyogTW9kdWxlIGZ1bmN0aW9ucyAqLwogCiBzdHJ1Y3QgYm9vdHN0YXRlIHsKQEAgLTQyNSw2ICs2MTAsNyBAQAogICAgIHRzdGF0ZS0+dGhyZWFkX2lkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogICAgIF9QeVRocmVhZFN0YXRlX0luaXQodHN0YXRlKTsKICAgICBQeUV2YWxfQWNxdWlyZVRocmVhZCh0c3RhdGUpOworICAgIG5iX3RocmVhZHMrKzsKICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcygKICAgICAgICAgYm9vdC0+ZnVuYywgYm9vdC0+YXJncywgYm9vdC0+a2V5dyk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CkBAIC00NDksNiArNjM1LDcgQEAKICAgICBQeV9ERUNSRUYoYm9vdC0+YXJncyk7CiAgICAgUHlfWERFQ1JFRihib290LT5rZXl3KTsKICAgICBQeU1lbV9ERUwoYm9vdF9yYXcpOworICAgIG5iX3RocmVhZHMtLTsKICAgICBQeVRocmVhZFN0YXRlX0NsZWFyKHRzdGF0ZSk7CiAgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCk7CiAgICAgUHlUaHJlYWRfZXhpdF90aHJlYWQoKTsKQEAgLTU0OCwxOCArNzM1LDYgQEAKIEEgc3VidGhyZWFkIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBpbnRlcnJ1cHQgdGhlIG1haW4gdGhyZWFkLiIKICk7CiAKLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgUHlPYmplY3QgKgotdGhyZWFkX1B5VGhyZWFkX2V4aXRfcHJvZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IHN0czsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZXhpdF9wcm9nIiwgJnN0cykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0V4aXQoc3RzKTsgLyogQ2FsbHMgUHlUaHJlYWRfZXhpdF9wcm9nKHN0cykgb3IgX1B5VGhyZWFkX2V4aXRfcHJvZyhzdHMpICovCi0gICAgZm9yICg7OykgeyB9IC8qIFNob3VsZCBub3QgYmUgcmVhY2hlZCAqLwotfQotI2VuZGlmCi0KIHN0YXRpYyBsb2Nrb2JqZWN0ICpuZXdsb2Nrb2JqZWN0KHZvaWQpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTcyLDcgKzc0Nyw3IEBACiAiYWxsb2NhdGVfbG9jaygpIC0+IGxvY2sgb2JqZWN0XG5cCiAoYWxsb2NhdGUoKSBpcyBhbiBvYnNvbGV0ZSBzeW5vbnltKVxuXAogXG5cCi1DcmVhdGUgYSBuZXcgbG9jayBvYmplY3QuICBTZWUgTG9ja1R5cGUuX19kb2NfXyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgbG9ja3MuIik7CitDcmVhdGUgYSBuZXcgbG9jayBvYmplY3QuICBTZWUgaGVscChMb2NrVHlwZSkgZm9yIGluZm9ybWF0aW9uIGFib3V0IGxvY2tzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogdGhyZWFkX2dldF9pZGVudChQeU9iamVjdCAqc2VsZikKQEAgLTU5OCw2ICs3NzMsMjQgQEAKIEEgdGhyZWFkJ3MgaWRlbnRpdHkgbWF5IGJlIHJldXNlZCBmb3IgYW5vdGhlciB0aHJlYWQgYWZ0ZXIgaXQgZXhpdHMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCit0aHJlYWRfX2NvdW50KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhuYl90aHJlYWRzKTsKK30KKworUHlEb2NfU1RSVkFSKF9jb3VudF9kb2MsCisiX2NvdW50KCkgLT4gaW50ZWdlclxuXAorXG5cCitcCitSZXR1cm4gdGhlIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBQeXRob24gdGhyZWFkcywgZXhjbHVkaW5nIFxuXAordGhlIG1haW4gdGhyZWFkLiBUaGUgcmV0dXJuZWQgbnVtYmVyIGNvbXByaXNlcyBhbGwgdGhyZWFkcyBjcmVhdGVkXG5cCit0aHJvdWdoIGBzdGFydF9uZXdfdGhyZWFkKClgIGFzIHdlbGwgYXMgYHRocmVhZGluZy5UaHJlYWRgLCBhbmQgbm90XG5cCit5ZXQgZmluaXNoZWQuXG5cCitcblwKK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIGFuZCBzcGVjaWFsaXplZCBwdXJwb3NlcyBvbmx5LlxuXAorSW4gbW9zdCBhcHBsaWNhdGlvbnMgYHRocmVhZGluZy5lbnVtZXJhdGUoKWAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9zdGFja19zaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaXplX3Qgb2xkX3NpemU7CkBAIC02NzAsMTMgKzg2MywxMSBAQAogICAgICBNRVRIX05PQVJHUywgaW50ZXJydXB0X2RvY30sCiAgICAgeyJnZXRfaWRlbnQiLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfZ2V0X2lkZW50LAogICAgICBNRVRIX05PQVJHUywgZ2V0X2lkZW50X2RvY30sCisgICAgeyJfY291bnQiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfX2NvdW50LAorICAgICBNRVRIX05PQVJHUywgX2NvdW50X2RvY30sCiAgICAgeyJzdGFja19zaXplIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfc3RhY2tfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfc2l6ZV9kb2N9LAotI2lmbmRlZiBOT19FWElUX1BST0cKLSAgICB7ImV4aXRfcHJvZyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9QeVRocmVhZF9leGl0X3Byb2csCi0gICAgIE1FVEhfVkFSQVJHU30sCi0jZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC03MDUsNiArODk2LDggQEAKICAgICBQeU9iamVjdCAqbSwgKmQ7CiAKICAgICAvKiBJbml0aWFsaXplIHR5cGVzOiAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJmxvY2FsZHVtbXl0eXBlKSA8IDApCisgICAgICAgIHJldHVybjsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZsb2NhbHR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MTgsNiArOTExLDggQEAKICAgICBUaHJlYWRFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigidGhyZWFkLmVycm9yIiwgTlVMTCwgTlVMTCk7CiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImVycm9yIiwgVGhyZWFkRXJyb3IpOwogICAgIExvY2t0eXBlLnRwX2RvYyA9IGxvY2tfZG9jOworICAgIGlmIChQeVR5cGVfUmVhZHkoJkxvY2t0eXBlKSA8IDApCisgICAgICAgIHJldHVybjsKICAgICBQeV9JTkNSRUYoJkxvY2t0eXBlKTsKICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTG9ja1R5cGUiLCAoUHlPYmplY3QgKikmTG9ja3R5cGUpOwogCkBAIC03MjUsNiArOTIwLDEyIEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX2xvY2FsIiwgKFB5T2JqZWN0ICopJmxvY2FsdHlwZSkgPCAwKQogICAgICAgICByZXR1cm47CiAKKyAgICBuYl90aHJlYWRzID0gMDsKKworICAgIHN0cl9kaWN0ID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19kaWN0X18iKTsKKyAgICBpZiAoc3RyX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyB0aHJlYWQgbGlicmFyeSAqLwogICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCmluZGV4IGE1OWQzZjAuLjYxYzFjY2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCkBAIC0yMTYsMjEgKzIxNiwyNyBAQAogYSBmbG9hdGluZyBwb2ludCBudW1iZXIgZm9yIHN1YnNlY29uZCBwcmVjaXNpb24uIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHN0cnVjdF90aW1lX3R5cGVfZmllbGRzW10gPSB7Ci0gICAgeyJ0bV95ZWFyIiwgTlVMTH0sCi0gICAgeyJ0bV9tb24iLCBOVUxMfSwKLSAgICB7InRtX21kYXkiLCBOVUxMfSwKLSAgICB7InRtX2hvdXIiLCBOVUxMfSwKLSAgICB7InRtX21pbiIsIE5VTEx9LAotICAgIHsidG1fc2VjIiwgTlVMTH0sCi0gICAgeyJ0bV93ZGF5IiwgTlVMTH0sCi0gICAgeyJ0bV95ZGF5IiwgTlVMTH0sCi0gICAgeyJ0bV9pc2RzdCIsIE5VTEx9LAorICAgIHsidG1feWVhciIsICJ5ZWFyLCBmb3IgZXhhbXBsZSwgMTk5MyJ9LAorICAgIHsidG1fbW9uIiwgIm1vbnRoIG9mIHllYXIsIHJhbmdlIFsxLCAxMl0ifSwKKyAgICB7InRtX21kYXkiLCAiZGF5IG9mIG1vbnRoLCByYW5nZSBbMSwgMzFdIn0sCisgICAgeyJ0bV9ob3VyIiwgImhvdXJzLCByYW5nZSBbMCwgMjNdIn0sCisgICAgeyJ0bV9taW4iLCAibWludXRlcywgcmFuZ2UgWzAsIDU5XSJ9LAorICAgIHsidG1fc2VjIiwgInNlY29uZHMsIHJhbmdlIFswLCA2MV0pIn0sCisgICAgeyJ0bV93ZGF5IiwgImRheSBvZiB3ZWVrLCByYW5nZSBbMCwgNl0sIE1vbmRheSBpcyAwIn0sCisgICAgeyJ0bV95ZGF5IiwgImRheSBvZiB5ZWFyLCByYW5nZSBbMSwgMzY2XSJ9LAorICAgIHsidG1faXNkc3QiLCAiMSBpZiBzdW1tZXIgdGltZSBpcyBpbiBlZmZlY3QsIDAgaWYgbm90LCBhbmQgLTEgaWYgdW5rbm93biJ9LAogICAgIHswfQogfTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRGVzYyBzdHJ1Y3RfdGltZV90eXBlX2Rlc2MgPSB7CiAgICAgInRpbWUuc3RydWN0X3RpbWUiLAotICAgIE5VTEwsCisgICAgIlRoZSB0aW1lIHZhbHVlIGFzIHJldHVybmVkIGJ5IGdtdGltZSgpLCBsb2NhbHRpbWUoKSwgYW5kIHN0cnB0aW1lKCksIGFuZFxuIgorICAgICIgYWNjZXB0ZWQgYnkgYXNjdGltZSgpLCBta3RpbWUoKSBhbmQgc3RyZnRpbWUoKS4gIE1heSBiZSBjb25zaWRlcmVkIGFzIGFcbiIKKyAgICAiIHNlcXVlbmNlIG9mIDkgaW50ZWdlcnMuXG5cbiIKKyAgICAiIE5vdGUgdGhhdCBzZXZlcmFsIGZpZWxkcycgdmFsdWVzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhvc2UgZGVmaW5lZCBieVxuIgorICAgICIgdGhlIEMgbGFuZ3VhZ2Ugc3RhbmRhcmQgZm9yIHN0cnVjdCB0bS4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgb2YgdGhlXG4iCisgICAgIiBmaWVsZCB0bV95ZWFyIGlzIHRoZSBhY3R1YWwgeWVhciwgbm90IHllYXIgLSAxOTAwLiAgU2VlIGluZGl2aWR1YWxcbiIKKyAgICAiIGZpZWxkcycgZGVzY3JpcHRpb25zIGZvciBkZXRhaWxzLiIsCiAgICAgc3RydWN0X3RpbWVfdHlwZV9maWVsZHMsCiAgICAgOSwKIH07CkBAIC00MDUsOCArNDExLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBDaGVja3MgYWRkZWQgdG8gbWFrZSBzdXJlIHN0cmZ0aW1lKCkgZG9lcyBub3QgY3Jhc2ggUHl0aG9uIGJ5Ci0gICAgICAgIGluZGV4aW5nIGJsaW5kbHkgaW50byBzb21lIGFycmF5IGZvciBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24KLSAgICAgICAgYnkgc29tZSBiYWQgaW5kZXggKGZpeGVzIGJ1ZyAjODk3NjI1KS4KKyAgICAgICBpbmRleGluZyBibGluZGx5IGludG8gc29tZSBhcnJheSBmb3IgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uCisgICAgICAgYnkgc29tZSBiYWQgaW5kZXggKGZpeGVzIGJ1ZyAjODk3NjI1KS4KIAogICAgICAgICBBbHNvIHN1cHBvcnQgdmFsdWVzIG9mIHplcm8gZnJvbSBQeXRob24gY29kZSBmb3IgYXJndW1lbnRzIGluIHdoaWNoCiAgICAgICAgIHRoYXQgaXMgb3V0IG9mIHJhbmdlIGJ5IGZvcmNpbmcgdGhhdCB2YWx1ZSB0byB0aGUgbG93ZXN0IHZhbHVlIHRoYXQKQEAgLTQzMiwxMyArNDM4LDEzIEBACiAgICAgICAgIGJ1Zi50bV9tb24gPSAwOwogICAgIGVsc2UgaWYgKGJ1Zi50bV9tb24gPCAwIHx8IGJ1Zi50bV9tb24gPiAxMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1vbnRoIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoYnVmLnRtX21kYXkgPT0gMCkKICAgICAgICAgYnVmLnRtX21kYXkgPSAxOwogICAgIGVsc2UgaWYgKGJ1Zi50bV9tZGF5IDwgMCB8fCBidWYudG1fbWRheSA+IDMxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZGF5IG9mIG1vbnRoIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoYnVmLnRtX2hvdXIgPCAwIHx8IGJ1Zi50bV9ob3VyID4gMjMpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJob3VyIG91dCBvZiByYW5nZSIpOwpAQCAtNDY0LDExICs0NzAsMzAgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2YgeWVhciBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChidWYudG1faXNkc3QgPCAtMSB8fCBidWYudG1faXNkc3QgPiAxKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImRheWxpZ2h0IHNhdmluZ3MgZmxhZyBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogTm9ybWFsaXplIHRtX2lzZHN0IGp1c3QgaW4gY2FzZSBzb21lb25lIGZvb2xpc2hseSBpbXBsZW1lbnRzICVaCisgICAgICAgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0bV9pc2RzdCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIG9mCisgICAgICAgWy0xLCAxXSAqLworICAgIGlmIChidWYudG1faXNkc3QgPCAtMSkKKyAgICAgICAgYnVmLnRtX2lzZHN0ID0gLTE7CisgICAgZWxzZSBpZiAoYnVmLnRtX2lzZHN0ID4gMSkKKyAgICAgICAgYnVmLnRtX2lzZHN0ID0gMTsKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAvKiBjaGVjayB0aGF0IHRoZSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIG9ubHkgdmFsaWQgZGlyZWN0aXZlcyAqLworICAgIGZvcihvdXRidWYgPSBzdHJjaHIoZm10LCAnJScpOworICAgICAgICBvdXRidWYgIT0gTlVMTDsKKyAgICAgICAgb3V0YnVmID0gc3RyY2hyKG91dGJ1ZisyLCAnJScpKQorICAgIHsKKyAgICAgICAgaWYgKG91dGJ1ZlsxXT09JyMnKQorICAgICAgICAgICAgKytvdXRidWY7IC8qIG5vdCBkb2N1bWVudGVkIGJ5IHB5dGhvbiwgKi8KKyAgICAgICAgaWYgKG91dGJ1ZlsxXT09J1wwJyB8fAorICAgICAgICAgICAgIXN0cmNocigiYUFiQmNkZkhJam1NcFNVd1d4WHlZelolIiwgb3V0YnVmWzFdKSkKKyAgICAgICAgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKICAgICBmbXRsZW4gPSBzdHJsZW4oZm10KTsKIApAQCAtNTE5LDggKzU0NCw5IEBACiAgICAgUHlPYmplY3QgKnN0cnB0aW1lX3Jlc3VsdDsKIAogICAgIGlmICghc3RycHRpbWVfbW9kdWxlKQotICAgIHJldHVybiBOVUxMOwotICAgIHN0cnB0aW1lX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc3RycHRpbWVfbW9kdWxlLCAiX3N0cnB0aW1lX3RpbWUiLCAiTyIsIGFyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdHJwdGltZV9yZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHN0cnB0aW1lX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9zdHJwdGltZV90aW1lIiwgIk8iLCBhcmdzKTsKICAgICBQeV9ERUNSRUYoc3RycHRpbWVfbW9kdWxlKTsKICAgICByZXR1cm4gc3RycHRpbWVfcmVzdWx0OwogfQpAQCAtNjA2LDggKzYzMiwxMSBAQAogICAgIHRpbWVfdCB0dDsKICAgICBpZiAoIWdldHRtYXJnKHR1cCwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1Zi50bV93ZGF5ID0gLTE7ICAvKiBzZW50aW5lbDsgb3JpZ2luYWwgdmFsdWUgaWdub3JlZCAqLwogICAgIHR0ID0gbWt0aW1lKCZidWYpOwotICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkpIHsKKyAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKKyAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VkZGVkLiAqLworICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkgJiYgYnVmLnRtX3dkYXkgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibWt0aW1lIGFyZ3VtZW50IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY0NSw3ICs2NzQsNyBAQAogfQogCiBQeURvY19TVFJWQVIodHpzZXRfZG9jLAotInR6c2V0KHpvbmUpXG5cCisidHpzZXQoKVxuXAogXG5cCiBJbml0aWFsaXplLCBvciByZWluaXRpYWxpemUsIHRoZSBsb2NhbCB0aW1lem9uZSB0byB0aGUgdmFsdWUgc3RvcmVkIGluXG5cCiBvcy5lbnZpcm9uWydUWiddLiBUaGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgc2hvdWxkIGJlIHNwZWNpZmllZCBpblxuXApkaWZmIC0tZ2l0IGEvTW9kdWxlcy90a2FwcGluaXQuYyBiL01vZHVsZXMvdGthcHBpbml0LmMKaW5kZXggMDVjNDhhNC4uYzFmOTdiMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy90a2FwcGluaXQuYworKysgYi9Nb2R1bGVzL3RrYXBwaW5pdC5jCkBAIC0xNiwxMSArMTYsMjEgQEAKICNpbmNsdWRlIDx0Y2wuaD4KICNpbmNsdWRlIDx0ay5oPgogCisjaW5jbHVkZSAidGtpbnRlci5oIgorCisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworLyogU2VlIFRrYXBwX1RrSW5pdCBpbiBfdGtpbnRlci5jIGZvciB0aGUgdXNhZ2Ugb2YgdGtfbG9hZF9mYWlsZSAqLworc3RhdGljIGludCB0a19sb2FkX2ZhaWxlZDsKKyNlbmRpZgorCiBpbnQKIFRjbF9BcHBJbml0KFRjbF9JbnRlcnAgKmludGVycCkKIHsKICAgICBUa19XaW5kb3cgbWFpbl93aW5kb3c7Ci0gICAgY29uc3QgY2hhciAqIF90a2ludGVyX3NraXBfdGtfaW5pdDsKKyAgICBjb25zdCBjaGFyICpfdGtpbnRlcl9za2lwX3RrX2luaXQ7CisjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSworICAgIGNvbnN0IGNoYXIgKl90a2ludGVyX3RrX2ZhaWxlZDsKKyNlbmRpZgogCiAjaWZkZWYgVEtfQVFVQQogI2lmbmRlZiBNQVhfUEFUSF9MRU4KQEAgLTc0LDEyICs4NCwzMiBAQAogICAgICAgICAvKiBJbml0aWFsaXplIG1vZHVsZXMgdGhhdCBkb24ndCByZXF1aXJlIFRrICovCiAjZW5kaWYKIAotICAgIF90a2ludGVyX3NraXBfdGtfaW5pdCA9ICAgICBUY2xfR2V0VmFyKGludGVycCwgIl90a2ludGVyX3NraXBfdGtfaW5pdCIsIFRDTF9HTE9CQUxfT05MWSk7Ci0gICAgaWYgKF90a2ludGVyX3NraXBfdGtfaW5pdCAhPSBOVUxMICYmIHN0cmNtcChfdGtpbnRlcl9za2lwX3RrX2luaXQsICIxIikgICAgID09IDApIHsKKyAgICBfdGtpbnRlcl9za2lwX3RrX2luaXQgPSAgICAgVGNsX0dldFZhcihpbnRlcnAsCisgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlcl9za2lwX3RrX2luaXQiLCBUQ0xfR0xPQkFMX09OTFkpOworICAgIGlmIChfdGtpbnRlcl9za2lwX3RrX2luaXQgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICBzdHJjbXAoX3RraW50ZXJfc2tpcF90a19pbml0LCAiMSIpID09IDApIHsKICAgICAgICAgcmV0dXJuIFRDTF9PSzsKICAgICB9Ci0gICAgaWYgKFRrX0luaXQoaW50ZXJwKSA9PSBUQ0xfRVJST1IpCisKKyNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisgICAgX3RraW50ZXJfdGtfZmFpbGVkID0gVGNsX0dldFZhcihpbnRlcnAsCisgICAgICAgICAgICAgICAgICAgICJfdGtpbnRlcl90a19mYWlsZWQiLCBUQ0xfR0xPQkFMX09OTFkpOworCisgICAgaWYgKHRrX2xvYWRfZmFpbGVkIHx8ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGtpbnRlcl90a19mYWlsZWQgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNtcChfdGtpbnRlcl90a19mYWlsZWQsICIxIikgPT0gMCkpIHsKKyAgICAgICAgVGNsX1NldFJlc3VsdChpbnRlcnAsIFRLSU5URVJfTE9BRFRLX0VSUk1TRywgVENMX1NUQVRJQyk7CiAgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoVGtfSW5pdChpbnRlcnApID09IFRDTF9FUlJPUikgeworI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKKyAgICAgICAgdGtfbG9hZF9mYWlsZWQgPSAxOworICAgICAgICBUY2xfU2V0VmFyKGludGVycCwgIl90a2ludGVyX3RrX2ZhaWxlZCIsICIxIiwgVENMX0dMT0JBTF9PTkxZKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gVENMX0VSUk9SOworICAgIH0KIAogICAgIG1haW5fd2luZG93ID0gVGtfTWFpbldpbmRvdyhpbnRlcnApOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RraW50ZXIuaCBiL01vZHVsZXMvdGtpbnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTUwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3RraW50ZXIuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIFRLSU5URVJfSAorI2RlZmluZSBUS0lOVEVSX0gKKworLyogVGhpcyBoZWFkZXIgaXMgdXNlZCB0byBzaGFyZSBzb21lIG1hY3JvcyBiZXR3ZWVuIF90a2ludGVyLmMgYW5kCisgKiB0a2FwcGluaXQuYy4KKyAqIEJlIHN1cmUgdG8gaW5jbHVkZSB0ay5oIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgc28KKyAqIFRLX1ZFUlNJT05fSEVYIGlzIHByb3Blcmx5IGRlZmluZWQuICovCisKKy8qIFRLX1JFTEVBU0VfTEVWRUwgaXMgYWx3YXlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoJVENMX0FMUEhBX1JFTEVBU0UgICAwCisgKiAgVENMX0JFVEFfUkVMRUFTRSAgICAxCisgKiAgVENMX0ZJTkFMX1JFTEVBU0UgICAyCisgKi8KKyNkZWZpbmUgVEtfVkVSU0lPTl9IRVggKChUS19NQUpPUl9WRVJTSU9OIDw8IDI0KSB8IFwKKwkJKFRLX01JTk9SX1ZFUlNJT04gPDwgMTYpIHwgXAorCQkoVEtfUkVMRUFTRV9TRVJJQUwgPDwgOCkgfCBcCisJCShUS19SRUxFQVNFX0xFVkVMIDw8IDApKQorCisvKiBQcm90ZWN0IFRrIDguNC4xMyBhbmQgb2xkZXIgZnJvbSBhIGRlYWRsb2NrIHRoYXQgaGFwcGVucyB3aGVuIHRyeWluZworICogdG8gbG9hZCB0ayBhZnRlciBhIGZhaWxlZCBhdHRlbXB0LiAqLworI2lmIFRLX1ZFUlNJT05fSEVYIDwgMHgwODA0MGUwMgorI2RlZmluZSBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCisjZGVmaW5lIFRLSU5URVJfTE9BRFRLX0VSUk1TRyBcCisJIkNhbGxpbmcgVGtfSW5pdCBhZ2FpbiBhZnRlciBhIHByZXZpb3VzIGNhbGwgZmFpbGVkIG1pZ2h0IGRlYWRsb2NrIgorI2VuZGlmCisKKyNlbmRpZiAvKiAhVEtJTlRFUl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKaW5kZXggMDNiODY5MC4uZTM5YTRkNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YS5jCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwpAQCAtMSw4ICsxLDggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICB1bmljb2RlZGF0YSAtLSBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgNS4xIGRhdGEgYmFzZS4KKyAgIHVuaWNvZGVkYXRhIC0tIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSA1LjIgZGF0YSBiYXNlLgogCi0gICBEYXRhIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgVW5pY29kZSA1LjEgVW5pY29kZURhdGEudHh0IGZpbGUuCisgICBEYXRhIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgVW5pY29kZSA1LjIgVW5pY29kZURhdGEudHh0IGZpbGUuCiAKICAgIFdyaXR0ZW4gYnkgTWFyYy1BbmRyZSBMZW1idXJnIChtYWxAbGVtYnVyZy5jb20pLgogICAgTW9kaWZpZWQgZm9yIFB5dGhvbiAyLjAgYnkgRnJlZHJpayBMdW5kaCAoZnJlZHJpa0BweXRob253YXJlLmNvbSkKQEAgLTI3LDYgKzI3LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1pcnJvcmVkOyAgICAgICAvKiB0cnVlIGlmIG1pcnJvcmVkIGluIGJpZGlyIG1vZGUgKi8KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGVhc3RfYXNpYW5fd2lkdGg7ICAgICAgIC8qIGluZGV4IGludG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGggKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG5vcm1hbGl6YXRpb25fcXVpY2tfY2hlY2s7IC8qIHNlZSBpc19ub3JtYWxpemVkKCkgKi8KIH0gX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZDsKIAogdHlwZWRlZiBzdHJ1Y3QgY2hhbmdlX3JlY29yZCB7CkBAIC0zNSw3ICszNiw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjYXRlZ29yeV9jaGFuZ2VkOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVjaW1hbF9jaGFuZ2VkOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWlycm9yZWRfY2hhbmdlZDsKLSAgICBjb25zdCBpbnQgbnVtZXJpY19jaGFuZ2VkOworICAgIGNvbnN0IGRvdWJsZSBudW1lcmljX2NoYW5nZWQ7CiB9IGNoYW5nZV9yZWNvcmQ7CiAKIC8qIGRhdGEgZmlsZSBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgKi8KQEAgLTcyNiw2ICs3MjcsMzggQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBSZXR1cm4gMSBpZiB0aGUgaW5wdXQgaXMgY2VydGFpbmx5IG5vcm1hbGl6ZWQsIDAgaWYgaXQgbWlnaHQgbm90IGJlLiAqLworc3RhdGljIGludAoraXNfbm9ybWFsaXplZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmlucHV0LCBpbnQgbmZjLCBpbnQgaykKK3sKKyAgICBQeV9VTklDT0RFICppLCAqZW5kOworICAgIHVuc2lnbmVkIGNoYXIgcHJldl9jb21iaW5pbmcgPSAwLCBxdWlja2NoZWNrX21hc2s7CisKKyAgICAvKiBBbiBvbGRlciB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBpcyByZXF1ZXN0ZWQsIHF1aWNrY2hlY2tzIG11c3QgYmUKKyAgICAgICBkaXNhYmxlZC4gKi8KKyAgICBpZiAoc2VsZiAhPSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFRoZSB0d28gcXVpY2tjaGVjayBiaXRzIGF0IHRoaXMgc2hpZnQgbWVhbiAwPVllcywgMT1NYXliZSwgMj1ObywKKyAgICAgICBhcyBkZXNjcmliZWQgaW4gaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIxNS8jQW5uZXg4LiAqLworICAgIHF1aWNrY2hlY2tfbWFzayA9IDMgPDwgKChuZmMgPyA0IDogMCkgKyAoayA/IDIgOiAwKSk7CisKKyAgICBpID0gUHlVbmljb2RlX0FTX1VOSUNPREUoaW5wdXQpOworICAgIGVuZCA9IGkgKyBQeVVuaWNvZGVfR0VUX1NJWkUoaW5wdXQpOworICAgIHdoaWxlIChpIDwgZW5kKSB7CisgICAgICAgIGNvbnN0IF9QeVVuaWNvZGVfRGF0YWJhc2VSZWNvcmQgKnJlY29yZCA9IF9nZXRyZWNvcmRfZXgoKmkrKyk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgY29tYmluaW5nID0gcmVjb3JkLT5jb21iaW5pbmc7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcXVpY2tjaGVjayA9IHJlY29yZC0+bm9ybWFsaXphdGlvbl9xdWlja19jaGVjazsKKworICAgICAgICBpZiAocXVpY2tjaGVjayAmIHF1aWNrY2hlY2tfbWFzaykKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiB0aGlzIHN0cmluZyBtaWdodCBuZWVkIG5vcm1hbGl6YXRpb24gKi8KKyAgICAgICAgaWYgKGNvbWJpbmluZyAmJiBwcmV2X2NvbWJpbmluZyA+IGNvbWJpbmluZykKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiBub24tY2Fub25pY2FsIHNvcnQgb3JkZXIsIG5vdCBub3JtYWxpemVkICovCisgICAgICAgIHByZXZfY29tYmluaW5nID0gY29tYmluaW5nOworICAgIH0KKyAgICByZXR1cm4gMTsgLyogY2VydGFpbmx5IG5vcm1hbGl6ZWQgKi8KK30KKwogUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX25vcm1hbGl6ZV9fZG9jX18sCiAibm9ybWFsaXplKGZvcm0sIHVuaXN0cilcblwKIFxuXApAQCAtNzQ5LDE0ICs3ODIsMzQgQEAKICAgICAgICAgcmV0dXJuIGlucHV0OwogICAgIH0KIAotICAgIGlmIChzdHJjbXAoZm9ybSwgIk5GQyIpID09IDApCisgICAgaWYgKHN0cmNtcChmb3JtLCAiTkZDIikgPT0gMCkgeworICAgICAgICBpZiAoaXNfbm9ybWFsaXplZChzZWxmLCBpbnB1dCwgMSwgMCkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpbnB1dCk7CisgICAgICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5mY19uZmtjKHNlbGYsIGlucHV0LCAwKTsKLSAgICBpZiAoc3RyY21wKGZvcm0sICJORktDIikgPT0gMCkKKyAgICB9CisgICAgaWYgKHN0cmNtcChmb3JtLCAiTkZLQyIpID09IDApIHsKKyAgICAgICAgaWYgKGlzX25vcm1hbGl6ZWQoc2VsZiwgaW5wdXQsIDEsIDEpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoaW5wdXQpOworICAgICAgICAgICAgcmV0dXJuIGlucHV0OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZmNfbmZrYyhzZWxmLCBpbnB1dCwgMSk7Ci0gICAgaWYgKHN0cmNtcChmb3JtLCAiTkZEIikgPT0gMCkKKyAgICB9CisgICAgaWYgKHN0cmNtcChmb3JtLCAiTkZEIikgPT0gMCkgeworICAgICAgICBpZiAoaXNfbm9ybWFsaXplZChzZWxmLCBpbnB1dCwgMCwgMCkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpbnB1dCk7CisgICAgICAgICAgICByZXR1cm4gaW5wdXQ7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5mZF9uZmtkKHNlbGYsIGlucHV0LCAwKTsKLSAgICBpZiAoc3RyY21wKGZvcm0sICJORktEIikgPT0gMCkKKyAgICB9CisgICAgaWYgKHN0cmNtcChmb3JtLCAiTkZLRCIpID09IDApIHsKKyAgICAgICAgaWYgKGlzX25vcm1hbGl6ZWQoc2VsZiwgaW5wdXQsIDAsIDEpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoaW5wdXQpOworICAgICAgICAgICAgcmV0dXJuIGlucHV0OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZmRfbmZrZChzZWxmLCBpbnB1dCwgMSk7CisgICAgfQogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBub3JtYWxpemF0aW9uIGZvcm0iKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTgyMSw4ICs4NzQsOSBAQAogewogICAgIHJldHVybiAoCiAgICAgICAgICgweDM0MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NERCNSkgfHwgLyogQ0pLIElkZW9ncmFwaCBFeHRlbnNpb24gQSAqLwotICAgICAgICAoMHg0RTAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDlGQkIpIHx8IC8qIENKSyBJZGVvZ3JhcGggKi8KLSAgICAgICAgKDB4MjAwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MkE2RDYpKTsvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCICovCisgICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZDQikgfHwgLyogQ0pLIElkZW9ncmFwaCwgVW5pY29kZSA1LjIgKi8KKyAgICAgICAgKDB4MjAwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MkE2RDYpIHx8IC8qIENKSyBJZGVvZ3JhcGggRXh0ZW5zaW9uIEIgKi8KKyAgICAgICAgKDB4MkE3MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MkI3MzQpKTsgIC8qIENKSyBJZGVvZ3JhcGggRXh0ZW5zaW9uIEMgKi8KIH0KIAogc3RhdGljIGludApAQCAtMTE4NSwxMSArMTIzOSwxMSBAQAogIlRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2Ugd2hpY2hcblwKIGRlZmluZXMgY2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuIFRoZSBkYXRhIGluXG5cCiB0aGlzIGRhdGFiYXNlIGlzIGJhc2VkIG9uIHRoZSBVbmljb2RlRGF0YS50eHQgZmlsZSB2ZXJzaW9uXG5cCi01LjEuMCB3aGljaCBpcyBwdWJsaWNhbGx5IGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC51bmljb2RlLm9yZy8uXG5cCis1LjIuMCB3aGljaCBpcyBwdWJsaWNhbGx5IGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC51bmljb2RlLm9yZy8uXG5cCiBcblwKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IHRoZVxuXAotVW5pY29kZURhdGEgRmlsZSBGb3JtYXQgNS4xLjAgKHNlZVxuXAotaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNS4xLjAvdWNkL1VDRC5odG1sKS4iKTsKK1VuaWNvZGVEYXRhIEZpbGUgRm9ybWF0IDUuMi4wIChzZWVcblwKK2h0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjQ0L3RyNDQtNC5odG1sKS4iKTsKIAogUHlNT0RJTklUX0ZVTkMKIGluaXR1bmljb2RlZGF0YSh2b2lkKQpAQCAtMTIxMyw3ICsxMjY3LDcgQEAKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ1Y2RfM18yXzAiLCB2KTsKIAogICAgIC8qIEV4cG9ydCBDIEFQSSAqLwotICAgIHYgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoKHZvaWQgKikgJmhhc2hBUEksIE5VTEwpOworICAgIHYgPSBQeUNhcHN1bGVfTmV3KCh2b2lkICopJmhhc2hBUEksIFB5VW5pY29kZURhdGFfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKICAgICBpZiAodiAhPSBOVUxMKQogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInVjbmhhc2hfQ0FQSSIsIHYpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IDgyNDM0NzMuLmZkMGRhY2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsMjQyICsxLDMzMyBAQAogLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMi42ICovCiAKLSNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI1LjEuMCIKKyNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI1LjIuMCIKIC8qIGEgbGlzdCBvZiB1bmlxdWUgZGF0YWJhc2UgcmVjb3JkcyAqLwogY29uc3QgX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZCBfUHlVbmljb2RlX0RhdGFiYXNlX1JlY29yZHNbXSA9IHsKLSAgICB7MCwgMCwgMCwgMCwgMH0sCi0gICAgezEzLCAwLCAxNSwgMCwgNX0sCi0gICAgezEzLCAwLCAxNywgMCwgNX0sCi0gICAgezEzLCAwLCAxNiwgMCwgNX0sCi0gICAgezEzLCAwLCAxOCwgMCwgNX0sCi0gICAgezEwLCAwLCAxOCwgMCwgM30sCi0gICAgezI2LCAwLCAxOSwgMCwgM30sCi0gICAgezI2LCAwLCAxMSwgMCwgM30sCi0gICAgezI4LCAwLCAxMSwgMCwgM30sCi0gICAgezIyLCAwLCAxOSwgMSwgM30sCi0gICAgezIzLCAwLCAxOSwgMSwgM30sCi0gICAgezI3LCAwLCAxMCwgMCwgM30sCi0gICAgezI2LCAwLCAxMywgMCwgM30sCi0gICAgezIxLCAwLCAxMCwgMCwgM30sCi0gICAgezcsIDAsIDksIDAsIDN9LAotICAgIHsyNywgMCwgMTksIDEsIDN9LAotICAgIHsyNywgMCwgMTksIDAsIDN9LAotICAgIHsxLCAwLCAxLCAwLCAzfSwKLSAgICB7MjksIDAsIDE5LCAwLCAzfSwKLSAgICB7MjAsIDAsIDE5LCAwLCAzfSwKLSAgICB7MiwgMCwgMSwgMCwgM30sCi0gICAgezEwLCAwLCAxMywgMCwgNX0sCi0gICAgezI2LCAwLCAxOSwgMCwgNH0sCi0gICAgezI4LCAwLCAxMSwgMCwgNH0sCi0gICAgezMwLCAwLCAxOSwgMCwgM30sCi0gICAgezMwLCAwLCAxOSwgMCwgNH0sCi0gICAgezI5LCAwLCAxOSwgMCwgNH0sCi0gICAgezMwLCAwLCAxOSwgMCwgNX0sCi0gICAgezIsIDAsIDEsIDAsIDR9LAotICAgIHsyNCwgMCwgMTksIDEsIDV9LAotICAgIHsxNCwgMCwgMTUsIDAsIDR9LAotICAgIHszMCwgMCwgMTEsIDAsIDR9LAotICAgIHsyNywgMCwgMTEsIDAsIDR9LAotICAgIHs5LCAwLCA5LCAwLCA0fSwKLSAgICB7MiwgMCwgMSwgMCwgNX0sCi0gICAgezI1LCAwLCAxOSwgMSwgNX0sCi0gICAgezksIDAsIDE5LCAwLCA0fSwKLSAgICB7MSwgMCwgMSwgMCwgNX0sCi0gICAgezEsIDAsIDEsIDAsIDR9LAotICAgIHsyNywgMCwgMTksIDAsIDR9LAotICAgIHsxOSwgMCwgMSwgMCwgNX0sCi0gICAgezMsIDAsIDEsIDAsIDV9LAotICAgIHsxOCwgMCwgMSwgMCwgNX0sCi0gICAgezE4LCAwLCAxOSwgMCwgNX0sCi0gICAgezI5LCAwLCAxOSwgMCwgNX0sCi0gICAgezE4LCAwLCAxOSwgMCwgNH0sCi0gICAgezE4LCAwLCAxLCAwLCA0fSwKLSAgICB7NCwgMjMwLCAxNCwgMCwgNH0sCi0gICAgezQsIDIzMiwgMTQsIDAsIDR9LAotICAgIHs0LCAyMjAsIDE0LCAwLCA0fSwKLSAgICB7NCwgMjE2LCAxNCwgMCwgNH0sCi0gICAgezQsIDIwMiwgMTQsIDAsIDR9LAotICAgIHs0LCAxLCAxNCwgMCwgNH0sCi0gICAgezQsIDI0MCwgMTQsIDAsIDR9LAotICAgIHs0LCAwLCAxNCwgMCwgNH0sCi0gICAgezQsIDIzMywgMTQsIDAsIDR9LAotICAgIHs0LCAyMzQsIDE0LCAwLCA0fSwKLSAgICB7MjYsIDAsIDE5LCAwLCA1fSwKLSAgICB7MjcsIDAsIDE5LCAwLCA1fSwKLSAgICB7MzAsIDAsIDEsIDAsIDV9LAotICAgIHs0LCAyMzAsIDE0LCAwLCA1fSwKLSAgICB7NiwgMCwgMTQsIDAsIDV9LAotICAgIHsyNiwgMCwgMSwgMCwgNX0sCi0gICAgezIxLCAwLCAxOSwgMCwgNX0sCi0gICAgezQsIDIyMCwgMTQsIDAsIDV9LAotICAgIHs0LCAyMjIsIDE0LCAwLCA1fSwKLSAgICB7NCwgMjI4LCAxNCwgMCwgNX0sCi0gICAgezQsIDEwLCAxNCwgMCwgNX0sCi0gICAgezQsIDExLCAxNCwgMCwgNX0sCi0gICAgezQsIDEyLCAxNCwgMCwgNX0sCi0gICAgezQsIDEzLCAxNCwgMCwgNX0sCi0gICAgezQsIDE0LCAxNCwgMCwgNX0sCi0gICAgezQsIDE1LCAxNCwgMCwgNX0sCi0gICAgezQsIDE2LCAxNCwgMCwgNX0sCi0gICAgezQsIDE3LCAxNCwgMCwgNX0sCi0gICAgezQsIDE4LCAxNCwgMCwgNX0sCi0gICAgezQsIDE5LCAxNCwgMCwgNX0sCi0gICAgezQsIDIwLCAxNCwgMCwgNX0sCi0gICAgezQsIDIxLCAxNCwgMCwgNX0sCi0gICAgezQsIDIyLCAxNCwgMCwgNX0sCi0gICAgezIxLCAwLCA0LCAwLCA1fSwKLSAgICB7NCwgMjMsIDE0LCAwLCA1fSwKLSAgICB7MjYsIDAsIDQsIDAsIDV9LAotICAgIHs0LCAyNCwgMTQsIDAsIDV9LAotICAgIHs0LCAyNSwgMTQsIDAsIDV9LAotICAgIHsxOSwgMCwgNCwgMCwgNX0sCi0gICAgezE0LCAwLCAxMiwgMCwgNX0sCi0gICAgezI3LCAwLCA1LCAwLCA1fSwKLSAgICB7MjYsIDAsIDExLCAwLCA1fSwKLSAgICB7MjgsIDAsIDUsIDAsIDV9LAotICAgIHsyNiwgMCwgMTMsIDAsIDV9LAotICAgIHsyNiwgMCwgNSwgMCwgNX0sCi0gICAgezQsIDMwLCAxNCwgMCwgNX0sCi0gICAgezQsIDMxLCAxNCwgMCwgNX0sCi0gICAgezQsIDMyLCAxNCwgMCwgNX0sCi0gICAgezE5LCAwLCA1LCAwLCA1fSwKLSAgICB7MTgsIDAsIDUsIDAsIDV9LAotICAgIHs0LCAyNywgMTQsIDAsIDV9LAotICAgIHs0LCAyOCwgMTQsIDAsIDV9LAotICAgIHs0LCAyOSwgMTQsIDAsIDV9LAotICAgIHs0LCAzMywgMTQsIDAsIDV9LAotICAgIHs0LCAzNCwgMTQsIDAsIDV9LAotICAgIHs3LCAwLCAxMiwgMCwgNX0sCi0gICAgezI2LCAwLCAxMiwgMCwgNX0sCi0gICAgezQsIDM1LCAxNCwgMCwgNX0sCi0gICAgezcsIDAsIDksIDAsIDV9LAotICAgIHszMCwgMCwgNSwgMCwgNX0sCi0gICAgezE0LCAwLCAxNSwgMCwgNX0sCi0gICAgezQsIDM2LCAxNCwgMCwgNX0sCi0gICAgezQsIDAsIDE0LCAwLCA1fSwKLSAgICB7NywgMCwgNCwgMCwgNX0sCi0gICAgezE4LCAwLCA0LCAwLCA1fSwKLSAgICB7NSwgMCwgMSwgMCwgNX0sCi0gICAgezQsIDcsIDE0LCAwLCA1fSwKLSAgICB7NCwgOSwgMTQsIDAsIDV9LAotICAgIHs3LCAwLCAxLCAwLCA1fSwKLSAgICB7MjgsIDAsIDExLCAwLCA1fSwKLSAgICB7OSwgMCwgMSwgMCwgNX0sCi0gICAgezQsIDg0LCAxNCwgMCwgNX0sCi0gICAgezQsIDkxLCAxNCwgMCwgNX0sCi0gICAgezksIDAsIDE5LCAwLCA1fSwKLSAgICB7NCwgMCwgMSwgMCwgNX0sCi0gICAgezQsIDEwMywgMTQsIDAsIDV9LAotICAgIHs0LCAxMDcsIDE0LCAwLCA1fSwKLSAgICB7NCwgMTE4LCAxNCwgMCwgNX0sCi0gICAgezQsIDEyMiwgMTQsIDAsIDV9LAotICAgIHs0LCAyMTYsIDE0LCAwLCA1fSwKLSAgICB7MjIsIDAsIDE5LCAxLCA1fSwKLSAgICB7MjMsIDAsIDE5LCAxLCA1fSwKLSAgICB7NCwgMTI5LCAxNCwgMCwgNX0sCi0gICAgezQsIDEzMCwgMTQsIDAsIDV9LAotICAgIHs0LCAxMzIsIDE0LCAwLCA1fSwKLSAgICB7MTksIDAsIDEsIDAsIDJ9LAotICAgIHsxMCwgMCwgMTgsIDAsIDV9LAotICAgIHs4LCAwLCAxLCAwLCA1fSwKLSAgICB7MTQsIDAsIDEsIDAsIDV9LAotICAgIHs1LCA5LCAxLCAwLCA1fSwKLSAgICB7NCwgMjM0LCAxNCwgMCwgNX0sCi0gICAgezQsIDIxNCwgMTQsIDAsIDV9LAotICAgIHs0LCAyMDIsIDE0LCAwLCA1fSwKLSAgICB7MTQsIDAsIDQsIDAsIDV9LAotICAgIHsyMSwgMCwgMTksIDAsIDR9LAotICAgIHsyNCwgMCwgMTksIDAsIDR9LAotICAgIHsyNSwgMCwgMTksIDAsIDR9LAotICAgIHsyMiwgMCwgMTksIDAsIDV9LAotICAgIHsyNCwgMCwgMTksIDAsIDV9LAotICAgIHsxMSwgMCwgMTgsIDAsIDV9LAotICAgIHsxMiwgMCwgMTYsIDAsIDV9LAotICAgIHsxNCwgMCwgMiwgMCwgNX0sCi0gICAgezE0LCAwLCA2LCAwLCA1fSwKLSAgICB7MTQsIDAsIDgsIDAsIDV9LAotICAgIHsxNCwgMCwgMywgMCwgNX0sCi0gICAgezE0LCAwLCA3LCAwLCA1fSwKLSAgICB7MjYsIDAsIDExLCAwLCA0fSwKLSAgICB7MjAsIDAsIDE5LCAwLCA1fSwKLSAgICB7MjcsIDAsIDEzLCAwLCA1fSwKLSAgICB7OSwgMCwgOSwgMCwgNX0sCi0gICAgezI3LCAwLCAxMCwgMCwgNX0sCi0gICAgezI4LCAwLCAxMSwgMCwgMX0sCi0gICAgezQsIDEsIDE0LCAwLCA1fSwKLSAgICB7MzAsIDAsIDExLCAwLCA1fSwKLSAgICB7MjcsIDAsIDE5LCAxLCA1fSwKLSAgICB7OCwgMCwgMSwgMCwgNH0sCi0gICAgezI3LCAwLCAxOSwgMSwgNH0sCi0gICAgezI3LCAwLCAxMSwgMCwgNX0sCi0gICAgezIyLCAwLCAxOSwgMSwgMn0sCi0gICAgezIzLCAwLCAxOSwgMSwgMn0sCi0gICAgezMwLCAwLCAxLCAwLCA0fSwKLSAgICB7MzAsIDAsIDE5LCAwLCAyfSwKLSAgICB7MTAsIDAsIDE4LCAwLCAwfSwKLSAgICB7MjYsIDAsIDE5LCAwLCAyfSwKLSAgICB7MTgsIDAsIDEsIDAsIDJ9LAotICAgIHs4LCAwLCAxLCAwLCAyfSwKLSAgICB7MjEsIDAsIDE5LCAwLCAyfSwKLSAgICB7MjIsIDAsIDE5LCAwLCAyfSwKLSAgICB7MjMsIDAsIDE5LCAwLCAyfSwKLSAgICB7NCwgMjE4LCAxNCwgMCwgMn0sCi0gICAgezQsIDIyOCwgMTQsIDAsIDJ9LAotICAgIHs0LCAyMzIsIDE0LCAwLCAyfSwKLSAgICB7NCwgMjIyLCAxNCwgMCwgMn0sCi0gICAgezQsIDIyNCwgMTQsIDAsIDJ9LAotICAgIHs0LCA4LCAxNCwgMCwgMn0sCi0gICAgezI5LCAwLCAxOSwgMCwgMn0sCi0gICAgezMwLCAwLCAxLCAwLCAyfSwKLSAgICB7OSwgMCwgMSwgMCwgMn0sCi0gICAgezksIDAsIDE5LCAwLCAyfSwKLSAgICB7MjksIDAsIDEsIDAsIDV9LAotICAgIHsxNSwgMCwgMSwgMCwgNX0sCi0gICAgezE2LCAwLCAxLCAwLCA0fSwKLSAgICB7NCwgMjYsIDE0LCAwLCA1fSwKLSAgICB7MjMsIDAsIDE5LCAwLCA1fSwKLSAgICB7MjAsIDAsIDE5LCAwLCAyfSwKLSAgICB7MjYsIDAsIDEzLCAwLCAyfSwKLSAgICB7MjYsIDAsIDExLCAwLCAyfSwKLSAgICB7MjcsIDAsIDEwLCAwLCAyfSwKLSAgICB7MjEsIDAsIDEwLCAwLCAyfSwKLSAgICB7MjcsIDAsIDE5LCAxLCAyfSwKLSAgICB7MjcsIDAsIDE5LCAwLCAyfSwKLSAgICB7MjgsIDAsIDExLCAwLCAyfSwKLSAgICB7MjYsIDAsIDE5LCAwLCAwfSwKLSAgICB7MjYsIDAsIDExLCAwLCAwfSwKLSAgICB7MjgsIDAsIDExLCAwLCAwfSwKLSAgICB7MjIsIDAsIDE5LCAxLCAwfSwKLSAgICB7MjMsIDAsIDE5LCAxLCAwfSwKLSAgICB7MjcsIDAsIDEwLCAwLCAwfSwKLSAgICB7MjYsIDAsIDEzLCAwLCAwfSwKLSAgICB7MjEsIDAsIDEwLCAwLCAwfSwKLSAgICB7NywgMCwgOSwgMCwgMH0sCi0gICAgezI3LCAwLCAxOSwgMSwgMH0sCi0gICAgezI3LCAwLCAxOSwgMCwgMH0sCi0gICAgezEsIDAsIDEsIDAsIDB9LAotICAgIHsyOSwgMCwgMTksIDAsIDB9LAotICAgIHsyMCwgMCwgMTksIDAsIDB9LAotICAgIHsyLCAwLCAxLCAwLCAwfSwKLSAgICB7MjYsIDAsIDE5LCAwLCAxfSwKLSAgICB7MjIsIDAsIDE5LCAxLCAxfSwKLSAgICB7MjMsIDAsIDE5LCAxLCAxfSwKLSAgICB7MTksIDAsIDEsIDAsIDF9LAotICAgIHsxOCwgMCwgMSwgMCwgMX0sCi0gICAgezMwLCAwLCAxOSwgMCwgMH0sCi0gICAgezMwLCAwLCAxOSwgMCwgMX0sCi0gICAgezI3LCAwLCAxOSwgMCwgMX0sCi0gICAgezE0LCAwLCAxOSwgMCwgNX0sCi0gICAgezgsIDAsIDE5LCAwLCA1fSwKLSAgICB7OSwgMCwgNCwgMCwgNX0sCi0gICAgezUsIDIxNiwgMSwgMCwgNX0sCi0gICAgezUsIDIyNiwgMSwgMCwgNX0sCi0gICAgezI3LCAwLCAxLCAwLCA1fSwKLSAgICB7MjcsIDAsIDEsIDEsIDV9LAorICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKKyAgICB7MTMsIDAsIDE1LCAwLCA1LCAwfSwKKyAgICB7MTMsIDAsIDE3LCAwLCA1LCAwfSwKKyAgICB7MTMsIDAsIDE2LCAwLCA1LCAwfSwKKyAgICB7MTMsIDAsIDE4LCAwLCA1LCAwfSwKKyAgICB7MTAsIDAsIDE4LCAwLCAzLCAwfSwKKyAgICB7MjYsIDAsIDE5LCAwLCAzLCAwfSwKKyAgICB7MjYsIDAsIDExLCAwLCAzLCAwfSwKKyAgICB7MjgsIDAsIDExLCAwLCAzLCAwfSwKKyAgICB7MjIsIDAsIDE5LCAxLCAzLCAwfSwKKyAgICB7MjMsIDAsIDE5LCAxLCAzLCAwfSwKKyAgICB7MjcsIDAsIDEwLCAwLCAzLCAwfSwKKyAgICB7MjYsIDAsIDEzLCAwLCAzLCAwfSwKKyAgICB7MjEsIDAsIDEwLCAwLCAzLCAwfSwKKyAgICB7NywgMCwgOSwgMCwgMywgMH0sCisgICAgezI3LCAwLCAxOSwgMSwgMywgMH0sCisgICAgezI3LCAwLCAxOSwgMCwgMywgMH0sCisgICAgezEsIDAsIDEsIDAsIDMsIDB9LAorICAgIHsyOSwgMCwgMTksIDAsIDMsIDB9LAorICAgIHsyMCwgMCwgMTksIDAsIDMsIDB9LAorICAgIHsyLCAwLCAxLCAwLCAzLCAwfSwKKyAgICB7MTAsIDAsIDEzLCAwLCA1LCAxMzZ9LAorICAgIHsyNiwgMCwgMTksIDAsIDQsIDB9LAorICAgIHsyOCwgMCwgMTEsIDAsIDQsIDB9LAorICAgIHszMCwgMCwgMTksIDAsIDMsIDB9LAorICAgIHszMCwgMCwgMTksIDAsIDQsIDB9LAorICAgIHsyOSwgMCwgMTksIDAsIDQsIDEzNn0sCisgICAgezMwLCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezIsIDAsIDEsIDAsIDQsIDEzNn0sCisgICAgezI0LCAwLCAxOSwgMSwgNSwgMH0sCisgICAgezE0LCAwLCAxNSwgMCwgNCwgMH0sCisgICAgezI5LCAwLCAxOSwgMCwgMywgMTM2fSwKKyAgICB7MzAsIDAsIDExLCAwLCA0LCAwfSwKKyAgICB7MjcsIDAsIDExLCAwLCA0LCAwfSwKKyAgICB7OSwgMCwgOSwgMCwgNCwgMTM2fSwKKyAgICB7MiwgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7MjUsIDAsIDE5LCAxLCA1LCAwfSwKKyAgICB7OSwgMCwgMTksIDAsIDQsIDEzNn0sCisgICAgezEsIDAsIDEsIDAsIDUsIDEwfSwKKyAgICB7MSwgMCwgMSwgMCwgNCwgMH0sCisgICAgezI3LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezIsIDAsIDEsIDAsIDQsIDB9LAorICAgIHsyLCAwLCAxLCAwLCA0LCAxMH0sCisgICAgezIsIDAsIDEsIDAsIDUsIDEwfSwKKyAgICB7MSwgMCwgMSwgMCwgNSwgMH0sCisgICAgezEsIDAsIDEsIDAsIDQsIDEzNn0sCisgICAgezIsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgMSwgMCwgNSwgMH0sCisgICAgezEsIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezMsIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezE4LCAwLCAxLCAwLCA1LCAxMzZ9LAorICAgIHsxOCwgMCwgMTksIDAsIDUsIDB9LAorICAgIHsxOCwgMCwgMSwgMCwgNSwgMH0sCisgICAgezI5LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezI5LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezE4LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezE4LCAwLCAxLCAwLCA0LCAwfSwKKyAgICB7MjksIDAsIDE5LCAwLCA1LCAxMzZ9LAorICAgIHs0LCAyMzAsIDE0LCAwLCA0LCA4MH0sCisgICAgezQsIDIzMCwgMTQsIDAsIDQsIDB9LAorICAgIHs0LCAyMzIsIDE0LCAwLCA0LCAwfSwKKyAgICB7NCwgMjIwLCAxNCwgMCwgNCwgMH0sCisgICAgezQsIDIxNiwgMTQsIDAsIDQsIDgwfSwKKyAgICB7NCwgMjAyLCAxNCwgMCwgNCwgMH0sCisgICAgezQsIDIyMCwgMTQsIDAsIDQsIDgwfSwKKyAgICB7NCwgMjAyLCAxNCwgMCwgNCwgODB9LAorICAgIHs0LCAxLCAxNCwgMCwgNCwgMH0sCisgICAgezQsIDEsIDE0LCAwLCA0LCA4MH0sCisgICAgezQsIDIzMCwgMTQsIDAsIDQsIDE3MH0sCisgICAgezQsIDI0MCwgMTQsIDAsIDQsIDgwfSwKKyAgICB7NCwgMCwgMTQsIDAsIDQsIDB9LAorICAgIHs0LCAyMzMsIDE0LCAwLCA0LCAwfSwKKyAgICB7NCwgMjM0LCAxNCwgMCwgNCwgMH0sCisgICAgezE4LCAwLCAxOSwgMCwgNSwgMTcwfSwKKyAgICB7MjYsIDAsIDE5LCAwLCA1LCAxNzB9LAorICAgIHsyOSwgMCwgMTksIDAsIDUsIDEzOH0sCisgICAgezEsIDAsIDEsIDAsIDUsIDEzOH0sCisgICAgezI3LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezEsIDAsIDEsIDAsIDQsIDEwfSwKKyAgICB7MzAsIDAsIDEsIDAsIDUsIDB9LAorICAgIHs0LCAyMzAsIDE0LCAwLCA1LCAwfSwKKyAgICB7NiwgMCwgMTQsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMSwgMCwgNSwgMH0sCisgICAgezIxLCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezQsIDIyMCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyMjIsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjI4LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEwLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDExLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEyLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEzLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE0LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE1LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE2LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE3LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE4LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDE5LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIwLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIxLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIyLCAxNCwgMCwgNSwgMH0sCisgICAgezIxLCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjMsIDE0LCAwLCA1LCAwfSwKKyAgICB7MjYsIDAsIDQsIDAsIDUsIDB9LAorICAgIHs0LCAyNCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyNSwgMTQsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgNCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCAxMiwgMCwgNSwgMH0sCisgICAgezI3LCAwLCA1LCAwLCA1LCAwfSwKKyAgICB7MjYsIDAsIDExLCAwLCA1LCAwfSwKKyAgICB7MjgsIDAsIDUsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMTMsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgNSwgMCwgNSwgMH0sCisgICAgezQsIDMwLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDMxLCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDMyLCAxNCwgMCwgNSwgMH0sCisgICAgezE5LCAwLCA1LCAwLCA1LCAwfSwKKyAgICB7MTksIDAsIDUsIDAsIDUsIDEwfSwKKyAgICB7MTgsIDAsIDUsIDAsIDUsIDB9LAorICAgIHs0LCAyNywgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyOCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyOSwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAzMywgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAzNCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyMzAsIDE0LCAwLCA1LCA4MH0sCisgICAgezQsIDIyMCwgMTQsIDAsIDUsIDgwfSwKKyAgICB7NywgMCwgMTIsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMTIsIDAsIDUsIDB9LAorICAgIHs0LCAzNSwgMTQsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgNSwgMCwgNSwgMTM2fSwKKyAgICB7NywgMCwgOSwgMCwgNSwgMH0sCisgICAgezMwLCAwLCA1LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKKyAgICB7NCwgMzYsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMCwgMTQsIDAsIDUsIDB9LAorICAgIHs3LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7MTgsIDAsIDQsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMTksIDAsIDUsIDB9LAorICAgIHs1LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTksIDAsIDEsIDAsIDUsIDEwfSwKKyAgICB7NCwgNywgMTQsIDAsIDUsIDgwfSwKKyAgICB7NCwgOSwgMTQsIDAsIDUsIDB9LAorICAgIHsxOSwgMCwgMSwgMCwgNSwgMTcwfSwKKyAgICB7NywgMCwgMSwgMCwgNSwgMH0sCisgICAgezQsIDcsIDE0LCAwLCA1LCAwfSwKKyAgICB7NSwgMCwgMSwgMCwgNSwgODB9LAorICAgIHs1LCAwLCAxLCAwLCA1LCAxMH0sCisgICAgezI4LCAwLCAxMSwgMCwgNSwgMH0sCisgICAgezksIDAsIDEsIDAsIDUsIDB9LAorICAgIHs0LCAwLCAxNCwgMCwgNSwgODB9LAorICAgIHs0LCAwLCAxNCwgMCwgNSwgMTB9LAorICAgIHs0LCA4NCwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCA5MSwgMTQsIDAsIDUsIDgwfSwKKyAgICB7OSwgMCwgMTksIDAsIDUsIDB9LAorICAgIHs0LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7NCwgOSwgMTQsIDAsIDUsIDgwfSwKKyAgICB7MTksIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezQsIDEwMywgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAxMDcsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMTE4LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDEyMiwgMTQsIDAsIDUsIDB9LAorICAgIHsyNiwgMCwgMSwgMCwgNSwgMTM2fSwKKyAgICB7NCwgMjE2LCAxNCwgMCwgNSwgMH0sCisgICAgezIyLCAwLCAxOSwgMSwgNSwgMH0sCisgICAgezIzLCAwLCAxOSwgMSwgNSwgMH0sCisgICAgezQsIDEyOSwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAxMzAsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMCwgMTQsIDAsIDUsIDE3MH0sCisgICAgezQsIDEzMiwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAwLCAxNCwgMCwgNSwgMTM2fSwKKyAgICB7MTksIDAsIDEsIDAsIDIsIDB9LAorICAgIHsxOSwgMCwgMSwgMCwgNSwgODB9LAorICAgIHsxMCwgMCwgMTgsIDAsIDUsIDB9LAorICAgIHs4LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDEsIDAsIDUsIDB9LAorICAgIHs1LCA5LCAxLCAwLCA1LCAwfSwKKyAgICB7NCwgMSwgMTQsIDAsIDUsIDB9LAorICAgIHs0LCAyMzQsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjE0LCAxNCwgMCwgNSwgMH0sCisgICAgezQsIDIwMiwgMTQsIDAsIDUsIDB9LAorICAgIHsyLCAwLCAxLCAwLCA1LCAxMzh9LAorICAgIHsyLCAwLCAxLCAwLCA1LCAxNzB9LAorICAgIHszLCAwLCAxLCAwLCA1LCAxMH0sCisgICAgezEsIDAsIDEsIDAsIDUsIDE3MH0sCisgICAgezI5LCAwLCAxOSwgMCwgNSwgMTcwfSwKKyAgICB7MTAsIDAsIDE4LCAwLCA1LCAxNzB9LAorICAgIHsxMCwgMCwgMTgsIDAsIDUsIDEzNn0sCisgICAgezE0LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7MjEsIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MjEsIDAsIDE5LCAwLCA1LCAxMzZ9LAorICAgIHsyNiwgMCwgMTksIDAsIDUsIDEzNn0sCisgICAgezI0LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezI1LCAwLCAxOSwgMCwgNCwgMH0sCisgICAgezIyLCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezI0LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxOSwgMCwgNCwgMTM2fSwKKyAgICB7MTEsIDAsIDE4LCAwLCA1LCAwfSwKKyAgICB7MTIsIDAsIDE2LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNiwgMCwgNSwgMH0sCisgICAgezE0LCAwLCA4LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDMsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgNywgMCwgNSwgMH0sCisgICAgezI2LCAwLCAxMSwgMCwgNCwgMH0sCisgICAgezI2LCAwLCAxMSwgMCwgNCwgMTM2fSwKKyAgICB7MjYsIDAsIDExLCAwLCA1LCAxMzZ9LAorICAgIHsyMCwgMCwgMTksIDAsIDUsIDB9LAorICAgIHsyNywgMCwgMTMsIDAsIDUsIDB9LAorICAgIHs5LCAwLCA5LCAwLCA1LCAxMzZ9LAorICAgIHsyNywgMCwgMTAsIDAsIDUsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMCwgNSwgMTM2fSwKKyAgICB7MjIsIDAsIDE5LCAxLCA1LCAxMzZ9LAorICAgIHsyMywgMCwgMTksIDEsIDUsIDEzNn0sCisgICAgezE4LCAwLCAxLCAwLCA0LCAxMzZ9LAorICAgIHsyOCwgMCwgMTEsIDAsIDUsIDEzNn0sCisgICAgezI4LCAwLCAxMSwgMCwgMSwgMH0sCisgICAgezMwLCAwLCAxOSwgMCwgNSwgMTM2fSwKKyAgICB7MzAsIDAsIDE5LCAwLCA0LCAxMzZ9LAorICAgIHsxLCAwLCAxLCAwLCA0LCAxNzB9LAorICAgIHszMCwgMCwgMTEsIDAsIDUsIDB9LAorICAgIHsyNywgMCwgMTksIDEsIDUsIDEzNn0sCisgICAgezksIDAsIDE5LCAwLCA1LCAxMzZ9LAorICAgIHs4LCAwLCAxLCAwLCA0LCAxMzZ9LAorICAgIHs4LCAwLCAxLCAwLCA1LCAxMzZ9LAorICAgIHsyNywgMCwgMTksIDAsIDUsIDEwfSwKKyAgICB7MzAsIDAsIDE5LCAwLCA1LCAxMH0sCisgICAgezI3LCAwLCAxOSwgMSwgNSwgMH0sCisgICAgezI3LCAwLCAxOSwgMSwgNCwgMH0sCisgICAgezI3LCAwLCAxOSwgMSwgNSwgMTB9LAorICAgIHsyNywgMCwgMTAsIDAsIDUsIDB9LAorICAgIHsyNywgMCwgMTEsIDAsIDUsIDB9LAorICAgIHsyNywgMCwgMTksIDEsIDQsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMSwgNCwgMTB9LAorICAgIHsyMiwgMCwgMTksIDEsIDIsIDE3MH0sCisgICAgezIzLCAwLCAxOSwgMSwgMiwgMTcwfSwKKyAgICB7MzAsIDAsIDEsIDAsIDQsIDEzNn0sCisgICAgezksIDAsIDE5LCAwLCA0LCAwfSwKKyAgICB7MjcsIDAsIDE5LCAxLCA1LCAxNzB9LAorICAgIHszMCwgMCwgMTksIDAsIDIsIDB9LAorICAgIHszMCwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezEwLCAwLCAxOCwgMCwgMCwgMTM2fSwKKyAgICB7MjYsIDAsIDE5LCAwLCAyLCAwfSwKKyAgICB7MTgsIDAsIDEsIDAsIDIsIDB9LAorICAgIHs4LCAwLCAxLCAwLCAyLCAwfSwKKyAgICB7MjIsIDAsIDE5LCAxLCAyLCAwfSwKKyAgICB7MjMsIDAsIDE5LCAxLCAyLCAwfSwKKyAgICB7MjEsIDAsIDE5LCAwLCAyLCAwfSwKKyAgICB7MjIsIDAsIDE5LCAwLCAyLCAwfSwKKyAgICB7MjMsIDAsIDE5LCAwLCAyLCAwfSwKKyAgICB7NCwgMjE4LCAxNCwgMCwgMiwgMH0sCisgICAgezQsIDIyOCwgMTQsIDAsIDIsIDB9LAorICAgIHs0LCAyMzIsIDE0LCAwLCAyLCAwfSwKKyAgICB7NCwgMjIyLCAxNCwgMCwgMiwgMH0sCisgICAgezQsIDIyNCwgMTQsIDAsIDIsIDB9LAorICAgIHs4LCAwLCAxLCAwLCAyLCAxMzZ9LAorICAgIHsxOSwgMCwgMSwgMCwgMiwgMTB9LAorICAgIHs0LCA4LCAxNCwgMCwgMiwgODB9LAorICAgIHsyOSwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezE4LCAwLCAxLCAwLCAyLCAxMH0sCisgICAgezE5LCAwLCAxLCAwLCAyLCAxMzZ9LAorICAgIHszMCwgMCwgMSwgMCwgMiwgMH0sCisgICAgezksIDAsIDEsIDAsIDIsIDEzNn0sCisgICAgezMwLCAwLCAxLCAwLCAyLCAxMzZ9LAorICAgIHszMCwgMCwgMSwgMCwgNCwgMH0sCisgICAgezksIDAsIDE5LCAwLCAyLCAxMzZ9LAorICAgIHsyOSwgMCwgMSwgMCwgNSwgMH0sCisgICAgezE1LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTYsIDAsIDEsIDAsIDQsIDB9LAorICAgIHsxOSwgMCwgMSwgMCwgMiwgMTcwfSwKKyAgICB7MTksIDAsIDQsIDAsIDUsIDE3MH0sCisgICAgezQsIDI2LCAxNCwgMCwgNSwgMH0sCisgICAgezE5LCAwLCA0LCAwLCA1LCAxMzZ9LAorICAgIHsyMywgMCwgMTksIDAsIDUsIDB9LAorICAgIHsyOCwgMCwgNSwgMCwgNSwgMTM2fSwKKyAgICB7MjYsIDAsIDE5LCAwLCAyLCAxMzZ9LAorICAgIHsyMiwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezIzLCAwLCAxOSwgMCwgMiwgMTM2fSwKKyAgICB7MjEsIDAsIDE5LCAwLCAyLCAxMzZ9LAorICAgIHsyMCwgMCwgMTksIDAsIDIsIDEzNn0sCisgICAgezI2LCAwLCAxMywgMCwgMiwgMTM2fSwKKyAgICB7MjIsIDAsIDE5LCAxLCAyLCAxMzZ9LAorICAgIHsyMywgMCwgMTksIDEsIDIsIDEzNn0sCisgICAgezI2LCAwLCAxMSwgMCwgMiwgMTM2fSwKKyAgICB7MjcsIDAsIDEwLCAwLCAyLCAxMzZ9LAorICAgIHsyMSwgMCwgMTAsIDAsIDIsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMSwgMiwgMTM2fSwKKyAgICB7MjcsIDAsIDE5LCAwLCAyLCAxMzZ9LAorICAgIHsyOCwgMCwgMTEsIDAsIDIsIDEzNn0sCisgICAgezI2LCAwLCAxOSwgMCwgMCwgMTM2fSwKKyAgICB7MjYsIDAsIDExLCAwLCAwLCAxMzZ9LAorICAgIHsyOCwgMCwgMTEsIDAsIDAsIDEzNn0sCisgICAgezIyLCAwLCAxOSwgMSwgMCwgMTM2fSwKKyAgICB7MjMsIDAsIDE5LCAxLCAwLCAxMzZ9LAorICAgIHsyNywgMCwgMTAsIDAsIDAsIDEzNn0sCisgICAgezI2LCAwLCAxMywgMCwgMCwgMTM2fSwKKyAgICB7MjEsIDAsIDEwLCAwLCAwLCAxMzZ9LAorICAgIHs3LCAwLCA5LCAwLCAwLCAxMzZ9LAorICAgIHsyNywgMCwgMTksIDEsIDAsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMCwgMCwgMTM2fSwKKyAgICB7MSwgMCwgMSwgMCwgMCwgMTM2fSwKKyAgICB7MjksIDAsIDE5LCAwLCAwLCAxMzZ9LAorICAgIHsyMCwgMCwgMTksIDAsIDAsIDEzNn0sCisgICAgezIsIDAsIDEsIDAsIDAsIDEzNn0sCisgICAgezI2LCAwLCAxOSwgMCwgMSwgMTM2fSwKKyAgICB7MjIsIDAsIDE5LCAxLCAxLCAxMzZ9LAorICAgIHsyMywgMCwgMTksIDEsIDEsIDEzNn0sCisgICAgezE5LCAwLCAxLCAwLCAxLCAxMzZ9LAorICAgIHsxOCwgMCwgMSwgMCwgMSwgMTM2fSwKKyAgICB7MzAsIDAsIDE5LCAwLCAwLCAxMzZ9LAorICAgIHszMCwgMCwgMTksIDAsIDEsIDEzNn0sCisgICAgezI3LCAwLCAxOSwgMCwgMSwgMTM2fSwKKyAgICB7MTQsIDAsIDE5LCAwLCA1LCAwfSwKKyAgICB7OCwgMCwgMTksIDAsIDUsIDB9LAorICAgIHs5LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7OSwgMCwgMTIsIDAsIDUsIDB9LAorICAgIHszMCwgMCwgMSwgMCwgNSwgMTcwfSwKKyAgICB7NSwgMjE2LCAxLCAwLCA1LCAwfSwKKyAgICB7NSwgMjI2LCAxLCAwLCA1LCAwfSwKKyAgICB7MjcsIDAsIDEsIDAsIDUsIDEzNn0sCisgICAgezcsIDAsIDksIDAsIDUsIDEzNn0sCisgICAgezMwLCAwLCAxLCAwLCA1LCAxMzZ9LAogfTsKIAogLyogUmVpbmRleGluZyBvZiBORkMgZmlyc3QgY2hhcmFjdGVycy4gKi8KLSNkZWZpbmUgVE9UQUxfRklSU1QgMzY3Ci0jZGVmaW5lIFRPVEFMX0xBU1QgNTQKKyNkZWZpbmUgVE9UQUxfRklSU1QgMzcwCisjZGVmaW5lIFRPVEFMX0xBU1QgNTUKIHN0cnVjdCByZWluZGV4e2ludCBzdGFydDtzaG9ydCBjb3VudCxpbmRleDt9Owogc3RhdGljIHN0cnVjdCByZWluZGV4IG5mY19maXJzdFtdID0gewogICB7IDYwLCAyLCAwfSwKQEAgLTQ0Miw2ICs1MzMsOSBAQAogICB7IDEyNTA3LCAwLCAzNjF9LAogICB7IDEyNTI3LCAzLCAzNjJ9LAogICB7IDEyNTQxLCAwLCAzNjZ9LAorICB7IDY5Nzg1LCAwLCAzNjd9LAorICB7IDY5Nzg3LCAwLCAzNjh9LAorICB7IDY5Nzk3LCAwLCAzNjl9LAogICB7MCwwLDB9CiB9OwogCkBAIC00NzcsNiArNTcxLDcgQEAKICAgeyA0MTQyLCAwLCA1MH0sCiAgIHsgNjk2NSwgMCwgNTF9LAogICB7IDEyNDQxLCAxLCA1Mn0sCisgIHsgNjk4MTgsIDAsIDU0fSwKICAgezAsMCwwfQogfTsKIApAQCAtNTY4LDIwNiArNjYzLDUyNCBAQAogICAgIE5VTEwKIH07CiAvKiBpbmRleCB0YWJsZXMgZm9yIHRoZSBkYXRhYmFzZSByZWNvcmRzICovCi0jZGVmaW5lIFNISUZUIDgKKyNkZWZpbmUgU0hJRlQgNwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5kZXgxW10gPSB7CiAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAKICAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAKLSAgICAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUzLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKLSAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1NCwgNTUsIDUyLCA1MiwgNTIsIDU2LCAKLSAgICAyMSwgNTcsIDU4LCA1OSwgNjAsIDYxLCA4LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAotICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNjIsIDYzLCA2MywgNjMsIAotICAgIDYzLCA2MywgNjMsIDYzLCA2MywgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDUyLCA2NSwgNjYsIDY3LCA2OCwgNjksIAotICAgIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDgsIDgsIDgsIDc2LCA3NywgNzgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDIxLCAyMSwgMjEsIDc5LCA4MCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgODEsIDgyLCAKLSAgICA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4OSwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCi0gICAgNTIsIDUyLCA1MiwgNTIsIDkwLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA1MiwgNTIsIDkxLCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA5MiwgOTMsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDk0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAotICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA5NCwgCisgICAgMzksIDQwLCA0MSwgNDEsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgCisgICAgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgCisgICAgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgMTcsIDg0LCA4NSwgODYsIDg3LCA4OCwgCisgICAgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDEsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAyLCAKKyAgICAxMDMsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDQsIDQxLCA0MSwgMTA1LCAxMDYsIDEwNywgCisgICAgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxNywgMTE1LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTcsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDEyMCwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIAorICAgIDEyNSwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDE3LCAxMzYsIDEzNywgCisgICAgMTM4LCAxMzksIDE0MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTQxLCAxNywgMTQyLCAxNywgMTQzLCAxNywgMTQ0LCAKKyAgICAxNywgMTQ1LCAxNywgMTcsIDE3LCAxNDYsIDE3LCAxNywgMTcsIDE3LCAxNDcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDE0OCwgMTcsIDE0OSwgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDE1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA3OCwgMTUxLCAKKyAgICAxNTIsIDE1MywgMTU0LCAxNywgMTU1LCAxNywgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxNjksIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxNzAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTcxLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNzIsIDE3LCAxNzMsIDE3NCwgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTc1LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgCisgICAgMTE5LCAxMTksIDE3NSwgCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpbmRleDJbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmRleDJbXSA9IHsKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAzLCAyLCA0LCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAzLCAzLCAzLCAyLCA1LCA2LCA2LCA3LCA4LCA3LCA2LCA2LCA5LCAxMCwgNiwgMTEsIDEyLCAxMywgMTIsIAogICAgIDEyLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTIsIDYsIDE1LCAxNiwgMTUsIDYsIDYsIDE3LCAKQEAgLTc3NiwxMjczICsxMTg5LDEyMTggQEAKICAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKICAgICAyMCwgMjAsIDksIDE2LCAxMCwgMTYsIDEsIDEsIDEsIDEsIDEsIDEsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIxLCAyMiwgOCwgOCwgMjMsIDgsIDI0LCAKLSAgICAyNSwgMjYsIDI3LCAyOCwgMjksIDE2LCAzMCwgMjUsIDE4LCAzMSwgMzIsIDMzLCAzMywgMjYsIDM0LCAyNSwgMjIsIDI2LCAKLSAgICAzMywgMjgsIDM1LCAzNiwgMzYsIDM2LCAyMiwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzgsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM4LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzOSwgMzgsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzgsIDI4LCAyOCwgMjgsIDM0LCAzNCwgMzQsIDM0LCAyOCwgMzQsIDI4LCAyOCwgMjgsIDM0LCAyOCwgMjgsIDM0LCAKLSAgICAzNCwgMjgsIDM0LCAyOCwgMjgsIDM0LCAzNCwgMzQsIDM5LCAyOCwgMjgsIDI4LCAzNCwgMjgsIDM0LCAyOCwgMzQsIDM3LCAKLSAgICAyOCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMjgsIDM3LCAKLSAgICAyOCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDI4LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzgsIDI4LCAzNywgMzQsIDM3LCAyOCwgMzcsIDM0LCAzNywgMzQsIDM3LCAyOCwgMzgsIDI4LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMjgsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM4LCAyOCwgMzgsIDI4LCAzNywgMjgsIDM3LCAzNCwgMzcsIDI4LCAKLSAgICAyOCwgMzgsIDI4LCAzNywgMjgsIDM3LCAzNCwgMzcsIDM0LCAzOCwgMjgsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM4LCAyOCwgMzcsIDM0LCAzNywgMjgsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNCwgMzQsIDM3LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM3LCAzNywgMzQsIDM0LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzQsIDM3LCAzNywgMzQsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzQsIDM3LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzcsIDM0LCAzNywgMzQsIDM0LCAzNywgMzQsIDM3LCAzNywgMzQsIDM3LCAzNywgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNywgMzQsIDM0LCA0MCwgMzcsIDM0LCAzNCwgMzQsIDQwLCA0MCwgNDAsIDQwLCAzNywgNDEsIDM0LCAKLSAgICAzNywgNDEsIDM0LCAzNywgNDEsIDM0LCAzNywgMjgsIDM3LCAyOCwgMzcsIDI4LCAzNywgMjgsIDM3LCAyOCwgMzcsIDI4LCAKLSAgICAzNywgMjgsIDM3LCAyOCwgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM0LCAzNywgNDEsIDM0LCAzNywgMzQsIDM3LCAzNywgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzQsIDM3LCAzNCwgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM0LCAyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjgsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQzLCA0MywgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQ0LCAKLSAgICA0NCwgMjYsIDQ0LCA0MywgNDUsIDQzLCA0NSwgNDUsIDQ1LCA0MywgNDUsIDQzLCA0MywgNDYsIDQyLCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCAyNiwgMjYsIDI2LCAyNiwgNDQsIDI2LCA0NCwgMjYsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQzLCA0NCwgNDIsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDgsIDQ5LCA0OSwgNDksIDQ5LCA0OCwgNTAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNTEsIDUxLCA0OSwgNDksIDQ5LCA0OSwgNTEsIDUxLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDUyLCA1MiwgNTIsIDUyLCA1MiwgNDksIDQ5LCA0OSwgNDksIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNTMsIDQ3LCA0OSwgNDksIDQ5LCA0NywgNDcsIDQ3LCA0OSwgNDksIDU0LCA0NywgNDcsIDQ3LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDcsIDQ4LCA0OSwgNDksIDQ3LCA1NSwgNTYsIDU2LCA1NSwgNTYsIDU2LCA1NSwgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDM3LCAzNCwgMzcsIDM0LCA0MywgNDQsIDM3LCAKLSAgICAzNCwgMCwgMCwgNDIsIDM0LCAzNCwgMzQsIDU3LCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDM3LCA1NywgMzcsIDM3LCAzNywgCi0gICAgMCwgMzcsIDAsIDM3LCAzNywgMzQsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAKLSAgICAzOCwgMzgsIDM4LCAzOCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIAotICAgIDM0LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzQsIDM0LCAzNywgMzcsIAotICAgIDM3LCAzNCwgMzQsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM0LCA1OCwgMzcsIAotICAgIDM0LCAzNywgMzcsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM4LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIAotICAgIDM4LCAzOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIAotICAgIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAzNCwgMjgsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDU5LCA2MCwgNjAsIDYwLCA2MCwgNjAsIAotICAgIDYxLCA2MSwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIAotICAgIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCisgICAgMjUsIDI2LCAyNywgMjgsIDI5LCAxNiwgMzAsIDI1LCAzMSwgMzIsIDMzLCAzNCwgMzQsIDI2LCAzNSwgMjUsIDIyLCAyNiwgCisgICAgMzQsIDI4LCAzNiwgMzcsIDM3LCAzNywgMjIsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM5LCAzOCwgMzgsIDM4LCAzOCwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOSwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDAsIDM5LCAzOCwgMzgsIDM4LCAzOCwgCisgICAgMzgsIDM5LCA0MSwgNDIsIDQyLCA0MywgNDMsIDQzLCA0MywgNDEsIDQzLCA0MiwgNDIsIDQyLCA0MywgNDIsIDQyLCA0MywgCisgICAgNDMsIDQxLCA0MywgNDIsIDQyLCA0MywgNDMsIDQzLCA0MCwgNDEsIDQyLCA0MiwgNDMsIDQyLCA0MywgNDEsIDQzLCAzOCwgCisgICAgNDIsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDQsIDQxLCAzOCwgCisgICAgNDIsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM5LCA0MSwgMzgsIDQzLCAzOCwgNDIsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDEsIDQ1LCAyOCwgMzgsIDQzLCAzOCwgCisgICAgNDMsIDQxLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NSwgMjgsIDM5LCA0MSwgMzgsIDQyLCAzOCwgNDMsIDM4LCA0MiwgCisgICAgMjgsIDM5LCA0MSwgMzgsIDQyLCAzOCwgNDMsIDM4LCA0MywgMzksIDQxLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOSwgNDEsIDM4LCA0MywgMzgsIDQyLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCisgICAgMzUsIDQ2LCA0NCwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NCwgNDYsIDQ0LCA0NCwgNDQsIDQ2LCA0NiwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ2LCA0NCwgNDQsIDQ2LCA0NCwgNDQsIDQ0LCA0NiwgNDYsIDQ2LCA0NCwgNDQsIDQ2LCA0NCwgMzgsIDQzLCA0NCwgCisgICAgNDYsIDQ0LCA0NiwgNDQsIDQ0LCA0NiwgNDQsIDQ2LCA0NiwgNDQsIDQ2LCA0NCwgMzgsIDQzLCA0NCwgNDQsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDQsIDQ2LCA0NiwgNDcsIDQ0LCA0NiwgNDYsIDQ2LCA0NywgNDcsIDQ3LCA0NywgNDgsIDQ5LCAzNSwgCisgICAgNDgsIDQ5LCAzNSwgNDgsIDQ5LCAzNSwgMzgsIDQyLCAzOCwgNDIsIDM4LCA0MiwgMzgsIDQyLCAzOCwgNDIsIDM4LCA0MiwgCisgICAgMzgsIDQyLCAzOCwgNDIsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDgsIDQ5LCAzNSwgMzgsIDQzLCA0NCwgNDQsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCA0NCwgCisgICAgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ0LCA0NCwgNDYsIDQ0LCA0NCwgNDYsIDQ2LCA0NCwgNDYsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NiwgNDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ3LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MSwgNTEsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MywgCisgICAgNTMsIDU0LCA1MywgNTEsIDU1LCA1MSwgNTUsIDU1LCA1NSwgNTEsIDU1LCA1MSwgNTEsIDU2LCA1MiwgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgMjYsIDI2LCAyNiwgMjYsIDU3LCAyNiwgNTMsIDU0LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MSwgNTMsIDUyLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTksIDU4LCA1OCwgNTgsIDU4LCA1OCwgCisgICAgNTgsIDU4LCA1OSwgNTksIDU4LCA1OSwgNTgsIDU5LCA1OCwgNTgsIDYwLCA2MSwgNjEsIDYxLCA2MSwgNjAsIDYyLCA2MSwgCisgICAgNjEsIDYxLCA2MSwgNjEsIDYzLCA2MywgNjQsIDY0LCA2NCwgNjQsIDY1LCA2NSwgNjEsIDYxLCA2MSwgNjEsIDY0LCA2NCwgCisgICAgNjEsIDY0LCA2NCwgNjEsIDYxLCA2NiwgNjYsIDY2LCA2NiwgNjcsIDYxLCA2MSwgNjEsIDYxLCA1OSwgNTksIDU5LCA2OCwgCisgICAgNjgsIDU4LCA2OCwgNjgsIDY5LCA1OSwgNjEsIDYxLCA2MSwgNTksIDU5LCA1OSwgNjEsIDYxLCA3MCwgNTksIDU5LCA1OSwgCisgICAgNjEsIDYxLCA2MSwgNjEsIDU5LCA2MCwgNjEsIDYxLCA1OSwgNzEsIDcyLCA3MiwgNzEsIDcyLCA3MiwgNzEsIDU5LCA1OSwgCisgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA0NCwgNDYsIDQ0LCA0NiwgNzMsIDUzLCA0NCwgCisgICAgNDYsIDAsIDAsIDUwLCA0NiwgNDYsIDQ2LCA3NCwgMCwgMCwgMCwgMCwgMCwgNTcsIDc1LCAzOCwgNzQsIDM4LCAzOCwgMzgsIAorICAgIDAsIDM4LCAwLCAzOCwgMzgsIDQzLCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgCisgICAgMzksIDM5LCAzOSwgMzksIDAsIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOCwgMzgsIDQzLCA0MywgNDMsIDQzLCAKKyAgICA0MywgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAKKyAgICA0NiwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQzLCA0MywgNDMsIDQzLCA0MywgNDQsIDM1LCAzNSwgNDgsIDc2LCAKKyAgICA3NiwgMzUsIDM1LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgMzUsIDM1LCAzNSwgNDYsIDQ4LCAzNSwgNzcsIDQ0LCAKKyAgICA0NiwgNDgsIDQ0LCA0NiwgNDYsIDQ0LCA0NCwgNDQsIDM4LCA3OCwgNDQsIDM4LCA0NCwgNDQsIDQ0LCAzOCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDM4LCAzOCwgMzgsIDQ0LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCA3OCwgMzksIDM5LCAKKyAgICAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAKKyAgICAzOSwgMzksIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQyLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAKKyAgICA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDMsIDQyLCAKKyAgICA0NiwgNDMsIDQ2LCA0NiwgNDYsIDQzLCA0NiwgNDYsIDQ2LCA0NiwgNDMsIDQzLCA0MywgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICAzOCwgNDMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA3OSwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MSwgODEsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCAzOCwgNDMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ2LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgNDQsIDQ2LCAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDQsIDQ2LCAKKyAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKKyAgICAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgMCwgNTIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDAsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMzUsIAorICAgIDAsIDgyLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgODQsIDgwLCA4MCwgODAsIDgwLCA4NCwgODAsIDgwLCA4MCwgODUsIDg0LCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4MCwgODAsIDg0LCA4MCwgODAsIDg1LCAKKyAgICA4NiwgODAsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIAorICAgIDEwMiwgMTAzLCAxMDQsIDEwMiwgODAsIDg0LCAxMDIsIDk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDIsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2LCAxMDYsIDEwNiwgCisgICAgMTA2LCAwLCAwLCA3NywgNzcsIDEwNywgMTA4LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDI3LCAyNywgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCAxMTIsIDExMywgMTE0LCAxMTEsIDAsIDAsIDExMSwgMTExLCAwLCAxMTUsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNywgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTgsIDExOSwgMTIwLCAKKyAgICAxMTIsIDExMywgMTE0LCAxMjEsIDEyMiwgMTIzLCAxMjMsIDEyNCwgODQsIDgwLCA4MCwgODAsIDgwLCA4MCwgODQsIDgwLCAKKyAgICA4MCwgMCwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMDgsIDEyNiwgMTI2LCAKKyAgICAxMTEsIDExNSwgMTE1LCAxMjcsIDExNSwgMTE1LCAxMTUsIDExNSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE2LCAKKyAgICAxMTUsIDExNiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTYsIDExMSwgMTE1LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTA2LCA4MSwgCisgICAgODAsIDgwLCA4MCwgODAsIDg0LCA4MCwgMTE3LCAxMTcsIDgwLCA4MCwgMjcsIDg0LCA4MCwgODAsIDg0LCAxMTUsIDExNSwgCisgICAgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMTUsIDExNSwgMTE1LCAxMzAsIAorICAgIDEzMCwgMTE1LCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKKyAgICAxMTEsIDExMSwgMCwgMTMxLCAxMTUsIDEzMiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgODAsIDg0LCA4MCwgODAsIDg0LCA4MCwgODAsIDg0LCA4NCwgCisgICAgODQsIDgwLCA4NCwgODQsIDgwLCA4NCwgODAsIDgwLCA4MCwgODQsIDgwLCA4NCwgODAsIDg0LCA4MCwgODQsIDgwLCA4MCwgCisgICAgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNCwgMTM0LCAKKyAgICAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDg0LCA4MCwgMTM1LCAxMzUsIDI3LCAxMzYsIDEzNiwgMTM2LCAxMzUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgODAsIDgwLCA4MCwgODAsIDEzNSwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTM1LCA4MCwgODAsIDgwLCAxMzUsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTM3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM4LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM4LCA0NywgNDcsIAorICAgIDEzOCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxMzksIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAxNDAsIDEzNywgMCwgNDcsIDgwLCA4NCwgODAsIAorICAgIDgwLCAxMzMsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCA0NywgNDcsIDEzMywgMTMzLCAKKyAgICA4MiwgODIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgODIsIDUyLCA0NywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDEzMywgMTM3LCAxMzcsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTQzLCA0NywgMTQ0LCAKKyAgICAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAwLCAwLCAxMzcsIDEzNywgMCwgMCwgMTQ1LCAxNDUsIDE0MCwgNDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMCwgMCwgMCwgMCwgMTQxLCAxNDEsIDAsIDE0MSwgNDcsIDQ3LCAxMzMsIDEzMywgCisgICAgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA0NywgNDcsIDE0NiwgMTQ2LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCA3OSwgMTQ2LCAwLCAwLCAwLCAwLCAwLCAxMzMsIDEzMywgMTM3LCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDE0MSwgMCwgNDcsIDE0MSwgMCwgNDcsIDQ3LCAwLCAwLCAxNDMsIDAsIAorICAgIDEzNywgMTM3LCAxMzcsIDEzMywgMTMzLCAwLCAwLCAwLCAwLCAxMzMsIDEzMywgMCwgMCwgMTMzLCAxMzMsIDE0MCwgMCwgMCwgCisgICAgMCwgMTMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCA0NywgMCwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDEzMywgMTMzLCA0NywgNDcsIAorICAgIDQ3LCAxMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMywgMTMzLCAxMzcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MywgNDcsIDEzNywgCisgICAgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAwLCAxMzMsIDEzMywgMTM3LCAwLCAxMzcsIDEzNywgMTQwLCAwLCAKKyAgICAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAxMzMsIDEzMywgMCwgCisgICAgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAxNDYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMywgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxNDMsIDQ3LCAxNDQsIDEzMywgMTM3LCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDAsIDAsIDEzNywgMTQ1LCAwLCAwLCAxNDUsIDE0NSwgMTQwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDgsIDE0NCwgMCwgMCwgMCwgMCwgMTQxLCAxNDEsIDAsIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAwLCAwLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDc5LCA0NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAxMzgsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIAorICAgIDAsIDAsIDAsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMTQ0LCAxMzcsIDEzMywgMTM3LCAxMzcsIDAsIDAsIDAsIAorICAgIDEzNywgMTM3LCAxMzcsIDAsIDE0NSwgMTQ1LCAxNDUsIDE0MCwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDcsIDE0NywgMTQ3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNDYsIDI3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMzcsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDEzMywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzcsIDEzNywgMCwgMTMzLCAKKyAgICAxMzMsIDE0OSwgMCwgMTMzLCAxMzMsIDEzMywgMTQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTAsIDE1MSwgMCwgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDEzMywgMTMzLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAKKyAgICAxNTIsIDE1MiwgNzksIDAsIDAsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTQzLCA0NywgMTM3LCAxNTMsIDE0NSwgMTM3LCAxNDQsIDEzNywgCisgICAgMTM3LCAwLCAxNTMsIDE0NSwgMTQ1LCAwLCAxNDUsIDE0NSwgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgCisgICAgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgNDcsIDQ3LCAxMzMsIDEzMywgMCwgMCwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCAxNDQsIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAxMzMsIAorICAgIDAsIDEzNywgMTM3LCAxMzcsIDAsIDE0NSwgMTQ1LCAxNDUsIDE0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDEzMywgMTMzLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDAsIDAsIDAsIDc5LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxMzcsIDEzNywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCAwLCAwLCAxNTQsIDAsIDAsIDAsIDAsIDE0NCwgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIDAsIDEzMywgCisgICAgMCwgMTM3LCAxMzcsIDE0NSwgMTM3LCAxNDUsIDE0NSwgMTQ1LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgMTU1LCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzMsIDE1NiwgMTU2LCAxNDAsIDAsIDAsIDAsIDAsIDE0NiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTIsIAorICAgIDEzMywgMTU3LCAxNTcsIDE1NywgMTU3LCAxMzMsIDEzMywgMTMzLCA4MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCisgICAgMCwgNDcsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgMCwgMCwgNDcsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgMTU1LCAxMzMsIDEzMywgMTMzLCAxMzMsIDE1OCwgMTU4LCAwLCAxMzMsIAorICAgIDEzMywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNTIsIDAsIDE1OSwgMTU5LCAxNTksIDE1OSwgMTMzLCAKKyAgICAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMTU1LCAKKyAgICAxNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA3OSwgNzksIDc5LCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgODIsIDE2MCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgNzksIDc5LCA3OSwgNzksIDc5LCA4NCwgODQsIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQ3LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCA3OSwgODQsIDc5LCA4NCwgNzksIDE2MSwgCisgICAgMTYyLCAxNjMsIDE2MiwgMTYzLCAxMzcsIDEzNywgNDcsIDQ3LCA0NywgMTQxLCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDE0MSwgNDcsIDQ3LCA0NywgNDcsIDE0MSwgNDcsIDQ3LCA0NywgNDcsIDE0MSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDE0MSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQxLCA0NywgNDcsIDQ3LCAwLCAKKyAgICAwLCAwLCAwLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2NiwgMTY2LCAxNjgsIDE2NiwgMTY4LCAxNjUsIDE2NSwgMTY1LCAxNjUsIAorICAgIDEzMywgMTM3LCAxNjUsIDE2NiwgODAsIDgwLCAxNDAsIDgyLCA4MCwgODAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxNjYsIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMTMzLCAxMzMsIDEzMywgMTMzLCAxNjYsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTY2LCAxMzMsIDEzMywgMTMzLCAxMzMsIDE2NiwgMTMzLCAxMzMsIDEzMywgMTMzLCAxNjYsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDE2NiwgMTMzLCAKKyAgICAxMzMsIDEzMywgMCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA4NCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgMCwgNzksIDc5LCA4MiwgODIsIDgyLCA4MiwgODIsIDc5LCA3OSwgNzksIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzOCwgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAxMzMsIDE0OCwgMTMzLCAKKyAgICAxMzMsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDE0MywgMTM3LCAxNDAsIDE0MCwgMTM3LCAxMzcsIDEzMywgCisgICAgMTMzLCA0NywgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgODIsIDgyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxMzMsIDEzMywgMTMzLCA0NywgMTM3LCAxMzcsIDEzNywgNDcsIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAKKyAgICAxMzcsIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAxMzMsIDEzMywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAKKyAgICA4NCwgNDcsIDEzNywgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxMzcsIDEzNywgCisgICAgMTM3LCAxMzMsIDc5LCA3OSwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgODIsIDUwLCAwLCAwLCAwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCA0NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDgwLCAKKyAgICA3OSwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIAorICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMTcxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgMTYzLCAwLCAwLCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA4MiwgODIsIDgyLCAxNzIsIDE3MiwgMTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEzMywgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAxNDAsIDgyLCAKKyAgICA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAKKyAgICAwLCAxMzMsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE3MywgMTczLCAxMzcsIDEzMywgMTMzLCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzMywgMTM3LCAKKyAgICAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDE0MCwgMTMzLCA4MiwgODIsIDgyLCAKKyAgICA1MiwgODIsIDgyLCA4MiwgMTQ2LCA0NywgODAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIAorICAgIDE1MiwgMTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCA4MywgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzMsIDEzMywgMTMzLCAxNzEsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODYsIDQ3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCAwLCAwLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzcsIDEzNywgCisgICAgMTM3LCAwLCAwLCAwLCAwLCAxMzcsIDEzNywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCA4NSwgODAsIDg0LCAKKyAgICAwLCAwLCAwLCAwLCAyNywgMCwgMCwgMCwgMTM2LCAxMzYsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgCisgICAgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAwLCAwLCAwLCAxMzYsIDEzNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgwLCA4NCwgMTM3LCAxMzcsIDEzNywgMCwgMCwgODIsIDgyLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTMzLCAxMzcsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMTQwLCAxMzcsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzMsIDEzMywgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCA4NCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA1MiwgODIsIDgyLCA4MiwgCisgICAgODIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDQ3LCAKKyAgICAxMzgsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDEzOCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQzLCAxNDQsIDEzMywgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxNDUsIDEzMywgMTQ1LCAxMzcsIDEzNywgMTQ1LCAxNDUsIDEzMywgMTQ1LCAxNzQsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAorICAgIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgODAsIAorICAgIDg0LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMCwgMCwgCisgICAgMCwgMTMzLCAxMzMsIDEzNywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzMsIDEzMywgMTc0LCAwLCAwLCAwLCA0NywgNDcsIDE0MiwgMTQyLCAxNDIsIAorICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTMzLCAxNDMsIDAsIDAsIDAsIDgyLCA4MiwgCisgICAgODIsIDgyLCA4MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDgyLCA4MiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODIsIDE3NSwgODQsIDg0LCA4NCwgODQsIDg0LCA4MCwgODAsIDg0LCAKKyAgICA4NCwgODQsIDg0LCA4MCwgMTM3LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA4NCwgNDcsIDQ3LCA0NywgNDcsIDEzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA1MCwgNTAsIDUwLCA1MiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNTAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgODAsIDgwLCA4NCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDg0LCA4MCwgODAsIDE3NiwgMTc3LCA4NCwgMTc4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQsIDgwLCA4NCwgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxNzksIDQ2LCA0NiwgNDQsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDQ2LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIAorICAgIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIAorICAgIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIAorICAgIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDM4LCAwLCAzOCwgCisgICAgMCwgMzgsIDAsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAKKyAgICAzOCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgMCwgMCwgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MiwgMTgxLCA1NywgMTgwLCA1NywgNTcsIDc1LCAKKyAgICA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODIsIDM4LCAxODIsIDE4MSwgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgCisgICAgMTgwLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MiwgMCwgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgMTgwLCA0MywgCisgICAgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgyLCAzOCwgNzUsIDE4MywgMTgzLCAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgCisgICAgNDMsIDM4LCAxODIsIDM4LCAxODIsIDE4MSwgMTgzLCA1NywgMCwgMTg0LCAxODQsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAKKyAgICAxODUsIDE4NSwgMTg1LCAxODUsIDEzMSwgMTMxLCAxMzEsIDE3MywgMTg2LCAxODcsIDE4OCwgODMsIDE4NywgMTg3LCAxODcsIAorICAgIDIyLCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgMTkwLCAxOTEsIDE5MiwgMTkzLCAyMiwgMjIsIDIyLCAxMzYsIDE5NCwgCisgICAgMTk0LCAxOTQsIDIyLCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIxLCAyMDIsIDEwOCwgMjAyLCAyMDMsIAorICAgIDIwNCwgMjIsIDE4OSwgMTg5LCAxMzYsIDI5LCAzNiwgMjIsIDE4OSwgMTM2LCAxOTQsIDIwNSwgMjA1LCAxMzYsIDEzNiwgCisgICAgMTM2LCAyMDYsIDE2MiwgMTYzLCAxODksIDE4OSwgMTg5LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgNzcsIDEzNiwgMjA1LCAxMzYsIDEzNiwgMTg5LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDE4NSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDIwNywgNTAsIDAsIDAsIDM0LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA4LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgCisgICAgMjA3LCAzNCwgMzQsIDM0LCAzNCwgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwOCwgMjA4LCAyMDksIDIxMCwgMjExLCAwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgCisgICAgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAyMTMsIDIxNCwgMTQ2LCAxNDYsIDIzLCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDE3NSwgMTc1LCA4MCwgODAsIDgwLCA4MCwgMTc1LCAxNzUsIAorICAgIDE3NSwgODAsIDgwLCA4MSwgODEsIDgxLCA4MSwgODAsIDgxLCA4MSwgODEsIDE3NSwgMTc1LCA4MCwgODQsIDgwLCAxNzUsIAorICAgIDE3NSwgODQsIDg0LCA4NCwgODQsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyMTUsIDIxNSwgNDgsIDIxNiwgMjcsIDIxNiwgMjE1LCA0OCwgMjcsIDIxNiwgMzUsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgNDgsIAorICAgIDQ4LCA0OCwgMjgsIDI3LCA0OCwgMjE2LCAyNywgMjcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMjcsIDI3LCAyMTUsIDIxNiwgCisgICAgMjE2LCAyNywgNDgsIDI3LCAyMTcsIDI3LCA0OCwgMjcsIDE4MiwgMjE3LCA0OCwgNDgsIDIxOCwgMzUsIDQ4LCA0OCwgNDQsIAorICAgIDQ4LCAzNSwgMTU1LCAxNTUsIDE1NSwgMTU1LCAzNSwgMjcsIDIxNSwgMzUsIDM1LCA0OCwgNDgsIDIxOSwgNzcsIDc3LCA3NywgCisgICAgNzcsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMjcsIDc3LCAyNywgMjcsIDQ2LCA3OSwgMjIwLCAyMjAsIDIyMCwgMzcsIDM3LCAKKyAgICAyMjAsIDIyMCwgMjIwLCAyMjAsIDIyMCwgMjIwLCAzNywgMzcsIDM3LCAzNywgMjIwLCAyMjEsIDIyMSwgMjIxLCAyMjEsIAorICAgIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMSwgMjIxLCAKKyAgICAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMiwgCisgICAgMTcyLCAxNzIsIDE3MiwgNDQsIDQ2LCAxNzIsIDE3MiwgMTcyLCAxNzIsIDM3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIAorICAgIDQwLCA0MCwgNDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjIzLCAyMjMsIDI3LCAyNywgMjcsIDI3LCA3NywgMjcsIDI3LCA3NywgCisgICAgMjcsIDI3LCA3NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDIyMywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjI0LCAyMjMsIDIyMywgMjcsIDI3LCA0MCwgMjcsIDQwLCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNDAsIDIyNSwgMjI2LCAyMjYsIDIyNywgNzcsIDc3LCA0MCwgMjI2LCAyMjcsIDIyNSwgMjI2LCAyMjcsIAorICAgIDIyNSwgNzcsIDQwLCA3NywgMjI2LCAyMjgsIDIyOSwgNzcsIDIyNiwgMjI1LCA3NywgNzcsIDc3LCAyMjYsIDIyNSwgMjI1LCAKKyAgICAyMjYsIDQwLCAyMjYsIDIyNiwgMjI1LCAyMjUsIDQwLCAyMjcsIDQwLCAyMjcsIDQwLCA0MCwgNDAsIDQwLCAyMjYsIDIzMCwgCisgICAgMjE5LCAyMjYsIDIxOSwgMjE5LCAyMjUsIDIyNSwgMjI1LCA0MCwgNDAsIDQwLCA0MCwgNzcsIDIyNSwgNzcsIDIyNSwgMjI2LCAKKyAgICAyMjYsIDIyNSwgMjI1LCAyMjUsIDIyNywgMjI1LCAyMjUsIDIyNywgMjI1LCAyMjUsIDIyNywgMjI2LCAyMjcsIDIyNSwgCisgICAgMjI1LCAyMjYsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNzcsIDc3LCAyMjUsIDIzMSwgNDAsIDIyNywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI1LCAyMjUsIDIyNiwgCisgICAgMjI2LCA3NywgMjIzLCAyMzEsIDIzMSwgMjI3LCAyMjcsIDIyNSwgMjI1LCAyMjcsIDIyNywgMjI1LCAyMjUsIDIyNywgMjI3LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjcsIDIyNywgMjI2LCAyMjYsIDIyNywgMjI3LCAyMjYsIDIyNiwgCisgICAgMjI3LCAyMjcsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDQwLCA3NywgNzcsIAorICAgIDIyNSwgNDAsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI1LCAyMjUsIDc3LCA0MCwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI2LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjcsIDIyNywgMjI3LCAyMjcsIDc3LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMjUsIDIyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDIzMiwgMjMzLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDI3LCA3NywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgNzksIDI3LCAyNywgMjcsIDI3LCAyNywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAogICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDAsIDAsIDQyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCAwLCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAwLCA2MiwgNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDY0LCA2MCwgNjAsIDYwLCA2MCwgNjQsIDYwLCA2MCwgNjAsIDY1LCA2NCwgCi0gICAgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjAsIDYwLCA2NCwgNjAsIDYwLCA2NSwgCi0gICAgNjYsIDYwLCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgCi0gICAgODIsIDgzLCA4NCwgODIsIDYwLCA2NCwgODIsIDc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDg2LCA4NiwgODYsIDg2LCAwLCAwLCA1OCwgNTgsIDg3LCA4OCwgODgsIDg5LCA5MCwgOTEsIDI3LCAKLSAgICAyNywgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA5MiwgOTMsIDk0LCA5MSwgMCwgMCwgOTEsIDkxLCAwLCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTYsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NywgOTgsIDk5LCA5MiwgOTMsIDk0LCAxMDAsIDEwMSwgNjAsIDYwLCA2NCwgNjQsIDYwLCAKLSAgICA2MCwgNjAsIDYwLCA2MCwgNjQsIDYwLCA2MCwgMCwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAotICAgIDEwMiwgMTAyLCA4OCwgMTAzLCAxMDMsIDkxLCA5NSwgOTUsIDEwNCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTEsIDk1LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgODYsIDYxLCA2MCwgNjAsIDYwLCA2MCwgNjQsIDYwLCAKLSAgICA5NiwgOTYsIDYwLCA2MCwgMjcsIDY0LCA2MCwgNjAsIDY0LCA5NSwgOTUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAotICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgOTUsIDk1LCA5NSwgMTA2LCAxMDYsIDk1LCA5MSwgOTEsIDkxLCA5MSwgOTEsIDkxLCA5MSwgCi0gICAgOTEsIDkxLCA5MSwgOTEsIDkxLCA5MSwgOTEsIDAsIDEwNywgOTUsIDEwOCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgNjAsIDY0LCA2MCwgNjAsIDY0LCA2MCwgNjAsIDY0LCA2NCwgNjQsIDYwLCA2NCwgNjQsIAotICAgIDYwLCA2NCwgNjAsIDYwLCA2MCwgNjQsIDYwLCA2NCwgNjAsIDY0LCA2MCwgNjQsIDYwLCA2MCwgMCwgMCwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgCi0gICAgNjAsIDY0LCA2MCwgMTExLCAxMTEsIDI3LCA1NywgNTcsIDU3LCAxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOSwgMTA5LCAxMTIsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDExMywgNDAsIDExMiwgCi0gICAgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIAotICAgIDExNCwgMCwgMCwgNDAsIDYwLCA2NCwgNjAsIDYwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMTA5LCAxMDksIDYyLCA2MiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCA2MiwgNDIsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDEwOSwgMTEyLCAKLSAgICAxMTIsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgCi0gICAgMTEzLCA0MCwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAwLCAwLCAxMTIsIDExMiwgMCwgMCwgMTEyLCAKLSAgICAxMTIsIDExNCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMiwgMCwgMCwgMCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIAotICAgIDQwLCAxMDksIDEwOSwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA0MCwgCi0gICAgNDAsIDExNiwgMTE2LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5LCAKLSAgICAxMDksIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIAotICAgIDAsIDAsIDExMywgMCwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMDksIDAsIDAsIDAsIDAsIDEwOSwgMTA5LCAwLCAwLCAxMDksIAotICAgIDEwOSwgMTE0LCAwLCAwLCAwLCAxMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMDksIAotICAgIDEwOSwgNDAsIDQwLCA0MCwgMTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDEwOSwgMTEyLCAwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAxMTMsIAotICAgIDQwLCAxMTIsIDExMiwgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMCwgMTA5LCAxMDksIDExMiwgMCwgMTEyLCAKLSAgICAxMTIsIDExNCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgCi0gICAgMTA5LCAxMDksIDAsIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMTE2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDExMiwgMTEyLCAwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMTEzLCA0MCwgMTEyLCAKLSAgICAxMDksIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAwLCAwLCAxMTIsIDExMiwgMCwgMCwgMTEyLCAxMTIsIDExNCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTA5LCAxMTIsIDAsIDAsIDAsIDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgMTA5LCAxMDksIAotICAgIDAsIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgNTksIDQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDksIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgNDAsIDQwLCAwLCA0MCwgMCwgCi0gICAgNDAsIDQwLCAwLCAwLCAwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDExMiwgMTEyLCAxMDksIDExMiwgMTEyLCAwLCAKLSAgICAwLCAwLCAxMTIsIDExMiwgMTEyLCAwLCAxMTIsIDExMiwgMTEyLCAxMTQsIDAsIDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE3LCAxMTcsIDExNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTE2LCAyNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTEyLCAxMTIsIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAKLSAgICA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCAxMDksIDEwOSwgMTA5LCAxMTIsIDExMiwgMTEyLCAKLSAgICAxMTIsIDAsIDEwOSwgMTA5LCAxMDksIDAsIDEwOSwgMTA5LCAxMDksIDExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4LCAKLSAgICAxMTksIDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCAxMDksIDEwOSwgMCwgMCwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDU5LCAwLCAwLCAxMTIsIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDExMywgNDAsIDExMiwgMTIxLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMCwgMTIxLCAxMTIsIDExMiwgMCwgMTEyLCAxMTIsIDEwOSwgMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMTIsIDExMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDAsIDQwLCA0MCwgMTA5LCAxMDksIDAsIDAsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICAwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCA0MCwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAwLCAxMTIsIDExMiwgMTEyLCAwLCAxMTIsIDExMiwgMTEyLCAxMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDExMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCAxMDksIDEwOSwgMCwgMCwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCAKLSAgICA1OSwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMTEyLCAxMTIsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMTE0LCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgMTEyLCAxMDksIDEwOSwgMTA5LCAKLSAgICAwLCAxMDksIDAsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDEwOSwgNDAsIDQwLCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEyMiwgMTIyLCAxMTQsIDAsIDAsIDAsIDAsIDExNiwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDIsIDEwOSwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMDksIDEwOSwgMTA5LCA2MiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA2MiwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQwLCA0MCwgMCwgNDAsIDAsIDAsIDQwLCA0MCwgMCwgNDAsIDAsIDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAwLCA0MCwgMCwgMCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMTA5LCA0MCwgNDAsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTI0LCAxMjQsIDAsIAotICAgIDEwOSwgMTA5LCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MiwgMCwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKLSAgICAxMDksIDEwOSwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAKLSAgICA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA1OSwgNTksIDU5LCA2MiwgNjIsIDYyLCA2MiwgNjIsIAotICAgIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCA1OSwgNTksIDU5LCA1OSwgNTksIDY0LCA2NCwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDU5LCA2NCwgNTksIDY0LCA1OSwgCi0gICAgMTI2LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDExMiwgMTEyLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIAotICAgIDAsIDAsIDEyOSwgMTMwLCAxMDksIDEzMSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTA5LCAxMTIsIDEzMCwgMTA5LCA2MCwgNjAsIDExNCwgNjIsIDYwLCA2MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAwLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAwLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDY0LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICAwLCA1OSwgNTksIDYyLCA2MiwgNjIsIDYyLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDExMiwgMTEyLCAxMDksIDEwOSwgMTA5LCAxMDksIAotICAgIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDExMywgMTEyLCAxMTQsIDExNCwgMTEyLCAxMTIsIDEwOSwgMTA5LCA0MCwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTIsIDExMiwgMTA5LCAxMDksIDQwLCA0MCwgNDAsIDQwLCAxMDksIDEwOSwgCi0gICAgMTA5LCA0MCwgMTEyLCAxMTIsIDExMiwgNDAsIDQwLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDQwLCAKLSAgICA0MCwgNDAsIDEwOSwgMTA5LCAxMDksIDEwOSwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDEwOSwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCA2NCwgNDAsIAotICAgIDExMiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAwLCA1OSwgCi0gICAgNTksIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDYyLCAKLSAgICA0MiwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgMCwgMTMyLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAKLSAgICA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgNjAsIDU5LCA2MiwgNjIsIDYyLCA2MiwgCi0gICAgNjIsIDYyLCA2MiwgNjIsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDYyLCA2MiwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzMsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTI3LCAxMjgsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDYyLCAKLSAgICA2MiwgNjIsIDEzNCwgMTM0LCAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgMTA5LCAKLSAgICAxMDksIDExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTA5LCAxMDksIDExNCwgNjIsIDYyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMDksIDEwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDAsIDEwOSwgMTA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTM1LCAxMzUsIDExMiwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTA5LCAxMTIsIDExMiwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTE0LCAxMDksIDYyLCA2MiwgNjIsIDQyLCA2MiwgNjIsIDYyLCAKLSAgICAxMTYsIDQwLCA2MCwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDU3LCA1NywgNTcsIDU3LCA1NywgNTcsIDYzLCA1NywgNTcsIDU3LCA1NywgMTA5LCAxMDksIDEwOSwgMTMzLCAKLSAgICAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDIsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDY2LCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIDEwOSwgMTA5LCAxMTIsIDExMiwgMTEyLCAwLCAwLCAwLCAwLCAxMTIsIDExMiwgCi0gICAgMTA5LCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCA2NSwgNjAsIDY0LCAwLCAwLCAwLCAwLCAyNywgMCwgMCwgMCwgCi0gICAgNTcsIDU3LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTIsIDExMiwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAwLCA1NywgNTcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA2MCwgNjQsIDExMiwgMTEyLCAKLSAgICAxMTIsIDAsIDAsIDYyLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMTIsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTEzLCAxMTIsIDEwOSwgMTA5LCAxMDksIDEwOSwgCi0gICAgMTA5LCAxMTIsIDEwOSwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDEwOSwgMTEyLCAxMzYsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAotICAgIDYyLCA2MiwgNjIsIDYyLCA2MiwgNjIsIDYyLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNjAsIAotICAgIDY0LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMCwgMCwgCi0gICAgMCwgMTA5LCAxMDksIDExMiwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTEyLCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDExMiwgMTEyLCAxMDksIDEwOSwgMTM2LCAwLCAwLCAwLCA0MCwgNDAsIDExNSwgMTE1LCAxMTUsIAotICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDEwOSwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMTIsIDExMiwgMTA5LCAxMTMsIDAsIDAsIDAsIDYyLCA2MiwgCi0gICAgNjIsIDYyLCA2MiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAKLSAgICA0MCwgNDAsIDQwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDYyLCA2MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDIsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MiwgNDIsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCAKLSAgICA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNDIsIDQyLCA0MiwgNjAsIDYwLCAKLSAgICA2NCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDY0LCA2MCwgNjAsIDEzNywgMTM4LCA2NCwgMTM5LCA2MCwgNjAsIAotICAgIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIAotICAgIDYwLCA2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNjAsIDY0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAKLSAgICAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAwLCAzNywgMCwgMzcsIDAsIDM3LCAwLCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAKLSAgICA0MSwgNDEsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAwLCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCA0MSwgNDQsIDM0LCA0NCwgNDQsIDQ0LCAzNCwgMzQsIAotICAgIDM0LCAwLCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCA0MSwgNDQsIDQ0LCA0NCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDM0LCAKLSAgICAzNCwgMzcsIDM3LCAzNywgMzcsIDAsIDQ0LCA0NCwgNDQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCA0NCwgNDQsIDQ0LCAwLCAwLCAzNCwgMzQsIDM0LCAwLCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAKLSAgICA0MSwgNDQsIDQ0LCAwLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTM1LCAxNDAsIDE0MSwgNjMsIDYzLCAxNDEsIDE0MSwgMTQxLCAyMiwgNTcsIDE0MiwgMTQzLCAKLSAgICAxNDQsIDE0NSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAyMiwgMjIsIDIyLCA1NywgMjIsIDIyLCAyMiwgMjIsIDE0NiwgMTQ3LCAKLSAgICAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMjEsIDE1MywgODgsIDE1MywgMTUzLCA4OCwgMjIsIDU3LCA1NywgNTcsIDI5LCAKLSAgICAzNSwgMjIsIDU3LCA1NywgMjIsIDE1NCwgMTU0LCA1NywgNTcsIDU3LCAxNTUsIDEyNywgMTI4LCA1NywgNTcsIDU3LCA1NywgCi0gICAgNTcsIDU3LCA1NywgNTcsIDU3LCA1NywgNTcsIDU4LCA1NywgMTU0LCA1NywgNTcsIDU3LCA1NywgNTcsIDU3LCA1NywgNTcsIAotICAgIDU3LCA1NywgMTMzLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTU2LCAzNCwgMCwgMCwgMzMsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTcsIDE1NywgNTgsIDEyNywgCi0gICAgMTI4LCAyOCwgMTU2LCAzMywgMzMsIDMzLCAzMywgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NywgMTU3LCA1OCwgMTI3LCAKLSAgICAxMjgsIDAsIDQyLCA0MiwgNDIsIDQyLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2LCAxMTYsIAotICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTU4LCAxMTYsIDExNiwgMjMsIDExNiwgMTE2LCAxMTYsIDExNiwgCi0gICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwLCA2MCwgMTU5LCAxNTksIDYwLCA2MCwgNjAsIDYwLCAxNTksIDE1OSwgCi0gICAgMTU5LCA2MCwgNjAsIDYxLCA2MSwgNjEsIDYxLCA2MCwgNjEsIDYxLCA2MSwgMTU5LCAxNTksIDYwLCA2NCwgNjAsIDE1OSwgCi0gICAgMTU5LCA2NCwgNjQsIDY0LCA2NCwgNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAKLSAgICAyNywgMzcsIDI1LCAyNywgMjUsIDI3LCAzNywgMjcsIDI1LCAzNCwgMzcsIDM3LCAzNywgMzQsIDM0LCAzNywgMzcsIDM3LCAKLSAgICAyOCwgMjcsIDM3LCAyNSwgMjcsIDI3LCAzNywgMzcsIDM3LCAzNywgMzcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDM3LCAKLSAgICAyNywgMzgsIDI3LCAzNywgMjcsIDM3LCAzOCwgMzcsIDM3LCAxNjAsIDM0LCAzNywgMzcsIDM3LCAzNywgMzQsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAzNCwgMjcsIDI3LCAzNCwgMzQsIDM3LCAzNywgMTYxLCA1OCwgNTgsIDU4LCA1OCwgMzcsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAyNywgNTgsIDI3LCAyNywgMzQsIDU5LCAwLCAwLCAwLCAzNiwgMzYsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDM2LCAzNiwgMzYsIDM2LCAxMjAsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIAotICAgIDE2MiwgMTYyLCAxNjIsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAKLSAgICAxNjIsIDE2MiwgMTYyLCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAzNywgMzQsIDEzNCwgCi0gICAgMTM0LCAxMzQsIDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzksIDM5LCAzOSwgMzksIDM5LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDU4LCA1OCwgMjcsIDI3LCAyNywgMjcsIDU4LCAyNywgMjcsIDU4LCAyNywgMjcsIDU4LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgNTgsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1OCwgCi0gICAgNTgsIDI3LCAyNywgMzksIDI3LCAzOSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDM5LCAxNjEsIDE2MywgMTYzLCAKLSAgICAxNjEsIDU4LCA1OCwgMzksIDE2MywgMTYxLCAxNjEsIDE2MywgMTYxLCAxNjEsIDU4LCAzOSwgNTgsIDE2MywgMTU3LCAxNjQsIAotICAgIDU4LCAxNjMsIDE2MSwgNTgsIDU4LCA1OCwgMTYzLCAxNjEsIDE2MSwgMTYzLCAzOSwgMTYzLCAxNjMsIDE2MSwgMTYxLCAzOSwgCi0gICAgMTYxLCAzOSwgMTYxLCAzOSwgMzksIDM5LCAzOSwgMTYzLCAxNjMsIDE2MSwgMTYzLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMzksIDM5LCAzOSwgMzksIDU4LCAxNjEsIDU4LCAxNjEsIDE2MywgMTYzLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MywgMTYxLCAxNjEsIDE2MSwgMTYzLCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDE2MywgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjMsIDM5LCAKLSAgICAxNjEsIDU4LCAxNjMsIDE2MywgMTYzLCAxNjMsIDE2MSwgMTYxLCAxNjMsIDE2MywgNTgsIDU4LCAxNjMsIDE2MywgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYzLCAxNjMsIDE2MSwgMTYxLCAxNjMsIDE2MywgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCAKLSAgICA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDM5LCA1OCwgNTgsIDE2MSwgMzksIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDU4LCAzOSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDE2MSwgMTYzLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgNTgsIDU4LCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAxNjEsIDE2MSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE2NSwgMTY2LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDI3LCA1OCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNTksIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgCi0gICAgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgCi0gICAgMzYsIDM2LCAzNiwgMzYsIDM2LCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgCi0gICAgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIAotICAgIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAKLSAgICAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgCi0gICAgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIAotICAgIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAKLSAgICAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDEyMCwgMzYsIAotICAgIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIAotICAgIDM2LCAzNiwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI1LCAyNSwgMjcsIDI3LCAyNSwgMzksIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjUsIDM5LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI1LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIAotICAgIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIAotICAgIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIAotICAgIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjcsIDM5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNTksIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAyNywgMjcsIAotICAgIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMCwgMjcsIDI3LCAyNywgCi0gICAgMjcsIDAsIDAsIDAsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgCi0gICAgMTI4LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMzYsIDM2LCAzNiwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAotICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDI3LCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDE2MSwgNTgsIDU4LCAxNjEsIDE2MSwgMTI3LCAxMjgsIDU4LCAxNjEsIAotICAgIDE2MSwgNTgsIDAsIDE2MSwgMCwgMCwgMCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgOSwgMTAsIDksIDEwLCA5LCAxMCwgCi0gICAgOSwgMTAsIDEyNywgMTI4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTI3LCAxMjgsIDksIDEwLCAxMjcsIDEyOCwgCi0gICAgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIAotICAgIDEyNywgMTI4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgNTgsIDU4LCA1OCwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCAxNjEsIDE2MSwgCi0gICAgNTgsIDU4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgNTgsIDE2MSwgMTYxLCAxNjEsIAotICAgIDU4LCA1OCwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDEyNywgMTI4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgCi0gICAgNTgsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCA1OCwgMTYxLCA1OCwgCi0gICAgMTYxLCA1OCwgNTgsIDE2MSwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDE2MSwgCi0gICAgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgMTYxLCAxNjEsIDU4LCA1OCwgNTgsIDU4LCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDU4LCAxNjEsIDE2MSwgNTgsIDU4LCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIAotICAgIDU4LCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAotICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgNTgsIDU4LCA1OCwgNTgsIDU4LCAxNjEsIDU4LCAxNjEsIDU4LCAKLSAgICA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgNTgsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDU4LCAKLSAgICA1OCwgNTgsIDU4LCAxNjEsIDU4LCA1OCwgNTgsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCA1OCwgMTYxLCA1OCwgNTgsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDU4LCA1OCwgNTgsIDI3LCAyNywgNTgsIAotICAgIDU4LCA1OCwgNTgsIDU4LCA1OCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMCwgMzcsIDM0LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNywgMzcsIDAsIAotICAgIDM0LCAzNywgMzQsIDM0LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDQyLCAwLCAwLCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgCi0gICAgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzQsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3LCA1NywgNTcsIDU3LCAxMjAsIDU3LCA1NywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCAKLSAgICA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCAKLSAgICA2MCwgNTcsIDU3LCAyOSwgMzUsIDI5LCAzNSwgNTcsIDU3LCA1NywgMjksIDM1LCA1NywgMjksIDM1LCA1NywgNTcsIDU3LCAKLSAgICA1NywgNTcsIDU3LCA1NywgNTcsIDU3LCA2MywgNTcsIDU3LCA2MywgNTcsIDI5LCAzNSwgNTcsIDU3LCAyOSwgMzUsIDEyNywgCi0gICAgMTI4LCAxMjcsIDEyOCwgMTI3LCAxMjgsIDEyNywgMTI4LCA1NywgNTcsIDU3LCA1NywgNTcsIDQzLCA1NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDAsIDAsIDAsIDAsIDE2OSwgMTcwLCAxNzAsIDE3MCwgMTY4LCAxNzEsIDEzMiwgMTcyLCAxNjUsIDE2NiwgMTY1LCAKLSAgICAxNjYsIDE2NSwgMTY2LCAxNjUsIDE2NiwgMTY1LCAxNjYsIDE2OCwgMTY4LCAxNjUsIDE2NiwgMTY1LCAxNjYsIDE2NSwgCi0gICAgMTY2LCAxNjUsIDE2NiwgMTczLCAxNzQsIDE3NSwgMTc1LCAxNjgsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAotICAgIDE3MiwgMTcyLCAxNzIsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODAsIDE3MywgMTcxLCAxNzEsIDE3MSwgMTcxLCAKLSAgICAxNzEsIDE2OCwgMTY4LCAxNzIsIDE3MiwgMTcyLCAxNzEsIDEzMiwgMTcwLCAxNjgsIDI3LCAwLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgCi0gICAgMTgxLCAxODEsIDE4MiwgMTgyLCAxNzEsIDE3MSwgMTMyLCAxNzMsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDE3MCwgMTcxLCAxNzEsIDE3MSwgMTMyLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAxODMsIDE4MywgMTg0LCAxODQsIDE4NCwgMTg0LCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE2OCwgMTY4LCAwLCAxODQsIDE4NCwgMTg0LCAKLSAgICAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgsIDE4NSwgCi0gICAgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTgzLCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4NSwgMTg1LCAxODUsIAotICAgIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDAsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE2OCwgMTY4LCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKLSAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCi0gICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE2OCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTcxLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAwLCAwLCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKLSAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCi0gICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAotICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQyLCA1NywgNTcsIDU3LCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM3LCAzNCwgMCwgMCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgNDAsIDYwLCAKLSAgICA2MSwgNjEsIDYxLCA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAsIDYwLCA1NywgNDMsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAKLSAgICAzNywgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCi0gICAgNDMsIDQzLCA0MywgNDQsIDQ0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM0LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgCi0gICAgMzQsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCA0MiwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM3LCAzNCwgMzcsIDM0LCAzNywgMzQsIDM3LCAzNCwgMzcsIDM0LCA0MywgCi0gICAgMTg2LCAxODYsIDM3LCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDEwOSwgNDAsIDQwLCA0MCwgMTE0LCA0MCwgNDAsIDQwLCA0MCwgMTA5LCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDExMiwgMTEyLCAxMDksIDEwOSwgMTEyLCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDU3LCA1NywgNTcsIDU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIsIAotICAgIDExMiwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAotICAgIDExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjIsIDYyLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCA2NCwgNjQsIDY0LCA2MiwgNjIsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDExMiwgMTM2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMTIsIDExMiwgMTA5LCAxMDksIAotICAgIDExMiwgMTEyLCAxMDksIDEwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgMTA5LCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDEwOSwgMTEyLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKLSAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDYyLCA2MiwgNjIsIDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgODUsIDE4OSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIAotICAgIDg1LCA4NSwgODUsIDE1NywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIAotICAgIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgODUsIDAsIDg1LCA4NSwgMCwgODUsIDg1LCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIAotICAgIDg1LCA4NSwgODUsIDg1LCA4NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk1LCA5NSwgOTUsIDk1LCAxNDQsIDE5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDg5LCAyNywgCi0gICAgMCwgMCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTc0LCAxNzUsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAsIAotICAgIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTczLCAxNzMsIDE5MSwgCi0gICAgMTkxLCAxNzQsIDE3NSwgMTc0LCAxNzUsIDE3NCwgMTc1LCAxNzQsIDE3NSwgMTc0LCAxNzUsIDE3NCwgMTc1LCAxNzQsIAotICAgIDE3NSwgMTc0LCAxNzUsIDE3MCwgMTcwLCAxNzQsIDE3NSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxOTEsIDE5MSwgMTkxLCAKLSAgICAxOTIsIDE3MCwgMTkyLCAwLCAxNzAsIDE5MiwgMTcwLCAxNzAsIDE3MywgMTY1LCAxNjYsIDE2NSwgMTY2LCAxNjUsIDE2NiwgCi0gICAgMTkzLCAxNzAsIDE3MCwgMTk0LCAxOTUsIDE5NiwgMTk2LCAxOTcsIDAsIDE3MCwgMTk4LCAxOTMsIDE3MCwgMCwgMCwgMCwgCi0gICAgMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAxMDcsIDAsIAotICAgIDE5OSwgMTk5LCAyMDAsIDIwMSwgMjAwLCAxOTksIDE5OSwgMjAyLCAyMDMsIDE5OSwgMjA0LCAyMDUsIDIwNiwgMjA1LCAKLSAgICAyMDUsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA3LCAyMDcsIDIwNywgMjA1LCAxOTksIDIwOCwgCi0gICAgMjA5LCAyMDgsIDE5OSwgMTk5LCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAKLSAgICAyMTAsIDIxMCwgMjAyLCAxOTksIDIwMywgMjExLCAyMTIsIDIxMSwgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgCi0gICAgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIAotICAgIDIxMywgMjEzLCAyMTMsIDIxMywgMjEzLCAyMTMsIDIwMiwgMjA5LCAyMDMsIDIwOSwgMjAyLCAyMDMsIDIxNCwgMjE1LCAKLSAgICAyMTYsIDIxNCwgMjE0LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxOCwgCi0gICAgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAKLSAgICAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgCi0gICAgMjE3LCAyMTcsIDIxNywgMjE4LCAyMTgsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAKLSAgICAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMCwgMCwgMCwgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMCwgMCwgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIDIxNywgMCwgMCwgMjE3LCAyMTcsIDIxNywgMjE3LCAyMTcsIAotICAgIDIxNywgMCwgMCwgMjE3LCAyMTcsIDIxNywgMCwgMCwgMCwgMjAxLCAyMDEsIDIwOSwgMjExLCAyMTksIDIwMSwgMjAxLCAwLCAKLSAgICAyMjAsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIwLCAyMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMiwgCi0gICAgMjIyLCAyMjIsIDI3LCAyNSwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgNDAsIDQwLCAwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDAsIDAsIDAsIDAsIDAsIDYyLCA1NywgCi0gICAgNTksIDAsIDAsIDAsIDAsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDAsIDAsIDAsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAKLSAgICAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgCi0gICAgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIAotICAgIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMTIwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDAsIDExNywgMTE3LCAxMTcsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAxMzQsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAwLCA2MiwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCA2MiwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgCi0gICAgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCA4NSwgMCwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgCi0gICAgODUsIDg1LCA4NSwgODUsIDg1LCAwLCA4NSwgODUsIDAsIDAsIDAsIDg1LCAwLCAwLCA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMCwgMCwgMCwgMCwgMCwgNTcsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDg1LCAxMDksIDEwOSwgMTA5LCAwLCAxMDksIDEwOSwgMCwgMCwgMCwgMCwgMCwgMTA5LCA2NCwgMTA5LCA2MCwgCi0gICAgODUsIDg1LCA4NSwgODUsIDAsIDg1LCA4NSwgODUsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIAotICAgIDAsIDAsIDYwLCAxNTksIDY0LCAwLCAwLCAwLCAwLCAxMTQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgCi0gICAgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIAotICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAKLSAgICAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgCi0gICAgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIAotICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAKLSAgICAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgCi0gICAgMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MiwgNjIsIDYyLCA2MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCAKLSAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgMCwgMCwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIAotICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgMjI1LCAyMjUsIDE1OSwgMTU5LCAxNTksIDU5LCA1OSwgNTksIDIyNiwgMjI1LCAyMjUsIAotICAgIDIyNSwgMjI1LCAyMjUsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA2NCwgNjQsIDY0LCA2NCwgCi0gICAgNjQsIDY0LCA2NCwgNjQsIDU5LCA1OSwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2NCwgNjQsIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDYwLCA2MCwgNjAsIDYwLCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgCi0gICAgNTksIDU5LCA1OSwgNTksIDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA2MCwgNjAsIDYwLCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMCwgMzcsIDM3LCAwLCAwLCAzNywgMCwgMCwgMzcsIDM3LCAwLCAwLCAzNywgCi0gICAgMzcsIDM3LCAzNywgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMCwgMzQsIDAsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgCi0gICAgMzcsIDAsIDM3LCAzNywgMzcsIDM3LCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDAsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMCwgMzcsIAotICAgIDM3LCAzNywgMzcsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMCwgMzcsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIyOCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDIyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDIyNywgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIAotICAgIDM3LCAzNywgMzcsIDIyNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIyOCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCi0gICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIyOCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzcsIDM0LCAwLCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIyMCwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNSwgCisgICAgNDAsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjUsIDQwLCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgCisgICAgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIDI3LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjcsIDI1LCAyNSwgMjcsIDQwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3OSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDI1LCAwLCAwLCAwLCAwLCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAwLCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMjcsIDI1LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE2MiwgMTYzLCAKKyAgICAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIAorICAgIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAyNywgCisgICAgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAyMjUsIDc3LCA3NywgMjI1LCAyMjUsIDE2MiwgMTYzLCA3NywgMjI1LCAyMjUsIDc3LCAKKyAgICAwLCAyMjUsIDAsIDAsIDAsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIAorICAgIDIyNSwgMjI1LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAKKyAgICAxNjIsIDE2MywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAxNjIsIDE2MywgOSwgMTAsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAKKyAgICAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDc3LCA3NywgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCAKKyAgICAyMjUsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDIyNSwgMjI1LCA3NywgNzcsIDE2MiwgCisgICAgMTYzLCAxNjIsIDE2MywgMjI1LCA3NywgNzcsIDc3LCA3NywgMjI1LCA3NywgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCAyMjUsIAorICAgIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDc3LCA3NywgMTYyLCAxNjMsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDIyNSwgMjI1LCAyMTksIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCAyMjUsIDc3LCAyMjUsIAorICAgIDc3LCA3NywgMjI1LCA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNSwgMjI1LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgNzcsIDIyNSwgMjI1LCA3NywgNzcsIDIyNSwgMjE5LCAyMDksIDIwOSwgNzcsIDc3LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCAKKyAgICA3NywgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgCisgICAgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIAorICAgIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAKKyAgICAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDc3LCA3NywgNzcsIDc3LCA3NywgMjM2LCA3NywgMjI1LCA3NywgCisgICAgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCA3NywgCisgICAgNzcsIDc3LCA3NywgMjI1LCA3NywgNzcsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNSwgNzcsIDIyNSwgNzcsIDc3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyNywgMjcsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA3NywgNzcsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDQsIDQ2LCAKKyAgICA0NCwgNDQsIDQ0LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NCwgNDQsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NiwgNDQsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDM1LCA1MCwgNDQsIDQ0LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDQ0LCA0NiwgNDQsIDQ2LCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDE1MiwgMTM2LCAxMzYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDEzNiwgMTM2LCAyOSwgMzYsIDI5LCAzNiwgMTM2LCAxMzYsIDEzNiwgMjksIDM2LCAxMzYsIDI5LCAKKyAgICAzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgODMsIDEzNiwgMTM2LCA4MywgMTM2LCAKKyAgICAyOSwgMzYsIDEzNiwgMTM2LCAyOSwgMzYsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgNTEsIDEzNiwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzgsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMCwgMCwgMCwgMCwgMjM5LCAyNDAsIDI0MCwgMjQwLCAKKyAgICAyMzcsIDI0MSwgMTY5LCAyNDIsIDI0MywgMjQ0LCAyNDMsIDI0NCwgMjQzLCAyNDQsIDI0MywgMjQ0LCAyNDMsIDI0NCwgCisgICAgMjM3LCAyMzcsIDI0MywgMjQ0LCAyNDMsIDI0NCwgMjQzLCAyNDQsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDcsIAorICAgIDIzNywgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQ4LCAyNDksIDI1MCwgMjUxLCAKKyAgICAyNTIsIDI1MiwgMjQ1LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjM4LCAyMzcsIDI1MywgMjUzLCAyNTMsIDI0MSwgCisgICAgMTY5LCAyNDAsIDIzNywgMjcsIDAsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIAorICAgIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAxNjksIDI1NCwgMTY5LCAKKyAgICAyNTQsIDE2OSwgMjU0LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAyNTQsIDI1NCwgMTY5LCAyNTQsIDI1NCwgCisgICAgMTY5LCAyNTQsIDI1NCwgMTY5LCAyNTQsIDI1NCwgMTY5LCAyNTQsIDI1NCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAyNTQsIDE2OSwgMTY5LCAwLCAwLCAyNTUsIDI1NSwgMjU2LCAyNTYsIDI0MSwgMjU3LCAyNTgsIAorICAgIDI0NSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDI1NCwgMTY5LCAKKyAgICAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgCisgICAgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIDE2OSwgMjU0LCAxNjksIDE2OSwgMjU0LCAxNjksIDI1NCwgMTY5LCAyNTQsIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAKKyAgICAxNjksIDI1NCwgMjU0LCAxNjksIDI1NCwgMjU0LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDI1NCwgMTY5LCAxNjksIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjQwLCAyNDEsIDI0MSwgMjU3LCAyNTgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAKKyAgICAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgCisgICAgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIAorICAgIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAKKyAgICAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgCisgICAgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIAorICAgIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAKKyAgICAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDAsIDI1OSwgMjU5LCAyNjAsIDI2MCwgCisgICAgMjYwLCAyNjAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjM4LCAyMzgsIDAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDIzOCwgMjYzLCAyNjMsIDI2MywgCisgICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyMzgsIDIzOCwgCisgICAgMjM4LCAyNTksIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAorICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjM4LCAyMzgsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjM4LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMjQxLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMCwgMCwgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAorICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKKyAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCisgICAgMjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgODIsIDgyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MiwgMTM2LCAxMzYsIAorICAgIDEzNiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE0MiwgCisgICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgCisgICAgNDYsIDQ3LCA4MCwgODEsIDgxLCA4MSwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDEzNiwgNTEsIDQ0LCAKKyAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKKyAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDgwLCA4MCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MywgNTMsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDYsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDUwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDUxLCAyNjQsIDI2NCwgNDQsIDQ2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgNDcsIAorICAgIDQ3LCAxNDAsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCA3OSwgNzksIDE0NiwgCisgICAgMjE4LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzYsIDEzNiwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzcsIDEzNywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzcsIAorICAgIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDE0MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgyLCA4MiwgODIsIDQ3LCAwLCAwLCAwLCAKKyAgICAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgODQsIDg0LCA4NCwgODIsIDgyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIAorICAgIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAxMzMsIDEzMywgMTMzLCAxMzcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQzLCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzcsIDEzNywgMTMzLCAxMzcsIDEzNywgMTM3LCAxNzQsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgCisgICAgODIsIDgyLCA4MiwgODIsIDgyLCAwLCA1MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAwLCAwLCAwLCAwLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCAKKyAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzcsIDEzNywgMTMzLCAxMzMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDEzMywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIAorICAgIDEzNywgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCA4MiwgCisgICAgODIsIDgyLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDUyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA3OSwgNzksIDc5LCA0NywgMTM3LCAwLCAwLCAwLCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MCwgNDcsIDgwLCA4MCwgODQsIDQ3LCA0NywgODAsIAorICAgIDgwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDgwLCA4MCwgNDcsIDgwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA1MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAxMzMsIAorICAgIDEzNywgMTM3LCAxMzMsIDEzNywgMTM3LCA4MiwgMTM3LCAxNDAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKKyAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAKKyAgICAyNTQsIDI1NCwgMjU0LCAyNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDAsIDAsIDAsIDAsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAxNjksIDE2OSwgMjY3LCAxNjksIDI2NywgCisgICAgMTY5LCAxNjksIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMTY5LCAyNjcsIAorICAgIDE2OSwgMjY3LCAxNjksIDE2OSwgMjY3LCAyNjcsIDE2OSwgMTY5LCAxNjksIDI2NywgMjY3LCAyNjcsIDI2NywgMCwgMCwgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDAsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjY4LCAyNjksIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjA4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAwLCAyNjgsIDAsIDI2OCwgMjY4LCAwLCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxOTIsIDI3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAyNzIsIDI3LCAwLCAwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCAKKyAgICA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzQsIDI3NSwgCisgICAgMjczLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjczLCAyNzYsIDI3NiwgMjc3LCAyNzcsIDI3NCwgMjc1LCAyNzQsIDI3NSwgMjc0LCAyNzUsIDI3NCwgMjc1LCAKKyAgICAyNzQsIDI3NSwgMjc0LCAyNzUsIDI3NCwgMjc1LCAyNzQsIDI3NSwgMjQwLCAyNDAsIDI3NCwgMjc1LCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3NywgMjc3LCAyNzcsIDI3OCwgMjczLCAyNzgsIDAsIDI3MywgMjc4LCAyNzMsIDI3MywgMjc2LCAyNzksIAorICAgIDI4MCwgMjc5LCAyODAsIDI3OSwgMjgwLCAyODEsIDI3MywgMjczLCAyODIsIDI4MywgMjg0LCAyODQsIDI4NSwgMCwgMjczLCAKKyAgICAyODYsIDI4MSwgMjczLCAwLCAwLCAwLCAwLCAxMjgsIDEyOCwgMTI4LCAxMTUsIDEyOCwgMCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMCwgMCwgMTMxLCAwLCAyODcsIDI4NywgMjg4LCAyODksIDI4OCwgMjg3LCAKKyAgICAyODcsIDI5MCwgMjkxLCAyODcsIDI5MiwgMjkzLCAyOTQsIDI5MywgMjkzLCAyOTUsIDI5NSwgMjk1LCAyOTUsIDI5NSwgCisgICAgMjk1LCAyOTUsIDI5NSwgMjk1LCAyOTUsIDI5MywgMjg3LCAyOTYsIDI5NywgMjk2LCAyODcsIDI4NywgMjk4LCAyOTgsIAorICAgIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAKKyAgICAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5OCwgMjk4LCAyOTgsIDI5MCwgMjg3LCAyOTEsIDI5OSwgCisgICAgMzAwLCAyOTksIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIAorICAgIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAzMDEsIDMwMSwgMzAxLCAKKyAgICAyOTAsIDI5NywgMjkxLCAyOTcsIDI5MCwgMjkxLCAzMDIsIDMwMywgMzA0LCAzMDIsIDMwMiwgMzA1LCAzMDUsIDMwNSwgCisgICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDYsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAorICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKKyAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCisgICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNiwgMzA2LCAzMDUsIAorICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKKyAgICAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCisgICAgMzA1LCAzMDUsIDAsIDAsIDAsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDAsIDAsIDMwNSwgMzA1LCAzMDUsIAorICAgIDMwNSwgMzA1LCAzMDUsIDAsIDAsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDAsIDAsIDMwNSwgMzA1LCAzMDUsIAorICAgIDAsIDAsIDAsIDI4OSwgMjg5LCAyOTcsIDI5OSwgMzA3LCAyODksIDI4OSwgMCwgMzA4LCAzMDksIDMwOSwgMzA5LCAzMDksIAorICAgIDMwOCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTAsIDMxMCwgMzEwLCAyNywgMjUsIDAsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCA4MiwgMTM2LCA3OSwgMCwgMCwgMCwgMCwgMTQ3LCAxNDcsIAorICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKKyAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCisgICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIAorICAgIDE0NywgMCwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMzExLCAzMTEsIDMxMSwgMzExLCAKKyAgICAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgCisgICAgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIAorICAgIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAKKyAgICAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNTIsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDg0LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMTQ3LCAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE3MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDgyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ2LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCisgICAgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDAsIDAsIDEwNSwgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCiAgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAotICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAyNywgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMTA1LCAxMDUsIDAsIDAsIDAsIDEwNSwgMCwgMCwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDEwMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgCisgICAgMzEyLCAzMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMCwgMCwgMCwgMTM2LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgMCwgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUsIDEzMywgMTMzLCAxMzMsIDAsIDEzMywgMTMzLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzMsIDg0LCAxMzMsIDgwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDgwLCAxNzUsIAorICAgIDg0LCAwLCAwLCAwLCAwLCAxNDAsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMzEyLCAzMTIsIDEwMiwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDAsIDMxMiwgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIAorICAgIDMxMiwgMzEyLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgMTMzLCAxMzMsIAorICAgIDEzNywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM4LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzcsIDEzNywgMTQwLCAxMzksIDgyLCA4MiwgMTczLCA4MiwgODIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKKyAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKKyAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCisgICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAorICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCA4MiwgCisgICAgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDAsIDAsIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMzE0LCAzMTQsIDMxNCwgMzE0LCAzMTQsIAorICAgIDMxNCwgMzE0LCAzMTUsIDMxNSwgMTc1LCAxNzUsIDE3NSwgNzksIDc5LCA3OSwgMzE2LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAorICAgIDMxNSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKKyAgICA4NCwgNzksIDc5LCA4MCwgODAsIDgwLCA4MCwgODAsIDg0LCA4NCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgODAsIDgwLCA4MCwgODAsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDgwLCA4MCwgODAsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCisgICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCAwLCA0OCwgNDgsIDAsIDAsIDQ4LCAwLCAwLCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAwLCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE3LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMjE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE3LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMjE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMzE3LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMzE3LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE3LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjE5LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgMzUsIDAsIDAsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAKKyAgICAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgCisgICAgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIAorICAgIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCkBAIC0yMDU1LDgxICsyNDEzLDc4IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCi0gICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKLSAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMCwgMCwgMCwgMCwgMCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMzE5LCAwLCAwLCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDIzNCwgMCwgMjM0LCAwLCAwLCAyMzQsIDAsIDAsIDAsIDIzNCwgMCwgMCwgMCwgMjM0LCAyMzQsIDIzNCwgCisgICAgMjM0LCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIAorICAgIDI2MiwgMjYyLCAwLCAwLCAyNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMCwgCisgICAgMCwgMjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAKLSAgICAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgCi0gICAgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIAotICAgIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDE4OCwgMTg4LCAxODgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMCwgMCwgCiB9OwogCiAvKiBkZWNvbXBvc2l0aW9uIGRhdGEgKi8KQEAgLTIzNjYsNTUyICsyNzIxLDU1NSBAQAogICAgIDY5LCAyNjIsIDcwLCAyNjIsIDc3LCAyNjIsIDExMSwgMjU4LCAxNDg4LCAyNTgsIDE0ODksIDI1OCwgMTQ5MCwgMjU4LCAKICAgICAxNDkxLCAyNjIsIDEwNSwgNzcwLCA3MCwgNjUsIDg4LCAyNjIsIDk2MCwgMjYyLCA5NDcsIDI2MiwgOTE1LCAyNjIsIDkyOCwgCiAgICAgMjYyLCA4NzIxLCAyNjIsIDY4LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTA1LCAyNjIsIDEwNiwgNzcyLCA0OSwgCi0gICAgODI2MCwgNTEsIDc3MiwgNTAsIDgyNjAsIDUxLCA3NzIsIDQ5LCA4MjYwLCA1MywgNzcyLCA1MCwgODI2MCwgNTMsIDc3MiwgCi0gICAgNTEsIDgyNjAsIDUzLCA3NzIsIDUyLCA4MjYwLCA1MywgNzcyLCA0OSwgODI2MCwgNTQsIDc3MiwgNTMsIDgyNjAsIDU0LCAKLSAgICA3NzIsIDQ5LCA4MjYwLCA1NiwgNzcyLCA1MSwgODI2MCwgNTYsIDc3MiwgNTMsIDgyNjAsIDU2LCA3NzIsIDU1LCA4MjYwLCAKLSAgICA1NiwgNTE2LCA0OSwgODI2MCwgMjU4LCA3MywgNTE0LCA3MywgNzMsIDc3MCwgNzMsIDczLCA3MywgNTE0LCA3MywgODYsIAotICAgIDI1OCwgODYsIDUxNCwgODYsIDczLCA3NzAsIDg2LCA3MywgNzMsIDEwMjYsIDg2LCA3MywgNzMsIDczLCA1MTQsIDczLCA4OCwgCi0gICAgMjU4LCA4OCwgNTE0LCA4OCwgNzMsIDc3MCwgODgsIDczLCA3MywgMjU4LCA3NiwgMjU4LCA2NywgMjU4LCA2OCwgMjU4LCAKLSAgICA3NywgMjU4LCAxMDUsIDUxNCwgMTA1LCAxMDUsIDc3MCwgMTA1LCAxMDUsIDEwNSwgNTE0LCAxMDUsIDExOCwgMjU4LCAxMTgsIAotICAgIDUxNCwgMTE4LCAxMDUsIDc3MCwgMTE4LCAxMDUsIDEwNSwgMTAyNiwgMTE4LCAxMDUsIDEwNSwgMTA1LCA1MTQsIDEwNSwgCi0gICAgMTIwLCAyNTgsIDEyMCwgNTE0LCAxMjAsIDEwNSwgNzcwLCAxMjAsIDEwNSwgMTA1LCAyNTgsIDEwOCwgMjU4LCA5OSwgMjU4LCAKLSAgICAxMDAsIDI1OCwgMTA5LCA1MTIsIDg1OTIsIDgyNCwgNTEyLCA4NTk0LCA4MjQsIDUxMiwgODU5NiwgODI0LCA1MTIsIDg2NTYsIAotICAgIDgyNCwgNTEyLCA4NjYwLCA4MjQsIDUxMiwgODY1OCwgODI0LCA1MTIsIDg3MDcsIDgyNCwgNTEyLCA4NzEyLCA4MjQsIDUxMiwgCi0gICAgODcxNSwgODI0LCA1MTIsIDg3MzksIDgyNCwgNTEyLCA4NzQxLCA4MjQsIDUxNCwgODc0NywgODc0NywgNzcwLCA4NzQ3LCAKLSAgICA4NzQ3LCA4NzQ3LCA1MTQsIDg3NTAsIDg3NTAsIDc3MCwgODc1MCwgODc1MCwgODc1MCwgNTEyLCA4NzY0LCA4MjQsIDUxMiwgCi0gICAgODc3MSwgODI0LCA1MTIsIDg3NzMsIDgyNCwgNTEyLCA4Nzc2LCA4MjQsIDUxMiwgNjEsIDgyNCwgNTEyLCA4ODAxLCA4MjQsIAotICAgIDUxMiwgODc4MSwgODI0LCA1MTIsIDYwLCA4MjQsIDUxMiwgNjIsIDgyNCwgNTEyLCA4ODA0LCA4MjQsIDUxMiwgODgwNSwgCi0gICAgODI0LCA1MTIsIDg4MTgsIDgyNCwgNTEyLCA4ODE5LCA4MjQsIDUxMiwgODgyMiwgODI0LCA1MTIsIDg4MjMsIDgyNCwgNTEyLCAKLSAgICA4ODI2LCA4MjQsIDUxMiwgODgyNywgODI0LCA1MTIsIDg4MzQsIDgyNCwgNTEyLCA4ODM1LCA4MjQsIDUxMiwgODgzOCwgCi0gICAgODI0LCA1MTIsIDg4MzksIDgyNCwgNTEyLCA4ODY2LCA4MjQsIDUxMiwgODg3MiwgODI0LCA1MTIsIDg4NzMsIDgyNCwgNTEyLCAKLSAgICA4ODc1LCA4MjQsIDUxMiwgODgyOCwgODI0LCA1MTIsIDg4MjksIDgyNCwgNTEyLCA4ODQ5LCA4MjQsIDUxMiwgODg1MCwgCi0gICAgODI0LCA1MTIsIDg4ODIsIDgyNCwgNTEyLCA4ODgzLCA4MjQsIDUxMiwgODg4NCwgODI0LCA1MTIsIDg4ODUsIDgyNCwgMjU2LCAKLSAgICAxMjI5NiwgMjU2LCAxMjI5NywgMjYzLCA0OSwgMjYzLCA1MCwgMjYzLCA1MSwgMjYzLCA1MiwgMjYzLCA1MywgMjYzLCA1NCwgCi0gICAgMjYzLCA1NSwgMjYzLCA1NiwgMjYzLCA1NywgNTE5LCA0OSwgNDgsIDUxOSwgNDksIDQ5LCA1MTksIDQ5LCA1MCwgNTE5LCAKLSAgICA0OSwgNTEsIDUxOSwgNDksIDUyLCA1MTksIDQ5LCA1MywgNTE5LCA0OSwgNTQsIDUxOSwgNDksIDU1LCA1MTksIDQ5LCA1NiwgCi0gICAgNTE5LCA0OSwgNTcsIDUxOSwgNTAsIDQ4LCA3NzAsIDQwLCA0OSwgNDEsIDc3MCwgNDAsIDUwLCA0MSwgNzcwLCA0MCwgNTEsIAotICAgIDQxLCA3NzAsIDQwLCA1MiwgNDEsIDc3MCwgNDAsIDUzLCA0MSwgNzcwLCA0MCwgNTQsIDQxLCA3NzAsIDQwLCA1NSwgNDEsIAotICAgIDc3MCwgNDAsIDU2LCA0MSwgNzcwLCA0MCwgNTcsIDQxLCAxMDI2LCA0MCwgNDksIDQ4LCA0MSwgMTAyNiwgNDAsIDQ5LCA0OSwgCi0gICAgNDEsIDEwMjYsIDQwLCA0OSwgNTAsIDQxLCAxMDI2LCA0MCwgNDksIDUxLCA0MSwgMTAyNiwgNDAsIDQ5LCA1MiwgNDEsIAotICAgIDEwMjYsIDQwLCA0OSwgNTMsIDQxLCAxMDI2LCA0MCwgNDksIDU0LCA0MSwgMTAyNiwgNDAsIDQ5LCA1NSwgNDEsIDEwMjYsIAotICAgIDQwLCA0OSwgNTYsIDQxLCAxMDI2LCA0MCwgNDksIDU3LCA0MSwgMTAyNiwgNDAsIDUwLCA0OCwgNDEsIDUxNCwgNDksIDQ2LCAKLSAgICA1MTQsIDUwLCA0NiwgNTE0LCA1MSwgNDYsIDUxNCwgNTIsIDQ2LCA1MTQsIDUzLCA0NiwgNTE0LCA1NCwgNDYsIDUxNCwgNTUsIAotICAgIDQ2LCA1MTQsIDU2LCA0NiwgNTE0LCA1NywgNDYsIDc3MCwgNDksIDQ4LCA0NiwgNzcwLCA0OSwgNDksIDQ2LCA3NzAsIDQ5LCAKLSAgICA1MCwgNDYsIDc3MCwgNDksIDUxLCA0NiwgNzcwLCA0OSwgNTIsIDQ2LCA3NzAsIDQ5LCA1MywgNDYsIDc3MCwgNDksIDU0LCAKLSAgICA0NiwgNzcwLCA0OSwgNTUsIDQ2LCA3NzAsIDQ5LCA1NiwgNDYsIDc3MCwgNDksIDU3LCA0NiwgNzcwLCA1MCwgNDgsIDQ2LCAKLSAgICA3NzAsIDQwLCA5NywgNDEsIDc3MCwgNDAsIDk4LCA0MSwgNzcwLCA0MCwgOTksIDQxLCA3NzAsIDQwLCAxMDAsIDQxLCA3NzAsIAotICAgIDQwLCAxMDEsIDQxLCA3NzAsIDQwLCAxMDIsIDQxLCA3NzAsIDQwLCAxMDMsIDQxLCA3NzAsIDQwLCAxMDQsIDQxLCA3NzAsIAotICAgIDQwLCAxMDUsIDQxLCA3NzAsIDQwLCAxMDYsIDQxLCA3NzAsIDQwLCAxMDcsIDQxLCA3NzAsIDQwLCAxMDgsIDQxLCA3NzAsIAotICAgIDQwLCAxMDksIDQxLCA3NzAsIDQwLCAxMTAsIDQxLCA3NzAsIDQwLCAxMTEsIDQxLCA3NzAsIDQwLCAxMTIsIDQxLCA3NzAsIAotICAgIDQwLCAxMTMsIDQxLCA3NzAsIDQwLCAxMTQsIDQxLCA3NzAsIDQwLCAxMTUsIDQxLCA3NzAsIDQwLCAxMTYsIDQxLCA3NzAsIAotICAgIDQwLCAxMTcsIDQxLCA3NzAsIDQwLCAxMTgsIDQxLCA3NzAsIDQwLCAxMTksIDQxLCA3NzAsIDQwLCAxMjAsIDQxLCA3NzAsIAotICAgIDQwLCAxMjEsIDQxLCA3NzAsIDQwLCAxMjIsIDQxLCAyNjMsIDY1LCAyNjMsIDY2LCAyNjMsIDY3LCAyNjMsIDY4LCAyNjMsIAotICAgIDY5LCAyNjMsIDcwLCAyNjMsIDcxLCAyNjMsIDcyLCAyNjMsIDczLCAyNjMsIDc0LCAyNjMsIDc1LCAyNjMsIDc2LCAyNjMsIAotICAgIDc3LCAyNjMsIDc4LCAyNjMsIDc5LCAyNjMsIDgwLCAyNjMsIDgxLCAyNjMsIDgyLCAyNjMsIDgzLCAyNjMsIDg0LCAyNjMsIAotICAgIDg1LCAyNjMsIDg2LCAyNjMsIDg3LCAyNjMsIDg4LCAyNjMsIDg5LCAyNjMsIDkwLCAyNjMsIDk3LCAyNjMsIDk4LCAyNjMsIAotICAgIDk5LCAyNjMsIDEwMCwgMjYzLCAxMDEsIDI2MywgMTAyLCAyNjMsIDEwMywgMjYzLCAxMDQsIDI2MywgMTA1LCAyNjMsIDEwNiwgCi0gICAgMjYzLCAxMDcsIDI2MywgMTA4LCAyNjMsIDEwOSwgMjYzLCAxMTAsIDI2MywgMTExLCAyNjMsIDExMiwgMjYzLCAxMTMsIAotICAgIDI2MywgMTE0LCAyNjMsIDExNSwgMjYzLCAxMTYsIDI2MywgMTE3LCAyNjMsIDExOCwgMjYzLCAxMTksIDI2MywgMTIwLCAKLSAgICAyNjMsIDEyMSwgMjYzLCAxMjIsIDI2MywgNDgsIDEwMjYsIDg3NDcsIDg3NDcsIDg3NDcsIDg3NDcsIDc3MCwgNTgsIDU4LCAKLSAgICA2MSwgNTE0LCA2MSwgNjEsIDc3MCwgNjEsIDYxLCA2MSwgNTEyLCAxMDk3MywgODI0LCAyNjEsIDEwNiwgMjU5LCA4NiwgCi0gICAgMjU5LCAxMTYxNywgMjU4LCAyNzU5NywgMjU4LCA0MDg2MywgMjU4LCAxOTk2OCwgMjU4LCAyMDAwOCwgMjU4LCAyMDAyMiwgCi0gICAgMjU4LCAyMDAzMSwgMjU4LCAyMDA1NywgMjU4LCAyMDEwMSwgMjU4LCAyMDEwOCwgMjU4LCAyMDEyOCwgMjU4LCAyMDE1NCwgCi0gICAgMjU4LCAyMDc5OSwgMjU4LCAyMDgzNywgMjU4LCAyMDg0MywgMjU4LCAyMDg2NiwgMjU4LCAyMDg4NiwgMjU4LCAyMDkwNywgCi0gICAgMjU4LCAyMDk2MCwgMjU4LCAyMDk4MSwgMjU4LCAyMDk5MiwgMjU4LCAyMTE0NywgMjU4LCAyMTI0MSwgMjU4LCAyMTI2OSwgCi0gICAgMjU4LCAyMTI3NCwgMjU4LCAyMTMwNCwgMjU4LCAyMTMxMywgMjU4LCAyMTM0MCwgMjU4LCAyMTM1MywgMjU4LCAyMTM3OCwgCi0gICAgMjU4LCAyMTQzMCwgMjU4LCAyMTQ0OCwgMjU4LCAyMTQ3NSwgMjU4LCAyMjIzMSwgMjU4LCAyMjMwMywgMjU4LCAyMjc2MywgCi0gICAgMjU4LCAyMjc4NiwgMjU4LCAyMjc5NCwgMjU4LCAyMjgwNSwgMjU4LCAyMjgyMywgMjU4LCAyMjg5OSwgMjU4LCAyMzM3NiwgCi0gICAgMjU4LCAyMzQyNCwgMjU4LCAyMzU0NCwgMjU4LCAyMzU2NywgMjU4LCAyMzU4NiwgMjU4LCAyMzYwOCwgMjU4LCAyMzY2MiwgCi0gICAgMjU4LCAyMzY2NSwgMjU4LCAyNDAyNywgMjU4LCAyNDAzNywgMjU4LCAyNDA0OSwgMjU4LCAyNDA2MiwgMjU4LCAyNDE3OCwgCi0gICAgMjU4LCAyNDE4NiwgMjU4LCAyNDE5MSwgMjU4LCAyNDMwOCwgMjU4LCAyNDMxOCwgMjU4LCAyNDMzMSwgMjU4LCAyNDMzOSwgCi0gICAgMjU4LCAyNDQwMCwgMjU4LCAyNDQxNywgMjU4LCAyNDQzNSwgMjU4LCAyNDUxNSwgMjU4LCAyNTA5NiwgMjU4LCAyNTE0MiwgCi0gICAgMjU4LCAyNTE2MywgMjU4LCAyNTkwMywgMjU4LCAyNTkwOCwgMjU4LCAyNTk5MSwgMjU4LCAyNjAwNywgMjU4LCAyNjAyMCwgCi0gICAgMjU4LCAyNjA0MSwgMjU4LCAyNjA4MCwgMjU4LCAyNjA4NSwgMjU4LCAyNjM1MiwgMjU4LCAyNjM3NiwgMjU4LCAyNjQwOCwgCi0gICAgMjU4LCAyNzQyNCwgMjU4LCAyNzQ5MCwgMjU4LCAyNzUxMywgMjU4LCAyNzU3MSwgMjU4LCAyNzU5NSwgMjU4LCAyNzYwNCwgCi0gICAgMjU4LCAyNzYxMSwgMjU4LCAyNzY2MywgMjU4LCAyNzY2OCwgMjU4LCAyNzcwMCwgMjU4LCAyODc3OSwgMjU4LCAyOTIyNiwgCi0gICAgMjU4LCAyOTIzOCwgMjU4LCAyOTI0MywgMjU4LCAyOTI0NywgMjU4LCAyOTI1NSwgMjU4LCAyOTI3MywgMjU4LCAyOTI3NSwgCi0gICAgMjU4LCAyOTM1NiwgMjU4LCAyOTU3MiwgMjU4LCAyOTU3NywgMjU4LCAyOTkxNiwgMjU4LCAyOTkyNiwgMjU4LCAyOTk3NiwgCi0gICAgMjU4LCAyOTk4MywgMjU4LCAyOTk5MiwgMjU4LCAzMDAwMCwgMjU4LCAzMDA5MSwgMjU4LCAzMDA5OCwgMjU4LCAzMDMyNiwgCi0gICAgMjU4LCAzMDMzMywgMjU4LCAzMDM4MiwgMjU4LCAzMDM5OSwgMjU4LCAzMDQ0NiwgMjU4LCAzMDY4MywgMjU4LCAzMDY5MCwgCi0gICAgMjU4LCAzMDcwNywgMjU4LCAzMTAzNCwgMjU4LCAzMTE2MCwgMjU4LCAzMTE2NiwgMjU4LCAzMTM0OCwgMjU4LCAzMTQzNSwgCi0gICAgMjU4LCAzMTQ4MSwgMjU4LCAzMTg1OSwgMjU4LCAzMTk5MiwgMjU4LCAzMjU2NiwgMjU4LCAzMjU5MywgMjU4LCAzMjY1MCwgCi0gICAgMjU4LCAzMjcwMSwgMjU4LCAzMjc2OSwgMjU4LCAzMjc4MCwgMjU4LCAzMjc4NiwgMjU4LCAzMjgxOSwgMjU4LCAzMjg5NSwgCi0gICAgMjU4LCAzMjkwNSwgMjU4LCAzMzI1MSwgMjU4LCAzMzI1OCwgMjU4LCAzMzI2NywgMjU4LCAzMzI3NiwgMjU4LCAzMzI5MiwgCi0gICAgMjU4LCAzMzMwNywgMjU4LCAzMzMxMSwgMjU4LCAzMzM5MCwgMjU4LCAzMzM5NCwgMjU4LCAzMzQwMCwgMjU4LCAzNDM4MSwgCi0gICAgMjU4LCAzNDQxMSwgMjU4LCAzNDg4MCwgMjU4LCAzNDg5MiwgMjU4LCAzNDkxNSwgMjU4LCAzNTE5OCwgMjU4LCAzNTIxMSwgCi0gICAgMjU4LCAzNTI4MiwgMjU4LCAzNTMyOCwgMjU4LCAzNTg5NSwgMjU4LCAzNTkxMCwgMjU4LCAzNTkyNSwgMjU4LCAzNTk2MCwgCi0gICAgMjU4LCAzNTk5NywgMjU4LCAzNjE5NiwgMjU4LCAzNjIwOCwgMjU4LCAzNjI3NSwgMjU4LCAzNjUyMywgMjU4LCAzNjU1NCwgCi0gICAgMjU4LCAzNjc2MywgMjU4LCAzNjc4NCwgMjU4LCAzNjc4OSwgMjU4LCAzNzAwOSwgMjU4LCAzNzE5MywgMjU4LCAzNzMxOCwgCi0gICAgMjU4LCAzNzMyNCwgMjU4LCAzNzMyOSwgMjU4LCAzODI2MywgMjU4LCAzODI3MiwgMjU4LCAzODQyOCwgMjU4LCAzODU4MiwgCi0gICAgMjU4LCAzODU4NSwgMjU4LCAzODYzMiwgMjU4LCAzODczNywgMjU4LCAzODc1MCwgMjU4LCAzODc1NCwgMjU4LCAzODc2MSwgCi0gICAgMjU4LCAzODg1OSwgMjU4LCAzODg5MywgMjU4LCAzODg5OSwgMjU4LCAzODkxMywgMjU4LCAzOTA4MCwgMjU4LCAzOTEzMSwgCi0gICAgMjU4LCAzOTEzNSwgMjU4LCAzOTMxOCwgMjU4LCAzOTMyMSwgMjU4LCAzOTM0MCwgMjU4LCAzOTU5MiwgMjU4LCAzOTY0MCwgCi0gICAgMjU4LCAzOTY0NywgMjU4LCAzOTcxNywgMjU4LCAzOTcyNywgMjU4LCAzOTczMCwgMjU4LCAzOTc0MCwgMjU4LCAzOTc3MCwgCi0gICAgMjU4LCA0MDE2NSwgMjU4LCA0MDU2NSwgMjU4LCA0MDU3NSwgMjU4LCA0MDYxMywgMjU4LCA0MDYzNSwgMjU4LCA0MDY0MywgCi0gICAgMjU4LCA0MDY1MywgMjU4LCA0MDY1NywgMjU4LCA0MDY5NywgMjU4LCA0MDcwMSwgMjU4LCA0MDcxOCwgMjU4LCA0MDcyMywgCi0gICAgMjU4LCA0MDczNiwgMjU4LCA0MDc2MywgMjU4LCA0MDc3OCwgMjU4LCA0MDc4NiwgMjU4LCA0MDg0NSwgMjU4LCA0MDg2MCwgCi0gICAgMjU4LCA0MDg2NCwgMjY0LCAzMiwgMjU4LCAxMjMwNiwgMjU4LCAyMTMxMywgMjU4LCAyMTMxNiwgMjU4LCAyMTMxNywgNTEyLCAKLSAgICAxMjM2MywgMTI0NDEsIDUxMiwgMTIzNjUsIDEyNDQxLCA1MTIsIDEyMzY3LCAxMjQ0MSwgNTEyLCAxMjM2OSwgMTI0NDEsIAotICAgIDUxMiwgMTIzNzEsIDEyNDQxLCA1MTIsIDEyMzczLCAxMjQ0MSwgNTEyLCAxMjM3NSwgMTI0NDEsIDUxMiwgMTIzNzcsIAotICAgIDEyNDQxLCA1MTIsIDEyMzc5LCAxMjQ0MSwgNTEyLCAxMjM4MSwgMTI0NDEsIDUxMiwgMTIzODMsIDEyNDQxLCA1MTIsIAotICAgIDEyMzg1LCAxMjQ0MSwgNTEyLCAxMjM4OCwgMTI0NDEsIDUxMiwgMTIzOTAsIDEyNDQxLCA1MTIsIDEyMzkyLCAxMjQ0MSwgCi0gICAgNTEyLCAxMjM5OSwgMTI0NDEsIDUxMiwgMTIzOTksIDEyNDQyLCA1MTIsIDEyNDAyLCAxMjQ0MSwgNTEyLCAxMjQwMiwgCi0gICAgMTI0NDIsIDUxMiwgMTI0MDUsIDEyNDQxLCA1MTIsIDEyNDA1LCAxMjQ0MiwgNTEyLCAxMjQwOCwgMTI0NDEsIDUxMiwgCi0gICAgMTI0MDgsIDEyNDQyLCA1MTIsIDEyNDExLCAxMjQ0MSwgNTEyLCAxMjQxMSwgMTI0NDIsIDUxMiwgMTIzNTgsIDEyNDQxLCAKLSAgICA1MTQsIDMyLCAxMjQ0MSwgNTE0LCAzMiwgMTI0NDIsIDUxMiwgMTI0NDUsIDEyNDQxLCA1MjEsIDEyNDI0LCAxMjQyNiwgCi0gICAgNTEyLCAxMjQ1OSwgMTI0NDEsIDUxMiwgMTI0NjEsIDEyNDQxLCA1MTIsIDEyNDYzLCAxMjQ0MSwgNTEyLCAxMjQ2NSwgCi0gICAgMTI0NDEsIDUxMiwgMTI0NjcsIDEyNDQxLCA1MTIsIDEyNDY5LCAxMjQ0MSwgNTEyLCAxMjQ3MSwgMTI0NDEsIDUxMiwgCi0gICAgMTI0NzMsIDEyNDQxLCA1MTIsIDEyNDc1LCAxMjQ0MSwgNTEyLCAxMjQ3NywgMTI0NDEsIDUxMiwgMTI0NzksIDEyNDQxLCAKLSAgICA1MTIsIDEyNDgxLCAxMjQ0MSwgNTEyLCAxMjQ4NCwgMTI0NDEsIDUxMiwgMTI0ODYsIDEyNDQxLCA1MTIsIDEyNDg4LCAKLSAgICAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDEsIDUxMiwgMTI0OTUsIDEyNDQyLCA1MTIsIDEyNDk4LCAxMjQ0MSwgNTEyLCAKLSAgICAxMjQ5OCwgMTI0NDIsIDUxMiwgMTI1MDEsIDEyNDQxLCA1MTIsIDEyNTAxLCAxMjQ0MiwgNTEyLCAxMjUwNCwgMTI0NDEsIAotICAgIDUxMiwgMTI1MDQsIDEyNDQyLCA1MTIsIDEyNTA3LCAxMjQ0MSwgNTEyLCAxMjUwNywgMTI0NDIsIDUxMiwgMTI0NTQsIAotICAgIDEyNDQxLCA1MTIsIDEyNTI3LCAxMjQ0MSwgNTEyLCAxMjUyOCwgMTI0NDEsIDUxMiwgMTI1MjksIDEyNDQxLCA1MTIsIAotICAgIDEyNTMwLCAxMjQ0MSwgNTEyLCAxMjU0MSwgMTI0NDEsIDUyMSwgMTI0NjcsIDEyNDg4LCAyNTgsIDQzNTIsIDI1OCwgNDM1MywgCi0gICAgMjU4LCA0NTIyLCAyNTgsIDQzNTQsIDI1OCwgNDUyNCwgMjU4LCA0NTI1LCAyNTgsIDQzNTUsIDI1OCwgNDM1NiwgMjU4LCAKLSAgICA0MzU3LCAyNTgsIDQ1MjgsIDI1OCwgNDUyOSwgMjU4LCA0NTMwLCAyNTgsIDQ1MzEsIDI1OCwgNDUzMiwgMjU4LCA0NTMzLCAKLSAgICAyNTgsIDQzNzgsIDI1OCwgNDM1OCwgMjU4LCA0MzU5LCAyNTgsIDQzNjAsIDI1OCwgNDM4NSwgMjU4LCA0MzYxLCAyNTgsIAotICAgIDQzNjIsIDI1OCwgNDM2MywgMjU4LCA0MzY0LCAyNTgsIDQzNjUsIDI1OCwgNDM2NiwgMjU4LCA0MzY3LCAyNTgsIDQzNjgsIAotICAgIDI1OCwgNDM2OSwgMjU4LCA0MzcwLCAyNTgsIDQ0NDksIDI1OCwgNDQ1MCwgMjU4LCA0NDUxLCAyNTgsIDQ0NTIsIDI1OCwgCi0gICAgNDQ1MywgMjU4LCA0NDU0LCAyNTgsIDQ0NTUsIDI1OCwgNDQ1NiwgMjU4LCA0NDU3LCAyNTgsIDQ0NTgsIDI1OCwgNDQ1OSwgCi0gICAgMjU4LCA0NDYwLCAyNTgsIDQ0NjEsIDI1OCwgNDQ2MiwgMjU4LCA0NDYzLCAyNTgsIDQ0NjQsIDI1OCwgNDQ2NSwgMjU4LCAKLSAgICA0NDY2LCAyNTgsIDQ0NjcsIDI1OCwgNDQ2OCwgMjU4LCA0NDY5LCAyNTgsIDQ0NDgsIDI1OCwgNDM3MiwgMjU4LCA0MzczLCAKLSAgICAyNTgsIDQ1NTEsIDI1OCwgNDU1MiwgMjU4LCA0NTU2LCAyNTgsIDQ1NTgsIDI1OCwgNDU2MywgMjU4LCA0NTY3LCAyNTgsIAotICAgIDQ1NjksIDI1OCwgNDM4MCwgMjU4LCA0NTczLCAyNTgsIDQ1NzUsIDI1OCwgNDM4MSwgMjU4LCA0MzgyLCAyNTgsIDQzODQsIAotICAgIDI1OCwgNDM4NiwgMjU4LCA0Mzg3LCAyNTgsIDQzOTEsIDI1OCwgNDM5MywgMjU4LCA0Mzk1LCAyNTgsIDQzOTYsIDI1OCwgCi0gICAgNDM5NywgMjU4LCA0Mzk4LCAyNTgsIDQzOTksIDI1OCwgNDQwMiwgMjU4LCA0NDA2LCAyNTgsIDQ0MTYsIDI1OCwgNDQyMywgCi0gICAgMjU4LCA0NDI4LCAyNTgsIDQ1OTMsIDI1OCwgNDU5NCwgMjU4LCA0NDM5LCAyNTgsIDQ0NDAsIDI1OCwgNDQ0MSwgMjU4LCAKLSAgICA0NDg0LCAyNTgsIDQ0ODUsIDI1OCwgNDQ4OCwgMjU4LCA0NDk3LCAyNTgsIDQ0OTgsIDI1OCwgNDUwMCwgMjU4LCA0NTEwLCAKLSAgICAyNTgsIDQ1MTMsIDI1OSwgMTk5NjgsIDI1OSwgMjAxMDgsIDI1OSwgMTk5NzcsIDI1OSwgMjIyMzUsIDI1OSwgMTk5NzgsIAotICAgIDI1OSwgMjAwMTMsIDI1OSwgMTk5NzksIDI1OSwgMzAwMDIsIDI1OSwgMjAwNTcsIDI1OSwgMTk5OTMsIDI1OSwgMTk5NjksIAotICAgIDI1OSwgMjI4MjUsIDI1OSwgMjIzMjAsIDI1OSwgMjAxNTQsIDc3MCwgNDAsIDQzNTIsIDQxLCA3NzAsIDQwLCA0MzU0LCA0MSwgCi0gICAgNzcwLCA0MCwgNDM1NSwgNDEsIDc3MCwgNDAsIDQzNTcsIDQxLCA3NzAsIDQwLCA0MzU4LCA0MSwgNzcwLCA0MCwgNDM1OSwgCi0gICAgNDEsIDc3MCwgNDAsIDQzNjEsIDQxLCA3NzAsIDQwLCA0MzYzLCA0MSwgNzcwLCA0MCwgNDM2NCwgNDEsIDc3MCwgNDAsIAotICAgIDQzNjYsIDQxLCA3NzAsIDQwLCA0MzY3LCA0MSwgNzcwLCA0MCwgNDM2OCwgNDEsIDc3MCwgNDAsIDQzNjksIDQxLCA3NzAsIAotICAgIDQwLCA0MzcwLCA0MSwgMTAyNiwgNDAsIDQzNTIsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM1NCwgNDQ0OSwgNDEsIDEwMjYsIAotICAgIDQwLCA0MzU1LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNTcsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM1OCwgNDQ0OSwgNDEsIAotICAgIDEwMjYsIDQwLCA0MzU5LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjEsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2MywgNDQ0OSwgCi0gICAgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjYsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2NywgCi0gICAgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY4LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjksIDQ0NDksIDQxLCAxMDI2LCA0MCwgCi0gICAgNDM3MCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDYyLCA0MSwgMTc5NCwgNDAsIDQzNjMsIDQ0NTcsIDQzNjQsIAotICAgIDQ0NTMsIDQ1MjMsIDQxLCAxNTM4LCA0MCwgNDM2MywgNDQ1NywgNDM3MCwgNDQ2MiwgNDEsIDc3MCwgNDAsIDE5OTY4LCA0MSwgCi0gICAgNzcwLCA0MCwgMjAxMDgsIDQxLCA3NzAsIDQwLCAxOTk3NywgNDEsIDc3MCwgNDAsIDIyMjM1LCA0MSwgNzcwLCA0MCwgCi0gICAgMjAxMTYsIDQxLCA3NzAsIDQwLCAyMDg0NSwgNDEsIDc3MCwgNDAsIDE5OTcxLCA0MSwgNzcwLCA0MCwgMjA4NDMsIDQxLCAKLSAgICA3NzAsIDQwLCAyMDA2MSwgNDEsIDc3MCwgNDAsIDIxMzEzLCA0MSwgNzcwLCA0MCwgMjYzNzYsIDQxLCA3NzAsIDQwLCAKLSAgICAyODc3OSwgNDEsIDc3MCwgNDAsIDI3NzAwLCA0MSwgNzcwLCA0MCwgMjY0MDgsIDQxLCA3NzAsIDQwLCAzNzMyOSwgNDEsIAotICAgIDc3MCwgNDAsIDIyMzAzLCA0MSwgNzcwLCA0MCwgMjYwODUsIDQxLCA3NzAsIDQwLCAyNjY2NiwgNDEsIDc3MCwgNDAsIAotICAgIDI2Mzc3LCA0MSwgNzcwLCA0MCwgMzEwMzgsIDQxLCA3NzAsIDQwLCAyMTUxNywgNDEsIDc3MCwgNDAsIDI5MzA1LCA0MSwgCi0gICAgNzcwLCA0MCwgMzYwMDEsIDQxLCA3NzAsIDQwLCAzMTA2OSwgNDEsIDc3MCwgNDAsIDIxMTcyLCA0MSwgNzcwLCA0MCwgCi0gICAgMjAxOTUsIDQxLCA3NzAsIDQwLCAyMTYyOCwgNDEsIDc3MCwgNDAsIDIzMzk4LCA0MSwgNzcwLCA0MCwgMzA0MzUsIDQxLCAKLSAgICA3NzAsIDQwLCAyMDIyNSwgNDEsIDc3MCwgNDAsIDM2MDM5LCA0MSwgNzcwLCA0MCwgMjEzMzIsIDQxLCA3NzAsIDQwLCAKLSAgICAzMTA4NSwgNDEsIDc3MCwgNDAsIDIwMjQxLCA0MSwgNzcwLCA0MCwgMzMyNTgsIDQxLCA3NzAsIDQwLCAzMzI2NywgNDEsIAotICAgIDc3OCwgODAsIDg0LCA2OSwgNTE5LCA1MCwgNDksIDUxOSwgNTAsIDUwLCA1MTksIDUwLCA1MSwgNTE5LCA1MCwgNTIsIDUxOSwgCi0gICAgNTAsIDUzLCA1MTksIDUwLCA1NCwgNTE5LCA1MCwgNTUsIDUxOSwgNTAsIDU2LCA1MTksIDUwLCA1NywgNTE5LCA1MSwgNDgsIAotICAgIDUxOSwgNTEsIDQ5LCA1MTksIDUxLCA1MCwgNTE5LCA1MSwgNTEsIDUxOSwgNTEsIDUyLCA1MTksIDUxLCA1MywgMjYzLCAKLSAgICA0MzUyLCAyNjMsIDQzNTQsIDI2MywgNDM1NSwgMjYzLCA0MzU3LCAyNjMsIDQzNTgsIDI2MywgNDM1OSwgMjYzLCA0MzYxLCAKLSAgICAyNjMsIDQzNjMsIDI2MywgNDM2NCwgMjYzLCA0MzY2LCAyNjMsIDQzNjcsIDI2MywgNDM2OCwgMjYzLCA0MzY5LCAyNjMsIAotICAgIDQzNzAsIDUxOSwgNDM1MiwgNDQ0OSwgNTE5LCA0MzU0LCA0NDQ5LCA1MTksIDQzNTUsIDQ0NDksIDUxOSwgNDM1NywgNDQ0OSwgCi0gICAgNTE5LCA0MzU4LCA0NDQ5LCA1MTksIDQzNTksIDQ0NDksIDUxOSwgNDM2MSwgNDQ0OSwgNTE5LCA0MzYzLCA0NDQ5LCA1MTksIAotICAgIDQzNjQsIDQ0NDksIDUxOSwgNDM2NiwgNDQ0OSwgNTE5LCA0MzY3LCA0NDQ5LCA1MTksIDQzNjgsIDQ0NDksIDUxOSwgNDM2OSwgCi0gICAgNDQ0OSwgNTE5LCA0MzcwLCA0NDQ5LCAxMjg3LCA0MzY2LCA0NDQ5LCA0NTM1LCA0MzUyLCA0NDU3LCAxMDMxLCA0MzY0LCAKLSAgICA0NDYyLCA0MzYzLCA0NDY4LCA1MTksIDQzNjMsIDQ0NjIsIDI2MywgMTk5NjgsIDI2MywgMjAxMDgsIDI2MywgMTk5NzcsIAotICAgIDI2MywgMjIyMzUsIDI2MywgMjAxMTYsIDI2MywgMjA4NDUsIDI2MywgMTk5NzEsIDI2MywgMjA4NDMsIDI2MywgMjAwNjEsIAotICAgIDI2MywgMjEzMTMsIDI2MywgMjYzNzYsIDI2MywgMjg3NzksIDI2MywgMjc3MDAsIDI2MywgMjY0MDgsIDI2MywgMzczMjksIAotICAgIDI2MywgMjIzMDMsIDI2MywgMjYwODUsIDI2MywgMjY2NjYsIDI2MywgMjYzNzcsIDI2MywgMzEwMzgsIDI2MywgMjE1MTcsIAotICAgIDI2MywgMjkzMDUsIDI2MywgMzYwMDEsIDI2MywgMzEwNjksIDI2MywgMjExNzIsIDI2MywgMzExOTIsIDI2MywgMzAwMDcsIAotICAgIDI2MywgMjI4OTksIDI2MywgMzY5NjksIDI2MywgMjA3NzgsIDI2MywgMjEzNjAsIDI2MywgMjc4ODAsIDI2MywgMzg5MTcsIAotICAgIDI2MywgMjAyNDEsIDI2MywgMjA4ODksIDI2MywgMjc0OTEsIDI2MywgMTk5NzgsIDI2MywgMjAwMTMsIDI2MywgMTk5NzksIAotICAgIDI2MywgMjQwMzgsIDI2MywgMjE0OTEsIDI2MywgMjEzMDcsIDI2MywgMjM0NDcsIDI2MywgMjMzOTgsIDI2MywgMzA0MzUsIAotICAgIDI2MywgMjAyMjUsIDI2MywgMzYwMzksIDI2MywgMjEzMzIsIDI2MywgMjI4MTIsIDUxOSwgNTEsIDU0LCA1MTksIDUxLCA1NSwgCi0gICAgNTE5LCA1MSwgNTYsIDUxOSwgNTEsIDU3LCA1MTksIDUyLCA0OCwgNTE5LCA1MiwgNDksIDUxOSwgNTIsIDUwLCA1MTksIDUyLCAKLSAgICA1MSwgNTE5LCA1MiwgNTIsIDUxOSwgNTIsIDUzLCA1MTksIDUyLCA1NCwgNTE5LCA1MiwgNTUsIDUxOSwgNTIsIDU2LCA1MTksIAotICAgIDUyLCA1NywgNTE5LCA1MywgNDgsIDUxNCwgNDksIDI2Mzc2LCA1MTQsIDUwLCAyNjM3NiwgNTE0LCA1MSwgMjYzNzYsIDUxNCwgCi0gICAgNTIsIDI2Mzc2LCA1MTQsIDUzLCAyNjM3NiwgNTE0LCA1NCwgMjYzNzYsIDUxNCwgNTUsIDI2Mzc2LCA1MTQsIDU2LCAKLSAgICAyNjM3NiwgNTE0LCA1NywgMjYzNzYsIDc3MCwgNDksIDQ4LCAyNjM3NiwgNzcwLCA0OSwgNDksIDI2Mzc2LCA3NzAsIDQ5LCAKLSAgICA1MCwgMjYzNzYsIDUyMiwgNzIsIDEwMywgNzc4LCAxMDEsIDExNCwgMTAzLCA1MjIsIDEwMSwgODYsIDc3OCwgNzYsIDg0LCAKLSAgICA2OCwgMjYzLCAxMjQ1MCwgMjYzLCAxMjQ1MiwgMjYzLCAxMjQ1NCwgMjYzLCAxMjQ1NiwgMjYzLCAxMjQ1OCwgMjYzLCAKLSAgICAxMjQ1OSwgMjYzLCAxMjQ2MSwgMjYzLCAxMjQ2MywgMjYzLCAxMjQ2NSwgMjYzLCAxMjQ2NywgMjYzLCAxMjQ2OSwgMjYzLCAKLSAgICAxMjQ3MSwgMjYzLCAxMjQ3MywgMjYzLCAxMjQ3NSwgMjYzLCAxMjQ3NywgMjYzLCAxMjQ3OSwgMjYzLCAxMjQ4MSwgMjYzLCAKLSAgICAxMjQ4NCwgMjYzLCAxMjQ4NiwgMjYzLCAxMjQ4OCwgMjYzLCAxMjQ5MCwgMjYzLCAxMjQ5MSwgMjYzLCAxMjQ5MiwgMjYzLCAKLSAgICAxMjQ5MywgMjYzLCAxMjQ5NCwgMjYzLCAxMjQ5NSwgMjYzLCAxMjQ5OCwgMjYzLCAxMjUwMSwgMjYzLCAxMjUwNCwgMjYzLCAKLSAgICAxMjUwNywgMjYzLCAxMjUxMCwgMjYzLCAxMjUxMSwgMjYzLCAxMjUxMiwgMjYzLCAxMjUxMywgMjYzLCAxMjUxNCwgMjYzLCAKLSAgICAxMjUxNiwgMjYzLCAxMjUxOCwgMjYzLCAxMjUyMCwgMjYzLCAxMjUyMSwgMjYzLCAxMjUyMiwgMjYzLCAxMjUyMywgMjYzLCAKLSAgICAxMjUyNCwgMjYzLCAxMjUyNSwgMjYzLCAxMjUyNywgMjYzLCAxMjUyOCwgMjYzLCAxMjUyOSwgMjYzLCAxMjUzMCwgMTAzNCwgCi0gICAgMTI0NTAsIDEyNDk3LCAxMjU0MCwgMTI0ODgsIDEwMzQsIDEyNDUwLCAxMjUyMywgMTI1MDEsIDEyNDQ5LCAxMDM0LCAKLSAgICAxMjQ1MCwgMTI1MzEsIDEyNTA2LCAxMjQ1MCwgNzc4LCAxMjQ1MCwgMTI1NDAsIDEyNTIzLCAxMDM0LCAxMjQ1MiwgMTI0OTEsIAotICAgIDEyNTMxLCAxMjQ2NCwgNzc4LCAxMjQ1MiwgMTI1MzEsIDEyNDgxLCA3NzgsIDEyNDU0LCAxMjQ1NywgMTI1MzEsIDEyOTAsIAotICAgIDEyNDU2LCAxMjQ3MywgMTI0NjMsIDEyNTQwLCAxMjQ4OSwgMTAzNCwgMTI0NTYsIDEyNTQwLCAxMjQ1OSwgMTI1NDAsIDc3OCwgCi0gICAgMTI0NTgsIDEyNTMxLCAxMjQ3MywgNzc4LCAxMjQ1OCwgMTI1NDAsIDEyNTEyLCA3NzgsIDEyNDU5LCAxMjQ1MiwgMTI1MjIsIAotICAgIDEwMzQsIDEyNDU5LCAxMjUyMSwgMTI0ODMsIDEyNDg4LCAxMDM0LCAxMjQ1OSwgMTI1MjUsIDEyNTIyLCAxMjU0MCwgNzc4LCAKLSAgICAxMjQ2MCwgMTI1MjUsIDEyNTMxLCA3NzgsIDEyNDYwLCAxMjUzMSwgMTI1MTAsIDUyMiwgMTI0NjIsIDEyNDYwLCA3NzgsIAotICAgIDEyNDYyLCAxMjQ5MSwgMTI1NDAsIDEwMzQsIDEyNDYxLCAxMjUxNywgMTI1MjIsIDEyNTQwLCAxMDM0LCAxMjQ2MiwgCi0gICAgMTI1MjMsIDEyNDgwLCAxMjU0MCwgNTIyLCAxMjQ2MSwgMTI1MjUsIDEyOTAsIDEyNDYxLCAxMjUyNSwgMTI0NjQsIDEyNTIxLCAKLSAgICAxMjUxMiwgMTU0NiwgMTI0NjEsIDEyNTI1LCAxMjUxMywgMTI1NDAsIDEyNDg4LCAxMjUyMywgMTI5MCwgMTI0NjEsIAotICAgIDEyNTI1LCAxMjUyNywgMTI0ODMsIDEyNDg4LCA3NzgsIDEyNDY0LCAxMjUyMSwgMTI1MTIsIDEyOTAsIDEyNDY0LCAxMjUyMSwgCi0gICAgMTI1MTIsIDEyNDg4LCAxMjUzMSwgMTI5MCwgMTI0NjMsIDEyNTIzLCAxMjQ3NiwgMTI0NTIsIDEyNTI1LCAxMDM0LCAKLSAgICAxMjQ2MywgMTI1MjUsIDEyNTQwLCAxMjQ5MywgNzc4LCAxMjQ2NSwgMTI1NDAsIDEyNDczLCA3NzgsIDEyNDY3LCAxMjUyMywgCi0gICAgMTI0OTAsIDc3OCwgMTI0NjcsIDEyNTQwLCAxMjUwOSwgMTAzNCwgMTI0NjksIDEyNDUyLCAxMjQ2MywgMTI1MjMsIDEyOTAsIAotICAgIDEyNDY5LCAxMjUzMSwgMTI0ODEsIDEyNTQwLCAxMjUxMiwgMTAzNCwgMTI0NzEsIDEyNTIyLCAxMjUzMSwgMTI0NjQsIDc3OCwgCi0gICAgMTI0NzUsIDEyNTMxLCAxMjQ4MSwgNzc4LCAxMjQ3NSwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNDgwLCAxMjU0MCwgMTI0NzMsIAotICAgIDUyMiwgMTI0ODcsIDEyNDcxLCA1MjIsIDEyNDg5LCAxMjUyMywgNTIyLCAxMjQ4OCwgMTI1MzEsIDUyMiwgMTI0OTAsIAotICAgIDEyNDk0LCA3NzgsIDEyNDk0LCAxMjQ4MywgMTI0ODgsIDc3OCwgMTI0OTUsIDEyNDUyLCAxMjQ4NCwgMTI5MCwgMTI0OTcsIAotICAgIDEyNTQwLCAxMjQ3NSwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNDk3LCAxMjU0MCwgMTI0ODQsIDEwMzQsIDEyNDk2LCAxMjU0MCwgCi0gICAgMTI1MjQsIDEyNTIzLCAxMjkwLCAxMjUwMCwgMTI0NTAsIDEyNDczLCAxMjQ4OCwgMTI1MjMsIDc3OCwgMTI1MDAsIDEyNDYzLCAKLSAgICAxMjUyMywgNTIyLCAxMjUwMCwgMTI0NjcsIDUyMiwgMTI0OTksIDEyNTIzLCAxMjkwLCAxMjUwMSwgMTI0NDksIDEyNTIxLCAKLSAgICAxMjQ4MywgMTI0ODksIDEwMzQsIDEyNTAxLCAxMjQ1MSwgMTI1NDAsIDEyNDg4LCAxMjkwLCAxMjUwMiwgMTI0ODMsIAotICAgIDEyNDcxLCAxMjQ1NSwgMTI1MjMsIDc3OCwgMTI1MDEsIDEyNTIxLCAxMjUzMSwgMTI5MCwgMTI1MDQsIDEyNDYzLCAxMjQ3OSwgCi0gICAgMTI1NDAsIDEyNTIzLCA1MjIsIDEyNTA2LCAxMjQ3NywgNzc4LCAxMjUwNiwgMTI0OTEsIDEyNDk4LCA3NzgsIDEyNTA0LCAKLSAgICAxMjUyMywgMTI0ODQsIDc3OCwgMTI1MDYsIDEyNTMxLCAxMjQ3MywgNzc4LCAxMjUwNiwgMTI1NDAsIDEyNDcyLCA3NzgsIAotICAgIDEyNTA1LCAxMjU0MCwgMTI0NzksIDEwMzQsIDEyNTA5LCAxMjQ1MiwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNTA4LCAxMjUyMywgCi0gICAgMTI0ODgsIDUyMiwgMTI1MDcsIDEyNTMxLCA3NzgsIDEyNTA5LCAxMjUzMSwgMTI0ODksIDc3OCwgMTI1MDcsIDEyNTQwLCAKLSAgICAxMjUyMywgNzc4LCAxMjUwNywgMTI1NDAsIDEyNTMxLCAxMDM0LCAxMjUxMCwgMTI0NTIsIDEyNDYzLCAxMjUyNSwgNzc4LCAKLSAgICAxMjUxMCwgMTI0NTIsIDEyNTIzLCA3NzgsIDEyNTEwLCAxMjQ4MywgMTI0OTUsIDc3OCwgMTI1MTAsIDEyNTIzLCAxMjQ2MywgCi0gICAgMTI5MCwgMTI1MTAsIDEyNTMxLCAxMjQ3MSwgMTI1MTksIDEyNTMxLCAxMDM0LCAxMjUxMSwgMTI0NjMsIDEyNTI1LCAKLSAgICAxMjUzMSwgNTIyLCAxMjUxMSwgMTI1MjIsIDEyOTAsIDEyNTExLCAxMjUyMiwgMTI0OTYsIDEyNTQwLCAxMjUyMywgNTIyLCAKLSAgICAxMjUxMywgMTI0NjAsIDEwMzQsIDEyNTEzLCAxMjQ2MCwgMTI0ODgsIDEyNTMxLCAxMDM0LCAxMjUxMywgMTI1NDAsIAotICAgIDEyNDg4LCAxMjUyMywgNzc4LCAxMjUxNiwgMTI1NDAsIDEyNDg5LCA3NzgsIDEyNTE2LCAxMjU0MCwgMTI1MjMsIDc3OCwgCi0gICAgMTI1MTgsIDEyNDUwLCAxMjUzMSwgMTAzNCwgMTI1MjIsIDEyNDgzLCAxMjQ4OCwgMTI1MjMsIDUyMiwgMTI1MjIsIDEyNTIxLCAKLSAgICA3NzgsIDEyNTIzLCAxMjUwMCwgMTI1NDAsIDEwMzQsIDEyNTIzLCAxMjU0MCwgMTI1MDIsIDEyNTIzLCA1MjIsIDEyNTI0LCAKLSAgICAxMjUxMiwgMTI5MCwgMTI1MjQsIDEyNTMxLCAxMjQ4OCwgMTI0NjYsIDEyNTMxLCA3NzgsIDEyNTI3LCAxMjQ4MywgMTI0ODgsIAotICAgIDUxNCwgNDgsIDI4ODU3LCA1MTQsIDQ5LCAyODg1NywgNTE0LCA1MCwgMjg4NTcsIDUxNCwgNTEsIDI4ODU3LCA1MTQsIDUyLCAKLSAgICAyODg1NywgNTE0LCA1MywgMjg4NTcsIDUxNCwgNTQsIDI4ODU3LCA1MTQsIDU1LCAyODg1NywgNTE0LCA1NiwgMjg4NTcsIAotICAgIDUxNCwgNTcsIDI4ODU3LCA3NzAsIDQ5LCA0OCwgMjg4NTcsIDc3MCwgNDksIDQ5LCAyODg1NywgNzcwLCA0OSwgNTAsIAotICAgIDI4ODU3LCA3NzAsIDQ5LCA1MSwgMjg4NTcsIDc3MCwgNDksIDUyLCAyODg1NywgNzcwLCA0OSwgNTMsIDI4ODU3LCA3NzAsIAotICAgIDQ5LCA1NCwgMjg4NTcsIDc3MCwgNDksIDU1LCAyODg1NywgNzcwLCA0OSwgNTYsIDI4ODU3LCA3NzAsIDQ5LCA1NywgCi0gICAgMjg4NTcsIDc3MCwgNTAsIDQ4LCAyODg1NywgNzcwLCA1MCwgNDksIDI4ODU3LCA3NzAsIDUwLCA1MCwgMjg4NTcsIDc3MCwgCi0gICAgNTAsIDUxLCAyODg1NywgNzcwLCA1MCwgNTIsIDI4ODU3LCA3NzgsIDEwNCwgODAsIDk3LCA1MjIsIDEwMCwgOTcsIDUyMiwgCi0gICAgNjUsIDg1LCA3NzgsIDk4LCA5NywgMTE0LCA1MjIsIDExMSwgODYsIDUyMiwgMTEyLCA5OSwgNTIyLCAxMDAsIDEwOSwgNzc4LCAKLSAgICAxMDAsIDEwOSwgMTc4LCA3NzgsIDEwMCwgMTA5LCAxNzksIDUyMiwgNzMsIDg1LCA1MjIsIDI0MTc5LCAyNTEwNCwgNTIyLCAKLSAgICAyNjE1NywgMjE2NDQsIDUyMiwgMjI4MjMsIDI3NDkxLCA1MjIsIDI2MTI2LCAyNzgzNSwgMTAzNCwgMjY2NjYsIDI0MzM1LCAKLSAgICAyMDI1MCwgMzEwMzgsIDUyMiwgMTEyLCA2NSwgNTIyLCAxMTAsIDY1LCA1MjIsIDk1NiwgNjUsIDUyMiwgMTA5LCA2NSwgCi0gICAgNTIyLCAxMDcsIDY1LCA1MjIsIDc1LCA2NiwgNTIyLCA3NywgNjYsIDUyMiwgNzEsIDY2LCA3NzgsIDk5LCA5NywgMTA4LCAKLSAgICAxMDM0LCAxMDcsIDk5LCA5NywgMTA4LCA1MjIsIDExMiwgNzAsIDUyMiwgMTEwLCA3MCwgNTIyLCA5NTYsIDcwLCA1MjIsIAotICAgIDk1NiwgMTAzLCA1MjIsIDEwOSwgMTAzLCA1MjIsIDEwNywgMTAzLCA1MjIsIDcyLCAxMjIsIDc3OCwgMTA3LCA3MiwgMTIyLCAKLSAgICA3NzgsIDc3LCA3MiwgMTIyLCA3NzgsIDcxLCA3MiwgMTIyLCA3NzgsIDg0LCA3MiwgMTIyLCA1MjIsIDk1NiwgODQ2NywgCi0gICAgNTIyLCAxMDksIDg0NjcsIDUyMiwgMTAwLCA4NDY3LCA1MjIsIDEwNywgODQ2NywgNTIyLCAxMDIsIDEwOSwgNTIyLCAxMTAsIAotICAgIDEwOSwgNTIyLCA5NTYsIDEwOSwgNTIyLCAxMDksIDEwOSwgNTIyLCA5OSwgMTA5LCA1MjIsIDEwNywgMTA5LCA3NzgsIDEwOSwgCi0gICAgMTA5LCAxNzgsIDc3OCwgOTksIDEwOSwgMTc4LCA1MjIsIDEwOSwgMTc4LCA3NzgsIDEwNywgMTA5LCAxNzgsIDc3OCwgMTA5LCAKLSAgICAxMDksIDE3OSwgNzc4LCA5OSwgMTA5LCAxNzksIDUyMiwgMTA5LCAxNzksIDc3OCwgMTA3LCAxMDksIDE3OSwgNzc4LCAxMDksIAotICAgIDg3MjUsIDExNSwgMTAzNCwgMTA5LCA4NzI1LCAxMTUsIDE3OCwgNTIyLCA4MCwgOTcsIDc3OCwgMTA3LCA4MCwgOTcsIDc3OCwgCi0gICAgNzcsIDgwLCA5NywgNzc4LCA3MSwgODAsIDk3LCA3NzgsIDExNCwgOTcsIDEwMCwgMTI5MCwgMTE0LCA5NywgMTAwLCA4NzI1LCAKLSAgICAxMTUsIDE1NDYsIDExNCwgOTcsIDEwMCwgODcyNSwgMTE1LCAxNzgsIDUyMiwgMTEyLCAxMTUsIDUyMiwgMTEwLCAxMTUsIAotICAgIDUyMiwgOTU2LCAxMTUsIDUyMiwgMTA5LCAxMTUsIDUyMiwgMTEyLCA4NiwgNTIyLCAxMTAsIDg2LCA1MjIsIDk1NiwgODYsIAotICAgIDUyMiwgMTA5LCA4NiwgNTIyLCAxMDcsIDg2LCA1MjIsIDc3LCA4NiwgNTIyLCAxMTIsIDg3LCA1MjIsIDExMCwgODcsIDUyMiwgCi0gICAgOTU2LCA4NywgNTIyLCAxMDksIDg3LCA1MjIsIDEwNywgODcsIDUyMiwgNzcsIDg3LCA1MjIsIDEwNywgOTM3LCA1MjIsIDc3LCAKLSAgICA5MzcsIDEwMzQsIDk3LCA0NiwgMTA5LCA0NiwgNTIyLCA2NiwgMTEzLCA1MjIsIDk5LCA5OSwgNTIyLCA5OSwgMTAwLCAKLSAgICAxMDM0LCA2NywgODcyNSwgMTA3LCAxMDMsIDc3OCwgNjcsIDExMSwgNDYsIDUyMiwgMTAwLCA2NiwgNTIyLCA3MSwgMTIxLCAKLSAgICA1MjIsIDEwNCwgOTcsIDUyMiwgNzIsIDgwLCA1MjIsIDEwNSwgMTEwLCA1MjIsIDc1LCA3NSwgNTIyLCA3NSwgNzcsIDUyMiwgCi0gICAgMTA3LCAxMTYsIDUyMiwgMTA4LCAxMDksIDUyMiwgMTA4LCAxMTAsIDc3OCwgMTA4LCAxMTEsIDEwMywgNTIyLCAxMDgsIAotICAgIDEyMCwgNTIyLCAxMDksIDk4LCA3NzgsIDEwOSwgMTA1LCAxMDgsIDc3OCwgMTA5LCAxMTEsIDEwOCwgNTIyLCA4MCwgNzIsIAotICAgIDEwMzQsIDExMiwgNDYsIDEwOSwgNDYsIDc3OCwgODAsIDgwLCA3NywgNTIyLCA4MCwgODIsIDUyMiwgMTE1LCAxMTQsIDUyMiwgCi0gICAgODMsIDExOCwgNTIyLCA4NywgOTgsIDc3OCwgODYsIDg3MjUsIDEwOSwgNzc4LCA2NSwgODcyNSwgMTA5LCA1MTQsIDQ5LCAKLSAgICAyNjA4NSwgNTE0LCA1MCwgMjYwODUsIDUxNCwgNTEsIDI2MDg1LCA1MTQsIDUyLCAyNjA4NSwgNTE0LCA1MywgMjYwODUsIAotICAgIDUxNCwgNTQsIDI2MDg1LCA1MTQsIDU1LCAyNjA4NSwgNTE0LCA1NiwgMjYwODUsIDUxNCwgNTcsIDI2MDg1LCA3NzAsIDQ5LCAKLSAgICA0OCwgMjYwODUsIDc3MCwgNDksIDQ5LCAyNjA4NSwgNzcwLCA0OSwgNTAsIDI2MDg1LCA3NzAsIDQ5LCA1MSwgMjYwODUsIAotICAgIDc3MCwgNDksIDUyLCAyNjA4NSwgNzcwLCA0OSwgNTMsIDI2MDg1LCA3NzAsIDQ5LCA1NCwgMjYwODUsIDc3MCwgNDksIDU1LCAKLSAgICAyNjA4NSwgNzcwLCA0OSwgNTYsIDI2MDg1LCA3NzAsIDQ5LCA1NywgMjYwODUsIDc3MCwgNTAsIDQ4LCAyNjA4NSwgNzcwLCAKLSAgICA1MCwgNDksIDI2MDg1LCA3NzAsIDUwLCA1MCwgMjYwODUsIDc3MCwgNTAsIDUxLCAyNjA4NSwgNzcwLCA1MCwgNTIsIAotICAgIDI2MDg1LCA3NzAsIDUwLCA1MywgMjYwODUsIDc3MCwgNTAsIDU0LCAyNjA4NSwgNzcwLCA1MCwgNTUsIDI2MDg1LCA3NzAsIAotICAgIDUwLCA1NiwgMjYwODUsIDc3MCwgNTAsIDU3LCAyNjA4NSwgNzcwLCA1MSwgNDgsIDI2MDg1LCA3NzAsIDUxLCA0OSwgCi0gICAgMjYwODUsIDc3OCwgMTAzLCA5NywgMTA4LCAyNTksIDQyODYzLCAyNTYsIDM1OTEyLCAyNTYsIDI2MzU2LCAyNTYsIDM2NTU0LCAKLSAgICAyNTYsIDM2MDQwLCAyNTYsIDI4MzY5LCAyNTYsIDIwMDE4LCAyNTYsIDIxNDc3LCAyNTYsIDQwODYwLCAyNTYsIDQwODYwLCAKLSAgICAyNTYsIDIyODY1LCAyNTYsIDM3MzI5LCAyNTYsIDIxODk1LCAyNTYsIDIyODU2LCAyNTYsIDI1MDc4LCAyNTYsIDMwMzEzLCAKLSAgICAyNTYsIDMyNjQ1LCAyNTYsIDM0MzY3LCAyNTYsIDM0NzQ2LCAyNTYsIDM1MDY0LCAyNTYsIDM3MDA3LCAyNTYsIDI3MTM4LCAKLSAgICAyNTYsIDI3OTMxLCAyNTYsIDI4ODg5LCAyNTYsIDI5NjYyLCAyNTYsIDMzODUzLCAyNTYsIDM3MjI2LCAyNTYsIDM5NDA5LCAKLSAgICAyNTYsIDIwMDk4LCAyNTYsIDIxMzY1LCAyNTYsIDI3Mzk2LCAyNTYsIDI5MjExLCAyNTYsIDM0MzQ5LCAyNTYsIDQwNDc4LCAKLSAgICAyNTYsIDIzODg4LCAyNTYsIDI4NjUxLCAyNTYsIDM0MjUzLCAyNTYsIDM1MTcyLCAyNTYsIDI1Mjg5LCAyNTYsIDMzMjQwLCAKLSAgICAyNTYsIDM0ODQ3LCAyNTYsIDI0MjY2LCAyNTYsIDI2MzkxLCAyNTYsIDI4MDEwLCAyNTYsIDI5NDM2LCAyNTYsIDM3MDcwLCAKLSAgICAyNTYsIDIwMzU4LCAyNTYsIDIwOTE5LCAyNTYsIDIxMjE0LCAyNTYsIDI1Nzk2LCAyNTYsIDI3MzQ3LCAyNTYsIDI5MjAwLCAKLSAgICAyNTYsIDMwNDM5LCAyNTYsIDMyNzY5LCAyNTYsIDM0MzEwLCAyNTYsIDM0Mzk2LCAyNTYsIDM2MzM1LCAyNTYsIDM4NzA2LCAKLSAgICAyNTYsIDM5NzkxLCAyNTYsIDQwNDQyLCAyNTYsIDMwODYwLCAyNTYsIDMxMTAzLCAyNTYsIDMyMTYwLCAyNTYsIDMzNzM3LCAKLSAgICAyNTYsIDM3NjM2LCAyNTYsIDQwNTc1LCAyNTYsIDM1NTQyLCAyNTYsIDIyNzUxLCAyNTYsIDI0MzI0LCAyNTYsIDMxODQwLCAKLSAgICAyNTYsIDMyODk0LCAyNTYsIDI5MjgyLCAyNTYsIDMwOTIyLCAyNTYsIDM2MDM0LCAyNTYsIDM4NjQ3LCAyNTYsIDIyNzQ0LCAKLSAgICAyNTYsIDIzNjUwLCAyNTYsIDI3MTU1LCAyNTYsIDI4MTIyLCAyNTYsIDI4NDMxLCAyNTYsIDMyMDQ3LCAyNTYsIDMyMzExLCAKLSAgICAyNTYsIDM4NDc1LCAyNTYsIDIxMjAyLCAyNTYsIDMyOTA3LCAyNTYsIDIwOTU2LCAyNTYsIDIwOTQwLCAyNTYsIDMxMjYwLCAKLSAgICAyNTYsIDMyMTkwLCAyNTYsIDMzNzc3LCAyNTYsIDM4NTE3LCAyNTYsIDM1NzEyLCAyNTYsIDI1Mjk1LCAyNTYsIDI3MTM4LCAKLSAgICAyNTYsIDM1NTgyLCAyNTYsIDIwMDI1LCAyNTYsIDIzNTI3LCAyNTYsIDI0NTk0LCAyNTYsIDI5NTc1LCAyNTYsIDMwMDY0LCAKLSAgICAyNTYsIDIxMjcxLCAyNTYsIDMwOTcxLCAyNTYsIDIwNDE1LCAyNTYsIDI0NDg5LCAyNTYsIDE5OTgxLCAyNTYsIDI3ODUyLCAKLSAgICAyNTYsIDI1OTc2LCAyNTYsIDMyMDM0LCAyNTYsIDIxNDQzLCAyNTYsIDIyNjIyLCAyNTYsIDMwNDY1LCAyNTYsIDMzODY1LCAKLSAgICAyNTYsIDM1NDk4LCAyNTYsIDI3NTc4LCAyNTYsIDM2Nzg0LCAyNTYsIDI3Nzg0LCAyNTYsIDI1MzQyLCAyNTYsIDMzNTA5LCAKLSAgICAyNTYsIDI1NTA0LCAyNTYsIDMwMDUzLCAyNTYsIDIwMTQyLCAyNTYsIDIwODQxLCAyNTYsIDIwOTM3LCAyNTYsIDI2NzUzLCAKLSAgICAyNTYsIDMxOTc1LCAyNTYsIDMzMzkxLCAyNTYsIDM1NTM4LCAyNTYsIDM3MzI3LCAyNTYsIDIxMjM3LCAyNTYsIDIxNTcwLCAKLSAgICAyNTYsIDIyODk5LCAyNTYsIDI0MzAwLCAyNTYsIDI2MDUzLCAyNTYsIDI4NjcwLCAyNTYsIDMxMDE4LCAyNTYsIDM4MzE3LCAKLSAgICAyNTYsIDM5NTMwLCAyNTYsIDQwNTk5LCAyNTYsIDQwNjU0LCAyNTYsIDIxMTQ3LCAyNTYsIDI2MzEwLCAyNTYsIDI3NTExLCAKLSAgICAyNTYsIDM2NzA2LCAyNTYsIDI0MTgwLCAyNTYsIDI0OTc2LCAyNTYsIDI1MDg4LCAyNTYsIDI1NzU0LCAyNTYsIDI4NDUxLCAKLSAgICAyNTYsIDI5MDAxLCAyNTYsIDI5ODMzLCAyNTYsIDMxMTc4LCAyNTYsIDMyMjQ0LCAyNTYsIDMyODc5LCAyNTYsIDM2NjQ2LCAKLSAgICAyNTYsIDM0MDMwLCAyNTYsIDM2ODk5LCAyNTYsIDM3NzA2LCAyNTYsIDIxMDE1LCAyNTYsIDIxMTU1LCAyNTYsIDIxNjkzLCAKLSAgICAyNTYsIDI4ODcyLCAyNTYsIDM1MDEwLCAyNTYsIDM1NDk4LCAyNTYsIDI0MjY1LCAyNTYsIDI0NTY1LCAyNTYsIDI1NDY3LCAKLSAgICAyNTYsIDI3NTY2LCAyNTYsIDMxODA2LCAyNTYsIDI5NTU3LCAyNTYsIDIwMTk2LCAyNTYsIDIyMjY1LCAyNTYsIDIzNTI3LCAKLSAgICAyNTYsIDIzOTk0LCAyNTYsIDI0NjA0LCAyNTYsIDI5NjE4LCAyNTYsIDI5ODAxLCAyNTYsIDMyNjY2LCAyNTYsIDMyODM4LCAKLSAgICAyNTYsIDM3NDI4LCAyNTYsIDM4NjQ2LCAyNTYsIDM4NzI4LCAyNTYsIDM4OTM2LCAyNTYsIDIwMzYzLCAyNTYsIDMxMTUwLCAKLSAgICAyNTYsIDM3MzAwLCAyNTYsIDM4NTg0LCAyNTYsIDI0ODAxLCAyNTYsIDIwMTAyLCAyNTYsIDIwNjk4LCAyNTYsIDIzNTM0LCAKLSAgICAyNTYsIDIzNjE1LCAyNTYsIDI2MDA5LCAyNTYsIDI3MTM4LCAyNTYsIDI5MTM0LCAyNTYsIDMwMjc0LCAyNTYsIDM0MDQ0LCAKLSAgICAyNTYsIDM2OTg4LCAyNTYsIDQwODQ1LCAyNTYsIDI2MjQ4LCAyNTYsIDM4NDQ2LCAyNTYsIDIxMTI5LCAyNTYsIDI2NDkxLCAKLSAgICAyNTYsIDI2NjExLCAyNTYsIDI3OTY5LCAyNTYsIDI4MzE2LCAyNTYsIDI5NzA1LCAyNTYsIDMwMDQxLCAyNTYsIDMwODI3LCAKLSAgICAyNTYsIDMyMDE2LCAyNTYsIDM5MDA2LCAyNTYsIDIwODQ1LCAyNTYsIDI1MTM0LCAyNTYsIDM4NTIwLCAyNTYsIDIwNTIzLCAKLSAgICAyNTYsIDIzODMzLCAyNTYsIDI4MTM4LCAyNTYsIDM2NjUwLCAyNTYsIDI0NDU5LCAyNTYsIDI0OTAwLCAyNTYsIDI2NjQ3LCAKLSAgICAyNTYsIDI5NTc1LCAyNTYsIDM4NTM0LCAyNTYsIDIxMDMzLCAyNTYsIDIxNTE5LCAyNTYsIDIzNjUzLCAyNTYsIDI2MTMxLCAKLSAgICAyNTYsIDI2NDQ2LCAyNTYsIDI2NzkyLCAyNTYsIDI3ODc3LCAyNTYsIDI5NzAyLCAyNTYsIDMwMTc4LCAyNTYsIDMyNjMzLCAKLSAgICAyNTYsIDM1MDIzLCAyNTYsIDM1MDQxLCAyNTYsIDM3MzI0LCAyNTYsIDM4NjI2LCAyNTYsIDIxMzExLCAyNTYsIDI4MzQ2LCAKLSAgICAyNTYsIDIxNTMzLCAyNTYsIDI5MTM2LCAyNTYsIDI5ODQ4LCAyNTYsIDM0Mjk4LCAyNTYsIDM4NTYzLCAyNTYsIDQwMDIzLCAKLSAgICAyNTYsIDQwNjA3LCAyNTYsIDI2NTE5LCAyNTYsIDI4MTA3LCAyNTYsIDMzMjU2LCAyNTYsIDMxNDM1LCAyNTYsIDMxNTIwLCAKLSAgICAyNTYsIDMxODkwLCAyNTYsIDI5Mzc2LCAyNTYsIDI4ODI1LCAyNTYsIDM1NjcyLCAyNTYsIDIwMTYwLCAyNTYsIDMzNTkwLCAKLSAgICAyNTYsIDIxMDUwLCAyNTYsIDIwOTk5LCAyNTYsIDI0MjMwLCAyNTYsIDI1Mjk5LCAyNTYsIDMxOTU4LCAyNTYsIDIzNDI5LCAKLSAgICAyNTYsIDI3OTM0LCAyNTYsIDI2MjkyLCAyNTYsIDM2NjY3LCAyNTYsIDM0ODkyLCAyNTYsIDM4NDc3LCAyNTYsIDM1MjExLCAKLSAgICAyNTYsIDI0Mjc1LCAyNTYsIDIwODAwLCAyNTYsIDIxOTUyLCAyNTYsIDIyNjE4LCAyNTYsIDI2MjI4LCAyNTYsIDIwOTU4LCAKLSAgICAyNTYsIDI5NDgyLCAyNTYsIDMwNDEwLCAyNTYsIDMxMDM2LCAyNTYsIDMxMDcwLCAyNTYsIDMxMDc3LCAyNTYsIDMxMTE5LCAKLSAgICAyNTYsIDM4NzQyLCAyNTYsIDMxOTM0LCAyNTYsIDMyNzAxLCAyNTYsIDM0MzIyLCAyNTYsIDM1NTc2LCAyNTYsIDM2OTIwLCAKLSAgICAyNTYsIDM3MTE3LCAyNTYsIDM5MTUxLCAyNTYsIDM5MTY0LCAyNTYsIDM5MjA4LCAyNTYsIDQwMzcyLCAyNTYsIDIwMzk4LCAKLSAgICAyNTYsIDIwNzExLCAyNTYsIDIwODEzLCAyNTYsIDIxMTkzLCAyNTYsIDIxMjIwLCAyNTYsIDIxMzI5LCAyNTYsIDIxOTE3LCAKLSAgICAyNTYsIDIyMDIyLCAyNTYsIDIyMTIwLCAyNTYsIDIyNTkyLCAyNTYsIDIyNjk2LCAyNTYsIDIzNjUyLCAyNTYsIDIzNjYyLCAKLSAgICAyNTYsIDI0NzI0LCAyNTYsIDI0OTM2LCAyNTYsIDI0OTc0LCAyNTYsIDI1MDc0LCAyNTYsIDI1OTM1LCAyNTYsIDI2MDgyLCAKLSAgICAyNTYsIDI2MjU3LCAyNTYsIDI2NzU3LCAyNTYsIDI4MDIzLCAyNTYsIDI4MTg2LCAyNTYsIDI4NDUwLCAyNTYsIDI5MDM4LCAKLSAgICAyNTYsIDI5MjI3LCAyNTYsIDI5NzMwLCAyNTYsIDMwODY1LCAyNTYsIDMxMDM4LCAyNTYsIDMxMDQ5LCAyNTYsIDMxMDQ4LCAKLSAgICAyNTYsIDMxMDU2LCAyNTYsIDMxMDYyLCAyNTYsIDMxMDY5LCAyNTYsIDMxMTE3LCAyNTYsIDMxMTE4LCAyNTYsIDMxMjk2LCAKLSAgICAyNTYsIDMxMzYxLCAyNTYsIDMxNjgwLCAyNTYsIDMyMjQ0LCAyNTYsIDMyMjY1LCAyNTYsIDMyMzIxLCAyNTYsIDMyNjI2LCAKLSAgICAyNTYsIDMyNzczLCAyNTYsIDMzMjYxLCAyNTYsIDMzNDAxLCAyNTYsIDMzNDAxLCAyNTYsIDMzODc5LCAyNTYsIDM1MDg4LCAKLSAgICAyNTYsIDM1MjIyLCAyNTYsIDM1NTg1LCAyNTYsIDM1NjQxLCAyNTYsIDM2MDUxLCAyNTYsIDM2MTA0LCAyNTYsIDM2NzkwLCAKLSAgICAyNTYsIDM2OTIwLCAyNTYsIDM4NjI3LCAyNTYsIDM4OTExLCAyNTYsIDM4OTcxLCAyNTYsIDIwMDA2LCAyNTYsIDIwOTE3LCAKLSAgICAyNTYsIDIwODQwLCAyNTYsIDIwMzUyLCAyNTYsIDIwODA1LCAyNTYsIDIwODY0LCAyNTYsIDIxMTkxLCAyNTYsIDIxMjQyLCAKLSAgICAyNTYsIDIxOTE3LCAyNTYsIDIxODQ1LCAyNTYsIDIxOTEzLCAyNTYsIDIxOTg2LCAyNTYsIDIyNjE4LCAyNTYsIDIyNzA3LCAKLSAgICAyNTYsIDIyODUyLCAyNTYsIDIyODY4LCAyNTYsIDIzMTM4LCAyNTYsIDIzMzM2LCAyNTYsIDI0Mjc0LCAyNTYsIDI0MjgxLCAKLSAgICAyNTYsIDI0NDI1LCAyNTYsIDI0NDkzLCAyNTYsIDI0NzkyLCAyNTYsIDI0OTEwLCAyNTYsIDI0ODQwLCAyNTYsIDI0OTc0LCAKLSAgICAyNTYsIDI0OTI4LCAyNTYsIDI1MDc0LCAyNTYsIDI1MTQwLCAyNTYsIDI1NTQwLCAyNTYsIDI1NjI4LCAyNTYsIDI1NjgyLCAKLSAgICAyNTYsIDI1OTQyLCAyNTYsIDI2MjI4LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAyNTYsIDI2NDU0LCAyNTYsIDI3NTEzLCAKLSAgICAyNTYsIDI3NTc4LCAyNTYsIDI3OTY5LCAyNTYsIDI4Mzc5LCAyNTYsIDI4MzYzLCAyNTYsIDI4NDUwLCAyNTYsIDI4NzAyLCAKLSAgICAyNTYsIDI5MDM4LCAyNTYsIDMwNjMxLCAyNTYsIDI5MjM3LCAyNTYsIDI5MzU5LCAyNTYsIDI5NDgyLCAyNTYsIDI5ODA5LCAKLSAgICAyNTYsIDI5OTU4LCAyNTYsIDMwMDExLCAyNTYsIDMwMjM3LCAyNTYsIDMwMjM5LCAyNTYsIDMwNDEwLCAyNTYsIDMwNDI3LCAKLSAgICAyNTYsIDMwNDUyLCAyNTYsIDMwNTM4LCAyNTYsIDMwNTI4LCAyNTYsIDMwOTI0LCAyNTYsIDMxNDA5LCAyNTYsIDMxNjgwLCAKLSAgICAyNTYsIDMxODY3LCAyNTYsIDMyMDkxLCAyNTYsIDMyMjQ0LCAyNTYsIDMyNTc0LCAyNTYsIDMyNzczLCAyNTYsIDMzNjE4LCAKLSAgICAyNTYsIDMzNzc1LCAyNTYsIDM0NjgxLCAyNTYsIDM1MTM3LCAyNTYsIDM1MjA2LCAyNTYsIDM1MjIyLCAyNTYsIDM1NTE5LCAKLSAgICAyNTYsIDM1NTc2LCAyNTYsIDM1NTMxLCAyNTYsIDM1NTg1LCAyNTYsIDM1NTgyLCAyNTYsIDM1NTY1LCAyNTYsIDM1NjQxLCAKLSAgICAyNTYsIDM1NzIyLCAyNTYsIDM2MTA0LCAyNTYsIDM2NjY0LCAyNTYsIDM2OTc4LCAyNTYsIDM3MjczLCAyNTYsIDM3NDk0LCAKLSAgICAyNTYsIDM4NTI0LCAyNTYsIDM4NjI3LCAyNTYsIDM4NzQyLCAyNTYsIDM4ODc1LCAyNTYsIDM4OTExLCAyNTYsIDM4OTIzLCAKLSAgICAyNTYsIDM4OTcxLCAyNTYsIDM5Njk4LCAyNTYsIDQwODYwLCAyNTYsIDE0MTM4NiwgMjU2LCAxNDEzODAsIDI1NiwgCi0gICAgMTQ0MzQxLCAyNTYsIDE1MjYxLCAyNTYsIDE2NDA4LCAyNTYsIDE2NDQxLCAyNTYsIDE1MjEzNywgMjU2LCAxNTQ4MzIsIAotICAgIDI1NiwgMTYzNTM5LCAyNTYsIDQwNzcxLCAyNTYsIDQwODQ2LCA1MTQsIDEwMiwgMTAyLCA1MTQsIDEwMiwgMTA1LCA1MTQsIAotICAgIDEwMiwgMTA4LCA3NzAsIDEwMiwgMTAyLCAxMDUsIDc3MCwgMTAyLCAxMDIsIDEwOCwgNTE0LCAzODMsIDExNiwgNTE0LCAKLSAgICAxMTUsIDExNiwgNTE0LCAxMzk2LCAxMzk4LCA1MTQsIDEzOTYsIDEzODEsIDUxNCwgMTM5NiwgMTM4NywgNTE0LCAxNDA2LCAKLSAgICAxMzk4LCA1MTQsIDEzOTYsIDEzODksIDUxMiwgMTQ5NywgMTQ2MCwgNTEyLCAxNTIyLCAxNDYzLCAyNjIsIDE1MDYsIDI2MiwgCi0gICAgMTQ4OCwgMjYyLCAxNDkxLCAyNjIsIDE0OTIsIDI2MiwgMTQ5OSwgMjYyLCAxNTAwLCAyNjIsIDE1MDEsIDI2MiwgMTUxMiwgCi0gICAgMjYyLCAxNTE0LCAyNjIsIDQzLCA1MTIsIDE1MTMsIDE0NzMsIDUxMiwgMTUxMywgMTQ3NCwgNTEyLCA2NDMyOSwgMTQ3MywgCi0gICAgNTEyLCA2NDMyOSwgMTQ3NCwgNTEyLCAxNDg4LCAxNDYzLCA1MTIsIDE0ODgsIDE0NjQsIDUxMiwgMTQ4OCwgMTQ2OCwgNTEyLCAKLSAgICAxNDg5LCAxNDY4LCA1MTIsIDE0OTAsIDE0NjgsIDUxMiwgMTQ5MSwgMTQ2OCwgNTEyLCAxNDkyLCAxNDY4LCA1MTIsIDE0OTMsIAotICAgIDE0NjgsIDUxMiwgMTQ5NCwgMTQ2OCwgNTEyLCAxNDk2LCAxNDY4LCA1MTIsIDE0OTcsIDE0NjgsIDUxMiwgMTQ5OCwgMTQ2OCwgCi0gICAgNTEyLCAxNDk5LCAxNDY4LCA1MTIsIDE1MDAsIDE0NjgsIDUxMiwgMTUwMiwgMTQ2OCwgNTEyLCAxNTA0LCAxNDY4LCA1MTIsIAotICAgIDE1MDUsIDE0NjgsIDUxMiwgMTUwNywgMTQ2OCwgNTEyLCAxNTA4LCAxNDY4LCA1MTIsIDE1MTAsIDE0NjgsIDUxMiwgMTUxMSwgCi0gICAgMTQ2OCwgNTEyLCAxNTEyLCAxNDY4LCA1MTIsIDE1MTMsIDE0NjgsIDUxMiwgMTUxNCwgMTQ2OCwgNTEyLCAxNDkzLCAxNDY1LCAKLSAgICA1MTIsIDE0ODksIDE0NzEsIDUxMiwgMTQ5OSwgMTQ3MSwgNTEyLCAxNTA4LCAxNDcxLCA1MTQsIDE0ODgsIDE1MDAsIDI2NywgCi0gICAgMTY0OSwgMjY4LCAxNjQ5LCAyNjcsIDE2NTksIDI2OCwgMTY1OSwgMjY5LCAxNjU5LCAyNzAsIDE2NTksIDI2NywgMTY2MiwgCi0gICAgMjY4LCAxNjYyLCAyNjksIDE2NjIsIDI3MCwgMTY2MiwgMjY3LCAxNjY0LCAyNjgsIDE2NjQsIDI2OSwgMTY2NCwgMjcwLCAKLSAgICAxNjY0LCAyNjcsIDE2NTgsIDI2OCwgMTY1OCwgMjY5LCAxNjU4LCAyNzAsIDE2NTgsIDI2NywgMTY2MywgMjY4LCAxNjYzLCAKLSAgICAyNjksIDE2NjMsIDI3MCwgMTY2MywgMjY3LCAxNjU3LCAyNjgsIDE2NTcsIDI2OSwgMTY1NywgMjcwLCAxNjU3LCAyNjcsIAotICAgIDE3MDAsIDI2OCwgMTcwMCwgMjY5LCAxNzAwLCAyNzAsIDE3MDAsIDI2NywgMTcwMiwgMjY4LCAxNzAyLCAyNjksIDE3MDIsIAotICAgIDI3MCwgMTcwMiwgMjY3LCAxNjY4LCAyNjgsIDE2NjgsIDI2OSwgMTY2OCwgMjcwLCAxNjY4LCAyNjcsIDE2NjcsIDI2OCwgCi0gICAgMTY2NywgMjY5LCAxNjY3LCAyNzAsIDE2NjcsIDI2NywgMTY3MCwgMjY4LCAxNjcwLCAyNjksIDE2NzAsIDI3MCwgMTY3MCwgCi0gICAgMjY3LCAxNjcxLCAyNjgsIDE2NzEsIDI2OSwgMTY3MSwgMjcwLCAxNjcxLCAyNjcsIDE2NzcsIDI2OCwgMTY3NywgMjY3LCAKLSAgICAxNjc2LCAyNjgsIDE2NzYsIDI2NywgMTY3OCwgMjY4LCAxNjc4LCAyNjcsIDE2NzIsIDI2OCwgMTY3MiwgMjY3LCAxNjg4LCAKLSAgICAyNjgsIDE2ODgsIDI2NywgMTY4MSwgMjY4LCAxNjgxLCAyNjcsIDE3MDUsIDI2OCwgMTcwNSwgMjY5LCAxNzA1LCAyNzAsIAotICAgIDE3MDUsIDI2NywgMTcxMSwgMjY4LCAxNzExLCAyNjksIDE3MTEsIDI3MCwgMTcxMSwgMjY3LCAxNzE1LCAyNjgsIDE3MTUsIAotICAgIDI2OSwgMTcxNSwgMjcwLCAxNzE1LCAyNjcsIDE3MTMsIDI2OCwgMTcxMywgMjY5LCAxNzEzLCAyNzAsIDE3MTMsIDI2NywgCi0gICAgMTcyMiwgMjY4LCAxNzIyLCAyNjcsIDE3MjMsIDI2OCwgMTcyMywgMjY5LCAxNzIzLCAyNzAsIDE3MjMsIDI2NywgMTcyOCwgCi0gICAgMjY4LCAxNzI4LCAyNjcsIDE3MjksIDI2OCwgMTcyOSwgMjY5LCAxNzI5LCAyNzAsIDE3MjksIDI2NywgMTcyNiwgMjY4LCAKLSAgICAxNzI2LCAyNjksIDE3MjYsIDI3MCwgMTcyNiwgMjY3LCAxNzQ2LCAyNjgsIDE3NDYsIDI2NywgMTc0NywgMjY4LCAxNzQ3LCAKLSAgICAyNjcsIDE3MDksIDI2OCwgMTcwOSwgMjY5LCAxNzA5LCAyNzAsIDE3MDksIDI2NywgMTczNSwgMjY4LCAxNzM1LCAyNjcsIAotICAgIDE3MzQsIDI2OCwgMTczNCwgMjY3LCAxNzM2LCAyNjgsIDE3MzYsIDI2NywgMTY1NSwgMjY3LCAxNzM5LCAyNjgsIDE3MzksIAotICAgIDI2NywgMTczMywgMjY4LCAxNzMzLCAyNjcsIDE3MzcsIDI2OCwgMTczNywgMjY3LCAxNzQ0LCAyNjgsIDE3NDQsIDI2OSwgCi0gICAgMTc0NCwgMjcwLCAxNzQ0LCAyNjksIDE2MDksIDI3MCwgMTYwOSwgNTIzLCAxNTc0LCAxNTc1LCA1MjQsIDE1NzQsIDE1NzUsIAotICAgIDUyMywgMTU3NCwgMTc0OSwgNTI0LCAxNTc0LCAxNzQ5LCA1MjMsIDE1NzQsIDE2MDgsIDUyNCwgMTU3NCwgMTYwOCwgNTIzLCAKLSAgICAxNTc0LCAxNzM1LCA1MjQsIDE1NzQsIDE3MzUsIDUyMywgMTU3NCwgMTczNCwgNTI0LCAxNTc0LCAxNzM0LCA1MjMsIDE1NzQsIAotICAgIDE3MzYsIDUyNCwgMTU3NCwgMTczNiwgNTIzLCAxNTc0LCAxNzQ0LCA1MjQsIDE1NzQsIDE3NDQsIDUyNSwgMTU3NCwgMTc0NCwgCi0gICAgNTIzLCAxNTc0LCAxNjA5LCA1MjQsIDE1NzQsIDE2MDksIDUyNSwgMTU3NCwgMTYwOSwgMjY3LCAxNzQwLCAyNjgsIDE3NDAsIAotICAgIDI2OSwgMTc0MCwgMjcwLCAxNzQwLCA1MjMsIDE1NzQsIDE1ODAsIDUyMywgMTU3NCwgMTU4MSwgNTIzLCAxNTc0LCAxNjA1LCAKLSAgICA1MjMsIDE1NzQsIDE2MDksIDUyMywgMTU3NCwgMTYxMCwgNTIzLCAxNTc2LCAxNTgwLCA1MjMsIDE1NzYsIDE1ODEsIDUyMywgCi0gICAgMTU3NiwgMTU4MiwgNTIzLCAxNTc2LCAxNjA1LCA1MjMsIDE1NzYsIDE2MDksIDUyMywgMTU3NiwgMTYxMCwgNTIzLCAxNTc4LCAKLSAgICAxNTgwLCA1MjMsIDE1NzgsIDE1ODEsIDUyMywgMTU3OCwgMTU4MiwgNTIzLCAxNTc4LCAxNjA1LCA1MjMsIDE1NzgsIDE2MDksIAotICAgIDUyMywgMTU3OCwgMTYxMCwgNTIzLCAxNTc5LCAxNTgwLCA1MjMsIDE1NzksIDE2MDUsIDUyMywgMTU3OSwgMTYwOSwgNTIzLCAKLSAgICAxNTc5LCAxNjEwLCA1MjMsIDE1ODAsIDE1ODEsIDUyMywgMTU4MCwgMTYwNSwgNTIzLCAxNTgxLCAxNTgwLCA1MjMsIDE1ODEsIAotICAgIDE2MDUsIDUyMywgMTU4MiwgMTU4MCwgNTIzLCAxNTgyLCAxNTgxLCA1MjMsIDE1ODIsIDE2MDUsIDUyMywgMTU4NywgMTU4MCwgCi0gICAgNTIzLCAxNTg3LCAxNTgxLCA1MjMsIDE1ODcsIDE1ODIsIDUyMywgMTU4NywgMTYwNSwgNTIzLCAxNTg5LCAxNTgxLCA1MjMsIAotICAgIDE1ODksIDE2MDUsIDUyMywgMTU5MCwgMTU4MCwgNTIzLCAxNTkwLCAxNTgxLCA1MjMsIDE1OTAsIDE1ODIsIDUyMywgMTU5MCwgCi0gICAgMTYwNSwgNTIzLCAxNTkxLCAxNTgxLCA1MjMsIDE1OTEsIDE2MDUsIDUyMywgMTU5MiwgMTYwNSwgNTIzLCAxNTkzLCAxNTgwLCAKLSAgICA1MjMsIDE1OTMsIDE2MDUsIDUyMywgMTU5NCwgMTU4MCwgNTIzLCAxNTk0LCAxNjA1LCA1MjMsIDE2MDEsIDE1ODAsIDUyMywgCi0gICAgMTYwMSwgMTU4MSwgNTIzLCAxNjAxLCAxNTgyLCA1MjMsIDE2MDEsIDE2MDUsIDUyMywgMTYwMSwgMTYwOSwgNTIzLCAxNjAxLCAKLSAgICAxNjEwLCA1MjMsIDE2MDIsIDE1ODEsIDUyMywgMTYwMiwgMTYwNSwgNTIzLCAxNjAyLCAxNjA5LCA1MjMsIDE2MDIsIDE2MTAsIAotICAgIDUyMywgMTYwMywgMTU3NSwgNTIzLCAxNjAzLCAxNTgwLCA1MjMsIDE2MDMsIDE1ODEsIDUyMywgMTYwMywgMTU4MiwgNTIzLCAKLSAgICAxNjAzLCAxNjA0LCA1MjMsIDE2MDMsIDE2MDUsIDUyMywgMTYwMywgMTYwOSwgNTIzLCAxNjAzLCAxNjEwLCA1MjMsIDE2MDQsIAotICAgIDE1ODAsIDUyMywgMTYwNCwgMTU4MSwgNTIzLCAxNjA0LCAxNTgyLCA1MjMsIDE2MDQsIDE2MDUsIDUyMywgMTYwNCwgMTYwOSwgCi0gICAgNTIzLCAxNjA0LCAxNjEwLCA1MjMsIDE2MDUsIDE1ODAsIDUyMywgMTYwNSwgMTU4MSwgNTIzLCAxNjA1LCAxNTgyLCA1MjMsIAotICAgIDE2MDUsIDE2MDUsIDUyMywgMTYwNSwgMTYwOSwgNTIzLCAxNjA1LCAxNjEwLCA1MjMsIDE2MDYsIDE1ODAsIDUyMywgMTYwNiwgCi0gICAgMTU4MSwgNTIzLCAxNjA2LCAxNTgyLCA1MjMsIDE2MDYsIDE2MDUsIDUyMywgMTYwNiwgMTYwOSwgNTIzLCAxNjA2LCAxNjEwLCAKLSAgICA1MjMsIDE2MDcsIDE1ODAsIDUyMywgMTYwNywgMTYwNSwgNTIzLCAxNjA3LCAxNjA5LCA1MjMsIDE2MDcsIDE2MTAsIDUyMywgCi0gICAgMTYxMCwgMTU4MCwgNTIzLCAxNjEwLCAxNTgxLCA1MjMsIDE2MTAsIDE1ODIsIDUyMywgMTYxMCwgMTYwNSwgNTIzLCAxNjEwLCAKLSAgICAxNjA5LCA1MjMsIDE2MTAsIDE2MTAsIDUyMywgMTU4NCwgMTY0OCwgNTIzLCAxNTg1LCAxNjQ4LCA1MjMsIDE2MDksIDE2NDgsIAotICAgIDc3OSwgMzIsIDE2MTIsIDE2MTcsIDc3OSwgMzIsIDE2MTMsIDE2MTcsIDc3OSwgMzIsIDE2MTQsIDE2MTcsIDc3OSwgMzIsIAotICAgIDE2MTUsIDE2MTcsIDc3OSwgMzIsIDE2MTYsIDE2MTcsIDc3OSwgMzIsIDE2MTcsIDE2NDgsIDUyNCwgMTU3NCwgMTU4NSwgCi0gICAgNTI0LCAxNTc0LCAxNTg2LCA1MjQsIDE1NzQsIDE2MDUsIDUyNCwgMTU3NCwgMTYwNiwgNTI0LCAxNTc0LCAxNjA5LCA1MjQsIAotICAgIDE1NzQsIDE2MTAsIDUyNCwgMTU3NiwgMTU4NSwgNTI0LCAxNTc2LCAxNTg2LCA1MjQsIDE1NzYsIDE2MDUsIDUyNCwgMTU3NiwgCi0gICAgMTYwNiwgNTI0LCAxNTc2LCAxNjA5LCA1MjQsIDE1NzYsIDE2MTAsIDUyNCwgMTU3OCwgMTU4NSwgNTI0LCAxNTc4LCAxNTg2LCAKLSAgICA1MjQsIDE1NzgsIDE2MDUsIDUyNCwgMTU3OCwgMTYwNiwgNTI0LCAxNTc4LCAxNjA5LCA1MjQsIDE1NzgsIDE2MTAsIDUyNCwgCi0gICAgMTU3OSwgMTU4NSwgNTI0LCAxNTc5LCAxNTg2LCA1MjQsIDE1NzksIDE2MDUsIDUyNCwgMTU3OSwgMTYwNiwgNTI0LCAxNTc5LCAKLSAgICAxNjA5LCA1MjQsIDE1NzksIDE2MTAsIDUyNCwgMTYwMSwgMTYwOSwgNTI0LCAxNjAxLCAxNjEwLCA1MjQsIDE2MDIsIDE2MDksIAotICAgIDUyNCwgMTYwMiwgMTYxMCwgNTI0LCAxNjAzLCAxNTc1LCA1MjQsIDE2MDMsIDE2MDQsIDUyNCwgMTYwMywgMTYwNSwgNTI0LCAKLSAgICAxNjAzLCAxNjA5LCA1MjQsIDE2MDMsIDE2MTAsIDUyNCwgMTYwNCwgMTYwNSwgNTI0LCAxNjA0LCAxNjA5LCA1MjQsIDE2MDQsIAotICAgIDE2MTAsIDUyNCwgMTYwNSwgMTU3NSwgNTI0LCAxNjA1LCAxNjA1LCA1MjQsIDE2MDYsIDE1ODUsIDUyNCwgMTYwNiwgMTU4NiwgCi0gICAgNTI0LCAxNjA2LCAxNjA1LCA1MjQsIDE2MDYsIDE2MDYsIDUyNCwgMTYwNiwgMTYwOSwgNTI0LCAxNjA2LCAxNjEwLCA1MjQsIAotICAgIDE2MDksIDE2NDgsIDUyNCwgMTYxMCwgMTU4NSwgNTI0LCAxNjEwLCAxNTg2LCA1MjQsIDE2MTAsIDE2MDUsIDUyNCwgMTYxMCwgCi0gICAgMTYwNiwgNTI0LCAxNjEwLCAxNjA5LCA1MjQsIDE2MTAsIDE2MTAsIDUyNSwgMTU3NCwgMTU4MCwgNTI1LCAxNTc0LCAxNTgxLCAKLSAgICA1MjUsIDE1NzQsIDE1ODIsIDUyNSwgMTU3NCwgMTYwNSwgNTI1LCAxNTc0LCAxNjA3LCA1MjUsIDE1NzYsIDE1ODAsIDUyNSwgCi0gICAgMTU3NiwgMTU4MSwgNTI1LCAxNTc2LCAxNTgyLCA1MjUsIDE1NzYsIDE2MDUsIDUyNSwgMTU3NiwgMTYwNywgNTI1LCAxNTc4LCAKLSAgICAxNTgwLCA1MjUsIDE1NzgsIDE1ODEsIDUyNSwgMTU3OCwgMTU4MiwgNTI1LCAxNTc4LCAxNjA1LCA1MjUsIDE1NzgsIDE2MDcsIAotICAgIDUyNSwgMTU3OSwgMTYwNSwgNTI1LCAxNTgwLCAxNTgxLCA1MjUsIDE1ODAsIDE2MDUsIDUyNSwgMTU4MSwgMTU4MCwgNTI1LCAKLSAgICAxNTgxLCAxNjA1LCA1MjUsIDE1ODIsIDE1ODAsIDUyNSwgMTU4MiwgMTYwNSwgNTI1LCAxNTg3LCAxNTgwLCA1MjUsIDE1ODcsIAotICAgIDE1ODEsIDUyNSwgMTU4NywgMTU4MiwgNTI1LCAxNTg3LCAxNjA1LCA1MjUsIDE1ODksIDE1ODEsIDUyNSwgMTU4OSwgMTU4MiwgCi0gICAgNTI1LCAxNTg5LCAxNjA1LCA1MjUsIDE1OTAsIDE1ODAsIDUyNSwgMTU5MCwgMTU4MSwgNTI1LCAxNTkwLCAxNTgyLCA1MjUsIAotICAgIDE1OTAsIDE2MDUsIDUyNSwgMTU5MSwgMTU4MSwgNTI1LCAxNTkyLCAxNjA1LCA1MjUsIDE1OTMsIDE1ODAsIDUyNSwgMTU5MywgCi0gICAgMTYwNSwgNTI1LCAxNTk0LCAxNTgwLCA1MjUsIDE1OTQsIDE2MDUsIDUyNSwgMTYwMSwgMTU4MCwgNTI1LCAxNjAxLCAxNTgxLCAKLSAgICA1MjUsIDE2MDEsIDE1ODIsIDUyNSwgMTYwMSwgMTYwNSwgNTI1LCAxNjAyLCAxNTgxLCA1MjUsIDE2MDIsIDE2MDUsIDUyNSwgCi0gICAgMTYwMywgMTU4MCwgNTI1LCAxNjAzLCAxNTgxLCA1MjUsIDE2MDMsIDE1ODIsIDUyNSwgMTYwMywgMTYwNCwgNTI1LCAxNjAzLCAKLSAgICAxNjA1LCA1MjUsIDE2MDQsIDE1ODAsIDUyNSwgMTYwNCwgMTU4MSwgNTI1LCAxNjA0LCAxNTgyLCA1MjUsIDE2MDQsIDE2MDUsIAotICAgIDUyNSwgMTYwNCwgMTYwNywgNTI1LCAxNjA1LCAxNTgwLCA1MjUsIDE2MDUsIDE1ODEsIDUyNSwgMTYwNSwgMTU4MiwgNTI1LCAKLSAgICAxNjA1LCAxNjA1LCA1MjUsIDE2MDYsIDE1ODAsIDUyNSwgMTYwNiwgMTU4MSwgNTI1LCAxNjA2LCAxNTgyLCA1MjUsIDE2MDYsIAotICAgIDE2MDUsIDUyNSwgMTYwNiwgMTYwNywgNTI1LCAxNjA3LCAxNTgwLCA1MjUsIDE2MDcsIDE2MDUsIDUyNSwgMTYwNywgMTY0OCwgCi0gICAgNTI1LCAxNjEwLCAxNTgwLCA1MjUsIDE2MTAsIDE1ODEsIDUyNSwgMTYxMCwgMTU4MiwgNTI1LCAxNjEwLCAxNjA1LCA1MjUsIAotICAgIDE2MTAsIDE2MDcsIDUyNiwgMTU3NCwgMTYwNSwgNTI2LCAxNTc0LCAxNjA3LCA1MjYsIDE1NzYsIDE2MDUsIDUyNiwgMTU3NiwgCi0gICAgMTYwNywgNTI2LCAxNTc4LCAxNjA1LCA1MjYsIDE1NzgsIDE2MDcsIDUyNiwgMTU3OSwgMTYwNSwgNTI2LCAxNTc5LCAxNjA3LCAKLSAgICA1MjYsIDE1ODcsIDE2MDUsIDUyNiwgMTU4NywgMTYwNywgNTI2LCAxNTg4LCAxNjA1LCA1MjYsIDE1ODgsIDE2MDcsIDUyNiwgCi0gICAgMTYwMywgMTYwNCwgNTI2LCAxNjAzLCAxNjA1LCA1MjYsIDE2MDQsIDE2MDUsIDUyNiwgMTYwNiwgMTYwNSwgNTI2LCAxNjA2LCAKLSAgICAxNjA3LCA1MjYsIDE2MTAsIDE2MDUsIDUyNiwgMTYxMCwgMTYwNywgNzgyLCAxNjAwLCAxNjE0LCAxNjE3LCA3ODIsIDE2MDAsIAotICAgIDE2MTUsIDE2MTcsIDc4MiwgMTYwMCwgMTYxNiwgMTYxNywgNTIzLCAxNTkxLCAxNjA5LCA1MjMsIDE1OTEsIDE2MTAsIDUyMywgCi0gICAgMTU5MywgMTYwOSwgNTIzLCAxNTkzLCAxNjEwLCA1MjMsIDE1OTQsIDE2MDksIDUyMywgMTU5NCwgMTYxMCwgNTIzLCAxNTg3LCAKLSAgICAxNjA5LCA1MjMsIDE1ODcsIDE2MTAsIDUyMywgMTU4OCwgMTYwOSwgNTIzLCAxNTg4LCAxNjEwLCA1MjMsIDE1ODEsIDE2MDksIAotICAgIDUyMywgMTU4MSwgMTYxMCwgNTIzLCAxNTgwLCAxNjA5LCA1MjMsIDE1ODAsIDE2MTAsIDUyMywgMTU4MiwgMTYwOSwgNTIzLCAKLSAgICAxNTgyLCAxNjEwLCA1MjMsIDE1ODksIDE2MDksIDUyMywgMTU4OSwgMTYxMCwgNTIzLCAxNTkwLCAxNjA5LCA1MjMsIDE1OTAsIAotICAgIDE2MTAsIDUyMywgMTU4OCwgMTU4MCwgNTIzLCAxNTg4LCAxNTgxLCA1MjMsIDE1ODgsIDE1ODIsIDUyMywgMTU4OCwgMTYwNSwgCi0gICAgNTIzLCAxNTg4LCAxNTg1LCA1MjMsIDE1ODcsIDE1ODUsIDUyMywgMTU4OSwgMTU4NSwgNTIzLCAxNTkwLCAxNTg1LCA1MjQsIAotICAgIDE1OTEsIDE2MDksIDUyNCwgMTU5MSwgMTYxMCwgNTI0LCAxNTkzLCAxNjA5LCA1MjQsIDE1OTMsIDE2MTAsIDUyNCwgMTU5NCwgCi0gICAgMTYwOSwgNTI0LCAxNTk0LCAxNjEwLCA1MjQsIDE1ODcsIDE2MDksIDUyNCwgMTU4NywgMTYxMCwgNTI0LCAxNTg4LCAxNjA5LCAKLSAgICA1MjQsIDE1ODgsIDE2MTAsIDUyNCwgMTU4MSwgMTYwOSwgNTI0LCAxNTgxLCAxNjEwLCA1MjQsIDE1ODAsIDE2MDksIDUyNCwgCi0gICAgMTU4MCwgMTYxMCwgNTI0LCAxNTgyLCAxNjA5LCA1MjQsIDE1ODIsIDE2MTAsIDUyNCwgMTU4OSwgMTYwOSwgNTI0LCAxNTg5LCAKLSAgICAxNjEwLCA1MjQsIDE1OTAsIDE2MDksIDUyNCwgMTU5MCwgMTYxMCwgNTI0LCAxNTg4LCAxNTgwLCA1MjQsIDE1ODgsIDE1ODEsIAotICAgIDUyNCwgMTU4OCwgMTU4MiwgNTI0LCAxNTg4LCAxNjA1LCA1MjQsIDE1ODgsIDE1ODUsIDUyNCwgMTU4NywgMTU4NSwgNTI0LCAKLSAgICAxNTg5LCAxNTg1LCA1MjQsIDE1OTAsIDE1ODUsIDUyNSwgMTU4OCwgMTU4MCwgNTI1LCAxNTg4LCAxNTgxLCA1MjUsIDE1ODgsIAotICAgIDE1ODIsIDUyNSwgMTU4OCwgMTYwNSwgNTI1LCAxNTg3LCAxNjA3LCA1MjUsIDE1ODgsIDE2MDcsIDUyNSwgMTU5MSwgMTYwNSwgCi0gICAgNTI2LCAxNTg3LCAxNTgwLCA1MjYsIDE1ODcsIDE1ODEsIDUyNiwgMTU4NywgMTU4MiwgNTI2LCAxNTg4LCAxNTgwLCA1MjYsIAotICAgIDE1ODgsIDE1ODEsIDUyNiwgMTU4OCwgMTU4MiwgNTI2LCAxNTkxLCAxNjA1LCA1MjYsIDE1OTIsIDE2MDUsIDUyNCwgMTU3NSwgCi0gICAgMTYxMSwgNTIzLCAxNTc1LCAxNjExLCA3ODEsIDE1NzgsIDE1ODAsIDE2MDUsIDc4MCwgMTU3OCwgMTU4MSwgMTU4MCwgNzgxLCAKLSAgICAxNTc4LCAxNTgxLCAxNTgwLCA3ODEsIDE1NzgsIDE1ODEsIDE2MDUsIDc4MSwgMTU3OCwgMTU4MiwgMTYwNSwgNzgxLCAKLSAgICAxNTc4LCAxNjA1LCAxNTgwLCA3ODEsIDE1NzgsIDE2MDUsIDE1ODEsIDc4MSwgMTU3OCwgMTYwNSwgMTU4MiwgNzgwLCAKLSAgICAxNTgwLCAxNjA1LCAxNTgxLCA3ODEsIDE1ODAsIDE2MDUsIDE1ODEsIDc4MCwgMTU4MSwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNTgxLCAxNjA1LCAxNjA5LCA3ODEsIDE1ODcsIDE1ODEsIDE1ODAsIDc4MSwgMTU4NywgMTU4MCwgMTU4MSwgNzgwLCAKLSAgICAxNTg3LCAxNTgwLCAxNjA5LCA3ODAsIDE1ODcsIDE2MDUsIDE1ODEsIDc4MSwgMTU4NywgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNTg3LCAxNjA1LCAxNTgwLCA3ODAsIDE1ODcsIDE2MDUsIDE2MDUsIDc4MSwgMTU4NywgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg5LCAxNTgxLCAxNTgxLCA3ODEsIDE1ODksIDE1ODEsIDE1ODEsIDc4MCwgMTU4OSwgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg4LCAxNTgxLCAxNjA1LCA3ODEsIDE1ODgsIDE1ODEsIDE2MDUsIDc4MCwgMTU4OCwgMTU4MCwgMTYxMCwgNzgwLCAKLSAgICAxNTg4LCAxNjA1LCAxNTgyLCA3ODEsIDE1ODgsIDE2MDUsIDE1ODIsIDc4MCwgMTU4OCwgMTYwNSwgMTYwNSwgNzgxLCAKLSAgICAxNTg4LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTAsIDE1ODEsIDE2MDksIDc4MCwgMTU5MCwgMTU4MiwgMTYwNSwgNzgxLCAKLSAgICAxNTkwLCAxNTgyLCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE1ODEsIDc4MSwgMTU5MSwgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNTkxLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE2MTAsIDc4MCwgMTU5MywgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNTkzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE2MDUsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTk0LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTQsIDE2MDUsIDE2MTAsIDc4MCwgMTU5NCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNjAxLCAxNTgyLCAxNjA1LCA3ODEsIDE2MDEsIDE1ODIsIDE2MDUsIDc4MCwgMTYwMiwgMTYwNSwgMTU4MSwgNzgwLCAKLSAgICAxNjAyLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MSwgMTYxMCwgNzgwLCAKLSAgICAxNjA0LCAxNTgxLCAxNjA5LCA3ODEsIDE2MDQsIDE1ODAsIDE1ODAsIDc4MCwgMTYwNCwgMTU4MCwgMTU4MCwgNzgwLCAKLSAgICAxNjA0LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDQsIDE1ODIsIDE2MDUsIDc4MCwgMTYwNCwgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNjA0LCAxNjA1LCAxNTgxLCA3ODEsIDE2MDUsIDE1ODEsIDE1ODAsIDc4MSwgMTYwNSwgMTU4MSwgMTYwNSwgNzgwLCAKLSAgICAxNjA1LCAxNTgxLCAxNjEwLCA3ODEsIDE2MDUsIDE1ODAsIDE1ODEsIDc4MSwgMTYwNSwgMTU4MCwgMTYwNSwgNzgxLCAKLSAgICAxNjA1LCAxNTgyLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODIsIDE2MDUsIDc4MSwgMTYwNSwgMTU4MCwgMTU4MiwgNzgxLCAKLSAgICAxNjA3LCAxNjA1LCAxNTgwLCA3ODEsIDE2MDcsIDE2MDUsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MSwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgxLCAxNjA5LCA3ODAsIDE2MDYsIDE1ODAsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgwLCAxNjA5LCA3ODAsIDE2MDYsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNjEwLCAxNjA1LCAxNjA1LCA3ODEsIDE2MTAsIDE2MDUsIDE2MDUsIDc4MCwgMTU3NiwgMTU4MiwgMTYxMCwgNzgwLCAKLSAgICAxNTc4LCAxNTgwLCAxNjEwLCA3ODAsIDE1NzgsIDE1ODAsIDE2MDksIDc4MCwgMTU3OCwgMTU4MiwgMTYxMCwgNzgwLCAKLSAgICAxNTc4LCAxNTgyLCAxNjA5LCA3ODAsIDE1NzgsIDE2MDUsIDE2MTAsIDc4MCwgMTU3OCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTgwLCAxNjA1LCAxNjEwLCA3ODAsIDE1ODAsIDE1ODEsIDE2MDksIDc4MCwgMTU4MCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTg3LCAxNTgyLCAxNjA5LCA3ODAsIDE1ODksIDE1ODEsIDE2MTAsIDc4MCwgMTU4OCwgMTU4MSwgMTYxMCwgNzgwLCAKLSAgICAxNTkwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MDQsIDE1ODAsIDE2MTAsIDc4MCwgMTYwNCwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjEwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MTAsIDE1ODAsIDE2MTAsIDc4MCwgMTYxMCwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjA1LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDIsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTU4MSwgMTYxMCwgNzgxLCAKLSAgICAxNjAyLCAxNjA1LCAxNTgxLCA3ODEsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjAzLCAxNjA1LCAxNjEwLCA3ODEsIDE2MDYsIDE1ODAsIDE1ODEsIDc4MCwgMTYwNSwgMTU4MiwgMTYxMCwgNzgxLCAKLSAgICAxNjA0LCAxNTgwLCAxNjA1LCA3ODAsIDE2MDMsIDE2MDUsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE1ODAsIDE1ODEsIDE2MTAsIDc4MCwgMTU4MSwgMTU4MCwgMTYxMCwgNzgwLCAKLSAgICAxNjA1LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDEsIDE2MDUsIDE2MTAsIDc4MCwgMTU3NiwgMTU4MSwgMTYxMCwgNzgxLCAKLSAgICAxNjAzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE1ODAsIDE2MDUsIDc4MSwgMTU4OSwgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg3LCAxNTgyLCAxNjEwLCA3ODAsIDE2MDYsIDE1ODAsIDE2MTAsIDc3OSwgMTU4OSwgMTYwNCwgMTc0NiwgNzc5LCAKLSAgICAxNjAyLCAxNjA0LCAxNzQ2LCAxMDM1LCAxNTc1LCAxNjA0LCAxNjA0LCAxNjA3LCAxMDM1LCAxNTc1LCAxNjAzLCAxNTc2LCAKLSAgICAxNTg1LCAxMDM1LCAxNjA1LCAxNTgxLCAxNjA1LCAxNTgzLCAxMDM1LCAxNTg5LCAxNjA0LCAxNTkzLCAxNjA1LCAxMDM1LCAKLSAgICAxNTg1LCAxNTg3LCAxNjA4LCAxNjA0LCAxMDM1LCAxNTkzLCAxNjA0LCAxNjEwLCAxNjA3LCAxMDM1LCAxNjA4LCAxNTg3LCAKLSAgICAxNjA0LCAxNjA1LCA3NzksIDE1ODksIDE2MDQsIDE2MDksIDQ2MTksIDE1ODksIDE2MDQsIDE2MDksIDMyLCAxNTc1LCAKLSAgICAxNjA0LCAxNjA0LCAxNjA3LCAzMiwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMzIsIDE2MDgsIDE1ODcsIDE2MDQsIDE2MDUsIAotICAgIDIwNTksIDE1ODAsIDE2MDQsIDMyLCAxNTgwLCAxNjA0LCAxNTc1LCAxNjA0LCAxNjA3LCAxMDM1LCAxNTg1LCAxNzQwLCAKLSAgICAxNTc1LCAxNjA0LCAyNjUsIDQ0LCAyNjUsIDEyMjg5LCAyNjUsIDEyMjkwLCAyNjUsIDU4LCAyNjUsIDU5LCAyNjUsIDMzLCAKLSAgICAyNjUsIDYzLCAyNjUsIDEyMzEwLCAyNjUsIDEyMzExLCAyNjUsIDgyMzAsIDI2NSwgODIyOSwgMjY1LCA4MjEyLCAyNjUsIAotICAgIDgyMTEsIDI2NSwgOTUsIDI2NSwgOTUsIDI2NSwgNDAsIDI2NSwgNDEsIDI2NSwgMTIzLCAyNjUsIDEyNSwgMjY1LCAxMjMwOCwgCi0gICAgMjY1LCAxMjMwOSwgMjY1LCAxMjMwNCwgMjY1LCAxMjMwNSwgMjY1LCAxMjI5OCwgMjY1LCAxMjI5OSwgMjY1LCAxMjI5NiwgCi0gICAgMjY1LCAxMjI5NywgMjY1LCAxMjMwMCwgMjY1LCAxMjMwMSwgMjY1LCAxMjMwMiwgMjY1LCAxMjMwMywgMjY1LCA5MSwgMjY1LCAKLSAgICA5MywgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDk1LCAyNTgsIDk1LCAyNTgsIAotICAgIDk1LCAyNzEsIDQ0LCAyNzEsIDEyMjg5LCAyNzEsIDQ2LCAyNzEsIDU5LCAyNzEsIDU4LCAyNzEsIDYzLCAyNzEsIDMzLCAKLSAgICAyNzEsIDgyMTIsIDI3MSwgNDAsIDI3MSwgNDEsIDI3MSwgMTIzLCAyNzEsIDEyNSwgMjcxLCAxMjMwOCwgMjcxLCAxMjMwOSwgCi0gICAgMjcxLCAzNSwgMjcxLCAzOCwgMjcxLCA0MiwgMjcxLCA0MywgMjcxLCA0NSwgMjcxLCA2MCwgMjcxLCA2MiwgMjcxLCA2MSwgCi0gICAgMjcxLCA5MiwgMjcxLCAzNiwgMjcxLCAzNywgMjcxLCA2NCwgNTIzLCAzMiwgMTYxMSwgNTI2LCAxNjAwLCAxNjExLCA1MjMsIAotICAgIDMyLCAxNjEyLCA1MjMsIDMyLCAxNjEzLCA1MjMsIDMyLCAxNjE0LCA1MjYsIDE2MDAsIDE2MTQsIDUyMywgMzIsIDE2MTUsIAotICAgIDUyNiwgMTYwMCwgMTYxNSwgNTIzLCAzMiwgMTYxNiwgNTI2LCAxNjAwLCAxNjE2LCA1MjMsIDMyLCAxNjE3LCA1MjYsIAotICAgIDE2MDAsIDE2MTcsIDUyMywgMzIsIDE2MTgsIDUyNiwgMTYwMCwgMTYxOCwgMjY3LCAxNTY5LCAyNjcsIDE1NzAsIDI2OCwgCi0gICAgMTU3MCwgMjY3LCAxNTcxLCAyNjgsIDE1NzEsIDI2NywgMTU3MiwgMjY4LCAxNTcyLCAyNjcsIDE1NzMsIDI2OCwgMTU3MywgCi0gICAgMjY3LCAxNTc0LCAyNjgsIDE1NzQsIDI2OSwgMTU3NCwgMjcwLCAxNTc0LCAyNjcsIDE1NzUsIDI2OCwgMTU3NSwgMjY3LCAKLSAgICAxNTc2LCAyNjgsIDE1NzYsIDI2OSwgMTU3NiwgMjcwLCAxNTc2LCAyNjcsIDE1NzcsIDI2OCwgMTU3NywgMjY3LCAxNTc4LCAKLSAgICAyNjgsIDE1NzgsIDI2OSwgMTU3OCwgMjcwLCAxNTc4LCAyNjcsIDE1NzksIDI2OCwgMTU3OSwgMjY5LCAxNTc5LCAyNzAsIAotICAgIDE1NzksIDI2NywgMTU4MCwgMjY4LCAxNTgwLCAyNjksIDE1ODAsIDI3MCwgMTU4MCwgMjY3LCAxNTgxLCAyNjgsIDE1ODEsIAotICAgIDI2OSwgMTU4MSwgMjcwLCAxNTgxLCAyNjcsIDE1ODIsIDI2OCwgMTU4MiwgMjY5LCAxNTgyLCAyNzAsIDE1ODIsIDI2NywgCi0gICAgMTU4MywgMjY4LCAxNTgzLCAyNjcsIDE1ODQsIDI2OCwgMTU4NCwgMjY3LCAxNTg1LCAyNjgsIDE1ODUsIDI2NywgMTU4NiwgCi0gICAgMjY4LCAxNTg2LCAyNjcsIDE1ODcsIDI2OCwgMTU4NywgMjY5LCAxNTg3LCAyNzAsIDE1ODcsIDI2NywgMTU4OCwgMjY4LCAKLSAgICAxNTg4LCAyNjksIDE1ODgsIDI3MCwgMTU4OCwgMjY3LCAxNTg5LCAyNjgsIDE1ODksIDI2OSwgMTU4OSwgMjcwLCAxNTg5LCAKLSAgICAyNjcsIDE1OTAsIDI2OCwgMTU5MCwgMjY5LCAxNTkwLCAyNzAsIDE1OTAsIDI2NywgMTU5MSwgMjY4LCAxNTkxLCAyNjksIAotICAgIDE1OTEsIDI3MCwgMTU5MSwgMjY3LCAxNTkyLCAyNjgsIDE1OTIsIDI2OSwgMTU5MiwgMjcwLCAxNTkyLCAyNjcsIDE1OTMsIAotICAgIDI2OCwgMTU5MywgMjY5LCAxNTkzLCAyNzAsIDE1OTMsIDI2NywgMTU5NCwgMjY4LCAxNTk0LCAyNjksIDE1OTQsIDI3MCwgCi0gICAgMTU5NCwgMjY3LCAxNjAxLCAyNjgsIDE2MDEsIDI2OSwgMTYwMSwgMjcwLCAxNjAxLCAyNjcsIDE2MDIsIDI2OCwgMTYwMiwgCi0gICAgMjY5LCAxNjAyLCAyNzAsIDE2MDIsIDI2NywgMTYwMywgMjY4LCAxNjAzLCAyNjksIDE2MDMsIDI3MCwgMTYwMywgMjY3LCAKLSAgICAxNjA0LCAyNjgsIDE2MDQsIDI2OSwgMTYwNCwgMjcwLCAxNjA0LCAyNjcsIDE2MDUsIDI2OCwgMTYwNSwgMjY5LCAxNjA1LCAKLSAgICAyNzAsIDE2MDUsIDI2NywgMTYwNiwgMjY4LCAxNjA2LCAyNjksIDE2MDYsIDI3MCwgMTYwNiwgMjY3LCAxNjA3LCAyNjgsIAotICAgIDE2MDcsIDI2OSwgMTYwNywgMjcwLCAxNjA3LCAyNjcsIDE2MDgsIDI2OCwgMTYwOCwgMjY3LCAxNjA5LCAyNjgsIDE2MDksIAotICAgIDI2NywgMTYxMCwgMjY4LCAxNjEwLCAyNjksIDE2MTAsIDI3MCwgMTYxMCwgNTIzLCAxNjA0LCAxNTcwLCA1MjQsIDE2MDQsIAotICAgIDE1NzAsIDUyMywgMTYwNCwgMTU3MSwgNTI0LCAxNjA0LCAxNTcxLCA1MjMsIDE2MDQsIDE1NzMsIDUyNCwgMTYwNCwgMTU3MywgCi0gICAgNTIzLCAxNjA0LCAxNTc1LCA1MjQsIDE2MDQsIDE1NzUsIDI2NCwgMzMsIDI2NCwgMzQsIDI2NCwgMzUsIDI2NCwgMzYsIAotICAgIDI2NCwgMzcsIDI2NCwgMzgsIDI2NCwgMzksIDI2NCwgNDAsIDI2NCwgNDEsIDI2NCwgNDIsIDI2NCwgNDMsIDI2NCwgNDQsIAotICAgIDI2NCwgNDUsIDI2NCwgNDYsIDI2NCwgNDcsIDI2NCwgNDgsIDI2NCwgNDksIDI2NCwgNTAsIDI2NCwgNTEsIDI2NCwgNTIsIAotICAgIDI2NCwgNTMsIDI2NCwgNTQsIDI2NCwgNTUsIDI2NCwgNTYsIDI2NCwgNTcsIDI2NCwgNTgsIDI2NCwgNTksIDI2NCwgNjAsIAotICAgIDI2NCwgNjEsIDI2NCwgNjIsIDI2NCwgNjMsIDI2NCwgNjQsIDI2NCwgNjUsIDI2NCwgNjYsIDI2NCwgNjcsIDI2NCwgNjgsIAotICAgIDI2NCwgNjksIDI2NCwgNzAsIDI2NCwgNzEsIDI2NCwgNzIsIDI2NCwgNzMsIDI2NCwgNzQsIDI2NCwgNzUsIDI2NCwgNzYsIAotICAgIDI2NCwgNzcsIDI2NCwgNzgsIDI2NCwgNzksIDI2NCwgODAsIDI2NCwgODEsIDI2NCwgODIsIDI2NCwgODMsIDI2NCwgODQsIAotICAgIDI2NCwgODUsIDI2NCwgODYsIDI2NCwgODcsIDI2NCwgODgsIDI2NCwgODksIDI2NCwgOTAsIDI2NCwgOTEsIDI2NCwgOTIsIAotICAgIDI2NCwgOTMsIDI2NCwgOTQsIDI2NCwgOTUsIDI2NCwgOTYsIDI2NCwgOTcsIDI2NCwgOTgsIDI2NCwgOTksIDI2NCwgMTAwLCAKLSAgICAyNjQsIDEwMSwgMjY0LCAxMDIsIDI2NCwgMTAzLCAyNjQsIDEwNCwgMjY0LCAxMDUsIDI2NCwgMTA2LCAyNjQsIDEwNywgCi0gICAgMjY0LCAxMDgsIDI2NCwgMTA5LCAyNjQsIDExMCwgMjY0LCAxMTEsIDI2NCwgMTEyLCAyNjQsIDExMywgMjY0LCAxMTQsIAotICAgIDI2NCwgMTE1LCAyNjQsIDExNiwgMjY0LCAxMTcsIDI2NCwgMTE4LCAyNjQsIDExOSwgMjY0LCAxMjAsIDI2NCwgMTIxLCAKLSAgICAyNjQsIDEyMiwgMjY0LCAxMjMsIDI2NCwgMTI0LCAyNjQsIDEyNSwgMjY0LCAxMjYsIDI2NCwgMTA2MjksIDI2NCwgMTA2MzAsIAotICAgIDI3MiwgMTIyOTAsIDI3MiwgMTIzMDAsIDI3MiwgMTIzMDEsIDI3MiwgMTIyODksIDI3MiwgMTI1MzksIDI3MiwgMTI1MzAsIAotICAgIDI3MiwgMTI0NDksIDI3MiwgMTI0NTEsIDI3MiwgMTI0NTMsIDI3MiwgMTI0NTUsIDI3MiwgMTI0NTcsIDI3MiwgMTI1MTUsIAotICAgIDI3MiwgMTI1MTcsIDI3MiwgMTI1MTksIDI3MiwgMTI0ODMsIDI3MiwgMTI1NDAsIDI3MiwgMTI0NTAsIDI3MiwgMTI0NTIsIAotICAgIDI3MiwgMTI0NTQsIDI3MiwgMTI0NTYsIDI3MiwgMTI0NTgsIDI3MiwgMTI0NTksIDI3MiwgMTI0NjEsIDI3MiwgMTI0NjMsIAotICAgIDI3MiwgMTI0NjUsIDI3MiwgMTI0NjcsIDI3MiwgMTI0NjksIDI3MiwgMTI0NzEsIDI3MiwgMTI0NzMsIDI3MiwgMTI0NzUsIAotICAgIDI3MiwgMTI0NzcsIDI3MiwgMTI0NzksIDI3MiwgMTI0ODEsIDI3MiwgMTI0ODQsIDI3MiwgMTI0ODYsIDI3MiwgMTI0ODgsIAotICAgIDI3MiwgMTI0OTAsIDI3MiwgMTI0OTEsIDI3MiwgMTI0OTIsIDI3MiwgMTI0OTMsIDI3MiwgMTI0OTQsIDI3MiwgMTI0OTUsIAotICAgIDI3MiwgMTI0OTgsIDI3MiwgMTI1MDEsIDI3MiwgMTI1MDQsIDI3MiwgMTI1MDcsIDI3MiwgMTI1MTAsIDI3MiwgMTI1MTEsIAotICAgIDI3MiwgMTI1MTIsIDI3MiwgMTI1MTMsIDI3MiwgMTI1MTQsIDI3MiwgMTI1MTYsIDI3MiwgMTI1MTgsIDI3MiwgMTI1MjAsIAotICAgIDI3MiwgMTI1MjEsIDI3MiwgMTI1MjIsIDI3MiwgMTI1MjMsIDI3MiwgMTI1MjQsIDI3MiwgMTI1MjUsIDI3MiwgMTI1MjcsIAotICAgIDI3MiwgMTI1MzEsIDI3MiwgMTI0NDEsIDI3MiwgMTI0NDIsIDI3MiwgMTI2NDQsIDI3MiwgMTI1OTMsIDI3MiwgMTI1OTQsIAotICAgIDI3MiwgMTI1OTUsIDI3MiwgMTI1OTYsIDI3MiwgMTI1OTcsIDI3MiwgMTI1OTgsIDI3MiwgMTI1OTksIDI3MiwgMTI2MDAsIAotICAgIDI3MiwgMTI2MDEsIDI3MiwgMTI2MDIsIDI3MiwgMTI2MDMsIDI3MiwgMTI2MDQsIDI3MiwgMTI2MDUsIDI3MiwgMTI2MDYsIAotICAgIDI3MiwgMTI2MDcsIDI3MiwgMTI2MDgsIDI3MiwgMTI2MDksIDI3MiwgMTI2MTAsIDI3MiwgMTI2MTEsIDI3MiwgMTI2MTIsIAotICAgIDI3MiwgMTI2MTMsIDI3MiwgMTI2MTQsIDI3MiwgMTI2MTUsIDI3MiwgMTI2MTYsIDI3MiwgMTI2MTcsIDI3MiwgMTI2MTgsIAotICAgIDI3MiwgMTI2MTksIDI3MiwgMTI2MjAsIDI3MiwgMTI2MjEsIDI3MiwgMTI2MjIsIDI3MiwgMTI2MjMsIDI3MiwgMTI2MjQsIAotICAgIDI3MiwgMTI2MjUsIDI3MiwgMTI2MjYsIDI3MiwgMTI2MjcsIDI3MiwgMTI2MjgsIDI3MiwgMTI2MjksIDI3MiwgMTI2MzAsIAotICAgIDI3MiwgMTI2MzEsIDI3MiwgMTI2MzIsIDI3MiwgMTI2MzMsIDI3MiwgMTI2MzQsIDI3MiwgMTI2MzUsIDI3MiwgMTI2MzYsIAotICAgIDI3MiwgMTI2MzcsIDI3MiwgMTI2MzgsIDI3MiwgMTI2MzksIDI3MiwgMTI2NDAsIDI3MiwgMTI2NDEsIDI3MiwgMTI2NDIsIAotICAgIDI3MiwgMTI2NDMsIDI2NCwgMTYyLCAyNjQsIDE2MywgMjY0LCAxNzIsIDI2NCwgMTc1LCAyNjQsIDE2NiwgMjY0LCAxNjUsIAotICAgIDI2NCwgODM2MSwgMjcyLCA5NDc0LCAyNzIsIDg1OTIsIDI3MiwgODU5MywgMjcyLCA4NTk0LCAyNzIsIDg1OTUsIDI3MiwgCi0gICAgOTYzMiwgMjcyLCA5Njc1LCA1MTIsIDExOTEyNywgMTE5MTQxLCA1MTIsIDExOTEyOCwgMTE5MTQxLCA1MTIsIDExOTEzNSwgCisgICAgODI2MCwgNTUsIDc3MiwgNDksIDgyNjAsIDU3LCAxMDI4LCA0OSwgODI2MCwgNDksIDQ4LCA3NzIsIDQ5LCA4MjYwLCA1MSwgCisgICAgNzcyLCA1MCwgODI2MCwgNTEsIDc3MiwgNDksIDgyNjAsIDUzLCA3NzIsIDUwLCA4MjYwLCA1MywgNzcyLCA1MSwgODI2MCwgCisgICAgNTMsIDc3MiwgNTIsIDgyNjAsIDUzLCA3NzIsIDQ5LCA4MjYwLCA1NCwgNzcyLCA1MywgODI2MCwgNTQsIDc3MiwgNDksIAorICAgIDgyNjAsIDU2LCA3NzIsIDUxLCA4MjYwLCA1NiwgNzcyLCA1MywgODI2MCwgNTYsIDc3MiwgNTUsIDgyNjAsIDU2LCA1MTYsIAorICAgIDQ5LCA4MjYwLCAyNTgsIDczLCA1MTQsIDczLCA3MywgNzcwLCA3MywgNzMsIDczLCA1MTQsIDczLCA4NiwgMjU4LCA4NiwgCisgICAgNTE0LCA4NiwgNzMsIDc3MCwgODYsIDczLCA3MywgMTAyNiwgODYsIDczLCA3MywgNzMsIDUxNCwgNzMsIDg4LCAyNTgsIDg4LCAKKyAgICA1MTQsIDg4LCA3MywgNzcwLCA4OCwgNzMsIDczLCAyNTgsIDc2LCAyNTgsIDY3LCAyNTgsIDY4LCAyNTgsIDc3LCAyNTgsIAorICAgIDEwNSwgNTE0LCAxMDUsIDEwNSwgNzcwLCAxMDUsIDEwNSwgMTA1LCA1MTQsIDEwNSwgMTE4LCAyNTgsIDExOCwgNTE0LCAKKyAgICAxMTgsIDEwNSwgNzcwLCAxMTgsIDEwNSwgMTA1LCAxMDI2LCAxMTgsIDEwNSwgMTA1LCAxMDUsIDUxNCwgMTA1LCAxMjAsIAorICAgIDI1OCwgMTIwLCA1MTQsIDEyMCwgMTA1LCA3NzAsIDEyMCwgMTA1LCAxMDUsIDI1OCwgMTA4LCAyNTgsIDk5LCAyNTgsIDEwMCwgCisgICAgMjU4LCAxMDksIDc3MiwgNDgsIDgyNjAsIDUxLCA1MTIsIDg1OTIsIDgyNCwgNTEyLCA4NTk0LCA4MjQsIDUxMiwgODU5NiwgCisgICAgODI0LCA1MTIsIDg2NTYsIDgyNCwgNTEyLCA4NjYwLCA4MjQsIDUxMiwgODY1OCwgODI0LCA1MTIsIDg3MDcsIDgyNCwgNTEyLCAKKyAgICA4NzEyLCA4MjQsIDUxMiwgODcxNSwgODI0LCA1MTIsIDg3MzksIDgyNCwgNTEyLCA4NzQxLCA4MjQsIDUxNCwgODc0NywgCisgICAgODc0NywgNzcwLCA4NzQ3LCA4NzQ3LCA4NzQ3LCA1MTQsIDg3NTAsIDg3NTAsIDc3MCwgODc1MCwgODc1MCwgODc1MCwgNTEyLCAKKyAgICA4NzY0LCA4MjQsIDUxMiwgODc3MSwgODI0LCA1MTIsIDg3NzMsIDgyNCwgNTEyLCA4Nzc2LCA4MjQsIDUxMiwgNjEsIDgyNCwgCisgICAgNTEyLCA4ODAxLCA4MjQsIDUxMiwgODc4MSwgODI0LCA1MTIsIDYwLCA4MjQsIDUxMiwgNjIsIDgyNCwgNTEyLCA4ODA0LCAKKyAgICA4MjQsIDUxMiwgODgwNSwgODI0LCA1MTIsIDg4MTgsIDgyNCwgNTEyLCA4ODE5LCA4MjQsIDUxMiwgODgyMiwgODI0LCA1MTIsIAorICAgIDg4MjMsIDgyNCwgNTEyLCA4ODI2LCA4MjQsIDUxMiwgODgyNywgODI0LCA1MTIsIDg4MzQsIDgyNCwgNTEyLCA4ODM1LCAKKyAgICA4MjQsIDUxMiwgODgzOCwgODI0LCA1MTIsIDg4MzksIDgyNCwgNTEyLCA4ODY2LCA4MjQsIDUxMiwgODg3MiwgODI0LCA1MTIsIAorICAgIDg4NzMsIDgyNCwgNTEyLCA4ODc1LCA4MjQsIDUxMiwgODgyOCwgODI0LCA1MTIsIDg4MjksIDgyNCwgNTEyLCA4ODQ5LCAKKyAgICA4MjQsIDUxMiwgODg1MCwgODI0LCA1MTIsIDg4ODIsIDgyNCwgNTEyLCA4ODgzLCA4MjQsIDUxMiwgODg4NCwgODI0LCA1MTIsIAorICAgIDg4ODUsIDgyNCwgMjU2LCAxMjI5NiwgMjU2LCAxMjI5NywgMjYzLCA0OSwgMjYzLCA1MCwgMjYzLCA1MSwgMjYzLCA1MiwgCisgICAgMjYzLCA1MywgMjYzLCA1NCwgMjYzLCA1NSwgMjYzLCA1NiwgMjYzLCA1NywgNTE5LCA0OSwgNDgsIDUxOSwgNDksIDQ5LCAKKyAgICA1MTksIDQ5LCA1MCwgNTE5LCA0OSwgNTEsIDUxOSwgNDksIDUyLCA1MTksIDQ5LCA1MywgNTE5LCA0OSwgNTQsIDUxOSwgNDksIAorICAgIDU1LCA1MTksIDQ5LCA1NiwgNTE5LCA0OSwgNTcsIDUxOSwgNTAsIDQ4LCA3NzAsIDQwLCA0OSwgNDEsIDc3MCwgNDAsIDUwLCAKKyAgICA0MSwgNzcwLCA0MCwgNTEsIDQxLCA3NzAsIDQwLCA1MiwgNDEsIDc3MCwgNDAsIDUzLCA0MSwgNzcwLCA0MCwgNTQsIDQxLCAKKyAgICA3NzAsIDQwLCA1NSwgNDEsIDc3MCwgNDAsIDU2LCA0MSwgNzcwLCA0MCwgNTcsIDQxLCAxMDI2LCA0MCwgNDksIDQ4LCA0MSwgCisgICAgMTAyNiwgNDAsIDQ5LCA0OSwgNDEsIDEwMjYsIDQwLCA0OSwgNTAsIDQxLCAxMDI2LCA0MCwgNDksIDUxLCA0MSwgMTAyNiwgCisgICAgNDAsIDQ5LCA1MiwgNDEsIDEwMjYsIDQwLCA0OSwgNTMsIDQxLCAxMDI2LCA0MCwgNDksIDU0LCA0MSwgMTAyNiwgNDAsIDQ5LCAKKyAgICA1NSwgNDEsIDEwMjYsIDQwLCA0OSwgNTYsIDQxLCAxMDI2LCA0MCwgNDksIDU3LCA0MSwgMTAyNiwgNDAsIDUwLCA0OCwgNDEsIAorICAgIDUxNCwgNDksIDQ2LCA1MTQsIDUwLCA0NiwgNTE0LCA1MSwgNDYsIDUxNCwgNTIsIDQ2LCA1MTQsIDUzLCA0NiwgNTE0LCA1NCwgCisgICAgNDYsIDUxNCwgNTUsIDQ2LCA1MTQsIDU2LCA0NiwgNTE0LCA1NywgNDYsIDc3MCwgNDksIDQ4LCA0NiwgNzcwLCA0OSwgNDksIAorICAgIDQ2LCA3NzAsIDQ5LCA1MCwgNDYsIDc3MCwgNDksIDUxLCA0NiwgNzcwLCA0OSwgNTIsIDQ2LCA3NzAsIDQ5LCA1MywgNDYsIAorICAgIDc3MCwgNDksIDU0LCA0NiwgNzcwLCA0OSwgNTUsIDQ2LCA3NzAsIDQ5LCA1NiwgNDYsIDc3MCwgNDksIDU3LCA0NiwgNzcwLCAKKyAgICA1MCwgNDgsIDQ2LCA3NzAsIDQwLCA5NywgNDEsIDc3MCwgNDAsIDk4LCA0MSwgNzcwLCA0MCwgOTksIDQxLCA3NzAsIDQwLCAKKyAgICAxMDAsIDQxLCA3NzAsIDQwLCAxMDEsIDQxLCA3NzAsIDQwLCAxMDIsIDQxLCA3NzAsIDQwLCAxMDMsIDQxLCA3NzAsIDQwLCAKKyAgICAxMDQsIDQxLCA3NzAsIDQwLCAxMDUsIDQxLCA3NzAsIDQwLCAxMDYsIDQxLCA3NzAsIDQwLCAxMDcsIDQxLCA3NzAsIDQwLCAKKyAgICAxMDgsIDQxLCA3NzAsIDQwLCAxMDksIDQxLCA3NzAsIDQwLCAxMTAsIDQxLCA3NzAsIDQwLCAxMTEsIDQxLCA3NzAsIDQwLCAKKyAgICAxMTIsIDQxLCA3NzAsIDQwLCAxMTMsIDQxLCA3NzAsIDQwLCAxMTQsIDQxLCA3NzAsIDQwLCAxMTUsIDQxLCA3NzAsIDQwLCAKKyAgICAxMTYsIDQxLCA3NzAsIDQwLCAxMTcsIDQxLCA3NzAsIDQwLCAxMTgsIDQxLCA3NzAsIDQwLCAxMTksIDQxLCA3NzAsIDQwLCAKKyAgICAxMjAsIDQxLCA3NzAsIDQwLCAxMjEsIDQxLCA3NzAsIDQwLCAxMjIsIDQxLCAyNjMsIDY1LCAyNjMsIDY2LCAyNjMsIDY3LCAKKyAgICAyNjMsIDY4LCAyNjMsIDY5LCAyNjMsIDcwLCAyNjMsIDcxLCAyNjMsIDcyLCAyNjMsIDczLCAyNjMsIDc0LCAyNjMsIDc1LCAKKyAgICAyNjMsIDc2LCAyNjMsIDc3LCAyNjMsIDc4LCAyNjMsIDc5LCAyNjMsIDgwLCAyNjMsIDgxLCAyNjMsIDgyLCAyNjMsIDgzLCAKKyAgICAyNjMsIDg0LCAyNjMsIDg1LCAyNjMsIDg2LCAyNjMsIDg3LCAyNjMsIDg4LCAyNjMsIDg5LCAyNjMsIDkwLCAyNjMsIDk3LCAKKyAgICAyNjMsIDk4LCAyNjMsIDk5LCAyNjMsIDEwMCwgMjYzLCAxMDEsIDI2MywgMTAyLCAyNjMsIDEwMywgMjYzLCAxMDQsIDI2MywgCisgICAgMTA1LCAyNjMsIDEwNiwgMjYzLCAxMDcsIDI2MywgMTA4LCAyNjMsIDEwOSwgMjYzLCAxMTAsIDI2MywgMTExLCAyNjMsIAorICAgIDExMiwgMjYzLCAxMTMsIDI2MywgMTE0LCAyNjMsIDExNSwgMjYzLCAxMTYsIDI2MywgMTE3LCAyNjMsIDExOCwgMjYzLCAKKyAgICAxMTksIDI2MywgMTIwLCAyNjMsIDEyMSwgMjYzLCAxMjIsIDI2MywgNDgsIDEwMjYsIDg3NDcsIDg3NDcsIDg3NDcsIDg3NDcsIAorICAgIDc3MCwgNTgsIDU4LCA2MSwgNTE0LCA2MSwgNjEsIDc3MCwgNjEsIDYxLCA2MSwgNTEyLCAxMDk3MywgODI0LCAyNjEsIDEwNiwgCisgICAgMjU5LCA4NiwgMjU5LCAxMTYxNywgMjU4LCAyNzU5NywgMjU4LCA0MDg2MywgMjU4LCAxOTk2OCwgMjU4LCAyMDAwOCwgMjU4LCAKKyAgICAyMDAyMiwgMjU4LCAyMDAzMSwgMjU4LCAyMDA1NywgMjU4LCAyMDEwMSwgMjU4LCAyMDEwOCwgMjU4LCAyMDEyOCwgMjU4LCAKKyAgICAyMDE1NCwgMjU4LCAyMDc5OSwgMjU4LCAyMDgzNywgMjU4LCAyMDg0MywgMjU4LCAyMDg2NiwgMjU4LCAyMDg4NiwgMjU4LCAKKyAgICAyMDkwNywgMjU4LCAyMDk2MCwgMjU4LCAyMDk4MSwgMjU4LCAyMDk5MiwgMjU4LCAyMTE0NywgMjU4LCAyMTI0MSwgMjU4LCAKKyAgICAyMTI2OSwgMjU4LCAyMTI3NCwgMjU4LCAyMTMwNCwgMjU4LCAyMTMxMywgMjU4LCAyMTM0MCwgMjU4LCAyMTM1MywgMjU4LCAKKyAgICAyMTM3OCwgMjU4LCAyMTQzMCwgMjU4LCAyMTQ0OCwgMjU4LCAyMTQ3NSwgMjU4LCAyMjIzMSwgMjU4LCAyMjMwMywgMjU4LCAKKyAgICAyMjc2MywgMjU4LCAyMjc4NiwgMjU4LCAyMjc5NCwgMjU4LCAyMjgwNSwgMjU4LCAyMjgyMywgMjU4LCAyMjg5OSwgMjU4LCAKKyAgICAyMzM3NiwgMjU4LCAyMzQyNCwgMjU4LCAyMzU0NCwgMjU4LCAyMzU2NywgMjU4LCAyMzU4NiwgMjU4LCAyMzYwOCwgMjU4LCAKKyAgICAyMzY2MiwgMjU4LCAyMzY2NSwgMjU4LCAyNDAyNywgMjU4LCAyNDAzNywgMjU4LCAyNDA0OSwgMjU4LCAyNDA2MiwgMjU4LCAKKyAgICAyNDE3OCwgMjU4LCAyNDE4NiwgMjU4LCAyNDE5MSwgMjU4LCAyNDMwOCwgMjU4LCAyNDMxOCwgMjU4LCAyNDMzMSwgMjU4LCAKKyAgICAyNDMzOSwgMjU4LCAyNDQwMCwgMjU4LCAyNDQxNywgMjU4LCAyNDQzNSwgMjU4LCAyNDUxNSwgMjU4LCAyNTA5NiwgMjU4LCAKKyAgICAyNTE0MiwgMjU4LCAyNTE2MywgMjU4LCAyNTkwMywgMjU4LCAyNTkwOCwgMjU4LCAyNTk5MSwgMjU4LCAyNjAwNywgMjU4LCAKKyAgICAyNjAyMCwgMjU4LCAyNjA0MSwgMjU4LCAyNjA4MCwgMjU4LCAyNjA4NSwgMjU4LCAyNjM1MiwgMjU4LCAyNjM3NiwgMjU4LCAKKyAgICAyNjQwOCwgMjU4LCAyNzQyNCwgMjU4LCAyNzQ5MCwgMjU4LCAyNzUxMywgMjU4LCAyNzU3MSwgMjU4LCAyNzU5NSwgMjU4LCAKKyAgICAyNzYwNCwgMjU4LCAyNzYxMSwgMjU4LCAyNzY2MywgMjU4LCAyNzY2OCwgMjU4LCAyNzcwMCwgMjU4LCAyODc3OSwgMjU4LCAKKyAgICAyOTIyNiwgMjU4LCAyOTIzOCwgMjU4LCAyOTI0MywgMjU4LCAyOTI0NywgMjU4LCAyOTI1NSwgMjU4LCAyOTI3MywgMjU4LCAKKyAgICAyOTI3NSwgMjU4LCAyOTM1NiwgMjU4LCAyOTU3MiwgMjU4LCAyOTU3NywgMjU4LCAyOTkxNiwgMjU4LCAyOTkyNiwgMjU4LCAKKyAgICAyOTk3NiwgMjU4LCAyOTk4MywgMjU4LCAyOTk5MiwgMjU4LCAzMDAwMCwgMjU4LCAzMDA5MSwgMjU4LCAzMDA5OCwgMjU4LCAKKyAgICAzMDMyNiwgMjU4LCAzMDMzMywgMjU4LCAzMDM4MiwgMjU4LCAzMDM5OSwgMjU4LCAzMDQ0NiwgMjU4LCAzMDY4MywgMjU4LCAKKyAgICAzMDY5MCwgMjU4LCAzMDcwNywgMjU4LCAzMTAzNCwgMjU4LCAzMTE2MCwgMjU4LCAzMTE2NiwgMjU4LCAzMTM0OCwgMjU4LCAKKyAgICAzMTQzNSwgMjU4LCAzMTQ4MSwgMjU4LCAzMTg1OSwgMjU4LCAzMTk5MiwgMjU4LCAzMjU2NiwgMjU4LCAzMjU5MywgMjU4LCAKKyAgICAzMjY1MCwgMjU4LCAzMjcwMSwgMjU4LCAzMjc2OSwgMjU4LCAzMjc4MCwgMjU4LCAzMjc4NiwgMjU4LCAzMjgxOSwgMjU4LCAKKyAgICAzMjg5NSwgMjU4LCAzMjkwNSwgMjU4LCAzMzI1MSwgMjU4LCAzMzI1OCwgMjU4LCAzMzI2NywgMjU4LCAzMzI3NiwgMjU4LCAKKyAgICAzMzI5MiwgMjU4LCAzMzMwNywgMjU4LCAzMzMxMSwgMjU4LCAzMzM5MCwgMjU4LCAzMzM5NCwgMjU4LCAzMzQwMCwgMjU4LCAKKyAgICAzNDM4MSwgMjU4LCAzNDQxMSwgMjU4LCAzNDg4MCwgMjU4LCAzNDg5MiwgMjU4LCAzNDkxNSwgMjU4LCAzNTE5OCwgMjU4LCAKKyAgICAzNTIxMSwgMjU4LCAzNTI4MiwgMjU4LCAzNTMyOCwgMjU4LCAzNTg5NSwgMjU4LCAzNTkxMCwgMjU4LCAzNTkyNSwgMjU4LCAKKyAgICAzNTk2MCwgMjU4LCAzNTk5NywgMjU4LCAzNjE5NiwgMjU4LCAzNjIwOCwgMjU4LCAzNjI3NSwgMjU4LCAzNjUyMywgMjU4LCAKKyAgICAzNjU1NCwgMjU4LCAzNjc2MywgMjU4LCAzNjc4NCwgMjU4LCAzNjc4OSwgMjU4LCAzNzAwOSwgMjU4LCAzNzE5MywgMjU4LCAKKyAgICAzNzMxOCwgMjU4LCAzNzMyNCwgMjU4LCAzNzMyOSwgMjU4LCAzODI2MywgMjU4LCAzODI3MiwgMjU4LCAzODQyOCwgMjU4LCAKKyAgICAzODU4MiwgMjU4LCAzODU4NSwgMjU4LCAzODYzMiwgMjU4LCAzODczNywgMjU4LCAzODc1MCwgMjU4LCAzODc1NCwgMjU4LCAKKyAgICAzODc2MSwgMjU4LCAzODg1OSwgMjU4LCAzODg5MywgMjU4LCAzODg5OSwgMjU4LCAzODkxMywgMjU4LCAzOTA4MCwgMjU4LCAKKyAgICAzOTEzMSwgMjU4LCAzOTEzNSwgMjU4LCAzOTMxOCwgMjU4LCAzOTMyMSwgMjU4LCAzOTM0MCwgMjU4LCAzOTU5MiwgMjU4LCAKKyAgICAzOTY0MCwgMjU4LCAzOTY0NywgMjU4LCAzOTcxNywgMjU4LCAzOTcyNywgMjU4LCAzOTczMCwgMjU4LCAzOTc0MCwgMjU4LCAKKyAgICAzOTc3MCwgMjU4LCA0MDE2NSwgMjU4LCA0MDU2NSwgMjU4LCA0MDU3NSwgMjU4LCA0MDYxMywgMjU4LCA0MDYzNSwgMjU4LCAKKyAgICA0MDY0MywgMjU4LCA0MDY1MywgMjU4LCA0MDY1NywgMjU4LCA0MDY5NywgMjU4LCA0MDcwMSwgMjU4LCA0MDcxOCwgMjU4LCAKKyAgICA0MDcyMywgMjU4LCA0MDczNiwgMjU4LCA0MDc2MywgMjU4LCA0MDc3OCwgMjU4LCA0MDc4NiwgMjU4LCA0MDg0NSwgMjU4LCAKKyAgICA0MDg2MCwgMjU4LCA0MDg2NCwgMjY0LCAzMiwgMjU4LCAxMjMwNiwgMjU4LCAyMTMxMywgMjU4LCAyMTMxNiwgMjU4LCAKKyAgICAyMTMxNywgNTEyLCAxMjM2MywgMTI0NDEsIDUxMiwgMTIzNjUsIDEyNDQxLCA1MTIsIDEyMzY3LCAxMjQ0MSwgNTEyLCAKKyAgICAxMjM2OSwgMTI0NDEsIDUxMiwgMTIzNzEsIDEyNDQxLCA1MTIsIDEyMzczLCAxMjQ0MSwgNTEyLCAxMjM3NSwgMTI0NDEsIAorICAgIDUxMiwgMTIzNzcsIDEyNDQxLCA1MTIsIDEyMzc5LCAxMjQ0MSwgNTEyLCAxMjM4MSwgMTI0NDEsIDUxMiwgMTIzODMsIAorICAgIDEyNDQxLCA1MTIsIDEyMzg1LCAxMjQ0MSwgNTEyLCAxMjM4OCwgMTI0NDEsIDUxMiwgMTIzOTAsIDEyNDQxLCA1MTIsIAorICAgIDEyMzkyLCAxMjQ0MSwgNTEyLCAxMjM5OSwgMTI0NDEsIDUxMiwgMTIzOTksIDEyNDQyLCA1MTIsIDEyNDAyLCAxMjQ0MSwgCisgICAgNTEyLCAxMjQwMiwgMTI0NDIsIDUxMiwgMTI0MDUsIDEyNDQxLCA1MTIsIDEyNDA1LCAxMjQ0MiwgNTEyLCAxMjQwOCwgCisgICAgMTI0NDEsIDUxMiwgMTI0MDgsIDEyNDQyLCA1MTIsIDEyNDExLCAxMjQ0MSwgNTEyLCAxMjQxMSwgMTI0NDIsIDUxMiwgCisgICAgMTIzNTgsIDEyNDQxLCA1MTQsIDMyLCAxMjQ0MSwgNTE0LCAzMiwgMTI0NDIsIDUxMiwgMTI0NDUsIDEyNDQxLCA1MjEsIAorICAgIDEyNDI0LCAxMjQyNiwgNTEyLCAxMjQ1OSwgMTI0NDEsIDUxMiwgMTI0NjEsIDEyNDQxLCA1MTIsIDEyNDYzLCAxMjQ0MSwgCisgICAgNTEyLCAxMjQ2NSwgMTI0NDEsIDUxMiwgMTI0NjcsIDEyNDQxLCA1MTIsIDEyNDY5LCAxMjQ0MSwgNTEyLCAxMjQ3MSwgCisgICAgMTI0NDEsIDUxMiwgMTI0NzMsIDEyNDQxLCA1MTIsIDEyNDc1LCAxMjQ0MSwgNTEyLCAxMjQ3NywgMTI0NDEsIDUxMiwgCisgICAgMTI0NzksIDEyNDQxLCA1MTIsIDEyNDgxLCAxMjQ0MSwgNTEyLCAxMjQ4NCwgMTI0NDEsIDUxMiwgMTI0ODYsIDEyNDQxLCAKKyAgICA1MTIsIDEyNDg4LCAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDEsIDUxMiwgMTI0OTUsIDEyNDQyLCA1MTIsIDEyNDk4LCAKKyAgICAxMjQ0MSwgNTEyLCAxMjQ5OCwgMTI0NDIsIDUxMiwgMTI1MDEsIDEyNDQxLCA1MTIsIDEyNTAxLCAxMjQ0MiwgNTEyLCAKKyAgICAxMjUwNCwgMTI0NDEsIDUxMiwgMTI1MDQsIDEyNDQyLCA1MTIsIDEyNTA3LCAxMjQ0MSwgNTEyLCAxMjUwNywgMTI0NDIsIAorICAgIDUxMiwgMTI0NTQsIDEyNDQxLCA1MTIsIDEyNTI3LCAxMjQ0MSwgNTEyLCAxMjUyOCwgMTI0NDEsIDUxMiwgMTI1MjksIAorICAgIDEyNDQxLCA1MTIsIDEyNTMwLCAxMjQ0MSwgNTEyLCAxMjU0MSwgMTI0NDEsIDUyMSwgMTI0NjcsIDEyNDg4LCAyNTgsIAorICAgIDQzNTIsIDI1OCwgNDM1MywgMjU4LCA0NTIyLCAyNTgsIDQzNTQsIDI1OCwgNDUyNCwgMjU4LCA0NTI1LCAyNTgsIDQzNTUsIAorICAgIDI1OCwgNDM1NiwgMjU4LCA0MzU3LCAyNTgsIDQ1MjgsIDI1OCwgNDUyOSwgMjU4LCA0NTMwLCAyNTgsIDQ1MzEsIDI1OCwgCisgICAgNDUzMiwgMjU4LCA0NTMzLCAyNTgsIDQzNzgsIDI1OCwgNDM1OCwgMjU4LCA0MzU5LCAyNTgsIDQzNjAsIDI1OCwgNDM4NSwgCisgICAgMjU4LCA0MzYxLCAyNTgsIDQzNjIsIDI1OCwgNDM2MywgMjU4LCA0MzY0LCAyNTgsIDQzNjUsIDI1OCwgNDM2NiwgMjU4LCAKKyAgICA0MzY3LCAyNTgsIDQzNjgsIDI1OCwgNDM2OSwgMjU4LCA0MzcwLCAyNTgsIDQ0NDksIDI1OCwgNDQ1MCwgMjU4LCA0NDUxLCAKKyAgICAyNTgsIDQ0NTIsIDI1OCwgNDQ1MywgMjU4LCA0NDU0LCAyNTgsIDQ0NTUsIDI1OCwgNDQ1NiwgMjU4LCA0NDU3LCAyNTgsIAorICAgIDQ0NTgsIDI1OCwgNDQ1OSwgMjU4LCA0NDYwLCAyNTgsIDQ0NjEsIDI1OCwgNDQ2MiwgMjU4LCA0NDYzLCAyNTgsIDQ0NjQsIAorICAgIDI1OCwgNDQ2NSwgMjU4LCA0NDY2LCAyNTgsIDQ0NjcsIDI1OCwgNDQ2OCwgMjU4LCA0NDY5LCAyNTgsIDQ0NDgsIDI1OCwgCisgICAgNDM3MiwgMjU4LCA0MzczLCAyNTgsIDQ1NTEsIDI1OCwgNDU1MiwgMjU4LCA0NTU2LCAyNTgsIDQ1NTgsIDI1OCwgNDU2MywgCisgICAgMjU4LCA0NTY3LCAyNTgsIDQ1NjksIDI1OCwgNDM4MCwgMjU4LCA0NTczLCAyNTgsIDQ1NzUsIDI1OCwgNDM4MSwgMjU4LCAKKyAgICA0MzgyLCAyNTgsIDQzODQsIDI1OCwgNDM4NiwgMjU4LCA0Mzg3LCAyNTgsIDQzOTEsIDI1OCwgNDM5MywgMjU4LCA0Mzk1LCAKKyAgICAyNTgsIDQzOTYsIDI1OCwgNDM5NywgMjU4LCA0Mzk4LCAyNTgsIDQzOTksIDI1OCwgNDQwMiwgMjU4LCA0NDA2LCAyNTgsIAorICAgIDQ0MTYsIDI1OCwgNDQyMywgMjU4LCA0NDI4LCAyNTgsIDQ1OTMsIDI1OCwgNDU5NCwgMjU4LCA0NDM5LCAyNTgsIDQ0NDAsIAorICAgIDI1OCwgNDQ0MSwgMjU4LCA0NDg0LCAyNTgsIDQ0ODUsIDI1OCwgNDQ4OCwgMjU4LCA0NDk3LCAyNTgsIDQ0OTgsIDI1OCwgCisgICAgNDUwMCwgMjU4LCA0NTEwLCAyNTgsIDQ1MTMsIDI1OSwgMTk5NjgsIDI1OSwgMjAxMDgsIDI1OSwgMTk5NzcsIDI1OSwgCisgICAgMjIyMzUsIDI1OSwgMTk5NzgsIDI1OSwgMjAwMTMsIDI1OSwgMTk5NzksIDI1OSwgMzAwMDIsIDI1OSwgMjAwNTcsIDI1OSwgCisgICAgMTk5OTMsIDI1OSwgMTk5NjksIDI1OSwgMjI4MjUsIDI1OSwgMjIzMjAsIDI1OSwgMjAxNTQsIDc3MCwgNDAsIDQzNTIsIDQxLCAKKyAgICA3NzAsIDQwLCA0MzU0LCA0MSwgNzcwLCA0MCwgNDM1NSwgNDEsIDc3MCwgNDAsIDQzNTcsIDQxLCA3NzAsIDQwLCA0MzU4LCAKKyAgICA0MSwgNzcwLCA0MCwgNDM1OSwgNDEsIDc3MCwgNDAsIDQzNjEsIDQxLCA3NzAsIDQwLCA0MzYzLCA0MSwgNzcwLCA0MCwgCisgICAgNDM2NCwgNDEsIDc3MCwgNDAsIDQzNjYsIDQxLCA3NzAsIDQwLCA0MzY3LCA0MSwgNzcwLCA0MCwgNDM2OCwgNDEsIDc3MCwgCisgICAgNDAsIDQzNjksIDQxLCA3NzAsIDQwLCA0MzcwLCA0MSwgMTAyNiwgNDAsIDQzNTIsIDQ0NDksIDQxLCAxMDI2LCA0MCwgCisgICAgNDM1NCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU1LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNTcsIDQ0NDksIDQxLCAxMDI2LCAKKyAgICA0MCwgNDM1OCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU5LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjEsIDQ0NDksIDQxLCAKKyAgICAxMDI2LCA0MCwgNDM2MywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjYsIDQ0NDksIAorICAgIDQxLCAxMDI2LCA0MCwgNDM2NywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY4LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjksIAorICAgIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM3MCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDYyLCA0MSwgMTc5NCwgNDAsIAorICAgIDQzNjMsIDQ0NTcsIDQzNjQsIDQ0NTMsIDQ1MjMsIDQxLCAxNTM4LCA0MCwgNDM2MywgNDQ1NywgNDM3MCwgNDQ2MiwgNDEsIAorICAgIDc3MCwgNDAsIDE5OTY4LCA0MSwgNzcwLCA0MCwgMjAxMDgsIDQxLCA3NzAsIDQwLCAxOTk3NywgNDEsIDc3MCwgNDAsIAorICAgIDIyMjM1LCA0MSwgNzcwLCA0MCwgMjAxMTYsIDQxLCA3NzAsIDQwLCAyMDg0NSwgNDEsIDc3MCwgNDAsIDE5OTcxLCA0MSwgCisgICAgNzcwLCA0MCwgMjA4NDMsIDQxLCA3NzAsIDQwLCAyMDA2MSwgNDEsIDc3MCwgNDAsIDIxMzEzLCA0MSwgNzcwLCA0MCwgCisgICAgMjYzNzYsIDQxLCA3NzAsIDQwLCAyODc3OSwgNDEsIDc3MCwgNDAsIDI3NzAwLCA0MSwgNzcwLCA0MCwgMjY0MDgsIDQxLCAKKyAgICA3NzAsIDQwLCAzNzMyOSwgNDEsIDc3MCwgNDAsIDIyMzAzLCA0MSwgNzcwLCA0MCwgMjYwODUsIDQxLCA3NzAsIDQwLCAKKyAgICAyNjY2NiwgNDEsIDc3MCwgNDAsIDI2Mzc3LCA0MSwgNzcwLCA0MCwgMzEwMzgsIDQxLCA3NzAsIDQwLCAyMTUxNywgNDEsIAorICAgIDc3MCwgNDAsIDI5MzA1LCA0MSwgNzcwLCA0MCwgMzYwMDEsIDQxLCA3NzAsIDQwLCAzMTA2OSwgNDEsIDc3MCwgNDAsIAorICAgIDIxMTcyLCA0MSwgNzcwLCA0MCwgMjAxOTUsIDQxLCA3NzAsIDQwLCAyMTYyOCwgNDEsIDc3MCwgNDAsIDIzMzk4LCA0MSwgCisgICAgNzcwLCA0MCwgMzA0MzUsIDQxLCA3NzAsIDQwLCAyMDIyNSwgNDEsIDc3MCwgNDAsIDM2MDM5LCA0MSwgNzcwLCA0MCwgCisgICAgMjEzMzIsIDQxLCA3NzAsIDQwLCAzMTA4NSwgNDEsIDc3MCwgNDAsIDIwMjQxLCA0MSwgNzcwLCA0MCwgMzMyNTgsIDQxLCAKKyAgICA3NzAsIDQwLCAzMzI2NywgNDEsIDI2MywgMjE4MzksIDI2MywgMjQxODgsIDI2MywgMjU5OTEsIDI2MywgMzE2MzEsIDc3OCwgCisgICAgODAsIDg0LCA2OSwgNTE5LCA1MCwgNDksIDUxOSwgNTAsIDUwLCA1MTksIDUwLCA1MSwgNTE5LCA1MCwgNTIsIDUxOSwgNTAsIAorICAgIDUzLCA1MTksIDUwLCA1NCwgNTE5LCA1MCwgNTUsIDUxOSwgNTAsIDU2LCA1MTksIDUwLCA1NywgNTE5LCA1MSwgNDgsIDUxOSwgCisgICAgNTEsIDQ5LCA1MTksIDUxLCA1MCwgNTE5LCA1MSwgNTEsIDUxOSwgNTEsIDUyLCA1MTksIDUxLCA1MywgMjYzLCA0MzUyLCAKKyAgICAyNjMsIDQzNTQsIDI2MywgNDM1NSwgMjYzLCA0MzU3LCAyNjMsIDQzNTgsIDI2MywgNDM1OSwgMjYzLCA0MzYxLCAyNjMsIAorICAgIDQzNjMsIDI2MywgNDM2NCwgMjYzLCA0MzY2LCAyNjMsIDQzNjcsIDI2MywgNDM2OCwgMjYzLCA0MzY5LCAyNjMsIDQzNzAsIAorICAgIDUxOSwgNDM1MiwgNDQ0OSwgNTE5LCA0MzU0LCA0NDQ5LCA1MTksIDQzNTUsIDQ0NDksIDUxOSwgNDM1NywgNDQ0OSwgNTE5LCAKKyAgICA0MzU4LCA0NDQ5LCA1MTksIDQzNTksIDQ0NDksIDUxOSwgNDM2MSwgNDQ0OSwgNTE5LCA0MzYzLCA0NDQ5LCA1MTksIDQzNjQsIAorICAgIDQ0NDksIDUxOSwgNDM2NiwgNDQ0OSwgNTE5LCA0MzY3LCA0NDQ5LCA1MTksIDQzNjgsIDQ0NDksIDUxOSwgNDM2OSwgNDQ0OSwgCisgICAgNTE5LCA0MzcwLCA0NDQ5LCAxMjg3LCA0MzY2LCA0NDQ5LCA0NTM1LCA0MzUyLCA0NDU3LCAxMDMxLCA0MzY0LCA0NDYyLCAKKyAgICA0MzYzLCA0NDY4LCA1MTksIDQzNjMsIDQ0NjIsIDI2MywgMTk5NjgsIDI2MywgMjAxMDgsIDI2MywgMTk5NzcsIDI2MywgCisgICAgMjIyMzUsIDI2MywgMjAxMTYsIDI2MywgMjA4NDUsIDI2MywgMTk5NzEsIDI2MywgMjA4NDMsIDI2MywgMjAwNjEsIDI2MywgCisgICAgMjEzMTMsIDI2MywgMjYzNzYsIDI2MywgMjg3NzksIDI2MywgMjc3MDAsIDI2MywgMjY0MDgsIDI2MywgMzczMjksIDI2MywgCisgICAgMjIzMDMsIDI2MywgMjYwODUsIDI2MywgMjY2NjYsIDI2MywgMjYzNzcsIDI2MywgMzEwMzgsIDI2MywgMjE1MTcsIDI2MywgCisgICAgMjkzMDUsIDI2MywgMzYwMDEsIDI2MywgMzEwNjksIDI2MywgMjExNzIsIDI2MywgMzExOTIsIDI2MywgMzAwMDcsIDI2MywgCisgICAgMjI4OTksIDI2MywgMzY5NjksIDI2MywgMjA3NzgsIDI2MywgMjEzNjAsIDI2MywgMjc4ODAsIDI2MywgMzg5MTcsIDI2MywgCisgICAgMjAyNDEsIDI2MywgMjA4ODksIDI2MywgMjc0OTEsIDI2MywgMTk5NzgsIDI2MywgMjAwMTMsIDI2MywgMTk5NzksIDI2MywgCisgICAgMjQwMzgsIDI2MywgMjE0OTEsIDI2MywgMjEzMDcsIDI2MywgMjM0NDcsIDI2MywgMjMzOTgsIDI2MywgMzA0MzUsIDI2MywgCisgICAgMjAyMjUsIDI2MywgMzYwMzksIDI2MywgMjEzMzIsIDI2MywgMjI4MTIsIDUxOSwgNTEsIDU0LCA1MTksIDUxLCA1NSwgNTE5LCAKKyAgICA1MSwgNTYsIDUxOSwgNTEsIDU3LCA1MTksIDUyLCA0OCwgNTE5LCA1MiwgNDksIDUxOSwgNTIsIDUwLCA1MTksIDUyLCA1MSwgCisgICAgNTE5LCA1MiwgNTIsIDUxOSwgNTIsIDUzLCA1MTksIDUyLCA1NCwgNTE5LCA1MiwgNTUsIDUxOSwgNTIsIDU2LCA1MTksIDUyLCAKKyAgICA1NywgNTE5LCA1MywgNDgsIDUxNCwgNDksIDI2Mzc2LCA1MTQsIDUwLCAyNjM3NiwgNTE0LCA1MSwgMjYzNzYsIDUxNCwgNTIsIAorICAgIDI2Mzc2LCA1MTQsIDUzLCAyNjM3NiwgNTE0LCA1NCwgMjYzNzYsIDUxNCwgNTUsIDI2Mzc2LCA1MTQsIDU2LCAyNjM3NiwgCisgICAgNTE0LCA1NywgMjYzNzYsIDc3MCwgNDksIDQ4LCAyNjM3NiwgNzcwLCA0OSwgNDksIDI2Mzc2LCA3NzAsIDQ5LCA1MCwgCisgICAgMjYzNzYsIDUyMiwgNzIsIDEwMywgNzc4LCAxMDEsIDExNCwgMTAzLCA1MjIsIDEwMSwgODYsIDc3OCwgNzYsIDg0LCA2OCwgCisgICAgMjYzLCAxMjQ1MCwgMjYzLCAxMjQ1MiwgMjYzLCAxMjQ1NCwgMjYzLCAxMjQ1NiwgMjYzLCAxMjQ1OCwgMjYzLCAxMjQ1OSwgCisgICAgMjYzLCAxMjQ2MSwgMjYzLCAxMjQ2MywgMjYzLCAxMjQ2NSwgMjYzLCAxMjQ2NywgMjYzLCAxMjQ2OSwgMjYzLCAxMjQ3MSwgCisgICAgMjYzLCAxMjQ3MywgMjYzLCAxMjQ3NSwgMjYzLCAxMjQ3NywgMjYzLCAxMjQ3OSwgMjYzLCAxMjQ4MSwgMjYzLCAxMjQ4NCwgCisgICAgMjYzLCAxMjQ4NiwgMjYzLCAxMjQ4OCwgMjYzLCAxMjQ5MCwgMjYzLCAxMjQ5MSwgMjYzLCAxMjQ5MiwgMjYzLCAxMjQ5MywgCisgICAgMjYzLCAxMjQ5NCwgMjYzLCAxMjQ5NSwgMjYzLCAxMjQ5OCwgMjYzLCAxMjUwMSwgMjYzLCAxMjUwNCwgMjYzLCAxMjUwNywgCisgICAgMjYzLCAxMjUxMCwgMjYzLCAxMjUxMSwgMjYzLCAxMjUxMiwgMjYzLCAxMjUxMywgMjYzLCAxMjUxNCwgMjYzLCAxMjUxNiwgCisgICAgMjYzLCAxMjUxOCwgMjYzLCAxMjUyMCwgMjYzLCAxMjUyMSwgMjYzLCAxMjUyMiwgMjYzLCAxMjUyMywgMjYzLCAxMjUyNCwgCisgICAgMjYzLCAxMjUyNSwgMjYzLCAxMjUyNywgMjYzLCAxMjUyOCwgMjYzLCAxMjUyOSwgMjYzLCAxMjUzMCwgMTAzNCwgMTI0NTAsIAorICAgIDEyNDk3LCAxMjU0MCwgMTI0ODgsIDEwMzQsIDEyNDUwLCAxMjUyMywgMTI1MDEsIDEyNDQ5LCAxMDM0LCAxMjQ1MCwgCisgICAgMTI1MzEsIDEyNTA2LCAxMjQ1MCwgNzc4LCAxMjQ1MCwgMTI1NDAsIDEyNTIzLCAxMDM0LCAxMjQ1MiwgMTI0OTEsIDEyNTMxLCAKKyAgICAxMjQ2NCwgNzc4LCAxMjQ1MiwgMTI1MzEsIDEyNDgxLCA3NzgsIDEyNDU0LCAxMjQ1NywgMTI1MzEsIDEyOTAsIDEyNDU2LCAKKyAgICAxMjQ3MywgMTI0NjMsIDEyNTQwLCAxMjQ4OSwgMTAzNCwgMTI0NTYsIDEyNTQwLCAxMjQ1OSwgMTI1NDAsIDc3OCwgMTI0NTgsIAorICAgIDEyNTMxLCAxMjQ3MywgNzc4LCAxMjQ1OCwgMTI1NDAsIDEyNTEyLCA3NzgsIDEyNDU5LCAxMjQ1MiwgMTI1MjIsIDEwMzQsIAorICAgIDEyNDU5LCAxMjUyMSwgMTI0ODMsIDEyNDg4LCAxMDM0LCAxMjQ1OSwgMTI1MjUsIDEyNTIyLCAxMjU0MCwgNzc4LCAxMjQ2MCwgCisgICAgMTI1MjUsIDEyNTMxLCA3NzgsIDEyNDYwLCAxMjUzMSwgMTI1MTAsIDUyMiwgMTI0NjIsIDEyNDYwLCA3NzgsIDEyNDYyLCAKKyAgICAxMjQ5MSwgMTI1NDAsIDEwMzQsIDEyNDYxLCAxMjUxNywgMTI1MjIsIDEyNTQwLCAxMDM0LCAxMjQ2MiwgMTI1MjMsIAorICAgIDEyNDgwLCAxMjU0MCwgNTIyLCAxMjQ2MSwgMTI1MjUsIDEyOTAsIDEyNDYxLCAxMjUyNSwgMTI0NjQsIDEyNTIxLCAxMjUxMiwgCisgICAgMTU0NiwgMTI0NjEsIDEyNTI1LCAxMjUxMywgMTI1NDAsIDEyNDg4LCAxMjUyMywgMTI5MCwgMTI0NjEsIDEyNTI1LCAKKyAgICAxMjUyNywgMTI0ODMsIDEyNDg4LCA3NzgsIDEyNDY0LCAxMjUyMSwgMTI1MTIsIDEyOTAsIDEyNDY0LCAxMjUyMSwgMTI1MTIsIAorICAgIDEyNDg4LCAxMjUzMSwgMTI5MCwgMTI0NjMsIDEyNTIzLCAxMjQ3NiwgMTI0NTIsIDEyNTI1LCAxMDM0LCAxMjQ2MywgCisgICAgMTI1MjUsIDEyNTQwLCAxMjQ5MywgNzc4LCAxMjQ2NSwgMTI1NDAsIDEyNDczLCA3NzgsIDEyNDY3LCAxMjUyMywgMTI0OTAsIAorICAgIDc3OCwgMTI0NjcsIDEyNTQwLCAxMjUwOSwgMTAzNCwgMTI0NjksIDEyNDUyLCAxMjQ2MywgMTI1MjMsIDEyOTAsIDEyNDY5LCAKKyAgICAxMjUzMSwgMTI0ODEsIDEyNTQwLCAxMjUxMiwgMTAzNCwgMTI0NzEsIDEyNTIyLCAxMjUzMSwgMTI0NjQsIDc3OCwgMTI0NzUsIAorICAgIDEyNTMxLCAxMjQ4MSwgNzc4LCAxMjQ3NSwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNDgwLCAxMjU0MCwgMTI0NzMsIDUyMiwgCisgICAgMTI0ODcsIDEyNDcxLCA1MjIsIDEyNDg5LCAxMjUyMywgNTIyLCAxMjQ4OCwgMTI1MzEsIDUyMiwgMTI0OTAsIDEyNDk0LCAKKyAgICA3NzgsIDEyNDk0LCAxMjQ4MywgMTI0ODgsIDc3OCwgMTI0OTUsIDEyNDUyLCAxMjQ4NCwgMTI5MCwgMTI0OTcsIDEyNTQwLCAKKyAgICAxMjQ3NSwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNDk3LCAxMjU0MCwgMTI0ODQsIDEwMzQsIDEyNDk2LCAxMjU0MCwgMTI1MjQsIAorICAgIDEyNTIzLCAxMjkwLCAxMjUwMCwgMTI0NTAsIDEyNDczLCAxMjQ4OCwgMTI1MjMsIDc3OCwgMTI1MDAsIDEyNDYzLCAxMjUyMywgCisgICAgNTIyLCAxMjUwMCwgMTI0NjcsIDUyMiwgMTI0OTksIDEyNTIzLCAxMjkwLCAxMjUwMSwgMTI0NDksIDEyNTIxLCAxMjQ4MywgCisgICAgMTI0ODksIDEwMzQsIDEyNTAxLCAxMjQ1MSwgMTI1NDAsIDEyNDg4LCAxMjkwLCAxMjUwMiwgMTI0ODMsIDEyNDcxLCAKKyAgICAxMjQ1NSwgMTI1MjMsIDc3OCwgMTI1MDEsIDEyNTIxLCAxMjUzMSwgMTI5MCwgMTI1MDQsIDEyNDYzLCAxMjQ3OSwgMTI1NDAsIAorICAgIDEyNTIzLCA1MjIsIDEyNTA2LCAxMjQ3NywgNzc4LCAxMjUwNiwgMTI0OTEsIDEyNDk4LCA3NzgsIDEyNTA0LCAxMjUyMywgCisgICAgMTI0ODQsIDc3OCwgMTI1MDYsIDEyNTMxLCAxMjQ3MywgNzc4LCAxMjUwNiwgMTI1NDAsIDEyNDcyLCA3NzgsIDEyNTA1LCAKKyAgICAxMjU0MCwgMTI0NzksIDEwMzQsIDEyNTA5LCAxMjQ1MiwgMTI1MzEsIDEyNDg4LCA3NzgsIDEyNTA4LCAxMjUyMywgMTI0ODgsIAorICAgIDUyMiwgMTI1MDcsIDEyNTMxLCA3NzgsIDEyNTA5LCAxMjUzMSwgMTI0ODksIDc3OCwgMTI1MDcsIDEyNTQwLCAxMjUyMywgCisgICAgNzc4LCAxMjUwNywgMTI1NDAsIDEyNTMxLCAxMDM0LCAxMjUxMCwgMTI0NTIsIDEyNDYzLCAxMjUyNSwgNzc4LCAxMjUxMCwgCisgICAgMTI0NTIsIDEyNTIzLCA3NzgsIDEyNTEwLCAxMjQ4MywgMTI0OTUsIDc3OCwgMTI1MTAsIDEyNTIzLCAxMjQ2MywgMTI5MCwgCisgICAgMTI1MTAsIDEyNTMxLCAxMjQ3MSwgMTI1MTksIDEyNTMxLCAxMDM0LCAxMjUxMSwgMTI0NjMsIDEyNTI1LCAxMjUzMSwgNTIyLCAKKyAgICAxMjUxMSwgMTI1MjIsIDEyOTAsIDEyNTExLCAxMjUyMiwgMTI0OTYsIDEyNTQwLCAxMjUyMywgNTIyLCAxMjUxMywgMTI0NjAsIAorICAgIDEwMzQsIDEyNTEzLCAxMjQ2MCwgMTI0ODgsIDEyNTMxLCAxMDM0LCAxMjUxMywgMTI1NDAsIDEyNDg4LCAxMjUyMywgNzc4LCAKKyAgICAxMjUxNiwgMTI1NDAsIDEyNDg5LCA3NzgsIDEyNTE2LCAxMjU0MCwgMTI1MjMsIDc3OCwgMTI1MTgsIDEyNDUwLCAxMjUzMSwgCisgICAgMTAzNCwgMTI1MjIsIDEyNDgzLCAxMjQ4OCwgMTI1MjMsIDUyMiwgMTI1MjIsIDEyNTIxLCA3NzgsIDEyNTIzLCAxMjUwMCwgCisgICAgMTI1NDAsIDEwMzQsIDEyNTIzLCAxMjU0MCwgMTI1MDIsIDEyNTIzLCA1MjIsIDEyNTI0LCAxMjUxMiwgMTI5MCwgMTI1MjQsIAorICAgIDEyNTMxLCAxMjQ4OCwgMTI0NjYsIDEyNTMxLCA3NzgsIDEyNTI3LCAxMjQ4MywgMTI0ODgsIDUxNCwgNDgsIDI4ODU3LCAKKyAgICA1MTQsIDQ5LCAyODg1NywgNTE0LCA1MCwgMjg4NTcsIDUxNCwgNTEsIDI4ODU3LCA1MTQsIDUyLCAyODg1NywgNTE0LCA1MywgCisgICAgMjg4NTcsIDUxNCwgNTQsIDI4ODU3LCA1MTQsIDU1LCAyODg1NywgNTE0LCA1NiwgMjg4NTcsIDUxNCwgNTcsIDI4ODU3LCAKKyAgICA3NzAsIDQ5LCA0OCwgMjg4NTcsIDc3MCwgNDksIDQ5LCAyODg1NywgNzcwLCA0OSwgNTAsIDI4ODU3LCA3NzAsIDQ5LCA1MSwgCisgICAgMjg4NTcsIDc3MCwgNDksIDUyLCAyODg1NywgNzcwLCA0OSwgNTMsIDI4ODU3LCA3NzAsIDQ5LCA1NCwgMjg4NTcsIDc3MCwgCisgICAgNDksIDU1LCAyODg1NywgNzcwLCA0OSwgNTYsIDI4ODU3LCA3NzAsIDQ5LCA1NywgMjg4NTcsIDc3MCwgNTAsIDQ4LCAKKyAgICAyODg1NywgNzcwLCA1MCwgNDksIDI4ODU3LCA3NzAsIDUwLCA1MCwgMjg4NTcsIDc3MCwgNTAsIDUxLCAyODg1NywgNzcwLCAKKyAgICA1MCwgNTIsIDI4ODU3LCA3NzgsIDEwNCwgODAsIDk3LCA1MjIsIDEwMCwgOTcsIDUyMiwgNjUsIDg1LCA3NzgsIDk4LCA5NywgCisgICAgMTE0LCA1MjIsIDExMSwgODYsIDUyMiwgMTEyLCA5OSwgNTIyLCAxMDAsIDEwOSwgNzc4LCAxMDAsIDEwOSwgMTc4LCA3NzgsIAorICAgIDEwMCwgMTA5LCAxNzksIDUyMiwgNzMsIDg1LCA1MjIsIDI0MTc5LCAyNTEwNCwgNTIyLCAyNjE1NywgMjE2NDQsIDUyMiwgCisgICAgMjI4MjMsIDI3NDkxLCA1MjIsIDI2MTI2LCAyNzgzNSwgMTAzNCwgMjY2NjYsIDI0MzM1LCAyMDI1MCwgMzEwMzgsIDUyMiwgCisgICAgMTEyLCA2NSwgNTIyLCAxMTAsIDY1LCA1MjIsIDk1NiwgNjUsIDUyMiwgMTA5LCA2NSwgNTIyLCAxMDcsIDY1LCA1MjIsIDc1LCAKKyAgICA2NiwgNTIyLCA3NywgNjYsIDUyMiwgNzEsIDY2LCA3NzgsIDk5LCA5NywgMTA4LCAxMDM0LCAxMDcsIDk5LCA5NywgMTA4LCAKKyAgICA1MjIsIDExMiwgNzAsIDUyMiwgMTEwLCA3MCwgNTIyLCA5NTYsIDcwLCA1MjIsIDk1NiwgMTAzLCA1MjIsIDEwOSwgMTAzLCAKKyAgICA1MjIsIDEwNywgMTAzLCA1MjIsIDcyLCAxMjIsIDc3OCwgMTA3LCA3MiwgMTIyLCA3NzgsIDc3LCA3MiwgMTIyLCA3NzgsIAorICAgIDcxLCA3MiwgMTIyLCA3NzgsIDg0LCA3MiwgMTIyLCA1MjIsIDk1NiwgODQ2NywgNTIyLCAxMDksIDg0NjcsIDUyMiwgMTAwLCAKKyAgICA4NDY3LCA1MjIsIDEwNywgODQ2NywgNTIyLCAxMDIsIDEwOSwgNTIyLCAxMTAsIDEwOSwgNTIyLCA5NTYsIDEwOSwgNTIyLCAKKyAgICAxMDksIDEwOSwgNTIyLCA5OSwgMTA5LCA1MjIsIDEwNywgMTA5LCA3NzgsIDEwOSwgMTA5LCAxNzgsIDc3OCwgOTksIDEwOSwgCisgICAgMTc4LCA1MjIsIDEwOSwgMTc4LCA3NzgsIDEwNywgMTA5LCAxNzgsIDc3OCwgMTA5LCAxMDksIDE3OSwgNzc4LCA5OSwgMTA5LCAKKyAgICAxNzksIDUyMiwgMTA5LCAxNzksIDc3OCwgMTA3LCAxMDksIDE3OSwgNzc4LCAxMDksIDg3MjUsIDExNSwgMTAzNCwgMTA5LCAKKyAgICA4NzI1LCAxMTUsIDE3OCwgNTIyLCA4MCwgOTcsIDc3OCwgMTA3LCA4MCwgOTcsIDc3OCwgNzcsIDgwLCA5NywgNzc4LCA3MSwgCisgICAgODAsIDk3LCA3NzgsIDExNCwgOTcsIDEwMCwgMTI5MCwgMTE0LCA5NywgMTAwLCA4NzI1LCAxMTUsIDE1NDYsIDExNCwgOTcsIAorICAgIDEwMCwgODcyNSwgMTE1LCAxNzgsIDUyMiwgMTEyLCAxMTUsIDUyMiwgMTEwLCAxMTUsIDUyMiwgOTU2LCAxMTUsIDUyMiwgCisgICAgMTA5LCAxMTUsIDUyMiwgMTEyLCA4NiwgNTIyLCAxMTAsIDg2LCA1MjIsIDk1NiwgODYsIDUyMiwgMTA5LCA4NiwgNTIyLCAKKyAgICAxMDcsIDg2LCA1MjIsIDc3LCA4NiwgNTIyLCAxMTIsIDg3LCA1MjIsIDExMCwgODcsIDUyMiwgOTU2LCA4NywgNTIyLCAxMDksIAorICAgIDg3LCA1MjIsIDEwNywgODcsIDUyMiwgNzcsIDg3LCA1MjIsIDEwNywgOTM3LCA1MjIsIDc3LCA5MzcsIDEwMzQsIDk3LCA0NiwgCisgICAgMTA5LCA0NiwgNTIyLCA2NiwgMTEzLCA1MjIsIDk5LCA5OSwgNTIyLCA5OSwgMTAwLCAxMDM0LCA2NywgODcyNSwgMTA3LCAKKyAgICAxMDMsIDc3OCwgNjcsIDExMSwgNDYsIDUyMiwgMTAwLCA2NiwgNTIyLCA3MSwgMTIxLCA1MjIsIDEwNCwgOTcsIDUyMiwgNzIsIAorICAgIDgwLCA1MjIsIDEwNSwgMTEwLCA1MjIsIDc1LCA3NSwgNTIyLCA3NSwgNzcsIDUyMiwgMTA3LCAxMTYsIDUyMiwgMTA4LCAKKyAgICAxMDksIDUyMiwgMTA4LCAxMTAsIDc3OCwgMTA4LCAxMTEsIDEwMywgNTIyLCAxMDgsIDEyMCwgNTIyLCAxMDksIDk4LCA3NzgsIAorICAgIDEwOSwgMTA1LCAxMDgsIDc3OCwgMTA5LCAxMTEsIDEwOCwgNTIyLCA4MCwgNzIsIDEwMzQsIDExMiwgNDYsIDEwOSwgNDYsIAorICAgIDc3OCwgODAsIDgwLCA3NywgNTIyLCA4MCwgODIsIDUyMiwgMTE1LCAxMTQsIDUyMiwgODMsIDExOCwgNTIyLCA4NywgOTgsIAorICAgIDc3OCwgODYsIDg3MjUsIDEwOSwgNzc4LCA2NSwgODcyNSwgMTA5LCA1MTQsIDQ5LCAyNjA4NSwgNTE0LCA1MCwgMjYwODUsIAorICAgIDUxNCwgNTEsIDI2MDg1LCA1MTQsIDUyLCAyNjA4NSwgNTE0LCA1MywgMjYwODUsIDUxNCwgNTQsIDI2MDg1LCA1MTQsIDU1LCAKKyAgICAyNjA4NSwgNTE0LCA1NiwgMjYwODUsIDUxNCwgNTcsIDI2MDg1LCA3NzAsIDQ5LCA0OCwgMjYwODUsIDc3MCwgNDksIDQ5LCAKKyAgICAyNjA4NSwgNzcwLCA0OSwgNTAsIDI2MDg1LCA3NzAsIDQ5LCA1MSwgMjYwODUsIDc3MCwgNDksIDUyLCAyNjA4NSwgNzcwLCAKKyAgICA0OSwgNTMsIDI2MDg1LCA3NzAsIDQ5LCA1NCwgMjYwODUsIDc3MCwgNDksIDU1LCAyNjA4NSwgNzcwLCA0OSwgNTYsIAorICAgIDI2MDg1LCA3NzAsIDQ5LCA1NywgMjYwODUsIDc3MCwgNTAsIDQ4LCAyNjA4NSwgNzcwLCA1MCwgNDksIDI2MDg1LCA3NzAsIAorICAgIDUwLCA1MCwgMjYwODUsIDc3MCwgNTAsIDUxLCAyNjA4NSwgNzcwLCA1MCwgNTIsIDI2MDg1LCA3NzAsIDUwLCA1MywgCisgICAgMjYwODUsIDc3MCwgNTAsIDU0LCAyNjA4NSwgNzcwLCA1MCwgNTUsIDI2MDg1LCA3NzAsIDUwLCA1NiwgMjYwODUsIDc3MCwgCisgICAgNTAsIDU3LCAyNjA4NSwgNzcwLCA1MSwgNDgsIDI2MDg1LCA3NzAsIDUxLCA0OSwgMjYwODUsIDc3OCwgMTAzLCA5NywgMTA4LCAKKyAgICAyNTksIDQyODYzLCAyNTYsIDM1OTEyLCAyNTYsIDI2MzU2LCAyNTYsIDM2NTU0LCAyNTYsIDM2MDQwLCAyNTYsIDI4MzY5LCAKKyAgICAyNTYsIDIwMDE4LCAyNTYsIDIxNDc3LCAyNTYsIDQwODYwLCAyNTYsIDQwODYwLCAyNTYsIDIyODY1LCAyNTYsIDM3MzI5LCAKKyAgICAyNTYsIDIxODk1LCAyNTYsIDIyODU2LCAyNTYsIDI1MDc4LCAyNTYsIDMwMzEzLCAyNTYsIDMyNjQ1LCAyNTYsIDM0MzY3LCAKKyAgICAyNTYsIDM0NzQ2LCAyNTYsIDM1MDY0LCAyNTYsIDM3MDA3LCAyNTYsIDI3MTM4LCAyNTYsIDI3OTMxLCAyNTYsIDI4ODg5LCAKKyAgICAyNTYsIDI5NjYyLCAyNTYsIDMzODUzLCAyNTYsIDM3MjI2LCAyNTYsIDM5NDA5LCAyNTYsIDIwMDk4LCAyNTYsIDIxMzY1LCAKKyAgICAyNTYsIDI3Mzk2LCAyNTYsIDI5MjExLCAyNTYsIDM0MzQ5LCAyNTYsIDQwNDc4LCAyNTYsIDIzODg4LCAyNTYsIDI4NjUxLCAKKyAgICAyNTYsIDM0MjUzLCAyNTYsIDM1MTcyLCAyNTYsIDI1Mjg5LCAyNTYsIDMzMjQwLCAyNTYsIDM0ODQ3LCAyNTYsIDI0MjY2LCAKKyAgICAyNTYsIDI2MzkxLCAyNTYsIDI4MDEwLCAyNTYsIDI5NDM2LCAyNTYsIDM3MDcwLCAyNTYsIDIwMzU4LCAyNTYsIDIwOTE5LCAKKyAgICAyNTYsIDIxMjE0LCAyNTYsIDI1Nzk2LCAyNTYsIDI3MzQ3LCAyNTYsIDI5MjAwLCAyNTYsIDMwNDM5LCAyNTYsIDMyNzY5LCAKKyAgICAyNTYsIDM0MzEwLCAyNTYsIDM0Mzk2LCAyNTYsIDM2MzM1LCAyNTYsIDM4NzA2LCAyNTYsIDM5NzkxLCAyNTYsIDQwNDQyLCAKKyAgICAyNTYsIDMwODYwLCAyNTYsIDMxMTAzLCAyNTYsIDMyMTYwLCAyNTYsIDMzNzM3LCAyNTYsIDM3NjM2LCAyNTYsIDQwNTc1LCAKKyAgICAyNTYsIDM1NTQyLCAyNTYsIDIyNzUxLCAyNTYsIDI0MzI0LCAyNTYsIDMxODQwLCAyNTYsIDMyODk0LCAyNTYsIDI5MjgyLCAKKyAgICAyNTYsIDMwOTIyLCAyNTYsIDM2MDM0LCAyNTYsIDM4NjQ3LCAyNTYsIDIyNzQ0LCAyNTYsIDIzNjUwLCAyNTYsIDI3MTU1LCAKKyAgICAyNTYsIDI4MTIyLCAyNTYsIDI4NDMxLCAyNTYsIDMyMDQ3LCAyNTYsIDMyMzExLCAyNTYsIDM4NDc1LCAyNTYsIDIxMjAyLCAKKyAgICAyNTYsIDMyOTA3LCAyNTYsIDIwOTU2LCAyNTYsIDIwOTQwLCAyNTYsIDMxMjYwLCAyNTYsIDMyMTkwLCAyNTYsIDMzNzc3LCAKKyAgICAyNTYsIDM4NTE3LCAyNTYsIDM1NzEyLCAyNTYsIDI1Mjk1LCAyNTYsIDI3MTM4LCAyNTYsIDM1NTgyLCAyNTYsIDIwMDI1LCAKKyAgICAyNTYsIDIzNTI3LCAyNTYsIDI0NTk0LCAyNTYsIDI5NTc1LCAyNTYsIDMwMDY0LCAyNTYsIDIxMjcxLCAyNTYsIDMwOTcxLCAKKyAgICAyNTYsIDIwNDE1LCAyNTYsIDI0NDg5LCAyNTYsIDE5OTgxLCAyNTYsIDI3ODUyLCAyNTYsIDI1OTc2LCAyNTYsIDMyMDM0LCAKKyAgICAyNTYsIDIxNDQzLCAyNTYsIDIyNjIyLCAyNTYsIDMwNDY1LCAyNTYsIDMzODY1LCAyNTYsIDM1NDk4LCAyNTYsIDI3NTc4LCAKKyAgICAyNTYsIDM2Nzg0LCAyNTYsIDI3Nzg0LCAyNTYsIDI1MzQyLCAyNTYsIDMzNTA5LCAyNTYsIDI1NTA0LCAyNTYsIDMwMDUzLCAKKyAgICAyNTYsIDIwMTQyLCAyNTYsIDIwODQxLCAyNTYsIDIwOTM3LCAyNTYsIDI2NzUzLCAyNTYsIDMxOTc1LCAyNTYsIDMzMzkxLCAKKyAgICAyNTYsIDM1NTM4LCAyNTYsIDM3MzI3LCAyNTYsIDIxMjM3LCAyNTYsIDIxNTcwLCAyNTYsIDIyODk5LCAyNTYsIDI0MzAwLCAKKyAgICAyNTYsIDI2MDUzLCAyNTYsIDI4NjcwLCAyNTYsIDMxMDE4LCAyNTYsIDM4MzE3LCAyNTYsIDM5NTMwLCAyNTYsIDQwNTk5LCAKKyAgICAyNTYsIDQwNjU0LCAyNTYsIDIxMTQ3LCAyNTYsIDI2MzEwLCAyNTYsIDI3NTExLCAyNTYsIDM2NzA2LCAyNTYsIDI0MTgwLCAKKyAgICAyNTYsIDI0OTc2LCAyNTYsIDI1MDg4LCAyNTYsIDI1NzU0LCAyNTYsIDI4NDUxLCAyNTYsIDI5MDAxLCAyNTYsIDI5ODMzLCAKKyAgICAyNTYsIDMxMTc4LCAyNTYsIDMyMjQ0LCAyNTYsIDMyODc5LCAyNTYsIDM2NjQ2LCAyNTYsIDM0MDMwLCAyNTYsIDM2ODk5LCAKKyAgICAyNTYsIDM3NzA2LCAyNTYsIDIxMDE1LCAyNTYsIDIxMTU1LCAyNTYsIDIxNjkzLCAyNTYsIDI4ODcyLCAyNTYsIDM1MDEwLCAKKyAgICAyNTYsIDM1NDk4LCAyNTYsIDI0MjY1LCAyNTYsIDI0NTY1LCAyNTYsIDI1NDY3LCAyNTYsIDI3NTY2LCAyNTYsIDMxODA2LCAKKyAgICAyNTYsIDI5NTU3LCAyNTYsIDIwMTk2LCAyNTYsIDIyMjY1LCAyNTYsIDIzNTI3LCAyNTYsIDIzOTk0LCAyNTYsIDI0NjA0LCAKKyAgICAyNTYsIDI5NjE4LCAyNTYsIDI5ODAxLCAyNTYsIDMyNjY2LCAyNTYsIDMyODM4LCAyNTYsIDM3NDI4LCAyNTYsIDM4NjQ2LCAKKyAgICAyNTYsIDM4NzI4LCAyNTYsIDM4OTM2LCAyNTYsIDIwMzYzLCAyNTYsIDMxMTUwLCAyNTYsIDM3MzAwLCAyNTYsIDM4NTg0LCAKKyAgICAyNTYsIDI0ODAxLCAyNTYsIDIwMTAyLCAyNTYsIDIwNjk4LCAyNTYsIDIzNTM0LCAyNTYsIDIzNjE1LCAyNTYsIDI2MDA5LCAKKyAgICAyNTYsIDI3MTM4LCAyNTYsIDI5MTM0LCAyNTYsIDMwMjc0LCAyNTYsIDM0MDQ0LCAyNTYsIDM2OTg4LCAyNTYsIDQwODQ1LCAKKyAgICAyNTYsIDI2MjQ4LCAyNTYsIDM4NDQ2LCAyNTYsIDIxMTI5LCAyNTYsIDI2NDkxLCAyNTYsIDI2NjExLCAyNTYsIDI3OTY5LCAKKyAgICAyNTYsIDI4MzE2LCAyNTYsIDI5NzA1LCAyNTYsIDMwMDQxLCAyNTYsIDMwODI3LCAyNTYsIDMyMDE2LCAyNTYsIDM5MDA2LCAKKyAgICAyNTYsIDIwODQ1LCAyNTYsIDI1MTM0LCAyNTYsIDM4NTIwLCAyNTYsIDIwNTIzLCAyNTYsIDIzODMzLCAyNTYsIDI4MTM4LCAKKyAgICAyNTYsIDM2NjUwLCAyNTYsIDI0NDU5LCAyNTYsIDI0OTAwLCAyNTYsIDI2NjQ3LCAyNTYsIDI5NTc1LCAyNTYsIDM4NTM0LCAKKyAgICAyNTYsIDIxMDMzLCAyNTYsIDIxNTE5LCAyNTYsIDIzNjUzLCAyNTYsIDI2MTMxLCAyNTYsIDI2NDQ2LCAyNTYsIDI2NzkyLCAKKyAgICAyNTYsIDI3ODc3LCAyNTYsIDI5NzAyLCAyNTYsIDMwMTc4LCAyNTYsIDMyNjMzLCAyNTYsIDM1MDIzLCAyNTYsIDM1MDQxLCAKKyAgICAyNTYsIDM3MzI0LCAyNTYsIDM4NjI2LCAyNTYsIDIxMzExLCAyNTYsIDI4MzQ2LCAyNTYsIDIxNTMzLCAyNTYsIDI5MTM2LCAKKyAgICAyNTYsIDI5ODQ4LCAyNTYsIDM0Mjk4LCAyNTYsIDM4NTYzLCAyNTYsIDQwMDIzLCAyNTYsIDQwNjA3LCAyNTYsIDI2NTE5LCAKKyAgICAyNTYsIDI4MTA3LCAyNTYsIDMzMjU2LCAyNTYsIDMxNDM1LCAyNTYsIDMxNTIwLCAyNTYsIDMxODkwLCAyNTYsIDI5Mzc2LCAKKyAgICAyNTYsIDI4ODI1LCAyNTYsIDM1NjcyLCAyNTYsIDIwMTYwLCAyNTYsIDMzNTkwLCAyNTYsIDIxMDUwLCAyNTYsIDIwOTk5LCAKKyAgICAyNTYsIDI0MjMwLCAyNTYsIDI1Mjk5LCAyNTYsIDMxOTU4LCAyNTYsIDIzNDI5LCAyNTYsIDI3OTM0LCAyNTYsIDI2MjkyLCAKKyAgICAyNTYsIDM2NjY3LCAyNTYsIDM0ODkyLCAyNTYsIDM4NDc3LCAyNTYsIDM1MjExLCAyNTYsIDI0Mjc1LCAyNTYsIDIwODAwLCAKKyAgICAyNTYsIDIxOTUyLCAyNTYsIDIyNjE4LCAyNTYsIDI2MjI4LCAyNTYsIDIwOTU4LCAyNTYsIDI5NDgyLCAyNTYsIDMwNDEwLCAKKyAgICAyNTYsIDMxMDM2LCAyNTYsIDMxMDcwLCAyNTYsIDMxMDc3LCAyNTYsIDMxMTE5LCAyNTYsIDM4NzQyLCAyNTYsIDMxOTM0LCAKKyAgICAyNTYsIDMyNzAxLCAyNTYsIDM0MzIyLCAyNTYsIDM1NTc2LCAyNTYsIDM2OTIwLCAyNTYsIDM3MTE3LCAyNTYsIDM5MTUxLCAKKyAgICAyNTYsIDM5MTY0LCAyNTYsIDM5MjA4LCAyNTYsIDQwMzcyLCAyNTYsIDIwMzk4LCAyNTYsIDIwNzExLCAyNTYsIDIwODEzLCAKKyAgICAyNTYsIDIxMTkzLCAyNTYsIDIxMjIwLCAyNTYsIDIxMzI5LCAyNTYsIDIxOTE3LCAyNTYsIDIyMDIyLCAyNTYsIDIyMTIwLCAKKyAgICAyNTYsIDIyNTkyLCAyNTYsIDIyNjk2LCAyNTYsIDIzNjUyLCAyNTYsIDIzNjYyLCAyNTYsIDI0NzI0LCAyNTYsIDI0OTM2LCAKKyAgICAyNTYsIDI0OTc0LCAyNTYsIDI1MDc0LCAyNTYsIDI1OTM1LCAyNTYsIDI2MDgyLCAyNTYsIDI2MjU3LCAyNTYsIDI2NzU3LCAKKyAgICAyNTYsIDI4MDIzLCAyNTYsIDI4MTg2LCAyNTYsIDI4NDUwLCAyNTYsIDI5MDM4LCAyNTYsIDI5MjI3LCAyNTYsIDI5NzMwLCAKKyAgICAyNTYsIDMwODY1LCAyNTYsIDMxMDM4LCAyNTYsIDMxMDQ5LCAyNTYsIDMxMDQ4LCAyNTYsIDMxMDU2LCAyNTYsIDMxMDYyLCAKKyAgICAyNTYsIDMxMDY5LCAyNTYsIDMxMTE3LCAyNTYsIDMxMTE4LCAyNTYsIDMxMjk2LCAyNTYsIDMxMzYxLCAyNTYsIDMxNjgwLCAKKyAgICAyNTYsIDMyMjQ0LCAyNTYsIDMyMjY1LCAyNTYsIDMyMzIxLCAyNTYsIDMyNjI2LCAyNTYsIDMyNzczLCAyNTYsIDMzMjYxLCAKKyAgICAyNTYsIDMzNDAxLCAyNTYsIDMzNDAxLCAyNTYsIDMzODc5LCAyNTYsIDM1MDg4LCAyNTYsIDM1MjIyLCAyNTYsIDM1NTg1LCAKKyAgICAyNTYsIDM1NjQxLCAyNTYsIDM2MDUxLCAyNTYsIDM2MTA0LCAyNTYsIDM2NzkwLCAyNTYsIDM2OTIwLCAyNTYsIDM4NjI3LCAKKyAgICAyNTYsIDM4OTExLCAyNTYsIDM4OTcxLCAyNTYsIDI0NjkzLCAyNTYsIDE0ODIwNiwgMjU2LCAzMzMwNCwgMjU2LCAyMDAwNiwgCisgICAgMjU2LCAyMDkxNywgMjU2LCAyMDg0MCwgMjU2LCAyMDM1MiwgMjU2LCAyMDgwNSwgMjU2LCAyMDg2NCwgMjU2LCAyMTE5MSwgCisgICAgMjU2LCAyMTI0MiwgMjU2LCAyMTkxNywgMjU2LCAyMTg0NSwgMjU2LCAyMTkxMywgMjU2LCAyMTk4NiwgMjU2LCAyMjYxOCwgCisgICAgMjU2LCAyMjcwNywgMjU2LCAyMjg1MiwgMjU2LCAyMjg2OCwgMjU2LCAyMzEzOCwgMjU2LCAyMzMzNiwgMjU2LCAyNDI3NCwgCisgICAgMjU2LCAyNDI4MSwgMjU2LCAyNDQyNSwgMjU2LCAyNDQ5MywgMjU2LCAyNDc5MiwgMjU2LCAyNDkxMCwgMjU2LCAyNDg0MCwgCisgICAgMjU2LCAyNDk3NCwgMjU2LCAyNDkyOCwgMjU2LCAyNTA3NCwgMjU2LCAyNTE0MCwgMjU2LCAyNTU0MCwgMjU2LCAyNTYyOCwgCisgICAgMjU2LCAyNTY4MiwgMjU2LCAyNTk0MiwgMjU2LCAyNjIyOCwgMjU2LCAyNjM5MSwgMjU2LCAyNjM5NSwgMjU2LCAyNjQ1NCwgCisgICAgMjU2LCAyNzUxMywgMjU2LCAyNzU3OCwgMjU2LCAyNzk2OSwgMjU2LCAyODM3OSwgMjU2LCAyODM2MywgMjU2LCAyODQ1MCwgCisgICAgMjU2LCAyODcwMiwgMjU2LCAyOTAzOCwgMjU2LCAzMDYzMSwgMjU2LCAyOTIzNywgMjU2LCAyOTM1OSwgMjU2LCAyOTQ4MiwgCisgICAgMjU2LCAyOTgwOSwgMjU2LCAyOTk1OCwgMjU2LCAzMDAxMSwgMjU2LCAzMDIzNywgMjU2LCAzMDIzOSwgMjU2LCAzMDQxMCwgCisgICAgMjU2LCAzMDQyNywgMjU2LCAzMDQ1MiwgMjU2LCAzMDUzOCwgMjU2LCAzMDUyOCwgMjU2LCAzMDkyNCwgMjU2LCAzMTQwOSwgCisgICAgMjU2LCAzMTY4MCwgMjU2LCAzMTg2NywgMjU2LCAzMjA5MSwgMjU2LCAzMjI0NCwgMjU2LCAzMjU3NCwgMjU2LCAzMjc3MywgCisgICAgMjU2LCAzMzYxOCwgMjU2LCAzMzc3NSwgMjU2LCAzNDY4MSwgMjU2LCAzNTEzNywgMjU2LCAzNTIwNiwgMjU2LCAzNTIyMiwgCisgICAgMjU2LCAzNTUxOSwgMjU2LCAzNTU3NiwgMjU2LCAzNTUzMSwgMjU2LCAzNTU4NSwgMjU2LCAzNTU4MiwgMjU2LCAzNTU2NSwgCisgICAgMjU2LCAzNTY0MSwgMjU2LCAzNTcyMiwgMjU2LCAzNjEwNCwgMjU2LCAzNjY2NCwgMjU2LCAzNjk3OCwgMjU2LCAzNzI3MywgCisgICAgMjU2LCAzNzQ5NCwgMjU2LCAzODUyNCwgMjU2LCAzODYyNywgMjU2LCAzODc0MiwgMjU2LCAzODg3NSwgMjU2LCAzODkxMSwgCisgICAgMjU2LCAzODkyMywgMjU2LCAzODk3MSwgMjU2LCAzOTY5OCwgMjU2LCA0MDg2MCwgMjU2LCAxNDEzODYsIDI1NiwgMTQxMzgwLCAKKyAgICAyNTYsIDE0NDM0MSwgMjU2LCAxNTI2MSwgMjU2LCAxNjQwOCwgMjU2LCAxNjQ0MSwgMjU2LCAxNTIxMzcsIDI1NiwgCisgICAgMTU0ODMyLCAyNTYsIDE2MzUzOSwgMjU2LCA0MDc3MSwgMjU2LCA0MDg0NiwgNTE0LCAxMDIsIDEwMiwgNTE0LCAxMDIsIAorICAgIDEwNSwgNTE0LCAxMDIsIDEwOCwgNzcwLCAxMDIsIDEwMiwgMTA1LCA3NzAsIDEwMiwgMTAyLCAxMDgsIDUxNCwgMzgzLCAKKyAgICAxMTYsIDUxNCwgMTE1LCAxMTYsIDUxNCwgMTM5NiwgMTM5OCwgNTE0LCAxMzk2LCAxMzgxLCA1MTQsIDEzOTYsIDEzODcsIAorICAgIDUxNCwgMTQwNiwgMTM5OCwgNTE0LCAxMzk2LCAxMzg5LCA1MTIsIDE0OTcsIDE0NjAsIDUxMiwgMTUyMiwgMTQ2MywgMjYyLCAKKyAgICAxNTA2LCAyNjIsIDE0ODgsIDI2MiwgMTQ5MSwgMjYyLCAxNDkyLCAyNjIsIDE0OTksIDI2MiwgMTUwMCwgMjYyLCAxNTAxLCAKKyAgICAyNjIsIDE1MTIsIDI2MiwgMTUxNCwgMjYyLCA0MywgNTEyLCAxNTEzLCAxNDczLCA1MTIsIDE1MTMsIDE0NzQsIDUxMiwgCisgICAgNjQzMjksIDE0NzMsIDUxMiwgNjQzMjksIDE0NzQsIDUxMiwgMTQ4OCwgMTQ2MywgNTEyLCAxNDg4LCAxNDY0LCA1MTIsIAorICAgIDE0ODgsIDE0NjgsIDUxMiwgMTQ4OSwgMTQ2OCwgNTEyLCAxNDkwLCAxNDY4LCA1MTIsIDE0OTEsIDE0NjgsIDUxMiwgMTQ5MiwgCisgICAgMTQ2OCwgNTEyLCAxNDkzLCAxNDY4LCA1MTIsIDE0OTQsIDE0NjgsIDUxMiwgMTQ5NiwgMTQ2OCwgNTEyLCAxNDk3LCAxNDY4LCAKKyAgICA1MTIsIDE0OTgsIDE0NjgsIDUxMiwgMTQ5OSwgMTQ2OCwgNTEyLCAxNTAwLCAxNDY4LCA1MTIsIDE1MDIsIDE0NjgsIDUxMiwgCisgICAgMTUwNCwgMTQ2OCwgNTEyLCAxNTA1LCAxNDY4LCA1MTIsIDE1MDcsIDE0NjgsIDUxMiwgMTUwOCwgMTQ2OCwgNTEyLCAxNTEwLCAKKyAgICAxNDY4LCA1MTIsIDE1MTEsIDE0NjgsIDUxMiwgMTUxMiwgMTQ2OCwgNTEyLCAxNTEzLCAxNDY4LCA1MTIsIDE1MTQsIDE0NjgsIAorICAgIDUxMiwgMTQ5MywgMTQ2NSwgNTEyLCAxNDg5LCAxNDcxLCA1MTIsIDE0OTksIDE0NzEsIDUxMiwgMTUwOCwgMTQ3MSwgNTE0LCAKKyAgICAxNDg4LCAxNTAwLCAyNjcsIDE2NDksIDI2OCwgMTY0OSwgMjY3LCAxNjU5LCAyNjgsIDE2NTksIDI2OSwgMTY1OSwgMjcwLCAKKyAgICAxNjU5LCAyNjcsIDE2NjIsIDI2OCwgMTY2MiwgMjY5LCAxNjYyLCAyNzAsIDE2NjIsIDI2NywgMTY2NCwgMjY4LCAxNjY0LCAKKyAgICAyNjksIDE2NjQsIDI3MCwgMTY2NCwgMjY3LCAxNjU4LCAyNjgsIDE2NTgsIDI2OSwgMTY1OCwgMjcwLCAxNjU4LCAyNjcsIAorICAgIDE2NjMsIDI2OCwgMTY2MywgMjY5LCAxNjYzLCAyNzAsIDE2NjMsIDI2NywgMTY1NywgMjY4LCAxNjU3LCAyNjksIDE2NTcsIAorICAgIDI3MCwgMTY1NywgMjY3LCAxNzAwLCAyNjgsIDE3MDAsIDI2OSwgMTcwMCwgMjcwLCAxNzAwLCAyNjcsIDE3MDIsIDI2OCwgCisgICAgMTcwMiwgMjY5LCAxNzAyLCAyNzAsIDE3MDIsIDI2NywgMTY2OCwgMjY4LCAxNjY4LCAyNjksIDE2NjgsIDI3MCwgMTY2OCwgCisgICAgMjY3LCAxNjY3LCAyNjgsIDE2NjcsIDI2OSwgMTY2NywgMjcwLCAxNjY3LCAyNjcsIDE2NzAsIDI2OCwgMTY3MCwgMjY5LCAKKyAgICAxNjcwLCAyNzAsIDE2NzAsIDI2NywgMTY3MSwgMjY4LCAxNjcxLCAyNjksIDE2NzEsIDI3MCwgMTY3MSwgMjY3LCAxNjc3LCAKKyAgICAyNjgsIDE2NzcsIDI2NywgMTY3NiwgMjY4LCAxNjc2LCAyNjcsIDE2NzgsIDI2OCwgMTY3OCwgMjY3LCAxNjcyLCAyNjgsIAorICAgIDE2NzIsIDI2NywgMTY4OCwgMjY4LCAxNjg4LCAyNjcsIDE2ODEsIDI2OCwgMTY4MSwgMjY3LCAxNzA1LCAyNjgsIDE3MDUsIAorICAgIDI2OSwgMTcwNSwgMjcwLCAxNzA1LCAyNjcsIDE3MTEsIDI2OCwgMTcxMSwgMjY5LCAxNzExLCAyNzAsIDE3MTEsIDI2NywgCisgICAgMTcxNSwgMjY4LCAxNzE1LCAyNjksIDE3MTUsIDI3MCwgMTcxNSwgMjY3LCAxNzEzLCAyNjgsIDE3MTMsIDI2OSwgMTcxMywgCisgICAgMjcwLCAxNzEzLCAyNjcsIDE3MjIsIDI2OCwgMTcyMiwgMjY3LCAxNzIzLCAyNjgsIDE3MjMsIDI2OSwgMTcyMywgMjcwLCAKKyAgICAxNzIzLCAyNjcsIDE3MjgsIDI2OCwgMTcyOCwgMjY3LCAxNzI5LCAyNjgsIDE3MjksIDI2OSwgMTcyOSwgMjcwLCAxNzI5LCAKKyAgICAyNjcsIDE3MjYsIDI2OCwgMTcyNiwgMjY5LCAxNzI2LCAyNzAsIDE3MjYsIDI2NywgMTc0NiwgMjY4LCAxNzQ2LCAyNjcsIAorICAgIDE3NDcsIDI2OCwgMTc0NywgMjY3LCAxNzA5LCAyNjgsIDE3MDksIDI2OSwgMTcwOSwgMjcwLCAxNzA5LCAyNjcsIDE3MzUsIAorICAgIDI2OCwgMTczNSwgMjY3LCAxNzM0LCAyNjgsIDE3MzQsIDI2NywgMTczNiwgMjY4LCAxNzM2LCAyNjcsIDE2NTUsIDI2NywgCisgICAgMTczOSwgMjY4LCAxNzM5LCAyNjcsIDE3MzMsIDI2OCwgMTczMywgMjY3LCAxNzM3LCAyNjgsIDE3MzcsIDI2NywgMTc0NCwgCisgICAgMjY4LCAxNzQ0LCAyNjksIDE3NDQsIDI3MCwgMTc0NCwgMjY5LCAxNjA5LCAyNzAsIDE2MDksIDUyMywgMTU3NCwgMTU3NSwgCisgICAgNTI0LCAxNTc0LCAxNTc1LCA1MjMsIDE1NzQsIDE3NDksIDUyNCwgMTU3NCwgMTc0OSwgNTIzLCAxNTc0LCAxNjA4LCA1MjQsIAorICAgIDE1NzQsIDE2MDgsIDUyMywgMTU3NCwgMTczNSwgNTI0LCAxNTc0LCAxNzM1LCA1MjMsIDE1NzQsIDE3MzQsIDUyNCwgMTU3NCwgCisgICAgMTczNCwgNTIzLCAxNTc0LCAxNzM2LCA1MjQsIDE1NzQsIDE3MzYsIDUyMywgMTU3NCwgMTc0NCwgNTI0LCAxNTc0LCAxNzQ0LCAKKyAgICA1MjUsIDE1NzQsIDE3NDQsIDUyMywgMTU3NCwgMTYwOSwgNTI0LCAxNTc0LCAxNjA5LCA1MjUsIDE1NzQsIDE2MDksIDI2NywgCisgICAgMTc0MCwgMjY4LCAxNzQwLCAyNjksIDE3NDAsIDI3MCwgMTc0MCwgNTIzLCAxNTc0LCAxNTgwLCA1MjMsIDE1NzQsIDE1ODEsIAorICAgIDUyMywgMTU3NCwgMTYwNSwgNTIzLCAxNTc0LCAxNjA5LCA1MjMsIDE1NzQsIDE2MTAsIDUyMywgMTU3NiwgMTU4MCwgNTIzLCAKKyAgICAxNTc2LCAxNTgxLCA1MjMsIDE1NzYsIDE1ODIsIDUyMywgMTU3NiwgMTYwNSwgNTIzLCAxNTc2LCAxNjA5LCA1MjMsIDE1NzYsIAorICAgIDE2MTAsIDUyMywgMTU3OCwgMTU4MCwgNTIzLCAxNTc4LCAxNTgxLCA1MjMsIDE1NzgsIDE1ODIsIDUyMywgMTU3OCwgMTYwNSwgCisgICAgNTIzLCAxNTc4LCAxNjA5LCA1MjMsIDE1NzgsIDE2MTAsIDUyMywgMTU3OSwgMTU4MCwgNTIzLCAxNTc5LCAxNjA1LCA1MjMsIAorICAgIDE1NzksIDE2MDksIDUyMywgMTU3OSwgMTYxMCwgNTIzLCAxNTgwLCAxNTgxLCA1MjMsIDE1ODAsIDE2MDUsIDUyMywgMTU4MSwgCisgICAgMTU4MCwgNTIzLCAxNTgxLCAxNjA1LCA1MjMsIDE1ODIsIDE1ODAsIDUyMywgMTU4MiwgMTU4MSwgNTIzLCAxNTgyLCAxNjA1LCAKKyAgICA1MjMsIDE1ODcsIDE1ODAsIDUyMywgMTU4NywgMTU4MSwgNTIzLCAxNTg3LCAxNTgyLCA1MjMsIDE1ODcsIDE2MDUsIDUyMywgCisgICAgMTU4OSwgMTU4MSwgNTIzLCAxNTg5LCAxNjA1LCA1MjMsIDE1OTAsIDE1ODAsIDUyMywgMTU5MCwgMTU4MSwgNTIzLCAxNTkwLCAKKyAgICAxNTgyLCA1MjMsIDE1OTAsIDE2MDUsIDUyMywgMTU5MSwgMTU4MSwgNTIzLCAxNTkxLCAxNjA1LCA1MjMsIDE1OTIsIDE2MDUsIAorICAgIDUyMywgMTU5MywgMTU4MCwgNTIzLCAxNTkzLCAxNjA1LCA1MjMsIDE1OTQsIDE1ODAsIDUyMywgMTU5NCwgMTYwNSwgNTIzLCAKKyAgICAxNjAxLCAxNTgwLCA1MjMsIDE2MDEsIDE1ODEsIDUyMywgMTYwMSwgMTU4MiwgNTIzLCAxNjAxLCAxNjA1LCA1MjMsIDE2MDEsIAorICAgIDE2MDksIDUyMywgMTYwMSwgMTYxMCwgNTIzLCAxNjAyLCAxNTgxLCA1MjMsIDE2MDIsIDE2MDUsIDUyMywgMTYwMiwgMTYwOSwgCisgICAgNTIzLCAxNjAyLCAxNjEwLCA1MjMsIDE2MDMsIDE1NzUsIDUyMywgMTYwMywgMTU4MCwgNTIzLCAxNjAzLCAxNTgxLCA1MjMsIAorICAgIDE2MDMsIDE1ODIsIDUyMywgMTYwMywgMTYwNCwgNTIzLCAxNjAzLCAxNjA1LCA1MjMsIDE2MDMsIDE2MDksIDUyMywgMTYwMywgCisgICAgMTYxMCwgNTIzLCAxNjA0LCAxNTgwLCA1MjMsIDE2MDQsIDE1ODEsIDUyMywgMTYwNCwgMTU4MiwgNTIzLCAxNjA0LCAxNjA1LCAKKyAgICA1MjMsIDE2MDQsIDE2MDksIDUyMywgMTYwNCwgMTYxMCwgNTIzLCAxNjA1LCAxNTgwLCA1MjMsIDE2MDUsIDE1ODEsIDUyMywgCisgICAgMTYwNSwgMTU4MiwgNTIzLCAxNjA1LCAxNjA1LCA1MjMsIDE2MDUsIDE2MDksIDUyMywgMTYwNSwgMTYxMCwgNTIzLCAxNjA2LCAKKyAgICAxNTgwLCA1MjMsIDE2MDYsIDE1ODEsIDUyMywgMTYwNiwgMTU4MiwgNTIzLCAxNjA2LCAxNjA1LCA1MjMsIDE2MDYsIDE2MDksIAorICAgIDUyMywgMTYwNiwgMTYxMCwgNTIzLCAxNjA3LCAxNTgwLCA1MjMsIDE2MDcsIDE2MDUsIDUyMywgMTYwNywgMTYwOSwgNTIzLCAKKyAgICAxNjA3LCAxNjEwLCA1MjMsIDE2MTAsIDE1ODAsIDUyMywgMTYxMCwgMTU4MSwgNTIzLCAxNjEwLCAxNTgyLCA1MjMsIDE2MTAsIAorICAgIDE2MDUsIDUyMywgMTYxMCwgMTYwOSwgNTIzLCAxNjEwLCAxNjEwLCA1MjMsIDE1ODQsIDE2NDgsIDUyMywgMTU4NSwgMTY0OCwgCisgICAgNTIzLCAxNjA5LCAxNjQ4LCA3NzksIDMyLCAxNjEyLCAxNjE3LCA3NzksIDMyLCAxNjEzLCAxNjE3LCA3NzksIDMyLCAxNjE0LCAKKyAgICAxNjE3LCA3NzksIDMyLCAxNjE1LCAxNjE3LCA3NzksIDMyLCAxNjE2LCAxNjE3LCA3NzksIDMyLCAxNjE3LCAxNjQ4LCA1MjQsIAorICAgIDE1NzQsIDE1ODUsIDUyNCwgMTU3NCwgMTU4NiwgNTI0LCAxNTc0LCAxNjA1LCA1MjQsIDE1NzQsIDE2MDYsIDUyNCwgMTU3NCwgCisgICAgMTYwOSwgNTI0LCAxNTc0LCAxNjEwLCA1MjQsIDE1NzYsIDE1ODUsIDUyNCwgMTU3NiwgMTU4NiwgNTI0LCAxNTc2LCAxNjA1LCAKKyAgICA1MjQsIDE1NzYsIDE2MDYsIDUyNCwgMTU3NiwgMTYwOSwgNTI0LCAxNTc2LCAxNjEwLCA1MjQsIDE1NzgsIDE1ODUsIDUyNCwgCisgICAgMTU3OCwgMTU4NiwgNTI0LCAxNTc4LCAxNjA1LCA1MjQsIDE1NzgsIDE2MDYsIDUyNCwgMTU3OCwgMTYwOSwgNTI0LCAxNTc4LCAKKyAgICAxNjEwLCA1MjQsIDE1NzksIDE1ODUsIDUyNCwgMTU3OSwgMTU4NiwgNTI0LCAxNTc5LCAxNjA1LCA1MjQsIDE1NzksIDE2MDYsIAorICAgIDUyNCwgMTU3OSwgMTYwOSwgNTI0LCAxNTc5LCAxNjEwLCA1MjQsIDE2MDEsIDE2MDksIDUyNCwgMTYwMSwgMTYxMCwgNTI0LCAKKyAgICAxNjAyLCAxNjA5LCA1MjQsIDE2MDIsIDE2MTAsIDUyNCwgMTYwMywgMTU3NSwgNTI0LCAxNjAzLCAxNjA0LCA1MjQsIDE2MDMsIAorICAgIDE2MDUsIDUyNCwgMTYwMywgMTYwOSwgNTI0LCAxNjAzLCAxNjEwLCA1MjQsIDE2MDQsIDE2MDUsIDUyNCwgMTYwNCwgMTYwOSwgCisgICAgNTI0LCAxNjA0LCAxNjEwLCA1MjQsIDE2MDUsIDE1NzUsIDUyNCwgMTYwNSwgMTYwNSwgNTI0LCAxNjA2LCAxNTg1LCA1MjQsIAorICAgIDE2MDYsIDE1ODYsIDUyNCwgMTYwNiwgMTYwNSwgNTI0LCAxNjA2LCAxNjA2LCA1MjQsIDE2MDYsIDE2MDksIDUyNCwgMTYwNiwgCisgICAgMTYxMCwgNTI0LCAxNjA5LCAxNjQ4LCA1MjQsIDE2MTAsIDE1ODUsIDUyNCwgMTYxMCwgMTU4NiwgNTI0LCAxNjEwLCAxNjA1LCAKKyAgICA1MjQsIDE2MTAsIDE2MDYsIDUyNCwgMTYxMCwgMTYwOSwgNTI0LCAxNjEwLCAxNjEwLCA1MjUsIDE1NzQsIDE1ODAsIDUyNSwgCisgICAgMTU3NCwgMTU4MSwgNTI1LCAxNTc0LCAxNTgyLCA1MjUsIDE1NzQsIDE2MDUsIDUyNSwgMTU3NCwgMTYwNywgNTI1LCAxNTc2LCAKKyAgICAxNTgwLCA1MjUsIDE1NzYsIDE1ODEsIDUyNSwgMTU3NiwgMTU4MiwgNTI1LCAxNTc2LCAxNjA1LCA1MjUsIDE1NzYsIDE2MDcsIAorICAgIDUyNSwgMTU3OCwgMTU4MCwgNTI1LCAxNTc4LCAxNTgxLCA1MjUsIDE1NzgsIDE1ODIsIDUyNSwgMTU3OCwgMTYwNSwgNTI1LCAKKyAgICAxNTc4LCAxNjA3LCA1MjUsIDE1NzksIDE2MDUsIDUyNSwgMTU4MCwgMTU4MSwgNTI1LCAxNTgwLCAxNjA1LCA1MjUsIDE1ODEsIAorICAgIDE1ODAsIDUyNSwgMTU4MSwgMTYwNSwgNTI1LCAxNTgyLCAxNTgwLCA1MjUsIDE1ODIsIDE2MDUsIDUyNSwgMTU4NywgMTU4MCwgCisgICAgNTI1LCAxNTg3LCAxNTgxLCA1MjUsIDE1ODcsIDE1ODIsIDUyNSwgMTU4NywgMTYwNSwgNTI1LCAxNTg5LCAxNTgxLCA1MjUsIAorICAgIDE1ODksIDE1ODIsIDUyNSwgMTU4OSwgMTYwNSwgNTI1LCAxNTkwLCAxNTgwLCA1MjUsIDE1OTAsIDE1ODEsIDUyNSwgMTU5MCwgCisgICAgMTU4MiwgNTI1LCAxNTkwLCAxNjA1LCA1MjUsIDE1OTEsIDE1ODEsIDUyNSwgMTU5MiwgMTYwNSwgNTI1LCAxNTkzLCAxNTgwLCAKKyAgICA1MjUsIDE1OTMsIDE2MDUsIDUyNSwgMTU5NCwgMTU4MCwgNTI1LCAxNTk0LCAxNjA1LCA1MjUsIDE2MDEsIDE1ODAsIDUyNSwgCisgICAgMTYwMSwgMTU4MSwgNTI1LCAxNjAxLCAxNTgyLCA1MjUsIDE2MDEsIDE2MDUsIDUyNSwgMTYwMiwgMTU4MSwgNTI1LCAxNjAyLCAKKyAgICAxNjA1LCA1MjUsIDE2MDMsIDE1ODAsIDUyNSwgMTYwMywgMTU4MSwgNTI1LCAxNjAzLCAxNTgyLCA1MjUsIDE2MDMsIDE2MDQsIAorICAgIDUyNSwgMTYwMywgMTYwNSwgNTI1LCAxNjA0LCAxNTgwLCA1MjUsIDE2MDQsIDE1ODEsIDUyNSwgMTYwNCwgMTU4MiwgNTI1LCAKKyAgICAxNjA0LCAxNjA1LCA1MjUsIDE2MDQsIDE2MDcsIDUyNSwgMTYwNSwgMTU4MCwgNTI1LCAxNjA1LCAxNTgxLCA1MjUsIDE2MDUsIAorICAgIDE1ODIsIDUyNSwgMTYwNSwgMTYwNSwgNTI1LCAxNjA2LCAxNTgwLCA1MjUsIDE2MDYsIDE1ODEsIDUyNSwgMTYwNiwgMTU4MiwgCisgICAgNTI1LCAxNjA2LCAxNjA1LCA1MjUsIDE2MDYsIDE2MDcsIDUyNSwgMTYwNywgMTU4MCwgNTI1LCAxNjA3LCAxNjA1LCA1MjUsIAorICAgIDE2MDcsIDE2NDgsIDUyNSwgMTYxMCwgMTU4MCwgNTI1LCAxNjEwLCAxNTgxLCA1MjUsIDE2MTAsIDE1ODIsIDUyNSwgMTYxMCwgCisgICAgMTYwNSwgNTI1LCAxNjEwLCAxNjA3LCA1MjYsIDE1NzQsIDE2MDUsIDUyNiwgMTU3NCwgMTYwNywgNTI2LCAxNTc2LCAxNjA1LCAKKyAgICA1MjYsIDE1NzYsIDE2MDcsIDUyNiwgMTU3OCwgMTYwNSwgNTI2LCAxNTc4LCAxNjA3LCA1MjYsIDE1NzksIDE2MDUsIDUyNiwgCisgICAgMTU3OSwgMTYwNywgNTI2LCAxNTg3LCAxNjA1LCA1MjYsIDE1ODcsIDE2MDcsIDUyNiwgMTU4OCwgMTYwNSwgNTI2LCAxNTg4LCAKKyAgICAxNjA3LCA1MjYsIDE2MDMsIDE2MDQsIDUyNiwgMTYwMywgMTYwNSwgNTI2LCAxNjA0LCAxNjA1LCA1MjYsIDE2MDYsIDE2MDUsIAorICAgIDUyNiwgMTYwNiwgMTYwNywgNTI2LCAxNjEwLCAxNjA1LCA1MjYsIDE2MTAsIDE2MDcsIDc4MiwgMTYwMCwgMTYxNCwgMTYxNywgCisgICAgNzgyLCAxNjAwLCAxNjE1LCAxNjE3LCA3ODIsIDE2MDAsIDE2MTYsIDE2MTcsIDUyMywgMTU5MSwgMTYwOSwgNTIzLCAxNTkxLCAKKyAgICAxNjEwLCA1MjMsIDE1OTMsIDE2MDksIDUyMywgMTU5MywgMTYxMCwgNTIzLCAxNTk0LCAxNjA5LCA1MjMsIDE1OTQsIDE2MTAsIAorICAgIDUyMywgMTU4NywgMTYwOSwgNTIzLCAxNTg3LCAxNjEwLCA1MjMsIDE1ODgsIDE2MDksIDUyMywgMTU4OCwgMTYxMCwgNTIzLCAKKyAgICAxNTgxLCAxNjA5LCA1MjMsIDE1ODEsIDE2MTAsIDUyMywgMTU4MCwgMTYwOSwgNTIzLCAxNTgwLCAxNjEwLCA1MjMsIDE1ODIsIAorICAgIDE2MDksIDUyMywgMTU4MiwgMTYxMCwgNTIzLCAxNTg5LCAxNjA5LCA1MjMsIDE1ODksIDE2MTAsIDUyMywgMTU5MCwgMTYwOSwgCisgICAgNTIzLCAxNTkwLCAxNjEwLCA1MjMsIDE1ODgsIDE1ODAsIDUyMywgMTU4OCwgMTU4MSwgNTIzLCAxNTg4LCAxNTgyLCA1MjMsIAorICAgIDE1ODgsIDE2MDUsIDUyMywgMTU4OCwgMTU4NSwgNTIzLCAxNTg3LCAxNTg1LCA1MjMsIDE1ODksIDE1ODUsIDUyMywgMTU5MCwgCisgICAgMTU4NSwgNTI0LCAxNTkxLCAxNjA5LCA1MjQsIDE1OTEsIDE2MTAsIDUyNCwgMTU5MywgMTYwOSwgNTI0LCAxNTkzLCAxNjEwLCAKKyAgICA1MjQsIDE1OTQsIDE2MDksIDUyNCwgMTU5NCwgMTYxMCwgNTI0LCAxNTg3LCAxNjA5LCA1MjQsIDE1ODcsIDE2MTAsIDUyNCwgCisgICAgMTU4OCwgMTYwOSwgNTI0LCAxNTg4LCAxNjEwLCA1MjQsIDE1ODEsIDE2MDksIDUyNCwgMTU4MSwgMTYxMCwgNTI0LCAxNTgwLCAKKyAgICAxNjA5LCA1MjQsIDE1ODAsIDE2MTAsIDUyNCwgMTU4MiwgMTYwOSwgNTI0LCAxNTgyLCAxNjEwLCA1MjQsIDE1ODksIDE2MDksIAorICAgIDUyNCwgMTU4OSwgMTYxMCwgNTI0LCAxNTkwLCAxNjA5LCA1MjQsIDE1OTAsIDE2MTAsIDUyNCwgMTU4OCwgMTU4MCwgNTI0LCAKKyAgICAxNTg4LCAxNTgxLCA1MjQsIDE1ODgsIDE1ODIsIDUyNCwgMTU4OCwgMTYwNSwgNTI0LCAxNTg4LCAxNTg1LCA1MjQsIDE1ODcsIAorICAgIDE1ODUsIDUyNCwgMTU4OSwgMTU4NSwgNTI0LCAxNTkwLCAxNTg1LCA1MjUsIDE1ODgsIDE1ODAsIDUyNSwgMTU4OCwgMTU4MSwgCisgICAgNTI1LCAxNTg4LCAxNTgyLCA1MjUsIDE1ODgsIDE2MDUsIDUyNSwgMTU4NywgMTYwNywgNTI1LCAxNTg4LCAxNjA3LCA1MjUsIAorICAgIDE1OTEsIDE2MDUsIDUyNiwgMTU4NywgMTU4MCwgNTI2LCAxNTg3LCAxNTgxLCA1MjYsIDE1ODcsIDE1ODIsIDUyNiwgMTU4OCwgCisgICAgMTU4MCwgNTI2LCAxNTg4LCAxNTgxLCA1MjYsIDE1ODgsIDE1ODIsIDUyNiwgMTU5MSwgMTYwNSwgNTI2LCAxNTkyLCAxNjA1LCAKKyAgICA1MjQsIDE1NzUsIDE2MTEsIDUyMywgMTU3NSwgMTYxMSwgNzgxLCAxNTc4LCAxNTgwLCAxNjA1LCA3ODAsIDE1NzgsIDE1ODEsIAorICAgIDE1ODAsIDc4MSwgMTU3OCwgMTU4MSwgMTU4MCwgNzgxLCAxNTc4LCAxNTgxLCAxNjA1LCA3ODEsIDE1NzgsIDE1ODIsIAorICAgIDE2MDUsIDc4MSwgMTU3OCwgMTYwNSwgMTU4MCwgNzgxLCAxNTc4LCAxNjA1LCAxNTgxLCA3ODEsIDE1NzgsIDE2MDUsIAorICAgIDE1ODIsIDc4MCwgMTU4MCwgMTYwNSwgMTU4MSwgNzgxLCAxNTgwLCAxNjA1LCAxNTgxLCA3ODAsIDE1ODEsIDE2MDUsIAorICAgIDE2MTAsIDc4MCwgMTU4MSwgMTYwNSwgMTYwOSwgNzgxLCAxNTg3LCAxNTgxLCAxNTgwLCA3ODEsIDE1ODcsIDE1ODAsIAorICAgIDE1ODEsIDc4MCwgMTU4NywgMTU4MCwgMTYwOSwgNzgwLCAxNTg3LCAxNjA1LCAxNTgxLCA3ODEsIDE1ODcsIDE2MDUsIAorICAgIDE1ODEsIDc4MSwgMTU4NywgMTYwNSwgMTU4MCwgNzgwLCAxNTg3LCAxNjA1LCAxNjA1LCA3ODEsIDE1ODcsIDE2MDUsIAorICAgIDE2MDUsIDc4MCwgMTU4OSwgMTU4MSwgMTU4MSwgNzgxLCAxNTg5LCAxNTgxLCAxNTgxLCA3ODAsIDE1ODksIDE2MDUsIAorICAgIDE2MDUsIDc4MCwgMTU4OCwgMTU4MSwgMTYwNSwgNzgxLCAxNTg4LCAxNTgxLCAxNjA1LCA3ODAsIDE1ODgsIDE1ODAsIAorICAgIDE2MTAsIDc4MCwgMTU4OCwgMTYwNSwgMTU4MiwgNzgxLCAxNTg4LCAxNjA1LCAxNTgyLCA3ODAsIDE1ODgsIDE2MDUsIAorICAgIDE2MDUsIDc4MSwgMTU4OCwgMTYwNSwgMTYwNSwgNzgwLCAxNTkwLCAxNTgxLCAxNjA5LCA3ODAsIDE1OTAsIDE1ODIsIAorICAgIDE2MDUsIDc4MSwgMTU5MCwgMTU4MiwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNTgxLCA3ODEsIDE1OTEsIDE2MDUsIAorICAgIDE1ODEsIDc4MSwgMTU5MSwgMTYwNSwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNjEwLCA3ODAsIDE1OTMsIDE1ODAsIAorICAgIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIAorICAgIDE2MDksIDc4MCwgMTU5NCwgMTYwNSwgMTYwNSwgNzgwLCAxNTk0LCAxNjA1LCAxNjEwLCA3ODAsIDE1OTQsIDE2MDUsIAorICAgIDE2MDksIDc4MCwgMTYwMSwgMTU4MiwgMTYwNSwgNzgxLCAxNjAxLCAxNTgyLCAxNjA1LCA3ODAsIDE2MDIsIDE2MDUsIAorICAgIDE1ODEsIDc4MCwgMTYwMiwgMTYwNSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIAorICAgIDE2MTAsIDc4MCwgMTYwNCwgMTU4MSwgMTYwOSwgNzgxLCAxNjA0LCAxNTgwLCAxNTgwLCA3ODAsIDE2MDQsIDE1ODAsIAorICAgIDE1ODAsIDc4MCwgMTYwNCwgMTU4MiwgMTYwNSwgNzgxLCAxNjA0LCAxNTgyLCAxNjA1LCA3ODAsIDE2MDQsIDE2MDUsIAorICAgIDE1ODEsIDc4MSwgMTYwNCwgMTYwNSwgMTU4MSwgNzgxLCAxNjA1LCAxNTgxLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODEsIAorICAgIDE2MDUsIDc4MCwgMTYwNSwgMTU4MSwgMTYxMCwgNzgxLCAxNjA1LCAxNTgwLCAxNTgxLCA3ODEsIDE2MDUsIDE1ODAsIAorICAgIDE2MDUsIDc4MSwgMTYwNSwgMTU4MiwgMTU4MCwgNzgxLCAxNjA1LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDUsIDE1ODAsIAorICAgIDE1ODIsIDc4MSwgMTYwNywgMTYwNSwgMTU4MCwgNzgxLCAxNjA3LCAxNjA1LCAxNjA1LCA3ODEsIDE2MDYsIDE1ODEsIAorICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MSwgMTYwOSwgNzgwLCAxNjA2LCAxNTgwLCAxNjA1LCA3ODEsIDE2MDYsIDE1ODAsIAorICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MCwgMTYwOSwgNzgwLCAxNjA2LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE2MDUsIAorICAgIDE2MDksIDc4MCwgMTYxMCwgMTYwNSwgMTYwNSwgNzgxLCAxNjEwLCAxNjA1LCAxNjA1LCA3ODAsIDE1NzYsIDE1ODIsIAorICAgIDE2MTAsIDc4MCwgMTU3OCwgMTU4MCwgMTYxMCwgNzgwLCAxNTc4LCAxNTgwLCAxNjA5LCA3ODAsIDE1NzgsIDE1ODIsIAorICAgIDE2MTAsIDc4MCwgMTU3OCwgMTU4MiwgMTYwOSwgNzgwLCAxNTc4LCAxNjA1LCAxNjEwLCA3ODAsIDE1NzgsIDE2MDUsIAorICAgIDE2MDksIDc4MCwgMTU4MCwgMTYwNSwgMTYxMCwgNzgwLCAxNTgwLCAxNTgxLCAxNjA5LCA3ODAsIDE1ODAsIDE2MDUsIAorICAgIDE2MDksIDc4MCwgMTU4NywgMTU4MiwgMTYwOSwgNzgwLCAxNTg5LCAxNTgxLCAxNjEwLCA3ODAsIDE1ODgsIDE1ODEsIAorICAgIDE2MTAsIDc4MCwgMTU5MCwgMTU4MSwgMTYxMCwgNzgwLCAxNjA0LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDQsIDE2MDUsIAorICAgIDE2MTAsIDc4MCwgMTYxMCwgMTU4MSwgMTYxMCwgNzgwLCAxNjEwLCAxNTgwLCAxNjEwLCA3ODAsIDE2MTAsIDE2MDUsIAorICAgIDE2MTAsIDc4MCwgMTYwNSwgMTYwNSwgMTYxMCwgNzgwLCAxNjAyLCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE1ODEsIAorICAgIDE2MTAsIDc4MSwgMTYwMiwgMTYwNSwgMTU4MSwgNzgxLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIAorICAgIDE2MTAsIDc4MCwgMTYwMywgMTYwNSwgMTYxMCwgNzgxLCAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE2MDUsIDE1ODIsIAorICAgIDE2MTAsIDc4MSwgMTYwNCwgMTU4MCwgMTYwNSwgNzgwLCAxNjAzLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODAsIAorICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MCwgMTU4MSwgNzgwLCAxNTgwLCAxNTgxLCAxNjEwLCA3ODAsIDE1ODEsIDE1ODAsIAorICAgIDE2MTAsIDc4MCwgMTYwNSwgMTU4MCwgMTYxMCwgNzgwLCAxNjAxLCAxNjA1LCAxNjEwLCA3ODAsIDE1NzYsIDE1ODEsIAorICAgIDE2MTAsIDc4MSwgMTYwMywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNTgwLCAxNjA1LCA3ODEsIDE1ODksIDE2MDUsIAorICAgIDE2MDUsIDc4MCwgMTU4NywgMTU4MiwgMTYxMCwgNzgwLCAxNjA2LCAxNTgwLCAxNjEwLCA3NzksIDE1ODksIDE2MDQsIAorICAgIDE3NDYsIDc3OSwgMTYwMiwgMTYwNCwgMTc0NiwgMTAzNSwgMTU3NSwgMTYwNCwgMTYwNCwgMTYwNywgMTAzNSwgMTU3NSwgCisgICAgMTYwMywgMTU3NiwgMTU4NSwgMTAzNSwgMTYwNSwgMTU4MSwgMTYwNSwgMTU4MywgMTAzNSwgMTU4OSwgMTYwNCwgMTU5MywgCisgICAgMTYwNSwgMTAzNSwgMTU4NSwgMTU4NywgMTYwOCwgMTYwNCwgMTAzNSwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMTAzNSwgCisgICAgMTYwOCwgMTU4NywgMTYwNCwgMTYwNSwgNzc5LCAxNTg5LCAxNjA0LCAxNjA5LCA0NjE5LCAxNTg5LCAxNjA0LCAxNjA5LCAKKyAgICAzMiwgMTU3NSwgMTYwNCwgMTYwNCwgMTYwNywgMzIsIDE1OTMsIDE2MDQsIDE2MTAsIDE2MDcsIDMyLCAxNjA4LCAxNTg3LCAKKyAgICAxNjA0LCAxNjA1LCAyMDU5LCAxNTgwLCAxNjA0LCAzMiwgMTU4MCwgMTYwNCwgMTU3NSwgMTYwNCwgMTYwNywgMTAzNSwgCisgICAgMTU4NSwgMTc0MCwgMTU3NSwgMTYwNCwgMjY1LCA0NCwgMjY1LCAxMjI4OSwgMjY1LCAxMjI5MCwgMjY1LCA1OCwgMjY1LCAKKyAgICA1OSwgMjY1LCAzMywgMjY1LCA2MywgMjY1LCAxMjMxMCwgMjY1LCAxMjMxMSwgMjY1LCA4MjMwLCAyNjUsIDgyMjksIDI2NSwgCisgICAgODIxMiwgMjY1LCA4MjExLCAyNjUsIDk1LCAyNjUsIDk1LCAyNjUsIDQwLCAyNjUsIDQxLCAyNjUsIDEyMywgMjY1LCAxMjUsIAorICAgIDI2NSwgMTIzMDgsIDI2NSwgMTIzMDksIDI2NSwgMTIzMDQsIDI2NSwgMTIzMDUsIDI2NSwgMTIyOTgsIDI2NSwgMTIyOTksIAorICAgIDI2NSwgMTIyOTYsIDI2NSwgMTIyOTcsIDI2NSwgMTIzMDAsIDI2NSwgMTIzMDEsIDI2NSwgMTIzMDIsIDI2NSwgMTIzMDMsIAorICAgIDI2NSwgOTEsIDI2NSwgOTMsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA5NSwgCisgICAgMjU4LCA5NSwgMjU4LCA5NSwgMjcxLCA0NCwgMjcxLCAxMjI4OSwgMjcxLCA0NiwgMjcxLCA1OSwgMjcxLCA1OCwgMjcxLCAKKyAgICA2MywgMjcxLCAzMywgMjcxLCA4MjEyLCAyNzEsIDQwLCAyNzEsIDQxLCAyNzEsIDEyMywgMjcxLCAxMjUsIDI3MSwgMTIzMDgsIAorICAgIDI3MSwgMTIzMDksIDI3MSwgMzUsIDI3MSwgMzgsIDI3MSwgNDIsIDI3MSwgNDMsIDI3MSwgNDUsIDI3MSwgNjAsIDI3MSwgCisgICAgNjIsIDI3MSwgNjEsIDI3MSwgOTIsIDI3MSwgMzYsIDI3MSwgMzcsIDI3MSwgNjQsIDUyMywgMzIsIDE2MTEsIDUyNiwgCisgICAgMTYwMCwgMTYxMSwgNTIzLCAzMiwgMTYxMiwgNTIzLCAzMiwgMTYxMywgNTIzLCAzMiwgMTYxNCwgNTI2LCAxNjAwLCAxNjE0LCAKKyAgICA1MjMsIDMyLCAxNjE1LCA1MjYsIDE2MDAsIDE2MTUsIDUyMywgMzIsIDE2MTYsIDUyNiwgMTYwMCwgMTYxNiwgNTIzLCAzMiwgCisgICAgMTYxNywgNTI2LCAxNjAwLCAxNjE3LCA1MjMsIDMyLCAxNjE4LCA1MjYsIDE2MDAsIDE2MTgsIDI2NywgMTU2OSwgMjY3LCAKKyAgICAxNTcwLCAyNjgsIDE1NzAsIDI2NywgMTU3MSwgMjY4LCAxNTcxLCAyNjcsIDE1NzIsIDI2OCwgMTU3MiwgMjY3LCAxNTczLCAKKyAgICAyNjgsIDE1NzMsIDI2NywgMTU3NCwgMjY4LCAxNTc0LCAyNjksIDE1NzQsIDI3MCwgMTU3NCwgMjY3LCAxNTc1LCAyNjgsIAorICAgIDE1NzUsIDI2NywgMTU3NiwgMjY4LCAxNTc2LCAyNjksIDE1NzYsIDI3MCwgMTU3NiwgMjY3LCAxNTc3LCAyNjgsIDE1NzcsIAorICAgIDI2NywgMTU3OCwgMjY4LCAxNTc4LCAyNjksIDE1NzgsIDI3MCwgMTU3OCwgMjY3LCAxNTc5LCAyNjgsIDE1NzksIDI2OSwgCisgICAgMTU3OSwgMjcwLCAxNTc5LCAyNjcsIDE1ODAsIDI2OCwgMTU4MCwgMjY5LCAxNTgwLCAyNzAsIDE1ODAsIDI2NywgMTU4MSwgCisgICAgMjY4LCAxNTgxLCAyNjksIDE1ODEsIDI3MCwgMTU4MSwgMjY3LCAxNTgyLCAyNjgsIDE1ODIsIDI2OSwgMTU4MiwgMjcwLCAKKyAgICAxNTgyLCAyNjcsIDE1ODMsIDI2OCwgMTU4MywgMjY3LCAxNTg0LCAyNjgsIDE1ODQsIDI2NywgMTU4NSwgMjY4LCAxNTg1LCAKKyAgICAyNjcsIDE1ODYsIDI2OCwgMTU4NiwgMjY3LCAxNTg3LCAyNjgsIDE1ODcsIDI2OSwgMTU4NywgMjcwLCAxNTg3LCAyNjcsIAorICAgIDE1ODgsIDI2OCwgMTU4OCwgMjY5LCAxNTg4LCAyNzAsIDE1ODgsIDI2NywgMTU4OSwgMjY4LCAxNTg5LCAyNjksIDE1ODksIAorICAgIDI3MCwgMTU4OSwgMjY3LCAxNTkwLCAyNjgsIDE1OTAsIDI2OSwgMTU5MCwgMjcwLCAxNTkwLCAyNjcsIDE1OTEsIDI2OCwgCisgICAgMTU5MSwgMjY5LCAxNTkxLCAyNzAsIDE1OTEsIDI2NywgMTU5MiwgMjY4LCAxNTkyLCAyNjksIDE1OTIsIDI3MCwgMTU5MiwgCisgICAgMjY3LCAxNTkzLCAyNjgsIDE1OTMsIDI2OSwgMTU5MywgMjcwLCAxNTkzLCAyNjcsIDE1OTQsIDI2OCwgMTU5NCwgMjY5LCAKKyAgICAxNTk0LCAyNzAsIDE1OTQsIDI2NywgMTYwMSwgMjY4LCAxNjAxLCAyNjksIDE2MDEsIDI3MCwgMTYwMSwgMjY3LCAxNjAyLCAKKyAgICAyNjgsIDE2MDIsIDI2OSwgMTYwMiwgMjcwLCAxNjAyLCAyNjcsIDE2MDMsIDI2OCwgMTYwMywgMjY5LCAxNjAzLCAyNzAsIAorICAgIDE2MDMsIDI2NywgMTYwNCwgMjY4LCAxNjA0LCAyNjksIDE2MDQsIDI3MCwgMTYwNCwgMjY3LCAxNjA1LCAyNjgsIDE2MDUsIAorICAgIDI2OSwgMTYwNSwgMjcwLCAxNjA1LCAyNjcsIDE2MDYsIDI2OCwgMTYwNiwgMjY5LCAxNjA2LCAyNzAsIDE2MDYsIDI2NywgCisgICAgMTYwNywgMjY4LCAxNjA3LCAyNjksIDE2MDcsIDI3MCwgMTYwNywgMjY3LCAxNjA4LCAyNjgsIDE2MDgsIDI2NywgMTYwOSwgCisgICAgMjY4LCAxNjA5LCAyNjcsIDE2MTAsIDI2OCwgMTYxMCwgMjY5LCAxNjEwLCAyNzAsIDE2MTAsIDUyMywgMTYwNCwgMTU3MCwgCisgICAgNTI0LCAxNjA0LCAxNTcwLCA1MjMsIDE2MDQsIDE1NzEsIDUyNCwgMTYwNCwgMTU3MSwgNTIzLCAxNjA0LCAxNTczLCA1MjQsIAorICAgIDE2MDQsIDE1NzMsIDUyMywgMTYwNCwgMTU3NSwgNTI0LCAxNjA0LCAxNTc1LCAyNjQsIDMzLCAyNjQsIDM0LCAyNjQsIDM1LCAKKyAgICAyNjQsIDM2LCAyNjQsIDM3LCAyNjQsIDM4LCAyNjQsIDM5LCAyNjQsIDQwLCAyNjQsIDQxLCAyNjQsIDQyLCAyNjQsIDQzLCAKKyAgICAyNjQsIDQ0LCAyNjQsIDQ1LCAyNjQsIDQ2LCAyNjQsIDQ3LCAyNjQsIDQ4LCAyNjQsIDQ5LCAyNjQsIDUwLCAyNjQsIDUxLCAKKyAgICAyNjQsIDUyLCAyNjQsIDUzLCAyNjQsIDU0LCAyNjQsIDU1LCAyNjQsIDU2LCAyNjQsIDU3LCAyNjQsIDU4LCAyNjQsIDU5LCAKKyAgICAyNjQsIDYwLCAyNjQsIDYxLCAyNjQsIDYyLCAyNjQsIDYzLCAyNjQsIDY0LCAyNjQsIDY1LCAyNjQsIDY2LCAyNjQsIDY3LCAKKyAgICAyNjQsIDY4LCAyNjQsIDY5LCAyNjQsIDcwLCAyNjQsIDcxLCAyNjQsIDcyLCAyNjQsIDczLCAyNjQsIDc0LCAyNjQsIDc1LCAKKyAgICAyNjQsIDc2LCAyNjQsIDc3LCAyNjQsIDc4LCAyNjQsIDc5LCAyNjQsIDgwLCAyNjQsIDgxLCAyNjQsIDgyLCAyNjQsIDgzLCAKKyAgICAyNjQsIDg0LCAyNjQsIDg1LCAyNjQsIDg2LCAyNjQsIDg3LCAyNjQsIDg4LCAyNjQsIDg5LCAyNjQsIDkwLCAyNjQsIDkxLCAKKyAgICAyNjQsIDkyLCAyNjQsIDkzLCAyNjQsIDk0LCAyNjQsIDk1LCAyNjQsIDk2LCAyNjQsIDk3LCAyNjQsIDk4LCAyNjQsIDk5LCAKKyAgICAyNjQsIDEwMCwgMjY0LCAxMDEsIDI2NCwgMTAyLCAyNjQsIDEwMywgMjY0LCAxMDQsIDI2NCwgMTA1LCAyNjQsIDEwNiwgCisgICAgMjY0LCAxMDcsIDI2NCwgMTA4LCAyNjQsIDEwOSwgMjY0LCAxMTAsIDI2NCwgMTExLCAyNjQsIDExMiwgMjY0LCAxMTMsIAorICAgIDI2NCwgMTE0LCAyNjQsIDExNSwgMjY0LCAxMTYsIDI2NCwgMTE3LCAyNjQsIDExOCwgMjY0LCAxMTksIDI2NCwgMTIwLCAKKyAgICAyNjQsIDEyMSwgMjY0LCAxMjIsIDI2NCwgMTIzLCAyNjQsIDEyNCwgMjY0LCAxMjUsIDI2NCwgMTI2LCAyNjQsIDEwNjI5LCAKKyAgICAyNjQsIDEwNjMwLCAyNzIsIDEyMjkwLCAyNzIsIDEyMzAwLCAyNzIsIDEyMzAxLCAyNzIsIDEyMjg5LCAyNzIsIDEyNTM5LCAKKyAgICAyNzIsIDEyNTMwLCAyNzIsIDEyNDQ5LCAyNzIsIDEyNDUxLCAyNzIsIDEyNDUzLCAyNzIsIDEyNDU1LCAyNzIsIDEyNDU3LCAKKyAgICAyNzIsIDEyNTE1LCAyNzIsIDEyNTE3LCAyNzIsIDEyNTE5LCAyNzIsIDEyNDgzLCAyNzIsIDEyNTQwLCAyNzIsIDEyNDUwLCAKKyAgICAyNzIsIDEyNDUyLCAyNzIsIDEyNDU0LCAyNzIsIDEyNDU2LCAyNzIsIDEyNDU4LCAyNzIsIDEyNDU5LCAyNzIsIDEyNDYxLCAKKyAgICAyNzIsIDEyNDYzLCAyNzIsIDEyNDY1LCAyNzIsIDEyNDY3LCAyNzIsIDEyNDY5LCAyNzIsIDEyNDcxLCAyNzIsIDEyNDczLCAKKyAgICAyNzIsIDEyNDc1LCAyNzIsIDEyNDc3LCAyNzIsIDEyNDc5LCAyNzIsIDEyNDgxLCAyNzIsIDEyNDg0LCAyNzIsIDEyNDg2LCAKKyAgICAyNzIsIDEyNDg4LCAyNzIsIDEyNDkwLCAyNzIsIDEyNDkxLCAyNzIsIDEyNDkyLCAyNzIsIDEyNDkzLCAyNzIsIDEyNDk0LCAKKyAgICAyNzIsIDEyNDk1LCAyNzIsIDEyNDk4LCAyNzIsIDEyNTAxLCAyNzIsIDEyNTA0LCAyNzIsIDEyNTA3LCAyNzIsIDEyNTEwLCAKKyAgICAyNzIsIDEyNTExLCAyNzIsIDEyNTEyLCAyNzIsIDEyNTEzLCAyNzIsIDEyNTE0LCAyNzIsIDEyNTE2LCAyNzIsIDEyNTE4LCAKKyAgICAyNzIsIDEyNTIwLCAyNzIsIDEyNTIxLCAyNzIsIDEyNTIyLCAyNzIsIDEyNTIzLCAyNzIsIDEyNTI0LCAyNzIsIDEyNTI1LCAKKyAgICAyNzIsIDEyNTI3LCAyNzIsIDEyNTMxLCAyNzIsIDEyNDQxLCAyNzIsIDEyNDQyLCAyNzIsIDEyNjQ0LCAyNzIsIDEyNTkzLCAKKyAgICAyNzIsIDEyNTk0LCAyNzIsIDEyNTk1LCAyNzIsIDEyNTk2LCAyNzIsIDEyNTk3LCAyNzIsIDEyNTk4LCAyNzIsIDEyNTk5LCAKKyAgICAyNzIsIDEyNjAwLCAyNzIsIDEyNjAxLCAyNzIsIDEyNjAyLCAyNzIsIDEyNjAzLCAyNzIsIDEyNjA0LCAyNzIsIDEyNjA1LCAKKyAgICAyNzIsIDEyNjA2LCAyNzIsIDEyNjA3LCAyNzIsIDEyNjA4LCAyNzIsIDEyNjA5LCAyNzIsIDEyNjEwLCAyNzIsIDEyNjExLCAKKyAgICAyNzIsIDEyNjEyLCAyNzIsIDEyNjEzLCAyNzIsIDEyNjE0LCAyNzIsIDEyNjE1LCAyNzIsIDEyNjE2LCAyNzIsIDEyNjE3LCAKKyAgICAyNzIsIDEyNjE4LCAyNzIsIDEyNjE5LCAyNzIsIDEyNjIwLCAyNzIsIDEyNjIxLCAyNzIsIDEyNjIyLCAyNzIsIDEyNjIzLCAKKyAgICAyNzIsIDEyNjI0LCAyNzIsIDEyNjI1LCAyNzIsIDEyNjI2LCAyNzIsIDEyNjI3LCAyNzIsIDEyNjI4LCAyNzIsIDEyNjI5LCAKKyAgICAyNzIsIDEyNjMwLCAyNzIsIDEyNjMxLCAyNzIsIDEyNjMyLCAyNzIsIDEyNjMzLCAyNzIsIDEyNjM0LCAyNzIsIDEyNjM1LCAKKyAgICAyNzIsIDEyNjM2LCAyNzIsIDEyNjM3LCAyNzIsIDEyNjM4LCAyNzIsIDEyNjM5LCAyNzIsIDEyNjQwLCAyNzIsIDEyNjQxLCAKKyAgICAyNzIsIDEyNjQyLCAyNzIsIDEyNjQzLCAyNjQsIDE2MiwgMjY0LCAxNjMsIDI2NCwgMTcyLCAyNjQsIDE3NSwgMjY0LCAxNjYsIAorICAgIDI2NCwgMTY1LCAyNjQsIDgzNjEsIDI3MiwgOTQ3NCwgMjcyLCA4NTkyLCAyNzIsIDg1OTMsIDI3MiwgODU5NCwgMjcyLCAKKyAgICA4NTk1LCAyNzIsIDk2MzIsIDI3MiwgOTY3NSwgNTEyLCA2OTc4NSwgNjk4MTgsIDUxMiwgNjk3ODcsIDY5ODE4LCA1MTIsIAorICAgIDY5Nzk3LCA2OTgxOCwgNTEyLCAxMTkxMjcsIDExOTE0MSwgNTEyLCAxMTkxMjgsIDExOTE0MSwgNTEyLCAxMTkxMzUsIAogICAgIDExOTE1MCwgNTEyLCAxMTkxMzUsIDExOTE1MSwgNTEyLCAxMTkxMzUsIDExOTE1MiwgNTEyLCAxMTkxMzUsIDExOTE1MywgCiAgICAgNTEyLCAxMTkxMzUsIDExOTE1NCwgNTEyLCAxMTkyMjUsIDExOTE0MSwgNTEyLCAxMTkyMjYsIDExOTE0MSwgNTEyLCAKICAgICAxMTkyMjcsIDExOTE1MCwgNTEyLCAxMTkyMjgsIDExOTE1MCwgNTEyLCAxMTkyMjcsIDExOTE1MSwgNTEyLCAxMTkyMjgsIApAQCAtMzA0OSw3MSArMzQwNyw5MSBAQAogICAgIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIAogICAgIDI2MiwgNTcsIDI2MiwgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIAogICAgIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDI2MiwgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIAotICAgIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDI1NiwgMjAwMjksIDI1NiwgMjAwMjQsIDI1NiwgCi0gICAgMjAwMzMsIDI1NiwgMTMxMzYyLCAyNTYsIDIwMzIwLCAyNTYsIDIwMzk4LCAyNTYsIDIwNDExLCAyNTYsIDIwNDgyLCAyNTYsIAotICAgIDIwNjAyLCAyNTYsIDIwNjMzLCAyNTYsIDIwNzExLCAyNTYsIDIwNjg3LCAyNTYsIDEzNDcwLCAyNTYsIDEzMjY2NiwgMjU2LCAKLSAgICAyMDgxMywgMjU2LCAyMDgyMCwgMjU2LCAyMDgzNiwgMjU2LCAyMDg1NSwgMjU2LCAxMzIzODAsIDI1NiwgMTM0OTcsIDI1NiwgCi0gICAgMjA4MzksIDI1NiwgMjA4NzcsIDI1NiwgMTMyNDI3LCAyNTYsIDIwODg3LCAyNTYsIDIwOTAwLCAyNTYsIDIwMTcyLCAyNTYsIAotICAgIDIwOTA4LCAyNTYsIDIwOTE3LCAyNTYsIDE2ODQxNSwgMjU2LCAyMDk4MSwgMjU2LCAyMDk5NSwgMjU2LCAxMzUzNSwgMjU2LCAKLSAgICAyMTA1MSwgMjU2LCAyMTA2MiwgMjU2LCAyMTEwNiwgMjU2LCAyMTExMSwgMjU2LCAxMzU4OSwgMjU2LCAyMTE5MSwgMjU2LCAKLSAgICAyMTE5MywgMjU2LCAyMTIyMCwgMjU2LCAyMTI0MiwgMjU2LCAyMTI1MywgMjU2LCAyMTI1NCwgMjU2LCAyMTI3MSwgMjU2LCAKLSAgICAyMTMyMSwgMjU2LCAyMTMyOSwgMjU2LCAyMTMzOCwgMjU2LCAyMTM2MywgMjU2LCAyMTM3MywgMjU2LCAyMTM3NSwgMjU2LCAKLSAgICAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAxMzM2NzYsIDI1NiwgMjg3ODQsIDI1NiwgMjE0NTAsIDI1NiwgMjE0NzEsIDI1NiwgCi0gICAgMTMzOTg3LCAyNTYsIDIxNDgzLCAyNTYsIDIxNDg5LCAyNTYsIDIxNTEwLCAyNTYsIDIxNjYyLCAyNTYsIDIxNTYwLCAyNTYsIAotICAgIDIxNTc2LCAyNTYsIDIxNjA4LCAyNTYsIDIxNjY2LCAyNTYsIDIxNzUwLCAyNTYsIDIxNzc2LCAyNTYsIDIxODQzLCAyNTYsIAotICAgIDIxODU5LCAyNTYsIDIxODkyLCAyNTYsIDIxODkyLCAyNTYsIDIxOTEzLCAyNTYsIDIxOTMxLCAyNTYsIDIxOTM5LCAyNTYsIAotICAgIDIxOTU0LCAyNTYsIDIyMjk0LCAyNTYsIDIyMDIyLCAyNTYsIDIyMjk1LCAyNTYsIDIyMDk3LCAyNTYsIDIyMTMyLCAyNTYsIAotICAgIDIwOTk5LCAyNTYsIDIyNzY2LCAyNTYsIDIyNDc4LCAyNTYsIDIyNTE2LCAyNTYsIDIyNTQxLCAyNTYsIDIyNDExLCAyNTYsIAotICAgIDIyNTc4LCAyNTYsIDIyNTc3LCAyNTYsIDIyNzAwLCAyNTYsIDEzNjQyMCwgMjU2LCAyMjc3MCwgMjU2LCAyMjc3NSwgMjU2LCAKLSAgICAyMjc5MCwgMjU2LCAyMjgxMCwgMjU2LCAyMjgxOCwgMjU2LCAyMjg4MiwgMjU2LCAxMzY4NzIsIDI1NiwgMTM2OTM4LCAyNTYsIAotICAgIDIzMDIwLCAyNTYsIDIzMDY3LCAyNTYsIDIzMDc5LCAyNTYsIDIzMDAwLCAyNTYsIDIzMTQyLCAyNTYsIDE0MDYyLCAyNTYsIAotICAgIDE0MDc2LCAyNTYsIDIzMzA0LCAyNTYsIDIzMzU4LCAyNTYsIDIzMzU4LCAyNTYsIDEzNzY3MiwgMjU2LCAyMzQ5MSwgMjU2LCAKLSAgICAyMzUxMiwgMjU2LCAyMzUyNywgMjU2LCAyMzUzOSwgMjU2LCAxMzgwMDgsIDI1NiwgMjM1NTEsIDI1NiwgMjM1NTgsIDI1NiwgCi0gICAgMjQ0MDMsIDI1NiwgMjM1ODYsIDI1NiwgMTQyMDksIDI1NiwgMjM2NDgsIDI1NiwgMjM2NjIsIDI1NiwgMjM3NDQsIDI1NiwgCi0gICAgMjM2OTMsIDI1NiwgMTM4NzI0LCAyNTYsIDIzODc1LCAyNTYsIDEzODcyNiwgMjU2LCAyMzkxOCwgMjU2LCAyMzkxNSwgMjU2LCAKLSAgICAyMzkzMiwgMjU2LCAyNDAzMywgMjU2LCAyNDAzNCwgMjU2LCAxNDM4MywgMjU2LCAyNDA2MSwgMjU2LCAyNDEwNCwgMjU2LCAKLSAgICAyNDEyNSwgMjU2LCAyNDE2OSwgMjU2LCAxNDQzNCwgMjU2LCAxMzk2NTEsIDI1NiwgMTQ0NjAsIDI1NiwgMjQyNDAsIDI1NiwgCi0gICAgMjQyNDMsIDI1NiwgMjQyNDYsIDI1NiwgMjQyNjYsIDI1NiwgMTcyOTQ2LCAyNTYsIDI0MzE4LCAyNTYsIDE0MDA4MSwgMjU2LCAKLSAgICAxNDAwODEsIDI1NiwgMzMyODEsIDI1NiwgMjQzNTQsIDI1NiwgMjQzNTQsIDI1NiwgMTQ1MzUsIDI1NiwgMTQ0MDU2LCAyNTYsIAotICAgIDE1NjEyMiwgMjU2LCAyNDQxOCwgMjU2LCAyNDQyNywgMjU2LCAxNDU2MywgMjU2LCAyNDQ3NCwgMjU2LCAyNDUyNSwgMjU2LCAKLSAgICAyNDUzNSwgMjU2LCAyNDU2OSwgMjU2LCAyNDcwNSwgMjU2LCAxNDY1MCwgMjU2LCAxNDYyMCwgMjU2LCAyNDcyNCwgMjU2LCAKLSAgICAxNDEwMTIsIDI1NiwgMjQ3NzUsIDI1NiwgMjQ5MDQsIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5MTAsIDI1NiwgMjQ5MDgsIDI1NiwgCi0gICAgMjQ5NTQsIDI1NiwgMjQ5NzQsIDI1NiwgMjUwMTAsIDI1NiwgMjQ5OTYsIDI1NiwgMjUwMDcsIDI1NiwgMjUwNTQsIDI1NiwgCi0gICAgMjUwNzQsIDI1NiwgMjUwNzgsIDI1NiwgMjUxMDQsIDI1NiwgMjUxMTUsIDI1NiwgMjUxODEsIDI1NiwgMjUyNjUsIDI1NiwgCi0gICAgMjUzMDAsIDI1NiwgMjU0MjQsIDI1NiwgMTQyMDkyLCAyNTYsIDI1NDA1LCAyNTYsIDI1MzQwLCAyNTYsIDI1NDQ4LCAyNTYsIAotICAgIDI1NDc1LCAyNTYsIDI1NTcyLCAyNTYsIDE0MjMyMSwgMjU2LCAyNTYzNCwgMjU2LCAyNTU0MSwgMjU2LCAyNTUxMywgMjU2LCAKLSAgICAxNDg5NCwgMjU2LCAyNTcwNSwgMjU2LCAyNTcyNiwgMjU2LCAyNTc1NywgMjU2LCAyNTcxOSwgMjU2LCAxNDk1NiwgMjU2LCAKLSAgICAyNTkzNSwgMjU2LCAyNTk2NCwgMjU2LCAxNDMzNzAsIDI1NiwgMjYwODMsIDI1NiwgMjYzNjAsIDI1NiwgMjYxODUsIDI1NiwgCi0gICAgMTUxMjksIDI1NiwgMjYyNTcsIDI1NiwgMTUxMTIsIDI1NiwgMTUwNzYsIDI1NiwgMjA4ODIsIDI1NiwgMjA4ODUsIDI1NiwgCi0gICAgMjYzNjgsIDI1NiwgMjYyNjgsIDI1NiwgMzI5NDEsIDI1NiwgMTczNjksIDI1NiwgMjYzOTEsIDI1NiwgMjYzOTUsIDI1NiwgCi0gICAgMjY0MDEsIDI1NiwgMjY0NjIsIDI1NiwgMjY0NTEsIDI1NiwgMTQ0MzIzLCAyNTYsIDE1MTc3LCAyNTYsIDI2NjE4LCAyNTYsIAotICAgIDI2NTAxLCAyNTYsIDI2NzA2LCAyNTYsIDI2NzU3LCAyNTYsIDE0NDQ5MywgMjU2LCAyNjc2NiwgMjU2LCAyNjY1NSwgMjU2LCAKLSAgICAyNjkwMCwgMjU2LCAxNTI2MSwgMjU2LCAyNjk0NiwgMjU2LCAyNzA0MywgMjU2LCAyNzExNCwgMjU2LCAyNzMwNCwgMjU2LCAKLSAgICAxNDUwNTksIDI1NiwgMjczNTUsIDI1NiwgMTUzODQsIDI1NiwgMjc0MjUsIDI1NiwgMTQ1NTc1LCAyNTYsIDI3NDc2LCAyNTYsIAotICAgIDE1NDM4LCAyNTYsIDI3NTA2LCAyNTYsIDI3NTUxLCAyNTYsIDI3NTc4LCAyNTYsIDI3NTc5LCAyNTYsIDE0NjA2MSwgMjU2LCAKLSAgICAxMzg1MDcsIDI1NiwgMTQ2MTcwLCAyNTYsIDI3NzI2LCAyNTYsIDE0NjYyMCwgMjU2LCAyNzgzOSwgMjU2LCAyNzg1MywgCi0gICAgMjU2LCAyNzc1MSwgMjU2LCAyNzkyNiwgMjU2LCAyNzk2NiwgMjU2LCAyODAyMywgMjU2LCAyNzk2OSwgMjU2LCAyODAwOSwgCi0gICAgMjU2LCAyODAyNCwgMjU2LCAyODAzNywgMjU2LCAxNDY3MTgsIDI1NiwgMjc5NTYsIDI1NiwgMjgyMDcsIDI1NiwgMjgyNzAsIAotICAgIDI1NiwgMTU2NjcsIDI1NiwgMjgzNjMsIDI1NiwgMjgzNTksIDI1NiwgMTQ3MTUzLCAyNTYsIDI4MTUzLCAyNTYsIDI4NTI2LCAKLSAgICAyNTYsIDE0NzI5NCwgMjU2LCAxNDczNDIsIDI1NiwgMjg2MTQsIDI1NiwgMjg3MjksIDI1NiwgMjg3MDIsIDI1NiwgMjg2OTksIAotICAgIDI1NiwgMTU3NjYsIDI1NiwgMjg3NDYsIDI1NiwgMjg3OTcsIDI1NiwgMjg3OTEsIDI1NiwgMjg4NDUsIDI1NiwgMTMyMzg5LCAKLSAgICAyNTYsIDI4OTk3LCAyNTYsIDE0ODA2NywgMjU2LCAyOTA4NCwgMjU2LCAxNDgzOTUsIDI1NiwgMjkyMjQsIDI1NiwgMjkyMzcsIAotICAgIDI1NiwgMjkyNjQsIDI1NiwgMTQ5MDAwLCAyNTYsIDI5MzEyLCAyNTYsIDI5MzMzLCAyNTYsIDE0OTMwMSwgMjU2LCAKLSAgICAxNDk1MjQsIDI1NiwgMjk1NjIsIDI1NiwgMjk1NzksIDI1NiwgMTYwNDQsIDI1NiwgMjk2MDUsIDI1NiwgMTYwNTYsIDI1NiwgCi0gICAgMTYwNTYsIDI1NiwgMjk3NjcsIDI1NiwgMjk3ODgsIDI1NiwgMjk4MDksIDI1NiwgMjk4MjksIDI1NiwgMjk4OTgsIDI1NiwgCi0gICAgMTYxNTUsIDI1NiwgMjk5ODgsIDI1NiwgMTUwNTgyLCAyNTYsIDMwMDE0LCAyNTYsIDE1MDY3NCwgMjU2LCAzMDA2NCwgMjU2LCAKLSAgICAxMzk2NzksIDI1NiwgMzAyMjQsIDI1NiwgMTUxNDU3LCAyNTYsIDE1MTQ4MCwgMjU2LCAxNTE2MjAsIDI1NiwgMTYzODAsIAotICAgIDI1NiwgMTYzOTIsIDI1NiwgMzA0NTIsIDI1NiwgMTUxNzk1LCAyNTYsIDE1MTc5NCwgMjU2LCAxNTE4MzMsIDI1NiwgCi0gICAgMTUxODU5LCAyNTYsIDMwNDk0LCAyNTYsIDMwNDk1LCAyNTYsIDMwNDk1LCAyNTYsIDMwNTM4LCAyNTYsIDE2NDQxLCAyNTYsIAotICAgIDMwNjAzLCAyNTYsIDE2NDU0LCAyNTYsIDE2NTM0LCAyNTYsIDE1MjYwNSwgMjU2LCAzMDc5OCwgMjU2LCAzMDg2MCwgMjU2LCAKLSAgICAzMDkyNCwgMjU2LCAxNjYxMSwgMjU2LCAxNTMxMjYsIDI1NiwgMzEwNjIsIDI1NiwgMTUzMjQyLCAyNTYsIDE1MzI4NSwgCi0gICAgMjU2LCAzMTExOSwgMjU2LCAzMTIxMSwgMjU2LCAxNjY4NywgMjU2LCAzMTI5NiwgMjU2LCAzMTMwNiwgMjU2LCAzMTMxMSwgCi0gICAgMjU2LCAxNTM5ODAsIDI1NiwgMTU0Mjc5LCAyNTYsIDE1NDI3OSwgMjU2LCAzMTQ3MCwgMjU2LCAxNjg5OCwgMjU2LCAKLSAgICAxNTQ1MzksIDI1NiwgMzE2ODYsIDI1NiwgMzE2ODksIDI1NiwgMTY5MzUsIDI1NiwgMTU0NzUyLCAyNTYsIDMxOTU0LCAyNTYsIAotICAgIDE3MDU2LCAyNTYsIDMxOTc2LCAyNTYsIDMxOTcxLCAyNTYsIDMyMDAwLCAyNTYsIDE1NTUyNiwgMjU2LCAzMjA5OSwgMjU2LCAKLSAgICAxNzE1MywgMjU2LCAzMjE5OSwgMjU2LCAzMjI1OCwgMjU2LCAzMjMyNSwgMjU2LCAxNzIwNCwgMjU2LCAxNTYyMDAsIDI1NiwgCi0gICAgMTU2MjMxLCAyNTYsIDE3MjQxLCAyNTYsIDE1NjM3NywgMjU2LCAzMjYzNCwgMjU2LCAxNTY0NzgsIDI1NiwgMzI2NjEsIAotICAgIDI1NiwgMzI3NjIsIDI1NiwgMzI3NzMsIDI1NiwgMTU2ODkwLCAyNTYsIDE1Njk2MywgMjU2LCAzMjg2NCwgMjU2LCAKKyAgICAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCA1MTQsIDQ4LCA0NiwgNTE0LCA0OCwgNDQsIAorICAgIDUxNCwgNDksIDQ0LCA1MTQsIDUwLCA0NCwgNTE0LCA1MSwgNDQsIDUxNCwgNTIsIDQ0LCA1MTQsIDUzLCA0NCwgNTE0LCA1NCwgCisgICAgNDQsIDUxNCwgNTUsIDQ0LCA1MTQsIDU2LCA0NCwgNTE0LCA1NywgNDQsIDc3MCwgNDAsIDY1LCA0MSwgNzcwLCA0MCwgNjYsIAorICAgIDQxLCA3NzAsIDQwLCA2NywgNDEsIDc3MCwgNDAsIDY4LCA0MSwgNzcwLCA0MCwgNjksIDQxLCA3NzAsIDQwLCA3MCwgNDEsIAorICAgIDc3MCwgNDAsIDcxLCA0MSwgNzcwLCA0MCwgNzIsIDQxLCA3NzAsIDQwLCA3MywgNDEsIDc3MCwgNDAsIDc0LCA0MSwgNzcwLCAKKyAgICA0MCwgNzUsIDQxLCA3NzAsIDQwLCA3NiwgNDEsIDc3MCwgNDAsIDc3LCA0MSwgNzcwLCA0MCwgNzgsIDQxLCA3NzAsIDQwLCAKKyAgICA3OSwgNDEsIDc3MCwgNDAsIDgwLCA0MSwgNzcwLCA0MCwgODEsIDQxLCA3NzAsIDQwLCA4MiwgNDEsIDc3MCwgNDAsIDgzLCAKKyAgICA0MSwgNzcwLCA0MCwgODQsIDQxLCA3NzAsIDQwLCA4NSwgNDEsIDc3MCwgNDAsIDg2LCA0MSwgNzcwLCA0MCwgODcsIDQxLCAKKyAgICA3NzAsIDQwLCA4OCwgNDEsIDc3MCwgNDAsIDg5LCA0MSwgNzcwLCA0MCwgOTAsIDQxLCA3NzAsIDEyMzA4LCA4MywgMTIzMDksIAorICAgIDI2MywgNjcsIDI2MywgODIsIDUxOSwgNjcsIDY4LCA1MTksIDg3LCA5MCwgMjY2LCA2NiwgMjY2LCA3OCwgMjY2LCA4MCwgCisgICAgMjY2LCA4MywgMjY2LCA4NywgNTIyLCA3MiwgODYsIDUyMiwgNzcsIDg2LCA1MjIsIDgzLCA2OCwgNTIyLCA4MywgODMsIAorICAgIDc3OCwgODAsIDgwLCA4NiwgNTIyLCA2OCwgNzQsIDUyMiwgMTI0MTEsIDEyMzYzLCAyNjYsIDI1MTYzLCAyNjYsIDIzMzgzLCAKKyAgICAyNjYsIDIxNDUyLCAyNjYsIDEyNDg3LCAyNjYsIDIwMTA4LCAyNjYsIDIyODEwLCAyNjYsIDM1Mjk5LCAyNjYsIDIyODI1LCAKKyAgICAyNjYsIDIwMTMyLCAyNjYsIDI2MTQ0LCAyNjYsIDI4OTYxLCAyNjYsIDI2MDA5LCAyNjYsIDIxMDY5LCAyNjYsIDI0NDYwLCAKKyAgICAyNjYsIDIwODc3LCAyNjYsIDI2MDMyLCAyNjYsIDIxMDIxLCAyNjYsIDMyMDY2LCAyNjYsIDI5OTgzLCAyNjYsIDM2MDA5LCAKKyAgICAyNjYsIDIyNzY4LCAyNjYsIDIxNTYxLCAyNjYsIDI4NDM2LCAyNjYsIDI1MjM3LCAyNjYsIDI1NDI5LCAyNjYsIDE5OTY4LCAKKyAgICAyNjYsIDE5OTc3LCAyNjYsIDM2OTM4LCAyNjYsIDI0MDM4LCAyNjYsIDIwMDEzLCAyNjYsIDIxNDkxLCAyNjYsIDI1MzUxLCAKKyAgICAyNjYsIDM2MjA4LCAyNjYsIDI1MTcxLCA3NzAsIDEyMzA4LCAyNjQxMiwgMTIzMDksIDc3MCwgMTIzMDgsIDE5OTc3LCAKKyAgICAxMjMwOSwgNzcwLCAxMjMwOCwgMjAxMDgsIDEyMzA5LCA3NzAsIDEyMzA4LCAyMzQzMywgMTIzMDksIDc3MCwgMTIzMDgsIAorICAgIDI4ODU3LCAxMjMwOSwgNzcwLCAxMjMwOCwgMjUxNzEsIDEyMzA5LCA3NzAsIDEyMzA4LCAzMDQyMywgMTIzMDksIDc3MCwgCisgICAgMTIzMDgsIDIxMjEzLCAxMjMwOSwgNzcwLCAxMjMwOCwgMjU5NDMsIDEyMzA5LCAyNTYsIDIwMDI5LCAyNTYsIDIwMDI0LCAKKyAgICAyNTYsIDIwMDMzLCAyNTYsIDEzMTM2MiwgMjU2LCAyMDMyMCwgMjU2LCAyMDM5OCwgMjU2LCAyMDQxMSwgMjU2LCAyMDQ4MiwgCisgICAgMjU2LCAyMDYwMiwgMjU2LCAyMDYzMywgMjU2LCAyMDcxMSwgMjU2LCAyMDY4NywgMjU2LCAxMzQ3MCwgMjU2LCAxMzI2NjYsIAorICAgIDI1NiwgMjA4MTMsIDI1NiwgMjA4MjAsIDI1NiwgMjA4MzYsIDI1NiwgMjA4NTUsIDI1NiwgMTMyMzgwLCAyNTYsIDEzNDk3LCAKKyAgICAyNTYsIDIwODM5LCAyNTYsIDIwODc3LCAyNTYsIDEzMjQyNywgMjU2LCAyMDg4NywgMjU2LCAyMDkwMCwgMjU2LCAyMDE3MiwgCisgICAgMjU2LCAyMDkwOCwgMjU2LCAyMDkxNywgMjU2LCAxNjg0MTUsIDI1NiwgMjA5ODEsIDI1NiwgMjA5OTUsIDI1NiwgMTM1MzUsIAorICAgIDI1NiwgMjEwNTEsIDI1NiwgMjEwNjIsIDI1NiwgMjExMDYsIDI1NiwgMjExMTEsIDI1NiwgMTM1ODksIDI1NiwgMjExOTEsIAorICAgIDI1NiwgMjExOTMsIDI1NiwgMjEyMjAsIDI1NiwgMjEyNDIsIDI1NiwgMjEyNTMsIDI1NiwgMjEyNTQsIDI1NiwgMjEyNzEsIAorICAgIDI1NiwgMjEzMjEsIDI1NiwgMjEzMjksIDI1NiwgMjEzMzgsIDI1NiwgMjEzNjMsIDI1NiwgMjEzNzMsIDI1NiwgMjEzNzUsIAorICAgIDI1NiwgMjEzNzUsIDI1NiwgMjEzNzUsIDI1NiwgMTMzNjc2LCAyNTYsIDI4Nzg0LCAyNTYsIDIxNDUwLCAyNTYsIDIxNDcxLCAKKyAgICAyNTYsIDEzMzk4NywgMjU2LCAyMTQ4MywgMjU2LCAyMTQ4OSwgMjU2LCAyMTUxMCwgMjU2LCAyMTY2MiwgMjU2LCAyMTU2MCwgCisgICAgMjU2LCAyMTU3NiwgMjU2LCAyMTYwOCwgMjU2LCAyMTY2NiwgMjU2LCAyMTc1MCwgMjU2LCAyMTc3NiwgMjU2LCAyMTg0MywgCisgICAgMjU2LCAyMTg1OSwgMjU2LCAyMTg5MiwgMjU2LCAyMTg5MiwgMjU2LCAyMTkxMywgMjU2LCAyMTkzMSwgMjU2LCAyMTkzOSwgCisgICAgMjU2LCAyMTk1NCwgMjU2LCAyMjI5NCwgMjU2LCAyMjAyMiwgMjU2LCAyMjI5NSwgMjU2LCAyMjA5NywgMjU2LCAyMjEzMiwgCisgICAgMjU2LCAyMDk5OSwgMjU2LCAyMjc2NiwgMjU2LCAyMjQ3OCwgMjU2LCAyMjUxNiwgMjU2LCAyMjU0MSwgMjU2LCAyMjQxMSwgCisgICAgMjU2LCAyMjU3OCwgMjU2LCAyMjU3NywgMjU2LCAyMjcwMCwgMjU2LCAxMzY0MjAsIDI1NiwgMjI3NzAsIDI1NiwgMjI3NzUsIAorICAgIDI1NiwgMjI3OTAsIDI1NiwgMjI4MTAsIDI1NiwgMjI4MTgsIDI1NiwgMjI4ODIsIDI1NiwgMTM2ODcyLCAyNTYsIDEzNjkzOCwgCisgICAgMjU2LCAyMzAyMCwgMjU2LCAyMzA2NywgMjU2LCAyMzA3OSwgMjU2LCAyMzAwMCwgMjU2LCAyMzE0MiwgMjU2LCAxNDA2MiwgCisgICAgMjU2LCAxNDA3NiwgMjU2LCAyMzMwNCwgMjU2LCAyMzM1OCwgMjU2LCAyMzM1OCwgMjU2LCAxMzc2NzIsIDI1NiwgMjM0OTEsIAorICAgIDI1NiwgMjM1MTIsIDI1NiwgMjM1MjcsIDI1NiwgMjM1MzksIDI1NiwgMTM4MDA4LCAyNTYsIDIzNTUxLCAyNTYsIDIzNTU4LCAKKyAgICAyNTYsIDI0NDAzLCAyNTYsIDIzNTg2LCAyNTYsIDE0MjA5LCAyNTYsIDIzNjQ4LCAyNTYsIDIzNjYyLCAyNTYsIDIzNzQ0LCAKKyAgICAyNTYsIDIzNjkzLCAyNTYsIDEzODcyNCwgMjU2LCAyMzg3NSwgMjU2LCAxMzg3MjYsIDI1NiwgMjM5MTgsIDI1NiwgMjM5MTUsIAorICAgIDI1NiwgMjM5MzIsIDI1NiwgMjQwMzMsIDI1NiwgMjQwMzQsIDI1NiwgMTQzODMsIDI1NiwgMjQwNjEsIDI1NiwgMjQxMDQsIAorICAgIDI1NiwgMjQxMjUsIDI1NiwgMjQxNjksIDI1NiwgMTQ0MzQsIDI1NiwgMTM5NjUxLCAyNTYsIDE0NDYwLCAyNTYsIDI0MjQwLCAKKyAgICAyNTYsIDI0MjQzLCAyNTYsIDI0MjQ2LCAyNTYsIDI0MjY2LCAyNTYsIDE3Mjk0NiwgMjU2LCAyNDMxOCwgMjU2LCAxNDAwODEsIAorICAgIDI1NiwgMTQwMDgxLCAyNTYsIDMzMjgxLCAyNTYsIDI0MzU0LCAyNTYsIDI0MzU0LCAyNTYsIDE0NTM1LCAyNTYsIDE0NDA1NiwgCisgICAgMjU2LCAxNTYxMjIsIDI1NiwgMjQ0MTgsIDI1NiwgMjQ0MjcsIDI1NiwgMTQ1NjMsIDI1NiwgMjQ0NzQsIDI1NiwgMjQ1MjUsIAorICAgIDI1NiwgMjQ1MzUsIDI1NiwgMjQ1NjksIDI1NiwgMjQ3MDUsIDI1NiwgMTQ2NTAsIDI1NiwgMTQ2MjAsIDI1NiwgMjQ3MjQsIAorICAgIDI1NiwgMTQxMDEyLCAyNTYsIDI0Nzc1LCAyNTYsIDI0OTA0LCAyNTYsIDI0OTA4LCAyNTYsIDI0OTEwLCAyNTYsIDI0OTA4LCAKKyAgICAyNTYsIDI0OTU0LCAyNTYsIDI0OTc0LCAyNTYsIDI1MDEwLCAyNTYsIDI0OTk2LCAyNTYsIDI1MDA3LCAyNTYsIDI1MDU0LCAKKyAgICAyNTYsIDI1MDc0LCAyNTYsIDI1MDc4LCAyNTYsIDI1MTA0LCAyNTYsIDI1MTE1LCAyNTYsIDI1MTgxLCAyNTYsIDI1MjY1LCAKKyAgICAyNTYsIDI1MzAwLCAyNTYsIDI1NDI0LCAyNTYsIDE0MjA5MiwgMjU2LCAyNTQwNSwgMjU2LCAyNTM0MCwgMjU2LCAyNTQ0OCwgCisgICAgMjU2LCAyNTQ3NSwgMjU2LCAyNTU3MiwgMjU2LCAxNDIzMjEsIDI1NiwgMjU2MzQsIDI1NiwgMjU1NDEsIDI1NiwgMjU1MTMsIAorICAgIDI1NiwgMTQ4OTQsIDI1NiwgMjU3MDUsIDI1NiwgMjU3MjYsIDI1NiwgMjU3NTcsIDI1NiwgMjU3MTksIDI1NiwgMTQ5NTYsIAorICAgIDI1NiwgMjU5MzUsIDI1NiwgMjU5NjQsIDI1NiwgMTQzMzcwLCAyNTYsIDI2MDgzLCAyNTYsIDI2MzYwLCAyNTYsIDI2MTg1LCAKKyAgICAyNTYsIDE1MTI5LCAyNTYsIDI2MjU3LCAyNTYsIDE1MTEyLCAyNTYsIDE1MDc2LCAyNTYsIDIwODgyLCAyNTYsIDIwODg1LCAKKyAgICAyNTYsIDI2MzY4LCAyNTYsIDI2MjY4LCAyNTYsIDMyOTQxLCAyNTYsIDE3MzY5LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAKKyAgICAyNTYsIDI2NDAxLCAyNTYsIDI2NDYyLCAyNTYsIDI2NDUxLCAyNTYsIDE0NDMyMywgMjU2LCAxNTE3NywgMjU2LCAyNjYxOCwgCisgICAgMjU2LCAyNjUwMSwgMjU2LCAyNjcwNiwgMjU2LCAyNjc1NywgMjU2LCAxNDQ0OTMsIDI1NiwgMjY3NjYsIDI1NiwgMjY2NTUsIAorICAgIDI1NiwgMjY5MDAsIDI1NiwgMTUyNjEsIDI1NiwgMjY5NDYsIDI1NiwgMjcwNDMsIDI1NiwgMjcxMTQsIDI1NiwgMjczMDQsIAorICAgIDI1NiwgMTQ1MDU5LCAyNTYsIDI3MzU1LCAyNTYsIDE1Mzg0LCAyNTYsIDI3NDI1LCAyNTYsIDE0NTU3NSwgMjU2LCAyNzQ3NiwgCisgICAgMjU2LCAxNTQzOCwgMjU2LCAyNzUwNiwgMjU2LCAyNzU1MSwgMjU2LCAyNzU3OCwgMjU2LCAyNzU3OSwgMjU2LCAxNDYwNjEsIAorICAgIDI1NiwgMTM4NTA3LCAyNTYsIDE0NjE3MCwgMjU2LCAyNzcyNiwgMjU2LCAxNDY2MjAsIDI1NiwgMjc4MzksIDI1NiwgCisgICAgMjc4NTMsIDI1NiwgMjc3NTEsIDI1NiwgMjc5MjYsIDI1NiwgMjc5NjYsIDI1NiwgMjgwMjMsIDI1NiwgMjc5NjksIDI1NiwgCisgICAgMjgwMDksIDI1NiwgMjgwMjQsIDI1NiwgMjgwMzcsIDI1NiwgMTQ2NzE4LCAyNTYsIDI3OTU2LCAyNTYsIDI4MjA3LCAyNTYsIAorICAgIDI4MjcwLCAyNTYsIDE1NjY3LCAyNTYsIDI4MzYzLCAyNTYsIDI4MzU5LCAyNTYsIDE0NzE1MywgMjU2LCAyODE1MywgMjU2LCAKKyAgICAyODUyNiwgMjU2LCAxNDcyOTQsIDI1NiwgMTQ3MzQyLCAyNTYsIDI4NjE0LCAyNTYsIDI4NzI5LCAyNTYsIDI4NzAyLCAyNTYsIAorICAgIDI4Njk5LCAyNTYsIDE1NzY2LCAyNTYsIDI4NzQ2LCAyNTYsIDI4Nzk3LCAyNTYsIDI4NzkxLCAyNTYsIDI4ODQ1LCAyNTYsIAorICAgIDEzMjM4OSwgMjU2LCAyODk5NywgMjU2LCAxNDgwNjcsIDI1NiwgMjkwODQsIDI1NiwgMTQ4Mzk1LCAyNTYsIDI5MjI0LCAKKyAgICAyNTYsIDI5MjM3LCAyNTYsIDI5MjY0LCAyNTYsIDE0OTAwMCwgMjU2LCAyOTMxMiwgMjU2LCAyOTMzMywgMjU2LCAxNDkzMDEsIAorICAgIDI1NiwgMTQ5NTI0LCAyNTYsIDI5NTYyLCAyNTYsIDI5NTc5LCAyNTYsIDE2MDQ0LCAyNTYsIDI5NjA1LCAyNTYsIDE2MDU2LCAKKyAgICAyNTYsIDE2MDU2LCAyNTYsIDI5NzY3LCAyNTYsIDI5Nzg4LCAyNTYsIDI5ODA5LCAyNTYsIDI5ODI5LCAyNTYsIDI5ODk4LCAKKyAgICAyNTYsIDE2MTU1LCAyNTYsIDI5OTg4LCAyNTYsIDE1MDU4MiwgMjU2LCAzMDAxNCwgMjU2LCAxNTA2NzQsIDI1NiwgMzAwNjQsIAorICAgIDI1NiwgMTM5Njc5LCAyNTYsIDMwMjI0LCAyNTYsIDE1MTQ1NywgMjU2LCAxNTE0ODAsIDI1NiwgMTUxNjIwLCAyNTYsIAorICAgIDE2MzgwLCAyNTYsIDE2MzkyLCAyNTYsIDMwNDUyLCAyNTYsIDE1MTc5NSwgMjU2LCAxNTE3OTQsIDI1NiwgMTUxODMzLCAKKyAgICAyNTYsIDE1MTg1OSwgMjU2LCAzMDQ5NCwgMjU2LCAzMDQ5NSwgMjU2LCAzMDQ5NSwgMjU2LCAzMDUzOCwgMjU2LCAxNjQ0MSwgCisgICAgMjU2LCAzMDYwMywgMjU2LCAxNjQ1NCwgMjU2LCAxNjUzNCwgMjU2LCAxNTI2MDUsIDI1NiwgMzA3OTgsIDI1NiwgMzA4NjAsIAorICAgIDI1NiwgMzA5MjQsIDI1NiwgMTY2MTEsIDI1NiwgMTUzMTI2LCAyNTYsIDMxMDYyLCAyNTYsIDE1MzI0MiwgMjU2LCAKKyAgICAxNTMyODUsIDI1NiwgMzExMTksIDI1NiwgMzEyMTEsIDI1NiwgMTY2ODcsIDI1NiwgMzEyOTYsIDI1NiwgMzEzMDYsIDI1NiwgCisgICAgMzEzMTEsIDI1NiwgMTUzOTgwLCAyNTYsIDE1NDI3OSwgMjU2LCAxNTQyNzksIDI1NiwgMzE0NzAsIDI1NiwgMTY4OTgsIAorICAgIDI1NiwgMTU0NTM5LCAyNTYsIDMxNjg2LCAyNTYsIDMxNjg5LCAyNTYsIDE2OTM1LCAyNTYsIDE1NDc1MiwgMjU2LCAzMTk1NCwgCisgICAgMjU2LCAxNzA1NiwgMjU2LCAzMTk3NiwgMjU2LCAzMTk3MSwgMjU2LCAzMjAwMCwgMjU2LCAxNTU1MjYsIDI1NiwgMzIwOTksIAorICAgIDI1NiwgMTcxNTMsIDI1NiwgMzIxOTksIDI1NiwgMzIyNTgsIDI1NiwgMzIzMjUsIDI1NiwgMTcyMDQsIDI1NiwgMTU2MjAwLCAKKyAgICAyNTYsIDE1NjIzMSwgMjU2LCAxNzI0MSwgMjU2LCAxNTYzNzcsIDI1NiwgMzI2MzQsIDI1NiwgMTU2NDc4LCAyNTYsIAorICAgIDMyNjYxLCAyNTYsIDMyNzYyLCAyNTYsIDMyNzczLCAyNTYsIDE1Njg5MCwgMjU2LCAxNTY5NjMsIDI1NiwgMzI4NjQsIDI1NiwgCiAgICAgMTU3MDk2LCAyNTYsIDMyODgwLCAyNTYsIDE0NDIyMywgMjU2LCAxNzM2NSwgMjU2LCAzMjk0NiwgMjU2LCAzMzAyNywgMjU2LCAKICAgICAxNzQxOSwgMjU2LCAzMzA4NiwgMjU2LCAyMzIyMSwgMjU2LCAxNTc2MDcsIDI1NiwgMTU3NjIxLCAyNTYsIDE0NDI3NSwgCiAgICAgMjU2LCAxNDQyODQsIDI1NiwgMzMyODEsIDI1NiwgMzMyODQsIDI1NiwgMzY3NjYsIDI1NiwgMTc1MTUsIDI1NiwgMzM0MjUsIApAQCAtMzE1Nyw3ICszNTM1LDcgQEAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCAKLSAgICA0MSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNDEsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDQyLCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKQEAgLTMxNjUsOCArMzU0Myw5IEBACiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNDIsIDcsIDcsIDQzLCA0NCwgCi0gICAgNDUsIDQ2LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA0MywgNywgNywgNDQsIDQ1LCAKKyAgICA0NiwgNDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDQ4LCA0OSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCkBAIC0zMTc3LDggKzM1NTYsNyBAQAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDQ3LCA0OCwgNDksIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDUwLCA1MSwgNTIsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIApAQCAtMzYwMywzMCArMzk4MSwzMiBAQAogICAgIDAsIDMyNzEsIDAsIDMyNzMsIDAsIDMyNzUsIDAsIDMyNzcsIDMyNzksIDMyODEsIDMyODMsIDAsIDMyODUsIDMyODcsIAogICAgIDMyODksIDAsIDMyOTEsIDMyOTMsIDMyOTUsIDMyOTcsIDMyOTksIDMzMDEsIDMzMDMsIDAsIDMzMDUsIDMzMDksIDMzMTEsIAogICAgIDMzMTMsIDMzMTUsIDMzMTcsIDAsIDAsIDAsIDAsIDMzMTksIDMzMjEsIDMzMjMsIDMzMjUsIDMzMjcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMzMjksIDMzMzMsIDMzMzcsIDMzNDEsIDMzNDUsIDMzNDksIDMzNTMsIDMzNTcsIDMzNjEsIAotICAgIDMzNjUsIDMzNjksIDMzNzMsIDMzNzcsIDMzODAsIDMzODIsIDMzODUsIDMzODksIDMzOTIsIDMzOTQsIDMzOTcsIDM0MDEsIAotICAgIDM0MDYsIDM0MDksIDM0MTEsIDM0MTQsIDM0MTgsIDM0MjAsIDM0MjIsIDM0MjQsIDM0MjYsIDM0MjgsIDM0MzEsIDM0MzUsIAotICAgIDM0MzgsIDM0NDAsIDM0NDMsIDM0NDcsIDM0NTIsIDM0NTUsIDM0NTcsIDM0NjAsIDM0NjQsIDM0NjYsIDM0NjgsIDM0NzAsIAorICAgIDAsIDAsIDMzMjksIDMzMzMsIDMzMzcsIDMzNDIsIDMzNDYsIDMzNTAsIDMzNTQsIDMzNTgsIDMzNjIsIDMzNjYsIDMzNzAsIAorICAgIDMzNzQsIDMzNzgsIDMzODIsIDMzODYsIDMzOTAsIDMzOTMsIDMzOTUsIDMzOTgsIDM0MDIsIDM0MDUsIDM0MDcsIDM0MTAsIAorICAgIDM0MTQsIDM0MTksIDM0MjIsIDM0MjQsIDM0MjcsIDM0MzEsIDM0MzMsIDM0MzUsIDM0MzcsIDM0MzksIDM0NDEsIDM0NDQsIAorICAgIDM0NDgsIDM0NTEsIDM0NTMsIDM0NTYsIDM0NjAsIDM0NjUsIDM0NjgsIDM0NzAsIDM0NzMsIDM0NzcsIDM0NzksIDM0ODEsIAorICAgIDM0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDM0ODksIDM0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDM0OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0OTgsIDM1MDEsIDM1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDM0NzIsIDM0NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0ODEsIDM0ODQsIDM0ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MDcsIDAsIAorICAgIDAsIDAsIDAsIDM1MTAsIDAsIDAsIDM1MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTYsIDAsIDM1MTksIDAsIDAsIDAsIDAsIDAsIDM1MjIsIDM1MjUsIDAsIAorICAgIDM1MjksIDM1MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MzYsIDAsIDAsIAorICAgIDM1MzksIDAsIDAsIDM1NDIsIDAsIDM1NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NDgsIDAsIDM1NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NTQsIAorICAgIDM1NTcsIDM1NjAsIDM1NjMsIDM1NjYsIDAsIDAsIDM1NjksIDM1NzIsIDAsIDAsIDM1NzUsIDM1NzgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDM1ODEsIDM1ODQsIDAsIDAsIDM1ODcsIDM1OTAsIDAsIDAsIDM1OTMsIDM1OTYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0OTAsIDAsIDAsIDAsIDAsIAotICAgIDM0OTMsIDAsIDAsIDM0OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM0OTksIDAsIDM1MDIsIDAsIDAsIDAsIDAsIDAsIDM1MDUsIDM1MDgsIDAsIDM1MTIsIDM1MTUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTksIDAsIDAsIDM1MjIsIDAsIDAsIAotICAgIDM1MjUsIDAsIDM1MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM1MzEsIDAsIDM1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MzcsIDM1NDAsIDM1NDMsIAotICAgIDM1NDYsIDM1NDksIDAsIDAsIDM1NTIsIDM1NTUsIDAsIDAsIDM1NTgsIDM1NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NjQsIAotICAgIDM1NjcsIDAsIDAsIDM1NzAsIDM1NzMsIDAsIDAsIDM1NzYsIDM1NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDM1OTksIDM2MDIsIDM2MDUsIDM2MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1ODIsIDM1ODUsIDM1ODgsIDM1OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MTEsIDM2MTQsIDM2MTcsIDM2MjAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDM2MjMsIDM2MjYsIDM2MjksIDM2MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OTQsIDM1OTcsIDM2MDAsIDM2MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MDYsIAotICAgIDM2MDksIDM2MTIsIDM2MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MzUsIAorICAgIDM2MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MTgsIDM2MjAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMzYzNyw0OCArNDAxNyw0OSBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM2MzksIDM2NDEsIDM2NDMsIDM2NDUsIDM2NDcsIDM2NDksIDM2NTEsIDM2NTMsIDM2NTUsIDM2NTcsIDM2NjAsIDM2NjMsIAorICAgIDM2NjYsIDM2NjksIDM2NzIsIDM2NzUsIDM2NzgsIDM2ODEsIDM2ODQsIDM2ODcsIDM2OTAsIDM2OTQsIDM2OTgsIDM3MDIsIAorICAgIDM3MDYsIDM3MTAsIDM3MTQsIDM3MTgsIDM3MjIsIDM3MjYsIDM3MzEsIDM3MzYsIDM3NDEsIDM3NDYsIDM3NTEsIDM3NTYsIAorICAgIDM3NjEsIDM3NjYsIDM3NzEsIDM3NzYsIDM3ODEsIDM3ODQsIDM3ODcsIDM3OTAsIDM3OTMsIDM3OTYsIDM3OTksIDM4MDIsIAorICAgIDM4MDUsIDM4MDgsIDM4MTIsIDM4MTYsIDM4MjAsIDM4MjQsIDM4MjgsIDM4MzIsIDM4MzYsIDM4NDAsIDM4NDQsIDM4NDgsIAorICAgIDM4NTIsIDM4NTYsIDM4NjAsIDM4NjQsIDM4NjgsIDM4NzIsIDM4NzYsIDM4ODAsIDM4ODQsIDM4ODgsIDM4OTIsIDM4OTYsIAorICAgIDM5MDAsIDM5MDQsIDM5MDgsIDM5MTIsIDM5MTYsIDM5MjAsIDM5MjQsIDM5MjgsIDM5MzIsIDM5MzYsIDM5NDAsIDM5NDQsIAorICAgIDM5NDgsIDM5NTIsIDM5NTYsIDM5NTgsIDM5NjAsIDM5NjIsIDM5NjQsIDM5NjYsIDM5NjgsIDM5NzAsIDM5NzIsIDM5NzQsIAorICAgIDM5NzYsIDM5NzgsIDM5ODAsIDM5ODIsIDM5ODQsIDM5ODYsIDM5ODgsIDM5OTAsIDM5OTIsIDM5OTQsIDM5OTYsIDM5OTgsIAorICAgIDQwMDAsIDQwMDIsIDQwMDQsIDQwMDYsIDQwMDgsIDQwMTAsIDQwMTIsIDQwMTQsIDQwMTYsIDQwMTgsIDQwMjAsIDQwMjIsIAorICAgIDQwMjQsIDQwMjYsIDQwMjgsIDQwMzAsIDQwMzIsIDQwMzQsIDQwMzYsIDQwMzgsIDQwNDAsIDQwNDIsIDQwNDQsIDQwNDYsIAorICAgIDQwNDgsIDQwNTAsIDQwNTIsIDQwNTQsIDQwNTYsIDQwNTgsIDQwNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQwNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjIsIDM2MjQsIDM2MjYsIAotICAgIDM2MjgsIDM2MzAsIDM2MzIsIDM2MzQsIDM2MzYsIDM2MzgsIDM2NDAsIDM2NDMsIDM2NDYsIDM2NDksIDM2NTIsIDM2NTUsIAotICAgIDM2NTgsIDM2NjEsIDM2NjQsIDM2NjcsIDM2NzAsIDM2NzMsIDM2NzcsIDM2ODEsIDM2ODUsIDM2ODksIDM2OTMsIDM2OTcsIAotICAgIDM3MDEsIDM3MDUsIDM3MDksIDM3MTQsIDM3MTksIDM3MjQsIDM3MjksIDM3MzQsIDM3MzksIDM3NDQsIDM3NDksIDM3NTQsIAotICAgIDM3NTksIDM3NjQsIDM3NjcsIDM3NzAsIDM3NzMsIDM3NzYsIDM3NzksIDM3ODIsIDM3ODUsIDM3ODgsIDM3OTEsIDM3OTUsIAotICAgIDM3OTksIDM4MDMsIDM4MDcsIDM4MTEsIDM4MTUsIDM4MTksIDM4MjMsIDM4MjcsIDM4MzEsIDM4MzUsIDM4MzksIDM4NDMsIAotICAgIDM4NDcsIDM4NTEsIDM4NTUsIDM4NTksIDM4NjMsIDM4NjcsIDM4NzEsIDM4NzUsIDM4NzksIDM4ODMsIDM4ODcsIDM4OTEsIAotICAgIDM4OTUsIDM4OTksIDM5MDMsIDM5MDcsIDM5MTEsIDM5MTUsIDM5MTksIDM5MjMsIDM5MjcsIDM5MzEsIDM5MzUsIDM5MzksIAotICAgIDM5NDEsIDM5NDMsIDM5NDUsIDM5NDcsIDM5NDksIDM5NTEsIDM5NTMsIDM5NTUsIDM5NTcsIDM5NTksIDM5NjEsIDM5NjMsIAotICAgIDM5NjUsIDM5NjcsIDM5NjksIDM5NzEsIDM5NzMsIDM5NzUsIDM5NzcsIDM5NzksIDM5ODEsIDM5ODMsIDM5ODUsIDM5ODcsIAotICAgIDM5ODksIDM5OTEsIDM5OTMsIDM5OTUsIDM5OTcsIDM5OTksIDQwMDEsIDQwMDMsIDQwMDUsIDQwMDcsIDQwMDksIDQwMTEsIAotICAgIDQwMTMsIDQwMTUsIDQwMTcsIDQwMTksIDQwMjEsIDQwMjMsIDQwMjUsIDQwMjcsIDQwMjksIDQwMzEsIDQwMzMsIDQwMzUsIAotICAgIDQwMzcsIDQwMzksIDQwNDEsIDQwNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNDUsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNjcsIDQwNzEsIDQwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQwNTAsIDQwNTQsIDQwNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNzgsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwODEsIDQwODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQwNjQsIDQwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwODUsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMzY4OCw0MjMgKzQwNjksNDU4IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDA4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA5MSwgNDA5MywgNDA5NSwgNDA5NywgNDA5OSwgCisgICAgNDEwMSwgNDEwMywgNDEwNSwgNDEwNywgNDEwOSwgNDExMSwgNDExMywgNDExNSwgNDExNywgNDExOSwgNDEyMSwgNDEyMywgCisgICAgNDEyNSwgNDEyNywgNDEyOSwgNDEzMSwgNDEzMywgNDEzNSwgNDEzNywgNDEzOSwgNDE0MSwgNDE0MywgNDE0NSwgNDE0NywgCisgICAgNDE0OSwgNDE1MSwgNDE1MywgNDE1NSwgNDE1NywgNDE1OSwgNDE2MSwgNDE2MywgNDE2NSwgNDE2NywgNDE2OSwgNDE3MSwgCisgICAgNDE3MywgNDE3NSwgNDE3NywgNDE3OSwgNDE4MSwgNDE4MywgNDE4NSwgNDE4NywgNDE4OSwgNDE5MSwgNDE5MywgNDE5NSwgCisgICAgNDE5NywgNDE5OSwgNDIwMSwgNDIwMywgNDIwNSwgNDIwNywgNDIwOSwgNDIxMSwgNDIxMywgNDIxNSwgNDIxNywgNDIxOSwgCisgICAgNDIyMSwgNDIyMywgNDIyNSwgNDIyNywgNDIyOSwgNDIzMSwgNDIzMywgNDIzNSwgNDIzNywgNDIzOSwgNDI0MSwgNDI0MywgCisgICAgNDI0NSwgNDI0NywgNDI0OSwgNDI1MSwgNDI1MywgNDI1NSwgNDI1NywgNDI1OSwgNDI2MSwgNDI2MywgNDI2NSwgNDI2NywgCisgICAgNDI2OSwgNDI3MSwgNDI3MywgNDI3NSwgNDI3NywgNDI3OSwgNDI4MSwgNDI4MywgNDI4NSwgNDI4NywgNDI4OSwgNDI5MSwgCisgICAgNDI5MywgNDI5NSwgNDI5NywgNDI5OSwgNDMwMSwgNDMwMywgNDMwNSwgNDMwNywgNDMwOSwgNDMxMSwgNDMxMywgNDMxNSwgCisgICAgNDMxNywgNDMxOSwgNDMyMSwgNDMyMywgNDMyNSwgNDMyNywgNDMyOSwgNDMzMSwgNDMzMywgNDMzNSwgNDMzNywgNDMzOSwgCisgICAgNDM0MSwgNDM0MywgNDM0NSwgNDM0NywgNDM0OSwgNDM1MSwgNDM1MywgNDM1NSwgNDM1NywgNDM1OSwgNDM2MSwgNDM2MywgCisgICAgNDM2NSwgNDM2NywgNDM2OSwgNDM3MSwgNDM3MywgNDM3NSwgNDM3NywgNDM3OSwgNDM4MSwgNDM4MywgNDM4NSwgNDM4NywgCisgICAgNDM4OSwgNDM5MSwgNDM5MywgNDM5NSwgNDM5NywgNDM5OSwgNDQwMSwgNDQwMywgNDQwNSwgNDQwNywgNDQwOSwgNDQxMSwgCisgICAgNDQxMywgNDQxNSwgNDQxNywgNDQxOSwgNDQyMSwgNDQyMywgNDQyNSwgNDQyNywgNDQyOSwgNDQzMSwgNDQzMywgNDQzNSwgCisgICAgNDQzNywgNDQzOSwgNDQ0MSwgNDQ0MywgNDQ0NSwgNDQ0NywgNDQ0OSwgNDQ1MSwgNDQ1MywgNDQ1NSwgNDQ1NywgNDQ1OSwgCisgICAgNDQ2MSwgNDQ2MywgNDQ2NSwgNDQ2NywgNDQ2OSwgNDQ3MSwgNDQ3MywgNDQ3NSwgNDQ3NywgNDQ3OSwgNDQ4MSwgNDQ4MywgCisgICAgNDQ4NSwgNDQ4NywgNDQ4OSwgNDQ5MSwgNDQ5MywgNDQ5NSwgNDQ5NywgNDQ5OSwgNDUwMSwgNDUwMywgNDUwNSwgNDUwNywgCisgICAgNDUwOSwgNDUxMSwgNDUxMywgNDUxNSwgNDUxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDUxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3NCwgNDA3NiwgNDA3OCwgNDA4MCwgNDA4MiwgNDA4NCwgNDA4NiwgNDA4OCwgCi0gICAgNDA5MCwgNDA5MiwgNDA5NCwgNDA5NiwgNDA5OCwgNDEwMCwgNDEwMiwgNDEwNCwgNDEwNiwgNDEwOCwgNDExMCwgNDExMiwgCi0gICAgNDExNCwgNDExNiwgNDExOCwgNDEyMCwgNDEyMiwgNDEyNCwgNDEyNiwgNDEyOCwgNDEzMCwgNDEzMiwgNDEzNCwgNDEzNiwgCi0gICAgNDEzOCwgNDE0MCwgNDE0MiwgNDE0NCwgNDE0NiwgNDE0OCwgNDE1MCwgNDE1MiwgNDE1NCwgNDE1NiwgNDE1OCwgNDE2MCwgCi0gICAgNDE2MiwgNDE2NCwgNDE2NiwgNDE2OCwgNDE3MCwgNDE3MiwgNDE3NCwgNDE3NiwgNDE3OCwgNDE4MCwgNDE4MiwgNDE4NCwgCi0gICAgNDE4NiwgNDE4OCwgNDE5MCwgNDE5MiwgNDE5NCwgNDE5NiwgNDE5OCwgNDIwMCwgNDIwMiwgNDIwNCwgNDIwNiwgNDIwOCwgCi0gICAgNDIxMCwgNDIxMiwgNDIxNCwgNDIxNiwgNDIxOCwgNDIyMCwgNDIyMiwgNDIyNCwgNDIyNiwgNDIyOCwgNDIzMCwgNDIzMiwgCi0gICAgNDIzNCwgNDIzNiwgNDIzOCwgNDI0MCwgNDI0MiwgNDI0NCwgNDI0NiwgNDI0OCwgNDI1MCwgNDI1MiwgNDI1NCwgNDI1NiwgCi0gICAgNDI1OCwgNDI2MCwgNDI2MiwgNDI2NCwgNDI2NiwgNDI2OCwgNDI3MCwgNDI3MiwgNDI3NCwgNDI3NiwgNDI3OCwgNDI4MCwgCi0gICAgNDI4MiwgNDI4NCwgNDI4NiwgNDI4OCwgNDI5MCwgNDI5MiwgNDI5NCwgNDI5NiwgNDI5OCwgNDMwMCwgNDMwMiwgNDMwNCwgCi0gICAgNDMwNiwgNDMwOCwgNDMxMCwgNDMxMiwgNDMxNCwgNDMxNiwgNDMxOCwgNDMyMCwgNDMyMiwgNDMyNCwgNDMyNiwgNDMyOCwgCi0gICAgNDMzMCwgNDMzMiwgNDMzNCwgNDMzNiwgNDMzOCwgNDM0MCwgNDM0MiwgNDM0NCwgNDM0NiwgNDM0OCwgNDM1MCwgNDM1MiwgCi0gICAgNDM1NCwgNDM1NiwgNDM1OCwgNDM2MCwgNDM2MiwgNDM2NCwgNDM2NiwgNDM2OCwgNDM3MCwgNDM3MiwgNDM3NCwgNDM3NiwgCi0gICAgNDM3OCwgNDM4MCwgNDM4MiwgNDM4NCwgNDM4NiwgNDM4OCwgNDM5MCwgNDM5MiwgNDM5NCwgNDM5NiwgNDM5OCwgNDQwMCwgCi0gICAgNDQwMiwgNDQwNCwgNDQwNiwgNDQwOCwgNDQxMCwgNDQxMiwgNDQxNCwgNDQxNiwgNDQxOCwgNDQyMCwgNDQyMiwgNDQyNCwgCi0gICAgNDQyNiwgNDQyOCwgNDQzMCwgNDQzMiwgNDQzNCwgNDQzNiwgNDQzOCwgNDQ0MCwgNDQ0MiwgNDQ0NCwgNDQ0NiwgNDQ0OCwgCi0gICAgNDQ1MCwgNDQ1MiwgNDQ1NCwgNDQ1NiwgNDQ1OCwgNDQ2MCwgNDQ2MiwgNDQ2NCwgNDQ2NiwgNDQ2OCwgNDQ3MCwgNDQ3MiwgCi0gICAgNDQ3NCwgNDQ3NiwgNDQ3OCwgNDQ4MCwgNDQ4MiwgNDQ4NCwgNDQ4NiwgNDQ4OCwgNDQ5MCwgNDQ5MiwgNDQ5NCwgNDQ5NiwgCi0gICAgNDQ5OCwgNDUwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUwMiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyMSwgMCwgNDUyMywgNDUyNSwgNDUyNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyOSwgMCwgNDUzMiwgMCwgNDUzNSwgMCwgNDUzOCwgCisgICAgMCwgNDU0MSwgMCwgNDU0NCwgMCwgNDU0NywgMCwgNDU1MCwgMCwgNDU1MywgMCwgNDU1NiwgMCwgNDU1OSwgMCwgNDU2MiwgCisgICAgMCwgMCwgNDU2NSwgMCwgNDU2OCwgMCwgNDU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDU3NCwgNDU3NywgMCwgNDU4MCwgCisgICAgNDU4MywgMCwgNDU4NiwgNDU4OSwgMCwgNDU5MiwgNDU5NSwgMCwgNDU5OCwgNDYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDYwNywgNDYxMCwgMCwgNDYxMywgNDYxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYxOSwgMCwgCisgICAgNDYyMiwgMCwgNDYyNSwgMCwgNDYyOCwgMCwgNDYzMSwgMCwgNDYzNCwgMCwgNDYzNywgMCwgNDY0MCwgMCwgNDY0MywgMCwgCisgICAgNDY0NiwgMCwgNDY0OSwgMCwgNDY1MiwgMCwgMCwgNDY1NSwgMCwgNDY1OCwgMCwgNDY2MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDY2NCwgNDY2NywgMCwgNDY3MCwgNDY3MywgMCwgNDY3NiwgNDY3OSwgMCwgNDY4MiwgNDY4NSwgMCwgNDY4OCwgNDY5MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY5NCwgCisgICAgMCwgMCwgNDY5NywgNDcwMCwgNDcwMywgNDcwNiwgMCwgMCwgMCwgNDcwOSwgNDcxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcxNSwgNDcxNywgNDcxOSwgCisgICAgNDcyMSwgNDcyMywgNDcyNSwgNDcyNywgNDcyOSwgNDczMSwgNDczMywgNDczNSwgNDczNywgNDczOSwgNDc0MSwgNDc0MywgCisgICAgNDc0NSwgNDc0NywgNDc0OSwgNDc1MSwgNDc1MywgNDc1NSwgNDc1NywgNDc1OSwgNDc2MSwgNDc2MywgNDc2NSwgNDc2NywgCisgICAgNDc2OSwgNDc3MSwgNDc3MywgNDc3NSwgNDc3NywgNDc3OSwgNDc4MSwgNDc4MywgNDc4NSwgNDc4NywgNDc4OSwgNDc5MSwgCisgICAgNDc5MywgNDc5NSwgNDc5NywgNDc5OSwgNDgwMSwgNDgwMywgNDgwNSwgNDgwNywgNDgwOSwgNDgxMSwgNDgxMywgNDgxNSwgCisgICAgNDgxNywgNDgxOSwgNDgyMSwgNDgyMywgNDgyNSwgNDgyNywgNDgyOSwgNDgzMSwgNDgzMywgNDgzNSwgNDgzNywgNDgzOSwgCisgICAgNDg0MSwgNDg0MywgNDg0NSwgNDg0NywgNDg0OSwgNDg1MSwgNDg1MywgNDg1NSwgNDg1NywgNDg1OSwgNDg2MSwgNDg2MywgCisgICAgNDg2NSwgNDg2NywgNDg2OSwgNDg3MSwgNDg3MywgNDg3NSwgNDg3NywgNDg3OSwgNDg4MSwgNDg4MywgNDg4NSwgNDg4NywgCisgICAgNDg4OSwgNDg5MSwgNDg5MywgNDg5NSwgNDg5NywgNDg5OSwgNDkwMSwgMCwgMCwgMCwgNDkwMywgNDkwNSwgNDkwNywgCisgICAgNDkwOSwgNDkxMSwgNDkxMywgNDkxNSwgNDkxNywgNDkxOSwgNDkyMSwgNDkyMywgNDkyNSwgNDkyNywgNDkyOSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDUwNCwgMCwgNDUwNiwgNDUwOCwgNDUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUxMiwgMCwgNDUxNSwgMCwgNDUxOCwgMCwgNDUyMSwgMCwgNDUyNCwgMCwgNDUyNywgCi0gICAgMCwgNDUzMCwgMCwgNDUzMywgMCwgNDUzNiwgMCwgNDUzOSwgMCwgNDU0MiwgMCwgNDU0NSwgMCwgMCwgNDU0OCwgMCwgCi0gICAgNDU1MSwgMCwgNDU1NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU1NywgNDU2MCwgMCwgNDU2MywgNDU2NiwgMCwgNDU2OSwgCi0gICAgNDU3MiwgMCwgNDU3NSwgNDU3OCwgMCwgNDU4MSwgNDU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgNDU5MCwgNDU5MywgMCwgCi0gICAgNDU5NiwgNDU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYwMiwgMCwgNDYwNSwgMCwgNDYwOCwgCi0gICAgMCwgNDYxMSwgMCwgNDYxNCwgMCwgNDYxNywgMCwgNDYyMCwgMCwgNDYyMywgMCwgNDYyNiwgMCwgNDYyOSwgMCwgNDYzMiwgCi0gICAgMCwgNDYzNSwgMCwgMCwgNDYzOCwgMCwgNDY0MSwgMCwgNDY0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY0NywgNDY1MCwgMCwgCi0gICAgNDY1MywgNDY1NiwgMCwgNDY1OSwgNDY2MiwgMCwgNDY2NSwgNDY2OCwgMCwgNDY3MSwgNDY3NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY3NywgMCwgMCwgNDY4MCwgCi0gICAgNDY4MywgNDY4NiwgNDY4OSwgMCwgMCwgMCwgNDY5MiwgNDY5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY5OCwgNDcwMCwgNDcwMiwgNDcwNCwgNDcwNiwgCi0gICAgNDcwOCwgNDcxMCwgNDcxMiwgNDcxNCwgNDcxNiwgNDcxOCwgNDcyMCwgNDcyMiwgNDcyNCwgNDcyNiwgNDcyOCwgNDczMCwgCi0gICAgNDczMiwgNDczNCwgNDczNiwgNDczOCwgNDc0MCwgNDc0MiwgNDc0NCwgNDc0NiwgNDc0OCwgNDc1MCwgNDc1MiwgNDc1NCwgCi0gICAgNDc1NiwgNDc1OCwgNDc2MCwgNDc2MiwgNDc2NCwgNDc2NiwgNDc2OCwgNDc3MCwgNDc3MiwgNDc3NCwgNDc3NiwgNDc3OCwgCi0gICAgNDc4MCwgNDc4MiwgNDc4NCwgNDc4NiwgNDc4OCwgNDc5MCwgNDc5MiwgNDc5NCwgNDc5NiwgNDc5OCwgNDgwMCwgNDgwMiwgCi0gICAgNDgwNCwgNDgwNiwgNDgwOCwgNDgxMCwgNDgxMiwgNDgxNCwgNDgxNiwgNDgxOCwgNDgyMCwgNDgyMiwgNDgyNCwgNDgyNiwgCi0gICAgNDgyOCwgNDgzMCwgNDgzMiwgNDgzNCwgNDgzNiwgNDgzOCwgNDg0MCwgNDg0MiwgNDg0NCwgNDg0NiwgNDg0OCwgNDg1MCwgCi0gICAgNDg1MiwgNDg1NCwgNDg1NiwgNDg1OCwgNDg2MCwgNDg2MiwgNDg2NCwgNDg2NiwgNDg2OCwgNDg3MCwgNDg3MiwgNDg3NCwgCi0gICAgNDg3NiwgNDg3OCwgNDg4MCwgNDg4MiwgNDg4NCwgMCwgMCwgMCwgNDg4NiwgNDg4OCwgNDg5MCwgNDg5MiwgNDg5NCwgCi0gICAgNDg5NiwgNDg5OCwgNDkwMCwgNDkwMiwgNDkwNCwgNDkwNiwgNDkwOCwgNDkxMCwgNDkxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkzMSwgCisgICAgNDkzNSwgNDkzOSwgNDk0MywgNDk0NywgNDk1MSwgNDk1NSwgNDk1OSwgNDk2MywgNDk2NywgNDk3MSwgNDk3NSwgNDk3OSwgCisgICAgNDk4MywgNDk4NywgNDk5MiwgNDk5NywgNTAwMiwgNTAwNywgNTAxMiwgNTAxNywgNTAyMiwgNTAyNywgNTAzMiwgNTAzNywgCisgICAgNTA0MiwgNTA0NywgNTA1MiwgNTA1NywgNTA2MiwgNTA3MCwgMCwgNTA3NywgNTA4MSwgNTA4NSwgNTA4OSwgNTA5MywgCisgICAgNTA5NywgNTEwMSwgNTEwNSwgNTEwOSwgNTExMywgNTExNywgNTEyMSwgNTEyNSwgNTEyOSwgNTEzMywgNTEzNywgNTE0MSwgCisgICAgNTE0NSwgNTE0OSwgNTE1MywgNTE1NywgNTE2MSwgNTE2NSwgNTE2OSwgNTE3MywgNTE3NywgNTE4MSwgNTE4NSwgNTE4OSwgCisgICAgNTE5MywgNTE5NywgNTIwMSwgNTIwNSwgNTIwOSwgNTIxMywgNTIxNywgNTIyMSwgNTIyMywgNTIyNSwgNTIyNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNTIyOSwgNTIzMywgNTIzNiwgNTIzOSwgNTI0MiwgNTI0NSwgNTI0OCwgNTI1MSwgNTI1NCwgCisgICAgNTI1NywgNTI2MCwgNTI2MywgNTI2NiwgNTI2OSwgNTI3MiwgNTI3NSwgNTI3OCwgNTI4MCwgNTI4MiwgNTI4NCwgNTI4NiwgCisgICAgNTI4OCwgNTI5MCwgNTI5MiwgNTI5NCwgNTI5NiwgNTI5OCwgNTMwMCwgNTMwMiwgNTMwNCwgNTMwNiwgNTMwOSwgNTMxMiwgCisgICAgNTMxNSwgNTMxOCwgNTMyMSwgNTMyNCwgNTMyNywgNTMzMCwgNTMzMywgNTMzNiwgNTMzOSwgNTM0MiwgNTM0NSwgNTM0OCwgCisgICAgNTM1NCwgNTM1OSwgMCwgNTM2MiwgNTM2NCwgNTM2NiwgNTM2OCwgNTM3MCwgNTM3MiwgNTM3NCwgNTM3NiwgNTM3OCwgCisgICAgNTM4MCwgNTM4MiwgNTM4NCwgNTM4NiwgNTM4OCwgNTM5MCwgNTM5MiwgNTM5NCwgNTM5NiwgNTM5OCwgNTQwMCwgNTQwMiwgCisgICAgNTQwNCwgNTQwNiwgNTQwOCwgNTQxMCwgNTQxMiwgNTQxNCwgNTQxNiwgNTQxOCwgNTQyMCwgNTQyMiwgNTQyNCwgNTQyNiwgCisgICAgNTQyOCwgNTQzMCwgNTQzMiwgNTQzNCwgNTQzNiwgNTQzOCwgNTQ0MCwgNTQ0MiwgNTQ0NCwgNTQ0NiwgNTQ0OCwgNTQ1MCwgCisgICAgNTQ1MiwgNTQ1NCwgNTQ1NiwgNTQ1OCwgNTQ2MCwgNTQ2MywgNTQ2NiwgNTQ2OSwgNTQ3MiwgNTQ3NSwgNTQ3OCwgNTQ4MSwgCisgICAgNTQ4NCwgNTQ4NywgNTQ5MCwgNTQ5MywgNTQ5NiwgNTQ5OSwgNTUwMiwgNTUwNSwgNTUwOCwgNTUxMSwgNTUxNCwgNTUxNywgCisgICAgNTUyMCwgNTUyMywgNTUyNiwgNTUyOSwgNTUzMiwgNTUzNiwgNTU0MCwgNTU0NCwgNTU0NywgNTU1MSwgNTU1NCwgNTU1OCwgCisgICAgNTU2MCwgNTU2MiwgNTU2NCwgNTU2NiwgNTU2OCwgNTU3MCwgNTU3MiwgNTU3NCwgNTU3NiwgNTU3OCwgNTU4MCwgNTU4MiwgCisgICAgNTU4NCwgNTU4NiwgNTU4OCwgNTU5MCwgNTU5MiwgNTU5NCwgNTU5NiwgNTU5OCwgNTYwMCwgNTYwMiwgNTYwNCwgNTYwNiwgCisgICAgNTYwOCwgNTYxMCwgNTYxMiwgNTYxNCwgNTYxNiwgNTYxOCwgNTYyMCwgNTYyMiwgNTYyNCwgNTYyNiwgNTYyOCwgNTYzMCwgCisgICAgNTYzMiwgNTYzNCwgNTYzNiwgNTYzOCwgNTY0MCwgNTY0MiwgNTY0NCwgNTY0NiwgNTY0OCwgNTY1MCwgMCwgNTY1MiwgCisgICAgNTY1NywgNTY2MiwgNTY2NywgNTY3MSwgNTY3NiwgNTY4MCwgNTY4NCwgNTY5MCwgNTY5NSwgNTY5OSwgNTcwMywgNTcwNywgCisgICAgNTcxMiwgNTcxNywgNTcyMSwgNTcyNSwgNTcyOCwgNTczMiwgNTczNywgNTc0MiwgNTc0NSwgNTc1MSwgNTc1OCwgNTc2NCwgCisgICAgNTc2OCwgNTc3NCwgNTc4MCwgNTc4NSwgNTc4OSwgNTc5MywgNTc5NywgNTgwMiwgNTgwOCwgNTgxMywgNTgxNywgNTgyMSwgCisgICAgNTgyNSwgNTgyOCwgNTgzMSwgNTgzNCwgNTgzNywgNTg0MSwgNTg0NSwgNTg1MSwgNTg1NSwgNTg2MCwgNTg2NiwgNTg3MCwgCisgICAgNTg3MywgNTg3NiwgNTg4MiwgNTg4NywgNTg5MywgNTg5NywgNTkwMywgNTkwNiwgNTkxMCwgNTkxNCwgNTkxOCwgNTkyMiwgCisgICAgNTkyNiwgNTkzMSwgNTkzNSwgNTkzOCwgNTk0MiwgNTk0NiwgNTk1MCwgNTk1NSwgNTk1OSwgNTk2MywgNTk2NywgNTk3MywgCisgICAgNTk3OCwgNTk4MSwgNTk4NywgNTk5MCwgNTk5NSwgNjAwMCwgNjAwNCwgNjAwOCwgNjAxMiwgNjAxNywgNjAyMCwgNjAyNCwgCisgICAgNjAyOSwgNjAzMiwgNjAzOCwgNjA0MiwgNjA0NSwgNjA0OCwgNjA1MSwgNjA1NCwgNjA1NywgNjA2MCwgNjA2MywgNjA2NiwgCisgICAgNjA2OSwgNjA3MiwgNjA3NiwgNjA4MCwgNjA4NCwgNjA4OCwgNjA5MiwgNjA5NiwgNjEwMCwgNjEwNCwgNjEwOCwgNjExMiwgCisgICAgNjExNiwgNjEyMCwgNjEyNCwgNjEyOCwgNjEzMiwgNjEzNiwgNjEzOSwgNjE0MiwgNjE0NiwgNjE0OSwgNjE1MiwgNjE1NSwgCisgICAgNjE1OSwgNjE2MywgNjE2NiwgNjE2OSwgNjE3MiwgNjE3NSwgNjE3OCwgNjE4MywgNjE4NiwgNjE4OSwgNjE5MiwgNjE5NSwgCisgICAgNjE5OCwgNjIwMSwgNjIwNCwgNjIwNywgNjIxMSwgNjIxNiwgNjIxOSwgNjIyMiwgNjIyNSwgNjIyOCwgNjIzMSwgNjIzNCwgCisgICAgNjIzNywgNjI0MSwgNjI0NSwgNjI0OSwgNjI1MywgNjI1NiwgNjI1OSwgNjI2MiwgNjI2NSwgNjI2OCwgNjI3MSwgNjI3NCwgCisgICAgNjI3NywgNjI4MCwgNjI4MywgNjI4NywgNjI5MSwgNjI5NCwgNjI5OCwgNjMwMiwgNjMwNiwgNjMwOSwgNjMxMywgNjMxNywgCisgICAgNjMyMiwgNjMyNSwgNjMyOSwgNjMzMywgNjMzNywgNjM0MSwgNjM0NywgNjM1NCwgNjM1NywgNjM2MCwgNjM2MywgNjM2NiwgCisgICAgNjM2OSwgNjM3MiwgNjM3NSwgNjM3OCwgNjM4MSwgNjM4NCwgNjM4NywgNjM5MCwgNjM5MywgNjM5NiwgNjM5OSwgNjQwMiwgCisgICAgNjQwNSwgNjQwOCwgNjQxMywgNjQxNiwgNjQxOSwgNjQyMiwgNjQyNywgNjQzMSwgNjQzNCwgNjQzNywgNjQ0MCwgNjQ0MywgCisgICAgNjQ0NiwgNjQ0OSwgNjQ1MiwgNjQ1NSwgNjQ1OCwgNjQ2MSwgNjQ2NSwgNjQ2OCwgNjQ3MSwgNjQ3NSwgNjQ3OSwgNjQ4MiwgCisgICAgNjQ4NywgNjQ5MSwgNjQ5NCwgNjQ5NywgNjUwMCwgNjUwMywgNjUwNywgNjUxMSwgNjUxNCwgNjUxNywgNjUyMCwgNjUyMywgCisgICAgNjUyNiwgNjUyOSwgNjUzMiwgNjUzNSwgNjUzOCwgNjU0MiwgNjU0NiwgNjU1MCwgNjU1NCwgNjU1OCwgNjU2MiwgNjU2NiwgCisgICAgNjU3MCwgNjU3NCwgNjU3OCwgNjU4MiwgNjU4NiwgNjU5MCwgNjU5NCwgNjU5OCwgNjYwMiwgNjYwNiwgNjYxMCwgNjYxNCwgCisgICAgNjYxOCwgNjYyMiwgNjYyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkxNCwgNDkxOCwgNDkyMiwgCi0gICAgNDkyNiwgNDkzMCwgNDkzNCwgNDkzOCwgNDk0MiwgNDk0NiwgNDk1MCwgNDk1NCwgNDk1OCwgNDk2MiwgNDk2NiwgNDk3MCwgCi0gICAgNDk3NSwgNDk4MCwgNDk4NSwgNDk5MCwgNDk5NSwgNTAwMCwgNTAwNSwgNTAxMCwgNTAxNSwgNTAyMCwgNTAyNSwgNTAzMCwgCi0gICAgNTAzNSwgNTA0MCwgNTA0NSwgNTA1MywgMCwgNTA2MCwgNTA2NCwgNTA2OCwgNTA3MiwgNTA3NiwgNTA4MCwgNTA4NCwgCi0gICAgNTA4OCwgNTA5MiwgNTA5NiwgNTEwMCwgNTEwNCwgNTEwOCwgNTExMiwgNTExNiwgNTEyMCwgNTEyNCwgNTEyOCwgNTEzMiwgCi0gICAgNTEzNiwgNTE0MCwgNTE0NCwgNTE0OCwgNTE1MiwgNTE1NiwgNTE2MCwgNTE2NCwgNTE2OCwgNTE3MiwgNTE3NiwgNTE4MCwgCi0gICAgNTE4NCwgNTE4OCwgNTE5MiwgNTE5NiwgNTIwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIwNCwgCi0gICAgNTIwOCwgNTIxMSwgNTIxNCwgNTIxNywgNTIyMCwgNTIyMywgNTIyNiwgNTIyOSwgNTIzMiwgNTIzNSwgNTIzOCwgNTI0MSwgCi0gICAgNTI0NCwgNTI0NywgNTI1MCwgNTI1MywgNTI1NSwgNTI1NywgNTI1OSwgNTI2MSwgNTI2MywgNTI2NSwgNTI2NywgNTI2OSwgCi0gICAgNTI3MSwgNTI3MywgNTI3NSwgNTI3NywgNTI3OSwgNTI4MSwgNTI4NCwgNTI4NywgNTI5MCwgNTI5MywgNTI5NiwgNTI5OSwgCi0gICAgNTMwMiwgNTMwNSwgNTMwOCwgNTMxMSwgNTMxNCwgNTMxNywgNTMyMCwgNTMyMywgNTMyOSwgNTMzNCwgMCwgNTMzNywgCi0gICAgNTMzOSwgNTM0MSwgNTM0MywgNTM0NSwgNTM0NywgNTM0OSwgNTM1MSwgNTM1MywgNTM1NSwgNTM1NywgNTM1OSwgNTM2MSwgCi0gICAgNTM2MywgNTM2NSwgNTM2NywgNTM2OSwgNTM3MSwgNTM3MywgNTM3NSwgNTM3NywgNTM3OSwgNTM4MSwgNTM4MywgNTM4NSwgCi0gICAgNTM4NywgNTM4OSwgNTM5MSwgNTM5MywgNTM5NSwgNTM5NywgNTM5OSwgNTQwMSwgNTQwMywgNTQwNSwgNTQwNywgNTQwOSwgCi0gICAgNTQxMSwgNTQxMywgNTQxNSwgNTQxNywgNTQxOSwgNTQyMSwgNTQyMywgNTQyNSwgNTQyNywgNTQyOSwgNTQzMSwgNTQzMywgCi0gICAgNTQzNSwgNTQzOCwgNTQ0MSwgNTQ0NCwgNTQ0NywgNTQ1MCwgNTQ1MywgNTQ1NiwgNTQ1OSwgNTQ2MiwgNTQ2NSwgNTQ2OCwgCi0gICAgNTQ3MSwgNTQ3NCwgNTQ3NywgNTQ4MCwgNTQ4MywgNTQ4NiwgNTQ4OSwgNTQ5MiwgNTQ5NSwgNTQ5OCwgNTUwMSwgNTUwNCwgCi0gICAgNTUwNywgNTUxMSwgNTUxNSwgNTUxOSwgNTUyMiwgNTUyNiwgNTUyOSwgNTUzMywgNTUzNSwgNTUzNywgNTUzOSwgNTU0MSwgCi0gICAgNTU0MywgNTU0NSwgNTU0NywgNTU0OSwgNTU1MSwgNTU1MywgNTU1NSwgNTU1NywgNTU1OSwgNTU2MSwgNTU2MywgNTU2NSwgCi0gICAgNTU2NywgNTU2OSwgNTU3MSwgNTU3MywgNTU3NSwgNTU3NywgNTU3OSwgNTU4MSwgNTU4MywgNTU4NSwgNTU4NywgNTU4OSwgCi0gICAgNTU5MSwgNTU5MywgNTU5NSwgNTU5NywgNTU5OSwgNTYwMSwgNTYwMywgNTYwNSwgNTYwNywgNTYwOSwgNTYxMSwgNTYxMywgCi0gICAgNTYxNSwgNTYxNywgNTYxOSwgNTYyMSwgNTYyMywgNTYyNSwgMCwgNTYyNywgNTYzMiwgNTYzNywgNTY0MiwgNTY0NiwgCi0gICAgNTY1MSwgNTY1NSwgNTY1OSwgNTY2NSwgNTY3MCwgNTY3NCwgNTY3OCwgNTY4MiwgNTY4NywgNTY5MiwgNTY5NiwgNTcwMCwgCi0gICAgNTcwMywgNTcwNywgNTcxMiwgNTcxNywgNTcyMCwgNTcyNiwgNTczMywgNTczOSwgNTc0MywgNTc0OSwgNTc1NSwgNTc2MCwgCi0gICAgNTc2NCwgNTc2OCwgNTc3MiwgNTc3NywgNTc4MywgNTc4OCwgNTc5MiwgNTc5NiwgNTgwMCwgNTgwMywgNTgwNiwgNTgwOSwgCi0gICAgNTgxMiwgNTgxNiwgNTgyMCwgNTgyNiwgNTgzMCwgNTgzNSwgNTg0MSwgNTg0NSwgNTg0OCwgNTg1MSwgNTg1NywgNTg2MiwgCi0gICAgNTg2OCwgNTg3MiwgNTg3OCwgNTg4MSwgNTg4NSwgNTg4OSwgNTg5MywgNTg5NywgNTkwMSwgNTkwNiwgNTkxMCwgNTkxMywgCi0gICAgNTkxNywgNTkyMSwgNTkyNSwgNTkzMCwgNTkzNCwgNTkzOCwgNTk0MiwgNTk0OCwgNTk1MywgNTk1NiwgNTk2MiwgNTk2NSwgCi0gICAgNTk3MCwgNTk3NSwgNTk3OSwgNTk4MywgNTk4NywgNTk5MiwgNTk5NSwgNTk5OSwgNjAwNCwgNjAwNywgNjAxMywgNjAxNywgCi0gICAgNjAyMCwgNjAyMywgNjAyNiwgNjAyOSwgNjAzMiwgNjAzNSwgNjAzOCwgNjA0MSwgNjA0NCwgNjA0NywgNjA1MSwgNjA1NSwgCi0gICAgNjA1OSwgNjA2MywgNjA2NywgNjA3MSwgNjA3NSwgNjA3OSwgNjA4MywgNjA4NywgNjA5MSwgNjA5NSwgNjA5OSwgNjEwMywgCi0gICAgNjEwNywgNjExMSwgNjExNCwgNjExNywgNjEyMSwgNjEyNCwgNjEyNywgNjEzMCwgNjEzNCwgNjEzOCwgNjE0MSwgNjE0NCwgCi0gICAgNjE0NywgNjE1MCwgNjE1MywgNjE1OCwgNjE2MSwgNjE2NCwgNjE2NywgNjE3MCwgNjE3MywgNjE3NiwgNjE3OSwgNjE4MiwgCi0gICAgNjE4NiwgNjE5MSwgNjE5NCwgNjE5NywgNjIwMCwgNjIwMywgNjIwNiwgNjIwOSwgNjIxMiwgNjIxNiwgNjIyMCwgNjIyNCwgCi0gICAgNjIyOCwgNjIzMSwgNjIzNCwgNjIzNywgNjI0MCwgNjI0MywgNjI0NiwgNjI0OSwgNjI1MiwgNjI1NSwgNjI1OCwgNjI2MiwgCi0gICAgNjI2NiwgNjI2OSwgNjI3MywgNjI3NywgNjI4MSwgNjI4NCwgNjI4OCwgNjI5MiwgNjI5NywgNjMwMCwgNjMwNCwgNjMwOCwgCi0gICAgNjMxMiwgNjMxNiwgNjMyMiwgNjMyOSwgNjMzMiwgNjMzNSwgNjMzOCwgNjM0MSwgNjM0NCwgNjM0NywgNjM1MCwgNjM1MywgCi0gICAgNjM1NiwgNjM1OSwgNjM2MiwgNjM2NSwgNjM2OCwgNjM3MSwgNjM3NCwgNjM3NywgNjM4MCwgNjM4MywgNjM4OCwgNjM5MSwgCi0gICAgNjM5NCwgNjM5NywgNjQwMiwgNjQwNiwgNjQwOSwgNjQxMiwgNjQxNSwgNjQxOCwgNjQyMSwgNjQyNCwgNjQyNywgNjQzMCwgCi0gICAgNjQzMywgNjQzNiwgNjQ0MCwgNjQ0MywgNjQ0NiwgNjQ1MCwgNjQ1NCwgNjQ1NywgNjQ2MiwgNjQ2NiwgNjQ2OSwgNjQ3MiwgCi0gICAgNjQ3NSwgNjQ3OCwgNjQ4MiwgNjQ4NiwgNjQ4OSwgNjQ5MiwgNjQ5NSwgNjQ5OCwgNjUwMSwgNjUwNCwgNjUwNywgNjUxMCwgCi0gICAgNjUxMywgNjUxNywgNjUyMSwgNjUyNSwgNjUyOSwgNjUzMywgNjUzNywgNjU0MSwgNjU0NSwgNjU0OSwgNjU1MywgNjU1NywgCi0gICAgNjU2MSwgNjU2NSwgNjU2OSwgNjU3MywgNjU3NywgNjU4MSwgNjU4NSwgNjU4OSwgNjU5MywgNjU5NywgNjYwMSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjYzMiwgNjYzNCwgNjYzNiwgNjYzOCwgNjY0MCwgNjY0MiwgNjY0NCwgNjY0NiwgNjY0OCwgNjY1MCwgNjY1MiwgNjY1NCwgCisgICAgNjY1NiwgNjY1OCwgNjY2MCwgNjY2MiwgNjY2NCwgNjY2NiwgNjY2OCwgNjY3MCwgNjY3MiwgNjY3NCwgNjY3NiwgNjY3OCwgCisgICAgNjY4MCwgNjY4MiwgNjY4NCwgNjY4NiwgNjY4OCwgNjY5MCwgNjY5MiwgNjY5NCwgNjY5NiwgNjY5OCwgNjcwMCwgNjcwMiwgCisgICAgNjcwNCwgNjcwNiwgNjcwOCwgNjcxMCwgNjcxMiwgNjcxNCwgNjcxNiwgNjcxOCwgNjcyMCwgNjcyMiwgNjcyNCwgNjcyNiwgCisgICAgNjcyOCwgNjczMCwgNjczMiwgNjczNCwgNjczNiwgNjczOCwgNjc0MCwgNjc0MiwgNjc0NCwgNjc0NiwgNjc0OCwgNjc1MCwgCisgICAgNjc1MiwgNjc1NCwgNjc1NiwgNjc1OCwgNjc2MCwgNjc2MiwgNjc2NCwgNjc2NiwgNjc2OCwgNjc3MCwgNjc3MiwgNjc3NCwgCisgICAgNjc3NiwgNjc3OCwgNjc4MCwgNjc4MiwgNjc4NCwgNjc4NiwgNjc4OCwgNjc5MCwgNjc5MiwgNjc5NCwgNjc5NiwgNjc5OCwgCisgICAgNjgwMCwgNjgwMiwgNjgwNCwgNjgwNiwgNjgwOCwgNjgxMCwgNjgxMiwgNjgxNCwgNjgxNiwgNjgxOCwgNjgyMCwgNjgyMiwgCisgICAgNjgyNCwgNjgyNiwgNjgyOCwgNjgzMCwgNjgzMiwgNjgzNCwgNjgzNiwgNjgzOCwgNjg0MCwgNjg0MiwgNjg0NCwgNjg0NiwgCisgICAgNjg0OCwgNjg1MCwgNjg1MiwgNjg1NCwgNjg1NiwgNjg1OCwgNjg2MCwgNjg2MiwgNjg2NCwgNjg2NiwgNjg2OCwgNjg3MCwgCisgICAgNjg3MiwgNjg3NCwgNjg3NiwgNjg3OCwgNjg4MCwgNjg4MiwgNjg4NCwgNjg4NiwgNjg4OCwgNjg5MCwgNjg5MiwgNjg5NCwgCisgICAgNjg5NiwgNjg5OCwgNjkwMCwgNjkwMiwgNjkwNCwgNjkwNiwgNjkwOCwgNjkxMCwgNjkxMiwgNjkxNCwgNjkxNiwgNjkxOCwgCisgICAgNjkyMCwgNjkyMiwgNjkyNCwgNjkyNiwgNjkyOCwgNjkzMCwgNjkzMiwgNjkzNCwgNjkzNiwgNjkzOCwgNjk0MCwgNjk0MiwgCisgICAgNjk0NCwgNjk0NiwgNjk0OCwgNjk1MCwgNjk1MiwgNjk1NCwgNjk1NiwgNjk1OCwgNjk2MCwgNjk2MiwgNjk2NCwgNjk2NiwgCisgICAgNjk2OCwgNjk3MCwgNjk3MiwgNjk3NCwgNjk3NiwgNjk3OCwgNjk4MCwgNjk4MiwgNjk4NCwgNjk4NiwgNjk4OCwgNjk5MCwgCisgICAgNjk5MiwgNjk5NCwgNjk5NiwgNjk5OCwgNzAwMCwgNzAwMiwgNzAwNCwgNzAwNiwgNzAwOCwgNzAxMCwgNzAxMiwgNzAxNCwgCisgICAgNzAxNiwgNzAxOCwgNzAyMCwgNzAyMiwgNzAyNCwgNzAyNiwgNzAyOCwgNzAzMCwgNzAzMiwgNzAzNCwgNzAzNiwgNzAzOCwgCisgICAgNzA0MCwgNzA0MiwgNzA0NCwgNzA0NiwgNzA0OCwgNzA1MCwgNzA1MiwgNzA1NCwgNzA1NiwgNzA1OCwgNzA2MCwgNzA2MiwgCisgICAgNzA2NCwgNzA2NiwgNzA2OCwgNzA3MCwgNzA3MiwgNzA3NCwgNzA3NiwgNzA3OCwgNzA4MCwgNzA4MiwgNzA4NCwgNzA4NiwgCisgICAgNzA4OCwgNzA5MCwgNzA5MiwgNzA5NCwgNzA5NiwgNzA5OCwgNzEwMCwgNzEwMiwgNzEwNCwgNzEwNiwgNzEwOCwgNzExMCwgCisgICAgNzExMiwgNzExNCwgNzExNiwgNzExOCwgNzEyMCwgNzEyMiwgNzEyNCwgNzEyNiwgNzEyOCwgNzEzMCwgNzEzMiwgNzEzNCwgCisgICAgNzEzNiwgNzEzOCwgNzE0MCwgNzE0MiwgNzE0NCwgNzE0NiwgNzE0OCwgNzE1MCwgNzE1MiwgNzE1NCwgNzE1NiwgNzE1OCwgCisgICAgNzE2MCwgNzE2MiwgNzE2NCwgNzE2NiwgNzE2OCwgNzE3MCwgMCwgMCwgNzE3MiwgMCwgNzE3NCwgMCwgMCwgNzE3NiwgCisgICAgNzE3OCwgNzE4MCwgNzE4MiwgNzE4NCwgNzE4NiwgNzE4OCwgNzE5MCwgNzE5MiwgNzE5NCwgMCwgNzE5NiwgMCwgNzE5OCwgCisgICAgMCwgMCwgNzIwMCwgNzIwMiwgMCwgMCwgMCwgNzIwNCwgNzIwNiwgNzIwOCwgNzIxMCwgMCwgMCwgNzIxMiwgNzIxNCwgCisgICAgNzIxNiwgNzIxOCwgNzIyMCwgNzIyMiwgNzIyNCwgNzIyNiwgNzIyOCwgNzIzMCwgNzIzMiwgNzIzNCwgNzIzNiwgNzIzOCwgCisgICAgNzI0MCwgNzI0MiwgNzI0NCwgNzI0NiwgNzI0OCwgNzI1MCwgNzI1MiwgNzI1NCwgNzI1NiwgNzI1OCwgNzI2MCwgNzI2MiwgCisgICAgNzI2NCwgNzI2NiwgNzI2OCwgNzI3MCwgNzI3MiwgNzI3NCwgNzI3NiwgNzI3OCwgNzI4MCwgNzI4MiwgNzI4NCwgNzI4NiwgCisgICAgNzI4OCwgNzI5MCwgNzI5MiwgNzI5NCwgNzI5NiwgNzI5OCwgNzMwMCwgNzMwMiwgNzMwNCwgNzMwNiwgNzMwOCwgNzMxMCwgCisgICAgNzMxMiwgNzMxNCwgNzMxNiwgNzMxOCwgNzMyMCwgNzMyMiwgNzMyNCwgNzMyNiwgNzMyOCwgNzMzMCwgNzMzMiwgNzMzNCwgCisgICAgMCwgMCwgNzMzNiwgNzMzOCwgNzM0MCwgNzM0MiwgNzM0NCwgNzM0NiwgNzM0OCwgNzM1MCwgNzM1MiwgNzM1NCwgNzM1NiwgCisgICAgNzM1OCwgNzM2MCwgNzM2MiwgNzM2NCwgNzM2NiwgNzM2OCwgNzM3MCwgNzM3MiwgNzM3NCwgNzM3NiwgNzM3OCwgNzM4MCwgCisgICAgNzM4MiwgNzM4NCwgNzM4NiwgNzM4OCwgNzM5MCwgNzM5MiwgNzM5NCwgNzM5NiwgNzM5OCwgNzQwMCwgNzQwMiwgNzQwNCwgCisgICAgNzQwNiwgNzQwOCwgNzQxMCwgNzQxMiwgNzQxNCwgNzQxNiwgNzQxOCwgNzQyMCwgNzQyMiwgNzQyNCwgNzQyNiwgNzQyOCwgCisgICAgNzQzMCwgNzQzMiwgNzQzNCwgNzQzNiwgNzQzOCwgNzQ0MCwgNzQ0MiwgNzQ0NCwgNzQ0NiwgNzQ0OCwgNzQ1MCwgNzQ1MiwgCisgICAgNzQ1NCwgNzQ1NiwgNzQ1OCwgNzQ2MCwgNzQ2MiwgNzQ2NCwgNzQ2NiwgNzQ2OCwgNzQ3MCwgNzQ3MiwgNzQ3NCwgNzQ3NiwgCisgICAgNzQ3OCwgNzQ4MCwgNzQ4MiwgNzQ4NCwgNzQ4NiwgNzQ4OCwgNzQ5MCwgNzQ5MiwgNzQ5NCwgNzQ5NiwgNzQ5OCwgNzUwMCwgCisgICAgNzUwMiwgNzUwNCwgNzUwNiwgNzUwOCwgNzUxMCwgNzUxMiwgNzUxNCwgNzUxNiwgNzUxOCwgNzUyMCwgNzUyMiwgNzUyNCwgCisgICAgNzUyNiwgNzUyOCwgNzUzMCwgNzUzMiwgNzUzNCwgNzUzNiwgNzUzOCwgNzU0MCwgNzU0MiwgNzU0NCwgNzU0NiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU0OCwgNzU1MSwgNzU1NCwgNzU1NywgNzU2MSwgNzU2NSwgCisgICAgNzU2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3MSwgNzU3NCwgNzU3NywgNzU4MCwgNzU4MywgCisgICAgMCwgMCwgMCwgMCwgMCwgNzU4NiwgMCwgNzU4OSwgNzU5MiwgNzU5NCwgNzU5NiwgNzU5OCwgNzYwMCwgNzYwMiwgNzYwNCwgCisgICAgNzYwNiwgNzYwOCwgNzYxMCwgNzYxMiwgNzYxNSwgNzYxOCwgNzYyMSwgNzYyNCwgNzYyNywgNzYzMCwgNzYzMywgNzYzNiwgCisgICAgNzYzOSwgNzY0MiwgNzY0NSwgNzY0OCwgMCwgNzY1MSwgNzY1NCwgNzY1NywgNzY2MCwgNzY2MywgMCwgNzY2NiwgMCwgCisgICAgNzY2OSwgNzY3MiwgMCwgNzY3NSwgNzY3OCwgMCwgNzY4MSwgNzY4NCwgNzY4NywgNzY5MCwgNzY5MywgNzY5NiwgNzY5OSwgCisgICAgNzcwMiwgNzcwNSwgNzcwOCwgNzcxMSwgNzcxMywgNzcxNSwgNzcxNywgNzcxOSwgNzcyMSwgNzcyMywgNzcyNSwgNzcyNywgCisgICAgNzcyOSwgNzczMSwgNzczMywgNzczNSwgNzczNywgNzczOSwgNzc0MSwgNzc0MywgNzc0NSwgNzc0NywgNzc0OSwgNzc1MSwgCisgICAgNzc1MywgNzc1NSwgNzc1NywgNzc1OSwgNzc2MSwgNzc2MywgNzc2NSwgNzc2NywgNzc2OSwgNzc3MSwgNzc3MywgNzc3NSwgCisgICAgNzc3NywgNzc3OSwgNzc4MSwgNzc4MywgNzc4NSwgNzc4NywgNzc4OSwgNzc5MSwgNzc5MywgNzc5NSwgNzc5NywgNzc5OSwgCisgICAgNzgwMSwgNzgwMywgNzgwNSwgNzgwNywgNzgwOSwgNzgxMSwgNzgxMywgNzgxNSwgNzgxNywgNzgxOSwgNzgyMSwgNzgyMywgCisgICAgNzgyNSwgNzgyNywgNzgyOSwgNzgzMSwgNzgzMywgNzgzNSwgNzgzNywgNzgzOSwgNzg0MSwgNzg0MywgNzg0NSwgNzg0NywgCisgICAgNzg0OSwgNzg1MSwgNzg1MywgNzg1NSwgNzg1NywgNzg1OSwgNzg2MSwgNzg2MywgNzg2NSwgNzg2NywgNzg2OSwgNzg3MSwgCisgICAgNzg3MywgNzg3NSwgNzg3NywgNzg3OSwgNzg4MSwgNzg4MywgNzg4NSwgNzg4NywgNzg4OSwgNzg5MSwgNzg5MywgNzg5NSwgCisgICAgNzg5NywgNzg5OSwgNzkwMSwgNzkwMywgNzkwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkwNywgNzkwOSwgCisgICAgNzkxMSwgNzkxMywgNzkxNSwgNzkxNywgNzkxOSwgNzkyMSwgNzkyMywgNzkyNSwgNzkyNywgNzkyOSwgNzkzMSwgNzkzMywgCisgICAgNzkzNSwgNzkzNywgNzkzOSwgNzk0MSwgNzk0MywgNzk0NSwgNzk0NywgNzk0OSwgNzk1MSwgNzk1MywgNzk1NiwgNzk1OSwgCisgICAgNzk2MiwgNzk2NSwgNzk2OCwgNzk3MSwgNzk3NCwgNzk3NywgNzk4MCwgNzk4MywgNzk4NiwgNzk4OSwgNzk5MiwgNzk5NSwgCisgICAgNzk5OCwgODAwMSwgODAwNCwgODAwNywgODAwOSwgODAxMSwgODAxMywgODAxNSwgODAxOCwgODAyMSwgODAyNCwgODAyNywgCisgICAgODAzMCwgODAzMywgODAzNiwgODAzOSwgODA0MiwgODA0NSwgODA0OCwgODA1MSwgODA1NCwgODA1NywgODA2MCwgODA2MywgCisgICAgODA2NiwgODA2OSwgODA3MiwgODA3NSwgODA3OCwgODA4MSwgODA4NCwgODA4NywgODA5MCwgODA5MywgODA5NiwgODA5OSwgCisgICAgODEwMiwgODEwNSwgODEwOCwgODExMSwgODExNCwgODExNywgODEyMCwgODEyMywgODEyNiwgODEyOSwgODEzMiwgODEzNSwgCisgICAgODEzOCwgODE0MSwgODE0NCwgODE0NywgODE1MCwgODE1MywgODE1NiwgODE1OSwgODE2MiwgODE2NSwgODE2OCwgODE3MSwgCisgICAgODE3NCwgODE3NywgODE4MCwgODE4MywgODE4NiwgODE4OSwgODE5MiwgODE5NSwgODE5OCwgODIwMSwgODIwNCwgODIwNywgCisgICAgODIxMCwgODIxMywgODIxNiwgODIxOSwgODIyMiwgODIyNSwgODIyOCwgODIzMSwgODIzNCwgODIzNywgODI0MCwgODI0MywgCisgICAgODI0NiwgODI0OSwgODI1MiwgODI1NSwgODI1OCwgODI2MSwgODI2NCwgODI2NywgODI3MCwgODI3MywgODI3NiwgODI3OSwgCisgICAgODI4MiwgODI4NSwgODI4OCwgODI5MSwgODI5NCwgODI5NywgODMwMSwgODMwNSwgODMwOSwgODMxMywgODMxNywgODMyMSwgCisgICAgODMyNCwgODMyNywgODMzMCwgODMzMywgODMzNiwgODMzOSwgODM0MiwgODM0NSwgODM0OCwgODM1MSwgODM1NCwgODM1NywgCisgICAgODM2MCwgODM2MywgODM2NiwgODM2OSwgODM3MiwgODM3NSwgODM3OCwgODM4MSwgODM4NCwgODM4NywgODM5MCwgODM5MywgCisgICAgODM5NiwgODM5OSwgODQwMiwgODQwNSwgODQwOCwgODQxMSwgODQxNCwgODQxNywgODQyMCwgODQyMywgODQyNiwgODQyOSwgCisgICAgODQzMiwgODQzNSwgODQzOCwgODQ0MSwgODQ0NCwgODQ0NywgODQ1MCwgODQ1MywgODQ1NiwgODQ1OSwgODQ2MiwgODQ2NSwgCisgICAgODQ2OCwgODQ3MSwgODQ3NCwgODQ3NywgODQ4MCwgODQ4MywgODQ4NiwgODQ4OSwgODQ5MiwgODQ5NSwgODQ5OCwgODUwMSwgCisgICAgODUwNCwgODUwNywgODUxMCwgODUxMywgODUxNiwgODUxOSwgODUyMiwgODUyNSwgODUyOCwgODUzMSwgODUzNCwgODUzNywgCisgICAgODU0MCwgODU0MywgODU0NiwgODU0OSwgODU1MiwgODU1NSwgODU1OCwgODU2MSwgODU2NCwgODU2NywgODU3MCwgODU3MywgCisgICAgODU3NiwgODU3OSwgODU4MiwgODU4NSwgODU4OCwgODU5MSwgODU5NCwgODU5NywgODYwMCwgODYwMywgODYwNiwgODYwOSwgCisgICAgODYxMiwgODYxNSwgODYxOCwgODYyMSwgODYyNCwgODYyNywgODYzMCwgODYzMywgODYzNiwgODYzOSwgODY0MiwgODY0NSwgCisgICAgODY0OCwgODY1MSwgODY1NCwgODY1NywgODY2MCwgODY2MywgODY2NiwgODY2OSwgODY3MiwgODY3NSwgODY3OCwgODY4MSwgCisgICAgODY4NCwgODY4NywgODY5MCwgODY5MywgODY5NiwgODY5OSwgODcwMiwgODcwNSwgODcwOCwgODcxMSwgODcxNCwgODcxNywgCisgICAgODcyMCwgODcyMywgODcyNiwgODcyOSwgODczMiwgODczNSwgODczOCwgODc0MSwgODc0NCwgODc0NywgODc1MSwgODc1NSwgCisgICAgODc1OSwgODc2MiwgODc2NSwgODc2OCwgODc3MSwgODc3NCwgODc3NywgODc4MCwgODc4MywgODc4NiwgODc4OSwgODc5MiwgCisgICAgODc5NSwgODc5OCwgODgwMSwgODgwNCwgODgwNywgODgxMCwgODgxMywgODgxNiwgODgxOSwgODgyMiwgODgyNSwgODgyOCwgCisgICAgODgzMSwgODgzNCwgODgzNywgODg0MCwgODg0MywgODg0NiwgODg0OSwgODg1MiwgODg1NSwgODg1OCwgODg2MSwgODg2NCwgCisgICAgODg2NywgODg3MCwgODg3MywgODg3NiwgODg3OSwgODg4MiwgODg4NSwgODg4OCwgODg5MSwgODg5NCwgODg5NywgODkwMCwgCisgICAgODkwMywgODkwNiwgODkwOSwgODkxMiwgODkxNSwgODkxOCwgODkyMSwgODkyNCwgODkyNywgODkzMCwgODkzMywgODkzNiwgCisgICAgODkzOSwgODk0MiwgODk0NSwgODk0OCwgODk1MSwgODk1NCwgODk1NywgODk2MCwgODk2MywgODk2NiwgODk2OSwgODk3MiwgCisgICAgODk3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk3OCwgODk4MiwgCisgICAgODk4NiwgODk5MCwgODk5NCwgODk5OCwgOTAwMiwgOTAwNiwgOTAxMCwgOTAxNCwgOTAxOCwgOTAyMiwgOTAyNiwgOTAzMCwgCisgICAgOTAzNCwgOTAzOCwgOTA0MiwgOTA0NiwgOTA1MCwgOTA1NCwgOTA1OCwgOTA2MiwgOTA2NiwgOTA3MCwgOTA3NCwgOTA3OCwgCisgICAgOTA4MiwgOTA4NiwgOTA5MCwgOTA5NCwgOTA5OCwgOTEwMiwgOTEwNiwgOTExMCwgOTExNCwgOTExOCwgOTEyMiwgOTEyNiwgCisgICAgOTEzMCwgOTEzNCwgOTEzOCwgOTE0MiwgOTE0NiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2MiwgOTE2NiwgOTE3MCwgOTE3NCwgCisgICAgOTE3OCwgOTE4MiwgOTE4NiwgOTE5MCwgOTE5NCwgOTE5OCwgOTIwMiwgOTIwNiwgOTIxMCwgOTIxNCwgOTIxOCwgOTIyMiwgCisgICAgOTIyNiwgOTIzMCwgMCwgMCwgOTIzNCwgOTIzOCwgOTI0MiwgOTI0NiwgOTI1MCwgOTI1NCwgOTI1OCwgOTI2MiwgOTI2NiwgCisgICAgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4NiwgOTI5MCwgOTI5NCwgOTI5OCwgOTMwMiwgOTMwNiwgOTMxMCwgOTMxNCwgCisgICAgOTMxOCwgOTMyMiwgOTMyNiwgOTMzMCwgOTMzNCwgOTMzOCwgOTM0MiwgOTM0NiwgOTM1MCwgOTM1NCwgOTM1OCwgOTM2MiwgCisgICAgOTM2NiwgOTM3MCwgOTM3NCwgOTM3OCwgOTM4MiwgOTM4NiwgOTM5MCwgOTM5NCwgOTM5OCwgOTQwMiwgOTQwNiwgOTQxMCwgCisgICAgOTQxNCwgOTQxOCwgOTQyMiwgOTQyNiwgOTQzMCwgOTQzNCwgOTQzOCwgOTQ0MiwgOTQ0NiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ1MCwgOTQ1NCwgOTQ1OCwgOTQ2MywgOTQ2OCwgOTQ3MywgOTQ3OCwgCisgICAgOTQ4MywgOTQ4OCwgOTQ5MywgOTQ5NywgOTUxNiwgOTUyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUzMCwgOTUzMiwgOTUzNCwgOTUzNiwgOTUzOCwgOTU0MCwgOTU0MiwgOTU0NCwgCisgICAgOTU0NiwgOTU0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOTU1MCwgOTU1MiwgOTU1NCwgOTU1NiwgOTU1OCwgOTU2MCwgOTU2MiwgOTU2NCwgOTU2NiwgOTU2OCwgOTU3MCwgCisgICAgOTU3MiwgOTU3NCwgOTU3NiwgOTU3OCwgOTU4MCwgOTU4MiwgOTU4NCwgOTU4NiwgOTU4OCwgOTU5MCwgMCwgMCwgOTU5MiwgCisgICAgOTU5NCwgOTU5NiwgOTU5OCwgOTYwMCwgOTYwMiwgOTYwNCwgOTYwNiwgOTYwOCwgOTYxMCwgOTYxMiwgOTYxNCwgMCwgCisgICAgOTYxNiwgOTYxOCwgOTYyMCwgOTYyMiwgOTYyNCwgOTYyNiwgOTYyOCwgOTYzMCwgOTYzMiwgOTYzNCwgOTYzNiwgOTYzOCwgCisgICAgOTY0MCwgOTY0MiwgOTY0NCwgOTY0NiwgOTY0OCwgOTY1MCwgOTY1MiwgMCwgOTY1NCwgOTY1NiwgOTY1OCwgOTY2MCwgMCwgCisgICAgMCwgMCwgMCwgOTY2MiwgOTY2NSwgOTY2OCwgMCwgOTY3MSwgMCwgOTY3NCwgOTY3NywgOTY4MCwgOTY4MywgOTY4NiwgCisgICAgOTY4OSwgOTY5MiwgOTY5NSwgOTY5OCwgOTcwMSwgOTcwNCwgOTcwNiwgOTcwOCwgOTcxMCwgOTcxMiwgOTcxNCwgOTcxNiwgCisgICAgOTcxOCwgOTcyMCwgOTcyMiwgOTcyNCwgOTcyNiwgOTcyOCwgOTczMCwgOTczMiwgOTczNCwgOTczNiwgOTczOCwgOTc0MCwgCisgICAgOTc0MiwgOTc0NCwgOTc0NiwgOTc0OCwgOTc1MCwgOTc1MiwgOTc1NCwgOTc1NiwgOTc1OCwgOTc2MCwgOTc2MiwgOTc2NCwgCisgICAgOTc2NiwgOTc2OCwgOTc3MCwgOTc3MiwgOTc3NCwgOTc3NiwgOTc3OCwgOTc4MCwgOTc4MiwgOTc4NCwgOTc4NiwgOTc4OCwgCisgICAgOTc5MCwgOTc5MiwgOTc5NCwgOTc5NiwgOTc5OCwgOTgwMCwgOTgwMiwgOTgwNCwgOTgwNiwgOTgwOCwgOTgxMCwgOTgxMiwgCisgICAgOTgxNCwgOTgxNiwgOTgxOCwgOTgyMCwgOTgyMiwgOTgyNCwgOTgyNiwgOTgyOCwgOTgzMCwgOTgzMiwgOTgzNCwgOTgzNiwgCisgICAgOTgzOCwgOTg0MCwgOTg0MiwgOTg0NCwgOTg0NiwgOTg0OCwgOTg1MCwgOTg1MiwgOTg1NCwgOTg1NiwgOTg1OCwgOTg2MCwgCisgICAgOTg2MiwgOTg2NCwgOTg2NiwgOTg2OCwgOTg3MCwgOTg3MiwgOTg3NCwgOTg3NiwgOTg3OCwgOTg4MCwgOTg4MiwgOTg4NCwgCisgICAgOTg4NiwgOTg4OCwgOTg5MCwgOTg5MiwgOTg5NCwgOTg5NiwgOTg5OCwgOTkwMCwgOTkwMiwgOTkwNCwgOTkwNiwgOTkwOCwgCisgICAgOTkxMCwgOTkxMiwgOTkxNCwgOTkxNiwgOTkxOCwgOTkyMCwgOTkyMiwgOTkyNCwgOTkyNiwgOTkyOCwgOTkzMCwgOTkzMiwgCisgICAgOTkzNCwgOTkzNiwgOTkzOCwgOTk0MSwgOTk0NCwgOTk0NywgOTk1MCwgOTk1MywgOTk1NiwgOTk1OSwgMCwgMCwgMCwgMCwgCisgICAgOTk2MiwgOTk2NCwgOTk2NiwgOTk2OCwgOTk3MCwgOTk3MiwgOTk3NCwgOTk3NiwgOTk3OCwgOTk4MCwgOTk4MiwgOTk4NCwgCisgICAgOTk4NiwgOTk4OCwgOTk5MCwgOTk5MiwgOTk5NCwgOTk5NiwgOTk5OCwgMTAwMDAsIDEwMDAyLCAxMDAwNCwgMTAwMDYsIAorICAgIDEwMDA4LCAxMDAxMCwgMTAwMTIsIDEwMDE0LCAxMDAxNiwgMTAwMTgsIDEwMDIwLCAxMDAyMiwgMTAwMjQsIDEwMDI2LCAKKyAgICAxMDAyOCwgMTAwMzAsIDEwMDMyLCAxMDAzNCwgMTAwMzYsIDEwMDM4LCAxMDA0MCwgMTAwNDIsIDEwMDQ0LCAxMDA0NiwgCisgICAgMTAwNDgsIDEwMDUwLCAxMDA1MiwgMTAwNTQsIDEwMDU2LCAxMDA1OCwgMTAwNjAsIDEwMDYyLCAxMDA2NCwgMTAwNjYsIAorICAgIDEwMDY4LCAxMDA3MCwgMTAwNzIsIDEwMDc0LCAxMDA3NiwgMTAwNzgsIDEwMDgwLCAxMDA4MiwgMTAwODQsIDEwMDg2LCAKKyAgICAxMDA4OCwgMTAwOTAsIDEwMDkyLCAxMDA5NCwgMTAwOTYsIDEwMDk4LCAxMDEwMCwgMTAxMDIsIDEwMTA0LCAxMDEwNiwgCisgICAgMTAxMDgsIDEwMTEwLCAxMDExMiwgMTAxMTQsIDEwMTE2LCAxMDExOCwgMTAxMjAsIDEwMTIyLCAxMDEyNCwgMTAxMjYsIAorICAgIDEwMTI4LCAxMDEzMCwgMTAxMzIsIDEwMTM0LCAxMDEzNiwgMTAxMzgsIDEwMTQwLCAxMDE0MiwgMTAxNDQsIDEwMTQ2LCAKKyAgICAxMDE0OCwgMTAxNTAsIDEwMTUyLCAxMDE1NCwgMTAxNTYsIDEwMTU4LCAxMDE2MCwgMTAxNjIsIDEwMTY0LCAxMDE2NiwgCisgICAgMTAxNjgsIDEwMTcwLCAxMDE3MiwgMTAxNzQsIDEwMTc2LCAxMDE3OCwgMTAxODAsIDEwMTgyLCAxMDE4NCwgMTAxODYsIAorICAgIDEwMTg4LCAxMDE5MCwgMTAxOTIsIDEwMTk0LCAxMDE5NiwgMTAxOTgsIDEwMjAwLCAxMDIwMiwgMTAyMDQsIDEwMjA2LCAKKyAgICAxMDIwOCwgMTAyMTAsIDEwMjEyLCAxMDIxNCwgMTAyMTYsIDEwMjE4LCAxMDIyMCwgMTAyMjIsIDEwMjI0LCAxMDIyNiwgCisgICAgMTAyMjgsIDEwMjMwLCAxMDIzMiwgMTAyMzQsIDEwMjM2LCAxMDIzOCwgMTAyNDAsIDEwMjQyLCAxMDI0NCwgMTAyNDYsIAorICAgIDEwMjQ4LCAxMDI1MCwgMTAyNTIsIDEwMjU0LCAxMDI1NiwgMTAyNTgsIDEwMjYwLCAxMDI2MiwgMTAyNjQsIDEwMjY2LCAKKyAgICAxMDI2OCwgMTAyNzAsIDEwMjcyLCAxMDI3NCwgMTAyNzYsIDEwMjc4LCAxMDI4MCwgMTAyODIsIDEwMjg0LCAxMDI4NiwgCisgICAgMTAyODgsIDEwMjkwLCAxMDI5MiwgMTAyOTQsIDEwMjk2LCAxMDI5OCwgMTAzMDAsIDEwMzAyLCAxMDMwNCwgMTAzMDYsIAorICAgIDEwMzA4LCAxMDMxMCwgMTAzMTIsIDEwMzE0LCAxMDMxNiwgMTAzMTgsIDEwMzIwLCAxMDMyMiwgMTAzMjQsIDEwMzI2LCAKKyAgICAxMDMyOCwgMTAzMzAsIDEwMzMyLCAxMDMzNCwgMTAzMzYsIDEwMzM4LCAxMDM0MCwgMCwgMCwgMCwgMTAzNDIsIDEwMzQ0LCAKKyAgICAxMDM0NiwgMTAzNDgsIDEwMzUwLCAxMDM1MiwgMCwgMCwgMTAzNTQsIDEwMzU2LCAxMDM1OCwgMTAzNjAsIDEwMzYyLCAKKyAgICAxMDM2NCwgMCwgMCwgMTAzNjYsIDEwMzY4LCAxMDM3MCwgMTAzNzIsIDEwMzc0LCAxMDM3NiwgMCwgMCwgMTAzNzgsIAorICAgIDEwMzgwLCAxMDM4MiwgMCwgMCwgMCwgMTAzODQsIDEwMzg2LCAxMDM4OCwgMTAzOTAsIDEwMzkyLCAxMDM5NCwgMTAzOTYsIAorICAgIDAsIDEwMzk4LCAxMDQwMCwgMTA0MDIsIDEwNDA0LCAxMDQwNiwgMTA0MDgsIDEwNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjA3LCA2NjA5LCA2NjExLCA2NjEzLCAKLSAgICA2NjE1LCA2NjE3LCA2NjE5LCA2NjIxLCA2NjIzLCA2NjI1LCA2NjI3LCA2NjI5LCA2NjMxLCA2NjMzLCA2NjM1LCA2NjM3LCAKLSAgICA2NjM5LCA2NjQxLCA2NjQzLCA2NjQ1LCA2NjQ3LCA2NjQ5LCA2NjUxLCA2NjUzLCA2NjU1LCA2NjU3LCA2NjU5LCA2NjYxLCAKLSAgICA2NjYzLCA2NjY1LCA2NjY3LCA2NjY5LCA2NjcxLCA2NjczLCA2Njc1LCA2Njc3LCA2Njc5LCA2NjgxLCA2NjgzLCA2Njg1LCAKLSAgICA2Njg3LCA2Njg5LCA2NjkxLCA2NjkzLCA2Njk1LCA2Njk3LCA2Njk5LCA2NzAxLCA2NzAzLCA2NzA1LCA2NzA3LCA2NzA5LCAKLSAgICA2NzExLCA2NzEzLCA2NzE1LCA2NzE3LCA2NzE5LCA2NzIxLCA2NzIzLCA2NzI1LCA2NzI3LCA2NzI5LCA2NzMxLCA2NzMzLCAKLSAgICA2NzM1LCA2NzM3LCA2NzM5LCA2NzQxLCA2NzQzLCA2NzQ1LCA2NzQ3LCA2NzQ5LCA2NzUxLCA2NzUzLCA2NzU1LCA2NzU3LCAKLSAgICA2NzU5LCA2NzYxLCA2NzYzLCA2NzY1LCA2NzY3LCA2NzY5LCA2NzcxLCA2NzczLCA2Nzc1LCA2Nzc3LCA2Nzc5LCA2NzgxLCAKLSAgICA2NzgzLCA2Nzg1LCA2Nzg3LCA2Nzg5LCA2NzkxLCA2NzkzLCA2Nzk1LCA2Nzk3LCA2Nzk5LCA2ODAxLCA2ODAzLCA2ODA1LCAKLSAgICA2ODA3LCA2ODA5LCA2ODExLCA2ODEzLCA2ODE1LCA2ODE3LCA2ODE5LCA2ODIxLCA2ODIzLCA2ODI1LCA2ODI3LCA2ODI5LCAKLSAgICA2ODMxLCA2ODMzLCA2ODM1LCA2ODM3LCA2ODM5LCA2ODQxLCA2ODQzLCA2ODQ1LCA2ODQ3LCA2ODQ5LCA2ODUxLCA2ODUzLCAKLSAgICA2ODU1LCA2ODU3LCA2ODU5LCA2ODYxLCA2ODYzLCA2ODY1LCA2ODY3LCA2ODY5LCA2ODcxLCA2ODczLCA2ODc1LCA2ODc3LCAKLSAgICA2ODc5LCA2ODgxLCA2ODgzLCA2ODg1LCA2ODg3LCA2ODg5LCA2ODkxLCA2ODkzLCA2ODk1LCA2ODk3LCA2ODk5LCA2OTAxLCAKLSAgICA2OTAzLCA2OTA1LCA2OTA3LCA2OTA5LCA2OTExLCA2OTEzLCA2OTE1LCA2OTE3LCA2OTE5LCA2OTIxLCA2OTIzLCA2OTI1LCAKLSAgICA2OTI3LCA2OTI5LCA2OTMxLCA2OTMzLCA2OTM1LCA2OTM3LCA2OTM5LCA2OTQxLCA2OTQzLCA2OTQ1LCA2OTQ3LCA2OTQ5LCAKLSAgICA2OTUxLCA2OTUzLCA2OTU1LCA2OTU3LCA2OTU5LCA2OTYxLCA2OTYzLCA2OTY1LCA2OTY3LCA2OTY5LCA2OTcxLCA2OTczLCAKLSAgICA2OTc1LCA2OTc3LCA2OTc5LCA2OTgxLCA2OTgzLCA2OTg1LCA2OTg3LCA2OTg5LCA2OTkxLCA2OTkzLCA2OTk1LCA2OTk3LCAKLSAgICA2OTk5LCA3MDAxLCA3MDAzLCA3MDA1LCA3MDA3LCA3MDA5LCA3MDExLCA3MDEzLCA3MDE1LCA3MDE3LCA3MDE5LCA3MDIxLCAKLSAgICA3MDIzLCA3MDI1LCA3MDI3LCA3MDI5LCA3MDMxLCA3MDMzLCA3MDM1LCA3MDM3LCA3MDM5LCA3MDQxLCA3MDQzLCA3MDQ1LCAKLSAgICA3MDQ3LCA3MDQ5LCA3MDUxLCA3MDUzLCA3MDU1LCA3MDU3LCA3MDU5LCA3MDYxLCA3MDYzLCA3MDY1LCA3MDY3LCA3MDY5LCAKLSAgICA3MDcxLCA3MDczLCA3MDc1LCA3MDc3LCA3MDc5LCA3MDgxLCA3MDgzLCA3MDg1LCA3MDg3LCA3MDg5LCA3MDkxLCA3MDkzLCAKLSAgICA3MDk1LCA3MDk3LCA3MDk5LCA3MTAxLCA3MTAzLCA3MTA1LCA3MTA3LCA3MTA5LCA3MTExLCA3MTEzLCA3MTE1LCA3MTE3LCAKLSAgICA3MTE5LCA3MTIxLCA3MTIzLCA3MTI1LCA3MTI3LCA3MTI5LCA3MTMxLCA3MTMzLCA3MTM1LCA3MTM3LCA3MTM5LCA3MTQxLCAKLSAgICA3MTQzLCA3MTQ1LCAwLCAwLCA3MTQ3LCAwLCA3MTQ5LCAwLCAwLCA3MTUxLCA3MTUzLCA3MTU1LCA3MTU3LCA3MTU5LCAKLSAgICA3MTYxLCA3MTYzLCA3MTY1LCA3MTY3LCA3MTY5LCAwLCA3MTcxLCAwLCA3MTczLCAwLCAwLCA3MTc1LCA3MTc3LCAwLCAwLCAKLSAgICAwLCA3MTc5LCA3MTgxLCA3MTgzLCA3MTg1LCAwLCAwLCA3MTg3LCA3MTg5LCA3MTkxLCA3MTkzLCA3MTk1LCA3MTk3LCAKLSAgICA3MTk5LCA3MjAxLCA3MjAzLCA3MjA1LCA3MjA3LCA3MjA5LCA3MjExLCA3MjEzLCA3MjE1LCA3MjE3LCA3MjE5LCA3MjIxLCAKLSAgICA3MjIzLCA3MjI1LCA3MjI3LCA3MjI5LCA3MjMxLCA3MjMzLCA3MjM1LCA3MjM3LCA3MjM5LCA3MjQxLCA3MjQzLCA3MjQ1LCAKLSAgICA3MjQ3LCA3MjQ5LCA3MjUxLCA3MjUzLCA3MjU1LCA3MjU3LCA3MjU5LCA3MjYxLCA3MjYzLCA3MjY1LCA3MjY3LCA3MjY5LCAKLSAgICA3MjcxLCA3MjczLCA3Mjc1LCA3Mjc3LCA3Mjc5LCA3MjgxLCA3MjgzLCA3Mjg1LCA3Mjg3LCA3Mjg5LCA3MjkxLCA3MjkzLCAKLSAgICA3Mjk1LCA3Mjk3LCA3Mjk5LCA3MzAxLCA3MzAzLCAwLCAwLCAwLCAwLCAwLCA3MzA1LCA3MzA3LCA3MzA5LCA3MzExLCAKLSAgICA3MzEzLCA3MzE1LCA3MzE3LCA3MzE5LCA3MzIxLCA3MzIzLCA3MzI1LCA3MzI3LCA3MzI5LCA3MzMxLCA3MzMzLCA3MzM1LCAKLSAgICA3MzM3LCA3MzM5LCA3MzQxLCA3MzQzLCA3MzQ1LCA3MzQ3LCA3MzQ5LCA3MzUxLCA3MzUzLCA3MzU1LCA3MzU3LCA3MzU5LCAKLSAgICA3MzYxLCA3MzYzLCA3MzY1LCA3MzY3LCA3MzY5LCA3MzcxLCA3MzczLCA3Mzc1LCA3Mzc3LCA3Mzc5LCA3MzgxLCA3MzgzLCAKLSAgICA3Mzg1LCA3Mzg3LCA3Mzg5LCA3MzkxLCA3MzkzLCA3Mzk1LCA3Mzk3LCA3Mzk5LCA3NDAxLCA3NDAzLCA3NDA1LCA3NDA3LCAKLSAgICA3NDA5LCA3NDExLCA3NDEzLCA3NDE1LCA3NDE3LCA3NDE5LCA3NDIxLCA3NDIzLCA3NDI1LCA3NDI3LCA3NDI5LCA3NDMxLCAKLSAgICA3NDMzLCA3NDM1LCA3NDM3LCA3NDM5LCA3NDQxLCA3NDQzLCA3NDQ1LCA3NDQ3LCA3NDQ5LCA3NDUxLCA3NDUzLCA3NDU1LCAKLSAgICA3NDU3LCA3NDU5LCA3NDYxLCA3NDYzLCA3NDY1LCA3NDY3LCA3NDY5LCA3NDcxLCA3NDczLCA3NDc1LCA3NDc3LCA3NDc5LCAKLSAgICA3NDgxLCA3NDgzLCA3NDg1LCA3NDg3LCA3NDg5LCA3NDkxLCA3NDkzLCA3NDk1LCA3NDk3LCA3NDk5LCA3NTAxLCA3NTAzLCAKLSAgICA3NTA1LCA3NTA3LCA3NTA5LCA3NTExLCA3NTEzLCA3NTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQxMiwgMCwgCisgICAgMTA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMDQyMSwgMTA0MjQsIDEwNDI3LCAxMDQzMCwgMTA0MzMsIDEwNDM2LCAxMDQzOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0NDIsIDEwNDQ1LCAxMDQ0OCwgMTA0NTEsIDEwNDU0LCAxMDQ1NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0NjAsIDEwNDYyLCAxMDQ2NCwgMTA0NjYsIAorICAgIDEwNDY4LCAxMDQ3MCwgMTA0NzIsIDEwNDc0LCAxMDQ3NiwgMTA0NzgsIDEwNDgwLCAxMDQ4MiwgMTA0ODQsIDEwNDg2LCAKKyAgICAxMDQ4OCwgMTA0OTAsIDEwNDkyLCAxMDQ5NCwgMTA0OTYsIDEwNDk4LCAxMDUwMCwgMTA1MDIsIDEwNTA0LCAxMDUwNiwgCisgICAgMTA1MDgsIDEwNTEwLCAxMDUxMiwgMTA1MTQsIDEwNTE2LCAxMDUxOCwgMTA1MjAsIDEwNTIyLCAxMDUyNCwgMTA1MjYsIAorICAgIDEwNTI4LCAxMDUzMCwgMTA1MzIsIDEwNTM0LCAxMDUzNiwgMTA1MzgsIDEwNTQwLCAxMDU0MiwgMTA1NDQsIDEwNTQ2LCAKKyAgICAxMDU0OCwgMTA1NTAsIDEwNTUyLCAxMDU1NCwgMTA1NTYsIDEwNTU4LCAxMDU2MCwgMTA1NjIsIDEwNTY0LCAxMDU2NiwgCisgICAgMTA1NjgsIDEwNTcwLCAxMDU3MiwgMTA1NzQsIDEwNTc2LCAxMDU3OCwgMTA1ODAsIDEwNTgyLCAxMDU4NCwgMTA1ODYsIAorICAgIDEwNTg4LCAxMDU5MCwgMTA1OTIsIDEwNTk0LCAxMDU5NiwgMTA1OTgsIDEwNjAwLCAxMDYwMiwgMTA2MDQsIDEwNjA2LCAKKyAgICAxMDYwOCwgMTA2MTAsIDEwNjEyLCAxMDYxNCwgMTA2MTYsIDEwNjE4LCAxMDYyMCwgMTA2MjIsIDEwNjI0LCAxMDYyNiwgCisgICAgMTA2MjgsIDAsIDEwNjMwLCAxMDYzMiwgMTA2MzQsIDEwNjM2LCAxMDYzOCwgMTA2NDAsIDEwNjQyLCAxMDY0NCwgMTA2NDYsIAorICAgIDEwNjQ4LCAxMDY1MCwgMTA2NTIsIDEwNjU0LCAxMDY1NiwgMTA2NTgsIDEwNjYwLCAxMDY2MiwgMTA2NjQsIDEwNjY2LCAKKyAgICAxMDY2OCwgMTA2NzAsIDEwNjcyLCAxMDY3NCwgMTA2NzYsIDEwNjc4LCAxMDY4MCwgMTA2ODIsIDEwNjg0LCAxMDY4NiwgCisgICAgMTA2ODgsIDEwNjkwLCAxMDY5MiwgMTA2OTQsIDEwNjk2LCAxMDY5OCwgMTA3MDAsIDEwNzAyLCAxMDcwNCwgMTA3MDYsIAorICAgIDEwNzA4LCAxMDcxMCwgMTA3MTIsIDEwNzE0LCAxMDcxNiwgMTA3MTgsIDEwNzIwLCAxMDcyMiwgMTA3MjQsIDEwNzI2LCAKKyAgICAxMDcyOCwgMTA3MzAsIDEwNzMyLCAxMDczNCwgMTA3MzYsIDEwNzM4LCAxMDc0MCwgMTA3NDIsIDEwNzQ0LCAxMDc0NiwgCisgICAgMTA3NDgsIDEwNzUwLCAxMDc1MiwgMTA3NTQsIDEwNzU2LCAxMDc1OCwgMTA3NjAsIDEwNzYyLCAxMDc2NCwgMTA3NjYsIAorICAgIDEwNzY4LCAxMDc3MCwgMCwgMTA3NzIsIDEwNzc0LCAwLCAwLCAxMDc3NiwgMCwgMCwgMTA3NzgsIDEwNzgwLCAwLCAwLCAKKyAgICAxMDc4MiwgMTA3ODQsIDEwNzg2LCAxMDc4OCwgMCwgMTA3OTAsIDEwNzkyLCAxMDc5NCwgMTA3OTYsIDEwNzk4LCAxMDgwMCwgCisgICAgMTA4MDIsIDEwODA0LCAxMDgwNiwgMTA4MDgsIDEwODEwLCAxMDgxMiwgMCwgMTA4MTQsIDAsIDEwODE2LCAxMDgxOCwgCisgICAgMTA4MjAsIDEwODIyLCAxMDgyNCwgMTA4MjYsIDEwODI4LCAwLCAxMDgzMCwgMTA4MzIsIDEwODM0LCAxMDgzNiwgMTA4MzgsIAorICAgIDEwODQwLCAxMDg0MiwgMTA4NDQsIDEwODQ2LCAxMDg0OCwgMTA4NTAsIDEwODUyLCAxMDg1NCwgMTA4NTYsIDEwODU4LCAKKyAgICAxMDg2MCwgMTA4NjIsIDEwODY0LCAxMDg2NiwgMTA4NjgsIDEwODcwLCAxMDg3MiwgMTA4NzQsIDEwODc2LCAxMDg3OCwgCisgICAgMTA4ODAsIDEwODgyLCAxMDg4NCwgMTA4ODYsIDEwODg4LCAxMDg5MCwgMTA4OTIsIDEwODk0LCAxMDg5NiwgMTA4OTgsIAorICAgIDEwOTAwLCAxMDkwMiwgMTA5MDQsIDEwOTA2LCAxMDkwOCwgMTA5MTAsIDEwOTEyLCAxMDkxNCwgMTA5MTYsIDEwOTE4LCAKKyAgICAxMDkyMCwgMTA5MjIsIDEwOTI0LCAxMDkyNiwgMTA5MjgsIDEwOTMwLCAxMDkzMiwgMTA5MzQsIDEwOTM2LCAxMDkzOCwgCisgICAgMTA5NDAsIDEwOTQyLCAxMDk0NCwgMTA5NDYsIDEwOTQ4LCAxMDk1MCwgMTA5NTIsIDEwOTU0LCAxMDk1NiwgMTA5NTgsIDAsIAorICAgIDEwOTYwLCAxMDk2MiwgMTA5NjQsIDEwOTY2LCAwLCAwLCAxMDk2OCwgMTA5NzAsIDEwOTcyLCAxMDk3NCwgMTA5NzYsIAorICAgIDEwOTc4LCAxMDk4MCwgMTA5ODIsIDAsIDEwOTg0LCAxMDk4NiwgMTA5ODgsIDEwOTkwLCAxMDk5MiwgMTA5OTQsIDEwOTk2LCAKKyAgICAwLCAxMDk5OCwgMTEwMDAsIDExMDAyLCAxMTAwNCwgMTEwMDYsIDExMDA4LCAxMTAxMCwgMTEwMTIsIDExMDE0LCAxMTAxNiwgCisgICAgMTEwMTgsIDExMDIwLCAxMTAyMiwgMTEwMjQsIDExMDI2LCAxMTAyOCwgMTEwMzAsIDExMDMyLCAxMTAzNCwgMTEwMzYsIAorICAgIDExMDM4LCAxMTA0MCwgMTEwNDIsIDExMDQ0LCAxMTA0NiwgMTEwNDgsIDExMDUwLCAxMTA1MiwgMCwgMTEwNTQsIDExMDU2LCAKKyAgICAxMTA1OCwgMTEwNjAsIDAsIDExMDYyLCAxMTA2NCwgMTEwNjYsIDExMDY4LCAxMTA3MCwgMCwgMTEwNzIsIDAsIDAsIDAsIAorICAgIDExMDc0LCAxMTA3NiwgMTEwNzgsIDExMDgwLCAxMTA4MiwgMTEwODQsIDExMDg2LCAwLCAxMTA4OCwgMTEwOTAsIDExMDkyLCAKKyAgICAxMTA5NCwgMTEwOTYsIDExMDk4LCAxMTEwMCwgMTExMDIsIDExMTA0LCAxMTEwNiwgMTExMDgsIDExMTEwLCAxMTExMiwgCisgICAgMTExMTQsIDExMTE2LCAxMTExOCwgMTExMjAsIDExMTIyLCAxMTEyNCwgMTExMjYsIDExMTI4LCAxMTEzMCwgMTExMzIsIAorICAgIDExMTM0LCAxMTEzNiwgMTExMzgsIDExMTQwLCAxMTE0MiwgMTExNDQsIDExMTQ2LCAxMTE0OCwgMTExNTAsIDExMTUyLCAKKyAgICAxMTE1NCwgMTExNTYsIDExMTU4LCAxMTE2MCwgMTExNjIsIDExMTY0LCAxMTE2NiwgMTExNjgsIDExMTcwLCAxMTE3MiwgCisgICAgMTExNzQsIDExMTc2LCAxMTE3OCwgMTExODAsIDExMTgyLCAxMTE4NCwgMTExODYsIDExMTg4LCAxMTE5MCwgMTExOTIsIAorICAgIDExMTk0LCAxMTE5NiwgMTExOTgsIDExMjAwLCAxMTIwMiwgMTEyMDQsIDExMjA2LCAxMTIwOCwgMTEyMTAsIDExMjEyLCAKKyAgICAxMTIxNCwgMTEyMTYsIDExMjE4LCAxMTIyMCwgMTEyMjIsIDExMjI0LCAxMTIyNiwgMTEyMjgsIDExMjMwLCAxMTIzMiwgCisgICAgMTEyMzQsIDExMjM2LCAxMTIzOCwgMTEyNDAsIDExMjQyLCAxMTI0NCwgMTEyNDYsIDExMjQ4LCAxMTI1MCwgMTEyNTIsIAorICAgIDExMjU0LCAxMTI1NiwgMTEyNTgsIDExMjYwLCAxMTI2MiwgMTEyNjQsIDExMjY2LCAxMTI2OCwgMTEyNzAsIDExMjcyLCAKKyAgICAxMTI3NCwgMTEyNzYsIDExMjc4LCAxMTI4MCwgMTEyODIsIDExMjg0LCAxMTI4NiwgMTEyODgsIDExMjkwLCAxMTI5MiwgCisgICAgMTEyOTQsIDExMjk2LCAxMTI5OCwgMTEzMDAsIDExMzAyLCAxMTMwNCwgMTEzMDYsIDExMzA4LCAxMTMxMCwgMTEzMTIsIAorICAgIDExMzE0LCAxMTMxNiwgMTEzMTgsIDExMzIwLCAxMTMyMiwgMTEzMjQsIDExMzI2LCAxMTMyOCwgMTEzMzAsIDExMzMyLCAKKyAgICAxMTMzNCwgMTEzMzYsIDExMzM4LCAxMTM0MCwgMTEzNDIsIDExMzQ0LCAxMTM0NiwgMTEzNDgsIDExMzUwLCAxMTM1MiwgCisgICAgMTEzNTQsIDExMzU2LCAxMTM1OCwgMTEzNjAsIDExMzYyLCAxMTM2NCwgMTEzNjYsIDExMzY4LCAxMTM3MCwgMTEzNzIsIAorICAgIDExMzc0LCAxMTM3NiwgMTEzNzgsIDExMzgwLCAxMTM4MiwgMTEzODQsIDExMzg2LCAxMTM4OCwgMTEzOTAsIDExMzkyLCAKKyAgICAxMTM5NCwgMTEzOTYsIDExMzk4LCAxMTQwMCwgMTE0MDIsIDExNDA0LCAxMTQwNiwgMTE0MDgsIDExNDEwLCAxMTQxMiwgCisgICAgMTE0MTQsIDExNDE2LCAxMTQxOCwgMTE0MjAsIDExNDIyLCAxMTQyNCwgMTE0MjYsIDExNDI4LCAxMTQzMCwgMTE0MzIsIAorICAgIDExNDM0LCAxMTQzNiwgMTE0MzgsIDExNDQwLCAxMTQ0MiwgMTE0NDQsIDExNDQ2LCAxMTQ0OCwgMTE0NTAsIDExNDUyLCAKKyAgICAxMTQ1NCwgMTE0NTYsIDExNDU4LCAxMTQ2MCwgMTE0NjIsIDExNDY0LCAxMTQ2NiwgMTE0NjgsIDExNDcwLCAxMTQ3MiwgCisgICAgMTE0NzQsIDExNDc2LCAxMTQ3OCwgMTE0ODAsIDExNDgyLCAxMTQ4NCwgMTE0ODYsIDExNDg4LCAxMTQ5MCwgMTE0OTIsIAorICAgIDExNDk0LCAxMTQ5NiwgMTE0OTgsIDExNTAwLCAxMTUwMiwgMTE1MDQsIDExNTA2LCAxMTUwOCwgMTE1MTAsIDExNTEyLCAKKyAgICAxMTUxNCwgMTE1MTYsIDExNTE4LCAxMTUyMCwgMTE1MjIsIDExNTI0LCAxMTUyNiwgMTE1MjgsIDExNTMwLCAxMTUzMiwgCisgICAgMTE1MzQsIDExNTM2LCAxMTUzOCwgMTE1NDAsIDExNTQyLCAxMTU0NCwgMTE1NDYsIDExNTQ4LCAxMTU1MCwgMTE1NTIsIAorICAgIDExNTU0LCAxMTU1NiwgMTE1NTgsIDExNTYwLCAxMTU2MiwgMTE1NjQsIDExNTY2LCAxMTU2OCwgMTE1NzAsIDExNTcyLCAKKyAgICAxMTU3NCwgMTE1NzYsIDExNTc4LCAxMTU4MCwgMTE1ODIsIDExNTg0LCAxMTU4NiwgMTE1ODgsIDExNTkwLCAxMTU5MiwgCisgICAgMTE1OTQsIDExNTk2LCAxMTU5OCwgMTE2MDAsIDExNjAyLCAxMTYwNCwgMTE2MDYsIDExNjA4LCAxMTYxMCwgMTE2MTIsIAorICAgIDExNjE0LCAxMTYxNiwgMTE2MTgsIDExNjIwLCAxMTYyMiwgMTE2MjQsIDExNjI2LCAxMTYyOCwgMTE2MzAsIDExNjMyLCAKKyAgICAxMTYzNCwgMTE2MzYsIDExNjM4LCAxMTY0MCwgMTE2NDIsIDExNjQ0LCAxMTY0NiwgMTE2NDgsIDExNjUwLCAxMTY1MiwgCisgICAgMTE2NTQsIDExNjU2LCAxMTY1OCwgMTE2NjAsIDExNjYyLCAxMTY2NCwgMTE2NjYsIDExNjY4LCAxMTY3MCwgMTE2NzIsIAorICAgIDExNjc0LCAxMTY3NiwgMTE2NzgsIDExNjgwLCAxMTY4MiwgMTE2ODQsIDExNjg2LCAxMTY4OCwgMTE2OTAsIDExNjkyLCAKKyAgICAxMTY5NCwgMTE2OTYsIDExNjk4LCAxMTcwMCwgMTE3MDIsIDExNzA0LCAxMTcwNiwgMTE3MDgsIDExNzEwLCAxMTcxMiwgCisgICAgMTE3MTQsIDExNzE2LCAxMTcxOCwgMTE3MjAsIDExNzIyLCAxMTcyNCwgMTE3MjYsIDExNzI4LCAxMTczMCwgMTE3MzIsIAorICAgIDExNzM0LCAxMTczNiwgMTE3MzgsIDExNzQwLCAxMTc0MiwgMTE3NDQsIDExNzQ2LCAxMTc0OCwgMTE3NTAsIDExNzUyLCAKKyAgICAxMTc1NCwgMTE3NTYsIDExNzU4LCAxMTc2MCwgMTE3NjIsIDExNzY0LCAxMTc2NiwgMCwgMCwgMTE3NjgsIDExNzcwLCAKKyAgICAxMTc3MiwgMTE3NzQsIDExNzc2LCAxMTc3OCwgMTE3ODAsIDExNzgyLCAxMTc4NCwgMTE3ODYsIDExNzg4LCAxMTc5MCwgCisgICAgMTE3OTIsIDExNzk0LCAxMTc5NiwgMTE3OTgsIDExODAwLCAxMTgwMiwgMTE4MDQsIDExODA2LCAxMTgwOCwgMTE4MTAsIAorICAgIDExODEyLCAxMTgxNCwgMTE4MTYsIDExODE4LCAxMTgyMCwgMTE4MjIsIDExODI0LCAxMTgyNiwgMTE4MjgsIDExODMwLCAKKyAgICAxMTgzMiwgMTE4MzQsIDExODM2LCAxMTgzOCwgMTE4NDAsIDExODQyLCAxMTg0NCwgMTE4NDYsIDExODQ4LCAxMTg1MCwgCisgICAgMTE4NTIsIDExODU0LCAxMTg1NiwgMTE4NTgsIDExODYwLCAxMTg2MiwgMTE4NjQsIDExODY2LCAxMTg2OCwgMTE4NzAsIAorICAgIDExODcyLCAxMTg3NCwgMTE4NzYsIDExODc4LCAxMTg4MCwgMTE4ODIsIDExODg0LCAxMTg4NiwgMTE4ODgsIDExODkwLCAKKyAgICAxMTg5MiwgMTE4OTQsIDExODk2LCAxMTg5OCwgMTE5MDAsIDExOTAyLCAxMTkwNCwgMTE5MDYsIDExOTA4LCAxMTkxMCwgCisgICAgMTE5MTIsIDExOTE0LCAxMTkxNiwgMTE5MTgsIDExOTIwLCAxMTkyMiwgMTE5MjQsIDExOTI2LCAxMTkyOCwgMTE5MzAsIAorICAgIDExOTMyLCAxMTkzNCwgMTE5MzYsIDExOTM4LCAxMTk0MCwgMTE5NDIsIDExOTQ0LCAxMTk0NiwgMTE5NDgsIDExOTUwLCAKKyAgICAxMTk1MiwgMTE5NTQsIDExOTU2LCAxMTk1OCwgMTE5NjAsIDExOTYyLCAxMTk2NCwgMTE5NjYsIDExOTY4LCAxMTk3MCwgCisgICAgMTE5NzIsIDExOTc0LCAxMTk3NiwgMTE5NzgsIDExOTgwLCAxMTk4MiwgMTE5ODQsIDExOTg2LCAxMTk4OCwgMTE5OTAsIAorICAgIDExOTkyLCAxMTk5NCwgMTE5OTYsIDExOTk4LCAxMjAwMCwgMTIwMDIsIDEyMDA0LCAxMjAwNiwgMTIwMDgsIDEyMDEwLCAKKyAgICAxMjAxMiwgMTIwMTQsIDEyMDE2LCAxMjAxOCwgMTIwMjAsIDEyMDIyLCAxMjAyNCwgMTIwMjYsIDEyMDI4LCAxMjAzMCwgCisgICAgMTIwMzIsIDEyMDM0LCAxMjAzNiwgMTIwMzgsIDEyMDQwLCAxMjA0MiwgMTIwNDQsIDEyMDQ2LCAxMjA0OCwgMTIwNTAsIAorICAgIDEyMDUyLCAxMjA1NCwgMTIwNTYsIDEyMDU4LCAxMjA2MCwgMTIwNjIsIDEyMDY0LCAxMjA2NiwgMTIwNjgsIDEyMDcwLCAKKyAgICAxMjA3MiwgMTIwNzQsIDEyMDc2LCAxMjA3OCwgMTIwODAsIDEyMDgyLCAxMjA4NCwgMTIwODYsIDEyMDg4LCAxMjA5MCwgCisgICAgMTIwOTIsIDEyMDk0LCAxMjA5NiwgMTIwOTgsIDEyMTAwLCAxMjEwMiwgMTIxMDQsIDEyMTA2LCAxMjEwOCwgMTIxMTAsIAorICAgIDEyMTEyLCAxMjExNCwgMTIxMTYsIDEyMTE4LCAxMjEyMCwgMTIxMjIsIDEyMTI0LCAxMjEyNiwgMTIxMjgsIDEyMTMwLCAKKyAgICAxMjEzMiwgMTIxMzQsIDEyMTM2LCAxMjEzOCwgMTIxNDAsIDEyMTQyLCAxMjE0NCwgMTIxNDYsIDEyMTQ4LCAxMjE1MCwgCisgICAgMTIxNTIsIDEyMTU0LCAxMjE1NiwgMTIxNTgsIDEyMTYwLCAxMjE2MiwgMTIxNjQsIDEyMTY2LCAxMjE2OCwgMTIxNzAsIAorICAgIDEyMTcyLCAxMjE3NCwgMTIxNzYsIDEyMTc4LCAxMjE4MCwgMTIxODIsIDEyMTg0LCAxMjE4NiwgMTIxODgsIDEyMTkwLCAKKyAgICAxMjE5MiwgMTIxOTQsIDEyMTk2LCAxMjE5OCwgMTIyMDAsIDEyMjAyLCAxMjIwNCwgMTIyMDYsIDEyMjA4LCAxMjIxMCwgCisgICAgMTIyMTIsIDEyMjE0LCAxMjIxNiwgMTIyMTgsIDEyMjIwLCAxMjIyMiwgMTIyMjQsIDEyMjI2LCAxMjIyOCwgMTIyMzAsIAorICAgIDEyMjMyLCAxMjIzNCwgMTIyMzYsIDEyMjM4LCAxMjI0MCwgMTIyNDIsIDEyMjQ0LCAxMjI0NiwgMTIyNDgsIDEyMjUwLCAKKyAgICAxMjI1MiwgMTIyNTQsIDEyMjU2LCAxMjI1OCwgMTIyNjAsIDEyMjYyLCAxMjI2NCwgMTIyNjYsIDEyMjY4LCAxMjI3MCwgCisgICAgMTIyNzIsIDEyMjc0LCAxMjI3NiwgMTIyNzgsIDEyMjgwLCAxMjI4MiwgMTIyODQsIDEyMjg2LCAxMjI4OCwgMTIyOTAsIAorICAgIDEyMjkyLCAxMjI5NCwgMTIyOTYsIDEyMjk4LCAxMjMwMCwgMTIzMDIsIDEyMzA0LCAxMjMwNiwgMTIzMDgsIDEyMzEwLCAKKyAgICAxMjMxMiwgMTIzMTQsIDEyMzE2LCAxMjMxOCwgMTIzMjAsIDEyMzIyLCAxMjMyNCwgMTIzMjYsIDEyMzI4LCAxMjMzMCwgCisgICAgMTIzMzIsIDEyMzM0LCAxMjMzNiwgMTIzMzgsIDEyMzQwLCAxMjM0MiwgMTIzNDQsIDEyMzQ2LCAxMjM0OCwgMTIzNTAsIDAsIAorICAgIDAsIDEyMzUyLCAxMjM1NCwgMTIzNTYsIDEyMzU4LCAxMjM2MCwgMTIzNjIsIDEyMzY0LCAxMjM2NiwgMTIzNjgsIDEyMzcwLCAKKyAgICAxMjM3MiwgMTIzNzQsIDEyMzc2LCAxMjM3OCwgMTIzODAsIDEyMzgyLCAxMjM4NCwgMTIzODYsIDEyMzg4LCAxMjM5MCwgCisgICAgMTIzOTIsIDEyMzk0LCAxMjM5NiwgMTIzOTgsIDEyNDAwLCAxMjQwMiwgMTI0MDQsIDEyNDA2LCAxMjQwOCwgMTI0MTAsIAorICAgIDEyNDEyLCAxMjQxNCwgMTI0MTYsIDEyNDE4LCAxMjQyMCwgMTI0MjIsIDEyNDI0LCAxMjQyNiwgMTI0MjgsIDEyNDMwLCAKKyAgICAxMjQzMiwgMTI0MzQsIDEyNDM2LCAxMjQzOCwgMTI0NDAsIDEyNDQyLCAxMjQ0NCwgMTI0NDYsIDEyNDQ4LCAxMjQ1MCwgCisgICAgMTI0NTIsIDEyNDU1LCAxMjQ1OCwgMTI0NjEsIDEyNDY0LCAxMjQ2NywgMTI0NzAsIDEyNDczLCAxMjQ3NiwgMTI0NzksIAorICAgIDEyNDgyLCAwLCAwLCAwLCAwLCAwLCAxMjQ4NSwgMTI0ODksIDEyNDkzLCAxMjQ5NywgMTI1MDEsIDEyNTA1LCAxMjUwOSwgCisgICAgMTI1MTMsIDEyNTE3LCAxMjUyMSwgMTI1MjUsIDEyNTI5LCAxMjUzMywgMTI1MzcsIDEyNTQxLCAxMjU0NSwgMTI1NDksIAorICAgIDEyNTUzLCAxMjU1NywgMTI1NjEsIDEyNTY1LCAxMjU2OSwgMTI1NzMsIDEyNTc3LCAxMjU4MSwgMTI1ODUsIDEyNTg5LCAKKyAgICAxMjU5MywgMTI1OTUsIDEyNTk3LCAxMjYwMCwgMCwgMCwgMTI2MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNjA1LCAwLCAxMjYwNywgMCwgMCwgMTI2MDksIDAsIDAsIDAsIDEyNjExLCAwLCAwLCAwLCAxMjYxMywgMTI2MTYsIAorICAgIDEyNjE5LCAxMjYyMiwgMTI2MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc1MTcsIDc1MjAsIDc1MjMsIDc1MjYsIDc1MzAsIDc1MzQsIDc1MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NDAsIDc1NDMsIDc1NDYsIDc1NDksIDc1NTIsIDAsIDAsIDAsIDAsIDAsIDc1NTUsIDAsIDc1NTgsIAotICAgIDc1NjEsIDc1NjMsIDc1NjUsIDc1NjcsIDc1NjksIDc1NzEsIDc1NzMsIDc1NzUsIDc1NzcsIDc1NzksIDc1ODEsIDc1ODQsIAotICAgIDc1ODcsIDc1OTAsIDc1OTMsIDc1OTYsIDc1OTksIDc2MDIsIDc2MDUsIDc2MDgsIDc2MTEsIDc2MTQsIDc2MTcsIDAsIAotICAgIDc2MjAsIDc2MjMsIDc2MjYsIDc2MjksIDc2MzIsIDAsIDc2MzUsIDAsIDc2MzgsIDc2NDEsIDAsIDc2NDQsIDc2NDcsIDAsIAotICAgIDc2NTAsIDc2NTMsIDc2NTYsIDc2NTksIDc2NjIsIDc2NjUsIDc2NjgsIDc2NzEsIDc2NzQsIDc2NzcsIDc2ODAsIDc2ODIsIAotICAgIDc2ODQsIDc2ODYsIDc2ODgsIDc2OTAsIDc2OTIsIDc2OTQsIDc2OTYsIDc2OTgsIDc3MDAsIDc3MDIsIDc3MDQsIDc3MDYsIAotICAgIDc3MDgsIDc3MTAsIDc3MTIsIDc3MTQsIDc3MTYsIDc3MTgsIDc3MjAsIDc3MjIsIDc3MjQsIDc3MjYsIDc3MjgsIDc3MzAsIAotICAgIDc3MzIsIDc3MzQsIDc3MzYsIDc3MzgsIDc3NDAsIDc3NDIsIDc3NDQsIDc3NDYsIDc3NDgsIDc3NTAsIDc3NTIsIDc3NTQsIAotICAgIDc3NTYsIDc3NTgsIDc3NjAsIDc3NjIsIDc3NjQsIDc3NjYsIDc3NjgsIDc3NzAsIDc3NzIsIDc3NzQsIDc3NzYsIDc3NzgsIAotICAgIDc3ODAsIDc3ODIsIDc3ODQsIDc3ODYsIDc3ODgsIDc3OTAsIDc3OTIsIDc3OTQsIDc3OTYsIDc3OTgsIDc4MDAsIDc4MDIsIAotICAgIDc4MDQsIDc4MDYsIDc4MDgsIDc4MTAsIDc4MTIsIDc4MTQsIDc4MTYsIDc4MTgsIDc4MjAsIDc4MjIsIDc4MjQsIDc4MjYsIAotICAgIDc4MjgsIDc4MzAsIDc4MzIsIDc4MzQsIDc4MzYsIDc4MzgsIDc4NDAsIDc4NDIsIDc4NDQsIDc4NDYsIDc4NDgsIDc4NTAsIAotICAgIDc4NTIsIDc4NTQsIDc4NTYsIDc4NTgsIDc4NjAsIDc4NjIsIDc4NjQsIDc4NjYsIDc4NjgsIDc4NzAsIDc4NzIsIDc4NzQsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NzYsIDc4NzgsIDc4ODAsIDc4ODIsIDc4ODQsIDc4ODYsIDc4ODgsIAotICAgIDc4OTAsIDc4OTIsIDc4OTQsIDc4OTYsIDc4OTgsIDc5MDAsIDc5MDIsIDc5MDQsIDc5MDYsIDc5MDgsIDc5MTAsIDc5MTIsIAotICAgIDc5MTQsIDc5MTYsIDc5MTgsIDc5MjAsIDc5MjIsIDc5MjUsIDc5MjgsIDc5MzEsIDc5MzQsIDc5MzcsIDc5NDAsIDc5NDMsIAotICAgIDc5NDYsIDc5NDksIDc5NTIsIDc5NTUsIDc5NTgsIDc5NjEsIDc5NjQsIDc5NjcsIDc5NzAsIDc5NzMsIDc5NzYsIDc5NzgsIAotICAgIDc5ODAsIDc5ODIsIDc5ODQsIDc5ODcsIDc5OTAsIDc5OTMsIDc5OTYsIDc5OTksIDgwMDIsIDgwMDUsIDgwMDgsIDgwMTEsIAotICAgIDgwMTQsIDgwMTcsIDgwMjAsIDgwMjMsIDgwMjYsIDgwMjksIDgwMzIsIDgwMzUsIDgwMzgsIDgwNDEsIDgwNDQsIDgwNDcsIAotICAgIDgwNTAsIDgwNTMsIDgwNTYsIDgwNTksIDgwNjIsIDgwNjUsIDgwNjgsIDgwNzEsIDgwNzQsIDgwNzcsIDgwODAsIDgwODMsIAotICAgIDgwODYsIDgwODksIDgwOTIsIDgwOTUsIDgwOTgsIDgxMDEsIDgxMDQsIDgxMDcsIDgxMTAsIDgxMTMsIDgxMTYsIDgxMTksIAotICAgIDgxMjIsIDgxMjUsIDgxMjgsIDgxMzEsIDgxMzQsIDgxMzcsIDgxNDAsIDgxNDMsIDgxNDYsIDgxNDksIDgxNTIsIDgxNTUsIAotICAgIDgxNTgsIDgxNjEsIDgxNjQsIDgxNjcsIDgxNzAsIDgxNzMsIDgxNzYsIDgxNzksIDgxODIsIDgxODUsIDgxODgsIDgxOTEsIAotICAgIDgxOTQsIDgxOTcsIDgyMDAsIDgyMDMsIDgyMDYsIDgyMDksIDgyMTIsIDgyMTUsIDgyMTgsIDgyMjEsIDgyMjQsIDgyMjcsIAotICAgIDgyMzAsIDgyMzMsIDgyMzYsIDgyMzksIDgyNDIsIDgyNDUsIDgyNDgsIDgyNTEsIDgyNTQsIDgyNTcsIDgyNjAsIDgyNjMsIAotICAgIDgyNjYsIDgyNzAsIDgyNzQsIDgyNzgsIDgyODIsIDgyODYsIDgyOTAsIDgyOTMsIDgyOTYsIDgyOTksIDgzMDIsIDgzMDUsIAotICAgIDgzMDgsIDgzMTEsIDgzMTQsIDgzMTcsIDgzMjAsIDgzMjMsIDgzMjYsIDgzMjksIDgzMzIsIDgzMzUsIDgzMzgsIDgzNDEsIAotICAgIDgzNDQsIDgzNDcsIDgzNTAsIDgzNTMsIDgzNTYsIDgzNTksIDgzNjIsIDgzNjUsIDgzNjgsIDgzNzEsIDgzNzQsIDgzNzcsIAotICAgIDgzODAsIDgzODMsIDgzODYsIDgzODksIDgzOTIsIDgzOTUsIDgzOTgsIDg0MDEsIDg0MDQsIDg0MDcsIDg0MTAsIDg0MTMsIAotICAgIDg0MTYsIDg0MTksIDg0MjIsIDg0MjUsIDg0MjgsIDg0MzEsIDg0MzQsIDg0MzcsIDg0NDAsIDg0NDMsIDg0NDYsIDg0NDksIAotICAgIDg0NTIsIDg0NTUsIDg0NTgsIDg0NjEsIDg0NjQsIDg0NjcsIDg0NzAsIDg0NzMsIDg0NzYsIDg0NzksIDg0ODIsIDg0ODUsIAotICAgIDg0ODgsIDg0OTEsIDg0OTQsIDg0OTcsIDg1MDAsIDg1MDMsIDg1MDYsIDg1MDksIDg1MTIsIDg1MTUsIDg1MTgsIDg1MjEsIAotICAgIDg1MjQsIDg1MjcsIDg1MzAsIDg1MzMsIDg1MzYsIDg1MzksIDg1NDIsIDg1NDUsIDg1NDgsIDg1NTEsIDg1NTQsIDg1NTcsIAotICAgIDg1NjAsIDg1NjMsIDg1NjYsIDg1NjksIDg1NzIsIDg1NzUsIDg1NzgsIDg1ODEsIDg1ODQsIDg1ODcsIDg1OTAsIDg1OTMsIAotICAgIDg1OTYsIDg1OTksIDg2MDIsIDg2MDUsIDg2MDgsIDg2MTEsIDg2MTQsIDg2MTcsIDg2MjAsIDg2MjMsIDg2MjYsIDg2MjksIAotICAgIDg2MzIsIDg2MzUsIDg2MzgsIDg2NDEsIDg2NDQsIDg2NDcsIDg2NTAsIDg2NTMsIDg2NTYsIDg2NTksIDg2NjIsIDg2NjUsIAotICAgIDg2NjgsIDg2NzEsIDg2NzQsIDg2NzcsIDg2ODAsIDg2ODMsIDg2ODYsIDg2ODksIDg2OTIsIDg2OTUsIDg2OTgsIDg3MDEsIAotICAgIDg3MDQsIDg3MDcsIDg3MTAsIDg3MTMsIDg3MTYsIDg3MjAsIDg3MjQsIDg3MjgsIDg3MzEsIDg3MzQsIDg3MzcsIDg3NDAsIAotICAgIDg3NDMsIDg3NDYsIDg3NDksIDg3NTIsIDg3NTUsIDg3NTgsIDg3NjEsIDg3NjQsIDg3NjcsIDg3NzAsIDg3NzMsIDg3NzYsIAotICAgIDg3NzksIDg3ODIsIDg3ODUsIDg3ODgsIDg3OTEsIDg3OTQsIDg3OTcsIDg4MDAsIDg4MDMsIDg4MDYsIDg4MDksIDg4MTIsIAotICAgIDg4MTUsIDg4MTgsIDg4MjEsIDg4MjQsIDg4MjcsIDg4MzAsIDg4MzMsIDg4MzYsIDg4MzksIDg4NDIsIDg4NDUsIDg4NDgsIAotICAgIDg4NTEsIDg4NTQsIDg4NTcsIDg4NjAsIDg4NjMsIDg4NjYsIDg4NjksIDg4NzIsIDg4NzUsIDg4NzgsIDg4ODEsIDg4ODQsIAotICAgIDg4ODcsIDg4OTAsIDg4OTMsIDg4OTYsIDg4OTksIDg5MDIsIDg5MDUsIDg5MDgsIDg5MTEsIDg5MTQsIDg5MTcsIDg5MjAsIAotICAgIDg5MjMsIDg5MjYsIDg5MjksIDg5MzIsIDg5MzUsIDg5MzgsIDg5NDEsIDg5NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDcsIDg5NTEsIDg5NTUsIDg5NTksIDg5NjMsIDg5NjcsIDg5NzEsIAotICAgIDg5NzUsIDg5NzksIDg5ODMsIDg5ODcsIDg5OTEsIDg5OTUsIDg5OTksIDkwMDMsIDkwMDcsIDkwMTEsIDkwMTUsIDkwMTksIAotICAgIDkwMjMsIDkwMjcsIDkwMzEsIDkwMzUsIDkwMzksIDkwNDMsIDkwNDcsIDkwNTEsIDkwNTUsIDkwNTksIDkwNjMsIDkwNjcsIAotICAgIDkwNzEsIDkwNzUsIDkwNzksIDkwODMsIDkwODcsIDkwOTEsIDkwOTUsIDkwOTksIDkxMDMsIDkxMDcsIDkxMTEsIDkxMTUsIAotICAgIDkxMTksIDkxMjMsIDkxMjcsIDkxMzEsIDkxMzUsIDkxMzksIDkxNDMsIDkxNDcsIDkxNTEsIDkxNTUsIDkxNTksIDkxNjMsIAotICAgIDkxNjcsIDkxNzEsIDkxNzUsIDkxNzksIDkxODMsIDkxODcsIDkxOTEsIDkxOTUsIDkxOTksIDAsIDAsIDkyMDMsIDkyMDcsIAotICAgIDkyMTEsIDkyMTUsIDkyMTksIDkyMjMsIDkyMjcsIDkyMzEsIDkyMzUsIDkyMzksIDkyNDMsIDkyNDcsIDkyNTEsIDkyNTUsIAotICAgIDkyNTksIDkyNjMsIDkyNjcsIDkyNzEsIDkyNzUsIDkyNzksIDkyODMsIDkyODcsIDkyOTEsIDkyOTUsIDkyOTksIDkzMDMsIAotICAgIDkzMDcsIDkzMTEsIDkzMTUsIDkzMTksIDkzMjMsIDkzMjcsIDkzMzEsIDkzMzUsIDkzMzksIDkzNDMsIDkzNDcsIDkzNTEsIAotICAgIDkzNTUsIDkzNTksIDkzNjMsIDkzNjcsIDkzNzEsIDkzNzUsIDkzNzksIDkzODMsIDkzODcsIDkzOTEsIDkzOTUsIDkzOTksIAotICAgIDk0MDMsIDk0MDcsIDk0MTEsIDk0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NDE5LCA5NDIzLCA5NDI3LCA5NDMyLCA5NDM3LCA5NDQyLCA5NDQ3LCA5NDUyLCA5NDU3LCA5NDYyLCA5NDY2LCA5NDg1LCAKLSAgICA5NDk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDk5LCAKLSAgICA5NTAxLCA5NTAzLCA5NTA1LCA5NTA3LCA5NTA5LCA5NTExLCA5NTEzLCA5NTE1LCA5NTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTE5LCA5NTIxLCA5NTIzLCA5NTI1LCAKLSAgICA5NTI3LCA5NTI5LCA5NTMxLCA5NTMzLCA5NTM1LCA5NTM3LCA5NTM5LCA5NTQxLCA5NTQzLCA5NTQ1LCA5NTQ3LCA5NTQ5LCAKLSAgICA5NTUxLCA5NTUzLCA5NTU1LCA5NTU3LCA5NTU5LCAwLCAwLCA5NTYxLCA5NTYzLCA5NTY1LCA5NTY3LCA5NTY5LCA5NTcxLCAKLSAgICA5NTczLCA5NTc1LCA5NTc3LCA5NTc5LCA5NTgxLCA5NTgzLCAwLCA5NTg1LCA5NTg3LCA5NTg5LCA5NTkxLCA5NTkzLCAKLSAgICA5NTk1LCA5NTk3LCA5NTk5LCA5NjAxLCA5NjAzLCA5NjA1LCA5NjA3LCA5NjA5LCA5NjExLCA5NjEzLCA5NjE1LCA5NjE3LCAKLSAgICA5NjE5LCA5NjIxLCAwLCA5NjIzLCA5NjI1LCA5NjI3LCA5NjI5LCAwLCAwLCAwLCAwLCA5NjMxLCA5NjM0LCA5NjM3LCAwLCAKLSAgICA5NjQwLCAwLCA5NjQzLCA5NjQ2LCA5NjQ5LCA5NjUyLCA5NjU1LCA5NjU4LCA5NjYxLCA5NjY0LCA5NjY3LCA5NjcwLCAKLSAgICA5NjczLCA5Njc1LCA5Njc3LCA5Njc5LCA5NjgxLCA5NjgzLCA5Njg1LCA5Njg3LCA5Njg5LCA5NjkxLCA5NjkzLCA5Njk1LCAKLSAgICA5Njk3LCA5Njk5LCA5NzAxLCA5NzAzLCA5NzA1LCA5NzA3LCA5NzA5LCA5NzExLCA5NzEzLCA5NzE1LCA5NzE3LCA5NzE5LCAKLSAgICA5NzIxLCA5NzIzLCA5NzI1LCA5NzI3LCA5NzI5LCA5NzMxLCA5NzMzLCA5NzM1LCA5NzM3LCA5NzM5LCA5NzQxLCA5NzQzLCAKLSAgICA5NzQ1LCA5NzQ3LCA5NzQ5LCA5NzUxLCA5NzUzLCA5NzU1LCA5NzU3LCA5NzU5LCA5NzYxLCA5NzYzLCA5NzY1LCA5NzY3LCAKLSAgICA5NzY5LCA5NzcxLCA5NzczLCA5Nzc1LCA5Nzc3LCA5Nzc5LCA5NzgxLCA5NzgzLCA5Nzg1LCA5Nzg3LCA5Nzg5LCA5NzkxLCAKLSAgICA5NzkzLCA5Nzk1LCA5Nzk3LCA5Nzk5LCA5ODAxLCA5ODAzLCA5ODA1LCA5ODA3LCA5ODA5LCA5ODExLCA5ODEzLCA5ODE1LCAKLSAgICA5ODE3LCA5ODE5LCA5ODIxLCA5ODIzLCA5ODI1LCA5ODI3LCA5ODI5LCA5ODMxLCA5ODMzLCA5ODM1LCA5ODM3LCA5ODM5LCAKLSAgICA5ODQxLCA5ODQzLCA5ODQ1LCA5ODQ3LCA5ODQ5LCA5ODUxLCA5ODUzLCA5ODU1LCA5ODU3LCA5ODU5LCA5ODYxLCA5ODYzLCAKLSAgICA5ODY1LCA5ODY3LCA5ODY5LCA5ODcxLCA5ODczLCA5ODc1LCA5ODc3LCA5ODc5LCA5ODgxLCA5ODgzLCA5ODg1LCA5ODg3LCAKLSAgICA5ODg5LCA5ODkxLCA5ODkzLCA5ODk1LCA5ODk3LCA5ODk5LCA5OTAxLCA5OTAzLCA5OTA1LCA5OTA3LCA5OTEwLCA5OTEzLCAKLSAgICA5OTE2LCA5OTE5LCA5OTIyLCA5OTI1LCA5OTI4LCAwLCAwLCAwLCAwLCA5OTMxLCA5OTMzLCA5OTM1LCA5OTM3LCA5OTM5LCAKLSAgICA5OTQxLCA5OTQzLCA5OTQ1LCA5OTQ3LCA5OTQ5LCA5OTUxLCA5OTUzLCA5OTU1LCA5OTU3LCA5OTU5LCA5OTYxLCA5OTYzLCAKLSAgICA5OTY1LCA5OTY3LCA5OTY5LCA5OTcxLCA5OTczLCA5OTc1LCA5OTc3LCA5OTc5LCA5OTgxLCA5OTgzLCA5OTg1LCA5OTg3LCAKLSAgICA5OTg5LCA5OTkxLCA5OTkzLCA5OTk1LCA5OTk3LCA5OTk5LCAxMDAwMSwgMTAwMDMsIDEwMDA1LCAxMDAwNywgMTAwMDksIAotICAgIDEwMDExLCAxMDAxMywgMTAwMTUsIDEwMDE3LCAxMDAxOSwgMTAwMjEsIDEwMDIzLCAxMDAyNSwgMTAwMjcsIDEwMDI5LCAKLSAgICAxMDAzMSwgMTAwMzMsIDEwMDM1LCAxMDAzNywgMTAwMzksIDEwMDQxLCAxMDA0MywgMTAwNDUsIDEwMDQ3LCAxMDA0OSwgCi0gICAgMTAwNTEsIDEwMDUzLCAxMDA1NSwgMTAwNTcsIDEwMDU5LCAxMDA2MSwgMTAwNjMsIDEwMDY1LCAxMDA2NywgMTAwNjksIAotICAgIDEwMDcxLCAxMDA3MywgMTAwNzUsIDEwMDc3LCAxMDA3OSwgMTAwODEsIDEwMDgzLCAxMDA4NSwgMTAwODcsIDEwMDg5LCAKLSAgICAxMDA5MSwgMTAwOTMsIDEwMDk1LCAxMDA5NywgMTAwOTksIDEwMTAxLCAxMDEwMywgMTAxMDUsIDEwMTA3LCAxMDEwOSwgCi0gICAgMTAxMTEsIDEwMTEzLCAxMDExNSwgMTAxMTcsIDEwMTE5LCAxMDEyMSwgMTAxMjMsIDEwMTI1LCAxMDEyNywgMTAxMjksIAotICAgIDEwMTMxLCAxMDEzMywgMTAxMzUsIDEwMTM3LCAxMDEzOSwgMTAxNDEsIDEwMTQzLCAxMDE0NSwgMTAxNDcsIDEwMTQ5LCAKLSAgICAxMDE1MSwgMTAxNTMsIDEwMTU1LCAxMDE1NywgMTAxNTksIDEwMTYxLCAxMDE2MywgMTAxNjUsIDEwMTY3LCAxMDE2OSwgCi0gICAgMTAxNzEsIDEwMTczLCAxMDE3NSwgMTAxNzcsIDEwMTc5LCAxMDE4MSwgMTAxODMsIDEwMTg1LCAxMDE4NywgMTAxODksIAotICAgIDEwMTkxLCAxMDE5MywgMTAxOTUsIDEwMTk3LCAxMDE5OSwgMTAyMDEsIDEwMjAzLCAxMDIwNSwgMTAyMDcsIDEwMjA5LCAKLSAgICAxMDIxMSwgMTAyMTMsIDEwMjE1LCAxMDIxNywgMTAyMTksIDEwMjIxLCAxMDIyMywgMTAyMjUsIDEwMjI3LCAxMDIyOSwgCi0gICAgMTAyMzEsIDEwMjMzLCAxMDIzNSwgMTAyMzcsIDEwMjM5LCAxMDI0MSwgMTAyNDMsIDEwMjQ1LCAxMDI0NywgMTAyNDksIAotICAgIDEwMjUxLCAxMDI1MywgMTAyNTUsIDEwMjU3LCAxMDI1OSwgMTAyNjEsIDEwMjYzLCAxMDI2NSwgMTAyNjcsIDEwMjY5LCAKLSAgICAxMDI3MSwgMTAyNzMsIDEwMjc1LCAxMDI3NywgMTAyNzksIDEwMjgxLCAxMDI4MywgMTAyODUsIDEwMjg3LCAxMDI4OSwgCi0gICAgMTAyOTEsIDEwMjkzLCAxMDI5NSwgMTAyOTcsIDEwMjk5LCAxMDMwMSwgMTAzMDMsIDEwMzA1LCAxMDMwNywgMTAzMDksIDAsIAotICAgIDAsIDAsIDEwMzExLCAxMDMxMywgMTAzMTUsIDEwMzE3LCAxMDMxOSwgMTAzMjEsIDAsIDAsIDEwMzIzLCAxMDMyNSwgCi0gICAgMTAzMjcsIDEwMzI5LCAxMDMzMSwgMTAzMzMsIDAsIDAsIDEwMzM1LCAxMDMzNywgMTAzMzksIDEwMzQxLCAxMDM0MywgCi0gICAgMTAzNDUsIDAsIDAsIDEwMzQ3LCAxMDM0OSwgMTAzNTEsIDAsIDAsIDAsIDEwMzUzLCAxMDM1NSwgMTAzNTcsIDEwMzU5LCAKLSAgICAxMDM2MSwgMTAzNjMsIDEwMzY1LCAwLCAxMDM2NywgMTAzNjksIDEwMzcxLCAxMDM3MywgMTAzNzUsIDEwMzc3LCAxMDM3OSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzIsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjM1LCAxMjYzNywgMTI2MzksIDEyNjQxLCAxMjY0MywgMTI2NDUsIAorICAgIDEyNjQ3LCAxMjY0OSwgMTI2NTEsIDEyNjUzLCAxMjY1NSwgMTI2NTcsIDEyNjU5LCAxMjY2MSwgMTI2NjMsIDEyNjY1LCAKKyAgICAxMjY2NywgMTI2NjksIDEyNjcxLCAxMjY3MywgMTI2NzUsIDEyNjc3LCAxMjY3OSwgMTI2ODEsIDEyNjgzLCAxMjY4NSwgCisgICAgMTI2ODcsIDEyNjg5LCAxMjY5MSwgMTI2OTMsIDEyNjk1LCAxMjY5NywgMTI2OTksIDEyNzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcwMywgMTI3MDcsIDEyNzExLCAxMjcxNSwgMTI3MTksIDEyNzIzLCAxMjcyNywgCisgICAgMTI3MzEsIDEyNzM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDM4MSwgMTAzODQsIDEwMzg3LCAxMDM5MCwgCi0gICAgMTAzOTMsIDEwMzk2LCAxMDM5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0MDIsIAotICAgIDEwNDA1LCAxMDQwOCwgMTA0MTEsIDEwNDE0LCAxMDQxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTA0MjAsIDEwNDIyLCAxMDQyNCwgMTA0MjYsIDEwNDI4LCAxMDQzMCwgMTA0MzIsIDEwNDM0LCAxMDQzNiwgCi0gICAgMTA0MzgsIDEwNDQwLCAxMDQ0MiwgMTA0NDQsIDEwNDQ2LCAxMDQ0OCwgMTA0NTAsIDEwNDUyLCAxMDQ1NCwgMTA0NTYsIAotICAgIDEwNDU4LCAxMDQ2MCwgMTA0NjIsIDEwNDY0LCAxMDQ2NiwgMTA0NjgsIDEwNDcwLCAxMDQ3MiwgMTA0NzQsIDEwNDc2LCAKLSAgICAxMDQ3OCwgMTA0ODAsIDEwNDgyLCAxMDQ4NCwgMTA0ODYsIDEwNDg4LCAxMDQ5MCwgMTA0OTIsIDEwNDk0LCAxMDQ5NiwgCi0gICAgMTA0OTgsIDEwNTAwLCAxMDUwMiwgMTA1MDQsIDEwNTA2LCAxMDUwOCwgMTA1MTAsIDEwNTEyLCAxMDUxNCwgMTA1MTYsIAotICAgIDEwNTE4LCAxMDUyMCwgMTA1MjIsIDEwNTI0LCAxMDUyNiwgMTA1MjgsIDEwNTMwLCAxMDUzMiwgMTA1MzQsIDEwNTM2LCAKLSAgICAxMDUzOCwgMTA1NDAsIDEwNTQyLCAxMDU0NCwgMTA1NDYsIDEwNTQ4LCAxMDU1MCwgMTA1NTIsIDEwNTU0LCAxMDU1NiwgCi0gICAgMTA1NTgsIDEwNTYwLCAxMDU2MiwgMTA1NjQsIDEwNTY2LCAxMDU2OCwgMTA1NzAsIDEwNTcyLCAxMDU3NCwgMTA1NzYsIAotICAgIDEwNTc4LCAxMDU4MCwgMTA1ODIsIDEwNTg0LCAxMDU4NiwgMTA1ODgsIDAsIDEwNTkwLCAxMDU5MiwgMTA1OTQsIDEwNTk2LCAKLSAgICAxMDU5OCwgMTA2MDAsIDEwNjAyLCAxMDYwNCwgMTA2MDYsIDEwNjA4LCAxMDYxMCwgMTA2MTIsIDEwNjE0LCAxMDYxNiwgCi0gICAgMTA2MTgsIDEwNjIwLCAxMDYyMiwgMTA2MjQsIDEwNjI2LCAxMDYyOCwgMTA2MzAsIDEwNjMyLCAxMDYzNCwgMTA2MzYsIAotICAgIDEwNjM4LCAxMDY0MCwgMTA2NDIsIDEwNjQ0LCAxMDY0NiwgMTA2NDgsIDEwNjUwLCAxMDY1MiwgMTA2NTQsIDEwNjU2LCAKLSAgICAxMDY1OCwgMTA2NjAsIDEwNjYyLCAxMDY2NCwgMTA2NjYsIDEwNjY4LCAxMDY3MCwgMTA2NzIsIDEwNjc0LCAxMDY3NiwgCi0gICAgMTA2NzgsIDEwNjgwLCAxMDY4MiwgMTA2ODQsIDEwNjg2LCAxMDY4OCwgMTA2OTAsIDEwNjkyLCAxMDY5NCwgMTA2OTYsIAotICAgIDEwNjk4LCAxMDcwMCwgMTA3MDIsIDEwNzA0LCAxMDcwNiwgMTA3MDgsIDEwNzEwLCAxMDcxMiwgMTA3MTQsIDEwNzE2LCAKLSAgICAxMDcxOCwgMTA3MjAsIDEwNzIyLCAxMDcyNCwgMTA3MjYsIDEwNzI4LCAxMDczMCwgMCwgMTA3MzIsIDEwNzM0LCAwLCAwLCAKLSAgICAxMDczNiwgMCwgMCwgMTA3MzgsIDEwNzQwLCAwLCAwLCAxMDc0MiwgMTA3NDQsIDEwNzQ2LCAxMDc0OCwgMCwgMTA3NTAsIAotICAgIDEwNzUyLCAxMDc1NCwgMTA3NTYsIDEwNzU4LCAxMDc2MCwgMTA3NjIsIDEwNzY0LCAxMDc2NiwgMTA3NjgsIDEwNzcwLCAKLSAgICAxMDc3MiwgMCwgMTA3NzQsIDAsIDEwNzc2LCAxMDc3OCwgMTA3ODAsIDEwNzgyLCAxMDc4NCwgMTA3ODYsIDEwNzg4LCAwLCAKLSAgICAxMDc5MCwgMTA3OTIsIDEwNzk0LCAxMDc5NiwgMTA3OTgsIDEwODAwLCAxMDgwMiwgMTA4MDQsIDEwODA2LCAxMDgwOCwgCi0gICAgMTA4MTAsIDEwODEyLCAxMDgxNCwgMTA4MTYsIDEwODE4LCAxMDgyMCwgMTA4MjIsIDEwODI0LCAxMDgyNiwgMTA4MjgsIAotICAgIDEwODMwLCAxMDgzMiwgMTA4MzQsIDEwODM2LCAxMDgzOCwgMTA4NDAsIDEwODQyLCAxMDg0NCwgMTA4NDYsIDEwODQ4LCAKLSAgICAxMDg1MCwgMTA4NTIsIDEwODU0LCAxMDg1NiwgMTA4NTgsIDEwODYwLCAxMDg2MiwgMTA4NjQsIDEwODY2LCAxMDg2OCwgCi0gICAgMTA4NzAsIDEwODcyLCAxMDg3NCwgMTA4NzYsIDEwODc4LCAxMDg4MCwgMTA4ODIsIDEwODg0LCAxMDg4NiwgMTA4ODgsIAotICAgIDEwODkwLCAxMDg5MiwgMTA4OTQsIDEwODk2LCAxMDg5OCwgMTA5MDAsIDEwOTAyLCAxMDkwNCwgMTA5MDYsIDEwOTA4LCAKLSAgICAxMDkxMCwgMTA5MTIsIDEwOTE0LCAxMDkxNiwgMTA5MTgsIDAsIDEwOTIwLCAxMDkyMiwgMTA5MjQsIDEwOTI2LCAwLCAwLCAKLSAgICAxMDkyOCwgMTA5MzAsIDEwOTMyLCAxMDkzNCwgMTA5MzYsIDEwOTM4LCAxMDk0MCwgMTA5NDIsIDAsIDEwOTQ0LCAxMDk0NiwgCi0gICAgMTA5NDgsIDEwOTUwLCAxMDk1MiwgMTA5NTQsIDEwOTU2LCAwLCAxMDk1OCwgMTA5NjAsIDEwOTYyLCAxMDk2NCwgMTA5NjYsIAotICAgIDEwOTY4LCAxMDk3MCwgMTA5NzIsIDEwOTc0LCAxMDk3NiwgMTA5NzgsIDEwOTgwLCAxMDk4MiwgMTA5ODQsIDEwOTg2LCAKLSAgICAxMDk4OCwgMTA5OTAsIDEwOTkyLCAxMDk5NCwgMTA5OTYsIDEwOTk4LCAxMTAwMCwgMTEwMDIsIDExMDA0LCAxMTAwNiwgCi0gICAgMTEwMDgsIDExMDEwLCAxMTAxMiwgMCwgMTEwMTQsIDExMDE2LCAxMTAxOCwgMTEwMjAsIDAsIDExMDIyLCAxMTAyNCwgCi0gICAgMTEwMjYsIDExMDI4LCAxMTAzMCwgMCwgMTEwMzIsIDAsIDAsIDAsIDExMDM0LCAxMTAzNiwgMTEwMzgsIDExMDQwLCAKLSAgICAxMTA0MiwgMTEwNDQsIDExMDQ2LCAwLCAxMTA0OCwgMTEwNTAsIDExMDUyLCAxMTA1NCwgMTEwNTYsIDExMDU4LCAxMTA2MCwgCi0gICAgMTEwNjIsIDExMDY0LCAxMTA2NiwgMTEwNjgsIDExMDcwLCAxMTA3MiwgMTEwNzQsIDExMDc2LCAxMTA3OCwgMTEwODAsIAotICAgIDExMDgyLCAxMTA4NCwgMTEwODYsIDExMDg4LCAxMTA5MCwgMTEwOTIsIDExMDk0LCAxMTA5NiwgMTEwOTgsIDExMTAwLCAKLSAgICAxMTEwMiwgMTExMDQsIDExMTA2LCAxMTEwOCwgMTExMTAsIDExMTEyLCAxMTExNCwgMTExMTYsIDExMTE4LCAxMTEyMCwgCi0gICAgMTExMjIsIDExMTI0LCAxMTEyNiwgMTExMjgsIDExMTMwLCAxMTEzMiwgMTExMzQsIDExMTM2LCAxMTEzOCwgMTExNDAsIAotICAgIDExMTQyLCAxMTE0NCwgMTExNDYsIDExMTQ4LCAxMTE1MCwgMTExNTIsIDExMTU0LCAxMTE1NiwgMTExNTgsIDExMTYwLCAKLSAgICAxMTE2MiwgMTExNjQsIDExMTY2LCAxMTE2OCwgMTExNzAsIDExMTcyLCAxMTE3NCwgMTExNzYsIDExMTc4LCAxMTE4MCwgCi0gICAgMTExODIsIDExMTg0LCAxMTE4NiwgMTExODgsIDExMTkwLCAxMTE5MiwgMTExOTQsIDExMTk2LCAxMTE5OCwgMTEyMDAsIAotICAgIDExMjAyLCAxMTIwNCwgMTEyMDYsIDExMjA4LCAxMTIxMCwgMTEyMTIsIDExMjE0LCAxMTIxNiwgMTEyMTgsIDExMjIwLCAKLSAgICAxMTIyMiwgMTEyMjQsIDExMjI2LCAxMTIyOCwgMTEyMzAsIDExMjMyLCAxMTIzNCwgMTEyMzYsIDExMjM4LCAxMTI0MCwgCi0gICAgMTEyNDIsIDExMjQ0LCAxMTI0NiwgMTEyNDgsIDExMjUwLCAxMTI1MiwgMTEyNTQsIDExMjU2LCAxMTI1OCwgMTEyNjAsIAotICAgIDExMjYyLCAxMTI2NCwgMTEyNjYsIDExMjY4LCAxMTI3MCwgMTEyNzIsIDExMjc0LCAxMTI3NiwgMTEyNzgsIDExMjgwLCAKLSAgICAxMTI4MiwgMTEyODQsIDExMjg2LCAxMTI4OCwgMTEyOTAsIDExMjkyLCAxMTI5NCwgMTEyOTYsIDExMjk4LCAxMTMwMCwgCi0gICAgMTEzMDIsIDExMzA0LCAxMTMwNiwgMTEzMDgsIDExMzEwLCAxMTMxMiwgMTEzMTQsIDExMzE2LCAxMTMxOCwgMTEzMjAsIAotICAgIDExMzIyLCAxMTMyNCwgMTEzMjYsIDExMzI4LCAxMTMzMCwgMTEzMzIsIDExMzM0LCAxMTMzNiwgMTEzMzgsIDExMzQwLCAKLSAgICAxMTM0MiwgMTEzNDQsIDExMzQ2LCAxMTM0OCwgMTEzNTAsIDExMzUyLCAxMTM1NCwgMTEzNTYsIDExMzU4LCAxMTM2MCwgCi0gICAgMTEzNjIsIDExMzY0LCAxMTM2NiwgMTEzNjgsIDExMzcwLCAxMTM3MiwgMTEzNzQsIDExMzc2LCAxMTM3OCwgMTEzODAsIAotICAgIDExMzgyLCAxMTM4NCwgMTEzODYsIDExMzg4LCAxMTM5MCwgMTEzOTIsIDExMzk0LCAxMTM5NiwgMTEzOTgsIDExNDAwLCAKLSAgICAxMTQwMiwgMTE0MDQsIDExNDA2LCAxMTQwOCwgMTE0MTAsIDExNDEyLCAxMTQxNCwgMTE0MTYsIDExNDE4LCAxMTQyMCwgCi0gICAgMTE0MjIsIDExNDI0LCAxMTQyNiwgMTE0MjgsIDExNDMwLCAxMTQzMiwgMTE0MzQsIDExNDM2LCAxMTQzOCwgMTE0NDAsIAotICAgIDExNDQyLCAxMTQ0NCwgMTE0NDYsIDExNDQ4LCAxMTQ1MCwgMTE0NTIsIDExNDU0LCAxMTQ1NiwgMTE0NTgsIDExNDYwLCAKLSAgICAxMTQ2MiwgMTE0NjQsIDExNDY2LCAxMTQ2OCwgMTE0NzAsIDExNDcyLCAxMTQ3NCwgMTE0NzYsIDExNDc4LCAxMTQ4MCwgCi0gICAgMTE0ODIsIDExNDg0LCAxMTQ4NiwgMTE0ODgsIDExNDkwLCAxMTQ5MiwgMTE0OTQsIDExNDk2LCAxMTQ5OCwgMTE1MDAsIAotICAgIDExNTAyLCAxMTUwNCwgMTE1MDYsIDExNTA4LCAxMTUxMCwgMTE1MTIsIDExNTE0LCAxMTUxNiwgMTE1MTgsIDExNTIwLCAKLSAgICAxMTUyMiwgMTE1MjQsIDExNTI2LCAxMTUyOCwgMTE1MzAsIDExNTMyLCAxMTUzNCwgMTE1MzYsIDExNTM4LCAxMTU0MCwgCi0gICAgMTE1NDIsIDExNTQ0LCAxMTU0NiwgMTE1NDgsIDExNTUwLCAxMTU1MiwgMTE1NTQsIDExNTU2LCAxMTU1OCwgMTE1NjAsIAotICAgIDExNTYyLCAxMTU2NCwgMTE1NjYsIDExNTY4LCAxMTU3MCwgMTE1NzIsIDExNTc0LCAxMTU3NiwgMTE1NzgsIDExNTgwLCAKLSAgICAxMTU4MiwgMTE1ODQsIDExNTg2LCAxMTU4OCwgMTE1OTAsIDExNTkyLCAxMTU5NCwgMTE1OTYsIDExNTk4LCAxMTYwMCwgCi0gICAgMTE2MDIsIDExNjA0LCAxMTYwNiwgMTE2MDgsIDExNjEwLCAxMTYxMiwgMTE2MTQsIDExNjE2LCAxMTYxOCwgMTE2MjAsIAotICAgIDExNjIyLCAxMTYyNCwgMTE2MjYsIDExNjI4LCAxMTYzMCwgMTE2MzIsIDExNjM0LCAxMTYzNiwgMTE2MzgsIDExNjQwLCAKLSAgICAxMTY0MiwgMTE2NDQsIDExNjQ2LCAxMTY0OCwgMTE2NTAsIDExNjUyLCAxMTY1NCwgMTE2NTYsIDExNjU4LCAxMTY2MCwgCi0gICAgMTE2NjIsIDExNjY0LCAxMTY2NiwgMTE2NjgsIDExNjcwLCAxMTY3MiwgMTE2NzQsIDExNjc2LCAxMTY3OCwgMTE2ODAsIAotICAgIDExNjgyLCAxMTY4NCwgMTE2ODYsIDExNjg4LCAxMTY5MCwgMTE2OTIsIDExNjk0LCAxMTY5NiwgMTE2OTgsIDExNzAwLCAKLSAgICAxMTcwMiwgMTE3MDQsIDExNzA2LCAxMTcwOCwgMTE3MTAsIDExNzEyLCAxMTcxNCwgMTE3MTYsIDExNzE4LCAxMTcyMCwgCi0gICAgMTE3MjIsIDExNzI0LCAxMTcyNiwgMCwgMCwgMTE3MjgsIDExNzMwLCAxMTczMiwgMTE3MzQsIDExNzM2LCAxMTczOCwgCi0gICAgMTE3NDAsIDExNzQyLCAxMTc0NCwgMTE3NDYsIDExNzQ4LCAxMTc1MCwgMTE3NTIsIDExNzU0LCAxMTc1NiwgMTE3NTgsIAotICAgIDExNzYwLCAxMTc2MiwgMTE3NjQsIDExNzY2LCAxMTc2OCwgMTE3NzAsIDExNzcyLCAxMTc3NCwgMTE3NzYsIDExNzc4LCAKLSAgICAxMTc4MCwgMTE3ODIsIDExNzg0LCAxMTc4NiwgMTE3ODgsIDExNzkwLCAxMTc5MiwgMTE3OTQsIDExNzk2LCAxMTc5OCwgCi0gICAgMTE4MDAsIDExODAyLCAxMTgwNCwgMTE4MDYsIDExODA4LCAxMTgxMCwgMTE4MTIsIDExODE0LCAxMTgxNiwgMTE4MTgsIAotICAgIDExODIwLCAxMTgyMiwgMTE4MjQsIDExODI2LCAxMTgyOCwgMTE4MzAsIDExODMyLCAxMTgzNCwgMTE4MzYsIDExODM4LCAKLSAgICAxMTg0MCwgMTE4NDIsIDExODQ0LCAxMTg0NiwgMTE4NDgsIDExODUwLCAxMTg1MiwgMTE4NTQsIDExODU2LCAxMTg1OCwgCi0gICAgMTE4NjAsIDExODYyLCAxMTg2NCwgMTE4NjYsIDExODY4LCAxMTg3MCwgMTE4NzIsIDExODc0LCAxMTg3NiwgMTE4NzgsIAotICAgIDExODgwLCAxMTg4MiwgMTE4ODQsIDExODg2LCAxMTg4OCwgMTE4OTAsIDExODkyLCAxMTg5NCwgMTE4OTYsIDExODk4LCAKLSAgICAxMTkwMCwgMTE5MDIsIDExOTA0LCAxMTkwNiwgMTE5MDgsIDExOTEwLCAxMTkxMiwgMTE5MTQsIDExOTE2LCAxMTkxOCwgCi0gICAgMTE5MjAsIDExOTIyLCAxMTkyNCwgMTE5MjYsIDExOTI4LCAxMTkzMCwgMTE5MzIsIDExOTM0LCAxMTkzNiwgMTE5MzgsIAotICAgIDExOTQwLCAxMTk0MiwgMTE5NDQsIDExOTQ2LCAxMTk0OCwgMTE5NTAsIDExOTUyLCAxMTk1NCwgMTE5NTYsIDExOTU4LCAKLSAgICAxMTk2MCwgMTE5NjIsIDExOTY0LCAxMTk2NiwgMTE5NjgsIDExOTcwLCAxMTk3MiwgMTE5NzQsIDExOTc2LCAxMTk3OCwgCi0gICAgMTE5ODAsIDExOTgyLCAxMTk4NCwgMTE5ODYsIDExOTg4LCAxMTk5MCwgMTE5OTIsIDExOTk0LCAxMTk5NiwgMTE5OTgsIAotICAgIDEyMDAwLCAxMjAwMiwgMTIwMDQsIDEyMDA2LCAxMjAwOCwgMTIwMTAsIDEyMDEyLCAxMjAxNCwgMTIwMTYsIDEyMDE4LCAKLSAgICAxMjAyMCwgMTIwMjIsIDEyMDI0LCAxMjAyNiwgMTIwMjgsIDEyMDMwLCAxMjAzMiwgMTIwMzQsIDEyMDM2LCAxMjAzOCwgCi0gICAgMTIwNDAsIDEyMDQyLCAxMjA0NCwgMTIwNDYsIDEyMDQ4LCAxMjA1MCwgMTIwNTIsIDEyMDU0LCAxMjA1NiwgMTIwNTgsIAotICAgIDEyMDYwLCAxMjA2MiwgMTIwNjQsIDEyMDY2LCAxMjA2OCwgMTIwNzAsIDEyMDcyLCAxMjA3NCwgMTIwNzYsIDEyMDc4LCAKLSAgICAxMjA4MCwgMTIwODIsIDEyMDg0LCAxMjA4NiwgMTIwODgsIDEyMDkwLCAxMjA5MiwgMTIwOTQsIDEyMDk2LCAxMjA5OCwgCi0gICAgMTIxMDAsIDEyMTAyLCAxMjEwNCwgMTIxMDYsIDEyMTA4LCAxMjExMCwgMTIxMTIsIDEyMTE0LCAxMjExNiwgMTIxMTgsIAotICAgIDEyMTIwLCAxMjEyMiwgMTIxMjQsIDEyMTI2LCAxMjEyOCwgMTIxMzAsIDEyMTMyLCAxMjEzNCwgMTIxMzYsIDEyMTM4LCAKLSAgICAxMjE0MCwgMTIxNDIsIDEyMTQ0LCAxMjE0NiwgMTIxNDgsIDEyMTUwLCAxMjE1MiwgMTIxNTQsIDEyMTU2LCAxMjE1OCwgCi0gICAgMTIxNjAsIDEyMTYyLCAxMjE2NCwgMTIxNjYsIDEyMTY4LCAxMjE3MCwgMTIxNzIsIDEyMTc0LCAxMjE3NiwgMTIxNzgsIAotICAgIDEyMTgwLCAxMjE4MiwgMTIxODQsIDEyMTg2LCAxMjE4OCwgMTIxOTAsIDEyMTkyLCAxMjE5NCwgMTIxOTYsIDEyMTk4LCAKLSAgICAxMjIwMCwgMTIyMDIsIDEyMjA0LCAxMjIwNiwgMTIyMDgsIDEyMjEwLCAxMjIxMiwgMTIyMTQsIDEyMjE2LCAxMjIxOCwgCi0gICAgMTIyMjAsIDEyMjIyLCAxMjIyNCwgMTIyMjYsIDEyMjI4LCAxMjIzMCwgMTIyMzIsIDEyMjM0LCAxMjIzNiwgMTIyMzgsIAotICAgIDEyMjQwLCAxMjI0MiwgMTIyNDQsIDEyMjQ2LCAxMjI0OCwgMTIyNTAsIDEyMjUyLCAxMjI1NCwgMTIyNTYsIDEyMjU4LCAKLSAgICAxMjI2MCwgMTIyNjIsIDEyMjY0LCAxMjI2NiwgMTIyNjgsIDEyMjcwLCAxMjI3MiwgMTIyNzQsIDEyMjc2LCAxMjI3OCwgCi0gICAgMTIyODAsIDEyMjgyLCAxMjI4NCwgMTIyODYsIDEyMjg4LCAxMjI5MCwgMTIyOTIsIDEyMjk0LCAxMjI5NiwgMTIyOTgsIAotICAgIDEyMzAwLCAxMjMwMiwgMTIzMDQsIDEyMzA2LCAxMjMwOCwgMTIzMTAsIDAsIDAsIDEyMzEyLCAxMjMxNCwgMTIzMTYsIAotICAgIDEyMzE4LCAxMjMyMCwgMTIzMjIsIDEyMzI0LCAxMjMyNiwgMTIzMjgsIDEyMzMwLCAxMjMzMiwgMTIzMzQsIDEyMzM2LCAKLSAgICAxMjMzOCwgMTIzNDAsIDEyMzQyLCAxMjM0NCwgMTIzNDYsIDEyMzQ4LCAxMjM1MCwgMTIzNTIsIDEyMzU0LCAxMjM1NiwgCi0gICAgMTIzNTgsIDEyMzYwLCAxMjM2MiwgMTIzNjQsIDEyMzY2LCAxMjM2OCwgMTIzNzAsIDEyMzcyLCAxMjM3NCwgMTIzNzYsIAotICAgIDEyMzc4LCAxMjM4MCwgMTIzODIsIDEyMzg0LCAxMjM4NiwgMTIzODgsIDEyMzkwLCAxMjM5MiwgMTIzOTQsIDEyMzk2LCAKLSAgICAxMjM5OCwgMTI0MDAsIDEyNDAyLCAxMjQwNCwgMTI0MDYsIDEyNDA4LCAxMjQxMCwgMTI0MTIsIDEyNDE0LCAxMjQxNiwgCi0gICAgMTI0MTgsIDEyNDIwLCAxMjQyMiwgMTI0MjQsIDEyNDI2LCAxMjQyOCwgMTI0MzAsIDEyNDMyLCAxMjQzNCwgMTI0MzYsIAotICAgIDEyNDM4LCAxMjQ0MCwgMTI0NDIsIDEyNDQ0LCAxMjQ0NiwgMTI0NDgsIDEyNDUwLCAxMjQ1MiwgMTI0NTQsIDEyNDU2LCAKLSAgICAxMjQ1OCwgMTI0NjAsIDEyNDYyLCAxMjQ2NCwgMTI0NjYsIDEyNDY4LCAxMjQ3MCwgMTI0NzIsIDEyNDc0LCAxMjQ3NiwgCi0gICAgMTI0NzgsIDEyNDgwLCAxMjQ4MiwgMTI0ODQsIDEyNDg2LCAxMjQ4OCwgMTI0OTAsIDEyNDkyLCAxMjQ5NCwgMTI0OTYsIAotICAgIDEyNDk4LCAxMjUwMCwgMTI1MDIsIDEyNTA0LCAxMjUwNiwgMTI1MDgsIDEyNTEwLCAxMjUxMiwgMTI1MTQsIDEyNTE2LCAKLSAgICAxMjUxOCwgMTI1MjAsIDEyNTIyLCAxMjUyNCwgMTI1MjYsIDEyNTI4LCAxMjUzMCwgMTI1MzIsIDEyNTM0LCAxMjUzNiwgCi0gICAgMTI1MzgsIDEyNTQwLCAxMjU0MiwgMTI1NDQsIDEyNTQ2LCAxMjU0OCwgMTI1NTAsIDEyNTUyLCAxMjU1NCwgMTI1NTYsIAotICAgIDEyNTU4LCAxMjU2MCwgMTI1NjIsIDEyNTY0LCAxMjU2NiwgMTI1NjgsIDEyNTcwLCAxMjU3MiwgMTI1NzQsIDEyNTc2LCAKLSAgICAxMjU3OCwgMTI1ODAsIDEyNTgyLCAxMjU4NCwgMTI1ODYsIDEyNTg4LCAxMjU5MCwgMTI1OTIsIDEyNTk0LCAxMjU5NiwgCi0gICAgMTI1OTgsIDEyNjAwLCAxMjYwMiwgMTI2MDQsIDEyNjA2LCAxMjYwOCwgMTI2MTAsIDEyNjEyLCAxMjYxNCwgMTI2MTYsIAotICAgIDEyNjE4LCAxMjYyMCwgMTI2MjIsIDEyNjI0LCAxMjYyNiwgMTI2MjgsIDEyNjMwLCAxMjYzMiwgMTI2MzQsIDEyNjM2LCAKLSAgICAxMjYzOCwgMTI2NDAsIDEyNjQyLCAxMjY0NCwgMTI2NDYsIDEyNjQ4LCAxMjY1MCwgMTI2NTIsIDEyNjU0LCAxMjY1NiwgCi0gICAgMTI2NTgsIDEyNjYwLCAxMjY2MiwgMTI2NjQsIDEyNjY2LCAxMjY2OCwgMTI2NzAsIDEyNjcyLCAxMjY3NCwgMTI2NzYsIAotICAgIDEyNjc4LCAxMjY4MCwgMTI2ODIsIDEyNjg0LCAxMjY4NiwgMTI2ODgsIDEyNjkwLCAxMjY5MiwgMTI2OTQsIDEyNjk2LCAKLSAgICAxMjY5OCwgMTI3MDAsIDEyNzAyLCAxMjcwNCwgMTI3MDYsIDEyNzA4LCAxMjcxMCwgMTI3MTIsIDEyNzE0LCAxMjcxNiwgCi0gICAgMTI3MTgsIDEyNzIwLCAxMjcyMiwgMTI3MjQsIDEyNzI2LCAxMjcyOCwgMTI3MzAsIDEyNzMyLCAxMjczNCwgMTI3MzYsIAotICAgIDEyNzM4LCAxMjc0MCwgMTI3NDIsIDEyNzQ0LCAxMjc0NiwgMTI3NDgsIDEyNzUwLCAxMjc1MiwgMTI3NTQsIDEyNzU2LCAKLSAgICAxMjc1OCwgMTI3NjAsIDEyNzYyLCAxMjc2NCwgMTI3NjYsIDEyNzY4LCAxMjc3MCwgMTI3NzIsIDEyNzc0LCAxMjc3NiwgCi0gICAgMTI3NzgsIDEyNzgwLCAxMjc4MiwgMTI3ODQsIDEyNzg2LCAxMjc4OCwgMTI3OTAsIDEyNzkyLCAxMjc5NCwgMTI3OTYsIAotICAgIDEyNzk4LCAxMjgwMCwgMTI4MDIsIDEyODA0LCAxMjgwNiwgMTI4MDgsIDEyODEwLCAxMjgxMiwgMTI4MTQsIDEyODE2LCAKLSAgICAxMjgxOCwgMTI4MjAsIDEyODIyLCAxMjgyNCwgMTI4MjYsIDEyODI4LCAxMjgzMCwgMTI4MzIsIDEyODM0LCAxMjgzNiwgCi0gICAgMTI4MzgsIDEyODQwLCAxMjg0MiwgMTI4NDQsIDEyODQ2LCAxMjg0OCwgMTI4NTAsIDEyODUyLCAxMjg1NCwgMTI4NTYsIAotICAgIDEyODU4LCAxMjg2MCwgMTI4NjIsIDEyODY0LCAxMjg2NiwgMTI4NjgsIDEyODcwLCAxMjg3MiwgMTI4NzQsIDEyODc2LCAKLSAgICAxMjg3OCwgMTI4ODAsIDEyODgyLCAxMjg4NCwgMTI4ODYsIDEyODg4LCAxMjg5MCwgMTI4OTIsIDEyODk0LCAxMjg5NiwgCi0gICAgMTI4OTgsIDEyOTAwLCAxMjkwMiwgMTI5MDQsIDEyOTA2LCAxMjkwOCwgMTI5MTAsIDEyOTEyLCAxMjkxNCwgMTI5MTYsIAotICAgIDEyOTE4LCAxMjkyMCwgMTI5MjIsIDEyOTI0LCAxMjkyNiwgMTI5MjgsIDEyOTMwLCAxMjkzMiwgMTI5MzQsIDEyOTM2LCAKLSAgICAxMjkzOCwgMTI5NDAsIDEyOTQyLCAxMjk0NCwgMTI5NDYsIDEyOTQ4LCAxMjk1MCwgMTI5NTIsIDEyOTU0LCAxMjk1NiwgCi0gICAgMTI5NTgsIDEyOTYwLCAxMjk2MiwgMTI5NjQsIDEyOTY2LCAxMjk2OCwgMTI5NzAsIDEyOTcyLCAxMjk3NCwgMTI5NzYsIAotICAgIDEyOTc4LCAxMjk4MCwgMTI5ODIsIDEyOTg0LCAxMjk4NiwgMTI5ODgsIDEyOTkwLCAxMjk5MiwgMTI5OTQsIDEyOTk2LCAKLSAgICAxMjk5OCwgMTMwMDAsIDEzMDAyLCAxMzAwNCwgMTMwMDYsIDEzMDA4LCAxMzAxMCwgMTMwMTIsIDEzMDE0LCAxMzAxNiwgCi0gICAgMTMwMTgsIDEzMDIwLCAxMzAyMiwgMTMwMjQsIDEzMDI2LCAxMzAyOCwgMTMwMzAsIDEzMDMyLCAxMzAzNCwgMTMwMzYsIAotICAgIDEzMDM4LCAxMzA0MCwgMTMwNDIsIDEzMDQ0LCAxMzA0NiwgMTMwNDgsIDEzMDUwLCAxMzA1MiwgMTMwNTQsIDEzMDU2LCAKLSAgICAxMzA1OCwgMTMwNjAsIDEzMDYyLCAxMzA2NCwgMTMwNjYsIDEzMDY4LCAxMzA3MCwgMTMwNzIsIDEzMDc0LCAxMzA3NiwgCi0gICAgMTMwNzgsIDEzMDgwLCAxMzA4MiwgMTMwODQsIDEzMDg2LCAxMzA4OCwgMTMwOTAsIDEzMDkyLCAxMzA5NCwgMTMwOTYsIAotICAgIDEzMDk4LCAxMzEwMCwgMTMxMDIsIDEzMTA0LCAxMzEwNiwgMTMxMDgsIDEzMTEwLCAxMzExMiwgMTMxMTQsIDEzMTE2LCAKLSAgICAxMzExOCwgMTMxMjAsIDEzMTIyLCAxMzEyNCwgMTMxMjYsIDEzMTI4LCAxMzEzMCwgMTMxMzIsIDEzMTM0LCAxMzEzNiwgCi0gICAgMTMxMzgsIDEzMTQwLCAxMzE0MiwgMTMxNDQsIDEzMTQ2LCAxMzE0OCwgMTMxNTAsIDEzMTUyLCAxMzE1NCwgMTMxNTYsIAotICAgIDEzMTU4LCAxMzE2MCwgMTMxNjIsIDEzMTY0LCAxMzE2NiwgMTMxNjgsIDEzMTcwLCAxMzE3MiwgMTMxNzQsIDEzMTc2LCAKLSAgICAxMzE3OCwgMTMxODAsIDEzMTgyLCAxMzE4NCwgMTMxODYsIDEzMTg4LCAxMzE5MCwgMTMxOTIsIDEzMTk0LCAxMzE5NiwgCi0gICAgMTMxOTgsIDEzMjAwLCAxMzIwMiwgMTMyMDQsIDEzMjA2LCAxMzIwOCwgMTMyMTAsIDEzMjEyLCAxMzIxNCwgMTMyMTYsIAotICAgIDEzMjE4LCAxMzIyMCwgMTMyMjIsIDEzMjI0LCAxMzIyNiwgMTMyMjgsIDEzMjMwLCAxMzIzMiwgMTMyMzQsIDEzMjM2LCAKLSAgICAxMzIzOCwgMTMyNDAsIDEzMjQyLCAxMzI0NCwgMTMyNDYsIDEzMjQ4LCAxMzI1MCwgMTMyNTIsIDEzMjU0LCAxMzI1NiwgCi0gICAgMTMyNTgsIDEzMjYwLCAxMzI2MiwgMTMyNjQsIDEzMjY2LCAxMzI2OCwgMTMyNzAsIDEzMjcyLCAxMzI3NCwgMTMyNzYsIAotICAgIDEzMjc4LCAxMzI4MCwgMTMyODIsIDEzMjg0LCAxMzI4NiwgMTMyODgsIDEzMjkwLCAxMzI5MiwgMTMyOTQsIDEzMjk2LCAKLSAgICAxMzI5OCwgMTMzMDAsIDEzMzAyLCAxMzMwNCwgMTMzMDYsIDEzMzA4LCAxMzMxMCwgMTMzMTIsIDEzMzE0LCAxMzMxNiwgCi0gICAgMTMzMTgsIDEzMzIwLCAxMzMyMiwgMTMzMjQsIDEzMzI2LCAxMzMyOCwgMTMzMzAsIDEzMzMyLCAxMzMzNCwgMTMzMzYsIAotICAgIDEzMzM4LCAxMzM0MCwgMTMzNDIsIDEzMzQ0LCAxMzM0NiwgMTMzNDgsIDEzMzUwLCAxMzM1MiwgMTMzNTQsIDEzMzU2LCAKLSAgICAxMzM1OCwgMTMzNjAsIDEzMzYyLCAxMzM2NCwgMTMzNjYsIDEzMzY4LCAxMzM3MCwgMTMzNzIsIDEzMzc0LCAxMzM3NiwgCi0gICAgMTMzNzgsIDEzMzgwLCAxMzM4MiwgMTMzODQsIDEzMzg2LCAxMzM4OCwgMTMzOTAsIDEzMzkyLCAxMzM5NCwgMTMzOTYsIAotICAgIDEzMzk4LCAxMzQwMCwgMTM0MDIsIDEzNDA0LCAxMzQwNiwgMTM0MDgsIDEzNDEwLCAxMzQxMiwgMTM0MTQsIDEzNDE2LCAKLSAgICAxMzQxOCwgMTM0MjAsIDEzNDIyLCAxMzQyNCwgMTM0MjYsIDEzNDI4LCAxMzQzMCwgMTM0MzIsIDEzNDM0LCAxMzQzNiwgCi0gICAgMTM0MzgsIDEzNDQwLCAxMzQ0MiwgMTM0NDQsIDEzNDQ2LCAxMzQ0OCwgMTM0NTAsIDEzNDUyLCAxMzQ1NCwgMTM0NTYsIAotICAgIDEzNDU4LCAxMzQ2MCwgMTM0NjIsIDEzNDY0LCAxMzQ2NiwgMTM0NjgsIDEzNDcwLCAxMzQ3MiwgMTM0NzQsIDEzNDc2LCAKLSAgICAxMzQ3OCwgMTM0ODAsIDEzNDgyLCAxMzQ4NCwgMTM0ODYsIDEzNDg4LCAxMzQ5MCwgMTM0OTIsIDEzNDk0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjczOSwgMTI3NDEsIAorICAgIDEyNzQzLCAxMjc0NSwgMTI3NDcsIDEyNzQ5LCAxMjc1MSwgMTI3NTMsIDEyNzU1LCAxMjc1NywgMTI3NTksIDEyNzYxLCAKKyAgICAxMjc2MywgMTI3NjUsIDEyNzY3LCAxMjc2OSwgMTI3NzEsIDEyNzczLCAxMjc3NSwgMTI3NzcsIDEyNzc5LCAxMjc4MSwgCisgICAgMTI3ODMsIDEyNzg1LCAxMjc4NywgMTI3ODksIDEyNzkxLCAxMjc5MywgMTI3OTUsIDEyNzk3LCAxMjc5OSwgMTI4MDEsIAorICAgIDEyODAzLCAxMjgwNSwgMTI4MDcsIDEyODA5LCAxMjgxMSwgMTI4MTMsIDEyODE1LCAxMjgxNywgMTI4MTksIDEyODIxLCAKKyAgICAxMjgyMywgMTI4MjUsIDEyODI3LCAxMjgyOSwgMTI4MzEsIDEyODMzLCAxMjgzNSwgMTI4MzcsIDEyODM5LCAxMjg0MSwgCisgICAgMTI4NDMsIDEyODQ1LCAxMjg0NywgMTI4NDksIDEyODUxLCAxMjg1MywgMTI4NTUsIDEyODU3LCAxMjg1OSwgMTI4NjEsIAorICAgIDEyODYzLCAxMjg2NSwgMTI4NjcsIDEyODY5LCAxMjg3MSwgMTI4NzMsIDEyODc1LCAxMjg3NywgMTI4NzksIDEyODgxLCAKKyAgICAxMjg4MywgMTI4ODUsIDEyODg3LCAxMjg4OSwgMTI4OTEsIDEyODkzLCAxMjg5NSwgMTI4OTcsIDEyODk5LCAxMjkwMSwgCisgICAgMTI5MDMsIDEyOTA1LCAxMjkwNywgMTI5MDksIDEyOTExLCAxMjkxMywgMTI5MTUsIDEyOTE3LCAxMjkxOSwgMTI5MjEsIAorICAgIDEyOTIzLCAxMjkyNSwgMTI5MjcsIDEyOTI5LCAxMjkzMSwgMTI5MzMsIDEyOTM1LCAxMjkzNywgMTI5MzksIDEyOTQxLCAKKyAgICAxMjk0MywgMTI5NDUsIDEyOTQ3LCAxMjk0OSwgMTI5NTEsIDEyOTUzLCAxMjk1NSwgMTI5NTcsIDEyOTU5LCAxMjk2MSwgCisgICAgMTI5NjMsIDEyOTY1LCAxMjk2NywgMTI5NjksIDEyOTcxLCAxMjk3MywgMTI5NzUsIDEyOTc3LCAxMjk3OSwgMTI5ODEsIAorICAgIDEyOTgzLCAxMjk4NSwgMTI5ODcsIDEyOTg5LCAxMjk5MSwgMTI5OTMsIDEyOTk1LCAxMjk5NywgMTI5OTksIDEzMDAxLCAKKyAgICAxMzAwMywgMTMwMDUsIDEzMDA3LCAxMzAwOSwgMTMwMTEsIDEzMDEzLCAxMzAxNSwgMTMwMTcsIDEzMDE5LCAxMzAyMSwgCisgICAgMTMwMjMsIDEzMDI1LCAxMzAyNywgMTMwMjksIDEzMDMxLCAxMzAzMywgMTMwMzUsIDEzMDM3LCAxMzAzOSwgMTMwNDEsIAorICAgIDEzMDQzLCAxMzA0NSwgMTMwNDcsIDEzMDQ5LCAxMzA1MSwgMTMwNTMsIDEzMDU1LCAxMzA1NywgMTMwNTksIDEzMDYxLCAKKyAgICAxMzA2MywgMTMwNjUsIDEzMDY3LCAxMzA2OSwgMTMwNzEsIDEzMDczLCAxMzA3NSwgMTMwNzcsIDEzMDc5LCAxMzA4MSwgCisgICAgMTMwODMsIDEzMDg1LCAxMzA4NywgMTMwODksIDEzMDkxLCAxMzA5MywgMTMwOTUsIDEzMDk3LCAxMzA5OSwgMTMxMDEsIAorICAgIDEzMTAzLCAxMzEwNSwgMTMxMDcsIDEzMTA5LCAxMzExMSwgMTMxMTMsIDEzMTE1LCAxMzExNywgMTMxMTksIDEzMTIxLCAKKyAgICAxMzEyMywgMTMxMjUsIDEzMTI3LCAxMzEyOSwgMTMxMzEsIDEzMTMzLCAxMzEzNSwgMTMxMzcsIDEzMTM5LCAxMzE0MSwgCisgICAgMTMxNDMsIDEzMTQ1LCAxMzE0NywgMTMxNDksIDEzMTUxLCAxMzE1MywgMTMxNTUsIDEzMTU3LCAxMzE1OSwgMTMxNjEsIAorICAgIDEzMTYzLCAxMzE2NSwgMTMxNjcsIDEzMTY5LCAxMzE3MSwgMTMxNzMsIDEzMTc1LCAxMzE3NywgMTMxNzksIDEzMTgxLCAKKyAgICAxMzE4MywgMTMxODUsIDEzMTg3LCAxMzE4OSwgMTMxOTEsIDEzMTkzLCAxMzE5NSwgMTMxOTcsIDEzMTk5LCAxMzIwMSwgCisgICAgMTMyMDMsIDEzMjA1LCAxMzIwNywgMTMyMDksIDEzMjExLCAxMzIxMywgMTMyMTUsIDEzMjE3LCAxMzIxOSwgMTMyMjEsIAorICAgIDEzMjIzLCAxMzIyNSwgMTMyMjcsIDEzMjI5LCAxMzIzMSwgMTMyMzMsIDEzMjM1LCAxMzIzNywgMTMyMzksIDEzMjQxLCAKKyAgICAxMzI0MywgMTMyNDUsIDEzMjQ3LCAxMzI0OSwgMTMyNTEsIDEzMjUzLCAxMzI1NSwgMTMyNTcsIDEzMjU5LCAxMzI2MSwgCisgICAgMTMyNjMsIDEzMjY1LCAxMzI2NywgMTMyNjksIDEzMjcxLCAxMzI3MywgMTMyNzUsIDEzMjc3LCAxMzI3OSwgMTMyODEsIAorICAgIDEzMjgzLCAxMzI4NSwgMTMyODcsIDEzMjg5LCAxMzI5MSwgMTMyOTMsIDEzMjk1LCAxMzI5NywgMTMyOTksIDEzMzAxLCAKKyAgICAxMzMwMywgMTMzMDUsIDEzMzA3LCAxMzMwOSwgMTMzMTEsIDEzMzEzLCAxMzMxNSwgMTMzMTcsIDEzMzE5LCAxMzMyMSwgCisgICAgMTMzMjMsIDEzMzI1LCAxMzMyNywgMTMzMjksIDEzMzMxLCAxMzMzMywgMTMzMzUsIDEzMzM3LCAxMzMzOSwgMTMzNDEsIAorICAgIDEzMzQzLCAxMzM0NSwgMTMzNDcsIDEzMzQ5LCAxMzM1MSwgMTMzNTMsIDEzMzU1LCAxMzM1NywgMTMzNTksIDEzMzYxLCAKKyAgICAxMzM2MywgMTMzNjUsIDEzMzY3LCAxMzM2OSwgMTMzNzEsIDEzMzczLCAxMzM3NSwgMTMzNzcsIDEzMzc5LCAxMzM4MSwgCisgICAgMTMzODMsIDEzMzg1LCAxMzM4NywgMTMzODksIDEzMzkxLCAxMzM5MywgMTMzOTUsIDEzMzk3LCAxMzM5OSwgMTM0MDEsIAorICAgIDEzNDAzLCAxMzQwNSwgMTM0MDcsIDEzNDA5LCAxMzQxMSwgMTM0MTMsIDEzNDE1LCAxMzQxNywgMTM0MTksIDEzNDIxLCAKKyAgICAxMzQyMywgMTM0MjUsIDEzNDI3LCAxMzQyOSwgMTM0MzEsIDEzNDMzLCAxMzQzNSwgMTM0MzcsIDEzNDM5LCAxMzQ0MSwgCisgICAgMTM0NDMsIDEzNDQ1LCAxMzQ0NywgMTM0NDksIDEzNDUxLCAxMzQ1MywgMTM0NTUsIDEzNDU3LCAxMzQ1OSwgMTM0NjEsIAorICAgIDEzNDYzLCAxMzQ2NSwgMTM0NjcsIDEzNDY5LCAxMzQ3MSwgMTM0NzMsIDEzNDc1LCAxMzQ3NywgMTM0NzksIDEzNDgxLCAKKyAgICAxMzQ4MywgMTM0ODUsIDEzNDg3LCAxMzQ4OSwgMTM0OTEsIDEzNDkzLCAxMzQ5NSwgMTM0OTcsIDEzNDk5LCAxMzUwMSwgCisgICAgMTM1MDMsIDEzNTA1LCAxMzUwNywgMTM1MDksIDEzNTExLCAxMzUxMywgMTM1MTUsIDEzNTE3LCAxMzUxOSwgMTM1MjEsIAorICAgIDEzNTIzLCAxMzUyNSwgMTM1MjcsIDEzNTI5LCAxMzUzMSwgMTM1MzMsIDEzNTM1LCAxMzUzNywgMTM1MzksIDEzNTQxLCAKKyAgICAxMzU0MywgMTM1NDUsIDEzNTQ3LCAxMzU0OSwgMTM1NTEsIDEzNTUzLCAxMzU1NSwgMTM1NTcsIDEzNTU5LCAxMzU2MSwgCisgICAgMTM1NjMsIDEzNTY1LCAxMzU2NywgMTM1NjksIDEzNTcxLCAxMzU3MywgMTM1NzUsIDEzNTc3LCAxMzU3OSwgMTM1ODEsIAorICAgIDEzNTgzLCAxMzU4NSwgMTM1ODcsIDEzNTg5LCAxMzU5MSwgMTM1OTMsIDEzNTk1LCAxMzU5NywgMTM1OTksIDEzNjAxLCAKKyAgICAxMzYwMywgMTM2MDUsIDEzNjA3LCAxMzYwOSwgMTM2MTEsIDEzNjEzLCAxMzYxNSwgMTM2MTcsIDEzNjE5LCAxMzYyMSwgCisgICAgMTM2MjMsIDEzNjI1LCAxMzYyNywgMTM2MjksIDEzNjMxLCAxMzYzMywgMTM2MzUsIDEzNjM3LCAxMzYzOSwgMTM2NDEsIAorICAgIDEzNjQzLCAxMzY0NSwgMTM2NDcsIDEzNjQ5LCAxMzY1MSwgMTM2NTMsIDEzNjU1LCAxMzY1NywgMTM2NTksIDEzNjYxLCAKKyAgICAxMzY2MywgMTM2NjUsIDEzNjY3LCAxMzY2OSwgMTM2NzEsIDEzNjczLCAxMzY3NSwgMTM2NzcsIDEzNjc5LCAxMzY4MSwgCisgICAgMTM2ODMsIDEzNjg1LCAxMzY4NywgMTM2ODksIDEzNjkxLCAxMzY5MywgMTM2OTUsIDEzNjk3LCAxMzY5OSwgMTM3MDEsIAorICAgIDEzNzAzLCAxMzcwNSwgMTM3MDcsIDEzNzA5LCAxMzcxMSwgMTM3MTMsIDEzNzE1LCAxMzcxNywgMTM3MTksIDEzNzIxLCAKKyAgICAxMzcyMywgMTM3MjUsIDEzNzI3LCAxMzcyOSwgMTM3MzEsIDEzNzMzLCAxMzczNSwgMTM3MzcsIDEzNzM5LCAxMzc0MSwgCisgICAgMTM3NDMsIDEzNzQ1LCAxMzc0NywgMTM3NDksIDEzNzUxLCAxMzc1MywgMTM3NTUsIDEzNzU3LCAxMzc1OSwgMTM3NjEsIAorICAgIDEzNzYzLCAxMzc2NSwgMTM3NjcsIDEzNzY5LCAxMzc3MSwgMTM3NzMsIDEzNzc1LCAxMzc3NywgMTM3NzksIDEzNzgxLCAKKyAgICAxMzc4MywgMTM3ODUsIDEzNzg3LCAxMzc4OSwgMTM3OTEsIDEzNzkzLCAxMzc5NSwgMTM3OTcsIDEzNzk5LCAxMzgwMSwgCisgICAgMTM4MDMsIDEzODA1LCAxMzgwNywgMTM4MDksIDEzODExLCAxMzgxMywgMTM4MTUsIDEzODE3LCAxMzgxOSwgMTM4MjEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNDExNCwzNTIgKzQ1MzAsMzkwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBORkMgcGFpcnMgKi8KLSNkZWZpbmUgQ09NUF9TSElGVCAzCisjZGVmaW5lIENPTVBfU0hJRlQgMgogc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbXBfaW5kZXhbXSA9IHsKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCAKLSAgICAwLCAwLCAwLCA4LCAwLCA5LCAxMCwgMCwgMCwgMTEsIDEyLCAxMywgMTQsIDAsIDAsIDAsIDAsIDE1LCAxNiwgMTcsIDAsIDAsIAotICAgIDAsIDE4LCAxOSwgMjAsIDIxLCAwLCAwLCAwLCAyMiwgMCwgMCwgMCwgMCwgMCwgMjMsIDI0LCAyNSwgMjYsIDAsIDAsIDAsIAotICAgIDI3LCAyOCwgMjksIDMwLCAwLCAwLCAwLCAzMSwgMzIsIDMzLCAzNCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIDAsIDM2LCAKLSAgICAwLCAzNywgMzgsIDM5LCAwLCAwLCA0MCwgNDEsIDQyLCA0MywgMCwgMCwgMCwgNDQsIDQ1LCA0NiwgMCwgMCwgMCwgMCwgNDcsIAotICAgIDQ4LCA0OSwgNTAsIDAsIDAsIDUxLCA1MiwgNTMsIDU0LCAwLCAwLCAwLCA1NSwgNTYsIDAsIDAsIDAsIDAsIDAsIDU3LCA1OCwgCi0gICAgNTksIDYwLCAwLCAwLCAwLCA2MSwgNjIsIDYzLCAwLCAwLCAwLCAwLCA2NCwgNjUsIDY2LCA2NywgMCwgMCwgNjgsIDY5LCAKLSAgICA3MCwgNzEsIDAsIDAsIDAsIDcyLCAwLCA3MywgMCwgMCwgMCwgMCwgNzQsIDAsIDc1LCAwLCAwLCAwLCAwLCA3NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzcsIDc4LCA3OSwgMCwgMCwgMCwgMCwgODAsIDgxLCA4MiwgODMsIDAsIDAsIDAsIDg0LCA4NSwgODYsIDAsIAotICAgIDAsIDAsIDAsIDg3LCA4OCwgMCwgODksIDAsIDAsIDkwLCA5MSwgMCwgOTIsIDAsIDAsIDAsIDAsIDkzLCA5NCwgOTUsIDAsIAotICAgIDAsIDAsIDk2LCA5NywgOTgsIDk5LCAwLCAwLCAwLCAxMDAsIDAsIDAsIDAsIDAsIDAsIDEwMSwgMTAyLCAwLCAxMDMsIDAsIAotICAgIDAsIDAsIDEwNCwgMTA1LCAxMDYsIDEwNywgMCwgMCwgMCwgMTA4LCAxMDksIDExMCwgMTExLCAwLCAwLCAwLCAxMTIsIDExMywgCi0gICAgMCwgMCwgMCwgMCwgMTE0LCAxMTUsIDExNiwgMTE3LCAwLCAwLCAwLCAxMTgsIDExOSwgMTIwLCAxMjEsIDAsIDAsIDAsIAotICAgIDEyMiwgMCwgMTIzLCAwLCAwLCAwLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMCwgMCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAKLSAgICAwLCAwLCAwLCAxMzMsIDEzNCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzYsIDEzNywgMTM4LCAwLCAwLCAxMzksIDE0MCwgCi0gICAgMTQxLCAxNDIsIDAsIDAsIDAsIDAsIDE0MywgMTQ0LCAxNDUsIDAsIDAsIDAsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMCwgMCwgCi0gICAgMCwgMTUwLCAwLCAxNTEsIDAsIDAsIDAsIDE1MiwgMTUzLCAxNTQsIDAsIDAsIDAsIDAsIDAsIDE1NSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU2LCAxNTcsIDE1OCwgMCwgMCwgMCwgMCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAwLCAwLCAxNjMsIDAsIDAsIDAsIAotICAgIDE2NCwgMCwgMCwgMTY1LCAxNjYsIDAsIDAsIDAsIDAsIDAsIDE2NywgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNjksIDE3MCwgMCwgMCwgMCwgMCwgMCwgMTcxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzIsIDE3MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAxNzUsIDE3NiwgMCwgMCwgMCwgMCwgMCwgMTc3LCAxNzgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCAwLCAwLCAwLCAwLCAwLCAxODEsIDE4MiwgMTgzLCAwLCAwLCAwLCAwLCAKLSAgICAxODQsIDE4NSwgMCwgMCwgMCwgMCwgMCwgMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIDAsIDAsIDAsIDAsIDAsIDE4OCwgCi0gICAgMTg5LCAwLCAwLCAwLCAwLCAwLCAxOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5MSwgMTkyLCAwLCAwLCAwLCAwLCAwLCAxOTMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE5NCwgMTk1LCAwLCAwLCAwLCAwLCAwLCAxOTYsIDE5NywgMCwgMCwgMCwgMCwgMCwgMTk4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxOTksIDAsIDAsIDAsIDAsIDAsIDIwMCwgMjAxLCAyMDIsIDAsIDAsIDAsIDAsIDIwMywgMjA0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMDUsIDIwNiwgMCwgMCwgMCwgMCwgMCwgMjA3LCAwLCAwLCAwLCAwLCAwLCAyMDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDIwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDIxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIxNSwgMCwgMCwgMCwgMCwgMCwgMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDIxOCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjE5LCAwLCAwLCAwLCAwLCAwLCAyMjAsIDIyMSwgMjIyLCAwLCAwLCAwLCAwLCAyMjMsIDIyNCwgCi0gICAgMjI1LCAwLCAwLCAwLCAwLCAyMjYsIDIyNywgMjI4LCAwLCAwLCAwLCAwLCAyMjksIDIzMCwgMjMxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyMzIsIDAsIDAsIDAsIDAsIDAsIDIzMywgMCwgMCwgMCwgMCwgMCwgMjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzUsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDIzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAwLCAwLCAwLCAwLCAwLCAyMzgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDIzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0MiwgMCwgMjQzLCAyNDQsIDAsIDAsIDAsIDI0NSwgMjQ2LCAwLCAwLCAwLCAwLCAyNDcsIDAsIDI0OCwgMCwgMjQ5LCAwLCAKLSAgICAwLCAyNTAsIDI1MSwgMjUyLCAwLCAwLCAwLCAwLCAyNTMsIDAsIDI1NCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAwLCAwLCAwLCAKLSAgICAwLCAyNTYsIDI1NywgMjU4LCAwLCAwLCAwLCAwLCAyNTksIDAsIDI2MCwgMCwgMjYxLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI2MywgMCwgMCwgMjY0LCAyNjUsIDI2NiwgMCwgMjY3LCAwLCAwLCAyNjgsIDAsIDI2OSwgMCwgMCwgCi0gICAgMCwgMCwgMjcwLCAwLCAyNzEsIDI3MiwgMCwgMCwgMCwgMjczLCAyNzQsIDAsIDI3NSwgMCwgMCwgMjc2LCAwLCAyNzcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3OCwgMCwgMCwgMCwgMCwgMjc5LCAyODAsIDI4MSwgMjgyLCAwLCAwLCAwLCAyODMsIDI4NCwgMCwgCi0gICAgMjg1LCAwLCAwLCAyODYsIDAsIDAsIDAsIDI4NywgMCwgMCwgMjg4LCAwLCAwLCAwLCAyODksIDAsIDAsIDAsIDAsIDAsIAotICAgIDI5MCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjk0LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjk3LCAwLCAwLCAwLCAwLCAwLCAyOTgsIDI5OSwgMCwgMCwgMCwgMCwgMCwgMzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzLCAwLCAwLCAwLCAwLCAwLCAzMDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAzMDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDMxMSwgMzEyLCAwLCAwLCAwLCAwLCAwLCAzMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTYsIDAsIDAsIDAsIDAsIDAsIDMxNywgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMywgMCwgMCwgMCwgMCwgMCwgMCwgMzI0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMjgsIDAsIDAsIDAsIDAsIDAsIDMyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAwLCAwLCAwLCAwLCAwLCAzMzQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDMzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzM2LCAzMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDMsIDAsIDAsIDAsIDAsIDAsIDM0NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzQ1LCAzNDYsIDAsIDAsIDAsIDAsIDAsIDM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNDksIDAsIDAsIDAsIDAsIDAsIDAsIDM1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzNTIsIDAsIDAsIDAsIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgMCwgMzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAzNTUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM1NiwgMCwgMCwgMCwgMCwgMCwgMzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNTgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYwLCAwLCAwLCAwLCAwLCAwLCAzNjEsIDM2MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzYzLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzY2LCAwLCAwLCAwLCAwLCAwLCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2OCwgMCwgMCwgMCwgMCwgMCwgMzY5LCAKLSAgICAzNzAsIDAsIDAsIDAsIDAsIDAsIDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc1LCAwLCAwLCAzNzYsIDAsIDAsIDAsIDM3NywgMCwgMCwgCi0gICAgMzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM4MCwgMCwgMCwgMCwgMCwgMCwgMzgxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzODIsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MywgMCwgMCwgMCwgMCwgMCwgMCwgMzg0LCAwLCAwLCAKLSAgICAzODUsIDAsIDAsIDM4NiwgMCwgMCwgMCwgMzg3LCAwLCAwLCAzODgsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzkwLCAwLCAwLCAwLCAwLCAwLCAzOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQsIDAsIDAsIDM5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzk2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk5LCAwLCAwLCA0MDAsIDAsIDAsIAotICAgIDAsIDQwMSwgMCwgMCwgNDAyLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDA1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDA4LCAwLCAwLCA0MDksIDAsIDAsIDQxMCwgMCwgMCwgMCwgNDExLCAwLCAwLCA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQxMywgMCwgMCwgMCwgMCwgMCwgMCwgNDE0LCAwLCAwLCAwLCAwLCAwLCA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDE3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MTgsIDAsIDAsIDQxOSwgMCwgMCwgNDIwLCAwLCAwLCAwLCAKLSAgICA0MjEsIDAsIDAsIDQyMiwgMCwgMCwgNDIzLCAwLCAwLCAwLCA0MjQsIDAsIDAsIDQyNSwgMCwgMCwgMCwgNDI2LCAwLCAwLCAKLSAgICA0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDQyOCwgMCwgMCwgMCwgMCwgMCwgNDI5LCAwLCAwLCAwLCAwLCAwLCAwLCA0MzAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQzMSwgMCwgMCwgNDMyLCAwLCAwLCAwLCA0MzMsIDAsIDAsIDQzNCwgMCwgMCwgNDM1LCAwLCAwLCAKLSAgICAwLCA0MzYsIDAsIDAsIDQzNywgMCwgMCwgMCwgNDM4LCAwLCAwLCA0MzksIDAsIDAsIDQ0MCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDQxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MywgMCwgMCwgMCwgMCwgMCwgNDQ0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0NiwgMCwgMCwgNDQ3LCAwLCAwLCAwLCA0NDgsIDAsIDAsIAotICAgIDQ0OSwgMCwgMCwgNDUwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDUzLCAwLCAwLCAwLCAwLCAwLCA0NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDU2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTcsIDAsIDAsIDAsIDAsIDAsIDQ1OCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NjAsIDAsIDAsIDQ2MSwgMCwgMCwgMCwgNDYyLCAwLCAwLCAwLCAwLCAwLCA0NjMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ2NCwgMCwgMCwgNDY1LCAwLCAwLCAwLCA0NjYsIDAsIDAsIDAsIDAsIDAsIDQ2NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDY4LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MCwgMCwgMCwgMCwgMCwgMCwgNDcxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgMCwgMCwgNDc0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDc3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NzgsIDAsIDAsIDAsIDAsIDAsIDQ3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MiwgMCwgMCwgMCwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NSwgMCwgMCwgMCwgMCwgMCwgMCwgNDg2LCAwLCAwLCAwLCAwLCAwLCA0ODcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg5LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ5MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDk4LCAwLCAwLCAwLCAwLCAwLCA0OTksIDAsIDAsIDAsIDAsIDAsIDAsIDUwMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTAxLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDIsIDAsIDAsIDAsIDAsIDAsIDUwMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTA0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTEwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTEzLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNSwgMCwgMCwgMCwgMCwgMCwgNTE2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDUxOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNTIyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MjMsIDAsIDAsIDAsIDAsIDAsIDUyNCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNywgMCwgMCwgMCwgMCwgMCwgNTI4LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUzMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMxLCAwLCAwLCAwLCAwLCAwLCA1MzIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDUzMywgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDUzNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTM3LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUzOSwgMCwgMCwgMCwgMCwgMCwgNTQwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCA1NDcsIDAsIDAsIDAsIDAsIDAsIDU0OCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MSwgMCwgMCwgMCwgMCwgMCwgNTUyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMCwgMCwgMCwgMTEsIDAsIDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMTQsIAorICAgIDE1LCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMSwgMzIsIDMzLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgCisgICAgNTAsIDAsIDUxLCA1MiwgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCA1NSwgNTYsIDU3LCA1OCwgNTksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDYwLCA2MSwgMCwgMCwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzLCA2NCwgNjUsIDAsIAorICAgIDY2LCA2NywgNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3NiwgMCwgNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OSwgMCwgODAsIDgxLCA4MiwgCisgICAgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA4NSwgODYsIDAsIDg3LCA4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODksIDkwLCAwLCA5MSwgOTIsIDkzLCAwLCAwLCAwLCAwLCAwLCAwLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMSwgMCwgMCwgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDMsIAorICAgIDEwNCwgMCwgMCwgMTA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNywgMTA4LCAxMDksIDAsIDExMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExLCAxMTIsIAorICAgIDAsIDExMywgMTE0LCAwLCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMiwgMCwgMCwgMTIzLCAwLCAxMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNSwgCisgICAgMTI2LCAxMjcsIDEyOCwgMCwgMTI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMSwgMTMyLCAxMzMsIAorICAgIDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMCwgCisgICAgMTQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYyLCAKKyAgICAwLCAxNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NCwgMCwgMCwgMTY1LCAxNjYsIDE2NywgMCwgMTY4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNjksIDAsIDAsIDE3MCwgMTcxLCAxNzIsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTc0LCAxNzUsIDAsIDAsIDE3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc3LCAxNzgsIDE3OSwgMTgwLCAwLCAxODEsIAorICAgIDE4MiwgMTgzLCAwLCAwLCAwLCAwLCAwLCAwLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMCwgMTg5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOTAsIDE5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTkyLCAxOTMsIDE5NCwgCisgICAgMTk1LCAxOTYsIDE5NywgMTk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTksIDIwMCwgMjAxLCAwLCAyMDIsIDIwMywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcsIDAsIDAsIDAsIAorICAgIDIxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAwLCAyMjMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI1LCAyMjYsIDIyNywgMCwgCisgICAgMjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjksIDIzMCwgMjMxLCAwLCAyMzIsIDAsIDIzMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjM0LCAyMzUsIDAsIDAsIDAsIDAsIDAsIDIzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzgsIDIzOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NSwgMjQ2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI0OCwgMjQ5LCAyNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MSwgMjUyLCAyNTMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTYsIDI1NywgMCwgMjU4LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNTksIDI2MCwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2NiwgMjY3LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwLCAyNzEsIDI3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjczLCAyNzQsIDI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3OCwgMjc5LCAKKyAgICAwLCAyODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgMjgyLCAyODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI4NCwgMjg1LCAyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg4LCAyODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMzAzLCAwLCAwLCAzMDQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDMwNSwgMzA2LCAzMDcsIDAsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAKKyAgICAzMTAsIDMxMSwgMCwgMzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTMsIDAsIDMxNCwgMCwgMzE1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDMyNiwgMzI3LCAwLCAzMjgsIDMyOSwgMCwgMCwgMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzEsIDAsIAorICAgIDAsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAzMzQsIDAsIDAsIDMzNSwgMCwgMCwgMCwgMzM2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAzMzcsIDMzOCwgMzM5LCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgCisgICAgMzQyLCAzNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzQ1LCAzNDYsIDM0NywgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDksIDAsIDAsIDAsIAorICAgIDM1MCwgMCwgMCwgMzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgMzU0LCAzNTUsIDM1NiwgMCwgMzU3LCAwLCAKKyAgICAwLCAzNTgsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMzYwLCAwLCAwLCAwLCAzNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM2MiwgMCwgMCwgMzYzLCAzNjQsIDAsIDAsIDM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY2LCAzNjcsIDAsIDM2OCwgMCwgMCwgCisgICAgMCwgMzY5LCAwLCAwLCAwLCAwLCAwLCAzNzAsIDM3MSwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAwLCAwLCAKKyAgICAzNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM4MCwgMCwgMCwgMzgxLCAwLCAwLCAwLCAzODIsIDAsIDAsIDAsIDAsIDAsIDM4MywgCisgICAgMzg0LCAwLCAwLCAwLCAwLCAwLCAzODUsIDAsIDAsIDAsIDAsIDAsIDAsIDM4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMzg3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODgsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OSwgMzkwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDM5MiwgMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM5NSwgMzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzk5LCA0MDAsIDQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNCwgCisgICAgNDA1LCA0MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMCwgNDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMywgNDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE3LCA0MTgsIDQxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyMiwgNDIzLCA0MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ1NSwgNDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjksIDAsIAorICAgIDQ3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgNDc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3OSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDUsIAorICAgIDUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgMCwgMCwgMCwgMCwgNTEwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxMiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUxOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNywgMCwgMCwgMCwgMCwgMCwgMCwgNTI4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MjksIDAsIDAsIDAsIDAsIDAsIDAsIDUzMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MzIsIDUzMywgMCwgMCwgMCwgMCwgMCwgNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUzNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzOSwgNTQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NSwgMCwgMCwgMCwgMCwgMCwgNTQ2LCAKKyAgICA1NDcsIDAsIDAsIDAsIDAsIDAsIDU0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU1MSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTU4LCAwLCAwLCAwLCAwLCAwLCA1NTksIDAsIDAsIDAsIDAsIDAsIDAsIDU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTYxLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU3MiwgMCwgMCwgMCwgMCwgMCwgNTczLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTc2LCAwLCAwLCAwLCAwLCAwLCA1NzcsIDU3OCwgMCwgMCwgMCwgMCwgMCwgNTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5NiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDYwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA2MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwOCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDYxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjIxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM5LCA2NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDY1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYwLCA2NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY2NSwgNjY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDY2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3NCwgCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY29tcF9kYXRhW10gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNCwgMCwgMCwgMCwgMCwgMCwgODgwMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNSwgMCwgMCwgMTkyLCAxOTMsIDE5NCwgMTk1LCAyNTYsIDI1OCwgNTUwLCAKLSAgICAxOTYsIDc4NDIsIDE5NywgMCwgNDYxLCA1MTIsIDUxNCwgMCwgMCwgMCwgNzg0MCwgMCwgNzY4MCwgMCwgMCwgMjYwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjgyLCAwLCAwLCA3Njg0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3Njg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDI2NCwgMCwgMCwgMCwgMjY2LCAKLSAgICAwLCAwLCAwLCAwLCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzY5MCwgCi0gICAgMCwgMCwgMCwgMCwgMjcwLCAwLCAwLCAwLCAwLCAwLCA3NjkyLCAwLCAwLCAwLCA3Njk2LCAwLCA3Njk4LCAwLCAwLCA3Njk0LCAKLSAgICAwLCAwLCAwLCAyMDAsIDIwMSwgMjAyLCA3ODY4LCAyNzQsIDI3NiwgMjc4LCAyMDMsIDc4NjYsIDAsIDAsIDI4MiwgNTE2LCAKLSAgICA1MTgsIDAsIDAsIDAsIDc4NjQsIDAsIDAsIDAsIDU1MiwgMjgwLCA3NzA0LCAwLCA3NzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDAsIDI4NCwgMCwgNzcxMiwgMjg2LCAyODgsIDAsIAotICAgIDAsIDAsIDAsIDQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyOTIsIDAsIDAsIDAsIDc3MTQsIDc3MTgsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgNzcxNiwgMCwgMCwgMCwgCi0gICAgNzcyMCwgMCwgMCwgNzcyMiwgMCwgMCwgMCwgMCwgMCwgMjA0LCAyMDUsIDIwNiwgMjk2LCAyOTgsIDMwMCwgMzA0LCAyMDcsIAotICAgIDc4ODAsIDAsIDAsIDQ2MywgNTIwLCA1MjIsIDAsIDAsIDAsIDc4ODIsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgNzcyNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI4LCAwLCA0ODgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc3MzAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgNzczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcsIDAsIDAsIDAsIDAsIDAsIDc3MzQsIDAsIAotICAgIDAsIDAsIDMxNSwgMCwgNzc0MCwgMCwgMCwgNzczOCwgMCwgMCwgMCwgMCwgNzc0MiwgMCwgMCwgMCwgMCwgNzc0NCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc0NiwgMCwgMCwgMCwgMCwgNTA0LCAzMjMsIDAsIDIwOSwgMCwgMCwgNzc0OCwgCi0gICAgMCwgMCwgMCwgMCwgMzI3LCAwLCAwLCAwLCAwLCAwLCA3NzUwLCAwLCAwLCAwLCAzMjUsIDAsIDc3NTQsIDAsIDAsIDc3NTIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMCwgMjExLCAyMTIsIDIxMywgMzMyLCAzMzQsIDU1OCwgMjE0LCAKLSAgICA3ODg2LCAwLCAzMzYsIDQ2NSwgNTI0LCA1MjYsIDAsIDAsIDQxNiwgNzg4NCwgMCwgMCwgMCwgMCwgNDkwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3NzY0LCAwLCAwLCAwLCAwLCA3NzY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDAsIDAsIDAsIAotICAgIDAsIDAsIDc3NjgsIDAsIDAsIDAsIDAsIDM0NCwgNTI4LCA1MzAsIDAsIDAsIDAsIDc3NzAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgCi0gICAgMCwgMCwgNzc3NCwgMCwgMCwgMCwgMCwgMzQ2LCAzNDgsIDAsIDAsIDAsIDc3NzYsIDAsIDAsIDAsIDAsIDM1MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzc3OCwgMCwgMCwgNTM2LCAzNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODYsIDAsIDAsIDAsIDAsIDM1NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNzc4OCwgMCwgMCwgNTM4LCAzNTQsIDAsIDc3OTIsIDAsIDAsIDc3OTAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDIxNywgMjE4LCAyMTksIDM2MCwgMzYyLCAzNjQsIDAsIDIyMCwgNzkxMCwgMzY2LCAzNjgsIAotICAgIDQ2NywgNTMyLCA1MzQsIDAsIDAsIDQzMSwgNzkwOCwgNzc5NCwgMCwgMCwgMCwgMzcwLCA3Nzk4LCAwLCA3Nzk2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3ODA0LCAwLCAwLCAwLCAwLCAwLCA3ODA2LCAwLCAwLCAwLCAwLCA3ODA4LCA3ODEwLCAzNzIsIDAsIAotICAgIDAsIDAsIDc4MTQsIDc4MTIsIDAsIDc4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MTgsIDc4MjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc5MjIsIDIyMSwgMzc0LCA3OTI4LCA1NjIsIDAsIDc4MjIsIDM3NiwgNzkyNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzkyNCwgMCwgMCwgMCwgMCwgMCwgMzc3LCA3ODI0LCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIAotICAgIDM4MSwgMCwgMCwgMCwgMCwgMCwgNzgyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyOCwgMCwgMCwgMCwgMjI0LCAKLSAgICAyMjUsIDIyNiwgMjI3LCAyNTcsIDI1OSwgNTUxLCAyMjgsIDc4NDMsIDIyOSwgMCwgNDYyLCA1MTMsIDUxNSwgMCwgMCwgMCwgCi0gICAgNzg0MSwgMCwgNzY4MSwgMCwgMCwgMjYxLCAwLCAwLCAwLCAwLCAwLCA3NjgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA3Njg1LCA3Njg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjMsIDI2NSwgMCwgMCwgMCwgCi0gICAgMjY3LCAwLCAwLCAwLCAwLCAyNjksIDAsIDIzMSwgMCwgMCwgMCwgMCwgMCwgMCwgNzY5MSwgMCwgMCwgMCwgMCwgMjcxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NjkzLCAwLCAwLCAwLCA3Njk3LCAwLCA3Njk5LCAwLCAwLCA3Njk1LCAwLCAwLCAwLCAyMzIsIDIzMywgCi0gICAgMjM0LCA3ODY5LCAyNzUsIDI3NywgMjc5LCAyMzUsIDc4NjcsIDAsIDAsIDI4MywgNTE3LCA1MTksIDAsIDAsIDAsIDc4NjUsIAotICAgIDAsIDAsIDAsIDU1MywgMjgxLCA3NzA1LCAwLCA3NzA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzExLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDI4NSwgMCwgNzcxMywgMjg3LCAyODksIDAsIDAsIDAsIDAsIDQ4NywgMCwgCi0gICAgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTMsIDAsIDAsIDAsIDc3MTUsIDc3MTksIDAsIDAsIDAsIAotICAgIDU0MywgMCwgMCwgMCwgMCwgMCwgNzcxNywgMCwgMCwgMCwgNzcyMSwgMCwgMCwgNzcyMywgMCwgNzgzMCwgMCwgMCwgMCwgCi0gICAgMjM2LCAyMzcsIDIzOCwgMjk3LCAyOTksIDMwMSwgMCwgMjM5LCA3ODgxLCAwLCAwLCA0NjQsIDUyMSwgNTIzLCAwLCAwLCAwLCAKLSAgICA3ODgzLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDc3MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDMwOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDc3MzEsIDAsIDAsIDAsIDMxMSwgMCwgMCwgMCwgMCwgNzczMywgMCwgMCwgMCwgCi0gICAgMCwgMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDc3MzUsIDAsIDAsIDAsIAotICAgIDMxNiwgMCwgNzc0MSwgMCwgMCwgNzczOSwgMCwgMCwgMCwgMCwgNzc0MywgMCwgMCwgMCwgMCwgNzc0NSwgMCwgMCwgNzc0NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA1LCAzMjQsIDAsIDI0MSwgMCwgMCwgNzc0OSwgMCwgMCwgCi0gICAgMCwgMCwgMzI4LCAwLCAwLCAwLCAwLCAwLCA3NzUxLCAwLCAwLCAwLCAzMjYsIDAsIDc3NTUsIDAsIDAsIDc3NTMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMzMzLCAzMzUsIDU1OSwgMjQ2LCA3ODg3LCAKLSAgICAwLCAzMzcsIDQ2NiwgNTI1LCA1MjcsIDAsIDAsIDQxNywgNzg4NSwgMCwgMCwgMCwgMCwgNDkxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NzY1LCAwLCAwLCAwLCAwLCA3NzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDEsIDAsIDAsIDAsIDAsIAotICAgIDc3NjksIDAsIDAsIDAsIDAsIDM0NSwgNTI5LCA1MzEsIDAsIDAsIDAsIDc3NzEsIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgCi0gICAgNzc3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ3LCAzNDksIDAsIDAsIDAsIDc3NzcsIDAsIDAsIAotICAgIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgNzc3OSwgMCwgMCwgNTM3LCAzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODcsIAotICAgIDc4MzEsIDAsIDAsIDAsIDM1NywgMCwgMCwgMCwgMCwgMCwgNzc4OSwgMCwgMCwgNTM5LCAzNTUsIDAsIDc3OTMsIDAsIDAsIAotICAgIDc3OTEsIDAsIDAsIDAsIDI0OSwgMjUwLCAyNTEsIDM2MSwgMzYzLCAzNjUsIDAsIDI1MiwgNzkxMSwgMzY3LCAzNjksIDQ2OCwgCi0gICAgNTMzLCA1MzUsIDAsIDAsIDQzMiwgNzkwOSwgNzc5NSwgMCwgMCwgMCwgMzcxLCA3Nzk5LCAwLCA3Nzk3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3ODA1LCAwLCAwLCAwLCAwLCAwLCA3ODA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3ODA5LCA3ODExLCAzNzMsIDAsIDAsIDAsIDc4MTUsIDc4MTMsIDAsIDc4MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MTcsIAotICAgIDAsIDAsIDc4MTksIDc4MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjMsIDI1MywgMzc1LCA3OTI5LCA1NjMsIDAsIDc4MjMsIAotICAgIDI1NSwgNzkyNywgNzgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkyNSwgMCwgMCwgMCwgMCwgMCwgMzc4LCA3ODI1LCAwLCAKLSAgICAwLCAwLCAzODAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgNzgyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzgyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE3MywgOTAxLCAwLCAwLCA4MTI5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3ODQ2LCA3ODQ0LCAwLCA3ODUwLCAwLCAwLCAwLCAwLCA3ODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NzgsIDAsIDAsIDUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA4LCAwLCAKLSAgICAwLCA0ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2ODgsIDAsIDAsIDAsIDAsIDc4NzIsIDc4NzAsIDAsIAotICAgIDc4NzYsIDAsIDAsIDAsIDAsIDc4NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4OTAsIDc4ODgsIDAsIDc4OTQsIDAsIDAsIDAsIDAsIDc4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3NTYsIDAsIDAsIDU1NiwgMCwgMCwgNzc1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAKLSAgICA1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NSwgNDcxLCAwLCAwLCA0NjksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg0NywgNzg0NSwgMCwgNzg1MSwgMCwgMCwgMCwgMCwgCi0gICAgNzg0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Njg5LCAwLCAwLCAKLSAgICAwLCAwLCA3ODczLCA3ODcxLCAwLCA3ODc3LCAwLCAwLCAwLCAwLCA3ODc1LCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI3LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODkxLCA3ODg5LCAwLCA3ODk1LCAwLCAwLCAwLCAwLCA3ODkzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3NzU3LCAwLCAwLCA1NTcsIDAsIDAsIDc3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDU1NSwgMCwgMCwgNTExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzYsIDQ3MiwgMCwgMCwgCi0gICAgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NTYsIDc4NTQsIDAsIAotICAgIDc4NjAsIDAsIDAsIDAsIDAsIDc4NTgsIDAsIDAsIDAsIDAsIDAsIDc4NTcsIDc4NTUsIDAsIDc4NjEsIDAsIDAsIDAsIDAsIAotICAgIDc4NTksIDAsIDAsIDAsIDAsIDAsIDc3MDAsIDc3MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3MDEsIDc3MDMsIDAsIDAsIDAsIDAsIDc3NjAsIDc3NjIsIDAsIDAsIDAsIDAsIDc3NjEsIDc3NjMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODAsIDAsIDAsIDAsIDAsIDAsIDc3ODEsIDAsIDAsIDAsIDAsIDAsIDc3ODIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc3ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4MDEsIDAsIDAsIDAsIDc4MDIsIDAsIDAsIDAsIDAsIDAsIDc4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDAsIDc4OTgsIDAsIDc5MDQsIDAsIDAsIAotICAgIDAsIDAsIDc5MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDYsIDAsIDAsIDAsIDAsIDc5MDEsIDc4OTksIDAsIAotICAgIDc5MDUsIDAsIDAsIDAsIDAsIDc5MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDcsIDAsIDAsIDAsIDAsIDc5MTQsIAotICAgIDc5MTIsIDAsIDc5MTgsIDAsIDAsIDAsIDAsIDc5MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjAsIDAsIDAsIDAsIAotICAgIDAsIDc5MTUsIDc5MTMsIDAsIDc5MTksIDAsIDAsIDAsIDAsIDc5MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OTMsIDAsIDAsIDAsIDAsIDAsIDQ4MCwgMCwgMCwgMCwgMCwgMCwgNDgxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3NzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzA5LCAwLCAwLCAwLCAwLCA1NjAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCA4MTIyLCAKLSAgICA5MDIsIDAsIDAsIDgxMjEsIDgxMjAsIDc5NDQsIDc5NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgxMjQsIDgxMzYsIDkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk2MCwgNzk2MSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODEzOCwgOTA1LCAwLCAwLCAwLCAwLCA3OTc2LCA3OTc3LCAwLCAwLCAwLCAwLCAwLCA4MTQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MTU0LCA5MDYsIDAsIDAsIDgxNTMsIDgxNTIsIDAsIDkzOCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzk5MiwgNzk5MywgMCwgMCwgMCwgMCwgMCwgMCwgODE4NCwgOTA4LCAwLCAwLCAwLCAwLCA4MDA4LCA4MDA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcyLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcwLCA5MTAsIDAsIDAsIAotICAgIDgxNjksIDgxNjgsIDAsIDkzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgODE4NiwgCi0gICAgOTExLCAwLCAwLCAwLCAwLCA4MDQwLCA4MDQxLCAwLCAwLCAwLCAwLCAwLCA4MTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MTE2LCAwLCAwLCAwLCAwLCAwLCA4MTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDQ4LCAKLSAgICA5NDAsIDAsIDAsIDgxMTMsIDgxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MzYsIDc5MzcsIDAsIDAsIDAsIDAsIAotICAgIDgxMTgsIDgxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNTAsIDk0MSwgMCwgMCwgMCwgMCwgNzk1MiwgNzk1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODA1MiwgOTQyLCAwLCAwLCAwLCAwLCA3OTY4LCA3OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4MTM0LCA4MTMxLCA4MDU0LCA5NDMsIDAsIDAsIDgxNDUsIDgxNDQsIDAsIDk3MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzk4NCwgNzk4NSwgMCwgMCwgMCwgMCwgODE1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA1NiwgOTcyLCAKLSAgICAwLCAwLCAwLCAwLCA4MDAwLCA4MDAxLCAwLCAwLCAwLCAwLCA4MTY0LCA4MTY1LCAwLCAwLCAwLCAwLCAwLCAwLCA4MDU4LCAKLSAgICA5NzMsIDAsIDAsIDgxNjEsIDgxNjAsIDAsIDk3MSwgMCwgMCwgMCwgMCwgMCwgMCwgODAxNiwgODAxNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE2NiwgMCwgODA2MCwgOTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA4MDMyLCA4MDMzLCAwLCAwLCAwLCAwLCA4MTgyLCA4MTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTQ2LCAKLSAgICA5MTIsIDAsIDAsIDgxNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNjIsIDk0NCwgMCwgMCwgODE2NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE4MCwgMCwgOTc5LCAwLCAwLCAwLCAwLCAwLCA5ODAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEwMzEsIDAsIDAsIDAsIDEyMzIsIDAsIDEyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcsIDAsIAotICAgIDAsIDAsIDAsIDEwMjQsIDAsIDAsIDAsIDAsIDEyMzgsIDAsIDEwMjUsIDAsIDAsIDAsIDEyMTcsIDAsIDEyNDQsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzcsIDAsIDAsIDAsIDEyNTAsIDEwNDksIDAsIDEyNTIsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTQsIDAsIDAsIAotICAgIDEyNjIsIDEwMzgsIDAsIDEyNjQsIDAsIDAsIDEyNjYsIDAsIDAsIDEyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyNzIsIDAsIDAsIDAsIDAsIDAsIDEyNjAsIDAsIDAsIDAsIDEyMzMsIDAsIDEyMzUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDExMDcsIDAsIDAsIDAsIDAsIDExMDQsIDAsIDAsIDAsIDAsIDEyMzksIDAsIDExMDUsIDAsIDAsIDAsIAotICAgIDEyMTgsIDAsIDEyNDUsIDAsIDAsIDAsIDAsIDAsIDEyNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTcsIDAsIDAsIDAsIAotICAgIDEyNTEsIDEwODEsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNTUsIDAsIDAsIDEyNjMsIDExMTgsIDAsIDEyNjUsIDAsIDAsIDEyNjcsIDAsIDAsIDEyNjksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzMsIDAsIDAsIDAsIDAsIDAsIDEyNjEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDIsIDAsIDAsIDAsIDAsIDAsIDExNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDIsIDAsIDAsIDAsIDAsIDAsIDEyNDMsIDAsIDAsIDAsIDAsIDAsIDEyNTgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTksIDAsIDAsIDAsIDAsIDE1NzAsIDE1NzEsIDE1NzMsIDAsIAotICAgIDAsIDAsIDAsIDE1NzIsIDAsIDAsIDAsIDAsIDAsIDE1NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE3MzAsIDAsIDAsIDAsIDAsIDAsIDE3NDcsIDAsIDAsIDAsIDAsIDAsIDE3MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIzNDUsIDAsIDAsIDAsIDAsIDAsIDIzNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNTYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI1MDcsIDI1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDI4OTEsIDI4ODgsIDI4OTIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI5NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMTgsIDMwMjAsIDAsIAotICAgIDAsIDAsIDAsIDMwMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNjQsIDAsIAotICAgIDAsIDAsIDAsIDMyNzQsIDMyNzEsIDMyNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNzUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDIsIDM0MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NDYsIDM1NDgsIDM1NTAsIDAsIDAsIDAsIDM1NDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDY5MTgsIDAsIDAsIDAsIDAsIDAsIDY5MjAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5MjIsIDAsIDAsIDAsIDAsIDAsIDY5MjQsIDAsIDAsIDAsIDAsIDAsIDY5MjYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDY5MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY5NzMsIDAsIDAsIDAsIDAsIDAsIDY5NzYsIDAsIDAsIDAsIDAsIDAsIDY5NzcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzksIDAsIDAsIDAsIDAsIDAsIDAsIDc3MzYsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3MzcsIDAsIDAsIDAsIDAsIDAsIDc3NzIsIDAsIDAsIDAsIDAsIDAsIDc3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODUsIDAsIDc4NTIsIDAsIDAsIDc4NjIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NTMsIDAsIDAsIDc4NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc4NzgsIDAsIDAsIDAsIDAsIDAsIDc4NzksIDAsIDAsIDAsIDAsIDAsIDc4OTYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4OTcsIDAsIDAsIDAsIDc5MzgsIDc5NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5NDIsIDgwNjQsIDc5MzksIDc5NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDMsIDgwNjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgwNjYsIDAsIDAsIDAsIDAsIDAsIDgwNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwNjgsIDAsIDAsIDAsIDAsIDAsIDgwNjksIDAsIDAsIDAsIDAsIDAsIDgwNzAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDYsIDc5NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc5NTAsIDgwNzIsIDc5NDcsIDc5NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTEsIDgwNzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwNzQsIDAsIDAsIDAsIDAsIDAsIDgwNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDgwNzYsIDAsIDAsIDAsIDAsIDAsIDgwNzcsIDAsIDAsIDAsIDAsIDAsIDgwNzgsIDAsIDAsIDAsIDAsIDAsIDgwNzksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTQsIDc5NTYsIDAsIDAsIDAsIDAsIDc5NTUsIDc5NTcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NjIsIDc5NjQsIDAsIDAsIDAsIDAsIDc5NjMsIDc5NjUsIDAsIDAsIDAsIDAsIAotICAgIDc5NzAsIDc5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzQsIDgwODAsIDc5NzEsIDc5NzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzUsIDgwODEsIDAsIDAsIDAsIDAsIDAsIDgwODIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwODQsIDAsIDAsIDAsIDAsIDAsIDgwODUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgwODYsIDAsIDAsIDAsIDAsIDAsIDgwODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzgsIAotICAgIDc5ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODIsIDgwODgsIDc5NzksIDc5ODEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODMsIDgwODksIDAsIDAsIDAsIDAsIDAsIDgwOTAsIDAsIDAsIDAsIDAsIDAsIDgwOTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTIsIDAsIDAsIDAsIDAsIDAsIDgwOTMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwOTQsIDAsIDAsIDAsIDAsIDAsIDgwOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODYsIDc5ODgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTAsIDAsIDc5ODcsIDc5ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc5OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTQsIDc5OTYsIDAsIDAsIDc5OTgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTUsIDc5OTcsIDAsIDAsIDc5OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMDIsIDgwMDQsIDAsIDAsIDAsIDAsIDgwMDMsIDgwMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMTAsIDgwMTIsIDAsIDAsIDAsIDAsIDgwMTEsIDgwMTMsIDAsIDAsIDAsIDAsIDgwMTgsIDgwMjAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjIsIDAsIDgwMTksIDgwMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjcsIDgwMjksIDAsIDAsIDgwMzEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgwMzQsIDgwMzYsIDAsIDAsIDgwMzgsIDgwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMzUsIAotICAgIDgwMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMzksIDgwOTcsIDAsIDAsIDAsIDAsIDAsIDgwOTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgwOTksIDAsIDAsIDAsIDAsIDAsIDgxMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMDEsIDAsIDAsIDAsIDAsIDAsIDgxMDIsIDAsIDAsIDAsIDAsIDAsIDgxMDMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgwNDIsIDgwNDQsIDAsIDAsIDgwNDYsIDgxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNDMsIDgwNDUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNDcsIDgxMDUsIDAsIDAsIDAsIDAsIDAsIDgxMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMDcsIDAsIDAsIDAsIDAsIDAsIDgxMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgxMDksIDAsIDAsIDAsIDAsIDAsIDgxMTAsIDAsIDAsIDAsIDAsIDAsIDgxMTEsIDAsIDAsIDAsIDAsIDAsIDgxMTQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMzAsIDAsIDAsIDAsIDAsIDAsIDgxNzgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNDEsIDgxNDIsIDAsIDAsIDgxNDMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMzUsIDAsIDAsIDAsIDAsIDAsIDgxODMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgxNTcsIDgxNTgsIDAsIDAsIDgxNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg2MDIsIDAsIDAsIDAsIDAsIDAsIDg2MDMsIDAsIDAsIDAsIDAsIDAsIDg2MjIsIDAsIDAsIDAsIDAsIDAsIDg2NTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2NTUsIDAsIDAsIDAsIDAsIDAsIDg2NTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg3MDgsIDAsIDAsIDAsIDAsIDAsIDg3MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg3MTYsIDAsIDAsIDAsIDAsIDAsIDg3NDAsIDAsIDAsIDAsIDAsIDAsIDg3NDIsIDAsIDAsIDAsIDAsIDAsIDg3NjksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg3NzIsIDAsIDAsIDAsIDAsIDAsIDg3NzUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg3NzcsIDAsIDAsIDAsIDAsIDAsIDg4MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4MDIsIDAsIDAsIDAsIDAsIDAsIDg4MTYsIDAsIDAsIDAsIDAsIDAsIDg4MTcsIDAsIDAsIDAsIDAsIDAsIDg4MjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MjEsIDAsIDAsIDAsIDAsIDAsIDg4MjQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg4MjUsIDAsIDAsIDAsIDAsIDAsIDg4MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4MzMsIDAsIDAsIDAsIDAsIDAsIDg5MjgsIDAsIDAsIDAsIDAsIDAsIDg5MjksIDAsIDAsIDAsIDAsIDAsIDg4MzYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MzcsIDAsIDAsIDAsIDAsIDAsIDg4NDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg4NDEsIDAsIDAsIDAsIDAsIDAsIDg5MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg5MzEsIDAsIDAsIDAsIDAsIDAsIDg4NzYsIDAsIDAsIDAsIDAsIDAsIDg4NzcsIDAsIDAsIDAsIDAsIDAsIDg4NzgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzksIDAsIDAsIDAsIDAsIDAsIDg5MzgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg5MzksIDAsIDAsIDAsIDAsIDAsIDg5NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg5NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDM2LCAwLCAwLCAwLCAwLCAwLCAxMjM2NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIzNjYsIDAsIDAsIDAsIDAsIDAsIDEyMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjM3MCwgMCwgMCwgMCwgMCwgMCwgMTIzNzIsIDAsIDAsIDAsIDAsIDAsIDEyMzc0LCAwLCAwLCAwLCAwLCAwLCAxMjM3NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzgsIDAsIDAsIDAsIDAsIDAsIDEyMzgwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjM4MiwgMCwgMCwgMCwgMCwgMCwgMTIzODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyMzg2LCAwLCAwLCAwLCAwLCAwLCAxMjM4OSwgMCwgMCwgMCwgMCwgMCwgMTIzOTEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQwMCwgMTI0MDEsIDAsIDAsIDAsIDAsIAotICAgIDEyNDAzLCAxMjQwNCwgMCwgMCwgMCwgMCwgMTI0MDYsIDEyNDA3LCAwLCAwLCAwLCAwLCAxMjQwOSwgMTI0MTAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEyLCAxMjQxMywgMCwgMCwgMCwgMCwgMTI0NDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNTMyLCAwLCAwLCAwLCAwLCAwLCAxMjQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0NjIsIDAsIDAsIDAsIDAsIDAsIDEyNDY0LCAwLCAwLCAwLCAwLCAwLCAxMjQ2NiwgMCwgMCwgMCwgMCwgMCwgMTI0NjgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDcwLCAwLCAwLCAwLCAwLCAwLCAxMjQ3MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI0NzQsIDAsIDAsIDAsIDAsIDAsIDEyNDc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjQ3OCwgMCwgMCwgMCwgMCwgMCwgMTI0ODAsIDAsIDAsIDAsIDAsIDAsIDEyNDgyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQ4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0ODcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDg5LCAwLCAwLCAwLCAwLCAwLCAxMjQ5NiwgMTI0OTcsIDAsIDAsIDAsIDAsIDEyNDk5LCAxMjUwMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1MDIsIDEyNTAzLCAwLCAwLCAwLCAwLCAxMjUwNSwgMTI1MDYsIDAsIDAsIDAsIAotICAgIDAsIDEyNTA4LCAxMjUwOSwgMCwgMCwgMCwgMCwgMTI1MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNTM2LCAwLCAwLCAwLCAwLCAwLCAxMjUzNywgMCwgMCwgMCwgMCwgMCwgMTI1MzgsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNTQyLCAwLCAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29tcF9kYXRhW10gPSB7CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNCwgMCwgMCwgODgwMCwgMCwgMCwgODgxNSwgMCwgMCwgMCwgMTkyLCAxOTMsIAorICAgIDE5NCwgMTk1LCAyNTYsIDI1OCwgNTUwLCAxOTYsIDc4NDIsIDE5NywgMCwgNDYxLCA1MTIsIDUxNCwgMCwgMCwgMCwgNzg0MCwgCisgICAgMCwgNzY4MCwgMCwgMCwgMjYwLCAwLCAwLCA3NjgyLCAwLCAwLCA3Njg0LCAwLCAwLCAwLCAwLCA3Njg2LCAwLCAyNjIsIAorICAgIDI2NCwgMCwgMCwgMCwgMjY2LCAwLCAwLCAwLCAwLCAyNjgsIDAsIDE5OSwgMCwgMCwgMCwgNzY5MCwgMCwgMCwgMCwgMCwgCisgICAgMjcwLCAwLCAwLCAwLCAwLCAwLCA3NjkyLCAwLCAwLCAwLCA3Njk2LCAwLCA3Njk4LCAwLCAwLCA3Njk0LCAwLCAwLCAwLCAwLCAKKyAgICAyMDAsIDIwMSwgMjAyLCA3ODY4LCAyNzQsIDI3NiwgMjc4LCAyMDMsIDc4NjYsIDAsIDAsIDI4MiwgNTE2LCA1MTgsIDAsIDAsIAorICAgIDAsIDc4NjQsIDAsIDAsIDAsIDU1MiwgMjgwLCA3NzA0LCAwLCA3NzA2LCAwLCAwLCAwLCA3NzEwLCAwLCA1MDAsIDI4NCwgMCwgCisgICAgNzcxMiwgMjg2LCAyODgsIDAsIDAsIDAsIDAsIDQ4NiwgMCwgMjkwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDc3MTQsIAorICAgIDc3MTgsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgNzcxNiwgMCwgMCwgMCwgNzcyMCwgMCwgMCwgNzcyMiwgMCwgMCwgCisgICAgMjA0LCAyMDUsIDIwNiwgMjk2LCAyOTgsIDMwMCwgMzA0LCAyMDcsIDc4ODAsIDAsIDAsIDQ2MywgNTIwLCA1MjIsIDAsIDAsIAorICAgIDAsIDc4ODIsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgNzcyNCwgMCwgMCwgMCwgMzA4LCAwLCA3NzI4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0ODgsIDAsIDc3MzAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgNzczMiwgMCwgMCwgMCwgMCwgMCwgMzEzLCAwLCAKKyAgICAzMTcsIDAsIDAsIDAsIDAsIDAsIDc3MzQsIDAsIDAsIDAsIDMxNSwgMCwgNzc0MCwgMCwgMCwgNzczOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNzc0MiwgMCwgMCwgMCwgMCwgNzc0NCwgMCwgMCwgNzc0NiwgMCwgNTA0LCAzMjMsIDAsIDIwOSwgMCwgMCwgNzc0OCwgCisgICAgMCwgMCwgMCwgMCwgMzI3LCAwLCA3NzUwLCAwLCAwLCAwLCAzMjUsIDAsIDc3NTQsIDAsIDAsIDc3NTIsIDAsIDAsIDAsIDAsIAorICAgIDIxMCwgMjExLCAyMTIsIDIxMywgMzMyLCAzMzQsIDU1OCwgMjE0LCA3ODg2LCAwLCAzMzYsIDQ2NSwgNTI0LCA1MjYsIDAsIAorICAgIDAsIDQxNiwgNzg4NCwgMCwgMCwgMCwgMCwgNDkwLCAwLCAwLCAwLCAwLCAwLCA3NzY0LCA3NzY2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzNDAsIDAsIDAsIDAsIDAsIDc3NjgsIDM0NCwgNTI4LCA1MzAsIDAsIDAsIDAsIDc3NzAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgCisgICAgMCwgMCwgNzc3NCwgMCwgMzQ2LCAzNDgsIDAsIDAsIDAsIDc3NzYsIDAsIDAsIDAsIDAsIDM1MiwgMCwgNzc3OCwgMCwgMCwgCisgICAgNTM2LCAzNTAsIDAsIDAsIDAsIDc3ODYsIDAsIDAsIDAsIDAsIDM1NiwgMCwgNzc4OCwgMCwgMCwgNTM4LCAzNTQsIDAsIAorICAgIDc3OTIsIDAsIDAsIDc3OTAsIDAsIDAsIDAsIDAsIDIxNywgMjE4LCAyMTksIDM2MCwgMzYyLCAzNjQsIDAsIDIyMCwgNzkxMCwgCisgICAgMzY2LCAzNjgsIDQ2NywgNTMyLCA1MzQsIDAsIDAsIDQzMSwgNzkwOCwgNzc5NCwgMCwgMCwgMCwgMzcwLCA3Nzk4LCAwLCAKKyAgICA3Nzk2LCA3ODA0LCAwLCAwLCAwLCAwLCAwLCA3ODA2LCAwLCA3ODA4LCA3ODEwLCAzNzIsIDAsIDAsIDAsIDc4MTQsIDc4MTIsIAorICAgIDAsIDc4MTYsIDAsIDAsIDAsIDc4MTgsIDc4MjAsIDAsIDAsIDAsIDc5MjIsIDIyMSwgMzc0LCA3OTI4LCA1NjIsIDAsIAorICAgIDc4MjIsIDM3NiwgNzkyNiwgMCwgMCwgMCwgMCwgNzkyNCwgMCwgMCwgMzc3LCA3ODI0LCAwLCAwLCAwLCAzNzksIDM4MSwgMCwgCisgICAgMCwgMCwgMCwgMCwgNzgyNiwgMCwgMCwgMCwgMCwgNzgyOCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyNTcsIDI1OSwgNTUxLCAKKyAgICAyMjgsIDc4NDMsIDIyOSwgMCwgNDYyLCA1MTMsIDUxNSwgMCwgMCwgMCwgNzg0MSwgMCwgNzY4MSwgMCwgMCwgMjYxLCAwLCAKKyAgICAwLCA3NjgzLCAwLCAwLCA3Njg1LCAwLCAwLCAwLCAwLCA3Njg3LCAwLCAwLCAwLCAwLCAwLCAyNjMsIDI2NSwgMCwgMCwgMCwgCisgICAgMjY3LCAwLCAwLCAwLCAwLCAyNjksIDAsIDAsIDAsIDAsIDAsIDIzMSwgMCwgMCwgMCwgNzY5MSwgMjcxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3NjkzLCAwLCAwLCAwLCA3Njk3LCAwLCA3Njk5LCAwLCAwLCA3Njk1LCAyMzIsIDIzMywgMjM0LCA3ODY5LCAyNzUsIAorICAgIDI3NywgMjc5LCAyMzUsIDc4NjcsIDAsIDAsIDI4MywgNTE3LCA1MTksIDAsIDAsIDAsIDc4NjUsIDAsIDAsIDAsIDU1MywgCisgICAgMjgxLCA3NzA1LCAwLCA3NzA3LCAwLCAwLCAwLCA3NzExLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDI4NSwgMCwgNzcxMywgMjg3LCAKKyAgICAyODksIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAyOTMsIDAsIDAsIDAsIDc3MTUsIAorICAgIDc3MTksIDAsIDAsIDAsIDU0MywgMCwgMCwgMCwgMCwgMCwgNzcxNywgMCwgMCwgMCwgNzcyMSwgMCwgMCwgNzcyMywgMCwgCisgICAgNzgzMCwgMjM2LCAyMzcsIDIzOCwgMjk3LCAyOTksIDMwMSwgMCwgMjM5LCA3ODgxLCAwLCAwLCA0NjQsIDUyMSwgNTIzLCAwLCAKKyAgICAwLCAwLCA3ODgzLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDc3MjUsIDAsIDAsIDAsIDMwOSwgMCwgMCwgMCwgMCwgNDk2LCAKKyAgICAwLCAwLCAwLCAwLCA3NzI5LCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDc3MzEsIDAsIDAsIDAsIDMxMSwgNzczMywgMCwgMCwgCisgICAgMCwgMCwgMCwgMzE0LCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDc3MzUsIDAsIDAsIDAsIDMxNiwgMCwgNzc0MSwgMCwgMCwgCisgICAgNzczOSwgMCwgNzc0MywgMCwgMCwgMCwgMCwgNzc0NSwgMCwgMCwgNzc0NywgMCwgMCwgMCwgMCwgMCwgNTA1LCAzMjQsIDAsIAorICAgIDI0MSwgMCwgMCwgNzc0OSwgMCwgMCwgMCwgMCwgMzI4LCAwLCA3NzUxLCAwLCAwLCAwLCAzMjYsIDAsIDc3NTUsIDAsIDAsIAorICAgIDc3NTMsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMzMzLCAzMzUsIDU1OSwgMjQ2LCA3ODg3LCAwLCAzMzcsIAorICAgIDQ2NiwgNTI1LCA1MjcsIDAsIDAsIDQxNywgNzg4NSwgNDkxLCAwLCAwLCAwLCAwLCAwLCA3NzY1LCAwLCAwLCAwLCAwLCAKKyAgICA3NzY3LCAwLCAzNDEsIDAsIDAsIDAsIDAsIDc3NjksIDAsIDAsIDAsIDAsIDM0NSwgNTI5LCA1MzEsIDAsIDAsIDAsIDc3NzEsIAorICAgIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgNzc3NSwgMCwgMzQ3LCAzNDksIDAsIDAsIDAsIDc3NzcsIDAsIDAsIDAsIDAsIAorICAgIDM1MywgMCwgNzc3OSwgMCwgMCwgNTM3LCAzNTEsIDAsIDAsIDAsIDc3ODcsIDc4MzEsIDAsIDAsIDAsIDM1NywgMCwgMCwgMCwgCisgICAgMCwgMCwgNzc4OSwgMCwgMCwgNTM5LCAzNTUsIDAsIDc3OTMsIDAsIDAsIDc3OTEsIDAsIDAsIDAsIDAsIDI0OSwgMjUwLCAKKyAgICAyNTEsIDM2MSwgMzYzLCAzNjUsIDAsIDI1MiwgNzkxMSwgMzY3LCAzNjksIDQ2OCwgNTMzLCA1MzUsIDAsIDAsIDQzMiwgCisgICAgNzkwOSwgNzc5NSwgMCwgMCwgMCwgMzcxLCA3Nzk5LCAwLCA3Nzk3LCAwLCAwLCAwLCAwLCA3ODA1LCAwLCA3ODA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3ODA5LCA3ODExLCAzNzMsIDAsIDAsIDAsIDc4MTUsIDc4MTMsIDAsIDc4MzIsIDAsIDAsIDAsIDc4MTcsIDAsIAorICAgIDAsIDAsIDc4MTksIDc4MjEsIDAsIDAsIDAsIDc5MjMsIDI1MywgMzc1LCA3OTI5LCA1NjMsIDAsIDc4MjMsIDI1NSwgNzkyNywgCisgICAgNzgzMywgMCwgMCwgMCwgNzkyNSwgMCwgMCwgMzc4LCA3ODI1LCAwLCAwLCAwLCAzODAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgCisgICAgNzgyNywgMCwgMCwgMCwgMCwgNzgyOSwgMCwgMCwgMCwgMCwgODE3MywgOTAxLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTI5LCAwLCAKKyAgICAwLCA3ODQ2LCA3ODQ0LCAwLCA3ODUwLCAwLCAwLCAwLCAwLCA3ODQ4LCAwLCAwLCA0NzgsIDAsIDAsIDAsIDUwNiwgMCwgMCwgCisgICAgNTA4LCAwLCAwLCA0ODIsIDAsIDAsIDAsIDc2ODgsIDAsIDc4NzIsIDc4NzAsIDAsIDc4NzYsIDAsIDAsIDAsIDAsIDc4NzQsIAorICAgIDAsIDAsIDAsIDc3MjYsIDAsIDAsIDAsIDAsIDAsIDc4OTAsIDc4ODgsIDAsIDc4OTQsIDAsIDAsIDAsIDAsIDc4OTIsIDAsIAorICAgIDAsIDAsIDc3NTYsIDAsIDAsIDU1NiwgMCwgMCwgNzc1OCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAwLCA1MTAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3NSwgNDcxLCAwLCAwLCA0NjksIDAsIDAsIDQ3MywgMCwgMCwgMCwgNzg0NywgNzg0NSwgMCwgNzg1MSwgMCwgMCwgCisgICAgMCwgMCwgNzg0OSwgMCwgMCwgNDc5LCAwLCAwLCAwLCA1MDcsIDAsIDAsIDUwOSwgMCwgMCwgNDgzLCAwLCAwLCAwLCA3Njg5LCAKKyAgICAwLCA3ODczLCA3ODcxLCAwLCA3ODc3LCAwLCAwLCAwLCAwLCA3ODc1LCAwLCAwLCAwLCA3NzI3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3ODkxLCA3ODg5LCAwLCA3ODk1LCAwLCAwLCAwLCAwLCA3ODkzLCAwLCAwLCAwLCA3NzU3LCAwLCAwLCA1NTcsIDAsIDAsIAorICAgIDc3NTksIDAsIDAsIDAsIDU1NSwgMCwgMCwgMCwgNTExLCAwLCAwLCAwLCAwLCAwLCA0NzYsIDQ3MiwgMCwgMCwgNDcwLCAwLCAKKyAgICAwLCA0NzQsIDAsIDAsIDAsIDc4NTYsIDc4NTQsIDAsIDc4NjAsIDAsIDAsIDAsIDAsIDc4NTgsIDAsIDAsIDc4NTcsIDc4NTUsIAorICAgIDAsIDc4NjEsIDAsIDAsIDAsIDAsIDc4NTksIDAsIDAsIDc3MDAsIDc3MDIsIDAsIDAsIDAsIDAsIDAsIDc3MDEsIDc3MDMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDc3NjAsIDc3NjIsIDAsIDc3NjEsIDc3NjMsIDAsIDAsIDAsIDc3ODAsIDAsIDAsIDc3ODEsIDAsIAorICAgIDAsIDc3ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODMsIDAsIDc4MDAsIDAsIDAsIDc4MDEsIDAsIDAsIDAsIDAsIDc4MDIsIAorICAgIDAsIDAsIDc4MDMsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDAsIDAsIDc5MDAsIDc4OTgsIDAsIDc5MDQsIDAsIDAsIAorICAgIDAsIDAsIDc5MDIsIDc5MDYsIDAsIDAsIDAsIDAsIDAsIDc5MDEsIDc4OTksIDAsIDc5MDUsIDAsIDAsIDAsIDAsIDc5MDMsIAorICAgIDAsIDAsIDAsIDAsIDc5MDcsIDAsIDc5MTQsIDc5MTIsIDAsIDc5MTgsIDAsIDAsIDAsIDAsIDc5MTYsIDAsIDAsIDAsIDAsIAorICAgIDc5MjAsIDAsIDc5MTUsIDc5MTMsIDAsIDc5MTksIDc5MTcsIDAsIDAsIDAsIDAsIDc5MjEsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgCisgICAgMCwgMCwgNDkyLCAwLCAwLCA0OTMsIDAsIDAsIDQ4MCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgxLCAwLCAwLCAwLCA3NzA4LCAwLCAKKyAgICAwLCA3NzA5LCAwLCA1NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MSwgMCwgNDk1LCAwLCAwLCAwLCA4MTIyLCA5MDIsIDAsIDAsIAorICAgIDgxMjEsIDgxMjAsIDAsIDAsIDAsIDAsIDc5NDQsIDc5NDUsIDAsIDAsIDAsIDAsIDAsIDgxMjQsIDAsIDgxMzYsIDkwNCwgMCwgCisgICAgMCwgMCwgMCwgNzk2MCwgNzk2MSwgMCwgMCwgMCwgODEzOCwgOTA1LCAwLCAwLCAwLCAwLCA3OTc2LCA3OTc3LCAwLCA4MTQwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4MTU0LCA5MDYsIDAsIDAsIDgxNTMsIDgxNTIsIDAsIDkzOCwgMCwgMCwgNzk5MiwgNzk5MywgMCwgCisgICAgMCwgMCwgODE4NCwgOTA4LCAwLCAwLCAwLCAwLCA4MDA4LCA4MDA5LCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcyLCAwLCAwLCAwLCAKKyAgICA4MTcwLCA5MTAsIDAsIDAsIDgxNjksIDgxNjgsIDAsIDkzOSwgMCwgMCwgMCwgODAyNSwgMCwgMCwgMCwgODE4NiwgOTExLCAKKyAgICA4MDQwLCA4MDQxLCAwLCAwLCAwLCAwLCAwLCA4MTg4LCAwLCAwLCA4MTE2LCAwLCAwLCA4MTMyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MDQ4LCA5NDAsIDAsIDAsIDgxMTMsIDgxMTIsIDAsIDAsIDAsIDAsIDc5MzYsIDc5MzcsIDAsIDAsIDAsIDAsIDgxMTgsIAorICAgIDgxMTUsIDAsIDAsIDAsIDAsIDAsIDgwNTAsIDk0MSwgNzk1MiwgNzk1MywgMCwgMCwgMCwgODA1MiwgOTQyLCAwLCAwLCAwLCAKKyAgICAwLCA3OTY4LCA3OTY5LCAwLCAwLCAwLCAwLCA4MTM0LCA4MTMxLCAwLCA4MDU0LCA5NDMsIDAsIDAsIDgxNDUsIDgxNDQsIDAsIAorICAgIDk3MCwgMCwgMCwgNzk4NCwgNzk4NSwgODE1MCwgMCwgMCwgMCwgMCwgMCwgMCwgODA1NiwgOTcyLCAwLCAwLCAwLCAwLCAKKyAgICA4MDAwLCA4MDAxLCAwLCA4MTY0LCA4MTY1LCAwLCAwLCAwLCA4MDU4LCA5NzMsIDAsIDAsIDgxNjEsIDgxNjAsIDAsIDk3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgODAxNiwgODAxNywgMCwgMCwgMCwgMCwgODE2NiwgMCwgMCwgODA2MCwgOTc0LCAwLCAwLCAwLCAKKyAgICAwLCA4MDMyLCA4MDMzLCA4MTgyLCA4MTc5LCAwLCAwLCAwLCAwLCAwLCA4MTQ2LCA5MTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxNTEsIDAsIDAsIDgxNjIsIDk0NCwgMCwgMCwgODE2NywgMCwgMCwgMCwgODE4MCwgMCwgMCwgOTc5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5ODAsIDAsIDAsIDEwMzEsIDAsIDAsIDAsIDAsIDEyMzIsIDAsIDEyMzQsIDAsIDAsIDAsIDAsIDEwMjcsIDAsIDEwMjQsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgsIDAsIDEwMjUsIDEyMTcsIDAsIDEyNDQsIDAsIDAsIDEyNDYsIDAsIDAsIDAsIDEwMzcsIDAsIAorICAgIDAsIDAsIDEyNTAsIDEwNDksIDAsIDEyNTIsIDAsIDAsIDAsIDAsIDEwMzYsIDAsIDAsIDAsIDAsIDEyNTQsIDAsIDAsIDAsIAorICAgIDEyNjIsIDEwMzgsIDAsIDEyNjQsIDAsIDAsIDEyNjYsIDAsIDAsIDAsIDEyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzIsIAorICAgIDAsIDAsIDEyNjAsIDAsIDAsIDAsIDAsIDEyMzMsIDAsIDEyMzUsIDAsIDAsIDAsIDAsIDExMDcsIDAsIDExMDQsIDAsIDAsIAorICAgIDAsIDAsIDEyMzksIDAsIDExMDUsIDEyMTgsIDAsIDEyNDUsIDAsIDAsIDEyNDcsIDAsIDAsIDAsIDExMTcsIDAsIDAsIDAsIAorICAgIDEyNTEsIDEwODEsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDEyNTUsIDAsIDAsIDAsIDEyNjMsIAorICAgIDExMTgsIDAsIDEyNjUsIDAsIDAsIDEyNjcsIDAsIDAsIDAsIDEyNjksIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzMsIDAsIDAsIAorICAgIDEyNjEsIDAsIDAsIDExMTEsIDAsIDAsIDAsIDExNDIsIDAsIDAsIDExNDMsIDAsIDAsIDAsIDAsIDAsIDEyNDIsIDAsIDAsIAorICAgIDEyNDMsIDAsIDAsIDEyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTksIDAsIDE1NzAsIDE1NzEsIDE1NzMsIDAsIDE1NzIsIAorICAgIDAsIDAsIDE1NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzAsIDAsIDAsIDE3NDcsIDAsIDAsIDE3MjgsIDAsIDAsIDAsIDAsIAorICAgIDIzNDUsIDAsIDAsIDIzNTMsIDAsIDAsIDIzNTYsIDAsIDAsIDAsIDI1MDcsIDI1MDgsIDAsIDAsIDAsIDI4OTEsIDI4ODgsIAorICAgIDI4OTIsIDI5NjQsIDAsIDAsIDAsIDAsIDAsIDMwMTgsIDMwMjAsIDAsIDMwMTksIDAsIDAsIDAsIDAsIDMxNDQsIDAsIDAsIAorICAgIDAsIDAsIDMyNjQsIDAsIDMyNzQsIDMyNzEsIDMyNzIsIDAsIDMyNzUsIDAsIDAsIDAsIDAsIDM0MDIsIDM0MDQsIDAsIAorICAgIDM0MDMsIDAsIDAsIDAsIDAsIDM1NDYsIDM1NDgsIDM1NTAsIDAsIDAsIDAsIDAsIDM1NDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDQxMzQsIDAsIDAsIDAsIDY5MTgsIDAsIDAsIDY5MjAsIDAsIDAsIDY5MjIsIDAsIDAsIDY5MjQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDY5MjYsIDAsIDAsIDY5MzAsIDAsIDAsIDY5NzEsIDAsIDAsIDY5NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzYsIDAsIAorICAgIDAsIDY5NzcsIDAsIDAsIDY5NzksIDAsIDAsIDAsIDc3MzYsIDAsIDAsIDc3MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDc3NzIsIAorICAgIDAsIDAsIDc3NzMsIDAsIDAsIDAsIDAsIDc3ODQsIDAsIDAsIDc3ODUsIDAsIDAsIDc4NTIsIDAsIDAsIDc4NjIsIDAsIDAsIAorICAgIDAsIDc4NTMsIDAsIDAsIDc4NjMsIDAsIDAsIDAsIDc4NzgsIDAsIDAsIDc4NzksIDAsIDAsIDc4OTYsIDAsIDAsIDc4OTcsIAorICAgIDAsIDAsIDAsIDAsIDc5MzgsIDc5NDAsIDAsIDAsIDc5NDIsIDgwNjQsIDAsIDc5MzksIDc5NDEsIDAsIDAsIDc5NDMsIAorICAgIDgwNjUsIDAsIDAsIDgwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNjcsIDAsIDAsIDgwNjgsIDAsIDAsIDgwNjksIDAsIDAsIAorICAgIDgwNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzEsIDAsIDc5NDYsIDc5NDgsIDAsIDAsIDc5NTAsIDgwNzIsIDAsIDc5NDcsIAorICAgIDc5NDksIDAsIDAsIDc5NTEsIDgwNzMsIDAsIDAsIDgwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzUsIDAsIDAsIDgwNzYsIAorICAgIDAsIDAsIDgwNzcsIDAsIDAsIDgwNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzksIDAsIDc5NTQsIDc5NTYsIDAsIDc5NTUsIAorICAgIDc5NTcsIDAsIDAsIDAsIDAsIDAsIDc5NjIsIDc5NjQsIDAsIDAsIDAsIDAsIDAsIDc5NjMsIDc5NjUsIDAsIDc5NzAsIAorICAgIDc5NzIsIDAsIDAsIDc5NzQsIDgwODAsIDAsIDc5NzEsIDc5NzMsIDAsIDAsIDc5NzUsIDgwODEsIDAsIDAsIDgwODIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDgwODMsIDAsIDAsIDgwODQsIDAsIDAsIDgwODUsIDAsIDAsIDgwODYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgwODcsIDAsIDc5NzgsIDc5ODAsIDAsIDAsIDc5ODIsIDgwODgsIDAsIDc5NzksIDc5ODEsIDAsIDAsIDc5ODMsIAorICAgIDgwODksIDAsIDAsIDgwOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTEsIDAsIDAsIDgwOTIsIDAsIDAsIDgwOTMsIDAsIDAsIAorICAgIDgwOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTUsIDAsIDc5ODYsIDc5ODgsIDAsIDAsIDc5OTAsIDAsIDAsIDc5ODcsIAorICAgIDc5ODksIDAsIDAsIDc5OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTQsIDc5OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTgsIAorICAgIDAsIDAsIDc5OTUsIDc5OTcsIDAsIDAsIDc5OTksIDAsIDAsIDgwMDIsIDgwMDQsIDAsIDgwMDMsIDgwMDUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwMTAsIDgwMTIsIDAsIDAsIDAsIDAsIDAsIDgwMTEsIDgwMTMsIDAsIDgwMTgsIDgwMjAsIDAsIDAsIDgwMjIsIAorICAgIDAsIDAsIDgwMTksIDgwMjEsIDAsIDAsIDgwMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjcsIDgwMjksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwMzEsIDAsIDAsIDgwMzQsIDgwMzYsIDAsIDAsIDgwMzgsIDgwOTYsIDAsIDgwMzUsIDgwMzcsIDAsIDAsIAorICAgIDgwMzksIDgwOTcsIDAsIDAsIDgwOTgsIDAsIDAsIDgwOTksIDAsIDAsIDAsIDAsIDAsIDAsIDgxMDAsIDAsIDAsIDgxMDEsIAorICAgIDAsIDAsIDgxMDIsIDAsIDAsIDgxMDMsIDAsIDAsIDAsIDAsIDAsIDgwNDIsIDgwNDQsIDAsIDAsIDgwNDYsIDgxMDQsIDAsIAorICAgIDgwNDMsIDgwNDUsIDAsIDAsIDgwNDcsIDgxMDUsIDAsIDAsIDgxMDYsIDAsIDAsIDgxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxMDgsIDAsIDAsIDgxMDksIDAsIDAsIDgxMTAsIDAsIDAsIDgxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMTQsIDAsIDAsIAorICAgIDgxMzAsIDAsIDAsIDgxNzgsIDAsIDAsIDgxMTksIDAsIDAsIDAsIDAsIDAsIDgxNDEsIDgxNDIsIDAsIDAsIDgxNDMsIDAsIAorICAgIDAsIDAsIDgxMzUsIDAsIDAsIDgxODMsIDAsIDAsIDAsIDAsIDAsIDgxNTcsIDgxNTgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxNTksIDAsIDg2MDIsIDAsIDAsIDg2MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MjIsIDAsIDAsIDg2NTMsIDAsIDAsIAorICAgIDg2NTUsIDAsIDAsIDg2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDg3MDgsIDAsIDAsIDg3MTMsIDAsIDAsIDg3MTYsIDAsIDAsIAorICAgIDg3NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg3NDIsIDAsIDAsIDg3NjksIDAsIDAsIDg3NzIsIDAsIDAsIDg3NzUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDg3NzcsIDAsIDAsIDg4MTMsIDAsIDAsIDg4MDIsIDAsIDAsIDg4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDg4MTcsIDAsIDAsIDg4MjAsIDAsIDAsIDg4MjEsIDAsIDAsIDg4MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MjUsIDAsIDAsIAorICAgIDg4MzIsIDAsIDAsIDg4MzMsIDAsIDAsIDg5MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDg5MjksIDAsIDAsIDg4MzYsIDAsIDAsIAorICAgIDg4MzcsIDAsIDAsIDg4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NDEsIDAsIDAsIDg5MzAsIDAsIDAsIDg5MzEsIDAsIDAsIAorICAgIDg4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzcsIDAsIDAsIDg4NzgsIDAsIDAsIDg4NzksIDAsIDAsIDg5MzgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDg5MzksIDAsIDAsIDg5NDAsIDAsIDAsIDg5NDEsIDAsIDAsIDAsIDEyNDM2LCAwLCAwLCAxMjM2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTIzNjYsIDAsIDAsIDEyMzY4LCAwLCAwLCAxMjM3MCwgMCwgMCwgMTIzNzIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEyMzc0LCAwLCAwLCAxMjM3NiwgMCwgMCwgMTIzNzgsIDAsIDAsIDEyMzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjM4MiwgMCwgMCwgMTIzODQsIDAsIDAsIDEyMzg2LCAwLCAwLCAxMjM4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzOTEsIDAsIAorICAgIDAsIDEyMzkzLCAwLCAwLCAxMjQwMCwgMTI0MDEsIDAsIDEyNDAzLCAxMjQwNCwgMCwgMCwgMCwgMCwgMCwgMTI0MDYsIAorICAgIDEyNDA3LCAwLCAwLCAwLCAwLCAwLCAxMjQwOSwgMTI0MTAsIDAsIDEyNDEyLCAxMjQxMywgMCwgMTI0NDYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyNTMyLCAwLCAwLCAxMjQ2MCwgMCwgMCwgMTI0NjIsIDAsIDAsIDEyNDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjQ2NiwgMCwgMCwgMTI0NjgsIDAsIDAsIDEyNDcwLCAwLCAwLCAxMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0NzQsIDAsIAorICAgIDAsIDEyNDc2LCAwLCAwLCAxMjQ3OCwgMCwgMCwgMTI0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDgyLCAwLCAwLCAxMjQ4NSwgCisgICAgMCwgMCwgMTI0ODcsIDAsIDAsIDEyNDg5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ5NiwgMTI0OTcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNDk5LCAxMjUwMCwgMCwgMTI1MDIsIDEyNTAzLCAwLCAxMjUwNSwgMTI1MDYsIDAsIDAsIDAsIDAsIDAsIDEyNTA4LCAKKyAgICAxMjUwOSwgMCwgMCwgMCwgMCwgMCwgMTI1MzUsIDAsIDAsIDEyNTM2LCAwLCAwLCAxMjUzNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI1MzgsIDAsIDAsIDEyNTQyLCAwLCAwLCAwLCAwLCA2OTc4NiwgMCwgMCwgNjk3ODgsIDAsIDAsIDY5ODAzLCAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFuZ2VfcmVjb3JkIGNoYW5nZV9yZWNvcmRzXzNfMl8wW10gPSB7CkBAIC00NDc1LDYgKzQ5MjksMTEgQEAKIAl7IDI1NSwgMjksIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDI2LCAyNTUsIDI1NSwgMCB9LAogCXsgNSwgMjU1LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLjAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMi4wIH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDMuMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCA0LjAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgLTEgfSwKIAl7IDE0LCAyNTUsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDI1NSwgMjU1LCAwLCAwIH0sCiAJeyAyNTUsIDcsIDEsIDI1NSwgMCB9LApAQCAtNDUwNCwzOCArNDk2Myw0NiBAQAogCXsgMjU1LCAyMywgMjU1LCAyNTUsIDAgfSwKIAl7IDksIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjAsIDI1NSwgMjU1LCAwIH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDFlKzE2IH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDFlKzIwIH0sCiAJeyAyNTUsIDE5LCAyNTUsIDI1NSwgMCB9LAotCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAtMSB9LAogCXsgMTUsIDI1NSwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMTksIDI1NSwgMjU1LCAtMSB9LAorCXsgMSwgMjU1LCAyNTUsIDAsIDAgfSwKIH07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjaGFuZ2VzXzNfMl8wX2luZGV4W10gPSB7Ci0gICAgMCwgMSwgMiwgMiwgMywgNCwgNSwgNiwgMiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDIsIDIsIDE0LCAxNSwgMTYsIDE3LCAKLSAgICAxOCwgMTksIDIwLCAyMSwgMjIsIDIsIDIsIDIsIDIzLCAyNCwgMjUsIDI2LCAyLCAyLCAyNywgMjgsIDI5LCAzMCwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMzEsIDIsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDIsIDM4LCAzOSwgNDAsIDIsIDQxLCA0MiwgMiwgNDMsIAotICAgIDIsIDIsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgMiwgMiwgNDksIDUwLCA1MSwgMiwgMiwgNTIsIDUzLCAyLCA1NCwgNTUsIDU1LCAKLSAgICAyLCAyLCAyLCAyLCA1NiwgMiwgNTcsIDU4LCA1OSwgNjAsIDYxLCAyLCAyLCAyLCAyLCA2MiwgNjMsIDY0LCA2NSwgNjYsIAotICAgIDY3LCA2OCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMCwgMSwgMiwgMiwgMywgNCwgNSwgNiwgMiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAyLCAxNSwgMTYsIDE3LCAKKyAgICAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyLCAyLCAyLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgCisgICAgMzQsIDIsIDIsIDIsIDM1LCAzNiwgMiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgCisgICAgNDksIDIsIDUwLCAyLCAyLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDIsIDIsIDU2LCA1NywgNTgsIDIsIDIsIDU5LCA2MCwgNjEsIAorICAgIDYyLCA2MywgNjMsIDIsIDIsIDIsIDIsIDY0LCAyLCA2NSwgNjYsIDY3LCA2OCwgNjksIDIsIDIsIDIsIDIsIDcwLCA3MSwgCisgICAgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDIsIDIsIDIsIDIsIDIsIDIsIDc5LCAyLCAyLCAyLCAyLCAyLCA4MCwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgNjksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDgxLCAyLCA4MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODMsIAorICAgIDg0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODYsIDg3LCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4OCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODksIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MSwgOTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkzLCA0OCwgNDgsIAorICAgIDk0LCA5NSwgNDgsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAyLCAxMDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEwNCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgNzAsIDcxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0MSwgNDEsIDcyLCA3MywgNDEsIDc0LCA3NSwgNzYsIDc3LCAKLSAgICAyLCA3OCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMTA1LCAxMDYsIDEwNywgMTA4LCAxMDksIDIsIDIsIDIsIDIsIDExMCwgMTExLCAyLCAxMTIsIDExMywgMTE0LCAKKyAgICAxMTUsIDExNiwgMTE3LCAyLCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTIzLCAyLCAxMjQsIAorICAgIDIsIDEyNSwgMiwgMTI2LCAyLCAxMjcsIDIsIDIsIDIsIDEyOCwgMiwgMiwgMiwgMiwgMTI5LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzAsIDIsIDEzMSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDc5LCA4MCwgODEsIDgyLCA4MywgMiwgMiwgMiwgCi0gICAgMiwgODQsIDg1LCAyLCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCAyLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDk3LCAyLCA5OCwgMiwgOTksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDEwMCwgMiwgMTAxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTQ1NDUsMzggKzUwMTIsMzIgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAxMzMsIDIsIDEzNCwgMiwgMTM1LCAyLCAyLCAxMzYsIDIsIDIsIDIsIDEzNywgMTM4LCAxMzksIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDEwMiwgMiwgMTAzLCAyLCAxMDQsIDIsIDIsIDEwNSwgMiwgMiwgMiwgMTA2LCAxMDcsIDEwOCwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTA5LCAxMTAsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE0MCwgMTQxLCAxNDIsIDE0MywgCisgICAgMTQ0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAxNDUsIDE0NiwgOTAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDc5LCAxNDcsIDIsIDE0OCwgMTQ5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNTAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE1MSwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTUyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMTU0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMTEsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE1MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC00ODEwLDggKzUyNzEsOSBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDQxLCAxMTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ4LCAKKyAgICAxNTUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNDg3NCw3ICs1MzM2LDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfZGF0YVtdID0gewpAQCAtNDkyMiw3ICs1Mzg0LDcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTQ5NTIsMzgwICs1NDE0LDM4OSBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMywgMTMsIDEzLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyMywgMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKLSAgICAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKLSAgICAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOCwgMCwgMCwgMCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMCwgMjgsIDYsIDQsIDUsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDEsIDEsIDAsIDAsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzNiwgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcsIDM4LCAxMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAKLSAgICAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAKLSAgICAzOSwgMzksIDM5LCAzOSwgMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAKKyAgICAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMTgsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAotICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgOCwgMCwgCisgICAgMCwgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgMSwgMSwgMCwgMCwgMCwgOCwgMzMsIDYsIDQsIDUsIDM0LCAzNSwgMzYsIDM3LCAKKyAgICAzOCwgMzksIDEsIDEsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MSwgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDIsIDQzLCAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIAotICAgIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDQyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsIDMyLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01MzMzLDg2ICs1ODA0LDIzNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAotICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAxMywgMTMsIDEzLCAxMywgCi0gICAgMTMsIDAsIDAsIDAsIDEsIDEsIDEzLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgCi0gICAgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA0MywgNDMsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIAotICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgCisgICAgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIAorICAgIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDAsIDAsIDAsIDEsIDEsIDE4LCAKKyAgICAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgNywgNywgMCwgMCwgMCwgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgMCwgMCwgMCwgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCi0gICAgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgMCwgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCkBAIC01NDI0LDY2ICs2MDQ2LDEzNSBAQAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgNywgMCwgMCwgNywgMCwgCisgICAgMCwgMCwgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgNywgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgCisgICAgNywgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogc3RhdGljIGNvbnN0IGNoYW5nZV9yZWNvcmQqIGdldF9jaGFuZ2VfM18yXzAoUHlfVUNTNCBuKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCmluZGV4IDkwZDI1YzYuLjFhMjRjY2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKQEAgLTYsMTUyMjkgKzYsMTcyNTEgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxleGljb25bXSA9IHsKICAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODcsIDczLCA4NCwgMjAwLCA4MywgNzcsIDY1LCA3NiwgMjA0LCA4MywgODksIAogICAgIDc2LCA3NiwgNjUsIDY2LCA3NiwgMTk3LCA4MywgNzMsIDcxLCAyMDYsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA2NywgCi0gICAgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc3LCA2NSwgODQsIDcyLCA2OSwgNzcsIAotICAgIDY1LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA2NywgODUsIDc4LCA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgODMsIDg5LCA3NywgCi0gICAgNjYsIDc5LCAyMDQsIDcwLCA3OSwgODIsIDc3LCAxMjgsIDY3LCA2NSwgNzgsIDY1LCA2OCwgNzMsIDY1LCAyMDYsIDgzLCAKLSAgICA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCA2NywgMjExLCA2NiwgNzksIDc2LCAxOTYsIDcxLCA4MiwgNjksIDY5LCAyMDMsIAotICAgIDc2LCA3MywgNzEsIDY1LCA4NCwgODUsIDgyLCAxOTcsIDY4LCA3MywgNzEsIDczLCAyMTIsIDY1LCA3OCwgMTk2LCA3NywgCi0gICAgODUsIDgzLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA3MywgNzcsIDY5LCAyMTEsIDY5LCA4NCwgNzIsIDczLCA3OSwgODAsIDczLCAKLSAgICAxOTUsIDcyLCA2NSwgNzgsIDcxLCA4NSwgMjA0LCA3MywgODQsIDY1LCA3NiwgNzMsIDE5NSwgNjcsIDg5LCA4MiwgNzMsIAotICAgIDc2LCA3NiwgNzMsIDE5NSwgODIsIDY1LCA2OCwgNzMsIDY3LCA2NSwgMjA0LCA4MywgNjUsIDc4LCA4MywgNDUsIDgzLCA2OSwgCi0gICAgODIsIDczLCAxOTgsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDcwLCA3OSwgMjEwLCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCAKLSAgICAxOTYsIDg2LCA2NSwgMjAxLCA3MCwgNzMsIDc4LCA2NSwgMjA0LCA2NywgNzksIDc3LCA2NiwgNzMsIDc4LCA3MywgNzgsIAotICAgIDE5OSwgODMsIDgxLCA4NSwgNjUsIDgyLCAxOTcsIDg2LCA2NSwgODIsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NiwgCi0gICAgODIsIDY1LCA3MywgNzYsIDc2LCAxOTcsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIDIwNiwgODIsIDczLCA3MSwgNzIsIAotICAgIDIxMiwgNzYsIDY5LCA3MCwgMjEyLCA2NiwgODksIDkwLCA2NSwgNzgsIDg0LCA3MywgNzgsIDE5NywgNzMsIDgzLCA3OSwgCi0gICAgNzYsIDY1LCA4NCwgNjksIDE5NiwgMTk0LCA2NSwgNjYsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCAKLSAgICAxOTcsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgNzgsIDcxLCA4OCwgMjAxLCA3NiwgNzMsIAotICAgIDc4LCA2OSwgNjUsIDIxMCwgNjYsIDY5LCA3NiwgNzksIDg3LCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCAKLSAgICAyMTAsIDgzLCA3MywgNzEsIDc4LCAxMjgsIDg0LCA3MywgNjYsIDY5LCA4NCwgNjUsIDIwNiwgNzcsIDY5LCA2OSwgMjA1LCAKLSAgICA2OCwgNzksIDIxMiwgNjUsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIAotICAgIDIwNCwgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA4OSwgCi0gICAgNjksIDIwMCwgODcsIDcyLCA3MywgODQsIDE5NywgNjUsIDY2LCA3OSwgODYsIDE5NywgNzgsIDg1LCA3NywgNjYsIDY5LCAKLSAgICAyMTAsIDg1LCAxMjgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCAKLSAgICA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA3NSwgNzIsIDc3LCA2OSwgCi0gICAgMjEwLCA3OSwgMTI4LCA3MywgMTI4LCA4NCwgNzMsIDc2LCAxOTcsIDc3LCA2NSwgODIsIDc1LCAxMjgsIDY2LCA3OSwgMjE2LCAKLSAgICA3MiwgNjksIDY2LCA4MiwgNjksIDIxNSwgODAsIDc2LCA4NSwgMjExLCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCA3MSwgCi0gICAgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAorICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY3LCA3NCwgMjAzLCA2OSwgNzEsIDg5LCA4MCwgODQsIDczLCA2NSwgCisgICAgMjA2LCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCAyMDAsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCAKKyAgICA2NywgNzksIDc3LCA4MCwgNjUsIDg0LCA3MywgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc3LCA2NSwgODQsIDcyLCA2OSwgCisgICAgNzcsIDY1LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA2NywgODUsIDc4LCA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgODMsIDg5LCAKKyAgICA3NywgNjYsIDc5LCAyMDQsIDcwLCA3OSwgODIsIDc3LCAxMjgsIDY3LCA2NSwgNzgsIDY1LCA2OCwgNzMsIDY1LCAyMDYsIAorICAgIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCA2NywgMjExLCA2OCwgNzMsIDcxLCA3MywgMjEyLCA2NiwgNzksIDc2LCAKKyAgICAxOTYsIDcyLCA2NSwgNzgsIDcxLCA4NSwgMjA0LCA3MSwgODIsIDY5LCA2OSwgMjAzLCA3NiwgNzMsIDcxLCA2NSwgODQsIAorICAgIDg1LCA4MiwgMTk3LCA2NSwgNzgsIDE5NiwgNzcsIDg1LCA4MywgNzMsIDY3LCA2NSwgMjA0LCA4NCwgNzMsIDc3LCA2OSwgCisgICAgMjExLCA2OSwgODQsIDcyLCA3MywgNzksIDgwLCA3MywgMTk1LCA4NiwgNzksIDg3LCA2OSwgMjA0LCA3MywgODQsIDY1LCAKKyAgICA3NiwgNzMsIDE5NSwgNjcsIDg5LCA4MiwgNzMsIDc2LCA3NiwgNzMsIDE5NSwgODIsIDY1LCA2OCwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA4MywgNjUsIDc4LCA4MywgNDUsIDgzLCA2OSwgODIsIDczLCAxOTgsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIAorICAgIDE5NiwgNzAsIDc5LCAyMTAsIDY3LCA3OSwgNzcsIDY2LCA3MywgNzgsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDIwMSwgODYsIAorICAgIDY1LCAyMDEsIDcwLCA3MywgNzgsIDY1LCAyMDQsIDgzLCA4MSwgODUsIDY1LCA4MiwgMTk3LCA4NiwgNjUsIDgyLCA3MywgCisgICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDY5LCA3MCwgMjEyLCA2NiwgODIsIDY1LCA3MywgNzYsIDc2LCAxOTcsIDgwLCAKKyAgICA2NSwgODQsIDg0LCA2OSwgODIsIDIwNiwgODIsIDczLCA3MSwgNzIsIDIxMiwgNjYsIDg5LCA5MCwgNjUsIDc4LCA4NCwgNzMsIAorICAgIDc4LCAxOTcsIDczLCA4MywgNzksIDc2LCA2NSwgODQsIDY5LCAxOTYsIDE5NCwgNjUsIDY2LCA3OSwgODYsIDY5LCAxMjgsIAorICAgIDY4LCA3OSwgODUsIDY2LCA3NiwgMTk3LCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgCisgICAgODgsIDIwMSwgNzgsIDg1LCA3NywgNjYsIDY5LCAyMTAsIDgzLCA3MywgNzEsIDc4LCAxMjgsIDY2LCA2OSwgNzYsIDc5LCAKKyAgICA4NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzcsIDc5LCA2OCwgNzMsIDcwLCA3MywgNjksIDIxMCwgODQsIAorICAgIDczLCA2NiwgNjksIDg0LCA2NSwgMjA2LCA2NSwgMTI4LCA2OCwgNzksIDIxMiwgNzcsIDY5LCA2OSwgMjA1LCA3NywgODksIAorICAgIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgNjUsIDgyLCA4MiwgNzksIDg3LCAKKyAgICAxMjgsIDczLCA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgODcsIDcyLCA3MywgODQsIDE5NywgODUsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgODksIDY5LCAyMDAsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDczLCAxMjgsIDc5LCAKKyAgICAxMjgsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3NywgNzksIDc4LCA3MSwgNzksIAorICAgIDc2LCA3MywgNjUsIDIwNiwgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNzUsIDcyLCA3NywgNjksIDIxMCwgNjgsIDY5LCA4NiwgCisgICAgNjUsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA4NCwgNzMsIDc2LCAxOTcsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCAKKyAgICA2OSwgODMsIDczLCA5MCwgNjksIDE5NiwgODQsIDcyLCA2NSwgMjA1LCA2NiwgNzYsIDY1LCA2NywgMjAzLCA3NCwgNzksIAorICAgIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIDgyLCA2OSwgMjE1LCA4MCwgCisgICAgNzYsIDg1LCAyMTEsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCAKKyAgICA4MiwgNjgsIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCiAgICAgMTI4LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIDIwMCwgNjYsIDY1LCA3NiwgNzMsIDc4LCA2OSwgODMsIAotICAgIDE5NywgNjYsIDc2LCA2NSwgNjcsIDIwMywgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNzIsIDc5LCA3OSwgCi0gICAgNzUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgODQsIDY1LCAyMDEsIDY1LCA3NiwgNjksIDE5OCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAotICAgIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCA2OCwgNjksIDg2LCA2NSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDgzLCA2NywgCi0gICAgODIsIDczLCA4MCwgMjEyLCA4NCwgNzksIDEyOCwgMjEzLCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAxMjgsIDg1LCAyMDgsIAotICAgIDcwLCA4NSwgNzYsIDc2LCA4NywgNzMsIDY4LCA4NCwgMjAwLCA3MiwgNjUsIDIwMCwgNjgsIDc5LCA4NywgMjA2LCA2NiwgCi0gICAgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgMTI4LCA2OSwgODEsIDg1LCA2NSwgMjA0LCA3OSwgMTk4LCA3OSwgODYsIDY5LCAKLSAgICAyMTAsIDg0LCA2NSwgMTk5LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgNzAsIDgyLCA2NSwgNzUsIDg0LCA4NSwgMjEwLCAKLSAgICA3OCwgODUsIDc3LCA2OSwgODIsIDczLCAxOTUsIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDg0LCA4NywgNzksIDEyOCwgNzcsIAotICAgIDY1LCA3NiwgNjUsIDg5LCA2NSwgNzYsIDY1LCAyMDUsIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCA4NCwgNzMsIDE5NSwgCi0gICAgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCAyMTAsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgMjExLCAKLSAgICA3OSwgNzgsIDY5LCAxMjgsIDg0LCA2OSwgNzYsIDg1LCA3MSwgMjEzLCA2NSwgODIsIDc3LCA2OSwgNzgsIDczLCA2NSwgCi0gICAgMjA2LCA2NiwgNjksIDc4LCA3MSwgNjUsIDc2LCAyMDEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDc0LCAKLSAgICA2OSwgNjksIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY1LCAyMDQsIDY2LCA2NSwgODIsIDEyOCwgNzIsIDczLCA4MiwgNjUsIAotICAgIDcxLCA2NSwgNzgsIDE5MywgODcsIDY5LCA4MywgODQsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg0LCA3MiwgNjUsIDIwMSwgCi0gICAgNzUsIDY1LCA3OCwgNzgsIDY1LCA2OCwgMTkzLCA2NywgNzIsIDY5LCA4MiwgNzksIDc1LCA2OSwgMTk3LCA3MiwgNjUsIDc2LCAKLSAgICAxOTgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3OSwgODIsIDczLCA4OSwgMTkzLCA4NCwgODcsIAotICAgIDIwNywgNjcsIDcyLCA2NSwgMjA1LCA3MSwgODUsIDc0LCA2NSwgODIsIDY1LCA4NCwgMjAxLCA3NCwgNzksIDc4LCA3MSwgCi0gICAgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzgsIDY5LCAyMTUsIDgyLCA4NSwgNzgsIDczLCAxOTUsIDgzLCA2NSwgODUsIDgyLCAKLSAgICA2NSwgODMsIDcyLCA4NCwgODIsIDE5MywgODQsIDY5LCA4NCwgODIsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDY4LCA2OSwgODMsIAotICAgIDY5LCA4MiwgNjksIDIxMiwgNzYsIDg1LCAxOTcsIDgzLCA3MywgNzgsIDcyLCA2NSwgNzYsIDE5MywgNzEsIDg1LCA4MiwgCi0gICAgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODMsIDg5LCA4MiwgNzMsIDY1LCAKLSAgICAxOTUsIDg0LCA3MiwgODIsIDY5LCAxOTcsIDg2LCA3OSwgNjcsIDY1LCA3NiwgNzMsIDE5NSwgNzIsIDY1LCAxMjgsIDY1LCAKLSAgICA2NywgODUsIDg0LCA2OSwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzYsIDczLCA3MSwgNzIsIDIxMiwgNzAsIAotICAgIDc5LCA4NSwgODIsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDgzLCA4NCwgODIsIDg1LCA2NywgMjAzLCA4NCwgCi0gICAgNjUsIDc3LCA3MywgMjA0LCA2NSwgODAsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCAKLSAgICA3MiwgNjUsIDc3LCA5MCwgMTkzLCA3NywgNjUsIDgyLCAyMDMsIDg0LCA3MiwgODIsIDY5LCA2OSwgMTI4LCA4NCwgNjksIAotICAgIDc2LCA2OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzksIDc4LCAxOTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDIwNCwgNzQsIDg1LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDY2LCA2NSwgODIsIDE5NCwgNjgsIDY1LCAKLSAgICA4MywgNzMsIDE5MywgNzAsIDczLCA4NiwgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgNzcsIDY1LCA3NSwgODMsIAotICAgIDg1LCA4MiwgMTkzLCA2NiwgNzksIDgwLCA3OSwgNzcsIDc5LCA3MCwgMjA3LCA3NSwgNjUsIDEyOCwgNzUsIDcyLCA2NSwgCi0gICAgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NiwgNjUsIDIwNywgODQsIDIwNywgNzIsIDY5LCA4OCwgNjUsIDcxLCAKLSAgICA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3OCwgMTk5LCA4MywgNzMsIDg4LCAxMjgsIDc2LCA3OSwgMjE1LCA4MCwgODMsIDczLCAKLSAgICA3NiwgMjAxLCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDE5MywgNzcsIDc5LCA3OCwgNzksIDgzLCA4MCwgNjUsIAotICAgIDY3LCAxOTcsIDc4LCA3OSwgMjEyLCA4OSwgNjUsIDEyOCwgNzgsIDczLCA3OCwgNjksIDEyOCwgODMsIDEyOCwgODMsIDY5LCAKLSAgICA4NiwgNjksIDc4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgMTk3LCA4NiwgMTI4LCA2OCwgNzksIDg0LCAyMTEsIDc3LCAKLSAgICA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgMTk2LCA3MiwgNzMsIDcxLCAyMDAsIDc1LCA3MiwgNjUsIAotICAgIDIwMCwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzgsIDc1LCAyMDcsIDg0LCA3MywgNzYsIDY4LCA2OSwgMTI4LCA4NCwgNzksIAotICAgIDc4LCAxOTcsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgODIsIDY1LCAxMjgsIDg0LCA4NSwgODIsIDc4LCA2OSwgCi0gICAgMTk2LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgNzIsIDEyOCwgODAsIDY1LCAxMjgsIDcxLCAxMjgsIDc2LCA2NSwgNzEsIAotICAgIDY1LCAxOTQsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAxOTMsIDY3LCA4OSwgODAsIDgyLCA3MywgNzksIDIxMiwgCi0gICAgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIAotICAgIDE5NywgODQsIDczLCA3MCwgNzMsIDc4LCA2NSwgNzEsIDIwMCwgNjgsIDEyOCwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgCi0gICAgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIAotICAgIDY2LCA4OSwgNjksIDc2LCA3OSwgODIsIDg1LCA4MywgODMsIDczLCA2NSwgNzgsIDQ1LCA4NSwgNzUsIDgyLCA2NSwgNzMsIAotICAgIDc4LCA3MywgNjUsIDIwNiwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgCi0gICAgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDY1LCA3OCwgODQsIDczLCA2NywgNzYsIAotICAgIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIDY5LCA0NSwgODIsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA2NywgNjksIDc5LCAKLSAgICA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgCi0gICAgNjUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgODAsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDY3LCA3MywgODIsIDY3LCA4NSwgNzMsIDg0LCA0NSwgCi0gICAgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgNjcsIAotICAgIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgCi0gICAgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIAotICAgIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCAKLSAgICA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgCi0gICAgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIAotICAgIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgCi0gICAgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIAotICAgIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgCi0gICAgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCAKLSAgICA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCA3OCwgMTkzLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIAotICAgIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCAKLSAgICA4NSwgNzcsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgCi0gICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIAotICAgIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgCi0gICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAotICAgIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKLSAgICA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MiwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKLSAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAotICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCi0gICAgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAotICAgIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MywgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgCi0gICAgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIAotICAgIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCAKLSAgICA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OSwgMTI4LCAKLSAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIAotICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgCi0gICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIAotICAgIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKLSAgICA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjksIDQ1LCA3MCwgCi0gICAgODUsIDc4LCA2NywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDgzLCA3MywgNzAsIAotICAgIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCAKLSAgICA4NSwgODAsIDcyLCAxMjgsIDY1LCA3OCwgODQsIDczLCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDczLCA3OSwgCi0gICAgNzgsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCAKLSAgICA2NSwgNzgsIDg0LCA3MywgNzUsIDY5LCA3OCwgNzksIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDY3LCA2OSwgCi0gICAgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDcyLCA3MywgNjksIAotICAgIDg1LCA2NywgNzIsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCAKLSAgICA4NSwgNzcsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3NCwgNjUsIDc2LCA3NiwgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCAKLSAgICA3MiwgNzksIDg1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgCi0gICAgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDc5LCA3OCwgMTI4LCAKLSAgICA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDY5LCA4NCwgNjUsIAotICAgIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgCi0gICAgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MywgODksIAotICAgIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCAKLSAgICA3MywgNzksIDgzLCAxMjgsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDc4LCA3NSwgCi0gICAgNjksIDE5NiwgODAsIDgyLCA3OSwgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAxMjgsIDg0LCAKLSAgICA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NiwgNzYsIDY1LCA2NywgCi0gICAgNzUsIDQ1LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgNjksIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIAotICAgIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDY3LCA3OSwgNzgsIDcxLCA4MiwgNjUsIDg0LCA4NSwgNzYsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgCi0gICAgNDUsIDE4NSwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAxMjgsIDY1LCAKLSAgICA4MiwgNzksIDg1LCA3OCwgNjgsIDQ1LCA4MCwgODIsIDc5LCA3MCwgNzMsIDc2LCA2OSwgMTI4LCA2NywgNzksIDc4LCA2NywgCi0gICAgNjUsIDg2LCA2OSwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4MywgODksIAotICAgIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUxLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDcwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUzLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKLSAgICA3MCwgNjUsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCAKLSAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAotICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCAKLSAgICA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgCi0gICAgNzksIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAxMjgsIDc3LCAKLSAgICA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgCi0gICAgODQsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDY5LCA4MywgODEsIDg1LCA3MywgODEsIAotICAgIDg1LCA2NSwgNjgsIDgyLCA2NSwgODQsIDY5LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKLSAgICA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc4LCA2NSwgCi0gICAgODUsIDE5NiwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDg0LCAKLSAgICA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDY2LCA2NSwgODIsIDY2LCA2OSwgMTk2LCA4NCwgODIsIDc5LCA3NywgCi0gICAgNzMsIDc1LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgCi0gICAgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MSwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCi0gICAgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgCi0gICAgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MywgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCi0gICAgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA4NywgNzIsIDczLCA4NCwgNjksIDQ1LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgCi0gICAgNjksIDE5NiwgODksIDgwLCA3OSwgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgCi0gICAgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIAotICAgIDc5LCA4NywgNjksIDE5NiwgNjYsIDY1LCA3NiwgNzYsIDc5LCA3OSwgNzgsIDQ1LCA4MywgODAsIDc5LCA3NSwgNjksIDE5NiwgCi0gICAgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIAotICAgIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDcyLCAKLSAgICA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNjUsIDgyLCA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgCi0gICAgNzgsIDEyOCwgNjUsIDgzLCA4OSwgNzcsIDgwLCA4NCwgNzksIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgCi0gICAgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCA3OSwgNzEsIAotICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgODIsIDEyOCwgCi0gICAgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDczLCA2OSwgODUsIAotICAgIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCAKLSAgICA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgCi0gICAgNjksIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODQsIDY5LCAKLSAgICA4NCwgNjUsIDgyLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCi0gICAgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIAotICAgIDc5LCA4NSwgNzgsIDE5NiwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNjUsIDg2LCA2NSwgNzUsIDgyLCA2NSwgNzIsIDY1LCA4MywgNjUsIDc4LCA4OSwgNjUsIDEyOCwgNjYsIDc5LCA4NCwgODQsIAotICAgIDc5LCA3NywgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDQ1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA2NywgNzMsIDY5LCA4NSwgCi0gICAgNjcsIDEyOCwgNjcsIDcyLCA4MiwgODksIDgzLCA2NSwgNzgsIDg0LCA3MiwgNjksIDc3LCA4NSwgNzcsIDEyOCwgNjcsIDc5LCAKLSAgICA3OCwgODQsIDY5LCA3NywgODAsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgNzMsIDgzLCA3MiwgNzcsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCAKLSAgICA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgCi0gICAgNzYsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgCi0gICAgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCA3MywgNjksIAotICAgIDg1LCA2NywgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCA3OSwgODIsIAotICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKLSAgICA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgCi0gICAgODIsIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgODQsIDcyLCA2OSwgODIsIDc3LCA3OSwgCi0gICAgNjgsIDg5LCA3OCwgNjUsIDc3LCA3MywgNjcsIDEyOCwgODksIDg1LCA4NSwgNzUsIDY1LCA3NiwgNjksIDY1LCA4MCwgNzMsIAotICAgIDc4LCA4NCwgODUsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA2NSwgCi0gICAgNzgsIDg0LCA3MywgNjcsIDc2LCA3OSwgNjcsIDc1LCA4NywgNzMsIDgzLCAxOTcsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIAotICAgIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgMTI4LCA2NSwgODAsIDgwLCA4MiwgNzksIDg4LCA3MywgNzcsIDY1LCA4NCwgNjksIDc2LCAyMTcsIDY4LCA3MywgNzAsIAotICAgIDcwLCA2OSwgODIsIDY5LCA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCAKLSAgICA3OCwgODQsIDczLCA3OCwgMTk5LCA4MCwgNjUsIDgyLCA2OSwgODMsIDg0LCA3MywgNzEsIDc3LCA2OSwgNzgsIDc5LCAyMDYsIAotICAgIDY3LCA4MiwgODksIDgwLCA4NCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzMsIDE5NSwgNjksIDcxLCA4OSwgODAsIDg0LCAKLSAgICA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgCi0gICAgODUsIDgzLCAxMjgsIDY3LCA3OSwgNzgsIDY3LCA2NSwgODYsIDY5LCA0NSwgODMsIDczLCA2OCwgNjksIDE5NiwgNzYsIDY5LCAKLSAgICA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgCi0gICAgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAotICAgIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4NCwgODIsIDY1LCA3OCwgCi0gICAgODMsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDY4LCA0NSwgODQsIAotICAgIDY1LCA3MywgNzYsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCA2OCwgCi0gICAgODIsIDc5LCA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDcxLCA2NSwgNjksIDg0LCA4NCwgNjUsIAotICAgIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDc2LCAKLSAgICA3NiwgMjE3LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA3OCwgODQsIAotICAgIDY5LCA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCAKLSAgICA4OSwgNDUsIDgzLCA2OSwgNjcsIDc5LCA3OCwgMTk2LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgCi0gICAgNzIsIDg0LCAyMDAsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgNjUsIDY3LCAKLSAgICA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgCi0gICAgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCA3NiwgODMsIDc1LCA2NSwgNjYsIAotICAgIDEyOCwgNjUsIDc4LCA2NSwgODQsIDgyLCA3MywgNjcsIDcyLCA3MywgODMsIDc3LCA2NSwgMTI4LCA2NSwgODUsIDgyLCA2NSwgCi0gICAgNzcsIDY1LCA5MCwgNjgsIDY1LCA2NSwgNDUsIDUwLCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIAotICAgIDY1LCA3MiwgNjUsIDEyOCwgNjYsIDgyLCA2OSwgNjUsIDc1LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA2NiwgCi0gICAgODIsIDY5LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIAotICAgIDg1LCA3NywgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDg5LCA3NiwgNzMsIDc4LCA2OCwgODIsIDczLCA2NywgNzMsIDg0LCAKLSAgICA4OSwgMTI4LCA2OCwgNjksIDY3LCA3MywgODMsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDgzLCAxMjgsIDY4LCA2OSwgNzAsIAotICAgIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDIxMSwgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCAKLSAgICA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIAotICAgIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCAKLSAgICA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCA4NSwgCi0gICAgNzksIDg1LCAyMTEsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OSwgCi0gICAgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIAotICAgIDY4LCA2OSwgNDUsIDc2LCA3MywgODMsIDEyOCwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCAKLSAgICA3OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcyLCA4OSwgODAsIAotICAgIDc5LCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCAKLSAgICA2NywgNDUsIDg5LCA4MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIAotICAgIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIDE5NSwgNzQsIDg1LCA2OCwgNjksIDc5LCAKLSAgICA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCAxMjgsIDc2LCA2NSwgNjYsIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzcsIDY1LCAKLSAgICA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgCi0gICAgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAotICAgIDEyOCwgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzksIDgyLCA4MCwgCi0gICAgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIAotICAgIDczLCA3OCwgNjksIDE5NiwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MiwgCi0gICAgODUsIDc2LCA2OSwgNDUsIDY4LCA2OSwgNzYsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNDgsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTYsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKLSAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU3LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAKLSAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUzLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKLSAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUxLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTYsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKLSAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTMsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTMsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIAotICAgIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzMsIDc5LCA4MywgCi0gICAgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDcyLCA3MywgNjksIAotICAgIDg1LCA3NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIAotICAgIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCAKLSAgICA4MywgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCA4MiwgODMsIDg0LCA3OSwgODIsIDc3LCAxMjgsIDg0LCA3MywgNzUsIAotICAgIDY5LCA4NSwgODQsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCAKLSAgICA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIAotICAgIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgODYsIDc5LCA4NywgNjksIDc2LCAKLSAgICA0NSwgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA4OCwgODMsIDcyLCA2NSwgNjUsIDg5LCA2NSwgODQsIDcyLCA3MywgCi0gICAgODksIDY1LCAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCAKLSAgICA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCA2NSwgMjA0LCA2NSwgODIsIDY1LCA2NiwgNzMsIDY3LCA0NSwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgODAsIDgyLCAKLSAgICA2OSwgODMsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgCi0gICAgNjksIDc4LCA3MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjcsIDQ1LCAKLSAgICA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCAKLSAgICA3OCwgNjgsIDgyLCA2NSwgNjYsIDczLCA3OCwgNjgsIDg1LCAxMjgsIDY5LCA4MiwgODIsIDc5LCA4MiwgNDUsIDY2LCA2NSwgCi0gICAgODIsIDgyLCA2OSwgMTk2LCA4MywgODUsIDY2LCA4MywgODQsIDczLCA4NCwgODUsIDg0LCA3MywgNzksIDIwNiwgNjYsIDc2LCAKLSAgICA2NSwgNjcsIDc1LCA0NSwgNzYsIDY5LCA4NCwgODQsIDY5LCAyMTAsIDY1LCA4MCwgODAsIDgyLCA3OSwgODgsIDczLCA3NywgCi0gICAgNjUsIDg0LCA2OSwgMTI4LCA2NywgNjUsIDc4LCA4NCwgNzMsIDc2LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDc1LCAKLSAgICA3MCwgNzksIDc4LCA3MywgODQsIDczLCA3NSwgNzksIDc4LCAxMjgsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgCi0gICAgNzAsIDczLCA2OSwgMTk2LCA3NywgNzMsIDY4LCA2OCwgNzYsIDY5LCA0NSwgODcsIDY5LCA3NiwgODMsIDIwMCwgODIsIDczLCAKLSAgICA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgCi0gICAgNjUsIDg2LCA2OSwgMjE3LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDgzLCAKLSAgICA4NCwgODIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgCi0gICAgODQsIDg0LCA2NSwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDcyLCA3MywgCi0gICAgNjksIDg1LCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgODIsIDczLCAKLSAgICA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCA2OSwgCi0gICAgNjgsIDcxLCA2OSwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCAKLSAgICA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgCi0gICAgODQsIDczLCA3OCwgMTk5LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODEsIDg1LCAKLSAgICA3MywgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgODQsIDIwMCwgODQsIDgyLCAKLSAgICA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgCi0gICAgNzksIDg1LCA4MiwgMTI4LCA4NywgNjksIDY4LCA3MSwgNjksIDQ1LCA4NCwgNjUsIDczLCA3NiwgNjksIDE5NiwgNjUsIDY5LCAKLSAgICA4MywgNjcsIDg1LCA3NiwgNjUsIDgwLCA3MywgODUsIDgzLCAxMjgsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzcsIDY1LCA3NiwgNzEsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDgwLCAKLSAgICA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA2NSwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDczLCAKLSAgICA2OSwgODUsIDY3LCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY3LCA3OSwgNzgsIDc0LCA4NSwgNzgsIDY3LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCAKLSAgICA3OCwgODQsIDgyLCA2NSwgODIsIDczLCA2OSwgODQsIDg5LCAxMjgsIDY3LCA3OSwgODIsIDgwLCA3OSwgODIsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgNjYsIDc5LCA4MiwgNjksIDEyOCwgNjcsIDc5LCAKLSAgICA4NSwgNzgsIDg0LCA2OSwgODIsIDgzLCA3MywgNzgsIDc1LCAxMjgsIDY4LCA2NSwgNzIsIDg5LCA2NSwgNjUsIDg1LCA4MywgCi0gICAgNzIsIDQ1LCA1MCwgMTI4LCA2OCwgNjksIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzksIDEyOCwgNjgsIDY5LCAKLSAgICA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgCi0gICAgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKLSAgICA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgCi0gICAgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA2OSwgCi0gICAgNzgsIDY4LCA2OSwgMTk2LCA2OSwgNjUsIDc3LCA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIDc4LCAKLSAgICA3NiwgNjUsIDgyLCA3MSwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCA3OCwgMTI4LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDgyLCAKLSAgICA3OSwgNzgsIDg0LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCA3OCwgCi0gICAgNjksIDgzLCA4MywgMTI4LCA3MiwgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA3NiwgMjE3LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCAKLSAgICA4NSwgNzgsIDcxLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCAKLSAgICA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCA3NiwgCi0gICAgNzMsIDg5LCA2NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzYsIDY1LCAKLSAgICA3NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgCi0gICAgNjksIDg1LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDg1LCAKLSAgICA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgCi0gICAgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY5LCAKLSAgICA2NiwgNjksIDc4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzksIDY2LCAKLSAgICA4MywgODQsIDgyLCA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgCi0gICAgNzMsIDc1LCA3MywgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCAKLSAgICA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDc5LCAKLSAgICA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgCi0gICAgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzgsIDcwLCA3OSwgODIsIDkwLCA2NSwgCi0gICAgNzgsIDY4LCA3OSwgMTI4LCA4MiwgNzksIDg1LCA3OCwgNjgsIDQ1LCA4NCwgNzMsIDgwLCA4MCwgNjksIDE5NiwgODMsIDY1LCAKLSAgICA3MSwgNzMsIDg0LCA4NCwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgCi0gICAgNzMsIDc2LCA2OSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIDgzLCA2NSwgNzgsIDE5OSwgODMsIDg1LCAKLSAgICA4MCwgNjksIDgyLCA3MywgNzcsIDgwLCA3OSwgODMsIDY5LCAxOTYsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzAsIDc5LCA3OCwgCi0gICAgNzMsIDY1LCA4MywgMTI4LCA4NCwgNzIsIDY1LCA3OCwgODQsIDcyLCA2NSwgNzUsIDcyLCA2NSwgODQsIDEyOCwgODQsIDcyLCAKLSAgICA4MiwgNjksIDY5LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDg0LCA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgCi0gICAgNzMsIDY1LCA4NCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDIwNiwgODQsIDg3LCAKLSAgICA2OSwgNzgsIDg0LCA4OSwgNDUsIDcwLCA3MywgODYsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3OCwgCi0gICAgNzMsIDc4LCA2OSwgMTI4LCA4NSwgNzgsIDY1LCA4MywgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgNjgsIDEyOCwgODUsIDgwLCAKLSAgICA2NSwgNjgsIDcyLCA3NywgNjUsIDc4LCA3MywgODksIDY1LCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY3LCA3MywgODIsIDY3LCA4NSwgNzcsIDcwLCA3NiwgNjksIDg4LCAxMjgsIDgzLCA4NSwgODAsIDY5LCAKLSAgICA4MiwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAxMjgsIAotICAgIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCAKLSAgICA2OCwgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAyMDEsIDY4LCA2OSwgODMsIAotICAgIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCAKLSAgICAyMTEsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIAotICAgIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA4MCwgNzIsIDY5LCAxMjgsIDY3LCA3MiwgCi0gICAgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDg1LCA4MCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIAotICAgIDc4LCAxOTksIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDczLCA3NywgODAsIDY5LCA4MiwgCi0gICAgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY1LCAKLSAgICA4MiwgODIsIDc5LCA4NywgNDUsIDg0LCA2NSwgNzMsIDc2LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgCi0gICAgNzcsIDY5LCAxOTcsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA3NiwgODQsIDY5LCAKLSAgICA4MiwgNzgsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCA3MywgNzksIDc4LCAxMjgsIAotICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCAKLSAgICA3OCwgNjksIDY1LCAyMTAsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgODAsIAotICAgIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAKLSAgICAxMjgsIDgzLCA2OSwgNzcsIDczLCA0NSwgODYsIDc5LCA3MywgNjcsIDY5LCAxOTYsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4NSwgODAsIDgyLCA2NSwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDY1LCA2OSwgCi0gICAgNjgsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA2OSwgNjcsIDg1LCA4NCwgNzMsIAotICAgIDg2LCAxOTcsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgCi0gICAgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDc3LCAKLSAgICA3OSwgNzgsIDc5LCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA3NywgCi0gICAgNzcsIDc5LCAyMTEsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKLSAgICA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIAotICAgIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCAKLSAgICA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIDczLCAyMDgsIDgwLCA2OSwgODIsIAotICAgIDY3LCA4NSwgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzYsIAotICAgIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3NywgNjksIDc4LCAyMTIsIDgzLCA2NSwgCi0gICAgNzYsIDc2LCA2NSwgNzYsIDc2LCA2NSwgNzIsIDc5LCAyMTMsIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIAotICAgIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDg0LCA2NSwgNjYsIDg1LCA3NiwgNjUsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA3MiwgNjksIDc3LCAKLSAgICA2NSwgODQsIDczLCA4MywgNzcsIDc5LCAyMTEsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgODcsIDc5LCAxMjgsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDY1LCA3OCwgNzEsIDc1LCA3MiwgNjUsIDc4LCA3NSwgNzIsIDg1LCAxMjgsIDY1LCA3OCwgODQsIAotICAgIDczLCA3NSwgNjksIDc4LCA3OSwgNzcsIDY1LCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgODksIDY1LCAKLSAgICAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDgzLCAxMjgsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIAotICAgIDgzLCA2NywgODUsIDgzLCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCAxMjgsIDY2LCA2NSwgCi0gICAgNjcsIDc1LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDY2LCA2NSwgODIsIDczLCA4OSwgNzksIDc5LCA4MywgNjUsIAotICAgIDc4LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDY3LCA3MywgODIsIDY3LCA4NSwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3NiwgODUsIDY2LCA0NSwgODMsIDgwLCA3OSwgNzUsIDY5LCAxOTYsIDY3LCAKLSAgICA3OSwgNzcsIDgwLCA3NiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNzMsIDY1LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3OSwgNzgsIDg0LCAKLSAgICA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgODIsIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDY4LCAyMTEsIAotICAgIDY3LCA4MiwgNzksIDgzLCA4MywgNjYsIDc5LCA3OCwgNjksIDgzLCAxMjgsIDY4LCA2NSwgNzEsIDY2LCA2NSwgODMsIDczLCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA2OSwgNzgsIAotICAgIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKLSAgICAxOTYsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIAotICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgCi0gICAgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIAotICAgIDY5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgCi0gICAgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY5LCA3NSwgODMsIDg0LCA4MiwgNjksIDgwLCA4NCwgNzksIDc4LCAxMjgsIDY5LCAKLSAgICA3NywgNjYsIDgyLCA3OSwgNzMsIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgzLCAxMjgsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCA4MSwgODUsIDczLCAKLSAgICA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIAotICAgIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIDgzLCAKLSAgICA3MiwgNzMsIDgwLCAxMjgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODUsIAotICAgIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCA3OSwgODUsIDgyLCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAKLSAgICAxOTksIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIAotICAgIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA4OSwgCi0gICAgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3NywgNzMsIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIAotICAgIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgCi0gICAgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDc5LCA2NywgNzUsIDY5LCAxOTYsIDc1LCAKLSAgICA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgCi0gICAgODksIDY1LCAxMjgsIDc2LCA2NSwgNzQsIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2OSwgNzAsIDg0LCAKLSAgICA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAxMjgsIAotICAgIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDgzLCAKLSAgICA3MiwgNzMsIDgwLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc4LCA2NSwgNzgsIAotICAgIDcxLCA3NywgNzksIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAKLSAgICAxMjgsIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIAotICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgCi0gICAgNzgsIDY1LCA2OSwgNzYsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCA4NSwgNzgsIAotICAgIDcxLCAxMjgsIDgwLCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgCi0gICAgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCAKLSAgICA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNzIsIDc3LCAKLSAgICA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIAotICAgIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDgzLCA2NSwgNjcsIDgyLCA3MywgNzAsIDczLCA2NywgNzMsIDY1LCAyMDQsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKLSAgICA3MSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIAotICAgIDgzLCA4NSwgNjYsIDgwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCAKLSAgICA4NSwgODQsIDY5LCAxMjgsIDgzLCA4OSwgNzgsIDY3LCA3MiwgODIsIDc5LCA3OCwgNzksIDg1LCAyMTEsIDg0LCA2OSwgODIsIAotICAgIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAKLSAgICAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIAotICAgIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNzMsIDg4LCAxMjgsIDg2LCA2OSwgCi0gICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDg5LCAxMjgsIDg3LCA3MywgNjgsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIAotICAgIDY5LCAxOTYsIDY1LCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNzMsIDE5NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3NywgCi0gICAgNzAsIDc2LCA2OSwgMjE2LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNjksIDgyLCAxMjgsIDgwLCA3MiwgNzksIDY5LCAKLSAgICA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA2NSwgNzgsIAotICAgIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA4MSwgODUsIDczLCA4NiwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgCi0gICAgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4NCwgODcsIDc5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIAotICAgIDY5LCAxOTYsIDY1LCA4MiwgODIsIDc5LCA4NywgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY5LCA4OCwgODQsIDY5LCAKLSAgICA3OCwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgNzIsIAotICAgIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA4MiwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDE5NywgCi0gICAgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIAotICAgIDY5LCAxMjgsIDY1LCA3NywgODAsIDY5LCA4MiwgODMsIDY1LCA3OCwgNjgsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgCi0gICAgODIsIDY4LCA4MywgMTI4LCA4NCwgODIsIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDY3LCA3OSwgNzcsIDc3LCAKLSAgICA2OSwgODIsIDY3LCA3MywgNjUsIDIwNCwgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA4MywgNjksIAotICAgIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgCi0gICAgODcsIDc5LCA3OSwgNjgsIDgzLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA2NiwgNjUsIDY3LCA3NSwgODMsIDc2LCA2NSwgODMsIAotICAgIDcyLCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgCi0gICAgNzIsIDczLCA3MSwgMjAwLCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDczLCA3NywgODAsIDY5LCAKLSAgICA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4MiwgNjksIAotICAgIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgCi0gICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIAotICAgIDc2LCAyMTcsIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgCi0gICAgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA4MCwgNzMsIDY4LCAKLSAgICA2NSwgODUsIDgyLCA2OSwgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDczLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNzksIAotICAgIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgCi0gICAgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgNzMsIAotICAgIDc3LCAxOTMsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgNjksIDEyOCwgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgCi0gICAgNzksIDcwLCA3OSwgMjAxLCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgNzAsIDc5LCAyMTEsIDY1LCA4MiwgODAsIDY5LCAKLSAgICA3MSwgNzEsIDczLCA2NSwgODQsIDIwNywgNjUsIDg0LCA3MiwgNjUsIDgwLCA2NSwgODMsIDY3LCA2NSwgMjA2LCA2NywgNjksIAotICAgIDc4LCA4NCwgODIsIDY5LCA3NiwgNzMsIDc4LCAxOTcsIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgODIsIDEyOCwgCi0gICAgNjcsIDc5LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDcyLCA2NSwgODQsIAotICAgIDY3LCAyMDAsIDY3LCA4NSwgNjUsIDg0LCA4MiwgNzMsIDc2LCA3NiwgNzksIDEyOCwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgNjgsIDczLCA3OCwgMTk5LCA2OSwgNzcsIDY2LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3MywgNzgsIDY1LCAKLSAgICA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIAotICAgIDY5LCA4NCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgCi0gICAgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIAotICAgIDgzLCAxMjgsIDc1LCA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgCi0gICAgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgCi0gICAgODMsIDg1LCA3NywgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODUsIDgwLCA2OSwgODIsIDg2LCA3MywgODMsIAotICAgIDY5LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDQ5LCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTcsIDEyOCwgCi0gICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIAotICAgIDUyLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUzLCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA1MywgNTEsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA1MiwgMTI4LCA4NCwgNjksIAotICAgIDc2LCA2OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgODMsIDY5LCA3NywgNjksIDEyOCwgCi0gICAgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIAotICAgIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgCi0gICAgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg2LCA3MywgODMsIDczLCAKLSAgICA3MSwgNzksIDg0LCA3MiwgNzMsIDE5NSwgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjYsIAotICAgIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgCi0gICAgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzAsIDc5LCA3OCwgNzMsIAotICAgIDY1LCAxMjgsIDY1LCA4MCwgODAsIDgyLCA3OSwgNjUsIDY3LCA3MiwgNjksIDIxMSwgNjUsIDgyLCA0NSwgODIsIDY1LCA3MiwgCi0gICAgNjksIDY5LCA3NywgMTI4LCA2NSwgODMsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4NCwgODQsIDY5LCAKLSAgICA3OCwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTI4LCA2NiwgNjksIAotICAgIDcxLCA3MywgNzgsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY2LCA3MywgNjYsIDc2LCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgCi0gICAgNjYsIDc5LCA3OSwgNzcsIDY5LCA4MiwgNjUsIDc4LCA3MSwgMTI4LCA2NywgNjUsIDgwLCA4MiwgNzMsIDY3LCA3OSwgODIsIAotICAgIDc4LCAxMjgsIDY3LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjcsIDc2LCA3OSwgODMsIDY5LCA3OCwgCi0gICAgNjksIDgzLCA4MywgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgNjksIDY4LCAxMjgsIDY3LCA3OSwgNzgsIDc0LCAKLSAgICA3OSwgNzMsIDc4LCA3MywgNzgsIDE5OSwgNjcsIDc5LCA3OCwgODMsIDg0LCA2NSwgNzgsIDY3LCA4OSwgMTI4LCA2NywgNzksIAotICAgIDgwLCA4OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDY4LCA2NSwgNzIsIDg5LCA2NSwgNjUsIDg1LCA4MywgNzIsIDEyOCwgCi0gICAgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIAotICAgIDY5LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgCi0gICAgODUsIDc2LCA4NCwgMjE3LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY5LCA2OSwgNjYsIDY5LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDc5LCAyMTEsIDY5LCA3OCwgNjgsIDY5LCAKLSAgICA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCA2OCwgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA2OSwgODMsIAotICAgIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA3NiwgNzYsIDY5LCA3OCwgODQsIDEyOCwgCi0gICAgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIAotICAgIDc2LCAxMjgsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgCi0gICAgNzMsIDg2LCA2OSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcxLCA2OSwgNzcsIDczLCAKLSAgICA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzksIAotICAgIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgCi0gICAgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIAotICAgIDg1LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgCi0gICAgNjksIDgzLCA3MywgMjExLCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKLSAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCA3MywgNzgsIAotICAgIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgCi0gICAgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDc4LCA3OSwgNjcsIDY5LCA3OCwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgCi0gICAgNzYsIDY5LCA3NywgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2OSwgNzcsIDgwLCAKLSAgICA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNzMsIAotICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3OCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDY5LCAKLSAgICA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3NywgNzMsIAotICAgIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgCi0gICAgNzcsIDc5LCA3OSwgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIAotICAgIDY1LCAxOTMsIDc3LCA4NSwgNzUsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzgsIDczLCA3MSwgNzEsIDY1LCA3MiwgCi0gICAgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDczLCAKLSAgICA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzksIAotICAgIDY2LCA3OSwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgCi0gICAgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDc3LCA3MywgNzgsIDcxLCA3NSwgNjUsIAotICAgIDc2LCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgCi0gICAgODksIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIDgwLCA2NSwgODIsIDY1LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIAotICAgIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgCi0gICAgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIAotICAgIDgzLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgCi0gICAgODUsIDc5LCA4OSwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIDgxLCA4NSwgNjUsIDg0LCAKLSAgICA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCA2OSwgMTk2LCA4MSwgODUsIAotICAgIDgzLCA3MiwgODMsIDcyLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgNzEsIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgCi0gICAgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIAotICAgIDg0LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgCi0gICAgNzgsIDg1LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDgzLCA2NywgNjUsIDc4LCAKLSAgICA2OCwgNzMsIDY3LCA4NSwgODMsIDEyOCwgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA4MywgNjksIAotICAgIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgCi0gICAgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIAotICAgIDgyLCAxMjgsIDgzLCA3MiwgNzksIDg1LCA3NiwgNjgsIDY5LCA4MiwgNjksIDE5NiwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgCi0gICAgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCAKLSAgICA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODUsIAotICAgIDY2LCA4MywgODQsIDczLCA4NCwgODUsIDg0LCAxOTcsIDgzLCA4NSwgODAsIDY5LCA4MiwgNzAsIDczLCA4OCwgNjksIDE5NiwgCi0gICAgODMsIDg1LCA4MywgODAsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIAotICAgIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDQ5LCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTQsIDEyOCwgCi0gICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIAotICAgIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUxLCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNDgsIDEyOCwgCisgICAgMTk3LCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA2NSwgNzYsIAorICAgIDY5LCAxOTgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODQsIDc5LCAxMjgsIDgzLCA2NywgODIsIDczLCA4MCwgCisgICAgMjEyLCA4NCwgODcsIDc5LCAxMjgsIDc5LCA4NiwgNjksIDIxMCwgMjEzLCA3MiwgNjksIDY1LCA4NiwgMjE3LCA3OSwgNzgsIAorICAgIDY5LCAxMjgsIDg1LCAyMDgsIDc2LCA3OSwgMjE1LCA3MCwgODUsIDc2LCA3NiwgODcsIDczLCA2OCwgODQsIDIwMCwgNzIsIAorICAgIDY1LCAyMDAsIDY4LCA3OSwgODcsIDIwNiwgNjksIDgxLCA4NSwgNjUsIDIwNCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgCisgICAgODQsIDEyOCwgNzIsIDczLCA3MSwgMjAwLCA3OSwgMTk4LCA4NCwgNjUsIDE5OSwgNjgsIDc5LCA3NywgNzMsIDc4LCAyMDcsIAorICAgIDc4LCA4NSwgNzcsIDY5LCA4MiwgNzMsIDE5NSwgNzAsIDgyLCA2NSwgNzUsIDg0LCA4NSwgMjEwLCA3NCwgODUsIDc4LCA3MSwgCisgICAgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3NiwgNjUsIDg5LCA2NSwgNzYsIDY1LCAyMDUsIDg0LCA4NywgMjA3LCAKKyAgICA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgODQsIDczLCAxOTUsIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgCisgICAgMjEwLCA3NiwgNjksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNzcsIDY5LCA2OCwgNzMsIDY1LCAyMDQsIDg0LCAKKyAgICA2OSwgNzYsIDg1LCA3MSwgMjEzLCA2NiwgNjksIDc4LCA3MSwgNjUsIDc2LCAyMDEsIDc5LCA3OCwgMTk3LCA2NSwgODIsIAorICAgIDc3LCA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NCwgNjUsIDg2LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjksIDY5LCAKKyAgICAyMDUsIDY2LCA2NSwgODIsIDEyOCwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgODcsIDY5LCA4MywgODQsIAorICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2NiwgNjUsIDc3LCA4NSwgCisgICAgMjA1LCA4NCwgNzIsIDY1LCAyMDEsIDc1LCA2NSwgNzgsIDc4LCA2NSwgNjgsIDE5MywgNjcsIDcyLCA2OSwgODIsIDc5LCAKKyAgICA3NSwgNjksIDE5NywgNzIsIDY1LCA3NiwgMTk4LCA4NCwgNzksIDc4LCAxOTcsIDc4LCA2OSwgMjE1LCA3OSwgODIsIDczLCAKKyAgICA4OSwgMTkzLCA4NCwgNzIsIDgyLCA2OSwgMTk3LCA2NywgNzIsIDY1LCAyMDUsIDcxLCA4NSwgNzQsIDY1LCA4MiwgNjUsIAorICAgIDg0LCAyMDEsIDc2LCA4NSwgMTk3LCA3MCwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNjUsIDEyOCwgODIsIDg1LCA3OCwgNzMsIAorICAgIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgCisgICAgNjUsIDIwNSwgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDY4LCA2OSwgODMsIDY5LCA4MiwgNjksIDIxMiwgODMsIDczLCAKKyAgICA3OCwgNzIsIDY1LCA3NiwgMTkzLCA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3NywgNjUsIDgyLCAyMDMsIAorICAgIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA4NiwgNzksIDY3LCA2NSwgCisgICAgNzYsIDczLCAxOTUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NiwgNjksIDgwLCA2NywgNzIsIDE5MywgNzYsIDczLCAKKyAgICA3MSwgNzIsIDIxMiwgNzYsIDc5LCA3OCwgMTk5LCA4NCwgODUsIDgyLCA3NSwgNzMsIDE5NSwgNjgsIDc5LCA4NSwgNjYsIAorICAgIDc2LCA2OSwgNDUsIDgzLCA4NCwgODIsIDg1LCA2NywgMjAzLCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA3NSwgNjUsIDEyOCwgCisgICAgODQsIDY1LCA3NywgNzMsIDIwNCwgODYsIDczLCA2OSwgMjEyLCA2NSwgODAsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCAKKyAgICA3MywgNzksIDc4LCA2NSwgMjA0LCA3MiwgNjUsIDc3LCA5MCwgMTkzLCA4MywgNzMsIDg4LCAxMjgsIDg0LCA2OSwgNzYsIAorICAgIDY5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4OSwgNjUsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgODAsIDY1LCAxMjgsIDY4LCA3OSwgODQsIDIxMSwgNzgsIDczLCAKKyAgICA3OCwgNjksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDY2LCA2NSwgODIsIDE5NCwgNjgsIDY1LCA4MywgNzMsIAorICAgIDE5MywgNzUsIDY1LCA3MywgODQsIDcyLCAyMDEsIDc2LCA3MywgNzcsIDY2LCAyMTMsIDc3LCA2NSwgMTI4LCA3NywgNjUsIAorICAgIDc1LCA4MywgODUsIDgyLCAxOTMsIDgzLCAxMjgsIDg0LCAyMDcsIDY2LCA3OSwgODAsIDc5LCA3NywgNzksIDcwLCAyMDcsIAorICAgIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgNzYsIDY1LCAyMDcsIDgyLCA2NSwgMTI4LCA4MywgCisgICAgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDcyLCA2OSwgODgsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDc1LCAxOTMsIDc4LCAKKyAgICA2NSwgMTI4LCA4MCwgODMsIDczLCA3NiwgMjAxLCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgMTk2LCA3NywgNzksIAorICAgIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzgsIDc5LCAyMTIsIDgzLCA2NSwgNzcsIDY1LCA4MiwgNzMsIDg0LCA2NSwgCisgICAgMjA2LCA4MywgODQsIDgyLCA3OSwgNzUsIDE5NywgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg2LCAxMjgsIDkwLCA5MCwgCisgICAgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg5LCAKKyAgICA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCAKKyAgICA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIAorICAgIDg1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgNzksIDEyOCwgOTAsIAorICAgIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgOTAsIDkwLCA3MywgCisgICAgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIDEyOCwgOTAsIDkwLCAKKyAgICA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDY5LCA4MCwgMTI4LCAKKyAgICA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIDkwLCA5MCwgNjUsIAorICAgIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgNjUsIDEyOCwgOTAsIAorICAgIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgNjUsIDgyLCA2NSwgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAKKyAgICAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCAKKyAgICA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCAKKyAgICA4NSwgMTgxLCA5MCwgODIsIDY1LCAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCAKKyAgICA3OSwgNzksIDEyOCwgOTAsIDc5LCA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCAKKyAgICA3NiwgMTkzLCA5MCwgNzQsIDY5LCAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCAKKyAgICA5MCwgNzMsIDc4LCA3OSwgODIsIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgCisgICAgMTk5LCA5MCwgNzMsIDcxLCAxMjgsIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIAorICAgIDczLCA1MSwgMTI4LCA5MCwgMjAxLCA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIAorICAgIDg5LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgCisgICAgMTI4LCA5MCwgNzIsIDg3LCA2OSwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgCisgICAgNzIsIDg1LCA4NCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCAKKyAgICA4NSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIAorICAgIDg1LCA3OSwgMTI4LCA5MCwgNzIsIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIAorICAgIDkwLCA3MiwgNzksIDgwLCAxMjgsIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgCisgICAgODYsIDY5LCA4NCwgNjksIDEyOCwgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCAKKyAgICA4NCwgMTI4LCA5MCwgNzIsIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCAKKyAgICA3MiwgMTk3LCA5MCwgNzIsIDY1LCA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCAKKyAgICA5MCwgNzIsIDY1LCA4MCwgMTI4LCA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIAorICAgIDcyLCA2NSwgMTI4LCA5MCwgNzIsIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIAorICAgIDY5LCA4MiwgMjA3LCA5MCwgNjksIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgCisgICAgNzYsIDc0LCA2NSwgMTI4LCA5MCwgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgCisgICAgODksIDczLCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgOTAsIDY1LCA4NCwgNjUsIDEyOCwgOTAsIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIAorICAgIDkwLCA2NSwgNzcsIDg4LCAxMjgsIDkwLCA2NSwgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIAorICAgIDkwLCA2NSwgNzMsIDEyOCwgOTAsIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgNjUsIAorICAgIDY5LCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDcxLCAxMjgsIDkwLCA0OCwgCisgICAgNDksIDU0LCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY4LCAxMjgsIDkwLCAKKyAgICA0OCwgNDksIDU0LCA2NywgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIAorICAgIDkwLCA0OCwgNDksIDU0LCAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNzIsIDEyOCwgCisgICAgOTAsIDQ4LCA0OSwgNTMsIDcxLCAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjksIAorICAgIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY4LCAxMjgsIDkwLCA0OCwgNDksIDUzLCA2NywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgCisgICAgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDUzLCAxMjgsIDkwLCA0OCwgNDksIDUyLCAKKyAgICAxMjgsIDkwLCA0OCwgNDksIDUxLCAxMjgsIDkwLCA0OCwgNDksIDUwLCAxMjgsIDkwLCA0OCwgNDksIDQ5LCAxMjgsIDkwLCAKKyAgICA0OCwgNDksIDQ4LCAxMjgsIDkwLCA0OCwgNDgsIDU3LCAxMjgsIDkwLCA0OCwgNDgsIDU2LCAxMjgsIDkwLCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDkwLCA0OCwgNDgsIDU0LCAxMjgsIDkwLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MywgCisgICAgMTI4LCA5MCwgNDgsIDQ4LCA1MiwgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTIsIDEyOCwgOTAsIDQ4LCA0OCwgNTEsIDY2LCAKKyAgICAxMjgsIDkwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MSwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjgsIAorICAgIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDY3LCAxMjgsIDkwLCA0OCwgNDgsIDUwLCA2NiwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgCisgICAgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDEyOCwgOTAsIDQ4LCA0OCwgNDksIDEyOCwgOTAsIDEyOCwgMjE4LCA4OSwgODksIAorICAgIDg4LCAxMjgsIDg5LCA4OSwgODQsIDEyOCwgODksIDg5LCA4MiwgODgsIDEyOCwgODksIDg5LCA4MiwgMTI4LCA4OSwgODksIAorICAgIDgwLCAxMjgsIDg5LCA4OSwgNjksIDEyOCwgODksIDg5LCA2NSwgMTI4LCA4OSwgODksIDEyOCwgODksIDg3LCA3OSwgNzksIAorICAgIDEyOCwgODksIDg3LCA3OSwgMTI4LCA4OSwgODcsIDczLCA3MywgMTI4LCA4OSwgODcsIDczLCAxMjgsIDg5LCA4NywgNjksIAorICAgIDEyOCwgODksIDg3LCA2NSwgNjUsIDEyOCwgODksIDg3LCA2NSwgMTI4LCA4OSwgODYsIDEyOCwgODksIDg1LCA4OCwgMTI4LCAKKyAgICA4OSwgODUsIDg1LCA3NSwgNjUsIDc2LCA2OSwgNjUsIDgwLCA3MywgNzgsIDg0LCA4NSwgMTI4LCA4OSwgODUsIDg0LCAxMjgsIAorICAgIDg5LCA4NSwgODMsIDEyOCwgODksIDg1LCAyMTEsIDg5LCA4NSwgODIsIDg4LCAxMjgsIDg5LCA4NSwgODIsIDEyOCwgODksIAorICAgIDg1LCA4MSwgMTI4LCA4OSwgODUsIDgwLCAxMjgsIDg5LCA4NSwgNzksIDg4LCAxMjgsIDg5LCA4NSwgNzksIDg0LCAxMjgsIAorICAgIDg5LCA4NSwgNzksIDgwLCAxMjgsIDg5LCA4NSwgNzksIDEyOCwgODksIDg1LCA2OCwgNzIsIDEyOCwgODksIDg1LCA2OCwgCisgICAgMjAwLCA4OSwgODUsIDY1LCA3OCwgMTI4LCA4OSwgODUsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCAKKyAgICA2OSwgMTI4LCA4OSwgODUsIDQ1LCA4NSwgMTI4LCA4OSwgODUsIDQ1LCA3OSwgMTI4LCA4OSwgODUsIDQ1LCA3MywgMTI4LCAKKyAgICA4OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgODksIDg1LCA0NSwgNjksIDEyOCwgODksIDg1LCA0NSwgNjUsIDY5LCAxMjgsIAorICAgIDg5LCA4NSwgNDUsIDY1LCAxMjgsIDg5LCA4NSwgMTI4LCA4OSwgMjEzLCA4OSwgODAsIDgzLCA3MywgNzYsIDczLCAxMjgsIAorICAgIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDczLCAxMjgsIDg5LCA4MCwgNzksIDc1LCA4MiwgNzMsIDgzLCA3MywgODMsIDEyOCwgCisgICAgODksIDgwLCA3OSwgNzUsIDgyLCA3MywgODMsIDczLCAyMTEsIDg5LCA4MCwgNzksIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIAorICAgIDc3LCA2OSwgNzgsIDczLCAxMjgsIDg5LCA3OSwgODksIDEyOCwgODksIDc5LCA4OCwgMTI4LCA4OSwgNzksIDg1LCA4NCwgCisgICAgNzIsIDcwLCA4NSwgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCAyMDQsIDg5LCAKKyAgICA3OSwgODQsIDEyOCwgODksIDc5LCA4MiwgNzMsIDEyOCwgODksIDc5LCA4MSwgMTI4LCA4OSwgNzksIDgwLCAxMjgsIDg5LCAKKyAgICA3OSwgNzksIDEyOCwgODksIDc5LCA3NywgNzksIDEyOCwgODksIDc5LCA3MSwgNzIsIDEyOCwgODksIDc5LCA2OCwgNzIsIAorICAgIDEyOCwgODksIDc5LCA2OCwgMTI4LCA4OSwgNzksIDE5NiwgODksIDc5LCA2NSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjksIAorICAgIDc5LCAxMjgsIDg5LCA3OSwgNDUsIDg5LCA2NSwgNjksIDEyOCwgODksIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA3OSwgCisgICAgNDUsIDc5LCAxMjgsIDg5LCA3OSwgNDUsIDczLCAxMjgsIDg5LCA3OSwgNDUsIDY5LCA3OSwgMTI4LCA4OSwgNzksIDQ1LCAKKyAgICA2NSwgNjksIDEyOCwgODksIDc5LCA0NSwgNjUsIDEyOCwgODksIDc5LCAxMjgsIDg5LCAyMDcsIDg5LCA3MywgOTAsIDY5LCAKKyAgICA4NCwgMTI4LCA4OSwgNzMsIDg4LCAxMjgsIDg5LCA3MywgODcsIDc4LCAxMjgsIDg5LCA3MywgODQsIDEyOCwgODksIDczLCAKKyAgICA4MCwgMTI4LCA4OSwgNzMsIDc4LCA3MSwgMTI4LCA4OSwgNzMsIDczLCAxMjgsIDg5LCA3MywgMTk5LCA4OSwgNzMsIDY5LCAKKyAgICA4OCwgMTI4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA4OSwgNzMsIDY5LCA4MCwgMTI4LCA4OSwgNzMsIDY5LCAxMjgsIDg5LCAKKyAgICA3MywgNjgsIDY4LCA3MywgODMsIDIwMCwgODksIDczLCA0NSwgODUsIDEyOCwgODksIDczLCAxMjgsIDg5LCA3MCwgNjksIAorICAgIDgzLCA3MywgODMsIDEyOCwgODksIDcwLCA2OSwgODMsIDczLCAyMTEsIDg5LCA3MCwgNjksIDIwNiwgODksIDY5LCA4OSwgCisgICAgMTI4LCA4OSwgNjksIDg3LCAxMjgsIDg5LCA2OSwgODQsIDczLCA4NiwgMTI4LCA4OSwgNjksIDgzLCA4NCwgODUsIDEyOCwgCisgICAgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCA4MywgNzMsIAorICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDcxLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgCisgICAgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODksIDY5LCAKKyAgICA4MiwgODUsIDEyOCwgODksIDY5LCA4MiwgMjEzLCA4OSwgNjksIDgyLCA3MywgMTI4LCA4OSwgNjksIDgyLCA2NSwgMjAwLCAKKyAgICA4OSwgNjksIDgyLCAxMjgsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4OSwgNjksIAorICAgIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA4NSwgMTI4LCA4OSwgNjksIDc5LCA0NSwgNzksIDEyOCwgCisgICAgODksIDY5LCA3OCwgNzMsIDgzLCA2OSwgMjAxLCA4OSwgNjksIDc4LCA2NSwgODAsIDEyOCwgODksIDY5LCAyMDYsIDg5LCAKKyAgICA2OSwgNzYsIDc2LCA3OSwgODcsIDEyOCwgODksIDY5LCA3MiwgMTI4LCA4OSwgNjksIDY5LCAxMjgsIDg5LCA2OSwgNjUsIAorICAgIDIxMCwgODksIDY5LCA2NSwgMTI4LCA4OSwgNjUsIDkwLCA5MCwgMTI4LCA4OSwgNjUsIDkwLCA3MiwgMTI4LCA4OSwgNjUsIAorICAgIDkwLCAxMjgsIDg5LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg5LCA2NSwgODksIDEyOCwgODksIDY1LCA4NywgCisgICAgMTI4LCA4OSwgNjUsIDg2LCAxMjgsIDg5LCA2NSwgODQsIDg0LCAxMjgsIDg5LCA2NSwgODQsIDczLCAxMjgsIDg5LCA2NSwgCisgICAgODQsIDcyLCAxMjgsIDg5LCA2NSwgODQsIDEyOCwgODksIDY1LCA4MywgODMsIDEyOCwgODksIDY1LCA4MywgNzIsIDEyOCwgCisgICAgODksIDY1LCA4MywgMTI4LCA4OSwgNjUsIDgyLCA4MiwgMTI4LCA4OSwgNjUsIDgyLCAxMjgsIDg5LCA2NSwgMjEwLCA4OSwgCisgICAgNjUsIDgxLCAxMjgsIDg5LCA2NSwgODAsIDEyOCwgODksIDY1LCA3OCwgNzEsIDEyOCwgODksIDY1LCA3OCwgMTk5LCA4OSwgCisgICAgNjUsIDc4LCAxMjgsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA4OSwgNjUsIDc3LCA2NSwgNzUsIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODksIDY1LCA3NywgMTI4LCA4OSwgNjUsIDc2LCAxMjgsIDg5LCA2NSwgNzUsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIAorICAgIDc1LCA3MiwgMTI4LCA4OSwgNjUsIDc1LCA2NSwgODMsIDcyLCAxMjgsIDg5LCA2NSwgNzUsIDEyOCwgODksIDY1LCA3NCwgCisgICAgODUsIDgyLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4OSwgNjUsIDc0LCAxMjgsIDg5LCA2NSwgNzIsIDcyLCAxMjgsIDg5LCAKKyAgICA2NSwgNzIsIDEyOCwgODksIDY1LCA3MSwgNzgsIDEyOCwgODksIDY1LCA3MSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIAorICAgIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDEyOCwgODksIDY1LCA3MCwgMTI4LCA4OSwgNjUsIDY4LCA3MiwgMTI4LCA4OSwgNjUsIAorICAgIDY4LCA2OCwgNzIsIDEyOCwgODksIDY1LCA2OCwgNjgsIDEyOCwgODksIDY1LCA2OCwgMTI4LCA4OSwgNjUsIDY3LCA3MiwgCisgICAgMTI4LCA4OSwgNjUsIDY2LCA3MiwgMTI4LCA4OSwgNjUsIDY2LCAxMjgsIDg5LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA4OSwgCisgICAgNjUsIDY1LCA3MywgMTI4LCA4OSwgNjUsIDY1LCA2OCwgNzksIDEyOCwgODksIDY1LCA2NSwgMTI4LCA4OSwgNjUsIDQ1LCAKKyAgICA4OSwgNzksIDEyOCwgODksIDY1LCA0NSwgODUsIDEyOCwgODksIDY1LCA0NSwgNzksIDEyOCwgODksIDQ4LCA0OCwgNTYsIAorICAgIDEyOCwgODksIDQ4LCA0OCwgNTUsIDEyOCwgODksIDQ4LCA0OCwgNTQsIDEyOCwgODksIDQ4LCA0OCwgNTMsIDEyOCwgODksIAorICAgIDQ4LCA0OCwgNTIsIDEyOCwgODksIDQ4LCA0OCwgNTEsIDEyOCwgODksIDQ4LCA0OCwgNTAsIDEyOCwgODksIDQ4LCA0OCwgCisgICAgNDksIDY1LCAxMjgsIDg5LCA0OCwgNDgsIDQ5LCAxMjgsIDg5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4OCwgODksIDg4LCAKKyAgICAxMjgsIDg4LCA4OSwgODUsIDEyOCwgODgsIDg5LCA4NCwgMTI4LCA4OCwgODksIDgyLCA4OCwgMTI4LCA4OCwgODksIDgyLCAKKyAgICAxMjgsIDg4LCA4OSwgODAsIDEyOCwgODgsIDg5LCA3OSwgMTI4LCA4OCwgODksIDczLCAxMjgsIDg4LCA4OSwgNjksIDY5LCAKKyAgICAxMjgsIDg4LCA4OSwgNjksIDEyOCwgODgsIDg5LCA2NSwgNjUsIDEyOCwgODgsIDg5LCA2NSwgMTI4LCA4OCwgODksIDEyOCwgCisgICAgODgsIDg3LCA3MywgMTI4LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA4OCwgODcsIDY5LCAxMjgsIDg4LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDg4LCA4NywgNjUsIDEyOCwgODgsIDg2LCA2OSwgMTI4LCA4OCwgODYsIDY1LCAxMjgsIDg4LCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDg4LCA4NSwgNzksIDEyOCwgODgsIDg1LCAxMjgsIDg4LCA4MywgNzIsIDY1LCA2NSwgODksIDY1LCA4NCwgNzIsIAorICAgIDczLCA4OSwgNjUsIDEyOCwgODgsIDc5LCA4OCwgMTI4LCA4OCwgNzksIDg0LCAxMjgsIDg4LCA3OSwgODIsIDEyOCwgODgsIAorICAgIDc5LCA4MCwgMTI4LCA4OCwgNzksIDY1LCAxMjgsIDg4LCA3OSwgMTI4LCA4OCwgNzMsIDg4LCAxMjgsIDg4LCA3MywgODQsIAorICAgIDEyOCwgODgsIDczLCA4MiwgNzksIDIwNiwgODgsIDczLCA4MCwgMTI4LCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA4OCwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA4OCwgNzMsIDY5LCA4MCwgMTI4LCA4OCwgNzMsIDY5LCAxMjgsIDg4LCA3MywgMTI4LCA4OCwgNzEsIAorICAgIDEyOCwgODgsIDY5LCA4MywgODQsIDY5LCAyMTEsIDg4LCA2OSwgNzIsIDEyOCwgODgsIDY5LCA2OSwgMTI4LCA4OCwgNjksIAorICAgIDEyOCwgODgsIDY1LCA3OCwgMTI4LCA4OCwgNjUsIDY1LCAxMjgsIDg4LCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NiwgNjUsIAorICAgIDEyOCwgODgsIDQ4LCA0OCwgNTYsIDEyOCwgODgsIDQ4LCA0OCwgNTUsIDEyOCwgODgsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIAorICAgIDg4LCA0OCwgNDgsIDU0LCAxMjgsIDg4LCA0OCwgNDgsIDUzLCAxMjgsIDg4LCA0OCwgNDgsIDUyLCA2NiwgMTI4LCA4OCwgCisgICAgNDgsIDQ4LCA1MiwgNjUsIDEyOCwgODgsIDQ4LCA0OCwgNTIsIDEyOCwgODgsIDQ4LCA0OCwgNTEsIDEyOCwgODgsIDQ4LCAKKyAgICA0OCwgNTAsIDEyOCwgODgsIDQ4LCA0OCwgNDksIDEyOCwgODcsIDkwLCAxMjgsIDg3LCA4OSwgNzgsIDc4LCAxMjgsIDg3LCAKKyAgICA4OSwgNzgsIDIwNiwgODcsIDg2LCAxMjgsIDg3LCA4NSwgNzksIDg4LCAxMjgsIDg3LCA4NSwgNzksIDgwLCAxMjgsIDg3LCAKKyAgICA4NSwgNzksIDEyOCwgODcsIDg1LCA3OCwgNzQsIDIwNywgODcsIDg1LCA3OCwgMTI4LCA4NywgODUsIDc2LCA4NSwgMTI4LCAKKyAgICA4NywgODUsIDc2LCAyMTMsIDg3LCA4NSwgNjksIDEyOCwgODcsIDg1LCAxMjgsIDg3LCA4MiwgNzksIDc4LCA3MSwgMTI4LCAKKyAgICA4NywgODIsIDczLCA4NCwgNzMsIDc4LCAxOTksIDg3LCA4MiwgNjksIDY1LCA4NCwgMjAwLCA4NywgODIsIDY1LCA4MCwgCisgICAgMTI4LCA4NywgNzksIDg4LCAxMjgsIDg3LCA3OSwgODIsIDc1LCAxMjgsIDg3LCA3OSwgODIsIDIwMywgODcsIDc5LCA4MiwgCisgICAgNjgsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTI4LCA4NywgNzksIDgyLCAxOTYsIDg3LCA3OSwgODAsIDEyOCwgODcsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgODcsIDc5LCA3OSwgNzYsIDEyOCwgODcsIDc5LCA3OSwgNjgsIDgzLCA0NSwgNjcsIDgyLCA2OSwgCisgICAgMTk3LCA4NywgNzksIDc5LCA2OCwgMTI4LCA4NywgNzksIDc4LCAxMjgsIDg3LCA3OSwgMjA2LCA4NywgNzksIDc3LCA2NSwgCisgICAgNzgsIDEyOCwgODcsIDc5LCA3NiwgNzksIDgzLCA3OSwgMTI4LCA4NywgNzksIDY5LCAxMjgsIDg3LCA3OSwgNjUsIDEyOCwgCisgICAgODcsIDczLCA4NCwgNzIsIDc5LCA4NSwgMjEyLCA4NywgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDg3LCA3MywgNzgsIDc0LCAKKyAgICA2NSwgMTI4LCA4NywgNzMsIDc4LCA2OSwgMTI4LCA4NywgNzMsIDc4LCA2OCwgODUsIDEyOCwgODcsIDczLCA3OCwgNjgsIAorICAgIDEyOCwgODcsIDczLCA3OCwgMTI4LCA4NywgNzMsIDcxLCA3OCwgODksIDY1LCA3OCwgMTI4LCA4NywgNzMsIDcxLCA3MSwgCisgICAgNzYsIDIxNywgODcsIDczLCA2OCwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODcsIDczLCA2OCwgMTk3LCAKKyAgICA4NywgNzMsIDY1LCA3OCwgNzEsIDg3LCA2NSwgNjUsIDc1LCAxMjgsIDg3LCA3MywgNjUsIDc4LCA3MSwgMTI4LCA4NywgNzIsIAorICAgIDc5LCA3NiwgMTk3LCA4NywgNzIsIDczLCA4NCwgNjksIDQ1LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgNjksIDE5NiwgCisgICAgODcsIDcyLCA3MywgODQsIDY5LCAxMjgsIDg3LCA3MiwgNjksIDY5LCA3NiwgNjksIDE5NiwgODcsIDcyLCA2OSwgNjksIDc2LCAKKyAgICA2NywgNzIsIDY1LCA3MywgMjEwLCA4NywgNzIsIDY5LCA2OSwgNzYsIDEyOCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODcsIAorICAgIDcyLCA2OSwgNjUsIDg0LCAxMjgsIDg3LCA3MSwgMTI4LCA4NywgNjksIDg4LCAxMjgsIDg3LCA2OSwgODMsIDg0LCA2OSwgCisgICAgODIsIDIwNiwgODcsIDY5LCA4MywgODQsIDEyOCwgODcsIDY5LCA4MywgMjEyLCA4NywgNjksIDgwLCAxMjgsIDg3LCA2OSwgCisgICAgNzksIDEyOCwgODcsIDY5LCA3OCwgMTI4LCA4NywgNjksIDc2LCA3NiwgMTI4LCA4NywgNjksIDczLCA3MSwgNzIsIDIxMiwgCisgICAgODcsIDY5LCA2OSwgNzgsIDEyOCwgODcsIDY5LCA2OCwgNzEsIDY5LCA0NSwgODQsIDY1LCA3MywgNzYsIDY5LCAxOTYsIDg3LCAKKyAgICA2OSwgNjUsIDgwLCA3OSwgNzgsIDEyOCwgODcsIDY2LCAxMjgsIDg3LCA2NSwgODksIDEyOCwgODcsIDY1LCAyMTcsIDg3LCAKKyAgICA2NSwgODgsIDEyOCwgODcsIDY1LCA4NywgNDUsIDY1LCA4OSwgNzMsIDc4LCA0NSwgODIsIDY5LCA4MywgNzIsIDEyOCwgODcsIAorICAgIDY1LCA4NywgMTI4LCA4NywgNjUsIDIxNSwgODcsIDY1LCA4NiwgMjE3LCA4NywgNjUsIDg2LCA2OSwgMTI4LCA4NywgNjUsIAorICAgIDg2LCAxOTcsIDg3LCA2NSwgODUsIDEyOCwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDg3LCA2NSwgODQsIDY5LCA4MiwgCisgICAgMTI4LCA4NywgNjUsIDg0LCA2OSwgMjEwLCA4NywgNjUsIDg0LCA2NywgNzIsIDEyOCwgODcsIDY1LCA4NCwgMTI4LCA4NywgCisgICAgNjUsIDgzLCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA4NywgNjUsIDgzLCA4MywgNjUsIDc2LCA3NiwgNjUsIDc3LCAxMjgsIDg3LCAKKyAgICA2NSwgODMsIDc2LCA2NSwgMTI4LCA4NywgNjUsIDgzLCA3NiwgMTkzLCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzcsIAorICAgIDEyOCwgODcsIDY1LCA4MywgNjUsIDc2LCA3NiwgNjUsIDIwNSwgODcsIDY1LCA4MiwgNzgsIDczLCA3OCwgMTk5LCA4NywgCisgICAgNjUsIDgwLCAxMjgsIDg3LCA2NSwgNzgsIDY4LCA2OSwgODIsIDY5LCA4MiwgMTI4LCA4NywgNjUsIDc4LCAxMjgsIDg3LCAKKyAgICA2NSwgNzYsIDc2LCAxMjgsIDg3LCA2NSwgNzYsIDc1LCAxMjgsIDg3LCA2NSwgNzYsIDIwMywgODcsIDY1LCA3MywgODQsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgODcsIDY1LCA3MywgMTI4LCA4NywgNjUsIDY5LCA3OCwgMTI4LCA4NywgNjUsIDY5LCAxMjgsIAorICAgIDg3LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NywgNDgsIDUwLCA1MywgMTI4LCA4NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgCisgICAgODcsIDQ4LCA1MCwgNTIsIDEyOCwgODcsIDQ4LCA1MCwgNTEsIDEyOCwgODcsIDQ4LCA1MCwgNTAsIDEyOCwgODcsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgODcsIDQ4LCA1MCwgNDgsIDEyOCwgODcsIDQ4LCA0OSwgNTcsIDEyOCwgODcsIDQ4LCA0OSwgNTYsIAorICAgIDY1LCAxMjgsIDg3LCA0OCwgNDksIDU2LCAxMjgsIDg3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA4NywgNDgsIDQ5LCA1NSwgCisgICAgMTI4LCA4NywgNDgsIDQ5LCA1NCwgMTI4LCA4NywgNDgsIDQ5LCA1MywgMTI4LCA4NywgNDgsIDQ5LCA1MiwgNjUsIDEyOCwgCisgICAgODcsIDQ4LCA0OSwgNTIsIDEyOCwgODcsIDQ4LCA0OSwgNTEsIDEyOCwgODcsIDQ4LCA0OSwgNTAsIDEyOCwgODcsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgODcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDg3LCA0OCwgNDksIDQ4LCAxMjgsIDg3LCA0OCwgNDgsIAorICAgIDU3LCA2NSwgMTI4LCA4NywgNDgsIDQ4LCA1NywgMTI4LCA4NywgNDgsIDQ4LCA1NiwgMTI4LCA4NywgNDgsIDQ4LCA1NSwgCisgICAgMTI4LCA4NywgNDgsIDQ4LCA1NCwgMTI4LCA4NywgNDgsIDQ4LCA1MywgMTI4LCA4NywgNDgsIDQ4LCA1MiwgMTI4LCA4NywgCisgICAgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODcsIDQ4LCA0OCwgNTEsIDEyOCwgODcsIDQ4LCA0OCwgNTAsIDEyOCwgODcsIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgODYsIDkwLCA3NywgNjksIDg0LCAxMjgsIDg2LCA4OSwgODgsIDEyOCwgODYsIDg5LCA4NCwgMTI4LCAKKyAgICA4NiwgODksIDgyLCA4OCwgMTI4LCA4NiwgODksIDgyLCAxMjgsIDg2LCA4OSwgODAsIDEyOCwgODYsIDg5LCAxMjgsIDg2LCAKKyAgICA4NywgNjUsIDEyOCwgODYsIDg1LCA4OCwgMTI4LCA4NiwgODUsIDg0LCAxMjgsIDg2LCA4NSwgODIsIDg4LCAxMjgsIDg2LCAKKyAgICA4NSwgODIsIDEyOCwgODYsIDg1LCA4MCwgMTI4LCA4NiwgODUsIDc2LCA3MSwgNjUsIDIxMCwgODYsIDgyLCA2NSwgNjcsIAorICAgIDcyLCA4OSwgMTI4LCA4NiwgNzksIDg4LCAxMjgsIDg2LCA3OSwgODcsIDY5LCA3NiwgNDUsIDY3LCA2NSwgODIsIDgyLCA3MywgCisgICAgNjksIDIxMCwgODYsIDc5LCA4NywgMTI4LCA4NiwgNzksIDg1LCAxMjgsIDg2LCA3OSwgODQsIDEyOCwgODYsIDc5LCA4MCwgCisgICAgMTI4LCA4NiwgNzksIDc5LCAxMjgsIDg2LCA3OSwgNzYsIDg1LCA3NywgMTk3LCA4NiwgNzksIDc2LCA4NCwgNjUsIDcxLCAKKyAgICAxOTcsIDg2LCA3OSwgNzMsIDE5NiwgODYsIDc5LCA3MywgNjcsIDczLCA3OCwgNzEsIDEyOCwgODYsIDc5LCA3MywgNjcsIAorICAgIDY5LCA3NiwgNjksIDgzLCAyMTEsIDg2LCA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4NiwgNzksIDY3LCA2NSwgMjA0LCA4NiwgCisgICAgNzksIDEyOCwgODYsIDczLCA4OCwgMTI4LCA4NiwgNzMsIDg0LCAxMjgsIDg2LCA3MywgODMsIDczLCA3MSwgNzksIDg0LCAKKyAgICA3MiwgNzMsIDE5NSwgODYsIDczLCA4MywgNjUsIDgyLCA3MSwgNjUsIDg5LCA2NSwgMTI4LCA4NiwgNzMsIDgzLCA2NSwgODIsIAorICAgIDcxLCA2NSwgMTI4LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCAxOTMsIDg2LCA3MywgODIsIDczLCA2NSwgNzcsIDEyOCwgCisgICAgODYsIDczLCA4MiwgNzEsIDc5LCAxMjgsIDg2LCA3MywgODIsIDcxLCA2NSwgMTI4LCA4NiwgNzMsIDgyLCA2NSwgNzcsIDY1LCAKKyAgICAxMjgsIDg2LCA3MywgODAsIDEyOCwgODYsIDczLCA3OCwgNjksIDEyOCwgODYsIDczLCA3OCwgMTI4LCA4NiwgNzMsIDc2LCAKKyAgICA3NiwgNjUsIDcxLCA2OSwgMTI4LCA4NiwgNzMsIDY5LCA4OCwgMTI4LCA4NiwgNzMsIDY5LCA4NywgNjgsIDY1LCA4NCwgCisgICAgMTkzLCA4NiwgNzMsIDY5LCA4NCwgMTI4LCA4NiwgNzMsIDY5LCA4MCwgMTI4LCA4NiwgNzMsIDY5LCAxMjgsIDg2LCA3MywgCisgICAgNjgsIDY1LCAxMjgsIDg2LCA3MywgNjcsIDg0LCA3OSwgODIsIDIxNywgODYsIDczLCAxMjgsIDg2LCA2OSwgODgsIDEyOCwgCisgICAgODYsIDY5LCA4NywgMTI4LCA4NiwgNjksIDIxNSwgODYsIDY5LCA4MywgODQsIDY1LCAxMjgsIDg2LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMjA0LCA4NiwgNjksIDgyLCAyMTcsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDg5LCAxMjgsIAorICAgIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCisgICAgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgCisgICAgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgCisgICAgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgCisgICAgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgCisgICAgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgCisgICAgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgCisgICAgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgCisgICAgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgCisgICAgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIAorICAgIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4MywgNzMsIDY3LCA3NiwgNjksIDEyOCwgODYsIDY5LCA4MiwgODMsIDE5NywgODYsIDY5LCA4MiwgNzEsIDY5LCAKKyAgICAxMjgsIDg2LCA2OSwgODAsIDEyOCwgODYsIDY5LCA3OCwgNjgsIDEyOCwgODYsIDY5LCA3MiwgMTI4LCA4NiwgNjksIDIwMCwgCisgICAgODYsIDY5LCA2OSwgMTI4LCA4NiwgNjksIDE5NywgODYsIDY5LCA2OCwgNjksIDEyOCwgODYsIDY5LCA2NywgODQsIDc5LCAKKyAgICAyMTAsIDg2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg2LCA2NSwgODgsIDEyOCwgODYsIDY1LCA4NiwgMTI4LCAKKyAgICA4NiwgNjUsIDIxNCwgODYsIDY1LCA4NCwgNzIsIDg5LCAxMjgsIDg2LCA2NSwgODQsIDEyOCwgODYsIDY1LCA4MywgODQsIAorICAgIDc4LCA2OSwgODMsIDIxMSwgODYsIDY1LCA4MywgNzMsIDgzLCAxMjgsIDg2LCA2NSwgODIsIDg5LCAyMTEsIDg2LCA2NSwgCisgICAgODIsIDczLCA3NSwgNjUsIDEyOCwgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgMjEyLCA4NiwgNjUsIDgyLCA3MywgNjUsIAorICAgIDEyOCwgODYsIDY1LCA4MiwgNzMsIDE5MywgODYsIDY1LCA4MiwgNjksIDczLCA2NSwgMjAxLCA4NiwgNjUsIDgyLCA2OSwgCisgICAgNzMsIDE5MywgODYsIDY1LCA4MCwgMTI4LCA4NiwgNjUsIDc4LCA2OSwgMTI4LCA4NiwgNjUsIDc3LCA2NSwgNzEsIDc5LCAKKyAgICA3NywgODUsIDc1LCA3MiwgNjUsIDEyOCwgODYsIDY1LCA3NywgNjUsIDcxLCA3OSwgNzcsIDg1LCA3NSwgNzIsIDE5MywgODYsIAorICAgIDY1LCA3NiwgNzYsIDY5LCA4OSwgMTI4LCA4NiwgNjUsIDY1LCA4NiwgODUsIDEyOCwgODYsIDY1LCA2NSwgMTI4LCA4NiwgCisgICAgNDgsIDUyLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MiwgNDgsIDEyOCwgODYsIDQ4LCA1MSwgNTcsIDEyOCwgODYsIDQ4LCAKKyAgICA1MSwgNTYsIDEyOCwgODYsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDg2LCA0OCwgNTEsIDU1LCAxMjgsIDg2LCA0OCwgNTEsIAorICAgIDU0LCAxMjgsIDg2LCA0OCwgNTEsIDUzLCAxMjgsIDg2LCA0OCwgNTEsIDUyLCAxMjgsIDg2LCA0OCwgNTEsIDUxLCA2NSwgCisgICAgMTI4LCA4NiwgNDgsIDUxLCA1MSwgMTI4LCA4NiwgNDgsIDUxLCA1MCwgMTI4LCA4NiwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgCisgICAgODYsIDQ4LCA1MSwgNDksIDEyOCwgODYsIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDg2LCA0OCwgNTEsIDQ4LCAxMjgsIDg2LCAKKyAgICA0OCwgNTAsIDU3LCA2NSwgMTI4LCA4NiwgNDgsIDUwLCA1NywgMTI4LCA4NiwgNDgsIDUwLCA1NiwgNjUsIDEyOCwgODYsIAorICAgIDQ4LCA1MCwgNTYsIDEyOCwgODYsIDQ4LCA1MCwgNTUsIDEyOCwgODYsIDQ4LCA1MCwgNTQsIDEyOCwgODYsIDQ4LCA1MCwgCisgICAgNTMsIDEyOCwgODYsIDQ4LCA1MCwgNTIsIDEyOCwgODYsIDQ4LCA1MCwgNTEsIDY1LCAxMjgsIDg2LCA0OCwgNTAsIDUxLCAKKyAgICAxMjgsIDg2LCA0OCwgNTAsIDUwLCAxMjgsIDg2LCA0OCwgNTAsIDQ5LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA3NiwgMTI4LCAKKyAgICA4NiwgNDgsIDUwLCA0OCwgNzUsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDc0LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA3MywgCisgICAgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzIsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDcxLCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCAKKyAgICA3MCwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjksIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDY4LCAxMjgsIDg2LCA0OCwgNTAsIAorICAgIDQ4LCA2NywgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjYsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDg2LCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDg2LCA0OCwgNDksIDU3LCAxMjgsIDg2LCA0OCwgNDksIDU2LCAxMjgsIDg2LCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDg2LCA0OCwgNDksIDU0LCAxMjgsIDg2LCA0OCwgNDksIDUzLCAxMjgsIDg2LCA0OCwgNDksIDUyLCAxMjgsIDg2LCAKKyAgICA0OCwgNDksIDUxLCAxMjgsIDg2LCA0OCwgNDksIDUwLCA2NiwgMTI4LCA4NiwgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgODYsIAorICAgIDQ4LCA0OSwgNTAsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDY3LCAxMjgsIDg2LCA0OCwgNDksIDQ5LCA2NiwgMTI4LCA4NiwgCisgICAgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDEyOCwgODYsIDQ4LCA0OSwgNDgsIDEyOCwgODYsIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgODYsIDQ4LCA0OCwgNTYsIDEyOCwgODYsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDg2LCA0OCwgNDgsIAorICAgIDU1LCA2NSwgMTI4LCA4NiwgNDgsIDQ4LCA1NSwgMTI4LCA4NiwgNDgsIDQ4LCA1NCwgMTI4LCA4NiwgNDgsIDQ4LCA1MywgCisgICAgMTI4LCA4NiwgNDgsIDQ4LCA1MiwgMTI4LCA4NiwgNDgsIDQ4LCA1MSwgMTI4LCA4NiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgCisgICAgODYsIDQ4LCA0OCwgNTAsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDczLCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA3MiwgMTI4LCAKKyAgICA4NiwgNDgsIDQ4LCA0OSwgNzEsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDcwLCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2OSwgCisgICAgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNjgsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY3LCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCAKKyAgICA2NiwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDEyOCwgODUsIDkwLCA4NSwgMTI4LCAKKyAgICA4NSwgOTAsIDUxLCAxMjgsIDg1LCA5MCwgMTc5LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4OSwgMTI4LCAKKyAgICA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NSwgODUsIDg1LCA4NSwgMTI4LCA4NSwgODUsIDg1LCA1MSwgCisgICAgMTI4LCA4NSwgODUsIDg1LCA1MCwgMTI4LCA4NSwgODUsIDY5LCAxMjgsIDg1LCA4NCwgODUsIDc1LCA3MywgMTI4LCA4NSwgCisgICAgODMsIDgzLCA4NSwgNTEsIDEyOCwgODUsIDgzLCA4MywgODUsIDEyOCwgODUsIDgzLCA3MiwgODgsIDEyOCwgODUsIDgzLCAKKyAgICA3MiwgODUsIDc3LCA4OCwgMTI4LCA4NSwgODMsIDcyLCA1MCwgMTI4LCA4NSwgODMsIDcyLCAxMjgsIDg1LCA4MywgMjAwLCAKKyAgICA4NSwgODMsIDY5LCAxOTYsIDg1LCA4MywgNjksIDEyOCwgODUsIDgyLCA4NSwgMjE4LCA4NSwgODIsIDg1LCA4MywgMTI4LCAKKyAgICA4NSwgODIsIDg1LCA2OCwgNjUsIDEyOCwgODUsIDgyLCA4NSwgNjgsIDE5MywgODUsIDgyLCA4NSwgMTI4LCA4NSwgODIsIAorICAgIDIxMywgODUsIDgyLCA3OCwgMTI4LCA4NSwgODIsIDczLCA1MSwgMTI4LCA4NSwgODIsIDczLCAxMjgsIDg1LCA4MiwgNjUsIAorICAgIDc4LCA4NSwgODMsIDEyOCwgODUsIDgyLCA2NSwgMTI4LCA4NSwgODIsIDUyLCAxMjgsIDg1LCA4MiwgNTAsIDEyOCwgODUsIAorICAgIDgyLCAxNzgsIDg1LCA4MCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDg1LCA4MCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgCisgICAgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA4NSwgODAsIDg3LCA2NSwgODIsIDE5NiwgODUsIDgwLCA4NCwgODUsIDgyLCAKKyAgICA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIAorICAgIDg1LCA4MCwgODIsIDczLCA3MSwgNzIsIDIxMiwgODUsIDgwLCA4MCwgNjksIDIxMCwgODUsIDgwLCA2NSwgNjgsIDcyLCA3NywgCisgICAgNjUsIDc4LCA3MywgODksIDY1LCAxMjgsIDg1LCA4MCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDg1LCAKKyAgICA3OSwgNzgsIDEyOCwgODUsIDc4LCA3OCwgMTI4LCA4NSwgNzgsIDc3LCA2NSwgODIsIDgyLCA3MywgNjksIDE5NiwgODUsIAorICAgIDc4LCA3MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg1LCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA4NSwgNzgsIDczLCA4NCwgCisgICAgMTI4LCA4NSwgNzgsIDczLCAyMTIsIDg1LCA3OCwgNzMsIDc5LCA3OCwgMTI4LCA4NSwgNzgsIDczLCA3OSwgMjA2LCA4NSwgCisgICAgNzgsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDg1LCA3OCwgNjgsIDIwNywgODUsIDc4LCA2OCwgNjksIDgyLCA4NCwgNzMsIDY5LCAKKyAgICAxMjgsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNzYsIDczLCA3OCwgMTk3LCA4NSwgNzgsIDY4LCA2OSwgODIsIDY4LCA3OSwgODQsIAorICAgIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDg1LCA3OCwgNjgsIDY5LCAyMTAsIDg1LCA3OCwgCisgICAgNjcsIDczLCAxOTMsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCA2OCwgMTI4LCA4NSwgNzgsIDY1LCAKKyAgICA4MCwgMTI4LCA4NSwgNzgsIDY1LCAxMjgsIDg1LCAyMDYsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA3NywgODUsIDIwNSwgCisgICAgODUsIDc3LCA2NiwgODIsIDY5LCA3NiwgNzYsIDY1LCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIDc2LCAxOTMsIDg1LCAKKyAgICA3NywgNjYsIDczLCA3OCwgMTI4LCA4NSwgNzUsIDg1LCAxMjgsIDg1LCA3NSwgODIsIDY1LCA3MywgNzgsIDczLCA2NSwgCisgICAgMjA2LCA4NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgODUsIDc1LCA2NSwgODIsIDE5MywgODUsIDc1LCAxMjgsIDg1LCA3MywgCisgICAgNzYsIDc2LCA2OSwgNjUsIDc4LCA3OCwgMTI4LCA4NSwgNzMsIDcxLCA3MiwgODUsIDIxMCwgODUsIDcxLCA2NSwgODIsIDczLCAKKyAgICA4NCwgNzMsIDE5NSwgODUsIDY5LCA4OSwgMTI4LCA4NSwgNjksIDY5LCAxMjgsIDg1LCA2OSwgNjUsIDEyOCwgODUsIDY4LCAKKyAgICA4NSwgNzEsIDEyOCwgODUsIDY4LCA2NSwgODQsIDg0LCA2NSwgMTI4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDE5MywgODUsIAorICAgIDY4LCA2NSwgNjUsIDg0LCAxMjgsIDg1LCA2OCwgMTI4LCA4NSwgMTk2LCA4NSwgNjcsIDEyOCwgODUsIDY2LCA4NSwgNzAsIAorICAgIDczLCA3NiwgNzMsIDEyOCwgODUsIDY2LCA3MiwgNjUsIDg5LCA2NSwgODQsIDIwNywgODUsIDY2LCA2NSwgNjgsIDY1LCA3NywgCisgICAgNjUsIDEyOCwgODUsIDY2LCAxMjgsIDg1LCA2NSwgODQsIDcyLCAxMjgsIDg1LCA2NSwgMTI4LCA4NSwgMTc4LCA4NSwgNDgsIAorICAgIDUyLCA1MCwgMTI4LCA4NSwgNDgsIDUyLCA0OSwgMTI4LCA4NSwgNDgsIDUyLCA0OCwgMTI4LCA4NSwgNDgsIDUxLCA1NywgCisgICAgMTI4LCA4NSwgNDgsIDUxLCA1NiwgMTI4LCA4NSwgNDgsIDUxLCA1NSwgMTI4LCA4NSwgNDgsIDUxLCA1NCwgMTI4LCA4NSwgCisgICAgNDgsIDUxLCA1MywgMTI4LCA4NSwgNDgsIDUxLCA1MiwgMTI4LCA4NSwgNDgsIDUxLCA1MSwgMTI4LCA4NSwgNDgsIDUxLCAKKyAgICA1MCwgNjUsIDEyOCwgODUsIDQ4LCA1MSwgNTAsIDEyOCwgODUsIDQ4LCA1MSwgNDksIDEyOCwgODUsIDQ4LCA1MSwgNDgsIAorICAgIDEyOCwgODUsIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDg1LCA0OCwgNTAsIDU3LCAxMjgsIDg1LCA0OCwgNTAsIDU2LCAxMjgsIAorICAgIDg1LCA0OCwgNTAsIDU1LCAxMjgsIDg1LCA0OCwgNTAsIDU0LCAxMjgsIDg1LCA0OCwgNTAsIDUzLCAxMjgsIDg1LCA0OCwgCisgICAgNTAsIDUyLCAxMjgsIDg1LCA0OCwgNTAsIDUxLCA2NSwgMTI4LCA4NSwgNDgsIDUwLCA1MSwgMTI4LCA4NSwgNDgsIDUwLCAKKyAgICA1MCwgMTI4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA4NSwgNDgsIDUwLCA0OCwgMTI4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCAKKyAgICA4NSwgNDgsIDQ5LCA1NiwgMTI4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCA4NSwgNDgsIAorICAgIDQ5LCA1MywgMTI4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA4NSwgNDgsIDQ5LCA1MSwgMTI4LCA4NSwgNDgsIDQ5LCA1MCwgCisgICAgMTI4LCA4NSwgNDgsIDQ5LCA0OSwgMTI4LCA4NSwgNDgsIDQ5LCA0OCwgMTI4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA4NSwgCisgICAgNDgsIDQ4LCA1NiwgMTI4LCA4NSwgNDgsIDQ4LCA1NSwgMTI4LCA4NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgODUsIDQ4LCAKKyAgICA0OCwgNTQsIDY1LCAxMjgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDg1LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDg1LCA0OCwgNDgsIDQ5LCAxMjgsIAorICAgIDg1LCA0NSwgNzMsIDQ1LCA3MywgMTI4LCA4NSwgNDUsIDY5LCA3OSwgNDUsIDY5LCA4NSwgMTI4LCA4NCwgOTAsIDg1LCAKKyAgICAxMjgsIDg0LCA5MCwgNzksIDY1LCAxMjgsIDg0LCA5MCwgNzksIDEyOCwgODQsIDkwLCA3MywgMjEwLCA4NCwgOTAsIDczLCAKKyAgICAxMjgsIDg0LCA5MCwgNjksIDY5LCAxMjgsIDg0LCA5MCwgNjksIDEyOCwgODQsIDkwLCA2NSwgNjUsIDEyOCwgODQsIDkwLCAKKyAgICA2NSwgMTI4LCA4NCwgOTAsIDEyOCwgODQsIDg5LCAyMTAsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgzLCA4NCwgODksIDgwLCAKKyAgICA2OSwgNDUsIDE4MiwgODQsIDg5LCA4MCwgNjksIDQ1LCAxODEsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgwLCA4NCwgODksIAorICAgIDgwLCA2OSwgNDUsIDE3OSwgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzgsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTc3LCA4NCwgCisgICAgODksIDgwLCAxOTcsIDg0LCA4OSwgNzksIDEyOCwgODQsIDg5LCA3MywgMTI4LCA4NCwgODksIDY5LCAxMjgsIDg0LCA4OSwgCisgICAgNjUsIDEyOCwgODQsIDg3LCA3OSwgNzksIDEyOCwgODQsIDg3LCA3OSwgNDUsIDg3LCA2NSwgMjE3LCA4NCwgODcsIDc5LCAKKyAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA4NCwgODcsIDc5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4NywgNzMsIAorICAgIDczLCAxMjgsIDg0LCA4NywgNzMsIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDg0LCA4NywgNzksIDEyOCwgCisgICAgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDg0LCA3MiwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIAorICAgIDg5LCA0NSwgODMsIDczLCA4OCwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgODMsIDY5LCA4NiwgNjksIDc4LCAKKyAgICAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIAorICAgIDQ1LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNzAsIDc5LCA4NSwgODIsIDEyOCwgCisgICAgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDcwLCA3MywgODYsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIAorICAgIDQ1LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIwMCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDY5LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgMjE3LCA4NCwgODcsIAorICAgIDY5LCA3NiwgODYsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc2LCA4NiwgMTk3LCA4NCwgODcsIDY5LCAxMjgsIDg0LCA4NywgCisgICAgNjUsIDY1LCAxMjgsIDg0LCA4NywgNjUsIDEyOCwgODQsIDg2LCA4MiwgNzMsIDY4LCA3OSwgMTI4LCA4NCwgODYsIDczLCAKKyAgICA3NywgNjUsIDY4LCA4NSwgMjEwLCA4NCwgODUsIDg4LCAxMjgsIDg0LCA4NSwgODUsIDc3LCA4NSwgMTI4LCA4NCwgODUsIAorICAgIDg0LCA2OSwgODksIDY1LCA4MywgNjUsIDg0LCAxMjgsIDg0LCA4NSwgODQsIDEyOCwgODQsIDg1LCA4MiwgODgsIDEyOCwgCisgICAgODQsIDg1LCA4MiwgODUsIDEyOCwgODQsIDg1LCA4MiwgODQsIDc2LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3OSwgNTAsIAorICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDgzLCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgCisgICAgODIsIDY2LCA2NSwgNzgsIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDg0LCA4NSwgNzksIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIDEyOCwgODQsIDg1LCAKKyAgICA3OCwgNzgsIDg5LCAxMjgsIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIAorICAgIDg1LCA3NSwgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgCisgICAgMjAzLCA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgCisgICAgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCAKKyAgICA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIAorICAgIDEyOCwgODQsIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIAorICAgIDg0LCA4NCwgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgCisgICAgNzIsIDc5LCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDcyLCAKKyAgICA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIAorICAgIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIAorICAgIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjksIDEyOCwgODQsIDg0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCAKKyAgICA4NywgNjUsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCA4NCwgODMsIDcyLCA4NSwgNzEsIAorICAgIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAyMDMsIDg0LCA4MywgCisgICAgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIDE5OSwgODQsIDgzLCAKKyAgICA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIDg0LCA4MywgNjUsIAorICAgIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgMTI4LCA4NCwgCisgICAgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgODQsIDgyLCAKKyAgICA4NSwgODQsIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCA4NCwgNjksIAorICAgIDE5NiwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgCisgICAgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIAorICAgIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3OCwgCisgICAgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIDg5LCAKKyAgICA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIAorICAgIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg0LCA3OSwgMjExLCA4NCwgODIsIDczLCA4NCwgCisgICAgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3OSwgNjgsIDEyOCwgODQsIDgyLCA3MywgODAsIAorICAgIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgCisgICAgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA4NCwgODIsIDczLCAKKyAgICA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNzAsIAorICAgIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc2LCA3MywgNjUsIDg0LCAxOTcsIDg0LCA4MiwgCisgICAgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDg0LCAKKyAgICA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDg0LCA4MiwgNzMsIDY1LCA3OCwgCisgICAgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIAorICAgIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIDEyOCwgODQsIDgyLCA3MywgCisgICAgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCAKKyAgICA1MSwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIAorICAgIDc5LCA0NSwgNDksIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgCisgICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgMTI4LCA4NCwgODIsIDY1LCAKKyAgICA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCA3OSwgODMsIDczLCA4NCwgCisgICAgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIAorICAgIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgCisgICAgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCAKKyAgICA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIAorICAgIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgCisgICAgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIAorICAgIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgCisgICAgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAKKyAgICAxMjgsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIAorICAgIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIDc5LCA2NSwgCisgICAgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAxMjgsIDg0LCAKKyAgICA3NiwgODYsIDEyOCwgODQsIDc2LCA4NSwgMTI4LCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3NiwgNzMsIDEyOCwgODQsIDc2LCAKKyAgICA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgNzYsIAorICAgIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgNzYsIDcyLCA2OSwgNjksIDEyOCwgODQsIDc2LCA3MiwgCisgICAgNjksIDEyOCwgODQsIDc2LCA3MiwgNjUsIDEyOCwgODQsIDc2LCA2OSwgNjksIDEyOCwgODQsIDc2LCA2NSwgMTI4LCA4NCwgCisgICAgNzQsIDY5LCAxMjgsIDg0LCA3MywgODgsIDEyOCwgODQsIDczLCA4NywgNzgsIDEyOCwgODQsIDczLCA4NywgNjUsIDIxOCwgCisgICAgODQsIDczLCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3MywgODQsIDEyOCwgODQsIDczLCA4MiwgODksIDY1LCA3NSwgMTI4LCAKKyAgICA4NCwgNzMsIDgyLCA4NCwgMTkzLCA4NCwgNzMsIDgyLCA3OSwgNzgsIDczLCA2NSwgMjA2LCA4NCwgNzMsIDgyLCAxMjgsIAorICAgIDg0LCA3MywgMjEwLCA4NCwgNzMsIDgwLCA4MCwgNzMsIDEyOCwgODQsIDczLCA4MCwgNjksIDcyLCA2NSwgMTI4LCA4NCwgCisgICAgNzMsIDgwLCAxMjgsIDg0LCA3MywgMjA4LCA4NCwgNzMsIDc4LCA4OSwgMTI4LCA4NCwgNzMsIDc4LCAyMTcsIDg0LCA3MywgCisgICAgNzgsIDc4LCA2OSwgMTI4LCA4NCwgNzMsIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgNzMsIDc3LCA2OSwgODMsIAorICAgIDEyOCwgODQsIDczLCA3NywgNjksIDEyOCwgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDg0LCA3MywgNzYsIDY4LCAxOTcsIAorICAgIDg0LCA3MywgNzYsIDEyOCwgODQsIDczLCAyMDQsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4NCwgNzIsIDczLCA2OSwgCisgICAgODUsIDg0LCA3MiwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4NCwgCisgICAgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4NCwgNzMsIAorICAgIDc1LCA2OSwgODUsIDg0LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCAKKyAgICA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDg0LCA3MywgNzUsIAorICAgIDY5LCA4NSwgMjEyLCA4NCwgNzMsIDczLCAxMjgsIDg0LCA3MywgNzEsIDcyLCAyMTIsIDg0LCA3MywgNzEsIDY5LCA4MiwgCisgICAgMTI4LCA4NCwgNzMsIDcwLCA3MywgNzgsIDY1LCA3MSwgMjAwLCA4NCwgNzMsIDY5LCA4OCwgMTI4LCA4NCwgNzMsIDY5LCAKKyAgICA4MCwgMTI4LCA4NCwgNzMsIDE5NywgODQsIDczLCA2NywgNzUsIDEyOCwgODQsIDczLCA2NywgMjAzLCA4NCwgNzMsIDY1LCAKKyAgICA4MiwgNjUsIDEyOCwgODQsIDcyLCA5MCwgMTI4LCA4NCwgNzIsIDg5LCA3OSwgNzksIDIwNSwgODQsIDcyLCA4NywgNzksIAorICAgIDc5LCAxMjgsIDg0LCA3MiwgODcsIDc5LCAxMjgsIDg0LCA3MiwgODcsIDczLCA3MywgMTI4LCA4NCwgNzIsIDg3LCA3MywgCisgICAgMTI4LCA4NCwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODQsIDcyLCA4NywgNjUsIDY1LCAxMjgsIDg0LCA3MiwgODcsIDY1LCAKKyAgICAxMjgsIDg0LCA3MiwgODUsIDgyLCAyMTEsIDg0LCA3MiwgODUsIDgyLCA3MywgODMsIDY1LCAyMTgsIDg0LCA3MiwgODUsIAorICAgIDc4LCA3MSwgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCA4MiwgODMsIDg0LCA3OSwgODIsIDc3LCAxMjgsIDg0LCA3MiwgCisgICAgODUsIDc4LCA2OCwgNjksIDgyLCAxMjgsIDg0LCA3MiwgODUsIDc4LCA2OCwgNjksIDIxMCwgODQsIDcyLCA4NSwgMTI4LCAKKyAgICA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCAyMDAsIDg0LCA3MiwgODIsIAorICAgIDY5LCA2OSwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDQ1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDE5NiwgODQsIDcyLCA4MiwgNjksIDY1LCA2OCwgMTI4LCA4NCwgNzIsIAorICAgIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDIxMSwgODQsIDcyLCA3OSwgODUsIDgzLCA2NSwgNzgsIDY4LCAxMjgsIDg0LCA3MiwgCisgICAgNzksIDg1LCA4MywgNjUsIDc4LCAxOTYsIDg0LCA3MiwgNzksIDg1LCAxMjgsIDg0LCA3MiwgNzksIDgyLCA3OCwgMTI4LCAKKyAgICA4NCwgNzIsIDc5LCA4MiwgMjA2LCA4NCwgNzIsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDcyLCA3OSwgNjUsIDEyOCwgODQsIAorICAgIDcyLCAyMDcsIDg0LCA3MiwgNzMsIDg1LCA4NCwgNzIsIDEyOCwgODQsIDcyLCA3MywgODQsIDY1LCAxMjgsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDQ1LCA4MywgNjksIDY3LCA3OSwgNzgsIDE5NiwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgNDUsIAorICAgIDc5LCA3OCwgNjksIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDIxNywgCisgICAgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDg0LCAKKyAgICA3MiwgNzMsIDgyLCA2OCwgODMsIDEyOCwgODQsIDcyLCA3MywgODIsIDY4LCAyMTEsIDg0LCA3MiwgNzMsIDgyLCA2OCwgCisgICAgMTI4LCA4NCwgNzIsIDczLCA4MiwgMTk2LCA4NCwgNzIsIDczLCAyMDYsIDg0LCA3MiwgNzMsIDczLCAxMjgsIDg0LCA3MiwgCisgICAgNzMsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAyMDAsIDg0LCA3MiwgNjksIDg5LCAxMjgsIDg0LCAKKyAgICA3MiwgNjksIDg0LCA3MiwgNjksIDEyOCwgODQsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDg0LCA3MiwgNjksIDg0LCA2NSwgCisgICAgMTI4LCA4NCwgNzIsIDY5LCA4NCwgMTkzLCA4NCwgNzIsIDY5LCA4MywgODAsIDczLCA2NSwgMjA2LCA4NCwgNzIsIDY5LCAKKyAgICA4MywgNjksIDc5LCA4MywgMTI4LCA4NCwgNzIsIDY5LCA4MywgNjksIDc5LCAyMTEsIDg0LCA3MiwgNjksIDIxMSwgODQsIAorICAgIDcyLCA2OSwgODIsIDc3LCA3OSwgNjgsIDg5LCA3OCwgNjUsIDc3LCA3MywgNjcsIDEyOCwgODQsIDcyLCA2OSwgODIsIDY5LCAKKyAgICA3MCwgNzksIDgyLCA2OSwgMTI4LCA4NCwgNzIsIDY5LCA4MiwgMTk3LCA4NCwgNzIsIDY5LCAyMDYsIDg0LCA3MiwgNjksIAorICAgIDc3LCA2NSwgODQsIDczLCA4MywgNzcsIDc5LCAyMTEsIDg0LCA3MiwgNjksIDc3LCA2NSwgMTI4LCA4NCwgNzIsIDY5LCA3NywgCisgICAgMTkzLCA4NCwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgNzIsIDY5LCAyMDAsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA3MiwgCisgICAgMTk3LCA4NCwgNzIsIDY1LCA4NywgMTI4LCA4NCwgNzIsIDY1LCA3OCwgODQsIDcyLCA2NSwgNzUsIDcyLCA2NSwgODQsIAorICAgIDEyOCwgODQsIDcyLCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA4NCwgNzIsIDY1LCAyMDYsIAorICAgIDg0LCA3MiwgNjUsIDc2LCAxMjgsIDg0LCA3MiwgNjUsIDIwNCwgODQsIDcyLCA2NSwgNzIsIDY1LCA3OCwgMTI4LCA4NCwgCisgICAgNzIsIDY1LCA2NSwgNzgsIDE5MywgODQsIDcyLCA2NSwgNjUsIDc2LCA4NSwgMTI4LCA4NCwgNzIsIDQ1LCA2NywgODIsIDY5LCAKKyAgICAxOTcsIDg0LCA2OSwgODgsIDg0LCAxMjgsIDg0LCA2OSwgODgsIDEyOCwgODQsIDY5LCA4NiwgNzMsIDgyLCAxMjgsIDg0LCAKKyAgICA2OSwgODQsIDgyLCA2NSwgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgODMsIDY5LCA3NywgCisgICAgNjksIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MCwgNzYsIDczLCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzAsIDc5LCAKKyAgICA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgNjksIDg0LCA3MiwgMTI4LCA4NCwgNjksIDg0LCAyMDAsIDg0LCA2OSwgODQsIAorICAgIDY1LCA4MiwgODQsIDc5LCAyMTEsIDg0LCA2OSwgODQsIDY1LCA4MiwgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDg0LCA2OSwgODQsIDEyOCwgODQsIDY5LCAyMTIsIDg0LCA2OSwgODMsIDgzLCA2OSwgODIsIDY1LCAxMjgsIDg0LCAKKyAgICA2OSwgODMsIDgzLCA2OSwgODIsIDE5MywgODQsIDY5LCA4MywgODMsIDY1LCA4MiwgNzksIDIwNiwgODQsIDY5LCA4MywgCisgICAgMjAwLCA4NCwgNjksIDgyLCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4NCwgNjksIDgwLCAxMjgsIDg0LCAKKyAgICA2OSwgNzgsIDg1LCA4NCwgNzksIDEyOCwgODQsIDY5LCA3OCwgODUsIDEyOCwgODQsIDY5LCA3OCwgMjEzLCA4NCwgNjksIAorICAgIDc4LCA4NCwgNzIsIDEyOCwgODQsIDY5LCA3OCwgODQsIDEyOCwgODQsIDY5LCA3OCwgMjExLCA4NCwgNjksIDc4LCA3MSwgCisgICAgMTk3LCA4NCwgNjksIDc4LCAxMjgsIDg0LCA2OSwgMjA2LCA4NCwgNjksIDc3LCA4MCwgODUsIDIxMSwgODQsIDY5LCA3NiwgCisgICAgODUsIDEyOCwgODQsIDY5LCA3NiwgNzksIDg1LCAyMTEsIDg0LCA2OSwgNzYsIDczLCA4MywgNzIsIDE5MywgODQsIDY5LCAKKyAgICA3NiwgNjksIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNjksIDc2LCA2OSwgODAsIDcyLCA3OSwgNzgsIDE5NywgODQsIAorICAgIDY5LCA3NiwgNjksIDczLCA2NSwgMTI4LCA4NCwgNjksIDczLCA4NywgODMsIDEyOCwgODQsIDY5LCA3MSwgNjksIDcyLCAKKyAgICAxMjgsIDg0LCA2OSwgMTk3LCA4NCwgNjksIDY4LCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIAorICAgIDc5LCA4MCwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCAKKyAgICA4MywgNzIsIDY1LCA3OCwgNzUsIDY5LCAxOTYsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDY2LCA2NSwgCisgICAgODIsIDY2LCA2OSwgMTk2LCA4NCwgNjksIDQ1LCA4NSwgMTI4LCA4NCwgNjcsIDcyLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCAKKyAgICA4NCwgNjcsIDcyLCA2OSwgNzIsIDY5LCAyMDAsIDg0LCA2NywgNzIsIDY5LCA3MiwgMTI4LCA4NCwgNjcsIDcyLCA2OSwgCisgICAgMjAwLCA4NCwgNjcsIDcyLCA2OSwgMTI4LCA4NCwgMTk1LCA4NCwgNjUsIDg5LCAxMjgsIDg0LCA2NSwgODgsIDEyOCwgODQsIAorICAgIDY1LCA4NywgNjksIDc2LCA3NiwgNjksIDc3LCA2OSwgMjEyLCA4NCwgNjUsIDg3LCA2NSwgMTI4LCA4NCwgNjUsIDg3LCAKKyAgICAxMjgsIDg0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4NCwgNjUsIDg2LCAxMjgsIDg0LCA2NSwgMjE0LCAKKyAgICA4NCwgNjUsIDg1LCA4MiwgODUsIDgzLCAxMjgsIDg0LCA2NSwgODUsIDEyOCwgODQsIDY1LCAyMTMsIDg0LCA2NSwgODQsIAorICAgIDg3LCA2OSwgNjksIDc2LCAxMjgsIDg0LCA2NSwgODQsIDg3LCA2OSwgNjksIDIwNCwgODQsIDY1LCA4NCwgODQsIDc5LCA3OSwgCisgICAgNjksIDE5NiwgODQsIDY1LCA4NCwgMTI4LCA4NCwgNjUsIDgyLCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA2NSwgODIsIDEyOCwgCisgICAgODQsIDY1LCA4MCwgNjksIDgyLCAxMjgsIDg0LCA2NSwgODAsIDE5NywgODQsIDY1LCA4MCwgMTI4LCA4NCwgNjUsIDc5LCAKKyAgICAxMjgsIDg0LCA2NSwgNzgsIDc4LCA2OSwgMTk2LCA4NCwgNjUsIDc4LCAxOTksIDg0LCA2NSwgNzgsIDEyOCwgODQsIDY1LCAKKyAgICA3NywgNzMsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDc3LCAxMjgsIDg0LCA2NSwgNzYsIDc2LCAxMjgsIDg0LCA2NSwgNzYsIAorICAgIDIwNCwgODQsIDY1LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDc2LCA3MywgNzgsIDE5OSwgODQsIDY1LCA3NiwgCisgICAgNjksIDc4LCA4NCwgODMsIDEyOCwgODQsIDY1LCA3NiwgNjksIDc4LCAyMTIsIDg0LCA2NSwgNzUsIDcyLCA2NSwgNzYsIDc2LCAKKyAgICA4NSwgODMsIDEyOCwgODQsIDY1LCA3NSwgNjksIDEyOCwgODQsIDY1LCA3NSwgNTIsIDEyOCwgODQsIDY1LCA3NSwgMTI4LCAKKyAgICA4NCwgNjUsIDczLCA4MywgODksIDc5LCA4NSwgMTI4LCA4NCwgNjUsIDczLCA3NiwgNzYsIDY5LCA4MywgMjExLCA4NCwgNjUsIAorICAgIDczLCA3NiwgMTI4LCA4NCwgNjUsIDczLCAyMDQsIDg0LCA2NSwgNzIsIDEyOCwgODQsIDY1LCAyMDAsIDg0LCA2NSwgNzEsIAorICAgIDY2LCA2NSwgNzgsIDg3LCAxOTMsIDg0LCA2NSwgNzEsIDY1LCA3NiwgNzksIDE5OSwgODQsIDY1LCA3MSwgMTI4LCA4NCwgCisgICAgNjUsIDY5LCAxMjgsIDg0LCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA2NSwgNjcsIDIwMywgODQsIDY1LCA2NiwgODUsIDc2LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODQsIDY1LCA2NiwgNzYsIDY5LCAxMjgsIDg0LCA2NSwgNjYsIDEyOCwgODQsIAorICAgIDY1LCAxOTQsIDg0LCA2NSwgNjUsIDc2LCA4NSwgNzQsIDE5MywgODQsIDY1LCA2NSwgNzMsIDEyOCwgODQsIDY1LCA2NSwgCisgICAgNzAsIDEyOCwgODQsIDY1LCA1MCwgMTI4LCA4NCwgNjUsIDQ1LCA4MiwgNzksIDc2LCAxMjgsIDg0LCA0OCwgNTEsIDU0LCAKKyAgICAxMjgsIDg0LCA0OCwgNTEsIDUzLCAxMjgsIDg0LCA0OCwgNTEsIDUyLCAxMjgsIDg0LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCAKKyAgICA4NCwgNDgsIDUxLCA1MSwgMTI4LCA4NCwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgODQsIDQ4LCA1MSwgNTAsIDEyOCwgODQsIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgODQsIDQ4LCA1MSwgNDgsIDEyOCwgODQsIDQ4LCA1MCwgNTcsIDEyOCwgODQsIDQ4LCA1MCwgCisgICAgNTYsIDEyOCwgODQsIDQ4LCA1MCwgNTUsIDEyOCwgODQsIDQ4LCA1MCwgNTQsIDEyOCwgODQsIDQ4LCA1MCwgNTMsIDEyOCwgCisgICAgODQsIDQ4LCA1MCwgNTIsIDEyOCwgODQsIDQ4LCA1MCwgNTEsIDEyOCwgODQsIDQ4LCA1MCwgNTAsIDEyOCwgODQsIDQ4LCAKKyAgICA1MCwgNDksIDEyOCwgODQsIDQ4LCA1MCwgNDgsIDEyOCwgODQsIDQ4LCA0OSwgNTcsIDEyOCwgODQsIDQ4LCA0OSwgNTYsIAorICAgIDEyOCwgODQsIDQ4LCA0OSwgNTUsIDEyOCwgODQsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDg0LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDg0LCA0OCwgNDksIDUzLCAxMjgsIDg0LCA0OCwgNDksIDUyLCAxMjgsIDg0LCA0OCwgNDksIDUxLCAxMjgsIDg0LCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDg0LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA4NCwgNDgsIDQ5LCA0OSwgMTI4LCA4NCwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA4NCwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTcsIDEyOCwgODQsIDQ4LCA0OCwgNTYsIAorICAgIDY1LCAxMjgsIDg0LCA0OCwgNDgsIDU2LCAxMjgsIDg0LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NSwgCisgICAgMTI4LCA4NCwgNDgsIDQ4LCA1NCwgMTI4LCA4NCwgNDgsIDQ4LCA1MywgMTI4LCA4NCwgNDgsIDQ4LCA1MiwgMTI4LCA4NCwgCisgICAgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTEsIDEyOCwgODQsIDQ4LCA0OCwgNTAsIDEyOCwgODQsIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgODMsIDkwLCA5MCwgMTI4LCA4MywgOTAsIDg3LCA3MSwgMTI4LCA4MywgOTAsIDg3LCA2NSwgMTI4LCAKKyAgICA4MywgOTAsIDg1LCAxMjgsIDgzLCA5MCwgNzksIDEyOCwgODMsIDkwLCA3MywgMTI4LCA4MywgOTAsIDY5LCA2OSwgMTI4LCAKKyAgICA4MywgOTAsIDY5LCAxMjgsIDgzLCA5MCwgNjUsIDY1LCAxMjgsIDgzLCA5MCwgNjUsIDEyOCwgODMsIDkwLCAxMjgsIDgzLCAKKyAgICA4OSwgODgsIDEyOCwgODMsIDg5LCA4NCwgMTI4LCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODksIDgyLCA3NywgNjUsIAorICAgIDg0LCA3MywgNzUsIDczLCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgMTI4LCA4MywgODksIDgyLCAxMjgsIDgzLCA4OSwgCisgICAgODAsIDEyOCwgODMsIDg5LCA3OSwgODUsIDg3LCA2NSwgMTI4LCA4MywgODksIDc4LCA2OSwgODYsIDc3LCA2NSwgMTI4LCAKKyAgICA4MywgODksIDc4LCA2OCwgNjksIDgzLCA3NywgNzksIDIxMSwgODMsIDg5LCA3OCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgCisgICAgODUsIDIxMSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgMTkzLCA4MywgODksIDc4LCA2NSwgNzAsIDczLCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDc3LCA2OSwgODQsIDgyLCA4OSwgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NiwgMTI4LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU0LCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA1MSwgCisgICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKKyAgICA1MywgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIAorICAgIDc2LCA0NSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgCisgICAgNzksIDc2LCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDg5LCAKKyAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDUxLCAxMjgsIAogICAgIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCAKLSAgICA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgODksIDc3LCA2NiwgCi0gICAgNzksIDc2LCA0NSwgNTIsIDU3LCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgODQsIDczLCA3NSwgNzMsIDEyOCwgODQsIDY1LCAKLSAgICA3NSwgNzIsIDY1LCA3NiwgNzYsIDg1LCA4MywgMTI4LCA4NCwgNjUsIDg3LCA2OSwgNzYsIDc2LCA2OSwgNzcsIDY5LCAyMTIsIAotICAgIDg0LCA3MiwgNjksIDgyLCA2OSwgNzAsIDc5LCA4MiwgNjksIDEyOCwgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgNzYsIDczLCAKLSAgICA3OCwgMTk3LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIAotICAgIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MSwgCi0gICAgNzksIDgyLCA3MSwgNzksIDc4LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODYsIDczLCAKLSAgICA4MywgNjUsIDgyLCA3MSwgNjUsIDg5LCA2NSwgMTI4LCA4NywgNjUsIDgzLCA4MywgNjUsIDc2LCA3NiwgNjUsIDc3LCAxMjgsIAotICAgIDg3LCA3MiwgNjksIDY5LCA3NiwgNjcsIDcyLCA2NSwgNzMsIDIxMCwgODcsIDc5LCA4MiwgNjgsIDgzLCA4MCwgNjUsIDY3LCAKLSAgICA2OSwgMTI4LCA4OSwgODAsIDc5LCA3NSwgODIsIDczLCA4MywgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNjYsIDc0LCA3OSwgNzMsIAotICAgIDc4LCA2OSwgMTk2LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgCi0gICAgODIsIDY4LCAyMTEsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCAKLSAgICA3NiwgNjksIDEyOCwgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDgzLCA4NSwgNjYsIDgzLCA2NywgODIsIAotICAgIDczLCA4MCwgMjEyLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2NiwgCi0gICAgNjUsIDgyLCAxMjgsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIDgzLCA3NSwgMTI4LCA4MSwgODUsIDc5LCA4NCwgNjUsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDgyLCA3OSwgNzAsIAotICAgIDc2LCA2OSwgMjE2LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgCi0gICAgODMsIDczLCAyMTEsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNzAsIDc5LCA3OSwgMjEyLCA2OCwgNjksIDc4LCA4NCwgNzMsIDgzLCAKLSAgICA4NCwgODIsIDIxNywgNjUsIDc4LCA4NSwgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIAotICAgIDczLCA3NSwgMTkzLCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgCi0gICAgNjUsIDc2LCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCA2OSwgMjA1LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCAKLSAgICA4MCwgNzYsIDE5NywgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDY1LCA4MiwgODIsIDc5LCA4NywgNzIsIAotICAgIDY5LCA2NSwgMTk2LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjgsIDczLCA2NSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDQ1LCAyMDgsIDY4LCA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCAKLSAgICA3MywgODMsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDY1LCA4NiwgNjUsIDcxLCA4MiwgNjUsIAotICAgIDcyLCA2NSwgMTI4LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgCi0gICAgNzMsIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA4MywgODQsIDczLCAKLSAgICA2NywgODMsIDEyOCwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIAotICAgIDY1LCA2OCwgMTI4LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgCi0gICAgNjksIDg0LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCAKLSAgICA3OCwgNjksIDE5NiwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIAotICAgIDY1LCA3OCwgMTk2LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCAKLSAgICA2NSwgNzYsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDcwLCA3NiwgNzksIDgyLCA2OSwgODQsIAotICAgIDg0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgCi0gICAgNjUsIDg0LCAxOTMsIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDIwMCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgMTI4LCA4MywgNjcsIDczLCA4MywgODMsIDc5LCA4MiwgODMsIDEyOCwgODMsIDY5LCA2NiwgNjUsIDg0LCA2NiwgCi0gICAgNjksIDczLCAyMTIsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgNjgsIDY1LCA4OSwgNjUsIDc4LCAKLSAgICA3OCwgNjUsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzgsIDY5LCA4MiwgNzksIAotICAgIDgzLCA3MywgMjExLCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgNzUsIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgCi0gICAgODQsIDg5LCAxMjgsIDczLCA3OCwgODYsIDczLCA4MywgNzMsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDIwMCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzcsIAotICAgIDY1LCA4MCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgCi0gICAgNjksIDc2LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAKLSAgICA2OSwgNjgsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAyMDAsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIAotICAgIDY3LCA2NSwgMjA0LCA4MywgODUsIDY2LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgCi0gICAgNjgsIDgzLCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4NCwgNjksIDc2LCA2OSwgODAsIDcyLCAKLSAgICA3OSwgNzgsIDE5NywgODQsIDcyLCA3OSwgODUsIDgzLCA2NSwgNzgsIDY4LCAyMTEsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIAotICAgIDc4LCA3MSwgMTI4LCA2NSwgNzYsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjYsIDczLCA3OCwgNzksIDY3LCA4NSwgCi0gICAgNzYsIDY1LCAyMTAsIDY3LCA2NSwgODUsIDc2LCA2OCwgODIsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCAKLSAgICA3OCwgODQsIDEyOCwgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIDc2LCAyMDcsIDY4LCA3MywgNzAsIDc5LCA3OCwgNzMsIAotICAgIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDgzLCAxMjgsIDcwLCA3NiwgNzksIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCAKLSAgICA3OCwgNzMsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIAotICAgIDc4LCA2OCwgMjA3LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgCi0gICAgODMsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgMjA2LCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCAKLSAgICA3NiwgNjUsIDEyOCwgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4OSwgODIsIDY1LCA3OCwgNzMsIAotICAgIDgzLCA3NywgMTkzLCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgCi0gICAgNjUsIDc2LCAxMjgsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKLSAgICA4NSwgNzksIDIwNiwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIAotICAgIDczLCA3OCwgMTk5LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgODAsIDY5LCA3NiwgCi0gICAgNzYsIDY5LCAyMTAsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCAKLSAgICA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgODMsIDY5LCAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgNzYsIAotICAgIDc2LCA3OSwgMTI4LCA4MywgNjksIDc3LCA3MywgODYsIDc5LCA4NywgNjksIDIwNCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgCi0gICAgODUsIDgwLCAxMjgsIDgzLCA4NywgNjUsIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDU1LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NiwgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCAKLSAgICA4MiwgNzMsIDE5NSwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIAotICAgIDc2LCA3OSwgMTI4LCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgODMsIDczLCA3NywgCi0gICAgNzksIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCAKLSAgICA2NSwgNzEsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA3NiwgNzMsIDc4LCAxOTcsIDg1LCA3OCwgNjgsIDY5LCA4MiwgODQsIAotICAgIDczLCA2OSwgMTI4LCA4NSwgNzgsIDczLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgCi0gICAgODMsIDY5LCAxOTYsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCAKLSAgICA3OCwgNjksIDEyOCwgNjUsIDc4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDY1LCAxMjgsIDY1LCA4MCwgNzksIDY4LCA2OSwgODgsIAotICAgIDczLCA2NSwgMTI4LCA2NSwgODAsIDc5LCA4NCwgNzIsIDY5LCA3NywgNjUsIDEyOCwgNjUsIDgwLCA4MCwgODIsIDc5LCA2NSwgCi0gICAgNjcsIDcyLCAxMjgsIDY1LCA4MSwgODUsIDY1LCA4MiwgNzMsIDg1LCA4MywgMTI4LCA2NSwgODIsIDQ1LCA4MiwgNjUsIDcyLCAKLSAgICA3NywgNjUsIDIwNiwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgNjksIDc5LCAxMjgsIDY1LCA4MiwgNzEsIDc5LCA4NCwgNjksIAotICAgIDgyLCA3MywgMTI4LCA2NSwgODIsIDczLCA4MywgODQsIDY5LCA4MiwgNjUsIDEyOCwgNjUsIDgzLCA2NywgNjksIDc4LCA2OCwgCi0gICAgNzMsIDc4LCAxOTksIDY1LCA4MywgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA4MywgNzUsIDIxMSwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc3LCAxMjgsIDY1LCA4NCwgODQsIDcyLCA2NSwgNjcsIAotICAgIDY1LCA3OCwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDc2LCA2NSwgODMsIDIwMCwgNjYsIDY5LCA4NiwgNjksIDgyLCA2NSwgCi0gICAgNzEsIDY5LCAxMjgsIDY2LCA3MywgNzksIDcyLCA2NSwgOTAsIDY1LCA4MiwgMTk2LCA2NiwgNzMsIDgzLCA2OSwgNjcsIDg0LCAKLSAgICA3MywgNzgsIDE5OSwgNjYsIDczLCA4MywgNzcsIDczLCA3NiwgNzYsIDY1LCAyMDAsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIAotICAgIDczLCA3OCwgMTk5LCA2NiwgODUsIDc2LCA3NiwgODMsIDY5LCA4OSwgNjksIDEyOCwgNjYsIDg1LCA4MywgODMsIDg5LCA2OSwgCi0gICAgODIsIDg1LCAxMjgsIDY3LCA2NSwgNjgsIDg1LCA2NywgNjksIDg1LCA4MywgMTI4LCA2NywgNjUsIDgyLCA4MCwgNjksIDc4LCAKLSAgICA4NCwgODIsIDIxNywgNjcsIDY1LCA4MiwgODksIDgzLCA4NCwgNzMsIDY1LCAyMDYsIDY3LCA2OSwgNzgsIDg0LCA4NSwgODIsIAotICAgIDczLCA2NSwgMjA0LCA2NywgNzIsIDY1LCA3NywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgODQsIDg0LCA2NSwgCi0gICAgODcsIDY1LCAxMjgsIDY3LCA3MywgODYsIDczLCA3NiwgNzMsIDY1LCA3OCwgMTI4LCA2NywgNzYsIDczLCA3NywgNjUsIDY3LCAKLSAgICA4NSwgODMsIDEyOCwgNjcsIDc5LCA3OCwgNzAsIDc2LCA3MywgNjcsIDg0LCAxMjgsIDY3LCA3OSwgNzgsIDcxLCA4MiwgODUsIAotICAgIDY5LCA3OCwgMjEyLCA2NywgNzksIDc4LCA3NCwgODUsIDcxLCA2NSwgODQsIDE5NywgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgCi0gICAgODIsIDY5LCAxOTYsIDY3LCA3OSwgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCAKLSAgICA3OCwgODQsIDEyOCwgNjgsIDY1LCA3NywgNzcsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDY4LCA2NSwgODIsIDc1LCA2OSwgNzgsIAotICAgIDczLCA3OCwgMTk5LCA2OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjgsIDY5LCA2NywgNjksIDc3LCA2NiwgCi0gICAgNjksIDgyLCAxMjgsIDY4LCA2OSwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCAKLSAgICA4NCwgNjksIDIxMCwgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAyMTEsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIAotICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCi0gICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIAotICAgIDQ1LCA3OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDg1LCA4MCwgNzksIDc4LCA2OCwgCi0gICAgNzMsIDg1LCAyMTEsIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgODYsIDczLCA4MywgODYsIDY1LCAKLSAgICA4MiwgNjUsIDEyOCwgNjksIDY4LCA3MywgODQsIDc5LCA4MiwgNzMsIDY1LCAyMDQsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIAotICAgIDgwLCA2OSwgMTI4LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgCi0gICAgODQsIDY5LCAxOTYsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgMTI4LCA2OSwgODQsIDY5LCA4MiwgNzgsIDczLCAKLSAgICA4NCwgODksIDEyOCwgNzAsIDY1LCA2NywgODMsIDczLCA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIAotICAgIDY1LCA3OCwgMTI4LCA3MCwgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCA4NiwgCi0gICAgNjUsIDc2LCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCAKLSAgICA0NSwgNTAsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIAotICAgIDczLCA3OCwgMTk3LCA3MCwgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDQ1LCA3NiwgCi0gICAgNzMsIDc4LCAxOTcsIDcwLCA4MiwgNjUsIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA3MSwgODIsIDY1LCAKLSAgICA3OCwgODQsIDEyOCwgNzAsIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCAKLSAgICA2NSwgODQsIDEyOCwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIAotICAgIDczLCA2NywgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgCi0gICAgNjgsIDc5LCAxMjgsIDczLCA3NiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCAKLSAgICA3OSwgNzgsIDEyOCwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIAotICAgIDgzLCA2OSwgMjExLCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCA3OCwgCi0gICAgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCAKLSAgICA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIAotICAgIDgyLCA2OCwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgCi0gICAgODQsIDczLCAxMjgsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCAKLSAgICA3MywgNjgsIDE5NywgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIAotICAgIDg2LCA2OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA2NSwgCi0gICAgNzUsIDcyLCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIDc3LCAKLSAgICA3OSwgNzUsIDEyOCwgNzcsIDY1LCA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIAotICAgIDY1LCA3NywgMTI4LCA3NywgNjUsIDgzLCA2NywgODUsIDc2LCA3MywgNzgsIDE5NywgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgCi0gICAgNzgsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDg0LCAxMjgsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIAotICAgIDczLCA4NCwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgCi0gICAgNjksIDgyLCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCAKLSAgICA4NCwgNzksIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgNjksIAotICAgIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDcyLCA4NSwgCi0gICAgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCAKLSAgICA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY5LCA2NywgNjksIDc1LCAxMjgsIDgwLCA2NSwgODIsIDczLCA2NywgNzIsIAotICAgIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgCi0gICAgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCAKLSAgICA2NSwgNjUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCAyMDMsIDgwLCA3NiwgNjksIDg0LCA3MiwgODIsIAotICAgIDc5LCA3OCwgMTI4LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgNjksIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgCi0gICAgODQsIDg1LCAyMTEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCAKLSAgICA3MywgNzMsIDEyOCwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjksIAotICAgIDgzLCA4MywgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDIwNiwgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgCi0gICAgODIsIDY1LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCAKLSAgICA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIAotICAgIDczLCA4NiwgMTk3LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgCi0gICAgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCAKLSAgICA3OCwgNjcsIDE5NywgODIsIDY5LCA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDg0LCA3OSwgNzEsIAotICAgIDY5LCA3OCwgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDg1LCA3NSwgNzUsIDY1LCA3NSwgCi0gICAgNzIsIDY1LCAxMjgsIDgzLCA2NSwgNzcsIDY1LCA4MiwgNzMsIDg0LCA2NSwgMjA2LCA4MywgNjUsIDc4LCA4NCwgNzMsIDczLCAKLSAgICA3NywgODUsIDEyOCwgODMsIDY1LCA4OCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA2NywgNjUsIDc4LCA2OCwgNzMsIAotICAgIDY3LCA4NSwgMjExLCA4MywgNjcsIDc5LCA4MiwgODAsIDczLCA4NSwgODMsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgCi0gICAgNzYsIDc5LCAyMDYsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY1LCA3NywgODIsIDc5LCAKLSAgICA2NywgNzUsIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIAotICAgIDY1LCA3NywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCAKLSAgICA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzgsIAotICAgIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgNzgsIDcxLCA4NCwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgCi0gICAgNzIsIDY5LCAxOTYsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTYsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NSwgNzMsIDg0LCA2NSwgNjYsIAotICAgIDc2LCA2OSwgMTI4LCA4MywgODUsIDgyLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTcsIDEyOCwgODMsIDg5LCA3NywgNzcsIDY5LCA4NCwgODIsIDg5LCAxMjgsIDgzLCA4OSwgNzgsIDY4LCA2OSwgODMsIAotICAgIDc3LCA3OSwgMjExLCA4NCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MCwgCi0gICAgNzYsIDczLCAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4NCwgODIsIDY5LCA2NSwgNjgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIAotICAgIDg0LCA2OSwgMTk2LCA4NSwgNzMsIDc2LCA3NiwgNjksIDY1LCA3OCwgNzgsIDEyOCwgODUsIDc3LCA2NiwgODIsIDY5LCA3NiwgCi0gICAgNzYsIDY1LCAxMjgsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNjgsIDc5LCA4NCwgMTI4LCA4NSwgNzgsIDc3LCA2NSwgODIsIDgyLCAKLSAgICA3MywgNjksIDE5NiwgODYsIDY5LCA4MiwgODMsIDczLCA2NywgNzYsIDY5LCAxMjgsIDg2LCA3OSwgNzMsIDY3LCA2OSwgNzYsIAotICAgIDY5LCA4MywgMjExLCA4NywgNjUsIDc4LCA2OCwgNjksIDgyLCA2OSwgODIsIDEyOCwgODcsIDY1LCA4MywgNjUsIDc2LCA3NiwgCi0gICAgNjUsIDc3LCAxMjgsIDg5LCA2NSwgNzcsIDY1LCA3NSwgNzUsIDY1LCA3OCwgMTI4LCA4OSwgODAsIDc5LCA3NSwgODIsIDczLCAKLSAgICA4MywgNzMsIDIxMSwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA4NywgNjUsIDgyLCA2NSwgNzUsIAotICAgIDY1LCA4OSwgMTI4LCA4MCwgNzIsIDY1LCA3MywgODMsIDg0LCA3OSwgMjExLCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgCi0gICAgMTk2LCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA4NiwgMTk3LCA4NSwgNzEsIDY1LCA4MiwgNzMsIDg0LCA3MywgMTk1LCAKLSAgICA2NiwgODUsIDcxLCA3MywgNzgsIDY5LCA4MywgMTk3LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3MiwgODUsIAotICAgIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCA3MCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgMjA2LCA2NywgODIsIDc5LCA4MywgCi0gICAgODMsIDczLCA3OCwgMTk5LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCA2NSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCAKLSAgICA3NiwgMTk3LCA2OSwgODgsIDg0LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCA2OSwgMjEyLCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCAKLSAgICA2NywgNzksIDg1LCA3OCwgODQsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDcxLCA2NiwgNjUsIDc4LCA4NywgMTkzLCA3OSwgODYsIAotICAgIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4NCwgNzksIDgyLCA4NCwgCi0gICAgNzksIDczLCA4MywgMTk3LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAKLSAgICA2OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgCi0gICAgMTk2LCA3NywgNjUsIDgyLCA4NCwgODksIDgyLCA3MywgMTkzLCA3OSwgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgMTI4LCAKLSAgICA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MywgNzgsIAotICAgIDg0LCA2OSwgNzEsIDgyLCA2NSwgMjA0LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTk2LCA3OSwgNzcsIDczLCA2NywgCi0gICAgODIsIDc5LCA3OCwgMTI4LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCA2NSwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCAKLSAgICA3OCwgMjEyLCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCA4MywgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MywgODUsIDY3LCA2NywgNjksIDY5LCA2OCwgMjExLCAKLSAgICA4NCwgNzIsIDY5LCA4MywgODAsIDczLCA2NSwgMjA2LCA2NiwgNjUsIDc3LCA2NiwgNzksIDc5LCA4MywgMTI4LCA2NywgNzMsIAotICAgIDgyLCA2NywgNzYsIDY5LCA4MywgMTI4LCA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgMjExLCA2OCwgNzMsIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgMjA1LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgCi0gICAgMTk2LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA3OCwgMTk5LCAKLSAgICA4MywgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MywgODUsIAotICAgIDY2LCA4NSwgNzgsIDczLCA4NCwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgMTI4LCA4NCwgNjUsIDc2LCA2OSwgCi0gICAgNzgsIDg0LCA4MywgMTI4LCA2NiwgNjUsIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA2OCwgNzMsIDcxLCA2NSwgNzcsIDc3LCAKLSAgICA2NSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgCi0gICAgMjA0LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCA3MSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCAKLSAgICA4MywgODUsIDY2LCA3MSwgODIsIDc5LCA4NSwgMjA4LCA4MywgODUsIDgyLCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4NSwgODAsIAotICAgIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCi0gICAgNjksIDY5LCA3OCwgMTI4LCA3OSwgODIsIDczLCA3MSwgNzMsIDc4LCA2NSwgMjA0LCA4MiwgNzksIDg0LCA4NSwgNzgsIDY4LCAKLSAgICA2NSwgMTI4LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgMjAzLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgCi0gICAgMjAxLCA2OCwgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCAKLSAgICA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCA3NywgNzMsIAotICAgIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgCi0gICAgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCAKLSAgICA3NiwgMTk3LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA2NSwgODMsIDgzLCA4OSwgODIsIDczLCA2NSwgCi0gICAgMjA2LCA2NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCAKLSAgICA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCA4MywgMTI4LCA3MCwgNzMsIAotICAgIDc4LCA3MSwgNjksIDgyLCA2OSwgMTk2LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA3NSwgCi0gICAgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NSwgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgCi0gICAgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCAKLSAgICA3OCwgNzksIDQ1LCA2NiwgODIsIDY5LCA2NSwgMjAzLCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4MSwgODUsIAotICAgIDY1LCA4MiwgODQsIDY5LCA4MiwgMjExLCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MywgNjUsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4NCwgNjksIDg0LCA2NSwgODIsIDg0LCAKLSAgICA3OSwgMjExLCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgCi0gICAgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgMTk1LCAKLSAgICA2NSwgODAsIDc5LCA2OCwgNjksIDgyLCA3NywgMTkzLCA2NSwgODIsIDczLCA4MywgODQsIDY5LCA4MiwgMTkzLCA2NiwgNjksIAotICAgIDg0LCA4NywgNjksIDY5LCA3OCwgMTI4LCA2NiwgNzMsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA2NywgNjUsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA2NywgNjksIDczLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDY1LCA4MiwgNzMsIDc5LCAKLSAgICA4NCwgMTI4LCA2NywgNzIsIDc5LCA4MiwgNjksIDg2LCA3NywgMTkzLCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCA4NSwgCi0gICAgMTI4LCA2NywgNzYsIDc5LCA4NCwgNzIsIDY5LCA4MywgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCA4MywgMTI4LCAKLSAgICA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgMjA2LCA2OCwgNjUsIDgwLCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA2OCwgNjUsIAotICAgIDgwLCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA2OCwgNjUsIDgwLCA0NSwgODAsIDgyLCA2NSwgMjA1LCA2OCwgNjksIDg5LCA4NCwgCi0gICAgNjksIDgyLCA3OSwgMjExLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgzLCA3MywgNzcsIDc5LCAKLSAgICA4NSwgMTI4LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCA3OCwgCi0gICAgMTk3LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgMjAzLCAKLSAgICA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIAotICAgIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgMjA2LCA3NSwgNjUsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NiwgNDUsIDgzLCA3MiwgNjUsIDgwLCAKLSAgICA2OSwgMTk2LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NiwgNzQsIDg1LCA2OCwgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzksIDcxLCA3OSwgODQsIDg5LCA4MCwgMTk3LCAKLSAgICA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIAotICAgIDc2LCA4NCwgNzMsIDgzLCA2OSwgMjEyLCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgODUsIDg0LCA3MywgCi0gICAgNzYsIDc2LCA4NSwgMTI4LCA3OSwgNzcsIDczLCA4MywgODMsIDczLCA3OSwgMjA2LCA4MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA4MCwgNjUsIDg5LCA2OSwgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgCi0gICAgMjA0LCA4MCwgNjksIDg0LCA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCAKLSAgICA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MiwgNzEsIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgNDUsIAotICAgIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgNjksIDc3LCA3NSwgCi0gICAgNjUsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgCi0gICAgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgMTI4LCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCAKLSAgICA4MywgODEsIDg1LCA3MywgODIsIDgyLCA2OSwgMjA0LCA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIAotICAgIDgyLCA3OSwgNzUsIDY5LCA4MywgMTI4LCA4NCwgNzIsIDY5LCA4MywgNjksIDc5LCA4MywgMTI4LCA4NCwgNzIsIDg1LCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NSwgNjYsIDY1LCA2OCwgNjUsIDc3LCAKLSAgICA2NSwgMTI4LCA4NywgNjUsIDczLCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCA2OSwgCi0gICAgMTI4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjYsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA2NSwgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDg2LCA2OSwgCi0gICAgNzksIDc2LCA2NSwgMjEwLCA2NSwgNzgsIDcxLCA4MywgODQsIDgyLCA3OSwgMjA1LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAKLSAgICA4MiwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgMTkzLCA2NSwgODAsIDc5LCA4NCwgNzIsIDY5LCA4MywgCi0gICAgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA3MywgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA4NSwgMTI4LCAKLSAgICA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgMjA2LCA2NSwgODIsIDc5LCA4NSwgODMsIDczLCA3OCwgMTk5LCA2NSwgODUsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NiwgNjUsIDY1LCA4MiwgNjksIDgyLCA4NSwgMTI4LCA2NiwgNjUsIDczLCA4MiwgCi0gICAgNzUsIDY1LCA3OCwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDc1LCA3MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNzMsIDY5LCAKLSAgICA4MiwgMTI4LCA2NiwgNjUsIDg0LCA3MiwgODQsIDg1LCA2NiwgMTI4LCA2NiwgNjksIDY3LCA2NSwgODUsIDgzLCA2OSwgCi0gICAgMTI4LCA2NiwgNjksIDY5LCA3MiwgNzMsIDg2LCA2OSwgMTI4LCA2NiwgNjksIDc2LCA3MSwgODQsIDcyLCA3OSwgMjEwLCAKLSAgICA2NiwgNjksIDgyLCA3NSwgNjUsIDc4LCA2NSwgMjA2LCA2NiwgNzMsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2NiwgNzksIAotICAgIDg1LCA3OCwgNjgsIDY1LCA4MiwgMjE3LCA2NiwgODIsIDY1LCA3NSwgNjcsIDY5LCA4NCwgMTI4LCA2NiwgODIsIDczLCA4MywgCi0gICAgODQsIDc2LCA2OSwgMTI4LCA2NiwgODUsIDg1LCA3NywgNzMsIDgzLCA3MiwgMTI4LCA2NywgNjUsIDY5LCA4MywgODUsIDgyLCAKLSAgICA2NSwgMTI4LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA2NywgNjUsIDgwLCA4NCwgNzMsIDg2LCA2OSwgCi0gICAgMTI4LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY1LCA3MSwgMTk3LCA2NywgNjksIDc2LCA4MywgNzMsIDg1LCA4MywgMTI4LCAKLSAgICA2NywgNzIsIDY1LCA3NywgNzMsIDc2LCA3MywgMTI4LCA2NywgNzYsIDczLCA3OCwgNzEsIDczLCA3OCwgMTk5LCA2NywgNzksIAotICAgIDc3LCA4MCwgNjUsIDgyLCA2OSwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgMjEyLCA2NywgNzksIDc4LCA4NCwgCi0gICAgNjUsIDY3LCA4NCwgMTI4LCA2NywgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA2NywgNzksIDgyLCA4MiwgNjksIDY3LCAKLSAgICA4NCwgMTI4LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCA4NiwgMTk3LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgMjEyLCA2NywgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgMjA3LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA4NCwgMTI4LCAKLSAgICA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA2OSwgMjEwLCA2NywgODcsIDY5LCA3OSwgODIsIDg0LCA3MiwgMTI4LCA2NywgODksIAotICAgIDgwLCA2OSwgODIsIDg1LCA4MywgMTI4LCA2NywgODksIDgyLCA2OSwgNzgsIDY1LCA3MywgMTk1LCA2OCwgNjUsIDcxLCA2NSwgCi0gICAgNzYsIDcxLCA2NSwgMTI4LCA2OCwgNjksIDY3LCA2NSwgODksIDY5LCA2OCwgMTI4LCA2OCwgNjksIDc4LCA2NSwgODIsIDczLCAKLSAgICA4NSwgMjExLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNzIsIDY1LCA3NiwgNjUsIDg0LCA3MiwgCi0gICAgMTI4LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3OSwgMjA2LCAKLSAgICA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIAotICAgIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgMTI4LCAKLSAgICA2OCwgODIsIDY1LCA3MCwgODQsIDczLCA3OCwgMTk5LCA2OSwgNjUsIDY2LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIAotICAgIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgCi0gICAgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCAKLSAgICA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCi0gICAgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCAKLSAgICA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCA3MCwgNjUsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgCi0gICAgNjksIDg5LCA2OSwgMTI4LCA3MCwgNzksIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCAKLSAgICA4NCwgMTk3LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgMjA2LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgCi0gICAgMTk5LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCA3OCwgMTI4LCAKLSAgICA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MiwgNjUsIAotICAgIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgCi0gICAgNjksIDgyLCA2OCwgMTI4LCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgCi0gICAgMjE3LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3MywgNjcsIDcyLCA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIAotICAgIDczLCA3NywgNzcsIDg1LCA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzgsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDg0LCA2OSwgODIsIDY5LCAKLSAgICA4MywgMjEyLCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3NCwgNjUsIDc4LCA4NSwgNjUsIDgyLCA4OSwgCi0gICAgMTI4LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDY5LCA4MywgMTk3LCA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCAKLSAgICA3NSwgNjUsIDc1LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIAotICAgIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNzMsIDc4LCA4MywgCi0gICAgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCAKLSAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgCi0gICAgMTk3LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCAKLSAgICA3NywgNjUsIDczLCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDc4LCA4MywgODksIDc5LCA3OCwgMTI4LCA3NywgNjUsIAotICAgIDgyLCA2NiwgODUsIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA4MiwgCi0gICAgNzMsIDY1LCA3MSwgMTk3LCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCAKLSAgICA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzksIAotICAgIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgNzksIDgyLCA3OCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgCi0gICAgMTI4LCA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCA3NiwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCAKLSAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgODksIDczLCA3OCwgNDUsIDY4LCA3OSwgMTI4LCA3OSwgNjYsIAotICAgIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgCi0gICAgNzYsIDczLCA3OCwgMTk3LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc3LCA2NSwgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIAotICAgIDc4LCA4OSwgNzMsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgCi0gICAgODIsIDg1LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgMjA2LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgCi0gICAgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgMTI4LCAKLSAgICA4MCwgNzIsIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgODIsIAotICAgIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA4NiwgCi0gICAgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA4MCwgNjksIDgyLCAKLSAgICA4NCwgMjE3LCA4MiwgNjUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDgwLCA3MywgODMsIDc3LCA2NSwgCi0gICAgMTI4LCA4MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgMTI4LCAKLSAgICA4MiwgNjksIDc2LCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgMTI4LCA4MiwgNjksIAotICAgIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgNzksIDgzLCA2OSwgCi0gICAgODQsIDg0LCA2OSwgMTI4LCA4MiwgODUsIDg1LCA2NiwgODUsIDgyLCA4NSwgMTI4LCA4MywgNjUsIDczLCA3NSwgODUsIDgyLCAKLSAgICA4NSwgMTI4LCA4MywgNjUsIDc2LCA4NCwgNzMsIDgyLCA2OSwgMTI4LCA4MywgNjUsIDc3LCA4MCwgNzIsIDY1LCA3OSwgCi0gICAgMTI4LCA4MywgNjUsIDc4LCA4OSwgNzksIDc5LCA3MSwgMTkzLCA4MywgNjcsIDcyLCA3OSwgNzYsIDY1LCA4MiwgMTI4LCAKLSAgICA4MywgNjcsIDgyLCA4NSwgODAsIDc2LCA2OSwgMTI4LCA4MywgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIAotICAgIDc3LCA4NSwgNzgsIDY3LCA3MywgMTkzLCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgMTI4LCA4MywgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgMTI4LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCAKLSAgICA3OCwgMTk3LCA4MywgNzYsIDY1LCA4NiwgNzksIDc4LCA3MywgMTk1LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCA3OCwgCi0gICAgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCA4MywgMTI4LCAKLSAgICA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIAotICAgIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIDgyLCA2NSwgCi0gICAgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODUsIDY2LCA3NCwgNjksIDY3LCAKLSAgICA4NCwgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCA2OCwgMTI4LCA4MywgODksIDc4LCA2OSwgODYsIDc3LCA2NSwgCi0gICAgMTI4LCA4NCwgNjUsIDczLCA3NiwgNzYsIDY5LCA4MywgMjExLCA4NCwgNjUsIDczLCA4MywgODksIDc5LCA4NSwgMTI4LCAKLSAgICA4NCwgNjUsIDg0LCA4NCwgNzksIDc5LCA2OSwgMTk2LCA4NCwgNjUsIDg0LCA4NywgNjksIDY5LCA3NiwgMTI4LCA4NCwgNjcsIAotICAgIDcyLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgNjksIDgzLCA4MywgNjUsIDgyLCA3OSwgMjA2LCA4NCwgNjksIDgzLCA4MywgCi0gICAgNjksIDgyLCA2NSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDY5LCA2OSwgMjA2LCA4NCwgNzIsIDg1LCA4MiwgNzMsIDgzLCAKLSAgICA2NSwgMjE4LCA4NCwgNzMsIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgNzMsIDgyLCA3OSwgNzgsIDczLCA2NSwgCi0gICAgMjA2LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCAKLSAgICA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCA4NCwgODYsIAotICAgIDczLCA3NywgNjUsIDY4LCA4NSwgMjEwLCA4NCwgODcsIDc5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4NSwgNDUsIDY5LCA3OSwgCi0gICAgNDUsIDY5LCA4NSwgMTI4LCA4NSwgNjYsIDg1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA4NSwgNzcsIDY2LCA4MiwgNjksIDc2LCAKLSAgICA3NiwgMTkzLCA4NiwgNjUsIDgzLCA4NCwgNzgsIDY5LCA4MywgMjExLCA4NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA4NiwgNzMsIDY5LCA4NywgNjgsIDY1LCA4NCwgMTkzLCA4NiwgNzMsIDc2LCA3NiwgNjUsIDcxLCA2OSwgMTI4LCAKLSAgICA4NiwgNzksIDczLCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCA2NSwgMjA1LCA4NywgNjUsIAotICAgIDgzLCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA4OSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4OSwgNzksIDg1LCA4NCwgCi0gICAgNzIsIDcwLCA4NSwgMjA0LCA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3MywgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAKLSAgICAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODMsIDcyLCA2NSwgODYsIDczLCA2NSwgMjA2LCA4NSwgODAsIAotICAgIDg3LCA2NSwgODIsIDY4LCAyMTEsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgNjcsIDczLCA4MiwgNjcsIDc2LCA2OSwgCi0gICAgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDIxMiwgODUsIDgwLCAKLSAgICA4MywgNzMsIDc2LCA3OSwgMjA2LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzgsIDcxLCA2NiwgNjUsIAotICAgIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA2OSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDgzLCA3NiwgCi0gICAgNjUsIDc4LCA4NCwgNjksIDE5NiwgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgMjEyLCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAKLSAgICAyMDQsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgNjgsIDY1LCA3MSwgNjksIDgzLCA3MiwgMTI4LCA4NCwgNjUsIAotICAgIDcxLCA2NSwgNzYsIDc5LCAxOTksIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgCi0gICAgMjA0LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzgsIDY1LCAKLSAgICA4MywgNzUsIDY1LCA4MCwgMjAxLCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIAotICAgIDE5NiwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgMjAwLCA4NiwgNzMsIDgyLCA2NSwgNzcsIDY1LCAxMjgsIDY5LCA3NiwgCi0gICAgNjksIDc3LCA2OSwgNzgsIDIxMiwgNjYsIDg1LCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgNzksIDg0LCA3NiwgNjksIDgzLCAKLSAgICAyMTEsIDc5LCA3MSwgNzksIDc4LCA2OSwgNzUsIDEyOCwgODQsIDY5LCA2OCwgODUsIDc4LCA3MSwgMTI4LCA3NSwgNzMsIAotICAgIDgyLCA3MSwgNzIsIDczLCAyMTgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgCi0gICAgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAyMTAsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgNjgsIDc5LCAKLSAgICA4NSwgNjYsIDc2LCA2OSwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIAotICAgIDEyOCwgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIDg1LCA2NiwgODMsIDY5LCA4NCwgMTI4LCA4NywgNjksIDgzLCA4NCwgNjksIDgyLCAKLSAgICAyMDYsIDY3LCA3MiwgNzMsIDc4LCA2OSwgODMsIDE5NywgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA4NCwgNzIsIAotICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjUsIDgyLCA3NSwgODQsIDczLCA3NSwgCi0gICAgMjA3LCA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCAKLSAgICA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNzMsIDc4LCAxOTksIDg0LCA4NywgNjksIDc2LCA4NiwgNjksIAotICAgIDEyOCwgNjUsIDgyLCA4MiwgNzksIDg3LCA4MywgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY5LCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNzIsIDIxMSwgNzUsIDY1LCA4MywgNzUsIDY1LCA3NiwgMTI4LCA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAKLSAgICAxOTcsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4NiwgODIsIAotICAgIDY1LCA2NywgNzIsIDg5LCAxMjgsIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDE5NSwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgCi0gICAgMTk5LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCAxOTcsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIDIxMiwgNjcsIDY5LCAKLSAgICA2OCwgNzMsIDc2LCA3NiwgMTkzLCA2NywgNzksIDc4LCA4NCwgODIsIDc5LCAyMDQsIDY3LCA4NSwgODIsIDg2LCA3MywgNzgsIAotICAgIDE5OSwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OSwgODEsIDg1LCA2NSwgNzYsIDgzLCAxMjgsIDcwLCA3MywgCi0gICAgNzYsIDc2LCA2OSwgODIsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAKLSAgICAxOTcsIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA4MiwgNzksIAotICAgIDg1LCA3OCwgNjgsIDY5LCAxOTYsIDgzLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDE5MywgODQsIDY3LCA3MiwgNjksIDcyLCA2OSwgCi0gICAgMjAwLCA4NCwgNzksIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1MywgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA4NSwgODIsIDg0LCA3NiwgNjksIAotICAgIDEyOCwgODksIDczLCA2OCwgNjgsIDczLCA4MywgMjAwLCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDY1LCA4MywgCi0gICAgNzIsIDcxLCA2NSwgNjYsIDEyOCwgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA2NiwgNzksIDg0LCA4NCwgNzksIDc3LCAKLSAgICAxMjgsIDY3LCA2OSwgNzgsIDg0LCA4MiwgNjksIDEyOCwgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgMTk2LCA2NywgNzksIAotICAgIDc4LCA4NCwgNjUsIDczLCAyMDYsIDY3LCA3OSwgNzgsIDg0LCA3OSwgODUsIDIxMCwgNjcsIDc5LCA4NSwgNzgsIDY3LCA3MywgCi0gICAgMjA0LCA2NywgODIsIDc5LCA4MywgODMsIDY5LCAxOTYsIDY4LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNjgsIDczLCAKLSAgICA4NiwgNzMsIDY4LCA2OSwgMTk2LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCAxMjgsIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIAotICAgIDIwNiwgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCAxMjgsIDc1LCA3OSwgCi0gICAgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgMTkzLCA3NSwgODUsIDgzLCA3MiwgODUsIDUwLCAKLSAgICAxMjgsIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgCi0gICAgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIDc2LCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODMsIDc1LCAKLSAgICA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIAotICAgIDEyOCwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgMTkzLCA4NCwgNjUsIDY1LCA3NiwgODUsIDc0LCAxOTMsIDg0LCA3MiwgCi0gICAgNjksIDgzLCA2OSwgNzksIDIxMSwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAKLSAgICAyMTcsIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDc4LCA2NywgNzIsIDc5LCA4MiwgMTI4LCA2NSwgNzgsIAotICAgIDY3LCA3OSwgODIsIDY1LCAxMjgsIDY1LCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjYsIDY1LCA3NiwgODUsIDY4LCA2NSwgCi0gICAgMTI4LCA2NiwgNjUsIDgzLCA3MiwgNzUsIDczLCAyMTAsIDY2LCA2OSwgNzgsIDkwLCA2OSwgNzgsIDE5NywgNjYsIDczLCAKLSAgICA3OCwgNjgsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA3MiwgNzksIDgwLCAxMjgsIDY2LCA3NiwgNjksIDc4LCA2OCwgNjksIAotICAgIDE5NiwgNjYsIDc5LCA4NywgODQsIDczLCA2OSwgMTI4LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCAxMjgsIDY3LCA2OSwgCi0gICAgODIsIDQ1LCA4NywgNjUsIDEyOCwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgMjAwLCA2NywgNzIsIDgyLCA3MywgODYsIDczLCAKLSAgICAxMjgsIDY3LCA3NiwgODUsIDgzLCA4NCwgNjksIDIxMCwgNjgsIDY1LCA3MSwgNzEsIDY5LCA4MiwgMTI4LCA2OCwgNjUsIAotICAgIDgwLCA0NSwgNjYsIDY5LCAyMDEsIDY4LCA2NSwgODAsIDQ1LCA4MCwgNzMsIDIwMSwgNjgsIDY5LCA2NywgNzMsIDc3LCA2NSwgCi0gICAgMjA0LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc5LCAKLSAgICA4NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAxOTMsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIAotICAgIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAxMjgsIDcwLCA2OSwgCi0gICAgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDcyLCAKLSAgICAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MiwgNjksIAotICAgIDc2LCA3NywgNjksIDg0LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA3MiwgNzMsIDY2LCA3MywgCi0gICAgMjEyLCA3MywgODMsIDgzLCA3MiwgNjUsIDgyLCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDE5MywgNzUsIDY1LCAKLSAgICA4NiwgODksIDc1LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIAotICAgIDIwMCwgNzUsIDczLCA4MywgNzMsIDc3LCA1MywgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3OCwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgMTk1LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAKLSAgICAyMTEsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA0OSwgMTI4LCA3NywgNjUsIAotICAgIDgyLCA3NSwgNDUsIDUwLCAxMjgsIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgCi0gICAgMTI4LCA3OCwgNjksIDcxLCA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgNzgsIDc5LCAKLSAgICA4NCwgNjcsIDcyLCA2OSwgMTk2LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIAotICAgIDE5OSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgMjAwLCA4MCwgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MywgCi0gICAgNzYsIDY3LCA4MiwgNzksIDIxNSwgODAsIDc2LCA2NSwgNzEsIDczLCA3OSwgMjExLCA4MCwgNzYsIDc5LCA4MCwgNzIsIDg1LCAKLSAgICAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNzMsIAotICAgIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgODMsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgCi0gICAgMTkzLCA4MywgNzIsIDY1LCA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDc2LCAKLSAgICA3OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzcsIDY1LCA3NiwgNzYsIDY5LCAyMTAsIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIAotICAgIDE5OSwgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgMTI4LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4NSwgCi0gICAgODIsIDY1LCA3OCwgNzEsIDEyOCwgODQsIDY1LCA0NSwgODIsIDc5LCA3NiwgMTI4LCA4NCwgNjUsIDc3LCA3MywgNzgsIDcxLCAKLSAgICAxMjgsIDg0LCA2OSwgNzYsIDY5LCA3MywgNjUsIDEyOCwgODQsIDY5LCA3NiwgNzMsIDgzLCA3MiwgMTkzLCA4NCwgNjksIAotICAgIDgzLCA4MywgNjksIDgyLCAxOTMsIDg0LCA3MiwgNjksIDg0LCA3MiwgNjksIDEyOCwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCi0gICAgMjAwLCA4NCwgNzIsIDgyLCA2OSwgNjUsIDY4LCAxMjgsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDE5NiwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA4NiwgODIsIDczLCA2OCwgNzksIAotICAgIDEyOCwgODUsIDgwLCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4NywgNzksIDc2LCA3OSwgODMsIDc5LCAxMjgsIDg5LCA2OSwgCi0gICAgNzYsIDc2LCA3OSwgODcsIDEyOCwgODksIDc5LCA0NSwgODksIDY1LCA2OSwgMTI4LCA4OSwgODUsIDQ1LCA4OSwgNjksIDc5LCAKLSAgICAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA2NSwgNjYsIAotICAgIDg5LCA4MywgNzcsIDY1LCAyMDQsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMjA2LCA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MywgNzIsIDg2LCA4NSwgODMsIDEyOCwgNjUsIDczLCAKLSAgICA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIAotICAgIDEyOCwgNjUsIDc2LCA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzgsIDc4LCA4NSwgNzMsIDg0LCAyMTcsIDY1LCA4MCwgCi0gICAgNjUsIDY1LCA4NCwgNzksIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA2OSwgMTI4LCA2NSwgODIsIDc3LCA3OSwgODUsIDgyLCAKLSAgICAxMjgsIDY1LCA4MiwgODIsIDczLCA4NiwgNjksIDEyOCwgNjUsIDgyLCA4MywgNjksIDc5LCA4MywgMTI4LCA2NSwgODIsIAotICAgIDg1LCA3MiwgODUsIDY1LCAxMjgsIDY1LCA4MywgNjcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDg1LCA3MSwgODUsIDgzLCA4NCwgCi0gICAgMTI4LCA2NSwgODUsIDgzLCA4NCwgODIsIDY1LCAyMDQsIDY1LCA4NSwgODQsIDg1LCA3NywgNzgsIDEyOCwgNjUsIDg2LCAKLSAgICA2OSwgODIsIDY1LCA3MSwgMTk3LCA2NiwgNjUsIDY4LCA3MSwgNjksIDgyLCAxMjgsIDY2LCA2NSwgNzIsIDY1LCA4MiwgNTAsIAotICAgIDEyOCwgNjYsIDY1LCA3MywgNzcsIDY1LCA3MywgMTI4LCA2NiwgNjUsIDc4LCA4NCwgNzksIDY3LCAxMjgsIDY2LCA2NSwgCi0gICAgODIsIDc2LCA2OSwgODksIDEyOCwgNjYsIDY1LCA4MiwgODIsIDY5LCA2OSwgMTI4LCA2NiwgNjksIDg0LCA4NywgNjksIDY5LCAKLSAgICAyMDYsIDY2LCA2OSwgODksIDg5LCA2NSwgNzYsIDEyOCwgNjYsIDczLCA4NCwgODQsIDY5LCA4MiwgMTI4LCA2NiwgNzksIAotICAgIDgyLCA4NSwgODQsIDc5LCAxMjgsIDY2LCA4MiwgNjksIDg2LCA3MywgODMsIDEyOCwgNjYsIDgyLCA3OSwgNzgsIDkwLCA2OSwgCi0gICAgMTI4LCA2NiwgODUsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDY3LCA2NSwgNzgsIDY3LCA2OSwgNzYsIDEyOCwgNjcsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCA4MiwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCAxMjgsIDY3LCA2NSwgODQsIDY1LCA4NywgNjUsIAotICAgIDEyOCwgNjcsIDY1LCA4NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNzIsIDY1LCA3NywgNzUsIDc5LCAxMjgsIDY3LCA3MiwgCi0gICAgNjUsIDc4LCA3MSwgNjksIDEyOCwgNjcsIDcyLCA2NSwgODIsIDczLCA3OSwgMjEyLCA2NywgNzIsIDY5LCA4NiwgODIsIDc5LCAKLSAgICAyMDYsIDY3LCA3MiwgNzMsIDgyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA3MywgODIsIDc5LCA3OCwgMTI4LCA2NywgNzIsIAotICAgIDg1LCA4MiwgNjcsIDcyLCAxMjgsIDY3LCA3NiwgNjksIDcwLCA0NSwgNDksIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDQ1LCA1MCwgCi0gICAgMTI4LCA2NywgNzYsIDczLCA4NiwgNzMsIDgzLCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgNjgsIDEyOCwgNjcsIDc5LCAKLSAgICA3MCwgNzAsIDczLCA3OCwgMTI4LCA2NywgNzksIDc2LCA4NSwgNzcsIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDczLCA2NywgNjUsIAotICAgIDIwNCwgNjcsIDc5LCA4MiwgODAsIDgzLCA2OSwgMTI4LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCAyMTIsIDY4LCA2NSwgCi0gICAgNjUsIDY4LCA3MiwgODUsIDEyOCwgNjgsIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgNjUsIDc3LCA2NSwgODIsIDg1LCAKLSAgICAxMjgsIDY4LCA2NSwgODMsIDY5LCA3MywgNjUsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNjksIAotICAgIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3OCwgNzgsIDY5LCA3OCwgCi0gICAgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIDEyOCwgNjgsIDczLCAKLSAgICA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIAotICAgIDEyOCwgNjgsIDczLCA4NiwgNzksIDgyLCA2NywgMTk3LCA2OCwgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgCi0gICAgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIDc4LCAKLSAgICA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgODgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgODMsIAotICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgCi0gICAgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKLSAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgNjUsIAotICAgIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgCi0gICAgMTkzLCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIDEyOCwgNzAsIDc2LCAKLSAgICA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUxLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIAotICAgIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3NiwgCi0gICAgNzksIDg3LCA2OSwgODIsIDEyOCwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAKLSAgICAyMDQsIDcxLCA2NSwgODMsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgMTI4LCA3MSwgNjksIAotICAgIDc3LCA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgCi0gICAgMjA2LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIAotICAgIDIwMSwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2OSwgCi0gICAgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAKLSAgICAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIDgyLCA4OSwgODYsIDc4LCA3MywgMTkzLCA3MiwgODUsIAotICAgIDczLCA3MywgODQsIDc5LCAxMjgsIDczLCA0NSwgNjYsIDY5LCA2NSwgNzcsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgCi0gICAgMTI4LCA3MywgNzcsIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3OCwgNzEsIDg3LCA2NSwgOTAsIDEyOCwgNzMsIDc4LCAKLSAgICA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDc0LCA3OSwgNzMsIDc4LCA2OSwgNjgsIAotICAgIDEyOCwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDc1LCA2OSwgCi0gICAgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAKLSAgICAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgODAsIDEyOCwgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzYsIAotICAgIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCA1NiwgCi0gICAgMTI4LCA3NSwgODksIDY1LCA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzYsIDY1LCAKLSAgICA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDc3LCA2NSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgNjUsIAotICAgIDIwNCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIDc2LCA2OSwgCi0gICAgODQsIDg0LCA2OSwgODIsIDEyOCwgNzYsIDczLCA3NiwgNzMsIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAKLSAgICAxOTYsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIAotICAgIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgCi0gICAgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgNzcsIDY1LCAKLSAgICA3MywgNjgsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIAotICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgCi0gICAgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDc3LCAKLSAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIAotICAgIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCA3NiwgNzYsIDY5LCA4NCwgCi0gICAgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgODMsIDEyOCwgNzcsIDc5LCAKLSAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgODEsIDY4LCA2NSwgNzcsIAotICAgIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCA3OCwgNjUsIDg1LCA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2OSwgCi0gICAgNzgsIDY1LCA3OCwgNzksIDEyOCwgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAKLSAgICAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgNzgsIDc5LCA3NSwgNzIsIDg1LCA3NSwgMTI4LCA3OCwgNzksIAotICAgIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgCi0gICAgMjEyLCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgNzksIDgwLCAKLSAgICA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIAotICAgIDEyOCwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDgwLCA2NSwgCi0gICAgNzYsIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgODUsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjgsIDY1LCAKLSAgICAxMjgsIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY5LCA3OCwgNzMsIDcyLCA3MywgMTI4LCA4MCwgNjksIAotICAgIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA4MCwgNzMsIDc4LCA3MSwgCi0gICAgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzksIDEyOCwgODAsIDgyLCAKLSAgICA2OSwgNjcsIDY5LCA2OCwgMTk3LCA4MCwgODIsIDY5LCA3MCwgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIAotICAgIDIxMiwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgMTI4LCA4MCwgODUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgxLCA2OSwgCi0gICAgODQsIDY1LCA3OCwgNjUsIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MiwgNjUsIDc3LCA2NiwgNjUsIDg0LCAKLSAgICAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCA3NiwgMTI4LCA4MiwgODUsIAotICAgIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA2NSwgNjUsIDY4LCA3MiwgODUsIDEyOCwgODMsIDY1LCA3NCwgNjgsIDY1LCA3MiwgCi0gICAgMTI4LCA4MywgNjUsIDc3LCA2OSwgNzUsIDcyLCAxMjgsIDgzLCA2NSwgNzgsIDcxLCA2NSwgNTAsIDEyOCwgODMsIDY1LCAKLSAgICA3OCwgNzgsIDg5LCA2NSwgMTI4LCA4MywgNjUsIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgzLCA2NywgNjUsIDc2LCA2OSwgODMsIAotICAgIDEyOCwgODMsIDY3LCA4MiwgNjksIDY5LCA3OCwgMTI4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCAxMjgsIDgzLCA2OSwgCi0gICAgNjUsIDcxLCA4NSwgNzYsIDIwNCwgODMsIDY5LCA2NywgNzksIDc4LCA2OCwgMTI4LCA4MywgNjksIDY3LCA4MiwgNjksIDg0LCAKLSAgICAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIAotICAgIDgyLCA4NiwgNzMsIDY3LCAxOTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDIxNywgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgCi0gICAgMjExLCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCAKLSAgICA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIAotICAgIDE5OSwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgNzIsIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA3MCwgNzAsIDc2LCAKLSAgICAxOTcsIDgzLCA3MywgNjcsIDc1LCA3NiwgNjksIDEyOCwgODMsIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIAotICAgIDg4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3NiwgNzksIDg3LCA3NiwgODksIDEyOCwgODMsIDgwLCA2NSwgNjcsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgODAsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzYsIDEyOCwgODMsIDgwLCAKLSAgICA3MywgODIsIDczLCA4NCwgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDc5LCA4NSwgODQsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDczLCA2OCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMjExLCA4MywgODUsIDY2LCA3MywgODQsIDc5LCAKLSAgICAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDE5NiwgODMsIDg1LCA3NywgNjUsIDgzLCA3MiwgMTI4LCA4MywgODUsIAotICAgIDc3LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NSwgODIsIDcwLCA2NSwgNjcsIDE5NywgODMsIDg3LCA3OSwgODIsIDY4LCA4MywgCi0gICAgMTI4LCA4MywgODksIDc4LCA2NSwgNzAsIDczLCAxMjgsIDgzLCA4OSwgNzksIDg1LCA4NywgNjUsIDEyOCwgODQsIDY1LCAKLSAgICA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDg0LCA4NywgNjksIDY5LCAyMDQsIDg0LCA2NSwgODUsIDgyLCA4NSwgODMsIAotICAgIDEyOCwgODQsIDY5LCA3OCwgODUsIDg0LCA3OSwgMTI4LCA4NCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDg0LCA3MiwgCi0gICAgNjUsIDcyLCA2NSwgNzgsIDEyOCwgODQsIDcyLCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgNjgsIDgzLCAKLSAgICAxMjgsIDg0LCA3MiwgNzMsIDg1LCA4NCwgNzIsIDEyOCwgODQsIDczLCA4MCwgNjksIDcyLCA2NSwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc5LCA2OCwgCi0gICAgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDg0LCAKLSAgICA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAxMjgsIDg1LCA4MCwgODIsIDczLCA3MSwgNzIsIAotICAgIDIxMiwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA4NSwgODIsIDY1LCA3OCwgODUsIDgzLCAxMjgsIDg1LCA4MywgCi0gICAgNzIsIDg1LCA3NywgODgsIDEyOCwgODYsIDY1LCA3NiwgNzYsIDY5LCA4OSwgMTI4LCA4NiwgNjUsIDgyLCA2OSwgNzMsIDY1LCAKLSAgICAyMDEsIDg2LCA2NSwgODIsIDczLCA3NSwgNjUsIDEyOCwgODYsIDczLCA2NywgODQsIDc5LCA4MiwgMjE3LCA4NiwgNzMsIAotICAgIDgyLCA3MywgNjUsIDc3LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIDE5MywgODYsIDc5LCA3NiwgODQsIDY1LCA3MSwgCi0gICAgMTk3LCA4NywgNjUsIDgyLCA3OCwgNzMsIDc4LCAxOTksIDg3LCA2OSwgNjUsIDgwLCA3OSwgNzgsIDEyOCwgODcsIDcyLCAKLSAgICA2OSwgNjksIDc2LCA2OSwgMTk2LCA4NywgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDg3LCA4MiwgNzMsIDg0LCA3MywgNzgsIAotICAgIDE5OSwgODksIDY1LCA3NSwgNjUsIDgzLCA3MiwgMTI4LCA4OSwgNzAsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDg5LCA3OSwgCi0gICAgNDUsIDg5LCA2OSwgNzksIDEyOCwgODksIDgwLCA4MywgNzMsIDc2LCA3MywgMTI4LCA4NCwgNzIsIDY1LCA2NSwgNzgsIAotICAgIDE5MywgNjcsIDY1LCA4MiwgNzMsIDY1LCAyMDYsIDg2LCA2NSwgODIsIDczLCA2NSwgMTI4LCA4MywgODksIDc2LCA3OSwgCi0gICAgODQsIDIwMSwgNjcsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA2NiwgNzYsIDY1LCAKLSAgICA2NywgNzUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAxOTksIDY1LCA2NywgNjcsIDY5LCA3OCwgMjEyLCA4NCwgODIsIAotICAgIDczLCA4MCwgNzYsIDE5NywgNjgsIDc5LCA4NCwgODQsIDY5LCAxOTYsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA3NiwgCi0gICAgODksIDY3LCA3MywgNjUsIDIwNiwgODYsIDY5LCA4MywgODMsIDY5LCAyMDQsIDc2LCA4OSwgNjgsIDczLCA2NSwgMjA2LCAKLSAgICA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNjcsIDc2LCA3OSwgODMsIDY5LCAxOTYsIDY2LCA3OSwgODQsIDg0LCA3OSwgCi0gICAgMjA1LCA3NywgNjksIDY4LCA3MywgODUsIDIwNSwgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDcyLCA2OSwgNjUsIDg2LCAKLSAgICA4OSwgMTI4LCA3NywgNjUsIDc4LCA2NywgNzIsIDIxMywgNjYsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDY3LCA3OSwgNzcsIAotICAgIDc3LCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgNjUsIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDY1LCA3NiwgCi0gICAgODAsIDcyLCA2NSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgODMsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDY4LCAKLSAgICA2NSwgODMsIDczLCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgNjUsIDEyOCwgODMsIDg1LCA2NiwgODMsIDY5LCAyMTIsIAotICAgIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NywgNzksIDgyLCA3OCwgNjksIDIxMCwgODYsIDg1LCA3NiwgNzEsIDY1LCAKLSAgICAyMTAsIDY5LCA4MSwgODUsIDY1LCA3NiwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2NywgODIsIAotICAgIDc5LCAyMDYsIDY3LCA4MiwgNzksIDgzLCA4MywgMTI4LCA3MywgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzgsIDczLCA3OCwgCi0gICAgNjgsIDY1LCAxNzgsIDgzLCA2NSwgODksIDczLCA4MywgMjAxLCA4NCwgNzIsIDY5LCA4NCwgNjUsIDEyOCwgODcsIDcyLCAKLSAgICA3MywgODQsIDY5LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3OCwgODUsIDY2LCA3MywgNjUsIDIwNiwgODksIAotICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDY2LCA2OSwgODMsIDczLCA2OCwgMTk3LCA2NywgNjksIDc4LCA4NCwgODIsIDE5NywgCi0gICAgODMsIDcyLCA2NSwgNjgsIDY4LCAxOTMsIDg0LCA4NywgNjksIDc4LCA4NCwgMjE3LCA2OSwgNjUsIDgyLCA4NCwgNzIsIAotICAgIDEyOCwgNzAsIDczLCA3MCwgODQsIDg5LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgMjAwLCA3NiwgNzMsIDg0LCA4NCwgCi0gICAgNzYsIDE5NywgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIDc4LCA3OSwgODIsIDc3LCA2NSwgMjA0LCA4MiwgNjUsIDczLCAKLSAgICA4MywgNjksIDE5NiwgODQsIDcyLCA3MywgODIsIDg0LCAyMTcsIDY3LCA2NSwgNzgsIDY4LCA4MiwgMTkzLCA2OCwgNjUsIAotICAgIDc4LCA2OCwgNjUsIDEyOCwgNjgsIDY1LCA4MywgNzIsIDY5LCAxOTYsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA3MSwgCi0gICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCAKLSAgICA4MywgNzIsIDY1LCA4MiwgNTAsIDEyOCwgODUsIDc4LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgCi0gICAgMjEyLCA4NCwgNjksIDc3LCA4MCwgODUsIDIxMSwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDY2LCA2NSwgODIsIDgyLCAKLSAgICA2OSwgMTk3LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgyLCA4NCwgNjUsIAotICAgIDcxLCA4MywgMTI4LCA4MywgNjUsIDgzLCA2NSwgNzUsIDEyOCwgNjcsIDcyLCA3MywgNzYsIDc2LCAyMTMsIDY4LCA3MywgCi0gICAgNjksIDgzLCA3MywgMjExLCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc1LCAKLSAgICA3OSwgODAsIDgwLCA2NSwgMTI4LCA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIAotICAgIDgzLCA2NSwgNzcsIDgwLCA3MywgMTI4LCA4MywgNjcsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIDY1LCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4OSwgNzAsIDY5LCA4MywgNzMsIDIxMSwgNjYsIDY1LCA3NiwgNzYsIAotICAgIDc5LCAyMTIsIDY2LCA4MiwgNzksIDc1LCA2OSwgMjA2LCA2NywgNzYsIDczLCA2NywgNzUsIDEyOCwgNjcsIDg1LCA2NiwgCi0gICAgNjksIDY4LCAxMjgsIDY3LCA4NSwgODIsIDg2LCA2OSwgMTk2LCA3MCwgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCAKLSAgICA3OCwgNjcsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3NSwgNjUsIDgzLCA3NSwgNjUsIDIwNCwgNzUsIAotICAgIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc2LCA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgCi0gICAgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgODQsIDgyLCA2OSwgODMsIAotICAgIDIxMSwgODQsIDczLCA3NywgNjksIDgzLCAxMjgsIDg1LCA3MywgNzEsIDcyLCA4NSwgMjEwLCA4NywgNjUsIDg0LCA2OSwgCi0gICAgODIsIDEyOCwgODcsIDY5LCA3MywgNzEsIDcyLCAyMTIsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA2NSwgNzYsIDY1LCAKLSAgICA4OSwgNzIsIDE5NywgNjYsIDY1LCA3NiwgNjUsIDcxLCAxMjgsIDY2LCA2NSwgODMsIDgzLCA2NSwgMTI4LCA2NiwgODIsIAotICAgIDczLCA2OCwgNzEsIDE5NywgNjcsIDcyLCA4MiwgNzksIDc3LCAxOTMsIDY4LCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA2OCwgCi0gICAgNjksIDcxLCA4MiwgNjksIDE5NywgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA3OSwgNzYsIDc2LCA2NSwgMjEwLCAKLSAgICA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgCi0gICAgMTI4LCA4MCwgNjUsIDczLCA4MiwgNjksIDE5NiwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA3MywgNjksIDY3LCAKLSAgICA2OSwgMTI4LCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODEsIDg1LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA3NSwgNjksIAotICAgIDg3LCA2OSwgMTk2LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgODcsIDczLCA3MSwgNzEsIDc2LCAyMTcsIDY1LCA4MiwgCi0gICAgNzksIDg1LCA3OCwgMTk2LCA2NSwgODIsIDgzLCA2OSwgNzksIDIxMSwgNjYsIDg1LCA3NiwgODUsIDcxLCAxMjgsIDY3LCAKLSAgICA2NSwgODIsIDY5LCA4NCwgMTI4LCA2NywgNzYsIDczLCA3MCwgNzAsIDEyOCwgNjcsIDc2LCA3OSwgODQsIDcyLCAxMjgsIAotICAgIDY4LCA2NSwgNzEsIDY5LCA4MywgMjAwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY1LCAKLSAgICAyMDQsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDEyOCwgNzYsIDY1LCA3NywgNjksIAotICAgIDY4LCAxMjgsIDc3LCA2NSwgODAsIDczLCA4MSwgMTI4LCA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzksIDcxLCA3OSwgCi0gICAgNzgsIDY5LCAyMDMsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDg0LCAKLSAgICA3MiwgNjUsIDcyLCAxOTMsIDgzLCA2NywgNzIsIDY5LCA3NywgMTkzLCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzcsIDY1LCA3NiwgNzYsIDEyOCwgCi0gICAgODQsIDY1LCA3NiwgNzMsIDc4LCAxOTksIDg0LCA3MiwgNzMsIDgyLCA2OCwgMjExLCA4NCwgNzIsIDc5LCA4MiwgNzgsIAotICAgIDEyOCwgODQsIDczLCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgODMsIDcyLCA2OSwgCi0gICAgNzEsIDEyOCwgODYsIDY1LCA4MiwgNjksIDczLCAxOTMsIDg3LCA3MiwgNjksIDY1LCA4NCwgMTI4LCA4NywgNzksIDc3LCAKLSAgICA2NSwgNzgsIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDY1LCA3NiwgNjUsIDgwLCA3MiwgMTI4LCA2NiwgNjksIAotICAgIDY1LCA3NywgNjksIDE5NiwgNjYsIDY5LCA4MiwgNjYsIDY5LCAyMTAsIDY2LCA3MywgNzgsIDY1LCA4MiwgMjE3LCA2NiwgCi0gICAgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNjYsIDc5LCA4NywgODQsIDczLCAxOTcsIDY3LCA3MiwgNjksIDY3LCA3NSwgMTI4LCAKLSAgICA2NywgNzIsIDczLCA3NiwgNjgsIDEyOCwgNjcsIDg1LCA4MiwgODYsIDY5LCAxMjgsIDY4LCA2NSwgNzYsIDY4LCA2NSwgCi0gICAgMTI4LCA2OCwgNjUsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCAyMDQsIDY4LCA2OSwgNjUsIDg0LCAKLSAgICA3MiwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjksIDgzLCA3MiwgNjksIDUxLCAxMjgsIDY5LCA4NCwgNjksIAotICAgIDgyLCA3OSwgMjA2LCA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCAxMjgsIDcwLCA3MywgCi0gICAgNzEsIDg1LCA4MiwgMTk3LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCAKLSAgICA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgODIsIDczLCA4NCwgODUsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIAotICAgIDcxLCA2OSwgNzgsIDczLCA3NSwgMjAxLCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAKLSAgICAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIAotICAgIDczLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDczLCA4MiwgCi0gICAgNzMsIDgxLCAxMjgsIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIDEyOCwgNzIsIDg3LCAKLSAgICA2NSwgNzMsIDgyLCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNzUsIAotICAgIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNzMsIDg5LCA2OSwgNzksIDIwMywgCi0gICAgNzUsIDc2LCA2NSwgODMsIDc3LCAxOTMsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgODIsIAotICAgIDEyOCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAyMTAsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgCi0gICAgNjUsIDEyOCwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NywgNjUsIDgzLCAKLSAgICA3MiwgNTAsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIDc2LCAxMjgsIDc3LCA3OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNjUsIAotICAgIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgCi0gICAgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCAKLSAgICA4MCwgNzMsIDY1LCA4MywgNzcsIDE5MywgODAsIDczLCA4MiwgNzMsIDcxLCAxMjgsIDgwLCA3NiwgNjUsIDc4LCA2NywgCi0gICAgMjAzLCA4MCwgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgxLCA2NSwgODQsIDY1LCAKLSAgICA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCA3MSwgODksIAotICAgIDY1LCA3OCwgMTI4LCA4MiwgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIDc4LCA4OSwgNzMsIDc4LCAxOTksIDgzLCA2NywgCi0gICAgODIsIDY5LCA2OSwgMjA2LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgODMsIDY5LCA4MiwgNzMsIDcwLCAyMTEsIDgzLCAKLSAgICA2OSwgODMsIDY1LCA3NywgMTk3LCA4MywgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgODIsIDgwLCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDIxMSwgODMsIDcyLCA4NywgNjUsIAotICAgIDY1LCAxMjgsIDgzLCA3MiwgODcsIDczLCA3MywgMTI4LCA4MywgNzIsIDg3LCA3OSwgNzksIDEyOCwgODMsIDczLCA3MSwgCi0gICAgNzgsIDgzLCAxMjgsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAKLSAgICA4OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgMTI4LCA4MywgNzYsIDc5LCA4NiwgNzksIDEyOCwgODMsIAotICAgIDgwLCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODQsIDc5LCA2NywgNzUsIDEyOCwgCi0gICAgODMsIDg0LCA4NSwgNjgsIDg5LCAxMjgsIDgzLCA4NSwgNzIsIDg1LCA4MiwgMTI4LCA4MywgODUsIDc1LCA4NSwgNzgsIAotICAgIDEyOCwgODQsIDY1LCA3OCwgNzgsIDY5LCAxOTYsIDg0LCA2OSwgNzYsIDc5LCA4NSwgMjExLCA4NCwgNzIsIDg3LCA2NSwgCi0gICAgNjUsIDEyOCwgODQsIDczLCA3MSwgNjksIDgyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgMjEyLCA4NCwgODIsIDg1LCAKLSAgICA3OCwgNzUsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODcsIAotICAgIDY5LCA3NiwgODYsIDE5NywgODUsIDgyLCA4NSwgNjgsIDY1LCAxMjgsIDg3LCA2NSwgODQsIDY3LCA3MiwgMTI4LCA4OSwgCi0gICAgNjksIDgzLCA4NCwgODUsIDEyOCwgODksIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCA2OSwgMTI4LCAKLSAgICA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIDQ1LCA3NSwgNzIsIDg5LCA4NSwgCi0gICAgMTk2LCA0NSwgODAsIDcyLCA4MiwgODUsIDEyOCwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA3MSwgNjUsIDczLCAKLSAgICA3OCwgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NiwgNjksIAotICAgIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA3OCwgCi0gICAgODAsIDY5LCA2NSwgMTI4LCA2NSwgNzgsIDgzLCA3MiwgNjksIDEyOCwgNjUsIDgwLCA2NSwgODIsIDg0LCAxMjgsIDY1LCAKLSAgICA4MCwgODIsIDczLCA3NiwgMTI4LCA2NSwgODIsIDY5LCA4MCwgNjUsIDEyOCwgNjUsIDgyLCA3MywgNjksIDgzLCAxMjgsIAotICAgIDY1LCA4MiwgNzUsIDY1LCA2NiwgMTI4LCA2NSwgODIsIDc2LCA2NSwgODUsIDE5OSwgNjUsIDgyLCA3OSwgODUsIDgyLCAKLSAgICAxOTMsIDY1LCA4MiwgODIsIDY1LCA4OSwgMTI4LCA2NSwgODIsIDg0LCA2NSwgNjYsIDE5NywgNjUsIDgzLCA2NSwgNzYsIAotICAgIDUwLCAxMjgsIDY1LCA4MywgODksIDg1LCA4MiwgMTkzLCA2NiwgNjUsIDgyLCA2NSwgNTAsIDEyOCwgNjYsIDY2LCA3MywgCi0gICAgNjksIDgwLCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4NCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgODgsIDEyOCwgNjYsIDY2LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDY2LCA2NiwgODUsIDc5LCA4OCwgMTI4LCA2NiwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNjYsIAotICAgIDY5LCA2OSwgODQsIDY1LCAxMjgsIDY2LCA2OSwgNzAsIDc5LCA4MiwgMTk3LCA2NiwgNjksIDcyLCA2OSwgNzIsIDEyOCwgCi0gICAgNjYsIDY5LCA3MywgODQsIDcyLCAxMjgsIDY2LCA2OSwgNzgsIDY4LCA2OSwgMTI4LCA2NiwgNzIsIDY5LCA4NCwgNzIsIAotICAgIDEyOCwgNjYsIDczLCA4MiwgNzEsIDY1LCAxMjgsIDY2LCA3MywgODMsIDY1LCA3MiwgMTI4LCA2NiwgNzMsIDg0LCA3MywgCi0gICAgNzgsIDE5OSwgNjYsIDc2LCA2NSwgNzgsIDc1LCAxMjgsIDY2LCA3NiwgNzksIDc5LCA2OCwgMTI4LCA2NiwgODIsIDY1LCAKLSAgICA2NywgNjksIDEyOCwgNjYsIDgyLCA2NSwgNzgsIDY3LCAyMDAsIDY2LCA4MiwgNjksIDY1LCA4NCwgMjAwLCA2NiwgODIsIAotICAgIDg1LCA4MywgNzIsIDEyOCwgNjYsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDY2LCA4NSwgNzYsIDc2LCA2OSwgMjEyLCA2NywgCi0gICAgNjUsIDc2LCA4OSwgNjUsIDEyOCwgNjcsIDY1LCA3NywgNzgsIDg1LCAxOTUsIDY3LCA2NSwgNzgsIDY3LCA2OSwgMjA0LCAKLSAgICA2NywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNjUsIDY1LCAxMjgsIDY3LCA2NywgNzIsIDY5LCA2OSwgCi0gICAgMTI4LCA2NywgNjksIDY1LCA3NiwgNjcsIDEyOCwgNjcsIDY5LCA2NywgNjksIDc1LCAxMjgsIDY3LCA2OSwgNzMsIDgyLCAKLSAgICA4NCwgMTI4LCA2NywgNjksIDgyLCA2OSwgODMsIDEyOCwgNjcsIDcyLCA2NSwgNjgsIDY1LCAxMjgsIDY3LCA3MiwgNjUsIAotICAgIDczLCA4MiwgMTI4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDcxLCAxMjgsIDY3LCA3MiwgCi0gICAgNzksIDc1LCA2OSwgMTI4LCA2NywgNzIsIDg1LCA3NiwgNjUsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDY3LCAKLSAgICA3MiwgODUsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODgsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDg4LCAxMjgsIAotICAgIDY3LCA3MiwgODksIDgyLCA4OCwgMTI4LCA2NywgNzYsIDc5LCA4NSwgNjgsIDEyOCwgNjcsIDc5LCA2OSwgNzgsIDcxLCAKLSAgICAxMjgsIDY3LCA3OSwgNzYsIDc5LCA4MiwgMTI4LCA2NywgNzksIDc3LCA2OSwgODQsIDEyOCwgNjcsIDc5LCA3NywgNzMsIAotICAgIDc4LCAxOTksIDY3LCA3OSwgNzcsIDc3LCA3OSwgMjA2LCA2NywgNzksIDg2LCA2OSwgODIsIDEyOCwgNjcsIDgyLCA2OSwgCi0gICAgNjgsIDczLCAyMTIsIDY3LCA4MiwgNzksIDczLCA4OCwgMTI4LCA2OCwgNjUsIDY1LCA4MywgODUsIDEyOCwgNjgsIDY1LCAKLSAgICA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2NSwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDc2LCA2NSwgODQsIDIwMCwgNjgsIAotICAgIDY1LCA4MiwgNjUsIDUxLCAxMjgsIDY4LCA2NSwgODIsIDY1LCA1MiwgMTI4LCA2OCwgNjUsIDgyLCA3MSwgNjUsIDEyOCwgCi0gICAgNjgsIDY1LCA4NiwgNzMsIDY4LCAxMjgsIDY4LCA2OCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjgsIDczLCA2OSwgODAsIAotICAgIDEyOCwgNjgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDY4LCA2OCwgODUsIDc5LCA4MCwgMTI4LCA2OCwgNjgsIDg1LCA3OSwgCi0gICAgODgsIDEyOCwgNjgsIDY4LCA4NSwgODIsIDg4LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgMTk3LCA2OCwgNjksIDgyLCAKLSAgICA2OSwgODQsIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIAotICAgIDcyLCA3OSwgNzksIDEyOCwgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgODAsIDg0LCA2OSwgMTI4LCA2OCwgCi0gICAgNzMsIDg2LCA3MywgNjgsIDE5NywgNjgsIDc5LCA3NywgNjUsIDczLCAyMDYsIDY4LCA3OSwgNzksIDc4LCA3MSwgMTI4LCAKLSAgICA2OCwgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA4MywgCi0gICAgMTI4LCA2OCwgODUsIDcxLCA4NSwgNjgsIDEyOCwgNjksIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCAKLSAgICA2NSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NiwgNjksIAotICAgIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgNjksIDc4LCA2OCwgNjksIDgwLCAxMjgsIDY5LCA3OCwgCi0gICAgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY4LCAxMjgsIDY5LCAKLSAgICA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODMsIDcyLCA0OSwgNTQsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIAotICAgIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODgsIDczLCA4MywgODQsIDEyOCwgNzAsIDY1LCA2NSwgNzAsIDg1LCAKLSAgICAxMjgsIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2OSwgNzgsIAotICAgIDcxLCAxMjgsIDcwLCA3MiwgODQsIDc5LCA4MiwgMTkzLCA3MCwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgNzAsIDczLCA3MCwgCi0gICAgODQsIDcyLCAxMjgsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCAKLSAgICA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIAotICAgIDc5LCA4MiwgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3NywgNjksIDEyOCwgCi0gICAgNzAsIDgyLCA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MSwgNjUsIDY1LCA3MCwgODUsIAotICAgIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgCi0gICAgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzcsIDY1LCAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgMTI4LCA3MSwgNjksIDc4LCAKLSAgICA4NCwgNzYsIDE5NywgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNzEsIAotICAgIDczLCA2OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCA4OCwgMTI4LCAKLSAgICA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIDcxLCA3MywgNjgsIDczLCA3NywgCi0gICAgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgODMsIDY1LCAKLSAgICA3NiwgMTI4LCA3MSwgNzYsIDY5LCA3MywgNjcsIDIwMCwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgNjUsIAotICAgIDczLCA3OCwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcyLCA0NSwgCi0gICAgODQsIDg5LCA4MCwgMTk3LCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzEsIDc2LCA2NSwgMjE4LCA3MiwgNjUsIDczLCA4NCwgODUsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIAotICAgIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDczLCA2OCwgNzMsIDc4LCAKLSAgICAxOTksIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgNzksIAotICAgIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgCi0gICAgODIsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgCi0gICAgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzksIDc5LCA4MiwgODUsIAotICAgIDEyOCwgNzIsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDgyLCA2NSwgCi0gICAgNzgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgODgsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIAotICAgIDg1LCA3OSwgODgsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgCi0gICAgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCAKLSAgICA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAxOTMsIDc0LCA3NCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA3NCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc0LCA3NCwgODUsIDc5LCAKLSAgICA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3OSwgNzUsIAotICAgIDY5LCA4MiwgMTI4LCA3NCwgNzksIDg5LCA3OSwgODUsIDIxMSwgNzQsIDg1LCA2OCwgNzEsIDY5LCAxMjgsIDc0LCA4NSwgCi0gICAgNjksIDg1LCA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCA4NSwgNzgsIDY1LCAxMjgsIAotICAgIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDcyLCAKLSAgICAxMjgsIDc1LCA2OSwgNzYsIDg2LCA3MywgMjA2LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIDY5LCA3NywgODAsIAotICAgIDg1LCAyMDQsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCA3NSwgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDcyLCA2NSwgCi0gICAgNzgsIDY4LCAxOTMsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCAKLSAgICA4NywgNjUsIDczLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzgsIDczLCA3MCwgNjksIDEyOCwgNzUsIAotICAgIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA4NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIDEyOCwgCi0gICAgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNjUsIDY1LCA3NywgODUsIAotICAgIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDg0LCA3MywgCi0gICAgNzUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNzMsIDY2LCAKLSAgICA4MiwgNjUsIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA4MywgMTI4LCA3NiwgNzMsIAotICAgIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NywgCi0gICAgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNzIsIDcyLCA2NSwgMTI4LCAKLSAgICA3NywgNjUsIDczLCA4MiwgODUsIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMjE4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDcyLCAxMjgsIDc3LCA2NSwgODMsIDc5LCAKLSAgICA4MiwgMTkzLCA3NywgNjksIDY5LCA3NywgODUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzYsIAotICAgIDc5LCA3OCwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA4MiwgNzUsIDcyLCAxOTMsIDc3LCA2OSwgCi0gICAgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCAKLSAgICA3MSwgNjYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDczLCA3NSwgODIsIDczLCAKLSAgICAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDgyLCA2OSwgNjgsIDEyOCwgNzcsIDczLCA4MywgODIsIAotICAgIDY1LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgMTI4LCA3NywgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCA3OCwgCi0gICAgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCAKLSAgICA4MywgNzIsIDUxLCAxMjgsIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIAotICAgIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODUsIDY4LCA3MywgMjE4LCA3OCwgNjUsIDg4LCA3MywgNjUsIDIwNiwgCi0gICAgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgODgsIAotICAgIDEyOCwgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgCi0gICAgODgsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAKLSAgICA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIAotICAgIDczLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3OCwgCi0gICAgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCAKLSAgICA3OCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODksIDgyLCAKLSAgICA4OCwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIAotICAgIDc5LCA3OSwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAxMjgsIDc4LCA4MiwgCi0gICAgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA3NywgNjksIDgyLCAyMDcsIDc4LCAKLSAgICA4OSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgODQsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIAotICAgIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCA4OCwgMTI4LCA3OSwgNjYsIDc0LCA2OSwgNjcsIDIxMiwgNzksIDc0LCA2OSwgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc4LCAKLSAgICA3NSwgNjUsIDgyLCAxMjgsIDc5LCA4MCwgODQsIDczLCA3OSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgNzksIAotICAgIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA4MCwgNjUsIDY1LCA4NCwgODUsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIAotICAgIDEyOCwgODAsIDY1LCA4NCwgNjUsIDc1LCAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgMTI4LCA4MCwgNjksIDY1LCA2NywgCi0gICAgNjksIDEyOCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDczLCAKLSAgICA4NCwgNzIsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAxMjgsIDgwLCA2OSwgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIAotICAgIDgwLCA2OSwgODQsIDEyOCwgODAsIDY5LCA4MiwgODQsIDcyLCAyMDcsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgCi0gICAgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCAKLSAgICA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDg0LCA3OSwgCi0gICAgMTI4LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIDc5LCA3OCwgNjgsIDc5LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAKLSAgICA4NCwgMTI4LCA4MCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgxLCA2NSwgNjUsIAotICAgIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY4LCA3NywgNjUsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgCi0gICAgODIsIDc4LCA2OSwgMjE3LCA4MSwgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAxMjgsIDgyLCAKLSAgICA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA4MywgNzIsIDY1LCAxMjgsIAotICAgIDgyLCA2NSwgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDg0LCA3MywgNzksIDEyOCwgODIsIDY5LCA2NywgNzksIDgyLCAKLSAgICAxOTYsIDgyLCA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NiwgNzMsIAotICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNzIsIDc5LCA4NCwgNzMsIDE5NSwgODIsIDczLCA2NywgCi0gICAgNjksIDc3LCAxMjgsIDgyLCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgNzgsIDEyOCwgODIsIDc5LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDgyLCA4MiwgODUsIDc5LCA4OCwgMTI4LCA4MiwgODIsIDg1LCA4MiwgODgsIDEyOCwgODIsIAotICAgIDgyLCA4OSwgODIsIDg4LCAxMjgsIDgyLCA4NSwgODAsIDczLCA3MywgMTI4LCA4MiwgODcsIDY1LCA3MiwgNjUsIDEyOCwgCi0gICAgODMsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDgzLCA2NSwgNzAsIDcyLCA2NSwgMTI4LCA4MywgNjUsIDc3LCA2OSwgNzUsIAotICAgIDIwMCwgODMsIDY1LCA3NywgNzUsIDY1LCAxMjgsIDgzLCA2NSwgNzcsIDg5LCA3OSwgMjAzLCA4MywgNjUsIDc4LCA2NSwgCi0gICAgNzIsIDEyOCwgODMsIDY1LCA4NSwgNzMsIDc2LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNjksIDczLCAKLSAgICA4MywgNzcsIDE5MywgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgNzIsIAotICAgIDY5LCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgCi0gICAgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAKLSAgICA4OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIAotICAgIDY3LCA2OSwgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NywgCi0gICAgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDczLCA3NiwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCAKLSAgICA3OCwgNzksIDg1LCA4NCwgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NywgNzMsIDc2LCAyMDcsIAotICAgIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA4NSwgNzgsIDcxLCAKLSAgICAyMTEsIDgzLCA4MSwgODUsIDczLCA4MywgMjAwLCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIAotICAgIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgCi0gICAgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCAKLSAgICA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NywgNjksIDY5LCA4NCwgMTI4LCA4MywgODcsIDc5LCA4MiwgNjgsIDEyOCwgODMsIAotICAgIDg5LCA4MiwgNzcsIDY1LCAxMjgsIDg0LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA4NCwgNjUsIDgwLCA2OSwgODIsIDEyOCwgCi0gICAgODQsIDY3LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA2OSwgNzEsIDY5LCA3MiwgMTI4LCA4NCwgNjksIDczLCA4NywgODMsIAotICAgIDEyOCwgODQsIDY5LCA4NiwgNzMsIDgyLCAxMjgsIDg0LCA3MiwgNzMsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgNjgsIDEyOCwgODQsIDcyLCA3MywgODQsIDY1LCAxMjgsIDg0LCA3MiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzIsIDg1LCAKLSAgICA3OCwgNzEsIDEyOCwgODQsIDcyLCA4OSwgNzksIDc5LCAyMDUsIDg0LCA3MywgNjUsIDgyLCA2NSwgMTI4LCA4NCwgNzMsIAotICAgIDc4LCA3OCwgNjksIDEyOCwgODQsIDczLCA4MCwgODAsIDczLCAxMjgsIDg0LCA3NiwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgCi0gICAgODIsIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCAKLSAgICA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAyMDMsIDg0LCA4NCwgODMsIDY5LCA2OSwgCi0gICAgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzgsIDc4LCAKLSAgICA4OSwgMTI4LCA4NCwgODUsIDgyLCA3OSwgNTAsIDEyOCwgODQsIDg1LCA4NSwgNzcsIDg1LCAxMjgsIDg0LCA4OSwgODAsIAotICAgIDY5LCA0NSwgMTc3LCA4NCwgODksIDgwLCA2OSwgNDUsIDE3OCwgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzksIDg0LCA4OSwgCi0gICAgODAsIDY5LCA0NSwgMTgwLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MSwgODQsIDg5LCA4MCwgNjksIDQ1LCAxODIsIDg0LCAKLSAgICA4OSwgODAsIDY5LCA0NSwgMTgzLCA4NSwgNjgsIDY1LCA2NSwgODQsIDEyOCwgODUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIAotICAgIDg1LCA3NywgNjYsIDczLCA3OCwgMTI4LCA4NSwgNzgsIDczLCA4NCwgODksIDEyOCwgODUsIDgwLCA4NywgNjUsIDgyLCAKLSAgICAxOTYsIDg1LCA4MywgODMsIDg1LCA1MSwgMTI4LCA4NSwgODQsIDg1LCA3NSwgNzMsIDEyOCwgODYsIDY1LCA2NSwgODYsIAotICAgIDg1LCAxMjgsIDg2LCA2NSwgODMsIDczLCA4MywgMTI4LCA4NiwgNjUsIDg0LCA3MiwgODksIDEyOCwgODYsIDY5LCA2NywgCi0gICAgODQsIDc5LCAyMTAsIDg2LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA4NiwgNjksIDgzLCA4NCwgNjUsIDEyOCwgODYsIDczLCAKLSAgICA4MiwgNzEsIDY1LCAxMjgsIDg2LCA3MywgODIsIDcxLCA3OSwgMTI4LCA4NiwgNzksIDc2LCA4NSwgNzcsIDE5NywgODYsIAotICAgIDkwLCA3NywgNjksIDg0LCAxMjgsIDg3LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NywgNjUsIDgzLCA3NiwgNjUsIDEyOCwgCi0gICAgODcsIDcyLCA2OSwgNjksIDc2LCAxMjgsIDg3LCA3MywgNzgsIDY4LCA4NSwgMTI4LCA4NywgNzMsIDc4LCA3NCwgNjUsIAotICAgIDEyOCwgODcsIDgyLCA2OSwgNjUsIDg0LCAyMDAsIDg3LCA4MiwgNzksIDc4LCA3MSwgMTI4LCA4OCwgNjksIDgzLCA4NCwgCi0gICAgNjksIDIxMSwgODksIDY1LCA0NSwgODksIDc5LCAxMjgsIDg5LCA2NSwgNjUsIDY4LCA3OSwgMTI4LCA4OSwgNjUsIDY1LCAKLSAgICA4MiwgODUsIDEyOCwgODksIDY1LCA2OCwgNjgsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIAotICAgIDc1LCA3MiwgNzIsIDEyOCwgODksIDY5LCA3OSwgNDUsIDc5LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA4NSwgMTI4LCA4OSwgCi0gICAgNjksIDg0LCA3MywgODYsIDEyOCwgODksIDczLCA5MCwgNjksIDg0LCAxMjgsIDg5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCAKLSAgICA5MCwgNjUsIDgyLCA4MSwgNjUsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDczLCA3OCwgCi0gICAgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzgsIAotICAgIDc5LCA4MiwgMTI4LCA5MCwgODUsIDY2LCA4NSwgODIsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA5MCwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDkwLCAKLSAgICA5MCwgODksIDgyLCA4OCwgMTI4LCA4NSwgODAsIDgwLCA2OSwgMjEwLCA4MiwgNzksIDc3LCA2NSwgMjA2LCA3NSwgNjUsIAotICAgIDg5LCA2NSwgMjAwLCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA4MywgODQsIDc5LCA4MCwgMTI4LCA2NywgNzIsIDczLCA3NSwgCi0gICAgMjAxLCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgODgsIDczLCA2NSwgMTI4LCA4MywgNzIsIDc5LCA4MiwgMjEyLCA5MCwgCi0gICAgNjksIDgyLCA3OSwgMTI4LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCA4NCwgNzMsIDc2LCA2OCwgMTk3LCA4MywgNzIsIDY5LCAKLSAgICA2OSwgMjA2LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA4NCwgNjksIDc4LCA4NSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgMTI4LCAKLSAgICA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA4NiwgNzksIDY3LCA2NSwgMjA0LCA2NywgODUsIAotICAgIDgyLCA3NiwgMjE3LCA2NSwgODQsIDg0LCA3MywgMTk1LCA4MywgNzksIDg1LCA4NCwgMjAwLCA4MCwgNzksIDczLCA3OCwgCi0gICAgMjEyLCA2NiwgNjksIDc2LCA3OSwgMjE1LCA2NiwgODUsIDcyLCA3MywgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA4MiwgCi0gICAgNjksIDgzLCA4NCwgMTI4LCA4NCwgNjUsIDY3LCA3NSwgMTI4LCA2OCwgNjUsIDgzLCA3MiwgMTI4LCA2OCwgNzksIDg3LCAKLSAgICA3OCwgMTI4LCA3NSwgNjUsIDgyLCA2OSwgMjA2LCA3OCwgNDUsIDY1LCA4MiwgMjE3LCA4MywgNjksIDg2LCA2OSwgMjA2LCAKLSAgICA2OCwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgMjA2LCA4MywgNzIsIDY5LCA3NiwgMjA0LCA2NSwgNjcsIAotICAgIDg1LCA4NCwgMTk3LCA2NiwgNjksIDg0LCA2NSwgMTI4LCA2NiwgODIsIDY5LCA4NiwgMTk3LCA2NywgNzksIDc3LCA3NywgCi0gICAgMTkzLCA3MSwgODIsIDY1LCA4NiwgMTk3LCA3NSwgNzksIDY5LCA4NCwgMTI4LCA4NiwgNjUsIDgyLCA3MywgMTkzLCA2NywgCi0gICAgODUsIDgyLCA3NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgMTI4LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3NiwgNjUsIDcxLCAKLSAgICA2NSwgMjEwLCA5MCwgNjksIDg0LCA2NSwgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NywgNzIsIDY5LCA4MywgMjExLCAKLSAgICA3MCwgNjUsIDgyLCA4MywgMjAxLCA3OCwgODUsIDc4LCA4NSwgMjE4LCA4NCwgNzIsIDY5LCA4NCwgMTkzLCA4MCwgNzYsIAotICAgIDg1LCA4MywgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4NSwgNzgsIDczLCA3OSwgMjA2LCA2NSwgODQsIDg0LCA2NSwgCi0gICAgMjAzLCA3MCwgNzksIDgyLCA4NCwgMjE3LCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3OCwgNzksIDg0LCA2OSwgMTI4LCA4NCwgCi0gICAgNjUsIDc1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2NSwgMjA0LCA3MCwgNzMsIDcwLCA4NCwgMjE3LCA3MywgNzcsIDY1LCAKLSAgICA3MSwgMTk3LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCAKLSAgICA2OSwgNzcsIDgwLCA4NCwgMjE3LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA4MywgNzMsIDcxLCA3NywgMTkzLCA4MywgODUsIAotICAgIDczLCA4NCwgMTI4LCA4NywgNzMsIDc4LCA2OCwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3NSwgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA3NiwgNzksIDc5LCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgMTI4LCA2NiwgNjksIDcxLCA3MywgMjA2LCA2NywgCi0gICAgNjUsIDgyLCA2OSwgMjEyLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MiwgNzksIDgyLCAKLSAgICA3MywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgMTkzLCA3NywgNzksIDc5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCAKLSAgICA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODUsIDc4LCA3MSwgMTI4LCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA2NiwgNjUsIAotICAgIDY3LCA3NSwgMTI4LCA2NiwgNjUsIDc4LCA1MCwgMTI4LCA2NywgNzYsIDY5LCA3MCwgMTI4LCA2NywgODIsIDc5LCA4MywgCi0gICAgMjExLCA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MSwgCi0gICAgODIsIDY5LCA2NSwgMjEyLCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgODUsIDgzLCA3MiwgMTI4LCA3OCwgNjgsIDc5LCAKLSAgICA3NiwgMTk3LCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MiwgNzksIDc5LCA4NCwgMTI4LCA4MiwgODUsIDgwLCA2OSwgMTk3LCAKLSAgICA4MywgNzIsIDY1LCA4MiwgMjA4LCA4NCwgNjcsIDcyLCA2OSwgMjAwLCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgNzIsIAotICAgIDczLCA4MiwgMTk2LCA4NCwgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTk5LCA4OSwgNjUsIDc4LCA3MSwgCi0gICAgMTI4LCA2NSwgNzYsIDg0LCA2NSwgMTI4LCA2NiwgNjksIDcyLCA2OSwgMjAwLCA2NywgNzIsIDY5LCA2NywgMjAzLCA2NywgCi0gICAgODIsIDc5LCA4MCwgMTI4LCA2OCwgNjUsIDc3LCA3NywgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNzMsIDgyLCAKLSAgICA1MCwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCAKLSAgICA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNzIsIAotICAgIDY5LCA3MywgMTI4LCA3NSwgODcsIDY1LCA2NSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3OCwgNzEsIDc5LCA2OSwgCi0gICAgMjAwLCA3OSwgNjYsIDc5LCA3NiwgMjExLCA4MCwgNjksIDcyLCA2OSwgMjAwLCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MiwgCi0gICAgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgMjA2LCA4MiwgODQsIDY1LCA3MSwgMjExLCA4MywgNjcsIDcyLCAKLSAgICA4NywgMTkzLCA4MywgNzIsIDczLCA2OCwgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCAKLSAgICA4NCwgNzIsIDc5LCA4MiwgMjA2LCA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NiwgNjUsIDc4LCA2OSwgMTI4LCA4NywgNjUsIAotICAgIDg2LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NiwgNzMsIDgyLCA2OCwgCi0gICAgMTI4LCA2NywgNjUsIDgyLCA3MywgMjAzLCA2NywgNjUsIDgyLCA3OSwgMjA2LCA2NywgNjcsIDcyLCA2OSwgMTI4LCA2NywgCi0gICAgNzIsIDY1LCA4MiwgMTI4LCA2NywgNzIsIDczLCA3OCwgMTI4LCA2NywgNzIsIDgyLCA3OSwgMTkzLCA2NywgNzMsIDY5LCAKLSAgICA4NSwgMTk1LCA2NywgODcsIDY1LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA3MCwgNzksIDc5LCA4NCwgMTI4LCAKLSAgICA3MSwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNzksIDc2LCA2OCwgMTI4LCA3MSwgODIsIDY1LCA4MywgMjExLCA3MiwgNjUsIAotICAgIDg0LCA2NSwgMTk4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3NCwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNjksIDg0LCA4NCwgCi0gICAgMjAxLCA3NSwgNzIsIDY1LCA4MiwgMTI4LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCA3NiwgCi0gICAgODUsIDcxLCA2NSwgMjA0LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgzLCAKLSAgICA3MywgMTk1LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgMTI4LCA3OCwgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA3OSwgODUsIDg0LCA2OSwgMjEwLCA3OSwgODgsIDY5LCA3MywgMTkzLCA4MCwgNjUsIDgwLCA2OSwgMjEwLCA4MCwgNjksIAotICAgIDY4LCA2NSwgMjA0LCA4MCwgNzIsIDY1LCA4MiwgMTI4LCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgCi0gICAgMTk3LCA4MCwgODcsIDY1LCA2NSwgMTI4LCA4MywgNjksIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA4MiwgMTc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDg3LCAKLSAgICA2NSwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMjEyLCAKLSAgICA4MywgODcsIDY1LCA2NSwgMTI4LCA4MywgODcsIDY1LCA4MywgMjAwLCA4NCwgNzIsIDczLCA3MywgMTI4LCA4NCwgNzIsIAotICAgIDc5LCA3OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODcsIDY1LCA2NSwgCi0gICAgMTI4LCA4NywgNzMsIDc4LCA2OSwgMTI4LCA4OSwgNjUsIDcxLCA3MiwgMTI4LCA4OSwgNjUsIDkwLCA3MiwgMTI4LCA4OSwgCi0gICAgNzMsIDg3LCA3OCwgMTI4LCA4OSwgODcsIDY1LCA2NSwgMTI4LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCAKLSAgICA4MiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgMTk2LCA2NSwgNzYsIDY5LCA4NSwgMjEyLCA2NSwgNzYsIDcwLCA2NSwgMTI4LCAKLSAgICA2NSwgNzcsIDY1LCA4MiwgMTI4LCA2NSwgODAsIDY5LCA4MywgMjA3LCA2NSwgODIsIDcxLCA3MywgMTI4LCA2NiwgNjYsIAotICAgIDg1LCA4NCwgMTI4LCA2NiwgNjksIDY1LCA4NCwgMTI4LCA2NiwgNzYsIDY1LCA2OCwgMTk3LCA2NiwgNzYsIDg1LCA2OSwgCi0gICAgMTI4LCA2NiwgNzksIDc4LCA2OSwgMTI4LCA2NiwgODIsIDc5LCA2NSwgMTk2LCA2NiwgODIsIDg1LCA4MywgMjAwLCA2NiwgCi0gICAgODUsIDc1LCA4OSwgMTI4LCA2NiwgOTAsIDg1LCA3OCwgMTk5LCA2NywgNjUsIDgyLCA4NCwgMTI4LCA2NywgODUsIDc5LCAKLSAgICA4MCwgMTI4LCA2NywgODUsIDgyLCA4NiwgMTk3LCA2NywgODcsIDczLCA3MywgMTI4LCA2NywgODcsIDc5LCA3OSwgMTI4LCAKLSAgICA2OCwgNjUsIDc2LCA2OSwgMjEyLCA2OCwgNjUsIDc4LCA3MSwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgMTI4LCA2OCwgNjksIAotICAgIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgOTAsIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDcyLCA2OSwgCi0gICAgMTI4LCA2OCwgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OSwgCi0gICAgNjUsIDgyLCA4NCwgMjAwLCA2OSwgODIsIDY1LCA4MywgMTk3LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNzMsIDgzLCAKLSAgICA3MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgODIsIDc5LCA3MSwgMTI4LCAKLSAgICA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjcsIAotICAgIDczLCA3MSwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzIsIDY1LCA2OCwgCi0gICAgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzMsIDc3LCA2OSwgMjA0LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgCi0gICAgODIsIDY1LCA2NywgMTk3LCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODksIDY1LCAKLSAgICA4MywgMTI4LCA3MSwgODksIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDg0LCA2OSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCAKLSAgICA3MiwgNjYsIDY1LCA4MywgMTkzLCA3MiwgNjksIDc4LCA3MSwgMTI4LCA3MiwgNjksIDgyLCA4NSwgMTI4LCA3MiwgNzIsIAotICAgIDY1LCA2NSwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgMjAwLCA3MiwgODUsIDY2LCA1MCwgMTI4LCA3MiwgODgsIDczLCA4NCwgCi0gICAgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3NCwgCi0gICAgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCA3NCwgNzIsIDY5LCA3MiwgMTI4LCA3NCwgNzQsIDczLCAKLSAgICA2OSwgMTI4LCA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NSwgNjUsIDY4LCA1MCwgMTI4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCAKLSAgICA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNzIsIDY1LCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgNzIsIAotICAgIDcyLCA2NSwgMTI4LCA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODcsIDczLCA3MywgCi0gICAgMTI4LCA3NSwgODcsIDc5LCA3OSwgMTI4LCA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgCi0gICAgNzMsIDg3LCA3OCwgMTI4LCA3NiwgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDg3LCA0NSwgMTg1LCA3NiwgODcsIDY1LCAKLSAgICA2NSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDc5LCA3OSwgMTI4LCA3NywgNjksIDY1LCA4NCwgMTI4LCAKLSAgICA3NywgNjksIDY5LCA3NywgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDgzLCA3OSwgMTI4LCA3NywgNzMsIAotICAgIDY5LCA4NSwgMjA1LCA3NywgNzMsIDc2LCA3NiwgMTk3LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgODcsIDczLCA3MywgCi0gICAgMTI4LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgCi0gICAgNjYsIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDczLCA4MCwgMTI4LCAKLSAgICA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzYsIDY1LCA2NywgMTk3LCA4MCwgNzksIDg1LCA3OCwgCi0gICAgMTk2LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgODcsIDc5LCA3OSwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MiwgCi0gICAgNjUsIDg5LCA4MywgMTI4LCA4MiwgNjYsIDY1LCA4MywgMTkzLCA4MiwgNzMsIDY5LCA4NSwgMjA0LCA4MiwgNzksIDc5LCAKLSAgICA3NSwgMTI4LCA4MiwgODUsIDc3LCA2NSwgMjAxLCA4MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNjUsIDY4LCA2OSwgMTI4LCAKLSAgICA4MywgNjUsIDc2LCA3NiwgMTkzLCA4MywgNjUsIDc2LCA4NCwgMTI4LCA4MywgNjksIDY1LCA3NiwgMTI4LCA4MywgNzIsIAotICAgIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4NCwgMTI4LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDczLCA3MCwgCi0gICAgMjEyLCA4MywgNzIsIDc5LCA3MSwgMjAxLCA4MywgNzIsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzYsIDg1LCAKLSAgICA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzgsIDc5LCA4NSwgMjEyLCA4MywgODAsIDY1LCA2OCwgMTk3LCAKLSAgICA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgODQsIDY1LCA3MCwgMTk4LCA4MywgODUsIDc1LCA4NSwgMjA2LCA4MywgODcsIAotICAgIDczLCA3MywgMTI4LCA4MywgODcsIDc5LCA3OSwgMTI4LCA4NCwgNjcsIDcyLCA2OSwgMTI4LCA4NCwgNjksIDg4LCA4NCwgCi0gICAgMTI4LCA4NCwgNzIsIDY5LCA4MiwgMTk3LCA4NCwgNzMsIDc3LCA2OSwgMTI4LCA4NCwgNzMsIDg3LCA3OCwgMTI4LCA4NCwgCi0gICAgNzYsIDcyLCA2NSwgMTI4LCA4NCwgNzYsIDcyLCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgNzYsIDcyLCAKLSAgICA3OSwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCAKLSAgICA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODcsIDczLCA3MywgMTI4LCA4NCwgODcsIDc5LCA3OSwgMTI4LCA4NSwgNzgsIAotICAgIDY4LCA2OSwgMjEwLCA4NiwgNjksIDY4LCA2OSwgMTI4LCA4NiwgNjksIDc4LCA2OCwgMTI4LCA4NiwgNzMsIDY4LCA2NSwgCi0gICAgMTI4LCA4NywgNjUsIDc2LCA3NSwgMTI4LCA4NywgNjUsIDgzLCA3NiwgMTkzLCA4NywgNjUsIDg0LCA2OSwgMjEwLCA4NywgCi0gICAgNzIsIDc5LCA3NiwgMTk3LCA4NywgNzksIDc5LCA2OCwgMTI4LCA4NywgNzksIDc5LCA3NiwgMTI4LCA4NywgODksIDc4LCAKLSAgICA3OCwgMTI4LCA4OSwgNjUsIDc1LCA3MiwgMTI4LCA4OSwgNjUsIDg0LCA3MywgMTI4LCA4OSwgNjksIDgyLCA3MywgMTI4LCAKLSAgICA4OSwgNzksIDQ1LCA3MywgMTI4LCA4OSwgNzksIDcxLCA3MiwgMTI4LCA4OSwgODUsIDQ1LCA3MywgMTI4LCA4OSwgODcsIAotICAgIDczLCA3MywgMTI4LCA4OSwgODcsIDc5LCA3OSwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDg0LCA2NSwgCi0gICAgMTI4LCA5MCwgNzIsIDg3LCA2OSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA2NSwgCi0gICAgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzIsIDY1LCAKLSAgICA2OCwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc4LCA3OCwgMTI4LCAKLSAgICA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIAotICAgIDc2LCA2NSwgMjAwLCA2NSwgNzYsIDgwLCA2NSwgMTI4LCA2NSwgNzcsIDgwLCA4MywgMTI4LCA2NSwgNzgsIDcyLCA4NSwgCi0gICAgMTI4LCA2NSwgNzgsIDc1LCA3MiwgMTI4LCA2NSwgNzgsIDgzLCA4NSwgMjE4LCA2NSwgODAsIDczLCA3OCwgMTI4LCA2NSwgCi0gICAgODIsIDY1LCA2OCwgMTI4LCA2NSwgODIsIDc3LCA4OSwgMTI4LCA2NSwgODMsIDcyLCA1NywgMTI4LCA2NSwgODQsIDc4LCAKLSAgICA2NSwgMjAwLCA2NSwgODUsIDc4LCA3OCwgMTI4LCA2NSwgODksIDY1LCA3MiwgMTI4LCA2NiwgNDgsIDQ5LCA1NiwgMTI4LCAKLSAgICA2NiwgNDgsIDQ5LCA1NywgMTI4LCA2NiwgNDgsIDUwLCA1MCwgMTI4LCA2NiwgNDgsIDUxLCA1MiwgMTI4LCA2NiwgNDgsIAotICAgIDUyLCA1NSwgMTI4LCA2NiwgNDgsIDUyLCA1NywgMTI4LCA2NiwgNDgsIDUzLCA1NCwgMTI4LCA2NiwgNDgsIDU0LCA1MSwgCi0gICAgMTI4LCA2NiwgNDgsIDU0LCA1MiwgMTI4LCA2NiwgNDgsIDU1LCA1NywgMTI4LCA2NiwgNDgsIDU2LCA1MCwgMTI4LCA2NiwgCi0gICAgNDgsIDU2LCA1MSwgMTI4LCA2NiwgNDgsIDU2LCA1NCwgMTI4LCA2NiwgNDgsIDU2LCA1NywgMTI4LCA2NiwgNDksIDQ4LCAKLSAgICA1MywgMTk4LCA2NiwgNDksIDQ4LCA1MywgMjA1LCA2NiwgNDksIDQ4LCA1NCwgMTk4LCA2NiwgNDksIDQ4LCA1NCwgMjA1LCAKLSAgICA2NiwgNDksIDQ4LCA1NSwgMTk4LCA2NiwgNDksIDQ4LCA1NSwgMjA1LCA2NiwgNDksIDQ4LCA1NiwgMTk4LCA2NiwgNDksIAotICAgIDQ4LCA1NiwgMjA1LCA2NiwgNDksIDQ4LCA1NywgMTk4LCA2NiwgNDksIDQ4LCA1NywgMjA1LCA2NiwgNDksIDUxLCA1MCwgCi0gICAgMTI4LCA2NiwgNDksIDUyLCA1MCwgMTI4LCA2NiwgNDksIDUyLCA1NCwgMTI4LCA2NiwgNDksIDUzLCA0OCwgMTI4LCA2NiwgCi0gICAgNDksIDUzLCA1MCwgMTI4LCA2NiwgNDksIDUzLCA1MSwgMTI4LCA2NiwgNDksIDUzLCA1MiwgMTI4LCA2NiwgNDksIDUzLCAKLSAgICA1MywgMTI4LCA2NiwgNDksIDUzLCA1NSwgMTI4LCA2NiwgNDksIDUzLCA1NiwgMTI4LCA2NiwgNDksIDU0LCA0OCwgMTI4LCAKLSAgICA2NiwgNDksIDU0LCA0OSwgMTI4LCA2NiwgNDksIDU0LCA1MiwgMTI4LCA2NiwgNDksIDU0LCA1MywgMTI4LCA2NiwgNDksIAotICAgIDU0LCA1NCwgMTI4LCA2NiwgNDksIDU0LCA1NSwgMTI4LCA2NiwgNDksIDU0LCA1NiwgMTI4LCA2NiwgNDksIDU0LCA1NywgCi0gICAgMTI4LCA2NiwgNDksIDU1LCA0OCwgMTI4LCA2NiwgNDksIDU1LCA0OSwgMTI4LCA2NiwgNDksIDU1LCA1MCwgMTI4LCA2NiwgCi0gICAgNDksIDU1LCA1MiwgMTI4LCA2NiwgNDksIDU1LCA1NSwgMTI4LCA2NiwgNDksIDU1LCA1NiwgMTI4LCA2NiwgNDksIDU1LCAKLSAgICA1NywgMTI4LCA2NiwgNDksIDU2LCA0OCwgMTI4LCA2NiwgNDksIDU2LCA0OSwgMTI4LCA2NiwgNDksIDU2LCA1MCwgMTI4LCAKLSAgICA2NiwgNDksIDU2LCA1MSwgMTI4LCA2NiwgNDksIDU2LCA1MiwgMTI4LCA2NiwgNDksIDU2LCA1MywgMTI4LCA2NiwgNDksIAotICAgIDU2LCA1NywgMTI4LCA2NiwgNDksIDU3LCA0OCwgMTI4LCA2NiwgNTAsIDQ4LCA0OCwgMTI4LCA2NiwgNTAsIDQ4LCA0OSwgCi0gICAgMTI4LCA2NiwgNTAsIDQ4LCA1MCwgMTI4LCA2NiwgNTAsIDQ4LCA1MSwgMTI4LCA2NiwgNTAsIDQ4LCA1MiwgMTI4LCA2NiwgCi0gICAgNTAsIDQ4LCA1MywgMTI4LCA2NiwgNTAsIDQ4LCA1NCwgMTI4LCA2NiwgNTAsIDQ4LCA1NSwgMTI4LCA2NiwgNTAsIDQ4LCAKLSAgICA1NiwgMTI4LCA2NiwgNTAsIDQ4LCA1NywgMTI4LCA2NiwgNTAsIDQ5LCA0OCwgMTI4LCA2NiwgNTAsIDQ5LCA0OSwgMTI4LCAKLSAgICA2NiwgNTAsIDQ5LCA1MCwgMTI4LCA2NiwgNTAsIDQ5LCA1MSwgMTI4LCA2NiwgNTAsIDQ5LCA1MiwgMTI4LCA2NiwgNTAsIAotICAgIDQ5LCA1MywgMTI4LCA2NiwgNTAsIDQ5LCA1NCwgMTI4LCA2NiwgNTAsIDQ5LCA1NSwgMTI4LCA2NiwgNTAsIDQ5LCA1NiwgCi0gICAgMTI4LCA2NiwgNTAsIDQ5LCA1NywgMTI4LCA2NiwgNTAsIDUwLCA0OSwgMTI4LCA2NiwgNTAsIDUwLCA1MCwgMTI4LCA2NiwgCi0gICAgNTAsIDUwLCA1NCwgMTI4LCA2NiwgNTAsIDUwLCA1NSwgMTI4LCA2NiwgNTAsIDUwLCA1NiwgMTI4LCA2NiwgNTAsIDUwLCAKLSAgICA1NywgMTI4LCA2NiwgNTAsIDUxLCA1MCwgMTI4LCA2NiwgNTAsIDUxLCA1MiwgMTI4LCA2NiwgNTAsIDUxLCA1NCwgMTI4LCAKLSAgICA2NiwgNTAsIDUyLCA1MywgMTI4LCA2NiwgNTAsIDUyLCA1NCwgMTI4LCA2NiwgNTAsIDUyLCA1NiwgMTI4LCA2NiwgNTAsIAotICAgIDUyLCA1NywgMTI4LCA2NiwgNTAsIDUzLCA0OCwgMTI4LCA2NiwgNTAsIDUzLCA0OSwgMTI4LCA2NiwgNTAsIDUzLCA1MCwgCi0gICAgMTI4LCA2NiwgNTAsIDUzLCA1MSwgMTI4LCA2NiwgNTAsIDUzLCA1MywgMTI4LCA2NiwgNTAsIDUzLCA1NCwgMTI4LCA2NiwgCi0gICAgNTAsIDUzLCA1NSwgMTI4LCA2NiwgNTAsIDUzLCA1NiwgMTI4LCA2NiwgNTAsIDUzLCA1NywgMTI4LCA2NiwgNTEsIDQ4LCAKLSAgICA1MywgMTI4LCA2NiwgNjUsIDcxLCA1MSwgMTI4LCA2NiwgNjUsIDcxLCA2NSwgMTI4LCA2NiwgNjUsIDcyLCA4NCwgMTI4LCAKLSAgICA2NiwgNjUsIDc4LCA2OCwgMTI4LCA2NiwgNjUsIDgyLCA4MywgMTI4LCA2NiwgNjUsIDgzLCA2OSwgMTI4LCA2NiwgNjYsIAotICAgIDY1LCA4MCwgMTI4LCA2NiwgNjYsIDY1LCA4NCwgMTI4LCA2NiwgNjYsIDY1LCA4OCwgMTI4LCA2NiwgNjYsIDY5LCA4MCwgCi0gICAgMTI4LCA2NiwgNjYsIDY5LCA4OCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgMTI4LCA2NiwgNjYsIDczLCA4MCwgMTI4LCA2NiwgCi0gICAgNjYsIDczLCA4NCwgMTI4LCA2NiwgNjYsIDczLCA4OCwgMTI4LCA2NiwgNjYsIDc5LCA4MCwgMTI4LCA2NiwgNjYsIDc5LCAKLSAgICA4NCwgMTI4LCA2NiwgNjYsIDc5LCA4OCwgMTI4LCA2NiwgNjYsIDg1LCA3OSwgMTI4LCA2NiwgNjYsIDg1LCA4MCwgMTI4LCAKLSAgICA2NiwgNjYsIDg1LCA4MiwgMTI4LCA2NiwgNjYsIDg1LCA4OCwgMTI4LCA2NiwgNjYsIDg5LCA4MCwgMTI4LCA2NiwgNjYsIAotICAgIDg5LCA4NCwgMTI4LCA2NiwgNjYsIDg5LCA4OCwgMTI4LCA2NiwgNjcsIDY1LCA2OCwgMTI4LCA2NiwgNjksIDY1LCA3OCwgCi0gICAgMTI4LCA2NiwgNjksIDY5LCA3MiwgMTI4LCA2NiwgNjksIDc2LCA3NiwgMTI4LCA2NiwgNjksIDc2LCA4NCwgMTI4LCA2NiwgCi0gICAgNjksIDc4LCA2OCwgMTI4LCA2NiwgNjksIDc5LCA4MiwgMTk1LCA2NiwgNjksIDg0LCA3MiwgMTI4LCA2NiwgNzIsIDY5LCAKLSAgICA2OSwgMTI4LCA2NiwgNzIsIDc5LCA3OSwgMTI4LCA2NiwgNzMsIDgyLCA4NSwgMTI4LCA2NiwgNzYsIDY1LCA3OCwgMjAzLCAKLSAgICA2NiwgNzksIDY1LCA4MiwgMTI4LCA2NiwgNzksIDY1LCA4NCwgMTI4LCA2NiwgNzksIDY4LCA4OSwgMTI4LCA2NiwgODMsIAotICAgIDY4LCA4NSwgMjExLCA2NiwgODMsIDc1LCA2NSwgMTczLCA2NiwgODMsIDc1LCA4NSwgMjEwLCA2NiwgODUsIDc2LCA3NiwgCi0gICAgMTI4LCA2NiwgODUsIDc2LCA3NiwgMjExLCA2NiwgODUsIDc2LCA4NSwgMTk5LCA2NiwgODUsIDc3LCA4MCwgMjE3LCA2NiwgCi0gICAgODUsIDgyLCA1MCwgMTI4LCA2NiwgODcsIDY5LCA2OSwgMTI4LCA2NywgNDUsIDQ5LCA1NiwgMTI4LCA2NywgNDUsIDUxLCAKLSAgICA1NywgMTI4LCA2NywgNjUsIDY1LCA3MywgMTI4LCA2NywgNjUsIDc2LCA2NywgMTI4LCA2NywgNjUsIDc2LCA3NiwgMTI4LCAKLSAgICA2NywgNjUsIDc2LCA4OSwgMTkzLCA2NywgNjUsIDgwLCA3OSwgMTI4LCA2NywgNjUsIDg2LCA2OSwgMTI4LCA2NywgNjUsIAotICAgIDg5LCA3OCwgMTI4LCA2NywgNjcsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDY5LCA2OSwgMTI4LCA2NywgNjcsIDcyLCA2NSwgCi0gICAgMTI4LCA2NywgNjcsIDcyLCA3MywgMTI4LCA2NywgNjcsIDcyLCA3OSwgMTI4LCA2NywgNjcsIDcyLCA4NSwgMTI4LCA2NywgCi0gICAgNzIsIDY1LCA3OCwgMTI4LCA2NywgNzIsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY1LCA4NCwgMTI4LCA2NywgNzIsIDY1LCAKLSAgICA4OCwgMTI4LCA2NywgNzIsIDY5LCA4MCwgMTI4LCA2NywgNzIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4OCwgMTI4LCAKLSAgICA2NywgNzIsIDcyLCA2NSwgMTI4LCA2NywgNzIsIDc5LCA2NSwgMTI4LCA2NywgNzIsIDc5LCA2OSwgMTI4LCA2NywgNzIsIAotICAgIDc5LCA4MCwgMTI4LCA2NywgNzIsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDc5LCA4OCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgCi0gICAgMTI4LCA2NywgNzIsIDg1LCA4MCwgMTI4LCA2NywgNzIsIDg1LCA4MiwgMTI4LCA2NywgNzIsIDg1LCA4OCwgMTI4LCA2NywgCi0gICAgNzIsIDg5LCA4MCwgMTI4LCA2NywgNzIsIDg5LCA4MiwgMTI4LCA2NywgNzIsIDg5LCA4NCwgMTI4LCA2NywgNzIsIDg5LCAKLSAgICA4OCwgMTI4LCA2NywgNzMsIDY5LCA4MCwgMTI4LCA2NywgNzMsIDY5LCA4NCwgMTI4LCA2NywgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA2NywgNzYsIDY1LCA3OCwgMTI4LCA2NywgNzYsIDY1LCA4NywgMTI4LCA2NywgNzYsIDY5LCA2NSwgMjEwLCA2NywgNzYsIAotICAgIDc5LCA4MywgMTk3LCA2NywgNzYsIDg1LCA2NiwgMTI4LCA2NywgNzksIDY4LCA2NSwgMTI4LCA2NywgNzksIDc2LCA3NiwgCi0gICAgMTI4LCA2NywgNzksIDc3LCA2NiwgMTI4LCA2NywgNzksIDgwLCA4OSwgMTI4LCA2NywgODUsIDc5LCA4OCwgMTI4LCA2NywgCi0gICAgODUsIDgyLCA4OCwgMTI4LCA2NywgODksIDgyLCA4OCwgMTI4LCA2OCwgNjUsIDcxLCA2NSwgMjE4LCA2OCwgNjUsIDcxLCAKLSAgICA4MywgMTI4LCA2OCwgNjUsIDczLCA4MiwgMTI4LCA2OCwgNjUsIDc3LCA4MCwgMTI4LCA2OCwgNjUsIDgyLCA4NCwgMTI4LCAKLSAgICA2OCwgNjgsIDY1LCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCA4MCwgMTI4LCA2OCwgNjgsIAotICAgIDY1LCA4NCwgMTI4LCA2OCwgNjgsIDY1LCA4OCwgMTI4LCA2OCwgNjgsIDY4LCA2NSwgMTI4LCA2OCwgNjgsIDY5LCA2OSwgCi0gICAgMTI4LCA2OCwgNjgsIDY5LCA4MCwgMTI4LCA2OCwgNjgsIDY5LCA4OCwgMTI4LCA2OCwgNjgsIDcyLCA3OSwgMTI4LCA2OCwgCi0gICAgNjgsIDczLCA2OSwgMTI4LCA2OCwgNjgsIDczLCA4MCwgMTI4LCA2OCwgNjgsIDczLCA4NCwgMTI4LCA2OCwgNjgsIDczLCAKLSAgICA4OCwgMTI4LCA2OCwgNjgsIDc5LCA2NSwgMTI4LCA2OCwgNjgsIDc5LCA4MCwgMTI4LCA2OCwgNjgsIDc5LCA4NCwgMTI4LCAKLSAgICA2OCwgNjgsIDc5LCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgNjgsIDg1LCA4MCwgMTI4LCA2OCwgNjgsIAotICAgIDg1LCA4NCwgMTI4LCA2OCwgNjgsIDg1LCA4OCwgMTI4LCA2OCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgNjksIDY1LCA2OCwgCi0gICAgMTI4LCA2OCwgNjksIDY2LCA3MywgMjEyLCA2OCwgNjksIDY5LCA3NiwgMTI4LCA2OCwgNjksIDcyLCA3MywgMTI4LCA2OCwgCi0gICAgNjksIDc1LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCAKLSAgICA3MywgMTI4LCA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA2NSwgMTI4LCAKLSAgICA2OCwgNzIsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA3OSwgMTI4LCA2OCwgNzIsIAotICAgIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDg0LCA4NCwgCi0gICAgMjA3LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgCi0gICAgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc5LCA4MiwgMTI4LCA2OCwgNzksIDgyLCAKLSAgICA4NSwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgODIsIDg1LCA3NywgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCAKLSAgICA2OCwgODUsIDc4LCA1MSwgMTI4LCA2OCwgODUsIDc4LCA1MiwgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODksIAotICAgIDY5LCA3MiwgMTI4LCA2OCwgOTAsIDY5LCA2OSwgMTI4LCA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjgsIDczLCA3OCwgCi0gICAgMTI4LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzIsIDg3LCA2NSwgMjE4LCA2OSwgNzQsIDY5LCA2NywgMjEyLCA2OSwgCi0gICAgNzgsIDg0LCA2OSwgMjEwLCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIDc2LCAKLSAgICA2OSwgMjEwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDc4LCA3MSwgMTI4LCAKLSAgICA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgCi0gICAgMjA0LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3MSwgCi0gICAgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjksIDY1LCA4MiwgMTI4LCA3MSwgNjksIDY4LCAKLSAgICA2OSwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDY1LCA4MCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCAKLSAgICA3MSwgNzEsIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIAotICAgIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgMTI4LCA3MSwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgCi0gICAgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3MSwgCi0gICAgNzEsIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg3LCAKLSAgICA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzIsIDY5LCA2OSwgMTI4LCAKLSAgICA3MSwgNzIsIDg3LCA2NSwgMTI4LCA3MSwgNzMsIDY2LCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgNzMsIAotICAgIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDc4LCA3MSwgCi0gICAgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgMTI4LCA3MSwgODIsIDY5LCA2OSwgMjA2LCA3MSwgCi0gICAgODUsIDY5LCA3MiwgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIDY5LCA2OSwgMTI4LCA3MiwgNjUsIDY5LCAKLSAgICA3MSwgMjA0LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDgzLCA2OSwgMjEwLCA3MiwgNjksIDc3LCA4MCwgMTI4LCAKLSAgICA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgMTI4LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIAotICAgIDkwLCA2NiwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgCi0gICAgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4OCwgMTI4LCA3MiwgNzYsIDc5LCAKLSAgICA4MCwgMTI4LCA3MiwgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCAKLSAgICA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIAotICAgIDg5LCA4MCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgCi0gICAgMTI4LCA3MiwgNzcsIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgCi0gICAgNzcsIDczLCA2OSwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIAotICAgIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgCi0gICAgMTI4LCA3MiwgNzcsIDg5LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgMTI4LCA3MiwgCi0gICAgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCAKLSAgICA2OSwgMTI4LCA3MiwgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCAKLSAgICA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIAotICAgIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgCi0gICAgODUsIDc3LCA2NSwgMjA2LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgMTI4LCA3MiwgODgsIDY1LCAKLSAgICA4OCwgMTI4LCA3MiwgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCAKLSAgICA3MiwgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIAotICAgIDc5LCA4OCwgMTI4LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgCi0gICAgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgMTI4LCA3MywgCi0gICAgNjgsIDc2LCA2OSwgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgNzYsIDg1LCAKLSAgICA4NCwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDc4LCA2OSwgMjEwLCAKLSAgICA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgODQsIAotICAgIDY5LCA3NywgMTI4LCA3MywgODUsIDc0LCA2NSwgMTI4LCA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCA2NSwgCi0gICAgMjA2LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA4NCwgMTI4LCA3NCwgCi0gICAgNzQsIDczLCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgMTI4LCA3NCwgNzQsIDc5LCAKLSAgICA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgMTI4LCAKLSAgICA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCA4NCwgMTI4LCA3NCwgNzQsIAotICAgIDg5LCA4OCwgMTI4LCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgCi0gICAgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc5LCA4NCwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgCi0gICAgNjUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAKLSAgICA1MiwgMTI4LCA3NSwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA3OSwgMTI4LCAKLSAgICA3NSwgNjcsIDY1LCA3NiwgMTI4LCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIAotICAgIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY5LCA2OSwgMTI4LCA3NSwgNzIsIDc5LCA3OCwgMTI4LCA3NSwgNzMsIDY3LCA3NSwgCi0gICAgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgCi0gICAgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzUsIDY5LCA2OSwgMTI4LCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDg0LCAKLSAgICA3OSwgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgMTI4LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKLSAgICA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIDc5LCA4MCwgMTI4LCA3NSwgODUsIAotICAgIDc5LCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDg1LCA3MiwgCi0gICAgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgCi0gICAgODgsIDg3LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA2OSwgMTI4LCA3NSwgODgsIDg3LCA3MywgMTI4LCA3NSwgODksIDY1LCAKLSAgICA2NSwgMTI4LCA3NSwgODksIDY5LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCAKLSAgICA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCA3NiwgNjUsIAotICAgIDc3LCA2OSwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjksIDY5LCA3NSwgCi0gICAgMTI4LCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NiwgNjksIDkwLCA3MiwgMTI4LCA3NiwgCi0gICAgNzIsIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDczLCA3MywgMTI4LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA3NiwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3NiwgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDg0LCA4MiwgMTkzLCAKLSAgICA3NiwgNzksIDc2LCA3NiwgMTI4LCA3NiwgNzksIDc5LCA4NCwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIAotICAgIDc5LCA4NCwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIDY4LCA4NSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgCi0gICAgMTI4LCA3NywgNjYsIDY5LCA2OSwgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCA3NywgCi0gICAgNjksIDgzLCA3MywgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgMTI4LCA3NywgNzEsIDY1LCAKLSAgICA4OCwgMTI4LCA3NywgNzEsIDY2LCA2NSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA3MywgMTI4LCAKLSAgICA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIAotICAgIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgNzEsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDc5LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgCi0gICAgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzMsIDY3LCAKLSAgICA4MiwgMjA3LCA3NywgNzMsIDczLCA3OCwgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCAKLSAgICA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIAotICAgIDg1LCA4NCwgMjAwLCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgODUsIDc2LCA4NCwgCi0gICAgMjAxLCA3NywgODUsIDc5LCA4NCwgMTI4LCA3NywgODcsIDY5LCA2OSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgCi0gICAgNjUsIDczLCA4MiwgMTkzLCA3OCwgNjUsIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCA3OCwgNjYsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCAKLSAgICA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIAotICAgIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgCi0gICAgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgCi0gICAgNjYsIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCAKLSAgICA4MCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA4NCwgMTI4LCA3OCwgNjgsIAotICAgIDczLCA4OCwgMTI4LCA3OCwgNjgsIDc5LCA3OSwgMTI4LCA3OCwgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDc5LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCAKLSAgICA3OCwgMTI4LCA3OCwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCAKLSAgICA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIAotICAgIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgCi0gICAgMTI4LCA3OCwgNzEsIDczLCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgCi0gICAgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCAKLSAgICA3OSwgMTI4LCA3OCwgNzIsIDc0LCA2NSwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA4OCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA4NCwgCi0gICAgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgNzQsIDg1LCA4MCwgMTI4LCA3OCwgCi0gICAgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAKLSAgICA4MiwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCAKLSAgICA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgODIsIAotICAgIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCA4NCwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4MCwgCi0gICAgMTI4LCA3OCwgODIsIDY5LCA4NCwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDc5LCA4MCwgMTI4LCA3OCwgCi0gICAgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgMTI4LCA3OCwgODIsIDg1LCAKLSAgICA4NCwgMTI4LCA3OCwgODIsIDg1LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgMTI4LCAKLSAgICA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIAotICAgIDc2LCA3NiwgMTI4LCA3OCwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgCi0gICAgMTI4LCA3OCwgODksIDY1LCA2NSwgMTI4LCA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgCi0gICAgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCA4NCwgMTI4LCA3OCwgODksIDczLCA4OCwgMTI4LCA3OCwgODksIDc0LCAKLSAgICA2NSwgMTI4LCA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCAKLSAgICA3OCwgODksIDc5LCA4OCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIAotICAgIDg1LCA4NCwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg3LCA2NSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgCi0gICAgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgCi0gICAgOTAsIDczLCA2OSwgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCAKLSAgICA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgMTI4LCAKLSAgICA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OSwgNDUsIDY5LCA3OSwgCi0gICAgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgCi0gICAgNzksIDc3LCA4NSwgMTI4LCA3OSwgNzksIDkwLCA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgMTk3LCA4MCwgNjUsIDY1LCAKLSAgICA3MywgMTI4LCA4MCwgNjUsIDY4LCA3NywgMTkzLCA4MCwgNjUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgMTI4LCAKLSAgICA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjksIDY5LCA4MCwgMTI4LCA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIAotICAgIDgwLCA2OSwgMjEyLCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgCi0gICAgMTI4LCA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgCi0gICAgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIDc1LCAKLSAgICA3OSwgMTI4LCA4MCwgNzYsIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA4MCwgNzYsIDc5LCA4NywgMTI4LCAKLSAgICA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3NywgMTI4LCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIAotICAgIDczLCA3OCwgMjEyLCA4MCwgODUsIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgODcsIDY5LCA2OSwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCA4MSwgCi0gICAgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDgwLCA3MiwgMTI4LCA4MSwgNzIsIDY1LCAKLSAgICA2NSwgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCAKLSAgICA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgCi0gICAgMTI4LCA4MSwgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCA4MSwgCi0gICAgODcsIDY1LCA2NSwgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgODksIDY5LCAKLSAgICA2OSwgMTI4LCA4MSwgODksIDgyLCA4OCwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDczLCA2OCwgMjA3LCAKLSAgICA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjksIDc3LCA4NSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCA4MiwgNzMsIAotICAgIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDgyLCA2NSwgMTI4LCA4MiwgNzksIDY1LCA4MiwgMTI4LCA4MiwgNzksIDgzLCA3MiwgCi0gICAgMTI4LCA4MiwgODIsIDY1LCA4OCwgMTI4LCA4MiwgODIsIDY5LCA3MiwgMTI4LCA4MiwgODIsIDY5LCA4MCwgMTI4LCA4MiwgCi0gICAgODIsIDY5LCA4NCwgMTI4LCA4MiwgODIsIDY5LCA4OCwgMTI4LCA4MiwgODIsIDc5LCA4MCwgMTI4LCA4MiwgODIsIDc5LCAKLSAgICA4NCwgMTI4LCA4MiwgODIsIDc5LCA4OCwgMTI4LCA4MiwgODIsIDg1LCA3OSwgMTI4LCA4MiwgODIsIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgODIsIDg1LCA4MiwgMTI4LCA4MiwgODIsIDg1LCA4NCwgMTI4LCA4MiwgODIsIDg1LCA4OCwgMTI4LCA4MiwgODIsIAotICAgIDg5LCA4MCwgMTI4LCA4MiwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODIsIDg5LCA4NCwgMTI4LCA4MiwgODIsIDg5LCA4OCwgCi0gICAgMTI4LCA4MiwgODUsIDczLCA4MywgMTI4LCA4MiwgODUsIDc2LCA2OSwgMTI4LCA4MiwgODUsIDc5LCA4MCwgMTI4LCA4MiwgCi0gICAgODUsIDgzLCA3MywgMTI4LCA4MywgNjUsIDQ1LCA3MywgMTI4LCA4MywgNjUsIDY1LCA3MywgMTI4LCA4MywgNjUsIDcxLCAKLSAgICA2NSwgMTI4LCA4MywgNjUsIDczLCA3NiwgMTI4LCA4MywgNjUsIDc2LCA2NSwgMTI4LCA4MywgNjUsIDc2LCA2NSwgMjA1LCAKLSAgICA4MywgNjUsIDgwLCA2NSwgMTI4LCA4MywgNjUsIDgyLCA3MywgMTI4LCA4MywgNjYsIDgyLCA4NSwgMjA0LCA4MywgNjcsIAotICAgIDg3LCA2NSwgMTI4LCA4MywgNjgsIDc5LCA3OCwgMTk5LCA4MywgNjksIDc3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgCi0gICAgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCA4OCwgMTI4LCA4MywgCi0gICAgNzIsIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDY5LCAKLSAgICA4OCwgMTI4LCA4MywgNzIsIDczLCA3MywgMTI4LCA4MywgNzIsIDczLCA3NywgMTI4LCA4MywgNzIsIDczLCA3NywgMTkzLCAKLSAgICA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgNzIsIAotICAgIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA4NCwgCi0gICAgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgCi0gICAgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4NCwgMTI4LCA4MywgNzIsIDg5LCA4OCwgMTI4LCA4MywgNzMsIDcxLCAKLSAgICA2OSwgMjA0LCA4MywgNzMsIDc1LCA1MCwgMTI4LCA4MywgNzMsIDc1LCA3MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgMjE3LCAKLSAgICA4MywgNzUsIDczLCA3OCwgMTI4LCA4MywgNzUsIDg1LCA3NiwgMjA0LCA4MywgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzgsIAotICAgIDY1LCA3NSwgMTk3LCA4MywgODAsIDc5LCA4NCwgMTI4LCA4MywgODAsIDg3LCA2NSwgMTI4LCA4MywgODMsIDY1LCA2NSwgCi0gICAgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCA4MywgCi0gICAgODMsIDY5LCA2OSwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDczLCAKLSAgICA2OSwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCA4MywgODMsIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCAKLSAgICA4MywgODMsIDc5LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCA4MywgODMsIAotICAgIDg1LCA4MCwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MCwgCi0gICAgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCA4OCwgMTI4LCA4MywgCi0gICAgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDczLCA3NiwgMTk3LCA4MywgODQsIDczLCAKLSAgICA3NiwgMjA0LCA4MywgODQsIDg3LCA2NSwgMTI4LCA4MywgODUsIDY4LCA1MCwgMTI4LCA4MywgODUsIDc1LCA4NSwgMTI4LCAKLSAgICA4MywgODUsIDc5LCA4MCwgMTI4LCA4MywgODUsIDc5LCA4OCwgMTI4LCA4MywgODUsIDgyLCA1NywgMTI4LCA4MywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA4MywgODcsIDg1LCA3OCwgMTk5LCA4MywgOTAsIDY1LCA2NSwgMTI4LCA4MywgOTAsIDY5LCA2OSwgCi0gICAgMTI4LCA4MywgOTAsIDg3LCA2NSwgMTI4LCA4MywgOTAsIDg3LCA3MSwgMTI4LCA4NCwgNjUsIDY1LCA3MywgMTI4LCA4NCwgCi0gICAgNjUsIDc1LCA2OSwgMTI4LCA4NCwgNjUsIDc2LCA3NiwgMTI4LCA4NCwgNjksIDQ1LCA4NSwgMTI4LCA4NCwgNjksIDc4LCAKLSAgICA4NCwgMTI4LCA4NCwgNjksIDg0LCA3MiwgMTI4LCA4NCwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgNzIsIDY5LCA3NywgMTkzLCAKLSAgICA4NCwgNzIsIDY5LCA4OSwgMTI4LCA4NCwgNzIsIDc5LCA2NSwgMTI4LCA4NCwgNzIsIDg1LCA4MiwgMjExLCA4NCwgNzIsIAotICAgIDg3LCA2NSwgMTI4LCA4NCwgNzMsIDY5LCA4MCwgMTI4LCA4NCwgNzMsIDY5LCA4OCwgMTI4LCA4NCwgNzMsIDcxLCA3MiwgCi0gICAgMjEyLCA4NCwgNzMsIDc4LCA4OSwgMTI4LCA4NCwgNzMsIDg3LCA2NSwgMjE4LCA4NCwgNzYsIDY5LCA2OSwgMTI4LCA4NCwgCi0gICAgNzYsIDcyLCA4NSwgMTI4LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgODIsIDY1LCAKLSAgICA2OCwgMTk3LCA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCAKLSAgICA4NCwgODMsIDg3LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIAotICAgIDY5LCA3MiwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2NSwgCi0gICAgMTI4LCA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgCi0gICAgODQsIDgzLCA4NSwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCA4NCwgMTI4LCA4NCwgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgOTAsIDY1LCA2NSwgMTI4LCA4NCwgOTAsIDY5LCA2OSwgMTI4LCAKLSAgICA4NCwgOTAsIDc5LCA2NSwgMTI4LCA4NSwgNDUsIDY1LCA2OSwgMTI4LCA4NSwgNjUsIDg0LCA3MiwgMTI4LCA4NSwgNjgsIAotICAgIDg1LCA3MSwgMTI4LCA4NSwgNzUsIDY1LCA4MiwgMTkzLCA4NSwgNzcsIDg1LCA3NywgMTI4LCA4NSwgODIsIDczLCA1MSwgCi0gICAgMTI4LCA4NSwgODIsIDg1LCA2OCwgMTkzLCA4NSwgODMsIDcyLCA1MCwgMTI4LCA4NSwgODMsIDcyLCA4OCwgMTI4LCA4NSwgCi0gICAgODMsIDgzLCA4NSwgMTI4LCA4NSwgODUsIDg1LCA1MCwgMTI4LCA4NSwgODUsIDg1LCA1MSwgMTI4LCA4NSwgODUsIDg1LCAKLSAgICA4NSwgMTI4LCA4NiwgNzMsIDY5LCA4MCwgMTI4LCA4NiwgNzMsIDY5LCA4NCwgMTI4LCA4NiwgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA4NiwgNzMsIDc4LCA2OSwgMTI4LCA4NiwgODUsIDgyLCA4OCwgMTI4LCA4NiwgODksIDgyLCA4OCwgMTI4LCA4NywgNjUsIAotICAgIDY5LCA3OCwgMTI4LCA4NywgNjUsIDc2LCA3NiwgMTI4LCA4NywgNjksIDc2LCA3NiwgMTI4LCA4NywgNjksIDgzLCA4NCwgCi0gICAgMTI4LCA4NywgNzksIDc5LCA3OCwgMTI4LCA4NywgNzksIDgyLCA3NSwgMTI4LCA4NywgODIsIDY1LCA4MCwgMTI4LCA4NywgCi0gICAgODUsIDc4LCA3NCwgMjA3LCA4NywgODUsIDc5LCA4MCwgMTI4LCA4NywgODUsIDc5LCA4OCwgMTI4LCA4OCwgNzMsIDgyLCAKLSAgICA3OSwgMjA2LCA4OCwgODksIDY1LCA2NSwgMTI4LCA4OCwgODksIDY5LCA2OSwgMTI4LCA4OCwgODksIDgyLCA4OCwgMTI4LCAKLSAgICA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA4OSwgNjUsIDY1LCA3MywgMTI4LCA4OSwgNjUsIDY2LCA3MiwgMTI4LCA4OSwgNjUsIAotICAgIDY3LCA3MiwgMTI4LCA4OSwgNjUsIDY4LCA2OCwgMTI4LCA4OSwgNjUsIDY4LCA3MiwgMTI4LCA4OSwgNjUsIDcxLCA3OCwgCi0gICAgMTI4LCA4OSwgNjUsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIDgyLCA4MiwgMTI4LCA4OSwgNjUsIDgzLCA3MiwgMTI4LCA4OSwgCi0gICAgNjUsIDgzLCA4MywgMTI4LCA4OSwgNjUsIDg0LCA3MiwgMTI4LCA4OSwgNjUsIDg0LCA4NCwgMTI4LCA4OSwgNjUsIDkwLCAKLSAgICA5MCwgMTI4LCA4OSwgNjksIDgyLCA2NSwgMjAwLCA4OSwgNzMsIDQ1LCA4NSwgMTI4LCA4OSwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA4OSwgNzksIDQ1LCA3OSwgMTI4LCA4OSwgNzksIDc3LCA3OSwgMTI4LCA4OSwgNzksIDgyLCA3MywgMTI4LCA4OSwgODUsIAotICAgIDQ1LCA2NSwgMTI4LCA4OSwgODUsIDQ1LCA2OSwgMTI4LCA4OSwgODUsIDQ1LCA4NSwgMTI4LCA4OSwgODUsIDY1LCA3OCwgCi0gICAgMTI4LCA4OSwgODUsIDY4LCA3MiwgMTI4LCA4OSwgODUsIDc5LCA4NCwgMTI4LCA4OSwgODUsIDgyLCA4OCwgMTI4LCA4OSwgCi0gICAgODksIDgyLCA4OCwgMTI4LCA5MCwgNjUsIDc3LCA4OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNzIsIDY1LCAKLSAgICA2NSwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4OCwgMTI4LCAKLSAgICA5MCwgNzIsIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIAotICAgIDc5LCA3OSwgMTI4LCA5MCwgNzIsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDc5LCA4NCwgMTI4LCA5MCwgNzIsIDc5LCA4OCwgCi0gICAgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgCi0gICAgNzIsIDg1LCA4NCwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg5LCAKLSAgICA4MCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4OCwgMTI4LCAKLSAgICA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgOTAsIAotICAgIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgCi0gICAgMTI4LCA5MCwgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgCi0gICAgOTAsIDczLCA4MCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDc5LCAKLSAgICA4MCwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgMTI4LCAKLSAgICA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIAotICAgIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA3OSwgODAsIDY5LCAyMDYsIDY4LCA3MywgODMsIDE5NSwgNzAsIAotICAgIDczLCA4NiwgMTk3LCA3MCwgNzksIDg1LCAyMTAsIDcwLCA4NSwgNzYsIDIwNCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNzIsIAotICAgIDY1LCAyMDYsIDczLCA3OSwgODQsIDE5MywgNjksIDY1LCA4MywgMjEyLCA3MCwgODIsIDc5LCAyMDUsIDg0LCA3OSwgNjgsIAotICAgIDIwNywgODQsIDY5LCA3OCwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDg5LCA4NSwgODMsIDEyOCwgODMsIDczLCA2NiwgMTk3LCAKLSAgICA2OCwgNjUsIDgzLCAyMDAsIDgxLCA4NSwgNjUsIDE5NiwgNjksIDkwLCA2OSwgMjA2LCA3OCwgNjksIDc5LCAxMjgsIDc4LCAKLSAgICA4NSwgNzgsIDEyOCwgODAsIDcyLCA3MywgMTI4LCA2NiwgNzIsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDcyLCAKLSAgICA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDg0LCA3MiwgNjksIDIwMCwgNjYsIDY1LCA2OCwgMTI4LCA3NSwgNzksIDc3LCAKLSAgICAyMDEsIDgyLCA3MiwgNzksIDEyOCwgNzksIDg4LCA3MywgMTkzLCA4MiwgNzksIDY3LCAxMjgsIDg0LCA2NSwgODUsIDEyOCwgCi0gICAgNzQsIDcyLCA2NSwgMTI4LCA4MywgNjUsIDgyLCAxOTMsIDg0LCA2NSwgNjcsIDIwMywgNjgsIDc5LCA2OSwgMjExLCA3NSwgCi0gICAgODUsIDgyLCAxMjgsIDgyLCA4MiwgNjUsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MiwgNjgsIDY5LCAyMDQsIDg1LCA3OCwgCi0gICAgNzMsIDIxMiwgNzMsIDcxLCA3MywgMTI4LCA4MywgNzIsIDY1LCAxNzksIDg0LCA2NSwgNzMsIDIwNCwgODQsIDY5LCA3OCwgCi0gICAgMjExLCA4NywgNjUsIDg2LCAyMTcsIDg3LCA3MywgNjgsIDE5NywgNzEsIDczLCA4MywgMjAwLCA4MywgNzIsIDczLCAyMDYsIAotICAgIDgzLCA3MiwgNzksIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA2OCwgNzMsIDcxLCAxOTMsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIAotICAgIDkwLCA2OSwgMTI4LCA3NSwgNjUsIDcwLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY5LCA3MSwgMTI4LCA3NywgODUsIAotICAgIDgzLCAyMDAsIDg3LCA3OSwgODIsIDE5NiwgNjUsIDgyLCA2NywgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDc1LCA2NSwgNzUsIAotICAgIDEyOCwgNzgsIDg5LCA3OSwgMTI4LCA4MywgODQsIDc5LCAyMDgsIDg0LCA2NSwgNzcsIDEyOCwgODcsIDY1LCA4NiwgMTk3LCAKLSAgICA4OSwgNjUsIDc4LCAxOTksIDg5LCA2NSwgODQsIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA2OCwgODUsIDc4LCAxNzksIDcxLCAKLSAgICA3MywgODIsIDE3OSwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgODQsIDY5LCAyMTAsIDcxLCA4NSwgNzgsIDIxMywgNzIsIDg1LCAKLSAgICA2NiwgMTc4LCA3NywgNjksIDc3LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgODksIDczLCAKLSAgICAxMjgsIDgwLCA2NSwgODAsIDEyOCwgODIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDczLCAyMTAsIDgzLCA4NCwgNjUsIDIxMCwgCi0gICAgODMsIDg1LCA3OCwgMTI4LCA4NCwgODcsIDY5LCAxMjgsIDg3LCA2NSwgODcsIDEyOCwgODksIDc5LCA2OCwgMTI4LCA2NSwgCi0gICAgODAsIDc2LCAyMDEsIDY2LCA2NiwgNjUsIDEyOCwgNjYsIDY5LCA2OSwgMjAwLCA2NiwgNzksIDg3LCAxMjgsIDY3LCA3NiwgCi0gICAgNjksIDE5OCwgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzUsIDY1LCAyMTAsIDY4LCA4OSwgNjksIDIwMCwgNjksIDczLCA2OSwgCi0gICAgMTI4LCA3MCwgNjksIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzEsIDczLCA1MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIAotICAgIDcyLCA3MywgNjksIDEyOCwgNzMsIDY4LCA3MywgMjA1LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4NSwgNTEsIDEyOCwgNzYsIAotICAgIDY1LCA3NywgMTk3LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCA3OSwgNzksIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgODUsIAotICAgIDY3LCAyMDAsIDc3LCA4NywgNjUsIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA3OSwgODcsIAotICAgIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNzMsIDIxMSwgNzksIDc5LCA4NSwgMTI4LCAKLSAgICA4MCwgNzIsIDc5LCAxMjgsIDgyLCA2NSwgNjUsIDEyOCwgODMsIDY1LCA4MiwgMTI4LCA4MywgNzEsIDY1LCAyMTUsIDgzLCAKLSAgICA3OSwgNzksIDEyOCwgODQsIDY1LCA3MSwgMTI4LCA4NCwgNzIsIDY5LCAyMDYsIDg0LCA3MywgNjcsIDIwMywgODQsIDc5LCAKLSAgICA3OSwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NSwgNzEsIDE3OCwgODQsIDg1LCA4MiwgMTI4LCA4NiwgNjksIDY5LCAKLSAgICAxMjgsIDg2LCA2OSwgODIsIDIxNywgODksIDY5LCA4MiwgMTI4LCA4OSwgNjksIDgyLCAyMTMsIDY2LCA2NSwgNzYsIDEyOCwgCi0gICAgNjYsIDY1LCA4MywgMTk3LCA2NiwgOTAsIDcyLCAyMDEsIDY3LCA3OSwgNzksIDEyOCwgNjcsIDc5LCA4NywgMTI4LCA2NywgCi0gICAgODcsIDczLCAxMjgsIDY4LCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA2NiwgMTI4LCA2OCwgODcsIDY5LCAxMjgsIDcwLCA2NSwgCi0gICAgNjUsIDEyOCwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA4MiwgNjksIDE5NywgNzIsIDY1LCA2OSwgCi0gICAgMTI4LCA3NCwgNzMsIDc2LCAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzUsIDY5LCA3MiwgMTI4LCA3NSwgNzIsIDczLCAxMjgsIAotICAgIDc1LCA3MiwgNzksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCA3OSwgNzksIDEyOCwgNzUsIAotICAgIDg3LCA2OSwgMTI4LCA3NSwgODcsIDczLCAxMjgsIDc2LCA4NSwgNTAsIDEyOCwgNzYsIDg1LCA3NiwgMTI4LCA3NiwgODcsIAotICAgIDY1LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCA4NywgNjksIAotICAgIDEyOCwgNzcsIDg3LCA3MywgMTI4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc5LCA3OSwgMTI4LCAKLSAgICA3OCwgODksIDg1LCAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCAKLSAgICA4NywgNzMsIDEyOCwgODEsIDY1LCA2NSwgMTI4LCA4MSwgNjUsIDgyLCAxMjgsIDgyLCA2NSwgNjksIDEyOCwgODIsIDY5LCAKLSAgICA4MCwgMTkzLCA4MywgNzIsIDc5LCAxOTcsIDgzLCA4MywgNzMsIDEyOCwgODMsIDgzLCA3OSwgMTI4LCA4MywgODUsIDgyLCAKLSAgICAxMjgsIDg0LCA2NSwgNjYsIDEyOCwgODQsIDY5LCA4NCwgMTI4LCA4NCwgNzIsIDY1LCAyMDQsIDg1LCA3NywgODUsIDIwNSwgCi0gICAgODYsIDY1LCA4NiwgMTI4LCA4NiwgNzMsIDc4LCAxMjgsIDg3LCA2NSwgNjksIDEyOCwgODcsIDY1LCA3NiwgMjAzLCA4NywgCi0gICAgNjUsIDg1LCAxMjgsIDg3LCA2OSwgNzksIDEyOCwgODgsIDY1LCA3OCwgMTI4LCA4OCwgNjksIDcyLCAxMjgsIDg5LCA2NSwgCi0gICAgNzUsIDEyOCwgODksIDg5LCA2NSwgMTI4LCA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA4NSwgCi0gICAgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA4MywgNzIsIDE3OCwgNjUsIDg4LCA2OSwgMTI4LCA2NSwgODksIDY2LCAxMjgsIAotICAgIDY1LCA5MCwgODUsIDEyOCwgNjYsIDY1LCA2NSwgMTI4LCA2NiwgNjUsIDY3LCAyMDMsIDY2LCA2NSwgNzgsIDE3OCwgNjYsIAotICAgIDY2LCA2OSwgMTI4LCA2NiwgNjksIDcyLCAxMjgsIDY2LCA2OSwgODQsIDEyOCwgNjYsIDcyLCA3OSwgMTI4LCA2NiwgNzksIAotICAgIDc2LCAyMTIsIDY2LCA4MiwgNjgsIDE5MywgNjYsIDg3LCA2NSwgMTI4LCA2NywgNjUsIDg0LCAxMjgsIDY3LCA3MywgODAsIAotICAgIDEyOCwgNjcsIDc2LCA4NSwgMTk0LCA2NywgNzksIDc4LCAxMjgsIDY3LCA4NSwgNjYsIDE5NywgNjcsIDg1LCA4MCwgMTI4LCAKLSAgICA2NywgODcsIDY5LCAxMjgsIDY3LCA4NywgNzksIDEyOCwgNjcsIDg5LCA4MCwgMTI4LCA2NywgODksIDg0LCAxMjgsIDY4LCAKLSAgICA2NSwgNzgsIDE5OSwgNjgsIDY1LCA4MiwgMTI4LCA2OCwgNjUsIDg0LCAxOTcsIDY4LCA2OCwgNjUsIDIwNCwgNjgsIDY4LCAKLSAgICA2OSwgMTI4LCA2OCwgNjgsIDczLCAxMjgsIDY4LCA2OCwgODUsIDEyOCwgNjgsIDY5LCA3MywgMTI4LCA2OCwgNzMsIDY2LCAKLSAgICAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA4MiwgODUsIDIwNSwgCi0gICAgNjgsIDg1LCA3OCwgMTI4LCA2OSwgODIsIDgyLCAxMjgsIDY5LCA4NywgNjksIDEyOCwgNzAsIDY5LCA3MywgMTI4LCA3MCwgCi0gICAgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDg1LCA4MiwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCA4NywgCi0gICAgNjUsIDEyOCwgNzEsIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDczLCA3NywgCi0gICAgMTI4LCA3MSwgNzMsIDgyLCAxNzgsIDcxLCA3NCwgNjksIDEyOCwgNzIsIDY1LCA4MiwgMTk2LCA3MiwgNzYsIDY1LCAxMjgsIAotICAgIDcyLCA3NywgNzksIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MywgNzcsIDczLCAyMDYsIDczLCA4MywgNzksIDIwNiwgNzQsIAotICAgIDc0LCA2NSwgMTI4LCA3NCwgNzQsIDczLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIAotICAgIDg5LCAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2OSwgNzgsIAotICAgIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3NCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgMTI4LCAKLSAgICA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg3LCA3OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCAKLSAgICA4NywgNjksIDEyOCwgNzYsIDg3LCA3MywgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY2LCAKLSAgICA2NSwgMTI4LCA3NywgNjgsIDg1LCAyMDYsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIDg1LCA3MSwgMTI4LCA3NywgODcsIDc5LCAKLSAgICAxMjgsIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCA3NCwgNzksIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA4NywgNjksIDEyOCwgNzgsIDg5LCA2OSwgMTI4LCA3OSwgCi0gICAgNzIsIDc3LCAxMjgsIDc5LCA3MywgNzYsIDEyOCwgNzksIDc1LCA4NCwgMjA3LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA4NCwgCi0gICAgODUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAyMTIsIDgwLCA2NSwgODQsIDIwMCwgODAsIDcyLCA4NSwgCi0gICAgMjEwLCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIAotICAgIDgwLCA4OSwgODQsIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3OSwgNzAsIDEyOCwgODEsIAotICAgIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgNzgsIAotICAgIDY1LCAyMDUsIDgyLCA3OSwgNzksIDEyOCwgODIsIDgyLCA2OSwgMjAwLCA4MiwgODIsIDc5LCAxMjgsIDgzLCA2OSwgNzIsIAotICAgIDEyOCwgODMsIDcxLCA2NSwgMTk0LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3OSwgMTk5LCAKLSAgICA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCA3MSwgMTgwLCA4MywgNzMsIDc5LCAyMTEsIDgzLCAKLSAgICA3NCwgNjksIDEyOCwgODMsIDc5LCA4NSwgMTI4LCA4MywgODcsIDczLCAxMjgsIDgzLCA4NywgNzksIDEyOCwgODQsIDY1LCAKLSAgICA4NCwgMTI4LCA4NCwgNjUsIDg2LCAxMjgsIDg0LCA3MywgODIsIDEyOCwgODQsIDc0LCA2OSwgMTI4LCA4NCwgNzYsIDY1LCAKLSAgICAxMjgsIDg0LCA3NiwgNzMsIDEyOCwgODQsIDc2LCA4NSwgMTI4LCA4NCwgNzksIDg0LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgCi0gICAgODQsIDg0LCA3MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgODQsIDg3LCA3MywgMTI4LCA4NSwgCi0gICAgODMsIDY5LCAxOTYsIDg2LCA2OSwgODAsIDEyOCwgODYsIDY5LCA4NywgMTI4LCA4NiwgNzksIDg1LCAxMjgsIDg2LCA4NSwgCi0gICAgODIsIDEyOCwgODgsIDg2LCA2NSwgMTI4LCA4OSwgNjUsIDc0LCAxMjgsIDg5LCA2NSwgODEsIDEyOCwgODksIDY1LCA5MCwgCi0gICAgMTI4LCA4OSwgNjksIDY1LCAyMTAsIDg5LCA3MCwgNjksIDIwNiwgODksIDg3LCA2OSwgMTI4LCA4OSwgODcsIDczLCAxMjgsIAotICAgIDg5LCA4NywgNzksIDEyOCwgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzksIDc5LCAxMjgsIDkwLCA3OSwgODQsIDEyOCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgODUsIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCA2NSwgNjUsIAotICAgIDc1LCAxMjgsIDY1LCA2NSwgNzcsIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDg5LCAxMjgsIDY1LCA2OCwgNjUsIAotICAgIDIwMywgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNzcsIDY1LCAyMTAsIDY1LCA3NywgNjYsIDE5MywgNjUsIDgyLCA2NSwgMTk2LCAKLSAgICA2NSwgODIsIDY3LCAyMDAsIDY1LCA4NCwgNzksIDIwNSwgNjUsIDg1LCA2OSwgMTI4LCA2NSwgODcsIDY5LCAxMjgsIDY1LCAKLSAgICA4OSwgNjksIDIxMCwgNjYsIDQ4LCA0OCwgMTc3LCA2NiwgNDgsIDQ4LCAxNzgsIDY2LCA0OCwgNDgsIDE3OSwgNjYsIDQ4LCAKLSAgICA0OCwgMTgwLCA2NiwgNDgsIDQ4LCAxODEsIDY2LCA0OCwgNDgsIDE4MiwgNjYsIDQ4LCA0OCwgMTgzLCA2NiwgNDgsIDQ4LCAKLSAgICAxODQsIDY2LCA0OCwgNDgsIDE4NSwgNjYsIDQ4LCA0OSwgMTc2LCA2NiwgNDgsIDQ5LCAxNzcsIDY2LCA0OCwgNDksIDE3OCwgCi0gICAgNjYsIDQ4LCA0OSwgMTc5LCA2NiwgNDgsIDQ5LCAxODAsIDY2LCA0OCwgNDksIDE4MSwgNjYsIDQ4LCA0OSwgMTgyLCA2NiwgCi0gICAgNDgsIDQ5LCAxODMsIDY2LCA0OCwgNTAsIDE3NiwgNjYsIDQ4LCA1MCwgMTc3LCA2NiwgNDgsIDUwLCAxNzksIDY2LCA0OCwgCi0gICAgNTAsIDE4MCwgNjYsIDQ4LCA1MCwgMTgxLCA2NiwgNDgsIDUwLCAxODIsIDY2LCA0OCwgNTAsIDE4MywgNjYsIDQ4LCA1MCwgCi0gICAgMTg0LCA2NiwgNDgsIDUwLCAxODUsIDY2LCA0OCwgNTEsIDE3NiwgNjYsIDQ4LCA1MSwgMTc3LCA2NiwgNDgsIDUxLCAxNzgsIAotICAgIDY2LCA0OCwgNTEsIDE3OSwgNjYsIDQ4LCA1MSwgMTgyLCA2NiwgNDgsIDUxLCAxODMsIDY2LCA0OCwgNTEsIDE4NCwgNjYsIAotICAgIDQ4LCA1MSwgMTg1LCA2NiwgNDgsIDUyLCAxNzYsIDY2LCA0OCwgNTIsIDE3NywgNjYsIDQ4LCA1MiwgMTc4LCA2NiwgNDgsIAotICAgIDUyLCAxNzksIDY2LCA0OCwgNTIsIDE4MCwgNjYsIDQ4LCA1MiwgMTgxLCA2NiwgNDgsIDUyLCAxODIsIDY2LCA0OCwgNTIsIAotICAgIDE4NCwgNjYsIDQ4LCA1MywgMTc2LCA2NiwgNDgsIDUzLCAxNzcsIDY2LCA0OCwgNTMsIDE3OCwgNjYsIDQ4LCA1MywgMTc5LCAKLSAgICA2NiwgNDgsIDUzLCAxODAsIDY2LCA0OCwgNTMsIDE4MSwgNjYsIDQ4LCA1MywgMTgzLCA2NiwgNDgsIDUzLCAxODQsIDY2LCAKLSAgICA0OCwgNTMsIDE4NSwgNjYsIDQ4LCA1NCwgMTc2LCA2NiwgNDgsIDU0LCAxNzcsIDY2LCA0OCwgNTQsIDE3OCwgNjYsIDQ4LCAKLSAgICA1NCwgMTgxLCA2NiwgNDgsIDU0LCAxODIsIDY2LCA0OCwgNTQsIDE4MywgNjYsIDQ4LCA1NCwgMTg0LCA2NiwgNDgsIDU0LCAKLSAgICAxODUsIDY2LCA0OCwgNTUsIDE3NiwgNjYsIDQ4LCA1NSwgMTc3LCA2NiwgNDgsIDU1LCAxNzgsIDY2LCA0OCwgNTUsIDE3OSwgCi0gICAgNjYsIDQ4LCA1NSwgMTgwLCA2NiwgNDgsIDU1LCAxODEsIDY2LCA0OCwgNTUsIDE4MiwgNjYsIDQ4LCA1NSwgMTgzLCA2NiwgCi0gICAgNDgsIDU1LCAxODQsIDY2LCA0OCwgNTYsIDE3NiwgNjYsIDQ4LCA1NiwgMTc3LCA2NiwgNDgsIDU2LCAxODEsIDY2LCA0OCwgCi0gICAgNTYsIDE4MywgNjYsIDQ4LCA1NywgMTc2LCA2NiwgNDgsIDU3LCAxNzcsIDY2LCA0OSwgNDgsIDE3NiwgNjYsIDQ5LCA0OCwgCi0gICAgMTc4LCA2NiwgNDksIDQ4LCAxODAsIDY2LCA0OSwgNDgsIDE4MSwgNjYsIDQ5LCA1MCwgMTc2LCA2NiwgNDksIDUwLCAxNzcsIAotICAgIDY2LCA0OSwgNTAsIDE3OCwgNjYsIDQ5LCA1MCwgMTc5LCA2NiwgNDksIDUwLCAxODEsIDY2LCA0OSwgNTAsIDE4MywgNjYsIAotICAgIDQ5LCA1MCwgMTg0LCA2NiwgNDksIDUxLCAxNzYsIDY2LCA0OSwgNTEsIDE3NywgNjYsIDQ5LCA1MSwgMTc5LCA2NiwgNDksIAotICAgIDUxLCAxODEsIDY2LCA0OSwgNTIsIDE3NiwgNjYsIDQ5LCA1MiwgMTc3LCA2NiwgNDksIDUyLCAxODEsIDY2LCA0OSwgNTMsIAotICAgIDE3NywgNjYsIDQ5LCA1MywgMTgyLCA2NiwgNDksIDUzLCAxODUsIDY2LCA0OSwgNTQsIDE3OCwgNjYsIDQ5LCA1NCwgMTc5LCAKLSAgICA2NiwgNDksIDU1LCAxNzksIDY2LCA0OSwgNTUsIDE4MiwgNjYsIDQ5LCA1NywgMTc3LCA2NiwgNTAsIDUwLCAxNzYsIDY2LCAKLSAgICA1MCwgNTAsIDE4MSwgNjYsIDUwLCA1MSwgMTc2LCA2NiwgNTAsIDUxLCAxNzcsIDY2LCA1MCwgNTEsIDE3OSwgNjYsIDUwLCAKLSAgICA1MiwgMTc2LCA2NiwgNTAsIDUyLCAxNzcsIDY2LCA1MCwgNTIsIDE3OCwgNjYsIDUwLCA1MiwgMTc5LCA2NiwgNTAsIDUyLCAKLSAgICAxODMsIDY2LCA1MCwgNTMsIDE4MCwgNjYsIDY1LCA3OCwgMjAzLCA2NiwgNjYsIDczLCAxMjgsIDY2LCA2NiwgNzksIDEyOCwgCi0gICAgNjYsIDY2LCA4NSwgMTI4LCA2NiwgNjYsIDg5LCAxMjgsIDY2LCA2NywgNjUsIDE5NiwgNjYsIDY5LCA3NiwgMjA0LCA2NiwgCi0gICAgNjksIDc2LCAyMTIsIDY2LCA2OSwgODQsIDE5MywgNjYsIDcyLCA2OSwgMTI4LCA2NiwgNzIsIDczLCAxMjgsIDY2LCA3MiwgCi0gICAgODUsIDEyOCwgNjYsIDczLCA2NiwgMTI4LCA2NiwgNzMsIDcxLCAxMjgsIDY2LCA3NSwgNjUsIDE3MywgNjYsIDc5LCA2NSwgCi0gICAgMTI4LCA2NiwgODUsIDgyLCAyMTMsIDY2LCA4NywgNjksIDEyOCwgNjYsIDg3LCA3MywgMTI4LCA2NiwgODgsIDcxLCAxMjgsIAotICAgIDY3LCA2NSwgNjgsIDE5MywgNjcsIDY1LCA3OCwgMTk5LCA2NywgNjUsIDgyLCAxOTcsIDY3LCA2NSwgODgsIDEyOCwgNjcsIAotICAgIDY3LCA2NSwgMTI4LCA2NywgNjcsIDY5LCAxMjgsIDY3LCA2NywgNzMsIDEyOCwgNjcsIDY3LCA3OSwgMTI4LCA2NywgNjcsIAotICAgIDg1LCAxMjgsIDY3LCA2OSwgNjgsIDIwMSwgNjcsIDY5LCA3OCwgMTI4LCA2NywgNjksIDgwLCAxMjgsIDY3LCA2OSwgODgsIAotICAgIDEyOCwgNjcsIDcyLCA2NSwgMTk2LCA2NywgNzIsIDY5LCAyMDYsIDY3LCA3MywgNjksIDEyOCwgNjcsIDczLCA3MywgMTI4LCAKLSAgICA2NywgNzMsIDg0LCAxMjgsIDY3LCA3MywgODgsIDEyOCwgNjcsIDc5LCA2NSwgMTI4LCA2NywgNzksIDgwLCAxMjgsIDY3LCAKLSAgICA3OSwgODQsIDEyOCwgNjcsIDc5LCA4OCwgMTI4LCA2NywgODUsIDc5LCAxMjgsIDY3LCA4NSwgODIsIDEyOCwgNjcsIDg1LCAKLSAgICA4NCwgMTI4LCA2NywgODUsIDg4LCAxMjgsIDY3LCA4OSwgNjUsIDEyOCwgNjcsIDg5LCA4MiwgMTI4LCA2NywgODksIDg4LCAKLSAgICAxMjgsIDY4LCA2NSwgNjgsIDEyOCwgNjgsIDY1LCA2OSwgMTk5LCA2OCwgNjUsIDc3LCAyMDgsIDY4LCA2NSwgODIsIDIwMywgCi0gICAgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIDY4LCA3MiwgNzMsIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgCi0gICAgNzYsIDc5LCAxMjgsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDgyLCA3MywgMjA0LCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4NSwgCi0gICAgNzIsIDEyOCwgNjgsIDg1LCA3NiwgMTI4LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg5LCA3OSwgCi0gICAgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgNzksIDEyOCwgNjgsIDkwLCA4NSwgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIAotICAgIDY5LCA3MSwgNzEsIDEyOCwgNjksIDczLCA4MywgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3OCwgNzgsIDEyOCwgNjksIAotICAgIDc4LCA3OSwgMjExLCA2OSwgNzksIDcyLCAxMjgsIDY5LCA4MiwgNzEsIDEyOCwgNjksIDgzLCA3MiwgMTc4LCA2OSwgODUsIAotICAgIDgyLCAyMDcsIDY5LCA4OCwgNzksIDEyOCwgNzAsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgODgsIAotICAgIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OSwgMjAwLCAKLSAgICA3MCwgNzAsIDczLCAxMjgsIDcwLCA3MCwgNzYsIDEyOCwgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDc2LCAxOTcsIDcwLCAKLSAgICA3MywgNzYsIDIwNCwgNzAsIDczLCA4MCwgMTI4LCA3MCwgNzMsIDg0LCAxMjgsIDcwLCA3MywgODgsIDEyOCwgNzAsIDc2LCAKLSAgICA2NSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgODgsIDEyOCwgNzAsIDg1LCA4MCwgMTI4LCA3MCwgODUsIDg0LCAKLSAgICAxMjgsIDcwLCA4NSwgODgsIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgCi0gICAgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDg0LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgCi0gICAgNjUsIDcwLCAxMjgsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3NywgMTI4LCA3MSwgNjcsIDY1LCAyMDYsIDcxLCA2OSwgCi0gICAgNjYsIDE5MywgNzEsIDY5LCA2NiwgMjA3LCA3MSwgNjksIDg0LCAxOTMsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA4NSwgCi0gICAgMTI4LCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MywgODAsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzksIDY1LCAxMjgsIAotICAgIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzcsIDEyOCwgNzEsIAotICAgIDg5LCA2NSwgMTI4LCA3MSwgODksIDY5LCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIAotICAgIDc5LCAxMjgsIDcxLCA4OSwgODUsIDEyOCwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc4LCAxOTksIDcyLCA3NiwgNjksIAotICAgIDEyOCwgNzIsIDc2LCA3MywgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCA3NiwgODUsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCAKLSAgICA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCAKLSAgICA3OCwgNzMsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg4LCAKLSAgICA2NSwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgOTAsIDcxLCAKLSAgICAxMjgsIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDkwLCAxMjgsIDczLCA0NSwgNjUsIDEyOCwgCi0gICAgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNzYsIDUwLCAxMjgsIDczLCA3OSwgODIsIDEyOCwgNzQsIDY1LCA2NSwgMTI4LCA3NCwgCi0gICAgNjUsIDgyLCAxMjgsIDc0LCA2OSwgNzIsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MywgCi0gICAgNjUsIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3OSwgODksIDEyOCwgNzQsIDg3LCA2NSwgCi0gICAgMTI4LCA3NSwgNjUsIDY4LCAxNzksIDc1LCA2NSwgNjgsIDE4MSwgNzUsIDY1LCA4MCwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIAotICAgIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY5LCA4MCwgMTI4LCA3NSwgNjksIDg4LCAxMjgsIDc1LCA2OSwgODksIDEyOCwgNzUsIAotICAgIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA3MiwgMTI4LCA3NSwgNzMsIAotICAgIDczLCAxMjgsIDc1LCA3MywgODAsIDEyOCwgNzUsIDczLCA4OCwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNzMsIAotICAgIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc5LCA2NSwgMTI4LCAKLSAgICA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgODAsIDEyOCwgNzUsIDc5LCA4NCwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCAKLSAgICA4MCwgNjksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDg1LCAKLSAgICA1MiwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgNzUsIDg1LCA4MCwgMTI4LCA3NSwgODUsIDg0LCAKLSAgICAxMjgsIDc1LCA4NSwgODgsIDEyOCwgNzUsIDg4LCA2NSwgMTI4LCA3NSwgODgsIDY5LCAxMjgsIDc1LCA4OCwgNzMsIDEyOCwgCi0gICAgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDg1LCAxMjgsIDc1LCA4OSwgNjUsIDEyOCwgNzUsIDg5LCA2OSwgMTI4LCA3NSwgCi0gICAgODksIDczLCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCA4NSwgMTI4LCA3NiwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgCi0gICAgNzEsIDIxMywgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY4LCA1MCwgCi0gICAgMTI4LCA3NiwgNjksIDc5LCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIAotICAgIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA4MiwgMTkzLCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OSwgNzEsIDEyOCwgNzYsIAotICAgIDc5LCA3MSwgMjEwLCA3NiwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODksIAotICAgIDg5LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDY1LCA3MiwgMTI4LCA3NywgNjUsIDgzLCAyMTMsIDc3LCA2NSwgODksIAotICAgIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDUxLCAxMjgsIDc3LCA2NiwgNTIsIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCAKLSAgICA3NywgNjYsIDczLCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA4NSwgMTI4LCA3NywgNjcsIDcyLCAyMTMsIDc3LCAKLSAgICA2OSwgODQsIDE5MywgNzcsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDY1LCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCAKLSAgICA4NSwgMTI4LCA3NywgNzIsIDkwLCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCA3NiwgMTI4LCA3NywgNzMsIDc2LCAKLSAgICAyMDQsIDc3LCA3MywgNzcsIDEyOCwgNzcsIDc5LCA2NSwgMTI4LCA3NywgNzksIDc2LCAxMjgsIDc3LCA4NSwgNjksIDEyOCwgCi0gICAgNzcsIDg5LCA2NSwgMTI4LCA3NywgODksIDg0LCAxMjgsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCA3MSwgMTI4LCA3OCwgCi0gICAgNjUsIDc3LCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY2LCA2NSwgMTI4LCA3OCwgNjYsIDczLCAxMjgsIDc4LCA2NiwgCi0gICAgNzksIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgNjYsIDg5LCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgNzgsIDY5LCA4OCwgCi0gICAgMjEyLCA3OCwgNzEsIDcxLCAxMjgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzMsIDc3LCAxMjgsIAotICAgIDc4LCA3NCwgODksIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OSwgNjUsIDEyOCwgNzgsIAotICAgIDgyLCA2OSwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODUsIAotICAgIDY5LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NywgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgODIsIAotICAgIDEyOCwgNzgsIDg1LCA4OCwgMTI4LCA3OCwgODksIDY5LCAyMTIsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDkwLCA3MywgMTI4LCAKLSAgICA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgODksIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OSwgNjUsIDc1LCAxMjgsIDc5LCAKLSAgICA2NSwgODksIDEyOCwgNzksIDY2LCA3OSwgMjA0LCA3OSwgODQsIDg0LCAxMjgsIDgwLCA2NSwgNjgsIDEyOCwgODAsIDY1LCAKLSAgICA3NiwgMjA1LCA4MCwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODgsIDEyOCwgODAsIDczLCA2OSwgMTI4LCA4MCwgNzMsIDcxLCAKLSAgICAxMjgsIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA4NCwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgCi0gICAgODAsIDc5LCA4MCwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgCi0gICAgODUsIDc5LCAxMjgsIDgwLCA4NSwgODAsIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4OSwgCi0gICAgODAsIDEyOCwgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgxLCA2NSwgNzYsIDE5MywgODEsIDY1LCA4MSwgCi0gICAgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzIsIDY5LCAxMjgsIAotICAgIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA3OSwgMTI4LCA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIAotICAgIDczLCA4MCwgMTI4LCA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDc5LCA2NSwgMTI4LCA4MSwgNzksIAotICAgIDc5LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgNjksIAotICAgIDEyOCwgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDc1LCAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCAKLSAgICA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCAKLSAgICA4NywgNjksIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCAKLSAgICA3MywgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCA4MSwgODksIDg0LCAKLSAgICAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4OCwgMTI4LCA4MiwgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjgsIDIwMSwgCi0gICAgODIsIDY1LCA3MywgMjA2LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2OSwgNzMsIDE5NiwgODIsIDczLCA4MCwgMTI4LCA4MiwgCi0gICAgNzQsIDY5LCAxMjgsIDgyLCA3NCwgNjksIDIxMSwgODIsIDc5LCA2NSwgMTI4LCA4MiwgODIsIDY5LCAxMjgsIDgyLCA4MiwgCi0gICAgODUsIDEyOCwgODIsIDgyLCA4OSwgMTI4LCA4MiwgODUsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDEyOCwgODIsIDg5LCA2NSwgCi0gICAgMTI4LCA4MiwgODksIDg5LCAxMjgsIDgzLCA0NSwgODcsIDEyOCwgODMsIDY1LCA4NywgMTI4LCA4MywgNjUsIDg5LCAxMjgsIAotICAgIDgzLCA2NiwgODUsIDE5NCwgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MiwgODUsIDE3OCwgODMsIAotICAgIDczLCA3MywgMTI4LCA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzgsIDE5NywgODMsIDc1LCA4NywgMTI4LCA4MywgNzgsIAotICAgIDY1LCAyMDgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIDc5LCA4NywgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4NCwgNTAsIAotICAgIDEyOCwgODMsIDg1LCA2NSwgMTI4LCA4MywgODUsIDY4LCAxMjgsIDgzLCA4NSwgNzUsIDIxMywgODMsIDg1LCA3OSwgMTI4LCAKLSAgICA4MywgODcsIDcxLCAxMjgsIDgzLCA4NywgOTAsIDEyOCwgODMsIDg5LCA2NSwgMTI4LCA4MywgOTAsIDY1LCAxMjgsIDgzLCAKLSAgICA5MCwgNjksIDEyOCwgODMsIDkwLCA3MywgMTI4LCA4MywgOTAsIDc5LCAxMjgsIDgzLCA5MCwgODUsIDEyOCwgODMsIDkwLCAKLSAgICA5MCwgMTI4LCA4NCwgNjUsIDUwLCAxMjgsIDg0LCA2NSwgNzYsIDIwNCwgODQsIDY1LCA3OSwgMTI4LCA4NCwgNjUsIDgwLCAKLSAgICAxMjgsIDg0LCA2NSwgODAsIDE5NywgODQsIDY1LCA4NywgMTI4LCA4NCwgNjUsIDg4LCAxMjgsIDg0LCA2OSwgNzgsIDIxMywgCi0gICAgODQsIDY5LCA4MywgMjAwLCA4NCwgNjksIDg0LCAyMDAsIDg0LCA2OSwgODgsIDEyOCwgODQsIDcyLCA2OSwgMjExLCA4NCwgCi0gICAgNzIsIDczLCAyMDYsIDg0LCA3MiwgOTAsIDEyOCwgODQsIDczLCA3MywgMTI4LCA4NCwgNzMsIDc2LCAxMjgsIDg0LCA3MywgCi0gICAgODAsIDEyOCwgODQsIDczLCA4NCwgMTI4LCA4NCwgNzMsIDg4LCAxMjgsIDg0LCA3NiwgODYsIDEyOCwgODQsIDc5LCA2NSwgCi0gICAgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIAotICAgIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODUsIDc5LCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIAotICAgIDg1LCA4NCwgMTI4LCA4NCwgODUsIDg4LCAxMjgsIDg0LCA4OSwgNjUsIDEyOCwgODQsIDg5LCA2OSwgMTI4LCA4NCwgODksIAotICAgIDczLCAxMjgsIDg0LCA4OSwgNzksIDEyOCwgODQsIDkwLCA2NSwgMTI4LCA4NCwgOTAsIDY5LCAxMjgsIDg0LCA5MCwgNzMsIAotICAgIDEyOCwgODQsIDkwLCA3MywgMjEwLCA4NCwgOTAsIDc5LCAxMjgsIDg0LCA5MCwgODUsIDEyOCwgODUsIDY5LCA2OSwgMTI4LCAKLSAgICA4NSwgNjksIDg5LCAxMjgsIDg1LCA3OCwgNjgsIDIwNywgODUsIDgyLCA1MiwgMTI4LCA4NSwgODIsIDczLCAxMjgsIDg1LCAKLSAgICA4MiwgODUsIDIxOCwgODUsIDkwLCA1MSwgMTI4LCA4NSwgOTAsIDg1LCAxMjgsIDg2LCA2NSwgNjUsIDEyOCwgODYsIDY1LCAKLSAgICA4MCwgMTI4LCA4NiwgNjUsIDg0LCAxMjgsIDg2LCA2NSwgODgsIDEyOCwgODYsIDY5LCA3MiwgMTI4LCA4NiwgNjksIDg4LCAKLSAgICAxMjgsIDg2LCA3MywgNjksIDEyOCwgODYsIDczLCA4MCwgMTI4LCA4NiwgNzMsIDg0LCAxMjgsIDg2LCA3MywgODgsIDEyOCwgCi0gICAgODYsIDc5LCA3MywgMTk2LCA4NiwgNzksIDc5LCAxMjgsIDg2LCA3OSwgODAsIDEyOCwgODYsIDc5LCA4NCwgMTI4LCA4NiwgCi0gICAgNzksIDg3LCAxMjgsIDg2LCA3OSwgODgsIDEyOCwgODYsIDg1LCA4MCwgMTI4LCA4NiwgODUsIDg0LCAxMjgsIDg2LCA4NSwgCi0gICAgODgsIDEyOCwgODYsIDg3LCA2NSwgMTI4LCA4NiwgODksIDgwLCAxMjgsIDg2LCA4OSwgODIsIDEyOCwgODYsIDg5LCA4NCwgCi0gICAgMTI4LCA4NiwgODksIDg4LCAxMjgsIDg3LCA2NSwgNzgsIDEyOCwgODcsIDY1LCA4MCwgMTI4LCA4NywgNjUsIDg0LCAxMjgsIAotICAgIDg3LCA2NSwgODgsIDEyOCwgODcsIDY5LCA3OCwgMTI4LCA4NywgNjksIDgwLCAxMjgsIDg3LCA2OSwgODgsIDEyOCwgODcsIAotICAgIDczLCA3OCwgMTI4LCA4NywgNzksIDY1LCAxMjgsIDg3LCA3OSwgNjksIDEyOCwgODcsIDc5LCA3OCwgMTI4LCA4NywgNzksIAotICAgIDgwLCAxMjgsIDg3LCA3OSwgODIsIDIwMywgODcsIDc5LCA4OCwgMTI4LCA4NywgODUsIDc4LCAxMjgsIDg3LCA4NSwgNzksIAotICAgIDEyOCwgODcsIDg5LCA3OCwgMjA2LCA4OCwgNzksIDY1LCAxMjgsIDg4LCA3OSwgODIsIDEyOCwgODgsIDg5LCA2NSwgMTI4LCAKLSAgICA4OCwgODksIDY5LCAxMjgsIDg4LCA4OSwgNzMsIDEyOCwgODgsIDg5LCA3OSwgMTI4LCA4OCwgODksIDgwLCAxMjgsIDg4LCAKLSAgICA4OSwgODIsIDEyOCwgODgsIDg5LCA4NCwgMTI4LCA4OCwgODksIDg1LCAxMjgsIDg4LCA4OSwgODgsIDEyOCwgODksIDY1LCAKLSAgICA2NiwgMTI4LCA4OSwgNjUsIDY4LCAxMjgsIDg5LCA2NSwgNzAsIDEyOCwgODksIDY1LCA3MSwgMTI4LCA4OSwgNjUsIDc3LCAKLSAgICAxMjgsIDg5LCA2NSwgODAsIDEyOCwgODksIDY1LCA4NiwgMTI4LCA4OSwgNjUsIDg3LCAxMjgsIDg5LCA2NSwgODksIDEyOCwgCi0gICAgODksIDY5LCA2NSwgMTI4LCA4OSwgNjksIDg3LCAxMjgsIDg5LCA2OSwgODksIDEyOCwgODksIDczLCA3MywgMTI4LCA4OSwgCi0gICAgODUsIDY4LCAyMDAsIDg5LCA4NSwgODIsIDEyOCwgODksIDg5LCA4MCwgMTI4LCA4OSwgODksIDgyLCAxMjgsIDg5LCA4OSwgCi0gICAgODQsIDEyOCwgODksIDg5LCA4OCwgMTI4LCA5MCwgNjUsIDcxLCAxMjgsIDkwLCA2NSwgNzIsIDEyOCwgOTAsIDY1LCA3MywgCi0gICAgMTI4LCA5MCwgNjksIDUwLCAxMjgsIDkwLCA3MiwgODksIDEyOCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgNzMsIDY2LCAxMjgsIAotICAgIDkwLCA3MywgNzEsIDEyOCwgOTAsIDc2LCA2NSwgMTI4LCA5MCwgODIsIDY1LCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIAotICAgIDg1LCA3NywgMTI4LCA5MCwgODUsIDg0LCAxMjgsIDkwLCA5MCwgODksIDEyOCwgNzEsIDY1LCAxNzgsIDc1LCA2NSwgMTk4LCAKLSAgICA2NiwgNjksIDIwMCwgNjgsIDY1LCAyMTcsIDg0LCA3MiwgMTk3LCA3MCwgNjksIDIwMCwgNzYsIDg1LCAxNzgsIDY4LCA2NSwgCi0gICAgMTk2LCA2OCwgNjUsIDE5OSwgODMsIDY1LCAxOTYsIDg0LCA2NSwgMjAwLCA4MywgNjUsIDE5OSwgNjksIDc4LCAxOTYsIDgxLCAKLSAgICA2NSwgMTk4LCA4MiwgNzksIDE5NiwgNjUsIDY2LCAxNzgsIDgzLCA3MywgMjE2LCA3OCwgODUsIDIwNiwgNjUsIDgyLCAxOTUsIAotICAgIDczLCA3MSwgMjAxLCA3OCwgNzksIDIxMCwgNjYsIDczLCAxOTksIDgwLCA4NywgMjA3LCA4NCwgNjksIDIwNiwgODcsIDY1LCAKLSAgICAyMTUsIDg5LCA3MywgMTk5LCA3NiwgNjksIDIwMywgNzcsIDcxLCAyMDcsIDc5LCA2NywgMjEwLCA4MywgNzIsIDE5NywgNzEsIAotICAgIDcyLCAxOTcsIDgyLCA3MiwgMjA3LCA2NywgNzIsIDE5NywgNjUsIDgyLCAyMDUsIDY2LCA4NSwgMjEyLCA2NywgODUsIDIwNSwgCi0gICAgNzEsIDY1LCAxOTYsIDc4LCA2OSwgMjA3LCA4NCwgNzMsIDIwOCwgODUsIDgyLCAxNzgsIDcxLCA2NSwgMTk4LCA3NSwgNzIsIAotICAgIDIwNywgOTAsIDY1LCAyMDAsIDY4LCA3MywgMTk3LCA4MCwgNzIsIDIwMSwgOTAsIDcyLCAxOTcsIDcxLCA4NSwgMTc4LCA3MSwgCi0gICAgODUsIDE5NiwgODAsIDcyLCAyMDcsIDgxLCA3MywgMTI4LCA4MSwgODUsIDEyOCwgODQsIDY1LCAxOTQsIDg0LCA3MywgMjEwLCAKLSAgICA2NywgNzIsIDIwNywgNzAsIDc5LCAxMjgsIDc1LCA2NSwgMjAxLCA3NywgNjksIDIwNiwgNzcsIDczLCAxOTYsIDc4LCA2NSwgCi0gICAgMTk5LCA3OCwgNjksIDIxMiwgNzksIDY4LCAxOTYsIDgwLCA2OSwgMjAwLCA4MSwgNzksIDEyOCwgODYsIDY5LCAyMDAsIDg5LCAKLSAgICA3OSwgMTk2LCA2NiwgNjUsIDE5OSwgNjYsIDY5LCAyMTIsIDY4LCA4OSwgMjA3LCA3MSwgNzMsIDE4MCwgNzIsIDY1LCAxOTMsIAotICAgIDc1LCA3NSwgMTI4LCA3NiwgNjUsIDIwNCwgNzYsIDg1LCAyMDUsIDgxLCA2OSwgMTI4LCA4MywgNzMsIDIwNiwgODUsIDc2LCAKLSAgICAyMTMsIDg2LCA2NSwgMjE0LCA0NSwgODUsIDIwNSwgNjYsIDg1LCAyMTAsIDY3LCA3MiwgMjAxLCA2OCwgNjUsIDIwOCwgNjgsIAotICAgIDg1LCAyMDQsIDY4LCA5MCwgMTI4LCA2OSwgODgsIDIwNywgNzEsIDgyLCAyMTMsIDcxLCA4NSwgMTk5LCA3MiwgNzEsIDEyOCwgCi0gICAgNzIsIDgwLCAxMjgsIDcyLCA4NiwgMTI4LCA3MywgNzQsIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4OSwgMTI4LCA3NCwgNjksIAotICAgIDIwMCwgNzQsIDc5LCAyMTIsIDc1LCA2NSwgMjAzLCA3NSwgNjksIDIxNywgNzUsIDcxLCAxMjgsIDc1LCA4NSwgMjA0LCA3NiwgCi0gICAgNzQsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDc0LCAxMjgsIDc4LCA4NiwgMTI4LCAKLSAgICA3OCwgODksIDIwMSwgNzksIDcyLCAyMDUsIDc5LCA4NiwgMTI4LCA4MCwgNjUsIDIxNSwgODEsIDc5LCAyMDcsIDgyLCA2OCwgCi0gICAgMjA3LCA4MywgNzIsIDIxMywgODMsIDg1LCAyMDYsIDgzLCA4NywgMTI4LCA4NCwgOTAsIDEyOCwgODcsIDc5LCAyMDYsIDg5LCAKLSAgICA2OSwgMjA2LCA4OSwgODUsIDIxMSwgNjUsIDc4LCAyMDcsIDY2LCA2NSwgMjA0LCA2NiwgNjksIDIwNiwgNjYsIDc5LCAyMTUsIAotICAgIDY2LCA4MSwgMTI4LCA2NywgNzcsIDEyOCwgNjcsIDg1LCAyMTIsIDY4LCA3MywgMjA2LCA2OCwgNzYsIDEyOCwgNjgsIDc3LCAKLSAgICAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgODUsIDE5NCwgNjgsIDg2LCAxMjgsIDY5LCA2NywgMjAwLCA3MCwgNzcsIDEyOCwgNzAsIAotICAgIDg5LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgODUsIDIwNSwgNzEsIDg2LCAxMjgsIDcxLCA4OSwgMTI4LCA3MiwgNzUsIDEyOCwgCi0gICAgNzMsIDgzLCAyMTEsIDc1LCA2NSwgMTc4LCA3NSwgNjYsIDEyOCwgNzUsIDczLCAxOTYsIDc1LCA3MywgMjA4LCA3NSwgNzYsIAotICAgIDEyOCwgNzUsIDc3LCAxMjgsIDc1LCA4NCwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg1LCAxODAsIDc1LCA4NiwgMTI4LCA3NiwgCi0gICAgNjUsIDIxNSwgNzYsIDY3LCAxOTcsIDc2LCA2NywgMjAxLCA3NiwgNzIsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA4OCwgMTI4LCAKLSAgICA3NywgNjksIDIwNSwgNzcsIDcxLCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgODMsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NiwgCi0gICAgMTI4LCA3NywgODcsIDEyOCwgNzgsIDY1LCAxOTMsIDc4LCA3MCwgMTI4LCA3OCwgNzEsIDIwNywgNzgsIDcyLCAxMjgsIDc4LCAKLSAgICA3NywgMTI4LCA3OCwgODcsIDEyOCwgNzgsIDg5LCAxOTYsIDc5LCA2NiwgMTI4LCA4MCwgNTAsIDEyOCwgODAsIDY1LCAyMDgsIAotICAgIDgwLCA2NywgMTI4LCA4MCwgNjgsIDEyOCwgODAsIDY5LCAyMTEsIDgwLCA3MCwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDc5LCAKLSAgICAyMDgsIDgwLCA4MiwgMTI4LCA4MCwgODYsIDEyOCwgODAsIDg3LCAxMjgsIDgwLCA5MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIAotICAgIDg5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzQsIDE5NywgODIsIDg1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNzgsIDE5MywgCi0gICAgODMsIDc5LCAxOTgsIDgzLCA4MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDg1LCAyMTAsIDgzLCA5MCwgMTI4LCA4NCwgNjUsIAotICAgIDIxMywgODQsIDY1LCAyMTQsIDg0LCA2OSwgMTk3LCA4NCwgNjksIDIxMiwgODQsIDc4LCAxMjgsIDg0LCA4MiwgMTI4LCA4NSwgCi0gICAgOTAsIDE3OSwgODYsIDY5LCAxOTcsIDg2LCA2OSwgMjE1LCA4NywgNjYsIDEyOCwgODcsIDg2LCAxMjgsIDg4LCA4OSwgMTI4LCAKLSAgICA4OSwgNjUsIDIxMCwgODksIDg2LCAxMjgsIDkwLCA2NSwgMjA0LCA5MCwgNzMsIDE5NCwgOTAsIDc2LCAxOTMsIDkwLCA4NSwgCi0gICAgMTgxLCA2NiwgMjE3LCA2NSwgMTk3LCA2OSwgMTc4LCA4OSwgMjEzLCA2NiwgMjAxLCA2OCwgMjE4LCA5MCwgMTk3LCA2OCwgCi0gICAgMjEzLCA3NSwgMjA1LCA2NywgMjA1LCA2OCwgMjA1LCA3NywgMjA1LCA2NywgMTkzLCA2OCwgMTk0LCA3NiwgMjE4LCA3NywgCi0gICAgMTk0LCA3NywgMjA3LCA3NywgMjE0LCA3NywgMjE1LCA4MCwgMjA3LCA4MSwgMjA4LCA4NCwgMTk1LCA5MCwgMjAxLCAyMDIsIAotICAgIDIwOSwgCisgICAgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKKyAgICA1MSwgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIAorICAgIDc2LCA0NSwgNTEsIDU1LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDg5LCA3NywgCisgICAgNjYsIDc5LCA3NiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDU3LCAxMjgsIAorICAgIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCAKKyAgICA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAorICAgIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgCisgICAgNzksIDc2LCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNDksIDEyOCwgODMsIDg5LCAKKyAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDEyOCwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU2LCAKKyAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAorICAgIDQ5LCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1MSwgMTI4LCA4MywgODksIDc3LCAKKyAgICA2NiwgNzksIDc2LCA0NSwgNDksIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNDksIDEyOCwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDEyOCwgCisgICAgODMsIDg5LCA3NiwgNzksIDg0LCAyMDEsIDgzLCA4OSwgNjUsIDEyOCwgODMsIDg5LCAxMjgsIDgzLCA4NywgOTAsIDEyOCwgCisgICAgODMsIDg3LCA4NSwgNzgsIDE5OSwgODMsIDg3LCA3OSwgODIsIDY4LCA4MywgMTI4LCA4MywgODcsIDc5LCA4MiwgNjgsIAorICAgIDEyOCwgODMsIDg3LCA3OSwgNzksIDEyOCwgODMsIDg3LCA3OSwgMTI4LCA4MywgODcsIDczLCA3MywgMTI4LCA4MywgODcsIAorICAgIDczLCAxMjgsIDgzLCA4NywgNzEsIDEyOCwgODMsIDg3LCA2OSwgNjksIDg0LCAxMjgsIDgzLCA4NywgNjUsIDgzLCAyMDAsIAorICAgIDgzLCA4NywgNjUsIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODcsIDY1LCA2NSwgMTI4LCA4MywgODcsIDEyOCwgCisgICAgODMsIDg2LCA2NSwgODMsIDg0LCAyMDEsIDgzLCA4NiwgNjUsIDgyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA4NiwgNjUsIDgyLCAKKyAgICA3MywgODQsIDE5MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODUsIDg1LCAxMjgsIDgzLCA4NSwgODQsIDEyOCwgODMsIDg1LCAKKyAgICA4MywgODAsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA4MywgODUsIDgyLCA4OCwgMTI4LCA4MywgODUsIDgyLCA4MiwgNzksIAorICAgIDg1LCA3OCwgNjgsIDEyOCwgODMsIDg1LCA4MiwgODIsIDc5LCA4NSwgNzgsIDE5NiwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgCisgICAgMTk3LCA4MywgODUsIDgyLCA2OSwgMTI4LCA4MywgODUsIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA4NSwgODIsIDU3LCAKKyAgICAxMjgsIDgzLCA4NSwgODIsIDEyOCwgODMsIDg1LCAyMTAsIDgzLCA4NSwgODAsIDgyLCA2NSwgNzYsIDczLCA3OCwgNjksIAorICAgIDY1LCAyMTAsIDgzLCA4NSwgODAsIDY5LCA4MiwgODYsIDczLCA4MywgNjksIDEyOCwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgCisgICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgODAsIDY5LCA4MiwgODMsIDY5LCAyMTIsIDgzLCA4NSwgODAsIDY5LCA4MiwgODMsIDY3LCAKKyAgICA4MiwgNzMsIDgwLCAyMTIsIDgzLCA4NSwgODAsIDY5LCA4MiwgNzMsIDc3LCA4MCwgNzksIDgzLCA2OSwgMTk2LCA4MywgODUsIAorICAgIDgwLCA2OSwgODIsIDcwLCA3MywgODgsIDY5LCAxOTYsIDgzLCA4NSwgODAsIDEyOCwgODMsIDg1LCA3OSwgODgsIDEyOCwgCisgICAgODMsIDg1LCA3OSwgODAsIDEyOCwgODMsIDg1LCA3OSwgMTI4LCA4MywgODUsIDc4LCA3MSwgMTI4LCA4MywgODUsIDc4LCAKKyAgICA2OCwgNjUsIDc4LCA2OSwgODMsIDE5NywgODMsIDg1LCA3OCwgMTI4LCA4MywgODUsIDIwNiwgODMsIDg1LCA3NywgNzcsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgODUsIDc3LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgCisgICAgODQsIDczLCA3OSwgMjA2LCA4MywgODUsIDc3LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA4NSwgNzcsIDEyOCwgODMsIDg1LCAKKyAgICA3NSwgODUsIDc4LCAxMjgsIDgzLCA4NSwgNzUsIDg1LCAyMDYsIDgzLCA4NSwgNzUsIDg1LCAxMjgsIDgzLCA4NSwgNzUsIAorICAgIDIxMywgODMsIDg1LCA3MywgODQsIDY1LCA2NiwgNzYsIDY5LCAxMjgsIDgzLCA4NSwgNzMsIDg0LCAxMjgsIDgzLCA4NSwgCisgICAgNzIsIDg1LCA4MiwgMTI4LCA4MywgODUsIDY4LCA1MCwgMTI4LCA4MywgODUsIDY4LCAxMjgsIDgzLCA4NSwgNjcsIDY3LCAKKyAgICA2OSwgNjksIDY4LCA4MywgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCA2OCwgMjExLCA4MywgODUsIDY3LCA2NywgNjksIAorICAgIDY5LCA2OCwgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCAxOTYsIDgzLCA4NSwgNjYsIDg1LCA3OCwgNzMsIDg0LCAKKyAgICAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDczLCA3OSwgMjA2LCA4MywgODUsIDY2LCA4MywgODQsIAorICAgIDczLCA4NCwgODUsIDg0LCA2OSwgMTI4LCA4MywgODUsIDY2LCA4MywgODQsIDczLCA4NCwgODUsIDg0LCAxOTcsIDgzLCA4NSwgCisgICAgNjYsIDgzLCA2OSwgODQsIDEyOCwgODMsIDg1LCA2NiwgODMsIDY5LCAyMTIsIDgzLCA4NSwgNjYsIDgzLCA2NywgODIsIDczLCAKKyAgICA4MCwgMjEyLCA4MywgODUsIDY2LCA4MCwgODUsIDc4LCA2NywgODQsIDczLCA4MywgMTI4LCA4MywgODUsIDY2LCA3NiwgNzMsIAorICAgIDc4LCA2OSwgNjUsIDIxMCwgODMsIDg1LCA2NiwgNzQsIDc5LCA3MywgNzgsIDY5LCAxOTYsIDgzLCA4NSwgNjYsIDc0LCA2OSwgCisgICAgNjcsIDg0LCAxMjgsIDgzLCA4NSwgNjYsIDczLCA4NCwgNzksIDEyOCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgODUsIDgwLCAKKyAgICAxMjgsIDgzLCA4NSwgNjYsIDcxLCA4MiwgNzksIDg1LCAyMDgsIDgzLCA4NSwgNjUsIDEyOCwgODMsIDIxMywgODMsIDg0LCAKKyAgICA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDgzLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDIxMSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU3LCAxMjgsIDgzLCA4NCwgCisgICAgODIsIDc5LCA3NSwgNjksIDQ1LCA1NiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTUsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNzksIDc1LCA2OSwgNDUsIDU0LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MywgMTI4LCA4MywgODQsIAorICAgIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTIsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCA4NCwgCisgICAgODIsIDc5LCA3NSwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ5LCAxMjgsIDgzLCAKKyAgICA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDczLCA4MCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCAKKyAgICA3MSwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgCisgICAgMjE3LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCA3MiwgNjksIDE5NiwgODMsIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCAKKyAgICA4NCwgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIAorICAgIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCAKKyAgICA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAKKyAgICAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIAorICAgIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIAorICAgIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgCisgICAgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCAKKyAgICA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCAyMDUsIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIAorICAgIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgCisgICAgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCAKKyAgICA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIAorICAgIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgCisgICAgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAKKyAgICAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIAorICAgIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgCisgICAgODksIDg0LCAxMjgsIDgzLCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCAKKyAgICA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCAKKyAgICA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIAorICAgIDgwLCAxMjgsIDgzLCA4MywgNzksIDEyOCwgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIAorICAgIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgCisgICAgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIDczLCAxMjgsIDgzLCA4MywgNzIsIDY5LCAxMjgsIDgzLCA4MywgNjksIDg4LCAKKyAgICAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODksIDY5LCA3OSwgODIsIAorICAgIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCAKKyAgICA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgCisgICAgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgCisgICAgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDc1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCAKKyAgICA4NSwgNjcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgCisgICAgNjcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgODMsIDgzLCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDgzLCA2NSwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIDgzLCAyMDAsIDgzLCA4MSwgODUsIAorICAgIDczLCA4MiwgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAxOTcsIDgzLCA4MSwgODUsIDY1LCAKKyAgICAyMTIsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDY4LCAxMjgsIAorICAgIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgODMsIDgwLCA4NSwgNzgsIDcxLCAKKyAgICAyMTEsIDgzLCA4MCwgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODMsIAorICAgIDgwLCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIDgzLCA2NSwgNzgsIDE5OSwgCisgICAgODMsIDgwLCA3OSwgODQsIDEyOCwgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgNzYsIDczLCA4NCwgODQsIDczLCAKKyAgICA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgCisgICAgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDY4LCA2OSwgODIsIDIxNywgODMsIDgwLCA3MywgNjcsIDY5LCAxMjgsIDgzLCAKKyAgICA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA4MywgODAsIDY5LCA4MywgNzcsIDczLCA3NiwgMjA3LCA4MywgODAsIAorICAgIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY3LCA3MywgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNjksIDY1LCA4MiwgCisgICAgMTI4LCA4MywgODAsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCAxMjgsIDgzLCAKKyAgICA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCAxMjgsIDgzLCA3OSwgODksIAorICAgIDEyOCwgODMsIDc5LCA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgCisgICAgODMsIDc2LCA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIAorICAgIDEyOCwgODMsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIDgzLCA3OSwgODUsIDc4LCA2NSwgCisgICAgODAsIDEyOCwgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDc5LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgCisgICAgNzgsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgMjExLCAKKyAgICA4MywgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgCisgICAgNzgsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDIxMiwgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCAKKyAgICA2OSwgODQsIDg5LCAxMjgsIDgzLCA3OSwgNjcsIDY3LCA2OSwgMjEwLCA4MywgNzksIDY1LCAxMjgsIDgzLCAyMDcsIDgzLCAKKyAgICA3OCwgNzksIDg3LCA3NywgNjUsIDc4LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDIwNiwgODMsIDc4LCA3OSwgODcsIAorICAgIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDc5LCA4NywgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgCisgICAgODMsIDc4LCA3OSwgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCAKKyAgICA2NSwgNzUsIDE5NywgODMsIDc4LCAxOTMsIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIAorICAgIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgCisgICAgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCAKKyAgICA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCisgICAgNzYsIDczLCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2NywgNjksIDEyOCwgODMsIDc2LCA2NSwgODYsIDc5LCAKKyAgICA3OCwgNzMsIDE5NSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgNjUsIDgzLCA3MiwgMTI4LCA4MywgNzYsIAorICAgIDY1LCA4MywgMjAwLCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDgzLCA3NSwgODcsIDY1LCAxMjgsIDgzLCA3NSwgCisgICAgODcsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDIwNCwgODMsIDc1LCA3NiwgNzMsIDgyLCA3OSwgMjA2LCA4MywgNzUsIDczLCAKKyAgICA3OCwgMTI4LCA4MywgNzUsIDczLCA2OSwgODIsIDEyOCwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIAorICAgIDg0LCA2OSwgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgCisgICAgNzksIDg1LCA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCAKKyAgICA3MywgODgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAKKyAgICA3OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIAorICAgIDY5LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgCisgICAgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCAKKyAgICA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgNjksIDEyOCwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIAorICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCAKKyAgICA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCAKKyAgICA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgCisgICAgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCAKKyAgICA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgCisgICAgODUsIDY3LCA3MiwgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgzLCAKKyAgICA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgODMsIAorICAgIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIDE5NywgCisgICAgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAKKyAgICAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDIxMCwgODMsIAorICAgIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgCisgICAgODMsIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgODMsIDczLCA3NSwgNzMsIAorICAgIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDczLCAxMjgsIDgzLCA3MywgNzEsIAorICAgIDc4LCA4MywgMTI4LCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgCisgICAgNjksIDIwNCwgODMsIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgCisgICAgNjgsIDY5LCA4NywgNjUsIDg5LCAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzMsIDY3LCAKKyAgICA3NSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCAKKyAgICA4OSwgODQsIDEyOCwgODMsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDEyOCwgODMsIAorICAgIDcyLCA4NywgNzksIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgCisgICAgNzIsIDg3LCA3MywgNzMsIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgODMsIDcyLCAKKyAgICA4NywgNjUsIDY1LCAxMjgsIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCAKKyAgICAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA4MywgNzIsIAorICAgIDg1LCA1MCwgMTI4LCA4MywgNzIsIDg1LCAxNzgsIDgzLCA3MiwgODUsIDEyOCwgODMsIDcyLCAyMTMsIDgzLCA3MiwgODQsIAorICAgIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3OCwgNjksIDEyOCwgCisgICAgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCAKKyAgICA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgCisgICAgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODMsIDc5LCAKKyAgICAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIDgzLCAyMTEsIDgzLCA3MiwgNzksIAorICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCAKKyAgICA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIAorICAgIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCAKKyAgICA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAyMTIsIDgzLCA3MiwgNzksIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDc5LCA3MSwgCisgICAgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDE5NywgODMsIDcyLCA3OSwgNjUsIDEyOCwgODMsIDcyLCA3OSwgCisgICAgMTI4LCA4MywgNzIsIDczLCA4OSwgODksIDY1LCA2NSwgNzYsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIAorICAgIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIDcyLCA3MywgMjEwLCA4MywgNzIsIAorICAgIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgODQsIDIwNywgODMsIDcyLCA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgCisgICAgNzIsIDczLCA3OCwgMTI4LCA4MywgNzIsIDczLCAyMDYsIDgzLCA3MiwgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzIsIDczLCAKKyAgICA3NywgMTkzLCA4MywgNzIsIDczLCA3NywgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgzLCA3MiwgNzMsIDczLCA3OCwgMTI4LCAKKyAgICA4MywgNzIsIDczLCA3MywgMTI4LCA4MywgNzIsIDczLCA3MCwgMjEyLCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3MywgMTI4LCA4MywgNzIsIDcyLCA2NSwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA4OCwgMTI4LCA4MywgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDg4LCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIAorICAgIDY5LCA4MywgNzIsIDczLCA3MSwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgCisgICAgNTAsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCAKKyAgICA4MCwgMTI4LCA4MywgNzIsIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIAorICAgIDIwNCwgODMsIDcyLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgCisgICAgMTI4LCA4MywgNzIsIDY5LCA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCAKKyAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIAorICAgIDcxLCA3OSwgNjUsIDg0LCAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgODksIDEyOCwgODMsIDcyLCA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCAKKyAgICA4MywgNzIsIDY1LCA4NiwgNzMsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCA4MiwgODAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgCisgICAgODMsIDcyLCA2NSwgODIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA1MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMTc4LCAKKyAgICA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIAorICAgIDgzLCA3MiwgNjUsIDc3LCA4MiwgNzksIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCAKKyAgICA4NCwgMTI4LCA4MywgNzIsIDY1LCA3NSwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIAorICAgIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgCisgICAgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgCisgICAgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDY1LCAyMTUsIDgzLCA3MSwgNjUsIDE5NCwgCisgICAgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCA4NSwgNzYsIDE5MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIAorICAgIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgMjExLCA4MywgNjksIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAKKyAgICAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDIxNywgODMsIAorICAgIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgCisgICAgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4NSwgODgsIAorICAgIDEyOCwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCA4MSwgODUsIDczLCA4MSwgCisgICAgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCA2OSwgODIsIDg2LCAKKyAgICA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIDIxMSwgODMsIAorICAgIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAKKyAgICAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIAorICAgIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgCisgICAgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCAKKyAgICA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgCisgICAgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCA3MywgNzgsIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCAKKyAgICA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIAorICAgIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgCisgICAgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIAorICAgIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCA3NywgCisgICAgMTkzLCA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgCisgICAgODMsIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA2OSwgNjksIDIwNiwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIDEyOCwgCisgICAgODMsIDY5LCA2NywgNzksIDc4LCA2OCwgMTI4LCA4MywgNjksIDY2LCA2NSwgODQsIDY2LCA2OSwgNzMsIDIxMiwgODMsIDY5LCAKKyAgICA2NSwgNzYsIDEyOCwgODMsIDY5LCA2NSwgNzEsIDg1LCA3NiwgMjA0LCA4MywgNjgsIDc5LCA3OCwgMTk5LCA4MywgNjgsIAorICAgIDEyOCwgODMsIDY3LCA4NywgNjUsIDEyOCwgODMsIDY3LCA4MiwgODUsIDgwLCA3NiwgNjksIDEyOCwgODMsIDY3LCA4MiwgCisgICAgNzMsIDgwLCA4NCwgMTI4LCA4MywgNjcsIDgyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgMjA2LCAKKyAgICA4MywgNjcsIDc5LCA4MiwgODAsIDczLCA4NSwgODMsIDEyOCwgODMsIDY3LCA3MywgODMsIDgzLCA3OSwgODIsIDgzLCAxMjgsIAorICAgIDgzLCA2NywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNjcsIDcyLCA4NywgMTkzLCA4MywgNjcsIDcyLCA4MiwgNzksIDY5LCA2OCwgCisgICAgNjksIDgyLCAxMjgsIDgzLCA2NywgNzIsIDc5LCA3OSwgNzYsIDEyOCwgODMsIDY3LCA3MiwgNzksIDc2LCA2NSwgODIsIAorICAgIDEyOCwgODMsIDY3LCA3MiwgNjksIDc3LCAxOTMsIDgzLCA2NywgNjUsIDc4LCA2OCwgNzMsIDY3LCA4NSwgODMsIDEyOCwgCisgICAgODMsIDY3LCA2NSwgNzgsIDY4LCA3MywgNjcsIDg1LCAyMTEsIDgzLCA2NywgNjUsIDIwNiwgODMsIDY3LCA2NSwgNzYsIDY5LCAKKyAgICA4MywgMTI4LCA4MywgNjYsIDg1LCAxOTQsIDgzLCA2NiwgODIsIDg1LCAyMDQsIDgzLCA2NSwgODksIDczLCA4MywgMjAxLCAKKyAgICA4MywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MywgNjUsIDg5LCAxMjgsIDgzLCA2NSwgODgsIDczLCA3NywgNjUsIAorICAgIDg0LCA2NSwgMTI4LCA4MywgNjUsIDg3LCA2NSwgNzgsIDEyOCwgODMsIDY1LCA4NywgMTI4LCA4MywgNjUsIDg1LCA3MywgCisgICAgNzYsIDEyOCwgODMsIDY1LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MywgNjUsIDg0LCA3NSwgNjUsIDY1LCA3OCwgNzUsIDg1LCAKKyAgICA4NSwgMTI4LCA4MywgNjUsIDg0LCA3NSwgNjUsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDgzLCA2NSwgNzUsIDEyOCwgODMsIAorICAgIDY1LCA4MiwgNzMsIDEyOCwgODMsIDY1LCA4MiwgMTkzLCA4MywgNjUsIDgyLCAxMjgsIDgzLCA2NSwgODAsIDY1LCAxMjgsIAorICAgIDgzLCA2NSwgNzgsIDg5LCA3OSwgNzksIDcxLCAxOTMsIDgzLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDE5MywgODMsIDY1LCA3OCwgCisgICAgODQsIDczLCA3MywgNzcsIDg1LCAxMjgsIDgzLCA2NSwgNzgsIDc4LCA4OSwgNjUsIDEyOCwgODMsIDY1LCA3OCwgNzEsIDY1LCAKKyAgICA1MCwgMTI4LCA4MywgNjUsIDc4LCA2NSwgNzIsIDEyOCwgODMsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDc3LCA4OSwgNzksIAorICAgIDIwMywgODMsIDY1LCA3NywgODAsIDczLCAxMjgsIDgzLCA2NSwgNzcsIDgwLCA3MiwgNjUsIDc5LCAxMjgsIDgzLCA2NSwgCisgICAgNzcsIDc1LCA2NSwgMTI4LCA4MywgNjUsIDc3LCA2OSwgNzUsIDcyLCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgMjAwLCAKKyAgICA4MywgNjUsIDc3LCA2NiwgNjUsIDEyOCwgODMsIDY1LCA3NywgMTI4LCA4MywgNjUsIDc2LCA4NCwgNzMsIDgyLCA2OSwgCisgICAgMTI4LCA4MywgNjUsIDc2LCA4NCwgNzMsIDc2LCA3NiwgNzksIDEyOCwgODMsIDY1LCA3NiwgODQsIDEyOCwgODMsIDY1LCAKKyAgICA3NiwgNzYsIDY1LCA3NiwgNzYsIDY1LCA3MiwgNzksIDIxMywgODMsIDY1LCA3NiwgNzYsIDE5MywgODMsIDY1LCA3NiwgNjUsIAorICAgIDIwNSwgODMsIDY1LCA3NiwgNjUsIDEyOCwgODMsIDY1LCA3NiwgMTI4LCA4MywgNjUsIDc1LCA3OSwgODQsIDEyOCwgODMsIAorICAgIDY1LCA3NCwgNjgsIDY1LCA3MiwgMTI4LCA4MywgNjUsIDczLCA3NiwgNjYsIDc5LCA2NSwgODQsIDEyOCwgODMsIDY1LCA3MywgCisgICAgNzYsIDEyOCwgODMsIDY1LCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODMsIDY1LCA3MSwgNzMsIDg0LCA4NCwgNjUsIDgyLCAKKyAgICA3MywgODUsIDgzLCAxMjgsIDgzLCA2NSwgNzEsIDY1LCAxMjgsIDgzLCA2NSwgNzEsIDEyOCwgODMsIDY1LCAxOTksIDgzLCAKKyAgICA2NSwgNzAsIDcyLCA2NSwgMTI4LCA4MywgNjUsIDY4LCA3MiwgNjksIDEyOCwgODMsIDY1LCA2OCwgNjksIDEyOCwgODMsIAorICAgIDY1LCA2OCwgMTI4LCA4MywgNjUsIDE5NiwgODMsIDY1LCA2NywgODIsIDczLCA3MCwgNzMsIDY3LCA3MywgNjUsIDIwNCwgCisgICAgODMsIDY1LCA2NSwgNzMsIDEyOCwgODMsIDY1LCA2NSwgNjgsIDcyLCA4NSwgMTI4LCA4MywgNjUsIDQ1LCA3MywgMTI4LCAKKyAgICA4MywgNDgsIDUyLCA1NCwgMTI4LCA4MywgNDgsIDUyLCA1MywgMTI4LCA4MywgNDgsIDUyLCA1MiwgMTI4LCA4MywgNDgsIAorICAgIDUyLCA1MSwgMTI4LCA4MywgNDgsIDUyLCA1MCwgMTI4LCA4MywgNDgsIDUyLCA0OSwgMTI4LCA4MywgNDgsIDUyLCA0OCwgCisgICAgMTI4LCA4MywgNDgsIDUxLCA1NywgMTI4LCA4MywgNDgsIDUxLCA1NiwgMTI4LCA4MywgNDgsIDUxLCA1NSwgMTI4LCA4MywgCisgICAgNDgsIDUxLCA1NCwgMTI4LCA4MywgNDgsIDUxLCA1MywgNjUsIDEyOCwgODMsIDQ4LCA1MSwgNTMsIDEyOCwgODMsIDQ4LCAKKyAgICA1MSwgNTIsIDEyOCwgODMsIDQ4LCA1MSwgNTEsIDEyOCwgODMsIDQ4LCA1MSwgNTAsIDEyOCwgODMsIDQ4LCA1MSwgNDksIAorICAgIDEyOCwgODMsIDQ4LCA1MSwgNDgsIDEyOCwgODMsIDQ4LCA1MCwgNTcsIDEyOCwgODMsIDQ4LCA1MCwgNTYsIDEyOCwgODMsIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgODMsIDQ4LCA1MCwgNTQsIDY2LCAxMjgsIDgzLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA4MywgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA4MywgNDgsIDUwLCA1MywgMTI4LCA4MywgNDgsIDUwLCA1MiwgMTI4LCA4MywgNDgsIDUwLCAKKyAgICA1MSwgMTI4LCA4MywgNDgsIDUwLCA1MCwgMTI4LCA4MywgNDgsIDUwLCA0OSwgMTI4LCA4MywgNDgsIDUwLCA0OCwgMTI4LCAKKyAgICA4MywgNDgsIDQ5LCA1NywgMTI4LCA4MywgNDgsIDQ5LCA1NiwgMTI4LCA4MywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgODMsIAorICAgIDQ4LCA0OSwgNTUsIDEyOCwgODMsIDQ4LCA0OSwgNTQsIDEyOCwgODMsIDQ4LCA0OSwgNTMsIDEyOCwgODMsIDQ4LCA0OSwgCisgICAgNTIsIDY2LCAxMjgsIDgzLCA0OCwgNDksIDUyLCA2NSwgMTI4LCA4MywgNDgsIDQ5LCA1MiwgMTI4LCA4MywgNDgsIDQ5LCAKKyAgICA1MSwgMTI4LCA4MywgNDgsIDQ5LCA1MCwgMTI4LCA4MywgNDgsIDQ5LCA0OSwgMTI4LCA4MywgNDgsIDQ5LCA0OCwgMTI4LCAKKyAgICA4MywgNDgsIDQ4LCA1NywgMTI4LCA4MywgNDgsIDQ4LCA1NiwgMTI4LCA4MywgNDgsIDQ4LCA1NSwgMTI4LCA4MywgNDgsIAorICAgIDQ4LCA1NCwgNjUsIDEyOCwgODMsIDQ4LCA0OCwgNTQsIDEyOCwgODMsIDQ4LCA0OCwgNTMsIDEyOCwgODMsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgODMsIDQ4LCA0OCwgNTEsIDEyOCwgODMsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgzLCA0OCwgNDgsIDUwLCAKKyAgICAxMjgsIDgzLCA0OCwgNDgsIDQ5LCAxMjgsIDgzLCA0NSwgODcsIDEyOCwgODMsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIAorICAgIDE5NiwgODIsIDg5LCA4OSwgMTI4LCA4MiwgODksIDg4LCAxMjgsIDgyLCA4OSwgODQsIDEyOCwgODIsIDg5LCA4MiwgODgsIAorICAgIDEyOCwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODksIDgwLCAxMjgsIDgyLCA4OSwgNjUsIDEyOCwgODIsIDg3LCA3OSwgNzksIAorICAgIDEyOCwgODIsIDg3LCA3OSwgMTI4LCA4MiwgODcsIDczLCA3MywgMTI4LCA4MiwgODcsIDczLCAxMjgsIDgyLCA4NywgNjksIAorICAgIDY5LCAxMjgsIDgyLCA4NywgNjksIDEyOCwgODIsIDg3LCA2NSwgNzIsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDgyLCA4NywgNjUsIDEyOCwgODIsIDg1LCA4OCwgMTI4LCA4MiwgODUsIDg1LCA2NiwgODUsIDgyLCA4NSwgMTI4LCA4MiwgCisgICAgODUsIDg0LCAxMjgsIDgyLCA4NSwgODMsIDczLCAxMjgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDgyLCA4NSwgODIsIDEyOCwgCisgICAgODIsIDg1LCA4MCwgNzMsIDczLCAxMjgsIDgyLCA4NSwgODAsIDY5LCAxOTcsIDgyLCA4NSwgODAsIDEyOCwgODIsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgODIsIDg1LCA3OSwgODAsIDEyOCwgODIsIDg1LCA3OSwgMTI4LCA4MiwgODUsIDc4LCA3OSwgODUsIAorICAgIDg0LCAxMjgsIDgyLCA4NSwgNzgsIDEyOCwgODIsIDg1LCA3NywgMjAxLCA4MiwgODUsIDc3LCA2NSwgMjAxLCA4MiwgODUsIAorICAgIDc3LCAxMjgsIDgyLCA4NSwgMjA1LCA4MiwgODUsIDc2LCA2OSwgNDUsIDY4LCA2OSwgNzYsIDY1LCA4OSwgNjksIDY4LCAKKyAgICAxMjgsIDgyLCA4NSwgNzYsIDY5LCAxMjgsIDgyLCA4NSwgNzUsIDc1LCA2NSwgNzUsIDcyLCA2NSwgMTI4LCA4MiwgODUsIAorICAgIDczLCA4MywgMTI4LCA4MiwgODUsIDE5NCwgODIsIDg1LCA2NSwgMTI4LCA4MiwgODQsIDcyLCA2NSwgNzgsIDE5OSwgODIsIAorICAgIDg0LCA2NSwgNzEsIDgzLCAxMjgsIDgyLCA4NCwgNjUsIDcxLCAyMTEsIDgyLCA4MiwgODksIDg4LCAxMjgsIDgyLCA4MiwgCisgICAgODksIDg0LCAxMjgsIDgyLCA4MiwgODksIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODIsIDg5LCAKKyAgICA4MCwgMTI4LCA4MiwgODIsIDg5LCAxMjgsIDgyLCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4MiwgODUsIDg0LCAxMjgsIDgyLCAKKyAgICA4MiwgODUsIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg1LCA4MiwgMTI4LCA4MiwgODIsIDg1LCA4MCwgMTI4LCA4MiwgODIsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODIsIDgyLCA4NSwgNzksIDEyOCwgODIsIDgyLCA4NSwgMTI4LCA4MiwgODIsIDc5LCA4OCwgCisgICAgMTI4LCA4MiwgODIsIDc5LCA4NCwgMTI4LCA4MiwgODIsIDc5LCA4MCwgMTI4LCA4MiwgODIsIDc5LCAxMjgsIDgyLCA4MiwgCisgICAgNjksIDg4LCAxMjgsIDgyLCA4MiwgNjksIDg0LCAxMjgsIDgyLCA4MiwgNjksIDgwLCAxMjgsIDgyLCA4MiwgNjksIDcyLCAKKyAgICAxMjgsIDgyLCA4MiwgNjksIDIwMCwgODIsIDgyLCA2OSwgMTI4LCA4MiwgODIsIDY1LCA4OCwgMTI4LCA4MiwgODIsIDY1LCAKKyAgICAxMjgsIDgyLCA3OSwgODUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODQsIDczLCA4MCwgODAsIAorICAgIDY5LCAxOTYsIDgyLCA3OSwgODQsIDg1LCA3OCwgNjgsIDY1LCAxMjgsIDgyLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgCisgICAgODIsIDc5LCA4MywgNzIsIDEyOCwgODIsIDc5LCA4MywgNjksIDg0LCA4NCwgNjksIDEyOCwgODIsIDc5LCA3OSwgODQsIAorICAgIDEyOCwgODIsIDc5LCA3OSwgNzUsIDEyOCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODIsIDc5LCA3OSwgMTI4LCA4MiwgNzksIAorICAgIDc3LCA2NSwgMjA2LCA4MiwgNzksIDE5NiwgODIsIDc5LCA2NywgMTI4LCA4MiwgNzksIDY2LCA2NSwgODQsIDEyOCwgODIsIAorICAgIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgODIsIDc4LCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc0LCA2OSwgMjExLCA4MiwgCisgICAgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDczLCA4NCwgODUsIDY1LCAKKyAgICA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgNzMsIDg0LCA4MywgNzMsIDEyOCwgODIsIAorICAgIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCA3MywgODIsIDY1LCAxMjgsIDgyLCA3MywgCisgICAgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAKKyAgICAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzMsIDEyOCwgODIsIDczLCAKKyAgICA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCAKKyAgICA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIAorICAgIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCAKKyAgICA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgODMsIAorICAgIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzIsIDczLCA2OSwgCisgICAgODUsIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIAorICAgIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCAKKyAgICA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgCisgICAgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCisgICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCAKKyAgICA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIAorICAgIDc2LCAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCA4MiwgNzMsIDY3LCA2OSwgCisgICAgMTI4LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgCisgICAgMjA3LCA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCAKKyAgICA3OCwgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgCisgICAgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCAKKyAgICA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCA3MCwgNzYsIAorICAgIDY5LCAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCA4MCwgNzMsIDc4LCA4NSwgCisgICAgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCAKKyAgICA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCAKKyAgICA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgCisgICAgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCA4MCwgNjUsIDEyOCwgODIsIDY5LCA4MCwgMTkzLCA4MiwgCisgICAgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc3LCA4NSwgMTI4LCAKKyAgICA4MiwgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIAorICAgIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCAKKyAgICA2OSwgNzEsIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIAorICAgIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNjcsIDg5LCAKKyAgICA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCA4NCwgNzMsIAorICAgIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4MiwgCisgICAgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCAKKyAgICA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIAorICAgIDgyLCA2OSwgNjcsIDc5LCA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NSwgCisgICAgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCA2OCwgMjA3LCA4MiwgNjgsIDY5LCAKKyAgICAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCA2NSwgODksIDY1LCA3OCwgNzgsIAorICAgIDY1LCAxMjgsIDgyLCA2NSwgODksIDEyOCwgODIsIDY1LCA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgCisgICAgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgCisgICAgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIDE5NywgODIsIDY1LCA3OCwgCisgICAgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIDY2LCA2NSwgODQsIDEyOCwgCisgICAgODIsIDY1LCA3NywgMTI4LCA4MiwgNjUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDczLCA4MywgNjksIAorICAgIDE5NiwgODIsIDY1LCA3MywgNzgsIDEyOCwgODIsIDY1LCA3MywgMjA2LCA4MiwgNjUsIDczLCA2OCwgMjA3LCA4MiwgNjUsIAorICAgIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgCisgICAgMjAwLCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCAKKyAgICA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCAKKyAgICA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDY1LCAxMjgsIDgyLCA2NSwgNTEsIDEyOCwgODIsIDY1LCAKKyAgICA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCA1NSwgMTI4LCAKKyAgICA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCA4MiwgNDgsIAorICAgIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIDUwLCA0OCwgCisgICAgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgMTI4LCA4MiwgCisgICAgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgODIsIDQ4LCAKKyAgICA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCA0OSwgNDksIAorICAgIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIDgyLCA0OCwgCisgICAgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgNDgsIDQ4LCAKKyAgICA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIAorICAgIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIDg4LCAxMjgsIAorICAgIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIDgyLCAxMjgsIAorICAgIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIDY5LCAxMjgsIAorICAgIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIDEyOCwgODEsIAorICAgIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIDg2LCAxMjgsIAorICAgIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgODksIDY1LCAKKyAgICAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODEsIAorICAgIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIDc1LCAxMjgsIAorICAgIDgxLCA4NSwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCA3OCwgNjcsIDg1LCAKKyAgICA3OCwgODgsIDEyOCwgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIDc2LCA3NiwgCisgICAgMTI4LCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAKKyAgICA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDEyOCwgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgCisgICAgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAKKyAgICA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgCisgICAgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgNzMsIDg0LCAyMTcsIDgxLCAKKyAgICA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgODQsIDEyOCwgODEsIAorICAgIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIDg1LCA2NSwgMTk2LCA4MSwgCisgICAgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCA3OSwgODQsIDEyOCwgODEsIAorICAgIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCA4MSwgNzksIDc5LCAxMjgsIAorICAgIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAxMjgsIDgxLCA3OSwgMTI4LCAKKyAgICA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgODEsIDczLCA4NCwgMTI4LCAKKyAgICA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIAorICAgIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIAorICAgIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgCisgICAgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgCisgICAgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgCisgICAgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCAKKyAgICA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIAorICAgIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgCisgICAgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgCisgICAgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCAKKyAgICA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA0OSwgMTI4LCAyMDksIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCAKKyAgICA4OSwgMTI4LCA4MCwgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCAKKyAgICA3MywgMTI4LCA4MCwgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCAKKyAgICA2NSwgNjUsIDEyOCwgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODQsIDEyOCwgCisgICAgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODAsIAorICAgIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCA4MCwgODUsIAorICAgIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgCisgICAgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA2OSwgMTI4LCAKKyAgICA4MCwgODUsIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCA2NSwgNzIsIAorICAgIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgCisgICAgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIAorICAgIDY5LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgCisgICAgNzMsIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIAorICAgIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCAKKyAgICA3OCwgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIAorICAgIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgCisgICAgNzksIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIAorICAgIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzksIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCAKKyAgICA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIAorICAgIDg2LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgCisgICAgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc3LCA2OSwgMTI4LCAKKyAgICA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIAorICAgIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgNjksIAorICAgIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgCisgICAgNzMsIDc4LCAxOTksIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAKKyAgICA2OSwgMjExLCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgCisgICAgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCAKKyAgICA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIAorICAgIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIAorICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgCisgICAgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgODAsIAorICAgIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCA2OSwgCisgICAgODIsIDEyOCwgODAsIDc5LCA4NSwgNzgsIDE5NiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCAKKyAgICA4NSwgMjExLCA4MCwgNzksIDgwLCAxMjgsIDgwLCA3OSwgMjA4LCA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCAKKyAgICA3OSwgMTI4LCA4MCwgNzksIDc2LCAyMDEsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIAorICAgIDczLCA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzksIDEyOCwgCisgICAgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA4MCwgNzksIDczLCAKKyAgICA3OCwgODQsIDEyOCwgODAsIDc5LCA3MywgNzgsIDIxMiwgODAsIDc5LCA2OSwgODQsIDgyLCAyMTcsIDgwLCA3OSwgNjksIAorICAgIDg0LCA3MywgMTk1LCA4MCwgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDY1LCAxMjgsIDgwLCA3OSwgCisgICAgMTI4LCA4MCwgMjA3LCA4MCwgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODAsIDc2LCA4NSwgODQsIDc5LCAKKyAgICAxMjgsIDgwLCA3NiwgODUsIDgzLCA0NSwgNzcsIDczLCA3OCwgODUsIDIxMSwgODAsIDc2LCA4NSwgODMsIDEyOCwgODAsIAorICAgIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgCisgICAgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIDcyLCA4MiwgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgODAsIAorICAgIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgNjUsIDc1LCAxMjgsIDgwLCA3NiwgCisgICAgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCA2OCwgNjksIDIxMCwgODAsIDc2LCAKKyAgICA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIDY3LCA2NSwgODQsIDc5LCAxMjgsIAorICAgIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCA3NSwgCisgICAgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgMTI4LCA4MCwgNzMsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgCisgICAgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIDEyOCwgCisgICAgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCA4MCwgNzMsIDc1LCAKKyAgICA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIDczLCA2OSwgODgsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgCisgICAgODUsIDgwLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCAKKyAgICA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAorICAgIDgwLCA3MywgNjksIDg1LCAyMDgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCAxMjgsIDgwLCA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIDc5LCA4MiwgODUsIAorICAgIDEyOCwgODAsIDczLCA2NSwgODMsIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgMjAxLCA4MCwgNzIsIAorICAgIDg3LCA2NSwgMTI4LCA4MCwgNzIsIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAyMTAsIDgwLCA3MiwgCisgICAgODUsIDc4LCA3MSwgMTI4LCA4MCwgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCAKKyAgICA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCAKKyAgICA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3MywgODAsIAorICAgIDgwLCA3MywgNzgsIDE5NywgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MiwgNzMsIAorICAgIDY5LCA4NSwgODAsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKKyAgICA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgCisgICAgMTI4LCA4MCwgNzIsIDIwMSwgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MiwgCisgICAgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCAKKyAgICA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIAorICAgIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgCisgICAgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NCwgCisgICAgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIAorICAgIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgNzYsIDc2LCA2OSwgCisgICAgMTk2LCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgCisgICAgNjksIDgzLCA2OSwgODQsIDE5MywgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgMjA3LCA4MCwgNjksIDgyLCAKKyAgICA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIAorICAgIDgyLCA4MywgNzksIDIwNiwgODAsIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgCisgICAgNzMsIDY3LCA4NSwgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIAorICAgIDY1LCAyMTAsIDgwLCA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgCisgICAgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCAKKyAgICA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIAorICAgIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgCisgICAgNjksIDgyLCA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCAKKyAgICA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4MCwgNjksIAorICAgIDc4LCA4NCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAxMjgsIDgwLCA2OSwgNzgsIDc4LCAKKyAgICAyMTcsIDgwLCA2OSwgNzgsIDczLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIAorICAgIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgNzYsIDEyOCwgCisgICAgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAyMDYsIDgwLCAKKyAgICA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDIwMCwgODAsIAorICAgIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAxMjgsIAorICAgIDgwLCA2OSwgNjksIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgCisgICAgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAKKyAgICAyMDQsIDgwLCA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCA2NywgMTk3LCA4MCwgNjgsIDEyOCwgODAsIDY3LCAKKyAgICAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDg5LCA2OSwgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MCwgNjUsIDg5LCAxMjgsIDgwLCA2NSwgODgsIDEyOCwgODAsIDY1LCA4NywgCisgICAgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MCwgNjUsIDg0LCAKKyAgICA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIAorICAgIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA4NCwgCisgICAgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCAKKyAgICA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgCisgICAgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIAorICAgIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA2OSwgODEsIDEyOCwgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgCisgICAgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIAorICAgIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgCisgICAgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCAKKyAgICA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCAKKyAgICA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIAorICAgIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCAKKyAgICA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIAorICAgIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgCisgICAgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgCisgICAgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCAKKyAgICA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAyMDgsIDgwLCAKKyAgICA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNzMsIDc1LCA4NSwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3OCwgNzEsIDcxLCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIAorICAgIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgNzEsIDgyLCA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgCisgICAgNjUsIDg5LCA2NSwgODIsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCAKKyAgICA2NSwgODQsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIAorICAgIDgwLCA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY1LCA2OSwgNzYsIDY1LCAKKyAgICA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgNzUsIDY1LCA3MiwgCisgICAgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODAsIDcyLCA4OSwgNzYsIDczLCAKKyAgICA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIAorICAgIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjgsIDY1LCAKKyAgICAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAxMjgsIDgwLCA2NSwgNzYsIDg1LCA4NCwgNjUsIDEyOCwgODAsIAorICAgIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDIwNSwgODAsIDY1LCA3NiwgNzYsIDY1LCA4NywgCisgICAgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIDgwLCAKKyAgICA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgCisgICAgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzMsIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzMsIAorICAgIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDcyLCA3NiwgNjUsIDg2LCAyMDEsIDgwLCA2NSwgNjgsIDc3LCAxOTMsIDgwLCA2NSwgCisgICAgNjgsIDE5MywgODAsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY1LCAKKyAgICA4NCwgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCA2NSwgNjUsIDczLCAxMjgsIAorICAgIDgwLCA2NSwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNTAsIDEyOCwgCisgICAgODAsIDQ4LCA0OSwgNDksIDEyOCwgODAsIDQ4LCA0OSwgNDgsIDEyOCwgODAsIDQ4LCA0OCwgNTcsIDEyOCwgODAsIDQ4LCAKKyAgICA0OCwgNTYsIDEyOCwgODAsIDQ4LCA0OCwgNTUsIDEyOCwgODAsIDQ4LCA0OCwgNTQsIDEyOCwgODAsIDQ4LCA0OCwgNTMsIAorICAgIDEyOCwgODAsIDQ4LCA0OCwgNTIsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDUxLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUwLCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgCisgICAgODksIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIDE5MywgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCAKKyAgICA2NSwgMTI4LCA3OSwgODgsIDczLCAxOTMsIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCAKKyAgICA3OSwgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA3OSwgNzgsIDE5OSwgNzksIAorICAgIDg2LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCA4NiwgCisgICAgNjksIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCAKKyAgICA3OSwgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgMTI4LCA3OSwgODYsIDY1LCAyMDQsIDc5LCA4NiwgMTI4LCA3OSwgODUsIAorICAgIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgCisgICAgMjEwLCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgCisgICAgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCAKKyAgICA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgNzksIDgyLCA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAKKyAgICAxOTcsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgCisgICAgMjEyLCA3OSwgODIsIDc1LCA3MiwgNzksIDIwNiwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKKyAgICA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIAorICAgIDEyOCwgNzksIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDc5LCA4MCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIAorICAgIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAKKyAgICAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgNzksIAorICAgIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAKKyAgICAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNjcsIAorICAgIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDgwLCA2OSwgMjA2LCA3OSwgCisgICAgNzksIDkwLCA2OSwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCAKKyAgICA3OSwgNzcsIDg1LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCA4NSwgCisgICAgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCA3OSwgCisgICAgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgODcsIDY1LCAyMTcsIDc5LCA3OCwgNjksIDQ1LCAKKyAgICA3NiwgNzMsIDc4LCAxOTcsIDc5LCA3OCwgNjUsIDgwLCAxMjgsIDc5LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAyMDYsIAorICAgIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc5LCA3NywgNzMsIDY3LCA4MiwgNzksIDIwNiwgNzksIDc3LCA2OSwgCisgICAgNzEsIDY1LCAxMjgsIDc5LCA3NywgNjksIDcxLCAxOTMsIDc5LCA3NywgNjUsIDc2LCA3OSwgNzgsIDEyOCwgNzksIDc3LCAKKyAgICAxMjgsIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDc2LCA2OCwgMTI4LCAKKyAgICA3OSwgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCA3OSwgNzQsIAorICAgIDczLCA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIDc2LCAxMjgsIDc5LCA3MiwgCisgICAgNzcsIDEyOCwgNzksIDcyLCAyMDUsIDc5LCA3MiwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDc1LCAxMjgsIDc5LCA3MSwgCisgICAgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgMTk2LCA3OSwgCisgICAgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNjcsIDIxMCwgNzksIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCAKKyAgICA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA3OSwgNzYsIAorICAgIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNjYsIDc2LCA3MywgCisgICAgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc5LCAKKyAgICA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCA2NSwgODksIDEyOCwgNzksIDY1LCA3NSwgMTI4LCAKKyAgICA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCAxOTMsIDc5LCA0OCwgNTMsIDQ5LCAxMjgsIAorICAgIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDEyOCwgCisgICAgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgNzksIDQ4LCA1MiwgNTUsIDEyOCwgNzksIDQ4LCAKKyAgICA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCA1MiwgNTIsIDEyOCwgNzksIDQ4LCA1MiwgNTEsIAorICAgIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIDEyOCwgNzksIDQ4LCA1MiwgNDgsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIDQ4LCA1MSwgNTUsIDEyOCwgNzksIDQ4LCA1MSwgCisgICAgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjYsIDEyOCwgNzksIDQ4LCAKKyAgICA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCA0OCwgNTEsIDUzLCAxMjgsIDc5LCA0OCwgNTEsIAorICAgIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgMTI4LCA3OSwgNDgsIDUxLCA1MCwgCisgICAgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDEyOCwgCisgICAgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAxMjgsIDc5LCA0OCwgNTAsIDU2LCAxMjgsIDc5LCAKKyAgICA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDEyOCwgNzksIDQ4LCA1MCwgCisgICAgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgNDksIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDY1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgMTI4LCAKKyAgICA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NCwgMTI4LCA3OSwgNDgsIAorICAgIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIDQ5LCA1MSwgMTI4LCA3OSwgNDgsIDQ5LCA1MCwgCisgICAgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjcsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgMTI4LCA3OSwgNDgsIDQ4LCA1NywgMTI4LCAKKyAgICA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNzAsIDEyOCwgNzksIAorICAgIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjcsIDEyOCwgCisgICAgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDEyOCwgNzksIDQ4LCA0OCwgNTIsIDEyOCwgNzksIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgNzksIDQ1LCA3MywgMTI4LCA3OSwgNDUsIDY5LCAKKyAgICAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIDg5LCAxMjgsIDc4LCA5MCwgODUsIAorICAgIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgCisgICAgMTI4LCA3OCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgCisgICAgOTAsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA4NCwgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIAorICAgIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIAorICAgIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgCisgICAgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgCisgICAgODUsIDg0LCAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIDg1LCAKKyAgICA3OSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgMTI4LCA3OCwgODksIDc5LCA4OCwgMTI4LCAKKyAgICA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIAorICAgIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIAorICAgIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMSwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCAKKyAgICA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIAorICAgIDIwMSwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIAorICAgIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIAorICAgIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIAorICAgIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIAorICAgIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODQsIAorICAgIDczLCA3NiwgNzYsIDg1LCAxMjgsIDc4LCA4NSwgODQsIDEyOCwgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgCisgICAgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgCisgICAgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAKKyAgICAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIAorICAgIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgCisgICAgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCAKKyAgICA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NSwgODQsIAorICAgIDY1LCAxMjgsIDc4LCA4NSwgNjksIDc4LCA3MSwgMTI4LCA3OCwgODUsIDY5LCAxMjgsIDc4LCA4NSwgNjYsIDczLCA2NSwgCisgICAgMjA2LCA3OCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDY1LCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCA4NSwgCisgICAgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU0LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUxLCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgODUsIAorICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA0OSwgMTI4LCAKKyAgICA3OCwgODQsIDg1LCA4NSwgMTI4LCA3OCwgODQsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgMTI4LCA3OCwgODIsIAorICAgIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4OSwgCisgICAgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCA4OCwgMTI4LCA3OCwgCisgICAgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDEyOCwgNzgsIDgyLCAKKyAgICA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIDc5LCA4MCwgMTI4LCAKKyAgICA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIDc4LCA4MiwgNjksIAorICAgIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgODQsIDEyOCwgNzgsIAorICAgIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgODgsIDEyOCwgNzgsIAorICAgIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCisgICAgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCAKKyAgICAxOTYsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDc4LCA3OSwgODQsIDE5NywgNzgsIDc5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCAKKyAgICA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgMTI4LCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIAorICAgIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAKKyAgICAyMDQsIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAKKyAgICAxMjgsIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIAorICAgIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgCisgICAgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIAorICAgIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDc5LCAxMjgsIAorICAgIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgCisgICAgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCAKKyAgICA3OCwgNzYsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgCisgICAgNTMsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIAorICAgIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgCisgICAgNzYsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgCisgICAgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzQsIDg5LCA4OCwgMTI4LCA3OCwgCisgICAgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDEyOCwgNzgsIDc0LCAKKyAgICA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIAorICAgIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgCisgICAgNzksIDg4LCAxMjgsIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAKKyAgICAxMjgsIDc4LCA3NCwgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCAKKyAgICA3MywgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCA3MywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgNzQsIDY5LCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgNzYsIDczLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCAKKyAgICA3NywgMTI4LCA3OCwgNzQsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIDgzLCA2NSwgNzEsIDEyOCwgNzgsIDczLCAKKyAgICA4MiwgODUsIDcxLCA4NSwgMTI4LCA3OCwgNzMsIDgwLCAxMjgsIDc4LCA3MywgNzgsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIAorICAgIDc4LCA2OSwgODQsIDg5LCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgMjE3LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgCisgICAgNzgsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDIwNiwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCAKKyAgICA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCAKKyAgICA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIAorICAgIDczLCA3MywgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgCisgICAgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCAKKyAgICA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgCisgICAgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKKyAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgCisgICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIAorICAgIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDczLCA2NiwgMTI4LCA3OCwgNzMsIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIAorICAgIDcyLCA3NCwgNjUsIDEyOCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIAorICAgIDcxLCA4NiwgNjksIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3OCwgCisgICAgNzEsIDg1LCA3OSwgMTI4LCA3OCwgNzEsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAKKyAgICAyMTMsIDc4LCA3MSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAxMjgsIDc4LCAKKyAgICA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCA3OCwgNzEsIDIwNywgNzgsIDcxLCA3NSwgODcsIAorICAgIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDEyOCwgNzgsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MSwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzMsIDEyOCwgNzgsIDcxLCA3MSwgNjksIAorICAgIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIAorICAgIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgCisgICAgNjksIDY1LCA2OCwgNjUsIDc2LCAxMjgsIDc4LCA3MSwgNjksIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCAKKyAgICA2NSwgODQsIDEyOCwgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCAKKyAgICA3OCwgNzEsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIDc4LCA3MCwgMTI4LCAKKyAgICA3OCwgNjksIDg4LCAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIAorICAgIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgCisgICAgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCAKKyAgICA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDgwLCAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIAorICAgIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgNzksIDEyOCwgNzgsIDY5LCA3OCwgMTI4LCA3OCwgNjksIDczLCA4NCwgCisgICAgNzIsIDY5LCAyMTAsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIAorICAgIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIDY4LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgCisgICAgNzgsIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgyLCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCAKKyAgICA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc2LCAxOTcsIDc4LCA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDg0LCAxMjgsIAorICAgIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNjgsIDczLCAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCA2OCwgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIAorICAgIDEyOCwgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIAorICAgIDc4LCA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgCisgICAgNzgsIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCAKKyAgICA3OSwgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCAKKyAgICA3OCwgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIAorICAgIDc4LCA2NiwgNzMsIDEyOCwgNzgsIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgNzgsIDY2LCA2NSwgCisgICAgODAsIDEyOCwgNzgsIDY2LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCAKKyAgICAxMjgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIAorICAgIDEyOCwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIAorICAgIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgCisgICAgMjE1LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgNzgsIDg0LCAKKyAgICA3MiwgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA3NywgNjksIAorICAgIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCA2NSwgNzMsIAorICAgIDgyLCAxOTMsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCA2NSwgCisgICAgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjYsIDc2LCA2NSwgCisgICAgMTI4LCA3OCwgNjUsIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3NSwgODMsIDczLCAKKyAgICA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCA2NSwgMTI4LCA3OCwgNjUsIAorICAgIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIAorICAgIDUyLCA0OCwgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgCisgICAgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNTYsIDEyOCwgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAKKyAgICAxMjgsIDc4LCA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCAKKyAgICA0OCwgNTAsIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgCisgICAgNTYsIDEyOCwgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgCisgICAgNzgsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIAorICAgIDEyOCwgNzgsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIAorICAgIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgCisgICAgNzcsIDg5LCA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCAKKyAgICA4OSwgNjUsIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAKKyAgICAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCAKKyAgICA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgCisgICAgODYsIDEyOCwgNzcsIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCAKKyAgICA2NSwgNzgsIDEyOCwgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODQsIDEyOCwgNzcsIAorICAgIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgCisgICAgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAKKyAgICAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIAorICAgIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgCisgICAgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgCisgICAgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCAKKyAgICA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIAorICAgIDY5LCAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgCisgICAgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIAorICAgIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgCisgICAgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgMTk5LCA3NywgODUsIDY5LCAKKyAgICAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCA3OCwgMTI4LCAKKyAgICA3NywgODUsIDQ1LCA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIAorICAgIDY1LCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIAorICAgIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgCisgICAgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAKKyAgICAxMjgsIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIAorICAgIDY3LCA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgCisgICAgNzksIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCAKKyAgICA3NywgNzksIDc5LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MiwgMTI4LCA3NywgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIAorICAgIDc4LCA3OSwgODMsIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgCisgICAgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCAKKyAgICA3NywgNzksIDc4LCA3OSwgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgCisgICAgNjUsIDIxMCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgCisgICAgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCAKKyAgICA3NiwgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCAKKyAgICA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgCisgICAgNzcsIDc2LCAxMjgsIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDIxMiwgNzcsIDczLCA4MywgCisgICAgODIsIDY1LCAxMjgsIDc3LCA3MywgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIAorICAgIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgNzcsIAorICAgIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgCisgICAgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDczLCAKKyAgICA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIAorICAgIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgCisgICAgMTI4LCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCAKKyAgICA3NSwgODIsIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCAKKyAgICA3MywgNjksIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIAorICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCAKKyAgICA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIAorICAgIDg1LCA3NywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCAKKyAgICA4NSwgNjcsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIAorICAgIDczLCA2OSwgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgNzMsIDY4LCA3NiwgCisgICAgNzMsIDc4LCAxOTcsIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA3NywgNzMsIDY4LCAKKyAgICA2OCwgNzYsIDE5NywgNzcsIDczLCAxOTYsIDc3LCA3MywgNjcsIDgyLCAyMDcsIDc3LCA3MywgMTI4LCA3NywgNzIsIDkwLCAKKyAgICAxMjgsIDc3LCA3MiwgMTI4LCA3NywgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgMTI4LCA3NywgNzEsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCA3NywgNzEsIDg1LCAxMjgsIAorICAgIDc3LCA3MSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgCisgICAgNzksIDEyOCwgNzcsIDcxLCAyMDcsIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDczLCA2OSwgMTI4LCA3NywgCisgICAgNzEsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDg1LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3MywgMTI4LCAKKyAgICA3NywgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDEyOCwgNzcsIAorICAgIDcxLCA2NSwgODgsIDEyOCwgNzcsIDcxLCA2NSwgODQsIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgCisgICAgMTI4LCA3NywgNzEsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NCwgCisgICAgODIsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCAKKyAgICA2OSwgMjExLCA3NywgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgCisgICAgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCAKKyAgICA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIAorICAgIDEyOCwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgCisgICAgNzMsIDEyOCwgNzcsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIDc3LCAKKyAgICA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgNjksIDIwNiwgNzcsIDY5LCA3NywgNjYsIAorICAgIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgCisgICAgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCAKKyAgICAyMDUsIDc3LCA2OSwgNzYsIDc5LCA3OCwgMTI4LCA3NywgNjksIDc2LCA3OSwgNjgsIDczLCAxOTUsIDc3LCA2OSwgNzYsIAorICAgIDczLCA3NSwgMTI4LCA3NywgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDg0LCA3OSwgNzgsIDEyOCwgCisgICAgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCAKKyAgICA4NCwgNjksIDIwMSwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIAorICAgIDc3LCAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgCisgICAgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgMTI4LCAKKyAgICA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIAorICAgIDgyLCA2OSwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCA2OCwgODUsIDIwNiwgNzcsIDY3LCA3MiwgCisgICAgMjEzLCA3NywgNjYsIDg1LCAxMjgsIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgCisgICAgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgCisgICAgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgCisgICAgMTI4LCA3NywgMTk0LCA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgCisgICAgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg0LCAKKyAgICA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIAorICAgIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3MiwgNzAsIDY1LCA2NSwgODQsIAorICAgIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCA3OCwgMTk3LCA3NywgCisgICAgNjUsIDgyLCA4NSwgNzUsIDg1LCAxMjgsIDc3LCA2NSwgODIsIDg0LCA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCAKKyAgICA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgCisgICAgODIsIDc1LCA0NSwgNTAsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCAKKyAgICA3NywgNjUsIDgyLCA2NywgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgCisgICAgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCAKKyAgICA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgNjUsIDgyLCAxMjgsIDc3LCA2NSwgODEsIAorICAgIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgCisgICAgNzksIDc4LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCAKKyAgICA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCA2NSwgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIAorICAgIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgCisgICAgNjUsIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgCisgICAgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCAKKyAgICA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgMTI4LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIAorICAgIDczLCA2OCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3MiwgNzIsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA2NSwgNzUsIAorICAgIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDc3LCA2NSwgNzIsIDEyOCwgCisgICAgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCAKKyAgICA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIAorICAgIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgNzcsIDY1LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAxMjgsIDc3LCA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgCisgICAgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCAKKyAgICA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCA1NiwgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCAKKyAgICA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgMTI4LCA3NywgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIAorICAgIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgCisgICAgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCAKKyAgICA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIAorICAgIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgNTQsIDEyOCwgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIAorICAgIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgCisgICAgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCA3NywgNDgsIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCAKKyAgICA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIDQ5LCA1NiwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIAorICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjksIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIAorICAgIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjYsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAKKyAgICAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIDQ5LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIAorICAgIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgCisgICAgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgCisgICAgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCAKKyAgICA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCAKKyAgICA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCAKKyAgICA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCAKKyAgICA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzYsIDg1LCA4MCwgMTI4LCA3NiwgODUsIDc5LCA4OCwgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIAorICAgIDc5LCA4MCwgMTI4LCA3NiwgODUsIDc5LCAxMjgsIDc2LCA4NSwgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgCisgICAgNjUsIDg0LCAxOTcsIDc2LCA4NSwgMjA1LCA3NiwgODUsIDc2LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgCisgICAgNzIsIDg1LCA4MiwgMTI4LCA3NiwgODUsIDcyLCAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgMTI4LCA3NiwgODUsIDcxLCAKKyAgICA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNTEsIDEyOCwgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgCisgICAgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCA3NiwgNzksIDg4LCAKKyAgICAxMjgsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODUsIDgyLCA2OSwgMTI4LCAKKyAgICA3NiwgNzksIDg0LCA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIDc2LCA3OSwgNzksIAorICAgIDgwLCAxMjgsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgCisgICAgNjUsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCAKKyAgICA0NSwgODksIDgyLCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgCisgICAgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCAKKyAgICA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgCisgICAgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIAorICAgIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIDc5LCA3NiwgNzYsIDEyOCwgNzYsIDc5LCA3MSwgCisgICAgMjEwLCA3NiwgNzksIDcxLCA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCAKKyAgICA3NiwgNzksIDcxLCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIAorICAgIDczLCA3OSwgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCA3NiwgNzcsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIAorICAgIDEyOCwgNzYsIDc0LCA4NSwgNjgsIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDEyOCwgNzYsIAorICAgIDczLCA4OCwgMTI4LCA3NiwgNzMsIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgNzMsIDg0LCA4NCwgCisgICAgNzYsIDE5NywgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCA3MywgCisgICAgODMsIDcyLCAxMjgsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIDc2LCA3MywgODAsIDEyOCwgCisgICAgNzYsIDczLCA3OCwgNzUsIDczLCA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCA3MywgNzgsIDcxLCA4MywgNjUsIAorICAgIDEyOCwgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIDc2LCA3MywgNzgsIDY5LCA0NSwgCisgICAgNTcsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDc2LCAKKyAgICA3MywgNzgsIDY5LCA0NSwgNDksIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIAorICAgIDUwLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3NiwgNzMsIDc3LCA3MywgCisgICAgODQsIDY5LCAxOTYsIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc2LCA3MywgNzcsIDczLCAKKyAgICA4NCwgMTI4LCA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIAorICAgIDEyOCwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA3MywgCisgICAgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcwLCAKKyAgICA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCA4MCwgMTI4LCAKKyAgICA3NiwgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjUsIAorICAgIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgCisgICAgNzgsIDczLCAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgCisgICAgOTAsIDcyLCAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NCwgODQsIDY5LCAKKyAgICA4MiwgMTI4LCA3NiwgNjksIDgzLCA4MywgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCAKKyAgICAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAxMjgsIAorICAgIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgMjAwLCA3NiwgCisgICAgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDE5MywgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCAKKyAgICA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIAorICAgIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCAKKyAgICA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgCisgICAgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCAKKyAgICA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIAorICAgIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgCisgICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgNzYsIDY5LCAKKyAgICA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIAorICAgIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY4LCA2NSwgNzgsIDEyOCwgCisgICAgNzYsIDY4LCA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgOTAsIDIxNywgNzYsIDY1LCA4OSwgCisgICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgNzYsIDY1LCAKKyAgICAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIAorICAgIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgCisgICAgODQsIDEyOCwgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgNzYsIDY1LCAKKyAgICA4MiwgNzEsIDY5LCAyMTAsIDc2LCA2NSwgODIsIDcxLCAxOTcsIDc2LCA2NSwgODAsIDEyOCwgNzYsIDY1LCA3OCwgNzEsIAorICAgIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgCisgICAgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCAKKyAgICA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIAorICAgIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIAorICAgIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCA2NSwgNzgsIDg5LCAKKyAgICA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIAorICAgIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgCisgICAgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAKKyAgICAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIDY1LCAKKyAgICA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgNzMsIAorICAgIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzgsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgNDgsIDU0LCAKKyAgICA2NSwgMTI4LCA3NiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCA0NSwgODMsIAorICAgIDcyLCA2NSwgODAsIDY5LCAxOTYsIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzUsIDg5LCA4NSwgMTI4LCA3NSwgCisgICAgODksIDc5LCAxMjgsIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OSwgNzMsIDEyOCwgNzUsIDg5LCAKKyAgICA2OSwgNjksIDEyOCwgNzUsIDg5LCA2OSwgMTI4LCA3NSwgODksIDY1LCA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgNjUsIAorICAgIDY1LCAxMjgsIDc1LCA4OSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNzMsIDEyOCwgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIAorICAgIDc1LCA4OCwgODcsIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgMTI4LCA3NSwgCisgICAgODgsIDg1LCAxMjgsIDc1LCA4OCwgNzksIDEyOCwgNzUsIDg4LCA3MywgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgCisgICAgODgsIDY5LCAxMjgsIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCAKKyAgICA1NiwgMTI4LCA3NSwgODcsIDc5LCA3OSwgMTI4LCA3NSwgODcsIDc5LCAxMjgsIDc1LCA4NywgNzMsIDczLCAxMjgsIDc1LCAKKyAgICA4NywgNzMsIDEyOCwgNzUsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg3LCA2OSwgMTI4LCA3NSwgODcsIDY1LCA4OSwgMTI4LCAKKyAgICA3NSwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCAKKyAgICA4NSwgODUsIDcyLCAxMjgsIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIAorICAgIDcyLCA4NSwgNTAsIDEyOCwgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgCisgICAgMTI4LCA3NSwgODUsIDgyLCA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAKKyAgICAxMjgsIDc1LCA4NSwgMjEwLCA3NSwgODUsIDgwLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDc1LCA4NSwgNzksIDEyOCwgNzUsIDg1LCA3OCwgNzEsIDEyOCwgNzUsIDg1LCA3OCwgNjgsIDY4LCA2NSwgNzYsIAorICAgIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCA3NiwgMTI4LCA3NSwgODUsIDIwNCwgNzUsIDg1LCA1NSwgMTI4LCA3NSwgODUsIAorICAgIDUyLCAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIDEyOCwgNzUsIDgzLCAKKyAgICA4MywgNjUsIDEyOCwgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIAorICAgIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIDY1LCAKKyAgICA4NCwgNzMsIDc3LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIDc1LCAKKyAgICA4MCwgNzksIDc5LCAxMjgsIDc1LCA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDY5LCA3OCwgMTI4LCAKKyAgICA3NSwgODAsIDY5LCA2OSwgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIDc1LCA4MCwgNjUsIAorICAgIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NCwgNzksIDEyOCwgNzUsIAorICAgIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA3NSwgNzksIDgyLCA2OSwgCisgICAgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgMTk1LCA3NSwgNzksIDgxLCA3OCwgNjgsIDc5LCA3OCwgMTI4LCAKKyAgICA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgNzksIDEyOCwgNzUsIAorICAgIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgCisgICAgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDE5MywgNzUsIDc5LCA3NywgMjAxLCA3NSwgNzksIDc3LCAKKyAgICA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCAxOTMsIDc1LCA3OSwgNzcsIDY2LCAyMTMsIAorICAgIDc1LCA3OSwgNzUsIDEyOCwgNzUsIDc5LCAyMDMsIDc1LCA3OSwgNzMsIDEyOCwgNzUsIDc5LCAyMDEsIDc1LCA3OSwgNzIsIAorICAgIDEyOCwgNzUsIDc5LCA3MSwgNzIsIDc5LCA3NywgMTI4LCA3NSwgNzksIDY5LCA4NCwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIAorICAgIDc1LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAKKyAgICAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIDczLCA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCAKKyAgICA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgNzUsIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCAKKyAgICA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgNzUsIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCAKKyAgICA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIAorICAgIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDUzLCAxMjgsIDc1LCA3MywgODMsIDczLCA3NywgCisgICAgMTgxLCA3NSwgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzUsIDczLCA4MiwgNzksIDg3LCAKKyAgICA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzUsIAorICAgIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIDEyOCwgNzUsIDczLCA4MiwgCisgICAgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgwLCAxMjgsIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCAKKyAgICA4MCwgMTI4LCA3NSwgNzMsIDc4LCA2OCwgNjksIDgyLCA3MSwgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzMsIAorICAgIDEyOCwgNzUsIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIAorICAgIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MiwgOTAsIAorICAgIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgODUsIDY5LCA3OCwgNDUsIDc2LCA4NSwgMTk3LCA3NSwgCisgICAgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCAKKyAgICA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIAorICAgIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgNzMsIDg0LCAxMjgsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDIwMCwgNzUsIAorICAgIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDcyLCA2NSwgMTI4LCA3NSwgNzIsIDY5LCA4NCwgCisgICAgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgCisgICAgNzIsIDY1LCA4MiwgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCAKKyAgICA2NSwgNzgsIDY4LCAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgNzIsIAorICAgIDY1LCA3NSwgNjUsIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAKKyAgICAxMjgsIDc1LCA3MiwgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCAKKyAgICA2NSwgODAsIDEyOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDc1LCA2OSwgODksIDEyOCwgNzUsIAorICAgIDY5LCAyMTcsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NCwgODQsIDIwMSwgNzUsIAorICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIDc5LCA4NywgMTI4LCA3NSwgCisgICAgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgMTkzLCAKKyAgICA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCA3NSwgNjksIDc4LCAxMjgsIAorICAgIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgODAsIDg1LCAyMDQsIDc1LCA2OSwgNzcsIDgwLCA3NiwgCisgICAgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIAorICAgIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAyMDYsIDc1LCA2OSwgCisgICAgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzAsIDg1LCAKKyAgICA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgNzUsIAorICAgIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIDkwLCA2NSwgCisgICAgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgNzUsIDY1LCAKKyAgICA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCA2NSwgODUsIAorICAgIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgCisgICAgODMsIDg0LCA3MywgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNjUsIDc1LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgNzUsIDY1LCA4NCwgNjUsIDg2LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIAorICAgIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgCisgICAgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgMjA2LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIAorICAgIDE5MywgNzUsIDY1LCA4MywgNzUsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgzLCA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgCisgICAgNzIsIDc3LCA3MywgODIsIDIwMSwgNzUsIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCAKKyAgICA4MiwgNzMsIDczLCAxMjgsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIAorICAgIDc1LCA2NSwgODIsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgCisgICAgODUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAorICAgIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgCisgICAgODAsIDY1LCAxMjgsIDc1LCA2NSwgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAKKyAgICAxMjgsIDc1LCA2NSwgODAsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCAxMjgsIDc1LCAKKyAgICA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNzUsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY1LCA3OCwgMTk5LCA3NSwgNjUsIAorICAgIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzcsIDUyLCAxMjgsIDc1LCA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgCisgICAgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAKKyAgICAyMDMsIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgMjAxLCA3NSwgNjUsIDcwLCAKKyAgICAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCA3NSwgNjUsIDY4LCAxODEsIDc1LCA2NSwgNjgsIDUyLCAKKyAgICAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIDY1LCA2OCwgNTAsIDEyOCwgNzUsIDY1LCAKKyAgICA2NiwgMTkzLCA3NSwgNjUsIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCAKKyAgICA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCAKKyAgICA3NSwgNDgsIDQ4LCA1NSwgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIAorICAgIDQ4LCA1MiwgMTI4LCA3NSwgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgCisgICAgMTI4LCA3NCwgODcsIDY1LCAxMjgsIDc0LCA4NSwgODUsIDEyOCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgwLCA3MywgCisgICAgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgMTI4LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgODUsIDc4LCAKKyAgICA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgODUsIDc2LCA4OSwgMTI4LCA3NCwgODUsIDY5LCA4NSwgNzMsIAorICAgIDEyOCwgNzQsIDg1LCA2OCwgNzEsIDY5LCAxMjgsIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgCisgICAgODMsIDIwMCwgNzQsIDc5LCA4OSwgNzksIDg1LCAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCAyMTIsIDc0LCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCA3OSwgNzMsIDc4LCAKKyAgICA2OSwgNjgsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIDg5LCA4OCwgMTI4LCAKKyAgICA3NCwgNzQsIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIDc0LCA3NCwgODUsIAorICAgIDg4LCAxMjgsIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgCisgICAgMTI4LCA3NCwgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDc0LCA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIDEyOCwgNzQsIDc0LCAKKyAgICA3OSwgODQsIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIDczLCA4OCwgMTI4LCAKKyAgICA3NCwgNzQsIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzQsIAorICAgIDc0LCA3MywgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgMTI4LCA3NCwgCisgICAgNzQsIDczLCAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCA2NSwgMTI4LCA3NCwgCisgICAgNzMsIDc2LCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAKKyAgICAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCAKKyAgICA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIAorICAgIDc2LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgCisgICAgMTI4LCA3NCwgNjksIDcyLCAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgCisgICAgNjksIDY5LCA3NywgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjUsIDg2LCA3MywgODksIDY1LCAKKyAgICA3OCwgNzMsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIAorICAgIDc4LCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3NCwgNjUsIDc2LCA3NiwgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCAKKyAgICA3MiwgNzksIDg1LCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjUsIDEyOCwgNzQsIDQ1LCA4MywgNzMsIAorICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCisgICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgODksIDY5LCA3NSwgMTI4LCAKKyAgICA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgODQsIAorICAgIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3MywgODMsIDIxMSwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIDY5LCA3OCwgCisgICAgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCAKKyAgICA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgCisgICAgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgCisgICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIAorICAgIDgzLCAxOTcsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgCisgICAgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCAKKyAgICA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgCisgICAgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgNzgsIDg0LCAKKyAgICA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDc5LCA2NywgCisgICAgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgODQsIDY5LCAKKyAgICA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIAorICAgIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIAorICAgIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgCisgICAgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIAorICAgIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgCisgICAgNzMsIDc4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3MywgNzgsIDc4LCA3OSwgNjcsIAorICAgIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgCisgICAgNzgsIDc4LCA2OSwgMjEwLCA3MywgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzMsIDc4LCA3MSwgODUsIDEyOCwgNzMsIDc4LCAKKyAgICA3MywgMTI4LCA3MywgNzgsIDcyLCA3MywgNjYsIDczLCAyMTIsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIAorICAgIDczLCA3OCwgNzEsIDg3LCA2NSwgOTAsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgCisgICAgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIAorICAgIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgCisgICAgMjA0LCA3MywgNzgsIDY4LCA3MywgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAKKyAgICAxMjgsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIAorICAgIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgCisgICAgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCAKKyAgICA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgMTk3LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIDE5OSwgNzMsIAorICAgIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIDc4LCA0NSwgNjUsIDc2LCA2NSwgNzAsIDEyOCwgCisgICAgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIAorICAgIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgCisgICAgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCAKKyAgICA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIAorICAgIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgCisgICAgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAKKyAgICAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIAorICAgIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgCisgICAgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIAorICAgIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIAorICAgIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgCisgICAgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgCisgICAgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIAorICAgIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgCisgICAgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIAorICAgIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgCisgICAgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCAKKyAgICA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU3LCA0OCwgCisgICAgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjgsIDU1LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTUsIDU0LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgCisgICAgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCA0OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgCisgICAgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDU3LCA1NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgCisgICAgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUyLCA2NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NywgCisgICAgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTcsIDQ5LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTMsIDUxLCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgCisgICAgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCA2OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTIsIDY5LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgCisgICAgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA1NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCAKKyAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzMsIAorICAgIDY3LCA3MiwgNzksIDg1LCAxMjgsIDczLCA2NywgNzIsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgCisgICAgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCAKKyAgICA3MywgNjcsIDQ1LCA4OSwgODIsIDEyOCwgNzMsIDY2LCA3MywgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIAorICAgIDY1LCAxMjgsIDczLCA0OCwgNDksIDUzLCAxMjgsIDczLCA0OCwgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIAorICAgIDczLCA0OCwgNDksIDUwLCAxMjgsIDczLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgCisgICAgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCAKKyAgICA0OCwgNDgsIDU3LCAxMjgsIDczLCA0OCwgNDgsIDU2LCAxMjgsIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIAorICAgIDU0LCAxMjgsIDczLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgCisgICAgMTI4LCA3MywgNDgsIDQ4LCA1MSwgMTI4LCA3MywgNDgsIDQ4LCA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgCisgICAgNDUsIDg5LCA4NSwgMTI4LCA3MywgNDUsIDg5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCAKKyAgICA4OSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIAorICAgIDQ1LCA4OSwgNjUsIDEyOCwgNzMsIDQ1LCA3OSwgNDUsIDczLCAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgCisgICAgODUsIDEyOCwgNzMsIDQ1LCA2NiwgNjksIDY1LCA3NywgMTI4LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCAKKyAgICA3MywgNDUsIDY1LCAxMjgsIDcyLCA5MCwgOTAsIDkwLCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIAorICAgIDkwLCA4MCwgMTI4LCA3MiwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIAorICAgIDkwLCA4NCwgMTI4LCA3MiwgOTAsIDcxLCAxMjgsIDcyLCA4OSwgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgCisgICAgNzIsIDg5LCA4MCwgNzksIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIAorICAgIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAKKyAgICAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OCwgODcsIAorICAgIDcxLCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgCisgICAgNzksIDgwLCAxMjgsIDcyLCA4OCwgODUsIDc5LCAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAKKyAgICAxMjgsIDcyLCA4OCwgNzksIDgwLCAxMjgsIDcyLCA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCAKKyAgICA3MywgODQsIDEyOCwgNzIsIDg4LCA3MywgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgCisgICAgMTI4LCA3MiwgODgsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgCisgICAgNjUsIDg4LCAxMjgsIDcyLCA4OCwgNjUsIDg0LCAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgCisgICAgNzIsIDg3LCA4NSwgMTI4LCA3MiwgODcsIDY1LCA3MywgODIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCA4NSwgODIsIDY1LCAKKyAgICA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCA3MiwgODUsIAorICAgIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIDcyLCA4NSwgCisgICAgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgNzIsIDg1LCAKKyAgICA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCA2NSwgNjgsIAorICAgIDY4LCA3OSwgMTI4LCA3MiwgODIsIDg5LCA4NiwgNzgsIDczLCAxOTMsIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgCisgICAgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCAKKyAgICA4NSwgMjEwLCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDU0LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKKyAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgCisgICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIAorICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDU0LCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDUyLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCAKKyAgICA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCisgICAgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAorICAgIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUwLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDQ5LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCAKKyAgICA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgCisgICAgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIAorICAgIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUzLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgODIsIDE5MywgNzIsIDc5LCAKKyAgICA3OSwgODIsIDg1LCAxMjgsIDcyLCA3OSwgNzksIDc4LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIAorICAgIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgCisgICAgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzksIDc2LCA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIAorICAgIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIDc5LCA3MywgMTI4LCA3MiwgNzksIDY5LCAxMjgsIDcyLCA3OCwgODUsIAorICAgIDg0LCAxMjgsIDcyLCA3OCwgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgCisgICAgMTI4LCA3MiwgNzgsIDc5LCA4NCwgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA4NCwgMTI4LCA3MiwgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCAKKyAgICA3MywgNjksIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIAorICAgIDczLCAxMjgsIDcyLCA3OCwgNjksIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIAorICAgIDc4LCA2NSwgODgsIDEyOCwgNzIsIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgCisgICAgNzIsIDc3LCA4OSwgODAsIDEyOCwgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA4NCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIAorICAgIDEyOCwgNzIsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgCisgICAgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgCisgICAgNzksIDgwLCAxMjgsIDcyLCA3NywgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgCisgICAgNzIsIDc3LCA3MywgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCA2OSwgMTI4LCA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIAorICAgIDEyOCwgNzIsIDc3LCA2NSwgODQsIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgCisgICAgODIsIDEyOCwgNzIsIDc2LCA4OSwgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCA3OSwgMTI4LCA3MiwgNzYsIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIAorICAgIDcyLCA3NiwgNzksIDEyOCwgNzIsIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgCisgICAgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICA2OSwgMTI4LCA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCAKKyAgICA3NiwgNjksIDEyOCwgNzIsIDc2LCA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIAorICAgIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIAorICAgIDc5LCA4MiwgNzMsIDE5NSwgNzIsIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCA4NiwgCisgICAgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCAKKyAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIAorICAgIDczLCA2OSwgODUsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCAKKyAgICA3MywgNjksIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIAorICAgIDczLCA2OSwgODUsIDIwMCwgNzIsIDczLCA2OSwgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgCisgICAgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgCisgICAgNzIsIDcyLCA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgNjUsIDY1LCAKKyAgICAxMjgsIDcyLCA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIAorICAgIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgCisgICAgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNzMsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCAKKyAgICA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIDc4LCA3MSwgCisgICAgMTI4LCA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgODQsIDEyOCwgCisgICAgNzIsIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCAKKyAgICA4NSwgMTI4LCA3MiwgNjksIDczLCA4MywgNjksIDczLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIAorICAgIDY1LCA4NiwgNjksIDc4LCA3NiwgMjE3LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgCisgICAgMjA2LCA3MiwgNjksIDY1LCA4MiwgODQsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgNjgsIDgzLCAKKyAgICA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIAorICAgIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgCisgICAgNjUsIDgzLCAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCAKKyAgICA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIAorICAgIDY1LCA4NCwgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgNzIsIDY1LCA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgCisgICAgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgNzgsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCAKKyAgICA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIDEyOCwgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIAorICAgIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcyLCA2NSwgODIsIDE5NiwgNzIsIDY1LCA3OCwgCisgICAgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIAorICAgIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgCisgICAgNDUsIDY1LCA3NSwgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIAorICAgIDIxMCwgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgNjgsIDEyOCwgNzIsIDY1LCA3NiwgCisgICAgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCAKKyAgICA2NSwgNzEsIDc2LCA2NSwgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgCisgICAgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjksIDEyOCwgCisgICAgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2NSwgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCAKKyAgICA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTYsIDEyOCwgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIAorICAgIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAxMjgsIDcyLCA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCA0OCwgNDgsIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgCisgICAgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIDg1LCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgCisgICAgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIDcwLCAyMTMsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAKKyAgICAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIDcxLCA4OSwgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgCisgICAgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIDY5LCA2OSwgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIDg2LCAxMjgsIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCAKKyAgICA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIAorICAgIDEyOCwgNzEsIDg1LCA3OCwgODUsIDEyOCwgNzEsIDg1LCA3OCwgMjEzLCA3MSwgODUsIDc3LCAxMjgsIDcxLCA4NSwgMjA1LCAKKyAgICA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCAKKyAgICA4NSwgNjgsIDEyOCwgNzEsIDg1LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTc4LCA3MSwgODQsIDY5LCAyMTAsIDcxLCA4MywgCisgICAgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgCisgICAgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDY5LCA3MSwgNzksIAorICAgIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjksIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgCisgICAgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCAKKyAgICA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIAorICAgIDY1LCAyMTIsIDcxLCA4MiwgNjUsIDg2LCA2OSwgODksIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgCisgICAgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIAorICAgIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3MSwgODIsIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDgzLCA4MywgMTI4LCA3MSwgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIAorICAgIDY5LCA3NywgMTk3LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA4MiwgCisgICAgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIDY1LCA2NywgMTk3LCA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCAKKyAgICA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgODQsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIAorICAgIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgCisgICAgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDcxLCA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCAKKyAgICA3MSwgNzksIDc4LCA3MSwgMTI4LCA3MSwgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIAorICAgIDc4LCAxOTksIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgNzgsIAorICAgIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCA4NCwgCisgICAgODQsIDY1LCAyMDQsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIAorICAgIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIAorICAgIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIAorICAgIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA1MSwgCisgICAgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgODIsIDE3OCwgNzEsIDczLCA4MCwgCisgICAgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAxMjgsIDcxLCA3MywgNzcsIDY5LCAKKyAgICAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCA2OSwgODQsIDEyOCwgNzEsIDczLCAKKyAgICA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY1LCAxMjgsIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCAKKyAgICA3MiwgOTAsIDEyOCwgNzEsIDcyLCA4NywgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIAorICAgIDg1LCA3OCwgNzgsIDE5MywgNzEsIDcyLCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgCisgICAgODQsIDEyOCwgNzEsIDcyLCA3OSwgMTI4LCA3MSwgNzIsIDczLCAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgCisgICAgNjksIDY5LCAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgCisgICAgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIAorICAgIDcxLCA3MiwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCA4NywgNjksIDY5LCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgNzEsIDg1LCAKKyAgICA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODIsIAorICAgIDEyOCwgNzEsIDcxLCA4NSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4NCwgCisgICAgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIDEyOCwgCisgICAgNzEsIDcxLCA3OSwgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIDcxLCAKKyAgICA3MywgODQsIDEyOCwgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgNzEsIAorICAgIDczLCA2OSwgMTI4LCA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCA4MCwgCisgICAgMTI4LCA3MSwgNzEsIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA4MCwgMTI4LCA3MSwgCisgICAgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCAKKyAgICA3MiwgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgCisgICAgMTI4LCA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCAKKyAgICA3MSwgNjksIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIAorICAgIDg0LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgCisgICAgNjksIDc4LCA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCAKKyAgICA3NSwgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIAorICAgIDY5LCA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAxMjgsIDcxLCA2OSwgCisgICAgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCA4MiwgMTI4LCA3MSwgCisgICAgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgCisgICAgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCAKKyAgICA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgODQsIDg0LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCA2NSwgODUsIDc4LCAKKyAgICA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcxLCA2NSwgODQsIAorICAgIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIAorICAgIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAKKyAgICAxOTYsIDcxLCA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCAKKyAgICA3MSwgNjUsIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIAorICAgIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgCisgICAgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIDc3LCAKKyAgICAxMjgsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCA2OSwgODQsIDg0LCAKKyAgICA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIDY1LCA2OCwgCisgICAgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIDY1LCA3MCwgCisgICAgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIDcxLCA0OCwgCisgICAgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgNTIsIDU3LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAxMjgsIDcxLCAKKyAgICA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCA3MSwgNDgsIAorICAgIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIDQ4LCA1MiwgCisgICAgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgNTYsIDEyOCwgCisgICAgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCA2NSwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIDUxLCA0OCwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgMTI4LCA3MSwgCisgICAgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCA1MCwgNDksIAorICAgIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgNDksIDUwLCAKKyAgICAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCA0OCwgMTI4LCAKKyAgICA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNzEsIAorICAgIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgNDgsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAxMjgsIDcwLCAKKyAgICA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4OSwgMTI4LCA3MCwgODcsIDczLCAKKyAgICAxMjgsIDcwLCA4NywgNjksIDY5LCAxMjgsIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCAKKyAgICA2NSwgMTI4LCA3MCwgODUsIDg4LCAxMjgsIDcwLCA4NSwgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCAKKyAgICA4MywgMTkzLCA3MCwgODUsIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgyLCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCAKKyAgICA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIDg1LCA3NiwgNzYsIAorICAgIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA2OSwgMjA0LCA3MCwgODQsIDcyLCA3OSwgCisgICAgODIsIDE5MywgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgODcsIDc4LCAxMjgsIDcwLCAKKyAgICA4MiwgNzksIDc4LCA4NCwgNDUsIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIAorICAgIDcxLCAxMjgsIDcwLCA4MiwgNzMsIDg0LCA4NSwgMTI4LCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAKKyAgICAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCA2OSwgNzgsIDY3LCAyMDAsIAorICAgIDcwLCA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgCisgICAgNjUsIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCAKKyAgICA2NSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIAorICAgIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MywgODQsIDgyLCA3MywgCisgICAgNzgsIDE5OSwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4MCwgNjksIDgyLCA0NSwgNjksIDIwNSwgNzAsIDc5LCA4NSwgODIsIDQ1LCAKKyAgICA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3OSwgODUsIDIxMCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIAorICAgIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgCisgICAgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgMjExLCA3MCwgNzksIDgyLCAKKyAgICA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIDE5NiwgNzAsIDc5LCA4MiwgNjcsIAorICAgIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgMTI4LCA3MCwgNzksIDc5LCA4NCwgCisgICAgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAxOTcsIDcwLCA3OSwgNzksIDg0LCAKKyAgICAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCA3OCwgNzEsIDc3LCA2NSwgNzgsIDEyOCwgNzAsIDc5LCA3NywgMTI4LCAKKyAgICA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIAorICAgIDEyOCwgNzAsIDc3LCAxMjgsIDcwLCA3NiwgODksIDEyOCwgNzAsIDc2LCA4NSwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIAorICAgIDg3LCA2OSwgODIsIDEyOCwgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIDg1LCA4MiwgNzMsIDgzLCA3MiwgCisgICAgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY1LCAyMDQsIDcwLCAKKyAgICA3NiwgNzksIDc5LCA4MiwgMTI4LCA3MCwgNzYsIDczLCA4MCwgMTI4LCA3MCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAorICAgIDcwLCA3NiwgNjksIDg4LCA4NSwgODMsIDEyOCwgNzAsIDc2LCA2OSwgODUsIDgyLCA0NSwgNjgsIDY5LCA0NSwgNzYsIDczLCAKKyAgICA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCA3OCwgNjksIDE5NiwgNzAsIDc2LCA2NSwgODQsIDc4LCA2OSwgODMsIAorICAgIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTEsIDEyOCwgNzAsIDc2LCAKKyAgICA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCA3NiwgNjUsIDcxLCAxMjgsIAorICAgIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCA4OCwgNjksIDY4LCA0NSwgCisgICAgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCAKKyAgICA3MCwgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDY1LCAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgNzIsIAorICAgIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgCisgICAgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgCisgICAgNzAsIDczLCA4MiwgNjksIDEyOCwgNzAsIDczLCA4MCwgMTI4LCA3MCwgNzMsIDc4LCA3MywgODQsIDE5NywgNzAsIDczLCAKKyAgICA3OCwgNzEsIDY5LCA4MiwgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIAorICAgIDcwLCA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgCisgICAgNzMsIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAKKyAgICAxOTcsIDcwLCA3MywgNzMsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIAorICAgIDg1LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgCisgICAgODUsIDgyLCAxOTcsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCAKKyAgICA3MCwgODQsIDIxNywgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIAorICAgIDczLCA3MCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgCisgICAgNjgsIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCA3MCwgCisgICAgNjksIDgzLCA4NCwgNzMsIDg2LCA2NSwgNzYsIDEyOCwgNzAsIDY5LCA4MiwgODIsIDg5LCAxMjgsIDcwLCA2OSwgODIsIDc3LCAKKyAgICA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIDY5LCA3OSwgMjAwLCA3MCwgNjksIAorICAgIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCA3OCwgMTk3LCA3MCwgCisgICAgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIDc2LCA3NiwgNzksIDg3LCAKKyAgICA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIDIxMywgNzAsIDY5LCA3MiwgMTI4LCAKKyAgICA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIDY4LCAxMjgsIDcwLCA2OSwgNjksIAorICAgIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIDEyOCwgNzAsIDY5LCA2NSwgCisgICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjksIDY1LCA4MiwgNzgsIAorICAgIDEyOCwgNzAsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgCisgICAgNjksIDgyLCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCAKKyAgICA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIDY1LCA4NCwgMTI4LCAKKyAgICA3MCwgNjUsIDgyLCA4MywgMjAxLCA3MCwgNjUsIDgwLCAxMjgsIDcwLCA2NSwgNzgsIDcxLCAxMjgsIDcwLCA2NSwgNzgsIAorICAgIDY5LCA4MiwgNzksIDgzLCA3MywgMjExLCA3MCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgNzcsIDczLCA3NiwgODksIDEyOCwgCisgICAgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCA3MCwgNjUsIDczLCAKKyAgICA3MiwgODUsIDEyOCwgNzAsIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIDY1LCA2NywgODQsIAorICAgIDc5LCAyMTAsIDcwLCA2NSwgNjcsIDgzLCA3MywgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDU0LCAKKyAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgMTI4LCA3MCwgNjUsIAorICAgIDY3LCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA0OSwgCisgICAgMTI4LCA3MCwgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIDcwLCA2NSwgNjUsIDcwLCAKKyAgICA4NSwgMTI4LCA3MCwgNjUsIDY1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCAKKyAgICA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIAorICAgIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgCisgICAgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIAorICAgIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIAorICAgIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIAorICAgIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIAorICAgIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgCisgICAgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAKKyAgICAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIAorICAgIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgCisgICAgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgCisgICAgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCAKKyAgICA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIAorICAgIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgCisgICAgMTI4LCA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDcyLCA3MywgCisgICAgNzEsIDIwMCwgNjksIDg4LCA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgNzgsIDY4LCAKKyAgICA2OSwgMTk2LCA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCA3OCwgMjEyLCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCAKKyAgICA2OSwgODgsIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIAorICAgIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNjksIDgzLCA4MywgMTI4LCAKKyAgICA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA4NywgNjksIDEyOCwgNjksIDg2LCA2OSwgNzgsIAorICAgIDczLCA3OCwgNzEsIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgCisgICAgODUsIDgyLCAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDc5LCAKKyAgICAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIAorICAgIDEyOCwgNjksIDg1LCA0NSwgNjUsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCA4NCwgNjUsIDEyOCwgNjksIDg0LCA3MiwgCisgICAgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIDgyLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCAKKyAgICA2OSwgODMsIDg1LCA3NSwgODUsIDg1LCA2OCwgNzksIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCA4MywgCisgICAgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDE5NiwgNjksIDgzLCA3MiwgNjksIDUxLCAxMjgsIDY5LCAKKyAgICA4MywgNzIsIDUwLCA0OSwgMTI4LCA2OSwgODMsIDcyLCAxNzgsIDY5LCA4MywgNzIsIDQ5LCA1NCwgMTI4LCA2OSwgODMsIAorICAgIDY3LCA2NSwgODAsIDY5LCAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCA2NiwgCisgICAgNjUsIDgyLCA4MiwgNjksIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIDgyLCAKKyAgICA3MSwgMTI4LCA2OSwgODIsIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAyMTIsIAorICAgIDY5LCA4MSwgODUsIDczLCA2OCwgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA2OSwgCisgICAgODEsIDg1LCA2NSwgNzYsIDgzLCAxMjgsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA2OSwgODEsIDg1LCA2NSwgNzYsIAorICAgIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgMjA2LCA2OSwgCisgICAgODAsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDY5LCA4MCwgNzMsIDY4LCA2NSwgODUsIDgyLCA2OSwgNjUsIAorICAgIDIwNiwgNjksIDgwLCA2OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgCisgICAgNjUsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgCisgICAgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgCisgICAgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCA2NSwgODMsIDc3LCAxMjgsIDY5LCAKKyAgICA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIAorICAgIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgNzgsIDgxLCA4NSwgNzMsIDgyLCA4OSwgCisgICAgMTI4LCA2OSwgNzgsIDc5LCAyMTEsIDY5LCA3OCwgNzgsIDEyOCwgNjksIDc4LCA3NiwgNjUsIDgyLCA3MSwgNjksIDc3LCAKKyAgICA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3OCwgNjgsIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjksIDc4LCA2OCwgNzMsIAorICAgIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA2OSwgNzgsIDY4LCA2OSwgNjUsIDg2LCA3OSwgODUsIDgyLCAKKyAgICAxMjgsIDY5LCA3OCwgMTk2LCA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIAorICAgIDY3LCA3NiwgNzksIDgzLCA4NSwgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgCisgICAgNzgsIDY3LCAxMjgsIDY5LCA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCAKKyAgICA3OSwgMjExLCA2OSwgNzcsIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIAorICAgIDgwLCA3MiwgNjUsIDgzLCA3MywgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgCisgICAgNzcsIDY2LCA2OSwgNzYsIDc2LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNjgsIAorICAgIDY4LCA3MywgNzgsIDcxLCAxMjgsIDY5LCA3NiwgODQsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNzMsIDgzLCAKKyAgICAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCA2OSwgNzYsIAorICAgIDY5LCA4NiwgNjksIDc4LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAKKyAgICAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIAorICAgIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgCisgICAgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCA4NCwgNzMsIDc1LCA3OSwgNzgsIAorICAgIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIDY5LCA3MywgODMsIDEyOCwgNjksIAorICAgIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgCisgICAgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAxMjgsIDY5LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgMjA2LCA2OSwgNzMsIAorICAgIDY5LCAxMjgsIDY5LCA3MiwgODcsIDY1LCAyMTgsIDY5LCA3MSwgODksIDgwLCA4NCwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgCisgICAgNjUsIDIwNCwgNjksIDcxLCA3MywgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCAKKyAgICA2NSwgMTI4LCA2OSwgNjksIDc1LCA2NSwgNjUsIDEyOCwgNjksIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgCisgICAgMTI4LCA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgNjksIDY4LCA3MywgNzgsIDEyOCwgNjksIDY4LCAKKyAgICA2OCwgMTI4LCA2OSwgNjcsIDIwMCwgNjksIDY2LCA2OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIAorICAgIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgCisgICAgODQsIDcyLCAxMjgsIDY5LCA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIDcyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgNzIsIAorICAgIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCA1MSwgCisgICAgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDY1LCAKKyAgICAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIDY5LCAKKyAgICA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgNTAsIAorICAgIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCA1NCwgCisgICAgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIAorICAgIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgCisgICAgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCA2OSwgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIDQ4LCAKKyAgICA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDQ5LCAxMjgsIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgODUsIDEyOCwgCisgICAgNjgsIDkwLCA3OSwgMTI4LCA2OCwgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgNzIsIDY5LCAKKyAgICAxMjgsIDY4LCA5MCwgNzIsIDY1LCAxMjgsIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OCwgOTAsIDY5LCA2OSwgMTI4LCAKKyAgICA2OCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIDkwLCAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgCisgICAgNjgsIDg5LCAyMDcsIDY4LCA4OSwgNjksIDcyLCAxMjgsIDY4LCA4OSwgNjksIDIwMCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgCisgICAgODcsIDY5LCAxMjgsIDY4LCA4NywgNjUsIDEyOCwgNjgsIDg2LCA3MywgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCAKKyAgICA4NiwgMTI4LCA2OCwgODUsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgNzgsIDY4LCA3MywgODUsIDIxMSwgNjgsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgODUsIDc4LCA1MiwgMTI4LCA2OCwgODUsIDc4LCA1MSwgMTI4LCAKKyAgICA2OCwgODUsIDc4LCAxNzksIDY4LCA4NSwgNzgsIDEyOCwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIDc2LCAxMjgsIDY4LCAKKyAgICA4NSwgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDY2LCA1MCwgMTI4LCAKKyAgICA2OCwgODUsIDY2LCAxMjgsIDY4LCA4NSwgMTk0LCA2OCwgMjEzLCA2OCwgODIsIDg5LCAxMjgsIDY4LCA4MiwgMjE3LCA2OCwgCisgICAgODIsIDg1LCA3NywgMTI4LCA2OCwgODIsIDg1LCAyMDUsIDY4LCA4MiwgNzksIDgwLCA4MywgMTI4LCA2OCwgODIsIDc5LCAKKyAgICA4MCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDY4LCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2OCwgODIsIAorICAgIDczLCA4NiwgMTk3LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgNjUsIDg1LCA3MSwgNzIsIDg0LCAyMTEsIDY4LCA4MiwgCisgICAgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCA2NSwgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCAKKyAgICA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAorICAgIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgCisgICAgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCAKKyAgICA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCA2OCwgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIAorICAgIDc2LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA2OCwgNzksIDg1LCA2NiwgCisgICAgNzYsIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4NCwgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDg0LCA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgCisgICAgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgODMsIDEyOCwgNjgsIDc5LCA4NCwgNzYsIAorICAgIDY5LCA4MywgMjExLCA2OCwgNzksIDgyLCA4NSwgMTI4LCA2OCwgNzksIDc5LCA4MiwgMTI4LCA2OCwgNzksIDc5LCA3OCwgCisgICAgNzEsIDEyOCwgNjgsIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3NywgNjUsIDczLCAyMDYsIDY4LCA3OSwgNzYsIDc2LCAKKyAgICA2NSwgMjEwLCA2OCwgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgNzUsIDc3LCA2NSwgNzMsIDEyOCwgNjgsIAorICAgIDc5LCA3MywgODQsIDEyOCwgNjgsIDc5LCA3MSwgMTI4LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAKKyAgICAxMjgsIDY4LCA3NSwgNjUsIDgyLCAxMjgsIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCAKKyAgICA2OCwgNzQsIDY5LCA4MiwgODYsIDEyOCwgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3NCwgMTI4LCAKKyAgICA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIAorICAgIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgCisgICAgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCAKKyAgICA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIAorICAgIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgCisgICAgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIAorICAgIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA3MywgCisgICAgNzcsIDc5LCA4NSwgMTI4LCA2OCwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCAKKyAgICA4NSwgNzksIDg1LCAyMTEsIDY4LCA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgNjUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIAorICAgIDczLCA4MiwgNzEsIDE5MywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzYsIDIxNywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA4MCwgODQsIDY5LCAxMjgsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIAorICAgIDEyOCwgNjgsIDczLCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDczLCAxMjgsIDY4LCA3MywgCisgICAgODAsIDc2LCAyMDEsIDY4LCA3MywgNzgsIDcxLCA2NiwgNjUsIDIxMiwgNjgsIDczLCAyMDYsIDY4LCA3MywgNzcsIDc3LCAKKyAgICA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTEsIDEyOCwgNjgsIAorICAgIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgCisgICAgODQsIDEyOCwgNjgsIDczLCA3NywgNzMsIDY4LCA3MywgMTkzLCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAKKyAgICA2NSwgMjA0LCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA3NywgNTAsIDEyOCwgNjgsIAorICAgIDczLCA3NiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAKKyAgICAyMDAsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgCisgICAgMTkzLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAxMjgsIDY4LCAKKyAgICA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY4LCA3MywgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCA3MywgNzEsIAorICAgIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAyMTEsIDY4LCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgCisgICAgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCAyMTcsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCAKKyAgICA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCA4NCwgNzMsIDY1LCA3NiwgCisgICAgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDY4LCA3MywgNzAsIDY1LCA4NCwgMTI4LCAKKyAgICA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgMjExLCA2OCwgNzMsIDY5LCA4MCwgCisgICAgMTI4LCA2OCwgNzMsIDE5NywgNjgsIDczLCA2NiwgMTI4LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3OSwgMjA2LCA2OCwgCisgICAgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDIwMSwgNjgsIDczLCAKKyAgICA2NSwgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIAorICAgIDg0LCA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgCisgICAgODQsIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCAKKyAgICA3OCwgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIAorICAgIDgzLCA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgCisgICAgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCAKKyAgICA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIAorICAgIDEyOCwgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDY4LCA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgCisgICAgNjUsIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCAKKyAgICA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIAorICAgIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCA4NCwgCisgICAgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjcsIDgyLCAKKyAgICA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OCwgNjksIAorICAgIDgzLCA2NywgNjksIDc4LCA2OCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgODUsIDgyLCA2OSwgCisgICAgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCA4MywgODQsIDgyLCAKKyAgICAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgODIsIAorICAgIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgNzgsIDY5LCA3OCwgCisgICAgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCA4MiwgNzMsIDg1LCAKKyAgICAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIDc2LCA4NCwgMTI4LCAKKyAgICA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgCisgICAgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCAKKyAgICA2OSwgMjEwLCA2OCwgNjksIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgMTk3LCA2OCwgNjksIAorICAgIDc1LCA2NSwgMTI4LCA2OCwgNjksIDc1LCAxMjgsIDY4LCA2OSwgNzMsIDEyOCwgNjgsIDY5LCA3MiwgNzMsIDEyOCwgNjgsIAorICAgIDY5LCA3MSwgODIsIDY5LCAxOTcsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA2OSwgCisgICAgNzAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDIxMSwgNjgsIDY5LCA2OSwgODIsIDEyOCwgNjgsIDY5LCAKKyAgICA2OSwgNzYsIDEyOCwgNjgsIDY5LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDc5LCAxMjgsIDY4LCA2OSwgNjcsIAorICAgIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA2OCwgNjksIDY3LCA3MywgODMsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDY4LCA2OSwgNjcsIDczLCA3NywgNjUsIDIwNCwgNjgsIDY5LCA2NywgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIAorICAgIDY4LCA2OSwgNjcsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDY4LCA2OSwgNjYsIDczLCAyMTIsIDY4LCA2OSwgNjUsIDg0LCA3MiwgCisgICAgMTI4LCA2OCwgNjksIDY1LCA2OCwgMTI4LCA2OCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgNjgsIDg1LCA4OCwgMTI4LCA2OCwgCisgICAgNjgsIDg1LCA4NCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNjgsIDY4LCA4NSwgODIsIDEyOCwgNjgsIDY4LCAKKyAgICA4NSwgODAsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA2OCwgODUsIDc5LCA4MCwgMTI4LCA2OCwgNjgsIAorICAgIDg1LCA3OSwgMTI4LCA2OCwgNjgsIDg1LCAxMjgsIDY4LCA2OCwgNzksIDg4LCAxMjgsIDY4LCA2OCwgNzksIDg0LCAxMjgsIAorICAgIDY4LCA2OCwgNzksIDgwLCAxMjgsIDY4LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA2OCwgNzMsIDg4LCAxMjgsIDY4LCA2OCwgCisgICAgNzMsIDg0LCAxMjgsIDY4LCA2OCwgNzMsIDgwLCAxMjgsIDY4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA2OCwgNjgsIDczLCAKKyAgICA2OSwgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDEyOCwgNjgsIDY4LCA3MywgMTI4LCA2OCwgNjgsIDcyLCA3OSwgMTI4LCAKKyAgICA2OCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjgsIDY5LCA4OCwgMTI4LCA2OCwgNjgsIDY5LCA4MCwgMTI4LCA2OCwgNjgsIAorICAgIDY5LCA2OSwgMTI4LCA2OCwgNjgsIDY5LCAxMjgsIDY4LCA2OCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjgsIDY4LCA2NSwgCisgICAgMTI4LCA2OCwgNjgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDY4LCA2NSwgODgsIDEyOCwgNjgsIDY4LCAKKyAgICA2NSwgODQsIDEyOCwgNjgsIDY4LCA2NSwgODAsIDEyOCwgNjgsIDY4LCA2NSwgNzYsIDEyOCwgNjgsIDY4LCA2NSwgMjA0LCAKKyAgICA2OCwgNjgsIDY1LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA2OCwgNjUsIDcyLCA2NSwgMjA0LCA2OCwgNjgsIDY1LCA2NSwgCisgICAgMTI4LCA2OCwgMTk0LCA2OCwgNjUsIDIxNywgNjgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDY4LCA2NSwgCisgICAgODYsIDczLCA2OCwgMTI4LCA2OCwgNjUsIDg0LCAxOTcsIDY4LCA2NSwgODMsIDczLCA2NSwgMTI4LCA2OCwgNjUsIDgzLCAKKyAgICA3MiwgNjksIDE5NiwgNjgsIDY1LCA4MywgNzIsIDEyOCwgNjgsIDY1LCA4MywgMjAwLCA2OCwgNjUsIDgzLCA2OSwgNzMsIAorICAgIDY1LCAxMjgsIDY4LCA2NSwgODIsIDg0LCAxMjgsIDY4LCA2NSwgODIsIDc1LCA2OSwgNzgsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgNzMsIDc4LCAxOTksIDY4LCA2NSwgODIsIDIwMywgNjgsIDY1LCA4MiwgNzEsIDY1LCAKKyAgICAxMjgsIDY4LCA2NSwgODIsIDY1LCA1MiwgMTI4LCA2OCwgNjUsIDgyLCA2NSwgNTEsIDEyOCwgNjgsIDY1LCA4MiwgMTI4LCAKKyAgICA2OCwgNjUsIDgwLCA0NSwgODAsIDgyLCA2NSwgMjA1LCA2OCwgNjUsIDgwLCA0NSwgODAsIDczLCAyMDEsIDY4LCA2NSwgODAsIAorICAgIDQ1LCA3NywgODUsIDc5LCAyMTcsIDY4LCA2NSwgODAsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDY4LCA2NSwgODAsIDQ1LCA2NiwgCisgICAgNjksIDIwMSwgNjgsIDY1LCAyMDgsIDY4LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNjgsIDY1LCA3OCwgNzEsIDEyOCwgCisgICAgNjgsIDY1LCA3OCwgMTk5LCA2OCwgNjUsIDc4LCA2OCwgNjUsIDEyOCwgNjgsIDY1LCA3NywgODAsIDEyOCwgNjgsIDY1LCAKKyAgICA3NywgMjA4LCA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNjgsIDY1LCA3NywgNzcsIDY1LCA4NCwgNjUsIAorICAgIDIwNiwgNjgsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA2NSwgNzcsIDY1LCA4MiwgCisgICAgODUsIDEyOCwgNjgsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNjUsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDY1LCAKKyAgICA3NiwgNjksIDIxMiwgNjgsIDY1LCA3NiwgNjgsIDY1LCAxMjgsIDY4LCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgNjgsIAorICAgIDY1LCA3NiwgNjUsIDg0LCAyMDAsIDY4LCA2NSwgNzYsIDY1LCA4NCwgMTI4LCA2OCwgNjUsIDczLCA4MiwgMTI4LCA2OCwgCisgICAgNjUsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDY1LCA3MiwgODksIDY1LCA2NSwgODUsIDgzLCA3MiwgNDUsIDUwLCAxMjgsIDY4LCAKKyAgICA2NSwgNzIsIDg5LCA2NSwgNjUsIDg1LCA4MywgNzIsIDEyOCwgNjgsIDY1LCA3MSwgODMsIDEyOCwgNjgsIDY1LCA3MSwgNzEsIAorICAgIDY5LCA4MiwgMTI4LCA2OCwgNjUsIDcxLCA2OSwgODMsIDcyLCAxMjgsIDY4LCA2NSwgNzEsIDY5LCA4MywgMjAwLCA2OCwgCisgICAgNjUsIDcxLCA2NiwgNjUsIDgzLCA3MywgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjUsIDcxLCA2NSwgMjE4LCA2OCwgNjUsIDcxLCAKKyAgICA2NSwgNzYsIDcxLCA2NSwgMTI4LCA2OCwgNjUsIDE5OSwgNjgsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2NSwgNjksIAorICAgIDE5OSwgNjgsIDY1LCA2OCwgMTI4LCA2OCwgNjUsIDE5NiwgNjgsIDY1LCA2NSwgODMsIDg1LCAxMjgsIDY4LCA2NSwgNjUsIAorICAgIDY4LCA3MiwgODUsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDcyLCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA3MSwgMTI4LCA2OCwgCisgICAgNDgsIDU0LCA1NSwgNzAsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY5LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA2OCwgMTI4LCAKKyAgICA2OCwgNDgsIDU0LCA1NSwgNjcsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY2LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA2NSwgCisgICAgMTI4LCA2OCwgNDgsIDU0LCA1NSwgMTI4LCA2OCwgNDgsIDU0LCA1NCwgMTI4LCA2OCwgNDgsIDU0LCA1MywgMTI4LCA2OCwgCisgICAgNDgsIDU0LCA1MiwgMTI4LCA2OCwgNDgsIDU0LCA1MSwgMTI4LCA2OCwgNDgsIDU0LCA1MCwgMTI4LCA2OCwgNDgsIDU0LCAKKyAgICA0OSwgMTI4LCA2OCwgNDgsIDU0LCA0OCwgMTI4LCA2OCwgNDgsIDUzLCA1NywgMTI4LCA2OCwgNDgsIDUzLCA1NiwgMTI4LCAKKyAgICA2OCwgNDgsIDUzLCA1NSwgMTI4LCA2OCwgNDgsIDUzLCA1NCwgMTI4LCA2OCwgNDgsIDUzLCA1MywgMTI4LCA2OCwgNDgsIAorICAgIDUzLCA1MiwgNjUsIDEyOCwgNjgsIDQ4LCA1MywgNTIsIDEyOCwgNjgsIDQ4LCA1MywgNTEsIDEyOCwgNjgsIDQ4LCA1MywgCisgICAgNTAsIDY1LCAxMjgsIDY4LCA0OCwgNTMsIDUwLCAxMjgsIDY4LCA0OCwgNTMsIDQ5LCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCAKKyAgICA3MywgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNzIsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDcxLCAxMjgsIDY4LCA0OCwgNTMsIAorICAgIDQ4LCA3MCwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjksIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY4LCAxMjgsIDY4LCA0OCwgCisgICAgNTMsIDQ4LCA2NywgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDY4LCAKKyAgICA0OCwgNTMsIDQ4LCAxMjgsIDY4LCA0OCwgNTIsIDU3LCAxMjgsIDY4LCA0OCwgNTIsIDU2LCA2NSwgMTI4LCA2OCwgNDgsIAorICAgIDUyLCA1NiwgMTI4LCA2OCwgNDgsIDUyLCA1NSwgMTI4LCA2OCwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNjgsIDQ4LCA1MiwgCisgICAgNTQsIDEyOCwgNjgsIDQ4LCA1MiwgNTMsIDEyOCwgNjgsIDQ4LCA1MiwgNTIsIDEyOCwgNjgsIDQ4LCA1MiwgNTEsIDEyOCwgCisgICAgNjgsIDQ4LCA1MiwgNTAsIDEyOCwgNjgsIDQ4LCA1MiwgNDksIDEyOCwgNjgsIDQ4LCA1MiwgNDgsIDEyOCwgNjgsIDQ4LCAKKyAgICA1MSwgNTcsIDEyOCwgNjgsIDQ4LCA1MSwgNTYsIDEyOCwgNjgsIDQ4LCA1MSwgNTUsIDEyOCwgNjgsIDQ4LCA1MSwgNTQsIAorICAgIDEyOCwgNjgsIDQ4LCA1MSwgNTMsIDEyOCwgNjgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY4LCA0OCwgNTEsIDUyLCAxMjgsIAorICAgIDY4LCA0OCwgNTEsIDUxLCAxMjgsIDY4LCA0OCwgNTEsIDUwLCAxMjgsIDY4LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA2OCwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA2OCwgNDgsIDUxLCA0OCwgMTI4LCA2OCwgNDgsIDUwLCA1NywgMTI4LCA2OCwgNDgsIDUwLCAKKyAgICA1NiwgMTI4LCA2OCwgNDgsIDUwLCA1NSwgNjUsIDEyOCwgNjgsIDQ4LCA1MCwgNTUsIDEyOCwgNjgsIDQ4LCA1MCwgNTQsIAorICAgIDEyOCwgNjgsIDQ4LCA1MCwgNTMsIDEyOCwgNjgsIDQ4LCA1MCwgNTIsIDEyOCwgNjgsIDQ4LCA1MCwgNTEsIDEyOCwgNjgsIAorICAgIDQ4LCA1MCwgNTAsIDEyOCwgNjgsIDQ4LCA1MCwgNDksIDEyOCwgNjgsIDQ4LCA1MCwgNDgsIDEyOCwgNjgsIDQ4LCA0OSwgCisgICAgNTcsIDEyOCwgNjgsIDQ4LCA0OSwgNTYsIDEyOCwgNjgsIDQ4LCA0OSwgNTUsIDEyOCwgNjgsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNjgsIDQ4LCA0OSwgNTMsIDEyOCwgNjgsIDQ4LCA0OSwgNTIsIDEyOCwgNjgsIDQ4LCA0OSwgNTEsIDEyOCwgNjgsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNjgsIDQ4LCA0OSwgNDksIDEyOCwgNjgsIDQ4LCA0OSwgNDgsIDEyOCwgNjgsIDQ4LCA0OCwgNTcsIAorICAgIDEyOCwgNjgsIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY4LCA0OCwgNDgsIDU2LCAxMjgsIDY4LCA0OCwgNDgsIDU1LCAxMjgsIAorICAgIDY4LCA0OCwgNDgsIDU0LCAxMjgsIDY4LCA0OCwgNDgsIDUzLCAxMjgsIDY4LCA0OCwgNDgsIDUyLCAxMjgsIDY4LCA0OCwgCisgICAgNDgsIDUxLCAxMjgsIDY4LCA0OCwgNDgsIDUwLCAxMjgsIDY4LCA0OCwgNDgsIDQ5LCAxMjgsIDY3LCA4OSwgODgsIDEyOCwgCisgICAgNjcsIDg5LCA4NCwgMTI4LCA2NywgODksIDgyLCA4OCwgMTI4LCA2NywgODksIDgyLCA2OSwgNzgsIDY1LCA3MywgMTk1LCAKKyAgICA2NywgODksIDgyLCAxMjgsIDY3LCA4OSwgODAsIDgyLCA3MywgNzksIDIxMiwgNjcsIDg5LCA4MCwgNjksIDgyLCA4NSwgODMsIAorICAgIDEyOCwgNjcsIDg5LCA4MCwgMTI4LCA2NywgODksIDc2LCA3MywgNzgsIDY4LCA4MiwgNzMsIDY3LCA3MywgODQsIDg5LCAKKyAgICAxMjgsIDY3LCA4OSwgNjUsIDEyOCwgNjcsIDg5LCAxMjgsIDY3LCA4NywgNzksIDc5LCAxMjgsIDY3LCA4NywgNzksIDEyOCwgCisgICAgNjcsIDg3LCA3MywgNzMsIDEyOCwgNjcsIDg3LCA3MywgMTI4LCA2NywgODcsIDY5LCA3OSwgODIsIDg0LCA3MiwgMTI4LCAKKyAgICA2NywgODcsIDY5LCAxMjgsIDY3LCA4NywgNjUsIDY1LCAxMjgsIDY3LCA4NSwgODgsIDEyOCwgNjcsIDg1LCA4NCwgMTI4LCAKKyAgICA2NywgODUsIDIxMiwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgNjksIDIxMCwgNjcsIDg1LCA4MiwgODgsIDEyOCwgNjcsIAorICAgIDg1LCA4MiwgODYsIDczLCA3OCwgMTk5LCA2NywgODUsIDgyLCA4NiwgNjksIDE5NiwgNjcsIDg1LCA4MiwgODYsIDY5LCAKKyAgICAxMjgsIDY3LCA4NSwgODIsIDg2LCAxOTcsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDg0LCAxMjgsIDY3LCA4NSwgODIsIAorICAgIDgyLCA2OSwgNzgsIDIxMiwgNjcsIDg1LCA4MiwgNzYsIDIxNywgNjcsIDg1LCA4MiwgNzYsIDEyOCwgNjcsIDg1LCA4MiwgCisgICAgMTI4LCA2NywgODUsIDgwLCAxMjgsIDY3LCA4NSwgMjA4LCA2NywgODUsIDc5LCA4OCwgMTI4LCA2NywgODUsIDc5LCA4MCwgCisgICAgMTI4LCA2NywgODUsIDc5LCAxMjgsIDY3LCA4NSwgMjA1LCA2NywgODUsIDY2LCA2OSwgNjgsIDEyOCwgNjcsIDg1LCA2NiwgCisgICAgMTk3LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDY3LCA4NSwgNjUsIDg0LCA4MiwgNzMsIDc2LCAKKyAgICA3NiwgMjA3LCA2NywgODUsIDEyOCwgNjcsIDgyLCA4OSwgODAsIDg0LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3MywgCisgICAgMTk1LCA2NywgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgMjA3LCA2NywgODIsIDc5LCA4MywgODMsIDczLCA3OCwgMTk5LCAKKyAgICA2NywgODIsIDc5LCA4MywgODMsIDcyLCA2NSwgODQsIDY3LCAyMDAsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDY4LCA0NSwgCisgICAgODQsIDY1LCA3MywgNzYsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDgzLCA2OSwgMTk2LCA2NywgODIsIDc5LCA4MywgODMsIDY2LCAKKyAgICA3OSwgNzgsIDY5LCA4MywgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDIxMSwgNjcsIAorICAgIDgyLCA3OSwgODAsIDEyOCwgNjcsIDgyLCA3OSwgNzMsIDg4LCAxMjgsIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgMjEyLCA2NywgODIsIDY5LCA2OCwgNzMsIDIxMiwgNjcsIDgyLCAKKyAgICA2OSwgNjUsIDg0LCA3MywgODYsIDE5NywgNjcsIDc5LCA4OCwgMTI4LCA2NywgNzksIDg3LCAxMjgsIDY3LCA3OSwgODYsIAorICAgIDY5LCA4MiwgMTI4LCA2NywgNzksIDg1LCA3OCwgODQsIDczLCA3OCwgMTk5LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgCisgICAgODMsIDczLCA3OCwgNzUsIDEyOCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIDY2LCA3OSwgODIsIDY5LCAxMjgsIDY3LCAKKyAgICA3OSwgODUsIDc4LCA2NywgNzMsIDIwNCwgNjcsIDc5LCA4NCwgMTI4LCA2NywgNzksIDgyLCA4MiwgNjksIDgzLCA4MCwgNzksIAorICAgIDc4LCA2OCwgMjExLCA2NywgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgMTI4LCA2NywgNzksIDgyLCA4MCwgODMsIDY5LCAKKyAgICAxMjgsIDY3LCA3OSwgODIsIDgwLCA3OSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDgyLCA3OSwgNzgsIAorICAgIDczLCA4MywgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCA4MywgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCAKKyAgICAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgMjEwLCA2NywgNzksIDgwLCA4OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIAorICAgIDY3LCA3OSwgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NywgNzksIDgwLCA4OSwgMTI4LCA2NywgNzksIDgwLCA4MiwgCisgICAgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgODAsIDEyOCwgNjcsIDc5LCA3OSwgMTI4LCA2NywgNzksIDc4LCAKKyAgICA4NiwgNjksIDgyLCA3MSwgNzMsIDc4LCAxOTksIDY3LCA3OSwgNzgsIDg0LCA4MiwgNzksIDIwNCwgNjcsIDc5LCA3OCwgODQsIAorICAgIDgyLCA2NSwgODIsIDczLCA2OSwgODQsIDg5LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNzksIDg1LCA4MiwgNjksIDE5NiwgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgCisgICAgMjEwLCA2NywgNzksIDc4LCA4NCwgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNjksIDc3LCAKKyAgICA4MCwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgMjExLCA2NywgNzksIAorICAgIDc4LCA4NCwgNjUsIDczLCA3OCwgNzMsIDc4LCAxOTksIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNjcsIDc5LCA3OCwgCisgICAgODQsIDY1LCA2NywgODQsIDEyOCwgNjcsIDc5LCA3OCwgODMsIDg0LCA2NSwgNzgsIDg0LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCAKKyAgICA4NCwgNjUsIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDgzLCA4NCwgNjUsIDc4LCA2NywgODksIDEyOCwgNjcsIDc5LCA3OCwgODMsIAorICAgIDc5LCA3OCwgNjUsIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDgzLCA2OSwgNjcsIDg1LCA4NCwgNzMsIDg2LCAxOTcsIDY3LCA3OSwgCisgICAgNzgsIDc0LCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA3NCwgODUsIDcxLCA2NSwgODQsIAorICAgIDE5NywgNjcsIDc5LCA3OCwgNzQsIDc5LCA3MywgNzgsIDczLCA3OCwgMTk5LCA2NywgNzksIDc4LCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDY3LCA3OSwgNzgsIDcxLCA4MiwgODUsIDY5LCA3OCwgMjEyLCA2NywgNzksIDc4LCA3MSwgODIsIDY1LCA4NCwgODUsIAorICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3OCwgNzAsIDc2LCA3MywgNjcsIDg0LCAxMjgsIDY3LCA3OSwgCisgICAgNzgsIDY3LCA2NSwgODYsIDY5LCA0NSwgODMsIDczLCA2OCwgNjksIDE5NiwgNjcsIDc5LCA3OCwgNjcsIDY1LCA4NiwgNjksIAorICAgIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY3LCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc5LCA4MywgCisgICAgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDY3LCAKKyAgICA3OSwgNzcsIDgwLCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCA3MywgCisgICAgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCA2OSwgNjgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCAKKyAgICA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjcsIDc5LCA3NywgODAsIDY1LCA4MiwgNjksIDEyOCwgNjcsIDc5LCA3NywgNzcsIAorICAgIDc5LCAyMDYsIDY3LCA3OSwgNzcsIDc3LCA2OSwgODIsIDY3LCA3MywgNjUsIDIwNCwgNjcsIDc5LCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDY3LCA3OSwgNzcsIDc3LCAxOTMsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA2NywgNzksIDc3LCA2OSwgODQsIAorICAgIDEyOCwgNjcsIDc5LCA3NywgNjYsIDEyOCwgNjcsIDc5LCA3NiwgODUsIDc3LCA3OCwgMTI4LCA2NywgNzksIDc2LCA3OSwgCisgICAgODIsIDEyOCwgNjcsIDc5LCA3NiwgNzYsIDEyOCwgNjcsIDc5LCA3MCwgNzAsIDczLCA3OCwgMTI4LCA2NywgNzksIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNjcsIDc5LCA2OCwgNjUsIDEyOCwgNjcsIDc5LCA2NSwgMTI4LCA2NywgNzksIDEyOCwgNjcsIDc3LCAKKyAgICAxMjgsIDY3LCAyMDUsIDY3LCA3NiwgODUsIDgzLCA4NCwgNjksIDIxMCwgNjcsIDc2LCA4NSwgNjYsIDQ1LCA4MywgODAsIAorICAgIDc5LCA3NSwgNjksIDE5NiwgNjcsIDc2LCA4NSwgNjYsIDEyOCwgNjcsIDc2LCA4NSwgMTk0LCA2NywgNzYsIDc5LCA4NSwgCisgICAgNjgsIDEyOCwgNjcsIDc2LCA3OSwgODUsIDE5NiwgNjcsIDc2LCA3OSwgODQsIDcyLCA2OSwgODMsIDEyOCwgNjcsIDc2LCAKKyAgICA3OSwgODQsIDcyLCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjcsIDc2LCA3OSwgODMsIAorICAgIDY5LCA2OCwgMTI4LCA2NywgNzYsIDc5LCA4MywgNjksIDE5NiwgNjcsIDc2LCA3OSwgODMsIDE5NywgNjcsIDc2LCA3OSwgCisgICAgNjcsIDc1LCA4NywgNzMsIDgzLCAxOTcsIDY3LCA3NiwgNzMsIDg2LCA3MywgODMsIDEyOCwgNjcsIDc2LCA3MywgNzgsIDcxLCAKKyAgICA3MywgNzgsIDE5OSwgNjcsIDc2LCA3MywgNzcsIDY1LCA2NywgODUsIDgzLCAxMjgsIDY3LCA3NiwgNzMsIDcwLCA3MCwgCisgICAgMTI4LCA2NywgNzYsIDczLCA2NywgNzUsIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDQ1LCA1MCwgMTI4LCA2NywgNzYsIDY5LCAKKyAgICA3MCwgNDUsIDQ5LCAxMjgsIDY3LCA3NiwgNjksIDcwLCAxMjgsIDY3LCA3NiwgNjksIDE5OCwgNjcsIDc2LCA2OSwgNjUsIAorICAgIDIxMCwgNjcsIDc2LCA2NSwgODcsIDEyOCwgNjcsIDc2LCA2NSwgNzgsIDEyOCwgNjcsIDczLCA4OCwgMTI4LCA2NywgNzMsIAorICAgIDg2LCA3MywgNzYsIDczLCA2NSwgNzgsIDEyOCwgNjcsIDczLCA4NCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCA3MCwgCisgICAgNzYsIDY5LCA4OCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCA3MCwgNzYsIDY5LCAyMTYsIDY3LCA3MywgODIsIDY3LCAKKyAgICA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDY3LCA3MywgODIsIAorICAgIDY3LCA3NiwgNjksIDEyOCwgNjcsIDczLCA4MCwgMTI4LCA2NywgNzMsIDczLCAxMjgsIDY3LCA3MywgNjksIDg4LCAxMjgsIAorICAgIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDY3LCAKKyAgICA3MywgNjksIDg1LCA2NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MywgCisgICAgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjcsIDczLCA2OSwgODUsIDE5NSwgNjcsIDczLCA2OSwgODQsIDEyOCwgNjcsIDczLCAKKyAgICA2OSwgODAsIDEyOCwgNjcsIDczLCA2OSwgMTI4LCA2NywgNzMsIDEyOCwgNjcsIDcyLCA4OSwgODgsIDEyOCwgNjcsIDcyLCAKKyAgICA4OSwgODQsIDEyOCwgNjcsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDY3LCA3MiwgODksIDgyLCAxMjgsIDY3LCA3MiwgODksIAorICAgIDgwLCAxMjgsIDY3LCA3MiwgODUsIDg4LCAxMjgsIDY3LCA3MiwgODUsIDgyLCA4OCwgMTI4LCA2NywgNzIsIDg1LCA4MiwgCisgICAgNjcsIDcyLCAxMjgsIDY3LCA3MiwgODUsIDgyLCAxMjgsIDY3LCA3MiwgODUsIDgwLCAxMjgsIDY3LCA3MiwgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODQsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDY3LCA3MiwgODUsIAorICAgIDc5LCAxMjgsIDY3LCA3MiwgODUsIDc2LCA2NSwgMTI4LCA2NywgNzIsIDg1LCAxMjgsIDY3LCA3MiwgODIsIDg5LCA4MywgCisgICAgNjUsIDc4LCA4NCwgNzIsIDY5LCA3NywgODUsIDc3LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3OCwgNzksIDg1LCAxMjgsIDY3LCAKKyAgICA3MiwgODIsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3NywgMTkzLCA2NywgNzIsIDgyLCA3OSwgCisgICAgMTkzLCA2NywgNzIsIDgyLCA3MywgODYsIDczLCAxMjgsIDY3LCA3MiwgNzksIDg4LCAxMjgsIDY3LCA3MiwgNzksIDg0LCAKKyAgICAxMjgsIDY3LCA3MiwgNzksIDgyLCA2OSwgODYsIDc3LCAxOTMsIDY3LCA3MiwgNzksIDgwLCAxMjgsIDY3LCA3MiwgNzksIAorICAgIDc1LCA2OSwgMTI4LCA2NywgNzIsIDc5LCA2OSwgMTI4LCA2NywgNzIsIDc5LCA2NSwgMTI4LCA2NywgNzIsIDc5LCAxMjgsIAorICAgIDY3LCA3MiwgMjA3LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgCisgICAgNjksIDg1LCA2NywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCAKKyAgICA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgCisgICAgNjksIDg1LCA3NywgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNjcsIDcyLCA3MywgODIsIDc5LCA3OCwgMTI4LCAKKyAgICA2NywgNzIsIDczLCA4MiwgNjksIDg0LCAxMjgsIDY3LCA3MiwgNzMsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDczLCA3OCwgNjksIAorICAgIDgzLCAxOTcsIDY3LCA3MiwgNzMsIDc4LCAxMjgsIDY3LCA3MiwgNzMsIDc2LCA3NiwgMjEzLCA2NywgNzIsIDczLCA3NiwgCisgICAgNjgsIDEyOCwgNjcsIDcyLCA3MywgNzYsIDEyOCwgNjcsIDcyLCA3MywgNzUsIDIwMSwgNjcsIDcyLCA3MywgNjksIDg1LCAKKyAgICA2NywgNzIsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgCisgICAgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAyMDAsIDY3LCA3MiwgNzMsIAorICAgIDEyOCwgNjcsIDcyLCAyMDEsIDY3LCA3MiwgNzIsIDY1LCAxMjgsIDY3LCA3MiwgNjksIDg4LCAxMjgsIDY3LCA3MiwgNjksIAorICAgIDg2LCA4MiwgNzksIDIwNiwgNjcsIDcyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA2OSwgODMsIDIxMSwgNjcsIDcyLCA2OSwgCisgICAgODAsIDEyOCwgNjcsIDcyLCA2OSwgMjA2LCA2NywgNzIsIDY5LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY5LCAKKyAgICA3MywgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNjcsIDcyLCA2OSwgNjksIDEyOCwgNjcsIDcyLCA2OSwgNjcsIDc1LCAxMjgsIAorICAgIDY3LCA3MiwgNjksIDY3LCAyMDMsIDY3LCA3MiwgMTk3LCA2NywgNzIsIDY1LCA4OCwgMTI4LCA2NywgNzIsIDY1LCA4NiwgCisgICAgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDY3LCA3MiwgNjUsIDg0LCA4NCwgNjUsIDg3LCA2NSwgMTI4LCA2NywgNzIsIDY1LCAKKyAgICA4NCwgMTI4LCA2NywgNzIsIDY1LCA4MiwgNzMsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDY1LCA4MiwgNzMsIDc5LCAyMTIsIAorICAgIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCAKKyAgICA2OSwgODIsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDEyOCwgNjcsIDcyLCA2NSwgODAsIDEyOCwgNjcsIDcyLCA2NSwgNzgsIAorICAgIDcxLCA2OSwgMTI4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDcyLCA2NSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgCisgICAgNzcsIDc1LCA3OSwgMTI4LCA2NywgNzIsIDY1LCA3NywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgNzcsIDczLCAKKyAgICA3NiwgNzMsIDEyOCwgNjcsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDczLCA3OCwgODMsIDEyOCwgNjcsIAorICAgIDcyLCA2NSwgNjgsIDY1LCAxMjgsIDY3LCA3MiwgNjUsIDE5NiwgNjcsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDY5LCA4OCwgCisgICAgMTI4LCA2NywgNjksIDgyLCA2OSwgODMsIDEyOCwgNjcsIDY5LCA4MiwgNjksIDc1LCAxMjgsIDY3LCA2OSwgODIsIDQ1LCAKKyAgICA4NywgNjUsIDEyOCwgNjcsIDY5LCA4MCwgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIAorICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCAKKyAgICA2OSwgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA2NywgNjksIDc5LCA3OCwgCisgICAgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIAorICAgIDcyLCA3MywgNjksIDg1LCA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCAKKyAgICA3MywgNjksIDg1LCA3NywgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNjcsIDY5LCA3OCwgODQsIDg1LCA4MiwgCisgICAgNzMsIDY1LCAyMDQsIDY3LCA2OSwgNzgsIDg0LCA4MiwgNjksIDc2LCA3MywgNzgsIDE5NywgNjcsIDY5LCA3OCwgODQsIDgyLCAKKyAgICA2OSwgMTk2LCA2NywgNjksIDc4LCA4NCwgODIsIDY5LCAxMjgsIDY3LCA2OSwgNzgsIDg0LCA4MiwgMTk3LCA2NywgNjksIAorICAgIDc4LCAxMjgsIDY3LCA2OSwgNzYsIDgzLCA3MywgODUsIDgzLCAxMjgsIDY3LCA2OSwgNzMsIDgyLCA4NCwgMTI4LCA2NywgCisgICAgNjksIDczLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA2NywgNjksIDY5LCAxMjgsIDY3LCA2OSwgNjgsIDczLCA3NiwgNzYsIDY1LCAKKyAgICAxMjgsIDY3LCA2OSwgNjgsIDczLCA3NiwgNzYsIDE5MywgNjcsIDY5LCA2OCwgMjAxLCA2NywgNjksIDY3LCA2OSwgNzUsIAorICAgIDEyOCwgNjcsIDY5LCA2NywgNjUsIDc1LCAxMjgsIDY3LCA2OSwgNjcsIDY1LCAyMDMsIDY3LCA2OSwgNjUsIDc2LCA2NywgCisgICAgMTI4LCA2NywgNjcsIDg1LCAxMjgsIDY3LCA2NywgNzksIDEyOCwgNjcsIDY3LCA3MywgMTI4LCA2NywgNjcsIDcyLCA4NSwgCisgICAgMTI4LCA2NywgNjcsIDcyLCA3OSwgMTI4LCA2NywgNjcsIDcyLCA3MywgMTI4LCA2NywgNjcsIDcyLCA2OSwgNjksIDEyOCwgCisgICAgNjcsIDY3LCA3MiwgNjksIDEyOCwgNjcsIDY3LCA3MiwgNjUsIDY1LCAxMjgsIDY3LCA2NywgNzIsIDY1LCAxMjgsIDY3LCAKKyAgICA2NywgNjksIDY5LCAxMjgsIDY3LCA2NywgNjksIDEyOCwgNjcsIDY3LCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA2NSwgMTI4LCAKKyAgICA2NywgNjUsIDg5LCA3OCwgMTI4LCA2NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NywgNjUsIDg4LCAxMjgsIAorICAgIDY3LCA2NSwgODYsIDY5LCAxMjgsIDY3LCA2NSwgODUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCA4NSwgNzYsIDY4LCA4MiwgCisgICAgNzksIDc4LCAxMjgsIDY3LCA2NSwgODUsIDY4LCA2NSwgMTI4LCA2NywgNjUsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDY3LCAKKyAgICA2NSwgODQsIDEyOCwgNjcsIDY1LCA4MywgODQsIDc2LCA2OSwgMTI4LCA2NywgNjUsIDgyLCA4OSwgODMsIDg0LCA3MywgNjUsIAorICAgIDIwNiwgNjcsIDY1LCA4MiwgODQsIDEyOCwgNjcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNjcsIDY1LCA4MiwgCisgICAgODAsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY3LCA2NSwgODIsIDc5LCA3OCwgMTI4LCA2NywgNjUsIDgyLCA3OSwgMjA2LCAKKyAgICA2NywgNjUsIDgyLCA3MywgMjAzLCA2NywgNjUsIDgyLCA3MywgNjUsIDIwNiwgNjcsIDY1LCA4MiwgNjksIDg0LCAxMjgsIAorICAgIDY3LCA2NSwgODIsIDY5LCAyMTIsIDY3LCA2NSwgODIsIDE5NywgNjcsIDY1LCA4MiwgMTI4LCA2NywgNjUsIDIxMCwgNjcsIAorICAgIDY1LCA4MCwgODQsIDczLCA4NiwgNjksIDEyOCwgNjcsIDY1LCA4MCwgODIsIDczLCA2NywgNzksIDgyLCA3OCwgMTI4LCA2NywgCisgICAgNjUsIDgwLCA3OSwgMTI4LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA2NywgNjUsIDc4LCA4NCwgNzMsIDc2LCAKKyAgICA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCA3OCwgMTk5LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIAorICAgIDc4LCA2OCwgODUsIDEyOCwgNjcsIDY1LCA3OCwgNjgsIDgyLCA2NSwgNjYsIDczLCA3OCwgNjgsIDIxMywgNjcsIDY1LCA3OCwgCisgICAgNjgsIDgyLCA2NSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDE5MywgNjcsIDY1LCA3OCwgNjcsIDY5LCA4MiwgMTI4LCAKKyAgICA2NywgNjUsIDc4LCA2NywgNjksIDc2LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCA3OCwgNjcsIDY5LCA3NiwgCisgICAgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDIwNCwgNjcsIDY1LCA3OCwgMTI4LCA2NywgNjUsIDc3LCA3OCwgODUsIDE5NSwgCisgICAgNjcsIDY1LCA3NiwgODksIDY1LCAxMjgsIDY3LCA2NSwgNzYsIDg5LCAxOTMsIDY3LCA2NSwgNzYsIDc2LCAxMjgsIDY3LCAKKyAgICA2NSwgNzYsIDY3LCAxMjgsIDY3LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCA2NywgNjUsIDY5LCA4MywgODUsIDgyLCA2NSwgCisgICAgMTI4LCA2NywgNjUsIDY4LCA4NSwgNjcsIDY5LCA4NSwgODMsIDEyOCwgNjcsIDY1LCA2OCwgMTkzLCA2NywgNjUsIDY1LCAKKyAgICA3OCwgNzEsIDEyOCwgNjcsIDY1LCA2NSwgNzMsIDEyOCwgNjcsIDE5MywgNjcsIDQ4LCA1MCwgNTIsIDEyOCwgNjcsIDQ4LCAKKyAgICA1MCwgNTEsIDEyOCwgNjcsIDQ4LCA1MCwgNTAsIDEyOCwgNjcsIDQ4LCA1MCwgNDksIDEyOCwgNjcsIDQ4LCA1MCwgNDgsIAorICAgIDEyOCwgNjcsIDQ4LCA0OSwgNTcsIDEyOCwgNjcsIDQ4LCA0OSwgNTYsIDEyOCwgNjcsIDQ4LCA0OSwgNTUsIDEyOCwgNjcsIAorICAgIDQ4LCA0OSwgNTQsIDEyOCwgNjcsIDQ4LCA0OSwgNTMsIDEyOCwgNjcsIDQ4LCA0OSwgNTIsIDEyOCwgNjcsIDQ4LCA0OSwgCisgICAgNTEsIDEyOCwgNjcsIDQ4LCA0OSwgNTAsIDEyOCwgNjcsIDQ4LCA0OSwgNDksIDEyOCwgNjcsIDQ4LCA0OSwgNDgsIDY1LCAKKyAgICAxMjgsIDY3LCA0OCwgNDksIDQ4LCAxMjgsIDY3LCA0OCwgNDgsIDU3LCAxMjgsIDY3LCA0OCwgNDgsIDU2LCAxMjgsIDY3LCAKKyAgICA0OCwgNDgsIDU1LCAxMjgsIDY3LCA0OCwgNDgsIDU0LCAxMjgsIDY3LCA0OCwgNDgsIDUzLCAxMjgsIDY3LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDY3LCA0OCwgNDgsIDUxLCAxMjgsIDY3LCA0OCwgNDgsIDUwLCA2NywgMTI4LCA2NywgNDgsIDQ4LCA1MCwgCisgICAgNjYsIDEyOCwgNjcsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDY3LCA0OCwgNDgsIDUwLCAxMjgsIDY3LCA0OCwgNDgsIDQ5LCAKKyAgICAxMjgsIDY3LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA2NywgNDUsIDUxLCA1NywgCisgICAgMTI4LCA2NywgNDUsIDQ5LCA1NiwgMTI4LCA2NiwgOTAsIDg1LCA3OCwgMTk5LCA2NiwgOTAsIDcyLCAyMDEsIDY2LCA4OSwgCisgICAgNjksIDc2LCA3OSwgODIsIDg1LCA4MywgODMsIDczLCA2NSwgNzgsIDQ1LCA4NSwgNzUsIDgyLCA2NSwgNzMsIDc4LCA3MywgCisgICAgNjUsIDIwNiwgNjYsIDIxNywgNjYsIDg4LCA3MSwgMTI4LCA2NiwgODcsIDczLCAxMjgsIDY2LCA4NywgNjksIDY5LCAxMjgsIAorICAgIDY2LCA4NywgNjksIDEyOCwgNjYsIDg3LCA2NSwgMTI4LCA2NiwgODUsIDg1LCA3NywgNzMsIDgzLCA3MiwgMTI4LCA2NiwgCisgICAgODUsIDIxMiwgNjYsIDg1LCA4MywgODMsIDg5LCA2OSwgODIsIDg1LCAxMjgsIDY2LCA4NSwgODIsIDIxMywgNjYsIDg1LCAKKyAgICA4MiwgNTAsIDEyOCwgNjYsIDg1LCAyMTAsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA4NSwgNzksIDgwLCAxMjgsIDY2LCAKKyAgICA4NSwgNzksIDEyOCwgNjYsIDg1LCA3NywgODAsIDIxNywgNjYsIDg1LCA3NiwgODUsIDcxLCAxMjgsIDY2LCA4NSwgNzYsIAorICAgIDg1LCAxOTksIDY2LCA4NSwgNzYsIDc2LCA4MywgNjksIDg5LCA2OSwgMTI4LCA2NiwgODUsIDc2LCA3NiwgMjExLCA2NiwgCisgICAgODUsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDY2LCA4NSwgNzYsIDc2LCA2OSwgMjEyLCA2NiwgODUsIDc2LCA3NiwgMTI4LCAKKyAgICA2NiwgODUsIDc1LCA4OSwgMTI4LCA2NiwgODUsIDcyLCA3MywgMTk2LCA2NiwgODUsIDcxLCA3MywgNzgsIDY5LCA4MywgCisgICAgMTk3LCA2NiwgODUsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDY2LCA4MywgODQsIDY1LCA4MiwgMTI4LCA2NiwgODMsIDc1LCAKKyAgICA4NSwgMjEwLCA2NiwgODMsIDc1LCA2NSwgMTczLCA2NiwgODMsIDY4LCA4NSwgMjExLCA2NiwgODIsIDg1LCA4MywgNzIsIAorICAgIDEyOCwgNjYsIDgyLCA4NSwgODMsIDIwMCwgNjYsIDgyLCA3OSwgNzgsIDkwLCA2OSwgMTI4LCA2NiwgODIsIDc5LCA3NSwgCisgICAgNjksIDIwNiwgNjYsIDgyLCA3OSwgNjUsIDE5NiwgNjYsIDgyLCA3MywgODMsIDg0LCA3NiwgNjksIDEyOCwgNjYsIDgyLCAKKyAgICA3MywgNjgsIDcxLCAxOTcsIDY2LCA4MiwgNjksIDg2LCA3MywgODMsIDEyOCwgNjYsIDgyLCA2OSwgODYsIDY5LCA0NSwgNzcsIAorICAgIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NiwgODIsIDY5LCA4NiwgMTk3LCA2NiwgODIsIDY5LCA2NSwgODQsIDIwMCwgCisgICAgNjYsIDgyLCA2OSwgNjUsIDc1LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA2NiwgODIsIDY4LCAxOTMsIDY2LCAKKyAgICA4MiwgNjUsIDc4LCA2NywgNzIsIDczLCA3OCwgMTk5LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCAxMjgsIDY2LCA4MiwgNjUsIAorICAgIDc4LCA2NywgMjAwLCA2NiwgODIsIDY1LCA3NSwgNjcsIDY5LCA4NCwgMTI4LCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgCisgICAgNjksIDE5NiwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgMjEyLCA2NiwgODIsIDY1LCA2NywgNjksIDEyOCwgNjYsIDgxLCAKKyAgICAxMjgsIDY2LCA3OSwgODcsIDg0LCA3MywgNjksIDEyOCwgNjYsIDc5LCA4NywgODQsIDczLCAxOTcsIDY2LCA3OSwgODcsIAorICAgIDEyOCwgNjYsIDc5LCAyMTUsIDY2LCA3OSwgODUsIDc4LCA2OCwgNjUsIDgyLCAyMTcsIDY2LCA3OSwgODQsIDg0LCA3OSwgCisgICAgNzcsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIDY2LCA3OSwgODQsIDg0LCA3OSwgNzcsIDEyOCwgNjYsIDc5LCAKKyAgICA4NCwgODQsIDc5LCAyMDUsIDY2LCA3OSwgODIsIDg1LCA4NCwgNzksIDEyOCwgNjYsIDc5LCA3OSwgNzcsIDY5LCA4MiwgNjUsIAorICAgIDc4LCA3MSwgMTI4LCA2NiwgNzksIDc4LCA2OSwgMTI4LCA2NiwgNzksIDc2LCAyMTIsIDY2LCA3OSwgNjgsIDg5LCAxMjgsIAorICAgIDY2LCA3OSwgNjUsIDgyLCAxMjgsIDY2LCA3OSwgNjUsIDEyOCwgNjYsIDc2LCA4NSwgNjksIDEyOCwgNjYsIDc2LCA3OSwgCisgICAgNzksIDY4LCAxMjgsIDY2LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA2NiwgNzYsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY2LCAKKyAgICA3NiwgNjUsIDc4LCA3NSwgMTI4LCA2NiwgNzYsIDY1LCA3OCwgMjAzLCA2NiwgNzYsIDY1LCA2OCwgMTk3LCA2NiwgNzYsIAorICAgIDY1LCA2NywgNzUsIDcwLCA3OSwgNzksIDIxMiwgNjYsIDc2LCA2NSwgNjcsIDc1LCA0NSwgNzYsIDY5LCA4NCwgODQsIDY5LCAKKyAgICAyMTAsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCA2OSwgMTk2LCA2NiwgNzYsIAorICAgIDY1LCA2NywgNzUsIDEyOCwgNjYsIDc1LCA2NSwgMTczLCA2NiwgNzMsIDg0LCA4NCwgNjksIDgyLCAxMjgsIDY2LCA3MywgCisgICAgODQsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA3NywgNzMsIDc2LCA3NiwgNjUsIDIwMCwgNjYsIDczLCA4MywgNzIsIDc5LCAKKyAgICA4MCwgMTI4LCA2NiwgNzMsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzgsIDE5OSwgNjYsIDczLCA4MywgNjUsIDcyLCAxMjgsIAorICAgIDY2LCA3MywgODIsIDg1LCAxMjgsIDY2LCA3MywgODIsIDcxLCA2NSwgMTI4LCA2NiwgNzMsIDgyLCA2OCwgMTI4LCA2NiwgCisgICAgNzMsIDc5LCA3MiwgNjUsIDkwLCA2NSwgODIsIDE5NiwgNjYsIDczLCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDY2LCAKKyAgICA3MywgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjYsIDczLCA3OCwgNjgsIDczLCAxMjgsIDY2LCA3MywgNzgsIDY1LCA4MiwgCisgICAgMjE3LCA2NiwgNzMsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA2NiwgNzMsIDcxLCAxMjgsIDY2LCA3MywgMTk5LCA2NiwgCisgICAgNzMsIDY5LCA4NCwgMTI4LCA2NiwgNzMsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2NiwgNzMsIDY2LCA3NiwgNjksIDQ1LCAKKyAgICA2NywgODIsIDY5LCAxOTcsIDY2LCA3MywgNjYsIDEyOCwgNjYsIDIwMSwgNjYsIDcyLCA4NSwgMTI4LCA2NiwgNzIsIDc5LCAKKyAgICA3OSwgMTI4LCA2NiwgNzIsIDc5LCAxMjgsIDY2LCA3MiwgNzMsIDEyOCwgNjYsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDY2LCAKKyAgICA3MiwgNjksIDY5LCAxMjgsIDY2LCA3MiwgNjksIDEyOCwgNjYsIDcyLCA2NSwgNzcsIDEyOCwgNjYsIDcyLCA2NSwgMTI4LCAKKyAgICA2NiwgNjksIDg5LCA4OSwgNjUsIDc2LCAxMjgsIDY2LCA2OSwgODgsIDEyOCwgNjYsIDY5LCA4NiwgNjksIDgyLCA2NSwgNzEsIAorICAgIDY5LCAxMjgsIDY2LCA2OSwgODQsIDg3LCA2OSwgNjksIDc4LCAxMjgsIDY2LCA2OSwgODQsIDg3LCA2OSwgNjksIDIwNiwgCisgICAgNjYsIDY5LCA4NCwgNzIsIDEyOCwgNjYsIDY5LCA4NCwgNjUsIDEyOCwgNjYsIDY5LCA4NCwgMTkzLCA2NiwgNjksIDg0LCAKKyAgICAxMjgsIDY2LCA2OSwgMjEyLCA2NiwgNjksIDgzLCA3MywgNjgsIDE5NywgNjYsIDY5LCA4MiwgNzUsIDY1LCA3OCwgNjUsIAorICAgIDIwNiwgNjYsIDY5LCA4MiwgNjYsIDY5LCAyMTAsIDY2LCA2OSwgODAsIDEyOCwgNjYsIDY5LCA3OSwgODIsIDE5NSwgNjYsIAorICAgIDY5LCA3OCwgOTAsIDY5LCA3OCwgMTk3LCA2NiwgNjksIDc4LCA2OCwgNjksIDEyOCwgNjYsIDY5LCA3OCwgNjgsIDEyOCwgCisgICAgNjYsIDY5LCAyMDYsIDY2LCA2OSwgNzYsIDg0LCAxMjgsIDY2LCA2OSwgNzYsIDIxMiwgNjYsIDY5LCA3NiwgNzksIDIxNSwgCisgICAgNjYsIDY5LCA3NiwgNzYsIDEyOCwgNjYsIDY5LCA3NiwgMjA0LCA2NiwgNjksIDc2LCA3MSwgODQsIDcyLCA3OSwgMjEwLCAKKyAgICA2NiwgNjksIDczLCA4NCwgNzIsIDEyOCwgNjYsIDY5LCA3MiwgNzMsIDc4LCAxOTYsIDY2LCA2OSwgNzIsIDY5LCA3MiwgCisgICAgMTI4LCA2NiwgNjksIDcyLCA2OSwgMjAwLCA2NiwgNjksIDcyLCAxMjgsIDY2LCA2OSwgMjAwLCA2NiwgNjksIDcxLCA3MywgCisgICAgNzgsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY2LCA2OSwgNzEsIDczLCAyMDYsIDY2LCA2OSwgNzAsIDc5LCA4MiwgMTk3LCAKKyAgICA2NiwgNjksIDY5LCA4NCwgNjUsIDEyOCwgNjYsIDY5LCA2OSwgNzIsIDczLCA4NiwgNjksIDEyOCwgNjYsIDY5LCA2OSwgNzIsIAorICAgIDEyOCwgNjYsIDY5LCA2OSwgMjAwLCA2NiwgNjksIDY3LCA2NSwgODUsIDgzLCA2OSwgMTI4LCA2NiwgNjksIDY1LCA4NiwgCisgICAgNjksIDIxMCwgNjYsIDY5LCA2NSwgODQsIDEyOCwgNjYsIDY5LCA2NSwgNzgsIDEyOCwgNjYsIDY5LCA2NSwgNzcsIDY5LCAKKyAgICAxOTYsIDY2LCA2NywgNjUsIDY4LCAxMjgsIDY2LCA2NywgNjUsIDE5NiwgNjYsIDY2LCA4OSwgODgsIDEyOCwgNjYsIDY2LCAKKyAgICA4OSwgODQsIDEyOCwgNjYsIDY2LCA4OSwgODAsIDEyOCwgNjYsIDY2LCA4OSwgMTI4LCA2NiwgNjYsIDg1LCA4OCwgMTI4LCAKKyAgICA2NiwgNjYsIDg1LCA4NCwgMTI4LCA2NiwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNjYsIDY2LCA4NSwgODIsIDEyOCwgNjYsIAorICAgIDY2LCA4NSwgODAsIDEyOCwgNjYsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA2NiwgODUsIDc5LCA4MCwgMTI4LCA2NiwgCisgICAgNjYsIDg1LCA3OSwgMTI4LCA2NiwgNjYsIDg1LCAxMjgsIDY2LCA2NiwgNzksIDg4LCAxMjgsIDY2LCA2NiwgNzksIDg0LCAKKyAgICAxMjgsIDY2LCA2NiwgNzksIDgwLCAxMjgsIDY2LCA2NiwgNzksIDEyOCwgNjYsIDY2LCA3MywgODgsIDEyOCwgNjYsIDY2LCAKKyAgICA3MywgODQsIDEyOCwgNjYsIDY2LCA3MywgODAsIDEyOCwgNjYsIDY2LCA3MywgNjksIDg4LCAxMjgsIDY2LCA2NiwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgODAsIDEyOCwgNjYsIDY2LCA3MywgNjksIDEyOCwgNjYsIDY2LCA3MywgCisgICAgMTI4LCA2NiwgNjYsIDY5LCA4OCwgMTI4LCA2NiwgNjYsIDY5LCA4MCwgMTI4LCA2NiwgNjYsIDY5LCAxMjgsIDY2LCA2NiwgCisgICAgNjUsIDg4LCAxMjgsIDY2LCA2NiwgNjUsIDg0LCAxMjgsIDY2LCA2NiwgNjUsIDgwLCAxMjgsIDY2LCA2NiwgNjUsIDEyOCwgCisgICAgNjYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjYsIDY1LCA4NSwgMTI4LCA2NiwgNjUsIDg0LCA3MiwgODQsIDg1LCAKKyAgICA2NiwgMTI4LCA2NiwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA2NiwgNjUsIDgzLCA4MywgNjUsIAorICAgIDEyOCwgNjYsIDY1LCA4MywgNzIsIDc1LCA3MywgMjEwLCA2NiwgNjUsIDgzLCA3MiwgMTI4LCA2NiwgNjUsIDgzLCA2OSwgCisgICAgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNjYsIDY1LCA4MywgNjksIDEyOCwgNjYsIDY1LCA4MywgMTk3LCA2NiwgNjUsIDgyLCAKKyAgICA4MywgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNzMsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDc1LCA3MiwgCisgICAgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDY5LCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk3LCA2NiwgNjUsIDgyLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgMTI4LCA2NiwgNjUsIDgyLCA3NiwgNjksIDg5LCAxMjgsIDY2LCA2NSwgODIsIDczLCA4OSwgNzksIAorICAgIDc5LCA4MywgNjUsIDc4LCAxMjgsIDY2LCA2NSwgODIsIDY1LCA1MCwgMTI4LCA2NiwgNjUsIDIxMCwgNjYsIDY1LCA3OCwgCisgICAgODQsIDc5LCA2NywgMTI4LCA2NiwgNjUsIDc4LCAyMDMsIDY2LCA2NSwgNzgsIDY4LCAxMjgsIDY2LCA2NSwgNzgsIDUwLCAKKyAgICAxMjgsIDY2LCA2NSwgNzgsIDE3OCwgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgODMsIDEyOCwgNjYsIDY1LCA3NywgNjYsIAorICAgIDc5LCA3OSwgMTI4LCA2NiwgNjUsIDc2LCA4NSwgNjgsIDY1LCAxMjgsIDY2LCA2NSwgNzYsIDc2LCA3OSwgMjEyLCA2NiwgCisgICAgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NiwgNjUsIDc2LCA2NSwgNzEsIAorICAgIDEyOCwgNjYsIDY1LCA3NiwgMTI4LCA2NiwgNjUsIDIwNCwgNjYsIDY1LCA3MywgODIsIDc1LCA2NSwgNzgsIDEyOCwgNjYsIAorICAgIDY1LCA3MywgNzcsIDY1LCA3MywgMTI4LCA2NiwgNjUsIDcyLCA4NCwgMTI4LCA2NiwgNjUsIDcyLCA3MywgODIsIDcxLCA3OSwgCisgICAgNzcsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDY2LCA2NSwgNzIsIDY1LCA4MiwgNTAsIDEyOCwgNjYsIDY1LCA3MSwgNjUsIAorICAgIDEyOCwgNjYsIDY1LCA3MSwgNTEsIDEyOCwgNjYsIDY1LCAxOTksIDY2LCA2NSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNjYsIAorICAgIDY1LCA2OCwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCA2NSwgNjcsIDc1LCA4MywgCisgICAgNzYsIDY1LCA4MywgNzIsIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDY2LCA2NSwgNjcsIDc1LCAKKyAgICA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDY2LCA2NSwgNjcsIDc1LCAxMjgsIDY2LCA2NSwgNjcsIDIwMywgNjYsIAorICAgIDY1LCA2NSwgODIsIDY5LCA4MiwgODUsIDEyOCwgNjYsIDUxLCA0OCwgNTMsIDEyOCwgNjYsIDUwLCA1MywgNTcsIDEyOCwgCisgICAgNjYsIDUwLCA1MywgNTYsIDEyOCwgNjYsIDUwLCA1MywgNTUsIDEyOCwgNjYsIDUwLCA1MywgNTQsIDEyOCwgNjYsIDUwLCAKKyAgICA1MywgNTMsIDEyOCwgNjYsIDUwLCA1MywgMTgwLCA2NiwgNTAsIDUzLCA1MSwgMTI4LCA2NiwgNTAsIDUzLCA1MCwgMTI4LCAKKyAgICA2NiwgNTAsIDUzLCA0OSwgMTI4LCA2NiwgNTAsIDUzLCA0OCwgMTI4LCA2NiwgNTAsIDUyLCA1NywgMTI4LCA2NiwgNTAsIAorICAgIDUyLCA1NiwgMTI4LCA2NiwgNTAsIDUyLCAxODMsIDY2LCA1MCwgNTIsIDU0LCAxMjgsIDY2LCA1MCwgNTIsIDUzLCAxMjgsIAorICAgIDY2LCA1MCwgNTIsIDE3OSwgNjYsIDUwLCA1MiwgMTc4LCA2NiwgNTAsIDUyLCAxNzcsIDY2LCA1MCwgNTIsIDE3NiwgNjYsIAorICAgIDUwLCA1MSwgNTQsIDEyOCwgNjYsIDUwLCA1MSwgNTIsIDEyOCwgNjYsIDUwLCA1MSwgMTc5LCA2NiwgNTAsIDUxLCA1MCwgCisgICAgMTI4LCA2NiwgNTAsIDUxLCAxNzcsIDY2LCA1MCwgNTEsIDE3NiwgNjYsIDUwLCA1MCwgNTcsIDEyOCwgNjYsIDUwLCA1MCwgCisgICAgNTYsIDEyOCwgNjYsIDUwLCA1MCwgNTUsIDEyOCwgNjYsIDUwLCA1MCwgNTQsIDEyOCwgNjYsIDUwLCA1MCwgMTgxLCA2NiwgCisgICAgNTAsIDUwLCA1MCwgMTI4LCA2NiwgNTAsIDUwLCA0OSwgMTI4LCA2NiwgNTAsIDUwLCAxNzYsIDY2LCA1MCwgNDksIDU3LCAKKyAgICAxMjgsIDY2LCA1MCwgNDksIDU2LCAxMjgsIDY2LCA1MCwgNDksIDU1LCAxMjgsIDY2LCA1MCwgNDksIDU0LCAxMjgsIDY2LCAKKyAgICA1MCwgNDksIDUzLCAxMjgsIDY2LCA1MCwgNDksIDUyLCAxMjgsIDY2LCA1MCwgNDksIDUxLCAxMjgsIDY2LCA1MCwgNDksIAorICAgIDUwLCAxMjgsIDY2LCA1MCwgNDksIDQ5LCAxMjgsIDY2LCA1MCwgNDksIDQ4LCAxMjgsIDY2LCA1MCwgNDgsIDU3LCAxMjgsIAorICAgIDY2LCA1MCwgNDgsIDU2LCAxMjgsIDY2LCA1MCwgNDgsIDU1LCAxMjgsIDY2LCA1MCwgNDgsIDU0LCAxMjgsIDY2LCA1MCwgCisgICAgNDgsIDUzLCAxMjgsIDY2LCA1MCwgNDgsIDUyLCAxMjgsIDY2LCA1MCwgNDgsIDUxLCAxMjgsIDY2LCA1MCwgNDgsIDUwLCAKKyAgICAxMjgsIDY2LCA1MCwgNDgsIDQ5LCAxMjgsIDY2LCA1MCwgNDgsIDQ4LCAxMjgsIDY2LCA0OSwgNTcsIDE3NywgNjYsIDQ5LCAKKyAgICA1NywgNDgsIDEyOCwgNjYsIDQ5LCA1NiwgNTcsIDEyOCwgNjYsIDQ5LCA1NiwgNTMsIDEyOCwgNjYsIDQ5LCA1NiwgNTIsIAorICAgIDEyOCwgNjYsIDQ5LCA1NiwgNTEsIDEyOCwgNjYsIDQ5LCA1NiwgNTAsIDEyOCwgNjYsIDQ5LCA1NiwgNDksIDEyOCwgNjYsIAorICAgIDQ5LCA1NiwgNDgsIDEyOCwgNjYsIDQ5LCA1NSwgNTcsIDEyOCwgNjYsIDQ5LCA1NSwgNTYsIDEyOCwgNjYsIDQ5LCA1NSwgCisgICAgNTUsIDEyOCwgNjYsIDQ5LCA1NSwgMTgyLCA2NiwgNDksIDU1LCA1MiwgMTI4LCA2NiwgNDksIDU1LCAxNzksIDY2LCA0OSwgCisgICAgNTUsIDUwLCAxMjgsIDY2LCA0OSwgNTUsIDQ5LCAxMjgsIDY2LCA0OSwgNTUsIDQ4LCAxMjgsIDY2LCA0OSwgNTQsIDU3LCAKKyAgICAxMjgsIDY2LCA0OSwgNTQsIDU2LCAxMjgsIDY2LCA0OSwgNTQsIDU1LCAxMjgsIDY2LCA0OSwgNTQsIDU0LCAxMjgsIDY2LCAKKyAgICA0OSwgNTQsIDUzLCAxMjgsIDY2LCA0OSwgNTQsIDUyLCAxMjgsIDY2LCA0OSwgNTQsIDE3OSwgNjYsIDQ5LCA1NCwgMTc4LCAKKyAgICA2NiwgNDksIDU0LCA0OSwgMTI4LCA2NiwgNDksIDU0LCA0OCwgMTI4LCA2NiwgNDksIDUzLCAxODUsIDY2LCA0OSwgNTMsIAorICAgIDU2LCAxMjgsIDY2LCA0OSwgNTMsIDU1LCAxMjgsIDY2LCA0OSwgNTMsIDE4MiwgNjYsIDQ5LCA1MywgNTMsIDEyOCwgNjYsIAorICAgIDQ5LCA1MywgNTIsIDEyOCwgNjYsIDQ5LCA1MywgNTEsIDEyOCwgNjYsIDQ5LCA1MywgNTAsIDEyOCwgNjYsIDQ5LCA1MywgCisgICAgMTc3LCA2NiwgNDksIDUzLCA0OCwgMTI4LCA2NiwgNDksIDUyLCA1NCwgMTI4LCA2NiwgNDksIDUyLCAxODEsIDY2LCA0OSwgCisgICAgNTIsIDUwLCAxMjgsIDY2LCA0OSwgNTIsIDE3NywgNjYsIDQ5LCA1MiwgMTc2LCA2NiwgNDksIDUxLCAxODEsIDY2LCA0OSwgCisgICAgNTEsIDE3OSwgNjYsIDQ5LCA1MSwgNTAsIDEyOCwgNjYsIDQ5LCA1MSwgMTc3LCA2NiwgNDksIDUxLCAxNzYsIDY2LCA0OSwgCisgICAgNTAsIDE4NCwgNjYsIDQ5LCA1MCwgMTgzLCA2NiwgNDksIDUwLCAxODEsIDY2LCA0OSwgNTAsIDE3OSwgNjYsIDQ5LCA1MCwgCisgICAgMTc4LCA2NiwgNDksIDUwLCAxNzcsIDY2LCA0OSwgNTAsIDE3NiwgNjYsIDQ5LCA0OCwgNTcsIDIwNSwgNjYsIDQ5LCA0OCwgCisgICAgNTcsIDE5OCwgNjYsIDQ5LCA0OCwgNTYsIDIwNSwgNjYsIDQ5LCA0OCwgNTYsIDE5OCwgNjYsIDQ5LCA0OCwgNTUsIDIwNSwgCisgICAgNjYsIDQ5LCA0OCwgNTUsIDE5OCwgNjYsIDQ5LCA0OCwgNTQsIDIwNSwgNjYsIDQ5LCA0OCwgNTQsIDE5OCwgNjYsIDQ5LCAKKyAgICA0OCwgNTMsIDIwNSwgNjYsIDQ5LCA0OCwgNTMsIDE5OCwgNjYsIDQ5LCA0OCwgMTgxLCA2NiwgNDksIDQ4LCAxODAsIDY2LCAKKyAgICA0OSwgNDgsIDE3OCwgNjYsIDQ5LCA0OCwgMTc2LCA2NiwgNDgsIDU3LCAxNzcsIDY2LCA0OCwgNTcsIDE3NiwgNjYsIDQ4LCAKKyAgICA1NiwgNTcsIDEyOCwgNjYsIDQ4LCA1NiwgMTgzLCA2NiwgNDgsIDU2LCA1NCwgMTI4LCA2NiwgNDgsIDU2LCAxODEsIDY2LCAKKyAgICA0OCwgNTYsIDUxLCAxMjgsIDY2LCA0OCwgNTYsIDUwLCAxMjgsIDY2LCA0OCwgNTYsIDE3NywgNjYsIDQ4LCA1NiwgMTc2LCAKKyAgICA2NiwgNDgsIDU1LCA1NywgMTI4LCA2NiwgNDgsIDU1LCAxODQsIDY2LCA0OCwgNTUsIDE4MywgNjYsIDQ4LCA1NSwgMTgyLCAKKyAgICA2NiwgNDgsIDU1LCAxODEsIDY2LCA0OCwgNTUsIDE4MCwgNjYsIDQ4LCA1NSwgMTc5LCA2NiwgNDgsIDU1LCAxNzgsIDY2LCAKKyAgICA0OCwgNTUsIDE3NywgNjYsIDQ4LCA1NSwgMTc2LCA2NiwgNDgsIDU0LCAxODUsIDY2LCA0OCwgNTQsIDE4NCwgNjYsIDQ4LCAKKyAgICA1NCwgMTgzLCA2NiwgNDgsIDU0LCAxODIsIDY2LCA0OCwgNTQsIDE4MSwgNjYsIDQ4LCA1NCwgNTIsIDEyOCwgNjYsIDQ4LCAKKyAgICA1NCwgNTEsIDEyOCwgNjYsIDQ4LCA1NCwgMTc4LCA2NiwgNDgsIDU0LCAxNzcsIDY2LCA0OCwgNTQsIDE3NiwgNjYsIDQ4LCAKKyAgICA1MywgMTg1LCA2NiwgNDgsIDUzLCAxODQsIDY2LCA0OCwgNTMsIDE4MywgNjYsIDQ4LCA1MywgNTQsIDEyOCwgNjYsIDQ4LCAKKyAgICA1MywgMTgxLCA2NiwgNDgsIDUzLCAxODAsIDY2LCA0OCwgNTMsIDE3OSwgNjYsIDQ4LCA1MywgMTc4LCA2NiwgNDgsIDUzLCAKKyAgICAxNzcsIDY2LCA0OCwgNTMsIDE3NiwgNjYsIDQ4LCA1MiwgNTcsIDEyOCwgNjYsIDQ4LCA1MiwgMTg0LCA2NiwgNDgsIDUyLCAKKyAgICA1NSwgMTI4LCA2NiwgNDgsIDUyLCAxODIsIDY2LCA0OCwgNTIsIDE4MSwgNjYsIDQ4LCA1MiwgMTgwLCA2NiwgNDgsIDUyLCAKKyAgICAxNzksIDY2LCA0OCwgNTIsIDE3OCwgNjYsIDQ4LCA1MiwgMTc3LCA2NiwgNDgsIDUyLCAxNzYsIDY2LCA0OCwgNTEsIDE4NSwgCisgICAgNjYsIDQ4LCA1MSwgMTg0LCA2NiwgNDgsIDUxLCAxODMsIDY2LCA0OCwgNTEsIDE4MiwgNjYsIDQ4LCA1MSwgNTIsIDEyOCwgCisgICAgNjYsIDQ4LCA1MSwgMTc5LCA2NiwgNDgsIDUxLCAxNzgsIDY2LCA0OCwgNTEsIDE3NywgNjYsIDQ4LCA1MSwgMTc2LCA2NiwgCisgICAgNDgsIDUwLCAxODUsIDY2LCA0OCwgNTAsIDE4NCwgNjYsIDQ4LCA1MCwgMTgzLCA2NiwgNDgsIDUwLCAxODIsIDY2LCA0OCwgCisgICAgNTAsIDE4MSwgNjYsIDQ4LCA1MCwgMTgwLCA2NiwgNDgsIDUwLCAxNzksIDY2LCA0OCwgNTAsIDUwLCAxMjgsIDY2LCA0OCwgCisgICAgNTAsIDE3NywgNjYsIDQ4LCA1MCwgMTc2LCA2NiwgNDgsIDQ5LCA1NywgMTI4LCA2NiwgNDgsIDQ5LCA1NiwgMTI4LCA2NiwgCisgICAgNDgsIDQ5LCAxODMsIDY2LCA0OCwgNDksIDE4MiwgNjYsIDQ4LCA0OSwgMTgxLCA2NiwgNDgsIDQ5LCAxODAsIDY2LCA0OCwgCisgICAgNDksIDE3OSwgNjYsIDQ4LCA0OSwgMTc4LCA2NiwgNDgsIDQ5LCAxNzcsIDY2LCA0OCwgNDksIDE3NiwgNjYsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgNjYsIDQ4LCA0OCwgMTg1LCA2NiwgNDgsIDQ4LCA1NiwgMTI4LCA2NiwgNDgsIDQ4LCAxODQsIDY2LCA0OCwgCisgICAgNDgsIDU1LCAxMjgsIDY2LCA0OCwgNDgsIDE4MywgNjYsIDQ4LCA0OCwgNTQsIDEyOCwgNjYsIDQ4LCA0OCwgMTgyLCA2NiwgCisgICAgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjYsIDQ4LCA0OCwgNTMsIDEyOCwgNjYsIDQ4LCA0OCwgMTgxLCA2NiwgNDgsIDQ4LCAKKyAgICA1MiwgMTI4LCA2NiwgNDgsIDQ4LCAxODAsIDY2LCA0OCwgNDgsIDUxLCAxMjgsIDY2LCA0OCwgNDgsIDE3OSwgNjYsIDQ4LCAKKyAgICA0OCwgNTAsIDEyOCwgNjYsIDQ4LCA0OCwgMTc4LCA2NiwgNDgsIDQ4LCA0OSwgMTI4LCA2NiwgNDgsIDQ4LCAxNzcsIDY1LCAKKyAgICA5MCwgODUsIDEyOCwgNjUsIDg5LCA2OSwgMjEwLCA2NSwgODksIDY2LCAxMjgsIDY1LCA4OSwgNjUsIDcyLCAxMjgsIDY1LCAKKyAgICA4OCwgNjksIDEyOCwgNjUsIDg3LCA2OSwgMTI4LCA2NSwgODYsIDY5LCA4MywgODQsIDY1LCAyMDYsIDY1LCA4NiwgNjksIAorICAgIDgyLCA2NSwgNzEsIDE5NywgNjUsIDg2LCA2NSwgNzUsIDgyLCA2NSwgNzIsIDY1LCA4MywgNjUsIDc4LCA4OSwgNjUsIDEyOCwgCisgICAgNjUsIDg2LCA2NSwgNzEsIDgyLCA2NSwgNzIsIDY1LCAxMjgsIDY1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCAKKyAgICA4NSwgODQsIDg1LCA3NywgNzgsIDEyOCwgNjUsIDg1LCA4MywgODQsIDgyLCA2NSwgMjA0LCA2NSwgODUsIDgyLCA2NSwgNzcsIAorICAgIDY1LCA5MCwgNjgsIDY1LCA2NSwgNzIsIDY1LCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCAKKyAgICA0NSwgNTAsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgNjUsIDEyOCwgNjUsIDg1LCA3OCwgNzgsIAorICAgIDEyOCwgNjUsIDg1LCA3MSwgODUsIDgzLCA4NCwgMTI4LCA2NSwgODUsIDcxLCA3NywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNjUsIDg1LCA2OSwgMTI4LCA2NSwgODQsIDg0LCA3MywgMTk1LCA2NSwgODQsIDg0LCA3MiwgNjUsIDY3LCAKKyAgICA2NSwgNzgsIDEyOCwgNjUsIDg0LCA4NCwgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODQsIDg0LCA2NSwgCisgICAgMjAzLCA2NSwgODQsIDc5LCAyMDUsIDY1LCA4NCwgNzgsIDY1LCAyMDAsIDY1LCA4NCwgNzcsIDY1LCA2NSwgODUsIDEyOCwgCisgICAgNjUsIDg0LCA3MywgODksIDY1LCAxMjgsIDY1LCA4NCwgNzIsIDY1LCA4MiwgODYsIDY1LCA4NiwgNjksIDY4LCA3MywgMTk1LCAKKyAgICA2NSwgODQsIDcyLCA2NSwgODAsIDY1LCA4MywgNjcsIDY1LCAyMDYsIDY1LCA4MywgODksIDg1LCA4MiwgMTkzLCA2NSwgODMsIAorICAgIDg5LCA3NywgODAsIDg0LCA3OSwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA2NSwgODMsIDg0LCA4MiwgNzksIDc2LCAKKyAgICA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc3LCAxMjgsIDY1LCA4MywgODQsIAorICAgIDY5LCA4MiwgNzMsIDgzLCA3NSwgMjExLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNzUsIDEyOCwgNjUsIDgzLCA4NCwgCisgICAgNjksIDgyLCA3MywgODMsIDIwMywgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNjUsIDgzLCAKKyAgICA4MywgODksIDgyLCA3MywgNjUsIDIwNiwgNjUsIDgzLCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODMsIAorICAgIDgwLCA3MywgODIsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDgzLCA4MCwgNjksIDgyLCAxMjgsIDY1LCA4MywgNzIsIDcxLCA2NSwgCisgICAgNjYsIDEyOCwgNjUsIDgzLCA3MiwgNTcsIDEyOCwgNjUsIDgzLCA3MiwgMTc4LCA2NSwgODMsIDY3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY1LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2NSwgODMsIDY1LCA3NiwgNTAsIDEyOCwgNjUsIAorICAgIDgyLCA4NSwgNzIsIDg1LCA2NSwgMTI4LCA2NSwgODIsIDg0LCA2NSwgNjYsIDE5NywgNjUsIDgyLCA4MywgNjksIDc5LCA4MywgCisgICAgMTI4LCA2NSwgODIsIDgzLCA2OSwgNzksIDIxMSwgNjUsIDgyLCA4MiwgNzksIDg3LCA4MywgMTI4LCA2NSwgODIsIDgyLCAKKyAgICA3OSwgODcsIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgNzIsIDY5LCA2NSwgMTk2LCA2NSwgODIsIAorICAgIDgyLCA3OSwgODcsIDQ1LCA4NCwgNjUsIDczLCA3NiwgMTI4LCA2NSwgODIsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY1LCA4MiwgCisgICAgODIsIDY1LCA4OSwgMTI4LCA2NSwgODIsIDgwLCA2OSwgNzEsIDcxLCA3MywgNjUsIDg0LCAyMDcsIDY1LCA4MiwgNzksIDg1LCAKKyAgICA4MywgNzMsIDc4LCAxOTksIDY1LCA4MiwgNzksIDg1LCA4MiwgMTkzLCA2NSwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODAsIAorICAgIDgyLCA3OSwgNzAsIDczLCA3NiwgNjksIDEyOCwgNjUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDY1LCA4MiwgNzcsIDg5LCAKKyAgICAxMjgsIDY1LCA4MiwgNzcsIDc5LCA4NSwgODIsIDEyOCwgNjUsIDgyLCAyMDUsIDY1LCA4MiwgNzYsIDY1LCA4NSwgMTk5LCAKKyAgICA2NSwgODIsIDc1LCA4NCwgNzMsIDc1LCAyMDcsIDY1LCA4MiwgNzUsIDY1LCA2NiwgMTI4LCA2NSwgODIsIDc1LCA2NSwgNjUsIAorICAgIDc4LCA4NSwgMTI4LCA2NSwgODIsIDczLCA4MywgODQsIDY5LCA4MiwgNjUsIDEyOCwgNjUsIDgyLCA3MywgODMsIDg0LCA2OSwgCisgICAgODIsIDE5MywgNjUsIDgyLCA3MywgNjksIDgzLCAxMjgsIDY1LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCAKKyAgICA2NSwgODIsIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA2NSwgODIsIDcxLCA3MywgCisgICAgMTI4LCA2NSwgODIsIDY5LCA4MCwgNjUsIDEyOCwgNjUsIDgyLCA2OCwgNzIsIDY1LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCAKKyAgICA2NSwgMTI4LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgNzksIAorICAgIDIwNiwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgMTk1LCA2NSwgODIsIDY3LCAyMDAsIDY1LCA4MiwgNjcsIDEyOCwgNjUsIAorICAgIDgyLCAxOTUsIDY1LCA4MiwgNjUsIDc3LCA2NSwgNzMsIDE5NSwgNjUsIDgyLCA2NSwgNjksIDY1LCA2OSwgMTI4LCA2NSwgCisgICAgODIsIDY1LCA2OSwgNjUsIDQ1LCA4NSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA3MywgMTI4LCA2NSwgODIsIDY1LCAKKyAgICA2OSwgNjUsIDQ1LCA2OSwgNzksIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgNjksIDEyOCwgNjUsIDgyLCA2NSwgNjksIAorICAgIDY1LCA0NSwgNjUsIDEyOCwgNjUsIDgyLCA2NSwgNjgsIDEyOCwgNjUsIDgyLCA2NSwgMTk2LCA2NSwgODIsIDY1LCA2NiwgCisgICAgNzMsIDY3LCA0NSwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNjUsIDgyLCA2NSwgNjYsIDczLCA2NSwgMjA2LCA2NSwgODIsIDQ1LCAKKyAgICA4MiwgNjUsIDcyLCA3NywgNjUsIDIwNiwgNjUsIDgyLCA0NSwgODIsIDY1LCA3MiwgNjksIDY5LCA3NywgMTI4LCA2NSwgODEsIAorICAgIDg1LCA2NSwgODIsIDczLCA4NSwgODMsIDEyOCwgNjUsIDgwLCA4NSwgMjA2LCA2NSwgODAsIDgyLCA3MywgNzYsIDEyOCwgCisgICAgNjUsIDgwLCA4MCwgODIsIDc5LCA4OCwgNzMsIDc3LCA2NSwgODQsIDY5LCA3NiwgMjE3LCA2NSwgODAsIDgwLCA4MiwgNzksIAorICAgIDg4LCA3MywgNzcsIDY1LCA4NCwgNjksIDEyOCwgNjUsIDgwLCA4MCwgODIsIDc5LCA2NSwgNjcsIDcyLCA2OSwgMjExLCA2NSwgCisgICAgODAsIDgwLCA4MiwgNzksIDY1LCA2NywgNzIsIDEyOCwgNjUsIDgwLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDc4LCAxMjgsIDY1LCA4MCwgNzksIDg0LCA3MiwgNjksIDgzLCAxMjgsIDY1LCA4MCwgNzksIDg0LCA3MiwgNjksIDc3LCA2NSwgCisgICAgMTI4LCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgODAsIDcyLCA2OSwgMTI4LCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCAKKyAgICA3OSwgNzAsIDc5LCA4MywgMTI4LCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgNzAsIDc5LCAyMTEsIDY1LCA4MCwgNzksIAorICAgIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDIwMSwgNjUsIDgwLCA3OSwgNjgsIDY5LCA4OCwgNzMsIDY1LCAxMjgsIDY1LCA4MCwgCisgICAgNzksIDY4LCA2OSwgODIsIDc3LCAxOTMsIDY1LCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjUsIDgwLCA3NiwgMjAxLCAKKyAgICA2NSwgODAsIDczLCA3OCwgMTI4LCA2NSwgODAsIDY5LCA4MywgMjA3LCA2NSwgODAsIDY1LCA4MiwgODQsIDEyOCwgNjUsIAorICAgIDgwLCA2NSwgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgNjUsIDg5LCA2NSwgMTI4LCA2NSwgCisgICAgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc4LCA4NSwgODMsIDg2LCA2NSwgODIsIDE5MywgNjUsIDc4LCAKKyAgICA4NSwgNjgsIDY1LCA4NCwgODQsIDY1LCAxMjgsIDY1LCA3OCwgODUsIDY4LCA2NSwgODQsIDg0LCAxOTMsIDY1LCA3OCwgODQsIAorICAgIDczLCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDc1LCAKKyAgICA2OSwgNzgsIDc5LCA3NywgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDc1LCA2OSwgNzgsIDc5LCA3NSwgODksIDc2LCA3MywgCisgICAgODMsIDc3LCA2NSwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDczLCAKKyAgICA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIDY5LCA0NSwgODIsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgCisgICAgNzgsIDg0LCA3MywgNjcsIDc2LCA3OSwgNjcsIDc1LCA4NywgNzMsIDgzLCAxOTcsIDY1LCA3OCwgODQsIDY1LCA4MiwgNzEsIAorICAgIDc5LCA3NywgODUsIDc1LCA3MiwgNjUsIDEyOCwgNjUsIDc4LCA4MywgODUsIDIxOCwgNjUsIDc4LCA4MywgNzIsIDY5LCAKKyAgICAxMjgsIDY1LCA3OCwgODAsIDY5LCA2NSwgMTI4LCA2NSwgNzgsIDIwNywgNjUsIDc4LCA3OCwgODUsIDczLCA4NCwgMjE3LCAKKyAgICA2NSwgNzgsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA3OCwgNzgsIDY1LCA2NSwgODUsIDEyOCwgNjUsIAorICAgIDc4LCA3NSwgNzIsIDEyOCwgNjUsIDc4LCA3MiwgODUsIDEyOCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgODIsIDEyOCwgCisgICAgNjUsIDc4LCA3MSwgODMsIDg0LCA4MiwgNzksIDIwNSwgNjUsIDc4LCA3MSwgNzUsIDcyLCA2NSwgNzgsIDc1LCA3MiwgODUsIAorICAgIDEyOCwgNjUsIDc4LCA3MSwgNjksIDY4LCAxMjgsIDY1LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA2NSwgNzgsIDY3LCA3OSwgCisgICAgODIsIDY1LCAxMjgsIDY1LCA3OCwgNjcsIDcyLCA3OSwgODIsIDEyOCwgNjUsIDc4LCA2NSwgODQsIDgyLCA3MywgNjcsIDcyLCAKKyAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA2NSwgNzgsIDY1LCA4MCwgMTI4LCA2NSwgNzcsIDgwLCA4MywgMTI4LCA2NSwgNzcsIAorICAgIDgwLCA2OSwgODIsIDgzLCA2NSwgNzgsIDY4LCAxMjgsIDY1LCA3NywgNzksIDg1LCA3OCwgMjEyLCA2NSwgNzcsIDY2LCAKKyAgICAxOTMsIDY1LCA3NywgNjUsIDgyLCAxMjgsIDY1LCA3NywgNjUsIDIxMCwgNjUsIDc3LCA2NSwgNzYsIDcxLCA2NSwgNzcsIAorICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA3NiwgODYsIDY5LCA3OSwgNzYsIDY1LCAyMTAsIDY1LCA3NiwgODQsIDY5LCA4MiwgCisgICAgNzgsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCAKKyAgICA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA2NSwgNzYsIDg0LCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgNjUsIAorICAgIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDE5MywgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA2NSwgCisgICAgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY1LCA3NiwgODAsIDY1LCAxMjgsIDY1LCA3NiwgNzcsIDc5LCAKKyAgICA4MywgMjEyLCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgNzYsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCA2NSwgNzYsIDczLCA3MSwgNzgsIDY5LCAxOTYsIDY1LCA3NiwgCisgICAgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIDY5LCAKKyAgICA4NSwgMjEyLCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA2OSwgNzcsIDY2LCA3MywgNjcsIDEyOCwgNjUsIAorICAgIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDE5NywgCisgICAgNjUsIDc2LCA2NSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNDUsIDc2LCA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCAKKyAgICA4NCwgNzMsIDY5LCA4MywgNjksIDc2LCA4MywgNzUsIDY1LCA2NiwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgCisgICAgMTk1LCA2NSwgNzUsIDY2LCA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgCisgICAgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCAKKyAgICA3OSwgMjA2LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgNzgsIDEyOCwgNjUsIAorICAgIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIDcyLCA4NiwgODUsIDgzLCAKKyAgICAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgNzIsIDY1LCA3MSwgNzEsIAorICAgIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgMTI4LCA2NSwgNzEsIDc5LCA3MSwgCisgICAgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCAKKyAgICA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDEyOCwgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIAorICAgIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgCisgICAgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCAKKyAgICA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4NCwgMTI4LCA2NSwgNjksIAorICAgIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgCisgICAgMTI4LCA2NSwgNjksIDgyLCAxMjgsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCAKKyAgICA2OSwgNzYsIDEyOCwgNjUsIDY5LCA3NSwgMTI4LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgNjUsIDY5LCA3MSwgMTI4LCAKKyAgICA2NSwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OSwgMTI4LCA2NSwgNjksIDY4LCA2NSwgNDUsIAorICAgIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY4LCAxMjgsIDY1LCA2OSwgNjYsIDEyOCwgNjUsIDE5NywgNjUsIAorICAgIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgCisgICAgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIAorICAgIDIwMywgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgCisgICAgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIAorICAgIDE5NywgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgCisgICAgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIAorICAgIDY4LCA3MSwgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgCisgICAgNjcsIDY3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIAorICAgIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDIxMiwgCisgICAgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCA4MywgNzcsIDY1LCAyMDQsIDY1LCA2NiwgODUsIDc4LCAKKyAgICA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIDY1LCA4MywgNzMsIDY1LCAyMDYsIDY1LCA2NiwgNjYsIAorICAgIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjYsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgCisgICAgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY1LCA4OSwgMTI4LCA2NSwgNjUsIDg3LCAKKyAgICAxMjgsIDY1LCA2NSwgNzksIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCA2NSwgNjUsIDY2LCA2NSwgNjUsIDcwLCA3MywgNzYsIAorICAgIDczLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTYsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTAsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTMsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTAsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNTAsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTcsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgCisgICAgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OSwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NiwgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAKKyAgICAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIAorICAgIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA0OCwgNTQsIDU3LCAxMjgsIDY1LCA0OCwgNTQsIDU2LCAKKyAgICAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCA0OCwgNTQsIDU0LCAxMjgsIDY1LCA0OCwgNTQsIDUzLCAxMjgsIDY1LCAKKyAgICA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgNTQsIDUxLCAxMjgsIDY1LCA0OCwgNTQsIDUwLCAxMjgsIDY1LCA0OCwgNTQsIAorICAgIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA0OCwgNTMsIDU3LCAxMjgsIDY1LCA0OCwgNTMsIDU2LCAxMjgsIAorICAgIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCA0OCwgNTMsIDU0LCAxMjgsIDY1LCA0OCwgNTMsIDUzLCAxMjgsIDY1LCA0OCwgCisgICAgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIDUxLCAxMjgsIDY1LCA0OCwgNTMsIDUwLCAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAKKyAgICAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIDY1LCA0OCwgNTIsIDU3LCAxMjgsIDY1LCA0OCwgNTIsIDU2LCAxMjgsIDY1LCAKKyAgICA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgNTIsIDU0LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MywgMTI4LCA2NSwgNDgsIDUyLCA1MiwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNTEsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUwLCAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAKKyAgICAxMjgsIDY1LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgMTI4LCA2NSwgNDgsIDUxLCA1NywgMTI4LCAKKyAgICA2NSwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNDgsIDUxLCA1NSwgMTI4LCA2NSwgNDgsIDUxLCA1NCwgMTI4LCA2NSwgNDgsIAorICAgIDUxLCA1MywgMTI4LCA2NSwgNDgsIDUxLCA1MiwgMTI4LCA2NSwgNDgsIDUxLCA1MSwgMTI4LCA2NSwgNDgsIDUxLCA1MCwgCisgICAgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDUyLCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCAKKyAgICA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NSwgNDUsIAorICAgIDY5LCA4NSwgMTI4LCA0NSwgODUsIDIwNSwgNDUsIDgwLCA3MiwgODIsIDg1LCAxMjgsIDQ1LCA3NSwgNzIsIDg5LCA4NSwgCisgICAgMTk2LCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDQ1LCA2OCwgOTAsIDg1LCAxOTYsIDQ1LCA2NywgNzIsIDY1LCAKKyAgICAyMTAsIDQ1LCA2NywgNzIsIDY1LCA3NiwgMTI4LCAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBsZXhpY29uX29mZnNldFtdID0gewotICAgIDAsIDAsIDYsIDEwLCAxNSwgMjMsIDI3LCAzNCwgMzksIDQxLCA0NCwgNTAsIDYzLCA3NSwgODQsIDkwLCA5NSwgMTAzLCAKLSAgICAxMTIsIDExNiwgMTIxLCAxMjksIDEzNCwgMTM3LCAxNDQsIDE0OSwgMTU3LCAxNjMsIDE2OSwgMTc3LCAxODQsIDE5NCwgCi0gICAgMTk5LCAyMDIsIDIwOSwgMjEyLCAyMTcsIDIyNiwgMjMyLCAyNDEsIDI0OCwgMjU1LCAyNjAsIDI2NCwgMjczLCAyODEsIAotICAgIDI4MiwgMjg4LCAyOTQsIDMwMiwgMzA4LCAzMTQsIDMyMCwgMzI4LCAzMzMsIDM0MCwgMzQ0LCAzNDcsIDM0OSwgMzU1LCAKLSAgICAzNjIsIDM2OSwgMzc3LCAzODAsIDM4NSwgMzkwLCAzOTYsIDM5OCwgNDAzLCA0MTIsIDQxOSwgNDI1LCAyODYsIDQzMCwgCi0gICAgNDMyLCA0MzQsIDQzOCwgNDQzLCA0NDYsIDQ1MiwgNDU2LCA0NjQsIDQ3NCwgNDgxLCAxMTMsIDQ5MCwgNDk4LCA1MDMsIAotICAgIDUxMSwgNTE2LCA1MjQsIDUzNSwgNTM4LCA1NDIsIDU1NSwgNTY1LCA1NzEsIDU3NCwgNTc1LCA1ODIsIDU4NCwgNTkzLCAKLSAgICAzMDEsIDU5NiwgNjAwLCA2MDgsIDYxMywgNjE1LCA2MTksIDYyMiwgNjI4LCA2MzUsIDY0MiwgNjQ3LCA2NTEsIDY2MCwgCi0gICAgNjcwLCA2NzksIDY4OCwgNjkyLCA2OTgsIDcwNiwgNzEzLCA3MjEsIDcyNSwgNzMxLCA3MzUsIDc0MywgNzUyLCA3NTYsIAotICAgIDYyNywgNzYzLCA3NzEsIDc3NSwgNzg0LCA3ODksIDc5MiwgNzk2LCA4MDQsIDgxMywgODE2LCA4MjEsIDgzMSwgODQwLCAKLSAgICA4NDcsIDIwMCwgNzMzLCA4NTAsIDg1NywgNTgwLCA4NjUsIDg3MywgODc5LCA4ODQsIDg5MSwgODk0LCA5MDAsIDkwNiwgCi0gICAgOTExLCA5MTYsIDkyOSwgMjIsIDkzNCwgOTM3LCA5NDcsIDk1MiwgOTU2LCA5NjIsIDk3MSwgOTc0LCA5ODQsIDk5MywgOTk3LCAKLSAgICAxMDAyLCAxMDA3LCAxMDEyLCAxMDE5LCAxMDI3LCAxMDMwLCAxMDQwLCAxMDQzLCAxMDQ1LCAxMDUzLCAxMDU3LCAxMDYxLCAKLSAgICA5MywgMTA2NCwgMTA2OSwgMTA3NSwgMTA3NywgMTA4NiwgMTA4OSwgMTA5MiwgMTA5NywgMTA5OSwgMTEwNSwgMTExMSwgCi0gICAgMTExMywgMTExNywgMzMxLCAxMTIwLCAxMTI4LCAxMTMyLCAxMTM2LCAxMTQxLCAxMTQ0LCAxMTUwLCAxMTU0LCAxMTYxLCAKLSAgICAxMTY0LCAxMTcwLCA4MCwgMTE3NiwgMTE3OCwgMTE4MSwgMTE4MywgNjU3LCAxMTg4LCAxMTk2LCAxMjAzLCAxMjEzLCAKLSAgICAxMjIyLCAxMjMwLCAxMjMyLCAxMjU2LCAxMjc4LCAxMzAwLCAxMzIyLCAxMzQzLCAxMzY0LCAxMzg0LCAxNDA0LCAxNDIzLCAKLSAgICAxNDQyLCAxNDYxLCAxNDgwLCAxNDk5LCAxNTE4LCAxNTM3LCAxNTU2LCAxNTc0LCAxNTkyLCAxNjEwLCAxNjI4LCAxNjQ2LCAKLSAgICAxNjY0LCAxNjgyLCAxNzAwLCAxNzE4LCAxNzM2LCAxNzU0LCAxNzcyLCAxNzkwLCAxODA3LCAxODI0LCAxODQxLCAxODU4LCAKLSAgICAxODc1LCAxODkyLCAxOTA5LCAxOTI2LCAxOTQzLCAxOTYwLCAxOTc3LCAxOTk0LCAyMDExLCAyMDI4LCAyMDQ1LCAyMDYyLCAKLSAgICAyMDc5LCAyMDk2LCAyMTEzLCAyMTMwLCAyMTQ3LCAyMTY0LCAyMTgxLCAyMTk4LCAyMjE1LCAyMjMyLCAyMjQ5LCAyMjY2LCAKLSAgICAyMjgzLCAyMzAwLCAyMzE3LCAyMzM0LCAyMzUxLCAyMzY4LCAyMzg1LCAyNDAyLCAyNDE5LCAyNDM2LCAyNDUzLCAyNDcwLCAKLSAgICAyNDg3LCAyNTA0LCAyNTIxLCAyNTM4LCAyNTU1LCAyNTcyLCAyNTg5LCAyNjA2LCAyNjIzLCAyNjQwLCAyNjU3LCAyNjc0LCAKLSAgICAyNjkxLCAyNzA4LCAyNzI1LCAyNzQyLCAyNzU5LCAyNzc2LCAyNzkzLCAyODEwLCAyODI2LCAyODQyLCAyODU4LCAyODc0LCAKLSAgICAyODkwLCAyOTA2LCAyOTIyLCAyOTM4LCAyOTU0LCAyOTcwLCAyOTg2LCAzMDAyLCAzMDE4LCAzMDM0LCAzMDUwLCAzMDY2LCAKLSAgICAzMDgyLCAzMDk4LCAzMTE0LCAzMTMwLCAzMTQ2LCAzMTYyLCAzMTc4LCAzMTk0LCAzMjEwLCAzMjI2LCAzMjQyLCAzMjU4LCAKLSAgICAzMjc0LCAzMjkwLCAzMzA2LCAzMzIyLCAzMzM4LCAzMzU0LCAzMzcwLCAzMzg2LCAzNDAyLCAzNDE4LCAzNDM0LCAzNDUwLCAKLSAgICAzNDY2LCAzNDgyLCAzNDk4LCAzNTE0LCAzNTMwLCAzNTQ2LCAzNTYyLCAzNTc4LCAzNTk0LCAzNjEwLCAzNjI2LCAzNjQyLCAKLSAgICAzNjU4LCAzNjc0LCAzNjkwLCAzNzA2LCAzNzIyLCAzNzM4LCAzNzU0LCAzNzcwLCAzNzg2LCAzODAyLCAzODE4LCAzODM0LCAKLSAgICAzODUwLCAzODY2LCAzODgyLCAzODk4LCAzOTE0LCAzOTMwLCAzOTQ2LCAzOTYyLCAzOTc4LCAzOTk0LCA0MDEwLCA0MDI2LCAKLSAgICA0MDQyLCA0MDU4LCA0MDc0LCA0MDkwLCA0MTA2LCA0MTIyLCA0MTM4LCA0MTU0LCA0MTcwLCA0MTg2LCA0MjAyLCA0MjE4LCAKLSAgICA0MjM0LCA0MjUwLCA0MjY2LCA0MjgyLCA0Mjk4LCA0MzE0LCA0MzMwLCA0MzQ2LCA0MzYyLCA0Mzc4LCA0Mzk0LCA0NDEwLCAKLSAgICA0NDI2LCA0NDQyLCA0NDU4LCA0NDc0LCA0NDkwLCA0NTA2LCA0NTIyLCA0NTM4LCA0NTU0LCA0NTcwLCA0NTg2LCA0NjAyLCAKLSAgICA0NjE4LCA0NjM0LCA0NjUwLCA0NjY2LCA0NjgyLCA0Njk4LCA0NzE0LCA0NzMwLCA0NzQ2LCA0NzYyLCA0Nzc4LCA0Nzk0LCAKLSAgICA0ODEwLCA0ODI2LCA0ODQyLCA0ODU4LCA0ODc0LCA0ODkwLCA0OTA2LCA0OTIyLCA0OTM4LCA0OTU0LCA0OTcwLCA0OTg2LCAKLSAgICA1MDAyLCA1MDE4LCA1MDM0LCA1MDUwLCA1MDY2LCA1MDgyLCA1MDk4LCA1MTE0LCA1MTMwLCA1MTQ2LCA1MTYyLCA1MTc4LCAKLSAgICA1MTk0LCA1MjEwLCA1MjI2LCA1MjQyLCA1MjU4LCA1Mjc0LCA1MjkwLCA1MzA2LCA1MzIyLCA1MzM4LCA1MzU0LCA1MzcwLCAKLSAgICA1Mzg2LCA1NDAyLCA1NDE4LCA1NDM0LCA1NDUwLCA1NDY2LCA1NDgyLCA1NDk4LCA1NTE0LCA1NTMwLCA1NTQ2LCA1NTYyLCAKLSAgICA1NTc4LCA1NTk0LCA1NjEwLCA1NjI2LCA1NjQyLCA1NjU4LCA1Njc0LCA1NjkwLCA1NzA2LCA1NzIyLCA1NzM4LCA1NzU0LCAKLSAgICA1NzcwLCA1Nzg2LCA1ODAyLCA1ODE4LCA1ODM0LCA1ODUwLCA1ODY2LCA1ODgyLCA1ODk4LCA1OTE0LCA1OTMwLCA1OTQ2LCAKLSAgICA1OTYyLCA1OTc4LCA1OTk0LCA2MDEwLCA2MDI2LCA2MDQyLCA2MDU4LCA2MDc0LCA2MDkwLCA2MTA2LCA2MTIyLCA2MTM4LCAKLSAgICA2MTU0LCA2MTcwLCA2MTg2LCA2MjAyLCA2MjE4LCA2MjM0LCA2MjUwLCA2MjY2LCA2MjgyLCA2Mjk4LCA2MzE0LCA2MzMwLCAKLSAgICA2MzQ2LCA2MzYyLCA2Mzc4LCA2Mzk0LCA2NDEwLCA2NDI2LCA2NDQyLCA2NDU4LCA2NDc0LCA2NDkwLCA2NTA2LCA2NTIyLCAKLSAgICA2NTM4LCA2NTU0LCA2NTcwLCA2NTg2LCA2NjAyLCA2NjE4LCA2NjM0LCA2NjUwLCA2NjY2LCA2NjgyLCA2Njk4LCA2NzE0LCAKLSAgICA2NzMwLCA2NzQ2LCA2NzYyLCA2Nzc4LCA2Nzk0LCA2ODEwLCA2ODI2LCA2ODQyLCA2ODU4LCA2ODc0LCA2ODkwLCA2OTA2LCAKLSAgICA2OTIyLCA2OTM4LCA2OTU0LCA2OTcwLCA2OTg2LCA3MDAyLCA3MDE4LCA3MDM0LCA3MDUwLCA3MDY2LCA3MDgyLCA3MDk4LCAKLSAgICA3MTE0LCA3MTMwLCA3MTQ2LCA3MTYyLCA3MTc4LCA3MTk0LCA3MjEwLCA3MjI2LCA3MjQyLCA3MjU4LCA3Mjc0LCA3MjkwLCAKLSAgICA3MzA2LCA3MzIyLCA3MzM4LCA3MzU0LCA3MzcwLCA3Mzg2LCA3NDAyLCA3NDE4LCA3NDM0LCA3NDUwLCA3NDY2LCA3NDgyLCAKLSAgICA3NDk4LCA3NTE0LCA3NTMwLCA3NTQ2LCA3NTYyLCA3NTc4LCA3NTk0LCA3NjEwLCA3NjI2LCA3NjQyLCA3NjU4LCA3Njc0LCAKLSAgICA3NjkwLCA3NzA2LCA3NzIyLCA3NzM4LCA3NzU0LCA3NzcwLCA3Nzg2LCA3ODAyLCA3ODE4LCA3ODM0LCA3ODUwLCA3ODY2LCAKLSAgICA3ODgyLCA3ODk4LCA3OTE0LCA3OTMwLCA3OTQ2LCA3OTYyLCA3OTc4LCA3OTk0LCA4MDEwLCA4MDI2LCA4MDQyLCA4MDU4LCAKLSAgICA4MDc0LCA4MDkwLCA4MTA2LCA4MTIyLCA4MTM4LCA4MTU0LCA4MTcwLCA4MTg2LCA4MjAyLCA4MjE4LCA4MjM0LCA4MjUwLCAKLSAgICA4MjY2LCA4MjgyLCA4Mjk4LCA4MzE0LCA4MzMwLCA4MzQ2LCA4MzYyLCA4Mzc4LCA4Mzk0LCA4NDEwLCA4NDI2LCA4NDQyLCAKLSAgICA4NDU4LCA4NDc0LCA4NDkwLCA4NTA2LCA4NTIyLCA4NTM4LCA4NTU0LCA4NTcwLCA4NTg2LCA4NjAyLCA4NjE4LCA4NjM0LCAKLSAgICA4NjUwLCA4NjY2LCA4NjgyLCA4Njk4LCA4NzE0LCA4NzMwLCA4NzQ2LCA4NzYyLCA4Nzc4LCA4Nzk0LCA4ODEwLCA4ODI2LCAKLSAgICA4ODQyLCA4ODU4LCA4ODc0LCA4ODkwLCA4OTA2LCA4OTIyLCA4OTM4LCA4OTU0LCA4OTcwLCA4OTg2LCA5MDAyLCA5MDE4LCAKLSAgICA5MDM0LCA5MDUwLCA5MDY2LCA5MDgyLCA5MDk4LCA5MTE0LCA5MTMwLCA5MTQ2LCA5MTYyLCA5MTc4LCA5MTk0LCA5MjEwLCAKLSAgICA5MjI2LCA5MjQyLCA5MjU4LCA5Mjc0LCA5MjkwLCA5MzA2LCA5MzIyLCA5MzM4LCA5MzU0LCA5MzcwLCA5Mzg2LCA5NDAyLCAKLSAgICA5NDE4LCA5NDM0LCA5NDUwLCA5NDY2LCA5NDgyLCA5NDk4LCA5NTE0LCA5NTMwLCA5NTQ2LCA5NTYyLCA5NTc4LCA5NTk0LCAKLSAgICA5NjEwLCA5NjI2LCA5NjQyLCA5NjU4LCA5Njc0LCA5NjkwLCA5NzA2LCA5NzIyLCA5NzM4LCA5NzU0LCA5NzcwLCA5Nzg2LCAKLSAgICA5ODAyLCA5ODE4LCA5ODM0LCA5ODUwLCA5ODY2LCA5ODgyLCA5ODk4LCA5OTE0LCA5OTMwLCA5OTQ2LCA5OTYyLCA5OTc4LCAKLSAgICA5OTk0LCAxMDAxMCwgMTAwMjYsIDEwMDQyLCAxMDA1OCwgMTAwNzQsIDEwMDkwLCAxMDEwNiwgMTAxMjIsIDEwMTM4LCAKLSAgICAxMDE1NCwgMTAxNzAsIDEwMTg2LCAxMDIwMiwgMTAyMTgsIDEwMjM0LCAxMDI1MCwgMTAyNjYsIDEwMjgyLCAxMDI5OCwgCi0gICAgMTAzMTQsIDEwMzMwLCAxMDM0NiwgMTAzNjIsIDEwMzc4LCAxMDM5NCwgMTA0MTAsIDEwNDI2LCAxMDQ0MiwgMTA0NTgsIAotICAgIDEwNDc0LCAxMDQ5MCwgMTA1MDYsIDEwNTIyLCAxMDUzOCwgMTA1NTQsIDEwNTcwLCAxMDU4NiwgMTA2MDIsIDEwNjE4LCAKLSAgICAxMDYzNCwgMTA2NTAsIDEwNjY2LCAxMDY4MiwgMTA2OTgsIDEwNzE0LCAxMDczMCwgMTA3NDYsIDEwNzYyLCAxMDc3OCwgCi0gICAgMTA3OTQsIDEwODEwLCAxMDgyNiwgMTA4NDIsIDEwODU4LCAxMDg3NCwgMTA4OTAsIDEwOTA2LCAxMDkyMiwgMTA5MzgsIAotICAgIDEwOTU0LCAxMDk3MCwgMTA5ODYsIDExMDAyLCAxMTAxOCwgMTEwMzQsIDExMDUwLCAxMTA2NiwgMTEwODIsIDExMDk4LCAKLSAgICAxMTExNCwgMTExMzAsIDExMTQ2LCAxMTE2MiwgMTExNzgsIDExMTk0LCAxMTIxMCwgMTEyMjYsIDExMjQyLCAxMTI1OCwgCi0gICAgMTEyNzQsIDExMjkwLCAxMTMwNiwgMTEzMjIsIDExMzM4LCAxMTM1NCwgMTEzNzAsIDExMzg2LCAxMTQwMiwgMTE0MTgsIAotICAgIDExNDM0LCAxMTQ1MCwgMTE0NjYsIDExNDgyLCAxMTQ5OCwgMTE1MTQsIDExNTMwLCAxMTU0NiwgMTE1NjIsIDExNTc4LCAKLSAgICAxMTU5NCwgMTE2MTAsIDExNjI2LCAxMTY0MiwgMTE2NTgsIDExNjc0LCAxMTY5MCwgMTE3MDYsIDExNzIyLCAxMTczOCwgCi0gICAgMTE3NTQsIDExNzcwLCAxMTc4NSwgMTE4MDAsIDExODE1LCAxMTgzMCwgMTE4NDUsIDExODYwLCAxMTg3NSwgMTE4OTAsIAotICAgIDExOTA1LCAxMTkyMCwgMTE5MzUsIDExOTUwLCAxMTk2NSwgMTE5ODAsIDExOTk1LCAxMjAxMCwgMTIwMjUsIDEyMDQwLCAKLSAgICAxMjA1NSwgMTIwNzAsIDEyMDg1LCAxMjEwMCwgMTIxMTUsIDEyMTMwLCAxMjE0NSwgMTIxNjAsIDEyMTc1LCAxMjE5MCwgCi0gICAgMTIyMDUsIDEyMjIwLCAxMjIzNSwgMTIyNTAsIDEyMjY1LCAxMjI4MCwgMTIyOTUsIDEyMzEwLCAxMjMyNSwgMTIzNDAsIAotICAgIDEyMzU1LCAxMjM3MCwgMTIzODUsIDEyNDAwLCAxMjQxNSwgMTI0MzAsIDEyNDQ1LCAxMjQ2MCwgMTI0NzUsIDEyNDkwLCAKLSAgICAxMjUwNSwgMTI1MjAsIDEyNTM1LCAxMjU1MCwgMTI1NjUsIDEyNTgwLCAxMjU5NSwgMTI2MTAsIDEyNjI1LCAxMjY0MCwgCi0gICAgMTI2NTUsIDEyNjcwLCAxMjY4NSwgMTI3MDAsIDEyNzE1LCAxMjczMCwgMTI3NDUsIDEyNzYwLCAxMjc3NSwgMTI3OTAsIAotICAgIDEyODA1LCAxMjgyMCwgMTI4MzUsIDEyODUwLCAxMjg2NSwgMTI4ODAsIDEyODk1LCAxMjkxMCwgMTI5MjUsIDEyOTQwLCAKLSAgICAxMjk1NSwgMTI5NzAsIDEyOTg1LCAxMzAwMCwgMTMwMTUsIDEzMDMwLCAxMzA0NSwgMTMwNjAsIDEzMDc1LCAxMzA5MCwgCi0gICAgMTMxMDUsIDEzMTIwLCAxMzEzNSwgMTMxNTAsIDEzMTY1LCAxMzE4MCwgMTMxOTUsIDEzMjEwLCAxMzIyNSwgMTMyNDAsIAotICAgIDEzMjU1LCAxMzI3MCwgMTMyODUsIDEzMzAwLCAxMzMxNSwgMTMzMzAsIDEzMzQ1LCAxMzM2MCwgMTMzNzUsIDEzMzkwLCAKLSAgICAxMzQwNSwgMTM0MjAsIDEzNDM1LCAxMzQ1MCwgMTM0NjUsIDEzNDgwLCAxMzQ5NSwgMTM1MTAsIDEzNTI1LCAxMzU0MCwgCi0gICAgMTM1NTUsIDEzNTcwLCAxMzU4NSwgMTM2MDAsIDEzNjE1LCAxMzYzMCwgMTM2NDUsIDEzNjYwLCAxMzY3NSwgMTM2OTAsIAotICAgIDEzNzA1LCAxMzcyMCwgMTM3MzUsIDEzNzUwLCAxMzc2NSwgMTM3ODAsIDEzNzk1LCAxMzgxMCwgMTM4MjUsIDEzODQwLCAKLSAgICAxMzg1NSwgMTM4NzAsIDEzODg1LCAxMzkwMCwgMTM5MTUsIDEzOTMwLCAxMzk0NSwgMTM5NjAsIDEzOTc1LCAxMzk5MCwgCi0gICAgMTQwMDUsIDE0MDIwLCAxNDAzNSwgMTQwNTAsIDE0MDY1LCAxNDA4MCwgMTQwOTUsIDE0MTEwLCAxNDEyNSwgMTQxNDAsIAotICAgIDE0MTU1LCAxNDE3MCwgMTQxODUsIDE0MjAwLCAxNDIxNSwgMTQyMzAsIDE0MjQ1LCAxNDI2MCwgMTQyNzUsIDE0MjkwLCAKLSAgICAxNDMwNSwgMTQzMjAsIDE0MzM1LCAxNDM1MCwgMTQzNjUsIDE0MzgwLCAxNDM5NSwgMTQ0MTAsIDE0NDI1LCAxNDQ0MCwgCi0gICAgMTQ0NTUsIDE0NDcwLCAxNDQ4NSwgMTQ1MDAsIDE0NTE1LCAxNDUzMCwgMTQ1NDUsIDE0NTYwLCAxNDU3NSwgMTQ1OTAsIAotICAgIDE0NjA1LCAxNDYyMCwgMTQ2MzUsIDE0NjUwLCAxNDY2NSwgMTQ2ODAsIDE0Njk1LCAxNDcxMCwgMTQ3MjUsIDE0NzQwLCAKLSAgICAxNDc1NSwgMTQ3NzAsIDE0Nzg1LCAxNDgwMCwgMTQ4MTUsIDE0ODMwLCAxNDg0NSwgMTQ4NjAsIDE0ODc1LCAxNDg5MCwgCi0gICAgMTQ5MDUsIDE0OTIwLCAxNDkzNSwgMTQ5NTAsIDE0OTY1LCAxNDk4MCwgMTQ5OTUsIDE1MDEwLCAxNTAyNSwgMTUwNDAsIAotICAgIDE1MDU1LCAxNTA3MCwgMTUwODUsIDE1MTAwLCAxNTExNSwgMTUxMzAsIDE1MTQ1LCAxNTE2MCwgMTUxNzUsIDE1MTkwLCAKLSAgICAxNTIwNSwgMTUyMjAsIDE1MjM1LCAxNTI1MCwgMTUyNjUsIDE1MjgwLCAxNTI5NSwgMTUzMTAsIDE1MzI1LCAxNTM0MCwgCi0gICAgMTUzNTUsIDE1MzcwLCAxNTM4NSwgMTU0MDAsIDE1NDE1LCAxNTQzMCwgMTU0NDUsIDE1NDYwLCAxNTQ3NSwgMTU0OTAsIAotICAgIDE1NTA1LCAxNTUyMCwgMTU1MzUsIDE1NTUwLCAxNTU2NSwgMTU1ODAsIDE1NTk1LCAxNTYxMCwgMTU2MjUsIDE1NjQwLCAKLSAgICAxNTY1NSwgMTU2NzAsIDE1Njg1LCAxNTcwMCwgMTU3MTUsIDE1NzMwLCAxNTc0NSwgMTU3NjAsIDE1Nzc1LCAxNTc5MCwgCi0gICAgMTU4MDUsIDE1ODIwLCAxNTgzNSwgMTU4NTAsIDE1ODY1LCAxNTg4MCwgMTU4OTUsIDE1OTEwLCAxNTkyNSwgMTU5NDAsIAotICAgIDE1OTU1LCAxNTk3MCwgMTU5ODUsIDE2MDAwLCAxNjAxNSwgMTYwMzAsIDE2MDQ1LCAxNjA2MCwgMTYwNzUsIDE2MDkwLCAKLSAgICAxNjEwNSwgMTYxMjAsIDE2MTM1LCAxNjE1MCwgMTYxNjUsIDE2MTgwLCAxNjE5NSwgMTYyMTAsIDE2MjI1LCAxNjI0MCwgCi0gICAgMTYyNTUsIDE2MjcwLCAxNjI4NSwgMTYzMDAsIDE2MzE1LCAxNjMzMCwgMTYzNDUsIDE2MzYwLCAxNjM3NSwgMTYzOTAsIAotICAgIDE2NDA1LCAxNjQyMCwgMTY0MzUsIDE2NDUwLCAxNjQ2NSwgMTY0ODAsIDE2NDk1LCAxNjUxMCwgMTY1MjUsIDE2NTQwLCAKLSAgICAxNjU1NSwgMTY1NzAsIDE2NTg1LCAxNjYwMCwgMTY2MTUsIDE2NjMwLCAxNjY0NSwgMTY2NjAsIDE2Njc1LCAxNjY5MCwgCi0gICAgMTY3MDUsIDE2NzIwLCAxNjczNSwgMTY3NTAsIDE2NzY1LCAxNjc4MCwgMTY3OTUsIDE2ODEwLCAxNjgyNSwgMTY4NDAsIAotICAgIDE2ODU1LCAxNjg3MCwgMTY4ODUsIDE2OTAwLCAxNjkxNSwgMTY5MzAsIDE2OTQ1LCAxNjk2MCwgMTY5NzUsIDE2OTkwLCAKLSAgICAxNzAwNSwgMTcwMjAsIDE3MDM1LCAxNzA1MCwgMTcwNjUsIDE3MDgwLCAxNzA5NSwgMTcxMTAsIDE3MTI1LCAxNzE0MCwgCi0gICAgMTcxNTUsIDE3MTcwLCAxNzE4NSwgMTcyMDAsIDE3MjE1LCAxNzIzMCwgMTcyNDUsIDE3MjYwLCAxNzI3NSwgMTcyOTAsIAotICAgIDE3MzA1LCAxNzMyMCwgMTczMzUsIDE3MzUwLCAxNzM2NSwgMTczODAsIDE3Mzk1LCAxNzQxMCwgMTc0MjUsIDE3NDQwLCAKLSAgICAxNzQ1NSwgMTc0NzAsIDE3NDg1LCAxNzUwMCwgMTc1MTUsIDE3NTMwLCAxNzU0NSwgMTc1NjAsIDE3NTc1LCAxNzU5MCwgCi0gICAgMTc2MDUsIDE3NjIwLCAxNzYzNSwgMTc2NTAsIDE3NjY1LCAxNzY4MCwgMTc2OTUsIDE3NzEwLCAxNzcyNSwgMTc3NDAsIAotICAgIDE3NzU1LCAxNzc3MCwgMTc3ODUsIDE3ODAwLCAxNzgxNSwgMTc4MzAsIDE3ODQ1LCAxNzg2MCwgMTc4NzUsIDE3ODkwLCAKLSAgICAxNzkwNSwgMTc5MjAsIDE3OTM1LCAxNzk1MCwgMTc5NjUsIDE3OTgwLCAxNzk5NSwgMTgwMTAsIDE4MDI1LCAxODA0MCwgCi0gICAgMTgwNTUsIDE4MDcwLCAxODA4NSwgMTgxMDAsIDE4MTE1LCAxODEzMCwgMTgxNDUsIDE4MTYwLCAxODE3NSwgMTgxOTAsIAotICAgIDE4MjA1LCAxODIyMCwgMTgyMzUsIDE4MjUwLCAxODI2NSwgMTgyODAsIDE4Mjk1LCAxODMxMCwgMTgzMjUsIDE4MzQwLCAKLSAgICAxODM1NSwgMTgzNzAsIDE4Mzg1LCAxODQwMCwgMTg0MTUsIDE4NDMwLCAxODQ0NSwgMTg0NjAsIDE4NDc1LCAxODQ5MCwgCi0gICAgMTg1MDUsIDE4NTIwLCAxODUzNSwgMTg1NTAsIDE4NTY1LCAxODU4MCwgMTg1OTUsIDE4NjEwLCAxODYyNSwgMTg2NDAsIAotICAgIDE4NjU1LCAxODY3MCwgMTg2ODUsIDE4NzAwLCAxODcxNSwgMTg3MzAsIDE4NzQ1LCAxODc2MCwgMTg3NzUsIDE4NzkwLCAKLSAgICAxODgwNSwgMTg4MjAsIDE4ODM1LCAxODg1MCwgMTg4NjUsIDE4ODgwLCAxODg5NSwgMTg5MTAsIDE4OTI1LCAxODk0MCwgCi0gICAgMTg5NTUsIDE4OTcwLCAxODk4NSwgMTkwMDAsIDE5MDE1LCAxOTAzMCwgMTkwNDUsIDE5MDYwLCAxOTA3NSwgMTkwOTAsIAotICAgIDE5MTA1LCAxOTEyMCwgMTkxMzUsIDE5MTUwLCAxOTE2NSwgMTkxODAsIDE5MTk1LCAxOTIxMCwgMTkyMjUsIDE5MjQwLCAKLSAgICAxOTI1NSwgMTkyNzAsIDE5Mjg1LCAxOTMwMCwgMTkzMTUsIDE5MzMwLCAxOTM0NSwgMTkzNjAsIDE5Mzc1LCAxOTM5MCwgCi0gICAgMTk0MDUsIDE5NDIwLCAxOTQzNSwgMTk0NTAsIDE5NDY1LCAxOTQ4MCwgMTk0OTUsIDE5NTEwLCAxOTUyNSwgMTk1NDAsIAotICAgIDE5NTU1LCAxOTU3MCwgMTk1ODUsIDE5NjAwLCAxOTYxNSwgMTk2MzAsIDE5NjQ1LCAxOTY2MCwgMTk2NzUsIDE5NjkwLCAKLSAgICAxOTcwNSwgMTk3MjAsIDE5NzM1LCAxOTc1MCwgMTk3NjUsIDE5NzgwLCAxOTc5NSwgMTk4MTAsIDE5ODI1LCAxOTg0MCwgCi0gICAgMTk4NTUsIDE5ODcwLCAxOTg4NCwgMTk4OTgsIDE5OTEyLCAxOTkyNiwgMTk5NDAsIDEzOTAsIDE5OTU0LCAxOTk2OCwgCi0gICAgMTk5ODIsIDE5OTk2LCAyMDAxMCwgMjAwMjQsIDIwMDM4LCAyMDA1MiwgMjAwNjYsIDIwMDgwLCAyMDA5NCwgMjAxMDgsIAotICAgIDIwMTIyLCAyMDEzNiwgMjAxNTAsIDIwMTY0LCAyMDE3OCwgMjAxOTIsIDIwMjA2LCAyMDIyMCwgMjAyMzQsIDIwMjQ4LCAKLSAgICAyMDI2MiwgMjAyNzYsIDIwMjkwLCAyMDMwNCwgMjAzMTgsIDE4MjcsIDIwMzMyLCAyMDM0NiwgMjAzNjAsIDIwMzc0LCAKLSAgICAyMDM4OCwgMjA0MDIsIDIwNDE2LCAyMDQzMCwgMjA0NDQsIDIwNDU4LCAyMDQ3MiwgMjA0ODYsIDIwNTAwLCAyMDUxNCwgCi0gICAgMjA1MjgsIDIwNTQyLCAyMDU1NiwgMjA1NjksIDIwNTgyLCAyMDU5NSwgMjA2MDgsIDIwNjIxLCAyMDYzNCwgMjA2NDcsIAotICAgIDIwNjYwLCAyMDY3MywgMjA2ODYsIDIwNjk5LCAyMDcxMiwgMjA3MjUsIDIwNzM4LCAyMDc1MSwgMjA3NjQsIDIwNzc3LCAKLSAgICAyMDc5MCwgMjA4MDMsIDIwODE2LCAyMDgyOSwgMjA4NDIsIDIwODU1LCAyMDg2OCwgMTc3NywgMjA4ODEsIDIwODk0LCAKLSAgICAyMDkwNywgMjA5MjAsIDIwOTMzLCAyMDk0NiwgMjA5NTksIDIwOTcyLCAyMDk4NSwgMjA5OTgsIDIxMDExLCAyMTAyNCwgCi0gICAgMjEwMzcsIDIxMDUwLCAyMTA2MywgMjEwNzYsIDIxMDg5LCAyMTEwMiwgMjExMTUsIDIxMTI4LCAyMTE0MSwgMjExNTQsIAotICAgIDIxMTY3LCAyMTE4MCwgMjExOTMsIDIxMjA2LCAyMTIxOSwgMjEyMzIsIDIxMjQ1LCAyMTI1OCwgMjEyNzEsIDIxMjg0LCAKLSAgICAyMTI5NywgMjEzMTAsIDIxMzIzLCAyMTMzNiwgMjEzNDksIDIxMzYyLCAyMTM3NSwgMjEzODgsIDIxNDAxLCAyMTQxNCwgCi0gICAgMjE0MjcsIDIxNDQwLCAxNTA1LCAyMTQ1MywgMjE0NjYsIDIxNDc5LCAyMTQ5MiwgMjE1MDUsIDIxNTE4LCAyMTUzMSwgCi0gICAgMjE1NDQsIDIxNTU3LCAyMTU3MCwgMjE1ODMsIDIxNTk2LCAyMTYwOSwgMjE2MjIsIDIxNjM1LCAyMTY0OCwgMjE2NjEsIAotICAgIDIxNjc0LCAyMTY4NywgMjE3MDAsIDIxNzEzLCAyMTcyNiwgMjE3MzksIDIxNzUyLCAyMTc2NSwgMjE3NzgsIDIxNzkxLCAKLSAgICAyMTgwNCwgMjE4MTcsIDIxODMwLCAyMTg0MywgMjE4NTYsIDIxODY5LCAyMTg4MiwgMjE4OTUsIDIxOTA4LCAyMTkyMSwgCi0gICAgMjE5MzQsIDIxOTQ3LCAyMTk2MCwgMjE5NzMsIDIxOTg2LCAyMTk5OSwgMjIwMTIsIDIyMDI1LCAyMjAzOCwgMjIwNTEsIAotICAgIDIyMDY0LCAyMjA3NywgMjIwOTAsIDIyMTAzLCAyMjExNiwgMjIxMjksIDIyMTQyLCAyMjE1NSwgMjIxNjgsIDIyMTgxLCAKLSAgICAyMjE5NCwgMjIyMDcsIDIyMjIwLCAyMjIzMywgMjIyNDYsIDIyMjU5LCAyMjI3MiwgMjIyODUsIDIyMjk4LCAyMjMxMSwgCi0gICAgMjIzMjQsIDIyMzM3LCAyMjM1MCwgMjIzNjMsIDIyMzc2LCAyMjM4OSwgMjI0MDIsIDIyNDE1LCAyMjQyOCwgMjI0NDEsIAotICAgIDIyNDU0LCAyMjQ2NywgMjI0ODAsIDIyNDkzLCAyMjUwNiwgMjI1MTksIDIyNTMyLCAyMjU0NSwgMjI1NTgsIDIyNTcxLCAKLSAgICAyMjU4NCwgMjI1OTcsIDIyNjEwLCAyMjYyMywgMjI2MzYsIDIyNjQ5LCAyMjY2MiwgMjI2NzUsIDIyNjg4LCAyMjcwMSwgCi0gICAgMjI3MTQsIDIyNzI3LCAyMjc0MCwgMjI3NTMsIDIyNzY2LCAyMjc3OSwgMjI3OTIsIDIyODA1LCAyMjgxOCwgMjI4MzEsIAotICAgIDIyODQ0LCAyMjg1NywgMjI4NzAsIDIyODgzLCAyMjg5NiwgMjI5MDksIDIyOTIyLCAyMjkzNSwgMjI5NDgsIDIyOTYxLCAKLSAgICAyMjk3NCwgMjI5ODcsIDIzMDAwLCAyMzAxMywgMjMwMjYsIDIzMDM5LCAyMzA1MiwgMjMwNjUsIDIzMDc4LCAyMzA5MSwgCi0gICAgMjMxMDQsIDIzMTE3LCAyMzEzMCwgMjMxNDMsIDIzMTU2LCAyMzE2OSwgMjMxODIsIDIzMTk1LCAyMzIwOCwgMjMyMjEsIAotICAgIDIzMjM0LCAyMzI0NywgMjMyNjAsIDIzMjczLCAyMzI4NiwgMjMyOTksIDIzMzEyLCAyMzMyNSwgMjMzMzgsIDIzMzUxLCAKLSAgICAyMzM2NCwgMjMzNzcsIDIzMzkwLCAyMzQwMywgMjM0MTYsIDIzNDI5LCAyMzQ0MiwgMjM0NTUsIDIzNDY4LCAyMzQ4MSwgCi0gICAgMjM0OTQsIDIzNTA3LCAyMzUyMCwgMjM1MzMsIDIzNTQ2LCAyMzU1OSwgMjM1NzIsIDIzNTg1LCAyMzU5OCwgMjM2MTEsIAotICAgIDIzNjI0LCAyMzYzNywgMjM2NTAsIDIzNjYzLCAyMzY3NiwgMjM2ODksIDIzNzAyLCAyMzcxNSwgMjM3MjgsIDIzNzQxLCAKLSAgICAyMzc1NCwgMjM3NjYsIDIzNzc4LCAyMzc5MCwgMjM4MDIsIDIzODE0LCAyMzgyNiwgMjM4MzgsIDIzODUwLCAyMzg2MiwgCi0gICAgMjM4NzQsIDIzODg2LCAyMzg5OCwgMjM5MTAsIDIzOTIyLCAyMzkzNCwgMjM5NDYsIDIzOTU4LCAyMzk3MCwgMjM5ODIsIAotICAgIDE2ODgsIDIzOTk0LCAyNDAwNiwgMjQwMTgsIDE1OTgsIDI0MDMwLCAyNDA0MiwgMjQwNTQsIDI0MDY2LCAyNDA3OCwgCi0gICAgMjQwOTAsIDI0MTAyLCAxNDg3LCAxNTgwLCAyNDExNCwgMTYxNiwgMjQxMjYsIDI0MTM4LCAyNDE1MCwgMjQxNjIsIDI0MTc0LCAKLSAgICAyNDE4NiwgMjQxOTgsIDI0MjEwLCAyNDIyMiwgMjQyMzQsIDI0MjQ2LCAyNDI1OCwgMjQyNzAsIDI0MjgyLCAyNDI5NCwgCi0gICAgMjQzMDYsIDI0MzE4LCAyNDMzMCwgMjQzNDIsIDI0MzU0LCAyNDM2NiwgMjQzNzgsIDI0MzkwLCAyNDQwMiwgMjQ0MTQsIAotICAgIDI0NDI2LCAyNDQzOCwgMjQ0NTAsIDI0NDYyLCAyNDQ3NCwgMjQ0ODYsIDI0NDk4LCAyNDUxMCwgMjQ1MjIsIDI0NTM0LCAKLSAgICAyNDU0NiwgMjQ1NTgsIDI0NTcwLCAyNDU4MiwgMjQ1OTQsIDI0NjA2LCAyNDYxOCwgMjQ2MzAsIDI0NjQyLCAyNDY1NCwgCi0gICAgMjQ2NjYsIDI0Njc4LCAyNDY5MCwgMjQ3MDIsIDI0NzE0LCAyNDcyNiwgMjQ3MzgsIDI0NzUwLCAyNDc2MiwgMjQ3NzQsIAotICAgIDI0Nzg2LCAyNDc5OCwgMjQ4MTAsIDI0ODIyLCAyNDgzNCwgMjQ4NDYsIDI0ODU4LCAyNDg3MCwgMjQ4ODIsIDI0ODk0LCAKLSAgICAyNDkwNiwgMjQ5MTgsIDI0OTMwLCAyNDk0MiwgMjQ5NTQsIDI0OTY2LCAyNDk3OCwgMjQ5OTAsIDI1MDAyLCAyNTAxNCwgCi0gICAgMjUwMjYsIDI1MDM4LCAyNTA1MCwgMjUwNjIsIDI1MDc0LCAyNTA4NiwgMjUwOTgsIDI1MTEwLCAyNTEyMiwgMjUxMzQsIAotICAgIDI1MTQ2LCAyNTE1OCwgMjUxNzAsIDI1MTgyLCAyNTE5NCwgMTM3MiwgMjUyMDYsIDI1MjE4LCAyNTIzMCwgMTc0MiwgCi0gICAgMjUyNDIsIDI1MjU0LCAyNTI2NiwgMjUyNzgsIDI1MjkwLCAyNTMwMiwgMjUzMTQsIDI1MzI2LCAyNTMzOCwgMjUzNTAsIAotICAgIDI1MzYyLCAyNTM3NCwgMjUzODYsIDI1Mzk4LCAyNTQxMCwgMjU0MjIsIDI1NDM0LCAyNTQ0NiwgMjU0NTgsIDI1NDcwLCAKLSAgICAyNTQ4MiwgMjU0OTQsIDI1NTA2LCAyNTUxOCwgMjU1MzAsIDI1NTQyLCAyNTU1NCwgMjU1NjYsIDI1NTc4LCAyNTU5MCwgCi0gICAgMjU2MDIsIDI1NjE0LCAyNTYyNiwgMjU2MzgsIDI1NjUwLCAyNTY2MiwgMjU2NzQsIDI1Njg2LCAyNTY5OCwgMjU3MTAsIAotICAgIDI1NzIyLCAyNTczNCwgMjU3NDYsIDI1NzU4LCAyNTc3MCwgMjU3ODIsIDI1Nzk0LCAyNTgwNiwgMjU4MTgsIDI1ODMwLCAKLSAgICAyNTg0MiwgMjU4NTQsIDI1ODY2LCAyNTg3OCwgMjU4OTAsIDI1OTAyLCAyNTkxNCwgMjU5MjYsIDI1OTM4LCAyNTk1MCwgCi0gICAgMjU5NjIsIDI1OTc0LCAyNTk4NiwgMjU5OTgsIDI2MDEwLCAyNjAyMiwgMjYwMzQsIDI2MDQ2LCAyNjA1OCwgMjYwNzAsIAotICAgIDI2MDgyLCAyNjA5NCwgMjYxMDYsIDI2MTE4LCAyNjEzMCwgMjYxNDIsIDI2MTU0LCAyNjE2NiwgMjYxNzgsIDI2MTkwLCAKLSAgICAyNjIwMiwgMjYyMTQsIDI2MjI2LCAyNjIzOCwgMjYyNTAsIDI2MjYyLCAyNjI3NCwgMjYyODYsIDI2Mjk4LCAyNjMxMCwgCi0gICAgMjYzMjIsIDI2MzM0LCAyNjM0NiwgMjYzNTgsIDI2MzcwLCAyNjM4MiwgMjYzOTQsIDI2NDA2LCAyNjQxOCwgMjY0MzAsIAotICAgIDI2NDQyLCAyNjQ1NCwgMjY0NjYsIDI2NDc4LCAyNjQ5MCwgMjY1MDIsIDI2NTE0LCAyNjUyNiwgMjY1MzgsIDI2NTUwLCAKLSAgICAyNjU2MiwgMjY1NzQsIDI2NTg1LCAyNjU5NiwgMjY2MDcsIDI2NjE4LCAyNjYyOSwgMjY2NDAsIDI2NjUxLCAyNjY2MiwgCi0gICAgMjY2NzMsIDI2Njg0LCAyNjY5NSwgMjY3MDYsIDI2NzE3LCAyNjcyOCwgMjY3MzksIDI2NzUwLCAyNjc2MSwgMjY3NzIsIAotICAgIDE4MTMsIDI2NzgzLCAyNjc5NCwgMjY4MDUsIDI2ODE2LCAyNjgyNywgMjY4MzgsIDI2ODQ5LCAyNjg2MCwgMjY4NzEsIAotICAgIDI3MzEsIDEyODksIDI2ODgyLCAxNDEyLCAyNjg5MywgMjY5MDQsIDI2OTE1LCAyNjkyNiwgMjY5MzcsIDI2OTQ4LCAyNzQ4LCAKLSAgICAyNjk1OSwgMjY5NzAsIDI2OTgxLCAyNjk5MiwgMjcwMDMsIDI3MDE0LCAyNzAyNSwgMjcwMzYsIDI3MDQ3LCAyNzA1OCwgCi0gICAgMjcwNjksIDI3MDgwLCAyNzA5MSwgMjcxMDIsIDI3MTQsIDI3MTEzLCAyNzEyNCwgMjcxMzUsIDI3MTQ2LCAyNzE1NywgCi0gICAgMjcxNjgsIDI3MTc5LCAyNzE5MCwgMjcyMDEsIDI3MjEyLCAyNzIyMywgMjcyMzQsIDI3MjQ1LCAyNzI1NiwgMjcyNjcsIAotICAgIDI3Mjc4LCAyNzI4OSwgMjczMDAsIDI3MzExLCAyNzMyMiwgMjczMzMsIDI3MzQ0LCAyNzM1NSwgMjczNjYsIDI3Mzc3LCAKLSAgICAyNzM4OCwgMjczOTksIDI3NDEwLCAyNzQyMSwgMjc0MzIsIDI3NDQzLCAyNzQ1NCwgMjc0NjUsIDI3NDc2LCAyNzQ4NywgCi0gICAgMjc0OTgsIDI3NTA5LCAyNzUyMCwgMjc1MzEsIDI3NTQyLCAyNzU1MywgMjc1NjQsIDI3NTc1LCAyNzU4NiwgMjc1OTcsIAotICAgIDI3NjA4LCAyNzYxOSwgMjc2MzAsIDI3NjQxLCAyNzY1MiwgMjc2NjMsIDI3Njc0LCAyNzY4NSwgMjc2OTYsIDI3NzA3LCAKLSAgICAyNzcxOCwgMjc3MjksIDI3NzQwLCAyNzc1MSwgMjc3NjIsIDI3NzczLCAyNzc4NCwgMjc3OTUsIDI3ODA2LCAyNzgxNywgCi0gICAgMjc4MjgsIDI3ODM5LCAyNzg1MCwgMjc4NjEsIDI3ODcyLCAyNzg4MywgMjc4OTQsIDI3OTA1LCAyNzkxNiwgMjc5MjcsIAotICAgIDI3OTM4LCAyNzk0OSwgMjc5NjAsIDI3OTcxLCAyNzk4MiwgMjc5OTMsIDI4MDA0LCAyODAxNSwgMjgwMjYsIDI4MDM3LCAKLSAgICAyODA0OCwgMjgwNTksIDI4MDcwLCAyODA4MSwgMjgwOTIsIDI4MTAzLCAyODExNCwgMjgxMjUsIDI4MTM2LCAyODE0NywgCi0gICAgMjgxNTgsIDI4MTY5LCAyODE4MCwgMjgxOTEsIDI4MjAyLCAyODIxMywgMjgyMjQsIDI4MjM1LCAyODI0NiwgMjgyNTcsIAotICAgIDI4MjY4LCAyODI3OSwgMjgyOTAsIDIwMTgxLCAyODMwMSwgMjgzMTIsIDI4MzIzLCAyODMzNCwgMjgzNDUsIDI4MzU2LCAKLSAgICAyODM2NywgMjgzNzgsIDI4Mzg5LCAyODQwMCwgMjg0MTEsIDI4NDIyLCAyODQzMywgMjg0NDQsIDI4NDU1LCAyODQ2NiwgCi0gICAgMjg0NzcsIDI4NDg4LCAyODQ5OSwgMjg1MTAsIDI4NTIxLCAyODUzMiwgMjg1NDMsIDI4NTU0LCAyODU2NSwgMjg1NzYsIAotICAgIDI4NTg3LCAyODU5OCwgMjg2MDksIDI4NjIwLCAyODYzMSwgMjg2NDIsIDI4NjUzLCAyODY2NCwgMjg2NzUsIDI4Njg2LCAKLSAgICAyODY5NywgMjg3MDgsIDI4NzE5LCAyODczMCwgMjg3NDEsIDI4NzUyLCAyODc2MywgMjg3NzQsIDI4Nzg1LCAyODc5NiwgCi0gICAgMjg4MDcsIDI4ODE4LCAyODgyOSwgMjg4NDAsIDI4ODUxLCAyODg2MiwgMjg4NzMsIDI4ODg0LCAyODg5NSwgMjg5MDYsIAotICAgIDI4OTE2LCAyODkyNiwgMjg5MzYsIDI4OTQ2LCAyODk1NiwgMjg5NjYsIDI4OTc2LCAyODk4NiwgMjg5OTYsIDI5MDA2LCAKLSAgICAyOTAxNiwgMjkwMjYsIDI5MDM2LCAyOTA0NiwgMjkwNTYsIDI5MDY2LCAyOTA3NiwgMjkwODYsIDI5MDk2LCAyOTEwNiwgCi0gICAgMjkxMTYsIDI5MTI2LCAyOTEzNiwgMjkxNDYsIDIzODI4LCAyOTE1NiwgMjkxNjYsIDI5MTc2LCAyOTE4NiwgMjkxOTYsIAotICAgIDI5MjA2LCAyOTIxNiwgMjkyMjYsIDI5MjM2LCAxMzU0LCAyOTI0NiwgMjkyNTYsIDI5MjY2LCAyOTI3NiwgMjkyODYsIAotICAgIDI5Mjk2LCAyOTMwNiwgMjkzMTYsIDI5MzI2LCAyOTMzNiwgMjkzNDYsIDI5MzU2LCAyOTM2NiwgMjkzNzYsIDI5Mzg2LCAKLSAgICAyOTM5NiwgMjk0MDYsIDI5NDE2LCAyOTQyNiwgMjk0MzYsIDI5NDQ2LCAyOTQ1NiwgMjk0NjYsIDI5NDc2LCAyOTQ4NiwgCi0gICAgMjk0OTYsIDI5NTA2LCAyOTUxNiwgMjk1MjYsIDI5NTM2LCAyOTU0NiwgMjk1NTYsIDI5NTY2LCAyOTU3NiwgMjk1ODYsIAotICAgIDI5NTk2LCAyOTYwNiwgMjk2MTYsIDI5NjI2LCAyOTYzNiwgMjk2NDYsIDI5NjU2LCAyOTY2NiwgMjk2NzYsIDI5Njg2LCAKLSAgICAyOTY5NiwgMjk3MDYsIDI5NzE2LCAyOTcyNiwgMjk3MzYsIDI5NzQ2LCAyOTc1NiwgMjk3NjYsIDI5Nzc2LCAyOTc4NiwgCi0gICAgMjk3OTYsIDI5ODA2LCAyOTgxNiwgMjk4MjYsIDI5ODM2LCAyOTg0NiwgMjk4NTYsIDI5ODY2LCAyOTg3NiwgMjk4ODYsIAotICAgIDI5ODk2LCAyOTkwNiwgMjk5MTYsIDI5OTI2LCAyOTkzNiwgMjk5NDYsIDI5OTU2LCAyOTk2NiwgMjk5NzYsIDI5OTg2LCAKLSAgICAyOTk5NiwgMzAwMDYsIDMwMDE2LCAzMDAyNiwgMjExNTcsIDMwMDM2LCAyNDQyOCwgMzAwNDYsIDMwMDU2LCAzMDA2NiwgCi0gICAgMzAwNzYsIDMwMDg2LCAzMDA5NiwgMzAxMDYsIDMwMTE2LCAzMDEyNiwgMzAxMzYsIDMwMTQ2LCAzMDE1NiwgMzAxNjYsIAotICAgIDMwMTc2LCAzMDE4NiwgMzAxOTYsIDMwMjA2LCAzMDIxNiwgMzAyMjYsIDMwMjM2LCAzMDI0NiwgMzAyNTYsIDMwMjY2LCAKLSAgICAzMDI3NiwgMzAyODYsIDMwMjk2LCAzMDMwNiwgMzAzMTYsIDMwMzI2LCAzMDMzNiwgMzAzNDYsIDMwMzU2LCAzMDM2NiwgCi0gICAgMzAzNzYsIDMwMzg2LCAzMDM5NiwgMzA0MDYsIDMwNDE2LCAzMDQyNiwgMzA0MzYsIDMwNDQ2LCAzMDQ1NiwgMzA0NjYsIAotICAgIDMwNDc2LCAzMDQ4NiwgMzA0OTYsIDMwNTA2LCAzMDUxNiwgMzA1MjYsIDMwNTM2LCAzMDU0NiwgMzA1NTYsIDMwNTY2LCAKLSAgICAzMDU3NiwgMzA1ODYsIDMwNTk2LCAzMDYwNiwgMzA2MTYsIDMwNjI2LCAzMDYzNiwgMzA2NDYsIDMwNjU2LCAzMDY2NiwgCi0gICAgMzA2NzYsIDMwNjg2LCAzMDY5NiwgMzA3MDYsIDMwNzE2LCAzMDcyNiwgMzA3MzYsIDMwNzQ2LCAzMDc1NiwgMzA3NjYsIAotICAgIDMwNzc2LCAzMDc4NiwgMzA3OTYsIDMwODA2LCAzMDgxNiwgMzA4MjYsIDMwODM2LCAzMDg0NiwgMzA4NTYsIDMwODY2LCAKLSAgICAzMDg3NiwgMzA4ODYsIDMwODk2LCAzMDkwNiwgMzA5MTYsIDMwOTI2LCAzMDkzNiwgMzA5NDYsIDMwOTU2LCAzMDk2NiwgCi0gICAgMzA5NzYsIDMwOTg2LCAzMDk5NiwgMzEwMDYsIDMxMDE2LCAzMTAyNiwgMzEwMzYsIDMxMDQ2LCAzMTA1NiwgMzEwNjYsIAotICAgIDMxMDc2LCAzMTA4NiwgMzEwOTYsIDMxMTA2LCAzMTExNiwgMzExMjYsIDMxMTM2LCAzMTE0NiwgMzExNTYsIDMxMTY2LCAKLSAgICAzMTE3NiwgMzExODYsIDMxMTk2LCAzMTIwNiwgMzEyMTYsIDMxMjI2LCAzMTIzNiwgMzEyNDYsIDMxMjU2LCAzMTI2NiwgCi0gICAgMzEyNzYsIDMxMjg2LCAzMTI5NiwgMzEzMDYsIDMxMzE2LCAzMTMyNiwgMzEzMzYsIDMxMzQ2LCAzMTM1NiwgMzEzNjYsIAotICAgIDMxMzc2LCAzMTM4NiwgMzEzOTYsIDMxNDA2LCAzMTQxNiwgMzE0MjYsIDMxNDM2LCAzMTQ0NiwgMjgwMCwgMzE0NTYsIAotICAgIDMxNDY2LCAzMTQ3NiwgMzE0ODYsIDMxNDk2LCAzMTUwNiwgMzE1MTYsIDMxNTI2LCAzMTUzNiwgMzE1NDYsIDMxNTU2LCAKLSAgICAzMTU2NiwgMzE1NzYsIDMxNTg2LCAzMTU5NiwgMzE2MDYsIDMxNjE2LCAzMTYyNiwgMzE2MzYsIDMxNjQ2LCAzMTY1NiwgCi0gICAgMzE2NjYsIDMxNjc2LCAzMTY4NiwgMzE2OTYsIDMxNzA2LCAzMTcxNiwgMzE3MjYsIDMxNzM2LCAzMTc0NiwgMzE3NTYsIAotICAgIDMxNzY2LCAzMTc3NiwgMzE3ODYsIDMxNzk2LCAzMTgwNiwgMzE4MTYsIDMxODI2LCAzMTgzNiwgMzE4NDYsIDMxODU2LCAKLSAgICAzMTg2NiwgMzE4NzYsIDMxODg2LCAzMTg5NiwgMzE5MDYsIDMxOTE2LCAzMTkyNiwgMzE5MzYsIDMxOTQ2LCAzMTk1NiwgCi0gICAgMzE5NjYsIDMxOTc2LCAzMTk4NiwgMzE5OTYsIDMyMDA2LCAzMjAxNiwgMzIwMjYsIDMyMDM2LCAzMjA0NiwgMzIwNTYsIAotICAgIDMyMDY2LCAzMjA3NSwgMzIwODQsIDMyMDkzLCAzMjEwMiwgMzIxMTEsIDMyMTIwLCAzMjEyOSwgMzIxMzgsIDMyMTQ3LCAKLSAgICAzMjE1NiwgMzIxNjUsIDMyMTc0LCAzMjE4MywgMzIxOTIsIDMyMjAxLCAzMjIxMCwgMzIyMTksIDMyMjI4LCAzMjIzNywgCi0gICAgMjA1NzMsIDMyMjQ2LCAzMjI1NSwgMzIyNjQsIDMyMjczLCAzMjI4MiwgMzIyOTEsIDMyMzAwLCAzMjMwOSwgMzIzMTgsIAotICAgIDMyMzI3LCAzMjMzNiwgMzIzNDUsIDMyMzU0LCAzMjM2MywgMzIzNzIsIDMyMzgxLCAzMjM5MCwgMzIzOTksIDMyNDA4LCAKLSAgICAzMjQxNywgMzI0MjYsIDMyNDM1LCAzMjQ0NCwgMzI0NTMsIDMyNDYyLCAzMjQ3MSwgMzI0ODAsIDMyNDg5LCAzMjQ5OCwgCi0gICAgMzI1MDcsIDMyNTE2LCAzMjUyNSwgMzI1MzQsIDMyNTQzLCAzMjU1MiwgMzI1NjEsIDMyNTcwLCAzMjU3OSwgMzI1ODgsIAotICAgIDMyNTk3LCAzMjYwNiwgMzI2MTUsIDMyNjI0LCAzMjYzMywgMzI2NDIsIDMyNjUxLCAzMjY2MCwgMzI2NjksIDMyNjc4LCAKLSAgICAyNjc0MSwgMzI2ODcsIDMyNjk2LCAzMjcwNSwgMzI3MTQsIDMyNzIzLCAzMjczMiwgMzI3NDEsIDMyNzUwLCAzMjc1OSwgCi0gICAgMzI3NjgsIDMyNzc3LCAzMjc4NiwgMzI3OTUsIDMyODA0LCAzMjgxMywgMzI4MjIsIDMyODMxLCAzMjg0MCwgMzI4NDksIAotICAgIDMyODU4LCAzMjg2NywgMzI4NzYsIDMyODg1LCAzMjg5NCwgMzI5MDMsIDMyOTEyLCAzMjkyMSwgMzI5MzAsIDMyOTM5LCAKLSAgICAzMjk0OCwgMjY5NTAsIDMyOTU3LCAzMjk2NiwgMzI5NzUsIDMyOTg0LCAzMjk5MywgMzMwMDIsIDMzMDExLCAzMzAyMCwgCi0gICAgMzMwMjksIDMzMDM4LCAzMzA0NywgMzMwNTYsIDMzMDY1LCAzMzA3NCwgMzMwODMsIDMzMDkyLCAzMzEwMSwgMzMxMTAsIAotICAgIDMzMTE5LCAzMzEyOCwgMzMxMzcsIDMzMTQ2LCAzMzE1NSwgMzMxNjQsIDMzMTczLCAzMzE4MiwgMTI2OSwgMzMxOTEsIAotICAgIDMzMjAwLCAzMzIwOSwgMzMyMTgsIDMzMjI3LCAzMzIzNiwgMzMyNDUsIDMzMjU0LCAzMzI2MywgMzMyNzIsIDMzMjgxLCAKLSAgICAzMzI5MCwgMzMyOTksIDMzMzA4LCAzMzMxNywgMzMzMjYsIDMzMzM1LCAzMjAyNywgMzMzNDQsIDMzMzUzLCAzMzM2MiwgCi0gICAgMzMzNzEsIDMzMzgwLCAzMzM4OSwgMzMzOTgsIDMzNDA3LCAzMzQxNiwgMzM0MjUsIDMzNDM0LCAzMzQ0MywgMzM0NTIsIAotICAgIDMzNDYxLCAzMzQ3MCwgMzM0NzksIDMzNDg4LCAzMzQ5NywgMzM1MDYsIDMzNTE1LCAzMzUyNCwgMzM1MzMsIDMzNTQyLCAKLSAgICAzMzU1MSwgMzM1NjAsIDMzNTY5LCAzMzU3OCwgMzM1ODcsIDMzNTk2LCAzMzYwNSwgMzM2MTQsIDMzNjIzLCAzMzYzMiwgCi0gICAgMzM2NDEsIDMzNjUwLCAzMzY1OSwgMzM2NjgsIDMzNjc3LCAzMzY4NiwgMzM2OTUsIDMzNzA0LCAzMzcxMywgMzM3MjIsIAotICAgIDMzNzMxLCAzMzc0MCwgMzM3NDksIDMzNzU4LCAzMzc2NywgMzM3NzYsIDMzNzg1LCAzMzc5NCwgMzM4MDMsIDMzODEyLCAKLSAgICAzMzgyMSwgMzM4MzAsIDMzODM5LCAzMzg0OCwgMzM4NTcsIDMzODY2LCAzMzg3NSwgMzM4ODQsIDMzODkzLCAzMzkwMiwgCi0gICAgMzM5MTEsIDMzOTIwLCAzMzkyOSwgMzM5MzgsIDMzOTQ3LCAzMzk1NiwgMzM5NjUsIDMzOTc0LCAzMzk4MywgMzM5OTIsIAotICAgIDM0MDAxLCAzNDAxMCwgMzQwMTksIDM0MDI4LCAzNDAzNywgMzQwNDYsIDM0MDU1LCAzNDA2NCwgMzQwNzMsIDM0MDgyLCAKLSAgICAzNDA5MSwgMzQxMDAsIDM0MTA5LCAzNDExOCwgMzQxMjcsIDM0MTM2LCAzNDE0NSwgMzQxNTQsIDM0MTYzLCAzNDE3MiwgCi0gICAgMzQxODEsIDM0MTkwLCAzNDE5OSwgMzQyMDgsIDM0MjE3LCAzNDIyNiwgMzQyMzUsIDM0MjQ0LCAzNDI1MywgMzQyNjIsIAotICAgIDM0MjcxLCAzNDI4MCwgMzQyODksIDM0Mjk4LCAzNDMwNywgMzQzMTYsIDM0MzI1LCAzNDMzNCwgMzQzNDMsIDM0MzUyLCAKLSAgICAzNDM2MSwgMzQzNzAsIDM0Mzc5LCAzNDM4OCwgMzQzOTcsIDM0NDA2LCAzNDQxNSwgMzQ0MjQsIDM0NDMzLCAzNDQ0MiwgCi0gICAgMzQ0NTEsIDM0NDYwLCAzNDQ2OSwgMzQ0NzgsIDM0NDg3LCAzNDQ5NiwgMzQ1MDUsIDM0NTE0LCAzNDUyMywgMzQ1MzIsIAotICAgIDM0NTQxLCAzNDU1MCwgMzQ1NTksIDExNjE3LCAzNDU2OCwgMzQ1NzcsIDM0NTg2LCAzNDU5NSwgMzQ2MDQsIDM0NjEzLCAKLSAgICAzNDYyMiwgMzQ2MzEsIDM0NjQwLCAzNDY0OSwgMzQ2NTgsIDM0NjY3LCAzNDY3NiwgMzQ2ODUsIDM0Njk0LCAzNDcwMywgCi0gICAgMzQ3MTIsIDM0NzIxLCAzNDczMCwgMzQ3MzksIDM0NzQ4LCAzNDc1NywgMzQ3NjYsIDM0Nzc1LCAzNDc4NCwgMzQ3OTMsIAotICAgIDM0ODAyLCAzNDgxMSwgMzQ4MjAsIDM0ODI5LCAzNDgzOCwgMzQ4NDcsIDM0ODU2LCAzNDg2NSwgMzQ4NzQsIDM0ODgzLCAKLSAgICAzNDg5MiwgMzQ5MDEsIDM0OTEwLCAzNDkxOSwgMzQ5MjgsIDM0OTM3LCAzNDk0NiwgMzQ5NTUsIDM0OTY0LCAzNDk3MywgCi0gICAgMzQ5ODIsIDM0OTkxLCAzNTAwMCwgMzUwMDksIDM1MDE4LCAzNTAyNywgMzUwMzYsIDM1MDQ1LCAzNTA1NCwgMzUwNjMsIAotICAgIDM1MDcyLCAzNTA4MSwgMzUwOTAsIDM1MDk5LCAzNTEwOCwgMzUxMTcsIDM1MTI2LCAzNTEzNSwgMzUxNDQsIDM1MTUzLCAKLSAgICAzNTE2MiwgMjY5OSwgMzUxNzEsIDM1MTgwLCAzNTE4OSwgMzUxOTgsIDM1MjA3LCAzNTIxNiwgMzUyMjUsIDM1MjM0LCAKLSAgICAzNTI0MywgMzUyNTIsIDM1MjYxLCAzNTI3MCwgMzUyNzksIDM1Mjg4LCAzNTI5NywgMzUzMDYsIDM1MzE1LCAzNTMyNCwgCi0gICAgMzUzMzMsIDM1MzQyLCAzNTM1MSwgMzUzNjAsIDM1MzY5LCAzNTM3OCwgMzUzODcsIDM1Mzk2LCAzNTQwNSwgMzU0MTQsIAotICAgIDM1NDIzLCAzNTQzMiwgMzU0NDEsIDM1NDUwLCAzNTQ1OSwgMzU0NjgsIDM1NDc3LCAzNTQ4NiwgMzU0OTUsIDM1NTA0LCAKLSAgICAzNTUxMywgMzU1MjIsIDM1NTMxLCAzNTUzOSwgMzU1NDcsIDM1NTU1LCAzNTU2MywgMzU1NzEsIDM1NTc5LCAzNTU4NywgCi0gICAgMzU1OTUsIDE5ODkwLCAzNTYwMywgMzU2MTEsIDM1NjE5LCAzNTYyNywgMzU2MzUsIDM1NjQzLCAzNTY1MSwgMzU2NTksIAotICAgIDM1NjY3LCAzNTY3NSwgMzU2ODMsIDM1NjkxLCAzNTY5OSwgMzU3MDcsIDM1NzE1LCAzNTcyMywgMzU3MzEsIDM1NzM5LCAKLSAgICAzNTc0NywgMzU3NTUsIDM1NzYzLCAzNTc3MSwgMjk0MjgsIDM1Nzc5LCAzNTc4NywgMzU3OTUsIDM1ODAzLCAzNTgxMSwgCi0gICAgMzU4MTksIDM1ODI3LCAzNTgzNSwgMzU4NDMsIDM1ODUxLCAyMTI3NiwgMzU4NTksIDM1ODY3LCAzNTg3NSwgMzU4ODMsIAotICAgIDM1ODkxLCAzNTg5OSwgMzU5MDcsIDM1OTE1LCAzNTkyMywgMzU5MzEsIDM1OTM5LCAyMTQ4NCwgMTk5MTgsIDM1OTQ3LCAKLSAgICAzNTk1NSwgMTQ1MywgMzU5NjMsIDM1OTcxLCAyODk4LCAzNTk3OSwgMjgxOCwgMzU5ODcsIDM1OTk1LCAzNjAwMywgMzYwMTEsIAotICAgIDE5OTc0LCAzNjAxOSwgMzYwMjcsIDM2MDM1LCAzNjA0MywgMzYwNTEsIDIwNjAwLCAzNjA1OSwgMjQxMDYsIDM2MDY3LCAKLSAgICAzNjA3NSwgMzYwODMsIDM2MDkxLCAzNjA5OSwgMzYxMDcsIDM2MTE1LCAzNjEyMywgMzYxMzEsIDM2MTM5LCAzNjE0NywgCi0gICAgMzYxNTUsIDM2MTYzLCAzNjE3MSwgMzI1ODksIDM2MTc5LCAzNjE4NywgMzYxOTUsIDM2MjAzLCAzNjIxMSwgMzYyMTksIAotICAgIDM2MjI3LCAzNjIzNSwgMzYyNDMsIDM2MjUxLCAzNjI1OSwgMzYyNjcsIDE4MzMsIDM2Mjc1LCAzNjI4MywgMzYyOTEsIAotICAgIDM2Mjk5LCAzNjMwNywgMzYzMTUsIDM2MzIzLCAzNjMzMSwgMzYzMzksIDM2MzQ3LCAzNjM1NSwgMzYzNjMsIDM2MzcxLCAKLSAgICAzNjM3OSwgMzYzODcsIDM2Mzk1LCAzNjQwMywgMzY0MTEsIDM2NDE5LCAzNjQyNywgMzY0MzUsIDM2NDQzLCAzNjQ1MSwgCi0gICAgMzY0NTksIDM2NDY3LCAzNjQ3NSwgMzY0ODMsIDM2NDkxLCAzNjQ5OSwgMzY1MDcsIDM2NTE1LCAzNjUyMywgMzY1MzEsIAotICAgIDM2NTM5LCAzNjU0NywgMzY1NTUsIDM2NTYzLCAzNjU3MSwgMzY1NzksIDM2NTg3LCAzNjU5NSwgMzY2MDMsIDM2NjExLCAKLSAgICAzNjYxOSwgMzY2MjcsIDM2NjM1LCAzNjY0MywgMzY2NTEsIDM2NjU5LCAzNjY2NywgMzY2NzUsIDM2NjgzLCAyOTIwOCwgCi0gICAgMzY2OTEsIDM2Njk5LCAzNjcwNywgMzY3MTUsIDM2NzIzLCAzNjczMSwgMzY3MzksIDM2NzQ3LCAzNjc1NSwgMzY3NjMsIAotICAgIDM2NzcxLCAzNjc3OSwgMzY3ODcsIDM2Nzk1LCAzNjgwMywgMzY4MTEsIDMzMTc0LCAzNjgxOSwgMzY4MjcsIDM2ODM1LCAKLSAgICAzNjg0MywgMzY4NTEsIDM2ODU5LCAzNjg2NywgMzY4NzUsIDM2ODgzLCAzNjg5MSwgMzY4OTksIDM2OTA3LCAzNjkxNSwgCi0gICAgMzY5MjMsIDM2OTMxLCAzNjkzOSwgMzY5NDcsIDM2OTU1LCAzNjk2MywgMzY5NzEsIDM2OTc5LCAzNjk4NywgMzY5OTUsIAotICAgIDM3MDAzLCAzNzAxMSwgMzcwMTksIDM3MDI3LCAzNzAzNSwgMzcwNDMsIDM3MDUxLCAzNzA1OSwgMzcwNjcsIDM3MDc1LCAKLSAgICAzNzA4MywgMzcwOTEsIDM3MDk5LCAzNzEwNywgMzcxMTUsIDM3MTIzLCAzNzEzMSwgMzcxMzksIDM3MTQ3LCAzNzE1NSwgCi0gICAgMjkyODgsIDM3MTYzLCAzNzE3MSwgMzcxNzksIDM3MTg3LCAzNzE5NSwgMzcyMDMsIDM3MjExLCAzNzIxOSwgMzcyMjcsIAotICAgIDM3MjM1LCAzNzI0MywgMzcyNTEsIDM3MjU5LCAzNzI2NywgMzcyNzUsIDM3MjgzLCAzNzI5MSwgMzcyOTksIDM3MzA3LCAKLSAgICAyODMwNCwgMzczMTUsIDM3MzIzLCAzNzMzMSwgMzczMzksIDM3MzQ3LCAzNzM1NSwgMzczNjMsIDM3MzcxLCAzNzM3OSwgCi0gICAgMzczODcsIDM3Mzk1LCAzNzQwMywgMzc0MTEsIDM3NDE5LCAzNzQyNywgMzc0MzUsIDM3NDQzLCAzNzQ1MSwgMzc0NTksIAotICAgIDM3NDY3LCAzNzQ3NSwgMzc0ODMsIDM3NDkxLCAzNzQ5OSwgMzc1MDcsIDM3NTE1LCAzNzUyMywgMzc1MzEsIDM3NTM5LCAKLSAgICAzNzU0NywgMzc1NTUsIDM3NTYzLCAzNzU3MSwgMzc1NzksIDM3NTg3LCAzNzU5NSwgMzc2MDMsIDM3NjExLCAzMzIyOCwgCi0gICAgMzc2MTksIDM3NjI3LCAzNzYzNSwgMzc2NDMsIDM3NjUxLCAzNzY1OSwgMzc2NjcsIDM3Njc1LCAzNzY4MywgMzc2OTEsIAotICAgIDM3Njk5LCAzNzcwNywgMzc3MTUsIDM3NzIzLCAyODQ1OCwgMzc3MzEsIDM3NzM5LCAyNzg1LCAzNzc0NywgMzc3NTUsIAotICAgIDM3NzYzLCAzNzc3MSwgMzc3NzksIDM3Nzg3LCAzNzc5NSwgMzc4MDMsIDM3ODExLCAzNTEzNiwgMzc4MTksIDM3ODI3LCAKLSAgICAzNzgzNSwgMzc4NDMsIDM3ODUxLCAzNzg1OSwgMzc4NjcsIDM3ODc1LCAzNzg4MywgMzc4OTEsIDM3ODk5LCAzNzkwNywgCi0gICAgMzc5MTUsIDM3OTIzLCAzNzkzMSwgMzc5MzksIDM3OTQ3LCAzNzk1NSwgMzc5NjMsIDM3OTcxLCAzNzk3OSwgMzc5ODcsIAotICAgIDM3OTk1LCAyODY2LCAzODAwMywgMzgwMTEsIDExNzE0LCAzODAxOSwgMzgwMjcsIDM4MDM1LCAzODA0MywgMzgwNTEsIAotICAgIDM4MDU5LCAzODA2NywgMzgwNzUsIDM4MDgzLCAzODA5MSwgMjUwNzgsIDM4MDk5LCAzODEwNywgMzgxMTUsIDM4MTIzLCAKLSAgICAzODEzMSwgMzgxMzksIDM4MTQ3LCAzODE1NSwgMzgxNjMsIDM4MTcxLCAzODE3OSwgMzgxODcsIDM4MTk1LCAzODIwMywgCi0gICAgMzgyMTEsIDM4MjE5LCAzODIyNywgMzgyMzUsIDM4MjQzLCAzODI1MSwgMzgyNTksIDM4MjY3LCAzODI3NSwgMzgyODMsIAotICAgIDM4MjkxLCAzODI5OSwgMzgzMDcsIDM4MzE1LCAzODMyMywgMzgzMzEsIDM4MzM5LCAzODM0NywgMzgzNTUsIDM4MzYzLCAKLSAgICAzODM3MSwgMzgzNzksIDM4Mzg3LCAyMDc2OSwgMzgzOTUsIDM4NDAzLCAzODQxMSwgMzg0MTksIDM4NDI3LCAzODQzNSwgCi0gICAgMzg0NDMsIDM4NDUxLCAzODQ1OSwgMTcyOCwgMzg0NjcsIDM4NDc1LCAzODQ4MywgMzg0OTEsIDM4NDk5LCAzODUwNywgCi0gICAgMzg1MTUsIDM4NTIzLCAzODUzMSwgMzg1MzksIDM4NTQ3LCAzODU1NSwgMzg1NjMsIDM4NTcxLCAyNjQzNCwgMzg1NzksIAotICAgIDM4NTg3LCAzODU5NSwgMzg2MDMsIDM4NjExLCAzODYxOSwgMzg2MjcsIDM4NjM1LCAzODY0MywgMzg2NTEsIDM4NjU5LCAKLSAgICAzODY2NywgMzg2NzUsIDM4NjgzLCAzODY5MSwgMzg2OTksIDM4NzA3LCAzODcxNSwgMzg3MjMsIDM4NzMxLCAzODczOSwgCi0gICAgMzg3NDcsIDM4NzU1LCAzODc2MywgMzg3NzEsIDIwNTIwLCAzODc3OSwgMzg3ODcsIDM4Nzk1LCAzODgwMywgMzg4MTEsIAotICAgIDM4ODE5LCAzODgyNywgMzg4MzUsIDM4ODQzLCAzODg1MSwgMzg4NTksIDM4ODY3LCAzMDk5OCwgMzg4NzUsIDM4ODgzLCAKLSAgICAzODg5MSwgMzg4OTksIDM4OTA3LCAzODkxNSwgMzg5MjMsIDM4OTMxLCAzODkzOSwgMzg5NDcsIDM4OTU1LCAzODk2MiwgCi0gICAgMjA5NjUsIDM4OTY5LCAzODk3NiwgMzg5ODMsIDM4OTkwLCAzODk5NywgMzkwMDQsIDM5MDExLCAzOTAxOCwgMzkwMjUsIAotICAgIDIwNjc5LCAzOTAzMiwgMzkwMzksIDM5MDQ2LCAzOTA1MywgMzkwNjAsIDM5MDY3LCAzOTA3NCwgMzkwODEsIDM5MDg4LCAKLSAgICAzOTA5NSwgMzkxMDIsIDM5MTA5LCAzOTExNiwgMzkxMjMsIDM5MTMwLCAzOTEzNywgMzkxNDQsIDM5MTUxLCAzOTE1OCwgCi0gICAgMzkxNjUsIDM5MTcyLCAzOTE3OSwgMzkxODYsIDExODk4LCAzOTE5MywgMzkyMDAsIDM5MjA3LCAzOTIxNCwgMzkyMjEsIAotICAgIDM5MjI4LCAzOTIzNSwgMzkyNDIsIDM5MjQ5LCAzOTI1NiwgMzkyNjMsIDM5MjcwLCAzOTI3NywgMzkyODQsIDM5MjkxLCAKLSAgICAzOTI5OCwgMzkzMDUsIDM5MzEyLCAzOTMxOSwgMzkzMjYsIDM5MzMzLCAzOTM0MCwgMzkzNDcsIDM5MzU0LCAzOTM2MSwgCi0gICAgMzkzNjgsIDE0OTIsIDM5Mzc1LCAzOTM4MiwgMzkzODksIDE1ODUsIDM5Mzk2LCAzOTQwMywgMzk0MTAsIDM5NDE3LCAKLSAgICAzOTQyNCwgMzk0MzEsIDM5NDM4LCAzOTQ0NSwgMzk0NTIsIDM5NDU5LCAzOTQ2NiwgMzk0NzMsIDM5NDgwLCAzOTQ4NywgCi0gICAgMzk0OTQsIDEzMzYsIDM5NTAxLCAzOTUwOCwgMzk1MTUsIDM5NTIyLCAzOTUyOSwgMzk1MzYsIDM5NTQzLCAzOTU1MCwgCi0gICAgMzk1NTcsIDM5NTY0LCAzOTU3MSwgMzk1NzgsIDM5NTg1LCAzOTU5MiwgMzk1OTksIDMyMzU2LCAzOTYwNiwgMzk2MTMsIAotICAgIDM5NjIwLCAzOTYyNywgMzk2MzQsIDM5NjQxLCAzOTY0OCwgMzk2NTUsIDM5NjYyLCAzOTY2OSwgMjg0NDgsIDM5Njc2LCAKLSAgICAzOTY4MywgMzk2OTAsIDM5Njk3LCAzOTcwNCwgMzk3MTEsIDM5NzE4LCAzOTcyNSwgMzk3MzIsIDM5NzM5LCAyMzg1NSwgCi0gICAgMzk3NDYsIDM5NzUzLCAzOTc2MCwgMzk3NjcsIDM5Nzc0LCAzOTc4MSwgMzk3ODgsIDM5Nzk1LCAzOTgwMiwgMzk4MDksIAotICAgIDM5ODE2LCAzOTgyMywgMzk4MzAsIDM5ODM3LCAzOTg0NCwgMzk4NTEsIDM5ODU4LCAzOTg2NSwgMzk4NzIsIDM5ODc5LCAKLSAgICAzOTg4NiwgMzk4OTMsIDM5OTAwLCAzOTkwNywgMzk5MTQsIDM5OTIxLCAzOTkyOCwgMzk5MzUsIDM5OTQyLCAzOTk0OSwgCi0gICAgMzk5NTYsIDM5OTYzLCAzOTk3MCwgMzk5NzcsIDM5OTg0LCAzOTk5MSwgMzk5OTgsIDQwMDA1LCA0MDAxMiwgNDAwMTksIAotICAgIDQwMDI2LCA0MDAzMywgNDAwNDAsIDQwMDQ3LCA0MDA1NCwgNDAwNjEsIDQwMDY4LCA0MDA3NSwgNDAwODIsIDQwMDg5LCAKLSAgICA0MDA5NiwgNDAxMDMsIDQwMTEwLCA0MDExNywgNDAxMjQsIDQwMTMxLCA0MDEzOCwgNDAxNDUsIDQwMTUyLCA0MDE1OSwgCi0gICAgNDAxNjYsIDQwMTczLCA0MDE4MCwgNDAxODcsIDQwMTk0LCA0MDIwMSwgNDAyMDgsIDQwMjE1LCA0MDIyMiwgNDAyMjksIAotICAgIDQwMjM2LCA0MDI0MywgNDAyNTAsIDQwMjU3LCA0MDI2NCwgNDAyNzEsIDQwMjc4LCA0MDI4NSwgMzMwMjIsIDQwMjkyLCAKLSAgICA0MDI5OSwgNDAzMDYsIDQwMzEzLCA0MDMyMCwgNDAzMjcsIDQwMzM0LCA0MDM0MSwgNDAzNDgsIDQwMzU1LCA0MDM2MiwgCi0gICAgNDAzNjksIDQwMzc2LCA0MDM4MywgNDAzOTAsIDQwMzk3LCA0MDQwNCwgNDA0MTEsIDQwNDE4LCA0MDQyNSwgNDA0MzIsIAotICAgIDQwNDM5LCA0MDQ0NiwgNDA0NTMsIDQwNDYwLCA0MDQ2NywgNDA0NzQsIDQwNDgxLCA0MDQ4OCwgNDA0OTUsIDQwNTAyLCAKLSAgICAyNzEwNiwgNDA1MDksIDQwNTE2LCA0MDUyMywgNDA1MzAsIDQwNTM3LCA0MDU0NCwgNDA1NTEsIDQwNTU4LCA0MDU2NSwgCi0gICAgNDA1NzIsIDQwNTc5LCA0MDU4NiwgMzI1OTAsIDQwNTkzLCA0MDYwMCwgNDA2MDcsIDQwNjE0LCA0MDYyMSwgNDA2MjgsIAotICAgIDQwNjM1LCA0MDY0MiwgNDA2NDksIDE3NjUsIDQwNjU2LCA0MDY2MywgNDA2NzAsIDQwNjc3LCA0MDY4NCwgNDA2OTEsIAotICAgIDQwNjk4LCA0MDcwNSwgNDA3MTIsIDQwNzE5LCA0MDcyNiwgNDA3MzMsIDQwNzQwLCA0MDc0NywgNDA3NTQsIDQwNzYxLCAKLSAgICA0MDc2OCwgNDA3NzUsIDQwNzgyLCA0MDc4OSwgNDA3OTYsIDQwODAzLCA0MDgxMCwgNDA4MTcsIDQwODI0LCA0MDgzMSwgCi0gICAgNDA4MzgsIDQwODQ1LCA0MDg1MiwgNDA4NTksIDQwODY2LCA0MDg3MywgNDA4ODAsIDQwODg3LCA0MDg5NCwgNDA5MDEsIAotICAgIDQwOTA4LCA0MDkxNSwgNDA5MjIsIDQwOTI5LCA0MDkzNiwgNDA5NDMsIDQwOTUwLCA0MDk1NywgNDA5NjQsIDQwOTcxLCAKLSAgICA0MDk3OCwgNDA5ODUsIDQwOTkyLCA0MDk5OSwgNDEwMDYsIDQxMDEzLCA0MTAyMCwgMzMyMjksIDQxMDI3LCA0MTAzNCwgCi0gICAgNDEwNDEsIDQxMDQ4LCA0MTA1NSwgNDEwNjIsIDQxMDY5LCA0MTA3NiwgNDEwODMsIDQxMDkwLCA0MTA5NywgNDExMDQsIAotICAgIDQxMTExLCA0MTExOCwgNDExMjUsIDQxMTMyLCA0MTEzOSwgNDExNDYsIDQxMTUzLCA0MTE2MCwgMzEyMzksIDQxMTY3LCAKLSAgICA0MTE3NCwgNDExODEsIDQxMTg4LCA0MTE5NSwgNDEyMDIsIDQxMjA5LCA0MTIxNiwgNDEyMjMsIDQxMjMwLCAyODM0OSwgCi0gICAgNDEyMzcsIDQxMjQ0LCA0MTI1MSwgNDEyNTgsIDQxMjY1LCA0MTI3MiwgNDEyNzksIDQxMjg2LCA0MTI5MywgNDEzMDAsIAotICAgIDQxMzA3LCA0MTMxNCwgNDEzMjEsIDQxMzI4LCAzNjkwMCwgNDEzMzUsIDQxMzQyLCA0MTM0OSwgNDEzNTYsIDQxMzYzLCAKLSAgICA0MTM3MCwgNDEzNzcsIDQxMzg0LCA0MTM5MSwgNDEzOTgsIDQxNDA1LCA0MTQxMiwgNDE0MTksIDQxNDI2LCA0MTQzMywgCi0gICAgNDE0NDAsIDQxNDQ3LCA0MTQ1NCwgNDE0NjEsIDQxNDY4LCA0MTQ3NSwgNDE0ODIsIDM3ODc2LCA0MTQ4OSwgNDE0OTYsIAotICAgIDQxNTAzLCA0MTUxMCwgNDE1MTcsIDQxNTI0LCA0MTUzMSwgNDE1MzgsIDQxNTQ1LCA0MTU1MiwgNDE1NTksIDQxNTY2LCAKLSAgICA0MTU3MywgNDE1ODAsIDQxNTg3LCA0MTU5NCwgNDE2MDEsIDQxNjA4LCA0MTYxNSwgNDE2MjIsIDQxNjI5LCA0MTYzNiwgCi0gICAgNDE2NDMsIDQxNjUwLCA0MTY1NywgNDE2NjQsIDQxNjcxLCA0MTY3OCwgNDE2ODUsIDQxNjkyLCA0MTY5OSwgNDE3MDYsIAotICAgIDQxNzEzLCA0MTcyMCwgNDE3MjcsIDMxMTk5LCA0MTczNCwgNDE3NDEsIDQxNzQ4LCA0MTc1NSwgNDE3NjIsIDQxNzY5LCAKLSAgICAzODI1MiwgNDE3NzYsIDQxNzgzLCA0MTc5MCwgNDE3OTcsIDQxODA0LCA0MTgxMSwgNDE4MTgsIDQxODI1LCA0MTgzMiwgCi0gICAgNDE4MzksIDQxODQ2LCA0MTg1MywgNDE4NjAsIDM1NzA4LCA0MTg2NywgNDE4NzQsIDQxODgxLCA0MTg4OCwgNDE4OTUsIAotICAgIDQxOTAyLCA0MTkwOSwgNDE5MTYsIDQxOTIzLCA0MTkzMCwgNDE5MzcsIDQxOTQ0LCA0MTk1MSwgNDE5NTgsIDQxOTY1LCAKLSAgICA0MTk3MiwgNDE5NzksIDQxOTg2LCA0MTk5MywgNDIwMDAsIDQyMDA3LCA0MjAxNCwgNDIwMjEsIDQyMDI4LCA0MjAzNSwgCi0gICAgNDIwNDIsIDQyMDQ5LCA0MjA1NiwgNDIwNjMsIDQyMDcwLCA0MjA3NywgNDIwODQsIDQyMDkxLCA0MjA5OCwgNDIxMDUsIAotICAgIDQyMTEyLCA0MjExOSwgNDIxMjYsIDQyMTMzLCA0MjE0MCwgNDIxNDcsIDQyMTU0LCA0MjE2MSwgNDIxNjgsIDQyMTc1LCAKLSAgICA0MjE4MiwgMjQ5MzUsIDQyMTg5LCA0MjE5NiwgNDIyMDMsIDQyMjEwLCA0MjIxNywgNDIyMjQsIDQyMjMxLCA0MjIzOCwgCi0gICAgNDIyNDUsIDQyMjUyLCA0MjI1OSwgNDIyNjYsIDQyMjczLCA0MjI4MCwgNDIyODcsIDQyMjk0LCA0MjMwMSwgNDIzMDgsIAotICAgIDQyMzE1LCA0MjMyMiwgNDIzMjksIDQyMzM2LCA0MjM0MywgNDIzNTAsIDQyMzU3LCA0MjM2NCwgNDIzNzEsIDQyMzc4LCAKLSAgICAzMzI0NywgNDIzODUsIDQyMzkyLCA0MjM5OSwgNDI0MDYsIDMwOTk5LCA0MjQxMywgNDI0MjAsIDQyNDI3LCA0MjQzNCwgCi0gICAgNDI0NDEsIDQyNDQ4LCA0MjQ1NSwgNDI0NjIsIDQyNDY5LCA0MjQ3NiwgNDI0ODMsIDQyNDkwLCA0MjQ5NywgNDI1MDQsIAotICAgIDQyNTExLCA0MjUxOCwgMTY3NiwgNDI1MjUsIDQyNTMxLCA0MjUzNywgMjk2MDAsIDMwMDQwLCA0MjU0MywgNDI1NDksIAotICAgIDQyNTU1LCA0MjU2MSwgMjE0MzQsIDQyNTY3LCA0MjU3MywgNDI1NzksIDQyNTg1LCA0MjU5MSwgNDI1OTcsIDQyNjAzLCAKLSAgICAyOTg0MCwgNDI2MDksIDQyNjE1LCA0MTE0MCwgNDI2MjEsIDQyNjI3LCA0MjYzMywgMzU5NjUsIDQyNjM5LCA0MjY0NSwgCi0gICAgNDI2NTEsIDQyNjU3LCAyOTA3MCwgNDI2NjMsIDQyNjY5LCAyOTk0MCwgNDI2NzUsIDQyNjgxLCA0MjY4NywgNDI2OTMsIAotICAgIDQyNjk5LCA0MjcwNSwgNDI3MTEsIDQyNTE5LCA0MjcxNywgNDI3MjMsIDQyNzI5LCA0MjczNSwgNDI3NDEsIDQyNzQ3LCAKLSAgICAyOTE3MCwgNDI3NTMsIDQyNzU5LCA0Mjc2NSwgNDI3NzEsIDQyNzc3LCA0Mjc4MywgNDI3ODksIDQyNzk1LCA0MjgwMSwgCi0gICAgNDI4MDcsIDQyODEzLCA0MjgxOSwgNDI4MjUsIDI5MjMwLCA0MjgzMSwgNDI4MzcsIDQyODQzLCA0Mjg0OSwgNDI4NTUsIAotICAgIDQyODYxLCA0Mjg2NywgNDI4NzMsIDI2ODc2LCA0Mjg3OSwgNDI4ODUsIDQyODkxLCA0Mjg5NywgMjA5MjcsIDQyOTAzLCAKLSAgICA0MjkwOSwgNDI5MTUsIDQyOTIxLCA0MjkyNywgMjM4ODAsIDI5NDYwLCA0MjkzMywgNDI5MzksIDQyOTQ1LCA0Mjk1MSwgCi0gICAgMjA2OTMsIDQyOTU3LCA0Mjk2MywgNDI5NjksIDQyOTc1LCA0Mjk4MSwgMTI5NCwgNDI5ODcsIDQyOTkzLCAxNTMxLCAKLSAgICAyNDMzNiwgNDI5OTksIDQzMDA1LCAxOTk0OCwgNDMwMTEsIDI0MjA0LCA0MzAxNywgMTM5OCwgMjAzNjgsIDQzMDIzLCAKLSAgICA0MzAyOSwgMjA5MTQsIDQzMDM1LCA0MzA0MSwgNDMwNDcsIDQzMDUzLCA0MzA1OSwgNDMwNjUsIDQzMDcxLCA0MzA3NywgCi0gICAgNDMwODMsIDQzMDg5LCA0MzA5NSwgMzYxODEsIDQzMTAxLCA0MzEwNywgNDMxMTMsIDQzMTE5LCA0MzEyNSwgNDMxMzEsIAotICAgIDI5MDgwLCA0MzEzNywgNDMxNDMsIDQzMTQ5LCA0MzE1NSwgNDMxNjEsIDQzMTY3LCA0MzE3MywgNDMxNzksIDQzMTg1LCAKLSAgICA0MzE5MSwgNDMxOTcsIDQzMjAzLCA0MzIwOSwgNDMyMTUsIDQzMjIxLCA0MzIyNywgNDMyMzMsIDI0MjE2LCAxMTgyNCwgCi0gICAgMzIwNjksIDQzMjM5LCA0MzI0NSwgNDMyNTEsIDQzMjU3LCA0MzI2MywgNDMyNjksIDQzMjc1LCA0MzI4MSwgNDMyODcsIAotICAgIDQzMjkzLCA0MzI5OSwgNDMzMDUsIDQzMzExLCA0MzMxNywgNDMzMjMsIDQzMzI5LCA0MzMzNSwgNDMzNDEsIDQzMzQ3LCAKLSAgICA0MzM1MywgNDMzNTksIDQzMzY1LCA0MzM3MSwgNDMzNzcsIDQzMzgzLCA0MzM4OSwgNDMzOTUsIDQzNDAxLCA0MzQwNywgCi0gICAgNDM0MTMsIDQzNDE5LCA0MzQyNSwgNDM0MzEsIDQzNDM3LCA0MzQ0MywgNDM0NDksIDQzNDU1LCA0MzQ2MSwgNDM0NjcsIAotICAgIDQzNDczLCA0MzQ3OSwgNDM0ODUsIDQzNDkxLCAyODc3OSwgNDM0OTcsIDQzNTAzLCA0MzUwOSwgNDM1MTUsIDQzNTIxLCAKLSAgICA0MzUyNywgNDM1MzMsIDQzNTM5LCA0MzU0NSwgNDM1NTEsIDQzNTU3LCA0MzU2MywgMzMyNTcsIDI5MTQwLCA0MzU2OSwgCi0gICAgNDM1NzUsIDQzNTgxLCA0MzU4NywgNDM1OTMsIDQzNTk5LCA0MzYwNSwgNDM2MTEsIDQzNjE3LCA0MzYyMywgNDM2MjksIAotICAgIDQzNjM1LCA0MzY0MSwgNDM2NDcsIDQzNjUzLCA0MzY1OSwgNDM2NjUsIDQzNjcxLCA0MzY3NywgNDM2ODMsIDQzNjg5LCAKLSAgICA0MzY5NSwgNDM3MDEsIDQzNzA3LCA0MzcxMywgNDM3MTksIDQzNzI1LCA0MzczMSwgNDM3MzcsIDQzNzQzLCA0Mzc0OSwgCi0gICAgNDM3NTUsIDQzNzYxLCA0Mzc2NywgNDM3NzMsIDQzNzc5LCA0Mzc4NSwgNDM3OTEsIDI5MzUwLCA0Mzc5NywgNDM4MDMsIAotICAgIDQzODA5LCA0MzgxNSwgNDM4MjEsIDQzODI3LCA0MzgzMywgNDM4MzksIDQzODQ1LCA0Mzg1MSwgNDM4NTcsIDQzODYzLCAKLSAgICA0Mzg2OSwgNDM4NzUsIDQzODgxLCA0Mzg4NywgNDM4OTMsIDQzODk5LCA0MzkwNSwgNDM5MTEsIDQzOTE3LCA0MzkyMywgCi0gICAgNDM5MjksIDQzOTM1LCA0Mzk0MSwgNDM5NDcsIDQzOTUzLCA0Mzk1OSwgNDM5NjUsIDQzOTcxLCA0Mzk3NywgNDM5ODMsIAotICAgIDQzOTg5LCA0Mzk5NSwgNDQwMDEsIDQ0MDA3LCA0NDAxMywgNDQwMTksIDQ0MDI1LCA0NDAzMSwgNDQwMzcsIDQ0MDQzLCAKLSAgICA0NDA0OSwgNDQwNTUsIDM1MzA5LCA0NDA2MSwgNDQwNjcsIDQ0MDczLCA0NDA3OSwgNDQwODUsIDQ0MDkxLCA0NDA5NywgCi0gICAgNDQxMDMsIDQ0MTA5LCA0NDExNSwgNDQxMjEsIDQ0MTI3LCA0NDEzMywgNDQxMzksIDQ0MTQ1LCA0NDE1MSwgNDQxNTcsIAotICAgIDQ0MTYzLCA0NDE2OSwgNDQxNzUsIDQ0MTgxLCA0NDE4NywgNDQxOTMsIDQ0MTk5LCA0NDIwNSwgNDQyMTEsIDQ0MjE3LCAKLSAgICA0NDIyMywgNDQyMjksIDQ0MjM1LCAyODMwNiwgNDQyNDEsIDQ0MjQ3LCA0NDI1MywgNDQyNTksIDQ0MjY1LCA0NDI3MSwgCi0gICAgNDQyNzcsIDQ0MjgzLCA0NDI4OSwgNDQyOTUsIDQ0MzAxLCA0NDMwNywgNDQzMTMsIDQ0MzE5LCA0NDMyNSwgNDQzMzEsIAotICAgIDQ0MzM3LCA0NDM0MywgNDQzNDksIDQ0MzU1LCA0NDM2MSwgNDQzNjcsIDQ0MzczLCA0NDM3OSwgNDQzODUsIDQ0MzkxLCAKLSAgICA0NDM5NywgNDQ0MDMsIDQ0NDA5LCAyOTM0MCwgNDQ0MTUsIDQ0NDIxLCA0NDQyNywgNDQ0MzMsIDQ0NDM5LCA0NDQ0NSwgCi0gICAgNDQ0NTEsIDQ0NDU3LCA0NDQ2MywgNDQ0NjksIDQ0NDc1LCA0NDQ4MSwgNDQ0ODcsIDQ0NDkzLCA0NDQ5OSwgNDQ1MDUsIAotICAgIDQ0NTExLCA0NDUxNywgNDQ1MjMsIDQ0NTI5LCA0NDUzNSwgNDQ1NDEsIDQ0NTQ3LCA0NDU1MywgNDQ1NTksIDQ0NTY1LCAKLSAgICA0NDU3MSwgNDQ1NzcsIDQ0NTgzLCA0NDU4OSwgNDQ1OTUsIDQ0NjAxLCA0NDYwNywgNDQ2MTMsIDQ0NjE5LCA0MDg2MCwgCi0gICAgNDQ2MjUsIDQ0NjMxLCA0NDYzNywgNDQ2NDMsIDQ0NjQ5LCA0NDY1NSwgNDQ2NjEsIDQ0NjY3LCA0NDY3MywgNDQ2NzksIAotICAgIDQ0Njg1LCA0NDY5MSwgNDQ2OTcsIDM3MDY5LCA0NDcwMywgNDQ3MDksIDQ0NzE1LCA0NDcyMSwgNDQ3MjcsIDQ0NzMzLCAKLSAgICA0NDczOSwgNDQ3NDUsIDQ0NzUxLCA0NDc1NywgNDQ3NjMsIDQ0NzY5LCA0NDc3NSwgNDQ3ODEsIDQ0Nzg3LCA0NDc5MywgCi0gICAgNDQ3OTksIDQ0ODA1LCA0NDgxMSwgNDQ4MTcsIDQ0ODIzLCAzODg1MywgNDQ4MjksIDQ0ODM1LCA0NDg0MSwgNDQ4NDcsIAotICAgIDQ0ODUzLCA0NDg1OSwgNDQ4NjUsIDQ0ODcxLCA0NDg3NywgNDQ4ODMsIDQ0ODg5LCA0NDg5NSwgNDQ5MDEsIDQ0OTA3LCAKLSAgICA0NDkxMywgNDQ5MTksIDQ0OTI1LCA0NDkzMSwgNDQ5MzcsIDQ0OTQzLCA0NDk0OSwgNDQ5NTUsIDQ0OTYxLCA0NDk2NywgCi0gICAgNDQ5NzMsIDQ0OTc5LCAzNDY2MSwgNDQ5ODUsIDQ0OTkxLCA0NDk5NywgNDUwMDMsIDQ1MDA5LCA0NTAxNSwgNDUwMjEsIAotICAgIDQ1MDI3LCA0NTAzMywgNDUwMzksIDQ1MDQ1LCA0NTA1MSwgNDUwNTcsIDQ1MDYzLCA0NTA2OSwgNDUwNzUsIDQ1MDgxLCAKLSAgICA0NTA4NywgNDUwOTMsIDQ1MDk5LCA0NTEwNSwgNDUxMTEsIDM3MzI1LCA0NTExNywgNDUxMjMsIDQ1MTI5LCA0NTEzNSwgCi0gICAgNDUxNDEsIDQ1MTQ3LCA0NTE1MywgNDUxNTksIDQ1MTY1LCA0NTE3MSwgMjQ0NjgsIDQ1MTc3LCA0NTE4MywgNDUxODksIAotICAgIDQ1MTk1LCA0NTIwMSwgNDUyMDcsIDQ1MjEzLCA0NTIxOSwgNDUyMjUsIDQ1MjMxLCA0NTIzNywgNDUyNDMsIDQ1MjQ5LCAKLSAgICA0NTI1NSwgNDUyNjEsIDQ1MjY3LCA0NTI3MywgNDUyNzksIDQ1Mjg1LCA0NTI5MSwgNDUyOTcsIDQ1MzAzLCA0NTMwOSwgCi0gICAgNDUzMTUsIDQ1MzIxLCA0NTMyNywgNDUzMzMsIDQ1MzM5LCA0NTM0NSwgNDUzNTEsIDQwNDgyLCA0NTM1NywgNDUzNjMsIAotICAgIDQ1MzY5LCA0NTM3NSwgNDUzODEsIDQ1Mzg3LCA0NTM5MywgNDUzOTksIDQ1NDA1LCA0NTQxMSwgNDU0MTcsIDQ1NDIzLCAKLSAgICA0NTQyOSwgNDU0MzUsIDQ1NDQxLCA0NTQ0NywgNDU0NTMsIDQ1NDU5LCA0NTQ2NSwgNDU0NzEsIDQ1NDc3LCA0NTQ4MywgCi0gICAgNDU0ODksIDQ1NDk1LCA0NTUwMSwgNDU1MDcsIDQ1NTEzLCA0NTUxOSwgNDU1MjUsIDQ1NTMxLCA0NTUzNywgNDU1NDMsIAotICAgIDQ1NTQ5LCA0NTU1NSwgNDU1NjEsIDQ1NTY3LCA0NTU3MywgNDU1NzksIDQ1NTg1LCA0NTU5MSwgNDU1OTcsIDQ1NjAzLCAKLSAgICA0NTYwOSwgNDU2MTUsIDQ1NjIxLCA0NTYyNywgNDEzMDEsIDQ1NjMzLCA0NTYzOSwgNDU2NDUsIDQ1NjUxLCA0NTY1NywgCi0gICAgNDU2NjMsIDQ1NjY5LCA0NTY3NSwgNDU2ODEsIDQ1Njg3LCA0NTY5MywgNDU2OTksIDQ1NzA1LCA0NTcxMSwgNDU3MTcsIAotICAgIDQ1NzIzLCA0NTcyOSwgNDU3MzUsIDQ1NzQxLCA0NTc0NywgNDU3NTMsIDQ1NzU5LCA0NTc2NSwgNDU3NzEsIDQ1Nzc3LCAKLSAgICA0NTc4MywgNDU3ODksIDQ1Nzk1LCA0NTgwMSwgNDU4MDcsIDQ1ODEzLCA0NTgxOSwgNDU4MjUsIDQ1ODMxLCA0NTgzNywgCi0gICAgNDU4NDMsIDQ1ODQ5LCA0NTg1NSwgNDU4NjEsIDQ1ODY3LCA0NTg3MywgNDU4NzksIDQ1ODg1LCA0NTg5MSwgNDU4OTcsIAotICAgIDQ1OTAzLCA0NTkwOSwgNDU5MTUsIDQ1OTIxLCA0NTkyNywgNDU5MzMsIDQ1OTM5LCA0NTk0NSwgNDU5NTEsIDQ1OTU3LCAKLSAgICA0NTk2MywgNDAwOTcsIDQ1OTY5LCA0NTk3NSwgNDU5ODEsIDQ1OTg3LCA0NTk5MywgNDU5OTksIDQ2MDA1LCA0NjAxMSwgCi0gICAgNDYwMTcsIDQ2MDIzLCA0NjAyOSwgNDYwMzUsIDQ2MDQxLCA0NjA0NywgNDYwNTMsIDQ2MDU5LCA0NjA2NSwgNDYwNzEsIAotICAgIDQ2MDc3LCA0NjA4MywgNDYwODksIDQ2MDk1LCA0NjEwMSwgNDYxMDcsIDQ2MTEzLCA0NjExOSwgNDYxMjUsIDQ2MTMxLCAKLSAgICA0NjEzNywgNDYxNDMsIDQ2MTQ5LCA0NjE1NSwgNDYxNjEsIDQ2MTY3LCA0NjE3MywgNDYxNzksIDQ2MTg1LCA0NjE5MSwgCi0gICAgNDYxOTcsIDQ2MjAzLCA0NjIwOSwgNDYyMTUsIDQ2MjIxLCA0NjIyNywgNDYyMzMsIDQ2MjM5LCA0NjI0NSwgNDYyNTEsIAotICAgIDQ2MjU3LCA0NjI2MywgNDYyNjksIDQ2Mjc1LCA0NjI4MSwgNDYyODcsIDMzMjM5LCA0NjI5MywgNDYyOTksIDQ2MzA1LCAKLSAgICA0NjMxMSwgNDYzMTcsIDQ2MzIzLCA0NjMyOSwgNDYzMzUsIDQ2MzQxLCA0NjM0NywgNDYzNTMsIDQ2MzU5LCA0NjM2NSwgCi0gICAgNDYzNzEsIDQ2Mzc3LCA0NjM4MywgNDYzODksIDQ2Mzk1LCA0NjQwMSwgNDY0MDcsIDQ2NDEzLCA0NjQxOSwgNDY0MjUsIAotICAgIDQ2NDMxLCA0NjQzNywgNDY0NDMsIDQ2NDQ5LCA0NjQ1NSwgNDY0NjEsIDQ2NDY3LCA0NjQ3MywgNDY0NzksIDQ2NDg1LCAKLSAgICA0NjQ5MSwgNDY0OTcsIDQ2NTAzLCA0NjUwOSwgNDY1MTUsIDQ2NTIxLCA0NjUyNywgNDY1MzMsIDQ2NTM5LCA0NjU0NSwgCi0gICAgMzQ3NTEsIDQ2NTUxLCA0NjU1NywgNDY1NjMsIDQ2NTY5LCA0NjU3NSwgNDY1ODEsIDQ2NTg3LCA0NjU5MywgNDY1OTksIAotICAgIDQ2NjA1LCA0NjYxMSwgNDY2MTcsIDQ2NjIzLCA0NjYyOSwgNDY2MzUsIDQ2NjQxLCA0NjY0NywgNDY2NTMsIDQ2NjU5LCAKLSAgICA0NjY2NSwgNDY2NzEsIDQ2Njc3LCA0NjY4MywgNDY2ODksIDQ2Njk1LCAxMTc5NCwgNDY3MDEsIDQ2NzA3LCA0NjcxMywgCi0gICAgNDY3MTksIDQ2NzI1LCA0NjczMSwgNDY3MzcsIDQ2NzQzLCA0Njc0OSwgNDY3NTUsIDQ2NzYxLCA0Njc2NywgNDY3NzMsIAotICAgIDQ2Nzc5LCAyNDI1MiwgNDY3ODUsIDQ2NzkxLCA0Njc5NywgNDY4MDMsIDQyMzcyLCA0NjgwOSwgNDY4MTUsIDMzMjY2LCAKLSAgICA0NjgyMSwgNDY4MjcsIDQ2ODMzLCA0NjgzOSwgNDY4NDUsIDQ2ODUxLCA0Njg1NywgNDY4NjMsIDQ2ODY5LCA0Njg3NSwgCi0gICAgNDY4ODEsIDQ2ODg3LCA0Njg5MywgNDY4OTksIDQ2OTA1LCA0NjkxMSwgNDY5MTcsIDQ2OTIzLCA0NjkyOSwgNDY5MzUsIAotICAgIDQ2OTQxLCA0Njk0NywgNDY5NTMsIDQ2OTU5LCA0Njk2NSwgNDY5NzEsIDQ2OTc3LCA0Njk4MywgNDY5ODksIDQ2OTk1LCAKLSAgICA0NzAwMSwgNDcwMDcsIDQ3MDEzLCA0NzAxOSwgNDcwMjUsIDQ3MDMxLCA0NzAzNywgNDcwNDMsIDQ3MDQ5LCA0NzA1NSwgCi0gICAgNDcwNjEsIDQ3MDY3LCA0NzA3MywgNDcwNzksIDQ3MDg1LCA0NzA5MSwgNDcwOTcsIDMxMTIwLCA0NzEwMywgNDcxMDksIAotICAgIDQ3MTE1LCA0NzEyMSwgNDcxMjcsIDQ3MTMzLCA0NzEzOSwgNDcxNDUsIDQ3MTUxLCA0NzE1NywgNDcxNjMsIDQ3MTY5LCAKLSAgICA0NzE3NSwgNDcxODEsIDQ3MTg3LCA0NzE5MywgNDcxOTksIDQ3MjA1LCA0NzIxMSwgNDcyMTcsIDQ3MjIzLCA0NzIyOSwgCi0gICAgNDcyMzUsIDQ3MjQxLCA0NzI0NywgNDcyNTMsIDQ3MjU5LCA0NzI2NSwgNDcyNzEsIDQ3Mjc3LCA0NzI4MywgNDcyODksIAotICAgIDQ3Mjk1LCAzNTAxMywgNDczMDAsIDQ3MzA1LCA0NzMxMCwgNDczMTUsIDQ3MzIwLCA0NzMyNSwgNDczMzAsIDQ3MzM1LCAKLSAgICA0NzM0MCwgNDczNDUsIDQ3MzUwLCA0NzM1NSwgNDczNjAsIDQ3MzY1LCA0NzM3MCwgMjA3ODUsIDQ3Mzc1LCA0NzM4MCwgCi0gICAgNDczODUsIDQ3MzkwLCAzMjM2NywgNDQ0MjIsIDQ3Mzk1LCA0NzQwMCwgNDMxNjIsIDQ3NDA1LCA0NzQxMCwgNDc0MTUsIAotICAgIDQ3NDIwLCAzMDg5MSwgNDc0MjUsIDQ3NDMwLCA0NjkxOCwgNDc0MzUsIDQ3NDQwLCA0NzQ0NSwgNDc0NTAsIDQ3NDU1LCAKLSAgICA0NzQ2MCwgNDc0NjUsIDQ3NDcwLCA0NzQ3NSwgNDc0ODAsIDQ3NDg1LCA0NzQ5MCwgNDc0OTUsIDQ3NTAwLCA0NzUwNSwgCi0gICAgNDQ2NjIsIDQ2NzU2LCA0NzUxMCwgNDc1MTUsIDQ3NTIwLCA0NzUyNSwgMzE0MTEsIDQ3NTMwLCA0NzUzNSwgNDc1NDAsIAotICAgIDQ3NTQ1LCA0NzU1MCwgNDc1NTUsIDQzNDQ0LCA0NzU2MCwgNDc1NjUsIDQ3NTcwLCA0NzU3NSwgNDc1ODAsIDQ3NTg1LCAKLSAgICA0NzU5MCwgNDc1OTUsIDQ3NjAwLCA0NzYwNSwgNDc2MTAsIDQ3NjE1LCA0NzYyMCwgNDc2MjUsIDM1MTEyLCA0NzYzMCwgCi0gICAgNDc2MzUsIDQ3NjQwLCA0NzY0NSwgNDc2NTAsIDQ3NjU1LCA0NzY2MCwgNDc2NjUsIDQ3NjcwLCA0Mzc4NiwgNDc2NzUsIAotICAgIDQ3NjgwLCA0NzY4NSwgNDc2OTAsIDQ3Njk1LCA0NzcwMCwgNDc3MDUsIDQ3NzEwLCAxMzU5LCA0NzcxNSwgNDc3MjAsIAotICAgIDQ3NzI1LCA0NzczMCwgNDc3MzUsIDM4NTEwLCA0Nzc0MCwgNDc3NDUsIDQyMDY1LCAxODc3MCwgNDc3NTAsIDQ3NzU1LCAKLSAgICA0Nzc2MCwgNDc3NjUsIDI5MDAxLCA0Nzc3MCwgNDc3NzUsIDQ3NzgwLCA0Nzc4NSwgNDc3OTAsIDQ3Nzk1LCA0NzgwMCwgCi0gICAgMzk2OTIsIDQ3ODA1LCA0NzgxMCwgNDc4MTUsIDQ3ODIwLCA0NzgyNSwgNDc4MzAsIDQ3ODM1LCA0Nzg0MCwgNDc4NDUsIAotICAgIDQ0NDY0LCA0Nzg1MCwgNDc4NTUsIDQ3ODYwLCA0Nzg2NSwgNDc4NzAsIDQ3ODc1LCA0Nzg4MCwgNDc4ODUsIDQ3ODkwLCAKLSAgICA0Nzg5NSwgNDc5MDAsIDI4NDYxLCA0NzkwNSwgMzQ3OTcsIDQyMjI2LCA0NzkxMCwgNDc5MTUsIDQ3OTIwLCA0NzkyNSwgCi0gICAgNDc5MzAsIDQ3OTM1LCA0Nzk0MCwgNDc5NDUsIDQ3OTUwLCA0Nzk1NSwgNDc5NjAsIDQzMjgyLCA0Nzk2NSwgNDc5NzAsIAotICAgIDQ3OTc1LCA0Nzk4MCwgNDc5ODUsIDQ4NSwgMzM0MzgsIDQ3OTkwLCA0Nzk5NSwgNDgwMDAsIDQ4MDA1LCA0ODAxMCwgCi0gICAgNDgwMTUsIDQ4MDIwLCA0ODAyNSwgNDgwMzAsIDQ4MDM1LCA0ODA0MCwgNDgwNDUsIDExMDAsIDQ4MDUwLCA0ODA1NSwgCi0gICAgNDgwNjAsIDQ4MDY1LCA0ODA3MCwgNDgwNzUsIDQ4MDgwLCA0ODA4NSwgNDgwOTAsIDQ4MDk1LCA0ODEwMCwgNDgxMDUsIAotICAgIDQyNjcwLCA0ODExMCwgNDgxMTUsIDQ4MTIwLCA0ODEyNSwgNDgxMzAsIDQ4MTM1LCA0ODE0MCwgNDgxNDUsIDQ4MTUwLCAKLSAgICA0ODE1NSwgNDgxNjAsIDMzMDY5LCA0ODE2NSwgNDgxNzAsIDQ4MTc1LCA0NDIzNiwgNDgxODAsIDQ4MTg1LCA0ODE5MCwgCi0gICAgNDgxOTUsIDQ4MjAwLCA0ODIwNSwgNDgyMTAsIDQ4MjE1LCA0ODIyMCwgNDgyMjUsIDQ4MjMwLCAyMDU2NCwgNDgyMzUsIAotICAgIDQ4MjQwLCA0ODI0NSwgNDgyNTAsIDQ4MjU1LCA0ODI2MCwgNDgyNjUsIDQ4MjcwLCA0ODI3NSwgNDgyODAsIDQ4Mjg1LCAKLSAgICA0ODI5MCwgNDgyOTUsIDQ4MzAwLCA0ODMwNSwgNDgzMTAsIDQ4MzE1LCA0ODMyMCwgNDcyMTIsIDQ4MzI1LCA0MTI5NSwgCi0gICAgNDgzMzAsIDQ4MzM1LCA0ODM0MCwgNDgzNDUsIDQ4MzUwLCA0ODM1NSwgNDgzNjAsIDQ4MzY1LCA0ODM3MCwgNDY3OTgsIAotICAgIDIxMDcxLCA0ODM3NSwgNDgzODAsIDQ4Mzg1LCA0ODM5MCwgNDM1NTgsIDQ4Mzk1LCA0ODQwMCwgNDg0MDUsIDQ4NDEwLCAKLSAgICA0ODQxNSwgNDg0MjAsIDQ4NDI1LCA0ODQzMCwgNDg0MzUsIDQ4NDQwLCA0ODQ0NSwgNDg0NTAsIDI4Mjc0LCA0ODQ1NSwgCi0gICAgNDg0NjAsIDQ4NDY1LCA0ODQ3MCwgMzEzOTEsIDQ4NDc1LCA0ODQ4MCwgNDg0ODUsIDQ4NDkwLCA0ODQ5NSwgNDg1MDAsIAotICAgIDQ4NTA1LCA0ODUxMCwgNDg1MTUsIDQ4NTIwLCA0ODUyNSwgNDg1MzAsIDQ4NTM1LCA0ODU0MCwgNDg1NDUsIDQ4NTUwLCAKLSAgICA0ODU1NSwgNDg1NjAsIDQ4NTY1LCA0ODU3MCwgNDg1NzUsIDQyNzc4LCA0ODU4MCwgNDg1ODUsIDQ4NTkwLCA0ODU5NSwgCi0gICAgNDg2MDAsIDQ4NjA1LCA0ODYxMCwgNDg2MTUsIDQ4NjIwLCA0ODYyNSwgNDg2MzAsIDQ4NjM1LCA0ODY0MCwgNDg2NDUsIAotICAgIDQ4NjUwLCA0ODY1NSwgNDg2NjAsIDQ4NjY1LCA0ODY3MCwgNDg2NzUsIDQ4NjgwLCA0ODY4NSwgMjkzNjEsIDQ4NjkwLCAKLSAgICA0ODY5NSwgNDUzNTgsIDM2Mzk4LCA0ODcwMCwgNDg3MDUsIDQ4NzEwLCA0ODcxNSwgNDg3MjAsIDQ4NzI1LCA0ODczMCwgCi0gICAgNDg3MzUsIDQ4NzQwLCA0ODc0NSwgNDg3NTAsIDQ4NzU1LCA0ODc2MCwgNDg3NjUsIDQ4NzcwLCA0ODc3NSwgNDg3ODAsIAotICAgIDQ4Nzg1LCA0ODc5MCwgNDg3OTUsIDQ4ODAwLCA0ODgwNSwgNDY0NTAsIDQ4ODEwLCA0ODgxNSwgNDg4MjAsIDQ4ODI1LCAKLSAgICAzNTE4NCwgNDg4MzAsIDQ4ODM1LCA0ODg0MCwgNDg4NDUsIDQ4ODUwLCA0ODg1NSwgNDg4NjAsIDQ4ODY1LCA0NTExMiwgCi0gICAgNDg4NzAsIDQ4ODc1LCA0MDAwNywgNDg4ODAsIDMyODUzLCA0ODg4NSwgMjAxNzMsIDQ4ODkwLCA0ODg5NSwgNDg5MDAsIAotICAgIDQ4OTA1LCA0ODkxMCwgNDg5MTUsIDM4MjQ2LCA0ODkyMCwgNDg5MjUsIDQ4OTMwLCA0ODkzNSwgNDg5NDAsIDQ4OTQ1LCAKLSAgICAzOTg2MCwgNDE3OTksIDQ4OTUwLCA0ODk1NSwgNDg5NjAsIDQ4OTY1LCA0ODk3MCwgNDg5NzUsIDQ4OTgwLCA0ODk4NSwgCi0gICAgNDg5OTAsIDQ4OTk1LCA0OTAwMCwgNDkwMDUsIDQ5MDEwLCA0OTAxNSwgNDkwMjAsIDQ5MDI1LCA0OTAzMCwgNDkwMzUsIAotICAgIDQ5MDQwLCA0OTA0NSwgNDkwNTAsIDQ5MDU1LCA0OTA2MCwgNDY5MTIsIDQ5MDY1LCA0OTA3MCwgNDkwNzUsIDQwMjMxLCAKLSAgICA0OTA4MCwgNDkwODUsIDQ5MDkwLCA0OTA5NSwgNDkxMDAsIDM5MTA0LCA0OTEwNSwgNDkxMTAsIDQ5MTE1LCA0OTEyMCwgCi0gICAgNDkxMjUsIDQ5MTMwLCA0OTEzNSwgNDkxNDAsIDQ5MTQ1LCA0OTE1MCwgNDkxNTUsIDQ5MTYwLCA0OTE2NSwgNDkxNzAsIAotICAgIDQ5MTc1LCA0OTE4MCwgNDkxODUsIDQ5MTkwLCA0OTE5NSwgNDkyMDAsIDQ5MjA1LCAzMDk3MSwgNDkyMTAsIDQ5MjE1LCAKLSAgICA0OTIyMCwgNDkyMjUsIDQ5MjMwLCA0OTIzNSwgNDkyNDAsIDQxMjA0LCA0OTI0NSwgNDkyNTAsIDI4MzczLCA0OTI1NSwgCi0gICAgNDkyNjAsIDQ5MjY1LCA0OTI3MCwgNDkyNzUsIDQ5MjgwLCA0OTI4NSwgNDkyOTAsIDM1MzgyLCA0OTI5NSwgNDkzMDAsIAotICAgIDI3MzI4LCA0OTMwNSwgNDkzMTAsIDQ5MzE1LCA0OTMyMCwgNDkzMjUsIDQ5MzMwLCA0OTMzNSwgNDkzNDAsIDQ5MzQ1LCAKLSAgICA0OTM1MCwgNDkzNTUsIDQ5MzYwLCA0OTM2NSwgNDkzNzAsIDQ5Mzc1LCA0OTM4MCwgNDkzODUsIDQ5MzkwLCA0OTM5NSwgCi0gICAgNDk0MDAsIDQ5NDA1LCA0OTQxMCwgNDk0MTUsIDQ5NDIwLCA0OTQyNSwgNDk0MzAsIDQ5NDM1LCA0OTQ0MCwgNDk0NDUsIAotICAgIDQ5NDUwLCA0OTQ1NSwgNDk0NjAsIDQ5NDY1LCA0OTQ3MCwgNDk0NzUsIDQ5NDgwLCA0OTQ4NSwgNDk0OTAsIDQ5NDk1LCAKLSAgICA0OTUwMCwgNDk1MDUsIDQ5NTEwLCA0OTUxNSwgNDk1MjAsIDQ5NTI1LCA0OTUzMCwgNDk1MzUsIDQ5NTQwLCA0OTU0NSwgCi0gICAgNDk1NTAsIDQ5NTU1LCA0OTU2MCwgNDk1NjUsIDQ5NTcwLCA0OTU3NSwgNDk1ODAsIDQ5NTg1LCA0OTU5MCwgNDk1OTUsIAotICAgIDQ5NjAwLCA0OTYwNSwgNDk2MTAsIDQ5NjE1LCA0OTYyMCwgNDk2MjUsIDQ5NjMwLCA0OTYzNSwgNDk2NDAsIDQ5NjQ1LCAKLSAgICA0OTY1MCwgNDk2NTUsIDQ5NjYwLCA0OTY2NSwgNDk2NzAsIDQ5Njc1LCA0OTY4MCwgNDk2ODUsIDQ5NjkwLCA0OTY5NSwgCi0gICAgNDk3MDAsIDQ5NzA1LCA0OTcxMCwgNDk3MTUsIDQ5NzIwLCA0OTcyNSwgNDk3MzAsIDQ5NzM1LCA0OTc0MCwgNDk3NDUsIAotICAgIDQ5NzUwLCA0OTc1NSwgNDk3NjAsIDQ5NzY1LCA0OTc3MCwgNDk3NzUsIDQ5NzgwLCA0OTc4NSwgNDk3OTAsIDQ5Nzk1LCAKLSAgICA0OTgwMCwgNDk4MDUsIDQ5ODEwLCA0OTgxNSwgNDk4MjAsIDQ5ODI1LCA0OTgzMCwgNDk4MzUsIDQ5ODQwLCAyNDE1NywgCi0gICAgNDk4NDUsIDQ5ODUwLCA0OTg1NSwgNDk4NjAsIDQ5ODY1LCA0OTg3MCwgNDk4NzUsIDQ5ODgwLCA0OTg4NSwgNDk4OTAsIAotICAgIDQ5ODk1LCA0OTkwMCwgNDk5MDUsIDQ5OTEwLCA0OTkxNSwgNDk5MjAsIDQ5OTI1LCA0OTkzMCwgNDk5MzUsIDQ5OTQwLCAKLSAgICA0OTk0NSwgNDk5NTAsIDQ5OTU1LCA0OTk2MCwgNDk5NjUsIDQ5OTcwLCA0OTk3NSwgNDk5ODAsIDQ5OTg1LCA0OTk5MCwgCi0gICAgNDk5OTUsIDQ0Mjk2LCA0NDMwMiwgNDQzMDgsIDUwMDAwLCA1MDAwNSwgNTAwMTAsIDUwMDE1LCA1MDAyMCwgNTAwMjUsIAotICAgIDUwMDMwLCA1MDAzNSwgNTAwNDAsIDUwMDQ1LCA1MDA1MCwgNTAwNTUsIDMxNDMxLCA0NDMxNCwgNDQzMjAsIDUwMDYwLCAKLSAgICA0NDMyNiwgNTAwNjUsIDQ1ODk4LCA1MDA3MCwgNTAwNzUsIDUwMDgwLCA1MDA4NSwgNTAwOTAsIDUwMDk1LCA1MDEwMCwgCi0gICAgNTAxMDUsIDUwMTEwLCA1MDExNSwgNTAxMjAsIDUwMTI1LCA1MDEzMCwgNTAxMzUsIDUwMTQwLCA0NDQ1OCwgNTAxNDUsIAotICAgIDUwMTUwLCA1MDE1NSwgNTAxNjAsIDUwMTY1LCA1MDE3MCwgNTAxNzUsIDUwMTgwLCA1MDE4NSwgNTAxOTAsIDUwMTk1LCAKLSAgICA1MDIwMCwgNTAyMDUsIDUwMjEwLCA1MDIxNSwgNTAyMjAsIDUwMjI1LCA0MzAzMCwgNTAyMzAsIDUwMjM1LCA1MDI0MCwgCi0gICAgNTAyNDUsIDUwMjUwLCA1MDI1NSwgNTAyNjAsIDUwMjY1LCA1MDI3MCwgNTAyNzUsIDUwMjgwLCA1MDI4NSwgNTAyOTAsIAotICAgIDUwMjk1LCA1MDMwMCwgNTAzMDUsIDUwMzEwLCA1MDMxNSwgNTAzMjAsIDUwMzI1LCA1MDMzMCwgNTAzMzUsIDUwMzQwLCAKLSAgICA1MDM0NSwgNTAzNTAsIDUwMzU1LCA1MDM2MCwgNTAzNjUsIDUwMzcwLCA1MDM3NSwgNTAzODAsIDUwMzg1LCA1MDM5MCwgCi0gICAgNTAzOTUsIDUwNDAwLCA1MDQwNSwgNTA0MTAsIDUwNDE1LCA1MDQyMCwgNTA0MjUsIDUwNDMwLCA1MDQzNSwgNTA0NDAsIAotICAgIDUwNDQ1LCA1MDQ1MCwgNTA0NTUsIDUwNDYwLCA1MDQ2NSwgNTA0NzAsIDUwNDc1LCA1MDQ4MCwgNTA0ODUsIDUwNDkwLCAKLSAgICA1MDQ5NSwgNTA1MDAsIDUwNTA1LCA1MDUxMCwgNTA1MTUsIDUwNTIwLCA1MDUyNSwgNTA1MzAsIDUwNTM1LCA1MDU0MCwgCi0gICAgNDQ2NjgsIDQ0Njc0LCAyOTQ3MSwgNTA1NDUsIDUwNTUwLCA1MDU1NSwgNTA1NjAsIDUwNTY1LCA1MDU3MCwgNTA1NzUsIAotICAgIDUwNTgwLCA1MDU4NSwgNTA1OTAsIDUwNTk1LCA1MDYwMCwgNTA2MDUsIDUwNjEwLCAzOTE4MSwgNDQ2ODYsIDUwNjE1LCAKLSAgICA0NDY5MiwgNTA2MjAsIDUwNjI1LCA1MDYzMCwgMzI4OTgsIDUwNjM1LCA1MDY0MCwgNTA2NDUsIDUwNjUwLCA1MDY1NSwgCi0gICAgNDcxNzYsIDQ3MTgyLCAzODMzNCwgNTA2NjAsIDUwNjY1LCA1MDY3MCwgNTA2NzUsIDUwNjgwLCA1MDY4NSwgNTA2OTAsIAotICAgIDUwNjk1LCA1MDcwMCwgNTA3MDUsIDUwNzEwLCA1MDcxNSwgNTA3MjAsIDUwNzI1LCA1MDczMCwgNDU3NTQsIDUwNzM1LCAKLSAgICA1MDc0MCwgNDU3NjAsIDUwNzQ1LCA1MDc1MCwgNTA3NTUsIDUwNzYwLCA1MDc2NSwgNTA3NzAsIDUwNzc1LCA0NTkyMiwgCi0gICAgNTA3ODAsIDUwNzg1LCA1MDc5MCwgNTA3OTUsIDUwODAwLCA1MDgwNSwgNTA4MTAsIDUwODE1LCA1MDgyMCwgNTA4MjUsIAotICAgIDUwODMwLCA1MDgzNSwgNTA4NDAsIDUwODQ1LCA1MDg1MCwgNTA4NTUsIDUwODYwLCA1MDg2NSwgNDUwMjgsIDUwODcwLCAKLSAgICA0NTAzNCwgNTA4NzUsIDUwODgwLCA1MDg4NSwgNTA4OTAsIDUwODk1LCA1MDkwMCwgMjAwNDcsIDUwOTA1LCAzNjAwNiwgCi0gICAgNTA5MTAsIDQ1MDQwLCA0NTA0NiwgNDUwNTIsIDQ1MDU4LCA0NTA2NCwgNDUwNzAsIDUwOTE1LCA1MDkyMCwgNTA5MjUsIAotICAgIDUwOTMwLCA0NDUwMCwgNTA5MzUsIDUwOTQwLCA0NDM2MiwgNDQ3MTYsIDUwOTQ1LCA1MDk1MCwgNTA5NTUsIDQ2ODIyLCAKLSAgICA1MDk2MCwgNTA5NjUsIDUwOTcwLCA1MDk3NSwgNTA5ODAsIDUwOTg1LCA1MDk5MCwgNTA5OTUsIDUxMDAwLCA1MTAwNSwgCi0gICAgNTEwMTAsIDUxMDE1LCA1MTAyMCwgNTEwMjUsIDUxMDMwLCA1MTAzNSwgNTEwNDAsIDUxMDQ1LCA1MTA1MCwgNTEwNTUsIAotICAgIDUxMDYwLCA1MTA2NSwgNTEwNzAsIDUxMDc1LCA1MTA4MCwgNTEwODUsIDUxMDkwLCA1MTA5NSwgNTExMDAsIDUxMTA1LCAKLSAgICA1MTExMCwgNTExMTUsIDUxMTIwLCA1MTEyNSwgNTExMzAsIDUxMTM1LCA1MTE0MCwgNTExNDUsIDUxMTUwLCA1MTE1NSwgCi0gICAgNTExNjAsIDUxMTY1LCA1MTE3MCwgNTExNzUsIDUxMTgwLCA1MTE4NSwgNTExOTAsIDUxMTk1LCA1MTIwMCwgNTEyMDUsIAotICAgIDUxMjEwLCA1MTIxNSwgNTEyMjAsIDUxMjI1LCA1MTIzMCwgNTEyMzUsIDUxMjQwLCA1MTI0NSwgNTEyNTAsIDQ2MjgyLCAKLSAgICA0NDUzMCwgNDQ1MzYsIDQ0NTQyLCA0NjM2NiwgNTEyNTUsIDUxMjYwLCA1MTI2NSwgNTEyNzAsIDUxMjc1LCA1MTI4MCwgCi0gICAgNTEyODUsIDUxMjkwLCA1MTI5NSwgNTEzMDAsIDUxMzA1LCA1MTMxMCwgNTEzMTUsIDUxMzIwLCA1MTMyNSwgNTEzMzAsIAotICAgIDQ1MDc2LCA1MTMzNSwgNTEzNDAsIDUxMzQ1LCA1MTM1MCwgNTEzNTUsIDUxMzYwLCA1MTM2NSwgNTEzNzAsIDUxMzc1LCAKLSAgICA1MTM4MCwgNTEzODUsIDUxMzkwLCA1MTM5NSwgNTE0MDAsIDQ1MzgyLCA0NTM4OCwgNDUzOTQsIDUxNDA1LCA1MTQxMCwgCi0gICAgNTE0MTUsIDUxNDIwLCA1MTQyNSwgNTE0MzAsIDUxNDM1LCA1MTQ0MCwgNTE0NDUsIDUxNDUwLCA1MTQ1NSwgNTE0NjAsIAotICAgIDUxNDY1LCA1MTQ3MCwgNTE0NzUsIDUxNDgwLCA1MTQ4NSwgNTE0OTAsIDQ1NDAwLCA1MTQ5NSwgNDU0MDYsIDQ1NDEyLCAKLSAgICA0NjAxMiwgNTE1MDAsIDUxNTA1LCA1MTUxMCwgNTE1MTUsIDUxNTIwLCA1MTUyNSwgNTE1MzAsIDUxNTM1LCA1MTU0MCwgCi0gICAgNTE1NDUsIDUxNTUwLCA1MTU1NSwgNTE1NjAsIDUxNTY1LCA1MTU3MCwgNTE1NzUsIDUxNTgwLCA1MTU4NSwgNTE1OTAsIAotICAgIDUxNTk1LCA1MTYwMCwgNTE2MDUsIDUxNjEwLCA1MTYxNSwgNTE2MjAsIDUxNjI1LCA1MTYzMCwgNTE2MzUsIDUxNjQwLCAKLSAgICA1MTY0NSwgNTE2NTAsIDUxNjU1LCA1MTY2MCwgNTE2NjUsIDUxNjcwLCA1MTY3NSwgNTE2ODAsIDUxNjg1LCA1MTY5MCwgCi0gICAgNTE2OTUsIDUxNzAwLCA1MTcwNSwgNTE3MTAsIDQyNTYyLCA1MTcxNSwgNTE3MjAsIDUxNzI1LCA1MTczMCwgNTE3MzUsIAotICAgIDUxNzQwLCA1MTc0NSwgNTE3NTAsIDUxNzU1LCA1MTc2MCwgNDY4NzYsIDUxNzY1LCA1MTc3MCwgNDUxODQsIDUxNzc1LCAKLSAgICA0NTE5MCwgNTE3ODAsIDUxNzg1LCA1MTc5MCwgNTE3OTUsIDUxODAwLCA1MTgwNSwgNDUxOTYsIDUxODEwLCA0NTIwMiwgCi0gICAgNDUyMDgsIDQ1MjE0LCA1MTgxNSwgNTE4MjAsIDQxMDg1LCA1MTgyNSwgNTE4MzAsIDM5NTgwLCA1MTgzNSwgNTE4NDAsIAotICAgIDUxODQ1LCA1MTg1MCwgNTE4NTUsIDUxODYwLCA1MTg2NSwgNTE4NzAsIDUxODc1LCA1MTg4MCwgNTE4ODUsIDUxODkwLCAKLSAgICA1MTg5NSwgNTE5MDAsIDUxOTA1LCA1MTkxMCwgNTE5MTUsIDUxOTIwLCA1MTkyNSwgNTE5MzAsIDUxOTM1LCA1MTk0MCwgCi0gICAgNTE5NDUsIDQ1MjIwLCA0NTIyNiwgNTE5NTAsIDUxOTU1LCA1MTk2MCwgNTE5NjUsIDUxOTcwLCA1MTk3NSwgNTE5ODAsIAotICAgIDUxOTg1LCAzODAzMCwgNTE5OTAsIDUxOTk1LCA0NTIzMiwgNTIwMDAsIDQ1MjM4LCAzMTQ0MSwgNDUyNDQsIDUyMDA1LCAKLSAgICA1MjAxMCwgNTIwMTUsIDUyMDIwLCA1MjAyNSwgNDE2NzMsIDUyMDMwLCA1MjAzNSwgNTIwNDAsIDUyMDQ1LCA1MjA1MCwgCi0gICAgNTIwNTUsIDUyMDYwLCA1MjA2NSwgNTIwNzAsIDUyMDc1LCA1MjA4MCwgNTIwODUsIDUyMDkwLCA1MjA5NSwgNTIxMDAsIAotICAgIDUyMTA1LCA1MjExMCwgNTIxMTUsIDUyMTIwLCA1MjEyNSwgNTIxMzAsIDQ0ODE4LCA0MzAwMCwgNTIxMzUsIDUyMTQwLCAKLSAgICA1MjE0NSwgNTIxNTAsIDUyMTU1LCA1MjE2MCwgNTIxNjUsIDUyMTcwLCA1MjE3NSwgNTIxODAsIDUyMTg1LCA1MjE5MCwgCi0gICAgNDYwMTgsIDUyMTk1LCA1MjIwMCwgNTIyMDUsIDUyMjEwLCA1MjIxNSwgNTIyMjAsIDUyMjI1LCA1MjIzMCwgNTIyMzUsIAotICAgIDUyMjQwLCA1MjI0NSwgNTIyNTAsIDUyMjU1LCA0NjAyNCwgNTIyNjAsIDUyMjY1LCA0NjAzMCwgNTIyNzAsIDUyMjc1LCAKLSAgICA1MjI4MCwgMzk3OTAsIDUyMjg1LCA1MjI5MCwgNTIyOTUsIDQ1MjU2LCA0NTI2OCwgNDI5MjgsIDUyMzAwLCA1MjMwNSwgCi0gICAgNTIzMTAsIDUyMzE1LCA1MjMyMCwgNTIzMjUsIDUyMzMwLCA1MjMzNSwgNTIzNDAsIDUyMzQ1LCA1MjM1MCwgNTIzNTUsIAotICAgIDUyMzYwLCA1MjM2NSwgNTIzNzAsIDUyMzc1LCA1MjM4MCwgNTIzODUsIDUyMzkwLCA1MjM5NSwgNDE5NTMsIDUyNDAwLCAKLSAgICA1MjQwNSwgNTI0MTAsIDUyNDE1LCA1MjQyMCwgNTI0MjUsIDUyNDMwLCA1MjQzNSwgNTI0NDAsIDUyNDQ1LCA1MjQ1MCwgCi0gICAgNTI0NTUsIDUyNDYwLCA1MjQ2NSwgNTI0NzAsIDUyNDc1LCA1MjQ4MCwgNTI0ODUsIDUyNDkwLCA1MjQ5NSwgNDUyNzQsIAotICAgIDUyNTAwLCA1MjUwNSwgNTI1MTAsIDUyNTE1LCA1MjUyMCwgNTI1MjUsIDUyNTMwLCA1MjUzNSwgNTI1NDAsIDUyNTQ1LCAKLSAgICA1MjU1MCwgNTI1NTUsIDUyNTYwLCA1MjU2NSwgNTI1NzAsIDUyNTc1LCA1MjU4MCwgNTI1ODUsIDUyNTkwLCA1MjU5NSwgCi0gICAgNTI2MDAsIDUyNjA1LCA1MjYxMCwgNTI2MTUsIDUyNjIwLCA1MjYyNSwgNTI2MzAsIDUyNjM1LCA1MjY0MCwgNTI2NDUsIAotICAgIDUyNjUwLCA1MjY1NSwgNTI2NjAsIDUyNjY1LCA1MjY3MCwgNTI2NzUsIDUyNjgwLCA1MjY4NSwgNTI2OTAsIDUyNjk1LCAKLSAgICA1MjcwMCwgNTI3MDUsIDUyNzEwLCA1MjcxNSwgNTI3MjAsIDUyNzI1LCA1MjczMCwgNTI3MzUsIDUyNzQwLCA1Mjc0NSwgCi0gICAgNTI3NTAsIDUyNzU1LCA1Mjc2MCwgNTI3NjUsIDUyNzcwLCA1Mjc3NSwgNTI3ODAsIDUyNzg1LCA1Mjc5MCwgNTI3OTUsIAotICAgIDUyODAwLCA1MjgwNSwgNTI4MTAsIDUyODE1LCA1MjgyMCwgNTI4MjUsIDUyODMwLCA1MjgzNSwgNTI4NDAsIDUyODQ1LCAKLSAgICA1Mjg1MCwgNTI4NTUsIDUyODYwLCA1Mjg2NSwgNTI4NzAsIDUyODc1LCA1Mjg4MCwgNTI4ODUsIDUyODkwLCA1Mjg5NSwgCi0gICAgNTI5MDAsIDUyOTA1LCA1MjkxMCwgNTI5MTUsIDUyOTIwLCA1MjkyNSwgNTI5MzAsIDUyOTM1LCA1Mjk0MCwgNTI5NDUsIAotICAgIDUyOTUwLCA1Mjk1NSwgNTI5NjAsIDUyOTY1LCA1Mjk3MCwgNTI5NzUsIDUyOTgwLCA1Mjk4NSwgNTI5OTAsIDUyOTk1LCAKLSAgICA1MzAwMCwgNTMwMDUsIDUzMDEwLCA0NjMyNCwgNTMwMTUsIDUzMDIwLCA1MzAyNSwgNTMwMzAsIDUzMDM1LCA1MzA0MCwgCi0gICAgNTMwNDUsIDUzMDUwLCA1MzA1NSwgNTMwNjAsIDUzMDY1LCA1MzA3MCwgNTMwNzUsIDUzMDgwLCA1MzA4NSwgNTMwOTAsIAotICAgIDUzMDk1LCA1MzEwMCwgNTMxMDUsIDUzMTEwLCA1MzExNSwgNDY0NjIsIDQ2MDQ4LCA1MzEyMCwgNDYwNTQsIDUzMTI1LCAKLSAgICA1MzEzMCwgNTMxMzUsIDUzMTQwLCA1MzE0NSwgNTMxNTAsIDUzMTU1LCA1MzE2MCwgNTMxNjUsIDUzMTcwLCA1MzE3NSwgCi0gICAgNTMxODAsIDUzMTg1LCA1MzE5MCwgNTMxOTUsIDUzMjAwLCA1MzIwNSwgNTMyMTAsIDUzMjE1LCA1MzIyMCwgNTMyMjUsIAotICAgIDUzMjMwLCA1MzIzNSwgMjgyMTksIDUzMjQwLCA1MzI0NSwgNTMyNTAsIDUzMjU1LCA1MzI2MCwgNTMyNjUsIDUzMjcwLCAKLSAgICA1MzI3NSwgNTMyODAsIDUzMjg1LCA1MzI5MCwgNTMyOTUsIDUzMzAwLCA0NjcyMCwgNDY3MjYsIDUzMzA1LCA1MzMxMCwgCi0gICAgNTMzMTUsIDUzMzIwLCA1MzMyNSwgNTMzMzAsIDUzMzM1LCAzMzM3NSwgNTMzNDAsIDEwODEsIDUzMzQ1LCA1MzM1MCwgCi0gICAgNTMzNTUsIDUzMzYwLCA1MzM2NSwgNTMzNzAsIDUzMzc1LCA1MzM4MCwgNTMzODUsIDUzMzkwLCA1MzM5NSwgNTM0MDAsIAotICAgIDUzNDA1LCA1MzQxMCwgNTM0MTUsIDUzNDIwLCA1MzQyNSwgNTM0MzAsIDUzNDM1LCA1MzQ0MCwgNTM0NDUsIDUzNDUwLCAKLSAgICA1MzQ1NSwgNTM0NjAsIDUzNDY1LCA1MzQ3MCwgNTM0NzUsIDUzNDgwLCA1MzQ4NSwgNTM0OTAsIDUzNDk1LCA1MzUwMCwgCi0gICAgNTM1MDUsIDI5MjkxLCA1MzUxMCwgNTM1MTUsIDQ2NzMyLCA1MzUyMCwgNTM1MjUsIDUzNTMwLCA1MzUzNSwgNTM1NDAsIAotICAgIDUzNTQ1LCA1MzU1MCwgMzM0OTIsIDUzNTU1LCA1MzU2MCwgNTM1NjUsIDQ2MTYyLCA1MzU3MCwgNTM1NzUsIDUzNTgwLCAKLSAgICA1MzU4NSwgNTM1OTAsIDUzNTk1LCA1MzYwMCwgNTM2MDUsIDUzNjEwLCAyNjQzNywgMjgyMzAsIDUzNjE1LCA1MzYyMCwgCi0gICAgNTM2MjUsIDUzNjMwLCA1MzYzNSwgNTM2NDAsIDUzNjQ1LCA0MTYwMywgNTM2NTAsIDUzNjU1LCA1MzY2MCwgNTM2NjUsIAotICAgIDUzNjcwLCA1MzY3NSwgNTM2ODAsIDUzNjg1LCA1MzY5MCwgNTM2OTUsIDUzNzAwLCA1MzcwNSwgNTM3MTAsIDUzNzE1LCAKLSAgICA1MzcyMCwgNTM3MjUsIDUzNzMwLCA1MzczNSwgNTM3NDAsIDUzNzQ1LCA1Mzc1MCwgNTM3NTUsIDQ0MTQwLCA1Mzc2MCwgCi0gICAgNTM3NjUsIDUzNzcwLCA1Mzc3NSwgMzg1NzQsIDM1OTM0LCA1Mzc4MCwgNTM3ODUsIDQyMjgyLCA1Mzc5MCwgNTM3OTUsIAotICAgIDUzODAwLCA1MzgwNSwgNTM4MTAsIDUzODE1LCAzMTQ1MSwgNTM4MjAsIDUzODI1LCA1MzgzMCwgNTM4MzUsIDUzODQwLCAKLSAgICA1Mzg0NSwgNTM4NTAsIDUzODU1LCAzNjM3NCwgNTM4NjAsIDUzODY1LCAzNjI3OCwgNTM4NzAsIDUzODc1LCA1Mzg4MCwgCi0gICAgNTM4ODUsIDUzODkwLCA1Mzg5NSwgNDUzMDQsIDQ1MzEwLCA0NTMxNiwgNTM5MDAsIDQ1MzM0LCA0NTU2OCwgNDU1NzQsIAotICAgIDUzOTA1LCA1MzkxMCwgNTM5MTUsIDUzOTIwLCA1MzkyNSwgNTM5MzAsIDUzOTM1LCA1Mzk0MCwgNTM5NDUsIDUzOTUwLCAKLSAgICA1Mzk1NSwgNTM5NjAsIDUzOTY1LCA1Mzk3MCwgNTM5NzUsIDUzOTgwLCA1Mzk4NSwgNTM5OTAsIDUzOTk1LCA0NjA2NiwgCi0gICAgNDYwNzIsIDQ2MDc4LCA1NDAwMCwgNTQwMDUsIDU0MDEwLCA1NDAxNSwgNTQwMjAsIDU0MDI1LCA1NDAzMCwgNTQwMzUsIAotICAgIDU0MDQwLCA0NjA4NCwgNTQwNDUsIDQ2MDkwLCA1NDA1MCwgNTQwNTUsIDU0MDYwLCA1NDA2NSwgNTQwNzAsIDU0MDc1LCAKLSAgICA1NDA4MCwgNTQwODUsIDU0MDkwLCA1NDA5NSwgNTQxMDAsIDU0MTA1LCA1NDExMCwgNTQxMTUsIDU0MTIwLCA1NDEyNSwgCi0gICAgNTQxMzAsIDU0MTM1LCA1NDE0MCwgNTQxNDUsIDU0MTUwLCA1NDE1NSwgNTQxNjAsIDU0MTY1LCA1NDE3MCwgNDYwOTYsIAotICAgIDQ2MTAyLCA1NDE3NSwgNTQxODAsIDQ2MTA4LCA0NjExNCwgNDYxMjAsIDU0MTg1LCA1NDE5MCwgNTQxOTUsIDU0MjAwLCAKLSAgICA1NDIwNSwgNTQyMTAsIDU0MjE1LCA1NDIyMCwgNTQyMjUsIDU0MjMwLCA1NDIzNSwgNTQyNDAsIDU0MjQ1LCA1NDI1MCwgCi0gICAgNTQyNTUsIDU0MjYwLCA1NDI2NSwgNTQyNzAsIDU0Mjc1LCA1NDI4MCwgNDc5NDEsIDU0Mjg1LCA1NDI4OSwgNTQyOTMsIAotICAgIDU0Mjk3LCA3MDksIDU0MzAxLCA1NDMwNSwgMzU0NDYsIDQ2Mzg1LCA1NDMwOSwgMjY2ODAsIDU0MzEzLCA0Mzc2OSwgCi0gICAgNTQzMTcsIDM2NTI3LCA1NDMyMSwgNDM1OTUsIDI4MjUzLCA1NDMyNSwgNDM0MjEsIDI5MTcyLCAzNTA1OSwgNTQzMjksIAotICAgIDU0MzMzLCAyMDIwMiwgNDI2ODMsIDU0MzM3LCAzNDcyNiwgNTQzNDEsIDQ0MjE5LCA1NDM0NSwgNDc5NzEsIDU0MzQ5LCAKLSAgICA0MzE4NywgMjQwMjYsIDQyMDQ1LCA1NDM1MywgNTQzNTcsIDU0MzYxLCA0NDY2MywgNDM3NTEsIDU0MzY1LCA1NDM2OSwgCi0gICAgNTAxMzEsIDU0MzczLCA1NDM3NywgMjc0MjgsIDU0MzgxLCA1NDM4NSwgNTQzODksIDU0MzkzLCAzNjUxMSwgNTQzOTcsIAotICAgIDU0NDAxLCA1NDQwNSwgNTQ0MDksIDU0NDEzLCA1NDQxNywgNTQ0MjEsIDM2MTAzLCA0ODAxNiwgNTQ0MjUsIDQyNzc5LCAKLSAgICA1NDQyOSwgNTQ0MzMsIDU0NDM3LCA0ODQyMSwgMzI2NTYsIDIwODI1LCA1NDQ0MSwgMzY3MzUsIDI4NDQwLCA1NDQ0NSwgCi0gICAgMjkwOTIsIDQ5OTExLCAzMTI3MiwgNDQ3NzcsIDU0NDQ5LCA0MzA4NSwgNTQ0NTMsIDU0NDU3LCA1NDQ2MSwgNTQ0NjUsIAotICAgIDU0NDY5LCAzMzM2NywgNDQzNjMsIDU0NDczLCA1NDQ3NywgNTQ0ODEsIDQxNDI5LCA0MDM1MSwgNTM3MDEsIDMwMDUyLCAKLSAgICA1NDQ4NSwgNDc4NzYsIDQxNjc0LCA1NDQ4OSwgNTQ0OTMsIDU0NDk3LCAyODQ5NSwgNTQ1MDEsIDU0NTA1LCA1NDUwOSwgCi0gICAgMzc3MTksIDU0NTEzLCA0NTA5NSwgNDIxNTAsIDU0NTE3LCAyNDE1OCwgNTQ1MjEsIDQyMTAxLCA0MzI0MSwgNTQ1MjUsIAotICAgIDQ0NDU5LCA1MTQzMSwgNTQ1MjksIDQ5MDQxLCA1MjgyMSwgNTQ1MzMsIDU0NTM3LCA0ODUzNiwgNTQ1NDEsIDU0NTQ1LCAKLSAgICA1NDU0OSwgNTQ1NTMsIDUwNjIxLCA1NDU1NywgNDU3NTUsIDUwMTM2LCA1MDM4MSwgNTQ1NjEsIDM2MjM5LCA1NDU2NSwgCi0gICAgNTQ1NjksIDU0NTczLCA1NDU3NywgNTQ1ODEsIDUxNDA2LCAzNTUwMCwgMjk4LCA1NDU4NSwgNTQ1ODksIDU0NTkzLCAKLSAgICA1NDU5NywgNTQ2MDEsIDUxNjE2LCA1MzM1MSwgNTQ2MDUsIDI3MzE4LCA0NjkxMywgNDM4MDUsIDU0NjA5LCA1NDYxMywgCi0gICAgNTQ2MTcsIDQzMjUzLCA0MDE0MSwgMzMyMDUsIDQzODk1LCA1NDYyMSwgNTQ2MjUsIDQwNDIxLCA0ODgxMSwgNTQ2MjksIAotICAgIDUwNjI2LCA1NDYzMywgNTQ2MzcsIDU0NjQxLCA1NDY0NSwgNTQ2NDksIDU0NjUzLCA1NDY1NywgNTQ2NjEsIDU0NjY1LCAKLSAgICA1MTc1NiwgNTQ2NjksIDU0NjczLCA0ODc5MSwgNTQ2NzcsIDU0NjgxLCA0MDg2MiwgNTQ2ODUsIDU0Njg5LCA1NDY5MywgCi0gICAgNTQ2OTcsIDU0NzAxLCA1NDcwNSwgNTQ3MDksIDU0NzEzLCA1NDcxNywgNTQ3MjEsIDU0NzI1LCA1NDcyOSwgNTIzOTYsIAotICAgIDU0NzMzLCA1NDczNywgNTQ3NDEsIDU0NzQ1LCA1NDc0OSwgNTQ3NTMsIDU0NzU3LCA1NDc2MSwgMjk0MDIsIDU0NzY1LCAKLSAgICA1NDc2OSwgNTQ3NzMsIDUzNjc2LCA1NDc3NywgNTQ3ODEsIDU0Nzg1LCA1NDc4OSwgNTQ3OTMsIDU0Nzk3LCA1NDgwMSwgCi0gICAgNTQ4MDUsIDQzOTczLCA0Mzk4NSwgNTA5MTYsIDU0ODA5LCA1NDgxMywgNTQ4MTcsIDQyMzgxLCA1NDgyMSwgNTQ4MjUsIAotICAgIDUwMTQxLCAzOTczNSwgNTQ4MjksIDU0ODMzLCA1MzE3MSwgNTQ4MzcsIDM0NDY1LCA1NDg0MSwgNTQ4NDUsIDUzNzY2LCAKLSAgICA1NDg0OSwgNDQwMjcsIDM4NDg3LCA0MDI5NSwgNDQ4MDcsIDU0ODUzLCA1NDg1NywgNTQ4NjEsIDU0ODY1LCA0NjAxOSwgCi0gICAgNDU5MjMsIDU0ODY5LCA0MDA1MCwgMjY0ODYsIDMyMjg3LCA0NDQ2NSwgNTAxOTEsIDQ3OTYxLCA0MTE4NCwgNTQ4NzMsIAotICAgIDU0ODc3LCAzMTMzMiwgNTQ4ODEsIDU0ODg1LCA1NDg4OSwgNTQ4OTMsIDUzMzI2LCA1NDg5NywgNTQ5MDEsIDUzMzM2LCAKLSAgICA1NDkwNSwgNTQ5MDksIDQ2NDA5LCA0MTc3OSwgNTA1NjEsIDU0OTEzLCA1NDkxNywgNTQ5MjEsIDI0NTA2LCA1NDkyNSwgCi0gICAgMzEyODIsIDU0OTI5LCA1NDkzMywgNTQ5MzcsIDU0OTQxLCA1NDk0NSwgMzYwNTUsIDU0OTQ5LCA1MjM5MSwgNTQ5NTMsIAotICAgIDUxMjA2LCA1NDk1NywgNDE5MTksIDU0OTYxLCA1NDk2NSwgNTE2MjYsIDU0OTY5LCA1NDk3MywgNTQ5NzcsIDU0OTgxLCAKLSAgICA1NDk4NSwgMjAwNDgsIDUyNDA2LCA5NTgsIDUzMDI2LCA1NDk4OSwgNDU5NzcsIDU0OTkzLCA1NDk5NywgNTUwMDEsIAotICAgIDUzODAxLCA1NTAwNSwgNTM2NjYsIDUzNjcxLCA1NTAwOSwgMzM1NzQsIDU1MDEzLCA1NTAxNywgMjM3NjIsIDM4Mzc1LCAKLSAgICA0NzMxNiwgNTM3MTEsIDUzNzE2LCAzMTEyMiwgNTM0ODEsIDM2NjE1LCA1NTAyMSwgNTUwMjUsIDU1MDI5LCA1NTAzMywgCi0gICAgNTUwMzcsIDU1MDQxLCA0NTA3MSwgNTUwNDUsIDU1MDQ5LCA1NTA1MywgNDkzMjEsIDU1MDU3LCA0MDQyOCwgNDcyMTMsIAotICAgIDUyNTUxLCA1MjU4NiwgNTUwNjEsIDUwNjc2LCA1NTA2NSwgNTUwNjksIDU1MDczLCA0MzQyNywgNTUwNzcsIDU1MDgxLCAKLSAgICA1NTA4NSwgNTUwODksIDU1MDkzLCA1NTA5NywgNTUxMDEsIDU1MTA1LCA1NTEwOSwgNTUxMTMsIDUwNzM2LCA1NTExNywgCi0gICAgNTUxMjEsIDU1MTI1LCA1NTEyOSwgMzI5NzEsIDU1MTMzLCA1MDExNiwgNDEzODAsIDU1MTM3LCA1MDEyMSwgMzcyMTUsIAotICAgIDU1MTQxLCA1NTE0NSwgNTUxNDksIDU1MTUzLCA1NTE1NywgNTUxNjEsIDU1MTY1LCA1NTE2OSwgNTUxNzMsIDM4ODMxLCAKLSAgICA1NTE3NywgNTUxODEsIDU1MTg1LCA1NTE4OSwgNTUxOTMsIDU1MTk3LCA1NTIwMSwgNTUyMDUsIDUwMzk2LCA1NTIwOSwgCi0gICAgMzc4NTUsIDU1MjEzLCA1NTIxNywgNTUyMjEsIDU1MjI1LCA1NTIyOSwgNTUyMzMsIDU1MjM3LCAzMzQzMCwgNTUyNDEsIAotICAgIDU1MjQ1LCA1NTI0OSwgNTUyNTMsIDU1MjU3LCA1NTI2MSwgNDE5NDcsIDU1MjY1LCA1NTI2OSwgNTE4NjYsIDUwNzgxLCAKLSAgICA1MjIzNiwgNTIyNDEsIDUyMjQ2LCA1MjI1MSwgNTUyNzMsIDU1Mjc3LCA1NTI4MSwgNTUyODUsIDUwODExLCA1MDgyNiwgCi0gICAgNTUyODksIDQ3NzExLCA1MDE3MSwgNTUyOTMsIDU1Mjk3LCA1NTMwMSwgMzQ4MjUsIDQ0NzIzLCA0NjY0MywgNTUzMDUsIAotICAgIDI0NDk0LCA1NTMwOSwgNTUzMTMsIDU1MzE3LCA1NTMyMSwgNTUzMjUsIDU1MzI5LCA1NTMzMywgMzQ4NjEsIDU1MzM3LCAKLSAgICA1NTM0MSwgMzU1MjcsIDUxNTk2LCA1NTM0NSwgNTUzNDksIDU1MzUzLCA1NTM1NywgNTUzNjEsIDU1MzY1LCA1NTM2OSwgCi0gICAgNTUzNzMsIDMyMDMyLCA0OTA1MSwgNDkwNTYsIDU1Mzc3LCA1MDk5MSwgNTUzODEsIDU1Mzg1LCA1NTM4OSwgNTEwNTEsIAotICAgIDU1MzkzLCA1NTM5NywgNTU0MDEsIDUxMTAxLCA1NTQwNSwgNTU0MDksIDMyOTgwLCA1NTQxMywgNDQzNTcsIDQzNTE3LCAKLSAgICAyNDQzNCwgMjM4NzAsIDU1NDE3LCA1NTQyMSwgNDUwODksIDU1NDI1LCA1NTQyOSwgNTU0MzMsIDM3NzI3LCA1NTQzNywgCi0gICAgNTU0NDEsIDU1NDQ1LCA1NTQ0OSwgNTU0NTMsIDU1NDU3LCA0ODA2MSwgNTU0NjEsIDQ2MDM3LCA1NTQ2NSwgNTU0NjksIAotICAgIDU1NDczLCA1NTQ3NywgMjY3MDIsIDU1NDgxLCAzNDkxNSwgNTU0ODUsIDU1NDg5LCAzNjQ3MSwgNTU0OTMsIDU1NDk3LCAKLSAgICA1NTUwMSwgNDU2OTUsIDU1NTA1LCA1NTUwOSwgNTU1MTMsIDU1NTE3LCA1NTUyMSwgNTU1MjUsIDUyNDExLCA1NTUyOSwgCi0gICAgNTU1MzMsIDU1NTM3LCA1NTU0MSwgNTU1NDUsIDUwNTk2LCA1MzM1NiwgNTU1NDksIDMyNDEzLCA1NTU1MywgNTU1NTcsIAotICAgIDU1NTYxLCA1NTU2NSwgNTU1NjksIDU1NTczLCA1NTU3NywgNTU1ODEsIDU1NTg1LCA1NTU4OSwgNDkwNzEsIDQ5MDc2LCAKLSAgICA1NTU5MywgNTU1OTcsIDU1NjAxLCA1NTYwNSwgNTU2MDksIDU1NjEzLCA1NTYxNywgMzcwOTUsIDU1NjIxLCA0MzQ1MSwgCi0gICAgNTU2MjUsIDU1NjI5LCA1NTYzMywgMzI1MDMsIDU1NjM3LCA1NTY0MSwgNTU2NDUsIDQ2NDE1LCA1NTY0OSwgMzgzMTksIAotICAgIDQ5MzE2LCA1NTY1MywgNTU2NTcsIDU1NjYxLCA1NTY2NSwgNTU2NjksIDQzOTc5LCA1NTY3MywgNTU2NzcsIDQzODg5LCAKLSAgICA1NTY4MSwgNTU2ODUsIDU1Njg5LCA1NTY5MywgNTI1MzEsIDUyNTU2LCA1NTY5NywgNTU3MDEsIDU1NzA1LCA1MzUyMSwgCi0gICAgNTU3MDksIDQ4NDMxLCA1NTcxMywgNTU3MTcsIDQ4ODI2LCA1MjY0NiwgNTU3MjEsIDQ4NDQxLCA1NTcyNSwgNDU3NDksIAotICAgIDU1NzI5LCA1MzkyMSwgMzY5NjcsIDQ1OTE3LCA1NTczMywgNTU3MzcsIDU1NzQxLCA1NTc0NSwgNTU3NDksIDE4MzUxLCAKLSAgICA1NTc1MywgNTU3NTcsIDQ3MTQ3LCAzMzM4NSwgNDM3MDMsIDQ3NTIxLCA1NTc2MSwgNTU3NjUsIDM1NDI4LCA1NTc2OSwgCi0gICAgNTU3NzMsIDM3MTY3LCA1NTc3NywgNTU3ODEsIDU1Nzg1LCA1NTc4OSwgNTU3OTMsIDU1Nzk3LCA1NTgwMSwgNTU4MDUsIAotICAgIDU1ODA5LCA1NTgxMywgNTU4MTcsIDU1ODIxLCA1NTgyNSwgNTU4MjksIDU1ODMzLCA1NTgzNywgNTU4NDEsIDU1ODQ1LCAKLSAgICA1NTg0OSwgNTU4NTMsIDU1ODU3LCA1NTg2MSwgNTU4NjUsIDU1ODY5LCA1NTg3MywgNTU4NzcsIDU1ODgxLCA1NTg4NSwgCi0gICAgNTU4ODksIDU1ODkzLCA1NTg5NywgNTU5MDEsIDU1OTA1LCA1NTkwOSwgNTU5MTMsIDU1OTE3LCA1NTkyMSwgNTU5MjUsIAotICAgIDU1OTI5LCA1NTkzMywgNTU5MzcsIDU1OTQxLCA1NTk0NSwgNTU5NDksIDU1OTUzLCA1NTk1NywgNTU5NjEsIDU1OTY1LCAKLSAgICA1NTk2OSwgNTU5NzMsIDU1OTc3LCA1NTk4MSwgNTU5ODUsIDU1OTg5LCA1NTk5MywgNTU5OTcsIDU2MDAxLCA1NjAwNSwgCi0gICAgNTYwMDksIDU2MDEzLCA1NjAxNywgNTYwMjEsIDU2MDI1LCA1NjAyOSwgNTYwMzMsIDU2MDM3LCA1NjA0MSwgNTYwNDUsIAotICAgIDU2MDQ5LCA1NjA1MywgNTYwNTcsIDU2MDYxLCA1NjA2NSwgNTYwNjksIDU2MDczLCA1NjA3NywgNTYwODEsIDU2MDg1LCAKLSAgICA1NjA4OSwgNTYwOTMsIDU2MDk3LCA1NjEwMSwgNTYxMDUsIDU2MTA5LCA1NjExMywgNTYxMTcsIDU2MTIxLCA1NjEyNSwgCi0gICAgNTYxMjksIDU2MTMzLCA1NjEzNywgNTYxNDEsIDU2MTQ1LCA1NjE0OSwgNTYxNTMsIDU2MTU3LCA1NjE2MSwgNTYxNjUsIAotICAgIDU2MTY5LCA1NjE3MywgNTYxNzcsIDU2MTgxLCA1NjE4NSwgNTYxODksIDU2MTkzLCA1NjE5NywgNTYyMDEsIDU2MjA1LCAKLSAgICA1NjIwOSwgNTYyMTMsIDU2MjE3LCA1NjIyMSwgNTYyMjUsIDU2MjI5LCA1NjIzMywgNTYyMzcsIDQ5ODU2LCAzNzk0MywgCi0gICAgNDk4NjYsIDU2MjQxLCA1NjI0NSwgNTYyNDksIDU2MjUzLCA1NjI1NywgMzQ5MDYsIDU2MjYxLCA1NjI2NSwgNDk4NzEsIAotICAgIDU2MjY5LCA0OTg3NiwgNTYyNzMsIDU2Mjc3LCA1NjI4MSwgNTYyODUsIDQ4Nzg2LCA1NjI4OSwgNDk4ODYsIDQ5ODkxLCAKLSAgICA0OTg5NiwgNTYyOTMsIDQzMDEzLCA1NjI5NywgMzk1ODEsIDQ5OTAxLCA0OTkwNiwgNDk5MTYsIDQ5OTIxLCA1NjMwMSwgCi0gICAgNDgzMjYsIDQ5OTMxLCA1NjMwNSwgNTYzMDksIDU2MzEzLCA0OTkzNiwgNTIxMDEsIDQ5OTQxLCA0OTk0NiwgNTYzMTcsIAotICAgIDMyMjUxLCA1NjMyMSwgNTYzMjUsIDU2MzI5LCA1NjMzMywgNTYzMzcsIDU2MzQxLCA1NjM0NSwgNTYzNDksIDU2MzUzLCAKLSAgICA1NjM1NywgNTYzNjEsIDU2MzY1LCA1NjM2OSwgNTYzNzMsIDM5Mzk5LCA1NjM3NywgNTYzODEsIDU2Mzg1LCA1NjM4OSwgCi0gICAgNTYzOTMsIDU2Mzk3LCA1NjQwMSwgNTY0MDUsIDU2NDA5LCA1NjQxMywgNTY0MTcsIDU2NDIxLCA1NjQyNSwgNTY0MjksIAotICAgIDU2NDMzLCAyNzI5NiwgNTY0MzcsIDU2NDQxLCAzODE5MSwgNDE2NTMsIDU2NDQ1LCA1MDM2MSwgNTY0NDksIDUwMzY2LCAKLSAgICAzODg5NSwgNTAzNzEsIDU2NDUzLCA0NTgxNSwgNDQ4MTksIDQzMDAxLCA1NjQ1NywgNDY0OTMsIDU2NDYxLCA0MDgzNCwgCi0gICAgNTA0MDEsIDQ1MDc3LCA1MDQwNiwgMzk1NjAsIDUwNDExLCA1MDQxNiwgNTEzMzYsIDU2NDY1LCA1NjQ2OSwgNTY0NzMsIAotICAgIDUwNDIxLCA1MzE3NiwgNTIxNTYsIDUwNDI2LCA1MDQzNiwgNTY0NzcsIDU2NDgxLCA1NjQ4NSwgNTY0ODksIDU2NDkzLCAKLSAgICA1MDQ0MSwgNTA0NDYsIDQ4NDA2LCA1MDQ1MSwgNTA0NTYsIDUwNDYxLCA1NjQ5NywgNTY1MDEsIDU2NTA1LCA1NjUwOSwgCi0gICAgNTY1MTMsIDU2NTE3LCAyOTE1MiwgNTY1MjEsIDU2NTI1LCA1NjUyOSwgNTY1MzMsIDU2NTM3LCA1NjU0MSwgNTY1NDUsIAotICAgIDI2NzEzLCA1NjU0OSwgNDg3NDYsIDU2NTUzLCA1NjU1NywgNTY1NjEsIDU2NTY1LCA0NDcyOSwgNTY1NjksIDU2NTczLCAKLSAgICA1NjU3NywgNTY1ODEsIDU2NTg1LCA1NjU4OSwgNTY1OTMsIDU2NTk3LCA1NjYwMSwgNTY2MDUsIDU2NjA5LCA1NjYxMywgCi0gICAgNTY2MTcsIDU2NjIxLCA1NjYyNSwgNTY2MjksIDU2NjMzLCA1NjYzNywgNTY2NDEsIDU2NjQ1LCA1NjY0OSwgNTY2NTMsIAotICAgIDU2NjU3LCA1NjY2MSwgNTY2NjUsIDU2NjY5LCA1NjY3MywgNTY2NzcsIDU2NjgxLCA1MDc2NiwgNTA3NzEsIDUwNzc2LCAKLSAgICA1MTg3MSwgNTE4NzYsIDUxODgxLCA1MTg4NiwgNTY2ODUsIDU2Njg5LCA1NjY5MywgMzUwNDEsIDM5OTE3LCA1MDc4NiwgCi0gICAgNTY2OTcsIDUwNzkxLCA1NjcwMSwgNTY3MDUsIDU2NzA5LCA1MDc5NiwgNTY3MTMsIDUwODAxLCA1MDgwNiwgNTY3MTcsIAotICAgIDU2NzIxLCA0NTkzNSwgNDg1MDEsIDUwODE2LCA1NjcyNSwgNTIwLCA1NjcyOSwgNDE2NjAsIDU2NzMzLCA1NjczNywgCi0gICAgNDg1MDYsIDUwODIxLCA1MDgzMSwgNTA4MzYsIDUwODQxLCA1MDg0NiwgNTA4NTEsIDU2NzQxLCA1Njc0NSwgNTY3NDksIAotICAgIDU2NzUzLCA1Njc1NywgNTY3NjEsIDQ4NjU2LCAzMjA0MiwgMjA1NjUsIDUwMTUxLCA1MDE2MSwgMzg3NTEsIDU2NzY1LCAKLSAgICAzOTMyMiwgNTY3NjksIDUwMTY2LCA1MDE3NiwgNDU2NzEsIDUwNTIxLCA1MDUyNiwgNTA1MzEsIDUwNTM2LCA0ODIzNiwgCi0gICAgNDc2NzEsIDI4MjIwLCAzNDcxNywgNTY3NzMsIDU2Nzc3LCA1Njc4MSwgNTY3ODUsIDU2Nzg5LCAzNzU4MywgNTY3OTMsIAotICAgIDU2Nzk3LCA1NjgwMSwgNTY4MDUsIDU2ODA5LCA1MDE4NiwgMzk4NjEsIDUwMjAxLCA1MDIwNiwgNTY4MTMsIDM3NjcxLCAKLSAgICA1NjgxNywgNTAyMTEsIDQzMDMxLCA0ODk1NiwgNDg5NjEsIDU2ODIxLCA1NjgyNSwgNTY4MjksIDU2ODMzLCA1NjgzNywgCi0gICAgNTY4NDEsIDU2ODQ1LCA1Njg0OSwgNTY4NTMsIDU2ODU3LCA1Njg2MSwgNTM5OTYsIDI4NTI4LCA0NDI5NywgNDQxNDcsIAotICAgIDQ0MzA5LCA1Njg2NSwgMjgyMzEsIDQ5MjQxLCA1MTk2MSwgNTY4NjksIDQ1NDQ5LCAzODc4MywgNTM2MjEsIDU2ODczLCAKLSAgICA1Njg3NywgNTY4ODEsIDU2ODg1LCA1Njg4OSwgNTY4OTMsIDQ4NjMxLCA1MTQxMSwgNTE0MTYsIDUxNDIxLCA1Njg5NywgCi0gICAgNTY5MDEsIDUyMzI2LCA1MTQyNiwgNTE0MzYsIDU2OTA1LCA1MTQ0MSwgNTE0NDYsIDUxNDUxLCA0ODYzNiwgNTE0NTYsIAotICAgIDU2OTA5LCA1MTQ2MSwgNTIzNzEsIDUxNDY2LCA1MTQ3MSwgMjA5ODEsIDU2OTEzLCA1NjkxNywgMzEzNDIsIDU2OTIxLCAKLSAgICAzNDQyOSwgNTY5MjUsIDU2OTI5LCA1NjkzMywgNjA0LCA1NjkzNywgNTY5NDEsIDU2OTQ1LCAyNzI0MSwgNTY5NDksIAotICAgIDU2OTUzLCA1Njk1NywgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCA1Njk4MSwgNTY5ODUsIDU2OTg5LCAKLSAgICA1Njk5MywgNTY5OTcsIDIzOTQyLCA1NzAwMSwgNTcwMDUsIDU3MDA5LCA1NzAxMywgNTcwMTcsIDU3MDIxLCA1NzAyNSwgCi0gICAgMzQ4MDcsIDU3MDI5LCA1NzAzMywgNDQwNTcsIDU3MDM3LCA1NzA0MSwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIAotICAgIDU3MDYxLCA1NzA2NSwgNTcwNjksIDU3MDczLCA1NzA3NywgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAKLSAgICA1MDk2NiwgNTcxMDEsIDQ4NDcxLCA1NzEwNSwgNTA5NzYsIDU3MTA5LCA1NzExMywgNTcxMTcsIDUwOTgxLCAzNTQ3MywgCi0gICAgMjY1OTIsIDU3MTIxLCA0OTA0NiwgNTM2MzEsIDU3MTI1LCA1NzEyOSwgNTcxMzMsIDUwNjkxLCA1NzEzNywgNTEwMDEsIAotICAgIDUxMDA2LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1MTAxMSwgNTcxNTMsIDMxNiwgNTEwMTYsIDU3MTU3LCA1NzE2MSwgCi0gICAgNTEwMjEsIDUxMDI2LCA0ODk3MSwgNTEwMzYsIDUxMDQxLCA1MTA0NiwgNTEwNTYsIDUxMDYxLCA1NzE2NSwgNTcxNjksIAotICAgIDU3MTczLCAzMjY2NSwgNDgzMTEsIDU3MTc3LCA1MTA3MSwgNTEwNzYsIDU3MTgxLCA1NzE4NSwgNTcxODksIDU3MTkzLCAKLSAgICA1NzE5NywgNTcyMDEsIDU3MjA1LCA1NzIwOSwgNTcyMTMsIDQxMjY4LCA1NzIxNywgNTcyMjEsIDU3MjI1LCA1NzIyOSwgCi0gICAgNTcyMzMsIDU3MjM3LCA1MTA4MSwgNTcyNDEsIDU3MjQ1LCA1NzI0OSwgNTcyNTMsIDUxMDg2LCA0NTYyOSwgNTEwOTYsIAotICAgIDQ0OTkzLCA1NzI1NywgNTcyNjEsIDUxMTA2LCA1MTExMSwgNTcyNjUsIDIwMjU4LCA1MTExNiwgNTExMjEsIDUxMTI2LCAKLSAgICA0MTM4NywgNTExMzYsIDU3MjY5LCA1MTE0MSwgNTcyNzMsIDUxMTUxLCA1NzI3NywgNTcyODEsIDQ1ODM5LCA1NzI4NSwgCi0gICAgNTcyODksIDUxMTU2LCAxOTA1NiwgNTExNjYsIDU3MjkzLCA1NzI5NywgNTczMDEsIDU3MzA1LCA1NzMwOSwgMjgyNjQsIAotICAgIDUxMTcxLCA1NzMxMywgNTExNzYsIDU3MzE3LCAzNTk0MywgNTczMjEsIDM4NTk5LCA1NzMyNSwgNTczMjksIDI5ODkyLCAKLSAgICA1MTE4MSwgNTczMzMsIDUxMTg2LCAzNTkzNSwgNTExOTYsIDQ3MTE3LCA1NzMzNywgNTczNDEsIDU3MzQ1LCA1NzM0OSwgCi0gICAgNTEyMDEsIDQ3MjU1LCA1MTIxMSwgNTczNTMsIDU3MzU3LCA1NzM2MSwgNTczNjUsIDU3MzY5LCA1NzM3MywgNTczNzcsIAotICAgIDUxMjE2LCA1NzM4MSwgNTczODUsIDUxMjIxLCA1NzM4OSwgNTczOTMsIDU3Mzk3LCA0MDY3MywgNTc0MDEsIDU3NDA1LCAKLSAgICA1NzQwOSwgNTc0MTMsIDQ3MTc3LCA0NzE4MywgNTc0MTcsIDU3NDIxLCA1NzQyNSwgMjEzMzIsIDM0Nzk4LCAxMTYzOCwgCi0gICAgNTc0MjksIDU3NDMzLCA1NzQzNywgNTE2MTEsIDU3NDQxLCA1NzQ0NSwgNDgzMTYsIDQwMjE4LCA1NzQ0OSwgNTc0NTMsIAotICAgIDU3NDU3LCA1NzQ2MSwgNTc0NjUsIDU3NDY5LCA1NzQ3MywgNTMzNDYsIDU3NDc3LCA0Mjc5MSwgNTc0ODEsIDQ0NzM1LCAKLSAgICA1NzQ4NSwgNTc0ODksIDU3NDkzLCA1NzQ5NywgNTc1MDEsIDU3NTA1LCA1NzUwOSwgNTc1MTMsIDU3NTE3LCA1NzUyMSwgCi0gICAgNTc1MjUsIDU3NTI5LCA1NzUzMywgNTc1MzcsIDU3NTQxLCA1NzU0NSwgNTc1NDksIDU3NTUzLCA1NzU1NywgNTc1NjEsIAotICAgIDU3NTY1LCA1NzU2OSwgNTc1NzMsIDU3NTc3LCA1NzU4MSwgNTc1ODUsIDU3NTg5LCA1NzU5MywgNTc1OTcsIDU3NjAxLCAKLSAgICA1NzYwNSwgNTc2MDksIDU3NjEzLCA1NzYxNywgNTc2MjEsIDU3NjI1LCA1NzYyOSwgNTc2MzMsIDU3NjM3LCA1NzY0MSwgCi0gICAgNTc2NDUsIDU3NjQ5LCA1NzY1MywgNTc2NTcsIDU3NjYxLCA1NzY2NSwgNDQyOTEsIDQ0NjM5LCA1NzY2OSwgNDkyOTYsIAotICAgIDU3NjczLCA1NzY3NywgNTc2ODEsIDQ1Mjk5LCA1MjQxNiwgNDQyNjcsIDM1NTgzLCA1NzY4NSwgNTI0MjEsIDQ1MDE3LCAKLSAgICA1MjQzMSwgMzEwNDIsIDM3OTU5LCA1NzY4OSwgNTc2OTMsIDU3Njk3LCA0NjkzNywgNTc3MDEsIDQ3ODUxLCA1MzA1MSwgCi0gICAgNTI0NDEsIDU3NzA1LCA1NzcwOSwgNTc3MTMsIDU3NzE3LCA0NTEyNSwgNTMwNjEsIDUyNDQ2LCA1MjQ1MSwgNTI0NTYsIAotICAgIDUyNDYxLCA1NzcyMSwgNTc3MjUsIDUyNDY2LCA1MjQ3MSwgNTI0NzYsIDUyNDgxLCA1NzcyOSwgNTc3MzMsIDMxMzYyLCAKLSAgICAzODgxNSwgMjczMjksIDU3NzM3LCA1MzM3MSwgNTc3NDEsIDU3NzQ1LCA1MzM4MSwgNTMzODYsIDU3NzQ5LCA1Nzc1MywgCi0gICAgNDIwNjYsIDU3NzU3LCA1MzM5MSwgNTc3NjEsIDU3NzY1LCA1Nzc2OSwgNTMzOTYsIDUzNDAxLCA1Nzc3MywgNTc3NzcsIAotICAgIDU3NzgxLCA0MTgxNCwgNTM0MTEsIDUzNDE2LCA1Nzc4NSwgNTM0MjEsIDU3Nzg5LCA1Nzc5MywgMzIyNjAsIDU3Nzk3LCAKLSAgICA1NzgwMSwgNTc4MDUsIDU3ODA5LCA1MzQyNiwgNTM0MzEsIDUzNDM2LCA1NzgxMywgNTc4MTcsIDU3ODIxLCA1MzQ0MSwgCi0gICAgNTM0NDYsIDUzNDUxLCA1MzQ1NiwgNTc4MjUsIDU3ODI5LCA1NzgzMywgNTc4MzcsIDU3ODQxLCA1Nzg0NSwgNTc4NDksIAotICAgIDQ2MjA1LCA1Nzg1MywgNTc4NTcsIDU3ODYxLCA1Nzg2NSwgNTc4NjksIDU3ODczLCA1MzY4MSwgNTc4NzcsIDUzNDY2LCAKLSAgICA1Nzg4MSwgNTc4ODUsIDU3ODg5LCA1Nzg5MywgNTc4OTcsIDU3OTAxLCA1NzkwNSwgNTc5MDksIDU3OTEzLCA1NzkxNywgCi0gICAgNTc5MjEsIDU3OTI1LCA1NzkyOSwgMjgwNiwgNTc5MzMsIDU3OTM3LCA1Nzk0MSwgNTc5NDUsIDU3OTQ5LCA1Nzk1MywgCi0gICAgNTc5NTcsIDU3OTYxLCA1Nzk2NSwgNTc5NjksIDU3OTczLCA1Nzk3NywgNTc5ODEsIDU3OTg1LCA1Nzk4OSwgNTc5OTMsIAotICAgIDU3OTk3LCA1ODAwMSwgNTgwMDUsIDU4MDA5LCA1NDAyMSwgNTA2NjYsIDU4MDEzLCA1ODAxNywgMzQ3ODksIDI5ODcyLCAKLSAgICA1ODAyMSwgMzE0MzIsIDQ0MzE1LCA0NDMyMSwgNTAwNjEsIDU4MDI1LCAzNjI2MywgNTgwMjksIDQwMjMyLCAzODUxMSwgCi0gICAgNTgwMzMsIDM3MDM5LCA1MzgxNiwgNTgwMzcsIDU4MDQxLCA1ODA0NSwgNTgwNDksIDU4MDUzLCA1ODA1NywgNTgwNjEsIAotICAgIDU4MDY1LCA1ODA2OSwgNTgwNzMsIDU4MDc3LCA1ODA4MSwgNTgwODUsIDU4MDg5LCA1ODA5MywgNTgwOTcsIDU4MTAxLCAKLSAgICA1ODEwNSwgNTgxMDksIDU4MTEzLCA1ODExNywgNTgxMjEsIDU4MTI1LCA1ODEyOSwgNTgxMzMsIDU4MTM3LCA1ODE0MSwgCi0gICAgNTgxNDUsIDU4MTQ5LCA1ODE1MywgNTgxNTcsIDU4MTYxLCA1ODE2NSwgNTgxNjksIDU4MTczLCA1ODE3NywgNTgxODEsIAotICAgIDU4MTg1LCA1ODE4OSwgNTgxOTMsIDU4MTk3LCA1ODIwMSwgNTgyMDUsIDUxNjY2LCA1MTY3MSwgNTEyODEsIDUxMjg2LCAKLSAgICA0ODU5NiwgNTEyOTEsIDU4MjA5LCA0ODYwMSwgNTgyMTMsIDUxMjk2LCA1MTMwMSwgNDg2MDYsIDUxNjc2LCA1MTY4MSwgCi0gICAgNTE2ODYsIDU4MjE3LCA1ODIyMSwgNTgyMjUsIDU4MjI5LCA1ODIzMywgNTgyMzcsIDU4MjQxLCA1ODI0NSwgNTgyNDksIAotICAgIDU4MjUzLCA1ODI1NywgNTgyNjEsIDU4MjY1LCA0MDY0NSwgNTgyNjksIDU4MjczLCAzMTM1MiwgNDg1NDYsIDU4Mjc3LCAKLSAgICA1ODI4MSwgNTgyODUsIDU4Mjg5LCA1ODI5MywgNTgyOTcsIDUyNTI2LCA1ODMwMSwgNDg4MTYsIDUyNTM2LCA1MjU0NiwgCi0gICAgNDg4MjEsIDUyNTYxLCA1ODMwNSwgNTI1NjYsIDUyNTcxLCA1ODMwOSwgNTI1NzYsIDUyNTgxLCA1ODMxMywgNTgzMTcsIAotICAgIDU4MzIxLCA1ODMyNSwgNTgzMjksIDU4MzMzLCA1ODMzNywgNTI1OTEsIDUyNTk2LCA1MjYwMSwgNTgzNDEsIDU0MjExLCAKLSAgICA1MjYwNiwgNTgzNDUsIDU4MzQ5LCA1ODM1MywgNTI2MTEsIDU4MzU3LCA1MjYxNiwgNTI2MjEsIDUyNjI2LCA1ODM2MSwgCi0gICAgNTM3NTEsIDUyNjMxLCA1MjYzNiwgNTgzNjUsIDU4MzY5LCA1ODM3MywgNTI2NDEsIDU4Mzc3LCA1MjY1MSwgNTM1MzEsIAotICAgIDUyNjU2LCA1MjY2MSwgNTI2NjYsIDUyNjcxLCA1ODM4MSwgNTgzODUsIDIwODI2LCAyNzQyOSwgMjEzMjAsIDY0MjMsIAotICAgIDM2MTA0LCAzNTc4NCwgNDYyNjYsIDM5NTE5LCAzMzQ5NCwgNzEwLCA1NDc5MCwgNTkxMSwgNTY1NSwgNDA0MzYsIDU4Mzg4LCAKLSAgICA2MTY3LCAzNDkxNiwgNTgzOTEsIDU4Mzk0LCA0OTI1MiwgMzk1ODIsIDM0NjM3LCA1NDQxMCwgNDMwMjYsIDUzODE3LCAKLSAgICA1NTU0MiwgNDM2ODAsIDQxMjA2LCA1NDUzOCwgMjgzNTMsIDU4Mzk3LCA5NTksIDExMDIsIDU0OTU4LCA2OTM1LCA1ODQwMCwgCi0gICAgNTg0MDMsIDU4NDA2LCA1ODQwOSwgNTY3OTQsIDU4NDEyLCA1ODQxNSwgNTYzMDIsIDM2NTc2LCAzOTYxMCwgMjQ4NjcsIAotICAgIDMxMTQzLCA2ODksIDExNzgyLCA1Mzk2MiwgNDc5NjIsIDQ3MTQyLCAyNjcwMywgNTg0MTgsIDMzMzc3LCA1ODQyMSwgCi0gICAgMzQyMzIsIDU4NDI0LCA1ODQyNywgMjUwODMsIDU3MTksIDIwNTY2LCA0NzgsIDI1MjE1LCA0MTY3NSwgODk3LCA2NDgsIAotICAgIDU4NDMwLCA0MzUxOCwgMjQ5MzksIDIwNTExLCA1MDE5MiwgNDYzMjYsIDU4NDMzLCAyMDU1MywgMTQwMSwgMTE0NywgCi0gICAgMjg0NDEsIDM0NzkwLCA1ODQzNiwgNDM4OTYsIDQwNDA4LCA0NDYxNiwgNDg5NTcsIDU0NTk4LCA1ODQzOSwgNTE4NzcsIAotICAgIDIzODcxLCA1ODQ0MiwgNDA3MjMsIDM4MzEyLCA0NzIwOCwgMjQzOTksIDMwOTQzLCA1NjgzNCwgNDM2NjgsIDM4NjAwLCAKLSAgICA0MTgwOCwgMjk4NTMsIDU4NDQ1LCAzNDU0NywgNDQ1NjIsIDQwNjc0LCA1ODQ0OCwgNTE4ODcsIDI5NDUzLCA0NTU1OCwgCi0gICAgNTg0NTEsIDI2OTQ1LCA1ODQ1NCwgNTg0NTcsIDU4NDYwLCA0ODE1NywgMjQ0MzUsIDMyNjg0LCAyNzI0MiwgNTg0NjMsIAotICAgIDQ4ODkyLCA1ODQ2NiwgNTg0NjksIDU4NDcyLCA0NTc1MCwgNTYzNDYsIDU4NDc1LCA0NDU5MiwgMjQxNTksIDU4NDc4LCAKLSAgICAzOTc5MiwgNDU3MjAsIDU5NzUsIDU4NDgxLCA0MDQ3MSwgNDcwNzYsIDMzMjA2LCAyOTUxMywgMzEyODMsIDExODg3LCAKLSAgICAyNDQ1OSwgNTcwMjYsIDU2ODI2LCA1ODQ4NCwgNTg0ODcsIDU4NDkwLCAyOTkxMywgNDIyNTYsIDU4NDkzLCA1NTMyMiwgCi0gICAgNTg0OTYsIDQ2MjYwLCA1ODQ5OSwgNTg1MDIsIDI4NSwgMzM0MzEsIDU1MDk0LCA1MTg4MiwgMjgzOTcsIDM4ODU2LCAKLSAgICA1NjQ1OCwgNTg1MDUsIDI0MTM1LCA0MDIyNiwgNTg1MDgsIDI4MDcsIDM5Njk0LCA0NDAyMiwgNTY4MjIsIDU4NTExLCAKLSAgICAzMTM0MywgMjA2MzEsIDI2NDg3LCAzNTUyOCwgNTg1MTQsIDIxMTEyLCAzNjYwOCwgNTUzMjYsIDExNjA3LCA1ODUxNywgCi0gICAgMjQyMDcsIDU0MDY3LCA1ODUyMCwgNjc1OSwgNjA1LCA1ODUyMywgNTg1MjYsIDM5NTg5LCA0NzI5NywgNTg1MjksIDU4NTMyLCAKLSAgICA1ODUzNSwgMzU2NDAsIDU4NTM4LCAxOTk3OSwgNTg1NDEsIDM4NDY0LCAzOTkwNCwgNDcwMzQsIDIwMDQ5LCA2MjMxLCAKLSAgICA1ODU0NCwgNTYzNDIsIDM4Mjk2LCAzNjM2OCwgNDMzMzIsIDY5OTksIDU4NTQ3LCA0MzcwNCwgNTg1NTAsIDU4NTUzLCAKLSAgICA1ODU1NiwgNTg1NTksIDU4NTYyLCAzNTQyOSwgNTg1NjUsIDMxMzIzLCA1ODU2OCwgNTg1NzEsIDI0NDk1LCA5MTMsIAotICAgIDQ4MzU3LCA1ODU3NCwgNTg1NzcsIDU1MjcsIDU2NzEsIDEyLCAyNTA5NSwgNTUwMjYsIDU4NTgwLCA1ODU4MywgNTYzNTAsIAotICAgIDU0NDQyLCA1ODU4NiwgNDI5MzYsIDM0OTA3LCAzMzMwNSwgNDQyMDIsIDQ4MTA3LCA1ODU4OSwgNTg1OTIsIDEyMTAsIAotICAgIDU4NTk1LCA1ODU5OCwgNTg2MDEsIDI4ODkyLCA1NjU0MiwgMzU0NDcsIDM2NzEyLCA1ODYwNCwgNTU3NzAsIDI4ODcwLCAKLSAgICA1ODYwNywgMjEwODYsIDQwNTY5LCA1Mzk4MiwgNDA1NTUsIDU4NjEwLCAxOTk1MSwgNTg2MTMsIDQyNjQ4LCA1MDExMiwgCi0gICAgNTcxNjYsIDU0MDIyLCA1ODYxNiwgNTcwMywgMjY0NTEsIDM2NzA0LCA1ODYxOSwgNTYyNTQsIDE0NTgsIDU4NjIyLCAKLSAgICAzMDAzMywgNTg2MjUsIDU0NjkwLCA1ODYyOCwgNTg2MzEsIDY1NTEsIDM0ODE3LCA1NTY2MiwgNTg2MzQsIDU4NjM3LCAKLSAgICA1ODY0MCwgNTg2NDMsIDU2OTQ2LCA1ODY0NiwgNTg2NDksIDU2NzEwLCA1NTIxMCwgNTY5NTgsIDU4NjUyLCA0NjM5OCwgCi0gICAgNTg2NTUsIDU4NjU4LCA1ODY2MSwgNTg2NjQsIDU4NjY3LCA0MzEwNCwgNTg2NzAsIDU4NjczLCA1ODY3NiwgNTAwMzcsIAotICAgIDU3Nzc0LCA1ODY3OSwgMzMyOTYsIDUwMzAyLCA1ODY4MiwgNTg2ODUsIDU4Njg4LCA1ODY5MSwgNTg2OTQsIDU4Njk3LCAKLSAgICA1MDE4NywgNTg3MDAsIDM5ODYyLCA1ODcwMywgMzE3LCA1ODcwNiwgNTg3MDksIDU4NzEyLCA1NTIyNiwgMjgxNTUsIAotICAgIDU4NzE1LCA1ODcxOCwgNTc5NDIsIDU4NzIxLCA0MDA1OCwgNjMyLCA1ODcyNCwgMzcwMzIsIDUxMzU3LCA1ODcyNywgCi0gICAgNTUwODYsIDU2NTU4LCA1ODczMCwgMTg5ODIsIDU4NzMzLCA1NTQzLCA1MzY2MiwgMzMxODgsIDQyOTc4LCA1ODczNiwgCi0gICAgMzI2NjYsIDU1NjgyLCAyNjQ3NSwgNDk4NjcsIDU4NzM5LCA1ODc0MiwgNTM5MzIsIDU4NzQ1LCA1ODc0OCwgMjk0MDMsIAotICAgIDYxOTksIDYyMTUsIDU4NzUxLCA1ODc1NCwgNjI5NSwgNjQzOSwgNTg3NTcsIDU4NzYwLCA1ODc2MywgNTg3NjYsIDU4NzY5LCAKLSAgICA1ODc3MiwgNjY3OSwgNTg3NzUsIDQzOTQ0LCA1MTcxNywgMjY1OTMsIDcwMTUsIDU2NTk0LCA1ODc3OCwgNTg3ODEsIAotICAgIDQ3OTc3LCA1ODc4NCwgNTY1MjIsIDMzMCwgNTg3ODcsIDU4NzkwLCA1ODc5MywgNDM1NjAsIDU4Nzk2LCA0MjE5MywgCi0gICAgMzU5OTIsIDIwNzg3LCAyODIyMSwgMjEzODUsIDU4Nzk5LCAyODIxMCwgMTA1OCwgNTUzMzAsIDUzMzEyLCA1ODgwMiwgCi0gICAgNTg4MDUsIDQ1NzM4LCA4NjIsIDU4ODA4LCA1ODgxMSwgNTg4MTQsIDU4ODE3LCA1ODgyMCwgNTg4MjMsIDU4ODI2LCAKLSAgICA1ODgyOSwgNTg4MzIsIDU4ODM1LCA1ODgzOCwgNDIwODEsIDU4ODQxLCA0OTIzNywgNTg4NDQsIDU3OTI2LCA1ODg0NywgCi0gICAgNDE2LCA0MzUwMCwgNTg4NTAsIDU4ODUzLCA1ODg1NiwgNTA3MjcsIDU4ODU5LCA1ODg2MiwgNTg4NjUsIDU4ODY4LCAKLSAgICA0OTMwMiwgNTg4NzEsIDU1NTM0LCAyOTA5MywgNTg4NzQsIDQ4Njk3LCA1ODg3NywgNTg4ODAsIDU4ODgzLCA0Mzk5MiwgCi0gICAgNTg4ODYsIDM5MDAxLCA1ODg4OSwgNTg4OTIsIDQ0MzIyLCAzMTQ0MywgNTg4OTUsIDU4ODk4LCA1ODkwMSwgNTg5MDQsIAotICAgIDU4OTA3LCA1ODkxMCwgNTg5MTMsIDI4MjMsIDU3NDgyLCA1ODkxNiwgNTg5MTksIDQ0NzcyLCA1ODkyMiwgNTg5MjUsIAotICAgIDUwMzA3LCA1ODkyOCwgNTg5MzEsIDU4OTM0LCAxMTgxMiwgNTg5MzcsIDU4OTQwLCA1ODk0MywgNTg5NDYsIDMyMTUzLCAKLSAgICA1ODk0OSwgNTg5NTIsIDU4OTU1LCA1ODk1OCwgNTg5NjEsIDU3NzkwLCA1ODk2NCwgNTg5NjcsIDU4OTcwLCA1ODk3MywgCi0gICAgNTg5NzYsIDQzNTI0LCA1ODk3OSwgNTg5ODIsIDIwNDgzLCAxMjk3LCA0ODUwNywgMjA2OTYsIDU4OTg1LCA1ODk4OCwgCi0gICAgNTg5OTEsIDU4OTk0LCA1MTI0MiwgNTg5OTcsIDU2MzE0LCA1NzA3MCwgNTkwMDAsIDU5MDAzLCA1OTAwNiwgNTkwMDksIAotICAgIDQ4MjcyLCA1OTAxMiwgNTkwMTUsIDU5MDE4LCA1NzQxMCwgNjA2LCAxMDU5LCAzMTEyLCA0NDEsIDE0MDIsIDcxMSwgODgsIAotICAgIDIxMDc0LCAzMTc2LCA1NTY3OSwgNDEzMTksIDEyOTgsIDMxOCwgNDMzNjksIDIxLCAzNywgMzUxMjQsIDM5MTIxLCA4NjMsIAotICAgIDExODYsIDU1NDE5LCA5MDQsIDU5MDIxLCAzNzc3NywgNDUzNjEsIDE5MDU4LCAzMiwgMTAxMCwgMTk3LCAzODMsIDM0MiwgCi0gICAgMjkyMTQsIDU5MDIzLCAxMDEsIDM5MDMwLCA3NjEsIDU5MDI1LCA0NjI2MSwgNTQ0MzksIDU0OTk1LCAyMzksIDgyOSwgCi0gICAgNDgzMTgsIDU5MDI3LCAyMTAsIDQ3NjI4LCA4NTUsIDI2NjQ5LCAzNjYxNywgNTc3NTksIDU4OTY4LCA1OTAyOSwgNTkwMzEsIAotICAgIDEwMjUsIDQzNTI1LCA1NzgwNywgMzI4MjAsIDQyOTg1LCAyMjQsIDExOTQsIDI2NzQ4LCA2MzMsIDU5MDMzLCAzMjg4MywgCi0gICAgNTkwMzUsIDM4NTQ1LCAyNzAzNCwgNTkwMzcsIDI3MSwgNjI2LCA1NzE3OSwgMzg4LCA5NTAsIDg3NywgMzYyNzMsIDU4NjE0LCAKLSAgICA1OTAzOSwgNTkwNDEsIDQsIDE0NywgMjg5MjQsIDI2NjcxLCAxMTQyLCAyNDE5NiwgNTQzOTUsIDU5MDQzLCAzMDAsIAotICAgIDUzMTk4LCAyODI3NywgNDI3NzUsIDU4NTg3LCAzMjI4OSwgNTUzMzksIDU2Njk1LCA1OTA0NSwgNTkwNDcsIDU0MCwgMzc4LCAKLSAgICAxMTksIDQ4NjczLCA1ODQ2NywgNjk2LCA0MzE3NywgNDI2NTUsIDkzMiwgMzIwNDQsIDMyNjc2LCAxMTA5LCA0MjU5NSwgCi0gICAgNTkwNDksIDU5MDUxLCA1OTA1MywgNTkwNTUsIDU5MDU3LCAzOTA3MiwgMjY5NzksIDQ0NCwgNTkwNTksIDU5MDYxLCAKLSAgICAzNzIyNSwgNTkwNjMsIDgsIDgwMiwgMTExNSwgNDg3OTgsIDQ1NCwgNzkwLCA1OTA2NSwgNDAsIDM4Nzg2LCA1LCAxNCwgCi0gICAgMTExLCAyNiwgMTMzLCA0OSwgMTE1LCA2MiwgMjI1LCA5LCA0MywgODMsIDU4NjE1LCA1ODMsIDQwMiwgMTkzLCA1OTA2NywgCi0gICAgNDQ1LCA1OTA2OCwgCitzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7CisgICAgMCwgMCwgNiwgMTAsIDE1LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MiwgNjIsIDY4LCA4MSwgOTMsIDEwMiwgMTA4LCAKKyAgICAxMTMsIDEyMSwgMTMwLCAxMzUsIDEzOSwgMTQ1LCAxNTAsIDE1OCwgMTYxLCAxNjgsIDE3MywgMTgxLCAxODYsIDE5MiwgCisgICAgMjAwLCAyMDcsIDIxNywgMjI0LCAyMjcsIDIzNiwgMjM5LCAyNDIsIDI0NywgMjUzLCAyNjIsIDI2NiwgMjczLCAyODAsIAorICAgIDI4NSwgMjk0LCAxMzYsIDMwMiwgMzAzLCAzMDksIDMxNSwgMzIzLCAzMjksIDMzNSwgMzQwLCAzNDYsIDM1MiwgMzYwLCAKKyAgICAzNjcsIDM2OSwgMzcyLCAzNzYsIDM4MywgMzkwLCAzOTYsIDQwMywgNDA4LCA0MTAsIDQxOCwgNDIxLCA0MjYsIDMwNywgCisgICAgNDI4LCA0MzAsIDQzNiwgNDQxLCA0NTAsIDQ1NSwgNDYwLCA0NzAsIDQ3NCwgNDg3LCA0OTEsIDQ5NiwgNTA1LCA1MDgsIAorICAgIDUxNCwgNTE4LCA1MjYsIDUzNiwgNTQ0LCA1NTEsIDU2MCwgNTY4LCA1NzYsIDU4MSwgNTg5LCA2MDAsIDYwNCwgNjExLCAKKyAgICA2MTQsIDYyMCwgNjI0LCA2MjgsIDYyOSwgNjM0LCA2MzgsIDY0MCwgNjQzLCA2NTIsIDMyMiwgNjU1LCA2NTksIDY2NCwgCisgICAgNjcyLCA2NzYsIDY3OCwgNjgxLCA2ODcsIDY5NCwgNzAxLCA3MTAsIDcxOSwgNzIyLCA3MzIsIDc0MSwgNzUwLCA3NTYsIAorICAgIDc2MiwgNzY5LCA3NzIsIDc4MCwgNzg4LCA3OTIsIDc5NiwgODA0LCA4MTMsIDgyMiwgODI3LCA4MzEsIDY4NiwgODM4LCAKKyAgICA4NDYsIDg1MCwgODU0LCA4NTcsIDg2MiwgODY3LCA4NzEsIDg3OSwgNzk0LCA2MDksIDg4MiwgODg3LCAyMjUsIDg5MCwgCisgICAgODk1LCA5MDUsIDkxNCwgOTIwLCA5MjcsIDkzNCwgOTQyLCA5NDYsIDk1NCwgOTYwLCA5NjcsIDk3MywgOTc5LCA5ODQsIAorICAgIDk4OCwgOTk0LCAxMDA3LCAxMDEyLCAxMDE1LCAxMDIwLCAyMiwgMTAyNCwgMTAyNywgMTAzNywgMTA0MiwgMTA0NiwgMTA1NSwgCisgICAgMTA1OCwgMTA2NCwgMTA3NCwgMTA3NywgMTExLCAxMDgxLCAxMDg2LCAxMDkyLCAxMDk2LCAxMTAxLCAxMTA3LCAxMTEyLCAKKyAgICAxMTE1LCAxMTIyLCAxMTI0LCAxMTI2LCAxMTM0LCAxMTQ0LCAxMTQ3LCAxMTUwLCAxMTU3LCAxMTY1LCAzMzgsIDExNjcsIAorICAgIDExNzAsIDExNzUsIDExODMsIDExOTIsIDExOTUsIDEyMDQsIDEyMTAsIDEyMTYsIDEyMTgsIDEyMjMsIDEyMjgsIDEyMzQsIAorICAgIDEyMzksIDEyNDQsIDEyNDgsIDEyNTMsIDEyNTksIDEyNjQsIDEyNjksIDEyNzMsIDEyNzgsIDEyODMsIDEyODcsIDEyOTIsIAorICAgIDEyOTcsIDEzMDIsIDEzMDgsIDEzMTQsIDEzMjAsIDEzMjUsIDEzMjksIDEzMzQsIDEzMzksIDEzNDQsIDEzNDgsIDEzNTMsIAorICAgIDEzNTgsIDEzNjMsIDEzNjgsIDEyMTksIDEyMjQsIDEyMjksIDEyMzUsIDEyNDAsIDEzNzIsIDEyNDUsIDEzNzgsIDEzODcsIAorICAgIDEyNDksIDEzOTEsIDEyNTQsIDEyNjAsIDEyNjUsIDEzOTUsIDE0MDAsIDE0MDUsIDE0MDksIDE0MTMsIDE0MTksIDE0MjMsIAorICAgIDEyNzAsIDE0MjYsIDE0MzAsIDEyNzQsIDE0MzYsIDEyNzksIDE0NDAsIDE0NDQsIDEyODQsIDE0NDgsIDE0NTMsIDE0NTcsIAorICAgIDE0NjAsIDE0NjQsIDEyODgsIDEyOTMsIDE0NjksIDEyOTgsIDE0NzUsIDE0ODEsIDE0ODcsIDE0OTMsIDEzMDMsIDEzMTUsIAorICAgIDEzMjEsIDE0OTcsIDE1MDEsIDE1MDUsIDE1MDgsIDEzMjYsIDE1MTIsIDE1MTQsIDE1MTksIDE1MjQsIDE1MzAsIDE1MzUsIAorICAgIDE1NDAsIDE1NDQsIDE1NDksIDE1NTQsIDE1NTksIDE1NjQsIDE1NzAsIDE1NzUsIDE1ODAsIDE1ODYsIDE1OTIsIDE1OTcsIAorICAgIDE2MDEsIDE2MDYsIDE2MTEsIDE2MTYsIDE2MjEsIDE2MjUsIDE2MzMsIDE2MzcsIDE2NDIsIDE2NDcsIDE2NTIsIDE2NTcsIAorICAgIDE2NjEsIDE2NjQsIDE2NjksIDE2NzQsIDE2NzksIDE2ODQsIDE2OTAsIDE2OTUsIDE2OTksIDEzMzAsIDE3MDIsIDE3MDcsIAorICAgIDE3MTIsIDEzMzUsIDE3MTYsIDE3MjAsIDE3MjcsIDEzNDAsIDE3MzQsIDEzNDUsIDE3MzgsIDE3NDAsIDE3NDUsIDE3NTEsIAorICAgIDEzNDksIDE3NTYsIDE3NjUsIDEzNTQsIDE3NzAsIDE3NzYsIDEzNTksIDE3ODEsIDE3ODYsIDE3ODksIDE3OTQsIDE3OTgsIAorICAgIDE4MDIsIDE4MDYsIDE4MDksIDE4MTMsIDEzNjQsIDEzNjksIDEwNDAsIDE4MTgsIDE4MjQsIDE4MzAsIDE4MzYsIDE4NDIsIAorICAgIDE4NDgsIDE4NTQsIDE4NjAsIDE4NjYsIDE4NzEsIDE4NzcsIDE4ODMsIDE4ODksIDE4OTUsIDE5MDEsIDE5MDcsIDE5MTMsIAorICAgIDE5MTksIDE5MjUsIDE5MzAsIDE5MzUsIDE5NDAsIDE5NDUsIDE5NTAsIDE5NTUsIDE5NjAsIDE5NjUsIDE5NzAsIDE5NzUsIAorICAgIDE5ODEsIDE5ODYsIDE5OTIsIDE5OTcsIDIwMDMsIDIwMDksIDIwMTQsIDIwMjAsIDIwMjYsIDIwMzIsIDIwMzgsIDIwNDMsIAorICAgIDIwNDgsIDIwNTAsIDIwNTEsIDIwNTUsIDIwNTksIDIwNjQsIDIwNjgsIDIwNzIsIDIwNzYsIDIwODAsIDIwODMsIDIwODgsIAorICAgIDIwOTIsIDIwOTcsIDIxMDEsIDIxMDUsIDIxMTAsIDIxMTQsIDIxMTcsIDIxMjEsIDIxMzUsIDIxMzksIDIxNDMsIDIxNDYsIAorICAgIDIxNTEsIDIxNTUsIDIxNTksIDIxNjMsIDIxNjgsIDIxNzMsIDIxNzgsIDIxODIsIDIxODcsIDIxOTEsIDIxOTYsIDIyMDMsIAorICAgIDIyMDksIDIyMTQsIDIyMTksIDIyMjQsIDIyMzAsIDIyMzUsIDIyNDEsIDIyNDYsIDIyNDksIDEyMzYsIDIyNTEsIDIyNTgsIAorICAgIDIyNjYsIDIyNzYsIDIyODUsIDIyOTksIDIzMDMsIDIzMDcsIDIzMjAsIDIzMjgsIDIzMzIsIDIzMzcsIDIzNDEsIDIzNDUsIAorICAgIDIzNDksIDIzNTQsIDIzNTksIDIzNjQsIDIzNjgsIDIzNzEsIDIzNzUsIDIzODIsIDIzODksIDIzOTUsIDI0MDAsIDI0MDUsIAorICAgIDI0MTEsIDI0MTcsIDI0MjIsIDI0MjUsIDE3NDIsIDI0MjcsIDI0MzMsIDI0MzcsIDI0NDIsIDI0NDYsIDI0NTAsIDE3NDcsIAorICAgIDE3NTMsIDI0NTUsIDI0NTksIDI0NjIsIDI0NjcsIDI0NzIsIDI0NzcsIDI0ODEsIDI0ODgsIDI0OTMsIDI0OTYsIDI1MDMsIAorICAgIDI1MDksIDI1MTMsIDI1MTcsIDI1MjEsIDI1MjcsIDI1MzMsIDI1NDcsIDI1NjQsIDI1NzksIDI1OTQsIDI2MDMsIDI2MDgsIAorICAgIDI2MTIsIDI2MTcsIDI2MjIsIDI2MjYsIDI2MzgsIDI2NDUsIDI2NTEsIDIxOTksIDI2NTcsIDI2NjQsIDI2NzAsIDI2NzMsIAorICAgIDI2ODAsIDI2ODQsIDI2ODgsIDI2OTIsIDIwNzMsIDI2OTYsIDI3MDEsIDI3MDYsIDI3MTAsIDI3MTgsIDI3MjIsIDI3MjYsIAorICAgIDI3MzAsIDI3MzUsIDI3NDAsIDI3NDUsIDI3NDksIDI3NTQsIDI3NTksIDI3NjMsIDI3NjgsIDI3NzIsIDI3NzUsIDI3NzksIAorICAgIDI3ODMsIDI3ODgsIDI3OTIsIDI3OTYsIDI4MDIsIDI4MTEsIDI4MTUsIDI4MTksIDI4MjUsIDI4MzAsIDI4MzcsIDI4NDEsIAorICAgIDI4NTEsIDI4NTUsIDI4NjAsIDI4NjQsIDI4NjksIDI4NzUsIDI4ODAsIDI4ODQsIDIzODUsIDI4ODgsIDI4OTMsIDI4OTksIAorICAgIDI5MDQsIDI5MDgsIDI5MTMsIDI5MTgsIDI5MjIsIDI5MjgsIDI5MzMsIDI5MzksIDI5NDMsIDI5NDksIDI5NTQsIDI5NTksIAorICAgIDI5NjQsIDI5NjksIDI5NzQsIDI5NzksIDI5ODQsIDI5ODksIDI5OTQsIDMwMDAsIDMwMDUsIDEyNDYsIDgwLCAzMDExLCAKKyAgICAzMDE1LCAzMDE5LCAzMDIzLCAzMDI4LCAzMDMyLCAzMDM2LCAzMDQwLCAzMDQ0LCAzMDQ5LCAzMDUzLCAzMDU4LCAzMDYyLCAKKyAgICAzMDY1LCAzMDY5LCAzMDc0LCAzMDc4LCAzMDgzLCAzMDg3LCAzMDkxLCAzMDk1LCAzMTAwLCAzMTA0LCAzMTA3LCAzMTIwLCAKKyAgICAzMTI0LCAzMTI4LCAzMTMyLCAzMTM2LCAzMTQwLCAzMTQzLCAzMTQ3LCAzMTUxLCAzMTU2LCAzMTYwLCAzMTY1LCAzMTcwLCAKKyAgICAzMTc1LCAzMTc5LCAzMTgyLCAzMTg1LCAzMTkxLCAzMTk1LCAzMTk5LCAzMjAyLCAzMjA2LCAzMjEwLCAzMjEzLCAzMjE5LCAKKyAgICAzMjI0LCAzMjI5LCAzMjM1LCAzMjQwLCAzMjQ1LCAzMjUxLCAzMjU3LCAzMjYyLCAzMjY3LCAzMjcyLCAxMDQ0LCA1MDcsIAorICAgIDMyNzcsIDMyODAsIDMyODUsIDMyODksIDMyOTIsIDMyOTcsIDMzMDIsIDMzMDYsIDMzMTEsIDMzMTUsIDMzMjAsIDMzMjQsIAorICAgIDMzMjgsIDMzMzEsIDMzMzcsIDMzNDQsIDMzNTAsIDMzNTUsIDMzNTksIDMzNjQsIDMzNjgsIDMzNzgsIDMzODIsIDMzODYsIAorICAgIDMzOTEsIDMzOTYsIDM0MDYsIDIwODQsIDM0MTEsIDM0MTUsIDM0MTgsIDM0MjQsIDM0MzEsIDM0MzUsIDYyMSwgNzIwLCAKKyAgICAzNDM5LCAzNDQ2LCAzNDUzLCAzNDU5LCAzNDY0LCAzNDcwLCAzNDc1LCAyMDkzLCAzNDc5LCAzNDg3LCA1NTUsIDM0OTMsIAorICAgIDM1MDQsIDM1MDgsIDM1MTgsIDIwOTgsIDM1MjQsIDM1MjksIDM1NDQsIDM1NTAsIDM1NTcsIDM1NjcsIDM1NzMsIDM1NzgsIAorICAgIDM1ODQsIDM1ODcsIDM1OTEsIDM1OTgsIDM2MDMsIDM2MDcsIDM2MTEsIDM2MTUsIDM2MTksIDM2MjQsIDM2MzAsIDMwNzAsIAorICAgIDM2MzUsIDM2NDcsIDE1NDYsIDM2NTQsIDM2NTcsIDM2NjEsIDM2NjQsIDM2NjgsIDM2ODIsIDM2ODYsIDM2ODksIDM2OTMsIAorICAgIDM2OTgsIDM3MDIsIDM3MDYsIDM3MTIsIDM3MTgsIDM3MjMsIDM3MjksIDM3MzMsIDM3NDEsIDM3NTEsIDM3NTcsIDM3NjIsIAorICAgIDM3NzEsIDM3NzksIDM3ODYsIDM3OTAsIDM3OTksIDM4MDMsIDM4MDgsIDM4MTMsIDM4MTcsIDM4MjUsIDM4MjksIDM4MzQsIAorICAgIDM4MzgsIDIxMDYsIDEzODgsIDM4NDQsIDM4NDksIDM4NTUsIDM4NjAsIDM4NjUsIDM4NzAsIDM4NzUsIDM4ODAsIDM4ODUsIAorICAgIDM4OTEsIDM4OTYsIDM5MDIsIDM5MDcsIDM5MTIsIDM5MTcsIDM5MjMsIDM5MjgsIDM5MzMsIDM5MzgsIDM5NDMsIDM5NDksIAorICAgIDM5NTQsIDM5NjAsIDM5NjUsIDM5NzAsIDM5NzUsIDM5ODAsIDM5ODUsIDM5OTAsIDM5OTYsIDQwMDEsIDQwMDYsIDM0NCwgCisgICAgNDQwLCA0MDExLCA0MDE3LCA0MDIxLCA0MDI1LCA0MDMwLCA0MDM0LCA0MDM4LCA0MDQxLCA0MDQ1LCA0MDQ5LCA0MDUzLCAKKyAgICA0MDU4LCA0MDYyLCA0MDY2LCAzODQxLCA0MDcyLCA0MDc5LCA0MDgzLCA0MDk2LCA0MTAwLCA0MTA0LCA0MTA4LCA0MTEyLCAKKyAgICA0MTE2LCA0MTIyLCA0MTI5LCA0MTMzLCA0MTQxLCA0MTUwLCA0MTU2LCA0MTYxLCA0MTY0LCA0MTY4LCA0MTcyLCA0MTgyLCAKKyAgICA0MTkyLCA0MjAwLCA0MjA3LCA0MjE0LCA0MjIwLCA0MjI2LCA0MjMzLCA0MjM3LCA0MjQyLCA0MjQ2LCA0MjU0LCA0MjU5LCAKKyAgICA0MjY3LCA0MjcyLCA0Mjc3LCA0MjgxLCA0Mjg2LCA0MjkzLCA0Mjk2LCA0MzAwLCA0MzA0LCA0MzA3LCA0MzEzLCA0MzE5LCAKKyAgICA0MzIzLCA0MzM0LCA0MzQ0LCA0MzU5LCA0Mzc0LCA0Mzg5LCA0NDA0LCA0NDE5LCA0NDM0LCA0NDQ5LCA0NDY0LCA0NDc5LCAKKyAgICA0NDk0LCA0NTA5LCA0NTI0LCA0NTM5LCA0NTU0LCA0NTY5LCA0NTg0LCA0NTk5LCA0NjE0LCA0NjI5LCA0NjQ0LCA0NjU5LCAKKyAgICA0Njc0LCA0Njg5LCA0NzA0LCA0NzE5LCA0NzM0LCA0NzQ5LCA0NzY0LCA0Nzc5LCA0Nzk0LCA0ODA5LCA0ODI0LCA0ODM5LCAKKyAgICA0ODU0LCA0ODY5LCA0ODg0LCA0ODk5LCA0OTE0LCA0OTI5LCA0OTQ0LCA0OTU5LCA0OTc0LCA0OTg5LCA1MDA0LCA1MDE5LCAKKyAgICA1MDM0LCA1MDQ5LCA1MDY0LCA1MDc5LCA1MDg4LCA1MDk3LCA1MTAyLCA1MTA4LCA1MTEyLCA1MTE3LCA1MTIxLCA1MTI0LCAKKyAgICA1MTI4LCAyODQ2LCA1MTMxLCA1MTM2LCAzMDYsIDQyNCwgNTE0MiwgNTE1MCwgNTE1NCwgNTE1OCwgNTE2MSwgNTE2NywgCisgICAgNTE3MSwgNTE3OSwgNTE4NSwgNTE5MCwgNTE5NywgNTIwNCwgNTIxMCwgNTIxNSwgNTIyMiwgNTIyOCwgNTIzMiwgNTIzNywgCisgICAgNTI0OSwgNTI2MCwgNTI2NywgNTI3MywgMzA5MiwgNTI3NywgNTI4MywgNTI4OCwgNTI5MywgNTI5OCwgNTMwNCwgNTMwOSwgCisgICAgNTMxNCwgNTMxOSwgNTMyNCwgNTMzMCwgNTMzNSwgNTM0MCwgNTM0NiwgNTM1MSwgNTM1NywgNTM2MiwgNTM2OCwgNTM3MywgCisgICAgNTM3OSwgNTM4NCwgNTM4OSwgNTM5NCwgNTM5OSwgNTQwNCwgNTQxMCwgNTQxNSwgNTQyMCwgNTQyNSwgNTQzMSwgNTQzNywgCisgICAgNTQ0MywgNTQ0OSwgNTQ1NSwgNTQ2MSwgNTQ2NywgNTQ3MywgNTQ3OSwgNTQ4NSwgNTQ5MSwgNTQ5NywgNTUwMiwgNTUwNywgCisgICAgNTUxMiwgNTUxNywgNTUyMiwgNTUyNywgNTUzMiwgNTUzNywgNTU0MywgNTU0OSwgNTU1NCwgNTU2MCwgNTU2NiwgNTU3MiwgCisgICAgNTU3NywgNTU4MiwgNTU4NywgNTU5MiwgNTU5OCwgNTYwNCwgNTYwOSwgNTYxNCwgNTYxOSwgNTYyNCwgNTYyOSwgNTYzNSwgCisgICAgNTY0MCwgNTY0NiwgNTY1MiwgNTY1OCwgNTY2NCwgNTY3MCwgNTY3NiwgNTY4MiwgNTY4OCwgNTY5NCwgNTE2MCwgNTY5OSwgCisgICAgNTcwMywgNTcwNywgNTcxMCwgNTcxNywgNTcyMCwgNTcyOCwgNTczMywgNTczOCwgNTcyOSwgNTc0MywgNTczMCwgNTc0NywgCisgICAgNTc1MywgNTc1OSwgNTc2NCwgNTc2OSwgNTc3NiwgNTc4MSwgNTc4NSwgNTc4OCwgNTc5MiwgMjE0MCwgNTE2LCA1Nzk2LCAKKyAgICA1ODAwLCA1ODA1LCA1ODExLCA1ODE2LCA1ODIwLCA1ODIzLCA1ODI3LCA1ODMyLCA1ODM2LCA1ODQzLCA1ODQ3LCA1ODUxLCAKKyAgICA1ODU1LCA4ODQsIDY5OSwgNTg1OCwgNTg2NiwgNTg3MywgNTg4MCwgNTg4NiwgNTg5MywgNTkwMSwgNTkwOCwgNTkxNSwgCisgICAgNTkyMCwgNTkzMiwgMTI2NiwgMTM5NiwgMTQwMSwgNTk0MywgMTQwNiwgNTk0NywgNTk1MSwgNTk2MCwgNTk2OSwgNTk3NSwgCisgICAgNTk4MCwgNTk4NCwgNTk5MCwgNTk5NSwgNjAwMiwgNjAwNiwgNjAxNSwgNjAyNCwgNjAzMywgNjA0MiwgNjA0NywgNjA1MiwgCisgICAgNjA2NCwgNjA2OSwgMzMxMiwgNjA3MywgNjA3NSwgNjA4MCwgNjA4NCwgNjA5MywgNjEwMSwgMTQxMCwgODI1LCAzMzE2LCAKKyAgICAzMzIxLCA2MTA3LCA2MTExLCA2MTIwLCA2MTI2LCA2MTMxLCA2MTM0LCA2MTQzLCAyNTkxLCA2MTQ5LCA2MTU3LCA2MTYxLCAKKyAgICA2MTY1LCAzMzI1LCA2MTY5LCA2MTc0LCA2MTgxLCA2MTg3LCA2MTkzLCA2MTk2LCA2MTk4LCA2MjAxLCA2MjA5LCA2MjE3LCAKKyAgICA2MjI1LCA2MjI4LCA2MjMzLCA1NzQwLCA2MjM2LCA2MjM4LCA2MjQzLCA2MjQ4LCA2MjUzLCA2MjU4LCA2MjYzLCA2MjY4LCAKKyAgICA2MjczLCA2Mjc4LCA2MjgzLCA2Mjg4LCA2Mjk0LCA2Mjk5LCA2MzA0LCA2MzA5LCA2MzE1LCA2MzIwLCA2MzI1LCA2MzMwLCAKKyAgICA2MzM1LCA2MzQwLCA2MzQ1LCA2MzUxLCA2MzU2LCA2MzYxLCA2MzY2LCA2MzcxLCA2Mzc2LCA2MzgxLCA2Mzg2LCA2MzkxLCAKKyAgICA2Mzk2LCA2NDAxLCA2NDA2LCA2NDExLCA2NDE2LCA2NDIxLCA2NDI2LCA2NDMxLCA2NDM2LCA2NDQyLCA2NDQ4LCA2NDUzLCAKKyAgICA2NDU4LCA2NDYzLCA2NDY4LCA2NDczLCAyMTk3LCAyMjA0LCAyMjEwLCA2NDc4LCA2NDg0LCAyMjM2LCAyMjQyLCA2NDkyLCAKKyAgICA2NDk2LCA2NTAxLCA2NTA1LCA2NTA5LCA2NTEzLCA2NTE4LCA2NTIyLCA2NTI3LCA2NTMxLCA2NTM0LCA2NTM3LCA2NTQzLCAKKyAgICA2NTQ5LCA2NTU1LCA2NTYxLCA2NTY3LCA2NTczLCA2NTc5LCA2NTgzLCA2NTg3LCA2NTkxLCA2NTk1LCA2NTk5LCA2NjA0LCAKKyAgICA2NjExLCA2NjE5LCA2NjI5LCA2NjM0LCA2NjM4LCA2NjQ5LCA2NjYyLCA2NjczLCA2Njg2LCA2Njk3LCA2NzA5LCA2NzIxLCAKKyAgICA2NzMzLCA2NzQ2LCA2NzU5LCA2NzY2LCA2NzcyLCA2Nzc5LCA2Nzg1LCA2Nzg5LCA2Nzk0LCA2Nzk4LCA2ODA1LCA2ODEzLCAKKyAgICA2ODE3LCA2ODIzLCA2ODMzLCA2ODM3LCA2ODQyLCA2ODQ3LCA2ODU0LCA2ODYwLCA1ODg4LCA2ODcwLCA2ODc0LCA2ODgxLCAKKyAgICA2OTgsIDY4ODUsIDY4ODksIDY4OTQsIDY4OTksIDY5MDQsIDY5MDgsIDY5MTQsIDY5MjIsIDY5MjYsIDY5MzYsIDY5NDAsIAorICAgIDY5NDYsIDY5NTEsIDY5NTUsIDIxMzIsIDY5NjEsIDY5NjksIDY5NzgsIDY5ODIsIDY5ODgsIDY5OTMsIDY5OTgsIDcwMDMsIAorICAgIDcwMDksIDcwMTQsIDM3MDgsIDcwMTksIDcwMjMsIDcwMjksIDcwMzUsIDcwNDAsIDcwNDUsIDcwNTAsIDY5ODMsIDcwNTYsIAorICAgIDcwNjAsIDcwNjcsIDcwNzMsIDcwNzgsIDcwODIsIDcwODcsIDcwOTEsIDcxMDAsIDYxNzcsIDYxODQsIDcxMDUsIDI3MzIsIAorICAgIDcxMDksIDcxMTQsIDcxMTksIDY5ODksIDcxMjMsIDY5OTQsIDY5OTksIDcxMjgsIDcxMzUsIDcxNDIsIDcxNDgsIDcxNTQsIAorICAgIDcxNjAsIDcxNjUsIDcxNzAsIDcxNzUsIDcwMDQsIDcwMTAsIDcxODEsIDcxODcsIDcxOTIsIDcyMDAsIDcwMTUsIDcyMDUsIAorICAgIDEwNzksIDcyMDgsIDcyMTYsIDcyMjIsIDcyMjgsIDcyMzcsIDcyNDIsIDcyNDgsIDcyNjMsIDcyODAsIDcyOTksIDczMDgsIAorICAgIDczMTYsIDczMzEsIDczNDEsIDczNTEsIDczNTcsIDczNjksIDczNzgsIDczODYsIDczOTMsIDc0MDAsIDc0MDYsIDc0MTEsIAorICAgIDc0MTksIDc0MjksIDc0MzYsIDc0NDYsIDc0NTYsIDc0NjYsIDc0NzUsIDc0ODUsIDc0OTksIDc1MTQsIDc1MjMsIDc1MzEsIAorICAgIDc1MzYsIDc1NDAsIDc1NDksIDc1NTksIDc1NjksIDc1NzksIDc1ODQsIDc1ODgsIDc1OTcsIDc2MDcsIDc2MTgsIDc2MzEsIAorICAgIDc2NDQsIDc2NTYsIDc2NjQsIDc2NjksIDc2NzUsIDc2NzgsIDc2ODIsIDc2OTAsIDc2OTUsIDc2OTksIDc3MDcsIDc3MTYsIAorICAgIDc3MjQsIDc3MzEsIDc3NDIsIDc3NDYsIDc3NDksIDc3NTUsIDc3NTksIDc3NjUsIDc3NzIsIDc3NzcsIDc3ODQsIDc3OTEsIAorICAgIDc3OTgsIDc4MDUsIDc4MTIsIDc4MTksIDc4MjQsIDcyNzYsIDc4MjksIDc4MzYsIDc4NDUsIDc4NDksIDc4NjEsIDc4NjUsIAorICAgIDc4NjgsIDc4NzIsIDc4NzYsIDc4ODAsIDc4ODQsIDc4OTAsIDc4OTUsIDc5MDEsIDc5MDYsIDc5MTEsIDc5MTcsIDc5MjIsIAorICAgIDc5MjcsIDY4NTAsIDc5MzIsIDc5MzYsIDc5NDAsIDc5NDQsIDc5NDksIDc5NTQsIDc5NjAsIDc5NjQsIDc5NzEsIDc5NzYsIAorICAgIDc5ODQsIDc5ODgsIDc5OTEsIDc5OTcsIDgwMDQsIDgwMDgsIDgwMTEsIDgwMTYsIDgwMjAsIDM3MzYsIDgwMjYsIDgwMzQsIAorICAgIDgwNDAsIDY4NjUsIDgwNDUsIDgwNTEsIDgwNTYsIDgwNjAsIDgwNjMsIDgwNzgsIDgwOTcsIDgxMDksIDgxMjIsIDgxMzUsIAorICAgIDgxNDgsIDgxNjIsIDgxNzUsIDgxOTAsIDgxOTcsIDgyMDMsIDgyMDcsIDgyMTIsIDgyMTgsIDgyMjYsIDgyMzEsIDYwMTEsIAorICAgIDgyMzYsIDgyMzksIDgyNDQsIDgyNDgsIDI3MzcsIDg3NywgODI1NCwgODI1OCwgODI2NCwgODI3MCwgODI3NSwgODI4MSwgCisgICAgODI4NiwgNzAyNCwgODI5MiwgODI5OCwgODMwMywgODMwOCwgODMxNiwgODMyMiwgODMzNSwgODM0MywgODM1MCwgODM1NCwgCisgICAgODM2MiwgODM2OSwgODM4MSwgODM5MSwgODM5OCwgODQwNSwgODQxNCwgODQyMywgODQzMSwgODQzNiwgODQ0MiwgNzAzMCwgCisgICAgODQ0NywgODQ1MywgNzAzNiwgODQ1OCwgODQ2MSwgODQ2OCwgODQ3NCwgODQ4NywgODQ5OCwgODUwNSwgODUxMSwgODUyMCwgCisgICAgODUyOCwgODUzNSwgODU0MSwgODU0NywgODU1MiwgODU1NiwgODU2MSwgODA3MCwgODU2NywgNzA0MSwgODU3NCwgODU3OSwgCisgICAgODU4NiwgODU5MiwgODU5OCwgODYwMywgODYxMSwgODYxOSwgODYyNiwgODYzMCwgODY0NCwgODY1NCwgODY1OSwgODY2MywgCisgICAgODY3NCwgODY4MCwgODY4NSwgODY5MCwgODY5NCwgNzA0NiwgODY5OSwgODcwMiwgODcwNywgODcxOSwgODcyNiwgODczMSwgCisgICAgODczNSwgODc0MCwgODc0NCwgODc1MSwgODc1NywgNzA1MSwgNjk4NCwgODc2NCwgMjc0MiwgOCwgODc3MSwgODc3NiwgCisgICAgODc4MCwgODc4NiwgODc5NywgODgwNywgODgxNiwgODgyOCwgODgzMywgODgzNywgODg0NSwgODg1OSwgODg2MywgODg2NiwgCisgICAgODg3NCwgODg4MSwgODg4OSwgODg5MywgODkwNCwgODkwOCwgODkxNSwgODkyMCwgODkyNCwgODkzMCwgODkzNSwgODkzOSwgCisgICAgODk0NCwgODk0OCwgODk1MSwgODk1NywgODk2MiwgODk2OCwgODk3NSwgODk4NSwgODk5NCwgOTAwMSwgNzA2MSwgNzA2OCwgCisgICAgNzA3NCwgNzA3OSwgOTAwNywgNzA4MywgOTAxMywgOTAxNiwgOTAyMywgOTAzOCwgOTA1NCwgOTA2OSwgOTcwLCA0MDYsIAorICAgIDkwNzQsIDkwODIsIDkwODksIDkwOTUsIDkxMDAsIDkxMDUsIDcwOTIsIDkxMDcsIDkxMTEsIDkxMTUsIDkxMjUsIDkxMzAsIAorICAgIDkxMzQsIDkxNDMsIDkxNDcsIDkxNTAsIDkxNTcsIDkxNjEsIDkxNjQsIDkxNzIsIDkxNzksIDkxODcsIDkxOTEsIDkxOTgsIAorICAgIDkyMDIsIDkyMDgsIDkyMTIsIDkyMTYsIDkyMjAsIDkyMjYsIDkyMzAsIDkyMzQsIDkyNDEsIDkyNDUsIDkyNTAsIDkyNTQsIAorICAgIDkyNjEsIDkyNjcsIDkyNzUsIDkyODEsIDkyOTEsIDkyOTYsIDkzMDEsIDkzMDUsIDkzMTMsIDM2NDEsIDkzMjEsIDkzMjYsIAorICAgIDkzMzAsIDkzMzQsIDkzMzcsIDkzNDUsIDkzNTIsIDkzNTYsIDkzNjAsIDkzNjUsIDkzNjksIDkzODAsIDkzODYsIDkzOTAsIAorICAgIDkzOTMsIDk0MDAsIDk0MDUsIDcxMDEsIDk0MTAsIDk0MTQsIDE3MDQsIDQyNjUsIDk0MjEsIDk0MjYsIDk0MzEsIDk0MzYsIAorICAgIDk0NDIsIDk0NDcsIDk0NTMsIDk0NTgsIDk0NjMsIDk0NjgsIDk0NzMsIDk0NzgsIDk0ODMsIDk0ODgsIDk0OTMsIDk0OTgsIAorICAgIDk1MDMsIDk1MDgsIDk1MTMsIDk1MTgsIDk1MjMsIDk1MjgsIDk1MzMsIDk1MzksIDk1NDQsIDk1NDksIDk1NTQsIDk1NTksIAorICAgIDk1NjQsIDk1NzAsIDk1NzUsIDk1ODAsIDk1ODYsIDk1OTEsIDk1OTcsIDk2MDIsIDk2MDgsIDk2MTMsIDk2MTgsIDk2MjMsIAorICAgIDk2MjgsIDk2MzQsIDk2MzksIDk2NDQsIDY3MCwgMTM0LCA5NjQ5LCA5NjUzLCA5NjU4LCA5NjYzLCA5NjY3LCA5NjcxLCAKKyAgICA5Njc1LCA5NjgwLCA5Njg0LCA5Njg5LCA5NjkzLCA5Njk2LCA5NzAwLCA5NzA0LCA5NzA5LCA5NzE5LCA5NzI1LCA5NzI5LCAKKyAgICA5NzMzLCA5NzQwLCA5NzQ4LCA5NzU3LCA5NzY4LCA5Nzc1LCA5NzgyLCA5NzkxLCA5ODAwLCA5ODA5LCA5ODE4LCA5ODI3LCAKKyAgICA5ODM2LCA5ODQ2LCA5ODU2LCA5ODY2LCA5ODc2LCA5ODg2LCA5ODk1LCA5OTA1LCA5OTE1LCA5OTI1LCA5OTM1LCA5OTQ1LCAKKyAgICA5OTU1LCA5OTY1LCA5OTc0LCA5OTg0LCA5OTk0LCAxMDAwNCwgMTAwMTQsIDEwMDI0LCAxMDAzNCwgMTAwNDMsIDEwMDUzLCAKKyAgICAxMDA2MywgMTAwNzMsIDEwMDgzLCAxMDA5MywgMTAxMDMsIDEwMTEzLCAxMDEyMywgMTAxMzMsIDEwMTQyLCAxMDE1MiwgCisgICAgMTAxNjIsIDEwMTcyLCAxMDE4MiwgMTAxOTIsIDEwMjAyLCAxMDIxMiwgMTAyMjIsIDEwMjMyLCAxMDI0MiwgMTAyNTEsIAorICAgIDEwMjU3LCAxMDI2MSwgMTAyNjQsIDEwMjY4LCAxMDI3MywgMTAyODAsIDEwMjg2LCAxMDI5MSwgMTAyOTUsIDEwMzAwLCAKKyAgICAxMDMwNCwgMTAzMDgsIDcxMTAsIDEwMzE0LCAxMDMxOSwgMTAzMjgsIDcxMTUsIDEwMzMzLCAxMDMzNiwgMTAzNDIsIAorICAgIDEwMzUwLCA3MTIwLCAxMDM1NywgMTAzNjEsIDEwMzY1LCAxMDM2OSwgMTAzNzksIDEwMzg0LCAxMDM5MywgMTA0MDEsIAorICAgIDEwNDA4LCAxMDQxMywgMTA0MjAsIDEwNDI1LCAxMDQyOSwgMTA0MzIsIDEwNDQzLCAxMDQ1MywgMTA0NjIsIDEwNDcwLCAKKyAgICAxMDQ4MSwgMTA0OTMsIDEwNTAzLCAxMDUwNywgMTA1MTIsIDEwNTE3LCAxMDUyMSwgMTA1MjYsIDEwNTM1LCAxMDUzOSwgCisgICAgMTA1NDIsIDEwNTQ5LCAxMDU1OSwgMTA1NjgsIDEwNTc1LCAxMDU3OSwgMTA1ODUsIDEwNTkwLCAxMDU5NSwgMTA1OTksIAorICAgIDEwNjA4LCAxMDYxMywgMTA2MTksIDEwNjI0LCAxMDYyOCwgMTA2MzcsIDEwNjQ1LCAxMDY1MywgMTA2NjAsIDEwNjY4LCAKKyAgICAxMDY4MCwgMTA2OTEsIDEwNzAxLCAxMDcwOCwgMTA3MTQsIDEwNzIzLCAxMDczNCwgMTA3NDMsIDEwNzUyLCAxMDc2MCwgCisgICAgMTA3NjcsIDEwNzc2LCAxMDc4NCwgNTc2MSwgMTA3ODgsIDEwNzkwLCAxMDc5NSwgMTA4MDEsIDEwODA5LCAxMDgxNiwgCisgICAgMTA4MjUsIDEwODM0LCAxMDg0MywgMTA4NTIsIDEwODYxLCAxMDg3MCwgMTA4NzksIDEwODg4LCAxMDg5OCwgMTA5MDgsIAorICAgIDEwOTE3LCAxMDkyNCwgMTA5MzgsIDEwOTQ1LCAxMDk1MywgMTA5NjIsIDEwOTY4LCAxMDk3NywgMTA5ODUsIDEwOTk0LCAKKyAgICAxMTAwNywgMTEwMTUsIDExMDIyLCAxMTAzNSwgMTEwNDEsIDExMDUwLCAxMTA1OSwgMTEwNjQsIDExMDY4LCAxMTA3NCwgCisgICAgMTEwODAsIDExMDg3LCA2ODY0LCAxMTA5MiwgMTEwOTcsIDExMTA0LCAxMTEwOSwgMTExMTQsIDExMTE4LCAxMTEyNCwgCisgICAgMTExMzIsIDExMTQwLCAxMTE0NywgMTExNTUsIDExMTYzLCAxMTE2OCwgMTExNzQsIDExMTc5LCAxMTE4MywgMTExOTQsIAorICAgIDExMjAyLCAxMTIwOCwgMTEyMTMsIDExMjIyLCAxMTIyOCwgMTEyMzMsIDExMjQyLCAxMTI1NiwgMzYwMCwgMTEyNjAsIAorICAgIDExMjY1LCAxMTI3MCwgMTEyNzYsIDExMjgxLCAxMTI4NiwgMTEyOTAsIDExMjk1LCAxMTMwMCwgNTc2MCwgMTEzMDUsIAorICAgIDExMzEwLCAxMTMxNSwgMTEzMjAsIDExMzI0LCAxMTMyOSwgMTEzMzQsIDExMzM5LCAxMTM0NSwgMTEzNTEsIDExMzU2LCAKKyAgICAxMTM2MCwgMTEzNjUsIDExMzcwLCAxMTM3NSwgNzEyNCwgMTEzODAsIDExMzg1LCAxMTM5MCwgMTEzOTUsIDExNDEyLCAKKyAgICAxMTQzMCwgMTE0NDIsIDExNDU1LCAxMTQ3MiwgMTE0ODgsIDExNTA1LCAxMTUxNSwgMTE1MzQsIDExNTQ1LCAxMTU1NiwgCisgICAgMTE1NjcsIDExNTc4LCAxMTU5MCwgMTE2MDEsIDExNjEyLCAxMTYyOSwgMTE2NDAsIDExNjUxLCAxMTY1NiwgMjMxNywgCisgICAgMTE2NjAsIDExNjYzLCAxMTY2OSwgMTE2NzcsIDExNjg1LCAxMTY5MCwgMTE2OTgsIDExNzA2LCAxMTcxMywgMTE3MTgsIAorICAgIDExNzI0LCAxMTczMSwgMTE3MzksIDExNzQ2LCAxMTc1OCwgMTE3NjMsIDkwMzIsIDExNzY5LCAxMTc3OCwgMTE3ODYsIAorICAgIDExNzkzLCAxMTc5OSwgMTE4MDcsIDExODE0LCAxMTgyMSwgMTE4MjcsIDExODM2LCAxMTg0NCwgMTE4NTEsIDExODU5LCAKKyAgICAxMTg2NSwgMTE4NzIsIDExODgwLCAxMTg4NSwgMzM3MiwgMTE4NywgMTE4OTIsIDExODk1LCAxMTMwNiwgMTE4OTksIAorICAgIDExOTA1LCAxMTkwOSwgMTE5MjEsIDExOTI2LCAxMTkzMywgMTE5MzksIDExOTQ0LCAxMTk1MSwgMTEzMTEsIDExMzE2LCAKKyAgICAxMTk1NSwgMTE5NTksIDExOTY0LCAxMTk2OCwgMTE5NzYsIDExOTgzLCAxMTk5MCwgMTIwMDcsIDEyMDExLCAxMjAxNCwgCisgICAgMTIwMjIsIDEyMDI4LCAzNDI4LCAxMjAzMiwgMTIwMzQsIDEyMDQyLCAxMjA0OSwgMTIwNTksIDEyMDY0LCAxMjA3MCwgCisgICAgMTIwNzUsIDEyMDc5LCAxMjA4NSwgMTIwOTAsIDEyMDkzLCAxMjEwMCwgMTIxMDYsIDEyMTEyLCAxMjExNywgMTIxMjQsIAorICAgIDEyMTMwLCAxMjEzNSwgMTIxNDIsIDEyMTQ2LCAxMjE1MiwgMTIxNTksIDEyMTY1LCAxMjE3MSwgMTIxNzksIDEyMTg1LCAKKyAgICAxMjE5MywgMTIxOTksIDEyMjA1LCAxMjIxMCwgMTIyMTcsIDEyMjIyLCAxMjIyNiwgMTIyMzEsIDEyMjM4LCAxMjI0MywgCisgICAgMTIyNDksIDEyMjU1LCAxMjI2MSwgMTIyNjQsIDEyMjY4LCAxMjI4MCwgMTIyODYsIDEyMjkxLCAxMjI5OCwgMTIzMDQsIAorICAgIDEyMzEwLCAxMjMyMSwgMTIzMzEsIDEyMzQwLCAxMjM0OCwgMTIzNTUsIDEyMzY1LCAxMjM3NSwgMTIzODMsIDEyMzg2LCAKKyAgICAxMTMzMCwgMTIzOTEsIDExMzM1LCAxMTQ2MCwgMTIzOTksIDEyNDEyLCAxMjQyNywgMTI0MzgsIDExNDc3LCAxMjQ1NiwgCisgICAgMTI0NjksIDEyNDgyLCAxMjQ5MywgODA4NSwgMTI1MDQsIDEyNTE3LCAxMjUzNiwgMTI1NDcsIDEyNTU4LCAxMjU2OSwgCisgICAgMjU0MiwgMTI1ODIsIDEyNTg2LCAxMjU5NCwgMTI2MDUsIDEyNjEyLCAxMjYxOCwgMTI2MjYsIDEyNjMwLCAxMjYzNiwgCisgICAgMTI2MzksIDEyNjQ5LCAxMjY1NywgMTI2NjQsIDEyNjcyLCAxMjY3NywgMTI2ODIsIDEyNjg5LCAxMjY5NSwgMTI3MDAsIAorICAgIDEyNzA1LCAxMjcwOSwgMTI3MTMsIDEyNzE5LCAxMjcyNSwgMTI3MzAsIDEyNzM1LCAxMjc0MCwgMTI3NDQsIDExMzQwLCAKKyAgICAxMTM0NiwgMTEzNTIsIDEyNzQ4LCAxMjc1NiwgMTI3NjUsIDEyNzcyLCA3MDAwLCAxMjc3NiwgMTI3NzgsIDEyNzgzLCAKKyAgICAxMjc4OCwgMTI3OTQsIDEyNzk5LCAxMjgwNCwgMTI4MDksIDEyODE0LCAxMjgxOCwgMTI4MjQsIDEyODMwLCAxMjgzNSwgCisgICAgMTI4NDEsIDEyODQ2LCAxMjg1MSwgMTI4NTcsIDEyODYyLCAxMjg2NywgMTI4NzIsIDEyODc4LCAxMjg4MywgMTI4ODgsIAorICAgIDEyODk0LCAxMjkwMCwgMTI5MDUsIDEyOTEyLCAxMjkxOSwgMTI5MjQsIDEyOTI4LCAxMjkzMiwgMTI5MzUsIDEyOTQzLCAKKyAgICAxMjk0OCwgMTI5NTUsIDEyOTYwLCAxMjk2NSwgMTI5NzUsIDEyOTgwLCAxMjk4NywgMTI5OTMsIDEzMDAzLCAxMzAxNywgCisgICAgMTMwMzEsIDEzMDQ1LCAxMzA1OSwgMTMwNzQsIDEzMDg5LCAxMzEwNiwgMTMxMjQsIDEzMTM3LCAxMzE0MywgMTMxNDgsIAorICAgIDEzMTUzLCAxMzE1OSwgMTMxNjQsIDEzMTY5LCAxMzE3MywgMTMxNzcsIDEzMTgyLCAxMzE4NiwgMTMxOTcsIDEzMjAzLCAKKyAgICAxMzIwOCwgMTMyMTMsIDEzMjE3LCAxMzIyMiwgMTMyMjgsIDEzMjM1LCAxMzI0MCwgMTMyNDQsIDEzMjUwLCAxMzI1NSwgCisgICAgMTMyNjAsIDEzMjY0LCAxMzI3MCwgMTMyNzUsIDEzMjgwLCAxMzI4NywgMTMyOTIsIDEzMjk2LCAxMzMwMCwgMTMzMDUsIAorICAgIDEzMzEwLCAxMzMxNiwgMTMzMjIsIDEzMzI3LCAxMzMzNiwgMTMzNDQsIDEzMzUxLCAxMzM1OCwgMTMzNjQsIDEzMzcwLCAKKyAgICAxMzM3NSwgMTMzODAsIDEzMzg2LCAxMzM5MSwgMTMzOTcsIDEzNDAyLCAxMzQwOCwgMTM0MTQsIDEzNDIxLCAxMzQyNywgCisgICAgMTM0MzIsIDEzNDM3LCA3MTY2LCAxMzQ0NiwgMTM0NDksIDEzNDU1LCAxMzQ2MCwgMTM0NjUsIDEzNDc1LCAxMzQ4MiwgCisgICAgMTM0ODcsIDEzNDkzLCAxMzQ5OCwgMTM1MDQsIDEzNTA5LCAxMzUxNSwgMTM1MjEsIDEzNTI2LCAxMzUzNCwgMTM1NDEsIAorICAgIDEzNTQ2LCAxMzU1MiwgMTM1NTcsIDEzNTYxLCAxMzU3MCwgMTM1ODEsIDEzNTg4LCAxMzU5NiwgMTM2MDIsIDEzNjA5LCAKKyAgICAxMzYxNSwgMTM2MjAsIDEzNjI0LCAxMzYzMCwgMTM2MzUsIDEzNjQwLCAxMzY0NSwgNzE3MSwgNTc3NywgMjc1NiwgMTM2NDksIAorICAgIDEzNjUzLCAxMzY1NywgMTM2NjEsIDEzNjY1LCAxMzY2OCwgMTM2NzUsIDEzNjgzLCAxMTM2NiwgMTM2OTAsIDEzNzAwLCAKKyAgICAxMzcwOCwgMTM3MTUsIDEzNzIzLCAxMzczMywgMTM3NDIsIDEzNzQ3LCAxMDQ1OCwgMTA0NjcsIDEzNzUyLCAxMzc2MiwgCisgICAgMTM3NzcsIDEzNzgzLCAxMzc5MCwgMTM3OTcsIDEzODAzLCAxMzgxMywgMTM4MjMsIDExMzcxLCAxMzgzMiwgMTM4MzgsIAorICAgIDEzODQ0LCAxMzg1MiwgMTM4NjAsIDEzODY1LCAxMzg3NCwgMTM4ODIsIDEzODk0LCAxMzkwNCwgMTM5MTQsIDEzOTI0LCAKKyAgICAxMzkzMywgMTM5NDUsIDEzOTU1LCAxMzk2NSwgMTM5NzYsIDEzOTgxLCAxMzk5MywgMTQwMDUsIDE0MDE3LCAxNDAyOSwgCisgICAgMTQwNDEsIDE0MDUzLCAxNDA2NSwgMTQwNzcsIDE0MDg5LCAxNDEwMSwgMTQxMTIsIDE0MTI0LCAxNDEzNiwgMTQxNDgsIAorICAgIDE0MTYwLCAxNDE3MiwgMTQxODQsIDE0MTk2LCAxNDIwOCwgMTQyMjAsIDE0MjMyLCAxNDI0MywgMTQyNTUsIDE0MjY3LCAKKyAgICAxNDI3OSwgMTQyOTEsIDE0MzAzLCAxNDMxNSwgMTQzMjcsIDE0MzM5LCAxNDM1MSwgMTQzNjMsIDE0Mzc0LCAxNDM4NiwgCisgICAgMTQzOTgsIDE0NDEwLCAxNDQyMiwgMTQ0MzQsIDE0NDQ2LCAxNDQ1OCwgMTQ0NzAsIDE0NDgyLCAxNDQ5NCwgMTQ1MDUsIAorICAgIDE0NTE3LCAxNDUyOSwgMTQ1NDEsIDE0NTUzLCAxNDU2NSwgMTQ1NzcsIDE0NTg5LCAxNDYwMSwgMTQ2MTMsIDE0NjI1LCAKKyAgICAxNDYzNiwgMTQ2NDgsIDE0NjYwLCAxNDY3MiwgMTQ2ODQsIDE0Njk2LCAxNDcwOCwgMTQ3MjAsIDE0NzMyLCAxNDc0NCwgCisgICAgMTQ3NTYsIDE0NzY3LCAxNDc3OSwgMTQ3OTEsIDE0ODAzLCAxNDgxNSwgMTQ4MjcsIDE0ODM5LCAxNDg1MSwgMTQ4NjMsIAorICAgIDE0ODc1LCAxNDg4NywgMTQ4OTgsIDE0OTEwLCAxNDkyMiwgMTQ5MzQsIDE0OTQ2LCAxNDk1OSwgMTQ5NzIsIDE0OTg1LCAKKyAgICAxNDk5OCwgMTUwMTEsIDE1MDI0LCAxNTAzNywgMTUwNDksIDE1MDYyLCAxNTA3NSwgMTUwODgsIDE1MTAxLCAxNTExNCwgCisgICAgMTUxMjcsIDE1MTQwLCAxNTE1MywgMTUxNjYsIDE1MTc5LCAxNTE5MSwgMTUyMDQsIDE1MjE3LCAxNTIzMCwgMTUyNDMsIAorICAgIDE1MjU2LCAxNTI2OSwgMTUyODIsIDE1Mjk1LCAxNTMwOCwgMTUzMjEsIDE1MzMzLCAxNTM0NiwgMTUzNTksIDE1MzcyLCAKKyAgICAxNTM4NSwgMTUzOTgsIDE1NDExLCAxNTQyNCwgMTU0MzcsIDE1NDUwLCAxNTQ2MywgMTU0NzUsIDE1NDg4LCAxNTUwMSwgCisgICAgMTU1MTQsIDE1NTI3LCAxNTU0MCwgMTU1NTMsIDE1NTY2LCAxNTU3OSwgMTU1OTIsIDE1NjA1LCAxNTYxNywgMTU2MzAsIAorICAgIDE1NjQzLCAxNTY1NiwgMTU2NjksIDE1NjgyLCAxNTY5NSwgMTU3MDgsIDE1NzIxLCAxNTczNCwgMTU3NDcsIDE1NzU5LCAKKyAgICAxNTc3MCwgMTU3ODMsIDE1Nzk2LCAxNTgwOSwgMTU4MjIsIDE1ODM1LCAxNTg0OCwgMTU4NjEsIDE1ODc0LCAxNTg4NywgCisgICAgMTU5MDAsIDE1OTEyLCAxNTkyNSwgMTU5MzgsIDE1OTUxLCAxNTk2NCwgMTU5NzcsIDE1OTkwLCAxNjAwMywgMTYwMTYsIAorICAgIDE2MDI5LCAxNjA0MiwgMTYwNTQsIDE2MDY3LCAxNjA4MCwgMTYwOTMsIDE2MTA2LCAxNjExOSwgMTYxMzIsIDE2MTQ1LCAKKyAgICAxNjE1OCwgMTYxNzEsIDE2MTg0LCAxNjE5NiwgMTYyMDksIDE2MjIyLCAxNjIzNSwgMTYyNDgsIDE2MjYxLCAxNjI3NCwgCisgICAgMTYyODcsIDE2MzAwLCAxNjMxMywgMTYzMjYsIDE2MzM4LCAxNjM1MSwgMTYzNjQsIDE2Mzc3LCAxNjM5MCwgMTY0MDMsIAorICAgIDE2NDE2LCAxNjQyOSwgMTY0NDIsIDE2NDU1LCAxNjQ2OCwgMTY0ODAsIDE2NDkzLCAxNjUwNiwgMTY1MTksIDE2NTMyLCAKKyAgICAxNjU0NSwgMTY1NTgsIDE2NTcxLCAxNjU4NCwgMTY1OTcsIDE2NjEwLCAxNjYyMiwgMTY2MzUsIDE2NjQ4LCAxNjY2MSwgCisgICAgMTY2NzQsIDE2Njg3LCAxNjcwMCwgMTY3MTMsIDE2NzI2LCAxNjczOSwgMTY3NTIsIDE2NzY0LCAxNjc3NywgMTY3OTAsIAorICAgIDE2ODAzLCAxNjgxNiwgMTY4MjksIDE2ODQyLCAxNjg1NSwgMTY4NjgsIDE2ODgxLCAxNjg5NCwgMTY5MDYsIDE2OTE5LCAKKyAgICAxNjkzMiwgMTY5NDUsIDE2OTU4LCAxNjk3MSwgMTY5ODQsIDE2OTk3LCAxNzAxMCwgMTcwMjMsIDE3MDM2LCAxNzA0OCwgCisgICAgMTcwNjEsIDE3MDc0LCAxNzA4NywgMTcxMDAsIDE3MTEzLCAxNzEyNiwgMTcxMzksIDE3MTUyLCAxNzE2NSwgMTcxNzgsIAorICAgIDE3MTkwLCAxNzIwMSwgMTcyMDksIDE3MjE2LCAxNzIyMiwgMTcyMjYsIDE3MjMyLCAxNzIzOCwgMTcyNDYsIDE3MjUyLCAKKyAgICAxNzI1NywgNzAwNSwgMTcyNjEsIDE3MjY4LCAxNzI3NiwgMTcyODMsIDE3MjkwLCA4NDgxLCAxNzI5NywgMTczMDYsIAorICAgIDE3MzExLCA1NzkzLCAxNzMxOCwgMTczMjMsIDE3MzI2LCAxNzMzMSwgMTczMzksIDE3MzQ2LCAxNzM1MywgMTczNTksIAorICAgIDE3MzY4LCAxNzM3NywgMTczODMsIDE3Mzg4LCAxNzM5OCwgMTc0MDUsIDE3NDEzLCAxNzQxOSwgMTc0MjksIDE3NDM4LCAKKyAgICAxNzQ0MiwgMTc0NDksIDE3NDUzLCAxNzQ1OCwgMTc0NjQsIDE3NDcyLCAxNzQ3NiwgMTEzODEsIDE3NDg1LCAxNzQ5MSwgCisgICAgMTc0OTUsIDE3NTAxLCAxNzUwOCwgMTc1MTksIDY4MjksIDE3NTI3LCAxNzUzMywgMTc1MzgsIDE3NTQyLCAxNzU0NiwgCisgICAgNzQxNSwgMTc1NTEsIDE3NTU5LCAxNzU2NiwgMTc1NzUsIDE3NTgyLCAxNzU4OSwgMTc1OTUsIDE3NTk5LCAxNzYwNSwgCisgICAgMTc2MTEsIDE3NjE5LCAxNzYyNSwgMTc2MzIsIDE3NjM4LCAxNzY0NCwgMTc2NDgsIDE3NjU2LCAxNzY2NSwgMTc2NzAsIAorICAgIDE3NjgxLCAxNzY4NiwgMTc2OTEsIDE3Njk2LCA1OTY2LCAxNzcwMCwgMTc3MDYsIDE3NzEzLCAxNzcyMiwgMTc3MjcsIAorICAgIDE3NzM1LCAxNzc0NywgMTc3NTIsIDE3NzU2LCAxNzc1OSwgMTc3NjUsIDE3NzcxLCAxNzc3NiwgMTc3ODAsIDE3NzgzLCAKKyAgICAxNzc5NCwgMTc3OTksIDcyMDEsIDE3ODA2LCA3MDE2LCA3MjA2LCAxNzgxMSwgMTc4MTYsIDE3ODIxLCAxNzgyNiwgMTc4MzEsIAorICAgIDE3ODM2LCAxNzg0MSwgMTc4NDYsIDE3ODUxLCAxNzg1NiwgMTc4NjEsIDE3ODY2LCAxNzg3MiwgMTc4NzcsIDE3ODgyLCAKKyAgICAxNzg4NywgMTc4OTIsIDE3ODk3LCAxNzkwMiwgMTc5MDcsIDE3OTEyLCAxNzkxNywgMTc5MjMsIDE3OTI5LCAxNzkzNCwgCisgICAgMTc5MzksIDE3OTQ0LCAxNzk0OSwgMTc5NTQsIDE3OTU5LCAxNzk2NCwgMTc5NjksIDE3OTc0LCAxNzk4MCwgMTc5ODUsIAorICAgIDE3OTkwLCAxNzk5NSwgMTgwMDEsIDE4MDA3LCAxODAxMiwgMTgwMTcsIDE4MDIyLCAxODAyNywgMTgwMzIsIDE4MDM3LCAKKyAgICAxODA0MiwgMTgwNDcsIDE4MDUzLCAxODA1OCwgMTgwNjMsIDE4MDY4LCAxODA3MywgMTgwNzksIDE4MDg0LCAxODA4OSwgCisgICAgMTgwOTMsIDEyOSwgMTgxMDEsIDE4MTA1LCAxODEwOSwgMTgxMTMsIDE4MTE4LCAxODEyMiwgMTgxMjYsIDk3ODgsIDE4MTMwLCAKKyAgICAxODEzNSwgMTgxMzksIDE4MTQ0LCAxODE0OCwgMTgxNTMsIDE4MTU3LCAxODE2MywgMTgxNjgsIDE4MTcyLCAxODE3NiwgCisgICAgMTgxODQsIDE4MTg4LCAxODE5MywgMTgxOTgsIDE4MjAyLCAxODIwOCwgMTgyMTMsIDE4MjE3LCAxODIyMiwgMTgyMjcsIAorICAgIDE4MjMxLCAxODIzOCwgMTgyNDIsIDE4MjQ2LCAxODI1MSwgMTgyNTUsIDE4MjU4LCAxODI3MSwgMTgyNzYsIDE4Mjg1LCAKKyAgICA3MjM4LCAxODI5MCwgMTgyOTMsIDI2MDUsIDI2MTAsIDE4Mjk3LCAxODMwMywgMTgzMDksIDE4MzE0LCAxODMxOSwgMTgzMjQsIAorICAgIDE4MzMwLCAxODMzNSwgMTgzNDAsIDE4MzQ0LCAxODM0OSwgMTgzNTQsIDE4MzYwLCAxODM2NSwgMTgzNzAsIDE4Mzc2LCAKKyAgICAxODM4MSwgMTgzODUsIDE4MzkwLCAxODM5NSwgMTg0MDAsIDE4NDA0LCAxODQwOSwgMTg0MTQsIDE4NDE5LCAxODQyNCwgCisgICAgMTg0MjgsIDE4NDMyLCAxODQzNywgMjc2NSwgMTgzODYsIDE4NDQxLCAxODQ0OCwgNzQ5NCwgMTg0NjAsIDE4NDY4LCAKKyAgICAxODM5MSwgMTg0NzUsIDE4NDgwLCAxODM5NiwgMTg0ODgsIDE4NDkzLCAxODQ5OCwgMTg1MDMsIDE4NTA3LCAxODUxMiwgCisgICAgMTg1MTUsIDE4NTE5LCAxODUyNSwgMTg1MzAsIDY4NTYsIDE3MDksIDE3MTQsIDE4NTM0LCAxODU0MCwgMTg1NDYsIDE4NTUxLCAKKyAgICAxODU1NSwgMTg1NTksIDE4NTYzLCAxODU2NiwgMTg1NzIsIDE4NTc5LCAxODU4NywgMTg1OTMsIDE4NTk5LCAxODYwNCwgCisgICAgMTg2MDksIDE4NjEzLCAxMTc0MSwgMTIzNjEsIDE4NjE4LCAxODYzMCwgMTg2MzMsIDE4NjQwLCAxODY0NCwgMTg2NTIsIAorICAgIDE4NjYzLCAxODY3MiwgMTg2ODUsIDE4Njk1LCAxODcwOSwgMTg3MjEsIDE4NzM1LCAxODc0NSwgMTg3NTcsIDE4NzYzLCAKKyAgICAxODc3OCwgMTg4MDIsIDE4ODIwLCAxODgzOSwgMTg4NTIsIDE4ODY2LCAxODg4NCwgMTg5MDAsIDE4OTE3LCAxODkzNSwgCisgICAgMTg5NDYsIDE4OTY1LCAxODk4MiwgMTkwMDIsIDE5MDIwLCAxOTAzMiwgMTkwNDYsIDE5MDYwLCAxOTA3MiwgMTkwODksIAorICAgIDE5MTA4LCAxOTEyNiwgMTkxMzgsIDE5MTU2LCAxOTE3NSwgMTE1MjAsIDE5MTg4LCAxOTIwOCwgMTkyMjAsIDgxMTYsIAorICAgIDE5MjMyLCAxOTIzNywgMTkyNDIsIDE5MjQ3LCAxOTI1MywgMTkyNTgsIDIzMzQsIDE5MjYyLCAxOTI2OCwgMTkyNzIsIAorICAgIDE5Mjc1LCAxOTI3OSwgMTkyODcsIDE5MjkzLCAxODQwNSwgMTkyOTcsIDE5MzA4LCAxOTMxNCwgMTkzMjAsIDE5MzI5LCAKKyAgICAxOTMzNiwgMTkzNDEsIDE5MzQ4LCAxOTM1NCwgMTkzNjMsIDE5MzcxLCAxOTM4MSwgMTkzOTEsIDE5Mzk2LCAxOTQwNSwgCisgICAgMTk0MTQsIDE5NDI1LCAxOTQzNiwgMzY3NywgMTk0NDYsIDE5NDUwLCAxOTQ2MCwgMTk0NjgsIDE5NDc4LCAxOTQ4OSwgCisgICAgMTk0OTcsIDE5NTA0LCAxOTUxMCwgMTk1MTUsIDE4NDE1LCAxOTUxOSwgMTk1MjgsIDE5NTMyLCAxOTUzNywgMTk1NDYsIAorICAgIDE5NTU0LCAxOTU2NCwgMTk1NzMsIDE5NTc5LCAxOTU4NSwgMTg0MjAsIDE4NDI1LCAxOTU4OSwgMTk1OTksIDkxNiwgCisgICAgMTk2MDgsIDExNzAyLCAxMTU0LCAxOTYyMiwgMTk2MzEsIDE5NjM5LCAxOTY1MCwgMTk2NjEsIDE5NjcxLCAxOTY4MCwgCisgICAgMTk2ODksIDE5Njk4LCAxOTcwNCwgMTk3MTMsIDE5NzIxLCA3MTc4LCAxOTcyNywgMTk3MzAsIDE5NzM0LCAxOTczOSwgCisgICAgMTk3NDQsIDE5NzUyLCAxODQzMywgMTk3NTYsIDE5NzYyLCAxOTc2OCwgMTk3NzMsIDE5Nzc4LCAxOTc4MiwgMTk3OTAsIAorICAgIDE5Nzk2LCAxOTgwMiwgMzM1MSwgMTk4MTAsIDE5ODE1LCAxOTgyMCwgMTk4MjQsIDE5ODI4LCAxOTgzNSwgMTk4MzksIAorICAgIDE5ODQ3LCAxOTg1MywgMTk4NTgsIDE5ODYyLCAxOTg2NywgMTk4NzMsIDE5ODc3LCAxOTg4OCwgMTk4OTMsIDE5ODk3LCAKKyAgICAxOTkwOCwgMTk5MTIsIDE5OTE2LCAxOTkxOSwgMTk5MjMsIDE5OTI4LCAxOTkzMiwgMTk5MzYsIDkwMywgMTk5NDAsIAorICAgIDE5OTQ1LCAxOTk1MCwgMTk5NTUsIDE5OTYwLCAxOTk2NSwgMTk5NzAsIDE5OTc1LCAxOTk4MCwgMTk5ODUsIDE5OTkwLCAKKyAgICAxOTk5NSwgMjAwMDAsIDIwMDA1LCAyMDAxMSwgMjAwMTYsIDIwMDIxLCAyMDAyNiwgMjAwMzEsIDIwMDM2LCAyMDA0MSwgCisgICAgMjAwNDcsIDIwMDUyLCAyMDA1NywgMjAwNjIsIDIwMDY3LCAyMDA3MiwgMjAwNzcsIDIwMDgyLCAyMDA4OCwgMjAwOTQsIAorICAgIDIwMDk5LCAyMDEwNSwgMjAxMTAsIDIwMTE1LCA1LCAyMDEyMSwgMjAxMjUsIDIwMTI5LCAyMDEzMywgMjAxMzgsIDIwMTQyLCAKKyAgICAyMDE0NiwgMjAxNTAsIDIwMTU0LCAyMDE1OSwgMjAxNjMsIDIwMTY4LCAyMDE3MiwgMjAxNzUsIDIwMTc5LCAyMDE4NCwgCisgICAgMjAxODgsIDIwMTkzLCAyMDE5NywgMjAyMDEsIDIwMjA1LCAyMDIxMCwgMjAyMTQsIDIwMjE4LCAyMDIyOCwgMjAyMzMsIAorICAgIDIwMjM3LCAyMDI0MSwgMjAyNDYsIDIwMjUxLCAyMDI2MCwgMjAyNjUsIDIwMjcwLCAyMDI3NCwgMjAyNzgsIDIwMjkwLCAKKyAgICAyMDI5OSwgMjAzMDgsIDIwMzE0LCAyMDMxOCwgMjAzMjIsIDIwMzMyLCAyMDM0MSwgMjAzNDksIDIwMzU1LCAyMDM1OSwgCisgICAgMjAzNjYsIDIwMzc2LCAyMDM4NSwgMjAzOTMsIDIwNDAxLCAyMDQwOCwgMjA0MTYsIDIwNDI1LCAyMDQzNCwgMjA0NDIsIAorICAgIDIwNDQ3LCAyMDQ1MSwgMjA0NTUsIDIwNDU4LCAyMDQ2MCwgMjA0NjQsIDIwNDY4LCAyMDQ3MywgMjA0NzgsIDIwNDgyLCAKKyAgICAyMDQ4NiwgMjA0ODksIDIwNDkzLCAyMDQ5NiwgMjA1MDAsIDIwNTAzLCAyMDUwNiwgMjA1MTAsIDIwNTE2LCAyMDUyMCwgCisgICAgMjA1MjQsIDIwNTI4LCAyMDUzMywgMjA1MzgsIDIwNTQzLCAyMDU0NywgMjA1NTAsIDIwNTU1LCAyMDU2MSwgMjA1NjYsIAorICAgIDIwNTcyLCAyMDU3NywgMjA1ODEsIDIwNTg1LCAyMDU4OSwgMjA1OTQsIDIwNTk4LCAyMDYwMywgMjA2MDcsIDIwNjE0LCAKKyAgICAyMDYxOCwgMjA2MjEsIDIwNjI1LCAyMDYzMSwgMjA2MzcsIDIwNjQxLCAyMDY0NSwgMjA2NTAsIDIwNjU3LCAyMDY2MywgCisgICAgMjA2NjcsIDIwNjc2LCAyMDY4MCwgMjA2ODQsIDIwNjg3LCAyMDY5MywgMjA2OTgsIDIwNzA0LCAxNDcxLCAxNzczLCAKKyAgICAyMDcwOSwgMjA3MTQsIDIwNzE5LCAyMDcyNCwgMjA3MjksIDIwNzM0LCAyMDczOSwgMjE1NywgMjA3NDQsIDIwNzQ1LCAKKyAgICAyMDc0OCwgMjA3NTIsIDIwNzU2LCAyMDc2MSwgMjA3NjUsIDIwNzY5LCAyMDc3MiwgMjA3NzcsIDIwNzgyLCAyMDc4NiwgCisgICAgMjA3ODksIDIwNzk0LCAyMDc5OCwgMjA4MDMsIDIwODA3LCAxMTcxNCwgMjA4MTIsIDIwODE1LCAyMDgxOCwgMjA4MjIsIAorICAgIDIwODI2LCAyMDgzNSwgMjA4NDIsIDIwODQ3LCAyMDg1NCwgMjA4NTgsIDIwODYyLCAyMDg2NywgMjA4NzIsIDIwODc2LCAKKyAgICAyMDg4MSwgMjA4OTMsIDIwOTA0LCAyMDkwOSwgMjA5MTMsIDIwOTE4LCAyMDkyMiwgMjA5MjUsIDIwOTMxLCA1ODk0LCAKKyAgICAyMjUyLCAyMDkzNSwgMjA5NTEsIDcyNzAsIDIwOTcxLCAyMDk4MCwgMjA5OTYsIDIxMDAwLCAyMTAwMywgMjEwMDksIAorICAgIDIxMDE5LCAyMTAyNSwgMjEwNDAsIDIxMDUyLCAyMTA2MywgMjEwNzEsIDIxMDgwLCAyMTA4NiwgMjEwOTUsIDIxMTA1LCAKKyAgICAyMTExNiwgMjExMjcsIDIxMTM2LCAyMTE0NSwgMjExNTMsIDIxMTYwLCAyMTE2OCwgMjExODEsIDIxMTg3LCAyMTE5MiwgCisgICAgMjExOTgsIDIxMjAzLCAyMTIxMSwgMjEyMjMsIDIxMjM1LCAyMTI0OSwgMjEyNTcsIDIxMjY0LCAyMTI3MywgMjEyODIsIAorICAgIDIxMjkwLCAyMTI5OCwgMjEzMDYsIDIxMzEzLCAyMTMyMiwgMjEzMzAsIDIxMzQwLCAyMTM0OSwgMjEzNTksIDIxMzY4LCAKKyAgICAyMTM3NywgMjEzODUsIDIxMzkwLCAyMTM5NCwgMjEzOTcsIDIxNDAxLCAyMTQwNSwgMjE0MDksIDIxNDEzLCAyMTQxNywgCisgICAgMjE0MjMsIDIxNDI5LCAxMTc1OSwgMjE0MzQsIDIxNDQ2LCAyMTQ1MiwgNzYyMywgMjE0NjMsIDIxNDczLCAyMTQ4MiwgCisgICAgMjE0ODYsIDIxNDg5LCAyMTQ5MywgMjE0OTksIDIxNTAzLCAyMTUwOCwgMjE1MTcsIDIxNTI0LCA1OTM1LCAyMTUzMSwgCisgICAgMjE1MzksIDIxNTQ2LCAyMTU1MiwgMjE1NTcsIDIxNTYzLCAyMTU2OSwgMjE1NzcsIDIxNTgxLCAyMTU4NCwgMjE1ODYsIAorICAgIDIxNDAyLCAyMTU5NSwgMjE2MDEsIDIxNjExLCAyMTYxNiwgMjE2MjIsIDIxNjI3LCAyMTYzMiwgMjE2MzcsIDIxNjQ0LCAKKyAgICAyMTY1MywgMjE2NjIsIDIxNjY4LCAyMTY3MywgMjE2NzksIDIxNjg0LCAyMTY5MSwgMjE3MDIsIDIxNzA3LCAyMTcxMSwgCisgICAgMjE3MjEsIDIxNzI1LCAyMTczMCwgMjE3NDAsIDIxNzQ5LCAyMTc1MywgMjE3NjEsIDIxNzY4LCAyMTc3NCwgMjE3NzksIAorICAgIDIxNzg2LCAyMTc5MCwgMTAzMjMsIDIxNzk4LCAyMTgwNSwgMjE4MTIsIDE4MjA0LCAyMTMyNywgMjE4MTcsIDIxODIxLCAKKyAgICAxODk1MiwgMjE4MjYsIDIxODQwLCAyMTg1NiwgMjE4NzQsIDIxODkzLCAyMTkxMCwgMjE5MjgsIDE4OTcxLCAyMTk0NSwgCisgICAgMjE5NjUsIDE4OTg4LCAyMTk3NywgMjE5ODksIDEyNDQzLCAyMjAwMSwgMTkwMDgsIDIyMDE1LCAyMjAyNywgODEyOSwgCisgICAgMjIwNDEsIDIyMDQ2LCAyMjA1MSwgMjIwNTcsIDIyMDYxLCAyMjA2NiwgMjIwNzYsIDIyMDgyLCA3OTk0LCAyMjA4OCwgCisgICAgMjIwOTAsIDIyMDk1LCAyMjEwMywgMjIxMDcsIDIxNjQwLCAyMjExMywgMjIxMjAsIDIyMTMwLCAyMjEzNSwgMjIxMzksIAorICAgIDIyMTQyLCAyMjE0OCwgMjIxNTYsIDIyMTY2LCAyMjE4MiwgMjIxOTUsIDIyMjA5LCAxMjQ2MSwgMjIyMjMsIDIyMjMwLCAKKyAgICAyMjIzNCwgMjIyMzcsIDIyMjQyLCAyMjI0NiwgMjIyNTYsIDIyMjYxLCAyMjI2NiwgMjIyNzEsIDIyMjc5LCAyMjI4NywgCisgICAgMjIyOTYsIDIyMzAxLCAxMjQ2NiwgMjIzMDUsIDIyMzA4LCAyMjMxMSwgMjIzMTYsIDIyMzMyLCAyMjM0MCwgMjIzNDgsIAorICAgIDIyMzU2LCAyMjM2MSwgMjIzNjUsIDIyMzcxLCAyMjM3NywgMjIzODAsIDIyMzg2LCAyMjM5OCwgMjI0MDUsIDIyNDExLCAKKyAgICAyMjQxOCwgMjI0MzIsIDIyNDQ1LCAyMjQ1NCwgMjI0NjYsIDIyNDc3LCAyMjQ4NiwgMjI0OTUsIDIyNTAzLCAyMjUxNCwgCisgICAgNTkxNywgMjI1MjEsIDIyNTI3LCAyMjUzMiwgMjI1MzgsIDIyNTQ4LCAyMjU1NywgMjI1NjMsIDIyNTY4LCAyMjU3NSwgCisgICAgMjI1ODMsIDIyNTk1LCAyMjYwMiwgMjI2MTEsIDIyNjE5LCAyMjYyNSwgMjI2MzEsIDIyNjM2LCAyMjY0MCwgMjI2NDMsIAorICAgIDIyNjQ5LCAyMjY1NCwgMjI2NTgsIDIyNjY5LCAyMjY3OCwgMjI2ODYsIDIyNjkxLCAyMjY5NywgMTA5MjEsIDY1ODEsIAorICAgIDIyNzAyLCAyMjcwNSwgMjI3MDgsIDIyNzE0LCAyMjcyMiwgMjI3MzAsIDIyNzM0LCAyMjczOCwgMjI3NDMsIDIyNzQ2LCAKKyAgICAyMjc1NSwgMjI3NjMsIDIyNzc0LCAyMjc3OCwgMjI3ODQsIDIyNzkwLCAyMjc5NCwgMjI4MDAsIDIyODIyLCAyMjg0NiwgCisgICAgMjI4NTMsIDIyODU5LCAyMjg3MCwgMjI4ODgsIDIyODk1LCAyMjkwMywgMjI5MDcsIDIyOTE2LCAyMjkyOSwgMjI5MzcsIAorICAgIDIyOTQ5LCAyMjk2MCwgMjI5NzAsIDIyOTg0LCAyMjk5MywgMjMwMDEsIDIzMDEzLCA3Mjg3LCAyMzAyNCwgMjMwMzUsIAorICAgIDIzMDQ3LCAyMzA1NywgMjMwNjYsIDIzMDcxLCAyMzA3NSwgMjMwODMsIDIzMDg4LCAyMzA5MiwgMjMwOTUsIDIzMDk4LCAKKyAgICAyMzEwNiwgMjMxMTQsIDIzMTIzLCAyMzEzMywgMjMxNDIsIDIzMTQ4LCAyMzE2MiwgMjU1NiwgMjMxODQsIDIzMTkzLCAKKyAgICAyMzIwMywgMjMyMTUsIDIzMjI1LCAyMzIzMywgMjMyNDEsIDIzMjUwLCAyMzI1NSwgMjMyNjYsIDIzMjc3LCAyMzI4MSwgCisgICAgMjMyOTEsIDIzMzAwLCAyMzMxMCwgMjMzMjAsIDIzMzI4LCAyMzMzNywgMjMzNDQsIDIzMzUyLCAyMzM1OSwgMjMzNjgsIAorICAgIDIzMzcyLCAyMzM4MCwgMjMzODcsIDIzMzk0LCAyMzQwNSwgMjM0MjAsIDIzNDI3LCAyMzQzNywgMjM0NDYsIDIzNDUyLCAKKyAgICAxMTA1NCwgMjM0NTksIDIzNDY0LCAyMzQ2OCwgMjM0NzIsIDIzNDgwLCAyMzQ4NiwgMjM0OTUsIDIzNTAwLCAyMzUxMCwgCisgICAgMTk1MTcsIDIzNTE0LCAyMzUxNywgMjM1MjIsIDIzNTI3LCAyMzUzMiwgMjM1MzcsIDIzNTQyLCAyMzU0NywgMjM1NTIsIAorICAgIDIzNTU3LCAyMzU2MywgMjM1NjgsIDIzNTczLCAyMzU3OSwgMTI0MiwgNjM5LCAyMzU4NCwgMjM1OTMsIDIzMDAsIDIzNjAwLCAKKyAgICAyMzYwNSwgMjM2MDksIDIzNjE1LCAxMjc1LCA1MDYsIDM0MywgMjM2MjAsIDIzNjI5LCAyMzYzNywgMjM2NDYsIDIzNjU0LCAKKyAgICAyMzY2NSwgMjM2NzQsIDIzNjgyLCAyMzY4NiwgMjM2ODksIDIzNjk3LCAyMzcwNSwgMTE3MjcsIDIzNzEwLCAyMzcxNiwgCisgICAgNDEwMSwgMjM3MjEsIDIzNzI1LCAyMzczMSwgMjM3MzUsIDIzNzQyLCAxNDM3LCAyMzc0OCwgNzM1NSwgMjM3NTUsIDIzNzY1LCAKKyAgICAyMzc3MywgMjM3NzksIDIzNzg4LCAyMzc5NiwgMjM4MDIsIDIzODEwLCAyMzgxNywgMjM4MjQsIDE0NzgsIDIzMzgsIAorICAgIDIzODMxLCAyMzgzNywgMjM4NDgsIDIzODU5LCAyMzg2NywgMjM4NzQsIDIzODgzLCAyMzg5MSwgMjM4OTgsIDIzOTA1LCAKKyAgICAyMzkxOCwgMjM5MjksIDIzOTQ4LCAxMjgwLCAyMzk1MiwgMjM5NTcsIDIzOTY1LCAzMzg3LCAyMzk2OSwgMjM5NzQsIDE0NDEsIAorICAgIDIwNDg3LCAyMzk4NCwgMjM5ODgsIDIzOTkzLCAyMzk5NywgMzMzMywgMjQwMDMsIDI0MDExLCAyNDAxOCwgMjQwMjYsIAorICAgIDMzODgsIDI2MCwgMjQwMzEsIDI0MDM5LCAyNDA0NywgMjQwNTQsIDI0MDYwLCAyNDA2NSwgMjQwNzIsIDI0MDc1LCAyNDA4MSwgCisgICAgMjE1MDQsIDI0MDg3LCAxMDYsIDI0MDkxLCAyNDA5NSwgMjQxMDEsIDI0MTA2LCAyNDExMywgMjQxMTksIDIyNjMsIDI0MTIzLCAKKyAgICAyNDEyNywgMjQxMzAsIDI0MTMzLCAyNDE0MCwgMjQxNDYsIDE4NTAwLCAyNDE1MSwgMzQzMiwgMTMxNzUsIDI0MTU1LCAKKyAgICAyNDE1OCwgMjQxNjYsIDI0MTY5LCAyNDE3OSwgMjQxOTEsIDI0MTk2LCAyNDIwMCwgMjQyMDgsIDI0MjE1LCAyNDIyMSwgCisgICAgMjQyMjgsIDI0MjM1LCAyNDIzOCwgMjQyNDIsIDI0MjQ2LCAxNDQ1LCAyNDI1NiwgMjQyNTgsIDI0MjYzLCAyNDI2OSwgCisgICAgMjQyNzUsIDI0MjgwLCAyNDI4NSwgMjQyOTAsIDI0Mjk1LCAyNDMwMCwgMjQzMDUsIDI0MzEwLCAyNDMxNSwgMjQzMjAsIAorICAgIDI0MzI1LCAyNDMzMCwgMjQzMzUsIDI0MzQwLCAyNDM0NSwgMjQzNTEsIDI0MzU3LCAyNDM2MywgMjQzNjksIDI0Mzc0LCAKKyAgICAyNDM3OSwgMjQzODQsIDI0MzkwLCAyNDM5NSwgMjQ0MDAsIDI0NDA1LCAyNDQxMSwgMjQ0MTYsIDI0NDIyLCAyNDQyNywgCisgICAgMjQ0MzIsIDI0NDM3LCAyNDQ0MiwgMjQ0NDgsIDI0NDUzLCAyNDQ1OSwgMjQ0NjQsIDI0NDY5LCAyNDQ3NCwgMjQ0NzksIAorICAgIDI0NDg1LCAyNDQ5MCwgMjQ0OTYsIDI0NTAxLCAyNDUwNiwgMjQ1MTEsIDI0NTE2LCAyNDUyMSwgMjQ1MjYsIDI0NTMxLCAKKyAgICAyNDUzNiwgMjQ1NDEsIDI0NTQ3LCAyNDU1MywgMjQ1NTksIDI0NTY0LCAyNDU2OSwgMjQ1NzQsIDI0NTc5LCAyNDU4NSwgCisgICAgMjQ1OTEsIDI0NTk3LCAyNDYwMywgMjQ2MDksIDI0NjE1LCAyNDYyMCwgMjQ2MjYsIDI0NjMxLCAyNDYzNiwgMjQ2NDEsIAorICAgIDI0NjQ2LCAyNDY1MiwgMjM3NiwgMjQ2NTcsIDIzODMsIDIzOTAsIDI2NDcsIDI0NjYyLCAyMzk2LCAyNDA2LCAyNDY2OCwgCisgICAgMjQ2NzIsIDI0Njc3LCAyNDY4MiwgMjQ2ODgsIDI0NjkzLCAyNDY5OCwgMjQ3MDIsIDI0NzA3LCAyNDcxMywgMjQ3MTgsIAorICAgIDI0NzIzLCAyNDcyOSwgMjQ3MzQsIDI0NzM4LCAyNDc0MywgMjQ3NDgsIDI0NzUzLCAyNDc1OCwgMjQ3NjMsIDI0NzY5LCAKKyAgICAyNDc3NSwgMjQ3ODAsIDI0Nzg0LCAyNDc4OSwgMjQ3OTMsIDI0Nzk4LCAyNDgwMywgMjQ4MDgsIDI0ODEyLCAyNDgxNywgCisgICAgMjQ4MjIsIDI0ODI3LCAyNDgzMiwgMjQ4MzgsIDI0ODQ0LCAyNDg0OSwgMjQ4NTMsIDI0ODU4LCAyNDg2MywgMjQ4NjgsIAorICAgIDI0ODczLCAyNDg3OCwgMjQ4ODIsIDI0ODg3LCAyNDg5MiwgMjQ4OTcsIDI0OTAxLCAyNDkwNiwgMjQ5MTQsIDI0OTIwLCAKKyAgICAyNDkyNiwgMjQ5MzIsIDI0OTM3LCAyNDk0MSwgMjQ5NDQsIDI0OTQ4LCAyNDk1MywgMjQ5NTcsIDI0OTYyLCAyNDk2NiwgCisgICAgMjQ5NjksIDI0OTc0LCAxNzU3OCwgMjM3NTIsIDI0OTc5LCAyNDk4NCwgMjQ5ODgsIDI0OTkzLCAyNDk5NywgMjUwMDEsIAorICAgIDI1MDA2LCAyNTAxMCwgMjUwMTMsIDI1MDE2LCAyNTAyMCwgMjUwMjUsIDI1MDMzLCAyNTAzNywgMjUwNDIsIDI1MDQ2LCAKKyAgICAyNTA1MCwgMjUwNTUsIDI1MDYwLCAyNTA2NCwgMjUwNzAsIDI1MDc1LCAyNTA4MCwgMjUwODcsIDI1MDk0LCAyNTA5OCwgCisgICAgMjUxMDEsIDI1MTA3LCAyNTExNiwgMjUxMjMsIDI1MTMwLCAyNTEzNCwgMjUxMzksIDI1MTQzLCAyNTE0OSwgMjUxNTUsIAorICAgIDI1MTU5LCAyNTE2NSwgMjUxNzAsIDI1MTc1LCAyNTE4MiwgMjUxODgsIDI1MTk0LCAyNTIwMCwgMjUyMDYsIDI1MjEzLCAKKyAgICAyNTIxOSwgMjUyMjUsIDI1MjMxLCAyNTIzNywgMjUyNDMsIDI1MjQ5LCAyNTI1NSwgMjUyNjIsIDI1MjY4LCAyNTI3NSwgCisgICAgMjUyODEsIDI1Mjg3LCAyNTI5MywgMjUyOTksIDI1MzA1LCAyNTMxMSwgMjUzMTcsIDI1MzIzLCAyNTMyOSwgODkxNywgCisgICAgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMTI3MTYsIDI1MzUwLCAyNTM1NSwgMjUzNjAsIDI1MzY2LCAyNTM3MSwgMjUzNzYsIAorICAgIDI1MzgwLCAyNTM4NSwgMjUzOTAsIDI1Mzk2LCAyNTQwMSwgMjU0MDYsIDI1NDEwLCAyNTQxNSwgMjU0MjAsIDI1NDI0LCAKKyAgICAyNTQyOSwgMjU0MzQsIDI1NDM5LCAyNTQ0MywgMjU0NDgsIDI1NDUzLCAyNTQ1OCwgMjU0NjIsIDI1NDY2LCAxMjA2MCwgCisgICAgMjU0NzAsIDI1NDc5LCAyNTQ4NSwgMjU0OTEsIDI1NTAwLCAyNTUwOCwgMjU1MTMsIDI1NTE3LCAyNTUyNCwgMjU1MzAsIAorICAgIDI1NTM0LCAyNTUzOSwgMjU1NDgsIDI1NTUzLCAxNDc3LCAyNTU1OSwgMjU1NjIsIDI1NTY2LCAxODU0MSwgMTg1NDcsIAorICAgIDI1NTcyLCAyNTU3NiwgMjU1ODcsIDI1NTk4LCAyNTYxMCwgMjU2MTcsIDI1NjI0LCAyNTYyOSwgMjU2MzMsIDE3MjM1LCAKKyAgICA2ODUsIDE3NTc3LCAyNTY0MSwgMjU2NDUsIDI1NjUwLCAyNTY1NiwgMjU2NjEsIDI1NjY3LCAyNTY3MiwgMjU2NzgsIAorICAgIDI1NjgzLCA4MDIyLCAyNzE0LCAzMjgyLCAyNTY4NywgMjU2OTAsIDI1Njk2LCAyNTcwMiwgMjU3MDgsIDI1NzE1LCAyNTcyMSwgCisgICAgMjU3MjcsIDI1NzMzLCAyNTczOSwgMjU3NDUsIDI1NzUxLCAyNTc1NywgMjU3NjMsIDI1NzY5LCAyNTc3NSwgMjU3ODEsIAorICAgIDI1Nzg3LCAyNTc5NCwgMjU4MDAsIDI1ODA2LCAyNTgxMiwgMjU4MTgsIDI1ODI0LCAyNTgyNywgMjU4MzIsIDI1ODM3LCAKKyAgICAyNTg0MywgMjU4NDgsIDI1ODUzLCAyNTg1NywgMjU4NjIsIDI1ODY4LCAyNTg3MywgMjU4NzgsIDI1ODg0LCAyNTg4OSwgCisgICAgMjU4OTUsIDI1ODk5LCAyNTkwNCwgMjU5MDksIDI1OTE0LCAyNTkxOSwgMjU5MjMsIDI1OTI4LCAyNTkzMywgMjU5MzgsIAorICAgIDI1OTQ0LCAyNTk1MCwgMjU5NTYsIDI1OTYxLCAyNTk2NSwgMjU5NzAsIDI1OTc0LCAyNTk4MiwgMzQ1NSwgMjU5ODgsIAorICAgIDI1OTkxLCA1OTc2LCAyNTk5NSwgMjYwMDEsIDI2MDA4LCA1OTg1LCAyNjAxMiwgMjYwMTgsIDI2MDI1LCAyNjAzMSwgCisgICAgMjYwNDAsIDI2MDQ4LCAyNjA1MiwgMjYwNTksIDI2MDY1LCAyNjA2OSwgMjYwNzIsIDI2MDgxLCAyNjA4OSwgMjYwOTMsIAorICAgIDI2MTAzLCAyNjExMywgMjYxMjMsIDI2MTI5LCAyNjEzOSwgMjYxNDQsIDI2MTU3LCAyNjE3MSwgMjYxODIsIDI2MTk0LCAKKyAgICAyNjIwNiwgMjYyMjAsIDI2MjMzLCAyNjI0NSwgMjYyNTcsIDExNTYxLCAyNjI3MSwgMjYyNzYsIDI2MjgxLCAyNjI4NSwgCisgICAgMjYyODksIDI2MjkzLCAxNzYyLCAyMjQ3NSwgMjYyOTcsIDI2MzAyLCAyNjMwNywgMjYzMTEsIDI2MzE0LCAyNjMxOSwgCisgICAgMjYzMjQsIDI2MzMwLCAyNjMzNiwgNzc2NywgMTIzOTUsIDI2MzQxLCAyNjM0NiwgMjYzNTEsIDI2MzU1LCAyNjM2MCwgCisgICAgMjU2NTEsIDI2MzY1LCAyNjM3MCwgMjYzNzYsIDI1NjU3LCAyNjM4MSwgMjYzODQsIDI2MzkyLCAyNTY2MiwgMjYzOTcsIAorICAgIDI2NDAzLCAyNjQwOSwgMjU2NjgsIDI2NDE0LCAyNjQxOSwgMjY0MjUsIDI2NDMwLCAyNjQzNSwgMjY0NDEsIDI2NDQ3LCAKKyAgICAyMzEyOCwgMjY0NTIsIDI2NDU2LCAyNjQ2MSwgMjY0NjYsIDI2NDcxLCAyNjQ3OSwgMjY0ODMsIDI2NDg4LCAyNjQ5MywgCisgICAgMjY0OTcsIDI2NTAyLCAyNjUwNywgMjY1MTIsIDI1NjczLCAyNTY3OSwgMjY1MTgsIDI0NTIsIDIzNCwgMjY1MjEsIDI2NTI0LCAKKyAgICAyNjUyOCwgMjY1MzIsIDI2NTQwLCAyNjU0NywgMjY1NTQsIDI2NTU4LCAyNjU2MSwgMjY1NjcsIDI2NTc1LCAyNjU4MywgCisgICAgMjY1ODcsIDI2NTkxLCAyNjU5NCwgMjY2MDEsIDI2NjA1LCAyNjYxMiwgMjY2MjAsIDI2NjI4LCAyNjYzNSwgMjY2MzksIAorICAgIDYzNSwgMjkyLCAyNjY1MSwgMjY2NTYsIDI2NjYxLCAyNjY2NywgMjY2NzIsIDM0NjYsIDI2Njc3LCAyNjY4MiwgMjY2ODcsIAorICAgIDI2NjkyLCAyNjY5NywgMTg2MjYsIDI2NzAyLCAyNjcwNywgMjY3MTIsIDI2NzE3LCAyNjcyMywgMjY3MjgsIDI2NzMyLCAKKyAgICAyNjczNywgMjY3NDIsIDI2NzQ3LCAyNjc1MSwgMjY3NTYsIDI2NzYxLCAyNjc2NiwgMTg0NjQsIDM0NzIsIDI2NzcxLCAKKyAgICAyNjc3NiwgMjY3ODEsIDI2Nzg3LCAyNjc5MiwgMjY3OTcsIDI2ODAxLCAyNjgwNiwgMjY4MTEsIDI2ODE3LCAyNjgyMiwgCisgICAgMjY4MjcsIDI2ODMxLCAyNjgzNiwgMjY4NDEsIDI2ODQ2LCAyNjg1MCwgMjY4NTUsIDI2ODYwLCAyNjg2NSwgMjY4NzEsIAorICAgIDI2ODc3LCAyNjg4MiwgMjY4ODYsIDI2ODkxLCAyNjg5NiwgMjY5MDEsIDI2OTA1LCAyNjkxMywgMjY5MTcsIDI2OTIzLCAKKyAgICAyNjkyNywgMjY5MzQsIDEzMDcwLCAyNjk0MCwgMjY5NDcsIDI2OTU1LCAyNjk2MiwgMjY5NjgsIDI2OTgwLCAyNjk4NiwgCisgICAgMjY2NiwgMjY5OTAsIDI2NTk2LCAyNjk5NCwgMjcwMDUsIDI3MDEwLCAyNzAxNSwgMjcwMjAsIDI3MDI0LCAyNzAyOSwgCisgICAgMTg1NTIsIDI3MDMzLCAxNzU5MSwgMjcwMzgsIDI3MDQzLCAyNzA0OSwgMjcwNTQsIDI3MDU4LCAyNzA2MiwgMjcwNjUsIAorICAgIDI3MDcxLCAyNzA4MiwgMjcwOTQsIDI3MDk5LCAyNzEwMywgMjcxMDYsIDMyMSwgMjcxMTAsIDI3MTE1LCAyNzEyMCwgCisgICAgMjcxMjUsIDI3MTMwLCAyNzEzNSwgMjcxNDEsIDI3MTQ2LCAyNzE1MSwgMjcxNTcsIDI3MTYyLCAyNzE2OCwgMjcxNzMsIAorICAgIDI3MTc5LCAyNzE4NCwgMjcxODksIDI3MTk0LCAyNzE5OSwgMjcyMDQsIDI3MjA5LCAyNzIxNCwgMjcyMTksIDI3MjI1LCAKKyAgICAyNzIzMCwgMjcyMzUsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIDI3MjU1LCAyNzI2MCwgMjcyNjYsIDI3MjcyLCAyNzI3NywgCisgICAgMjcyODIsIDI3Mjg3LCAyNzI5MiwgMjcyOTcsIDI3MzAyLCAyNzMwNywgMjczMTIsIDI3MzE3LCAyNzMyMiwgMjczMjcsIAorICAgIDI3MzMyLCAyNzMzNywgMjczNDIsIDI3MzQ3LCAyNzM1MiwgMjczNTcsIDI3MzYyLCAyNzM2OCwgMjYsIDI3MzczLCAyNzM3NywgCisgICAgMjczODEsIDI3Mzg5LCAyNzM5MywgMjczOTcsIDI3NDAwLCAyNzQwMywgMjc0MDgsIDI3NDEyLCAyNzQxNywgMjc0MjEsIAorICAgIDI3NDI2LCAyNzQzMCwgMjc0MzUsIDI3NDM5LCAyNzQ0MiwgMjc0NDQsIDI3NDQ3LCAyNzQ0OSwgMjc0NTMsIDI3NDY1LCAKKyAgICAyNzQ3NCwgMjc0NzgsIDI3NDg0LCAyNzQ4OSwgMjc0OTUsIDI3NTAwLCAyNzUwNSwgMjc1MDksIDI3NTE0LCAyNzUyMSwgCisgICAgMjc1MjYsIDI3NTMyLCAyNzUzNywgMjc1NDEsIDI3NTQ4LCAyMTMzNSwgMjEzNDUsIDI3NTUyLCAyNzU1NywgMjc1NjIsIAorICAgIDI3NTY3LCAyNzU3MSwgMjc1NzgsIDYwNzYsIDI3NTg0LCAyNzU5MywgMjc2MDEsIDI3NjE2LCAyNzYzMCwgMjc2MzgsIAorICAgIDI3NjQ5LCAyNzY1OCwgMjc2NjMsIDUyNDMsIDI3NjczLCAyNzY3OCwgMjc2ODIsIDI3Njg1LCAyNzY4OSwgMjc2OTMsIAorICAgIDI3NzAwLCAyNzcwNSwgNjgyMCwgMjc3MTUsIDI3NzE3LCAyNzcyMCwgMjc3MjQsIDI3NzI4LCAyNzczMywgMjc3MzksIAorICAgIDI3NzQ0LCAyNzc1MywgMjc3NTksIDI3NzY0LCAyNzc3MSwgMjc3NzUsIDI3NzgyLCAyNzc5NSwgMjc4MDMsIDI3ODA3LCAKKyAgICAyNzgxNywgMjc4MjIsIDI3ODI2LCAyNzgzMCwgMjc4MzYsIDI3ODQxLCAyNzg1MSwgMjc4NjAsIDI3ODcxLCAyNzg3OSwgCisgICAgMjc4OTAsIDI3ODk5LCAyNzkwMiwgMjc5MDYsIDI3OTE0LCAyNzkyMCwgMjc5MjgsIDI3OTM1LCAyNzk0MSwgMjM1MSwgCisgICAgMjc5NDUsIDI3OTQ3LCAyNzk1MiwgMjc5NTcsIDI3OTYwLCAyNzk2MiwgMjc5NjYsIDI3OTY5LCAyNzk3MywgMjc5NzcsIAorICAgIDI3OTgwLCAyNzk4NiwgMjc5OTYsIDI4MDAxLCAyODAwNywgMjgwMTEsIDI4MDE2LCAyODAyOSwgMjE2MDYsIDI4MDM1LCAKKyAgICAyODA0NCwgMTM4OTgsIDI2MTA5LCAyODA1MSwgMjgwNTYsIDI4MDYwLCAyODA2OCwgMjgwNzUsIDI4MDgwLCAyODA4NCwgCisgICAgMjgwODgsIDI4MDk2LCAyODEwMiwgMjgxMDgsIDI4MTEzLCAyODExNywgMjgxMjAsIDI4MTI1LCAyODEzOCwgMjgxNTQsIAorICAgIDE5MDc4LCAyODE3MSwgMjgxODMsIDI4MjAwLCAyODIxMiwgMjgyMjYsIDE5MDk1LCAxOTExNCwgMjgyMzgsIDI4MjUwLCAKKyAgICAyNTczLCAyODI2NCwgMjgyNjksIDI4Mjc0LCAyODI3OCwgMjgyODUsIDI4Mjk3LCAyODMwMywgMjgzMDYsIDI4MzExLCAKKyAgICAxODI0NCwgMjgzMTQsIDI4MzE4LCAyODMyMSwgMjgzMjYsIDI4MzMxLCAyODMzNywgMjgzNDIsIDI4MzQ3LCAyODM1MywgCisgICAgMjgzNTksIDI4MzY0LCAyODM2OCwgMjgzNzMsIDI4Mzc4LCAyODM4MywgMjgzODcsIDI4MzkwLCAyODM5NiwgMjg0MDEsIAorICAgIDI4NDA2LCAyODQxMSwgMjg0MTUsIDI4NDIwLCAyODQyNiwgMjg0MzEsIDI4NDM2LCAyODQ0MiwgMjg0NDcsIDI4NDUyLCAKKyAgICAyODQ1NywgMjg0NjIsIDI4NDY3LCAyODQ3MSwgMjg0NzQsIDI4NDgwLCAyODQ4NCwgMjg0OTIsIDI4NDk5LCAyODUwNywgCisgICAgMjg1MTcsIDI4NTIzLCAyODUyOSwgMjg1MzMsIDI4NTQyLCAyODU0NywgMjg1NTIsIDgwMzYsIDI4NTU3LCAyODU2NCwgCisgICAgMjg1NzAsIDI4NTc1LCAyODU4MSwgMjg1ODksIDI4NTk2LCAyODYwMCwgMjg2MDMsIDI4NjE0LCAyODYyMSwgMjg2MjcsIAorICAgIDI4NjM2LCAyODY0MCwgMjg2NDMsIDI4NjQ5LCAyODY1NiwgMjg2NjIsIDI4NjY4LCAyODY3NiwgMjQwNTUsIDI4NjgzLCAKKyAgICAyODY5MSwgMjg2OTcsIDI4NzAyLCAyODcwOCwgMjg3MTMsIDI4NzE5LCAyODcyMywgMjg3MzAsIDI4NzM2LCAyMTYxOSwgCisgICAgMjg3NDUsIDI4NzUwLCAyODc1OCwgMjg3NjYsIDczODMsIDQxMjAsIDI4NzczLCAyODc3NywgMjg3ODEsIDI4Nzg1LCAKKyAgICAyODc5MCwgMjg3OTQsIDI4Nzk4LCAyODgwMywgMjg4MDgsIDI4ODEyLCAxNzY0MCwgMjg4MTcsIDI4ODIxLCAyODgyNSwgCisgICAgMjg4MjksIDI4ODMyLCAyODgzNCwgMjg4MzksIDI4ODQ3LCAyODg1MSwgMjg4NTgsIDI4ODYyLCAyODg3MCwgMjg4NzcsIAorICAgIDI4ODg3LCAyODg5MSwgMjg4OTUsIDI4OTAzLCAyODkwOSwgMjg5MTgsIDEwNTcwLCAyODkyNCwgMjg5MzMsIDI4OTQwLCAKKyAgICAyODk0OCwgMjg5NTYsIDI4OTY0LCAyODk3MSwgMjg5NzgsIDI4OTg1LCAyODk5MiwgMjg5OTksIDI5MDA0LCAyOTAxMCwgCisgICAgMjkwMjcsIDI5MDM1LCAyOTA0MywgMjkwNTAsIDM4MCwgMjkwNTQsIDI5MDYwLCAyNzY1NCwgMjkwNjYsIDI5MDY5LCAKKyAgICAyOTA3NywgMjkwODMsIDI5MDg5LCAyOTA5OCwgMjkxMDQsIDM0MjAsIDEyMDQ2LCAyOTExMywgMjkxMjAsIDI5MTI1LCAKKyAgICAyOTEyOSwgMjkxMzYsIDI5MTQ0LCAyOTE1MywgMjkxNjMsIDI5MTY5LCAyOTE3NywgMjkxODYsIDI5MTk0LCAxODI0OCwgCisgICAgMjkyMDEsIDI5MjA4LCAyOTIxNCwgMjkyMjQsIDI5MjMzLCAyOTI0NCwgMjkyNDgsIDI5MjU0LCAyOTI1OSwgMjkyNjUsIAorICAgIDI5MjcxLCAyOTI3NiwgMjkyODksIDI5MzAyLCAyOTMxNSwgMjkzMjIsIDI5MzI4LCAyOTMzMywgMjkzMzcsIDE0NTEsIAorICAgIDI5MzQxLCAyOTM0NiwgMjkzNTEsIDI5MzU2LCAyOTM2MSwgMjkzNjcsIDI5MzcyLCAyOTM3NywgMjkzODIsIDI5Mzg3LCAKKyAgICAyOTM5MiwgMjkzOTcsIDI5NDAyLCAyOTQwOCwgMjk0MTQsIDI5NDE5LCAyOTQyNCwgMjk0MzAsIDI5NDM1LCAyOTQ0MCwgCisgICAgMjk0NDUsIDI5NDUxLCAyOTQ1NiwgMjk0NjEsIDI5NDY2LCAyOTQ3MSwgMjk0NzcsIDI5NDgyLCAyOTQ4NywgMjk0OTMsIAorICAgIDI5NDk4LCAyOTUwMywgMjk1MDgsIDI5NTEzLCAyOTUxOCwgMjk1MjQsIDI5NTI5LCAyOTUzNSwgMjk1NDAsIDI5NTQ2LCAKKyAgICAyOTU1MSwgMjk1NTYsIDI5NTYxLCAyOTU2NywgMjk1NzMsIDI5NTc5LCAyOTU4NSwgMjk1OTEsIDI5NTk3LCAyOTYwMywgCisgICAgMjk2MDksIDI5NjE0LCAyOTYxOSwgMjk2MjUsIDI5NjMwLCAyOTYzNSwgMjk2NDAsIDI5NjQ1LCAyOTY1MCwgMjk2NTUsIAorICAgIDI5NjYwLCAyOTY2NiwgMjk2NzEsIDI5Njc2LCAyOTY4MiwgMjk2ODgsIDEwMSwgMjk2OTMsIDI5Njk1LCAyOTY5OSwgCisgICAgMjk3MDMsIDI5NzA3LCAyOTcxMiwgMjk3MTYsIDczMjMsIDI5NzIwLCAyOTcyNiwgNDMzMSwgMjk3MzIsIDI5NzM1LCAKKyAgICAyOTc0MCwgMjk3NDQsIDI5NzQ5LCAyOTc1MywgMjk3NTcsIDI5NzYyLCA3ODY5LCAyOTc2NiwgMjk3NzAsIDI5Nzc0LCAKKyAgICAxMjEzMSwgMjk3NzksIDI5NzgzLCAyOTc4OCwgMjk3OTMsIDI5Nzk4LCAyOTgwMiwgMjk4MDksIDIxNjIzLCAyOTgxNSwgCisgICAgMjk4MTgsIDI5ODIyLCAyOTgyNywgMjk4MzMsIDI5ODM3LCAyOTg0MywgMjk4NDgsIDI5ODUyLCAyOTg1NiwgMjk4NjAsIAorICAgIDMzMTcsIDMzMjIsIDI0MTk0LCAyOTg2MywgMjk4NzEsIDI5ODc4LCAyOTg4MiwgMjk4ODcsIDM0MiwgMjk4OTIsIDI5ODk4LCAKKyAgICAyOTkwNCwgMjk5MDgsIDI5OTE3LCAyOTkyMSwgMjk5MjUsIDI5OTMwLCAyOTkzNSwgMjk5MzksIDI5OTQ2LCAyOTk1MiwgCisgICAgMjk5NTcsIDI5OTcyLCAyOTk4NywgMzAwMDIsIDMwMDE4LCAzMDAzNiwgNzgzMSwgMzAwNTAsIDMwMDU1LCAzMDA1OSwgCisgICAgMzAwNjcsIDI3Nzg4LCAzMDA3NSwgMzAwNzksIDMwMDg4LCAzMDA5NiwgNzU0NiwgMTE4NDIsIDMwMTAwLCAzMDEwMywgCisgICAgMzAxMDYsIDYwODksIDM2MjEsIDMwMTExLCAzMDExOSwgMzAxMjMsIDMwMTI2LCAzMDEzMCwgMzAxMzUsIDMwMTQwLCAKKyAgICAzMDE0NiwgMzAxNTEsIDMwMTU1LCAzMDE1OSwgMzAxNjQsIDMwMTY4LCAzMDE3NCwgMzAxNzgsIDMwMTg1LCAzMDE4OSwgCisgICAgOTI1NiwgMzAxOTYsIDMwMjAyLCAzMDIwNywgMzAyMTQsIDMwMjIxLCAzMDIyOCwgMjM2NDEsIDYwMjAsIDMwMjM1LCAKKyAgICAzMDI0MiwgMzAyNDksIDMwMjU1LCAzMDI2MCwgMzAyNjcsIDMwMjc4LCAzMDI4NCwgMzAyODksIDMwMjk2LCAzMDMwMCwgCisgICAgMzAzMDQsIDMwMzE0LCAzMDMyNSwgMzAzMzEsIDMwMzM2LCAzMDM0MSwgMzAzNDYsIDMwMzUxLCAzMDM1NSwgMzAzNTksIAorICAgIDMwMzY1LCAyMjU1LCA3NjcsIDc4OTEsIDc4OTYsIDc5MDIsIDMwMzc0LCA3OTA3LCA3OTEyLCA3OTE4LCAzMDM3OSwgCisgICAgMzAzODksIDMwMzkzLCA3OTIzLCAzMDM5OCwgMzA0MDEsIDMwNDA2LCAzMDQxMCwgMzA0MTUsIDMwNDIyLCAzMDQyOCwgCisgICAgMzA0MzgsIDQxNDYsIDMwNDQ3LCAzMDQ1MSwgMzA0NTUsIDMwNDY1LCAzMDQ3MSwgMzA0ODIsIDMwNDg4LCAzMDQ5NCwgCisgICAgMzA0OTksIDMwNTA1LCAzMDUxMSwgMzA1MTYsIDMwNTE5LCAzMDUyNiwgMzA1MzIsIDMwNTM3LCAzMDU0NCwgMzA1NTEsIAorICAgIDMwNTU1LCAzMDU2NSwgMzA1NzgsIDMwNTg3LCAzMDU5NiwgMzA2MDcsIDMwNjIwLCAzMDYyOSwgMzA2NDAsIDMwNjQ1LCAKKyAgICAzMDY1MCwgNzkyOCwgMzA2NTYsIDMwNjY0LCAzMDY2OSwgNTA5NCwgMjEsIDMwNjc2LCAzMDY4MSwgMTMyODQsIDMwNjg1LCAKKyAgICAzMDY4OCwgMzA2OTEsIDIzMjE5LCAzMDY5NSwgMjM2NTAsIDMwNzAzLCAzMDcwNywgMzA3MTAsIDMwNzE2LCAzMDcyMiwgCisgICAgMzA3MzAsIDMwNzM2LCAzMDc0MywgMzA3NDcsIDMwNzUxLCAyMzM4MywgMzA3NTUsIDMwNzY0LCAzMDc3MCwgMzA3NzUsIAorICAgIDMwNzc5LCAzMDc4NywgMjE2NjksIDMwNzkzLCAzMDgwMCwgMzA4MDYsIDMwODExLCAzMDgxNiwgMzA4MjAsIDMwODI2LCAKKyAgICAzMDgzMSwgMzA4MzcsIDM3NDcsIDcxNiwgMzA4NDQsIDMwODQ4LCAzMDg1MSwgMTIwNTQsIDMwODYzLCAyOTE4MiwgMzA4NzQsIAorICAgIDMwODc3LCAzMDg4NCwgMzA4OTAsIDMwODk0LCAzMDkwMCwgMzA5MDUsIDMwOTExLCAzMDkxNiwgMzA5MjEsIDMwOTI1LCAKKyAgICAzMDkzMCwgMzA5MzUsIDMwOTQ1LCAzMDk1MSwgMzA5NjQsIDMwOTcwLCAzMDk3NSwgMzA5ODEsIDEzMTkzLCAxNDU0LCA5MzIsIAorICAgIDI1NzcwLCAyNTc3NiwgMzA5ODYsIDI1NzgyLCAyNTc5NSwgMjU4MDEsIDI1ODA3LCAzMDk5MiwgMjU4MTMsIDI1ODE5LCAKKyAgICAzMDk5OCwgMzEwMDQsIDE0LCAzMTAxMiwgMzEwMTksIDMxMDIzLCAzMTAyNywgMzEwMzUsIDMxMDM5LCAzMTA0NCwgMzEwNDgsIAorICAgIDMxMDU1LCAzMTA2MCwgMzEwNjQsIDMxMDY5LCAzMTA3NSwgMzEwODAsIDMxMDg2LCAzMTA5MSwgMzEwOTUsIDMxMDk5LCAKKyAgICAzMTEwMywgMzExMDgsIDMxMTEyLCAzMTExNywgMzExMjEsIDMxMTI4LCAzMTEzMywgMzExMzcsIDMxMTQyLCAzMTE0NiwgCisgICAgMzExNTEsIDMxMTU1LCAzMTE2MCwgMTIyMTgsIDEyMjIzLCAzMTE2NSwgMzExNjksIDMxMTcyLCAzMTE3NiwgMzExODEsIAorICAgIDMxMTg1LCAzMTE5MSwgMzExOTgsIDMxMjAzLCAzMTIxMywgMzEyMTgsIDMxMjI2LCAzMTIzMCwgMzEyMzMsIDMxMjM3LCAKKyAgICAzMTI0MiwgMzEyNDcsIDMxMjUxLCAzMTI1NiwgMTA1ODEsIDMxMjY3LCAzMTI3MSwgMzEyNzQsIDMxMjc4LCAzMTI4MiwgCisgICAgMzEyODUsIDMxMjg5LCA2MTA4LCAxMDU5NywgMzEyOTIsIDMxMjk1LCAzMTMwMCwgMzEzMDQsIDMxMzEzLCAzMTMyOSwgCisgICAgMzEzNDUsIDMxMzU1LCAyMzEzOCwgMzEzNjIsIDMxMzY2LCAzMTM3MSwgMzEzNzUsIDMxMzc5LCAzMTM4NCwgMzEzODksIAorICAgIDMxMzkzLCAzMTM5OCwgMzE0MDIsIDMxNDA2LCAyMjMyMywgMzE0MTIsIDE3NzAyLCAzMTQxNywgMzE0MjQsIDMxNDMyLCAKKyAgICAzMTQzOCwgMzE0NDUsIDMxNDUzLCAzMTQ1OSwgMzE0NjMsIDMxNDY5LCAzMTQ3NywgMzE0ODEsIDMxNDkwLCA3MzA0LCAKKyAgICAzMTQ5OCwgMzE1MDIsIDMxNTEwLCAzMTUxNywgMzE1MjIsIDMxNTI2LCAzMTUyOSwgMzE1MzMsIDMxNTM2LCAzMTU0MCwgCisgICAgMzE1NDcsIDMxNTUyLCAyMTgxNCwgMjU4MjUsIDMxNTU2LCAzMTU2MywgMzE1NjksIDMxNTc0LCAzMTU3NywgMzE1NzksIAorICAgIDMxNTg2LCAzMTU5MywgMzE1OTksIDMxNjAzLCAzMTYwNiwgMzE2MTAsIDMxNjE0LCAzMTYxOCwgMzE2MjMsIDMxNjI3LCAKKyAgICAzMTYzMSwgMzE2MzQsIDMxNjM4LCAzMTY1MiwgMTkxNDQsIDMxNjcxLCAzMTY4NCwgMzE2OTcsIDMxNzEwLCAxOTE2MiwgCisgICAgMzE3MjUsIDgwOTAsIDMxNzQwLCAzMTc0NiwgMzE3NTAsIDMxNzU0LCAzMTc2MSwgMzE3NjcsIDMxNzcyLCAzMTc3OCwgCisgICAgMzE3ODgsIDMxODAwLCAzMTgxMSwgMzE4MTYsIDMxODIzLCAzMTgyNywgMzE4MzAsIDEyNTg5LCAzMTgzOCwgMTIyMzksIAorICAgIDMxODUxLCAzMTg1NSwgMzE4NTksIDMxODY0LCAzMTg2OSwgMzE4NzMsIDMxODc3LCAzMTg4MCwgNTc1MCwgMjMwMjIsIAorICAgIDMxODg1LCAzMTg4OSwgMzE4OTUsIDMxOTA0LCAzMTkwOSwgMjkxNTksIDMxOTE1LCAzMTkyMCwgMzE5MjQsIDMxOTI5LCAKKyAgICAzMTkzNiwgMzE5NDAsIDMxOTQzLCAxMTUyNiwgMzE5NDgsIDMxOTU1LCA5MzksIDMxOTU5LCAzMTk2NCwgMzE5NjksIAorICAgIDMxOTc1LCAzMTk4MCwgMzE5ODUsIDMxOTg5LCAzMTk5NCwgMzIwMDAsIDMyMDA1LCAzMjAxMSwgMzIwMTYsIDMyMDIyLCAKKyAgICAzMjAzMiwgMzIwMzcsIDMyMDQyLCAzMjA0NiwgNTI0NSwgNTI1NywgMzIwNTEsIDMyMDU0LCAzMjA2MSwgMzIwNzAsIAorICAgIDMyMDc0LCAzMjA3NywgMzIwODEsIDMyMDg2LCA2NjgsIDMyMDkxLCAzMjA5NywgMjMyMTEsIDMyMTAzLCAzMjEwOCwgCisgICAgMzIxMTgsIDMyMTI3LCAzMjEzNCwgMzIxNDAsIDMyMTQ0LCAzMjE1MSwgMzIxNTcsIDMyMTY0LCAzMjE3MCwgMzIxODAsIAorICAgIDMyMTg4LCAzMjE5NCwgMzIyMDAsIDMyMjA1LCAzMjIwOSwgMzIyMTYsIDMyMjIyLCAzMjIyOSwgMzE2MTksIDU0OCwgMTIwOCwgCisgICAgMzIyMzUsIDMyMjQwLCAzMjI0MywgMzIyNDksIDMyMjU3LCAxMzgzLCAzMjI2MiwgMzIyNjYsIDMyMjcxLCAzMjI3OCwgCisgICAgMzIyODQsIDMyMjg4LCAzMjI5MywgMzIzMDIsIDMyMzA5LCAzMjMxOSwgMzIzMjUsIDIzMjM3LCAzMjM0MiwgMzIzNTEsIAorICAgIDMyMzU5LCAzMjM2NSwgMzIzNzAsIDMyMzc3LCAzMjM4MywgMzIzOTEsIDMyNDAwLCAzMjQwOCwgMzI0MTMsIDMyNDIxLCAKKyAgICAzMjQyNywgMzI0NDYsIDEyNTIyLCAzMjQ2MCwgMzI0NzYsIDMyNDkwLCAzMjQ5NiwgMzI1MDEsIDMyNTA2LCAzMjUxMSwgCisgICAgMzI1MTcsIDMyNTIyLCAzMjUyNiwgMzI1MzMsIDMyNTM4LCAzMjU0MiwgMzE5LCAyODA3LCAzMjU0OSwgMzI1NTQsIDIyNTc5LCAKKyAgICAzMjM4MCwgMzI1NTksIDMyNTY0LCAzMjU3MiwgMzI1NzYsIDMyNTc5LCAzMjU4NSwgMzI1ODksIDIzMjg3LCAzMjU5MiwgCisgICAgMzI1OTYsIDMyNTk5LCAzMjYwNCwgMzI2MDgsIDMyNjEzLCAzMjYxOCwgMzI2MjIsIDMyNjI3LCAzMjYzMSwgMTc1MTEsIAorICAgIDE3NTIyLCAzMjYzNSwgMzI2NDAsIDMyNjQ2LCAyMjI5MiwgMzI2NTEsIDMyNjU1LCAxMjcwMiwgMzI2NTgsIDMyNjYzLCAKKyAgICAzMjY2OCwgMzI2NzMsIDMyNjc4LCAzMjY4MywgMzI2ODgsIDMyNjkzLCA0NTMsIDQzLCAyNTgyOCwgMjU4MzMsIDI1ODM4LCAKKyAgICAyNTg0NCwgMjU4NDksIDI1ODU0LCAzMjY5OCwgMjU4NTgsIDMyNzAyLCAzMjcwNiwgMjU4NjMsIDI1ODY5LCAzMjcxMCwgCisgICAgMjU4NzQsIDI1ODc5LCAzMjcxOCwgMzI3MjMsIDI1ODg1LCAzMjcyOCwgMzI3MzMsIDMyNzM4LCAzMjc0MywgMzI3NDksIAorICAgIDMyNzU1LCAyNTg5NiwgMzI3NjgsIDMyNzc0LCAyNTkwMCwgMjU5MDUsIDMyNzc4LCAyNTkxMCwgMjU5MTUsIDMyNzgxLCAKKyAgICAzMjc4NiwgMzI3OTAsIDI1NTkxLCAzMjc5NiwgMTA3NDYsIDMyODAzLCAzMjgwOCwgMjU5MjAsIDMyODEyLCAzMjgxNywgCisgICAgMzI4MjIsIDMyODI3LCAzMjgzMSwgMzI4MzYsIDMyODQxLCAzMjg0NywgMzI4NTIsIDMyODU3LCAzMjg2MywgMzI4NjksIAorICAgIDMyODc0LCAzMjg3OCwgMzI4ODMsIDMyODg4LCAzMjg5MywgMzI4OTcsIDMyOTAyLCAzMjkwNywgMzI5MTIsIDMyOTE4LCAKKyAgICAzMjkyNCwgMzI5MzAsIDMyOTM1LCAzMjkzOSwgMzI5NDQsIDMyOTQ4LCAyNTkyNCwgMjU5MjksIDI1OTM0LCAzMjk1MiwgCisgICAgMzI5NTYsIDI1OTM5LCAyNTk0NSwgMjU5NTEsIDI1OTU3LCAzMjk2OCwgMjE1MjEsIDMyOTcyLCAzMjk3NiwgMzI5ODEsIAorICAgIDMyOTg2LCAzMjk5MSwgMzI5OTUsIDMyOTk5LCAzMzAwOSwgMzMwMTQsIDMzMDE5LCAzMzAyMywgMzMwMjcsIDMzMDMwLCAKKyAgICAzMzAzOCwgMjU5NjYsIDE0NjEsIDMzMDQzLCAzMzA1MSwgMzMwNjAsIDMzMDY0LCAzMzA3MiwgMzMwODAsIDMzMDk2LCAKKyAgICAzMzEwMSwgMTczMSwgOTM5OCwgMzMxMDUsIDI4NTMsIDMzMTE3LCAzMzExOCwgMzMxMjYsIDMzMTMzLCAzMzEzOCwgMzMxNDMsIAorICAgIDcxOTcsIDEwNDMsIDc5NTAsIDMzMTUwLCAzMzE1NSwgMzMxNTgsIDMzMTY3LCAxMjk0LCAzMzE3MiwgMzMxNzksIDMzMTgyLCAKKyAgICAzMzE4NywgMTg2MDAsIDI0ODUsIDMzMTkxLCA4MzEyLCAzMzIwMSwgMzMyMDcsIDIyNzMsIDIyODMsIDMzMjE2LCAzMzIyNSwgCisgICAgMjc5OTcsIDc5ODUsIDM1NjUsIDI5MDYzLCAxMjk5LCAzMzIzNSwgMzMyNDMsIDMzMjUwLCAzMzI1NSwgMzMyNTksIDMzMjYzLCAKKyAgICAxOTc1OSwgODAxMiwgMzMyNzEsIDMzMjgwLCAzMzI4OSwgMzMyOTcsIDMzMzA0LCAzMzMwOSwgMzMzMjIsIDMzMzM1LCAKKyAgICAzMzM0NywgMzMzNTksIDMzMzcxLCAzMzM4NCwgMzMzOTUsIDMzNDA2LCAzMzQxNCwgMzM0MjIsIDMzNDM0LCAzMzQ0NiwgCisgICAgMzM0NTcsIDMzNDY2LCAzMzQ3NCwgMzM0ODEsIDMzNDkzLCAzMzUwMCwgMzM1MDksIDMzNTE2LCAzMzUyOSwgMzM1MzksIAorICAgIDMzNTQ0LCAzMzU1MCwgMzM1NTUsIDMzNTU5LCAzMzU2NiwgMzM1NzAsIDMzNTc3LCAzMzU4NSwgMjQ1MSwgMzM1OTIsIAorICAgIDMzNjAzLCAzMzYxMywgMzM2MjIsIDMzNjMwLCAzMzY0MCwgMzM2NDgsIDMzNjU4LCAzMzY2MywgMzM2NjksIDMzNjgwLCAKKyAgICAzMzY5MCwgMzM2OTksIDMzNzA4LCAzMzcxOCwgMzM3MjcsIDMzNzMyLCAzMzczNywgMTY4NywgMzcsIDMzNzQ1LCAzMzc1MywgCisgICAgMzM3NjQsIDMzNzc1LCAzMzc4NSwgMzM3OTIsIDMzNzk4LCAzMzgwMywgMzM4MDcsIDMzODE4LCAzMzgyOCwgMzM4MzcsIAorICAgIDMzODQ4LCAxMzI1NywgMTMyNjIsIDMzODUzLCAzMzg2MiwgMzM4NjcsIDMzODc3LCAzMzg4MiwgMzM4OTAsIDMzODk4LCAKKyAgICAzMzkwNSwgMzM5MTEsIDgwNTcsIDEwMTgsIDMzOTE1LCAzMzkyMSwgMzM5MjYsIDMzOTI5LCAyMDk0LCAzMTg1NiwgMzM5MzcsIAorICAgIDMzOTQxLCAzMzk0NCwgMTQ5NCwgMzM5NTAsIDExMDE5LCAxMzA0LCAzMzk1NSwgMzM5NjgsIDMzOTgyLCAyNTM2LCAzNDAwMCwgCisgICAgMzQwMTIsIDM0MDI0LCAyNTUwLCAyNTY3LCAzNDAzOCwgMzQwNTEsIDI1ODIsIDM0MDY1LCAzNDA3NywgMjU5NywgMzQwOTEsIAorICAgIDEzMTAsIDEzMTYsIDEzMjIsIDgyMzcsIDM0MDk2LCAzNDEwMSwgMzQxMDYsIDM0MTEwLCAzNDEyNSwgMzQxNDAsIDM0MTU1LCAKKyAgICAzNDE3MCwgMzQxODUsIDM0MjAwLCAzNDIxNSwgMzQyMzAsIDM0MjQ1LCAzNDI2MCwgMzQyNzUsIDM0MjkwLCAzNDMwNSwgCisgICAgMzQzMjAsIDM0MzM1LCAzNDM1MCwgMzQzNjUsIDM0MzgwLCAzNDM5NSwgMzQ0MTAsIDM0NDI1LCAzNDQ0MCwgMzQ0NTUsIAorICAgIDM0NDcwLCAzNDQ4NSwgMzQ1MDAsIDM0NTE1LCAzNDUzMCwgMzQ1NDUsIDM0NTYwLCAzNDU3NSwgMzQ1OTAsIDM0NjA1LCAKKyAgICAzNDYyMCwgMzQ2MzUsIDM0NjUwLCAzNDY2NSwgMzQ2ODAsIDM0Njk1LCAzNDcxMCwgMzQ3MjUsIDM0NzQwLCAzNDc1NSwgCisgICAgMzQ3NzAsIDM0Nzg1LCAzNDgwMCwgMzQ4MTUsIDM0ODMwLCAzNDg0NSwgMzQ4NjAsIDM0ODc1LCAzNDg5MCwgMzQ5MDUsIAorICAgIDM0OTIwLCAzNDkzNSwgMzQ5NTAsIDM0OTY1LCAzNDk4MCwgMzQ5OTUsIDM1MDEwLCAzNTAyNSwgMzUwNDAsIDM1MDU1LCAKKyAgICAzNTA3MCwgMzUwODUsIDM1MTAwLCAzNTExNSwgMzUxMzAsIDM1MTQ1LCAzNTE2MCwgMzUxNzUsIDM1MTkwLCAzNTIwNSwgCisgICAgMzUyMjAsIDM1MjM1LCAzNTI1MCwgMzUyNjUsIDM1MjgwLCAzNTI5NSwgMzUzMTAsIDM1MzI1LCAzNTM0MCwgMzUzNTUsIAorICAgIDM1MzcwLCAzNTM4NSwgMzU0MDAsIDM1NDE1LCAzNTQzMCwgMzU0NDUsIDM1NDYwLCAzNTQ3NSwgMzU0OTAsIDM1NTA1LCAKKyAgICAzNTUyMCwgMzU1MzUsIDM1NTUwLCAzNTU2NSwgMzU1ODAsIDM1NTk1LCAzNTYxMCwgMzU2MjUsIDM1NjQwLCAzNTY1NSwgCisgICAgMzU2NzAsIDM1Njg1LCAzNTcwMCwgMzU3MTUsIDM1NzMwLCAzNTc0NSwgMzU3NjAsIDM1Nzc1LCAzNTc5MCwgMzU4MDUsIAorICAgIDM1ODIwLCAzNTgzNSwgMzU4NTAsIDM1ODY1LCAzNTg4MCwgMzU4OTUsIDM1OTEwLCAzNTkyNSwgMzU5NDAsIDM1OTU1LCAKKyAgICAzNTk3MCwgMzU5ODUsIDM2MDAwLCAzNjAxNSwgMzYwMzAsIDM2MDQ1LCAzNjA2MCwgMzYwNzUsIDM2MDkwLCAzNjEwNSwgCisgICAgMzYxMjAsIDM2MTM1LCAzNjE1MCwgMzYxNjUsIDM2MTgwLCAzNjE5NSwgMzYyMTAsIDM2MjI1LCAzNjI0MCwgMzYyNTUsIAorICAgIDM2MjcwLCAzNjI4NSwgMzYzMDAsIDM2MzE1LCAzNjMzMCwgMzYzNDUsIDM2MzYwLCAzNjM3NSwgMzYzOTAsIDM2NDA1LCAKKyAgICAzNjQyMCwgMzY0MzUsIDM2NDUwLCAzNjQ2NSwgMzY0ODAsIDM2NDk1LCAzNjUxMCwgMzY1MjUsIDM2NTQwLCAzNjU1NSwgCisgICAgMzY1NzAsIDM2NTg1LCAzNjYwMCwgMzY2MTUsIDM2NjMwLCAzNjY0NSwgMzY2NjAsIDM2Njc1LCAzNjY5MCwgMzY3MDUsIAorICAgIDM2NzIwLCAzNjczNSwgMzY3NTAsIDM2NzY1LCAzNjc4MCwgMzY3OTUsIDM2ODEwLCAzNjgyNSwgMzY4NDAsIDM2ODU1LCAKKyAgICAzNjg3MCwgMzY4ODUsIDM2OTAwLCAzNjkxNSwgMzY5MzAsIDM2OTQ1LCAzNjk2MCwgMzY5NzUsIDM2OTkwLCAzNzAwNSwgCisgICAgMzcwMjAsIDM3MDM1LCAzNzA1MCwgMzcwNjUsIDM3MDgwLCAzNzA5NSwgMzcxMTAsIDM3MTI1LCAzNzE0MCwgMzcxNTUsIAorICAgIDM3MTcwLCAzNzE4NSwgMzcyMDAsIDM3MjE1LCAzNzIzMCwgMzcyNDUsIDM3MjYwLCAzNzI3NSwgMzcyOTAsIDM3MzA1LCAKKyAgICAzNzMyMCwgMzczMzUsIDM3MzUwLCAzNzM2NSwgMzczODAsIDM3Mzk1LCAzNzQxMCwgMzc0MjUsIDM3NDQwLCAzNzQ1NSwgCisgICAgMzc0NzAsIDM3NDg1LCAzNzUwMCwgMzc1MTUsIDM3NTMwLCAzNzU0NSwgMzc1NjAsIDM3NTc1LCAzNzU5MCwgMzc2MDUsIAorICAgIDM3NjIwLCAzNzYzNSwgMzc2NTAsIDM3NjY1LCAzNzY4MCwgMzc2OTUsIDM3NzEwLCAzNzcyNSwgMzc3NDAsIDM3NzU1LCAKKyAgICAzNzc3MCwgMzc3ODUsIDM3ODAwLCAzNzgxNSwgMzc4MzAsIDM3ODQ1LCAzNzg2MCwgMzc4NzUsIDM3ODkwLCAzNzkwNSwgCisgICAgMzc5MjAsIDM3OTM1LCAzNzk1MCwgMzc5NjUsIDM3OTgwLCAzNzk5NSwgMzgwMTAsIDM4MDI1LCAzODA0MCwgMzgwNTUsIAorICAgIDM4MDcwLCAzODA4NSwgMzgxMDAsIDM4MTE1LCAzODEzMCwgMzgxNDUsIDM4MTYwLCAzODE3NSwgMzgxOTAsIDM4MjA1LCAKKyAgICAzODIyMCwgMzgyMzUsIDM4MjUwLCAzODI2NSwgMzgyODAsIDM4Mjk1LCAzODMxMCwgMzgzMjUsIDM4MzQwLCAzODM1NSwgCisgICAgMzgzNzAsIDM4Mzg1LCAzODQwMCwgMzg0MTUsIDM4NDMwLCAzODQ0NSwgMzg0NjAsIDM4NDc1LCAzODQ5MCwgMzg1MDUsIAorICAgIDM4NTIwLCAzODUzNSwgMzg1NTAsIDM4NTY1LCAzODU4MCwgMzg1OTUsIDM4NjEwLCAzODYyNSwgMzg2NDAsIDM4NjU1LCAKKyAgICAzODY3MCwgMzg2ODUsIDM4NzAwLCAzODcxNSwgMzg3MzAsIDM4NzQ1LCAzODc2MCwgMzg3NzUsIDM4NzkwLCAzODgwNSwgCisgICAgMzg4MjAsIDM4ODM1LCAzODg1MCwgMzg4NjUsIDM4ODgwLCAzODg5NSwgMzg5MTAsIDM4OTI1LCAzODk0MCwgMzg5NTUsIAorICAgIDM4OTcwLCAzODk4NSwgMzkwMDAsIDM5MDE1LCAzOTAzMCwgMzkwNDUsIDM5MDYwLCAzOTA3NSwgMzkwOTAsIDM5MTA1LCAKKyAgICAzOTEyMCwgMzkxMzUsIDM5MTUwLCAzOTE2NSwgMzkxODAsIDM5MTk1LCAzOTIxMCwgMzkyMjUsIDM5MjQwLCAzOTI1NSwgCisgICAgMzkyNzAsIDM5Mjg1LCAzOTMwMCwgMzkzMTUsIDM5MzMwLCAzOTM0NSwgMzkzNjAsIDM5Mzc1LCAzOTM5MCwgMzk0MDUsIAorICAgIDM5NDIwLCAzOTQzNSwgMzk0NTAsIDM5NDY1LCAzOTQ4MCwgMzk0OTUsIDM5NTEwLCAzOTUyNSwgMzk1NDAsIDM5NTU1LCAKKyAgICAzOTU3MCwgMzk1ODUsIDM5NjAwLCAzOTYxNSwgMzk2MzAsIDM5NjQ1LCAzOTY2MCwgMzk2NzUsIDM5NjkwLCAzOTcwNSwgCisgICAgMzk3MjAsIDM5NzM1LCAzOTc1MCwgMzk3NjUsIDM5NzgwLCAzOTc5NSwgMzk4MTAsIDM5ODI1LCAzOTg0MCwgMzk4NTUsIAorICAgIDM5ODcwLCAzOTg4NSwgMzk5MDAsIDM5OTE1LCAzOTkzMCwgMzk5NDUsIDM5OTYwLCAzOTk3NSwgMzk5OTAsIDQwMDA1LCAKKyAgICA0MDAyMCwgNDAwMzUsIDQwMDUwLCA0MDA2NSwgNDAwODAsIDQwMDk1LCA0MDExMCwgNDAxMjUsIDQwMTQwLCA0MDE1NSwgCisgICAgNDAxNzAsIDQwMTg1LCA0MDIwMCwgNDAyMTUsIDQwMjMwLCA0MDI0NSwgNDAyNjAsIDQwMjc1LCA0MDI5MCwgNDAzMDUsIAorICAgIDQwMzIwLCA0MDMzNSwgNDAzNTAsIDQwMzY1LCA0MDM4MCwgNDAzOTUsIDQwNDEwLCA0MDQyNSwgNDA0NDAsIDQwNDU1LCAKKyAgICA0MDQ3MCwgNDA0ODUsIDQwNTAwLCA0MDUxNSwgNDA1MzAsIDQwNTQ1LCA0MDU2MCwgNDA1NzUsIDQwNTkwLCA0MDYwNSwgCisgICAgNDA2MjAsIDQwNjM1LCA0MDY1MCwgNDA2NjUsIDQwNjgwLCA0MDY5NSwgNDA3MTAsIDQwNzI1LCA0MDc0MCwgNDA3NTUsIAorICAgIDQwNzcwLCA0MDc4NSwgNDA4MDAsIDQwODE1LCA0MDgzMCwgNDA4NDUsIDQwODYwLCA0MDg3NSwgNDA4OTAsIDQwOTA1LCAKKyAgICA0MDkyMCwgNDA5MzUsIDQwOTUwLCA0MDk2NSwgNDA5ODAsIDQwOTk1LCA0MTAxMCwgNDEwMjUsIDQxMDQwLCA0MTA1NSwgCisgICAgNDEwNzAsIDQxMDg1LCA0MTEwMCwgNDExMTUsIDQxMTMwLCA0MTE0NSwgNDExNjAsIDQxMTc1LCA0MTE5MCwgNDEyMDUsIAorICAgIDQxMjIwLCA0MTIzNSwgNDEyNTAsIDQxMjY1LCA0MTI4MCwgNDEyOTUsIDQxMzEwLCA0MTMyNSwgNDEzNDAsIDQxMzU1LCAKKyAgICA0MTM3MCwgNDEzODUsIDQxNDAwLCA0MTQxNSwgNDE0MzAsIDQxNDQ1LCA0MTQ2MCwgNDE0NzUsIDQxNDkwLCA0MTUwNSwgCisgICAgNDE1MjAsIDQxNTM1LCA0MTU1MCwgNDE1NjUsIDQxNTgwLCA0MTU5NSwgNDE2MTAsIDQxNjI1LCA0MTY0MCwgNDE2NTUsIAorICAgIDQxNjcwLCA0MTY4NSwgNDE3MDAsIDQxNzE1LCA0MTczMCwgNDE3NDUsIDQxNzYxLCA0MTc3NywgNDE3OTMsIDQxODA5LCAKKyAgICA0MTgyNSwgNDE4NDEsIDQxODU3LCA0MTg3MywgNDE4ODksIDQxOTA1LCA0MTkyMSwgNDE5MzcsIDQxOTUzLCA0MTk2OSwgCisgICAgNDE5ODUsIDQyMDAxLCA0MjAxNywgNDIwMzMsIDQyMDQ5LCA0MjA2NSwgNDIwODEsIDQyMDk3LCA0MjExMywgNDIxMjksIAorICAgIDQyMTQ1LCA0MjE2MSwgNDIxNzcsIDQyMTkzLCA0MjIwOSwgNDIyMjUsIDQyMjQxLCA0MjI1NywgNDIyNzMsIDQyMjg5LCAKKyAgICA0MjMwNSwgNDIzMjEsIDQyMzM3LCA0MjM1MywgNDIzNjksIDQyMzg1LCA0MjQwMSwgNDI0MTcsIDQyNDMzLCA0MjQ0OSwgCisgICAgNDI0NjUsIDQyNDgxLCA0MjQ5NywgNDI1MTMsIDQyNTI5LCA0MjU0NSwgNDI1NjEsIDQyNTc3LCA0MjU5MywgNDI2MDksIAorICAgIDQyNjI1LCA0MjY0MSwgNDI2NTcsIDQyNjczLCA0MjY4OSwgNDI3MDUsIDQyNzIxLCA0MjczNywgNDI3NTMsIDQyNzY5LCAKKyAgICA0Mjc4NSwgNDI4MDEsIDQyODE3LCA0MjgzMywgNDI4NDksIDQyODY1LCA0Mjg4MSwgNDI4OTcsIDQyOTEzLCA0MjkyOSwgCisgICAgNDI5NDUsIDQyOTYxLCA0Mjk3NywgNDI5OTMsIDQzMDA5LCA0MzAyNSwgNDMwNDEsIDQzMDU3LCA0MzA3MywgNDMwODksIAorICAgIDQzMTA1LCA0MzEyMSwgNDMxMzcsIDQzMTUzLCA0MzE2OSwgNDMxODUsIDQzMjAxLCA0MzIxNywgNDMyMzMsIDQzMjQ5LCAKKyAgICA0MzI2NSwgNDMyODEsIDQzMjk3LCA0MzMxMywgNDMzMjksIDQzMzQ1LCA0MzM2MSwgNDMzNzcsIDQzMzkzLCA0MzQwOSwgCisgICAgNDM0MjUsIDQzNDQxLCA0MzQ1NywgNDM0NzMsIDQzNDg5LCA0MzUwNSwgNDM1MjEsIDQzNTM3LCA0MzU1MywgNDM1NjksIAorICAgIDQzNTg1LCA0MzYwMSwgNDM2MTcsIDQzNjMzLCA0MzY0OSwgNDM2NjUsIDQzNjgxLCA0MzY5NywgNDM3MTMsIDQzNzI5LCAKKyAgICA0Mzc0NSwgNDM3NjEsIDQzNzc3LCA0Mzc5MywgNDM4MDksIDQzODI1LCA0Mzg0MSwgNDM4NTcsIDQzODczLCA0Mzg4OSwgCisgICAgNDM5MDUsIDQzOTIxLCA0MzkzNywgNDM5NTMsIDQzOTY5LCA0Mzk4NSwgNDQwMDEsIDQ0MDE3LCA0NDAzMywgNDQwNDksIAorICAgIDQ0MDY1LCA0NDA4MSwgNDQwOTcsIDQ0MTEzLCA0NDEyOSwgNDQxNDUsIDQ0MTYxLCA0NDE3NywgNDQxOTMsIDQ0MjA5LCAKKyAgICA0NDIyNSwgNDQyNDEsIDQ0MjU3LCA0NDI3MywgNDQyODksIDQ0MzA1LCA0NDMyMSwgNDQzMzcsIDQ0MzUzLCA0NDM2OSwgCisgICAgNDQzODUsIDQ0NDAxLCA0NDQxNywgNDQ0MzMsIDQ0NDQ5LCA0NDQ2NSwgNDQ0ODEsIDQ0NDk3LCA0NDUxMywgNDQ1MjksIAorICAgIDQ0NTQ1LCA0NDU2MSwgNDQ1NzcsIDQ0NTkzLCA0NDYwOSwgNDQ2MjUsIDQ0NjQxLCA0NDY1NywgNDQ2NzMsIDQ0Njg5LCAKKyAgICA0NDcwNSwgNDQ3MjEsIDQ0NzM3LCA0NDc1MywgNDQ3NjksIDQ0Nzg1LCA0NDgwMSwgNDQ4MTcsIDQ0ODMzLCA0NDg0OSwgCisgICAgNDQ4NjUsIDQ0ODgxLCA0NDg5NywgNDQ5MTMsIDQ0OTI5LCA0NDk0NSwgNDQ5NjEsIDQ0OTc3LCA0NDk5MywgNDUwMDksIAorICAgIDQ1MDI1LCA0NTA0MSwgNDUwNTcsIDQ1MDczLCA0NTA4OSwgNDUxMDUsIDQ1MTIxLCA0NTEzNywgNDUxNTMsIDQ1MTY5LCAKKyAgICA0NTE4NSwgNDUyMDEsIDQ1MjE3LCA0NTIzMywgNDUyNDksIDQ1MjY1LCA0NTI4MSwgNDUyOTcsIDQ1MzEzLCA0NTMyOSwgCisgICAgNDUzNDUsIDQ1MzYxLCA0NTM3NywgNDUzOTMsIDQ1NDA5LCA0NTQyNSwgNDU0NDEsIDQ1NDU3LCA0NTQ3MywgNDU0ODksIAorICAgIDQ1NTA1LCA0NTUyMSwgNDU1MzcsIDQ1NTUzLCA0NTU2OSwgNDU1ODUsIDQ1NjAxLCA0NTYxNywgNDU2MzMsIDQ1NjQ5LCAKKyAgICA0NTY2NSwgNDU2ODEsIDQ1Njk3LCA0NTcxMywgNDU3MjksIDQ1NzQ1LCA0NTc2MSwgNDU3NzcsIDQ1NzkzLCA0NTgwOSwgCisgICAgNDU4MjUsIDQ1ODQxLCA0NTg1NywgNDU4NzMsIDQ1ODg5LCA0NTkwNSwgNDU5MjEsIDQ1OTM3LCA0NTk1MywgNDU5NjksIAorICAgIDQ1OTg1LCA0NjAwMSwgNDYwMTcsIDQ2MDMzLCA0NjA0OSwgNDYwNjUsIDQ2MDgxLCA0NjA5NywgNDYxMTMsIDQ2MTI5LCAKKyAgICA0NjE0NSwgNDYxNjEsIDQ2MTc3LCA0NjE5MywgNDYyMDksIDQ2MjI1LCA0NjI0MSwgNDYyNTcsIDQ2MjczLCA0NjI4OSwgCisgICAgNDYzMDUsIDQ2MzIxLCA0NjMzNywgNDYzNTMsIDQ2MzY5LCA0NjM4NSwgNDY0MDEsIDQ2NDE3LCA0NjQzMywgNDY0NDksIAorICAgIDQ2NDY1LCA0NjQ4MSwgNDY0OTcsIDQ2NTEzLCA0NjUyOSwgNDY1NDUsIDQ2NTYxLCA0NjU3NywgNDY1OTMsIDQ2NjA5LCAKKyAgICA0NjYyNSwgNDY2NDEsIDQ2NjU3LCA0NjY3MywgNDY2ODksIDQ2NzA1LCA0NjcyMSwgNDY3MzcsIDQ2NzUzLCA0Njc2OSwgCisgICAgNDY3ODUsIDQ2ODAxLCA0NjgxNywgNDY4MzMsIDQ2ODQ5LCA0Njg2NSwgNDY4ODEsIDQ2ODk3LCA0NjkxMywgNDY5MjksIAorICAgIDQ2OTQ1LCA0Njk2MSwgNDY5NzcsIDQ2OTkzLCA0NzAwOSwgNDcwMjUsIDQ3MDQxLCA0NzA1NywgNDcwNzMsIDQ3MDg5LCAKKyAgICA0NzEwNSwgNDcxMjEsIDQ3MTM3LCA0NzE1MywgNDcxNjksIDQ3MTg1LCA0NzIwMSwgNDcyMTcsIDQ3MjMzLCA0NzI0OSwgCisgICAgNDcyNjUsIDQ3MjgxLCA0NzI5NywgNDczMTMsIDQ3MzI5LCA0NzM0NSwgNDczNjEsIDQ3Mzc3LCA0NzM5MywgNDc0MDksIAorICAgIDQ3NDI1LCA0NzQ0MSwgNDc0NTcsIDQ3NDczLCA0NzQ4OSwgNDc1MDUsIDQ3NTIxLCA0NzUzNywgNDc1NTMsIDQ3NTY5LCAKKyAgICA0NzU4NSwgNDc2MDEsIDQ3NjE3LCA0NzYzMywgNDc2NDksIDQ3NjY1LCA0NzY4MSwgNDc2OTcsIDQ3NzEzLCA0NzcyOSwgCisgICAgNDc3NDUsIDQ3NzYxLCA0Nzc3NywgNDc3OTMsIDQ3ODA5LCA0NzgyNSwgNDc4NDEsIDQ3ODU3LCA0Nzg3MywgNDc4ODksIAorICAgIDQ3OTA1LCA0NzkyMSwgNDc5MzcsIDQ3OTUzLCA0Nzk2OSwgNDc5ODUsIDQ4MDAxLCA0ODAxNywgNDgwMzMsIDQ4MDQ5LCAKKyAgICA0ODA2NSwgNDgwODEsIDQ4MDk3LCA0ODExMywgNDgxMjksIDQ4MTQ1LCA0ODE2MSwgNDgxNzcsIDQ4MTkzLCA0ODIwOSwgCisgICAgNDgyMjUsIDQ4MjQxLCA0ODI1NywgNDgyNzMsIDQ4Mjg5LCA0ODMwNSwgNDgzMjEsIDQ4MzM3LCA0ODM1MywgNDgzNjksIAorICAgIDQ4Mzg1LCA0ODQwMSwgNDg0MTcsIDQ4NDMzLCA0ODQ0OSwgNDg0NjUsIDQ4NDgxLCA0ODQ5NywgNDg1MTMsIDQ4NTI5LCAKKyAgICA0ODU0NSwgNDg1NjEsIDQ4NTc3LCA0ODU5MywgNDg2MDksIDQ4NjI1LCA0ODY0MSwgNDg2NTcsIDQ4NjczLCA0ODY4OSwgCisgICAgNDg3MDUsIDQ4NzIxLCA0ODczNywgNDg3NTMsIDQ4NzY5LCA0ODc4NSwgNDg4MDEsIDQ4ODE3LCA0ODgzMywgNDg4NDksIAorICAgIDQ4ODY1LCA0ODg4MSwgNDg4OTcsIDQ4OTEzLCA0ODkyOSwgNDg5NDUsIDQ4OTYxLCA0ODk3NywgNDg5OTMsIDQ5MDA5LCAKKyAgICA0OTAyNSwgNDkwNDEsIDQ5MDU3LCA0OTA3MywgNDkwODksIDQ5MTA1LCA0OTEyMSwgNDkxMzcsIDQ5MTUzLCA0OTE2OSwgCisgICAgNDkxODUsIDQ5MjAxLCA0OTIxNywgNDkyMzMsIDQ5MjQ5LCA0OTI2NSwgNDkyODEsIDQ5Mjk3LCA0OTMxMywgNDkzMjksIAorICAgIDQ5MzQ1LCA0OTM2MSwgNDkzNzcsIDQ5MzkzLCA0OTQwOSwgNDk0MjUsIDQ5NDQxLCA0OTQ1NywgNDk0NzMsIDQ5NDg5LCAKKyAgICA0OTUwNSwgNDk1MjEsIDQ5NTM3LCA0OTU1MywgNDk1NjksIDQ5NTg1LCA0OTYwMSwgNDk2MTcsIDQ5NjMzLCA0OTY0OSwgCisgICAgNDk2NjUsIDQ5NjgxLCA0OTY5NywgNDk3MTMsIDQ5NzI5LCA0OTc0NSwgNDk3NjEsIDQ5Nzc3LCA0OTc5MywgNDk4MDksIAorICAgIDQ5ODI1LCA0OTg0MSwgNDk4NTcsIDQ5ODczLCA0OTg4OSwgNDk5MDUsIDQ5OTIxLCA0OTkzNywgNDk5NTMsIDQ5OTY5LCAKKyAgICA0OTk4NSwgNTAwMDEsIDUwMDE3LCA1MDAzMywgNTAwNDksIDUwMDY1LCA1MDA4MSwgNTAwOTcsIDUwMTEzLCA1MDEyOSwgCisgICAgNTAxNDUsIDUwMTYxLCA1MDE3NywgNTAxOTMsIDUwMjA5LCA1MDIyNSwgNTAyNDEsIDUwMjU3LCA1MDI3MywgNTAyODksIAorICAgIDUwMzA1LCA1MDMyMSwgNTAzMzcsIDUwMzUzLCA1MDM2OSwgNTAzODUsIDUwNDAxLCA1MDQxNywgNTA0MzIsIDUwNDQxLCAKKyAgICA1MDQ0NywgNTA0NTMsIDUwNDYzLCA1MDQ3MSwgMTE4MjMsIDEzNzg3LCA3NjYxLCA1MDQ4NCwgMTUwMiwgNTA0OTIsIAorICAgIDIyNjY1LCA1MjA3LCA1MDQ5OCwgNTA1MDMsIDUwNTA4LCA1MDUxMywgNTA1MTgsIDUwNTI0LCA1MDUyOSwgNTA1MzUsIAorICAgIDUwNTQwLCA1MDU0NiwgNTA1NTEsIDUwNTU2LCA1MDU2MSwgNTA1NjYsIDUwNTcyLCA1MDU3NywgNTA1ODIsIDUwNTg3LCAKKyAgICA1MDU5MiwgNTA1OTcsIDUwNjAyLCA1MDYwNywgNTA2MTMsIDUwNjE4LCA1MDYyNCwgNTA2MzEsIDI0ODksIDUwNjM2LCAKKyAgICA1MDY0MiwgNjQ4MCwgNTA2NDYsIDUwNjUxLCA1MDY1OCwgNTA2NjYsIDQwLCA1MDY3MCwgNTA2NzYsIDUwNjgxLCA1MDY4NiwgCisgICAgNTA2OTAsIDUwNjk1LCA1MDY5OSwgNTA3MDMsIDgyNTUsIDUwNzA3LCA1MDcxNywgNTA3MzAsIDUwNzQxLCA1MDc1NCwgCisgICAgNTA3NjEsIDUwNzY3LCA1MDc3MiwgNTA3NzgsIDUwNzg0LCA1MDc5MCwgNTA3OTUsIDUwODAwLCA1MDgwNSwgNTA4MTAsIAorICAgIDUwODE0LCA1MDgxOSwgNTA4MjQsIDUwODI5LCA1MDgzNSwgNTA4NDEsIDUwODQ3LCA1MDg1MiwgNTA4NTYsIDUwODYxLCAKKyAgICA1MDg2NiwgNTA4NzAsIDUwODc1LCA1MDg4MCwgNTA4ODUsIDUwODg5LCA4MjcxLCA4MjgyLCA4Mjg3LCAxNTQ1LCA1MDg5MywgCisgICAgMTU1MCwgNTA4OTksIDUwOTAyLCAxNTgxLCA1MDkwOCwgMTU4NywgMTU5MywgODMxNywgNTA5MTMsIDUwOTIxLCA1MDkyOCwgCisgICAgNTA5MzIsIDUwOTM4LCA1MDk0MywgMjU2MjAsIDUwOTQ4LCA1MDk1NSwgNTA5NjAsIDUwOTY0LCA1MDk2OCwgMTU5OCwgCisgICAgMTI5MzMsIDEyOTQ0LCA1MDk3NywgNTA5ODQsIDUwOTg5LCA1MDk5MywgMTI5NTYsIDE2MDIsIDMwMzE5LCA1MDk5NiwgCisgICAgNTEwMDYsIDUxMDEwLCAxNjA3LCAzMTkyMSwgNTEwMTUsIDg0MzcsIDg0NDMsIDUxMDIxLCA1MTAzMywgNTEwNTAsIDUxMDY3LCAKKyAgICA1MTA4NCwgNTExMDEsIDUxMTE4LCA1MTEzNSwgNTExNTIsIDUxMTY5LCA1MTE4NiwgNTEyMDMsIDUxMjIwLCA1MTIzNywgCisgICAgNTEyNTQsIDUxMjcxLCA1MTI4OCwgNTEzMDUsIDUxMzIyLCA1MTMzOSwgNTEzNTYsIDUxMzczLCA1MTM5MCwgNTE0MDcsIAorICAgIDUxNDI0LCA1MTQ0MSwgNTE0NTgsIDUxNDc1LCA1MTQ5MiwgNTE1MDksIDUxNTI2LCA1MTU0MywgNTE1NjAsIDUxNTc3LCAKKyAgICA1MTU5NCwgNTE2MTEsIDUxNjI4LCA1MTY0NSwgNTE2NjIsIDUxNjc5LCA1MTY5NiwgNTE3MTMsIDUxNzMwLCA1MTc0NywgCisgICAgNTE3NjQsIDUxNzgxLCA1MTc5OCwgNTE4MTUsIDUxODMyLCA1MTg0OSwgNTE4NjYsIDUxODc3LCA1MTg4MiwgMTYxMiwgCisgICAgNTE4ODYsIDUxODkyLCA3MTQ0LCAxNjE3LCAyMjkxMiwgNTE4OTcsIDUxOTA4LCA1MTkxOCwgNTE5MjMsIDUxOTMwLCAKKyAgICA1MTkzNiwgNTE5NDEsIDUxOTQ2LCA1MTk1MCwgODQ1NCwgMTYyMiwgODQ1OSwgNTE5NTQsIDUxOTU5LCA1MTk2NSwgNTE5NzAsIAorICAgIDUxOTc1LCA1MTk4MCwgNTE5ODUsIDUxOTkwLCA1MTk5NSwgNTIwMDAsIDUyMDA2LCA1MjAxMiwgNTIwMTgsIDUyMDIzLCAKKyAgICA1MjAyNywgNTIwMzIsIDUyMDM3LCA1MjA0MSwgNTIwNDYsIDUyMDUxLCA1MjA1NiwgNTIwNjAsIDUyMDY1LCA1MjA3MSwgCisgICAgNTIwNzYsIDUyMDgxLCA1MjA4NSwgNTIwOTAsIDUyMDk1LCA1MjEwMSwgNTIxMDYsIDUyMTExLCA1MjExNywgNTIxMjMsIAorICAgIDUyMTI4LCA1MjEzMiwgNTIxMzcsIDUyMTQyLCA1MjE0NywgNTIxNTEsIDUyMTU2LCA1MjE2MSwgNTIxNjYsIDUyMTcyLCAKKyAgICA1MjE3OCwgNTIxODMsIDUyMTg3LCA1MjE5MSwgNTIxOTYsIDUyMjAxLCA1MjIwNiwgMjQxMjQsIDUyMjEwLCA1MjIxNSwgCisgICAgNTIyMjAsIDUyMjI2LCA1MjIzMSwgNTIyMzYsIDUyMjQwLCA1MjI0NSwgNTIyNTAsIDUyMjU2LCA1MjI2MSwgNTIyNjYsIAorICAgIDUyMjcyLCA1MjI3OCwgNTIyODMsIDUyMjg3LCA1MjI5MiwgNTIyOTcsIDUyMzAxLCA1MjMwNiwgNTIzMTEsIDUyMzE2LCAKKyAgICA1MjMyMiwgNTIzMjgsIDUyMzMzLCA1MjMzNywgNTIzNDIsIDUyMzQ3LCA1MjM1MSwgNTIzNTYsIDUyMzYxLCA1MjM2NiwgCisgICAgNTIzNzAsIDUyMzczLCAyNjA3NywgNTIzNzgsIDUyMzg2LCAxMzIxOCwgMTMyMzYsIDg1NTcsIDUyMzkyLCA4NTYyLCAKKyAgICA1MjQwNywgNTI0MTIsIDUyNDIzLCA1MjQzNSwgNTI0NDcsIDUyNDU5LCAyNTg4LCA1MjQ3MSwgNTI0NzYsIDUyNDgwLCAKKyAgICA1MjQ4NiwgNTI0OTIsIDE2MzQsIDk0MCwgNTI0OTcsIDUyNTAyLCAzMTk2MCwgNTI1MDYsIDUyNTEwLCA1MjUxNSwgNTI1MTksIAorICAgIDEzMzAxLCA1MjUyNCwgNTI1MjcsIDUyNTM1LCAxNjM4LCA4NTg3LCA4NTkzLCAxNjQzLCA1MjU0MywgNTI1NTAsIDUyNTU1LCAKKyAgICA1MjU2NCwgNTI1NzQsIDUyNTgxLCAxNjQ4LCA1MjU4OCwgNTI1OTMsIDEzMzc2LCA1MjU5NywgNTI2MDIsIDUyNjA5LCAKKyAgICA1MjYxNSwgNTI2MTksIDUyNjI5LCAxMzM5OCwgNzA2MywgNzA3MCwgMTY1MywgNTI2MzYsIDUyNjQyLCA1MjY1MCwgNTI2NTcsIAorICAgIDUyNjYzLCA1MjY2OSwgNTI2NzQsIDUyNjg1LCA1MjY5NCwgMzQ5OCwgMjU0OTUsIDI1NTA0LCAxMzQzOCwgMTY1OCwgMTY2MiwgCisgICAgNTI3MDIsIDUyNzEzLCA1MjcxOCwgMTY2NSwgNTI3MjYsIDUyNzMxLCA1Mjc0MywgNTI3NDksIDUyNzU0LCAxNjcwLCAKKyAgICA1Mjc1OSwgNTI3NjQsIDUyNzcyLCA1Mjc4MCwgNTI3ODcsIDUyNzk2LCA1MjgwNCwgNTI4MTMsIDE2NzUsIDE2ODAsIAorICAgIDUyODE3LCA1MjgyNCwgMTM1NDcsIDUyODMyLCA1MjgzOCwgNTI4NDYsIDUyODUxLCA4NzI3LCA1Mjg2MCwgNTI4NjYsIAorICAgIDUyODcyLCA1Mjg3NywgNTI4ODUsIDg3MzYsIDg3NDEsIDUyODkzLCA1Mjg5OSwgMzU2MywgMzIwMzgsIDUyOTA0LCA1MjkxMCwgCisgICAgNTI5MTUsIDUyOTIzLCA1MjkzMCwgNTI5MzUsIDUyOTM5LCA1Mjk0NSwgMTY5MSwgNTI5NTAsIDUyOTUzLCA5NzcsIDUyOTU5LCAKKyAgICA1Mjk2NCwgNTI5NjksIDUyOTc1LCA1Mjk4MCwgNTI5ODUsIDUyOTkwLCA1Mjk5NSwgNTMwMDAsIDUzMDA1LCAxNzAwLCA5LCAKKyAgICA1MzAxMSwgNTMwMTUsIDUzMDIwLCA1MzAyNCwgNTMwMjgsIDUzMDMyLCAyNjMxNSwgNTMwMzcsIDUzMDQyLCA1MzA0NywgCisgICAgNTMwNTEsIDUzMDU0LCA1MzA1OCwgNTMwNjIsIDUzMDY3LCA1MzA3MSwgNTMwNzYsIDUzMDgwLCAyODMyMiwgMjgzMjcsIAorICAgIDI4MzMyLCA1MzA4MywgNTMwOTAsIDUzMDk2LCAzMTgwNCwgNTMxMDYsIDI4MzM4LCAyODM0MywgMjYzMjUsIDI2MzMxLCAKKyAgICAyODM1NCwgMjYzMzcsIDUzMTExLCA1MzExNiwgNTMxMjAsIDUzMTI0LCA1MzEyNywgNTMxMzEsIDUzMTM0LCA1MzEzOSwgCisgICAgNTMxNDMsIDUzMTQ3LCA1MzE1MCwgNTMxNjIsIDI3NTE3LCA1MzE2OSwgMTIzOTYsIDc2MCwgNTMxNzIsIDUzMTc2LCAKKyAgICA1MzE4MSwgNTMxODUsIDEwNzc5LCA1MzE4OCwgNTMxOTUsIDUzMjA4LCA1MzIxNywgNTMyMjIsIDUzMjMyLCA1MzI0NSwgCisgICAgNTMyNTcsIDUzMjY0LCA1MzI2OSwgNTMyNzgsIDUzMjkxLCAyOTI4MywgNTMzMDksIDUzMzE0LCA1MzMyMSwgNTMzMjcsIAorICAgIDUzMzMyLCA1MzM0MCwgMjI5NzksIDU4NSwgNTMzNDYsIDUzMzUyLCA1MzM1OCwgNTMzNjMsIDI2MzQyLCA0MTc2LCAyNjM1NiwgCisgICAgNTMzNjcsIDUzMzc3LCA1MzM4MiwgNTMzOTIsIDUzNDA3LCA1MzQxMywgNTM0MTksIDI2MzYxLCAyNTY1MiwgNTM0MjQsIAorICAgIDUzNDI5LCA1MzQzNCwgNTM0MzgsIDUzNDQzLCA1MzQ0OCwgNTM0NTIsIDQyMTcsIDI2MzgyLCA1MzQ1NiwgNTM0NjIsIDMzNywgCisgICAgNTM0NzIsIDUzNDc5LCA1MzQ4OCwgNTM0OTQsIDUzNTAyLCA1MzUwNiwgNTM1MTAsIDUzNTE0LCA1MzUxOCwgNTM1MjMsIAorICAgIDUzNTI3LCA1MzUzMywgNTM1NDEsIDUzNTQ2LCA1MzU1MCwgNTM1NTUsIDUzNTU5LCA1MzU2MywgNTM1NjksIDUzNTc1LCAKKyAgICA1MzU4MCwgNTM1ODQsIDI2Mzk4LCA1MzU4OSwgMjY0MDQsIDI2NDEwLCA1MzU5NCwgNTM2MDAsIDUzNjA1LCA1MzYwOSwgCisgICAgMjU2NjksIDEzMTY3LCA1MzYxMiwgNTM2MTYsIDUzNjIxLCA1MzYyOCwgNTM2MzQsIDUzNjM4LCA1MzY0MywgNTM2NDksIAorICAgIDUzNjUzLCA1MzY1NywgNTM2NjIsIDUzNjY3LCA1MzY3MSwgNTM2NzQsIDUzNjgwLCA1MzY4NSwgNTM2OTIsIDUzNjk5LCAKKyAgICA1MzcwNSwgNTM3MTAsIDUzNzE1LCA1MzcxOSwgNTM3MjQsIDUzNzMwLCA1MzczNSwgNTM3NDEsIDUzNzQ2LCA1Mzc1MSwgCisgICAgNTM3NTYsIDUzNzYyLCA1Mzc2NywgNTM3NzIsIDUzNzc4LCA1Mzc4NCwgNTM3OTAsIDI2NDE1LCA1Mzc5NSwgNTM4MDAsIAorICAgIDUzODA1LCAyNjQyNiwgNTM4MTAsIDUzODE1LCA1MzgyMCwgNTM4MjYsIDUzODMyLCAyNjQzMSwgNTM4MzcsIDUzODQyLCAKKyAgICA1Mzg0NywgMjY0NDIsIDI2NDQ4LCA1Mzg1MiwgNTM4NTcsIDUzODYyLCA1Mzg2NywgMjMxMjksIDI2NDUzLCAyNjQ1NywgCisgICAgNTM4NzIsIDUzODQzLCA1Mzg3NiwgNTM4ODIsIDUzODkwLCA1Mzg5NywgNTM5MDMsIDUzOTEzLCA1MzkxOSwgNTM5MjYsIAorICAgIDgyMTQsIDI2NDYyLCA1MzkzMiwgNTM5NDUsIDUzOTU0LCA1Mzk2MCwgNTM5NjksIDUzOTc1LCAxOTUyNCwgNTM5ODIsIAorICAgIDUzOTg5LCAyNjQ0MywgNTM5OTksIDU0MDA2LCA1NDAxMSwgNTQwMTUsIDU0MDE5LCA1NDAyNCwgNDI1MSwgNTQwMjgsIAorICAgIDU0MDMzLCA1NDAzOCwgMjg0MTYsIDI4NDIxLCA1NDA0MiwgMjg0MjcsIDI4NDMyLCA1NDA0NywgMjg0MzcsIDI4NDQzLCAKKyAgICA1NDA1MiwgMjg0NDgsIDU0MDYzLCA1NDA2NiwgNTQwNzgsIDU0MDg2LCAyNjQ4NCwgNTQwOTAsIDU0MDk5LCA1NDEwOSwgCisgICAgNTQxMTgsIDI2NDg5LCA1NDEyMywgNTQxMzAsIDU0MTM5LCA1NDE0NSwgNTQxNTMsIDI3MDQ1LCA0MDY5LCA1NDE1OCwgCisgICAgMjY0OTgsIDU0MTY0LCA1NDE2NywgNTQxNzMsIDU0MTgwLCA1NDE4NSwgNTQxOTAsIDE5NDU2LCA1NDE5NCwgNTQyMDAsIAorICAgIDU0MjA2LCA1NDIxMSwgNTQyMTcsIDU0MjIzLCA1NDIyOCwgNzY1LCAyOTA5MiwgMjk4MzksIDI5ODQ1LCA1NDIzMiwgCisgICAgNTQyMzYsIDU0MjQwLCA1NDI0MywgNTQyNTYsIDU0MjYyLCA1NDI2NiwgNTQyNjksIDU0Mjc0LCAyNzcwOCwgNTQyNzgsIAorICAgIDI1Njc0LCAxNzU4NSwgNTQyODQsIDQxOTcsIDQyMDUsIDY5NDgsIDU0Mjg3LCA1NDI5MiwgNTQyOTcsIDU0MzAyLCA1NDMwNywgCisgICAgNTQzMTIsIDU0MzE3LCA1NDMyMiwgNTQzMjcsIDU0MzMyLCA1NDMzOCwgNTQzNDMsIDU0MzQ4LCA1NDM1NCwgNTQzNTksIAorICAgIDU0MzY0LCA1NDM2OSwgNTQzNzQsIDU0Mzc5LCA1NDM4NCwgNTQzOTAsIDU0Mzk1LCA1NDQwMSwgNTQ0MDYsIDU0NDExLCAKKyAgICA1NDQxNiwgNTQ0MjEsIDU0NDI2LCA1NDQzMSwgNTQ0MzYsIDU0NDQxLCA1NDQ0NiwgNTQ0NTEsIDU0NDU3LCA1NDQ2MiwgCisgICAgNTQ0NjcsIDU0NDcyLCA1NDQ3NywgNTQ0ODIsIDU0NDg3LCA1NDQ5MywgNTQ0OTgsIDU0NTAzLCA1NDUwOCwgNTQ1MTMsIAorICAgIDU0NTE4LCA1NDUyMywgNTQ1MjgsIDU0NTMzLCA1NDUzOCwgNTQ1NDQsIDU0NTQ5LCA1NDU1NCwgNTQ1NTksIDU0NTY0LCAKKyAgICA1NDU3MCwgNTQ1NzYsIDU0NTgxLCA1NDU4NywgNTQ1OTIsIDU0NTk3LCA1NDYwMiwgNTQ2MDcsIDU0NjEyLCAxNDk1LCAyMzUsIAorICAgIDU0NjE3LCA1NDYyMSwgNTQ2MjUsIDU0NjI5LCA1NDYzMywgNTQ2MzYsIDU0NjQwLCA1NDY0NSwgNTQ2NDksIDU0NjU0LCAKKyAgICA1NDY1OCwgNTQ2NjIsIDU0NjY2LCA1NDY3MSwgNTQ2NzUsIDU0NjgwLCA1NDY4NCwgNTQ2ODgsIDU0Njk1LCAxMTk5OSwgCisgICAgNTQ3MDQsIDU0NzEzLCA1NDcxNywgMjA3MDEsIDU0NzIxLCA1NDcyNywgNTQ3MzUsIDU0NzQxLCA1NDc1MywgNTQ3NTcsIAorICAgIDU0NzYyLCA1NDc2OCwgNTQ3NzgsIDU0Nzg4LCA1NDc5NCwgNTQ3OTgsIDU0ODAzLCA1NDgwOSwgNTQ4MTgsIDU0ODI3LCAKKyAgICA1NDgzNSwgMTIyNzQsIDU0ODM5LCA1NDg0OCwgNTQ4NTYsIDU0ODY3LCA1NDg3OCwgNTQ4ODcsIDU0ODkxLCA1NDkwMCwgCisgICAgNTQ5MTAsIDU0OTE2LCA1NDkyMSwgNTQ5MjcsIDU0OTMyLCA5OCwgMjU1NzksIDU0OTQzLCAyMTczNSwgNTQ5NDksIDU0OTU2LCAKKyAgICA1NDk2MiwgNTQ5NjYsIDU0OTc2LCA1NDk4NCwgNTQ5ODksIDU0OTkzLCA1NTAwMSwgNTUwMDUsIDU1MDExLCA1NTAyMSwgCisgICAgMTEzMiwgNTUwMjQsIDU1MDI3LCA1NTAzMSwgNTUwMzcsIDU1MDQ0LCA1NTA1MCwgNTUwNTksIDU1MDY4LCA1NTA3NCwgCisgICAgNTUwODAsIDU1MDg1LCA1NTA5MiwgNTUwOTksIDU1MTEyLCA1NTEyMSwgNTUxMzAsIDU1MTM1LCA1NTEzOSwgNTUxNDYsIAorICAgIDU1MTUzLCA1NTE2MCwgNTUxNjcsIDU1MTc0LCA1NTE3OSwgNTUxODMsIDU1MTg3LCA1NTE5MCwgNTUyMDAsIDU1MjA0LCAKKyAgICA1NTIxMywgNTUyMTcsIDU1MjIyLCA1NTIyNiwgNTUyMzUsIDU1MjQzLCA1NTI1MSwgNTUyNTYsIDU1MjYwLCA1NTI2NSwgCisgICAgNTUyNzAsIDU1Mjc0LCA1NTI4MCwgNTUyOTIsIDU1MzAwLCA1NTMxMCwgNTUzMTcsIDU1MzIzLCA1NTMyOCwgNTUzMzIsIAorICAgIDU1MzM2LCA1NTM0MCwgNTUzNDksIDU1MzU4LCA1NTM2NywgNTUzNzMsIDU1Mzc5LCA1NTM4NSwgNTUzOTAsIDU1Mzk3LCAKKyAgICA1NTQwMywgNTU0MTEsIDU1NDE4LCA5Nzc5LCA1NTQyNCwgNTU0MzAsIDU1NDM0LCAxMTIyNSwgNTU0MzgsIDU1NDQ3LCAKKyAgICA1NTQ1MywgNTU0NjEsIDU1NDY4LCA1NTQ3MiwgNTU0NzYsIDU1NDgyLCA1NTQ5MCwgNTU0OTcsIDU1NTAzLCA1NTUxNCwgCisgICAgNTU1MTgsIDU1NTIyLCA1NTUyNiwgNTU1MjksIDU1NTM1LCA1NTU0MCwgNTU1NDQsIDU1NTQ4LCA1NTU1NywgNTU1NjUsIAorICAgIDU1NTcyLCAxOTg5MCwgMzE1NzIsIDU1NTc4LCA1NTU4NiwgNTU1OTAsIDU1NTk3LCA1NTYwNiwgNTU2MTQsIDU1NjIwLCAKKyAgICA1NTYyNSwgNTU2MjksIDU1NjM0LCA1NTYzOCwgNTU2NDMsIDU1NjUyLCA1NTY1NiwgNTU2NjMsIDU1NjcwLCA1NTY3OCwgCisgICAgNTU2ODQsIDU1Njk1LCA1NTcwMSwgNTU3MTAsIDU1NzE3LCA1NTcyNCwgNTU3MzEsIDU1NzM4LCA1NTc0NSwgMzQyODUsIAorICAgIDU1NzUyLCA1NTc1OSwgNTU3NjQsIDU1NzcwLCAzNzQwNywgNTU3NzQsIDU1Nzc5LCA1NTc4NCwgNTU3OTAsIDU1Nzk2LCAKKyAgICA1NTgwMiwgNTU4MDcsIDU1ODEyLCA1NTgxNywgNTU4MjIsIDU1ODI4LCA1NTgzMywgNTU4MzksIDU1ODQ0LCA1NTg1MCwgCisgICAgNTU4NTUsIDU1ODYwLCA1NTg2NSwgNTU4NzAsIDU1ODc1LCA1NTg4MCwgNTU4ODUsIDU1ODkxLCA1NTg5NiwgNTU5MDIsIAorICAgIDU1OTA3LCA1NTkxMiwgNTU5MTcsIDU1OTIyLCA1NTkyNywgNTU5MzIsIDU1OTM4LCA1NTk0MywgNTU5NDgsIDU1OTUzLCAKKyAgICA1NTk1OCwgNTU5NjMsIDU1OTY4LCA1NTk3MywgNTU5NzgsIDU1OTgzLCA1NTk4OCwgNTU5OTQsIDU1OTk5LCA1NjAwNCwgCisgICAgNTYwMDksIDU2MDE0LCA1NjAxOSwgNTYwMjQsIDU2MDI5LCA1NjAzNCwgNTYwNDAsIDU2MDQ1LCA1NjA1MCwgNTYwNTUsIAorICAgIDU2MDYwLCA1NjA2NSwgNTYwNzAsIDU2MDc1LCA1NjA4MCwgNTYwODUsIDU2MDkwLCA1NjA5NSwgNTYxMDAsIDU2MTA2LCAKKyAgICAxODE2LCAyMTYsIDMwNDAyLCA1NjExMSwgNTYxMTQsIDU2MTE5LCA1NjEyMywgNTUyNDcsIDU2MTI2LCA1NjEzNiwgNTYxNDMsIAorICAgIDU2MTUyLCA1NjE2MiwgNTYxNzIsIDU2MTgwLCA1NjE4OCwgNTYxOTIsIDU2MTk1LCA1NjIwMiwgNTYyMDgsIDU2MjE5LCAKKyAgICA1NjIzMSwgNTYyNDIsIDU2MjQ5LCAxMzA1LCAxOTM2MSwgNTYyNTksIDI1MTgsIDU2MjYzLCAxMDg3LCAxMzc0MywgMzA5MTgsIAorICAgIDU2MjcxLCA1NjI4NCwgNTYyODgsIDU2MjkzLCA1NjI5OCwgNTYzMDMsIDU2MzA5LCA1NjMxNSwgNTYzMjAsIDY0ODksIAorICAgIDU2MzI1LCA1NjMzMywgODU4OCwgNTYzMzgsIDU2MzQ0LCAxNzAzLCA4NjAwLCA2NjksIDU2MzUzLCA1NjM2MiwgNTYzNzIsIAorICAgIDIyMzU3LCA1NjM4MSwgNTYzODcsIDEzMzUzLCA1NjM5MywgNTYzOTcsIDM2NzgsIDg4OTAsIDU2NDAzLCA1MjcwOCwgCisgICAgNTY0MTAsIDY5MTksIDE3MSwgMTExNTksIDU2NDE2LCA1NjQyOCwgNTY0MzIsIDU2NDM4LCAyMjkzMiwgNTY0NDIsIDg4NzgsIAorICAgIDI2MjMsIDQsIDU2NDQ3LCA1NjQ1NywgNTY0NjMsIDU2NDc0LCA1NjQ4MSwgNTY0ODcsIDU2NDkzLCA1NjUwMSwgNTY1MDgsIAorICAgIDU2NTE4LCA1NjUyOCwgNTY1MzgsIDEzMTcsIDU2NTQ3LCA1NjU1MywgMjY0NiwgMjY1MiwgNjQ4NiwgMjIwMCwgNTY1NTcsIAorICAgIDU2NTYxLCA1NjU3MCwgNTY1ODEsIDU2NTg5LCA1NjU5NywgNTY2MDMsIDU2NjE0LCA1NjYyNSwgNTY2MzMsIDU2NjM5LCAKKyAgICA4OTMxLCA1NjY0NCwgNTY2NTIsIDU2NjU2LCA1NjY2MCwgMjMyNzMsIDU2NjcyLCA1NjY4MiwgNTY2ODgsIDU2Njk0LCAKKyAgICA1NjcwNCwgNTY3MDcsIDU2NzE4LCA1NjcyOCwgNTY3MzcsIDU2NzQxLCA1Njc0OCwgMTA4OSwgMjUxMSwgNTY3NTgsIAorICAgIDU2NzYzLCA1Njc3MSwgNTY3NzksIDU2NzkwLCA1NjgwNCwgMTExMTEsIDM3NCwgNTY4MTQsIDU2ODE4LCA1NjgyNywgCisgICAgNTY4MzUsIDU2ODQxLCA1Njg0OCwgNTY4NTQsIDU2ODYxLCA1Njg3MSwgNTY4NzksIDM1NzAsIDE4NCwgNTY4ODcsIDU2ODk4LCAKKyAgICA1NjkwMiwgNTY5MTQsIDIzMTIwLCAxNDgsIDU2OTIwLCA1NjkyNSwgNTY5MjksIDU2OTM2LCA1Njk0MiwgNTY5NTAsIAorICAgIDU2OTU3LCA2NzQwLCA1Njk2NCwgNTY5NzMsIDM2MjUsIDU2OTgxLCAxMzM5OSwgNTY5ODUsIDI2ODEsIDQxOSwgNTY5OTAsIAorICAgIDU3MDAzLCA1NzAwOCwgMTgxNSwgNjAyLCA1NzAxMiwgMzYzMSwgNTcwMjAsIDU3MDI2LCA5MTcsIDU3MDM2LCA1NzA0NSwgCisgICAgNTcwNTAsIDExODQ3LCA1NzA1NCwgMzc2MTcsIDU3MDU3LCAzNTgwLCAxOTUwNywgNTcwNjUsIDU3MDcyLCAxOTU0OSwgCisgICAgNTcwNzYsIDU3MDgzLCA1NzA4OSwgNTcwOTQsIDExODYxLCA1NzA5OSwgNTcxMTEsIDU3MTE3LCA1NzEyNSwgMjY5MywgCisgICAgMTczNSwgNTcxMzMsIDU3MTM1LCA1NzE0MCwgNTcxNDUsIDU3MTUwLCA1NzE1NiwgNTcxNjEsIDU3MTY2LCA1NzE3MSwgCisgICAgNTcxNzYsIDU3MTgxLCA1NzE4NiwgNTcxOTIsIDU3MTk3LCA1NzIwMiwgNTcyMDcsIDU3MjEyLCA1NzIxNywgNTcyMjIsIAorICAgIDU3MjI3LCA1NzIzMiwgNTcyMzgsIDU3MjQzLCA1NzI0OCwgNTcyNTMsIDU3MjU5LCA1NzI2NCwgNTcyNzAsIDU3Mjc1LCAKKyAgICA1NzI4MCwgNTcyODUsIDU3MjkwLCA1NzI5NSwgNTczMDAsIDU3MzA1LCA1NzMxMSwgNTczMTYsIDU3MzIyLCA1NzMyNywgCisgICAgNTczMzIsIDU3MzM3LCA1NzM0MiwgNTczNDcsIDU3MzUyLCA1NzM1NywgNTczNjIsIDU3MzY3LCA1NzM3MiwgNTczNzYsIAorICAgIDU3MzgwLCA1NzM4NSwgNTczODksIDU3Mzk0LCA1NzM5OSwgNTc0MDUsIDU3NDEwLCA1NzQxNCwgNTc0MTgsIDU3NDIxLCAKKyAgICA1NzQyMywgNTc0MjcsIDU3NDMwLCA1NzQzNSwgNTc0MzksIDU3NDQzLCA1NzQ0NywgNTc0NTEsIDU3NDYwLCAyNjY1MiwgCisgICAgNTc0NjMsIDI2NjU3LCAyNjY2MiwgNTc0NzAsIDU3NDc5LCAyNjY2OCwgNTc0ODQsIDI2NjczLCA1NzQ5MywgNTc0OTgsIAorICAgIDkwMTgsIDU3NTAyLCA1NzUwNywgNTc1MTIsIDU3NTE2LCA1NzUyMCwgNTc1MjQsIDU3NTI4LCA1NzUzMSwgNTc1MzUsIAorICAgIDYxNzAsIDU3NTQxLCA1NzU0NiwgNTc1NTAsIDM0NjcsIDU3NTUzLCA1NzU1NSwgNTc1NTksIDU3NTYyLCA1NzU2NywgCisgICAgNTc1NzEsIDU3NTc3LCA1NzU5MCwgNTc1OTYsIDU3NjAxLCA1NzYwNSwgNTc2MTMsIDU3NjIwLCA1NzYyOCwgNTc2MzcsIAorICAgIDU3NjQ1LCAyNjY3OCwgNTc2NTIsIDU3NjYyLCA1NzY3MSwgNTc2ODQsIDU3Njg5LCA1NzY5NCwgNTc3MDAsIDU3NzA3LCAKKyAgICA1NzcxOCwgNTc3MzAsIDU3NzM3LCA1Nzc0NiwgNTc3NTUsIDU3NzY0LCA1Nzc3MSwgNTc3NzcsIDU3Nzg0LCA1Nzc5MiwgCisgICAgNTc3OTksIDU3ODA3LCA1NzgxNiwgNTc4MjQsIDU3ODMxLCA1NzgzOSwgNTc4NDgsIDU3ODU2LCA1Nzg2NSwgNTc4NzUsIAorICAgIDU3ODg0LCA1Nzg5MiwgNTc4OTksIDU3OTA3LCA1NzkxNiwgNTc5MjQsIDU3OTMzLCA1Nzk0MywgNTc5NTIsIDU3OTYwLCAKKyAgICA1Nzk2OSwgNTc5NzksIDU3OTg4LCA1Nzk5OCwgNTgwMDksIDU4MDE5LCA1ODAyOCwgNTgwMzYsIDU4MDQzLCA1ODA1MSwgCisgICAgNTgwNjAsIDU4MDY4LCA1ODA3NywgNTgwODcsIDU4MDk2LCA1ODEwNCwgNTgxMTMsIDU4MTIzLCA1ODEzMiwgNTgxNDIsIAorICAgIDU4MTUzLCA1ODE2MywgNTgxNzIsIDU4MTgwLCA1ODE4OSwgNTgxOTksIDU4MjA4LCA1ODIxOCwgNTgyMjksIDU4MjM5LCAKKyAgICA1ODI0OCwgNTgyNTgsIDU4MjY5LCA1ODI3OSwgNTgyOTAsIDU4MzAyLCA1ODMxMywgNTgzMjMsIDU4MzMyLCA1ODM0MCwgCisgICAgNTgzNDcsIDU4MzU1LCA1ODM2NCwgNTgzNzIsIDU4MzgxLCA1ODM5MSwgNTg0MDAsIDU4NDA4LCA1ODQxNywgNTg0MjcsIAorICAgIDU4NDM2LCA1ODQ0NiwgNTg0NTcsIDU4NDY3LCA1ODQ3NiwgNTg0ODQsIDU4NDkzLCA1ODUwMywgNTg1MTIsIDU4NTIyLCAKKyAgICA1ODUzMywgNTg1NDMsIDU4NTUyLCA1ODU2MiwgNTg1NzMsIDU4NTgzLCA1ODU5NCwgNTg2MDYsIDU4NjE3LCA1ODYyNywgCisgICAgNTg2MzYsIDU4NjQ0LCA1ODY1MywgNTg2NjMsIDU4NjcyLCA1ODY4MiwgNTg2OTMsIDU4NzAzLCA1ODcxMiwgNTg3MjIsIAorICAgIDU4NzMzLCA1ODc0MywgNTg3NTQsIDU4NzY2LCA1ODc3NywgNTg3ODcsIDU4Nzk2LCA1ODgwNiwgNTg4MTcsIDU4ODI3LCAKKyAgICA1ODgzOCwgNTg4NTAsIDU4ODYxLCA1ODg3MSwgNTg4ODIsIDU4ODk0LCA1ODkwNSwgNTg5MTcsIDU4OTMwLCA1ODk0MiwgCisgICAgNTg5NTMsIDU4OTYzLCA1ODk3MiwgNTg5ODAsIDU4OTg3LCA1ODk5NSwgNTkwMDQsIDU5MDEyLCA1OTAyMSwgNTkwMzEsIAorICAgIDU5MDQwLCA1OTA0OCwgNTkwNTcsIDU5MDY3LCA1OTA3NiwgNTkwODYsIDU5MDk3LCA1OTEwNywgNTkxMTYsIDU5MTI0LCAKKyAgICA1OTEzMywgNTkxNDMsIDU5MTUyLCA1OTE2MiwgNTkxNzMsIDU5MTgzLCA1OTE5MiwgNTkyMDIsIDU5MjEzLCA1OTIyMywgCisgICAgNTkyMzQsIDU5MjQ2LCA1OTI1NywgNTkyNjcsIDU5Mjc2LCA1OTI4NCwgNTkyOTMsIDU5MzAzLCA1OTMxMiwgNTkzMjIsIAorICAgIDU5MzMzLCA1OTM0MywgNTkzNTIsIDU5MzYyLCA1OTM3MywgNTkzODMsIDU5Mzk0LCA1OTQwNiwgNTk0MTcsIDU5NDI3LCAKKyAgICA1OTQzNiwgNTk0NDYsIDU5NDU3LCA1OTQ2NywgNTk0NzgsIDU5NDkwLCA1OTUwMSwgNTk1MTEsIDU5NTIyLCA1OTUzNCwgCisgICAgNTk1NDUsIDU5NTU3LCA1OTU3MCwgNTk1ODIsIDU5NTkzLCA1OTYwMywgNTk2MTIsIDU5NjIwLCA1OTYyOSwgNTk2MzksIAorICAgIDU5NjQ4LCA1OTY1OCwgNTk2NjksIDU5Njc5LCA1OTY4OCwgNTk2OTgsIDU5NzA5LCA1OTcxOSwgNTk3MzAsIDU5NzQyLCAKKyAgICA1OTc1MywgNTk3NjMsIDU5NzcyLCA1OTc4MiwgNTk3OTMsIDU5ODAzLCA1OTgxNCwgNTk4MjYsIDU5ODM3LCA1OTg0NywgCisgICAgNTk4NTgsIDU5ODcwLCA1OTg4MSwgNTk4OTMsIDU5OTA2LCA1OTkxOCwgNTk5MjksIDU5OTM5LCA1OTk0OCwgNTk5NTgsIAorICAgIDU5OTY5LCA1OTk3OSwgNTk5OTAsIDYwMDAyLCA2MDAxMywgNjAwMjMsIDYwMDM0LCA2MDA0NiwgNjAwNTcsIDYwMDY5LCAKKyAgICA2MDA4MiwgNjAwOTQsIDYwMTA1LCA2MDExNSwgNjAxMjYsIDYwMTM4LCA2MDE0OSwgNjAxNjEsIDYwMTc0LCA2MDE4NiwgCisgICAgNjAxOTcsIDYwMjA5LCA2MDIyMiwgNjAyMzQsIDYwMjQ3LCA2MDI2MSwgNjAyNzQsIDYwMjg2LCA2MDI5NywgNjAzMDcsIAorICAgIDYwMzE2LCA2MDMyNCwgNjAzMzEsIDYwMzM2LCA2MDI5LCA2MDM0MywgMjY2ODgsIDYwMzQ4LCA2MDM1MywgMjY2OTMsIAorICAgIDYwMzU5LCAxNzMxOSwgMzE0NDksIDYwMzY0LCA2MDM3MCwgNjAzNzYsIDYwMzgzLCA2MDM5MCwgNjAzOTUsIDYwMzk5LCAKKyAgICA2MDQwMywgNjA0MTIsIDYwNDE4LCA2MDQzMCwgNjA0NDEsIDYwNDQ1LCAyOTM2LCA2MDA0LCA2MDQ1MCwgNjA0NTMsIAorICAgIDYwNDU1LCA2MDQ1OSwgNjA0NjMsIDYwNDY3LCAzNDA5NywgNjA0NzIsIDYwNDc2LCA2MDQ3OSwgNjA0ODQsIDYwNDg4LCAKKyAgICA2MDQ5NSwgNjA1MDEsIDYwNTA1LCA2MDUwOSwgMjY3MDMsIDYwNTEyLCA2MDUxOSwgNjA1MjgsIDYwNTM2LCA2MDU0NywgCisgICAgNjA1NTUsIDYwNTYzLCA2MDU3MCwgNjA1NzcsIDYwNTgzLCA2MDU5NCwgMjY3MDgsIDYwNTk5LCA2MDYxMCwgNjA2MjIsIAorICAgIDYwNjMzLCA2MDY0MSwgMjQ4NCwgNjA2NDYsIDYwNjU5LCA2MDY2MywgNjA2NzEsIDYwNjc2LCA2MDY4NCwgMTM5MDgsIAorICAgIDYwNjk1LCA2MDcwMSwgNjA3MDgsIDYwNzE2LCA2MDcyMiwgMjY3MTMsIDYwNzI3LCA3NTkyLCA1MDQ2NywgNjA3MzQsIAorICAgIDYwNzM3LCA2MDc0NSwgNjA3NTgsIDYwNzcxLCA2MDc4NCwgNjA3OTcsIDYwODA0LCA2MDgxNSwgNjA4MjQsIDM0MTAyLCAKKyAgICAzNDEwNywgNjA4MjksIDYwODMzLCA2MDg0MSwgNjA4NDgsIDYwODU3LCA2MDg2NSwgNjA4NzEsIDYwODgwLCA2MDg4OCwgCisgICAgNjA4OTYsIDYwOTAwLCA2MDkwOSwgNjA5MTgsIDYwOTI4LCA2MDk0MSwgNjA5NTQsIDYwOTY0LCAyNjcxOCwgNjA5NzAsIAorICAgIDYwOTc3LCA2MDk4MywgMjY3MjQsIDYwOTg4LCA2MDk5MSwgNjA5OTUsIDYxMDAzLCA2MTAxMiwgMzM4NDAsIDYxMDIwLCAKKyAgICA2MTAyOCwgNjEwMzUsIDYxMDQzLCA2MTA1MywgNjEwNjIsIDYxMDcxLCA2MTA4MCwgNjEwODgsIDYxMDk5LCA2MTEwOSwgCisgICAgNzE4NCwgMTc4MDIsIDYxMTE4LCA2MTEyMywgNjExMjgsIDYxMTMyLCA2MTEzNiwgNjExNDEsIDYxMTQ3LCA2MTE1MiwgCisgICAgNjExNTcsIDYxMTYzLCA2MTE2OCwgNjExNzMsIDE3NzY3LCA2MTE3OCwgNjExODUsIDYxMTkzLCA2MTIwMSwgNjEyMDYsIAorICAgIDYxMjEzLCA2MTIyMCwgNjEyMjQsIDYxMjI4LCA2MTIzNiwgNjEyNDQsIDI2NzMzLCA2MTI1MCwgNjEyNTYsIDYxMjY4LCAKKyAgICA2MTI3NCwgNjEyNzksIDYxMjkwLCA2MTMwMCwgNjEzMTAsIDYxMzIyLCA2MTMyOCwgNjEzMzgsIDI2NzM4LCA2MTM0NywgCisgICAgNjEzNTYsIDYxMzYyLCA2MTM3NCwgNjEzODUsIDYxMzkyLCA2MTM5NywgNjE0MDEsIDYxNDA5LCA2MTQxNSwgNjE0MjAsIAorICAgIDYxNDI1LCA2MTQzMiwgNjE0NDQsIDYxNDU0LCA2MTQ2MywgNjE0NzAsIDI3OTM3LCAxOTczMSwgNjE0NzYsIDYxNDgxLCAKKyAgICA2MTQ4NSwgNjE0ODksIDYxNDk0LCA2MTUwMCwgNjE1MTEsIDYxNTI0LCA2MTUyOSwgMjY3NDMsIDYxNTM0LCA2MTU0NiwgCisgICAgNjE1NTUsIDYxNTY4LCA2MTU3NSwgNjE1ODQsIDYxNTkyLCA2MTU5NywgNjE2MDMsIDE0ODQsIDYxNjA4LCA2MTYxMywgCisgICAgNjE2MTgsIDYxNjIzLCA2MTYyOSwgNjE2MzQsIDYxNjM5LCA2MTY0NSwgNjE2NTEsIDYxNjU2LCA2MTY2MCwgNjE2NjUsIAorICAgIDYxNjcwLCA2MTY3NSwgNTA5NzMsIDYxNjgwLCA2MTY4NSwgNjE2OTAsIDYxNjk1LCA2MTcwMSwgNjE3MDcsIDYxNzEyLCAKKyAgICA2MTcxNiwgNjE3MjEsIDYxNzI2LCA2MTczMSwgNjE3MzYsIDYxNzQxLCA2MTc0NSwgNjE3NTEsIDYxNzU2LCA2MTc2NSwgCisgICAgNjE3NzAsIDYxNzc1LCA2MTc4MCwgNjE3ODUsIDYxNzg5LCA2MTc5NiwgNjE4MDIsIDEzNjA1LCAxMzYxMiwgMzc4NzIsIAorICAgIDYxODA3LCA2MTc1NywgNjE4MDksIDI2NzUyLCA2MTgxMiwgNjE4MjEsIDYxODI3LCA0MjYzLCAyNjc1NywgNjE4MzEsIAorICAgIDYxODM3LCA2MTg0MywgNjE4NDgsIDYxODUyLCA2MTg1OSwgNjE4NjQsIDYxODc0LCA2MTg4MywgNjE4ODcsIDYxODkzLCAKKyAgICA2MTg5OSwgNjE5MDUsIDYxOTA5LCA2MTkxNywgNjE5MjQsIDYxOTMyLCA2MTk0MCwgMjY3NjIsIDYxOTQ3LCA2MTk1MCwgCisgICAgNjE5NTcsIDYxOTYyLCA2MTk2NiwgNjE5NzIsIDYxOTc3LCA2MTk4MSwgNjE5OTAsIDYxOTk4LCA2MjAwNCwgNjIwMDksIAorICAgIDI3NTQ0LCA2MjAxNiwgNjIwMjMsIDYyMDI5LCA2MjAzNCwgNjIwNDAsIDYyMDQ3LCA2MjA1MywgMjY0NzUsIDIyNjg4LCAKKyAgICA2MjA1OSwgNjIwNjQsIDYyMDcwLCA2MjA4MiwgNjE3OTAsIDYxNzk3LCA2MjA5MiwgNjIwOTcsIDYyMTA0LCA2MjExMSwgCisgICAgNjIxMTcsIDYyMTI4LCA2MjEzMywgNjk2NSwgNjIxNDEsIDYyMTQ0LCA2MjE1MCwgNjIxNTQsIDYyMTU4LCA2MjE2MSwgCisgICAgNjIxNjcsIDI2NTcxLCA0MjgzLCA4MzYsIDEwNjIxLCA2MjE3NCwgNjIxODAsIDYyMTg2LCA2MjE5MiwgNjIxOTgsIDYyMjA0LCAKKyAgICA2MjIxMCwgNjIyMTYsIDYyMjIyLCA2MjIyNywgNjIyMzIsIDYyMjM3LCA2MjI0MiwgNjIyNDcsIDYyMjUyLCA2MjI1NywgCisgICAgNjIyNjIsIDYyMjY3LCA2MjI3MiwgNjIyNzcsIDYyMjgyLCA2MjI4NywgNjIyOTMsIDYyMjk4LCA2MjMwMywgNjIzMDksIAorICAgIDYyMzE0LCA2MjMxOSwgNjIzMjUsIDYyMzMxLCA2MjMzNywgNjIzNDMsIDYyMzQ5LCA2MjM1NSwgNjIzNjEsIDYyMzY3LCAKKyAgICA2MjM3MywgNjIzNzgsIDYyMzgzLCA2MjM4OSwgNjIzOTQsIDYyMzk5LCA2MjQwNSwgNjI0MTAsIDYyNDE1LCA2MjQyMCwgCisgICAgNjI0MjUsIDYyNDMwLCA2MjQzNSwgNjI0NDAsIDYyNDQ1LCA2MjQ1MCwgNjI0NTUsIDYyNDYwLCA2MjQ2NSwgNjI0NzEsIAorICAgIDYyNDc2LCA2MjQ4MSwgNjI0ODYsIDYyNDkyLCA2MjQ5NywgNjI1MDIsIDYyNTA3LCA2MjUxMiwgNjI1MTgsIDYyNTIzLCAKKyAgICA2MjUyOCwgNjI1MzMsIDYyNTM4LCA2MjU0MywgNjI1NDgsIDYyNTUzLCA2MjU1OCwgNjI1NjMsIDYyNTY4LCA2MjU3MywgCisgICAgNjI1NzgsIDYyNTgzLCA2MjU4OCwgNjI1OTMsIDYyNTk4LCA2MjYwMywgNjI2MDgsIDYyNjEzLCA2MjYxOSwgNjI2MjQsIAorICAgIDYyNjI5LCA2MjYzNCwgNjI2MzksIDYyNjQ0LCA2MjY0OSwgNjI2NTQsIDE4NDYsIDEzOCwgNjI2NTksIDYyNjYzLCA2MjY2NywgCisgICAgNjI2NzIsIDYyNjgwLCA2MjY4NCwgNjI2OTEsIDYyNjk5LCA2MjcwMywgNjI3MTYsIDYyNzIwLCA2MjcyMywgNjI3MjgsIAorICAgIDYyNzMyLCA2MjczNywgNjI3NDEsIDYyNzQ5LCA2Mjc1MywgMTczMjcsIDYyNzU4LCA2Mjc2MiwgNjI3NjYsIDYyNzY5LCAKKyAgICA2Mjc3NywgNjI3ODIsIDYyNzg5LCA2Mjc5NSwgNjI4MDEsIDYyODA2LCA2MjgxNCwgNTYyNzYsIDYyODIxLCA2MjgyNiwgCisgICAgNjI4MzEsIDYyODM1LCA2MjgzOSwgNjI4NDIsIDYyODQ3LCA2Mjg1MiwgNjI4NTYsIDYyODU5LCA2Mjg2NSwgNjI4NjksIAorICAgIDYyODc5LCA2Mjg4OCwgNjI4OTEsIDYyOTA0LCA2MjkxMiwgNjI5MjAsIDYyOTMwLCA2Mjk0MywgNjI5NTAsIDYyOTYxLCAKKyAgICA2Mjk2NywgNjI5NzIsIDYyOTc3LCA2Mjk4MywgNjI5OTIsIDYxNTM2LCA2MzAwMCwgNjMwMDYsIDYzMDE0LCA2MzAxOCwgCisgICAgNjMwMjIsIDYzMDI4LCA2MzAzNiwgNjMwNDgsIDYzMDYwLCA2MzA2NywgNjMwNzEsIDYzMDgyLCA2MzA5MCwgNjMwOTcsIAorICAgIDYzMTA5LCA2MzExNywgNjMxMjUsIDYzMTMyLCA2MzEzOCwgNjMxNDgsIDYzMTU3LCA2MzE2MiwgNjMxNzIsIDYzMTc2LCAKKyAgICA2MzE4MCwgNjMxOTAsIDYzMTk3LCA2MzIwOSwgNjMyMjEsIDYzMjMwLCA2MDY0OSwgNjMyMzcsIDYzMjQ4LCA2MzI2MiwgCisgICAgNjMyNzAsIDYzMjgwLCA2MzI4NywgNjMyOTUsIDYzMzA0LCA2MzMxMiwgNjMzMjIsIDYzMzMxLCA2MzM0MiwgNjMzNTQsIAorICAgIDYzMzYzLCA2MzM3MywgNjMzODAsIDYzMzg5LCA2MzQwNCwgNjM0MTMsIDYzNDI2LCA2MzQ0MSwgNjM0NDUsIDYzNDU3LCAKKyAgICA2MzQ2OCwgNjM0NzksIDYzNDkwLCA2MzUwMCwgNjM1MTEsIDYzNTE5LCA2MzUyNSwgNjM1MzUsIDYzNTQxLCA2MzU0NiwgCisgICAgNjM1NTIsIDYzNTU4LCA2MzU2MywgNjM1NzAsIDc0NjksIDEzOTI4LCA2MzU3NiwgNjM1ODEsIDYzNTg4LCA2MzU5NCwgCisgICAgNjM1OTksIDYzNjAzLCA2MzYwNiwgNjM2MDksIDYzNjExLCA2MzYxOCwgNjM2MjksIDYzNjM0LCA2MzYzOCwgNjM2NDQsIAorICAgIDYzNjQ5LCA2MzY1NywgNTY3MjAsIDU2NzMwLCA2MzY2MywgNjM2NzMsIDYzNjgwLCA2MzY4NiwgNjM2OTEsIDYzNzAwLCAKKyAgICA2MzcwNywgNjM3MTUsIDYzNzI0LCA2MzczMCwgNjM3MzYsIDYzNzQzLCA2Mzc1MCwgNjM3NTUsIDYzNzU5LCA2Mzc2NCwgCisgICAgNjM3NjksIDYzNzc0LCA2Mzc3OCwgNjI3MTEsIDYzNzg3LCA2Mzc5MSwgNjM4MDIsIDYzODEyLCAxMzkzNywgNjM4MjMsIAorICAgIDYzODMxLCAxMzk0OSwgNjM4MzgsIDIyNTk4LCA2Mzg0MiwgNjM4NDYsIDYzODUxLCA2Mzg2OCwgNjM4ODAsIDgxNjksIAorICAgIDYzODkyLCA2Mzg5NywgNjM5MDIsIDYzOTA3LCA2MzkxMSwgNjM5MTQsIDYzOTE5LCA2MzkyNCwgNjM5MzAsIDYzOTM1LCAKKyAgICA0MDc1LCAxNzM3OCwgNjM5NDAsIDYzOTQ1LCA2Mzk1MSwgNjM5NTgsIDYzOTYzLCA2Mzk2OCwgNjM5NzQsIDYzOTgwLCAKKyAgICA2Mzk4NiwgNjM5OTEsIDYzOTk3LCA2NDAwMSwgNjQwMTUsIDY0MDIzLCA2NDAzMSwgNjQwMzcsIDY0MDQyLCA2NDA0OSwgCisgICAgNjQwNTQsIDY0MDU5LCA2NDA2NywgNjQwNzIsIDY0MDc4LCA2NDA4MywgNjQwODgsIDY0MDkyLCA2NDA5NSwgNjQxMTMsIAorICAgIDY0MTMyLCA2NDE0NSwgNjQxNTksIDY0MTc1LCA2NDE4MiwgNjQxODksIDY0MTk1LCA2NDIwMiwgNjQyMDcsIDY0MjEzLCAKKyAgICA2NDIxOSwgNjQyMjQsIDY0MjI5LCA2NDI0NSwgODE4MiwgNjQyNTksIDY0MjY2LCA2NDI3MCwgNjQyNzMsIDY0Mjc4LCAKKyAgICA2NDI4MywgNjQyOTAsIDY0Mjk1LCA2NDMwMCwgNjQzMDUsIDY0MzA5LCA2NDMxNywgOTA5MCwgNjQzMjYsIDY0MzMxLCAKKyAgICA2NDMzNywgOTEwMSwgNjQzNDIsIDY0MzQ1LCA2NDM1MCwgNjQzNjAsIDY0MzY5LCA2NDM3NCwgNjQzODIsIDY0Mzg5LCAKKyAgICA2NDQwMCwgNjQ0MTAsIDY0NDE1LCA2NDQyMCwgNjQ0MjcsIDY0NDMzLCA2NDQzOCwgNjQ0NDUsIDY0NDU0LCA2NDQ2MiwgCisgICAgNjQ0NjgsIDY0NDc1LCA2NDQ4MSwgNjQ0ODUsIDEzNDUxLCAyOTEwLCA2NDQ5MCwgNjQ0OTQsIDY0NTAwLCA2NDUwNiwgCisgICAgNjQ1MTMsIDY0NTE3LCA2NDUzOCwgNjQ1NjAsIDY0NTc2LCA2NDU5MywgNjQ2MTIsIDY0NjIxLCA2NDYzMSwgNjQ2MzgsIAorICAgIDY0NjQ1LCAyMjUxNywgNjQ2NTEsIDY0NjU1LCA2NDY2MywgNjQ2NjksIDY0Njc3LCA2NDY4MSwgNjQ2ODksIDY0Njk2LCAKKyAgICA2NDcwMCwgNjQ3MDYsIDY0NzEyLCA2NDcxNywgMzM3NSwgMzQzMDIsIDY0NzIzLCA2NDcyNywgNjQ3MzEsIDY0NzM1LCAKKyAgICA2NDc0MCwgNjQ3NDUsIDY0NzUwLCA2NDc1NiwgNjQ3NjEsIDY0NzY3LCA2NDc3MiwgNjQ3NzcsIDY0NzgxLCA2NDc4NiwgCisgICAgMzQzMTcsIDY0NzkwLCA2NDc5NSwgNjQ4MDMsIDY0ODA3LCA2NDgxMiwgNjQ4MTksIDY0ODI4LCA2NDgzNCwgNjQ4NDEsIAorICAgIDY0ODQ1LCA2NDg1MiwgNjQ4NjEsIDY0ODY2LCA2NDg3NCwgNjQ4ODMsIDY0ODg5LCA2NDg5NCwgNjQ4OTksIDY0OTA1LCAKKyAgICA2NDkxMSwgNjQ5MTYsIDY0OTIwLCA2NDkyNCwgNjQ5MjcsIDY0OTM1LCA2NDk0NSwgNjQ5NTAsIDMyMDU3LCA2NDk1OCwgCisgICAgNjQ5NzAsIDY0OTc0LCA2NDk4NiwgNjQ5OTcsIDY1MDA0LCA2NTAxMCwgNjUwMTcsIDY1MDI5LCA2NTAzNiwgNjUwNDIsIAorICAgIDE3NDM5LCA2NTA0NiwgNjUwNTIsIDY1MDU4LCA2NTA2MywgNjUwNjgsIDUwODQsIDY1MDczLCA2NTA3OSwgNjUwODcsIAorICAgIDY1MDk2LCA2NTEwMCwgNjUxMDYsIDY0NzgyLCAyNDk3MSwgNjUxMTEsIDY1MTEzLCA2NTExOCwgNjUxMjMsIDY1MTI4LCAKKyAgICA2NTEzMywgNjUxMzgsIDY1MTQzLCA2NTE0OCwgNjUxNTMsIDY1MTU4LCA2NTE2MywgNjUxNjgsIDY1MTczLCA2NTE3OCwgCisgICAgNjUxODMsIDY1MTg5LCA2NTE5NCwgNjUxOTksIDY1MjA0LCA2NTIwOSwgNjUyMTQsIDY1MjE5LCA2NTIyNCwgNjUyMjksIAorICAgIDY1MjM1LCA2NTI0MSwgNjUyNDcsIDY1MjUyLCA2NTI1NywgNjUyNjksIDY1Mjc0LCAxODUyLCA2NywgNjUyNzksIDY1Mjg0LCAKKyAgICAyNjc3MiwgMjY3NzcsIDI2NzgyLCAyNjc4OCwgMjY3OTMsIDY1Mjg4LCAyNjc5OCwgNjUzMTAsIDY1MzEyLCA2NTMxNiwgCisgICAgNjUzMjAsIDY1MzI1LCA2NTMyOSwgMjY4MDIsIDY1MzMzLCAyNjgwNywgNjUzNDEsIDY1MzQ0LCAyNjgxMiwgMTgxNzksIAorICAgIDY1MzUzLCA2NTM1NywgMTQxNSwgNjUzNjIsIDI2ODIzLCA2NTM2NSwgNjUzNzAsIDIxMzU0LCAyMTM2NCwgNjUzNzUsIAorICAgIDY1Mzc5LCA2NTM4NCwgNjUzOTAsIDY1Mzk1LCA2NTQwNCwgNjU0MDksIDY1NDE2LCA2NTQyMiwgNjU0MjcsIDY1NDMyLCAKKyAgICA2NTQzNywgNjU0NDUsIDI2ODI4LCAxMTEwLCA2NTQ1MiwgNjU0NTgsIDY1NDYzLCA2NTQ2OCwgNjU0NzMsIDY1NDc5LCAKKyAgICA2NTQ4NCwgNjU0OTEsIDY1NDk3LCA2NTUwMiwgNjU1MTAsIDY1NTE2LCAxMzk1OSwgNjU1MjMsIDI5Mjk2LCA2NTUzNiwgCisgICAgNjU1NDEsIDY1NTQ3LCA2NTU2MCwgNjU1NjQsIDY1NTczLCA2NTU4MCwgNjU1ODYsIDY1NTk0LCA2NTYwMywgNjU2MTAsIAorICAgIDY1NjE2LCAyNjgzMiwgNjU2MTksIDY1NjI2LCA2NTYzMiwgNjU2MzYsIDY1NjM5LCA2NTY0NywgNjU2NjEsIDY1NjY4LCAKKyAgICAyNjgzNywgNjU2NzQsIDI2ODQyLCA2NTY4MSwgMjg0MjIsIDY1NjkxLCA2NTY5NiwgNjU3MDAsIDE3NzE3LCA2NTcwNSwgCisgICAgNjU3MTAsIDI2ODQ3LCA1NDAxMywgNjU3MTQsIDY1NzE5LCA2NTcyNSwgNjU3MzEsIDY1NzM4LCA2NTc0NCwgNjU3NDksIAorICAgIDY1NzU0LCA2NTc2MywgNjU3NzUsIDY1NzkwLCAyNzA2NywgNjU3OTYsIDEzMTE3LCAyNjg1MSwgNjU4MDAsIDY1ODA3LCAKKyAgICAyNjg1NiwgNjU4MTMsIDY1ODIyLCA2NTgyOSwgNjU4MzgsIDY1ODQ0LCA2NTg0OSwgNjU4NTUsIDI2ODYxLCA2NTg2MCwgCisgICAgNjU4NjksIDY1ODc4LCA2NTg4NSwgNjU4OTEsIDY1ODk3LCA2NTkwNSwgNjU5MDksIDI2ODY2LCA2NTkxMiwgMjY4NzIsIAorICAgIDI2ODc4LCA2NTkxNywgNjU5MjUsIDY1OTM1LCAyNjg4MywgNjU5MzksIDY1OTQxLCA2NTk0NSwgNjU5NTAsIDY1OTU0LCAKKyAgICA2NTk1OCwgNjU5NjQsIDY1OTY5LCA2NTk3MywgNjU5NzgsIDI5MTUsIDY1OTgyLCA2NTk4OSwgNjU5OTMsIDY2MDAyLCAKKyAgICA2NjAxMCwgNjYwMTcsIDY2MDIyLCA2NjAyNywgNjYwMzEsIDY2MDM1LCA2NjAzOCwgNjYwNDQsIDY2MDUyLCA2NjA1OCwgCisgICAgNjYwNjIsIDY2MDY3LCA2NjA3NCwgNjYwODAsIDI4Nzk5LCA2NjA4NSwgNjYwODgsIDY2MDkzLCA2NjA5NywgNjYxMDIsIAorICAgIDY2MTA3LCA2NjExMSwgNjYxMTksIDIxMzczLCAyMTM4MiwgNjYxMjUsIDY2MTMxLCA2NjEzNywgNjYxNDIsIDY2MTQ2LCAKKyAgICA2NjE0OSwgNjYxNTksIDY2MTY0LCA2NjE3MCwgNjYxNzYsIDY2MTg0LCA2NjE4OSwgMjg0MzgsIDY2MTkzLCA2NjIwMSwgCisgICAgNjYyMDcsIDY2MjEyLCA2NjIxNywgNTA2NTMsIDI4NDQ0LCA2NjIyMywgNjYyMjgsIDY2MjMyLCA2NjIzNywgNjYyNDIsIAorICAgIDY2MjQ3LCA2NjI1MSwgNjYyNTYsIDY2MjYxLCA2NjI2NywgNjYyNzIsIDY2Mjc3LCA2NjI4MywgNjYyODksIDY2Mjk0LCAKKyAgICA2NjI5OCwgNjYzMDMsIDY2MzA4LCA2NjMxMywgNjYzMTcsIDY2MzIyLCA2NjMyNywgNjYzMzIsIDY2MzM4LCA2NjM0NCwgCisgICAgNjYzNTAsIDY2MzU1LCA2NjM1OSwgNjYzNjQsIDY2MzY5LCA2NjM3MywgNjYzNzgsIDY2MzgzLCA2NjM4OCwgNjYzOTIsIAorICAgIDI2ODg3LCA2NjQwMCwgNjY0MDQsIDY2NDEyLCAxODUyMSwgNjY0MjMsIDY2NDI5LCA2NjQzNiwgNjY0NDEsIDY2NDUwLCAKKyAgICA2NjQ1NSwgNjY0NTksIDY2NDY0LCA2NjQ3MiwgNjY0ODAsIDY2NDg3LCA1NjQyMiwgNjY0OTMsIDY2NTAxLCA2NjUwOCwgCisgICAgNjY1MTksIDY2NTI1LCAyNjg5NywgNjY1MjgsIDY2NTM1LCAzMjE4MywgNjY1MzksIDY2NTQ0LCA2NjU0OSwgNjg3NywgCisgICAgNjY1NTMsIDY2NTYxLCA2NjU2OCwgNjY1NzUsIDY2NTgxLCA2NjQ0NSwgNjY1OTUsIDY2NjAxLCA2NjYwNSwgNjY2MDgsIAorICAgIDY2NjE2LCA2NjYyMywgNjY2MjgsIDY2NjQxLCA2NjY0OCwgNjY2NTMsIDY2NjU4LCA2NjY2MSwgNjY2NjgsIDY2NjcyLCAKKyAgICA2NjY4MiwgNjY2OTIsIDY2NzAxLCA2NjcxMiwgNjY3MTcsIDY2NzIxLCAyODgxMywgMTc2NDEsIDMyNjI5LCA2NjcyOSwgCisgICAgNjY3MzQsIDY2NzM5LCA2Njc0NCwgNjY3NDksIDY2NzU0LCA2Njc1OSwgNjY3NjMsIDY2NzY4LCA2Njc3MywgNjY3NzgsIAorICAgIDY2NzgzLCA2Njc4OCwgNjY3OTMsIDY2Nzk3LCA2NjgwMiwgNjY4MDcsIDY2ODExLCA2NjgxNSwgNjY4MTksIDY2ODIzLCAKKyAgICA2NjgyOCwgNjY4MzMsIDY2ODM3LCA2Njg0MiwgNjY4NDYsIDY2ODUwLCA2Njg1NSwgNjY4NjAsIDY2ODY1LCA2Njg3MCwgCisgICAgNjY4NzQsIDY2ODc5LCA2Njg4NCwgNjY4ODgsIDY2ODkzLCA2Njg5OCwgNjY5MDMsIDY2OTA4LCA2NjkxMywgNjY5MTgsIAorICAgIDY2OTIzLCA2NjkyOCwgNjY5MzMsIDY2OTM4LCA2Njk0MywgNjY5NDgsIDY2OTUzLCA2Njk1OCwgNjY5NjMsIDY2OTY4LCAKKyAgICA2Njk3MywgNjY5NzgsIDY2OTgzLCA2Njk4OCwgNjY5OTIsIDY2OTk3LCA2NzAwMiwgNjcwMDcsIDY3MDEyLCA2NzAxNywgCisgICAgNjcwMjIsIDY3MDI3LCA2NzAzMiwgNjcwMzcsIDY3MDQyLCA2NzA0NywgNjcwNTEsIDY3MDU2LCA2NzA2MCwgNjcwNjUsIAorICAgIDY3MDcwLCA2NzA3NSwgNjcwODAsIDY3MDg1LCA2NzA5MCwgNjcwOTUsIDY3MTAwLCA2NzEwNSwgNjcxMDksIDY3MTEzLCAKKyAgICA2NzExOCwgNjcxMjMsIDY3MTI3LCA2NzEzMiwgNjcxMzcsIDY3MTQxLCA2NzE0NiwgNjcxNTEsIDY3MTU2LCA2NzE2MSwgCisgICAgNjcxNjUsIDY3MTcwLCA2NzE3NSwgNjcxNzksIDY3MTg0LCA2NzE4OCwgNjcxOTIsIDY3MTk2LCA2NzIwMCwgNjcyMDUsIAorICAgIDY3MjA5LCA2NzIxMywgNjcyMTcsIDY3MjIxLCA2NzIyNSwgNjcyMjksIDY3MjMzLCA2NzIzNywgNjcyNDEsIDY3MjQ2LCAKKyAgICA2NzI1MSwgNjcyNTYsIDY3MjYxLCA2NzI2NiwgNjcyNzEsIDY3Mjc2LCA2NzI4MSwgNjcyODYsIDY3MjkxLCA2NzI5NSwgCisgICAgNjcyOTksIDY3MzAzLCA2NzMwNywgNjczMTEsIDY3MzE1LCA2NzMyMCwgNjczMjQsIDY3MzI5LCA2NzMzMywgNjczMzgsIAorICAgIDY3MzQzLCA2NzM0NywgNjczNTEsIDY3MzU2LCA2NzM2MCwgNjczNjQsIDY3MzY4LCA2NzM3MiwgNjczNzYsIDY3MzgwLCAKKyAgICA2NzM4NCwgNjczODgsIDY3MzkyLCA2NzM5NiwgNjc0MDAsIDY3NDA0LCA2NzQwOCwgNjc0MTIsIDY3NDE3LCA2NzQyMiwgCisgICAgNjc0MjYsIDY3NDMwLCA2NzQzNCwgNjc0MzgsIDY3NDQyLCA2NzQ0NiwgNjc0NTEsIDY3NDU1LCA2NzQ1OSwgNjc0NjMsIAorICAgIDY3NDY3LCA2NzQ3MSwgNjc0NzUsIDY3NDgwLCA2NzQ4NCwgNjc0ODksIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCAKKyAgICA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCA2NzUzMywgNjc1MzgsIDY3NTQyLCA2NzU0NiwgCisgICAgNjc1NTAsIDY3NTU0LCA2NzU1OCwgNjc1NjIsIDY3NTY2LCA2NzU3MCwgNjc1NzQsIDY3NTc4LCA2NzU4MiwgNjc1ODcsIAorICAgIDY3NTkxLCA2NzU5NSwgNjc2MDAsIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCAKKyAgICA2NzYzMywgNjc2MzcsIDY3NjQyLCA2NzY0NiwgNjc2NTEsIDY3NjU1LCA2NzY2MCwgNjc2NjQsIDY3NjY5LCA2NzY3MywgCisgICAgNjc2NzksIDY3Njg0LCA2NzY4OCwgNjc2OTMsIDY3Njk3LCA2NzcwMiwgNjc3MDYsIDY3NzExLCA2NzcxNSwgNjc3MjAsIAorICAgIDE1MDMsIDY3NzI0LCAxNzQxLCAxNzQ2LCA2NzcyOCwgNjc3MzIsIDI3MTEsIDY3NzM2LCAxMzg0LCA2Nzc0MSwgMTM1MCwgCisgICAgNjc3NDUsIDY3NzQ5LCA2Nzc1NiwgNjc3NjMsIDY3Nzc3LCAyNzI3LCA1MTU5LCA2Nzc4NiwgNjc3OTQsIDY3ODAxLCAKKyAgICA2NzgwOCwgNjc4MjEsIDY3ODM0LCA2Nzg0NSwgNjc4NTAsIDY3ODU3LCA2Nzg2OSwgMzcwMywgOTE2MiwgNjc4NzMsIAorICAgIDY3ODc4LCA2Nzg4NywgNjc4OTcsIDY3OTAyLCA2NzkwNiwgNjc5MTEsIDY3OTE4LCA2NzkyNCwgNjc5MzYsIDEzNTUsIAorICAgIDExNjg4LCA2Nzk0NiwgNjc5NTIsIDY3OTY2LCA2Nzk3OCwgNjc5ODcsIDY3OTk2LCA2ODAwNSwgNjgwMTMsIDY4MDI0LCAKKyAgICA2ODAzMiwgMzc0MiwgNjgwNDIsIDY4MDUxLCA2ODA1NywgNjgwNjQsIDI4OTE5LCA2ODA2OSwgMjc1NSwgMTAzMTYsIAorICAgIDY4MDczLCA2ODA4MCwgNjgyOCwgNjgwODksIDI3NjAsIDI2NDk1LCA2ODA5NSwgNjgxMDIsIDY4MTA4LCA2ODExNSwgCisgICAgNjgxMjEsIDY4MTI4LCA2ODEzOCwgNjgxNDcsIDY4MTU4LCA2ODE2NSwgNjgxNzEsIDY4MTgxLCA2ODE4OSwgNjgxOTUsIAorICAgIDY4MjEwLCA2ODIxNiwgNjgyMjEsIDY4MjI4LCA2ODIzMSwgNjgyMzcsIDY4MjQ0LCA2ODI1MCwgNjgyNTgsIDY4MjY3LCAKKyAgICA2ODI3NSwgNjgyODEsIDY4MjkwLCAzMzg0MiwgNjgzMDQsIDY4MzA5LCAxMTcwOSwgNjgzMTUsIDY4MzI4LCA2ODMzNywgCisgICAgNjgzNDUsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIDY4MzYzLCA2ODM3MCwgNjgzNzcsIDY4Mzg1LCA2ODM5MywgNjg0MDIsIAorICAgIDY4NDEwLCAxMTY0NSwgNjg0MTgsIDY4NDIzLCA2ODQyNywgNjg0MzksIDY4NDQ2LCA2ODQ1NSwgNzkzLCA2ODQ2NSwgMjc3NiwgCisgICAgNjg0NzQsIDY4NDc4LCA2ODQ4NCwgNjg0OTcsIDY4NTA5LCA2ODUxOSwgNjg1MjgsIDY4NTQwLCA2ODU0OCwgNjg1NTcsIAorICAgIDY4NTY4LCA2ODU3OSwgNjg1ODksIDY4NTk5LCA2ODYwOCwgNjg2MTYsIDg4MTEsIDY4NjIzLCA2ODYyNywgNjg2MzIsIAorICAgIDY4NjM3LCA2ODY0MywgMTM2MCwgOTIxNywgNjg2NTAsIDY4NjYxLCA2ODY3MCwgNjg2NzgsIDY4Njg3LCA2ODY5NSwgCisgICAgNjg3MTEsIDY4NzIyLCA2ODczOCwgNjg3NDgsIDY4NzY5LCA2ODc4MiwgNjg3OTUsIDY4ODAwLCA2ODgwNiwgMjIwODQsIAorICAgIDY4ODEyLCA2ODgxNSwgNjg4MjIsIDY4ODMyLCA2MTM5LCA2ODgzOSwgNjg4NDQsIDY4ODQ5LCA2ODg1NywgNzUxNywgNzUyNiwgCisgICAgNjg4NjUsIDY4ODc2LCAyNzg0LCAyNzg5LCA2ODg4MiwgODQxOSwgNjg4ODgsIDY4ODk1LCA2ODkwMiwgNjg5MTUsIDIxOTMsIAorICAgIDUwLCA2ODkyMCwgNjg5MjUsIDY4OTM1LCA2ODk0MSwgNjg5NDUsIDY4OTUwLCA2ODk1NCwgMjgxMiwgNjg5NjYsIDY4OTc0LCAKKyAgICA2ODk4NSwgNjg5OTYsIDY5MDA1LCA2OTAxMCwgNjkwMTYsIDY5MDIxLCA2OTAzMSwgNjkwNDEsIDY5MDQ2LCA2OTA1MiwgCisgICAgNjkwNTcsIDY5MDY2LCAxNzY3NCwgNjkwNzAsIDM4MDQsIDEyLCA2OTA3NSwgNjkwODIsIDc2NiwgNjkwODgsIDY5MDkzLCAKKyAgICA1Mjg3MywgNjkwOTgsIDY5MTAzLCA2OTEwOSwgNjkxMTcsIDY5MTIyLCA2OTEyOSwgNjkxMzUsIDMwODY5LCAzMzc0MCwgCisgICAgNjkxNDEsIDI4MTYsIDMyLCA2OTE1MSwgNjkxNjQsIDY5MTcyLCA2OTE3NywgNjkxODMsIDI4MzgsIDI1NjM5LCA2OTE4OCwgCisgICAgNjkxOTYsIDY5MjAzLCA2OTIwOCwgNTA4OTUsIDUzNjk0LCA2OTIxNywgMTY4NiwgMTc5NSwgNjkyMjIsIDY5MjI3LCAKKyAgICA2OTIzNCwgMTc5OSwgMjM3LCA2OTI0MSwgNjkyNDcsIDY5MjUyLCA2OTI1OSwgMTgwMywgNjkyNjQsIDY5MjcwLCA2OTI3NSwgCisgICAgNjkyODcsIDQyNTAsIDY5Mjk3LCAxODEwLCA2OTMwMywgNjkzMDgsIDY5MzE1LCA2OTMyMiwgNjkzMzcsIDY5MzQ0LCAKKyAgICA2OTM1MiwgNjkzNTYsIDY5MzYwLCA2OTM3MiwgNjkzNzcsIDY5MzgxLCAyMzI3MiwgMzgzMCwgNjkzODUsIDY5Mzk2LCAKKyAgICA2OTQwMCwgNjk0MDQsIDY5NDEwLCA2OTQxNCwgNjk0MjMsIDY5NDI3LCA2OTQzOCwgNjk0NDIsIDIyMzgsIDY5NDQ2LCAKKyAgICA2OTQ0OCwgMjkzNSwgNzE4OSwgNjk0NTYsIDY5NDYxLCA2OTQ2NSwgNjk0NzQsIDY5NDgwLCAyOTA1LCAxMzYyMiwgNjk0ODQsIAorICAgIDY5NDk3LCA2OTUxNSwgNjk1MjAsIDY5NTI4LCA2OTUzNiwgNjk1NDYsIDY5NTU4LCA2OTU3MSwgNjk1NzgsIDY5NTk0LCAKKyAgICA2OTYwMSwgNjk2MDcsIDk1OCwgNjk2MTQsIDY5NjIxLCA2OTYzMSwgNjk2NDAsIDY5NjUyLCAzNDcwNiwgNjk2NjAsIDI5MTksIAorICAgIDkzOTEsIDY5NjYzLCA2OTY3MSwgNjk2NzUsIDI5MjMsIDY5Njc5LCAxNzUyMywgNTI5NDYsIDM1MTQsIDY5NjgzLCAyOTI5LCAKKyAgICA2OTY4NywgNjk2OTcsIDY5NzAzLCA2OTcwOSwgNjk3MTUsIDY5NzIxLCA2OTcyNywgNjk3MzMsIDY5NzM5LCA2OTc0NSwgCisgICAgNjk3NTEsIDY5NzU3LCA2OTc2MywgNjk3NjksIDY5Nzc1LCA2OTc4MSwgNjk3ODcsIDY5NzkzLCA2OTc5OSwgNjk4MDUsIAorICAgIDY5ODExLCA2OTgxNywgNjk4MjMsIDY5ODI5LCA2OTgzNSwgNjk4NDEsIDY5ODQ3LCA2OTg1NCwgNjk4NjEsIDY5ODY3LCAKKyAgICA2OTg3MywgNjk4NzksIDY5ODg1LCA2OTg5MSwgNjk4OTcsIDEzNjUsIDEyNjkyLCA5NDExLCA2OTkwMywgNjk5MDgsIAorICAgIDY5OTEzLCA2OTkxOCwgNjk5MjMsIDY5OTI4LCA2OTkzMywgNjk5MzgsIDY5OTQzLCA2OTk0OCwgNjk5NTMsIDY5OTU4LCAKKyAgICA2OTk2MywgNjk5NjgsIDY5OTczLCA2OTk3OCwgNjk5ODMsIDY5OTg4LCA2OTk5MywgNjk5OTgsIDcwMDAzLCA3MDAwOCwgCisgICAgNzAwMTMsIDcwMDE4LCA3MDAyMywgNzAwMjgsIDcwMDM0LCA3MDAzOSwgNzAwNDQsIDcwMDUwLCA3MDA1NSwgNzAwNjEsIAorICAgIDcwMDY2LCA3MDA3MSwgNzAwNzcsIDcwMDgyLCA3MDA4NywgNzAwOTIsIDcwMDk3LCA3MDEwMiwgNzAxMDcsIDcwMTEyLCAKKyAgICA3MDExNywgNjk2OTgsIDY5NzA0LCA2OTcxMCwgNjk3MTYsIDY5NzIyLCA2OTcyOCwgNjk3MzQsIDY5NzQwLCA2OTc0NiwgCisgICAgNjk3NTIsIDY5NzU4LCA2OTc2NCwgNjk3NzAsIDY5Nzc2LCA2OTc4MiwgNzAxMjMsIDY5Nzg4LCA2OTc5NCwgNjk4MDAsIAorICAgIDcwMTI5LCA2OTgwNiwgNjk4MTIsIDY5ODE4LCA2OTgyNCwgNjk4MzAsIDY5ODM2LCA2OTg0MiwgNjk4NjIsIDcwMTM1LCAKKyAgICA3MDE0MSwgNjk4NjgsIDcwMTQ3LCA2OTg3NCwgNjk4ODAsIDY5ODg2LCA2OTg5MiwgNjk4OTgsIDI5NTAsIDI5NTUsIAorICAgIDcwMTUzLCA3MDE1OCwgNzAxNjEsIDcwMTY3LCA3MDE3MywgNzAxODAsIDcwMTg1LCA3MDE5MCwgMjI0MywgCiB9OwogCiAvKiBjb2RlLT5uYW1lIHBocmFzZWJvb2sgKi8KICNkZWZpbmUgcGhyYXNlYm9va19zaGlmdCA3Ci0jZGVmaW5lIHBocmFzZWJvb2tfc2hvcnQgMjIyCisjZGVmaW5lIHBocmFzZWJvb2tfc2hvcnQgMjE2CiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rW10gPSB7Ci0gICAgMCwgMjM3LCA2OSwgMjI5LCAxNjUsIDc2LCAyMzEsIDE5OSwgNzYsIDY1LCA1MywgMjM3LCAxNzksIDUzLCAyMzUsIDg2LCAKLSAgICA1MywgMjMwLCAxNDIsIDIyOSwgMTcyLCA0MiwgMjI4LCAxODAsIDQxLCAyMjgsIDE4MCwgMjMxLCAxOTgsIDc5LCA1MywgCi0gICAgMjM3LCA2NywgMjI3LCAxOTMsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMjMzLCAxMDQsIDIxLCAyNDAsIDEyNiwgMjEsIDExOCwgCi0gICAgMjEsIDExMywgMjEsIDE2NiwgMjEsIDE1OCwgMjEsIDE3MywgMjEsIDE4MywgMjEsIDE5NCwgMjEsIDE4NywgMjEsIDE5MiwgCi0gICAgMjM3LCA2NiwgMjMwLCAxNDAsIDIzMSwgMTkwLCA1MywgMjM3LCA1MSwgNTMsIDIyOCwgMTc1LCA1MywgMjMzLCA4MiwgNzYsIAotICAgIDIzMCwgMTQ1LCAyNTMsIDExMywgNywgNiwgMSwgNTcsIDcsIDYsIDEsIDI1NCwgMTg1LCA3LCA2LCAxLCAyNTQsIDE5NCwgNywgCi0gICAgNiwgMSwgMjIyLCAyMjIsIDcsIDYsIDEsIDcyLCA3LCA2LCAxLCAyNTQsIDE5MSwgNywgNiwgMSwgMjE0LCA3LCA2LCAxLCAKLSAgICAyMTIsIDcsIDYsIDEsIDc0LCA3LCA2LCAxLCAyNTQsIDE5MiwgNywgNiwgMSwgMjU0LCAxODYsIDcsIDYsIDEsIDE0OSwgNywgCi0gICAgNiwgMSwgMTg1LCA3LCA2LCAxLCAxOTksIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyNTQsIDE4NywgNywgNiwgMSwgMjU0LCAKLSAgICAxOTYsIDcsIDYsIDEsIDE0NiwgNywgNiwgMSwgMTkzLCA3LCA2LCAxLCAyNTQsIDE4MywgNywgNiwgMSwgNjYsIDcsIDYsIDEsIAotICAgIDE5NiwgNywgNiwgMSwgMjU0LCAxOTUsIDcsIDYsIDEsIDI1NCwgMTg0LCA3LCA2LCAxLCAyNTQsIDE5MCwgNywgNiwgMSwgCi0gICAgMjU0LCAxOTMsIDQyLCAzNywgMTA0LCAyMzUsIDM3LCAyMzMsIDEwNCwgNDEsIDM3LCAxMDQsIDIzMCwgMTI1LCAyMzUsIDI0LCAKLSAgICAxODQsIDI0MCwgMTM4LCAyNDAsIDE2MywgMjM1LCAyNCwgNywgMywgMSwgNTcsIDcsIDMsIDEsIDI1NCwgMTg1LCA3LCAzLCAKLSAgICAxLCAyNTQsIDE5NCwgNywgMywgMSwgMjIyLCAyMjIsIDcsIDMsIDEsIDcyLCA3LCAzLCAxLCAyNTQsIDE5MSwgNywgMywgMSwgCi0gICAgMjE0LCA3LCAzLCAxLCAyMTIsIDcsIDMsIDEsIDc0LCA3LCAzLCAxLCAyNTQsIDE5MiwgNywgMywgMSwgMjU0LCAxODYsIDcsIAotICAgIDMsIDEsIDE0OSwgNywgMywgMSwgMTg1LCA3LCAzLCAxLCAxOTksIDcsIDMsIDEsIDczLCA3LCAzLCAxLCAyNTQsIDE4NywgNywgCi0gICAgMywgMSwgMjU0LCAxOTYsIDcsIDMsIDEsIDE0NiwgNywgMywgMSwgMTkzLCA3LCAzLCAxLCAyNTQsIDE4MywgNywgMywgMSwgCi0gICAgNjYsIDcsIDMsIDEsIDE5NiwgNywgMywgMSwgMjU0LCAxOTUsIDcsIDMsIDEsIDI1NCwgMTg0LCA3LCAzLCAxLCAyNTQsIAotICAgIDE5MCwgNywgMywgMSwgMjU0LCAxOTMsIDQyLCAyNDAsIDEzNywgMTA0LCA2MSwgMjQwLCAxMzgsIDQxLCAyNDAsIDEzNywgCi0gICAgMTA0LCAyMDUsIDIzMywgMTczLCAyMzcsIDY5LCAyMzMsIDcwLCAyMjksIDE2NSwgNzYsIDI0OCwgNywgNTMsIDI0MSwgMjE1LCAKLSAgICA1MywgMjMzLCAxMTIsIDUzLCAyNTQsIDE5LCA1MywgMjM3LCAxNTAsIDEyNSwgMjM1LCAxMzUsIDUzLCAyMTksIDIzMiwgCi0gICAgMTAzLCA1MywgMjMzLCAyMDQsIDIzNSwgMTk3LCAyMzAsIDE1NiwgMjI3LCAxODUsIDQ3LCAyNDAsIDExNywgMjMxLCAxOTksIAotICAgIDc2LCAxOTAsIDUzLCAyNDYsIDIyNywgMjM1LCA2OSwgMjMxLCAxMzEsIDUzLCAyMzUsIDE2LCAyMzcsIDE3NywgNTMsIDIzMSwgCi0gICAgMTIyLCA1MywgMjI5LCAxNjMsIDExMywgMjI5LCAxNjMsIDE2NiwgMjQwLCAxNTksIDIzNSwgMjQsIDI0NCwgMTQyLCA1MywgCi0gICAgMjM1LCAyMDEsIDUzLCAyMzcsIDQ0LCAyNDYsIDE2NCwgMjMzLCA3OSwgMjI5LCAxNjMsIDExOCwgMjMyLCAyMjgsIDIzNSwgCi0gICAgMTk3LCAyMzAsIDE1NiwgMjI3LCAxMzMsIDQ3LCAyNDAsIDExNywgMjMxLCAxOTksIDc2LCAyMzcsIDgwLCAyMzMsIDc2LCAKLSAgICAxNjgsIDIzMywgMTU1LCAyMzcsIDgwLCAyMzMsIDc2LCAxNjgsIDI0MCwgMTcwLCAyMzcsIDgwLCAyMzMsIDc2LCAxNTIsIAotICAgIDIzMiwgNDEsIDIzMywgNzAsIDIzMywgODIsIDc2LCA3LCA2LCAxLCAxMDIsIDIsIDIzNywgMzYsIDcsIDYsIDEsIDEwMiwgMiwgCi0gICAgMTU1LCA3LCA2LCAxLCAxMDIsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAxMDIsIDIsIDIwNSwgNywgNiwgMSwgMTAyLCAyLCAKLSAgICAyMTksIDcsIDYsIDEsIDEwMiwgMiwgMjQ2LCAxNzQsIDQ2LCA3LCA2LCAxLCAyNTMsIDQsIDcsIDYsIDEsIDI1NSwgNjIsIDIsIAotICAgIDIzMywgNzksIDcsIDYsIDEsIDE2MSwgMiwgMjM3LCAzNiwgNywgNiwgMSwgMTYxLCAyLCAxNTUsIDcsIDYsIDEsIDE2MSwgMiwgCi0gICAgMjI5LCAxNjIsIDcsIDYsIDEsIDE2MSwgMiwgMjE5LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMzcsIDM2LCA3LCA2LCAxLCAKLSAgICAyNTUsIDU1LCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNTUsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMTksIAotICAgIDcsIDYsIDEsIDI0NiwgMjQyLCA3LCA2LCAxLCAyNTUsIDYwLCAyLCAyMDUsIDcsIDYsIDEsIDEzMCwgMiwgMjM3LCAzNiwgNywgCi0gICAgNiwgMSwgMTMwLCAyLCAxNTUsIDcsIDYsIDEsIDEzMCwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDEzMCwgMiwgMjA1LCA3LCA2LCAKLSAgICAxLCAxMzAsIDIsIDIxOSwgMjI3LCAxMzQsIDUzLCA3LCA2LCAxLCAxMzAsIDIsIDgyLCA3LCA2LCAxLCA5NywgMiwgMjM3LCAKLSAgICAzNiwgNywgNiwgMSwgOTcsIDIsIDE1NSwgNywgNiwgMSwgOTcsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCA5NywgMiwgMjE5LCAKLSAgICA3LCA2LCAxLCAyNTUsIDY0LCAyLCAxNTUsIDcsIDYsIDEsIDIzNywgMjE5LCA3LCAzLCAxLCAyNDAsIDIzNSwgMTkzLCA3LCAKLSAgICAzLCAxLCAxMDIsIDIsIDIzNywgMzYsIDcsIDMsIDEsIDEwMiwgMiwgMTU1LCA3LCAzLCAxLCAxMDIsIDIsIDIyOSwgMTYyLCAKLSAgICA3LCAzLCAxLCAxMDIsIDIsIDIwNSwgNywgMywgMSwgMTAyLCAyLCAyMTksIDcsIDMsIDEsIDEwMiwgMiwgMjQ2LCAxNzQsIAotICAgIDQ2LCA3LCAzLCAxLCAyNTMsIDQsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDIzMywgNzksIDcsIDMsIDEsIDE2MSwgMiwgMjM3LCAKLSAgICAzNiwgNywgMywgMSwgMTYxLCAyLCAxNTUsIDcsIDMsIDEsIDE2MSwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDE2MSwgMiwgCi0gICAgMjE5LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzcsIDM2LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAxNTUsIDcsIDMsIDEsIAotICAgIDI1NSwgNTUsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMTksIDcsIDMsIDEsIDI0NiwgMjQyLCA3LCAzLCAKLSAgICAxLCAyNTUsIDYwLCAyLCAyMDUsIDcsIDMsIDEsIDEzMCwgMiwgMjM3LCAzNiwgNywgMywgMSwgMTMwLCAyLCAxNTUsIDcsIDMsIAotICAgIDEsIDEzMCwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDEzMCwgMiwgMjA1LCA3LCAzLCAxLCAxMzAsIDIsIDIxOSwgMjMzLCAKLSAgICAxMzAsIDUzLCA3LCAzLCAxLCAxMzAsIDIsIDgyLCA3LCAzLCAxLCA5NywgMiwgMjM3LCAzNiwgNywgMywgMSwgOTcsIDIsIAotICAgIDE1NSwgNywgMywgMSwgOTcsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCA5NywgMiwgMjE5LCA3LCAzLCAxLCAyNTUsIDY0LCAyLCAKLSAgICAxNTUsIDcsIDMsIDEsIDIzNywgMjE5LCA3LCAzLCAxLCAyNTUsIDY0LCAyLCAyMTksIDcsIDYsIDEsIDEwMiwgMiwgMjM1LCAKLSAgICAxNiwgNywgMywgMSwgMTAyLCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAxMDIsIDIsIDIzNywgNDYsIDcsIDMsIDEsIDEwMiwgMiwgCi0gICAgMjM3LCA0NiwgNywgNiwgMSwgMTAyLCAyLCAyMzUsIDQ3LCA3LCAzLCAxLCAxMDIsIDIsIDIzNSwgNDcsIDcsIDYsIDEsIAotICAgIDI1NSwgNjIsIDIsIDE1NSwgNywgMywgMSwgMjU1LCA2MiwgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDYyLCAyLCAyMjksIDE2MiwgCi0gICAgNywgMywgMSwgMjU1LCA2MiwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDI1NSwgNjIsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCAKLSAgICA2MiwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDYyLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDYyLCAyLCAyMzcsIAotICAgIDQzLCA3LCA2LCAxLCAyNTUsIDYzLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDYzLCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAKLSAgICAyNTUsIDYzLCAyLCA4MiwgNywgMywgMSwgMjU1LCA2MywgMiwgODIsIDcsIDYsIDEsIDE2MSwgMiwgMjM1LCAxNiwgNywgMywgCi0gICAgMSwgMTYxLCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAxNjEsIDIsIDIzNywgNDYsIDcsIDMsIDEsIDE2MSwgMiwgMjM3LCA0NiwgCi0gICAgNywgNiwgMSwgMTYxLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDE2MSwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAxNjEsIDIsIDIzNSwgCi0gICAgNDcsIDcsIDMsIDEsIDE2MSwgMiwgMjM1LCA0NywgNywgNiwgMSwgMTYxLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAxNjEsIDIsIAotICAgIDIzNywgNDMsIDcsIDYsIDEsIDI1NSwgNjUsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAyNTUsIDY1LCAyLCAyMjksIDE2MiwgNywgCi0gICAgNiwgMSwgMjU1LCA2NSwgMiwgMjM3LCA0NiwgNywgMywgMSwgMjU1LCA2NSwgMiwgMjM3LCA0NiwgNywgNiwgMSwgMjU1LCAKLSAgICA2NSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDY1LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNjUsIDIsIDIzMywgNzksIAotICAgIDcsIDMsIDEsIDI1NSwgNjUsIDIsIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNjYsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAKLSAgICAyNTUsIDY2LCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMjU1LCA2NiwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNjYsIDIsIDgyLCAKLSAgICA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMDUsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDIwNSwgNywgNiwgMSwgMjU1LCA1NSwgMiwgCi0gICAgMjM1LCAxNiwgNywgMywgMSwgMjU1LCA1NSwgMiwgMjM1LCAxNiwgNywgNiwgMSwgMjU1LCA1NSwgMiwgMjM3LCA0NiwgNywgCi0gICAgMywgMSwgMjU1LCA1NSwgMiwgMjM3LCA0NiwgNywgNiwgMSwgMjU1LCA1NSwgMiwgMjM1LCA0NywgNywgMywgMSwgMjU1LCAKLSAgICA1NSwgMiwgMjM1LCA0NywgNywgNiwgMSwgMjU1LCA1NSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyMzUsIDQ2LCA3NCwgNywgNiwgCi0gICAgMjAsIDI1MywgMjMxLCA3LCAzLCAyMCwgMjUzLCAyMzEsIDcsIDYsIDEsIDI1NSwgNzMsIDIsIDIyOSwgMTYyLCA3LCAzLCAxLCAKLSAgICAyNTUsIDczLCAyLCAyMjksIDE2MiwgNywgNiwgMSwgMjU1LCA2NywgMiwgMjMzLCA3OSwgNywgMywgMSwgMjU1LCA2NywgMiwgCi0gICAgMjMzLCA3OSwgNywgMywgMSwgMjUwLCAxODYsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDE1NSwgNywgMywgMSwgMjU1LCA1OCwgCi0gICAgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDU4LCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyMzMsIDc5LCA3LCA2LCAKLSAgICAxLCAyNTUsIDU4LCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAyNTUsIDU4LCAKLSAgICAyLCAyMzcsIDQ0LCAyNDYsIDE2NCwgNywgMywgMSwgMjU1LCA1OCwgMiwgMjM3LCA0NCwgMjQ2LCAxNjQsIDcsIDYsIDEsIAotICAgIDI1NSwgNTgsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDU4LCAyLCA4MiwgNywgNiwgMSwgMjU1LCA2MCwgMiwgMTU1LCA3LCAzLCAKLSAgICAxLCAyNTUsIDYwLCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDIzMywgNzksIDcsIDMsIDEsIDI1NSwgNjAsIDIsIAotICAgIDIzMywgNzksIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjAsIDIsIDIzNywgNDMsIDcsIAotICAgIDMsIDEsIDI1NSwgNjAsIDIzNCwgMTk3LCAyNTQsIDIwNSwgMjI5LCAxNzIsIDcsIDYsIDEsIDI0NywgMCwgNywgMywgMSwgCi0gICAgMjQ3LCAwLCA3LCA2LCAxLCAxMzAsIDIsIDIzNSwgMTYsIDcsIDMsIDEsIDEzMCwgMiwgMjM1LCAxNiwgNywgNiwgMSwgMTMwLCAKLSAgICAyLCAyMzcsIDQ2LCA3LCAzLCAxLCAxMzAsIDIsIDIzNywgNDYsIDcsIDYsIDEsIDEzMCwgMiwgNDcsIDE1NSwgNywgMywgMSwgCi0gICAgMTMwLCAyLCA0NywgMTU1LCA3LCA2LCAyMCwgMjUzLCAxNSwgNywgMywgMjAsIDI1MywgMTUsIDcsIDYsIDEsIDI1NSwgNTcsIAotICAgIDIsIDE1NSwgNywgMywgMSwgMjU1LCA1NywgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDU3LCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAKLSAgICAyNTUsIDU3LCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAyNTUsIDU3LCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAKLSAgICAyMzcsIDQzLCA3LCA2LCAxLCAyNTUsIDU5LCAyLCAxNTUsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDE1NSwgNywgNiwgMSwgCi0gICAgMjU1LCA1OSwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAyNTUsIDU5LCAyLCAKLSAgICAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIDU5LCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAyNTUsIDU5LCAyLCAyMzcsIDQzLCA3LCAKLSAgICAzLCAxLCAyNTUsIDU5LCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAyNTUsIDYxLCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIAotICAgIDYxLCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAyNTUsIDYxLCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyMzcsIAotICAgIDQzLCA3LCA2LCAxLCAyNTUsIDYxLCAyLCA4MiwgNywgMywgMSwgMjU1LCA2MSwgMiwgODIsIDcsIDYsIDEsIDk3LCAyLCAKLSAgICAyMDUsIDcsIDMsIDEsIDk3LCAyLCAyMDUsIDcsIDYsIDEsIDk3LCAyLCAyMzUsIDE2LCA3LCAzLCAxLCA5NywgMiwgMjM1LCAKLSAgICAxNiwgNywgNiwgMSwgOTcsIDIsIDIzNywgNDYsIDcsIDMsIDEsIDk3LCAyLCAyMzcsIDQ2LCA3LCA2LCAxLCA5NywgMiwgCi0gICAgMjQ2LCAxNzQsIDQ2LCA3LCAzLCAxLCA5NywgMiwgMjQ2LCAxNzQsIDQ2LCA3LCA2LCAxLCA5NywgMiwgNDcsIDE1NSwgNywgCi0gICAgMywgMSwgOTcsIDIsIDQ3LCAxNTUsIDcsIDYsIDEsIDk3LCAyLCAyMzUsIDQ3LCA3LCAzLCAxLCA5NywgMiwgMjM1LCA0NywgCi0gICAgNywgNiwgMSwgMjU1LCA3MSwgMiwgMjI5LCAxNjIsIDcsIDMsIDEsIDI1NSwgNzEsIDIsIDIyOSwgMTYyLCA3LCA2LCAxLCAKLSAgICAyNTUsIDY0LCAyLCAyMjksIDE2MiwgNywgMywgMSwgMjU1LCA2NCwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDI1NSwgNjQsIDIsIAotICAgIDIxOSwgNywgNiwgMSwgMjU1LCA1NiwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgCi0gICAgNTYsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA1NiwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDU2LCAyLCAyMzcsIDQzLCAKLSAgICA3LCAzLCAxLCAyNTUsIDU2LCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAxODIsIDE5MywgNywgMywgMSwgNDUsIDIsIDgyLCA3LCAKLSAgICA2LCAxLCA0NSwgMiwgODgsIDcsIDYsIDEsIDQ1LCAyLCAyMzUsIDEwNCwgNywgMywgMSwgNDUsIDIsIDIzNSwgMTA0LCA3LCAKLSAgICA2LCAxLCAyMDYsIDE4MywgNywgMywgMSwgMjA2LCAxODMsIDcsIDYsIDEsIDI0NiwgMTU3LCA3MywgNywgNiwgMSwgMjU1LCAKLSAgICA2MiwgMiwgODgsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDg4LCA3LCA2LCAxLCAyMzUsIDIzOSwgMjIyLCAyMjIsIDcsIDYsIDEsIAotICAgIDI1NSwgNjMsIDIsIDg4LCA3LCA2LCAxLCAyNTUsIDYzLCAyLCAyMzUsIDEwNCwgNywgMywgMSwgMjU1LCA2MywgMiwgMjM1LCAKLSAgICAxMDQsIDcsIDMsIDEsIDIwOSwgMjM3LCA3NSwgNywgNiwgMSwgMjAwLCA3MiwgNywgNiwgMSwgMjM3LCAxNDQsIDcsIDYsIDEsIAotICAgIDI0NiwgMTU3LCA3MiwgNywgNiwgMSwgMjU1LCA3MiwgMiwgODgsIDcsIDMsIDEsIDI1NSwgNzIsIDIsIDg4LCA3LCA2LCAxLCAKLSAgICAyNTUsIDY1LCAyLCA4OCwgNywgNiwgMSwgMjM3LCA2MSwgNywgMywgMSwgMjUzLCAyMjcsIDcsIDYsIDEsIDI0MCwgMTQ2LCAKLSAgICA3LCA2LCAxLCAyNTUsIDU1LCAyLCA4MiwgNywgNiwgMSwgMjU1LCA2NywgMiwgODgsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIAotICAgIDg4LCA3LCAzLCAxLCAyNTUsIDU4LCAyLCAxMjUsIDcsIDMsIDEsIDIzOSwgODAsIDIsIDgyLCA3LCA2LCAxLCAyMDksIDE4NSwgCi0gICAgNywgNiwgMSwgMjU1LCA2MCwgMiwgNDIsIDg4LCA3LCAzLCAxLCAyNTUsIDYwLCAyLCAxODIsIDQxLCAyNDcsIDMsIDcsIDYsIAotICAgIDEsIDEzMCwgMiwgMjM3LCA0NCwgMjA1LCA3LCA2LCAxLCAxMzAsIDIsIDI0MCwgMTc5LCA3LCAzLCAxLCAxMzAsIDIsIDI0MCwgCi0gICAgMTc5LCA3LCA2LCAxLCAyNTMsIDE1NywgNywgMywgMSwgMjUzLCAxNTcsIDcsIDYsIDEsIDI1NSwgNzAsIDIsIDg4LCA3LCAzLCAKLSAgICAxLCAyNTUsIDcwLCAyLCA4OCwgNywgMSwgMjU0LCAyMCwgNywgNiwgMSwgMjA2LCAxMTMsIDcsIDMsIDEsIDIwNiwgMTEzLCAKLSAgICA3LCA2LCAxLCAyNDYsIDIzMiwgNywgMSwgMjAwLCAyNTMsIDE0NiwgMjQwLCAyMDIsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIAotICAgIDIzNSwgMzYsIDg4LCA3LCA2LCAxLCAyNTUsIDYxLCAyLCA4OCwgNywgMywgMSwgMjU1LCA2MSwgMiwgODgsIDcsIDYsIDEsIAotICAgIDI1NSwgNjEsIDIsIDIzMSwgMjAxLCA4OCwgNywgNiwgMSwgOTcsIDIsIDI0MCwgMTc5LCA3LCAzLCAxLCA5NywgMiwgMjQwLCAKLSAgICAxNzksIDcsIDYsIDEsIDIzMywgOTIsIDcsIDYsIDEsIDI1NSwgNjksIDIsIDg4LCA3LCA2LCAxLCAyNTUsIDY0LCAyLCA4OCwgCi0gICAgNywgMywgMSwgMjU1LCA2NCwgMiwgODgsIDcsIDYsIDEsIDI1NSwgNTYsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAKLSAgICA4MiwgNywgNiwgMSwgMjQ3LCA3NCwgNywgNiwgMSwgMjUzLCAxMDEsIDIzMiwgNSwgNywgMywgMSwgMjUzLCAxMDEsIDIzMiwgCi0gICAgNSwgNywgMywgMSwgMjUzLCAxMDEsIDIsIDI0MCwgMTMzLCA3LCAxLCAxMzUsIDIsIDgyLCA3LCA2LCAxLCAyMDYsIDE3MywgCi0gICAgNywgMywgMSwgMjA2LCAxNzMsIDcsIDEsIDIzMywgNzAsIDIzNSwgMzEsIDI0NywgMjAsIDIsIDgyLCA3LCAxLCAyNDIsIDI3LCAKLSAgICA3LCAxLCAyMzgsIDE4MSwgMjM3LCAxNTEsIDcsIDEsIDIzNiwgMTMwLCAyMzcsIDE1MSwgNywgMSwgMjM0LCAxLCAyMzcsIAotICAgIDE1MSwgNywgMSwgMjMxLCAyMDEsIDIzNywgMTUxLCA3LCA2LCAxLCAyNTQsIDIzNSwgMiwgMjM3LCA0MywgNywgNiwgMSwgCi0gICAgMjU1LCA2MywgMiwgMywgMSwgMjU1LCA1NiwgMiwgMjM3LCA0MywgNywgMywgMSwgMjU0LCAyMzUsIDIsIDIzNywgNDMsIDcsIAotICAgIDYsIDEsIDI1MywgMjQ0LCA3LCA2LCAxLCAyNTUsIDU4LCAyLCAzLCAxLCAyNTQsIDE5MiwgNywgMywgMSwgMjUzLCAyNDQsIAotICAgIDcsIDYsIDEsIDI1MywgMjUwLCA3LCA2LCAxLCAyNTUsIDYwLCAyLCAzLCAxLCAyNTQsIDE5MiwgNywgMywgMSwgMjUzLCAKLSAgICAyNTAsIDcsIDYsIDEsIDEwMiwgMiwgMjM3LCA0MywgNywgMywgMSwgMTAyLCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAyNTUsIAotICAgIDU1LCAyLCAyMzcsIDQzLCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzcsIDQzLCA3LCA2LCAxLCAxMzAsIDIsIDIzNywgNDMsIAotICAgIDcsIDMsIDEsIDEzMCwgMiwgMjM3LCA0MywgNywgNiwgMSwgOTcsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDk3LCAyLCAyMzcsIAotICAgIDQzLCA3LCA2LCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAyMzUsIDE2LCA3LCAzLCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAKLSAgICAyMzUsIDE2LCA3LCA2LCAxLCA5NywgMiwgMjMxLCAyMDMsIDIyLCAxNTUsIDcsIDMsIDEsIDk3LCAyLCAyMzEsIDIwMywgMjIsIAotICAgIDE1NSwgNywgNiwgMSwgOTcsIDIsIDIzMSwgMjAzLCAyMiwgMjM3LCA0MywgNywgMywgMSwgOTcsIDIsIDIzMSwgMjAzLCAyMiwgCi0gICAgMjM3LCA0MywgNywgNiwgMSwgOTcsIDIsIDIzMSwgMjAzLCAyMiwgMjM3LCAzNiwgNywgMywgMSwgOTcsIDIsIDIzMSwgMjAzLCAKLSAgICAyMiwgMjM3LCAzNiwgNywgMywgMSwgMjA5LCA3MiwgNywgNiwgMSwgMTAyLCAyLCAyMzEsIDIwMywgMjIsIDIzNSwgMTYsIDcsIAotICAgIDMsIDEsIDEwMiwgMiwgMjMxLCAyMDMsIDIyLCAyMzUsIDE2LCA3LCA2LCAxLCAxMDIsIDIsIDU2LCA2NCwgMjIsIDIzNSwgCi0gICAgMTYsIDcsIDMsIDEsIDEwMiwgMiwgNTYsIDY0LCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgMjU0LCAyMTUsIDIsIDIzNSwgMTYsIAotICAgIDcsIDMsIDEsIDI1NCwgMjE1LCAyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTUsIDY1LCAyLCA4MiwgNywgMywgMSwgMjU1LCA2NSwgCi0gICAgMiwgODIsIDcsIDYsIDEsIDI1NSwgNjUsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjUsIDIsIDIzNywgNDMsIDcsIDYsIAotICAgIDEsIDI1NSwgNjcsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDIzNywgNDMsIDcsIDYsIDEsIDEzMCwgMiwgCi0gICAgMjM1LCA0NywgNywgMywgMSwgMTMwLCAyLCAyMzUsIDQ3LCA3LCA2LCAxLCAxMzAsIDIsIDIzNywgMjA4LCAyMiwgMjM1LCAKLSAgICAxNiwgNywgMywgMSwgMTMwLCAyLCAyMzcsIDIwOCwgMjIsIDIzNSwgMTYsIDcsIDYsIDEsIDI1MywgMTAxLCAyLCAyMzcsIAotICAgIDQzLCA3LCAzLCAxLCAyNTMsIDEwMSwgMiwgMjM3LCA0MywgNywgMywgMSwgMjU1LCA3MywgMiwgMjM3LCA0MywgNywgNiwgMSwgCi0gICAgMjUzLCAyMTcsIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDMsIDEsIDI1NCwgMTkzLCA3LCAzLCAxLCAyNTMsIDIxNywgNywgNiwgCi0gICAgMSwgMjU1LCA2NSwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDY1LCAyLCAxNTUsIDcsIDYsIDEsIDIzOCwgOSwgNywgNiwgMSwgCi0gICAgMjQyLCAyNywgNywgNiwgMSwgMjU1LCA2MCwgMiwgMjM3LCAzNiwgNywgMywgMSwgMjU1LCA2MCwgMiwgMjM3LCAzNiwgNywgCi0gICAgNiwgMSwgMTAyLCAyLCAyNDYsIDE3NCwgNjQsIDIyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjQ2LCAxNzQsIDY0LCAyMiwgCi0gICAgMTU1LCA3LCA2LCAxLCAyNTQsIDIxNSwgMiwgMTU1LCA3LCAzLCAxLCAyNTQsIDIxNSwgMiwgMTU1LCA3LCA2LCAxLCAxMzAsIAotICAgIDIsIDE5NSwgMjIsIDE1NSwgNywgMywgMSwgMTMwLCAyLCAxOTUsIDIyLCAxNTUsIDcsIDYsIDEsIDEwMiwgMiwgNDcsIDIzNywgCi0gICAgMzYsIDcsIDMsIDEsIDEwMiwgMiwgNDcsIDIzNywgMzYsIDcsIDYsIDEsIDEwMiwgMiwgMjMzLCA3MCwgMjM3LCA0NiwgNywgCi0gICAgMywgMSwgMTAyLCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCA3LCA2LCAxLCAxNjEsIDIsIDQ3LCAyMzcsIDM2LCA3LCAzLCAxLCAKLSAgICAxNjEsIDIsIDQ3LCAyMzcsIDM2LCA3LCA2LCAxLCAxNjEsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDMsIDEsIDE2MSwgMiwgCi0gICAgMjMzLCA3MCwgMjM3LCA0NiwgNywgNiwgMSwgMjU1LCA1NSwgMiwgNDcsIDIzNywgMzYsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIAotICAgIDQ3LCAyMzcsIDM2LCA3LCA2LCAxLCAyNTUsIDU1LCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAKLSAgICAyMzMsIDcwLCAyMzcsIDQ2LCA3LCA2LCAxLCAxMzAsIDIsIDQ3LCAyMzcsIDM2LCA3LCAzLCAxLCAxMzAsIDIsIDQ3LCAyMzcsIAotICAgIDM2LCA3LCA2LCAxLCAxMzAsIDIsIDIzMywgNzAsIDIzNywgNDYsIDcsIDMsIDEsIDEzMCwgMiwgMjMzLCA3MCwgMjM3LCA0NiwgCi0gICAgNywgNiwgMSwgMjU1LCA1NywgMiwgNDcsIDIzNywgMzYsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDQ3LCAyMzcsIDM2LCA3LCA2LCAKLSAgICAxLCAyNTUsIDU3LCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCAKLSAgICA3LCA2LCAxLCA5NywgMiwgNDcsIDIzNywgMzYsIDcsIDMsIDEsIDk3LCAyLCA0NywgMjM3LCAzNiwgNywgNiwgMSwgOTcsIDIsIAotICAgIDIzMywgNzAsIDIzNywgNDYsIDcsIDMsIDEsIDk3LCAyLCAyMzMsIDcwLCAyMzcsIDQ2LCA3LCA2LCAxLCAyNTUsIDU5LCAyLCAKLSAgICAyNDAsIDE2MiwgNTEsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDI0MCwgMTYyLCA1MSwgNywgNiwgMSwgMjU1LCA2MSwgMiwgCi0gICAgMjQwLCAxNjIsIDUxLCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyNDAsIDE2MiwgNTEsIDcsIDYsIDEsIDI0MiwgMzIsIDcsIDMsIAotICAgIDEsIDI0MiwgMzIsIDcsIDYsIDEsIDI1NSwgNjYsIDIsIDIzNywgNDMsIDcsIDMsIDEsIDI1NSwgNjYsIDIsIDIzNywgNDMsIAotICAgIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDE4MiwgNDEsIDI0NywgMywgNywgMywgMSwgMjU1LCA2MywgMiwgMjQwLCAxNjgsIDcsIAotICAgIDYsIDEsIDI1MywgMTE5LCA3LCAzLCAxLCAyNTMsIDExOSwgNywgNiwgMSwgMjU1LCA1NiwgMiwgODgsIDcsIDMsIDEsIDI1NSwgCi0gICAgNTYsIDIsIDg4LCA3LCA2LCAxLCAxMDIsIDIsIDU2LCA0NiwgNywgMywgMSwgMTAyLCAyLCA1NiwgNDYsIDcsIDYsIDEsIAotICAgIDE2MSwgMiwgMjMzLCA3OSwgNywgMywgMSwgMTYxLCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAxMzAsIDIsIDIzMSwgMjAzLCAyMiwgCi0gICAgMjM1LCAxNiwgNywgMywgMSwgMTMwLCAyLCAyMzEsIDIwMywgMjIsIDIzNSwgMTYsIDcsIDYsIDEsIDEzMCwgMiwgMjQwLCAKLSAgICAxMjgsIDIyLCAyMzUsIDE2LCA3LCAzLCAxLCAxMzAsIDIsIDI0MCwgMTI4LCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgMTMwLCAKLSAgICAyLCA1NiwgNDYsIDcsIDMsIDEsIDEzMCwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAxMzAsIDIsIDU2LCA2NCwgMjIsIDIzNSwgMTYsIAotICAgIDcsIDMsIDEsIDEzMCwgMiwgNTYsIDY0LCAyMiwgMjM1LCAxNiwgNywgNiwgMSwgMjU1LCA2NCwgMiwgMjM1LCAxNiwgNywgMywgCi0gICAgMSwgMjU1LCA2NCwgMiwgMjM1LCAxNiwgNywgMywgMSwgMjU1LCA1OCwgMiwgMjQwLCAxNjgsIDcsIDMsIDEsIDI1NSwgNjAsIAotICAgIDIsIDI0MCwgMTY4LCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyNDAsIDE2OCwgNywgMywgMSwgMjM1LCA0NiwgMjU0LCAxOTIsIAotICAgIDcsIDMsIDEsIDI1NSwgMjIsIDIzMywgMTEzLCA3LCAzLCAxLCAyNTUsIDQ1LCAyMzMsIDExMywgNywgNiwgMSwgMTAyLCAyLCAKLSAgICA4MiwgNywgNiwgMSwgMjU1LCA2MiwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIDU4LCAKLSAgICAyLCAxMjUsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDIzMywgNzQsIDgyLCA3LCAzLCAxLCAyNTUsIDU5LCAyLCAyNDEsIDc3LCAKLSAgICAyNDAsIDEzMywgNywgMywgMSwgMjU1LCA1NiwgMiwgMjQxLCA3NywgMjQwLCAxMzMsIDcsIDYsIDEsIDIzNSwgMzEsIDI0MCwgCi0gICAgMTIxLCA3LCAzLCAxLCAyMzUsIDMxLCAyNDAsIDEyMSwgNywgNiwgMSwgNDUsIDIsIDgyLCA3LCA2LCAxLCA5NywgMTI1LCA3LCAKLSAgICA2LCAxLCAyMDksIDE5NiwgNywgNiwgMSwgMTYxLCAyLCA4MiwgNywgMywgMSwgMTYxLCAyLCA4MiwgNywgNiwgMSwgMjU1LCAKLSAgICA3MywgMiwgODIsIDcsIDMsIDEsIDI1NSwgNzMsIDIsIDgyLCA3LCA2LCAxLCAzLCAyNTUsIDc1LCAyLCAyNDYsIDE3MSwgCi0gICAgMjQwLCAxMzMsIDcsIDMsIDEsIDI1NSwgNzUsIDIsIDI0NiwgMTcxLCAyNDAsIDEzMywgNywgNiwgMSwgMjU1LCA1NywgMiwgCi0gICAgODIsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDgyLCA3LCA2LCAxLCAyNTUsIDY0LCAyLCA4MiwgNywgMywgMSwgMjU1LCA2NCwgCi0gICAgMiwgODIsIDcsIDMsIDEsIDIwOSwgNTcsIDcsIDMsIDEsIDIzNywgNzEsIDcsIDMsIDEsIDIwOSwgMjM3LCA3MSwgNywgMywgCi0gICAgMSwgNDUsIDIsIDg4LCA3LCAzLCAxLCAyNDYsIDE1NywgNzMsIDcsIDMsIDEsIDI1NSwgNjIsIDIsIDI0MCwgMTY4LCA3LCAzLCAKLSAgICAxLCAyNTUsIDYzLCAyLCAyNDAsIDEzMywgNywgMywgMSwgMjU1LCA2MywgMiwgODgsIDcsIDMsIDEsIDIwMCwgNzIsIDcsIDMsIAotICAgIDEsIDIzNywgMTQ0LCA3LCAzLCAxLCAyNDEsIDE0LCAyLCA4OCwgNywgMywgMSwgMjQ2LCAxNTcsIDcyLCA3LCAzLCAxLCAKLSAgICAyMDAsIDI0NiwgMTU3LCA3MiwgNywgMywgMSwgMjAwLCAyNDYsIDE1NywgMTYxLCAyLCA4OCwgNywgMywgMSwgMjM3LCA1OCwgCi0gICAgMjAwLCAyNDYsIDE1NywgNzIsIDcsIDMsIDEsIDIzNSwgNDYsIDI1NSwgNzMsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDY1LCAyLCAKLSAgICA4OCwgNywgMywgMSwgOTUsIDIxNCwgNywgMSwgMywgNiwgMjE0LCA3LCAzLCAxLCAyMzcsIDYxLCA3LCAzLCAxLCAyNTEsIAotICAgIDE3MiwgMjQwLCAxNzksIDcsIDMsIDEsIDIwOSwgMjEyLCA3LCAzLCAxLCAyNTUsIDY2LCAyLCA4OCwgNywgMywgMSwgMjUwLCAKLSAgICA2NywgMiwgODgsIDcsIDMsIDEsIDI1NSwgNTUsIDIsIDgyLCA3LCAzLCAxLCAyNDAsIDE0NiwgNywgMSwgMywgNiwgNzQsIDcsIAotICAgIDMsIDEsIDI1NSwgNTgsIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA1OCwgMiwgMjQyLCAxOTksIDcsIDMsIDEsIAotICAgIDI1NSwgNTgsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgMjQ0LCA5NSwgNywgMywgMSwgMjA5LCAxODUsIDcsIDMsIDEsIAotICAgIDIwOSwgMjU1LCA2OCwgMiwgMTgyLCAyNDcsIDMsIDcsIDMsIDEsIDI1NSwgNjgsIDIsIDg4LCA3LCAzLCAxLCAyNTUsIDYwLCAKLSAgICAyLCA0MiwgODgsIDcsIDMsIDEsIDI1NSwgNjAsIDIsIDIzMSwgMjAxLCA4OCwgNywgMSwgMywgNiwgMTk5LCA3LCAzLCAxLCAKLSAgICAyMzcsIDExOCwgNzMsIDcsIDEsIDMsIDYsIDI1MywgMTUsIDcsIDMsIDEsIDIzNywgNTgsIDIzNywgNjgsIDcsIDMsIDEsIAotICAgIDI0NiwgMTk4LCA3LCAzLCAxLCAyMDksIDE0NiwgNywgMywgMSwgMjA5LCAyNTUsIDU3LCAyLCAxODIsIDI0NywgMywgNywgMywgCi0gICAgMSwgMjA5LCAyNTUsIDU3LCAyLCA4OCwgNywgMywgMSwgMjU1LCA1NywgMiwgMTgyLCAyNDcsIDMsIDcsIDMsIDEsIDI1NSwgCi0gICAgNTcsIDIsIDI0MCwgMTMzLCA3LCAzLCAxLCAyNTUsIDU3LCAyLCAyMzEsIDI1MSwgNywgMywgMSwgMjAwLCAyNTUsIDU3LCAyLCAKLSAgICAyMzEsIDI1MSwgNywgMSwgMywgNiwgMTQ2LCA3LCAxLCAzLCA2LCAyMzMsIDcwLCAxNDYsIDcsIDMsIDEsIDI1NSwgNTksIDIsIAotICAgIDg4LCA3LCAzLCAxLCAyNDYsIDIzMiwgNywgMywgMSwgMjM1LCA0NiwgMjU1LCA3MywgMiwgMTk1LCAyMiwgODgsIDcsIDMsIAotICAgIDEsIDI0MSwgMjUwLCAyMDAsIDI0NiwgMjMyLCA3LCAzLCAxLCAyNTMsIDE0NiwgMiwgMjQwLCAxNjgsIDcsIDMsIDEsIDIwOSwgCi0gICAgMjU0LCAxODMsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgOTcsIDEyNSwgNywgMywgMSwgCi0gICAgMjMzLCA5MiwgNywgMywgMSwgMjU1LCA2OSwgMiwgODgsIDcsIDMsIDEsIDIwOSwgMTk2LCA3LCAzLCAxLCAyMDksIDI1NCwgCi0gICAgMTk1LCA3LCAzLCAxLCAyMDksIDI1NCwgMTkwLCA3LCAxLCAzLCA2LCAyNTQsIDE5MCwgNywgMywgMSwgMjU1LCA1NiwgMiwgCi0gICAgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCAyNTUsIDU2LCAyLCAyNDAsIDE2OCwgNywgMywgMSwgMjQ3LCA3NCwgNywgMywgMSwgCi0gICAgMjUzLCAxMDEsIDIsIDI0MCwgMTY4LCA3LCAxLCAyMzUsIDMxLCAyNDAsIDEyMSwgNywgMSwgMjMwLCAxMzgsIDIzNywgMTA3LCAKLSAgICAyMzEsIDcxLCA3LCAxLCAyMzMsIDcwLCAyMzUsIDMxLCAyNDAsIDEyMSwgNywgMSwgMjMzLCAzNCwgMjU0LCAxOTQsIDcsIDEsIAotICAgIDIzMywgMTg4LCAyMzcsIDE1MSwgNywgMSwgMywgNiwgMjU0LCAxODUsIDcsIDMsIDEsIDIzNywgNTgsIDI0NiwgMTU3LCA3MiwgCi0gICAgNywgMSwgMywgNiwgMjU1LCA2NSwgMiwgODgsIDcsIDEsIDMsIDYsIDIxMiwgNywgMywgMSwgMjU1LCA3MywgMiwgMjI3LCAKLSAgICAyMDAsIDcsIDMsIDEsIDIwOSwgMjU0LCAxODYsIDcsIDEsIDMsIDYsIDE0OSwgNywgMywgMSwgMjU1LCA3NSwgMiwgODgsIDcsIAotICAgIDEsIDIzNSwgMzEsIDI0NywgMjAsIDIsIDgyLCA3LCAxLCAyMDAsIDIzNSwgMzEsIDI0NywgMjAsIDIsIDgyLCA3LCAzLCAxLCAKLSAgICAyNTQsIDIzNSwgMjMzLCAxMTMsIDcsIDMsIDEsIDI0OSwgMTg4LCAyMzMsIDExMywgNywgMywgMSwgMjU0LCAyMzUsIDIzNSwgCi0gICAgOTAsIDIsIDI0MCwgMTY4LCA3LCAzLCAxLCAyNTUsIDUwLCAyMzMsIDExMywgNywgMywgMSwgMjUyLCAxNCwgMjMzLCAxMTMsIAotICAgIDcsIDMsIDEsIDI1NSwgNDcsIDIzNSwgOTAsIDIsIDI0MCwgMTY4LCA3LCAzLCAxLCAyNDksIDI0MywgMjMzLCAxMTMsIDcsIAotICAgIDMsIDEsIDI1NSwgMzUsIDIzMywgMTEzLCA3LCAzLCAxLCAyNTUsIDM2LCAyMzMsIDExMywgNywgMSwgMjMzLCAxODgsIDIyOSwgCi0gICAgMjA5LCA3LCAxLCAyMzQsIDIwLCAyMjksIDIwOSwgNywgMywgMSwgMjA5LCAyNTUsIDY2LCAyLCAyMzEsIDI1MSwgNywgMywgCi0gICAgMSwgMjA5LCAyNTUsIDY2LCAyLCAyMzMsIDIwNiwgMjIsIDI0MCwgMTMzLCA1MiwgMSwgMywgMjEyLCA1MiwgMSwgMywgMjU1LCAKLSAgICA2NiwgMiwgODgsIDUyLCAxLCAzLCAyNTQsIDE5MiwgNTIsIDEsIDMsIDE0NiwgNTIsIDEsIDMsIDIwOSwgMTQ2LCA1MiwgMSwgCi0gICAgMywgMjA5LCAyNTUsIDU3LCAyLCA4OCwgNTIsIDEsIDMsIDYsIDIzMywgNzAsIDE0NiwgNTIsIDEsIDMsIDI1NCwgMTk1LCAKLSAgICA1MiwgMSwgMywgMjU0LCAxOTAsIDUyLCAxLCAyMzcsIDExNCwgNTIsIDEsIDQ3LCAyMzcsIDExNCwgNTIsIDEsIDIwOSwgCi0gICAgMjM3LCA2NywgNTIsIDEsIDIyOSwgMTcyLCA1MiwgMSwgMjAwLCAyMzcsIDY3LCA1MiwgMSwgNDEsIDEzMiwgMjQwLCAxNDcsIAotICAgIDUyLCAxLCA0MiwgMTMyLCAyNDAsIDE0NywgNTIsIDEsIDIzNSwgMzEsIDI0MCwgMTIxLCA1MiwgMSwgMjAwLCAyMzUsIDMxLCAKLSAgICAyNDAsIDEyMSwgNTIsIDEsIDQyLCAyMzAsIDEzMywgNTIsIDEsIDQxLCAyMzAsIDEzMywgNTIsIDEsIDk5LCAyMzAsIDEzMywgCi0gICAgNTIsIDEsIDEwMywgMjMwLCAxMzMsIDUyLCAxLCAyMzAsIDEyNSwgMjM1LCAyNCwgMjM3LCA0MywgNTIsIDEsIDYxLCAyNDAsIAotICAgIDEzOCwgNTIsIDEsIDIzNSwgMTYsIDUyLCAxLCAyNDAsIDE1OSwgMjM1LCAyNCwgNTIsIDEsIDI0MCwgMTYzLCAyMzUsIDI0LCAKLSAgICA1MiwgMSwgMTg0LCA2MSwgMjQwLCAxMzgsIDUyLCAxLCAxODQsIDIzNSwgMTYsIDUyLCAxLCAxODQsIDI0MCwgMTYzLCAyMzUsIAotICAgIDI0LCA1MiwgMSwgMTg0LCAyNDAsIDE1OSwgMjM1LCAyNCwgNTIsIDEsIDIzMCwgMTYwLCAyMzcsIDY2LCA1MiwgMSwgMTMyLCAKLSAgICAyMzAsIDE2MCwgMjM3LCA2NiwgNTIsIDEsIDIzNSwgMTEyLCA0MSwgMTMyLCAyNDAsIDE0NywgNTIsIDEsIDIzNSwgMTEyLCAKLSAgICA0MiwgMTMyLCAyNDAsIDE0NywgNTIsIDEsIDk5LCAyNDAsIDE0OSwgNTIsIDEsIDEwMywgMjQwLCAxNDksIDUyLCAxLCA3OSwgCi0gICAgNTMsIDUyLCAxLCAyNDAsIDE3MiwgNTMsIDIzNywgNDYsIDU2LCA0NiwgMjQ2LCAxNzQsIDQ2LCAyMzUsIDQ3LCAzLCAyMDUsIAotICAgIDQ3LCAyNDAsIDE1OSwgMjM1LCAyNCwgNTIsIDEsIDIzOSwgMjIyLCA4OCwgNTIsIDEsIDI0MCwgMjIxLCAyMzUsIDI0LCA1MiwgCi0gICAgMSwgMywgMjM3LCA2MSwgNTIsIDEsIDMsIDE0OSwgNTIsIDEsIDMsIDE5MywgNTIsIDEsIDMsIDI1NCwgMTg0LCA1MiwgMSwgCi0gICAgMywgMjAwLCAyMzUsIDMxLCAyNDAsIDEyMSwgNTIsIDEsIDIzMCwgMTUzLCAyMDYsIDEyNSwgNTIsIDEsIDIwMSwgMjA2LCAKLSAgICAxMjUsIDUyLCAxLCAyNTMsIDE1MiwgMjA2LCAxMjUsIDUyLCAxLCAxODQsIDIwNiwgMTI1LCA1MiwgMSwgMjMxLCAyMzcsIAotICAgIDIwNiwgMTI1LCA1MiwgMSwgMjUzLCAxMjIsIDIzMSwgMjQ5LCAyMDYsIDc2LCA1MiwgMSwgMjQ3LCAyNCwgMjMxLCAyNDksIAotICAgIDIwNiwgNzYsIDUyLCAxLCAyMzUsIDgsIDUyLCAxLCAyMjksIDE1OSwgNTIsIDEsIDQ3LCAyMjksIDE3MiwgNTIsIDEsIDE4NCwgCi0gICAgMTAzLCAyMzAsIDEzMywgNTIsIDEsIDE4NCwgOTksIDIzMCwgMTMzLCA1MiwgMSwgMTg0LCA0MiwgMjMwLCAxMzMsIDUyLCAxLCAKLSAgICAxODQsIDQxLCAyMzAsIDEzMywgNTIsIDEsIDE4NCwgMjQwLCAxNDcsIDUyLCAxLCAyMzcsIDQ0LCAyNDAsIDE2MywgMjM1LCAKLSAgICAyNCwgNTIsIDEsIDIzNywgNDQsIDQ3LCAyNDAsIDE2MywgMjM1LCAyNCwgNTIsIDEsIDIzNywgNDQsIDQ3LCAyNDAsIDE1OSwgCi0gICAgMjM1LCAyNCwgNTIsIDEsIDE4NCwgMjA1LCA1MiwgMSwgMjM3LCAxMDUsIDIzNywgNjYsIDUyLCAxLCAyNDAsIDIwNSwgMjAxLCAKLSAgICAyNDAsIDE2NywgNTIsIDEsIDI1MiwgMjU1LCAyMDEsIDI0MCwgMTY3LCA1MiwgMSwgMjQwLCAyMDUsIDE4NCwgMjQwLCAxNjcsIAotICAgIDUyLCAxLCAyNTIsIDI1NSwgMTg0LCAyNDAsIDE2NywgNTIsIDEsIDIzOCwgNTEsIDUyLCAxLCAyNDYsIDE1NywgMjM4LCA1MSwgCi0gICAgNTIsIDEsIDE4NCwgNDIsIDU4LCAzNiwgMjQwLCAxNjMsIDIzNSwgMjQsIDM2LCAyNDAsIDE1OSwgMjM1LCAyNCwgMzYsIAotICAgIDIzMCwgMTI1LCAyMzUsIDI0LCAzNiwgMjA1LCAzNiwgMjM1LCAxNiwgMzYsIDIzMSwgMjIzLCAzNiwgMjM3LCA0NiwgMzYsIAotICAgIDU2LCA0NiwgMzYsIDIxOSwgMzYsIDI0NiwgMTcxLCA0NiwgMzYsIDI0NiwgMTc0LCA0NiwgMzYsIDQ3LCAyNDAsIDE1OSwgCi0gICAgMjM1LCAyNCwgMzYsIDIzNywgNDMsIDM2LCA2MSwgMjQ2LCAxNjcsIDQ2LCAzNiwgNDcsIDYxLCAyNDYsIDE2NywgNDYsIDM2LCAKLSAgICA0NywgMjQwLCAxNjMsIDIzNSwgMjQsIDM2LCAyMjgsIDE4NCwgMzYsIDIzMywgNzAsIDIzNywgNDYsIDM2LCAyMDksIDI0MCwgCi0gICAgMTYyLCA0NiwgMzYsIDI0MCwgMTYyLCA0NiwgMzYsIDIwMCwgMjQwLCAxNjIsIDQ2LCAzNiwgMjQwLCAxNjIsIDY0LCAyMzcsIAotICAgIDQxLCAzNiwgMjQwLCAxNjMsIDIzNywgNDgsIDUxLCAzNiwgMjQwLCAxNTksIDIzNywgNDgsIDUxLCAzNiwgNDIsIDI0NiwgCi0gICAgMjE1LCA1MSwgMzYsIDQxLCAyNDYsIDIxNSwgNTEsIDM2LCA0MiwgMjQwLCAxMTcsIDQ2LCAzNiwgMjQwLCAxNzksIDM2LCAKLSAgICA0MiwgMTMyLCAyNDYsIDE3NCwgNTEsIDM2LCA5OSwgMjQ2LCAyMTUsIDUxLCAzNiwgMTAzLCAyNDYsIDIxNSwgNTEsIDM2LCAKLSAgICA3OSwgNSwgNTEsIDM2LCAyNDAsIDE3MiwgNSwgNTEsIDM2LCAyMzAsIDg1LCAyNDYsIDE3MSwgNTEsIDM2LCAyMzEsIDIwMSwgCi0gICAgMjQ2LCAxNzEsIDUxLCAzNiwgNTYsIDUxLCAzNiwgMjMxLCAyMDMsIDUxLCAzNiwgMjQ2LCAxNzQsIDUxLCAzNiwgMjQwLCAKLSAgICAxNjIsIDUxLCAzNiwgMjMzLCA3OSwgMzYsIDIzNSwgNDcsIDM2LCA2MSwgMjQ2LCAxNjcsIDUxLCAzNiwgMjM3LCAxNzQsIAotICAgIDUxLCAzNiwgMjMzLCA3MCwgNDcsIDI0OCwgMjM4LCA1MSwgMzYsIDI0MSwgMjksIDUxLCAzNiwgMjMwLCAxMjUsIDIzNywgCi0gICAgNDgsIDUxLCAzNiwgMjQwLCAxNjEsIDUxLCAzNiwgMjMzLCA3MCwgMjQwLCAxNjEsIDUxLCAzNiwgMjQwLCAxMjgsIDUxLCAKLSAgICAzNiwgMjM3LCA4MywgNTEsIDM2LCAxODQsIDI0MCwgMTM4LCAzNiwgNDcsIDE4NCwgMjQwLCAxMzgsIDM2LCAyNDAsIDEyOCwgCi0gICAgMjMzLCA4NywgMzYsIDI0MCwgMTI1LCAxOTUsIDIzMywgODcsIDM2LCAxODIsIDE5NSwgMjMzLCA4NywgMzYsIDI0MCwgMTI1LCAKLSAgICAyMzUsIDU0LCAyMzMsIDg3LCAzNiwgMTgyLCAyMzUsIDU0LCAyMzMsIDg3LCAzNiwgNDEsIDEzMiwgMjQ2LCAxNzQsIDUxLCAKLSAgICAzNiwgMjMzLCA3MCwgMjM3LCAxNzQsIDUxLCAzNiwgMzcsIDUxLCAzNiwgMjM2LCAyMTIsIDUxLCAzNiwgMjU1LCA3NCwgNDYsIAotICAgIDM2LCA2MSwgMjA1LCAzNiwgNDcsIDIzMSwgMjIzLCAzNiwgMjQwLCAxNjMsIDIwNiwgNzYsIDM2LCAyNDAsIDE1OSwgMjA2LCAKLSAgICA3NiwgMzYsIDE5LCAyMjgsIDE3OSwgMzYsIDE5LCAyMzMsIDE3MCwgMzYsIDE5LCAyMzEsIDIwNywgMjM3LCA3MCwgMzYsIAotICAgIDE5LCAyMjcsIDEzMiwgMzYsIDIzNywgMTc0LCA0NiwgMzYsIDIzNywgNTEsIDUsIDUxLCAzNiwgNDcsIDYxLCAyNDYsIDE2NywgCi0gICAgNTEsIDM2LCA0MiwgMjQwLCAxMTcsIDUxLCAzNiwgMTkwLCAyNDAsIDEyOCwgNDYsIDM2LCAyMzEsIDc5LCA0NiwgMzYsIAotICAgIDIzNywgNzgsIDEwNSwgMTgwLCA0NiwgMzYsIDQyLCA0MSwgNjcsIDUxLCAzNiwgMjM1LCAxOCwgNjcsIDUxLCAzNiwgMjM0LCAKLSAgICAxMTMsIDIzNSwgMTI0LCAzNiwgNDEsIDIzMSwgMjE0LCA0NiwgMzYsIDQyLCAxMzIsIDI0NiwgMTc0LCA0NiwgMzYsIDIzMywgCi0gICAgMjA1LCAzNiwgMjU1LCA3NCwgNTEsIDM2LCA0MiwgMjMxLCAyMTQsIDUxLCAzNiwgNDEsIDIzMSwgMjE0LCA1MSwgMzYsIDQxLCAKLSAgICAyMzEsIDIxNCwgMjIsIDk5LCAyMzEsIDIxNCwgNTEsIDM2LCA0MSwgMTMyLCAyNDYsIDE3NCwgNDYsIDM2LCA1NiwgNjQsIAotICAgIDIzNywgNDEsIDM2LCAyMzMsIDE0NSwgNTEsIDM2LCA0NywgMjQ2LCAxNzQsIDUxLCAzNiwgMjM3LCAxNzAsIDQ2LCAzNiwgCi0gICAgNDcsIDI0MCwgMTYxLCA1MSwgMzYsIDQ3LCAyMzcsIDQ2LCAzNiwgNDcsIDIzNSwgMTYsIDM2LCA0NywgMjM3LCA4MywgNTEsIAotICAgIDM2LCA0NywgMjA1LCAzNiwgNDcsIDIzMywgNzAsIDIzNywgNDYsIDM2LCA0NywgODEsIDY3LCA1MSwgMzYsIDcsIDMsIDEsIAotICAgIDU3LCAzNiwgNywgMywgMSwgNzIsIDM2LCA3LCAzLCAxLCA3NCwgMzYsIDcsIDMsIDEsIDczLCAzNiwgNywgMywgMSwgNjYsIAotICAgIDM2LCA3LCAzLCAxLCAyNTQsIDE5NCwgMzYsIDcsIDMsIDEsIDIyMiwgMjIyLCAzNiwgNywgMywgMSwgMjEyLCAzNiwgNywgMywgCi0gICAgMSwgMTg1LCAzNiwgNywgMywgMSwgMTQ2LCAzNiwgNywgMywgMSwgMjU0LCAxODMsIDM2LCA3LCAzLCAxLCAxOTYsIDM2LCA3LCAKLSAgICAzLCAxLCAyNTQsIDE4NCwgMTksIDYsIDEsIDI0MSwgMTU1LCAxOSwgMywgMSwgMjQxLCAxNTUsIDE5LCA2LCAxLCAyMzUsIAotICAgIDgzLCAyMzcsIDE0MywgMTksIDMsIDEsIDIzNSwgODMsIDIzNywgMTQzLCAxOSwgMjA3LCA1MywgMTksIDIwMywgMjA3LCA1MywgCi0gICAgMTksIDYsIDEsIDIzMCwgMTkxLCAyMzMsIDEyOSwgMTksIDMsIDEsIDIzMCwgMTkxLCAyMzMsIDEyOSwgMTksIDIyNywgMTMyLCAKLSAgICAxOSwgMywgMjAwLCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgMywgMjM3LCA1MCwgMjM3LCAxMDMsIDI0MCwgMTk3LCAKLSAgICA5OCwgMTksIDMsIDIwMCwgMjM3LCA1MCwgMjM3LCAxMDMsIDI0MCwgMTk3LCA5OCwgMTksIDIzMywgODIsIDc2LCAxOSwgCi0gICAgMjM3LCA3MCwgMTksIDIzMSwgMjA3LCAyMzcsIDcwLCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDIzNywgNzAsIDE5LCAyNTQsIAotICAgIDI2LCAyMzUsIDIyMCwgMTksIDYsIDEsIDIzNSwgMjgsIDIsIDIzNywgNzAsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMjM3LCAKLSAgICA3MCwgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDcwLCAxOSwgNiwgMSwgMjM1LCAzNSwgMiwgMjM3LCA3MCwgMTksIDYsIAotICAgIDEsIDIzNSwgMjMsIDIsIDIzNywgNzAsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMjM3LCA3MCwgMTksIDMsIDEsIDI0NiwgCi0gICAgMTY4LCAyLCAyMzEsIDIwNywgMjIsIDIzNywgNzAsIDE5LCA2LCAxLCAyMzcsIDcxLCAxOSwgNiwgMSwgMjQwLCAxNjAsIDE5LCAKLSAgICA2LCAxLCAyMzcsIDYxLCAxOSwgNiwgMSwgMjM3LCA3NSwgMTksIDYsIDEsIDIzMywgOTYsIDE5LCA2LCAxLCAyNDAsIDE3MywgCi0gICAgMTksIDYsIDEsIDI0NiwgMjE5LCAxOSwgNiwgMSwgMjM3LCA4OSwgMTksIDYsIDEsIDI0MCwgMTQ2LCAxOSwgNiwgMSwgMjM3LCAKLSAgICA5MSwgMTksIDYsIDEsIDIzNywgODIsIDE5LCA2LCAxLCAyNTIsIDIyOSwgMTksIDYsIDEsIDI1MiwgMjI3LCAxOSwgNiwgMSwgCi0gICAgMjUzLCAzOCwgMTksIDYsIDEsIDIzMywgMTAwLCAxOSwgNiwgMSwgMjUyLCAyMjMsIDE5LCA2LCAxLCAyNDYsIDIwOSwgMTksIAotICAgIDYsIDEsIDIzNywgNzMsIDE5LCA2LCAxLCAyNDYsIDIxMiwgMTksIDYsIDEsIDIzMywgOTIsIDE5LCA2LCAxLCAyNDYsIDE5OCwgCi0gICAgMTksIDYsIDEsIDI0NiwgMjAwLCAxOSwgNiwgMSwgMjQ2LCAyMDQsIDE5LCA2LCAxLCAyMzcsIDY4LCAxOSwgNiwgMSwgMjQ2LCAKLSAgICAxNjgsIDIsIDIzMCwgMTUyLCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgMjMwLCAxNTIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgCi0gICAgMjM3LCA3MCwgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDIzNywgNzAsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMjM3LCA3MCwgCi0gICAgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDcwLCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjMxLCAyMDcsIDIyLCAyMzcsIAotICAgIDcwLCAxOSwgMywgMSwgMjM3LCA3MSwgMTksIDMsIDEsIDI0MCwgMTYwLCAxOSwgMywgMSwgMjM3LCA2MSwgMTksIDMsIDEsIAotICAgIDIzNywgNzUsIDE5LCAzLCAxLCAyMzMsIDk2LCAxOSwgMywgMSwgMjQwLCAxNzMsIDE5LCAzLCAxLCAyNDYsIDIxOSwgMTksIAotICAgIDMsIDEsIDIzNywgODksIDE5LCAzLCAxLCAyNDAsIDE0NiwgMTksIDMsIDEsIDIzNywgOTEsIDE5LCAzLCAxLCAyMzcsIDgyLCAKLSAgICAxOSwgMywgMSwgMjUyLCAyMjksIDE5LCAzLCAxLCAyNTIsIDIyNywgMTksIDMsIDEsIDI1MywgMzgsIDE5LCAzLCAxLCAyMzMsIAotICAgIDEwMCwgMTksIDMsIDEsIDI1MiwgMjIzLCAxOSwgMywgMSwgMjQ2LCAyMDksIDE5LCAzLCAxLCAzNSwgMjM3LCA3MywgMTksIAotICAgIDMsIDEsIDIzNywgNzMsIDE5LCAzLCAxLCAyNDYsIDIxMiwgMTksIDMsIDEsIDIzMywgOTIsIDE5LCAzLCAxLCAyNDYsIDE5OCwgCi0gICAgMTksIDMsIDEsIDI0NiwgMjAwLCAxOSwgMywgMSwgMjQ2LCAyMDQsIDE5LCAzLCAxLCAyMzcsIDY4LCAxOSwgMywgMSwgMjQ2LCAKLSAgICAxNjgsIDIsIDIzMCwgMTUyLCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjMwLCAxNTIsIDE5LCAzLCAxLCAyMzUsIDM1LCAyLCAKLSAgICAyMzcsIDcwLCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjM3LCA3MCwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyMzcsIDcwLCAKLSAgICAxOSwgNiwgMjUzLCAxNTAsIDk4LCAxOSwgMjQ5LCAxMTIsIDk4LCAxOSwgMjQwLCAxNzgsIDk4LCAxOSwgMjM1LCAyMywgMiwgCi0gICAgMjQ2LCAxNzEsIDk4LCAxOSwgMjM1LCAyMywgMiwgMjQwLCAxNTksIDIyLCAyNDYsIDE3MSwgOTgsIDE5LCAyMzUsIDIzLCAyLCAKLSAgICAyMzEsIDIwMywgMjIsIDI0NiwgMTcxLCA5OCwgMTksIDI1MywgMTIwLCA5OCwgMTksIDI1NCwgMjAwLCA5OCwgMTksIDI1MywgCi0gICAgMTUwLCA5OCwgMTksIDEsIDIzNSwgODMsIDIzNywgMTM2LCAxOSwgMywgMSwgMjM1LCA4MywgMjM3LCAxMzYsIDE5LCAxLCAKLSAgICAyMzUsIDEzOCwgMTksIDMsIDEsIDIzNSwgMTM4LCAxOSwgMSwgMjMzLCAxMjksIDE5LCAzLCAxLCAyMzMsIDEyOSwgMTksIDEsIAotICAgIDIzNywgMTM2LCAxOSwgMywgMSwgMjM3LCAxMzYsIDE5LCAxLCAyMzcsIDE0MywgMTksIDMsIDEsIDIzNywgMTQzLCA3MCwgNiwgCi0gICAgMSwgMjQwLCAyMTIsIDcwLCAzLCAxLCAyNDAsIDIxMiwgNzAsIDYsIDEsIDI0OCwgMzcsIDcwLCAzLCAxLCAyNDgsIDM3LCAKLSAgICA3MCwgNiwgMSwgMjQxLCAxLCA3MCwgMywgMSwgMjQxLCAxLCA3MCwgNiwgMSwgMjQwLCAyMDksIDcwLCAzLCAxLCAyNDAsIAotICAgIDIwOSwgNzAsIDYsIDEsIDIzNSwgOTMsIDcwLCAzLCAxLCAyMzUsIDkzLCA3MCwgNiwgMSwgMjM3LCAxNDYsIDcwLCAzLCAxLCAKLSAgICAyMzcsIDE0NiwgNzAsIDYsIDEsIDI0OCwgMjUsIDcwLCAzLCAxLCAyNDgsIDI1LCAxOSwgMjQwLCAyMTAsIDk4LCAxOSwgCi0gICAgMjUzLCA3MCwgOTgsIDE5LCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgMSwgMjQ4LCAyMDMsIDE5LCA2LCAyNDAsIAotICAgIDE3OCwgOTgsIDE5LCAyMzcsIDEwMywgMjM1LCAyOCwgOTgsIDE5LCAyMDAsIDIzNywgMTAzLCAyMzUsIDI4LCA5OCwgMTksIAotICAgIDYsIDEsIDI0NiwgMjQ1LCAxOSwgMywgMSwgMjQ2LCAyNDUsIDE5LCA2LCAyMzcsIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgNiwgCi0gICAgMSwgMjQ3LCA0OSwgMTksIDMsIDEsIDI0NywgNDksIDE5LCAyNTMsIDcwLCAyLCAxOTUsIDk4LCAxOSwgNiwgMjAwLCAyMzcsIAotICAgIDEwMywgMjQwLCAxOTcsIDk4LCAxOSwgNiwgMjM3LCA1MCwgMjM3LCAxMDMsIDI0MCwgMTk3LCA5OCwgMTksIDYsIDIwMCwgCi0gICAgMjM3LCA1MCwgMjM3LCAxMDMsIDI0MCwgMTk3LCA5OCwgMjgsIDYsIDEsIDI1NCwgMjM3LCAyLCAyMzcsIDM2LCAyOCwgNiwgCi0gICAgMSwgMjUzLCAyMzIsIDI4LCA2LCAxLCAyNDcsIDcwLCAyOCwgNiwgMSwgMjQ4LCA1NSwgMjgsIDYsIDEsIDIzMiwgNjEsIAotICAgIDI1MywgNzcsIDI4LCA2LCAxLCAyNDYsIDI1NSwgMjgsIDYsIDEsIDIyMiwgMjI0LCA3NCwgMjgsIDYsIDEsIDI1MywgMjgsIAotICAgIDI4LCA2LCAxLCAyNTMsIDExNywgMjgsIDYsIDEsIDI0NywgODYsIDI4LCA2LCAxLCAyNDcsIDQzLCAyOCwgNiwgMSwgMjQyLCAKLSAgICAxMCwgMjgsIDYsIDEsIDI0OCwgODQsIDI4LCA2LCAxLCAyNTUsIDU1LCAyLCAyMzcsIDM2LCAyOCwgNiwgMSwgMjQwLCAxMjUsIAotICAgIDY2LCAyOCwgNiwgMSwgMjQxLCAxMjIsIDI4LCA2LCAxLCA1NywgMjgsIDYsIDEsIDI1MywgNzMsIDI4LCA2LCAxLCAyNTMsIAotICAgIDk1LCAyOCwgNiwgMSwgMjQ3LCAxMywgMjgsIDYsIDEsIDI1MywgMjAsIDI4LCA2LCAxLCAyNTMsIDc3LCAyOCwgNiwgMSwgCi0gICAgMjQ2LCAyNTEsIDI4LCA2LCAxLCAyNTMsIDQ2LCAyOCwgNiwgMSwgNzQsIDI4LCA2LCAxLCAyNDAsIDEyNSwgNzQsIDI4LCA2LCAKLSAgICAxLCAxNzcsIDI4LCA2LCAxLCAyNTMsIDU4LCAyOCwgNiwgMSwgMjUzLCA4NywgMjgsIDYsIDEsIDI1MiwgMjMyLCAyOCwgNiwgCi0gICAgMSwgNzMsIDI4LCA2LCAxLCAyNTMsIDAsIDI4LCA2LCAxLCAyNTMsIDk5LCAyOCwgNiwgMSwgMjUzLCAxMTYsIDI4LCA2LCAxLCAKLSAgICAyNTMsIDksIDI4LCA2LCAxLCA2NiwgMjgsIDYsIDEsIDI1MywgMTI0LCAyOCwgNiwgMSwgMTU0LCAyOCwgNiwgMSwgMjQ2LCAKLSAgICAyNDgsIDI4LCA2LCAxLCAyNDYsIDIxNywgMjgsIDYsIDEsIDI0NiwgMTY1LCAyOCwgNiwgMSwgMjM3LCAyMTUsIDI4LCA2LCAKLSAgICAxLCAyNDgsIDU4LCA1MywgMjgsIDYsIDEsIDI0MSwgMjQsIDI4LCA2LCAxLCAyNDYsIDIyNywgNTMsIDI4LCA2LCAxLCA3MiwgCi0gICAgMjgsIDYsIDEsIDI1MiwgMjMzLCAyOCwgNiwgMSwgMTkxLCAyOCwgMywgMSwgNTcsIDI4LCAzLCAxLCAyNTMsIDczLCAyOCwgCi0gICAgMywgMSwgMjUzLCA5NSwgMjgsIDMsIDEsIDI0NywgMTMsIDI4LCAzLCAxLCAyNTMsIDIwLCAyOCwgMywgMSwgMjUzLCA3NywgCi0gICAgMjgsIDMsIDEsIDI0NiwgMjUxLCAyOCwgMywgMSwgMjUzLCA0NiwgMjgsIDMsIDEsIDc0LCAyOCwgMywgMSwgMjQwLCAxMjUsIAotICAgIDc0LCAyOCwgMywgMSwgMTc3LCAyOCwgMywgMSwgMjUzLCA1OCwgMjgsIDMsIDEsIDI1MywgODcsIDI4LCAzLCAxLCAyNTIsIAotICAgIDIzMiwgMjgsIDMsIDEsIDczLCAyOCwgMywgMSwgMjUzLCAwLCAyOCwgMywgMSwgMjUzLCA5OSwgMjgsIDMsIDEsIDI1MywgCi0gICAgMTE2LCAyOCwgMywgMSwgMjUzLCA5LCAyOCwgMywgMSwgNjYsIDI4LCAzLCAxLCAyNTMsIDEyNCwgMjgsIDMsIDEsIDE1NCwgCi0gICAgMjgsIDMsIDEsIDI0NiwgMjQ4LCAyOCwgMywgMSwgMjQ2LCAyMTcsIDI4LCAzLCAxLCAyNDYsIDE2NSwgMjgsIDMsIDEsIAotICAgIDIzNywgMjE1LCAyOCwgMywgMSwgMjQ4LCA1OCwgNTMsIDI4LCAzLCAxLCAyNDEsIDI0LCAyOCwgMywgMSwgMjQ2LCAyMjcsIAotICAgIDUzLCAyOCwgMywgMSwgNzIsIDI4LCAzLCAxLCAyNTIsIDIzMywgMjgsIDMsIDEsIDE5MSwgMjgsIDMsIDEsIDI1NCwgMjM3LCAKLSAgICAyLCAyMzcsIDM2LCAyOCwgMywgMSwgMjUzLCAyMzIsIDI4LCAzLCAxLCAyNDcsIDcwLCAyOCwgMywgMSwgMjQ4LCA1NSwgMjgsIAotICAgIDMsIDEsIDIzMiwgNjEsIDI1MywgNzcsIDI4LCAzLCAxLCAyNDYsIDI1NSwgMjgsIDMsIDEsIDIyMiwgMjI0LCA3NCwgMjgsIAotICAgIDMsIDEsIDI1MywgMjgsIDI4LCAzLCAxLCAyNTMsIDExNywgMjgsIDMsIDEsIDI0NywgODYsIDI4LCAzLCAxLCAyNDcsIDQzLCAKLSAgICAyOCwgMywgMSwgMjQyLCAxMCwgMjgsIDMsIDEsIDI0OCwgODQsIDI4LCAzLCAxLCAyNTUsIDU1LCAyLCAyMzcsIDM2LCAyOCwgCi0gICAgMywgMSwgMjQwLCAxMjUsIDY2LCAyOCwgMywgMSwgMjQxLCAxMjIsIDI4LCA2LCAxLCAyMzcsIDY4LCAyOCwgMywgMSwgMjM3LCAKLSAgICA2OCwgMjgsIDYsIDEsIDI0NywgMjUsIDI4LCAzLCAxLCAyNDcsIDI1LCAyOCwgNiwgMSwgMjMzLCA5MywgNzIsIDI4LCAzLCAKLSAgICAxLCAyMzMsIDkzLCA3MiwgMjgsIDYsIDEsIDIzNywgMTAyLCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzNywgMTAyLCAyNDYsIAotICAgIDE4MywgMjgsIDYsIDEsIDIzMywgOTMsIDIzNywgMTAyLCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzMywgOTMsIDIzNywgMTAyLCAKLSAgICAyNDYsIDE4MywgMjgsIDYsIDEsIDI1MywgNDcsIDI0NiwgMTgzLCAyOCwgMywgMSwgMjUzLCA0NywgMjQ2LCAxODMsIDI4LCAKLSAgICA2LCAxLCAyMzMsIDkzLCAyNTMsIDQ3LCAyNDYsIDE4MywgMjgsIDMsIDEsIDIzMywgOTMsIDI1MywgNDcsIDI0NiwgMTgzLCAKLSAgICAyOCwgNiwgMSwgMjQ3LCA4MywgMjgsIDMsIDEsIDI0NywgODMsIDI4LCA2LCAxLCAyNDYsIDIwNCwgMjgsIDMsIDEsIDI0NiwgCi0gICAgMjA0LCAyOCwgNiwgMSwgMjQwLCAyMjYsIDI4LCAzLCAxLCAyNDAsIDIyNiwgMjgsIDYsIDEsIDIzMywgMTUxLCAyOCwgMywgCi0gICAgMSwgMjMzLCAxNTEsIDI4LCA2LCAxLCAyMzUsIDE4MCwgMiwgNDcsIDI0MCwgMTYzLCAyMzUsIDI0LCAyOCwgMywgMSwgMjM1LCAKLSAgICAxODAsIDIsIDQ3LCAyNDAsIDE2MywgMjM1LCAyNCwgMjgsIDYsIDEsIDI1MywgMTM3LCAyOCwgMywgMSwgMjUzLCAxMzcsIAotICAgIDI4LCA2LCAxLCAyNDEsIDIyNiwgMjM3LCA2OCwgMjgsIDMsIDEsIDI0MSwgMjI2LCAyMzcsIDY4LCAyOCwgNiwgMSwgMjQwLCAKLSAgICAxMjMsIDIsIDIzNywgMjIwLCAyOCwgMywgMSwgMjQwLCAxMjMsIDIsIDIzNywgMjIwLCAyOCwgNiwgMSwgMjUzLCAxODgsIAotICAgIDI4LCAzLCAxLCAyNTMsIDE4OCwgMjgsIDYsIDEsIDIzNywgMTM2LCAyOCwgMywgMSwgMjM3LCAxMzYsIDI4LCAyMzIsIDEyLCAKLSAgICA1MywgMzYsIDI4LCAyMzcsIDIyMCwgMzYsIDI4LCAyMjcsIDc0LCAzNiwgMjgsIDE3MiwgMjMyLCAzNSwgMzYsIDI4LCAxODYsIAotICAgIDIzMiwgMzUsIDM2LCAyOCwgMjMyLCAyNTIsIDM2LCAyOCwgMjM1LCA1NiwgMjMyLCAxMiwgNTMsIDM2LCAyOCwgMjMzLCAKLSAgICAxNTIsIDUzLCAyOCwgNiwgMSwgMjQwLCAxMjUsIDI1NSwgNTUsIDIsIDI0MCwgMTMzLCAyOCwgMywgMSwgMjQwLCAxMjUsIAotICAgIDI1NSwgNTUsIDIsIDI0MCwgMTMzLCAyOCwgNiwgMSwgMjMzLCAyMzMsIDUzLCAyOCwgMywgMSwgMjMzLCAyMzMsIDUzLCAyOCwgCi0gICAgNiwgMSwgMjU1LCA1LCAyLCAyNDAsIDIxNiwgMjgsIDMsIDEsIDI1NSwgNSwgMiwgMjQwLCAyMTYsIDI4LCA2LCAxLCAyNTMsIAotICAgIDY3LCAyLCAyMzUsIDIzMCwgMjgsIDMsIDEsIDI1MywgNjcsIDIsIDIzNSwgMjMwLCAyOCwgNiwgMSwgMjUzLCA2NywgMiwgCi0gICAgODIsIDI4LCAzLCAxLCAyNTMsIDY3LCAyLCA4MiwgMjgsIDYsIDEsIDI1MywgNjcsIDIsIDIzNywgNDQsIDg4LCAyOCwgMywgCi0gICAgMSwgMjUzLCA2NywgMiwgMjM3LCA0NCwgODgsIDI4LCA2LCAxLCAyNTMsIDEyMywgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAKLSAgICAyNTMsIDEyMywgMiwgMjMwLCAxMjYsIDI4LCA2LCAxLCAyNTQsIDI0NSwgMiwgMjMwLCAxMjYsIDI4LCAzLCAxLCAyNTQsIAotICAgIDI0NSwgMiwgMjMwLCAxMjYsIDI4LCA2LCAxLCAxODgsIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMTg4LCAyLCAyMzAsIDEyNiwgCi0gICAgMjgsIDYsIDEsIDE4OCwgMiwgNjEsIDgyLCAyOCwgMywgMSwgMTg4LCAyLCA2MSwgODIsIDI4LCA2LCAxLCAxODgsIDIsIDgyLCAKLSAgICAyOCwgMywgMSwgMTg4LCAyLCA4MiwgMjgsIDYsIDEsIDIzNSwgMTQ5LCAxNzcsIDI4LCAzLCAxLCAyMzUsIDE0OSwgMTc3LCAKLSAgICAyOCwgNiwgMSwgMjU0LCAxOTksIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMjU0LCAxOTksIDIsIDIzMCwgMTI2LCAyOCwgNiwgCi0gICAgMjAsIDI1NCwgMTk5LCAyNDcsIDEzLCAyOCwgMywgMjAsIDI1NCwgMTk5LCAyNDcsIDEzLCAyOCwgNiwgMSwgMjU0LCAyMzEsIAotICAgIDIsIDIzNywgNDQsIDg4LCAyOCwgMywgMSwgMjU0LCAyMzEsIDIsIDIzNywgNDQsIDg4LCAyOCwgNiwgMSwgMjMxLCAyMTUsIAotICAgIDE1NCwgMjgsIDMsIDEsIDIzMSwgMjE1LCAxNTQsIDI4LCA2LCAxLCAyNTUsIDYsIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgCi0gICAgMjU1LCA2LCAyLCAyMzAsIDEyNiwgMjgsIDYsIDEsIDI1NCwgMjEyLCAyLCAyMzAsIDEyNiwgMjgsIDMsIDEsIDI1NCwgMjEyLCAKLSAgICAyLCAyMzAsIDEyNiwgMjgsIDYsIDEsIDIzMywgMTU3LCA2NiwgMjgsIDMsIDEsIDIzMywgMTU3LCA2NiwgMjgsIDYsIDEsIAotICAgIDIzMywgMTU3LCA5NywgMiwgODIsIDI4LCAzLCAxLCAyMzMsIDE1NywgOTcsIDIsIDgyLCAyOCwgNiwgMSwgMjU0LCAyMDQsIAotICAgIDIsIDIzMCwgMTI2LCAyOCwgMywgMSwgMjU0LCAyMDQsIDIsIDIzMCwgMTI2LCAyOCwgNiwgMjAsIDI1NCwgMjEyLCAyNDYsIAotICAgIDI0OCwgMjgsIDMsIDIwLCAyNTQsIDIxMiwgMjQ2LCAyNDgsIDI4LCA2LCAxLCAyNTMsIDc0LCAyLCAyMzAsIDEyNiwgMjgsIAotICAgIDMsIDEsIDI1MywgNzQsIDIsIDIzMCwgMTI2LCAyOCwgNiwgMSwgMjUzLCA3NCwgMiwgNjEsIDgyLCAyOCwgMywgMSwgMjUzLCAKLSAgICA3NCwgMiwgNjEsIDgyLCAyOCwgNiwgMSwgMjQxLCAyMzYsIDI4LCAzLCAxLCAyNDEsIDIzNiwgMjgsIDYsIDEsIDIzMSwgCi0gICAgMjE1LCAyNDYsIDIxNywgMjgsIDMsIDEsIDIzMSwgMjE1LCAyNDYsIDIxNywgMjgsIDYsIDEsIDIzMSwgMjE1LCAyNTMsIDc0LCAKLSAgICAyLCAyMzAsIDEyNiwgMjgsIDMsIDEsIDIzMSwgMjE1LCAyNTMsIDc0LCAyLCAyMzAsIDEyNiwgMjgsIDEsIDIzMiwgMzIsIAotICAgIDI4LCA2LCAxLCAyNTMsIDEyMywgMiwgMjM3LCA0NiwgMjgsIDMsIDEsIDI1MywgMTIzLCAyLCAyMzcsIDQ2LCAyOCwgNiwgMSwgCi0gICAgMTg4LCAyLCA4OCwgMjgsIDMsIDEsIDE4OCwgMiwgODgsIDI4LCA2LCAxLCAyNTQsIDIxMSwgMiwgMjQwLCAxMzMsIDI4LCAzLCAKLSAgICAxLCAyNTQsIDIxMSwgMiwgMjQwLCAxMzMsIDI4LCA2LCAxLCAyNTQsIDE5OSwgMiwgODgsIDI4LCAzLCAxLCAyNTQsIDE5OSwgCi0gICAgMiwgODgsIDI4LCA2LCAxLCAyNTQsIDE5OSwgMiwgMjQwLCAxMzMsIDI4LCAzLCAxLCAyNTQsIDE5OSwgMiwgMjQwLCAxMzMsIAotICAgIDI4LCA2LCAxLCAyMzAsIDE4OSwgMjQ2LCAyMTcsIDI4LCAzLCAxLCAyMzAsIDE4OSwgMjQ2LCAyMTcsIDI4LCA2LCAxLCAKLSAgICAyNTQsIDIxMywgMiwgMjQwLCAxMzMsIDI4LCAzLCAxLCAyNTQsIDIxMywgMiwgMjQwLCAxMzMsIDI4LCAzLCAxLCAyMzIsIAotICAgIDMyLCAyOCwgNiwgMSwgMTAyLCAyLCAyMzcsIDQ2LCAyOCwgMywgMSwgMTAyLCAyLCAyMzcsIDQ2LCAyOCwgNiwgMSwgMTAyLCAKLSAgICAyLCAyMTksIDI4LCAzLCAxLCAxMDIsIDIsIDIxOSwgMjgsIDYsIDIwLCAxMDIsIDI1MywgNzcsIDI4LCAzLCAyMCwgMTAyLCAKLSAgICAyNTMsIDc3LCAyOCwgNiwgMSwgMjU0LCAyMzcsIDIsIDIzNywgNDYsIDI4LCAzLCAxLCAyNTQsIDIzNywgMiwgMjM3LCA0NiwgCi0gICAgMjgsIDYsIDEsIDIzNywgMTQ0LCAyOCwgMywgMSwgMjM3LCAxNDQsIDI4LCA2LCAxLCAyNDEsIDE0LCAyLCAyMTksIDI4LCAzLCAKLSAgICAxLCAyNDEsIDE0LCAyLCAyMTksIDI4LCA2LCAxLCAyNTMsIDEyMywgMiwgMjE5LCAyOCwgMywgMSwgMjUzLCAxMjMsIDIsIAotICAgIDIxOSwgMjgsIDYsIDEsIDI1NCwgMjQ1LCAyLCAyMTksIDI4LCAzLCAxLCAyNTQsIDI0NSwgMiwgMjE5LCAyOCwgNiwgMSwgCi0gICAgMjMxLCAyMTUsIDI0NiwgMjU1LCAyOCwgMywgMSwgMjMxLCAyMTUsIDI0NiwgMjU1LCAyOCwgNiwgMSwgMjU1LCA1NSwgMiwgCi0gICAgMjM1LCAxNiwgMjgsIDMsIDEsIDI1NSwgNTUsIDIsIDIzNSwgMTYsIDI4LCA2LCAxLCAyNTUsIDU1LCAyLCAyMTksIDI4LCAzLCAKLSAgICAxLCAyNTUsIDU1LCAyLCAyMTksIDI4LCA2LCAxLCAxMzAsIDIsIDIxOSwgMjgsIDMsIDEsIDEzMCwgMiwgMjE5LCAyOCwgNiwgCi0gICAgMSwgMjM3LCAxMTgsIDczLCAyOCwgMywgMSwgMjM3LCAxMTgsIDczLCAyOCwgNiwgMSwgMjM3LCAxMTgsIDEzMCwgMiwgMjE5LCAKLSAgICAyOCwgMywgMSwgMjM3LCAxMTgsIDEzMCwgMiwgMjE5LCAyOCwgNiwgMSwgMTYxLCAyLCAyMTksIDI4LCAzLCAxLCAxNjEsIDIsIAotICAgIDIxOSwgMjgsIDYsIDEsIDk3LCAyLCAyMzUsIDE2LCAyOCwgMywgMSwgOTcsIDIsIDIzNSwgMTYsIDI4LCA2LCAxLCA5NywgMiwgCi0gICAgMjE5LCAyOCwgMywgMSwgOTcsIDIsIDIxOSwgMjgsIDYsIDEsIDk3LCAyLCA0NywgMTU1LCAyOCwgMywgMSwgOTcsIDIsIDQ3LCAKLSAgICAxNTUsIDI4LCA2LCAxLCAyNTMsIDc0LCAyLCAyMTksIDI4LCAzLCAxLCAyNTMsIDc0LCAyLCAyMTksIDI4LCA2LCAxLCAyNTMsIAotICAgIDY3LCAyLCAyMzAsIDEyNiwgMjgsIDMsIDEsIDI1MywgNjcsIDIsIDIzMCwgMTI2LCAyOCwgNiwgMSwgMjQ3LCAxMTksIDIsIAotICAgIDIxOSwgMjgsIDMsIDEsIDI0NywgMTE5LCAyLCAyMTksIDI4LCA2LCAxLCAyNTMsIDY3LCAyLCAxOTUsIDIyLCA4OCwgMjgsIAotICAgIDMsIDEsIDI1MywgNjcsIDIsIDE5NSwgMjIsIDg4LCAyOCwgNiwgMSwgMjU0LCAyMDQsIDIsIDg4LCAyOCwgMywgMSwgMjU0LCAKLSAgICAyMDQsIDIsIDg4LCAyOCwgNiwgMSwgMjU0LCAyMDQsIDIsIDgyLCAyOCwgMywgMSwgMjU0LCAyMDQsIDIsIDgyLCAyOCwgNiwgCi0gICAgMSwgMjQ2LCAyMDcsIDI1MywgMjAsIDI4LCAzLCAxLCAyNDYsIDIwNywgMjUzLCAyMCwgMjgsIDYsIDEsIDI0NiwgMjA3LCAKLSAgICAyNDcsIDcwLCAyOCwgMywgMSwgMjQ2LCAyMDcsIDI0NywgNzAsIDI4LCA2LCAxLCAyNDYsIDIwNywgMjQ4LCAyMDksIDI4LCAKLSAgICAzLCAxLCAyNDYsIDIwNywgMjQ4LCAyMDksIDI4LCA2LCAxLCAyNDYsIDIwNywgMjQxLCAxMjMsIDI4LCAzLCAxLCAyNDYsIAotICAgIDIwNywgMjQxLCAxMjMsIDI4LCA2LCAxLCAyNDYsIDIwNywgMjQ3LCA4NiwgMjgsIDMsIDEsIDI0NiwgMjA3LCAyNDcsIDg2LCAKLSAgICAyOCwgNiwgMSwgMjQ2LCAyMDcsIDI0NywgNDMsIDI4LCAzLCAxLCAyNDYsIDIwNywgMjQ3LCA0MywgMjgsIDYsIDEsIDI0NiwgCi0gICAgMjA3LCAyNDgsIDE2NCwgMjgsIDMsIDEsIDI0NiwgMjA3LCAyNDgsIDE2NCwgMjgsIDYsIDEsIDI0NiwgMjA3LCAyNDgsIAotICAgIDE3MywgMjgsIDMsIDEsIDI0NiwgMjA3LCAyNDgsIDE3MywgMjgsIDYsIDEsIDIwMCwgMjUzLCA0NiwgMjgsIDMsIDEsIDIwMCwgCi0gICAgMjUzLCA0NiwgMjgsIDYsIDEsIDI1NCwgMjExLCAyLCA4OCwgMjgsIDMsIDEsIDI1NCwgMjExLCAyLCA4OCwgMjgsIDYsIDEsIAotICAgIDI0NywgMTcsIDI4LCAzLCAxLCAyNDcsIDE3LCAyOCwgNiwgMSwgMjQ3LCA0OCwgMjgsIDMsIDEsIDI0NywgNDgsIDI4LCA2LCAKLSAgICAxLCAyNDcsIDYxLCAyOCwgMywgMSwgMjQ3LCA2MSwgMjgsIDYsIDEsIDI1MywgMzUsIDI4LCAzLCAxLCAyNTMsIDM1LCAyOCwgCi0gICAgNiwgMSwgMjUyLCAyNTAsIDI4LCAzLCAxLCAyNTIsIDI1MCwgMjgsIDYsIDEsIDI0MSwgOTIsIDE3NywgMjgsIDMsIDEsIAotICAgIDI0MSwgOTIsIDE3NywgMjgsIDYsIDEsIDI1NCwgMjExLCAyLCAyMzcsIDQ0LCA4OCwgMjgsIDMsIDEsIDI1NCwgMjExLCAyLCAKLSAgICAyMzcsIDQ0LCA4OCwgMjgsIDYsIDEsIDI1NCwgMTk5LCAyLCAyMzcsIDQ0LCA4OCwgMjgsIDMsIDEsIDI1NCwgMTk5LCAyLCAKLSAgICAyMzcsIDQ0LCA4OCwgMTIwLCA2LCAxLCAyNDcsIDI0NSwgMTIwLCA2LCAxLCAyNDcsIDI1MiwgMTIwLCA2LCAxLCAyNDgsIAotICAgIDUzLCAxMjAsIDYsIDEsIDI1MiwgMjAzLCAxMjAsIDYsIDEsIDI0NywgMTM3LCAxMjAsIDYsIDEsIDI1MiwgMjI2LCAxMjAsIAotICAgIDYsIDEsIDI1MywgMTQ0LCAxMjAsIDYsIDEsIDI1MywgMTI1LCAxMjAsIDYsIDEsIDk2LCAxMjAsIDYsIDEsIDI0NiwgMjUxLCAKLSAgICAxMjAsIDYsIDEsIDI0NywgMTUyLCAxMjAsIDYsIDEsIDI0MSwgMTgzLCAxMjAsIDYsIDEsIDI0NywgMjI5LCAxMjAsIDYsIDEsIAotICAgIDI1MiwgMjE1LCAxMjAsIDYsIDEsIDI0OCwgODEsIDEyMCwgNiwgMSwgMjUzLCAyMSwgMTIwLCA2LCAxLCAyNTIsIDIxMywgCi0gICAgMTIwLCA2LCAxLCAyNDEsIDE0MSwgMTIwLCA2LCAxLCAyNDEsIDEwOSwgMTIwLCA2LCAxLCAyNDcsIDE3MywgMTIwLCA2LCAxLCAKLSAgICAyNTMsIDI4LCAxMjAsIDYsIDEsIDI0NywgOTQsIDEyMCwgNiwgMSwgMjQ2LCAxNjUsIDEyMCwgNiwgMSwgMjUzLCAxMDgsIAotICAgIDEyMCwgNiwgMSwgMjQ2LCAxNzYsIDEyMCwgNiwgMSwgMjQ3LCAxODgsIDEyMCwgNiwgMSwgMjQxLCAxNjUsIDEyMCwgNiwgMSwgCi0gICAgMjA4LCAxMjAsIDYsIDEsIDI0OCwgMTU0LCAxMjAsIDYsIDEsIDI0OCwgMTkxLCAxMjAsIDYsIDEsIDI0MiwgMywgMTIwLCA2LCAKLSAgICAxLCAyNDcsIDE5OCwgMTIwLCA2LCAxLCAyNTMsIDY2LCAxMjAsIDYsIDEsIDI0MSwgODcsIDEyMCwgNiwgMSwgMjQxLCAyMTMsIAotICAgIDEyMCwgNiwgMSwgMjQ3LCAxNTYsIDEyMCwgNiwgMSwgMjUzLCAxODcsIDEyMCwgNiwgMSwgMjQ3LCA3NSwgMTIwLCA1MiwgMSwgCi0gICAgNDIsIDEzMiwgMjQwLCAxNDcsIDEyMCwgMjI5LCAxNzIsIDEyMCwgMjMzLCAyMDMsIDc2LCAxMjAsIDIyOSwgMTY1LCA3NiwgCi0gICAgMTIwLCAyMzcsIDY3LCAxMjAsIDIzMywgODIsIDc2LCAxMjAsIDIyOCwgMTk2LCA3NiwgMTIwLCAzLCAxLCAyNDcsIDI0NSwgCi0gICAgMTIwLCAzLCAxLCAyNDcsIDI1MiwgMTIwLCAzLCAxLCAyNDgsIDUzLCAxMjAsIDMsIDEsIDI1MiwgMjAzLCAxMjAsIDMsIDEsIAotICAgIDI0NywgMTM3LCAxMjAsIDMsIDEsIDI1MiwgMjI2LCAxMjAsIDMsIDEsIDI1MywgMTQ0LCAxMjAsIDMsIDEsIDI1MywgMTI1LCAKLSAgICAxMjAsIDMsIDEsIDk2LCAxMjAsIDMsIDEsIDI0NiwgMjUxLCAxMjAsIDMsIDEsIDI0NywgMTUyLCAxMjAsIDMsIDEsIDI0MSwgCi0gICAgMTgzLCAxMjAsIDMsIDEsIDI0NywgMjI5LCAxMjAsIDMsIDEsIDI1MiwgMjE1LCAxMjAsIDMsIDEsIDI0OCwgODEsIDEyMCwgCi0gICAgMywgMSwgMjUzLCAyMSwgMTIwLCAzLCAxLCAyNTIsIDIxMywgMTIwLCAzLCAxLCAyNDEsIDE0MSwgMTIwLCAzLCAxLCAyNDEsIAotICAgIDEwOSwgMTIwLCAzLCAxLCAyNDcsIDE3MywgMTIwLCAzLCAxLCAyNTMsIDI4LCAxMjAsIDMsIDEsIDI0NywgOTQsIDEyMCwgMywgCi0gICAgMSwgMjQ2LCAxNjUsIDEyMCwgMywgMSwgMjUzLCAxMDgsIDEyMCwgMywgMSwgMjQ2LCAxNzYsIDEyMCwgMywgMSwgMjQ3LCAKLSAgICAxODgsIDEyMCwgMywgMSwgMjQxLCAxNjUsIDEyMCwgMywgMSwgMjA4LCAxMjAsIDMsIDEsIDI0OCwgMTU0LCAxMjAsIDMsIDEsIAotICAgIDI0OCwgMTkxLCAxMjAsIDMsIDEsIDI0MiwgMywgMTIwLCAzLCAxLCAyNDcsIDE5OCwgMTIwLCAzLCAxLCAyNTMsIDY2LCAKLSAgICAxMjAsIDMsIDEsIDI0MSwgODcsIDEyMCwgMywgMSwgMjQxLCAyMTMsIDEyMCwgMywgMSwgMjQ3LCAxNTYsIDEyMCwgMywgMSwgCi0gICAgMjUzLCAxODcsIDEyMCwgMywgMSwgMjQ3LCA3NSwgMTIwLCAzLCAyMCwgMjU0LCA1MCwgMjQxLCA4NywgMTIwLCAyNDYsIAotICAgIDE2MiwgMjQwLCAxMjEsIDEyMCwgMjM1LCA2OSwgNzgsIDIzNywgNDgsIDIzNCwgOTgsIDc4LCAyMzcsIDQ4LCAyMzcsIDIxMywgCi0gICAgNzgsIDIzNywgNDgsIDIzMCwgMTA4LCA3OCwgMjM3LCA0OCwgMjQyLCAzNiwgMjM4LCAzOCwgNzgsIDIzNywgNDgsIDI0MiwgCi0gICAgMzYsIDIzOCwgMjI5LCA3OCwgMjM3LCA0OCwgMjM3LCA2LCA3OCwgMjM3LCA0OCwgMjM5LCAyMjAsIDc4LCAyMzcsIDQ4LCAKLSAgICAyNDAsIDEwMSwgNzgsIDIzNywgNDgsIDIzNiwgMTg0LCA3OCwgMjM3LCA0OCwgMjQwLCA5OCwgNzgsIDIzNywgNDgsIDI0MCwgCi0gICAgMzQsIDc4LCAyMzcsIDQ4LCAyMzUsIDE3MywgNzgsIDIzNywgNDgsIDIzOCwgMjM2LCAyMzYsIDE2MSwgNzgsIDIzNywgNDgsIAotICAgIDIzMCwgMTg2LCA3OCwgMjM3LCA0OCwgMjM5LCAyMDksIDI0NSwgNjEsIDc4LCAyMzcsIDQ4LCAyMzUsIDIyMSwgMjM2LCA5MCwgCi0gICAgNzgsIDIzNywgNDgsIDIzOSwgMTg0LCA3OCwgMjM3LCA0OCwgMjQyLCA2NiwgMjM2LCAxMDEsIDc4LCAyMzcsIDQ4LCAyMzksIAotICAgIDEyMSwgNzgsIDIzNywgNDgsIDIzMiwgMjIzLCA3OCwgMjM3LCA0OCwgMjM2LCAxNTMsIDc4LCAyMzcsIDQ4LCAyMzksIDEwNCwgCi0gICAgMjM2LCAxMTgsIDc4LCAyMzcsIDQ4LCAyMzgsIDE3MiwgNzgsIDIzNywgNDgsIDIzOSwgMjA3LCA3OCwgMjM3LCA0OCwgMjM1LCAKLSAgICAyMjEsIDIzNiwgMTk3LCA3OCwgMjM3LCA0OCwgMjQ2LCA4NywgMjU0LCAzMiwgMjQ2LCA5NCwgNzgsIDIzNywgNDgsIDI1MSwgCi0gICAgOTcsIDc4LCAyMzcsIDQ4LCAyNDQsIDcsIDc4LCAyMzcsIDQ4LCAyNDMsIDU1LCA3OCwgMjM3LCA0OCwgMjQwLCAxMDksIDc4LCAKLSAgICAxNjUsIDIzOSwgOTksIDIzNSwgMjAsIDc4LCAyNDAsIDE0MywgMjM5LCAyNDcsIDc4LCAyNDAsIDE0MywgMjQxLCA0MiwgCi0gICAgMjM3LCAyMTMsIDc4LCAyNDAsIDE0MywgMjQxLCA0MiwgMjM3LCAxODcsIDc4LCAyNDAsIDE0MywgMjQxLCA0MiwgMjM1LCAKLSAgICAxMzQsIDc4LCAyNDAsIDE0MywgMjM4LCA2LCA3OCwgMjQwLCAxNDMsIDI0MCwgNDksIDc4LCAyNDAsIDE0MywgMjM3LCAyMTMsIAotICAgIDc4LCAyNDAsIDE0MywgMjM3LCAxODcsIDc4LCAyNDAsIDE0MywgMjM1LCAxMzQsIDc4LCAyNDAsIDE0MywgMjM4LCA3LCA3OCwgCi0gICAgMjQwLCAxNDMsIDI0MywgMjMxLCAyNDMsIDE3MCwgMzIsIDI0NywgMjIxLCA3OCwgMjQwLCAxNDMsIDIzNiwgMTk4LCA3OCwgCi0gICAgMjQwLCAxNDMsIDIzNywgMjAwLCAxNDUsIDIzNywgMjA2LCA3OCwgMjQwLCAxNDMsIDIzOSwgMTA1LCA3OCwgMjI5LCAxNjEsIAotICAgIDIzOSwgOTcsIDc4LCAyNDAsIDE0MywgMjQxLCAxMSwgNzgsIDIyOSwgMTYxLCAyMzksIDE4MSwgNzgsIDI0MCwgMTQzLCAKLSAgICAyNDYsIDI0NCwgMjQ2LCAxNjQsIDc4LCAyNDAsIDE0MywgMjUzLCAxOTMsIDI0NiwgMTY0LCA3OCwgMjI5LCAxNjEsIDI1NCwgCi0gICAgMTQ5LCAyMzksIDE4MiwgNzgsIDE2NSwgMjQwLCAxMTYsIDI0NiwgMTY0LCA3OCwgMTY1LCAyMDMsIDI0NiwgMTY0LCA3OCwgCi0gICAgMjI5LCAxNjEsIDI1MywgMjMsIDIzNCwgMTE0LCA3OCwgMjQwLCAxNDMsIDIzOSwgMjA4LCAyMzgsIDM4LCA3OCwgMSwgMjQwLCAKLSAgICAxNzQsIDc4LCAxLCAyNDcsIDI1MywgNzgsIDEsIDIzOCwgMjQ3LCA3OCwgMSwgMjM3LCAyMzgsIDc4LCAxLCAyNTIsIDI1MiwgCi0gICAgNzgsIDEsIDI0NywgMjIxLCA3OCwgMSwgMjQwLCAxMDIsIDc4LCAxLCAyNDgsIDYwLCA3OCwgMSwgMjQ3LCAyMTAsIDc4LCAxLCAKLSAgICAyNDcsIDYzLCA3OCwgMSwgMzUsIDI0NywgMSwgNzgsIDEsIDI0NywgMSwgNzgsIDEsIDIzNywgMjA1LCA3OCwgMSwgMzUsIAotICAgIDI0NywgNDEsIDc4LCAxLCAyNDcsIDQxLCA3OCwgMSwgMzUsIDI0NiwgMTk1LCA3OCwgMSwgMjQ2LCAxOTUsIDc4LCAxLCAKLSAgICAyMzYsIDIwNSwgNzgsIDEsIDI0MSwgOTcsIDc4LCAxLCAzNSwgMjUzLCAwLCA3OCwgMSwgMjUzLCAwLCA3OCwgMSwgMzUsIAotICAgIDIzOCwgNzcsIDc4LCAxLCAyMzgsIDc3LCA3OCwgMSwgMjQ4LCAxNDIsIDc4LCAxLCAyNDEsIDIyMiwgNzgsIDEsIDI0MCwgCi0gICAgMjAzLCA3OCwgMSwgMjQ4LCAxNzEsIDc4LCAyMCwgMjM1LCAxMDYsIDQ3LCAyNDcsIDIyMSwgNzgsIDIwLCAyMzUsIDEwNiwgCi0gICAgMjUzLCAyMDAsIDI0NywgNjMsIDc4LCAyMCwgMjM1LCAxMDYsIDQ3LCAyNDcsIDYzLCA3OCwgMjI5LCAxNjEsIDIzNSwgMTczLCAKLSAgICA3OCwgMjI5LCAxNjEsIDIzMCwgMTg2LCAxMCwgNjUsIDUzLCAxMCwgNSwgMjM5LCAyMzcsIDEwLCAyMzQsIDEwNSwgMjM1LCAKLSAgICA3MCwgMTAsIDUsIDIzOSwgMjMzLCAyMjgsIDE3NywgMjQ4LCAxMSwgMjQwLCAyMzMsIDIyOCwgMTc3LCAyMzcsIDE4MiwgCi0gICAgMjQwLCAyMzMsIDEwLCAyNTEsIDE3NSwgMjI4LCAxNzcsIDI1MywgMTI5LCAyNDEsIDE5NCwgNTMsIDIyOCwgMTc3LCAyNTMsIAotICAgIDEyOSwgMjUzLCA1MywgMjMzLCAxMTcsIDUzLCAyMzUsIDIzOCwgNTMsIDEwLCAyMzcsIDY3LCAxMCwgMjQ4LCAyMCwgMjMwLCAKLSAgICAxMzEsIDEwLCAyMzksIDIwMSwgMjQyLCAxOSwgNTMsIDEwLCA1LCAyMzksIDExNiwgMTAsIDUsIDIyOSwgMjE0LCAyMzcsIAotICAgIDE3MSwgMjMxLCAxODUsIDEwLCA1LCAyMzcsIDE3MSwgMjMyLCA3OSwgMTAsIDUsIDIzMCwgOTQsIDIzNSwgMjQ0LCAxMCwgNSwgCi0gICAgMjUxLCAxNzAsIDIzNSwgMjQ2LCAyNDIsIDU3LCAxMCwgNSwgMjMxLCAxNzUsIDEwLCAzLCAyMDEsIDI0NywgNTUsIDEwLCAzLCAKLSAgICAyMDEsIDIwLCA5MiwgMiwgMjE2LCAyLCAyNDcsIDI2LCAxMCwgMywgMjAxLCAyNDEsIDg5LCAxMCwgMywgMjM3LCAyNDcsIAotICAgIDEwLCAzLCAyMzcsIDE3NiwgMTAsIDMsIDIzOCwgMTIsIDEwLCAyMzAsIDE0MCwgMTAsIDIzNywgNDksIDU2LCAyMjksIDE2MSwgCi0gICAgNzYsIDEwLCAyMzMsIDgyLCA3NiwgMTAsIDEsIDIzOCwgNSwgMTAsIDEsIDkyLCAyLCAyNDAsIDIyOSwgNDYsIDEwLCAxLCAKLSAgICA5MiwgMiwgMTY0LCA0NiwgMTAsIDEsIDI1MywgNTQsIDIsIDE2NCwgNDYsIDEwLCAxLCA5MiwgMiwgMTY0LCA1MSwgMTAsIDEsIAotICAgIDYyLCAyLCAxNjQsIDQ2LCAxMCwgMSwgMjQwLCAxNzQsIDEwLCAxLCAyNDcsIDI1MSwgMTAsIDEsIDI1MiwgMjEwLCAyMzQsIAotICAgIDE1MCwgMTAsIDEsIDI1MiwgMTEsIDEwLCAxLCAyNDUsIDI0MywgMTAsIDEsIDI0MSwgMTY0LCAxMCwgMSwgMjUwLCA1OSwgCi0gICAgMTAsIDEsIDI0MSwgMTcxLCAxMCwgMSwgMjQ5LCAxNzYsIDEwLCAxLCAyNDUsIDI0MiwgMTAsIDEsIDI0NywgMTk4LCAxMCwgCi0gICAgMSwgMjQxLCA4OSwgMTAsIDEsIDI0MSwgNjcsIDEwLCAxLCAyMzksIDI0NCwgMTAsIDEsIDI1MSwgMjA5LCAxMCwgMSwgMjQ5LCAKLSAgICAxNzQsIDEwLCAxLCAyNDcsIDU1LCAxMCwgMSwgMjUyLCAxNjcsIDEwLCAxLCAyNDYsIDIyNCwgMTAsIDEsIDIzNywgMjU1LCAKLSAgICAxMCwgMSwgMjQwLCAxOTEsIDIsIDEzNSwgMTk3LCA0NiwgMTAsIDEsIDI0MCwgMTkxLCAyLCAxNTIsIDE5NywgNTEsIDEwLCAKLSAgICAxLCAyNDAsIDE3NiwgNjIsIDIsIDIzMywgNzAsIDE5NiwgMTAsIDEsIDI0MCwgMTc2LCA2MiwgMiwgMTM1LCAxOTcsIDQ2LCAKLSAgICAxMCwgMSwgMjQwLCAxNzYsIDYyLCAyLCAxNTIsIDE5NywgNDYsIDEwLCAyMzQsIDI0MSwgMTAsIDEsIDI0NywgNzUsIDEwLCAKLSAgICAxLCAyNDgsIDEzOSwgMTAsIDEsIDI0NywgMSwgMTAsIDEsIDI0OCwgODksIDEwLCAxLCAyNDEsIDE5MCwgMTAsIDEsIDI0MSwgCi0gICAgMjA1LCAxMCwgMSwgMjUwLCA2NCwgMTAsIDEsIDI0NywgNjAsIDEwLCAxLCA5MiwgMjMzLCAxNzIsIDEwLCAxLCAyNDcsIDI2LCAKLSAgICAxMCwgMjMyLCAxODQsIDEwLCAyMzIsIDEwNSwgMTAsIDIzMiwgMjEyLCAxMCwgMjM3LCAyNDcsIDEwLCAyMzcsIDE3NiwgMTAsIAotICAgIDIzOCwgMTIsIDEwLCAyMzYsIDIyMCwgMTAsIDIzOCwgNjksIDEwLCAyMzksIDkyLCA0NiwgMTAsIDE2NCwgNDYsIDEwLCAKLSAgICAxNjQsIDUxLCAxMCwgMjMxLCAxOTUsIDI0MCwgMTc0LCAxMCwgMjMzLCA3MCwgMjM3LCAxNzYsIDEwLCAxNjUsIDI0NiwgCi0gICAgMTU2LCAyMzUsIDE3NCwgMTAsIDIzMywgNjgsIDEwLCAzMSwgNSwgMywgMjU1LCA2OSwgNDYsIDEwLCAzMSwgNSwgMjMzLCAKLSAgICA3MCwgMywgMjU1LCA2OSwgNDYsIDEwLCAzMSwgNSwgNTYsIDUxLCAxMCwgMjAwLCAyMzcsIDE3NiwgMTAsIDI0MCwgMjI0LCAKLSAgICAyLCAxMzUsIDI0MCwgMTY5LCAyMjgsIDE3NywgMjEsIDI0MCwgMTI2LCAyMjgsIDE3NywgMjEsIDExOCwgMjI4LCAxNzcsIAotICAgIDIxLCAxMTMsIDIyOCwgMTc3LCAyMSwgMTY2LCAyMjgsIDE3NywgMjEsIDE1OCwgMjI4LCAxNzcsIDIxLCAxNzMsIDIyOCwgCi0gICAgMTc3LCAyMSwgMTgzLCAyMjgsIDE3NywgMjEsIDE5NCwgMjI4LCAxNzcsIDIxLCAxODcsIDIyOCwgMTc3LCAyMSwgMTkyLCAKLSAgICAxMCwgMjM1LCA4NiwgNTMsIDEwLCAyMzUsIDE2MywgMjMwLCAxMzEsIDEwLCAyMzIsIDEyLCAyMzAsIDEzMSwgMTAsIDI0NiwgCi0gICAgMTU5LCAyMzUsIDUwLCAyNDAsIDEzOSwgMTAsIDEsIDIzNSwgNDYsIDI0NywgMjUxLCAxMCwgMSwgMjM1LCA0NiwgMjQ4LCAKLSAgICAxMzksIDEwLCAxLCAyMjksIDE2MywgMjQwLCAxNzQsIDEwLCAxLCA5MiwgMjQwLCA4MiwgMTAsIDEsIDkyLCAyLCAyNDYsIAotICAgIDIzOSwgMTY0LCA0NiwgMTAsIDEsIDkyLCAyLCAyNDYsIDIzOSwgMTY0LCA1MSwgMTAsIDEsIDIwMSwgMjM4LCA1LCAxMCwgMSwgCi0gICAgMjAxLCAxNjQsIDI0MCwgMTc0LCAxMCwgMSwgMjAxLCAxNjQsIDI0NywgNjAsIDEwLCAxLCA5NywgMiwgMTY0LCA0NiwgMTAsIAotICAgIDEsIDIwMSwgMTY0LCAyNDcsIDI2LCAxMCwgMSwgMjQ2LCAxMiwgMTAsIDEsIDIzNywgMTIsIDEwLCAxLCAyNDIsIDE5NywgCi0gICAgMTAsIDEsIDI1MiwgMjEwLCAyLCAyNDAsIDE0NywgMTAsIDEsIDI1MiwgMjEwLCAyLCAxNTIsIDE5NywgNjQsIDIzMCwgMTM0LCAKLSAgICAxMCwgMSwgMjQ3LCAxODgsIDEwLCAxLCAyNDAsIDMyLCAxMCwgMSwgMjM4LCAxMTksIDEwLCAxLCAxMDEsIDIsIDE2NCwgNDYsIAotICAgIDEwLCAxLCAxMDEsIDIsIDEzNSwgMTk3LCA2MSwgNDYsIDEwLCAxLCAyNDUsIDIwLCAxMCwgMSwgMjQzLCA4OSwgMTAsIDEsIAotICAgIDEwMSwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjQwLCAzMCwgMTAsIDEsIDIzNCwgMjQyLCAxMCwgMSwgMjQzLCAzMCwgCi0gICAgMTAsIDEsIDI1MywgNTYsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgMjUzLCA1NiwgMiwgNTYsIDUxLCAxMCwgMSwgMjUzLCA1NiwgCi0gICAgMiwgNTYsIDI0MCwgMTQ0LCAyMiwgMywgMjQ3LCA1NSwgMTAsIDEsIDIzOCwgMTY3LCAxMCwgMSwgMjM2LCA0MywgMTAsIDEsIAotICAgIDI0OSwgMjEwLCAxMCwgMSwgMjUzLCA1NiwgMiwgMTUyLCAxOTcsIDY0LCAyMzAsIDEzNCwgMTAsIDEsIDI1MywgNTYsIDIsIAotICAgIDI0NiwgMTYwLCAxOTcsIDQ2LCAxMCwgMSwgMjQ1LCAxMjIsIDEwLCAxLCAyNTIsIDIyNSwgMiwgMywgMTk2LCAxMCwgMSwgCi0gICAgMjUyLCAyMjUsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgMjUyLCAyMjUsIDIsIDU2LCA1MSwgMTAsIDEsIDI1MiwgMjI1LCAyLCAzLCAKLSAgICAyNTUsIDY5LCA1MSwgMTAsIDEsIDI1MiwgMjI1LCAyLCA1NiwgMjQwLCAxNDQsIDIyLCA1NiwgNDYsIDEwLCAxLCAyNTIsIAotICAgIDIyNSwgMiwgMTM1LCAxOTcsIDQ2LCAxMCwgMSwgMjUwLCAxMjcsIDEwLCAxLCAyNTIsIDIyNSwgMiwgMjQ2LCAxNjAsIDE5NywgCi0gICAgNDYsIDEwLCAxLCAyNDYsIDE2MywgMiwgNTYsIDI0MCwgMTQ0LCAyMiwgNTYsIDQ2LCAxMCwgMSwgMjQ2LCAxNjMsIDIsIAotICAgIDE1MiwgMTk3LCA1MSwgMTAsIDEsIDI0NiwgMTYzLCAyLCAxNTIsIDE5NywgMjQwLCAxNDQsIDIyLCAxNTIsIDE5NywgNDYsIAotICAgIDEwLCAxLCAyNTIsIDI0MCwgMiwgMTM1LCAxOTcsIDUxLCAxMCwgMSwgMjUyLCAyNDAsIDIsIDE1MiwgMTk3LCA0NiwgMTAsIAotICAgIDEsIDI1MiwgMjQxLCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAyNTIsIDI0NCwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgCi0gICAgMjM1LCA0NiwgMjQ3LCA3NSwgMTAsIDEsIDI1MiwgMjM1LCAyLCA1NiwgMjQ0LCAxNTIsIDUxLCAxMCwgMSwgMjUyLCAyMzUsIAotICAgIDIsIDU2LCA1MSwgMTAsIDEsIDI1MiwgNzMsIDEwLCAxLCAyNTIsIDIzNSwgMiwgMTUyLCAxOTcsIDUxLCAxMCwgMSwgMjM5LCAKLSAgICAxODcsIDEwLCAxLCAyNTMsIDEsIDIsIDU2LCA0NiwgMTAsIDEsIDI1MywgMSwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgCi0gICAgMjM5LCA2MSwgMTAsIDEsIDI0MSwgNzcsIDI0NywgMSwgMTAsIDEsIDI1MiwgMjE0LCAyLCAyNDAsIDE0NywgMTAsIDEsIAotICAgIDI1MiwgMjE0LCAyLCA1NiwgNDYsIDEwLCAxLCAyNTMsIDY5LCAxMCwgMSwgMjUyLCAyMTQsIDIsIDE1MiwgMTk3LCA1MSwgCi0gICAgMTAsIDEsIDI1MCwgMTAsIDEwLCAxLCAyNTMsIDEwMiwgMiwgMjQwLCAxNDcsIDEwLCAxLCAyMzksIDE0MCwgMTAsIDEsIAotICAgIDI1MywgMTAyLCAyLCAxMzUsIDE5NywgNTEsIDEwLCAxLCAyNDMsIDE1OCwgMTAsIDEsIDI1MywgMTAyLCAyLCAxNTIsIDE5NywgCi0gICAgNDYsIDEwLCAxLCAyMTYsIDIsIDMsIDE5NiwgMTAsIDEsIDIxNiwgMiwgNTYsIDQ2LCAxMCwgMSwgMjE2LCAyLCAxNTIsIAotICAgIDE5NywgNDYsIDEwLCAxLCAyMTYsIDIsIDE1MiwgMTk3LCA1MSwgMTAsIDEsIDI0NiwgMTU2LCAyLCA1NiwgNTEsIDEwLCAxLCAKLSAgICAyNDYsIDE1NiwgMjM1LCAxNzQsIDEwLCAxLCAyMzksIDIyNSwgMTAsIDEsIDI0NiwgMTU2LCAyLCAyNDAsIDE0NywgMTAsIDEsIAotICAgIDI0NiwgMTU2LCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAyNTIsIDIwNywgMjI4LCAyNDIsIDEwLCAxLCAyNDAsIDIzNywgMiwgCi0gICAgNTYsIDQ2LCAxMCwgMSwgMjUyLCAyMDcsIDIsIDYyLCA0NiwgMTAsIDEsIDI1MiwgMjA3LCAyNDEsIDE0NCwgMTAsIDEsIAotICAgIDI1MiwgMjA3LCAyNDcsIDM0LCAyLCAxNjQsIDQ2LCAxMCwgMSwgMjUyLCAyMTAsIDIzNSwgMTI5LCAyNDEsIDE0NCwgMTAsIAotICAgIDEsIDI1MywgNTQsIDIsIDI0MCwgMTQ3LCAxMCwgMSwgMjM1LCA0OSwgMjUzLCAxNSwgMTAsIDEsIDI1MywgMTUsIDEwLCAxLCAKLSAgICA2NiwgMTAsIDEsIDI1MiwgMjMzLCAxMCwgMSwgMjM1LCA0OSwgMjUyLCAyMzMsIDEwLCAxLCAyNTMsIDU0LCAyLCAxMzUsIAotICAgIDE5NywgNDYsIDEwLCAxLCAyNTMsIDk1LCAxMCwgMSwgMjQwLCAxNzYsIDI0NywgMjYsIDEwLCAxLCA2MiwgMiwgMjQwLCAKLSAgICAxMzMsIDEwLCAxLCA2MiwgMiwgMywgMTk2LCAxMCwgMSwgMjUzLCA1NCwgMiwgNTYsIDQ2LCAxMCwgMSwgNzIsIDEwLCAxLCAKLSAgICA2MiwgMiwgMTUyLCAxOTcsIDUxLCAxMCwgMSwgNjIsIDIzNiwgOSwgMTAsIDEsIDYyLCAyMzcsIDEyMywgMiwgMTY0LCA0NiwgCi0gICAgMTAsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMTAsIDEsIDI1MywgNCwgMTAsIDMsIDIwMSwgMjAsIDI1MiwgMjQwLCAyLCAyMTYsIAotICAgIDIsIDkyLCAyMzMsIDE3MiwgMTAsIDMsIDIwMSwgMjAsIDI1MywgMSwgMiwgMjE2LCAyLCA5MiwgMjMzLCAxNzIsIDEwLCAzLCAKLSAgICAyMDEsIDU1LCA1OSwgMTUsIDEwLCAzLCAyMDEsIDIxNiwgMjQwLCAxNzQsIDEwLCAzLCAyMDEsIDI0MSwgMTY0LCAxMCwgMywgCi0gICAgMjAxLCAxNTIsIDI0MCwgMTY5LCAxMCwgMywgMjAxLCAyNDEsIDY3LCAxMCwgMjUyLCAyNTUsIDEwNiwgMjQyLCA2OCwgMTAsIAotICAgIDI0MSwgNzUsIDEwNiwgMjU0LCAxNDUsIDI1NCwgMjExLCAyNDMsIDE3OCwgMTAsIDMsIDIwMSwgMjM1LCA5OCwgMjQwLCAKLSAgICAxMjYsIDEwLCAzLCAyMDEsIDIzNywgMTUsIDIyOSwgMjExLCAyNDAsIDEyNiwgMTAsIDMsIDIwMSwgMjM1LCA0NiwgMjQ3LCAKLSAgICAxNDgsIDEwNiwgMjQxLCAxNzEsIDEwLCAzLCAyMDEsIDU1LCA0NCwgMTUsIDEwLCAzLCAxODQsIDI0MSwgNjcsIDEwLCAzLCAKLSAgICAyMDEsIDIzOSwgOTEsIDEwLCAzLCAyNDcsIDYwLCAxMCwgMywgMjQ3LCAyNiwgMTAsIDMsIDIwMSwgMjQ3LCAyNiwgMTAsIDMsIAotICAgIDIwMSwgMjQxLCAyMDUsIDEwLCAyNDEsIDIxNCwgMTA2LCAyMzYsIDIwNCwgMTAsIDI0MCwgMTk1LCAyMzcsIDk1LCAxODQsIAotICAgIDI0MCwgMTIxLCAxMCwgMjQwLCAxOTUsIDIzNywgOTUsIDIwMSwgMjQwLCAxMjEsIDEwLCAyMzUsIDk4LCAyMDEsIDI0NywgCi0gICAgMjAsIDIsIDIzOCwgMjE5LCAyMzUsIDExMSwgMTAsIDMsIDE4NCwgMjQxLCAxOTAsIDEwLCAxLCAyNTMsIDU2LCAyLCAyMzMsIAotICAgIDcwLCAxOTYsIDEwLCAxLCAyNTIsIDIyNSwgMiwgMjMzLCA3MCwgMTk2LCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDI0MCwgCi0gICAgMTI2LCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDExOCwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxMTMsIDIzMywgODEsIAotICAgIDIyOCwgMTc3LCAyMSwgMTY2LCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDE1OCwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAKLSAgICAxNzMsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTgzLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDE5NCwgMjMzLCA4MSwgCi0gICAgMjI4LCAxNzcsIDIxLCAxODcsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTkyLCAxMCwgMSwgMjQwLCAxMjksIDIsIDU2LCAKLSAgICA1MSwgMTAsIDEsIDI1MiwgMjM3LCAyLCA1NiwgNTEsIDEwLCAxLCAyNDAsIDE1NywgMiwgNTYsIDUxLCAxMCwgNSwgMjM4LCAKLSAgICA2MCwgMjMwLCAxNDIsIDEwLCA1LCAyMzgsIDYwLCAyMjksIDUyLCAyNDcsIDE3MywgMTAsIDEsIDI1MiwgMjA3LCAyLCAyMzMsIAotICAgIDcwLCAxOTYsIDE1MSwgMjUyLCAyNTUsIDEwNiwgMjMxLCAxMTgsIDE1MSwgMjI5LCAxOTQsIDI0NiwgMTYyLCAyNDAsIDEyMSwgCi0gICAgMTUxLCAyMzIsIDgsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMTUxLCAyMjksIDE5NCwgMjM3LCA2NiwgMTUxLCAyMzIsIDgsIAotICAgIDIzNywgNjYsIDE1MSwgMTY5LCAyMzcsIDY2LCAxNTEsIDI0MCwgMTk0LCAyMzcsIDE5MSwgMjQwLCAxMzIsIDE1MSwgMjQwLCAKLSAgICAxOTQsIDIzNywgMTkxLCAyMzcsIDQxLCAxNTEsIDIyOSwgMTk0LCAyNDAsIDE5NCwgMjM3LCAxOTEsIDI0MCwgMTMyLCAxNTEsIAotICAgIDIzMiwgOCwgMjQwLCAxOTQsIDIzNywgMTkxLCAyMzcsIDQxLCAxNTEsIDIyOCwgMjMwLCAxNTEsIDIzMywgMTY2LCAyMzYsIAotICAgIDE3MywgMTUxLCAyMzMsIDE2NiwgMjMxLCAxMDEsIDE1MSwgMjMzLCAxNjYsIDIyOSwgMjMxLCAxNTEsIDIyOCwgMTk2LCA3NiwgCi0gICAgMTUxLCAxLCAyMzcsIDIyNywgMTUxLCAxLCAyMjksIDE2MywgMjM3LCAyMjcsIDE1MSwgMSwgMjQyLCAyMDIsIDE1MSwgMSwgCi0gICAgMjM4LCAyMzEsIDE1MSwgMSwgMjQzLCAxMTMsIDIzMiwgMjMsIDE1MSwgMSwgMjM2LCA0MCwgMTUxLCAxLCAyMzUsIDQ2LCAKLSAgICAyMzgsIDE2OSwgMjQxLCAyMjQsIDE1MSwgMSwgMjUyLCAyNTIsIDE1MSwgMSwgMjQ3LCA2MCwgMTUxLCAxLCAyNDEsIDg5LCAKLSAgICAxNTEsIDEsIDI0MywgMTcyLCAxNTEsIDEsIDI0NSwgMjQxLCAxNTEsIDEsIDI1MiwgMTUsIDIzMiwgMjMsIDE1MSwgMSwgCi0gICAgMjQ2LCAxMDAsIDE1MSwgMSwgMjUyLCAxNTYsIDI1MiwgMjUyLCAxNTEsIDEsIDI0NCwgNDksIDE1MSwgMSwgMjM2LCAxMjksIAotICAgIDE1MSwgMSwgMjUxLCAxNiwgMTUxLCAxLCAyNDYsIDE5NSwgMTUxLCAxLCAyMzMsIDIzNCwgMTUxLCAxLCAzNSwgMjMzLCAKLSAgICAyMzQsIDE1MSwgMSwgNzIsIDE1MSwgMSwgMjUzLCAwLCAxNTEsIDEsIDIwMCwgMjUzLCAwLCAxNTEsIDEsIDIzOSwgMjMyLCAKLSAgICAxNTEsIDEsIDI0NSwgOTEsIDE1MSwgMSwgMjQxLCAyMjQsIDE1MSwgMSwgMjQwLCAyMDMsIDE1MSwgMSwgMjUyLCA5LCAxNTEsIAotICAgIDEsIDIzNSwgMTUsIDIzOCwgMTIyLCAxNTEsIDEsIDIzNSwgMTUsIDIzNiwgOTUsIDE1MSwgMSwgMjM1LCAxNSwgMjM0LCA1MCwgCi0gICAgMTUxLCAyMzcsIDIxMSwgNDYsIDE1MSwgMjM3LCAyMTEsIDUxLCAxNTEsIDIzNywgMjExLCAyMzUsIDEyMCwgMTUxLCAyMzcsIAotICAgIDIyNiwgNDYsIDE1MSwgMjM3LCAyMjYsIDUxLCAxNTEsIDIzNywgMjI2LCAyMzUsIDEyMCwgMTUxLCAyNDEsIDIyMSwgNDYsIAotICAgIDE1MSwgMjQxLCAyMjEsIDUxLCAxNTEsIDIzNywgNTAsIDI0MiwgMzksIDIyOSwgMTY0LCAxNTEsIDIzNywgNTAsIDI0MiwgCi0gICAgMzksIDIzNCwgMywgMTUxLCAyNDEsIDE1MiwgNDYsIDE1MSwgMjQxLCAxNTIsIDUxLCAxNTEsIDIzMCwgNjUsIDIzNSwgMTIwLCAKLSAgICAxNTEsIDI0MSwgMTI4LCA0NiwgMTUxLCAyNDEsIDEyOCwgNTEsIDE1MSwgMjM5LCAyMzEsIDE1MSwgMjMzLCAyMDQsIDI0NiwgCi0gICAgMTY0LCAxNTEsIDIzMSwgMTMwLCAxNTEsIDIzMywgMTUsIDE1MSwgMTM1LCA2MSwgMTk3LCA0NiwgMTUxLCAxMzUsIDYxLCAKLSAgICAxOTcsIDUxLCAxNTEsIDE1MiwgMTk3LCA0NiwgMTUxLCAxNTIsIDE5NywgNTEsIDE1MSwgMjM1LCA3OCwgMjQ2LCAxNjcsIAotICAgIDQ2LCAxNTEsIDIzNSwgNzgsIDI0NiwgMTY3LCA1MSwgMTUxLCAyMzksIDEyMywgMTUxLCAyMzQsIDEzLCAxNTEsIDEsIDIzNSwgCi0gICAgMTM3LCAyNDAsIDEwMywgMTUxLCAxLCAyMzUsIDEzNywgMjM5LCA2OCwgMTUxLCAxLCAyMzUsIDEzNywgMjUzLCAxNDcsIDEwLCAKLSAgICAxLCAyNTIsIDIxNywgMiwgMTUyLCAxOTcsIDIyOSwgMjcsIDUxLCAxMCwgMSwgMjUyLCAyMTcsIDIsIDU2LCAyNDAsIDE0NCwgCi0gICAgMjIsIDE1MiwgMTk3LCA0NiwgMTAsIDEsIDI1MiwgMjE3LCAyLCAxNTIsIDE5NywgMjMzLCA3OCwgMjM1LCAxOCwgNTEsIDEwLCAKLSAgICAxLCAyNTIsIDIxNywgMiwgMTUyLCAxOTcsIDIzMywgNzgsIDIzNSwgMTgsIDI0MCwgMTQ0LCAyMiwgMTM1LCAxOTcsIDQ2LCAKLSAgICAxMCwgMSwgMjUyLCAyMTcsIDIsIDEzNSwgMTk3LCAyNDAsIDE0NCwgMjIsIDU2LCA0NiwgMTAsIDEsIDI1MiwgMjE3LCAyLCAKLSAgICAyMzMsIDcwLCAzLCAyNTUsIDY5LCA1MSwgMTAsIDEsIDI1MiwgMjE3LCAyLCAzLCAxOTYsIDEwLCAxLCAxMDEsIDIsIDEzNSwgCi0gICAgMTk3LCA0NiwgMTAsIDEsIDEwMSwgMiwgMTUyLCAxOTcsIDIzMywgNzgsIDIzNSwgMTgsIDUxLCAxMCwgMSwgMjUzLCA1NiwgCi0gICAgMiwgMTM1LCAxOTcsIDIzMCwgMTYxLCAyNDAsIDE0NCwgMjIsIDMsIDI0NywgNTUsIDEwLCAxLCAyNTMsIDU2LCAyLCAyMzMsIAotICAgIDcwLCAzLCAyNTUsIDY5LCA1MSwgMTAsIDEsIDI1MiwgMjI1LCAyLCA4MiwgMTAsIDEsIDI0NiwgMTYzLCAyLCAyNDYsIDE2MCwgCi0gICAgMTk3LCA0NiwgMTAsIDEsIDI1MiwgMjQ0LCAyLCAxMzUsIDE5NywgNDYsIDEwLCAxLCAyNTIsIDI0NCwgMiwgMTUyLCAxOTcsIAotICAgIDIzMywgNzgsIDIzMSwgMTkxLCA0NiwgMTAsIDEsIDI1MiwgMjQ0LCAyLCAxMzUsIDE5NywgMjMwLCAxNjEsIDQ2LCAxMCwgMSwgCi0gICAgMjUyLCAyMzUsIDIsIDEzNSwgMTk3LCA1MSwgMTAsIDEsIDI1MiwgMjM1LCAyLCAxNTIsIDE5NywgMjMzLCA3OCwgMjM1LCAKLSAgICAxOCwgNTEsIDEwLCAxLCAyNDAsIDE5MSwgMiwgNTYsIDQ2LCAxMCwgMSwgMjQwLCAxOTEsIDIsIDE1MiwgMTk3LCA0NiwgMTAsIAotICAgIDEsIDI0MCwgMTkxLCAyLCAxNTIsIDE5NywgMjMzLCA3OCwgMjM1LCAxOCwgNTEsIDEwLCAxLCA1NSwgMiwgNTYsIDQ2LCAxMCwgCi0gICAgMSwgNTUsIDIsIDU2LCA1MSwgMTAsIDEsIDI0NiwgMTU2LCAyLCAxMzUsIDE5NywgNTEsIDEwLCAxLCAyNDYsIDE1NiwgMiwgCi0gICAgMywgMjQ3LCA1NSwgMTAsIDEsIDI0NiwgMTU2LCAyLCAzLCAxOTYsIDEwLCAxLCAyMTYsIDIsIDEyNSwgMTAsIDEsIDI1MiwgCi0gICAgMjI1LCAyLCAxMzUsIDE5NywgMjMwLCAxNjEsIDQ2LCAxMCwgMSwgMjUyLCAyMjUsIDIsIDE2NCwgNDYsIDEwLCAxLCAyNDYsIAotICAgIDE2MywgMiwgMTM1LCAxOTcsIDIzMCwgMTYxLCA0NiwgMTAsIDEsIDEwMSwgMiwgMywgMTAsIDEsIDI1MiwgMjQxLCA1MSwgCi0gICAgMTAsIDEsIDEwMSwgMiwgMywgMTAsIDEsIDI1MiwgMjQxLCAyMiwgMTM1LCAyNDAsIDE2OSwgMTAsIDEsIDI0NiwgMTYzLCAyLCAKLSAgICAzLCAxMCwgMSwgMjUyLCAyNDEsIDIyLCAxMzUsIDI0MCwgMTY5LCAxMCwgMSwgMjUyLCAyMjUsIDIsIDMsIDEwLCAxLCAyNTIsIAotICAgIDI0MSwgMjIsIDEzNSwgMjQwLCAxNjksIDEwLCAxLCAxMDEsIDIsIDMsIDEwLCAxLCAyNTIsIDI0MSwgNDYsIDEwLCAxLCA5MiwgCi0gICAgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxMzUsIDQ2LCAxMCwgMSwgOTIsIDIsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgCi0gICAgMTUyLCA0NiwgMTAsIDEsIDI0MCwgMTc2LCA2MiwgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxMzUsIDQ2LCAxMCwgMSwgCi0gICAgMjQwLCAxNzYsIDYyLCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDE1MiwgNDYsIDEwLCAxLCAyNDAsIDE3NiwgNjIsIDIsIAotICAgIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMjQ2LCAxNjAsIDUxLCAxMCwgMSwgMjUzLCA1NCwgMiwgMjMzLCA4MSwgMjI4LCAKLSAgICAxNzcsIDIxLCAxMzUsIDQ2LCAxMCwgMSwgMjUzLCA1NCwgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAxNTIsIDQ2LCAxMCwgCi0gICAgMSwgNjIsIDIzNywgMTIzLCAyLCAyMzMsIDgxLCAyMjgsIDE3NywgMjEsIDEzNSwgNDYsIDEwLCAxLCA2MiwgMjM3LCAxMjMsIAotICAgIDIsIDIzMywgODEsIDIyOCwgMTc3LCAyMSwgMTUyLCA0NiwgMTAsIDEsIDEwMSwgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAKLSAgICAyNDYsIDE2MCwgNTEsIDEwLCAxLCAyNDYsIDE2MywgMiwgMjMzLCA4MSwgMjI4LCAxNzcsIDIxLCAyNDYsIDE2MCwgNDYsIAotICAgIDEwLCAxLCAyNDYsIDE2MywgMiwgMjMzLCA3MCwgMTk2LCAxMCwgMSwgMjUyLCAyMTQsIDIsIDEzNSwgMTk3LCA0NiwgMjM3LCAKLSAgICAzNywgMSwgMjQ3LCAxNCwgMjM3LCAzNywgMSwgMjMxLCAxNDEsIDIzNywgMzcsIDEsIDIzOSwgMTU1LCAyMzcsIDM3LCAxLCAKLSAgICAyNDcsIDEwMCwgMjM3LCAzNywgMSwgMjQ3LCAyNDcsIDIzNywgMzcsIDEsIDIzMSwgOTcsIDIzNywgMzcsIDEsIDIzOSwgNTQsIAotICAgIDIzNywgMzcsIDEsIDIzOCwgOTQsIDIzNywgMzcsIDEsIDI0MCwgNzEsIDIzNywgMzcsIDEsIDIzOSwgMTAwLCAyMzcsIDM3LCAKLSAgICAxLCAyMzgsIDIxMSwgMjM3LCAzNywgMSwgMjM2LCA0NywgMjM3LCAzNywgMSwgMjQxLCAxOCwgMjM3LCAzNywgMSwgMjM5LCAKLSAgICA3OCwgMjM3LCAzNywgMSwgMjM4LCAyMjgsIDIzNywgMzcsIDEsIDIzMSwgNzQsIDIzNywgMzcsIDEsIDIzOSwgMjM5LCAyMzcsIAotICAgIDM3LCAxLCAyMzIsIDEwNywgMjM3LCAzNywgMSwgMjMzLCA2NywgMjM3LCAzNywgMSwgMjMzLCA1MSwgMjM3LCAzNywgMSwgCi0gICAgMjQ3LCAxMTcsIDIzNywgMzcsIDEsIDIzMiwgMjQ2LCAyMzcsIDM3LCAxLCAyMzIsIDIxMSwgMjM3LCAzNywgMSwgMjMwLCAKLSAgICAyMzQsIDIzNywgMzcsIDEsIDI0NiwgMTAsIDIzNywgMzcsIDEsIDI0MSwgMTU2LCAyMzcsIDM3LCAxLCAyNDQsIDUyLCAyMzcsIAotICAgIDM3LCAxLCAyMzcsIDEsIDIzNywgMzcsIDEsIDI0OCwgMjA3LCAyMzcsIDM3LCAxLCAyMzYsIDIyMiwgMjM3LCAzNywgMSwgCi0gICAgMjM2LCAyMDMsIDIzNywgMzcsIDEsIDIzNiwgMzksIDIzNywgMzcsIDEsIDk2LCAyMzcsIDM3LCAxLCAyNTMsIDY1LCAyMzcsIAotICAgIDM3LCAxLCAyNDIsIDQ5LCAyMzcsIDM3LCAxLCAyMzYsIDk0LCAyMzcsIDM3LCAxLCAyMzksIDIwNiwgMjM3LCAzNywgMSwgCi0gICAgMjQwLCA4MSwgMjM3LCAzNywgMjMzLCAyNTIsIDIzNywgMzcsIDIzMCwgMjIwLCAyMzcsIDM3LCAyMzQsIDEyMywgMjM3LCAKLSAgICAzNywgMjMxLCA2MSwgMjM3LCAzNywgMjM1LCAxLCAyMzcsIDM3LCAyMzEsIDExMSwgMjM3LCAzNywgMjM0LCA5MCwgMjM3LCAKLSAgICAzNywgMjMxLCA2OCwgMjM3LCAzNywgMjM0LCAxNzMsIDIzNywgMzcsIDIzMSwgMTEwLCAyMzcsIDM3LCAyMzgsIDY5LCAyMzcsIAotICAgIDM3LCAxLCAyNDcsIDE3OSwgMjA0LCAyMSwgMjQwLCAxMjYsIDIwNCwgMjEsIDExOCwgMjA0LCAyMSwgMTEzLCAyMDQsIDIxLCAKLSAgICAxNjYsIDIwNCwgMjEsIDE1OCwgMjA0LCAyMSwgMTczLCAyMDQsIDIxLCAxODMsIDIwNCwgMjEsIDE5NCwgMjA0LCAyMSwgCi0gICAgMTg3LCAyMDQsIDIxLCAxOTIsIDIwNCwgMSwgNTcsIDIwNCwgMSwgMjUyLCAyMzEsIDIwNCwgMSwgNzQsIDIwNCwgMSwgNzIsIAotICAgIDIwNCwgMSwgNjYsIDIwNCwgMSwgMjUyLCAyMjAsIDIwNCwgMSwgNzMsIDIwNCwgMSwgMjI5LCAyNDQsIDIwNCwgMSwgMTk5LCAKLSAgICAyMDQsIDEsIDI1MiwgMjExLCAyMDQsIDEsIDIxMywgMjA0LCAxLCAyNTIsIDIwMiwgMjA0LCAxLCAyNTIsIDIxMywgMjA0LCAKLSAgICAxLCAyNDYsIDE3NiwgMjA0LCAxLCAyNTIsIDIwMywgMjA0LCAxLCAyMDgsIDIwNCwgMSwgMjQ2LCAyMjEsIDIwNCwgMSwgCi0gICAgMjUyLCAyMDQsIDIwNCwgMSwgMjQ4LCA0NiwgMjA0LCAxLCAyNTIsIDIzNCwgMjA0LCAxLCAxNzcsIDIwNCwgMSwgMjUyLCAKLSAgICAyMDAsIDIwNCwgMSwgMjU1LCAxMywgMjM1LCAyMzEsIDIwNCwgMSwgMTk4LCAyMDQsIDEsIDI0NiwgMTgxLCAyMDQsIDEsIAotICAgIDI1MiwgMjAxLCAyMDQsIDEsIDE1NCwgMjA0LCAxLCAyNTIsIDIwOCwgMjA0LCAxLCAxOTEsIDIwNCwgMSwgMjU0LCAxMTksIAotICAgIDIzNSwgMjMxLCAyMDQsIDEsIDI0NywgMTU0LCAyNTIsIDIxMywgMjA0LCAxLCAyNDcsIDE1NCwgMjQ2LCAxNzYsIDIwNCwgMSwgCi0gICAgMjQ3LCAxNTQsIDIwOCwgMjA0LCAzNiwgMjQwLCAxMjUsIDIwMSwgMjQwLCAxNjcsIDIwNCwgMzYsIDI0MCwgMTI1LCAxODQsIAotICAgIDI0MCwgMTY3LCAyMDQsIDM2LCAyNDAsIDEyNSwgMjM3LCAxMTUsIDI0MCwgMTY3LCAyMDQsIDM2LCAxODIsIDIzMCwgMTgxLCAKLSAgICAyNDAsIDE2NywgMjA0LCAzNiwgMTgyLCAyMDEsIDI0MCwgMTY3LCAyMDQsIDM2LCAxODIsIDE4NCwgMjQwLCAxNjcsIDIwNCwgCi0gICAgMzYsIDE4MiwgMjM3LCAxMTUsIDI0MCwgMTY3LCAyMDQsIDM2LCAyMjksIDQwLCA3NiwgMjA0LCAzNiwgNDcsIDU2LCA0NiwgCi0gICAgMjA0LCAyMDEsIDIwNiwgMjI5LCAxNzIsIDIwNCwgMTg0LCAyMDYsIDIyOSwgMTcyLCAyMDQsIDE0LCAyNTUsIDQxLCAyMzYsIAotICAgIDQ2LCAyMDQsIDE0LCAyMzAsIDY0LCAyMDQsIDIzNywgNjcsIDIwNCwgMjI5LCAxNjUsIDc2LCAyMDQsIDIzMCwgNzUsIDk0LCAKLSAgICA1LCAyMjgsIDE4NCwgOTQsIDUsIDIzMSwgMjA2LCA5NCwgNSwgMjMzLCAxMDIsIDk0LCAxLCAyNDAsIDEyNSwgNTcsIDk0LCAKLSAgICAxLCA1NywgOTQsIDEsIDI1MiwgMjEyLCA5NCwgMSwgNzQsIDk0LCAxLCAyNTIsIDIxNiwgOTQsIDEsIDY2LCA5NCwgMSwgCi0gICAgMjUyLCAyMjQsIDk0LCAxLCAxNTMsIDE0NiwgOTQsIDEsIDE1MywgMTQ5LCA5NCwgMSwgMjM3LCAxMDgsIDcyLCA5NCwgMSwgCi0gICAgMjQwLCAxMjUsIDcyLCA5NCwgMSwgNzIsIDk0LCAxLCAyNTIsIDIyMSwgOTQsIDEsIDIzNywgMTA4LCA3MywgOTQsIDEsIAotICAgIDI0MCwgMTI1LCA3MywgOTQsIDEsIDczLCA5NCwgMSwgMjUyLCAyMjIsIDk0LCAxLCAxNzcsIDk0LCAxLCAyNDYsIDE3OCwgCi0gICAgOTQsIDEsIDI1MiwgMjA1LCA5NCwgMSwgMjQ2LCAyMDIsIDk0LCAxLCAyNDYsIDE2OSwgOTQsIDEsIDI1MiwgMjE1LCA5NCwgCi0gICAgMSwgMjQ2LCAxNzYsIDk0LCAxLCAyNTIsIDIxMywgOTQsIDEsIDI0NiwgMjEzLCA5NCwgMSwgMjQ2LCAxODEsIDk0LCAxLCAKLSAgICAyNDYsIDE5MSwgOTQsIDEsIDI0MCwgMTUwLCA5NCwgMSwgMjQ2LCAxOTIsIDk0LCAxLCAyNDAsIDE2NiwgOTQsIDEsIDI0NiwgCi0gICAgMjAzLCA5NCwgMSwgMjUyLCAyMDIsIDk0LCAxLCAyNDYsIDE3MywgOTQsIDEsIDI1MiwgMjAzLCA5NCwgMSwgMjQ2LCAxOTYsIAotICAgIDk0LCAxLCAyNTIsIDIwMSwgOTQsIDEsIDI0MSwgMjAzLCA5NCwgMSwgMjEzLCA5NCwgMSwgMjQ2LCAxODIsIDk0LCAxLCAKLSAgICAyNTIsIDIxMSwgOTQsIDEsIDI0NiwgMTk5LCA5NCwgMSwgMTk4LCA5NCwgMSwgMTkxLCA5NCwgMSwgMjA4LCA5NCwgMSwgCi0gICAgMjQ2LCAyMjEsIDk0LCAxLCAyNTIsIDIwMCwgOTQsIDEsIDI0NiwgMjI1LCA5NCwgMSwgMjQxLCA0OCwgOTQsIDEsIDI1MiwgCi0gICAgMjQzLCA5NCwgMSwgMjQ2LCAxNjUsIDk0LCAxLCAyNDYsIDE5MCwgOTQsIDEsIDI1MiwgMjA0LCA5NCwgMSwgMTU0LCA5NCwgCi0gICAgNSwgMjM3LCAxMjUsIDk0LCA1LCAyMzEsIDIyMCwgOTQsIDMxLCA1LCAyNTIsIDIxMiwgOTQsIDMxLCA1LCA3NCwgOTQsIDMxLCAKLSAgICA1LCAyNTIsIDIxNiwgOTQsIDMxLCA1LCA2NiwgOTQsIDMxLCA1LCAyNTIsIDIyNCwgOTQsIDMxLCA1LCAxNTMsIDE0NiwgOTQsIAotICAgIDMxLCA1LCAxNTMsIDI1MiwgMjQ5LCA5NCwgMzEsIDUsIDIzNywgMTA4LCA3MiwgOTQsIDMxLCA1LCAyNDAsIDEyNSwgNzIsIAotICAgIDk0LCAzMSwgNSwgNzIsIDk0LCAzMSwgNSwgMjUyLCAyMjEsIDk0LCAzMSwgNSwgMjM3LCAxMDgsIDczLCA5NCwgMzEsIDUsIAotICAgIDI0MCwgMTI1LCA3MywgOTQsIDMxLCA1LCA3MywgOTQsIDMxLCA1LCAyNTIsIDIyMiwgOTQsIDUsIDIzNSwgNDMsIDk0LCAKLSAgICAyNTMsIDEyOCwgOTQsIDIzNywgMTY1LCA1LCAyMzcsIDE0LCA5NCwgMjM3LCAxNjUsIDUsIDIzMiwgNjgsIDk0LCAyNDAsIAotICAgIDE2MywgMjM1LCAyNCwgOTQsIDI0MCwgMTU5LCAyMzUsIDI0LCA5NCwgMSwgMjUzLCAzNSwgOTQsIDEsIDI0MSwgMTczLCA5NCwgCi0gICAgMSwgMjQxLCAxNDIsIDk0LCAxLCAyNTIsIDIyNiwgOTQsIDEsIDIzOCwgMTc0LCA5NCwgMSwgMjQ3LCA0OCwgOTQsIDEsIAotICAgIDI1MiwgMjM0LCA5NCwgMSwgMjQ3LCAyMzYsIDk0LCAxLCAxNTMsIDI1MiwgMjQ5LCA5NCwgMSwgMTUzLCAyNTIsIDI0NSwgCi0gICAgOTQsIDMxLCA1LCAxNTMsIDE0OSwgOTQsIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCA5NCwgMjM3LCAxMDksIDk0LCA0NywgMjM3LCAKLSAgICAxMDksIDk0LCAyMSwgMjQwLCAxMjYsIDk0LCAyMSwgMTE4LCA5NCwgMjEsIDExMywgOTQsIDIxLCAxNjYsIDk0LCAyMSwgCi0gICAgMTU4LCA5NCwgMjEsIDE3MywgOTQsIDIxLCAxODMsIDk0LCAyMSwgMTk0LCA5NCwgMjEsIDE4NywgOTQsIDIxLCAxOTIsIDk0LCAKLSAgICAyMjgsIDE5NiwgNTMsIDk0LCA1LCAyMDEsIDIzNiwgMjM0LCAyNDYsIDE2NCwgOTQsIDEsIDIzNywgMTA4LCA1NywgOTQsIDEsIAotICAgIDI0NywgNzcsIDk0LCAxLCAyNDgsIDcwLCA5NCwgMSwgMjM1LCAzMSwgMjQwLCAxMjEsIDk0LCAxLCAyNDMsIDM0LCA5NCwgMSwgCi0gICAgMjQ3LCA2NiwgMTIxLCA1LCAyMjgsIDE4NCwgMTIxLCA1LCAyMzEsIDIwNiwgMTIxLCA1LCAyMzMsIDEwMiwgMTIxLCAxLCAKLSAgICA1NywgMTIxLCAxLCAyNTIsIDIxMiwgMTIxLCAxLCA3NCwgMTIxLCAxLCAyNTIsIDIxNiwgMTIxLCAxLCA2NiwgMTIxLCAxLCAKLSAgICAyNTIsIDIyNCwgMTIxLCAxLCAxNTMsIDE0NiwgMTIxLCAxLCAxNTMsIDE0OSwgMTIxLCAxLCA3MiwgMTIxLCAxLCAyNTIsIAotICAgIDIyMSwgMTIxLCAxLCA3MywgMTIxLCAxLCAyNTIsIDIyMiwgMTIxLCAxLCAxNzcsIDEyMSwgMSwgMjQ2LCAxNzgsIDEyMSwgMSwgCi0gICAgMjUyLCAyMDUsIDEyMSwgMSwgMjQ2LCAyMDIsIDEyMSwgMSwgMjQ2LCAxNjksIDEyMSwgMSwgMjUyLCAyMTUsIDEyMSwgMSwgCi0gICAgMjQ2LCAxNzYsIDEyMSwgMSwgMjUyLCAyMTMsIDEyMSwgMSwgMjQ2LCAyMTMsIDEyMSwgMSwgMjQ2LCAxODEsIDEyMSwgMSwgCi0gICAgMjQ2LCAxOTEsIDEyMSwgMSwgMjQwLCAxNTAsIDEyMSwgMSwgMjQ2LCAxOTIsIDEyMSwgMSwgMjQwLCAxNjYsIDEyMSwgMSwgCi0gICAgMjQ2LCAyMDMsIDEyMSwgMSwgMjUyLCAyMDIsIDEyMSwgMSwgMjQ2LCAxNzMsIDEyMSwgMSwgMjUyLCAyMDMsIDEyMSwgMSwgCi0gICAgMjQ2LCAxOTYsIDEyMSwgMSwgMjUyLCAyMDEsIDEyMSwgMSwgMjEzLCAxMjEsIDEsIDI0NiwgMTgyLCAxMjEsIDEsIDI1MiwgCi0gICAgMjExLCAxMjEsIDEsIDI0NiwgMTk5LCAxMjEsIDEsIDE5OCwgMTIxLCAxLCAxOTEsIDEyMSwgMSwgMjA4LCAxMjEsIDEsIAotICAgIDI1MiwgMjAwLCAxMjEsIDEsIDI0NiwgMTY1LCAxMjEsIDEsIDI0NiwgMTkwLCAxMjEsIDEsIDI1MiwgMjA0LCAxMjEsIDEsIAotICAgIDE1NCwgMTIxLCA1LCAyMzcsIDEyNSwgMTIxLCA1LCAyMzEsIDIyMCwgMTIxLCAzMSwgNSwgMjUyLCAyMTIsIDEyMSwgMzEsIAotICAgIDUsIDc0LCAxMjEsIDMxLCA1LCAyNTIsIDIxNiwgMTIxLCAzMSwgNSwgNjYsIDEyMSwgMzEsIDUsIDI1MiwgMjI0LCAxMjEsIAotICAgIDMxLCA1LCAxNTMsIDE0NiwgMTIxLCAzMSwgNSwgMTUzLCAyNTIsIDI0OSwgMTIxLCAzMSwgNSwgNzIsIDEyMSwgMzEsIDUsIAotICAgIDI1MiwgMjIxLCAxMjEsIDMxLCA1LCA3MywgMTIxLCAzMSwgNSwgMjUyLCAyMjIsIDEyMSwgNSwgMjM1LCA0MywgMTIxLCAxLCAKLSAgICAyMzksIDY3LCAyNTIsIDIwMiwgMTIxLCAyNTQsIDIzMywgMjM3LCAxMDEsIDc2LCAxMjEsIDEsIDI0NiwgMjIxLCAxMjEsIDEsIAotICAgIDI0NywgNDgsIDEyMSwgMSwgMjQ3LCAyMzYsIDEyMSwgMSwgMTUzLCAyNTIsIDI0OSwgMTIxLCAxLCAxNTMsIDI1MiwgMjQ1LCAKLSAgICAxMjEsIDMxLCA1LCAxNTMsIDE0OSwgMTIxLCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgMTIxLCAyMSwgMjQwLCAxMjYsIDEyMSwgCi0gICAgMjEsIDExOCwgMTIxLCAyMSwgMTEzLCAxMjEsIDIxLCAxNjYsIDEyMSwgMjEsIDE1OCwgMTIxLCAyMSwgMTczLCAxMjEsIDIxLCAKLSAgICAxODMsIDEyMSwgMjEsIDE5NCwgMTIxLCAyMSwgMTg3LCAxMjEsIDIxLCAxOTIsIDEyMSwgMSwgMjU0LCAyMjQsIDIsIDIzNywgCi0gICAgNDQsIDIzMSwgMjM2LCAxMjEsIDEsIDI1NCwgMjI0LCAyLCAyMDMsIDIzMSwgMjM2LCAxMjEsIDI0MCwgMjM0LCA3NiwgMTIxLCAKLSAgICAyNDAsIDIzNCwgNTMsIDEyMSwgMjMzLCAxMTIsIDIzMSwgMjI3LCAxMTgsIDEyMSwgMjMzLCAxMTIsIDIzMSwgMjI3LCAxMTMsIAotICAgIDEyMSwgMjMzLCAxMTIsIDIzMSwgMjI3LCAxNjYsIDEyMSwgMjMzLCAxMTIsIDIzMSwgMjI3LCAxNTgsIDEyMSwgMjMzLCAKLSAgICAxMTIsIDIzMSwgMjI3LCAxNjgsIDI1MCwgMjE1LCAyNDcsIDIxMiwgMjUyLCAyMzAsIDIyOCwgMjM4LCAxMjEsIDIzMywgCi0gICAgMTEyLCAyMjksIDI0NiwgMjMzLCAxMzUsIDEyMSwgMjM1LCAxNzksIDE0OCwgNSwgMjQ4LCAyMjgsIDIzNywgMjMyLCAxNDgsIAotICAgIDUsIDIzNywgMjMyLCAxNDgsIDUsIDIzMywgMTAyLCAxNDgsIDEsIDU3LCAxNDgsIDEsIDI1MiwgMjEyLCAxNDgsIDEsIDc0LCAKLSAgICAxNDgsIDEsIDI1MiwgMjE2LCAxNDgsIDEsIDY2LCAxNDgsIDEsIDI1MiwgMjI0LCAxNDgsIDEsIDI1MiwgMjMxLCAxNDgsIDEsIAotICAgIDI1MiwgMjIxLCAxNDgsIDEsIDI1MiwgMjIwLCAxNDgsIDEsIDI1MiwgMjIyLCAxNDgsIDEsIDE3NywgMTQ4LCAxLCAyNDYsIAotICAgIDE3OCwgMTQ4LCAxLCAyNTIsIDIwNSwgMTQ4LCAxLCAyNDYsIDIwMiwgMTQ4LCAxLCAyNDYsIDE2OSwgMTQ4LCAxLCAyNTIsIAotICAgIDIxNSwgMTQ4LCAxLCAyNDYsIDE3NiwgMTQ4LCAxLCAyNTIsIDIxMywgMTQ4LCAxLCAyNDYsIDIxMywgMTQ4LCAxLCAyNDYsIAotICAgIDE4MSwgMTQ4LCAxLCAyNDYsIDE5MSwgMTQ4LCAxLCAyNDAsIDE1MCwgMTQ4LCAxLCAyNDYsIDE5MiwgMTQ4LCAxLCAyNDAsIAotICAgIDE2NiwgMTQ4LCAxLCAyNDYsIDIwMywgMTQ4LCAxLCAyNTIsIDIwMiwgMTQ4LCAxLCAyNDYsIDE3MywgMTQ4LCAxLCAyNTIsIAotICAgIDIwMywgMTQ4LCAxLCAyNDYsIDE5NiwgMTQ4LCAxLCAyNTIsIDIwMSwgMTQ4LCAxLCAyMTMsIDE0OCwgMSwgMjQ2LCAxODIsIAotICAgIDE0OCwgMSwgMjUyLCAyMTEsIDE0OCwgMSwgMjQ2LCAxOTksIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAKLSAgICAyMDgsIDE0OCwgMSwgMjUyLCAyMDAsIDE0OCwgMSwgMjQ2LCAyMjUsIDE0OCwgMSwgMjUyLCAyNDMsIDE0OCwgMSwgMjQ2LCAKLSAgICAxNjUsIDE0OCwgMSwgMjUyLCAyMDQsIDE0OCwgMSwgMTU0LCAxNDgsIDUsIDIzNywgMTI1LCAxNDgsIDMxLCA1LCAyNTIsIAotICAgIDIxMiwgMTQ4LCAzMSwgNSwgNzQsIDE0OCwgMzEsIDUsIDI1MiwgMjE2LCAxNDgsIDMxLCA1LCA2NiwgMTQ4LCAzMSwgNSwgCi0gICAgMjUyLCAyMjQsIDE0OCwgMzEsIDUsIDI1MiwgMjMxLCAxNDgsIDMxLCA1LCAyNTIsIDIyMSwgMTQ4LCAzMSwgNSwgMjUyLCAKLSAgICAyMjAsIDE0OCwgMzEsIDUsIDI1MiwgMjIyLCAxNDgsIDUsIDIzNSwgNDMsIDE0OCwgNSwgMjQwLCA2NCwgMTQ4LCAxLCAyNDEsIAotICAgIDE3MywgMTQ4LCAxLCAyNDEsIDE0MiwgMTQ4LCAxLCAyNTIsIDIyNiwgMTQ4LCAxLCAyNDYsIDIyMSwgMTQ4LCAxLCAyNTIsIAotICAgIDIzNCwgMTQ4LCAyMSwgMjQwLCAxMjYsIDE0OCwgMjEsIDExOCwgMTQ4LCAyMSwgMTEzLCAxNDgsIDIxLCAxNjYsIDE0OCwgCi0gICAgMjEsIDE1OCwgMTQ4LCAyMSwgMTczLCAxNDgsIDIxLCAxODMsIDE0OCwgMjEsIDE5NCwgMTQ4LCAyMSwgMTg3LCAxNDgsIDIxLCAKLSAgICAxOTIsIDE0OCwgMjQwLCA0NCwgMTQ4LCAyMzgsIDg5LCAxNDgsIDI1MCwgMTIyLCAxNDgsIDI1MiwgNjAsIDE0OCwgMjU1LCAKLSAgICAyNSwgMjM5LCAxNzQsIDE0OCwgNSwgMjM3LCAzMiwgMTM3LCA1LCAyMjgsIDE4NCwgMTM3LCA1LCAyMzEsIDIwNiwgMTM3LCAKLSAgICA1LCAyMzMsIDEwMiwgMTM3LCAxLCA1NywgMTM3LCAxLCAyNTIsIDIxMiwgMTM3LCAxLCA3NCwgMTM3LCAxLCAyNTIsIDIxNiwgCi0gICAgMTM3LCAxLCA2NiwgMTM3LCAxLCAyNTIsIDIyNCwgMTM3LCAxLCAxNTMsIDE0NiwgMTM3LCAxLCAxNTMsIDE0OSwgMTM3LCAKLSAgICAzMSwgMjM3LCAxMDgsIDcyLCAxMzcsIDEsIDcyLCAxMzcsIDEsIDI1MiwgMjIxLCAxMzcsIDMxLCAyMzcsIDEwOCwgNzMsIAotICAgIDEzNywgMSwgNzMsIDEzNywgMSwgMjUyLCAyMjIsIDEzNywgMSwgMTc3LCAxMzcsIDEsIDI0NiwgMTc4LCAxMzcsIDEsIDI1MiwgCi0gICAgMjA1LCAxMzcsIDEsIDI0NiwgMjAyLCAxMzcsIDEsIDI0NiwgMTY5LCAxMzcsIDEsIDI1MiwgMjE1LCAxMzcsIDEsIDI0NiwgCi0gICAgMTc2LCAxMzcsIDEsIDI1MiwgMjEzLCAxMzcsIDEsIDI0NiwgMjEzLCAxMzcsIDEsIDI0NiwgMTgxLCAxMzcsIDEsIDI0NiwgCi0gICAgMTkxLCAxMzcsIDEsIDI0MCwgMTUwLCAxMzcsIDEsIDI0NiwgMTkyLCAxMzcsIDEsIDI0MCwgMTY2LCAxMzcsIDEsIDI0NiwgCi0gICAgMjAzLCAxMzcsIDEsIDI1MiwgMjAyLCAxMzcsIDEsIDI0NiwgMTczLCAxMzcsIDEsIDI1MiwgMjAzLCAxMzcsIDEsIDI0NiwgCi0gICAgMTk2LCAxMzcsIDEsIDI1MiwgMjAxLCAxMzcsIDEsIDIxMywgMTM3LCAxLCAyNDYsIDE4MiwgMTM3LCAxLCAyNTIsIDIxMSwgCi0gICAgMTM3LCAxLCAyNDYsIDE5OSwgMTM3LCAxLCAxOTgsIDEzNywgMSwgMTkxLCAxMzcsIDEsIDIwOCwgMTM3LCAxLCAyNTIsIAotICAgIDIwMCwgMTM3LCAxLCAyNDYsIDIyNSwgMTM3LCAxLCAyNTIsIDI0MywgMTM3LCAxLCAyNDYsIDE2NSwgMTM3LCAxLCAyNDYsIAotICAgIDE5MCwgMTM3LCAxLCAyNTIsIDIwNCwgMTM3LCAxLCAxNTQsIDEzNywgNSwgMjM3LCAxMjUsIDEzNywgNSwgMjMxLCAyMjAsIAotICAgIDEzNywgMzEsIDUsIDI1MiwgMjEyLCAxMzcsIDMxLCA1LCA3NCwgMTM3LCAzMSwgNSwgMjUyLCAyMTYsIDEzNywgMzEsIDUsIAotICAgIDY2LCAxMzcsIDMxLCA1LCAyNTIsIDIyNCwgMTM3LCAzMSwgNSwgMTUzLCAxNDYsIDEzNywgMzEsIDUsIDE1MywgMjUyLCAKLSAgICAyNDksIDEzNywgMzEsIDUsIDIzNywgMTA4LCA3MiwgMTM3LCAzMSwgNSwgNzIsIDEzNywgMzEsIDUsIDI1MiwgMjIxLCAxMzcsIAotICAgIDMxLCA1LCAyMzcsIDEwOCwgNzMsIDEzNywgMzEsIDUsIDczLCAxMzcsIDMxLCA1LCAyNTIsIDIyMiwgMTM3LCA1LCAyMzUsIAotICAgIDQzLCAxMzcsIDI1MywgMTI4LCAxMzcsIDEsIDE1MywgMjUyLCAyNDksIDEzNywgMSwgMTUzLCAyNTIsIDI0NSwgMTM3LCAzMSwgCi0gICAgNSwgMTUzLCAxNDksIDEzNywgMzEsIDUsIDE1MywgMjUyLCAyNDUsIDEzNywgMjEsIDI0MCwgMTI2LCAxMzcsIDIxLCAxMTgsIAotICAgIDEzNywgMjEsIDExMywgMTM3LCAyMSwgMTY2LCAxMzcsIDIxLCAxNTgsIDEzNywgMjEsIDE3MywgMTM3LCAyMSwgMTgzLCAKLSAgICAxMzcsIDIxLCAxOTQsIDEzNywgMjEsIDE4NywgMTM3LCAyMSwgMTkyLCAxMzcsIDI0MCwgMjM0LCA1MywgMTM0LCA1LCAyMjgsIAotICAgIDE4NCwgMTM0LCA1LCAyMzEsIDIwNiwgMTM0LCA1LCAyMzMsIDEwMiwgMTM0LCAxLCA1NywgMTM0LCAxLCAyNTIsIDIxMiwgCi0gICAgMTM0LCAxLCA3NCwgMTM0LCAxLCAyNTIsIDIxNiwgMTM0LCAxLCA2NiwgMTM0LCAxLCAyNTIsIDIyNCwgMTM0LCAxLCAxNTMsIAotICAgIDE0NiwgMTM0LCAxLCAxNTMsIDE0OSwgMTM0LCAxLCA3MiwgMTM0LCAxLCAyNTIsIDIyMSwgMTM0LCAxLCA3MywgMTM0LCAxLCAKLSAgICAyNTIsIDIyMiwgMTM0LCAxLCAxNzcsIDEzNCwgMSwgMjQ2LCAxNzgsIDEzNCwgMSwgMjUyLCAyMDUsIDEzNCwgMSwgMjQ2LCAKLSAgICAyMDIsIDEzNCwgMSwgMjQ2LCAxNjksIDEzNCwgMSwgMjUyLCAyMTUsIDEzNCwgMSwgMjQ2LCAxNzYsIDEzNCwgMSwgMjUyLCAKLSAgICAyMTMsIDEzNCwgMSwgMjQ2LCAyMTMsIDEzNCwgMSwgMjQ2LCAxODEsIDEzNCwgMSwgMjQ2LCAxOTEsIDEzNCwgMSwgMjQwLCAKLSAgICAxNTAsIDEzNCwgMSwgMjQ2LCAxOTIsIDEzNCwgMSwgMjQwLCAxNjYsIDEzNCwgMSwgMjQ2LCAyMDMsIDEzNCwgMSwgMjUyLCAKLSAgICAyMDIsIDEzNCwgMSwgMjQ2LCAxNzMsIDEzNCwgMSwgMjUyLCAyMDMsIDEzNCwgMSwgMjQ2LCAxOTYsIDEzNCwgMSwgMjUyLCAKLSAgICAyMDEsIDEzNCwgMSwgMjEzLCAxMzQsIDEsIDI0NiwgMTgyLCAxMzQsIDEsIDI1MiwgMjExLCAxMzQsIDEsIDI0NiwgMTk5LCAKLSAgICAxMzQsIDEsIDE5OCwgMTM0LCAxLCAxOTEsIDEzNCwgMSwgMjA4LCAxMzQsIDEsIDI1MiwgMjAwLCAxMzQsIDEsIDI0NiwgCi0gICAgMjI1LCAxMzQsIDEsIDI1MiwgMjQzLCAxMzQsIDEsIDI0NiwgMTY1LCAxMzQsIDEsIDI0NiwgMTkwLCAxMzQsIDEsIDI1MiwgCi0gICAgMjA0LCAxMzQsIDEsIDE1NCwgMTM0LCA1LCAyMzcsIDEyNSwgMTM0LCA1LCAyMzEsIDIyMCwgMTM0LCAzMSwgNSwgMjUyLCAKLSAgICAyMTIsIDEzNCwgMzEsIDUsIDc0LCAxMzQsIDMxLCA1LCAyNTIsIDIxNiwgMTM0LCAzMSwgNSwgNjYsIDEzNCwgMzEsIDUsIAotICAgIDI1MiwgMjI0LCAxMzQsIDMxLCA1LCAxNTMsIDE0NiwgMTM0LCAzMSwgNSwgMTUzLCAyNTIsIDI0OSwgMTM0LCAzMSwgNSwgCi0gICAgNzIsIDEzNCwgMzEsIDUsIDI1MiwgMjIxLCAxMzQsIDMxLCA1LCA3MywgMTM0LCAzMSwgNSwgMjUyLCAyMjIsIDEzNCwgNSwgCi0gICAgMjM1LCA0MywgMTM0LCAyNTQsIDIyNywgMjM3LCAxMDEsIDc2LCAxMzQsIDI1NCwgMjMzLCAyMzcsIDEwMSwgNzYsIDEzNCwgCi0gICAgMSwgMjQ2LCAyMjEsIDEzNCwgMSwgMjQ3LCA0OCwgMTM0LCAxLCAyNDcsIDIzNiwgMTM0LCAxLCAxNTMsIDI1MiwgMjQ5LCAKLSAgICAxMzQsIDEsIDE1MywgMjUyLCAyNDUsIDEzNCwgMzEsIDUsIDE1MywgMTQ5LCAxMzQsIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCAKLSAgICAxMzQsIDIxLCAyNDAsIDEyNiwgMTM0LCAyMSwgMTE4LCAxMzQsIDIxLCAxMTMsIDEzNCwgMjEsIDE2NiwgMTM0LCAyMSwgCi0gICAgMTU4LCAxMzQsIDIxLCAxNzMsIDEzNCwgMjEsIDE4MywgMTM0LCAyMSwgMTk0LCAxMzQsIDIxLCAxODcsIDEzNCwgMjEsIAotICAgIDE5MiwgMTM0LCAyMzUsIDE3OSwgMTM0LCAxLCAyNTIsIDIwOCwgMTYwLCA1LCAyMzEsIDIwNiwgMTYwLCA1LCAyMzMsIDEwMiwgCi0gICAgMTYwLCAxLCA1NywgMTYwLCAxLCAyNTIsIDIxMiwgMTYwLCAxLCA3NCwgMTYwLCAxLCAyNTIsIDIxNiwgMTYwLCAxLCA2NiwgCi0gICAgMTYwLCAxLCAyNTIsIDIyNCwgMTYwLCAxLCA3MiwgMTYwLCAxLCAyNTIsIDIzMSwgMTYwLCAxLCAyNTIsIDIyMSwgMTYwLCAxLCAKLSAgICA3MywgMTYwLCAxLCAyNTIsIDIyMCwgMTYwLCAxLCAyNTIsIDIyMiwgMTYwLCAxLCAxNzcsIDE2MCwgMSwgMjQ2LCAxNjksIAotICAgIDE2MCwgMSwgMjUyLCAyMTUsIDE2MCwgMSwgMjUyLCAyMTMsIDE2MCwgMSwgMjQ2LCAxODEsIDE2MCwgMSwgMjQ2LCAxOTEsIAotICAgIDE2MCwgMSwgMjQ2LCAyMDMsIDE2MCwgMSwgMjUyLCAyMDIsIDE2MCwgMSwgMjUyLCAyMDEsIDE2MCwgMSwgMjQxLCAyMDMsIAotICAgIDE2MCwgMSwgMjEzLCAxNjAsIDEsIDE5OCwgMTYwLCAxLCAxOTEsIDE2MCwgMSwgMjA4LCAxNjAsIDEsIDI0NiwgMjIxLCAKLSAgICAxNjAsIDEsIDI1MiwgMjAwLCAxNjAsIDEsIDI0NiwgMjI1LCAxNjAsIDEsIDI0MSwgNDgsIDE2MCwgMSwgMjUyLCAyNDMsIAotICAgIDE2MCwgMSwgMjQ2LCAxNjUsIDE2MCwgMSwgMjQ2LCAxOTAsIDE2MCwgMSwgMjUyLCAyMDQsIDE2MCwgMSwgMTU0LCAxNjAsIAotICAgIDMxLCA1LCAyNTIsIDIxMiwgMTYwLCAzMSwgNSwgNzQsIDE2MCwgMzEsIDUsIDI1MiwgMjE2LCAxNjAsIDMxLCA1LCA2NiwgCi0gICAgMTYwLCAzMSwgNSwgMjUyLCAyMjQsIDE2MCwgMzEsIDUsIDcyLCAxNjAsIDMxLCA1LCAyNTIsIDIzMSwgMTYwLCAzMSwgNSwgCi0gICAgMjUyLCAyMjEsIDE2MCwgMzEsIDUsIDczLCAxNjAsIDMxLCA1LCAyNTIsIDIyMCwgMTYwLCAzMSwgNSwgMjUyLCAyMjIsIAotICAgIDE2MCwgNSwgMjM1LCA0MywgMTYwLCAyNTMsIDEyOCwgMTYwLCAyNTQsIDIzMywgMjM3LCAxMDEsIDc2LCAxNjAsIDIxLCAKLSAgICAyNDAsIDEyNiwgMTYwLCAyMSwgMTE4LCAxNjAsIDIxLCAxMTMsIDE2MCwgMjEsIDE2NiwgMTYwLCAyMSwgMTU4LCAxNjAsIAotICAgIDIxLCAxNzMsIDE2MCwgMjEsIDE4MywgMTYwLCAyMSwgMTk0LCAxNjAsIDIxLCAxODcsIDE2MCwgMjEsIDE5MiwgMTYwLCA2NSwgCi0gICAgMjQ2LCAxNzksIDE2MCwgNjUsIDE2OCwgMjMzLCA3NSwgMTYwLCA2NSwgMTY4LCAyMzEsIDE5NiwgMTYwLCAyNTIsIDIxOCwgCi0gICAgNTMsIDE2MCwgMjQ0LCAxNTAsIDUzLCAxNjAsIDI0OCwgMjAwLCA1MywgMTYwLCAyNDMsIDUzLCA1MywgMTYwLCAyMzgsIAotICAgIDE2MywgNTMsIDE2MCwgMjU0LCAyMDMsIDY0LCA1MywgMTYwLCAyNDAsIDIzNCwgNTMsIDE2MCwgNjUsIDUzLCAxMTksIDUsIAotICAgIDIyOCwgMTg0LCAxMTksIDUsIDIzMSwgMjA2LCAxMTksIDUsIDIzMywgMTAyLCAxMTksIDEsIDU3LCAxMTksIDEsIDI1MiwgCi0gICAgMjEyLCAxMTksIDEsIDc0LCAxMTksIDEsIDI1MiwgMjE2LCAxMTksIDEsIDY2LCAxMTksIDEsIDI1MiwgMjI0LCAxMTksIDEsIAotICAgIDE1MywgMTQ2LCAxMTksIDEsIDE1MywgMTQ5LCAxMTksIDEsIDcyLCAxMTksIDEsIDI1MiwgMjMxLCAxMTksIDEsIDI1MiwgCi0gICAgMjIxLCAxMTksIDEsIDczLCAxMTksIDEsIDI1MiwgMjIwLCAxMTksIDEsIDI1MiwgMjIyLCAxMTksIDEsIDE3NywgMTE5LCAxLCAKLSAgICAyNDYsIDE3OCwgMTE5LCAxLCAyNTIsIDIwNSwgMTE5LCAxLCAyNDYsIDIwMiwgMTE5LCAxLCAyNDYsIDE2OSwgMTE5LCAxLCAKLSAgICAyNTIsIDIxNSwgMTE5LCAxLCAyNDYsIDE3NiwgMTE5LCAxLCAyNTIsIDIxMywgMTE5LCAxLCAyNDYsIDIxMywgMTE5LCAxLCAKLSAgICAyNDYsIDE4MSwgMTE5LCAxLCAyNDYsIDE5MSwgMTE5LCAxLCAyNDAsIDE1MCwgMTE5LCAxLCAyNDYsIDE5MiwgMTE5LCAxLCAKLSAgICAyNDAsIDE2NiwgMTE5LCAxLCAyNDYsIDIwMywgMTE5LCAxLCAyNTIsIDIwMiwgMTE5LCAxLCAyNDYsIDE3MywgMTE5LCAxLCAKLSAgICAyNTIsIDIwMywgMTE5LCAxLCAyNDYsIDE5NiwgMTE5LCAxLCAyNTIsIDIwMSwgMTE5LCAxLCAyMTMsIDExOSwgMSwgMjQ2LCAKLSAgICAxODIsIDExOSwgMSwgMjUyLCAyMTEsIDExOSwgMSwgMjQ2LCAxOTksIDExOSwgMSwgMTk4LCAxMTksIDEsIDE5MSwgMTE5LCAKLSAgICAxLCAyMDgsIDExOSwgMSwgMjQ2LCAyMjEsIDExOSwgMSwgMjUyLCAyMDAsIDExOSwgMSwgMjQ2LCAyMjUsIDExOSwgMSwgCi0gICAgMjUyLCAyNDMsIDExOSwgMSwgMjQ2LCAxNjUsIDExOSwgMSwgMjQ2LCAxOTAsIDExOSwgMSwgMjUyLCAyMDQsIDExOSwgMSwgCi0gICAgMTU0LCAxMTksIDUsIDIzMSwgMjIwLCAxMTksIDMxLCA1LCAyNTIsIDIxMiwgMTE5LCAzMSwgNSwgNzQsIDExOSwgMzEsIDUsIAotICAgIDI1MiwgMjE2LCAxMTksIDMxLCA1LCA2NiwgMTE5LCAzMSwgNSwgMjUyLCAyMjQsIDExOSwgMzEsIDUsIDE1MywgMTQ2LCAKLSAgICAxMTksIDMxLCA1LCAxNTMsIDI1MiwgMjQ5LCAxMTksIDMxLCA1LCA3MiwgMTE5LCAzMSwgNSwgMjUyLCAyMzEsIDExOSwgMzEsIAotICAgIDUsIDI1MiwgMjIxLCAxMTksIDMxLCA1LCA3MywgMTE5LCAzMSwgNSwgMjUyLCAyMjAsIDExOSwgMzEsIDUsIDI1MiwgMjIyLCAKLSAgICAxMTksIDUsIDIzNSwgNDMsIDExOSwgMjM3LCAxMDEsIDc2LCAxMTksIDI1NCwgMjI3LCAyMzcsIDEwMSwgNzYsIDExOSwgMSwgCi0gICAgMjQ2LCAyMTYsIDExOSwgMSwgMjQ2LCAyNTQsIDExOSwgMSwgMTUzLCAyNTIsIDI0OSwgMTE5LCAxLCAxNTMsIDI1MiwgMjQ1LCAKLSAgICAxMTksIDMxLCA1LCAxNTMsIDE0OSwgMTE5LCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgMTE5LCAyMSwgMjQwLCAxMjYsIDExOSwgCi0gICAgMjEsIDExOCwgMTE5LCAyMSwgMTEzLCAxMTksIDIxLCAxNjYsIDExOSwgMjEsIDE1OCwgMTE5LCAyMSwgMTczLCAxMTksIDIxLCAKLSAgICAxODMsIDExOSwgMjEsIDE5NCwgMTE5LCAyMSwgMTg3LCAxMTksIDIxLCAxOTIsIDExOSwgMjMzLCA3NiwgMjEsIDI0NywgMjcsIAotICAgIDMyLCAyNTMsIDE1NiwgMjM3LCAxMjYsIDEwNiwgMTU4LCAxMTksIDIzMywgNzYsIDIxLCAxNjgsIDMyLCAyNTMsIDE1NiwgCi0gICAgMjM3LCAxMjYsIDEwNiwgMTU4LCAxMTksIDIzMywgNzYsIDIxLCAxMzUsIDMyLCAyNTMsIDE1NiwgMjM3LCAxMjYsIDEwNiwgCi0gICAgMTU4LCAxMTksIDIzMywgNzYsIDIxLCAxNTIsIDMyLCAyNTMsIDE1NiwgMjM3LCAxMjYsIDEwNiwgMTU4LCAxMTksIDIzMywgCi0gICAgNzYsIDIxLCAxNjgsIDMyLCAyNDcsIDEzOCwgMjM3LCAxMjYsIDEwNiwgMTU4LCAxMTksIDIzMywgNzYsIDIxLCAxMzUsIDMyLCAKLSAgICAyNDcsIDEzOCwgMjM3LCAxMjYsIDEwNiwgMTU4LCAxMTksIDIzMywgNzYsIDIxLCAxNTIsIDMyLCAyNDcsIDEzOCwgMjM3LCAKLSAgICAxMjYsIDEwNiwgMTU4LCAxMTksIDUsIDI0MCwgNTYsIDEyOSwgNSwgMjMxLCAyMDYsIDEyOSwgNSwgMjMzLCAxMDIsIDEyOSwgCi0gICAgMSwgNTcsIDEyOSwgMSwgMjUyLCAyMTIsIDEyOSwgMSwgNzQsIDEyOSwgMSwgMjUyLCAyMTYsIDEyOSwgMSwgNjYsIDEyOSwgCi0gICAgMSwgMjUyLCAyMjQsIDEyOSwgMSwgMTUzLCAxNDYsIDEyOSwgMSwgMTUzLCAxNDksIDEyOSwgMSwgNzIsIDEyOSwgMSwgMjUyLCAKLSAgICAyMzEsIDEyOSwgMSwgMjUyLCAyMjEsIDEyOSwgMSwgNzMsIDEyOSwgMSwgMjUyLCAyMjAsIDEyOSwgMSwgMjUyLCAyMjIsIAotICAgIDEyOSwgMSwgMTc3LCAxMjksIDEsIDI0NiwgMTc4LCAxMjksIDEsIDI1MiwgMjA1LCAxMjksIDEsIDI0NiwgMjAyLCAxMjksIAotICAgIDEsIDI0NiwgMTY5LCAxMjksIDEsIDI1MiwgMjE1LCAxMjksIDEsIDI0NiwgMTc2LCAxMjksIDEsIDI1MiwgMjEzLCAxMjksIAotICAgIDEsIDI0NiwgMjEzLCAxMjksIDEsIDI0NiwgMTgxLCAxMjksIDEsIDI0NiwgMTkxLCAxMjksIDEsIDI0MCwgMTUwLCAxMjksIAotICAgIDEsIDI0NiwgMTkyLCAxMjksIDEsIDI0MCwgMTY2LCAxMjksIDEsIDI0NiwgMjAzLCAxMjksIDEsIDI1MiwgMjAyLCAxMjksIAotICAgIDEsIDI0NiwgMTczLCAxMjksIDEsIDI1MiwgMjAzLCAxMjksIDEsIDI0NiwgMTk2LCAxMjksIDEsIDI1MiwgMjAxLCAxMjksIAotICAgIDEsIDIxMywgMTI5LCAxLCAyNDYsIDE4MiwgMTI5LCAxLCAyNTIsIDIxMSwgMTI5LCAxLCAyNDYsIDE5OSwgMTI5LCAxLCAKLSAgICAxOTgsIDEyOSwgMSwgMTkxLCAxMjksIDEsIDIwOCwgMTI5LCAxLCAyNDYsIDIyMSwgMTI5LCAxLCAyNTIsIDIwMCwgMTI5LCAKLSAgICAxLCAyNDYsIDIyNSwgMTI5LCAxLCAyNTIsIDI0MywgMTI5LCAxLCAyNDYsIDE2NSwgMTI5LCAxLCAyNDYsIDE5MCwgMTI5LCAKLSAgICAxLCAyNTIsIDIwNCwgMTI5LCAxLCAxNTQsIDEyOSwgNSwgMjM3LCAxMjUsIDEyOSwgNSwgMjMxLCAyMjAsIDEyOSwgMzEsIDUsIAotICAgIDI1MiwgMjEyLCAxMjksIDMxLCA1LCA3NCwgMTI5LCAzMSwgNSwgMjUyLCAyMTYsIDEyOSwgMzEsIDUsIDY2LCAxMjksIDMxLCAKLSAgICA1LCAyNTIsIDIyNCwgMTI5LCAzMSwgNSwgMTUzLCAxNDYsIDEyOSwgMzEsIDUsIDE1MywgMjUyLCAyNDksIDEyOSwgMzEsIDUsIAotICAgIDcyLCAxMjksIDMxLCA1LCAyNTIsIDIzMSwgMTI5LCAzMSwgNSwgMjUyLCAyMjEsIDEyOSwgMzEsIDUsIDczLCAxMjksIDMxLCAKLSAgICA1LCAyNTIsIDIyMCwgMTI5LCAzMSwgNSwgMjUyLCAyMjIsIDEyOSwgNSwgMjM1LCA0MywgMTI5LCAyMzcsIDEwMSwgNzYsIAotICAgIDEyOSwgMjU0LCAyMjcsIDIzNywgMTAxLCA3NiwgMTI5LCAxLCAyNTIsIDIzNCwgMTI5LCAxLCAxNTMsIDI1MiwgMjQ5LCAKLSAgICAxMjksIDEsIDE1MywgMjUyLCAyNDUsIDEyOSwgMzEsIDUsIDE1MywgMTQ5LCAxMjksIDMxLCA1LCAxNTMsIDI1MiwgMjQ1LCAKLSAgICAxMjksIDIxLCAyNDAsIDEyNiwgMTI5LCAyMSwgMTE4LCAxMjksIDIxLCAxMTMsIDEyOSwgMjEsIDE2NiwgMTI5LCAyMSwgCi0gICAgMTU4LCAxMjksIDIxLCAxNzMsIDEyOSwgMjEsIDE4MywgMTI5LCAyMSwgMTk0LCAxMjksIDIxLCAxODcsIDEyOSwgMjEsIAotICAgIDE5MiwgMTI5LCA1LCAyMjksIDMzLCAxMjksIDUsIDIyOSwgMTYwLCAxMTQsIDUsIDIzMSwgMjA2LCAxMTQsIDUsIDIzMywgCi0gICAgMTAyLCAxMTQsIDEsIDU3LCAxMTQsIDEsIDI1MiwgMjEyLCAxMTQsIDEsIDc0LCAxMTQsIDEsIDI1MiwgMjE2LCAxMTQsIDEsIAotICAgIDY2LCAxMTQsIDEsIDI1MiwgMjI0LCAxMTQsIDEsIDE1MywgMTQ2LCAxMTQsIDEsIDE1MywgMTQ5LCAxMTQsIDEsIDcyLCAKLSAgICAxMTQsIDEsIDI1MiwgMjMxLCAxMTQsIDEsIDI1MiwgMjIxLCAxMTQsIDEsIDczLCAxMTQsIDEsIDI1MiwgMjIwLCAxMTQsIDEsIAotICAgIDI1MiwgMjIyLCAxMTQsIDEsIDE3NywgMTE0LCAxLCAyNDYsIDE3OCwgMTE0LCAxLCAyNTIsIDIwNSwgMTE0LCAxLCAyNDYsIAotICAgIDIwMiwgMTE0LCAxLCAyNDYsIDE2OSwgMTE0LCAxLCAyNTIsIDIxNSwgMTE0LCAxLCAyNDYsIDE3NiwgMTE0LCAxLCAyNTIsIAotICAgIDIxMywgMTE0LCAxLCAyNDYsIDIxMywgMTE0LCAxLCAyNDYsIDE4MSwgMTE0LCAxLCAyNDYsIDE5MSwgMTE0LCAxLCAyNDAsIAotICAgIDE1MCwgMTE0LCAxLCAyNDYsIDE5MiwgMTE0LCAxLCAyNDAsIDE2NiwgMTE0LCAxLCAyNDYsIDIwMywgMTE0LCAxLCAyNTIsIAotICAgIDIwMiwgMTE0LCAxLCAyNDYsIDE3MywgMTE0LCAxLCAyNTIsIDIwMywgMTE0LCAxLCAyNDYsIDE5NiwgMTE0LCAxLCAyNTIsIAotICAgIDIwMSwgMTE0LCAxLCAyMTMsIDExNCwgMSwgMjQ2LCAxODIsIDExNCwgMSwgMjUyLCAyMTEsIDExNCwgMSwgMjQ2LCAxOTksIAotICAgIDExNCwgMSwgMTk4LCAxMTQsIDEsIDE5MSwgMTE0LCAxLCAyMDgsIDExNCwgMSwgMjQ2LCAyMjEsIDExNCwgMSwgMjUyLCAKLSAgICAyMDAsIDExNCwgMSwgMjQ2LCAyMjUsIDExNCwgMSwgMjQxLCA0OCwgMTE0LCAxLCAyNTIsIDI0MywgMTE0LCAxLCAyNDYsIAotICAgIDE2NSwgMTE0LCAxLCAyNDYsIDE5MCwgMTE0LCAxLCAyNTIsIDIwNCwgMTE0LCAxLCAxNTQsIDExNCwgNSwgMjMxLCAyMjAsIAotICAgIDExNCwgMzEsIDUsIDI1MiwgMjEyLCAxMTQsIDMxLCA1LCA3NCwgMTE0LCAzMSwgNSwgMjUyLCAyMTYsIDExNCwgMzEsIDUsIAotICAgIDY2LCAxMTQsIDMxLCA1LCAyNTIsIDIyNCwgMTE0LCAzMSwgNSwgMTUzLCAxNDYsIDExNCwgMzEsIDUsIDE1MywgMjUyLCAKLSAgICAyNDksIDExNCwgMzEsIDUsIDcyLCAxMTQsIDMxLCA1LCAyNTIsIDIzMSwgMTE0LCAzMSwgNSwgMjUyLCAyMjEsIDExNCwgMzEsIAotICAgIDUsIDczLCAxMTQsIDMxLCA1LCAyNTIsIDIyMCwgMTE0LCAzMSwgNSwgMjUyLCAyMjIsIDExNCwgNSwgMjM1LCA0MywgMTE0LCAKLSAgICAyNTQsIDIzMywgMjM3LCAxMDEsIDc2LCAxMTQsIDEsIDE1MywgMjUyLCAyNDksIDExNCwgMSwgMTUzLCAyNTIsIDI0NSwgCi0gICAgMTE0LCAzMSwgNSwgMTUzLCAxNDksIDExNCwgMzEsIDUsIDE1MywgMjUyLCAyNDUsIDExNCwgMjEsIDI0MCwgMTI2LCAxMTQsIAotICAgIDIxLCAxMTgsIDExNCwgMjEsIDExMywgMTE0LCAyMSwgMTY2LCAxMTQsIDIxLCAxNTgsIDExNCwgMjEsIDE3MywgMTE0LCAyMSwgCi0gICAgMTgzLCAxMTQsIDIxLCAxOTQsIDExNCwgMjEsIDE4NywgMTE0LCAyMSwgMTkyLCAxMTQsIDY1LCAyNDYsIDE3OSwgMTE0LCAKLSAgICA2NSwgMTY4LCAyMzMsIDc1LCAxMTQsIDY1LCAxNjgsIDIzMSwgMTk2LCAxMTQsIDIzMywgNzYsIDE2OCwgMjMzLCAxNTUsIAotICAgIDExNCwgMjMzLCA3NiwgMTY4LCAyNDAsIDE3MCwgMTE0LCAyMzMsIDc2LCAxNTIsIDIzMiwgNDEsIDExNCwgMjQ4LCAyMCwgCi0gICAgNzYsIDExNCwgMSwgMjM3LCAxMjksIDI1MywgMTU1LCAxMTQsIDEsIDIzNywgMTI5LCAxOTksIDExNCwgMSwgMjM3LCAxMjksIAotICAgIDI1MiwgMjQ5LCAxMTQsIDEsIDIzNywgMTI5LCAxNDksIDExNCwgMSwgMjM3LCAxMjksIDI1MiwgMjQ1LCAxMTQsIDEsIDIzNywgCi0gICAgMTI5LCAyNTQsIDE4NiwgMTQ3LCA1LCAyMjksIDIyOSwgMTQ3LCA1LCAyMzEsIDE4NCwgMTQ3LCAxLCAyMzYsIDMsIDE0NywgCi0gICAgMSwgMjMzLCAyNTEsIDE0NywgMSwgMjMzLCAyNTQsIDE0NywgMSwgMjMyLCA2NiwgMTQ3LCAxLCAyMzYsIDExNCwgMTQ3LCAxLCAKLSAgICAyMzQsIDEyNSwgMTQ3LCAxLCAyMzcsIDE5LCAxNDcsIDEsIDIzNSwgMywgMTQ3LCAxLCAyMzIsIDIxMCwgMTQ3LCAxLCAyMzEsIAotICAgIDg4LCAxNDcsIDEsIDIzMiwgMjA1LCAxNDcsIDEsIDIzMSwgODEsIDE0NywgMSwgMjM2LCA2NywgMTQ3LCAxLCAyMzQsIDkxLCAKLSAgICAxNDcsIDEsIDIzMywgMjU1LCAxNDcsIDEsIDIzNiwgMTgwLCAxNDcsIDEsIDIzNCwgMTc3LCAxNDcsIDEsIDIzNCwgMTAsIAotICAgIDE0NywgMSwgMjMwLCAxMzUsIDIzMywgMjExLCAxNDcsIDEsIDIyOSwgMTcxLCAyMzMsIDIxMSwgMTQ3LCAxLCAyMzAsIDEzNSwgCi0gICAgMjMzLCAxNjUsIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgMTY1LCAxNDcsIDEsIDIzNiwgMTE3LCAyMjksIDIwMywgMTQ3LCAxLCAKLSAgICAyMzUsIDk5LCAyMzMsIDE2NSwgMTQ3LCAxLCAyMzAsIDEzNSwgMjMzLCAxODksIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgCi0gICAgMTg5LCAxNDcsIDEsIDIzMCwgMTM1LCAyMzMsIDE2OCwgMTQ3LCAxLCAyMjksIDE3MSwgMjMzLCAxNjgsIDE0NywgMSwgMjM1LCAKLSAgICAxNDAsIDIyOSwgMjAzLCAxNDcsIDEsIDIzNSwgMTQwLCAyMzQsIDIxNSwgMjI5LCAzOSwgMTQ3LCAxLCAyMzUsIDk5LCAyMzMsIAotICAgIDE2OCwgMTQ3LCAxLCAyMzAsIDEzNSwgMjMyLCA1OSwgMTQ3LCAxLCAyMjksIDE3MSwgMjMyLCA1OSwgMTQ3LCAxLCAyMzAsIAotICAgIDEzNSwgMjMxLCAyNDgsIDE0NywgMSwgMjI5LCAxNzEsIDIzMSwgMjQ4LCAxNDcsIDEsIDIzMiwgMSwgMjMzLCAyMjEsIDE0NywgCi0gICAgMSwgMjM1LCA5OSwgMjMxLCAyNDgsIDE0NywgMSwgMjMwLCAxMzUsIDIzMywgMjQ0LCAxNDcsIDEsIDIyOSwgMTcxLCAyMzMsIAotICAgIDI0NCwgMTQ3LCAxLCAyMzAsIDEzNSwgMjMzLCAxNjEsIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgMTYxLCAxNDcsIDEsIDIzNSwgCi0gICAgMTE4LCAyMzMsIDIyMSwgMTQ3LCAxLCAyMzUsIDk5LCAyMzMsIDE2MSwgMTQ3LCAxLCAyMzAsIDEzNSwgMjMzLCAyMjQsIAotICAgIDE0NywgMSwgMjI5LCAxNzEsIDIzMywgMjI0LCAxNDcsIDEsIDIzMCwgMTM1LCAyMzMsIDE1OSwgMTQ3LCAxLCAyMjksIDE3MSwgCi0gICAgMjMzLCAxNTksIDE0NywgMSwgMjM0LCAxNTYsIDE0NywgMSwgMjQ4LCAyMzUsIDIzMywgMTU5LCAxNDcsIDEsIDIzNSwgMTEsIAotICAgIDE0NywgMSwgMjM0LCAyMDMsIDE0NywgMSwgMjM1LCAxMTgsIDIzMywgMjE1LCAxNDcsIDEsIDIzNSwgNSwgMTQ3LCAxLCAKLSAgICAyMzUsIDE0MCwgMjMzLCAxNzgsIDE0NywgMSwgMjMyLCAxLCAyMzMsIDE3OCwgMTQ3LCAxLCAyMzUsIDExOCwgMjMzLCAxNzgsIAotICAgIDE0NywgMSwgMjM0LCAxMTgsIDE0NywgMSwgMjMyLCAxLCAyMzMsIDIxNSwgMTQ3LCAxLCAyMzQsIDEwMSwgMTQ3LCA1LCAKLSAgICAyMzAsIDIyMiwgMTQ3LCAzMSwgNSwgMjI5LCAxODEsIDE0NywgMzEsIDUsIDI0MSwgNDUsIDIyOSwgMTk1LCAxNDcsIDMxLCAKLSAgICA1LCAyNDYsIDI1MywgMjI5LCAxOTUsIDE0NywgMzEsIDUsIDI0MSwgNDUsIDIzMiwgMjksIDE0NywgMzEsIDUsIDI0NiwgCi0gICAgMjUzLCAyMzIsIDI5LCAxNDcsIDMxLCA1LCAyNDEsIDQ1LCAyMzAsIDE5MCwgMTQ3LCAzMSwgNSwgMjQ2LCAyNTMsIDIzMCwgCi0gICAgMTkwLCAxNDcsIDMxLCA1LCAyMjcsIDIwMywgMTQ3LCAzMSwgNSwgMjMzLCAyMTIsIDE0NywgMzEsIDUsIDI0NiwgMjUzLCAKLSAgICAyMzMsIDIxMiwgMTQ3LCAzMSwgNSwgMjQ0LCA2MywgMjQzLCA1NiwgMTQ3LCAzMSwgNSwgMjM1LCAxMjUsIDI1MywgMTgxLCAKLSAgICAyMjksIDE4MSwgMTQ3LCAzMSwgNSwgMjM1LCAxMjUsIDI1MywgMTgxLCAyNDYsIDI1MywgMjI5LCAxODEsIDE0NywgMzEsIDUsIAotICAgIDIzNSwgMTI1LCAyNTMsIDE4MSwgMjI4LCAxOTgsIDE0NywgMzEsIDUsIDIyOCwgMTk4LCAxNDcsIDMxLCA1LCAyNDYsIDI1MywgCi0gICAgMjI3LCAyMDMsIDE0NywgMzEsIDUsIDI0NiwgMjUzLCAyMjgsIDE5OCwgMTQ3LCAyMjksIDE2MSwgMjMwLCA3NCwgMTI4LCAKLSAgICAxMTYsIDI1NSwgOSwgMjQ4LCA3OCwgMTI4LCAxMTYsIDI1MywgMTA1LCAyNDQsIDUzLCAxMjgsIDExNiwgMjUzLCAxMDUsIAotICAgIDIzOSwgNjksIDEyOCwgMTE2LCAyNTMsIDEwNSwgMjM5LCA3MCwgMTI4LCAxMTYsIDI1MywgMTA1LCAyNDQsIDU2LCAxMjgsIAotICAgIDExNiwgMjUzLCAxMDUsIDIzNCwgMjAxLCAxMjgsIDExNiwgMjU0LCAxMTQsIDI1MSwgNTYsIDEyOCwgMTE2LCAyNTMsIDE0MiwgCi0gICAgMjQyLCAyNDMsIDEyOCwgMTE2LCAyNTMsIDE0MiwgMjM4LCAxNDgsIDEyOCwgMTE2LCAyNTMsIDE0MiwgMjM4LCAxNDcsIAotICAgIDEyOCwgMTE2LCAyNTQsIDIyNSwgMjUzLCAyNSwgMTI4LCAxMTYsIDI1MywgMTQyLCAyNDIsIDI1MiwgMTI4LCAxMTYsIDI1NSwgCi0gICAgMTcsIDI0NiwgOTIsIDEyOCwgMTE2LCAyNTQsIDI0NiwgMjM4LCAxNDUsIDEyOCwgMTE2LCAxODAsIDIzOSwgMTgzLCAxMjgsIAotICAgIDExNiwgMjUzLCA5MiwgMjQxLCA3OCwgMTI4LCAxMTYsIDI1MywgOTIsIDIzMCwgODEsIDEyOCwgMTE2LCAyNTMsIDkyLCAKLSAgICAyMzQsIDE5MywgMTI4LCAxMTYsIDI1NCwgMjUyLCAyNTEsIDQ5LCAxMjgsIDExNiwgMjU0LCAyNDYsIDI0OSwgMTg0LCAxMjgsIAotICAgIDExNiwgMTgwLCAyNTIsIDYsIDEyOCwgMTE2LCAyNTMsIDkyLCAyNDAsIDQwLCAxMjgsIDExNiwgMjUzLCA5MiwgMjM3LCAyLCAKLSAgICAxMjgsIDExNiwgMjUzLCA5MiwgMjQwLCAzOSwgMTI4LCAxMTYsIDI1NCwgMjUyLCAyNTIsIDIyNywgMTI4LCAxMTYsIDI1NSwgCi0gICAgMjAsIDIzNiwgNiwgMTI4LCAxMTYsIDI1NSwgNDQsIDI0OCwgMTMzLCAxMjgsIDExNiwgMjUzLCAxMzAsIDIzOSwgMTk2LCAKLSAgICAxMjgsIDExNiwgMjU0LCAyMzYsIDI1MiwgMjM0LCAxMjgsIDExNiwgMjUzLCAxMzAsIDI0NSwgNjgsIDEyOCwgMTE2LCAyNTQsIAotICAgIDIzNiwgMjQ5LCAyMzcsIDEyOCwgMTE2LCAyNTMsIDEzMCwgMjM0LCAyMTQsIDEyOCwgMTE2LCAyNTUsIDM4LCAxOTgsIDEyOCwgCi0gICAgMTE2LCAyNTUsIDE3LCAyNDcsIDIzMSwgMTI4LCAxMTYsIDI1NSwgNDYsIDI1MSwgMTk0LCAxMjgsIDExNiwgMjUzLCAzLCAKLSAgICAxMjgsIDExNiwgMjU0LCAyMzksIDI0MSwgMTgyLCAxMjgsIDExNiwgMjUzLCAyMiwgMTI4LCAxMTYsIDI1NSwgNTMsIDI0NiwgCi0gICAgNTEsIDEyOCwgMTE2LCAyNTQsIDIyNSwgMjQ1LCAxNDksIDEyOCwgMTE2LCAyNTQsIDIyNSwgMjQ1LCAxNDMsIDEyOCwgMTE2LCAKLSAgICAyNTQsIDIyNSwgMjUxLCAyMzksIDEyOCwgMTE2LCAyNTQsIDIyMCwgMjUwLCA3NywgMTI4LCAxMTYsIDI1NCwgMjM5LCAyMzgsIAotICAgIDE1MCwgMTI4LCAxMTYsIDEzMCwgMjQ3LCA5LCAxMjgsIDExNiwgMjU0LCAyMjAsIDIzNiwgMTY4LCAxMjgsIDExNiwgMjMxLCAKLSAgICAxMTMsIDEyOCwgMTE2LCAyNDYsIDIxNCwgNTcsIDEyOCwgMTE2LCAyNTMsIDYxLCAyMzIsIDIwMCwgMTI4LCAxMTYsIDI0NiwgCi0gICAgMjE0LCAyNTIsIDIxMiwgMTI4LCAxMTYsIDI0NiwgMjE0LCAyNTMsIDE0MCwgMTI4LCAxMTYsIDI0NiwgMjE0LCA3NCwgMTI4LCAKLSAgICAxMTYsIDI0NiwgMjE0LCAyNTIsIDIxNiwgMTI4LCAxMTYsIDI0NiwgMjE0LCAyNTMsIDcxLCAxMjgsIDExNiwgMjQ2LCAyMTQsIAotICAgIDI1MiwgNTAsIDEyOCwgMTE2LCAyNDYsIDIxNCwgNjYsIDEyOCwgMTE2LCAyNDYsIDIxNCwgMjUyLCAyMjQsIDEyOCwgMTE2LCAKLSAgICAyMzQsIDE5MiwgMTI4LCAyMzMsIDExMiwgMTQsIDI0MiwgMTcxLCAxMjgsIDExNiwgMjQ2LCAyMTQsIDcyLCAxMjgsIDExNiwgCi0gICAgMjQ2LCAyMTQsIDI1MywgNCwgMTI4LCAxMTYsIDI0NiwgMjE0LCA3MywgMTI4LCAxMTYsIDI0NiwgMjE0LCAyNTQsIDIyNywgCi0gICAgMjM0LCAxNDgsIDEyOCwgMTE2LCAyNDYsIDIxNCwgMjU0LCAyMjcsIDIzMiwgMjI0LCAxMjgsIDExNiwgMjI5LCAzNSwgMTI4LCAKLSAgICAxMTYsIDIzMiwgMjI1LCAxMjgsIDExNiwgMjMxLCA5OSwgMTI4LCAxMTYsIDI1MywgNjEsIDI1MywgMjE5LCAxMjgsIDExNiwgCi0gICAgMjUzLCA2MSwgMjQ2LCAyMjgsIDEyOCwgMTE2LCAyNTMsIDYxLCAyNTIsIDI5LCAxMjgsIDExNiwgMjUzLCA2MSwgMjMyLCAKLSAgICA5NiwgMTI4LCAxMTYsIDIyOSwgMTUzLCAxMjgsIDExNiwgMjMyLCAyMzMsIDEyOCwgMTE2LCAyMzMsIDY1LCAxMjgsIDExNiwgCi0gICAgMjM0LCAxMDQsIDEyOCwgMjEsIDI0MCwgMTI2LCAxMjgsIDIxLCAxMTgsIDEyOCwgMjEsIDExMywgMTI4LCAyMSwgMTY2LCAKLSAgICAxMjgsIDIxLCAxNTgsIDEyOCwgMjEsIDE3MywgMTI4LCAyMSwgMTgzLCAxMjgsIDIxLCAxOTQsIDEyOCwgMjEsIDE4NywgCi0gICAgMTI4LCAyMSwgMTkyLCAxMjgsIDExNiwgMjI5LCAyMjcsIDEyOCwgMTE2LCAyMzYsIDEyMiwgMTc5LCAxLCAyNTMsIDMzLCAKLSAgICAxNzksIDEsIDI1MywgMTA1LCAyNDAsIDIxNSwgMTc5LCAxLCAyNTMsIDEwNSwgMjQ3LCAyMiwgMTc5LCAxLCAyNDcsIDkzLCAKLSAgICAxNzksIDEsIDI1MywgNjYsIDE3OSwgMSwgMjU0LCAyMjUsIDI0NywgMjIsIDE3OSwgMSwgMjQ3LCAxOSwgMTc5LCAxLCAyNTMsIAotICAgIDU3LCAxNzksIDEsIDk2LCAxNzksIDEsIDI1MywgOTIsIDI0MCwgMjE1LCAxNzksIDEsIDI1MywgOTIsIDI0NywgMjIsIDE3OSwgCi0gICAgMSwgMjUzLCA4LCAxNzksIDEsIDI1MywgOTgsIDE3OSwgMSwgMjUzLCA1MCwgMTc5LCAxLCAyNTMsIDEzMCwgMjQwLCAyMTUsIAotICAgIDE3OSwgMSwgMjU0LCAyMzYsIDI0NywgMjIsIDE3OSwgMSwgMjUzLCAxMzAsIDI0NywgMjIsIDE3OSwgMSwgMjU0LCAyMzYsIAotICAgIDI0MCwgMjE1LCAxNzksIDEsIDI1MywgMTQsIDE3OSwgMSwgMjUyLCAyNTEsIDE3OSwgMSwgMjU0LCAyMzksIDI0MSwgMTgyLCAKLSAgICAxNzksIDEsIDI1NCwgMjM5LCAyNDQsIDEwNywgMTc5LCAxLCAyNTMsIDEwLCAxNzksIDEsIDI1NCwgMjI1LCAyNDAsIDIxNSwgCi0gICAgMTc5LCAxLCAyNTQsIDIyMCwgMjQwLCAyMTUsIDE3OSwgMSwgNzMsIDE3OSwgMSwgMjU0LCAyMjAsIDI0NywgMjIsIDE3OSwgCi0gICAgMjMxLCAyMTgsIDE3OSwgMzEsIDUsIDU3LCAxNzksIDMxLCA1LCAyNTMsIDYxLCAyNDcsIDM5LCAxNzksIDMxLCA1LCAyNTIsIAotICAgIDIxMiwgMTc5LCAzMSwgNSwgMjUzLCAxNDAsIDE3OSwgMzEsIDUsIDc0LCAxNzksIDMxLCA1LCAyNTIsIDIxNiwgMTc5LCAzMSwgCi0gICAgNSwgMjU0LCAxOTAsIDE3OSwgMzEsIDUsIDI1MywgMjAzLCAxNzksIDMxLCA1LCA2NiwgMTc5LCAzMSwgNSwgMjUyLCAyMjQsIAotICAgIDE3OSwgMzEsIDUsIDI1MywgNjEsIDI1MCwgMTc4LCAxNzksIDIzMiwgNDUsIDUsIDI1MywgNDksIDE3OSwgMjMyLCA0NSwgNSwgCi0gICAgMjQ3LCAxOSwgMTc5LCAzMSwgNSwgNzIsIDE3OSwgMzEsIDUsIDI1MywgMTc2LCAxNzksIDMxLCA1LCA3MywgMTc5LCAzMSwgCi0gICAgNSwgMjUzLCAxMTQsIDE3OSwgMzEsIDUsIDI1MiwgMjIxLCAxNzksIDI1NSwgOSwgMjUyLCAyMDAsIDE3OSwgMjA2LCAyNTMsIAotICAgIDYxLCAyNTMsIDIxOSwgMTc5LCAyMDYsIDI1MywgNjEsIDI0NiwgMjI4LCAxNzksIDIwNiwgMjUzLCA2MSwgMjUzLCA0NCwgCi0gICAgMTc5LCAyMDYsIDI1MywgNjEsIDIzNiwgMjEsIDE3OSwgMjI4LCAyMjcsIDc2LCAxNzksIDIzMSwgMTA3LCAxNzksIDIxLCAKLSAgICAyNDAsIDEyNiwgMTc5LCAyMSwgMTE4LCAxNzksIDIxLCAxMTMsIDE3OSwgMjEsIDE2NiwgMTc5LCAyMSwgMTU4LCAxNzksIAotICAgIDIxLCAxNzMsIDE3OSwgMjEsIDE4MywgMTc5LCAyMSwgMTk0LCAxNzksIDIxLCAxODcsIDE3OSwgMjEsIDE5MiwgMTc5LCAKLSAgICAyNTQsIDIyMCwgMjUzLCA4LCAxNzksIDI1NCwgMjIwLCAyNTMsIDE0LCA1NCwgNCwgMjUzLCAxMjgsIDU0LCAxNjUsIDI0NywgCi0gICAgMzUsIDI1MywgNTUsIDI1MywgNjIsIDIzMywgNTYsIDU3LCA1NCwgMTY1LCAyNDcsIDM1LCAyNTMsIDU1LCAyNTMsIDYyLCAKLSAgICAyNTMsIDIwNSwgMjQ4LCAxNDgsIDI0OSwgMTA3LCAxOTgsIDU0LCAxNjUsIDI0NywgMzUsIDI1MywgNTUsIDI1MywgNjIsIAotICAgIDI1MywgMjA1LCAyNDcsIDM1LCAyNDAsIDI0MSwgMTk4LCA1NCwgMTY1LCA1OSwgMjUzLCA1NSwgMjUzLCA2MiwgMjQ4LCAKLSAgICAxMDAsIDE5OCwgNTQsIDE2NSwgMjM1LCAxMTMsIDI1MywgNTUsIDI1MywgNjIsIDI0OCwgMTU2LCAxOTgsIDU0LCAxNjUsIAotICAgIDI0MCwgMjA2LCAyNTMsIDU1LCAyNTMsIDYyLCAyNDgsIDEzMSwgMjQ4LCAxNTcsIDE5OCwgNTQsIDE2NSwgMjUzLCA1NSwgCi0gICAgMjUzLCA2MiwgMjQwLCAyNDEsIDI0OCwgMTU3LCAxOTgsIDU0LCAxNjUsIDI0NSwgMTUzLCAyNDAsIDE5MiwgNTQsIDE2NSwgCi0gICAgMjQyLCAyMTUsIDI1MywgNTUsIDI0NywgODgsIDU0LCAxNjUsIDI0OSwgMTIzLCAyNDgsIDE1OSwgMjUzLCA1NSwgMjQ3LCAKLSAgICA4OCwgNTQsIDE2NSwgMjI3LCAyNDYsIDIzNywgMjIyLCA1NCwgMTY1LCAyMzIsIDExMCwgMjQwLCAyNDEsIDIzOCwgMTMzLCAKLSAgICA1NCwgMTY1LCAyNDAsIDE5MiwgNTQsIDE2NSwgMjQ3LCA5NywgMjQwLCAxOTIsIDU0LCAxNjUsIDI0MCwgMjQxLCAyNDAsIAotICAgIDE5MiwgNTQsIDE2NSwgMjQ3LCA5NywgMjQwLCAyNDEsIDI0MCwgMTkyLCA1NCwgMTY1LCAyNTQsIDE0MywgMjQ5LCAxNTYsIAotICAgIDI0MCwgMTQsIDI0MCwgMTkyLCA1NCwgMTY1LCAyNDgsIDE0NywgMjUwLCA0MSwgMjQwLCAxOTIsIDU0LCAxNjUsIDI0MCwgCi0gICAgMjA2LCAyNDEsIDkxLCAyNDEsIDEzLCAyNTQsIDIwNiwgMTgyLCAyNDYsIDI0MSwgNTQsIDE2NSwgMjQ3LCAzNSwgMjM3LCAKLSAgICAyMjIsIDU0LCAyMzMsIDIxNywgNSwgMjQ5LCAxNTUsIDIzNywgMTI3LCA1NCwgMjMzLCAyMTcsIDUsIDI1MCwgMjE3LCAyMzcsIAotICAgIDEyNywgNTQsIDIyOCwgMTk3LCA1LCAyNTEsIDIxOSwgMjUwLCAyMCwgMjQyLCA0MCwgMjM3LCAxMjcsIDU0LCAyMjgsIDE5NywgCi0gICAgNSwgMjM4LCA4NywgMjEzLCA1NCwgMjI4LCAxOTcsIDUsIDI0NSwgMTU1LCAyMzcsIDExLCA1NCwgNSwgMjQ2LCAyMjYsIAotICAgIDI0NywgNzEsIDI0MSwgMTM4LCA1NCwgNSwgMjQ2LCAyMjYsIDI0NywgNzEsIDIzOCwgMiwgNTQsIDUsIDI0NiwgMjI2LCAKLSAgICAyNDcsIDcxLCAyNDEsIDE0NiwgNTQsIDUsIDI0NiwgMjI2LCAyNTMsIDE1MywgMjQxLCAxMzgsIDU0LCA1LCAyNDYsIDIyNiwgCi0gICAgMjUzLCAxNTMsIDIzOCwgMiwgNTQsIDUsIDI0NiwgMjI2LCAyNDcsIDcxLCAyNDYsIDIyNiwgMjUxLCAzNywgNTQsIDIxLCAKLSAgICAyNDAsIDEyNiwgNTQsIDIxLCAxMTgsIDU0LCAyMSwgMTEzLCA1NCwgMjEsIDE2NiwgNTQsIDIxLCAxNTgsIDU0LCAyMSwgCi0gICAgMTczLCA1NCwgMjEsIDE4MywgNTQsIDIxLCAxOTQsIDU0LCAyMSwgMTg3LCA1NCwgMjEsIDE5MiwgNTQsIDIxLCAxMzIsIAotICAgIDExOCwgNTQsIDIxLCAxMzIsIDExMywgNTQsIDIxLCAxMzIsIDE2NiwgNTQsIDIxLCAxMzIsIDE1OCwgNTQsIDIxLCAxMzIsIAotICAgIDE3MywgNTQsIDIxLCAxMzIsIDE4MywgNTQsIDIxLCAxMzIsIDE5NCwgNTQsIDIxLCAxMzIsIDE4NywgNTQsIDIxLCAxMzIsIAotICAgIDE5MiwgNTQsIDIxLCAxMzIsIDI0MCwgMTI2LCA1NCwgMTY1LCAyNDIsIDIxMywgMjM3LCAxMjcsIDU0LCAxNjUsIDI0OCwgCi0gICAgMTEwLCAyNDEsIDEwNywgMjUzLCAyNTIsIDI1MiwgMTgzLCA1NCwgMTY1LCAyNDAsIDIwNiwgMjQxLCA5MSwgMjQxLCAxMywgCi0gICAgMjQ3LCAxMjMsIDI1MywgMjQ3LCAyNDYsIDI0MSwgNTQsIDE2NSwgMjQ4LCAxMTAsIDI0MSwgMTA3LCAyNTEsIDIxOCwgMjM3LCAKLSAgICAxMjcsIDU0LCAxNjUsIDI1MywgNzQsIDI0NywgODgsIDU0LCAxNjUsIDI1NCwgMTEsIDIzOCwgODgsIDU0LCAxNjUsIDI1MywgCi0gICAgMjIzLCAyNDEsIDEzLCAyNDEsIDE0OSwgNTQsIDE2NSwgMjUzLCAyMjMsIDI0MSwgMTMsIDI0MSwgMTQ4LCA1NCwgMTY1LCAKLSAgICAyNTMsIDIwNywgMjQxLCAxNzIsIDI0MSwgMTQ5LCA1NCwgMTY1LCAyNTMsIDIwNywgMjQxLCAxNzIsIDI0MSwgMTQ4LCA1NCwgCi0gICAgNSwgMjU0LCAxNzUsIDIzOCwgNzgsIDU0LCA1LCAyNTQsIDk4LCAyMzgsIDc4LCA1NCwgMSwgMTc3LCA1NCwgMSwgMjQ2LCAKLSAgICAxNzgsIDU0LCAxLCAyNTIsIDIwNSwgNTQsIDEsIDI0NiwgMjAyLCA1NCwgMSwgMjQ2LCAxNjksIDU0LCAxLCAyNTIsIDIxNSwgCi0gICAgNTQsIDEsIDI0NiwgMTc2LCA1NCwgMSwgMjUyLCAyMTMsIDU0LCAxLCAyNDYsIDE4MSwgNTQsIDEsIDI0NiwgMTkxLCA1NCwgCi0gICAgMSwgMjQwLCAxNTAsIDU0LCAxLCAyNDYsIDE5MiwgNTQsIDEsIDI0MCwgMTY2LCA1NCwgMSwgMjQ2LCAyMDMsIDU0LCAxLCAKLSAgICAyNTIsIDIwMiwgNTQsIDEsIDI0NiwgMTczLCA1NCwgMSwgMjUyLCAyMDMsIDU0LCAxLCAyNDYsIDE5NiwgNTQsIDEsIDI1MiwgCi0gICAgMjAxLCA1NCwgMSwgMjEzLCA1NCwgMSwgMjQ2LCAxODIsIDU0LCAxLCAyNTIsIDIxMSwgNTQsIDEsIDI0NiwgMTk5LCA1NCwgCi0gICAgMSwgMTk4LCA1NCwgMSwgMjQ2LCAyMTYsIDU0LCAxLCAyNDAsIDI0MCwgNTQsIDEsIDI0NiwgMjU0LCA1NCwgMSwgMjQxLCAKLSAgICAxMjEsIDU0LCAxLCAyNTIsIDIwOCwgNTQsIDEsIDI0NiwgMjIzLCA1NCwgMSwgMjUyLCAyMjYsIDU0LCAxLCAyNTMsIDIwNCwgCi0gICAgNTQsIDEsIDE5MSwgNTQsIDEsIDIwOCwgNTQsIDEsIDI1MiwgMjAwLCA1NCwgMSwgMjQ2LCAxNjUsIDU0LCAxLCAyNDYsIAotICAgIDE5MCwgNTQsIDEsIDI1MiwgMjA0LCA1NCwgMSwgMTU0LCA1NCwgMSwgNTcsIDU0LCAxLCAyNDEsIDE3NSwgNTQsIDEsIDIzMCwgCi0gICAgMTU0LCAyMDgsIDU0LCAxLCAyNDcsIDE2MSwgNTQsIDEsIDI0NiwgMjIxLCA1NCwgMzEsIDUsIDI1MiwgMjEyLCA1NCwgMzEsIAotICAgIDUsIDc0LCA1NCwgMzEsIDUsIDI1MiwgMjE2LCA1NCwgMzEsIDUsIDY2LCA1NCwgMzEsIDUsIDI1MiwgMjI0LCA1NCwgMzEsIAotICAgIDUsIDE1MywgMTQ2LCA1NCwgMzEsIDUsIDE1MywgMjUyLCAyNDksIDU0LCAzMSwgNSwgMTUzLCAxNDksIDU0LCAzMSwgNSwgCi0gICAgMTUzLCAyNTIsIDI0NSwgNTQsIDMxLCA1LCA3MiwgNTQsIDMxLCA1LCAyNTIsIDIzMSwgNTQsIDMxLCA1LCA3MywgNTQsIDMxLCAKLSAgICA1LCAyNTIsIDIyMCwgNTQsIDUsIDI1MSwgMTg1LCAyNTQsIDI1MywgMjU0LCAxMTMsIDI1MiwgMjQ2LCA1NCwgNSwgMjQ4LCAKLSAgICAxNDgsIDI0MiwgMTk1LCA1NCwgMzEsIDUsIDIwMCwgNzQsIDU0LCAzMSwgNSwgMjAwLCAyNTIsIDIxNiwgNTQsIDUsIDI1MywgCi0gICAgMjUyLCAyNTQsIDE4MCwgMjU0LCAxMDksIDI1MiwgMjAzLCA1NCwgNSwgMjU0LCAxNDgsIDI0NCwgOTEsIDU0LCAxNjUsIAotICAgIDIzNCwgMTE1LCA1NCwgMTY1LCAyMzYsIDE4MiwgNTQsIDUsIDI1NCwgOTEsIDIzNywgMTI3LCA1NCwgNSwgMjQ3LCAyNCwgCi0gICAgMjM3LCAxMjcsIDU0LCA1LCAyNTQsIDkwLCAyNTQsIDExLCAyNDYsIDI0MSwgNTQsIDUsIDI1MSwgNCwgMjQ2LCAyNDEsIDU0LCAKLSAgICA1LCAyNTMsIDIyMiwgMjU0LCAzNiwgMjMzLCAyMzEsIDU0LCA1LCAyNTMsIDIyMiwgMjU0LCA5OSwgMjMzLCAyMzEsIDU0LCAKLSAgICAyMzEsIDE4OSwgMSwgMTc3LCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTc4LCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjA1LCAKLSAgICA1NCwgMjMxLCAxODksIDEsIDI0NiwgMjAyLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTY5LCA1NCwgMjMxLCAxODksIDEsIAotICAgIDI1MiwgMjE1LCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTc2LCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjEzLCA1NCwgMjMxLCAKLSAgICAxODksIDEsIDI0NiwgMTgxLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTkxLCA1NCwgMjMxLCAxODksIDEsIDI0MCwgMTUwLCAKLSAgICA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTkyLCA1NCwgMjMxLCAxODksIDEsIDI0MCwgMTY2LCA1NCwgMjMxLCAxODksIDEsIAotICAgIDI0NiwgMjAzLCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjAyLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTczLCA1NCwgMjMxLCAKLSAgICAxODksIDEsIDI1MiwgMjAzLCA1NCwgMjMxLCAxODksIDEsIDI0NiwgMTk2LCA1NCwgMjMxLCAxODksIDEsIDI1MiwgMjAxLCAKLSAgICA1NCwgMjMxLCAxODksIDEsIDIxMywgNTQsIDIzMSwgMTg5LCAxLCAyNDYsIDE4MiwgNTQsIDIzMSwgMTg5LCAxLCAyNTIsIAotICAgIDIxMSwgNTQsIDIzMSwgMTg5LCAxLCAyNDYsIDE5OSwgNTQsIDIzMSwgMTg5LCAxLCAxOTgsIDU0LCAyMzEsIDE4OSwgMSwgCi0gICAgMjQ2LCAyMTYsIDU0LCAyMzEsIDE4OSwgMSwgMjQwLCAyNDAsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAyNTQsIDU0LCAyMzEsIAotICAgIDE4OSwgMSwgMjQxLCAxMjEsIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMDgsIDU0LCAyMzEsIDE4OSwgMSwgMjQ2LCAyMjMsIAotICAgIDU0LCAyMzEsIDE4OSwgMSwgMjUyLCAyMjYsIDU0LCAyMzEsIDE4OSwgMSwgMjUzLCAyMDQsIDU0LCAyMzEsIDE4OSwgMSwgCi0gICAgMTkxLCA1NCwgMjMxLCAxODksIDEsIDIwOCwgNTQsIDIzMSwgMTg5LCAxLCAyNTIsIDIwMCwgNTQsIDIzMSwgMTg5LCAxLCAKLSAgICAyNDYsIDE2NSwgNTQsIDIzMSwgMTg5LCAxLCAyNDYsIDE5MCwgNTQsIDIzMSwgMTg5LCAxLCAyNTIsIDIwNCwgNTQsIDIzMSwgCi0gICAgMTg5LCAxLCAxNTQsIDU0LCAyMzEsIDE4OSwgMSwgNTcsIDU0LCAyMzEsIDE4OSwgMSwgMjQxLCAxNzUsIDU0LCAyMzEsIAotICAgIDE4OSwgMSwgMjMwLCAxNTQsIDI1MiwgMjA4LCA1NCwgMjMxLCAxODksIDEsIDIzMCwgMTU0LCAxOTEsIDU0LCAyMzEsIDE4OSwgCi0gICAgMSwgMjMwLCAxNTQsIDIwOCwgNTQsIDI1NCwgMjM4LCAyNTUsIDE0LCAyNDYsIDE3OCwgNTQsIDI1NCwgMjM4LCAyNTUsIDE0LCAKLSAgICAyNTQsIDc5LCAyNDcsIDEyMywgMjUzLCAyNDcsIDI0NiwgMjQxLCA1NCwgMjI4LCAxODksIDUsIDExMiwgMjQxLCAxMDAsIAotICAgIDU0LCAyMjgsIDE4OSwgNSwgMTU3LCAyNDEsIDEwMCwgNTQsIDIyOCwgMTg5LCA1LCAyNDksIDE0MywgMjQ1LCAyMzksIDU0LCAKLSAgICAyMjgsIDE4OSwgNSwgMjUxLCAyMTUsIDIzOCwgODYsIDU0LCAxNCwgMjQ5LCAyMDcsIDI1MywgNDgsIDU0LCAxNCwgMjU0LCAKLSAgICA0LCAyNTEsIDE4NCwgNTQsIDE0LCAyNDUsIDU5LCAyNDMsIDEyMCwgNTQsIDE0LCAyNTQsIDQsIDI1NCwgMTQ0LCAyNDgsIAotICAgIDE0NywgMjQzLCAxNTUsIDU0LCAxNCwgMjQ4LCAxMzEsIDIxMywgNTQsIDE0LCAyNTMsIDQzLCAyNTMsIDQ4LCA1NCwgMTQsIAotICAgIDI1MywgNDMsIDI1NCwgMjEwLCAyNDcsIDk3LCAyMzUsIDEwNywgNTQsIDE0LCAyNTMsIDQzLCAyNTQsIDIxMCwgMjUwLCA0MiwgCi0gICAgMjM1LCAxMDcsIDU0LCAxNCwgMjUzLCA0MywgMjU0LCAyMTAsIDI0NywgMTIzLCAyMzUsIDEwNywgNTQsIDUsIDI0NiwgMjI2LCAKLSAgICAyNTMsIDE1MywgMjQ2LCAyMjYsIDI0MywgNzMsIDU0LCA1LCAyNDYsIDIyNiwgMjUzLCAxNTMsIDI0MSwgMTQ2LCA1NCwgCi0gICAgMTY1LCAyNDIsIDIxNCwgMjQ4LCAxNTksIDI1NCwgMjI4LCAyNTMsIDYyLCAyMzgsIDQxLCA1NCwgMTY1LCAyNDQsIDE0OSwgCi0gICAgMjUzLCA1NSwgMjU0LCAyMjgsIDI1MywgNjIsIDIzOCwgNDEsIDU0LCAxNjUsIDI0NywgOTcsIDIzNywgMjIyLCA1NCwgMTY1LCAKLSAgICA1OSwgMjQ4LCAwLCAyMzgsIDQzLCAyNTMsIDU1LCAyNTMsIDYyLCAyNDgsIDEwMCwgMTk4LCA1NCwgMTY1LCAyMzUsIDExMywgCi0gICAgMjQ4LCAwLCAyMzgsIDQzLCAyNTMsIDU1LCAyNTMsIDYyLCAyNDgsIDE1NiwgMTk4LCA2OSwgMSwgMTc3LCA2OSwgMSwgMjQ2LCAKLSAgICAxNzgsIDY5LCAxLCAyNTIsIDIwNSwgNjksIDEsIDI0NiwgMjAyLCA2OSwgMSwgMjQ2LCAxNjksIDY5LCAxLCAyNTIsIDIxNSwgCi0gICAgNjksIDEsIDI0NiwgMTc2LCA2OSwgMSwgMjUyLCAyMTMsIDY5LCAxLCAyNDYsIDIxMywgNjksIDEsIDI0NiwgMTgxLCA2OSwgCi0gICAgMSwgMjQ0LCAyNTAsIDY5LCAxLCAyNDYsIDE5MSwgNjksIDEsIDI0MCwgMTUwLCA2OSwgMSwgMjQ2LCAxOTIsIDY5LCAxLCAKLSAgICAyNDAsIDE2NiwgNjksIDEsIDI0NiwgMjAzLCA2OSwgMSwgMjUyLCAyMDIsIDY5LCAxLCAyNDYsIDE3MywgNjksIDEsIDI1MiwgCi0gICAgMjAzLCA2OSwgMSwgMjQ2LCAxOTYsIDY5LCAxLCAyNTIsIDIwMSwgNjksIDEsIDIxMywgNjksIDEsIDI0NiwgMTgyLCA2OSwgCi0gICAgMSwgMjUyLCAyMTEsIDY5LCAxLCAyNDYsIDE5OSwgNjksIDEsIDE5OCwgNjksIDEsIDE5MSwgNjksIDEsIDIwOCwgNjksIDEsIAotICAgIDI1MiwgMjAwLCA2OSwgMSwgMjUyLCAyMDgsIDY5LCAxLCAyNTIsIDIwNCwgNjksIDEsIDE1NCwgNjksIDEsIDI0NiwgMjI1LCAKLSAgICA2OSwgMSwgNTcsIDY5LCAxLCAyNDYsIDE2NiwgNTcsIDY5LCAxLCA3NCwgNjksIDEsIDI1MiwgMjE2LCA2OSwgMSwgNjYsIAotICAgIDY5LCAxLCAyNTIsIDIyNCwgNjksIDEsIDcyLCA2OSwgMSwgMjUzLCA2OCwgNzIsIDY5LCAxLCA3MywgNjksIDEsIDI1MiwgCi0gICAgMjIyLCA2OSwgMzEsIDUsIDI1MiwgNSwgMjUyLCAyMTIsIDY5LCAzMSwgNSwgMjUyLCAyMTIsIDY5LCAzMSwgNSwgNzQsIDY5LCAKLSAgICAzMSwgNSwgMjUyLCAyMTYsIDY5LCAzMSwgNSwgNjYsIDY5LCAzMSwgNSwgMjUyLCAyMjQsIDY5LCAzMSwgNSwgNzIsIDY5LCAKLSAgICAzMSwgNSwgMjUyLCAyMjEsIDY5LCAzMSwgNSwgMjUzLCA2OCwgMjUyLCAyMTYsIDY5LCAzMSwgNSwgMjUzLCA2OCwgNzMsIAotICAgIDY5LCAzMSwgNSwgMTYxLCA0NiwgNjksIDUsIDIzMSwgMjA2LCA2OSwgNSwgNTYsIDUxLCA2OSwgNSwgMjMzLCAxMDIsIDY5LCAKLSAgICA1LCAyMzUsIDQzLCA2OSwgNSwgMjQyLCA2NCwgNjksIDIzMSwgMTk0LCA1LCAxMjQsIDE5MSwgNjksIDIzMSwgMTk0LCA1LCAKLSAgICAxMjQsIDIwOCwgNjksIDIzMSwgMTk0LCA1LCAxMjQsIDI1MiwgMjA4LCA2OSwgMjMxLCAxOTQsIDUsIDEyNCwgMTU0LCA2OSwgCi0gICAgMSwgMjQwLCAyMjcsIDI1MiwgMjA0LCA2OSwgMjEsIDI0MCwgMTI2LCA2OSwgMjEsIDExOCwgNjksIDIxLCAxMTMsIDY5LCAKLSAgICAyMSwgMTY2LCA2OSwgMjEsIDE1OCwgNjksIDIxLCAxNzMsIDY5LCAyMSwgMTgzLCA2OSwgMjEsIDE5NCwgNjksIDIxLCAxODcsIAotICAgIDY5LCAyMSwgMTkyLCA2OSwgNSwgMjM3LCAxMDIsIDIzMywgMTQ0LCA2OSwgNSwgMjMzLCAxNDQsIDY5LCAxNCwgMjMyLCAKLSAgICAyMjEsIDY5LCAxNCwgMjMwLCAyMzYsIDY5LCAxNCwgMjI1LCAxMTAsIDY5LCAxNCwgMjMyLCAxOTgsIDY5LCAxLCAyNDYsIAotICAgIDE2NSwgNjksIDEsIDI0NiwgMTkwLCA2OSwgMSwgMTUzLCAxNDYsIDY5LCAxLCAxNTMsIDI1MiwgMjQ5LCA2OSwgMSwgMTUzLCAKLSAgICAxNDksIDY5LCAxLCAxNTMsIDI1MiwgMjQ1LCA2OSwgMzEsIDUsIDE1MywgMTQ2LCA2OSwgMzEsIDUsIDE1MywgMjUyLCAyNDksIAotICAgIDY5LCAzMSwgNSwgMTUzLCAxNDksIDY5LCAzMSwgNSwgMTUzLCAyNTIsIDI0NSwgNjksIDEsIDI1MywgNjgsIDI0NiwgMTY5LCAKLSAgICA2OSwgMSwgMjUzLCA2OCwgMjQ2LCAyMTMsIDY5LCAxLCAyNTMsIDY4LCAyNDcsIDY2LCA2OSwgMSwgMjUzLCA2OCwgMjQ3LCAKLSAgICAyNTAsIDY5LCAyMzEsIDE5NCwgNSwgMjUzLCA2OCwgMTI0LCAyNTIsIDIwMSwgNjksIDIzMSwgMTk0LCA1LCAyNTMsIDY4LCAKLSAgICAxMjQsIDE5OCwgNjksIDIzMSwgMTk0LCA1LCAyNTMsIDY4LCAxMjQsIDI1MiwgMjAwLCA2OSwgMSwgMjQ3LCAxMDMsIDI0MCwgCi0gICAgMTUzLCAyNDYsIDE2NSwgNjksIDMxLCA1LCAyNDcsIDEwMywgMjQwLCAxNTMsIDI1MywgMTAwLCA2OSwgMjA2LCAxNjUsIAotICAgIDI0NywgMTAzLCAyNDAsIDE1MywgMjM5LCA2LCA2OSwgMjA2LCAxNjUsIDI0NywgMTAzLCAyNDAsIDE1MywgMjU1LCAzNCwgCi0gICAgMjQ3LCA5OSwgNjksIDEsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyNDYsIDE3MywgNjksIDEsIDIzNSwgNjIsIAotICAgIDI1MywgNTEsIDI0MCwgMTUzLCAyNDcsIDQ3LCA2OSwgMzEsIDUsIDIzNSwgNjIsIDI1MywgNTEsIDI0MCwgMTUzLCAyNTMsIAotICAgIDEwMCwgNjksIDMxLCA1LCAyMzUsIDYyLCAyNTMsIDUxLCAyNDAsIDE1MywgMjUzLCA3MSwgNjksIDUsIDIzNSwgNjIsIDI1MywgCi0gICAgNTEsIDI0MCwgMTUzLCAyMzcsIDcsIDY5LCA1LCAyMzUsIDYyLCAyNTMsIDUxLCAyNDAsIDE1MywgMjM1LCAxMDEsIDY5LCA1LCAKLSAgICAyMzUsIDYyLCAyNTMsIDUxLCAyNDAsIDE1MywgMjM1LCAxMDIsIDY5LCA1LCAyMzUsIDYyLCAyNTMsIDUxLCAyNDAsIDE1MywgCi0gICAgMjM1LCAyMjcsIDY5LCA1LCAyMzUsIDYyLCAyNTMsIDUxLCAyNDAsIDE1MywgMjM1LCAxMDMsIDY5LCAxLCAyMzUsIDEyMSwgCi0gICAgMjUzLCA1MSwgMjQwLCAxNTMsIDI0NiwgMjAzLCA2OSwgMSwgMjM1LCAxMjEsIDI1MywgNTEsIDI0MCwgMTUzLCAyNDcsIAotICAgIDIzNSwgNjksIDEsIDIzNSwgMTIxLCAyNTMsIDUxLCAyNDAsIDE1MywgMjQzLCAxNDQsIDY5LCAzMSwgNSwgMjUwLCAyMSwgCi0gICAgMjQwLCAxNTMsIDc0LCA2OSwgMzEsIDUsIDI0MCwgMTE5LCAyNTMsIDE1LCA2OSwgMzEsIDUsIDI0MCwgMTE5LCA2NiwgNjksIAotICAgIDMxLCA1LCAyNDAsIDExOSwgMjUyLCAyMzEsIDY5LCAxLCAyNDYsIDE2NiwgMTc3LCA2OSwgMSwgMjQ2LCAxNjYsIDI0NiwgCi0gICAgMTc4LCA2OSwgMSwgMjQ2LCAxNjYsIDI1MiwgMjA1LCA2OSwgMSwgMjQ2LCAxNjYsIDI1MiwgMjE1LCA2OSwgMSwgMjQ2LCAKLSAgICAxNjYsIDI1MiwgMjI2LCA2OSwgMSwgMjQ2LCAxNjYsIDI0NiwgMTgxLCA2OSwgMSwgMjQ2LCAxNjYsIDI1MiwgMjAzLCA2OSwgCi0gICAgMSwgMjQ2LCAxNjYsIDI1MiwgMjAxLCA2OSwgMSwgMjQ2LCAxNjYsIDI0NiwgMTgyLCA2OSwgMSwgMjQ2LCAxNjYsIDI1MiwgCi0gICAgMjM0LCA2OSwgMSwgMjQ2LCAxNjYsIDI1MiwgMjExLCA2OSwgMSwgMjQ2LCAxNjYsIDI0NiwgMTczLCA2OSwgMSwgMjQ2LCAKLSAgICAxNjYsIDE1NCwgNjksIDIzMSwgMTk0LCA1LCAyNDYsIDE2NiwgMTI0LCAyNTIsIDIwOCwgNjksIDMxLCA1LCAyNDYsIDE2NiwgCi0gICAgMjUyLCAyMTIsIDY5LCAzMSwgNSwgMjQ2LCAxNjYsIDcyLCA2OSwgMzEsIDUsIDI0NiwgMTY2LCAxNjEsIDQ2LCA2OSwgMzEsIAotICAgIDUsIDI0NiwgMTY2LCAzNSwgMjU0LCAxOTAsIDY5LCA1LCAyNDYsIDE2NiwgMjM1LCAxMDEsIDY5LCA1LCAyNDYsIDE2NiwgCi0gICAgMjM1LCAxMDIsIDY5LCA1LCAyNDYsIDE2NiwgMjM1LCAxMDMsIDY5LCA1LCAyNDYsIDE2NiwgMjM1LCAyMjgsIDY5LCA1LCAKLSAgICAyNDYsIDE2NiwgMjM1LCAxMTYsIDIzNSwgMTAxLCA2OSwgNSwgMjQ2LCAxNjYsIDIzNSwgMTE2LCAyMzUsIDEwMiwgNjksIDUsIAotICAgIDI0NiwgMTY2LCAyMzUsIDExNiwgMjM0LCA5NSwgMjQwLCAxNjcsIDY5LCAxLCAyNDEsIDIyNywgMjM1LCAxOTgsIDI1MiwgCi0gICAgMjM0LCA2OSwgNSwgMjQxLCAyMjcsIDIzNSwgMTk4LCAyMzUsIDEwMywgNjksIDI0NiwgMTY2LCAyMSwgMjQwLCAxMjYsIDY5LCAKLSAgICAyNDYsIDE2NiwgMjEsIDExOCwgNjksIDI0NiwgMTY2LCAyMSwgMTEzLCA2OSwgMjQ2LCAxNjYsIDIxLCAxNjYsIDY5LCAyNDYsIAotICAgIDE2NiwgMjEsIDE1OCwgNjksIDI0NiwgMTY2LCAyMSwgMTczLCA2OSwgMjQ2LCAxNjYsIDIxLCAxODMsIDY5LCAyNDYsIDE2NiwgCi0gICAgMjEsIDE5NCwgNjksIDI0NiwgMTY2LCAyMSwgMTg3LCA2OSwgMjQ2LCAxNjYsIDIxLCAxOTIsIDY5LCAxNCwgMjQ2LCAxNjYsIAotICAgIDExOCwgNjksIDE0LCAyNDYsIDE2NiwgMjI5LCAxOCwgODcsIDYsIDEsIDI1MywgNSwgODcsIDYsIDEsIDI0NywgMTIxLCA4NywgCi0gICAgNiwgMSwgMjQ3LCAzMiwgODcsIDYsIDEsIDI0NywgMTMxLCA4NywgNiwgMSwgMjUyLCAyMzIsIDg3LCA2LCAxLCAyNDcsIAotICAgIDIyMiwgODcsIDYsIDEsIDI0NywgMjM3LCA4NywgNiwgMSwgMjQ3LCAyMDksIDg3LCA2LCAxLCAyNTMsIDc5LCA4NywgNiwgMSwgCi0gICAgMjQ3LCAzOSwgODcsIDYsIDEsIDI0NywgMTY3LCA4NywgNiwgMSwgMjQ3LCA0LCA4NywgNiwgMSwgMjQ3LCA5MiwgODcsIDYsIAotICAgIDEsIDI1MywgMTA2LCA4NywgNiwgMSwgMjQ3LCAxODcsIDg3LCA2LCAxLCAyNDEsIDkwLCA4NywgNiwgMSwgMjQ3LCAxOTQsIAotICAgIDg3LCA2LCAxLCAyNDcsIDQ5LCA4NywgNiwgMSwgMjQ3LCA1NiwgODcsIDYsIDEsIDI1MywgMTIxLCA4NywgNiwgMSwgMjQxLCAKLSAgICA2MSwgODcsIDYsIDEsIDI0MSwgNDYsIDg3LCA2LCAxLCAyNDEsIDM5LCA4NywgNiwgMSwgMjQ3LCAxOTMsIDg3LCA2LCAxLCAKLSAgICAyNDAsIDIwMywgODcsIDYsIDEsIDI0MSwgMzIsIDg3LCA2LCAxLCAyNDYsIDI0MSwgODcsIDYsIDEsIDI0NywgMTUzLCA4NywgCi0gICAgNiwgMSwgMjQ3LCAxMjUsIDg3LCA2LCAxLCAyNDEsIDMxLCA4NywgNiwgMSwgMjQ3LCAyMjgsIDg3LCA2LCAxLCAyNDEsIDQ0LCAKLSAgICA4NywgNiwgMSwgMjQ3LCAxNDUsIDg3LCA2LCAxLCAyNTIsIDI1MiwgODcsIDYsIDEsIDI0NywgODEsIDg3LCA2LCAxLCAyNTIsIAotICAgIDI1MCwgODcsIDYsIDEsIDI0NywgMTQ2LCA4NywgNiwgMSwgMjQ3LCAxNTAsIDg3LCAxLCAyNTMsIDUsIDg3LCAxLCAyNDcsIAotICAgIDEyMSwgODcsIDEsIDI0NywgMzIsIDg3LCAxLCAyNDcsIDEzMSwgODcsIDEsIDI1MiwgMjMyLCA4NywgMSwgMjQ3LCAyMjIsIAotICAgIDg3LCAxLCAyNDcsIDIzNywgODcsIDEsIDI0NywgMjA5LCA4NywgMSwgMjUzLCA3OSwgODcsIDEsIDI0NywgMzksIDg3LCAxLCAKLSAgICAyNDcsIDE2NywgODcsIDEsIDI0NywgNCwgODcsIDEsIDI0NywgOTIsIDg3LCAxLCAyNTMsIDEwNiwgODcsIDEsIDI0NywgCi0gICAgMTg3LCA4NywgMSwgMjQxLCA5MCwgODcsIDEsIDI0NywgMTk0LCA4NywgMSwgMjQ3LCA0OSwgODcsIDEsIDI0NywgNTYsIDg3LCAKLSAgICAxLCAyNTMsIDEyMSwgODcsIDEsIDI0MSwgNjEsIDg3LCAxLCAyNDEsIDQ2LCA4NywgMSwgMjQxLCAzOSwgODcsIDEsIDI0NywgCi0gICAgMTkzLCA4NywgMSwgMjQwLCAyMDMsIDg3LCAxLCAyNDEsIDMyLCA4NywgMSwgMjQ2LCAyNDEsIDg3LCAxLCAyNDcsIDE1MywgCi0gICAgODcsIDEsIDI0NywgMTI1LCA4NywgMSwgMjQxLCAzMSwgODcsIDEsIDI0NywgMjI4LCA4NywgMSwgMjQxLCA0NCwgODcsIDEsIAotICAgIDI0NywgMTQ1LCA4NywgMSwgMjUyLCAyNTIsIDg3LCAxLCAyNDcsIDgxLCA4NywgMSwgMjUyLCAyNTAsIDg3LCAxLCAyNDcsIAotICAgIDE0NiwgODcsIDEsIDI0NywgMTUwLCA4NywgMSwgMjUzLCA4OCwgODcsIDEsIDI1MywgMjAyLCA4NywgMSwgMjM4LCAyMDAsIAotICAgIDg3LCAxLCAyMDksIDI0NywgMzIsIDg3LCAxLCAyNDYsIDIyNCwgODcsIDIzMSwgMjQyLCAyMzAsIDEzMSwgNTIsIDEsIDg3LCAKLSAgICAyNDcsIDkyLCAyNiwgMTIyLCAyMzUsIDc3LCAyNiwgMTIyLCAyMjgsIDE5NSwgMjYsIDEyMiwgMjM3LCAxMzksIDI2LCAxMjIsIAotICAgIDIzNSwgODEsIDI2LCAxMjIsIDIyOCwgMjA5LCAyNiwgMTIyLCAyMzcsIDE0MiwgMjYsIDEyMiwgMjM3LCAxMzcsIDI2LCAKLSAgICAxMjIsIDIzNywgMTQxLCAyNiwgMTIyLCAyMjksIDE5MywgMjYsIDEyMiwgMjQwLCAyMTMsIDI2LCAxMjIsIDIzMCwgMTU5LCAKLSAgICAyNiwgMTIyLCAyMzcsIDEzNCwgMjYsIDEyMiwgMjM3LCAxMzAsIDI2LCAxMjIsIDIyOSwgMTkxLCAyNiwgMTIyLCAyMzMsIAotICAgIDEyOCwgMjYsIDEyMiwgMjMzLCAxMzEsIDI2LCAxMjIsIDIzMywgMTM4LCAyNiwgMTIyLCAyMzMsIDEzMywgMjYsIDEyMiwgCi0gICAgMjM3LCAxMzMsIDI2LCAxMjIsIDIyNywgMjA3LCAyNiwgMTIyLCAyMjksIDIxOSwgMjYsIDEyMiwgMjI3LCAxOTYsIDI2LCAKLSAgICAxMjIsIDIyOSwgNDIsIDI2LCAxMjIsIDIyNywgMTUzLCAyNiwgMTIyLCAyMjgsIDIxNywgMjYsIDEyMiwgMjI5LCAyMjAsIAotICAgIDI2LCAxMjIsIDIyOCwgMTkzLCAyNiwgMTIyLCAyMjcsIDE2OSwgMjYsIDEyMiwgMjI4LCAyMDAsIDI2LCAxMjIsIDIyNywgCi0gICAgMTM3LCAyNiwgMTIyLCAyMjcsIDIwOCwgMjYsIDEyMiwgMjI5LCA1MCwgMjYsIDEyMiwgMjI3LCAyMDksIDI2LCAxMjIsIAotICAgIDIyOSwgMTgwLCAyNiwgMTIyLCAyMjIsIDIzOSwgMjYsIDEyMiwgMjIyLCAyNDAsIDI2LCAxMjIsIDIyMywgNTEsIDI2LCAKLSAgICAxMjIsIDIyNSwgOTksIDI2LCAxMjIsIDIyMywgNTAsIDI2LCAxMjIsIDIyOCwgMjE1LCAyNiwgMTIyLCAyMjcsIDE3MywgMjYsIAotICAgIDEyMiwgMjI3LCAxNDksIDI2LCAxMjIsIDIyNywgMTQ4LCAyNiwgMTIyLCAyMjcsIDEzOCwgMjYsIDEyMiwgMjIyLCAyMzEsIAotICAgIDI2LCAxMjIsIDIyOCwgMjA3LCAyNiwgMTIyLCAyMjksIDIxNiwgMjYsIDEyMiwgMjI4LCAyMDgsIDI2LCAxMjIsIDIyOSwgCi0gICAgMjE3LCAyNiwgMTIyLCAyMzAsIDExMSwgMjYsIDEyMiwgMjI5LCAxOTAsIDI2LCAxMjIsIDIyMiwgMjUxLCAyNiwgMTIyLCAKLSAgICAyMjcsIDc4LCAyNiwgMTIyLCAyMzAsIDExMCwgMjYsIDEyMiwgMjI5LCAyMTUsIDI2LCAxMjIsIDIyOCwgMTYxLCAyNiwgCi0gICAgMTIyLCAyMjgsIDE2MiwgMjYsIDEyMiwgMjI4LCAxNjQsIDI2LCAxMjIsIDIyOCwgMTYzLCAyNiwgMTIyLCAyMzAsIDEwOSwgCi0gICAgMjYsIDEyMiwgMjI3LCAyMjIsIDI2LCAxMjIsIDIyMiwgMjQ0LCAyNiwgMTIyLCAyMjMsIDYwLCAyNiwgMTIyLCAyMjIsIAotICAgIDIyOCwgMjYsIDEyMiwgMjMzLCAxNzQsIDI2LCAxMjIsIDIyNywgMjA1LCAyNiwgMTIyLCAyMjcsIDI0NSwgMjYsIDEyMiwgCi0gICAgMjI5LCAyOSwgMjYsIDEyMiwgMjI5LCAzMCwgMjYsIDEyMiwgMjMwLCA2OCwgMjYsIDEyMiwgMjI3LCAxNjYsIDI2LCAxMjIsIAotICAgIDIyOSwgMTkyLCAyNiwgMTIyLCAyMjksIDI4LCAyNiwgMTIyLCAyMjcsIDE2NCwgMjYsIDEyMiwgMjI3LCAxNjgsIDI2LCAKLSAgICAxMjIsIDIyNywgMTY3LCAyNiwgMTIyLCAyMzIsIDEzLCAyNiwgMTIyLCAyMjgsIDIyOCwgMjYsIDEyMiwgMjI3LCAxNTksIAotICAgIDI2LCAxMjIsIDIyMiwgMjM0LCAyNiwgMTIyLCAyMjIsIDI1NSwgMjYsIDEyMiwgMjIyLCAyMjUsIDI2LCAxMjIsIDIyMywgCi0gICAgNjEsIDI2LCAxMjIsIDIyNywgMTU4LCAyNiwgMTIyLCAyMjMsIDYyLCAyNiwgMTIyLCAyMjIsIDIzMywgMjYsIDEyMiwgMjI3LCAKLSAgICAxNDcsIDI2LCAxMjIsIDIyMywgNTYsIDI2LCAxMjIsIDIyOSwgMjE4LCAyNiwgMTIyLCAyMjgsIDIxMCwgMjYsIDEyMiwgCi0gICAgMjM1LCA5MiwgMjYsIDE3MCwgMjM1LCA5MiwgMjYsIDE3MCwgNTcsIDI2LCAxNzAsIDI1MywgNCwgMjYsIDE3MCwgMTkxLCAKLSAgICAyNiwgMTcwLCAyNDcsIDYxLCAyNiwgMTcwLCAyNTMsIDE3NywgMjYsIDE3MCwgNzIsIDI2LCAxNzAsIDI0NywgMjMyLCAyNiwgCi0gICAgMTcwLCAyNTMsIDk2LCAyNiwgMTcwLCA3MywgMjYsIDE3MCwgMjUyLCAyMDgsIDI2LCAxNzAsIDI0NywgMjIzLCAyNiwgMTcwLCAKLSAgICAyNTMsIDE1LCAyNiwgMTcwLCAyNTIsIDI1MSwgMjYsIDE3MCwgNjYsIDI2LCAxNzAsIDI0NywgMjI3LCAyNiwgMTcwLCAyNTIsIAotICAgIDI1MCwgMjYsIDE3MCwgMjUzLCAyNywgMjYsIDE3MCwgMjUyLCAyMzMsIDI2LCAxNzAsIDI1MywgMTAwLCAyNiwgMTcwLCAKLSAgICAyNTMsIDI4LCAyNiwgMTcwLCA3NCwgMjYsIDE3MCwgMjQ4LCAyMTksIDI2LCAxNzAsIDI0OCwgMjIwLCAyNiwgMTcwLCAyNDYsIAotICAgIDczLCAyNiwgMTcwLCAyNDAsIDkwLCAyNiwgMTcwLCAyNDMsIDk4LCAyNiwgMTcwLCAyNDMsIDk5LCAyNiwgMTcwLCAyMzgsIAotICAgIDIwMywgMjYsIDE3MCwgMjQwLCA5NiwgMjYsIDE3MCwgMjQwLCA5NywgMjYsIDE3MCwgMjQ1LCA1MSwgMjYsIDE3MCwgMjUxLCAKLSAgICA5MSwgMjYsIDE3MCwgMjQ1LCA1MiwgMjYsIDE3MCwgMjUxLCA5MiwgMjYsIDE3MCwgMjUxLCA5MywgMjYsIDE3MCwgMjM4LCAKLSAgICA4MywgMjYsIDE3MCwgMjM1LCAyMzMsIDI2LCAxNzAsIDIzNywgMzQsIDI2LCAxNzAsIDI0NiwgOTMsIDI2LCAxNzAsIDI0MiwgCi0gICAgMzEsIDI2LCAxNzAsIDI1MiwgNDgsIDI2LCAxNzAsIDI0NiwgMjcsIDI2LCAxNzAsIDIzNSwgMCwgMjYsIDE3MCwgMjQ2LCAKLSAgICAyOCwgMjYsIDE3MCwgMjUyLCA0OSwgMjYsIDE3MCwgMjQ2LCA5NiwgMjYsIDE3MCwgMjQwLCAxMDAsIDI2LCAxNzAsIDI0NiwgCi0gICAgOTcsIDI2LCAxNzAsIDIzNSwgMjM0LCAyNiwgMTcwLCAyMzgsIDg0LCAyNiwgMTcwLCAyNDYsIDk4LCAyNiwgMTcwLCAyNDIsIAotICAgIDMzLCAyNiwgMTcwLCAyNDMsIDEwMiwgMjYsIDE3MCwgMjM4LCAyMDksIDI2LCAxNzAsIDI0NiwgODgsIDI2LCAxNzAsIDI1MCwgCi0gICAgMTEwLCAyNiwgMTcwLCAyNDQsIDEsIDI2LCAxNzAsIDI1MCwgMTExLCAyNiwgMTcwLCAyNTAsIDExMiwgMjYsIDE3MCwgMjQ0LCAKLSAgICAwLCAyNiwgMTcwLCAyMzQsIDEyMiwgMjYsIDE3MCwgMjM3LCAyMjgsIDI2LCAxNzAsIDIzMiwgNzQsIDI2LCAxNzAsIDIzNCwgCi0gICAgNywgMjYsIDE3MCwgMjM0LCA2LCAyNiwgMTcwLCAyMzAsIDExMiwgMjYsIDEzOCwgMjM1LCA3NywgMjYsIDEzOCwgMjI4LCAKLSAgICAxOTUsIDI2LCAxMzgsIDIyOCwgMTk5LCAyNiwgMTM4LCAyMzcsIDEzOSwgMjYsIDEzOCwgMjI4LCAyMDEsIDI2LCAxMzgsIAotICAgIDIyOCwgMjAyLCAyNiwgMTM4LCAyMzUsIDgxLCAyNiwgMTM4LCAyMzcsIDE0MiwgMjYsIDEzOCwgMjI3LCAxOTcsIDI2LCAKLSAgICAxMzgsIDIyOCwgMjA0LCAyNiwgMTM4LCAyMjgsIDIwNSwgMjYsIDEzOCwgMjI5LCAxODgsIDI2LCAxMzgsIDIyNywgMTQwLCAKLSAgICAyNiwgMTM4LCAyMjcsIDEzOSwgMjYsIDEzOCwgMjI4LCAxOTMsIDI2LCAxMzgsIDIzNywgMTM3LCAyNiwgMTM4LCAyMzcsIAotICAgIDE0MSwgMjYsIDEzOCwgMjI5LCAxODAsIDI2LCAxMzgsIDI0MCwgMjEzLCAyNiwgMTM4LCAyMzAsIDE1OSwgMjYsIDEzOCwgCi0gICAgMjM3LCAxMzQsIDI2LCAxMzgsIDIzNywgMTMwLCAyNiwgMTM4LCAyMzMsIDEyOCwgMjYsIDEzOCwgMjMzLCAxMzEsIDI2LCAKLSAgICAxMzgsIDIzMywgMTM4LCAyNiwgMTM4LCAyMzMsIDEzMywgMjYsIDEzOCwgMjM3LCAxMzMsIDI2LCAxMzgsIDIyNywgMjQ4LCAKLSAgICAyNiwgMTM4LCAyMjIsIDIzNSwgMjYsIDEzOCwgMjI3LCAyMDcsIDI2LCAxMzgsIDIyNywgMTk2LCAyNiwgMTM4LCAyMjksIAotICAgIDIwNCwgMjYsIDEzOCwgMjI3LCAxNDQsIDI2LCAxMzgsIDIyNywgMTcyLCAyNiwgMTM4LCAyMjcsIDE1MywgMjYsIDEzOCwgCi0gICAgMjI4LCAxNjgsIDI2LCAxMzgsIDIyMiwgMjQxLCAyNiwgMTM4LCAyMjgsIDIxNywgMjYsIDEzOCwgMjI3LCAyMTAsIDI2LCAKLSAgICAxMzgsIDIyMiwgMjM3LCAyNiwgMTM4LCAyMjksIDIyMCwgMjYsIDEzOCwgMjIyLCAyMzYsIDI2LCAxMzgsIDIyMywgNTIsIAotICAgIDI2LCAxMzgsIDIyMiwgMjUzLCAyNiwgMTM4LCAyMjIsIDI0OSwgMjYsIDEzOCwgMjIyLCAyMzAsIDI2LCAxMzgsIDIyNSwgCi0gICAgMTAyLCAyNiwgMTM4LCAyMjcsIDE1MSwgMjYsIDEzOCwgMjI3LCAxNzQsIDI2LCAxMzgsIDIyMiwgMjQyLCAyNiwgMTM4LCAKLSAgICAyMjcsIDI1MywgMjYsIDEzOCwgMjI5LCAzNywgMjYsIDEzOCwgMjI4LCAyMDAsIDI2LCAxMzgsIDIyOSwgMjAwLCAyNiwgCi0gICAgMTM4LCAyMjUsIDk3LCAyNiwgMTM4LCAyMjcsIDE0MywgMjYsIDEzOCwgMjI3LCAxNzEsIDI2LCAxMzgsIDIyOSwgMzYsIDI2LCAKLSAgICAxMzgsIDIyNywgMTM3LCAyNiwgMTM4LCAyMjksIDUxLCAyNiwgMTM4LCAyMjcsIDE0OCwgMjYsIDEzOCwgMjI5LCA0OSwgMjYsIAotICAgIDEzOCwgMjI3LCAxMzgsIDI2LCAxMzgsIDIyOCwgMjA3LCAyNiwgMTM4LCAyMjgsIDIwOCwgMjYsIDEzOCwgMjI5LCAyMTcsIAotICAgIDI2LCAxMzgsIDIyOSwgMTkwLCAyNiwgMTM4LCAyMzMsIDE3NCwgMjYsIDEzOCwgMjI3LCAyMDUsIDI2LCAxMzgsIDIyMiwgCi0gICAgMjQ2LCAyNiwgMTM4LCAyMjksIDE5MiwgMjYsIDEzOCwgMjI3LCAxNjUsIDI2LCAxMzgsIDIzMiwgMTMsIDI2LCAxMzgsIAotICAgIDIyNywgMTU1LCAyNiwgMTM4LCAyMjIsIDI1NCwgMjYsIDEzOCwgMjI3LCAxNDcsIDI2LCAxMzgsIDIyMywgNTYsIDI2LCAKLSAgICAxMzgsIDIyOSwgMjQsIDI2LCAxMzgsIDIyOSwgMjYsIDI2LCAxMzgsIDIyOSwgMjMsIDI2LCAxMzgsIDIyOSwgMjUsIDI2LCAKLSAgICAxMzgsIDIyOCwgMjEwLCAyNSwgNCwgMTU0LCAyNSwgNCwgMjUzLCA1OSwgMjUsIDQsIDI1MywgNDEsIDI1LCA0LCAyNDcsIAotICAgIDE0LCAyNSwgNCwgMjQ3LCAxNDksIDI1LCA0LCAyNTIsIDI1MiwgMjUsIDQsIDI1MywgMjEsIDI1LCA0LCAyNTAsIDkwLCAyNSwgCi0gICAgNCwgMjUyLCAyMDAsIDI1LCA0LCAyNTMsIDIyLCAyNSwgNCwgMjUzLCA0MiwgMjUsIDQsIDI0NywgMTY2LCAyNSwgNCwgMjQ3LCAKLSAgICAxNjgsIDI1LCA0LCAyNTMsIDgwLCAyNSwgNCwgMjUzLCA0OSwgMjUsIDQsIDI0NywgMTcxLCAyNSwgNCwgMjUwLCA3MCwgMjUsIAotICAgIDQsIDI1MCwgNzQsIDI1LCA0LCAyNTAsIDcyLCAyNSwgNCwgMjQxLCAxNTYsIDI1LCA0LCAyNDMsIDE3MywgMjUsIDQsIDI1MCwgCi0gICAgNzEsIDI1LCA0LCAyNTAsIDczLCAyNSwgNCwgMjQzLCAxNzQsIDI1LCA0LCAxOTgsIDI1LCA0LCAyNTIsIDIyOSwgMjUsIDQsIAotICAgIDI1MiwgMjM5LCAyNSwgNCwgMjQ4LCA5OCwgMjUsIDQsIDI0NywgMTcyLCAyNSwgNCwgMjUzLCAxMywgMjUsIDQsIDI1MywgCi0gICAgMTQsIDI1LCA0LCAyNDcsIDkwLCAyNSwgNCwgMjUxLCAyNTMsIDI1LCA0LCAyNTIsIDEsIDI1LCA0LCAyNTEsIDI1NSwgMjUsIAotICAgIDQsIDI0NSwgMjMxLCAyNSwgNCwgMjQ1LCAyMzIsIDI1LCA0LCAyNTEsIDI1NCwgMjUsIDQsIDI1MiwgMCwgMjUsIDQsIDI0NSwgCi0gICAgMjMzLCAyNSwgNCwgMjA4LCAyNSwgNCwgMjUzLCAzLCAyNSwgNCwgMjUzLCAzNywgMjUsIDQsIDI0NywgMTAwLCAyNSwgNCwgCi0gICAgMjQ3LCAxOTcsIDI1LCA0LCAyNTMsIDM2LCAyNSwgNCwgMjUyLCAyNDYsIDI1LCA0LCAyNTEsIDIwMSwgMjUsIDQsIDI1MiwgCi0gICAgMjA0LCAyNSwgNCwgMjUzLCAyNiwgMjUsIDQsIDI1MywgMjQsIDI1LCA0LCAyNDgsIDE1MywgMjUsIDQsIDI0NywgNTAsIDI1LCAKLSAgICA0LCAyNTMsIDUyLCAyNSwgNCwgMjUzLCAyNSwgMjUsIDQsIDI0NywgMjA2LCAyNSwgNCwgMjQ2LCAxNjUsIDI1LCA0LCAyNDYsIAotICAgIDI0NiwgMjUsIDQsIDI0NywgNTEsIDI1LCA0LCAyNDEsIDIzNCwgMjUsIDQsIDI0MSwgNzAsIDI1LCA0LCAyNDYsIDE4NiwgCi0gICAgMjUsIDQsIDI0NiwgMjQ1LCAyNSwgNCwgMjQxLCA3MiwgMjUsIDQsIDI1MywgMzUsIDI1LCA0LCAyNTMsIDEzMiwgMjUsIDQsIAotICAgIDI1MywgMTMxLCAyNSwgNCwgMjQ3LCAxOTIsIDI1LCA0LCAyNTEsIDEzMSwgMjUsIDQsIDI1MywgMTkwLCAyNSwgNCwgMjUzLCAKLSAgICAxNTksIDI1LCA0LCAyNTEsIDE0MSwgMjUsIDQsIDI1MSwgMTU0LCAyNSwgNCwgMjUxLCAxNTYsIDI1LCA0LCAyNDUsIDEwNiwgCi0gICAgMjUsIDQsIDI0NSwgMTA3LCAyNSwgNCwgMjUxLCAxNTUsIDI1LCA0LCAyNTEsIDEzMiwgMjUsIDQsIDI1MSwgMTM2LCAyNSwgCi0gICAgNCwgMjUxLCAxMzQsIDI1LCA0LCAyNDUsIDkyLCAyNSwgNCwgMjQ1LCA5MywgMjUsIDQsIDI1MSwgMTMzLCAyNSwgNCwgMjUxLCAKLSAgICAxMzUsIDI1LCA0LCAyNDUsIDk0LCAyNSwgNCwgMjQ1LCA5NiwgMjUsIDQsIDIzOSwgMjEwLCAyNSwgNCwgMjM5LCAyMTEsIAotICAgIDI1LCA0LCAyNDUsIDk1LCAyNSwgNCwgMjUyLCAyMTEsIDI1LCA0LCAyNTMsIDQ4LCAyNSwgNCwgMjUzLCAzMCwgMjUsIDQsIAotICAgIDI0NywgMjQ3LCAyNSwgNCwgMjQ3LCAyOCwgMjUsIDQsIDI1MywgNzMsIDI1LCA0LCAyNTMsIDk4LCAyNSwgNCwgMjQ4LCAyLCAKLSAgICAyNSwgNCwgMjUyLCAyNDMsIDI1LCA0LCAyNTMsIDEzOSwgMjUsIDQsIDI1MywgMTM4LCAyNSwgNCwgMjUyLCA2OSwgMjUsIDQsIAotICAgIDI0NywgMTEzLCAyNSwgNCwgMjUzLCA5NSwgMjUsIDQsIDI1MywgMTA4LCAyNSwgNCwgMjUyLCA4OCwgMjUsIDQsIDI1MiwgCi0gICAgMjAyLCAyNSwgNCwgMjUzLCAxOCwgMjUsIDQsIDI1MywgNDQsIDI1LCA0LCAyNDcsIDIwNywgMjUsIDQsIDI0NywgMTA2LCAKLSAgICAyNSwgNCwgMjUzLCA5LCAyNSwgNCwgOTYsIDI1LCA0LCAyNDcsIDIxOCwgMjUsIDQsIDI1MiwgMjE1LCAyNSwgNCwgMjUzLCAKLSAgICAxNzIsIDI1LCA0LCAyNTMsIDE0MywgMjUsIDQsIDI0OCwgMywgMjUsIDQsIDI0OCwgNiwgMjUsIDQsIDI1MywgMTQxLCAyNSwgCi0gICAgNCwgMjUzLCA2NiwgMjUsIDQsIDI0NywgMTI4LCAyNSwgNCwgMjUzLCA4MywgMjUsIDQsIDI1NCwgMTczLCAyNSwgNCwgMjUzLCAKLSAgICAzOCwgMjUsIDQsIDI1MiwgMTEwLCAyNSwgNCwgMjUyLCAxMTEsIDI1LCA0LCAyNTQsIDE3LCAyNSwgNCwgMjU0LCAxOCwgMjUsIAotICAgIDQsIDI1MiwgMTE2LCAyNSwgNCwgMjUyLCAxMjIsIDI1LCA0LCAyNTIsIDEyNCwgMjUsIDQsIDI0NiwgNjgsIDI1LCA0LCAKLSAgICAyNDYsIDY5LCAyNSwgNCwgMjUyLCAxMjMsIDI1LCA0LCAyNTIsIDIwMSwgMjUsIDQsIDI1MiwgMjI3LCAyNSwgNCwgMjUyLCAKLSAgICAyNDgsIDI1LCA0LCAyNDcsIDE3OSwgMjUsIDQsIDI0NywgMTgxLCAyNSwgNCwgMjUyLCAyNDcsIDI1LCA0LCAyNTMsIDgsIAotICAgIDI1LCA0LCAyNDcsIDk1LCAyNSwgNCwgMjQ2LCAxODEsIDI1LCA0LCAyNDcsIDE4NSwgMjUsIDQsIDI0NywgNDQsIDI1LCA0LCAKLSAgICAyNDUsIDE4LCAyNSwgNCwgMjQxLCAyMDYsIDI1LCA0LCAyNDgsIDExOSwgMjUsIDQsIDI0NywgMTksIDI1LCA0LCAyNDUsIAotICAgIDMzLCAyNSwgNCwgMjM1LCAzMSwgNTcsIDI1LCA0LCAyMzUsIDMxLCA2NiwgMjUsIDQsIDIzNSwgMzEsIDc0LCAyNSwgNCwgCi0gICAgMjM1LCAzMSwgMjUyLCAyMTIsIDI1LCA0LCAyMzUsIDMxLCAyNTIsIDIzMSwgMjUsIDQsIDIzNSwgMzEsIDcyLCAyNSwgNCwgCi0gICAgMjM1LCAzMSwgNzMsIDI1LCA0LCAyMzUsIDMxLCAyNTIsIDIwOCwgMjUsIDQsIDE3NywgMjUsIDQsIDI1MywgMzQsIDI1LCA0LCAKLSAgICAyNTMsIDcsIDI1LCA0LCAyNDgsIDc2LCAyNSwgNCwgMjQ4LCA4MCwgMjUsIDQsIDI1MywgNiwgMjUsIDQsIDI1MywgMzMsIAotICAgIDI1LCA0LCAyNTAsIDE3NiwgMjUsIDQsIDI0NywgMTYzLCAyNSwgNCwgMjQ3LCAxNjUsIDI1LCA0LCAyNDEsIDMsIDI1LCA0LCAKLSAgICAyNDQsIDc1LCAyNSwgNCwgMjQ3LCAxNjQsIDI1LCA0LCAyNTAsIDE5NCwgMjUsIDQsIDI1MCwgMTk4LCAyNSwgNCwgMjUwLCAKLSAgICAxOTYsIDI1LCA0LCAyNDQsIDc2LCAyNSwgNCwgMjQ0LCA3NywgMjUsIDQsIDI1MCwgMTk1LCAyNSwgNCwgMjUwLCAxOTcsIAotICAgIDI1LCA0LCAyNDQsIDc4LCAyNSwgNCwgMjQ0LCA4MCwgMjUsIDQsIDIzOSwgNzUsIDI1LCA0LCAyMzksIDc2LCAyNSwgNCwgCi0gICAgMjQ0LCA3OSwgMjUsIDQsIDI1MiwgMjA4LCAyNSwgNCwgMjUzLCAxMDksIDI1LCA0LCAyNTMsIDI3LCAyNSwgNCwgMjQ3LCAKLSAgICAxMTUsIDI1LCA0LCAyNDcsIDIyNiwgMjUsIDQsIDI1MiwgMjUwLCAyNSwgNCwgMjUzLCAxMCwgMjUsIDQsIDI1MiwgMTAxLCAKLSAgICAyNSwgNCwgMjMwLCAxMzgsIDU3LCAyNSwgNCwgMjMwLCAxMzgsIDY2LCAyNSwgNCwgMjMwLCAxMzgsIDc0LCAyNSwgNCwgCi0gICAgMjMwLCAxMzgsIDI1MiwgMjEyLCAyNSwgNCwgMjMwLCAxMzgsIDI1MiwgMjMxLCAyNSwgNCwgMjMwLCAxMzgsIDcyLCAyNSwgCi0gICAgNCwgMjMwLCAxMzgsIDczLCAyNSwgNCwgMjUyLCAyMjYsIDI1LCA0LCAyNTMsIDk3LCAyNSwgNCwgMjUzLCA3MiwgMjUsIDQsIAotICAgIDI0OCwgMjA3LCAyNSwgNCwgMjQ3LCA2NCwgMjUsIDQsIDI1MywgNDYsIDI1LCA0LCAyNTMsIDY1LCAyNSwgNCwgMjUyLCAKLSAgICAxOTMsIDI1LCA0LCAyNDYsIDIyMywgMjUsIDQsIDI0NywgMjQwLCAyNSwgNCwgMjQ3LCAyMzgsIDI1LCA0LCAyNDYsIDEwOCwgCi0gICAgMjUsIDQsIDI0MSwgMjUsIDI1LCA0LCAyNDYsIDI1MSwgMjUsIDQsIDI0NywgMjM5LCAyNSwgNCwgMjQ2LCAxMjQsIDI1LCA0LCAKLSAgICAxOTEsIDI1LCA0LCAyNTIsIDIzMywgMjUsIDQsIDI1MywgMjgsIDI1LCA0LCAyNDcsIDExNywgMjUsIDQsIDI0NywgNjIsIAotICAgIDI1LCA0LCAyNTMsIDk2LCAyNSwgNCwgMjUyLCAyNTEsIDI1LCA0LCAyNTIsIDE1MywgMjUsIDQsIDI1MiwgMjAzLCAyNSwgNCwgCi0gICAgMjUzLCAzMSwgMjUsIDQsIDI1MywgMTIsIDI1LCA0LCAyNDksIDE3MywgMjUsIDQsIDI0NywgMzAsIDI1LCA0LCAyNTMsIDIwLCAKLSAgICAyNSwgNCwgMjUzLCA1NywgMjUsIDQsIDI0OSwgMjE3LCAyNSwgNCwgMjQ2LCAxOTIsIDI1LCA0LCAyNDgsIDI0LCAyNSwgNCwgCi0gICAgMjQ4LCAyMywgMjUsIDQsIDI0MywgMjksIDI1LCA0LCAyNDMsIDM1LCAyNSwgNCwgMjQ4LCAyMiwgMjUsIDQsIDI0NywgMTMwLCAKLSAgICAyNSwgNCwgMjQzLCA1MSwgMjUsIDQsIDI1MiwgMjEzLCAyNSwgNCwgMjUzLCAxMTgsIDI1LCA0LCAyNTMsIDEwNCwgMjUsIDQsIAotICAgIDI1MCwgMTI1LCAyNSwgNCwgMjQ3LCAzOCwgMjUsIDQsIDI1MywgMTE3LCAyNSwgNCwgMjUzLCA5MCwgMjUsIDQsIDI1MCwgCi0gICAgMTQ2LCAyNSwgNCwgMjUyLCAyMDUsIDI1LCA0LCAyNTMsIDQwLCAyNSwgNCwgMjUzLCAzOSwgMjUsIDQsIDI0NywgMTQzLCAKLSAgICAyNSwgNCwgMjQ3LCAxNDQsIDI1LCA0LCAyNTMsIDEwMywgMjUsIDQsIDI1MywgNzYsIDI1LCA0LCAyNTAsIDM2LCAyNSwgNCwgCi0gICAgMjUwLCA1MCwgMjUsIDQsIDI1MCwgNTIsIDI1LCA0LCAyNDMsIDE2MywgMjUsIDQsIDI0MywgMTY0LCAyNSwgNCwgMjUwLCAKLSAgICA1MSwgMjUsIDQsIDI0NywgNzcsIDI1LCA0LCAyNDgsIDUxLCAyNSwgNCwgMjQ4LCA0OSwgMjUsIDQsIDI0MywgMTIzLCAyNSwgCi0gICAgNCwgMjQzLCAxMjcsIDI1LCA0LCAyNDgsIDQ4LCAyNSwgNCwgMjQ4LCA1MCwgMjUsIDQsIDIzOCwgMjQ0LCAyNSwgNCwgMjQ2LCAKLSAgICAxNzMsIDI1LCA0LCAyNDcsIDIxMywgMjUsIDQsIDI0NywgNywgMjUsIDQsIDI0MSwgMTgsIDI1LCA0LCAyNDAsIDIzOCwgMjUsIAotICAgIDQsIDI0NiwgMjQ3LCAyNSwgNCwgMjQ2LCAyMjgsIDI1LCA0LCAyNDUsIDI0OCwgMjUsIDQsIDI0NiwgMTc2LCAyNSwgNCwgCi0gICAgMjQ3LCAxMjQsIDI1LCA0LCAyNDYsIDIwMCwgMjUsIDQsIDI0MiwgMjQyLCAyNSwgNCwgMjQwLCAyNDYsIDI1LCA0LCAyNDYsIAotICAgIDIxNywgMjUsIDQsIDI0NywgMjksIDI1LCA0LCAyNDMsIDQsIDI1LCA0LCAyNDYsIDE4MiwgMjUsIDQsIDI1MSwgMTA3LCAyNSwgCi0gICAgNCwgMjQ2LCAxOTgsIDI1LCA0LCAyNDUsIDY3LCAyNSwgNCwgMjQ1LCA2OSwgMjUsIDQsIDI0OCwgMTMwLCAyNSwgNCwgMjQ3LCAKLSAgICA5OSwgMjUsIDQsIDI0NSwgNzEsIDI1LCA0LCAyNDYsIDIxNiwgMjUsIDQsIDI0NywgMjE2LCAyNSwgNCwgMjQ3LCA1OCwgMjUsIAotICAgIDQsIDI0NiwgNywgMjUsIDQsIDI0MiwgOSwgMjUsIDQsIDI0NiwgMjQ4LCAyNSwgNCwgMjQ3LCAyMTUsIDI1LCA0LCAyNDYsIAotICAgIDksIDI1LCA0LCAyNTIsIDQyLCAyNSwgNCwgMjUyLCA0NywgMjUsIDQsIDI1MiwgNDQsIDI1LCA0LCAyNDYsIDI0LCAyNSwgNCwgCi0gICAgMjQ2LCAyNSwgMjUsIDQsIDI1MiwgNDMsIDI1LCA0LCAyNTIsIDQ2LCAyNSwgNCwgMjQ2LCAyNiwgMjUsIDQsIDI1MiwgMjM0LCAKLSAgICAyNSwgNCwgMjUzLCAxNzgsIDI1LCA0LCAyNTMsIDg4LCAyNSwgNCwgMjQ3LCAxMzksIDI1LCA0LCAyNDcsIDE0MCwgMjUsIDQsIAotICAgIDI1MywgMTQ3LCAyNSwgNCwgMjUzLCAxNDgsIDI1LCA0LCAyNDgsIDQyLCAyNSwgNCwgMjEzLCAyNSwgNCwgMjUzLCA4MiwgCi0gICAgMjUsIDQsIDI1MiwgMjIzLCAyNSwgNCwgMjQ4LCAxMjcsIDI1LCA0LCAyNDcsIDQ2LCAyNSwgNCwgMjUzLCAwLCAyNSwgNCwgCi0gICAgMjUzLCA1MCwgMjUsIDQsIDI0NywgNDcsIDI1LCA0LCAyNTEsIDIwMiwgMjUsIDQsIDI1MSwgMzIsIDI1LCA0LCAyNTAsIDUsIAotICAgIDI1LCAzNiwgMjMxLCA3MywgNzYsIDI1LCAyMzUsIDEzNSwgNzYsIDI1LCAyMzEsIDE4NywgMjUsIDI0NiwgMTYyLCAyNDAsIAotICAgIDEyMSwgMjUsIDIzNywgNjcsIDI1LCAyMzAsIDE0MCwgMjUsIDIzNywgNjYsIDI1LCAyMzYsIDE5MiwgMjM3LCA2NiwgMjUsIAotICAgIDIzMywgODIsIDc2LCAyNSwgMjMxLCAyNDIsIDIzMCwgMTMxLCAyNSwgMjEsIDExOCwgMjUsIDIxLCAxMTMsIDI1LCAyMSwgCi0gICAgMTY2LCAyNSwgMjEsIDE1OCwgMjUsIDIxLCAxNzMsIDI1LCAyMSwgMTgzLCAyNSwgMjEsIDE5NCwgMjUsIDIxLCAxODcsIDI1LCAKLSAgICAyMSwgMTkyLCAyNSwgNjUsIDI0NiwgMTc5LCAyNSwgNjUsIDIzNSwgNTIsIDI1LCA2NSwgMjM1LCA4MCwgMjUsIDY1LCAyMzcsIAotICAgIDIwMywgMjUsIDY1LCAyMzcsIDEwMCwgMjUsIDY1LCAyMzgsIDYyLCAyNSwgNjUsIDIzMywgMjM1LCAyNSwgNjUsIDIzNSwgCi0gICAgMTY5LCAyNSwgNjUsIDIzNSwgMTMyLCAyNSwgNjUsIDIzMywgNzUsIDI1LCA2NSwgMjUzLCA1MywgMjMxLCAxOTYsIDI1LCA0LCAKLSAgICAyMzEsIDI0NiwgMjQ3LCA5MCwgMjUsIDQsIDI0NywgMTc4LCAyNSwgNCwgMjQ0LCAxNjEsIDI1LCA0LCAyNDcsIDE3NywgMjUsIAotICAgIDQsIDIzMSwgMjQ2LCAyNDgsIDIsIDI1LCA0LCAyNDksIDEzNSwgMjUsIDQsIDI0MiwgMjI1LCAyNSwgNCwgMjQ5LCAxMzQsIAotICAgIDI1LCA0LCAyMzEsIDI0NiwgMjQ4LCA0MiwgMjUsIDQsIDI1MCwgNCwgMjUsIDQsIDI0MywgMTEyLCAyNSwgNCwgMjUwLCAzLCAKLSAgICAyNSwgNCwgMjMxLCAyNDYsIDI0NywgNDcsIDI1LCA0LCAyNDcsIDE5MSwgMjUsIDQsIDI0NSwgODcsIDI1LCA0LCAyNDcsIAotICAgIDE5MCwgMjUsIDI0MCwgMTg4LCAxNjUsIDI0MCwgOTksIDI1LCAyNDAsIDE4OCwgMTY1LCAyMzgsIDE4MiwgMjUsIDI0MCwgCi0gICAgMTg4LCAxNjUsIDIzNSwgMjA2LCAyNSwgMjQwLCAxODgsIDE2NSwgMjQwLCAxMjUsIDIzNSwgMjA2LCAyNSwgMjQwLCAxODgsIAotICAgIDE2NSwgMjM4LCAxODYsIDI1LCAyNDAsIDE4OCwgMTY1LCAyMzksIDY1LCAyNSwgMjQwLCAxODgsIDE2NSwgMjM2LCAyNywgCi0gICAgMjUsIDI0MCwgMTg4LCAxNjUsIDIzOSwgOCwgMjUsIDI0MCwgMTg4LCAxNjUsIDIyOCwgMjM5LCAyNSwgMjQwLCAxODgsIAotICAgIDE2NSwgMjQ0LCA3MiwgMTMxLCAxLCA1NywgMTMxLCAxLCA3MiwgMTMxLCAxLCA3NCwgMTMxLCAxLCA3MywgMTMxLCAxLCA2NiwgCi0gICAgMTMxLCAxLCAxOTYsIDEzMSwgMSwgMjUyLCAyMDUsIDEzMSwgMSwgMTc3LCAxMzEsIDEsIDI1MywgMTAzLCAxMzEsIDEsIAotICAgIDI1MywgMzksIDEzMSwgMSwgMjUzLCA3NiwgMTMxLCAxLCAyNTMsIDQwLCAxMzEsIDEsIDI1NCwgNjMsIDEzMSwgMSwgMTU0LCAKLSAgICAxMzEsIDEsIDI1MiwgMjUyLCAxMzEsIDEsIDI1MywgNDEsIDEzMSwgMSwgMjUzLCAyMSwgMTMxLCAxLCAyNTMsIDU5LCAxMzEsIAotICAgIDEsIDI1MywgMjI3LCAxMzEsIDEsIDI1MiwgMjAwLCAxMzEsIDEsIDI1MywgODAsIDEzMSwgMSwgMjUzLCA0MiwgMTMxLCAxLCAKLSAgICAyNTMsIDQ5LCAxMzEsIDEsIDI1MywgMjIsIDEzMSwgMSwgMjU0LCA5NiwgMTMxLCAxLCAxOTgsIDEzMSwgMSwgMjUzLCAxMywgCi0gICAgMTMxLCAxLCAyNTIsIDIzOSwgMTMxLCAxLCAyNTMsIDE0LCAxMzEsIDEsIDI1MiwgMjI5LCAxMzEsIDEsIDI1MiwgMjAxLCAKLSAgICAxMzEsIDEsIDI0OCwgNjMsIDEzMSwgMSwgMjUxLCAzOCwgMTMxLCAxLCAyNTIsIDI0NywgMTMxLCAxLCAyNTIsIDI0OCwgCi0gICAgMTMxLCAxLCAyNTMsIDgsIDEzMSwgMSwgMjUyLCAyMjcsIDEzMSwgMSwgMjUzLCAyNTEsIDEzMSwgMSwgMjUxLCAxNDUsIAotICAgIDEzMSwgMSwgMjUxLCAxNDYsIDEzMSwgMSwgMjUxLCAxNDcsIDEzMSwgMSwgMjQ4LCAxNDQsIDEzMSwgMSwgMjQ4LCAxNDUsIAotICAgIDEzMSwgMSwgMjUxLCAxNTIsIDEzMSwgMSwgMjUyLCAyMDQsIDEzMSwgMSwgMTkzLCAxMzEsIDEsIDI1MywgNTIsIDEzMSwgMSwgCi0gICAgMjUzLCAyNCwgMTMxLCAxLCAyNTMsIDI1LCAxMzEsIDEsIDI1MywgMjYsIDEzMSwgMSwgMjU0LCA5LCAxMzEsIDEsIDI1MiwgCi0gICAgMjAzLCAxMzEsIDEsIDI1MiwgMjAyLCAxMzEsIDEsIDI1MywgMjAsIDEzMSwgMSwgMjUzLCA5LCAxMzEsIDEsIDI1MywgMTIsIAotICAgIDEzMSwgMSwgMjUzLCA0NCwgMTMxLCAxLCAyNTMsIDU3LCAxMzEsIDEsIDI1MywgMzEsIDEzMSwgMSwgMjU0LCA0OCwgMTMxLCAKLSAgICAxLCAyNDgsIDMwLCAxMzEsIDEsIDI0OCwgMTc0LCAxMzEsIDEsIDI0OCwgMTc1LCAxMzEsIDEsIDI0OCwgMTc2LCAxMzEsIDEsIAotICAgIDI0OCwgMTc3LCAxMzEsIDEsIDI0OCwgMTc4LCAxMzEsIDEsIDI1MiwgMjUsIDEzMSwgMSwgMjQ2LCAyMTYsIDEzMSwgMSwgCi0gICAgMjQ2LCAyNDgsIDEzMSwgMSwgMjQ3LCA1OCwgMTMxLCAxLCAyNDcsIDIxNSwgMTMxLCAxLCAyNDcsIDIxNiwgMTMxLCAxLCAKLSAgICAyNTIsIDMwLCAxMzEsIDEsIDI1MiwgMjA4LCAxMzEsIDEsIDI1MiwgMjUwLCAxMzEsIDEsIDI1MywgMjcsIDEzMSwgMSwgCi0gICAgMjUzLCAxMCwgMTMxLCAxLCAyNTMsIDEwOSwgMTMxLCAxLCAyNTQsIDE3MSwgMTMxLCAxLCAxOTEsIDEzMSwgMSwgMjUzLCAKLSAgICA5NiwgMTMxLCAxLCAyNTMsIDI4LCAxMzEsIDEsIDI1MiwgMjUxLCAxMzEsIDEsIDI1MiwgMjMzLCAxMzEsIDEsIDI1NCwgCi0gICAgMTc2LCAxNiwgMTcsIDcyLCAxNiwgMTcsIDI0OCwgMjIxLCAxNiwgMTcsIDc0LCAxNiwgMTcsIDI1MiwgMjE2LCAxNiwgMTcsIAotICAgIDczLCAxNiwgMTcsIDI1MiwgMjIwLCAxNiwgMTcsIDIzNywgOTMsIDI1MiwgMjIwLCAxNiwgMTcsIDYwLCAyNTIsIDIzMSwgCi0gICAgMTYsIDE3LCA2MCwgNzQsIDE2LCAxNywgNTcsIDE2LCAxNywgMjUyLCAyMTIsIDE2LCAxNywgMjUyLCAyNTAsIDE2LCAxNywgCi0gICAgMTI3LCAyNTIsIDI1MCwgMTYsIDE3LCAyNTMsIDI3LCAxNiwgMTcsIDEyNywgMjUzLCAyNywgMTYsIDE3LCAyNDgsIDE5NCwgCi0gICAgMTYsIDE3LCAxMjcsIDI0OCwgMTk0LCAxNiwgMTcsIDI1MywgMTAsIDE2LCAxNywgMTI3LCAyNTMsIDEwLCAxNiwgMTcsIAotICAgIDI0NywgMTE2LCAxNiwgMTcsIDEyNywgMjQ3LCAxMTYsIDE2LCAxNywgMjM1LCAzOSwgMjQ3LCAxMTYsIDE2LCAxNywgMjUyLCAKLSAgICAyMDgsIDE2LCAxNywgMTI3LCAyNTIsIDIwOCwgMTYsIDE3LCAyNDcsIDExNSwgMTYsIDE3LCAxMjcsIDI0NywgMTE1LCAxNiwgCi0gICAgMTcsIDIzNSwgMzksIDI0NywgMTE1LCAxNiwgMTcsIDI1MiwgMjIxLCAxNiwgMTcsIDIzNywgOTMsIDI1NCwgMTk1LCAxNiwgCi0gICAgMTcsIDIzNSwgMzEsIDI0MCwgMTIxLCAxNiwgMTcsIDM1LCAxNTUsIDE2LCAxNywgMzUsIDIzNywgMzYsIDE2LCAxNywgMzUsIAotICAgIDIzNywgNTksIDEzMiwgMjQwLCAxNDcsIDE2LCAxNywgMzUsIDI1MiwgMjI4LCAxMzIsIDI0MCwgMTQ3LCAxNiwgMTcsIDM1LCAKLSAgICA0MSwgMTMyLCAyNDAsIDE0NywgMTYsIDE3LCAzNSwgMjQwLCAxNDcsIDE2LCAxNywgMzUsIDQ3LCAxNTUsIDE2LCAxNywgMzUsIAotICAgIDQ3LCAyNDAsIDEyNSwgNjEsIDIzMywgMjQzLCAxNiwgMTcsIDM1LCAyMzcsIDQ0LCAyNDYsIDE2NCwgMTYsIDE3LCAzNSwgCi0gICAgMjQwLCAxMjUsIDE2OSwgODIsIDE2LCAxNywgMzUsIDI0MCwgMTgwLCAxNiwgMTcsIDM1LCAxMDMsIDI0MCwgMTQ5LCAxNiwgCi0gICAgMTcsIDI1MiwgMjMyLCAxNiwgMTcsIDI1MywgNzksIDE2LCAxNywgMjUzLCAxMDYsIDE2LCAxNywgMjUzLCA1LCAxNiwgMTcsIAotICAgIDI1MywgMCwgMTYsIDE3LCAyNDUsIDU4LCAxNiwgMTcsIDI1MiwgMjIzLCAxNiwgMTcsIDI0OCwgMTMyLCAxNiwgMTcsIDI1MywgCi0gICAgNTAsIDE2LCAxNywgMjQ3LCAxODksIDE2LCAxNywgMjM3LCA5MywgMjQ3LCAxODksIDE2LCAxNywgNjAsIDI0NywgMTQ5LCAKLSAgICAxNiwgMTcsIDYwLCAyNTMsIDQxLCAxNiwgMTcsIDIxMywgMTYsIDE3LCAyNDgsIDEyNywgMTYsIDE3LCAyNDcsIDE5MCwgMTYsIAotICAgIDE3LCAxMjcsIDI0NywgMTkwLCAxNiwgMTcsIDI0NywgMTkxLCAxNiwgMTcsIDEyNywgMjQ3LCAxOTEsIDE2LCAxNywgMjQxLCAKLSAgICAyMTYsIDE2LCAxNywgMTI3LCAyNDEsIDIxNiwgMTYsIDE3LCAyNDgsIDEzNywgMTYsIDE3LCAxMjcsIDI0OCwgMTM3LCAxNiwgCi0gICAgMTcsIDI0MSwgMjE3LCAxNiwgMTcsIDEyNywgMjQxLCAyMTcsIDE2LCAxNywgMjQ3LCA0NywgMTYsIDE3LCAxMjcsIDI0NywgCi0gICAgNDcsIDE2LCAxNywgMjQxLCA2NSwgMTYsIDE3LCAxMjcsIDI0MSwgNjUsIDE2LCAxNywgMjM3LCA5MywgMjQxLCA2NSwgMTYsIAotICAgIDE3LCAyNTQsIDE4NywgMTYsIDE3LCAxMjcsIDI1NCwgMTg3LCAxNiwgMTcsIDYwLCAyMTIsIDE2LCAxNywgMjUzLCA5LCAxNiwgCi0gICAgMTcsIDI0NSwgMjM1LCAxNiwgMTcsIDI1MywgNDQsIDE2LCAxNywgMjUyLCAyMCwgMTYsIDE3LCA5NiwgMTYsIDE3LCAyNDcsIAotICAgIDEwOSwgMTYsIDE3LCAyMzcsIDkzLCAyNDcsIDEwOSwgMTYsIDE3LCA2MCwgMjQ3LCAzMCwgMTYsIDE3LCA2MCwgMjUzLCAxMiwgCi0gICAgMTYsIDE3LCAyNTIsIDIwMiwgMTYsIDE3LCAyNDcsIDIwNywgMTYsIDE3LCAyNDcsIDU5LCAxNiwgMTcsIDEyNywgMjQ3LCAKLSAgICA1OSwgMTYsIDE3LCAyNDgsIDE4NiwgMTYsIDE3LCAxMjcsIDI0OCwgMTg2LCAxNiwgMTcsIDI0MiwgMTQsIDE2LCAxNywgCi0gICAgMTI3LCAyNDIsIDE0LCAxNiwgMTcsIDExMywgMTYsIDE3LCAxMjcsIDExMywgMTYsIDE3LCAyNDIsIDE1LCAxNiwgMTcsIAotICAgIDEyNywgMjQyLCAxNSwgMTYsIDE3LCAyNDcsIDIxOCwgMTYsIDE3LCAxMjcsIDI0NywgMjE4LCAxNiwgMTcsIDI0MSwgODMsIAotICAgIDE2LCAxNywgMTI3LCAyNDEsIDgzLCAxNiwgMTcsIDIzNSwgMzksIDI0MSwgODMsIDE2LCAxNywgMjU0LCAxODMsIDE2LCAxNywgCi0gICAgMjQ4LCAxODEsIDE2LCAxNywgMjQ4LCAxODIsIDE2LCAxNywgMjQ3LCAyMTcsIDE2LCAxNywgMjQ2LCAxOTEsIDE2LCAxNywgCi0gICAgMjUzLCA2LCAxNiwgMTcsIDI0NCwgNDQsIDE2LCAxNywgMjUzLCA3LCAxNiwgMTcsIDI1MCwgMTY4LCAxNiwgMTcsIDI1MywgCi0gICAgMzMsIDE2LCAxNywgMjQ3LCAxNjIsIDE2LCAxNywgMjM3LCA5MywgMjQ3LCAxNjIsIDE2LCAxNywgMTc3LCAxNiwgMTcsIAotICAgIDI0OCwgNzYsIDE2LCAxNywgMjQ3LCAxNjQsIDE2LCAxNywgMTI3LCAyNDcsIDE2NCwgMTYsIDE3LCAyNDcsIDE2NSwgMTYsIAotICAgIDE3LCAxMjcsIDI0NywgMTY1LCAxNiwgMTcsIDI0MSwgMTc2LCAxNiwgMTcsIDEyNywgMjQxLCAxNzYsIDE2LCAxNywgMjQ4LCAKLSAgICA4OCwgMTYsIDE3LCAxMjcsIDI0OCwgODgsIDE2LCAxNywgMjQxLCAxNzcsIDE2LCAxNywgMTI3LCAyNDEsIDE3NywgMTYsIAotICAgIDE3LCAyNDcsIDE2MywgMTYsIDE3LCAxMjcsIDI0NywgMTYzLCAxNiwgMTcsIDI0MSwgMywgMTYsIDE3LCAxMjcsIDI0MSwgMywgCi0gICAgMTYsIDE3LCAyMzUsIDM5LCAyNDEsIDMsIDE2LCAxNywgMjU0LCAxODYsIDE2LCAxNywgMjUzLCAyNDMsIDE2LCAxNywgMjI4LCAKLSAgICAxOTQsIDI0NywgMTU2LCAxNiwgMTcsIDIyOCwgMTk0LCAyNTAsIDE2NywgMTYsIDE3LCAyMjgsIDE5NCwgMjUwLCAxNzcsIAotICAgIDE2LCAxNywgMjI4LCAxOTQsIDI1MCwgMTU0LCAxNiwgMTcsIDI1MywgMTQxLCAxNiwgMTcsIDI0MiwgMjI5LCAxNiwgMTcsIAotICAgIDI1MywgMTQzLCAxNiwgMTcsIDI0OSwgMTU5LCAxNiwgMTcsIDI1MywgNjYsIDE2LCAxNywgMjQ3LCAxMjYsIDE2LCAxNywgCi0gICAgMjM3LCA5MywgMjQ3LCAxMjYsIDE2LCAxNywgMjUyLCAyMTUsIDE2LCAxNywgMjQ4LCAzLCAxNiwgMTcsIDI0OCwgMTMsIDE2LCAKLSAgICAxNywgMTI3LCAyNDgsIDEzLCAxNiwgMTcsIDI0NywgMTI5LCAxNiwgMTcsIDEyNywgMjQ3LCAxMjksIDE2LCAxNywgMjQxLCAKLSAgICAxMTMsIDE2LCAxNywgMTI3LCAyNDEsIDExMywgMTYsIDE3LCAyNDgsIDE0LCAxNiwgMTcsIDEyNywgMjQ4LCAxNCwgMTYsIAotICAgIDE3LCAyNDEsIDExNCwgMTYsIDE3LCAxMjcsIDI0MSwgMTE0LCAxNiwgMTcsIDI0NywgMTI4LCAxNiwgMTcsIDEyNywgMjQ3LCAKLSAgICAxMjgsIDE2LCAxNywgMjQxLCAzNSwgMTYsIDE3LCAxMjcsIDI0MSwgMzUsIDE2LCAxNywgMjM1LCAzOSwgMjQxLCAzNSwgMTYsIAotICAgIDE3LCAyNTQsIDE5NCwgMTYsIDE3LCAyMzcsIDg4LCAyNTMsIDEzNSwgMTYsIDE3LCAyNTMsIDEzLCAxNiwgMTcsIDI0NCwgCi0gICAgMTE0LCAxNiwgMTcsIDI1MiwgMjM5LCAxNiwgMTcsIDI1MSwgMTMsIDE2LCAxNywgMjUzLCAxNCwgMTYsIDE3LCAyNDcsIAotICAgIDE3NSwgMTYsIDE3LCAyMzcsIDkzLCAyNDcsIDE3NSwgMTYsIDE3LCAxOTgsIDE2LCAxNywgMjQ4LCA5OCwgMTYsIDE3LCAKLSAgICAyNDcsIDE3NywgMTYsIDE3LCAxMjcsIDI0NywgMTc3LCAxNiwgMTcsIDI0NywgMTc4LCAxNiwgMTcsIDEyNywgMjQ3LCAxNzgsIAotICAgIDE2LCAxNywgMjQxLCAxOTYsIDE2LCAxNywgMTI3LCAyNDEsIDE5NiwgMTYsIDE3LCAyNDgsIDEwNSwgMTYsIDE3LCAxMjcsIAotICAgIDI0OCwgMTA1LCAxNiwgMTcsIDI0MSwgMTk3LCAxNiwgMTcsIDEyNywgMjQxLCAxOTcsIDE2LCAxNywgMjQ3LCA5MCwgMTYsIAotICAgIDE3LCAxMjcsIDI0NywgOTAsIDE2LCAxNywgMjQxLCA1NCwgMTYsIDE3LCAxMjcsIDI0MSwgNTQsIDE2LCAxNywgMjM1LCAzOSwgCi0gICAgMjQxLCA1NCwgMTYsIDE3LCAxODUsIDE2LCAxNywgMTI3LCAxODUsIDE2LCAxNywgMjU0LCAxMDIsIDE2LCAxNywgMjMwLCAKLSAgICAxNzUsIDE4NSwgMTYsIDE3LCAyMzcsIDg4LCAxODUsIDE2LCAxNywgMjUyLCAyNDcsIDE2LCAxNywgMjQ0LCAxNjIsIDE2LCAKLSAgICAxNywgMjUyLCAyNDgsIDE2LCAxNywgMjQ4LCAxMTIsIDE2LCAxNywgMjUzLCA4LCAxNiwgMTcsIDI0NywgMTgzLCAxNiwgMTcsIAotICAgIDIzNywgOTMsIDI0NywgMTgzLCAxNiwgMTcsIDI1MiwgMjAxLCAxNiwgMTcsIDI0NywgMTc5LCAxNiwgMTcsIDI0OCwgMTE4LCAKLSAgICAxNiwgMTcsIDEyNywgMjQ4LCAxMTgsIDE2LCAxNywgMjQ3LCA5NSwgMTYsIDE3LCAxMjcsIDI0NywgOTUsIDE2LCAxNywgCi0gICAgMjQxLCA1NiwgMTYsIDE3LCAxMjcsIDI0MSwgNTYsIDE2LCAxNywgMjM1LCAzOSwgMjQxLCA1NiwgMTYsIDE3LCAxOTksIDE2LCAKLSAgICAxNywgNjAsIDI1MywgNjksIDE2LCAxNywgMjU0LCAxMTUsIDE2LCAxNywgMjUzLCA4MCwgMTYsIDE3LCAyNDQsIDgzLCAxNiwgCi0gICAgMTcsIDI1MywgNDIsIDE2LCAxNywgMjUwLCAyMjAsIDE2LCAxNywgMjUzLCA0OSwgMTYsIDE3LCAyNDcsIDg3LCAxNiwgMTcsIAotICAgIDIzNywgOTMsIDI0NywgODcsIDE2LCAxNywgMjUyLCAyMDAsIDE2LCAxNywgMjQ3LCAxNjYsIDE2LCAxNywgMjQ4LCA5NCwgCi0gICAgMTYsIDE3LCAxMjcsIDI0OCwgOTQsIDE2LCAxNywgMjQ4LCA5NSwgMTYsIDE3LCAxMjcsIDI0OCwgOTUsIDE2LCAxNywgMjQxLCAKLSAgICAxODcsIDE2LCAxNywgMTI3LCAyNDEsIDE4NywgMTYsIDE3LCAyNDgsIDk2LCAxNiwgMTcsIDEyNywgMjQ4LCA5NiwgMTYsIAotICAgIDE3LCAyNDEsIDE4OCwgMTYsIDE3LCAxMjcsIDI0MSwgMTg4LCAxNiwgMTcsIDI0NywgMTcxLCAxNiwgMTcsIDEyNywgMjQ3LCAKLSAgICAxNzEsIDE2LCAxNywgMjQxLCAxODYsIDE2LCAxNywgMTI3LCAyNDEsIDE4NiwgMTYsIDE3LCAxNDksIDE2LCAxNywgMTI3LCAKLSAgICAxNDksIDE2LCAxNywgMTI0LCAxNDksIDE2LCAxNywgMjUzLCA1MiwgMTYsIDE3LCAyNDUsIDE0NiwgMTYsIDE3LCAyNTMsIAotICAgIDI0LCAxNiwgMTcsIDI1MSwgMjIzLCAxNiwgMTcsIDI1MywgMjUsIDE2LCAxNywgMjQ3LCAxMDQsIDE2LCAxNywgMjM3LCA5MywgCi0gICAgMjQ3LCAxMDQsIDE2LCAxNywgMjUyLCAyMDQsIDE2LCAxNywgMjQ4LCAxNTMsIDE2LCAxNywgMjQ4LCAxNjcsIDE2LCAxNywgCi0gICAgMTI3LCAyNDgsIDE2NywgMTYsIDE3LCAyNDgsIDE2OCwgMTYsIDE3LCAxMjcsIDI0OCwgMTY4LCAxNiwgMTcsIDI0MSwgMjUzLCAKLSAgICAxNiwgMTcsIDEyNywgMjQxLCAyNTMsIDE2LCAxNywgMjQ4LCAxNjksIDE2LCAxNywgMTI3LCAyNDgsIDE2OSwgMTYsIDE3LCAKLSAgICAyNDEsIDI1NCwgMTYsIDE3LCAxMjcsIDI0MSwgMjU0LCAxNiwgMTcsIDI0NywgMjA2LCAxNiwgMTcsIDEyNywgMjQ3LCAyMDYsIAotICAgIDE2LCAxNywgMjQxLCA3NiwgMTYsIDE3LCAxMjcsIDI0MSwgNzYsIDE2LCAxNywgMjM1LCAzOSwgMjQxLCA3NiwgMTYsIDE3LCAKLSAgICAxOTMsIDE2LCAxNywgMjMwLCAxNzUsIDE5MywgMTYsIDE3LCAyNTQsIDEwLCAxNiwgMTcsIDIzMSwgMjA0LCAxOTMsIDE2LCAKLSAgICAxNywgMjMxLCAxMDQsIDI1NCwgMTQ3LCAxNiwgMTcsIDIzNSwgMzksIDI1MSwgMjI4LCAxNiwgMTcsIDIzNSwgMzksIDI1MSwgCi0gICAgMjA4LCAxNiwgMTcsIDIzNSwgMzksIDI0NSwgMTk1LCAxNiwgMTcsIDIzNSwgMzksIDI0NSwgMjIxLCAxNiwgMTcsIDIzNSwgCi0gICAgMzksIDI0NSwgMTkwLCAxNiwgMTcsIDIzNSwgMzksIDI0NSwgMTU0LCAxNiwgMTcsIDI0NiwgMTg2LCAxNiwgMTcsIDI0NywgCi0gICAgNTEsIDE2LCAxNywgMjQ1LCAxNjUsIDE2LCAxNywgMjQ2LCAyNDUsIDE2LCAxNywgMjQxLCAyMzksIDE2LCAxNywgMjQ2LCAKLSAgICAxNjUsIDE2LCAxNywgMjQxLCAyMzQsIDE2LCAxNywgMjQxLCAxNiwgMTYsIDE3LCAxMjcsIDI0MSwgMTYsIDE2LCAxNywgCi0gICAgMjQxLCAyNDMsIDE2LCAxNywgMTI3LCAyNDEsIDI0MywgMTYsIDE3LCAyMzgsIDU2LCAxNiwgMTcsIDEyNywgMjM4LCA1NiwgCi0gICAgMTYsIDE3LCAyNDEsIDI0NCwgMTYsIDE3LCAxMjcsIDI0MSwgMjQ0LCAxNiwgMTcsIDIzOCwgNTcsIDE2LCAxNywgMTI3LCAKLSAgICAyMzgsIDU3LCAxNiwgMTcsIDI0MSwgNzIsIDE2LCAxNywgMTI3LCAyNDEsIDcyLCAxNiwgMTcsIDIzOCwgNTUsIDE2LCAxNywgCi0gICAgMTI3LCAyMzgsIDU1LCAxNiwgMTcsIDI1MywgMTYwLCAxNiwgMTcsIDI1MywgOTYsIDE2LCAxNywgMjQ2LCA3NCwgMTYsIDE3LCAKLSAgICAyNTMsIDI4LCAxNiwgMTcsIDI1MiwgMTUwLCAxNiwgMTcsIDI1MiwgMjUxLCAxNiwgMTcsIDI0NywgMjM0LCAxNiwgMTcsIAotICAgIDIzNywgOTMsIDI0NywgMjM0LCAxNiwgMTcsIDE5MSwgMTYsIDE3LCAyNDcsIDExNywgMTYsIDE3LCAyNDgsIDIwNCwgMTYsIAotICAgIDE3LCAxMjcsIDI0OCwgMjA0LCAxNiwgMTcsIDI0OCwgMjA1LCAxNiwgMTcsIDEyNywgMjQ4LCAyMDUsIDE2LCAxNywgMjQyLCAKLSAgICAzNCwgMTYsIDE3LCAxMjcsIDI0MiwgMzQsIDE2LCAxNywgMjQ4LCAyMDYsIDE2LCAxNywgMTI3LCAyNDgsIDIwNiwgMTYsIAotICAgIDE3LCAyNDIsIDM1LCAxNiwgMTcsIDEyNywgMjQyLCAzNSwgMTYsIDE3LCAyNDcsIDIzNSwgMTYsIDE3LCAxMjcsIDI0NywgCi0gICAgMjM1LCAxNiwgMTcsIDI0MSwgODgsIDE2LCAxNywgMTI3LCAyNDEsIDg4LCAxNiwgMTcsIDIzNSwgMzksIDI0MSwgODgsIDE2LCAKLSAgICAxNywgMjU0LCAxOTAsIDE2LCAxNywgMjMwLCAyMzEsIDI1NCwgMTkwLCAxNiwgMTcsIDEyNywgMjU0LCAxOTAsIDE2LCAxNywgCi0gICAgMjM3LCA4OCwgMjUzLCAyOCwgMTYsIDE3LCAyNTMsIDM2LCAxNiwgMTcsIDIzOSwgMjEyLCAyNTMsIDM2LCAxNiwgMTcsIAotICAgIDEyNywgMjUzLCA4MCwgMTYsIDE3LCAyNDUsIDExMSwgMTYsIDE3LCAyNTMsIDM3LCAxNiwgMTcsIDI1MSwgMTgyLCAxNiwgCi0gICAgMTcsIDI1MiwgMjQ2LCAxNiwgMTcsIDI0OCwgMTQ5LCAxNiwgMTcsIDEyNywgMjUzLCA0OSwgMTYsIDE3LCAyMDgsIDE2LCAKLSAgICAxNywgMjQ3LCAxMDAsIDE2LCAxNywgMTI3LCAyNTIsIDIwMCwgMTYsIDE3LCAyNDEsIDIyOCwgMTYsIDE3LCAxMjcsIDI0MSwgCi0gICAgMjI4LCAxNiwgMTcsIDE0NiwgMTYsIDE3LCAxMjcsIDE0NiwgMTYsIDE3LCAxMjQsIDE0NiwgMTYsIDE3LCAyNTMsIDE0NywgCi0gICAgMTYsIDE3LCAyNDMsIDEwNSwgMTYsIDE3LCAyNTMsIDg4LCAxNiwgMTcsIDI0OSwgMjQ3LCAxNiwgMTcsIDI1MywgMTQ4LCAKLSAgICAxNiwgMTcsIDI0OCwgMzksIDE2LCAxNywgMjUyLCAyMzQsIDE2LCAxNywgMjQ3LCAxMzksIDE2LCAxNywgMjQxLCAxMzUsIAotICAgIDE2LCAxNywgMTI3LCAyNDEsIDEzNSwgMTYsIDE3LCAyNTQsIDE5MSwgMTYsIDE3LCAyNDYsIDI0NywgMTYsIDE3LCAyMzcsIAotICAgIDIwNywgMjQ2LCAyNDcsIDE2LCAxNywgMjQ3LCA3LCAxNiwgMTcsIDIzNywgMjA3LCAyNDcsIDcsIDE2LCAxNywgMjQxLCA3OSwgCi0gICAgMTYsIDE3LCAyMzcsIDIwNywgMjQxLCA3OSwgMTYsIDE3LCAyNDYsIDIyOCwgMTYsIDE3LCAyNDEsIDgwLCAxNiwgMTcsIAotICAgIDI0NiwgMTczLCAxNiwgMTcsIDI0MSwgMTgsIDE2LCAxNywgMjM4LCA3MywgMTYsIDE3LCAxMjcsIDIzOCwgNzMsIDE2LCAxNywgCi0gICAgMjUzLCAxMzUsIDE2LCAxNywgMjQ2LCAxMywgMTYsIDE3LCAyNDYsIDE0LCAxNiwgMTcsIDI0MSwgODIsIDE2LCAxNywgMjQwLCAKLSAgICAxNTAsIDE2LCAxNywgMjUyLCAzMiwgMTYsIDE3LCAyNTIsIDM5LCAxNiwgMTcsIDI1MiwgNDAsIDE2LCAxNywgMjUyLCA0MSwgCi0gICAgMTYsIDE3LCAyNTIsIDM4LCAxNiwgMTcsIDIzNSwgNjQsIDI1MiwgMjUyLCAxNiwgMTcsIDIzNSwgNjQsIDI1MywgNDEsIDE2LCAKLSAgICAxNywgMjM1LCA2NCwgMjUwLCA3NSwgMTYsIDE3LCAyMzUsIDY0LCAyNTMsIDIxLCAxNiwgMTcsIDIzNSwgNjQsIDI0OCwgNjUsIAotICAgIDE2LCAxNywgMjM1LCA2NCwgMTU0LCAxNiwgMTcsIDIzNSwgNjQsIDI0NywgMTQsIDE2LCAxNywgMjM1LCA2NCwgMjEyLCAxNiwgCi0gICAgMTcsIDIzNiwgMTcxLCAyMTIsIDE2LCAxNywgMjU0LCA2NiwgMTYsIDE3LCAyNDUsIDkwLCAxNiwgMTcsIDI1MywgMTMxLCAKLSAgICAxNiwgMTcsIDI0OCwgMTQxLCAxNiwgMTcsIDI1MywgMTU5LCAxNiwgMTcsIDI1MSwgMTQyLCAxNiwgMTcsIDI1MywgMzUsIAotICAgIDE2LCAxNywgMjQ3LCAxOTIsIDE2LCAxNywgMjU0LCAxOTYsIDE2LCAxNywgMjQyLCA1LCAxNiwgMTcsIDI0MiwgNiwgMTYsIAotICAgIDE3LCAyNDIsIDcsIDE2LCAxNywgMjQyLCA0LCAxNiwgMTcsIDEyNywgMjUzLCAzNiwgMTYsIDE3LCAxMjcsIDI1MywgMzcsIAotICAgIDE2LCAxNywgMTI3LCAyNTIsIDI0NiwgMTYsIDE3LCAxMjcsIDIwOCwgMTYsIDE3LCAyMzksIDEzNCwgMTYsIDE3LCAyNDcsIAotICAgIDE4MiwgMTYsIDE3LCAyNDQsIDIxNiwgMTYsIDE3LCAyNDcsIDkzLCAxNiwgMTcsIDI0NCwgMjE5LCAxNiwgMTcsIDI0NiwgCi0gICAgMTY5LCAxNiwgMTcsIDI0NCwgMjAyLCAxNiwgMTcsIDI1MywgNjksIDE2LCAxNywgMjUxLCA2NywgMTYsIDE3LCAyMzcsIDg4LCAKLSAgICAyNDYsIDE4NiwgMTYsIDE3LCAyMzcsIDg4LCAyNDcsIDUxLCAxNiwgMTcsIDIzNywgODgsIDI0NiwgMjQ1LCAxNiwgMTcsIAotICAgIDIzNywgODgsIDI0NiwgMTY1LCAxNiwgMTcsIDIzMCwgMTUwLCAyNDYsIDI0NywgMTYsIDE3LCAyMzAsIDE1MCwgMjQ3LCA3LCAKLSAgICAxNiwgMTcsIDIzMCwgMTUwLCAyNDYsIDIyOCwgMTYsIDE3LCAyMzAsIDE1MCwgMjQ2LCAxNzMsIDE2LCAxNywgMjMwLCAxNTAsIAotICAgIDI1MywgMTM1LCAxNiwgMTcsIDI0OCwgOTAsIDE2LCAxNywgMjQ0LCA5OCwgMTYsIDE3LCAyNDgsIDkxLCAxNiwgMTcsIDI0NCwgCi0gICAgOTksIDE2LCAxNywgMjQ3LCAxNywgMTYsIDE3LCAyNDQsIDk2LCAxNiwgMTcsIDI1NCwgOTMsIDE2LCAxNywgMjM1LCA2NSwgCi0gICAgMjQ2LCAyNDcsIDE2LCAxNywgMjM1LCA2NSwgMjQ3LCA3LCAxNiwgMTcsIDIzNSwgNjUsIDI0MSwgNzksIDE2LCAxNywgMjM1LCAKLSAgICA2NSwgMjQ2LCAyMjgsIDE2LCAxNywgMjM1LCA2NSwgMjQxLCA4MCwgMTYsIDE3LCAyMzUsIDY1LCAyNDYsIDE3MywgMTYsIAotICAgIDE3LCAyMzUsIDY1LCAyNDEsIDE4LCAxNiwgMTcsIDIzNSwgNjUsIDI1MywgMTM1LCAxNiwgMTcsIDIzNSwgMjQzLCAyNTQsIAotICAgIDE4NSwgMTYsIDE3LCAyMzEsIDIwNCwgNzIsIDE2LCAxNywgMjMxLCAyMDQsIDc0LCAxNiwgMTcsIDIzMSwgMjA0LCA3MywgCi0gICAgMTYsIDE3LCAyMzEsIDIwNCwgNTcsIDE2LCAxNywgMjMxLCAyMDQsIDI1MiwgMjUwLCAxNiwgMTcsIDIzMSwgMjA0LCAyNTMsIAotICAgIDI3LCAxNiwgMTcsIDIzMSwgMjA0LCAyNTMsIDEwLCAxNiwgMTcsIDIzMSwgMjA0LCAyNTIsIDIwOCwgMTYsIDE3LCAyMzEsIAotICAgIDIwNCwgMjUyLCAyNDcsIDE2LCAxNywgMjMxLCAyMDQsIDI1MiwgMjQ4LCAxNiwgMTcsIDIzMSwgMjA0LCAyNTMsIDgsIDE2LCAKLSAgICAxNywgMjMxLCAyMDQsIDI1MiwgMjAxLCAxNiwgMTcsIDIzMSwgMjA0LCAyNTMsIDYsIDE2LCAxNywgMjMxLCAyMDQsIDI1MywgCi0gICAgNywgMTYsIDE3LCAyMzEsIDIwNCwgMjUzLCAzMywgMTYsIDE3LCAyMzEsIDIwNCwgMTc3LCAxNiwgMTcsIDIzNywgODgsIAotICAgIDI1MiwgMjUyLCAxNiwgMTcsIDIzNywgODgsIDI1MywgNDEsIDE2LCAxNywgMjM3LCA4OCwgMjUzLCAyMSwgMTYsIDE3LCAKLSAgICAyMzcsIDg4LCAxNTQsIDE2LCAxNywgNjAsIDI1MCwgMjksIDE2LCAxNywgNjAsIDI0OCwgNTIsIDE2LCAxNywgNjAsIDI0NywgCi0gICAgMTMsIDE2LCAxNywgNjAsIDI0MywgMTQzLCAxNiwgMTcsIDYwLCAyNTAsIDI4LCAxNiwgMTcsIDYwLCAyNDYsIDIwMiwgMTYsIAotICAgIDE3LCA2MCwgMjUzLCAzLCAxNiwgMTcsIDYwLCAyNTIsIDI0NiwgMTYsIDE3LCA2MCwgMjUzLCAzNiwgMTYsIDE3LCA2MCwgCi0gICAgMjQ3LCAxOTcsIDE2LCAxNywgNjAsIDI1MywgMzcsIDE2LCAxNywgNjAsIDIwOCwgMTYsIDE3LCA2MCwgMjUzLCAxMDksIDE2LCAKLSAgICAxNywgNjAsIDI1MywgMTAsIDE2LCAxNywgNjAsIDI1MiwgMjUwLCAxNiwgMTcsIDYwLCAyNDcsIDIyNiwgMTYsIDE3LCA2MCwgCi0gICAgMjUzLCAyNywgMTYsIDE3LCA2MCwgMjUyLCAyMDgsIDE2LCAxNywgNjAsIDI1MCwgMTAxLCAxNiwgMTcsIDYwLCAyNTAsIAotICAgIDEwMCwgMTYsIDE3LCA2MCwgMjQ3LCAxNTEsIDE2LCAxNywgNjAsIDI0MywgMjQxLCAxNiwgMTcsIDYwLCAyNTAsIDk5LCAxNiwgCi0gICAgMTcsIDYwLCAyNTAsIDk4LCAxNiwgMTcsIDYwLCAyNDcsIDIxMywgMTYsIDE3LCA2MCwgMjQ2LCAyMjgsIDE2LCAxNywgNjAsIAotICAgIDI0NiwgMjQ3LCAxNiwgMTcsIDYwLCAyNDAsIDIzOCwgMTYsIDE3LCA2MCwgMjQ3LCA3LCAxNiwgMTcsIDYwLCAyNDYsIDE3MywgCi0gICAgMTYsIDE3LCA2MCwgMjUyLCAzMywgMTYsIDE3LCA2MCwgMjQ3LCAyMTcsIDE2LCAxNywgNjAsIDI0OCwgMTgxLCAxNiwgMTcsIAotICAgIDYwLCAyNDYsIDExLCAxNiwgMTcsIDYwLCAyNDgsIDE4MiwgMTYsIDE3LCA2MCwgMjQ2LCAxOTEsIDE2LCAxNywgNjAsIDI1MywgCi0gICAgODIsIDE2LCAxNywgNjAsIDI1MywgNTAsIDE2LCAxNywgNjAsIDI1MywgMCwgMTYsIDE3LCA2MCwgMjQ3LCA0NiwgMTYsIDE3LCAKLSAgICA2MCwgMjUyLCAyMjMsIDE2LCAxNywgNjAsIDIxMywgMTYsIDE3LCA2MCwgMjU0LCAxODcsIDE2LCAxNywgNjAsIDI1MywgNDAsIAotICAgIDE2LCAxNywgNjAsIDI1MywgNzYsIDE2LCAxNywgNjAsIDI1MywgMTAzLCAxNiwgMTcsIDYwLCAyNDcsIDE0NCwgMTYsIDE3LCAKLSAgICA2MCwgMjUzLCAzOSwgMTYsIDE3LCA2MCwgMjUyLCAyMDUsIDE2LCAxNywgNjAsIDI1MCwgMTY0LCAxNiwgMTcsIDYwLCAyNDcsIAotICAgIDE1OCwgMTYsIDE3LCA2MCwgMjQ4LCA4MiwgMTYsIDE3LCA2MCwgMjQ0LCA1NSwgMTYsIDE3LCA2MCwgMjQ3LCAxNTcsIDE2LCAKLSAgICAxNywgNjAsIDI0NiwgMTc4LCAxNiwgMTcsIDYwLCAyNTAsIDE3NCwgMTYsIDE3LCA2MCwgMjUwLCAxNzMsIDE2LCAxNywgNjAsIAotICAgIDI1MCwgMTcxLCAxNiwgMTcsIDYwLCAyNDQsIDYyLCAxNiwgMTcsIDYwLCAyNTAsIDE3MiwgMTYsIDE3LCA2MCwgMjQ3LCAKLSAgICAxNjEsIDE2LCAxNywgNjAsIDI1MywgMTgzLCAxNiwgMTcsIDYwLCAyNTIsIDIyNywgMTYsIDE3LCA2MCwgMjUzLCA4LCAxNiwgCi0gICAgMTcsIDYwLCAyNTIsIDI0NywgMTYsIDE3LCA2MCwgMjQ3LCAxODEsIDE2LCAxNywgNjAsIDI1MiwgMjQ4LCAxNiwgMTcsIDYwLCAKLSAgICAyNTIsIDIwMSwgMTYsIDE3LCA2MCwgMjUyLCAyMjksIDE2LCAxNywgNjAsIDI1MywgMTQsIDE2LCAxNywgNjAsIDI1MywgMTMsIAotICAgIDE2LCAxNywgNjAsIDI0NywgMTcyLCAxNiwgMTcsIDYwLCAyNTIsIDIzOSwgMTYsIDE3LCA2MCwgMTk4LCAxNiwgMTcsIDYwLCAKLSAgICAyNTIsIDIzMywgMTYsIDE3LCA2MCwgMjUyLCAyNTEsIDE2LCAxNywgNjAsIDI1MywgOTYsIDE2LCAxNywgNjAsIDI0NywgNjIsIAotICAgIDE2LCAxNywgNjAsIDI1MywgMjgsIDE2LCAxNywgNjAsIDE5MSwgMTYsIDE3LCA2MCwgMjUzLCAxMTgsIDE2LCAxNywgMjM3LCAKLSAgICA4OCwgMjUzLCAxMTgsIDE2LCAxNywgNjAsIDI1MywgOTAsIDE2LCAxNywgNjAsIDI1MywgMTE3LCAxNiwgMTcsIDYwLCAyNDcsIAotICAgIDM4LCAxNiwgMTcsIDYwLCAyNTMsIDEwNCwgMTYsIDE3LCAyMzcsIDg4LCAyNTMsIDEwNCwgMTYsIDE3LCA2MCwgMjUyLCAKLSAgICAyMTMsIDE2LCAxNywgNjAsIDI0OCwgNzMsIDE2LCAxNywgNjAsIDI0OCwgNzIsIDE2LCAxNywgNjAsIDI1MCwgMTM1LCAxNiwgCi0gICAgMTcsIDYwLCAyNDQsIDIwLCAxNiwgMTcsIDYwLCAyNDgsIDcxLCAxNiwgMTcsIDYwLCAyNDgsIDcwLCAxNiwgMTcsIDYwLCAKLSAgICAyNTMsIDIyLCAxNiwgMTcsIDYwLCAyNTMsIDQ5LCAxNiwgMTcsIDYwLCAyNTMsIDgwLCAxNiwgMTcsIDYwLCAyNDcsIDE2OCwgCi0gICAgMTYsIDE3LCA2MCwgMjUzLCA0MiwgMTYsIDE3LCA2MCwgMjUyLCAyMDAsIDE2LCAxNywgNjAsIDI0OSwgMjAxLCAxNiwgMTcsIAotICAgIDYwLCAyNDksIDIwMCwgMTYsIDE3LCA2MCwgMjQ5LCAxOTgsIDE2LCAxNywgNjAsIDI0MywgNzQsIDE2LCAxNywgNjAsIDI0OSwgCi0gICAgMTk5LCAxNiwgMTcsIDYwLCAyNDgsIDMwLCAxNiwgMTcsIDYwLCAyNTAsIDIxOSwgMTYsIDE3LCA2MCwgMjQ4LCA5MSwgMTYsIAotICAgIDE3LCA2MCwgMjUwLCAyMTgsIDE2LCAxNywgNjAsIDI0NCwgOTcsIDE2LCAxNywgNjAsIDI0OCwgOTAsIDE2LCAxNywgNjAsIAotICAgIDI0NywgMTcsIDE2LCAxNywgNjAsIDI0NiwgMSwgMTYsIDE3LCA2MCwgMjQyLCA3LCAxNiwgMTcsIDYwLCAyNDIsIDUsIDE2LCAKLSAgICAxNywgNjAsIDI0MCwgNDUsIDE2LCAxNywgNjAsIDI0MiwgNiwgMTYsIDE3LCA2MCwgMjQyLCA0LCAxNiwgMTcsIDYwLCAyNDgsIAotICAgIDE3OCwgMTYsIDE3LCA2MCwgMjQ4LCAxNzcsIDE2LCAxNywgNjAsIDI0OCwgMTc1LCAxNiwgMTcsIDYwLCAyNDYsIDAsIDE2LCAKLSAgICAxNywgNjAsIDI0OCwgMTc2LCAxNiwgMTcsIDYwLCAyNDgsIDE3NCwgMTYsIDE3LCA2MCwgMjUzLCA5NywgMTYsIDE3LCA2MCwgCi0gICAgMjUzLCA2NSwgMTYsIDE3LCA2MCwgMjUzLCA0NiwgMTYsIDE3LCA2MCwgMjQ3LCA2NCwgMTYsIDE3LCA2MCwgMjUzLCA3MiwgCi0gICAgMTYsIDE3LCA2MCwgMjUyLCAyMjYsIDE2LCAxNywgNjAsIDI1NCwgMTkzLCAxNiwgMTcsIDYwLCA1OSwgMjU0LCAxOTMsIDE2LCAKLSAgICAxNywgNjAsIDI0OSwgMjIyLCAxNiwgMTcsIDYwLCAyNDksIDIyMSwgMTYsIDE3LCA2MCwgMjQ2LCAyNTUsIDE2LCAxNywgNjAsIAotICAgIDI0MywgOTAsIDE2LCAxNywgNjAsIDI0OSwgMjIwLCAxNiwgMTcsIDYwLCAyNDYsIDI1NCwgMTYsIDE3LCA2MCwgMjUzLCAyNiwgCi0gICAgMTYsIDE3LCA2MCwgMjUzLCAyNSwgMTYsIDE3LCA2MCwgMjUzLCA1MiwgMTYsIDE3LCA2MCwgMjQ3LCA1MCwgMTYsIDE3LCAKLSAgICA2MCwgMjUzLCAyNCwgMTYsIDE3LCA2MCwgMjUyLCAyMDQsIDE2LCAxNywgNjAsIDI0NiwgMjQ2LCAxNiwgMTcsIDYwLCAyNDYsIAotICAgIDI0NSwgMTYsIDE3LCA2MCwgMjQ2LCAxODYsIDE2LCAxNywgNjAsIDI0MSwgNzAsIDE2LCAxNywgNjAsIDI0NywgNTEsIDE2LCAKLSAgICAxNywgNjAsIDI0NiwgMTY1LCAxNiwgMTcsIDYwLCAyNTMsIDE2MCwgMTYsIDE3LCA2MCwgMjQ3LCAyMTYsIDE2LCAxNywgNjAsIAotICAgIDI0NywgMjE1LCAxNiwgMTcsIDYwLCAyNDYsIDI0OCwgMTYsIDE3LCA2MCwgMjQyLCA5LCAxNiwgMTcsIDYwLCAyNDcsIDU4LCAKLSAgICAxNiwgMTcsIDYwLCAyNDYsIDIxNiwgMTYsIDE3LCA2MCwgMjQ3LCAxMjQsIDE2LCAxNywgNjAsIDI0NywgMjksIDE2LCAxNywgCi0gICAgNjAsIDI0NiwgMjE3LCAxNiwgMTcsIDYwLCAyNDAsIDI0NiwgMTYsIDE3LCA2MCwgMjQ2LCAyMDAsIDE2LCAxNywgNjAsIAotICAgIDI0NiwgMTc2LCAxNiwgMTcsIDYwLCAyNDYsIDE5LCAxNiwgMTcsIDYwLCAyNDYsIDE4LCAxNiwgMTcsIDYwLCAyNDYsIDE2LCAKLSAgICAxNiwgMTcsIDYwLCAyNDAsIDUxLCAxNiwgMTcsIDYwLCAyNDYsIDE3LCAxNiwgMTcsIDYwLCAyNDYsIDE1LCAxNiwgMTcsIAotICAgIDI1MywgMjEyLCA1MywgMTYsIDE3LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDE2LCAxNywgMjQ4LCAxNDAsIDE2LCAxNywgMjQ0LCAKLSAgICAyMDMsIDE2LCAxNywgMjQ0LCAyNDgsIDE2LCAxNywgMjM5LCAxNTMsIDE2LCAxNywgMjQ0LCAyNDksIDE2LCAxNywgMjM5LCAKLSAgICAxNTQsIDE2LCAxNywgMjQ0LCAyNDcsIDE2LCAxNywgMjM5LCAxNTIsIDI0MCwgMTM1LCAyNDUsIDE5MywgNzYsIDI0MCwgCi0gICAgMTM1LCAxLCAyMzgsIDEyMCwgMjQwLCAxMzUsIDEsIDI0NCwgMTA4LCAyNDAsIDEzNSwgMSwgMjM4LCAyMTMsIDI0MCwgMTM1LCAKLSAgICAxLCAyNDUsIDE0OCwgMjQwLCAxMzUsIDEsIDI0NCwgMjI5LCAyNDAsIDEzNSwgMSwgMjQ2LCAyOSwgMjQwLCAxMzUsIDEsIAotICAgIDI0MywgMjYsIDI0MCwgMTM1LCAxLCAyNDAsIDQzLCAyNDAsIDEzNSwgMSwgMjQzLCAxOCwgMjQwLCAxMzUsIDEsIDIzOCwgCi0gICAgMTQzLCAyNDAsIDEzNSwgMSwgMjQ0LCAxNTQsIDI0MCwgMTM1LCAxLCAyNDMsIDE1NCwgMjQwLCAxMzUsIDEsIDIzNCwgMTY5LCAKLSAgICAyNDAsIDEzNSwgMSwgMjM2LCAyNDIsIDI0MCwgMTM1LCAxLCAyNDUsIDEzOCwgMjQwLCAxMzUsIDEsIDI0MiwgNDcsIDI0MCwgCi0gICAgMTM1LCAxLCAyNDgsIDEyNCwgMjQwLCAxMzUsIDEsIDI1MywgMTYxLCAyNDAsIDEzNSwgMSwgMjM0LCA4OSwgMjQwLCAxMzUsIAotICAgIDEsIDIzNCwgMTMxLCAyNDAsIDEzNSwgMSwgMjM0LCA4OCwgMjQwLCAxMzUsIDEsIDI1MywgODEsIDI0MCwgMTM1LCAxLCAKLSAgICAyMzMsIDU3LCAyNDAsIDEzNSwgMSwgMjQ0LCA0LCAyNDAsIDEzNSwgMSwgMjI5LCAxNiwgMjQwLCAxMzUsIDEsIDIzOSwgCi0gICAgMTg4LCAyNDAsIDEzNSwgMjM1LCAxNzEsIDc2LCAyNDAsIDEzNSwgMjAwLCAyMzUsIDE3MSwgNzYsIDE0MCwgMSwgMjQ5LCAKLSAgICAyNDIsIDI0OSwgMjQ0LCAyNTUsIDI2LCAyNTQsIDE5MSwgMTQwLCAxLCAxOTYsIDE0MCwgMSwgMjUyLCA2NCwgMjU0LCAyNDQsIAotICAgIDY2LCAxNDAsIDEsIDI1NCwgMjAsIDE0MCwgMSwgMjU0LCAxOTAsIDE0MCwgMSwgMjU0LCAxOTUsIDE0MCwgMSwgMjM0LCAKLSAgICAyNDcsIDI0NSwgMjQ3LCAyMzcsIDIxOSwgMTQwLCAxLCAyNDYsIDI0MiwgMTQwLCAxLCAyNDIsIDU5LCA1NywgMTQwLCAxLCAKLSAgICAyNTUsIDQyLCA3MywgMTQwLCAxLCAyNTUsIDAsIDU3LCAxNDAsIDEsIDI0MiwgNDMsIDE0MCwgMSwgMjI3LCA3MCwgNzMsIAotICAgIDE0MCwgMSwgMjI3LCAxNzUsIDczLCAxNDAsIDEsIDczLCAxNDAsIDEsIDI1MywgMTUsIDE0MCwgMSwgMjUzLCAxMDYsIDE0MCwgCi0gICAgMSwgMjQ1LCAxMTIsIDI1MywgMTkxLCAyNTEsIDE3NywgMTQ2LCAxNDAsIDEsIDIzOSwgNTgsIDE0MCwgMSwgMjQ5LCAxNTIsIAotICAgIDE0MCwgMSwgMjUwLCAxNTcsIDI1NCwgMTg2LCAxNDAsIDEsIDIxNCwgMTQwLCAxLCAyNDcsIDAsIDE0MCwgMSwgMjUwLCAyMiwgCi0gICAgMjUwLCA1NSwgMjE0LCAxNDAsIDEsIDI0NiwgMTk3LCAxNDAsIDEsIDI0NiwgNjAsIDI1MiwgMTA5LCAyNTQsIDE5NSwgMTQwLCAKLSAgICAxLCAyMzksIDMsIDIxMiwgMTQwLCAxLCAyNDMsIDE2NywgMjEyLCAxNDAsIDEsIDIyMiwgMjQ3LCAyMTIsIDE0MCwgMSwgCi0gICAgMjIzLCA1MywgMjEyLCAxNDAsIDEsIDIzOSwgMTI2LCAyNTQsIDEyMCwgMjUxLCA0MiwgMTk5LCAxNDAsIDEsIDIyNywgNzcsIAotICAgIDE5OSwgMTQwLCAxLCAyMzIsIDE3MiwgMTQwLCAxLCAyNTAsIDEyMywgMjU1LCA4LCAyNTQsIDcyLCA3NCwgMTQwLCAxLCA3MiwgCi0gICAgMTQwLCAxLCAyNDQsIDE2LCAyNTQsIDE5MiwgMTQwLCAxLCAyNTAsIDI0LCAxNDAsIDEsIDIyNywgMTcwLCAyNTMsIDQsIAotICAgIDE0MCwgMSwgMjI4LCAxNjAsIDU3LCAxNDAsIDEsIDI1MCwgMTI0LCAyNDksIDIzMCwgMTQwLCAxLCAyMzksIDE5MiwgMjM5LCAKLSAgICAxOTAsIDI1NCwgMTg3LCAxNDAsIDEsIDI0MiwgNTMsIDIzOCwgMjA0LCAxNDAsIDEsIDI0MCwgMTAsIDE5MywgMTQwLCAxLCAKLSAgICAyNDUsIDE4NCwgMjI3LCA3MSwgMTkzLCAxNDAsIDEsIDIyNywgMTc2LCAxOTMsIDE0MCwgMSwgMjU0LCAxOTQsIDE0MCwgMSwgCi0gICAgMjU0LCAxOTMsIDE0MCwgMSwgMjQ1LCAyNTUsIDI1MywgMTM2LCAyNTQsIDE2MiwgMjU0LCAxODMsIDE0MCwgMSwgMjI3LCAKLSAgICAxNzcsIDI1NCwgMTgzLCAxNDAsIDEsIDIyMiwgMjIyLCAxNDAsIDEsIDIzNCwgMTksIDI0MiwgMjAxLCAyMzYsIDEzLCAyNTQsIAotICAgIDE4NSwgMTQwLCAxLCAyMjIsIDI1MCwgMjU0LCAxODUsIDE0MCwgMSwgMjMyLCAxNzMsIDE0MCwgMSwgMjM2LCAxNzUsIDE0MCwgCi0gICAgMSwgMjQzLCA5NSwgMjU1LCAyNCwgNzIsIDE0MCwgMSwgMjM5LCA5NiwgMjUzLCAyNDUsIDE4NSwgMTQwLCAxLCAyMjUsIDk2LCAKLSAgICAxODUsIDE0MCwgMSwgMjI3LCA3NiwgMTg1LCAxNDAsIDEsIDIzOSwgODIsIDI1MCwgMjA1LCAyNTAsIDIyOSwgMTQ5LCAxNDAsIAotICAgIDEsIDIzMiwgMTcxLCAxNDAsIDEsIDIzNiwgMTExLCAxNDAsIDEsIDI1MCwgMTE4LCAxNDAsIDEsIDI0MywgMjQsIDI0OSwgCi0gICAgMTc1LCAyMjIsIDIyMiwgMTQwLCAxLCAyMzYsIDE3OSwgMjQzLCAxMDEsIDczLCAxNDAsIDEsIDI0NywgMTM1LCAxNDAsIDEsIAotICAgIDI1MCwgMTIxLCAxNDAsIDEsIDIzNCwgNDMsIDE0MCwgMSwgMjQyLCAyMzAsIDE0MCwgMSwgMjM4LCAxNDEsIDE0MCwgMSwgCi0gICAgMjQ1LCAyMTcsIDE0MCwgMSwgMjI3LCA3MiwgMTQwLCAxLCAyMjcsIDE3OCwgMTQwLCAxLCAyMjcsIDI0NCwgMTQwLCAxLCAKLSAgICAyNTQsIDE5NiwgMTQwLCAxLCAyNTQsIDE4NCwgMTQwLCAyMzcsIDYyLCAyMjgsIDE4MiwgMTQwLCAyMzMsIDIxOSwgMjI4LCAKLSAgICAxODIsIDE0MCwgMjQwLCAyMjEsIDIyOCwgMTgyLCAxNDAsIDIzOCwgMTA0LCA5OCwgMTQwLCAyMzQsIDI1NCwgOTgsIDE0MCwgCi0gICAgMjM0LCAxOCwgOTgsIDIzNSwgMzQsIDEsIDU3LCAyMzUsIDM0LCAxLCA3NCwgMjM1LCAzNCwgMSwgNjYsIDIzNSwgMzQsIDEsIAotICAgIDE3NywgMjM1LCAzNCwgMSwgMjUyLCAyMDUsIDIzNSwgMzQsIDEsIDI0NiwgMTY5LCAyMzUsIDM0LCAxLCAyNTIsIDIwMiwgCi0gICAgMjM1LCAzNCwgMSwgMjUyLCAyMDMsIDIzNSwgMzQsIDEsIDI1MiwgMjAxLCAyMzUsIDM0LCAxLCAyMTMsIDIzNSwgMzQsIDEsIAotICAgIDI1MiwgMjExLCAyMzUsIDM0LCAxLCAxOTgsIDIzNSwgMzQsIDEsIDE5MSwgMjM1LCAzNCwgMSwgMjUyLCAyMDAsIDIzNSwgCi0gICAgMzQsIDEsIDI1MiwgMjA4LCAyMzUsIDM0LCAxLCAyNTIsIDIwNCwgMjM1LCAzNCwgMSwgMTU0LCAyMzUsIDM0LCAzMSwgNSwgCi0gICAgNzQsIDIzNSwgMzQsIDMxLCA1LCA2NiwgMjM1LCAzNCwgNSwgMjM1LCA0MywgMjM1LCAzMiwgMSwgNTcsIDIzNSwgMzIsIDEsIAotICAgIDc0LCAyMzUsIDMyLCAxLCA2NiwgMjM1LCAzMiwgMSwgMTc3LCAyMzUsIDMyLCAxLCAyNTIsIDIwNSwgMjM1LCAzMiwgMSwgCi0gICAgMjQ2LCAxNjksIDIzNSwgMzIsIDEsIDI1MiwgMjAyLCAyMzUsIDMyLCAxLCAyNTIsIDIwMywgMjM1LCAzMiwgMSwgMjUyLCAKLSAgICAyMDEsIDIzNSwgMzIsIDEsIDIxMywgMjM1LCAzMiwgMSwgMjUyLCAyMTEsIDIzNSwgMzIsIDEsIDE5OCwgMjM1LCAzMiwgMSwgCi0gICAgMTkxLCAyMzUsIDMyLCAxLCAyMDgsIDIzNSwgMzIsIDEsIDI1MiwgMjAwLCAyMzUsIDMyLCAxLCAyNTIsIDIwOCwgMjM1LCAKLSAgICAzMiwgMSwgMjUyLCAyMDQsIDIzNSwgMzIsIDEsIDE1NCwgMjM1LCAzMiwgMzEsIDUsIDc0LCAyMzUsIDMyLCAzMSwgNSwgNjYsIAotICAgIDIzNSwgMzIsIDUsIDIzMiwgMjQwLCAyMzAsIDE5NCwgMjM3LCA2MiwgMjI4LCAxODIsIDIzMCwgMTk0LCA0NywgMjI4LCAKLSAgICAxODIsIDI0MCwgMTQ1LCAxLCA1NywgMjQwLCAxNDUsIDEsIDc0LCAyNDAsIDE0NSwgMSwgNjYsIDI0MCwgMTQ1LCAxLCAxNzcsIAotICAgIDI0MCwgMTQ1LCAxLCAyNTIsIDIwNSwgMjQwLCAxNDUsIDEsIDI0NiwgMTY5LCAyNDAsIDE0NSwgMSwgMjUyLCAyMDIsIDI0MCwgCi0gICAgMTQ1LCAxLCAyNTIsIDIwMywgMjQwLCAxNDUsIDEsIDI1MiwgMjAxLCAyNDAsIDE0NSwgMSwgMjEzLCAyNDAsIDE0NSwgMSwgCi0gICAgMjUyLCAyMTEsIDI0MCwgMTQ1LCAxLCAxOTgsIDI0MCwgMTQ1LCAxLCAxOTEsIDI0MCwgMTQ1LCAxLCAyMDgsIDI0MCwgMTQ1LCAKLSAgICAxLCAyNTIsIDIwMCwgMjQwLCAxNDUsIDEsIDI1MiwgMjA4LCAyNDAsIDE0NSwgMSwgMjUyLCAyMDQsIDI0MCwgMTQ1LCAxLCAKLSAgICAxNTQsIDI0MCwgMTQ1LCAzMSwgNSwgNzQsIDI0MCwgMTQ1LCAzMSwgNSwgNjYsIDIzMywgODYsIDEsIDU3LCAyMzMsIDg2LCAKLSAgICAxLCA3NCwgMjMzLCA4NiwgMSwgNjYsIDIzMywgODYsIDEsIDE3NywgMjMzLCA4NiwgMSwgMjUyLCAyMDUsIDIzMywgODYsIDEsIAotICAgIDI0NiwgMTY5LCAyMzMsIDg2LCAxLCAyNTIsIDIwMiwgMjMzLCA4NiwgMSwgMjUyLCAyMDMsIDIzMywgODYsIDEsIDI1MiwgCi0gICAgMjAxLCAyMzMsIDg2LCAxLCAyMTMsIDIzMywgODYsIDEsIDI1MiwgMjExLCAyMzMsIDg2LCAxLCAxOTgsIDIzMywgODYsIDEsIAotICAgIDE5MSwgMjMzLCA4NiwgMSwgMjUyLCAyMDAsIDIzMywgODYsIDEsIDI1MiwgMjA4LCAyMzMsIDg2LCAxLCAyNTIsIDIwNCwgCi0gICAgMjMzLCA4NiwgMzEsIDUsIDc0LCAyMzMsIDg2LCAzMSwgNSwgNjYsIDcxLCAxLCAxNzcsIDcxLCAxLCAyNDYsIDE3OCwgNzEsIAotICAgIDEsIDI1MywgMzMsIDcxLCAxLCAyNDcsIDE1OCwgNzEsIDEsIDI0NywgOTMsIDcxLCAxLCAyNTIsIDIxNSwgNzEsIDEsIDI0NiwgCi0gICAgMTc2LCA3MSwgMSwgMjUzLCA2NiwgNzEsIDEsIDI0NywgMjksIDcxLCAxLCAyNDcsIDE5LCA3MSwgMSwgMjUyLCAyMDMsIDcxLCAKLSAgICAxLCAyNDAsIDE1MCwgNzEsIDEsIDI1MywgNTcsIDcxLCAxLCAyNDEsIDgyLCA3MSwgMSwgMjUxLCA2OCwgNzEsIDEsIDI1MiwgCi0gICAgMjAyLCA3MSwgMSwgMjQ2LCAxNzMsIDcxLCAxLCA5NiwgNzEsIDEsIDI0NiwgMjI4LCA3MSwgMSwgMjUzLCA4LCA3MSwgMSwgCi0gICAgMjUyLCAyMTEsIDcxLCAxLCAyNDYsIDE4MiwgNzEsIDEsIDI1MywgNTAsIDcxLCAxLCAyNDcsIDk5LCA3MSwgMSwgMjUzLCAKLSAgICAxNCwgNzEsIDEsIDI1MiwgMjUxLCA3MSwgMSwgMjUyLCAyNDYsIDcxLCAxLCAyNTMsIDQ5LCA3MSwgMSwgMjUzLCAxMDgsIAotICAgIDcxLCAxLCAyNDYsIDE2NSwgNzEsIDEsIDI0NywgMjAzLCA3MSwgMSwgMjUyLCAyMDQsIDcxLCAxLCAxNTQsIDcxLCAxLCAKLSAgICAyNTIsIDIwMCwgNzEsIDEsIDI1MywgMzUsIDcxLCAyMjksIDE2NiwgMzEsIDI1MSwgMTI5LCA3MSwgMjI5LCAxNjYsIDMxLCAKLSAgICAyNDcsIDE5MiwgNzEsIDIyOSwgMTY2LCAzMSwgMjUzLCAxMzEsIDcxLCAyMjksIDE2NiwgMzEsIDI0OCwgMTQxLCA3MSwgCi0gICAgMjI5LCAxNjYsIDMxLCAyNTMsIDEzMiwgNzEsIDIyOSwgMTY2LCAzMSwgMjUxLCAxNDgsIDcxLCAyMjksIDE2NiwgMzEsIAotICAgIDI0OCwgMTQ1LCA3MSwgMjI5LCAxNjYsIDMxLCAyNDUsIDEwNSwgNzEsIDIyOSwgMTY2LCAzMSwgMjU0LCA2LCA3MSwgMjI5LCAKLSAgICAxNjYsIDMxLCAyNTEsIDIwNywgNzEsIDIyOSwgMTY2LCAzMSwgMjUzLCAxODYsIDcxLCAyMjksIDE2NiwgMzEsIDI1MCwgCi0gICAgMjQ0LCA3MSwgMjI5LCAxNjYsIDMxLCAyNTMsIDE5MCwgNzEsIDIyOSwgMTY2LCAzMSwgMjQ4LCAxNDAsIDcxLCAyMjksIAotICAgIDE2NiwgMzEsIDI1NCwgMywgMjQ3LCAyMTksIDExOCwgNzEsIDIyOSwgMTY2LCAzMSwgMjU0LCAzLCAyNDcsIDIxOSwgMTEzLCAKLSAgICA3MSwgMjI5LCAxNjYsIDMxLCAyNTEsIDEzMCwgNzEsIDMxLCAyMzMsIDIwOCwgMjU0LCAyOCwgNzEsIDMxLCAyMzMsIDIwOCwgCi0gICAgMjUyLCAyMTIsIDcxLCAzMSwgNSwgMjUyLCAyMTIsIDcxLCAzMSwgNSwgNzQsIDcxLCAzMSwgNSwgMjUyLCAyMTYsIDcxLCAKLSAgICAzMSwgNSwgMjU0LCAxOTAsIDcxLCAzMSwgNSwgMjUzLCAyMDMsIDcxLCAzMSwgNSwgNjYsIDcxLCAzMSwgNSwgMjUyLCAyMjQsIAotICAgIDcxLCAzMSwgNSwgMjUzLCAxOTcsIDcxLCAzMSwgNSwgMjUzLCAxNSwgNzEsIDMxLCA1LCAxOTEsIDcxLCAzMSwgNSwgMjUzLCAKLSAgICA3NywgNzEsIDMxLCA1LCA3MiwgNzEsIDMxLCA1LCAyNTMsIDQsIDcxLCAzMSwgNSwgMjUyLCAyMjEsIDcxLCAzMSwgNSwgCi0gICAgMjUyLCAyMjAsIDcxLCAzMSwgNSwgMjUyLCAyMjIsIDcxLCA1LCAyMzQsIDE3MCwgNzEsIDUsIDIzNCwgMjA0LCA3MSwgNSwgCi0gICAgMjI3LCAxODIsIDcxLCA1LCAyMjksIDM4LCA3MSwgNSwgMjM0LCAyNTEsIDcxLCA1LCAyMzYsIDcsIDcxLCA1LCAyMzksIAotICAgIDIyNiwgNzEsIDUsIDIyOSwgMTU1LCA3MSwgNSwgMjM0LCAxMzUsIDcxLCA1LCAyMzgsIDkxLCA3MSwgNSwgMjM5LCAyMzYsIAotICAgIDIzNiwgMjA3LCA3MSwgNSwgMjM3LCAyNCwgNzEsIDUsIDIzOCwgMTU3LCA3MSwgNSwgMjI5LCAyMzUsIDcxLCA1LCAyNDQsIAotICAgIDU0LCA3MSwgNSwgMjI5LCAyMzQsIDcxLCA1LCAyMzgsIDEzNiwgMjUzLCAxODksIDI0NCwgNzQsIDcxLCA1LCAyNTMsIDYwLCAKLSAgICAyNDcsIDEwOSwgNzEsIDUsIDIzNiwgMTEsIDcxLCA1LCAyMzksIDE5NSwgMjQ0LCAxNTMsIDcxLCA1LCAyMzQsIDE0MSwgNzEsIAotICAgIDIzMywgMTEyLCAxNCwgMjQ1LCAxMTYsIDcxLCA1LCAyMjcsIDE1NiwgNzEsIDUsIDIzMiwgODIsIDcxLCAyMSwgMjQwLCAKLSAgICAxMjYsIDcxLCAyMSwgMTE4LCA3MSwgMjEsIDExMywgNzEsIDIxLCAxNjYsIDcxLCAyMSwgMTU4LCA3MSwgMjEsIDE3MywgNzEsIAotICAgIDIxLCAxODMsIDcxLCAyMSwgMTk0LCA3MSwgMjEsIDE4NywgNzEsIDIxLCAxOTIsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAKLSAgICAxODMsIDI1MSwgMjMxLCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgMTgzLCAyNDQsIDE1OSwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIAotICAgIDE4MywgMjQ4LCAxMzIsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAxODMsIDI0OSwgMTA4LCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgCi0gICAgMTgzLCAyNDIsIDIyMCwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIDE4MywgMjQ1LCA4MSwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIAotICAgIDE4MywgMjMxLCAxMjUsIDcxLCAxNCwgMjUzLCA2MCwgMjQwLCAxODMsIDIzMiwgMjU1LCA3MSwgMTQsIDI1MywgNjAsIDI0MCwgCi0gICAgMTgzLCAyMzIsIDI1NCwgNzEsIDE0LCAyNTMsIDYwLCAyNDAsIDE4MywgMjMxLCAxMjQsIDY4LCAyMzgsIDEyMywgNjgsIAotICAgIDIzMSwgMjE4LCA2OCwgMjM3LCA2NywgNjgsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjgsIDIzNywgNjYsIDY4LCAyNDYsIDE2MCwgCi0gICAgMjQwLCAxNjksIDY4LCAyNDYsIDE3NSwgMjQ2LCAyMjcsIDIzNSwgNjksIDY4LCAyNDYsIDE4NSwgNCwgMjM0LCAyMSwgMjM1LCAKLSAgICA3MCwgNjgsIDIzNywgNjQsIDIzNywgNjcsIDY4LCAyMzcsIDY0LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDY4LCAyMzYsIDE2NywgCi0gICAgNjgsIDI0NywgMTQyLCAzOCwgMjMzLCAxNzksIDExOCwgNjgsIDI0NywgMTQyLCAzOCwgMjMzLCAxNzksIDExMywgNjgsIAotICAgIDI0NywgMTQyLCAzOCwgMjMzLCAxNzksIDE2NiwgNjgsIDMxLCAyMzAsIDEzMSwgNjgsIDIxLCAyNDAsIDEyNiwgNjgsIDIxLCAKLSAgICAxMTgsIDY4LCAyMSwgMTEzLCA2OCwgMjEsIDE2NiwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTczLCA2OCwgMjEsIDE4MywgNjgsIAotICAgIDIxLCAxOTQsIDY4LCAyMSwgMTg3LCA2OCwgMjEsIDE5MiwgNjgsIDEsIDU3LCA2OCwgMSwgNzIsIDY4LCAxLCA3NCwgNjgsIAotICAgIDEsIDczLCA2OCwgMSwgNjYsIDY4LCAxLCAyNTMsIDE1LCA2OCwgMSwgMjUzLCA3MSwgNjgsIDEsIDI1MiwgMjMxLCA2OCwgMSwgCi0gICAgMjUyLCAyMDEsIDY4LCAxLCAyNDcsIDksIDY4LCAxLCAyNTIsIDIxMSwgNjgsIDEsIDIxMywgNjgsIDEsIDI1MywgMzUsIDY4LCAKLSAgICAxLCAyNTIsIDIwNSwgNjgsIDEsIDE5OCwgNjgsIDEsIDI1MiwgMjAwLCA2OCwgMSwgMjUyLCAyMDQsIDY4LCAxLCAyNDYsIAotICAgIDE2NSwgNjgsIDEsIDI1MiwgMjAyLCA2OCwgMSwgMjUyLCAyMDMsIDY4LCAxLCAyNDYsIDE3NiwgNjgsIDEsIDI1MiwgMjEzLCAKLSAgICA2OCwgMSwgMTkxLCA2OCwgMSwgMjA4LCA2OCwgMSwgMjUyLCAyMDgsIDY4LCAxLCAyNTIsIDIzNCwgNjgsIDEsIDE3NywgNjgsIAotICAgIDEsIDI0NiwgMTc4LCA2OCwgMSwgMjQ2LCAyMTYsIDY4LCAxLCAyNTIsIDIyNiwgNjgsIDEsIDI0NywgMTQsIDY4LCAxLCAKLSAgICAyNTIsIDE4NywgNjgsIDEsIDI0NywgMTcsIDY4LCAxLCAyNDcsIDIzOCwgNjgsIDEsIDI0NiwgMjAwLCA2OCwgMSwgMjQ2LCAKLSAgICAxNzUsIDE4MiwgMzEsIDUzLCA2OCwgMSwgMjQ2LCAxNzUsIDcyLCA2OCwgMSwgMjQ2LCAxNzUsIDc0LCA2OCwgMSwgMjQ2LCAKLSAgICAxNzUsIDczLCA2OCwgMSwgMjQ2LCAxNzUsIDY2LCA2OCwgMSwgMjQ2LCAxNzUsIDI1MywgMTUsIDY4LCAxLCAyNDYsIDE3NSwgCi0gICAgMjUzLCA3MSwgNjgsIDEsIDI0NiwgMTc1LCAyNDcsIDksIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMTEsIDY4LCAxLCAyNDYsIAotICAgIDE3NSwgMjEzLCA2OCwgMSwgMjQ2LCAxNzUsIDI1MywgMzUsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMDUsIDY4LCAxLCAKLSAgICAyNDYsIDE3NSwgMTk4LCA2OCwgMSwgMjQ2LCAxNzUsIDI1MiwgMjAyLCA2OCwgMSwgMjQ2LCAxNzUsIDI1MiwgMjAzLCA2OCwgCi0gICAgMSwgMjQ2LCAxNzUsIDI0NiwgMTc2LCA2OCwgMSwgMjQ2LCAxNzUsIDI1MiwgMjEzLCA2OCwgMSwgMjQ2LCAxNzUsIDI0NiwgCi0gICAgMjE2LCA2OCwgMSwgMjQ2LCAxNzUsIDE5MSwgNjgsIDEsIDI0NiwgMTc1LCAyNTIsIDIwOCwgNjgsIDEsIDI0NiwgMTc1LCAKLSAgICAxNzcsIDY4LCAxLCAyNDYsIDE3NSwgMjQ3LCAxNDMsIDY4LCAxLCAyNDYsIDE3NSwgMjQ3LCAxNCwgNjgsIDEsIDI0NiwgCi0gICAgMTc1LCAyNTAsIDEzMCwgNjgsIDEsIDI0NiwgMTc1LCAyNTEsIDU5LCA2OCwgMSwgMjQ2LCAxNzUsIDI0NiwgMjU0LCA2OCwgCi0gICAgMSwgMjQ2LCAxODUsIDcyLCA2OCwgMSwgMjQ2LCAxODUsIDc0LCA2OCwgMSwgMjQ2LCAxODUsIDI1MywgMjM0LCA2OCwgMSwgCi0gICAgMjQ2LCAxODUsIDI1MywgNzEsIDY4LCAxLCAyNDYsIDE4NSwgNjYsIDY4LCAxLCAyNDYsIDE4NSwgMjQ3LCA5LCA2OCwgMSwgCi0gICAgMjQ2LCAxODUsIDE3NywgNjgsIDEsIDI0NiwgMTg1LCAyNTIsIDIwNSwgNjgsIDEsIDI0NiwgMTg1LCAxNTQsIDY4LCAxLCAKLSAgICAyNDYsIDE4NSwgMjEzLCA2OCwgMSwgMjQ2LCAxODUsIDI0NiwgMTY1LCA2OCwgMSwgMjQ2LCAxODUsIDI1MiwgMjAyLCA2OCwgCi0gICAgMSwgMjQ2LCAxODUsIDI1MiwgMjAzLCA2OCwgMSwgMjQ2LCAxODUsIDI1MiwgMjEzLCA2OCwgMSwgMjQ2LCAxODUsIDI1MiwgCi0gICAgMjM0LCA2OCwgMSwgMjQ2LCAxODUsIDI0NywgMTQzLCA2OCwgMSwgMjQ2LCAxODUsIDI0NywgMTQsIDY4LCAxLCAyNDYsIAotICAgIDE4NSwgMjQ2LCAyMTYsIDY4LCAxLCAyNDYsIDE4NSwgMjUyLCAyMjYsIDY4LCAxLCAyNDYsIDE4NSwgMjQ3LCAxMDAsIDY4LCAKLSAgICAxLCAyNDYsIDE4NSwgMjQ2LCAxNzYsIDY4LCAxLCAyNDYsIDE4NSwgMjQ2LCAyMjMsIDY4LCAxLCAyMzcsIDY0LCA3NCwgNjgsIAotICAgIDEsIDIzNywgNjQsIDE3NywgNjgsIDEsIDIzNywgNjQsIDIwOCwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjM0LCA2OCwgMSwgCi0gICAgMjM3LCA2NCwgMjQ2LCAyMjMsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIzNCwgNCwgMTE4LCA2OCwgMSwgMjUyLCAKLSAgICAyMDksIDI0NiwgMTYxLCAyMzcsIDI1LCAxMTgsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIzNiwgNDEsIDY4LCAxLCAKLSAgICAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIzMywgMjQ4LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyMzMsIDcwLCAyMzMsIAotICAgIDI0OCwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjM1LCAxNDgsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDE1MiwgCi0gICAgMjM1LCAxNDgsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDU3LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCA3NCwgCi0gICAgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMTc3LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDE2OSwgNjgsIAotICAgIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjUyLCAyMTUsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTkxLCA2OCwgCi0gICAgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDAsIDE1MCwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxOTIsIDY4LCAKLSAgICAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMjAzLCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIwMiwgNjgsIAotICAgIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjUyLCAyMDMsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDIxMywgNjgsIDEsIAotICAgIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjQ2LCAxODIsIDY4LCAxLCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTkwLCA2OCwgMSwgCi0gICAgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDIyMywgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjUyLCAyMjYsIDY4LCAxLCAKLSAgICAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI1MywgMTExLCA2OCwgMSwgMjQ2LCAxNzUsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMjUyLCAKLSAgICAyMDIsIDY4LCAxLCAyNDYsIDE3NSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDIyMywgNjgsIDEsIDIzNywgNjQsIDI1MiwgCi0gICAgMjA5LCAyNDYsIDE2MSwgMjQ2LCAyMDIsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTY5LCAKLSAgICA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIxNSwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAKLSAgICAyNDYsIDE2MSwgMjQ2LCAyMTMsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTkxLCA2OCwgMSwgCi0gICAgMjM3LCA2NCwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDAsIDE2NiwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIAotICAgIDE2MSwgMjUyLCAyMDIsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMTk2LCA2OCwgMSwgMjM3LCAKLSAgICA2NCwgMjUyLCAyMDksIDI0NiwgMTYxLCAyNDYsIDE5MCwgNjgsIDEsIDIzNywgNjQsIDI1MiwgMjA5LCAyNDYsIDE2MSwgCi0gICAgMjQ5LCAxNzAsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgMjIzLCA2OCwgMSwgMjM3LCA2NCwgCi0gICAgMjUyLCAyMDksIDI0NiwgMTYxLCAyNTIsIDIyNiwgNjgsIDEsIDI1MiwgMjA5LCAyNDYsIDE2MSwgMTMyLCA2NiwgNjgsIDEsIAotICAgIDI1MiwgMjA5LCAyNDYsIDE2MSwgMTMyLCAxOTEsIDY4LCAxLCAyMzcsIDY0LCAyNTIsIDIwOSwgMjQ2LCAxNjEsIDI0NiwgCi0gICAgMTk5LCA2OCwgMSwgMjUyLCAyMDksIDI0NiwgMTYxLCAyMzQsIDQ2LCA2OCwgMSwgMjM3LCA2NCwgMjUyLCAyMDksIDI0NiwgCi0gICAgMTYxLCAyNDcsIDE3LCAxNzQsIDIyOCwgMTcyLCAyMzYsIDEzMywgMTc0LCAxLCAxNzcsIDE3NCwgMSwgMjQ2LCAxNzgsIAotICAgIDE3NCwgMSwgMjUyLCAyMDUsIDE3NCwgMSwgMjQ2LCAyMDIsIDE3NCwgMSwgMjQ2LCAxNjksIDE3NCwgMSwgMjUyLCAyMTUsIAotICAgIDE3NCwgMSwgMjQ2LCAxNzYsIDE3NCwgMSwgMjUyLCAyMTMsIDE3NCwgMSwgMjQ2LCAyMTMsIDE3NCwgMSwgMjQ4LCAxOTcsIAotICAgIDE3NCwgMSwgMjUyLCAyMDIsIDE3NCwgMSwgMjQ2LCAxNzMsIDE3NCwgMSwgMjUyLCAyMDMsIDE3NCwgMSwgMjQ2LCAxOTYsIAotICAgIDE3NCwgMSwgMjUyLCAyMDEsIDE3NCwgMSwgMjEzLCAxNzQsIDEsIDI0NiwgMTgyLCAxNzQsIDEsIDI1MiwgMjExLCAxNzQsIAotICAgIDEsIDI0NiwgMTk5LCAxNzQsIDEsIDE5OCwgMTc0LCAxLCAxOTEsIDE3NCwgMSwgMjA4LCAxNzQsIDEsIDI1MiwgMjAwLCAKLSAgICAxNzQsIDEsIDI1MiwgMjA4LCAxNzQsIDEsIDI0NiwgMTY1LCAxNzQsIDEsIDI0NiwgMTkwLCAxNzQsIDEsIDI1MiwgMjA0LCAKLSAgICAxNzQsIDEsIDE1NCwgMTc0LCAzMSwgNSwgNTcsIDE3NCwgMzEsIDUsIDc0LCAxNzQsIDMxLCA1LCA2NiwgMTc0LCAzMSwgNSwgCi0gICAgMjUyLCAyMzEsIDE3NCwgMzEsIDUsIDI1MiwgMjIxLCAxNzQsIDMxLCA1LCAyNTIsIDIyMCwgMTc0LCAzMSwgNSwgMjUyLCAKLSAgICAyMjIsIDE3NCwgMzEsIDUsIDcyLCAxNzQsIDMxLCA1LCA3MywgMTc0LCAyMzEsIDE4OSwgMSwgMTkxLCAxNzQsIDIzMSwgCi0gICAgMTg5LCAxLCAyMDgsIDE3NCwgMjMxLCAxODksIDEsIDI1MiwgMjA4LCAxNzQsIDMsIDEsIDE3NywgMTc0LCAzLCAxLCAyNDYsIAotICAgIDE2OSwgMTc0LCAzLCAxLCAyMzEsIDIwNiwgMTc0LCAzLCAxLCAyNTIsIDIwMiwgMTc0LCAzLCAxLCAyNTIsIDIwMSwgMTc0LCAKLSAgICAzLCAxLCAyMTMsIDE3NCwgMywgMSwgMTk4LCAxNzQsIDMsIDEsIDIwOCwgMTc0LCAzLCAxLCAyNTIsIDIwMCwgMTc0LCA1LCAKLSAgICAyMzEsIDEwNiwgMTc0LCA1LCAyMzEsIDkxLCAxNzQsIDUsIDI0NSwgMTQ1LCAxNzQsIDUsIDI0NywgODcsIDE3NCwgMjI5LCAKLSAgICAxNjUsIDc2LCAxNzQsIDIzMywgODIsIDc2LCAxNzQsIDIxLCAyNDAsIDEyNiwgMTc0LCAyMSwgMTE4LCAxNzQsIDIxLCAxMTMsIAotICAgIDE3NCwgMjEsIDE2NiwgMTc0LCAyMSwgMTU4LCAxNzQsIDIxLCAxNzMsIDE3NCwgMjEsIDE4MywgMTc0LCAyMSwgMTk0LCAKLSAgICAxNzQsIDIxLCAxODcsIDE3NCwgMjEsIDE5MiwgOTEsIDI1NCwgMTk3LCAxLCAxNzcsIDkxLCAyNTQsIDE5NywgMSwgMjUzLCAKLSAgICA4MywgOTEsIDI1NCwgMTk3LCAxLCAyNDYsIDE2OSwgOTEsIDI1NCwgMTk3LCAxLCAyNDYsIDIxNiwgOTEsIDI1NCwgMTk3LCAKLSAgICAxLCAyNTIsIDIwNCwgOTEsIDI1NCwgMTk3LCAxLCAxOTEsIDkxLCAyNTQsIDE5NywgMSwgMjUyLCAyMDIsIDkxLCAyNTQsIAotICAgIDE5NywgMSwgMjQ2LCAxNzMsIDkxLCAyNTQsIDE5NywgMSwgMjUyLCAyMDAsIDkxLCAyNTQsIDE5NywgMSwgMjEzLCA5MSwgCi0gICAgMjU0LCAxOTcsIDEsIDI0NiwgMTgyLCA5MSwgMjU0LCAxOTcsIDEsIDE5OCwgOTEsIDI1NCwgMTk3LCAxLCAyNTIsIDIzNCwgCi0gICAgOTEsIDI1NCwgMTk3LCAxLCAyNTIsIDI0MywgOTEsIDI1NCwgMTk3LCAxLCAxNTQsIDkxLCAyNTQsIDE5NywgMSwgMjUzLCAKLSAgICAzNSwgOTEsIDI1NCwgMTk3LCAxLCAyNDYsIDE3OCwgOTEsIDI1NCwgMTk3LCAxLCAyNDAsIDI0MCwgOTEsIDI1NCwgMTk3LCAKLSAgICAxLCAyNTIsIDIwMSwgOTEsIDI1NCwgMTk3LCAxLCA1NywgOTEsIDI1NCwgMTk3LCAxLCA3NCwgOTEsIDI1NCwgMTk3LCAxLCAKLSAgICAyNTIsIDIzMSwgOTEsIDI1NCwgMTk3LCAxLCAyNTMsIDE0NCwgOTEsIDI1NCwgMTk3LCAxLCA2NiwgOTEsIDI1NCwgMTk3LCAKLSAgICAxLCAyNTIsIDIyMCwgOTEsIDI1NCwgMTk3LCAxLCA3MywgOTEsIDI1NCwgMTk3LCAxLCAyNTMsIDcxLCA5MSwgMjU0LCAxOTcsIAotICAgIDEsIDcyLCA5MSwgMjU0LCAxOTcsIDEsIDI0OCwgMjQxLCA5MSwgMjU0LCAxOTcsIDEsIDI1MiwgMjIxLCA5MSwgMjU0LCAKLSAgICAxOTcsIDEsIDIzNSwgMTAxLCA5MSwgMjU0LCAxOTcsIDEsIDIzNSwgMTAyLCA5MSwgMjU0LCAxOTcsIDEsIDIzNSwgMjI3LCAKLSAgICA5MSwgMjU0LCAxOTcsIDEsIDIzNSwgMTAzLCA5MSwgMjU0LCAxOTcsIDEsIDIzNSwgMjI4LCAxMzksIDkxLCAxNDQsIDEsIAotICAgIDIwMSwgMjUzLCAzNSwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI1MywgMzUsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAxNzcsIAotICAgIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNTMsIDgzLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjQ2LCAxNjksIDEzOSwgOTEsIAotICAgIDE0NCwgMSwgMTg0LCAxNzcsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyNTMsIDgzLCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgCi0gICAgMjQ2LCAxNjksIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNDYsIDIxNiwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgMjA0LCAKLSAgICAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMTkxLCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjQ2LCAyMTYsIDEzOSwgOTEsIDE0NCwgCi0gICAgMSwgMTg0LCAyNTIsIDIwNCwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDE5MSwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgCi0gICAgMjAyLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjQ2LCAxNzMsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNTIsIDIwMSwgMTM5LCAKLSAgICA5MSwgMTQ0LCAxLCAxODQsIDI1MiwgMjAyLCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjQ2LCAxNzMsIDEzOSwgOTEsIDE0NCwgCi0gICAgMSwgMTg0LCAyNTIsIDIwMSwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDIxMywgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI0NiwgCi0gICAgMTgyLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMTk4LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjEzLCAxMzksIDkxLCAxNDQsIAotICAgIDEsIDE4NCwgMjQ2LCAxODIsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAxOTgsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNTIsIAotICAgIDIzNCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgMjQzLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUyLCAyMDAsIDEzOSwgCi0gICAgOTEsIDE0NCwgMSwgMTg0LCAyNTIsIDIzNCwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI1MiwgMjQzLCAxMzksIDkxLCAxNDQsIAotICAgIDEsIDE4NCwgMjUyLCAyMDAsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAxNTQsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNTIsIAotICAgIDIwMywgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MiwgMjExLCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMTU0LCAxMzksIDkxLCAKLSAgICAxNDQsIDEsIDE4NCwgMjUyLCAyMDMsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyNTIsIDIxMSwgMTM5LCA5MSwgMTQ0LCAxLCAKLSAgICAyMDEsIDI0OCwgODcsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNDgsIDE5NSwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDI0OCwgCi0gICAgODcsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyNDgsIDE5NSwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMzEsIDIzMSwgMTQyLCAKLSAgICAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTIsIDIxMiwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjUyLCAyMTYsIDEzOSwgOTEsIAotICAgIDE0NCwgMzEsIDUsIDY2LCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTIsIDIyNCwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgNzIsIAotICAgIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1MywgNCwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgNzMsIDEzOSwgOTEsIDE0NCwgMzEsIAotICAgIDUsIDI1MywgMjUzLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTMsIDcxLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTMsIDExNCwgCi0gICAgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjQ4LCAyMjYsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1NCwgMTUsIDEzOSwgOTEsIAotICAgIDE0NCwgMzEsIDUsIDI1NCwgMTIzLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTEsIDk1LCAxMzksIDkxLCAxNDQsIDMxLCA1LCAKLSAgICAyNTIsIDUxLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNTMsIDIzNCwgMTM5LCA5MSwgMTQ0LCAxLCAzNSwgMTk2LCAxMzksIAotICAgIDkxLCAxNDQsIDEsIDM1LCAyNTMsIDY5LCAxMzksIDkxLCAxNDQsIDEsIDM1LCAxOTksIDEzOSwgOTEsIDE0NCwgMSwgMzUsIAotICAgIDE4NSwgMTM5LCA5MSwgMTQ0LCAxLCAzNSwgMjU0LCAxODYsIDEzOSwgOTEsIDE0NCwgMSwgMzUsIDIyMiwgMjIyLCAxMzksIAotICAgIDkxLCAxNDQsIDEsIDM1LCAyNTQsIDE4NSwgMTM5LCA5MSwgMTQ0LCAyMDYsIDIzNSwgMTkwLCAxMzksIDkxLCAxNDQsIDIwNiwgCi0gICAgMjM1LCAxOTEsIDEzOSwgOTEsIDE0NCwgMjEsIDI0MCwgMTI2LCAxMzksIDkxLCAxNDQsIDIxLCAxMTgsIDEzOSwgOTEsIAotICAgIDE0NCwgMjEsIDExMywgMTM5LCA5MSwgMTQ0LCAyMSwgMTY2LCAxMzksIDkxLCAxNDQsIDIxLCAxNTgsIDEzOSwgOTEsIDE0NCwgCi0gICAgMjEsIDE3MywgMTM5LCA5MSwgMTQ0LCAyMSwgMTgzLCAxMzksIDkxLCAxNDQsIDIxLCAxOTQsIDEzOSwgOTEsIDE0NCwgMjEsIAotICAgIDE4NywgMTM5LCA5MSwgMTQ0LCAyMSwgMTkyLCAxMzksIDkxLCAxNDQsIDUsIDI1MCwgMjA0LCAxMzksIDkxLCAxNDQsIDUsIAotICAgIDI0NCwgODcsIDcxLCAxNCwgMjMwLCA4OCwgNzEsIDE0LCAyNDgsIDEwNCwgMjQwLCAxNjQsIDcxLCAxNCwgMjUzLCAxODksIAotICAgIDI0MCwgMTY0LCA3MSwgMTQsIDI1MywgMjA4LCAyNDAsIDE2NCwgNzEsIDE0LCAyNDgsIDEsIDI0MCwgMTY0LCA3MSwgMTQsIAotICAgIDI0OCwgMTM1LCAyNDAsIDE2NCwgNzEsIDE0LCAyMzIsIDM3LCAyNDAsIDE2NCwgNzEsIDE0LCAyMzMsIDIzMCwgMjQwLCAKLSAgICAxNjQsIDcxLCAxNCwgMjMzLCAyMjksIDI0MCwgMTY0LCA3MSwgMTQsIDIzMiwgMzYsIDI0MCwgMTY0LCA3MSwgMTQsIDI1MywgCi0gICAgMjE0LCAyNDAsIDE2NCwgNzEsIDE0LCAyMzMsIDE5OCwgMjQwLCAxNjQsIDcxLCAxNCwgMjM1LCAxNjIsIDI0MCwgMTY0LCAKLSAgICA3MSwgMTQsIDIzNSwgMTYxLCAyNDAsIDE2NCwgNzEsIDE0LCAyMzMsIDE5NywgMjQwLCAxNjQsIDcxLCAxNCwgMjMzLCAxOTksIAotICAgIDI0MCwgMTY0LCA3MSwgMTQsIDIzMSwgMTgzLCA3MSwgMTQsIDI0OCwgMTA0LCAyNDYsIDIxMSwgNzEsIDE0LCAyNTMsIDE4OSwgCi0gICAgMjQ2LCAyMTEsIDcxLCAxNCwgMjUzLCAyMDgsIDI0NiwgMjExLCA3MSwgMTQsIDI0OCwgMSwgMjQ2LCAyMTEsIDcxLCAxNCwgCi0gICAgMjQ4LCAxMzUsIDI0NiwgMjExLCA3MSwgMTQsIDIzMiwgMzcsIDI0NiwgMjExLCA3MSwgMTQsIDIzMywgMjMwLCAyNDYsIAotICAgIDIxMSwgNzEsIDE0LCAyMzMsIDIyOSwgMjQ2LCAyMTEsIDcxLCAxNCwgMjMyLCAzNiwgMjQ2LCAyMTEsIDcxLCAxNCwgMjUzLCAKLSAgICAyMTQsIDI0NiwgMjExLCA3MSwgMTQsIDIzMywgMTk4LCAyNDYsIDIxMSwgNzEsIDE0LCAyMzUsIDE2MiwgMjQ2LCAyMTEsIAotICAgIDcxLCAxNCwgMjM1LCAxNjEsIDI0NiwgMjExLCA3MSwgMTQsIDIzMywgMTk3LCAyNDYsIDIxMSwgNzEsIDE0LCAyMzMsIDE5OSwgCi0gICAgMjQ2LCAyMTEsIDIzMywgNzMsIDEsIDE3NywgMjMzLCA3MywgMSwgMjUyLCAyMDUsIDIzMywgNzMsIDEsIDI0NiwgMTY5LCAKLSAgICAyMzMsIDczLCAxLCAyNDQsIDIxNywgMjMzLCA3MywgMSwgMjEzLCAyMzMsIDczLCAxLCAyNTIsIDIxMSwgMjMzLCA3MywgMSwgCi0gICAgMTk4LCAyMzMsIDczLCAxLCAyNDgsIDEwMiwgMjMzLCA3MywgMSwgMjUyLCAyMDIsIDIzMywgNzMsIDEsIDI1MiwgMjAzLCAKLSAgICAyMzMsIDczLCAxLCAyNTIsIDIwMSwgMjMzLCA3MywgMSwgMjQ4LCAxMTcsIDIzMywgNzMsIDEsIDI1MiwgMjE1LCAyMzMsIAotICAgIDczLCAxLCAyNTIsIDIxMywgMjMzLCA3MywgMSwgMjQ2LCAxODEsIDIzMywgNzMsIDEsIDI0NSwgMTksIDIzMywgNzMsIDEsIAotICAgIDE5MSwgMjMzLCA3MywgMSwgMjA4LCAyMzMsIDczLCAxLCAyNTIsIDIwMCwgMjMzLCA3MywgMSwgMjUyLCAyNDMsIDIzMywgCi0gICAgNzMsIDEsIDI1MiwgMjA0LCAyMzMsIDczLCAxLCA1NywgMjMzLCA3MywgMSwgMTU0LCAyMzMsIDczLCAzMSwgNSwgNzQsIAotICAgIDIzMywgNzMsIDMxLCA1LCA2NiwgMjMzLCA3MywgMzEsIDUsIDcyLCAyMzMsIDczLCAzMSwgNSwgNzMsIDIzMywgNzMsIDMxLCAKLSAgICA1LCAyNTMsIDQsIDIzMywgNzMsIDIzNCwgMTgxLCAyMzMsIDczLCAyNTIsIDI1NSwgMTA2LCAyMzMsIDE0NCwgODUsIDUsIAotICAgIDI1MywgMTk4LCAyMzksIDIyMywgODUsIDUsIDI1MywgMTk4LCAyMzYsIDIwLCA4NSwgNSwgMjM4LCAxNDIsIDg1LCA1LCAKLSAgICAyMzUsIDIxNywgODUsIDUsIDIzOCwgMTI0LCA4NSwgMSwgMjM4LCA5MiwgODUsIDEsIDI0MiwgNTAsIDIzNSwgNDgsIDg1LCAKLSAgICAxLCAyMzksIDM5LCA4NSwgMSwgMjQ0LCA1LCAyMzUsIDQ4LCA4NSwgMSwgMjQwLCA2NSwgODUsIDEsIDI0NiwgMzEsIDIzNSwgCi0gICAgNDgsIDg1LCAxLCAyNTQsIDIyNCwgMjQxLCA2NiwgODUsIDEsIDI1NCwgMjI0LCAyNDcsIDE5OSwgMjM1LCA0OCwgODUsIDEsIAotICAgIDI1NCwgMjI5LCAyMzgsIDIwLCA4NSwgMSwgMjU0LCAyMjksIDI0MSwgMTgwLCAyMzUsIDQ4LCA4NSwgMSwgMjM4LCAxOTgsIAotICAgIDg1LCAxLCAyMzUsIDI0MiwgODUsIDEsIDIzOSwgMTcyLCA4NSwgMSwgMjQ1LCA1MywgMjM1LCA0OCwgODUsIDEsIDE3NywgCi0gICAgODUsIDEsIDE4OCwgMjMwLCAxNjgsIDg1LCAxLCAyNTIsIDIwNSwgODUsIDEsIDI1NCwgMjQ4LCAyNDMsIDE1MywgODUsIDEsIAotICAgIDI0NiwgMTY5LCA4NSwgMSwgMjUyLCAyMTUsIDg1LCAxLCAyNTUsIDIxLCAyNDQsIDg1LCA4NSwgMSwgMjUyLCAyMTMsIDg1LCAKLSAgICAxLCAyNTUsIDMzLCAyNDQsIDE1LCA4NSwgMSwgMjQ2LCAxODEsIDg1LCAxLCAyNTQsIDIxNCwgMjM5LCA4MSwgODUsIDEsIAotICAgIDI1NCwgMjE0LCAyNDEsIDUyLCAyMzAsIDE2OCwgODUsIDEsIDI1NCwgMjE4LCAyNDEsIDUyLCAyMzAsIDIyMywgODUsIDEsIAotICAgIDI1NCwgMjE4LCAyNDEsIDUyLCAyMzAsIDE2OCwgODUsIDEsIDI1NSwgMTMsIDIzNiwgMTk5LCA4NSwgMSwgMjUyLCAyMDIsIAotICAgIDg1LCAxLCAyNTQsIDIxNCwgMjQ1LCAyMzgsIDg1LCAxLCAyNTIsIDIwMywgODUsIDEsIDI1NCwgMjE4LCAyNDQsIDExNSwgCi0gICAgODUsIDEsIDI1MiwgMjAxLCA4NSwgMSwgMjEzLCA4NSwgMSwgMjU0LCAyNDIsIDIzOSwgNTYsIDg1LCAxLCAyNTIsIDIxMSwgCi0gICAgODUsIDEsIDI1NSwgMTksIDIzNCwgMTM4LCA4NSwgMSwgMTk4LCA4NSwgMSwgMTkxLCA4NSwgMSwgMjA4LCA4NSwgMSwgMjUyLCAKLSAgICAyMDAsIDg1LCAxLCAyNTIsIDIwOCwgODUsIDEsIDI1NSwgMTUsIDI0NSwgMTQ3LCA4NSwgMSwgMjU1LCAxNSwgMjQ1LCAxNTEsIAotICAgIDg1LCAxLCAyNTIsIDIwNCwgODUsIDEsIDE1NCwgODUsIDUsIDIzNCwgMjA3LCA4NSwgMzEsIDUsIDIzNSwgNDgsIDg1LCAzMSwgCi0gICAgNSwgMjUyLCA1MiwgODUsIDMxLCA1LCAyNTMsIDE5OCwgMjQ1LCAxNTIsIDg1LCAzMSwgNSwgMjQ1LCAyMjMsIDg1LCAzMSwgCi0gICAgNSwgMjUxLCAyNDEsIDI0NCwgNiwgODUsIDMxLCA1LCAyNTQsIDIyNCwgMjQxLCA2NiwgODUsIDMxLCA1LCAyNTQsIDIyNCwgCi0gICAgMjQ3LCAxOTksIDIzNSwgNDgsIDg1LCAzMSwgNSwgMjU0LCAyMjksIDIzOCwgMjAsIDg1LCAzMSwgNSwgMjU0LCAyMjksIAotICAgIDI0MSwgMTgwLCAyMzUsIDQ4LCA4NSwgMzEsIDUsIDIzNiwgMjUzLCA4NSwgMzEsIDUsIDIzNywgMjE3LCAyNDEsIDY2LCA4NSwgCi0gICAgMzEsIDUsIDIzNywgMjE3LCAyMzUsIDQ4LCA4NSwgMzEsIDUsIDIzNywgMjE3LCAyNDcsIDE5OSwgMjM1LCA0OCwgODUsIDMxLCAKLSAgICA1LCAyMzksIDE5MSwgODUsIDMxLCA1LCAyNDUsIDY1LCAyMzUsIDQ4LCA4NSwgMjQ4LCAyMjksIDI0MiwgNDIsIDg1LCAxLCAKLSAgICAyNTIsIDIxNCwgMjM3LCAxMjgsIDg1LCAxLCAyNTAsIDE2MywgMjM3LCAxMjgsIDg1LCAxLCAyNTIsIDQ1LCAyMzcsIDEyOCwgCi0gICAgODUsIDEsIDI1NSwgMjMsIDIzNywgMTI4LCA4NSwgMSwgMjU0LCAyNTQsIDIzNywgMTI4LCA4NSwgMSwgMjU0LCAxNzcsIAotICAgIDIzNywgMTI4LCA4NSwgMSwgMjM4LCAxMDksIDIzNywgMTI4LCA4NSwgMjEsIDI0MCwgMTI2LCA4NSwgMjEsIDExOCwgODUsIAotICAgIDIxLCAxMTMsIDg1LCAyMSwgMTY2LCA4NSwgMjEsIDE1OCwgODUsIDIxLCAxNzMsIDg1LCAyMSwgMTgzLCA4NSwgMjEsIDE5NCwgCi0gICAgODUsIDIxLCAxODcsIDg1LCAyMSwgMTkyLCA4NSwgMjM5LCAxODAsIDg1LCAyMzYsIDE4MywgODUsIDI0MCwgODUsIDg1LCAKLSAgICAyNDEsIDI4LCAyMzEsIDExNSwgODUsIDI0MSwgMjgsIDI0NSwgMTg2LCA4NSwgMjQxLCAyOCwgMjM0LCAxODcsIDg1LCAyMzIsIAotICAgIDIzOSwgODUsIDIzLCAxNCwgMjQzLCA3NywgODUsIDIzLCAxNCwgMjQzLCA1OCwgODUsIDIzLCAxNCwgMjQzLCA4NSwgODUsIAotICAgIDIzLCAxNCwgMjQxLCAxMTcsIDg1LCAyMywgMTQsIDI0OCwgMTgsIDIzNSwgMjE3LCA4NSwgMjMsIDE0LCAyNDMsIDcwLCA4NSwgCi0gICAgMjMsIDE0LCAyMzgsIDE2NiwgODUsIDIzLCAxNCwgMjM4LCAxODMsIDg1LCAyMywgMTQsIDIzOCwgMTY4LCA4NSwgMjMsIDE0LCAKLSAgICAyNDgsIDE4LCAyNDMsIDEyMiwgODUsIDIzLCAxNCwgMzYsIDI0MCwgMzEsIDg1LCAyMywgMTQsIDM2LCAyMzgsIDIwMSwgODUsIAotICAgIDIzLCAxNCwgMzYsIDIzNiwgMTIwLCA4NSwgMjMsIDE0LCAzNiwgMjM2LCAxMTksIDg1LCAyMywgMTQsIDM2LCAyMzMsIDE2OSwgCi0gICAgODUsIDIzLCAxNCwgMzYsIDIzOSwgNjQsIDIsIDIzMywgMTY5LCA4NSwgMjMsIDE0LCAzNiwgMjM5LCA2MywgMiwgMjMzLCAKLSAgICAxNjksIDg1LCAyMywgMTQsIDM2LCAyMzgsIDEyMSwgODUsIDIzLCAxNCwgMzYsIDI0MywgMTUyLCA4NSwgMjMsIDE0LCAyMzAsIAotICAgIDE1OCwgMjQ2LCAxNTcsIDI0NywgMTMzLCA4NSwgMjMsIDE0LCAyMzAsIDE1OCwgMjQ2LCAxNTcsIDI0OCwgMTcsIDg1LCAyMywgCi0gICAgMTQsIDIzMCwgMTU4LCAyMzcsIDU4LCAyNDgsIDE4MywgODUsIDIzLCAxNCwgMjMwLCAxNTgsIDIzNywgNTgsIDI1MiwgNCwgCi0gICAgODUsIDIzLCAxNCwgMjMxLCAyMzIsIDI0NiwgMTU3LCAyNDUsIDYwLCA4NSwgMjMsIDE0LCAyMzEsIDIzMiwgMjQ2LCAxNTcsIAotICAgIDI0NSwgODMsIDg1LCAyMywgMTQsIDIzMSwgMjMyLCAyMzcsIDU4LCAyNDUsIDc2LCA4NSwgMjMsIDE0LCAyMzEsIDIzMiwgCi0gICAgMjM3LCA1OCwgMjQ1LCA3OSwgODUsIDIzLCAxNCwgMjMxLCAyMzIsIDI0NiwgMTU3LCAyNDEsIDYyLCAyMjAsIDUsIDIzMiwgCi0gICAgMjQ0LCAyMjAsIDUsIDIzMSwgMTE2LCAyMjAsIDUsIDIzMSwgMTE3LCAyMjAsIDEsIDU3LCAyMjAsIDEsIDc0LCAyMjAsIDEsIAotICAgIDY2LCAyMjAsIDEsIDI1MywgNCwgMjIwLCAxLCA3MywgMjIwLCAxLCA3MiwgMjIwLCAxLCAyNTMsIDEwMCwgMjIwLCAxLCAKLSAgICAxNzcsIDIyMCwgMSwgMjUzLCAzNSwgMjIwLCAxLCAyNTIsIDIwNSwgMjIwLCAxLCAyNDYsIDE2OSwgMjIwLCAxLCAyNTIsIAotICAgIDIxNSwgMjIwLCAxLCAyNTIsIDIxMywgMjIwLCAxLCAyNTIsIDIyNiwgMjIwLCAxLCAyNDYsIDE4MSwgMjIwLCAxLCAyNTIsIAotICAgIDIwMiwgMjIwLCAxLCAyNTIsIDIwMywgMjIwLCAxLCAyNTIsIDIwMSwgMjIwLCAxLCAyMTMsIDIyMCwgMSwgMjUyLCAyMzQsIAotICAgIDIyMCwgMSwgMjUyLCAyNDMsIDIyMCwgMSwgMjUyLCAyMTEsIDIyMCwgMSwgMTk4LCAyMjAsIDEsIDE5MSwgMjIwLCAxLCAKLSAgICAyMDgsIDIyMCwgMSwgMjUyLCAyMDAsIDIyMCwgMSwgMjUyLCAyMDgsIDIyMCwgMSwgMjUyLCAyMDQsIDIyMCwgMSwgMjUzLCAKLSAgICA4MywgMjIwLCAxLCAxNTQsIDIyMCwgMjMxLCAxOTQsIDUsIDIzMSwgMTE0LCAyMjAsIDIzMSwgMTk0LCA1LCAyMzIsIDI0MywgCi0gICAgMjIwLCAyMzEsIDE5NCwgNSwgMjM0LCAxODQsIDIyMCwgMzEsIDUsIDIzMiwgMjQxLCAyMjAsIDMxLCA1LCAyMzQsIDE4NSwgCi0gICAgMjIwLCAzMSwgNSwgMjMwLCA4NiwgMjIwLCAzMSwgNSwgMjMyLCAyNDIsIDIyMCwgMzEsIDUsIDIzNCwgMTgzLCAyMjAsIDMxLCAKLSAgICA1LCAyMzAsIDg3LCAyMjAsIDUsIDIzNCwgMTgyLCAyMjAsIDEsIDI0NiwgMTc4LCAyMjAsIDEsIDI1MSwgMjQ4LCAyMjAsIAotICAgIDIxLCAyNDAsIDEyNiwgMjIwLCAyMSwgMTE4LCAyMjAsIDIxLCAxMTMsIDIyMCwgMjEsIDE2NiwgMjIwLCAyMSwgMTU4LCAKLSAgICAyMjAsIDIxLCAxNzMsIDIyMCwgMjEsIDE4MywgMjIwLCAyMSwgMTk0LCAyMjAsIDIxLCAxODcsIDIyMCwgMjEsIDE5MiwgCi0gICAgMTU2LCAxLCAxNzcsIDE1NiwgMSwgMjUwLCAxNzUsIDE1NiwgMSwgMjQ2LCAxNzgsIDE1NiwgMSwgMjUyLCAyMDUsIDE1NiwgCi0gICAgMSwgMjUwLCAzNSwgMTU2LCAxLCAyNDYsIDE2OSwgMTU2LCAxLCAyNTIsIDIxNSwgMTU2LCAxLCAyNDYsIDE3NiwgMTU2LCAxLCAKLSAgICAyNTIsIDIxMywgMTU2LCAxLCAyNDYsIDE4MSwgMTU2LCAxLCAyNTIsIDIwMiwgMTU2LCAxLCAyNDYsIDE3MywgMTU2LCAxLCAKLSAgICAyNTIsIDIwMywgMTU2LCAxLCAyNTIsIDIwMSwgMTU2LCAxLCAyMTMsIDE1NiwgMSwgMjQ4LCAxMzMsIDE1NiwgMSwgMjQ2LCAKLSAgICAxODIsIDE1NiwgMSwgMjUyLCAyMzQsIDE1NiwgMSwgMjQ5LCAyNTMsIDE1NiwgMSwgMjUyLCAyMTEsIDE1NiwgMSwgMjQ5LCAKLSAgICAxMjQsIDE1NiwgMSwgMTk4LCAxNTYsIDEsIDI1MSwgMjAsIDE1NiwgMSwgMjQ2LCAyMTYsIDE1NiwgMSwgMjQwLCAyNDAsIAotICAgIDE1NiwgMSwgMjQ2LCAyNTQsIDE1NiwgMSwgMTkxLCAxNTYsIDEsIDIwOCwgMTU2LCAxLCAyNTIsIDIwMCwgMTU2LCAxLCAKLSAgICAxNTQsIDE1NiwgMSwgMjQ4LCA2MSwgMTU2LCAxLCAyNTIsIDI0MywgMTU2LCAxLCAyNTIsIDIwNCwgMTU2LCAxLCAyNDYsIAotICAgIDE2NSwgMTU2LCAxLCAyNTIsIDIwOCwgMTU2LCAxLCA1NywgMTU2LCAyMzEsIDE4OSwgMSwgMTkxLCAxNTYsIDIzMSwgMTg5LCAKLSAgICAxLCAyMDgsIDE1NiwgMzEsIDUsIDI1MiwgMjEyLCAxNTYsIDMxLCA1LCA3NCwgMTU2LCAzMSwgNSwgNzMsIDE1NiwgMzEsIDUsIAotICAgIDI1MiwgMjIwLCAxNTYsIDMxLCA1LCA2NiwgMTU2LCAzMSwgNSwgMjUyLCAyMjQsIDE1NiwgMzEsIDUsIDcyLCAxNTYsIDIzMSwgCi0gICAgMTk0LCA1LCAyNTQsIDE4NiwgMTU2LCAyMzEsIDE5NCwgNSwgMTg1LCAxNTYsIDIzMSwgMTk0LCA1LCAxNDksIDE1NiwgMjMxLCAKLSAgICAxOTQsIDUsIDE5OSwgMTU2LCAyMzEsIDE5NCwgNSwgMjU0LCAxODcsIDE1NiwgMjMxLCAxOTQsIDUsIDE0NiwgMTU2LCAyMzEsIAotICAgIDE5NCwgNSwgMjU0LCAxODMsIDE1NiwgMjMxLCAxOTQsIDUsIDIzNCwgMTcyLCAxNTYsIDIzMSwgMTk0LCA1LCAyNDQsIDQ4LCAKLSAgICAxNTYsIDUsIDI1MSwgMTczLCAxNTYsIDUsIDIzNywgMTI1LCAxNTYsIDIyOSwgMTYxLCAyMzUsIDIxOCwgMTU2LCAyMjksIAotICAgIDE2MSwgMjUxLCA4NSwgMjQwLCA0MSwgMjM1LCAyMTgsIDE1NiwgMjI5LCAxNjEsIDIzNSwgMTU2LCAxNTYsIDIyOSwgMTYxLCAKLSAgICAyNDAsIDUwLCAyMzUsIDE1NiwgMTU2LCAyMjksIDE2MSwgMjM3LCAxMCwgMTU2LCAyMSwgMjQwLCAxMjYsIDE1NiwgMjEsIAotICAgIDExOCwgMTU2LCAyMSwgMTEzLCAxNTYsIDIxLCAxNjYsIDE1NiwgMjEsIDE1OCwgMTU2LCAyMSwgMTczLCAxNTYsIDIxLCAKLSAgICAxODMsIDE1NiwgMjEsIDE5NCwgMTU2LCAyMSwgMTg3LCAxNTYsIDIxLCAxOTIsIDE1NiwgMSwgMjQ2LCAxOTEsIDE1NiwgMSwgCi0gICAgMjQwLCAxNTAsIDE1NiwgMSwgMjQ2LCAxOTIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIDI0MCwgMTI2LCAyNTQsIDE4OSwgCi0gICAgMjQwLCAxMjIsIDIxLCAxMTgsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIDExMywgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgCi0gICAgMTY2LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDIxLCAxNTgsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIDE3MywgMjU0LCAxODksIAotICAgIDI0MCwgMTIyLCAyMSwgMTgzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDIxLCAxOTQsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjEsIAotICAgIDE4NywgMjU0LCAxODksIDI0MCwgMTIyLCAyMSwgMTkyLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1MiwgMjAwLCAyNTQsIAotICAgIDE4OSwgMjQwLCAxMjIsIDEsIDI1MywgMTEzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1NCwgMjQsIDI1NCwgMTg5LCAKLSAgICAyNDAsIDEyMiwgMSwgMjQ3LCA5LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1MywgMTEyLCAyNTQsIDE4OSwgMjQwLCAxMjIsIAotICAgIDEsIDI0NywgMTY2LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OCwgMjIzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OCwgCi0gICAgMjIyLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OCwgMjI0LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OCwgMjI1LCAKLSAgICAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1MywgNDIsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCAxODIsIDI1NCwgCi0gICAgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCAyMzAsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUwLCAxMjAsIDI1NCwgMTg5LCAKLSAgICAyNDAsIDEyMiwgMSwgMjUzLCAxNDksIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCAyMiwgMjU0LCAxODksIDI0MCwgCi0gICAgMTIyLCAxLCAyNTQsIDE2MywgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTMsIDQ1LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIAotICAgIDI0OCwgMTg4LCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI1NCwgMTUsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgMjUzLCA4MCwgCi0gICAgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTQsIDUxLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OSwgMjIzLCAyNTQsIAotICAgIDE4OSwgMjQwLCAxMjIsIDEsIDI1MiwgMjMyLCAyNTQsIDE4OSwgMjQwLCAxMjIsIDEsIDI0OCwgMzQsIDI1NCwgMTg5LCAKLSAgICAyNDAsIDEyMiwgMSwgMjUzLCA0OSwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTEsIDEwMCwgMjU0LCAxODksIDI0MCwgCi0gICAgMTIyLCAxLCAyNTQsIDEyMSwgMjU0LCAxODksIDI0MCwgMTIyLCAxLCAyNTQsIDAsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMSwgCi0gICAgMjUzLCAxODcsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjU0LCAyMDcsIDIzNCwgMjUzLCAyNTQsIDE4OSwgMjQwLCAxMjIsIAotICAgIDIzNiwgODgsIDIzMiwgNjAsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjMxLCAxMDUsIDIzMiwgNjAsIDI1NCwgMTg5LCAyNDAsIAotICAgIDEyMiwgMjM5LCAyMTgsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjMyLCAyNDksIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjQyLCA0NSwgCi0gICAgMjU0LCAxODksIDI0MCwgMTIyLCAyMjksIDE2MSwgMjM1LCAxOTMsIDI1NCwgMTg5LCAyNDAsIDEyMiwgMjI5LCAxNjEsIDQ3LCAKLSAgICAyMzUsIDE5MywgNywgMSwgMywgNiwgNTcsIDcsIDEsIDMsIDYsIDI1MywgNCwgNywgMywgMSwgMjA5LCAyNTMsIDQsIDcsIDEsIAotICAgIDMsIDYsIDIzNywgMTE4LCAyNTQsIDE4NSwgNywgMSwgMywgNiwgMjU0LCAxOTQsIDcsIDEsIDMsIDYsIDIyMiwgMjIyLCA3LCAKLSAgICAxLCAzLCA2LCAyNDYsIDI0MiwgNywgMSwgMywgNiwgNzIsIDcsIDMsIDEsIDIwOSwgMjQ2LCAxNTcsIDcyLCA3LCAzLCAxLCAKLSAgICAyMDksIDc0LCA3LCAxLCAzLCA2LCAyNTQsIDE5MiwgNywgMSwgMywgNiwgMjU0LCAxODYsIDcsIDEsIDMsIDYsIDI1NSwgNTgsIAotICAgIDIsIDgyLCA3LCAxLCAzLCA2LCAxODUsIDcsIDEsIDMsIDYsIDIwMCwgMTk5LCA3LCAxLCAzLCA2LCA3MywgNywgMSwgMywgNiwgCi0gICAgMjQ2LCAxNTcsIDczLCA3LCAzLCAxLCAyMzMsIDExNiwgNzMsIDcsIDMsIDEsIDIzMywgMTE2LCAyNDYsIDE1NywgNzMsIDcsIAotICAgIDMsIDEsIDIzMywgMTE2LCAxMzAsIDIsIDgyLCA3LCAzLCAxLCAyMDksIDI1MywgMTUsIDcsIDEsIDMsIDYsIDI1MywgMTE5LCAKLSAgICA3LCAzLCAxLCAyNTIsIDIyOCwgMTMyLCA3MywgNywgMywgMSwgMjM3LCA1OSwgMTMyLCA3MywgNywgMSwgMywgNiwgMjU0LCAKLSAgICAxODcsIDcsIDEsIDMsIDYsIDIwMCwgMTQ2LCA3LCAxLCAzLCA2LCAyMDksIDE0NiwgNywgMSwgMywgNiwgMjU0LCAxODMsIDcsIAotICAgIDEsIDMsIDYsIDY2LCA3LCAzLCAxLCAyMzMsIDExNiwgNjYsIDcsIDMsIDEsIDIzMywgMTE2LCAyMjksIDI0NywgNjYsIDcsIAotICAgIDMsIDEsIDIzMywgMTE2LCAyMDksIDE4NSwgNywgMSwgMywgNiwgMTk2LCA3LCAxLCAzLCA2LCAyNTQsIDE5NSwgNywgMSwgMywgCi0gICAgNiwgMjU0LCAxOTMsIDcsIDEsIDMsIDYsIDI0NywgNzQsIDcsIDEsIDIzNywgMTA3LCAyMzIsIDIxOCwgMjM0LCAyMjcsIDcsIAotICAgIDEsIDI0NiwgMjI0LCAxOSwgMSwgMywgNiwgMjM3LCA2MSwgMTksIDEsIDMsIDYsIDIzNywgODIsIDE5LCAxLCAzLCA2LCAKLSAgICAyNTIsIDIyMywgMTksIDEsIDMsIDYsIDI0NiwgMjA5LCAxOSwgMSwgMywgNiwgMjQ2LCAyMDQsIDI4LCAxLCAzLCA2LCAyNTMsIAotICAgIDU4LCA1MiwgMSwgNiwgNTcsIDUyLCAxLCA2LCAyNTMsIDQsIDUyLCAxLCA2LCAyNTQsIDE4NSwgNTIsIDEsIDYsIDIzNywgCi0gICAgMTE4LCAyNTQsIDE4NSwgNTIsIDEsIDYsIDIyMiwgMjIyLCA1MiwgMSwgNiwgNzIsIDUyLCAxLCA2LCAyMDAsIDcyLCA1MiwgCi0gICAgMSwgNiwgMjE0LCA1MiwgMSwgNiwgMjEyLCA1MiwgMSwgNiwgNzQsIDUyLCAxLCA2LCAyNTQsIDE5MiwgNTIsIDEsIDYsIAotICAgIDI1NCwgMTg2LCA1MiwgMSwgNiwgMTQ5LCA1MiwgMSwgNiwgMTg1LCA1MiwgMSwgNiwgMTk5LCA1MiwgMSwgNiwgMjAwLCAKLSAgICAxOTksIDUyLCAxLCA2LCA3MywgNTIsIDEsIDYsIDI1MywgMTE5LCA1MiwgMSwgNiwgMjU0LCAxODcsIDUyLCAxLCA2LCAxNDYsIAotICAgIDUyLCAxLCA2LCAyNTQsIDE4MywgNTIsIDEsIDYsIDY2LCA1MiwgMSwgNiwgMjU0LCAxOTUsIDUyLCAxLCAzLCA1NywgNTIsIAotICAgIDEsIDMsIDIwOSwgNTcsIDUyLCAxLCAzLCAyMzcsIDcxLCA1MiwgMSwgMywgMjA5LCAyNTMsIDQsIDUyLCAxLCAzLCAyNTQsIAotICAgIDE4NSwgNTIsIDEsIDMsIDIyMiwgMjIyLCA1MiwgMSwgMywgNzIsIDUyLCAxLCAzLCAyMzcsIDE0NCwgNTIsIDEsIDMsIDI0NiwgCi0gICAgMTU3LCA3MiwgNTIsIDEsIDMsIDIwOSwgMjQ2LCAxNTcsIDcyLCA1MiwgMSwgMywgMjE0LCA1MiwgMSwgMywgMjA5LCA3NCwgCi0gICAgNTIsIDEsIDMsIDI1NCwgMTg2LCA1MiwgMSwgMywgMTg1LCA1MiwgMSwgMywgMjQ3LCAwLCA1MiwgMSwgMywgNzMsIDUyLCAxLCAKLSAgICAzLCAyNDYsIDE1NywgNzMsIDUyLCAxLCAzLCAyNTIsIDIyOCwgMTMyLCA3MywgNTIsIDEsIDMsIDIzNywgNTksIDEzMiwgNzMsIAotICAgIDUyLCAxLCAzLCAyNTQsIDE4NywgNTIsIDEsIDMsIDI1NCwgMTgzLCA1MiwgMSwgMywgNjYsIDUyLCAxLCAzLCAyMzMsIDExNiwgCi0gICAgNjYsIDUyLCAxLCAzLCAyMDksIDE4NSwgNTIsIDEsIDMsIDE5NiwgNTIsIDEsIDMsIDI0NiwgMjI0LCA1MiwgMSwgMywgMjQwLCAKLSAgICAxNjAsIDUyLCAxLCAzLCAxOSwgMjM3LCA2MSwgNTIsIDEsIDMsIDIzNywgNzUsIDUyLCAxLCAzLCAxOSwgMjQ2LCAxOTgsIAotICAgIDUyLCAxLCAzLCAyNDYsIDIwMCwgNywgMjMxLCAxOTUsIDMsIDEsIDc0LCA3LCAyMzEsIDE5NSwgMywgMSwgMTQ2LCA3LCAKLSAgICAyMzEsIDE5NSwgMywgMSwgNjYsIDcsIDIzMSwgMTk1LCAzLCAxLCAxOTYsIDE5LCAyMzEsIDE5NSwgMywgMSwgMjQwLCAxNjAsIAotICAgIDE5LCAyMzEsIDE5NSwgMywgMSwgMjM3LCA2MSwgMTksIDIzMSwgMTk1LCAzLCAxLCAyNDYsIDIwOSwgMTksIDIzMSwgMTk1LCAKLSAgICAzLCAxLCAyNDYsIDE5OCwgMTksIDIzMSwgMTk1LCAzLCAxLCAyNDYsIDIwMCwgNywgMywgMSwgMjUzLCA3MSwgNywgMywgMSwgCi0gICAgNDUsIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA2MywgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDcyLCAKLSAgICAyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIDI1NSwgNjgsIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA2MCwgMiwgCi0gICAgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAyNTUsIDcwLCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIAotICAgIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA1NywgMiwgMjMzLCAyMDYsIDIyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIAotICAgIDI1NSwgNTksIDIsIDIzNywgNDQsIDIwNSwgNywgMywgMSwgMjU1LCA2MSwgMiwgMjM3LCA0NCwgMjA1LCA3LCAzLCAxLCAKLSAgICAyNTUsIDU2LCAyLCAyMzcsIDQ0LCAyMDUsIDcsIDMsIDEsIDIwOSwgMjE0LCA1MiwgMSwgMjgsIDI1MiwgMjMyLCA3LCAzLCAKLSAgICAxLCAyMzUsIDM4LCAyMTQsIDcsIDMsIDEsIDI1NSwgNDgsIDIsIDIyNywgMTgwLCA3LCAzLCA2LCAxLCAyNTUsIDU1LCAyLCAKLSAgICA4MiwgNywgMywgMSwgMjQ2LCAxNjgsIDIsIDgyLCA3LCAzLCAxLCAyNTUsIDcwLCAyLCA4MiwgNywgMywgNiwgMSwgOTcsIDIsIAotICAgIDgyLCA3LCAzLCAxLCAyMzUsIDIzLCAyLCA4MiwgNywgMywgMSwgNDUsIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIAotICAgIDYzLCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA3MiwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgNjUsIAotICAgIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA1OCwgMiwgCi0gICAgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgNjgsIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAyNTUsIDYwLCAyLCAyMzUsIAotICAgIDM2LCA4OCwgNywgMywgMSwgMjU1LCA3MCwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDIzNSwgMzYsIAotICAgIDg4LCA3LCAzLCAxLCAyNTUsIDU5LCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjUzLCAxNDYsIDIsIDIzNSwgMzYsIDg4LCAKLSAgICA3LCAzLCAxLCAyNTUsIDY5LCAyLCAyMzUsIDM2LCA4OCwgNywgMywgMSwgMjU1LCA3NCwgMiwgMjM1LCAzNiwgODgsIDcsIDMsIAotICAgIDEsIDI1NSwgNTYsIDIsIDIzNSwgMzYsIDg4LCA3LCAzLCAxLCAxMDIsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgMjQwLCAKLSAgICAxMjAsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgMSwgMjU1LCA2MywgMiwgMjQ2LCAxNzEsIDIyLCAyNDAsIDEzMywgNywgMywgCi0gICAgMSwgMTYxLCAyLCAyMzEsIDIwMSwgODgsIDcsIDMsIDEsIDI0NiwgMTU3LCAxNjEsIDIsIDIzMSwgMjAxLCA4OCwgNywgMywgCi0gICAgMSwgMjAwLCAyNDYsIDE1NywgMTYxLCAyLCAyMzEsIDIwMSwgODgsIDcsIDMsIDEsIDI0MSwgMTQsIDIsIDIzMSwgMjAxLCAKLSAgICA4OCwgNywgMywgMSwgMjU1LCA1NSwgMiwgMjMxLCAyMDEsIDg4LCA3LCAzLCAxLCAyNDYsIDE1NywgMTMwLCAyLCAyMzEsIAotICAgIDIwMSwgODgsIDcsIDMsIDEsIDI1MywgMTQ2LCAyLCAyMzEsIDIwMSwgODgsIDcsIDMsIDEsIDk3LCAyLCAyMzEsIDIwMSwgCi0gICAgODgsIDcsIDMsIDEsIDI1MywgMTAxLCAyLCAyMzEsIDIwMSwgODgsIDUyLCAxLCAzLCAyMDksIDIzNywgNzEsIDUyLCAxLCAzLCAKLSAgICAyNTQsIDE5NCwgNTIsIDEsIDMsIDI1NSwgNjIsIDIsIDI0MCwgMTY4LCA1MiwgMSwgMywgMjQ2LCAyNDIsIDUyLCAxLCAzLCAKLSAgICAyMDAsIDI0NiwgMTU3LCA3MiwgNTIsIDEsIDMsIDI1NCwgMTkxLCA1MiwgMSwgMywgMjM1LCA0NiwgMjU1LCA3MywgMiwgODIsIAotICAgIDUyLCAxLCAzLCA5NSwgMjE0LCA1MiwgMSwgMywgMjA5LCAyMTIsIDUyLCAxLCAzLCAyNTUsIDU1LCAyLCA4MiwgNTIsIDEsIAotICAgIDMsIDI0MCwgMTQ2LCA1MiwgMSwgMywgNiwgNzQsIDUyLCAxLCAzLCA2LCAyNTUsIDU1LCAyLCA4MiwgNTIsIDEsIDMsIDI1NSwgCi0gICAgNzMsIDIsIDIyNywgMjAwLCA1MiwgMSwgMywgMjU1LCA1OCwgMiwgMjMxLCAyMDEsIDg4LCA1MiwgMSwgMywgMjU1LCA1OCwgCi0gICAgMiwgMjM1LCAzNiwgODgsIDUyLCAxLCAzLCA2LCAxNDksIDUyLCAxLCAzLCAyNTUsIDY4LCAyLCA4OCwgNTIsIDEsIDMsIAotICAgIDIwOSwgMjU1LCA2OCwgMiwgMTgyLCAyNDcsIDMsIDUyLCAxLCAzLCAyNTUsIDYwLCAyLCA0MiwgODgsIDUyLCAxLCAzLCAKLSAgICAyNTUsIDYwLCAyLCAyMzEsIDIwMSwgODgsIDUyLCAxLCAzLCA2LCAxOTksIDUyLCAxLCAzLCAyMzcsIDExOCwgNzMsIDUyLCAKLSAgICAxLCAzLCAyNDYsIDE5OCwgNTIsIDEsIDMsIDI1NSwgNTksIDIsIDg4LCA1MiwgMSwgMywgMjQ2LCAyMzIsIDUyLCAxLCAzLCAKLSAgICAyNTUsIDYxLCAyLCAyMzUsIDM2LCA4OCwgNTIsIDEsIDMsIDk3LCAxMjUsIDUyLCAxLCAzLCAyMzMsIDkyLCA1MiwgMSwgMywgCi0gICAgNiwgNjYsIDUyLCAxLCAzLCAyNTUsIDY5LCAyLCA4OCwgNTIsIDEsIDMsIDIwOSwgMTk2LCA1MiwgMSwgMywgMjU0LCAxOTMsIAotICAgIDUyLCAxLCAzLCAyNTUsIDU2LCAyLCAyMzEsIDIwMSwgODgsIDUyLCAxLCAzLCAyNTUsIDU2LCAyLCAyNDAsIDE2OCwgNTIsIAotICAgIDEsIDMsIDI0NywgNzQsIDUyLCAxLCAzLCAyMzcsIDg5LCAzNiwgMjM3LCA1MCwgMjQwLCAxNjMsIDIzNSwgMjQsIDM2LCAKLSAgICAyMzcsIDUwLCAyNDAsIDE1OSwgMjM1LCAyNCwgMzYsIDI0NSwgMTkyLCA1MSwgMzYsIDIzMSwgMTUwLCA3NiwgMzYsIDIyNywgCi0gICAgMjUwLCAzNiwgMjI3LCAyNDEsIDM2LCAyMjcsIDI1MiwgMzYsIDIyNywgMjE1LCAzNiwgMjIyLCAyNDUsIDM2LCAyMjIsIAotICAgIDI0MywgMzYsIDcsIDMsIDEsIDI1NSwgNTcsIDUxLCAzNiwgMjI3LCAyMjEsIDM2LCAyMjcsIDI1MSwgMzYsIDQ3LCAyMzAsIAotICAgIDEyNSwgNDYsIDM2LCAyMzcsIDIwOCwgNDYsIDM2LCAyMzcsIDE3MCwgNTEsIDM2LCAyNTUsIDgsIDUxLCAzNiwgMjU0LCAKLSAgICAyNDQsIDQ2LCAzNiwgMjU1LCA1MiwgNDYsIDM2LCA3LCAzLCAxLCAyMzEsIDIzMCwgMjQ2LCAxNTcsIDEwMiwgNDYsIDM2LCAKLSAgICA3LCAzLCAxLCAyNTMsIDQsIDM2LCA3LCAzLCAxLCAyNTMsIDE2OCwgMzYsIDcsIDMsIDEsIDI1MywgMTY5LCAzNiwgNywgMywgCi0gICAgMSwgMjU1LCA2MiwgMjMzLCA3OSwgMzYsIDcsIDMsIDEsIDIzNSwgMzgsIDIyMiwgMjIyLCAzNiwgNywgMywgMSwgMjQ2LCAKLSAgICAyNDIsIDM2LCA3LCAzLCAxLCAyMTQsIDM2LCA3LCAxLCAzLCA2LCAyMTQsIDM2LCA3LCAzLCAxLCAyNTQsIDE4NiwgMzYsIDcsIAotICAgIDMsIDEsIDE0OSwgMzYsIDcsIDEsIDMsIDYsIDE0OSwgMzYsIDcsIDEsIDMsIDYsIDE4NSwgMzYsIDcsIDMsIDEsIDE5OSwgCi0gICAgMzYsIDcsIDEsIDMsIDYsIDE5OSwgMzYsIDcsIDEsIDMsIDYsIDE0NiwgMzYsIDcsIDMsIDEsIDI1NSwgNTcsIDIzMywgMTQzLCAKLSAgICAzNiwgNywgMywgMSwgMTkzLCAzNiwgNywgMywgMSwgMTgyLCAxOTMsIDM2LCA3LCAzLCAxLCAyNTQsIDE5MywgMzYsIDQyLCAKLSAgICAyMzEsIDIxNCwgNDYsIDM2LCA0MSwgMjMxLCAyMTQsIDIyLCAxMDMsIDIzMSwgMjE0LCA1MSwgNywgNiwgMSwgMTAyLCAyLCAKLSAgICAyNDYsIDE3NCwgNTEsIDcsIDMsIDEsIDEwMiwgMiwgMjQ2LCAxNzQsIDUxLCA3LCA2LCAxLCA0NSwgMiwgNTYsIDQ2LCA3LCAKLSAgICAzLCAxLCA0NSwgMiwgNTYsIDQ2LCA3LCA2LCAxLCA0NSwgMiwgNTYsIDUxLCA3LCAzLCAxLCA0NSwgMiwgNTYsIDUxLCA3LCAKLSAgICA2LCAxLCA0NSwgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAxLCA0NSwgMiwgMjQ2LCAxNjcsIDUxLCA3LCA2LCAxLCAyNTUsIAotICAgIDYyLCAyLCAyMzUsIDg3LCAyMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDYyLCAyLCAyMzUsIDg3LCAyMiwgMTU1LCA3LCA2LCAxLCAKLSAgICAyNTUsIDYzLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNjMsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA2MywgMiwgNTYsIAotICAgIDUxLCA3LCAzLCAxLCAyNTUsIDYzLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNjMsIDIsIDI0NiwgMTY3LCA1MSwgNywgMywgCi0gICAgMSwgMjU1LCA2MywgMiwgMjQ2LCAxNjcsIDUxLCA3LCA2LCAxLCAyNTUsIDYzLCAyLCAyMzMsIDc5LCA3LCAzLCAxLCAyNTUsIAotICAgIDYzLCAyLCAyMzMsIDc5LCA3LCA2LCAxLCAyNTUsIDYzLCAyLCAyMzAsIDEyNSwgNTEsIDcsIDMsIDEsIDI1NSwgNjMsIDIsIAotICAgIDIzMCwgMTI1LCA1MSwgNywgNiwgMSwgMTYxLCAyLCAyMzcsIDgzLCAyMiwgMjM3LCAzNiwgNywgMywgMSwgMTYxLCAyLCAKLSAgICAyMzcsIDgzLCAyMiwgMjM3LCAzNiwgNywgNiwgMSwgMTYxLCAyLCAyMzcsIDgzLCAyMiwgMTU1LCA3LCAzLCAxLCAxNjEsIDIsIAotICAgIDIzNywgODMsIDIyLCAxNTUsIDcsIDYsIDEsIDE2MSwgMiwgMjMwLCAxMjUsIDUxLCA3LCAzLCAxLCAxNjEsIDIsIDIzMCwgCi0gICAgMTI1LCA1MSwgNywgNiwgMSwgMTYxLCAyLCAyNDAsIDEyOCwgNTEsIDcsIDMsIDEsIDE2MSwgMiwgMjQwLCAxMjgsIDUxLCA3LCAKLSAgICA2LCAxLCAxNjEsIDIsIDIzNSwgODcsIDIyLCAyMzcsIDQ2LCA3LCAzLCAxLCAxNjEsIDIsIDIzNSwgODcsIDIyLCAyMzcsIAotICAgIDQ2LCA3LCA2LCAxLCAyNTUsIDcyLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNzIsIDIsIDU2LCA0NiwgNywgNiwgMSwgCi0gICAgMjU1LCA2NSwgMiwgMjM1LCAxNiwgNywgMywgMSwgMjU1LCA2NSwgMiwgMjM1LCAxNiwgNywgNiwgMSwgMjU1LCA2NiwgMiwgCi0gICAgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDY2LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNjYsIDIsIDU2LCA1MSwgNywgMywgCi0gICAgMSwgMjU1LCA2NiwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDY2LCAyLCAyMTksIDcsIDMsIDEsIDI1NSwgNjYsIDIsIAotICAgIDIxOSwgNywgNiwgMSwgMjU1LCA2NiwgMiwgMjMzLCA3OSwgNywgMywgMSwgMjU1LCA2NiwgMiwgMjMzLCA3OSwgNywgNiwgMSwgCi0gICAgMjU1LCA2NiwgMiwgMjQwLCAxNjEsIDUxLCA3LCAzLCAxLCAyNTUsIDY2LCAyLCAyNDAsIDE2MSwgNTEsIDcsIDYsIDEsIAotICAgIDI1NSwgNTUsIDIsIDI0MCwgMTI4LCA1MSwgNywgMywgMSwgMjU1LCA1NSwgMiwgMjQwLCAxMjgsIDUxLCA3LCA2LCAxLCAKLSAgICAyNTUsIDU1LCAyLCAyMzEsIDIwMywgMjIsIDE1NSwgNywgMywgMSwgMjU1LCA1NSwgMiwgMjMxLCAyMDMsIDIyLCAxNTUsIDcsIAotICAgIDYsIDEsIDI1NSwgNjcsIDIsIDE1NSwgNywgMywgMSwgMjU1LCA2NywgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDY3LCAyLCA1NiwgCi0gICAgNTEsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2NywgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAKLSAgICAxLCAyNTUsIDY3LCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIDI1NSwgNTgsIDIsIDU2LCA1MSwgNywgMywgMSwgMjU1LCAKLSAgICA1OCwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDU4LCAyLCA1NiwgMjQwLCAxNDQsIDIyLCAyMzUsIDE2LCA3LCAzLCAxLCAKLSAgICAyNTUsIDU4LCAyLCA1NiwgMjQwLCAxNDQsIDIyLCAyMzUsIDE2LCA3LCA2LCAxLCAyNTUsIDU4LCAyLCAyNDYsIDE2NywgNTEsIAotICAgIDcsIDMsIDEsIDI1NSwgNTgsIDIsIDI0NiwgMTY3LCA1MSwgNywgNiwgMSwgMjU1LCA1OCwgMiwgMjMwLCAxMjUsIDUxLCA3LCAKLSAgICAzLCAxLCAyNTUsIDU4LCAyLCAyMzAsIDEyNSwgNTEsIDcsIDYsIDEsIDI1NSwgNjgsIDIsIDE1NSwgNywgMywgMSwgMjU1LCAKLSAgICA2OCwgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDY4LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNjgsIDIsIDU2LCA0NiwgNywgCi0gICAgNiwgMSwgMjU1LCA2OCwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDY4LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNjAsIAotICAgIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA2MCwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTUsIDYwLCAyLCA1NiwgNTEsIDcsIAotICAgIDMsIDEsIDI1NSwgNjAsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2MCwgMiwgMjQ2LCAxNjcsIDUxLCA3LCAzLCAxLCAKLSAgICAyNTUsIDYwLCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIDI1NSwgNjAsIDIsIDIzMCwgMTI1LCA1MSwgNywgMywgMSwgCi0gICAgMjU1LCA2MCwgMiwgMjMwLCAxMjUsIDUxLCA3LCA2LCAxLCAxMzAsIDIsIDI0MCwgMTI4LCAyMiwgMTU1LCA3LCAzLCAxLCAKLSAgICAxMzAsIDIsIDI0MCwgMTI4LCAyMiwgMTU1LCA3LCA2LCAxLCAxMzAsIDIsIDI0MCwgMTI4LCAyMiwgMjE5LCA3LCAzLCAxLCAKLSAgICAxMzAsIDIsIDI0MCwgMTI4LCAyMiwgMjE5LCA3LCA2LCAxLCAxMzAsIDIsIDIzNywgODMsIDIyLCAyMzcsIDM2LCA3LCAzLCAKLSAgICAxLCAxMzAsIDIsIDIzNywgODMsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCAxMzAsIDIsIDIzNywgODMsIDIyLCAxNTUsIDcsIDMsIAotICAgIDEsIDEzMCwgMiwgMjM3LCA4MywgMjIsIDE1NSwgNywgNiwgMSwgMjU1LCA3MCwgMiwgMTU1LCA3LCAzLCAxLCAyNTUsIDcwLCAKLSAgICAyLCAxNTUsIDcsIDYsIDEsIDI1NSwgNzAsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA3MCwgMiwgNTYsIDQ2LCA3LCA2LCAKLSAgICAxLCAyNTUsIDU3LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA1NywgMiwgCi0gICAgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDU3LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNTcsIDIsIDU2LCAyNDAsIDE0NCwgCi0gICAgMjIsIDIzNSwgMTYsIDcsIDMsIDEsIDI1NSwgNTcsIDIsIDU2LCAyNDAsIDE0NCwgMjIsIDIzNSwgMTYsIDcsIDYsIDEsIAotICAgIDI1NSwgNTcsIDIsIDI0NiwgMTY3LCA1MSwgNywgMywgMSwgMjU1LCA1NywgMiwgMjQ2LCAxNjcsIDUxLCA3LCA2LCAxLCAKLSAgICAyNTUsIDU5LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDI1NSwgNTksIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA1OSwgMiwgNTYsIAotICAgIDUxLCA3LCAzLCAxLCAyNTUsIDU5LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNTksIDIsIDI0MCwgMTU5LCAyMiwgNTYsIAotICAgIDQ2LCA3LCAzLCAxLCAyNTUsIDU5LCAyLCAyNDAsIDE1OSwgMjIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA1OSwgMiwgMjQxLCAKLSAgICAyOSwgMjIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA1OSwgMiwgMjQxLCAyOSwgMjIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCAKLSAgICA1OSwgMiwgNTYsIDI0MCwgMTQ0LCAyMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDU5LCAyLCA1NiwgMjQwLCAxNDQsIDIyLCAKLSAgICA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA2MSwgMiwgNTYsIDQ2LCA3LCA2LCAKLSAgICAxLCAyNTUsIDYxLCAyLCA1NiwgNTEsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2MSwgMiwgCi0gICAgMjQ2LCAxNjcsIDUxLCA3LCAzLCAxLCAyNTUsIDYxLCAyLCAyNDYsIDE2NywgNTEsIDcsIDYsIDEsIDI1NSwgNjEsIDIsIAotICAgIDIzMCwgMTI1LCA1MSwgNywgMywgMSwgMjU1LCA2MSwgMiwgMjMwLCAxMjUsIDUxLCA3LCA2LCAxLCA5NywgMiwgMjMxLCAKLSAgICAyMDMsIDUxLCA3LCAzLCAxLCA5NywgMiwgMjMxLCAyMDMsIDUxLCA3LCA2LCAxLCA5NywgMiwgMjQwLCAxMjgsIDUxLCA3LCAKLSAgICAzLCAxLCA5NywgMiwgMjQwLCAxMjgsIDUxLCA3LCA2LCAxLCA5NywgMiwgMjMwLCAxMjUsIDUxLCA3LCAzLCAxLCA5NywgMiwgCi0gICAgMjMwLCAxMjUsIDUxLCA3LCA2LCAxLCA5NywgMiwgMjQwLCAxMjgsIDIyLCAxNTUsIDcsIDMsIDEsIDk3LCAyLCAyNDAsIAotICAgIDEyOCwgMjIsIDE1NSwgNywgNiwgMSwgOTcsIDIsIDIzNywgODMsIDIyLCAyMTksIDcsIDMsIDEsIDk3LCAyLCAyMzcsIDgzLCAKLSAgICAyMiwgMjE5LCA3LCA2LCAxLCAyNTUsIDY5LCAyLCAyMDUsIDcsIDMsIDEsIDI1NSwgNjksIDIsIDIwNSwgNywgNiwgMSwgCi0gICAgMjU1LCA2OSwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTUsIDY5LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI1NSwgNzEsIDIsIAotICAgIDIzNywgMzYsIDcsIDMsIDEsIDI1NSwgNzEsIDIsIDIzNywgMzYsIDcsIDYsIDEsIDI1NSwgNzEsIDIsIDE1NSwgNywgMywgMSwgCi0gICAgMjU1LCA3MSwgMiwgMTU1LCA3LCA2LCAxLCAyNTUsIDcxLCAyLCAyMTksIDcsIDMsIDEsIDI1NSwgNzEsIDIsIDIxOSwgNywgCi0gICAgNiwgMSwgMjU1LCA3MSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNTUsIDcxLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI1NSwgNzEsIAotICAgIDIsIDU2LCA1MSwgNywgMywgMSwgMjU1LCA3MSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDc0LCAyLCA1NiwgNDYsIDcsIAotICAgIDMsIDEsIDI1NSwgNzQsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjU1LCA3NCwgMiwgMjE5LCA3LCAzLCAxLCAyNTUsIDc0LCAyLCAKLSAgICAyMTksIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDU2LCA0NiwgNywgMywgMSwgMjU1LCA2NCwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAKLSAgICAyNTUsIDU2LCAyLCAyMjksIDE2MiwgNywgMywgMSwgMjU1LCA1NiwgMiwgMjI5LCAxNjIsIDcsIDYsIDEsIDI1NSwgNTYsIDIsIAotICAgIDU2LCA1MSwgNywgMywgMSwgMjU1LCA1NiwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDU2LCAyLCAyNDYsIDE2NywgNTEsIAotICAgIDcsIDMsIDEsIDI1NSwgNTYsIDIsIDI0NiwgMTY3LCA1MSwgNywgMywgMSwgMjU1LCA2NiwgMiwgMjQ2LCAxNjcsIDUxLCA3LCAKLSAgICAzLCAxLCAyNTUsIDYxLCAyLCAyMTksIDcsIDMsIDEsIDI1NSwgNzEsIDIsIDI0NiwgMTc0LCA0NiwgNywgMywgMSwgMjU1LCAKLSAgICA2NCwgMiwgMjQ2LCAxNzQsIDQ2LCA3LCAzLCAxLCAxMDIsIDIsIDQxLCAxMzIsIDI0MCwgMTQ3LCA3LCAzLCAxLCAxODIsIAotICAgIDI1NSwgNTksIDIsIDU2LCA0NiwgNywgMywgMSwgMTgyLCAyNTUsIDU5LCAyLCAyMzMsIDc0LCA4MiwgNywgMywgMSwgMTgyLCAKLSAgICAyNTUsIDU5LCAyLCAyMDEsIDgyLCA3LCA2LCAxLCAyNDAsIDIzNSwgMTkzLCA3LCAzLCAxLCAyMzcsIDc1LCA3LCA2LCAxLCAKLSAgICAxMDIsIDIsIDU2LCA1MSwgNywgMywgMSwgMTAyLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDEwMiwgMiwgMjQ2LCAxNzEsIDQ2LCAKLSAgICA3LCAzLCAxLCAxMDIsIDIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgMTAyLCAyLCAyMzAsIDEyNSwgMjIsIDE1NSwgNywgMywgCi0gICAgMSwgMTAyLCAyLCAyMzAsIDEyNSwgMjIsIDE1NSwgNywgNiwgMSwgMTAyLCAyLCAyMzAsIDEyNSwgMjIsIDIzNywgMzYsIDcsIAotICAgIDMsIDEsIDEwMiwgMiwgMjMwLCAxMjUsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMjQ2LCAKLSAgICAxNzEsIDQ2LCA3LCAzLCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAxMDIsIDIsIAotICAgIDIzMCwgMTI1LCAyMiwgMjA1LCA3LCAzLCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgMjA1LCA3LCA2LCAxLCAxMDIsIDIsIAotICAgIDIzMCwgMTI1LCAyMiwgNTYsIDUxLCA3LCAzLCAxLCAxMDIsIDIsIDIzMCwgMTI1LCAyMiwgNTYsIDUxLCA3LCA2LCAxLCAKLSAgICAxMDIsIDIsIDI0MCwgMTYxLCAyMiwgMTU1LCA3LCAzLCAxLCAxMDIsIDIsIDI0MCwgMTYxLCAyMiwgMTU1LCA3LCA2LCAxLCAKLSAgICAxMDIsIDIsIDI0MCwgMTYxLCAyMiwgMjM3LCAzNiwgNywgMywgMSwgMTAyLCAyLCAyNDAsIDE2MSwgMjIsIDIzNywgMzYsIDcsIAotICAgIDYsIDEsIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAKLSAgICAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCAyMDUsIDcsIDMsIDEsIDEwMiwgMiwgMjQwLCAKLSAgICAxNjEsIDIyLCAyMDUsIDcsIDYsIDEsIDEwMiwgMiwgMjQwLCAxNjEsIDIyLCA1NiwgNTEsIDcsIDMsIDEsIDEwMiwgMiwgCi0gICAgMjQwLCAxNjEsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIDE2MSwgMiwgNTYsIDUxLCA3LCAzLCAxLCAxNjEsIDIsIDU2LCA1MSwgCi0gICAgNywgNiwgMSwgMTYxLCAyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIDE2MSwgMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAKLSAgICAxNjEsIDIsIDIwNSwgNywgMywgMSwgMTYxLCAyLCAyMDUsIDcsIDYsIDEsIDE2MSwgMiwgMjMwLCAxMjUsIDIyLCAxNTUsIDcsIAotICAgIDMsIDEsIDE2MSwgMiwgMjMwLCAxMjUsIDIyLCAxNTUsIDcsIDYsIDEsIDE2MSwgMiwgMjMwLCAxMjUsIDIyLCAyMzcsIDM2LCAKLSAgICA3LCAzLCAxLCAxNjEsIDIsIDIzMCwgMTI1LCAyMiwgMjM3LCAzNiwgNywgNiwgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIAotICAgIDI0NiwgMTcxLCA0NiwgNywgMywgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgMTYxLCAKLSAgICAyLCAyMzAsIDEyNSwgMjIsIDIwNSwgNywgMywgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDIwNSwgNywgNiwgMSwgMTYxLCAKLSAgICAyLCAyMzAsIDEyNSwgMjIsIDU2LCA1MSwgNywgMywgMSwgMTYxLCAyLCAyMzAsIDEyNSwgMjIsIDU2LCA1MSwgNywgNiwgMSwgCi0gICAgMjU1LCA1NSwgMiwgMjQ2LCAxNzEsIDQ2LCA3LCAzLCAxLCAyNTUsIDU1LCAyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIAotICAgIDI1NSwgNTUsIDIsIDU2LCA1MSwgNywgMywgMSwgMjU1LCA1NSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAxMzAsIDIsIDU2LCA1MSwgCi0gICAgNywgMywgMSwgMTMwLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgMjQ2LCAxNzEsIDQ2LCA3LCAzLCAxLCAxMzAsIDIsIAotICAgIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgMTMwLCAyLCAyMzAsIDEyNSwgMjIsIDE1NSwgNywgMywgMSwgMTMwLCAyLCAyMzAsIAotICAgIDEyNSwgMjIsIDE1NSwgNywgNiwgMSwgMTMwLCAyLCAyMzAsIDEyNSwgMjIsIDIzNywgMzYsIDcsIDMsIDEsIDEzMCwgMiwgCi0gICAgMjMwLCAxMjUsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgMjQ2LCAxNzEsIDQ2LCA3LCAzLCAKLSAgICAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgMjQ2LCAxNzEsIDQ2LCA3LCA2LCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgCi0gICAgMjA1LCA3LCAzLCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgMjA1LCA3LCA2LCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgCi0gICAgNTYsIDUxLCA3LCAzLCAxLCAxMzAsIDIsIDIzMCwgMTI1LCAyMiwgNTYsIDUxLCA3LCA2LCAxLCAxMzAsIDIsIDI0NiwgMTg4LCAKLSAgICAyMiwgMTU1LCA3LCAzLCAxLCAxMzAsIDIsIDI0NiwgMTg4LCAyMiwgMTU1LCA3LCA2LCAxLCAxMzAsIDIsIDI0NiwgMTg4LCAKLSAgICAyMiwgMjM3LCAzNiwgNywgMywgMSwgMTMwLCAyLCAyNDYsIDE4OCwgMjIsIDIzNywgMzYsIDcsIDYsIDEsIDEzMCwgMiwgCi0gICAgMjQ2LCAxODgsIDIyLCAyNDYsIDE3MSwgNDYsIDcsIDMsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCAyNDYsIDE3MSwgNDYsIAotICAgIDcsIDYsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCAyMDUsIDcsIDMsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCAyMDUsIAotICAgIDcsIDYsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCA1NiwgNTEsIDcsIDMsIDEsIDEzMCwgMiwgMjQ2LCAxODgsIDIyLCA1NiwgCi0gICAgNTEsIDcsIDYsIDEsIDk3LCAyLCA1NiwgNTEsIDcsIDMsIDEsIDk3LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDk3LCAyLCAyNDYsIAotICAgIDE3MSwgNDYsIDcsIDMsIDEsIDk3LCAyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDE1NSwgCi0gICAgNywgMywgMSwgOTcsIDIsIDI0NiwgMTg4LCAyMiwgMTU1LCA3LCA2LCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCAyMzcsIDM2LCAKLSAgICA3LCAzLCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCAyMzcsIDM2LCA3LCA2LCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCAyNDYsIAotICAgIDE3MSwgNDYsIDcsIDMsIDEsIDk3LCAyLCAyNDYsIDE4OCwgMjIsIDI0NiwgMTcxLCA0NiwgNywgNiwgMSwgOTcsIDIsIDI0NiwgCi0gICAgMTg4LCAyMiwgMjA1LCA3LCAzLCAxLCA5NywgMiwgMjQ2LCAxODgsIDIyLCAyMDUsIDcsIDYsIDEsIDk3LCAyLCAyNDYsIAotICAgIDE4OCwgMjIsIDU2LCA1MSwgNywgMywgMSwgOTcsIDIsIDI0NiwgMTg4LCAyMiwgNTYsIDUxLCA3LCA2LCAxLCAyNTUsIDY0LCAKLSAgICAyLCAyMzcsIDM2LCA3LCAzLCAxLCAyNTUsIDY0LCAyLCAyMzcsIDM2LCA3LCA2LCAxLCAyNTUsIDY0LCAyLCA1NiwgNTEsIDcsIAotICAgIDMsIDEsIDI1NSwgNjQsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjU1LCA2NCwgMiwgMjQ2LCAxNzEsIDQ2LCA3LCAzLCAxLCAKLSAgICAyNTUsIDY0LCAyLCAyNDYsIDE3MSwgNDYsIDcsIDYsIDEsIDI1NSwgNjQsIDIsIDIwNSwgNywgMywgMSwgMjU1LCA2NCwgMiwgCi0gICAgMjA1LCA3LCA2LCAxLCAyMjgsIDE5MiwgMjUyLCAyNDUsIDcsIDMsIDEsIDIyOCwgMTkyLCAyNTIsIDI0NSwgNywgNiwgMSwgCi0gICAgMjI4LCAxOTIsIDE5NiwgNywgMywgMSwgMjI4LCAxOTIsIDE5NiwgNywgNiwgMSwgMjU1LCA2NCwgMiwgMjQwLCAyMDIsIDcsIAotICAgIDMsIDEsIDI1NSwgNjQsIDIsIDI0MCwgMjAyLCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDIzNywgNzcsIDE5LCAzLCAxLCAKLSAgICAyNDAsIDEyMCwgMiwgMjM3LCA3NCwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgCi0gICAgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIAotICAgIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgCi0gICAgMjI4LCAxNzksIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCA2LCAxLCAyNDAsIDEyMCwgCi0gICAgMiwgMjM3LCA3NywgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAyMzcsIDc0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE4NiwgCi0gICAgMjIsIDIzNywgMzksIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDI0MCwgMTIwLCAKLSAgICAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDYsIDEsIAotICAgIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgCi0gICAgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDIzNywgNzcsIDE5LCAzLCAxLCAyMzUsIDI4LCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgCi0gICAgMjM1LCAyOCwgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDE3MiwgMjIsIDIzNywgMzksIDE5LCAKLSAgICAzLCAxLCAyMzUsIDI4LCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDIzNSwgMjgsIDIsIDE3MiwgMjIsIDI0MCwgCi0gICAgMTI0LCAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMjM3LCA3NywgMTksIDYsIDEsIDIzNSwgMjgsIDIsIDIzNywgNzQsIDE5LCA2LCAKLSAgICAxLCAyMzUsIDI4LCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgCi0gICAgMTksIDYsIDEsIDIzNSwgMjgsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjM1LCAyOCwgMiwgMTcyLCAyMiwgCi0gICAgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMjM3LCA3NywgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDc0LCAKLSAgICAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgCi0gICAgMjM3LCAzOSwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAKLSAgICAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIAotICAgIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDIzNywgNzQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIAotICAgIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAKLSAgICAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIAotICAgIDIyOCwgMTc5LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQ2LCAxNjgsIAotICAgIDIsIDIzNywgNzcsIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMjM3LCA3NCwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAxODYsIAotICAgIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDE3MiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgCi0gICAgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAKLSAgICAyNDYsIDE2OCwgMiwgMTg2LCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMTcyLCAyMiwgMjI4LCAxNzksIAotICAgIDE5LCA2LCAxLCAyNDYsIDE2OCwgMiwgMjM3LCA3NywgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDc0LCAxOSwgNiwgMSwgCi0gICAgMjQ2LCAxNjgsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCA2LCAxLCAyNDYsIDE2OCwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgCi0gICAgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAxNzIsIDIyLCAKLSAgICAyNDAsIDEyNCwgMTksIDYsIDEsIDI0NiwgMTY4LCAyLCAxODYsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDI0NiwgMTY4LCAKLSAgICAyLCAxNzIsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDIzNSwgMzUsIDIsIDIzNywgNzcsIDE5LCAzLCAxLCAyMzUsIDM1LCAKLSAgICAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjM1LCAzNSwgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMzUsIDIsIAotICAgIDE3MiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyMzUsIDM1LCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDIzNSwgCi0gICAgMzUsIDIsIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjM1LCAzNSwgMiwgMjM3LCA3NywgMTksIDYsIDEsIDIzNSwgCi0gICAgMzUsIDIsIDIzNywgNzQsIDE5LCA2LCAxLCAyMzUsIDM1LCAyLCAxODYsIDIyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjM1LCAKLSAgICAzNSwgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDIzNSwgMzUsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgCi0gICAgMSwgMjM1LCAzNSwgMiwgMTcyLCAyMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAyMzcsIDc3LCAxOSwgMywgCi0gICAgMSwgMjM1LCAyMywgMiwgMjM3LCA3NCwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAKLSAgICAyMzUsIDIzLCAyLCAxNzIsIDIyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMTg2LCAyMiwgMjQwLCAxMjQsIAotICAgIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDE4NiwgMjIsIAotICAgIDIyOCwgMTc5LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAKLSAgICAyMzcsIDc0LCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDIzNSwgMjMsIDIsIAotICAgIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAKLSAgICAyNDAsIDEyMywgMiwgMjM3LCA3NywgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyMzcsIDc0LCAxOSwgMywgMSwgMjQwLCAxMjMsIAotICAgIDIsIDE4NiwgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIAotICAgIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyNDAsIDEyNCwgCi0gICAgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAKLSAgICAyMjgsIDE3OSwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAyMzcsIDc3LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDIzNywgNzQsIAotICAgIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjM3LCAzOSwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAKLSAgICAyMzcsIDM5LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIAotICAgIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgNiwgMSwgCi0gICAgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDIzNywgMzksIDE5LCAzLCAxLCAKLSAgICAyNDAsIDEyMCwgMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyMzUsIDI4LCAyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjM1LCAyOCwgCi0gICAgMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMjM3LCAzOSwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyNDAsIAotICAgIDEyNCwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzcsIDM5LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIDI0MCwgMTI0LCAxOSwgCi0gICAgMywgMSwgMjM1LCAzNSwgMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMzUsIDIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjM1LCAKLSAgICAyMywgMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDI0MCwgMTI0LCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIAotICAgIDIzNywgMzksIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgCi0gICAgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgCi0gICAgMiwgMTg2LCAyMiwgMjQwLCAxNjUsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDAsIAotICAgIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDE4NiwgMjIsIDI0NiwgMjEwLCAyMiwgMjI3LCAKLSAgICAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIAotICAgIDI0MCwgMTIwLCAyLCAxODYsIDIyLCAyMjksIDE2NywgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDE3MiwgCi0gICAgMjIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgMjI1LCAxMDQsIDE5LCAKLSAgICA2LCAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgMTg2LCAyMiwgCi0gICAgMjQwLCAxNjUsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAxNzIsIDIyLCAyNDAsIDE2NSwgMjIsIAotICAgIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE4NiwgMjIsIDI0NiwgMjEwLCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAKLSAgICAxLCAyNDAsIDEyMCwgMiwgMTcyLCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAKLSAgICAxODYsIDIyLCAyMjksIDE2NywgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDE3MiwgMjIsIDIyOSwgCi0gICAgMTY3LCAyMiwgMjI1LCAxMDQsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAKLSAgICAyNTIsIDIwNiwgMiwgMTcyLCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjQwLCAxNjUsIAotICAgIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgCi0gICAgMywgMSwgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDI0NiwgMjEwLCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNTIsIDIwNiwgCi0gICAgMiwgMTcyLCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMjksIAotICAgIDE2NywgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI3LCAKLSAgICAxMzIsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgCi0gICAgMTcyLCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTg2LCAyMiwgMjQwLCAxNjUsIDIyLCAyMjUsIAotICAgIDEwNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxNzIsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDE4NiwgMjIsIDI0NiwgMjEwLCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMTcyLCAKLSAgICAyMiwgMjQ2LCAyMTAsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAxODYsIDIyLCAyMjksIDE2NywgMjIsIAotICAgIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjUyLCAyMDYsIDIsIDE3MiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI1LCAxMDQsIDE5LCAzLCAKLSAgICAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjI3LCAKLSAgICAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjQwLCAxNjUsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIAotICAgIDI0MCwgMTIzLCAyLCAxNzIsIDIyLCAyNDAsIDE2NSwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjQwLCAxMjMsIDIsIDE4NiwgCi0gICAgMjIsIDI0NiwgMjEwLCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjQ2LCAyMTAsIDIyLCAKLSAgICAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyMjksIDE2NywgMjIsIDIyNywgMTMyLCAxOSwgMywgCi0gICAgMSwgMjQwLCAxMjMsIDIsIDE3MiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgCi0gICAgMTg2LCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjI1LCAxMDQsIDE5LCA2LCAxLCAKLSAgICAyNDAsIDEyMywgMiwgMTg2LCAyMiwgMjQwLCAxNjUsIDIyLCAyMjUsIDEwNCwgMTksIDYsIDEsIDI0MCwgMTIzLCAyLCAxNzIsIAotICAgIDIyLCAyNDAsIDE2NSwgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDE4NiwgMjIsIDI0NiwgMjEwLCAyMiwgCi0gICAgMjI1LCAxMDQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMTcyLCAyMiwgMjQ2LCAyMTAsIDIyLCAyMjUsIDEwNCwgMTksIDYsIAotICAgIDEsIDI0MCwgMTIzLCAyLCAxODYsIDIyLCAyMjksIDE2NywgMjIsIDIyNSwgMTA0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIAotICAgIDE3MiwgMjIsIDIyOSwgMTY3LCAyMiwgMjI1LCAxMDQsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjM1LCA4MiwgMTksIDMsIAotICAgIDEsIDI0MCwgMTIwLCAyLCAyMzUsIDE2LCAxOSwgMywgMSwgMjQwLCAxMjAsIDIsIDI0MCwgMTY1LCAyMiwgMjI3LCAxMzIsIAotICAgIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMCwgMiwgMjQ2LCAyMTAsIDIyLCAKLSAgICAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDI0MCwgMTIwLCAyLCAyMjksIAotICAgIDE2NywgMjIsIDIyNywgMTMyLCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDIzNSwgODIsIDE5LCA2LCAxLCAyNDAsIDEyMCwgMiwgCi0gICAgMjM1LCAxNiwgMTksIDYsIDEsIDI0MCwgMTIwLCAyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDI0MCwgMTI0LCAKLSAgICAxOSwgNiwgMSwgMjQwLCAxMjAsIDIsIDIyNSwgMTA0LCAxOSwgMjMzLCAxNzAsIDE5LCAyMjUsIDEwNCwgMTksIDIzNywgNzcsIAotICAgIDE5LCAyMjgsIDE3OSwgMTksIDIzMSwgMjA3LCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyNTIsIDIwNiwgMiwgMjQwLCAKLSAgICAxNjUsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI1MiwgMjA2LCAKLSAgICAyLCAyNDYsIDIxMCwgMjIsIDIyNywgMTMyLCAxOSwgMywgMSwgMjUyLCAyMDYsIDIsIDIyOCwgMTc5LCAxOSwgMywgMSwgCi0gICAgMjUyLCAyMDYsIDIsIDIyOSwgMTY3LCAyMiwgMjI3LCAxMzIsIDE5LCA2LCAxLCAyMzUsIDI4LCAyLCAyMzcsIDM5LCAxOSwgCi0gICAgNiwgMSwgMjM1LCAyOCwgMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNTIsIDIwNiwgMiwgMjM3LCAzOSwgMTksIDYsIDEsIAotICAgIDI1MiwgMjA2LCAyLCAyNDAsIDEyNCwgMTksIDYsIDEsIDI1MiwgMjA2LCAyLCAyMjUsIDEwNCwgMTksIDE4NiwgMjIsIDIzNywgCi0gICAgMzksIDE5LCAxODYsIDIyLCAyNDAsIDEyNCwgMTksIDE4NiwgMjIsIDIyOCwgMTc5LCAxOSwgMywgMSwgMjQ2LCAxNjgsIDIsIAotICAgIDIzNSwgODIsIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMjM1LCAxNiwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzEsIDIwNywgCi0gICAgMjIsIDIzNywgMzksIDE5LCAzLCAxLCAyNDYsIDE2OCwgMiwgMjMxLCAyMDcsIDIyLCAyNDAsIDEyNCwgMTksIDMsIDEsIAotICAgIDI0NiwgMTY4LCAyLCAyMjgsIDE3OSwgMTksIDMsIDEsIDI0NiwgMTY4LCAyLCAyMzEsIDIwNywgMjIsIDIyOCwgMTc5LCAxOSwgCi0gICAgNiwgMSwgMjQ2LCAxNjgsIDIsIDIzNSwgODIsIDE5LCA2LCAxLCAyNDYsIDE2OCwgMiwgMjM1LCAxNiwgMTksIDYsIDEsIAotICAgIDI0NiwgMTY4LCAyLCAyMzcsIDM5LCAxOSwgNiwgMSwgMjQ2LCAxNjgsIDIsIDI0MCwgMTI0LCAxOSwgMTcyLCAyMiwgMjM3LCAKLSAgICAzOSwgMTksIDE3MiwgMjIsIDI0MCwgMTI0LCAxOSwgMTcyLCAyMiwgMjI4LCAxNzksIDE5LCAzLCAxLCAyMzUsIDIzLCAyLCAKLSAgICAyMzUsIDgyLCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjM1LCAxNiwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDIzMSwgMjA3LCAKLSAgICAyMiwgMjM3LCAzOSwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDIzMSwgMjA3LCAyMiwgMjQwLCAxMjQsIDE5LCAzLCAxLCAyNTMsIAotICAgIDcwLCAyLCAyMzcsIDc3LCAxOSwgMywgMSwgMjUzLCA3MCwgMiwgMjM3LCA3NCwgMTksIDMsIDEsIDIzNSwgMjMsIDIsIDIyOCwgCi0gICAgMTc5LCAxOSwgMywgMSwgMjM1LCAyMywgMiwgMjMxLCAyMDcsIDIyLCAyMjgsIDE3OSwgMTksIDYsIDEsIDIzNSwgMjMsIDIsIAotICAgIDIzNSwgODIsIDE5LCA2LCAxLCAyMzUsIDIzLCAyLCAyMzUsIDE2LCAxOSwgNiwgMSwgMjM1LCAyMywgMiwgMjM3LCAzOSwgCi0gICAgMTksIDYsIDEsIDIzNSwgMjMsIDIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjUzLCA3MCwgMiwgMjM3LCA3NCwgMTksIDIzMSwgCi0gICAgMjA3LCAyMiwgMjM3LCAzOSwgMTksIDIzMSwgMjA3LCAyMiwgMjQwLCAxMjQsIDE5LCAyMzcsIDM5LCAxOSwgMywgMSwgMjQwLCAKLSAgICAxMjMsIDIsIDI0MCwgMTY1LCAyMiwgMjI3LCAxMzIsIDE5LCAzLCAxLCAyNDAsIDEyMywgMiwgMjI3LCAxMzIsIDE5LCAzLCAKLSAgICAxLCAyNDAsIDEyMywgMiwgMjQ2LCAyMTAsIDIyLCAyMjcsIDEzMiwgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyMjgsIDE3OSwgCi0gICAgMTksIDMsIDEsIDI0MCwgMTIzLCAyLCAyMjksIDE2NywgMjIsIDIyNywgMTMyLCAxOSwgNiwgMSwgMjM1LCAzNSwgMiwgMjM3LCAKLSAgICAzOSwgMTksIDYsIDEsIDIzNSwgMzUsIDIsIDI0MCwgMTI0LCAxOSwgNiwgMSwgMjQwLCAxMjMsIDIsIDIzNywgMzksIDE5LCAKLSAgICA2LCAxLCAyNDAsIDEyMywgMiwgMjQwLCAxMjQsIDE5LCA2LCAxLCAyNDAsIDEyMywgMiwgMjI1LCAxMDQsIDE5LCAyNDAsIAotICAgIDEyNCwgMTksIDIzNywgNzQsIDI1NCwgMTk5LCAyNDAsIDIzMiwgMjU0LCAyMTMsIDI0MCwgMjMyLCAyNTQsIDE5OSwgMjM3LCAKLSAgICA2OSwgMjU0LCAyMTMsIDIzNywgNjksIDIyOSwgMTU0LCAyMzcsIDY5LCAyMzAsIDYyLCAyMzcsIDY5LCAyMzEsIDE0NCwgCi0gICAgMjM3LCA2OSwgMjM3LCAyNDgsIDIzNywgNjksIDIyOSwgMTYxLCAyMzcsIDY5LCAyNTIsIDE4LCAyMzcsIDY5LCAyNTAsIDYwLCAKLSAgICAyMzcsIDY5LCAyNDcsIDI3LCAyNDEsIDIzLCAyMzcsIDY5LCAyNDcsIDI3LCAyNDEsIDIzLCAyMzAsIDgyLCAyNDcsIDI3LCAKLSAgICAyNDEsIDIzLCAyMzUsIDEyNCwgMjI3LCAxOTUsIDc2LCAyMjcsIDE5OCwgNzYsIDIzNSwgNjksIDIyOSwgNDMsIDIzNSwgNjksIAotICAgIDIzNywgMjQ4LCAyNDAsIDE1MSwgMjU0LCAxOTksIDI0MCwgMTUxLCAyNTQsIDIxMywgMjQwLCAxNTEsIDE2OSwgMTI1LCA0NywgCi0gICAgNjEsIDI0MCwgMTM4LCA0NywgMTg0LCAyNDAsIDEzOCwgNDIsIDIzNywgNjIsIDIzMSwgMTk5LCA3NiwgNDEsIDIzNywgNjIsIAotICAgIDIzMSwgMTk5LCA3NiwgMjM3LCA2MiwgMjQxLCAxODUsIDIzMSwgMTk5LCA3NiwgMjM3LCA2MiwgMjI1LCAxMDksIDIzMSwgCi0gICAgMTk5LCA3NiwgNDIsIDQ3LCAyMzEsIDE5OSwgNzYsIDQxLCA0NywgMjMxLCAxOTksIDc2LCA0NywgMjQxLCAxODUsIDIzMSwgCi0gICAgMTk5LCA3NiwgNDcsIDIyNSwgMTA5LCAyMzEsIDE5OSwgNzYsIDIzNSwgMTYwLCA0NywgMjM1LCAxNjAsIDIzNSwgNDUsIAotICAgIDIzMCwgMTYwLCAyMzUsIDQ1LCAxNjgsIDU2LCAyMzUsIDEyOCwgMTM1LCA1NiwgMjM1LCAxMjgsIDE2OSwgMjMxLCAyMTgsIAotICAgIDIzMCwgNjcsIDIzNywgMjA5LCAyNDYsIDE2NywgMjMwLCAxMzEsIDIzMSwgMjQyLCAyMzAsIDEzMSwgMjI3LCAxOTUsIDIzMCwgCi0gICAgMTgyLCAyMjcsIDE5OCwgMjMwLCAxODIsIDI1NCwgMTMzLCAyMjksIDI0OSwgMjMwLCA2MSwgMjI3LCAxOTUsIDIzMiwgMzAsIAotICAgIDIyNywgMTk4LCAyMzIsIDMwLCAyMzksIDEyNSwgMjMzLCAxNzMsIDIzNywgNjksIDI1MywgMTI5LCAyNDEsIDE5NCwgNTMsIAotICAgIDI1MywgMTI5LCAyNTMsIDUzLCAyMzMsIDExNywgNTMsIDIzNywgMTE0LCA0NywgMjM3LCAxMTQsIDIzNywgNDksIDIzNywgCi0gICAgMTE0LCAyMDAsIDIzNywgMTE0LCAyMDAsIDQ3LCAyMzcsIDExNCwgMjAwLCAyMzcsIDQ5LCAyMzcsIDExNCwgMjM3LCAxOTcsIAotICAgIDIzNywgNjIsIDIyNywgMTg1LCAyNDAsIDExNywgMjMxLCAxOTksIDc2LCAyMzcsIDYyLCAyMjcsIDEzMywgMjQwLCAxMTcsIAotICAgIDIzMSwgMTk5LCA3NiwgMjMzLCAxMSwgNzYsIDQ3LCAyMjksIDE2NSwgNzYsIDIyOCwgMjEzLCAyMzEsIDIyMywgMjMyLCA2MywgCi0gICAgMTE2LCAyNDcsIDU3LCAyNDAsIDIwNiwgMjMyLCAyOCwgMjM3LCAyMDksIDIzMiwgODEsIDIzOCwgMTAsIDIzNSwgNDUsIAotICAgIDIzMywgNzYsIDIzNywgODQsIDQyLCAzNywgMjM1LCAyMiwgMiwgMjM3LCAxOTAsIDQxLCAzNywgMjM1LCAyMiwgMiwgMjM3LCAKLSAgICAxOTAsIDQ3LCAyMzMsIDgyLCA3NiwgMjMzLCA4MiwgMjI5LCAxNjUsIDc2LCAyMjksIDE2NSwgMjMzLCA4MiwgNzYsIDIzNCwgCi0gICAgMjQ5LCA1LCAyNTMsIDEyNSwgMjAwLCAyMzUsIDIwMSwgNTMsIDg2LCAxMTcsIDIzNSwgNDUsIDg2LCA4MSwgMjM1LCA0NSwgCi0gICAgMTg0LCAyMzEsIDE5OCwgMjAwLCAyMzAsIDE0MCwgMjQzLCAxNSwgMjUzLCAxOSwgMTM1LCAyMzIsIDgwLCAyMzUsIDI0NSwgCi0gICAgMjMwLCAxMjIsIDIzMCwgMTQ1LCAyNDAsIDE3MiwgNTMsIDI0NSwgMjI5LCAyNDAsIDE1MSwgMjMzLCA3MCwgMjMyLCA2MywgCi0gICAgMjM4LCAyMjEsIDIyOSwgMTYxLCA3NiwgMTUyLCA1NiwgMjI4LCAxODIsIDIzMSwgMjEyLCAyMzcsIDExNCwgMjQ2LCAxNjAsIAotICAgIDU2LCAyMjgsIDE4MiwgMjQ2LCAxNTksIDU2LCAyMjgsIDE4MiwgMTM1LCA1NiwgMjI4LCAxODIsIDI0NiwgMTYwLCA1NiwgCi0gICAgNzYsIDIzNywgNTAsIDIzNywgODUsIDIzMiwgNTcsIDYxLCAyNDYsIDE2MCwgMjQwLCAxNjksIDIzNywgNjAsIDEyLCAyMzcsIAotICAgIDY5LCAyNDcsIDgsIDIzNSwgMTI0LCAyMzQsIDEwOSwgMjI4LCAyMjUsIDIzMSwgMjUzLCAyMzcsIDE2NiwgMjMxLCAyNTMsIAotICAgIDIzMCwgMTMxLCAyMzEsIDI1MywgMjQwLCAxODAsIDIzNSwgMTc4LCAyMzIsIDU0LCAyMzIsIDQ3LCAyMzMsIDE4MiwgMjMyLCAKLSAgICA1NCwgMjMyLCA0NywgMjM1LCAxNzgsIDEwLCAyMTEsIDIzMywgMjM2LCAyMzMsIDE4MiwgMTAsIDIxMSwgMjMzLCAyMzYsIAotICAgIDIzNCwgMTY1LCAyMSwgMjM1LCAyMDksIDIzNiwgMTY5LCAyMSwgMjM1LCAyMDksIDIyOSwgMTYzLCAyNDAsIDEyNiwgMjI5LCAKLSAgICAxNjMsIDcsIDMsIDEsIDc0LCAyMjksIDE2MywgMTU4LCAyMjksIDE2MywgMTczLCAyMjksIDE2MywgMTgzLCAyMjksIDE2MywgCi0gICAgMTk0LCAyMjksIDE2MywgMTg3LCAyMjksIDE2MywgMTkyLCAyMjksIDE2MywgNzksIDUzLCAyMjksIDE2MywgMjM3LCAxMjQsIAotICAgIDIyOSwgMTYzLCAyMzcsIDUxLCA1MywgMjI5LCAxNjMsIDQyLCAyMjgsIDE4MCwgMjI5LCAxNjMsIDQxLCAyMjgsIDE4MCwgCi0gICAgMjI5LCAxNjMsIDcsIDMsIDEsIDE5OSwgMjMxLCAxOTUsIDI0MCwgMTI2LCAyMzEsIDE5NSwgMTE4LCAyMzEsIDE5NSwgMTEzLCAKLSAgICAyMzEsIDE5NSwgMTY2LCAyMzEsIDE5NSwgMTU4LCAyMzEsIDE5NSwgMTczLCAyMzEsIDE5NSwgMTgzLCAyMzEsIDE5NSwgCi0gICAgMTk0LCAyMzEsIDE5NSwgMTg3LCAyMzEsIDE5NSwgMTkyLCAyMzEsIDE5NSwgNzksIDUzLCAyMzEsIDE5NSwgMjM3LCAxMjQsIAotICAgIDIzMSwgMTk1LCAyMzcsIDUxLCA1MywgMjMxLCAxOTUsIDQyLCAyMjgsIDE4MCwgMjMxLCAxOTUsIDQxLCAyMjgsIDE4MCwgNywgCi0gICAgMjMxLCAxOTUsIDMsIDEsIDU3LCA3LCAyMzEsIDE5NSwgMywgMSwgNzIsIDcsIDIzMSwgMTk1LCAzLCAxLCA3MywgNywgMjMxLCAKLSAgICAxOTUsIDMsIDEsIDI1NCwgMTg0LCA3LCAyMzEsIDE5NSwgMywgMSwgMjM3LCAxNDQsIDIyNywgMjM5LCA1MywgMjQwLCAxOTQsIAotICAgIDUzLCAyMzQsIDQwLCA1MywgMjM4LCAyMjYsIDI0MywgMTA5LCA1MywgMjUwLCAyMjQsIDUzLCAyNTEsIDE1LCA1MywgMjQ0LCAKLSAgICAxNjMsIDUzLCAyMzksIDE5MywgNTMsIDI0MCwgMjM0LCA1MywgMjU0LCAxNiwgNTMsIDEzOSwgMjM5LCAyNDYsIDUzLCAyNDksIAotICAgIDIwMywgNTMsIDI0OSwgMjM1LCA1MywgMjU0LCA4MiwgNTMsIDI0MCwgNTMsIDUzLCAyMzUsIDE2NywgNTMsIDIzOCwgMjM3LCAKLSAgICAyNDUsIDY0LCA1MywgMjUxLCAxMDYsIDUzLCAyMzYsIDk4LCA1MywgMjM2LCAwLCA1MywgMjM2LCAxMDYsIDUzLCAyNDksIAotICAgIDE1MSwgNTMsIDM2LCA0MiwgMjM1LCAxNCwgNDYsIDM2LCA0MSwgMjM1LCAxNCwgNDYsIDM2LCAxODIsIDYxLCAyNDYsIDE2NywgCi0gICAgMjMzLCA4NywgMzYsIDI0MCwgMTI1LCA2MSwgMjQ2LCAxNjcsIDIzMywgODcsIDM2LCAyMjcsIDE4NCwgNjcsIDQ2LCAzNiwgCi0gICAgMjMxLCAyMDksIDY3LCA0NiwgMzYsIDQyLCA2NywgNDYsIDM2LCA0MSwgNjcsIDQ2LCAzNiwgMjQ2LCAxNzQsIDIzMywgODcsIAotICAgIDM2LCAyMzEsIDIwOSwgMjQ2LCAxNzQsIDIzMywgODcsIDM2LCAyMjcsIDE4NCwgMjQ2LCAxNzQsIDIzMywgODcsIDM2LCAKLSAgICAxNTIsIDE5NywgNDYsIDM2LCAyNDYsIDE2MCwgMTk3LCA0NiwgMzYsIDIzMSwgMjIyLCAyMzUsIDIwLCAzNiwgMjMxLCAyMjIsIAotICAgIDIzNSwgMjcsIDM2LCAyMzEsIDIyMiwgMjMzLCA5MCwgMzYsIDIzMSwgMjIyLCAyMzcsIDQwLCAyMzAsIDE1MSwgMzYsIDQyLCAKLSAgICA0MSwgNjcsIDQ2LCAzNiwgMjMxLCAyMjIsIDIzNiwgMjEwLCAzNiwgMjMxLCAyMjIsIDIzNiwgMTIxLCAzNiwgMjMxLCAyMjIsIAotICAgIDI0MCwgNjgsIDIzMywgNzgsIDIzMSwgMTkzLCAzNiwgMjM1LCAzNywgMjM1LCA1NCwgMjMzLCA4NywgMzYsIDQ3LCA2MSwgCi0gICAgMTk1LCAyMzMsIDg3LCAzNiwgMjM1LCAyNDcsIDk4LCAzNiwgMjM3LCA0OSwgMjMzLCA1OSwgMzYsIDI0NiwgMjQwLCAyMzcsIAotICAgIDE3NCwgNDYsIDM2LCAxMTcsIDY3LCAyMzMsIDg3LCAzNiwgMTgyLCA0NywgMjM1LCA1NCwgMjMzLCA4NywgMzYsIDgxLCAKLSAgICAyMzUsIDE0LCAyLCAxNzEsIDIzMCwgMTM0LCAzNiwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDIzMCwgMTM0LCAzNiwgNDIsIAotICAgIDY3LCA1MSwgMzYsIDQxLCA2NywgNTEsIDM2LCAyMzMsIDE0NSwgNDYsIDIzNSwgMTQ0LCAyNTMsIDE2LCAyMzIsIDY1LCAKLSAgICAxODAsIDI1MiwgMjMwLCAyMzQsIDIzNSwgMTU5LCA2LCAyNTQsIDE5NCwgMjM3LCAxNzcsIDIzNCwgMjksIDIzNywgOTUsIAotICAgIDI0NiwgMTY3LCA5OCwgMjQ5LCAxNDQsIDI1MywgMTYsIDI0OSwgMTQxLCAyNTIsIDUzLCAyNDMsIDEwMywgMjMyLCAxNywgCi0gICAgMjM0LCAyMTcsIDIzNywgMTc3LCAyMzAsIDU5LCA5NSwgMywgMjE0LCA5NSwgNiwgMjEyLCAyMjgsIDE4NywgNiwgMjEyLCAKLSAgICAxNTksIDYsIDIxMiwgMjM4LCAzNSwgMjMyLCAxNywgMjM4LCAzNSwgMjM0LCAzNCwgMTA3LCAxMzUsIDI1MiwgMjIzLCA5NSwgCi0gICAgNiwgNzQsIDIyOCwgMTg3LCA2LCA3NCwgOTUsIDYsIDE0OSwgOTUsIDMsIDE0OSwgMjU1LCA1OCwgNDUsIDI1MiwgMjE5LCAKLSAgICA5OCwgMTU5LCA2LCAxOTksIDIzOSwgMTU5LCA1MywgMjQwLCAxODEsIDIzMywgOSwgMjMwLCAyNDAsIDk1LCA2LCAyNTQsIAotICAgIDE4NywgMTU5LCA2LCAyNTQsIDE4NywgMTU5LCA2LCAyNTQsIDE5NiwgOTUsIDYsIDE0NiwgMjI4LCAxODcsIDYsIDE0NiwgCi0gICAgMTU5LCA2LCAxNDYsIDIyOSwgNTMsIDI0NSwgMjM2LCAyMzIsIDQzLCAyMzYsIDIxNywgNzYsIDIzMiwgMTEsIDUzLCAyNDYsIAotICAgIDQsIDE2NSwgNTMsIDIzMywgNjEsIDE1OSwgNiwgMjU0LCAxOTMsIDI0NSwgNTcsIDUzLCAyNTMsIDI1NCwgNTMsIDIzMywgCi0gICAgNzAsIDI1MywgMjU0LCA1MywgMjI4LCAxODcsIDYsIDI1NCwgMTkzLCAyMDksIDE5LCAzLCAxLCAyNDAsIDE0NiwgMjM5LCAKLSAgICA2MiwgNTMsIDIzNCwgMiwgNTMsIDk1LCA2LCAyNTQsIDE4NSwgMjI4LCAxODcsIDYsIDI1NCwgMTk0LCAyMzIsIDE4MCwgOTgsIAotICAgIDk1LCAzLCA3MiwgOTUsIDYsIDcyLCA5NSwgNiwgMjU0LCAxOTEsIDIwOSwgNiwgMjU0LCAxOTEsIDk1LCA2LCAxODUsIDk1LCAKLSAgICAzLCA3MywgOTIsIDk4LCAyNTMsIDE3MSwgOTgsIDI0MSwgMTQzLCA5OCwgMjQxLCAxMTYsIDk4LCAyMzAsIDcxLCAyMzUsIAotICAgIDIxNCwgMjM1LCA5NywgNiwgMjU0LCAxOTYsIDIzMiwgMTgzLCA1MywgMTU5LCAzLCAyNTIsIDIyMywgMTU5LCAzLCAyMzcsIAotICAgIDYxLCAxNTksIDYsIDIzNywgNjEsIDE1OSwgNiwgMjUyLCAyMjMsIDE1OSwgMjQwLCAxNTQsIDIzMCwgMTk2LCAyMDksIDMwLCAKLSAgICA2LCAyMTQsIDIwOSwgMzAsIDYsIDE0OSwgMjAwLCAzMCwgNiwgMTQ5LCAyMDksIDMwLCA2LCAyNTQsIDE5MCwgMTU5LCAyNywgCi0gICAgNiwgMjIyLCAyMjIsIDE1OSwgMjcsIDMsIDIyMiwgMjIyLCAxNTksIDI3LCAzLCA3MiwgMTU5LCAyNywgMywgNzQsIDE1OSwgCi0gICAgMjcsIDMsIDI1NCwgMTkyLCAyMzQsIDIwMCwgMjQwLCAxMzgsIDIwOSwgMjMwLCAxNDIsIDI1MywgMTI5LCA1MywgMjI3LCAKLSAgICAyMTYsIDIwOSwgMywgMjU0LCAxOTEsIDE0LCAzMiwgMjMzLCAxNiwgMjM1LCAyMTQsIDIzNywgODAsIDIzMywgNzYsIDE2OCwgCi0gICAgMjQwLCAzNywgMjM3LCA4MCwgMjMzLCA3NiwgMTM1LCAyMzcsIDQsIDIzNywgODAsIDIzMywgNzYsIDE2OCwgMjM4LCAyMTcsIAotICAgIDIzNywgODAsIDIzMywgNzYsIDEzNSwgMjM1LCAxMjIsIDIzNywgODAsIDIzMywgNzYsIDE1MiwgMjM1LCAxMjIsIDIzNywgCi0gICAgODAsIDIzMywgNzYsIDI0NiwgMTYwLCAyMzUsIDEyMiwgMjM3LCA4MCwgMjMzLCA3NiwgMTY4LCAyMzgsIDYxLCAyMzcsIDgwLCAKLSAgICAyMzMsIDc2LCAyNDYsIDE1OSwgMjM2LCAyMzIsIDIzNywgODAsIDIzMywgNzYsIDE2OCwgMjM2LCA2MywgMjM3LCA4MCwgCi0gICAgMjMzLCA3NiwgMTUyLCAyMzMsIDE2MywgMjM3LCA4MCwgMjMzLCA3NiwgMjQ2LCAxNTksIDIzMywgMTYzLCAyMzcsIDgwLCAKLSAgICAyMzMsIDc2LCAyNDAsIDE1NSwgMjMzLCAxNjMsIDIzMywgNzYsIDIzMSwgMjI3LCAxMTgsIDI0MCwgMTE4LCAyMDcsIDExOCwgCi0gICAgMjQwLCAxMTgsIDIwNywgMTEzLCAyNDAsIDExOCwgMjA3LCAxNjYsIDI0MCwgMTE4LCAyMDcsIDE1OCwgMjQwLCAxMTgsIAotICAgIDIwNywgMTczLCAyNDAsIDExOCwgMjA3LCAxODMsIDI0MCwgMTE4LCAyMDcsIDE5NCwgMjQwLCAxMTgsIDIwNywgMTg3LCAKLSAgICAyNDAsIDExOCwgMjA3LCAxOTIsIDI0MCwgMTE4LCAyMDcsIDI0NiwgMTc5LCAyNDAsIDExOCwgMjA3LCAyMzUsIDY4LCAyNDAsIAotICAgIDExOCwgMjA3LCAyMzUsIDcyLCAyNDAsIDExOCwgMjA3LCAyMzcsIDEwMCwgMjQwLCAxMTgsIDIwNywgMTY4LCAyMzMsIDc1LCAKLSAgICAyNDAsIDExOCwgMjA3LCAyNDYsIDE1OSwgMjMzLCA3NSwgMjQwLCAxMTgsIDIwNywgMTY4LCAyMzEsIDE5NiwgMywgMjQwLCAKLSAgICAxMTgsIDIwNywgMTE4LCAzLCAyNDAsIDExOCwgMjA3LCAxMTMsIDMsIDI0MCwgMTE4LCAyMDcsIDE2NiwgMywgMjQwLCAxMTgsIAotICAgIDIwNywgMTU4LCAzLCAyNDAsIDExOCwgMjA3LCAxNzMsIDMsIDI0MCwgMTE4LCAyMDcsIDE4MywgMywgMjQwLCAxMTgsIDIwNywgCi0gICAgMTk0LCAzLCAyNDAsIDExOCwgMjA3LCAxODcsIDMsIDI0MCwgMTE4LCAyMDcsIDE5MiwgMywgMjQwLCAxMTgsIDIwNywgMjQ2LCAKLSAgICAxNzksIDMsIDI0MCwgMTE4LCAyMDcsIDIzNSwgNjgsIDMsIDI0MCwgMTE4LCAyMDcsIDIzNSwgNzIsIDMsIDI0MCwgMTE4LCAKLSAgICAyMDcsIDIzNywgMTAwLCAzLCAyNDAsIDExOCwgMjA3LCAxNjgsIDIzMywgNzUsIDMsIDI0MCwgMTE4LCAyMDcsIDI0NiwgCi0gICAgMTU5LCAyMzMsIDc1LCAzLCAyNDAsIDExOCwgMjA3LCAxNjgsIDIzMSwgMTk2LCAyNDAsIDExOCwgMjA3LCAxNjgsIDIzMywgCi0gICAgMTE3LCAyNTUsIDYyLCAyMjIsIDIyMiwgMjQwLCAxMTgsIDIwNywgMjQ2LCAxNTksIDIzMSwgMTk2LCAyNDAsIDExOCwgMjA3LCAKLSAgICAyNTMsIDUzLCAyMzEsIDE5NiwgMjQwLCAxMTgsIDIwNywgMjAwLCAxNjgsIDIzMywgNzUsIDcsIDMsIDEsIDIwMCwgMjU0LCAKLSAgICAxOTQsIDI0MCwgMTE4LCAyMDcsIDI1MywgMTcsIDI1MCwgMjA5LCAxNSwgMjQwLCAxMTgsIDIwNywgMjQwLCAxODksIDI0MywgCi0gICAgOTEsIDE1LCAyNDAsIDExOCwgMjA3LCAyNDAsIDE4OSwgMjMxLCAxOTYsIDI0MCwgMTE4LCAyMDcsIDE2OCwgMjM1LCA1NiwgCi0gICAgMjMxLCAxOTYsIDExNywgNTgsIDIzNSwgMTgsIDU4LCA4MSwgNTgsIDIzMSwgMTkxLCA1OCwgNDIsIDQxLCA1OCwgOTksIAotICAgIDEwMywgNTgsIDI0MCwgMTM0LCAyNDYsIDE4NCwgNTgsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNTgsIDI0MCwgMTQxLCAyNDYsIAotICAgIDE3MCwgNTgsIDI0MCwgMTQxLCAyNDYsIDE4NCwgNTgsIDExNywgNjcsIDIsIDgyLCA4MSwgNjcsIDIsIDgyLCAxMTcsIDI0NywgCi0gICAgMjMsIDU4LCA4MSwgMjQ3LCAyMywgNTgsIDExNywgMTM1LCAyMzcsIDE4MywgNTgsIDIzNSwgMTgsIDEzNSwgMjM3LCAxODMsIAotICAgIDU4LCA4MSwgMTM1LCAyMzcsIDE4MywgNTgsIDIzMSwgMTkxLCAxMzUsIDIzNywgMTgzLCA1OCwgMTE3LCA2NywgMiwgMjQwLCAKLSAgICAxMzMsIDgxLCA2NywgMiwgMjQwLCAxMzMsIDExNywgNjcsIDI0NiwgMTcyLCAxMjUsIDIzNSwgMTgsIDY3LCAyNDYsIDE3MiwgCi0gICAgMTI1LCA4MSwgNjcsIDI0NiwgMTcyLCAxMjUsIDIzMSwgMTkxLCA2NywgMjQ2LCAxNzIsIDEyNSwgOTksIDEwMywgNjcsIDIsIAotICAgIDI0MiwgMTc1LCAxMTcsIDY3LCAyLCA4OCwgODEsIDY3LCAyLCA4OCwgMTE3LCA2NywgMiwgMjQwLCAyMDIsIDgxLCA2NywgMiwgCi0gICAgMjQwLCAyMDIsIDQyLCA0MSwgMjQ3LCAyMywgNTgsIDQyLCA0MSwgNjcsIDIsIDgyLCAyMzEsIDE5MSwgMjM3LCAxNzAsIDU4LCAKLSAgICAyMzUsIDE4LCA2NywgMiwgMjUzLCA5MywgMjMwLCAxNDMsIDIzNSwgMTgsIDY3LCAyLCAyNTMsIDkzLCAyMjksIDE3NywgCi0gICAgMjMxLCAxOTEsIDY3LCAyLCAyNTMsIDkzLCAyMzAsIDE0MywgMjMxLCAxOTEsIDY3LCAyLCAyNTMsIDkzLCAyMjksIDE3NywgCi0gICAgODEsIDY3LCAyLCAyMzcsIDc5LCAyMzAsIDEzNCwgMjMxLCAxOTEsIDY3LCAyLCAyMzcsIDc5LCAyMzAsIDE0MywgMjI3LCAKLSAgICAxODQsIDI1MiwgMjI4LCAyMzAsIDE5NSwgNTgsIDIzMSwgMjA5LCAyNTIsIDIyOCwgMjMwLCAxOTUsIDU4LCAyNDAsIDEzNCwgCi0gICAgMjQ2LCAxODQsIDY3LCAxODAsIDE4MiwgMTI1LCAxMTcsIDY3LCAxODAsIDI1MiwgMjE5LCAxMDcsIDgxLCA2NywgMTgwLCAKLSAgICAxMjUsIDIyNywgMTg0LCAyNDYsIDE1NywgMjM3LCA0MCwgNTgsIDIzMSwgMjA5LCAyNDYsIDE1NywgMjM3LCA0MCwgNTgsIAotICAgIDExNywgMjM1LCAxNCwgMiwgMTcxLCAyMzMsIDEzOSwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDIzMCwgMTM0LCAyMzUsIDE4LCAKLSAgICAyMzUsIDE0LCAyLCAxNzEsIDIyOSwgMTc3LCAyMzUsIDE4LCAyMzUsIDE0LCAyLCAxNzEsIDIzMCwgMTQzLCA4MSwgMjM1LCAKLSAgICAxNCwgMiwgMTcxLCAyMzMsIDEzOSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMjMwLCAxMzQsIDIzMSwgMTkxLCAyMzUsIDE0LCAKLSAgICAyLCAxNzEsIDIyOSwgMTc3LCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCAyMzAsIDE0MywgODEsIDY3LCAxMDcsIDExNywgCi0gICAgNTgsIDIzNSwgMTgsIDY3LCAxMTcsIDEwNiwgMjMxLCAxOTEsIDU4LCAxMTcsIDY3LCAxMDcsIDgxLCA1OCwgMTE3LCAyMzcsIAotICAgIDE4NiwgMjM1LCA3MywgMjM1LCAxOCwgMjM3LCAxODYsIDIzNSwgNzMsIDgxLCAyMzcsIDE4NiwgMjM1LCA3MywgMjMxLCAKLSAgICAxOTEsIDIzNywgMTg2LCAyMzUsIDczLCAxMTcsIDIzNSwgMTQsIDEwNywgODEsIDIzMywgMTA1LCA4MSwgMjM1LCAxNCwgCi0gICAgMTA3LCAxMTcsIDIzMywgMTA1LCAxMTcsIDQ3LCA2NywgMiwgODIsIDQyLCA0MSwgNDcsIDY3LCAyLCA4MiwgODEsIDQ3LCAKLSAgICA2NywgMiwgODIsIDExNywgNDcsIDU4LCAyMzUsIDE4LCA0NywgNTgsIDgxLCA0NywgNTgsIDIzMSwgMTkxLCA0NywgNTgsIAotICAgIDQyLCA0MSwgNDcsIDU4LCA5OSwgMTAzLCA0NywgNTgsIDI0MCwgMTM0LCAyNDYsIDE4NCwgNDcsIDU4LCAyNDAsIDEzNCwgCi0gICAgMjQ2LCAxNzAsIDQ3LCA1OCwgMjQwLCAxNDEsIDI0NiwgMTcwLCA0NywgNTgsIDI0MCwgMTQxLCAyNDYsIDE4NCwgNDcsIDU4LCAKLSAgICAxMTcsIDIzNywgNDksIDU4LCA4MSwgMjM3LCA0OSwgNTgsIDExNywgMjMzLCAxNTYsIDU4LCA4MSwgMjMzLCAxNTYsIDU4LCAKLSAgICAyMzUsIDE4LCA2NywgMiwgNDcsIDgyLCAyMzEsIDE5MSwgNjcsIDIsIDQ3LCA4MiwgMTE3LCAyMzcsIDExMCwgNTgsIDIzNSwgCi0gICAgMTgsIDIzNywgMTEwLCA1OCwgODEsIDIzNywgMTEwLCA1OCwgMjMxLCAxOTEsIDIzNywgMTEwLCA1OCwgMTE3LCA2NywgMTgwLCAKLSAgICAxMjUsIDgxLCA2NywgMTgwLCAxMjUsIDExNywgNjMsIDU4LCAyMzUsIDE4LCA2MywgNTgsIDgxLCA2MywgNTgsIDIzMSwgCi0gICAgMTkxLCA2MywgNTgsIDIzNSwgMTgsIDYzLCA2NywgMjQ2LCAxNzIsIDEyNSwgMjM1LCAxOCwgNjMsIDY3LCAyNTQsIDIyMywgCi0gICAgMjMyLCAzMywgMjM1LCAxOCwgNjMsIDY3LCAyNTQsIDIyMywgMjMzLCAyMjYsIDIsIDE2OSwgMTI1LCAyMzUsIDE4LCA2MywgCi0gICAgNjcsIDI1NCwgMjIzLCAyMzMsIDIyNiwgMiwgNjEsIDEyNSwgMjM1LCAxOCwgNjMsIDQ3LCA1OCwgMjM1LCAxOCwgNjMsIDQ3LCAKLSAgICA2NywgMjU0LCAyMjMsIDIzMiwgMzMsIDgxLCA2MywgNjcsIDI0NiwgMTcyLCAyNDYsIDUyLCAyNDAsIDEzNCwgMjQ2LCAxODQsIAotICAgIDY3LCAxODAsIDIzNSwgNDAsIDI0MCwgMTQxLCAyNDYsIDE3MCwgNjcsIDE4MCwgMjM1LCA0MCwgOTksIDEwMywgNjMsIDU4LCAKLSAgICA0MSwgNjcsIDIsIDMsIDIzNSwgMjAsIDIzMSwgMTkxLCA2NywgMTE3LCAxMDYsIDIzNSwgMTgsIDU4LCAxNTIsIDgxLCAyMzUsIAotICAgIDczLCAxMTcsIDY3LCAyLCA2MSwgODIsIDgxLCA2NywgMiwgNjEsIDgyLCA0MiwgNDEsIDY3LCAyLCA2MSwgODIsIDExNywgCi0gICAgNjcsIDIsIDQ3LCA2MSwgODIsIDgxLCA2NywgMiwgNDcsIDYxLCA4MiwgNDIsIDQxLCA2NywgMiwgNDcsIDYxLCA4MiwgMTE3LCAKLSAgICAyMjksIDE4NiwgNTgsIDgxLCAyMjksIDE4NiwgNTgsIDQyLCA0MSwgMjI5LCAxODYsIDU4LCAzMiwgMjQ3LCAyNDEsIDIyOSwgCi0gICAgMjM4LCAyMzUsIDc5LCAyMjcsIDE4OCwgMjQyLCAxLCAyMzYsIDY2LCAyNDIsIDEsIDI0NiwgMjE4LCAxOTAsIDIzOCwgMjEwLCAKLSAgICAyNDAsIDE5NSwgMjQ4LCAxNTUsIDIzMSwgODQsIDIzNywgMTM4LCAyMzUsIDQ0LCAyNTMsIDE2LCAxOTAsIDI1NCwgMjE2LCAKLSAgICAyMzUsIDQ0LCAyNTMsIDE2LCAzLCAyMzUsIDQ0LCAyNTMsIDE2LCAyMzMsIDExMSwgMjU0LCAyMDMsIDIzNSwgMTMwLCAyNDYsIAotICAgIDIxOCwgMTkwLCAyMzUsIDExNCwgMjU0LCAyMDMsIDIzNSwgMTMwLCAzLCAyMzMsIDExMSwgMjU0LCAyMDMsIDIzNSwgMTMwLCAKLSAgICAyNTIsIDI1NSwgMTA2LCAyMzksIDIwNCwgMjQwLCAxNTQsIDIzMywgMTAxLCAyNDAsIDE1NCwgMjMwLCAxNzgsIDI0MCwgCi0gICAgMTU0LCAyMzAsIDE5NiwgMjQwLCAxNzIsIDUzLCAyMjcsIDI1NCwgNTMsIDU2LCAyNDAsIDE4MCwgMjMzLCAxMzAsIDIzNywgCi0gICAgODQsIDI1MywgMTMzLCAyMzcsIDEyNCwgMjMzLCAxNDUsIDIzMSwgMTkyLCAyNDYsIDE3NCwgMjMxLCAxOTIsIDIzOCwgMTM0LCAKLSAgICAyMzEsIDE5MiwgMzcsIDI0MCwgMjMzLCAyNDgsIDExLCAyNDAsIDIzMywgMjM3LCAxODIsIDI0MCwgMjMzLCAyMjksIDU0LCAKLSAgICA5NiwgMjMxLCAyNTIsIDQxLCAyMzcsIDk4LCAyMzcsIDk4LCAyMzMsIDk5LCAyMzcsIDk4LCAyMzIsIDcsIDIzNywgOTgsIAotICAgIDIzNCwgNTcsIDI0NiwgMjE4LCAxOTAsIDIzNSwgMTY0LCAyMzMsIDEzMiwgOTYsIDE5MCwgMjMzLCAxMzIsIDk2LCAyMzUsIAotICAgIDI2LCAyNDYsIDIzMCwgMjM1LCAyNiwgMjUzLCA4MSwgMjI3LCAxODYsIDIzNywgMTE3LCAyMzEsIDIwOCwgNDcsIDIzMSwgCi0gICAgMjA4LCAyMzcsIDQ5LCAyMzEsIDIwOCwgMjM1LCAxMTUsIDIzMSwgMjA4LCAyMzYsIDI0OSwgMjMxLCAyMDgsIDI0MCwgNzksIAotICAgIDIzMSwgMjA4LCAyMzEsIDIwOSwgMjMxLCAyMDgsIDIzMSwgMjA5LCAyMzUsIDExNSwgMjMxLCAyMDgsIDIyNywgMTg0LCAKLSAgICAyMzUsIDExNSwgMjMxLCAyMDgsIDIzMSwgMTc3LCAyMzQsIDE2LCAyMzksIDIxNiwgMjI5LCAyMTAsIDU2LCAyMzcsIDEyNCwgCi0gICAgMjM2LCA2NSwgMjMyLCAxOTksIDIyOSwgMjEwLCAyMzAsIDY2LCAyNDAsIDEyOCwgMjMxLCAxOTIsIDIwMCwgMjA1LCAyMzMsIAotICAgIDcwLCAyNTAsIDIxMSwgMTkzLCAyNTEsIDIyNSwgMjQxLCAyMiwgMjQwLCA4NywgMjMzLCAxMDEsIDE5MCwgMjA1LCAyNDAsIAotICAgIDE3MiwgMjA1LCAyMjcsIDE0MiwgMTA1LCA5NiwgMTkwLCAyMjcsIDE0MiwgMTA1LCA5NiwgMjI3LCAxODcsIDEwNSwgOTYsIAotICAgIDIyNywgMTg3LCAyNTMsIDg1LCAxOTAsIDIzMywgMTgzLCAxMDUsIDk2LCAyMzUsIDU4LCAyMjcsIDE4NywgMjUzLCA0MywgCi0gICAgMjMzLCAxODMsIDEwNSwgOTYsIDIzNywgNzgsIDEwNSwgOTYsIDE5MCwgMjM3LCA3OCwgMTA1LCA5NiwgMjM3LCA3OCwgMTA1LCAKLSAgICAxNDUsIDEwNSwgOTYsIDIzNywgNDksIDIwNSwgMjUzLCAxNjcsIDEwNSwgOTYsIDIzMCwgMTMwLCA5NiwgMjI3LCAyMDQsIAotICAgIDIzMCwgMTMwLCA5NiwgMjMwLCAyNDUsIDIzMywgMTg3LCAyMzAsIDIyNSwgMjUyLCAyMzAsIDIzOSwgODUsIDIyNywgMjA0LCAKLSAgICAxMDUsIDk2LCAyMjcsIDE4NywgMTA1LCAxODAsIDE0NSwgMjUyLCAyMzAsIDI0MCwgMTkwLCAyNTMsIDE2LCAyNDAsIDE5MCwgCi0gICAgMTA2LCAxNDUsIDIyNywgMTg3LCAxMDUsIDk2LCAyNDAsIDE5NCwgMjM1LCA5MSwgMjM3LCA1MSwgMjM3LCA2NiwgMjQ2LCAKLSAgICAxNzQsIDI1NCwgMTk4LCAxMDUsIDk2LCAyNDYsIDE3NCwgMTA1LCA5NiwgMjI5LCAyNDIsIDk2LCAyMzEsIDY2LCAyMzAsIAotICAgIDU3LCA5NiwgMjQ3LCA1MywgMjM1LCA5MSwgMjQxLCAzNiwgMTA1LCA5NiwgMTA1LCAxODAsIDI1NCwgMjA1LCAyMjksIDI0NSwgCi0gICAgMjMzLCA5OSwgMjUzLCAyMTAsIDIzMSwgMTI5LCAxMDUsIDk2LCAxOTAsIDEwNSwgOTYsIDIzMSwgMjM5LCA5NiwgMTkwLCAKLSAgICAyMzEsIDIzOSwgOTYsIDIzNCwgMjM0LCAyMzAsIDEzMCwgOTYsIDIzMSwgMTkwLCAxNDUsIDEwNSwgOTYsIDIyOCwgMTc1LCAKLSAgICAxNDUsIDEwNSwgOTYsIDIzMSwgMTkwLCAxMDcsIDEwNSwgOTYsIDIyOCwgMTc1LCAxMDcsIDEwNSwgOTYsIDIzMSwgMTkwLCAKLSAgICAyNTMsIDg1LCAxOTAsIDEwNSwgOTYsIDIyOCwgMTc1LCAyNTMsIDg1LCAxOTAsIDEwNSwgOTYsIDI0NywgODksIDIzMCwgCi0gICAgMTI4LCAyNDcsIDg5LCAyMjcsIDE4MywgMjMzLCAxODcsIDE5MCwgMjMwLCAxMzAsIDk2LCAxOTAsIDIzMCwgMTI4LCAxOTAsIAotICAgIDIyNywgMTgzLCAyMzUsIDU4LCAyMzEsIDE5MCwgMjUzLCA0MywgMTA1LCA5NiwgMjM1LCA1OCwgMjI4LCAxNzUsIDI1MywgCi0gICAgNDMsIDEwNSwgOTYsIDIzMSwgMTkwLCAxNDUsIDIzMCwgMTMwLCA5NiwgMjI4LCAxNzUsIDE0NSwgMjMwLCAxMzAsIDk2LCAKLSAgICAyMzUsIDU4LCAyMzEsIDE5MCwgMjUzLCA0MywgMjMwLCAxMzAsIDk2LCAyMzUsIDU4LCAyMjgsIDE3NSwgMjUzLCA0MywgCi0gICAgMjMwLCAxMzAsIDk2LCAyMzEsIDE5MCwgMTQ1LCAyMjcsIDE4MywgMjI4LCAxNzUsIDE0NSwgMjMwLCAxMjgsIDIzNSwgNTgsIAotICAgIDIzMSwgMTkwLCAyNTMsIDQzLCAyMjcsIDE4MywgMjM1LCA1OCwgMjI4LCAxNzUsIDI1MywgNDMsIDIzMCwgMTI4LCAyMzIsIAotICAgIDQsIDIzMiwgOSwgMjMzLCAxMDYsIDE0NSwgMTA1LCA5NiwgMjMzLCAxMDcsIDE0NSwgMTA1LCA5NiwgMjMzLCAxMDYsIDE0NSwgCi0gICAgMjMwLCAxMzAsIDk2LCAyMzMsIDEwNywgMTQ1LCAyMzAsIDEzMCwgOTYsIDI0NiwgMjE4LCAxOTAsIDIzNCwgMTk2LCAyNDYsIAotICAgIDIxOCwgMTkwLCAyMzQsIDIzNiwgMjM3LCA3NiwgMjUzLCAxNiwgMjMzLCA4MywgMjUzLCAxNiwgMTkwLCAxMDIsIDIzNywgCi0gICAgNzYsIDI1MywgMTYsIDE5MCwgMTAyLCAyMzMsIDgzLCAyNTMsIDE2LCAyMzcsIDc2LCAxMDYsIDE0NSwgMTA1LCA5NiwgMjMzLCAKLSAgICA4MywgMTA2LCAxNDUsIDEwNSwgOTYsIDIzNSwgNTgsIDEwMiwgMjM3LCA3NiwgMTA2LCAyNTMsIDQzLCAxMDUsIDk2LCAyMzUsIAotICAgIDU4LCAxMDIsIDIzMywgODMsIDEwNiwgMjUzLCA0MywgMTA1LCA5NiwgMjM3LCA3NiwgMTA2LCAyLCAxOTAsIDEwNSwgOTYsIAotICAgIDIzMywgODMsIDEwNiwgMiwgMTkwLCAxMDUsIDk2LCAyMzIsIDIzMiwgMjMzLCAyMjAsIDIyNywgNzMsIDIzMywgMjIwLCAKLSAgICAyMzcsIDExNywgMzcsIDI0MCwgMTkwLCAyNTMsIDE2LCAzNywgMjMzLCAxNDIsIDI1MywgMTYsIDM3LCAyNDAsIDE5MCwgCi0gICAgMTA2LCAxNDUsIDEwNSwgOTYsIDM3LCAyMzMsIDE0MiwgMTA2LCAxNDUsIDEwNSwgOTYsIDM3LCAyNDgsIDQsIDM3LCAyNDgsIAotICAgIDEyLCAzMywgMjQwLCAxODAsIDMzLCAyMzcsIDEyNCwgMzMsIDIzNywgMTY2LCAzMywgMjMzLCAxMzAsIDIzNywgODQsIDMzLCAKLSAgICA1NiwgMjMxLCAxOTIsIDMzLCAyNDYsIDE3NCwgMjMxLCAxOTIsIDMzLCAyMzMsIDE0NSwgMjMxLCAxOTIsIDMzLCAyMzUsIAotICAgIDkxLCAzMywgMjQwLCAxNTEsIDIzNSwgNTEsIDI0MCwgMTgwLCAyMzUsIDUxLCAyMzcsIDEyNCwgMjM1LCA1MSwgMjM3LCAKLSAgICAxNjYsIDIzNSwgNTEsIDU2LCAyMzEsIDE5MiwgNDEsIDI0MCwgMTQ5LCA0MiwgMjQwLCAxNDksIDEwMywgMjQwLCAxNDksIAotICAgIDk5LCAyNDAsIDE0OSwgMjMwLCAyMjcsIDIzNiwgMTU4LCAyNDIsIDgsIDIzNiwgODYsIDIzNywgNDksIDYxLCAyNTIsIDIxOSwgCi0gICAgNDEsIDIzMCwgMTQxLCA0NywgNjEsIDI1MiwgMjE5LCA0NywgNDEsIDIzMCwgMTQxLCAyNDYsIDIxOCwgMTkwLCAyMzksIAotICAgIDIwNSwgMTkwLCAyNDIsIDgsIDI0NiwgMjE4LCAxOTAsIDIzOCwgMjIzLCAyMzUsIDE5NCwgNDcsIDYxLCAyNTIsIDIxOSwgCi0gICAgNDcsIDQxLCAyMzAsIDE0MSwgMjMzLCAxMDYsIDI0MiwgMTYsIDIzMSwgMjQ0LCAyMzMsIDEwNywgMjQyLCAxNiwgMjMxLCAKLSAgICAyNDQsIDIzNywgMTA0LCAyMzMsIDEzNiwgMjUzLCAxNiwgMjMzLCAxMTEsIDI1NCwgMjAzLCAyMzcsIDEwNCwgMjMyLCA0NiwgCi0gICAgMjM3LCAxMDQsIDIzMywgMTM2LCAxMDYsIDE0NSwgMTA1LCA5NiwgMjMzLCAxMTEsIDI1NCwgMjAzLCAyMzcsIDEwNCwgMjMzLCAKLSAgICAxMzYsIDE0NSwgMTA1LCA5NiwgMjMzLCAxNDIsIDI1MywgMTYsIDI0MCwgMTkwLCAyNTMsIDE2LCAyMzIsIDAsIDIzMiwgCi0gICAgMjAzLCAyMzIsIDEwMSwgMjM2LCAxNDksIDIyOSwgMzIsIDI1MiwgMTE4LCAyNDQsIDE2NSwgMjUxLCA3MSwgNDEsIDI0MCwgCi0gICAgMTE3LCAyLCAyNDcsIDEwLCA0MSwgMjMxLCAxOTMsIDI0MCwgMTU0LCAyMzUsIDI2LCAyNDYsIDIzMCwgMjQwLCAxNTQsIAotICAgIDIzNSwgMjYsIDI1MywgODEsIDI0MCwgMTU0LCAyMjcsIDE4NiwgMjQwLCAxNTQsIDIzNywgMTE3LCAyMzUsIDQxLCAyMzEsIAotICAgIDE5MiwgNTYsIDIzMSwgMTkyLCAyNDcsIDUzLCAyMzEsIDE5MiwgMjMzLCAxMzAsIDIzNywgMTY2LCAyMzUsIDE1NCwgNDIsIAotICAgIDIzNywgMTA0LCAyMzcsIDI0NiwgMjMwLCAxNDcsIDIzMywgMTAxLCA0MSwgMjM3LCAxMDQsIDIzNywgMjQ2LCAyMzAsIDE0NywgCi0gICAgMjMzLCAxMDEsIDQyLCAyMzAsIDE0NywgMjMzLCAxMDEsIDQxLCAyMzAsIDE0NywgMjMzLCAxMDEsIDIwMCwgMjQwLCAxMjgsIAotICAgIDIzNSwgOTEsIDI0MCwgMTM3LCAyMzUsIDI2LCAyNTMsIDgxLCAyNDAsIDEzNywgMjM1LCAyNiwgMjQ2LCAyMzAsIDQ3LCAKLSAgICAyMzUsIDYxLCA0NywgMjMxLCAyMjgsIDQ3LCAyMjcsIDE4NiwgNDcsIDIzNywgMTE3LCAyMzEsIDEyMCwgMTA1LCAyMiwgCi0gICAgMjMzLCAxMzIsIDk2LCAyMzEsIDE5MCwgMiwgMjQ2LCAxNjQsIDIyOCwgMTc1LCAyLCAyNDYsIDE2NCwgMjQ3LCAxMTQsIAotICAgIDI0NywgODksIDIzMCwgMTI4LCAyNDcsIDExNCwgMjQ3LCA4OSwgMjI3LCAxODMsIDIzMSwgMTkwLCAxMDUsIDE4MCwgMTQ1LCAKLSAgICAyMjcsIDE4MywgMjI4LCAxNzUsIDEwNSwgMTgwLCAxNDUsIDIzMCwgMTI4LCAxMDUsIDE4MCwgMTQ1LCAyMzAsIDEyOCwgCi0gICAgMTA1LCAxODAsIDE0NSwgMjI3LCAxODMsIDEwNSwgMTgwLCAxNDUsIDIzMiwgNCwgMTA1LCAxODAsIDE0NSwgMjMyLCA5LCAKLSAgICAyNDYsIDIxOCwgMTkwLCAyMzYsIDE5MSwgMTQ1LCAyMzcsIDgxLCAyNDYsIDIxOCwgMTkwLCAyMzYsIDI0NiwgMTQ1LCAyMzcsIAotICAgIDgxLCAxOTAsIDM3LCAyNDAsIDE5MCwgMTA2LCAxNDUsIDEwNSwgOTYsIDE5MCwgMzcsIDIzMywgMTQyLCAxMDYsIDE0NSwgCi0gICAgMTA1LCA5NiwgMzcsIDI0MCwgMTkwLCAxMDYsIDE0NSwgMTkwLCAxMDUsIDk2LCAzNywgMjMzLCAxNDIsIDEwNiwgMTQ1LCAKLSAgICAxOTAsIDEwNSwgOTYsIDIzMSwgMTkwLCAyNTMsIDg1LCAxOTAsIDIzMCwgMTMwLCA5NiwgMjI4LCAxNzUsIDI1MywgODUsIAotICAgIDE5MCwgMjMwLCAxMzAsIDk2LCAyMzMsIDEwNiwgMjUzLCA4NSwgMTkwLCAyMzAsIDEzMCwgOTYsIDIzMywgMTA3LCAyNTMsIAotICAgIDg1LCAxOTAsIDIzMCwgMTMwLCA5NiwgMTkwLCAyMzcsIDEwNCwgMjMzLCAxMzYsIDI1MywgMTYsIDI0NiwgMjE4LCAxOTAsIAotICAgIDIzNSwgMTE0LCAyNTQsIDIwMywgMjM3LCAxMDQsIDIzMiwgNDYsIDE5MCwgMjM3LCAxMDQsIDIzMywgMTM2LCAxMDYsIDE0NSwgCi0gICAgMTA1LCA5NiwgMjQ2LCAyMTgsIDE5MCwgMjM1LCAxMTQsIDI1NCwgMjAzLCAyMzcsIDEwNCwgMjMzLCAxMzYsIDE0NSwgMjM3LCAKLSAgICA4MSwgNjEsIDIzMSwgMjE4LCAyMzYsIDE1NSwgMTY5LCAyMzEsIDIxOCwgOTksIDQxLCAyMzMsIDc0LCAyMzEsIDIxOCwgCi0gICAgMTAzLCA0MSwgMjMzLCA3NCwgMjMxLCAyMTgsIDIzNSwgNDQsIDEwNiwgMiwgMTgyLCAxNjksIDgyLCAyMzUsIDQ0LCAxMDYsIAotICAgIDIsIDYxLCAyNTIsIDIxOSwgMjU0LCAyMTcsIDI1MiwgMjU1LCAxMDYsIDE2OSwgODIsIDMsIDIzNSwgNDQsIDEwNiwgMiwgCi0gICAgNjEsIDI1MiwgMjE5LCAyNTQsIDIxNywgMjUyLCAyNTUsIDEwNiwgMTY5LCA4MiwgMjM1LCA0NCwgMTA2LCAyLCA1NiwgNDYsIAotICAgIDIzNSwgNDQsIDEwNiwgMiwgMjMzLCA5NSwgMywgMjM1LCA0NCwgMTA2LCAyLCAyMzMsIDk1LCAyMzUsIDQ0LCAxMDYsIDIsIAotICAgIDIzMSwgMTk3LCAyMzUsIDQ0LCAxMDYsIDIsIDEzNSwgMTY5LCAyMzMsIDI0MywgMjMzLCAxMTEsIDIsIDE4MiwgMTY5LCA4MiwgCi0gICAgMjMzLCAxMTEsIDIsIDYxLCAyNTIsIDIxOSwgMjU0LCAyMTcsIDI1MiwgMjU1LCAxMDYsIDE2OSwgODIsIDMsIDIzMywgMTExLCAKLSAgICAyLCA2MSwgMjUyLCAyMTksIDI1NCwgMjE3LCAyNTIsIDI1NSwgMTA2LCAxNjksIDgyLCAyMzMsIDExMSwgMiwgMjMzLCA5NSwgCi0gICAgMywgMjMzLCAxMTEsIDIsIDIzMywgOTUsIDI1NSwgNTYsIDE1MCwgMjUzLCAxNzAsIDIzMCwgNzksIDIzNCwgNTEsIDUzLCAKLSAgICAyMzQsIDk0LCA1OCwgMjM5LCAyNywgOTksIDIzMCwgMTMzLCAxMDMsIDIzMCwgMTMzLCAyMzAsIDkyLCAyMjksIDQ4LCAyNDYsIAotICAgIDIzOSwgMjQwLCAxMzgsIDQyLCAyMzMsIDE5MCwgNDEsIDIzMywgMTkwLCA0MiwgMjM3LCAyNDksIDQxLCAyMzcsIDI0OSwgCi0gICAgMjM3LCA1OSwgNDEsIDI0MCwgMjQ3LCAyMzcsIDU5LCA0MiwgMjQwLCAyNDcsIDI1MiwgMjI4LCA0MSwgMjQwLCAyNDcsIAotICAgIDI1MiwgMjI4LCA0MiwgMjQwLCAyNDcsIDIwMCwgMTkwLCA1MywgMzcsIDIzMywgMTIzLCAyNDcsIDEwLCAyMzQsIDIxOCwgCi0gICAgMjM2LCAyMTUsIDIzMiwgMTEsIDIzMywgOCwgMjM0LCAxOTUsIDIzMCwgMTU2LCAyMzUsIDYsIDIzNSwgMjcsIDI0MSwgMjE0LCAKLSAgICAxMDYsIDIzNCwgMTMwLCA1MywgMjA5LCAxOTAsIDUzLCAyMzgsIDgxLCAyMzAsIDE2NywgMjUyLCAyMjgsIDQyLCAyMzUsIAotICAgIDQwLCAyNTIsIDIyOCwgNDEsIDIzNSwgNDAsIDIzNywgNTksIDQyLCAyMzUsIDQwLCAyMzcsIDU5LCA0MSwgMjM1LCA0MCwgCi0gICAgMjUyLCAyMjgsIDEzMiwgMjMxLCAyMDgsIDIzNywgNTksIDEzMiwgMjMxLCAyMDgsIDIzOCwgMjI3LCAyNDAsIDYsIDk5LCAKLSAgICAyMzEsIDIxNCwgMjM2LCAxMCwgMTM1LCAxNjksIDI0MiwgMTc0LCAyMzksIDE3NSwgMjUwLCAxNjIsIDI0MSwgMTI3LCAxODAsIAotICAgIDI1MiwgMjMwLCAyMzcsIDQxLCAyNTUsIDc0LCAyNTQsIDE5OCwgMTAyLCAyMzMsIDEwLCAyNDYsIDIzMSwgMjMyLCAyMTQsIAotICAgIDIyNywgMTg1LCAyNDAsIDExNywgMTA0LCAyMjcsIDEzMywgMjQwLCAxMTcsIDEwNCwgMjQxLCAxMjcsIDE4MCwgMjUyLCAKLSAgICAyMzAsIDI0MCwgMTMyLCAyMzUsIDE1MCwgMjQwLCAxNDcsIDIyNywgMjIzLCAyNTMsIDE2NywgMjI1LCAxMTEsIDIzMywgNDksIAotICAgIDI0NiwgMywgMjM2LCAyMDIsIDIzMiwgMTEzLCAyMzYsIDE3OCwgMjM2LCAzNiwgMjQwLCAyOSwgMjQwLCA0LCAyMjgsIDIzMywgCi0gICAgMjI4LCAyMzQsIDE2MiwgMTYzLCAxNCwgMjM2LCAxMDgsIDE2MiwgMTYzLCAxNCwgMjQwLCAxNSwgMjQwLCAyMzIsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQ2LCAxODksIDIzNywgODEsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDIzNSwgMTY0LCAxNjIsIDE2MywgCi0gICAgMTQsIDI0NiwgMTg5LCAyMzMsIDkwLCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAyNDcsIDE1LCAxNjIsIDE2MywgMTQsIAotICAgIDI0NiwgMTg5LCAyMzUsIDIwLCAxNjIsIDE2MywgMTQsIDIzNywgNDAsIDIzNywgMTY0LCAxNjIsIDE2MywgMTQsIDIzNywgCi0gICAgNDAsIDI0NywgMTUsIDE2MiwgMTYzLCAxNCwgMjQ1LCAxOTEsIDEyNSwgMTYyLCAxNjMsIDE0LCAyMzIsIDgzLCAxMjUsIAotICAgIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDIzNywgODQsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDIzMCwgMTUxLCAxNjIsIAotICAgIDE2MywgMTQsIDI0NiwgMTg5LCAyMzAsIDEyOCwgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjI3LCAxODMsIDE2MiwgMTYzLCAKLSAgICAxNCwgMTE3LCAyNDEsIDIxLCAxNjIsIDE2MywgMTQsIDgxLCAyNDEsIDIxLCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAxMTcsIAotICAgIDU4LCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCA4MSwgNTgsIDE2MiwgMTYzLCAxNCwgMjM3LCA0MCwgMjMwLCAxNTEsIDE2MiwgCi0gICAgMTYzLCAxNCwgMTAzLCAyNDYsIDIxNSwgMjMxLCAxOTcsIDE2MiwgMTYzLCAxNCwgMjQxLCAzNiwgMjM3LCAxNjQsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQ2LCAxODksIDEwMywgMjM3LCAxOTcsIDE2MiwgMTYzLCAxNCwgMjQ2LCAxODksIDIzNywgNzUsIDE2MiwgCi0gICAgMTYzLCAxNCwgMTAzLCAyNDYsIDIxNSwgMjQ3LCAxNSwgMTYyLCAxNjMsIDE0LCAyMzUsIDE4LCAyNDEsIDIxLCAxNjIsIAotICAgIDE2MywgMTQsIDI0NiwgMTg5LCAyMzUsIDE4LCA1OCwgMTYyLCAxNjMsIDE0LCA5OSwgMjQ2LCAyMTUsIDIzMywgOTUsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjUzLCAxNzMsIDIzNywgMTY0LCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCA5OSwgMjM3LCAxOTcsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQ2LCAxODksIDI0OSwgMTg1LCAxNjIsIDE2MywgMTQsIDk5LCAyNDYsIDIxNSwgMjQ3LCAxNSwgMTYyLCAKLSAgICAxNjMsIDE0LCAyMzEsIDE5MSwgMjQxLCAyMSwgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMjMxLCAxOTEsIDU4LCAxNjIsIAotICAgIDE2MywgMTQsIDI0MSwgMjE4LCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAyNDEsIDM2LCAyMzEsIDE5NywgMTYyLCAxNjMsIAotICAgIDE0LCAyMzUsIDQxLCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAyNTMsIDIzNiwgMjMxLCAxOTcsIDE2MiwgMTYzLCAxNCwgCi0gICAgMjM3LCA0MCwgMjMxLCAxOTcsIDE2MiwgMTYzLCAxNCwgOTksIDI0NywgMjAxLCAyNDcsIDE1LCAxNjIsIDE2MywgMTQsIAotICAgIDI0MSwgMjE4LCAyNDAsIDIzMiwgMTYyLCAxNjMsIDE0LCAyMzcsIDQwLCAyNDAsIDEzOSwgMTYyLCAxNjMsIDE0LCAyNDYsIAotICAgIDE4OSwgMjM3LCA2NiwgMTYyLCAxNjMsIDE0LCA5OSwgMjQ2LCAyMTUsIDIxOSwgMTYyLCAxNjMsIDE0LCAyNTMsIDE3MywgCi0gICAgMjE5LCAxNjIsIDE2MywgMTQsIDI0NywgNTMsIDIxOSwgMTYyLCAxNjMsIDE0LCAyNTMsIDIzNiwgMjE5LCAxNjIsIDE2MywgCi0gICAgMTQsIDIzNywgNDAsIDIxOSwgMTYyLCAxNjMsIDE0LCAxMDMsIDI0NywgMjAxLCAyMzcsIDE2NCwgMTYyLCAxNjMsIDE0LCAKLSAgICA0MiwgMjQ3LCAyMDEsIDIzNywgMTY0LCAxNjIsIDE2MywgMTQsIDI0MCwgMTI4LCAyMTksIDE2MiwgMTYzLCAxNCwgMjI4LCAKLSAgICAxNzUsIDIxOSwgMTYyLCAxNjMsIDE0LCAyNDAsIDE2MiwgMTI1LCAxNjIsIDE2MywgMTQsIDI1MywgMTczLCAyMDUsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjQwLCAxMDgsIDE2MiwgMTYzLCAxNCwgMjQ1LCAyMTksIDIwNSwgMTYyLCAxNjMsIDE0LCAyMzMsIDIxLCAKLSAgICAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAyNDYsIDE4OSwgMTkwLCAyMzcsIDgxLCAxNjIsIDE2MywgMTQsIDI0NiwgMTg5LCAKLSAgICAyMzMsIDQsIDE2MiwgMTYzLCAxNCwgMTAzLCAyNDAsIDIwNiwgMjA1LCAxNjIsIDE2MywgMTQsIDk5LCAyNDAsIDIwNiwgCi0gICAgMjA1LCAxNjIsIDE2MywgMTQsIDI0MCwgMTQ2LCAxNjIsIDE2MywgMTQsIDI0NiwgMjA5LCAxNjIsIDE2MywgMTQsIDIzNywgCi0gICAgNjgsIDE2MiwgMTYzLCAxNCwgMjQwLCAxMjAsIDIzMSwgMTk3LCAxNjIsIDE2MywgMTQsIDIzNSwgMjgsIDIzMSwgMTk3LCAKLSAgICAxNjIsIDE2MywgMTQsIDI0NiwgMTY4LCAyMzEsIDE5NywgMTYyLCAxNjMsIDE0LCAyNDAsIDEyMywgMjMxLCAxOTcsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjM3LCA3MSwgMTkwLCAyNDAsIDI0NSwgNzYsIDQxLCAyNDAsIDExNywgMiwgMjMxLCAxOTEsIDIzNywgMTcwLCAKLSAgICA1OCwgMjMxLCAxNDMsIDI0NiwgMTU3LCAyNDYsIDIzMSwgMjQ5LCAxMDksIDk4LCA2MSwgMjQ2LCAxNjcsIDIsIDIzNywgNDQsIAotICAgIDI0NiwgMTY0LCAyMzIsIDI4LCA5OCwgMjMwLCAyMzksIDIzMiwgNjIsIDk4LCAyMjcsIDIzMCwgMjMyLCA2MiwgOTgsIDIzMywgCi0gICAgMjAzLCA5OCwgMjI5LCAyNDAsIDk4LCA2MywgMzcsIDIsIDIzNywgOTUsIDYxLCAyNDAsIDEzOCwgMjQzLCA5NywgOTgsIAotICAgIDIyOSwgMTgyLCAyNTMsIDIzOSwgOTgsIDI1MCwgNjUsIDk4LCAzMywgMTY5LCAyNTIsIDIxOSwgMiwgMjM4LCAyOCwgMzMsIAotICAgIDIzMywgODAsIDI0MCwgMTUyLCAyMzcsIDE1MCwgMjM3LCA0MCwgMiwgMjMyLCAyMzQsIDU4LCAyNTIsIDU0LCA5OCwgMjMxLCAKLSAgICAxMDMsIDk4LCAyMzEsIDgwLCA5OCwgMjIyLCAyMzIsIDIzOSwgMCwgOTgsIDIyMiwgMjMyLCAyMzksIDc3LCA5OCwgMjIyLCAKLSAgICAyMjMsIDk4LCAyMjIsIDIyNiwgOTgsIDIzNywgMjQyLCAyMzYsIDM4LCAxNCwgMjExLCAxMTMsIDIyMywgNTQsIDk4LCAxNjIsIAotICAgIDE2MywgMTQsIDI0MCwgMjMyLCAyMzUsIDE2MywgMjMxLCAyNDcsIDI1MywgMjM5LCA5OCwgMjM0LCAxOTgsIDI0MSwgMjEwLCAKLSAgICAyNTEsIDUzLCAyNDEsIDIxMCwgMjQ1LCA4MiwgMjM4LCA0NCwgOTgsIDI0MywgMTQsIDIzOCwgNDQsIDk4LCA0MiwgMjI5LCAKLSAgICAxNjksIDI0MCwgMTE2LCA4OCwgNDIsIDIyOSwgMTY5LCAyMzAsIDEzNiwgNDIsIDIyOSwgMTY5LCAyMDMsIDg4LCA0MSwgCi0gICAgMjI5LCAxNjksIDI0MCwgMTE2LCA4OCwgNDEsIDIyOSwgMTY5LCAyMzAsIDEzNiwgNDEsIDIyOSwgMTY5LCAyMDMsIDg4LCAKLSAgICA0MiwgMzcsIDIzNSwgMjIsIDI0MCwgMTE2LCAyMzUsIDQwLCA0MiwgMzcsIDIzNSwgMjIsIDIzMCwgMTM2LCA0MiwgMzcsIAotICAgIDIzNSwgMjIsIDIwMywgMjM1LCA0MCwgNDEsIDM3LCAyMzUsIDIyLCAyNDAsIDExNiwgMjM1LCA0MCwgNDEsIDM3LCAyMzUsIAotICAgIDIyLCAyMzAsIDEzNiwgNDEsIDM3LCAyMzUsIDIyLCAyMDMsIDIzNSwgNDAsIDQyLCAyNDAsIDEzNywgMjM1LCAyMiwgMjQwLCAKLSAgICAxMTYsIDg4LCA0MiwgMjQwLCAxMzcsIDIzNSwgMjIsIDIzNywgNDQsIDIzNywgMTg4LCA0MiwgMjQwLCAxMzcsIDIzNSwgMjIsIAotICAgIDIwMywgODgsIDI0MCwgMTM3LCAyMzUsIDIyLCAyMzAsIDEzNiwgNDEsIDI0MCwgMTM3LCAyMzUsIDIyLCAyNDAsIDExNiwgCi0gICAgODgsIDQxLCAyNDAsIDEzNywgMjM1LCAyMiwgMjM3LCA0NCwgMjM3LCAxODgsIDQxLCAyNDAsIDEzNywgMjM1LCAyMiwgMjAzLCAKLSAgICA4OCwgMjMzLCA5OCwgMjMwLCAxMzYsIDE2OSwgMjQ2LCAxNjcsIDIzMCwgMTM2LCAyNDAsIDExNiwgNDIsIDE0NSwgMjAzLCAKLSAgICA0MSwgMjQwLCAxMzcsIDIzNSwgMjIsIDIzMywgMTQ0LCAyNDAsIDExNiwgNDEsIDE0NSwgMjAzLCA0MiwgMjQwLCAxMzcsIAotICAgIDIzNSwgMjIsIDIzMywgMTQ0LCAyMzIsIDEwLCAyNDcsIDIxNCwgMjMyLCAxMCwgMjM1LCAxMTAsIDI1MiwgMjI4LCAzNywgCi0gICAgMTA0LCAyMzcsIDU5LCAzNywgMTA0LCAyMzcsIDU5LCAzNywgMjM1LCAyMiwgMTA3LCAyNTIsIDIyOCwgMzcsIDEwNCwgMjksIAotICAgIDE0LCAyMzUsIDExMCwgNDIsIDYxLCA3NywgMjQwLCAxMzgsIDQxLCA2MSwgNzcsIDI0MCwgMTM4LCAxNjksIDI0NywgMTAyLCAKLSAgICAyMzYsIDEzOCwgMTY5LCAyNDcsIDEwMiwgMjM2LCAxMzksIDE2OSwgMjQ3LCAxMDIsIDIzNiwgMTQwLCAxNjksIDI0NywgCi0gICAgMTAyLCAyMzYsIDE0MSwgMjMxLCAyMDUsIDE0LCAxNTcsIDYxLCAyMiwgMjUyLCAyMjgsIDIzNywgNDEsIDIzMSwgMjA1LCAKLSAgICAxNCwgMTU3LCA2MSwgMjIsIDIzNywgNTksIDIzNywgNDEsIDIzMSwgMjA1LCAxNCwgMTU3LCA2MSwgMiwgMjM1LCAyMCwgCi0gICAgMjMxLCAyMDUsIDE0LCAxNTcsIDEwMywgMjIsIDE2OSwgMiwgMjM1LCAyMCwgMjMxLCAyMDUsIDE0LCAxNTcsIDk5LCAyMiwgCi0gICAgMTY5LCAyLCAyMzUsIDIwLCAyMzEsIDIwNSwgMTQsIDE1NywgNjEsIDIsIDIzMSwgMTkzLCAyMzEsIDIwNSwgMTQsIDE1NywgCi0gICAgMTAzLCAyMiwgMTY5LCAyLCAyMzEsIDE5MywgMjMxLCAyMDUsIDE0LCAxNTcsIDk5LCAyMiwgMTY5LCAyLCAyMzEsIDE5MywgCi0gICAgMjMxLCAyMDUsIDE0LCAxNTcsIDYxLCAyMiwgMjQxLCAyMiwgMjMxLCAyMDUsIDE0LCAxNTcsIDEwMywgMjIsIDE2OSwgMiwgCi0gICAgMjQxLCAyMiwgMjMxLCAyMDUsIDE0LCAxNTcsIDk5LCAyMiwgMTY5LCAyLCAyNDEsIDIyLCAyMzEsIDIwNSwgMTQsIDE1NywgCi0gICAgMTAzLCAyMiwgMjI5LCAxNjQsIDIzMSwgMjA1LCAxNCwgMTU3LCA5OSwgMjIsIDIyOSwgMTY0LCAyMzEsIDIwNSwgMTQsIAotICAgIDE1NywgNjEsIDIyLCAyNTIsIDIyOCwgMjQwLCAxMzIsIDIzMSwgMjA1LCAxNCwgMTU3LCA2MSwgMjIsIDIzNywgNTksIDI0MCwgCi0gICAgMTMyLCAzNywgMjQxLCAzOCwgMjM5LCAyMTksIDk4LCAyNDMsIDk2LCA5OCwgNjEsIDI0NiwgMTY3LCAyMzAsIDEzNiwgMjMzLCAKLSAgICAxMTQsIDIzNywgNDYsIDIzMywgMTE0LCAxODIsIDEwNywgMjM5LCAyNTEsIDIzMywgMTE0LCAyNDAsIDEyNSwgMTA3LCAyNDEsIAotICAgIDQsIDIzMywgMTE0LCAxODIsIDEwNywgMTM1LCAyMzYsIDIyNywgMjMzLCAxMTQsIDEzNSwgMjM4LCA1NCwgMTA3LCAyNDEsIAotICAgIDQsIDIzMywgMTE0LCAxMzUsIDIzOCwgNTQsIDIzNiwgMTE1LCAyMzMsIDExNCwgMjMzLCAyNDcsIDIzMywgMTE0LCAyMzAsIAotICAgIDIxMywgMjMzLCAxMTQsIDIzMCwgMTkzLCAyNDEsIDEyNiwgMjM2LCA5NywgMjQzLCAxMTEsIDI1MiwgMjI4LCAyMjgsIDE4MCwgCi0gICAgMjM3LCA1OSwgMjI4LCAxODAsIDI1MiwgMjI4LCAyNDAsIDEzNywgMTA0LCAyMzcsIDU5LCAyNDAsIDEzNywgMTA0LCAyNTIsIAotICAgIDIyOCwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgMjM3LCA1OSwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgNjMsIDIzMSwgCi0gICAgMTc5LCAyMzUsIDE1MCwgMjQ2LCAxNzQsIDIsIDIzNSwgMjAsIDIyOCwgMTY2LCAyMzIsIDE5MSwgMjU1LCAwLCAyMzQsIDQxLCAKLSAgICAyMzEsIDYyLCAyMjcsIDE4NiwgMTQsIDMyLCAyNDUsIDEzLCAxNCwgMzIsIDI0MSwgNzUsIDEwNiwgMjM0LCAxMjAsIDE0LCAKLSAgICAzMiwgMjQxLCA3NSwgMTA2LCAyNDIsIDAsIDE0LCAzMiwgMjUyLCAyNTUsIDEwNiwgMjQyLCAwLCAxNCwgMzIsIDI1MiwgCi0gICAgMjU1LCAxMDYsIDIyOCwgMTY5LCAxNCwgMzIsIDIzNCwgOTYsIDE0LCAzMiwgMjI4LCAyMTEsIDE0LCAzMiwgMjQyLCAxOTgsIAotICAgIDE0LCAzMiwgMjMwLCAyMjksIDE0LCAzMiwgMTY5LCAyMjksIDIyMSwgMTQsIDMyLCAyNDYsIDE2NywgMjQxLCAxMjksIDE0LCAKLSAgICAzMiwgNjEsIDIyOSwgMjIxLCAxNCwgMzIsIDIxMSwgMjQxLCAxMjksIDE0LCAzMiwgMjM0LCAyOCwgMjM1LCAyMDUsIDE0LCAKLSAgICAzMiwgMjQxLCAyMzcsIDI0NywgMTg2LCAxNCwgMzIsIDI0MSwgMjM3LCAyNTMsIDc5LCAxNCwgMzIsIDI0OSwgMTgyLCAyNTAsIAotICAgIDIyMiwgMjM1LCAxNzAsIDE0LCAzMiwgMjM3LCAxNzgsIDIzNSwgODgsIDExOCwgMTQsIDMyLCAyMzcsIDE3OCwgMjM1LCA4OCwgCi0gICAgMTEzLCAxNCwgMzIsIDIzNywgMTc4LCAyMzUsIDg4LCAxNjYsIDE0LCAzMiwgMjM3LCAxNzgsIDIzNSwgODgsIDE1OCwgMTQsIAotICAgIDMyLCAyMzMsIDcxLCAyMjgsIDIxMSwgMTQsIDMyLCAyMzAsIDExNiwgMjQ0LCAzLCAxNCwgMzIsIDI1MiwgMjU1LCAxMDYsIAotICAgIDIyOSwgMTU2LCAyMzcsIDY1LCAxNCwgMzIsIDIzNiwgMTgsIDE0LCAzMiwgMjUyLCAyNTUsIDEwNiwgMjM2LCAxNTEsIDE0LCAKLSAgICAzMiwgMjMwLCAxMTUsIDE0LCAzMiwgMjM1LCAxNzAsIDE0LCAzMiwgMjQ5LCAyNDgsIDIzMCwgMTMxLCAxNCwgMzIsIDI0MywgCi0gICAgMTU3LCAyMzAsIDEzMSwgMTQsIDMyLCAyMzksIDIxNywgMjMwLCAxMzEsIDE0LCAzMiwgMjQ2LCAyMjksIDIzMCwgMTMxLCAKLSAgICAxNCwgMzIsIDIzNywgNjksIDE0LCAzMiwgMjM2LCA0NCwgMjQyLCAyMDksIDk4LCAyNDYsIDE1NywgMjQ2LCAyMzEsIDE0LCAKLSAgICAzMiwgMjM0LCAxNjgsIDE0LCAzMiwgMjM4LCAxODAsIDIxMSwgMTEzLCAxNCwgMzIsIDIzMSwgMTQ4LCAyMTEsIDExMywgCi0gICAgMjUzLCA2MywgODgsIDI1MywgNjMsIDIzOCwgMTQ2LCAyNTMsIDYzLCAyNDEsIDEzMywgMjUzLCA2MywgMjMzLCA3MCwgMjQxLCAKLSAgICAxMzMsIDI1MywgNjMsIDI0OSwgMTEwLCAyMzYsIDE3LCAyNTMsIDYzLCAyNTQsIDM0LCAyNDcsIDU3LCAyNTMsIDYzLCAyMzgsIAotICAgIDEyOSwgMjQ5LCA5OSwgMjI1LCAxMTQsIDI1MywgNjMsIDIzOCwgOTUsIDEwNiwgMjM3LCAyMzQsIDI1MywgNjMsIDI0MCwgCi0gICAgMTUxLCAyNTMsIDYzLCAyMzQsIDQyLCAyMzUsIDE0NCwgMjM2LCAxNzAsIDI1MywgNjMsIDQ3LCAyMzAsIDE1MSwgMzMsIDIxLCAKLSAgICAxMTgsIDMzLCAyMSwgMTEzLCAzMywgMjEsIDE2NiwgMzMsIDIxLCAxNTgsIDMzLCAyMSwgMTczLCAzMywgMjEsIDE4MywgMzMsIAotICAgIDIxLCAxOTQsIDMzLCAyMSwgMTg3LCAzMywgMjEsIDE5MiwgMzMsIDY1LCAyNDYsIDE3OSwgMzMsIDY1LCAyMzUsIDY4LCAzMywgCi0gICAgNjUsIDIzNSwgNzIsIDMzLCA2NSwgMjMxLCAyMzQsIDMzLCA2NSwgMjMxLCAyMzEsIDMzLCA2NSwgMjMzLCAxNDEsIDMzLCAKLSAgICA2NSwgMjMzLCAxMzUsIDMzLCA2NSwgMjMwLCAxNDgsIDMzLCA2NSwgMjMxLCAyMjksIDMzLCA2NSwgMjMxLCAyMzMsIDMzLCAKLSAgICA2NSwgMjM1LCA1MiwgOTMsIDIxLCAxMTgsIDkzLCAyMSwgMTEzLCA5MywgMjEsIDE2NiwgOTMsIDIxLCAxNTgsIDkzLCAyMSwgCi0gICAgMTczLCA5MywgMjEsIDE4MywgOTMsIDIxLCAxOTQsIDkzLCAyMSwgMTg3LCA5MywgMjEsIDE5MiwgOTMsIDY1LCAyNDYsIAotICAgIDE3OSwgOTMsIDY1LCAyMzUsIDY4LCA5MywgNjUsIDIzNSwgNzIsIDkzLCA2NSwgMjMxLCAyMzQsIDkzLCA2NSwgMjMxLCAKLSAgICAyMzEsIDkzLCA2NSwgMjMzLCAxNDEsIDkzLCA2NSwgMjMzLCAxMzUsIDkzLCA2NSwgMjMwLCAxNDgsIDkzLCA2NSwgMjMxLCAKLSAgICAyMjksIDkzLCA2NSwgMjMxLCAyMzMsIDkzLCA2NSwgMjM1LCA1MiwgMjEsIDE2OCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAyMSwgCi0gICAgMTM1LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDIxLCAxNTIsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMjEsIDI0NiwgMTYwLCAyNDYsIAotICAgIDE2MiwgMjQwLCAxMjEsIDIxLCAyNDYsIDE1OSwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAyMSwgMjUzLCAxNywgMjQ2LCAxNjIsIAotICAgIDI0MCwgMTIxLCAyMSwgMjQwLCAxNTUsIDI0NiwgMTYyLCAyNDAsIDEyMSwgMjEsIDI0MCwgMTQyLCAyNDYsIDE2MiwgMjQwLCAKLSAgICAxMjEsIDIxLCAyNDYsIDIwOCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjUzLCA1MywgMjQ2LCAxNjIsIDI0MCwgMTIxLCAKLSAgICA2NSwgMjM4LCAxOTksIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIDIzOCwgNzksIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIAotICAgIDIzNCwgMjQ1LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDY1LCAyMzQsIDEwNywgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjM2LCAKLSAgICA3OCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA2NSwgMjM1LCAyMTAsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIDIzMywgMjIsIAotICAgIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIDIzNCwgOTIsIDI0NiwgMTYyLCAyNDAsIDEyMSwgNjUsIDIzNCwgMTcxLCAyNDYsIAotICAgIDE2MiwgMjQwLCAxMjEsIDY1LCAyMzcsIDk3LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDkzLCA3LCAzLCAxLCA1NywgOTMsIDcsIAotICAgIDMsIDEsIDI1NCwgMTg1LCA5MywgNywgMywgMSwgMjU0LCAxOTQsIDkzLCA3LCAzLCAxLCAyMjIsIDIyMiwgOTMsIDcsIDMsIAotICAgIDEsIDcyLCA5MywgNywgMywgMSwgMjU0LCAxOTEsIDkzLCA3LCAzLCAxLCAyMTQsIDkzLCA3LCAzLCAxLCAyMTIsIDkzLCA3LCAKLSAgICAzLCAxLCA3NCwgOTMsIDcsIDMsIDEsIDI1NCwgMTkyLCA5MywgNywgMywgMSwgMjU0LCAxODYsIDkzLCA3LCAzLCAxLCAxNDksIAotICAgIDkzLCA3LCAzLCAxLCAxODUsIDkzLCA3LCAzLCAxLCAxOTksIDkzLCA3LCAzLCAxLCA3MywgOTMsIDcsIDMsIDEsIDI1NCwgCi0gICAgMTg3LCA5MywgNywgMywgMSwgMjU0LCAxOTYsIDkzLCA3LCAzLCAxLCAxNDYsIDkzLCA3LCAzLCAxLCAxOTMsIDkzLCA3LCAzLCAKLSAgICAxLCAyNTQsIDE4MywgOTMsIDcsIDMsIDEsIDY2LCA5MywgNywgMywgMSwgMTk2LCA5MywgNywgMywgMSwgMjU0LCAxOTUsIAotICAgIDkzLCA3LCAzLCAxLCAyNTQsIDE4NCwgOTMsIDcsIDMsIDEsIDI1NCwgMTkwLCA5MywgNywgMywgMSwgMjU0LCAxOTMsIDMzLCAKLSAgICA3LCA2LCAxLCA1NywgMzMsIDcsIDYsIDEsIDI1NCwgMTg1LCAzMywgNywgNiwgMSwgMjU0LCAxOTQsIDMzLCA3LCA2LCAxLCAKLSAgICAyMjIsIDIyMiwgMzMsIDcsIDYsIDEsIDcyLCAzMywgNywgNiwgMSwgMjU0LCAxOTEsIDMzLCA3LCA2LCAxLCAyMTQsIDMzLCAKLSAgICA3LCA2LCAxLCAyMTIsIDMzLCA3LCA2LCAxLCA3NCwgMzMsIDcsIDYsIDEsIDI1NCwgMTkyLCAzMywgNywgNiwgMSwgMjU0LCAKLSAgICAxODYsIDMzLCA3LCA2LCAxLCAxNDksIDMzLCA3LCA2LCAxLCAxODUsIDMzLCA3LCA2LCAxLCAxOTksIDMzLCA3LCA2LCAxLCAKLSAgICA3MywgMzMsIDcsIDYsIDEsIDI1NCwgMTg3LCAzMywgNywgNiwgMSwgMjU0LCAxOTYsIDMzLCA3LCA2LCAxLCAxNDYsIDMzLCAKLSAgICA3LCA2LCAxLCAxOTMsIDMzLCA3LCA2LCAxLCAyNTQsIDE4MywgMzMsIDcsIDYsIDEsIDY2LCAzMywgNywgNiwgMSwgMTk2LCAKLSAgICAzMywgNywgNiwgMSwgMjU0LCAxOTUsIDMzLCA3LCA2LCAxLCAyNTQsIDE4NCwgMzMsIDcsIDYsIDEsIDI1NCwgMTkwLCAzMywgCi0gICAgNywgNiwgMSwgMjU0LCAxOTMsIDMzLCA3LCAzLCAxLCA1NywgMzMsIDcsIDMsIDEsIDI1NCwgMTg1LCAzMywgNywgMywgMSwgCi0gICAgMjU0LCAxOTQsIDMzLCA3LCAzLCAxLCAyMjIsIDIyMiwgMzMsIDcsIDMsIDEsIDcyLCAzMywgNywgMywgMSwgMjU0LCAxOTEsIAotICAgIDMzLCA3LCAzLCAxLCAyMTQsIDMzLCA3LCAzLCAxLCAyMTIsIDMzLCA3LCAzLCAxLCA3NCwgMzMsIDcsIDMsIDEsIDI1NCwgCi0gICAgMTkyLCAzMywgNywgMywgMSwgMjU0LCAxODYsIDMzLCA3LCAzLCAxLCAxNDksIDMzLCA3LCAzLCAxLCAxODUsIDMzLCA3LCAzLCAKLSAgICAxLCAxOTksIDMzLCA3LCAzLCAxLCA3MywgMzMsIDcsIDMsIDEsIDI1NCwgMTg3LCAzMywgNywgMywgMSwgMjU0LCAxOTYsIAotICAgIDMzLCA3LCAzLCAxLCAxNDYsIDMzLCA3LCAzLCAxLCAxOTMsIDMzLCA3LCAzLCAxLCAyNTQsIDE4MywgMzMsIDcsIDMsIDEsIAotICAgIDY2LCAzMywgNywgMywgMSwgMTk2LCAzMywgNywgMywgMSwgMjU0LCAxOTUsIDMzLCA3LCAzLCAxLCAyNTQsIDE4NCwgMzMsIAotICAgIDcsIDMsIDEsIDI1NCwgMTkwLCAzMywgNywgMywgMSwgMjU0LCAxOTMsIDMzLCAyMSwgMjQwLCAxMjYsIDIzMywgNzEsIDMzLCAKLSAgICA2NSwgMjM1LCA2OCwgMjMzLCA3MSwgMzMsIDY1LCAyMzUsIDcyLCAyMzMsIDcxLCAzMywgNjUsIDIzMSwgMjM0LCAyMzMsIAotICAgIDcxLCAzMywgNjUsIDIzMSwgMjMxLCAyMzMsIDcxLCAzMywgNjUsIDIzMywgMTQxLCAyMzMsIDcxLCAzMywgNjUsIDIzMywgCi0gICAgMTM1LCAyMzMsIDcxLCAzMywgNjUsIDIzMCwgMTQ4LCAyMzMsIDcxLCAzMywgNjUsIDIzMSwgMjI5LCAyMzMsIDcxLCAzMywgCi0gICAgNjUsIDIzMSwgMjMzLCAyMzMsIDcxLCAzMywgNjUsIDIzNSwgNTIsIDQ3LCAzMywgMjEsIDExOCwgNDcsIDMzLCAyMSwgMTEzLCAKLSAgICA0NywgMzMsIDIxLCAxNjYsIDQ3LCAzMywgMjEsIDE1OCwgNDcsIDMzLCAyMSwgMTczLCA0NywgMzMsIDIxLCAxODMsIDQ3LCAKLSAgICAzMywgMjEsIDE5NCwgNDcsIDMzLCAyMSwgMTg3LCA0NywgMzMsIDIxLCAxOTIsIDQ3LCAzMywgNjUsIDI0NiwgMTc5LCAyMzMsIAotICAgIDcxLCAzMywgMjEsIDI0MCwgMTI2LCA3NywgODAsIDE1NywgMjI5LCAxNjQsIDc3LCA4MCwgMTEyLCAyMjksIDE2NCwgNzcsIAotICAgIDgwLCAxNTcsIDIzMSwgMjEwLCA3NywgODAsIDExMiwgMjMxLCAyMTAsIDc3LCA4MCwgMTU3LCAyMzcsIDQ5LCAyNDYsIDE4NywgCi0gICAgMjI5LCAxNjQsIDc3LCA4MCwgMTEyLCAyMzcsIDQ5LCAyNDYsIDE4NywgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCAyMzcsIDQ5LCAKLSAgICAyNDYsIDE4NywgMjMxLCAyMTAsIDc3LCA4MCwgMTEyLCAyMzcsIDQ5LCAyNDYsIDE4NywgMjMxLCAyMTAsIDc3LCA4MCwgCi0gICAgMTU3LCAyMzEsIDIxMiwgMjQ2LCAxODcsIDIyOSwgMTY0LCA3NywgODAsIDExMiwgMjMxLCAyMTIsIDI0NiwgMTg3LCAyMjksIAotICAgIDE2NCwgNzcsIDgwLCAxNTcsIDIzMSwgMjEyLCAyNDYsIDE4NywgMjMxLCAyMTAsIDc3LCA4MCwgMTEyLCAyMzEsIDIxMiwgCi0gICAgMjQ2LCAxODcsIDIzMSwgMjEwLCA3NywgODAsIDE1NywgMTAzLCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAxMDMsIDE1NywgMjIsIAotICAgIDQxLCAyMzcsIDYzLCA3NywgODAsIDEwMywgMTEyLCAyMiwgNDEsIDIzNywgNTcsIDc3LCA4MCwgMTEyLCAxMDMsIDIyLCAKLSAgICAyMzcsIDQxLCA3NywgODAsIDE1NywgMTAzLCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgMTAzLCAxNTcsIDIyLCA0MiwgMjM3LCAKLSAgICA2MywgNzcsIDgwLCAxMDMsIDExMiwgMjIsIDQyLCAyMzcsIDU3LCA3NywgODAsIDExMiwgMTAzLCAyMiwgMjQwLCAxMzIsIAotICAgIDc3LCA4MCwgMTU3LCA5OSwgMjIsIDIzNywgNDEsIDc3LCA4MCwgOTksIDE1NywgMjIsIDQxLCAyMzcsIDYzLCA3NywgODAsIAotICAgIDk5LCAxMTIsIDIyLCA0MSwgMjM3LCA1NywgNzcsIDgwLCAxMTIsIDk5LCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAxNTcsIDk5LCAKLSAgICAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgOTksIDE1NywgMjIsIDQyLCAyMzcsIDYzLCA3NywgODAsIDk5LCAxMTIsIDIyLCA0MiwgCi0gICAgMjM3LCA1NywgNzcsIDgwLCAxMTIsIDk5LCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgMTU3LCA2MSwgMjIsIDIzNywgNDEsIDc3LCAKLSAgICA4MCwgNjEsIDE1NywgMjIsIDQxLCAyMzcsIDYzLCA3NywgODAsIDk5LCAxMTIsIDIyLCA0MSwgMTAzLCAyMzcsIDU3LCA3NywgCi0gICAgODAsIDEwMywgMTEyLCAyMiwgNDEsIDk5LCAyMzcsIDU3LCA3NywgODAsIDYxLCAxMTIsIDIyLCA0MSwgMjM3LCA1NywgNzcsIAotICAgIDgwLCAxMDMsIDE1NywgMjIsIDQxLCA5OSwgMjM3LCA2MywgNzcsIDgwLCA5OSwgMTU3LCAyMiwgNDEsIDEwMywgMjM3LCA2MywgCi0gICAgNzcsIDgwLCAxMTIsIDYxLCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAxNTcsIDYxLCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgNjEsIAotICAgIDE1NywgMjIsIDQyLCAyMzcsIDYzLCA3NywgODAsIDk5LCAxMTIsIDIyLCA0MiwgMTAzLCAyMzcsIDU3LCA3NywgODAsIDEwMywgCi0gICAgMTEyLCAyMiwgNDIsIDk5LCAyMzcsIDU3LCA3NywgODAsIDYxLCAxMTIsIDIyLCA0MiwgMjM3LCA1NywgNzcsIDgwLCAxMDMsIAotICAgIDE1NywgMjIsIDQyLCA5OSwgMjM3LCA2MywgNzcsIDgwLCA5OSwgMTU3LCAyMiwgNDIsIDEwMywgMjM3LCA2MywgNzcsIDgwLCAKLSAgICAxMTIsIDYxLCAyMiwgMjQwLCAxMzIsIDc3LCA4MCwgMTU3LCAxMDMsIDIyLCAyMjksIDE2NCwgNzcsIDgwLCA0MiwgMTEyLCAKLSAgICAyMiwgNDEsIDEwMywgMjM3LCA1NywgNzcsIDgwLCA0MSwgMTEyLCAyMiwgNDIsIDEwMywgMjM3LCA1NywgNzcsIDgwLCAxMDMsIAotICAgIDE1NywgMjIsIDE2OSwgMjM3LCA2MywgNzcsIDgwLCAxMDMsIDExMiwgMjIsIDE2OSwgMjM3LCA1NywgNzcsIDgwLCA0MSwgCi0gICAgMTU3LCAyMiwgNDIsIDEwMywgMjM3LCA2MywgNzcsIDgwLCA0MiwgMTU3LCAyMiwgNDEsIDEwMywgMjM3LCA2MywgNzcsIDgwLCAKLSAgICAxMTIsIDEwMywgMjIsIDIyOSwgMTY0LCA3NywgODAsIDE1NywgOTksIDIyLCAyMjksIDE2NCwgNzcsIDgwLCA0MiwgMTEyLCAKLSAgICAyMiwgNDEsIDk5LCAyMzcsIDU3LCA3NywgODAsIDQxLCAxMTIsIDIyLCA0MiwgOTksIDIzNywgNTcsIDc3LCA4MCwgOTksIAotICAgIDE1NywgMjIsIDE2OSwgMjM3LCA2MywgNzcsIDgwLCA5OSwgMTEyLCAyMiwgMTY5LCAyMzcsIDU3LCA3NywgODAsIDQxLCAKLSAgICAxNTcsIDIyLCA0MiwgOTksIDIzNywgNjMsIDc3LCA4MCwgNDIsIDE1NywgMjIsIDQxLCA5OSwgMjM3LCA2MywgNzcsIDgwLCAKLSAgICAxMTIsIDk5LCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCA2MSwgMjIsIDIyOSwgMTY0LCA3NywgODAsIDQyLCAxMTIsIAotICAgIDIyLCA0MSwgNjEsIDIzNywgNTcsIDc3LCA4MCwgNDEsIDExMiwgMjIsIDQyLCA2MSwgMjM3LCA1NywgNzcsIDgwLCA2MSwgCi0gICAgMTU3LCAyMiwgMTY5LCAyMzcsIDYzLCA3NywgODAsIDk5LCAxMTIsIDIyLCAxMDMsIDE2OSwgMjM3LCA1NywgNzcsIDgwLCAKLSAgICAxMDMsIDExMiwgMjIsIDk5LCAxNjksIDIzNywgNTcsIDc3LCA4MCwgNjEsIDExMiwgMjIsIDE2OSwgMjM3LCA1NywgNzcsIAotICAgIDgwLCA0MiwgOTksIDExMiwgMjIsIDQxLCAxMDMsIDIzNywgNTcsIDc3LCA4MCwgNDEsIDk5LCAxMTIsIDIyLCA0MiwgMTAzLCAKLSAgICAyMzcsIDU3LCA3NywgODAsIDQyLCAxMDMsIDExMiwgMjIsIDQxLCA5OSwgMjM3LCA1NywgNzcsIDgwLCA0MSwgMTAzLCAxMTIsIAotICAgIDIyLCA0MiwgOTksIDIzNywgNTcsIDc3LCA4MCwgMTAzLCAxNTcsIDIyLCA5OSwgMTY5LCAyMzcsIDYzLCA3NywgODAsIDk5LCAKLSAgICAxNTcsIDIyLCAxMDMsIDE2OSwgMjM3LCA2MywgNzcsIDgwLCA0MSwgMTU3LCAyMiwgNDIsIDYxLCAyMzcsIDYzLCA3NywgODAsIAotICAgIDQyLCAxNTcsIDIyLCA0MSwgNjEsIDIzNywgNjMsIDc3LCA4MCwgMTEyLCA2MSwgMjIsIDIyOSwgMTY0LCA3NywgODAsIDE1NywgCi0gICAgNDcsIDI0NiwgMTg3LCAyMjksIDE2NCwgNzcsIDgwLCAxMTIsIDQ3LCAyNDYsIDE4NywgMjI5LCAxNjQsIDc3LCA4MCwgMTU3LCAKLSAgICA0NywgMjQ2LCAxODcsIDIzMSwgMjEwLCA3NywgODAsIDExMiwgNDcsIDI0NiwgMTg3LCAyMzEsIDIxMCwgNzcsIDgwLCA0NywgCi0gICAgMjI5LCAxNjQsIDc3LCA4MCwgNDcsIDIzMSwgMjEwLCA3NywgODAsIDEwMywgMjM3LCA2MiwgMjIsIDQxLCAyMzUsIDU1LCAKLSAgICA3NywgODAsIDEwMywgNDcsIDIyLCA0MSwgMjM1LCA2MCwgNzcsIDgwLCA0NywgMTAzLCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAKLSAgICAxMDMsIDIzNywgNjIsIDIyLCA0MiwgMjM1LCA1NSwgNzcsIDgwLCAxMDMsIDQ3LCAyMiwgNDIsIDIzNSwgNjAsIDc3LCA4MCwgCi0gICAgNDcsIDEwMywgMjIsIDI0MCwgMTMyLCA3NywgODAsIDk5LCAyMzcsIDYyLCAyMiwgNDEsIDIzNSwgNTUsIDc3LCA4MCwgOTksIAotICAgIDQ3LCAyMiwgNDEsIDIzNSwgNjAsIDc3LCA4MCwgNDcsIDk5LCAyMiwgMjM3LCA0MSwgNzcsIDgwLCA5OSwgMjM3LCA2MiwgCi0gICAgMjIsIDQyLCAyMzUsIDU1LCA3NywgODAsIDk5LCA0NywgMjIsIDQyLCAyMzUsIDYwLCA3NywgODAsIDQ3LCA5OSwgMjIsIAotICAgIDI0MCwgMTMyLCA3NywgODAsIDYxLCAyMzcsIDYyLCAyMiwgNDEsIDIzNSwgNTUsIDc3LCA4MCwgNjEsIDQ3LCAyMiwgNDEsIAotICAgIDIzNSwgNjAsIDc3LCA4MCwgNDcsIDYxLCAyMiwgMjM3LCA0MSwgNzcsIDgwLCA2MSwgMjM3LCA2MiwgMjIsIDQyLCAyMzUsIAotICAgIDU1LCA3NywgODAsIDYxLCA0NywgMjIsIDQyLCAyMzUsIDYwLCA3NywgODAsIDQ3LCA2MSwgMjIsIDI0MCwgMTMyLCA3NywgCi0gICAgODAsIDEwMywgMjM3LCA2MiwgMjIsIDE2OSwgMjM1LCA1NSwgNzcsIDgwLCAxMDMsIDQ3LCAyMiwgMTY5LCAyMzUsIDYwLCAKLSAgICA3NywgODAsIDQ3LCAxMDMsIDIyLCAyMjksIDE2NCwgNzcsIDgwLCA5OSwgMjM3LCA2MiwgMjIsIDE2OSwgMjM1LCA1NSwgNzcsIAotICAgIDgwLCA5OSwgNDcsIDIyLCAxNjksIDIzNSwgNjAsIDc3LCA4MCwgNDcsIDk5LCAyMiwgMjI5LCAxNjQsIDc3LCA4MCwgNjEsIAotICAgIDIzNywgNjIsIDIyLCAxNjksIDIzNSwgNTUsIDc3LCA4MCwgNjEsIDQ3LCAyMiwgMTY5LCAyMzUsIDYwLCA3NywgODAsIDQ3LCAKLSAgICA2MSwgMjIsIDIyOSwgMTY0LCA3NywgODAsIDE1NywgMjUzLCAyOSwgMTAzLCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAxNTcsIAotICAgIDI1MywgMjksIDEwMywgMjIsIDI0MCwgMTMyLCA3NywgODAsIDE1NywgMjUzLCAyOSwgOTksIDIyLCAyNDAsIDEzMiwgNzcsIAotICAgIDgwLCAxNTcsIDI1MywgMjksIDk5LCAyMiwgMjM3LCA0MSwgNzcsIDgwLCAxNTcsIDIzMywgNzQsIDI0MCwgMTE2LCA0MSwgCi0gICAgMTgwLCAyMDMsIDI0MCwgMTMyLCA3NywgODAsIDE1NywgMjMzLCA3NCwgMjQwLCAxMTYsIDQyLCAxODAsIDIwMywgMjM3LCAKLSAgICA0MSwgNzcsIDgwLCAxNTcsIDIzMywgNzQsIDIzNywgODUsIDc3LCA4MCwgMTU3LCAyNDAsIDEzMiwgNzcsIDgwLCAxNTcsIAotICAgIDI1MywgMTksIDc3LCA4MCwgMTU3LCAyMzcsIDQxLCA3NywgODAsIDE1NywgMjQwLCAxNTIsIDc3LCA4MCwgMTEyLCAyNDAsIAotICAgIDEzMiwgNzcsIDgwLCAxMTIsIDI1MywgMTksIDc3LCA4MCwgMTEyLCAyMzcsIDQxLCA3NywgODAsIDExMiwgMjQwLCAxNTIsIAotICAgIDc3LCA4MCwgMTU3LCA0MiwgMjIsIDExMiwgMjM3LCA0MSwgNzcsIDgwLCAxNTcsIDk5LCAyMiwgMTEyLCAyNDAsIDE1MiwgCi0gICAgNzcsIDgwLCAxMTIsIDQyLCAyMiwgMTU3LCAyMzcsIDQxLCA3NywgODAsIDExMiwgOTksIDIyLCAxNTcsIDI0MCwgMTUyLCAKLSAgICAyNDAsIDExNiwgMTMyLCAyMzcsIDY1LCAyMDMsIDE2OCwgMjM3LCAxMTIsIDIzNywgNjUsIDIwMywgMTY4LCAyMzUsIDUzLCAKLSAgICAyMzcsIDY1LCAyMDMsIDE1MiwgMjM1LCA3NSwgMjM3LCA2NSwgMjAzLCAxMzIsIDIzNywgNjUsIDIwMywgMjQ2LCAxNTksIAotICAgIDIzNSwgNzUsIDIzNywgNjUsIDIwMywgMTUyLCAyMzMsIDE3NiwgMjM3LCA2NSwgMjAzLCAyNDAsIDE1NSwgMjM1LCA3NSwgCi0gICAgMjM3LCA2NSwgMjQ2LCAxNjIsIDIzNywgNjUsIDQyLCAyNDAsIDE1NSwgMjM1LCA3NSwgMjM3LCA2NSwgNDIsIDE1MiwgMjMzLCAKLSAgICAxNzYsIDIzNywgNjUsIDQyLCAyNDYsIDE1OSwgMjM1LCA3NSwgMjM3LCA2NSwgNDIsIDEzMiwgMjM3LCA2NSwgNDIsIDE1MiwgCi0gICAgMjM1LCA3NSwgMjM3LCA2NSwgNDIsIDE2OCwgMjM1LCA1MywgMjM3LCA2NSwgNDIsIDE2OCwgMjM3LCAxMTIsIDIzNywgNjUsIAotICAgIDQxLCAxMzIsIDIzNywgNjUsIDE1NywgMjM3LCAyMTQsIDIzNywgNjAsIDIzNywgMjE0LCAyNDksIDE4MCwgMjM3LCAyMTQsIAotICAgIDI0MCwgMTE2LCAxNjgsIDIzNywgMTEyLCAyMzcsIDY1LCA0MSwgMTY4LCAyMzcsIDExMiwgMjM3LCA2NSwgMjMzLCA4OCwgCi0gICAgMjAzLCAyNDAsIDEzMiwgMjMzLCA4OCwgMjAzLCAyMzcsIDQxLCAyMzMsIDg4LCAyNDAsIDExNiwgMjQwLCAxMzIsIDIzMywgCi0gICAgODgsIDI0MCwgMTE2LCA0MiwgMjIsIDIwMywgNDIsIDIyLCAyMDMsIDIzNywgNDEsIDIzMywgODgsIDI0MCwgMTE2LCA0MiwgCi0gICAgMjIsIDIwMywgMjM3LCA0MSwgMjMzLCA4OCwgMjQwLCAxMTYsIDQyLCAyMiwgMjQwLCAxMTYsIDQxLCAyMiwgMjAzLCAyNDAsIAotICAgIDEzMiwgMjMzLCA4OCwgMjQwLCAxMTYsIDQyLCAyMiwgMjQwLCAxMTYsIDQxLCAyMiwgMjAzLCAyMzcsIDQxLCAyMzMsIDg4LCAKLSAgICAyNDAsIDExNiwgMjM3LCA0MSwgMjMzLCA4OCwgMjQwLCAxMTYsIDQxLCAyMiwgMjAzLCAyNDAsIDEzMiwgMjMzLCA4OCwgCi0gICAgMjQwLCAxMTYsIDQxLCAyMiwgMjAzLCA0MiwgMjIsIDIwMywgMjM3LCA0MSwgODYsIDIzNSwgMjcsIDYzLCAyMzUsIDI3LCAKLSAgICA2MywgMzcsIDIsIDIzNSwgOTgsIDIzMywgMTk1LCA2MywgMzcsIDIzMCwgMTYyLCA4NiwgMywgMjM1LCAyNywgMzcsIDIsIAotICAgIDE2OSwgMjQwLCAyMDAsIDM3LCAyLCA2MSwgMjQwLCAyMDAsIDM3LCAyLCAyMzEsIDExMiwgMjMwLCAxNzksIDI0MCwgMjAwLCAKLSAgICAzNywgMiwgMjQwLCAxMTYsIDQyLCAxODAsIDIwMywgNDEsIDI0MCwgMjAwLCAzNywgMiwgMjQwLCAxMTYsIDQxLCAxODAsIAotICAgIDIwMywgNDIsIDI0MCwgMjAwLCAzNywgMiwgMjMzLCA3NCwgMjMwLCAxNzksIDI0MCwgMjAwLCA4NiwgMywgMjM1LCAyNywgCi0gICAgNjMsIDMsIDIzNSwgMjcsIDg2LCAyMzAsIDE1NywgNjMsIDIzMCwgMTU3LCA4NiwgNjEsIDIzMCwgMTU3LCA2MywgNjEsIAotICAgIDIzMCwgMTU3LCA4NiwgMjI3LCAxNDUsIDYzLCAyMjcsIDE0NSwgODYsIDIyOSwgMTc0LCAyMzEsIDE5MywgNjMsIDIyOSwgCi0gICAgMTc0LCAyMzEsIDE5MywgODYsIDIyOSwgMTc0LCAzLCAyMzEsIDE5MywgNjMsIDIyOSwgMTc0LCAzLCAyMzEsIDE5MywgODYsIAotICAgIDIyNywgMTMzLCAyMzEsIDE5MywgNjMsIDIyNywgMTMzLCAyMzEsIDE5MywgODYsIDIyNywgMTMzLCAzLCAyMzEsIDE5MywgCi0gICAgNjMsIDIyNywgMTMzLCAzLCAyMzEsIDE5MywgODYsIDIyNywgMTMzLCAyMzMsIDE1NCwgNjMsIDIyNywgMTMzLCAyMzMsIAotICAgIDE1NCwgODYsIDIyNywgMTg5LCAyMzEsIDE5MywgNjMsIDIyNywgMTg5LCAyMzEsIDE5MywgODYsIDIyNywgMTg5LCAzLCAKLSAgICAyMzEsIDE5MywgNjMsIDIyNywgMTg5LCAzLCAyMzEsIDE5MywgODYsIDIyNywgMTg1LCAyMzEsIDE5MywgNjMsIDIyNywgCi0gICAgMTg1LCAyMzEsIDE5MywgODYsIDIyNywgMTg1LCAzLCAyMzEsIDE5MywgNjMsIDIyNywgMTg1LCAzLCAyMzEsIDE5MywgODYsIAotICAgIDIyNywgMTg1LCAyMzMsIDE1NCwgNjMsIDIyNywgMTg1LCAyMzMsIDE1NCwgODYsIDIzMywgOTAsIDYzLCAyMzMsIDkwLCA2MywgCi0gICAgMjM1LCA0MSwgMjMwLCAxNjIsIDg2LCAzLCAyMzMsIDkwLCAyMzQsIDEwMywgMjMzLCAxMjMsIDYzLCAyMzUsIDIwLCAyMzcsIAotICAgIDUwLCAyMzUsIDIwLCAyMzcsIDQwLCAyLCA2MSwgMjQwLCAyMDAsIDIzMiwgODksIDg2LCAyMzUsIDIwLCAyMzcsIDQwLCAyLCAKLSAgICA0MiwgMTMyLCAyMzcsIDQ1LCAyMzcsIDQwLCAyLCA0MSwgMTMyLCAyMzcsIDQ1LCAyMzcsIDQwLCAyLCAyMDMsIDEzMiwgCi0gICAgMjM3LCA0NSwgMjM3LCA0MCwgMiwgMjQwLCAxMTYsIDEzMiwgMjM3LCA0NSwgMjM3LCA0MCwgMiwgMjQwLCAxMTYsIDQxLCAKLSAgICAyMzMsIDg4LCAyMzcsIDQ1LCAyMzcsIDQwLCAyLCAyNTMsIDE2NywgMjUzLCA4NSwgMjQwLCAxMTYsIDQyLCAyMzMsIDg4LCAKLSAgICAyMzcsIDQ1LCA0MiwgMTMyLCA4NiwgMjM1LCAyMCwgNDEsIDEzMiwgODYsIDIzNSwgMjAsIDIzNSwgOTQsIDIzNSwgNDUsIAotICAgIDIzNSwgOTQsIDYzLCAyMzUsIDIwLCAyNDAsIDExNiwgMTMyLCAyMzUsIDk0LCA2MywgMjM1LCAyMCwgMjAzLCAxMzIsIDIzNSwgCi0gICAgOTQsIDYzLCAyMzUsIDIwLCAyNDAsIDExNiwgNDIsIDIzMywgODgsIDIzMywgMTQ2LCAyNDcsIDEwLCAyNDAsIDExNiwgNDEsIAotICAgIDIzMywgODgsIDIzMywgMTQ2LCAyNDcsIDEwLCAyMDMsIDQxLCAyMzMsIDg4LCAyMzMsIDE0NiwgMjQ3LCAxMCwgMjAzLCA0MiwgCi0gICAgMjMzLCA4OCwgMjMzLCAxNDYsIDI0NywgMTAsIDI0MCwgMTE2LCAxMzIsIDIzNSwgMjAsIDIwMywgMTMyLCAyMzUsIDIwLCAKLSAgICA4NiwgMjAzLCA0MSwgMjMxLCAxOTMsIDg2LCAyMDMsIDQyLCAyMzEsIDE5MywgODYsIDI0MCwgMTE2LCA0MiwgMjMxLCAxOTMsIAotICAgIDg2LCAyNDAsIDExNiwgNDEsIDIzMSwgMTkzLCA2MywgMjM1LCA0NSwgMzcsIDIsIDQyLCAxMzIsIDIzNywgNDUsIDM3LCAyLCAKLSAgICA0MSwgMTMyLCAyMzcsIDQ1LCAzNywgMiwgMjQwLCAxMTYsIDQyLCAyMzMsIDc0LCAxMzIsIDIzNywgNDUsIDM3LCAyLCAyMDMsIAotICAgIDQxLCAyMzMsIDc0LCAxMzIsIDIzNywgNDUsIDYzLCAzNywgMiwgNjEsIDIzMiwgODYsIDI0MCwgMTM4LCA2MywgMjI5LCAKLSAgICAxNzQsIDIzMywgODAsIDIsIDI0NiwgMTY0LCAyMjksIDE3NCwgMjMzLCA4MCwgMiwgNDIsIDEzMiwgMjM3LCA0NSwgMjI5LCAKLSAgICAxNzQsIDIzMywgODAsIDIsIDQxLCAxMzIsIDIzNywgNDUsIDI0MCwgMTg1LCAyMzUsIDIwLCA2MywgMzcsIDIsIDI0MCwgCi0gICAgMTE2LCA0MiwgMjMxLCAyMTksIDYzLCAzNywgMiwgMjAzLCA0MiwgMjMxLCAyMTksIDYzLCAzNywgMiwgMjAzLCA0MSwgMjMxLCAKLSAgICAyMTksIDYzLCAzNywgMiwgMjQwLCAxMTYsIDQxLCAyMzEsIDIxOSwgNjMsIDIzNywgNDAsIDIsIDI0MCwgMTE2LCA0MiwgCi0gICAgMjMxLCAyMTksIDYzLCAyMzcsIDQwLCAyLCAyMDMsIDQyLCAyMzEsIDIxOSwgNjMsIDIzNywgNDAsIDIsIDIwMywgNDEsIAotICAgIDIzMSwgMjE5LCA2MywgMjM3LCA0MCwgMiwgMjQwLCAxMTYsIDQxLCAyMzEsIDIxOSwgMjQwLCAxMTYsIDQyLCAyMzEsIDE5MywgCi0gICAgMjQwLCAxMTYsIDQxLCAyMzEsIDE5MywgMjAzLCA0MiwgMjMxLCAxOTMsIDYzLCAyMzcsIDYwLCAyMzUsIDI3LCA4NiwgMjM3LCAKLSAgICA2MCwgMjM1LCAyNywgNjMsIDIzNywgNjAsIDMsIDIzNSwgMjcsIDg2LCAyMzcsIDYwLCAzLCAyMzUsIDI3LCAyMDMsIDQxLCAKLSAgICAyMzEsIDE5MywgODYsIDI1NCwgOCwgMiwgMjQxLCAyMjAsIDIzOCwgMTU2LCAyMzMsIDU4LCAyMzQsIDIyNiwgMjM4LCAxNTksIAotICAgIDg2LCAyNDAsIDEzOSwgNjMsIDI0MCwgMTM5LCAyMzEsIDk4LCAyMjgsIDE2NywgMjQ3LCA1NCwgMjMyLCA3NywgMjQxLCAKLSAgICAyMDQsIDIzMCwgMTgxLCAyNDEsIDIwNCwgMjI4LCAyMjksIDIyOSwgMTg3LCA4NiwgMjMwLCAyMTIsIDYzLCAyMzAsIDIxMiwgCi0gICAgMjM3LCAxNDksIDI0NiwgMjMxLCAyMzcsIDE0OSwgNzcsIDIsIDIzNywgMjM0LCAyMzcsIDE0OSwgNzcsIDIsIDI1NCwgMTg0LCAKLSAgICAyMzQsIDIxMywgMjM1LCAyLCAyLCAyNTEsIDE3MSwgMjM4LCAxOTMsIDI1MywgMjI1LCAyMzIsIDg0LCA2MywgMjQxLCAyMzgsIAotICAgIDIzNywgMTg4LCA4NiwgMjQxLCAyMzgsIDIzNywgMTg4LCAyMzMsIDIzLCAyMDAsIDIzNSwgOTcsIDIzNywgMjAyLCAyNDAsIAotICAgIDE5NiwgMjM1LCA0NSwgODYsIDQyLCAyMzMsIDc4LCAyMzcsIDEzNSwgODYsIDQxLCAyMzMsIDc4LCAyMzcsIDEzNSwgNjMsIAotICAgIDQyLCAyMzMsIDc4LCAyMzcsIDEzNSwgNjMsIDk5LCAyMzMsIDc4LCAyMzcsIDEzNSwgNjMsIDQxLCAyMzMsIDc4LCAyMzcsIAotICAgIDEzNSwgNjMsIDEwMywgMjMzLCA3OCwgMjM3LCAxMzUsIDI0NSwgMTg5LCAyMiwgMjI5LCAyNDMsIDIzNiwgMjIsIDUzLCAKLSAgICAyMzAsIDkzLCA1MywgMjMyLCA4NSwgNTMsIDIzMiwgOTEsIDI0MiwgNTgsIDIzNCwgMTc4LCAyMzcsIDg1LCAyNTMsIDIxMiwgCi0gICAgMjQ2LCAyMDksIDI0MCwgMjIxLCAxMDYsIDIzMiwgMjIyLCAyNDAsIDIyMSwgMTA2LCAyMzEsIDg5LCAyNDcsIDUzLCAyMiwgCi0gICAgMjMyLCAxMDQsIDI0MCwgMTc2LCA5OCwgMjU0LCAyMywgMjM2LCAyMjEsIDIzOCwgNCwgMjIsIDIzNiwgMjMwLCAyNDUsIDYyLCAKLSAgICA5OCwgMjUzLCAxMjIsIDI0MCwgMjQyLCAyMzUsIDY2LCAzMiwgMjM1LCAxMjMsIDIzNSwgNjYsIDMyLCAyNDEsIDE3OCwgCi0gICAgMjM1LCA2NiwgMzIsIDI0MCwgMjA3LCAyMzUsIDY2LCAzMiwgMjMzLCAyNDYsIDIzNSwgNjYsIDMyLCAyNDAsIDE5OSwgMjM1LCAKLSAgICA2NiwgMzIsIDIzNywgMTY4LCAyMzUsIDY2LCAzMiwgMjMxLCAyNTUsIDIzNSwgNjYsIDMyLCAyMzcsIDk5LCAyNDYsIDU2LCAKLSAgICAxMDYsIDIzNiwgNDgsIDYzLCAyMzQsIDEwOCwgMjQwLCAyMjMsIDYzLCAyMzUsIDIxMywgMjQwLCAyMjMsIDg2LCAyMzUsIAotICAgIDIxMywgMjQwLCAyMjMsIDYzLCAyNTQsIDgsIDIsIDI0MSwgMjIwLCAyNDAsIDIyNSwgMjM1LCA1MywgMjQwLCAyMTEsIDI1MCwgCi0gICAgMjA3LCAyMzUsIDUzLCAyNDAsIDIxMSwgMjM0LCAxNTksIDIzNywgMTU0LCA1MywgMjM3LCA5OSwgMjQ2LCAyMzUsIDUzLCAKLSAgICAyMzQsIDEzNCwgMjM2LCAyMDgsIDIzNywgMTcsIDIzNCwgMTY3LCAyMzksIDIwMCwgMjM4LCAxMDIsIDIzNiwgMjU1LCAyMzYsIAotICAgIDkxLCAyMzYsIDE5LCAyNTAsIDIxMywgMjQwLCA3OCwgMjM5LCA4NCwgMjMzLCAyMCwgMjI5LCA1OCwgMjMwLCAyMzMsIDIzMiwgCi0gICAgNzIsIDIzNiwgMTg5LCA2MywgMjQwLCAxNzUsIDI0MSwgMiwgNjMsIDI0MCwgMTc1LCAyMzgsIDM5LCA2MywgMjQwLCAxNzUsIAotICAgIDI0MSwgMjI1LCA2MywgMjQwLCAxNzUsIDIzNSwgMTUyLCA2MywgMjQwLCAxNzUsIDIzNSwgMTg2LCA2MywgMjQwLCAxNzUsIAotICAgIDI0MSwgMjExLCA4NiwgMjQwLCAxNzUsIDI0MSwgMiwgODYsIDI0MCwgMTc1LCAyMzgsIDM5LCA4NiwgMjQwLCAxNzUsIDI0MSwgCi0gICAgMjI1LCA4NiwgMjQwLCAxNzUsIDIzNSwgMTUyLCA4NiwgMjQwLCAxNzUsIDIzNSwgMTg2LCA4NiwgMjQwLCAxNzUsIDI0MSwgCi0gICAgMjExLCA4NiwgMjQxLCAyNDksIDI0MCwgMTk4LCA2MywgMjQwLCAxOTYsIDI0MCwgMTk4LCA2MywgMjM1LCA0MSwgMjQwLCAKLSAgICAxOTgsIDg2LCAyNDgsIDksIDI0MCwgMTk4LCA2MywgMjQxLCAyNDksIDI0MCwgMTk4LCA4NiwgMjQwLCAxOTYsIDI0MCwgCi0gICAgMTk4LCA4NiwgMjM1LCA0MSwgMjQwLCAxOTgsIDYzLCAyNDgsIDksIDI0MCwgMTk4LCAyNTMsIDIyNSwgMjM0LCAyMjgsIAotICAgIDIzNSwgNTMsIDI0MCwgMTg2LCAyMzcsIDExMiwgMjQwLCAxODYsIDIzNywgMjI5LCAyMzcsIDExMiwgMjM4LCAyOSwgMjM3LCAKLSAgICAyMjksIDIzMiwgNiwgMjM4LCAyOSwgMjQxLCA1MywgMjQ3LCAxNDEsIDUzLCAyNDEsIDUzLCAyMzUsIDEzMSwgNTMsIDI0MSwgCi0gICAgNTMsIDI0MCwgMjM1LCA1MywgMjQ2LCAxODQsIDE1MSwgMjM3LCA4NSwgMjQ2LCAxNzAsIDE1MSwgMjM3LCA4NSwgMjMyLCAKLSAgICA2NCwgMjMxLCAyMTMsIDk4LCAyMzEsIDIxMywgMTQsIDMyLCAyNDAsIDU3LCAyMzEsIDIyNCwgMjMxLCAyMTMsIDE0LCAzMiwgCi0gICAgMjQwLCA1OCwgMjMxLCAyMjQsIDIzMSwgMjEzLCAxNCwgMzIsIDI0MCwgNTksIDIzMSwgMjI0LCAyMzEsIDIxMywgMTQsIDMyLCAKLSAgICAyNDAsIDYwLCAyMzEsIDIyNCwgMjMxLCAyMTMsIDE0LCAzMiwgMjQwLCA2MSwgMjMxLCAyMjQsIDIzMSwgMjEzLCAxNCwgMzIsIAotICAgIDI0MCwgNjIsIDIzMSwgMjI0LCAyMzEsIDIxMywgMTQsIDMyLCAyNDAsIDYzLCAyMzEsIDIyNCwgMjMxLCAyMTMsIDE0LCAzMiwgCi0gICAgMjM2LCA5MiwgMjMxLCAxMDAsIDg2LCAyMzIsIDY0LCAyMzEsIDIxMywgOTgsIDIzNCwgMjA1LCAyNDEsIDU5LCA5OCwgMjIyLCAKLSAgICAyNDgsIDI0MSwgNTksIDk4LCAyMzIsIDI0OCwgMjQxLCA1OSwgNTMsIDIzMSwgMTg2LCA5OCwgMjUzLCAxMTUsIDIzNiwgNjgsIAotICAgIDI1MywgMTE1LCAyMzYsIDY5LCAyNTMsIDExNSwgMjM2LCA3MCwgMjUzLCAxMTUsIDIzNiwgNzEsIDI1MywgMTE1LCAyMzYsIAotICAgIDcyLCAyNTMsIDExNSwgMjM2LCA3MywgNjMsIDIzNywgNDAsIDIsIDU2LCAyMzcsIDQxLCA2MywgMjM3LCA0MCwgMiwgMTM1LCAKLSAgICAyNDAsIDE2OSwgODYsIDIzNywgNDAsIDIsIDYzLCA1NiwgMjM3LCA0MSwgODYsIDIzNywgNDAsIDIsIDEzNSwgNjMsIDI0MCwgCi0gICAgMTY5LCAyMzMsIDExNSwgMzIsIDI0MCwgMjQyLCAyMzMsIDExNSwgMzIsIDI0NywgMjMzLCAyMzcsIDExMSwgMzIsIDIzNSwgCi0gICAgMTc1LCAyNDAsIDI0MiwgMjM3LCAxMTEsIDMyLCAyMzgsIDIxLCAyNDcsIDIzMywgMjM3LCAxMTEsIDMyLCAyMzgsIDIxLCAKLSAgICAyNDAsIDI0MiwgMjM3LCAxMTEsIDMyLCAyMzUsIDE3NSwgMjQ3LCAyMzMsIDYzLCAyNDEsIDEzMSwgODYsIDI0MSwgMTMxLCAKLSAgICAyMzgsIDQsIDIyLCAyNDUsIDcyLCAyMzUsIDE0NSwgMjM1LCAxMTcsIDIzNiwgMjUwLCAyNDEsIDI1MSwgMTA2LCAyMjgsIAotICAgIDIyMiwgMjM2LCAyMDksIDIzNCwgMCwgMjM2LCA4NSwgMjQzLCAxMjEsIDI0MSwgMjUxLCAxMDYsIDIzNiwgMTA0LCAyNDgsIAotICAgIDI0MCwgOTgsIDIyNywgMjQwLCAyMzMsIDEyNCwgNjMsIDI0MCwgMTM5LCAyMzcsIDI3LCA1MywgMjAxLCAyMzcsIDI2LCA1MywgCi0gICAgMjM1LCAxNjYsIDIzNywgMTU0LCA1MywgMjM1LCAxNjYsIDI0NiwgMjM1LCA1MywgMjMwLCA3MiwgMjM3LCAxNTQsIDIyLCAKLSAgICAyNDYsIDIzNSwgNTMsIDI0NiwgMjM1LCAyMiwgMjM3LCAxNTQsIDUzLCAyNDYsIDIzNSwgMiwgMTk1LCA1MywgMjQ2LCAyMzUsIAotICAgIDIsIDE5NSwgMjIsIDI0NiwgMjM1LCAyMiwgMjM3LCAxNTQsIDUzLCA2MSwgMjQ2LCAyMzUsIDIsIDE5NSwgNTMsIDE2OSwgCi0gICAgMjQ2LCAyMzUsIDIsIDE5NSwgNTMsIDIzNywgNjAsIDYzLCAyMzUsIDIwLCAyMzcsIDYwLCA4NiwgMjM1LCAyMCwgMjM3LCAKLSAgICA2MCwgMywgNjMsIDIzNSwgMjAsIDIzNCwgMTUyLCA5OCwgMjM2LCA1MiwgOTgsIDIzMywgNjAsIDIyOSwgMjA4LCA5OCwgCi0gICAgMjM2LCAzNCwgMjM2LCA4NywgMjUyLCA2MiwgMjM2LCAxNjUsIDIzOCwgMTQ0LCAyMzYsIDE4MSwgMjQ0LCAzNywgMjQwLCAKLSAgICA3NiwgMjM2LCAyOCwgODYsIDI0NywgMTc2LCAyMzYsIDEzNCwgMjM0LCAyMjAsIDIyOSwgMTQ5LCAyMzMsIDYsIDIyNywgNzUsIAotICAgIDYzLCAyMzMsIDE0OCwgMjQ3LCA0LCA2MywgMjMzLCAxNDgsIDI0MSwgMiwgODYsIDIzMywgMTQ4LCAyNDcsIDQsIDg2LCAKLSAgICAyMzMsIDE0OCwgMjQxLCAyLCAyNDAsIDExNiwgMjQxLCAxMDEsIDIzMSwgMjQ1LCA4NiwgMjMxLCAyNDUsIDIwMywgMjQxLCAKLSAgICAxMDEsIDIzMSwgMjQ1LCA2MywgMjMxLCAyNDUsIDIzMiwgMTEsIDIzNCwgMTQ1LCA1MywgMjUyLCA4LCAyMzgsIDE5MiwgCi0gICAgMjMyLCA2NywgMjMyLCAxNzgsIDIzNywgMjMsIDI0MCwgMjUxLCAyMzcsIDMxLCAyNDAsIDI1MSwgMjAzLCA0MSwgMjM1LCAKLSAgICAxMzMsIDIzNSwgMTMzLCAyNDAsIDExNiwgNDEsIDIzNSwgMTMzLCA2MywgMjQ4LCAxMTEsIDg2LCAyNDgsIDExMSwgMjQwLCAKLSAgICAyNDUsIDc2LCAxMTIsIDI0MCwgMjQ1LCA3NiwgMjI3LCAxMzQsIDI1NCwgMTg0LCAxMTIsIDIyNywgMTM0LCAyNTQsIDE4NCwgCi0gICAgMjM3LCAxNDksIDI1NCwgMTg0LCAxMTIsIDIzNywgMTQ5LCAyNTQsIDE4NCwgMjMzLCAxMjQsIDE5LCAyMzcsIDg1LCAxMTIsIAotICAgIDE5LCAyMzcsIDg1LCAyNDYsIDE1NywgMjM3LCA5NSwgMjM3LCA4NSwgMTEyLCAyNDYsIDE1NywgMjM3LCA5NSwgMjM3LCA4NSwgCi0gICAgNywgMjM3LCA4NSwgMjMzLCAxMjUsIDYzLCA3LCAyMzcsIDg1LCAyMzMsIDEyNCwgNywgMjM3LCA4NSwgMjM2LCAxNDUsIAotICAgIDIzNywgODUsIDI0NywgNTMsIDEwNiwgMjM4LCAxNzMsIDI0NiwgMTYwLCAyMjUsIDEwNSwgMjMxLCAxOTgsIDI0NiwgMTYwLCAKLSAgICAyMjcsIDEzNiwgMjMxLCAxOTgsIDExMiwgMjQ2LCAxNjAsIDIyNywgMTM2LCAyMzEsIDE5OCwgMjQ2LCAxNjAsIDIyOSwgCi0gICAgMjM3LCAyMzEsIDE5OCwgODYsIDI0NiwgMTYwLCAyMzUsIDUwLCAyNDAsIDEzOSwgNjMsIDI0NiwgMTYwLCAyMzUsIDUwLCAKLSAgICAyNDAsIDEzOSwgMjM3LCAxNjUsIDIzMywgMTI0LCA2MywgMjQwLCAxMzksIDMzLCA2MywgMjQwLCAxMzksIDI0NiwgMTU3LCAKLSAgICAyMzcsIDk1LCA4NiwgMjQwLCAxMzksIDg2LCAyMzcsIDk1LCA2MywgMjQwLCAxMzksIDIzMywgMTI0LCA4NiwgMjQwLCAxMzksIAotICAgIDExMiwgMjMzLCAxMjQsIDg2LCAyNDAsIDEzOSwgMjMzLCAxNzUsIDI0MCwgMTM5LCAyMzMsIDEyNSwgNjMsIDI0MCwgMTM5LCAKLSAgICAxMTIsIDIzMSwgMTk4LCAyNDYsIDE1NywgMjM3LCA5NSwgMjMxLCAxOTgsIDI0MCwgMTQyLCAyNDAsIDEyLCAyMzEsIDE5OCwgCi0gICAgMjQwLCAxNDIsIDIzNSwgNTAsIDg2LCAyNDAsIDEzOSwgMjQwLCAxNDIsIDIzNSwgNTAsIDIzMywgMTc1LCAyNDAsIDEzOSwgCi0gICAgMjUzLCAxNywgMjM1LCA1MCwgODYsIDI0MCwgMTM5LCAyNDAsIDE0MiwgMjM1LCA1MCwgMjI5LCAyMTIsIDg2LCAyNDAsIAotICAgIDEzOSwgMTEyLCAyNDAsIDE0MiwgMjM1LCA1MCwgMjI5LCAyMTIsIDg2LCAyNDAsIDEzOSwgMjM4LCA3OSwgMjM1LCA1MCwgCi0gICAgODYsIDI0MCwgMTM5LCAyMzUsIDIxMCwgMjM1LCA1MCwgMjMxLCAxOTgsIDIyNSwgMTA1LCAyMzEsIDE5OCwgMjQ2LCAxNTcsIAotICAgIDIzNywgOTUsIDIyNSwgMTA1LCAyMzEsIDE5OCwgMTEyLCAyMjUsIDEwNSwgMjMxLCAxOTgsIDI1MywgMTcsIDIzMywgMjI4LCAKLSAgICA4NiwgMjIsIDYzLCAyMzEsIDIzOCwgODYsIDIzMSwgMjM4LCA2MywgMjMxLCAyMzgsIDI0MCwgMTQyLCAyMzMsIDIyOCwgCi0gICAgMjMzLCAxMjQsIDg2LCAyMzEsIDIzOCwgMzMsIDI0NiwgMTU3LCAyMzcsIDk1LCAyNDAsIDE0MiwgMjM1LCA1MCwgMjQwLCAKLSAgICAxMzksIDExMiwgMjI1LCAxMDUsIDIzMywgMTc1LCAyMzEsIDE5OCwgMjMwLCAxNzEsIDI0NSwgMjUxLCAyMzEsIDE4MCwgCi0gICAgMjMwLCAxNzEsIDExMiwgMjM2LCAyNiwgMjMwLCAxNzEsIDIzMywgMjM5LCAxMTIsIDIzMywgMjM5LCAyMjcsIDEzNiwgMjMxLCAKLSAgICAxOTgsIDI0MCwgMTQyLCAyMjUsIDEwNSwgMjMyLCA0MCwgMjMxLCAxOTgsIDExMiwgMjQwLCAxNDIsIDIyNSwgMTA1LCAyMzIsIAotICAgIDQwLCAyMzEsIDE5OCwgMjMzLCAxMjUsIDYzLCAyMzUsIDIwLCAyMDMsIDQxLCAyMjcsIDIwMiwgNjMsIDIzNSwgMjcsIDI0MCwgCi0gICAgMTE2LCA0MSwgMjI3LCAyMDIsIDYzLCAyMzUsIDI3LCAyMDMsIDQxLCAyMzMsIDEyNSwgNjMsIDIzNSwgMjcsIDI0MCwgMTE2LCAKLSAgICA0MSwgMjMzLCAxMjUsIDYzLCAyMzUsIDI3LCA4NiwgMjM1LCA0MSwgMjQwLCAxNzIsIDYzLCAyNTQsIDE4NCwgMTU3LCA2MSwgCi0gICAgMTI1LCAyMzcsIDYwLCA2MSwgMTI1LCAxMTIsIDYxLCAxMjUsIDExMiwgMjM3LCA2MiwgMjA5LCAyNDAsIDE2MiwgMjMxLCAKLSAgICAxOTksIDE2NSwgMjMxLCAyMDAsIDExMiwgMjM3LCA2MiwgMjQwLCAxNjIsIDIzMSwgMTk5LCAxNjUsIDIzMSwgMjAwLCAxMTIsIAotICAgIDQ3LCAyMDksIDI0MCwgMTYyLCAyMzEsIDE5OSwgMTY1LCAyMzEsIDIwMCwgMTEyLCA0NywgMjQwLCAxNjIsIDIzMSwgMTk5LCAKLSAgICAxNjUsIDIzMSwgMjAwLCAyMzcsIDE1MywgMjUxLCAyMzgsIDIzMSwgMjQyLCA1LCAyMzEsIDIwMCwgMTEyLCAyMjksIDE2NSwgCi0gICAgMTY1LCAyMzEsIDIwMCwgMTEyLCAyNDAsIDE5NiwgMjI5LCAxNjUsIDE2NSwgMjMxLCAyMDAsIDExMiwgODYsIDIzNywgMjA0LCAKLSAgICAyMzUsIDk3LCAxMTIsIDg2LCAyNDAsIDE5NiwgMjM1LCA0NSwgMjM3LCAyMDIsIDIzNywgMjA0LCAyMzUsIDk3LCAyMzcsIAotICAgIDIwMiwgMjQwLCAxOTYsIDIzNSwgNDUsIDIzNywgNjAsIDQyLCAyMjksIDE2OSwgMjMxLCAyMDAsIDIzNywgNjAsIDQxLCAKLSAgICAyMjksIDE2OSwgMjMxLCAyMDAsIDIzNywgNjAsIDIzMSwgMjMwLCA0MiwgMjI5LCAxNjksIDIzMSwgMjAwLCAyMzcsIDYwLCAKLSAgICAyMzEsIDIzMCwgNDEsIDIyOSwgMTY5LCAyMzEsIDIwMCwgMjM3LCA2MCwgMjI3LCAxODUsIDI0MCwgMTE3LCAyMzUsIDIyLCAKLSAgICAyMzEsIDIwMCwgMjM3LCA2MCwgMjI3LCAxMzMsIDI0MCwgMTE3LCAyMzUsIDIyLCAyMzEsIDIwMCwgMTEyLCAyMjcsIDE4NSwgCi0gICAgMjQwLCAxMTcsIDIzMSwgMTk5LCAxNjUsIDIzMSwgMjAwLCAxMTIsIDIyNywgMTMzLCAyNDAsIDExNywgMjMxLCAxOTksIAotICAgIDE2NSwgMjMxLCAyMDAsIDExMiwgMjI3LCAxODUsIDI0MCwgMTE3LCAyMzUsIDIyLCAyMzEsIDIwMCwgMTEyLCAyMjcsIDEzMywgCi0gICAgMjQwLCAxMTcsIDIzNSwgMjIsIDIzMSwgMjAwLCAxNTcsIDQyLCAyMzMsIDg5LCAyNDAsIDE1OCwgMjM1LCAyMiwgMjMxLCAKLSAgICAyMDAsIDE1NywgNDEsIDIzMywgODksIDI0MCwgMTU4LCAyMzUsIDIyLCAyMzEsIDIwMCwgMjM3LCA2MCwgNDIsIDI0MCwgCi0gICAgMTM3LCAyMzUsIDIyLCAyMzEsIDIwMCwgMjM3LCA2MCwgNDEsIDI0MCwgMTM3LCAyMzUsIDIyLCAyMzEsIDIwMCwgMjM1LCAKLSAgICAyNSwgMjMzLCA3MSwgMzMsIDIxLCAxMTgsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAyMSwgMTEzLCAyMzUsIDI1LCAyMzMsIAotICAgIDcxLCAzMywgMjEsIDE2NiwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDIxLCAxNTgsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAyMSwgCi0gICAgMTczLCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMjEsIDE4MywgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDIxLCAxOTQsIDIzNSwgCi0gICAgMjUsIDIzMywgNzEsIDMzLCAyMSwgMTg3LCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMjEsIDE5MiwgMjM1LCAyNSwgMjMzLCAKLSAgICA3MSwgMzMsIDY1LCAyNDYsIDE3OSwgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTE4LCAyMzUsIDI1LCAzMywgMzAsIDIxLCAxMTMsIAotICAgIDIzNSwgMjUsIDMzLCAzMCwgMjEsIDE2NiwgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTU4LCAyMzUsIDI1LCAzMywgMzAsIDIxLCAKLSAgICAxNzMsIDIzNSwgMjUsIDMzLCAzMCwgMjEsIDE4MywgMjM1LCAyNSwgMzMsIDMwLCAyMSwgMTk0LCAyMzUsIDI1LCAzMywgMzAsIAotICAgIDIxLCAxODcsIDIzNSwgMjUsIDMzLCAzMCwgMjEsIDE5MiwgMjM1LCAyNSwgMzMsIDMwLCA2NSwgMjQ2LCAxNzksIDIzNSwgCi0gICAgMjUsIDIzMywgNzEsIDMzLCAzMCwgMjEsIDExOCwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTEzLCAyMzUsIDI1LCAKLSAgICAyMzMsIDcxLCAzMywgMzAsIDIxLCAxNjYsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAzMCwgMjEsIDE1OCwgMjM1LCAyNSwgCi0gICAgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTczLCAyMzUsIDI1LCAyMzMsIDcxLCAzMywgMzAsIDIxLCAxODMsIDIzNSwgMjUsIAotICAgIDIzMywgNzEsIDMzLCAzMCwgMjEsIDE5NCwgMjM1LCAyNSwgMjMzLCA3MSwgMzMsIDMwLCAyMSwgMTg3LCAyMzUsIDI1LCAKLSAgICAyMzMsIDcxLCAzMywgMzAsIDIxLCAxOTIsIDIzNSwgMjUsIDIzMywgNzEsIDMzLCAzMCwgNjUsIDI0NiwgMTc5LCAxMTIsIAotICAgIDIzMCwgMTIzLCA4MSwgNTgsIDExMiwgMjQwLCAxNDEsIDI0NiwgMTcwLCA1OCwgMTEyLCA4MSwgNTgsIDExMiwgMjQwLCAKLSAgICAxMzQsIDI0NiwgMTcwLCA1OCwgMjM0LCA4NywgMjQwLCAxNDMsIDgxLCA1OCwgMTEyLCAyMjksIDU3LCA4MSwgNTgsIDIyNSwgCi0gICAgMTA3LCA4MSwgNTgsIDExMiwgMjI1LCAxMDcsIDgxLCA1OCwgMjM3LCAxMTAsIDIyNSwgMTA3LCA4MSwgNTgsIDExMiwgMjM3LCAKLSAgICAxMTAsIDIyNSwgMTA3LCA4MSwgNTgsIDg2LCA4MSwgNTgsIDIzNSwgMjI2LCAyMzAsIDExOSwgODEsIDIzMCwgMTMzLCAyMzUsIAotICAgIDIyNiwgMjI3LCAxNTcsIDgxLCAyMzAsIDEzMywgODYsIDgxLCAyMzAsIDEzMywgMTEyLCA4NiwgMjM3LCAxNTMsIDIzMSwgCi0gICAgMTkxLCAyMiwgODEsIDU4LCAxMTIsIDg2LCAyMzcsIDE1MywgMjM1LCAxOCwgMjIsIDgxLCA1OCwgMjQxLCAyNTAsIDg2LCAKLSAgICA4MSwgNTgsIDExMiwgMjI1LCAxMTIsIDg2LCA4MSwgNTgsIDIyOSwgNTUsIDYzLCA4MSwgNTgsIDIzMCwgNzYsIDYzLCA4MSwgCi0gICAgNTgsIDIyOSwgMjMzLCAyMzMsIDEyNSwgNjMsIDgxLCA1OCwgMjI5LCAyMCwgMjMzLCAxMjUsIDYzLCA4MSwgNTgsIDExMiwgCi0gICAgMjAzLCAyMjcsIDEzNSwgNjMsIDgxLCA1OCwgMTEyLCAyNDAsIDExNiwgMjI3LCAxMzUsIDYzLCA4MSwgNTgsIDIzNSwgMTk2LCAKLSAgICAyMDMsIDIyNywgMTM1LCA2MywgODEsIDU4LCAyMzUsIDE5NiwgMjQwLCAxMTYsIDIyNywgMTM1LCA2MywgODEsIDU4LCAzMywgCi0gICAgMTEyLCA2MywgODEsIDU4LCAyMjcsIDEzMSwgODEsIDU4LCAyMjUsIDEwNiwgMjQwLCAxNDEsIDI0NiwgMTcwLCA1OCwgMjI1LCAKLSAgICAxMDYsIDgxLCA1OCwgMjI1LCAxMDYsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNTgsIDExMiwgMjI1LCAxMDYsIDI0MCwgMTQxLCAKLSAgICAyNDYsIDE3MCwgNTgsIDExMiwgMjI1LCAxMDYsIDgxLCA1OCwgMTEyLCAyMjUsIDEwNiwgMjQwLCAxMzQsIDI0NiwgMTcwLCAKLSAgICA1OCwgMjI3LCA3OSwgODEsIDU4LCAxMTIsIDIyNSwgMTAzLCA4MSwgNTgsIDIyOCwgMjIxLCA4MSwgNTgsIDExMiwgMjI4LCAKLSAgICAyMjEsIDgxLCA1OCwgMjI4LCAwLCA4MSwgNTgsIDE1MiwgMjI5LCAyNDgsIDIzNywgOTgsIDYzLCAyMzMsIDgwLCAyMzAsIAotICAgIDE2MiwgMywgNjMsIDIzMSwgMTkzLCAyMjcsIDE0NiwgMjQ2LCAxNTcsIDIzNSwgNjEsIDI0NiwgMTU3LCAyMzEsIDIyOCwgCi0gICAgNDIsIDIzMywgMjMyLCAyNTMsIDE3MCwgMjMwLCAxNjMsIDQxLCAyMzMsIDIzMiwgMjUzLCAxNzAsIDIzMCwgMTYzLCAxNDUsIAotICAgIDIsIDU2LCAyMzUsIDU3LCAyMzUsIDM3LCAyMzUsIDU0LCAyMzIsIDM4LCAyMzUsIDYxLCAyMzMsIDgzLCAyMzIsIDM4LCAKLSAgICAyMzMsIDEwNCwgNjEsIDI1MiwgMjE5LCAyLCAxNjksIDgyLCAxODIsIDIzMiwgMTE0LCA2MywgMjM1LCA0MSwgMiwgMjM1LCAKLSAgICAxMTIsIDI0NiwgMTY0LCAyMiwgMiwgMjQ2LCAxNjQsIDIzNSwgNDQsIDEwNiwgMjM1LCA3MSwgMjMzLCAxMzksIDIwMywgNDEsIAotICAgIDIzNywgNzksIDIsIDI0NiwgMTY0LCAyNDAsIDExNiwgNDIsIDIzNywgNzksIDIsIDI0NiwgMTY0LCA0MiwgMjQxLCA1NywgCi0gICAgMjQwLCAyNTMsIDQxLCAyNDEsIDU3LCAyNDAsIDI1MywgMjQ2LCAxNjIsIDI0MSwgNTcsIDI0MCwgMjUzLCAyNDAsIDE4NSwgCi0gICAgOTksIDI0MCwgMTQ5LCAyNDAsIDE4NSwgMTAzLCAyNDAsIDE0OSwgNDIsIDIyLCA0MSwgNDcsIDIzMCwgMTQxLCA0MiwgMjIsIAotICAgIDQxLCAyNDAsIDE0OSwgNDIsIDIzMiwgMCwgMTgyLCA0MSwgMjQwLCAxNDksIDE4MiwgNDIsIDI0MCwgMTQ5LCA5OSwgMjQ2LCAKLSAgICAyMTUsIDIsIDIzNywgNDAsIDQ2LCAyMzYsIDE0MywgMjM1LCAxMTksIDI1NCwgMjA1LCAxNjksIDI0NSwgMTM5LCA2MywgCi0gICAgMjI3LCAxOTQsIDIzMywgOTAsIDYzLCAyMjcsIDE5NCwgMjM1LCA0MSwgMiwgMTE3LCAyNDAsIDIxNiwgNjMsIDIyNywgMTk0LCAKLSAgICAyMzUsIDQxLCAyLCA4MSwgMjQwLCAyMTYsIDYzLCAzNywgMiwgMTE3LCAyNDAsIDIxNiwgNjMsIDM3LCAyLCA4MSwgMjQwLCAKLSAgICAyMTYsIDEyLCA0MiwgNjMsIDM3LCAxMDQsIDEyLCA0MSwgNjMsIDM3LCAxMDQsIDEyLCA0MiwgMjQwLCAxMTcsIDEwNCwgMTIsIAotICAgIDQxLCAyNDAsIDExNywgMTA0LCAxMiwgNDIsIDQ3LCAyNDAsIDExNywgMTA0LCAxMiwgNDEsIDQ3LCAyNDAsIDExNywgMTA0LCAKLSAgICAxMiwgNDIsIDYzLCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCAxMiwgNDEsIDYzLCAyMzMsIDg5LCAyNDAsIDE1OCwgMTA0LCAKLSAgICAxMiwgNDIsIDIzMSwgMjMwLCAyMjgsIDE4MCwgMTIsIDQxLCAyMzEsIDIzMCwgMjI4LCAxODAsIDIzNSwgMTgsIDIzMSwgCi0gICAgMjEyLCA1OCwgMjMxLCAxOTEsIDIzMSwgMjEyLCA1OCwgMjI3LCAxODQsIDIzNywgMjUzLCAyMzcsIDQwLCA1OCwgMjMxLCAKLSAgICAyMDksIDIzNywgMjUzLCAyMzcsIDQwLCA1OCwgNDEsIDY3LCAyLCAzMywgMjQwLCAxODAsIDE4MiwgMTE3LCA1OCwgMTgyLCAKLSAgICA4MSwgNTgsIDE4MiwgNDIsIDQxLCA1OCwgMTgyLCAxMTcsIDQ3LCA1OCwgMTgyLCA4MSwgNDcsIDU4LCAxODIsIDQyLCA0MSwgCi0gICAgNDcsIDU4LCAxODIsIDExNywgNjcsIDI0NiwgMTcyLCAxMjUsIDE4MiwgODEsIDY3LCAyNDYsIDE3MiwgMTI1LCAxODIsIAotICAgIDExNywgNDcsIDY3LCAyNDYsIDE3MiwgMTI1LCAxODIsIDgxLCA0NywgNjcsIDI0NiwgMTcyLCAxMjUsIDE4MiwgODEsIDIzMywgCi0gICAgMTU2LCA1OCwgMzksIDQwLCAyMzgsIDEyNiwgMzksIDQwLCAyMzYsIDU0LCAzOSwgNDAsIDIzNiwgNTUsIDM5LCA0MCwgMjM0LCAKLSAgICA1OCwgMzksIDQwLCAyMzYsIDU2LCAzOSwgNDAsIDIzNCwgNTksIDM5LCA0MCwgMjM0LCA2NSwgMzksIDQwLCAyMzIsIDExNSwgCi0gICAgMzksIDQwLCAyMzYsIDU3LCAzOSwgNDAsIDIzNCwgNjAsIDM5LCA0MCwgMjM0LCA2NiwgMzksIDQwLCAyMzIsIDExNiwgMzksIAotICAgIDQwLCAyMzQsIDcxLCAzOSwgNDAsIDIzMiwgMTIxLCAzOSwgNDAsIDIzMiwgMTM2LCAzOSwgNDAsIDIzMCwgMjQ3LCAzOSwgCi0gICAgNDAsIDIzNiwgNTgsIDM5LCA0MCwgMjM0LCA2MSwgMzksIDQwLCAyMzQsIDY3LCAzOSwgNDAsIDIzMiwgMTE3LCAzOSwgNDAsIAotICAgIDIzNCwgNzIsIDM5LCA0MCwgMjMyLCAxMjIsIDM5LCA0MCwgMjMyLCAxMzcsIDM5LCA0MCwgMjMwLCAyNDgsIDM5LCA0MCwgCi0gICAgMjM0LCA3NiwgMzksIDQwLCAyMzIsIDEyNiwgMzksIDQwLCAyMzIsIDE0MSwgMzksIDQwLCAyMzAsIDI1MiwgMzksIDQwLCAKLSAgICAyMzIsIDE1MSwgMzksIDQwLCAyMzEsIDYsIDM5LCA0MCwgMjMxLCAyNiwgMzksIDQwLCAyMjksIDI1MywgMzksIDQwLCAyMzYsIAotICAgIDU5LCAzOSwgNDAsIDIzNCwgNjIsIDM5LCA0MCwgMjM0LCA2OCwgMzksIDQwLCAyMzIsIDExOCwgMzksIDQwLCAyMzQsIDczLCAKLSAgICAzOSwgNDAsIDIzMiwgMTIzLCAzOSwgNDAsIDIzMiwgMTM4LCAzOSwgNDAsIDIzMCwgMjQ5LCAzOSwgNDAsIDIzNCwgNzcsIAotICAgIDM5LCA0MCwgMjMyLCAxMjcsIDM5LCA0MCwgMjMyLCAxNDIsIDM5LCA0MCwgMjMwLCAyNTMsIDM5LCA0MCwgMjMyLCAxNTIsIAotICAgIDM5LCA0MCwgMjMxLCA3LCAzOSwgNDAsIDIzMSwgMjcsIDM5LCA0MCwgMjI5LCAyNTQsIDM5LCA0MCwgMjM0LCA4MCwgMzksIAotICAgIDQwLCAyMzIsIDEzMCwgMzksIDQwLCAyMzIsIDE0NSwgMzksIDQwLCAyMzEsIDAsIDM5LCA0MCwgMjMyLCAxNTUsIDM5LCA0MCwgCi0gICAgMjMxLCAxMCwgMzksIDQwLCAyMzEsIDMwLCAzOSwgNDAsIDIzMCwgMSwgMzksIDQwLCAyMzIsIDE2MSwgMzksIDQwLCAyMzEsIAotICAgIDE2LCAzOSwgNDAsIDIzMSwgMzYsIDM5LCA0MCwgMjMwLCA3LCAzOSwgNDAsIDIzMSwgNDYsIDM5LCA0MCwgMjMwLCAxNywgCi0gICAgMzksIDQwLCAyMzAsIDMyLCAzOSwgNDAsIDIyOCwgMjQzLCAzOSwgNDAsIDIzNiwgNjAsIDM5LCA0MCwgMjM0LCA2MywgMzksIAotICAgIDQwLCAyMzQsIDY5LCAzOSwgNDAsIDIzMiwgMTE5LCAzOSwgNDAsIDIzNCwgNzQsIDM5LCA0MCwgMjMyLCAxMjQsIDM5LCA0MCwgCi0gICAgMjMyLCAxMzksIDM5LCA0MCwgMjMwLCAyNTAsIDM5LCA0MCwgMjM0LCA3OCwgMzksIDQwLCAyMzIsIDEyOCwgMzksIDQwLCAKLSAgICAyMzIsIDE0MywgMzksIDQwLCAyMzAsIDI1NCwgMzksIDQwLCAyMzIsIDE1MywgMzksIDQwLCAyMzEsIDgsIDM5LCA0MCwgCi0gICAgMjMxLCAyOCwgMzksIDQwLCAyMjksIDI1NSwgMzksIDQwLCAyMzQsIDgxLCAzOSwgNDAsIDIzMiwgMTMxLCAzOSwgNDAsIAotICAgIDIzMiwgMTQ2LCAzOSwgNDAsIDIzMSwgMSwgMzksIDQwLCAyMzIsIDE1NiwgMzksIDQwLCAyMzEsIDExLCAzOSwgNDAsIDIzMSwgCi0gICAgMzEsIDM5LCA0MCwgMjMwLCAyLCAzOSwgNDAsIDIzMiwgMTYyLCAzOSwgNDAsIDIzMSwgMTcsIDM5LCA0MCwgMjMxLCAzNywgCi0gICAgMzksIDQwLCAyMzAsIDgsIDM5LCA0MCwgMjMxLCA0NywgMzksIDQwLCAyMzAsIDE4LCAzOSwgNDAsIDIzMCwgMzMsIDM5LCAKLSAgICA0MCwgMjI4LCAyNDQsIDM5LCA0MCwgMjM0LCA4MywgMzksIDQwLCAyMzIsIDEzMywgMzksIDQwLCAyMzIsIDE0OCwgMzksIAotICAgIDQwLCAyMzEsIDMsIDM5LCA0MCwgMjMyLCAxNTgsIDM5LCA0MCwgMjMxLCAxMywgMzksIDQwLCAyMzEsIDMzLCAzOSwgNDAsIAotICAgIDIzMCwgNCwgMzksIDQwLCAyMzIsIDE2NCwgMzksIDQwLCAyMzEsIDE5LCAzOSwgNDAsIDIzMSwgMzksIDM5LCA0MCwgMjMwLCAKLSAgICAxMCwgMzksIDQwLCAyMzEsIDQ5LCAzOSwgNDAsIDIzMCwgMjAsIDM5LCA0MCwgMjMwLCAzNSwgMzksIDQwLCAyMjgsIDI0NiwgCi0gICAgMzksIDQwLCAyMzIsIDE2NywgMzksIDQwLCAyMzEsIDIyLCAzOSwgNDAsIDIzMSwgNDIsIDM5LCA0MCwgMjMwLCAxMywgMzksIAotICAgIDQwLCAyMzEsIDUyLCAzOSwgNDAsIDIzMCwgMjMsIDM5LCA0MCwgMjMwLCAzOCwgMzksIDQwLCAyMjgsIDI0OSwgMzksIDQwLCAKLSAgICAyMzEsIDU2LCAzOSwgNDAsIDIzMCwgMjcsIDM5LCA0MCwgMjMwLCA0MiwgMzksIDQwLCAyMjgsIDI1MywgMzksIDQwLCAyMzAsIAotICAgIDQ3LCAzOSwgNDAsIDIyOSwgMiwgMzksIDQwLCAyMjksIDgsIDM5LCA0MCwgMjI3LCAyMzEsIDM5LCA0MCwgMjM2LCA2MSwgCi0gICAgMzksIDQwLCAyMzQsIDY0LCAzOSwgNDAsIDIzNCwgNzAsIDM5LCA0MCwgMjMyLCAxMjAsIDM5LCA0MCwgMjM0LCA3NSwgMzksIAotICAgIDQwLCAyMzIsIDEyNSwgMzksIDQwLCAyMzIsIDE0MCwgMzksIDQwLCAyMzAsIDI1MSwgMzksIDQwLCAyMzQsIDc5LCAzOSwgCi0gICAgNDAsIDIzMiwgMTI5LCAzOSwgNDAsIDIzMiwgMTQ0LCAzOSwgNDAsIDIzMCwgMjU1LCAzOSwgNDAsIDIzMiwgMTU0LCAzOSwgCi0gICAgNDAsIDIzMSwgOSwgMzksIDQwLCAyMzEsIDI5LCAzOSwgNDAsIDIzMCwgMCwgMzksIDQwLCAyMzQsIDgyLCAzOSwgNDAsIAotICAgIDIzMiwgMTMyLCAzOSwgNDAsIDIzMiwgMTQ3LCAzOSwgNDAsIDIzMSwgMiwgMzksIDQwLCAyMzIsIDE1NywgMzksIDQwLCAKLSAgICAyMzEsIDEyLCAzOSwgNDAsIDIzMSwgMzIsIDM5LCA0MCwgMjMwLCAzLCAzOSwgNDAsIDIzMiwgMTYzLCAzOSwgNDAsIDIzMSwgCi0gICAgMTgsIDM5LCA0MCwgMjMxLCAzOCwgMzksIDQwLCAyMzAsIDksIDM5LCA0MCwgMjMxLCA0OCwgMzksIDQwLCAyMzAsIDE5LCAKLSAgICAzOSwgNDAsIDIzMCwgMzQsIDM5LCA0MCwgMjI4LCAyNDUsIDM5LCA0MCwgMjM0LCA4NCwgMzksIDQwLCAyMzIsIDEzNCwgMzksIAotICAgIDQwLCAyMzIsIDE0OSwgMzksIDQwLCAyMzEsIDQsIDM5LCA0MCwgMjMyLCAxNTksIDM5LCA0MCwgMjMxLCAxNCwgMzksIDQwLCAKLSAgICAyMzEsIDM0LCAzOSwgNDAsIDIzMCwgNSwgMzksIDQwLCAyMzIsIDE2NSwgMzksIDQwLCAyMzEsIDIwLCAzOSwgNDAsIDIzMSwgCi0gICAgNDAsIDM5LCA0MCwgMjMwLCAxMSwgMzksIDQwLCAyMzEsIDUwLCAzOSwgNDAsIDIzMCwgMjEsIDM5LCA0MCwgMjMwLCAzNiwgCi0gICAgMzksIDQwLCAyMjgsIDI0NywgMzksIDQwLCAyMzIsIDE2OCwgMzksIDQwLCAyMzEsIDIzLCAzOSwgNDAsIDIzMSwgNDMsIDM5LCAKLSAgICA0MCwgMjMwLCAxNCwgMzksIDQwLCAyMzEsIDUzLCAzOSwgNDAsIDIzMCwgMjQsIDM5LCA0MCwgMjMwLCAzOSwgMzksIDQwLCAKLSAgICAyMjgsIDI1MCwgMzksIDQwLCAyMzEsIDU3LCAzOSwgNDAsIDIzMCwgMjgsIDM5LCA0MCwgMjMwLCA0MywgMzksIDQwLCAyMjgsIAotICAgIDI1NCwgMzksIDQwLCAyMzAsIDQ4LCAzOSwgNDAsIDIyOSwgMywgMzksIDQwLCAyMjksIDksIDM5LCA0MCwgMjI3LCAyMzIsIAotICAgIDM5LCA0MCwgMjM0LCA4NSwgMzksIDQwLCAyMzIsIDEzNSwgMzksIDQwLCAyMzIsIDE1MCwgMzksIDQwLCAyMzEsIDUsIDM5LCAKLSAgICA0MCwgMjMyLCAxNjAsIDM5LCA0MCwgMjMxLCAxNSwgMzksIDQwLCAyMzEsIDM1LCAzOSwgNDAsIDIzMCwgNiwgMzksIDQwLCAKLSAgICAyMzIsIDE2NiwgMzksIDQwLCAyMzEsIDIxLCAzOSwgNDAsIDIzMSwgNDEsIDM5LCA0MCwgMjMwLCAxMiwgMzksIDQwLCAyMzEsIAotICAgIDUxLCAzOSwgNDAsIDIzMCwgMjIsIDM5LCA0MCwgMjMwLCAzNywgMzksIDQwLCAyMjgsIDI0OCwgMzksIDQwLCAyMzIsIDE2OSwgCi0gICAgMzksIDQwLCAyMzEsIDI0LCAzOSwgNDAsIDIzMSwgNDQsIDM5LCA0MCwgMjMwLCAxNSwgMzksIDQwLCAyMzEsIDU0LCAzOSwgCi0gICAgNDAsIDIzMCwgMjUsIDM5LCA0MCwgMjMwLCA0MCwgMzksIDQwLCAyMjgsIDI1MSwgMzksIDQwLCAyMzEsIDU4LCAzOSwgNDAsIAotICAgIDIzMCwgMjksIDM5LCA0MCwgMjMwLCA0NCwgMzksIDQwLCAyMjgsIDI1NSwgMzksIDQwLCAyMzAsIDQ5LCAzOSwgNDAsIDIyOSwgCi0gICAgNCwgMzksIDQwLCAyMjksIDEwLCAzOSwgNDAsIDIyNywgMjMzLCAzOSwgNDAsIDIzMiwgMTcwLCAzOSwgNDAsIDIzMSwgMjUsIAotICAgIDM5LCA0MCwgMjMxLCA0NSwgMzksIDQwLCAyMzAsIDE2LCAzOSwgNDAsIDIzMSwgNTUsIDM5LCA0MCwgMjMwLCAyNiwgMzksIAotICAgIDQwLCAyMzAsIDQxLCAzOSwgNDAsIDIyOCwgMjUyLCAzOSwgNDAsIDIzMSwgNTksIDM5LCA0MCwgMjMwLCAzMCwgMzksIDQwLCAKLSAgICAyMzAsIDQ1LCAzOSwgNDAsIDIyOSwgMCwgMzksIDQwLCAyMzAsIDUwLCAzOSwgNDAsIDIyOSwgNSwgMzksIDQwLCAyMjksIAotICAgIDExLCAzOSwgNDAsIDIyNywgMjM0LCAzOSwgNDAsIDIzMSwgNjAsIDM5LCA0MCwgMjMwLCAzMSwgMzksIDQwLCAyMzAsIDQ2LCAKLSAgICAzOSwgNDAsIDIyOSwgMSwgMzksIDQwLCAyMzAsIDUxLCAzOSwgNDAsIDIyOSwgNiwgMzksIDQwLCAyMjksIDEyLCAzOSwgNDAsIAotICAgIDIyNywgMjM1LCAzOSwgNDAsIDIzMCwgNTIsIDM5LCA0MCwgMjI5LCA3LCAzOSwgNDAsIDIyOSwgMTMsIDM5LCA0MCwgMjI3LCAKLSAgICAyMzYsIDM5LCA0MCwgMjI5LCAxNCwgMzksIDQwLCAyMjcsIDIzNywgMzksIDQwLCAyMjcsIDIzOCwgMzksIDQwLCAyMjcsIAotICAgIDE2MiwgODEsIDIzMCwgMTMyLCA2NywgMiwgNjEsIDgyLCA4MSwgMjMwLCAxMzIsIDY3LCAyLCA0NywgNjEsIDgyLCAxMTcsIAotICAgIDQ3LCA2NywgMiwgNjEsIDgyLCA4MSwgNDcsIDY3LCAyLCA2MSwgODIsIDQyLCA0MSwgNDcsIDY3LCAyLCA2MSwgODIsIDgxLCAKLSAgICAyMzAsIDEzMiwgNjcsIDI0NiwgMTcyLCAxMjUsIDExNywgNDcsIDY3LCAyNDYsIDE3MiwgMTI1LCA4MSwgNDcsIDY3LCAyNDYsIAotICAgIDE3MiwgMTI1LCAyMzEsIDE5MSwgNjcsIDIsIDE2OSwgODIsIDIzNSwgMTgsIDY3LCAyLCAxNjksIDgyLCAyMzUsIDE4LCAKLSAgICAyMzcsIDQ5LCA1OCwgMjMxLCAxOTEsIDIzNywgNDksIDU4LCAxMTcsIDQ3LCAyNDYsIDE4NywgNTgsIDgxLCA0NywgMjQ2LCAKLSAgICAxODcsIDU4LCAxMTcsIDIzNywgNDksIDI0NiwgMTg3LCA1OCwgODEsIDIzNywgNDksIDI0NiwgMTg3LCA1OCwgODEsIDIzMCwgCi0gICAgMTMyLCAyMzcsIDQ5LCAyNDYsIDE4NywgNTgsIDgxLCA2NywgMiwgMjM3LCA1MCwgMjQwLCAyMTQsIDIzNSwgMTgsIDY3LCAKLSAgICAxODAsIDEyNSwgMjMxLCAxOTEsIDY3LCAxODAsIDEyNSwgODEsIDY3LCAyLCAyNDYsIDIzNywgMiwgNjEsIDgyLCA4MSwgNjcsIAotICAgIDIsIDI0NiwgMjM3LCAyLCA0NywgNjEsIDgyLCA4MSwgMjMwLCAxMzIsIDY3LCAyLCAyNDAsIDEzMywgODEsIDIzMCwgMTMyLCAKLSAgICA2NywgMiwgMjQ2LCAyMzcsIDIsIDYxLCA4MiwgODEsIDIzMCwgMTMyLCA2NywgMiwgMjQ2LCAyMzcsIDIsIDQ3LCA2MSwgODIsIAotICAgIDExNywgMjI5LCAxNzgsIDgxLCAyMjksIDE3OCwgMTE3LCA0NywgMjI5LCAxNzgsIDgxLCA0NywgMjI5LCAxNzgsIDExNywgCi0gICAgNjcsIDE4MCwgODYsIDIzMywgOTAsIDgxLCA2NywgMTgwLCA4NiwgMjMzLCA5MCwgMTE3LCA2NywgMjQ2LCAxNzIsIDI1MiwgCi0gICAgMjE5LCAxODAsIDg2LCAyMzMsIDkwLCA4MSwgNjcsIDI0NiwgMTcyLCAyNTIsIDIxOSwgMTgwLCA4NiwgMjMzLCA5MCwgMjQwLCAKLSAgICAxMzQsIDI0NiwgMTg0LCAyMiwgMjQwLCAxNDEsIDI0NiwgMTcwLCA1OCwgMjQwLCAxMzQsIDI0NiwgMTcwLCAyMiwgMjQwLCAKLSAgICAxNDEsIDI0NiwgMTg0LCA1OCwgMjQwLCAxMzQsIDI0NiwgMTg0LCA2NywgMiwgODgsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNjcsIAotICAgIDIsIDg4LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDY3LCAyLCA4OCwgMjQwLCAxNDEsIDI0NiwgMTg0LCA2NywgMiwgODgsIDI0MCwgCi0gICAgMTM0LCAyNDYsIDE4NCwgNjcsIDIyLCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDU4LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDY3LCAKLSAgICAyMiwgMjQwLCAxNDEsIDI0NiwgMTcwLCA1OCwgMjQwLCAxNDEsIDI0NiwgMTcwLCA2NywgMjIsIDI0MCwgMTQxLCAyNDYsIAotICAgIDE4NCwgNTgsIDI0MCwgMTQxLCAyNDYsIDE4NCwgNjcsIDIyLCAyNDAsIDEzNCwgMjQ2LCAxODQsIDU4LCAyMzcsIDExNSwgCi0gICAgMjMzLCA3NCwgMjMzLCA3NywgMjM1LCA4NCwgMjMxLCAyMzYsIDIzNSwgODQsIDIzMywgNzQsIDIzMywgNzcsIDIzNywgMTE1LCAKLSAgICAyMzEsIDIzNiwgMjQwLCAxNDEsIDI0NiwgMTcwLCA2NywgMjMzLCA3NywgMjQwLCAxMzQsIDI0NiwgMTcwLCA1OCwgMjQwLCAKLSAgICAxMzQsIDI0NiwgMTcwLCA2NywgMjMzLCA3NywgMjQwLCAxNDEsIDI0NiwgMTcwLCA1OCwgMjM1LCA4NCwgMjMzLCA3NCwgCi0gICAgMjMzLCA3NywgMjQwLCAxMzQsIDI0NiwgMTcwLCA1OCwgMjM3LCAxMTUsIDIzMywgNzQsIDIzMywgNzcsIDI0MCwgMTQxLCAKLSAgICAyNDYsIDE3MCwgNTgsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNjcsIDIzMywgNzcsIDI0MCwgMTM0LCAyNDYsIDE4NCwgNTgsIAotICAgIDI0MCwgMTM0LCAyNDYsIDE4NCwgNjcsIDIzMywgNzcsIDI0MCwgMTM0LCAyNDYsIDE3MCwgNTgsIDI0NywgMjMsIDY3LCAKLSAgICAyMzMsIDc4LCAyMzMsIDIwMSwgMjM3LCA0MSwgNjcsIDIzMywgNzgsIDgxLCAyNDcsIDEwNywgMjM1LCA4OSwgMjMzLCAxMzksIAotICAgIDY3LCAyMzMsIDc4LCA4MSwgMjQ3LCAxMDcsIDIzNSwgODksIDIzMCwgMTM0LCA2NywgMjMzLCA3OCwgMjMxLCAxOTEsIDI0NywgCi0gICAgMTA3LCAyMzUsIDg5LCAyMzAsIDE0MywgNjcsIDIzMywgNzgsIDIzMSwgMTkxLCAyNDcsIDEwNywgMjM1LCA4OSwgMjI5LCAKLSAgICAxNzcsIDIzMSwgMTM2LCAyNTMsIDI5LCAyMzEsIDIwOSwgNTgsIDIzMiwgMjE5LCAyNTMsIDI5LCAyMjcsIDE4NCwgNTgsIAotICAgIDI1MiwgMjI4LCAyNTMsIDI5LCAyMjcsIDE4NCwgNTgsIDIzNywgNTksIDI1MywgMjksIDIyNywgMTg0LCA1OCwgMjUyLCAKLSAgICAyMjgsIDI1MywgMjksIDIzMSwgMjA5LCA2NywgMiwgMjM3LCAxMjQsIDI1MiwgMjI4LCAyNTMsIDI5LCAyMjcsIDE4NCwgNjcsIAotICAgIDIsIDI0MCwgMTgwLCAyMDMsIDQxLCAyMjgsIDIwNiwgMjMxLCAyMDksIDU4LCAyMDMsIDQyLCAyMjgsIDIwNiwgMjI3LCAKLSAgICAxODQsIDU4LCAyMjcsIDE4NCwgMjM3LCA1OCwgMjM3LCA0MCwgNTgsIDIzMSwgMjA5LCAyMzcsIDU4LCAyMzcsIDQwLCA1OCwgCi0gICAgODEsIDY3LCA2NCwgMjQwLCAxMjUsIDExNywgNTgsIDExNywgNjcsIDY0LCAyNDAsIDEyNSwgODEsIDU4LCAyNDAsIDEyNSwgCi0gICAgODEsIDY3LCA2NCwgMTE3LCA1OCwgODEsIDY3LCAyLCA3OSwgNTEsIDExNywgNjcsIDIsIDc5LCA1MSwgODEsIDY3LCAyMzUsIAotICAgIDQyLCAyNTQsIDE4NCwgNDIsIDQxLCA2NywgMjM1LCA0MiwgMywgMjM1LCAyMCwgMjM1LCAxOCwgMjMwLCAxMzIsIDY3LCAKLSAgICAyNDYsIDE3MiwgMywgMjM1LCAyMCwgNDIsIDE3MSwgOTksIDQxLCAxNzEsIDEwMywgMjMzLCAxMDUsIDQyLCAxNzEsIDEwMywgCi0gICAgNDEsIDE3MSwgOTksIDIzMywgMTA1LCA5OSwgMTcxLCA0MSwgMTAzLCAxNzEsIDQyLCAyMzMsIDEwNSwgOTksIDE3MSwgNDIsIAotICAgIDEwMywgMTcxLCA0MSwgMjMzLCAxMDUsIDQyLCAxNzEsIDk5LCA0MSwgMTcxLCA5OSwgMjMzLCAxMDUsIDk5LCAxNzEsIDQxLCAKLSAgICAxMDMsIDE3MSwgNDEsIDIzMywgMTA1LCA0MiwgMTcxLCAxMDMsIDQxLCAxNzEsIDEwMywgMjMzLCAxMDUsIDk5LCAxNzEsIAotICAgIDQyLCAxMDMsIDE3MSwgNDIsIDIzMywgMTA1LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDE4MCwgMTI1LCA4MSwgMjM1LCAKLSAgICAxNCwgMiwgMTcxLCA5OSwgMTgwLCAxMjUsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIDE3MSwgNDEsIDE4MCwgMTI1LCAyMzEsIAotICAgIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCA0MSwgMTgwLCAxMjUsIDExNywgMjM1LCAxNCwgMiwgMTcxLCAxMDMsIDE4MCwgMTI1LCAKLSAgICA4MSwgMjM1LCAxNCwgMiwgMTcxLCAxMDMsIDE4MCwgMTI1LCAyMzUsIDE4LCAyMzUsIDE0LCAyLCAxNzEsIDQyLCAxODAsIAotICAgIDEyNSwgMjMxLCAxOTEsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDE4MCwgMTI1LCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgOTksIAotICAgIDI0NiwgMTcyLCAxMjUsIDgxLCAyMzUsIDE0LCAyLCAxNzEsIDk5LCAyNDYsIDE3MiwgMTI1LCAyMzUsIDE4LCAyMzUsIDE0LCAKLSAgICAyLCAxNzEsIDQxLCAyNDYsIDE3MiwgMTI1LCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCA0MSwgMjQ2LCAxNzIsIDEyNSwgCi0gICAgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDEwMywgMjQ2LCAxNzIsIDEyNSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCAyNDYsIAotICAgIDE3MiwgMTI1LCAyMzUsIDE4LCAyMzUsIDE0LCAyLCAxNzEsIDQyLCAyNDYsIDE3MiwgMTI1LCAyMzEsIDE5MSwgMjM1LCAxNCwgCi0gICAgMiwgMTcxLCA0MiwgMjQ2LCAxNzIsIDEyNSwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDk5LCA2NCwgMTE3LCAyMzUsIDE0LCAyLCAKLSAgICAxNzEsIDI0MCwgMTUyLCAyMzUsIDE4LCAyMzUsIDE0LCAyLCAxNzEsIDQyLCAyMzcsIDk0LCAyMzUsIDE4LCAyMzUsIDE0LCAKLSAgICAyLCAxNzEsIDIzNywgNDEsIDgxLCAyMzUsIDE0LCAyLCAxNzEsIDk5LCA2NCwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMjQwLCAKLSAgICAxNTIsIDIzMSwgMTkxLCAyMzUsIDE0LCAyLCAxNzEsIDQyLCAyMzcsIDk0LCAyMzEsIDE5MSwgMjM1LCAxNCwgMiwgMTcxLCAKLSAgICAyMzcsIDQxLCAxMTcsIDIzNSwgMTQsIDIsIDE3MSwgOTksIDY0LCA4MSwgMjM1LCAxNCwgMiwgMTcxLCAyNTMsIDE5LCAxMTcsIAotICAgIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCA2NCwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMjQwLCAxNTIsIDgxLCAyMzUsIDE0LCAyLCAKLSAgICAxNzEsIDk5LCA2NCwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDI1MywgMTksIDgxLCAyMzUsIDE0LCAyLCAxNzEsIDEwMywgNjQsIAotICAgIDExNywgMjM1LCAxNCwgMiwgMTcxLCAyNDAsIDE1MiwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDk5LCA2NCwgMTgyLCAyNDAsIAotICAgIDE1MSwgMTE3LCAyMzUsIDE0LCAyLCAxNzEsIDEwMywgMjQwLCAxNDQsIDE4MiwgMjQwLCAxNTEsIDgxLCAyMzUsIDE0LCAyLCAKLSAgICAxNzEsIDk5LCA2NCwgMTgyLCAyNDAsIDE1MSwgODEsIDIzNSwgMTQsIDIsIDE3MSwgMTAzLCAyNDAsIDE0NCwgMTgyLCAyNDAsIAotICAgIDE1MSwgMjM1LCAxOCwgMjM1LCAxNCwgMiwgMTcxLCA0MiwgMjM3LCA5NCwgMjMxLCAxOTEsIDIzNSwgMTQsIDIsIDE3MSwgCi0gICAgMjM3LCA0MSwgMjMxLCAxOTEsIDIzNSwgMTQsIDIsIDE3MSwgNDIsIDIzNywgOTQsIDIzNSwgMTgsIDIzNSwgMTQsIDIsIAotICAgIDE3MSwgMjM3LCA0MSwgNDEsIDQ3LCA2NywgMiwgMjM1LCA5OCwgMjQwLCAyMjgsIDIzNywgNTEsIDUsIDY0LCA4MSwgNTgsIAotICAgIDI0MCwgMTI4LCAyMzMsIDExOCwgNjQsIDgxLCA1OCwgMTE3LCA2NywgNjQsIDI0MCwgMTI4LCAyMzEsIDE5MiwgODEsIDY3LCAKLSAgICA2NCwgMjQwLCAxMjgsIDIzMSwgMTkyLCA4MSwgNjcsIDY0LCAyMzcsIDc4LCAxMDUsIDk2LCAyMzEsIDE5MCwgNjQsIDExNywgCi0gICAgNTgsIDExNywgNjcsIDIzNSwgNDIsIDIzMCwgMTI4LCAyMjgsIDE3NSwgNjQsIDgxLCA1OCwgMjM3LCA3NiwgNjQsIDgxLCAKLSAgICA1OCwgMTE3LCA2NywgMjM1LCA0MiwgMjM1LCA2MSwgMjMzLCA4MywgNjQsIDExNywgNTgsIDQyLCAyNDcsIDc2LCAyNDAsIAotICAgIDEzMywgNDEsIDI0NywgNzYsIDI0MCwgMTMzLCA5OSwgMjQ3LCA3NiwgMjQwLCAxMzMsIDEwMywgMjQ3LCA3NiwgMjQwLCAKLSAgICAxMzMsIDIzNywgNDksIDYxLCAyNTIsIDIxOSwgMjMwLCAxNjMsIDI1NSwgNTYsIDE1MCwgMjQ1LCAxOTQsIDI1NSwgNTYsIAotICAgIDE1MCwgMjQ3LCAyMTksIDIzNywgNjYsIDQyLCA2MywgMjQwLCAxMzcsIDEwNCwgNDEsIDYzLCAyNDAsIDEzNywgMTA0LCA0MiwgCi0gICAgNjMsIDIyOCwgMTgwLCA0MSwgNjMsIDIyOCwgMTgwLCAyNTUsIDU2LCAxNTAsIDQyLCAyNDAsIDE5MCwgMTA0LCAyNTUsIDU2LCAKLSAgICAxNTAsIDQxLCAyNDAsIDE5MCwgMTA0LCAyNTUsIDU2LCAxNTAsIDQyLCAyMzUsIDE1MSwgMTA0LCAyNTUsIDU2LCAxNTAsIAotICAgIDQxLCAyMzUsIDE1MSwgMTA0LCA0MiwgMzcsIDIzNSwgMjIsIDIsIDIzMSwgMTk3LCA0MSwgMzcsIDIzNSwgMjIsIDIsIDIzMSwgCi0gICAgMTk3LCA0MiwgMzcsIDIzNSwgMjIsIDIsIDI0NywgMTA4LCAyNTQsIDE5OCwgMjUyLCAyMjgsIDIzNSwgNDAsIDQxLCAzNywgCi0gICAgMjM1LCAyMiwgMiwgMjQ3LCAxMDgsIDI1NCwgMTk4LCAyMzcsIDU5LCAyMzUsIDQwLCA0MiwgMzcsIDIzNSwgMjIsIDIsIAotICAgIDI0NywgMTA4LCAyNTQsIDE5OCwgMjM3LCA1OSwgMjM1LCA0MCwgNDEsIDM3LCAyMzUsIDIyLCAyLCAyNDcsIDEwOCwgMjU0LCAKLSAgICAxOTgsIDI1MiwgMjI4LCAyMzUsIDQwLCA0MiwgMjQwLCAxMTcsIDIzNSwgMjIsIDIsIDI0NiwgMTY0LCA0MSwgMjQwLCAxMTcsIAotICAgIDIzNSwgMjIsIDIsIDI0NiwgMTY0LCA0MiwgMjUzLCAyOSwgMjMxLCAxOTAsIDEwNCwgNDEsIDI1MywgMjksIDIyOCwgMTc1LCAKLSAgICAxMDQsIDQ3LCA0MiwgMjUzLCAyOSwgMjI4LCAxNzUsIDEwNCwgNDcsIDQxLCAyNTMsIDI5LCAyMzEsIDE5MCwgMTA0LCA0MiwgCi0gICAgODYsIDIzMywgODksIDI0MCwgMTU4LCAxMDQsIDQxLCA4NiwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgMjM3LCA1MCwgMjM3LCAKLSAgICAxNTUsIDYxLCAyMzcsIDE3MCwgMjQwLCAxMzgsIDIzMywgOTksIDI0MCwgMTE3LCAyMzUsIDcxLCAyNDAsIDEzMiwgNDEsIAotICAgIDI0MCwgMTE3LCAyMzUsIDMwLCAyLCAyMzUsIDI3LCAyMzMsIDk5LCA0MSwgMjQwLCAxMTcsIDIsIDI0NiwgMTY0LCAyNDAsIAotICAgIDExNywgMiwgMjU1LCA1OSwgMjM1LCA1NywgMjQwLCAxNTksIDIzNywgOTgsIDIzMiwgNywgMjQwLCAxMTcsIDIzNSwgNzEsIAotICAgIDI0MCwgMTMyLCAyMzIsIDcsIDI0MCwgMTE3LCAyMzUsIDcxLCAyNTMsIDE5LCAyMDksIDIzNywgOTgsIDIwMCwgMjM3LCA5OCwgCi0gICAgMjQwLCAxMTcsIDIsIDIzMSwgMTk3LCAyMDAsIDI0MCwgMTE3LCAyLCAyMzEsIDE5NywgMjM1LCA3OCwgMjQwLCAxMTcsIAotICAgIDIzNSwgNzEsIDI1MywgMTksIDIzNSwgNzgsIDI0MCwgMTE3LCAyMzUsIDcxLCAyNDAsIDE1MiwgMjMzLCA5OSwgMjQwLCAKLSAgICAxMTcsIDIsIDI0NiwgMTU3LCAyNTMsIDg0LCAyMzcsIDExOSwgMjU0LCAxOTgsIDY3LCAyMzMsIDc4LCA5OSwgMjIsIDIzNywgCi0gICAgNDEsIDIzMywgOTksIDI0MCwgMTE3LCAyLCAyNDYsIDE1NywgMjUzLCA4NCwgMjM3LCAxMTksIDI1NCwgMTk4LCA2NywgMjMzLCAKLSAgICA3OCwgOTksIDIyLCAyNDAsIDEzMiwgMjMzLCA5OSwgMjQwLCAxMTcsIDIsIDI0NiwgMTU3LCAyNTMsIDg0LCAyMzcsIDExOSwgCi0gICAgMjU0LCAxOTgsIDY3LCAyMzMsIDc4LCAxMDMsIDIyLCAyMzcsIDQxLCAyMzMsIDk5LCAyNDAsIDExNywgMiwgMjQ2LCAxNTcsIAotICAgIDI1MywgODQsIDIzNywgMTE5LCAyNTQsIDE5OCwgNjcsIDIzMywgNzgsIDEwMywgMjIsIDI0MCwgMTMyLCAyMzMsIDk5LCAKLSAgICAyNDAsIDExNywgMiwgMjQ2LCAxNTcsIDI1MywgODQsIDIzNywgMTE5LCAyNTQsIDE5OCwgNjcsIDIzMywgNzgsIDQxLCAyMiwgCi0gICAgMjUzLCAxOSwgMjMzLCA5OSwgMjQwLCAxMTcsIDIsIDI0NiwgMTU3LCAyNTMsIDg0LCAyMzcsIDExOSwgMjU0LCAxOTgsIDY3LCAKLSAgICAyMzMsIDc4LCA0MiwgMjIsIDI1MywgMTksIDIzMywgOTksIDI0MCwgMTE3LCAyLCAyNDYsIDE1NywgMjUzLCA4NCwgMjM3LCAKLSAgICAxMTksIDI1NCwgMTk4LCA2NywgMjMzLCA3OCwgNDEsIDIyLCAyNDAsIDE1MiwgMjMzLCA5OSwgMjQwLCAxMTcsIDIsIDI0NiwgCi0gICAgMTU3LCAyNTMsIDg0LCAyMzcsIDExOSwgMjU0LCAxOTgsIDY3LCAyMzMsIDc4LCA0MiwgMjIsIDI0MCwgMTUyLCAyMDAsIAotICAgIDI0MCwgMTk1LCAyNDgsIDE1NSwgMjQwLCAxOTUsIDI1MywgMTMzLCAyLCAyMzMsIDk1LCAyNDAsIDE5NSwgMjUzLCAxMzMsIAotICAgIDIsIDMsIDIzNywgNDAsIDQ2LCAyNDAsIDE5NSwgMjUzLCAxMzMsIDIsIDQxLCA2NywgNDYsIDI0MCwgMTk1LCAyNTMsIDEzMywgCi0gICAgMiwgNDIsIDY3LCA0NiwgMjM3LCA0MCwgMiwgMTY5LCAxMjUsIDMzLCA2MSwgMTI1LCAzMywgMjMyLCAyLCAzMywgMjM1LCAKLSAgICAzNywgMjMzLCAxMDQsIDMzLCAyMjcsIDE0NiwgMjM3LCA0MCwgMjM1LCAxMTksIDI1NCwgMjA1LCAxNjksIDI1MiwgMjE5LCAKLSAgICAyMiwgMjUyLCAyMjgsIDEzMiwgMjM1LCAxMTksIDI1NCwgMjA1LCA2MSwgMTI1LCAyMzcsIDQwLCAyLCAyMjksIDE1MSwgCi0gICAgMjU0LCAxODQsIDMzLCAyMjIsIDIyNywgMjMzLCAxMzAsIDUzLCA5OSwgNjcsIDIzNSwgNDIsIDIzNSwgMjAsIDMzLCA2MywgCi0gICAgMjM1LCA0NSwgMzMsIDIzNSwgNDUsIDMzLCAyMzAsIDEyOCwgMzMsIDIyNywgMTgzLCAyMzcsIDQwLCAyLCAzLCAyMzcsIDQwLCAKLSAgICAxODAsIDI1MiwgMjMwLCAyMzcsIDQxLCAyMzcsIDQwLCAyLCAxMzUsIDE2OSwgMjM2LCAyNDQsIDE4MCwgMjUyLCAyMzAsIAotICAgIDIzNywgNDEsIDIzNSwgNTEsIDIzNywgMTE1LCAyMzMsIDc0LCAyMzcsIDg0LCAyMzUsIDUxLCAyMzUsIDg0LCAyMzMsIDc0LCAKLSAgICAyMzcsIDg0LCAyMzUsIDUxLCAyMzEsIDE5OCwgMjM1LCA1MSwgMywgMjM1LCAyMCwgMjM1LCA1MSwgMjM1LCAyNywgMTM1LCAKLSAgICAyMzcsIDE4NCwgMjM0LCAyMjksIDIzMywgODAsIDIsIDU2LCA0NiwgMjMzLCA4MCwgMiwgMjMxLCAxOTcsIDI1NSwgNTksIAotICAgIDI1NCwgMTk4LCAyMzEsIDE5MywgMjMzLCA4MCwgMiwgMjM4LCA0NiwgMjU0LCAyMTcsIDIzNSwgMTEwLCA0MSwgMjMzLCA4MCwgCi0gICAgNjQsIDQyLCAyMzEsIDE5MywgNDIsIDIzMywgODAsIDIzNywgOTQsIDYxLCAxMjUsIDYxLCAyNTIsIDIxOSwgMjM3LCA5NCwgCi0gICAgNDEsIDIzMSwgMTkzLCAyMzcsIDIzMywgMiwgNDIsIDEzMiwgMjM3LCA0NSwgMjM3LCAyMzMsIDIsIDQxLCAxMzIsIDIzNywgCi0gICAgNDUsIDg2LCAyMzUsIDE1NCwgMjQsIDIsIDQyLCAxMzIsIDIzNywgNDUsIDI0LCAyLCA0MSwgMTMyLCAyMzcsIDQ1LCA2MywgCi0gICAgMjMwLCAxNjcsIDg2LCAyMzAsIDE2NywgNDIsIDIzNywgMTkzLCAyMzcsIDE1NSwgNDEsIDIzNywgMTkzLCAyMzcsIDE1NSwgCi0gICAgNDIsIDQ3LCAyMzcsIDE5MywgMjM3LCAxNTUsIDQxLCA0NywgMjM3LCAxOTMsIDIzNywgMTU1LCAyMzEsIDgzLCAyMzEsIAotICAgIDI1MiwgMjU0LCAxNTksIDEwNywgMjMxLCAyNTIsIDIzNCwgMTI5LCAyMzUsIDE5NCwgMiwgNjEsIDEyNSwgMjI5LCAxNSwgCi0gICAgMjMyLCAwLCAzNywgMiwgMjMyLCAxMDIsIDIzNCwgMTc5LCAyMzIsIDIwOCwgMjU0LCAyOSwgMjM2LCAyMjksIDIzMywgMTAxLCAKLSAgICAyMzcsIDUxLCA1LCAyMiwgMjM1LCAyOSwgMjMyLCAyLCAyMzcsIDUxLCA1LCAyMiwgMjM1LCAyOSwgMjMzLCAxMzIsIDIsIAotICAgIDI0MCwgMTI4LCA0NiwgMjMxLCAyMzksIDE4MCwgMjIsIDIzNSwgMjksIDIzMiwgMiwgMjM4LCAyNTAsIDI0MCwgMjAsIDIyNywgCi0gICAgMTgxLCAyMjcsIDE4OSwgMjMzLCA4MCwgMiwgNDIsIDEzMiwgMjM3LCA0NSwgMjI3LCAxODksIDIzMywgODAsIDIsIDQxLCAKLSAgICAxMzIsIDIzNywgNDUsIDg2LCAyMzUsIDQxLCAyLCAxMDMsIDU4LCA4NiwgMjMzLCAxMjMsIDYzLCAyMzcsIDQwLCAyLCAxMDMsIAotICAgIDU4LCA4NiwgMjM3LCA0MCwgMiwgMTAzLCA1OCwgMjI4LCAxODUsIDYzLCAyMzUsIDI3LCAyMjgsIDE4NSwgODYsIDIzNSwgCi0gICAgMjcsIDIyOCwgMTg1LCA2MywgMjMzLCA5MCwgMjI4LCAxODUsIDg2LCAyMzMsIDkwLCAyMjgsIDE4NSwgNjMsIDIzNSwgMjAsIAotICAgIDIyOCwgMTg1LCA4NiwgMjM1LCAyMCwgMjI4LCAyLCAyMzUsIDM3LCAyMzUsIDU0LCAyMzEsIDE5MiwgMjM1LCA1NCwgMiwgCi0gICAgMjMzLCA5NSwgMjM1LCAzNywgMjM1LCA1NCwgMiwgMTY5LCA4MiwgMjUzLCA0NywgMjMzLCAxMDQsIDI1MywgNDcsIDIzNSwgCi0gICAgMzcsIDIzMywgMTA0LCA0NywgMjQwLCAxODAsIDIzNywgNDksIDI0MCwgMTgwLCAyMjcsIDE4NSwgMjM3LCAxNTMsIDI0MCwgCi0gICAgMTE3LCAxMDQsIDIyNywgMTMzLCAyMzcsIDE1MywgMjQwLCAxMTcsIDEwNCwgMjQ1LCAyNTQsIDI0NCwgMTQ3LCAyNDAsIAotICAgIDE1NCwgMzMsIDU2LCAyMzEsIDE5MiwgMjQwLCAxNTQsIDMzLCA3OSwgMjMxLCAxOTIsIDI0MCwgMTU0LCAzMywgMjQsIDIzMSwgCi0gICAgMTkyLCAyNDAsIDE1NCwgMjQwLCAxODIsIDIzMywgMTE4LCAyLCAyNDYsIDE2NCwgMjQwLCAxNTQsIDI0MCwgMTgyLCAyMzMsIAotICAgIDExOCwgMiwgMjQwLCAxODAsIDI0MCwgMTU0LCAzNywgMjI4LCAxODMsIDIzMSwgMTkyLCAyNDAsIDE1NCwgMzcsIDI0MCwgCi0gICAgMTgyLCAyMzEsIDE5MiwgMTM1LCAyMzUsIDI2LCAyMiwgMjMxLCAxOTIsIDEzNSwgMjM1LCAyNiwgMTQ1LCAyMzEsIDE5MiwgCi0gICAgMjQwLCAxNTQsIDI0LCAyMzEsIDE5MiwgMjM5LCAxMTgsIDEzNSwgMjQ3LCAyMSwgMjMyLCAxMCwgMiwgMjMxLCAyMDgsIAotICAgIDIzMSwgMjEyLCAyMzMsIDk4LCAyMzEsIDE5MiwgMjM4LCAyMjAsIDI0OCwgMTI4LCAyMzEsIDIwOCwgMjMzLCA5OCwgMiwgCi0gICAgNDcsIDgyLCAyMzMsIDk4LCAyMzYsIDIsIDIsIDIzNywgODQsIDIyOSwgMjM2LCAyMzIsIDE5NiwgMjI3LCAxODQsIDIyOSwgCi0gICAgMzEsIDI0NiwgMTY3LCAyMjksIDE4NCwgMiwgMjI5LCAyMTEsIDI0OCwgMTI5LCAyMzcsIDE5NCwgMjQxLCA2MywgMjQ2LCAKLSAgICAxNjcsIDIyOSwgMTg0LCAyLCAyMjgsIDIwNiwgMjQ4LCAxMjksIDIzNywgMTk0LCAyNDEsIDYzLCAyNDYsIDE2NywgMjI5LCAKLSAgICAxODQsIDE5MCwgMjMyLCAyMDcsIDI1MiwgMjMwLCAyNDEsIDYzLCAyMzMsIDk4LCAyMzcsIDE5NCwgMTAyLCAyNDAsIDE0MywgCi0gICAgMjMxLCAxOTIsIDIzMSwgMTI4LCAyMzMsIDk4LCAyMzEsIDE5MiwgMjMzLCA5OCwgMiwgMTE3LCA2NywgMiwgODgsIDIzMywgCi0gICAgOTgsIDIsIDI0LCA1MywgMjMzLCA5OCwgMiwgMjI3LCAxODYsIDIzMywgOTgsIDIsIDIzNywgMTE3LCAyMzMsIDk4LCAyLCAKLSAgICAyMzMsIDk1LCAyMzMsIDk4LCAyLCAyMzEsIDE5NywgMjQwLCAyNTMsIDI0MCwgMTg1LCA0MiwgMjMzLCA4MCwgMjMxLCAxOTIsIAotICAgIDI1NSwgNTYsIDE1MCwgMjM3LCAyMTIsIDIyOCwgMjEyLCAyNTUsIDU2LCAxNTAsIDIzNywgMjEyLCAyMzYsIDE4OCwgMjU1LCAKLSAgICA1NiwgMTUwLCAyMzcsIDIxMiwgMjMwLCA5MSwgNzksIDUsIDIsIDMsIDIzNywgNDAsIDQ2LCA3OSwgNSwgMiwgMjMwLCAxMjUsIAotICAgIDIzNywgNDgsIDQ2LCA3OSwgNSwgMiwgMjQwLCAxMjgsIDQ2LCA3OSwgNSwgMiwgNTYsIDUxLCA3OSwgNSwgMiwgMjQwLCAKLSAgICAxMjgsIDUxLCA3OSwgNSwgMiwgMjMxLCAxOTUsIDExMywgNzksIDUsIDIsIDg2LCAyMzEsIDE5MywgMjQwLCAxNzIsIDUsIDIsIAotICAgIDI0MCwgMTYyLCA0NiwgMjQwLCAxNzIsIDUsIDIsIDU2LCA1MSwgMjQwLCAxNzIsIDUsIDIsIDIzNSwgODQsIDI0MCwgMTY5LCAKLSAgICAyNDAsIDE3MiwgNSwgMiwgMjM3LCAxMTUsIDI0MCwgMTY5LCA3OSwgNSwgMjU0LCAxOTgsIDQyLCAxMzIsIDIzNSwgMjAsIAotICAgIDc5LCA1LCAyNTQsIDE5OCwgNDEsIDEzMiwgMjM1LCAyMCwgMjQwLCA3NCwgMTQ1LCAyNDAsIDIyMSwgMjMzLCAxMDEsIDIyNywgCi0gICAgMTM0LCA1LCAyLCA1NiwgNDYsIDIyNywgMTM0LCA1LCAyLCAyMzEsIDE5NywgMjMwLCAxNDcsIDIzNiwgMTkzLCAyLCAyMzcsIAotICAgIDU5LCAyMzYsIDMzLCAyNDEsIDI0NywgMjMzLCAxMDEsIDIyNywgMTM0LCA1LCAyNTQsIDE5OCwgNDIsIDEzMiwgMjM1LCAyMCwgCi0gICAgMjI3LCAxMzQsIDUsIDI1NCwgMTk4LCA0MSwgMTMyLCAyMzUsIDIwLCAzMywgMjI3LCAxMzQsIDUsIDIsIDIzMCwgMTI1LCAKLSAgICAyMzUsIDI0LCAyMjcsIDEzNCwgNSwgMjU0LCAxOTgsIDQ3LCAyMzUsIDIwLCAzMywgMjMzLCAxMzAsIDUzLCA3OSwgNSwgCi0gICAgMjU0LCAxOTgsIDIzMSwgMTkzLCAyNDAsIDE3MiwgNSwgMjU0LCAxOTgsIDIzMSwgMTkzLCAyMjcsIDEzNCwgNSwgMjU0LCAKLSAgICAxOTgsIDIzMSwgMTkzLCAyMzMsIDIwOSwgMjMzLCAxMDEsIDIzMywgMTQsIDIzMywgMjA5LCAyMzMsIDEwMSwgMjU1LCA1NiwgCi0gICAgMTUwLCAyMzEsIDEzMiwgMjI4LCAyMTIsIDIyOCwgMjI0LCAxNDUsIDIzMCwgMTc4LCAyMjgsIDE4MywgMiwgMjQ2LCAxNjQsIAotICAgIDI0MCwgMTgyLCAyLCAyNDAsIDE3MiwgNTMsIDI0MCwgMTgyLCAyLCAyMzMsIDk1LCAyMjgsIDE4MywgMiwgMjMzLCA5NSwgCi0gICAgMjI4LCAxODMsIDIsIDIzNSwgMjYsIDI0NiwgMjMwLCAyNDAsIDE4MiwgMiwgMjM1LCAyNiwgMjUzLCA4MSwgMjQwLCAxODIsIAotICAgIDY0LCAyMjcsIDE4NiwgMjI4LCAxODMsIDY0LCAyMzcsIDExNywgMjQwLCAxODIsIDY0LCAyNTIsIDIxOSwgNjQsIDIyNywgCi0gICAgMTg2LCAyMjgsIDE4MywgNjQsIDI1MiwgMjE5LCA2NCwgMjM3LCAxMTcsIDI0MCwgMTgyLCAyMzcsIDk0LCAyMiwgMjM3LCAKLSAgICAxODQsIDIsIDIzNywgMTE3LCAyMjgsIDE4MywgMjM3LCA5NCwgMjIsIDIzNywgMTg0LCAyLCAyMjcsIDE4NiwgMjM3LCA1OCwgCi0gICAgMjQwLCAxODIsIDIsIDIzNSwgMjA3LCAyMzcsIDU4LCAyMjgsIDE4MywgMiwgMjM1LCAyMDcsIDQ3LCAzNywgMjI3LCAxODYsIAotICAgIDQ3LCAzNywgMjM3LCAxMTcsIDIzNywgNTgsIDI0MCwgMTgyLCAyLCAyMzgsIDQ2LCAyMiwgMjQxLCAyNDcsIDIzMywgMTAxLCAKLSAgICAyMzUsIDI2LCAyMiwgMiwgNTYsIDQ2LCAyMzUsIDI2LCAxNDUsIDIsIDU2LCA0NiwgNDcsIDIzNSwgMjYsIDI0NiwgMjMwLCAKLSAgICA0NywgMjM1LCAyNiwgMjUzLCA4MSwgMTM1LCAyMjgsIDIxNCwgMjM1LCAyNiwgMjQ2LCAyMzAsIDEzNSwgMjI4LCAyMTQsIAotICAgIDIzNSwgMjYsIDI1MywgODEsIDIzNSwgMjExLCAyNDAsIDE4NSwgMjUzLCA4MSwgMjM1LCAyMTEsIDI0MCwgMTg1LCAyNDYsIAotICAgIDIzMCwgMjM1LCAyNiwgMTQ1LCAyMjksIDIwNSwgMjM1LCAyNiwgMjQ2LCAyMzAsIDIzNSwgMjYsIDIyLCAyLCAyMzcsIDQ0LCAKLSAgICAyNDAsIDIxNCwgMjM1LCAyNiwgMTQ1LCAyLCAyMzcsIDQ0LCAyNDAsIDIxNCwgMjM1LCAyNiwgMjIsIDIsIDE2OSwgMjQwLCAKLSAgICAxNTEsIDIzNSwgMjYsIDE0NSwgMiwgMTY5LCAyNDAsIDE1MSwgMjM1LCAyNiwgMjIsIDIsIDQ3LCAyMzMsIDk1LCAyMzUsIAotICAgIDI2LCAyMiwgMiwgMjMxLCAxOTcsIDIzNSwgMjYsIDIyLCAyLCA0NywgMjMxLCAxOTcsIDMsIDI1NCwgMTY3LCAyLCAyMzEsIAotICAgIDE5NywgMjM1LCAyNiwgMTQ1LCAyLCA0NywgMjMzLCA5NSwgMjM1LCAyNiwgMTQ1LCAyLCA0NywgMjMxLCAxOTcsIDI1NSwgCi0gICAgNTYsIDE1MCwgMjM4LCAxODksIDIyMywgNTcsIDI1NSwgNTYsIDE1MCwgMjQ1LCAxMTMsIDIyMywgNTcsIDIzNywgNTEsIDUsIAotICAgIDIsIDU2LCA1MSwgMjMxLCAyMzksIDIsIDU2LCA0NiwgMjM3LCA0OSwgMTY5LCAyNTIsIDIxOSwgMiwgNDcsIDYxLCA4MiwgCi0gICAgMjM3LCA0OSwgMTY5LCAyNTIsIDIxOSwgMiwgMjM3LCA0OSwgNjEsIDgyLCAyNDAsIDEyOCwgMjMzLCAxMTgsIDIsIDU2LCAKLSAgICA0NiwgMjQwLCAxMjgsIDIzMywgMTE4LCAyLCAyMzcsIDExNSwgMjQwLCAxNjksIDIzNSwgNTksIDI0MCwgMTcyLCAyMzQsIAotICAgIDIyMSwgMjMyLCAxMDAsIDIsIDU2LCA0NiwgMjM3LCA1MSwgMiwgMjMxLCAxOTgsIDIzNywgNzgsIDEwNSwgMTgwLCAyLCAKLSAgICAyMzAsIDEyNSwgMjM1LCAyNCwgMjI3LCAxODcsIDEwNSwgMTQ1LCAxMDUsIDk2LCAyMzcsIDUxLCA1LCA2NCwgNzksIDUzLCAKLSAgICA3OSwgNSwgNjQsIDIzNywgNTEsIDUzLCAyMzcsIDUxLCA1LCA2NCwgMjQwLCAxMjgsIDIzMSwgMTkyLCA0NywgMjQwLCAxOTQsIAotICAgIDIzNywgODEsIDEzNSwgMjI5LCAxOTYsIDIzNywgNTEsIDIzOCwgNTgsIDE1MiwgMjI5LCAxOTYsIDIzNywgNTEsIDIzOCwgCi0gICAgNTgsIDIzNywgNTEsIDUsIDIsIDEzNSwgMTk3LCA2NCwgMjIsIDEzNSwgMTk3LCA1MSwgMjMwLCAxMzAsIDIsIDI0NiwgMTYwLCAKLSAgICAxOTcsIDQ2LCAyMzEsIDE5MCwgMiwgMjM3LCA0MCwgMjM1LCA1NywgMjI4LCAxNzUsIDIsIDIzNywgNDAsIDIzNSwgNTcsIAotICAgIDIzMSwgMTkwLCAyLCAyMzMsIDgyLCAxNjUsIDQ2LCAyMjgsIDE3NSwgMiwgMjMzLCA4MiwgMTY1LCA0NiwgMjMxLCAxOTAsIAotICAgIDE0NSwgMjM1LCAyOSwgMTA1LCA5NiwgMjI4LCAxNzUsIDE0NSwgMjM1LCAyOSwgMTA1LCA5NiwgMjMxLCAxOTAsIDE0NSwgCi0gICAgMjM1LCAyOSwgMTA1LCAxODAsIDIsIDU2LCAyMzUsIDU3LCAyMjgsIDE3NSwgMTQ1LCAyMzUsIDI5LCAxMDUsIDE4MCwgMiwgCi0gICAgNTYsIDIzNSwgNTcsIDIzMSwgMTkwLCAxNDUsIDIzNSwgMjksIDEwNSwgMTgwLCAyLCA1NiwgNDYsIDIyOCwgMTc1LCAxNDUsIAotICAgIDIzNSwgMjksIDEwNSwgMTgwLCAyLCA1NiwgNDYsIDIzMSwgMTkwLCAxNDUsIDIzNSwgMjksIDEwNSwgMTgwLCAyLCA1NiwgCi0gICAgNjQsIDIzNywgNDEsIDIyOCwgMTc1LCAxNDUsIDIzNSwgMjksIDEwNSwgMTgwLCAyLCA1NiwgNjQsIDI0MCwgMTMyLCAyMzEsIAotICAgIDE5MCwgMTQ1LCAyMjgsIDE4OCwgMjI4LCAxNzUsIDE0NSwgMjI4LCAxODgsIDIzMSwgMTkwLCAyMiwgMjI5LCAxNzUsIDE5MCwgCi0gICAgMTA1LCA5NiwgMjI4LCAxNzUsIDIyLCAyMjksIDE3NSwgMTkwLCAxMDUsIDk2LCAyMzEsIDE5MCwgMjIsIDE5MCwgMjI4LCAKLSAgICAxODgsIDIyOCwgMTc1LCAyMiwgMTkwLCAyMjgsIDE4OCwgMjMxLCAxOTAsIDY0LCAyMjksIDE3MCwgMTA1LCA2NCwgMjI3LCAKLSAgICAxODMsIDIyOCwgMTc1LCA2NCwgMjI5LCAxNzAsIDEwNSwgNjQsIDIzMCwgMTI4LCAyMzEsIDE5MCwgNjQsIDIzNSwgNTksIAotICAgIDE0NSwgMjM3LCA4MSwgMjI4LCAxNzUsIDY0LCAyMzUsIDU5LCAxNDUsIDIzNywgODEsIDIzMSwgMTkwLCA2NCwgMjM1LCA1OSwgCi0gICAgNjQsIDIyNywgMTgzLCAyMjgsIDE3NSwgNjQsIDIzNSwgNTksIDY0LCAyMzAsIDEyOCwgMjMxLCAxOTAsIDY0LCAyMjgsIAotICAgIDE3NSwgNjQsIDIyOSwgMTcwLCAyMzcsIDgxLCAyMjgsIDE3NSwgNjQsIDIzMSwgMTkwLCA2NCwgMjI5LCAxNzAsIDIzNywgCi0gICAgODEsIDIzMSwgMTkwLCA2NCwgMjM1LCAyOSwgMTA1LCA2NCwgMjI4LCAxNzUsIDY0LCAyMzUsIDI5LCAyMzcsIDgxLCAyMjgsIAotICAgIDE3NSwgNjQsIDIzNSwgMjksIDEwNSwgNjQsIDIzMSwgMTkwLCA2NCwgMjM1LCAyOSwgMjM3LCA4MSwgMjM1LCAyOSwgMTA1LCAKLSAgICAxODAsIDE0NSwgMjMwLCAxMjgsIDIzNSwgMjksIDEwNSwgMTgwLCAxNDUsIDIyNywgMTgzLCAyMzUsIDI5LCAxMDUsIDE4MCwgCi0gICAgMTQ1LCAyMzEsIDE5MCwgMiwgNTYsIDIzNSwgNTcsIDIzNSwgMjksIDEwNSwgMTgwLCAxNDUsIDIyOCwgMTc1LCAyLCA1NiwgCi0gICAgMjM1LCA1NywgMjI5LCAxNzAsIDEwNSwgMTgwLCAxNDUsIDIzMCwgMTI4LCAyMjksIDE3MCwgMTA1LCAxODAsIDE0NSwgMjI3LCAKLSAgICAxODMsIDIyOSwgMTcwLCAyMzUsIDI5LCAxMDUsIDE4MCwgMTQ1LCAyMzAsIDEyOCwgMjI5LCAxNzAsIDIzNSwgMjksIDEwNSwgCi0gICAgMTgwLCAxNDUsIDIyNywgMTgzLCAyMzUsIDU5LCAxNDUsIDIzMCwgMTI4LCAyMzUsIDU5LCAxNDUsIDIyNywgMTgzLCAyMzUsIAotICAgIDU5LCA2NCwgMjMxLCAxOTAsIDY0LCAyMzcsIDUxLCA1MywgMjM1LCA1OSwgNjQsIDIyOCwgMTc1LCA2NCwgMjM3LCA1MSwgCi0gICAgNTMsIDQ3LCAyMzcsIDE2MiwgMjMwLCAxMjgsIDQ3LCAyMzcsIDE2MiwgMjI3LCAxODMsIDQ3LCAyMzcsIDE2MiwgMjMxLCAKLSAgICAxOTAsIDIsIDIzMSwgMTk3LCAyMjgsIDE3NSwgMjI5LCAyMDUsIDIzMCwgMTI4LCAyMjgsIDE3NSwgMjM3LCA5NCwgMjMwLCAKLSAgICAxMjgsIDIzMSwgMTkwLCAyMzcsIDU4LCAyNTQsIDIwNSwgMjM3LCAyMzYsIDIyOCwgMTc1LCAyMzcsIDU4LCAyNTQsIDIwNSwgCi0gICAgMjM3LCAyMzYsIDIzMSwgMTkwLCAyMzcsIDU4LCAyNTQsIDIwNSwgMjQxLCAxMTIsIDY0LCAyMzUsIDI5LCAyMzcsIDgxLCAKLSAgICAyMjgsIDE3NSwgMjM3LCA1OCwgMjU0LCAyMDUsIDI0MSwgMTEyLCA2NCwgMjM1LCAyOSwgMjM3LCA4MSwgMjM1LCAyMTIsIAotICAgIDI0MSwgNzgsIDIzOCwgMTgsIDI0MSwgNzgsIDIzNSwgMjEyLCAyNDcsIDIxMiwgMTQ1LCAxMDUsIDk2LCAyMzgsIDE4LCAKLSAgICAyNDcsIDIxMiwgMTQ1LCAxMDUsIDk2LCAyMzcsIDUxLCA1LCAyLCAyNDIsIDIxOSwgNDYsIDIzMywgMTA2LCA2NCwgMjI5LCAKLSAgICAxNzUsIDIzNywgNTEsIDUzLCAyMzMsIDEwNywgNjQsIDIyOSwgMTc1LCAyMzcsIDUxLCA1MywgMjMzLCAxMDYsIDY0LCAyMjksIAotICAgIDE3NSwgMTkwLCAxMDUsIDk2LCAyMzMsIDEwNywgNjQsIDIyOSwgMTc1LCAxOTAsIDEwNSwgOTYsIDIzMywgMTA2LCA2NCwgCi0gICAgMjM3LCA1MSwgNTMsIDIzMywgMTA3LCA2NCwgMjM3LCA1MSwgNTMsIDIzMywgMTA2LCA2NCwgMTkwLCAxMDUsIDk2LCAyMzMsIAotICAgIDEwNywgNjQsIDE5MCwgMTA1LCA5NiwgMjMzLCAxMDYsIDY0LCAyMzcsIDc4LCAxMDUsIDk2LCAyMzMsIDEwNywgNjQsIDIzNywgCi0gICAgNzgsIDEwNSwgOTYsIDIzMywgMTA2LCA2NCwgMTkwLCAyMzcsIDc4LCAxMDUsIDk2LCAyMzMsIDEwNywgNjQsIDE5MCwgMjM3LCAKLSAgICA3OCwgMTA1LCA5NiwgNDcsIDIzMiwgNCwgNDcsIDIzMiwgOSwgMjM3LCA3NiwgMiwgMjQ2LCAxNjQsIDIzMywgODMsIDIsIAotICAgIDI0NiwgMTY0LCAyMzcsIDc2LCAyLCA3OSwgNSwgNTEsIDIzMywgODMsIDIsIDc5LCA1LCA1MSwgMjM3LCA3NiwgMiwgMjI3LCAKLSAgICAxMzQsIDUsIDUxLCAyMzMsIDgzLCAyLCAyMjcsIDEzNCwgNSwgNTEsIDIzNywgNzYsIDEwNiwgMTQ1LCAxMDUsIDE4MCwgMiwgCi0gICAgNTYsIDQ2LCAyMzMsIDgzLCAxMDYsIDE0NSwgMTA1LCAxODAsIDIsIDU2LCA0NiwgMjM3LCA3NiwgMTA2LCA2NCwgMjM3LCAKLSAgICA1MSwgNTMsIDIzMywgODMsIDEwNiwgNjQsIDIzNywgNTEsIDUzLCAyMzcsIDc2LCAxMDYsIDY0LCAyNDAsIDEyOCwgMjMxLCAKLSAgICAxOTIsIDIzMywgODMsIDEwNiwgNjQsIDI0MCwgMTI4LCAyMzEsIDE5MiwgMjM3LCA3NiwgMTA2LCA2NCwgMjM3LCA3OCwgCi0gICAgMTA1LCA5NiwgMjMzLCA4MywgMTA2LCA2NCwgMjM3LCA3OCwgMTA1LCA5NiwgMjM3LCA3NiwgMTA2LCA2NCwgMTkwLCAxMDUsIAotICAgIDk2LCAyMzMsIDgzLCAxMDYsIDY0LCAxOTAsIDEwNSwgOTYsIDM3LCA0MiwgMjQ2LCAxNTcsIDc3LCAyMzEsIDE5MiwgMzcsIAotICAgIDQxLCAyNDYsIDE1NywgNzcsIDIzMSwgMTkyLCAyMzcsIDU4LCAyMzUsIDYxLCAyMzcsIDU4LCAyMzEsIDIyOCwgMjM3LCA1OCwgCi0gICAgMjM3LCA3NiwgMTQ1LCAxMDUsIDk2LCAyMzcsIDU4LCAyMzMsIDgzLCAxNDUsIDEwNSwgOTYsIDIzNywgNzYsIDY0LCAyMzEsIAotICAgIDIyOCwgMjMzLCA4MywgNjQsIDIzNSwgNjEsIDIzNywgNzYsIDY0LCAyMzUsIDYxLCAyMzMsIDgzLCA2NCwgMjMxLCAyMjgsIAotICAgIDIzMywgODMsIDIzNywgOTQsIDIzNSwgNjEsIDIzMywgODMsIDIzNywgOTQsIDIyLCAyMzcsIDE4NCwgMjU0LCAyMDUsIDI0NiwgCi0gICAgMTg3LCAyLCAyMzUsIDYxLCAyMzUsIDQ0LCAxMDYsIDIzNSwgNzEsIDIzMCwgMTM0LCAyMzIsIDI1MCwgMiwgMjU0LCAxNTcsIAotICAgIDI0NywgMjE0LCAyMzAsIDEyMCwgMjI3LCAxODYsIDIzNCwgMTA2LCAyMzAsIDgzLCAyNDAsIDEyNSwgNDIsIDI0MCwgMTQ5LCAKLSAgICAyNDAsIDEyNSwgMTAzLCAyNDAsIDE0OSwgMjQwLCAxMjUsIDk5LCAyNDAsIDE0OSwgMjI4LCAxLCAyLCAxOTMsIDYxLCAyNTIsIAotICAgIDIxOSwgMjM3LCA0OSwgNDEsIDIzMCwgMTQxLCA0NywgNjEsIDI1MiwgMjE5LCA0MiwgMjMwLCAxNDEsIDYxLCAyNTIsIDIxOSwgCi0gICAgNDcsIDQyLCAyMzAsIDE0MSwgNDcsIDYxLCAyNTIsIDIxOSwgNDcsIDQyLCAyMzAsIDE0MSwgMTgyLCAyNDYsIDE4NywgMjQ2LCAKLSAgICAxNzIsIDQyLCAyMzksIDEwMywgMTA2LCA0NywgMjMxLCAyMTAsIDI0MCwgMTI1LCAxMDMsIDI0NiwgMjE1LCAyLCAyMzMsIAotICAgIDk1LCAyNDAsIDEyNSwgOTksIDI0NiwgMjE1LCAyLCAyMzEsIDE5NywgMjQwLCAxMjUsIDk5LCAyNDYsIDIxNSwgNjQsIDI0MCwgCi0gICAgMTI1LCAxMDMsIDI0MCwgMTQ5LCA0NywgMTAzLCAyNDAsIDE0OSwgNDcsIDk5LCAyNDAsIDE0OSwgNDcsIDE5NSwgMTkwLCAKLSAgICA1MywgMjAwLCA0NywgMTk1LCAxOTAsIDUzLCAyNDYsIDIxOCwgMTkwLCAyMzgsIDE4OCwgMiwgMjAwLCAyMzQsIDE2NiwgCi0gICAgMjM3LCA4NCwgNjEsIDI0NiwgMTY3LCAyLCAyMzcsIDQwLCA0NiwgNjEsIDI0NiwgMTY3LCAyLCAyMzcsIDQwLCA1MSwgMTAzLCAKLSAgICAyNDYsIDIxNSwgMiwgMjM3LCA0MCwgNTEsIDIzMywgMTMyLCAyLCAxNjksIDgyLCAyMzMsIDEzMiwgMiwgMjQwLCAxMjgsIAotICAgIDIzMSwgMTkyLCAyMzcsIDQ5LCA2MSwgMjUyLCAyMTksIDIzNywgMjMxLCAyMzEsIDI0NCwgMjM3LCA0OSwgNjEsIDI1MiwgCi0gICAgMjE5LCAyLCAxNjksIDgyLCAyMzcsIDQ5LCAyNDAsIDE5NCwgMjMxLCAxOTIsIDIzNywgNDksIDIzNywgMTYyLCAyMzAsIAotICAgIDEyOCwgMjM3LCA0OSwgMjM3LCAxNjIsIDIyNywgMTgzLCAyMjksIDE3MCwgMjM1LCAyOSwgMjMxLCAxOTAsIDE0NSwgMTA1LCAKLSAgICA5NiwgMjI5LCAxNzAsIDIzNSwgMjksIDIyOCwgMTc1LCAxNDUsIDEwNSwgOTYsIDIzNywgNDksIDIzNSwgNTQsIDIzNywgCi0gICAgMjMxLCAyMzEsIDI0NCwgMjQwLCAxODUsIDIzNywgNDksIDYxLCAyNTIsIDIxOSwgMjMxLCAxOTIsIDQ3LCAyMzUsIDU0LCAKLSAgICAyMzEsIDE5MiwgNjMsIDYxLCAxMjUsIDI0MCwgMTU0LCA2MywgNjEsIDEyNSwgMjQwLCAxMzQsIDI0NiwgMTcwLCA2MywgNTgsIAotICAgIDI0MCwgMTM0LCAyNDYsIDE4NCwgNjMsIDU4LCAyNDAsIDE0MSwgMjQ2LCAxNzAsIDYzLCA1OCwgMjQwLCAxNDEsIDI0NiwgCi0gICAgMTg0LCA2MywgNTgsIDQyLCA0MSwgNjMsIDU4LCAxMTcsIDg2LCA1OCwgMjM1LCAxOCwgODYsIDU4LCAyMzEsIDE5MSwgODYsIAotICAgIDU4LCAyNDAsIDEzNCwgMjQ2LCAxNzAsIDg2LCA1OCwgMjQwLCAxMzQsIDI0NiwgMTg0LCA4NiwgNTgsIDI0MCwgMTQxLCAKLSAgICAyNDYsIDE3MCwgODYsIDU4LCAyNDAsIDE0MSwgMjQ2LCAxODQsIDg2LCA1OCwgNDIsIDQxLCA4NiwgNTgsIDk5LCAxMDMsIAotICAgIDg2LCA1OCwgODEsIDY3LCAyLCAyNTMsIDkzLCAyMzAsIDEzNCwgODEsIDY3LCAyLCAyNTMsIDkzLCAyMzMsIDEzOSwgMTE3LCAKLSAgICA2NywgMiwgMjUzLCA5MywgMjMwLCAxMzQsIDExNywgNjcsIDIsIDI1MywgOTMsIDIzMywgMTM5LCAzNywgMiwgMjUyLCAyMjgsIAotICAgIDEzMiwgMjM3LCA0NSwgMzcsIDIsIDIzNywgNTksIDEzMiwgMjM3LCA0NSwgMzcsIDIsIDI0MCwgMTE2LCA0MSwgMjMzLCA3NCwgCi0gICAgMTMyLCAyMzcsIDQ1LCAzNywgMiwgMjAzLCA0MiwgMjMzLCA3NCwgMTMyLCAyMzcsIDQ1LCAyMzUsIDQxLCAyLCA0MiwgMTMyLCAKLSAgICAyMzcsIDQ1LCAyMzUsIDQxLCAyLCA0MSwgMTMyLCAyMzcsIDQ1LCAyMzUsIDQxLCAyLCAyNTIsIDIyOCwgMTMyLCAyMzcsIAotICAgIDQ1LCAyMzUsIDQxLCAyLCAyMzcsIDU5LCAxMzIsIDIzNywgNDUsIDIzNywgNTAsIDIzNSwgMjcsIDg2LCAyNDAsIDE4NSwgCi0gICAgMjM1LCAyNywgNjMsIDI0MCwgMTg1LCAyMzUsIDI3LCA4NiwgMjQ3LCAxMTQsIDMsIDIzNSwgMjcsIDYzLCAyNDcsIDExNCwgCi0gICAgMywgMjM1LCAyNywgODYsIDIzMSwgMjQzLCA2MywgMjMxLCAyNDMsIDYzLCAyMzMsIDE2NywgODYsIDIzMywgMTY3LCAxNjksIAotICAgIDg2LCAyMzMsIDE2NywgODYsIDI0MCwgMTg1LCAyMzUsIDIwLCA4NiwgMjM3LCA2MCwgMjMzLCA5MCwgNjMsIDIzNywgNjAsIAotICAgIDIzMywgOTAsIDg2LCAyMzcsIDYwLCAyMzMsIDEyMywgNjMsIDIzNywgNjAsIDIzMywgMTIzLCA4NiwgMywgMjMzLCA5MCwgCi0gICAgODYsIDMsIDIzMywgMTIzLCA2MywgMywgMjMzLCAxMjMsIDg2LCAxNjksIDIzMywgMTQ5LCA2MywgMTY5LCAyMzMsIDE0OSwgCi0gICAgODYsIDYxLCAyMzMsIDE0OSwgNjMsIDYxLCAyMzMsIDE0OSwgNDIsIDY3LCAyLCAzLCAyMzUsIDIwLCAxNTIsIDExNywgMjM1LCAKLSAgICA3MywgNDIsIDY3LCAyLCAzMywgMjQwLCAxODAsIDE4MiwgMTE3LCAyMzMsIDE1NiwgNTgsIDExNywgMjMwLCAxMzIsIDY3LCAKLSAgICAyLCA2MSwgODIsIDExNywgMjMwLCAxMzIsIDY3LCAyLCA0NywgNjEsIDgyLCAxMTcsIDIzMCwgMTMyLCA2NywgMjQ2LCAxNzIsIAotICAgIDEyNSwgMTE3LCAyMzAsIDEzMiwgMjM3LCA0OSwgMjQ2LCAxODcsIDU4LCAxMTcsIDY3LCAyLCAyMzcsIDUwLCAyNDAsIDIxNCwgCi0gICAgMTE3LCA2NywgMiwgMjQ2LCAyMzcsIDIsIDYxLCA4MiwgMTE3LCA2NywgMiwgMjQ2LCAyMzcsIDIsIDQ3LCA2MSwgODIsIAotICAgIDExNywgMjMwLCAxMzIsIDY3LCAyLCAyNDAsIDEzMywgMTE3LCAyMzAsIDEzMiwgNjcsIDIsIDI0NiwgMjM3LCAyLCA2MSwgCi0gICAgODIsIDExNywgMjMwLCAxMzIsIDY3LCAyLCAyNDYsIDIzNywgMiwgNDcsIDYxLCA4MiwgMTE3LCA2NywgMjM1LCA0MiwgMjU0LCAKLSAgICAxODQsIDI0NywgMjMsIDY3LCAyMzMsIDc4LCAyMzMsIDIwMSwgMjQwLCAxMzIsIDIzNywgNTEsIDUsIDY0LCAxMTcsIDU4LCAKLSAgICAyMzUsIDM3LCAyNDAsIDEyOCwgMjMzLCAxMTgsIDY0LCAxMTcsIDU4LCAxMTcsIDY3LCA2NCwgMjM1LCAzNywgMjM3LCA3OCwgCi0gICAgMTA1LCA5NiwgODEsIDY3LCAyMzUsIDQyLCAyMjcsIDE4MywgODEsIDY3LCAyMzUsIDQyLCAyMzEsIDIyOCwgMTE3LCAyMzEsIAotICAgIDIxMiwgNTgsIDgxLCAyMzEsIDIxMiwgNTgsIDIzNSwgMzcsIDI0MCwgMTI4LCAyMzMsIDExOCwgNjQsIDgxLCA1OCwgODEsIAotICAgIDY3LCA2NCwgMjM1LCAzNywgMjM3LCA3OCwgMTA1LCA5NiwgMjQwLCAxMjgsIDIzMywgMTE4LCA2NCwgMTE3LCA1OCwgMTE3LCAKLSAgICA2NywgNjQsIDIzNywgNzgsIDEwNSwgOTYsIDExNywgNjcsIDY0LCAyMzUsIDM3LCAyNDAsIDEyOCwgMjMxLCAxOTIsIDgxLCAKLSAgICA2NywgNjQsIDIzNSwgMzcsIDI0MCwgMTI4LCAyMzEsIDE5MiwgNjMsIDIzNywgNjAsIDI0MCwgMTM5LCA4NiwgMywgMjQwLCAKLSAgICAxMzksIDYzLCAzLCAyNDAsIDEzOSwgODYsIDIyNywgMTMzLCAyMzEsIDI0MywgNjMsIDIyNywgMTMzLCAyMzEsIDI0MywgCi0gICAgMTE1LCA2LCAxLCAyNDcsIDI0NiwgMTE1LCA2LCAxLCAyNDEsIDEwNiwgMTE1LCA2LCAxLCAyNDIsIDE3LCAxMTUsIDYsIDEsIAotICAgIDIzMywgMjA3LCAxMTUsIDYsIDEsIDIzNywgMjQzLCAxMTUsIDYsIDEsIDIzOCwgODIsIDExNSwgNiwgMSwgMjMzLCAyNTAsIAotICAgIDExNSwgNiwgMSwgMjM3LCAxODAsIDExNSwgNiwgMSwgMjM1LCAyMzUsIDExNSwgNiwgMSwgMjQwLCAyNTIsIDExNSwgNiwgMSwgCi0gICAgNTksIDI0MCwgMjUyLCAxMTUsIDYsIDEsIDc0LCAxMTUsIDYsIDEsIDIzNSwgMTY1LCAxMTUsIDYsIDEsIDI0MSwgMTcwLCAKLSAgICAxMTUsIDYsIDEsIDIzMywgMjE2LCAxMTUsIDYsIDEsIDIzMywgMTUzLCAxMTUsIDYsIDEsIDIzOCwgMjcsIDExNSwgNiwgMSwgCi0gICAgMjQ4LCAxMjUsIDExNSwgNiwgMSwgMjM1LCAyMDQsIDExNSwgNiwgMSwgMjM4LCA0MiwgMTE1LCA2LCAxLCAyMzgsIDYzLCAKLSAgICAxMTUsIDYsIDEsIDIzNSwgMjI5LCAxMTUsIDYsIDEsIDI0OCwgMTg3LCAxMTUsIDYsIDEsIDIzNywgMjUyLCAxMTUsIDYsIDEsIAotICAgIDI0MSwgMTU0LCAxMTUsIDYsIDEsIDI0OCwgMTI2LCAxMTUsIDYsIDEsIDI1MywgMCwgMTE1LCA2LCAxLCAyNDEsIDI0MSwgCi0gICAgMTE1LCA2LCAxLCAyNDcsIDU4LCAxMTUsIDYsIDEsIDIzNSwgMTU4LCAxMTUsIDYsIDEsIDI0NiwgMTY1LCAxMTUsIDYsIDEsIAotICAgIDI0MSwgMjQsIDExNSwgNiwgMSwgMjQyLCAzMCwgMTE1LCA2LCAxLCAyNDIsIDI5LCAxMTUsIDYsIDEsIDIzNSwgMjE2LCAKLSAgICAxNTQsIDExNSwgNiwgMSwgMjUyLCAyMzMsIDExNSwgNiwgMSwgMywgMjQ2LCAxODMsIDExNSwgNiwgMSwgMywgMjU0LCAyMSwgCi0gICAgMiwgMjQwLCAxMzMsIDExNSwgNiwgMSwgMjUyLCAyNTEsIDExNSwgNiwgMSwgMjM1LCA5NSwgMywgMjQ2LCAxODMsIDExNSwgCi0gICAgNiwgMSwgMjUzLCA0NywgMjQ2LCAxODMsIDExNSwgNiwgMSwgMjM1LCA5NSwgMjUzLCA0NywgMjQ2LCAxODMsIDExNSwgNiwgCi0gICAgMSwgMjQwLCAyMjYsIDExNSwgNiwgMSwgMjMzLCAxNTEsIDExNSwgNiwgMSwgMjMzLCAyMzcsIDExNSwgNiwgMSwgMjMwLCAKLSAgICAyMTgsIDU3LCAxMTUsIDYsIDEsIDIzMywgMjE0LCAyMzMsIDE1MywgMTE1LCAzLCAxLCAyNDcsIDI0NiwgMTE1LCAzLCAxLCAKLSAgICAyNDEsIDEwNiwgMTE1LCAzLCAxLCAyNDIsIDE3LCAxMTUsIDMsIDEsIDIzMywgMjA3LCAxMTUsIDMsIDEsIDIzNywgMjQzLCAKLSAgICAxMTUsIDMsIDEsIDIzOCwgODIsIDExNSwgMywgMSwgMjMzLCAyNTAsIDExNSwgMywgMSwgMjM3LCAxODAsIDExNSwgMywgMSwgCi0gICAgMjM1LCAyMzUsIDExNSwgMywgMSwgMjQwLCAyNTIsIDExNSwgMywgMSwgNTksIDI0MCwgMjUyLCAxMTUsIDMsIDEsIDc0LCAKLSAgICAxMTUsIDMsIDEsIDIzNSwgMTY1LCAxMTUsIDMsIDEsIDI0MSwgMTcwLCAxMTUsIDMsIDEsIDIzMywgMjE2LCAxMTUsIDMsIDEsIAotICAgIDIzMywgMTUzLCAxMTUsIDMsIDEsIDIzOCwgMjcsIDExNSwgMywgMSwgMjQ4LCAxMjUsIDExNSwgMywgMSwgMjM1LCAyMDQsIAotICAgIDExNSwgMywgMSwgMjM4LCA0MiwgMTE1LCAzLCAxLCAyMzgsIDYzLCAxMTUsIDMsIDEsIDIzNSwgMjI5LCAxMTUsIDMsIDEsIAotICAgIDI0OCwgMTg3LCAxMTUsIDMsIDEsIDIzNywgMjUyLCAxMTUsIDMsIDEsIDI0MSwgMTU0LCAxMTUsIDMsIDEsIDI0OCwgMTI2LCAKLSAgICAxMTUsIDMsIDEsIDI1MywgMCwgMTE1LCAzLCAxLCAyNDEsIDI0MSwgMTE1LCAzLCAxLCAyNDcsIDU4LCAxMTUsIDMsIDEsIAotICAgIDIzNSwgMTU4LCAxMTUsIDMsIDEsIDI0NiwgMTY1LCAxMTUsIDMsIDEsIDI0MSwgMjQsIDExNSwgMywgMSwgMjQyLCAzMCwgCi0gICAgMTE1LCAzLCAxLCAyNDIsIDI5LCAxMTUsIDMsIDEsIDIzNSwgMjE2LCAxNTQsIDExNSwgMywgMSwgMjUyLCAyMzMsIDExNSwgCi0gICAgMywgMSwgMywgMjQ2LCAxODMsIDExNSwgMywgMSwgMywgMjU0LCAyMSwgMiwgMjQwLCAxMzMsIDExNSwgMywgMSwgMjUyLCAKLSAgICAyNTEsIDExNSwgMywgMSwgMjM1LCA5NSwgMywgMjQ2LCAxODMsIDExNSwgMywgMSwgMjUzLCA0NywgMjQ2LCAxODMsIDExNSwgCi0gICAgMywgMSwgMjM1LCA5NSwgMjUzLCA0NywgMjQ2LCAxODMsIDExNSwgMywgMSwgMjQwLCAyMjYsIDExNSwgMywgMSwgMjMzLCAKLSAgICAxNTEsIDExNSwgMywgMSwgMjMzLCAyMzcsIDExNSwgMywgMSwgMjMwLCAyMTgsIDU3LCAxMTUsIDMsIDEsIDIzMywgMjE0LCAKLSAgICAyMzMsIDE1MywgNywgNiwgMSwgMjU1LCA1OCwgMiwgNDcsIDEyNSwgNywgMywgMSwgMjU1LCA1OCwgMiwgNDcsIDEyNSwgNywgCi0gICAgNiwgMSwgMjU1LCA1OCwgMiwgMjM3LCA0NCwgMjA1LCA3LCA2LCAxLCAyNTUsIDcwLCAyLCA4MiwgNywgNiwgMSwgMjU1LCAKLSAgICA1NywgMiwgMjQwLCAxMzMsIDcsIDMsIDEsIDEwMiwgMiwgODIsIDcsIDMsIDEsIDI1NSwgNjEsIDIsIDIzMywgNzQsIDgyLCAKLSAgICA3LCA2LCAxLCAyNTUsIDY2LCAyLCAyMzAsIDEyNiwgNywgMywgMSwgMjU1LCA2NiwgMiwgMjMwLCAxMjYsIDcsIDYsIDEsIAotICAgIDI1NSwgNjcsIDIsIDIzMCwgMTI2LCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAyMzAsIDEyNiwgNywgNiwgMSwgMjU1LCA1NiwgMiwgCi0gICAgMjMwLCAxMjYsIDcsIDMsIDEsIDI1NSwgNTYsIDIsIDIzMCwgMTI2LCA3LCA2LCAxLCAyMzcsIDcxLCA3LCA2LCAxLCAyNTUsIAotICAgIDY4LCAyLCA4OCwgNywgNiwgMSwgMjA5LCA1NywgNywgMywgMSwgMjU1LCA2OSwgMiwgNDEsIDg4LCA3LCA2LCAxLCAyNTUsIAotICAgIDcxLCAyLCA4OCwgNywgMywgMSwgMjU1LCA3MSwgMiwgODgsIDcsIDMsIDEsIDI1NSwgNjksIDIsIDI0MCwgMTY4LCA3LCA2LCAKLSAgICAxLCAxMzIsIDIxMiwgNywgMywgMSwgMTMyLCAyMTIsIDcsIDMsIDEsIDIzNCwgMjM4LCAyNDYsIDE5OCwgNywgMywgMSwgCi0gICAgMTYxLCAyLCAyMzgsIDI4LCA3LCAzLCAxLCAyMDksIDI1NSwgNTcsIDIsIDI0MCwgMTMzLCA3LCAzLCAxLCAxMzAsIDIsIAotICAgIDE4NCwgMjQ2LCAxNzQsIDIzNSwgNTcsIDcsIDEsIDMsIDYsIDIwOSwgNzIsIDcsIDIzMSwgMTk1LCAzLCAxLCAyNTQsIDE5MiwgCi0gICAgNTIsIDEsIDYsIDE5NiwgNzAsIDYsIDEsIDI0MSwgOTMsIDcwLCAzLCAxLCAyNDEsIDkzLCA3MCwgNiwgMSwgMjQyLCAyMCwgCi0gICAgNzAsIDMsIDEsIDI0MiwgMjAsIDcwLCA2LCAxLCAyMzcsIDYxLCA3MCwgMywgMSwgMjM3LCA2MSwgNzAsIDYsIDEsIDIzNywgCi0gICAgMjM3LCA3MCwgMywgMSwgMjM3LCAyMzcsIDcwLCA2LCAxLCAyNDcsIDczLCA3MCwgMywgMSwgMjQ3LCA3MywgNzAsIDYsIDEsIAotICAgIDI0OCwgMTY1LCA3MCwgMywgMSwgMjQ4LCAxNjUsIDcwLCA2LCAxLCAyNDIsIDM3LCA3MCwgMywgMSwgMjQyLCAzNywgNzAsIAotICAgIDYsIDEsIDI0MSwgMTUwLCA3MCwgMywgMSwgMjQxLCAxNTAsIDcwLCA2LCAxLCAyMzUsIDIyMywgNzAsIDMsIDEsIDIzNSwgCi0gICAgMjIzLCA3MCwgNiwgMSwgMjM4LCAxMSwgNzAsIDMsIDEsIDIzOCwgMTEsIDcwLCA2LCAxLCAyNDAsIDI1NSwgNzAsIDMsIDEsIAotICAgIDI0MCwgMjU1LCA3MCwgNiwgMSwgMjM4LCAxOSwgNzAsIDMsIDEsIDIzOCwgMTksIDcwLCA2LCAxLCAyNTIsIDIzOSwgNzAsIAotICAgIDMsIDEsIDI1MiwgMjM5LCA3MCwgNiwgMSwgMjUyLCAyNDgsIDcwLCAzLCAxLCAyNTIsIDI0OCwgNzAsIDYsIDEsIDI0NywgCi0gICAgODMsIDcwLCAzLCAxLCAyNDcsIDgzLCA3MCwgNiwgMSwgNzMsIDcwLCAzLCAxLCA3MywgNzAsIDYsIDEsIDI1MiwgMjIzLCAKLSAgICA3MCwgMywgMSwgMjUyLCAyMjMsIDcwLCA2LCAxLCAyNTIsIDI0NiwgNzAsIDMsIDEsIDI1MiwgMjQ2LCA3MCwgNiwgMSwgCi0gICAgMjQxLCA3NCwgNzAsIDMsIDEsIDI0MSwgNzQsIDcwLCA2LCAxLCAyNDYsIDIxMiwgNzAsIDMsIDEsIDI0NiwgMjEyLCA3MCwgCi0gICAgNiwgMSwgMjUzLCAxOTcsIDcwLCAzLCAxLCAyNTMsIDE5NywgNzAsIDYsIDEsIDI1MywgODgsIDcwLCAzLCAxLCAyNTMsIDg4LCAKLSAgICA3MCwgNiwgMSwgMjQ3LCAxNTcsIDcwLCAzLCAxLCAyNDcsIDE1NywgNzAsIDYsIDEsIDI0NiwgMjA0LCA3MCwgMywgMSwgCi0gICAgMjQ2LCAyMDQsIDcwLCA2LCAxLCAyNDcsIDk4LCA3MCwgMywgMSwgMjQ3LCA5OCwgNzAsIDYsIDEsIDIzMSwgMjE2LCAyNDAsIAotICAgIDE3NCwgNzAsIDMsIDEsIDIzMSwgMjE2LCAyNDAsIDE3NCwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ2LCAyMjQsIDcwLCAzLCAxLCAKLSAgICA4NCwgNzAsIDI0NiwgMjI0LCA3MCwgNiwgMSwgMjI3LCAxOTEsIDI0NywgNzMsIDcwLCAzLCAxLCAyMjcsIDE5MSwgMjQ3LCAKLSAgICA3MywgNzAsIDYsIDEsIDIzMSwgMjE2LCAyNDAsIDI1NSwgNzAsIDMsIDEsIDIzMSwgMjE2LCAyNDAsIDI1NSwgNzAsIDYsIDEsIAotICAgIDIzMSwgMjE2LCAyNTIsIDI0OCwgNzAsIDMsIDEsIDIzMSwgMjE2LCAyNTIsIDI0OCwgNzAsIDYsIDEsIDIyNywgMTkxLCAKLSAgICAyNTIsIDI0OCwgNzAsIDMsIDEsIDIyNywgMTkxLCAyNTIsIDI0OCwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ3LCA5OCwgNzAsIDMsIAotICAgIDEsIDg0LCA3MCwgMjQ3LCA5OCwgNzAsIDYsIDEsIDIzNywgMTQzLCA3MCwgMywgMSwgMjM3LCAxNDMsIDcwLCA2LCAxLCAKLSAgICAyMzUsIDExNywgMjQwLCAyMTIsIDcwLCAzLCAxLCAyMzUsIDExNywgMjQwLCAyMTIsIDcwLCA2LCAxLCA4NCwgNzAsIDI0MCwgCi0gICAgMjEyLCA3MCwgMywgMSwgODQsIDcwLCAyNDAsIDIxMiwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ2LCAyMzIsIDcwLCAzLCAxLCAKLSAgICA4NCwgNzAsIDI0NiwgMjMyLCA3MCwgNiwgMSwgMjMzLCAxODQsIDI0MSwgMSwgNzAsIDMsIDEsIDIzMywgMTg0LCAyNDEsIDEsIAotICAgIDcwLCA2LCAxLCAyMzEsIDIxNiwgMjQwLCAyMDksIDcwLCAzLCAxLCAyMzEsIDIxNiwgMjQwLCAyMDksIDcwLCA2LCAxLCA4NCwgCi0gICAgNzAsIDI0MCwgMjA5LCA3MCwgMywgMSwgODQsIDcwLCAyNDAsIDIwOSwgNzAsIDYsIDEsIDg0LCA3MCwgMTU0LCA3MCwgMywgCi0gICAgMSwgODQsIDcwLCAxNTQsIDcwLCA2LCAxLCAyMzMsIDIxMywgMTU0LCA3MCwgMywgMSwgMjMzLCAyMTMsIDE1NCwgNzAsIDYsIAotICAgIDEsIDg0LCA3MCwgMjQ4LCA1OSwgNzAsIDMsIDEsIDg0LCA3MCwgMjQ4LCA1OSwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ3LCAKLSAgICAxNDcsIDcwLCAzLCAxLCA4NCwgNzAsIDI0NywgMTQ3LCA3MCwgNiwgMSwgODQsIDcwLCAyMzUsIDkzLCA3MCwgMywgMSwgODQsIAotICAgIDcwLCAyMzUsIDkzLCA3MCwgNiwgMSwgODQsIDcwLCAyNDgsIDI5LCA3MCwgMywgMSwgODQsIDcwLCAyNDgsIDI5LCA3MCwgNiwgCi0gICAgMSwgODQsIDcwLCAyMzcsIDE0NiwgNzAsIDMsIDEsIDg0LCA3MCwgMjM3LCAxNDYsIDcwLCA2LCAxLCA4NCwgMjM3LCA5MiwgCi0gICAgMjM3LCAxNDYsIDcwLCAzLCAxLCA4NCwgMjM3LCA5MiwgMjM3LCAxNDYsIDcwLCA2LCAxLCA4NCwgMjM3LCA5MiwgMjQ3LCAKLSAgICAxODIsIDcwLCAzLCAxLCA4NCwgMjM3LCA5MiwgMjQ3LCAxODIsIDcwLCA2LCAxLCA4NCwgMjM3LCA5MiwgMjQ3LCA0NCwgNzAsIAotICAgIDMsIDEsIDg0LCAyMzcsIDkyLCAyNDcsIDQ0LCA3MCwgNiwgMSwgODQsIDIzNywgOTIsIDI0NywgMjI1LCA3MCwgMywgMSwgCi0gICAgODQsIDIzNywgOTIsIDI0NywgMjI1LCA3MCwgMTQsIDI0OCwgNzgsIDcwLCAxNCwgMjU1LCAxMSwgMjUyLCAyNDYsIDcwLCAKLSAgICAxNCwgMjU0LCAyMDAsIDI1MiwgMjQ2LCA3MCwgMTQsIDIzNCwgMjMwLCA3MCwgMTQsIDI1NCwgMTU1LCAyNTIsIDI0NiwgNzAsIAotICAgIDE0LCAyNTQsIDgwLCAyNTIsIDI0NiwgNzAsIDE0LCAyNDUsIDE2NywgMjQxLCA3NCwgNzAsIDg0LCAyMzcsIDkyLCAyNDYsIAotICAgIDE2MiwgMjQwLCAxMjEsIDcwLCA4NCwgMjM3LCA5MiwgMjM3LCAyNDIsIDIzMywgODIsIDc2LCA3MCwgODQsIDIzNywgOTIsIAotICAgIDIzNCwgMTI4LCAyMzMsIDgyLCA3NiwgNzAsIDg0LCAyMzcsIDkyLCAyNDIsIDE5LCAyMzMsIDE0MCwgNzAsIDIzMywgNzYsIAotICAgIDE2OCwgMjQwLCAxNzAsIDcwLCAyNDYsIDE2MiwgMjQwLCAxMjEsIDcwLCAyMjcsIDI1NSwgMjMzLCAxNDAsIDg3LCAzLCAxLCAKLSAgICAyNTMsIDUsIDg3LCAzLCAxLCAyNDcsIDEyMSwgODcsIDMsIDEsIDI0NywgMzIsIDg3LCAzLCAxLCAyNDcsIDEzMSwgODcsIDMsIAotICAgIDEsIDI1MiwgMjMyLCA4NywgMywgMSwgMjQ3LCAyMjIsIDg3LCAzLCAxLCAyNDcsIDIzNywgODcsIDMsIDEsIDI0NywgMjA5LCAKLSAgICA4NywgMywgMSwgMjUzLCA3OSwgODcsIDMsIDEsIDI0NywgMzksIDg3LCAzLCAxLCAyNDcsIDE2NywgODcsIDMsIDEsIDI0NywgCi0gICAgNCwgODcsIDMsIDEsIDI0NywgOTIsIDg3LCAzLCAxLCAyNTMsIDEwNiwgODcsIDMsIDEsIDI0NywgMTg3LCA4NywgMywgMSwgCi0gICAgMjQxLCA5MCwgODcsIDMsIDEsIDI0NywgMTk0LCA4NywgMywgMSwgMjQ3LCA0OSwgODcsIDMsIDEsIDI0NywgNTYsIDg3LCAzLCAKLSAgICAxLCAyNTMsIDEyMSwgODcsIDMsIDEsIDI0MSwgNjEsIDg3LCAzLCAxLCAyNDEsIDQ2LCA4NywgMywgMSwgMjQxLCAzOSwgODcsIAotICAgIDMsIDEsIDI0NywgMTkzLCA4NywgMywgMSwgMjQwLCAyMDMsIDg3LCAzLCAxLCAyNDEsIDMyLCA4NywgMywgMSwgMjQ2LCAKLSAgICAyNDEsIDg3LCAzLCAxLCAyNDcsIDE1MywgODcsIDMsIDEsIDI0NywgMTI1LCA4NywgMywgMSwgMjQxLCAzMSwgODcsIDMsIDEsIAotICAgIDI0NywgMjI4LCA4NywgMywgMSwgMjQxLCA0NCwgODcsIDMsIDEsIDI0NywgMTQ1LCA4NywgMywgMSwgMjUyLCAyNTIsIDg3LCAKLSAgICAzLCAxLCAyNDcsIDgxLCA4NywgMywgMSwgMjUyLCAyNTAsIDg3LCAzLCAxLCAyNDcsIDE0NiwgODcsIDMsIDEsIDI0NywgCi0gICAgMTUwLCAyMjEsIDEsIDE5MSwgMjIxLCAxLCAyNTIsIDEzNCwgMjIxLCAxLCAyNDYsIDc1LCAyMjEsIDEsIDI1MiwgMTM3LCAKLSAgICAyMjEsIDEsIDI0MCwgOTQsIDIyMSwgMSwgMjM3LCAyMzAsIDIzNSwgMTQzLCAyNDgsIDE5NiwgMjIxLCAxLCAyNDgsIDE5NiwgCi0gICAgMjIxLCAxLCAyNTIsIDEzNSwgMjIxLCAxLCAyNDYsIDc4LCAyMjEsIDEsIDI0NiwgNzcsIDIyMSwgMSwgMjQwLCA5MywgMjIxLCAKLSAgICAxLCAyNTIsIDE0OCwgMjIxLCAxLCAyNTIsIDEzNiwgMjIxLCAxLCAyNDcsIDIzMSwgMjIxLCAxLCAyMzcsIDEyMiwgMjQ3LCAKLSAgICAyMzEsIDIyMSwgMSwgMjQwLCA5NSwgMjIxLCAxLCAyNDcsIDIzMCwgMjIxLCAxLCAyMzcsIDIzMCwgMjM1LCAxNDMsIDI0NywgCi0gICAgMjMwLCAyMjEsIDEsIDIzNywgMTIyLCAyNDcsIDIzMCwgMjIxLCAxLCAyNDYsIDgwLCAyMjEsIDEsIDI0NywgMTE3LCAyMjEsIAotICAgIDEsIDI0MiwgMjgsIDIyMSwgMSwgMjM3LCAxMjIsIDI0MiwgMjgsIDIyMSwgMSwgMjQ4LCAxOTgsIDIyMSwgMSwgMjM3LCAKLSAgICAxMjIsIDI0OCwgMTk4LCAyMjEsIDEsIDI1MywgMjgsIDIyMSwgMSwgMjQxLCA4NiwgMjIxLCAxLCAyMzUsIDI0MCwgMjQxLCAKLSAgICA4NiwgMjIxLCAxLCAyMzcsIDEyMiwgMjQxLCA4NiwgMjIxLCAxLCAyNTIsIDEzOCwgMjIxLCAxLCAyNTIsIDEzOSwgMjIxLCAKLSAgICAxLCAyNDgsIDE5NywgMjIxLCAxLCAyMzcsIDEyMiwgMjQ2LCA3OSwgMjIxLCAxLCAyMzcsIDEyMiwgMjQwLCAyNDIsIDIyMSwgCi0gICAgMSwgMjUyLCAxNDAsIDIyMSwgMSwgMjUyLCAyMzMsIDIyMSwgMSwgMjUyLCAxNDEsIDIyMSwgMSwgMjQ2LCA4MSwgMjIxLCAxLCAKLSAgICAyNDEsIDg1LCAyMjEsIDEsIDIzNywgMTIyLCAyNDEsIDg1LCAyMjEsIDEsIDI0OCwgMjQzLCAyNDEsIDg1LCAyMjEsIDEsIAotICAgIDI1MiwgMTQyLCAyMjEsIDEsIDI0NiwgODMsIDIyMSwgMSwgMjQ2LCA4MiwgMjIxLCAxLCAyNDcsIDI1LCAyMjEsIDEsIDI0NiwgCi0gICAgODQsIDIyMSwgMSwgMjQ2LCA3NiwgMjIxLCAxLCAyNDYsIDg1LCAyMjEsIDEsIDI1MiwgMTQzLCAyMjEsIDEsIDI1MiwgMTQ0LCAKLSAgICAyMjEsIDEsIDI1MiwgMTQ1LCAyMjEsIDEsIDI0OCwgMTk5LCAyMjEsIDEsIDIzMSwgMTc2LCAyNDgsIDE5OSwgMjIxLCAxLCAKLSAgICAyNDYsIDg2LCAyMjEsIDUyLCAxLCAyMjcsIDI0OSwgNzYsIDI1LCA0LCAyNTAsIDIyNywgMjUsIDQsIDI1MSwgMjEsIDI1LCAKLSAgICA0LCAyNTEsIDE4NywgMjUsIDQsIDI1MSwgMjMwLCAyNSwgNCwgMjQ1LCAxNzAsIDI1LCA0LCAyNDksIDEyNSwgMjUsIDQsIAotICAgIDI1MiwgMjYsIDI1LCA0LCAyNDksIDE2MiwgMjUsIDQsIDI1MSwgNjksIDI1LCA0LCAyNDUsIDI1LCAyNSwgNCwgMjM1LCAzMSwgCi0gICAgMjUzLCAyNTMsIDI1LCA0LCAyNTIsIDE4NCwgMjUsIDQsIDI0OSwgMjAyLCAyNSwgNCwgMjQzLCA0MywgMjUsIDQsIDI1MCwgCi0gICAgMTM2LCAyNSwgNCwgMjQ1LCAyNDYsIDI1LCA0LCAyNDIsIDI1MSwgMjUsIDQsIDI0NSwgNzAsIDI1LCA0LCAyNTEsIDExMywgCi0gICAgMjUsIDQsIDI0MywgMTQwLCAyNSwgNCwgMjQzLCAxNDIsIDI1LCA0LCAyMzgsIDI0NSwgMjUsIDQsIDI0MywgMTQxLCAyNSwgCi0gICAgNCwgMjQ2LCAxOTAsIDI1LCA0LCAyNDcsIDIwNCwgMjUsIDQsIDI0NywgMjAyLCAyNSwgNCwgMjQ1LCAxOTYsIDI1LCA0LCAKLSAgICAyNDUsIDIwMCwgMjUsIDQsIDI0OCwgMTY2LCAyNSwgNCwgMjQ3LCAyMDMsIDI1LCA0LCAyNDksIDE0NiwgMjUsIDQsIDI0OSwgCi0gICAgMTUwLCAyNSwgNCwgMjQ5LCAxNDgsIDI1LCA0LCAyNDIsIDIzNiwgMjUsIDQsIDI0MiwgMjM3LCAyNSwgNCwgMjQ5LCAxNDcsIAotICAgIDI1LCA0LCAyNDksIDE0OSwgMjUsIDQsIDI0OCwgMjE0LCAyNSwgNCwgMjQ4LCAyMTgsIDI1LCA0LCAyNDgsIDIxNiwgMjUsIAotICAgIDQsIDI0NiwgMTM2LCAyNSwgNCwgMjQ2LCAxNDAsIDI1LCA0LCAyNDgsIDIxNSwgMjUsIDQsIDI0OCwgMjE3LCAyNSwgNCwgCi0gICAgMjQyLCAyMzgsIDI1LCA0LCAyNDIsIDI0MSwgMjUsIDQsIDI0MiwgMjM5LCAyNSwgNCwgMjM4LCAxMzksIDI1LCA0LCAyMzgsIAotICAgIDE0MCwgMjUsIDQsIDI0MSwgMzAsIDI1LCA0LCAyNDIsIDI0MCwgMjUsIDQsIDI1MSwgMTU3LCAyNSwgNCwgMjUxLCAxNjQsIAotICAgIDI1LCA0LCAyNTEsIDE1OSwgMjUsIDQsIDI0NSwgMTA4LCAyNSwgNCwgMjQ1LCAxMDksIDI1LCA0LCAyNTEsIDE1OCwgMjUsIAotICAgIDQsIDI1MSwgMTYwLCAyNSwgNCwgMjUwLCAxOTksIDI1LCA0LCAyNTAsIDIwMywgMjUsIDQsIDI1MCwgMjAxLCAyNSwgNCwgCi0gICAgMjQ0LCA4MSwgMjUsIDQsIDI0NCwgODIsIDI1LCA0LCAyNTAsIDIwMCwgMjUsIDQsIDI1MCwgMjAyLCAyNSwgNCwgMjUyLCAKLSAgICAxMjUsIDI1LCA0LCAyNTIsIDEzMiwgMjUsIDQsIDI1MiwgMTI3LCAyNSwgNCwgMjQ2LCA3MCwgMjUsIDQsIDI0NiwgNzEsIAotICAgIDI1LCA0LCAyNTIsIDEyNiwgMjUsIDQsIDI1MiwgMTI4LCAyNSwgNCwgMjUwLCA1MywgMjUsIDQsIDI1MCwgNTgsIDI1LCA0LCAKLSAgICAyNTAsIDU2LCAyNSwgNCwgMjQzLCAxNjUsIDI1LCA0LCAyNDMsIDE2NiwgMjUsIDQsIDI1MCwgNTQsIDI1LCA0LCAyNTAsIAotICAgIDU3LCAzNiwgMjgsIDEsIDI1MywgNzMsIDM2LCAyOCwgMSwgMjUzLCA5NSwgMzYsIDI4LCAxLCAyNDcsIDEzLCAzNiwgMjgsIAotICAgIDEsIDI1MywgMjAsIDM2LCAyOCwgMSwgMjQ2LCAyNTEsIDM2LCAyOCwgMSwgMjUzLCA0NiwgMzYsIDI4LCAxLCAxNzcsIDM2LCAKLSAgICAyOCwgMSwgMjUzLCA1OCwgMzYsIDI4LCAxLCAyNTMsIDg3LCAzNiwgMjgsIDEsIDI1MiwgMjMyLCAzNiwgMjgsIDEsIDczLCAKLSAgICAzNiwgMjgsIDEsIDI1MywgMCwgMzYsIDI4LCAxLCAyNTMsIDk5LCAzNiwgMjgsIDEsIDI1MywgMTE2LCAzNiwgMjgsIDEsIAotICAgIDI1MywgOSwgMzYsIDI4LCAxLCAxNTQsIDM2LCAyOCwgMSwgMjQ2LCAyNDgsIDM2LCAyOCwgMSwgMjQ2LCAyMTcsIDM2LCAyOCwgCi0gICAgMSwgMjQ2LCAxNjUsIDM2LCAyOCwgMSwgMjM3LCAyMTUsIDM2LCAyOCwgMSwgMjQwLCAyMjYsIDM2LCAyOCwgMSwgMjM4LCAKLSAgICAyMDYsIDM2LCAyOCwgMSwgNTcsIDM2LCAyOCwgMSwgMjUzLCA3NywgMzYsIDI4LCAxLCAyMzcsIDIwMSwgMzYsIDI4LCAxLCAKLSAgICAyMzEsIDI1NCwgMjUzLCAxMzcsIDM2LCAyOCwgMSwgMjQ3LCAyNSwgMzYsIDI4LCAxLCAyNTIsIDIzMywgMzYsIDI4LCAxLCAKLSAgICAyMzMsIDkzLCA1NywgMzYsIDI4LCAxLCAyMzcsIDEwMiwgMjQ2LCAxODMsIDM2LCAyOCwgMSwgMjUzLCA0NywgMjQ2LCAxODMsIAotICAgIDM2LCAyOCwgMSwgMjMzLCA5MywgMjUzLCA0NywgMjQ2LCAxODMsIDQxLCAyNDAsIDExNywgMjI4LCAxODYsIDIzNSwgNzAsIAotICAgIDQxLCAyNDAsIDExNywgMjM3LCA1MCwgMjI4LCAxODYsIDIzNSwgNzAsIDQyLCAyMjgsIDE4NiwgMTA0LCA0MSwgMjI4LCAKLSAgICAxODYsIDEwNCwgNDIsIDIzNywgNTAsIDIyOCwgMTg2LCAxMDQsIDQxLCAyMzcsIDUwLCAyMjgsIDE4NiwgMTA0LCAyMzcsIAotICAgIDEwNSwgMjI3LCAyMDYsIDIzNSwgNzAsIDIzNywgMTA1LCAyMzcsIDUwLCAyMjcsIDIwNiwgMjM1LCA3MCwgMjM3LCA1MCwgCi0gICAgMjI3LCAxOTksIDIzNSwgNzAsIDQyLCAyMjcsIDE5OSwgMTA0LCA0MSwgMjI3LCAxOTksIDEwNCwgMjM3LCAxMDUsIDIzNSwgCi0gICAgMjcsIDQyLCAyMzcsIDEwNSwgMjMzLCAyMjMsIDEwNCwgNDEsIDIzNywgMTA1LCAyMzMsIDIyMywgMTA0LCAyMzIsIDE3NywgCi0gICAgMjM0LCAzNiwgMjI4LCAyMDMsIDIzNywgMjUxLCAyMjgsIDIwMywgMjAwLCAyMzcsIDI1MSwgMjI4LCAyMDMsIDIyNywgMjQzLCAKLSAgICAyMzcsIDUwLCAyMzYsIDE3MiwgMjMxLCAxOTEsIDIzNSwgMTQ2LCAyMzUsIDE4LCAyMzUsIDE0NiwgMjM3LCA1MCwgMjI3LCAKLSAgICAxMzMsIDIzNywgOTgsIDQ3LCAyMzUsIDc4LCAyMzUsIDY5LCAyMzMsIDcwLCAyMjgsIDIxMywgMjUxLCAxMDIsIDIzNSwgCi0gICAgMTU1LCAyMzgsIDEwLCAyLCAyMTksIDI0MCwgMTI4LCAyLCAyNDYsIDE3NCwgNDYsIDQyLCAxODQsIDIzMCwgMTkyLCAxMDQsIAotICAgIDQxLCAxODQsIDIzMCwgMTkyLCAxMDQsIDI0MCwgMTI4LCAyLCA1NiwgNDYsIDI0MCwgMTI4LCAyLCA1NiwgNTEsIDQyLCA2MSwgCi0gICAgMjUyLCAyMTksIDIsIDIzNywgMTkwLCA0MSwgNjEsIDI1MiwgMjE5LCAyLCAyMzcsIDE5MCwgMjUyLCAyMjgsIDQyLCAxMzIsIAotICAgIDEwNCwgMjUyLCAyMjgsIDQxLCAxMzIsIDEwNCwgMjM3LCA1OSwgNDIsIDEzMiwgMTA0LCAyMzcsIDU5LCA0MSwgMTMyLCAKLSAgICAxMDQsIDQyLCAyMzMsIDExNiwgOTcsIDEwNCwgNDEsIDIzMywgMTE2LCA5NywgMTA0LCA0MiwgNDcsIDIyOCwgMTgwLCA0MSwgCi0gICAgNDcsIDIyOCwgMTgwLCAxMzUsIDE5NywgMTA3LCAxNjgsIDU2LCAyMjgsIDE4MiwgMTY4LCA1NiwgMTA3LCAxMzUsIDE5NywgCi0gICAgMjI4LCAxODIsIDIzNSwgNTEsIDI0NiwgMTYwLCA1NiwgMjI4LCAxODIsIDI0NiwgMTU5LCA1NiwgNzYsIDIwMCwgMjMzLCAKLSAgICA4MiwgNzYsIDYxLCAyMDUsIDI0NiwgMTc0LCAyMzcsIDIwOSwgOSwgMjksIDIzNiwgMjAwLCA5LCAyOSwgMjM3LCAxOTgsIDksIAotICAgIDI5LCAyMzcsIDE0NSwgMTE4LCA5LCAyOSwgMjM3LCAxNDUsIDExMywgOSwgMjksIDIzNywgMTQ1LCAxNjYsIDksIDI5LCAKLSAgICAyMzYsIDE4NiwgOSwgMjksIDI0NiwgMjMxLCA5LCAyOSwgMjM4LCA3MCwgOSwgMjksIDI0MSwgMTc0LCAxMTgsIDksIDI5LCAKLSAgICAyNDEsIDE3NCwgMTEzLCA5LCAyOSwgMjI5LCAxOTcsIDksIDI5LCAyNDEsIDIzMiwgOSwgMjksIDMsIDExOCwgOSwgMjksIDMsIAotICAgIDExMywgOSwgMjksIDI0NywgODUsIDExOCwgOSwgMjksIDI0NywgODUsIDExMywgOSwgMjksIDI0NywgODUsIDE2NiwgOSwgCi0gICAgMjksIDI0NywgODUsIDE1OCwgOSwgMjksIDI0MCwgNywgOSwgMjksIDIzNSwgMjI1LCA5LCAyOSwgMjQxLCAyNDgsIDExOCwgCi0gICAgOSwgMjksIDI0MSwgMjQ4LCAxMTMsIDksIDI5LCAyNDAsIDE5NiwgMTE4LCA5LCAyOSwgMjQwLCAxOTYsIDExMywgOSwgMjksIAotICAgIDI0MCwgMjUxLCA5LCAyOSwgMjQ3LCAxOTYsIDksIDI5LCAyMzgsIDE0OSwgOSwgMjksIDI0NywgNTQsIDksIDI5LCAyNDAsIAotICAgIDIxMSwgOSwgMjksIDIzNywgMjQwLCA5LCAyOSwgMjM2LCAxNTksIDksIDI5LCAyMzIsIDk3LCA5LCAyOSwgMjQyLCAyMywgCi0gICAgMTE4LCA5LCAyOSwgMjQyLCAyMywgMTEzLCA5LCAyOSwgMjQwLCAyMDcsIDksIDI5LCAyNTQsIDIsIDExOCwgOSwgMjksIAotICAgIDI1NCwgMiwgMTEzLCA5LCAyOSwgMjMwLCAxNDksIDEzMiwgMjQ4LCAxODAsIDIzOCwgNzYsIDksIDI5LCAyNDcsIDEyNywgOSwgCi0gICAgMjksIDI0OCwgMzEsIDksIDI5LCAyNDEsIDE2MywgOSwgMjksIDI0NywgMjU1LCAxMDYsIDIzNywgMTk5LCA5LCAyOSwgMjQ4LCAKLSAgICAzNiwgOSwgMjksIDIzOCwgNjUsIDExOCwgOSwgMjksIDIzOCwgNjUsIDExMywgOSwgMjksIDIzNSwgMTA5LCA5LCAyOSwgCi0gICAgMjQxLCA3MywgOSwgMjksIDIyOCwgMTgxLCAyNDEsIDczLCA5LCAyOSwgMjUzLCAxNTQsIDExOCwgOSwgMjksIDI1MywgMTU0LCAKLSAgICAxMTMsIDksIDI5LCAyNTMsIDE1NCwgMTY2LCA5LCAyOSwgMjUzLCAxNTQsIDE1OCwgOSwgMjksIDI0NCwgMTIxLCA5LCAyOSwgCi0gICAgMjM4LCA1MCwgOSwgMjksIDI0NywgMTk1LCA5LCAyOSwgMjQ4LCAzNSwgOSwgMjksIDI0OCwgMTIzLCA5LCAyOSwgMjQxLCAKLSAgICAxMDUsIDExOCwgOSwgMjksIDI0MSwgMTA1LCAxMTMsIDksIDI5LCAyNDEsIDE4OSwgOSwgMjksIDIzNSwgMTkyLCA5LCAyOSwgCi0gICAgMjQxLCA0MSwgMTE4LCA5LCAyOSwgMjQxLCA0MSwgMTEzLCA5LCAyOSwgMjQxLCA0MSwgMTY2LCA5LCAyOSwgMjM4LCA3NCwgCi0gICAgOSwgMjksIDIzMywgMTk0LCA5LCAyOSwgMjQ2LCAxODQsIDExOCwgOSwgMjksIDI0NiwgMTg0LCAxMTMsIDksIDI5LCAyMjgsIAotICAgIDE4MSwgMjQ3LCA1MCwgOSwgMjksIDIzMCwgMTQ5LCAyNDAsIDE3OSwgOSwgMjksIDI0MCwgMTc5LCA5LCAyOSwgMjI4LCAKLSAgICAxODEsIDIzNSwgMjE1LCA5LCAyOSwgMjI4LCAxODEsIDIzOCwgNTIsIDksIDI5LCAyNDEsIDM4LCA5LCAyOSwgMjI4LCAxODEsIAotICAgIDI0MSwgMTA4LCA5LCAyOSwgMjMwLCAxNDksIDI0MiwgMjEsIDksIDI5LCAyNDcsIDIyNCwgMTE4LCA5LCAyOSwgMjQ3LCAKLSAgICAyMjQsIDExMywgOSwgMjksIDI0MSwgMTEwLCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgNDAsIDksIDI5LCAxODIsIDExOCwgOSwgCi0gICAgMjksIDE4MiwgMTEzLCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgNCwgOSwgMjksIDIyOCwgMTgxLCAyNDEsIDEzNywgOSwgMjksIAotICAgIDI0MSwgMTk1LCAxMTgsIDksIDI5LCAyNDEsIDE5NSwgMTEzLCA5LCAyOSwgMjQxLCAyMTksIDksIDI5LCAyNDEsIDEwMiwgOSwgCi0gICAgMjksIDIyOCwgMTgxLCAyMzgsIDcxLCAyMzMsIDE3MSwgOSwgMjksIDIyOCwgMTgxLCAyNDEsIDE3OSwgOSwgMjksIDIyOCwgCi0gICAgMTgxLCAyNDAsIDE5OSwgOSwgMjksIDIyOCwgMTgxLCAyNDgsIDM4LCA5LCAyOSwgMjUzLCAxNzUsIDExOCwgOSwgMjksIAotICAgIDI1MywgMTc1LCAxMTMsIDksIDI5LCAyNTMsIDE3NSwgMTY2LCA5LCAyOSwgMjI4LCAxODEsIDI0NywgMTM2LCA5LCAyOSwgCi0gICAgMjQwLCAyMjgsIDksIDI5LCAyMjgsIDE4MSwgMjM4LCA4LCA5LCAyOSwgMjQxLCAxMDMsIDksIDI5LCAyMzgsIDAsIDksIDI5LCAKLSAgICAyMjgsIDE4MSwgMjQxLCAxMzAsIDksIDI5LCAyMjgsIDE4MSwgMjQxLCAyNywgOSwgMjksIDIyOCwgMTgxLCAyNDEsIDIzMSwgCi0gICAgOSwgMjksIDIzMCwgMTQ5LCAyMzcsIDIyNCwgOSwgMjksIDIzMCwgMTQ5LCAyMzUsIDIzMiwgOSwgMjksIDIyOCwgMTgxLCAKLSAgICAyNDEsIDEzNCwgOSwgMjksIDIyOCwgMTkxLCAyNDEsIDM3LCA5LCAyOSwgMjI4LCAxODEsIDI0MSwgMzcsIDksIDI5LCAyMjgsIAotICAgIDE5MSwgMjM3LCAyMjEsIDksIDI5LCAyMjgsIDE4MSwgMjM3LCAyMjEsIDksIDI5LCAyMjgsIDE5MSwgMjM1LCA3NCwgOSwgCi0gICAgMjksIDIyOCwgMTgxLCAyMzUsIDc0LCA5LCAyOSwgMjM1LCAxMDUsIDksIDI5LCAyMjgsIDE5MSwgMjM1LCAxMDUsIDksIDI5LCAKLSAgICAyMjgsIDE4MSwgMjM1LCAxMDUsIDQ5LCAyOSwgMTE4LCA0OSwgMjksIDI0MCwgMTM4LCA0OSwgMjksIDI0NiwgMTY0LCA0OSwgCi0gICAgMjksIDIzNywgODQsIDQ5LCAyOSwgMjM2LCAyMTMsIDQ5LCAyOSwgODgsIDQ5LCAyOSwgMTEzLCA0OSwgMjksIDI0OCwgOTIsIAotICAgIDQ5LCAyOSwgMjQ3LCA0LCA0OSwgMjksIDI0NCwgOTMsIDQ5LCAyOSwgMjM4LCAyMDIsIDQ5LCAyOSwgMTg3LCA0OSwgMjksIAotICAgIDEwMywgMjQ2LCAyMzEsIDQ5LCAyOSwgMjM4LCAxNjIsIDQ5LCAyOSwgMjQ4LCA2NiwgNDksIDI5LCAyMzgsIDcwLCA0OSwgCi0gICAgMjksIDI0NiwgMTU3LCAyNDYsIDIzMSwgNDksIDI5LCAyMzksIDcyLCA0OSwgMjksIDIzOCwgMzYsIDQ5LCAyOSwgMjQ2LCAKLSAgICA1OSwgNDksIDI5LCAyNDAsIDEzLCA0OSwgMjksIDQxLCAyNDYsIDE1NywgMjQ2LCAyMzEsIDQ5LCAyOSwgMjM5LCA5LCAyMzAsIAotICAgIDE2NCwgNDksIDI5LCAyNDYsIDE3OSwgNDksIDI5LCAyMjksIDE5NywgNDksIDI5LCAyNDEsIDIzMiwgNDksIDI5LCAyMzcsIAotICAgIDE5OCwgNDksIDI5LCAyMzQsIDE5OSwgNDksIDI5LCAyMzgsIDkwLCA0OSwgMjksIDIzOCwgMjYsIDQ5LCAyOSwgMjMwLCAKLSAgICAxNjQsIDQ5LCAyOSwgMjM3LCA5OSwgNDksIDI5LCAyMzQsIDIxNiwgNDksIDI5LCAyNTMsIDc2LCA0OSwgMjksIDI1NSwgMjcsIAotICAgIDIzNiwgMjMzLCA0OSwgMjksIDIzNCwgOTksIDQ5LCAyOSwgMjQ5LCAxMTksIDQ5LCAyOSwgMjM3LCAyMjUsIDQ5LCAyOSwgCi0gICAgMjM3LCAyMzUsIDQ5LCAyOSwgMjQ1LCAxMTksIDQ5LCAyOSwgMjQ0LCA4LCA0OSwgMjksIDIzNywgMjE2LCA0OSwgMjksIAotICAgIDI0NCwgODksIDQ5LCAyOSwgMjM2LCAzNywgNDksIDI5LCAyMzYsIDIzOSwgNDksIDI5LCAyMzEsIDI1NSwgNDksIDI5LCAKLSAgICAyMzksIDIyNCwgNDksIDI5LCAyNDYsIDU4LCA0OSwgMjksIDIzNCwgMTc2LCA0OSwgMjksIDIzNywgMTMsIDQ5LCAyOSwgCi0gICAgMjQ5LCAyMDgsIDQ5LCAyOSwgMjQwLCAxMjUsIDIzNSwgMjI1LCA0OSwgMjksIDIzNywgNTAsIDIzNywgMTk4LCA0OSwgMjksIAotICAgIDE4MiwgMjM2LCAyNDMsIDQ5LCAyOSwgMTM1LCAyMzksIDUsIDQ5LCAyOSwgMjM5LCAyNTAsIDQ5LCAyOSwgMjQ3LCA2OCwgCi0gICAgNDksIDI5LCAyNDAsIDgsIDQ5LCAyOSwgMjM0LCAyMywgNDksIDI5LCAyNDUsIDIxOCwgNDksIDI5LCAyMzcsIDIwNCwgNDksIAotICAgIDI5LCAyMzQsIDExNiwgNDksIDI5LCAyNDMsIDc4LCA0OSwgMjksIDI0MCwgMjUxLCA0OSwgMjksIDIzNSwgMTU1LCA0OSwgCi0gICAgMjksIDI0NywgMTk2LCA0OSwgMjksIDIzNiwgMjExLCA0OSwgMjksIDIzNiwgNTEsIDQ5LCAyOSwgMjQ3LCAyNDQsIDQ5LCAKLSAgICAyOSwgMjM1LCAyNywgNDksIDI5LCAyNDcsIDE4NCwgNDksIDI5LCAyNDcsIDU0LCA0OSwgMjksIDI1MSwgMjE0LCA0OSwgMjksIAotICAgIDI0MCwgMjExLCA0OSwgMjksIDI0MSwgODEsIDQ5LCAyOSwgMjQ0LCA4NiwgNDksIDI5LCAyNDAsIDEyMSwgNDksIDI5LCAKLSAgICAyMzcsIDI0MCwgNDksIDI5LCAyMzcsIDI4LCA0OSwgMjksIDI1NCwgMjQ2LCAyNDcsIDE4NCwgNDksIDI5LCAyMzQsIDMzLCAKLSAgICA0OSwgMjksIDI0OCwgNDAsIDQ5LCAyOSwgMjQzLCAxMiwgNDksIDI5LCAyNDAsIDIxLCA0OSwgMjksIDIzNywgMTY4LCA0OSwgCi0gICAgMjksIDI0MCwgMjA3LCA0OSwgMjksIDI0MywgMTMsIDQ5LCAyOSwgMjM2LCA3NSwgNDksIDI5LCA0NywgMjU0LCAxODQsIDQ5LCAKLSAgICAyOSwgMTMyLCAyNDgsIDE4MCwgMjM4LCA3NiwgNDksIDI5LCAyNDAsIDIsIDQ5LCAyOSwgMjQzLCAxMDYsIDQ5LCAyOSwgCi0gICAgMjQ3LCAxMjcsIDQ5LCAyOSwgMjQ4LCAzMSwgNDksIDI5LCAyMzMsIDAsIDQ5LCAyOSwgMjQxLCAxNjMsIDQ5LCAyOSwgMjM5LCAKLSAgICAxMDIsIDQ5LCAyOSwgMjQ1LCAyNTIsIDQ5LCAyOSwgMjQwLCAyNCwgNDksIDI5LCAyNDQsIDEwMywgNDksIDI5LCAyNTIsIAotICAgIDY1LCA0OSwgMjksIDIzOCwgMjE2LCA0OSwgMjksIDI0NywgMjU1LCAxMDYsIDIzNywgMTk5LCA0OSwgMjksIDIzMywgMjYsIAotICAgIDQ5LCAyOSwgMjM3LCA1MCwgMjQ1LCAyNDAsIDQ5LCAyOSwgMjM3LCA5MCwgNDksIDI5LCAyNDUsIDE4OCwgNDksIDI5LCAKLSAgICAyNDAsIDE1NiwgNDksIDI5LCAyNDgsIDM2LCA0OSwgMjksIDIzOCwgNjQsIDQ5LCAyOSwgNTgsIDQ5LCAyOSwgMjQwLCAyMiwgCi0gICAgNDksIDI5LCAyMzYsIDIzNywgNDksIDI5LCAyNDAsIDQ2LCA0OSwgMjksIDIzOCwgMjUyLCA0OSwgMjksIDI0MiwgMjM0LCAKLSAgICA0OSwgMjksIDI0MCwgMTksIDQ5LCAyOSwgMjM1LCAxMDksIDQ5LCAyOSwgMjQ1LCAxMTUsIDQ5LCAyOSwgMjQxLCA3MywgNDksIAotICAgIDI5LCAyNTAsIDEyNiwgNDksIDI5LCAyNTEsIDUxLCA0OSwgMjksIDIzOCwgNTAsIDQ5LCAyOSwgMjM0LCAxMDIsIDQ5LCAyOSwgCi0gICAgMjQ4LCAxMjMsIDQ5LCAyOSwgMjQ2LCAyMzAsIDQ5LCAyOSwgMjQ1LCA3OCwgNDksIDI5LCAyNDcsIDEzNSwgNDksIDI5LCAKLSAgICAyMzgsIDEzMiwgNDksIDI5LCAyNDEsIDE4OSwgNDksIDI5LCAyMzIsIDIzMSwgNDksIDI5LCAyNDEsIDIzMywgNDksIDI5LCAKLSAgICAyMzUsIDI1MSwgNDksIDI5LCAyMzUsIDE5MiwgNDksIDI5LCAyMzUsIDE0MiwgNDksIDI5LCAyMzYsIDE3NiwgNDksIDI5LCAKLSAgICAyNDIsIDIxMSwgNDksIDI5LCAyMzMsIDMxLCA0OSwgMjksIDIzOCwgMTU4LCA0OSwgMjksIDIzOCwgMjU0LCA0OSwgMjksIAotICAgIDIzOCwgNzQsIDQ5LCAyOSwgMjM2LCAxMTMsIDQ5LCAyOSwgMjM4LCAxMjcsIDQ5LCAyOSwgMjQ3LCAyMjQsIDIzMCwgMTY0LCAKLSAgICA0OSwgMjksIDIzMywgMTk0LCA0OSwgMjksIDI0NiwgNTUsIDQ5LCAyOSwgMjQ3LCA1MCwgNDksIDI5LCAyNDAsIDE3OSwgNDksIAotICAgIDI5LCAyMzUsIDIxNSwgNDksIDI5LCAyMzcsIDIwLCA0OSwgMjksIDI0MiwgMTk2LCA0OSwgMjksIDI1MSwgMTA5LCA0OSwgCi0gICAgMjksIDIzNiwgNCwgNDksIDI5LCAyMzgsIDUyLCA0OSwgMjksIDI1MSwgMTc2LCA0OSwgMjksIDI1MSwgMTk1LCA0OSwgMjksIAotICAgIDI0MSwgMzgsIDQ5LCAyOSwgMjQyLCAyMTIsIDQ5LCAyOSwgMjQxLCAxMDgsIDQ5LCAyOSwgMjM2LCAxMiwgNDksIDI5LCAKLSAgICAyMzQsIDE2NCwgNDksIDI5LCAyNDIsIDIxLCA0OSwgMjksIDI0MSwgMTEwLCA0OSwgMjksIDI0MSwgODQsIDQ5LCAyOSwgCi0gICAgMjI4LCAyNDEsIDQ5LCAyOSwgMjM1LCA3LCA0OSwgMjksIDI0MSwgNDAsIDQ5LCAyOSwgMjQxLCA0LCA0OSwgMjksIDI0MSwgCi0gICAgMTM3LCA0OSwgMjksIDIzOSwgMTIwLCA0OSwgMjksIDI0MCwgMSwgNDksIDI5LCAyNDAsIDEyNSwgMjQwLCAyNywgMjQxLCAKLSAgICAyNywgNDksIDI5LCAyNDEsIDIxOSwgNDksIDI5LCAyNDEsIDEwMiwgNDksIDI5LCAyNDAsIDg4LCA0OSwgMjksIDI0MCwgCi0gICAgMjIzLCA0OSwgMjksIDIzMywgMTcxLCA0OSwgMjksIDIzOCwgNzEsIDIzMywgMTcxLCA0OSwgMjksIDI0NCwgOTIsIDQ5LCAKLSAgICAyOSwgMjQwLCA5LCA0OSwgMjksIDI0MSwgMTc5LCA0OSwgMjksIDI0MCwgMTk5LCA0OSwgMjksIDI0OCwgMzgsIDQ5LCAyOSwgCi0gICAgMjQ3LCAxMzYsIDQ5LCAyOSwgMjQwLCAyMjgsIDQ5LCAyOSwgMjMyLCAxOTQsIDQ5LCAyOSwgMjM4LCA4LCA0OSwgMjksIAotICAgIDI0MSwgMTAzLCA0OSwgMjksIDI0NSwgMjM3LCA0OSwgMjksIDI0MywgMTY5LCA0OSwgMjksIDIzOCwgMjE4LCA0OSwgMjksIAotICAgIDIzMCwgOTgsIDI0MSwgODQsIDQ5LCAyOSwgMjMyLCAxNiwgNDksIDI5LCAyMzgsIDAsIDQ5LCAyOSwgMjQxLCAxMzAsIDQ5LCAKLSAgICAyOSwgMjQxLCAyNywgNDksIDI5LCAyNDEsIDIzMSwgNDksIDI5LCAyNDEsIDExOSwgNDksIDI5LCAyMzcsIDIyNCwgNDksIAotICAgIDI5LCAyNDMsIDE3MSwgNDksIDI5LCAyMzUsIDIzMiwgNDksIDI5LCAyMzYsIDE1NiwgNDksIDI5LCAyMzcsIDQ1LCA0OSwgCi0gICAgMjksIDIzMCwgNTQsIDQ5LCAyOSwgMjQxLCAxMzQsIDQ5LCAyOSwgMjM3LCA5LCA0OSwgMjksIDI0MywgODEsIDQ5LCAyOSwgCi0gICAgMjQ4LCAxNDYsIDQ5LCAyOSwgMjQ0LCAyNTEsIDQ5LCAyOSwgMjQxLCAzNywgNDksIDI5LCAyMzcsIDIyMSwgNDksIDI5LCAKLSAgICAyMzUsIDc0LCA0OSwgMjksIDIzNSwgMTA1LCA0OSwgMjksIDIzNywgMjUwLCA5MCwgMjI5LCAxNjgsIDExNiwgNDIsIDE4MCwgCi0gICAgMjM3LCA0MSwgOTAsIDIyOSwgMTY4LCAxMTYsIDY0LCAxODAsIDUxLCA5MCwgMjI5LCAxNjgsIDExNiwgNDIsIDE4MCwgMjM3LCAKLSAgICA0NCwgMjIsIDIzNywgNDEsIDkwLCAyMjksIDE2OCwgMTE2LCA2NCwgMTgwLCAyMzcsIDQ0LCAyMiwgNTEsIDkwLCAyMjksIAotICAgIDE2OCwgMTE2LCAyNDYsIDE2MiwgMjMzLCA0NSwgOTAsIDIyOSwgMTY4LCAxMTYsIDIzMywgMTM3LCAyNDYsIDE3MiwgNDYsIAotICAgIDkwLCAyMjksIDE2OCwgMTE2LCAyMzMsIDEzNywgMjQ2LCAxNzIsIDUxLCA5MCwgMjI5LCAxNjgsIDExNiwgMjMzLCAxMzcsIAotICAgIDI0NiwgMTcyLCAyNDAsIDEzMiwgOTAsIDIyOSwgMTY4LCAxMTYsIDIzMywgMTM3LCAyNDYsIDE3MiwgMjQwLCAxMTYsIDI0MCwgCi0gICAgMTMyLCA5MCwgMjI5LCAxNjgsIDExNiwgMjMzLCAxMzcsIDI0NiwgMTcyLCAyNDAsIDExNiwgMjM3LCA0MSwgOTAsIDIyOSwgCi0gICAgMTY4LCAxMTYsIDIzMywgMTM3LCAyNDYsIDE3MiwgMjAzLCAyNDAsIDEzMiwgOTAsIDIyOSwgMTY4LCAxMTYsIDIzMiwgMjM2LCAKLSAgICA5MCwgMjM3LCA2OSwgOTAsIDIzNywgNjcsIDkwLCAyNDYsIDE2MiwgMjQwLCAxMjEsIDI0MywgNzIsIDc2LCAyMzQsIDEzMywgCi0gICAgMjMxLCA4NSwgMjMzLCAyNDIsIDk4LCA5MCwgMjMxLCAyMjUsIDc2LCA5MCwgMjM1LCAxMTMsIDc2LCA5MCwgNjUsIDI0MCwgCi0gICAgMTI2LCA0MiwgMjQwLCAxMTcsIDEwNCwgNDEsIDI0MCwgMTE3LCAxMDQsIDQyLCA0NywgMjQwLCAxMTcsIDEwNCwgNDEsIDQ3LCAKLSAgICAyNDAsIDExNywgMTA0LCA0MiwgMjM3LCA3OSwgMTA0LCA0MSwgMjM3LCA3OSwgMTA0LCA0MiwgNjMsIDIzNywgNzksIDEwNCwgCi0gICAgNDEsIDYzLCAyMzcsIDc5LCAxMDQsIDQyLCA4NiwgMjMwLCAxMzcsIDEwNCwgNDEsIDg2LCAyMzAsIDEzNywgMTA0LCAyMzcsIAotICAgIDIxMCwgNzYsIDI1MCwgMjYsIDc2LCA0MiwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgNDEsIDIzMywgODksIDI0MCwgMTU4LCAKLSAgICAxMDQsIDQyLCA2MywgMjMwLCAxMzcsIDEwNCwgNDEsIDYzLCAyMzAsIDEzNywgMTA0LCA0MiwgNjMsIDIzMywgODksIDI0MCwgCi0gICAgMTU4LCAxMDQsIDQxLCA2MywgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgNDIsIDYzLCAzNywgMTA0LCA0MSwgNjMsIDM3LCAKLSAgICAxMDQsIDI0NywgMjMsIDI0MCwgMTUxLCAyMDAsIDQ3LCAyNDEsIDY0LCAyMzEsIDE5OSwgNzYsIDQ3LCAyNDEsIDY0LCAyMzEsIAotICAgIDE5OSwgNzYsIDE4NCwgNDcsIDI0MSwgNjQsIDIzMSwgMTk5LCA3NiwgMjM3LCAyMTAsIDE2NSwgMjQwLCAyMjMsIDIzMywgCi0gICAgOTcsIDIwNywgMTE4LCAyMzMsIDk3LCAyMDcsIDExMywgMjMzLCA5NywgMjA3LCAxNjYsIDIzMywgOTcsIDIwNywgMTU4LCAKLSAgICAyMzMsIDk3LCAyMDcsIDE3MywgMjMzLCA5NywgMjA3LCAxODMsIDIzMywgOTcsIDIwNywgMTk0LCAyMzMsIDk3LCAyMDcsIAotICAgIDE4NywgMjMzLCA5NywgMjA3LCAxOTIsIDkwLCAyNDQsIDk0LCAyMDYsIDc2LCA5MCwgMjM3LCAxMTUsIDIwNiwgNzYsIDkwLCAKLSAgICAyMzEsIDI0OSwgMjA2LCA3NiwgOTAsIDIzNCwgOTcsIDIwNiwgNzYsIDI2LCAyMzcsIDYyLCA1NiwgMjA2LCA3NiwgMjYsIAotICAgIDQ3LCA1NiwgMjA2LCA3NiwgMjQ2LCAyMzksIDI0MCwgMTUxLCA2MSwgMjQ3LCA0MCwgMjM3LCAxMjAsIDc2LCA2MSwgMjQ3LCAKLSAgICA0MCwgMjM3LCAxMjAsIDIsIDIzNywgMTA3LCAyNDAsIDE4MSwgNzYsIDYxLCAyNDcsIDQwLCAyMzcsIDEyMCwgMTY1LCAyNDAsIAotICAgIDExNiwgMjQwLCAxNzAsIDYxLCAyNDcsIDQwLCAyMzcsIDEyMCwgMiwgMjM3LCAxMDcsIDI0MCwgMTgxLCAxNjUsIDI0MCwgCi0gICAgMTE2LCAyNDAsIDE3MCwgNjEsIDI0NywgNDAsIDIzNywgMTIwLCAxNjUsIDIwMywgMjQwLCAxNzAsIDMzLCAyMzcsIDIxMCwgCi0gICAgNzYsIDkwLCAxNjcsIDI0NiwgMTY3LCAyNDksIDI0MSwgMjMxLCAyNDcsIDk4LCAyMzMsIDk3LCAyMDcsIDI0NiwgMTc5LCAKLSAgICAyMzMsIDk3LCAyMDcsIDIzNSwgNTIsIDIzMywgOTcsIDIwNywgMjM1LCA4MCwgNjEsIDkwLCAyMzEsIDIyNSwgNzYsIDI1MCwgCi0gICAgMjQ5LCA3NiwgMjQ4LCAxMjgsIDIyOSwgMjI2LCA3NiwgOTAsIDM4LCAyMzAsIDE1NiwgOTAsIDEzMiwgMjQ5LCAyNDksIAotICAgIDIzNywgNjksIDEyNiwgMSwgMywgNTcsIDEyNiwgMSwgNTcsIDEyNiwgMSwgMywgNzQsIDEyNiwgMSwgNzQsIDEyNiwgMSwgMywgCi0gICAgNjYsIDEyNiwgMSwgNjYsIDEyNiwgMSwgMywgNzIsIDEyNiwgMSwgNzIsIDEyNiwgMSwgMywgNzMsIDEyNiwgMSwgNzMsIAotICAgIDEyNiwgMSwgMTc3LCAxMjYsIDEsIDI1MiwgMjA1LCAxMjYsIDEsIDI1MywgNywgMTI2LCAxLCAyNTMsIDM5LCAxMjYsIDEsIAotICAgIDI1MywgMzQsIDEyNiwgMSwgMjUzLCA0MCwgMTI2LCAxLCAyNTMsIDYsIDEyNiwgMSwgMjUzLCAxMDMsIDEyNiwgMSwgMjUzLCAKLSAgICAzMywgMTI2LCAxLCAyNTMsIDc2LCAxMjYsIDEsIDI1MiwgMjA0LCAxMjYsIDEsIDI1MiwgMjI2LCAxMjYsIDEsIDI1MywgMjQsIAotICAgIDEyNiwgMSwgMjUzLCA3MiwgMTI2LCAxLCAyNTMsIDI2LCAxMjYsIDEsIDI1MywgOTcsIDEyNiwgMSwgMjUzLCA1MiwgMTI2LCAKLSAgICAxLCAyNTMsIDQ2LCAxMjYsIDEsIDI1MywgMjUsIDEyNiwgMSwgMjUzLCA2NSwgMTI2LCAxLCAyNTIsIDIwMiwgMTI2LCAxLCAKLSAgICAyNTIsIDIwMywgMTI2LCAxLCAyNTMsIDQ0LCAxMjYsIDEsIDI1MywgMTIsIDEyNiwgMSwgMywgMjUzLCAxOCwgMTI2LCAxLCAKLSAgICAyNTMsIDE4LCAxMjYsIDEsIDI1MywgMzEsIDEyNiwgMSwgMjUzLCA5LCAxMjYsIDEsIDI1MywgMjAsIDEyNiwgMSwgOTYsIAotICAgIDEyNiwgMSwgMjUzLCA1NywgMTI2LCAxLCAyNTIsIDIwMSwgMTI2LCAxLCAyNTIsIDI0OCwgMTI2LCAxLCAyNTIsIDIyNywgCi0gICAgMTI2LCAxLCAyNTIsIDI0NywgMTI2LCAxLCAyNTMsIDgsIDEyNiwgMSwgMTU0LCAxMjYsIDEsIDI1MiwgMjExLCAxMjYsIDEsIAotICAgIDIxMywgMTI2LCAxLCAyNTMsIDQxLCAxMjYsIDEsIDI1MywgMzAsIDEyNiwgMSwgMjUyLCAyMjMsIDEyNiwgMSwgMjUzLCA1OSwgCi0gICAgMTI2LCAxLCAyNTMsIDQ4LCAxMjYsIDEsIDI1MywgODIsIDEyNiwgMSwgMjUyLCAyNTIsIDEyNiwgMSwgMjUzLCA3MywgMTI2LCAKLSAgICAxLCAyNTMsIDAsIDEyNiwgMSwgMjUzLCAyMSwgMTI2LCAxLCAyNTMsIDk4LCAxMjYsIDEsIDI1MywgNTAsIDEyNiwgMSwgCi0gICAgMTk4LCAxMjYsIDEsIDI1MiwgMjM5LCAxMjYsIDEsIDI1MiwgMjI5LCAxMjYsIDEsIDI1MywgMTMsIDEyNiwgMSwgMjUzLCAKLSAgICAxNCwgMTI2LCAxLCAzLCAxOTEsIDEyNiwgMSwgMTkxLCAxMjYsIDEsIDMsIDI1MiwgMjMzLCAxMjYsIDEsIDI1MiwgMjMzLCAKLSAgICAxMjYsIDEsIDMsIDI1MiwgMjUxLCAxMjYsIDEsIDI1MiwgMjUxLCAxMjYsIDEsIDIwOCwgMTI2LCAxLCAyNTMsIDM3LCAxMjYsIAotICAgIDEsIDI1MywgMywgMTI2LCAxLCAyNTMsIDM2LCAxMjYsIDEsIDI1MiwgMjQ2LCAxMjYsIDEsIDMsIDI1MiwgMjA4LCAxMjYsIAotICAgIDEsIDI1MiwgMjA4LCAxMjYsIDEsIDI1MywgMjcsIDEyNiwgMSwgMjUyLCAyNTAsIDEyNiwgMSwgMjUzLCAxMCwgMTI2LCAxLCAKLSAgICAxOTksIDEyNiwgMSwgMjUzLCAxMzksIDEyNiwgMSwgMywgMTc3LCAxMjYsIDEsIDMsIDI1MywgNiwgMzYsIDIyMiwgMjUyLCAKLSAgICAyMzcsIDEwNywgMjQwLCAxODEsIDc2LCAzNiwgMjIyLCAyNTIsIDIyOSwgMTg5LCAyNDAsIDE4MSwgNzYsIDIyMiwgMjUyLCAKLSAgICAyMzcsIDEwNywgMjQwLCAxODEsIDc2LCAyMjIsIDI1MiwgMjI5LCAxODksIDI0MCwgMTgxLCA3NiwgMTI2LCAyMzEsIDIyNSwgCi0gICAgNzYsIDEyNiwgMjM3LCAxMDcsIDIzMSwgMjI1LCA3NiwgMTI2LCAyMzUsIDkwLCAyNDYsIDk1LCAyMjIsIDI1MiwgNDcsIAotICAgIDIzNSwgNjksIDQ4LCAxLCAzLCA1NywgNDgsIDEsIDU3LCA0OCwgMSwgMywgNzQsIDQ4LCAxLCA3NCwgNDgsIDEsIDMsIDY2LCAKLSAgICA0OCwgMSwgNjYsIDQ4LCAxLCAzLCA3MiwgNDgsIDEsIDcyLCA0OCwgMSwgMywgNzMsIDQ4LCAxLCA3MywgNDgsIDEsIDE3NywgCi0gICAgNDgsIDEsIDI1MiwgMjA1LCA0OCwgMSwgMjUzLCA3LCA0OCwgMSwgMjUzLCAzOSwgNDgsIDEsIDI1MywgMzQsIDQ4LCAxLCAKLSAgICAyNTMsIDQwLCA0OCwgMSwgMjUzLCA2LCA0OCwgMSwgMjUzLCAxMDMsIDQ4LCAxLCAyNTMsIDMzLCA0OCwgMSwgMjUzLCA3NiwgCi0gICAgNDgsIDEsIDI1MiwgMjA0LCA0OCwgMSwgMjUyLCAyMjYsIDQ4LCAxLCAyNTMsIDI0LCA0OCwgMSwgMjUzLCA3MiwgNDgsIDEsIAotICAgIDI1MywgMjYsIDQ4LCAxLCAyNTMsIDk3LCA0OCwgMSwgMjUzLCA1MiwgNDgsIDEsIDI1MywgNDYsIDQ4LCAxLCAyNTMsIDI1LCAKLSAgICA0OCwgMSwgMjUzLCA2NSwgNDgsIDEsIDI1MiwgMjAyLCA0OCwgMSwgMjUyLCAyMDMsIDQ4LCAxLCAyNTMsIDQ0LCA0OCwgMSwgCi0gICAgMjUzLCAxMiwgNDgsIDEsIDMsIDI1MywgMTgsIDQ4LCAxLCAyNTMsIDE4LCA0OCwgMSwgMjUzLCAzMSwgNDgsIDEsIDI1MywgCi0gICAgOSwgNDgsIDEsIDI1MywgMjAsIDQ4LCAxLCA5NiwgNDgsIDEsIDI1MywgNTcsIDQ4LCAxLCAyNTIsIDIwMSwgNDgsIDEsIAotICAgIDI1MiwgMjQ4LCA0OCwgMSwgMjUyLCAyMjcsIDQ4LCAxLCAyNTIsIDI0NywgNDgsIDEsIDI1MywgOCwgNDgsIDEsIDE1NCwgCi0gICAgNDgsIDEsIDI1MiwgMjExLCA0OCwgMSwgMjEzLCA0OCwgMSwgMjUzLCA0MSwgNDgsIDEsIDI1MywgMzAsIDQ4LCAxLCAyNTIsIAotICAgIDIyMywgNDgsIDEsIDI1MywgNTksIDQ4LCAxLCAyNTMsIDQ4LCA0OCwgMSwgMjUzLCA4MiwgNDgsIDEsIDI1MiwgMjUyLCA0OCwgCi0gICAgMSwgMjUzLCA3MywgNDgsIDEsIDI1MywgMCwgNDgsIDEsIDI1MywgMjEsIDQ4LCAxLCAyNTMsIDk4LCA0OCwgMSwgMjUzLCAKLSAgICA1MCwgNDgsIDEsIDE5OCwgNDgsIDEsIDI1MiwgMjM5LCA0OCwgMSwgMjUyLCAyMjksIDQ4LCAxLCAyNTMsIDEzLCA0OCwgMSwgCi0gICAgMjUzLCAxNCwgNDgsIDEsIDMsIDE5MSwgNDgsIDEsIDE5MSwgNDgsIDEsIDMsIDI1MiwgMjMzLCA0OCwgMSwgMjUyLCAyMzMsIAotICAgIDQ4LCAxLCAzLCAyNTIsIDI1MSwgNDgsIDEsIDI1MiwgMjUxLCA0OCwgMSwgMjA4LCA0OCwgMSwgMjUzLCAzNywgNDgsIDEsIAotICAgIDI1MywgMywgNDgsIDEsIDI1MywgMzYsIDQ4LCAxLCAyNTIsIDI0NiwgNDgsIDEsIDMsIDI1MiwgMjA4LCA0OCwgMSwgMjUyLCAKLSAgICAyMDgsIDQ4LCAxLCAyNTMsIDI3LCA0OCwgMSwgMjUyLCAyNTAsIDQ4LCAxLCAyNTMsIDEwLCA0OCwgMSwgMTk5LCA0OCwgMSwgCi0gICAgMjUzLCAxMzksIDQ4LCAxLCAzLCAxNzcsIDQ4LCAxLCAzLCAyNTMsIDYsIDQ4LCAxLCAyNTIsIDI0MywgNDgsIDEsIDI1MywgCi0gICAgMTM4LCA0OCwgMSwgMjUzLCA5NSwgNDgsIDEsIDI1MywgMTA4LCA0OCwgMjM3LCA0NCwgMjQ2LCAxNjQsIDIyMiwgMjUyLCAKLSAgICAyMzIsIDM5LCAyNDAsIDE4MSwgNzYsIDQ4LCAyMzEsIDIyNSwgNzYsIDQ4LCAyMzcsIDEwNywgMjMxLCAyMjUsIDc2LCA0OCwgCi0gICAgMjM1LCA5MCwgMjQ0LCA2NCwgMTc2LCAxLCAyNTQsIDE4NSwgMTc2LCAxLCAyNTQsIDE4NywgMTc2LCAxLCAxODUsIDE3NiwgCi0gICAgMSwgMjU0LCAxOTEsIDE3NiwgMSwgMjIyLCAyMjIsIDE3NiwgMSwgMjU0LCAxODMsIDE3NiwgMSwgMTk5LCAxNzYsIDEsIAotICAgIDE0OSwgMTc2LCAxLCAyMTQsIDE3NiwgMSwgMjU0LCAxODYsIDE3NiwgMSwgMjEyLCAxNzYsIDEsIDI1NCwgMTkyLCAxNzYsIAotICAgIDEsIDI1NCwgMTk2LCAxNzYsIDEsIDI1NCwgMTg0LCAxNzYsIDEsIDI1NCwgMTc4LCAxNzYsIDEsIDI1MywgMjExLCAxNzYsIAotICAgIDEsIDI1MywgMTYwLCAxNzYsIDEsIDE0NiwgMTc2LCAxLCAyNTQsIDE5MywgMTc2LCAxLCAyNTQsIDE5NCwgMTc2LCAxLCAKLSAgICAxOTMsIDE3NiwgMSwgNTcsIDE3NiwgMSwgNzMsIDE3NiwgMSwgNzIsIDE3NiwgMSwgMjUzLCAxNDQsIDE3NiwgMSwgMjUyLCAKLSAgICAyMjEsIDE3NiwgMSwgMjUzLCAxNzYsIDE3NiwgMSwgMjUyLCAyMjIsIDE3NiwgMSwgMjUzLCAxMTksIDE3NiwgMSwgMjUzLCAKLSAgICA1LCAxNzYsIDEsIDI1MiwgMjMyLCAxNzYsIDEsIDI0NywgOSwgMTc2LCAxLCAyNDcsIDAsIDE3NiwgMSwgMjUzLCA5OSwgCi0gICAgMTc2LCAxLCA3NCwgMTc2LCAxLCA2NiwgMTc2LCAxLCAyNTMsIDIzMywgMTc2LCAxLCAxOTYsIDE3NiwgMSwgMjUzLCA2OSwgCi0gICAgMTc2LCAxLCAyNTQsIDYxLCAxNzYsIDEsIDI1MywgMjMwLCAyNiwgMSwgMjM1LCA3NywgMjYsIDEsIDIyOCwgMTk1LCAyNiwgCi0gICAgMSwgMjI4LCAxOTksIDI2LCAxLCAyMzcsIDEzOSwgMjYsIDEsIDIyOCwgMjAxLCAyNiwgMSwgMjI4LCAyMDIsIDI2LCAxLCAKLSAgICAyMzUsIDgxLCAyNiwgMSwgMjI4LCAyMDksIDI2LCAxLCAyMzcsIDE0MiwgMjYsIDEsIDIyNywgMTk3LCAyNiwgMSwgMjI4LCAKLSAgICAyMDQsIDI2LCAxLCAyMjgsIDIwNSwgMjYsIDEsIDIyOSwgMTg4LCAyNiwgMSwgMjI3LCAxNDAsIDI2LCAxLCAyMjcsIDEzOSwgCi0gICAgMjYsIDEsIDIyOCwgMTkzLCAyNiwgMSwgMjM3LCAxMzcsIDI2LCAxLCAyMzcsIDE0MSwgMjYsIDEsIDIyOSwgMTkzLCAyNiwgCi0gICAgMSwgMjI5LCAxODAsIDI2LCAxLCAyNDAsIDIxMywgMjYsIDEsIDIzMCwgMTU5LCAyNiwgMSwgMjM3LCAxMzQsIDI2LCAxLCAKLSAgICAyMzcsIDEzMCwgMjYsIDEsIDIyOSwgMTkxLCAyNiwgMSwgMjMzLCAxMjgsIDI2LCAxLCAyMzMsIDEzMSwgMjYsIDEsIDIzMywgCi0gICAgMTM4LCAyNiwgMSwgMjMzLCAxMzMsIDI2LCAxLCAyMzcsIDEzMywgMjYsIDEsIDU3LCAyNiwgMSwgMjUzLCA0LCAyNiwgMSwgCi0gICAgMTkxLCAyNiwgMSwgMjQ3LCA2MSwgMjYsIDEsIDI1MywgMTc3LCAyNiwgMSwgNzIsIDI2LCAxLCAyNDcsIDIzMiwgMjYsIDEsIAotICAgIDI1MywgOTYsIDI2LCAxLCA3MywgMjYsIDEsIDI1MiwgMjA4LCAyNiwgMSwgMjQ3LCAyMjMsIDI2LCAxLCAyNTMsIDE1LCAyNiwgCi0gICAgMSwgMjUyLCAyNTEsIDI2LCAxLCA2NiwgMjYsIDEsIDI0NywgMjI3LCAyNiwgMSwgMjUyLCAyNTAsIDI2LCAxLCAyNTMsIDI3LCAKLSAgICAyNiwgMSwgMjUyLCAyMzMsIDI2LCAxLCAyNTMsIDEwMCwgMjYsIDEsIDI1MywgMjgsIDI2LCAxLCA3NCwgMjYsIDIzNSwgOTIsIAotICAgIDI2LCAxLCAyMjksIDIxOSwgMjYsIDEsIDIyNywgMTk2LCAyNiwgMSwgMjI5LCAyMDQsIDI2LCAxLCAyMjcsIDE0NCwgMjYsIAotICAgIDEsIDIyMiwgMjQxLCAyNiwgMSwgMjI3LCAyMTAsIDI2LCAxLCAyMjIsIDI1MywgMjYsIDEsIDIyNywgMTUxLCAyNiwgMSwgCi0gICAgMjIyLCAyNDIsIDI2LCAxLCAyMjgsIDIwMCwgMjYsIDEsIDIyOSwgMjAwLCAyNiwgMSwgMjI3LCAxNDMsIDI2LCAxLCAyMjcsIAotICAgIDEzNywgMjYsIDEsIDIyNywgMjA4LCAyNiwgMSwgMjI3LCAyMDksIDI2LCAxLCAyMjIsIDIzOSwgMjYsIDEsIDIyMiwgMjQwLCAKLSAgICAyNiwgMSwgMjI4LCAyMTUsIDI2LCAxLCAyMjcsIDE0OSwgMjYsIDEsIDIyNywgMTM4LCAyNiwgMSwgMjIyLCAyMzEsIDI2LCAKLSAgICAxLCAyMjgsIDIwNywgMjYsIDEsIDIyOSwgMjE2LCAyNiwgMSwgMjI4LCAyMDgsIDI2LCAxLCAyMjksIDE5MCwgMjYsIDEsIAotICAgIDIyOSwgMjE1LCAyNiwgMSwgMjMzLCAxNzQsIDI2LCAxLCAyMjksIDE5MiwgMjYsIDEsIDIzMiwgMTMsIDI2LCAxLCAyMjcsIAotICAgIDE1NSwgMjYsIDEsIDIyMiwgMjU0LCAyNiwgMSwgMjIzLCA1NiwgMjYsIDEsIDIyOSwgMjE4LCAyNiwgMSwgMjI4LCAyMTAsIAotICAgIDI2LCAxLCAyMzgsIDgzLCAyNiwgMSwgMjM1LCAyMzMsIDI2LCAxLCAyNDIsIDMxLCAyNiwgMSwgMjM1LCAyMzQsIDI2LCAxLCAKLSAgICAyMzgsIDg0LCAyNiwgMSwgMjQyLCAzMywgMjYsIDEsIDIzNywgMjI4LCAyNiwgMSwgMjM1LCAyNDksIDkwLCAyMzAsIDEyOSwgCi0gICAgMjM2LCAxNDIsIDc2LCA5MCwgMjMwLCAxMjksIDIzNSwgMzcsIDc2LCA5MCwgMjMwLCAxMjksIDE2OCwgNzYsIDkwLCAyMzAsIAotICAgIDEyOSwgMTM1LCA3NiwgOTAsIDIzMCwgMTI5LCAxNTIsIDc2LCA5MCwgMjMwLCAxMjksIDI0NiwgMTYwLCA3NiwgOTAsIDIzMCwgCi0gICAgMTI5LCAyNTIsIDIyOCwgNzYsIDkwLCAyMzAsIDEyOSwgMjM3LCA0NCwgNzYsIDkwLCAyMzAsIDEyOSwgMjM3LCA1OSwgNzYsIAotICAgIDkwLCAyMzAsIDEyOSwgMjQwLCAyMjUsIDc2LCA5MCwgMjMwLCAxMjksIDIzNywgMTQ1LCA3NiwgOTAsIDIzMCwgMTI5LCAKLSAgICAyNDAsIDIzOSwgNzYsIDkwLCAyMzAsIDEyOSwgMjM3LCAxODIsIDc2LCA5MCwgMjMwLCAxMjksIDIzOSwgNywgNzYsIDkwLCAKLSAgICAyMzAsIDEyOSwgMjQxLCAxMjYsIDc2LCA5MCwgMjMwLCAxMjksIDI1MywgMjQ1LCA3NiwgMTc2LCAxLCAyNTMsIDQ4LCAxNzYsIAotICAgIDEsIDI1MywgNzIsIDE3NiwgMSwgMjUzLCAxMDQsIDE3NiwgMSwgMjUzLCA0MCwgMTc2LCAxLCAyNTIsIDIzMSwgMTc2LCAxLCAKLSAgICAyNDksIDIyOCwgMTc2LCAxLCAyNTIsIDIyMCwgMTc2LCAxLCAyNDgsIDEyNCwgMTc2LCAxLCAyNTMsIDE0OSwgMTc2LCAxLCAKLSAgICAyNDgsIDIzNiwgMTc2LCAxLCAyNTAsIDExOSwgMTc2LCAxLCAyNDgsIDE4OCwgMTc2LCAxLCAyNTMsIDc4LCAxNzYsIDEsIAotICAgIDI1MSwgNTUsIDE3NiwgMSwgMjQyLCA0OCwgMTc2LCAxLCAyNDIsIDY3LCAxNzYsIDEsIDI1MywgMTQwLCAxNzYsIDEsIDI1MywgCi0gICAgMTI4LCAxNzYsIDEsIDI1MSwgOTgsIDE3NiwgMSwgMjQ0LCAxMCwgMTc2LCAzNSwgMSwgMjU0LCAxODcsIDE3NiwgMzUsIDEsIAotICAgIDI1NCwgMTgzLCAxNzYsIDM1LCAxLCAyNTQsIDE4NiwgMTc2LCAzNSwgMSwgMjEyLCA5LCAxOTUsIDI1NCwgMTgzLCA5LCAKLSAgICAxOTUsIDI1NCwgMTcwLCA5LCAxOTUsIDI1NCwgMTcyLCA5LCAxOTUsIDI0OSwgMTM2LCA5LCAxOTUsIDI1NCwgMTAsIDksIAotICAgIDE5NSwgMjUwLCAxMDksIDksIDE5NSwgMjUwLCAxMDYsIDksIDE5NSwgMjUzLCAyMjYsIDksIDE5NSwgMjQzLCAyNTMsIDksIAotICAgIDE5NSwgMjQ1LCAyMzQsIDksIDE5NSwgMjUwLCAxMDcsIDksIDE5NSwgMjQzLCAyNTQsIDksIDE5NSwgMjQzLCAyMzQsIDksIAotICAgIDE5NSwgMjUwLCAxMDgsIDksIDE5NSwgMjQzLCAyNTUsIDksIDE5NSwgMTk5LCA5LCAxOTUsIDIxMiwgOSwgMTk1LCAxOTMsIAotICAgIDksIDE5NSwgMjU0LCAxODcsIDksIDE5NSwgMjU0LCAxNTAsIDksIDE5NSwgMjIyLCAyMjIsIDksIDE5NSwgMjUzLCAyMjgsIAotICAgIDksIDE5NSwgMjUzLCAyMjQsIDksIDE5NSwgMjU0LCAxNTQsIDksIDE5NSwgMjUxLCAyNDcsIDksIDE5NSwgMjUzLCAxOTUsIAotICAgIDksIDE5NSwgMjU0LCAxNDYsIDksIDE5NSwgMjU0LCAxMjcsIDksIDE5NSwgMjU0LCAxMzksIDksIDE5NSwgMjU0LCAxNjAsIAotICAgIDksIDE5NSwgMjUyLCAyLCA5LCAxOTUsIDI1MSwgMjQ2LCA5LCAxOTUsIDI0MywgMjUyLCA5LCAxOTUsIDIzOSwgMzYsIDksIAotICAgIDE5NSwgMjU0LCAxMzAsIDksIDE5NSwgMjU0LCAxOTYsIDQ4LCAxLCAzLCAyNTMsIDM0LCA0OCwgMSwgMywgMjUzLCAyNCwgCi0gICAgNDgsIDEsIDMsIDI1MywgMjYsIDQ4LCAxLCAzLCA5NiwgNDgsIDEsIDMsIDI1MiwgMjI3LCA0OCwgMSwgMywgMTU0LCA0OCwgCi0gICAgMSwgMywgMjUzLCA0MSwgNDgsIDEsIDMsIDI1MywgNTksIDQ4LCAxLCAzLCAyNTIsIDI1MiwgNDgsIDEsIDMsIDI1MywgMjEsIAotICAgIDQ4LCAxLCAzLCAyNTIsIDIyOSwgNDgsIDEsIDMsIDIwOCwgNDgsIDEsIDMsIDI1MywgMzcsIDQ4LCAxLCAzLCAyNTMsIDMsIAotICAgIDQ4LCAxLCAzLCAyNTMsIDM2LCA0OCwgMSwgMywgMjUyLCAyNDYsIDkzLCAyNiwgMjM1LCA3NywgOTMsIDI2LCAyMzcsIDEzOSwgCi0gICAgOTMsIDI2LCAyMzUsIDgxLCA5MywgMjYsIDIzNywgMTQyLCA5MywgMjYsIDIzNywgMTM3LCA5MywgMjYsIDIzNywgMTQxLCAKLSAgICA5MywgMjYsIDI0MCwgMjEzLCA5MywgMjYsIDIzNywgMTM0LCA5MywgMjYsIDIzNywgMTMwLCA5MywgMjYsIDIzMywgMTI4LCAKLSAgICA5MywgMjYsIDIzMywgMTMxLCA5MywgMjYsIDIzMywgMTM4LCA5MywgMjYsIDIzMywgMTMzLCA5MywgMjYsIDIzNywgMTMzLCAKLSAgICA5MywgMjYsIDIzOCwgMTQsIDU3LCA5MywgMjYsIDI0MSwgMjAyLCA1NywgOTMsIDI2LCAyMzgsIDc1LCA1NywgOTMsIDI2LCAKLSAgICAyNDEsIDIyMywgNTcsIDkzLCAyNiwgMjQxLCAxOTMsIDU3LCA5MywgMjYsIDI0MSwgMjEyLCA1NywgOTMsIDI2LCAyNDgsIAotICAgIDE2MywgNTcsIDkzLCAyNiwgMjQxLCA0MywgNTcsIDkzLCAyNiwgMjQxLCAzNCwgNTcsIDkzLCAyNiwgMjM1LCAxNTcsIDU3LCAKLSAgICA5MywgMjYsIDIzNSwgMTgzLCA1NywgOTMsIDI2LCAyMzUsIDIyNCwgNTcsIDkzLCAyNiwgMjM1LCAxOTksIDU3LCA5MywgMjYsIAotICAgIDI0MSwgMTU3LCA1NywgOTMsIDI2LCAyNDEsIDM0LCA2NiwgOTMsIDIzNywgMTU5LCAxMTYsIDIzOSwgMTcxLCA5MywgMjM3LCAKLSAgICAxNTksIDExNiwgMTMwLCAyNTMsIDU5LCA5MywgMTMzLCAxMTgsIDkzLCAxMzMsIDExMywgOTMsIDEzMywgMTY2LCA5MywgCi0gICAgMTMzLCAxNTgsIDkzLCAxMzMsIDE3MywgOTMsIDEzMywgMTgzLCA5MywgMTMzLCAxOTQsIDkzLCAxMzMsIDE4NywgOTMsIAotICAgIDEzMywgMTkyLCA5MywgMTMzLCAyNDYsIDE3OSwgOTMsIDEzMywgMjQwLCAyMTEsIDkzLCAxMzMsIDI0MCwgMjA3LCA5MywgCi0gICAgMTMzLCAyMzcsIDE2OCwgOTMsIDEzMywgMjQyLCAyNSwgOTMsIDEzMywgMjM4LCAyNCwgOTMsIDEzMywgMjM3LCA5OSwgOTMsIAotICAgIDEzMywgMjQ3LCA1NCwgOTMsIDEzMywgMjM4LCA2NiwgOTMsIDEzMywgMjQxLCAxNTEsIDkzLCAxMzMsIDIzMywgMjM4LCA5MywgCi0gICAgMTMzLCAyNDEsIDE5OCwgOTMsIDEzMywgMjMzLCAyNDAsIDkzLCAxMzMsIDIzMCwgMTgzLCA5MywgMTMzLCAyMjUsIDEwOCwgCi0gICAgOTMsIDEzMywgMjM4LCAxNiwgOTMsIDEzMywgMjMxLCAxMzMsIDkzLCAxMzMsIDI0MiwgMjMxLCA5MywgMTMzLCAyMzgsIDY3LCAKLSAgICA5MywgMTMzLCAyMzAsIDE5NywgOTMsIDEzMywgMjI5LCAxOTgsIDkzLCAxMzMsIDIzMiwgNDIsIDkzLCAxMzMsIDIzMiwgMTQsIAotICAgIDkzLCAxMzMsIDIzMiwgMTg2LCA5MywgMTMzLCAyNDAsIDE0OCwgOTMsIDEzMywgMjQxLCAyMzMsIDkzLCAxMzMsIDIzOCwgCi0gICAgNDAsIDIyOSwgMjA4LCA1MywgMzMsIDY1LCAyMzcsIDk3LCAxMTgsIDMzLCA2NSwgMjM3LCA5NywgMTEzLCAzMywgNjUsIAotICAgIDIzNywgOTcsIDE2NiwgMzMsIDY1LCAyMzcsIDk3LCAxNTgsIDMzLCA2NSwgMjM3LCA5NywgMTczLCAzMywgNjUsIDIzNywgCi0gICAgOTcsIDE4MywgMzMsIDY1LCAyMzcsIDk3LCAxOTQsIDMzLCA2NSwgMjM3LCA5NywgMTg3LCAzMywgNjUsIDIzNywgOTcsIAotICAgIDE5MiwgMzMsIDY1LCAyMzUsIDgwLCAzMywgNjUsIDIzNywgMTA2LCAxMTgsIDMzLCA2NSwgMjM3LCAxMDYsIDExMywgMzMsIAotICAgIDY1LCAyMzcsIDEwNiwgMTY2LCAzMywgNjUsIDIzNywgMTA2LCAxNTgsIDMzLCA2NSwgMjM3LCAxMDYsIDE3MywgMzMsIDI2LCAKLSAgICAyMzUsIDc3LCAzMywgMjYsIDIzNywgMTM5LCAzMywgMjYsIDIzNSwgODEsIDMzLCAyNiwgMjM3LCAxNDIsIDMzLCAyNiwgCi0gICAgMjM3LCAxMzcsIDMzLCAyNiwgMjM3LCAxNDEsIDMzLCAyNiwgMjQwLCAyMTMsIDMzLCAyNiwgMjM3LCAxMzQsIDMzLCAyNiwgCi0gICAgMjM3LCAxMzAsIDMzLCAyNiwgMjMzLCAxMjgsIDMzLCAyNiwgMjMzLCAxMzEsIDMzLCAyNiwgMjMzLCAxMzgsIDMzLCAyNiwgCi0gICAgMjMzLCAxMzMsIDMzLCAyNiwgMjM3LCAxMzMsIDMzLCAyNiwgMjM4LCAxNCwgNTcsIDMzLCAyNiwgMjQxLCAyMDIsIDU3LCAKLSAgICAzMywgMjYsIDIzOCwgNzUsIDU3LCAzMywgMjYsIDI0MSwgMjIzLCA1NywgMzMsIDI2LCAyNDEsIDE5MywgNTcsIDMzLCAyNiwgCi0gICAgMjQxLCAyMTIsIDU3LCAzMywgMjYsIDI0OCwgMTYzLCA1NywgMzMsIDI2LCAyNDEsIDQzLCA1NywgMzMsIDI2LCAyNDEsIDM0LCAKLSAgICA1NywgMzMsIDI2LCAyMzUsIDE1NywgNTcsIDMzLCAyNiwgMjM1LCAxODMsIDU3LCAzMywgMjYsIDIzNSwgMjI0LCA1NywgMzMsIAotICAgIDI2LCAyMzUsIDE5OSwgNTcsIDMzLCAyNiwgMjQxLCAxNTcsIDU3LCAzMywgMjM3LCAxNTksIDExNiwgMjM2LCAyMywgMzMsIAotICAgIDIzNywgMTU5LCAxMTYsIDIzOSwgNTMsIDMzLCAyNiwgMjQxLCA0MywgNjYsIDIzNywgMTU5LCAyMzMsIDI0MiwgOTgsIDMzLCAKLSAgICAxMzMsIDExOCwgMzMsIDEzMywgMTEzLCAzMywgMTMzLCAxNjYsIDMzLCAxMzMsIDE1OCwgMzMsIDEzMywgMTczLCAzMywgCi0gICAgMTMzLCAxODMsIDMzLCAxMzMsIDE5NCwgMzMsIDEzMywgMTg3LCAzMywgMTMzLCAxOTIsIDMzLCAxMzMsIDI0NiwgMTc5LCAKLSAgICAzMywgMTMzLCAyNDAsIDIxMSwgMzMsIDEzMywgMjQwLCAyMDcsIDMzLCAxMzMsIDIzNywgMTY4LCAzMywgMTMzLCAyNDIsIAotICAgIDI1LCAzMywgMTMzLCAyMzgsIDI0LCAzMywgMTMzLCAyMzcsIDk5LCAzMywgMTMzLCAyNDcsIDU0LCAzMywgMTMzLCAyMzgsIAotICAgIDY2LCAzMywgMTMzLCAyNDEsIDE1MSwgMzMsIDEzMywgMjMzLCAyMzgsIDMzLCAxMzMsIDI0MSwgMTk4LCAzMywgMTMzLCAKLSAgICAyMzMsIDI0MCwgMzMsIDEzMywgMjMwLCAxODMsIDMzLCAxMzMsIDIyNSwgMTA4LCAzMywgMTMzLCAyMzgsIDE2LCAzMywgCi0gICAgMTMzLCAyMzYsIDIxNCwgMzMsIDEzMywgMjQ0LCAxMTYsIDMzLCAxMzMsIDIzNiwgNzYsIDMzLCAxMzMsIDIzMywgNDQsIDMzLCAKLSAgICAxMzMsIDIzMSwgNjcsIDMzLCAxMzMsIDIzOSwgMjAzLCAzMywgMTMzLCAyMzAsIDIyOCwgMzMsIDEzMywgMjQ0LCAxMywgMzMsIAotICAgIDEzMywgMjQwLCAxNDgsIDMzLCAxMzMsIDI0MywgMjAsIDMzLCAxMzMsIDIzNCwgMzcsIDMzLCAxMzMsIDI0MywgMTc3LCAzMywgCi0gICAgMTMzLCAyMzUsIDExMSwgMzMsIDEzMywgMjUwLCAyMzIsIDMzLCAxMzMsIDI0MCwgMTMyLCAzMywgMTMzLCAyMzcsIDQxLCAKLSAgICAzMywgMTMzLCAyMzIsIDIyOSwgMzMsIDEzMywgMjMzLCAxMiwgMzMsIDEzMywgMjM4LCA2NywgMzMsIDEzMywgMjMwLCAxOTcsIAotICAgIDMzLCAxMzMsIDIyOSwgMTk4LCAzMywgMTMzLCAyMzIsIDQyLCAzMywgMTMzLCAyMzIsIDE0LCAzMywgMTMzLCAyMzksIDE0MywgCi0gICAgMzMsIDY1LCAyMzcsIDEwNiwgMTgzLCAzMywgNjUsIDIzNywgMTA2LCAxOTQsIDMzLCA2NSwgMjM3LCAxMDYsIDE4NywgMzMsIAotICAgIDY1LCAyMzcsIDEwNiwgMTkyLCAzMywgNjUsIDIzNywgMjAzLCAzMywgNjUsIDI0MCwgMTg0LCAxMTgsIDMzLCA2NSwgMjQwLCAKLSAgICAxODQsIDExMywgMzMsIDY1LCAyNDAsIDE4NCwgMTY2LCAzMywgNjUsIDI0MCwgMTg0LCAxNTgsIDMzLCA2NSwgMjQwLCAxODQsIAotICAgIDE3MywgMzMsIDY1LCAyNDAsIDE4NCwgMTgzLCAzMywgNjUsIDI0MCwgMTg0LCAxOTQsIDMzLCA2NSwgMjQwLCAxODQsIDE4NywgCi0gICAgMzMsIDY1LCAyNDAsIDE4NCwgMTkyLCAzMywgNjUsIDIzNywgMTAwLCA5MCwgMTY3LCAxNCwgMzIsIDIzNCwgMTMyLCA5MCwgCi0gICAgMTY3LCAxNCwgMzIsIDIzMiwgMTg1LCA5MCwgMTY3LCAxNCwgMzIsIDIzOSwgOTgsIDkwLCAxNjcsIDE0LCAzMiwgMjM4LCAKLSAgICA5OSwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDI1MiwgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDM2LCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI0NCwgMzUsIDkwLCAxNjcsIDE0LCAzMiwgMjM1LCAyNTUsIDkwLCAxNjcsIDE0LCAzMiwgMjMxLCAxMzgsIDkwLCAxNjcsIAotICAgIDE0LCAzMiwgMjM0LCAxNzQsIDkwLCAxNjcsIDE0LCAzMiwgMjMyLCAyMzUsIDkwLCAxNjcsIDE0LCAzMiwgMjMyLCAxMDgsIAotICAgIDM3LCAyNTMsIDIyNCwgMzcsIDI0OSwgMjMxLCAzNywgMjU0LCA1MiwgMjM2LCAxMzUsIDIzMiwgMjIwLCA1MywgMzMsIDQ4LCAKLSAgICA1NywgMzMsIDQ4LCA3NCwgMzMsIDQ4LCA2NiwgMzMsIDQ4LCA3MiwgMzMsIDQ4LCA3MywgMzMsIDQ4LCAxNzcsIDMzLCA0OCwgCi0gICAgMjUzLCA3LCAzMywgNDgsIDI1MywgMzQsIDMzLCA0OCwgMjUzLCA2LCAzMywgNDgsIDI1MywgMzMsIDMzLCA0OCwgMjUyLCAKLSAgICAyMDQsIDMzLCA0OCwgMjUzLCAyNCwgMzMsIDQ4LCAyNTMsIDI2LCAzMywgNDgsIDI1MywgNTIsIDMzLCA0OCwgMjUzLCAyNSwgCi0gICAgMzMsIDQ4LCAyNTIsIDIwMiwgMzMsIDQ4LCAyNTMsIDQ0LCAzMywgNDgsIDI1MywgMTgsIDMzLCA0OCwgMjUzLCA5LCAzMywgCi0gICAgNDgsIDk2LCAzMywgNDgsIDI1MiwgMjAxLCAzMywgNDgsIDI1MiwgMjQ4LCAzMywgNDgsIDI1MiwgMjI3LCAzMywgNDgsIAotICAgIDI1MiwgMjQ3LCAzMywgNDgsIDI1MywgOCwgMzMsIDQ4LCAxNTQsIDMzLCA0OCwgMjUzLCA0MSwgMzMsIDQ4LCAyNTMsIDU5LCAKLSAgICAzMywgNDgsIDI1MiwgMjUyLCAzMywgNDgsIDI1MywgMjEsIDMzLCA0OCwgMTk4LCAzMywgNDgsIDI1MiwgMjM5LCAzMywgNDgsIAotICAgIDI1MiwgMjI5LCAzMywgNDgsIDI1MywgMTMsIDMzLCA0OCwgMjUzLCAxNCwgMzMsIDQ4LCAxOTEsIDMzLCA0OCwgMjUyLCAKLSAgICAyMzMsIDMzLCA0OCwgMjUyLCAyNTEsIDMzLCA0OCwgMjA4LCAzMywgNDgsIDI1MywgMzcsIDMzLCA0OCwgMjUzLCAzLCAzMywgCi0gICAgNDgsIDI1MywgMzYsIDMzLCA0OCwgMjUyLCAyNDYsIDMzLCA0OCwgMjUyLCAyMDgsIDMzLCA0OCwgMjUzLCAyNywgMzMsIDQ4LCAKLSAgICAyNTIsIDI1MCwgMzMsIDQ4LCAyNTMsIDEwLCAzNywgMjM1LCAyNDgsIDM3LCAyMzUsIDI1MywgMzcsIDIzOCwgOTYsIDM3LCAKLSAgICAyNDIsIDQxLCAzNywgMjM2LCAxMTIsIDM3LCAyNDQsIDExLCAzNywgMjUyLCA1NSwgMzcsIDIzMiwgMTgxLCAzNywgMjM4LCAKLSAgICAxOTYsIDM3LCAyNDUsIDU0LCAzNywgMjQ1LCA1NSwgMzcsIDIzOSwgNTUsIDM3LCAyMzQsIDEzNiwgMzcsIDIzNCwgMTM3LCAKLSAgICAzNywgMjM4LCAyMzQsIDM3LCAyMzgsIDIzMywgMzcsIDI0MywgMTQ5LCAzNywgMjM4LCAyNDgsIDM3LCAyMzYsIDEyNywgMzcsIAotICAgIDIzNCwgMTEyLCAzNywgMjQ0LCA2MCwgMzcsIDIzMCwgNzMsIDM3LCAyMjksIDM0LCAzNywgMjMxLCA5MywgMzcsIDIzNiwgCi0gICAgOTksIDM3LCAyMzEsIDc3LCAzNywgMjMxLCA5NSwgMzcsIDIzNCwgMTQyLCAzNywgMjM5LCA2MCwgMzcsIDIzNiwgMTI0LCAKLSAgICAzNywgMjM5LCA3MywgMzcsIDIzNCwgMjEyLCAzNywgMjMzLCAxNywgMzcsIDIzNCwgMjIzLCAzNywgMjM5LCAyNDEsIDM3LCAKLSAgICAyMzksIDI0MiwgMzcsIDIzOCwgMTY1LCAzNywgMjQzLCA1OSwgMzcsIDI0MywgNzksIDM3LCAyNTIsIDI3LCAzNywgMjQ0LCAKLSAgICAxNjYsIDM3LCAyMzksIDE1NiwgMzcsIDIzOSwgNCwgMzcsIDIzMiwgMjM3LCAzNywgMjM5LCAxNzksIDM3LCAyMzQsIDExLCAKLSAgICAzNywgMjMxLCAxMTksIDM3LCAyMzYsIDE4NywgMzcsIDI0NSwgNzUsIDM3LCAyNDIsIDIwOCwgMzcsIDIzMiwgMjA0LCAzNywgCi0gICAgMjM2LCAxMDcsIDM3LCAyMzIsIDkwLCAzNywgMjM5LCAyOSwgMzcsIDIzMSwgNzgsIDM3LCAyNDUsIDY2LCAzNywgMjM2LCAKLSAgICAxODUsIDM3LCAyMzYsIDEwNSwgMzcsIDIzOSwgMTg5LCAzNywgMjM5LCAxODYsIDM3LCAyMzgsIDExNywgMzcsIDIzNiwgCi0gICAgMTkwLCAzNywgMjM2LCAxNCwgMzcsIDI0OCwgNjQsIDM3LCAyMzksIDIwMiwgMzcsIDIzOSwgMjYsIDM3LCAyNDMsIDIzMiwgCi0gICAgMzcsIDIzNCwgMTQ3LCAzNywgMjM5LCA5NCwgMzcsIDIzOSwgOTMsIDM3LCAyMzYsIDE0OCwgMzcsIDIzNCwgMTQ5LCAzNywgCi0gICAgMjM0LCAxNjEsIDM3LCAyNDQsIDE0OCwgMzcsIDIzMSwgMTAyLCAzNywgMjQxLCA1MCwgMzcsIDIzNCwgMTU4LCAzNywgMjM0LCAKLSAgICAxNTcsIDM3LCAyNDAsIDkxLCAzNywgMjQwLCA5MiwgMzcsIDI0NiwgOTksIDM3LCAyMzQsIDIwOSwgMzcsIDI0NSwgMTE3LCAKLSAgICAzNywgMjM5LCAyMzAsIDM3LCAyMzQsIDIxMSwgMzcsIDI0NSwgMTE0LCAzNywgMjMzLCAxMywgMzcsIDI0MCwgODMsIDkwLCAKLSAgICAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDI0MCwgMTI2LCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAxMTgsIDkwLCAxNjcsIAotICAgIDE0LCAzMiwgMjQ2LCAxODAsIDExMywgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMTY2LCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI0NiwgMTgwLCAxNTgsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDE3MywgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgCi0gICAgMTgzLCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAxOTQsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDE4NywgOTAsIAotICAgIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMTkyLCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAyNDYsIDE3OSwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjM1LCA2OCwgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjM1LCA3MiwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjMxLCAyMzQsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDIzMSwgMjMxLCA5MCwgMTY3LCAKLSAgICAxNCwgMzIsIDI0NiwgMTgwLCAyMzMsIDE0MSwgOTAsIDE2NywgMTQsIDMyLCAyNDYsIDE4MCwgMjMzLCAxMzUsIDkwLCAxNjcsIAotICAgIDE0LCAzMiwgMjQ2LCAxODAsIDIzMCwgMTQ4LCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAyMzEsIDIyOSwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjMxLCAyMzMsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDIzNSwgNTIsIDkwLCAxNjcsIAotICAgIDE0LCAzMiwgMjQ2LCAxODAsIDIyOSwgMjI0LCA5MCwgMTY3LCAxNCwgMzIsIDI0NiwgMTgwLCAyMjksIDIyNSwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNDYsIDE4MCwgMjI3LCAyMTMsIDkwLCAxNjcsIDE0LCAzMiwgMjQ2LCAxODAsIDIyOCwgMjIwLCAzNywgMjUwLCAKLSAgICA5NCwgMzcsIDI1MiwgMjAzLCAzNywgMjUyLCAyMjIsIDM3LCAxMjUsIDM3LCAyNTQsIDAsIDM3LCAyNTQsIDEyNiwgMzcsIAotICAgIDI1NCwgNDUsIDM3LCAyNTUsIDQsIDIzMywgOTEsIDM3LCAyNTUsIDQsIDIzNywgMTUyLCAzNywgMjUzLCAyMzMsIDM3LCAKLSAgICAyNTMsIDE0NSwgMjQ3LCA5MSwgMjM2LCAxMDIsIDM3LCAyNTMsIDE0NSwgMjQ3LCA5MSwgMjM2LCAyNTIsIDM3LCAyNTMsIAotICAgIDE0NSwgMjQ3LCA5MSwgMjM0LCAyMzksIDM3LCAyNTMsIDE0NSwgMjQ3LCA5MSwgMjM5LCAxMDEsIDM3LCAyMjgsIDIzMiwgCi0gICAgMzcsIDI1NCwgMjQyLCAyNDIsIDU2LCAzNywgMjUyLCAyMDEsIDM3LCAyNTQsIDIwNywgNTcsIDM3LCAxOTgsIDM3LCAxNzcsIAotICAgIDM3LCAyNTQsIDc4LCAzNywgMjUzLCAyNDYsIDM3LCAyNTQsIDU5LCAzNywgMjQ5LCAxNDIsIDM3LCAyNDQsIDUxLCAzNywgCi0gICAgMjU0LCAxMjksIDM3LCAyNTQsIDExMiwgMzcsIDI1NCwgMjA3LCAyNTQsIDE5MSwgMzcsIDI1NCwgMjA3LCAyMTQsIDM3LCAKLSAgICAyNTQsIDEwMSwgMzcsIDI1MywgMjQwLCAzNywgMjUzLCAyMjgsIDM3LCAyNTAsIDE2NSwgMzcsIDI1MSwgMTEsIDM3LCAyNTAsIAotICAgIDMwLCAzNywgMjUyLCAxOSwgMzcsIDI1NCwgMjA3LCAxNDksIDM3LCAyNTQsIDEwMywgMzcsIDI1NCwgNDQsIDM3LCAyNTQsIAotICAgIDgzLCAzNywgMjU0LCA1NiwgMzcsIDI1NCwgMTE2LCAzNywgMjU0LCAyMDcsIDE4NSwgMzcsIDI1MywgMjQ4LCAzNywgMjU0LCAKLSAgICAzOSwgMzcsIDI1NCwgODQsIDM3LCAyNTUsIDEyLCAyMzMsIDkxLCAzNywgMjU1LCAzLCAyMzMsIDkxLCAzNywgMjU1LCA2OCwgCi0gICAgMjMzLCA5MSwgMzcsIDI1NCwgMjUwLCAyMzMsIDkxLCAzNywgMjU1LCAxMiwgMjM3LCAxNTIsIDM3LCAyNTUsIDMsIDIzNywgCi0gICAgMTUyLCAzNywgMjU1LCA2OCwgMjM3LCAxNTIsIDM3LCAyNTQsIDI1MCwgMjM3LCAxNTIsIDM3LCAyNTUsIDY4LCAxMDcsIAotICAgIDE5MywgMzcsIDI1NSwgNjgsIDEwNywgMjU1LCA1OSwgMjMzLCA5MSwgMzcsIDIxMywgMzcsIDI0OCwgODUsIDM3LCAyNDgsIAotICAgIDEwMiwgMzcsIDI1MCwgNDAsIDM3LCAyNTEsIDE2OSwgMzcsIDI1MywgMTkxLCAxMDcsIDE5MywgMzcsIDI1MywgMTkxLCAKLSAgICAxMDcsIDI1NSwgNTksIDIzMywgOTEsIDM3LCAyNTQsIDEzNSwgMzcsIDI1NCwgMTE3LCAzNywgMjU0LCAyMDcsIDE5MywgMzcsIAotICAgIDI1NCwgMTA0LCAzNywgMjU0LCAxMzYsIDM3LCAyNTMsIDI1MSwgMzcsIDI1NCwgMjA3LCAxOTYsIDM3LCAyNTQsIDEwNiwgCi0gICAgMzcsIDI1NCwgODgsIDM3LCAyNTUsIDM5LCAyNDEsIDUwLCAzNywgMjU0LCAxMzcsIDM3LCAyNTQsIDExOCwgMzcsIDI1NCwgCi0gICAgMjA3LCAyNTQsIDE5NSwgMzcsIDI1NCwgMTA3LCAzNywgMjUzLCAyNDMsIDM3LCAyNTUsIDQwLCAyNDEsIDUwLCAzNywgMjU1LCAKLSAgICA2NywgMjQ4LCAxMjAsIDM3LCAyNTUsIDY4LCAyNDgsIDEyMCwgMzcsIDI1MywgMTQwLCAzNywgMjU0LCAzNSwgMzcsIDI1NCwgCi0gICAgMzcsIDM3LCAyNTQsIDM4LCAzNywgMjU1LCA2MiwgMTA3LCAyNTMsIDI0MCwgMzcsIDI1MywgNjYsIDM3LCAyNTQsIDQyLCAKLSAgICAzNywgMjU0LCA2NCwgMzcsIDE1NCwgMzcsIDI1MywgMjI2LCAzNywgMjUzLCA3OSwgMzcsIDI1MywgMTgzLCAzNywgMjU0LCAKLSAgICAyNTAsIDIzNCwgMjYsIDM3LCAyNTQsIDg1LCAzNywgMjU0LCA5NCwgMzcsIDI1NCwgOTUsIDM3LCAyNTAsIDIyOCwgMzcsIAotICAgIDI1NCwgOTcsIDM3LCAyNTUsIDM3LCAyMzcsIDIxNiwgMzcsIDI1MSwgMTQsIDM3LCAyNTEsIDIyLCAzNywgMjU0LCAxMzEsIAotICAgIDM3LCAyNTQsIDEzMiwgMzcsIDI1MSwgMTE4LCAzNywgMjU0LCAxMzQsIDM3LCAyNTQsIDE1MSwgMzcsIDI1NCwgOSwgMzcsIAotICAgIDI1NCwgMTY5LCAzNywgMjU1LCA2OSwgMTA3LCAxODUsIDM3LCAxMDIsIDEwNywgMTg1LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgCi0gICAgMjE4LCAxMTgsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDExMywgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMTY2LCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAxNTgsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDE3MywgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyNTIsIDIxOCwgMTgzLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAxOTQsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjUyLCAyMTgsIDE4NywgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMTkyLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyNDYsIDE3OSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjM1LCA2OCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjM1LCA3MiwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjMxLCAyMzQsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIzMSwgMjMxLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMzMsIDE0MSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjMzLCAxMzUsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIzMCwgMTQ4LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMzEsIDIyOSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjMxLCAyMzMsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIzNSwgNTIsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIyOSwgMjI0LCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMjksIDIyNSwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjI3LCAyMTMsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIyOCwgMjIwLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAyMjksIDE1NywgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgCi0gICAgMjMwLCAxMjEsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIyOCwgMTcxLCA5MCwgMTY3LCAxNCwgMzIsIDI1MiwgMjE4LCAKLSAgICAyMjgsIDE3MCwgOTAsIDE2NywgMTQsIDMyLCAyNTIsIDIxOCwgMjI5LCAxNTgsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIAotICAgIDIzNSwgODAsIDkwLCAxNjcsIDE0LCAzMiwgMjUyLCAyMTgsIDIzMCwgMTE4LCAzNywgMjQ3LCAxMiwgMTgxLCAzMiwgMjUyLCAKLSAgICAyMzAsIDIzNCwgMzgsIDIzNSwgMTIzLCAxODEsIDMyLCAyNTIsIDIzMCwgMjMzLCA3LCAyMzcsIDk5LCAxODEsIDMyLCAyMzAsIAotICAgIDI0NiwgMjU0LCAyMTcsIDI1MiwgMjMwLCAyMzAsIDIzMCwgMTgxLCAzMiwgMjM1LCAxMiwgMjM4LCAyMjIsIDE4MSwgMzIsIAotICAgIDIzMywgMjQ5LCAxODEsIDMyLCAyMzIsIDk5LCAxODEsIDMyLCAyNTIsIDIzMCwgMjQyLCA2MywgMTgxLCAzMiwgMjM1LCAKLSAgICAxNzcsIDIzMiwgNTUsIDE4MSwgMzIsIDMsIDIzNSwgMjE5LCAxODEsIDMyLCAyMzMsIDU0LCAxODEsIDMyLCAyMzksIDE4NSwgCi0gICAgMTgxLCAzMiwgMjMwLCAxMTMsIDE4MSwgMzIsIDIzMCwgNjAsIDE4MSwgMzIsIDI0MCwgMjI3LCAyMzAsIDkwLCAxODEsIDMyLCAKLSAgICAyMzQsIDE2MiwgMTgxLCAzMiwgMjMwLCA1NiwgMTgxLCAzMiwgMjMwLCAxODQsIDE4MSwgMzIsIDI1MiwgMTA1LCAyNTQsIAotICAgIDIyMywgMjUyLCAyMzAsIDIzNCwgNDcsIDE4MSwgMzIsIDIzMiwgNzEsIDE4MSwgMzIsIDIyNywgMTYxLCAxODEsIDMyLCAKLSAgICAyMzgsIDEyNSwgMjM0LCAyNDYsIDE4MSwgMzIsIDIzOCwgMjUxLCAxODEsIDMyLCAyMzMsIDI3LCAyMzgsIDk4LCAxODEsIAotICAgIDMyLCAyMzUsIDIwNSwgMTgxLCAzMiwgMjMxLCA4NywgMTgxLCAzMiwgMjQwLCAyMjcsIDIzNSwgMjE5LCAxODEsIDMyLCAKLSAgICAyNDQsIDE1MSwgMjMzLCAxOTUsIDE4MSwgMzIsIDI0MCwgMjI3LCAyMjcsIDE1MCwgMTgxLCAzMiwgMjUyLCAyMzAsIDIzNSwgCi0gICAgMjM3LCAyMzcsIDE2OCwgMTgxLCAzMiwgMjUyLCAyMzAsIDIzNCwgMzEsIDI0MCwgMjA3LCAxODEsIDMyLCAyMzEsIDg2LCAKLSAgICAxODEsIDMyLCAyMzIsIDE3NSwgMTgxLCAzMiwgMjM0LCAyMDgsIDE4MSwgMzIsIDI0MCwgMjI3LCAyMzgsIDM2LCAxODEsIAotICAgIDMyLCAyMzMsIDEsIDE4MSwgMzIsIDIzMiwgMTA2LCAxMDYsIDI1MiwgMjMwLCAyMzcsIDU3LCAxODEsIDMyLCAyNTIsIDIzMCwgCi0gICAgMjM2LCA3NCwgMTgxLCAzMiwgMjI5LCAxODcsIDE4MSwgMzIsIDIyOSwgNDQsIDE4MSwgMzIsIDIyOCwgMjM3LCAxODEsIDMyLCAKLSAgICAyMzIsIDEwOSwgMTgxLCAzMiwgMjMyLCAyNywgMTgxLCAzMiwgMjI3LCAyMjAsIDE4MSwgMzIsIDIzOCwgMTYwLCAxODAsIAotICAgIDI0MSwgMTkxLCAxODEsIDMyLCAyMzIsIDI0LCAyMzIsIDU1LCAxODEsIDMyLCAyMzYsIDE5NiwgMjM3LCAxNiwgMTgxLCAzMiwgCi0gICAgMjMwLCA4NCwgMTgxLCAzMiwgMjUyLCAyMzAsIDI0NiwgNTQsIDE4MSwgMzIsIDIzMCwgOTcsIDE4MSwgMzIsIDI1MiwgMjMwLCAKLSAgICAyMzIsIDE2LCAxODEsIDMyLCAyNTIsIDIzMCwgMjM0LCA5LCAyMzMsIDI0NiwgMTgxLCAzMiwgMjUyLCAyMzAsIDIzNSwgCi0gICAgMTgyLCAyNDUsIDIyMCwgMjMxLCAyNTUsIDE4MSwgMzIsIDIyOCwgMjQwLCAxODEsIDMyLCAyNTIsIDIzMCwgMjM0LCAxNTMsIAotICAgIDIzNiwgMTQ0LCAxODEsIDMyLCAyMzAsIDIyMSwgMTgxLCAzMiwgMjUyLCAyMzAsIDIzMywgNjMsIDE4MSwgMzIsIDI1MiwgCi0gICAgMjMwLCAyMzgsIDIzNSwgMjQwLCAxOTksIDE4MSwgMzIsIDI1MiwgMjMwLCAyMzksIDUxLCAyNDEsIDE3OCwgMTgxLCAzMiwgCi0gICAgMjI5LCAyNTAsIDE4MSwgMzIsIDIzMCwgNzgsIDE4MSwgMzIsIDI0NCwgOSwgMjQwLCA0OCwgMTgxLCAzMiwgMywgMjI3LCAKLSAgICAxNTAsIDE4MSwgMzIsIDI0MiwgNDQsIDIyOSwgMTgzLCAxODEsIDMyLCAyMzgsIDExOCwgMjI5LCAxODMsIDgsIDQsIDI1NCwgCi0gICAgNzMsIDgsIDQsIDI1NCwgNzQsIDgsIDQsIDc0LCA4LCA0LCAyNTQsIDcwLCA4LCA0LCAyNTAsIDExNSwgOCwgNCwgMjUwLCAKLSAgICAxMTYsIDgsIDQsIDI1MywgNzcsIDgsIDQsIDI1MCwgMTE0LCA4LCA0LCAyNTMsIDExMywgOCwgNCwgMjU0LCAzMCwgOCwgNCwgCi0gICAgNTcsIDgsIDQsIDI1NCwgMjcsIDgsIDQsIDI1MiwgNTcsIDgsIDQsIDI1NCwgMTY0LCA4LCA0LCAyNTIsIDU2LCA4LCA0LCAKLSAgICAyNTMsIDE4OCwgOCwgNCwgMjU0LCAxMjIsIDgsIDQsIDczLCA4LCA0LCAyNTMsIDI1NSwgOCwgNCwgMjU0LCA1MywgOCwgNCwgCi0gICAgNzIsIDgsIDQsIDI1MywgMTA5LCA4LCA0LCAyNDksIDEyMSwgOCwgNCwgMjQ5LCAxMjIsIDgsIDQsIDI1MywgMzAsIDgsIDQsIAotICAgIDI0OSwgMTIwLCA4LCA0LCAyNDIsIDIwNiwgOCwgNCwgMjQyLCAyMDcsIDgsIDQsIDI0OSwgMTE4LCA4LCA0LCAyNDIsIDIwNSwgCi0gICAgOCwgNCwgMjQ5LCAxMDEsIDgsIDQsIDI0OSwgMTAyLCA4LCA0LCAyNTIsIDIxMSwgOCwgNCwgMjQ5LCAxMDAsIDgsIDQsIAotICAgIDI0MiwgMjIyLCA4LCA0LCAyNDksIDEyOSwgOCwgNCwgMjQyLCAyMjEsIDgsIDQsIDI0OSwgMTI4LCA4LCA0LCAyNDYsIDIzMSwgCi0gICAgOCwgNCwgMjUzLCA5OCwgOCwgNCwgMjQ5LCAxMjcsIDgsIDQsIDI0OSwgMTEzLCA4LCA0LCAyNTMsIDczLCA4LCA0LCAyNDksIAotICAgIDExMSwgOCwgNCwgMjQ5LCAxMzIsIDgsIDQsIDI0OSwgMTMzLCA4LCA0LCAyNTMsIDQ4LCA4LCA0LCAyNDksIDEzMCwgOCwgNCwgCi0gICAgMjQyLCAyMjQsIDgsIDQsIDI0NywgMTEsIDgsIDQsIDI0OSwgMTM5LCA4LCA0LCAyNDksIDE0MCwgOCwgNCwgMjUzLCAyMTAsIAotICAgIDgsIDQsIDI0OSwgMTM3LCA4LCA0LCAyNDIsIDIyNiwgOCwgNCwgMjQ5LCAxMzgsIDgsIDQsIDI1MSwgMTExLCA4LCA0LCAKLSAgICAyNTEsIDExMiwgOCwgNCwgMjUyLCAyMjMsIDgsIDQsIDI1MSwgMTEwLCA4LCA0LCAyNDUsIDc0LCA4LCA0LCAyNTEsIDEwOCwgCi0gICAgOCwgNCwgMjQ1LCA3MywgOCwgNCwgMjUxLCAxMDQsIDgsIDQsIDI1MSwgMTA1LCA4LCA0LCAyMTMsIDgsIDQsIDI0NywgNDUsIAotICAgIDgsIDQsIDI0NSwgODUsIDgsIDQsIDI1MSwgMTIxLCA4LCA0LCAyNDUsIDg0LCA4LCA0LCAyNTEsIDExNSwgOCwgNCwgMjUxLCAKLSAgICAxMTYsIDgsIDQsIDI1MywgNTAsIDgsIDQsIDI1MSwgMTE0LCA4LCA0LCAyNDgsIDEzNiwgOCwgNCwgMjUxLCAxMjQsIDgsIDQsIAotICAgIDI1MywgODIsIDgsIDQsIDI1MSwgMTIyLCA4LCA0LCAyNDUsIDg2LCA4LCA0LCAyNTEsIDEyMywgOCwgNCwgMjQ4LCAxMzgsIAotICAgIDgsIDQsIDI1MSwgMTI3LCA4LCA0LCAyNTQsIDEzOCwgOCwgNCwgMjUxLCAxMjUsIDgsIDQsIDI0NSwgODgsIDgsIDQsIDI1MSwgCi0gICAgMTI2LCA4LCA0LCAyNDIsIDE4MywgOCwgNCwgMjQyLCAxODQsIDgsIDQsIDI0OSwgMTAzLCA4LCA0LCAyNDIsIDE4MiwgOCwgCi0gICAgNCwgMjM4LCAxMTIsIDgsIDQsIDIzOCwgMTEzLCA4LCA0LCAyNDIsIDE4MSwgOCwgNCwgMjM4LCAxMTEsIDgsIDQsIDI0MiwgCi0gICAgMTc3LCA4LCA0LCAyNDIsIDE3OCwgOCwgNCwgMjQ3LCA2NiwgOCwgNCwgMjQyLCAxNzYsIDgsIDQsIDIzOCwgMTE1LCA4LCA0LCAKLSAgICAyNDIsIDE4OCwgOCwgNCwgMjM4LCAxMTQsIDgsIDQsIDI0MiwgMTg2LCA4LCA0LCAyNDIsIDE4NywgOCwgNCwgMjQ5LCAxMDQsIAotICAgIDgsIDQsIDI0MiwgMTg1LCA4LCA0LCAyNDIsIDE4MCwgOCwgNCwgMjQ3LCAyNTAsIDgsIDQsIDI0MiwgMTc5LCA4LCA0LCAKLSAgICAyNDEsIDk4LCA4LCA0LCAyNDIsIDE5MSwgOCwgNCwgMjQ5LCAxMDUsIDgsIDQsIDI0MiwgMTg5LCA4LCA0LCAyMzgsIDExNiwgCi0gICAgOCwgNCwgMjQyLCAxOTAsIDgsIDQsIDI0MiwgMTkzLCA4LCA0LCAyNDIsIDE5NCwgOCwgNCwgMjQ5LCAxMDYsIDgsIDQsIAotICAgIDI0MiwgMTkyLCA4LCA0LCAyNDQsIDE3MSwgOCwgNCwgMjQ0LCAxNzIsIDgsIDQsIDI1MSwgNDUsIDgsIDQsIDI0NCwgMTcwLCAKLSAgICA4LCA0LCAyMzksIDEyOSwgOCwgNCwgMjQxLCAyMDAsIDgsIDQsIDIzOSwgMTI4LCA4LCA0LCAyNDQsIDE2OCwgOCwgNCwgCi0gICAgMjQ0LCAxNjksIDgsIDQsIDI1MSwgNDQsIDgsIDQsIDI0NCwgMTY3LCA4LCA0LCAyNDQsIDE3NCwgOCwgNCwgMjQ0LCAxNzUsIAotICAgIDgsIDQsIDI1MSwgNDYsIDgsIDQsIDI0NCwgMTczLCA4LCA0LCAyNDQsIDE3OCwgOCwgNCwgMjQ0LCAxNzksIDgsIDQsIDI1MSwgCi0gICAgNDcsIDgsIDQsIDI0NCwgMTc2LCA4LCA0LCAyMzksIDEzMCwgOCwgNCwgMjQ0LCAxNzcsIDgsIDQsIDI0NCwgMTgyLCA4LCA0LCAKLSAgICAyNDQsIDE4MywgOCwgNCwgMjUxLCA0OCwgOCwgNCwgMjQ0LCAxODAsIDgsIDQsIDIzOSwgMTMxLCA4LCA0LCAyNDQsIDE4MSwgCi0gICAgOCwgNCwgMjQzLCAyMDQsIDgsIDQsIDI0MywgMjA1LCA4LCA0LCAyNTAsIDg1LCA4LCA0LCAyNDMsIDIwMywgOCwgNCwgMjM5LCAKLSAgICAxNywgOCwgNCwgMjQzLCAyMDIsIDgsIDQsIDIzOSwgMTYsIDgsIDQsIDI0MywgMjAwLCA4LCA0LCAyNDMsIDIwMSwgOCwgNCwgCi0gICAgMjUwLCA4NCwgOCwgNCwgMjQzLCAxOTksIDgsIDQsIDIzOSwgMTksIDgsIDQsIDI0MywgMjA5LCA4LCA0LCAyMzksIDE4LCA4LCAKLSAgICA0LCAyNDMsIDIwNywgOCwgNCwgMjQzLCAyMDgsIDgsIDQsIDI0OCwgNjIsIDgsIDQsIDI0MywgMjA2LCA4LCA0LCAyNDMsIAotICAgIDIxMiwgOCwgNCwgMjQzLCAyMTMsIDgsIDQsIDI1MCwgODYsIDgsIDQsIDI0MywgMjEwLCA4LCA0LCAyMzksIDIwLCA4LCA0LCAKLSAgICAyNDMsIDIxMSwgOCwgNCwgMjQzLCAyMTYsIDgsIDQsIDI1MCwgODcsIDgsIDQsIDI0MywgMjE0LCA4LCA0LCAyMzksIDIxLCAKLSAgICA4LCA0LCAyNDMsIDIxNSwgOCwgNCwgMjUxLCAxOCwgOCwgNCwgMjUxLCAxOSwgOCwgNCwgMjUyLCAyMzksIDgsIDQsIDI1MSwgCi0gICAgMTcsIDgsIDQsIDI0NCwgMTQ0LCA4LCA0LCAyNTEsIDEyLCA4LCA0LCAyNDQsIDE0MywgOCwgNCwgMjUwLCAyNTAsIDgsIDQsIAotICAgIDI1MCwgMjUxLCA4LCA0LCAxOTgsIDgsIDQsIDI1MCwgMjQ3LCA4LCA0LCAyNDQsIDE1NywgOCwgNCwgMjQ0LCAxNTgsIDgsIAotICAgIDQsIDI1MSwgMjcsIDgsIDQsIDI0NCwgMTU2LCA4LCA0LCAyNTEsIDIzLCA4LCA0LCAyNTEsIDI0LCA4LCA0LCAyNTMsIDE0LCAKLSAgICA4LCA0LCAyNDgsIDEwMSwgOCwgNCwgMjUxLCA3LCA4LCA0LCAyNTMsIDEzLCA4LCA0LCAyNTEsIDMwLCA4LCA0LCAyNTEsIAotICAgIDMxLCA4LCA0LCAyNTIsIDIyOSwgOCwgNCwgMjUxLCAyOCwgOCwgNCwgMjQ0LCAxNjAsIDgsIDQsIDI1MSwgMjksIDgsIDQsIAotICAgIDI1MSwgMzQsIDgsIDQsIDI1MSwgMzUsIDgsIDQsIDI1NCwgMTA4LCA4LCA0LCAyNTEsIDMzLCA4LCA0LCAyNDksIDI1MSwgOCwgCi0gICAgNCwgMjQ5LCAyNTIsIDgsIDQsIDI1MywgODgsIDgsIDQsIDI0OSwgMjUwLCA4LCA0LCAyNDksIDIzOSwgOCwgNCwgMjQ5LCAKLSAgICAyNDAsIDgsIDQsIDI1MiwgMjM0LCA4LCA0LCAyNDksIDIzOCwgOCwgNCwgMjQ5LCAyNTUsIDgsIDQsIDI1MywgMTQ4LCA4LCAKLSAgICA0LCAyNDksIDI1NCwgOCwgNCwgMjUwLCAxLCA4LCA0LCAyNTAsIDIsIDgsIDQsIDI1MywgMTc4LCA4LCA0LCAyNTAsIDAsIDgsIAotICAgIDQsIDI0MywgMTEwLCA4LCA0LCAyNDgsIDQwLCA4LCA0LCAyNTAsIDcsIDgsIDQsIDI1MCwgOCwgOCwgNCwgMjU0LCA1NywgOCwgCi0gICAgNCwgMjUwLCA2LCA4LCA0LCAyNTIsIDc3LCA4LCA0LCAyNTIsIDc4LCA4LCA0LCAyNTMsIDEzOCwgOCwgNCwgMjUyLCA3NiwgCi0gICAgOCwgNCwgMjQ2LCA0NiwgOCwgNCwgMjQ2LCA0NywgOCwgNCwgMjUyLCA3NSwgOCwgNCwgMjQ2LCA0NSwgOCwgNCwgMjUyLCAKLSAgICA3MSwgOCwgNCwgMjUyLCA3MiwgOCwgNCwgMjUyLCAyNDMsIDgsIDQsIDI1MiwgNzAsIDgsIDQsIDI1MiwgODIsIDgsIDQsIAotICAgIDI1MiwgODQsIDgsIDQsIDI1MywgMTA4LCA4LCA0LCAyNTIsIDgxLCA4LCA0LCAyNTIsIDc0LCA4LCA0LCAyNDgsIDE5MCwgOCwgCi0gICAgNCwgMjUyLCA4NiwgOCwgNCwgMjUyLCA4NywgOCwgNCwgMjUzLCAxMzksIDgsIDQsIDI1MiwgODUsIDgsIDQsIDI0NiwgNDksIAotICAgIDgsIDQsIDI0OCwgMTkzLCA4LCA0LCAyNTIsIDkxLCA4LCA0LCAyNTIsIDkyLCA4LCA0LCAyNTMsIDIwMSwgOCwgNCwgMjUyLCAKLSAgICA4OSwgOCwgNCwgMjQ2LCA1MCwgOCwgNCwgMjUyLCA5MCwgOCwgNCwgMjQ5LCAxOTYsIDgsIDQsIDI0OSwgMTk3LCA4LCA0LCAKLSAgICAyNTMsIDEyLCA4LCA0LCAyNDksIDE5NCwgOCwgNCwgMjQzLCA2OSwgOCwgNCwgMjQ5LCAxOTIsIDgsIDQsIDI0MywgNjgsIDgsIAotICAgIDQsIDI0OSwgMTgxLCA4LCA0LCAyNDksIDE4MywgOCwgNCwgMjUyLCAyMDMsIDgsIDQsIDI0OSwgMTc5LCA4LCA0LCAyNDMsIAotICAgIDg2LCA4LCA0LCAyNDksIDIxMiwgOCwgNCwgMjQ2LCAxNjQsIDgsIDQsIDI0OSwgMjA2LCA4LCA0LCAyNTMsIDU3LCA4LCA0LCAKLSAgICAyNDksIDIwNSwgOCwgNCwgMjQ5LCAxODcsIDgsIDQsIDI1MywgMjAsIDgsIDQsIDI0OSwgMTg2LCA4LCA0LCAyNDksIDIxNSwgCi0gICAgOCwgNCwgMjQ5LCAyMTYsIDgsIDQsIDI1MywgMzEsIDgsIDQsIDI0OSwgMjEzLCA4LCA0LCAyNDMsIDg4LCA4LCA0LCAyNDksIAotICAgIDIxNCwgOCwgNCwgMjUyLCAyMywgOCwgNCwgMjUyLCAyNCwgOCwgNCwgMjUzLCA0NCwgOCwgNCwgMjUyLCAyMiwgOCwgNCwgCi0gICAgMjQ1LCAyNTAsIDgsIDQsIDI0NywgNTcsIDgsIDQsIDI0NSwgMjQ5LCA4LCA0LCAyNDgsIDE3MCwgOCwgNCwgMjUyLCAxMCwgCi0gICAgOCwgNCwgMjUyLCAyMDIsIDgsIDQsIDI1MiwgNywgOCwgNCwgMjQ2LCAyMSwgOCwgNCwgMjQ2LCAyMiwgOCwgNCwgMjUyLCAKLSAgICAzNCwgOCwgNCwgMjQ2LCAyMCwgOCwgNCwgMjQ4LCAxNzksIDgsIDQsIDI1MiwgMjgsIDgsIDQsIDk2LCA4LCA0LCAyNDcsIAotICAgIDIxNCwgOCwgNCwgMjUyLCAxNiwgOCwgNCwgMjUzLCA5LCA4LCA0LCAyNTIsIDEzLCA4LCA0LCAyNTIsIDM2LCA4LCA0LCAKLSAgICAyNTIsIDM3LCA4LCA0LCAyNTMsIDE4LCA4LCA0LCAyNTIsIDM1LCA4LCA0LCAyNDYsIDIzLCA4LCA0LCAyNDcsIDExMiwgOCwgCi0gICAgNCwgMjQzLCA0MSwgOCwgNCwgMjQzLCA0MiwgOCwgNCwgMjQ4LCAyMywgOCwgNCwgMjQzLCA0MCwgOCwgNCwgMjM4LCAxNzYsIAotICAgIDgsIDQsIDI0MywgMzksIDgsIDQsIDIzOCwgMTc1LCA4LCA0LCAyNDMsIDMyLCA4LCA0LCAyNDMsIDMzLCA4LCA0LCAyNDYsIAotICAgIDE5MiwgOCwgNCwgMjQzLCAzMSwgOCwgNCwgMjM4LCAxNzgsIDgsIDQsIDI0MywgNDcsIDgsIDQsIDIzOCwgMTc3LCA4LCA0LCAKLSAgICAyNDMsIDQ1LCA4LCA0LCAyNDMsIDQ2LCA4LCA0LCAyNDcsIDEzMCwgOCwgNCwgMjQzLCA0NCwgOCwgNCwgMjQzLCAzNywgOCwgCi0gICAgNCwgMjQ4LCAyMiwgOCwgNCwgMjQzLCAzNiwgOCwgNCwgMjQzLCA0OSwgOCwgNCwgMjQzLCA1MCwgOCwgNCwgMjQ4LCAyNCwgCi0gICAgOCwgNCwgMjQzLCA0OCwgOCwgNCwgMjM4LCAxNzksIDgsIDQsIDI0MSwgMTE4LCA4LCA0LCAyNDQsIDE5MiwgOCwgNCwgMjQ0LCAKLSAgICAxOTMsIDgsIDQsIDI0OCwgMTA3LCA4LCA0LCAyNDQsIDE5MSwgOCwgNCwgMjM5LCAxMzIsIDgsIDQsIDI0NCwgMTkwLCA4LCAKLSAgICA0LCAyNDQsIDE4NSwgOCwgNCwgMjQ0LCAxODYsIDgsIDQsIDI0NywgMTgwLCA4LCA0LCAyNDQsIDE4NCwgOCwgNCwgMjQ0LCAKLSAgICAxOTYsIDgsIDQsIDI0NCwgMTk3LCA4LCA0LCAyNDgsIDEwOCwgOCwgNCwgMjQ0LCAxOTUsIDgsIDQsIDI0NCwgMTg5LCA4LCAKLSAgICA0LCAyNDgsIDEwNiwgOCwgNCwgMjQ0LCAxODgsIDgsIDQsIDI0NCwgMjAwLCA4LCA0LCAyNDQsIDIwMSwgOCwgNCwgMjQ4LCAKLSAgICAxMDksIDgsIDQsIDI0NCwgMTk4LCA4LCA0LCAyMzksIDEzMywgOCwgNCwgMjQ0LCAxOTksIDgsIDQsIDI0MywgMjI0LCA4LCAKLSAgICA0LCAyNDMsIDIyNSwgOCwgNCwgMjUwLCA4OSwgOCwgNCwgMjQzLCAyMjMsIDgsIDQsIDIzOSwgMjMsIDgsIDQsIDIzOSwgMjQsIAotICAgIDgsIDQsIDI0MywgMjIyLCA4LCA0LCAyMzksIDIyLCA4LCA0LCAyNDMsIDIxOCwgOCwgNCwgMjQzLCAyMTksIDgsIDQsIDI0OCwgCi0gICAgNjMsIDgsIDQsIDI0MywgMjE3LCA4LCA0LCAyMzksIDI1LCA4LCA0LCAyNDMsIDIyOSwgOCwgNCwgMjQzLCAyMjcsIDgsIDQsIAotICAgIDI0MywgMjI4LCA4LCA0LCAyNDMsIDIyNiwgOCwgNCwgMjQzLCAyMjEsIDgsIDQsIDI1MCwgODgsIDgsIDQsIDI0MywgMjIwLCAKLSAgICA4LCA0LCAyNDMsIDIzMCwgOCwgNCwgMjUxLCA2MywgOCwgNCwgMjUxLCA2NCwgOCwgNCwgMjUyLCAyNDgsIDgsIDQsIDI1MSwgCi0gICAgNjIsIDgsIDQsIDI0NCwgMjI4LCA4LCA0LCAyNTEsIDYwLCA4LCA0LCAyNDQsIDIyNywgOCwgNCwgMjUxLCA0MywgOCwgNCwgCi0gICAgMjUyLCAyMDEsIDgsIDQsIDI1MSwgNDEsIDgsIDQsIDI0NSwgMTUsIDgsIDQsIDI1MSwgODAsIDgsIDQsIDI0NSwgMTQsIDgsIAotICAgIDQsIDI0NywgMTg0LCA4LCA0LCAyNTEsIDcyLCA4LCA0LCAyNTMsIDgsIDgsIDQsIDI1MSwgNzAsIDgsIDQsIDI1MSwgNTIsIAotICAgIDgsIDQsIDI1MiwgMjQ3LCA4LCA0LCAyNTEsIDUwLCA4LCA0LCAyNTEsIDgzLCA4LCA0LCAyNTEsIDg0LCA4LCA0LCAyNTIsIAotICAgIDIyNywgOCwgNCwgMjUxLCA4MSwgOCwgNCwgMjQ1LCAxNiwgOCwgNCwgMjUxLCA4MiwgOCwgNCwgMjQzLCAxODYsIDgsIDQsIAotICAgIDI0MywgMTg3LCA4LCA0LCAyNTAsIDgwLCA4LCA0LCAyNDMsIDE4NSwgOCwgNCwgMjM5LCAxMSwgOCwgNCwgMjQzLCAxODQsIAotICAgIDgsIDQsIDIzOSwgMTAsIDgsIDQsIDI0MywgMTgwLCA4LCA0LCAyNDMsIDE4MSwgOCwgNCwgMjQ4LCA2MSwgOCwgNCwgMjQzLCAKLSAgICAxNzksIDgsIDQsIDIzOSwgMTMsIDgsIDQsIDI0MywgMTkwLCA4LCA0LCAyMzksIDEyLCA4LCA0LCAyNDMsIDE4OSwgOCwgNCwgCi0gICAgMjUwLCA4MSwgOCwgNCwgMjQzLCAxODgsIDgsIDQsIDI0MywgMTgzLCA4LCA0LCAyNTAsIDc5LCA4LCA0LCAyNDMsIDE4MiwgCi0gICAgOCwgNCwgMjQzLCAxOTMsIDgsIDQsIDI0MywgMTk0LCA4LCA0LCAyNTAsIDgyLCA4LCA0LCAyNDMsIDE5MSwgOCwgNCwgMjM5LCAKLSAgICAxNCwgOCwgNCwgMjQzLCAxOTIsIDgsIDQsIDI0MywgMTk3LCA4LCA0LCAyNDMsIDE5OCwgOCwgNCwgMjUwLCA4MywgOCwgNCwgCi0gICAgMjQzLCAxOTUsIDgsIDQsIDIzOSwgMTUsIDgsIDQsIDI0MywgMTk2LCA4LCA0LCAyNTAsIDIyNSwgOCwgNCwgMjUwLCAyMjYsIAotICAgIDgsIDQsIDI1MywgNDIsIDgsIDQsIDI1MCwgMjIzLCA4LCA0LCAyNDQsIDEwMSwgOCwgNCwgMjQ0LCAxMDIsIDgsIDQsIDI0OCwgCi0gICAgOTMsIDgsIDQsIDI0NCwgMTAwLCA4LCA0LCAyNTAsIDIwOCwgOCwgNCwgMjUwLCAyMTAsIDgsIDQsIDI1MiwgMjAwLCA4LCA0LCAKLSAgICAyNTAsIDIwNiwgOCwgNCwgMjQ0LCAxMTAsIDgsIDQsIDI0NCwgMTExLCA4LCA0LCAyNTAsIDIzNiwgOCwgNCwgMjQ0LCAxMDksIAotICAgIDgsIDQsIDI1MCwgMjMxLCA4LCA0LCAyNTAsIDIzMywgOCwgNCwgMjUzLCA0OSwgOCwgNCwgMjUwLCAyMzAsIDgsIDQsIDI1MCwgCi0gICAgMjE2LCA4LCA0LCAyNTMsIDgwLCA4LCA0LCAyNTAsIDIxNCwgOCwgNCwgMjUwLCAyMzksIDgsIDQsIDI1MCwgMjQwLCA4LCA0LCAKLSAgICAyNTMsIDIyLCA4LCA0LCAyNTAsIDIzNywgOCwgNCwgMjQ0LCAxMTIsIDgsIDQsIDI1MCwgMjM4LCA4LCA0LCAyNTAsIDI0MiwgCi0gICAgOCwgNCwgMjUwLCAyNDMsIDgsIDQsIDI1MywgMTg2LCA4LCA0LCAyNTAsIDI0MSwgOCwgNCwgMjQ0LCAxMTMsIDgsIDQsIAotICAgIDI0OCwgOTcsIDgsIDQsIDI1MCwgMzMsIDgsIDQsIDI1MCwgMzQsIDgsIDQsIDI1MywgMzksIDgsIDQsIDI1MCwgMzIsIDgsIAotICAgIDQsIDI0MywgMTQ3LCA4LCA0LCAyNDMsIDE0OCwgOCwgNCwgMjUwLCAzMSwgOCwgNCwgMjQzLCAxNDYsIDgsIDQsIDI1MCwgCi0gICAgMTQsIDgsIDQsIDI1MCwgMTUsIDgsIDQsIDI1MiwgMjA1LCA4LCA0LCAyNTAsIDEzLCA4LCA0LCAyNDMsIDE2MCwgOCwgNCwgCi0gICAgMjQzLCAxNjEsIDgsIDQsIDI1MCwgNDYsIDgsIDQsIDI0MywgMTU5LCA4LCA0LCAyNDgsIDU2LCA4LCA0LCAyNTAsIDM5LCA4LCAKLSAgICA0LCAyNTMsIDc2LCA4LCA0LCAyNTAsIDM4LCA4LCA0LCAyNTAsIDI1LCA4LCA0LCAyNTAsIDI3LCA4LCA0LCAyNTMsIDEwMywgCi0gICAgOCwgNCwgMjQ4LCA0NywgOCwgNCwgMjUwLCA0OCwgOCwgNCwgMjUwLCA0OSwgOCwgNCwgMjUzLCA0MCwgOCwgNCwgMjUwLCAKLSAgICA0NywgOCwgNCwgMjQzLCAxNjIsIDgsIDQsIDI0OCwgNTcsIDgsIDQsIDI0OCwgODMsIDgsIDQsIDI1MCwgMTcwLCA4LCA0LCAKLSAgICAyNTMsIDcsIDgsIDQsIDI1MCwgMTY5LCA4LCA0LCAyNDQsIDU5LCA4LCA0LCAyNTAsIDE2NiwgOCwgNCwgMjQ0LCA1OCwgOCwgCi0gICAgNCwgMjUwLCAxNTYsIDgsIDQsIDI1MCwgMTU4LCA4LCA0LCAxNzcsIDgsIDQsIDI1MCwgMTU1LCA4LCA0LCAyNDQsIDcxLCA4LCAKLSAgICA0LCAyNTAsIDE5MCwgOCwgNCwgMjQ0LCA3MCwgOCwgNCwgMjUwLCAxODAsIDgsIDQsIDI1MCwgMTgxLCA4LCA0LCAyNTMsIAotICAgIDMzLCA4LCA0LCAyNTAsIDE3OSwgOCwgNCwgMjUwLCAxNjAsIDgsIDQsIDI1MCwgMTYxLCA4LCA0LCAyNTMsIDYsIDgsIDQsIAotICAgIDI1MCwgMTU5LCA4LCA0LCAyNTAsIDE5MiwgOCwgNCwgMjUwLCAxOTMsIDgsIDQsIDI1MywgMzQsIDgsIDQsIDI1MCwgMTkxLCAKLSAgICA4LCA0LCAyNDQsIDczLCA4LCA0LCAyNDYsIDIyMCwgOCwgNCwgMjQzLCAxMzIsIDgsIDQsIDI0MywgMTMzLCA4LCA0LCAyNDgsIAotICAgIDQ5LCA4LCA0LCAyMzgsIDIzOSwgOCwgNCwgMjQzLCAxMzEsIDgsIDQsIDIzOCwgMjM4LCA4LCA0LCAyNDMsIDEyNSwgOCwgNCwgCi0gICAgMjQzLCAxMjYsIDgsIDQsIDI0NywgNzcsIDgsIDQsIDI0MywgMTI0LCA4LCA0LCAyMzgsIDI0MSwgOCwgNCwgMjM4LCAyNDIsIAotICAgIDgsIDQsIDI0MSwgMTQwLCA4LCA0LCAyMzgsIDI0MCwgOCwgNCwgMjQzLCAxMzQsIDgsIDQsIDI0MywgMTM1LCA4LCA0LCAKLSAgICAyNDgsIDUwLCA4LCA0LCAyNDEsIDEzOSwgOCwgNCwgMjQzLCAxMjksIDgsIDQsIDI0MywgMTMwLCA4LCA0LCAyNDgsIDQ4LCAKLSAgICA4LCA0LCAyNDMsIDEyOCwgOCwgNCwgMjQzLCAxMzgsIDgsIDQsIDI0MywgMTM5LCA4LCA0LCAyNDgsIDUxLCA4LCA0LCAyNDMsIAotICAgIDEzNiwgOCwgNCwgMjM4LCAyNDMsIDgsIDQsIDI0MywgMTM3LCA4LCA0LCAyMzksIDEwOSwgOCwgNCwgMjQ0LCAxMzMsIDgsIAotICAgIDQsIDI0NCwgMTI0LCA4LCA0LCAyNDQsIDEyNSwgOCwgNCwgMjUxLCA4LCA4LCA0LCAyNDQsIDEyMywgOCwgNCwgMjM5LCAKLSAgICAxMTEsIDgsIDQsIDI0NCwgMTM3LCA4LCA0LCAyMzksIDExMCwgOCwgNCwgMjQ0LCAxMzUsIDgsIDQsIDI0NCwgMTM2LCA4LCAKLSAgICA0LCAyNDcsIDg4LCA4LCA0LCAyNDQsIDEzNCwgOCwgNCwgMjQ0LCAxMzIsIDgsIDQsIDI1MSwgOSwgOCwgNCwgMjQ0LCAxMzEsIAotICAgIDgsIDQsIDI0NCwgMTQwLCA4LCA0LCAyNDQsIDE0MSwgOCwgNCwgMjUxLCAxMCwgOCwgNCwgMjQ0LCAxMzgsIDgsIDQsIDIzOSwgCi0gICAgMTEyLCA4LCA0LCAyNDQsIDEzOSwgOCwgNCwgMjQxLCAxNTksIDgsIDQsIDI0MywgMjQ5LCA4LCA0LCAyNTAsIDEwNCwgOCwgCi0gICAgNCwgMjQzLCAyNDgsIDgsIDQsIDIzOSwgMzEsIDgsIDQsIDIzOSwgMzIsIDgsIDQsIDI0MywgMjQ3LCA4LCA0LCAyMzksIDMwLCAKLSAgICA4LCA0LCAyNDMsIDI0MywgOCwgNCwgMjQzLCAyNDQsIDgsIDQsIDI1MCwgMTAyLCA4LCA0LCAyNDMsIDI0MiwgOCwgNCwgCi0gICAgMjM5LCAzNCwgOCwgNCwgMjM5LCAzNSwgOCwgNCwgMjQxLCAxNjEsIDgsIDQsIDIzOSwgMzMsIDgsIDQsIDI0MywgMjUwLCA4LCAKLSAgICA0LCAyNDMsIDI1MSwgOCwgNCwgMjUwLCAxMDUsIDgsIDQsIDI0MSwgMTYwLCA4LCA0LCAyNDMsIDI0NiwgOCwgNCwgMjUwLCAKLSAgICAxMDMsIDgsIDQsIDI0MywgMjQ1LCA4LCA0LCAyMzksIDEzOSwgOCwgNCwgMjQ0LCAyMTUsIDgsIDQsIDIzOSwgMTM4LCA4LCAKLSAgICA0LCAyNDQsIDIwNiwgOCwgNCwgMjQ0LCAyMDcsIDgsIDQsIDI0NiwgMTY5LCA4LCA0LCAyNDQsIDIwNSwgOCwgNCwgMjM5LCAKLSAgICAxNDEsIDgsIDQsIDIzOSwgMTQyLCA4LCA0LCAyNDQsIDIyNCwgOCwgNCwgMjQ0LCAyMjEsIDgsIDQsIDI0NCwgMjIyLCA4LCAKLSAgICA0LCAyNDcsIDkzLCA4LCA0LCAyNDQsIDIyMCwgOCwgNCwgMjQ0LCAyMTAsIDgsIDQsIDI1MSwgNTQsIDgsIDQsIDI0NCwgCi0gICAgMjA5LCA4LCA0LCAyNTAsIDc4LCA4LCA0LCAyNDMsIDE3NiwgOCwgNCwgMjQ3LCA4MSwgOCwgNCwgMjQ3LCAxNDcsIDgsIDQsIAotICAgIDI1MCwgNjMsIDgsIDQsIDE1NCwgOCwgNCwgMjUwLCA2MiwgOCwgNCwgMjQzLCAyMzksIDgsIDQsIDI0MywgMjQwLCA4LCA0LCAKLSAgICAyNTAsIDk3LCA4LCA0LCAyNDMsIDIzOCwgOCwgNCwgMjUwLCA5MiwgOCwgNCwgMjUwLCA5MywgOCwgNCwgMjUzLCAyMSwgOCwgCi0gICAgNCwgMjUwLCA5MSwgOCwgNCwgMjUwLCA2OSwgOCwgNCwgMjUyLCAyNTIsIDgsIDQsIDI1MCwgNjgsIDgsIDQsIDI1MiwgOTUsIAotICAgIDgsIDQsIDI1MiwgOTYsIDgsIDQsIDI1MiwgMjA4LCA4LCA0LCAyNTIsIDk0LCA4LCA0LCAyNDYsIDYyLCA4LCA0LCAyNTIsIAotICAgIDEwOCwgOCwgNCwgMjQ2LCA2MSwgOCwgNCwgMjUyLCAxMDYsIDgsIDQsIDI1MywgMTAsIDgsIDQsIDI1MiwgMTA0LCA4LCA0LCAKLSAgICAyNTIsIDk5LCA4LCA0LCAyNTIsIDI1MCwgOCwgNCwgMjUyLCA5OCwgOCwgNCwgMjUyLCAxODEsIDgsIDQsIDI1MiwgMTgyLCAKLSAgICA4LCA0LCAyNTMsIDcyLCA4LCA0LCAyNTIsIDE4MCwgOCwgNCwgMjQ2LCAxMzAsIDgsIDQsIDI1MiwgMTc4LCA4LCA0LCAyNDYsIAotICAgIDEyOSwgOCwgNCwgMjUyLCAxNzAsIDgsIDQsIDI1MiwgMTcxLCA4LCA0LCAyNTIsIDIyNiwgOCwgNCwgMjUyLCAxNjksIDgsIAotICAgIDQsIDI0NiwgMTMzLCA4LCA0LCAyNTIsIDE5MCwgOCwgNCwgMjQ2LCAxMzIsIDgsIDQsIDI0OCwgMjExLCA4LCA0LCAyNTIsIAotICAgIDE4NiwgOCwgNCwgMjUzLCA2NSwgOCwgNCwgMjUyLCAxODUsIDgsIDQsIDI1MiwgMTc0LCA4LCA0LCAyNTMsIDQ2LCA4LCA0LCAKLSAgICAyNTIsIDE3MywgOCwgNCwgMjUyLCAxOTEsIDgsIDQsIDI1MiwgMTkyLCA4LCA0LCAyNTMsIDk3LCA4LCA0LCAyNDgsIDIxMiwgCi0gICAgOCwgNCwgMjQ2LCAxMzQsIDgsIDQsIDI0OCwgMjEzLCA4LCA0LCAyNTIsIDE5NiwgOCwgNCwgMjUyLCAxOTcsIDgsIDQsIAotICAgIDI1NCwgMTgyLCA4LCA0LCAyNTIsIDE5NCwgOCwgNCwgMjQ2LCAxMzUsIDgsIDQsIDI1MiwgMTk1LCA4LCA0LCAyNDksIDE2MCwgCi0gICAgOCwgNCwgMjQ5LCAxNjEsIDgsIDQsIDI1MywgMTQzLCA4LCA0LCAyNDgsIDgsIDgsIDQsIDI0MywgMTAsIDgsIDQsIDI0MywgCi0gICAgMTEsIDgsIDQsIDI0OSwgMTU4LCA4LCA0LCAyNDMsIDksIDgsIDQsIDI0OCwgNSwgOCwgNCwgMjQ5LCAxNDUsIDgsIDQsIAotICAgIDI1MiwgMjE1LCA4LCA0LCAyNDgsIDQsIDgsIDQsIDI0MywgMjEsIDgsIDQsIDI0OSwgMTY2LCA4LCA0LCAyNDEsIDExMSwgOCwgCi0gICAgNCwgMjQ5LCAxNjQsIDgsIDQsIDI0OSwgMTY1LCA4LCA0LCAyNTMsIDY2LCA4LCA0LCAyNDksIDE2MywgOCwgNCwgMjQ5LCAKLSAgICAxNTQsIDgsIDQsIDI1MywgMTQxLCA4LCA0LCAyNDksIDE1MywgOCwgNCwgMjQ5LCAxNjgsIDgsIDQsIDI0OSwgMTY5LCA4LCAKLSAgICA0LCAyNTMsIDE3MiwgOCwgNCwgMjQ4LCAxMiwgOCwgNCwgMjQzLCAyMiwgOCwgNCwgMjQ5LCAxNjcsIDgsIDQsIDI0OCwgMTYsIAotICAgIDgsIDQsIDI0OSwgMTcyLCA4LCA0LCAyNTMsIDIxMywgOCwgNCwgMjQ4LCAxNSwgOCwgNCwgMjQzLCAyMywgOCwgNCwgMjQ5LCAKLSAgICAxNzEsIDgsIDQsIDI0NiwgMTQ1LCA4LCA0LCAyNDYsIDE0NiwgOCwgNCwgMjQ4LCAyMTYsIDgsIDQsIDI0NiwgMTQ0LCA4LCAKLSAgICA0LCAyMzgsIDg1LCA4LCA0LCAyNDAsIDExMywgOCwgNCwgMjQ2LCAxNDMsIDgsIDQsIDI0MCwgMTEyLCA4LCA0LCAyNDYsIAotICAgIDEzOCwgOCwgNCwgMjQ2LCAxMzksIDgsIDQsIDI0OCwgMjE0LCA4LCA0LCAyNDYsIDEzNywgOCwgNCwgMjQ2LCAxNDgsIDgsIAotICAgIDQsIDI0OCwgMjE3LCA4LCA0LCAyNDYsIDE0NywgOCwgNCwgMjQ2LCAxNDIsIDgsIDQsIDI0OCwgMjE1LCA4LCA0LCAyNDYsIAotICAgIDE0MSwgOCwgNCwgMjQ2LCAxNTEsIDgsIDQsIDI0OCwgMjE4LCA4LCA0LCAyNDYsIDE0OSwgOCwgNCwgMjQwLCAxMTQsIDgsIAotICAgIDQsIDI0NiwgMTUwLCA4LCA0LCAyNDYsIDE1NCwgOCwgNCwgMjQ2LCAxNTUsIDgsIDQsIDI1MiwgMTk4LCA4LCA0LCAyNDYsIAotICAgIDE1MiwgOCwgNCwgMjQwLCAxMTUsIDgsIDQsIDI0NiwgMTUzLCA4LCA0LCAyNDUsIDQwLCA4LCA0LCAyNDUsIDQxLCA4LCA0LCAKLSAgICAyNTEsIDg4LCA4LCA0LCAyNDUsIDM5LCA4LCA0LCAyMzksIDE2NiwgOCwgNCwgMjQ1LCAzOCwgOCwgNCwgMjM5LCAxNjUsIDgsIAotICAgIDQsIDI0NSwgMzUsIDgsIDQsIDI0NSwgMzYsIDgsIDQsIDI1MSwgODYsIDgsIDQsIDI0NSwgMzQsIDgsIDQsIDIzOSwgMTY3LCAKLSAgICA4LCA0LCAyNDUsIDQ0LCA4LCA0LCAyNDUsIDQzLCA4LCA0LCAyNDUsIDQyLCA4LCA0LCAyNDUsIDM3LCA4LCA0LCAyNTEsIAotICAgIDg3LCA4LCA0LCAyNDUsIDQ2LCA4LCA0LCAyNTEsIDg5LCA4LCA0LCAyNDEsIDIwOSwgOCwgNCwgMjM5LCAxNjgsIDgsIDQsIAotICAgIDI0NSwgNDUsIDgsIDQsIDI0NSwgNDksIDgsIDQsIDI0NSwgNTAsIDgsIDQsIDI1MSwgOTAsIDgsIDQsIDI0NSwgNDcsIDgsIAotICAgIDQsIDIzOSwgMTY5LCA4LCA0LCAyNDUsIDQ4LCA4LCA0LCAyNTEsIDIyNywgOCwgNCwgMTgzLCA4LCA0LCAyNTMsIDI0LCA4LCAKLSAgICA0LCAyNTEsIDIyNiwgOCwgNCwgMjQ1LCAxODMsIDgsIDQsIDI1MSwgMjIyLCA4LCA0LCAyNDUsIDE4MiwgOCwgNCwgMjUxLCAKLSAgICAyMTEsIDgsIDQsIDI1MSwgMjEzLCA4LCA0LCAyNTIsIDIwNCwgOCwgNCwgMjUxLCAyMTAsIDgsIDQsIDI0NSwgMjI1LCA4LCAKLSAgICA0LCAyNTEsIDI0MiwgOCwgNCwgMjQ1LCAyMjQsIDgsIDQsIDI1MSwgMjMzLCA4LCA0LCAyNTEsIDIzNSwgOCwgNCwgMjUzLCAKLSAgICAyNSwgOCwgNCwgMjUxLCAyMzIsIDgsIDQsIDI1MSwgMjE3LCA4LCA0LCAyNTMsIDUyLCA4LCA0LCAyNTEsIDIxNiwgOCwgNCwgCi0gICAgMjUxLCAyNDQsIDgsIDQsIDI1MSwgMjQ1LCA4LCA0LCAyNTMsIDI2LCA4LCA0LCAyNTEsIDI0MywgOCwgNCwgMjQ1LCAyMjgsIAotICAgIDgsIDQsIDI0NywgMjA1LCA4LCA0LCAyNTEsIDI1MSwgOCwgNCwgMjUxLCAyNTIsIDgsIDQsIDI1NCwgMTUzLCA4LCA0LCAKLSAgICAyNTEsIDI0OSwgOCwgNCwgMjQ1LCAyMzAsIDgsIDQsIDI1MSwgMjUwLCA4LCA0LCAyNDUsIDIwNSwgOCwgNCwgMjQ1LCAyMDYsIAotICAgIDgsIDQsIDI0NywgMjAyLCA4LCA0LCAyNDUsIDIwNCwgOCwgNCwgMjQwLCAxNywgOCwgNCwgMjQ1LCAyMDMsIDgsIDQsIDI0MCwgCi0gICAgMTYsIDgsIDQsIDI0NSwgMTk4LCA4LCA0LCAyNDUsIDE5OSwgOCwgNCwgMjQ2LCAxOTAsIDgsIDQsIDI0NSwgMTk3LCA4LCA0LCAKLSAgICAyNDUsIDIwOCwgOCwgNCwgMjQ1LCAyMDksIDgsIDQsIDI0NywgMjAzLCA4LCA0LCAyNDUsIDIwNywgOCwgNCwgMjQ1LCAyMDIsIAotICAgIDgsIDQsIDI0OCwgMTY2LCA4LCA0LCAyNDUsIDIwMSwgOCwgNCwgMjQ1LCAyMTEsIDgsIDQsIDI0NSwgMjEyLCA4LCA0LCAKLSAgICAyNDcsIDIwNCwgOCwgNCwgMjQ1LCAyMTAsIDgsIDQsIDI0NSwgMjE1LCA4LCA0LCAyNDUsIDIxNiwgOCwgNCwgMjUxLCAyMzYsIAotICAgIDgsIDQsIDI0NSwgMjEzLCA4LCA0LCAyNDAsIDE4LCA4LCA0LCAyNDUsIDIxNCwgOCwgNCwgMjQ2LCAxMTAsIDgsIDQsIDI0NiwgCi0gICAgMTExLCA4LCA0LCAyNDYsIDIyMywgOCwgNCwgMjQ2LCAxMDksIDgsIDQsIDI0MCwgMTA1LCA4LCA0LCAyNDYsIDExOSwgOCwgCi0gICAgNCwgMjQwLCAxMDQsIDgsIDQsIDI0NiwgMTE3LCA4LCA0LCAyNDYsIDExOCwgOCwgNCwgMjQ3LCAyMzksIDgsIDQsIDI0NiwgCi0gICAgMTE2LCA4LCA0LCAyNDYsIDExMywgOCwgNCwgMjQ2LCAxMTQsIDgsIDQsIDI0NiwgMjUxLCA4LCA0LCAyNDYsIDExMiwgOCwgCi0gICAgNCwgMjQ2LCAxMjIsIDgsIDQsIDI0NiwgMTIzLCA4LCA0LCAyNDcsIDI0MCwgOCwgNCwgMjQ2LCAxMjAsIDgsIDQsIDI0MCwgCi0gICAgMTA2LCA4LCA0LCAyNDYsIDEyMSwgOCwgNCwgMjQ2LCAxMjcsIDgsIDQsIDI0NiwgMTI4LCA4LCA0LCAyNTIsIDE3NSwgOCwgCi0gICAgNCwgMjQ2LCAxMjUsIDgsIDQsIDI0MCwgMTA3LCA4LCA0LCAyNDYsIDEyNiwgOCwgNCwgMjQyLCAyNDUsIDgsIDQsIDI0MiwgCi0gICAgMjQ2LCA4LCA0LCAyNDYsIDE3NiwgOCwgNCwgMjQyLCAyNDQsIDgsIDQsIDIzOCwgMTUyLCA4LCA0LCAyMzgsIDE1MywgOCwgCi0gICAgNCwgMjQzLCAwLCA4LCA0LCAyMzgsIDE1MSwgOCwgNCwgMjQyLCAyNTQsIDgsIDQsIDI0MiwgMjU1LCA4LCA0LCAyNDcsIDI5LCAKLSAgICA4LCA0LCAyNDIsIDI1MywgOCwgNCwgMjQyLCAyNDgsIDgsIDQsIDI0MiwgMjQ5LCA4LCA0LCAyNDYsIDIxNywgOCwgNCwgCi0gICAgMjQyLCAyNDcsIDgsIDQsIDI0MywgMywgOCwgNCwgMjQ3LCAxMjQsIDgsIDQsIDI0MywgMSwgOCwgNCwgMjM4LCAxNTQsIDgsIAotICAgIDQsIDI0MywgMiwgOCwgNCwgMjQzLCA3LCA4LCA0LCAyNDMsIDgsIDgsIDQsIDI0OSwgMTU3LCA4LCA0LCAyNDMsIDUsIDgsIAotICAgIDQsIDIzOCwgMTU1LCA4LCA0LCAyNDMsIDYsIDgsIDQsIDI0NSwgMTIxLCA4LCA0LCAyNDYsIDIyMSwgOCwgNCwgMjM5LCAKLSAgICAyMjcsIDgsIDQsIDI0NSwgMTI5LCA4LCA0LCAyNDUsIDEyNywgOCwgNCwgMjQ1LCAxMjgsIDgsIDQsIDI0OCwgMTUxLCA4LCAKLSAgICA0LCAyNDUsIDEyNiwgOCwgNCwgMjQ1LCAxMjQsIDgsIDQsIDI0NSwgMTI1LCA4LCA0LCAyNTEsIDE5MSwgOCwgNCwgMjQ1LCAKLSAgICAxMjMsIDgsIDQsIDI0NSwgMTMyLCA4LCA0LCAyNDUsIDEzMywgOCwgNCwgMjUxLCAxOTIsIDgsIDQsIDI0NSwgMTMwLCA4LCAKLSAgICA0LCAyMzksIDIyOCwgOCwgNCwgMjQ1LCAxMzEsIDgsIDQsIDI0NSwgMTM2LCA4LCA0LCAyNDUsIDEzNywgOCwgNCwgMjUxLCAKLSAgICAxOTMsIDgsIDQsIDI0NSwgMTM0LCA4LCA0LCAyMzksIDIyOSwgOCwgNCwgMjQ1LCAxMzUsIDgsIDQsIDI0NCwgMjUzLCA4LCAKLSAgICA0LCAyNDQsIDI1NCwgOCwgNCwgMjQ4LCAxMTcsIDgsIDQsIDI0NCwgMjUyLCA4LCA0LCAyNDUsIDMsIDgsIDQsIDI1MSwgNzQsIAotICAgIDgsIDQsIDI0NSwgMiwgOCwgNCwgMjQ1LCAwLCA4LCA0LCAyNDUsIDEsIDgsIDQsIDI1MSwgNzMsIDgsIDQsIDI0NCwgMjU1LCAKLSAgICA4LCA0LCAyNDUsIDYsIDgsIDQsIDI0NSwgNywgOCwgNCwgMjUxLCA3NSwgOCwgNCwgMjQ1LCA0LCA4LCA0LCAyMzksIDE1NywgCi0gICAgOCwgNCwgMjQ1LCA1LCA4LCA0LCAyNDUsIDEwLCA4LCA0LCAyNDUsIDExLCA4LCA0LCAyNTEsIDc2LCA4LCA0LCAyNDUsIDgsIAotICAgIDgsIDQsIDIzOSwgMTU4LCA4LCA0LCAyNDUsIDksIDgsIDQsIDI0MSwgMjM1LCA4LCA0LCAyNDUsIDE2MCwgOCwgNCwgMjQ2LCAKLSAgICAxNjUsIDgsIDQsIDI0NSwgMTU4LCA4LCA0LCAyMzksIDI1MywgOCwgNCwgMjQ1LCAxNzMsIDgsIDQsIDIzOSwgMjUyLCA4LCAKLSAgICA0LCAyNDUsIDE3MSwgOCwgNCwgMjQ1LCAxNzIsIDgsIDQsIDI0NiwgMjQ1LCA4LCA0LCAyNDEsIDI0MCwgOCwgNCwgMjQ1LCAKLSAgICAxNjMsIDgsIDQsIDI0NSwgMTY0LCA4LCA0LCAyNDYsIDE4NiwgOCwgNCwgMjQ1LCAxNjIsIDgsIDQsIDI0NSwgMTc1LCA4LCAKLSAgICA0LCAyNDUsIDE3NiwgOCwgNCwgMjQ2LCAyNDYsIDgsIDQsIDI0NSwgMTc0LCA4LCA0LCAyMzksIDI1NCwgOCwgNCwgMjQxLCAKLSAgICAyNDIsIDgsIDQsIDI0NSwgMTgwLCA4LCA0LCAyNDUsIDE4MSwgOCwgNCwgMjQ4LCAxNjAsIDgsIDQsIDI0NSwgMTc4LCA4LCAKLSAgICA0LCAyMzksIDI1NSwgOCwgNCwgMjQ1LCAxNzksIDgsIDQsIDI0OCwgMTQ2LCA4LCA0LCAyNTEsIDE3NCwgOCwgNCwgMjA4LCAKLSAgICA4LCA0LCAyNDcsIDE5NiwgOCwgNCwgMjQ1LCAxNDEsIDgsIDQsIDI1MSwgMTk2LCA4LCA0LCAyNDUsIDE0MCwgOCwgNCwgCi0gICAgMjUxLCAxODksIDgsIDQsIDI1MSwgMTkwLCA4LCA0LCAyNTIsIDI0NiwgOCwgNCwgMjUxLCAxODgsIDgsIDQsIDI1MSwgMTgwLCAKLSAgICA4LCA0LCAyNTMsIDM2LCA4LCA0LCAyNTEsIDE3OCwgOCwgNCwgMjUxLCAxOTksIDgsIDQsIDI1MSwgMjAwLCA4LCA0LCAyNTMsIAotICAgIDMsIDgsIDQsIDI1MSwgMTk3LCA4LCA0LCAyNDUsIDE0MiwgOCwgNCwgMjUxLCAxOTgsIDgsIDQsIDI1MSwgMjA1LCA4LCA0LCAKLSAgICAyNTEsIDIwNiwgOCwgNCwgMjU0LCA2LCA4LCA0LCAyNTEsIDIwMywgOCwgNCwgMjQ1LCAxNDQsIDgsIDQsIDI1MSwgMjA0LCAKLSAgICA4LCA0LCAyNTAsIDEzMywgOCwgNCwgMjUwLCAxMzQsIDgsIDQsIDI1MywgMTA0LCA4LCA0LCAyNTAsIDEzMiwgOCwgNCwgCi0gICAgMjQ0LCAxOCwgOCwgNCwgMjQ0LCAxOSwgOCwgNCwgMjUwLCAxMzEsIDgsIDQsIDI0NCwgMTcsIDgsIDQsIDI0NCwgMzksIDgsIAotICAgIDQsIDI0NCwgNDAsIDgsIDQsIDI1MCwgMTQxLCA4LCA0LCAyNDQsIDM4LCA4LCA0LCAyNDcsIDE1LCA4LCA0LCAyNTAsIDEzOSwgCi0gICAgOCwgNCwgMjUzLCA5MCwgOCwgNCwgMjUwLCAxMzgsIDgsIDQsIDI1MCwgMTQ0LCA4LCA0LCAyNTAsIDE0NSwgOCwgNCwgMjUzLCAKLSAgICAxMTgsIDgsIDQsIDI1MCwgMTQyLCA4LCA0LCAyNDQsIDQxLCA4LCA0LCAyNTAsIDE0MywgOCwgNCwgMjUwLCAxNDksIDgsIDQsIAotICAgIDI1MCwgMTUwLCA4LCA0LCAyNTQsIDc1LCA4LCA0LCAyNTAsIDE0NywgOCwgNCwgMjQ0LCA0MiwgOCwgNCwgMjUwLCAxNDgsIAotICAgIDgsIDQsIDI1MSwgMTM5LCA4LCA0LCAyNTEsIDE0MCwgOCwgNCwgMjUzLCAxMzEsIDgsIDQsIDI1MSwgMTM4LCA4LCA0LCAKLSAgICAyNDUsIDk4LCA4LCA0LCAyNDUsIDk5LCA4LCA0LCAyNTEsIDEzNywgOCwgNCwgMjQ1LCA5NywgOCwgNCwgMjQ1LCAxMDIsIDgsIAotICAgIDQsIDI0NSwgMTAzLCA4LCA0LCAyNDgsIDE0NCwgOCwgNCwgMjQ1LCAxMDEsIDgsIDQsIDI0OCwgMTQzLCA4LCA0LCAyNTEsIAotICAgIDE0NCwgOCwgNCwgMjUzLCAxNTksIDgsIDQsIDI1MSwgMTQzLCA4LCA0LCAyNTEsIDE1MSwgOCwgNCwgMjUxLCAxNTMsIDgsIAotICAgIDQsIDI1MywgMTMyLCA4LCA0LCAyNTEsIDE0OSwgOCwgNCwgMjQ1LCAxMDQsIDgsIDQsIDI1MSwgMTUwLCA4LCA0LCAyNTEsIAotICAgIDE2MywgOCwgNCwgMjUxLCAxNjUsIDgsIDQsIDI1NCwgMTQxLCA4LCA0LCAyNTEsIDE2MSwgOCwgNCwgMjQ1LCAxMTAsIDgsIAotICAgIDQsIDI1MSwgMTYyLCA4LCA0LCAyNDQsIDIyLCA4LCA0LCAyNDQsIDIzLCA4LCA0LCAyNDgsIDcxLCA4LCA0LCAyNDQsIDIxLCAKLSAgICA4LCA0LCAyMzksIDQ1LCA4LCA0LCAyMzksIDQ2LCA4LCA0LCAyNDEsIDE2NiwgOCwgNCwgMjM5LCA0NCwgOCwgNCwgMjM5LCAKLSAgICA0OCwgOCwgNCwgMjQ0LCAyNywgOCwgNCwgMjM5LCA0NywgOCwgNCwgMjQ0LCAyNSwgOCwgNCwgMjQ0LCAyNiwgOCwgNCwgCi0gICAgMjQ4LCA3MiwgOCwgNCwgMjQ0LCAyNCwgOCwgNCwgMjQxLCAxNjcsIDgsIDQsIDI0NCwgMzAsIDgsIDQsIDI0OCwgNzMsIDgsIAotICAgIDQsIDI0NCwgMjgsIDgsIDQsIDIzOSwgNDksIDgsIDQsIDI0NCwgMjksIDgsIDQsIDI0NCwgMzIsIDgsIDQsIDI0NCwgMzMsIAotICAgIDgsIDQsIDI0OCwgNzQsIDgsIDQsIDI0NCwgMzEsIDgsIDQsIDI0NCwgMjMzLCA4LCA0LCAyNDQsIDIzNCwgOCwgNCwgMjQ4LCAKLSAgICAxMTMsIDgsIDQsIDI0NCwgMjMyLCA4LCA0LCAyMzksIDE0NywgOCwgNCwgMjM5LCAxNDgsIDgsIDQsIDI0NCwgMjMxLCA4LCAKLSAgICA0LCAyMzksIDE0NiwgOCwgNCwgMjM5LCAxNDksIDgsIDQsIDI0NCwgMjM5LCA4LCA0LCAyNDQsIDIzNywgOCwgNCwgMjQ0LCAKLSAgICAyMzgsIDgsIDQsIDI0OCwgMTE0LCA4LCA0LCAyNDQsIDIzNiwgOCwgNCwgMjQ0LCAyNDIsIDgsIDQsIDI0OCwgMTE1LCA4LCAKLSAgICA0LCAyNDQsIDI0MCwgOCwgNCwgMjM5LCAxNTAsIDgsIDQsIDI0NCwgMjQxLCA4LCA0LCAyNDQsIDI0NSwgOCwgNCwgMjQ0LCAKLSAgICAyNDYsIDgsIDQsIDI1MSwgNjYsIDgsIDQsIDI0NCwgMjQzLCA4LCA0LCAyMzksIDE1MSwgOCwgNCwgMjQ0LCAyNDQsIDgsIDQsIAotICAgIDI0NSwgMjIsIDgsIDQsIDI0NSwgMjMsIDgsIDQsIDI0NywgNDQsIDgsIDQsIDI0MSwgMjA3LCA4LCA0LCAyMzksIDE2MSwgOCwgCi0gICAgNCwgMjM5LCAxNjIsIDgsIDQsIDI0NSwgMjEsIDgsIDQsIDIzOSwgMTYwLCA4LCA0LCAyMzksIDE2NCwgOCwgNCwgMjQ1LCAKLSAgICAyOSwgOCwgNCwgMjM5LCAxNjMsIDgsIDQsIDI0NSwgMjcsIDgsIDQsIDI0NSwgMjgsIDgsIDQsIDI0NywgMTksIDgsIDQsIAotICAgIDI0MSwgMjA4LCA4LCA0LCAyNDUsIDMxLCA4LCA0LCAyNDUsIDMyLCA4LCA0LCAyNDcsIDE4NSwgOCwgNCwgMjQ1LCAzMCwgOCwgCi0gICAgNCwgMjUyLCAxMTQsIDgsIDQsIDI1MiwgMTE1LCA4LCA0LCAyNTMsIDM4LCA4LCA0LCAyNTIsIDExMywgOCwgNCwgMjQ2LCAKLSAgICA2NCwgOCwgNCwgMjQ2LCA2NSwgOCwgNCwgMjUyLCAxMTIsIDgsIDQsIDI0NiwgNjMsIDgsIDQsIDI0NiwgNjcsIDgsIDQsIAotICAgIDI1MiwgMTIxLCA4LCA0LCAyNTIsIDExOSwgOCwgNCwgMjUyLCAxMjAsIDgsIDQsIDI1NCwgMTgsIDgsIDQsIDI1MiwgMTE3LCAKLSAgICA4LCA0LCAyNTIsIDEzMSwgOCwgNCwgMjUyLCAxMzMsIDgsIDQsIDI1NCwgMTc0LCA4LCA0LCAyNTIsIDEyOSwgOCwgNCwgCi0gICAgMjQ2LCA3MiwgOCwgNCwgMjUyLCAxMzAsIDgsIDQsIDI0OCwgMjAyLCA4LCA0LCAyNTIsIDE1MiwgOCwgNCwgMjUzLCAyOCwgCi0gICAgOCwgNCwgMjUyLCAxNTEsIDgsIDQsIDI0NiwgOTAsIDgsIDQsIDI0NiwgOTEsIDgsIDQsIDI1MiwgMTQ5LCA4LCA0LCAyNDYsIAotICAgIDg5LCA4LCA0LCAyNDYsIDEwMiwgOCwgNCwgMjQ2LCAxMDMsIDgsIDQsIDI1MiwgMTU3LCA4LCA0LCAyNDYsIDEwMSwgOCwgNCwgCi0gICAgMjQ4LCAyMDMsIDgsIDQsIDI1MiwgMTU1LCA4LCA0LCAyNTIsIDI1MSwgOCwgNCwgMjUyLCAxNTQsIDgsIDQsIDI1MiwgMTYwLCAKLSAgICA4LCA0LCAyNTIsIDE2MSwgOCwgNCwgMjUyLCAyMzMsIDgsIDQsIDI1MiwgMTU4LCA4LCA0LCAyNDYsIDEwNCwgOCwgNCwgCi0gICAgMjUyLCAxNTksIDgsIDQsIDI1MiwgMTY0LCA4LCA0LCAyNTIsIDE2NSwgOCwgNCwgMjUzLCAyMDMsIDgsIDQsIDI1MiwgMTYyLCAKLSAgICA4LCA0LCAyNDYsIDEwNSwgOCwgNCwgMjUyLCAxNjMsIDgsIDI5LCAyNDgsIDE0MywgOCwgMjksIDI1MywgNDIsIDgsIDI5LCAKLSAgICAyNDgsIDgzLCA4LCAyOSwgMjQxLCAyMDcsIDgsIDI5LCAyNDgsIDE1LCA4LCAyOSwgMjQ3LCAyMDIsIDgsIDI5LCAyNDEsIAotICAgIDEzOSwgOCwgMjksIDI0OCwgNDcsIDgsIDI5LCAyNTIsIDIzOSwgOCwgMjksIDI0MSwgMTU5LCA4LCAyOSwgMjQ4LCA5NywgOCwgCi0gICAgMjksIDI0MSwgOTgsIDgsIDI5LCAyNDgsIDEwMSwgOCwgMjksIDI1MiwgMjUxLCA4LCAyOSwgMjQ4LCAxMzYsIDgsIDI5LCAKLSAgICAyNDEsIDE2MSwgOCwgMjksIDI0OCwgMTcwLCA4LCAyOSwgMjUyLCAyMDUsIDgsIDI5LCAyNDgsIDIxMiwgOCwgMjksIDI0OCwgCi0gICAgMTYsIDgsIDI5LCAyNDEsIDExOCwgOCwgMjksIDI0NywgMTEsIDgsIDI5LCAyNDEsIDE0MCwgOCwgMjksIDI0MSwgMjA4LCA4LCAKLSAgICAyOSwgMjUzLCAxOCwgOCwgMjksIDI1MywgMjU1LCA4LCAyOSwgMjQxLCAxNjcsIDgsIDI5LCAyNDgsIDIxMSwgOCwgMjksIAotICAgIDI0OCwgMTM4LCA4LCAyOSwgMjQ4LCA2MiwgOCwgMjksIDI0OCwgMjAyLCA4LCAyOSwgMjQ4LCAxOTMsIDgsIDI5LCAyNDgsIAotICAgIDE2MCwgOCwgMjksIDI0OCwgMTkwLCA4LCAyOSwgMjUyLCAyMjYsIDgsIDI5LCAyNTMsIDkwLCA4LCAyOSwgMjQxLCAyMDksIAotICAgIDgsIDI5LCAyNDgsIDc0LCA4LCAyOSwgMjQ4LCA1NiwgOCwgMjksIDI0MSwgMTY2LCA4LCAyOSwgMjUzLCAxMCwgOCwgMjksIAotICAgIDI1MywgMzEsIDgsIDI5LCAyNDEsIDI0MiwgOCwgMjksIDI0OCwgOTMsIDgsIDI5LCAyNTMsIDIxMywgOCwgMjksIDI0MSwgCi0gICAgMTExLCA4LCAyOSwgMjQ4LCA4LCA4LCAyOSwgMjQxLCAxNjAsIDgsIDI5LCAyNDEsIDIzNSwgOCwgMjksIDI0OCwgMjEzLCA4LCAKLSAgICAyOSwgMjQxLCAyNDAsIDgsIDI5LCAyNDYsIDIxNywgOCwgMjksIDIzOCwgODUsIDgsIDI5LCAyNDEsIDIwMCwgOCwgMjksIAotICAgIDI1MywgNiwgMzQsIDQsIDI1MiwgMjMxLCAzNCwgNCwgMjQ5LCAyMjQsIDM0LCA0LCAyNDcsIDE0OSwgMzQsIDQsIDI0NywgCi0gICAgMjI2LCAzNCwgNCwgMjQ2LCA1MywgMzQsIDQsIDI0NywgNDYsIDM0LCA0LCAyNDIsIDIwMywgMzQsIDQsIDI0NywgMjgsIDM0LCAKLSAgICA0LCAyNDQsIDExOCwgMzQsIDQsIDI0NCwgNjYsIDM0LCA0LCAyMzksIDEwNywgMzQsIDQsIDI0MywgMTE2LCAzNCwgNCwgCi0gICAgMjQ3LCAxNDAsIDM0LCA0LCAyNDcsIDExMywgMzQsIDQsIDI0NywgMTA2LCAzNCwgNCwgMjQwLCAyMzgsIDM0LCA0LCAyNDMsIAotICAgIDYxLCAzNCwgNCwgMjM4LCAxODQsIDM0LCA0LCAyNDcsIDE2OCwgMzQsIDQsIDI0NywgMTk3LCAzNCwgNCwgMjQ3LCAzMCwgCi0gICAgMzQsIDQsIDI0NCwgMTg3LCAzNCwgNCwgMjQ3LCA1MCwgMzQsIDQsIDI0MSwgNzAsIDM0LCA0LCAyNDcsIDY0LCAzNCwgNCwgCi0gICAgMjQxLCAyNSwgMzQsIDQsIDI0OCwgNiwgMzQsIDQsIDI0NywgMzgsIDM0LCA0LCAyNDQsIDIzMCwgMzQsIDQsIDI0NywgNjIsIAotICAgIDM0LCA0LCAyNDgsIDgwLCAzNCwgNCwgMjM5LCAxMzUsIDM0LCA0LCAyNDcsIDE0NCwgMzQsIDQsIDI0NywgMTcyLCAzNCwgNCwgCi0gICAgMjQ3LCAxODEsIDM0LCA0LCAyNDEsIDIwNiwgMzQsIDQsIDc0LCAzNCwgNCwgMjUzLCA3OSwgMzQsIDQsIDI1MywgNDEsIDM0LCAKLSAgICA0LCAyNTAsIDc2LCAzNCwgNCwgMjUzLCAyNywgMzQsIDQsIDI1MiwgMTAwLCAzNCwgNCwgMjUyLCAyMjMsIDM0LCA0LCAyNDksIAotICAgIDExNSwgMzQsIDQsIDI1MywgMzAsIDM0LCA0LCAyNTEsIDEsIDM0LCA0LCAyNTAsIDE4MywgMzQsIDQsIDI0NCwgMTI4LCAzNCwgCi0gICAgNCwgMjUwLCAxNywgMzQsIDQsIDI1MywgODgsIDM0LCA0LCAyNTMsIDEzOCwgMzQsIDQsIDI1MywgNDQsIDM0LCA0LCAyNDcsIAotICAgIDcsIDM0LCA0LCAyNDksIDE5MCwgMzQsIDQsIDI0MywgNjQsIDM0LCA0LCAyNTMsIDQyLCAzNCwgNCwgMjUzLCAzNywgMzQsIAotICAgIDQsIDI1MywgMTIsIDM0LCA0LCAyNDgsIDEwNywgMzQsIDQsIDI1MywgMjQsIDM0LCA0LCAyNDcsIDUxLCAzNCwgNCwgMjUzLCAKLSAgICA3MiwgMzQsIDQsIDI0NywgMjM4LCAzNCwgNCwgMjUzLCAxNDMsIDM0LCA0LCAyNTMsIDEwNCwgMzQsIDQsIDI0OCwgMTEzLCAKLSAgICAzNCwgNCwgMjUzLCAyOCwgMzQsIDQsIDI1MywgNywgMzQsIDQsIDI0NCwgMjEyLCAzNCwgNCwgMjUzLCAzOSwgMzQsIDQsIAotICAgIDI1MiwgMjM5LCAzNCwgNCwgMjUyLCAyNDgsIDM0LCA0LCAyNDcsIDQ0LCAzNCwgNCwgNTcsIDM0LCA0LCAyNTMsIDUsIDM0LCAKLSAgICA0LCAyNDQsIDIwNCwgMzQsIDQsIDE1NCwgMzQsIDQsIDI1MCwgNjEsIDM0LCA0LCAyNTIsIDIwOCwgMzQsIDQsIDI1MiwgOTMsIAotICAgIDM0LCA0LCAyMTMsIDM0LCA0LCAyNDYsIDE5OSwgMzQsIDQsIDI1MiwgMjExLCAzNCwgNCwgMjQ4LCA5OSwgMzQsIDQsIDI0OCwgCi0gICAgODUsIDM0LCA0LCAyNDQsIDY1LCAzNCwgNCwgMjQ0LCAxMjYsIDM0LCA0LCAyNDgsIDQ2LCAzNCwgNCwgMjUyLCAyMzQsIDM0LCAKLSAgICA0LCAyNTIsIDI0MywgMzQsIDQsIDI1MiwgMjAyLCAzNCwgNCwgMjQ2LCAxNzMsIDM0LCA0LCAyNDYsIDE5NiwgMzQsIDQsIAotICAgIDI0MywgNjIsIDM0LCA0LCAyNTIsIDIwMCwgMzQsIDQsIDIwOCwgMzQsIDQsIDI1MiwgMjAzLCAzNCwgNCwgMjQ3LCAxODAsIAotICAgIDM0LCA0LCAyNTIsIDIwNCwgMzQsIDQsIDI0NiwgMTY1LCAzNCwgNCwgMjUyLCAyMjYsIDM0LCA0LCAyNDYsIDIyMywgMzQsIAotICAgIDQsIDI1MiwgMjE1LCAzNCwgNCwgMjUyLCAyMTMsIDM0LCA0LCAyNTEsIDY1LCAzNCwgNCwgMTkxLCAzNCwgNCwgMTc3LCAzNCwgCi0gICAgNCwgMjQ3LCAzOSwgMzQsIDQsIDI0MSwgMjAxLCAzNCwgNCwgMjUyLCAyMDUsIDM0LCA0LCAxOTgsIDM0LCA0LCAyNTIsIAotICAgIDIwMSwgMzQsIDQsIDI0NiwgMTgxLCAzNCwgNCwgMjUyLCAyMjAsIDM0LCA0LCAyNTEsIDk5LCAzNCwgNCwgMjQ4LCA2NSwgCi0gICAgMzQsIDQsIDI0NywgMTE2LCAzNCwgNCwgMjQ2LCA1NywgMzQsIDQsIDI0NywgMTg5LCAzNCwgNCwgMjQyLCAyMDQsIDM0LCA0LCAKLSAgICAyNDksIDEyNiwgMzQsIDQsIDI0NCwgMTE5LCAzNCwgNCwgMjQ0LCA2OCwgMzQsIDQsIDIzOSwgMTA4LCAzNCwgNCwgMjQzLCAKLSAgICAxMTksIDM0LCA0LCAyNDgsIDM5LCAzNCwgNCwgMjUyLCA4MCwgMzQsIDQsIDI0NywgMTA5LCAzNCwgNCwgMjQxLCA4MCwgMzQsIAotICAgIDQsIDI0MywgNjcsIDM0LCA0LCAyMzgsIDE4NSwgMzQsIDQsIDI0NywgODcsIDM0LCA0LCAyNDgsIDE0OSwgMzQsIDQsIDI0OSwgCi0gICAgMjA0LCAzNCwgNCwgMjQ0LCAxOTQsIDM0LCA0LCAyNDcsIDEwNCwgMzQsIDQsIDI0MSwgMjM5LCAzNCwgNCwgMjQ4LCAyMTAsIAotICAgIDM0LCA0LCAyNDYsIDExNSwgMzQsIDQsIDI0NywgMTI2LCAzNCwgNCwgMjUwLCAxMzcsIDM0LCA0LCAyNDQsIDIzNSwgMzQsIAotICAgIDQsIDI0NywgMjM0LCAzNCwgNCwgMjQ3LCAxNjIsIDM0LCA0LCAyMzksIDEzNywgMzQsIDQsIDI1MCwgMzcsIDM0LCA0LCAKLSAgICAyNDcsIDE3NSwgMzQsIDQsIDI0NywgMTgzLCAzNCwgNCwgMjQ1LCAyNiwgMzQsIDQsIDY2LCAzNCwgNCwgMjUzLCAxMjEsIAotICAgIDM0LCA0LCAyNTMsIDU5LCAzNCwgNCwgMjUwLCA5NiwgMzQsIDQsIDI1MywgMTA5LCAzNCwgNCwgMjUyLCAxMDcsIDM0LCA0LCAKLSAgICAyNTMsIDgyLCAzNCwgNCwgMjQ5LCAxMTYsIDM0LCA0LCAyNTMsIDQ4LCAzNCwgNCwgMjUxLCAzLCAzNCwgNCwgMjUwLCAxODUsIAotICAgIDM0LCA0LCAyNDQsIDEzMCwgMzQsIDQsIDI1MCwgMTksIDM0LCA0LCAyNTMsIDE3OCwgMzQsIDQsIDI1MywgMTM5LCAzNCwgNCwgCi0gICAgMjUzLCAxOCwgMzQsIDQsIDI0NywgMjEzLCAzNCwgNCwgMjQ5LCAxOTEsIDM0LCA0LCAyNDMsIDY2LCAzNCwgNCwgMjUzLCAKLSAgICAyMiwgMzQsIDQsIDI1MywgMywgMzQsIDQsIDI1MywgMzEsIDM0LCA0LCAyNDgsIDEwOSwgMzQsIDQsIDI1MywgMjYsIDM0LCAKLSAgICA0LCAyNDYsIDI0NiwgMzQsIDQsIDI1MywgOTcsIDM0LCA0LCAyNDcsIDI0MCwgMzQsIDQsIDI1MywgMTcyLCAzNCwgNCwgCi0gICAgMjUzLCAxMTgsIDM0LCA0LCAyNDgsIDExNSwgMzQsIDQsIDI1MiwgMjMzLCAzNCwgNCwgMjUzLCAzNCwgMzQsIDQsIDI0NCwgCi0gICAgMjE0LCAzNCwgNCwgMjUzLCA0MCwgMzQsIDQsIDI1MiwgMjI5LCAzNCwgNCwgMjUyLCAyMjcsIDM0LCA0LCAyNDcsIDE4NSwgCi0gICAgMzQsIDQsIDczLCAzNCwgNCwgMjUzLCAxMDYsIDM0LCA0LCAyNDQsIDIxOCwgMzQsIDQsIDI1MywgMjEsIDM0LCA0LCAyNDgsIAotICAgIDY0LCAzNCwgNCwgMjUzLCAxMCwgMzQsIDQsIDI1MiwgMTAzLCAzNCwgNCwgMjUzLCA1MCwgMzQsIDQsIDI0NywgMjU0LCAzNCwgCi0gICAgNCwgMjUzLCA5OCwgMzQsIDQsIDI1MSwgMiwgMzQsIDQsIDI1MCwgMTg0LCAzNCwgNCwgMjQ0LCAxMjksIDM0LCA0LCAyNTAsIAotICAgIDE4LCAzNCwgNCwgMjQzLCAxMTgsIDM0LCA0LCAyNTMsIDE0OCwgMzQsIDQsIDI1MywgMTA4LCAzNCwgNCwgOTYsIDM0LCA0LCAKLSAgICAyNDYsIDIyOCwgMzQsIDQsIDI0OCwgMjYsIDM0LCA0LCAyNDMsIDY1LCAzNCwgNCwgMjUzLCA0OSwgMzQsIDQsIDI1MiwgCi0gICAgMjQ2LCAzNCwgNCwgMjUzLCA1NywgMzQsIDQsIDI0OCwgMTA4LCAzNCwgNCwgMjUzLCAyNSwgMzQsIDQsIDI0NiwgMjQ1LCAKLSAgICAzNCwgNCwgMjUzLCA2NSwgMzQsIDQsIDI0NywgMjM5LCAzNCwgNCwgMjUzLCA2NiwgMzQsIDQsIDI1MywgOTAsIDM0LCA0LCAKLSAgICAyNDgsIDExNCwgMzQsIDQsIDI1MiwgMjUxLCAzNCwgNCwgMjUzLCAzMywgMzQsIDQsIDI0NCwgMjEzLCAzNCwgNCwgMjUzLCAKLSAgICA3NiwgMzQsIDQsIDI1MywgMTQsIDM0LCA0LCAyNTMsIDgsIDM0LCA0LCAyNDcsIDE5LCAzNCwgNCwgNzIsIDM0LCA0LCAyNTIsIAotICAgIDIzMiwgMzQsIDQsIDI0NCwgMjA4LCAzNCwgNCwgMjUyLCAyNTIsIDM0LCA0LCAyNTAsIDY2LCAzNCwgNCwgMjUyLCAyNTAsIAotICAgIDM0LCA0LCAyNTIsIDk3LCAzNCwgNCwgMjUzLCAwLCAzNCwgNCwgMjQ5LCAxMTQsIDM0LCA0LCAyNTMsIDczLCAzNCwgNCwgCi0gICAgMjUxLCAwLCAzNCwgNCwgMjUwLCAxODIsIDM0LCA0LCAyNDQsIDY3LCAzNCwgNCwgMjQ0LCAxMjcsIDM0LCA0LCAyNTAsIDE2LCAKLSAgICAzNCwgNCwgMjQzLCAxMTcsIDM0LCA0LCAyNTMsIDE0NywgMzQsIDQsIDI1MywgOTUsIDM0LCA0LCAyNTMsIDksIDM0LCA0LCAKLSAgICAyNDYsIDI0NywgMzQsIDQsIDI0OSwgMTg5LCAzNCwgNCwgMjQzLCA2MywgMzQsIDQsIDI1MywgODAsIDM0LCA0LCAyNTMsIAotICAgIDM2LCAzNCwgNCwgMjUzLCAyMCwgMzQsIDQsIDI0OCwgMTA2LCAzNCwgNCwgMjUzLCA1MiwgMzQsIDQsIDI0NiwgMTg2LCAzNCwgCi0gICAgNCwgMjUzLCA0NiwgMzQsIDQsIDI0NiwgMjUxLCAzNCwgNCwgMjUzLCAxNDEsIDM0LCA0LCAyNTMsIDExNywgMzQsIDQsIAotICAgIDI0NywgNDMsIDM0LCA0LCAyNTMsIDk2LCAzNCwgNCwgMjUzLCA2LCAzNCwgNCwgMjQ0LCAyMTEsIDM0LCA0LCAyMzksIDEzNiwgCi0gICAgMzQsIDQsIDI1MywgMTAzLCAzNCwgNCwgMjUwLCAyMywgMzQsIDQsIDI1MywgMTMsIDM0LCA0LCAyNTIsIDI0NywgMzQsIDQsIAotICAgIDI0OCwgMTE5LCAzNCwgNCwgMjUzLCA2OSwgMzQsIDQsIDIzMCwgNzcsIDM0LCAyMzcsIDY3LCAzNCwgMjQ2LCAxNjIsIDI0MCwgCi0gICAgMTIxLCAzNCwgMjMzLCA4MiwgNzYsIDM0LCA0LCAyNDAsIDIzMSwgMjUyLCAyMzQsIDM0LCA0LCAyNDAsIDIzMSwgMTc3LCAKLSAgICAzNCwgNCwgMjQwLCAyMzEsIDI0NywgMTA0LCAzNCwgMTQsIDIzOCwgMjE0LCAzNCwgMTQsIDIzOSwgNTksIDM0LCAxNCwgCi0gICAgMjQ1LCAyNTMsIDM0LCAxNCwgMjQ4LCAxMTIsIDM0LCAxNCwgMjQyLCAxNzMsIDM0LCAxNCwgMjQ3LCAxMzksIDM0LCAxNCwgCi0gICAgMjQ3LCAyMDcsIDM0LCAxNCwgMjQxLCAxMTcsIDM0LCAxNCwgMjM4LCAxOTAsIDM0LCAxNCwgMjQ0LCA2OSwgMzQsIDE0LCAKLSAgICAyNDYsIDIsIDM0LCAxNCwgMjQzLCA3NSwgMzQsIDE0LCAyNDQsIDM0LCAzNCwgMjEsIDI0MCwgMTI2LCAzNCwgMjEsIDExOCwgCi0gICAgMzQsIDIxLCAxMTMsIDM0LCAyMSwgMTY2LCAzNCwgMjEsIDE1OCwgMzQsIDIxLCAxNzMsIDM0LCAyMSwgMTgzLCAzNCwgMjEsIAotICAgIDE5NCwgMzQsIDIxLCAxODcsIDM0LCAyMSwgMTkyLCAzNCwgNCwgMjQwLCAyMzEsIDE5OCwgMzQsIDQsIDI0MCwgMjMxLCAKLSAgICAyNTMsIDU3LCAyOCwgNiwgMSwgMjM1LCAyMzYsIDI4LCAzLCAxLCAyMzUsIDIzNiwgMjgsIDYsIDEsIDIzNywgMTgwLCAyOCwgCi0gICAgMywgMSwgMjM3LCAxODAsIDI4LCA2LCAxLCAyMDAsIDI0NiwgMjU1LCAyOCwgMywgMSwgMjAwLCAyNDYsIDI1NSwgMjgsIDYsIAotICAgIDEsIDI0MCwgMTQ2LCAyOCwgMywgMSwgMjQwLCAxNDYsIDI4LCA2LCAxLCAyMzcsIDIwMSwgMjgsIDMsIDEsIDIzNywgMjAxLCAKLSAgICAyOCwgNiwgMSwgMjMxLCAyNTQsIDI1MywgMTM3LCAyOCwgMywgMSwgMjMxLCAyNTQsIDI1MywgMTM3LCAyOCwgNiwgMSwgCi0gICAgMjQxLCAxMDQsIDIzNywgNjgsIDI4LCAzLCAxLCAyNDEsIDEwNCwgMjM3LCA2OCwgMjgsIDYsIDEsIDIzNSwgMTk1LCAyNDcsIAotICAgIDExOCwgMjgsIDMsIDEsIDIzNSwgMTk1LCAyNDcsIDExOCwgMjgsIDYsIDEsIDI0NywgMTE5LCAyLCAyNDcsIDI0OCwgMjQ3LCAKLSAgICAxMTgsIDI4LCAzLCAxLCAyNDcsIDExOSwgMiwgMjQ3LCAyNDgsIDI0NywgMTE4LCAyOCwgNiwgMSwgMjMzLCA5MywgMjQ3LCAKLSAgICAyNSwgMjgsIDMsIDEsIDIzMywgOTMsIDI0NywgMjUsIDI4LCA2LCAxLCAyMDAsIDI1MiwgMjMzLCAyOCwgMywgMSwgMjAwLCAKLSAgICAyNTIsIDIzMywgMjgsIDYsIDEsIDIzMywgOTMsIDU3LCAyOCwgMywgMSwgMjMzLCA5MywgNTcsIDI4LCA2LCAxLCAyMzcsIAotICAgIDU4LCAyMzcsIDEwMiwgMjQ2LCAxODMsIDI4LCAzLCAxLCAyMzcsIDU4LCAyMzcsIDEwMiwgMjQ2LCAxODMsIDI4LCA2LCAxLCAKLSAgICAyMzUsIDE1MywgMjQ2LCAxODMsIDI4LCAzLCAxLCAyMzUsIDE1MywgMjQ2LCAxODMsIDI4LCA2LCAxLCAyMzMsIDkzLCAyMzcsIAotICAgIDU4LCAyMzcsIDEwMiwgMjQ2LCAxODMsIDI4LCAzLCAxLCAyMzMsIDkzLCAyMzcsIDU4LCAyMzcsIDEwMiwgMjQ2LCAxODMsIAotICAgIDI4LCA2LCAxLCAyNTMsIDIwMiwgMjgsIDMsIDEsIDI1MywgMjAyLCAyOCwgNiwgMSwgMjQ2LCAyMjcsIDI1MywgMjAsIDI4LCAKLSAgICAzLCAxLCAyNDYsIDIyNywgMjUzLCAyMCwgMjgsIDYsIDEsIDI0NiwgMjI3LCAyNTMsIDU4LCAyOCwgMywgMSwgMjQ2LCAyMjcsIAotICAgIDI1MywgNTgsIDI4LCA2LCAxLCAyNDYsIDIyNywgMjUzLCA4NywgMjgsIDMsIDEsIDI0NiwgMjI3LCAyNTMsIDg3LCAyOCwgNiwgCi0gICAgMSwgMjMxLCAyNDEsIDczLCAyOCwgMywgMSwgMjMxLCAyNDEsIDczLCAyOCwgNiwgMSwgMjMyLCAxNSwgNzMsIDI4LCAzLCAxLCAKLSAgICAyMzIsIDE1LCA3MywgMjgsIDYsIDEsIDQ3LCAyMzEsIDI0MSwgNzMsIDI4LCAzLCAxLCA0NywgMjMxLCAyNDEsIDczLCAyOCwgCi0gICAgMSwgMjMwLCA4MCwgNzMsIDM2LCAyOCwgMjQwLCA4MCwgMzYsIDI4LCAyNTMsIDUzLCAyMzMsIDE1MiwgNTMsIDM2LCAyOCwgCi0gICAgMjM1LCA1NiwgMjMzLCAxNTIsIDUzLCAzNiwgMjgsIDIzMywgMTE3LCAyMzMsIDE1MiwgNTMsIDIzNCwgMjI1LCAyMzEsIAotICAgIDE5OCwgMzYsIDI4LCAyMzUsIDE4MSwgMzYsIDI4LCAyMzMsIDIyNSwgMjgsIDIzNSwgMTgxLCAyOCwgMjMzLCAyMjUsIDI4LCAKLSAgICA2LCAxLCAyNDcsIDEzNCwgMjgsIDMsIDEsIDI0NywgMTM0LCAyOCwgNiwgMSwgMjQxLCAxMjQsIDI4LCAzLCAxLCAyNDEsIAotICAgIDEyNCwgMjgsIDYsIDEsIDI0MiwgMzgsIDI4LCAzLCAxLCAyNDIsIDM4LCAyOCwgNiwgMSwgMjQxLCAzMCwgMjgsIDMsIDEsIAotICAgIDI0MSwgMzAsIDI4LCA2LCAxLCAyNDEsIDEyNSwgMjgsIDMsIDEsIDI0MSwgMTI1LCAyOCwgNiwgMSwgMjU0LCAyMTIsIDIsIAotICAgIDIzNywgNDQsIDg4LCAyOCwgMywgMSwgMjU0LCAyMTIsIDIsIDIzNywgNDQsIDg4LCAyOCwgNiwgMSwgMjQ3LCA1OSwgMjgsIAotICAgIDMsIDEsIDI0NywgNTksIDI4LCA2LCAxLCAyNDIsIDEyLCAyOCwgMywgMSwgMjQyLCAxMiwgMjgsIDYsIDEsIDI0MiwgMTEsIAotICAgIDI4LCAzLCAxLCAyNDIsIDExLCAyOCwgNiwgMSwgMjQxLCAyNTUsIDI4LCAzLCAxLCAyNDEsIDI1NSwgMjgsIDYsIDEsIDI0NywgCi0gICAgMTUxLCAyOCwgMywgMSwgMjQ3LCAxNTEsIDI4LCA2LCAxLCAyNDEsIDE2LCAyOCwgMywgMSwgMjQxLCAxNiwgNTIsIDEsIAotICAgIDIzNSwgNjMsIDIwNiwgMjUzLCAxMjIsIDI0MSwgNjIsIDUyLCAxLCAyMzUsIDYzLCAyMDYsIDI0NywgMjQsIDI0MSwgNjIsIAotICAgIDUyLCAxLCAyMzUsIDYzLCAyMDYsIDI1MywgMTIyLCAyMzgsIDQ4LCA1MiwgMSwgMjM1LCA2MywgMjA2LCAyNDcsIDI0LCAKLSAgICAyMzgsIDQ4LCA1MiwgMSwgMjM1LCA2MywgMjA2LCAyNTMsIDEyMiwgMjUzLCAxMzIsIDUyLCAxLCAyMzUsIDYzLCAyMDYsIAotICAgIDI0NywgMjQsIDI1MywgMTMyLCA1MiwgMSwgMjM1LCA2MywgMjA2LCAyNTMsIDEyMiwgMjUzLCAzLCA1MiwgMSwgMjM1LCA2MywgCi0gICAgMjA2LCAyNDcsIDI0LCAyNTMsIDMsIDUyLCAxLCAyMzAsIDE1MywgMjM3LCA1MCwgMjA2LCAxMjUsIDUyLCAxLCAyMDEsIAotICAgIDIzNywgNTAsIDIwNiwgMTI1LCA1MiwgMSwgMjUzLCAxNTIsIDIzNywgNTAsIDIwNiwgMTI1LCA1MiwgMSwgMTg0LCAyMzcsIAotICAgIDUwLCAyMDYsIDEyNSwgNTIsIDEsIDIzMSwgMjM3LCAyMzcsIDUwLCAyMDYsIDEyNSwgNTIsIDEsIDIzMCwgMTUzLCAyMzcsIAotICAgIDUwLCAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAyMDEsIDIzNywgNTAsIDIzMSwgMjExLCAyMDYsIDEyNSwgNTIsIDEsIAotICAgIDI1MywgMTUyLCAyMzcsIDUwLCAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAxODQsIDIzNywgNTAsIDIzMSwgMjExLCAKLSAgICAyMDYsIDEyNSwgNTIsIDEsIDIzMSwgMjM3LCAyMzcsIDUwLCAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAyMzAsIDE1MywgCi0gICAgMjMxLCAyMTEsIDIwNiwgMTI1LCA1MiwgMSwgMjAxLCAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAyNTMsIDE1MiwgMjMxLCAKLSAgICAyMTEsIDIwNiwgMTI1LCA1MiwgMSwgMTg0LCAyMzEsIDIxMSwgMjA2LCAxMjUsIDUyLCAxLCAyMzEsIDIzNywgMjMxLCAyMTEsIAotICAgIDIwNiwgMTI1LCA1MiwgMSwgNTYsIDYxLCAxMjUsIDUyLCAxLCA1NiwgMjM3LCA4NCwgNTIsIDEsIDU2LCAxNjksIDEyNSwgCi0gICAgNTIsIDEsIDIwMywgNDEsIDIzNywgNzksIDIzNywgOTgsIDUyLCAxLCAyMzcsIDEwNSwgOTksIDU4LCA1MiwgMSwgMjM3LCAKLSAgICAxMDUsIDEwMywgNTgsIDUyLCAxLCAyMzcsIDEwNSwgMjI5LCAxNjUsIDc2LCA1MiwgMSwgMjM3LCAxMDUsIDIzMywgNzAsIAotICAgIDIyOSwgMTY1LCA3NiwgNTIsIDEsIDE4NCwgMjMzLCA3MCwgMjI5LCAxNjUsIDc2LCA1MiwgMSwgMjM3LCAxNjUsIDIyLCAKLSAgICAyMDEsIDI0MCwgMTY3LCA1MiwgMSwgMjM3LCAxNjUsIDIyLCAxODQsIDI0MCwgMTY3LCA3LCA2LCAxLCAyMjcsIDE5MiwgCi0gICAgMjQwLCAxNzQsIDcsIDMsIDEsIDIyNywgMTkyLCAyNDAsIDE3NCwgNywgNiwgMSwgMjI3LCAxOTIsIDI0NiwgMjI0LCA3LCAzLCAKLSAgICAxLCAyMjcsIDE5MiwgMjQ2LCAyMjQsIDcsIDYsIDEsIDI0MSwgMTUzLCA3LCAzLCAxLCAyNDEsIDE1MywgNywgNiwgMSwgCi0gICAgMjU0LCAxMywgNywgMywgMSwgMjU0LCAxMywgNywgNiwgMSwgMjMyLCA1NiwgNywgMywgMSwgMjMyLCA1NiwgNywgNiwgMSwgCi0gICAgMjMwLCAxODAsIDcsIDMsIDEsIDIzMCwgMTgwLCA3LCA2LCAxLCAyMzIsIDE4LCAyLCAyMzcsIDY3LCA3LCAzLCAxLCAyMzIsIAotICAgIDE4LCAyLCAyMzcsIDY3LCA3LCAxLCAzLCA2LCAyNTQsIDE5MSwgNywgMSwgMywgNiwgMTkzLCA3LCA2LCAxLCAyNTIsIDIxMiwgCi0gICAgNywgMywgMSwgMjUyLCAyMTIsIDcsIDYsIDEsIDI1MywgMTY4LCA3LCAzLCAxLCAyNTMsIDE2OCwgNywgNiwgMSwgMjUyLCAKLSAgICAyMjIsIDcsIDMsIDEsIDI1MiwgMjIyLCA3LCA2LCAxLCAyNTMsIDE2OSwgNywgMywgMSwgMjUzLCAxNjksIDcsIDYsIDEsIAotICAgIDI1NSwgMiwgMiwgMTY5LCAxMjUsIDcsIDMsIDEsIDI1NSwgMiwgMiwgMTY5LCAxMjUsIDcsIDYsIDEsIDI1MywgMTE0LCA3LCAKLSAgICAzLCAxLCAyNTMsIDExNCwgNywgNiwgMSwgMjAwLCAyNTUsIDYyLCAyLCAyNDYsIDE2NCwgNywgMywgMSwgMjAwLCAyNTUsIAotICAgIDYyLCAyLCAyNDYsIDE2NCwgNywgNiwgMSwgMjU1LCA2NywgMiwgODIsIDcsIDMsIDEsIDI1NSwgNjcsIDIsIDgyLCA3LCA2LCAKLSAgICAxLCAyNTUsIDY3LCAyLCAyMzMsIDc0LCA4MiwgNywgMywgMSwgMjU1LCA2NywgMiwgMjMzLCA3NCwgODIsIDcsIDYsIDEsIAotICAgIDI1NSwgNjcsIDIsIDE5NSwgMjIsIDIzMywgNzQsIDgyLCA3LCAzLCAxLCAyNTUsIDY3LCAyLCAxOTUsIDIyLCAyMzMsIDc0LCAKLSAgICA4MiwgNywgNiwgMSwgMjM3LCAxNTAsIDE0OSwgNywgMywgMSwgMjM3LCAxNTAsIDE0OSwgNywgNiwgMSwgMjU1LCA1OCwgMiwgCi0gICAgMjAxLCA4MiwgNywgMywgMSwgMjU1LCA1OCwgMiwgMjAxLCA4MiwgNywgNiwgMSwgMTMwLCAyLCAxODIsIDE5NSwgMjMzLCAKLSAgICA4NywgNywgMywgMSwgMTMwLCAyLCAxODIsIDE5NSwgMjMzLCA4NywgNywgNiwgMSwgMTMwLCAyLCAyNDAsIDIwMiwgNywgMywgCi0gICAgMSwgMTMwLCAyLCAyNDAsIDIwMiwgNywgNiwgMSwgMjUyLCAyMjAsIDcsIDMsIDEsIDI1MiwgMjIwLCA3LCA2LCAxLCAyNTUsIAotICAgIDcwLCAyLCAxOTUsIDIzNSwgNDIsIDIzMCwgMTI2LCA3LCAzLCAxLCAyNTUsIDcwLCAyLCAxOTUsIDIzNSwgNDIsIDIzMCwgCi0gICAgMTI2LCA3LCA2LCAxLCAyNTUsIDcwLCAyLCAyMzIsIDIyLCA3LCAzLCAxLCAyNTUsIDcwLCAyLCAyMzIsIDIyLCA3LCA2LCAxLCAKLSAgICAyNTUsIDcwLCAyLCAyMzMsIDI0MSwgMjQwLCAxMzMsIDcsIDMsIDEsIDI1NSwgNzAsIDIsIDIzMywgMjQxLCAyNDAsIDEzMywgCi0gICAgNywgNiwgMSwgMjU1LCA3NSwgMiwgMTk1LCAyMzUsIDQyLCAyMzAsIDEyNiwgNywgMywgMSwgMjU1LCA3NSwgMiwgMTk1LCAKLSAgICAyMzUsIDQyLCAyMzAsIDEyNiwgNywgNiwgMSwgMjU1LCA3NSwgMiwgMjMzLCA3NCwgODIsIDcsIDMsIDEsIDI1NSwgNzUsIDIsIAotICAgIDIzMywgNzQsIDgyLCA3LCA2LCAxLCAyNTUsIDU3LCAyMzMsIDE0MywgNywgMywgMSwgMjU1LCA1NywgMjMzLCAxNDMsIDcsIAotICAgIDYsIDEsIDI1NCwgNSwgMjMzLCAxNDMsIDcsIDMsIDEsIDI1NCwgNSwgMjMzLCAxNDMsIDcsIDYsIDEsIDI1NSwgNjksIDIsIAotICAgIDIzMywgNzQsIDgyLCA3LCAzLCAxLCAyNTUsIDY5LCAyLCAyMzMsIDc0LCA4MiwgNywgNiwgMSwgMjUzLCAyMDEsIDcsIDMsIAotICAgIDEsIDI1MywgMjAxLCA3LCA2LCAxLCAyMzAsIDIxOSwgMjU0LCAxOTMsIDcsIDMsIDEsIDIzMCwgMjE5LCAyNTQsIDE5MywgNywgCi0gICAgNiwgMSwgMjQxLCAxOSwgMiwgODIsIDcsIDMsIDEsIDI0MSwgMTksIDIsIDgyLCA3LCA2LCAxLCAyNDEsIDE5LCAyLCAxOTUsIAotICAgIDIzNSwgNDIsIDIzMCwgMTI2LCA3LCAzLCAxLCAyNDEsIDE5LCAyLCAxOTUsIDIzNSwgNDIsIDIzMCwgMTI2LCA3LCA2LCAxLCAKLSAgICAyNDIsIDE4LCA3LCAzLCAxLCAyNDIsIDE4LCA3LCA2LCAxLCAyNTMsIDEyNSwgNywgMywgMSwgMjUzLCAxMjUsIDcsIDYsIDEsIAotICAgIDI1MywgMTgyLCA3LCAzLCAxLCAyNTMsIDE4MiwgNywgNiwgMSwgMjQ4LCAxMCwgNywgMywgMSwgMjQ4LCAxMCwgNTIsIDEsIAotICAgIDI1NCwgMTY1LCA3LCAzLCAxLCAyNDksIDIxMSwgNywgMywgMSwgMjQ3LCAxOCwgNywgMywgMSwgMjUxLCAyNiwgNywgMywgMSwgCi0gICAgMjUxLCA3OSwgNywgMywgMSwgMjQ4LCAxNTIsIDcsIDEsIDMsIDYsIDI0OCwgMTUyLCA3LCAzLCAxLCAyNDgsIDE4NCwgNywgCi0gICAgMywgMSwgMjUzLCAxOTksIDcsIDYsIDEsIDIzNSwgMzgsIDIyMiwgMjIyLCA3LCAzLCAxLCAyMzUsIDM4LCAyMjIsIDIyMiwgCi0gICAgNywgNiwgMSwgMjM1LCAzOCwgMjU0LCAxOTEsIDcsIDMsIDEsIDIzNSwgMzgsIDI1NCwgMTkxLCA3LCA2LCAxLCAyMzUsIDM4LCAKLSAgICAyMTQsIDcsIDYsIDEsIDIwOSwgMjM1LCAzOCwgMjE0LCA3LCAzLCAxLCAyMDksIDIzNSwgMzgsIDIxNCwgNywgNiwgMSwgCi0gICAgMjA5LCAxNDksIDcsIDMsIDEsIDIwOSwgMTQ5LCA3LCA2LCAxLCAyMzUsIDM4LCAxNDYsIDcsIDMsIDEsIDIzNSwgMzgsIAotICAgIDE0NiwgNywgNiwgMSwgMjM1LCAzOCwgMTkzLCA3LCAzLCAxLCAyMzUsIDM4LCAxOTMsIDcsIDYsIDEsIDIzNSwgMzgsIDI1NCwgCi0gICAgMTgzLCA3LCAzLCAxLCAyMzUsIDM4LCAyNTQsIDE4MywgNTIsIDEsIDE4NCwgMjMwLCAxMjUsIDIzNSwgMjQsIDUyLCAxLCAKLSAgICAyMzcsIDY2LCA1MiwgMSwgMjQwLCAxMjUsIDIzNywgNTEsIDUzLCA3LCA2LCAxLCAyMzIsIDQ0LCA3LCAzLCAxLCAyMzIsIAotICAgIDQ0LCA3LCAyMzAsIDE0NiwgMSwgMjAwLCAyNTQsIDE5MSwgNywgMjMwLCAxNDYsIDEsIDIwMCwgMjU0LCAxODcsIDcsIDIzMCwgCi0gICAgMTQ2LCAxLCAyMzMsIDcwLCAxODUsIDcsIDIzMCwgMTQ2LCAxLCAyNTUsIDU1LCAyMzgsIDIyLCA3LCAyMzAsIDE0NiwgMSwgCi0gICAgMjM1LCA4MywgMTg1LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgNTcsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCA3NCwgMjM3LCAKLSAgICA0MiwgMjQwLCAxMjcsIDUsIDIzMiwgMTc2LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgNjYsIDIzNywgNDIsIDI0MCwgMTI3LCAKLSAgICAxLCA3MiwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDczLCAyMzcsIDQyLCAyNDAsIDEyNywgNSwgMjM0LCAxMTcsIDIzNywgNDIsIAotICAgIDI0MCwgMTI3LCAxLCAyNTMsIDMzLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQ3LCAxNTgsIDIzNywgNDIsIDI0MCwgMTI3LCAKLSAgICAxLCAyNTMsIDc2LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQ4LCA1MiwgMjM3LCA0MiwgMjQwLCAxMjcsIDUsIDIzMSwgCi0gICAgMjA2LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCA2NiwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI0NywgMjksIDIzNywgCi0gICAgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIDkwLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUwLCAxMjksIDIzNywgNDIsIDI0MCwgCi0gICAgMTI3LCAxLCAyNDcsIDIxNywgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI0MSwgODIsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAKLSAgICAyNDcsIDEzMCwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI0MywgMzgsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCA5NiwgMjM3LCAKLSAgICA0MiwgMjQwLCAxMjcsIDEsIDI0NiwgMjI4LCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjUzLCA1NywgMjM3LCA0MiwgMjQwLCAKLSAgICAxMjcsIDEsIDI0OCwgMjYsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIDgsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIAotICAgIDUwLCAyMzcsIDQyLCAyNDAsIDEyNywgMSwgMjQ3LCA5OSwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgOTgsIDIzNywgCi0gICAgNDIsIDI0MCwgMTI3LCAxLCAyNDcsIDI1NCwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgMTQsIDIzNywgNDIsIDI0MCwgCi0gICAgMTI3LCAxLCAyNTIsIDI0NiwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgNDksIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAKLSAgICAyNDgsIDE1MSwgMjM3LCA0MiwgMjQwLCAxMjcsIDEsIDI1MywgMjUsIDIzNywgNDIsIDI0MCwgMTI3LCAxLCAyNTMsIDIxLCAKLSAgICAyMzcsIDQyLCAyNDAsIDEyNywgMzEsIDUsIDU3LCAyMzcsIDQyLCAyNDAsIDEyNywgMzEsIDUsIDc0LCAyMzcsIDQyLCAyNDAsIAotICAgIDEyNywgMzEsIDUsIDY2LCAyMzcsIDQyLCAyNDAsIDEyNywgMzEsIDUsIDcyLCAyMzcsIDQyLCAyNDAsIDEyNywgMzEsIDUsIAotICAgIDI1MiwgMjIwLCAyMzcsIDQyLCAyNDAsIDEyNywgMjM3LCAxODksIDIzNSwgMTkwLCAyMzcsIDQyLCAyNDAsIDEyNywgMjM3LCAKLSAgICAxODksIDIzNSwgMTkxLCAyMzcsIDQyLCAyNDAsIDEyNywgMjM3LCAxODksIDIzNiwgMTQ2LCAyMzcsIDQyLCAyNDAsIDEyNywgCi0gICAgMjM3LCAxODksIDIzNiwgMTQ3LCAyMTcsIDEsIDE3NywgMjE3LCAxLCAyNDYsIDE3OCwgMjE3LCAxLCAyNTIsIDIwNSwgMjE3LCAKLSAgICAxLCAyNDYsIDE2OSwgMjE3LCAxLCAyNTIsIDIxNSwgMjE3LCAxLCAyNDYsIDE3NiwgMjE3LCAxLCAyNTIsIDIxMywgMjE3LCAKLSAgICAxLCAyNDYsIDE4MSwgMjE3LCAxLCAyNTIsIDIwMiwgMjE3LCAxLCAyNDYsIDE3MywgMjE3LCAxLCAyNTIsIDIwMywgMjE3LCAKLSAgICAxLCAyNTIsIDIwMSwgMjE3LCAxLCAyMTMsIDIxNywgMSwgMjQ2LCAxODIsIDIxNywgMSwgMjUyLCAyMTEsIDIxNywgMSwgCi0gICAgMTk4LCAyMTcsIDEsIDI0NiwgMjE2LCAyMTcsIDEsIDI0MCwgMjQwLCAyMTcsIDEsIDI0NiwgMjU0LCAyMTcsIDEsIDI1MiwgCi0gICAgMjA4LCAyMTcsIDEsIDI0NiwgMjIzLCAyMTcsIDEsIDI1MiwgMjI2LCAyMTcsIDEsIDMsIDU3LCAyMTcsIDEsIDE5MSwgMjE3LCAKLSAgICAxLCAyMDgsIDIxNywgMSwgMjUyLCAyMDAsIDIxNywgMSwgMjQ2LCAxNjUsIDIxNywgMSwgMjUyLCAyMDQsIDIxNywgMSwgCi0gICAgMTU0LCAyMTcsIDEsIDU3LCAyMTcsIDEsIDc0LCAyMTcsIDEsIDY2LCAyMTcsIDEsIDcyLCAyMTcsIDEsIDczLCAyMTcsIDEsIAotICAgIDI1MywgMzUsIDIxNywgMSwgMjUzLCA4MywgMjE3LCAxLCAyNTIsIDIzNCwgMjE3LCAxLCAyNDcsIDc3LCAyMTcsIDEsIDI1MiwgCi0gICAgMjMxLCAyMTcsIDIzMSwgMTg5LCAxLCAyNTIsIDIwOCwgMjE3LCAyMzEsIDE4OSwgMSwgMTkxLCAyMTcsIDEsIDI0NiwgMTkxLCAKLSAgICAyMTcsIDEsIDI0MCwgMTUwLCAyMTcsIDEsIDI0NiwgMTkyLCAyMTcsIDEsIDI0NiwgMjAzLCAyMTcsIDEsIDIzMSwgMjM1LCAKLSAgICAxOTEsIDIxNywgMSwgMjMzLCA2MiwgMjQ2LCAxNjUsIDIxNywgMSwgMjM3LCAxMDcsIDE1NCwgMjE3LCAxLCAyMzIsIDc4LCAKLSAgICAyNTIsIDIzNCwgMjE3LCAyMzEsIDE4OSwgMSwgMjA4LCAyMTcsIDIzMSwgMTQ5LCAxLCAyMDgsIDIxNywgMSwgMjI4LCAxODQsIAotICAgIDIxNywgMjM3LCA2MiwgMjQ3LCAxNDgsIDc2LCAyMTcsIDQ3LCAyNDcsIDE0OCwgNzYsIDIxNywgMTY1LCAyNDAsIDE5MiwgCi0gICAgMjE3LCAxNjUsIDQ3LCAyNDAsIDE5MiwgMTQxLCA1LCAyMzEsIDIwNiwgMTQxLCA1LCAyMzMsIDEwMiwgMTQxLCAxLCA1NywgCi0gICAgMTQxLCAxLCAyNTIsIDIxMiwgMTQxLCAxLCA3NCwgMTQxLCAxLCAyNTIsIDIxNiwgMTQxLCAxLCA2NiwgMTQxLCAxLCAyNTIsIAotICAgIDIyNCwgMTQxLCAxLCAxNTMsIDE0NiwgMTQxLCAxLCAxNTMsIDI1MiwgMjQ5LCAxNDEsIDEsIDE1MywgMTQ5LCAxNDEsIDEsIAotICAgIDE1MywgMjUyLCAyNDUsIDE0MSwgMSwgNzIsIDE0MSwgMSwgMjUyLCAyMzEsIDE0MSwgMSwgMjUyLCAyMjEsIDE0MSwgMSwgCi0gICAgNzMsIDE0MSwgMSwgMjUyLCAyMjAsIDE0MSwgMSwgMjUyLCAyMjIsIDE0MSwgMSwgMTc3LCAxNDEsIDEsIDI0NiwgMTc4LCAKLSAgICAxNDEsIDEsIDI1MiwgMjA1LCAxNDEsIDEsIDI0NiwgMjAyLCAxNDEsIDEsIDI0NiwgMTY5LCAxNDEsIDEsIDI1MiwgMjE1LCAKLSAgICAxNDEsIDEsIDI0NiwgMTc2LCAxNDEsIDEsIDI1MiwgMjEzLCAxNDEsIDEsIDI0NiwgMjEzLCAxNDEsIDEsIDI0NiwgMTgxLCAKLSAgICAxNDEsIDEsIDI0NiwgMTkxLCAxNDEsIDEsIDI0MCwgMTUwLCAxNDEsIDEsIDI0NiwgMTkyLCAxNDEsIDEsIDI0MCwgMTY2LCAKLSAgICAxNDEsIDEsIDI0NiwgMjAzLCAxNDEsIDEsIDI1MiwgMjAyLCAxNDEsIDEsIDI0NiwgMTczLCAxNDEsIDEsIDI1MiwgMjAzLCAKLSAgICAxNDEsIDEsIDI0NiwgMTk2LCAxNDEsIDEsIDI1MiwgMjAxLCAxNDEsIDEsIDIxMywgMTQxLCAxLCAyNDYsIDE4MiwgMTQxLCAKLSAgICAxLCAyNTIsIDIxMSwgMTQxLCAxLCAyNDYsIDE5OSwgMTQxLCAxLCAxOTgsIDE0MSwgMSwgMTkxLCAxNDEsIDEsIDIwOCwgCi0gICAgMTQxLCAxLCAyNTIsIDIwMCwgMTQxLCAxLCAyNTIsIDI0MywgMTQxLCAxLCAyNDYsIDE2NSwgMTQxLCAxLCAyNDYsIDE5MCwgCi0gICAgMTQxLCAxLCAyNTIsIDIwNCwgMTQxLCAxLCAxNTQsIDE0MSwgMSwgMjQ2LCAyMjUsIDE0MSwgMjMxLCAxOTQsIDUsIDIzOSwgCi0gICAgMiwgMTQxLCAzMSwgNSwgMjUyLCAyMTIsIDE0MSwgMzEsIDUsIDc0LCAxNDEsIDMxLCA1LCAyNTIsIDIxNiwgMTQxLCAzMSwgCi0gICAgNSwgNjYsIDE0MSwgMzEsIDUsIDI1MiwgMjI0LCAxNDEsIDMxLCA1LCAxNTMsIDE0NiwgMTQxLCAzMSwgNSwgMTUzLCAyNTIsIAotICAgIDI0OSwgMTQxLCAzMSwgNSwgMTUzLCAxNDksIDE0MSwgMzEsIDUsIDE1MywgMjUyLCAyNDUsIDE0MSwgMzEsIDUsIDcyLCAKLSAgICAxNDEsIDMxLCA1LCAyNTIsIDIzMSwgMTQxLCAzMSwgNSwgMjUyLCAyMjEsIDE0MSwgMzEsIDUsIDczLCAxNDEsIDMxLCA1LCAKLSAgICAyNTIsIDIyMCwgMTQxLCAzMSwgNSwgMjUyLCAyMjIsIDE0MSwgNSwgMjM1LCA0MywgMTQxLCAyMzcsIDEwOSwgMTQxLCA0NywgCi0gICAgMjM3LCAxMDksIDE0MSwgMjEsIDI0MCwgMTI2LCAxNDEsIDIxLCAxMTgsIDE0MSwgMjEsIDExMywgMTQxLCAyMSwgMTY2LCAKLSAgICAxNDEsIDIxLCAxNTgsIDE0MSwgMjEsIDE3MywgMTQxLCAyMSwgMTgzLCAxNDEsIDIxLCAxOTQsIDE0MSwgMjEsIDE4NywgCi0gICAgMTQxLCAyMSwgMTkyLCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAyNDAsIDEyNiwgMjQwLCAxMTksIDI1NCwgMTg4LCAyMSwgCi0gICAgMTE4LCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAxMTMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIDE2NiwgMjQwLCAxMTksIAotICAgIDI1NCwgMTg4LCAyMSwgMTU4LCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAxNzMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjEsIAotICAgIDE4MywgMjQwLCAxMTksIDI1NCwgMTg4LCAyMSwgMTk0LCAyNDAsIDExOSwgMjU0LCAxODgsIDIxLCAxODcsIDI0MCwgMTE5LCAKLSAgICAyNTQsIDE4OCwgMjEsIDE5MiwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAxNzcsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgCi0gICAgMjQ2LCAxNzgsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMDUsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjQ2LCAKLSAgICAxNjksIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMDQsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjQ2LCAxNjUsIAotICAgIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMjYsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjQ2LCAxODEsIDI0MCwgCi0gICAgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMDIsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUwLCA5NSwgMjQwLCAxMTksIAotICAgIDI1NCwgMTg4LCAxLCAyNTIsIDIwMSwgMjQwLCAxMTksIDI1NCwgMTg4LCAxLCAyMTMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgCi0gICAgMjQ2LCAxODIsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMTk4LCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDI1MiwgMjAzLCAKLSAgICAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDI1MiwgMjExLCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDIwOCwgMjQwLCAxMTksIAotICAgIDI1NCwgMTg4LCAxLCAxOTEsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMDAsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgCi0gICAgMjUyLCAyMDgsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjQ2LCAxNzMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMTU0LCAKLSAgICAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDI1MiwgMjQzLCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDI1MiwgMjE1LCAyNDAsIAotICAgIDExOSwgMjU0LCAxODgsIDEsIDU3LCAyNDAsIDExOSwgMjU0LCAxODgsIDEsIDI1MywgMTUsIDI0MCwgMTE5LCAyNTQsIDE4OCwgCi0gICAgMSwgNzQsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMSwgMjUyLCAyMjAsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMzEsIDI1MywgNzEsIAotICAgIDI0MCwgMTE5LCAyNTQsIDE4OCwgMzEsIDcyLCAyNDAsIDExOSwgMjU0LCAxODgsIDMxLCA2NiwgMjQwLCAxMTksIDI1NCwgCi0gICAgMTg4LCAzMSwgMjUyLCAyMzEsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMzEsIDczLCAyNDAsIDExOSwgMjU0LCAxODgsIDIwNiwgCi0gICAgMjM1LCAyMDMsIDI0MCwgMTE5LCAyNTQsIDE4OCwgMjA2LCAyMzgsIDEzNSwgMjQwLCAxMTksIDI1NCwgMTg4LCAyMDYsIAotICAgIDI0MiwgMjMyLCAyMzUsIDIwMywgMjQwLCAxMTksIDI1NCwgMTg4LCA1LCAyNDcsIDEyOSwgMjQwLCAxMTksIDI1NCwgMTg4LCAKLSAgICA1LCAyNDUsIDE3NywgMjM3LCA0NywgMSwgMTc3LCAyMzcsIDQ3LCAxLCAyNTIsIDIwNSwgMjM3LCA0NywgMSwgMjQ2LCAxNjksIAotICAgIDIzNywgNDcsIDEsIDI1MiwgMjAyLCAyMzcsIDQ3LCAxLCAyNTIsIDIwMywgMjM3LCA0NywgMSwgMjUyLCAyMDEsIDIzNywgCi0gICAgNDcsIDEsIDIxMywgMjM3LCA0NywgMSwgMjUyLCAyMTEsIDIzNywgNDcsIDEsIDE5OCwgMjM3LCA0NywgMSwgMjUyLCAyMTUsIAotICAgIDIzNywgNDcsIDEsIDI1MiwgMjEzLCAyMzcsIDQ3LCAxLCAyNDYsIDE4MSwgMjM3LCA0NywgMSwgMjUyLCAyMDQsIDIzNywgCi0gICAgNDcsIDEsIDIwOCwgMjM3LCA0NywgMSwgMjUyLCAyMDAsIDIzNywgNDcsIDEsIDE5MSwgMjM3LCA0NywgMSwgMjUyLCAyMDgsIAotICAgIDIzNywgNDcsIDEsIDE1NCwgMjM3LCA0NywgMSwgMjQ4LCA5OSwgMjM3LCA0NywgMSwgMjQxLCAyMDEsIDIzNywgNDcsIDEsIAotICAgIDI0NywgMTgwLCAyMzcsIDQ3LCAxLCAyNDUsIDI0LCAyMzcsIDQ3LCAxLCA1NywgMjM3LCA0NywgMzEsIDUsIDc0LCAyMzcsIAotICAgIDQ3LCAzMSwgNSwgNjYsIDIzNywgNDcsIDMxLCA1LCA3MiwgMjM3LCA0NywgMzEsIDUsIDI1MiwgMjIxLCAyMzcsIDQ3LCAzMSwgCi0gICAgNSwgNzMsIDIzNywgNDcsIDMxLCA1LCAyNTIsIDIyMiwgMjM3LCA0NywgMzEsIDUsIDI1MywgMTAwLCAyMzcsIDQ3LCAzMSwgCi0gICAgNSwgMjU0LCA0OSwgMjM3LCA0NywgMjMxLCAxOTQsIDUsIDI1MywgNjksIDIzNywgNDcsIDIzMSwgMTk0LCA1LCAxOTksIAotICAgIDIzNywgNDcsIDIzMSwgMTk0LCA1LCAxNDYsIDIzNywgNDcsIDIzMSwgMTk0LCA1LCAyMTIsIDIzNywgNDcsIDIzNSwgNDMsIAotICAgIDIzNywgNDcsIDIzNSwgMTM1LCA3NiwgMTM2LCAxLCA1NywgMTM2LCAxLCA3NCwgMTM2LCAxLCA2NiwgMTM2LCAxLCA3MiwgCi0gICAgMTM2LCAxLCAyNTIsIDIyMSwgMTM2LCAxLCA3MywgMTM2LCAxLCAxNzcsIDEzNiwgMSwgMjQ2LCAxNzgsIDEzNiwgMSwgMjUyLCAKLSAgICAyMDUsIDEzNiwgMSwgMjQ2LCAyMDIsIDEzNiwgMSwgMjQ0LCAyMjMsIDEzNiwgMSwgMjQ2LCAxNjksIDEzNiwgMSwgMjQ2LCAKLSAgICAxNzYsIDEzNiwgMSwgMjQyLCAyNTAsIDEzNiwgMSwgMjUyLCAyMTMsIDEzNiwgMSwgMjQ2LCAyMTMsIDEzNiwgMSwgMjQ0LCAKLSAgICAyMjYsIDEzNiwgMSwgMjUxLCA1NywgMTM2LCAxLCAyNDQsIDIyNSwgMTM2LCAxLCAyNTIsIDIwMiwgMTM2LCAxLCAyNDYsIAotICAgIDE3MywgMTM2LCAxLCAyNTIsIDIwMywgMTM2LCAxLCAyNDYsIDE5NiwgMTM2LCAxLCAyNTEsIDc3LCAxMzYsIDEsIDI1MiwgCi0gICAgMjAxLCAxMzYsIDEsIDI0NiwgMTkyLCAxMzYsIDEsIDIxMywgMTM2LCAxLCAyNTEsIDExNywgMTM2LCAxLCAyNDYsIDE4MiwgCi0gICAgMTM2LCAxLCAyNTIsIDIxMSwgMTM2LCAxLCAyNDYsIDE5OSwgMTM2LCAxLCAyNTEsIDI1LCAxMzYsIDEsIDE5OCwgMTM2LCAxLCAKLSAgICAyNDcsIDY2LCAxMzYsIDEsIDE5MSwgMTM2LCAxLCAyMDgsIDEzNiwgMSwgMjUyLCAyMDAsIDEzNiwgMSwgMjUyLCAyNDMsIAotICAgIDEzNiwgMSwgMjQ2LCAxOTAsIDEzNiwgMSwgMjUyLCAyMDQsIDEzNiwgMSwgMTU0LCAxMzYsIDMxLCA1LCAyNTIsIDIxMiwgCi0gICAgMTM2LCAzMSwgNSwgNzQsIDEzNiwgMzEsIDUsIDI1MiwgMjE2LCAxMzYsIDMxLCA1LCAyNTMsIDE3NiwgMTM2LCAzMSwgNSwgCi0gICAgNjYsIDEzNiwgMzEsIDUsIDI1MywgMTUsIDEzNiwgMzEsIDUsIDczLCAxMzYsIDMxLCA1LCAyNTIsIDIyMSwgMTM2LCAzMSwgCi0gICAgNSwgMjUyLCAyMjIsIDEzNiwgMzEsIDUsIDI1MywgNzEsIDEzNiwgMjMxLCAxOTQsIDUsIDE5MSwgMTM2LCAyMzEsIDE5NCwgCi0gICAgNSwgMjA4LCAxMzYsIDIzMSwgMTk0LCA1LCAyNTIsIDIwMCwgMTM2LCAyMzEsIDE5NCwgNSwgMjUyLCAyMDgsIDEzNiwgMSwgCi0gICAgMzUsIDI1NCwgMTg2LCAxMzYsIDEsIDM1LCAyMTQsIDEzNiwgMSwgMzUsIDI1MywgNjksIDEzNiwgMjMxLCAxOTQsIDUsIDM1LCAKLSAgICAyNTMsIDY5LCAxMzYsIDEsIDM1LCAyNTMsIDIxMSwgMTM2LCAxLCAzNSwgMjU0LCAxODMsIDEzNiwgMSwgMzUsIDE5OSwgCi0gICAgMTM2LCAxLCAzNSwgMjU0LCAxODcsIDEzNiwgMSwgMzUsIDI1NCwgMTkwLCAxMzYsIDEsIDM1LCAxNDYsIDEzNiwgMSwgMzUsIAotICAgIDE0OSwgMTM2LCAxLCAzNSwgMjUzLCAxOTQsIDEzNiwgMjMxLCAxOTQsIDUsIDM1LCAxODUsIDEzNiwgMjMxLCAxOTQsIDUsIAotICAgIDM1LCAyMTIsIDEzNiwgMjEsIDI0MCwgMTI2LCAxMzYsIDIxLCAxMTgsIDEzNiwgMjEsIDExMywgMTM2LCAyMSwgMTY2LCAKLSAgICAxMzYsIDIxLCAxNTgsIDEzNiwgMjEsIDE3MywgMTM2LCAyMSwgMTgzLCAxMzYsIDIxLCAxOTQsIDEzNiwgMjEsIDE4NywgCi0gICAgMTM2LCAyMSwgMTkyLCAxMzYsIDIyOSwgMTYxLCAyMzYsIDIzNiwgMTM2LCAyMjksIDE2MSwgMjM3LCAxMDksIDEzNiwgMjI5LCAKLSAgICAxNjEsIDQ3LCAyMzcsIDEwOSwgMTM2LCAyMjksIDE2MSwgMjM3LCA0OSwgMjM3LCAxMDksIDksIDExLCAyMjUsIDExNSwgOSwgCi0gICAgMTEsIDIyNSwgMTE2LCA5LCAxMSwgMjI1LCAxMTcsIDksIDExLCAyMjUsIDExOCwgOSwgMTEsIDIyNSwgMTE5LCA5LCAxMSwgCi0gICAgMjI1LCAxMjAsIDksIDExLCAyMjUsIDEyMSwgOSwgMTEsIDIyNSwgMTIyLCA5LCAxMSwgMjI1LCAxMjMsIDksIDExLCAyMjUsIAotICAgIDEyNCwgOSwgMTEsIDIyNSwgMTI1LCA5LCAxMSwgMjI1LCAxMjYsIDksIDExLCAyMjUsIDEyNywgOSwgMTEsIDIyNSwgMTI4LCAKLSAgICA5LCAxMSwgMjI1LCAxMjksIDksIDExLCAyMjUsIDEzMCwgOSwgMTEsIDIyNSwgMTMxLCA5LCAxMSwgMjI1LCAxMzIsIDksIAotICAgIDExLCAyMjUsIDEzMywgOSwgMTEsIDIyNSwgMTM0LCA5LCAxMSwgMjI1LCAxMzUsIDksIDExLCAyMjUsIDEzNiwgOSwgMTEsIAotICAgIDIyNSwgMTM3LCA5LCAxMSwgMjI1LCAxMzgsIDksIDExLCAyMjUsIDEzOSwgOSwgMTEsIDIyNSwgMTQwLCA5LCAxMSwgMjI1LCAKLSAgICAxNDEsIDksIDExLCAyMjUsIDE0MiwgOSwgMTEsIDIyNSwgMTQzLCA5LCAxMSwgMjI1LCAxNDQsIDksIDExLCAyMjUsIDE0NSwgCi0gICAgOSwgMTEsIDIyNSwgMTQ2LCA5LCAxMSwgMjI1LCAxNDcsIDksIDExLCAyMjUsIDE0OCwgOSwgMTEsIDIyNSwgMTQ5LCA5LCAKLSAgICAxMSwgMjI1LCAxNTAsIDksIDExLCAyMjUsIDE1MSwgOSwgMTEsIDIyNSwgMTUyLCA5LCAxMSwgMjI1LCAxNTMsIDksIDExLCAKLSAgICAyMjUsIDE1NCwgOSwgMTEsIDIyNSwgMTU1LCA5LCAxMSwgMjI1LCAxNTYsIDksIDExLCAyMjUsIDE1NywgOSwgMTEsIDIyNSwgCi0gICAgMTU4LCA5LCAxMSwgMjI1LCAxNTksIDksIDExLCAyMjUsIDE2MCwgOSwgMTEsIDIyNSwgMTYxLCA5LCAxMSwgMjI1LCAxNjIsIAotICAgIDksIDExLCAyMjUsIDE2MywgOSwgMTEsIDIyNSwgMTY0LCA5LCAxMSwgMjI1LCAxNjUsIDksIDExLCAyMjUsIDE2NiwgOSwgCi0gICAgMTEsIDIyNSwgMTY3LCA5LCAxMSwgMjI1LCAxNjgsIDksIDExLCAyMjUsIDE2OSwgOSwgMTEsIDIyNSwgMTcwLCA5LCAxMSwgCi0gICAgMjI1LCAxNzEsIDksIDExLCAyMjUsIDE3MiwgOSwgMTEsIDIyNSwgMTczLCA5LCAxMSwgMjI1LCAxNzQsIDksIDExLCAyMjUsIAotICAgIDE3NSwgOSwgMTEsIDIyNSwgMTc2LCA5LCAxMSwgMjI1LCAxNzcsIDksIDExLCAyMjUsIDE3OCwgOSwgMTEsIDIyNSwgMTc5LCAKLSAgICA5LCAxMSwgMjI1LCAxODAsIDksIDExLCAyMjUsIDE4MSwgOSwgMTEsIDIyNSwgMTgyLCA5LCAxMSwgMjI1LCAxODMsIDksIAotICAgIDExLCAyMjUsIDE4NCwgOSwgMTEsIDIyNSwgMTg1LCA5LCAxMSwgMjI1LCAxODYsIDksIDExLCAyMjUsIDE4NywgOSwgMTEsIAotICAgIDIyNSwgMTg4LCA5LCAxMSwgMjI1LCAxODksIDksIDExLCAyMjUsIDE5MCwgOSwgMTEsIDIyNSwgMTkxLCA5LCAxMSwgMjI1LCAKLSAgICAxOTIsIDksIDExLCAyMjUsIDE5MywgOSwgMTEsIDIyNSwgMTk0LCA5LCAxMSwgMjI1LCAxOTUsIDksIDExLCAyMjUsIDE5NiwgCi0gICAgOSwgMTEsIDIyNSwgMTk3LCA5LCAxMSwgMjI1LCAxOTgsIDksIDExLCAyMjUsIDE5OSwgOSwgMTEsIDIyNSwgMjAwLCA5LCAKLSAgICAxMSwgMjI1LCAyMDEsIDksIDExLCAyMjUsIDIwMiwgOSwgMTEsIDIyNSwgMjAzLCA5LCAxMSwgMjI1LCAyMDQsIDksIDExLCAKLSAgICAyMjUsIDIwNSwgOSwgMTEsIDIyNSwgMjA2LCA5LCAxMSwgMjI1LCAyMDcsIDksIDExLCAyMjUsIDIwOCwgOSwgMTEsIDIyNSwgCi0gICAgMjA5LCA5LCAxMSwgMjI1LCAyMTAsIDksIDExLCAyMjUsIDIxMSwgOSwgMTEsIDIyNSwgMjEyLCA5LCAxMSwgMjI1LCAyMTMsIAotICAgIDksIDExLCAyMjUsIDIxNCwgOSwgMTEsIDIyNSwgMjE1LCA5LCAxMSwgMjI1LCAyMTYsIDksIDExLCAyMjUsIDIxNywgOSwgCi0gICAgMTEsIDIyNSwgMjE4LCA5LCAxMSwgMjI1LCAyMTksIDksIDExLCAyMjUsIDIyMCwgOSwgMTEsIDIyNSwgMjIxLCA5LCAxMSwgCi0gICAgMjI1LCAyMjIsIDksIDExLCAyMjUsIDIyMywgOSwgMTEsIDIyNSwgMjI0LCA5LCAxMSwgMjI1LCAyMjUsIDksIDExLCAyMjUsIAotICAgIDIyNiwgOSwgMTEsIDIyNSwgMjI3LCA5LCAxMSwgMjI1LCAyMjgsIDksIDExLCAyMjUsIDIyOSwgOSwgMTEsIDIyNSwgMjMwLCAKLSAgICA5LCAxMSwgMjI1LCAyMzEsIDksIDExLCAyMjUsIDIzMiwgOSwgMTEsIDIyNSwgMjMzLCA5LCAxMSwgMjI1LCAyMzQsIDksIAotICAgIDExLCAyMjUsIDIzNSwgOSwgMTEsIDIyNSwgMjM2LCA5LCAxMSwgMjI1LCAyMzcsIDksIDExLCAyMjUsIDIzOCwgOSwgMTEsIAotICAgIDIyNSwgMjM5LCA5LCAxMSwgMjI1LCAyNDAsIDksIDExLCAyMjUsIDI0MSwgOSwgMTEsIDIyNSwgMjQyLCA5LCAxMSwgMjI1LCAKLSAgICAyNDMsIDksIDExLCAyMjUsIDI0NCwgOSwgMTEsIDIyNSwgMjQ1LCA5LCAxMSwgMjI1LCAyNDYsIDksIDExLCAyMjUsIDI0NywgCi0gICAgOSwgMTEsIDIyNSwgMjQ4LCA5LCAxMSwgMjI1LCAyNDksIDksIDExLCAyMjUsIDI1MCwgOSwgMTEsIDIyNSwgMjUxLCA5LCAKLSAgICAxMSwgMjI1LCAyNTIsIDksIDExLCAyMjUsIDI1MywgOSwgMTEsIDIyNSwgMjU0LCA5LCAxMSwgMjI1LCAyNTUsIDksIDExLCAKLSAgICAyMjYsIDAsIDksIDExLCAyMjYsIDEsIDksIDExLCAyMjYsIDIsIDksIDExLCAyMjYsIDMsIDksIDExLCAyMjYsIDQsIDksIAotICAgIDExLCAyMjYsIDUsIDksIDExLCAyMjYsIDYsIDksIDExLCAyMjYsIDcsIDksIDExLCAyMjYsIDgsIDksIDExLCAyMjYsIDksIAotICAgIDksIDExLCAyMjYsIDEwLCA5LCAxMSwgMjI2LCAxMSwgOSwgMTEsIDIyNiwgMTIsIDksIDExLCAyMjYsIDEzLCA5LCAxMSwgCi0gICAgMjI2LCAxNCwgOSwgMTEsIDIyNiwgMTUsIDksIDExLCAyMjYsIDE2LCA5LCAxMSwgMjI2LCAxNywgOSwgMTEsIDIyNiwgMTgsIAotICAgIDksIDExLCAyMjYsIDE5LCA5LCAxMSwgMjI2LCAyMCwgOSwgMTEsIDIyNiwgMjEsIDksIDExLCAyMjYsIDIyLCA5LCAxMSwgCi0gICAgMjI2LCAyMywgOSwgMTEsIDIyNiwgMjQsIDksIDExLCAyMjYsIDI1LCA5LCAxMSwgMjI2LCAyNiwgOSwgMTEsIDIyNiwgMjcsIAotICAgIDksIDExLCAyMjYsIDI4LCA5LCAxMSwgMjI2LCAyOSwgOSwgMTEsIDIyNiwgMzAsIDksIDExLCAyMjYsIDMxLCA5LCAxMSwgCi0gICAgMjI2LCAzMiwgOSwgMTEsIDIyNiwgMzMsIDksIDExLCAyMjYsIDM0LCA5LCAxMSwgMjI2LCAzNSwgOSwgMTEsIDIyNiwgMzYsIAotICAgIDksIDExLCAyMjYsIDM3LCA5LCAxMSwgMjI2LCAzOCwgOSwgMTEsIDIyNiwgMzksIDksIDExLCAyMjYsIDQwLCA5LCAxMSwgCi0gICAgMjI2LCA0MSwgOSwgMTEsIDIyNiwgNDIsIDksIDExLCAyMjYsIDQzLCA5LCAxMSwgMjI2LCA0NCwgOSwgMTEsIDIyNiwgNDUsIAotICAgIDksIDExLCAyMjYsIDQ2LCA5LCAxMSwgMjI2LCA0NywgOSwgMTEsIDIyNiwgNDgsIDksIDExLCAyMjYsIDQ5LCA5LCAxMSwgCi0gICAgMjI2LCA1MCwgOSwgMTEsIDIyNiwgNTEsIDksIDExLCAyMjYsIDUyLCA5LCAxMSwgMjI2LCA1MywgOSwgMTEsIDIyNiwgNTQsIAotICAgIDksIDExLCAyMjYsIDU1LCA5LCAxMSwgMjI2LCA1NiwgOSwgMTEsIDIyNiwgNTcsIDksIDExLCAyMjYsIDU4LCA5LCAxMSwgCi0gICAgMjI2LCA1OSwgOSwgMTEsIDIyNiwgNjAsIDksIDExLCAyMjYsIDYxLCA5LCAxMSwgMjI2LCA2MiwgOSwgMTEsIDIyNiwgNjMsIAotICAgIDksIDExLCAyMjYsIDY0LCA5LCAxMSwgMjI2LCA2NSwgOSwgMTEsIDIyNiwgNjYsIDksIDExLCAyMjYsIDY3LCA5LCAxMSwgCi0gICAgMjI2LCA2OCwgOSwgMTEsIDIyNiwgNjksIDksIDExLCAyMjYsIDcwLCA5LCAxMSwgMjI2LCA3MSwgOSwgMTEsIDIyNiwgNzIsIAotICAgIDksIDExLCAyMjYsIDczLCA5LCAxMSwgMjI2LCA3NCwgOSwgMTEsIDIyNiwgNzUsIDksIDExLCAyMjYsIDc2LCA5LCAxMSwgCi0gICAgMjI2LCA3NywgOSwgMTEsIDIyNiwgNzgsIDksIDExLCAyMjYsIDc5LCA5LCAxMSwgMjI2LCA4MCwgOSwgMTEsIDIyNiwgODEsIAotICAgIDksIDExLCAyMjYsIDgyLCA5LCAxMSwgMjI2LCA4MywgOSwgMTEsIDIyNiwgODQsIDksIDExLCAyMjYsIDg1LCA5LCAxMSwgCi0gICAgMjI2LCA4NiwgOSwgMTEsIDIyNiwgODcsIDksIDExLCAyMjYsIDg4LCA5LCAxMSwgMjI2LCA4OSwgOSwgMTEsIDIyNiwgOTAsIAotICAgIDksIDExLCAyMjYsIDkxLCA5LCAxMSwgMjI2LCA5MiwgOSwgMTEsIDIyNiwgOTMsIDksIDExLCAyMjYsIDk0LCA5LCAxMSwgCi0gICAgMjI2LCA5NSwgOSwgMTEsIDIyNiwgOTYsIDksIDExLCAyMjYsIDk3LCA5LCAxMSwgMjI2LCA5OCwgOSwgMTEsIDIyNiwgOTksIAotICAgIDksIDExLCAyMjYsIDEwMCwgOSwgMTEsIDIyNiwgMTAxLCA5LCAxMSwgMjI2LCAxMDIsIDksIDExLCAyMjYsIDEwMywgOSwgCi0gICAgMTEsIDIyNiwgMTA0LCA5LCAxMSwgMjI2LCAxMDUsIDksIDExLCAyMjYsIDEwNiwgOSwgMTEsIDIyNiwgMTA3LCA5LCAxMSwgCi0gICAgMjI2LCAxMDgsIDksIDExLCAyMjYsIDEwOSwgOSwgMTEsIDIyNiwgMTEwLCA5LCAxMSwgMjI2LCAxMTEsIDksIDExLCAyMjYsIAotICAgIDExMiwgOSwgMTEsIDIyNiwgMTEzLCA5LCAxMSwgMjI2LCAxMTQsIDksIDExLCAyMjYsIDExNSwgOSwgMTEsIDIyNiwgMTE2LCAKLSAgICA5LCAxMSwgMjI2LCAxMTcsIDksIDExLCAyMjYsIDExOCwgOSwgMTEsIDIyNiwgMTE5LCA5LCAxMSwgMjI2LCAxMjAsIDksIAotICAgIDExLCAyMjYsIDEyMSwgOSwgMTEsIDIyNiwgMTIyLCA5LCAxMSwgMjI2LCAxMjMsIDksIDExLCAyMjYsIDEyNCwgOSwgMTEsIAotICAgIDIyNiwgMTI1LCA5LCAxMSwgMjI2LCAxMjYsIDksIDExLCAyMjYsIDEyNywgOSwgMTEsIDIyNiwgMTI4LCA5LCAxMSwgMjI2LCAKLSAgICAxMjksIDksIDExLCAyMjYsIDEzMCwgOSwgMTEsIDIyNiwgMTMxLCA5LCAxMSwgMjI2LCAxMzIsIDksIDExLCAyMjYsIDEzMywgCi0gICAgOSwgMTEsIDIyNiwgMTM0LCA5LCAxMSwgMjI2LCAxMzUsIDksIDExLCAyMjYsIDEzNiwgOSwgMTEsIDIyNiwgMTM3LCA5LCAKLSAgICAxMSwgMjI2LCAxMzgsIDksIDExLCAyMjYsIDEzOSwgOSwgMTEsIDIyNiwgMTQwLCA5LCAxMSwgMjI2LCAxNDEsIDksIDExLCAKLSAgICAyMjYsIDE0MiwgOSwgMTEsIDIyNiwgMTQzLCA5LCAxMSwgMjI2LCAxNDQsIDksIDExLCAyMjYsIDE0NSwgOSwgMTEsIDIyNiwgCi0gICAgMTQ2LCA5LCAxMSwgMjI2LCAxNDcsIDksIDExLCAyMjYsIDE0OCwgOSwgMTEsIDIyNiwgMTQ5LCA5LCAxMSwgMjI2LCAxNTAsIAotICAgIDksIDExLCAyMjYsIDE1MSwgOSwgMTEsIDIyNiwgMTUyLCA5LCAxMSwgMjI2LCAxNTMsIDksIDExLCAyMjYsIDE1NCwgOSwgCi0gICAgMTEsIDIyNiwgMTU1LCA5LCAxMSwgMjI2LCAxNTYsIDksIDExLCAyMjYsIDE1NywgOSwgMTEsIDIyNiwgMTU4LCA5LCAxMSwgCi0gICAgMjI2LCAxNTksIDksIDExLCAyMjYsIDE2MCwgOSwgMTEsIDIyNiwgMTYxLCA5LCAxMSwgMjI2LCAxNjIsIDksIDExLCAyMjYsIAotICAgIDE2MywgOSwgMTEsIDIyNiwgMTY0LCA5LCAxMSwgMjI2LCAxNjUsIDksIDExLCAyMjYsIDE2NiwgOSwgMTEsIDIyNiwgMTY3LCAKLSAgICA5LCAxMSwgMjI2LCAxNjgsIDksIDExLCAyMjYsIDE2OSwgOSwgMTEsIDIyNiwgMTcwLCA5LCAxMSwgMjI2LCAxNzEsIDksIAotICAgIDExLCAyMjYsIDE3MiwgOSwgMTEsIDIyNiwgMTczLCA5LCAxMSwgMjI2LCAxNzQsIDksIDExLCAyMjYsIDE3NSwgOSwgMTEsIAotICAgIDIyNiwgMTc2LCA5LCAxMSwgMjI2LCAxNzcsIDksIDExLCAyMjYsIDE3OCwgOSwgMTEsIDIyNiwgMTc5LCA5LCAxMSwgMjI2LCAKLSAgICAxODAsIDksIDExLCAyMjYsIDE4MSwgOSwgMTEsIDIyNiwgMTgyLCA5LCAxMSwgMjI2LCAxODMsIDksIDExLCAyMjYsIDE4NCwgCi0gICAgOSwgMTEsIDIyNiwgMTg1LCA5LCAxMSwgMjI2LCAxODYsIDksIDExLCAyMjYsIDE4NywgOSwgMTEsIDIyNiwgMTg4LCA5LCAKLSAgICAxMSwgMjI2LCAxODksIDksIDExLCAyMjYsIDE5MCwgOSwgMTEsIDIyNiwgMTkxLCA5LCAxMSwgMjI2LCAxOTIsIDksIDExLCAKLSAgICAyMjYsIDE5MywgOSwgMTEsIDIyNiwgMTk0LCA5LCAxMSwgMjI2LCAxOTUsIDksIDExLCAyMjYsIDE5NiwgOSwgMTEsIDIyNiwgCi0gICAgMTk3LCA5LCAxMSwgMjI2LCAxOTgsIDksIDExLCAyMjYsIDE5OSwgOSwgMTEsIDIyNiwgMjAwLCA5LCAxMSwgMjI2LCAyMDEsIAotICAgIDksIDExLCAyMjYsIDIwMiwgOSwgMTEsIDIyNiwgMjAzLCA5LCAxMSwgMjI2LCAyMDQsIDksIDExLCAyMjYsIDIwNSwgOSwgCi0gICAgMTEsIDIyNiwgMjA2LCA5LCAxMSwgMjI2LCAyMDcsIDksIDExLCAyMjYsIDIwOCwgOSwgMTEsIDIyNiwgMjA5LCA5LCAxMSwgCi0gICAgMjI2LCAyMTAsIDksIDExLCAyMjYsIDIxMSwgOSwgMTEsIDIyNiwgMjEyLCA5LCAxMSwgMjI2LCAyMTMsIDksIDExLCAyMjYsIAotICAgIDIxNCwgOSwgMTEsIDIyNiwgMjE1LCA5LCAxMSwgMjI2LCAyMTYsIDksIDExLCAyMjYsIDIxNywgOSwgMTEsIDIyNiwgMjE4LCAKLSAgICA5LCAxMSwgMjI2LCAyMTksIDksIDExLCAyMjYsIDIyMCwgOSwgMTEsIDIyNiwgMjIxLCA5LCAxMSwgMjI2LCAyMjIsIDksIAotICAgIDExLCAyMjYsIDIyMywgOSwgMTEsIDIyNiwgMjI0LCA5LCAxMSwgMjI2LCAyMjUsIDksIDExLCAyMjYsIDIyNiwgOSwgMTEsIAotICAgIDIyNiwgMjI3LCA5LCAxMSwgMjI2LCAyMjgsIDksIDExLCAyMjYsIDIyOSwgOSwgMTEsIDIyNiwgMjMwLCA5LCAxMSwgMjI2LCAKLSAgICAyMzEsIDksIDExLCAyMjYsIDIzMiwgOSwgMTEsIDIyNiwgMjMzLCA5LCAxMSwgMjI2LCAyMzQsIDksIDExLCAyMjYsIDIzNSwgCi0gICAgOSwgMTEsIDIyNiwgMjM2LCA5LCAxMSwgMjI2LCAyMzcsIDksIDExLCAyMjYsIDIzOCwgOSwgMTEsIDIyNiwgMjM5LCA5LCAKLSAgICAxMSwgMjI2LCAyNDAsIDksIDExLCAyMjYsIDI0MSwgOSwgMTEsIDIyNiwgMjQyLCA5LCAxMSwgMjI2LCAyNDMsIDksIDExLCAKLSAgICAyMjYsIDI0NCwgOSwgMTEsIDIyNiwgMjQ1LCA5LCAxMSwgMjI2LCAyNDYsIDksIDExLCAyMjYsIDI0NywgOSwgMTEsIDIyNiwgCi0gICAgMjQ4LCA5LCAxMSwgMjI2LCAyNDksIDksIDExLCAyMjYsIDI1MCwgOSwgMTEsIDIyNiwgMjUxLCA5LCAxMSwgMjI2LCAyNTIsIAotICAgIDksIDExLCAyMjYsIDI1MywgOSwgMTEsIDIyNiwgMjU0LCA5LCAxMSwgMjI2LCAyNTUsIDksIDExLCAyMjcsIDAsIDksIDExLCAKLSAgICAyMjcsIDEsIDksIDExLCAyMjcsIDIsIDksIDExLCAyMjcsIDMsIDksIDExLCAyMjcsIDQsIDksIDExLCAyMjcsIDUsIDksIAotICAgIDExLCAyMjcsIDYsIDksIDExLCAyMjcsIDcsIDksIDExLCAyMjcsIDgsIDksIDExLCAyMjcsIDksIDksIDExLCAyMjcsIDEwLCAKLSAgICA5LCAxMSwgMjI3LCAxMSwgOSwgMTEsIDIyNywgMTIsIDksIDExLCAyMjcsIDEzLCA5LCAxMSwgMjI3LCAxNCwgOSwgMTEsIAotICAgIDIyNywgMTUsIDksIDExLCAyMjcsIDE2LCA5LCAxMSwgMjI3LCAxNywgOSwgMTEsIDIyNywgMTgsIDksIDExLCAyMjcsIDE5LCAKLSAgICA5LCAxMSwgMjI3LCAyMCwgOSwgMTEsIDIyNywgMjEsIDksIDExLCAyMjcsIDIyLCA5LCAxMSwgMjI3LCAyMywgOSwgMTEsIAotICAgIDIyNywgMjQsIDksIDExLCAyMjcsIDI1LCA5LCAxMSwgMjI3LCAyNiwgOSwgMTEsIDIyNywgMjcsIDksIDExLCAyMjcsIDI4LCAKLSAgICA5LCAxMSwgMjI3LCAyOSwgOSwgMTEsIDIyNywgMzAsIDksIDExLCAyMjcsIDMxLCA5LCAxMSwgMjI3LCAzMiwgOSwgMTEsIAotICAgIDIyNywgMzMsIDksIDExLCAyMjcsIDM0LCA5LCAxMSwgMjI3LCAzNSwgOSwgMTEsIDIyNywgMzYsIDksIDExLCAyMjcsIDM3LCAKLSAgICA5LCAxMSwgMjI3LCAzOCwgOSwgMTEsIDIyNywgMzksIDksIDExLCAyMjcsIDQwLCA5LCAxMSwgMjI3LCA0MSwgOSwgMTEsIAotICAgIDIyNywgNDIsIDksIDExLCAyMjcsIDQzLCA5LCAxMSwgMjI3LCA0NCwgOSwgMTEsIDIyNywgNDUsIDksIDExLCAyMjcsIDQ2LCAKLSAgICA5LCAxMSwgMjI3LCA0NywgOSwgMTEsIDIyNywgNDgsIDksIDExLCAyMjcsIDQ5LCA5LCAxMSwgMjI3LCA1MCwgOSwgMTEsIAotICAgIDIyNywgNTEsIDksIDExLCAyMjcsIDUyLCA5LCAxMSwgMjI3LCA1MywgOSwgMTEsIDIyNywgNTQsIDksIDExLCAyMjcsIDU1LCAKLSAgICA5LCAxMSwgMjI3LCA1NiwgOSwgMTEsIDIyNywgNTcsIDksIDExLCAyMjcsIDU4LCA5LCAxMSwgMjI3LCA1OSwgOSwgMTEsIAotICAgIDIyNywgNjAsIDksIDExLCAyMjcsIDYxLCA5LCAxMSwgMjI3LCA2MiwgOSwgMTEsIDIyNywgNjMsIDksIDExLCAyMjcsIDY0LCAKLSAgICA5LCAxMSwgMjI3LCA2NSwgOSwgMTEsIDIyNywgNjYsIDksIDExLCAyMjcsIDY3LCA5LCAxMSwgMjI3LCA2OCwgOSwgMTEsIAotICAgIDIyNywgNjksIDcsIDMsIDIwLCAyNTQsIDU0LCA3LCAzLCAyMCwgMjUzLCA4OCwgNywgMywgMjAsIDI1NCwgNTUsIDcsIDMsIAotICAgIDIwLCAyNDksIDI0NSwgNywgMywgMjAsIDI0OSwgMjQ2LCA3LCAzLCAyMCwgMTgyLCAyNTUsIDU5LCAyNTQsIDE4MywgNywgMywgCi0gICAgMjAsIDI1MywgMTk1LCAxMjAsIDMsIDIwLCAyNTMsIDE1MSwgMjQ3LCA5NCwgMTIwLCAzLCAyMCwgMjUzLCAxNTEsIDI0NywgCi0gICAgMTM3LCAxMjAsIDMsIDIwLCAyNTMsIDE1MSwgMjQ3LCAxNTIsIDEyMCwgMywgMjAsIDI1NCwgMTY4LCAyNDcsIDk0LCAxMjAsIAotICAgIDMsIDIwLCAyNTMsIDE1MSwgMjQ3LCAyMjksIDc4LCAxLCAyNTMsIDE2NCwgMiwgMjM4LCA2LCA3OCwgMjQwLCAxNDMsIDIyNywgCi0gICAgMjQ3LCAyMzcsIDIyLCA3OCwgMjAsIDIzNSwgMTA2LCAyNTMsIDE2NCwgMjUzLCAxNjQsIDIzNywgMTg3LCA3OCwgMSwgMjI5LCAKLSAgICAxODIsIDI0MSwgOTcsIDc4LCAxLCAyNDYsIDI0MCwgMjQwLCAxNzQsIDc4LCAxLCAyNDYsIDI0MCwgMjM3LCAyMzgsIDc4LCAKLSAgICAxLCAyNDYsIDI0MCwgMjUyLCAyNTIsIDc4LCAxLCAyNDYsIDI0MCwgMjQ3LCAxLCA3OCwgMSwgMjQ2LCAyNDAsIDIzNywgCi0gICAgMjA1LCA3OCwgMSwgMjQ2LCAyNDAsIDM1LCAyNDcsIDQxLCA3OCwgMSwgMjQ2LCAyNDAsIDI0MSwgMjIyLCA3OCwgMSwgMjQ2LCAKLSAgICAyNDAsIDI0OCwgMTcxLCA3OCwgMSwgMjI5LCAxODIsIDc5LCA1MywgNzgsIDEsIDI0NiwgMjQ0LCAyLCAyNDYsIDI0NCwgCi0gICAgMjQ2LCAxNjQsIDc4LCAxLCAyNDYsIDI0NCwgMiwgMjUzLCAxOTMsIDI0NiwgMTY0LCA3OCwgMSwgMjQ2LCAyNDQsIDIsIAotICAgIDIzNywgMjAwLCAyMiwgMjQ2LCAyNDQsIDI0NiwgMTY0LCA3OCwgMSwgMjQ2LCAyNDQsIDIsIDIzNywgMjAwLCAyMiwgMjUzLCAKLSAgICAxOTMsIDI0NiwgMTY0LCA3OCwgMSwgOTIsIDIsIDIzNywgMTg3LCA3OCwgMSwgOTIsIDIsIDIzNSwgMTM0LCA3OCwgMSwgOTIsIAotICAgIDIsIDIzNywgMjA2LCA3OCwgMSwgMjUzLCAxNzEsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNDEsIDE0MywgMiwgMjM1LCAzMywgCi0gICAgNzgsIDEsIDI0MSwgMTE2LCAyLCAyMzUsIDMzLCA3OCwgMSwgMjU1LCAyOSwgMiwgMjM3LCAyMDYsIDc4LCAxLCAyNTMsIAotICAgIDIwMCwgMiwgMjM1LCAzMywgNzgsIDEsIDI0NiwgMTA3LCAyLCAyMzUsIDMzLCA3OCwgMSwgMjU0LCAxNTgsIDIsIDIzNSwgCi0gICAgMzMsIDc4LCAxLCAyNTMsIDE2NCwgMiwgMjM1LCAzMywgNzgsIDEsIDM1LCAyNTIsIDIxNCwgMiwgMjM1LCAzMywgNzgsIDEsIAotICAgIDI1MiwgMjE0LCAyLCAyMzUsIDMzLCA3OCwgMSwgMjQ0LCA5MCwgMiwgMjM1LCAzMywgNzgsIDEsIDI1NCwgMTAwLCAyLCAKLSAgICAyMzUsIDMzLCA3OCwgMSwgMjUzLCAyMywgMiwgMjM1LCAzMywgNzgsIDEsIDIzOSwgMjM0LCAyLCAyMzUsIDMzLCA3OCwgMSwgCi0gICAgMzUsIDI1NCwgMjMxLCAyLCAyMzUsIDMzLCA3OCwgMSwgMjU0LCAyMzEsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNDYsIDgsIDIsIAotICAgIDIzNSwgMzMsIDc4LCAxLCAyNTQsIDE0MCwgMiwgMjM1LCAzMywgNzgsIDEsIDI1MSwgMTc5LCAyLCAyMzUsIDMzLCA3OCwgMSwgCi0gICAgMjQ2LCAyNDQsIDIsIDIzNSwgMzMsIDc4LCAxLCAyNTQsIDE1NiwgMiwgMjM1LCAzMywgNzgsIDEsIDI1MywgMjAwLCAyLCAKLSAgICAyMzgsIDcsIDc4LCAxLCAyNTMsIDE3MSwgMiwgMjQxLCAxMSwgNzgsIDEsIDI1MiwgMjE0LCAyLCAyNDEsIDExLCA3OCwgMSwgCi0gICAgMjU0LCAyMzEsIDIsIDI0MSwgMTEsIDc4LCAyMCwgOTIsIDIzNywgMjA1LCAxMCwgMSwgOTIsIDI0MiwgMjIsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDkyLCAyNDIsIDIyLCAzNSwgMTUsIDEwLCAxLCAyNDcsIDY3LCA0NCwgMTUsIDEwLCAxLCAyNDcsIDY3LCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyNDcsIDY3LCA1OSwgMTUsIDEwLCAxLCAyNDcsIDY3LCAxMjQsIDE1LCAxMCwgMSwgMjUzLCAxNTgsIDQ0LCAKLSAgICAxNSwgMTAsIDEsIDI1MywgMTU4LCAzNSwgMTUsIDEwLCAxLCAyNTMsIDE1OCwgNTksIDE1LCAxMCwgMSwgMjUzLCAxNTgsIAotICAgIDEyNCwgMTUsIDEwLCAxLCAyNDAsIDI0NCwgNDQsIDE1LCAxMCwgMSwgMjQwLCAyNDQsIDM1LCAxNSwgMTAsIDEsIDI0MCwgCi0gICAgMjQ0LCA1OSwgMTUsIDEwLCAxLCAyNDAsIDI0NCwgMTI0LCAxNSwgMTAsIDEsIDIzNywgMTkyLCA0NCwgMTUsIDEwLCAxLCAKLSAgICAyMzcsIDE5MiwgMzUsIDE1LCAxMCwgMSwgMjM3LCAxOTIsIDU5LCAxNSwgMTAsIDEsIDIzNywgMTkyLCAxMjQsIDE1LCAxMCwgCi0gICAgMSwgMjQxLCAxNywgNDQsIDE1LCAxMCwgMSwgMjQxLCAxNywgMzUsIDE1LCAxMCwgMSwgMjQxLCAxNywgNTksIDE1LCAxMCwgCi0gICAgMSwgMjQxLCAxNywgMTI0LCAxNSwgMTAsIDEsIDI0NywgMTEwLCA0NCwgMTUsIDEwLCAxLCAyNDcsIDExMCwgMzUsIDE1LCAKLSAgICAxMCwgMSwgMjQ3LCAxMTAsIDU5LCAxNSwgMTAsIDEsIDI0NywgMTEwLCAxMjQsIDE1LCAxMCwgMSwgMjUzLCAxNjMsIDQ0LCAKLSAgICAxNSwgMTAsIDEsIDI1MywgMTYzLCAzNSwgMTUsIDEwLCAxLCAyNTMsIDE2MywgNTksIDE1LCAxMCwgMSwgMjUzLCAxNjMsIAotICAgIDEyNCwgMTUsIDEwLCAxLCAyNDEsIDksIDQ0LCAxNSwgMTAsIDEsIDI0MSwgOSwgMzUsIDE1LCAxMCwgMSwgMjQxLCA5LCA1OSwgCi0gICAgMTUsIDEwLCAxLCAyNDEsIDksIDEyNCwgMTUsIDEwLCAxLCAyNDcsIDcyLCA0NCwgMTUsIDEwLCAxLCAyNDcsIDcyLCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyNDcsIDcyLCA1OSwgMTUsIDEwLCAxLCAyNDcsIDcyLCAxMjQsIDE1LCAxMCwgMSwgMjQ3LCA5NiwgNDQsIAotICAgIDE1LCAxMCwgMSwgMjQ3LCA5NiwgMzUsIDE1LCAxMCwgMSwgMjQ3LCA5NiwgNTksIDE1LCAxMCwgMSwgMjQ3LCA5NiwgMTI0LCAKLSAgICAxNSwgMTAsIDEsIDI0MCwgMjM3LCA0NCwgMTUsIDEwLCAxLCAyNDAsIDIzNywgMzUsIDE1LCAxMCwgMSwgMjQwLCAyMzcsIAotICAgIDU5LCAxNSwgMTAsIDEsIDI0MCwgMjM3LCAxMjQsIDE1LCAxMCwgMSwgMjM1LCAxMDAsIDQ0LCAxNSwgMTAsIDEsIDIzNSwgCi0gICAgMTAwLCAzNSwgMTUsIDEwLCAxLCAyMzUsIDEwMCwgNTksIDE1LCAxMCwgMSwgMjM1LCAxMDAsIDEyNCwgMTUsIDEwLCAxLCAKLSAgICAyMzcsIDIzOSwgNDQsIDE1LCAxMCwgMSwgMjM3LCAyMzksIDM1LCAxNSwgMTAsIDEsIDI0MSwgMTE1LCA0NCwgMTUsIDEwLCAKLSAgICAxLCAyNDEsIDExNSwgMzUsIDE1LCAxMCwgMSwgMjUzLCAyMTYsIDQ0LCAxNSwgMTAsIDEsIDI1MywgMjE2LCAzNSwgMTUsIAotICAgIDEwLCAxLCAyNDgsIDIxLCA0NCwgMTUsIDEwLCAxLCAyNDgsIDIxLCAzNSwgMTUsIDEwLCAxLCAyNTMsIDIzNSwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjUzLCAyMzUsIDM1LCAxNSwgMTAsIDEsIDI0OCwgMTUwLCA0NCwgMTUsIDEwLCAxLCAyNDgsIDE1MCwgMzUsIAotICAgIDE1LCAxMCwgMSwgMjQwLCAxOTEsIDQ0LCAxNSwgMTAsIDEsIDI0MCwgMTkxLCAzNSwgMTUsIDEwLCAxLCAyNDAsIDE5MSwgCi0gICAgNTksIDE1LCAxMCwgMSwgMjQwLCAxOTEsIDEyNCwgMTUsIDEwLCAxLCAyNTMsIDEwMiwgNDQsIDE1LCAxMCwgMSwgMjUzLCAKLSAgICAxMDIsIDM1LCAxNSwgMTAsIDEsIDI1MywgMTAyLCA1OSwgMTUsIDEwLCAxLCAyNTMsIDEwMiwgMTI0LCAxNSwgMTAsIDEsIAotICAgIDI0NywgNzksIDQ0LCAxNSwgMTAsIDEsIDI0NywgNzksIDM1LCAxNSwgMTAsIDEsIDI0NywgNzksIDU5LCAxNSwgMTAsIDEsIAotICAgIDI0NywgNzksIDEyNCwgMTUsIDEwLCAxLCAyNDEsIDcsIDQ0LCAxNSwgMTAsIDEsIDI0MSwgNywgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjQxLCA3LCA1OSwgMTUsIDEwLCAxLCAyNDEsIDcsIDEyNCwgMTUsIDEwLCAxLCAyNDYsIDE1NiwgMjM4LCAxLCA0NCwgMTUsIAotICAgIDEwLCAxLCAyNDYsIDE1NiwgMjM4LCAxLCAzNSwgMTUsIDEwLCAxLCAyNDEsIDEyLCA0NCwgMTUsIDEwLCAxLCAyNDEsIDEyLCAKLSAgICAzNSwgMTUsIDEwLCAxLCAyNDEsIDEyLCA1OSwgMTUsIDEwLCAxLCAyNDEsIDEyLCAxMjQsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIAotICAgIDIsIDYyLCA2NCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDIsIDYyLCA2NCwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIAotICAgIDI0NywgMzQsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCAyNDcsIDM0LCAzNSwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMjQ3LCAKLSAgICAzNCwgNTksIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDI0NywgMzQsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMjI5LCAxNzksIAotICAgIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjA3LCAyMjksIDE3OSwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDIyOSwgMTc5LCA1OSwgCi0gICAgMTUsIDEwLCAxLCAyNTIsIDIwNywgMjI5LCAxNzksIDEyNCwgMTUsIDEwLCAxLCA2MiwgMjM3LCAxMjMsIDQ0LCAxNSwgMTAsIAotICAgIDEsIDYyLCAyMzcsIDEyMywgMzUsIDE1LCAxMCwgMSwgNjIsIDIzNywgMTIzLCAyLCAxNjQsIDY0LCA0NCwgMTUsIDEwLCAxLCAKLSAgICA2MiwgMjM3LCAxMjMsIDIsIDE2NCwgNjQsIDM1LCAxNSwgMTAsIDEsIDI1NCwgMjQxLCA0NCwgMTUsIDEwLCAxLCAyNTQsIAotICAgIDI0MSwgMzUsIDE1LCAxMCwgMSwgMjU0LCAyNDEsIDU5LCAxNSwgMTAsIDEsIDI1NCwgMjQxLCAxMjQsIDE1LCAxMCwgMSwgCi0gICAgOTcsIDQ0LCAxNSwgMTAsIDEsIDk3LCAzNSwgMTUsIDEwLCAxLCAyNTQsIDIyMiwgNDQsIDE1LCAxMCwgMSwgMjU0LCAyMjIsIAotICAgIDM1LCAxNSwgMTAsIDEsIDI1NCwgMjI2LCA0NCwgMTUsIDEwLCAxLCAyNTQsIDIyNiwgMzUsIDE1LCAxMCwgMSwgOTcsIDIsIAotICAgIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIDI1NCwgMjU0LCA0NCwgMTUsIDEwLCAxLCAyNTQsIDI1NCwgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjM1LCA0OSwgMjU0LCAyMjIsIDQ0LCAxNSwgMTAsIDEsIDIzNSwgNDksIDI1NCwgMjIyLCAzNSwgMTUsIDEwLCAxLCAyMzUsIAotICAgIDQ5LCAyNTQsIDIyNiwgNDQsIDE1LCAxMCwgMSwgMjM1LCA0OSwgMjU0LCAyMjYsIDM1LCAxNSwgMTAsIDEsIDE2MSwgNDQsIAotICAgIDE1LCAxMCwgMSwgMTYxLCAzNSwgMTUsIDEwLCAxLCAxNjEsIDU5LCAxNSwgMTAsIDEsIDE2MSwgMTI0LCAxNSwgMTAsIDEsIAotICAgIDIzNywgMTY3LCAyMzgsIDEzLCAyMzUsIDQ5LCA5MiwgMTc1LCA1OSwgMTUsIDEwLCAxLCAyMzcsIDE2NywgMjM4LCAxMywgCi0gICAgMjM1LCA0OSwgOTIsIDE3NSwgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU0LCAyMTUsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU0LCAyMTUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgCi0gICAgMiwgMjUzLCA1NCwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTMsIDU0LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgNjIsIDIsIDE2NCwgNjQsIDIsIDk3LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDk3LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1NCwgMjIyLCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1NCwgCi0gICAgMjIyLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1NCwgMjI2LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIAotICAgIDE2NCwgNjQsIDIsIDI1NCwgMjI2LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDE2MSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxNjEsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTYxLCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjM3LCAxNjcsIDIzNSwgNDksIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjM3LCAxNjcsIDIzNSwgNDksIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjM3LCAKLSAgICAxNjcsIDIzNSwgNDksIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCA1OSwgMTUsIDEwLCAxLCAyNDAsIDE3NiwgNjIsIAotICAgIDQ0LCAxNSwgMTAsIDEsIDI0MCwgMTc2LCA2MiwgMzUsIDE1LCAxMCwgMSwgMjQwLCAxNzYsIDYyLCA1OSwgMTUsIDEwLCAxLCAKLSAgICAyNDAsIDE3NiwgNjIsIDEyNCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIAotICAgIDYyLCAyLCAxNjQsIDY0LCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNTUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAKLSAgICA2MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgMTAxLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA1NSwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDYyLCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAxMDEsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMTAsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNjIsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNDYsIDIwNSwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAyMDUsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgMjQ2LCAyMDUsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAxMjMsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDEyMywgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAxMDEsIDIsIDEyMywgNDQsIAotICAgIDE1LCAxMCwgMjAsIDEwMSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDIwMiwgCi0gICAgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjAyLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMjMsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDIwMiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMTYzLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCAxMDEsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDI0MCwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMzcsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIAotICAgIDIzNywgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDEsIAotICAgIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjUzLCAxMTAsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDEyMywgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI0MCwgMTU3LCAyLCAxMjMsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNDAsIDE1NywgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgMTIzLCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCAyMDIsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIzNSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjM1LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjUzLCAKLSAgICAxLCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MywgMSwgMiwgCi0gICAgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgOTIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMTIzLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAyMDIsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMjE2LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDU1LCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgNjIsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyMTYsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMTc1LCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjE2LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDU1LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCA1NSwgMiwgCi0gICAgMTAxLCA0NCwgMTUsIDEwLCAyMCwgNTUsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDU1LCAyLCA1NSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDU1LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgNTUsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIAotICAgIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgCi0gICAgMjAyLCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDkyLCAKLSAgICAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIwNywgMiwgMTIzLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMDcsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMDcsIDIsIDkyLCAxNzUsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIwNywgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTIzLCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgNjIsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCA2MiwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDI0NywgMjExLCAyLCAyMjksIDE2MywgOTIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIyNSwgMiwgMjI5LCAxNjMsIDkyLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgOTIsIDE3NSwgMiwgMjI5LCAxNjMsIDkyLCA0NCwgMTUsIDEwLCAyMCwgMjM3LCA5NiwgMiwgCi0gICAgMjMzLCAxOTYsIDQ0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAyMzMsIDIxMCwgNDQsIDE1LCAxMCwgMjAsIDIzNywgOTYsIAotICAgIDIsIDI0MCwgMjI0LCA0NCwgMTUsIDEwLCAyMCwgMjM3LCA5NiwgMiwgMjQwLCAyNDgsIDQ0LCAxNSwgMTAsIDIwLCAyMzcsIAotICAgIDk2LCAyLCAyNDEsIDAsIDQ0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAyMjksIDE2MywgOTIsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMTY0LCA2NCwgMiwgMjUyLCAyMjUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjQ2LCAyNTAsIAotICAgIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgCi0gICAgMjQ2LCAxNTYsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAKLSAgICAyLCAxNjQsIDY0LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjE3LCAyLCAyNDYsIDI1MCwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjE3LCAyLCAyNDYsIDE1NiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMTcsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMTAsIDIsIDI0NiwgMjUwLCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyMTAsIDIsIDI0NiwgMTU2LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDkyLCAxNzUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgMjUyLCAyMjUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDIwNSwgMiwgMjQ2LCAyNTAsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgNTUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDIwNSwgMiwgMjQ2LCAxNTYsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgOTIsIDE3NSwgMzUsIAotICAgIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCA5MiwgMTc1LCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjUzLCAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA5MiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjE0LCAyLCAyMTYsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIAotICAgIDIxNCwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDYyLCAzNSwgMTUsIAotICAgIDEwLCAyMCwgNTUsIDIsIDkyLCAzNSwgMTUsIDEwLCAyMCwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIAotICAgIDIsIDI1MiwgMjI1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDI0NiwgMjUwLCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAKLSAgICAxNTYsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDI0NiwgMTU2LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAKLSAgICAxNTYsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA5MiwgCi0gICAgMTc1LCAyLCAyMjksIDE2MywgOTIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMjUyLCAyMjUsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMjQ2LCAyNTAsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMjQ2LCAKLSAgICAxNTYsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCA2MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTAxLCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAKLSAgICAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTIsIDIwNywgNTksIDE1LCAxMCwgMjAsIDI1MiwgCi0gICAgMjE3LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIAotICAgIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCAKLSAgICAyNTIsIDIwNywgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgCi0gICAgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCA1NSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAyNTIsIDIwNywgNTksIDE1LCAxMCwgMjAsIDI0NiwgMjA1LCAyLCA1NSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDEyMywgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIAotICAgIDEwMSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMTAxLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIwMiwgMiwgMTIzLCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICAyNDYsIDE2MywgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDI0NiwgCi0gICAgMTYzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0MCwgCi0gICAgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIAotICAgIDEyMywgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgMjAyLCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDEwMSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDI1MywgMTEwLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCAxMjMsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0NCwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNDAsIDE1NywgMiwgMTIzLCA1OSwgMTUsIDEwLCAKLSAgICAyMCwgMjQwLCAxNTcsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjM1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAKLSAgICAyMzUsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIAotICAgIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCAxMDEsIAotICAgIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTQsIDIsIDIxNiwgNTksIAotICAgIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjE2LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDIxNiwgMiwgNTUsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMTYsIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDU1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDU1LCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMDEsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDU1LCA1OSwgMTUsIDEwLCAKLSAgICAyMCwgMjQ2LCAxNTYsIDIsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMDcsIDIsIDEyMywgNTksIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjA3LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjA3LCAyLCAyMjksIDE2MywgOTIsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCA2MiwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAKLSAgICAyMDIsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMjUyLCAyMDcsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDI1MiwgCi0gICAgMjA3LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjE3LCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNywgMiwgMjUyLCAKLSAgICAyMDcsIDEyNCwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAyNTIsIAotICAgIDIwNywgMTI0LCAxNSwgMTAsIDIwLCAyNDYsIDIwNSwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgMjQ2LCAyMDUsIDIsIDI1MiwgCi0gICAgMjA3LCAxMjQsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjUyLCAKLSAgICAyMDcsIDEyNCwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAyNTIsIAotICAgIDIwNywgMTI0LCAxNSwgMTAsIDIwLCAyNTIsIDIxNCwgMiwgMjE2LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgCi0gICAgMTI0LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCA1NSwgMTI0LCAxNSwgCi0gICAgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMjUyLCAyMDcsIDEyNCwgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCAxMjQsIDE1LCAxMCwgCi0gICAgMjAsIDYyLCAyLCAyNTIsIDIwNywgMTI0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAyNDAsIDIyNCwgMTI0LCAxNSwgMTAsIAotICAgIDIwLCAyMzcsIDk2LCAyLCAyNDAsIDI0OCwgMTI0LCAxNSwgMTAsIDIwLCAyMzcsIDk2LCAyLCAyNDEsIDAsIDEyNCwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgMiwgNjIsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDI0NCwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDI0MCwgMTU3LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjQwLCAxNTcsIDIsIDYyLCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgNjIsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNDAsIDEyOSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDEwMSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDEwMSwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAxMjMsIAotICAgIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjAyLCAyLCA5MiwgMTc1LCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjAyLCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCA5MiwgMTc1LCA0NCwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyNDAsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyNTIsIDIzNywgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTIzLCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjQwLCAxMjksIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyNDAsIDEyOSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMjUyLCAyMjUsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyNDYsIDE2MywgMiwgMjUyLCAyMjUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0MCwgMiwgMjUyLCAyMjUsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIzNywgMiwgMjUyLCAyMjUsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjQxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA5MiwgMTc1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAxNTcsIDIsIDkyLCAxNzUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNDAsIDE1NywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgOTIsIDE3NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0NiwgMTYzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCA5MiwgMTc1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjQwLCAxMjksIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMTAxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgNjIsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjUyLCAyNDAsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDI0MCwgMiwgNjIsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIzNywgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI0MCwgMTI5LCAyLCAxMjMsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjQwLCAxMjksIDIsIDIwMiwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgCi0gICAgMTI5LCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjQwLCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM3LCAyLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI0MCwgMTI5LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjQwLCAxMjksIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgCi0gICAgMTYzLCAyLCAyNTIsIDIwNywgNTksIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAyNTIsIDIwNywgNTksIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjQxLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMjMsIDEyNCwgMTUsIDEwLCAyMCwgMjQ2LCAKLSAgICAxNjMsIDIsIDEwMSwgMTI0LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjAyLCAxMjQsIDE1LCAxMCwgMjAsIDI0MCwgCi0gICAgMTI5LCAyLCAxMjMsIDEyNCwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDEwMSwgMTI0LCAxNSwgMTAsIDIwLCAyNDAsIAotICAgIDEyOSwgMiwgMjAyLCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAyNTMsIDExMCwgCi0gICAgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgOTIsIDIsIDIzMywgMTUwLCAzNSwgMTUsIDEwLCAyMCwgOTIsIDIsIDIzMywgMTUwLCAKLSAgICA0NCwgMTUsIDIzOCwgMzIsIDQyLCAyMjgsIDE4MCwgMjM4LCAzMiwgNDEsIDIyOCwgMTgwLCAxMCwgMjAsIDI1MiwgMjEwLCAKLSAgICAyLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDEwMSwgMiwgMTIzLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMTAsIDIsIDEwMSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDEwMSwgMiwgNTUsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCA1NSwgMiwgCi0gICAgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgCi0gICAgMiwgNTUsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDEyMywgMiwgNTUsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDEyMywgCi0gICAgMiwgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDEwMSwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMTAxLCAyLCAKLSAgICA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMDEsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDI0NiwgMTYzLCAyLCAxMjMsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCAxMjMsIDIsIDkyLCAxNzUsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgNTUsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTYzLCAyLCA1NSwgCi0gICAgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDU1LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIAotICAgIDE2MywgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNjMsIDIsIDU1LCAyLCA1NSwgNTksIDE1LCAxMCwgCi0gICAgMjAsIDI1MiwgMjQwLCAyLCAxMDEsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCAxMDEsIDIsIDEwMSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCAKLSAgICAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI0MCwgMTI5LCAyLCAxMDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIAotICAgIDIsIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgNTUsIDIsIDIwMiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI0MCwgMTI5LCAyLCA1NSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjQwLCAxMjksIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0MCwgMTI5LCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgMiwgMTAxLCAyLCA5MiwgCi0gICAgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzcsIDIsIDIwMiwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIzNywgCi0gICAgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQxLCAyLCA1NSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyNDEsIDIsIDU1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0MSwgMiwgNTUsIDIsIDU1LCA1OSwgMTUsIAotICAgIDEwLCAyMCwgMjUyLCAyNDEsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCAxMjMsIDIsIDU1LCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjQ0LCAyLCA1NSwgCi0gICAgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDI0NCwgMiwgNTUsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIAotICAgIDE1NywgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQwLCAxNTcsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI0MCwgMTU3LCAyLCA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCAyMDIsIDIsIDU1LCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjUyLCAyMzUsIDIsIDIwMiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDU1LCAKLSAgICAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgMTAxLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgMTAxLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgMTIzLCAyLCAxMjMsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDIwMiwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyMTYsIDIsIDIwMiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDU1LCAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAyMTYsIDIsIDU1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMTAxLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICA1NSwgMiwgMTAxLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgNTUsIAotICAgIDIsIDEyMywgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDEyMywgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgCi0gICAgMjAyLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAKLSAgICAxMjMsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjA3LCAyLCA1NSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMDcsIDIsIDU1LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMDEsIDIsIDU1LCA1OSwgMTUsIAotICAgIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEwMSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAxMjMsIAotICAgIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDEyMywgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgCi0gICAgMiwgMTIzLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCAxNTYsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI0NiwgMTU2LCAyLCA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCA1NSwgMiwgNTUsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyMTcsIDIsIDIwMiwgMiwgNjIsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjEwLCAyLCAKLSAgICAxMjMsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgMjAyLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDI1MiwgMjEwLCAyLCAyMDIsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIxMCwgMiwgNTUsIDIsIDYyLCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjUyLCAyMTAsIDIsIDU1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMTIzLCAyLCA1NSwgMiwgCi0gICAgNjIsIDM1LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDEwMSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgNTUsIAotICAgIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjAyLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyNDAsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDAsIDEyOSwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI1MiwgMjM3LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIDIsIDYyLCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjE2LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDU1LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNTMsIDEsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDI0NiwgMTU2LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjUzLCAxLCAyLCA1NSwgMiwgMTAxLCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjUyLCAyNDQsIDIsIDU1LCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMTIzLCAKLSAgICAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTIzLCAKLSAgICAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIAotICAgIDEyMywgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNDYsIDE1NiwgMiwgMTIzLCAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICAxMjMsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAxMDEsIDIsIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAKLSAgICA1NSwgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjM1LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyNTIsIDIxNywgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjE0LCAyLCA1NSwgMiwgNTUsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDI0NCwgMiwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjQwLCAyLCA1NSwgMiwgCi0gICAgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNDYsIDE2MywgMiwgMjAyLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgMTU2LCAyLCAKLSAgICAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQxLCAyMzAsIDI0OCwgMTg5LCAyNTQsIDIwMywgMjM1LCAxODcsIDI0NywgCi0gICAgMjAsIDUsIDQ0LCAxNSwgMTAsIDIwLCAyNTEsIDEyOCwgMjQ4LCAxODksIDI1NCwgMjAzLCAyMzUsIDE4NywgMjQ3LCAyMCwgCi0gICAgNSwgNDQsIDE1LCAxMCwgMjAsIDI0MiwgNTQsIDQ0LCAxNSwgMTAsIDIwLCAyNDIsIDUxLCA0NCwgMTUsIDEwLCAyMCwgMjM0LCAKLSAgICAxNjMsIDQ0LCAxNSwgMTAsIDIwLCAyNDUsIDE1MCwgNDQsIDE1LCAxMCwgMjAsIDIzOSwgMjE1LCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgMjM3LCAxNzEsIDQ0LCAxNSwgMTAsIDIwLCAyMzUsIDksIDQ0LCAxNSwgMTAsIDIwLCAyNDEsIDIzMCwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDIyOSwgMjE0LCAyMzcsIDE3MSwgMjMzLCA2NCwgMTAsIDIwLCAyMjUsIDkzLCAyNTEsIDE4MSwgNTMsIDEwLCAyMCwgCi0gICAgMjMyLCA4NywgMjMyLCA3MywgMjMwLCAyMjYsIDM4LCAyMzAsIDk5LCAzOCwgMjMwLCAxMDAsIDM4LCAyMzAsIDEwMSwgMzgsIAotICAgIDIzMCwgMTAyLCAzOCwgMjMwLCAxMDMsIDM4LCAyMzAsIDEwNCwgMzgsIDIzMCwgMTA1LCAzOCwgMjMwLCAxMDYsIDM4LCAKLSAgICAyMzAsIDEwNywgMzgsIDIyOSwgNTksIDM4LCAyMjksIDYwLCAzOCwgMjI5LCA2MSwgMzgsIDIyOSwgNjIsIDM4LCAyMjksIAotICAgIDYzLCAzOCwgMjI5LCA2NCwgMzgsIDIyOSwgNjUsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMjM3LCA2NywgMjI4LCAxNzgsIAotICAgIDIxMSwgMzIsIDYxLCA5MCwgMjM3LCA2NywgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA5MCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCAKLSAgICAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDIzNywgNjYsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMjMwLCAxNDAsIDIyOCwgCi0gICAgMTc4LCAyMTEsIDMyLCA2MSwgMjI5LCAxNjUsIDc2LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDIzMywgODIsIDc2LCAyMjgsIAotICAgIDE3OCwgMjExLCAzMiwgNjEsIDQyLCA2MywgMjMwLCAxMzcsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgNjMsIAotICAgIDIzMCwgMTM3LCAyMzQsIDIyLCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDE2OSwgMjMxLCAyMTgsIDM2LCAyMCwgNDIsIDI0MCwgCi0gICAgMTcwLCAzNiwgMjAsIDQxLCAyNDAsIDE3MCwgMzYsIDQ3LCAyNDAsIDEyOCwgNDIsIDI0MCwgMTcwLCAzNiwgNDcsIDI0MCwgCi0gICAgMTI4LCA0MSwgMjQwLCAxNzAsIDM2LCAyMzcsIDgzLCA0MiwgMjQwLCAxNzAsIDM2LCAyMzcsIDgzLCA0MSwgMjQwLCAxNzAsIAotICAgIDM2LCAyMzAsIDIzNywgMjM1LCAxNiwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCAxMzUsIDU2LCAyMzUsIDEyOCwgMjI4LCAKLSAgICAxNzgsIDIxMSwgMzIsIDYxLCAyNTQsIDIxMywgMjQwLCAxNTEsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgMjU0LCAxOTksIAotICAgIDI0MCwgMTUxLCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDE4NCwgMjQwLCAxMzgsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgCi0gICAgMjQ2LCAyMzksIDE4NCwgMjQwLCAxMzgsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIDIyOCwgMTgwLCAyMjgsIDE3OCwgCi0gICAgMjExLCAzMiwgNjEsIDQxLCAyMjgsIDE4MCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgMjQwLCAxMzcsIDEwNCwgMjI4LCAKLSAgICAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgMjQwLCAxMzcsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgMjMzLCA4OSwgCi0gICAgMjQwLCAxNTgsIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgMjMzLCA4OSwgMjQwLCAxNTgsIDEwNCwgMjI4LCAKLSAgICAxNzgsIDIxMSwgMzIsIDYxLCA0MiwgODYsIDIzMCwgMTM3LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDEsIDg2LCAKLSAgICAyMzAsIDEzNywgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQyLCA0NywgMjQwLCAxMTcsIDEwNCwgMjI4LCAxNzgsIAotICAgIDIxMSwgMzIsIDYxLCA0MSwgNDcsIDI0MCwgMTE3LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIDI0MCwgMTE3LCAKLSAgICAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDEsIDI0MCwgMTE3LCAxMDQsIDIyOCwgMTc4LCAyMTEsIDMyLCA2MSwgNDIsIAotICAgIDIzNywgNzksIDEwNCwgMjI4LCAxNzgsIDIxMSwgMzIsIDYxLCA0MSwgMjM3LCA3OSwgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgCi0gICAgNjEsIDQyLCA2MywgMjM3LCA3OSwgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQxLCA2MywgMjM3LCA3OSwgMTA0LCAKLSAgICAyMzgsIDQ3LCAyNDYsIDE2NCwgNjMsIDIzOCwgNDcsIDI0NiwgMTY0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQyLCAzNywgCi0gICAgMTA0LCAyMjgsIDE3OCwgMjExLCAzMiwgNjEsIDQxLCAzNywgMTA0LCAyMzcsIDExMCwgMjMxLCAyMjMsIDIzMCwgMTc2LCAKLSAgICAyMzEsIDIyMywgMjQ2LCAyMzksIDIzMSwgMjIzLCA0NywgMjQ2LCAyMzksIDIzMSwgMjIzLCAyMzcsIDExMCwgMTg0LCAyNDAsIAotICAgIDEzOCwgMjMwLCAxNzYsIDE4NCwgMjQwLCAxMzgsIDI0NiwgMjM5LCAxODQsIDI0MCwgMTM4LCAzLCAyMzcsIDY3LCAzLCA5MCwgCi0gICAgMjM3LCA2NywgMywgMjQ2LCAxNjIsIDI0MCwgMTIxLCAzLCAyMzAsIDE0MCwgMywgMjM3LCA2NiwgMywgMjMzLCA4MiwgNzYsIAotICAgIDMsIDIyOSwgMTY1LCA3NiwgMywgMjU0LCAyMTMsIDI0MCwgMTUxLCAzLCA0MiwgMjI4LCAxODAsIDMsIDQxLCAyMjgsIDE4MCwgCi0gICAgMywgNDIsIDI0MCwgMTM3LCAxMDQsIDMsIDQxLCAyNDAsIDEzNywgMTA0LCAzLCA0MiwgMjMzLCA4OSwgMjQwLCAxNTgsIAotICAgIDEwNCwgMywgNDEsIDIzMywgODksIDI0MCwgMTU4LCAxMDQsIDMsIDY1LCA1MywgMywgMjMwLCAxNDIsIDMsIDIzMSwgMTk4LCAKLSAgICAzLCA3OSwgNTMsIDMsIDIyNywgMTkzLCAzLCAyMzEsIDE5MCwgNTMsIDMsIDIyOCwgMTc1LCA1MywgMywgMjM3LCA1MSwgNTMsIAotICAgIDMsIDIzNSwgMzcsIDIzMywgMTA0LCAzLCAyMzcsIDE3OSwgNTMsIDMsIDIzNSwgODYsIDUzLCAzLCAyMzAsIDE0NSwgMjUzLCAKLSAgICAxMTMsIDEwLCAyMzMsIDE1MCwgNDQsIDE1LCAxMCwgMjM2LCAyNTQsIDIsIDIzMywgMTUwLCA0NiwgMTAsIDIzMywgMTk2LCAKLSAgICA0NCwgMTUsIDEwLCAyNDYsIDIzNywgMjMyLCAxOTMsIDEwLCAyMzMsIDIxMCwgNDQsIDE1LCAxMCwgMjQwLCAyMjQsIDQ0LCAKLSAgICAxNSwgMTAsIDI0MCwgMjI0LCAxMjQsIDE1LCAxMCwgMjQwLCAyNDgsIDQ0LCAxNSwgMTAsIDI0MCwgMjQ4LCAxMjQsIDE1LCAKLSAgICAxMCwgMjQxLCAwLCA0NCwgMTUsIDEwLCAyNDEsIDAsIDEyNCwgMTUsIDEwLCAyMzcsIDk2LCA0NCwgMTUsIDEwLCAyMzcsIAotICAgIDk2LCAxMjQsIDE1LCAxMCwgMjQxLCAyNTIsIDQ0LCAxNSwgMTAsIDI0MSwgMjUyLCAxMjQsIDE1LCAxMCwgMSwgMTY0LCA0NCwgCi0gICAgMTUsIDEwLCAxLCA5MiwgMiwgMjQwLCAyMjksIDY0LCA0NCwgMTUsIDEwLCAxLCA5MiwgMiwgMjQwLCAyMjksIDY0LCAzNSwgCi0gICAgMTUsIDEwLCAxLCA5MiwgMiwgMTY0LCA2NCwgNDQsIDE1LCAxMCwgMSwgOTIsIDIsIDE2NCwgNjQsIDM1LCAxNSwgMTAsIDEsIAotICAgIDI1MywgNTQsIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIDI1MywgNTQsIDIsIDE2NCwgNjQsIDM1LCAxNSwgMTAsIDEsIAotICAgIDkyLCAyLCAxNjQsIDI0MCwgMTQ0LCA0NCwgMTUsIDEwLCAxLCA5MiwgMiwgMTY0LCAyNDAsIDE0NCwgMzUsIDE1LCAxMCwgMSwgCi0gICAgNjIsIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIDYyLCAyLCAxNjQsIDY0LCAzNSwgMTUsIDEwLCAxLCA2MiwgMiwgMTY0LCAKLSAgICA2NCwgNTksIDE1LCAxMCwgMSwgNjIsIDIsIDE2NCwgNjQsIDEyNCwgMTUsIDEwLCAxLCA5MiwgNDQsIDE1LCAxMCwgMSwgOTIsIAotICAgIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjE3LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIxNywgMzUsIDE1LCAxMCwgMSwgMjUyLCAKLSAgICAyMTcsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjE3LCAxMjQsIDE1LCAxMCwgMSwgMjUyLCAyMTAsIDIzNSwgMTI5LCA0NCwgMTUsIAotICAgIDEwLCAxLCAyNTIsIDIxMCwgMjM1LCAxMjksIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjEwLCA0NCwgMTUsIDEwLCAxLCAyNTIsIAotICAgIDIxMCwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMTAsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjEwLCAxMjQsIDE1LCAxMCwgMSwgCi0gICAgMjQ2LCAyMDUsIDQ0LCAxNSwgMTAsIDEsIDI0NiwgMjA1LCAzNSwgMTUsIDEwLCAxLCAyNDYsIDIwNSwgNTksIDE1LCAxMCwgCi0gICAgMSwgMjQ2LCAyMDUsIDEyNCwgMTUsIDEwLCAxLCAxMjMsIDQ0LCAxNSwgMTAsIDEsIDEyMywgMzUsIDE1LCAxMCwgMSwgMTIzLCAKLSAgICA1OSwgMTUsIDEwLCAxLCAxMjMsIDEyNCwgMTUsIDEwLCAxLCAxMDEsIDQ0LCAxNSwgMTAsIDEsIDEwMSwgMzUsIDE1LCAxMCwgCi0gICAgMSwgMTAxLCA1OSwgMTUsIDEwLCAxLCAxMDEsIDEyNCwgMTUsIDEwLCAxLCAyMDIsIDQ0LCAxNSwgMTAsIDEsIDIwMiwgMzUsIAotICAgIDE1LCAxMCwgMSwgMjAyLCA1OSwgMTUsIDEwLCAxLCAyMDIsIDEyNCwgMTUsIDEwLCAxLCAyNTMsIDU2LCA0NCwgMTUsIDEwLCAKLSAgICAxLCAyNTMsIDU2LCAzNSwgMTUsIDEwLCAxLCAyNDcsIDIxMSwgNDQsIDE1LCAxMCwgMSwgMjQ3LCAyMTEsIDM1LCAxNSwgMTAsIAotICAgIDEsIDI1MiwgMjI1LCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIyNSwgMzUsIDE1LCAxMCwgMSwgMjQ2LCAyNTAsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDI0NiwgMjUwLCAzNSwgMTUsIDEwLCAxLCAyNDYsIDE2MywgNDQsIDE1LCAxMCwgMSwgMjQ2LCAxNjMsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDI0NiwgMTYzLCA1OSwgMTUsIDEwLCAxLCAyNDYsIDE2MywgMTI0LCAxNSwgMTAsIDEsIDI0MCwgMTI5LCAKLSAgICA0NCwgMTUsIDEwLCAxLCAyNDAsIDEyOSwgMzUsIDE1LCAxMCwgMSwgMjQwLCAxMjksIDU5LCAxNSwgMTAsIDEsIDI0MCwgCi0gICAgMTI5LCAxMjQsIDE1LCAxMCwgMSwgMjUyLCAyNDAsIDQ0LCAxNSwgMTAsIDEsIDI1MiwgMjQwLCAzNSwgMTUsIDEwLCAxLCAKLSAgICAyNTIsIDI0MCwgNTksIDE1LCAxMCwgMSwgMjUyLCAyNDAsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIzNywgNDQsIDE1LCAxMCwgCi0gICAgMSwgMjUyLCAyMzcsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjM3LCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIzNywgMTI0LCAxNSwgCi0gICAgMTAsIDEsIDI1MiwgMjQxLCA0NCwgMTUsIDEwLCAxLCAyNTIsIDI0MSwgMzUsIDE1LCAxMCwgMSwgMjUyLCAyNDEsIDU5LCAKLSAgICAxNSwgMTAsIDEsIDI1MiwgMjQxLCAxMjQsIDE1LCAxMCwgMSwgMjUzLCAxMTAsIDQ0LCAxNSwgMTAsIDEsIDI1MywgMTEwLCAKLSAgICAzNSwgMTUsIDEwLCAxLCAyNTMsIDExMCwgNTksIDE1LCAxMCwgMSwgMjUzLCAxMTAsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIAotICAgIDI0NCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyNDQsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjQ0LCA1OSwgMTUsIDEwLCAxLCAKLSAgICAyNTIsIDI0NCwgMTI0LCAxNSwgMTAsIDEsIDI0MCwgMTU3LCA0NCwgMTUsIDEwLCAxLCAyNDAsIDE1NywgMzUsIDE1LCAxMCwgCi0gICAgMSwgMjQwLCAxNTcsIDU5LCAxNSwgMTAsIDEsIDI0MCwgMTU3LCAxMjQsIDE1LCAxMCwgMSwgMjUyLCAyMzUsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDI1MiwgMjM1LCAzNSwgMTUsIDEwLCAxLCAyNTIsIDIzNSwgNTksIDE1LCAxMCwgMSwgMjUyLCAyMzUsIDEyNCwgCi0gICAgMTUsIDEwLCAxLCAyNTMsIDEsIDQ0LCAxNSwgMTAsIDEsIDI1MywgMSwgMzUsIDE1LCAxMCwgMSwgMjUzLCAxLCA1OSwgMTUsIAotICAgIDEwLCAxLCAyNTMsIDEsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIxNCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMTQsIDM1LCAxNSwgCi0gICAgMTAsIDEsIDI1MiwgMjE0LCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIxNCwgMTI0LCAxNSwgMTAsIDEsIDIxNiwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjE2LCAzNSwgMTUsIDEwLCAxLCAyMTYsIDU5LCAxNSwgMTAsIDEsIDIxNiwgMTI0LCAxNSwgMTAsIDEsIDU1LCAKLSAgICA0NCwgMTUsIDEwLCAxLCA1NSwgMzUsIDE1LCAxMCwgMSwgNTUsIDU5LCAxNSwgMTAsIDEsIDU1LCAxMjQsIDE1LCAxMCwgMSwgCi0gICAgMjQ2LCAxNTYsIDQ0LCAxNSwgMTAsIDEsIDI0NiwgMTU2LCAzNSwgMTUsIDEwLCAxLCAyNDYsIDE1NiwgNTksIDE1LCAxMCwgCi0gICAgMSwgMjQ2LCAxNTYsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIwNywgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMDcsIDM1LCAxNSwgCi0gICAgMTAsIDEsIDI1MiwgMjA3LCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIwNywgMTI0LCAxNSwgMTAsIDEsIDI1MywgNTQsIDQ0LCAKLSAgICAxNSwgMTAsIDEsIDI1MywgNTQsIDM1LCAxNSwgMTAsIDEsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDEsIDkyLCAxNzUsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDYyLCA0NCwgMTUsIDEwLCAxLCA2MiwgMzUsIDE1LCAxMCwgMSwgNjIsIDU5LCAxNSwgMTAsIDEsIDYyLCAKLSAgICAxMjQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDIsIDI0MCwgMjI5LCA2NCwgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIAotICAgIDIsIDI0MCwgMjI5LCA2NCwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyMTYsIDIsIDkyLCAyLCAxNjQsIDY0LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgMTY0LCAyNDAsIDE0NCwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDIsIDE2NCwgMjQwLCAxNDQsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMzUsIDE1LCAyNDcsIDI3LCAyNDEsIDIzLCAyMzMsIDE3MywgMjM3LCA2OSwgMTAwLCAKLSAgICAyMjksIDE2NSwgNzYsIDEwMCwgMjMxLCAxOTksIDc2LCAxMDAsIDY1LCA1MywgMTAwLCAyMzcsIDE3OSwgNTMsIDEwMCwgCi0gICAgMjM1LCA4NiwgNTMsIDEwMCwgMjMwLCAxNDIsIDEwMCwgMjI5LCAxNzIsIDEwMCwgNDIsIDIyOCwgMTgwLCAxMDAsIDQxLCAKLSAgICAyMjgsIDE4MCwgMTAwLCAyMzEsIDE5OCwgMTAwLCA3OSwgNTMsIDEwMCwgMjM3LCA2NywgMTAwLCAyMjcsIDE5MywgMTAwLCAKLSAgICAyNDYsIDE2MiwgMjQwLCAxMjEsIDEwMCwgMjMzLCAxMDQsIDEwMCwgMjEsIDI0MCwgMTI2LCAxMDAsIDIxLCAxMTgsIDEwMCwgCi0gICAgMjEsIDExMywgMTAwLCAyMSwgMTY2LCAxMDAsIDIxLCAxNTgsIDEwMCwgMjEsIDE3MywgMTAwLCAyMSwgMTgzLCAxMDAsIDIxLCAKLSAgICAxOTQsIDEwMCwgMjEsIDE4NywgMTAwLCAyMSwgMTkyLCAxMDAsIDIzNywgNjYsIDEwMCwgMjMwLCAxNDAsIDEwMCwgMjMxLCAKLSAgICAxOTAsIDUzLCAxMDAsIDIzNywgNTEsIDUzLCAxMDAsIDIyOCwgMTc1LCA1MywgMTAwLCAyMzMsIDgyLCA3NiwgMTAwLCAyMzAsIAotICAgIDE0NSwgMjUzLCAxMTMsIDEwMCwgNywgNiwgMSwgNTcsIDEwMCwgNywgNiwgMSwgMjU0LCAxODUsIDEwMCwgNywgNiwgMSwgCi0gICAgMjU0LCAxOTQsIDEwMCwgNywgNiwgMSwgMjIyLCAyMjIsIDEwMCwgNywgNiwgMSwgNzIsIDEwMCwgNywgNiwgMSwgMjU0LCAKLSAgICAxOTEsIDEwMCwgNywgNiwgMSwgMjE0LCAxMDAsIDcsIDYsIDEsIDIxMiwgMTAwLCA3LCA2LCAxLCA3NCwgMTAwLCA3LCA2LCAKLSAgICAxLCAyNTQsIDE5MiwgMTAwLCA3LCA2LCAxLCAyNTQsIDE4NiwgMTAwLCA3LCA2LCAxLCAxNDksIDEwMCwgNywgNiwgMSwgCi0gICAgMTg1LCAxMDAsIDcsIDYsIDEsIDE5OSwgMTAwLCA3LCA2LCAxLCA3MywgMTAwLCA3LCA2LCAxLCAyNTQsIDE4NywgMTAwLCA3LCAKLSAgICA2LCAxLCAyNTQsIDE5NiwgMTAwLCA3LCA2LCAxLCAxNDYsIDEwMCwgNywgNiwgMSwgMTkzLCAxMDAsIDcsIDYsIDEsIDI1NCwgCi0gICAgMTgzLCAxMDAsIDcsIDYsIDEsIDY2LCAxMDAsIDcsIDYsIDEsIDE5NiwgMTAwLCA3LCA2LCAxLCAyNTQsIDE5NSwgMTAwLCA3LCAKLSAgICA2LCAxLCAyNTQsIDE4NCwgMTAwLCA3LCA2LCAxLCAyNTQsIDE5MCwgMTAwLCA3LCA2LCAxLCAyNTQsIDE5MywgMTAwLCA0MiwgCi0gICAgMzcsIDEwNCwgMTAwLCAyMzUsIDM3LCAyMzMsIDEwNCwgMTAwLCA0MSwgMzcsIDEwNCwgMTAwLCAyMzAsIDEyNSwgMjM1LCAKLSAgICAyNCwgMTAwLCAxODQsIDI0MCwgMTM4LCAxMDAsIDI0MCwgMTYzLCAyMzUsIDI0LCAxMDAsIDcsIDMsIDEsIDU3LCAxMDAsIDcsIAotICAgIDMsIDEsIDI1NCwgMTg1LCAxMDAsIDcsIDMsIDEsIDI1NCwgMTk0LCAxMDAsIDcsIDMsIDEsIDIyMiwgMjIyLCAxMDAsIDcsIAotICAgIDMsIDEsIDcyLCAxMDAsIDcsIDMsIDEsIDI1NCwgMTkxLCAxMDAsIDcsIDMsIDEsIDIxNCwgMTAwLCA3LCAzLCAxLCAyMTIsIAotICAgIDEwMCwgNywgMywgMSwgNzQsIDEwMCwgNywgMywgMSwgMjU0LCAxOTIsIDEwMCwgNywgMywgMSwgMjU0LCAxODYsIDEwMCwgNywgCi0gICAgMywgMSwgMTQ5LCAxMDAsIDcsIDMsIDEsIDE4NSwgMTAwLCA3LCAzLCAxLCAxOTksIDEwMCwgNywgMywgMSwgNzMsIDEwMCwgCi0gICAgNywgMywgMSwgMjU0LCAxODcsIDEwMCwgNywgMywgMSwgMjU0LCAxOTYsIDEwMCwgNywgMywgMSwgMTQ2LCAxMDAsIDcsIDMsIAotICAgIDEsIDE5MywgMTAwLCA3LCAzLCAxLCAyNTQsIDE4MywgMTAwLCA3LCAzLCAxLCA2NiwgMTAwLCA3LCAzLCAxLCAxOTYsIDEwMCwgCi0gICAgNywgMywgMSwgMjU0LCAxOTUsIDEwMCwgNywgMywgMSwgMjU0LCAxODQsIDEwMCwgNywgMywgMSwgMjU0LCAxOTAsIDEwMCwgCi0gICAgNywgMywgMSwgMjU0LCAxOTMsIDEwMCwgNDIsIDI0MCwgMTM3LCAxMDQsIDEwMCwgNjEsIDI0MCwgMTM4LCAxMDAsIDQxLCAKLSAgICAyNDAsIDEzNywgMTA0LCAxMDAsIDIwNSwgMTAwLCA0MiwgNjMsIDIyOCwgMTgwLCAxMDAsIDQxLCA2MywgMjI4LCAxODAsIAotICAgIDgzLCA5MCwgMjQ2LCAxNjIsIDI0MCwgMTIxLCA4MywgNDIsIDIzNywgNzksIDEwNCwgODMsIDQxLCAyMzcsIDc5LCAxMDQsIAotICAgIDgzLCA5MCwgMjM3LCA2NywgODMsIDQ4LCAyMzcsIDQ0LCAyNDYsIDE2NCwgODMsIDQ4LCAxLCAyNTMsIDEwLCA4MywgNDgsIAotICAgIDEsIDMsIDU3LCA4MywgNDgsIDEsIDMsIDc0LCA4MywgNDgsIDEsIDMsIDY2LCA4MywgNDgsIDEsIDMsIDcyLCA4MywgNDgsIAotICAgIDEsIDMsIDczLCA4MywgNDgsIDEsIDMsIDE5MSwgODMsIDQ4LCAxLCAzLCAyNTIsIDIzMywgODMsIDQ4LCAxLCAzLCAyNTIsIAotICAgIDI1MSwgODMsIDQ4LCAxLCAzLCAyNTMsIDE4LCA4MywgMjIyLCAyNTIsIDIzMiwgMzksIDI0MCwgMTgxLCA3NiwgODMsIDQ4LCAKLSAgICAxLCA1NywgODMsIDQ4LCAxLCA3NCwgODMsIDQ4LCAxLCA2NiwgODMsIDQ4LCAxLCA3MiwgODMsIDQ4LCAxLCA3MywgODMsIAotICAgIDQ4LCAxLCAxNzcsIDgzLCA0OCwgMSwgMjUzLCA3LCA4MywgNDgsIDEsIDI1MywgMzQsIDgzLCA0OCwgMSwgMjUzLCA2LCA4MywgCi0gICAgNDgsIDEsIDI1MywgMzMsIDgzLCA0OCwgMSwgMjUyLCAyMDQsIDgzLCA0OCwgMSwgMjUzLCAyNCwgODMsIDQ4LCAxLCAyNTMsIAotICAgIDI2LCA4MywgNDgsIDEsIDI1MywgNTIsIDgzLCA0OCwgMSwgMjUzLCAyNSwgODMsIDQ4LCAxLCAyNTIsIDIwMiwgODMsIDQ4LCAKLSAgICAxLCAyNTMsIDQ0LCA4MywgNDgsIDEsIDI1MywgMTgsIDgzLCA0OCwgMSwgMjUzLCA5LCA4MywgNDgsIDEsIDk2LCA4MywgNDgsIAotICAgIDEsIDI1MiwgMjAxLCA4MywgNDgsIDEsIDI1MiwgMjQ4LCA4MywgNDgsIDEsIDI1MiwgMjI3LCA4MywgNDgsIDEsIDI1MiwgCi0gICAgMjQ3LCA4MywgNDgsIDEsIDI1MywgOCwgODMsIDQ4LCAxLCAxNTQsIDgzLCA0OCwgMSwgMjUzLCA0MSwgODMsIDQ4LCAxLCAKLSAgICAyNTMsIDU5LCA4MywgNDgsIDEsIDI1MiwgMjUyLCA4MywgNDgsIDEsIDI1MywgMjEsIDgzLCA0OCwgMSwgMTk4LCA4MywgNDgsIAotICAgIDEsIDI1MiwgMjM5LCA4MywgNDgsIDEsIDI1MiwgMjI5LCA4MywgNDgsIDEsIDI1MywgMTMsIDgzLCA0OCwgMSwgMjUzLCAxNCwgCi0gICAgODMsIDQ4LCAxLCAxOTEsIDgzLCA0OCwgMSwgMjUyLCAyMzMsIDgzLCA0OCwgMSwgMjUyLCAyNTEsIDgzLCA0OCwgMSwgMjA4LCAKLSAgICA4MywgNDgsIDEsIDI1MywgMzcsIDgzLCA0OCwgMSwgMjUzLCAzLCA4MywgNDgsIDEsIDI1MywgMzYsIDgzLCA0OCwgMSwgCi0gICAgMjUyLCAyNDYsIDgzLCA0OCwgMSwgMjUyLCAyMDgsIDgzLCA0OCwgMSwgMTk5LCA4MywgNDgsIDIzNywgMTA3LCAyNDAsIAotICAgIDE4MSwgNzYsIDgzLCA0OCwgMjI5LCAxODksIDI0MCwgMTgxLCA3NiwgODMsIDI2LCAyMzUsIDkyLCA4MywgMjYsIDEsIDIzNSwgCi0gICAgNzcsIDgzLCAyNiwgMSwgMjI4LCAxOTUsIDgzLCAyNiwgMSwgMjI4LCAxOTksIDgzLCAyNiwgMSwgMjM3LCAxMzksIDgzLCAKLSAgICAyNiwgMSwgMjI4LCAyMDEsIDgzLCAyNiwgMSwgMjI4LCAyMDIsIDgzLCAyNiwgMSwgMjM1LCA4MSwgODMsIDI2LCAxLCAyMjgsIAotICAgIDIwOSwgODMsIDI2LCAxLCAyMzcsIDE0MiwgODMsIDI2LCAxLCAyMjcsIDE5NywgODMsIDI2LCAxLCAyMjgsIDIwNCwgODMsIAotICAgIDI2LCAxLCAyMjgsIDIwNSwgODMsIDI2LCAxLCAyMjksIDE4OCwgODMsIDI2LCAxLCAyMjcsIDE0MCwgODMsIDI2LCAxLCAKLSAgICAyMjcsIDEzOSwgODMsIDI2LCAxLCAyMjgsIDE5MywgODMsIDI2LCAxLCAyMzcsIDEzNywgODMsIDI2LCAxLCAyMzcsIDE0MSwgCi0gICAgODMsIDI2LCAxLCAyMjksIDE5MywgODMsIDI2LCAxLCAyMjksIDE4MCwgODMsIDI2LCAxLCAyNDAsIDIxMywgODMsIDI2LCAxLCAKLSAgICAyMzAsIDE1OSwgODMsIDI2LCAxLCAyMzcsIDEzNCwgODMsIDI2LCAxLCAyMzcsIDEzMCwgODMsIDI2LCAxLCAyMjksIDE5MSwgCi0gICAgODMsIDI2LCAxLCAyMzMsIDEyOCwgODMsIDI2LCAxLCAyMzMsIDEzMSwgODMsIDI2LCAxLCAyMzMsIDEzOCwgODMsIDI2LCAxLCAKLSAgICAyMzMsIDEzMywgODMsIDI2LCAxLCAyMzcsIDEzMywgODMsIDI2LCAxLCA1NywgODMsIDI2LCAxLCAyNTMsIDQsIDgzLCAyNiwgCi0gICAgMSwgMTkxLCA4MywgMjYsIDEsIDI0NywgNjEsIDgzLCAyNiwgMSwgMjUzLCAxNzcsIDgzLCAyNiwgMSwgNzIsIDgzLCAyNiwgCi0gICAgMSwgMjQ3LCAyMzIsIDgzLCAyNiwgMSwgMjUzLCA5NiwgODMsIDI2LCAxLCA3MywgODMsIDI2LCAxLCAyNTIsIDIwOCwgODMsIAotICAgIDI2LCAxLCAyNDcsIDIyMywgODMsIDI2LCAxLCAyNTMsIDE1LCA4MywgMjYsIDEsIDI1MiwgMjUxLCA4MywgMjYsIDEsIDY2LCAKLSAgICA4MywgMjYsIDEsIDI0NywgMjI3LCA4MywgMjYsIDEsIDI1MiwgMjUwLCA4MywgMjYsIDEsIDI1MywgMjcsIDgzLCAyNiwgMSwgCi0gICAgMjUyLCAyMzMsIDgzLCAyNiwgMSwgMjUzLCAxMDAsIDgzLCAyNiwgMSwgMjUzLCAyOCwgODMsIDI2LCAxLCA3NCwgMTAwLCAKLSAgICAyNDgsIDcsIDUzLCAxMDAsIDI0MSwgMjE1LCA1MywgMTAwLCAxOTAsIDUzLCAxMDAsIDIzNSwgMTYsIDEwMCwgMjM3LCAxNTAsIAotICAgIDEyNSwgMTAwLCAyNTQsIDE5LCA1MywgMTAwLCAyNTQsIDE2LCA1MywgODMsIDI0MywgMTA4LCAxNTcsIDIzMSwgMjEwLCA4MywgCi0gICAgMTE3LCA1OCwgODMsIDIzNSwgMTgsIDU4LCA4MywgODEsIDU4LCA4MywgMjMxLCAxOTEsIDU4LCA4MywgODYsIDIzNSwgMjcsIAotICAgIDgzLCA2MywgMjM1LCAyMCwgMjI5LCAxODUsIDIzMCwgMTI5LCAyMzUsIDE0NSwgMjI5LCAxODUsIDIzMCwgMTI5LCAyMzAsIAotICAgIDEzMSwgMjI5LCAxODUsIDIzMCwgMTI5LCAyMzAsIDExNywgMjM5LCAxNzAsIDIyOSwgMjEzLCAyMzAsIDE3NywgMjI5LCAKLSAgICAyMTMsIDIzMCwgMTc3LCA1MCwgNDUsIDQsIDI0OCwgMjUxLCA1NywgNTAsIDQ1LCA0LCAyNDksIDIwLCA3MiwgNTAsIDQ1LCAKLSAgICA0LCAyNDksIDEyLCA3NCwgNTAsIDQ1LCA0LCAyNDksIDQwLCA3MywgNTAsIDQ1LCA0LCAyNDgsIDI1MywgNjYsIDUwLCA0NSwgCi0gICAgNCwgMjQ4LCAyNDQsIDI1MiwgMjAzLCA1MCwgNDUsIDQsIDI0OSwgMjcsIDI1MywgMjAsIDUwLCA0NSwgNCwgMjQ4LCAyNTAsIAotICAgIDI1MywgMTIsIDUwLCA0NSwgNCwgMjQ5LCAxLCAyNTMsIDU3LCA1MCwgNDUsIDQsIDI0OSwgMzEsIDI1MywgMzEsIDUwLCA0NSwgCi0gICAgNCwgMjQ5LCAzNiwgMjUyLCAyMTMsIDUwLCA0NSwgNCwgMjQ5LCAyOCwgMjUzLCAxMTcsIDUwLCA0NSwgNCwgMjQ5LCAxOCwgCi0gICAgMjUzLCA5MCwgNTAsIDQ1LCA0LCAyNDksIDQyLCAyNTMsIDExOCwgNTAsIDQ1LCA0LCAyNDksIDU0LCAxNzcsIDUwLCA0NSwgCi0gICAgNCwgMjQ5LCAyNiwgMjUzLCA2LCA1MCwgNDUsIDQsIDI0OSwgNDQsIDI1MywgNywgNTAsIDQ1LCA0LCAyNDksIDQ3LCAyNTMsIAotICAgIDMzLCA1MCwgNDUsIDQsIDI0OSwgNTcsIDI1MywgMzQsIDUwLCA0NSwgNCwgMjQ5LCA1NiwgMTk4LCA1MCwgNDUsIDQsIDI0OSwgCi0gICAgMCwgMjUzLCAxMywgNTAsIDQ1LCA0LCAyNDksIDUwLCAyNTIsIDIzOSwgNTAsIDQ1LCA0LCAyNDksIDIsIDI1MywgMTQsIDUwLCAKLSAgICA0NSwgNCwgMjQ5LCA3LCAyNTIsIDIyOSwgNTAsIDQ1LCA0LCAyNDgsIDI0OSwgMjUyLCAyMDEsIDUwLCA0NSwgNCwgMjQ5LCAKLSAgICA4LCAyNTIsIDI0NywgNTAsIDQ1LCA0LCAyNDksIDE0LCAyNTIsIDI0OCwgNTAsIDQ1LCA0LCAyNDksIDMyLCAyNTMsIDgsIAotICAgIDUwLCA0NSwgNCwgMjQ5LCAzNSwgMjUyLCAyMjcsIDUwLCA0NSwgNCwgMjQ4LCAyNDYsIDIxMywgNTAsIDQ1LCA0LCAyNDksIAotICAgIDQ5LCAyNTMsIDAsIDUwLCA0NSwgNCwgMjQ5LCAyMSwgMjUyLCAyMjMsIDUwLCA0NSwgNCwgMjQ4LCAyNTQsIDI1MywgNTAsIAotICAgIDUwLCA0NSwgNCwgMjQ5LCAzMCwgMjUzLCA4MiwgNTAsIDQ1LCA0LCAyNDksIDMsIDI1MywgMzUsIDUwLCA0NSwgNCwgMjQ5LCAKLSAgICA1NSwgMjUzLCAxOTAsIDUwLCA0NSwgNCwgMjQ5LCA2LCAyNTMsIDEzMSwgNTAsIDQ1LCA0LCAyNDksIDE2LCAyNTMsIDE1OSwgCi0gICAgNTAsIDQ1LCA0LCAyNDksIDM5LCAyMDgsIDUwLCA0NSwgNCwgMjQ5LCAxMSwgMjUzLCAzNiwgNTAsIDQ1LCA0LCAyNDksIDMzLCAKLSAgICAyNTMsIDM3LCA1MCwgNDUsIDQsIDI0OCwgMjQ1LCAyNTIsIDI0NiwgNTAsIDQ1LCA0LCAyNDksIDEwLCAyNTMsIDMsIDUwLCAKLSAgICA0NSwgNCwgMjQ5LCAxNSwgMjUyLCAyMDQsIDUwLCA0NSwgNCwgMjQ4LCAyNTIsIDI1MywgNTIsIDUwLCA0NSwgNCwgMjQ5LCAKLSAgICAyMywgMjUzLCAyNCwgNTAsIDQ1LCA0LCAyNDgsIDI1NSwgMjUzLCAyNSwgNTAsIDQ1LCA0LCAyNDksIDM3LCAyNTMsIDI2LCAKLSAgICA1MCwgNDUsIDQsIDI0OSwgMzgsIDI1MiwgMjAyLCA1MCwgNDUsIDQsIDI0OCwgMjQ3LCAyNTMsIDksIDUwLCA0NSwgNCwgCi0gICAgMjQ5LCAxOSwgMjUzLCA0NCwgNTAsIDQ1LCA0LCAyNDgsIDI0OCwgOTYsIDUwLCA0NSwgNCwgMjQ5LCA0NiwgMjUzLCAxOCwgCi0gICAgNTAsIDQ1LCA0LCAyNDksIDM0LCAyNTIsIDIwOCwgNTAsIDQ1LCA0LCAyNDksIDUyLCAyNTIsIDI1MCwgNTAsIDQ1LCA0LCAKLSAgICAyNDksIDIyLCAyNTMsIDI3LCA1MCwgNDUsIDQsIDI0OSwgMjQsIDI1MywgMTAsIDUwLCA0NSwgNCwgMjQ5LCA0LCAyNTIsIAotICAgIDIyNiwgNTAsIDQ1LCA0LCAyNDksIDUxLCAyNTMsIDQ2LCA1MCwgNDUsIDQsIDI0OSwgNSwgMjUzLCA2NSwgNTAsIDQ1LCA0LCAKLSAgICAyNDksIDksIDI1MywgMTY1LCA1MCwgNDUsIDQsIDI0OSwgMjUsIDI1NCwgMjIsIDUwLCA0NSwgNCwgMjQ5LCA1OCwgMjUyLCAKLSAgICAyMjIsIDUwLCA0NSwgNCwgMjQ5LCA0OCwgMjQ3LCAxMzQsIDUwLCA0NSwgNCwgMjQ5LCA2MCwgMjQ5LCAyMTgsIDUwLCA0NSwgCi0gICAgNCwgMjQ5LCAyOSwgMjQ3LCA5NSwgNTAsIDQ1LCA0LCAyNDksIDEzLCAyNTEsIDEyMCwgNTAsIDQ1LCA0LCAyNDksIDQxLCAKLSAgICAyNTEsIDExOSwgNTAsIDQ1LCA0LCAyNDksIDUzLCAyNTEsIDE2NiwgNTAsIDQ1LCA0LCAyNDksIDE3LCAyNTEsIDE2NywgNTAsIAotICAgIDQ1LCA0LCAyNDksIDQ1LCAyNTEsIDE4NiwgNTAsIDQ1LCA0LCAyNDksIDQzLCAyNTIsIDMsIDUwLCA0NSwgNCwgMjQ5LCA1OSwgCi0gICAgMjQ3LCA1OSwgNTAsIDQ1LCA0LCAyNDksIDYxLCAxMTMsIDUwLCA0NSwgMTQsIDI0MiwgNjksIDUwLCA0NSwgMTQsIDI0MiwgCi0gICAgNzAsIDUwLCA0NSwgMTQsIDI0MiwgNzEsIDUwLCA0NSwgMTQsIDI0MiwgNzIsIDUwLCA0NSwgMTQsIDI0MiwgNzMsIDUwLCAKLSAgICA0NSwgMTQsIDI0MiwgNzQsIDUwLCA0NSwgMTQsIDI0MiwgNzUsIDUwLCA0NSwgMTQsIDI0MiwgNzYsIDUwLCA0NSwgMTQsIAotICAgIDI0MiwgNzcsIDUwLCA0NSwgMTQsIDI0MiwgNzgsIDUwLCA0NSwgMTQsIDI0MiwgNzksIDUwLCA0NSwgMTQsIDI0MiwgODAsIAotICAgIDUwLCA0NSwgMTQsIDI0MiwgODEsIDUwLCA0NSwgMTQsIDI0MiwgODIsIDUwLCA0NSwgODksIDI0OSwgNjIsIDI0NywgNCwgCi0gICAgNTAsIDQ1LCA4OSwgMjQ5LCA2MywgMjM3LCAyMjUsIDUwLCA0NSwgODksIDI0OSwgNjQsIDI0MSwgMTE5LCA1MCwgNDUsIDg5LCAKLSAgICAyNDksIDY1LCAyMzgsIDIwNSwgNTAsIDQ1LCA4OSwgMjQyLCA4MywgMjQ0LCAxMTcsIDUwLCA0NSwgODksIDI0MiwgODQsIAotICAgIDIzMywgMjksIDUwLCA0NSwgODksIDI0MiwgODUsIDI0OCwgMzUsIDUwLCA0NSwgODksIDI0MiwgODYsIDI0NywgMTk1LCA1MCwgCi0gICAgNDUsIDg5LCAyNDIsIDg3LCAyMzMsIDI0LCA1MCwgNDUsIDg5LCAyNDIsIDg4LCAyMzQsIDExOSwgNTAsIDQ1LCA4OSwgMjQyLCAKLSAgICA4OSwgMjUxLCAyMzQsIDUwLCA0NSwgODksIDI0MiwgOTAsIDI0MiwgMjEwLCA1MCwgNDUsIDg5LCAyNDIsIDkxLCAyNDcsIAotICAgIDEyNywgNTAsIDQ1LCA4OSwgMjQyLCA5MiwgMjQyLCAyMTYsIDUwLCA0NSwgODksIDI0OSwgNjYsIDIzNywgMjI0LCA1MCwgCi0gICAgNDUsIDg5LCAyNDksIDY3LCAyMzYsIDgsIDUwLCA0NSwgODksIDI0OSwgNjgsIDIzOSwgMTczLCA1MCwgNDUsIDg5LCAyNDksIAotICAgIDY5LCAyNDAsIDExLCA1MCwgNDUsIDg5LCAyNDksIDcwLCAyMzQsIDQ0LCA1MCwgNDUsIDIzMywgMTE1LCAyNDksIDcxLCAKLSAgICAyNDQsIDUwLCA1MCwgNDUsIDIzMywgMTE1LCAyNDksIDcyLCAyMzYsIDExNiwgNTAsIDQ1LCA4OSwgMjQ5LCA3MywgMjQ4LCAKLSAgICAxMjEsIDUwLCA0NSwgODksIDI0OSwgNzQsIDI0MSwgODQsIDUwLCA0NSwgODksIDI0MiwgOTMsIDUwLCA0NSwgMjMzLCAxMTUsIAotICAgIDI0OSwgNzUsIDIzOCwgMTAwLCA1MCwgNDUsIDIzMywgMTE1LCAyNDksIDc2LCAyNDQsIDEyMCwgNTAsIDQ1LCA4OSwgMjQ5LCAKLSAgICA3NywgMjM2LCAxNiwgNTAsIDQ1LCA4OSwgMjQ5LCA3OCwgMjQxLCA0MCwgNTAsIDQ1LCA4OSwgMjQyLCA5NCwgNTAsIDQ1LCAKLSAgICA4OSwgMjQ5LCA3OSwgMjQyLCAyNiwgNTAsIDQ1LCA4OSwgMjQyLCA5NSwgNTAsIDQ1LCA4OSwgMjQyLCA5NiwgNTAsIDQ1LCAKLSAgICA4OSwgMjQ5LCA4MCwgMjQwLCAxNzksIDUwLCA0NSwgODksIDI0MiwgOTcsIDUwLCA0NSwgODksIDI0MiwgOTgsIDUwLCA0NSwgCi0gICAgODksIDI0MiwgOTksIDUwLCA0NSwgMjMzLCAxMTUsIDI0OSwgODEsIDI0MCwgNTUsIDUwLCA0NSwgODksIDI0MiwgMTAxLCAKLSAgICA1MCwgNDUsIDg5LCAyNDIsIDEwMiwgNTAsIDQ1LCA4OSwgMjQ5LCA4MiwgMjM3LCAxOTksIDUwLCA0NSwgODksIDI0MiwgCi0gICAgMTAzLCA1MCwgNDUsIDg5LCAyNDIsIDEwNCwgNTAsIDQ1LCA4OSwgMjQ5LCA4MywgMjM0LCAxMTAsIDUwLCA0NSwgODksIAotICAgIDI0OSwgODQsIDIzNSwgMjUwLCA1MCwgNDUsIDg5LCAyNDIsIDEwNSwgNTAsIDQ1LCA4OSwgMjQyLCAxMDYsIDUwLCA0NSwgCi0gICAgODksIDI0MiwgMTA3LCA1MCwgNDUsIDg5LCAyNDIsIDEwOCwgNTAsIDQ1LCA4OSwgMjQyLCAxMDksIDUwLCA0NSwgODksIAotICAgIDI0MiwgMTEwLCA1MCwgNDUsIDg5LCAyNDIsIDExMSwgNTAsIDQ1LCA4OSwgMjQyLCAxMTIsIDUwLCA0NSwgODksIDI0MiwgCi0gICAgMTEzLCA1MCwgNDUsIDg5LCAyNDksIDg1LCAyMzksIDExOSwgNTAsIDQ1LCA4OSwgMjQyLCAxMTQsIDUwLCA0NSwgODksIAotICAgIDI0OSwgODYsIDI0MSwgODEsIDUwLCA0NSwgODksIDI0MiwgMTE1LCA1MCwgNDUsIDg5LCAyNDIsIDExNiwgNTAsIDQ1LCA4OSwgCi0gICAgMjQyLCAxMTcsIDUwLCA0NSwgODksIDI0MiwgMTE4LCA1MCwgNDUsIDg5LCAyNDIsIDExOSwgNTAsIDQ1LCA4OSwgMjQyLCAKLSAgICAxMjAsIDUwLCA0NSwgODksIDI0MiwgMTIxLCA1MCwgNDUsIDg5LCAyNDIsIDEyMiwgNTAsIDQ1LCA4OSwgMjQyLCAxMjMsIAotICAgIDUwLCA0NSwgODksIDI0MiwgMTI0LCA1MCwgNDUsIDg5LCAyNDIsIDEyNSwgNTAsIDQ1LCA4OSwgMjQ5LCA4NywgMjM1LCAKLSAgICAxNzYsIDUwLCA0NSwgODksIDI0OSwgODgsIDIzMSwgNjksIDUwLCA0NSwgODksIDI0OSwgODksIDIzNCwgMTUsIDUwLCA0NSwgCi0gICAgODksIDI0OSwgOTAsIDIzOCwgNjQsIDUwLCA0NSwgODksIDI0OSwgOTEsIDU4LCA1MCwgNDUsIDg5LCAyNDIsIDE1MiwgNTAsIAotICAgIDQ1LCA4OSwgMjQ5LCA5MiwgMjQwLCAyNSwgNTAsIDQ1LCA4OSwgMjQyLCAxNTMsIDUwLCA0NSwgODksIDI0MiwgMTU0LCA1MCwgCi0gICAgNDUsIDg5LCAyNDksIDkzLCAyMzcsIDI5LCAyMzMsIDE5MSwgNTAsIDQ1LCA4OSwgMjQ5LCA5NCwgMjMzLCAxOTEsIDUwLCAKLSAgICA0NSwgODksIDI0OSwgOTUsIDIzNiwgMjUsIDIzOCwgMjI1LCA1MCwgNDUsIDg5LCAyNDksIDk2LCAyNDAsIDg0LCA1MCwgNDUsIAotICAgIDg5LCAyNDIsIDE1NSwgNTAsIDQ1LCA4OSwgMjQyLCAxNTYsIDUwLCA0NSwgMjMzLCAxMTUsIDI0OSwgOTcsIDIzOCwgMTg3LCAKLSAgICA1MCwgNDUsIDg5LCAyNDIsIDE1NywgNTAsIDQ1LCA4OSwgMjQyLCAxNTgsIDUwLCA0NSwgODksIDI0MiwgMTYwLCA1MCwgNDUsIAotICAgIDg5LCAyNDIsIDE2MSwgNTAsIDQ1LCA4OSwgMjQyLCAxNjIsIDUwLCA0NSwgODksIDI0OSwgOTgsIDI0MywgMjgsIDUwLCA0NSwgCi0gICAgODksIDI0MiwgMTYzLCA1MCwgNDUsIDg5LCAyNDIsIDE2NCwgNTAsIDQ1LCA4OSwgMjQyLCAxNjUsIDUwLCA0NSwgODksIAotICAgIDI0MiwgMTY2LCA1MCwgNDUsIDg5LCAyNDIsIDE2NywgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMDAsIDUwLCA0NSwgCi0gICAgODksIDIzNywgNTMsIDI0MiwgMTI2LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEyNywgNTAsIDQ1LCA4OSwgMjM3LCAKLSAgICA1MywgMjQyLCAxMjgsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTI5LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIAotICAgIDEzMCwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMzEsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTMyLCA1MCwgCi0gICAgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEzMywgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxMzQsIDUwLCA0NSwgODksIAotICAgIDIzNywgNTMsIDI0MiwgMTM1LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEzNiwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgCi0gICAgMjQyLCAxMzcsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTM4LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDEzOSwgCi0gICAgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNDAsIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTQxLCA1MCwgNDUsIDg5LCAKLSAgICAyMzcsIDUzLCAyNDIsIDE0MiwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNDMsIDUwLCA0NSwgODksIDIzNywgNTMsIAotICAgIDI0MiwgMTQ0LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE0NSwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNDYsIAotICAgIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTQ3LCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAyNDIsIDE0OCwgNTAsIDQ1LCA4OSwgCi0gICAgMjM3LCA1MywgMjQyLCAxNDksIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTUwLCA1MCwgNDUsIDg5LCAyMzcsIDUzLCAKLSAgICAyNDIsIDE1MSwgNTAsIDQ1LCA4OSwgMjM3LCA1MywgMjQyLCAxNTksIDUwLCA0NSwgODksIDIzNywgNTMsIDI0MiwgMTY4LCAKLSAgICAyMTAsIDI0NywgOCwgMjMxLCAyNDcsIDI0MCwgMTM4LCAyMTAsIDI0NywgOCwgMjMxLCAyNDcsIDI0NiwgMTY0LCAyMTAsIAotICAgIDI0MCwgMjQ1LCA3NiwgMjEwLCA2NSwgMTE4LCAyMTAsIDY1LCAxMTMsIDIxMCwgNjUsIDE2NiwgMjEwLCA2NSwgMTU4LCAKLSAgICAyMTAsIDY1LCAxNzMsIDIxMCwgNjUsIDE4MywgMjEwLCA2NSwgMTk0LCAyMTAsIDY1LCAxODcsIDIxMCwgNjUsIDE5MiwgCi0gICAgMjEwLCA2NSwgMjQ2LCAxNzksIDIxMCwgNjUsIDIzNSwgNTIsIDIxMCwgNjUsIDIzNSwgODAsIDIxMCwgNjUsIDIzNywgMjAzLCAKLSAgICAyMTAsIDY1LCAyMzcsIDEwMCwgMjEwLCA2NSwgMjM4LCA2MiwgMjEwLCA2NSwgMjMzLCAyMzUsIDIxMCwgNjUsIDIzNSwgCi0gICAgMTY5LCAyMTAsIDY1LCAyMzUsIDEzMiwgMjEwLCA2NSwgMTY4LCAyMzMsIDc1LCAyMTAsIDY1LCAxMzUsIDIzMywgNzUsIAotICAgIDIxMCwgNjUsIDE1MiwgMjMzLCA3NSwgMjEwLCA2NSwgMjQ2LCAxNjAsIDIzMywgNzUsIDIxMCwgNjUsIDI0NiwgMTU5LCAKLSAgICAyMzMsIDc1LCAyMTAsIDY1LCAyNTMsIDE3LCAyMzMsIDc1LCAyMTAsIDY1LCAyNDAsIDE1NSwgMjMzLCA3NSwgMjEwLCA2NSwgCi0gICAgMjQwLCAxNDIsIDIzMywgNzUsIDIxMCwgNjUsIDI0NiwgMjA4LCAyMzMsIDc1LCAyMTAsIDY1LCAxNjgsIDIzMSwgMTk2LCAKLSAgICAyMTAsIDY1LCAxMzUsIDIzMSwgMTk2LCAyMTAsIDY1LCAxNTIsIDIzMSwgMTk2LCAyMTAsIDY1LCAyNDYsIDE2MCwgMjMxLCAKLSAgICAxOTYsIDIxMCwgNjUsIDI0NiwgMTU5LCAyMzEsIDE5NiwgMjEwLCA2NSwgMjUzLCAxNywgMjMxLCAxOTYsIDIxMCwgNjUsIAotICAgIDI0MCwgMTU1LCAyMzEsIDE5NiwgMjEwLCA2NSwgMjQwLCAxNDIsIDIzMSwgMTk2LCAyMTAsIDY1LCAyNDYsIDIwOCwgMjMxLCAKLSAgICAxOTYsIDIxMCwgNjUsIDI1MywgNTMsIDIzMSwgMTk2LCAyMTAsIDY1LCAyMzcsIDk3LCAyMzEsIDE5NiwgMjEwLCA2NSwgCi0gICAgMjM3LCAxMDYsIDIzMSwgMTk2LCAyMTAsIDY1LCAyNDAsIDE4NCwgMjMxLCAxOTYsIDIxMCwgNjUsIDI0MCwgMTg5LCAyMzEsIAotICAgIDE5NiwgMjEwLCA2NSwgMjQ1LCAxODcsIDIzMSwgMTk2LCAyMTAsIDY1LCAyMzYsIDIxOCwgMjMxLCAxOTYsIDIxMCwgNjUsIAotICAgIDIzOCwgMTk3LCAyMzEsIDE5NiwgMjEwLCA2NSwgMjM5LCAxNDQsIDIzMSwgMTk2LCAyMTAsIDIzNywgMTY5LCAyNDcsIDEyMiwgCi0gICAgMjQ2LCAzNCwgMjEwLCAyMzcsIDE2OSwgMjQwLCAyMjUsIDIzMywgMTIyLCAyMTAsIDIzNywgMTY5LCAyMzcsIDE0NSwgMjMzLCAKLSAgICAxMjIsIDIxMCwgMjM3LCAxNjksIDI0MCwgMjM5LCAyMzMsIDEyMiwgMjEwLCAyMzcsIDE2OSwgMjM3LCAxODIsIDIzMywgCi0gICAgMTIyLCAyMTAsIDI1NCwgNDYsIDIzNSwgODUsIDI0MCwgMjI1LCAyMzMsIDEyMiwgMjEwLCAyMzksIDg4LCAyMzUsIDg1LCAKLSAgICAyNDAsIDIyNSwgMjMzLCAxMjIsIDIxMCwgMjM1LCA4NSwgMjM3LCAxNDUsIDIzMywgMTIyLCAyMTAsIDIzNSwgODUsIDI0MCwgCi0gICAgMjM5LCAyMzMsIDEyMiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMTY4LCAyMzMsIDE1NSwgMTksIDIzMCwgMTI0LCAyNDAsIAotICAgIDE0MCwgMTY4LCAyNDAsIDE3MCwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMTY4LCAyMzQsIDg2LCAxOSwgMjMwLCAxMjQsIAotICAgIDI0MCwgMTQwLCAxNzMsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIDIzNywgMTAwLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAKLSAgICAyNDYsIDE1OSwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQ2LCAxNTksIDIzMSwgMTk2LCAxOSwgMjMwLCAKLSAgICAxMjQsIDI0MCwgMTQwLCAyNDAsIDE4OSwgMjMxLCAxOTYsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIDI0NiwgMTU5LCAyMzMsIAotICAgIDEyNiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjUzLCA1MywgMjMzLCAxMjYsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIAotICAgIDI0MCwgMTg5LCAyMzMsIDEyNiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMTY4LCAyMzUsIDU2LCAyMzMsIDEyNiwgMTksIAotICAgIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQ2LCAxNTksIDIzNSwgNTYsIDIzMywgMTI2LCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAKLSAgICAxNjgsIDIzMywgMTE3LCAyMzMsIDEyNiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQ2LCAxNTksIDIzMywgMTE3LCAyMzMsIAotICAgIDEyNiwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQ2LCAxNTksIDIzMywgMTIxLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAKLSAgICAyNTMsIDUzLCAyMzMsIDEyMSwgMTksIDIzMCwgMTI0LCAyNDAsIDE0MCwgMjQwLCAxODksIDIzMywgMTIxLCAxOSwgMjMwLCAKLSAgICAxMjQsIDI0MCwgMTQwLCAxNjgsIDIzNSwgNTYsIDIzMywgMTIxLCAxOSwgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNDYsIDE1OSwgCi0gICAgMjM1LCA1NiwgMjMzLCAxMjEsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIDE2OCwgMjMzLCAxMTcsIDIzMywgMTIxLCAxOSwgCi0gICAgMjMwLCAxMjQsIDI0MCwgMTQwLCAyNTMsIDUzLCAyMzMsIDExNywgMjMzLCAxMjEsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIAotICAgIDI0MCwgMTg5LCAyMzMsIDExNywgMjMzLCAxMjEsIDE5LCAyMzAsIDEyNCwgMjQwLCAxNDAsIDI1MywgNTMsIDI0MSwgNTEsIAotICAgIDE5LCAyMzAsIDEyNCwgMjM2LCAxMDMsIDE2OCwgMjMyLCAyNTEsIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIDExOCwgMTksIAotICAgIDIzMCwgMTI0LCAyMzAsIDE2NiwgMTE4LCAxOSwgMjMwLCAxMjQsIDIzMCwgMTY1LCAxMTMsIDE5LCAyMzAsIDEyNCwgMjMzLCAKLSAgICAxMDgsIDExMywgMTksIDIzMCwgMTI0LCAyMzQsIDQ1LCAxMzUsIDIzMiwgMjEsIDE5LCAyMzAsIDEyNCwgMjMwLCAxNjUsIAotICAgIDEzNSwgMjMyLCAyMSwgMTksIDIzMCwgMTI0LCAyMzAsIDE0NCwgMTczLCAxOSwgMjMwLCAxMjQsIDIzMCwgMTQ0LCAyNDYsIAotICAgIDE3OSwgMTksIDIzMCwgMTI0LCAyMzAsIDE0NCwgMjUzLCA1MywgMjMxLCAyMzUsIDE1LCAxOSwgMjMwLCAxMjQsIDIzMCwgCi0gICAgMTY2LCAyNDYsIDE3OSwgMTksIDIzMCwgMTI0LCAyMzIsIDIzMCwgMjQ2LCAxNzksIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIAotICAgIDI0NiwgMTc5LCAxOSwgMjMwLCAxMjQsIDIzMywgMTA4LCAyMzUsIDgwLCAxOSwgMjMwLCAxMjQsIDIzMCwgMTQ0LCAyMzcsIAotICAgIDEwMCwgMTksIDIzMCwgMTI0LCAyMzAsIDE0NCwgMjQwLCAxODksIDIzMSwgMjM1LCAxNSwgMTksIDIzMCwgMTI0LCAyMzAsIAotICAgIDE2NiwgMjM3LCAxMDAsIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIDIzNywgMTAwLCAxOSwgMjMwLCAxMjQsIDIzMywgMTA4LCAKLSAgICAxNjgsIDIzMywgNzUsIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIDE1MiwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzAsIAotICAgIDE2NSwgMjQ2LCAxNTksIDIzMywgNzUsIDE5LCAyMzAsIDEyNCwgMjMwLCAxNDQsIDI0NiwgMTU5LCAyMzMsIDc1LCAxOSwgCi0gICAgMjMwLCAxMjQsIDIzMywgMTA4LCAyNDYsIDE1OSwgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzIsIDkzLCAyNDYsIDE1OSwgCi0gICAgMjMzLCA3NSwgMTksIDIzMCwgMTI0LCAyMzksIDEyNywgMjQ2LCAxNTksIDIzMywgNzUsIDE5LCAyMzAsIDEyNCwgMjMzLCAKLSAgICAxMDgsIDE2OCwgMjMxLCAxOTYsIDE5LCAyMzAsIDEyNCwgMjMzLCAxMDgsIDI0NiwgMTU5LCAyMzEsIDE5NiwgMTksIDIzMCwgCi0gICAgMTI0LCAyMzYsIDQ1LCAyNDYsIDE1OSwgMjQxLCA1MSwgMTksIDIzMCwgMTI0LCAyMzQsIDIzMywgMjQwLCAxODksIDI0MSwgCi0gICAgNTEsIDE5LCAxNjgsIDEzMiwgNTMsIDE5LCAxNjgsIDEzMiwgNSwgMjMxLCAyMzUsIDE1LCAxOSwgMTM1LCAyMzcsIDIxOCwgCi0gICAgNTMsIDE5LCAxNTIsIDIzMywgMTc2LCA1MywgMTksIDI0OCwgMjAwLCA1MywgMTksIDI0MCwgMjgsIDUzLCAxOSwgMjM1LCAKLSAgICAxNjcsIDUzLCAxOSwgMjUxLCA5NiwgNTMsIDE5LCAxMzUsIDI0MSwgOCwgNTMsIDE5LCAxNTIsIDI0MSwgOCwgNTMsIDE5LCAKLSAgICAyNDYsIDE2MCwgMjQxLCA4LCA1MywgMTksIDI0NiwgMTU5LCAyNDEsIDgsIDUzLCAxOSwgMjM0LCAxNjAsIDUzLCAxOSwgCi0gICAgMjM2LCAxMjYsIDI0NywgMTIyLCA1MywgMTksIDI0NCwgMTA1LCA1MywgMTksIDIzOSwgMTc3LCA1MywgMTksIDI0MCwgODksIAotICAgIDUzLCAxOSwgMjM4LCAxMDcsIDUzLCAxOSwgMjM4LCAxMDUsIDUzLCAxOSwgMjM4LCAyNTMsIDUzLCAxOSwgMjM0LCAyNTIsIAotICAgIDI0NywgMTIyLCA1MywgMTksIDI0NywgMjcsIDUzLCAyNDAsIDExOCwgMjM2LCAyMTksIDUzLCAyNDAsIDExOCwgMjQ2LCAzMywgCi0gICAgNTMsIDI0MCwgMTE4LCAyMzQsIDIxOSwgNTMsIDI0MCwgMTE4LCAyMzUsIDIwOCwgNTMsIDI0MCwgMTE4LCAyMzYsIDUwLCAKLSAgICAyMzUsIDIwOCwgNTMsIDI0MCwgMTE4LCAyMzYsIDIzMSwgNTMsIDI0MCwgMTE4LCAyMzQsIDQ4LCA1MywgMjQwLCAxMTgsIAotICAgIDIzMywgNSwgNTMsIDI0MCwgMTE4LCAyMzEsIDEzOSwgNTMsIDI0MCwgMTE4LCAyMzIsIDE3NCwgNTMsIDI0MCwgMTE4LCAKLSAgICAyNTQsIDIwMywgNTMsIDI0MCwgMTE4LCAyMzIsIDk0LCA1MywgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzMCwgODksIDIzMywgCi0gICAgNjksIDI0NiwgMTU4LCA1LCAyMzksIDE5OSwgMjQwLCAyMjgsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzQsIDI0MCwgMjQwLCAKLSAgICAyMjgsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzQsIDI3LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM3LCAyMzUsIDIzMywgCi0gICAgNjksIDI0NiwgMTU4LCA1LCAyMzcsIDIyNSwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNSwgMTc2LCAyMzMsIDY5LCAyNDYsIAotICAgIDE1OCwgNSwgMjMyLCAxOTcsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDAsIDQyLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgCi0gICAgNTgsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDcsIDY4LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM2LCAyMjUsIDIzMywgCi0gICAgNjksIDI0NiwgMTU4LCA1LCAyNDMsIDE2LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjMyLCAyMjYsIDIzMywgNjksIDI0NiwgCi0gICAgMTU4LCA1LCAyMzQsIDE1NSwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI1MSwgMjEyLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgCi0gICAgMjQ4LCA5MiwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzMCwgMjMyLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjMyLCA5MiwgCi0gICAgMjM5LCAxOTgsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzYsIDUzLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQzLCAxOSwgCi0gICAgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0MCwgMywgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDIzNiwgMzUsIDIzMywgNjksIAotICAgIDI0NiwgMTU4LCA1LCAyMzQsIDE3LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ1LCAxNjgsIDIzMywgNjksIDI0NiwgMTU4LCAKLSAgICA1LCAyNDAsIDE3OSwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0MywgMTc1LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQyLCAKLSAgICAyMTcsIDI0NywgMywgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0OCwgNSwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0NywgCi0gICAgMTk1LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM4LCAxOTUsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyNDMsIDgwLCAyMzMsIAotICAgIDY5LCAyNDYsIDE1OCwgNSwgMjQwLCA1NCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI0NywgMjgsIDIzMywgNjksIDI0NiwgCi0gICAgMTU4LCA1LCAyNDUsIDc3LCAyNDEsIDgxLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ2LCA0OCwgMjMzLCA2OSwgMjQ2LCAKLSAgICAxNTgsIDUsIDIzNCwgMTg2LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjM0LCAyMTAsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAKLSAgICAyNDQsIDEwNCwgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDI1NSwgNDMsIDI0MCwgMjE3LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgCi0gICAgMjM3LCAyNTAsIDIzMywgNjksIDI0NiwgMTU4LCA1LCAyMzYsIDk2LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjMzLCAzMiwgCi0gICAgMjMzLCA2OSwgMjQ2LCAxNTgsIDUsIDMsIDI0NywgMjQ0LCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMjQ2LCAyMzksIDI0MiwgCi0gICAgMTcyLCAyMzMsIDY5LCAyNDYsIDE1OCwgNSwgMzYsIDIzNSwgNzgsIDgyLCAyMzcsIDUyLCAxLCA1NywgMjM3LCA1MiwgMSwgCi0gICAgNzIsIDIzNywgNTIsIDEsIDI1NCwgMTg1LCAyMzcsIDUyLCAxLCAyNTQsIDMzLCAyMzcsIDUyLCAxLCAyMTQsIDIzNywgNTIsIAotICAgIDEsIDIyMiwgMjIyLCAyMzcsIDUyLCAxLCA3NCwgMjM3LCA1MiwgMSwgMjU0LCAxOTUsIDIzNywgNTIsIDEsIDI1NCwgMTkzLCAKLSAgICAyMzcsIDUyLCAxLCAyNTMsIDEzNSwgMjM3LCA1MiwgMSwgMjU0LCAxOTIsIDIzNywgNTIsIDEsIDI1NCwgMTg2LCAyMzcsIAotICAgIDUyLCAxLCAyNTQsIDE5NiwgMjM3LCA1MiwgMSwgMTQ5LCAyMzcsIDUyLCAxLCAxODUsIDIzNywgNTIsIDEsIDE5OSwgMjM3LCAKLSAgICA1MiwgMSwgMjUzLCAyNDgsIDIzNywgNTIsIDEsIDI1MywgMTU1LCAyMzcsIDUyLCAxLCA2NiwgMjM3LCA1MiwgMSwgMjU0LCAKLSAgICAxODcsIDIzNywgNTIsIDEsIDI1MywgMTgzLCAyMzcsIDUyLCAxLCAxNDYsIDIzNywgNTIsIDEsIDE5MywgMjM3LCA1MiwgMSwgCi0gICAgMjU0LCAxODMsIDIzNywgNTIsIDEsIDI1MywgMTk2LCAyMzcsIDUyLCAxLCAyNTMsIDUsIDIzNywgNTIsIDEsIDI1MiwgMjMyLCAKLSAgICAyMzcsIDUyLCAxLCAyMTIsIDIzNywgNTIsIDEsIDI1NCwgMTg0LCAyMzcsIDM4LCAxLCA1NywgMjM3LCAzOCwgMSwgMjU0LCAKLSAgICAxMjQsIDIzNywgMzgsIDEsIDIyMiwgMjIyLCAyMzcsIDM4LCAxLCAxNDksIDIzNywgMzgsIDEsIDI1MiwgNjYsIDIzNywgMzgsIAotICAgIDEsIDE0NiwgMjM3LCAzOCwgMSwgMjU0LCA5MiwgMjM3LCAzOCwgMSwgMjUzLCAxNjUsIDIzNywgMzgsIDEsIDI1NCwgMTk2LCAKLSAgICAyMzcsIDM4LCAxLCAyNTQsIDE4NSwgMjM3LCAzOCwgMSwgMTg1LCAyMzcsIDM4LCAxLCA3MywgMjM3LCAzOCwgMSwgMjU0LCAKLSAgICA0MSwgMjM3LCAzOCwgMSwgMjU0LCAxODMsIDIzNywgMzgsIDEsIDI1MywgMTYwLCAyMzcsIDM4LCAxLCAyNTEsIDIyMCwgCi0gICAgMjM3LCAzOCwgMSwgMTkzLCAyMzcsIDM4LCAxLCAyNDIsIDIyNywgMjM3LCAzOCwgMSwgNjYsIDIzNywgMzgsIDEsIDI1MywgCi0gICAgMTU1LCAyMzcsIDM4LCAxLCAyNTQsIDE4NCwgMjM3LCAzOCwgMSwgMTk5LCAyMzcsIDM4LCAxLCAyNTIsIDMxLCAyMzcsIDM4LCAKLSAgICAxLCAyNTQsIDE4NywgMjM3LCAzOCwgMSwgMjUzLCAxOTQsIDIzNywgMzgsIDEsIDc0LCAyMzcsIDM4LCAxLCA3MiwgMjM3LCAKLSAgICAzOCwgMSwgMjQ2LCA0MywgMjM3LCAzOCwgMSwgMjU0LCAxODYsIDIzNywgMzgsIDEsIDI1NCwgNzYsIDIzNywgMzgsIDEsIAotICAgIDI1NCwgMTExLCAyMzcsIDM4LCAxLCAyNTIsIDIyNCwgMjM3LCAzOCwgMSwgMjE0LCAyMzcsIDM4LCAxLCAyNTQsIDU4LCAKLSAgICAyMzcsIDM4LCAxLCAyNTMsIDE5NSwgMjM3LCAzOCwgMSwgMjUxLCAyMzcsIDIzNywgMzgsIDEsIDI1MywgNjksIDIzNywgMzgsIAotICAgIDEsIDI1MiwgMjE2LCAyMzcsIDM4LCAxLCAyNDIsIDIyOCwgMjM3LCAzOCwgMSwgMjUzLCAxOTYsIDIzNywgMzgsIDEsIDI0NiwgCi0gICAgNDEsIDIzNywgMzgsIDEsIDI1MiwgMjQ5LCAyMzcsIDM4LCAxLCAyNTMsIDI0NiwgMjM3LCAzOCwgMSwgMjUwLCAyNTMsIAotICAgIDIzNywgMzgsIDEsIDI1MCwgMjU0LCAyMzcsIDM4LCAxLCAyNTAsIDI1NSwgMjM3LCAzOCwgMSwgMjUwLCAyMTIsIDIzNywgCi0gICAgMzgsIDEsIDI1MywgMjE4LCAyMzcsIDM4LCAxLCAyNDYsIDQyLCA4NCwgMjcsIDEsIDU3LCA4NCwgMjcsIDEsIDI1MywgNzMsIAotICAgIDg0LCAyNywgMSwgMjUzLCA2LCA4NCwgMjcsIDEsIDI1MywgMjAsIDg0LCAyNywgMSwgNzIsIDg0LCAyNywgMSwgMjUzLCA5NSwgCi0gICAgODQsIDI3LCAxLCAyNTMsIDQ2LCA4NCwgMjcsIDEsIDI1MiwgMjUyLCA4NCwgMjcsIDEsIDI0NiwgMjQ3LCA4NCwgMjcsIDEsIAotICAgIDc0LCA4NCwgMjcsIDEsIDE3NywgODQsIDI3LCAxLCAyNTMsIDU4LCA4NCwgMjcsIDEsIDI1MywgODcsIDg0LCAyNywgMSwgCi0gICAgMjUyLCAyMzIsIDg0LCAyNywgMSwgMjQ2LCAyMzIsIDg0LCAyNywgMSwgNzMsIDg0LCAyNywgMSwgMjUzLCAwLCA4NCwgMjcsIAotICAgIDEsIDI0NiwgMTg2LCA4NCwgMjcsIDEsIDI1MywgMzQsIDg0LCAyNywgMSwgMjUzLCA5OSwgODQsIDI3LCAxLCAyNTMsIDExNiwgCi0gICAgODQsIDI3LCAxLCAyNTMsIDksIDg0LCAyNywgMSwgNjYsIDg0LCAyNywgMSwgMjQ5LCAyMjcsIDg0LCAyNywgMSwgMjQ4LCAKLSAgICAxMzAsIDg0LCAyNywgMSwgMjQ4LCA4MiwgODQsIDI3LCAxLCAyNTMsIDEyNCwgODQsIDI3LCAxLCAyNDksIDIzMiwgODQsIAotICAgIDI3LCAxLCAyNDYsIDIxNywgODQsIDI3LCAxLCAyNTIsIDIxNiwgODQsIDI3LCAxLCAyNTIsIDIyNCwgODQsIDI3LCAyMDcsIAotICAgIDExOCwgODQsIDI3LCAyMDcsIDE3MywgODQsIDI3LCAyMDcsIDI0NiwgMTc5LCA4NCwgMjcsIDIwNywgMjM3LCAxMDAsIDIzNywgCi0gICAgNTQsIDEsIDI0MiwgNDYsIDIzNywgNTQsIDEsIDIzNCwgMTIsIDIzNywgNTQsIDEsIDI0MywgMTQ1LCAyMzcsIDU0LCAxLCAKLSAgICAyNDMsIDI1LCAyMzcsIDU0LCAxLCAyMzUsIDI0MSwgMjM3LCA1NCwgMSwgMjMzLCAzLCAyMzcsIDU0LCAxLCAyNDQsIDE0LCAKLSAgICAyMzcsIDU0LCAxLCAyNDMsIDE2OCwgMjM3LCA1NCwgMSwgMjM3LCA1LCAyMzcsIDU0LCAxLCAyNDksIDIyNiwgMjM3LCA1NCwgCi0gICAgMSwgMjM5LCA3NCwgMjM3LCA1NCwgMSwgMjM5LCA3OSwgMjM3LCA1NCwgMSwgMjM5LCA5NSwgMjM3LCA1NCwgMSwgMjM2LCAKLSAgICAxNjMsIDIzNywgNTQsIDEsIDI1MCwgMTI4LCAyMzcsIDU0LCAxLCAyNDYsIDM3LCAyMzcsIDU0LCAxLCAyMzIsIDIzOCwgCi0gICAgMjM3LCA1NCwgMSwgMjM1LCAxMzIsIDIzNywgNTQsIDEsIDIzOSwgMjEzLCAyMzcsIDU0LCAxLCAyMzksIDIzOCwgMjM3LCAKLSAgICA1NCwgMSwgMjQwLCAzMywgMjM3LCA1NCwgMSwgMjQwLCA4NiwgMjM3LCA1NCwgMSwgMjM4LCAyMTIsIDIzNywgNTQsIDEsIAotICAgIDIzOSwgMzgsIDIzNywgNTQsIDEsIDIzOCwgOSwgMjM3LCA1NCwgMSwgMjM5LCAxNzYsIDIzNywgNTQsIDEsIDI0NiwgMjA4LCAKLSAgICAyMzMsIDc1LCAyMzMsIDcyLCAxLCAyNDIsIDU1LCAyMzMsIDcyLCAxLCAyNDAsIDE2MCwgMjMzLCA3MiwgMSwgMjM4LCAyMzIsIAotICAgIDIzMywgNzIsIDEsIDI0NiwgMTc4LCAyMzMsIDcyLCAxLCAyMzcsIDc1LCAyMzMsIDcyLCAxLCAyNTMsIDIxLCAyMzMsIDcyLCAKLSAgICAxLCAyNTMsIDEwLCAyMzMsIDcyLCAxLCAyNDAsIDE3MywgMjMzLCA3MiwgMSwgMjQzLCAyMzMsIDIzMywgNzIsIDEsIDI0NywgCi0gICAgMjEwLCAyMzMsIDcyLCAxLCAyNDcsIDYzLCAyMzMsIDcyLCAxLCAyNDcsIDEsIDIzMywgNzIsIDEsIDI0MCwgMjAzLCAyMzMsIAotICAgIDcyLCAxLCAyMzcsIDgyLCAyMzMsIDcyLCAxLCAyNDcsIDQxLCAyMzMsIDcyLCAxLCAyNDMsIDYwLCAyMzMsIDcyLCAxLCAKLSAgICAyNDYsIDE5NSwgMjMzLCA3MiwgMSwgMjUzLCA5NywgMjMzLCA3MiwgMSwgMjM5LCAyMzUsIDIzMywgNzIsIDEsIDI0NiwgCi0gICAgMjI0LCAyMzMsIDcyLCAxLCAyNTMsIDgyLCAyMzMsIDcyLCAxLCAyNDEsIDIyOSwgMjMzLCA3MiwgMSwgMjQ1LCAxMDAsIAotICAgIDIzMywgNzIsIDEsIDIzOSwgMjE0LCAyMzMsIDcyLCAxLCAyMzcsIDMsIDIzMywgNzIsIDEsIDIzNywgMjU1LCAyMzMsIDcyLCAKLSAgICAxLCA5NiwgMjMzLCA3MiwgMSwgNzQsIDIzMywgNzIsIDEsIDY2LCAyMzMsIDcyLCAxLCAyNDcsIDIwNCwgMjMzLCA3MiwgCi0gICAgMjQ3LCA4LCAyMzMsIDE0MCwgODQsIDIzNSwgMTUsIDUsIDU3LCA4NCwgMjM1LCAxNSwgNSwgNzQsIDg0LCAyMzUsIDE1LCA1LCAKLSAgICA2NiwgODQsIDIzNSwgMTUsIDUsIDE3NywgODQsIDIzNSwgMTUsIDUsIDI1MywgMzQsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIAotICAgIDIwNSwgODQsIDIzNSwgMTUsIDUsIDI1MywgNDAsIDg0LCAyMzUsIDE1LCA1LCAyNTMsIDgzLCA4NCwgMjM1LCAxNSwgNSwgCi0gICAgMjUyLCAyMTUsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIxMywgODQsIDIzNSwgMTUsIDUsIDI1MywgMTA0LCA4NCwgMjM1LCAKLSAgICAxNSwgNSwgMjUyLCAyMDIsIDg0LCAyMzUsIDE1LCA1LCAyNTMsIDE4LCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMDMsIDg0LCAKLSAgICAyMzUsIDE1LCA1LCAyNTMsIDEyLCA4NCwgMjM1LCAxNSwgNSwgMjUzLCAzMSwgODQsIDIzNSwgMTUsIDUsIDI0NiwgMTczLCAKLSAgICA4NCwgMjM1LCAxNSwgNSwgMjEzLCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMTEsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIzNCwgCi0gICAgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjAxLCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyMjcsIDg0LCAyMzUsIDE1LCA1LCAxOTgsIAotICAgIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIzOSwgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjI5LCA4NCwgMjM1LCAxNSwgNSwgMTkxLCAKLSAgICA4NCwgMjM1LCAxNSwgNSwgMjUyLCAyNDMsIDg0LCAyMzUsIDE1LCA1LCAyNTMsIDEzOCwgODQsIDIzNSwgMTUsIDUsIDIwOCwgCi0gICAgODQsIDIzNSwgMTUsIDUsIDI1MywgMywgODQsIDIzNSwgMTUsIDUsIDI1MiwgMjAwLCA4NCwgMjM1LCAxNSwgNSwgMjUyLCAKLSAgICAyMDQsIDg0LCAyMzUsIDE1LCA1LCAyNTIsIDIyNiwgODQsIDIzNSwgMTUsIDUsIDI0NiwgMTY1LCA4NCwgMjM1LCAxNSwgNSwgCi0gICAgMjQ2LCAxOTAsIDg0LCAyMzUsIDE1LCA1LCAxNTQsIDg0LCAyMzUsIDE1LCA1LCAyMjksIDIzMiwgODQsIDIzNSwgMTUsIDUsIAotICAgIDIyNywgMjE4LCA4NCwgMjM1LCAxNSwgNSwgMjI3LCAyMTksIDg0LCAyMzUsIDE1LCA1LCAyMjgsIDE3MywgODQsIDIzNSwgCi0gICAgMTUsIDUsIDIzMCwgMjQyLCA4NCwgMjM1LCAxNSwgNSwgMjI4LCAyMzUsIDg0LCAyMzUsIDE1LCA1LCAyNDIsIDE3MCwgODQsIAotICAgIDIzNSwgMTUsIDUsIDIzNCwgMjQsIDg0LCAyMzUsIDE1LCAyNDcsIDgsIDIzMywgMTQwLCA4NCwgMjM1LCAxNSwgNjUsIDExOCwgCi0gICAgODQsIDIzNSwgMTUsIDY1LCAxMTMsIDg0LCAyMzUsIDE1LCA2NSwgMjQ2LCAxNzksIDg0LCAyMzUsIDE1LCA2NSwgMjM1LCAKLSAgICA1MiwgODQsIDIzNSwgMTUsIDY1LCAyMzMsIDc1LCAxNDMsIDYsIDEsIDE4MiwgNzQsIDE0MywgNiwgMSwgMTgyLCA3MiwgCi0gICAgMTQzLCA2LCAxLCAxODIsIDU3LCAxNDMsIDYsIDEsIDE4MiwgMjUzLCAxMTEsIDE0MywgNiwgMSwgMTgyLCA3MywgMTQzLCA2LCAKLSAgICAxLCAxODIsIDI1MiwgMjIwLCAxNDMsIDYsIDEsIDI0MCwgMTI1LCA3NCwgMTQzLCA2LCAxLCAyNDAsIDEyNSwgNzIsIDE0MywgCi0gICAgNiwgMSwgMjQwLCAxMjUsIDU3LCAxNDMsIDYsIDEsIDI0MCwgMTI1LCAyNTMsIDExMSwgMTQzLCA2LCAxLCAyNDAsIDEyNSwgCi0gICAgNzMsIDE0MywgNiwgMSwgMjQwLCAxMjUsIDI1MiwgMjIwLCAxNDMsIDYsIDEsIDI1MywgMTE0LCAxNDMsIDYsIDEsIDI1NCwgCi0gICAgMSwgMTQzLCA2LCAxLCAyNTMsIDEwOSwgMTQzLCA2LCAxLCAyNDcsIDYyLCAxNDMsIDYsIDEsIDIxMiwgMTQzLCA2LCAxLCAKLSAgICAyNDcsIDQ2LCAxNDMsIDYsIDEsIDI0NywgMjgsIDE0MywgNiwgMSwgMjQ3LCAxMDYsIDE0MywgNiwgMSwgMjQ3LCAzMCwgCi0gICAgMTQzLCA2LCAxLCAyNDAsIDI0NiwgMTQzLCA2LCAxLCAyNDcsIDM4LCAxNDMsIDYsIDEsIDI0OCwgNzksIDE0MywgNiwgMSwgCi0gICAgMjQ4LCA0NSwgMTQzLCA2LCAxLCAyNTMsIDEyNCwgMTQzLCA2LCAxLCAyNDcsIDExMywgMTQzLCA2LCAxLCAyNDYsIDI0MiwgCi0gICAgMTQzLCA2LCAxLCAyNDAsIDIzOCwgMTQzLCA2LCAxLCAyNTMsIDExNiwgMTQzLCA2LCAxLCAyNDcsIDY0LCAxNDMsIDYsIDEsIAotICAgIDI0NiwgMjMyLCAxNDMsIDYsIDEsIDI0MSwgMjUsIDE0MywgNiwgMSwgMjUzLCA5OSwgMTQzLCA2LCAxLCAyNTMsIDU4LCAKLSAgICAxNDMsIDYsIDEsIDI1MywgODcsIDE0MywgNiwgMSwgMjUyLCAyMzIsIDE0MywgNiwgMSwgMjQ3LCAwLCAxNDMsIDYsIDEsIAotICAgIDI1MywgMTU3LCAxNDMsIDYsIDEsIDI1MywgMjIwLCAxNDMsIDMsIDEsIDE4MiwgNzQsIDE0MywgMywgMSwgMTgyLCA3MiwgCi0gICAgMTQzLCAzLCAxLCAxODIsIDU3LCAxNDMsIDMsIDEsIDE4MiwgMjUzLCAxMTEsIDE0MywgMywgMSwgMTgyLCA3MywgMTQzLCAzLCAKLSAgICAxLCAxODIsIDI1MiwgMjIwLCAxNDMsIDMsIDEsIDI0MCwgMTI1LCA3NCwgMTQzLCAzLCAxLCAyNDAsIDEyNSwgNzIsIDE0MywgCi0gICAgMywgMSwgMjQwLCAxMjUsIDU3LCAxNDMsIDMsIDEsIDI0MCwgMTI1LCAyNTMsIDExMSwgMTQzLCAzLCAxLCAyNDAsIDEyNSwgCi0gICAgNzMsIDE0MywgMywgMSwgMjQwLCAxMjUsIDI1MiwgMjIwLCAxNDMsIDMsIDEsIDI1MywgMTE0LCAxNDMsIDMsIDEsIDI1NCwgCi0gICAgMSwgMTQzLCAzLCAxLCAyNTMsIDEwOSwgMTQzLCAzLCAxLCAyNDcsIDYyLCAxNDMsIDMsIDEsIDIxMiwgMTQzLCAzLCAxLCAKLSAgICAyNDcsIDQ2LCAxNDMsIDMsIDEsIDI0NywgMjgsIDE0MywgMywgMSwgMjQ3LCAxMDYsIDE0MywgMywgMSwgMjQ3LCAzMCwgCi0gICAgMTQzLCAzLCAxLCAyNDAsIDI0NiwgMTQzLCAzLCAxLCAyNDcsIDM4LCAxNDMsIDMsIDEsIDI0OCwgNzksIDE0MywgMywgMSwgCi0gICAgMjQ4LCA0NSwgMTQzLCAzLCAxLCAyNTMsIDEyNCwgMTQzLCAzLCAxLCAyNDcsIDExMywgMTQzLCAzLCAxLCAyNDYsIDI0MiwgCi0gICAgMTQzLCAzLCAxLCAyNDAsIDIzOCwgMTQzLCAzLCAxLCAyNTMsIDExNiwgMTQzLCAzLCAxLCAyNDcsIDY0LCAxNDMsIDMsIDEsIAotICAgIDI0NiwgMjMyLCAxNDMsIDMsIDEsIDI0MSwgMjUsIDE0MywgMywgMSwgMjUzLCA5OSwgMTQzLCAzLCAxLCAyNTMsIDU4LCAKLSAgICAxNDMsIDMsIDEsIDI1MywgODcsIDE0MywgMywgMSwgMjUyLCAyMzIsIDE0MywgMywgMSwgMjQ3LCAwLCAxNDMsIDMsIDEsIAotICAgIDI1MywgMTU3LCAxNDMsIDMsIDEsIDI1MywgMjIwLCAyMzUsIDE3LCAxLCAyNDUsIDYzLCAyMzUsIDE3LCAxLCAyNDgsIDE3OSwgCi0gICAgMjM1LCAxNywgMSwgMjQ0LCA1NywgMjM1LCAxNywgMSwgMjQ3LCAxNDAsIDIzNSwgMTcsIDEsIDI0MCwgMzYsIDIzNSwgMTcsIAotICAgIDEsIDI1MywgMjUsIDIzNSwgMTcsIDEsIDI0NSwgMjI3LCAyMzUsIDE3LCAxLCAyMzYsIDI5LCAyMzUsIDE3LCAxLCAyNTIsIAotICAgIDE0NiwgMjM1LCAxNywgMSwgMjQzLCAyMzcsIDIzNSwgMTcsIDEsIDI0OSwgMTE3LCAyMzUsIDE3LCAxLCAyNDMsIDUyLCAKLSAgICAyMzUsIDE3LCAxLCAyNTAsIDExLCAyMzUsIDE3LCAxLCAyNTIsIDgzLCAyMzUsIDE3LCAxLCAyNDUsIDI0NSwgMjM1LCAxNywgCi0gICAgMSwgMjQ4LCAyMTAsIDIzNSwgMTcsIDEsIDIzMywgMjE4LCAyMzUsIDE3LCAxLCAyMzksIDUyLCAyMzUsIDE3LCAxLCAyNTIsIAotICAgIDEwMiwgMjM1LCAxNywgMSwgMjM5LCAxLCAyMzUsIDE3LCAxLCAyNDQsIDEwNiwgMjM1LCAxNywgMSwgMjQ0LCAxNDYsIDIzNSwgCi0gICAgMTcsIDEsIDI1NCwgNjcsIDIzNSwgMTcsIDEsIDI0OSwgMjI1LCAyMzUsIDE3LCAxLCAyNDYsIDE3NywgMjM1LCAxNywgMSwgCi0gICAgMjQ4LCAyMzAsIDIzNSwgMTcsIDEsIDI1MywgMTA2LCAyMzUsIDE3LCAxLCAyNDIsIDI2LCAyMzUsIDE3LCAxLCAyNDcsIAotICAgIDE4NiwgMjM1LCAxNywgMSwgMjUzLCAxMTEsIDIzNSwgMTcsIDEsIDI0NSwgMTE4LCAyMzUsIDE3LCAxLCAyNDYsIDE5NSwgCi0gICAgMjM1LCAxNywgMSwgMjQ3LCAxMzYsIDIzNSwgMTcsIDEsIDI0OCwgMjMxLCAyMzUsIDE3LCAxLCAyNDgsIDY2LCAyMzUsIDE3LCAKLSAgICAxLCAyNTMsIDE5LCAyMzUsIDE3LCAxLCAyNTEsIDk0LCAyMzUsIDE3LCAxLCAyNDUsIDU2LCAyMzUsIDE3LCAxLCAyNDgsIAotICAgIDEyMSwgMjM1LCAxNywgMSwgMjQ4LCAyNDIsIDIzNSwgMTcsIDEsIDI0OCwgMjM5LCAyMzUsIDE3LCAxLCAyNTMsIDgxLCAKLSAgICAyMzUsIDE3LCAxLCAyNDgsIDIzMiwgMjM1LCAxNywgMSwgMjQ4LCAzNCwgMjM1LCAxNywgMSwgMjM4LCAxMDYsIDIzNSwgMTcsIAotICAgIDEsIDI0NywgMTM1LCAyMzUsIDE3LCAxLCAyNTAsIDExMywgMjM1LCAxNywgMSwgMjUyLCAxNDcsIDIzNSwgMjEsIDEsIDI0MCwgCi0gICAgMTc0LCAyMzUsIDIxLCAxLCAyNTIsIDIxMSwgMjM1LCAyMSwgMSwgMjUyLCAyMDIsIDIzNSwgMjEsIDEsIDI1MiwgMjEzLCAKLSAgICAyMzUsIDIxLCAxLCAyNTMsIDgzLCAyMzUsIDIxLCAxLCAyNDYsIDE3OCwgMjM1LCAyMSwgMSwgMjQzLCA1NCwgMjM1LCAyMSwgCi0gICAgMSwgMjA4LCAyMzUsIDIxLCAxLCAyNTIsIDIwNCwgMjM1LCAyMSwgMSwgMjM5LCAyNDgsIDIzNSwgMjEsIDEsIDI0NiwgMTk2LCAKLSAgICAyMzUsIDIxLCAxLCAyNDIsIDIzNSwgMjM1LCAyMSwgMSwgMjUyLCAyMDUsIDIzNSwgMjEsIDEsIDI1MiwgMjM0LCAyMzUsIAotICAgIDIxLCAxLCAyNDUsIDg5LCAyMzUsIDIxLCAxLCAyNDQsIDQzLCAyMzUsIDIxLCAxLCAyNDQsIDg0LCAyMzUsIDIxLCAxLCAKLSAgICAyNDQsIDE0NSwgMjM1LCAyMSwgMSwgMjQ1LCAxNywgMjM1LCAyMSwgMSwgMjQ3LCA2MCwgMjM1LCAyMSwgMSwgMTU0LCAyMzUsIAotICAgIDIxLCAxLCAxOTEsIDIzNSwgMjEsIDEsIDU3LCAyMzUsIDIxLCAxLCA3MiwgMjM1LCAyMSwgMSwgNzQsIDIzNSwgMjEsIDEsIAotICAgIDczLCAyMzUsIDIxLCAxLCA2NiwgMjM1LCAyMSwgMSwgMjUyLCAyMTIsIDIzNSwgMjEsIDEsIDI1MiwgMjMxLCAyMzUsIDIxLCAKLSAgICAxLCAyNTIsIDIyMCwgMjM1LCAyMSwgMjEsIDI0MCwgMTI2LCAyMzUsIDIxLCAyMSwgMTE4LCAyMzUsIDIxLCAyMSwgMTEzLCAKLSAgICAyMzUsIDIxLCAyMSwgMTY2LCAyMzUsIDIxLCAyMSwgMTU4LCAyMzUsIDIxLCAyMSwgMTczLCAyMzUsIDIxLCAyMSwgMTgzLCAKLSAgICAyMzUsIDIxLCAyMSwgMTk0LCAyMzUsIDIxLCAyMSwgMTg3LCAyMzUsIDIxLCAyMSwgMTkyLCAyMTgsIDQsIDU3LCAyMTgsIDQsIAotICAgIDcyLCAyMTgsIDQsIDc0LCAyMTgsIDQsIDczLCAyMTgsIDQsIDY2LCAyMTgsIDQsIDI1MiwgMjEzLCAyMTgsIDQsIDI1MywgCi0gICAgOTAsIDIxOCwgNCwgMTc3LCAyMTgsIDQsIDI1MywgNiwgMjE4LCA0LCAyNTMsIDcsIDIxOCwgNCwgMjUzLCAzMywgMjE4LCA0LCAKLSAgICAyNTMsIDM0LCAyMTgsIDQsIDI1MiwgMjAwLCAyMTgsIDQsIDI1MywgODAsIDIxOCwgNCwgMjUzLCA0MiwgMjE4LCA0LCAyNTMsIAotICAgIDQ5LCAyMTgsIDQsIDI1MywgMjIsIDIxOCwgNCwgMTk4LCAyMTgsIDQsIDI1MywgMTMsIDIxOCwgNCwgMjUyLCAyMzksIDIxOCwgCi0gICAgNCwgMjUzLCAxNCwgMjE4LCA0LCAyNTIsIDIyOSwgMjE4LCA0LCAyNTIsIDIwMSwgMjE4LCA0LCAyNTIsIDI0NywgMjE4LCA0LCAKLSAgICAyNTIsIDI0OCwgMjE4LCA0LCAyNTMsIDgsIDIxOCwgNCwgMjUyLCAyMjcsIDIxOCwgNCwgMjEzLCAyMTgsIDQsIDI1MywgMCwgCi0gICAgMjE4LCA0LCAyNTIsIDIyMywgMjE4LCA0LCAyNTMsIDUwLCAyMTgsIDQsIDI1MywgODIsIDIxOCwgNCwgMjA4LCAyMTgsIDQsIAotICAgIDI1MywgMzYsIDIxOCwgNCwgMjUzLCAzNywgMjE4LCA0LCAyNTIsIDI0NiwgMjE4LCA0LCAyNTMsIDMsIDIxOCwgNCwgMjUyLCAKLSAgICAyMDQsIDIxOCwgNCwgMjUzLCA1MiwgMjE4LCA0LCAyNTMsIDI0LCAyMTgsIDQsIDI1MywgMjUsIDIxOCwgNCwgMjUzLCAyNiwgCi0gICAgMjE4LCA0LCAyNTIsIDIwMiwgMjE4LCA0LCAyNTMsIDksIDIxOCwgNCwgMjUzLCA0NCwgMjE4LCA0LCA5NiwgMjE4LCA0LCAKLSAgICAyNTMsIDE4LCAyMTgsIDQsIDI1MiwgMjA4LCAyMTgsIDQsIDI1MiwgMjUwLCAyMTgsIDQsIDI1MywgMjcsIDIxOCwgNCwgCi0gICAgMjUzLCAxMCwgMjE4LCA0LCAyNTMsIDgzLCAyMTgsIDQsIDI1NCwgMTcsIDIxOCwgNCwgMjUyLCAyMjYsIDIxOCwgNCwgMjUzLCAKLSAgICA2NSwgMjMwLCAxMjcsIDEsIDI0OCwgMjMzLCAyMzAsIDEyNywgMSwgMjQ3LCAyNTMsIDIzMCwgMTI3LCAxLCAyNDMsIDExNCwgCi0gICAgMjMwLCAxMjcsIDEsIDI0MywgNTcsIDIzMCwgMTI3LCAxLCAyNTIsIDI1MiwgMjMwLCAxMjcsIDEsIDI0NywgMjI1LCAyMzAsIAotICAgIDEyNywgMSwgMjUyLCAxNjgsIDIzMCwgMTI3LCAxLCAyNDgsIDYwLCAyMzAsIDEyNywgMSwgMjQ3LCAyMTAsIDIzMCwgMTI3LCAKLSAgICAxLCAyNDcsIDYzLCAyMzAsIDEyNywgMSwgMjQ3LCAxLCAyMzAsIDEyNywgMSwgMjQ0LCA4OCwgMjMwLCAxMjcsIDEsIDI0NywgCi0gICAgNDEsIDIzMCwgMTI3LCAxLCAyNDYsIDE5NSwgMjMwLCAxMjcsIDEsIDI0NSwgMTU2LCAyMzAsIDEyNywgMSwgMjQ2LCAyMjQsIAotICAgIDIzMCwgMTI3LCAxLCAyNTMsIDAsIDIzMCwgMTI3LCAxLCAyNDEsIDIyOSwgMjMwLCAxMjcsIDEsIDI0OCwgMTQyLCAyMzAsIAotICAgIDEyNywgMSwgMjQ1LCAxMjAsIDIzMCwgMTI3LCAxLCAyNDAsIDIwMywgMjMwLCAxMjcsIDEsIDI0NiwgMjEyLCAyMzAsIDEyNywgCi0gICAgNjUsIDExOCwgMjMwLCAxMjcsIDY1LCAyNDYsIDE3OSwgMjMwLCAxMjcsIDY1LCAyMzUsIDUyLCAyMzAsIDEyNywgNjUsIAotICAgIDE2OCwgMjMzLCA3NSwgMjMwLCAxMjcsIDI0NywgOCwgMjMwLCAxMzEsIDIzNywgNTUsIDEsIDU3LCAyMzcsIDU1LCAxLCAKLSAgICAyNTQsIDE4NSwgMjM3LCA1NSwgMSwgMjE0LCAyMzcsIDU1LCAxLCAyMjIsIDIyMiwgMjM3LCA1NSwgMSwgNzIsIDIzNywgNTUsIAotICAgIDEsIDE5NiwgMjM3LCA1NSwgMSwgNzQsIDIzNywgNTUsIDEsIDI1NCwgMTkwLCAyMzcsIDU1LCAxLCAyNTQsIDE4NiwgMjM3LCAKLSAgICA1NSwgMSwgMTQ5LCAyMzcsIDU1LCAxLCAxODUsIDIzNywgNTUsIDEsIDE5OSwgMjM3LCA1NSwgMSwgNzMsIDIzNywgNTUsIDEsIAotICAgIDE0NiwgMjM3LCA1NSwgMSwgMjUzLCAxOTQsIDIzNywgNTUsIDEsIDI1NCwgMTgzLCAyMzcsIDU1LCAxLCA2NiwgMjM3LCA1NSwgCi0gICAgMSwgMjU0LCAxOTEsIDIzNywgNTUsIDEsIDI1NCwgMTk2LCAyMzcsIDU1LCAxLCAxOTMsIDIzNywgNTUsIDEsIDI1MywgMTk2LCAKLSAgICAyMzcsIDU1LCAxLCAyNTMsIDUsIDIzNywgNTUsIDEsIDI1MiwgMjMyLCAyMzcsIDU1LCAxLCAyNTMsIDE4NiwgMjM3LCA1NSwgCi0gICAgMSwgMjUzLCAxNTUsIDIzNywgNTUsIDEsIDI1NCwgMTk0LCAyMzcsIDU1LCAyMzAsIDE2MCwgNzYsIDE3OCwgMSwgNTcsIAotICAgIDE3OCwgMzEsIDUsIDc0LCAxNzgsIDMxLCA1LCA2NiwgMTc4LCAzMSwgNSwgMTUzLCAxNDYsIDE3OCwgMzEsIDUsIDcyLCAKLSAgICAxNzgsIDMxLCA1LCA3MywgMTc4LCAzMSwgMjM3LCAxMDEsIDc2LCAxNzgsIDUsIDQ3LCAyNDYsIDE3NCwgNTEsIDE3OCwgNSwgCi0gICAgMjMxLCAyMDYsIDE3OCwgNSwgMjMzLCAxMDIsIDE3OCwgMSwgMTc3LCAxNzgsIDEsIDI0NiwgMTc4LCAxNzgsIDEsIDI1MiwgCi0gICAgMjA1LCAxNzgsIDEsIDI0NiwgMjAyLCAxNzgsIDEsIDI1MiwgMjE1LCAxNzgsIDEsIDI0NiwgMTc2LCAxNzgsIDEsIDI1MiwgCi0gICAgMjEzLCAxNzgsIDEsIDI0NiwgMTgxLCAxNzgsIDEsIDI0NiwgMTkxLCAxNzgsIDEsIDI0MCwgMTUwLCAxNzgsIDEsIDI0NiwgCi0gICAgMTkyLCAxNzgsIDEsIDI0MCwgMTY2LCAxNzgsIDEsIDI0NiwgMjAzLCAxNzgsIDEsIDI1MiwgMjAyLCAxNzgsIDEsIDI0NiwgCi0gICAgMTczLCAxNzgsIDEsIDI1MiwgMjAzLCAxNzgsIDEsIDI0NiwgMTk2LCAxNzgsIDEsIDI1MiwgMjAxLCAxNzgsIDEsIDIxMywgCi0gICAgMTc4LCAxLCAyNDYsIDE4MiwgMTc4LCAxLCAyNTIsIDIxMSwgMTc4LCAxLCAyNDYsIDE5OSwgMTc4LCAxLCAxOTgsIDE3OCwgCi0gICAgMSwgMTkxLCAxNzgsIDEsIDIwOCwgMTc4LCAxLCAyNTIsIDIwMCwgMTc4LCAxLCAyNTIsIDI0MywgMTc4LCAxLCAyNDYsIAotICAgIDE2NSwgMTc4LCAxLCAyNDYsIDE5MCwgMTc4LCAxLCAyNTIsIDIwNCwgMTc4LCAxLCAyNTIsIDIyNiwgMTc4LCAxLCAxNTQsIAotICAgIDE3OCwgMSwgMjQ3LCAxNjEsIDE3OCwgMSwgMjQwLCA1MiwgMTc4LCA1LCAyNTIsIDIxOSwgNDYsIDE3OCwgNSwgMjM4LCAKLSAgICAxMzgsIDE3OCwgNSwgNTYsIDUxLCAxNzgsIDIzNSwgNDMsIDE3OCwgMjEsIDExOCwgMTc4LCAyMSwgMTEzLCAxNzgsIDIxLCAKLSAgICAxNjYsIDE3OCwgMjEsIDE1OCwgMTc4LCA2NSwgMjQ2LCAxNzksIDE3OCwgNjUsIDIzNSwgNTIsIDE3OCwgNjUsIDE2OCwgCi0gICAgMjMzLCA3NSwgMTc4LCA2NSwgMTY4LCAyMzEsIDE5NiwgMTc4LCAyMjksIDE2MSwgMjQ2LCAxNjQsIDE3OCwgMjI5LCAxNjEsIAotICAgIDMsIDIzNSwgMjAsIDE3OCwgMjI5LCAxNjEsIDIzNSwgMjAsIDE3OCwgMjI5LCAxNjEsIDIzNCwgMzksIDEyNSwgMTc4LCAKLSAgICAyMjksIDE2MSwgMjMyLCAyMjcsIDE3OCwgMjI5LCAxNjEsIDIzOSwgODksIDE3OCwgMjI5LCAxNjEsIDIzNywgMTA5LCAxNzgsIAotICAgIDIyOSwgMTYxLCA0NywgMjM3LCAxMDksIDE3OCwgMjI5LCAxNjEsIDIzOSwgODcsIDEzLCA1LCA1NywgMTMsIDUsIDEwMiwgCi0gICAgMjQsIDU3LCAxMywgNSwgMTAyLCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAxMDIsIDI0LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCAKLSAgICA1LCAxMDIsIDI0LCAxNTQsIDEzLCA1LCAxMDIsIDI0LCAyNDYsIDIzNCwgMTMsIDUsIDEwMiwgMjQsIDI0MCwgMTcxLCAyNDAsIAotICAgIDEzMCwgMTMsIDUsIDEwMiwgMjQsIDI0MCwgMjMwLCAxMywgNSwgMTAyLCAyNCwgMjQ3LCAyMDAsIDEzLCA1LCAyNTMsIDE2NSwgCi0gICAgMTMsIDUsIDI1MywgMTY2LCAxMywgNSwgMjU0LCAyMDIsIDI0LCAyNDAsIDIwNCwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMjQ3LCAKLSAgICAzMSwgMjQwLCAxMzAsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDI0NywgMTIsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDI0NiwgCi0gICAgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMTU0LCAxMywgNSwgMjU0LCAyMDIsIDI0LCAyNTMsIDMyLCAKLSAgICAyNDAsIDEzMCwgMTMsIDUsIDI1NCwgMjAyLCAyNCwgMjQxLCAxNjIsIDEzLCA1LCAyNTQsIDIwMiwgMjQsIDIzNywgMTYwLCAKLSAgICAxMywgNSwgMjU0LCAyMDIsIDI0LCAyMzgsIDUzLCAxMywgNSwgMjU0LCAyMDIsIDI0LCA5NywgNzksIDk3LCA3OSwgNjYsIAotICAgIDEzLCA1LCAyNTQsIDIwMiwgMjQwLCAxMzAsIDEzLCA1LCAyNDgsIDIyNywgMTMsIDUsIDI1MywgMTEsIDI0LCAyMzcsIDE3MiwgCi0gICAgMTMsIDUsIDI1MywgMTEsIDI0LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAyNTMsIDExLCAyNCwgMjU0LCAyMDYsIDc5LCAKLSAgICAyNTIsIDIzMiwgMTMsIDUsIDI1MywgMTEsIDI0LCAyNDEsIDY4LCAxMywgNSwgMjUzLCAxMSwgMjQsIDI0MCwgMTg3LCAxMywgCi0gICAgNSwgMjUzLCAyMDYsIDEzLCA1LCAyNTQsIDI1LCAxMywgNSwgMjU1LCAxLCAyNCwgMjM3LCAxODEsIDEzLCA1LCAyNTUsIDEsIAotICAgIDI0LCAyNDEsIDcxLCA3OSwgMjQwLCAyMDgsIDEzLCA1LCAyNTMsIDExMiwgMTMsIDUsIDI1NCwgMjA5LCAyNCwgMjUzLCAKLSAgICAxMTIsIDEzLCA1LCAyNTQsIDIwOSwgMjQsIDI0MSwgMTIwLCAxMywgNSwgMjU0LCAyMDksIDI0LCAyNDAsIDIwOCwgMTMsIDUsIAotICAgIDI1NCwgMjA5LCAyNCwgMTU0LCAxMywgNSwgMjU0LCAyMDksIDI0LCAyNDAsIDI1NCwgMTMsIDUsIDI1NCwgMjA5LCAyNCwgCi0gICAgMjUzLCA3LCAxMywgNSwgMjU0LCAyMDksIDI0LCAyNDYsIDE4NiwgMTMsIDUsIDI1NCwgMjA5LCAyNCwgMjQ2LCAyNDksIDEzLCAKLSAgICA1LCAyNDIsIDUyLCAxMywgNSwgMjM4LCA5MywgMTMsIDUsIDI0MSwgOTQsIDEzLCA1LCAyNDgsIDIzNCwgMjQsIDI0NiwgCi0gICAgMTg2LCAxMywgNSwgMjUzLCA1LCAxMywgNSwgMjU0LCAyMTYsIDEwNywgMjUzLCA1LCAxMywgNSwgMjU0LCAyMTYsIDE1MiwgCi0gICAgMjM3LCAxNjYsIDEzLCA1LCAyNTQsIDIxNiwgNzksIDI0NywgNDIsIDIzMywgMTE5LCAyNTQsIDIxNiwgNzksIDI0MSwgNTUsIAotICAgIDEzLCA1LCAyNTQsIDIxNiwgNzksIDI0NywgNDIsIDIzMywgOTEsIDEzLCA1LCAyMzgsIDk3LCAxMywgNSwgMjQyLCA2MCwgCi0gICAgMTMsIDUsIDI0MiwgNjIsIDEzLCA1LCAyNDgsIDIzNywgMjQsIDI0NiwgMjIwLCAxMywgNSwgMjM4LCAxMDMsIDEzLCA1LCAKLSAgICAyMzgsIDEwOCwgMTMsIDUsIDI0NiwgMTc3LCAxMywgNSwgMjUyLCAyNTQsIDI0OCwgMjA4LCAyNDAsIDEzMSwgMTMsIDUsIAotICAgIDI1MiwgMjU0LCAyNDgsIDc3LCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgMjU0LCAxMDcsIDI1MiwgMjU0LCAyNDcsIDExMSwgCi0gICAgMTA3LCAyNDcsIDExMSwgMjQ3LCAxMTEsIDEwNywgMjQ3LCAxMTEsIDI0NywgNDUsIDEzLCA1LCAyNTIsIDI1NCwgMTA3LCAKLSAgICAyNTIsIDI1NCwgMTA3LCAyNDYsIDE3NywgMTMsIDUsIDI1MiwgMjU0LCAxMDcsIDI1MiwgMjU0LCAxMDcsIDI1MiwgMjU0LCAKLSAgICAyMzMsIDc3LCAyNTIsIDI1NCwgMTA3LCAyNTIsIDI1NCwgMTA3LCAyNDYsIDE3NywgMTMsIDUsIDI0MCwgMjA0LCAxMywgNSwgCi0gICAgMjM1LCAxMDgsIDEzLCA1LCAyNTIsIDIxMSwgMTMsIDUsIDI0NiwgMjA2LCAxMywgNSwgMjQyLCAxNjksIDEzLCA1LCAyMzYsIAotICAgIDUsIDEzLCA1LCAyNDcsIDEyMCwgMTMsIDUsIDI1NCwgMzEsIDEwNywgMjQ3LCAxMjAsIDEzLCA1LCAyMzcsIDE3MiwgMTMsIAotICAgIDUsIDEyNSwgMTMsIDUsIDIzOCwgMTEwLCAxMywgNSwgMjUzLCAzMCwgMTMsIDUsIDI1NCwgMjM0LCAyNCwgNTcsIDEzLCA1LCAKLSAgICAyNTQsIDIzNCwgMjQsIDI0NiwgMTk3LCAxMywgNSwgMjU0LCAyMzQsIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIAotICAgIDI1MywgNDgsIDEzLCA1LCAyNTQsIDIxMCwgMTA3LCAyNTQsIDIxMCwgMjUzLCAxNjYsIDEzLCA1LCAyNTQsIDIxMCwgMTA3LCAKLSAgICAyNTQsIDIxMCwgMjUzLCAxMjEsIDEzLCA1LCAyNTQsIDIxMCwgMjMzLCA3NywgMjUzLCA0OCwgMTMsIDUsIDIzNywgMTk2LCAKLSAgICAxMywgNSwgMjQyLCAyMTgsIDEwNywgMjM3LCAxOTYsIDEzLCA1LCAyNDcsIDExLCAxMywgNSwgMjQyLCAyMjMsIDEzLCA1LCAKLSAgICAyNTIsIDIwMywgMTMsIDUsIDI0OCwgMTcsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDEwMiwgNzksIDI0MSwgNSwgCi0gICAgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQxLCA5NCwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjM3LCAKLSAgICAxNzIsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1MywgMzAsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIAotICAgIDI1MiwgMjA1LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNTQsIDI0OCwgNzksIDI0MSwgNSwgMTMsIDUsIDI1MiwgCi0gICAgMjM4LCAyMzcsIDU2LCAyNCwgMjUzLCAzOSwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQwLCAyNTAsIDEzLCA1LCAKLSAgICAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI0NiwgMjMzLCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAxNTQsIDEzLCAKLSAgICA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1MywgMTQ5LCAxMywgNSwgMjUyLCAyMzgsIDIzNywgNTYsIDI0LCAyNTUsIAotICAgIDMyLCA3OSwgMjUzLCAyMiwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQ3LCAxNiwgMTMsIDUsIDI1MiwgMjM4LCAKLSAgICAyMzcsIDU2LCAyNCwgMjUyLCAyMDAsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1MywgMjIsIDEzLCA1LCAyNTIsIAotICAgIDIzOCwgMjM3LCA1NiwgMjQsIDI1NCwgMjQwLCA3OSwgMjM4LCAyMywgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgCi0gICAgMjQ3LCAxOCwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjUyLCAyNDcsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCAKLSAgICA1NiwgMjQsIDI1NCwgMTI1LCA3OSwgMjQ3LCA0NSwgMTMsIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjUzLCAyNCwgMTMsIAotICAgIDUsIDI1MiwgMjM4LCAyMzcsIDU2LCAyNCwgMjQwLCAxODcsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI1NCwgCi0gICAgMjMyLCA3OSwgMjQwLCAyNTAsIDEzLCA1LCAyNTIsIDIzOCwgMjM3LCA1NiwgMjQsIDI0NiwgMjQ5LCAxMywgNSwgMjQ5LCAKLSAgICAxNzcsIDEzLCA1LCAyNDgsIDE5LCAxMywgNSwgMjM4LCAxNzAsIDEzLCA1LCAyMzgsIDE3MSwgMTMsIDUsIDI1MywgMTIsIAotICAgIDEzLCA1LCAyNDgsIDI3LCAxMywgNSwgMjQ5LCAxOTMsIDEzLCA1LCAyNTMsIDIxNSwgMjQsIDI0NiwgMTg2LCAxMywgNSwgCi0gICAgMjQxLCAxMjAsIDEzLCA1LCAyNDgsIDI4LCAxMywgNSwgMjU0LCA0MywgMjM3LCAxNTgsIDk3LCAyNDcsIDM2LCAyNDAsIAotICAgIDE1NiwgMTMsIDUsIDI0MCwgMTU2LCAxMywgNSwgMjUzLCAzMSwgMTMsIDUsIDI1NCwgMjQ3LCAxMDcsIDI1MywgMzEsIDEzLCAKLSAgICA1LCAyNTQsIDI0NywgMjQwLCAxMzAsIDEzLCA1LCAyNTQsIDI0NywgMjMzLCAxMzQsIDEzLCA1LCAyNDcsIDEzMiwgMTMsIDUsIAotICAgIDI1NCwgNDcsIDI0LCAyNDAsIDIyMiwgMTMsIDUsIDI0MywgODIsIDEzLCA1LCAyNDcsIDEzMywgMTMsIDUsIDIzOCwgMTk0LCAKLSAgICAxMywgNSwgMjQ5LCAyMDksIDEzLCA1LCAyNDgsIDMzLCAxMywgNSwgMjQzLCA4MywgMTMsIDUsIDI0NywgMzEsIDI0MCwgCi0gICAgMTMwLCAxMywgNSwgMjQ3LCAzMSwgMjQ3LCAzNiwgMjQwLCAxMzAsIDEzLCA1LCAyNDMsIDg0LCAxMywgNSwgMjQzLCA4NywgCi0gICAgMTMsIDUsIDcyLCAxMywgNSwgMTYxLCAyNCwgMjQ3LCA0NSwgMTMsIDUsIDE2MSwgMTA3LCAxNjEsIDI1MywgMjMsIDEwNywgCi0gICAgMjQ2LCAxOTUsIDEzLCA1LCAyNTMsIDIxOCwgMTMsIDUsIDI1NCwgMjE5LCAyNCwgMTAyLCA3OSwgMjU0LCAyMDQsIDc5LCAKLSAgICAyNTIsIDIwMywgMTMsIDUsIDI1NCwgMjE5LCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAyNTQsIDIxOSwgMjQsIDI1MiwgMjM5LCAKLSAgICAxMywgNSwgMjU0LCAyMTksIDI0LCAyNDcsIDYsIDEzLCA1LCAyNTQsIDIxOSwgMjQsIDI0NiwgMTg2LCAxMywgNSwgMjU0LCAKLSAgICAyMTksIDI0LCA2NiwgMTMsIDUsIDI0MywgOTMsIDEzLCA1LCAyNDMsIDk0LCAxMywgNSwgMjUzLCA1OCwgMTMsIDUsIDI1MiwgCi0gICAgMjMyLCAxMywgNSwgMjU0LCAxOTksIDI0LCAyNDAsIDI0OSwgMTMsIDUsIDI1NCwgMTk5LCAyNCwgMjQ2LCAyMDEsIDI0MCwgCi0gICAgMTMxLCAxMywgNSwgMjU0LCAxOTksIDI0LCAyNTMsIDEzLCAxMywgNSwgMjU0LCAxOTksIDIzMywgNzcsIDI1MiwgMjMyLCAKLSAgICAxMywgNSwgMjU0LCAxOTksIDIzMywgMTE5LCAyNTIsIDIzMiwgMTMsIDUsIDI1NCwgMTk5LCAyMzMsIDkxLCAxMywgNSwgCi0gICAgMjQzLCAxMDAsIDEzLCA1LCAyMzcsIDE4MSwgMTMsIDUsIDI0MCwgMjIyLCAxMywgNSwgMjQzLCAxMDQsIDEzLCA1LCAyNDYsIAotICAgIDE5MywgMjQsIDU3LCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAxMDIsIDc5LCAyNDcsIDIsIDEzLCA1LCAyNDYsIDE5MywgMjQsIAotICAgIDEwMiwgNzksIDI1MywgMTg0LCAyNCwgMjQ3LCAyLCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyNTMsIDUsIDEzLCA1LCAyNDYsIAotICAgIDE5MywgMjQsIDI0NiwgMjA2LCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyNDcsIDMxLCAyNDAsIDEzMCwgMTMsIDUsIDI0NiwgCi0gICAgMTkzLCAyNCwgMjQ3LCAzMSwgMjQ3LCAzNiwgMjQwLCAxMzAsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDE1NCwgMTMsIDUsIAotICAgIDI0NiwgMTkzLCAyNCwgMjU0LCAyMDQsIDI0MCwgMTMwLCAxMywgNSwgMjQ2LCAxOTMsIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgCi0gICAgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjM1LCA3NiwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjM3LCAxNTgsIDIzMywgOTEsIDEzLCAKLSAgICA1LCAyNDYsIDE5MywgMjQsIDI0NywgODQsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDI1MiwgMjAwLCAxMywgNSwgMjQ2LCAxOTMsIAotICAgIDI0LCAyNTMsIDE4NCwgMjQsIDI0NywgMiwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjUzLCA0MiwgMTMsIDUsIDI0NiwgMTkzLCAKLSAgICAyNCwgMjUzLCAyMiwgMTMsIDUsIDI0NiwgMTkzLCAyNCwgMjUzLCAxMDcsIDEzLCA1LCAyNDYsIDE5MywgMjQsIDI1MywgNDUsIAotICAgIDEzLCA1LCAyNTIsIDIwNSwgMTMsIDUsIDI1NCwgMjQ4LCAyNDAsIDEzMCwgMTMsIDUsIDI0OCwgNDMsIDEzLCA1LCAyNTIsIAotICAgIDE5OSwgMjQsIDEwMiwgNzksIDI1NCwgMjE4LCA3OSwgMTU0LCAxMywgNSwgMjUyLCAxOTksIDI0LCAxMDIsIDc5LCAxNTQsIAotICAgIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDEwMiwgNzksIDI0NiwgMjM0LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTMsIDExLCAKLSAgICAyNTIsIDEyLCA3OSwgMjQ3LCAyMDgsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgNSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgCi0gICAgMjQ2LCAxNzcsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgMjQzLCA3OSwgMjQ3LCAxMiwgMTMsIDUsIDI1MiwgMTk5LCAKLSAgICAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MiwgMjE5LCA3OSwgMjA4LCAxMywgNSwgMjUyLCAxOTksIAotICAgIDI0LCAyNDcsIDExLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTMsIDIwOSwgNzksIDIwOCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgCi0gICAgMjUyLCAyMDMsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgMTIsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1MywgMjE1LCAKLSAgICAyNCwgMjQ2LCAxODYsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgMTMyLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTMsIAotICAgIDU4LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTQsIDIxMSwgNzksIDI1MiwgMjAwLCAxMywgNSwgMjUyLCAxOTksIDI0LCAKLSAgICAyNTIsIDIzMiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjU0LCAxOTksIDI0LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAKLSAgICAyNTIsIDE5OSwgMjQsIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAKLSAgICAyNTIsIDE5OSwgMjQsIDI1MywgMzksIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgNzgsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIAotICAgIDI1MywgMTgwLCA3OSwgNTcsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0OCwgNTQsIDc5LCAyNTMsIDI2LCAxMywgNSwgMjUyLCAKLSAgICAxOTksIDI0LCAyNTQsIDIwNCwgNzksIDI1NCwgMjQwLCA3OSwgMjQwLCAyMjIsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgCi0gICAgODAsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1NCwgNjUsIDc5LCAyNTIsIDIwMCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjU0LCAKLSAgICAyMDEsIDc5LCAyNTMsIDQyLCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNDEsIDE1OCwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgCi0gICAgMjUzLCAzMiwgMjQwLCAxMzAsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI1NCwgNzEsIDc5LCAyNTUsIDMwLCA3OSwgMjQ2LCAKLSAgICAxNzcsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgMTYsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDIzNSwgNzYsIDEzLCA1LCAKLSAgICAyNTIsIDE5OSwgMjQsIDI0NywgMTU5LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTQsIDgxLCA3OSwgMjQ3LCAyLCAxMywgNSwgCi0gICAgMjUyLCAxOTksIDI0LCAyNTQsIDg2LCA3OSwgMjUzLCA1LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTIsIDIwMCwgMTMsIDUsIAotICAgIDI1MiwgMTk5LCAyNCwgMjU0LCAyMDYsIDc5LCAyNTIsIDIzMiwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjUyLCAyMzksIDEzLCAKLSAgICA1LCAyNTIsIDE5OSwgMjQsIDI0NiwgMTk1LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTMsIDIzLCAxMDcsIDI0NiwgMTk1LCAKLSAgICAxMywgNSwgMjUyLCAxOTksIDI0LCAyMTMsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgNiwgMTMsIDUsIDI1MiwgMTk5LCAKLSAgICAyNCwgMjQ3LCAxMDEsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NiwgMTg2LCAxMywgNSwgMjUyLCAxOTksIDI0LCAyNTMsIAotICAgIDY0LCA3OSwgMjQ3LCAxMTIsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0MSwgMTUsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0NywgCi0gICAgMjEsIDEzLCA1LCAyNTIsIDE5OSwgMjQsIDI0MCwgMTg3LCAxMywgNSwgMjUyLCAxOTksIDI0LCA2NiwgMTMsIDUsIDI1MiwgCi0gICAgMTk5LCAyNCwgMjUzLCA0NSwgMTMsIDUsIDI1MiwgMTk5LCAyNCwgMjU0LCAyMDgsIDc5LCAyNTMsIDMxLCAxMywgNSwgMjUyLCAKLSAgICAxOTksIDEwNywgMjQ4LCA0MywgMTMsIDUsIDI0MSwgMTM2LCAxMywgNSwgMjUwLCA5LCAyMzMsIDc3LCAyNDEsIDEzNiwgMTMsIAotICAgIDUsIDI0OCwgNDQsIDEzLCA1LCAyNTMsIDg5LCAxMDcsIDI1MywgODksIDI1MywgNzUsIDEwNywgMjQ2LCAxOTcsIDEzLCA1LCAKLSAgICAyNDcsIDEyLCAxMywgNSwgMjUzLCAxNzksIDI1MywgODksIDEwNywgMjUzLCA4OSwgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgCi0gICAgMTMsIDUsIDIzOCwgMjMwLCAxMywgNSwgMjUwLCAxMiwgMTMsIDUsIDI0NywgMzIsIDEzLCA1LCAyNDAsIDI0OSwgMTMsIDUsIAotICAgIDI0NiwgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI0NiwgMjAxLCAxMDcsIDI0MCwgMjQ5LCAxMywgNSwgMjQ2LCAyMDEsIDIzMywgCi0gICAgNzcsIDI0MCwgMjQ5LCAxMywgNSwgMjQ2LCAxOTcsIDEzLCA1LCAyNDMsIDExNSwgMTMsIDUsIDIzNiwgODksIDEzLCA1LCAKLSAgICAyMzQsIDExMSwgMTMsIDUsIDIzNiwgOTMsIDI0LCAyNDYsIDIyMCwgMTMsIDUsIDI1MywgMzksIDEzLCA1LCAyNTQsIDIyOCwgCi0gICAgMjQsIDcyLCAxMywgNSwgMjU0LCAyMjgsIDI0LCA2NiwgMTMsIDUsIDI1NCwgMjI4LCAyMzMsIDc3LCAyNTMsIDM5LCAxMywgCi0gICAgNSwgMjQ3LCA3OCwgMTMsIDUsIDI1MywgMTgwLCAxMDcsIDI0NywgNzgsIDEzLCA1LCAyNTMsIDE4MCwgMjMzLCA3NywgMjQ3LCAKLSAgICA3OCwgMTMsIDUsIDIzOCwgMjQ2LCAxMywgNSwgMjQwLCAyNTAsIDEzLCA1LCAyNDgsIDU0LCAyNDAsIDEzMCwgMTMsIDUsIAotICAgIDI0MywgMTUwLCAxMywgNSwgMjQ3LCAzMywgMjQsIDEwMiwgNzksIDI0NiwgMjM0LCAxMywgNSwgMjQ3LCAzMywgMjQsIDI0NiwgCi0gICAgMjAxLCAyNDAsIDEzMSwgMTMsIDUsIDI0NywgMzMsIDI0LCAyNDYsIDIzNCwgMTMsIDUsIDI0NywgMzMsIDI0LCAyNTQsIAotICAgIDI0MCwgNzksIDI0NiwgMjM0LCAxMywgNSwgMjQ3LCAzMywgMjQsIDIxMywgMTMsIDUsIDIzOCwgMjQ5LCAxMywgNSwgMjQwLCAKLSAgICAyMDgsIDEzLCA1LCAyNDYsIDI0MywgMjMzLCA3NywgMjQwLCAyMDgsIDEzLCA1LCAyNDYsIDI0MywgMjQsIDI0NiwgMjA2LCAKLSAgICAxMywgNSwgMjQ2LCAyNDMsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDI0NiwgMjQzLCAyNDAsIDEzMSwgMTMsIDUsIDI1MywgNDAsIAotICAgIDEzLCA1LCAyNTUsIDI4LCAyMzMsIDc3LCAyNTMsIDQwLCAxMywgNSwgMjUwLCA0MywgMTMsIDUsIDI1MywgMTI2LCAyNCwgCi0gICAgMjQ3LCAxNiwgMTMsIDUsIDI1MywgMTI2LCAyNCwgMjUzLCAyMzcsIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIAotICAgIDI1MywgMTI2LCAyNCwgMjQ2LCAxOTUsIDEzLCA1LCAyNTMsIDEyNiwgMjQsIDI1MywgMTkyLCA3OSwgMjQxLCAyMCwgMTMsIAotICAgIDUsIDI1MywgMTI2LCAyNDAsIDEzMCwgMTMsIDUsIDI0NiwgMjMzLCAxMywgNSwgMjUzLCAxMjcsIDI0LCAxMDIsIDc5LCAKLSAgICAyNDYsIDIyMCwgMTMsIDUsIDI1MywgMTI3LCAyNCwgMjQ2LCAyMjAsIDEzLCA1LCAyNTMsIDEyNywgMTA3LCAyNTMsIDEyNywgCi0gICAgMjM3LCAxODUsIDEzLCA1LCAyNTAsIDQ0LCAxMywgNSwgMjUwLCA0NSwgMTMsIDUsIDI1NCwgNjIsIDI0LCAyNDYsIDE4NiwgCi0gICAgMTMsIDUsIDI0OCwgNTcsIDEzLCA1LCAyNDEsIDE0NywgMTMsIDUsIDIzOCwgMjU1LCAxMywgNSwgMjM2LCAxMDAsIDEzLCA1LCAKLSAgICAxNTQsIDEzLCA1LCAyNTQsIDIwNCwgMjQwLCAxMzEsIDEzLCA1LCAyNTQsIDIwNCwgMjQwLCAxMzAsIDEzLCA1LCAyNDcsIAotICAgIDgwLCAxMywgNSwgMjUzLCA0MSwgMTMsIDUsIDI1NCwgMjAxLCAyNCwgMjQ2LCAxNzcsIDEzLCA1LCAyNTQsIDIwMSwgMjQsIAotICAgIDI0MCwgMjA0LCAxMywgNSwgMjU0LCAyMDEsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI1NCwgMjAxLCAyNCwgMjQwLCAxNTYsIAotICAgIDEzLCA1LCAyNTQsIDIwMSwgMjQsIDI0OCwgNDQsIDEzLCA1LCAyNTQsIDIwMSwgMjQsIDI0NywgMTYwLCAxMywgNSwgMjU0LCAKLSAgICAyMDEsIDI0LCAyNDYsIDE5NSwgMTMsIDUsIDI1NCwgMjAxLCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAyNTQsIDIwMSwgMjQsIAotICAgIDY2LCAxMywgNSwgMjUzLCA1OSwgMTMsIDUsIDI0MSwgMTU4LCAxMywgNSwgMjQ3LCAzNywgMjQsIDI1MywgNSwgMTMsIDUsIAotICAgIDI0NywgMzcsIDI0LCAyNDcsIDgwLCAxMywgNSwgMjQ3LCAzNywgMjQsIDIzNSwgNzYsIDEzLCA1LCAyNDcsIDM3LCAyNCwgCi0gICAgMjQxLCA0NywgMTMsIDUsIDI0NywgMzcsIDI0LCAyNTMsIDQ1LCAxMywgNSwgMjQzLCAyMzUsIDEzLCA1LCA3NCwgMTMsIDUsIAotICAgIDI1NSwgNTUsIDU3LCAxMywgNSwgMjUzLCAyMjksIDEzLCA1LCAyNDQsIDIsIDEzLCA1LCAyNDcsIDgyLCAxMDcsIDI0NywgCi0gICAgODIsIDI0NywgMTEsIDEzLCA1LCAyNDcsIDgyLCAxMDcsIDI0NywgODIsIDIzMywgOTEsIDEzLCA1LCAyNTQsIDY4LCAxMywgCi0gICAgNSwgMjQ2LCAyMzQsIDEzLCA1LCAyNTMsIDMyLCAyNDgsIDI3LCAxMywgNSwgMjUzLCAzMiwgMjUzLCAzNywgMTMsIDUsIAotICAgIDI1MywgMzIsIDEwNywgMjUzLCAzMiwgMjQ3LCA1MiwgMTA3LCAyNDcsIDUyLCAyNTQsIDIwOCwgMTA3LCAyNTMsIDQ1LCAxMywgCi0gICAgNSwgMjUzLCAzMiwgMjQwLCAxMzAsIDEzLCA1LCAyNTQsIDY5LCAxMywgNSwgMjU1LCAzMSwgMjQsIDI0NiwgMjAxLCAyNDAsIAotICAgIDEzMSwgMTMsIDUsIDI1MCwgMTE3LCAxMywgNSwgMjUzLCA3OCwgMTMsIDUsIDI1NCwgMjIxLCAyNCwgMjQwLCAxODcsIDEzLCAKLSAgICA1LCAyNTQsIDIyMSwgMjMzLCA3NywgMjUzLCA3OCwgMTMsIDUsIDI1NCwgMjIxLCAyMzMsIDExOSwgMjUzLCA3OCwgMTMsIDUsIAotICAgIDI1NCwgMjIxLCAyMzMsIDkxLCAxMywgNSwgMjQxLCAxNjIsIDEzLCA1LCAyNTMsIDc5LCAxMywgNSwgMjUzLCAxNDksIDEzLCAKLSAgICA1LCAyNDgsIDY4LCAxMywgNSwgMTc3LCAxMywgNSwgMTg4LCAyNCwgNTcsIDEzLCA1LCAxODgsIDI0LCAyNTMsIDIwNiwgMTMsIAotICAgIDUsIDE4OCwgMjQsIDI1NSwgMTgsIDc5LCAyNDcsIDg0LCAxMywgNSwgMTg4LCAyNCwgMjQwLCAyMDQsIDEzLCA1LCAxODgsIAotICAgIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDE4OCwgMjQsIDIzNywgMTcyLCAxMywgNSwgMTg4LCAyNCwgMTI1LCAxMywgNSwgMTg4LCAKLSAgICAyNCwgMjUzLCAzMCwgMTMsIDUsIDE4OCwgMjQsIDIzNywgMTgxLCAxMywgNSwgMTg4LCAyNCwgMjQwLCAyMjIsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyNTIsIDIwNSwgMTMsIDUsIDE4OCwgMjQsIDI0NywgMTIsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDIwMSwgCi0gICAgMjQwLCAxMzEsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDE5NywgMTMsIDUsIDE4OCwgMjQsIDI1MywgNzUsIDc5LCAyNDYsIAotICAgIDIzNiwgNzksIDU3LCAxMywgNSwgMTg4LCAyNCwgMjUzLCAzOSwgMTMsIDUsIDE4OCwgMjQsIDI0MCwgMjUwLCAxMywgNSwgCi0gICAgMTg4LCAyNCwgMjQ2LCAyNDMsIDc5LCAyNDcsIDEwMSwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMjQzLCAyMzMsIDc3LCAyNDAsIAotICAgIDIwOCwgMTMsIDUsIDE4OCwgMjQsIDI1MywgNDAsIDEzLCA1LCAxODgsIDI0LCAyNDEsIDE0NywgMTMsIDUsIDE4OCwgMjQsIAotICAgIDI0NiwgMjM0LCAxMywgNSwgMTg4LCAyNCwgMjUzLCA3OCwgMTMsIDUsIDE4OCwgMjQsIDI0NywgMTYsIDEzLCA1LCAxODgsIAotICAgIDI0LCAyNTMsIDcsIDEzLCA1LCAxODgsIDI0LCAyNDcsIDE1OSwgMTMsIDUsIDE4OCwgMjQsIDI1MywgNDIsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyNTMsIDIyLCAxMywgNSwgMTg4LCAyNCwgMjUzLCAxMywgMTMsIDUsIDE4OCwgMjQsIDI1NCwgMjA2LCA3OSwgCi0gICAgMjUzLCAzMSwgMTMsIDUsIDE4OCwgMjQsIDI1NCwgMjA2LCA3OSwgMjUzLCAzOSwgMTMsIDUsIDE4OCwgMjQsIDI1NCwgMjA2LCAKLSAgICA3OSwgMjUzLCA5LCAxMywgNSwgMTg4LCAyNCwgMjUyLCAyMzksIDEzLCA1LCAxODgsIDI0LCAyNTUsIDExLCA3OSwgMjM4LCAKLSAgICAzMCwgMTMsIDUsIDE4OCwgMjQsIDI1MiwgMjQ3LCAxMywgNSwgMTg4LCAyNCwgMjQ2LCAxOTUsIDEzLCA1LCAxODgsIDI0LCAKLSAgICAyNTIsIDIyMywgMTMsIDUsIDE4OCwgMjQsIDI1MywgMywgMTMsIDUsIDE4OCwgMjQsIDI1MiwgMjA0LCAxMywgNSwgMTg4LCAKLSAgICAyNCwgMjQ3LCAxMDEsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDE2NSwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMTg2LCAxMywgNSwgCi0gICAgMTg4LCAyNCwgMjQxLCAxNSwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMjQ2LCAxMywgNSwgMTg4LCAyNCwgMjQ4LCAxNjEsIDEzLCAKLSAgICA1LCAxODgsIDI0LCAyMzgsIDY4LCAxMywgNSwgMTg4LCAyNCwgMjQ3LCA1NiwgMTMsIDUsIDE4OCwgMjQsIDY2LCAxMywgNSwgCi0gICAgMTg4LCAyNCwgMjUzLCAxMDcsIDEzLCA1LCAxODgsIDI0LCAyNTMsIDQ1LCAxMywgNSwgMTg4LCAyNCwgMjQ3LCAyMjAsIDI0LCAKLSAgICAyMTMsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDI0OSwgMTMsIDUsIDE4OCwgMjQsIDI1MywgNzIsIDEzLCA1LCAyNDgsIDc1LCAKLSAgICAxMywgNSwgMjU0LCA3NywgMjMzLCA3NywgMjQ4LCA3NSwgMTMsIDUsIDI1MCwgMTUxLCAxMywgNSwgMjQxLCAxNjgsIDEzLCAKLSAgICA1LCAyNDAsIDI1NCwgMTMsIDUsIDI0NCwgNDUsIDEzLCA1LCAyNDEsIDE2OSwgMTMsIDUsIDI1MCwgMTUzLCAxMDcsIDI0MSwgCi0gICAgMTY5LCAxMywgNSwgMjQ3LCAxNiwgMTMsIDUsIDI1MywgMjM3LCAyNCwgMjUzLCAzMiwgMjQwLCAxMzAsIDEzLCA1LCAyNDcsIAotICAgIDE1NSwgMTMsIDUsIDI1MywgMjM4LCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNTMsIDIzOCwgMjMzLCA3NywgMjQ3LCAxNTUsIAotICAgIDEzLCA1LCAyNDQsIDQ2LCAxMywgNSwgMjQ0LCA0NywgMTMsIDUsIDIzNSwgNzYsIDEzLCA1LCAyMzcsIDE1OCwgMjE1LCAyNCwgCi0gICAgOTcsIDEwNywgMjE1LCAyNCwgNjYsIDEzLCA1LCAyMzcsIDE1OCwgMTA3LCAyMzcsIDE1OCwgMjE1LCAyNCwgOTcsIDEwNywgCi0gICAgMjE1LCAyNCwgNjYsIDEzLCA1LCAyMzksIDY2LCAxMywgNSwgMjUzLCA3LCAxMywgNSwgMjU0LCAyNDksIDI0LCAyNDYsIAotICAgIDIwNiwgMTMsIDUsIDI1NCwgMjQ5LCAyNCwgNjYsIDEzLCA1LCAyNTQsIDI0OSwgMjQsIDI1MywgNDUsIDEzLCA1LCAyNDcsIAotICAgIDE1OSwgMTMsIDUsIDI0NywgMTYwLCAxMywgNSwgMjM5LCA3MSwgMTMsIDUsIDI0NCwgNjEsIDEzLCA1LCAyMzUsIDE4NCwgCi0gICAgMTMsIDUsIDIzNywgNTYsIDEwNywgMjM1LCAxODQsIDEzLCA1LCAyNTMsIDM0LCAxMywgNSwgMjU0LCAyMzgsIDEwNywgMjU0LCAKLSAgICAyMDEsIDI0LCAyNDcsIDI0MywgMjU0LCAyMzgsIDEwNywgMjU0LCAyMDEsIDI0LCAyNDAsIDIwNCwgMTMsIDUsIDI0NywgODQsIAotICAgIDEzLCA1LCAyNTAsIDE4NywgMTMsIDUsIDI1NCwgODcsIDIzNSwgMzAsIDE1LCAxMywgNSwgMjUwLCAxODgsIDEzLCA1LCAKLSAgICAyNDgsIDg2LCAxMywgNSwgMjUzLCAyNDEsIDI0MCwgMTMwLCAxMywgNSwgMjUwLCAxODksIDEzLCA1LCAyNDYsIDIyMCwgMTMsIAotICAgIDUsIDI1MywgMjQyLCAyMzMsIDExOSwgMjQ2LCAyMjAsIDEzLCA1LCAyMzUsIDEyNywgMTMsIDUsIDIzNiwgMTI1LCAxMywgNSwgCi0gICAgMjUyLCAyMDAsIDEzLCA1LCAyMzcsIDE2MCwgMTMsIDUsIDIxNSwgMjQsIDU3LCAxMywgNSwgMjE1LCAyNCwgMTAyLCA3OSwgCi0gICAgMjU0LCAyMTgsIDc5LCAxNTQsIDEzLCA1LCAyMTUsIDI0LCAxMDIsIDc5LCAyNDYsIDE5NywgMTMsIDUsIDIxNSwgMjQsIAotICAgIDEwMiwgNzksIDI0NywgMiwgMTMsIDUsIDIxNSwgMjQsIDI1MywgMTEyLCAxMywgNSwgMjE1LCAyNCwgMjUzLCA1LCAxMywgNSwgCi0gICAgMjE1LCAyNCwgMjUyLCAyNTQsIDI0OCwgMjA4LCAyNDAsIDEzMSwgMTMsIDUsIDIxNSwgMjQsIDI0NiwgMjA2LCAxMywgNSwgCi0gICAgMjE1LCAyNCwgMjUzLCAzMCwgMTMsIDUsIDIxNSwgMjQsIDI0OCwgMTksIDEzLCA1LCAyMTUsIDI0LCAyNTIsIDIzMiwgMTMsIAotICAgIDUsIDIxNSwgMjQsIDI1MiwgMjA1LCAxMywgNSwgMjE1LCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAyMTUsIDI0LCAyNDYsIDIzMywgCi0gICAgMTMsIDUsIDIxNSwgMjQsIDI1MywgMTI3LCA3OSwgMjQ2LCAyMzMsIDEzLCA1LCAyMTUsIDI0LCAxNTQsIDEzLCA1LCAyMTUsIAotICAgIDI0LCAyNDcsIDgwLCAxMywgNSwgMjE1LCAyNCwgMjU0LCAyMDEsIDI0LCAyNDYsIDE5NSwgMTMsIDUsIDIxNSwgMjQsIDI1MywgCi0gICAgMzIsIDI0MCwgMTMwLCAxMywgNSwgMjE1LCAyNCwgMjUzLCA3OCwgMTMsIDUsIDIxNSwgMjQsIDI1NCwgMjIxLCA3OSwgMTU0LCAKLSAgICAxMywgNSwgMjE1LCAyNCwgMjU0LCAyMjEsIDc5LCAyNTMsIDIyLCAxMywgNSwgMjE1LCAyNCwgMjUzLCA3LCAxMywgNSwgCi0gICAgMjE1LCAyNCwgMjQ3LCAxNjAsIDEzLCA1LCAyMTUsIDI0LCAyNDcsIDg0LCAxMywgNSwgMjE1LCAyNCwgMjQ4LCA4NiwgMTMsIAotICAgIDUsIDIxNSwgMjQsIDI1MywgMjQxLCA3OSwgMjU0LCAyMDEsIDc5LCA1NywgMTMsIDUsIDIxNSwgMjQsIDIzNywgMTYwLCAxMywgCi0gICAgNSwgMjE1LCAyNCwgMjQxLCA0NywgMTMsIDUsIDIxNSwgMjQsIDI1MywgMjIsIDEzLCA1LCAyMTUsIDI0LCAyNDcsIDE3MCwgCi0gICAgMTMsIDUsIDIxNSwgMjQsIDI1MywgMTMsIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIwNiwgNzksIDI1MiwgMjMyLCAxMywgNSwgCi0gICAgMjE1LCAyNCwgMjQwLCAyMzAsIDEzLCA1LCAyMTUsIDI0LCAyNTIsIDI0NywgMTMsIDUsIDIxNSwgMjQsIDI1MywgNjQsIDc5LCAKLSAgICAyNDcsIDIxLCAxMywgNSwgMjE1LCAyNCwgMjQxLCA3MSwgNzksIDI0NiwgMjQzLCA3OSwgMjM3LCAxODEsIDEzLCA1LCAyMTUsIAotICAgIDI0LCAyNDEsIDcxLCA3OSwgMjQ2LCAyNDMsIDI0MCwgMTMxLCAxMywgNSwgMjE1LCAyNCwgMjQwLCAyMzYsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNTEsIDIyMSwgNzksIDI0MCwgMjM2LCAxMywgNSwgMjE1LCAyNCwgMjQ3LCAyMSwgMTMsIDUsIDIxNSwgMjQsIAotICAgIDI0NywgMTA1LCAxMywgNSwgMjE1LCAyNCwgMjQwLCAxODcsIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIxMiwgNzksIDEwMiwgCi0gICAgNzksIDI1NCwgMjUzLCA3OSwgMjUyLCAyMDEsIDEzLCA1LCAyMTUsIDI0LCA2NiwgMTMsIDUsIDIxNSwgMjQsIDk3LCA3OSwgCi0gICAgNTcsIDEzLCA1LCAyMTUsIDI0LCA5NywgNzksIDk3LCA3OSwgNjYsIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIzMiwgNzksIAotICAgIDI0NiwgMTc3LCAxMywgNSwgMjE1LCAyNCwgMjUzLCA0NSwgMTMsIDUsIDIxNSwgMjQsIDI0NiwgMjQ5LCAxMywgNSwgMjE1LCAKLSAgICAyMzMsIDkxLCAxMywgNSwgMjM4LCAxNywgMTMsIDUsIDI0MCwgMTcxLCAyNCwgMjQ2LCAxODYsIDEzLCA1LCAyNDAsIDE3MSwgCi0gICAgMjQsIDI1MywgNjQsIDc5LCAyNDcsIDIxLCAxMywgNSwgMjQwLCAxNzEsIDI0MCwgMTMwLCAxMywgNSwgMjQwLCAxNzEsIAotICAgIDI0NywgMzYsIDEwNywgMjQwLCAxNzEsIDI0NywgMzYsIDI0NiwgMTg2LCAxMywgNSwgMjM2LCAxMjgsIDEzLCA1LCAyNDcsIAotICAgIDIsIDEzLCA1LCAyNTMsIDE4NCwgMjQsIDI0NywgMiwgMTMsIDUsIDI0OCwgODksIDEzLCA1LCAyMTYsIDI0LCAyNDYsIDIyMCwgCi0gICAgMTMsIDUsIDIxNiwgMjQsIDI1MywgMjQyLCA3OSwgMjUzLCAzLCAxMywgNSwgMjUzLCA0MiwgMTMsIDUsIDI1MCwgMjIxLCAKLSAgICAxMywgNSwgMjM2LCAxMzYsIDEzLCA1LCAyNDEsIDQ3LCAxMywgNSwgMjUzLCAyMiwgMTMsIDUsIDI1NCwgMjQwLCAyNCwgCi0gICAgMjQ2LCAyMDYsIDEzLCA1LCAyNDcsIDE2OSwgMTMsIDUsIDI1MiwgMjM2LCAyNCwgMjUzLCAxMTIsIDEzLCA1LCAyNTIsIAotICAgIDIzNiwgMjQsIDI0NiwgMjA2LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNDAsIDIyMiwgMTMsIDUsIDI1MiwgMjM2LCAyNCwgCi0gICAgMjQ5LCAyMzMsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAyNTIsIAotICAgIDIzNiwgMjQsIDI1NCwgMjAxLCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNTIsIDIzNiwgMjQsIDI1MywgNzgsIDEzLCA1LCAKLSAgICAyNTIsIDIzNiwgMjQsIDI0MSwgMTY4LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNDAsIDI1NCwgMTMsIDUsIDI1MiwgMjM2LCAKLSAgICAyNCwgMjUwLCAxNTIsIDc5LCAyNDYsIDE3NywgMTMsIDUsIDI1MiwgMjM2LCAyNCwgMjUzLCA3LCAxMywgNSwgMjUyLCAyMzYsIAotICAgIDI0LCAyNTQsIDIyOSwgNzksIDI0NiwgMTc3LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyMzcsIDE2MCwgMTMsIDUsIDI1MiwgCi0gICAgMjM2LCAyNCwgMjU0LCAyMDYsIDc5LCAyNTIsIDIzMiwgMTMsIDUsIDI1MiwgMjM2LCAyNCwgMjUyLCAyNDcsIDEzLCA1LCAKLSAgICAyNTIsIDIzNiwgMjQsIDI1MiwgMjI3LCAxMywgNSwgMjUyLCAyMzYsIDI0LCAyNTUsIDE2LCA3OSwgMjQ2LCAxNzcsIDEzLCAKLSAgICA1LCAyNTIsIDIzNiwgMjQsIDI1MSwgMjI0LCA3OSwgMjUzLCA0OCwgMTMsIDUsIDI1MiwgMjM2LCAyNCwgMjQxLCAyMCwgMTMsIAotICAgIDUsIDI1MiwgMjM2LCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgMjM2LCAyMzMsIDc3LCAyNDcsIDE2OSwgMTMsIDUsIDI1MiwgCi0gICAgMjM2LCAyMzMsIDExOSwgMjQ3LCAxNjksIDEzLCA1LCAyNTIsIDIzNiwgMjMzLCA5MSwgMTMsIDUsIDI1MiwgMjM2LCAyMzMsIAotICAgIDEzNCwgMTMsIDUsIDI1MCwgMjM0LCAxMywgNSwgMjM3LCAxODUsIDEzLCA1LCAyNDEsIDQ5LCAxMDcsIDIzNywgMTg1LCAxMywgCi0gICAgNSwgMjQxLCA0OSwgMjMzLCAxMTksIDIzNywgMTg1LCAxMywgNSwgMjQxLCA0OSwgMjMzLCAxMzQsIDEzLCA1LCAyNTAsIAotICAgIDIzNSwgMTMsIDUsIDI0NywgMTcwLCAxMywgNSwgMjQ3LCAxOCwgMTMsIDUsIDI1MywgMTg1LCAxMDcsIDI0NywgMTgsIDEzLCAKLSAgICA1LCAyNTMsIDE4NSwgMTA3LCAyNTMsIDE4NSwgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgMTMsIDUsIDE5OCwgMTMsIDUsIAotICAgIDI1NSwgMTAsIDI0LCAyNDAsIDE4NywgMTMsIDUsIDI1NSwgMTAsIDI0MCwgMTMwLCAxMywgNSwgMjUwLCAyNDUsIDEzLCA1LCAKLSAgICAyNTAsIDI0NiwgMTMsIDUsIDI1MCwgMjQ4LCAxMywgNSwgMjQxLCA1LCAxMywgNSwgMjM4LCAyMywgMTMsIDUsIDI1MywgMTMsIAotICAgIDEzLCA1LCAyNTEsIDUsIDEzLCA1LCAyNTIsIDIzOSwgMTMsIDUsIDI0NywgMTc0LCAxMywgNSwgMjUyLCAyMjksIDEzLCA1LCAKLSAgICAyNTQsIDIwNywgMTA3LCAyNTIsIDIyOSwgMTMsIDUsIDI0OCwgMTAzLCAxMywgNSwgMjU0LCAxMDUsIDI0MCwgMTMwLCAxMywgCi0gICAgNSwgMjM2LCAxNjAsIDEzLCA1LCAyMzYsIDE2MiwgMTMsIDUsIDI0MCwgMjMwLCAxMywgNSwgMjQ3LCA1LCAyNCwgNTcsIDEzLCAKLSAgICA1LCAyNDcsIDUsIDI0LCAyNDYsIDIyMCwgMTMsIDUsIDI0NywgNSwgMjQsIDI1MiwgMjI2LCAxMywgNSwgMjQ3LCA1LCAxMDcsIAotICAgIDI0MCwgMjMwLCAxMywgNSwgMjQ3LCA1LCAxMDcsIDI0NywgNSwgMjQsIDEwMiwgNzksIDI1MiwgMjAxLCAxMywgNSwgMjQ3LCAKLSAgICA1LCAyMzMsIDc3LCAyNDAsIDIzMCwgMTMsIDUsIDIzOSwgMTIyLCAxMywgNSwgMjQxLCA2LCAyNCwgNTcsIDEzLCA1LCAyNDEsIAotICAgIDYsIDI0LCAxMDIsIDc5LCAyNTMsIDEyLCAxMywgNSwgMjQxLCA2LCAyNCwgMjUzLCAxMiwgMTMsIDUsIDI0MSwgNiwgMjQwLCAKLSAgICAxMzAsIDEzLCA1LCAyNTIsIDIwMSwgMTMsIDUsIDI1MSwgMzYsIDEzLCA1LCAyNDEsIDU1LCAxMywgNSwgMjQ3LCA0MiwgCi0gICAgMjMyLCAyMDksIDEzLCA1LCAyNDcsIDQyLCAyNCwgMjU0LCA3LCAyNDAsIDEzMSwgMTMsIDUsIDI0NywgNDIsIDIzMywgMTE5LCAKLSAgICAyNDEsIDU1LCAxMywgNSwgMjM5LCAxMjQsIDEzLCA1LCAyNTQsIDExMCwgMjMzLCAyMjIsIDEzLCA1LCAyNTEsIDM5LCAxMywgCi0gICAgNSwgMjQ0LCAxNjQsIDEzLCA1LCAyNTIsIDI0NywgMTMsIDUsIDI1NCwgMjUxLCAyNCwgNTcsIDEzLCA1LCAyNTQsIDI1MSwgCi0gICAgMjQsIDI1MywgNDUsIDEzLCA1LCAyNTQsIDI1MSwgMjMzLCAxMzQsIDEzLCA1LCAyNTIsIDI0OCwgMTMsIDUsIDI1NCwgMjMwLCAKLSAgICAyNCwgNzIsIDEzLCA1LCAyNTEsIDU4LCAxMywgNSwgMjUxLCA2MSwgMTMsIDUsIDI1MywgMjQ5LCAyNCwgMjQ2LCAyMDEsIAotICAgIDI0MCwgMTMxLCAxMywgNSwgMjUzLCAyNDksIDI0LCAyNTMsIDc1LCA3OSwgMjQ2LCAyMDEsIDI0MCwgMTMxLCAxMywgNSwgCi0gICAgMjM2LCAxNjYsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjUzLCA1LCAxMywgNSwgMjM3LCA4NywgMjQsIDI0NiwgMTc3LCAxMywgCi0gICAgNSwgMjM3LCA4NywgMjQsIDI1MiwgMjU0LCA3OSwgMjQ2LCAxNzcsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjQ2LCAyMzMsIDEzLCAKLSAgICA1LCAyMzcsIDg3LCAyNCwgMjU0LCAyMDYsIDc5LCAyNDYsIDIwMSwgMjQwLCAxMzEsIDEzLCA1LCAyMzcsIDg3LCAyNCwgCi0gICAgMjUyLCAyNDcsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjQ2LCAxOTUsIDEzLCA1LCAyMzcsIDg3LCAyNCwgMjQ2LCAxODYsIDEzLCAKLSAgICA1LCAyMzcsIDg3LCAyNCwgMjUzLCA2NCwgNzksIDEwMiwgMjUzLCA1LCAxMywgNSwgMjM3LCA4NywgMjQsIDI1MywgNjQsIAotICAgIDc5LCAyNDYsIDE3NywgMTMsIDUsIDIzNywgODcsIDI0LCAyNTMsIDY0LCA3OSwgMjUyLCAyNTQsIDc5LCAyNDYsIDE3NywgCi0gICAgMTMsIDUsIDIzNywgODcsIDI0LCAyNTQsIDIzMiwgNzksIDI0NiwgMTc3LCAxMywgNSwgMjM3LCA4NywgMjQsIDI0NiwgMjQ5LCAKLSAgICAxMywgNSwgMjM5LCAxNDUsIDEzLCA1LCAyNTIsIDIyNywgMTMsIDUsIDI0NSwgMTIsIDEzLCA1LCAyNDYsIDE5NSwgMTMsIDUsIAotICAgIDI1MywgMjMsIDI0MCwgMTcxLCAyNCwgMjQ2LCAxOTcsIDEzLCA1LCAyNTMsIDIzLCAyNDAsIDE3MSwgMjQsIDI0MSwgNSwgCi0gICAgMTMsIDUsIDI1MywgMjMsIDI0MCwgMTcxLCAyNCwgMjQ3LCA2LCAxMywgNSwgMjUzLCAyMywgMjQwLCAxNzEsIDI0LCAyNTMsIAotICAgIDE5MiwgMTA3LCAyNTMsIDIzLCAyNDAsIDE3MSwgMjQsIDI0NywgNiwgMTMsIDUsIDI1MywgMjMsIDI0MCwgMTcxLCAyNCwgCi0gICAgMjQ2LCAyNDksIDEzLCA1LCAyNTMsIDIzLCAyNDAsIDEzMSwgMTMsIDUsIDI1MywgMjMsIDEwNywgMjQ2LCAxOTUsIDEzLCA1LCAKLSAgICAyNTMsIDIzLCAyMzMsIDc3LCAyNDYsIDE5NSwgMTMsIDUsIDI1MywgMjMsIDIzMywgNzcsIDI1MywgMjMsIDI0MCwgMTcxLCAKLSAgICAxMDcsIDIzOCwgMTcsIDEzLCA1LCAyMzgsIDMwLCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyMzUsIDEwOCwgMTMsIAotICAgIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjUzLCAzMCwgMTMsIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjQ3LCAKLSAgICAxMzMsIDEzLCA1LCAyNDAsIDE3NywgMjUzLCAxMSwgMjQsIDI0NiwgMjMzLCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIAotICAgIDI0LCAyNTMsIDMyLCAyNDAsIDEzMCwgMTMsIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjQwLCAyNTQsIDEzLCA1LCAKLSAgICAyNDAsIDE3NywgMjUzLCAxMSwgMjQsIDI1MiwgMjAwLCAxMywgNSwgMjQwLCAxNzcsIDI1MywgMTEsIDI0LCAyNTIsIDI0NywgCi0gICAgMTMsIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjM4LCA1OSwgMTMsIDUsIDI0MCwgMTc3LCAyNTMsIDExLCAyNCwgMjUzLCAKLSAgICAxMDcsIDEzLCA1LCAyNDAsIDE3NywgMjM3LCA1NiwgMjQsIDI1MywgMzAsIDEzLCA1LCAyNDAsIDE3NywgMjM3LCA1NiwgMjQsIAotICAgIDI1NCwgMjM0LCA2NiwgMTMsIDUsIDIxMywgMTMsIDUsIDI1MSwgMTAxLCAxMywgNSwgMjUxLCAxMDMsIDEzLCA1LCAyNDcsIAotICAgIDQ1LCAxMywgNSwgMjM5LCAxOTQsIDEzLCA1LCAyNTIsIDIyMywgMTMsIDUsIDI1NCwgMjAwLCAyNCwgNTcsIDEzLCA1LCAKLSAgICAyNTQsIDIwMCwgMjQsIDI1MywgMTY2LCAxMywgNSwgMjU0LCAyMDAsIDI0LCAyNTMsIDMwLCAxMywgNSwgMjU0LCAyMDAsIAotICAgIDI0LCAyNTMsIDQ4LCAxMywgNSwgMjU0LCAyMDAsIDI0LCA3MiwgMTMsIDUsIDI1NCwgMjAwLCAyNCwgNzQsIDEzLCA1LCAKLSAgICAyNTQsIDIwMCwgMjQsIDI1MywgMjI5LCAxMywgNSwgMjU0LCAyMDAsIDI0LCA2NiwgMTMsIDUsIDI1NCwgMjAwLCAyNCwgCi0gICAgMjUzLCAxMDcsIDEzLCA1LCAyNTQsIDIwMCwgMjMzLCA3NywgMjUyLCAyMjMsIDEzLCA1LCAyMzgsIDM0LCAxMywgNSwgMjQxLCAKLSAgICAxMCwgMjQsIDI0NywgMTU1LCAxMywgNSwgMjQxLCAxMCwgMjQsIDI1MywgNDUsIDEzLCA1LCAyNDEsIDEwLCAyNCwgMjUyLCAKLSAgICAyMjYsIDEzLCA1LCAyNDEsIDEwLCAyMzMsIDExOSwgMjM4LCAzNCwgMTMsIDUsIDIwOCwgMTMsIDUsIDI1MSwgMTY4LCAxMywgCi0gICAgNSwgMjUzLCAzNywgMTMsIDUsIDI1MywgMywgMTMsIDUsIDI1MiwgMjA0LCAxMywgNSwgMjUyLCAyNTMsIDIzMywgMjIyLCAKLSAgICAxMywgNSwgMjQ3LCAyMDAsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDU3LCAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNTMsIDMxLCAKLSAgICAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNDcsIDEzMiwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMTU0LCAxMywgNSwgMjUyLCAyNTMsIAotICAgIDI0LCAyNDcsIDE2LCAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNDYsIDIyMCwgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjQ3LCAxOCwgCi0gICAgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjUyLCAyMzksIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI0NiwgMTk1LCAxMywgNSwgMjUyLCAKLSAgICAyNTMsIDI0LCAyNDcsIDYsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI0MSwgMTUsIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI0NywgCi0gICAgMjA4LCAxMywgNSwgMjUyLCAyNTMsIDI0LCAyNTMsIDEwNywgMTMsIDUsIDI1MiwgMjUzLCAyNCwgMjU0LCAxNCwgMTMsIDUsIAotICAgIDI1MiwgMjUzLCAyNCwgMjUzLCAxOTksIDEzLCA1LCAyNTIsIDI1MywgMjQsIDI1MywgMTYxLCAxMywgNSwgMjUyLCAyNTMsIAotICAgIDI0LCAyNDYsIDI0OSwgMTMsIDUsIDI1MiwgMjUzLCAxMDcsIDI0NywgMjAwLCAxMywgNSwgMjUyLCAyNTMsIDI0MCwgMTMwLCAKLSAgICAxMywgNSwgMjQ3LCA2LCAxMywgNSwgMjUzLCAxOTIsIDIxNSwgMjQsIDI0MCwgMjA0LCAxMywgNSwgMjM2LCAyMDYsIDEzLCAKLSAgICA1LCAyNDcsIDEwMSwgMTMsIDUsIDI0NiwgMTY1LCAxMywgNSwgMjQxLCA2OCwgMTMsIDUsIDI0NiwgMjM2LCAyNCwgNTcsIAotICAgIDEzLCA1LCAyNDYsIDIzNiwgMjQsIDI0NiwgMjA2LCAxMywgNSwgMjQ2LCAyMzYsIDI0LCAyNDAsIDIwOCwgMTMsIDUsIDI0NiwgCi0gICAgMjM2LCAyNCwgMjUyLCAyNDcsIDEzLCA1LCAyNDYsIDIzNiwgMjQsIDI0MCwgMjM2LCAxMywgNSwgMjQ2LCAyMzYsIDI0LCAKLSAgICAyNDcsIDExMiwgMTMsIDUsIDI0NiwgMjM2LCAyNCwgNjYsIDEzLCA1LCAyNDYsIDIzNiwgMjQsIDk3LCA3OSwgNTcsIDEzLCAKLSAgICA1LCAyNDUsIDE1NywgMTMsIDUsIDIzOSwgMjQzLCAxMywgNSwgMjM3LCAxMTYsIDEzLCA1LCAyNDYsIDE4NiwgMTMsIDUsIAotICAgIDI1MywgNjQsIDI1MywgNTksIDEzLCA1LCAyNTMsIDY0LCAxMDcsIDI1MywgNjQsIDI1MywgODksIDEwNywgMjUzLCA4OSwgCi0gICAgMjUzLCA3NSwgMTA3LCAyNDYsIDE5NywgMTMsIDUsIDI1MywgNjQsIDEwNywgMjUzLCA2NCwgMjUzLCAxMzQsIDEwNywgMjUzLCAKLSAgICAxMzQsIDI1MywgNzUsIDEwNywgMjQ2LCAxOTcsIDEzLCA1LCAyMzksIDI0NSwgMTMsIDUsIDI0NSwgMTYxLCAxMywgNSwgCi0gICAgMjM4LCA1MywgMTMsIDUsIDIzNiwgMjIzLCAxMywgNSwgMjMzLCAyNSwgMTMsIDUsIDI0MSwgMTUsIDEzLCA1LCAyNDgsIAotICAgIDE1OCwgMjQsIDU3LCAxMywgNSwgMjQ4LCAxNTgsIDI0LCAyNTMsIDc4LCAxMywgNSwgMjQ1LCAxNjYsIDEzLCA1LCAyNDYsIAotICAgIDIyMiwgMjQsIDU3LCAxMywgNSwgMjQ2LCAyMjIsIDI0LCAyNDcsIDEyMCwgMTMsIDUsIDI0NiwgMjIyLCAyNCwgMjM3LCAKLSAgICAxOTYsIDEzLCA1LCAyNDYsIDIyMiwgMjQsIDI0OCwgMjgsIDEzLCA1LCAyNDYsIDIyMiwgMjQsIDI0NiwgMTk3LCAxMywgNSwgCi0gICAgMjQ2LCAyMjIsIDI0LCAyNDYsIDIzNCwgMTMsIDUsIDI0NiwgMjIyLCAyNCwgMjUzLCAzMiwgMjQwLCAxMzAsIDEzLCA1LCAKLSAgICAyNDYsIDIyMiwgMjQsIDIzNSwgMTI3LCAxMywgNSwgMjQ2LCAyMjIsIDI0LCAyNDcsIDE3MCwgMTMsIDUsIDI0NiwgMjIyLCAKLSAgICAyNCwgMjQ4LCAxMDMsIDEzLCA1LCAyNDYsIDIyMiwgMjQsIDI0NywgNiwgMTMsIDUsIDIzNiwgMjI2LCAxMywgNSwgMjQ1LCAKLSAgICAxNjksIDEzLCA1LCAyNDcsIDUyLCAyNDAsIDEzMSwgMTMsIDUsIDI0NywgNTIsIDEwNywgMjQ3LCA1MiwgMjUzLCAyMDksIAotICAgIDEwNywgMjQ3LCAxMSwgMTMsIDUsIDIzOSwgMjQ5LCAxMywgNSwgMjQ2LCAyNDYsIDEzLCA1LCAyNTQsIDcsIDEwNywgMjMzLCAKLSAgICA3MCwgMjQ2LCAyNDYsIDEzLCA1LCAyNDAsIDIzNiwgMTMsIDUsIDIzNiwgMjI4LCAxMywgNSwgMjUzLCAyNCwgMTMsIDUsIAotICAgIDI1NSwgMTYsIDI0MCwgMTMwLCAxMywgNSwgMjQ4LCAxNjEsIDEzLCA1LCAyNDEsIDI0NSwgMTMsIDUsIDI0OCwgMTYyLCAKLSAgICAxMDcsIDI0OCwgMTYyLCAyNDAsIDIzNiwgMTMsIDUsIDI0NSwgMTg1LCAxMywgNSwgMjM4LCA1OSwgMTMsIDUsIDI1MywgMjYsIAotICAgIDEzLCA1LCAyNTQsIDI1MywgMTA3LCAyNTMsIDI2LCAxMywgNSwgMjUxLCAyNDAsIDEzLCA1LCAyNDUsIDIyMiwgMTMsIDUsIAotICAgIDIzOCwgNjgsIDEzLCA1LCAyNDcsIDIxLCAxMywgNSwgMjM2LCAyNDcsIDEzLCA1LCAyNDcsIDIwNSwgMTMsIDUsIDI0NSwgCi0gICAgMjI2LCAxMywgNSwgMjUyLCAyMDIsIDEzLCA1LCAyNTQsIDIxNCwgMjMxLCAxOTgsIDEzLCA1LCAyNTQsIDIxNCwgMjQsIAotICAgIDI1MywgNDEsIDEzLCA1LCAyNTQsIDIxNCwgMjQsIDI1MiwgMjM5LCAxMywgNSwgMjU0LCAyMTQsIDI0MCwgMTMwLCAxMywgNSwgCi0gICAgMjQ3LCAyMDgsIDEzLCA1LCAyNTMsIDEzNCwgMTA3LCAyNTMsIDEzNCwgMjU0LCAyMzAsIDEwNywgMjU0LCAyMzAsIDI0OSwgCi0gICAgMTk1LCAxMDcsIDI0MCwgMTU2LCAxMywgNSwgMjUzLCAxMzQsIDIzMywgOTEsIDEzLCA1LCAyNDcsIDEwNSwgMTMsIDUsIAotICAgIDEwOCwgMjQsIDI1MywgMzAsIDEzLCA1LCAxMDgsIDI0LCAyNDYsIDIzMywgMTMsIDUsIDEwOCwgMjQsIDI0NiwgMTg2LCAxMywgCi0gICAgNSwgMTA4LCAyNCwgMjQ2LCAyNDYsIDEzLCA1LCAxMDgsIDI0LCAyNDEsIDIwLCAxMywgNSwgMTA4LCAyNCwgMjUzLCA0NSwgCi0gICAgMTMsIDUsIDI0MCwgMTg3LCAxMywgNSwgMjQ3LCA1NiwgMTMsIDUsIDI1MywgOSwgMTMsIDUsIDI1NCwgMjEyLCAyNDAsIAotICAgIDEzMCwgMTMsIDUsIDI1MywgNDQsIDEzLCA1LCAyNTUsIDQ5LCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgMjEsIDEzLCA1LCAKLSAgICAyNDgsIDE3MiwgMTMsIDUsIDI1MywgMTM2LCAyNCwgMjQwLCAxODcsIDEzLCA1LCAyNTMsIDEzNiwgMTA3LCAyNDgsIDE3MiwgCi0gICAgMTMsIDUsIDI1MywgMTM2LCAxMDcsIDI1MywgMTM2LCAyNTMsIDg5LCAxMDcsIDI1MywgODksIDI1MywgNzUsIDEwNywgMjQ2LCAKLSAgICAxOTcsIDEzLCA1LCAyNTMsIDE4LCAxMywgNSwgMjQxLCAyMCwgMTMsIDUsIDI0OCwgMTgzLCAxMywgNSwgMjQ4LCAxODQsIAotICAgIDEzLCA1LCAyNDcsIDExMiwgMTMsIDUsIDI1NCwgMTIsIDEwNywgMjU0LCAxMiwgMjU0LCAyNTUsIDEwNywgMjUyLCAyMjYsIAotICAgIDEzLCA1LCA2NiwgMTMsIDUsIDk3LCAyNDYsIDIzMywgMTMsIDUsIDk3LCA5NywgNjYsIDEzLCA1LCA5NywgMTA3LCA5NywgCi0gICAgMjU0LCAyNDIsIDEwNywgMjU0LCAyNDIsIDI1MywgNzUsIDEwNywgMjQ2LCAxOTcsIDEzLCA1LCA5NywgMTA3LCA5NywgMjU0LCAKLSAgICAxNTIsIDEwNywgMjQ3LCAyMDUsIDEzLCA1LCA5NywgMTA3LCA5NywgOTcsIDIwMCwgMTA3LCA5NywgMjMyLCA1LCAxMywgNSwgCi0gICAgMjUzLCAxMDcsIDEzLCA1LCAyNTQsIDE0LCAxMywgNSwgMjUzLCA0NSwgMTMsIDUsIDI1NCwgMjA4LCAyMzUsIDEyNywgMTMsIAotICAgIDUsIDI1NCwgMjA4LCAyNCwgMjQ2LCAyMDYsIDEzLCA1LCAyNTQsIDIwOCwgMjQsIDI1MiwgMjM5LCAxMywgNSwgMjU0LCAKLSAgICAyMDgsIDI0LCA5NywgNzksIDk3LCA3OSwgNjYsIDEzLCA1LCAyNTQsIDIwOCwgMjQsIDk3LCA3OSwgOTcsIDc5LCA5NywgCi0gICAgMjQwLCAxMzAsIDEzLCA1LCAyNTQsIDIwOCwgMjQwLCAxMzAsIDEzLCA1LCAyNTQsIDIwOCwgMjMzLCAxMzQsIDEzLCA1LCAKLSAgICAyNTQsIDIwOCwgMjM2LCAyMjQsIDI0LCAyNDYsIDIwNiwgMTMsIDUsIDI0NiwgMzAsIDEzLCA1LCAyNTMsIDE5OSwgMTMsIDUsIAotICAgIDI1NCwgMjQzLCAyNCwgMjM3LCAxNjAsIDEzLCA1LCAyNTQsIDI0MywgMjQsIDI1NCwgMjA2LCA3OSwgMjUyLCAyMDMsIDEzLCAKLSAgICA1LCAyNTQsIDI0MywgMjQsIDI0MSwgNjgsIDEzLCA1LCAyNTQsIDI0MywgMjQsIDY2LCAxMywgNSwgMjQwLCA2NiwgMTMsIDUsIAotICAgIDI0NiwgMzIsIDEzLCA1LCAyNDcsIDIyMCwgMjQsIDIzNSwgNzYsIDEzLCA1LCAyNDcsIDIyMCwgMjQsIDIxMywgMTMsIDUsIAotICAgIDI1MywgMTIxLCAxMywgNSwgMjU1LCA1MSwgMjQwLCAxMzAsIDEzLCA1LCAyNTMsIDE2MSwgMTMsIDUsIDI1NCwgMjQ0LCAKLSAgICAyMzMsIDc3LCAyNTMsIDE2MSwgMTMsIDUsIDI1NCwgMjQ0LCAyMzMsIDEzNCwgMTMsIDUsIDI1MiwgNTgsIDEzLCA1LCAyNTMsIAotICAgIDk0LCAyNCwgMTAyLCA3OSwgMTU0LCAxMywgNSwgMjUzLCA5NCwgMjQsIDEwMiwgNzksIDI1MiwgMjAxLCAxMywgNSwgMjUzLCAKLSAgICA5NCwgMjQsIDI1MywgMTEyLCAxMywgNSwgMjUzLCA5NCwgMjQsIDE1NCwgMTMsIDUsIDI1MywgOTQsIDI0LCAyNDYsIDE5NSwgCi0gICAgMTMsIDUsIDI1MywgOTQsIDI0LCAyNTMsIDEwNywgMTMsIDUsIDI1MywgOTQsIDI0LCAyNTQsIDIzMiwgNzksIDI0NiwgMTc3LCAKLSAgICAxMywgNSwgMjUzLCA5NCwgMjQsIDI1NCwgMjMyLCA3OSwgMjUzLCAzMCwgMTMsIDUsIDI1MiwgNTksIDEzLCA1LCAyNTIsIAotICAgIDYxLCAxMywgNSwgMjQ2LCAzNSwgMTMsIDUsIDI1MiwgNjMsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDU3LCAxMywgNSwgMjUyLCAKLSAgICAyNDIsIDI0LCAyMzUsIDEwOCwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMTI1LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDgsIAotICAgIDMzLCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNTIsIDIwNSwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjQ3LCAxMiwgMTMsIDUsIAotICAgIDI1MiwgMjQyLCAyNCwgMjQ2LCAyMDEsIDI0MCwgMTMxLCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDYsIDE5NywgMTMsIDUsIAotICAgIDI1MiwgMjQyLCAyNCwgMjUzLCA0MCwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMTU0LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAKLSAgICAyNDYsIDIzNCwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjUzLCA3OCwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjQ4LCA2OCwgMTMsIAotICAgIDUsIDI1MiwgMjQyLCAyNCwgMjUzLCA3LCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDcsIDE4LCAxMywgNSwgMjUyLCAyNDIsIAotICAgIDI0LCAyNDcsIDE3NCwgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjEzLCAxMywgNSwgMjUyLCAyNDIsIDI0LCAyNDYsIDE4NiwgCi0gICAgMTMsIDUsIDI1MiwgMjQyLCAyNCwgMjQxLCAyNDUsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI1MywgMTgsIDEzLCA1LCAyNTIsIAotICAgIDI0MiwgMjQsIDk3LCA3OSwgMjQ2LCAyMzMsIDEzLCA1LCAyNTIsIDI0MiwgMjQsIDI1MywgNDUsIDEzLCA1LCAyNTIsIDI0MiwgCi0gICAgMjQsIDIzOCwgODAsIDEzLCA1LCAyMzgsIDgwLCAxMywgNSwgMjQ2LCAzNiwgMjQsIDY2LCAxMywgNSwgMjQ2LCAyNDksIDEzLCAKLSAgICA1LCAyNTMsIDE2MiwgMjQsIDU3LCAxMywgNSwgMjUzLCAxNjIsIDI0LCAyNTMsIDM0LCAxMywgNSwgMjUzLCAxNjIsIDI0LCAKLSAgICAyNDYsIDIyMCwgMTMsIDUsIDI1MywgMTYyLCAyNCwgMjQwLCAxODcsIDEzLCA1LCAyNDYsIDM5LCAxMywgNSwgMjQ2LCAzOCwgCi0gICAgMTMsIDUsIDIzNywgMTgsIDEzLCA1LCAyNDAsIDcwLCAxMywgNSwgMjUyLCA2NywgMTMsIDUsIDI1NCwgMTY2LCAyNCwgMjM1LCAKLSAgICA3NiwgMTMsIDUsIDI1MiwgNjgsIDEzLCA1LCAyNTIsIDIyNiwgMTMsIDUsIDI1NCwgMjU1LCAyNDAsIDEzMSwgMTMsIDUsIAotICAgIDI1NCwgMjU1LCAyMzUsIDUxLCAyNCwgMjQ2LCAyMjAsIDEzLCA1LCAyNTIsIDE2NiwgMTMsIDUsIDI0NiwgMTA2LCAxMywgNSwgCi0gICAgMjUyLCAxNzIsIDEzLCA1LCAyNTMsIDcyLCAxMywgNSwgMjU1LCA1NCwgMTA3LCAyNTMsIDcyLCAxMywgNSwgMjUyLCAxNzYsIAotICAgIDEzLCA1LCAyNTIsIDE3NywgMTMsIDUsIDI1NCwgMTc5LCAyNDgsIDc3LCAyNDAsIDEzMSwgMTMsIDUsIDI1MiwgMTc5LCAxMywgCi0gICAgNSwgMjQ2LCAxMzEsIDEzLCA1LCAyNTMsIDk3LCAxMywgNSwgMjUyLCAxODgsIDEzLCA1LCAyNTQsIDE4MSwgMjQsIDU3LCAKLSAgICAxMywgNSwgMjQwLCAxMTAsIDEzLCA1LCAyNTIsIDE4OSwgMTMsIDExMSwgNSwgMTM1LCAyNDYsIDE3NywgMTMsIDExMSwgNSwgCi0gICAgMTUyLCAyNDYsIDE3NywgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAyNDYsIDE1OSwgMjQ2LCAKLSAgICAxNzcsIDEzLCAxMTEsIDUsIDI1MywgMTcsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAyNDAsIDE1NSwgMjQ2LCAxNzcsIDEzLCAKLSAgICAxMTEsIDUsIDI0MCwgMTQyLCAyNDYsIDE3NywgMTMsIDExMSwgNSwgMjQ2LCAyMDgsIDI0NiwgMTc3LCAxMywgMTExLCA1LCAKLSAgICAxNTIsIDI0MCwgMTU2LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyNDAsIAotICAgIDE1NiwgMTMsIDExMSwgNSwgMjUzLCAxNywgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyNDAsIDE1NiwgMTMsIAotICAgIDExMSwgNSwgMjQwLCAxNDIsIDI0MCwgMTU2LCAxMywgMTExLCA1LCAyNDYsIDIwOCwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIAotICAgIDI0NiwgMTYwLCA2NiwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIDY2LCAxMywgMTExLCA1LCAyNTMsIDE3LCA2NiwgMTMsIDExMSwgCi0gICAgNSwgMjQwLCAxNTUsIDY2LCAxMywgMTExLCA1LCAyNDAsIDE0MiwgNjYsIDEzLCAxMTEsIDUsIDI0NiwgMjA4LCA2NiwgMTMsIAotICAgIDExMSwgNSwgMTY4LCAyMzcsIDExMywgMTMsIDExMSwgNSwgMTM1LCAyMzcsIDExMywgMTMsIDExMSwgNSwgMTUyLCAyMzcsIAotICAgIDExMywgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNywgMTEzLCAxMywgMTExLCA1LCAyNDYsIDE1OSwgMjM3LCAxMTMsIDEzLCAKLSAgICAxMTEsIDUsIDI1MywgMTcsIDIzNywgMTEzLCAxMywgMTExLCA1LCAyNDAsIDE1NSwgMjM3LCAxMTMsIDEzLCAxMTEsIDUsIAotICAgIDI0MCwgMTQyLCAyMzcsIDExMywgMTMsIDExMSwgNSwgMjQ2LCAyMDgsIDIzNywgMTEzLCAxMywgMTExLCA1LCAxNjgsIDIzNywgCi0gICAgMTU2LCAxMywgMTExLCA1LCAxMzUsIDIzNywgMTU2LCAxMywgMTExLCA1LCAxNTIsIDIzNywgMTU2LCAxMywgMTExLCA1LCAKLSAgICAyNDYsIDE2MCwgMjM3LCAxNTYsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyMzcsIDE1NiwgMTMsIDExMSwgNSwgMTM1LCAyMzcsIAotICAgIDExNiwgMTMsIDExMSwgNSwgMTUyLCAyMzcsIDExNiwgMTMsIDExMSwgNSwgMTUyLCAyNDEsIDY5LCAyMzUsIDMwLCAxNSwgCi0gICAgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNywgMTE2LCAxMywgMTExLCA1LCAyNDYsIDE1OSwgMjM3LCAxMTYsIDEzLCAxMTEsIAotICAgIDUsIDI1MywgMTcsIDIzNywgMTE2LCAxMywgMTExLCA1LCAyNDAsIDE1NSwgMjM3LCAxMTYsIDEzLCAxMTEsIDUsIDI0MCwgCi0gICAgMTQyLCAyMzcsIDExNiwgMTMsIDExMSwgNSwgMjQ2LCAyMDgsIDIzNywgMTE2LCAxMywgMTExLCA1LCAxNjgsIDIzNywgMTYzLCAKLSAgICAxMywgMTExLCA1LCAxMzUsIDIzNywgMTYzLCAxMywgMTExLCA1LCAxNTIsIDIzNywgMTYzLCAxMywgMTExLCA1LCAxNTIsIAotICAgIDI0NSwgMTU5LCAyMzUsIDMwLCAxNSwgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNywgMTYzLCAxMywgMTExLCA1LCAyNDYsIAotICAgIDE1OSwgMjM3LCAxNjMsIDEzLCAxMTEsIDUsIDI0MSwgNjksIDI0LCAyNTMsIDE3OSwgNzksIDI0MCwgMTU2LCAxMywgMTExLCAKLSAgICA1LCAyNDEsIDY5LCAyNCwgMjUzLCAxNzksIDc5LCAyNDcsIDE3NCwgMTMsIDExMSwgNSwgMTY4LCAyNDAsIDIxOSwgMTMsIAotICAgIDExMSwgNSwgMTM1LCAyNDAsIDIxOSwgMTMsIDExMSwgNSwgMTUyLCAyNDAsIDIxOSwgMTMsIDExMSwgNSwgMTUyLCAyNDksIAotICAgIDEzMSwgMjM1LCAzMCwgMTUsIDEzLCAxMTEsIDUsIDI0NiwgMTYwLCAyNDAsIDIxOSwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIAotICAgIDI0MCwgMjE5LCAxMywgMTExLCA1LCAxNTIsIDIzNSwgMzAsIDIxMSwgMjM4LCAyMDcsIDEzLCAxMTEsIDUsIDE1MiwgMjM1LCAKLSAgICAzMCwgMjExLCAyMzgsIDIwOCwgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNSwgMzAsIDIxMSwgMjM5LCA4NiwgMTMsIDExMSwgCi0gICAgNSwgMjQ2LCAxNjAsIDIzNSwgMzAsIDIxMSwgMjM2LCAxMzcsIDEzLCAxMTEsIDUsIDI0NiwgMTYwLCAyMzUsIDMwLCAyMTEsIAotICAgIDI0MSwgMTgxLCA1NywgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDIzNSwgMzAsIDIxMSwgMjQxLCAxODEsIDI1NCwgMTg1LCAxMywgCi0gICAgMTExLCA1LCAyNTMsIDE3LCAyMzUsIDMwLCAyMTEsIDI0MiwgNjUsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyMzUsIDMwLCAKLSAgICAyMTEsIDIzOSwgNDEsIDEzLCAxMTEsIDUsIDI0MCwgMTU1LCAyMzUsIDMwLCAyMTEsIDI0OCwgNjcsIDU3LCAxMywgMTExLCAKLSAgICA1LCAyNDAsIDE1NSwgMjM1LCAzMCwgMjExLCAyNDgsIDY3LCAyNTQsIDE4NSwgMTMsIDExMSwgNSwgMjQwLCAxNDIsIDIzNSwgCi0gICAgMzAsIDIxMSwgMjQ2LCA0MCwgMTMsIDExMSwgNSwgMjQwLCAxNDIsIDIzNSwgMzAsIDIxMSwgMjQwLCA2OSwgMTMsIDExMSwgCi0gICAgNSwgMjQ2LCAyMDgsIDIzNSwgMzAsIDIxMSwgMjM2LCAxMDksIDEzLCAxMTEsIDUsIDI0NiwgMjA4LCAyMzUsIDMwLCAyMTEsIAotICAgIDIzNCwgMTI2LCAxMywgMTExLCA1LCAyNDYsIDIwOCwgMjM1LCAzMCwgMjExLCAyMzQsIDEyNywgMTMsIDExMSwgNSwgMjQ2LCAKLSAgICAyMDgsIDIzNSwgMzAsIDIxMSwgMjM5LCA0MCwgNTcsIDEzLCAxMTEsIDUsIDEzNSwgMjUyLCAyNTQsIDI0MCwgMTMxLCAxMywgCi0gICAgMTExLCA1LCAxNTIsIDI1MiwgMjU0LCAyNDAsIDEzMSwgMTMsIDExMSwgNSwgMjQ2LCAxNjAsIDI1MiwgMjU0LCAyNDAsIAotICAgIDEzMSwgMTMsIDExMSwgNSwgMjQ2LCAxNTksIDI1MiwgMjU0LCAyNDAsIDEzMSwgMTMsIDExMSwgNSwgMjUzLCAxNywgMjUyLCAKLSAgICAyNTQsIDI0MCwgMTMxLCAxMywgMTExLCA1LCAxNjgsIDI0MCwgMjE4LCAxMywgMTExLCA1LCAxMzUsIDI0MCwgMjE4LCAxMywgCi0gICAgMTExLCA1LCAxNTIsIDI0MCwgMjE4LCAxMywgMTExLCA1LCAyNDYsIDE2MCwgMjQwLCAyMTgsIDEzLCAxMTEsIDUsIDI0NiwgCi0gICAgMTYwLCAyNDcsIDI0OSwgMjM1LCAzMCwgMTUsIDEzLCAxMTEsIDUsIDI0NiwgMTU5LCAyNDAsIDIxOCwgMTMsIDExMSwgNSwgCi0gICAgMjQ2LCAxNTksIDI0NywgMjQ5LCAyMzUsIDMwLCAxNSwgMTMsIDExMSwgNSwgMjMxLCAxMDksIDEzLCAxMTEsIDUsIDIzMSwgCi0gICAgMTA4LCAxMywgMTExLCA1LCAxNjgsIDIzNywgMjQ0LCAxMywgMTExLCA1LCAxMzUsIDIzNywgMjQ0LCAxMywgMTExLCA1LCAKLSAgICAxNjgsIDI0MCwgMjM5LCAyNDAsIDE1NiwgMTMsIDExMSwgNSwgMTM1LCAyMzcsIDIxOCwgMjQwLCAxNTYsIDEzLCAxMTEsIDUsIAotICAgIDI0NiwgMTU5LCAyNDAsIDAsIDI0MCwgMTU2LCAxMywgMTExLCA1LCAxNjgsIDI0MCwgMjM5LCAyMzUsIDMwLCAyMTEsIDU3LCAKLSAgICAxMywgMTExLCA1LCAxMzUsIDIzNywgMjE4LCAyMzUsIDMwLCAyMTEsIDU3LCAxMywgMTExLCA1LCAxNjgsIDIzNywgMTEyLCAKLSAgICAyNDYsIDE3NywgMTMsIDExMSwgNSwgMTY4LCAyMzUsIDUzLCAyNDYsIDE3NywgMTMsIDExMSwgNSwgODQsIDIzMywgMTU4LCAKLSAgICAxNjgsIDIzOCwgNjEsIDEzLCAxMTEsIDUsIDg0LCAyMzMsIDE1OCwgMTY4LCAyMzMsIDE1NSwgMTMsIDIyOSwgMTYxLCA1LCAKLSAgICA4NCwgMjMzLCAxNTgsIDI0NywgOCwgMjMzLCAxNDAsIDEzLCAyMjksIDE2MSwgNSwgNjEsIDIzNywgNjYsIDEzLCAyMjksIAotICAgIDE2MSwgNSwgMjMzLCA3NCwgMjM3LCA2NiwgMTMsIDIyOSwgMTYxLCA1LCAyMzMsIDc0LCAyMzIsIDU3LCA0MywgMjMsIDE0LCAKLSAgICAyMzcsIDc3LCA0MywgMjMsIDE0LCAyMzYsIDQyLCA0MywgMjMsIDE0LCAyMjgsIDE3OSwgNDMsIDIzLCAxNCwgMjQxLCA1OCwgCi0gICAgMjI4LCAxOTAsIDQzLCAyMywgMTQsIDI0MSwgNTgsIDIzNywgMTMyLCA0MywgMjMsIDE0LCAyMzcsIDIyMywgMjI4LCAxOTAsIAotICAgIDQzLCAyMywgMTQsIDIzNywgMjIzLCAyMzcsIDEzMiwgNDMsIDIzLCAxNCwgMjMyLCAyMTMsIDQzLCAyMywgMTQsIDIzMSwgCi0gICAgMTc0LCA0MywgMjMsIDE0LCAyMjksIDQ2LCA0MywgMjMsIDE0LCAyMzEsIDE4OCwgNDMsIDIzLCAxNCwgMjMzLCA2NiwgMjM3LCAKLSAgICAxMzIsIDQzLCAyMywgMTQsIDIzMiwgMjE3LCA0MywgMjMsIDE0LCAyNDEsIDk1LCAyMjgsIDE5MCwgNDMsIDIzLCAxNCwgCi0gICAgMjUzLCAyMjEsIDIyOCwgMTkwLCA0MywgMjMsIDE0LCAyMzUsIDIyMCwgNDMsIDIzLCAxNCwgMjMxLCA5MiwgNDMsIDIzLCAKLSAgICAxNCwgMjI5LCAyMzAsIDQzLCAyMywgMTQsIDIzMCwgMTczLCAyMzcsIDEzMiwgNDMsIDIzLCAxNCwgMjM0LCAyMzcsIDQzLCAKLSAgICAyMywgMTQsIDI0MCwgMzgsIDQzLCAyMywgMTQsIDIzOCwgMzEsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzcsIDE1NywgCi0gICAgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzNiwgMTk0LCA0MywgMjMsIDE0LCAyMzIsIDk1LCA0MywgMjMsIDE0LCAyNDAsIDczLCAKLSAgICA0MywgMjMsIDE0LCAyNDgsIDY5LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM1LCA5NiwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIAotICAgIDIzMSwgMjQwLCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjMzLCAxOCwgNDMsIDIzLCAxNCwgMjMyLCAyNDUsIDQzLCAyMywgCi0gICAgMTQsIDIzNiwgMjQwLCAyMzIsIDY5LCA0MywgMjMsIDE0LCAyMzksIDE3OCwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzNywgCi0gICAgMjEsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzMsIDE4NSwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzMiwgNzAsIDQzLCAKLSAgICAyMywgMTQsIDIzNSwgMTg1LCA0MywgMjMsIDE0LCAyMzksIDIyMSwgNDMsIDIzLCAxNCwgMjM4LCAzMywgMjMxLCAyMDIsIAotICAgIDQzLCAyMywgMTQsIDIzNCwgMjQ4LCA0MywgMjMsIDE0LCAyMjcsIDIxNywgNDMsIDIzLCAxNCwgMjM2LCAyMTYsIDQzLCAyMywgCi0gICAgMTQsIDIzNSwgMTM5LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM1LCAxMzksIDI1MSwgNiwgMjM0LCAyMzIsIDQzLCAyMywgCi0gICAgMTQsIDIzMiwgMzEsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyNDAsIDM1LCA0MywgMjMsIDE0LCAyMzksIDgzLCA0MywgMjMsIAotICAgIDE0LCAyNDksIDIxOSwgNDMsIDIzLCAxNCwgMjQ2LCA1LCA0MywgMjMsIDE0LCAyMzQsIDI0NCwgNDMsIDIzLCAxNCwgMjMxLCAKLSAgICA5NCwgNDMsIDIzLCAxNCwgMjQxLCA5NSwgMjUzLCAyMjEsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyMzEsIAotICAgIDIwMiwgNDMsIDIzLCAxNCwgMjMxLCA4MiwgNDMsIDIzLCAxNCwgMjMzLCAxODEsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAKLSAgICAyMzksIDU3LCAyMzMsIDU1LCA0MywgMjMsIDE0LCAyMzIsIDI0NywgNDMsIDIzLCAxNCwgMjMxLCAxMjcsIDQzLCAyMywgMTQsIAotICAgIDIzMiwgMjE1LCA0MywgMjMsIDE0LCAyMzMsIDE5MiwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIzNCwgMjAyLCA0MywgMjMsIAotICAgIDE0LCAyMjksIDIwNiwgMjMxLCAyMDIsIDQzLCAyMywgMTQsIDIyOSwgMjA3LCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM0LCAKLSAgICAxMjQsIDQzLCAyMywgMTQsIDI0MSwgMTk5LCA0MywgMjMsIDE0LCAyMzQsIDE5MCwgNDMsIDIzLCAxNCwgMjM0LCAxNDAsIAotICAgIDI0MSwgMjYsIDQzLCAyMywgMTQsIDIzMywgMTgxLCAyNDEsIDI2LCA0MywgMjMsIDE0LCAyMjgsIDE2NSwgNDMsIDIzLCAxNCwgCi0gICAgMjI3LCAyNDIsIDQzLCAyMywgMTQsIDI0OCwgNjksIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzgsIDMxLCAyNDYsIDE5NCwgCi0gICAgNDMsIDIzLCAxNCwgMjQxLCA1OCwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzNCwgMTkxLCA0MywgMjMsIDE0LCAyMzIsIAotICAgIDIxNiwgNDMsIDIzLCAxNCwgMjI1LCA5OCwgNDMsIDIzLCAxNCwgMjI1LCA5NCwgNDMsIDIzLCAxNCwgMjM0LCAxODksIDI0NiwgCi0gICAgMTk0LCA0MywgMjMsIDE0LCAyMzEsIDI0MCwgMjUzLCA5MSwgMjQ2LCAyNTIsIDQzLCAyMywgMTQsIDIzNSwgOTYsIDI1MywgCi0gICAgOTEsIDI0NiwgMjUyLCA0MywgMjMsIDE0LCAyMzcsIDM1LCA0MywgMjMsIDE0LCAyMzAsIDE3MywgMjQ2LCAxOTQsIDQzLCAKLSAgICAyMywgMTQsIDIzMCwgMTcyLCAyMzMsIDUwLCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjM1LCAxMywgNDMsIDIzLCAxNCwgCi0gICAgMjI1LCA5NSwgNDMsIDIzLCAxNCwgMjM0LCA5MywgNDMsIDIzLCAxNCwgMjM0LCAzMCwgNDMsIDIzLCAxNCwgMjM5LCAxMTQsIAotICAgIDI0NCwgMTIsIDQzLCAyMywgMTQsIDIzNywgMjIzLCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjM4LCAzMywgMjQ2LCAxOTQsIAotICAgIDQzLCAyMywgMTQsIDIzMywgMiwgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzNiwgMTc0LCA0MywgMjMsIDE0LCAyMjksIDIyOCwgCi0gICAgNDMsIDIzLCAxNCwgMjM0LCAxNDYsIDQzLCAyMywgMTQsIDIyOSwgMjA3LCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjI5LCAKLSAgICAyMDYsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzcsIDI0NSwgMjI5LCA0NSwgNDMsIDIzLCAxNCwgMjM0LCAxNDMsIDQzLCAKLSAgICAyMywgMTQsIDIyMywgNTksIDQzLCAyMywgMTQsIDIzMywgMTgxLCAyNDYsIDE5NCwgNDMsIDIzLCAxNCwgMjMwLCA1MywgNDMsIAotICAgIDIzLCAxNCwgMjM1LCAxMzksIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyNDAsIDI2LCA0MywgMjMsIDE0LCAyMzMsIDE5MiwgCi0gICAgMjQ2LCAxOTQsIDQzLCAyMywgMTQsIDIzMiwgMTc5LCA0MywgMjMsIDE0LCAyMzksIDI0MCwgMjQ2LCAxOTQsIDQzLCAyMywgCi0gICAgMTQsIDI0NiwgNjYsIDIzNSwgMTg1LCA0MywgMjMsIDE0LCAyMjMsIDU1LCA0MywgMjMsIDE0LCAyMjUsIDEwMCwgNDMsIDIzLCAKLSAgICAxNCwgMjI3LCA4MCwgNDMsIDIzLCAxNCwgMjIyLCAyMzgsIDQzLCAyMywgMTQsIDIyMiwgMjI5LCA0MywgMjMsIDE0LCAyMjcsIAotICAgIDgxLCA0MywgMjMsIDE0LCAyMjUsIDEwMSwgNDMsIDIzLCAxNCwgMjI1LCAxMTMsIDQzLCAyMywgMTQsIDIyNywgMTQxLCA0MywgCi0gICAgMjMsIDE0LCAyMzcsIDI0NSwgMjI3LCAxNDEsIDQzLCAyMywgMTQsIDIzMiwgMzEsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAKLSAgICAyMjksIDIyMywgMjQ5LCAyMzQsIDQzLCAyMywgMTQsIDIyOSwgMjIzLCAyNDksIDIzNiwgNDMsIDIzLCAxNCwgMjQ1LCAyNDQsIAotICAgIDIzNSwgMTQ3LCA0MywgMjMsIDE0LCAyNTIsIDE3LCAyNTMsIDE1MCwgMjM0LCA1LCA0MywgMjMsIDE0LCAyMzEsIDkwLCA0MywgCi0gICAgMjMsIDE0LCAyMzEsIDY1LCA0MywgMjMsIDE0LCAyNDgsIDIwMSwgMjQwLCAyMDEsIDQzLCAyMywgMTQsIDI0OCwgMjAxLCAKLSAgICAyNDYsIDI1MiwgNDMsIDIzLCAxNCwgMjM0LCAyMzEsIDQzLCAyMywgMTQsIDIzOCwgMTUsIDI0NiwgMjUyLCA0MywgMjMsIAotICAgIDE0LCAyNDMsIDcxLCAyMzEsIDIwMiwgNDMsIDIzLCAxNCwgMjM1LCAxMjYsIDIzMSwgMjAyLCA0MywgMjMsIDE0LCAyMzUsIAotICAgIDEyNiwgMjQxLCAyNiwgNDMsIDIzLCAxNCwgMjM1LCAxMjYsIDI0NiwgMTk0LCA0MywgMjMsIDE0LCAyMzMsIDE4NSwgMjQ2LCAKLSAgICAxOTQsIDQzLCAyMywgMTQsIDI0MiwgNjEsIDQzLCAyMywgMTQsIDIzNywgMTMyLCA0MywgMjMsIDE0LCAyMzcsIDgsIDQzLCAKLSAgICAyMywgMTQsIDIzMywgNTIsIDQzLCAyMywgMTQsIDIzMywgMTcwLCA0MywgMjMsIDE0LCAyMzcsIDE2MSwgMjQ5LCAyMjksIAotICAgIDIzMywgMTkzLCA0MywgMjMsIDE0LCAyMzcsIDE2MSwgMjUzLCAxNzQsIDIzMywgMTYwLCA0MywgMjMsIDE0LCAyMzcsIDE2MSwgCi0gICAgMjQ2LCA2LCAyMzMsIDE2MCwgNDMsIDIzLCAxNCwgMjM3LCAxNjEsIDIzNCwgMjQzLCAyMzMsIDE2MCwgNDMsIDIzLCAxNCwgCi0gICAgMjM3LCAxNjEsIDIzNiwgMTEwLCAyMzMsIDE5MywgNDMsIDIzLCAxNCwgMjM3LCAxNTcsIDI1MywgOTEsIDI0NiwgMjUyLCAKLSAgICA0MywgMjMsIDE0LCAyMzcsIDE1NywgMjI3LCAxOTAsIDIzMiwgNzYsIDQzLCAyMywgMTQsIDIzNywgMTU3LCAyMjcsIDE5MCwgCi0gICAgMjM3LCAyNDEsIDQzLCAyMywgMTQsIDIzMiwgMTEyLCA0MywgMjMsIDE0LCAyMzMsIDE2MiwgMjI3LCAxOTAsIDIzMywgMTg2LCAKLSAgICAyNDAsIDIwMSwgNDMsIDIzLCAxNCwgMjMzLCAxNjIsIDIyNywgMTkwLCAyMzMsIDE4NiwgMjQ2LCAyNTIsIDQzLCAyMywgMTQsIAotICAgIDIzMywgMTYyLCAyMjcsIDE5MCwgMjM3LCAyNDEsIDQzLCAyMywgMTQsIDIzMSwgMTgyLCA0MywgMjMsIDE0LCAyMzgsIDEwMSwgCi0gICAgNDMsIDIzLCAxNCwgMjMwLCA2OSwgNDMsIDIzLCAxNCwgMjM0LCA1MiwgNDMsIDIzLCAxNCwgMjQwLCAxOTMsIDI0OCwgMTM0LCAKLSAgICAyNDEsIDk2LCA0MywgMjMsIDE0LCAyNDAsIDE5MywgMjMyLCA3NSwgNDMsIDIzLCAxNCwgMjQwLCAxOTMsIDI0MSwgOTYsIAotICAgIDQzLCAyMywgMTQsIDI0MCwgMTkzLCAyMzYsIDE1NCwgNDMsIDIzLCAxNCwgMjQwLCAxOTMsIDI0NCwgMTIyLCA0MywgMjMsIAotICAgIDE0LCAyNDAsIDE5MywgMjM4LCAzLCA0MywgMjMsIDE0LCAyNDAsIDE5MywgMjMxLCA3NSwgNDMsIDIzLCAxNCwgMjQwLCAKLSAgICAxOTMsIDI0OCwgMTM0LCAyMzgsIDMsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzOCwgMzcsIDIzNywgODYsIDQzLCAyMywgMTQsIAotICAgIDIzMywgOTQsIDI0NywgMjQyLCAyMzgsIDM3LCAyMzcsIDg2LCA0MywgMjMsIDE0LCAyMzMsIDk0LCAyMzMsIDIwMCwgMjM3LCAKLSAgICA4NiwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgMjQ3LCAyNDIsIDIzMywgMjAwLCAyMzcsIDg2LCA0MywgMjMsIDE0LCAyMzMsIAotICAgIDk0LCAyNDAsIDQ3LCAyMzcsIDg2LCA0MywgMjMsIDE0LCAyMzMsIDk0LCAyMzEsIDE4MSwgNDMsIDIzLCAxNCwgMjMzLCA5NCwgCi0gICAgMjMzLCAxODAsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzMywgMTgwLCAyMzUsIDE4OCwgMjM3LCA4NiwgNDMsIAotICAgIDIzLCAxNCwgMjMzLCA5NCwgMjM1LCAxODgsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzNSwgMjAyLCAyMzcsIAotICAgIDg2LCA0MywgMjMsIDE0LCAyMzksIDQzLCAyMzgsIDcyLCAyMzAsIDE4OCwgNDMsIDIzLCAxNCwgMjMwLCAxNzIsIDIzOCwgCi0gICAgNzIsIDIzMCwgMTg4LCA0MywgMjMsIDE0LCAyMzEsIDI1MCwgMjI5LCAxNTIsIDQzLCAyMywgMTQsIDIzMSwgMjUwLCAyMjksIAotICAgIDIwMSwgNDMsIDIzLCAxNCwgMjMxLCAyNTAsIDIzMiwgMTksIDQzLCAyMywgMTQsIDIzMywgOTQsIDI0NiwgNDQsIDIzNywgCi0gICAgODYsIDQzLCAyMywgMTQsIDIzMywgOTQsIDIzMSwgMTI2LCAyMzcsIDg2LCA0MywgMjMsIDE0LCAyMzMsIDk0LCAyMzUsIAotICAgIDIwMiwgMjMzLCAxODAsIDIzNywgODYsIDQzLCAyMywgMTQsIDIzMCwgMTg3LCAyNTUsIDYwLCAyMzUsIDE0NywgNDMsIDIzLCAKLSAgICAxNCwgMjMwLCAxODcsIDI1NSwgNjAsIDIzNCwgNTYsIDQzLCAyMywgMTQsIDIzNiwgNjQsIDI1MywgMTUwLCAyMzcsIDcyLCAKLSAgICAyNDgsIDE5MiwgNDMsIDIzLCAxNCwgMjMyLCAyMDYsIDQzLCAyMywgMTQsIDIzMCwgNzAsIDQzLCAyMywgMTQsIDIzNywgNzIsIAotICAgIDIzNCwgOCwgMjM0LCA0OSwgMjM5LCAzNywgNDMsIDIzLCAxNCwgMjM3LCA3MiwgMjMxLCAyMjEsIDIxMywgNDMsIDIzLCAxNCwgCi0gICAgMjM3LCA3MiwgMjMxLCAyMjEsIDI0MSwgMTk5LCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyNTEsIDQwLCAyMzcsIDg2LCA0MywgCi0gICAgMjMsIDE0LCAyMzcsIDcyLCAyMzEsIDIyMSwgMjUzLCAxMiwgNDMsIDIzLCAxNCwgMjM3LCA3MiwgMjM1LCAxMzYsIDIzNCwgCi0gICAgNTMsIDI1MywgMTIsIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzMSwgMjIxLCAyNTMsIDYsIDQzLCAyMywgMTQsIDIzNywgNzIsIAotICAgIDIzMSwgMjIxLCAyNTMsIDY1LCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyMzEsIDIyMSwgMjU0LCAyMzAsIDI0MCwgMjAxLCA0MywgCi0gICAgMjMsIDE0LCAyMzcsIDcyLCAyMzEsIDIyMSwgMjU0LCAyMzAsIDI0NiwgMjUyLCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyMzUsIAotICAgIDE4OSwgMjM3LCAxNzUsIDIzMiwgMTksIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzNSwgMTg5LCAyMzcsIDE3NSwgMjI5LCAKLSAgICAyMDEsIDQzLCAyMywgMTQsIDIzOCwgMjE1LCAyMzUsIDEzNiwgMjM3LCAxNzUsIDI0MCwgNzIsIDQzLCAyMywgMTQsIDIzNywgCi0gICAgNzIsIDIzNSwgMTM2LCAyMzcsIDE3NSwgMjM2LCAyNTEsIDQzLCAyMywgMTQsIDIzNywgNzIsIDIzNiwgMTY0LCA0MywgMjMsIAotICAgIDE0LCAyNDEsIDMzLCAyNDAsIDExMSwgNDMsIDIzLCAxNCwgMjQxLCAzMywgMjM2LCAxMjMsIDQzLCAyMywgMTQsIDI0MSwgCi0gICAgMzMsIDIzNiwgMjM1LCA0MywgMjMsIDE0LCAyMzcsIDcyLCAyNTUsIDU1LCAyMzcsIDE0OCwgMjI3LCAxNTIsIDQzLCAyMywgCi0gICAgMTQsIDIzNywgNzIsIDIzMSwgNjMsIDIzMCwgMjI0LCA0MywgMjMsIDE0LCAyMzcsIDE0OCwgMjI4LCAyMTksIDQzLCAyMywgCi0gICAgMTQsIDIzNywgMTMxLCAyMjgsIDIxOSwgNDMsIDIzLCAxNCwgMjM3LCAxMzEsIDIyNywgMTUyLCA0MywgMjMsIDE0LCAyMzcsIAotICAgIDEzMSwgMjQ3LCA2NSwgMjUzLCAxNzQsIDIzMSwgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDEzMSwgMjI5LCAyMDIsIDIzNSwgCi0gICAgMjIyLCAyMzEsIDIxNywgNDMsIDIzLCAxNCwgMjM3LCAxMzEsIDIzMiwgMjAsIDI1NSwgNywgMjMxLCAyMTcsIDQzLCAyMywgCi0gICAgMTQsIDIzNywgMTMxLCAyMzAsIDIxNywgMjQ4LCAxMjIsIDIzMSwgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDE0OCwgMjQ3LCAKLSAgICA2NSwgMjUzLCAxNzQsIDIzMSwgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDE0OCwgMjI5LCAyMDIsIDIzNSwgMjIyLCAyMzEsIAotICAgIDIxNywgNDMsIDIzLCAxNCwgMjM3LCAxNDgsIDIzMiwgMjAsIDI1NSwgNywgMjMxLCAyMTcsIDQzLCAyMywgMTQsIDIzNywgCi0gICAgMTQ4LCAyMzAsIDIxNywgMjQ4LCAxMjIsIDIzMSwgMjE3LCA0MywgMjMsIDE0LCAyMzcsIDI1NCwgMjM2LCA0OSwgNDMsIDIzLCAKLSAgICAxNCwgMjM3LCAyNTQsIDIzNywgMzMsIDQzLCAyMywgMTQsIDIzMywgMTQ3LCAyNDcsIDY1LCAyMzksIDExMywgNDMsIDIzLCAKLSAgICAxNCwgMjMzLCAxNDcsIDI0NywgNjUsIDIzNiwgMTUyLCA0MywgMjMsIDE0LCAyMzMsIDE0NywgMjM3LCAxMzIsIDQzLCAyMywgCi0gICAgMTQsIDIzMywgMTQ3LCAyMzMsIDI0NSwgNDMsIDIzLCAxNCwgMjMzLCAxMjAsIDIzMywgMjQ1LCA0MywgMjMsIDE0LCAyMzMsIAotICAgIDEyMCwgMjM1LCAxNDEsIDIzMywgMjAyLCA0MywgMjMsIDE0LCAyMzMsIDEyMCwgMjM1LCAxNDEsIDIzMiwgNTgsIDQzLCAyMywgCi0gICAgMTQsIDIzMywgMTIwLCAyMzUsIDE0MSwgMjI5LCAyMjIsIDQzLCAyMywgMTQsIDIzMywgMTIwLCAyMzUsIDI1MiwgNDMsIDIzLCAKLSAgICAxNCwgMjMzLCAxMjAsIDIzNywgMTk1LCAyMzMsIDIwMiwgNDMsIDIzLCAxNCwgMjMzLCAxMjAsIDIzNywgMTk1LCAyMzIsIAotICAgIDU4LCA0MywgMjMsIDE0LCAyMzMsIDEyMCwgMjM3LCAxOTUsIDIyOSwgMjIyLCA0MywgMjMsIDE0LCAyMzQsIDU0LCAyNTQsIAotICAgIDYwLCA0MywgMjMsIDE0LCAyMzIsIDExMSwgMjUzLCAxMTksIDQzLCAyMywgMTQsIDIzNSwgMTM4LCA0MywgMjMsIDE0LCAKLSAgICAyMzUsIDY3LCAyMTMsIDQzLCAyMywgMTQsIDIzNSwgNjcsIDI0OCwgMTkyLCA0MywgMjMsIDE0LCAyMzUsIDY3LCAyNTIsIAotICAgIDIwNSwgNDMsIDIzLCAxNCwgMjM1LCA2NywgMjUzLCAxMiwgNDMsIDIzLCAxNCwgMjM1LCA2NywgMjUzLCA2LCA0MywgMjMsIAotICAgIDE0LCAyMzUsIDY3LCAyNTMsIDY1LCA0MywgMjMsIDE0LCAyMzUsIDY3LCAyNTIsIDI0OCwgNDMsIDIzLCAxNCwgMjMxLCAKLSAgICAyNDAsIDI1MywgOTEsIDI0MSwgMTkyLCA0MywgMjMsIDE0LCAyMzUsIDk2LCAyNTMsIDkxLCAyNDEsIDE5MiwgNDMsIDIzLCAKLSAgICAxNCwgMjMxLCAyNDAsIDI1MywgOTEsIDI0MCwgMjAxLCA0MywgMjMsIDE0LCAyMzUsIDk2LCAyNTMsIDkxLCAyNDAsIDIwMSwgCi0gICAgNDMsIDIzLCAxNCwgMjM4LCAxNSwgMjQwLCAyMDEsIDQzLCAyMywgMTQsIDIzNywgMTU3LCAyNTMsIDkxLCAyNDAsIDIwMSwgCi0gICAgMjMsIDE0LCAyMzcsIDYyLCAyMzMsIDEyNywgMjMsIDE0LCA0NywgMjMzLCAxMjcsIDIzLCAxNCwgMzUsIDIzMywgMTI3LCAKLSAgICAyMywgMTQsIDIzNSwgMzcsIDM1LCAyMzMsIDEyNywgMjMsIDE0LCAyMzcsIDExMCwgMjMzLCAxMjcsIDIzLCAxNCwgMjQwLCAKLSAgICAxMjUsIDIzMywgMTI3LCAyMywgMTQsIDQyLCAyMzcsIDEyMCwgNTMsIDIzLCAxNCwgNDEsIDIzNywgMTIwLCA1MywgMjMsIAotICAgIDE0LCAyMzcsIDEyMCwgMjQwLCAxNjksIDIzLCAxNCwgMjUzLCA1NiwgMjM4LCA0NSwgMjMsIDE0LCAyNTQsIDIxOCwgMjQyLCAKLSAgICAyMzMsIDIzLCAxNCwgMjM4LCA0NSwgMjMsIDE0LCAyNDMsIDE3LCAyMywgMTQsIDIzMywgMTc3LCAyMzIsIDE4NywgMjMsIAotICAgIDE0LCAyMzMsIDE3NywgMjMyLCAxODgsIDIzLCAxNCwgMjMzLCAxNzcsIDIzMiwgMTg5LCAyMywgMTQsIDIzMywgMjA1LCAyMywgCi0gICAgMTQsIDIzNiwgNzcsIDUxLCAyMywgMTQsIDIzOCwgMTMwLCA3NiwgMjMsIDE0LCAyMzQsIDI1LCAyMywgMTQsIDIzOCwgMTI4LCAKLSAgICAyMywgMTQsIDEwNCwgMjMsIDE0LCAyMzQsIDE3NSwgMjM3LCAxNDcsIDIzLCAxNCwgMjM0LCAyNTUsIDIzNywgMTQ3LCAyMywgCi0gICAgMTQsIDIzMSwgMTc4LCAyMzcsIDE0NywgMjMsIDE0LCAyMzIsIDE5MiwgMjM3LCAxNDcsIDIzLCAxNCwgMjMyLCAxOTAsIAotICAgIDIzNywgMTQ3LCAyMywgMTQsIDIzNCwgMjI0LCAyMzcsIDE0NywgMjMsIDE0LCAyMzEsIDE0NSwgMjMwLCAxODUsIDIzLCAxNCwgCi0gICAgMjMwLCA2MywgMjMwLCAxODUsIDIzLCAxNCwgMjU1LCA2NSwgMjQwLCAyMjAsIDIzLCAxNCwgMjU1LCA2NSwgMjQ3LCA2OSwgCi0gICAgMjM3LCAxNDAsIDI0MCwgMjQzLCAyMywgMTQsIDI1NSwgNjUsIDI0NywgNjksIDIzNywgMTQwLCAyMzcsIDE3MywgMjMsIDE0LCAKLSAgICAyNTUsIDYyLCAyNDAsIDIyMCwgMjMsIDE0LCAyNTUsIDcyLCAyNDAsIDIyMCwgMjMsIDE0LCAyNTUsIDcyLCAyNDcsIDY5LCAKLSAgICAyMzcsIDE0MCwgMjQwLCAyNDMsIDIzLCAxNCwgMjU1LCA3MiwgMjQ3LCA2OSwgMjM3LCAxNDAsIDIzNywgMTczLCAyMywgMTQsIAotICAgIDI0OCwgMzIsIDIzNiwgMzAsIDIzLCAxNCwgMjQ4LCAzMiwgMjM2LCAzMSwgMjMsIDE0LCAyMzMsIDIxOSwgMjM1LCA4NSwgCi0gICAgMjQwLCAxNDgsIDIzLCAxNCwgNDcsIDIzOCwgNDksIDIzLCAxNCwgNDcsIDI0MSwgMTMyLCAyMywgMTQsIDI0NywgMTQxLCAKLSAgICAyNTMsIDE5LCAyMywgMTQsIDI0NywgMTQxLCAyNDAsIDE1MiwgMjMsIDE0LCAyMzUsIDEzMSwgMjUzLCAxOSwgMjMsIDE0LCAKLSAgICAyMzUsIDEzMSwgMjQwLCAxNTIsIDIzLCAxNCwgMjQwLCAyMzUsIDI1MywgMTksIDIzLCAxNCwgMjQwLCAyMzUsIDI0MCwgCi0gICAgMTUyLCAyMywgMTQsIDIzNSwgNTMsIDIwNiwgMjM4LCA0OSwgMjMsIDE0LCAyMzUsIDUzLCAyMDYsIDI0MSwgMTMyLCAyMywgCi0gICAgMTQsIDIzOCwgMTYxLCAyNDIsIDIsIDIzLCAxNCwgMjU0LCA0MCwgMjQyLCAyLCAyMywgMTQsIDIzNywgMTQwLCAyNDAsIAotICAgIDI0MywgMjMsIDE0LCAyMzcsIDE0MCwgMjM3LCAxNzMsIDIzLCAxNCwgMjI4LCAyMTYsIDI0MCwgMjQzLCAyMywgMTQsIDIyOCwgCi0gICAgMjE2LCAyMzcsIDE3MywgMjMsIDE0LCAyNDQsIDE1NSwgMjQwLCAxNDgsIDIzLCAxNCwgMjQyLCAyNCwgMjQwLCAxNDgsIDIzLCAKLSAgICAxNCwgMTMyLCAyNDAsIDE0OCwgMjMsIDE0LCAyMzUsIDUzLCAyNDAsIDE0OCwgMjMsIDE0LCAyMzcsIDExMiwgMjQwLCAxNDgsIAotICAgIDIzLCAxNCwgMjMyLCA2LCAyNDAsIDE0OCwgMjMsIDE0LCAyMjcsIDIxMSwgMjQwLCAxNDgsIDIzLCAxNCwgMjI4LCAyMTgsIAotICAgIDI0MCwgMTQ4LCAyMywgMTQsIDE2OCwgMjM1LCA1NiwgMjI3LCAyMTIsIDI0MCwgMTQ4LCAyMywgMTQsIDI1NSwgNzQsIDIzMSwgCi0gICAgMjI2LCAyMywgMTQsIDc5LCAyMzEsIDIyNiwgMjMsIDE0LCAyMzcsIDQwLCAyNTUsIDc0LCAyMzEsIDIyNiwgMjMsIDE0LCAKLSAgICAzNywgMjMzLCA4NCwgMjM3LCA5MCwgMjMsIDE0LCAzNywgMjMzLCA4NCwgMjM3LCA0NSwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIAotICAgIDg0LCA5OSwgMjM3LCA5MCwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIDg0LCA5OSwgMjM3LCA0NSwgMjMsIDE0LCAyMzMsIDgwLCAKLSAgICAyMzMsIDg0LCA0MiwgMjM3LCA5MCwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIDg0LCA0MiwgMjM3LCA0NSwgMjMsIDE0LCAyMzMsIAotICAgIDgwLCAyMzMsIDg0LCA0MSwgMjM3LCA5MCwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIDg0LCA0MSwgMjM3LCA0NSwgMjMsIDE0LCAKLSAgICAyMzMsIDgwLCAyMzMsIDg0LCAxMDMsIDIzNywgOTAsIDIzLCAxNCwgMjMzLCA4MCwgMjMzLCA4NCwgMTAzLCAyMzcsIDQ1LCAKLSAgICAyMywgMTQsIDIzMywgODAsIDIzMywgODQsIDk5LCA0MSwgMjM3LCA5MCwgMjMsIDE0LCAyMzMsIDgwLCAyMzMsIDg0LCA5OSwgCi0gICAgNDEsIDIzNywgNDUsIDIzLCAxNCwgMjQ3LCAxNzYsIDIzMywgODQsIDIzNywgOTAsIDIzLCAxNCwgMjQ3LCAxNzYsIDIzMywgCi0gICAgODQsIDIzNywgNDUsIDIzLCAxNCwgMjI3LCAxNTQsIDIzMywgODQsIDEwMywgMjM3LCA5MCwgMjMsIDE0LCAyMjcsIDE1NCwgCi0gICAgMjMzLCA4NCwgMTAzLCAyMzcsIDQ1LCAyMywgMTQsIDIyOSwgMTY5LCAyMzEsIDIyNiwgMjMsIDE0LCAyNTIsIDc5LCAyMzEsIAotICAgIDIyNiwgMjMsIDE0LCAyMzMsIDg0LCAyMzcsIDQ1LCAyMywgMTQsIDI1MSwgNzgsIDIzMSwgMjI2LCAyMywgMTQsIDIzNSwgCi0gICAgMTU5LCAyMzMsIDg0LCAyMzcsIDkwLCAyMywgMTQsIDIzNSwgMTU5LCAyMzMsIDg0LCAyMzcsIDQ1LCAyMywgMTQsIDIzNywgCi0gICAgNDYsIDIzLCAxNCwgMjQyLCAyNCwgMjQwLCAxODYsIDIzLCAxNCwgMTMyLCAyNDAsIDE4NiwgMjMsIDE0LCAyMzUsIDUzLCAKLSAgICAyNDAsIDE4NiwgMjMsIDE0LCAyMzcsIDExMiwgMjQwLCAxODYsIDIzLCAxNCwgMjMyLCA2LCAyNDAsIDE4NiwgMjMsIDE0LCAKLSAgICAyMjcsIDIxMSwgMjQwLCAxODYsIDIzLCAxNCwgMjI4LCAyMTgsIDI0MCwgMTg2LCAyMywgMTQsIDE2OCwgMjM1LCA1NiwgCi0gICAgMjI3LCAyMTIsIDI0MCwgMTg2LCAyMywgMTQsIDM2LCAyNDAsIDIxNCwgMjMsIDE0LCAzNiwgMjI5LCAxNTAsIDI0MCwgMjE0LCAKLSAgICAyMywgMTQsIDM2LCAyMzAsIDIxNCwgMjMsIDE0LCAzNiwgMjMwLCAyMTUsIDIzLCAxNCwgMzYsIDIzMCwgMjE2LCAyMywgMTQsIAotICAgIDIzMywgMTY0LCAyMzAsIDIxNCwgMjMsIDE0LCAyMzMsIDE2NCwgMjMwLCAyMTUsIDIzLCAxNCwgMjMzLCAxNjQsIDIzMCwgCi0gICAgMjE2LCAyMywgMTQsIDM2LCAyMjgsIDIyNiwgMjQ2LCAxNjQsIDIzLCAxNCwgMzYsIDIzNiwgNzksIDIzLCAxNCwgMzYsIAotICAgIDIzNiwgODAsIDIzLCAxNCwgMzYsIDIzNiwgODEsIDIzLCAxNCwgMzYsIDIzNiwgODIsIDIzLCAxNCwgMzYsIDIzNiwgODMsIAotICAgIDIzLCAxNCwgMjQwLCAyMDUsIDI0MSwgOTksIDIzLCAxNCwgMjUyLCAyNTUsIDI0MSwgOTksIDIzLCAxNCwgMjQwLCAyMDUsIAotICAgIDI0NywgNTcsIDIzLCAxNCwgMjUyLCAyNTUsIDI0NywgNTcsIDIzLCAxNCwgMjQwLCAyMDUsIDI0MSwgMjQ2LCAyMywgMTQsIAotICAgIDI1MiwgMjU1LCAyNDEsIDI0NiwgMjMsIDE0LCAyNDAsIDIwNSwgMjM1LCAyMDAsIDIzLCAxNCwgMjUyLCAyNTUsIDIzNSwgCi0gICAgMjAwLCAyMywgMTQsIDM2LCAyMzUsIDI0LCAyMywgMTQsIDM2LCAyMzMsIDI4LCAyMywgMTQsIDM2LCAyMzcsIDAsIDIzLCAKLSAgICAxNCwgMzYsIDIyNywgMTc5LCAyMywgMTQsIDM2LCAyMzQsIDE1MSwgMjMsIDE0LCAzNiwgMjIzLCA0OSwgMjMsIDE0LCAzNiwgCi0gICAgMjIzLCA1OCwgMjMsIDE0LCAzNiwgMjM5LCA5MCwgMjMsIDE0LCAyMzAsIDE3NCwgMjUzLCAxOSwgMjMsIDE0LCAyMzAsIAotICAgIDE3NCwgMjQwLCAxNTIsIDIzLCAxNCwgMzYsIDI0MywgNzYsIDIzLCAxNCwgMzYsIDI1MSwgMTgzLCAyMywgMTQsIDM2LCAKLSAgICAyNDMsIDEwNywgMjMsIDE0LCAzNiwgMjQwLCA1LCAyMywgMTQsIDM2LCAyNDIsIDIwMCwgMjMsIDE0LCAzNiwgNDcsIDIzNSwgCi0gICAgMTQyLCAyMywgMTQsIDM2LCAyMzcsIDQ5LCAyMzUsIDE0MiwgMjMsIDE0LCAyMjksIDU2LCAyMywgMTQsIDIzNiwgMjQ1LCAKLSAgICAyMywgMTQsIDI1NCwgMTkzLCAyMywgMTQsIDIzOSwgMTk3LCAyMywgMTQsIDIzOSwgMTA2LCAyMywgMTQsIDIzOCwgMjI0LCAKLSAgICAyMywgMTQsIDIzMCwgMjQxLCAyMywgMTQsIDIyOCwgMjM2LCAyMywgMTQsIDI0MSwgMTQ1LCAyNDgsIDExNiwgMjM3LCA4NCwgCi0gICAgMjMsIDE0LCAyNDEsIDE0NSwgMjQ4LCAxMTYsIDI1NCwgMjUyLCAyMzcsIDg0LCAyMywgMTQsIDI1NCwgMTYxLCAyMywgMTQsIAotICAgIDI0MiwgMTMsIDIzLCAxNCwgMjMzLCA3MCwgMjQyLCAxMywgMjMsIDE0LCAyNDgsIDE4NSwgMjM3LCA4NCwgMjMsIDE0LCAKLSAgICAyNDgsIDE4NSwgMjUzLCAxOSwgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCAzNSwgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCAzNiwgCi0gICAgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCAzNywgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCAzOCwgMjMsIDE0LCAyMzMsIDEwMywgCi0gICAgMjMzLCAzOSwgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCA0MCwgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCA0MSwgMjMsIDE0LCAKLSAgICAyMzMsIDEwMywgMjMzLCA0MiwgMjMsIDE0LCAyMzMsIDEwMywgMjMzLCA0MywgMjMsIDE0LCAyMzMsIDEwMywgMjMxLCAxNDYsIAotICAgIDIzLCAxNCwgMjMzLCAxMDMsIDIzMSwgMTQ3LCAyMywgMTQsIDIyOSwgMjIsIDIzLCAxNCwgMjI5LCA0MSwgMjMsIDE0LCAKLSAgICAyNTIsIDI1NSwgMTA2LCAyMzYsIDI0MSwgMjMsIDE0LCAyMzcsIDE3NywgMjM3LCA4NCwgMjMsIDE0LCAzNiwgMTAzLCAyNDcsIAotICAgIDY4LCAyMywgMTQsIDM2LCA5OSwgMjQ3LCA2OCwgMjMsIDE0LCAzNiwgMjMyLCAyMDIsIDIzLCAxNCwgMzYsIDI1MSwgMjI5LCAKLSAgICAyMzEsIDEyMSwgMjMsIDE0LCAyNDEsIDYwLCA3NiwgMjMsIDE0LCAyNDEsIDYwLCA5OSwgNzYsIDIzLCAxNCwgMTMyLCAyNDEsIAotICAgIDYwLCA3NiwgMjMsIDE0LCAyMzIsIDI1LCAyNTMsIDE5LCAyMywgMTQsIDIzMiwgMjUsIDI0MCwgMTUyLCAyMywgMTQsIDIsIAotICAgIDIyOSwgMTksIDIzLCAxNCwgMjQzLCAyNywgMjMsIDE0LCAyNDksIDE3OCwgMjQ3LCAyNDEsIDIzLCAxNCwgMjM2LCAxNTAsIAotICAgIDIzLCAxNCwgMjM4LCAyMiwgMjMsIDE0LCAyMzYsIDE1LCAyMywgMTQsIDIzMCwgMTY5LCAyMzcsIDkwLCAyMywgMTQsIDIzMCwgCi0gICAgMTY5LCAyMzcsIDQ1LCAyMywgMTQsIDIzNiwgMTU3LCAyMywgMTQsIDIzOCwgMjUsIDIzNywgNDUsIDIzLCAxNCwgMjMwLCAKLSAgICAxNzAsIDIzNywgOTAsIDIzLCAxNCwgMjMwLCAxNzAsIDIzNywgNDUsIDIzLCAxNCwgMjQ4LCA0MSwgMjM3LCA5MCwgMjMsIAotICAgIDE0LCAyNDgsIDQxLCAyMzcsIDQ1LCAyMywgMTQsIDI0MSwgMTg0LCAyMzMsIDIyNywgMjQwLCAxNDgsIDIzLCAxNCwgMjQxLCAKLSAgICAxODQsIDIzMCwgMTU1LCAyNDAsIDE0OCwgMjMsIDE0LCAyMzgsIDEzMSwgMjQwLCAxNDgsIDIzLCAxNCwgMjMwLCAxNjksIAotICAgIDI0MCwgMTQ4LCAyMywgMTQsIDIzOCwgMjUsIDI0MCwgMTQ4LCAyMywgMTQsIDIzMCwgMTcwLCAyNDAsIDE0OCwgMjMsIDE0LCAKLSAgICAyMzcsIDEyMSwgMjMyLCAzLCAyNTMsIDg2LCAyMzAsIDEzOSwgMjMyLCAzNCwgMjMsIDE0LCAyMzcsIDEyMSwgMjMyLCAzLCAKLSAgICAyNTMsIDg2LCAyMzAsIDEzOSwgMjI5LCAxOTksIDIzLCAxNCwgMjM3LCAxMjEsIDIzMiwgMywgMjUzLCA4NiwgMjMwLCAxMzksIAotICAgIDIzMywgMjI3LCAyMjcsIDIwMSwgMjMsIDE0LCAyMzcsIDEyMSwgMjI5LCAxNzYsIDI1MywgODYsIDIzMCwgMTM5LCAyMzIsIAotICAgIDM0LCAyMywgMTQsIDIzNywgMTIxLCAyMjksIDE3NiwgMjUzLCA4NiwgMjMwLCAxMzksIDIyOSwgMTk5LCAyMywgMTQsIDIzNywgCi0gICAgMTIxLCAyMjksIDE3NiwgMjUzLCA4NiwgMjMwLCAxMzksIDIzMCwgMTU1LCAyMjcsIDIwMSwgMjMsIDE0LCAyMzcsIDEyMSwgCi0gICAgMjI5LCAxNzYsIDI1MywgODYsIDIzMCwgMTM5LCAyMzAsIDE1NSwgMjI3LCAyMjgsIDIzLCAxNCwgMjM3LCAxMjEsIDIyOSwgCi0gICAgMTc2LCAyNTMsIDg2LCAyMzAsIDEzOSwgMjMwLCAxNTUsIDIyNywgMjI5LCAyMywgMTQsIDIzOCwgMTY0LCAyMywgMTQsIAotICAgIDIzMiwgMjYsIDI1NSwgNjIsIDI0MCwgMjIwLCAyMywgMTQsIDIzMiwgMjYsIDI1NSwgNzIsIDI0MCwgMjIwLCAyMywgMTQsIAotICAgIDM3LCAyNTQsIDE4NSwgMjMsIDE0LCAyNDAsIDc3LCAyMywgMTQsIDIzNCwgMTk0LCAyMywgMTQsIDIzNiwgMzIsIDIzLCAxNCwgCi0gICAgMjMxLCAxMzcsIDIzLCAxNCwgMjMyLCA5OCwgMjMsIDE0LCAyMzMsIDUzLCAyMywgMTQsIDIzMSwgMTIzLCAyMywgMTQsIAotICAgIDIzMiwgMjUzLCAyMzUsIDE3MiwgMjMsIDE0LCAyMzMsIDE5LCAyMzUsIDE3MiwgMjMsIDE0LCAyMzQsIDI1MCwgMjMxLCAKLSAgICAxMzUsIDIzLCAxNCwgMjU0LCAxMjgsIDIzMCwgMTE0LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMyLCA0OCwgMTksIDI0MCwgCi0gICAgMTM2LCAxNTAsIDIzMiwgNDksIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzMsIDQ2LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMyLCAKLSAgICA1MCwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMiwgNTEsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzMsIDQ3LCAxOSwgMjQwLCAxMzYsIAotICAgIDE1MCwgMjMyLCA1MiwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMiwgNTMsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzMsIDQ4LCAxOSwgCi0gICAgMjQwLCAxMzYsIDE1MCwgMjMxLCAxNTEsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDE5OCwgMTksIDI0MCwgMTM2LCAxNTAsIAotICAgIDIzMCwgMTk5LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMDAsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwMSwgMTksIAotICAgIDI0MCwgMTM2LCAxNTAsIDIzMSwgMTUyLCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMxLCAxNTMsIDE5LCAyNDAsIDEzNiwgMTUwLCAKLSAgICAyMzAsIDIwMiwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjAzLCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMDQsIDE5LCAKLSAgICAyNDAsIDEzNiwgMTUwLCAyMzEsIDE1NCwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMSwgMTU1LCAxOSwgMjQwLCAxMzYsIDE1MCwgCi0gICAgMjMxLCAxNTYsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwNSwgMTksIDI0MCwgMTM2LCAxNTAsIDIzMCwgMjA2LCAxOSwgCi0gICAgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMDcsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIwOCwgMTksIDI0MCwgMTM2LCAxNTAsIAotICAgIDIzMCwgMjA5LCAxOSwgMjQwLCAxMzYsIDE1MCwgMjMwLCAyMTAsIDE5LCAyNDAsIDEzNiwgMTUwLCAyMzAsIDIxMSwgMTksIAotICAgIDIyOCwgMTc2LCAxNTAsIDIzMiwgNDgsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzIsIDQ5LCAxOSwgMjI4LCAxNzYsIDE1MCwgCi0gICAgMjMyLCA1MCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMiwgNTEsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzIsIDUyLCAxOSwgMjI4LCAKLSAgICAxNzYsIDE1MCwgMjMyLCA1MywgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMTk4LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAKLSAgICAxOTksIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIDIwMCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjAxLCAxOSwgMjI4LCAKLSAgICAxNzYsIDE1MCwgMjMwLCAyMDIsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIDIwMywgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgCi0gICAgMjA0LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAyMDUsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIDIwNiwgMTksIDIyOCwgCi0gICAgMTc2LCAxNTAsIDIzMSwgMTU3LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNTgsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIAotICAgIDE1OSwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTYwLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNjEsIDE5LCAyMjgsIAotICAgIDE3NiwgMTUwLCAyMzEsIDE2MiwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTYzLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAKLSAgICAxNjQsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE2NSwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgMTY2LCAxOSwgMjI4LCAKLSAgICAxNzYsIDE1MCwgMjMxLCAxNjcsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE2OCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMSwgCi0gICAgMTY5LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNzAsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzEsIDE3MSwgMTksIDIyOCwgCi0gICAgMTc2LCAxNTAsIDIzMSwgMTcyLCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMxLCAxNzMsIDE5LCAyMjgsIDE3NiwgMTUwLCAyMzAsIAotICAgIDIwNywgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjA4LCAxOSwgMjI4LCAxNzYsIDE1MCwgMjMwLCAyMDksIDE5LCAyMjgsIAotICAgIDE3NiwgMTUwLCAyMzAsIDIxMCwgMTksIDIyOCwgMTc2LCAxNTAsIDIzMCwgMjExLCAzNiwgMTksIDIzLCAyMzMsIDI0NywgCi0gICAgMzYsIDE5LCAyMywgMjMwLCAyMTMsIDM2LCAxOSwgMjMsIDIzMCwgMTkzLCAxOSwgMjMsIDIzNiwgMTMyLCAyMzMsIDExNSwgCi0gICAgMzIsIDIzNywgOTksIDIzNywgMTExLCAzMiwgMjM0LCAxMjEsIDIzNywgOTksIDIzNywgMTExLCAzMiwgMjQzLCAyMzYsIAotICAgIDIzNywgOTksIDIzNywgMTExLCAzMiwgMjM1LCAxNjgsIDIzNSwgMTIzLCAyMzcsIDExMSwgMzIsIDIzNSwgMTY4LCAyMzksIAotICAgIDI4LCAyMzcsIDExMSwgMzIsIDIzNywgOTksIDE0MiwgMzIsIDIzNSwgMTExLCAxNDIsIDMyLCAyNDYsIDE2MiwgMjM1LCAyMCwgCi0gICAgMTQyLCAzMiwgMjM5LCAxMTUsIDE0MiwgMzIsIDIzNCwgMTQsIDE0MiwgMzIsIDIzNSwgMTgyLCAyMzcsIDIxNiwgMTQyLCAKLSAgICAzMiwgMjI4LCAyMzEsIDE0MiwgMzIsIDIzNSwgMjU0LCAxNDIsIDMyLCAyMjksIDE4NywgMTQyLCAzMiwgMjMyLCA4OCwgCi0gICAgMjQ3LCAxODYsIDE0MiwgMzIsIDIyNywgMjI1LCAxNDUsIDIyOSwgMjUxLCAxNDIsIDMyLCAyMjksIDI1MiwgMTQyLCAzMiwgCi0gICAgMjI4LCAxNzQsIDE0MiwgMzIsIDIzMiwgMjcsIDE0MiwgMzIsIDIyOSwgNDcsIDE0MiwgMzIsIDIzOCwgNDAsIDE0MiwgMzIsIAotICAgIDIzNCwgMzUsIDE0MiwgMzIsIDIzNSwgMTc3LCAyNDAsIDIxNywgMTQyLCAzMiwgMjMzLCAyNDksIDE0MiwgMzIsIDIzMCwgCi0gICAgMTg0LCAxNDIsIDMyLCAyMzMsIDI1MywgMTQyLCAzMiwgMjM0LCAyMDYsIDE0MiwgMzIsIDIzMCwgOTUsIDE0MiwgMzIsIAotICAgIDI0MywgOTIsIDE0MiwgMzIsIDI1MCwgMTQwLCAxNDIsIDMyLCAyMjksIDI0MSwgMTQyLCAzMiwgMjMxLCA2NCwgMTQyLCAzMiwgCi0gICAgMjM2LCA2MiwgMTQyLCAzMiwgMjM2LCAyNCwgMTQyLCAzMiwgMjI3LCAyMjQsIDE0MiwgMzIsIDE4LCAyMzAsIDk2LCAxNDIsIAotICAgIDMyLCAyMzQsIDE4MCwgMTQyLCAzMiwgMjM2LCAxMzEsIDE0MiwgMzIsIDIzMCwgMjM1LCAxNDIsIDMyLCAyMzQsIDEzOSwgCi0gICAgMTQyLCAzMiwgMjMxLCA3MiwgMTQyLCAzMiwgMjMzLCAzMywgMTQyLCAzMiwgMjM2LCAxOTUsIDE0MiwgMzIsIDIzMiwgMTk1LCAKLSAgICAxNDIsIDMyLCAyMzEsIDEzNCwgMTQyLCAzMiwgMjU0LCA4OSwgMTQ1LCAyMzksIDExNywgMTQyLCAzMiwgMjMyLCA0MywgCi0gICAgMTQyLCAzMiwgMjQzLCAxNTEsIDE4MCwgMjQxLCAxOTEsIDE0MiwgMzIsIDIzMCwgNTUsIDE0MiwgMzIsIDI0MCwgMjMsIAotICAgIDE0MiwgMzIsIDIzMSwgNzYsIDE0MiwgMzIsIDIyOSwgMTcsIDE0MiwgMzIsIDIzNCwgMTg4LCAxNDIsIDMyLCAyMzYsIDIwMSwgCi0gICAgMTQyLCAzMiwgMjM2LCA4NCwgMTQyLCAzMiwgMjM1LCA0LCAxNDUsIDIzNSwgMTAsIDE0MiwgMzIsIDIzMCwgMjM4LCAxNDIsIAotICAgIDMyLCAyMzMsIDIxOCwgMTQyLCAzMiwgMjMyLCAxODIsIDE0MiwgMzIsIDI0MCwgNjcsIDE0MiwgMzIsIDIyNywgMjI3LCAKLSAgICAxNDIsIDMyLCAyMzcsIDU4LCAyMzgsIDI2LCAxNDIsIDMyLCAyMjksIDIxLCAxNDIsIDMyLCAyMzIsIDI0LCAyNTMsIDc5LCAKLSAgICAxNDIsIDMyLCAyMzQsIDE1NCwgMTQyLCAzMiwgMjI3LCAyMTQsIDE0MiwgMzIsIDIyNywgMTYzLCAxNDIsIDMyLCAyMzgsIAotICAgIDE5MSwgMTQyLCAzMiwgMjM4LCA4MSwgMTQyLCAzMiwgMjM0LCAyMjIsIDE0MiwgMzIsIDIzOSwgNDIsIDE0MiwgMzIsIDIzMCwgCi0gICAgMjQ0LCAxNDIsIDMyLCAyMzAsIDI0MywgMTQyLCAzMiwgMjM0LCA1NSwgMTQyLCAzMiwgMjMwLCA1OCwgMTQyLCAzMiwgMjMxLCAKLSAgICAxNDAsIDE0MiwgMzIsIDIzMywgMzAsIDE0MiwgMzIsIDIzMiwgMjAxLCAxNDIsIDMyLCAyMjksIDE4MywgMTQyLCAzMiwgCi0gICAgMjM0LCAzMiwgMTQyLCAzMiwgMjM0LCAxMDAsIDE0MiwgMzIsIDIyOCwgMjIzLCAxNDIsIDMyLCAyMjksIDIzOSwgMTQyLCAKLSAgICAzMiwgMjU0LCAyMjMsIDI1MiwgMjMwLCAyNDAsIDc1LCAxNDIsIDMyLCAyMjcsIDIyNiwgMTQyLCAzMiwgMjMxLCA5NiwgCi0gICAgMTQyLCAzMiwgMjMxLCA3MCwgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIyOSwgMjEsIDExOCwgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIyOSwgMjEsIDExMywgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIyOSwgMjEsIDE2NiwgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIyOSwgMjEsIDE1OCwgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIyOSwgMjEsIDE3MywgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIyOSwgMjEsIDE4MywgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIyOSwgMjEsIDE5NCwgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIyOSwgMjEsIDE4NywgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIyOSwgMjEsIDE5MiwgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIzOCwgMjEsIDExOCwgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIzOCwgMjEsIDExMywgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIzOCwgMjEsIDE2NiwgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIzOCwgMjEsIDE1OCwgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIzOCwgMjEsIDE3MywgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIzOCwgMjEsIDE4MywgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIzOCwgMjEsIDE5NCwgMjMzLCA4NSwgMjUzLCAyLCAyNDYsIDIzOCwgMjEsIDE4NywgMjMzLCA4NSwgMjUzLCAyLCAKLSAgICAyNDYsIDIzOCwgMjEsIDE5MiwgMTIsIDE4LCA2LCA1NywgMTIsIDE4LCA2LCAyNTQsIDE4NSwgMTIsIDE4LCA2LCAyNTQsIAotICAgIDE5NCwgMTIsIDE4LCA2LCAyMjIsIDIyMiwgMTIsIDE4LCA2LCA3MiwgMTIsIDE4LCA2LCAyNTQsIDE5MSwgMTIsIDE4LCA2LCAKLSAgICAyMTQsIDEyLCAxOCwgNiwgMjEyLCAxMiwgMTgsIDYsIDc0LCAxMiwgMTgsIDYsIDI1NCwgMTkyLCAxMiwgMTgsIDYsIDI1NCwgCi0gICAgMTg2LCAxMiwgMTgsIDYsIDE0OSwgMTIsIDE4LCA2LCAxODUsIDEyLCAxOCwgNiwgMTk5LCAxMiwgMTgsIDYsIDczLCAxMiwgCi0gICAgMTgsIDYsIDI1NCwgMTg3LCAxMiwgMTgsIDYsIDI1NCwgMTk2LCAxMiwgMTgsIDYsIDE0NiwgMTIsIDE4LCA2LCAxOTMsIDEyLCAKLSAgICAxOCwgNiwgMjU0LCAxODMsIDEyLCAxOCwgNiwgNjYsIDEyLCAxOCwgNiwgMTk2LCAxMiwgMTgsIDYsIDI1NCwgMTk1LCAxMiwgCi0gICAgMTgsIDYsIDI1NCwgMTg0LCAxMiwgMTgsIDYsIDI1NCwgMTkwLCAxMiwgMTgsIDYsIDI1NCwgMTkzLCAxMiwgMTgsIDMsIDU3LCAKLSAgICAxMiwgMTgsIDMsIDI1NCwgMTg1LCAxMiwgMTgsIDMsIDI1NCwgMTk0LCAxMiwgMTgsIDMsIDIyMiwgMjIyLCAxMiwgMTgsIDMsIAotICAgIDcyLCAxMiwgMTgsIDMsIDI1NCwgMTkxLCAxMiwgMTgsIDMsIDIxNCwgMTIsIDE4LCAzLCAyMTIsIDEyLCAxOCwgMywgNzQsIAotICAgIDEyLCAxOCwgMywgMjU0LCAxOTIsIDEyLCAxOCwgMywgMjU0LCAxODYsIDEyLCAxOCwgMywgMTQ5LCAxMiwgMTgsIDMsIDE4NSwgCi0gICAgMTIsIDE4LCAzLCAxOTksIDEyLCAxOCwgMywgNzMsIDEyLCAxOCwgMywgMjU0LCAxODcsIDEyLCAxOCwgMywgMjU0LCAxOTYsIAotICAgIDEyLCAxOCwgMywgMTQ2LCAxMiwgMTgsIDMsIDE5MywgMTIsIDE4LCAzLCAyNTQsIDE4MywgMTIsIDE4LCAzLCA2NiwgMTIsIAotICAgIDE4LCAzLCAxOTYsIDEyLCAxOCwgMywgMjU0LCAxOTUsIDEyLCAxOCwgMywgMjU0LCAxODQsIDEyLCAxOCwgMywgMjU0LCAKLSAgICAxOTAsIDEyLCAxOCwgMywgMjU0LCAxOTMsIDEyLCAyNywgNiwgNTcsIDEyLCAyNywgNiwgMjU0LCAxODUsIDEyLCAyNywgNiwgCi0gICAgMjU0LCAxOTQsIDEyLCAyNywgNiwgMjIyLCAyMjIsIDEyLCAyNywgNiwgNzIsIDEyLCAyNywgNiwgMjU0LCAxOTEsIDEyLCAKLSAgICAyNywgNiwgMjE0LCAxMiwgMjcsIDYsIDIxMiwgMTIsIDI3LCA2LCA3NCwgMTIsIDI3LCA2LCAyNTQsIDE5MiwgMTIsIDI3LCAKLSAgICA2LCAyNTQsIDE4NiwgMTIsIDI3LCA2LCAxNDksIDEyLCAyNywgNiwgMTg1LCAxMiwgMjcsIDYsIDE5OSwgMTIsIDI3LCA2LCAKLSAgICA3MywgMTIsIDI3LCA2LCAyNTQsIDE4NywgMTIsIDI3LCA2LCAyNTQsIDE5NiwgMTIsIDI3LCA2LCAxNDYsIDEyLCAyNywgNiwgCi0gICAgMTkzLCAxMiwgMjcsIDYsIDI1NCwgMTgzLCAxMiwgMjcsIDYsIDY2LCAxMiwgMjcsIDYsIDE5NiwgMTIsIDI3LCA2LCAyNTQsIAotICAgIDE5NSwgMTIsIDI3LCA2LCAyNTQsIDE4NCwgMTIsIDI3LCA2LCAyNTQsIDE5MCwgMTIsIDI3LCA2LCAyNTQsIDE5MywgMTIsIAotICAgIDI3LCAzLCA1NywgMTIsIDI3LCAzLCAyNTQsIDE4NSwgMTIsIDI3LCAzLCAyNTQsIDE5NCwgMTIsIDI3LCAzLCAyMjIsIDIyMiwgCi0gICAgMTIsIDI3LCAzLCA3MiwgMTIsIDI3LCAzLCAyNTQsIDE5MSwgMTIsIDI3LCAzLCAyMTQsIDEyLCAyNywgMywgNzQsIDEyLCAKLSAgICAyNywgMywgMjU0LCAxOTIsIDEyLCAyNywgMywgMjU0LCAxODYsIDEyLCAyNywgMywgMTQ5LCAxMiwgMjcsIDMsIDE4NSwgMTIsIAotICAgIDI3LCAzLCAxOTksIDEyLCAyNywgMywgNzMsIDEyLCAyNywgMywgMjU0LCAxODcsIDEyLCAyNywgMywgMjU0LCAxOTYsIDEyLCAKLSAgICAyNywgMywgMTQ2LCAxMiwgMjcsIDMsIDE5MywgMTIsIDI3LCAzLCAyNTQsIDE4MywgMTIsIDI3LCAzLCA2NiwgMTIsIDI3LCAKLSAgICAzLCAxOTYsIDEyLCAyNywgMywgMjU0LCAxOTUsIDEyLCAyNywgMywgMjU0LCAxODQsIDEyLCAyNywgMywgMjU0LCAxOTAsIAotICAgIDEyLCAyNywgMywgMjU0LCAxOTMsIDEyLCAxOCwgMjcsIDYsIDU3LCAxMiwgMTgsIDI3LCA2LCAyNTQsIDE4NSwgMTIsIDE4LCAKLSAgICAyNywgNiwgMjU0LCAxOTQsIDEyLCAxOCwgMjcsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDI3LCA2LCA3MiwgMTIsIDE4LCAyNywgCi0gICAgNiwgMjU0LCAxOTEsIDEyLCAxOCwgMjcsIDYsIDIxNCwgMTIsIDE4LCAyNywgNiwgMjEyLCAxMiwgMTgsIDI3LCA2LCA3NCwgCi0gICAgMTIsIDE4LCAyNywgNiwgMjU0LCAxOTIsIDEyLCAxOCwgMjcsIDYsIDI1NCwgMTg2LCAxMiwgMTgsIDI3LCA2LCAxNDksIDEyLCAKLSAgICAxOCwgMjcsIDYsIDE4NSwgMTIsIDE4LCAyNywgNiwgMTk5LCAxMiwgMTgsIDI3LCA2LCA3MywgMTIsIDE4LCAyNywgNiwgCi0gICAgMjU0LCAxODcsIDEyLCAxOCwgMjcsIDYsIDI1NCwgMTk2LCAxMiwgMTgsIDI3LCA2LCAxNDYsIDEyLCAxOCwgMjcsIDYsIAotICAgIDE5MywgMTIsIDE4LCAyNywgNiwgMjU0LCAxODMsIDEyLCAxOCwgMjcsIDYsIDY2LCAxMiwgMTgsIDI3LCA2LCAxOTYsIDEyLCAKLSAgICAxOCwgMjcsIDYsIDI1NCwgMTk1LCAxMiwgMTgsIDI3LCA2LCAyNTQsIDE4NCwgMTIsIDE4LCAyNywgNiwgMjU0LCAxOTAsIAotICAgIDEyLCAxOCwgMjcsIDYsIDI1NCwgMTkzLCAxMiwgMTgsIDI3LCAzLCA1NywgMTIsIDE4LCAyNywgMywgMjU0LCAxODUsIDEyLCAKLSAgICAxOCwgMjcsIDMsIDI1NCwgMTk0LCAxMiwgMTgsIDI3LCAzLCAyMjIsIDIyMiwgMTIsIDE4LCAyNywgMywgNzIsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDI1NCwgMTkxLCAxMiwgMTgsIDI3LCAzLCAyMTQsIDEyLCAxOCwgMjcsIDMsIDIxMiwgMTIsIDE4LCAyNywgMywgCi0gICAgNzQsIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTkyLCAxMiwgMTgsIDI3LCAzLCAyNTQsIDE4NiwgMTIsIDE4LCAyNywgMywgMTQ5LCAKLSAgICAxMiwgMTgsIDI3LCAzLCAxODUsIDEyLCAxOCwgMjcsIDMsIDE5OSwgMTIsIDE4LCAyNywgMywgNzMsIDEyLCAxOCwgMjcsIDMsIAotICAgIDI1NCwgMTg3LCAxMiwgMTgsIDI3LCAzLCAyNTQsIDE5NiwgMTIsIDE4LCAyNywgMywgMTQ2LCAxMiwgMTgsIDI3LCAzLCAKLSAgICAxOTMsIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTgzLCAxMiwgMTgsIDI3LCAzLCA2NiwgMTIsIDE4LCAyNywgMywgMTk2LCAxMiwgCi0gICAgMTgsIDI3LCAzLCAyNTQsIDE5NSwgMTIsIDE4LCAyNywgMywgMjU0LCAxODQsIDEyLCAxOCwgMjcsIDMsIDI1NCwgMTkwLCAKLSAgICAxMiwgMTgsIDI3LCAzLCAyNTQsIDE5MywgMTIsIDk1LCA2LCA1NywgMTIsIDk1LCA2LCAyNTQsIDE5NCwgMTIsIDk1LCA2LCAKLSAgICAyMjIsIDIyMiwgMTIsIDk1LCA2LCAyMTQsIDEyLCA5NSwgNiwgMjU0LCAxOTIsIDEyLCA5NSwgNiwgMjU0LCAxODYsIDEyLCAKLSAgICA5NSwgNiwgMTk5LCAxMiwgOTUsIDYsIDczLCAxMiwgOTUsIDYsIDI1NCwgMTg3LCAxMiwgOTUsIDYsIDI1NCwgMTk2LCAxMiwgCi0gICAgOTUsIDYsIDE5MywgMTIsIDk1LCA2LCAyNTQsIDE4MywgMTIsIDk1LCA2LCA2NiwgMTIsIDk1LCA2LCAxOTYsIDEyLCA5NSwgCi0gICAgNiwgMjU0LCAxOTUsIDEyLCA5NSwgNiwgMjU0LCAxODQsIDEyLCA5NSwgNiwgMjU0LCAxOTAsIDEyLCA5NSwgNiwgMjU0LCAKLSAgICAxOTMsIDEyLCA5NSwgMywgNTcsIDEyLCA5NSwgMywgMjU0LCAxODUsIDEyLCA5NSwgMywgMjU0LCAxOTQsIDEyLCA5NSwgMywgCi0gICAgMjIyLCAyMjIsIDEyLCA5NSwgMywgMjU0LCAxOTEsIDEyLCA5NSwgMywgMjEyLCAxMiwgOTUsIDMsIDc0LCAxMiwgOTUsIDMsIAotICAgIDI1NCwgMTkyLCAxMiwgOTUsIDMsIDI1NCwgMTg2LCAxMiwgOTUsIDMsIDE0OSwgMTIsIDk1LCAzLCAxODUsIDEyLCA5NSwgMywgCi0gICAgMTk5LCAxMiwgOTUsIDMsIDI1NCwgMTg3LCAxMiwgOTUsIDMsIDI1NCwgMTk2LCAxMiwgOTUsIDMsIDE0NiwgMTIsIDk1LCAzLCAKLSAgICAxOTMsIDEyLCA5NSwgMywgMjU0LCAxODMsIDEyLCA5NSwgMywgNjYsIDEyLCA5NSwgMywgMTk2LCAxMiwgOTUsIDMsIDI1NCwgCi0gICAgMTk1LCAxMiwgOTUsIDMsIDI1NCwgMTg0LCAxMiwgOTUsIDMsIDI1NCwgMTkwLCAxMiwgOTUsIDMsIDI1NCwgMTkzLCAxMiwgCi0gICAgMTgsIDk1LCA2LCA1NywgMTIsIDE4LCA5NSwgNiwgMjU0LCAxODUsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTk0LCAxMiwgMTgsIAotICAgIDk1LCA2LCAyMjIsIDIyMiwgMTIsIDE4LCA5NSwgNiwgNzIsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTkxLCAxMiwgMTgsIDk1LCAKLSAgICA2LCAyMTQsIDEyLCAxOCwgOTUsIDYsIDIxMiwgMTIsIDE4LCA5NSwgNiwgNzQsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTkyLCAKLSAgICAxMiwgMTgsIDk1LCA2LCAyNTQsIDE4NiwgMTIsIDE4LCA5NSwgNiwgMTQ5LCAxMiwgMTgsIDk1LCA2LCAxODUsIDEyLCAxOCwgCi0gICAgOTUsIDYsIDE5OSwgMTIsIDE4LCA5NSwgNiwgNzMsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTg3LCAxMiwgMTgsIDk1LCA2LCAKLSAgICAyNTQsIDE5NiwgMTIsIDE4LCA5NSwgNiwgMTQ2LCAxMiwgMTgsIDk1LCA2LCAxOTMsIDEyLCAxOCwgOTUsIDYsIDI1NCwgCi0gICAgMTgzLCAxMiwgMTgsIDk1LCA2LCA2NiwgMTIsIDE4LCA5NSwgNiwgMTk2LCAxMiwgMTgsIDk1LCA2LCAyNTQsIDE5NSwgMTIsIAotICAgIDE4LCA5NSwgNiwgMjU0LCAxODQsIDEyLCAxOCwgOTUsIDYsIDI1NCwgMTkwLCAxMiwgMTgsIDk1LCA2LCAyNTQsIDE5MywgCi0gICAgMTIsIDE4LCA5NSwgMywgNTcsIDEyLCAxOCwgOTUsIDMsIDI1NCwgMTg1LCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE5NCwgMTIsIAotICAgIDE4LCA5NSwgMywgMjIyLCAyMjIsIDEyLCAxOCwgOTUsIDMsIDcyLCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE5MSwgMTIsIDE4LCAKLSAgICA5NSwgMywgMjE0LCAxMiwgMTgsIDk1LCAzLCAyMTIsIDEyLCAxOCwgOTUsIDMsIDc0LCAxMiwgMTgsIDk1LCAzLCAyNTQsIAotICAgIDE5MiwgMTIsIDE4LCA5NSwgMywgMjU0LCAxODYsIDEyLCAxOCwgOTUsIDMsIDE0OSwgMTIsIDE4LCA5NSwgMywgMTg1LCAxMiwgCi0gICAgMTgsIDk1LCAzLCAxOTksIDEyLCAxOCwgOTUsIDMsIDczLCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE4NywgMTIsIDE4LCA5NSwgCi0gICAgMywgMjU0LCAxOTYsIDEyLCAxOCwgOTUsIDMsIDE0NiwgMTIsIDE4LCA5NSwgMywgMTkzLCAxMiwgMTgsIDk1LCAzLCAyNTQsIAotICAgIDE4MywgMTIsIDE4LCA5NSwgMywgNjYsIDEyLCAxOCwgOTUsIDMsIDE5NiwgMTIsIDE4LCA5NSwgMywgMjU0LCAxOTUsIDEyLCAKLSAgICAxOCwgOTUsIDMsIDI1NCwgMTg0LCAxMiwgMTgsIDk1LCAzLCAyNTQsIDE5MCwgMTIsIDE4LCA5NSwgMywgMjU0LCAxOTMsIAotICAgIDEyLCAxMTAsIDYsIDU3LCAxMiwgMTEwLCA2LCAyNTQsIDE4NSwgMTIsIDExMCwgNiwgMjIyLCAyMjIsIDEyLCAxMTAsIDYsIAotICAgIDcyLCAxMiwgMTEwLCA2LCAyNTQsIDE5MSwgMTIsIDExMCwgNiwgMjE0LCAxMiwgMTEwLCA2LCAyNTQsIDE5MiwgMTIsIDExMCwgCi0gICAgNiwgMjU0LCAxODYsIDEyLCAxMTAsIDYsIDE0OSwgMTIsIDExMCwgNiwgMTg1LCAxMiwgMTEwLCA2LCAxOTksIDEyLCAxMTAsIAotICAgIDYsIDczLCAxMiwgMTEwLCA2LCAyNTQsIDE4NywgMTIsIDExMCwgNiwgMjU0LCAxOTYsIDEyLCAxMTAsIDYsIDE5MywgMTIsIAotICAgIDExMCwgNiwgMjU0LCAxODMsIDEyLCAxMTAsIDYsIDY2LCAxMiwgMTEwLCA2LCAxOTYsIDEyLCAxMTAsIDYsIDI1NCwgMTk1LCAKLSAgICAxMiwgMTEwLCA2LCAyNTQsIDE4NCwgMTIsIDExMCwgNiwgMjU0LCAxOTAsIDEyLCAxMTAsIDMsIDU3LCAxMiwgMTEwLCAzLCAKLSAgICAyNTQsIDE4NSwgMTIsIDExMCwgMywgMjU0LCAxOTQsIDEyLCAxMTAsIDMsIDIyMiwgMjIyLCAxMiwgMTEwLCAzLCA3MiwgMTIsIAotICAgIDExMCwgMywgMjU0LCAxOTEsIDEyLCAxMTAsIDMsIDIxNCwgMTIsIDExMCwgMywgMjEyLCAxMiwgMTEwLCAzLCA3NCwgMTIsIAotICAgIDExMCwgMywgMjU0LCAxOTIsIDEyLCAxMTAsIDMsIDI1NCwgMTg2LCAxMiwgMTEwLCAzLCAxNDksIDEyLCAxMTAsIDMsIDE4NSwgCi0gICAgMTIsIDExMCwgMywgMTk5LCAxMiwgMTEwLCAzLCA3MywgMTIsIDExMCwgMywgMjU0LCAxODcsIDEyLCAxMTAsIDMsIDI1NCwgCi0gICAgMTk2LCAxMiwgMTEwLCAzLCAxNDYsIDEyLCAxMTAsIDMsIDE5MywgMTIsIDExMCwgMywgMjU0LCAxODMsIDEyLCAxMTAsIDMsIAotICAgIDY2LCAxMiwgMTEwLCAzLCAxOTYsIDEyLCAxMTAsIDMsIDI1NCwgMTk1LCAxMiwgMTEwLCAzLCAyNTQsIDE4NCwgMTIsIDExMCwgCi0gICAgMywgMjU0LCAxOTAsIDEyLCAxMTAsIDMsIDI1NCwgMTkzLCAxMiwgMTU5LCA2LCA1NywgMTIsIDE1OSwgNiwgMjU0LCAxODUsIAotICAgIDEyLCAxNTksIDYsIDIyMiwgMjIyLCAxMiwgMTU5LCA2LCA3MiwgMTIsIDE1OSwgNiwgMjU0LCAxOTEsIDEyLCAxNTksIDYsIAotICAgIDIxNCwgMTIsIDE1OSwgNiwgNzQsIDEyLCAxNTksIDYsIDI1NCwgMTkyLCAxMiwgMTU5LCA2LCAyNTQsIDE4NiwgMTIsIDE1OSwgCi0gICAgNiwgMTQ5LCAxMiwgMTU5LCA2LCAxODUsIDEyLCAxNTksIDYsIDczLCAxMiwgMTU5LCA2LCAxOTMsIDEyLCAxNTksIDYsIAotICAgIDI1NCwgMTgzLCAxMiwgMTU5LCA2LCA2NiwgMTIsIDE1OSwgNiwgMTk2LCAxMiwgMTU5LCA2LCAyNTQsIDE5NSwgMTIsIDE1OSwgCi0gICAgNiwgMjU0LCAxODQsIDEyLCAxNTksIDYsIDI1NCwgMTkwLCAxMiwgMTU5LCAzLCA1NywgMTIsIDE1OSwgMywgMjU0LCAxODUsIAotICAgIDEyLCAxNTksIDMsIDI1NCwgMTk0LCAxMiwgMTU5LCAzLCAyMjIsIDIyMiwgMTIsIDE1OSwgMywgNzIsIDEyLCAxNTksIDMsIAotICAgIDI1NCwgMTkxLCAxMiwgMTU5LCAzLCAyMTQsIDEyLCAxNTksIDMsIDIxMiwgMTIsIDE1OSwgMywgNzQsIDEyLCAxNTksIDMsIAotICAgIDI1NCwgMTkyLCAxMiwgMTU5LCAzLCAyNTQsIDE4NiwgMTIsIDE1OSwgMywgMTQ5LCAxMiwgMTU5LCAzLCAxODUsIDEyLCAKLSAgICAxNTksIDMsIDE5OSwgMTIsIDE1OSwgMywgNzMsIDEyLCAxNTksIDMsIDI1NCwgMTg3LCAxMiwgMTU5LCAzLCAyNTQsIDE5NiwgCi0gICAgMTIsIDE1OSwgMywgMTQ2LCAxMiwgMTU5LCAzLCAxOTMsIDEyLCAxNTksIDMsIDI1NCwgMTgzLCAxMiwgMTU5LCAzLCA2NiwgCi0gICAgMTIsIDE1OSwgMywgMTk2LCAxMiwgMTU5LCAzLCAyNTQsIDE5NSwgMTIsIDE1OSwgMywgMjU0LCAxODQsIDEyLCAxNTksIDMsIAotICAgIDI1NCwgMTkwLCAxMiwgMTU5LCAzLCAyNTQsIDE5MywgMTIsIDE4LCAxMTAsIDYsIDU3LCAxMiwgMTgsIDExMCwgNiwgMjU0LCAKLSAgICAxODUsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5NCwgMTIsIDE4LCAxMTAsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDExMCwgNiwgCi0gICAgNzIsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5MSwgMTIsIDE4LCAxMTAsIDYsIDIxNCwgMTIsIDE4LCAxMTAsIDYsIDIxMiwgCi0gICAgMTIsIDE4LCAxMTAsIDYsIDc0LCAxMiwgMTgsIDExMCwgNiwgMjU0LCAxOTIsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE4NiwgCi0gICAgMTIsIDE4LCAxMTAsIDYsIDE0OSwgMTIsIDE4LCAxMTAsIDYsIDE4NSwgMTIsIDE4LCAxMTAsIDYsIDE5OSwgMTIsIDE4LCAKLSAgICAxMTAsIDYsIDczLCAxMiwgMTgsIDExMCwgNiwgMjU0LCAxODcsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5NiwgMTIsIDE4LCAKLSAgICAxMTAsIDYsIDE0NiwgMTIsIDE4LCAxMTAsIDYsIDE5MywgMTIsIDE4LCAxMTAsIDYsIDI1NCwgMTgzLCAxMiwgMTgsIDExMCwgCi0gICAgNiwgNjYsIDEyLCAxOCwgMTEwLCA2LCAxOTYsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5NSwgMTIsIDE4LCAxMTAsIDYsIAotICAgIDI1NCwgMTg0LCAxMiwgMTgsIDExMCwgNiwgMjU0LCAxOTAsIDEyLCAxOCwgMTEwLCA2LCAyNTQsIDE5MywgMTIsIDE4LCAKLSAgICAxMTAsIDMsIDU3LCAxMiwgMTgsIDExMCwgMywgMjU0LCAxODUsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE5NCwgMTIsIDE4LCAKLSAgICAxMTAsIDMsIDIyMiwgMjIyLCAxMiwgMTgsIDExMCwgMywgNzIsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE5MSwgMTIsIDE4LCAKLSAgICAxMTAsIDMsIDIxNCwgMTIsIDE4LCAxMTAsIDMsIDIxMiwgMTIsIDE4LCAxMTAsIDMsIDc0LCAxMiwgMTgsIDExMCwgMywgCi0gICAgMjU0LCAxOTIsIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE4NiwgMTIsIDE4LCAxMTAsIDMsIDE0OSwgMTIsIDE4LCAxMTAsIDMsIAotICAgIDE4NSwgMTIsIDE4LCAxMTAsIDMsIDE5OSwgMTIsIDE4LCAxMTAsIDMsIDczLCAxMiwgMTgsIDExMCwgMywgMjU0LCAxODcsIAotICAgIDEyLCAxOCwgMTEwLCAzLCAyNTQsIDE5NiwgMTIsIDE4LCAxMTAsIDMsIDE0NiwgMTIsIDE4LCAxMTAsIDMsIDE5MywgMTIsIAotICAgIDE4LCAxMTAsIDMsIDI1NCwgMTgzLCAxMiwgMTgsIDExMCwgMywgNjYsIDEyLCAxOCwgMTEwLCAzLCAxOTYsIDEyLCAxOCwgCi0gICAgMTEwLCAzLCAyNTQsIDE5NSwgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMTg0LCAxMiwgMTgsIDExMCwgMywgMjU0LCAxOTAsIDEyLCAKLSAgICAxOCwgMTEwLCAzLCAyNTQsIDE5MywgMTIsIDMwLCA2LCA1NywgMTIsIDMwLCA2LCAyNTQsIDE4NSwgMTIsIDMwLCA2LCAyNTQsIAotICAgIDE5NCwgMTIsIDMwLCA2LCAyMjIsIDIyMiwgMTIsIDMwLCA2LCA3MiwgMTIsIDMwLCA2LCAyNTQsIDE5MSwgMTIsIDMwLCA2LCAKLSAgICAyMTQsIDEyLCAzMCwgNiwgMjEyLCAxMiwgMzAsIDYsIDc0LCAxMiwgMzAsIDYsIDI1NCwgMTkyLCAxMiwgMzAsIDYsIDI1NCwgCi0gICAgMTg2LCAxMiwgMzAsIDYsIDE0OSwgMTIsIDMwLCA2LCAxODUsIDEyLCAzMCwgNiwgMTk5LCAxMiwgMzAsIDYsIDczLCAxMiwgCi0gICAgMzAsIDYsIDI1NCwgMTg3LCAxMiwgMzAsIDYsIDI1NCwgMTk2LCAxMiwgMzAsIDYsIDE0NiwgMTIsIDMwLCA2LCAxOTMsIDEyLCAKLSAgICAzMCwgNiwgMjU0LCAxODMsIDEyLCAzMCwgNiwgNjYsIDEyLCAzMCwgNiwgMTk2LCAxMiwgMzAsIDYsIDI1NCwgMTk1LCAxMiwgCi0gICAgMzAsIDYsIDI1NCwgMTg0LCAxMiwgMzAsIDYsIDI1NCwgMTkwLCAxMiwgMzAsIDYsIDI1NCwgMTkzLCAxMiwgMzAsIDMsIDU3LCAKLSAgICAxMiwgMzAsIDMsIDI1NCwgMTg1LCAxMiwgMzAsIDMsIDI1NCwgMTk0LCAxMiwgMzAsIDMsIDIyMiwgMjIyLCAxMiwgMzAsIDMsIAotICAgIDcyLCAxMiwgMzAsIDMsIDI1NCwgMTkxLCAxMiwgMzAsIDMsIDIxNCwgMTIsIDMwLCAzLCAyMTIsIDEyLCAzMCwgMywgNzQsIAotICAgIDEyLCAzMCwgMywgMjU0LCAxOTIsIDEyLCAzMCwgMywgMjU0LCAxODYsIDEyLCAzMCwgMywgMTQ5LCAxMiwgMzAsIDMsIDE4NSwgCi0gICAgMTIsIDMwLCAzLCAxOTksIDEyLCAzMCwgMywgNzMsIDEyLCAzMCwgMywgMjU0LCAxODcsIDEyLCAzMCwgMywgMjU0LCAxOTYsIAotICAgIDEyLCAzMCwgMywgMTQ2LCAxMiwgMzAsIDMsIDE5MywgMTIsIDMwLCAzLCAyNTQsIDE4MywgMTIsIDMwLCAzLCA2NiwgMTIsIAotICAgIDMwLCAzLCAxOTYsIDEyLCAzMCwgMywgMjU0LCAxOTUsIDEyLCAzMCwgMywgMjU0LCAxODQsIDEyLCAzMCwgMywgMjU0LCAKLSAgICAxOTAsIDEyLCAzMCwgMywgMjU0LCAxOTMsIDEyLCAzMCwgMTgsIDYsIDU3LCAxMiwgMzAsIDE4LCA2LCAyNTQsIDE4NSwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjU0LCAxOTQsIDEyLCAzMCwgMTgsIDYsIDIyMiwgMjIyLCAxMiwgMzAsIDE4LCA2LCA3MiwgMTIsIDMwLCAKLSAgICAxOCwgNiwgMjU0LCAxOTEsIDEyLCAzMCwgMTgsIDYsIDIxNCwgMTIsIDMwLCAxOCwgNiwgMjEyLCAxMiwgMzAsIDE4LCA2LCAKLSAgICA3NCwgMTIsIDMwLCAxOCwgNiwgMjU0LCAxOTIsIDEyLCAzMCwgMTgsIDYsIDI1NCwgMTg2LCAxMiwgMzAsIDE4LCA2LCAxNDksIAotICAgIDEyLCAzMCwgMTgsIDYsIDE4NSwgMTIsIDMwLCAxOCwgNiwgMTk5LCAxMiwgMzAsIDE4LCA2LCA3MywgMTIsIDMwLCAxOCwgNiwgCi0gICAgMjU0LCAxODcsIDEyLCAzMCwgMTgsIDYsIDI1NCwgMTk2LCAxMiwgMzAsIDE4LCA2LCAxNDYsIDEyLCAzMCwgMTgsIDYsIAotICAgIDE5MywgMTIsIDMwLCAxOCwgNiwgMjU0LCAxODMsIDEyLCAzMCwgMTgsIDYsIDY2LCAxMiwgMzAsIDE4LCA2LCAxOTYsIDEyLCAKLSAgICAzMCwgMTgsIDYsIDI1NCwgMTk1LCAxMiwgMzAsIDE4LCA2LCAyNTQsIDE4NCwgMTIsIDMwLCAxOCwgNiwgMjU0LCAxOTAsIAotICAgIDEyLCAzMCwgMTgsIDYsIDI1NCwgMTkzLCAxMiwgMzAsIDE4LCAzLCA1NywgMTIsIDMwLCAxOCwgMywgMjU0LCAxODUsIDEyLCAKLSAgICAzMCwgMTgsIDMsIDI1NCwgMTk0LCAxMiwgMzAsIDE4LCAzLCAyMjIsIDIyMiwgMTIsIDMwLCAxOCwgMywgNzIsIDEyLCAzMCwgCi0gICAgMTgsIDMsIDI1NCwgMTkxLCAxMiwgMzAsIDE4LCAzLCAyMTQsIDEyLCAzMCwgMTgsIDMsIDIxMiwgMTIsIDMwLCAxOCwgMywgCi0gICAgNzQsIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTkyLCAxMiwgMzAsIDE4LCAzLCAyNTQsIDE4NiwgMTIsIDMwLCAxOCwgMywgMTQ5LCAKLSAgICAxMiwgMzAsIDE4LCAzLCAxODUsIDEyLCAzMCwgMTgsIDMsIDE5OSwgMTIsIDMwLCAxOCwgMywgNzMsIDEyLCAzMCwgMTgsIDMsIAotICAgIDI1NCwgMTg3LCAxMiwgMzAsIDE4LCAzLCAyNTQsIDE5NiwgMTIsIDMwLCAxOCwgMywgMTQ2LCAxMiwgMzAsIDE4LCAzLCAKLSAgICAxOTMsIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTgzLCAxMiwgMzAsIDE4LCAzLCA2NiwgMTIsIDMwLCAxOCwgMywgMTk2LCAxMiwgCi0gICAgMzAsIDE4LCAzLCAyNTQsIDE5NSwgMTIsIDMwLCAxOCwgMywgMjU0LCAxODQsIDEyLCAzMCwgMTgsIDMsIDI1NCwgMTkwLCAKLSAgICAxMiwgMzAsIDE4LCAzLCAyNTQsIDE5MywgMTIsIDMwLCAyNywgNiwgNTcsIDEyLCAzMCwgMjcsIDYsIDI1NCwgMTg1LCAxMiwgCi0gICAgMzAsIDI3LCA2LCAyNTQsIDE5NCwgMTIsIDMwLCAyNywgNiwgMjIyLCAyMjIsIDEyLCAzMCwgMjcsIDYsIDcyLCAxMiwgMzAsIAotICAgIDI3LCA2LCAyNTQsIDE5MSwgMTIsIDMwLCAyNywgNiwgMjE0LCAxMiwgMzAsIDI3LCA2LCAyMTIsIDEyLCAzMCwgMjcsIDYsIAotICAgIDc0LCAxMiwgMzAsIDI3LCA2LCAyNTQsIDE5MiwgMTIsIDMwLCAyNywgNiwgMjU0LCAxODYsIDEyLCAzMCwgMjcsIDYsIDE0OSwgCi0gICAgMTIsIDMwLCAyNywgNiwgMTg1LCAxMiwgMzAsIDI3LCA2LCAxOTksIDEyLCAzMCwgMjcsIDYsIDczLCAxMiwgMzAsIDI3LCA2LCAKLSAgICAyNTQsIDE4NywgMTIsIDMwLCAyNywgNiwgMjU0LCAxOTYsIDEyLCAzMCwgMjcsIDYsIDE0NiwgMTIsIDMwLCAyNywgNiwgCi0gICAgMTkzLCAxMiwgMzAsIDI3LCA2LCAyNTQsIDE4MywgMTIsIDMwLCAyNywgNiwgNjYsIDEyLCAzMCwgMjcsIDYsIDE5NiwgMTIsIAotICAgIDMwLCAyNywgNiwgMjU0LCAxOTUsIDEyLCAzMCwgMjcsIDYsIDI1NCwgMTg0LCAxMiwgMzAsIDI3LCA2LCAyNTQsIDE5MCwgCi0gICAgMTIsIDMwLCAyNywgNiwgMjU0LCAxOTMsIDEyLCAzMCwgMjcsIDMsIDU3LCAxMiwgMzAsIDI3LCAzLCAyNTQsIDE4NSwgMTIsIAotICAgIDMwLCAyNywgMywgMjU0LCAxOTQsIDEyLCAzMCwgMjcsIDMsIDIyMiwgMjIyLCAxMiwgMzAsIDI3LCAzLCA3MiwgMTIsIDMwLCAKLSAgICAyNywgMywgMjU0LCAxOTEsIDEyLCAzMCwgMjcsIDMsIDIxNCwgMTIsIDMwLCAyNywgMywgMjEyLCAxMiwgMzAsIDI3LCAzLCAKLSAgICA3NCwgMTIsIDMwLCAyNywgMywgMjU0LCAxOTIsIDEyLCAzMCwgMjcsIDMsIDI1NCwgMTg2LCAxMiwgMzAsIDI3LCAzLCAxNDksIAotICAgIDEyLCAzMCwgMjcsIDMsIDE4NSwgMTIsIDMwLCAyNywgMywgMTk5LCAxMiwgMzAsIDI3LCAzLCA3MywgMTIsIDMwLCAyNywgMywgCi0gICAgMjU0LCAxODcsIDEyLCAzMCwgMjcsIDMsIDI1NCwgMTk2LCAxMiwgMzAsIDI3LCAzLCAxNDYsIDEyLCAzMCwgMjcsIDMsIAotICAgIDE5MywgMTIsIDMwLCAyNywgMywgMjU0LCAxODMsIDEyLCAzMCwgMjcsIDMsIDY2LCAxMiwgMzAsIDI3LCAzLCAxOTYsIDEyLCAKLSAgICAzMCwgMjcsIDMsIDI1NCwgMTk1LCAxMiwgMzAsIDI3LCAzLCAyNTQsIDE4NCwgMTIsIDMwLCAyNywgMywgMjU0LCAxOTAsIAotICAgIDEyLCAzMCwgMjcsIDMsIDI1NCwgMTkzLCAxMiwgMzAsIDE4LCAyNywgNiwgNTcsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIAotICAgIDE4NSwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTk0LCAxMiwgMzAsIDE4LCAyNywgNiwgMjIyLCAyMjIsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCA2LCA3MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTkxLCAxMiwgMzAsIDE4LCAyNywgNiwgMjE0LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgNiwgMjEyLCAxMiwgMzAsIDE4LCAyNywgNiwgNzQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIDE5MiwgCi0gICAgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTg2LCAxMiwgMzAsIDE4LCAyNywgNiwgMTQ5LCAxMiwgMzAsIDE4LCAyNywgNiwgCi0gICAgMTg1LCAxMiwgMzAsIDE4LCAyNywgNiwgMTk5LCAxMiwgMzAsIDE4LCAyNywgNiwgNzMsIDEyLCAzMCwgMTgsIDI3LCA2LCAKLSAgICAyNTQsIDE4NywgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTk2LCAxMiwgMzAsIDE4LCAyNywgNiwgMTQ2LCAxMiwgMzAsIAotICAgIDE4LCAyNywgNiwgMTkzLCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAxODMsIDEyLCAzMCwgMTgsIDI3LCA2LCA2NiwgMTIsIAotICAgIDMwLCAxOCwgMjcsIDYsIDE5NiwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTk1LCAxMiwgMzAsIDE4LCAyNywgNiwgMjU0LCAKLSAgICAxODQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIDE5MCwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1NCwgMTkzLCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgNTcsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDE4NSwgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTk0LCAKLSAgICAxMiwgMzAsIDE4LCAyNywgMywgMjIyLCAyMjIsIDEyLCAzMCwgMTgsIDI3LCAzLCA3MiwgMTIsIDMwLCAxOCwgMjcsIDMsIAotICAgIDI1NCwgMTkxLCAxMiwgMzAsIDE4LCAyNywgMywgMjE0LCAxMiwgMzAsIDE4LCAyNywgMywgMjEyLCAxMiwgMzAsIDE4LCAyNywgCi0gICAgMywgNzQsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDE5MiwgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTg2LCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgMTQ5LCAxMiwgMzAsIDE4LCAyNywgMywgMTg1LCAxMiwgMzAsIDE4LCAyNywgMywgMTk5LCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgNzMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDE4NywgMTIsIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTk2LCAKLSAgICAxMiwgMzAsIDE4LCAyNywgMywgMTQ2LCAxMiwgMzAsIDE4LCAyNywgMywgMTkzLCAxMiwgMzAsIDE4LCAyNywgMywgMjU0LCAKLSAgICAxODMsIDEyLCAzMCwgMTgsIDI3LCAzLCA2NiwgMTIsIDMwLCAxOCwgMjcsIDMsIDE5NiwgMTIsIDMwLCAxOCwgMjcsIDMsIAotICAgIDI1NCwgMTk1LCAxMiwgMzAsIDE4LCAyNywgMywgMjU0LCAxODQsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDE5MCwgMTIsIAotICAgIDMwLCAxOCwgMjcsIDMsIDI1NCwgMTkzLCAxMiwgMTg5LCA2LCA1NywgMTIsIDE4OSwgNiwgMjU0LCAxODUsIDEyLCAxODksIAotICAgIDYsIDI1NCwgMTk0LCAxMiwgMTg5LCA2LCAyMjIsIDIyMiwgMTIsIDE4OSwgNiwgNzIsIDEyLCAxODksIDYsIDI1NCwgMTkxLCAKLSAgICAxMiwgMTg5LCA2LCAyMTQsIDEyLCAxODksIDYsIDIxMiwgMTIsIDE4OSwgNiwgNzQsIDEyLCAxODksIDYsIDI1NCwgMTkyLCAKLSAgICAxMiwgMTg5LCA2LCAyNTQsIDE4NiwgMTIsIDE4OSwgNiwgMTQ5LCAxMiwgMTg5LCA2LCAxODUsIDEyLCAxODksIDYsIDE5OSwgCi0gICAgMTIsIDE4OSwgNiwgNzMsIDEyLCAxODksIDYsIDI1NCwgMTg3LCAxMiwgMTg5LCA2LCAyNTQsIDE5NiwgMTIsIDE4OSwgNiwgCi0gICAgMTQ2LCAxMiwgMTg5LCA2LCAxOTMsIDEyLCAxODksIDYsIDI1NCwgMTgzLCAxMiwgMTg5LCA2LCA2NiwgMTIsIDE4OSwgNiwgCi0gICAgMTk2LCAxMiwgMTg5LCA2LCAyNTQsIDE5NSwgMTIsIDE4OSwgNiwgMjU0LCAxODQsIDEyLCAxODksIDYsIDI1NCwgMTkwLCAKLSAgICAxMiwgMTg5LCA2LCAyNTQsIDE5MywgMTIsIDE4OSwgMywgNTcsIDEyLCAxODksIDMsIDI1NCwgMTg1LCAxMiwgMTg5LCAzLCAKLSAgICAyNTQsIDE5NCwgMTIsIDE4OSwgMywgMjIyLCAyMjIsIDEyLCAxODksIDMsIDcyLCAxMiwgMTg5LCAzLCAyNTQsIDE5MSwgMTIsIAotICAgIDE4OSwgMywgMjE0LCAxMiwgMTg5LCAzLCAyMTIsIDEyLCAxODksIDMsIDc0LCAxMiwgMTg5LCAzLCAyNTQsIDE5MiwgMTIsIAotICAgIDE4OSwgMywgMjU0LCAxODYsIDEyLCAxODksIDMsIDE0OSwgMTIsIDE4OSwgMywgMTg1LCAxMiwgMTg5LCAzLCAxOTksIDEyLCAKLSAgICAxODksIDMsIDczLCAxMiwgMTg5LCAzLCAyNTQsIDE4NywgMTIsIDE4OSwgMywgMjU0LCAxOTYsIDEyLCAxODksIDMsIDE0NiwgCi0gICAgMTIsIDE4OSwgMywgMTkzLCAxMiwgMTg5LCAzLCAyNTQsIDE4MywgMTIsIDE4OSwgMywgNjYsIDEyLCAxODksIDMsIDE5NiwgCi0gICAgMTIsIDE4OSwgMywgMjU0LCAxOTUsIDEyLCAxODksIDMsIDI1NCwgMTg0LCAxMiwgMTg5LCAzLCAyNTQsIDE5MCwgMTIsIAotICAgIDE4OSwgMywgMjU0LCAxOTMsIDEyLCAyNywgMywgMjM1LCA0NiwgNzQsIDEyLCAyNywgMywgMjM1LCA0NiwgMjU0LCAxOTIsIAotICAgIDEyLCAxOCwgNiwgMjM3LCA3MSwgMTIsIDE4LCA2LCAyNDAsIDE2MCwgMTIsIDE4LCA2LCAyMzcsIDYxLCAxMiwgMTgsIDYsIAotICAgIDIzNywgNzUsIDEyLCAxOCwgNiwgMjMzLCA5NiwgMTIsIDE4LCA2LCAyNDAsIDE3MywgMTIsIDE4LCA2LCAyNDYsIDIxOSwgCi0gICAgMTIsIDE4LCA2LCAyMzcsIDg5LCAxMiwgMTgsIDYsIDI0MCwgMTQ2LCAxMiwgMTgsIDYsIDIzNywgOTEsIDEyLCAxOCwgNiwgCi0gICAgMjM3LCA4MiwgMTIsIDE4LCA2LCAyNTIsIDIyOSwgMTIsIDE4LCA2LCAyNTIsIDIyNywgMTIsIDE4LCA2LCAyNTMsIDM4LCAKLSAgICAxMiwgMTgsIDYsIDIzMywgMTAwLCAxMiwgMTgsIDYsIDI1MiwgMjIzLCAxMiwgMTgsIDYsIDI0NiwgMjA5LCAxMiwgMTgsIDYsIAotICAgIDI0MCwgMTc4LCA5OCwgMTIsIDE4LCA2LCAyMzcsIDczLCAxMiwgMTgsIDYsIDI0NiwgMjEyLCAxMiwgMTgsIDYsIDIzMywgCi0gICAgOTIsIDEyLCAxOCwgNiwgMjQ2LCAxOTgsIDEyLCAxOCwgNiwgMjQ2LCAyMDAsIDEyLCAxOCwgNiwgMjQ2LCAyMDQsIDEyLCAKLSAgICAxOCwgNiwgMjM3LCA2OCwgMTIsIDE4LCAyMzcsIDEzOCwgMTIsIDE4LCAzLCAyMzcsIDcxLCAxMiwgMTgsIDMsIDI0MCwgCi0gICAgMTYwLCAxMiwgMTgsIDMsIDIzNywgNjEsIDEyLCAxOCwgMywgMjM3LCA3NSwgMTIsIDE4LCAzLCAyMzMsIDk2LCAxMiwgMTgsIAotICAgIDMsIDI0MCwgMTczLCAxMiwgMTgsIDMsIDI0NiwgMjE5LCAxMiwgMTgsIDMsIDIzNywgODksIDEyLCAxOCwgMywgMjQwLCAKLSAgICAxNDYsIDEyLCAxOCwgMywgMjM3LCA5MSwgMTIsIDE4LCAzLCAyMzcsIDgyLCAxMiwgMTgsIDMsIDI1MiwgMjI5LCAxMiwgMTgsIAotICAgIDMsIDI1MiwgMjI3LCAxMiwgMTgsIDMsIDI1MywgMzgsIDEyLCAxOCwgMywgMjMzLCAxMDAsIDEyLCAxOCwgMywgMjUyLCAKLSAgICAyMjMsIDEyLCAxOCwgMywgMjQ2LCAyMDksIDEyLCAxOCwgMywgMzUsIDIzNywgNzMsIDEyLCAxOCwgMywgMjM3LCA3MywgMTIsIAotICAgIDE4LCAzLCAyNDYsIDIxMiwgMTIsIDE4LCAzLCAyMzMsIDkyLCAxMiwgMTgsIDMsIDI0NiwgMTk4LCAxMiwgMTgsIDMsIDI0NiwgCi0gICAgMjAwLCAxMiwgMTgsIDMsIDI0NiwgMjA0LCAxMiwgMTgsIDMsIDIzNywgNjgsIDEyLCAxOCwgMjM1LCA3OSwgMjI3LCAxODgsIAotICAgIDEyLCAxOCwgMjM1LCAyOCwgOTgsIDEyLCAxOCwgMjQwLCAxNzgsIDk4LCAxMiwgMTgsIDI0MCwgMjEwLCA5OCwgMTIsIDE4LCAKLSAgICAyNTMsIDEyMCwgOTgsIDEyLCAxOCwgMjUzLCA3MCwgOTgsIDEyLCAxOCwgMjU0LCAyMDAsIDk4LCAxMiwgMjcsIDYsIDIzNywgCi0gICAgNzEsIDEyLCAyNywgNiwgMjQwLCAxNjAsIDEyLCAyNywgNiwgMjM3LCA2MSwgMTIsIDI3LCA2LCAyMzcsIDc1LCAxMiwgMjcsIAotICAgIDYsIDIzMywgOTYsIDEyLCAyNywgNiwgMjQwLCAxNzMsIDEyLCAyNywgNiwgMjQ2LCAyMTksIDEyLCAyNywgNiwgMjM3LCA4OSwgCi0gICAgMTIsIDI3LCA2LCAyNDAsIDE0NiwgMTIsIDI3LCA2LCAyMzcsIDkxLCAxMiwgMjcsIDYsIDIzNywgODIsIDEyLCAyNywgNiwgCi0gICAgMjUyLCAyMjksIDEyLCAyNywgNiwgMjUyLCAyMjcsIDEyLCAyNywgNiwgMjUzLCAzOCwgMTIsIDI3LCA2LCAyMzMsIDEwMCwgCi0gICAgMTIsIDI3LCA2LCAyNTIsIDIyMywgMTIsIDI3LCA2LCAyNDYsIDIwOSwgMTIsIDI3LCA2LCAyNDAsIDE3OCwgOTgsIDEyLCAKLSAgICAyNywgNiwgMjM3LCA3MywgMTIsIDI3LCA2LCAyNDYsIDIxMiwgMTIsIDI3LCA2LCAyMzMsIDkyLCAxMiwgMjcsIDYsIDI0NiwgCi0gICAgMTk4LCAxMiwgMjcsIDYsIDI0NiwgMjAwLCAxMiwgMjcsIDYsIDI0NiwgMjA0LCAxMiwgMjcsIDYsIDIzNywgNjgsIDEyLCAKLSAgICAyNywgMjM3LCAxMzgsIDEyLCAyNywgMywgMjM3LCA3MSwgMTIsIDI3LCAzLCAyNDAsIDE2MCwgMTIsIDI3LCAzLCAyMzcsIAotICAgIDYxLCAxMiwgMjcsIDMsIDIzNywgNzUsIDEyLCAyNywgMywgMjMzLCA5NiwgMTIsIDI3LCAzLCAyNDAsIDE3MywgMTIsIDI3LCAKLSAgICAzLCAyNDYsIDIxOSwgMTIsIDI3LCAzLCAyMzcsIDg5LCAxMiwgMjcsIDMsIDI0MCwgMTQ2LCAxMiwgMjcsIDMsIDIzNywgOTEsIAotICAgIDEyLCAyNywgMywgMjM3LCA4MiwgMTIsIDI3LCAzLCAyNTIsIDIyOSwgMTIsIDI3LCAzLCAyNTIsIDIyNywgMTIsIDI3LCAzLCAKLSAgICAyNTMsIDM4LCAxMiwgMjcsIDMsIDIzMywgMTAwLCAxMiwgMjcsIDMsIDI1MiwgMjIzLCAxMiwgMjcsIDMsIDI0NiwgMjA5LCAKLSAgICAxMiwgMjcsIDMsIDM1LCAyMzcsIDczLCAxMiwgMjcsIDMsIDIzNywgNzMsIDEyLCAyNywgMywgMjQ2LCAyMTIsIDEyLCAyNywgCi0gICAgMywgMjMzLCA5MiwgMTIsIDI3LCAzLCAyNDYsIDE5OCwgMTIsIDI3LCAzLCAyNDYsIDIwMCwgMTIsIDI3LCAzLCAyNDYsIAotICAgIDIwNCwgMTIsIDI3LCAzLCAyMzcsIDY4LCAxMiwgMjcsIDIzNSwgNzksIDIyNywgMTg4LCAxMiwgMjcsIDIzNSwgMjgsIDk4LCAKLSAgICAxMiwgMjcsIDI0MCwgMTc4LCA5OCwgMTIsIDI3LCAyNDAsIDIxMCwgOTgsIDEyLCAyNywgMjUzLCAxMjAsIDk4LCAxMiwgMjcsIAotICAgIDI1MywgNzAsIDk4LCAxMiwgMjcsIDI1NCwgMjAwLCA5OCwgMTIsIDE4LCAyNywgNiwgMjM3LCA3MSwgMTIsIDE4LCAyNywgNiwgCi0gICAgMjQwLCAxNjAsIDEyLCAxOCwgMjcsIDYsIDIzNywgNjEsIDEyLCAxOCwgMjcsIDYsIDIzNywgNzUsIDEyLCAxOCwgMjcsIDYsIAotICAgIDIzMywgOTYsIDEyLCAxOCwgMjcsIDYsIDI0MCwgMTczLCAxMiwgMTgsIDI3LCA2LCAyNDYsIDIxOSwgMTIsIDE4LCAyNywgNiwgCi0gICAgMjM3LCA4OSwgMTIsIDE4LCAyNywgNiwgMjQwLCAxNDYsIDEyLCAxOCwgMjcsIDYsIDIzNywgOTEsIDEyLCAxOCwgMjcsIDYsIAotICAgIDIzNywgODIsIDEyLCAxOCwgMjcsIDYsIDI1MiwgMjI5LCAxMiwgMTgsIDI3LCA2LCAyNTIsIDIyNywgMTIsIDE4LCAyNywgNiwgCi0gICAgMjUzLCAzOCwgMTIsIDE4LCAyNywgNiwgMjMzLCAxMDAsIDEyLCAxOCwgMjcsIDYsIDI1MiwgMjIzLCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyNDYsIDIwOSwgMTIsIDE4LCAyNywgNiwgMjQwLCAxNzgsIDk4LCAxMiwgMTgsIDI3LCA2LCAyMzcsIDczLCAxMiwgMTgsIAotICAgIDI3LCA2LCAyNDYsIDIxMiwgMTIsIDE4LCAyNywgNiwgMjMzLCA5MiwgMTIsIDE4LCAyNywgNiwgMjQ2LCAxOTgsIDEyLCAxOCwgCi0gICAgMjcsIDYsIDI0NiwgMjAwLCAxMiwgMTgsIDI3LCA2LCAyNDYsIDIwNCwgMTIsIDE4LCAyNywgNiwgMjM3LCA2OCwgMTIsIDE4LCAKLSAgICAyNywgMjM3LCAxMzgsIDEyLCAxOCwgMjcsIDMsIDIzNywgNzEsIDEyLCAxOCwgMjcsIDMsIDI0MCwgMTYwLCAxMiwgMTgsIAotICAgIDI3LCAzLCAyMzcsIDYxLCAxMiwgMTgsIDI3LCAzLCAyMzcsIDc1LCAxMiwgMTgsIDI3LCAzLCAyMzMsIDk2LCAxMiwgMTgsIAotICAgIDI3LCAzLCAyNDAsIDE3MywgMTIsIDE4LCAyNywgMywgMjQ2LCAyMTksIDEyLCAxOCwgMjcsIDMsIDIzNywgODksIDEyLCAxOCwgCi0gICAgMjcsIDMsIDI0MCwgMTQ2LCAxMiwgMTgsIDI3LCAzLCAyMzcsIDkxLCAxMiwgMTgsIDI3LCAzLCAyMzcsIDgyLCAxMiwgMTgsIAotICAgIDI3LCAzLCAyNTIsIDIyOSwgMTIsIDE4LCAyNywgMywgMjUyLCAyMjcsIDEyLCAxOCwgMjcsIDMsIDI1MywgMzgsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDIzMywgMTAwLCAxMiwgMTgsIDI3LCAzLCAyNTIsIDIyMywgMTIsIDE4LCAyNywgMywgMjQ2LCAyMDksIDEyLCAKLSAgICAxOCwgMjcsIDMsIDM1LCAyMzcsIDczLCAxMiwgMTgsIDI3LCAzLCAyMzcsIDczLCAxMiwgMTgsIDI3LCAzLCAyNDYsIDIxMiwgCi0gICAgMTIsIDE4LCAyNywgMywgMjMzLCA5MiwgMTIsIDE4LCAyNywgMywgMjQ2LCAxOTgsIDEyLCAxOCwgMjcsIDMsIDI0NiwgMjAwLCAKLSAgICAxMiwgMTgsIDI3LCAzLCAyNDYsIDIwNCwgMTIsIDE4LCAyNywgMywgMjM3LCA2OCwgMTIsIDE4LCAyNywgMjM1LCA3OSwgCi0gICAgMjI3LCAxODgsIDEyLCAxOCwgMjcsIDIzNSwgMjgsIDk4LCAxMiwgMTgsIDI3LCAyNDAsIDE3OCwgOTgsIDEyLCAxOCwgMjcsIAotICAgIDI0MCwgMjEwLCA5OCwgMTIsIDE4LCAyNywgMjUzLCAxMjAsIDk4LCAxMiwgMTgsIDI3LCAyNTMsIDcwLCA5OCwgMTIsIDE4LCAKLSAgICAyNywgMjU0LCAyMDAsIDk4LCAxMiwgMzAsIDE4LCA2LCAyMzcsIDcxLCAxMiwgMzAsIDE4LCA2LCAyNDAsIDE2MCwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjM3LCA2MSwgMTIsIDMwLCAxOCwgNiwgMjM3LCA3NSwgMTIsIDMwLCAxOCwgNiwgMjMzLCA5NiwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjQwLCAxNzMsIDEyLCAzMCwgMTgsIDYsIDI0NiwgMjE5LCAxMiwgMzAsIDE4LCA2LCAyMzcsIDg5LCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyNDAsIDE0NiwgMTIsIDMwLCAxOCwgNiwgMjM3LCA5MSwgMTIsIDMwLCAxOCwgNiwgMjM3LCA4MiwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjUyLCAyMjksIDEyLCAzMCwgMTgsIDYsIDI1MiwgMjI3LCAxMiwgMzAsIDE4LCA2LCAyNTMsIDM4LCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyMzMsIDEwMCwgMTIsIDMwLCAxOCwgNiwgMjUyLCAyMjMsIDEyLCAzMCwgMTgsIDYsIDI0NiwgMjA5LCAKLSAgICAxMiwgMzAsIDE4LCA2LCAyNDAsIDE3OCwgOTgsIDEyLCAzMCwgMTgsIDYsIDIzNywgNzMsIDEyLCAzMCwgMTgsIDYsIDI0NiwgCi0gICAgMjEyLCAxMiwgMzAsIDE4LCA2LCAyMzMsIDkyLCAxMiwgMzAsIDE4LCA2LCAyNDYsIDE5OCwgMTIsIDMwLCAxOCwgNiwgMjQ2LCAKLSAgICAyMDAsIDEyLCAzMCwgMTgsIDYsIDI0NiwgMjA0LCAxMiwgMzAsIDE4LCA2LCAyMzcsIDY4LCAxMiwgMzAsIDE4LCAyMzcsIAotICAgIDEzOCwgMTIsIDMwLCAxOCwgMywgMjM3LCA3MSwgMTIsIDMwLCAxOCwgMywgMjQwLCAxNjAsIDEyLCAzMCwgMTgsIDMsIDIzNywgCi0gICAgNjEsIDEyLCAzMCwgMTgsIDMsIDIzNywgNzUsIDEyLCAzMCwgMTgsIDMsIDIzMywgOTYsIDEyLCAzMCwgMTgsIDMsIDI0MCwgCi0gICAgMTczLCAxMiwgMzAsIDE4LCAzLCAyNDYsIDIxOSwgMTIsIDMwLCAxOCwgMywgMjM3LCA4OSwgMTIsIDMwLCAxOCwgMywgMjQwLCAKLSAgICAxNDYsIDEyLCAzMCwgMTgsIDMsIDIzNywgOTEsIDEyLCAzMCwgMTgsIDMsIDIzNywgODIsIDEyLCAzMCwgMTgsIDMsIDI1MiwgCi0gICAgMjI5LCAxMiwgMzAsIDE4LCAzLCAyNTIsIDIyNywgMTIsIDMwLCAxOCwgMywgMjUzLCAzOCwgMTIsIDMwLCAxOCwgMywgMjMzLCAKLSAgICAxMDAsIDEyLCAzMCwgMTgsIDMsIDI1MiwgMjIzLCAxMiwgMzAsIDE4LCAzLCAyNDYsIDIwOSwgMTIsIDMwLCAxOCwgMywgMzUsIAotICAgIDIzNywgNzMsIDEyLCAzMCwgMTgsIDMsIDIzNywgNzMsIDEyLCAzMCwgMTgsIDMsIDI0NiwgMjEyLCAxMiwgMzAsIDE4LCAzLCAKLSAgICAyMzMsIDkyLCAxMiwgMzAsIDE4LCAzLCAyNDYsIDE5OCwgMTIsIDMwLCAxOCwgMywgMjQ2LCAyMDAsIDEyLCAzMCwgMTgsIDMsIAotICAgIDI0NiwgMjA0LCAxMiwgMzAsIDE4LCAzLCAyMzcsIDY4LCAxMiwgMzAsIDE4LCAyMzUsIDc5LCAyMjcsIDE4OCwgMTIsIDMwLCAKLSAgICAxOCwgMjM1LCAyOCwgOTgsIDEyLCAzMCwgMTgsIDI0MCwgMTc4LCA5OCwgMTIsIDMwLCAxOCwgMjQwLCAyMTAsIDk4LCAxMiwgCi0gICAgMzAsIDE4LCAyNTMsIDEyMCwgOTgsIDEyLCAzMCwgMTgsIDI1MywgNzAsIDk4LCAxMiwgMzAsIDE4LCAyNTQsIDIwMCwgOTgsIAotICAgIDEyLCAzMCwgMTgsIDI3LCA2LCAyMzcsIDcxLCAxMiwgMzAsIDE4LCAyNywgNiwgMjQwLCAxNjAsIDEyLCAzMCwgMTgsIDI3LCAKLSAgICA2LCAyMzcsIDYxLCAxMiwgMzAsIDE4LCAyNywgNiwgMjM3LCA3NSwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzMywgOTYsIDEyLCAKLSAgICAzMCwgMTgsIDI3LCA2LCAyNDAsIDE3MywgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NiwgMjE5LCAxMiwgMzAsIDE4LCAyNywgNiwgCi0gICAgMjM3LCA4OSwgMTIsIDMwLCAxOCwgMjcsIDYsIDI0MCwgMTQ2LCAxMiwgMzAsIDE4LCAyNywgNiwgMjM3LCA5MSwgMTIsIDMwLCAKLSAgICAxOCwgMjcsIDYsIDIzNywgODIsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTIsIDIyOSwgMTIsIDMwLCAxOCwgMjcsIDYsIDI1MiwgCi0gICAgMjI3LCAxMiwgMzAsIDE4LCAyNywgNiwgMjUzLCAzOCwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzMywgMTAwLCAxMiwgMzAsIDE4LCAKLSAgICAyNywgNiwgMjUyLCAyMjMsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNDYsIDIwOSwgMTIsIDMwLCAxOCwgMjcsIDYsIDI0MCwgCi0gICAgMTc4LCA5OCwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzNywgNzMsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNDYsIDIxMiwgMTIsIDMwLCAKLSAgICAxOCwgMjcsIDYsIDIzMywgOTIsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNDYsIDE5OCwgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NiwgCi0gICAgMjAwLCAxMiwgMzAsIDE4LCAyNywgNiwgMjQ2LCAyMDQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMzcsIDY4LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMjM3LCAxMzgsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzcsIDcxLCAxMiwgMzAsIDE4LCAyNywgMywgMjQwLCAxNjAsIAotICAgIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzcsIDYxLCAxMiwgMzAsIDE4LCAyNywgMywgMjM3LCA3NSwgMTIsIDMwLCAxOCwgMjcsIAotICAgIDMsIDIzMywgOTYsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNDAsIDE3MywgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NiwgMjE5LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMywgMjM3LCA4OSwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0MCwgMTQ2LCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjM3LCA5MSwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzNywgODIsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTIsIDIyOSwgMTIsIDMwLCAKLSAgICAxOCwgMjcsIDMsIDI1MiwgMjI3LCAxMiwgMzAsIDE4LCAyNywgMywgMjUzLCAzOCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzMywgCi0gICAgMTAwLCAxMiwgMzAsIDE4LCAyNywgMywgMjUyLCAyMjMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNDYsIDIwOSwgMTIsIDMwLCAKLSAgICAxOCwgMjcsIDMsIDM1LCAyMzcsIDczLCAxMiwgMzAsIDE4LCAyNywgMywgMjM3LCA3MywgMTIsIDMwLCAxOCwgMjcsIDMsIAotICAgIDI0NiwgMjEyLCAxMiwgMzAsIDE4LCAyNywgMywgMjMzLCA5MiwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NiwgMTk4LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMywgMjQ2LCAyMDAsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNDYsIDIwNCwgMTIsIDMwLCAxOCwgMjcsIDMsIAotICAgIDIzNywgNjgsIDEyLCAzMCwgMTgsIDI3LCAyMzUsIDc5LCAyMjcsIDE4OCwgMTIsIDMwLCAxOCwgMjcsIDIzNSwgMjgsIDk4LCAKLSAgICAxMiwgMzAsIDE4LCAyNywgMjQwLCAxNzgsIDk4LCAxMiwgMzAsIDE4LCAyNywgMjQwLCAyMTAsIDk4LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMjUzLCAxMjAsIDk4LCAxMiwgMzAsIDE4LCAyNywgMjUzLCA3MCwgOTgsIDEyLCAzMCwgMTgsIDI3LCAyNTQsIDIwMCwgCi0gICAgOTgsIDEyLCAxOCwgNiwgMjMzLCAxMjksIDEyLCAxOCwgMywgMjMzLCAxMjksIDEyLCAxOCwgMjEsIDI0MCwgMTI2LCAxMiwgCi0gICAgMTgsIDIxLCAxMTgsIDEyLCAxOCwgMjEsIDExMywgMTIsIDE4LCAyMSwgMTY2LCAxMiwgMTgsIDIxLCAxNTgsIDEyLCAxOCwgCi0gICAgMjEsIDE3MywgMTIsIDE4LCAyMSwgMTgzLCAxMiwgMTgsIDIxLCAxOTQsIDEyLCAxOCwgMjEsIDE4NywgMTIsIDE4LCAyMSwgCi0gICAgMTkyLCAxMiwgMTU5LCAyMSwgMjQwLCAxMjYsIDEyLCAxNTksIDIxLCAxMTgsIDEyLCAxNTksIDIxLCAxMTMsIDEyLCAxNTksIAotICAgIDIxLCAxNjYsIDEyLCAxNTksIDIxLCAxNTgsIDEyLCAxNTksIDIxLCAxNzMsIDEyLCAxNTksIDIxLCAxODMsIDEyLCAxNTksIAotICAgIDIxLCAxOTQsIDEyLCAxNTksIDIxLCAxODcsIDEyLCAxNTksIDIxLCAxOTIsIDEyLCAzMCwgMjEsIDI0MCwgMTI2LCAxMiwgCi0gICAgMzAsIDIxLCAxMTgsIDEyLCAzMCwgMjEsIDExMywgMTIsIDMwLCAyMSwgMTY2LCAxMiwgMzAsIDIxLCAxNTgsIDEyLCAzMCwgCi0gICAgMjEsIDE3MywgMTIsIDMwLCAyMSwgMTgzLCAxMiwgMzAsIDIxLCAxOTQsIDEyLCAzMCwgMjEsIDE4NywgMTIsIDMwLCAyMSwgCi0gICAgMTkyLCAxMiwgMzAsIDE4LCAyMSwgMjQwLCAxMjYsIDEyLCAzMCwgMTgsIDIxLCAxMTgsIDEyLCAzMCwgMTgsIDIxLCAxMTMsIAotICAgIDEyLCAzMCwgMTgsIDIxLCAxNjYsIDEyLCAzMCwgMTgsIDIxLCAxNTgsIDEyLCAzMCwgMTgsIDIxLCAxNzMsIDEyLCAzMCwgCi0gICAgMTgsIDIxLCAxODMsIDEyLCAzMCwgMTgsIDIxLCAxOTQsIDEyLCAzMCwgMTgsIDIxLCAxODcsIDEyLCAzMCwgMTgsIDIxLCAKLSAgICAxOTIsIDEyLCAxODksIDIxLCAyNDAsIDEyNiwgMTIsIDE4OSwgMjEsIDExOCwgMTIsIDE4OSwgMjEsIDExMywgMTIsIDE4OSwgCi0gICAgMjEsIDE2NiwgMTIsIDE4OSwgMjEsIDE1OCwgMTIsIDE4OSwgMjEsIDE3MywgMTIsIDE4OSwgMjEsIDE4MywgMTIsIDE4OSwgCi0gICAgMjEsIDE5NCwgMTIsIDE4OSwgMjEsIDE4NywgMTIsIDE4OSwgMjEsIDE5MiwgMjM1LCAxOSwgNzUsIDI0NiwgMTcwLCAyNDAsIAotICAgIDE5OSwgMjM1LCAxOSwgNzUsIDI0MCwgMTQxLCAyNDAsIDE5OSwgMjM1LCAxOSwgNzUsIDI0NiwgMTg0LCAyNDAsIDE5OSwgCi0gICAgMjM1LCAxOSwgNzUsIDI0MCwgMTM0LCAyNDAsIDE5OSwgMjM1LCAxOSwgNzUsIDI1NCwgMTQyLCAyMzUsIDc0LCAyMzUsIDE5LCAKLSAgICA3NSwgMjQzLCAxNTYsIDIzNSwgNzQsIDIzNSwgMTksIDc1LCA2MywgMjM1LCA3NCwgMjM1LCAxOSwgNzUsIDE2OCwgMTA2LCAKLSAgICAyMjksIDE3MywgMjM1LCAxOSwgNzUsIDEzNSwgMTA2LCAyMjksIDE3MywgMjM1LCAxOSwgNzUsIDE1MiwgMTA2LCAyMjksIAotICAgIDE3MywgMjM1LCAxOSwgNzUsIDI0NiwgMTYwLCAxMDYsIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMjQ2LCAxNTksIDEwNiwgCi0gICAgMjI5LCAxNzMsIDIzNSwgMTksIDc1LCAyNTMsIDE3LCAxMDYsIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMjQwLCAxNTUsIAotICAgIDEwNiwgMjI5LCAxNzMsIDIzNSwgMTksIDc1LCAyNDAsIDE0MiwgMTA2LCAyMjksIDE3MywgMjM1LCAxOSwgNzUsIDI0NiwgCi0gICAgMjA4LCAxMDYsIDIyOSwgMTczLCAyMzUsIDE5LCA3NSwgMTY4LCAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgMTM1LCAKLSAgICAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgMTUyLCAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgMjQ2LCAxNjAsIAotICAgIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAyNDYsIDE1OSwgMTA2LCAyMzMsIDEwOSwgMjM1LCAxOSwgNzUsIDI1MywgCi0gICAgMTcsIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIDc1LCAyNDAsIDE1NSwgMTA2LCAyMzMsIDEwOSwgMjM1LCAxOSwgNzUsIAotICAgIDI0MCwgMTQyLCAxMDYsIDIzMywgMTA5LCAyMzUsIDE5LCA3NSwgMjQ2LCAyMDgsIDEwNiwgMjMzLCAxMDksIDIzNSwgMTksIAotICAgIDc1LCAxNjgsIDEwNiwgMjMzLCAxMTAsIDIzNSwgMTksIDc1LCAxMzUsIDEwNiwgMjMzLCAxMTAsIDIzNSwgMTksIDc1LCAKLSAgICAxNTIsIDEwNiwgMjMzLCAxMTAsIDIzNSwgMTksIDc1LCAyNDYsIDE2MCwgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgNzUsIAotICAgIDI0NiwgMTU5LCAxMDYsIDIzMywgMTEwLCAyMzUsIDE5LCA3NSwgMjUzLCAxNywgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgCi0gICAgNzUsIDI0MCwgMTU1LCAxMDYsIDIzMywgMTEwLCAyMzUsIDE5LCA3NSwgMjQwLCAxNDIsIDEwNiwgMjMzLCAxMTAsIDIzNSwgCi0gICAgMTksIDc1LCAyNDYsIDIwOCwgMTA2LCAyMzMsIDExMCwgMjM1LCAxOSwgNzUsIDI0NSwgODAsIDIzNSwgMTksIDc1LCAyMzYsIAotICAgIDE3NywgMjM1LCAxOSwgNzUsIDIzNSwgMTA5LCAyMzUsIDE5LCA3NSwgMjI3LCAxNjAsIDIzNSwgMTksIDc1LCAyMzYsIDIzOCwgCi0gICAgMjM1LCAxOSwgNzUsIDIzNiwgMjQ4LCAyMzUsIDE5LCA3NSwgMjM2LCAxLCAyMzUsIDE5LCA3NSwgMjM3LCAzMCwgMjM1LCAKLSAgICAxOSwgNzUsIDIzOSwgNTAsIDIzNSwgMTksIDc1LCAyNDAsIDIxNywgMTA5LCA3NSwgMTY5LCAyNDAsIDIxNywgMTA5LCA3NSwgCi0gICAgMjIzLCAwLCAxMDksIDc1LCAyMjMsIDEsIDEwOSwgNzUsIDIyMywgMiwgMTA5LCA3NSwgMjIzLCAzLCAxMDksIDc1LCAyMjMsIAotICAgIDQsIDEwOSwgNzUsIDIyMywgNSwgMTA5LCA3NSwgMjIzLCA2LCAxMDksIDc1LCAyMjMsIDcsIDEwOSwgNzUsIDIyMywgOCwgCi0gICAgMTA5LCA3NSwgMjIzLCA5LCAxMDksIDc1LCAyMjMsIDEwLCAxMDksIDc1LCAyMjMsIDExLCAxMDksIDc1LCAyMjMsIDEyLCAKLSAgICAxMDksIDc1LCAyMjMsIDEzLCAxMDksIDc1LCAyMjMsIDE0LCAxMDksIDc1LCAyMjMsIDE1LCAxMDksIDc1LCAyMjMsIDE2LCAKLSAgICAxMDksIDc1LCAyMjMsIDE3LCAxMDksIDc1LCAyMjMsIDE4LCAxMDksIDc1LCAyMjMsIDE5LCAxMDksIDc1LCAyMjMsIDIwLCAKLSAgICAxMDksIDc1LCAyMjMsIDIxLCAxMDksIDc1LCAyMjMsIDIyLCAxMDksIDc1LCAyMjMsIDIzLCAxMDksIDc1LCAyMjMsIDI0LCAKLSAgICAxMDksIDc1LCAyMjMsIDI1LCAxMDksIDc1LCAyMjMsIDI2LCAxMDksIDc1LCAyMjMsIDI3LCAxMDksIDc1LCAyMjMsIDI4LCAKLSAgICAxMDksIDc1LCAyMjMsIDI5LCAxMDksIDc1LCAyMjMsIDMwLCAxMDksIDc1LCAyMjMsIDMxLCAxMDksIDc1LCAyMjMsIDMyLCAKLSAgICAxMDksIDc1LCAyMjMsIDMzLCAxMDksIDc1LCAyMjMsIDM0LCAxMDksIDc1LCAyMjMsIDM1LCAxMDksIDc1LCAyMjMsIDM2LCAKLSAgICAxMDksIDc1LCAyMjMsIDM3LCAxMDksIDc1LCAyMjMsIDM4LCAxMDksIDc1LCAyMjMsIDM5LCAxMDksIDc1LCAyMjMsIDQwLCAKLSAgICAxMDksIDc1LCAyMjMsIDQxLCAxMDksIDc1LCAyMjMsIDQyLCAxMDksIDc1LCAyMjMsIDQzLCAxMDksIDc1LCAyMjMsIDQ0LCAKLSAgICAxMDksIDc1LCAyMjMsIDQ1LCAxMDksIDc1LCAyMjMsIDQ2LCAxMDksIDc1LCAyMjMsIDQ3LCAxMDksIDc1LCAyMjMsIDQ4LCAKLSAgICAxMDksIDc1LCA2MSwgMjQwLCAyMTcsIDEwOSwgNzUsIDIyNywgODIsIDEwOSwgNzUsIDIyNywgODMsIDEwOSwgNzUsIDIyNywgCi0gICAgODQsIDEwOSwgNzUsIDIyNywgODUsIDEwOSwgNzUsIDIyNywgODYsIDEwOSwgNzUsIDIyNywgODcsIDEwOSwgNzUsIDIyNywgCi0gICAgODgsIDEwOSwgNzUsIDIyNywgODksIDEwOSwgNzUsIDIyNywgOTAsIDEwOSwgNzUsIDIyNywgOTEsIDEwOSwgNzUsIDIyNywgCi0gICAgOTIsIDEwOSwgNzUsIDIyNywgOTMsIDEwOSwgNzUsIDIyNywgOTQsIDEwOSwgNzUsIDIyNywgOTUsIDEwOSwgNzUsIDIyNywgCi0gICAgOTYsIDEwOSwgNzUsIDIyNywgOTcsIDEwOSwgNzUsIDIyNywgOTgsIDEwOSwgNzUsIDIyNywgOTksIDEwOSwgNzUsIDIyNywgCi0gICAgMTAwLCAxMDksIDc1LCAyMjcsIDEwMSwgMTA5LCA3NSwgMjI3LCAxMDIsIDEwOSwgNzUsIDIyNywgMTAzLCAxMDksIDc1LCAKLSAgICAyMjcsIDEwNCwgMTA5LCA3NSwgMjI3LCAxMDUsIDEwOSwgNzUsIDIyNywgMTA2LCAxMDksIDc1LCAyMjcsIDEwNywgMTA5LCAKLSAgICA3NSwgMjI3LCAxMDgsIDEwOSwgNzUsIDIyNywgMTA5LCAxMDksIDc1LCAyMjcsIDExMCwgMTA5LCA3NSwgMjI3LCAxMTEsIAotICAgIDEwOSwgNzUsIDIyNywgMTEyLCAxMDksIDc1LCAyMjcsIDExMywgMTA5LCA3NSwgMjI3LCAxMTQsIDEwOSwgNzUsIDIyNywgCi0gICAgMTE1LCAxMDksIDc1LCAyMjcsIDExNiwgMTA5LCA3NSwgMjI3LCAxMTcsIDEwOSwgNzUsIDIyNywgMTE4LCAxMDksIDc1LCAKLSAgICAyMjcsIDExOSwgMTA5LCA3NSwgMjI3LCAxMjAsIDEwOSwgNzUsIDIyNywgMTIxLCAxMDksIDc1LCAyMjcsIDEyMiwgMTA5LCAKLSAgICA3NSwgMjI3LCAxMjMsIDEwOSwgNzUsIDIyNywgMTI0LCAxMDksIDc1LCAyMjcsIDEyNSwgMTA5LCA3NSwgMjI3LCAxMjYsIAotICAgIDEwOSwgNzUsIDIyNywgMTI3LCAxMDksIDc1LCAyMjcsIDEyOCwgMTA5LCA3NSwgMjI3LCAxMjksIDEwOSwgNzUsIDIyNywgCi0gICAgMTMwLCA5LCAxMSwgMjIzLCA2MywgOSwgMTEsIDIyMywgNjQsIDksIDExLCAyMjMsIDY1LCA5LCAxMSwgMjIzLCA2NiwgOSwgCi0gICAgMTEsIDIyMywgNjcsIDksIDExLCAyMjMsIDY4LCA5LCAxMSwgMjIzLCA2OSwgOSwgMTEsIDIyMywgNzAsIDksIDExLCAyMjMsIAotICAgIDcxLCA5LCAxMSwgMjIzLCA3MiwgOSwgMTEsIDIyMywgNzMsIDksIDExLCAyMjMsIDc0LCA5LCAxMSwgMjIzLCA3NSwgOSwgCi0gICAgMTEsIDIyMywgNzYsIDksIDExLCAyMjMsIDc3LCA5LCAxMSwgMjIzLCA3OCwgOSwgMTEsIDIyMywgNzksIDksIDExLCAyMjMsIAotICAgIDgwLCA5LCAxMSwgMjIzLCA4MSwgOSwgMTEsIDIyMywgODIsIDksIDExLCAyMjMsIDgzLCA5LCAxMSwgMjIzLCA4NCwgOSwgCi0gICAgMTEsIDIyMywgODUsIDksIDExLCAyMjMsIDg2LCA5LCAxMSwgMjIzLCA4NywgOSwgMTEsIDIyMywgODgsIDksIDExLCAyMjMsIAotICAgIDg5LCA5LCAxMSwgMjIzLCA5MCwgOSwgMTEsIDIyMywgOTEsIDksIDExLCAyMjMsIDkyLCA5LCAxMSwgMjIzLCA5MywgOSwgCi0gICAgMTEsIDIyMywgOTQsIDksIDExLCAyMjMsIDk1LCA5LCAxMSwgMjIzLCA5NiwgOSwgMTEsIDIyMywgOTcsIDksIDExLCAyMjMsIAotICAgIDk4LCA5LCAxMSwgMjIzLCA5OSwgOSwgMTEsIDIyMywgMTAwLCA5LCAxMSwgMjIzLCAxMDEsIDksIDExLCAyMjMsIDEwMiwgOSwgCi0gICAgMTEsIDIyMywgMTAzLCA5LCAxMSwgMjIzLCAxMDQsIDksIDExLCAyMjMsIDEwNSwgOSwgMTEsIDIyMywgMTA2LCA5LCAxMSwgCi0gICAgMjIzLCAxMDcsIDksIDExLCAyMjMsIDEwOCwgOSwgMTEsIDIyMywgMTA5LCA5LCAxMSwgMjIzLCAxMTAsIDksIDExLCAyMjMsIAotICAgIDExMSwgOSwgMTEsIDIyMywgMTEyLCA5LCAxMSwgMjIzLCAxMTMsIDksIDExLCAyMjMsIDExNCwgOSwgMTEsIDIyMywgMTE1LCAKLSAgICA5LCAxMSwgMjIzLCAxMTYsIDksIDExLCAyMjMsIDExNywgOSwgMTEsIDIyMywgMTE4LCA5LCAxMSwgMjIzLCAxMTksIDksIAotICAgIDExLCAyMjMsIDEyMCwgOSwgMTEsIDIyMywgMTIxLCA5LCAxMSwgMjIzLCAxMjIsIDksIDExLCAyMjMsIDEyMywgOSwgMTEsIAotICAgIDIyMywgMTI0LCA5LCAxMSwgMjIzLCAxMjUsIDksIDExLCAyMjMsIDEyNiwgOSwgMTEsIDIyMywgMTI3LCA5LCAxMSwgMjIzLCAKLSAgICAxMjgsIDksIDExLCAyMjMsIDEyOSwgOSwgMTEsIDIyMywgMTMwLCA5LCAxMSwgMjIzLCAxMzEsIDksIDExLCAyMjMsIDEzMiwgCi0gICAgOSwgMTEsIDIyMywgMTMzLCA5LCAxMSwgMjIzLCAxMzQsIDksIDExLCAyMjMsIDEzNSwgOSwgMTEsIDIyMywgMTM2LCA5LCAKLSAgICAxMSwgMjIzLCAxMzcsIDksIDExLCAyMjMsIDEzOCwgOSwgMTEsIDIyMywgMTM5LCA5LCAxMSwgMjIzLCAxNDAsIDksIDExLCAKLSAgICAyMjMsIDE0MSwgOSwgMTEsIDIyMywgMTQyLCA5LCAxMSwgMjIzLCAxNDMsIDksIDExLCAyMjMsIDE0NCwgOSwgMTEsIDIyMywgCi0gICAgMTQ1LCA5LCAxMSwgMjIzLCAxNDYsIDksIDExLCAyMjMsIDE0NywgOSwgMTEsIDIyMywgMTQ4LCA5LCAxMSwgMjIzLCAxNDksIAotICAgIDksIDExLCAyMjMsIDE1MCwgOSwgMTEsIDIyMywgMTUxLCA5LCAxMSwgMjIzLCAxNTIsIDksIDExLCAyMjMsIDE1MywgOSwgCi0gICAgMTEsIDIyMywgMTU0LCA5LCAxMSwgMjIzLCAxNTUsIDksIDExLCAyMjMsIDE1NiwgOSwgMTEsIDIyMywgMTU3LCA5LCAxMSwgCi0gICAgMjIzLCAxNTgsIDksIDExLCAyMjMsIDE1OSwgOSwgMTEsIDIyMywgMTYwLCA5LCAxMSwgMjIzLCAxNjEsIDksIDExLCAyMjMsIAotICAgIDE2MiwgOSwgMTEsIDIyMywgMTYzLCA5LCAxMSwgMjIzLCAxNjQsIDksIDExLCAyMjMsIDE2NSwgOSwgMTEsIDIyMywgMTY2LCAKLSAgICA5LCAxMSwgMjIzLCAxNjcsIDksIDExLCAyMjMsIDE2OCwgOSwgMTEsIDIyMywgMTY5LCA5LCAxMSwgMjIzLCAxNzAsIDksIAotICAgIDExLCAyMjMsIDE3MSwgOSwgMTEsIDIyMywgMTcyLCA5LCAxMSwgMjIzLCAxNzMsIDksIDExLCAyMjMsIDE3NCwgOSwgMTEsIAotICAgIDIyMywgMTc1LCA5LCAxMSwgMjIzLCAxNzYsIDksIDExLCAyMjMsIDE3NywgOSwgMTEsIDIyMywgMTc4LCA5LCAxMSwgMjIzLCAKLSAgICAxNzksIDksIDExLCAyMjMsIDE4MCwgOSwgMTEsIDIyMywgMTgxLCA5LCAxMSwgMjIzLCAxODIsIDksIDExLCAyMjMsIDE4MywgCi0gICAgOSwgMTEsIDIyMywgMTg0LCA5LCAxMSwgMjIzLCAxODUsIDksIDExLCAyMjMsIDE4NiwgOSwgMTEsIDIyMywgMTg3LCA5LCAKLSAgICAxMSwgMjIzLCAxODgsIDksIDExLCAyMjMsIDE4OSwgOSwgMTEsIDIyMywgMTkwLCA5LCAxMSwgMjIzLCAxOTEsIDksIDExLCAKLSAgICAyMjMsIDE5MiwgOSwgMTEsIDIyMywgMTkzLCA5LCAxMSwgMjIzLCAxOTQsIDksIDExLCAyMjMsIDE5NSwgOSwgMTEsIDIyMywgCi0gICAgMTk2LCA5LCAxMSwgMjIzLCAxOTcsIDksIDExLCAyMjMsIDE5OCwgOSwgMTEsIDIyMywgMTk5LCA5LCAxMSwgMjIzLCAyMDAsIAotICAgIDksIDExLCAyMjMsIDIwMSwgOSwgMTEsIDIyMywgMjAyLCA5LCAxMSwgMjIzLCAyMDMsIDksIDExLCAyMjMsIDIwNCwgOSwgCi0gICAgMTEsIDIyMywgMjA1LCA5LCAxMSwgMjIzLCAyMDYsIDksIDExLCAyMjMsIDIwNywgOSwgMTEsIDIyMywgMjA4LCA5LCAxMSwgCi0gICAgMjIzLCAyMDksIDksIDExLCAyMjMsIDIxMCwgOSwgMTEsIDIyMywgMjExLCA5LCAxMSwgMjIzLCAyMTIsIDksIDExLCAyMjMsIAotICAgIDIxMywgOSwgMTEsIDIyMywgMjE0LCA5LCAxMSwgMjIzLCAyMTUsIDksIDExLCAyMjMsIDIxNiwgOSwgMTEsIDIyMywgMjE3LCAKLSAgICA5LCAxMSwgMjIzLCAyMTgsIDksIDExLCAyMjMsIDIxOSwgOSwgMTEsIDIyMywgMjIwLCA5LCAxMSwgMjIzLCAyMjEsIDksIAotICAgIDExLCAyMjMsIDIyMiwgOSwgMTEsIDIyMywgMjIzLCA5LCAxMSwgMjIzLCAyMjQsIDksIDExLCAyMjMsIDIyNSwgOSwgMTEsIAotICAgIDIyMywgMjI2LCA5LCAxMSwgMjIzLCAyMjcsIDksIDExLCAyMjMsIDIyOCwgOSwgMTEsIDIyMywgMjI5LCA5LCAxMSwgMjIzLCAKLSAgICAyMzAsIDksIDExLCAyMjMsIDIzMSwgOSwgMTEsIDIyMywgMjMyLCA5LCAxMSwgMjIzLCAyMzMsIDksIDExLCAyMjMsIDIzNCwgCi0gICAgOSwgMTEsIDIyMywgMjM1LCA5LCAxMSwgMjIzLCAyMzYsIDksIDExLCAyMjMsIDIzNywgOSwgMTEsIDIyMywgMjM4LCA5LCAKLSAgICAxMSwgMjIzLCAyMzksIDksIDExLCAyMjMsIDI0MCwgOSwgMTEsIDIyMywgMjQxLCA5LCAxMSwgMjIzLCAyNDIsIDksIDExLCAKLSAgICAyMjMsIDI0MywgOSwgMTEsIDIyMywgMjQ0LCA5LCAxMSwgMjIzLCAyNDUsIDksIDExLCAyMjMsIDI0NiwgOSwgMTEsIDIyMywgCi0gICAgMjQ3LCA5LCAxMSwgMjIzLCAyNDgsIDksIDExLCAyMjMsIDI0OSwgOSwgMTEsIDIyMywgMjUwLCA5LCAxMSwgMjIzLCAyNTEsIAotICAgIDksIDExLCAyMjMsIDI1MiwgOSwgMTEsIDIyMywgMjUzLCA5LCAxMSwgMjIzLCAyNTQsIDksIDExLCAyMjMsIDI1NSwgOSwgCi0gICAgMTEsIDIyNCwgMCwgOSwgMTEsIDIyNCwgMSwgOSwgMTEsIDIyNCwgMiwgOSwgMTEsIDIyNCwgMywgOSwgMTEsIDIyNCwgNCwgCi0gICAgOSwgMTEsIDIyNCwgNSwgOSwgMTEsIDIyNCwgNiwgOSwgMTEsIDIyNCwgNywgOSwgMTEsIDIyNCwgOCwgOSwgMTEsIDIyNCwgCi0gICAgOSwgOSwgMTEsIDIyNCwgMTAsIDksIDExLCAyMjQsIDExLCA5LCAxMSwgMjI0LCAxMiwgOSwgMTEsIDIyNCwgMTMsIDksIDExLCAKLSAgICAyMjQsIDE0LCA5LCAxMSwgMjI0LCAxNSwgOSwgMTEsIDIyNCwgMTYsIDksIDExLCAyMjQsIDE3LCA5LCAxMSwgMjI0LCAxOCwgCi0gICAgOSwgMTEsIDIyNCwgMTksIDksIDExLCAyMjQsIDIwLCA5LCAxMSwgMjI0LCAyMSwgOSwgMTEsIDIyNCwgMjIsIDksIDExLCAKLSAgICAyMjQsIDIzLCA5LCAxMSwgMjI0LCAyNCwgOSwgMTEsIDIyNCwgMjUsIDksIDExLCAyMjQsIDI2LCA5LCAxMSwgMjI0LCAyNywgCi0gICAgOSwgMTEsIDIyNCwgMjgsIDksIDExLCAyMjQsIDI5LCA5LCAxMSwgMjI0LCAzMCwgOSwgMTEsIDIyNCwgMzEsIDksIDExLCAKLSAgICAyMjQsIDMyLCA5LCAxMSwgMjI0LCAzMywgOSwgMTEsIDIyNCwgMzQsIDksIDExLCAyMjQsIDM1LCA5LCAxMSwgMjI0LCAzNiwgCi0gICAgOSwgMTEsIDIyNCwgMzcsIDksIDExLCAyMjQsIDM4LCA5LCAxMSwgMjI0LCAzOSwgOSwgMTEsIDIyNCwgNDAsIDksIDExLCAKLSAgICAyMjQsIDQxLCA5LCAxMSwgMjI0LCA0MiwgOSwgMTEsIDIyNCwgNDMsIDksIDExLCAyMjQsIDQ0LCA5LCAxMSwgMjI0LCA0NSwgCi0gICAgOSwgMTEsIDIyNCwgNDYsIDksIDExLCAyMjQsIDQ3LCA5LCAxMSwgMjI0LCA0OCwgOSwgMTEsIDIyNCwgNDksIDksIDExLCAKLSAgICAyMjQsIDUwLCA5LCAxMSwgMjI0LCA1MSwgOSwgMTEsIDIyNCwgNTIsIDksIDExLCAyMjQsIDUzLCA5LCAxMSwgMjI0LCA1NCwgCi0gICAgOSwgMTEsIDIyNCwgNTUsIDksIDExLCAyMjQsIDU2LCA5LCAxMSwgMjI0LCA1NywgOSwgMTEsIDIyNCwgNTgsIDksIDExLCAKLSAgICAyMjQsIDU5LCA5LCAxMSwgMjI0LCA2MCwgOSwgMTEsIDIyNCwgNjEsIDksIDExLCAyMjQsIDYyLCA5LCAxMSwgMjI0LCA2MywgCi0gICAgOSwgMTEsIDIyNCwgNjQsIDksIDExLCAyMjQsIDY1LCA5LCAxMSwgMjI0LCA2NiwgOSwgMTEsIDIyNCwgNjcsIDksIDExLCAKLSAgICAyMjQsIDY4LCA5LCAxMSwgMjI0LCA2OSwgOSwgMTEsIDIyNCwgNzAsIDksIDExLCAyMjQsIDcxLCA5LCAxMSwgMjI0LCA3MiwgCi0gICAgOSwgMTEsIDIyNCwgNzMsIDksIDExLCAyMjQsIDc0LCA5LCAxMSwgMjI0LCA3NSwgOSwgMTEsIDIyNCwgNzYsIDksIDExLCAKLSAgICAyMjQsIDc3LCA5LCAxMSwgMjI0LCA3OCwgOSwgMTEsIDIyNCwgNzksIDksIDExLCAyMjQsIDgwLCA5LCAxMSwgMjI0LCA4MSwgCi0gICAgOSwgMTEsIDIyNCwgODIsIDksIDExLCAyMjQsIDgzLCA5LCAxMSwgMjI0LCA4NCwgOSwgMTEsIDIyNCwgODUsIDksIDExLCAKLSAgICAyMjQsIDg2LCA5LCAxMSwgMjI0LCA4NywgOSwgMTEsIDIyNCwgODgsIDksIDExLCAyMjQsIDg5LCA5LCAxMSwgMjI0LCA5MCwgCi0gICAgOSwgMTEsIDIyNCwgOTEsIDksIDExLCAyMjQsIDkyLCA5LCAxMSwgMjI0LCA5MywgOSwgMTEsIDIyNCwgOTQsIDksIDExLCAKLSAgICAyMjQsIDk1LCA5LCAxMSwgMjI0LCA5NiwgOSwgMTEsIDIyNCwgOTcsIDksIDExLCAyMjQsIDk4LCA5LCAxMSwgMjI0LCA5OSwgCi0gICAgOSwgMTEsIDIyNCwgMTAwLCA5LCAxMSwgMjI0LCAxMDEsIDksIDExLCAyMjQsIDEwMiwgOSwgMTEsIDIyNCwgMTAzLCA5LCAKLSAgICAxMSwgMjI0LCAxMDQsIDksIDExLCAyMjQsIDEwNSwgOSwgMTEsIDIyNCwgMTA2LCA5LCAxMSwgMjI0LCAxMDcsIDksIDExLCAKLSAgICAyMjQsIDEwOCwgOSwgMTEsIDIyNCwgMTA5LCA5LCAxMSwgMjI0LCAxMTAsIDksIDExLCAyMjQsIDExMSwgOSwgMTEsIDIyNCwgCi0gICAgMTEyLCA5LCAxMSwgMjI0LCAxMTMsIDksIDExLCAyMjQsIDExNCwgOSwgMTEsIDIyNCwgMTE1LCA5LCAxMSwgMjI0LCAxMTYsIAotICAgIDksIDExLCAyMjQsIDExNywgOSwgMTEsIDIyNCwgMTE4LCA5LCAxMSwgMjI0LCAxMTksIDksIDExLCAyMjQsIDEyMCwgOSwgCi0gICAgMTEsIDIyNCwgMTIxLCA5LCAxMSwgMjI0LCAxMjIsIDksIDExLCAyMjQsIDEyMywgOSwgMTEsIDIyNCwgMTI0LCA5LCAxMSwgCi0gICAgMjI0LCAxMjUsIDksIDExLCAyMjQsIDEyNiwgOSwgMTEsIDIyNCwgMTI3LCA5LCAxMSwgMjI0LCAxMjgsIDksIDExLCAyMjQsIAotICAgIDEyOSwgOSwgMTEsIDIyNCwgMTMwLCA5LCAxMSwgMjI0LCAxMzEsIDksIDExLCAyMjQsIDEzMiwgOSwgMTEsIDIyNCwgMTMzLCAKLSAgICA5LCAxMSwgMjI0LCAxMzQsIDksIDExLCAyMjQsIDEzNSwgOSwgMTEsIDIyNCwgMTM2LCA5LCAxMSwgMjI0LCAxMzcsIDksIAotICAgIDExLCAyMjQsIDEzOCwgOSwgMTEsIDIyNCwgMTM5LCA5LCAxMSwgMjI0LCAxNDAsIDksIDExLCAyMjQsIDE0MSwgOSwgMTEsIAotICAgIDIyNCwgMTQyLCA5LCAxMSwgMjI0LCAxNDMsIDksIDExLCAyMjQsIDE0NCwgOSwgMTEsIDIyNCwgMTQ1LCA5LCAxMSwgMjI0LCAKLSAgICAxNDYsIDksIDExLCAyMjQsIDE0NywgOSwgMTEsIDIyNCwgMTQ4LCA5LCAxMSwgMjI0LCAxNDksIDksIDExLCAyMjQsIDE1MCwgCi0gICAgOSwgMTEsIDIyNCwgMTUxLCA5LCAxMSwgMjI0LCAxNTIsIDksIDExLCAyMjQsIDE1MywgOSwgMTEsIDIyNCwgMTU0LCA5LCAKLSAgICAxMSwgMjI0LCAxNTUsIDksIDExLCAyMjQsIDE1NiwgOSwgMTEsIDIyNCwgMTU3LCA5LCAxMSwgMjI0LCAxNTgsIDksIDExLCAKLSAgICAyMjQsIDE1OSwgOSwgMTEsIDIyNCwgMTYwLCA5LCAxMSwgMjI0LCAxNjEsIDksIDExLCAyMjQsIDE2MiwgOSwgMTEsIDIyNCwgCi0gICAgMTYzLCA5LCAxMSwgMjI0LCAxNjQsIDksIDExLCAyMjQsIDE2NSwgOSwgMTEsIDIyNCwgMTY2LCA5LCAxMSwgMjI0LCAxNjcsIAotICAgIDksIDExLCAyMjQsIDE2OCwgOSwgMTEsIDIyNCwgMTY5LCA5LCAxMSwgMjI0LCAxNzAsIDksIDExLCAyMjQsIDE3MSwgOSwgCi0gICAgMTEsIDIyNCwgMTcyLCA5LCAxMSwgMjI0LCAxNzMsIDksIDExLCAyMjQsIDE3NCwgOSwgMTEsIDIyNCwgMTc1LCA5LCAxMSwgCi0gICAgMjI0LCAxNzYsIDksIDExLCAyMjQsIDE3NywgOSwgMTEsIDIyNCwgMTc4LCA5LCAxMSwgMjI0LCAxNzksIDksIDExLCAyMjQsIAotICAgIDE4MCwgOSwgMTEsIDIyNCwgMTgxLCA5LCAxMSwgMjI0LCAxODIsIDksIDExLCAyMjQsIDE4MywgOSwgMTEsIDIyNCwgMTg0LCAKLSAgICA5LCAxMSwgMjI0LCAxODUsIDksIDExLCAyMjQsIDE4NiwgOSwgMTEsIDIyNCwgMTg3LCA5LCAxMSwgMjI0LCAxODgsIDksIAotICAgIDExLCAyMjQsIDE4OSwgOSwgMTEsIDIyNCwgMTkwLCA5LCAxMSwgMjI0LCAxOTEsIDksIDExLCAyMjQsIDE5MiwgOSwgMTEsIAotICAgIDIyNCwgMTkzLCA5LCAxMSwgMjI0LCAxOTQsIDksIDExLCAyMjQsIDE5NSwgOSwgMTEsIDIyNCwgMTk2LCA5LCAxMSwgMjI0LCAKLSAgICAxOTcsIDksIDExLCAyMjQsIDE5OCwgOSwgMTEsIDIyNCwgMTk5LCA5LCAxMSwgMjI0LCAyMDAsIDksIDExLCAyMjQsIDIwMSwgCi0gICAgOSwgMTEsIDIyNCwgMjAyLCA5LCAxMSwgMjI0LCAyMDMsIDksIDExLCAyMjQsIDIwNCwgOSwgMTEsIDIyNCwgMjA1LCA5LCAKLSAgICAxMSwgMjI0LCAyMDYsIDksIDExLCAyMjQsIDIwNywgOSwgMTEsIDIyNCwgMjA4LCA5LCAxMSwgMjI0LCAyMDksIDksIDExLCAKLSAgICAyMjQsIDIxMCwgOSwgMTEsIDIyNCwgMjExLCA5LCAxMSwgMjI0LCAyMTIsIDksIDExLCAyMjQsIDIxMywgOSwgMTEsIDIyNCwgCi0gICAgMjE0LCA5LCAxMSwgMjI0LCAyMTUsIDksIDExLCAyMjQsIDIxNiwgOSwgMTEsIDIyNCwgMjE3LCA5LCAxMSwgMjI0LCAyMTgsIAotICAgIDksIDExLCAyMjQsIDIxOSwgOSwgMTEsIDIyNCwgMjIwLCA5LCAxMSwgMjI0LCAyMjEsIDksIDExLCAyMjQsIDIyMiwgOSwgCi0gICAgMTEsIDIyNCwgMjIzLCA5LCAxMSwgMjI0LCAyMjQsIDksIDExLCAyMjQsIDIyNSwgOSwgMTEsIDIyNCwgMjI2LCA5LCAxMSwgCi0gICAgMjI0LCAyMjcsIDksIDExLCAyMjQsIDIyOCwgOSwgMTEsIDIyNCwgMjI5LCA5LCAxMSwgMjI0LCAyMzAsIDksIDExLCAyMjQsIAotICAgIDIzMSwgOSwgMTEsIDIyNCwgMjMyLCA5LCAxMSwgMjI0LCAyMzMsIDksIDExLCAyMjQsIDIzNCwgOSwgMTEsIDIyNCwgMjM1LCAKLSAgICA5LCAxMSwgMjI0LCAyMzYsIDksIDExLCAyMjQsIDIzNywgOSwgMTEsIDIyNCwgMjM4LCA5LCAxMSwgMjI0LCAyMzksIDksIAotICAgIDExLCAyMjQsIDI0MCwgOSwgMTEsIDIyNCwgMjQxLCA5LCAxMSwgMjI0LCAyNDIsIDksIDExLCAyMjQsIDI0MywgOSwgMTEsIAotICAgIDIyNCwgMjQ0LCA5LCAxMSwgMjI0LCAyNDUsIDksIDExLCAyMjQsIDI0NiwgOSwgMTEsIDIyNCwgMjQ3LCA5LCAxMSwgMjI0LCAKLSAgICAyNDgsIDksIDExLCAyMjQsIDI0OSwgOSwgMTEsIDIyNCwgMjUwLCA5LCAxMSwgMjI0LCAyNTEsIDksIDExLCAyMjQsIDI1MiwgCi0gICAgOSwgMTEsIDIyNCwgMjUzLCA5LCAxMSwgMjI0LCAyNTQsIDksIDExLCAyMjQsIDI1NSwgOSwgMTEsIDIyNSwgMCwgOSwgMTEsIAotICAgIDIyNSwgMSwgOSwgMTEsIDIyNSwgMiwgOSwgMTEsIDIyNSwgMywgOSwgMTEsIDIyNSwgNCwgOSwgMTEsIDIyNSwgNSwgOSwgCi0gICAgMTEsIDIyNSwgNiwgOSwgMTEsIDIyNSwgNywgOSwgMTEsIDIyNSwgOCwgOSwgMTEsIDIyNSwgOSwgOSwgMTEsIDIyNSwgMTAsIAotICAgIDksIDExLCAyMjUsIDExLCA5LCAxMSwgMjI1LCAxMiwgOSwgMTEsIDIyNSwgMTMsIDksIDExLCAyMjUsIDE0LCA5LCAxMSwgCi0gICAgMjI1LCAxNSwgOSwgMTEsIDIyNSwgMTYsIDksIDExLCAyMjUsIDE3LCA5LCAxMSwgMjI1LCAxOCwgOSwgMTEsIDIyNSwgMTksIAotICAgIDksIDExLCAyMjUsIDIwLCA5LCAxMSwgMjI1LCAyMSwgOSwgMTEsIDIyNSwgMjIsIDksIDExLCAyMjUsIDIzLCA5LCAxMSwgCi0gICAgMjI1LCAyNCwgOSwgMTEsIDIyNSwgMjUsIDksIDExLCAyMjUsIDI2LCA5LCAxMSwgMjI1LCAyNywgOSwgMTEsIDIyNSwgMjgsIAotICAgIDksIDExLCAyMjUsIDI5LCA5LCAxMSwgMjI1LCAzMCwgOSwgMTEsIDIyNSwgMzEsIDksIDExLCAyMjUsIDMyLCA5LCAxMSwgCi0gICAgMjI1LCAzMywgOSwgMTEsIDIyNSwgMzQsIDksIDExLCAyMjUsIDM1LCA5LCAxMSwgMjI1LCAzNiwgOSwgMTEsIDIyNSwgMzcsIAotICAgIDksIDExLCAyMjUsIDM4LCA5LCAxMSwgMjI1LCAzOSwgOSwgMTEsIDIyNSwgNDAsIDksIDExLCAyMjUsIDQxLCA5LCAxMSwgCi0gICAgMjI1LCA0MiwgOSwgMTEsIDIyNSwgNDMsIDksIDExLCAyMjUsIDQ0LCA5LCAxMSwgMjI1LCA0NSwgOSwgMTEsIDIyNSwgNDYsIAotICAgIDksIDExLCAyMjUsIDQ3LCA5LCAxMSwgMjI1LCA0OCwgOSwgMTEsIDIyNSwgNDksIDksIDExLCAyMjUsIDUwLCA5LCAxMSwgCi0gICAgMjI1LCA1MSwgOSwgMTEsIDIyNSwgNTIsIDksIDExLCAyMjUsIDUzLCA5LCAxMSwgMjI1LCA1NCwgOSwgMTEsIDIyNSwgNTUsIAotICAgIDksIDExLCAyMjUsIDU2LCA5LCAxMSwgMjI1LCA1NywgOSwgMTEsIDIyNSwgNTgsIDksIDExLCAyMjUsIDU5LCA5LCAxMSwgCi0gICAgMjI1LCA2MCwgOSwgMTEsIDIyNSwgNjEsIDksIDExLCAyMjUsIDYyLCA5LCAxMSwgMjI1LCA2MywgOSwgMTEsIDIyNSwgNjQsIAotICAgIDksIDExLCAyMjUsIDY1LCA5LCAxMSwgMjI1LCA2NiwgOSwgMTEsIDIyNSwgNjcsIDksIDExLCAyMjUsIDY4LCA5LCAxMSwgCi0gICAgMjI1LCA2OSwgOSwgMTEsIDIyNSwgNzAsIDksIDExLCAyMjUsIDcxLCA5LCAxMSwgMjI1LCA3MiwgOSwgMTEsIDIyNSwgNzMsIAotICAgIDksIDExLCAyMjUsIDc0LCA5LCAxMSwgMjI1LCA3NSwgOSwgMTEsIDIyNSwgNzYsIDksIDExLCAyMjUsIDc3LCA5LCAxMSwgCi0gICAgMjI1LCA3OCwgOSwgMTEsIDIyNSwgNzksIDksIDExLCAyMjUsIDgwLCA5LCAxMSwgMjI1LCA4MSwgOSwgMTEsIDIyNSwgODIsIAotICAgIDksIDExLCAyMjUsIDgzLCA5LCAxMSwgMjI1LCA4NCwgOSwgMTEsIDIyNSwgODUsIDksIDExLCAyMjUsIDg2LCA5LCAxMSwgCi0gICAgMjI1LCA4NywgOSwgMTEsIDIyNSwgODgsIDksIDExLCAyMjUsIDg5LCA5LCAxMSwgMjI1LCA5MCwgOSwgMTEsIDIyNSwgOTEsIAotICAgIDksIDExLCAyMjUsIDkyLCAyMzQsIDE0NCwgMjQ3LCAxMDUsIDEwOCwgMjM3LCA2OSwgMTA4LCAyMjksIDE2NSwgNzYsIDEwOCwgCi0gICAgMjMxLCAxOTksIDc2LCAxMDgsIDY1LCA1MywgMTA4LCAyMzcsIDE3OSwgNTMsIDEwOCwgMjM1LCA4NiwgNTMsIDEwOCwgMjMwLCAKLSAgICAxNDIsIDEwOCwgMjI5LCAxNzIsIDEwOCwgNDIsIDIyOCwgMTgwLCAxMDgsIDQxLCAyMjgsIDE4MCwgMTA4LCAyMzEsIDE5OCwgCi0gICAgMTA4LCA3OSwgNTMsIDEwOCwgMjM3LCA2NywgMTA4LCAyMjcsIDE5MywgMTA4LCAyNDYsIDE2MiwgMjQwLCAxMjEsIDEwOCwgCi0gICAgMjMzLCAxMDQsIDEwOCwgMjEsIDI0MCwgMTI2LCAxMDgsIDIxLCAxMTgsIDEwOCwgMjEsIDExMywgMTA4LCAyMSwgMTY2LCAKLSAgICAxMDgsIDIxLCAxNTgsIDEwOCwgMjEsIDE3MywgMTA4LCAyMSwgMTgzLCAxMDgsIDIxLCAxOTQsIDEwOCwgMjEsIDE4NywgCi0gICAgMTA4LCAyMSwgMTkyLCAxMDgsIDIzNywgNjYsIDEwOCwgMjMwLCAxNDAsIDEwOCwgMjMxLCAxOTAsIDUzLCAxMDgsIDIzNywgCi0gICAgNTEsIDUzLCAxMDgsIDIyOCwgMTc1LCA1MywgMTA4LCAyMzMsIDgyLCA3NiwgMTA4LCAyMzAsIDE0NSwgMjUzLCAxMTMsIAotICAgIDEwOCwgNywgNiwgMSwgNTcsIDEwOCwgNywgNiwgMSwgMjU0LCAxODUsIDEwOCwgNywgNiwgMSwgMjU0LCAxOTQsIDEwOCwgNywgCi0gICAgNiwgMSwgMjIyLCAyMjIsIDEwOCwgNywgNiwgMSwgNzIsIDEwOCwgNywgNiwgMSwgMjU0LCAxOTEsIDEwOCwgNywgNiwgMSwgCi0gICAgMjE0LCAxMDgsIDcsIDYsIDEsIDIxMiwgMTA4LCA3LCA2LCAxLCA3NCwgMTA4LCA3LCA2LCAxLCAyNTQsIDE5MiwgMTA4LCA3LCAKLSAgICA2LCAxLCAyNTQsIDE4NiwgMTA4LCA3LCA2LCAxLCAxNDksIDEwOCwgNywgNiwgMSwgMTg1LCAxMDgsIDcsIDYsIDEsIDE5OSwgCi0gICAgMTA4LCA3LCA2LCAxLCA3MywgMTA4LCA3LCA2LCAxLCAyNTQsIDE4NywgMTA4LCA3LCA2LCAxLCAyNTQsIDE5NiwgMTA4LCA3LCAKLSAgICA2LCAxLCAxNDYsIDEwOCwgNywgNiwgMSwgMTkzLCAxMDgsIDcsIDYsIDEsIDI1NCwgMTgzLCAxMDgsIDcsIDYsIDEsIDY2LCAKLSAgICAxMDgsIDcsIDYsIDEsIDE5NiwgMTA4LCA3LCA2LCAxLCAyNTQsIDE5NSwgMTA4LCA3LCA2LCAxLCAyNTQsIDE4NCwgMTA4LCAKLSAgICA3LCA2LCAxLCAyNTQsIDE5MCwgMTA4LCA3LCA2LCAxLCAyNTQsIDE5MywgMTA4LCA0MiwgMzcsIDEwNCwgMTA4LCAyMzUsIAotICAgIDM3LCAyMzMsIDEwNCwgMTA4LCA0MSwgMzcsIDEwNCwgMTA4LCAyMzAsIDEyNSwgMjM1LCAyNCwgMTA4LCAxODQsIDI0MCwgCi0gICAgMTM4LCAxMDgsIDI0MCwgMTYzLCAyMzUsIDI0LCAxMDgsIDcsIDMsIDEsIDU3LCAxMDgsIDcsIDMsIDEsIDI1NCwgMTg1LCAKLSAgICAxMDgsIDcsIDMsIDEsIDI1NCwgMTk0LCAxMDgsIDcsIDMsIDEsIDIyMiwgMjIyLCAxMDgsIDcsIDMsIDEsIDcyLCAxMDgsIDcsIAotICAgIDMsIDEsIDI1NCwgMTkxLCAxMDgsIDcsIDMsIDEsIDIxNCwgMTA4LCA3LCAzLCAxLCAyMTIsIDEwOCwgNywgMywgMSwgNzQsIAotICAgIDEwOCwgNywgMywgMSwgMjU0LCAxOTIsIDEwOCwgNywgMywgMSwgMjU0LCAxODYsIDEwOCwgNywgMywgMSwgMTQ5LCAxMDgsIAotICAgIDcsIDMsIDEsIDE4NSwgMTA4LCA3LCAzLCAxLCAxOTksIDEwOCwgNywgMywgMSwgNzMsIDEwOCwgNywgMywgMSwgMjU0LCAKLSAgICAxODcsIDEwOCwgNywgMywgMSwgMjU0LCAxOTYsIDEwOCwgNywgMywgMSwgMTQ2LCAxMDgsIDcsIDMsIDEsIDE5MywgMTA4LCAKLSAgICA3LCAzLCAxLCAyNTQsIDE4MywgMTA4LCA3LCAzLCAxLCA2NiwgMTA4LCA3LCAzLCAxLCAxOTYsIDEwOCwgNywgMywgMSwgCi0gICAgMjU0LCAxOTUsIDEwOCwgNywgMywgMSwgMjU0LCAxODQsIDEwOCwgNywgMywgMSwgMjU0LCAxOTAsIDEwOCwgNywgMywgMSwgCi0gICAgMjU0LCAxOTMsIDEwOCwgNDIsIDI0MCwgMTM3LCAxMDQsIDEwOCwgNjEsIDI0MCwgMTM4LCAxMDgsIDQxLCAyNDAsIDEzNywgCi0gICAgMTA0LCAxMDgsIDIwNSwgMjM4LCAxMzcsIDI0NywgMTA1LCAzOCwgMjI5LCA2NiwgMzgsIDIyOSwgNjcsIDM4LCAyMjksIDY4LCAKLSAgICAzOCwgMjI5LCA2OSwgMzgsIDIyOSwgNzAsIDM4LCAyMjksIDcxLCAzOCwgMjI5LCA3MiwgMzgsIDIyOSwgNzMsIDM4LCAyMjksIAotICAgIDc0LCAzOCwgMjI5LCA3NSwgMzgsIDIyOSwgNzYsIDM4LCAyMjksIDc3LCAzOCwgMjI5LCA3OCwgMzgsIDIyOSwgNzksIDM4LCAKLSAgICAyMjksIDgwLCAzOCwgMjI5LCA4MSwgMzgsIDIyOSwgODIsIDM4LCAyMjksIDgzLCAzOCwgMjI5LCA4NCwgMzgsIDIyOSwgODUsIAotICAgIDM4LCAyMjksIDg2LCAzOCwgMjI5LCA4NywgMzgsIDIyOSwgODgsIDM4LCAyMjksIDg5LCAzOCwgMjI5LCA5MCwgMzgsIDIyOSwgCi0gICAgOTEsIDM4LCAyMjksIDkyLCAzOCwgMjI5LCA5MywgMzgsIDIyOSwgOTQsIDM4LCAyMjksIDk1LCAzOCwgMjI5LCA5NiwgMzgsIAotICAgIDIyOSwgOTcsIDM4LCAyMjksIDk4LCAzOCwgMjI5LCA5OSwgMzgsIDIyOSwgMTAwLCAzOCwgMjI5LCAxMDEsIDM4LCAyMjksIAotICAgIDEwMiwgMzgsIDIyOSwgMTAzLCAzOCwgMjI5LCAxMDQsIDM4LCAyMjksIDEwNSwgMzgsIDIyOSwgMTA2LCAzOCwgMjI5LCAKLSAgICAxMDcsIDM4LCAyMjksIDEwOCwgMzgsIDIyOSwgMTA5LCAzOCwgMjI5LCAxMTAsIDM4LCAyMjksIDExMSwgMzgsIDIyOSwgCi0gICAgMTEyLCAzOCwgMjI5LCAxMTMsIDM4LCAyMjksIDExNCwgMzgsIDIyOSwgMTE1LCAzOCwgMjI5LCAxMTYsIDM4LCAyMjksIAotICAgIDExNywgMzgsIDIyOSwgMTE4LCAzOCwgMjI5LCAxMTksIDM4LCAyMjksIDEyMCwgMzgsIDIyOSwgMTIxLCAzOCwgMjI5LCAKLSAgICAxMjIsIDM4LCAyMjksIDEyMywgMzgsIDIyOSwgMTI0LCAzOCwgMjI5LCAxMjUsIDM4LCAyMjksIDEyNiwgMzgsIDIyOSwgCi0gICAgMTI3LCAzOCwgMjI5LCAxMjgsIDM4LCAyMjksIDEyOSwgMzgsIDIyOSwgMTMwLCAzOCwgMjI5LCAxMzEsIDM4LCAyMjksIAotICAgIDEzMiwgMzgsIDIyOSwgMTMzLCAzOCwgMjI5LCAxMzQsIDM4LCAyMjksIDEzNSwgMzgsIDIyOSwgMTM2LCAzOCwgMjI5LCAKLSAgICAxMzcsIDM4LCAyMjksIDEzOCwgMzgsIDIyOSwgMTM5LCAzOCwgMjI5LCAxNDAsIDM4LCAyMjksIDE0MSwgMzgsIDIyOSwgCi0gICAgMTQyLCAzOCwgMjI5LCAxNDMsIDM4LCAyMjksIDE0NCwgMzgsIDIyOSwgMTQ1LCAzOCwgMjI5LCAxNDYsIDM4LCAyMjksIAotICAgIDE0NywgMzgsIDIyOSwgMTQ4LCAzOCwgMjI4LCAzLCAzOCwgMjI4LCA0LCAzOCwgMjI4LCA1LCAzOCwgMjI4LCA2LCAzOCwgCi0gICAgMjI4LCA3LCAzOCwgMjI4LCA4LCAzOCwgMjI4LCA5LCAzOCwgMjI4LCAxMCwgMzgsIDIyOCwgMTEsIDM4LCAyMjgsIDEyLCAKLSAgICAzOCwgMjI4LCAxMywgMzgsIDIyOCwgMTQsIDM4LCAyMjgsIDE1LCAzOCwgMjI4LCAxNiwgMzgsIDIyOCwgMTcsIDM4LCAyMjgsIAotICAgIDE4LCAzOCwgMjI4LCAxOSwgMzgsIDIyOCwgMjAsIDM4LCAyMjgsIDIxLCAzOCwgMjI4LCAyMiwgMzgsIDIyOCwgMjMsIDM4LCAKLSAgICAyMjgsIDI0LCAzOCwgMjI4LCAyNSwgMzgsIDIyOCwgMjYsIDM4LCAyMjgsIDI3LCAzOCwgMjI4LCAyOCwgMzgsIDIyOCwgMjksIAotICAgIDM4LCAyMjgsIDMwLCAzOCwgMjI4LCAzMSwgMzgsIDIyOCwgMzIsIDM4LCAyMjgsIDMzLCAzOCwgMjI4LCAzNCwgMzgsIDIyOCwgCi0gICAgMzUsIDM4LCAyMjgsIDM2LCAzOCwgMjI4LCAzNywgMzgsIDIyOCwgMzgsIDM4LCAyMjgsIDM5LCAzOCwgMjI4LCA0MCwgMzgsIAotICAgIDIyOCwgNDEsIDM4LCAyMjgsIDQyLCAzOCwgMjI4LCA0MywgMzgsIDIyOCwgNDQsIDM4LCAyMjgsIDQ1LCAzOCwgMjI4LCA0NiwgCi0gICAgMzgsIDIyOCwgNDcsIDM4LCAyMjgsIDQ4LCAzOCwgMjI4LCA0OSwgMzgsIDIyOCwgNTAsIDM4LCAyMjgsIDUxLCAzOCwgMjI4LCAKLSAgICA1MiwgMzgsIDIyOCwgNTMsIDM4LCAyMjgsIDU0LCAzOCwgMjI4LCA1NSwgMzgsIDIyOCwgNTYsIDM4LCAyMjgsIDU3LCAzOCwgCi0gICAgMjI4LCA1OCwgMzgsIDIyOCwgNTksIDM4LCAyMjgsIDYwLCAzOCwgMjI4LCA2MSwgMzgsIDIyOCwgNjIsIDM4LCAyMjgsIDYzLCAKLSAgICAzOCwgMjI4LCA2NCwgMzgsIDIyOCwgNjUsIDM4LCAyMjgsIDY2LCAzOCwgMjI4LCA2NywgMzgsIDIyOCwgNjgsIDM4LCAyMjgsIAotICAgIDY5LCAzOCwgMjI4LCA3MCwgMzgsIDIyOCwgNzEsIDM4LCAyMjgsIDcyLCAzOCwgMjI4LCA3MywgMzgsIDIyOCwgNzQsIDM4LCAKLSAgICAyMjgsIDc1LCAzOCwgMjI4LCA3NiwgMzgsIDIyOCwgNzcsIDM4LCAyMjgsIDc4LCAzOCwgMjI4LCA3OSwgMzgsIDIyOCwgODAsIAotICAgIDM4LCAyMjgsIDgxLCAzOCwgMjI4LCA4MiwgMzgsIDIyOCwgODMsIDM4LCAyMjgsIDg0LCAzOCwgMjI4LCA4NSwgMzgsIDIyOCwgCi0gICAgODYsIDM4LCAyMjgsIDg3LCAzOCwgMjI4LCA4OCwgMzgsIDIyOCwgODksIDM4LCAyMjgsIDkwLCAzOCwgMjI4LCA5MSwgMzgsIAotICAgIDIyOCwgOTIsIDM4LCAyMjgsIDkzLCAzOCwgMjI4LCA5NCwgMzgsIDIyOCwgOTUsIDM4LCAyMjgsIDk2LCAzOCwgMjI4LCA5NywgCi0gICAgMzgsIDIyOCwgOTgsIDM4LCAyMjgsIDk5LCAzOCwgMjI4LCAxMDAsIDM4LCAyMjgsIDEwMSwgMzgsIDIyOCwgMTAyLCAzOCwgCi0gICAgMjI4LCAxMDMsIDM4LCAyMjgsIDEwNCwgMzgsIDIyOCwgMTA1LCAzOCwgMjI4LCAxMDYsIDM4LCAyMjgsIDEwNywgMzgsIAotICAgIDIyOCwgMTA4LCAzOCwgMjI4LCAxMDksIDM4LCAyMjgsIDExMCwgMzgsIDIyOCwgMTExLCAzOCwgMjI4LCAxMTIsIDM4LCAKLSAgICAyMjgsIDExMywgMzgsIDIyOCwgMTE0LCAzOCwgMjI4LCAxMTUsIDM4LCAyMjgsIDExNiwgMzgsIDIyOCwgMTE3LCAzOCwgCi0gICAgMjI4LCAxMTgsIDM4LCAyMjgsIDExOSwgMzgsIDIyOCwgMTIwLCAzOCwgMjI4LCAxMjEsIDM4LCAyMjgsIDEyMiwgMzgsIAotICAgIDIyOCwgMTIzLCAzOCwgMjI4LCAxMjQsIDM4LCAyMjgsIDEyNSwgMzgsIDIyOCwgMTI2LCAzOCwgMjI4LCAxMjcsIDM4LCAKLSAgICAyMjgsIDEyOCwgMzgsIDIyOCwgMTI5LCAzOCwgMjI4LCAxMzAsIDM4LCAyMjgsIDEzMSwgMzgsIDIyOCwgMTMyLCAzOCwgCi0gICAgMjI4LCAxMzMsIDM4LCAyMjgsIDEzNCwgMzgsIDIyOCwgMTM1LCAzOCwgMjI4LCAxMzYsIDM4LCAyMjgsIDEzNywgMzgsIAotICAgIDIyOCwgMTM4LCAzOCwgMjI4LCAxMzksIDM4LCAyMjgsIDE0MCwgMzgsIDIyOCwgMTQxLCAzOCwgMjI4LCAxNDIsIDM4LCAKLSAgICAyMjgsIDE0MywgMzgsIDIyOCwgMTQ0LCAzOCwgMjI4LCAxNDUsIDM4LCAyMjgsIDE0NiwgMzgsIDIyOCwgMTQ3LCAzOCwgCi0gICAgMjI4LCAxNDgsIDM4LCAyMjgsIDE0OSwgMzgsIDIyOCwgMTUwLCAzOCwgMjI4LCAxNTEsIDM4LCAyMjgsIDE1MiwgMzgsIAotICAgIDIyOCwgMTUzLCAzOCwgMjI4LCAxNTQsIDM4LCAyMjgsIDE1NSwgMzgsIDIyOCwgMTU2LCAzOCwgMjI4LCAxNTcsIDM4LCAKLSAgICAyMjgsIDE1OCwgMzgsIDIyOCwgMTU5LCAKKyAgICAwLCAyMjMsIDI1NCwgMjQ2LCA5NSwgNzgsIDIyOCwgNjksIDc4LCA1NCwgNTUsIDI0OCwgMTU1LCA1NSwgMjI5LCAxNjksIAorICAgIDU1LCAyNTQsIDEzNCwgMjU0LCA3OSwgNDIsIDIyOSwgMjI5LCA0NSwgMjI5LCAyMjksIDI1MywgMjUxLCA4OCwgNTUsIDI1MCwgCisgICAgMTY4LCAyNDIsIDEyMCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIyNCwgMTcsIDIwLCAyMTcsIDg0LCAyMCwgMTA3LCAyMCwgMTAzLCAKKyAgICAyMCwgMTYwLCAyMCwgMTU0LCAyMCwgMTc0LCAyMCwgMTgyLCAyMCwgMTkxLCAyMCwgMTg1LCAyMCwgMTkwLCAyNTAsIDE3NSwgCisgICAgMjI1LCA2NywgMjM1LCA4NywgNTUsIDI0NiwgMTU0LCA1NSwgMjQ0LCAzMCwgNTUsIDIyOCwgODIsIDc4LCAyNTAsIDE2NywgCisgICAgMjUzLCAyNDQsIDcsIDYsIDEsIDYwLCA3LCA2LCAxLCAyNTMsIDIwNCwgNywgNiwgMSwgMjUxLCAyMDIsIDcsIDYsIDEsIAorICAgIDI1MCwgNDYsIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyNDYsIDc0LCA3LCA2LCAxLCAyNDUsIDY3LCA3LCA2LCAxLCAyNDMsIAorICAgIDIyNSwgNywgNiwgMSwgNzIsIDcsIDYsIDEsIDIzNywgMTI2LCA3LCA2LCAxLCAyMzcsIDE3LCA3LCA2LCAxLCAxNTMsIDcsIAorICAgIDYsIDEsIDE4OSwgNywgNiwgMSwgMjA3LCA3LCA2LCAxLCA3NCwgNywgNiwgMSwgMjMwLCA1OSwgNywgNiwgMSwgMjI4LCAKKyAgICAxNjMsIDcsIDYsIDEsIDE1MiwgNywgNiwgMSwgMTk4LCA3LCA2LCAxLCAyMjIsIDIwMSwgNywgNiwgMSwgNjgsIDcsIDYsIDEsIAorICAgIDIxNiwgMjE2LCA3LCA2LCAxLCAyMTksIDQwLCA3LCA2LCAxLCAyMTgsIDE1MSwgNywgNiwgMSwgMjE4LCA5MCwgNywgNiwgMSwgCisgICAgMjE3LCAxNTcsIDQyLCA0MCwgMTE1LCAyMjcsIDE2MCwgMjI0LCAxNywgNDUsIDQwLCAxMTUsIDI1MCwgMjE3LCAyNTUsIDAsIAorICAgIDEwOSwgMjM1LCA0MywgMjQ0LCAzNywgMjU1LCAwLCA3LCAzLCAxLCA2MCwgNywgMywgMSwgMjUzLCAyMDQsIDcsIDMsIDEsIAorICAgIDI1MSwgMjAyLCA3LCAzLCAxLCAyNTAsIDQ2LCA3LCAzLCAxLCA3MywgNywgMywgMSwgMjQ2LCA3NCwgNywgMywgMSwgMjQ1LCAKKyAgICA2NywgNywgMywgMSwgMjQzLCAyMjUsIDcsIDMsIDEsIDcyLCA3LCAzLCAxLCAyMzcsIDEyNiwgNywgMywgMSwgMjM3LCAxNywgCisgICAgNywgMywgMSwgMTUzLCA3LCAzLCAxLCAxODksIDcsIDMsIDEsIDIwNywgNywgMywgMSwgNzQsIDcsIDMsIDEsIDIzMCwgNTksIAorICAgIDcsIDMsIDEsIDIyOCwgMTYzLCA3LCAzLCAxLCAxNTIsIDcsIDMsIDEsIDE5OCwgNywgMywgMSwgMjIyLCAyMDEsIDcsIDMsIAorICAgIDEsIDY4LCA3LCAzLCAxLCAyMTYsIDIxNiwgNywgMywgMSwgMjE5LCA0MCwgNywgMywgMSwgMjE4LCAxNTEsIDcsIDMsIDEsIAorICAgIDIxOCwgOTAsIDcsIDMsIDEsIDIxNywgMTU3LCA0MiwgMjUwLCA3OSwgMTE1LCA2OSwgMjM1LCA0MywgNDUsIDI1MCwgNzksIAorICAgIDExNSwgMjIxLCAxNzksIDIzMSwgMjAzLCAyMjMsIDI1NCwgMjM3LCAxNzAsIDI0NiwgOTUsIDc4LCAyNTEsIDg2LCA1NSwgCisgICAgMjI5LCAxMSwgNTUsIDI1MCwgNzgsIDU1LCAyMTgsIDE5LCA1NSwgMjUyLCAxLCAxMzUsIDIyNiwgODcsIDU1LCAyNDksIDEzLCAKKyAgICAyNTAsIDEyNiwgNTUsIDI0NSwgMjE1LCAyMzAsIDEwMywgMjM3LCAyMTEsIDIzNSwgMTEyLCA1MSwgMjU0LCAxMjAsIDIyOCwgCisgICAgNjksIDc4LCAyMTIsIDU1LCAyMjQsIDIxLCAyNDIsIDEyMSwgMjI3LCAxOTgsIDU1LCAyMzQsIDExNSwgMjQ5LCA3NywgNTUsIAorICAgIDIyOSwgNDIsIDU1LCAyMjMsIDU5LCAxMDMsIDIyMywgNTksIDE2MCwgMjU0LCAyNDgsIDI1NSwgMCwgMjMzLCAxOTUsIDU1LCAKKyAgICAyMjksIDczLCA1NSwgMjMzLCAxOTMsIDI0OCwgMTQ1LCAyNTEsIDkyLCAyMjMsIDU5LCAxMDcsIDIzNCwgNTgsIDIzMCwgCisgICAgMTAzLCAyMzcsIDIxMSwgMjI3LCAxMDYsIDUxLCAyNTQsIDEyMCwgMjI4LCA2OSwgNzgsIDIxOSwgNTUsIDI0NSwgMTA4LCAKKyAgICAxMzEsIDIyOCwgODksIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIDI0MywgMTk0LCAyMTksIDU1LCAyNDUsIDEwOCwgMTQ4LCAKKyAgICAyMjgsIDg3LCAyMzcsIDE3MCwgMjI4LCA4MiwgNzgsIDcsIDYsIDEsIDExMiwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMTEyLCAKKyAgICAyLCAxNjgsIDcsIDYsIDEsIDExMiwgMiwgMjUwLCAyMTYsIDcsIDYsIDEsIDExMiwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIAorICAgIDExMiwgMiwgMjQ5LCAxMywgNywgNiwgMSwgMTEyLCAyLCAyMjcsIDk0LCA1MCwgNywgNiwgMSwgMjU0LCAyMzQsIDcsIDYsIAorICAgIDEsIDI1MSwgMjAzLCAyLCAyNTEsIDkyLCA3LCA2LCAxLCAxNzgsIDIsIDI0NCwgMzYsIDcsIDYsIDEsIDE3OCwgMiwgMTY4LCAKKyAgICA3LCA2LCAxLCAxNzgsIDIsIDI1MCwgMjE2LCA3LCA2LCAxLCAxNzgsIDIsIDI0OSwgMTMsIDcsIDYsIDEsIDI0MiwgMTA3LCAKKyAgICAyLCAyNDQsIDM2LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMTY4LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMjUwLCAyMTYsIDcsIAorICAgIDYsIDEsIDI0MiwgMTA3LCAyLCAyNDksIDEzLCA3LCA2LCAxLCAyNDYsIDExOCwgNywgNiwgMSwgMjMzLCAzNCwgMiwgMjIxLCAKKyAgICAxNzksIDcsIDYsIDEsIDE0MiwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMTQyLCAyLCAxNjgsIDcsIDYsIDEsIDE0MiwgMiwgCisgICAgMjUwLCAyMTYsIDcsIDYsIDEsIDE0MiwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDE0MiwgMiwgMjQ5LCAxMywgMjMzLCA4NCwgCisgICAgNTUsIDcsIDYsIDEsIDE0MiwgMiwgOTIsIDcsIDYsIDEsIDEwNSwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMTA1LCAyLCAxNjgsIAorICAgIDcsIDYsIDEsIDEwNSwgMiwgMjUwLCAyMTYsIDcsIDYsIDEsIDEwNSwgMiwgMjQ5LCAxMywgNywgNiwgMSwgMjE4LCA5MSwgMiwgCisgICAgMTY4LCA3LCA2LCAxLCAyMjEsIDIzNCwgNywgMywgMSwgMjI1LCAxLCAxOTgsIDcsIDMsIDEsIDExMiwgMiwgMjQ0LCAzNiwgCisgICAgNywgMywgMSwgMTEyLCAyLCAxNjgsIDcsIDMsIDEsIDExMiwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDExMiwgMiwgMjIxLCAKKyAgICAxNzksIDcsIDMsIDEsIDExMiwgMiwgMjQ5LCAxMywgNywgMywgMSwgMTEyLCAyLCAyMjcsIDk0LCA1MCwgNywgMywgMSwgCisgICAgMjU0LCAyMzQsIDcsIDMsIDEsIDI1MSwgMjAzLCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAxNzgsIDIsIDI0NCwgMzYsIDcsIDMsIAorICAgIDEsIDE3OCwgMiwgMTY4LCA3LCAzLCAxLCAxNzgsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAxNzgsIDIsIDI0OSwgMTMsIDcsIAorICAgIDMsIDEsIDI0MiwgMTA3LCAyLCAyNDQsIDM2LCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgMTY4LCA3LCAzLCAxLCAyNDIsIDEwNywgCisgICAgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAyNDksIDEzLCA3LCAzLCAxLCAyNDYsIDExOCwgNywgMywgMSwgCisgICAgMjMzLCAzNCwgMiwgMjIxLCAxNzksIDcsIDMsIDEsIDE0MiwgMiwgMjQ0LCAzNiwgNywgMywgMSwgMTQyLCAyLCAxNjgsIDcsIAorICAgIDMsIDEsIDE0MiwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDE0MiwgMiwgMjIxLCAxNzksIDcsIDMsIDEsIDE0MiwgMiwgMjQ5LCAKKyAgICAxMywgMjQ4LCAxODgsIDU1LCA3LCAzLCAxLCAxNDIsIDIsIDkyLCA3LCAzLCAxLCAxMDUsIDIsIDI0NCwgMzYsIDcsIDMsIDEsIAorICAgIDEwNSwgMiwgMTY4LCA3LCAzLCAxLCAxMDUsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAxMDUsIDIsIDI0OSwgMTMsIDcsIDMsIAorICAgIDEsIDIxOCwgOTEsIDIsIDE2OCwgNywgMywgMSwgMjIxLCAyMzQsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDI0OSwgMTMsIDcsIAorICAgIDYsIDEsIDExMiwgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIDExMiwgMiwgMjM0LCAxMTUsIDcsIDYsIDEsIDExMiwgMiwgMjUyLCAKKyAgICA4LCA3LCAzLCAxLCAxMTIsIDIsIDI1MiwgOCwgNywgNiwgMSwgMTEyLCAyLCAyMzAsIDE2MiwgNywgMywgMSwgMTEyLCAyLCAKKyAgICAyMzAsIDE2MiwgNywgNiwgMSwgMjUxLCAyMDMsIDIsIDE2OCwgNywgMywgMSwgMjUxLCAyMDMsIDIsIDE2OCwgNywgNiwgMSwgCisgICAgMjUxLCAyMDMsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAyNTEsIDIwMywgMiwgMjUwLCAyMTYsIDcsIDYsIDEsIDI1MSwgMjAzLCAKKyAgICAyLCA2MSwgNTAsIDcsIDMsIDEsIDI1MSwgMjAzLCAyLCA2MSwgNTAsIDcsIDYsIDEsIDI1MSwgMjAzLCAyLCAyNTEsIDEzMCwgCisgICAgNywgMywgMSwgMjUxLCAyMDMsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAyNTAsIDQ3LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgCisgICAgMjUwLCA0NywgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDI1MCwgNDcsIDIsIDkyLCA3LCAzLCAxLCAyNTAsIDQ3LCAyLCA5MiwgCisgICAgNywgNiwgMSwgMTc4LCAyLCAyMzQsIDExNSwgNywgMywgMSwgMTc4LCAyLCAyMzQsIDExNSwgNywgNiwgMSwgMTc4LCAyLCAKKyAgICAyNTIsIDgsIDcsIDMsIDEsIDE3OCwgMiwgMjUyLCA4LCA3LCA2LCAxLCAxNzgsIDIsIDYxLCA1MCwgNywgMywgMSwgMTc4LCAKKyAgICAyLCA2MSwgNTAsIDcsIDYsIDEsIDE3OCwgMiwgMjMwLCAxNjIsIDcsIDMsIDEsIDE3OCwgMiwgMjMwLCAxNjIsIDcsIDYsIDEsIAorICAgIDE3OCwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDE3OCwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDI0NSwgNjgsIDIsIDI1MCwgCisgICAgMjE2LCA3LCAzLCAxLCAyNDUsIDY4LCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgMjUyLCA4LCA3LCAzLCAxLCAKKyAgICAyNDUsIDY4LCAyLCAyNTIsIDgsIDcsIDYsIDEsIDI0NSwgNjgsIDIsIDYxLCA1MCwgNywgMywgMSwgMjQ1LCA2OCwgMiwgNjEsIAorICAgIDUwLCA3LCA2LCAxLCAyNDUsIDY4LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyNDUsIDY4LCAyLCAyNTEsIDkyLCA3LCA2LCAxLCAKKyAgICAyNDMsIDIyNiwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMjQzLCAyMjYsIAorICAgIDIsIDkyLCA3LCAzLCAxLCAyNDMsIDIyNiwgMiwgOTIsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAyMjEsIDE3OSwgNywgMywgMSwgCisgICAgMjQyLCAxMDcsIDIsIDIyMSwgMTc5LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIDI0MiwgMTA3LCAKKyAgICAyLCAyMzQsIDExNSwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDI1MiwgOCwgNywgMywgMSwgMjQyLCAxMDcsIDIsIDI1MiwgOCwgCisgICAgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDIzMCwgMTYyLCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgMjMwLCAxNjIsIDcsIDYsIDEsIAorICAgIDI0MiwgMTA3LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDI0OCwgMTQ0LCA3MiwgNywgNiwgMjQsIDIzNywgMjUzLCA3LCAzLCAyNCwgCisgICAgMjM3LCAyNTMsIDcsIDYsIDEsIDIzNywgMTI3LCAyLCAyNTAsIDIxNiwgNywgMywgMSwgMjM3LCAxMjcsIDIsIDI1MCwgMjE2LCAKKyAgICA3LCA2LCAxLCAyMzcsIDE4LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyMzYsIAorICAgIDE3LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgMTY4LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMTY4LCA3LCA2LCAxLCAyMzUsIAorICAgIDIwMiwgMiwgMjUxLCA5MiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDI1MSwgOTIsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAKKyAgICAyNTEsIDEzMCwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgMjMzLCAxOTMsIAorICAgIDI0OCwgMTQ1LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjMzLCAxOTMsIDI0OCwgMTQ1LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgCisgICAgOTIsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCA5MiwgNywgNiwgMSwgMjMzLCAzNCwgMiwgMTY4LCA3LCAzLCAxLCAyMzMsIDM0LCAKKyAgICAyLCAxNjgsIDcsIDYsIDEsIDIzMywgMzQsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDI1MSwgOTIsIDcsIDYsIAorICAgIDEsIDIzMywgMzQsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAyMzMsIDM0LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjMzLCAzNCwgCisgICAgMjI4LCAyNDYsIDI1MSwgMjEzLCAyNTQsIDc5LCA3LCA2LCAxLCAyNDYsIDE4NSwgNywgMywgMSwgMjQ2LCAxODUsIDcsIDYsIAorICAgIDEsIDE0MiwgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIDE0MiwgMiwgMjM0LCAxMTUsIDcsIDYsIDEsIDE0MiwgMiwgMjUyLCA4LCAKKyAgICA3LCAzLCAxLCAxNDIsIDIsIDI1MiwgOCwgNywgNiwgMSwgMTQyLCAyLCA1MSwgMTY4LCA3LCAzLCAxLCAxNDIsIDIsIDUxLCAKKyAgICAxNjgsIDcsIDYsIDI0LCAyMzAsIDE2NywgNywgMywgMjQsIDIzMCwgMTY3LCA3LCA2LCAxLCAyMjgsIDM5LCAyLCAxNjgsIDcsIAorICAgIDMsIDEsIDIyOCwgMzksIDIsIDE2OCwgNywgNiwgMSwgMjI4LCAzOSwgMiwgMjUxLCA5MiwgNywgMywgMSwgMjI4LCAzOSwgMiwgCisgICAgMjUxLCA5MiwgNywgNiwgMSwgMjI4LCAzOSwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDIyOCwgMzksIDIsIDI1MSwgMTMwLCA3LCAKKyAgICA2LCAxLCAyMjYsIDIzNSwgMiwgMTY4LCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgMTY4LCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgCisgICAgMjUwLCAyMTYsIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAyNTAsIDIxNiwgNywgNiwgMSwgMjI2LCAyMzUsIDIsIDI1MSwgOTIsIAorICAgIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAyNTEsIDkyLCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIAorICAgIDIyNiwgMjM1LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjIyLCAyMDIsIDIsIDI1MSwgOTIsIDcsIDMsIDEsIDIyMiwgMjAyLCAKKyAgICAyLCAyNTEsIDkyLCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyNTEsIAorICAgIDEzMCwgNywgNiwgMSwgMjIyLCAyMDIsIDIsIDkyLCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgOTIsIDcsIDYsIDEsIDEwNSwgMiwgCisgICAgMjIxLCAxNzksIDcsIDMsIDEsIDEwNSwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDEwNSwgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIAorICAgIDEwNSwgMiwgMjM0LCAxMTUsIDcsIDYsIDEsIDEwNSwgMiwgMjUyLCA4LCA3LCAzLCAxLCAxMDUsIDIsIDI1MiwgOCwgNywgNiwgCisgICAgMSwgMTA1LCAyLCAyMjcsIDk0LCA1MCwgNywgMywgMSwgMTA1LCAyLCAyMjcsIDk0LCA1MCwgNywgNiwgMSwgMTA1LCAyLCAKKyAgICA1MSwgMTY4LCA3LCAzLCAxLCAxMDUsIDIsIDUxLCAxNjgsIDcsIDYsIDEsIDEwNSwgMiwgMjMwLCAxNjIsIDcsIDMsIDEsIAorICAgIDEwNSwgMiwgMjMwLCAxNjIsIDcsIDYsIDEsIDIxOSwgNDEsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAyMTksIDQxLCAyLCAKKyAgICAyNTAsIDIxNiwgNywgNiwgMSwgMjE4LCA5MSwgMiwgMjUwLCAyMTYsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDI1MCwgMjE2LCAKKyAgICA3LCA2LCAxLCAyMTgsIDkxLCAyLCAyNDksIDEzLCA3LCA2LCAxLCAyMTcsIDE1OCwgMiwgMTY4LCA3LCAzLCAxLCAyMTcsIAorICAgIDE1OCwgMiwgMTY4LCA3LCA2LCAxLCAyMTcsIDE1OCwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgNjEsIDUwLCAKKyAgICA3LCA2LCAxLCAyMTcsIDE1OCwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgCisgICAgMTcxLCAxOTgsIDcsIDMsIDEsIDQ5LCAyLCA5MiwgNywgNiwgMSwgNDksIDIsIDk2LCA3LCA2LCAxLCA0OSwgMiwgMjIxLCAKKyAgICAxMTcsIDcsIDMsIDEsIDQ5LCAyLCAyMjEsIDExNywgNywgNiwgMSwgMTQ1LCAxODIsIDcsIDMsIDEsIDE0NSwgMTgyLCA3LCAKKyAgICA2LCAxLCAyMzAsIDExOSwgNzQsIDcsIDYsIDEsIDI1MSwgMjAzLCAyLCA5NiwgNywgMywgMSwgMjUxLCAyMDMsIDIsIDk2LCAKKyAgICA3LCA2LCAxLCAyNTQsIDIxMiwgMjUwLCA0NiwgNywgNiwgMSwgMjUwLCA0NywgMiwgOTYsIDcsIDYsIDEsIDI1MCwgNDcsIDIsIAorICAgIDIyMSwgMTE3LCA3LCAzLCAxLCAyNTAsIDQ3LCAyLCAyMjEsIDExNywgNywgMywgMSwgMjE1LCAyNDksIDYyLCA3LCA2LCAxLCAKKyAgICAyMTAsIDczLCA3LCA2LCAxLCAyMjYsIDEwNCwgNywgNiwgMSwgMjMwLCAxMTksIDczLCA3LCA2LCAxLCAyNDYsIDc1LCAyLCAKKyAgICA5NiwgNywgMywgMSwgMjQ2LCA3NSwgMiwgOTYsIDcsIDYsIDEsIDI0NSwgNjgsIDIsIDk2LCA3LCA2LCAxLCAyNDQsIDIzMSwgCisgICAgNywgMywgMSwgMjQyLCAxNTQsIDcsIDYsIDEsIDIzNywgMTYyLCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgOTIsIDcsIDYsIDEsIAorICAgIDIzNywgMTgsIDIsIDk2LCA3LCAzLCAxLCAyMzcsIDE4LCAyLCA5NiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDEzNSwgNywgMywgCisgICAgMSwgMjM1LCAxNTgsIDIsIDkyLCA3LCA2LCAxLCAyMTUsIDE4OSwgNywgNiwgMSwgMjMzLCAzNCwgMiwgNDIsIDk2LCA3LCAzLCAKKyAgICAxLCAyMzMsIDM0LCAyLCAxNzEsIDQ1LCAyMzUsIDEwNiwgNywgNiwgMSwgMTQyLCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIAorICAgIDYsIDEsIDE0MiwgMiwgMjQyLCAxODksIDcsIDMsIDEsIDE0MiwgMiwgMjQyLCAxODksIDcsIDYsIDEsIDIzMCwgMTU4LCA3LCAKKyAgICAzLCAxLCAyMzAsIDE1OCwgNywgNiwgMSwgMjMwLCA2MCwgMiwgOTYsIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDk2LCA3LCAxLCAKKyAgICAyMTcsIDIwMiwgNywgNiwgMSwgMTQ1LCAxMDMsIDcsIDMsIDEsIDE0NSwgMTAzLCA3LCA2LCAxLCAyNDYsIDEzMywgNywgMSwgCisgICAgMjEwLCAyNDYsIDEzNCwgMjM0LCAyNDcsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyMzAsIDI5LCA5NiwgNywgNiwgMSwgMjIyLCAKKyAgICAyMDIsIDIsIDk2LCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgOTYsIDcsIDYsIDEsIDIyMiwgMjAyLCAyLCAyMjcsIDE2NCwgOTYsIAorICAgIDcsIDYsIDEsIDEwNSwgMiwgMjQyLCAxODksIDcsIDMsIDEsIDEwNSwgMiwgMjQyLCAxODksIDcsIDYsIDEsIDIyMCwgNTcsIAorICAgIDcsIDYsIDEsIDIyMCwgMTEsIDIsIDk2LCA3LCA2LCAxLCAyMTgsIDkxLCAyLCA5NiwgNywgMywgMSwgMjE4LCA5MSwgMiwgCisgICAgOTYsIDcsIDYsIDEsIDIxNywgMTU4LCAyLCA5MiwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDkyLCA3LCA2LCAxLCAyNDYsIDc2LCAKKyAgICA3LCA2LCAxLCAyNDYsIDc3LCAyMjcsIDE1OSwgNywgMywgMSwgMjQ2LCA3NywgMjI3LCAxNTksIDcsIDMsIDEsIDI0NiwgNzcsIAorICAgIDIsIDIyMiwgMTM1LCA3LCAxLCAxMjQsIDIsIDkyLCA3LCA2LCAxLCAxNDUsIDE3NCwgNywgMywgMSwgMTQ1LCAxNzQsIDcsIAorICAgIDEsIDIzNywgMTcwLCAyNDQsIDczLCAyMjMsIDEzNywgMiwgOTIsIDcsIDEsIDIxOCwgMTU0LCA3LCAxLCAyNDksIDU1LCAKKyAgICAyNTAsIDIwNCwgNywgMSwgMjM1LCAxMzksIDI1MCwgMjA0LCA3LCAxLCAyNTQsIDE0MSwgMjUwLCAyMDQsIDcsIDEsIDIyNywgCisgICAgMTY0LCAyNTAsIDIwNCwgNywgNiwgMSwgMjQ3LCA3NiwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDI1MCwgNDcsIDIsIDMsIDEsIAorICAgIDIxNywgMTU4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjQ3LCA3NiwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDIzNSwgMjEsIAorICAgIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAzLCAxLCAyMzcsIDEyNiwgNywgMywgMSwgMjM1LCAyMSwgNywgNiwgMSwgMjMyLCAxOSwgCisgICAgNywgNiwgMSwgMjMzLCAzNCwgMiwgMywgMSwgMjM3LCAxMjYsIDcsIDMsIDEsIDIzMiwgMTksIDcsIDYsIDEsIDExMiwgMiwgCisgICAgMjUxLCAxMzAsIDcsIDMsIDEsIDExMiwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAyNTEsIDEzMCwgNywgCisgICAgMywgMSwgMjQyLCAxMDcsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAxNDIsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAxNDIsIDIsIAorICAgIDI1MSwgMTMwLCA3LCA2LCAxLCAxMDUsIDIsIDI1MSwgMTMwLCA3LCAzLCAxLCAxMDUsIDIsIDI1MSwgMTMwLCA3LCA2LCAxLCAKKyAgICAxMDUsIDIsIDI0OSwgMTQsIDI1LCAyMzQsIDExNSwgNywgMywgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMjM0LCAxMTUsIDcsIAorICAgIDYsIDEsIDEwNSwgMiwgMjQ5LCAxNCwgMjUsIDE2OCwgNywgMywgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMTY4LCA3LCA2LCAKKyAgICAxLCAxMDUsIDIsIDI0OSwgMTQsIDI1LCAyNTEsIDEzMCwgNywgMywgMSwgMTA1LCAyLCAyNDksIDE0LCAyNSwgMjUxLCAxMzAsIAorICAgIDcsIDYsIDEsIDEwNSwgMiwgMjQ5LCAxNCwgMjUsIDI0NCwgMzYsIDcsIDMsIDEsIDEwNSwgMiwgMjQ5LCAxNCwgMjUsIDI0NCwgCisgICAgMzYsIDcsIDMsIDEsIDIxNSwgNzMsIDcsIDYsIDEsIDExMiwgMiwgMjQ5LCAxNCwgMjUsIDIzNCwgMTE1LCA3LCAzLCAxLCAKKyAgICAxMTIsIDIsIDI0OSwgMTQsIDI1LCAyMzQsIDExNSwgNywgNiwgMSwgMTEyLCAyLCA2MSwgNzEsIDI1LCAyMzQsIDExNSwgNywgCisgICAgMywgMSwgMTEyLCAyLCA2MSwgNzEsIDI1LCAyMzQsIDExNSwgNywgNiwgMSwgMjU0LCAyMzUsIDIsIDIzNCwgMTE1LCA3LCAzLCAKKyAgICAxLCAyNTQsIDIzNSwgMiwgMjM0LCAxMTUsIDcsIDYsIDEsIDI0NSwgNjgsIDIsIDkyLCA3LCAzLCAxLCAyNDUsIDY4LCAyLCAKKyAgICA5MiwgNywgNiwgMSwgMjQ1LCA2OCwgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIDI1MSwgMTMwLCA3LCA2LCAKKyAgICAxLCAyMzcsIDE4LCAyLCAyNTEsIDEzMCwgNywgMywgMSwgMjM3LCAxOCwgMiwgMjUxLCAxMzAsIDcsIDYsIDEsIDE0MiwgMiwgCisgICAgMjMwLCAxNjIsIDcsIDMsIDEsIDE0MiwgMiwgMjMwLCAxNjIsIDcsIDYsIDEsIDE0MiwgMiwgMjMwLCAxNjMsIDI1LCAyMzQsIAorICAgIDExNSwgNywgMywgMSwgMTQyLCAyLCAyMzAsIDE2MywgMjUsIDIzNCwgMTE1LCA3LCA2LCAxLCAyNDYsIDc3LCAyLCAyNTEsIAorICAgIDEzMCwgNywgMywgMSwgMjQ2LCA3NywgMiwgMjUxLCAxMzAsIDcsIDMsIDEsIDIzNywgMTI3LCAyLCAyNTEsIDEzMCwgNywgNiwgCisgICAgMSwgMjQ3LCA3NSwgNywgNiwgMSwgMjUwLCA0NywgMiwgMywgMSwgMjE3LCAxNTcsIDcsIDMsIDEsIDI0NywgNzUsIDcsIDYsIAorICAgIDEsIDI0NSwgNjgsIDIsIDE2OCwgNywgMywgMSwgMjQ1LCA2OCwgMiwgMTY4LCA3LCA2LCAxLCAyNDIsIDE1MiwgNywgNiwgMSwgCisgICAgMjE4LCAxNTQsIDcsIDYsIDEsIDIzMywgMzQsIDIsIDI0NCwgMzYsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDI0NCwgMzYsIDcsIAorICAgIDYsIDEsIDExMiwgMiwgMjI3LCA5NCwgNzEsIDI1LCAxNjgsIDcsIDMsIDEsIDExMiwgMiwgMjI3LCA5NCwgNzEsIDI1LCAKKyAgICAxNjgsIDcsIDYsIDEsIDI1NCwgMjM1LCAyLCAxNjgsIDcsIDMsIDEsIDI1NCwgMjM1LCAyLCAxNjgsIDcsIDYsIDEsIDE0MiwgCisgICAgMiwgMjE0LCAyNSwgMTY4LCA3LCAzLCAxLCAxNDIsIDIsIDIxNCwgMjUsIDE2OCwgNywgNiwgMSwgMTEyLCAyLCA1MSwgMjQ0LCAKKyAgICAzNiwgNywgMywgMSwgMTEyLCAyLCA1MSwgMjQ0LCAzNiwgNywgNiwgMSwgMTEyLCAyLCAyMzcsIDE3MCwgMjUyLCA4LCA3LCAKKyAgICAzLCAxLCAxMTIsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDYsIDEsIDE3OCwgMiwgNTEsIDI0NCwgMzYsIDcsIDMsIDEsIAorICAgIDE3OCwgMiwgNTEsIDI0NCwgMzYsIDcsIDYsIDEsIDE3OCwgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgMywgMSwgMTc4LCAyLCAKKyAgICAyMzcsIDE3MCwgMjUyLCA4LCA3LCA2LCAxLCAyNDIsIDEwNywgMiwgNTEsIDI0NCwgMzYsIDcsIDMsIDEsIDI0MiwgMTA3LCAKKyAgICAyLCA1MSwgMjQ0LCAzNiwgNywgNiwgMSwgMjQyLCAxMDcsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDMsIDEsIDI0MiwgCisgICAgMTA3LCAyLCAyMzcsIDE3MCwgMjUyLCA4LCA3LCA2LCAxLCAxNDIsIDIsIDUxLCAyNDQsIDM2LCA3LCAzLCAxLCAxNDIsIDIsIAorICAgIDUxLCAyNDQsIDM2LCA3LCA2LCAxLCAxNDIsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDMsIDEsIDE0MiwgMiwgMjM3LCAKKyAgICAxNzAsIDI1MiwgOCwgNywgNiwgMSwgMjI4LCAzOSwgMiwgNTEsIDI0NCwgMzYsIDcsIDMsIDEsIDIyOCwgMzksIDIsIDUxLCAKKyAgICAyNDQsIDM2LCA3LCA2LCAxLCAyMjgsIDM5LCAyLCAyMzcsIDE3MCwgMjUyLCA4LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAyMzcsIAorICAgIDE3MCwgMjUyLCA4LCA3LCA2LCAxLCAxMDUsIDIsIDUxLCAyNDQsIDM2LCA3LCAzLCAxLCAxMDUsIDIsIDUxLCAyNDQsIDM2LCAKKyAgICA3LCA2LCAxLCAxMDUsIDIsIDIzNywgMTcwLCAyNTIsIDgsIDcsIDMsIDEsIDEwNSwgMiwgMjM3LCAxNzAsIDI1MiwgOCwgNywgCisgICAgNiwgMSwgMjI2LCAyMzUsIDIsIDI1MCwgMTY5LCA1NiwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDI1MCwgMTY5LCA1NiwgNywgCisgICAgNiwgMSwgMjIyLCAyMDIsIDIsIDI1MCwgMTY5LCA1NiwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDI1MCwgMTY5LCA1NiwgNywgCisgICAgNiwgMSwgMjE3LCAyMTgsIDcsIDMsIDEsIDIxNywgMjE4LCA3LCA2LCAxLCAyNDMsIDIyNiwgMiwgMjUxLCAxMzAsIDcsIDMsIAorICAgIDEsIDI0MywgMjI2LCAyLCAyNTEsIDEzMCwgNywgNiwgMSwgMjMzLCAzNCwgMiwgMTcxLCA0NSwgMjM1LCAxMDYsIDcsIDMsIAorICAgIDEsIDI1MCwgNDcsIDIsIDI1MCwgODAsIDcsIDYsIDEsIDIzMCwgODYsIDcsIDMsIDEsIDIzMCwgODYsIDcsIDYsIDEsIDIxNywgCisgICAgMTU4LCAyLCA5NiwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDk2LCA3LCA2LCAxLCAxMTIsIDIsIDYxLCA1MCwgNywgMywgMSwgCisgICAgMTEyLCAyLCA2MSwgNTAsIDcsIDYsIDEsIDE3OCwgMiwgMjUxLCA5MiwgNywgMywgMSwgMTc4LCAyLCAyNTEsIDkyLCA3LCA2LCAKKyAgICAxLCAxNDIsIDIsIDI0OSwgMTQsIDI1LCAyMzQsIDExNSwgNywgMywgMSwgMTQyLCAyLCAyNDksIDE0LCAyNSwgMjM0LCAxMTUsIAorICAgIDcsIDYsIDEsIDE0MiwgMiwgMjIxLCAxODAsIDI1LCAyMzQsIDExNSwgNywgMywgMSwgMTQyLCAyLCAyMjEsIDE4MCwgMjUsIAorICAgIDIzNCwgMTE1LCA3LCA2LCAxLCAxNDIsIDIsIDYxLCA1MCwgNywgMywgMSwgMTQyLCAyLCA2MSwgNTAsIDcsIDYsIDEsIDE0MiwgCisgICAgMiwgNjEsIDcxLCAyNSwgMjM0LCAxMTUsIDcsIDMsIDEsIDE0MiwgMiwgNjEsIDcxLCAyNSwgMjM0LCAxMTUsIDcsIDYsIDEsIAorICAgIDIxOCwgOTEsIDIsIDIzNCwgMTE1LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAyMzQsIDExNSwgNywgMywgMSwgMjM1LCAyMDIsIAorICAgIDIsIDI1MCwgODAsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDI1MCwgODAsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyNTAsIDgwLCAKKyAgICA3LCAzLCAxLCAyNDgsIDE0NCwgMjM3LCAxMjYsIDcsIDMsIDEsIDI0OSwgMTM1LCAyNDgsIDIzMywgNywgMywgMSwgMjI4LCAKKyAgICA5OSwgMjQ4LCAyMzMsIDcsIDYsIDEsIDExMiwgMiwgOTIsIDcsIDYsIDEsIDI1MSwgMjAzLCAyLCA5MiwgNywgMywgMSwgCisgICAgMjUxLCAyMDMsIDIsIDkyLCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgMTM1LCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgMjQ5LCAKKyAgICAxMSwgOTIsIDcsIDMsIDEsIDIyNiwgMjM1LCAyLCAyMjMsIDMzLCAyMjIsIDEzNSwgNywgMywgMSwgMjE3LCAxNTgsIDIsIAorICAgIDIyMywgMzMsIDIyMiwgMTM1LCA3LCA2LCAxLCAyNDQsIDczLCAyMjMsIDEzNiwgNywgMywgMSwgMjQ0LCA3MywgMjIzLCAKKyAgICAxMzYsIDcsIDYsIDEsIDQ5LCAyLCA5MiwgNywgNiwgMSwgMTA1LCAxMzUsIDcsIDYsIDEsIDIxNSwgMjE2LCAyMTYsIDcsIDYsIAorICAgIDEsIDE3OCwgMiwgOTIsIDcsIDMsIDEsIDE3OCwgMiwgOTIsIDcsIDYsIDEsIDIzNywgMTI3LCAyLCA5MiwgNywgMywgMSwgCisgICAgMjM3LCAxMjcsIDIsIDkyLCA3LCA2LCAxLCAzLCAyMjgsIDE2NCwgMiwgMjQyLCAyNDcsIDIyMiwgMTM1LCA3LCAzLCAxLCAKKyAgICAyMjgsIDE2NCwgMiwgMjQyLCAyNDcsIDIyMiwgMTM1LCA3LCA2LCAxLCAyMjgsIDM5LCAyLCA5MiwgNywgMywgMSwgMjI4LCAKKyAgICAzOSwgMiwgOTIsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDkyLCA3LCAzLCAxLCAyMTgsIDkxLCAyLCA5MiwgNywgMywgMSwgCisgICAgMjE1LCA2MCwgNywgMywgMSwgMjU0LCAxNDYsIDcsIDMsIDEsIDIxNSwgMjU0LCAxNDYsIDcsIDMsIDEsIDQ5LCAyLCA5NiwgCisgICAgNywgMywgMSwgMjMwLCAxMTksIDc0LCA3LCAzLCAxLCAyNTEsIDIwMywgMiwgMjUwLCA4MCwgNywgMywgMSwgMjUwLCA0NywgCisgICAgMiwgMjIyLCAxMzUsIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDk2LCA3LCAzLCAxLCAyMTAsIDczLCA3LCAzLCAxLCAyMjYsIAorICAgIDEwNCwgNywgMywgMSwgMjI2LCAxMDUsIDIsIDk2LCA3LCAzLCAxLCAyMzAsIDExOSwgNzMsIDcsIDMsIDEsIDIxMCwgMjMwLCAKKyAgICAxMTksIDczLCA3LCAzLCAxLCAyMTAsIDIzMCwgMTE5LCAxNzgsIDIsIDk2LCA3LCAzLCAxLCAyNTAsIDE5NywgMjEwLCAyMzAsIAorICAgIDExOSwgNzMsIDcsIDMsIDEsIDI0OCwgMTQ0LCAyMzcsIDEyNywgMiwgOTIsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIDk2LCA3LCAKKyAgICAzLCAxLCAxMDIsIDI0NSwgNjcsIDcsIDEsIDMsIDYsIDI0NSwgNjcsIDcsIDMsIDEsIDI0NCwgMjMxLCA3LCAzLCAxLCAyMjcsIAorICAgIDIzNywgMjQyLCAxODksIDcsIDMsIDEsIDIxNSwgMjQzLCAyMjUsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCA5NiwgNywgMywgMSwgCisgICAgMjQzLCAxMzcsIDIsIDk2LCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgOTIsIDcsIDMsIDEsIDIzNywgMTYyLCA3LCAxLCAzLCA2LCAKKyAgICA3MiwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjM1LCAyMDIsIDIsIDI1MiwgCisgICAgMTE2LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAxLCAyMzUsIDgxLCA3LCAzLCAxLCAyMTUsIAorICAgIDE4OSwgNywgMywgMSwgMjE1LCAyMzQsIDE4NywgMiwgMTcxLCAyMzUsIDEwNiwgNywgMywgMSwgMjM0LCAxODcsIDIsIDk2LCAKKyAgICA3LCAzLCAxLCAyMzMsIDM0LCAyLCA0MiwgOTYsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDIyNywgMTY0LCA5NiwgNywgMSwgMywgCisgICAgNiwgMjA3LCA3LCAzLCAxLCAyNTIsIDE5NiwgNzQsIDcsIDEsIDMsIDYsIDIzMCwgMTY3LCA3LCAzLCAxLCAyNTAsIDE5NywgCisgICAgMjMwLCAxNDMsIDcsIDMsIDEsIDIyOSwgMTI5LCA3LCAzLCAxLCAyMTUsIDE1MiwgNywgMywgMSwgMjE1LCAyMjgsIDM5LCAyLCAKKyAgICAxNzEsIDIzNSwgMTA2LCA3LCAzLCAxLCAyMTUsIDIyOCwgMzksIDIsIDk2LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAxNzEsIAorICAgIDIzNSwgMTA2LCA3LCAzLCAxLCAyMjgsIDM5LCAyLCAyMjIsIDEzNSwgNywgMywgMSwgMjI4LCAzOSwgMiwgMjQ1LCAxNzMsIAorICAgIDcsIDMsIDEsIDIxMCwgMjI4LCAzOSwgMiwgMjQ1LCAxNzMsIDcsIDEsIDMsIDYsIDE1MiwgNywgMSwgMywgNiwgMjM3LCAKKyAgICAxNzAsIDE1MiwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDk2LCA3LCAzLCAxLCAyNDYsIDEzMywgNywgMywgMSwgMjQ4LCAxNDQsIAorICAgIDIzNywgMTI3LCAyLCAyMTQsIDI1LCA5NiwgNywgMywgMSwgMjIzLCAyMjQsIDIxMCwgMjQ2LCAxMzMsIDcsIDMsIDEsIDI0NiwgCisgICAgMTM0LCAyLCAyNTAsIDgwLCA3LCAzLCAxLCAyMTUsIDIyMiwgMjAxLCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgMjI3LCAxNjQsIAorICAgIDk2LCA3LCAzLCAxLCAxMDUsIDEzNSwgNywgMywgMSwgMjIwLCA1NywgNywgMywgMSwgMjIwLCAxMSwgMiwgOTYsIDcsIDMsIAorICAgIDEsIDIxNSwgMjE2LCAyMTYsIDcsIDMsIDEsIDIxNSwgMjE5LCA0MCwgNywgMywgMSwgMjE1LCAyMTgsIDkwLCA3LCAxLCAzLCAKKyAgICA2LCAyMTgsIDkwLCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgMjI3LCAxNjQsIDk2LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgCisgICAgMjUwLCA4MCwgNywgMywgMSwgMjQ2LCA3NiwgNywgMywgMSwgMjQ2LCA3NywgMiwgMjUwLCA4MCwgNywgMSwgMjQ0LCA3MywgCisgICAgMjIzLCAxMzYsIDcsIDEsIDIyOSwgMTMzLCAyMTksIDcwLCAyNDUsIDEwMCwgNywgMSwgMjM3LCAxNzAsIDI0NCwgNzMsIAorICAgIDIyMywgMTM2LCA3LCAxLCAyMjMsIDEyNCwgMjUxLCAyMDIsIDcsIDEsIDI1MiwgNzQsIDI1MCwgMjA0LCA3LCAxLCAzLCA2LCAKKyAgICAyNTMsIDIwNCwgNywgMywgMSwgMjUwLCAxOTcsIDIzMCwgMTE5LCA3MywgNywgMSwgMywgNiwgMjQ1LCA2OCwgMiwgOTYsIDcsIAorICAgIDEsIDMsIDYsIDI0MywgMjI1LCA3LCAzLCAxLCAyMzcsIDEyNywgMiwgMjUwLCA5NywgNywgMywgMSwgMjE1LCAyMzcsIDE3LCAKKyAgICA3LCAxLCAzLCA2LCAxNTMsIDcsIDMsIDEsIDIyOCwgMTY0LCAyLCA5NiwgNywgMSwgMjQ0LCA3MywgMjIzLCAxMzcsIDIsIAorICAgIDkyLCA3LCAxLCAyMTAsIDI0NCwgNzMsIDIyMywgMTM3LCAyLCA5MiwgNywgMywgMSwgMjQ3LCA3NiwgMjQ4LCAyMzMsIDcsIAorICAgIDMsIDEsIDI0OSwgMzcsIDI0OCwgMjMzLCA3LCAzLCAxLCAyNDcsIDc2LCAyNDgsIDIzNCwgMiwgMjUwLCA4MCwgNywgMywgMSwgCisgICAgMjIxLCA1NywgMjQ4LCAyMzMsIDcsIDMsIDEsIDIyMiwgNTUsIDI0OCwgMjMzLCA3LCAzLCAxLCAyMjIsIDk0LCAyNDgsIAorICAgIDIzNCwgMiwgMjUwLCA4MCwgNywgMywgMSwgMjQ1LCAyMTMsIDI0OCwgMjMzLCA3LCAzLCAxLCAyMzQsIDIzMywgMjQ4LCAKKyAgICAyMzMsIDcsIDMsIDEsIDIzNCwgMTg4LCAyNDgsIDIzMywgNywgMSwgMjUyLCA3NCwgMjI5LCAxNjgsIDcsIDEsIDI1MiwgODEsIAorICAgIDIyOSwgMTY4LCA3LCAzLCAxLCAyMTUsIDI0MywgMjI2LCAyLCAyNDUsIDE3MywgNywgMywgMSwgMjE1LCAyNDMsIDIyNiwgMiwgCisgICAgMjQ1LCAxNzQsIDI1LCAyMjIsIDEzNSwgNTgsIDEsIDMsIDI0MywgMjI1LCA1OCwgMSwgMywgMjQzLCAyMjYsIDIsIDk2LCAKKyAgICA1OCwgMSwgMywgMjM3LCAxMjYsIDU4LCAxLCAzLCAxNTIsIDU4LCAxLCAzLCAyMTUsIDE1MiwgNTgsIDEsIDMsIDIxNSwgCisgICAgMjI4LCAzOSwgMiwgOTYsIDU4LCAxLCAzLCA2LCAyMzcsIDE3MCwgMTUyLCA1OCwgMSwgMywgMjE5LCA0MCwgNTgsIDEsIDMsIAorICAgIDIxOCwgOTAsIDU4LCAxLCAyMjgsIDIzNSwgNTgsIDEsIDUxLCAyMjgsIDIzNSwgNTgsIDEsIDIxNSwgMjUwLCAxNjgsIDU4LCAKKyAgICAxLCAyNTQsIDc5LCA1OCwgMSwgMjEwLCAyNTAsIDE2OCwgNTgsIDEsIDQ1LCAxNDQsIDIyNywgOTMsIDU4LCAxLCA0MiwgCisgICAgMTQ0LCAyMjcsIDkzLCA1OCwgMSwgMjQ0LCA3MywgMjIzLCAxMzYsIDU4LCAxLCAyMTAsIDI0NCwgNzMsIDIyMywgMTM2LCAKKyAgICA1OCwgMSwgNDIsIDI1NCwgMjAsIDU4LCAxLCA0NSwgMjU0LCAyMCwgNTgsIDEsIDEwOCwgMjU0LCAyMCwgNTgsIDEsIDExMywgCisgICAgMjU0LCAyMCwgNTgsIDEsIDI1MCwgMjE3LCAyNTUsIDAsIDI1MSwgMTMwLCA1OCwgMSwgNjksIDIzNSwgNDMsIDU4LCAxLCAKKyAgICAyMzQsIDExNSwgNTgsIDEsIDI1NCwgMjQ4LCAyNTUsIDAsIDU4LCAxLCAyNDQsIDM3LCAyNTUsIDAsIDU4LCAxLCAxMDksIAorICAgIDY5LCAyMzUsIDQzLCA1OCwgMSwgMTA5LCAyMzQsIDExNSwgNTgsIDEsIDEwOSwgMjQ0LCAzNywgMjU1LCAwLCA1OCwgMSwgCisgICAgMTA5LCAyNTQsIDI0OCwgMjU1LCAwLCA1OCwgMSwgMjIxLCA4NywgMjUwLCAxNzUsIDU4LCAxLCAxNDQsIDIyMSwgODcsIAorICAgIDI1MCwgMTc1LCA1OCwgMSwgMjUxLCA4MywgNDUsIDE0NCwgMjI3LCA5MywgNTgsIDEsIDI1MSwgODMsIDQyLCAxNDQsIDIyNywgCisgICAgOTMsIDU4LCAxLCAxMDgsIDIyMiwgMTQzLCA1OCwgMSwgMTEzLCAyMjIsIDE0MywgNTgsIDEsIDg4LCA1NSwgNTgsIDEsIAorICAgIDIzMywgMTU1LCA1NSwgMjUyLCA4LCA2MSwgNTAsIDIyNywgOTQsIDUwLCAyMzAsIDE2MiwgMywgMjIxLCAxNzksIDUxLCAKKyAgICAyNTQsIDI0OCwgMjU1LCAwLCA1OCwgMSwgMjI3LCAxNDgsIDk2LCA1OCwgMSwgMjUwLCAxMDEsIDI1NSwgMCwgNTgsIDEsIDMsIAorICAgIDI0NCwgMjMxLCA1OCwgMSwgMywgMTUzLCA1OCwgMSwgMywgMTk4LCA1OCwgMSwgMywgMjE4LCAxNTEsIDU4LCAxLCAzLCAKKyAgICAyMTAsIDI0NCwgNzMsIDIyMywgMTM2LCA1OCwgMSwgMjQ2LCA4NSwgMTQ1LCAxMzUsIDU4LCAxLCAxMTYsIDE0NSwgMTM1LCAKKyAgICA1OCwgMSwgMjMzLCAxOTQsIDE0NSwgMTM1LCA1OCwgMSwgMTA5LCAxNDUsIDEzNSwgNTgsIDEsIDI0NiwgODQsIDE0NSwgCisgICAgMTM1LCA1OCwgMSwgMjE3LCAyNDEsIDI0OSwgNTIsIDE0NSwgNzgsIDU4LCAxLCAyMTgsIDQ2LCAyNDksIDUyLCAxNDUsIDc4LCAKKyAgICA1OCwgMSwgMjE5LCA2OCwgNTgsIDEsIDIyMCwgODQsIDU4LCAxLCA1MSwgMjU0LCA3OSwgNTgsIDEsIDEwOSwgMTEzLCAyNTQsIAorICAgIDIwLCA1OCwgMSwgMTA5LCAxMDgsIDI1NCwgMjAsIDU4LCAxLCAxMDksIDQyLCAyNTQsIDIwLCA1OCwgMSwgMTA5LCA0NSwgCisgICAgMjU0LCAyMCwgNTgsIDEsIDEwOSwgMjI3LCA5MywgNTgsIDEsIDIzMywgMTkzLCAyNDQsIDM3LCAyNTUsIDAsIDU4LCAxLCAKKyAgICAyMzMsIDE5MywgNTEsIDI0NCwgMzcsIDI1NSwgMCwgNTgsIDEsIDIzMywgMTkzLCA1MSwgMjU0LCAyNDgsIDI1NSwgMCwgNTgsIAorICAgIDEsIDEwOSwgMjIxLCAxNzksIDU4LCAxLCAyMjcsIDI0MSwgMjUwLCAxNzUsIDU4LCAxLCAyNTIsIDEzMSwgMTE2LCAyMjEsIAorICAgIDEzMiwgNTgsIDEsIDI0NiwgMTkwLCAxMTYsIDIyMSwgMTMyLCA1OCwgMSwgMjUyLCAxMzEsIDEwOSwgMjIxLCAxMzIsIDU4LCAKKyAgICAxLCAyNDYsIDE5MCwgMTA5LCAyMjEsIDEzMiwgNTgsIDEsIDIyNCwgMjM3LCA1OCwgMSwgMjMwLCAxMTksIDIyNCwgMjM3LCAKKyAgICA1OCwgMSwgMTA5LCA0MiwgNjUsIDM2LCAyNDQsIDM3LCAyNTUsIDAsIDM2LCAyNTQsIDI0OCwgMjU1LCAwLCAzNiwgMjUwLCAKKyAgICAyMTcsIDI1NSwgMCwgMzYsIDIyMSwgMTc5LCAzNiwgMjM0LCAxMTUsIDM2LCAyMzAsIDczLCAzNiwgMjUyLCA4LCAzNiwgNjEsIAorICAgIDUwLCAzNiwgMjQ5LCAxMywgMzYsIDI0MiwgMjQ3LCA1MCwgMzYsIDIyNywgOTQsIDUwLCAzNiwgNTEsIDI1NCwgMjQ4LCAKKyAgICAyNTUsIDAsIDM2LCAyNTEsIDEzMCwgMzYsIDY5LCAyMzUsIDQ0LCA1MCwgMzYsIDUxLCA2OSwgMjM1LCA0NCwgNTAsIDM2LCAKKyAgICA1MSwgMjQ0LCAzNywgMjU1LCAwLCAzNiwgMjUxLCAxNDYsIDM2LCAyMzcsIDE3MCwgMjUyLCA4LCAzNiwgMjE1LCAyNTAsIAorICAgIDE2OSwgNTAsIDM2LCAyNTAsIDE2OSwgNTAsIDM2LCAyMTAsIDI1MCwgMTY5LCA1MCwgMzYsIDI1MCwgMTY5LCA3MSwgMjI3LCAKKyAgICAxMDksIDM2LCAyNDQsIDM3LCAyNTUsIDEsIDU2LCAzNiwgMjU0LCAyNDgsIDI1NSwgMSwgNTYsIDM2LCA0MiwgMjIyLCAxNDQsIAorICAgIDU2LCAzNiwgNDUsIDIyMiwgMTQ0LCA1NiwgMzYsIDQyLCAyNTQsIDEyMCwgNTAsIDM2LCAyNDIsIDE4OSwgMzYsIDQyLCAKKyAgICAxNDQsIDIyNywgOTQsIDU2LCAzNiwgMTA4LCAyMjIsIDE0NCwgNTYsIDM2LCAxMTMsIDIyMiwgMTQ0LCA1NiwgMzYsIDg4LCAKKyAgICA1LCA1NiwgMzYsIDIzMywgMTU1LCA1LCA1NiwgMzYsIDIzMCwgMjcsIDI0MiwgMjQ3LCA1NiwgMzYsIDIyNywgMTY0LCAyNDIsIAorICAgIDI0NywgNTYsIDM2LCA2MSwgNTYsIDM2LCAyNDksIDE0LCA1NiwgMzYsIDIyNywgOTQsIDU2LCAzNiwgMjUwLCAxNjksIDU2LCAKKyAgICAzNiwgMjUxLCA5MiwgMzYsIDIzMCwgMTYyLCAzNiwgNjksIDIzNSwgNDQsIDU2LCAzNiwgMjUyLCA0LCA1NiwgMzYsIDIzNywgCisgICAgMTcwLCA1MSwgMjU0LCA1MCwgNTYsIDM2LCAyNTEsIDEzMSwgNTYsIDM2LCAyNTAsIDIxNywgMjU1LCAxLCA1NiwgMzYsIAorICAgIDI1MiwgOSwgNTYsIDM2LCAyMzcsIDE3MCwgMjUyLCA5LCA1NiwgMzYsIDIyMSwgMTgwLCA1NiwgMzYsIDIzNCwgMTE2LCA1NiwgCisgICAgMzYsIDEwOSwgMjM1LCA0MywgMzYsIDUxLCAxMDksIDIzNSwgNDMsIDM2LCAyMjEsIDE4MCwgMjMwLCA3NCwgMzYsIDIyNCwgCisgICAgMTkyLCAyMTQsIDIzMCwgNzQsIDM2LCAxNzEsIDIxNCwgMjMwLCA3NCwgMzYsIDIyNCwgMTkyLCAyMjQsIDE4LCAyMzAsIDc0LCAKKyAgICAzNiwgMTcxLCAyMjQsIDE4LCAyMzAsIDc0LCAzNiwgNDUsIDE0NCwgMjI3LCA5NCwgNTYsIDM2LCAyMzcsIDE3MCwgMjUyLCAKKyAgICA0LCA1NiwgMzYsIDQwLCA1NiwgMzYsIDIyNiwgOTMsIDU2LCAzNiwgMjE4LCAxNTIsIDUwLCAzNiwgNjksIDIyMSwgMTc5LCAKKyAgICAzNiwgNTEsIDIzMCwgNzMsIDM2LCAyNDQsIDM3LCAxNDUsIDc4LCAzNiwgMjU0LCAyNDgsIDE0NSwgNzgsIDM2LCAyMywgCisgICAgMjI5LCAxNjMsIDM2LCAyMywgMjM2LCAzMywgMzYsIDIzLCAyNDksIDgsIDIyMSwgMTIzLCAzNiwgMjMsIDIxNywgMjA3LCAKKyAgICAzNiwgMjUyLCA0LCA1MCwgMzYsIDI0NiwgMTU0LCA1LCA1NiwgMzYsIDUxLCA2OSwgMjM1LCA0NCwgNTYsIDM2LCA0MiwgCisgICAgMjU0LCAxMjAsIDU2LCAzNiwgMjEyLCAyMjEsIDE4MCwgNTAsIDM2LCAyNDIsIDI1MSwgNTAsIDM2LCAyNTQsIDE1MSwgMTE0LCAKKyAgICAxOTksIDUwLCAzNiwgNDIsIDQ1LCA3NiwgNTYsIDM2LCAyMjAsIDUzLCA3NiwgNTYsIDM2LCAyNDQsIDQxLCAyMzcsIDU0LCAKKyAgICAzNiwgNDUsIDI1NCwgMjEsIDUwLCAzNiwgNDIsIDE0NCwgMjI3LCA5NCwgNTAsIDM2LCAyNDUsIDIxMCwgMzYsIDIxOCwgCisgICAgMTUyLCA1NiwgMzYsIDQyLCAyNTQsIDIxLCA1NiwgMzYsIDQ1LCAyNTQsIDIxLCA1NiwgMzYsIDQ1LCAyNTQsIDIxLCAyNSwgCisgICAgMTA4LCAyNTQsIDIxLCA1NiwgMzYsIDQ1LCAxNDQsIDIyNywgOTQsIDUwLCAzNiwgNjEsIDcxLCAyMjcsIDEwOSwgMzYsIAorICAgIDI1MywgMjUyLCA1NiwgMzYsIDUxLCAyMjcsIDk0LCA1NiwgMzYsIDIxNywgMzMsIDUwLCAzNiwgNTEsIDI1MiwgOSwgNTYsIAorICAgIDM2LCA1MSwgMjUyLCA4LCAzNiwgNTEsIDIzNCwgMTE1LCAzNiwgNTEsIDIzNCwgMTE2LCA1NiwgMzYsIDUxLCAyMjEsIDE3OSwgCisgICAgMzYsIDUxLCAyMzcsIDE3MCwgMjUyLCA4LCAzNiwgNTEsIDkwLCA3NiwgNTYsIDM2LCA3LCAzLCAxLCA2MCwgMzYsIDcsIDMsIAorICAgIDEsIDczLCAzNiwgNywgMywgMSwgNzIsIDM2LCA3LCAzLCAxLCA3NCwgMzYsIDcsIDMsIDEsIDY4LCAzNiwgNywgMywgMSwgCisgICAgMjUxLCAyMDIsIDM2LCA3LCAzLCAxLCAyNTAsIDQ2LCAzNiwgNywgMywgMSwgMjQzLCAyMjUsIDM2LCA3LCAzLCAxLCAxODksIAorICAgIDM2LCA3LCAzLCAxLCAxNTIsIDM2LCA3LCAzLCAxLCAyMjIsIDIwMSwgMzYsIDcsIDMsIDEsIDIxNiwgMjE2LCAzNiwgNywgMywgCisgICAgMSwgMjE4LCAxNTEsIDIzLCA2LCAxLCAyNDMsIDEyNywgMjMsIDMsIDEsIDI0MywgMTI3LCAyMywgNiwgMSwgMjU0LCA0OSwgCisgICAgMjI2LCAxNDIsIDIzLCAzLCAxLCAyNTQsIDQ5LCAyMjYsIDE0MiwgMjMsIDIzMSwgMTA3LCA1NSwgMjMsIDIzNCwgMjM3LCAKKyAgICAyMzEsIDEwNywgNTUsIDIzLCA2LCAxLCAyMzAsIDE1LCAyNDgsIDI0MCwgMjMsIDMsIDEsIDIzMCwgMTUsIDI0OCwgMjQwLCAKKyAgICAyMywgMjE3LCAyMDcsIDIzLCAzLCAyMTAsIDIzNCwgMjE4LCAyMjQsIDEyOCwgMTAwLCAyMywgMywgMjQ3LCAxNDMsIDIzNCwgCisgICAgMjE4LCAyMjQsIDEyOCwgMTAwLCAyMywgMywgMjEwLCAyNDcsIDE0MywgMjM0LCAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCAKKyAgICAyMjgsIDgyLCA3OCwgMjMsIDIyMSwgMTIzLCAyMywgMjQ5LCA4LCAyMjEsIDEyMywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAKKyAgICAyMjEsIDEyMywgMjMsIDI1NCwgMTEwLCAyMjIsIDczLCAyMywgNiwgMSwgMjQ2LCAxNTcsIDIsIDIyMSwgMTIzLCAyMywgNiwgCisgICAgMSwgMjQ2LCAxMjIsIDIsIDIyMSwgMTIzLCAyMywgNiwgMSwgMjM3LCAxNjMsIDIsIDIyMSwgMTIzLCAyMywgNiwgMSwgMjMwLCAKKyAgICAxNDIsIDIsIDIyMSwgMTIzLCAyMywgNiwgMSwgMjIwLCA1OCwgMiwgMjIxLCAxMjMsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgCisgICAgMjIxLCAxMjMsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjQ5LCA4LCAyNSwgMjIxLCAxMjMsIDIzLCA2LCAxLCAyNTQsIAorICAgIDE0NiwgMjMsIDYsIDEsIDI1MiwgMTAyLCAyMywgNiwgMSwgMjQ0LCAyMzEsIDIzLCA2LCAxLCAyNDksIDYyLCAyMywgNiwgMSwgCisgICAgMjQ2LCAxNTYsIDIzLCA2LCAxLCAyMTcsIDgzLCAyMywgNiwgMSwgMjQ2LCAxMjEsIDIzLCA2LCAxLCAyMjIsIDYsIDIzLCA2LCAKKyAgICAxLCAyMzcsIDE2MiwgMjMsIDYsIDEsIDIzNiwgMjIxLCAyMywgNiwgMSwgMjM1LCAxNTYsIDIzLCA2LCAxLCAyMzMsIDk5LCAKKyAgICAyMywgNiwgMSwgMjMxLCAxNDQsIDIzLCA2LCAxLCAyMTgsIDEzMCwgMjMsIDYsIDEsIDIzMCwgMTQxLCAyMywgNiwgMSwgCisgICAgMjI5LCAxMDgsIDIzLCA2LCAxLCAyMjcsIDE0OSwgMjMsIDYsIDEsIDIyNCwgMTI3LCAyMywgNiwgMSwgMjIyLCAxMDUsIDIzLCAKKyAgICA2LCAxLCAyMjAsIDU3LCAyMywgNiwgMSwgMjI5LCAxMjksIDIzLCA2LCAxLCAyNTEsIDMxLCAyMywgNiwgMSwgMjI4LCAyMTIsIAorICAgIDIzLCA2LCAxLCAyMzAsIDE0MywgMjMsIDYsIDEsIDIzNywgMTYzLCAyLCAyNDksIDcsIDIzLCA2LCAxLCAyMjAsIDU4LCAyLCAKKyAgICAyNDksIDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjIxLCAxMjMsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMjIxLCAxMjMsIAorICAgIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjIxLCAxMjMsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjIxLCAxMjMsIDIzLCAzLCAKKyAgICAxLCAyMjAsIDU4LCAyLCAyNDksIDgsIDI1LCAyMjEsIDEyMywgMjMsIDMsIDEsIDI1NCwgMTQ2LCAyMywgMywgMSwgMjUyLCAKKyAgICAxMDIsIDIzLCAzLCAxLCAyNDQsIDIzMSwgMjMsIDMsIDEsIDI0OSwgNjIsIDIzLCAzLCAxLCAyNDYsIDE1NiwgMjMsIDMsIDEsIAorICAgIDIxNywgODMsIDIzLCAzLCAxLCAyNDYsIDEyMSwgMjMsIDMsIDEsIDIyMiwgNiwgMjMsIDMsIDEsIDIzNywgMTYyLCAyMywgMywgCisgICAgMSwgMjM2LCAyMjEsIDIzLCAzLCAxLCAyMzUsIDE1NiwgMjMsIDMsIDEsIDIzMywgOTksIDIzLCAzLCAxLCAyMzEsIDE0NCwgCisgICAgMjMsIDMsIDEsIDIxOCwgMTMwLCAyMywgMywgMSwgMjMwLCAxNDEsIDIzLCAzLCAxLCAyMjksIDEwOCwgMjMsIDMsIDEsIAorICAgIDIyNywgMTQ5LCAyMywgMywgMSwgMzksIDIyNCwgMTI3LCAyMywgMywgMSwgMjI0LCAxMjcsIDIzLCAzLCAxLCAyMjIsIDEwNSwgCisgICAgMjMsIDMsIDEsIDIyMCwgNTcsIDIzLCAzLCAxLCAyMjksIDEyOSwgMjMsIDMsIDEsIDI1MSwgMzEsIDIzLCAzLCAxLCAyMjgsIAorICAgIDIxMiwgMjMsIDMsIDEsIDIzMCwgMTQzLCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDI0OSwgNywgMjMsIDMsIDEsIDIyMCwgCisgICAgNTgsIDIsIDI0OSwgNywgMjMsIDMsIDEsIDIzMCwgMTQyLCAyLCAyMjEsIDEyMywgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIAorICAgIDIyMSwgMTIzLCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIyMSwgMTIzLCAyMywgNiwgMjM2LCAyNDQsIDEwMCwgMjMsIDI1MiwgCisgICAgMTAzLCAxMDAsIDIzLCAyMjIsIDcsIDEwMCwgMjMsIDIyMCwgNTgsIDIsIDI0MiwgMjQ3LCAxMDAsIDIzLCAyMjAsIDU4LCAyLCAKKyAgICAyNTQsIDI0OCwgMjUsIDI0MiwgMjQ3LCAxMDAsIDIzLCAyMjAsIDU4LCAyLCAyNDksIDE0LCAyNSwgMjQyLCAyNDcsIDEwMCwgCisgICAgMjMsIDIyOSwgMTMwLCAxMDAsIDIzLCAyMjksIDEwOSwgMTAwLCAyMywgMjM2LCAyNDQsIDEwMCwgMjMsIDEsIDI1NCwgNDksIAorICAgIDIzNiwgMzcsIDIzLCAzLCAxLCAyNTQsIDQ5LCAyMzYsIDM3LCAyMywgMSwgMjIzLCAxNDQsIDIzLCAzLCAxLCAyMjMsIDE0NCwgCisgICAgMjMsIDEsIDI0OCwgMjQwLCAyMywgMywgMSwgMjQ4LCAyNDAsIDIzLCAxLCAyMzYsIDM3LCAyMywgMywgMSwgMjM2LCAzNywgCisgICAgMjMsIDEsIDIyNiwgMTQyLCAyMywgMywgMSwgMjI2LCAxNDIsIDc1LCA2LCAxLCAyMjQsIDIzOCwgNzUsIDMsIDEsIDIyNCwgCisgICAgMjM4LCA3NSwgNiwgMSwgMjQ1LCAyMTksIDc1LCAzLCAxLCAyNDUsIDIxOSwgNzUsIDYsIDEsIDIzNiwgMTM1LCA3NSwgMywgCisgICAgMSwgMjM2LCAxMzUsIDc1LCA2LCAxLCAyNDIsIDI0MiwgNzUsIDMsIDEsIDI0MiwgMjQyLCA3NSwgNiwgMSwgMjQ0LCAyMjYsIAorICAgIDc1LCAzLCAxLCAyNDQsIDIyNiwgNzUsIDYsIDEsIDIyNCwgMjExLCA3NSwgMywgMSwgMjI0LCAyMTEsIDc1LCA2LCAxLCAKKyAgICAyNDksIDc1LCA3NSwgMywgMSwgMjQ5LCA3NSwgMjMsIDIzNiwgMjIyLCAxMDAsIDIzLCAyMjcsIDE1MCwgMTAwLCAyMywgCisgICAgMjM0LCAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCAxLCAyMTcsIDIxMiwgMjMsIDYsIDIyMiwgNywgMTAwLCAyMywgMjM0LCAKKyAgICAyMTgsIDI0NiwgMTU3LCAxMDAsIDIzLCAyMTAsIDIzNCwgMjE4LCAyNDYsIDE1NywgMTAwLCAyMywgNiwgMSwgMjI0LCAyMDAsIAorICAgIDIzLCAzLCAxLCAyMjQsIDIwMCwgMjMsIDYsIDIzNCwgMjE4LCAyMjQsIDEyOCwgMTAwLCAyMywgNiwgMSwgMjI2LCAxNDAsIAorICAgIDIzLCAzLCAxLCAyMjYsIDE0MCwgMjMsIDIyNywgMTUwLCAyLCAyMTQsIDEwMCwgMjMsIDYsIDIxMCwgMjM0LCAyMTgsIDIyNCwgCisgICAgMTI4LCAxMDAsIDIzLCA2LCAyNDcsIDE0MywgMjM0LCAyMTgsIDIyNCwgMTI4LCAxMDAsIDIzLCA2LCAyMTAsIDI0NywgMTQzLCAKKyAgICAyMzQsIDIxOCwgMjI0LCAxMjgsIDEwMCwgMzEsIDYsIDEsIDIzOCwgMjcsIDIsIDI0NCwgMzYsIDMxLCA2LCAxLCAyMzcsIAorICAgIDE2NiwgMzEsIDYsIDEsIDI0OCwgMTgyLCAzMSwgNiwgMSwgMjQ0LCA3OCwgMzEsIDYsIDEsIDIyMCwgOTksIDIzOCwgMjYsIAorICAgIDMxLCA2LCAxLCAyNDcsIDczLCAzMSwgNiwgMSwgMjUxLCAyMTEsIDcyLCAzMSwgNiwgMSwgMjE3LCAyNTAsIDMxLCA2LCAxLCAKKyAgICAyMzcsIDExNCwgMzEsIDYsIDEsIDIzNSwgMjAsIDMxLCA2LCAxLCAyMzIsIDE1LCAzMSwgNiwgMSwgMjIxLCA0NiwgMzEsIDYsIAorICAgIDEsIDIzNiwgNzYsIDMxLCA2LCAxLCAyNDIsIDEwNywgMiwgMjQ0LCAzNiwgMzEsIDYsIDEsIDIyNCwgMTkyLCA2OCwgMzEsIAorICAgIDYsIDEsIDI0NywgNjksIDMxLCA2LCAxLCA2MCwgMzEsIDYsIDEsIDI1MiwgMTQ0LCAzMSwgNiwgMSwgMjE5LCAxNjUsIDMxLCAKKyAgICA2LCAxLCAyNDQsIDExNiwgMzEsIDYsIDEsIDI0OSwgOTIsIDMxLCA2LCAxLCAyMzgsIDI2LCAzMSwgNiwgMSwgMjE3LCA3MiwgCisgICAgMzEsIDYsIDEsIDIxNywgOTIsIDMxLCA2LCAxLCA3MiwgMzEsIDYsIDEsIDIyNCwgMTkyLCA3MiwgMzEsIDYsIDEsIDE3NSwgCisgICAgMzEsIDYsIDEsIDI0NiwgMjE3LCAzMSwgNiwgMSwgMjQ2LCAyMDUsIDMxLCA2LCAxLCAyNDYsIDE5NywgMzEsIDYsIDEsIDc0LCAKKyAgICAzMSwgNiwgMSwgMjI5LCAxOTgsIDMxLCA2LCAxLCAyNDYsIDE0OCwgMzEsIDYsIDEsIDI0NiwgMTM4LCAzMSwgNiwgMSwgCisgICAgMjIyLCA4NywgMzEsIDYsIDEsIDY4LCAzMSwgNiwgMSwgMjQ2LCAyNDQsIDMxLCA2LCAxLCAxNTUsIDMxLCA2LCAxLCAyMjEsIAorICAgIDUwLCAzMSwgNiwgMSwgMjUxLCA0NiwgMzEsIDYsIDEsIDIyNSwgMjUsIDMxLCA2LCAxLCAyMjQsIDI0OCwgMzEsIDYsIDEsIAorICAgIDI0MywgMTgxLCA1NSwgMzEsIDYsIDEsIDIxOCwgNywgMzEsIDYsIDEsIDIyNCwgMjEsIDU1LCAzMSwgNiwgMSwgNzMsIDMxLCAKKyAgICA2LCAxLCAyMTcsIDIwMCwgMzEsIDYsIDEsIDE4NCwgMzEsIDMsIDEsIDYwLCAzMSwgMywgMSwgMjUyLCAxNDQsIDMxLCAzLCAKKyAgICAxLCAyMTksIDE2NSwgMzEsIDMsIDEsIDI0NCwgMTE2LCAzMSwgMywgMSwgMjQ5LCA5MiwgMzEsIDMsIDEsIDIzOCwgMjYsIAorICAgIDMxLCAzLCAxLCAyMTcsIDcyLCAzMSwgMywgMSwgMjE3LCA5MiwgMzEsIDMsIDEsIDcyLCAzMSwgMywgMSwgMjI0LCAxOTIsIAorICAgIDcyLCAzMSwgMywgMSwgMTc1LCAzMSwgMywgMSwgMjQ2LCAyMTcsIDMxLCAzLCAxLCAyNDYsIDIwNSwgMzEsIDMsIDEsIDI0NiwgCisgICAgMTk3LCAzMSwgMywgMSwgNzQsIDMxLCAzLCAxLCAyMjksIDE5OCwgMzEsIDMsIDEsIDI0NiwgMTQ4LCAzMSwgMywgMSwgMjQ2LCAKKyAgICAxMzgsIDMxLCAzLCAxLCAyMjIsIDg3LCAzMSwgMywgMSwgNjgsIDMxLCAzLCAxLCAyNDYsIDI0NCwgMzEsIDMsIDEsIDE1NSwgCisgICAgMzEsIDMsIDEsIDIyMSwgNTAsIDMxLCAzLCAxLCAyNTEsIDQ2LCAzMSwgMywgMSwgMjI1LCAyNSwgMzEsIDMsIDEsIDIyNCwgCisgICAgMjQ4LCAzMSwgMywgMSwgMjQzLCAxODEsIDU1LCAzMSwgMywgMSwgMjE4LCA3LCAzMSwgMywgMSwgMjI0LCAyMSwgNTUsIDMxLCAKKyAgICAzLCAxLCA3MywgMzEsIDMsIDEsIDIxNywgMjAwLCAzMSwgMywgMSwgMTg0LCAzMSwgMywgMSwgMjM4LCAyNywgMiwgMjQ0LCAKKyAgICAzNiwgMzEsIDMsIDEsIDIzNywgMTY2LCAzMSwgMywgMSwgMjQ4LCAxODIsIDMxLCAzLCAxLCAyNDQsIDc4LCAzMSwgMywgMSwgCisgICAgMjIwLCA5OSwgMjM4LCAyNiwgMzEsIDMsIDEsIDI0NywgNzMsIDMxLCAzLCAxLCAyNTEsIDIxMSwgNzIsIDMxLCAzLCAxLCAKKyAgICAyMTcsIDI1MCwgMzEsIDMsIDEsIDIzNywgMTE0LCAzMSwgMywgMSwgMjM1LCAyMCwgMzEsIDMsIDEsIDIzMiwgMTUsIDMxLCAKKyAgICAzLCAxLCAyMjEsIDQ2LCAzMSwgMywgMSwgMjM2LCA3NiwgMzEsIDMsIDEsIDI0MiwgMTA3LCAyLCAyNDQsIDM2LCAzMSwgMywgCisgICAgMSwgMjI0LCAxOTIsIDY4LCAzMSwgMywgMSwgMjQ3LCA2OSwgMzEsIDYsIDEsIDIzMCwgMTQzLCAzMSwgMywgMSwgMjMwLCAKKyAgICAxNDMsIDMxLCA2LCAxLCAyMTgsIDM2LCAzMSwgMywgMSwgMjE4LCAzNiwgMzEsIDYsIDEsIDIzNywgMTYwLCA3MywgMzEsIDMsIAorICAgIDEsIDIzNywgMTYwLCA3MywgMzEsIDYsIDEsIDIzNSwgMjUsIDIxNywgMTc4LCAzMSwgMywgMSwgMjM1LCAyNSwgMjE3LCAKKyAgICAxNzgsIDMxLCA2LCAxLCAyMzcsIDE2MCwgMjM1LCAyNSwgMjE3LCAxNzgsIDMxLCAzLCAxLCAyMzcsIDE2MCwgMjM1LCAyNSwgCisgICAgMjE3LCAxNzgsIDMxLCA2LCAxLCAyNTIsIDc2LCAyMTcsIDE3OCwgMzEsIDMsIDEsIDI1MiwgNzYsIDIxNywgMTc4LCAzMSwgCisgICAgNiwgMSwgMjM3LCAxNjAsIDI1MiwgNzYsIDIxNywgMTc4LCAzMSwgMywgMSwgMjM3LCAxNjAsIDI1MiwgNzYsIDIxNywgMTc4LCAKKyAgICAzMSwgNiwgMSwgMjM2LCAxMSwgMzEsIDMsIDEsIDIzNiwgMTEsIDMxLCA2LCAxLCAyMjgsIDIxMiwgMzEsIDMsIDEsIDIyOCwgCisgICAgMjEyLCAzMSwgNiwgMSwgMjQ1LCAxNzEsIDMxLCAzLCAxLCAyNDUsIDE3MSwgMzEsIDYsIDEsIDIzNywgMTI4LCAzMSwgMywgCisgICAgMSwgMjM3LCAxMjgsIDMxLCA2LCAxLCAyMzcsIDEyOSwgMiwgNTEsIDI0NCwgMzcsIDI1NSwgMCwgMzEsIDMsIDEsIDIzNywgCisgICAgMTI5LCAyLCA1MSwgMjQ0LCAzNywgMjU1LCAwLCAzMSwgNiwgMSwgMjIwLCAxMDIsIDMxLCAzLCAxLCAyMjAsIDEwMiwgMzEsIAorICAgIDYsIDEsIDIyNywgNTcsIDIzMCwgMTQzLCAzMSwgMywgMSwgMjI3LCA1NywgMjMwLCAxNDMsIDMxLCA2LCAxLCAyMzAsIDE0NCwgCisgICAgMiwgMjIxLCAxNjAsIDMxLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjIxLCAxNjAsIDMxLCA2LCAxLCAyMzAsIDkyLCAzMSwgMywgCisgICAgMSwgMjMwLCA5MiwgMzEsIDYsIDEsIDIzNiwgMzcsIDMxLCAzLCAxLCAyMzYsIDM3LCAzMSwgMjIxLCAyMzAsIDU1LCAzNiwgCisgICAgMzEsIDIyMSwgMTYwLCAzNiwgMzEsIDIzMCwgMjgsIDM2LCAzMSwgMTkzLCAyMjksIDM5LCAzNiwgMzEsIDIwOSwgMjI5LCAKKyAgICAzOSwgMzYsIDMxLCAyMjksIDI1LCAzNiwgMzEsIDI0MiwgMTYyLCAyMjEsIDIzMCwgNTUsIDM2LCAzMSwgMjMzLCAxNjIsIAorICAgIDU1LCAzMSwgNiwgMSwgMjI0LCAxOTIsIDI0MiwgMTA3LCAyLCAyMjIsIDEzNSwgMzEsIDMsIDEsIDIyNCwgMTkyLCAyNDIsIAorICAgIDEwNywgMiwgMjIyLCAxMzUsIDMxLCA2LCAxLCAyMjUsIDYzLCA1NSwgMzEsIDMsIDEsIDIyNSwgNjMsIDU1LCAzMSwgNiwgMSwgCisgICAgMjQ2LCAxNDksIDIsIDIyMSwgMjAyLCAzMSwgMywgMSwgMjQ2LCAxNDksIDIsIDIyMSwgMjAyLCAzMSwgNiwgMSwgMjQ0LCAKKyAgICAxMTcsIDIsIDIyMCwgNTYsIDMxLCAzLCAxLCAyNDQsIDExNywgMiwgMjIwLCA1NiwgMzEsIDYsIDEsIDI0NCwgMTE3LCAyLCAKKyAgICA5MiwgMzEsIDMsIDEsIDI0NCwgMTE3LCAyLCA5MiwgMzEsIDYsIDEsIDI0NCwgMTE3LCAyLCAyMzMsIDE5MywgOTYsIDMxLCAKKyAgICAzLCAxLCAyNDQsIDExNywgMiwgMjMzLCAxOTMsIDk2LCAzMSwgNiwgMSwgMjE3LCA3MywgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIAorICAgIDIxNywgNzMsIDIsIDI0OSwgNDgsIDMxLCA2LCAxLCAyMTcsIDkzLCAyLCAyNDksIDQ4LCAzMSwgMywgMSwgMjE3LCA5MywgMiwgCisgICAgMjQ5LCA0OCwgMzEsIDYsIDEsIDIwNiwgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDIwNiwgMiwgMjQ5LCA0OCwgMzEsIDYsIDEsIAorICAgIDIwNiwgMiwgNjksIDkyLCAzMSwgMywgMSwgMjA2LCAyLCA2OSwgOTIsIDMxLCA2LCAxLCAyMDYsIDIsIDkyLCAzMSwgMywgMSwgCisgICAgMjA2LCAyLCA5MiwgMzEsIDYsIDEsIDI1MiwgMTg2LCAxNzUsIDMxLCAzLCAxLCAyNTIsIDE4NiwgMTc1LCAzMSwgNiwgMSwgCisgICAgMjQ2LCAxOTgsIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyNDYsIDE5OCwgMiwgMjQ5LCA0OCwgMzEsIDYsIDI0LCAyNDYsIAorICAgIDE5OCwgMjQ0LCAxMTYsIDMxLCAzLCAyNCwgMjQ2LCAxOTgsIDI0NCwgMTE2LCAzMSwgNiwgMSwgMjI5LCAxOTksIDIsIDIzMywgCisgICAgMTkzLCA5NiwgMzEsIDMsIDEsIDIyOSwgMTk5LCAyLCAyMzMsIDE5MywgOTYsIDMxLCA2LCAxLCAyNTUsIDYsIDE1NSwgMzEsIAorICAgIDMsIDEsIDI1NSwgNiwgMTU1LCAzMSwgNiwgMSwgMjQ2LCAxMzksIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyNDYsIDEzOSwgMiwgCisgICAgMjQ5LCA0OCwgMzEsIDYsIDEsIDIyMiwgODgsIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyMjIsIDg4LCAyLCAyNDksIDQ4LCAKKyAgICAzMSwgNiwgMSwgMjIzLCAxMzAsIDY4LCAzMSwgMywgMSwgMjIzLCAxMzAsIDY4LCAzMSwgNiwgMSwgMjIzLCAxMzAsIDEwNSwgCisgICAgMiwgOTIsIDMxLCAzLCAxLCAyMjMsIDEzMCwgMTA1LCAyLCA5MiwgMzEsIDYsIDEsIDI0MywgMjE0LCAyLCAyNDksIDQ4LCAKKyAgICAzMSwgMywgMSwgMjQzLCAyMTQsIDIsIDI0OSwgNDgsIDMxLCA2LCAyNCwgMjIyLCA4OCwgMjIxLCA1MCwgMzEsIDMsIDI0LCAKKyAgICAyMjIsIDg4LCAyMjEsIDUwLCAzMSwgNiwgMSwgMjUxLCA0NywgMiwgMjQ5LCA0OCwgMzEsIDMsIDEsIDI1MSwgNDcsIDIsIAorICAgIDI0OSwgNDgsIDMxLCA2LCAxLCAyNTEsIDQ3LCAyLCA2OSwgOTIsIDMxLCAzLCAxLCAyNTEsIDQ3LCAyLCA2OSwgOTIsIDMxLCAKKyAgICA2LCAxLCAyMjQsIDIyMiwgMzEsIDMsIDEsIDIyNCwgMjIyLCAzMSwgNiwgMSwgMjU1LCA2LCAyNTEsIDQ2LCAzMSwgMywgMSwgCisgICAgMjU1LCA2LCAyNTEsIDQ2LCAzMSwgNiwgMSwgMjU1LCA2LCAyNTEsIDQ3LCAyLCAyNDksIDQ4LCAzMSwgMywgMSwgMjU1LCA2LCAKKyAgICAyNTEsIDQ3LCAyLCAyNDksIDQ4LCAzMSwgMSwgMjMwLCAyMiwgMzEsIDYsIDEsIDIxNywgNzMsIDIsIDI1MiwgOCwgMzEsIDMsIAorICAgIDEsIDIxNywgNzMsIDIsIDI1MiwgOCwgMzEsIDYsIDEsIDIwNiwgMiwgOTYsIDMxLCAzLCAxLCAyMDYsIDIsIDk2LCAzMSwgNiwgCisgICAgMSwgMjQ2LCAyMTgsIDIsIDIyMiwgMTM1LCAzMSwgMywgMSwgMjQ2LCAyMTgsIDIsIDIyMiwgMTM1LCAzMSwgNiwgMSwgMjQ2LCAKKyAgICAxOTgsIDIsIDk2LCAzMSwgMywgMSwgMjQ2LCAxOTgsIDIsIDk2LCAzMSwgNiwgMSwgMjQ2LCAxOTgsIDIsIDIyMiwgMTM1LCAKKyAgICAzMSwgMywgMSwgMjQ2LCAxOTgsIDIsIDIyMiwgMTM1LCAzMSwgNiwgMSwgMjM2LCAxNDQsIDI1MSwgNDYsIDMxLCAzLCAxLCAKKyAgICAyMzYsIDE0NCwgMjUxLCA0NiwgMzEsIDYsIDEsIDI0NiwgMjA2LCAyLCAyMjIsIDEzNSwgMzEsIDMsIDEsIDI0NiwgMjA2LCAKKyAgICAyLCAyMjIsIDEzNSwgMzEsIDMsIDEsIDIzMCwgMjIsIDMxLCA2LCAxLCAxMTIsIDIsIDI1MiwgOCwgMzEsIDMsIDEsIDExMiwgCisgICAgMiwgMjUyLCA4LCAzMSwgNiwgMSwgMTEyLCAyLCAyNDksIDEzLCAzMSwgMywgMSwgMTEyLCAyLCAyNDksIDEzLCAzMSwgNiwgCisgICAgMjQsIDExMiwgMjM4LCAyNiwgMzEsIDMsIDI0LCAxMTIsIDIzOCwgMjYsIDMxLCA2LCAxLCAyMzgsIDI3LCAyLCAyNTIsIDgsIAorICAgIDMxLCAzLCAxLCAyMzgsIDI3LCAyLCAyNTIsIDgsIDMxLCA2LCAxLCAyMjYsIDEwNCwgMzEsIDMsIDEsIDIyNiwgMTA0LCAzMSwgCisgICAgNiwgMSwgMjI2LCAxMDUsIDIsIDI0OSwgMTMsIDMxLCAzLCAxLCAyMjYsIDEwNSwgMiwgMjQ5LCAxMywgMzEsIDYsIDEsIAorICAgIDIxNywgNzMsIDIsIDI0OSwgMTMsIDMxLCAzLCAxLCAyMTcsIDczLCAyLCAyNDksIDEzLCAzMSwgNiwgMSwgMjE3LCA5MywgMiwgCisgICAgMjQ5LCAxMywgMzEsIDMsIDEsIDIxNywgOTMsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAyNTUsIDYsIDI0NywgNzMsIDMxLCAzLCAKKyAgICAxLCAyNTUsIDYsIDI0NywgNzMsIDMxLCA2LCAxLCAyNDIsIDEwNywgMiwgMjM0LCAxMTUsIDMxLCAzLCAxLCAyNDIsIDEwNywgCisgICAgMiwgMjM0LCAxMTUsIDMxLCA2LCAxLCAyNDIsIDEwNywgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIDI0MiwgMTA3LCAyLCAyNDksIAorICAgIDEzLCAzMSwgNiwgMSwgMTQyLCAyLCAyNDksIDEzLCAzMSwgMywgMSwgMTQyLCAyLCAyNDksIDEzLCAzMSwgNiwgMSwgMjUyLCAKKyAgICAxOTYsIDc0LCAzMSwgMywgMSwgMjUyLCAxOTYsIDc0LCAzMSwgNiwgMSwgMjUyLCAxOTYsIDE0MiwgMiwgMjQ5LCAxMywgMzEsIAorICAgIDMsIDEsIDI1MiwgMTk2LCAxNDIsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAxNzgsIDIsIDI0OSwgMTMsIDMxLCAzLCAxLCAKKyAgICAxNzgsIDIsIDI0OSwgMTMsIDMxLCA2LCAxLCAxMDUsIDIsIDIzNCwgMTE1LCAzMSwgMywgMSwgMTA1LCAyLCAyMzQsIDExNSwgCisgICAgMzEsIDYsIDEsIDEwNSwgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIDEwNSwgMiwgMjQ5LCAxMywgMzEsIDYsIDEsIDEwNSwgMiwgCisgICAgNTEsIDE2OCwgMzEsIDMsIDEsIDEwNSwgMiwgNTEsIDE2OCwgMzEsIDYsIDEsIDI1MSwgNDcsIDIsIDI0OSwgMTMsIDMxLCAzLCAKKyAgICAxLCAyNTEsIDQ3LCAyLCAyNDksIDEzLCAzMSwgNiwgMSwgMjQ0LCAxMTcsIDIsIDI0OSwgNDgsIDMxLCAzLCAxLCAyNDQsIAorICAgIDExNywgMiwgMjQ5LCA0OCwgMzEsIDYsIDEsIDIxOCwgOCwgMiwgMjQ5LCAxMywgMzEsIDMsIDEsIDIxOCwgOCwgMiwgMjQ5LCAKKyAgICAxMywgMzEsIDYsIDEsIDI0NCwgMTE3LCAyLCAyMTQsIDI1LCA5NiwgMzEsIDMsIDEsIDI0NCwgMTE3LCAyLCAyMTQsIDI1LCAKKyAgICA5NiwgMzEsIDYsIDEsIDI0MywgMjE0LCAyLCA5NiwgMzEsIDMsIDEsIDI0MywgMjE0LCAyLCA5NiwgMzEsIDYsIDEsIDI0MywgCisgICAgMjE0LCAyLCA5MiwgMzEsIDMsIDEsIDI0MywgMjE0LCAyLCA5MiwgMzEsIDYsIDEsIDIzNiwgNDUsIDI0OSwgOTIsIDMxLCAzLCAKKyAgICAxLCAyMzYsIDQ1LCAyNDksIDkyLCAzMSwgNiwgMSwgMjM2LCA0NSwgMjQ4LCAxODIsIDMxLCAzLCAxLCAyMzYsIDQ1LCAyNDgsIAorICAgIDE4MiwgMzEsIDYsIDEsIDIzNiwgNDUsIDIxNywgMjUsIDMxLCAzLCAxLCAyMzYsIDQ1LCAyMTcsIDI1LCAzMSwgNiwgMSwgCisgICAgMjM2LCA0NSwgMjQ3LCA2NywgMzEsIDMsIDEsIDIzNiwgNDUsIDI0NywgNjcsIDMxLCA2LCAxLCAyMzYsIDQ1LCAyMzUsIDIwLCAKKyAgICAzMSwgMywgMSwgMjM2LCA0NSwgMjM1LCAyMCwgMzEsIDYsIDEsIDIzNiwgNDUsIDIzMiwgMTUsIDMxLCAzLCAxLCAyMzYsIAorICAgIDQ1LCAyMzIsIDE1LCAzMSwgNiwgMSwgMjM2LCA0NSwgMjI0LCA2NywgMzEsIDMsIDEsIDIzNiwgNDUsIDIyNCwgNjcsIDMxLCAKKyAgICA2LCAxLCAyMzYsIDQ1LCAyMjEsIDE1NiwgMzEsIDMsIDEsIDIzNiwgNDUsIDIyMSwgMTU2LCAzMSwgNiwgMSwgMjEwLCAyMTcsIAorICAgIDkyLCAzMSwgMywgMSwgMjEwLCAyMTcsIDkyLCAzMSwgNiwgMSwgMjQ2LCAyMTgsIDIsIDk2LCAzMSwgMywgMSwgMjQ2LCAKKyAgICAyMTgsIDIsIDk2LCAzMSwgNiwgMSwgMjM1LCA3OSwgMzEsIDMsIDEsIDIzNSwgNzksIDMxLCA2LCAxLCAyMjcsIDE1MSwgMzEsIAorICAgIDMsIDEsIDIyNywgMTUxLCAzMSwgNiwgMSwgMjE4LCA2NSwgMzEsIDMsIDEsIDIxOCwgNjUsIDMxLCA2LCAxLCAyMjgsIDE1NSwgCisgICAgMzEsIDMsIDEsIDIyOCwgMTU1LCAzMSwgNiwgMSwgMjE4LCAyMjcsIDMxLCAzLCAxLCAyMTgsIDIyNywgMzEsIDYsIDEsIAorICAgIDI1NCwgMTY1LCAxNzUsIDMxLCAzLCAxLCAyNTQsIDE2NSwgMTc1LCAzMSwgNiwgMSwgMjQ2LCAyMTgsIDIsIDIzMywgMTkzLCAKKyAgICA5NiwgMzEsIDMsIDEsIDI0NiwgMjE4LCAyLCAyMzMsIDE5MywgOTYsIDMxLCA2LCAxLCAyNDYsIDE5OCwgMiwgMjMzLCAxOTMsIAorICAgIDk2LCAzMSwgMywgMSwgMjQ2LCAxOTgsIDIsIDIzMywgMTkzLCA5NiwgMzEsIDYsIDEsIDIyOSwgMTk5LCAyLCAyNDksIDQ4LCAKKyAgICAzMSwgMywgMSwgMjI5LCAxOTksIDIsIDI0OSwgNDgsIDEzMiwgNiwgMSwgMjUzLCAyMDksIDEzMiwgNiwgMSwgMjUyLCAxMTQsIAorICAgIDEzMiwgNiwgMSwgMjQ0LCA5MywgMTMyLCA2LCAxLCAyNDksIDIwNywgMTMyLCA2LCAxLCAyNDYsIDI1NCwgMTMyLCA2LCAxLCAKKyAgICAyMTcsIDExNCwgMTMyLCA2LCAxLCAyNDYsIDIzOSwgMTMyLCA2LCAxLCAyNDYsIDEyMywgMTMyLCA2LCAxLCAxMDEsIDEzMiwgCisgICAgNiwgMSwgMjE3LCA3MiwgMTMyLCA2LCAxLCAyMzcsIDIwMCwgMTMyLCA2LCAxLCAyMzUsIDIzLCAxMzIsIDYsIDEsIDIxOCwgCisgICAgMTMzLCAxMzIsIDYsIDEsIDI1MSwgMTY5LCAxMzIsIDYsIDEsIDIzNiwgMTY4LCAxMzIsIDYsIDEsIDI0MywgNCwgMTMyLCA2LCAKKyAgICAxLCAyMzcsIDEyMywgMTMyLCA2LCAxLCAyNDQsIDEyNCwgMTMyLCA2LCAxLCAyNTEsIDQyLCAxMzIsIDYsIDEsIDIzMywgCisgICAgMjUxLCAxMzIsIDYsIDEsIDIxNywgMjUwLCAxMzIsIDYsIDEsIDIzMSwgMTc0LCAxMzIsIDYsIDEsIDIyNSwgMjUsIDEzMiwgCisgICAgNiwgMSwgMjE5LCA3MiwgMTMyLCA2LCAxLCAyNTEsIDY5LCAxMzIsIDYsIDEsIDIyOSwgMTg3LCAxMzIsIDYsIDEsIDIzNywgCisgICAgMTAwLCAxMzIsIDYsIDEsIDIwMywgMTMyLCA2LCAxLCAyMjYsIDc3LCAxMzIsIDYsIDEsIDIxOSwgOTYsIDEzMiwgNiwgMSwgCisgICAgMjIxLCAxNTgsIDEzMiwgNiwgMSwgMjI3LCAxOTYsIDEzMiwgNiwgMSwgMjUwLCAxODIsIDEzMiwgNiwgMSwgMjE3LCAyMzYsIAorICAgIDEzMiwgNiwgMSwgMjI5LCA2MSwgMTMyLCA2LCAxLCAyMzYsIDE3OCwgMTMyLCA2LCAxLCAyMzAsIDE2MSwgMTMyLCA2LCAxLCAKKyAgICAyNDUsIDIyMSwgMTMyLCA1OCwgMSwgNDIsIDE0NCwgMjI3LCA5MywgMTMyLCAyNTQsIDc5LCAxMzIsIDI0NiwgMjAxLCA3OCwgCisgICAgMTMyLCAyNDYsIDk1LCA3OCwgMTMyLCAyNTAsIDE2OCwgMTMyLCAyMjgsIDgyLCA3OCwgMTMyLCAyNTUsIDcsIDc4LCAxMzIsIAorICAgIDMsIDEsIDI1MywgMjA5LCAxMzIsIDMsIDEsIDI1MiwgMTE0LCAxMzIsIDMsIDEsIDI0NCwgOTMsIDEzMiwgMywgMSwgMjQ5LCAKKyAgICAyMDcsIDEzMiwgMywgMSwgMjQ2LCAyNTQsIDEzMiwgMywgMSwgMjE3LCAxMTQsIDEzMiwgMywgMSwgMjQ2LCAyMzksIDEzMiwgCisgICAgMywgMSwgMjQ2LCAxMjMsIDEzMiwgMywgMSwgMTAxLCAxMzIsIDMsIDEsIDIxNywgNzIsIDEzMiwgMywgMSwgMjM3LCAyMDAsIAorICAgIDEzMiwgMywgMSwgMjM1LCAyMywgMTMyLCAzLCAxLCAyMTgsIDEzMywgMTMyLCAzLCAxLCAyNTEsIDE2OSwgMTMyLCAzLCAxLCAKKyAgICAyMzYsIDE2OCwgMTMyLCAzLCAxLCAyNDMsIDQsIDEzMiwgMywgMSwgMjM3LCAxMjMsIDEzMiwgMywgMSwgMjQ0LCAxMjQsIAorICAgIDEzMiwgMywgMSwgMjUxLCA0MiwgMTMyLCAzLCAxLCAyMzMsIDI1MSwgMTMyLCAzLCAxLCAyMTcsIDI1MCwgMTMyLCAzLCAxLCAKKyAgICAyMzEsIDE3NCwgMTMyLCAzLCAxLCAyMjUsIDI1LCAxMzIsIDMsIDEsIDIxOSwgNzIsIDEzMiwgMywgMSwgMjUxLCA2OSwgCisgICAgMTMyLCAzLCAxLCAyMjksIDE4NywgMTMyLCAzLCAxLCAyMzcsIDEwMCwgMTMyLCAzLCAxLCAyMDMsIDEzMiwgMywgMSwgMjI2LCAKKyAgICA3NywgMTMyLCAzLCAxLCAyMTksIDk2LCAxMzIsIDMsIDEsIDIyMSwgMTU4LCAxMzIsIDMsIDEsIDIyNywgMTk2LCAxMzIsIDMsIAorICAgIDEsIDI1MCwgMTgyLCAxMzIsIDMsIDEsIDIxNywgMjM2LCAxMzIsIDMsIDEsIDIyOSwgNjEsIDEzMiwgMywgMSwgMjM2LCAKKyAgICAxNzgsIDEzMiwgMywgMSwgMjMwLCAxNjEsIDEzMiwgMywgMSwgMjQ1LCAyMjEsIDEzMiwgMywgMjQsIDI0NiwgMjU1LCAyMTcsIAorICAgIDIzNiwgMTMyLCAyNDUsIDkwLCAyMjMsIDEzNiwgMTMyLCAyNDIsIDEyMSwgODcsIDI1NSwgMSwgMjQ2LCAxMTYsIDg3LCAKKyAgICAyNTUsIDEsIDIyNiwgNzgsIDg3LCAyNTUsIDEsIDIyNSwgMTIsIDg3LCAyNTUsIDEsIDIxNywgMTAyLCAyMjgsIDEzOCwgODcsIAorICAgIDI1NSwgMSwgMjE3LCAxMDIsIDI0NCwgMjQ2LCA4NywgMjU1LCAxLCAyMjEsIDE2OCwgODcsIDI1NSwgMSwgMjI3LCAxNTgsIAorICAgIDg3LCAyNTUsIDEsIDIxNywgMTAxLCA4NywgMjU1LCAxLCAyMjksIDIxOSwgODcsIDI1NSwgMSwgMjE4LCAwLCA4NywgMjU1LCAKKyAgICAxLCAyMjIsIDQxLCA4NywgMjU1LCAxLCAyNDQsIDE3MSwgODcsIDI1NSwgMSwgMjQ0LCAxNzIsIDIzMywgNzAsIDg3LCAyNTUsIAorICAgIDEsIDI0NCwgMTY5LCA4NywgMjU1LCAxLCAyMjgsIDEzOSwgMjI5LCAyNDIsIDg3LCAyNTUsIDEsIDIyMiwgNzAsIDI0NCwgCisgICAgMTg1LCA4NywgMjU1LCAxLCAyMjksIDIwMiwgODcsIDI1NSwgMSwgMjUzLCAyMzksIDI0MywgMjA2LCA4NywgMjU1LCAxLCAKKyAgICAyMzMsIDc5LCA4NywgMjU1LCAxLCAyMzQsIDEwNCwgODcsIDI1NSwgMSwgMjMzLCAyNDUsIDg3LCAyNTUsIDEsIDIzMywgCisgICAgMjQ2LCAyMzYsIDE3OSwgODcsIDI1NSwgMSwgMjQ5LCAxNTMsIDg3LCAyNTUsIDEsIDIyOCwgMTUwLCA4NywgMjU1LCAxLCAKKyAgICAyMjIsIDcwLCAyMjgsIDEzNCwgODcsIDI1NSwgMSwgMjE4LCAxMCwgMjUyLCAxMTUsIDIxNywgMjE3LCA4NywgMjU1LCAxLCAKKyAgICAyMzAsIDE0OSwgODcsIDI1NSwgMSwgMjM3LCAyNDEsIDg3LCAyNTUsIDEsIDI0OSwgNzYsIDg3LCAyNTUsIDEsIDIxNywgMzEsIAorICAgIDg3LCAxNjQsIDIzNCwgNTQsIDI1MCwgMjIxLCA4NywgMjI5LCAzMiwgMjI0LCAyMjQsIDg3LCAyMjksIDMyLCAyNDMsIDE3MiwgCisgICAgMjI2LCA3OCwgODcsIDIyOSwgMzIsIDI0MywgMTcyLCAyMjksIDIxNCwgODcsIDIyOSwgMzIsIDI0MywgMTcyLCAyMjgsIAorICAgIDE0MywgODcsIDIyOSwgMzIsIDI0MywgOTQsIDg3LCAyMjksIDMyLCAyMjEsIDQ4LCA4NywgMjI5LCAzMiwgMjI2LCA3OCwgCisgICAgODcsIDIyOSwgMzIsIDIyOSwgMjE0LCA4NywgMjI5LCAzMiwgMjI4LCAxNDMsIDg3LCAyMjksIDMyLCAyNDIsIDI1NCwgODcsIAorICAgIDIyOSwgMzIsIDI0MiwgMjU1LCAyNDMsIDE3NCwgMzUsIDIxOSwgMTY5LCA4NywgMjI5LCAzMiwgMjI4LCA4NSwgODcsIDIyOSwgCisgICAgMzIsIDI0OSwgMTk0LCAxNTYsIDIzNCwgNzcsIDg3LCAyMjksIDMyLCAyMzMsIDIzNywgODcsIDIyOCwgMTk3LCAyMzQsIDc2LCAKKyAgICA4NywgMjI5LCAzMiwgMjI3LCAyNDgsIDg3LCAyMjgsIDE5NywgMjI5LCAyMjAsIDg3LCAyMjksIDMyLCAyMjQsIDIxMCwgCisgICAgMjQ4LCAxNDUsIDg3LCAyMjksIDMyLCAyMjQsIDExMywgMjQ4LCAxNDUsIDg3LCAyMjgsIDE5NywgMjI0LCAyMiwgMjI5LCAKKyAgICAyMTYsIDg3LCAxNjQsIDIyMCwgNjAsIDI0OCwgMTQ1LCA4NywgMTY0LCAyMzQsIDIzNywgMjQ4LCAxNDUsIDg3LCAyMjgsIAorICAgIDE5NywgMjMxLCAxMDQsIDI0MywgMjA1LCA4NywgMjI5LCAzMiwgMjI4LCAxNDQsIDIyOCwgMTM4LCA4NywgMSwgMjU0LCAKKyAgICAxNjgsIDg3LCAxLCAyNTIsIDEwNCwgODcsIDEsIDI0NCwgOTEsIDg3LCAxLCAyNDksIDE3NywgODcsIDEsIDI0MywgMTYyLCAKKyAgICA4NywgMSwgMjE5LCAxNjksIDg3LCAxLCAyMTcsIDk1LCA4NywgMSwgMjQzLCAxMjgsIDg3LCAxLCAyMjIsIDUwLCA4NywgMSwgCisgICAgMjE3LCAyMjAsIDg3LCAxLCAzOSwgMjM2LCAyNDYsIDg3LCAxLCAyMzYsIDI0NiwgODcsIDEsIDIzNSwgMTUyLCA4NywgMSwgCisgICAgMzksIDIzNCwgMSwgODcsIDEsIDIzNCwgMSwgODcsIDEsIDM5LCAyMzEsIDEwMywgODcsIDEsIDIzMSwgMTAzLCA4NywgMSwgCisgICAgMjI2LCAxNDUsIDg3LCAxLCAyNTMsIDIwNywgODcsIDEsIDM5LCAyMjksIDE5OCwgODcsIDEsIDIyOSwgMTk4LCA4NywgMSwgCisgICAgMzksIDIyMSwgNTEsIDg3LCAxLCAyMjEsIDUxLCA4NywgMSwgMjI4LCAxMDcsIDg3LCAxLCAyMjcsIDE3NCwgODcsIDEsIAorICAgIDIyNCwgMjA5LCA4NywgMSwgMjIyLCAxMDIsIDg3LCAyNCwgMjE3LCAyNDgsIDUxLCAyMTksIDE2OSwgODcsIDI0LCAyMTcsIAorICAgIDI0OCwgMjE5LCAxNzAsIDIxNywgMjIwLCA4NywgMjQsIDIxNywgMjQ4LCA1MSwgMjE3LCAyMjAsIDg3LCAyMjgsIDE5NywgCisgICAgMjQ0LCAxNzEsIDg3LCAyMjgsIDE5NywgMjQ0LCAxNjksIDEyLCA1NCwgNTUsIDEyLCA1LCAyMjYsIDEzOSwgMTIsIDI0NSwgCisgICAgMTMyLCAyMzQsIDYzLCAxMiwgNSwgMjI2LCAxNjcsIDI1NCwgNjMsIDI1MCwgODksIDIyNywgNjQsIDI1NCwgNjMsIDI0NSwgCisgICAgMTEwLCAyMjcsIDY0LCAxMiwgMjI3LCAyMjIsIDI1NCwgNjMsIDIyOSwgMTcwLCAyMzMsIDE2NCwgNTUsIDI1NCwgNjMsIAorICAgIDIyOSwgMTcwLCAyMjIsIDY2LCAyMjEsIDIzMiwgNTUsIDI1NCwgMjE0LCA1NSwgMTIsIDI1MCwgMTY4LCAxMiwgMjQ5LCAKKyAgICAxNDEsIDIyNSwgNTQsIDEyLCAyMjksIDM0LCAyMTksIDE1NCwgNTUsIDEyLCA1LCAyMzMsIDE0NywgMTIsIDUsIDIyNiwgCisgICAgMTUyLCAyNTQsIDE3MCwgMjE4LCAyNDUsIDEyLCA1LCAyNTQsIDE3MCwgMjU0LCAwLCAxMiwgNSwgMjI3LCAyNDcsIDI1NCwgCisgICAgMTY5LCAxMiwgNSwgMjI3LCAyNTEsIDI1NCwgMTU1LCAyNTQsIDExNiwgMTIsIDUsIDIyMiwgMTI4LCAxMiwgMywgMTE2LCAKKyAgICAyMjIsIDEzNywgMTIsIDMsIDExNiwgMjQsIDk5LCAyLCAyMzUsIDE2MSwgMiwgMjE4LCAyMSwgMTIsIDMsIDExNiwgMjE3LCAKKyAgICAxMDYsIDEyLCAzLCAyNDUsIDIzOCwgMTIsIDMsIDI0OSwgMTcyLCAxMiwgMywgMjM2LCAyMDYsIDEyLCAyMjUsIDY3LCAxMiwgCisgICAgMjIxLCA3OCwgNjEsIDIyOCwgMTk3LCA3OCwgMTIsIDIyOCwgODIsIDc4LCAxMiwgMSwgMjQzLCAxOTIsIDEyLCAxLCA5OSwgCisgICAgMiwgMjM0LCAxMTEsIDUwLCAxMiwgMSwgOTksIDIsIDE4MSwgNTAsIDEyLCAxLCAyMTgsIDIzNCwgMiwgMTgxLCA1MCwgMTIsIAorICAgIDEsIDk5LCAyLCAxODEsIDU2LCAxMiwgMSwgNzAsIDIsIDE4MSwgNTAsIDEyLCAxLCAyNTQsIDE2OCwgMTIsIDEsIDI1MiwgCisgICAgMTI4LCAxMiwgMSwgMjIyLCA3OCwgMjM0LCA3MiwgMTIsIDEsIDIyMiwgNzcsIDEyLCAxLCAyMjIsIDE5LCAxMiwgMSwgMjM3LCAKKyAgICAxMTIsIDEyLCAxLCAyNDMsIDIwMiwgMTIsIDEsIDIzNiwgMTQ2LCAxMiwgMSwgMjQ5LCAxODMsIDEyLCAxLCAyMjIsIDI5LCAKKyAgICAxMiwgMSwgMjI3LCAxOTYsIDEyLCAxLCAyMTcsIDEwNiwgMTIsIDEsIDIyNiwgODIsIDEyLCAxLCAyMjQsIDI0MiwgMTIsIDEsIAorICAgIDIyNiwgMTcwLCAxMiwgMSwgMjQ5LCAyMDIsIDEyLCAxLCAyMjIsIDEzNywgMTIsIDEsIDIxNywgMTA5LCAxMiwgMSwgMjU0LCAKKyAgICAxOTEsIDEyLCAxLCAyNDQsIDEyMiwgMTIsIDEsIDIzNiwgMTc3LCAyLCAxMjQsIDE4OCwgNTAsIDEyLCAxLCAyMzYsIDE3NywgCisgICAgMiwgMTQ4LCAxODgsIDU2LCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAyLCAyMzcsIDE3MCwgMjE2LCAyMTYsIDEyLCAxLCAyNDUsIAorICAgIDI0MSwgNzAsIDIsIDEyNCwgMTg4LCA1MCwgMTIsIDEsIDI0NSwgMjQxLCA3MCwgMiwgMTQ4LCAxODgsIDUwLCAxMiwgMjIyLCAKKyAgICAxMDcsIDEyLCAxLCAyNDUsIDIyMSwgMTIsIDEsIDIyOCwgMTQ4LCAxMiwgMSwgMjM2LCAyNDYsIDEyLCAxLCAyMzUsIDE2MCwgCisgICAgMTIsIDEsIDIzNCwgMTQsIDEyLCAxLCAyMzEsIDE5MywgMTIsIDEsIDI0MywgMTQ2LCAxMiwgMSwgMjE4LCAyMzMsIDEyLCAxLCAKKyAgICA5OSwgMjM0LCA5MiwgMTIsIDEsIDIxOCwgMjEsIDEyLCAyNDUsIDIzNiwgMTIsIDI0OSwgMTcwLCAxMiwgMjM2LCAyMDQsIAorICAgIDEyLCAyNDUsIDIzOCwgMTIsIDI0OSwgMTcyLCAxMiwgMjM2LCAyMDYsIDEyLCAyMjUsIDE2LCAxMiwgMjIzLCA3NSwgMTIsIAorICAgIDIzNCwgMTA5LCA1MCwgMTIsIDE4MSwgNTAsIDEyLCAxODEsIDU2LCAxMiwgMjIzLCA5NCwgMjU0LCAxNjgsIDEyLCAyMzcsIAorICAgIDE3MCwgMjQ5LCAxNzIsIDEyLCAxNjQsIDIzMSwgMTk0LCAyNDQsIDEwNywgMTIsIDIxNiwgMjU1LCAxMiwgMjksIDUsIDMsIAorICAgIDIyMCwgMTEsIDUwLCAxMiwgMjksIDUsIDIzNywgMTcwLCAzLCAyMjAsIDExLCA1MCwgMTIsIDI5LCA1LCA2MSwgNTYsIDEyLCAKKyAgICAyMTAsIDI0OSwgMTcyLCAxMiwgMjQ1LCAyMzksIDIsIDEyNCwgMjQ4LCAxNDMsIDI1NCwgNjMsIDIwLCAyMTcsIDg0LCAyNTQsIAorICAgIDYzLCAyMCwgMTA3LCAyNTQsIDYzLCAyMCwgMTAzLCAyNTQsIDYzLCAyMCwgMTYwLCAyNTQsIDYzLCAyMCwgMTU0LCAyNTQsIAorICAgIDYzLCAyMCwgMTc0LCAyNTQsIDYzLCAyMCwgMTgyLCAyNTQsIDYzLCAyMCwgMTkxLCAyNTQsIDYzLCAyMCwgMTg1LCAyNTQsIAorICAgIDYzLCAyMCwgMTkwLCAxMiwgMjI5LCAxNjksIDU1LCAxMiwgMjQ5LCA4NiwgMjI1LCA1NCwgMTIsIDIyMSwgMjMwLCAyMjUsIAorICAgIDU0LCAxMiwgMjQ1LCAxNzAsIDIyOSwgMzAsIDIyMywgMTU2LCAxMiwgMSwgMjQ4LCAxNDQsIDI1MiwgMTI4LCAxMiwgMSwgCisgICAgMjQ4LCAxNDQsIDIyOCwgMTQ4LCAxMiwgMSwgMjIzLCA1OSwgMjU0LCAxNjgsIDEyLCAxLCA5OSwgMjE4LCAyNDYsIDEyLCAxLCAKKyAgICA5OSwgMiwgMjE4LCAyMzUsIDE4MSwgNTAsIDEyLCAxLCA5OSwgMiwgMjE4LCAyMzUsIDE4MSwgNTYsIDEyLCAxLCAxMTYsIAorICAgIDI0MywgMTkyLCAxMiwgMSwgMTE2LCAxODEsIDI1NCwgMTY4LCAxMiwgMSwgMTE2LCAxODEsIDIxOCwgMjMzLCAxMiwgMSwgCisgICAgMTA1LCAyLCAxODEsIDUwLCAxMiwgMSwgMTE2LCAxODEsIDIxOCwgMjEsIDEyLCAxLCAyMjEsIDIzLCAxMiwgMSwgMjIxLCAKKyAgICAyMSwgMTIsIDEsIDI1MiwgMTM1LCAxMiwgMSwgMjIyLCA3OCwgMiwgMjI3LCA5MywgMTIsIDEsIDIyMiwgNzgsIDIsIDE0OCwgCisgICAgMTg4LCA3MSwgMjQ3LCAxMjksIDEyLCAxLCAyMjksIDE4NywgMTIsIDEsIDIyMiwgNzUsIDEyLCAxLCAyNTIsIDEyNiwgMTIsIAorICAgIDEsIDExMSwgMiwgMTgxLCA1MCwgMTIsIDEsIDExMSwgMiwgMTI0LCAxODgsIDY5LCA1MCwgMTIsIDEsIDIzMSwgNzAsIDEyLCAKKyAgICAxLCAyNDcsIDc5LCAxMiwgMSwgMTExLCAyLCAxNDgsIDE4OCwgNTAsIDEyLCAxLCAyMjIsIDkxLCAxMiwgMSwgMjIyLCA4OSwgCisgICAgMTIsIDEsIDI0OSwgMTI3LCAxMiwgMSwgMjQ5LCAxODQsIDIsIDIyNywgOTMsIDEyLCAxLCAyNDksIDE4NCwgMiwgNjEsIDU2LCAKKyAgICAxMiwgMSwgMjQ5LCAxODQsIDIsIDYxLCAyNTIsIDExOCwgMjUsIDMsIDIyMiwgMTM3LCAxMiwgMSwgMjQ5LCAxODksIDEyLCAKKyAgICAxLCAyNDksIDEyOSwgMTIsIDEsIDI0NywgMTAzLCAxMiwgMSwgMjQ5LCAxODQsIDIsIDE0OCwgMTg4LCA3MSwgMjQ3LCAxMjksIAorICAgIDEyLCAxLCAyNDksIDE4NCwgMiwgMjQ1LCAxMTYsIDE4OCwgNTAsIDEyLCAxLCAyMjcsIDQ4LCAxMiwgMSwgMjI3LCAxOTcsIAorICAgIDIsIDMsIDIxNiwgMjE2LCAxMiwgMSwgMjI3LCAxOTcsIDIsIDIyNywgOTMsIDEyLCAxLCAyMjcsIDE5NywgMiwgNjEsIDU2LCAKKyAgICAxMiwgMSwgMjI3LCAxOTcsIDIsIDMsIDIyMCwgMTEsIDU2LCAxMiwgMSwgMjI3LCAxOTcsIDIsIDYxLCAyNTIsIDExOCwgMjUsIAorICAgIDYxLCA1MCwgMTIsIDEsIDIyNywgMTk3LCAyLCAxMjQsIDE4OCwgNTAsIDEyLCAxLCAyMzcsIDEwOSwgMTIsIDEsIDIyNywgCisgICAgMTk3LCAyLCAyNDUsIDExNiwgMTg4LCA1MCwgMTIsIDEsIDIyNiwgODMsIDIsIDYxLCAyNTIsIDExOCwgMjUsIDYxLCA1MCwgCisgICAgMTIsIDEsIDIyNiwgODMsIDIsIDE0OCwgMTg4LCA1NiwgMTIsIDEsIDIyNiwgODMsIDIsIDE0OCwgMTg4LCAyNTIsIDExOCwgCisgICAgMjUsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDIyNiwgMTcxLCAyLCAxMjQsIDE4OCwgNTYsIDEyLCAxLCAyMjYsIDE3MSwgMiwgCisgICAgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjIyLCAxMzgsIDIsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDI1NCwgMTkyLCAyLCAxNDgsIAorICAgIDE4OCwgNTAsIDEyLCAxLCAyNDgsIDE0NCwgMjQ1LCAyMjEsIDEyLCAxLCAyNDUsIDIyMiwgMiwgNjEsIDIzMywgMTA0LCA1NiwgCisgICAgMTIsIDEsIDI0NSwgMjIyLCAyLCA2MSwgNTYsIDEyLCAxLCAyMTksIDE1OCwgMTIsIDEsIDI0NSwgMjIyLCAyLCAxNDgsIAorICAgIDE4OCwgNTYsIDEyLCAxLCAyMjksIDE4NSwgMTIsIDEsIDIyOCwgMTQ5LCAyLCA2MSwgNTAsIDEyLCAxLCAyMjgsIDE0OSwgMiwgCisgICAgMTQ4LCAxODgsIDUwLCAxMiwgMSwgMjM2LCAxNzYsIDEyLCAxLCAyMjMsIDMzLCAyMzYsIDI0NiwgMTIsIDEsIDIzNiwgMjQ3LCAKKyAgICAyLCAyMjcsIDkzLCAxMiwgMSwgMjM2LCAyNDcsIDIsIDYxLCA1MCwgMTIsIDEsIDIzMiwgMTE3LCAxMiwgMSwgMjM2LCAyNDcsIAorICAgIDIsIDE0OCwgMTg4LCA1NiwgMTIsIDEsIDI0NCwgMjQzLCAxMiwgMSwgMjQ0LCAyNDQsIDIsIDIyNywgOTMsIDEyLCAxLCAKKyAgICAyMzIsIDgyLCAxMiwgMSwgMjQ0LCAyNDQsIDIsIDEyNCwgMTg4LCA1NiwgMTIsIDEsIDI0NCwgOSwgMTIsIDEsIDI0NCwgCisgICAgMjQ0LCAyLCAxNDgsIDE4OCwgNTAsIDEyLCAxLCAyMzUsIDE2MSwgMiwgMywgMjE2LCAyMTYsIDEyLCAxLCAyMzUsIDE2MSwgCisgICAgMiwgNjEsIDUwLCAxMiwgMSwgMjM1LCAxNjEsIDIsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDIzNSwgMTYxLCAyLCAxNDgsIAorICAgIDE4OCwgNTYsIDEyLCAxLCAyMzEsIDE5NCwgMiwgNjEsIDU2LCAxMiwgMSwgMjMxLCAxOTQsIDI0NCwgMTA3LCAxMiwgMSwgCisgICAgMjI3LCA3OCwgMTIsIDEsIDIzMSwgMTk0LCAyLCAyMjcsIDkzLCAxMiwgMSwgMjMxLCAxOTQsIDIsIDE0OCwgMTg4LCA1MCwgCisgICAgMTIsIDEsIDI0MywgMTQ3LCAyNDgsIDE2MywgMTIsIDEsIDIyMiwgOTIsIDIsIDYxLCA1MCwgMTIsIDEsIDI0MywgMTQ3LCAyLCAKKyAgICA3MCwgNTAsIDEyLCAxLCAyNDMsIDE0NywgMjQ0LCA2NSwgMTIsIDEsIDI0MywgMTQ3LCAyNDQsIDY2LCAyLCAxODEsIDUwLCAKKyAgICAxMiwgMSwgMjIyLCA3OCwgMjM0LCA3MywgMjQ0LCA2NSwgMTIsIDEsIDIxOCwgMjM0LCAyLCAyMjcsIDkzLCAxMiwgMSwgCisgICAgMjM2LCA5OCwgMjMwLCAxNjcsIDEyLCAxLCAyMzAsIDE2NywgMTIsIDEsIDY4LCAxMiwgMSwgMjE3LCAyMDAsIDEyLCAxLCAKKyAgICAyMzYsIDk4LCAyMTcsIDIwMCwgMTIsIDEsIDIxOCwgMjM0LCAyLCAxMjQsIDE4OCwgNTAsIDEyLCAxLCAyMTksIDE2NSwgMTIsIAorICAgIDEsIDI0NSwgMjQxLCAyMTgsIDIxLCAxMiwgMSwgNzAsIDIsIDIyMiwgMTM1LCAxMiwgMSwgNzAsIDIsIDMsIDIxNiwgMjE2LCAKKyAgICAxMiwgMSwgMjE4LCAyMzQsIDIsIDYxLCA1MCwgMTIsIDEsIDczLCAxMiwgMSwgNzAsIDIsIDE0OCwgMTg4LCA1NiwgMTIsIDEsIAorICAgIDcwLCAyNTIsIDE5NCwgMTIsIDEsIDcwLCAyNTIsIDE5NSwgMiwgMTgxLCA1MCwgMTIsIDI0NSwgOTAsIDIyMywgMTM2LCAxMiwgCisgICAgMSwgMjU0LCAyMzQsIDEyLCAzLCAxMTYsIDI0LCAyMjYsIDE3MSwgMiwgMjM1LCAxNjEsIDIsIDk5LCAyMzQsIDkyLCAxMiwgCisgICAgMywgMTE2LCAyNCwgMjI4LCAxNDksIDIsIDIzNSwgMTYxLCAyLCA5OSwgMjM0LCA5MiwgMTIsIDMsIDExNiwgNjIsIDY2LCAKKyAgICAxNywgMTIsIDMsIDExNiwgMjM1LCAxNjEsIDI1NCwgMTY4LCAxMiwgMywgMTE2LCAyMzcsIDExMiwgMTIsIDMsIDExNiwgCisgICAgMTQ4LCAyNDgsIDE0MywgMTIsIDMsIDExNiwgMjI2LCA4MiwgMTIsIDI0NiwgMTkwLCAxMTcsIDI1MywgMjExLCAxMiwgMjIzLCAKKyAgICAxNTQsIDExNywgMjI3LCAyMCwgMjQ2LCAyMTgsIDI0MywgOTEsIDEyLCAzLCAxMTYsIDIyNywgNTUsIDIxNywgODQsIDEyLCAKKyAgICAzLCAxMTYsIDIyMCwgNTksIDIyNywgMjA3LCAyMTcsIDg0LCAxMiwgMywgMTE2LCAyNDgsIDE0NCwgMjQzLCAxNjAsIDExNywgCisgICAgMjM2LCAxNDYsIDEyLCAzLCAxMTYsIDYyLCA0NywgMTcsIDEyLCAzLCAxMDksIDIyNiwgODIsIDEyLCAzLCAxMTYsIDIzNCwgCisgICAgMTEwLCAxMiwgMywgMjE4LCAyMzMsIDEyLCAzLCAyMTgsIDIxLCAxMiwgMywgMTE2LCAyMTgsIDIxLCAxMiwgMywgMTE2LCAKKyAgICAyMzEsIDE5MywgMTIsIDIyOSwgNTcsIDExNywgMjI2LCAxNTksIDEyLCAyNDYsIDE5OSwgMjUxLCA4NSwgMTA5LCAyMjMsIAorICAgIDEzNiwgMTIsIDI0NiwgMTk5LCAyNTEsIDg1LCAxMTYsIDIyMywgMTM2LCAxMiwgMjI3LCA1NSwgMTE2LCAyMjMsIDEzNywgMiwgCisgICAgMjQ1LCAxODYsIDI1MSwgODQsIDEyLCAzLCAxMDksIDIzNCwgMTQsIDEyLCAxLCAyNDksIDE4NCwgMiwgMjM3LCAxNzAsIAorICAgIDIxNiwgMjE2LCAxMiwgMSwgMjI3LCAxOTcsIDIsIDIzNywgMTcwLCAyMTYsIDIxNiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIAorICAgIDIxNywgODQsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxMDcsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxMDMsIDI0NiwgODcsIAorICAgIDI1NCwgNjMsIDIwLCAxNjAsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxNTQsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxNzQsIAorICAgIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxODIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxOTEsIDI0NiwgODcsIDI1NCwgNjMsIAorICAgIDIwLCAxODUsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxOTAsIDEyLCAxLCAyMjQsIDI0MywgMiwgNjEsIDU2LCAxMiwgMSwgCisgICAgMjQ5LCAyMDMsIDIsIDYxLCA1NiwgMTIsIDEsIDI0NCwgMTIzLCAyLCA2MSwgNTYsIDEyLCA1LCAyMjQsIDExMiwgMjU0LCAKKyAgICAxMzQsIDEyLCA1LCAyMjQsIDExMiwgMjI5LCAxMywgMjMzLCAyNTEsIDEyLCAxLCAyNDMsIDE0NywgMiwgMjM3LCAxNzAsIAorICAgIDIxNiwgMjE2LCAxNjYsIDI0NiwgMTkwLCAxMTcsIDIyOSwgMjQwLCAxNjYsIDIyMywgNTUsIDI0NSwgOTAsIDIyMywgMTM2LCAKKyAgICAxNjYsIDIyMywgOTYsIDI0NSwgOTAsIDIyMywgMTM2LCAxNjYsIDIyMywgNTUsIDI1MCwgMTc1LCAxNjYsIDIyMywgOTYsIAorICAgIDI1MCwgMTc1LCAxNjYsIDE4NiwgMjUwLCAxNzUsIDE2NiwgMjUwLCAxNzYsIDIyNCwgNjQsIDIzNSwgMTE1LCAxNjYsIDI1MCwgCisgICAgMTc2LCAyMjQsIDY0LCAyMjcsIDEwOSwgMTY2LCAyMjMsIDU1LCAyNTAsIDE3NiwgMjI0LCA2NCwgMjM1LCAxMTUsIDE2NiwgCisgICAgMjIzLCA5NiwgMjUwLCAxNzYsIDIyNCwgNjQsIDIyNywgMTA5LCAxNjYsIDI1MCwgMTM0LCAxNjYsIDI0MywgMTc5LCAyMzAsIAorICAgIDE3OSwgMTY2LCAyNDMsIDE3OSwgMjMzLCAyMzYsIDE2NiwgMjQzLCAxNzksIDI1MywgMjUzLCAxNjYsIDI1NSwgNywgNzgsIAorICAgIDE2NiwgMSwgMjU0LCAxNzEsIDE2NiwgMSwgMjIzLCA1OSwgMjU0LCAxNzEsIDE2NiwgMSwgMjUyLCAxMDEsIDE2NiwgMSwgCisgICAgMjQ0LCAyMzUsIDE2NiwgMSwgMjQ0LCAyMzYsIDI0NCwgMjE2LCAxNjYsIDEsIDI0OSwgMTgwLCAxNjYsIDEsIDI0OCwgMTQ0LCAKKyAgICAyNDksIDE4MSwgMjI3LCA4OSwgMTY2LCAxLCAyNDMsIDE2MiwgMTY2LCAxLCAyMTgsIDIzMywgMTY2LCAxLCAyMTcsIDEwNiwgCisgICAgMTY2LCAxLCAyNDMsIDEyNiwgMTY2LCAxLCAyMjIsIDQ2LCAxNjYsIDEsIDIyMiwgNDcsIDI0NCwgMjE2LCAxNjYsIDEsIAorICAgIDIxNywgMTg4LCAxNjYsIDEsIDIxNywgMTg5LCAyNDMsIDE2MiwgMTY2LCAxLCAyMzYsIDIyNCwgMTY2LCAxLCAyMzUsIDE1OSwgCisgICAgMTY2LCAxLCAyMzMsIDE2MSwgMTY2LCAxLCAyMzEsIDEwMywgMTY2LCAxLCAyMjUsIDYwLCAxNjYsIDEsIDM5LCAyMjUsIDYwLCAKKyAgICAxNjYsIDEsIDczLCAxNjYsIDEsIDIyOSwgMTk4LCAxNjYsIDEsIDIxMCwgMjI5LCAxOTgsIDE2NiwgMSwgMjI2LCAxNjgsIAorICAgIDE2NiwgMSwgMjI4LCAxNDIsIDE2NiwgMSwgMjI3LCA4OSwgMTY2LCAxLCAyMjQsIDIwOSwgMTY2LCAxLCAyMjIsIDEwMCwgCisgICAgMTY2LCAxLCAyMjksIDE1OSwgMjUyLCA5MCwgMTY2LCAxLCAyMjksIDE1OSwgMjQ0LCAxMjAsIDE2NiwgMSwgMjI5LCAxNTksIAorICAgIDI0OSwgMzIsIDE2NiwgMjI4LCAyMDMsIDUwLCAxNjYsIDIyOCwgMjAzLCA1NiwgMTY2LCAyMjgsIDIwMywgMjQ3LCAxNDIsIAorICAgIDE2NiwgMjE3LCAxNSwgNTAsIDE2NiwgMjE3LCAxNSwgNTYsIDE2NiwgMjE3LCAxNSwgMjQ3LCAxNDIsIDE2NiwgMjI3LCAKKyAgICAyMTksIDUwLCAxNjYsIDIyNywgMjE5LCA1NiwgMTY2LCAyNDcsIDE0MywgMjE3LCAyMiwgMjQyLCAyNDEsIDE2NiwgMjQ3LCAKKyAgICAxNDMsIDIxNywgMjIsIDI1NCwgMTE3LCAxNjYsIDI0MywgMTY1LCA1MCwgMTY2LCAyNDMsIDE2NSwgNTYsIDE2NiwgMjQzLCAKKyAgICAxNjQsIDI0NywgMTQyLCAxNjYsIDI0NiwgMTM2LCA1MCwgMTY2LCAyNDYsIDEzNiwgNTYsIDE2NiwgMjI2LCAyNTAsIDE2NiwgCisgICAgMjQ1LCAyMTUsIDI0OCwgMTQ1LCAxNjYsIDIyOCwgNjMsIDE2NiwgMjI3LCAxNywgMTY2LCAxMjQsIDY5LCAxODgsIDUwLCAKKyAgICAxNjYsIDEyNCwgNjksIDE4OCwgNTYsIDE2NiwgMTQ4LCAxODgsIDUwLCAxNjYsIDE0OCwgMTg4LCA1NiwgMTY2LCAyMzAsIAorICAgIDE3NywgMjM1LCA0NCwgNTAsIDE2NiwgMjMwLCAxNzcsIDIzNSwgNDQsIDU2LCAxNjYsIDIzMywgNTgsIDE2NiwgMjUyLCAKKyAgICAxOTMsIDE2NiwgMSwgMjI0LCAxOSwgMjE3LCA3OCwgMTY2LCAxLCAyMjQsIDE5LCAyMzYsIDEzOSwgMTY2LCAxLCAyMjQsIAorICAgIDE5LCAyNDUsIDIzMSwgMTIsIDEsIDI1MiwgMTI5LCAyLCAxNDgsIDE4OCwgMjQyLCAxOTEsIDU2LCAxMiwgMSwgMjUyLCAKKyAgICAxMjksIDIsIDYxLCAyNTIsIDExOCwgMjUsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDI1MiwgMTI5LCAyLCAxNDgsIDE4OCwgCisgICAgMjI5LCAyOCwgMjIwLCA1MywgNTYsIDEyLCAxLCAyNTIsIDEyOSwgMiwgMTQ4LCAxODgsIDIyOSwgMjgsIDIyMCwgNTMsIAorICAgIDI1MiwgMTE4LCAyNSwgMTI0LCAxODgsIDUwLCAxMiwgMSwgMjUyLCAxMjksIDIsIDEyNCwgMTg4LCAyNTIsIDExOCwgMjUsIAorICAgIDYxLCA1MCwgMTIsIDEsIDI1MiwgMTI5LCAyLCAyMzcsIDE3MCwgMywgMjIwLCAxMSwgNTYsIDEyLCAxLCAyNTIsIDEyOSwgMiwgCisgICAgMywgMjE2LCAyMTYsIDEyLCAxLCAxMTEsIDIsIDEyNCwgMTg4LCA1MCwgMTIsIDEsIDExMSwgMiwgMTQ4LCAxODgsIDIyOSwgCisgICAgMjgsIDIyMCwgNTMsIDU2LCAxMiwgMSwgMjQ5LCAxODQsIDIsIDEyNCwgMTg4LCAyMTksIDEwMiwgMjUyLCAxMTgsIDI1LCAzLCAKKyAgICAyMjIsIDEzNywgMTIsIDEsIDI0OSwgMTg0LCAyLCAyMzcsIDE3MCwgMywgMjIwLCAxMSwgNTYsIDEyLCAxLCAyMjcsIDE5NywgCisgICAgMiwgOTIsIDEyLCAxLCAyMjYsIDgzLCAyLCAyNDUsIDExNiwgMTg4LCA1MCwgMTIsIDEsIDI1NCwgMTkyLCAyLCAxMjQsIAorICAgIDE4OCwgNTAsIDEyLCAxLCAyNTQsIDE5MiwgMiwgMTQ4LCAxODgsIDIyOSwgMjgsIDI0NywgMTMwLCA1MCwgMTIsIDEsIDI1NCwgCisgICAgMTkyLCAyLCAxMjQsIDE4OCwgMjE5LCAxMDIsIDUwLCAxMiwgMSwgMjQ1LCAyMjIsIDIsIDEyNCwgMTg4LCA1NiwgMTIsIDEsIAorICAgIDI0NSwgMjIyLCAyLCAxNDgsIDE4OCwgMjI5LCAyOCwgMjIwLCA1MywgNTYsIDEyLCAxLCAyMzYsIDE3NywgMiwgNjEsIDUwLCAKKyAgICAxMiwgMSwgMjM2LCAxNzcsIDIsIDE0OCwgMTg4LCA1MCwgMTIsIDEsIDIzNiwgMTc3LCAyLCAxNDgsIDE4OCwgMjI5LCAyOCwgCisgICAgMjIwLCA1MywgNTYsIDEyLCAxLCA2MiwgMiwgNjEsIDUwLCAxMiwgMSwgNjIsIDIsIDYxLCA1NiwgMTIsIDEsIDIzMSwgMTk0LCAKKyAgICAyLCAxMjQsIDE4OCwgNTYsIDEyLCAxLCAyMzEsIDE5NCwgMiwgMywgMjIyLCAxMzcsIDEyLCAxLCAyMzEsIDE5NCwgMiwgMywgCisgICAgMjE2LCAyMTYsIDEyLCAxLCAyMzUsIDE2MSwgMiwgMTM1LCAxMiwgMSwgMjI3LCAxOTcsIDIsIDEyNCwgMTg4LCAyMTksIAorICAgIDEwMiwgNTAsIDEyLCAxLCAyMjcsIDE5NywgMiwgMTgxLCA1MCwgMTIsIDEsIDIyNiwgODMsIDIsIDEyNCwgMTg4LCAyMTksIAorICAgIDEwMiwgNTAsIDEyLCAxLCAxMTEsIDIsIDMsIDEyLCAxLCAyMjIsIDEzOCwgNTYsIDEyLCAxLCAxMTEsIDIsIDMsIDEyLCAxLCAKKyAgICAyMjIsIDEzOCwgMjUsIDEyNCwgMjQ4LCAxNDMsIDEyLCAxLCAyMjYsIDgzLCAyLCAzLCAxMiwgMSwgMjIyLCAxMzgsIDI1LCAKKyAgICAxMjQsIDI0OCwgMTQzLCAxMiwgMSwgMjI3LCAxOTcsIDIsIDMsIDEyLCAxLCAyMjIsIDEzOCwgMjUsIDEyNCwgMjQ4LCAxNDMsIAorICAgIDEyLCAxLCAxMTEsIDIsIDMsIDEyLCAxLCAyMjIsIDEzOCwgNTAsIDEyLCAxLCA5OSwgMiwgMjQ2LCA4NywgMjU0LCA2MywgCisgICAgMjAsIDEyNCwgNTAsIDEyLCAxLCA5OSwgMiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDE0OCwgNTAsIDEyLCAxLCAyNDUsIAorICAgIDI0MSwgNzAsIDIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAxMjQsIDUwLCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAyLCAyNDYsIAorICAgIDg3LCAyNTQsIDYzLCAyMCwgMTQ4LCA1MCwgMTIsIDEsIDI0NSwgMjQxLCA3MCwgMiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIAorICAgIDI0NSwgMTE2LCA1NiwgMTIsIDEsIDIxOCwgMjM0LCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgMTI0LCA1MCwgMTIsIDEsIAorICAgIDIxOCwgMjM0LCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgMTQ4LCA1MCwgMTIsIDEsIDcwLCAyNTIsIDE5NSwgMiwgMjQ2LCAKKyAgICA4NywgMjU0LCA2MywgMjAsIDEyNCwgNTAsIDEyLCAxLCA3MCwgMjUyLCAxOTUsIDIsIDI0NiwgODcsIDI1NCwgNjMsIDIwLCAKKyAgICAxNDgsIDUwLCAxMiwgMSwgMTExLCAyLCAyNDYsIDg3LCAyNTQsIDYzLCAyMCwgMjQ1LCAxMTYsIDU2LCAxMiwgMSwgMjI2LCAKKyAgICA4MywgMiwgMjQ2LCA4NywgMjU0LCA2MywgMjAsIDI0NSwgMTE2LCA1MCwgMTIsIDEsIDIyNiwgODMsIDIsIDIzNywgMTcwLCAKKyAgICAyMTYsIDIxNiwgMTIsIDEsIDIzNiwgMjQ3LCAyLCAxMjQsIDE4OCwgNTAsIDIyMiwgMzIsIDEsIDI0MywgMjExLCAyMjIsIAorICAgIDMyLCAxLCAyMjQsIDI1MSwgMjIyLCAzMiwgMSwgMjMxLCAxOTIsIDIyMiwgMzIsIDEsIDIyOCwgMCwgMjIyLCAzMiwgMSwgCisgICAgMjUyLCAyMzYsIDIyMiwgMzIsIDEsIDIzNSwgNzYsIDIyMiwgMzIsIDEsIDIzNywgMywgMjIyLCAzMiwgMSwgMjU0LCAxNjAsIAorICAgIDIyMiwgMzIsIDEsIDIxOSwgMTg3LCAyMjIsIDMyLCAxLCAyMzQsIDEzLCAyMjIsIDMyLCAxLCAyNDYsIDYsIDIyMiwgMzIsIAorICAgIDEsIDI0OSwgMzUsIDIyMiwgMzIsIDEsIDIyMiwgMzQsIDIyMiwgMzIsIDEsIDIzNSwgMTg1LCAyMjIsIDMyLCAxLCAyNDQsIAorICAgIDI1MiwgMjIyLCAzMiwgMSwgMjQ0LCA3MSwgMjIyLCAzMiwgMSwgMjI2LCA4MSwgMjIyLCAzMiwgMSwgMjQ5LCAxMzksIDIyMiwgCisgICAgMzIsIDEsIDIxNywgOTgsIDIyMiwgMzIsIDEsIDIyMiwgMTAxLCAyMjIsIDMyLCAxLCAyMTgsIDc2LCAyMjIsIDMyLCAxLCAKKyAgICAyMjksIDIwOSwgMjIyLCAzMiwgMSwgMjM3LCAxMTYsIDIyMiwgMzIsIDEsIDI1MSwgNDksIDIyMiwgMzIsIDEsIDIyMSwgMjgsIAorICAgIDIyMiwgMzIsIDEsIDI0MywgMTIwLCAyMjIsIDMyLCAxLCAyMzYsIDE0OCwgMjIyLCAzMiwgMSwgMjIyLCAzMywgMjIyLCAzMiwgCisgICAgMSwgMjE3LCAxMTMsIDIyMiwgMzIsIDEsIDIyNCwgMjQxLCAyMjIsIDMyLCAxLCAyMjYsIDE3NCwgMjIyLCAzMiwgMSwgMjQ5LCAKKyAgICAyMDUsIDIyMiwgMzIsIDEsIDEwMSwgMjIyLCAzMiwgMSwgMjE3LCAyMSwgMjIyLCAzMiwgMSwgMjU0LCAxODksIDIyMiwgMzIsIAorICAgIDEsIDI0NCwgMTIxLCAyMjIsIDMyLCAxLCAyMjgsIDE1MiwgMjIyLCAzMiwgMSwgMjE5LCA1LCAyMjIsIDMyLCAyNTUsIDgsIAorICAgIDIyMiwgMzIsIDI1NSwgMjMsIDIyMiwgMzIsIDI0MiwgNjgsIDIyMiwgMzIsIDI0NiwgMjQ5LCAyMjIsIDMyLCAyMjAsIDExOCwgCisgICAgMjIyLCAzMiwgMjMwLCAxMjYsIDIyMiwgMzIsIDI0NywgMSwgMjIyLCAzMiwgMjQ2LCA4MiwgMjIyLCAzMiwgMjMwLCAxNzYsIAorICAgIDIyMiwgMzIsIDIzMCwgMTg0LCAyMjIsIDMyLCAyMjMsIDc1LCAyMjIsIDMyLCAxLCAyMzIsIDIzNSwgMjMxLCAyNDIsIDIwLCAKKyAgICAyMTcsIDg0LCAyMzEsIDI0MiwgMjAsIDEwNywgMjMxLCAyNDIsIDIwLCAxMDMsIDIzMSwgMjQyLCAyMCwgMTYwLCAyMzEsIAorICAgIDI0MiwgMjAsIDE1NCwgMjMxLCAyNDIsIDIwLCAxNzQsIDIzMSwgMjQyLCAyMCwgMTgyLCAyMzEsIDI0MiwgMjAsIDE5MSwgCisgICAgMjMxLCAyNDIsIDIwLCAxODUsIDIzMSwgMjQyLCAyMCwgMTkwLCAyMzEsIDI0MiwgMSwgNjAsIDIzMSwgMjQyLCAxLCAyNDYsIAorICAgIDI1MCwgMjMxLCAyNDIsIDEsIDcyLCAyMzEsIDI0MiwgMSwgNzMsIDIzMSwgMjQyLCAxLCA2OCwgMjMxLCAyNDIsIDEsIDIzMCwgCisgICAgMTI3LCAyMzEsIDI0MiwgMSwgNzQsIDIzMSwgMjQyLCAxLCAyNDksIDE5NSwgMjMxLCAyNDIsIDEsIDIwNywgMjMxLCAyNDIsIAorICAgIDEsIDI1MiwgMjM3LCAyMzEsIDI0MiwgMSwgMTg3LCAyMzEsIDI0MiwgMSwgMjIyLCAxNTUsIDIzMSwgMjQyLCAxLCAyMzcsIAorICAgIDEyMywgMjMxLCAyNDIsIDEsIDI1MSwgNjksIDIzMSwgMjQyLCAxLCAyNDksIDIwNywgMjMxLCAyNDIsIDEsIDIwMywgMjMxLCAKKyAgICAyNDIsIDEsIDIyNywgNTIsIDIzMSwgMjQyLCAxLCAyMjYsIDE3NywgMjMxLCAyNDIsIDEsIDI0NCwgMjA0LCAyMzEsIDI0MiwgCisgICAgMSwgMjQ2LCA4LCAyMzEsIDI0MiwgMSwgMTc1LCAyMzEsIDI0MiwgMSwgMjM1LCAxODgsIDIzMSwgMjQyLCAxLCAyMzIsIAorICAgIDIzOCwgMjE4LCAxODQsIDIzMSwgMjQyLCAxLCAxOTYsIDIzMSwgMjQyLCAxLCAyMzEsIDc3LCAyMzEsIDI0MiwgMSwgMjA4LCAKKyAgICAyMzEsIDI0MiwgMSwgMTU1LCAyMzEsIDI0MiwgMSwgMjE5LCA3LCAyMzEsIDI0MiwgMSwgMTg0LCAyMzEsIDI0MiwgMSwgCisgICAgMjMxLCA3OCwgMjE4LCAxODQsIDIzMSwgMjQyLCAxLCAyMzcsIDUyLCAyMzcsIDEyMywgMjMxLCAyNDIsIDEsIDIzNywgNTIsIAorICAgIDI1MSwgNjksIDIzMSwgMjQyLCAxLCAyMzcsIDUyLCAyMDMsIDIzMSwgMjQyLCAzNiwgMjI0LCAxOTIsIDExNiwgMjIxLCAKKyAgICAxMzIsIDIzMSwgMjQyLCAzNiwgMjI0LCAxOTIsIDEwOSwgMjIxLCAxMzIsIDIzMSwgMjQyLCAzNiwgMjI0LCAxOTIsIDIyNywgCisgICAgODgsIDIyMSwgMTMyLCAyMzEsIDI0MiwgMzYsIDE3MSwgMjQ5LCA0NywgMjIxLCAxMzIsIDIzMSwgMjQyLCAzNiwgMTcxLCAKKyAgICAxMTYsIDIyMSwgMTMyLCAyMzEsIDI0MiwgMzYsIDE3MSwgMTA5LCAyMjEsIDEzMiwgMjMxLCAyNDIsIDM2LCAxNzEsIDIyNywgCisgICAgODgsIDIyMSwgMTMyLCAyMzEsIDI0MiwgMzYsIDIzMiwgMjA5LCA3OCwgMjMxLCAyNDIsIDM2LCA1MSwgNjEsIDUwLCAyMzEsIAorICAgIDI0MiwgMTE2LCAxNDUsIDI1NCwgNzksIDIzMSwgMjQyLCAxMDksIDE0NSwgMjU0LCA3OSwgMjMxLCAyNDIsIDE2LCAyMzAsIAorICAgIDEyOCwgMjQ5LCA1OCwgMjMxLCAyNDIsIDE2LCAyNDQsIDIwMywgMjMxLCAyNDIsIDI1MCwgMTY4LCAyMzEsIDI0MiwgMjQ2LCAKKyAgICA5NSwgNzgsIDIzMSwgMjQyLCAyMzUsIDE2NiwgMjEzLCAxLCAyNTQsIDE3MywgMjEzLCAxLCAyNTIsIDYwLCAyMTMsIDEsIAorICAgIDI0NCwgMjM0LCAyMTMsIDEsIDI0OSwgMTgyLCAyMTMsIDEsIDIzNywgMTMzLCAyMTMsIDEsIDI1MiwgMjM2LCAyMTMsIDEsIAorICAgIDIxNywgODcsIDIxMywgMSwgMjM3LCAxNDAsIDIxMywgMSwgMjIxLCAxNjEsIDIxMywgMSwgMjE3LCAxNzcsIDIxMywgMSwgCisgICAgMjM3LCA0LCAyMTMsIDEsIDIzNSwgMTgzLCAyMTMsIDEsIDIzMywgMTYxLCAyMTMsIDEsIDIzMSwgMTAzLCAyMTMsIDEsIAorICAgIDIyNCwgMTEwLCAyMTMsIDEsIDIzNywgMjIzLCAyMTMsIDEsIDI0NSwgMjAzLCAyMTMsIDEsIDIyMSwgNTMsIDIxMywgMSwgCisgICAgMjI4LCA3OSwgMjEzLCAxLCAyMjcsIDg5LCAyMTMsIDEsIDIyNSwgOSwgMjEzLCAxLCAyMjIsIDE1MSwgMjEzLCAxNjQsIAorICAgIDIzNywgMjIzLCAyMTMsIDE2NCwgMjM3LCAyMjIsIDIxMywgMTY0LCAyMzAsIDE3MiwgMjEzLCAxNjQsIDI0OSwgMTkzLCAKKyAgICAyMTMsIDU4LCAxLCAyNDYsIDE2MCwgMjE3LCAxNzcsIDIxMywgMTY0LCAyNDYsIDE2MCwgMjE3LCAxNzcsIDIxMywgMjksIDUsIAorICAgIDE3MSwgNzMsIDIxMywgMjksIDUsIDczLCAyMTMsIDI5LCA1LCAyMzAsIDcyLCAyNTUsIDU4LCAyMTMsIDI5LCA1LCAxNzEsIAorICAgIDI1NSwgNTgsIDIxMywgMjksIDUsIDI1NSwgNTgsIDIxMywgMjksIDUsIDIzMCwgNzIsIDYwLCAyMTMsIDI5LCA1LCAxNzEsIAorICAgIDYwLCAyMTMsIDI5LCA1LCA2MCwgMjEzLCA1OCwgMSwgMjI0LCAxOTIsIDYwLCAyMTMsIDI5LCA1LCAyMjQsIDE5MiwgNjAsIAorICAgIDIxMywgMjksIDUsIDE3MSwgNjgsIDIxMywgMjksIDUsIDY4LCAyMTMsIDU4LCAxLCA3MiwgMjEzLCAyOSwgNSwgMTcxLCA3MiwgCisgICAgMjEzLCAyOSwgNSwgNzIsIDIxMywgMjksIDUsIDc0LCAyMTMsIDI5LCA1LCAyMjMsIDc1LCAyMTMsIDE2NCwgMjMyLCAxMjgsIAorICAgIDIxMywgMjI4LCAxOTcsIDIzMiwgMTI4LCAyMTMsIDIyOCwgMTk3LCAyNTQsIDIxMSwgMjEzLCAyMjgsIDE5NywgMjU0LCAKKyAgICAxMjIsIDIxMywgMjI4LCAxOTcsIDI1MiwgMTgxLCAyMTMsIDIyOCwgMTk3LCAyNTMsIDI0MCwgMjEzLCAyMjgsIDE5NywgCisgICAgMjI0LCAyMDEsIDIxMywgMjU1LCA3LCA3OCwgMjEzLCAyMjgsIDE5NywgMjM0LCA0LCAyMjgsIDExMywgMjEzLCAyMjgsIAorICAgIDE5NywgMjE3LCAyOSwgMjEzLCAyMjgsIDE5NywgMjI4LCAxMTMsIDIxMywgMjI4LCAxOTcsIDIxNywgMTEyLCAyMTMsIDIyOCwgCisgICAgMTk3LCAyMjAsIDIzMywgMjEzLCAyMjgsIDE5NywgMjU0LCAzNiwgMjEzLCAyMjgsIDE5NywgMjI0LCAyMiwgMjM0LCA1NSwgCisgICAgMjEzLCAyMjgsIDE5NywgMjU0LCAxMTMsIDgwLCA1LCAyMzcsIDE3MCwgMjUxLCAxNDYsIDgwLCA1LCAyNTEsIDE0NiwgODAsIAorICAgIDUsIDI1NCwgOTUsIDgwLCA1LCAyMTksIDc3LCA4MCwgMSwgMjI0LCAxOTIsIDYwLCA4MCwgMSwgNjAsIDgwLCAxLCAyNTUsIAorICAgIDU4LCA4MCwgMSwgNzIsIDgwLCAxLCAyMzcsIDI1NSwgODAsIDEsIDY4LCA4MCwgMSwgMjIwLCAyMywgODAsIDEsIDE2NywgCisgICAgMTUyLCA4MCwgMSwgMTY3LCAxNTMsIDgwLCAxLCAyNTEsIDE0OSwgNzMsIDgwLCAxLCAyMjQsIDE5MiwgNzMsIDgwLCAxLCAKKyAgICA3MywgODAsIDEsIDI1NCwgMTk2LCA4MCwgMSwgMjUxLCAxNDksIDc0LCA4MCwgMSwgMjI0LCAxOTIsIDc0LCA4MCwgMSwgNzQsIAorICAgIDgwLCAxLCAyNTMsIDIzMiwgODAsIDEsIDE3NSwgODAsIDEsIDIzNiwgMTQ5LCA4MCwgMSwgMjQ1LCAwLCA4MCwgMSwgMjQ0LCAKKyAgICAxMjUsIDgwLCAxLCAyMzIsIDExNSwgODAsIDEsIDI1MSwgMTY5LCA4MCwgMSwgMjUxLCA2OSwgODAsIDEsIDIzNywgMTIzLCAKKyAgICA4MCwgMSwgMjM3LCAxMDMsIDgwLCAxLCAyMzEsIDc3LCA4MCwgMSwgMjIxLCAyOSwgODAsIDEsIDIyMSwgMTksIDgwLCAxLCAKKyAgICAyNDksIDEzMiwgODAsIDEsIDI0OSwgMTE2LCA4MCwgMSwgMjMxLCAyMTcsIDgwLCAxLCAyMjIsIDE1NSwgODAsIDEsIDIyMiwgCisgICAgMzUsIDgwLCAxLCAyNDksIDIwNywgODAsIDEsIDI0OSwgMzYsIDgwLCAxLCAyMDgsIDgwLCAxLCAyMzEsIDIwOCwgODAsIDEsIAorICAgIDE4NywgODAsIDEsIDIyOSwgMTQxLCA4MCwgMSwgMjUyLCAyMzcsIDgwLCAxLCAyNTIsIDk0LCA4MCwgMSwgMTk2LCA4MCwgMSwgCisgICAgMTg0LCA4MCwgMSwgMjAzLCA4MCwgMSwgMjI3LCA1MiwgODAsIDEsIDIzNSwgMTg4LCA4MCwgMSwgMjM1LCAxNywgODAsIDEsIAorICAgIDIzNSwgMTYsIDgwLCAxLCAyMTksIDE4OSwgODAsIDEsIDIyNSwgMjUsIDgwLCAxLCAyMjMsIDIxOCwgODAsIDEsIDIyNiwgCisgICAgMTc3LCA4MCwgMSwgMTU1LCA4MCwgNSwgMjMxLCAxMTIsIDgwLCA1LCAyNTMsIDIxOSwgODAsIDI5LCA1LCAyNTUsIDU4LCAKKyAgICA4MCwgMjksIDUsIDcyLCA4MCwgMjksIDUsIDIzNywgMjU1LCA4MCwgMjksIDUsIDY4LCA4MCwgMjksIDUsIDIyMCwgMjMsIAorICAgIDgwLCAyOSwgNSwgMTY3LCAxNTIsIDgwLCAyOSwgNSwgMTY3LCAyMjcsIDUzLCA4MCwgMjksIDUsIDI1MSwgMTQ5LCA3MywgCisgICAgODAsIDI5LCA1LCAyMjQsIDE5MiwgNzMsIDgwLCAyOSwgNSwgNzMsIDgwLCAyOSwgNSwgMjU0LCAxOTYsIDgwLCAyOSwgNSwgCisgICAgMjUxLCAxNDksIDc0LCA4MCwgMjksIDUsIDIyNCwgMTkyLCA3NCwgODAsIDI5LCA1LCA3NCwgODAsIDI5LCA1LCAyNTMsIAorICAgIDIzMiwgODAsIDUsIDIxOSwgODIsIDgwLCAyOSwgNSwgMjI4LCAyMzIsIDczLCA4MCwgMjMwLCAxNDYsIDgwLCAyMjMsIDEyNSwgCisgICAgNSwgMjIwLCAxMTIsIDgwLCAyMjMsIDEyNSwgNSwgMjU0LCA5NywgODAsIDI0NCwgMzcsIDI1NSwgMCwgODAsIDI1NCwgMjQ4LCAKKyAgICAyNTUsIDAsIDgwLCAyOSwgNSwgMjUxLCAxNDksIDE3MSwgNzMsIDgwLCAxLCAyMjgsIDE1NSwgODAsIDEsIDIzNiwgMTMzLCAKKyAgICA4MCwgMSwgMjQ0LCAxMTQsIDgwLCAxLCAyMTcsIDExNCwgODAsIDEsIDI0OSwgMTIxLCA4MCwgMSwgMjI3LCAxNTEsIDgwLCAKKyAgICAxLCAyNDYsIDgsIDgwLCAxLCAyMTcsIDE2NSwgODAsIDEsIDE2NywgMjI3LCA1MywgODAsIDEsIDE2NywgMjM1LCAxOCwgODAsIAorICAgIDI5LCA1LCAxNjcsIDE1MywgODAsIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDgwLCAyNDksIDE2NywgODAsIDUxLCAyNDksIDE2NywgCisgICAgODAsIDIwLCAyMTcsIDg0LCA4MCwgMjAsIDEwNywgODAsIDIwLCAxMDMsIDgwLCAyMCwgMTYwLCA4MCwgMjAsIDE1NCwgODAsIAorICAgIDIwLCAxNzQsIDgwLCAyMCwgMTgyLCA4MCwgMjAsIDE5MSwgODAsIDIwLCAxODUsIDgwLCAyMCwgMTkwLCA4MCwgMjU1LCA3LCAKKyAgICA1NSwgODAsIDUsIDExNiwgMjIzLCAyNTMsIDI0OCwgMTQ1LCA4MCwgMSwgMjUxLCAxNDksIDYwLCA4MCwgMSwgMjE3LCA4MCwgCisgICAgODAsIDEsIDEwNiwgMTg0LCA4MCwgMSwgMjQ0LCAxNjAsIDgwLCAxLCAyMzcsIDg3LCA4MCwgMSwgMjQ0LCA3MywgMjIzLCAKKyAgICAxMzYsIDgwLCAxLCAyNDksIDEyMiwgODAsIDEsIDI1MiwgMTc4LCAxMzAsIDUsIDI1MSwgMTQ2LCAxMzAsIDUsIDI1NCwgOTUsIAorICAgIDEzMCwgNSwgMjE5LCA3NywgMTMwLCAxLCA2MCwgMTMwLCAxLCAyNTUsIDU4LCAxMzAsIDEsIDcyLCAxMzAsIDEsIDIzNywgCisgICAgMjU1LCAxMzAsIDEsIDY4LCAxMzAsIDEsIDIyMCwgMjMsIDEzMCwgMSwgMTY3LCAxNTIsIDEzMCwgMSwgMTY3LCAxNTMsIAorICAgIDEzMCwgMSwgNzMsIDEzMCwgMSwgMjU0LCAxOTYsIDEzMCwgMSwgNzQsIDEzMCwgMSwgMjUzLCAyMzIsIDEzMCwgMSwgMTc1LCAKKyAgICAxMzAsIDEsIDIzNiwgMTQ5LCAxMzAsIDEsIDI0NSwgMCwgMTMwLCAxLCAyNDQsIDEyNSwgMTMwLCAxLCAyMzIsIDExNSwgCisgICAgMTMwLCAxLCAyNTEsIDE2OSwgMTMwLCAxLCAyNTEsIDY5LCAxMzAsIDEsIDIzNywgMTIzLCAxMzAsIDEsIDIzNywgMTAzLCAKKyAgICAxMzAsIDEsIDIzMSwgNzcsIDEzMCwgMSwgMjIxLCAyOSwgMTMwLCAxLCAyMjEsIDE5LCAxMzAsIDEsIDI0OSwgMTMyLCAxMzAsIAorICAgIDEsIDI0OSwgMTE2LCAxMzAsIDEsIDIzMSwgMjE3LCAxMzAsIDEsIDIyMiwgMTU1LCAxMzAsIDEsIDIyMiwgMzUsIDEzMCwgMSwgCisgICAgMjQ5LCAyMDcsIDEzMCwgMSwgMjQ5LCAzNiwgMTMwLCAxLCAyMDgsIDEzMCwgMSwgMTg3LCAxMzAsIDEsIDIyOSwgMTQxLCAKKyAgICAxMzAsIDEsIDI1MiwgMjM3LCAxMzAsIDEsIDI1MiwgOTQsIDEzMCwgMSwgMTk2LCAxMzAsIDEsIDE4NCwgMTMwLCAxLCAyMDMsIAorICAgIDEzMCwgMSwgMjM1LCAxODgsIDEzMCwgMSwgMjI1LCAyNSwgMTMwLCAxLCAyMjMsIDIxOCwgMTMwLCAxLCAyMjYsIDE3NywgCisgICAgMTMwLCAxLCAxNTUsIDEzMCwgNSwgMjMxLCAxMTIsIDEzMCwgNSwgMjUzLCAyMTksIDEzMCwgMjksIDUsIDI1NSwgNTgsIAorICAgIDEzMCwgMjksIDUsIDcyLCAxMzAsIDI5LCA1LCAyMzcsIDI1NSwgMTMwLCAyOSwgNSwgNjgsIDEzMCwgMjksIDUsIDIyMCwgCisgICAgMjMsIDEzMCwgMjksIDUsIDE2NywgMTUyLCAxMzAsIDI5LCA1LCAxNjcsIDIyNywgNTMsIDEzMCwgMjksIDUsIDczLCAxMzAsIAorICAgIDI5LCA1LCAyNTQsIDE5NiwgMTMwLCAyOSwgNSwgNzQsIDEzMCwgMjksIDUsIDI1MywgMjMyLCAxMzAsIDUsIDIxOSwgODIsIAorICAgIDEzMCwgMSwgMjM2LCAxNDEsIDIyMiwgMTU1LCAxMzAsIDI1MywgMjMzLCAyMzUsIDk0LCA3OCwgMTMwLCAxLCAyMjcsIDUyLCAKKyAgICAxMzAsIDEsIDIyNywgMTUxLCAxMzAsIDEsIDIxNywgMTY1LCAxMzAsIDEsIDE2NywgMjI3LCA1MywgMTMwLCAxLCAxNjcsIAorICAgIDIzNSwgMTgsIDEzMCwgMjksIDUsIDE2NywgMTUzLCAxMzAsIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDEzMCwgMjAsIDIxNywgCisgICAgODQsIDEzMCwgMjAsIDEwNywgMTMwLCAyMCwgMTAzLCAxMzAsIDIwLCAxNjAsIDEzMCwgMjAsIDE1NCwgMTMwLCAyMCwgMTc0LCAKKyAgICAxMzAsIDIwLCAxODIsIDEzMCwgMjAsIDE5MSwgMTMwLCAyMCwgMTg1LCAxMzAsIDIwLCAxOTAsIDEzMCwgMSwgMjI4LCAzLCAKKyAgICAyLCAyMzMsIDE5MywgMjQ5LCAxMCwgMTMwLCAxLCAyMjgsIDMsIDIsIDIzNCwgMjM3LCAyNDksIDEwLCAxMzAsIDIyNywgNCwgCisgICAgNzgsIDEzMCwgMjI3LCA0LCA1NSwgMTMwLCAyNTAsIDc4LCAyMzEsIDEwNiwgMTA3LCAxMzAsIDI1MCwgNzgsIDIzMSwgMTA2LCAKKyAgICAxMDMsIDEzMCwgMjUwLCA3OCwgMjMxLCAxMDYsIDE2MCwgMTMwLCAyNTAsIDc4LCAyMzEsIDEwNiwgMTU0LCAxMzAsIDI1MCwgCisgICAgNzgsIDIzMSwgMTA2LCAxMzEsIDIzNSwgODgsIDIyMiwgMjgsIDIyMiwgMjMsIDI0OSwgNTYsIDEzMCwgMjUwLCA3OCwgMjQ5LCAKKyAgICA1NywgMjI0LCA3NywgMTMwLCAyMzcsIDE0MSwgMTMwLCAyNDQsIDIyNywgNzgsIDE2MywgNSwgMjU0LCAyNDMsIDI1MiwgNzIsIAorICAgIDE2MywgNSwgMjUyLCA3MiwgMTYzLCA1LCAyMTksIDc3LCAxNjMsIDEsIDYwLCAxNjMsIDEsIDI1NSwgNTgsIDE2MywgMSwgCisgICAgNzIsIDE2MywgMSwgMjM3LCAyNTUsIDE2MywgMSwgNjgsIDE2MywgMSwgMjIwLCAyMywgMTYzLCAxLCAyNDYsIDI1MCwgMTYzLCAKKyAgICAxLCAyNTQsIDE5NiwgMTYzLCAxLCAyMzAsIDEyNywgMTYzLCAxLCAyNTMsIDIzMiwgMTYzLCAxLCAxNzUsIDE2MywgMSwgCisgICAgMjM2LCAxNDksIDE2MywgMSwgMjQ1LCAwLCAxNjMsIDEsIDI0NCwgMTI1LCAxNjMsIDEsIDIzMiwgMTE1LCAxNjMsIDEsIAorICAgIDI1MSwgMTY5LCAxNjMsIDEsIDI1MSwgNjksIDE2MywgMSwgMjM3LCAxMjMsIDE2MywgMSwgMjM3LCAxMDMsIDE2MywgMSwgCisgICAgMjMxLCA3NywgMTYzLCAxLCAyMjEsIDI5LCAxNjMsIDEsIDIyMSwgMTksIDE2MywgMSwgMjQ5LCAxMzIsIDE2MywgMSwgMjQ5LCAKKyAgICAxMTYsIDE2MywgMSwgMjMxLCAyMTcsIDE2MywgMSwgMjIyLCAxNTUsIDE2MywgMSwgMjIyLCAzNSwgMTYzLCAxLCAyNDksIAorICAgIDIwNywgMTYzLCAxLCAyNDksIDM2LCAxNjMsIDEsIDIwOCwgMTYzLCAxLCAxODcsIDE2MywgMSwgMjI5LCAxNDEsIDE2MywgMSwgCisgICAgMjUyLCAyMzcsIDE2MywgMSwgMjUyLCA5NCwgMTYzLCAxLCAxOTYsIDE2MywgMSwgMTg0LCAxNjMsIDEsIDIwMywgMTYzLCAxLCAKKyAgICAyMzUsIDE4OCwgMTYzLCAxLCAyMzUsIDE3LCAxNjMsIDEsIDIxOSwgMTg5LCAxNjMsIDEsIDIyNSwgMjUsIDE2MywgMSwgCisgICAgMjI2LCAxNzcsIDE2MywgMSwgMTU1LCAxNjMsIDUsIDIzMSwgMTEyLCAxNjMsIDI5LCA1LCAyNTUsIDU4LCAxNjMsIDI5LCA1LCAKKyAgICA3MiwgMTYzLCAyOSwgNSwgMjM3LCAyNTUsIDE2MywgMjksIDUsIDY4LCAxNjMsIDI5LCA1LCAyMjAsIDIzLCAxNjMsIDI5LCAKKyAgICA1LCAyNDYsIDI1MCwgMTYzLCAyOSwgNSwgMjU0LCAxOTYsIDE2MywgMjksIDUsIDIzMCwgMTI3LCAxNjMsIDI5LCA1LCAyNTMsIAorICAgIDIzMiwgMTYzLCA1LCAyMTksIDgyLCAxNjMsIDUsIDIyMCwgMTE0LCAxNjMsIDEsIDIzNiwgMTMzLCAxNjMsIDEsIDI0NCwgCisgICAgMTE0LCAxNjMsIDEsIDIxNywgMTE0LCAxNjMsIDEsIDIyNywgNTIsIDE2MywgMSwgMjQ2LCA4LCAxNjMsIDIwLCAyMTcsIDg0LCAKKyAgICAxNjMsIDIwLCAxMDcsIDE2MywgMjAsIDEwMywgMTYzLCAyMCwgMTYwLCAxNjMsIDIwLCAxNTQsIDE2MywgMjAsIDE3NCwgCisgICAgMTYzLCAyMCwgMTgyLCAxNjMsIDIwLCAxOTEsIDE2MywgMjAsIDE4NSwgMTYzLCAyMCwgMTkwLCAxNjMsIDIyMSwgMTY3LCAKKyAgICAxNjMsIDI1NCwgMjQyLCAxNjMsIDIzNywgMTU1LCAxNjMsIDIyMCwgNDYsIDE2MywgMjQ2LCAyMjQsIDIzMCwgMTMyLCAxNjMsIAorICAgIDUsIDIxOCwgNTQsIDE1MCwgNSwgMjUxLCAxNDYsIDE1MCwgNSwgMjU0LCA5NSwgMTUwLCA1LCAyMTksIDc3LCAxNTAsIDEsIAorICAgIDYwLCAxNTAsIDEsIDI1NSwgNTgsIDE1MCwgMSwgNzIsIDE1MCwgMSwgMjM3LCAyNTUsIDE1MCwgMSwgNjgsIDE1MCwgMSwgCisgICAgMjIwLCAyMywgMTUwLCAxLCAxNjcsIDE1MiwgMTUwLCAxLCAxNjcsIDE1MywgMTUwLCAyOSwgMjUxLCAxNDksIDczLCAxNTAsIAorICAgIDEsIDczLCAxNTAsIDEsIDI1NCwgMTk2LCAxNTAsIDI5LCAyNTEsIDE0OSwgNzQsIDE1MCwgMSwgNzQsIDE1MCwgMSwgMjUzLCAKKyAgICAyMzIsIDE1MCwgMSwgMTc1LCAxNTAsIDEsIDIzNiwgMTQ5LCAxNTAsIDEsIDI0NSwgMCwgMTUwLCAxLCAyNDQsIDEyNSwgCisgICAgMTUwLCAxLCAyMzIsIDExNSwgMTUwLCAxLCAyNTEsIDE2OSwgMTUwLCAxLCAyNTEsIDY5LCAxNTAsIDEsIDIzNywgMTIzLCAKKyAgICAxNTAsIDEsIDIzNywgMTAzLCAxNTAsIDEsIDIzMSwgNzcsIDE1MCwgMSwgMjIxLCAyOSwgMTUwLCAxLCAyMjEsIDE5LCAxNTAsIAorICAgIDEsIDI0OSwgMTMyLCAxNTAsIDEsIDI0OSwgMTE2LCAxNTAsIDEsIDIzMSwgMjE3LCAxNTAsIDEsIDIyMiwgMTU1LCAxNTAsIAorICAgIDEsIDIyMiwgMzUsIDE1MCwgMSwgMjQ5LCAyMDcsIDE1MCwgMSwgMjQ5LCAzNiwgMTUwLCAxLCAyMDgsIDE1MCwgMSwgMTg3LCAKKyAgICAxNTAsIDEsIDIyOSwgMTQxLCAxNTAsIDEsIDI1MiwgMjM3LCAxNTAsIDEsIDI1MiwgOTQsIDE1MCwgMSwgMTk2LCAxNTAsIDEsIAorICAgIDE4NCwgMTUwLCAxLCAyMDMsIDE1MCwgMSwgMjM1LCAxODgsIDE1MCwgMSwgMjM1LCAxNywgMTUwLCAxLCAyMTksIDE4OSwgCisgICAgMTUwLCAxLCAyMjUsIDI1LCAxNTAsIDEsIDIyMywgMjE4LCAxNTAsIDEsIDIyNiwgMTc3LCAxNTAsIDEsIDE1NSwgMTUwLCA1LCAKKyAgICAyMzEsIDExMiwgMTUwLCA1LCAyNTMsIDIxOSwgMTUwLCAyOSwgNSwgMjU1LCA1OCwgMTUwLCAyOSwgNSwgNzIsIDE1MCwgMjksIAorICAgIDUsIDIzNywgMjU1LCAxNTAsIDI5LCA1LCA2OCwgMTUwLCAyOSwgNSwgMjIwLCAyMywgMTUwLCAyOSwgNSwgMTY3LCAxNTIsIAorICAgIDE1MCwgMjksIDUsIDE2NywgMjI3LCA1MywgMTUwLCAyOSwgNSwgMjUxLCAxNDksIDczLCAxNTAsIDI5LCA1LCA3MywgMTUwLCAKKyAgICAyOSwgNSwgMjU0LCAxOTYsIDE1MCwgMjksIDUsIDI1MSwgMTQ5LCA3NCwgMTUwLCAyOSwgNSwgNzQsIDE1MCwgMjksIDUsIAorICAgIDI1MywgMjMyLCAxNTAsIDUsIDIxOSwgODIsIDE1MCwgMjMwLCAxNDYsIDE1MCwgMSwgMTY3LCAyMjcsIDUzLCAxNTAsIDEsIAorICAgIDE2NywgMjM1LCAxOCwgMTUwLCAyOSwgNSwgMTY3LCAxNTMsIDE1MCwgMjksIDUsIDE2NywgMjM1LCAxOCwgMTUwLCAyMCwgCisgICAgMjE3LCA4NCwgMTUwLCAyMCwgMTA3LCAxNTAsIDIwLCAxMDMsIDE1MCwgMjAsIDE2MCwgMTUwLCAyMCwgMTU0LCAxNTAsIDIwLCAKKyAgICAxNzQsIDE1MCwgMjAsIDE4MiwgMTUwLCAyMCwgMTkxLCAxNTAsIDIwLCAxODUsIDE1MCwgMjAsIDE5MCwgMTUwLCAyMjcsIDQsIAorICAgIDU1LCAxNDcsIDUsIDI1MSwgMTQ2LCAxNDcsIDUsIDI1NCwgOTUsIDE0NywgNSwgMjE5LCA3NywgMTQ3LCAxLCA2MCwgMTQ3LCAKKyAgICAxLCAyNTUsIDU4LCAxNDcsIDEsIDcyLCAxNDcsIDEsIDIzNywgMjU1LCAxNDcsIDEsIDY4LCAxNDcsIDEsIDIyMCwgMjMsIAorICAgIDE0NywgMSwgMTY3LCAxNTIsIDE0NywgMSwgMTY3LCAxNTMsIDE0NywgMSwgNzMsIDE0NywgMSwgMjU0LCAxOTYsIDE0NywgMSwgCisgICAgNzQsIDE0NywgMSwgMjUzLCAyMzIsIDE0NywgMSwgMTc1LCAxNDcsIDEsIDIzNiwgMTQ5LCAxNDcsIDEsIDI0NSwgMCwgMTQ3LCAKKyAgICAxLCAyNDQsIDEyNSwgMTQ3LCAxLCAyMzIsIDExNSwgMTQ3LCAxLCAyNTEsIDE2OSwgMTQ3LCAxLCAyNTEsIDY5LCAxNDcsIDEsIAorICAgIDIzNywgMTIzLCAxNDcsIDEsIDIzNywgMTAzLCAxNDcsIDEsIDIzMSwgNzcsIDE0NywgMSwgMjIxLCAyOSwgMTQ3LCAxLCAKKyAgICAyMjEsIDE5LCAxNDcsIDEsIDI0OSwgMTMyLCAxNDcsIDEsIDI0OSwgMTE2LCAxNDcsIDEsIDIzMSwgMjE3LCAxNDcsIDEsIAorICAgIDIyMiwgMTU1LCAxNDcsIDEsIDIyMiwgMzUsIDE0NywgMSwgMjQ5LCAyMDcsIDE0NywgMSwgMjQ5LCAzNiwgMTQ3LCAxLCAKKyAgICAyMDgsIDE0NywgMSwgMTg3LCAxNDcsIDEsIDIyOSwgMTQxLCAxNDcsIDEsIDI1MiwgMjM3LCAxNDcsIDEsIDI1MiwgOTQsIAorICAgIDE0NywgMSwgMTk2LCAxNDcsIDEsIDE4NCwgMTQ3LCAxLCAyMDMsIDE0NywgMSwgMjM1LCAxODgsIDE0NywgMSwgMjM1LCAxNywgCisgICAgMTQ3LCAxLCAyMTksIDE4OSwgMTQ3LCAxLCAyMjUsIDI1LCAxNDcsIDEsIDIyMywgMjE4LCAxNDcsIDEsIDIyNiwgMTc3LCAKKyAgICAxNDcsIDEsIDE1NSwgMTQ3LCA1LCAyMzEsIDExMiwgMTQ3LCA1LCAyNTMsIDIxOSwgMTQ3LCAyOSwgNSwgMjU1LCA1OCwgCisgICAgMTQ3LCAyOSwgNSwgNzIsIDE0NywgMjksIDUsIDIzNywgMjU1LCAxNDcsIDI5LCA1LCA2OCwgMTQ3LCAyOSwgNSwgMjIwLCAKKyAgICAyMywgMTQ3LCAyOSwgNSwgMTY3LCAxNTIsIDE0NywgMjksIDUsIDE2NywgMjI3LCA1MywgMTQ3LCAyOSwgNSwgNzMsIDE0NywgCisgICAgMjksIDUsIDI1NCwgMTk2LCAxNDcsIDI5LCA1LCA3NCwgMTQ3LCAyOSwgNSwgMjUzLCAyMzIsIDE0NywgNSwgMjE5LCA4MiwgCisgICAgMTQ3LCAyNTQsIDE5NywgMjM1LCA5NCwgNzgsIDE0NywgMjUzLCAyMzMsIDIzNSwgOTQsIDc4LCAxNDcsIDEsIDIyNywgNTIsIAorICAgIDE0NywgMSwgMjI3LCAxNTEsIDE0NywgMSwgMjE3LCAxNjUsIDE0NywgMSwgMTY3LCAyMjcsIDUzLCAxNDcsIDEsIDE2NywgCisgICAgMjM1LCAxOCwgMTQ3LCAyOSwgNSwgMTY3LCAxNTMsIDE0NywgMjksIDUsIDE2NywgMjM1LCAxOCwgMTQ3LCAyMCwgMjE3LCAKKyAgICA4NCwgMTQ3LCAyMCwgMTA3LCAxNDcsIDIwLCAxMDMsIDE0NywgMjAsIDE2MCwgMTQ3LCAyMCwgMTU0LCAxNDcsIDIwLCAxNzQsIAorICAgIDE0NywgMjAsIDE4MiwgMTQ3LCAyMCwgMTkxLCAxNDcsIDIwLCAxODUsIDE0NywgMjAsIDE5MCwgMTQ3LCAyMzcsIDE0MSwgCisgICAgMTQ3LCAxLCAyMTksIDcsIDE3NiwgNSwgMjU0LCA5NSwgMTc2LCA1LCAyMTksIDc3LCAxNzYsIDEsIDYwLCAxNzYsIDEsIAorICAgIDI1NSwgNTgsIDE3NiwgMSwgNzIsIDE3NiwgMSwgMjM3LCAyNTUsIDE3NiwgMSwgNjgsIDE3NiwgMSwgMjIwLCAyMywgMTc2LCAKKyAgICAxLCA3MywgMTc2LCAxLCAyNDYsIDI1MCwgMTc2LCAxLCAyNTQsIDE5NiwgMTc2LCAxLCA3NCwgMTc2LCAxLCAyMzAsIDEyNywgCisgICAgMTc2LCAxLCAyNTMsIDIzMiwgMTc2LCAxLCAxNzUsIDE3NiwgMSwgMjMyLCAxMTUsIDE3NiwgMSwgMjUxLCAxNjksIDE3NiwgCisgICAgMSwgMjM3LCAxMjMsIDE3NiwgMSwgMjMxLCA3NywgMTc2LCAxLCAyMjEsIDI5LCAxNzYsIDEsIDIzMSwgMjE3LCAxNzYsIDEsIAorICAgIDIyMiwgMTU1LCAxNzYsIDEsIDIwOCwgMTc2LCAxLCAyMzEsIDIwOCwgMTc2LCAxLCAxODcsIDE3NiwgMSwgMTk2LCAxNzYsIAorICAgIDEsIDE4NCwgMTc2LCAxLCAyMDMsIDE3NiwgMSwgMjI3LCA1MiwgMTc2LCAxLCAyMzUsIDE4OCwgMTc2LCAxLCAyMzUsIDE3LCAKKyAgICAxNzYsIDEsIDIzNSwgMTYsIDE3NiwgMSwgMjE5LCAxODksIDE3NiwgMSwgMjI1LCAyNSwgMTc2LCAxLCAyMjMsIDIxOCwgCisgICAgMTc2LCAxLCAyMjYsIDE3NywgMTc2LCAxLCAxNTUsIDE3NiwgMjksIDUsIDI1NSwgNTgsIDE3NiwgMjksIDUsIDcyLCAxNzYsIAorICAgIDI5LCA1LCAyMzcsIDI1NSwgMTc2LCAyOSwgNSwgNjgsIDE3NiwgMjksIDUsIDIyMCwgMjMsIDE3NiwgMjksIDUsIDczLCAKKyAgICAxNzYsIDI5LCA1LCAyNDYsIDI1MCwgMTc2LCAyOSwgNSwgMjU0LCAxOTYsIDE3NiwgMjksIDUsIDc0LCAxNzYsIDI5LCA1LCAKKyAgICAyMzAsIDEyNywgMTc2LCAyOSwgNSwgMjUzLCAyMzIsIDE3NiwgNSwgMjE5LCA4MiwgMTc2LCAyMzAsIDE0NiwgMTc2LCAyNTMsIAorICAgIDIzMywgMjM1LCA5NCwgNzgsIDE3NiwgMjAsIDIxNywgODQsIDE3NiwgMjAsIDEwNywgMTc2LCAyMCwgMTAzLCAxNzYsIDIwLCAKKyAgICAxNjAsIDE3NiwgMjAsIDE1NCwgMTc2LCAyMCwgMTc0LCAxNzYsIDIwLCAxODIsIDE3NiwgMjAsIDE5MSwgMTc2LCAyMCwgCisgICAgMTg1LCAxNzYsIDIwLCAxOTAsIDE3NiwgNTQsIDIyMiwgNjUsIDE3NiwgNTQsIDEzMSwgMjQyLCAxNjEsIDE3NiwgNTQsIAorICAgIDEzMSwgMjIxLCAyMzEsIDE3NiwgMjQ5LCAxMzcsIDU1LCAxNzYsIDIzMywgMTIxLCA1NSwgMTc2LCAyMTgsIDIzLCA1NSwgCisgICAgMTc2LCAyNDksIDg5LCA1NSwgMTc2LCAyNTAsIDEwNywgNTUsIDE3NiwgMjU0LCAxNCwgNzEsIDU1LCAxNzYsIDIyNywgNCwgCisgICAgNTUsIDE3NiwgNTQsIDU1LCAxMjksIDUsIDI1MSwgMTQ2LCAxMjksIDUsIDI1NCwgOTUsIDEyOSwgNSwgMjE5LCA3NywgMTI5LCAKKyAgICAxLCA2MCwgMTI5LCAxLCAyNTUsIDU4LCAxMjksIDEsIDcyLCAxMjksIDEsIDIzNywgMjU1LCAxMjksIDEsIDY4LCAxMjksIDEsIAorICAgIDIyMCwgMjMsIDEyOSwgMSwgMTY3LCAxNTIsIDEyOSwgMSwgMTY3LCAxNTMsIDEyOSwgMSwgNzMsIDEyOSwgMSwgMjQ2LCAKKyAgICAyNTAsIDEyOSwgMSwgMjU0LCAxOTYsIDEyOSwgMSwgNzQsIDEyOSwgMSwgMjMwLCAxMjcsIDEyOSwgMSwgMjUzLCAyMzIsIAorICAgIDEyOSwgMSwgMTc1LCAxMjksIDEsIDIzNiwgMTQ5LCAxMjksIDEsIDI0NSwgMCwgMTI5LCAxLCAyNDQsIDEyNSwgMTI5LCAxLCAKKyAgICAyMzIsIDExNSwgMTI5LCAxLCAyNTEsIDE2OSwgMTI5LCAxLCAyNTEsIDY5LCAxMjksIDEsIDIzNywgMTIzLCAxMjksIDEsIAorICAgIDIzNywgMTAzLCAxMjksIDEsIDIzMSwgNzcsIDEyOSwgMSwgMjIxLCAyOSwgMTI5LCAxLCAyMjEsIDE5LCAxMjksIDEsIDI0OSwgCisgICAgMTMyLCAxMjksIDEsIDI0OSwgMTE2LCAxMjksIDEsIDIzMSwgMjE3LCAxMjksIDEsIDIyMiwgMTU1LCAxMjksIDEsIDIyMiwgCisgICAgMzUsIDEyOSwgMSwgMjQ5LCAyMDcsIDEyOSwgMSwgMjQ5LCAzNiwgMTI5LCAxLCAyMDgsIDEyOSwgMSwgMTg3LCAxMjksIDEsIAorICAgIDIyOSwgMTQxLCAxMjksIDEsIDI1MiwgMjM3LCAxMjksIDEsIDI1MiwgOTQsIDEyOSwgMSwgMTk2LCAxMjksIDEsIDE4NCwgCisgICAgMTI5LCAxLCAyMDMsIDEyOSwgMSwgMjI3LCA1MiwgMTI5LCAxLCAyMzUsIDE4OCwgMTI5LCAxLCAyMzUsIDE3LCAxMjksIDEsIAorICAgIDIxOSwgMTg5LCAxMjksIDEsIDIyNSwgMjUsIDEyOSwgMSwgMjIzLCAyMTgsIDEyOSwgMSwgMjI2LCAxNzcsIDEyOSwgMSwgCisgICAgMTU1LCAxMjksIDUsIDI1MywgMjE5LCAxMjksIDI5LCA1LCAyNTUsIDU4LCAxMjksIDI5LCA1LCA3MiwgMTI5LCAyOSwgNSwgCisgICAgMjM3LCAyNTUsIDEyOSwgMjksIDUsIDY4LCAxMjksIDI5LCA1LCAyMjAsIDIzLCAxMjksIDI5LCA1LCAxNjcsIDE1MiwgMTI5LCAKKyAgICAyOSwgNSwgMTY3LCAyMjcsIDUzLCAxMjksIDI5LCA1LCA3MywgMTI5LCAyOSwgNSwgMjQ2LCAyNTAsIDEyOSwgMjksIDUsIAorICAgIDI1NCwgMTk2LCAxMjksIDI5LCA1LCA3NCwgMTI5LCAyOSwgNSwgMjMwLCAxMjcsIDEyOSwgMjksIDUsIDI1MywgMjMyLCAKKyAgICAxMjksIDUsIDIxOSwgODIsIDEyOSwgMjM1LCA5NCwgNzgsIDEyOSwgMjU0LCAxOTcsIDIzNSwgOTQsIDc4LCAxMjksIDEsIAorICAgIDIyMSwgNTUsIDEyOSwgMSwgMjQ3LCA3NCwgMTI5LCAxLCAxNjcsIDIyNywgNTMsIDEyOSwgMSwgMTY3LCAyMzUsIDE4LCAKKyAgICAxMjksIDI5LCA1LCAxNjcsIDE1MywgMTI5LCAyOSwgNSwgMTY3LCAyMzUsIDE4LCAxMjksIDIwLCAyMTcsIDg0LCAxMjksIAorICAgIDIwLCAxMDcsIDEyOSwgMjAsIDEwMywgMTI5LCAyMCwgMTYwLCAxMjksIDIwLCAxNTQsIDEyOSwgMjAsIDE3NCwgMTI5LCAyMCwgCisgICAgMTgyLCAxMjksIDIwLCAxOTEsIDEyOSwgMjAsIDE4NSwgMTI5LCAyMCwgMTkwLCAxMjksIDI0NSwgMTA4LCAyMCwgMjE3LCAKKyAgICA4NSwgMzUsIDIzMCwgMTY5LCAyMjksIDksIDExNywgMTU0LCAxMjksIDI0NSwgMTA4LCAyMCwgMTMxLCAzNSwgMjMwLCAxNjksIAorICAgIDIyOSwgOSwgMTE3LCAxNTQsIDEyOSwgMjQ1LCAxMDgsIDIwLCAxMjQsIDM1LCAyMzAsIDE2OSwgMjI5LCA5LCAxMTcsIDE1NCwgCisgICAgMTI5LCAyNDUsIDEwOCwgMjAsIDE0OCwgMzUsIDIzMCwgMTY5LCAyMjksIDksIDExNywgMTU0LCAxMjksIDI0NSwgMTA4LCAKKyAgICAyMCwgMTMxLCAzNSwgMjQ2LCAxMDQsIDIyOSwgOSwgMTE3LCAxNTQsIDEyOSwgMjQ1LCAxMDgsIDIwLCAxMjQsIDM1LCAyNDYsIAorICAgIDEwNCwgMjI5LCA5LCAxMTcsIDE1NCwgMTI5LCAyNDUsIDEwOCwgMjAsIDE0OCwgMzUsIDI0NiwgMTA0LCAyMjksIDksIDExNywgCisgICAgMTU0LCAxMjksIDUsIDIyMCwgMjI5LCAxNDEsIDUsIDI1NCwgOTUsIDE0MSwgNSwgMjE5LCA3NywgMTQxLCAxLCA2MCwgMTQxLCAKKyAgICAxLCAyNTUsIDU4LCAxNDEsIDEsIDcyLCAxNDEsIDEsIDIzNywgMjU1LCAxNDEsIDEsIDY4LCAxNDEsIDEsIDIyMCwgMjMsIAorICAgIDE0MSwgMSwgMTY3LCAxNTIsIDE0MSwgMSwgMTY3LCAxNTMsIDE0MSwgMSwgNzMsIDE0MSwgMSwgMjQ2LCAyNTAsIDE0MSwgMSwgCisgICAgMjU0LCAxOTYsIDE0MSwgMSwgNzQsIDE0MSwgMSwgMjMwLCAxMjcsIDE0MSwgMSwgMjUzLCAyMzIsIDE0MSwgMSwgMTc1LCAKKyAgICAxNDEsIDEsIDIzNiwgMTQ5LCAxNDEsIDEsIDI0NSwgMCwgMTQxLCAxLCAyNDQsIDEyNSwgMTQxLCAxLCAyMzIsIDExNSwgCisgICAgMTQxLCAxLCAyNTEsIDE2OSwgMTQxLCAxLCAyNTEsIDY5LCAxNDEsIDEsIDIzNywgMTIzLCAxNDEsIDEsIDIzNywgMTAzLCAKKyAgICAxNDEsIDEsIDIzMSwgNzcsIDE0MSwgMSwgMjIxLCAyOSwgMTQxLCAxLCAyMjEsIDE5LCAxNDEsIDEsIDI0OSwgMTMyLCAxNDEsIAorICAgIDEsIDI0OSwgMTE2LCAxNDEsIDEsIDIzMSwgMjE3LCAxNDEsIDEsIDIyMiwgMTU1LCAxNDEsIDEsIDIyMiwgMzUsIDE0MSwgMSwgCisgICAgMjQ5LCAyMDcsIDE0MSwgMSwgMjQ5LCAzNiwgMTQxLCAxLCAyMDgsIDE0MSwgMSwgMTg3LCAxNDEsIDEsIDIyOSwgMTQxLCAKKyAgICAxNDEsIDEsIDI1MiwgMjM3LCAxNDEsIDEsIDI1MiwgOTQsIDE0MSwgMSwgMTk2LCAxNDEsIDEsIDE4NCwgMTQxLCAxLCAyMDMsIAorICAgIDE0MSwgMSwgMjI3LCA1MiwgMTQxLCAxLCAyMzUsIDE4OCwgMTQxLCAxLCAyMzUsIDE3LCAxNDEsIDEsIDIxOSwgMTg5LCAKKyAgICAxNDEsIDEsIDIyNSwgMjUsIDE0MSwgMSwgMjIzLCAyMTgsIDE0MSwgMSwgMjI2LCAxNzcsIDE0MSwgMSwgMTU1LCAxNDEsIDUsIAorICAgIDIzMSwgMTEyLCAxNDEsIDUsIDI1MywgMjE5LCAxNDEsIDI5LCA1LCAyNTUsIDU4LCAxNDEsIDI5LCA1LCA3MiwgMTQxLCAyOSwgCisgICAgNSwgMjM3LCAyNTUsIDE0MSwgMjksIDUsIDY4LCAxNDEsIDI5LCA1LCAyMjAsIDIzLCAxNDEsIDI5LCA1LCAxNjcsIDE1MiwgCisgICAgMTQxLCAyOSwgNSwgMTY3LCAyMjcsIDUzLCAxNDEsIDI5LCA1LCA3MywgMTQxLCAyOSwgNSwgMjQ2LCAyNTAsIDE0MSwgMjksIAorICAgIDUsIDI1NCwgMTk2LCAxNDEsIDI5LCA1LCA3NCwgMTQxLCAyOSwgNSwgMjMwLCAxMjcsIDE0MSwgMjksIDUsIDI1MywgMjMyLCAKKyAgICAxNDEsIDUsIDIxOSwgODIsIDE0MSwgMjM1LCA5NCwgNzgsIDE0MSwgMjU0LCAxOTcsIDIzNSwgOTQsIDc4LCAxNDEsIDEsIAorICAgIDI0NiwgOCwgMTQxLCAxLCAxNjcsIDIyNywgNTMsIDE0MSwgMSwgMTY3LCAyMzUsIDE4LCAxNDEsIDI5LCA1LCAxNjcsIDE1MywgCisgICAgMTQxLCAyOSwgNSwgMTY3LCAyMzUsIDE4LCAxNDEsIDIwLCAyMTcsIDg0LCAxNDEsIDIwLCAxMDcsIDE0MSwgMjAsIDEwMywgCisgICAgMTQxLCAyMCwgMTYwLCAxNDEsIDIwLCAxNTQsIDE0MSwgMjAsIDE3NCwgMTQxLCAyMCwgMTgyLCAxNDEsIDIwLCAxOTEsIAorICAgIDE0MSwgMjAsIDE4NSwgMTQxLCAyMCwgMTkwLCAxNDEsIDUsIDIzNywgOTIsIDE0MSwgNSwgMjIwLCA2MSwgMTIzLCA1LCAKKyAgICAyNTQsIDk1LCAxMjMsIDUsIDIxOSwgNzcsIDEyMywgMSwgNjAsIDEyMywgMSwgMjU1LCA1OCwgMTIzLCAxLCA3MiwgMTIzLCAKKyAgICAxLCAyMzcsIDI1NSwgMTIzLCAxLCA2OCwgMTIzLCAxLCAyMjAsIDIzLCAxMjMsIDEsIDE2NywgMTUyLCAxMjMsIDEsIDE2NywgCisgICAgMTUzLCAxMjMsIDEsIDczLCAxMjMsIDEsIDI0NiwgMjUwLCAxMjMsIDEsIDI1NCwgMTk2LCAxMjMsIDEsIDc0LCAxMjMsIDEsIAorICAgIDIzMCwgMTI3LCAxMjMsIDEsIDI1MywgMjMyLCAxMjMsIDEsIDE3NSwgMTIzLCAxLCAyMzYsIDE0OSwgMTIzLCAxLCAyNDUsIAorICAgIDAsIDEyMywgMSwgMjQ0LCAxMjUsIDEyMywgMSwgMjMyLCAxMTUsIDEyMywgMSwgMjUxLCAxNjksIDEyMywgMSwgMjUxLCA2OSwgCisgICAgMTIzLCAxLCAyMzcsIDEyMywgMTIzLCAxLCAyMzcsIDEwMywgMTIzLCAxLCAyMzEsIDc3LCAxMjMsIDEsIDIyMSwgMjksIAorICAgIDEyMywgMSwgMjIxLCAxOSwgMTIzLCAxLCAyNDksIDEzMiwgMTIzLCAxLCAyNDksIDExNiwgMTIzLCAxLCAyMzEsIDIxNywgCisgICAgMTIzLCAxLCAyMjIsIDE1NSwgMTIzLCAxLCAyMjIsIDM1LCAxMjMsIDEsIDI0OSwgMjA3LCAxMjMsIDEsIDI0OSwgMzYsIAorICAgIDEyMywgMSwgMjA4LCAxMjMsIDEsIDE4NywgMTIzLCAxLCAyMjksIDE0MSwgMTIzLCAxLCAyNTIsIDIzNywgMTIzLCAxLCAKKyAgICAyNTIsIDk0LCAxMjMsIDEsIDE5NiwgMTIzLCAxLCAxODQsIDEyMywgMSwgMjAzLCAxMjMsIDEsIDIyNywgNTIsIDEyMywgMSwgCisgICAgMjM1LCAxODgsIDEyMywgMSwgMjM1LCAxNywgMTIzLCAxLCAyMzUsIDE2LCAxMjMsIDEsIDIxOSwgMTg5LCAxMjMsIDEsIAorICAgIDIyNSwgMjUsIDEyMywgMSwgMjIzLCAyMTgsIDEyMywgMSwgMjI2LCAxNzcsIDEyMywgMSwgMTU1LCAxMjMsIDUsIDI1MywgCisgICAgMjE5LCAxMjMsIDI5LCA1LCAyNTUsIDU4LCAxMjMsIDI5LCA1LCA3MiwgMTIzLCAyOSwgNSwgMjM3LCAyNTUsIDEyMywgMjksIAorICAgIDUsIDY4LCAxMjMsIDI5LCA1LCAyMjAsIDIzLCAxMjMsIDI5LCA1LCAxNjcsIDE1MiwgMTIzLCAyOSwgNSwgMTY3LCAyMjcsIAorICAgIDUzLCAxMjMsIDI5LCA1LCA3MywgMTIzLCAyOSwgNSwgMjQ2LCAyNTAsIDEyMywgMjksIDUsIDI1NCwgMTk2LCAxMjMsIDI5LCAKKyAgICA1LCA3NCwgMTIzLCAyOSwgNSwgMjMwLCAxMjcsIDEyMywgMjksIDUsIDI1MywgMjMyLCAxMjMsIDUsIDIxOSwgODIsIDEyMywgCisgICAgMjUzLCAyMzMsIDIzNSwgOTQsIDc4LCAxMjMsIDEsIDE2NywgMjI3LCA1MywgMTIzLCAxLCAxNjcsIDIzNSwgMTgsIDEyMywgCisgICAgMjksIDUsIDE2NywgMTUzLCAxMjMsIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDEyMywgMjAsIDIxNywgODQsIDEyMywgMjAsIAorICAgIDEwNywgMTIzLCAyMCwgMTAzLCAxMjMsIDIwLCAxNjAsIDEyMywgMjAsIDE1NCwgMTIzLCAyMCwgMTc0LCAxMjMsIDIwLCAKKyAgICAxODIsIDEyMywgMjAsIDE5MSwgMTIzLCAyMCwgMTg1LCAxMjMsIDIwLCAxOTAsIDEyMywgNTQsIDIyMiwgNjUsIDEyMywgNTQsIAorICAgIDEzMSwgMjQyLCAxNjEsIDEyMywgNTQsIDEzMSwgMjIxLCAyMzEsIDEyMywgMjQ1LCAxMDgsIDEzMSwgMjI4LCA4OSwgMTIzLCAKKyAgICAyNDUsIDEwOCwgMTMxLCAyNDMsIDE5NCwgMTIzLCAyNDUsIDEwOCwgMTQ4LCAyMjgsIDg3LCAxMjMsIDI0OSwgMTQxLCA3OCwgCisgICAgMTIzLCAxLCAyNTEsIDIzLCAyMzEsIDIxOCwgMTIzLCAxLCAyNTEsIDIzLCAyMDcsIDEyMywgMSwgMjUxLCAyMywgMjI3LCAKKyAgICA1MywgMTIzLCAxLCAyNTEsIDIzLCAxNTMsIDEyMywgMSwgMjUxLCAyMywgMjM1LCAxOCwgMTIzLCAxLCAyNTEsIDIzLCAyMzcsIAorICAgIDE3LCAxNjIsIDUsIDI1NCwgOTQsIDE2MiwgNSwgMjE5LCA3NiwgMTYyLCAxLCAyNTMsIDIxMCwgMTYyLCAxLCAyNTUsIDEzLCAKKyAgICAxNjIsIDEsIDI1NCwgMjE1LCAxNjIsIDEsIDI1NCwgMjI5LCAxNjIsIDEsIDIzNywgMTMyLCAxNjIsIDEsIDIzNywgMjU0LCAKKyAgICAxNjIsIDEsIDIyMCwgMTUsIDE2MiwgMSwgMjIwLCAxNywgMTYyLCAxLCAyMzcsIDE1MywgMTYyLCAxLCAyMzcsIDE1NCwgCisgICAgMTYyLCAxLCAyMzcsIDI0MCwgMTYyLCAxLCAyMzcsIDI0MiwgMTYyLCAxLCAyNDYsIDgzLCAxNjIsIDEsIDI0NiwgMjQ2LCAKKyAgICAxNjIsIDEsIDI1NCwgMTg0LCAxNjIsIDEsIDIzMCwgNjIsIDE2MiwgMSwgMjMwLCAxMjIsIDE2MiwgMSwgMjUzLCAyMjIsIAorICAgIDE2MiwgMSwgMjU0LCAxNDksIDIzNiwgMTg5LCAxNjIsIDEsIDIzNCwgMTA1LCAyMzYsIDE4OSwgMTYyLCAxLCAyNTQsIDE0OSwgCisgICAgMjQ0LCAyMDcsIDE2MiwgMSwgMjM0LCAxMDUsIDI0NCwgMjA3LCAxNjIsIDEsIDIzNiwgMjI4LCAyMzIsIDIzMiwgMTYyLCAxLCAKKyAgICAyMjYsIDEzNSwgMjQ0LCAyMDcsIDE2MiwgMSwgMjU0LCAxNDksIDI1MSwgMTE3LCAxNjIsIDEsIDIzNCwgMTA1LCAyNTEsIAorICAgIDExNywgMTYyLCAxLCAyNTQsIDE0OSwgMjM3LCAxMTUsIDE2MiwgMSwgMjM0LCAxMDUsIDIzNywgMTE1LCAxNjIsIDEsIDIyMiwgCisgICAgMTQ5LCAyMzIsIDIzMiwgMTYyLCAxLCAyMjIsIDE0OSwgMjI2LCAxMzQsIDIzMiwgMjMzLCAxNjIsIDEsIDIyNiwgMTM1LCAKKyAgICAyMzcsIDExNSwgMTYyLCAxLCAyNTQsIDE0OSwgMjIxLCAyNywgMTYyLCAxLCAyMzQsIDEwNSwgMjIxLCAyNywgMTYyLCAxLCAKKyAgICAyNTQsIDE0OSwgMjQ5LCAxMjMsIDE2MiwgMSwgMjM0LCAxMDUsIDI0OSwgMTIzLCAxNjIsIDEsIDIzMywgNTYsIDIzMiwgCisgICAgMTk4LCAxNjIsIDEsIDIyNiwgMTM1LCAyNDksIDEyMywgMTYyLCAxLCAyNTQsIDE0OSwgMjIyLCA5NSwgMTYyLCAxLCAyMzQsIAorICAgIDEwNSwgMjIyLCA5NSwgMTYyLCAxLCAyNTQsIDE0OSwgMjQ5LCAxMzYsIDE2MiwgMSwgMjM0LCAxMDUsIDI0OSwgMTM2LCAKKyAgICAxNjIsIDEsIDI0OSwgMTY0LCAyMzIsIDE5OCwgMTYyLCAxLCAyMjYsIDEzNSwgMjQ5LCAxMzYsIDE2MiwgMSwgMjU0LCAxNDksIAorICAgIDIyOSwgMjA0LCAxNjIsIDEsIDIzNCwgMTA1LCAyMjksIDIwNCwgMTYyLCAxLCAyNTQsIDE0OSwgMjUyLCAxNzksIDE2MiwgMSwgCisgICAgMjM0LCAxMDUsIDI1MiwgMTc5LCAxNjIsIDEsIDIzNCwgNDQsIDE2MiwgMSwgMjU0LCAxMzYsIDI1MiwgMTc5LCAxNjIsIDEsIAorICAgIDIxOCwgMjksIDE2MiwgMSwgMjI3LCAyMjEsIDE2MiwgMSwgMjQ5LCAxNjQsIDIzNSwgMTMxLCAxNjIsIDEsIDIxOSwgMTY3LCAKKyAgICAxNjIsIDEsIDIyMiwgMTQ5LCAyMjYsIDExNywgMTYyLCAxLCAyMzMsIDU2LCAyMjYsIDExNywgMTYyLCAxLCAyNDksIDE2NCwgCisgICAgMjI2LCAxMTcsIDE2MiwgMSwgMjQzLCAxNjYsIDE2MiwgMSwgMjMzLCA1NiwgMjM1LCAxMzEsIDE2MiwgMSwgMjQ1LCAyMzMsIAorICAgIDE2MiwgNSwgMjU0LCAxNzQsIDE2MiwgMjksIDUsIDI1NCwgMjI0LCAxNjIsIDI5LCA1LCAyMzYsIDE1OCwgMjU0LCAyMzEsIAorICAgIDE2MiwgMjksIDUsIDI0OCwgMjQxLCAyNTQsIDIzMSwgMTYyLCAyOSwgNSwgMjM2LCAxNTgsIDIzNywgMTUwLCAxNjIsIDI5LCAKKyAgICA1LCAyNDgsIDI0MSwgMjM3LCAxNTAsIDE2MiwgMjksIDUsIDIzNiwgMTU4LCAyMzAsIDQyLCAxNjIsIDI5LCA1LCAyNDgsIAorICAgIDI0MSwgMjMwLCA0MiwgMTYyLCAyOSwgNSwgMjQ0LCAyNDUsIDE2MiwgMjksIDUsIDIzNiwgNDYsIDE2MiwgMjksIDUsIDI0OCwgCisgICAgMjQxLCAyMzYsIDQ2LCAxNjIsIDI5LCA1LCAyMzYsIDQ4LCAyNDksIDczLCAxNjIsIDI5LCA1LCAyMzYsIDQ3LCAyNDMsIAorICAgIDIxMiwgMjU0LCAyMjQsIDE2MiwgMjksIDUsIDIzNiwgNDcsIDI0MywgMjEyLCAyNDgsIDI0MSwgMjU0LCAyMjQsIDE2MiwgCisgICAgMjksIDUsIDIzNiwgNDcsIDI0MywgMjEyLCAyNDQsIDIwNiwgMTYyLCAyOSwgNSwgMjQ0LCAyMDYsIDE2MiwgMjksIDUsIAorICAgIDI0OCwgMjQxLCAyNDQsIDI0NSwgMTYyLCAyOSwgNSwgMjQ4LCAyNDEsIDI0NCwgMjA2LCAxNjIsIDIyOCwgMTk3LCAyMzUsIAorICAgIDI1NCwgMTQwLCAxMjYsIDIzNiwgNTgsIDIzNiwgMjQzLCAxNDAsIDEyNiwgMjM2LCAxMjYsIDIzNiwgMTQ1LCAxNDAsIDEyNiwgCisgICAgMjM2LCAxMjYsIDIzNiwgMTE5LCAxNDAsIDEyNiwgMjM2LCAxMjYsIDIzNiwgMTE2LCAxNDAsIDEyNiwgMjM2LCAxMjYsIAorICAgIDIzNiwgMTIzLCAxNDAsIDEyNiwgMjM2LCAxMjYsIDIyNywgMjQwLCAxNDAsIDEyNiwgMjMyLCA4NSwgMjMyLCA3NCwgMTQwLCAKKyAgICAxMjYsIDI1MSwgMTIsIDI1MSwgNjAsIDE0MCwgMTI2LCAyNTEsIDEyLCAyNTEsIDIwLCAxNDAsIDEyNiwgMjUxLCAxMiwgCisgICAgMjUxLCA1OSwgMTQwLCAxMjYsIDIyNCwgMjcsIDIyNCwgMjYsIDE0MCwgMTI2LCAyNTEsIDEyLCAyNTEsIDksIDE0MCwgMTI2LCAKKyAgICAyMTcsIDIzMiwgMjE3LCAyMzksIDE0MCwgMTI2LCAyNDgsIDE2OCwgMjUxLCA2NiwgMTQwLCAxMjYsIDE5OSwgMjI5LCAyMTMsIAorICAgIDE0MCwgMTI2LCAyMjEsIDI0MCwgMjIyLCAyNywgMTQwLCAxMjYsIDIyMSwgMjQwLCAyMzIsIDIxNSwgMTQwLCAxMjYsIDIyMSwgCisgICAgMjQwLCAyMjksIDExMSwgMTQwLCAxMjYsIDIzMSwgMjA1LCAyMzIsIDEzNCwgMTQwLCAxMjYsIDI0OCwgMTY4LCAyNDksIDc0LCAKKyAgICAxNDAsIDEyNiwgMTk5LCAyMjIsIDExNiwgMTQwLCAxMjYsIDIyMSwgMjQwLCAyMjEsIDIxOSwgMTQwLCAxMjYsIDIyMSwgCisgICAgMjQwLCAyMjIsIDMxLCAxNDAsIDEyNiwgMjIxLCAyNDAsIDIyMSwgMjM3LCAxNDAsIDEyNiwgMjMxLCAyMDUsIDIzMSwgMTQ0LCAKKyAgICAxNDAsIDEyNiwgMjUyLCA0MiwgMjUyLCAyMjAsIDE0MCwgMTI2LCAyMjksIDM4LCAyMjksIDU4LCAxNDAsIDEyNiwgMjI5LCAKKyAgICAxMTksIDIyOSwgMTEzLCAxNDAsIDEyNiwgMjQ1LCAxNDAsIDI0NiwgOCwgMTQwLCAxMjYsIDIyOSwgMTE5LCAyMjksIDEzNSwgCisgICAgMTQwLCAxMjYsIDI0NSwgMTQwLCAyNDUsIDI0NSwgMTQwLCAxMjYsIDIyOSwgMTE5LCAyMjYsIDE0MywgMTQwLCAxMjYsIAorICAgIDIzMywgMTM3LCAxOTYsIDE0MCwgMTI2LCAyMTcsIDIzMiwgMjE4LCA1NSwgMTQwLCAxMjYsIDIyNywgNzYsIDIyNywgMjEsIAorICAgIDE0MCwgMTI2LCAyMjcsIDIyLCAxNDAsIDEyNiwgMjM1LCAxMywgMjM1LCAzNiwgMTQwLCAxMjYsIDIzNCwgMjMxLCAxNDAsIAorICAgIDEyNiwgMjE4LCAxODgsIDIxOSwgMywgMTQwLCAxMjYsIDIyNCwgMjcsIDIyNiwgMTU1LCAxNDAsIDEyNiwgMjI0LCAyNywgCisgICAgMjI3LCAwLCAxNDAsIDEyNiwgMjI0LCAyNywgMjIzLCAxMDIsIDE0MCwgMTI2LCAyNDMsIDUsIDI0MywgOTUsIDE0MCwgMTI2LCAKKyAgICAyMzUsIDEzLCAyNTAsIDI1MiwgMTQwLCAxMjYsIDE0MiwgMjU0LCAxMjMsIDE0MCwgMTI2LCAyNDMsIDUsIDIzMSwgMjAwLCAKKyAgICAxNDAsIDEyNiwgMjMwLCAzMCwgMTQwLCAxMjYsIDIyNiwgMTMwLCA2MCwgMTQwLCAxMjYsIDIzNCwgMTAwLCAyNDMsIDE5MCwgCisgICAgMTQwLCAxMjYsIDIyNiwgMTMwLCAyNTUsIDU4LCAxNDAsIDEyNiwgMjI2LCAxMzAsIDI1NCwgMTQwLCAxNDAsIDEyNiwgMjI2LCAKKyAgICAxMzAsIDcyLCAxNDAsIDEyNiwgMjI2LCAxMzAsIDIzNywgMjU1LCAxNDAsIDEyNiwgMjI2LCAxMzAsIDIyMCwgMTEwLCAxNDAsIAorICAgIDEyNiwgMjI2LCAxMzAsIDIyMCwgMTA4LCAxNDAsIDEyNiwgMjI2LCAxMzAsIDY4LCAxNDAsIDEyNiwgMjI2LCAxMzAsIDIyMCwgCisgICAgMjMsIDE0MCwgMTI2LCAyMjksIDEyMSwgMTQwLCAyNTAsIDc4LCAxNiwgMjUyLCAyMjEsIDE0MCwgMTI2LCAyMjYsIDEzMCwgCisgICAgNzMsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjU0LCAyMzQsIDE0MCwgMTI2LCAyMjYsIDEzMCwgNzQsIDE0MCwgMTI2LCAyMjYsIAorICAgIDEzMCwgMjU0LCAxOTcsIDIzNCwgOTYsIDE0MCwgMTI2LCAyMjYsIDEzMCwgMjU0LCAxOTcsIDIzNCwgOTcsIDE0MCwgMTI2LCAKKyAgICAyMzUsIDE2NCwgMTQwLCAxMjYsIDIzNCwgOTMsIDE0MCwgMTI2LCAyMzQsIDk0LCAxNDAsIDEyNiwgMjM0LCAxMDAsIDI0NiwgCisgICAgMjIzLCAxNDAsIDEyNiwgMjM0LCAxMDAsIDIyMSwgMjM5LCAxNDAsIDEyNiwgMjM0LCAxMDAsIDIyMSwgOTMsIDE0MCwgMTI2LCAKKyAgICAyMzQsIDEwMCwgMjUxLCA1MCwgMTQwLCAxMjYsIDIyMiwgMjUsIDE0MCwgMTI2LCAyMzIsIDM2LCAxNDAsIDEyNiwgMjE4LCAKKyAgICA0OSwgMTQwLCAxMjYsIDI0NSwgMTM1LCAxNDAsIDIwLCAyMTcsIDg0LCAxNDAsIDIwLCAxMDcsIDE0MCwgMjAsIDEwMywgCisgICAgMTQwLCAyMCwgMTYwLCAxNDAsIDIwLCAxNTQsIDE0MCwgMjAsIDE3NCwgMTQwLCAyMCwgMTgyLCAxNDAsIDIwLCAxOTEsIAorICAgIDE0MCwgMjAsIDE4NSwgMTQwLCAyMCwgMTkwLCAxNDAsIDEyNiwgMjU0LCAxMjEsIDE0MCwgMTI2LCAyMzYsIDEyNCwgMjAyLCAKKyAgICAxLCAyMzYsIDU3LCAyMDIsIDEsIDIzNiwgMTI2LCAyMjMsIDY2LCAyMDIsIDEsIDIzNiwgMTI2LCAyMjIsIDEyMSwgMjAyLCAKKyAgICAxLCAyMzIsIDg0LCAyMDIsIDEsIDI1MCwgMTgyLCAyMDIsIDEsIDIyNCwgMjcsIDIyMiwgMTIxLCAyMDIsIDEsIDIzMSwgNTYsIAorICAgIDIwMiwgMSwgMjQ4LCAxNjcsIDIwMiwgMSwgMTAxLCAyMDIsIDEsIDIyMSwgMjQwLCAyMjMsIDY2LCAyMDIsIDEsIDIyMSwgCisgICAgMjQwLCAyMjIsIDEyMSwgMjAyLCAxLCAyMzEsIDIwNCwgMjAyLCAxLCAyNTIsIDQxLCAyMDIsIDEsIDIyOSwgMzcsIDIwMiwgCisgICAgMSwgMjI5LCAxMTksIDIyMywgNjYsIDIwMiwgMSwgMjQ1LCAxNDAsIDIyMiwgMTIxLCAyMDIsIDEsIDIyOSwgMTE5LCAyMjIsIAorICAgIDEyMSwgMjAyLCAxLCAyNDUsIDE0MCwgMjIzLCA2NiwgMjAyLCAxLCAyMzMsIDEzNiwgMjAyLCAxLCAyMTcsIDIzMSwgMjAyLCAKKyAgICAxLCAyMzUsIDEzLCAyMzUsIDM2LCAyMDIsIDEsIDIzNSwgMTMsIDIzNCwgMjQ2LCAyMDIsIDEsIDIxOCwgMTg3LCAyMDIsIDEsIAorICAgIDIyNCwgMjcsIDIyMywgNjYsIDIwMiwgMSwgMjQzLCA1LCAyMjMsIDY2LCAyMDIsIDEsIDc0LCAyMDIsIDEsIDI0MywgNSwgCisgICAgMjIyLCAxMjEsIDIwMiwgMjQ2LCAyMDgsIDIwMiwgMjksIDUsIDYwLCAyMDIsIDI5LCA1LCAyMzQsIDEwMCwgMjM2LCAyMzMsIAorICAgIDIwMiwgMjksIDUsIDI1NSwgNTgsIDIwMiwgMjksIDUsIDI1NCwgMTQwLCAyMDIsIDI5LCA1LCA3MiwgMjAyLCAyOSwgNSwgCisgICAgMjM3LCAyNTUsIDIwMiwgMjksIDUsIDIxOCwgOTAsIDIwMiwgMjksIDUsIDIxNywgMTY2LCAyMDIsIDI5LCA1LCA2OCwgMjAyLCAKKyAgICAyOSwgNSwgMjIwLCAyMywgMjAyLCAyOSwgNSwgMjM0LCAxMDAsIDIzNiwgNDQsIDIwMiwgMjI1LCA2MiwgNSwgMjM1LCAxMiwgCisgICAgMjAyLCAyMjUsIDYyLCA1LCAyMzEsIDU2LCAyMDIsIDI5LCA1LCA3MywgMjAyLCAyOSwgNSwgMjQ2LCAyMzcsIDIwMiwgMjksIAorICAgIDUsIDc0LCAyMDIsIDI5LCA1LCAyNTMsIDIxMiwgMjAyLCAyOSwgNSwgMjU0LCAxOTYsIDIwMiwgMjM2LCA1OCwgMjM1LCAKKyAgICAxODgsIDIwMiwgMTQ1LCAyMzQsIDEwMCwgMjQ2LCAyMjMsIDIwMiwgMTQ1LCAyMzQsIDEwMCwgMjIxLCAyMzksIDIwMiwgCisgICAgMTQ1LCAyMzQsIDEwMCwgMjIxLCAyMDUsIDIwMiwgMTQ1LCAyMzQsIDEwMCwgMjUxLCAxMjMsIDIwMiwgMjUxLCAxNTEsIDc4LCAKKyAgICAyMDIsIDIzMiwgNDMsIDIwMiwgMjAsIDIxNywgODQsIDIwMiwgMjAsIDEwNywgMjAyLCAyMCwgMTAzLCAyMDIsIDIwLCAxNjAsIAorICAgIDIwMiwgMjAsIDE1NCwgMjAyLCAyMCwgMTc0LCAyMDIsIDIwLCAxODIsIDIwMiwgMjAsIDE5MSwgMjAyLCAyMCwgMTg1LCAKKyAgICAyMDIsIDIwLCAxOTAsIDIwMiwgMjQzLCA1LCAyMzEsIDIwNCwgMjAyLCAyNDMsIDUsIDIzMywgMTM2LCA1OSwgNCwgMjMwLCAKKyAgICAxNDYsIDU5LCAxNjQsIDI0NCwgMTksIDIxNywgMjQzLCAyMzMsIDIxMywgMjIxLCA2MSwgNjAsIDU5LCAxNjQsIDI0NCwgMTksIAorICAgIDIxNywgMjQzLCAyMzMsIDIxMywgMjU1LCAxNDQsIDIyNywgODAsIDI1MiwgMTQ2LCAxOTYsIDU5LCAxNjQsIDI0NCwgMTksIAorICAgIDIxNywgMjQzLCAyMzMsIDIxMywgMjU1LCAxNDQsIDI0NCwgMTksIDIyMSwgNDUsIDE5NiwgNTksIDE2NCwgNjYsIDIxNywgCisgICAgMjQzLCAyMzMsIDIxMywgMjM0LCAyNywgMTk2LCA1OSwgMTY0LCAyNTAsIDE5NCwgMjE3LCAyNDMsIDIzMywgMjEzLCAyMjUsIAorICAgIDMxLCAxOTYsIDU5LCAxNjQsIDI1MSwgMTM1LCAyMTcsIDI0MywgMjMzLCAyMTMsIDIyOSwgMTEyLCAyMjUsIDE5LCAxOTYsIAorICAgIDU5LCAxNjQsIDIxNywgMjQzLCAyMzMsIDIxMywgMjIxLCA0NSwgMjI1LCAxOSwgMTk2LCA1OSwgMTY0LCAyMjYsIDExNSwgCisgICAgMjI1LCAxOCwgNTksIDE2NCwgMjUxLCAyNTEsIDIxNywgMjQzLCAyMzMsIDIxMiwgNTksIDE2NCwgMjUyLCA1NSwgMjI0LCAKKyAgICAxOTcsIDIxNywgMjQzLCAyMzMsIDIxMiwgNTksIDE2NCwgMjM3LCAxNzMsIDIyMSwgNDQsIDU5LCAxNjQsIDI0OSwgNjgsIAorICAgIDIyMSwgNDUsIDI1MSwgMjUwLCA1OSwgMTY0LCAyMjUsIDE4LCA1OSwgMTY0LCAyMzEsIDYwLCAyMjUsIDE4LCA1OSwgMTY0LCAKKyAgICAyMjEsIDQ1LCAyMjUsIDE4LCA1OSwgMTY0LCAyMzEsIDYwLCAyMjEsIDQ1LCAyMjUsIDE4LCA1OSwgMTY0LCAyMjcsIDk2LCAKKyAgICAyNTEsIDM5LCAyMjMsIDIyOSwgMjI1LCAxOCwgNTksIDE2NCwgMjI3LCAxNTQsIDI0NCwgNDQsIDIyNSwgMTgsIDU5LCAxNjQsIAorICAgIDI1MSwgMTM1LCAyNTUsIDE0OCwgMjI3LCAyNiwgMjM0LCAyNiwgMTcxLCAyNTEsIDE1NCwgNTksIDE2NCwgMjQ0LCAxOSwgCisgICAgMjIxLCA0NCwgNTksIDIzNSwgNSwgNSwgMjUxLCA2NywgMjI3LCAyNSwgNTksIDIzNSwgNSwgNSwgMjM1LCA3NywgMjI3LCAKKyAgICAyNSwgNTksIDI1MywgMjQ4LCA1LCAyMjUsIDI4LCAyNDQsIDE5NCwgMjU1LCAxNDksIDIyNywgMjUsIDU5LCAyNTMsIDI0OCwgCisgICAgNSwgMjU1LCAxNDYsIDE4NywgNTksIDI1MywgMjQ4LCA1LCAyMjYsIDk1LCAyMjEsIDQwLCA1OSwgNSwgMjI3LCAyMTgsIAorICAgIDI0OCwgMTc5LCAyNDQsIDE5MywgNTksIDUsIDIyNywgMjE4LCAyNDgsIDE3OSwgMjQ0LCA3MCwgNTksIDUsIDIyNywgMjE4LCAKKyAgICAyNDgsIDE3OSwgMjQ0LCAyMCwgNTksIDUsIDIyNywgMjE4LCAyMzIsIDIzMCwgMjQ0LCAxOTMsIDU5LCA1LCAyMjcsIDIxOCwgCisgICAgMjMyLCAyMzAsIDI0NCwgNzAsIDU5LCA1LCAyMjcsIDIxOCwgMjQ4LCAxNzksIDIyNywgMjE4LCAyMzIsIDIyOSwgNTksIDIwLCAKKyAgICAyMTcsIDg0LCA1OSwgMjAsIDEwNywgNTksIDIwLCAxMDMsIDU5LCAyMCwgMTYwLCA1OSwgMjAsIDE1NCwgNTksIDIwLCAxNzQsIAorICAgIDU5LCAyMCwgMTgyLCA1OSwgMjAsIDE5MSwgNTksIDIwLCAxODUsIDU5LCAyMCwgMTkwLCA1OSwgMjAsIDE0NCwgMTA3LCA1OSwgCisgICAgMjAsIDE0NCwgMTAzLCA1OSwgMjAsIDE0NCwgMTYwLCA1OSwgMjAsIDE0NCwgMTU0LCA1OSwgMjAsIDE0NCwgMTc0LCA1OSwgCisgICAgMjAsIDE0NCwgMTgyLCA1OSwgMjAsIDE0NCwgMTkxLCA1OSwgMjAsIDE0NCwgMTg1LCA1OSwgMjAsIDE0NCwgMTkwLCA1OSwgCisgICAgMjAsIDE0NCwgMjE3LCA4NCwgNTksIDE2NCwgMjUxLCAyNTMsIDIyNywgMjUsIDU5LCAxNjQsIDIzMiwgMTA5LCAyNTEsIAorICAgIDIwNCwgMjMxLCA2OCwgMjE3LCAyMywgNTksIDE2NCwgMjUxLCAxMzUsIDI1NSwgMTQ4LCAyMjcsIDI2LCAyNTEsIDIwNSwgCisgICAgMjMzLCAxNzIsIDI1MSwgMTU0LCA1OSwgMTY0LCAyMzIsIDEwOSwgMjUxLCAyMDQsIDIyNSwgMjksIDIyNywgMjUsIDU5LCAKKyAgICAxNjQsIDI1MSwgNDcsIDIzMywgMjEyLCA1OSwgMTY0LCAyMjEsIDU2LCAyNTUsIDE0NSwgNTksIDE2NCwgMjQ0LCA4LCAyMjcsIAorICAgIDI2LCAyNDMsIDIyOCwgNTksIDE2NCwgMjQ0LCA4LCAyMjcsIDI2LCAyNDMsIDIzNCwgNTksIDE2NCwgMjU0LCAxMjQsIDIzNiwgCisgICAgMTQwLCAyNDMsIDIyOCwgNTksIDE2NCwgMjU0LCAxMjQsIDIzNiwgMTQwLCAyNDMsIDIzNCwgNTksIDUsIDIxOCwgNDIsIAorICAgIDIyMSwgNDMsIDU5LCA1LCAyMzQsIDc1LCAyMjEsIDQzLCA1OSwgMSwgMTc1LCA1OSwgMSwgMjM2LCAxNDksIDU5LCAxLCAKKyAgICAyNDUsIDAsIDU5LCAxLCAyNDQsIDEyNSwgNTksIDEsIDIzMiwgMTE1LCA1OSwgMSwgMjUxLCAxNjksIDU5LCAxLCAyNTEsIAorICAgIDY5LCA1OSwgMSwgMjM3LCAxMjMsIDU5LCAxLCAyMzEsIDc3LCA1OSwgMSwgMjIxLCAyOSwgNTksIDEsIDIyMSwgMTksIDU5LCAKKyAgICAxLCAyNDksIDEzMiwgNTksIDEsIDI0OSwgMTE2LCA1OSwgMSwgMjMxLCAyMTcsIDU5LCAxLCAyMjIsIDE1NSwgNTksIDEsIAorICAgIDIyMiwgMzUsIDU5LCAxLCAyNDksIDIwNywgNTksIDEsIDI0OSwgMzYsIDU5LCAxLCAyMDgsIDU5LCAxLCAxODcsIDU5LCAxLCAKKyAgICAyMjksIDE0MSwgNTksIDEsIDI1MiwgMjM3LCA1OSwgMSwgMjUyLCA5NCwgNTksIDEsIDE5NiwgNTksIDEsIDIyMSwgNTUsIAorICAgIDU5LCAxLCAyMjEsIDQ3LCA1OSwgMSwgMjQ3LCA3NCwgNTksIDEsIDI0NywgNzAsIDU5LCAxLCAyMTksIDcsIDU5LCAxLCAKKyAgICAyMTcsIDgwLCA1OSwgMSwgMjE3LCAxMTQsIDU5LCAxLCAyNTUsIDE1MSwgNTksIDEsIDE4NCwgNTksIDEsIDIwMywgNTksIDEsIAorICAgIDIzNSwgMTg4LCA1OSwgMSwgMjI1LCAyNSwgNTksIDEsIDIyMywgMjE4LCA1OSwgMSwgMjI2LCAxNzcsIDU5LCAxLCAxNTUsIAorICAgIDU5LCAxLCA2MCwgNTksIDEsIDIzNiwgMTAsIDU5LCAxLCAyNDUsIDE2NywgMjAzLCA1OSwgMSwgMjM2LCA3NCwgNTksIDEsIAorICAgIDIyNywgNTIsIDU5LCAyOSwgNSwgMjU1LCA1OCwgNTksIDI5LCA1LCA3MiwgNTksIDI5LCA1LCAyMzcsIDI1NSwgNTksIDI5LCAKKyAgICA1LCA2OCwgNTksIDI5LCA1LCAyMjAsIDIzLCA1OSwgMjksIDUsIDE2NywgMTUyLCA1OSwgMjksIDUsIDE2NywgMjI3LCA1MywgCisgICAgNTksIDI5LCA1LCAxNjcsIDE1MywgNTksIDI5LCA1LCAxNjcsIDIzNSwgMTgsIDU5LCAyOSwgNSwgNzMsIDU5LCAyOSwgNSwgCisgICAgMjQ2LCAyNTAsIDU5LCAyOSwgNSwgNzQsIDU5LCAyOSwgNSwgMjMwLCAxMjcsIDU5LCA1LCAyMjcsIDgxLCAyMjMsIDEwNCwgCisgICAgMjMyLCAxMTYsIDIyNywgNzUsIDU5LCA1LCAyMjcsIDgwLCAyNTIsIDE0NSwgNTksIDI5LCA1LCAyMTAsIDcyLCA1OSwgMjksIAorICAgIDUsIDIxMCwgMjM3LCAyNTUsIDU5LCA1LCAyMzEsIDY4LCAyMTcsIDI0LCAyMzIsIDIzNiwgMjQ5LCAyMDcsIDU5LCA1LCAKKyAgICAyMjQsIDM3LCAyMzUsIDEyNCwgNTksIDE2NCwgMjQzLCAxOTYsIDU5LCAxNjQsIDIzMCwgMjEsIDU5LCA1LCAyMzUsIDEyNywgCisgICAgMjI3LCAyNSwgNTksIDUsIDIxOCwgNDYsIDIyNywgMjUsIDU5LCA1LCAyMzUsIDEyOCwgMjIxLCA1NiwgMjUxLCAxNTQsIDU5LCAKKyAgICA1LCAyMzQsIDI4LCAyNTEsIDE1NCwgNTksIDUsIDI0NCwgMjIsIDI1MSwgMTU1LCAyMjcsIDE1MiwgNTksIDUsIDI0NCwgMjIsIAorICAgIDIzNCwgMjAsIDIyNywgMTUyLCA1OSwgMjIzLCA5NywgMSwgMTc1LCA1OSwgMjIzLCA5NywgMSwgMjM2LCAxNDksIDU5LCAKKyAgICAyMjMsIDk3LCAxLCAyNDUsIDAsIDU5LCAyMjMsIDk3LCAxLCAyNDQsIDEyNSwgNTksIDIyMywgOTcsIDEsIDIzMiwgMTE1LCAKKyAgICA1OSwgMjIzLCA5NywgMSwgMjUxLCAxNjksIDU5LCAyMjMsIDk3LCAxLCAyNTEsIDY5LCA1OSwgMjIzLCA5NywgMSwgMjM3LCAKKyAgICAxMjMsIDU5LCAyMjMsIDk3LCAxLCAyMzEsIDc3LCA1OSwgMjIzLCA5NywgMSwgMjIxLCAyOSwgNTksIDIyMywgOTcsIDEsIAorICAgIDIyMSwgMTksIDU5LCAyMjMsIDk3LCAxLCAyNDksIDEzMiwgNTksIDIyMywgOTcsIDEsIDI0OSwgMTE2LCA1OSwgMjIzLCA5NywgCisgICAgMSwgMjMxLCAyMTcsIDU5LCAyMjMsIDk3LCAxLCAyMjIsIDE1NSwgNTksIDIyMywgOTcsIDEsIDIyMiwgMzUsIDU5LCAyMjMsIAorICAgIDk3LCAxLCAyNDksIDIwNywgNTksIDIyMywgOTcsIDEsIDI0OSwgMzYsIDU5LCAyMjMsIDk3LCAxLCAyMDgsIDU5LCAyMjMsIAorICAgIDk3LCAxLCAxODcsIDU5LCAyMjMsIDk3LCAxLCAyMjksIDE0MSwgNTksIDIyMywgOTcsIDEsIDI1MiwgMjM3LCA1OSwgMjIzLCAKKyAgICA5NywgMSwgMjUyLCA5NCwgNTksIDIyMywgOTcsIDEsIDE5NiwgNTksIDIyMywgOTcsIDEsIDIyMSwgNTUsIDU5LCAyMjMsIAorICAgIDk3LCAxLCAyMjEsIDQ3LCA1OSwgMjIzLCA5NywgMSwgMjQ3LCA3NCwgNTksIDIyMywgOTcsIDEsIDI0NywgNzAsIDU5LCAKKyAgICAyMjMsIDk3LCAxLCAyMTksIDcsIDU5LCAyMjMsIDk3LCAxLCAyMTcsIDgwLCA1OSwgMjIzLCA5NywgMSwgMjE3LCAxMTQsIAorICAgIDU5LCAyMjMsIDk3LCAxLCAyNTUsIDE1MSwgNTksIDIyMywgOTcsIDEsIDE4NCwgNTksIDIyMywgOTcsIDEsIDIwMywgNTksIAorICAgIDIyMywgOTcsIDEsIDIzNSwgMTg4LCA1OSwgMjIzLCA5NywgMSwgMjI1LCAyNSwgNTksIDIyMywgOTcsIDEsIDIyMywgMjE4LCAKKyAgICA1OSwgMjIzLCA5NywgMSwgMjI2LCAxNzcsIDU5LCAyMjMsIDk3LCAxLCAxNTUsIDU5LCAyMjMsIDk3LCAxLCA2MCwgNTksIAorICAgIDIyMywgOTcsIDEsIDIzNiwgMTAsIDU5LCAyMjMsIDk3LCAxLCAyNDUsIDE2NywgMjE5LCA3LCA1OSwgMjIzLCA5NywgMSwgCisgICAgMjQ1LCAxNjcsIDE4NCwgNTksIDIyMywgOTcsIDEsIDI0NSwgMTY3LCAyMDMsIDU5LCAyMzYsIDgsIDIyNywgMjMsIDIzNiwgCisgICAgMTQ5LCA1OSwgMjM2LCA4LCAyMjcsIDIzLCAyMzYsIDE1MCwgMjUxLCAyMDUsIDIzMywgMTcyLCAyNTEsIDE1NCwgNTksIAorICAgIDI1MSwgMTQ0LCA1LCAxMDYsIDI1MiwgMTQwLCA1OSwgMjUxLCAxNDQsIDUsIDE3MCwgMjUyLCAxNDAsIDU5LCAyNTEsIDE0NCwgCisgICAgNSwgMjUxLCAxNDUsIDIyMiwgODYsIDU5LCAyNTEsIDE0NCwgNSwgMjI2LCAxMTQsIDI1NSwgMTUwLCA1OSwgMTYsIDI0NywgCisgICAgMTIxLCAyNTEsIDI0OCwgNTksIDE2LCAyMjcsIDIxNywgMjI3LCA4MiwgNTksIDE2LCAyMzAsIDM1LCAyNDQsIDE5MiwgNTksIAorICAgIDE2LCAyMjcsIDIxNywgMjI3LCA4MywgMjI3LCAxNTQsIDI0NCwgNDMsIDU5LCAxNiwgMjI5LCAxMTIsIDE4NywgNTksIDE2LCAKKyAgICAyMzEsIDE5MCwgMjUxLCAyNDgsIDU5LCAxNiwgMjMxLCAxOTAsIDI1MSwgMjQ5LCAyMzEsIDYwLCAyNTUsIDE0NywgNTksIAorICAgIDE2LCAyMzEsIDE5MCwgMjUxLCAyNDksIDI0NCwgMjEsIDI1NSwgMTQ3LCA1OSwgMTYsIDIzMSwgMTkwLCAyNTEsIDI0OSwgCisgICAgMjUxLCAyMDUsIDI1NSwgMTQ3LCA1OSwgNSwgMjI3LCAyMTgsIDIzMiwgMjMwLCAyMjcsIDIxOCwgMjQ4LCAxNzgsIDU5LCA1LCAKKyAgICAyMjcsIDIxOCwgMjMyLCAyMzAsIDI0NCwgMjAsIDU5LCAxNjQsIDI1MSwgMjUyLCAyMjQsIDE5NywgMjQ0LCAxMDQsIDIzMywgCisgICAgMjEzLCAyMjcsIDE1MywgNTksIDE2NCwgMjMzLCAxMzgsIDIxNywgMjQzLCAyNDQsIDEwNCwgMjMzLCAyMTMsIDIyNywgMTUzLCAKKyAgICA1OSwgMTY0LCAyMzEsIDYwLCAyMjEsIDQ0LCA1OSwgMTY0LCA2NiwgMjUyLCAxMiwgMjI3LCA3NywgMjE3LCAyNDMsIDIzMywgCisgICAgMjEzLCAyMzQsIDI3LCAxOTYsIDU5LCAxNjQsIDI1MCwgMTk0LCAyNTIsIDEyLCAyMjcsIDc3LCAyMTcsIDI0MywgMjMzLCAKKyAgICAyMTMsIDIyNSwgMzEsIDE5NiwgMjI3LCAxMDgsIDIyMywgMzgsIDU1LCAyMzUsIDExNCwgMjIzLCAzOCwgNTUsIDIyNywgCisgICAgMTA4LCAyMjMsIDM4LCA1LCAyLCAyNDgsIDE0MywgMjM1LCAxMTQsIDIyMywgMzgsIDUsIDIsIDI0OCwgMTQzLCA2MywgMSwgCisgICAgMTc1LCA2MywgMSwgMjM2LCAxNDksIDYzLCAxLCAyNDUsIDAsIDYzLCAxLCAyNDQsIDEyNSwgNjMsIDEsIDIzMiwgMTE1LCAKKyAgICA2MywgMSwgMjUxLCAxNjksIDYzLCAxLCAyNTEsIDY5LCA2MywgMSwgMjM3LCAxMjMsIDYzLCAxLCAyMzcsIDEwMywgNjMsIDEsIAorICAgIDIzMSwgNzcsIDYzLCAxLCAyMzEsIDIwNiwgNjMsIDEsIDIyMSwgMjksIDYzLCAxLCAyMjEsIDE5LCA2MywgMSwgMjQ5LCAKKyAgICAxMzIsIDYzLCAxLCAyNDksIDExNiwgNjMsIDEsIDIzMSwgMjE3LCA2MywgMSwgMjIyLCAxNTUsIDYzLCAxLCAyMjIsIDM1LCAKKyAgICA2MywgMSwgMjQ5LCAyMDcsIDYzLCAxLCAyNDksIDM2LCA2MywgMSwgMjA4LCA2MywgMSwgMTg3LCA2MywgMSwgMjI5LCAxNDEsIAorICAgIDYzLCAxLCAyNTIsIDIzNywgNjMsIDEsIDI1MiwgOTQsIDYzLCAxLCAxOTYsIDYzLCAxLCAxODQsIDYzLCAxLCAyMDMsIDYzLCAKKyAgICAxLCAyMzUsIDE4OCwgNjMsIDEsIDIxOSwgNywgNjMsIDEsIDIyNiwgMTc3LCA2MywgMSwgMTU1LCA2MywgMSwgMjM1LCAxNywgCisgICAgNjMsIDEsIDYwLCA2MywgMSwgMjI1LCAxMCwgNjAsIDYzLCAxLCA3MiwgNjMsIDEsIDIzNywgMjU1LCA2MywgMSwgNjgsIDYzLCAKKyAgICAxLCAyMjAsIDIzLCA2MywgMSwgNzMsIDYzLCAxLCAyMzMsIDEyOCwgNzMsIDYzLCAxLCA3NCwgNjMsIDEsIDI1MywgMjMyLCAKKyAgICA2MywgMjksIDUsIDIyMiwgMTIzLCAyNTUsIDU4LCA2MywgMjksIDUsIDI1NSwgNTgsIDYzLCAyOSwgNSwgNzIsIDYzLCAyOSwgCisgICAgNSwgMjM3LCAyNTUsIDYzLCAyOSwgNSwgNjgsIDYzLCAyOSwgNSwgMjIwLCAyMywgNjMsIDI5LCA1LCA3MywgNjMsIDI5LCA1LCAKKyAgICAyNTQsIDE5NiwgNjMsIDI5LCA1LCAyMzMsIDEyOCwgMjM3LCAyNTUsIDYzLCAyOSwgNSwgMjMzLCAxMjgsIDc0LCA2MywgMjksIAorICAgIDUsIDE3OCwgNTAsIDYzLCA1LCAyNTQsIDk1LCA2MywgNSwgNjEsIDU2LCA2MywgNSwgMjE5LCA3NywgNjMsIDUsIDIxOSwgCisgICAgODIsIDYzLCA1LCAyNTQsIDExLCA2MywgMjUwLCAxNDcsIDUsIDEyOCwgMTg0LCA2MywgMjUwLCAxNDcsIDUsIDEyOCwgMjAzLCAKKyAgICA2MywgMjUwLCAxNDcsIDUsIDEyOCwgMjE5LCA3LCA2MywgMjUwLCAxNDcsIDUsIDEyOCwgMTU1LCA2MywgMSwgMjQ0LCAzMiwgCisgICAgMjI2LCAxNzcsIDYzLCAyMCwgMjE3LCA4NCwgNjMsIDIwLCAxMDcsIDYzLCAyMCwgMTAzLCA2MywgMjAsIDE2MCwgNjMsIDIwLCAKKyAgICAxNTQsIDYzLCAyMCwgMTc0LCA2MywgMjAsIDE4MiwgNjMsIDIwLCAxOTEsIDYzLCAyMCwgMTg1LCA2MywgMjAsIDE5MCwgNjMsIAorICAgIDUsIDIzNSwgMjUsIDIyNiwgODYsIDYzLCA1LCAyMjYsIDg2LCA2MywgMTYsIDIzNSwgOSwgNjMsIDE2LCAyNTAsIDE2MywgCisgICAgNjMsIDE2LCAyNTQsIDIxMywgNjMsIDE2LCAyNDQsIDE3OCwgNjMsIDEsIDIyNSwgMjUsIDYzLCAxLCAyMjMsIDIxOCwgNjMsIAorICAgIDEsIDE2NywgMTUyLCA2MywgMSwgMTY3LCAyMjcsIDUzLCA2MywgMSwgMTY3LCAxNTMsIDYzLCAxLCAxNjcsIDIzNSwgMTgsIAorICAgIDYzLCAyOSwgNSwgMTY3LCAxNTIsIDYzLCAyOSwgNSwgMTY3LCAyMjcsIDUzLCA2MywgMjksIDUsIDE2NywgMTUzLCA2MywgCisgICAgMjksIDUsIDE2NywgMjM1LCAxOCwgNjMsIDEsIDIzMywgMTI4LCAyMzIsIDExNSwgNjMsIDEsIDIzMywgMTI4LCAyMzcsIAorICAgIDEwMywgNjMsIDEsIDIzMywgMTI4LCAyNTIsIDE3OCwgNjMsIDEsIDIzMywgMTI4LCAyNTIsIDE3NCwgNjMsIDI1MCwgMTQ3LCAKKyAgICA1LCAyMzMsIDEyOCwgMTI4LCAyMDgsIDYzLCAyNTAsIDE0NywgNSwgMjMzLCAxMjgsIDEyOCwgMTk2LCA2MywgMjUwLCAxNDcsIAorICAgIDUsIDIzMywgMTI4LCAxMjgsIDIzNSwgMTg4LCA2MywgMSwgMjI1LCAzMCwgMjM2LCAyMTMsIDIyNSwgMjUsIDYzLCAyOSwgNSwgCisgICAgMjI1LCAzMCwgMjM2LCAyMTMsIDI0NiwgMTE1LCA2MywgMTQ1LCAxNjQsIDIyNSwgMzAsIDIzNiwgMjEzLCAyNDMsIDE3MCwgCisgICAgNjMsIDE0NSwgMTY0LCAyMjUsIDMwLCAyMzYsIDIxMywgMjM2LCAxODUsIDIyOSwgMTE4LCA2MywgMSwgMjE4LCAyMTUsIAorICAgIDIyOCwgMTc1LCAyMzYsIDIxMywgMjIyLCAzNSwgNjMsIDEsIDIxOCwgMjE1LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDIyOCwgCisgICAgMTgxLCA2MywgMjksIDUsIDIxOCwgMjE1LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDI0NiwgMTE1LCA2MywgMjksIDUsIDIxOCwgCisgICAgMjE1LCAyMjgsIDE3NSwgMjM2LCAyMTMsIDIyMCwgMTEwLCA2MywgNSwgMjE4LCAyMTUsIDIyOCwgMTc1LCAyMzYsIDIxMywgCisgICAgMjIxLCAxMzEsIDYzLCA1LCAyMTgsIDIxNSwgMjI4LCAxNzUsIDIzNiwgMjEzLCAyMjEsIDEzMCwgNjMsIDUsIDIxOCwgMjE1LCAKKyAgICAyMjgsIDE3NSwgMjM2LCAyMTMsIDIyMSwgMTI5LCA2MywgNSwgMjE4LCAyMTUsIDIyOCwgMTc1LCAyMzYsIDIxMywgMjIxLCAKKyAgICAxMjgsIDYzLCA1LCAyMTgsIDIxNSwgMjI4LCAxNzUsIDIzNiwgMjEzLCAyMjEsIDEyNywgNjMsIDEsIDI0NywgNCwgMjI4LCAKKyAgICAxNzUsIDIzNiwgMjEzLCAyMzEsIDIxNywgNjMsIDEsIDI0NywgNCwgMjI4LCAxNzUsIDIzNiwgMjEzLCAyMTcsIDE3MywgNjMsIAorICAgIDEsIDI0NywgNCwgMjI4LCAxNzUsIDIzNiwgMjEzLCAyNDQsIDEwNiwgNjMsIDI5LCA1LCAyNDQsIDE4OCwgMjM2LCAyMTMsIAorICAgIDcyLCA2MywgMjksIDUsIDIzNiwgMTkwLCAyMzAsIDE2NywgNjMsIDI5LCA1LCAyMzYsIDE5MCwgNjgsIDYzLCAyOSwgNSwgCisgICAgMjM2LCAxOTAsIDI0NiwgMjUwLCA2MywgMSwgMjI1LCAxMCwgMTc1LCA2MywgMSwgMjI1LCAxMCwgMjM2LCAxNDksIDYzLCAxLCAKKyAgICAyMjUsIDEwLCAyNDUsIDAsIDYzLCAxLCAyMjUsIDEwLCAyNTEsIDE2OSwgNjMsIDEsIDIyNSwgMTAsIDIxNywgMTE0LCA2MywgCisgICAgMSwgMjI1LCAxMCwgMjMxLCA3NywgNjMsIDEsIDIyNSwgMTAsIDI0OSwgMjA3LCA2MywgMSwgMjI1LCAxMCwgMjA4LCA2MywgCisgICAgMSwgMjI1LCAxMCwgMjI5LCAxNDEsIDYzLCAxLCAyMjUsIDEwLCAyNDYsIDgsIDYzLCAxLCAyMjUsIDEwLCAyNTIsIDIzNywgCisgICAgNjMsIDEsIDIyNSwgMTAsIDIyMiwgMzUsIDYzLCAxLCAyMjUsIDEwLCAxNTUsIDYzLCAyNTAsIDE0NywgNSwgMjI1LCAxMCwgCisgICAgMTI4LCAyMTksIDcsIDYzLCAyOSwgNSwgMjI1LCAxMCwgMjU1LCA1OCwgNjMsIDI5LCA1LCAyMjUsIDEwLCA3MywgNjMsIDI5LCAKKyAgICA1LCAyMjUsIDEwLCAxNzgsIDUwLCA2MywgMjksIDUsIDIyNSwgMTAsIDM5LCAyMTgsIDkwLCA2MywgNSwgMjI1LCAxMCwgCisgICAgMjIxLCAxMzAsIDYzLCA1LCAyMjUsIDEwLCAyMjEsIDEyOSwgNjMsIDUsIDIyNSwgMTAsIDIyMSwgMTI3LCA2MywgNSwgMjI1LCAKKyAgICAxMCwgMjIxLCAxMjYsIDYzLCA1LCAyMjUsIDEwLCAyNTAsIDExNSwgMjIxLCAxMzAsIDYzLCA1LCAyMjUsIDEwLCAyNTAsIAorICAgIDExNSwgMjIxLCAxMjksIDYzLCA1LCAyMjUsIDEwLCAyNTAsIDExNSwgMjQ2LCAyMDAsIDIyMSwgMTMyLCA2MywgMSwgMjI3LCAKKyAgICAxMiwgMjMwLCAyNiwgMjQ2LCA4LCA2MywgNSwgMjI3LCAxMiwgMjMwLCAyNiwgMjIxLCAxMjcsIDYzLCAyMjUsIDEwLCAyMCwgCisgICAgMjE3LCA4NCwgNjMsIDIyNSwgMTAsIDIwLCAxMDcsIDYzLCAyMjUsIDEwLCAyMCwgMTAzLCA2MywgMjI1LCAxMCwgMjAsIAorICAgIDE2MCwgNjMsIDIyNSwgMTAsIDIwLCAxNTQsIDYzLCAyMjUsIDEwLCAyMCwgMTc0LCA2MywgMjI1LCAxMCwgMjAsIDE4MiwgCisgICAgNjMsIDIyNSwgMTAsIDIwLCAxOTEsIDYzLCAyMjUsIDEwLCAyMCwgMTg1LCA2MywgMjI1LCAxMCwgMjAsIDE5MCwgNjMsIDUsIAorICAgIDIzNiwgMTQzLCAyMjEsIDEzMSwgNjMsIDUsIDIzNiwgMTQzLCAyMjEsIDEyOSwgNjMsIDI5LCA1LCAyNTQsIDE4NiwgNjAsIAorICAgIDYzLCAyOSwgNSwgMjU0LCAxODYsIDI1NCwgMTk2LCA2MywgMTYsIDIyNSwgMTAsIDEwNywgNjMsIDE2LCAyMjUsIDEwLCAKKyAgICAyNDYsIDk0LCA5NSwgNiwgMSwgMjU0LCAxMzEsIDk1LCA2LCAxLCAyNTIsIDIwOSwgOTUsIDYsIDEsIDI0NCwgMjMwLCA5NSwgCisgICAgNiwgMSwgMjQ4LCAxNTMsIDk1LCA2LCAxLCAyNDYsIDE5NywgOTUsIDYsIDEsIDIxOSwgODUsIDk1LCA2LCAxLCAyMTcsIDg3LCAKKyAgICA5NSwgNiwgMSwgMjIyLCAxMTksIDk1LCA2LCAxLCAyMzcsIDIyMywgOTUsIDYsIDEsIDIzNiwgMjMzLCA5NSwgNiwgMSwgCisgICAgMjM1LCAxNDMsIDk1LCA2LCAxLCAyMzQsIDg2LCA5NSwgNiwgMSwgMjMyLCAyMTEsIDk1LCA2LCAxLCAyMzAsIDEzOCwgOTUsIAorICAgIDYsIDEsIDIyOSwgMjQzLCA5NSwgNiwgMSwgMjE3LCA3NiwgOTUsIDYsIDEsIDIyNywgMjQ5LCA5NSwgNiwgMSwgMjI2LCAKKyAgICAxNDAsIDk1LCA2LCAxLCAyMjIsIDExMiwgOTUsIDYsIDEsIDIyMCwgODcsIDk1LCA2LCAxLCAyMjksIDEzNCwgOTUsIDYsIDEsIAorICAgIDIzNiwgMTM4LCA5NSwgNiwgMSwgMjQ0LCAxMTksIDk1LCA2LCAxLCAyMjgsIDE0MCwgOTUsIDYsIDEsIDIyNCwgMjA5LCA5NSwgCisgICAgNiwgMSwgMjUxLCAyMiwgOTUsIDYsIDEsIDI1MSwgMTU0LCA5NSwgNiwgMSwgMjM3LCA5MSwgOTUsIDYsIDEsIDI1MCwgMjI0LCAKKyAgICA5NSwgNiwgMSwgMjUxLCA1NiwgOTUsIDYsIDEsIDIxOCwgMTM2LCA5NSwgNiwgMSwgMjM3LCAxMDEsIDk1LCA2LCAxLCAyNDMsIAorICAgIDIwOCwgOTUsIDYsIDEsIDI0MywgMTYyLCA5NSwgNiwgMSwgMjQzLCAxMDgsIDk1LCA2LCAxLCAyMTgsIDIyNywgOTUsIDYsIAorICAgIDEsIDI0MywgMTgyLCA5NSwgNiwgMSwgMjQzLCAyLCA5NSwgMSwgMjU0LCAxMzEsIDk1LCAxLCAyNTIsIDIwOSwgOTUsIDEsIAorICAgIDI0NCwgMjMwLCA5NSwgMSwgMjQ4LCAxNTMsIDk1LCAxLCAyNDYsIDE5NywgOTUsIDEsIDIxOSwgODUsIDk1LCAxLCAyMTcsIAorICAgIDg3LCA5NSwgMSwgMjIyLCAxMTksIDk1LCAxLCAyMzcsIDIyMywgOTUsIDEsIDIzNiwgMjMzLCA5NSwgMSwgMjM1LCAxNDMsIAorICAgIDk1LCAxLCAyMzQsIDg2LCA5NSwgMSwgMjMyLCAyMTEsIDk1LCAxLCAyMzAsIDEzOCwgOTUsIDEsIDIyOSwgMjQzLCA5NSwgMSwgCisgICAgMjE3LCA3NiwgOTUsIDEsIDIyNywgMjQ5LCA5NSwgMSwgMjI2LCAxNDAsIDk1LCAxLCAyMjIsIDExMiwgOTUsIDEsIDIyMCwgCisgICAgODcsIDk1LCAxLCAyMjksIDEzNCwgOTUsIDEsIDIzNiwgMTM4LCA5NSwgMSwgMjQ0LCAxMTksIDk1LCAxLCAyMjgsIDE0MCwgCisgICAgOTUsIDEsIDIyNCwgMjA5LCA5NSwgMSwgMjUxLCAyMiwgOTUsIDEsIDI1MSwgMTU0LCA5NSwgMSwgMjM3LCA5MSwgOTUsIDEsIAorICAgIDI1MCwgMjI0LCA5NSwgMSwgMjUxLCA1NiwgOTUsIDEsIDIxOCwgMTM2LCA5NSwgMSwgMjM3LCAxMDEsIDk1LCAxLCAyNDMsIAorICAgIDIwOCwgOTUsIDEsIDI0MywgMTYyLCA5NSwgMSwgMjQzLCAxMDgsIDk1LCAxLCAyMTgsIDIyNywgOTUsIDEsIDI0MywgMTgyLCAKKyAgICA5NSwgMSwgMjQzLCAyLCA5NSwgMSwgMjQ1LCAyMDMsIDk1LCAxLCAyMTcsIDIzMywgOTUsIDEsIDI0NiwgMjEwLCA5NSwgMSwgCisgICAgMjE1LCAyNDQsIDIzMCwgOTUsIDEsIDI1NCwgMTkxLCA5NSwgMjI5LCAyNDEsIDIyNSwgNTQsIDU4LCAxLCA5NSwgMjMyLCAKKyAgICAyMTEsIDIyLCA5MSwgMjM2LCA4NiwgMjIsIDkxLCAyMjMsIDIxMSwgMjIsIDkxLCAyMzIsIDU1LCAyMiwgOTEsIDIyMSwgCisgICAgMTkyLCAyMiwgOTEsIDIyMywgMjAwLCAyMiwgOTEsIDIyNywgMTQwLCAyMiwgOTEsIDIzMywgMTg3LCAyMiwgOTEsIDIyOSwgCisgICAgOTksIDIyLCA5MSwgMjIzLCAyMDgsIDIyLCA5MSwgMjI0LCAxMDQsIDIyLCA5MSwgMjIzLCAyMDUsIDIyLCA5MSwgMjM4LCAKKyAgICAyMiwgMjIsIDkxLCAyNTAsIDIzMCwgMjIsIDkxLCAyMjMsIDIxNSwgMjIsIDkxLCAyNTEsIDI5LCAyMiwgOTEsIDIzNiwgCisgICAgMTI4LCAyMiwgOTEsIDIyMiwgMCwgMjIsIDkxLCAyMjksIDEyNywgMjIsIDkxLCAyNDMsIDEwNiwgMjIsIDkxLCAyMzIsIDUxLCAKKyAgICAyMiwgOTEsIDIyMywgMjA5LCAyMiwgOTEsIDIzMiwgNDUsIDIyLCA5MSwgMjMyLCA0OSwgMjIsIDkxLCAyMjEsIDE4OSwgMjIsIAorICAgIDkxLCAyMjcsIDEyOCwgMjIsIDkxLCAyMjMsIDIwNywgMjIsIDkxLCAyMjcsIDEzOCwgMjIsIDkxLCAyMzYsIDIxNywgMjIsIAorICAgIDkxLCAyMzMsIDE4MCwgMjIsIDkxLCAyMzYsIDIyMCwgMjIsIDkxLCAyMjksIDk0LCAyMiwgOTEsIDIyOSwgOTIsIDIyLCA5MSwgCisgICAgMjI5LCA4MCwgMjIsIDkxLCAyMjksIDg4LCAyMiwgOTEsIDIyOSwgODYsIDIyLCA5MSwgMjI5LCA4MywgMjIsIDkxLCAyMjksIAorICAgIDg1LCAyMiwgOTEsIDIyOSwgODIsIDIyLCA5MSwgMjI5LCA4NywgMjIsIDkxLCAyMjksIDk3LCAyMiwgOTEsIDIyOSwgOTgsIAorICAgIDIyLCA5MSwgMjI5LCA4MSwgMjIsIDkxLCAyMjksIDkxLCAyMiwgOTEsIDIzNiwgMjE4LCAyMiwgOTEsIDIzNiwgMjE2LCAyMiwgCisgICAgOTEsIDIyNCwgOTcsIDIyLCA5MSwgMjI0LCA5NSwgMjIsIDkxLCAyMjQsIDg3LCAyMiwgOTEsIDIyNCwgOTAsIDIyLCA5MSwgCisgICAgMjI0LCA5NiwgMjIsIDkxLCAyMjQsIDkyLCAyMiwgOTEsIDIyNCwgOTEsIDIyLCA5MSwgMjI0LCA4OSwgMjIsIDkxLCAyMjQsIAorICAgIDEwMCwgMjIsIDkxLCAyMjQsIDEwMiwgMjIsIDkxLCAyMjQsIDEwMywgMjIsIDkxLCAyMjQsIDk4LCAyMiwgOTEsIDIyNCwgCisgICAgODgsIDIyLCA5MSwgMjI0LCA5MywgMjIsIDkxLCAyMjQsIDEwMSwgMjIsIDkxLCAyNTEsIDE1LCAyMiwgOTEsIDI1MSwgMTMsIAorICAgIDIyLCA5MSwgMjUxLCA3OCwgMjIsIDkxLCAyNTEsIDc2LCAyMiwgOTEsIDIzMCwgMSwgMjIsIDkxLCAyMzgsIDE3LCAyMiwgCisgICAgOTEsIDIzOCwgOCwgMjIsIDkxLCAyMzgsIDE2LCAyMiwgOTEsIDIzOCwgMTMsIDIyLCA5MSwgMjM4LCAxMSwgMjIsIDkxLCAKKyAgICAyMzgsIDE1LCAyMiwgOTEsIDIyMywgMjEyLCAyMiwgOTEsIDIzOCwgMjAsIDIyLCA5MSwgMjM4LCAyMSwgMjIsIDkxLCAyMzgsIAorICAgIDksIDIyLCA5MSwgMjM4LCAxNCwgMjIsIDkxLCAyMTgsIDYsIDIyLCA5MSwgMjUwLCAyMjksIDIyLCA5MSwgMjUxLCAxNiwgCisgICAgMjIsIDkxLCAyNTEsIDE0LCAyMiwgOTEsIDI1MSwgNzksIDIyLCA5MSwgMjUxLCA3NywgMjIsIDkxLCAyNTEsIDI3LCAyMiwgCisgICAgOTEsIDI1MSwgMjgsIDIyLCA5MSwgMjUxLCAxNywgMjIsIDkxLCAyNTEsIDgwLCAyMiwgOTEsIDIyOSwgMTI1LCAyMiwgOTEsIAorICAgIDIzNiwgMjE5LCAyMiwgOTEsIDIyMywgMjEzLCAyMiwgOTEsIDIxOCwgMTIsIDIyLCA5MSwgMjM2LCA3NywgMjIsIDkxLCAKKyAgICAyMzIsIDQ3LCAyMiwgOTEsIDIzMiwgNTMsIDIyLCA5MSwgMjMyLCA1MiwgMjIsIDkxLCAyMjEsIDE4NiwgMjIsIDkxLCAyNDUsIAorICAgIDE4NSwgMjIsIDEyMiwgMjQ1LCAxODUsIDIyLCAxMjIsIDYwLCAyMiwgMTIyLCAyNTQsIDIzNCwgMjIsIDEyMiwgMTg0LCAyMiwgCisgICAgMTIyLCAyMTgsIDY1LCAyMiwgMTIyLCAyNDYsIDE2OCwgMjIsIDEyMiwgNzMsIDIyLCAxMjIsIDIxOCwgMTYsIDIyLCAxMjIsIAorICAgIDIxOCwgMjUsIDIyLCAxMjIsIDc0LCAyMiwgMTIyLCAyMTksIDcsIDIyLCAxMjIsIDIxOSwgNCwgMjIsIDEyMiwgMjMwLCAKKyAgICAxNjcsIDIyLCAxMjIsIDIxNywgMjMxLCAyMiwgMTIyLCA2OCwgMjIsIDEyMiwgMjE4LCAyMTksIDIyLCAxMjIsIDIxOCwgCisgICAgMjI3LCAyMiwgMTIyLCAyMTgsIDIwNCwgMjIsIDEyMiwgMjE3LCAyMDAsIDIyLCAxMjIsIDI0NiwgMTE1LCAyMiwgMTIyLCAKKyAgICAyMTcsIDI1MCwgMjIsIDEyMiwgNzIsIDIyLCAxMjIsIDI1NSwgMTQyLCAyMiwgMTIyLCAyNTUsIDE0MSwgMjIsIDEyMiwgCisgICAgMjE4LCA3OSwgMjIsIDEyMiwgMjE4LCA3NywgMjIsIDEyMiwgMjQ2LCAxNjYsIDIyLCAxMjIsIDI0NiwgMTY1LCAyMiwgMTIyLCAKKyAgICAyNDYsIDE2NywgMjIsIDEyMiwgMjE4LCAxNSwgMjIsIDEyMiwgMjE4LCAxNCwgMjIsIDEyMiwgMjMxLCAxMywgMjIsIDEyMiwgCisgICAgMjMxLCAxNCwgMjIsIDEyMiwgMjMxLCA3LCAyMiwgMTIyLCAyMzEsIDEyLCAyMiwgMTIyLCAyMzEsIDEwLCAyMiwgMTIyLCAKKyAgICAyMTcsIDIyNSwgMjIsIDEyMiwgMjE3LCAyMjQsIDIyLCAxMjIsIDIxNywgMjIzLCAyMiwgMTIyLCAyMTcsIDIyNiwgMjIsIAorICAgIDEyMiwgMjE3LCAyMjcsIDIyLCAxMjIsIDIyMCwgMTc5LCAyMiwgMTIyLCAyMjAsIDE3OCwgMjIsIDEyMiwgMjIwLCAxNzcsIAorICAgIDIyLCAxMjIsIDIyMCwgMTc0LCAyMiwgMTIyLCAyMjAsIDE3NSwgMjIsIDEyMiwgMjE3LCAxOTksIDIyLCAxMjIsIDIxNywgCisgICAgMTk2LCAyMiwgMTIyLCAyMTcsIDE5NywgMjIsIDEyMiwgMjE3LCAxOTEsIDIyLCAxMjIsIDIxNywgMTkyLCAyMiwgMTIyLCAKKyAgICAyMTcsIDE5MywgMjIsIDEyMiwgMjE3LCAxOTUsIDIyLCAxMjIsIDI0NiwgMTA5LCAyMiwgMTIyLCAyNDYsIDExMSwgMjIsIAorICAgIDEyMiwgMjE3LCAyNDksIDIyLCAxMjIsIDI0MiwgMTA2LCAyMiwgMTIyLCAyNDIsIDk4LCAyMiwgMTIyLCAyNDIsIDEwMSwgCisgICAgMjIsIDEyMiwgMjQyLCA5OSwgMjIsIDEyMiwgMjQyLCAxMDMsIDIyLCAxMjIsIDI0MiwgMTA1LCAyMiwgMTIyLCAyNTQsIDYwLCAKKyAgICAyMiwgMTIyLCAyNTQsIDU3LCAyMiwgMTIyLCAyNTQsIDU1LCAyMiwgMTIyLCAyNTQsIDU2LCAyMiwgMTIyLCAyMjMsIDIxNiwgCisgICAgMjIsIDEyMiwgMjU1LCAxNDMsIDIyLCAxMjIsIDIxOCwgNzgsIDIyLCAxMjIsIDIxOCwgMTMsIDIyLCAxMjIsIDIzMSwgOSwgCisgICAgMjIsIDEyMiwgMjMxLCA4LCAyMiwgODUsIDIzNiwgODYsIDIyLCA4NSwgMjIzLCAyMTEsIDIyLCA4NSwgMjM2LCA3OSwgMjIsIAorICAgIDg1LCAyMzIsIDU1LCAyMiwgODUsIDIzMiwgNTMsIDIyLCA4NSwgMjMyLCA1MiwgMjIsIDg1LCAyMjEsIDE5MiwgMjIsIDg1LCAKKyAgICAyMjcsIDE0MCwgMjIsIDg1LCAyMjcsIDEzNSwgMjIsIDg1LCAyMjcsIDEzMiwgMjIsIDg1LCAyMjcsIDEyNSwgMjIsIDg1LCAKKyAgICAyMjcsIDEyMCwgMjIsIDg1LCAyMjcsIDExNSwgMjIsIDg1LCAyMjcsIDEyNiwgMjIsIDg1LCAyMjcsIDEzOCwgMjIsIDg1LCAKKyAgICAyMzMsIDE4NywgMjIsIDg1LCAyMjksIDk5LCAyMiwgODUsIDIyOSwgODgsIDIyLCA4NSwgMjI0LCAxMDQsIDIyLCA4NSwgCisgICAgMjIzLCAyMDUsIDIyLCA4NSwgMjM4LCAyMiwgMjIsIDg1LCAyNTAsIDIzMCwgMjIsIDg1LCAyNTEsIDI5LCAyMiwgODUsIAorICAgIDIzNiwgMTI4LCAyMiwgODUsIDIyMiwgMCwgMjIsIDg1LCAyMjksIDEyNywgMjIsIDg1LCAyNDMsIDEwNiwgMjIsIDg1LCAKKyAgICAyMzYsIDgwLCAyMiwgODUsIDIzNiwgNzgsIDIyLCA4NSwgMjMyLCA1MSwgMjIsIDg1LCAyMzIsIDQ1LCAyMiwgODUsIDIzMiwgCisgICAgNDcsIDIyLCA4NSwgMjMyLCA1MCwgMjIsIDg1LCAyMzIsIDQ2LCAyMiwgODUsIDIyMSwgMTg5LCAyMiwgODUsIDIyMSwgMTg2LCAKKyAgICAyMiwgODUsIDIyNywgMTMzLCAyMiwgODUsIDIyNywgMTI4LCAyMiwgODUsIDIyNywgMTE0LCAyMiwgODUsIDIyNywgMTEzLCAKKyAgICAyMiwgODUsIDIyMywgMjA3LCAyMiwgODUsIDIyNywgMTMwLCAyMiwgODUsIDIyNywgMTI5LCAyMiwgODUsIDIyNywgMTIyLCAKKyAgICAyMiwgODUsIDIyNywgMTI0LCAyMiwgODUsIDIyNywgMTM3LCAyMiwgODUsIDIyNywgMTE3LCAyMiwgODUsIDIyNywgMTI3LCAKKyAgICAyMiwgODUsIDIyNywgMTM2LCAyMiwgODUsIDIyNywgMTEyLCAyMiwgODUsIDIzMywgMTgzLCAyMiwgODUsIDIzMywgMTc4LCAKKyAgICAyMiwgODUsIDIzMywgMTgwLCAyMiwgODUsIDIzMywgMTc3LCAyMiwgODUsIDIzMywgMTc1LCAyMiwgODUsIDIzMywgMTgxLCAKKyAgICAyMiwgODUsIDIzMywgMTg2LCAyMiwgODUsIDIzMywgMTg0LCAyMiwgODUsIDIzNiwgMjIwLCAyMiwgODUsIDIyOSwgOTAsIAorICAgIDIyLCA4NSwgMjI5LCA5MSwgMjIsIDg1LCAyMjksIDk2LCAyMiwgODUsIDIzNiwgMjE4LCAyMiwgODUsIDIyNCwgOTcsIDIyLCAKKyAgICA4NSwgMjI0LCA4NywgMjIsIDg1LCAyMjQsIDkwLCAyMiwgODUsIDIyNCwgOTIsIDIyLCA4NSwgMjMwLCAxLCAyMiwgODUsIAorICAgIDIzOCwgMTcsIDIyLCA4NSwgMjM4LCAxMCwgMjIsIDg1LCAyMjMsIDIxMiwgMjIsIDg1LCAyMzgsIDE4LCAyMiwgODUsIDIxOCwgCisgICAgNiwgMjIsIDg1LCAyMTgsIDIsIDIyLCA4NSwgMjE4LCAzLCAyMiwgODUsIDIyOSwgMTI1LCAyMiwgODUsIDIzNiwgMjE5LCAKKyAgICAyMiwgODUsIDI0MywgMTA0LCAyMiwgODUsIDI0MywgMTAyLCAyMiwgODUsIDI0MywgMTA1LCAyMiwgODUsIDI0MywgMTAzLCAKKyAgICAyMiwgODUsIDIxOCwgMTIsIDIyLCA4NSwgMjM2LCA4MiwgMjIsIDg1LCAyMzYsIDgxLCAyMiwgODUsIDIzNiwgODUsIDIyLCAKKyAgICA4NSwgMjM2LCA4MywgMjIsIDg1LCAyMzYsIDg0LCAyMiwgODUsIDIyMywgMjA5LCAyOCwgNCwgMTU1LCAyOCwgNCwgMjQyLCAKKyAgICAxNzMsIDI4LCA0LCAyNDMsIDExMiwgMjgsIDQsIDI0MywgMjExLCAyOCwgNCwgMjQzLCAxNDgsIDI4LCA0LCAyNDMsIDE2MiwgCisgICAgMjgsIDQsIDI0MywgNCwgMjgsIDQsIDI0MywgMywgMjgsIDQsIDIzNSwgMTg4LCAyOCwgNCwgMjM0LCAyMzEsIDI4LCA0LCAKKyAgICAyMzUsIDY3LCAyOCwgNCwgMjM1LCAxODcsIDI4LCA0LCAyMzUsIDExOCwgMjgsIDQsIDIzNSwgMTIyLCAyOCwgNCwgMjM1LCAKKyAgICAxMiwgMjgsIDQsIDIzNCwgMjA2LCAyOCwgNCwgMjQzLCAxMjEsIDI4LCA0LCAyNDMsIDExNSwgMjgsIDQsIDI0MywgMTE3LCAKKyAgICAyOCwgNCwgMjQzLCAxMjAsIDI4LCA0LCAyNDMsIDExOCwgMjgsIDQsIDI0MywgMTE5LCAyOCwgNCwgMjQzLCAxMTYsIDI4LCAKKyAgICA0LCAyNDMsIDExNCwgMjgsIDQsIDE5NiwgMjgsIDQsIDIzMywgOTksIDI4LCA0LCAyMzMsIDE5NiwgMjgsIDQsIDIzNCwgCisgICAgMTE4LCAyOCwgNCwgMjM0LCAxNiwgMjgsIDQsIDIzNCwgMjUsIDI4LCA0LCAyMzMsIDEzNiwgMjgsIDQsIDIzMywgNDksIDI4LCAKKyAgICA0LCAyMjIsIDIxMiwgMjgsIDQsIDIyMiwgMjA2LCAyOCwgNCwgMjIyLCAyMDgsIDI4LCA0LCAyMjIsIDIxMSwgMjgsIDQsIAorICAgIDIyMiwgMjA5LCAyOCwgNCwgMjIyLCAyMTAsIDI4LCA0LCAyMjIsIDIwNywgMjgsIDQsIDIyMiwgMjA1LCAyOCwgNCwgMjAzLCAKKyAgICAyOCwgNCwgMjI3LCAyMiwgMjgsIDQsIDIyNywgMTQ3LCAyOCwgNCwgMjI4LCAwLCAyOCwgNCwgMjI3LCAyMDAsIDI4LCA0LCAKKyAgICAyMjcsIDIxNiwgMjgsIDQsIDIyNywgNzUsIDI4LCA0LCAyMjYsIDI1MiwgMjgsIDQsIDIyNiwgMTc3LCAyOCwgNCwgMjIzLCAKKyAgICAxMDMsIDI4LCA0LCAyMjQsIDE0MCwgMjgsIDQsIDIyNiwgMTc1LCAyOCwgNCwgMjI2LCA4NCwgMjgsIDQsIDIyNiwgOTQsIAorICAgIDI4LCA0LCAyMjQsIDI2LCAyOCwgNCwgMjIzLCAzNiwgMjgsIDQsIDIyNSwgMjUsIDI4LCA0LCAyMjQsIDE3MCwgMjgsIDQsIAorICAgIDIyNCwgMjIxLCAyOCwgNCwgMjI1LCAyMSwgMjgsIDQsIDIyNCwgMjQ0LCAyOCwgNCwgMjI0LCAyNDYsIDI4LCA0LCAyMjQsIAorICAgIDIwMCwgMjgsIDQsIDIyNCwgMTU3LCAyOCwgNCwgMjI4LCAxNTUsIDI4LCA0LCAyMjgsIDk4LCAyOCwgNCwgMjI4LCAxMjEsIAorICAgIDI4LCA0LCAyMjgsIDE1NCwgMjgsIDQsIDIyOCwgMTM1LCAyOCwgNCwgMjI4LCAxMzYsIDI4LCA0LCAyMjgsIDExMCwgMjgsIAorICAgIDQsIDIyOCwgMTA5LCAyOCwgNCwgMjI4LCA1NywgMjgsIDQsIDIyOCwgNTMsIDI4LCA0LCAyMjgsIDU2LCAyOCwgNCwgMjI4LCAKKyAgICA1NCwgMjgsIDQsIDIyOCwgNTUsIDI4LCA0LCAyMjgsIDEzMywgMjgsIDQsIDIyOCwgMTI3LCAyOCwgNCwgMjI4LCAxMjksIAorICAgIDI4LCA0LCAyMjgsIDEzMiwgMjgsIDQsIDIyOCwgMTMwLCAyOCwgNCwgMjI4LCAxMzEsIDI4LCA0LCAyMjgsIDEyOCwgMjgsIAorICAgIDQsIDIyOCwgMTI2LCAyOCwgNCwgMjI4LCAxMjIsIDI4LCA0LCAyMjgsIDEyNSwgMjgsIDQsIDIyOCwgMTIzLCAyOCwgNCwgCisgICAgMjI4LCAxMjQsIDI4LCA0LCAyNTIsIDIzNywgMjgsIDQsIDI1MSwgMjQ4LCAyOCwgNCwgMjUyLCA4NCwgMjgsIDQsIDI1MiwgCisgICAgMjM2LCAyOCwgNCwgMjUyLCAxMzcsIDI4LCA0LCAyNTIsIDE0NCwgMjgsIDQsIDI1MiwgNDEsIDI4LCA0LCAyNTEsIDIxOCwgCisgICAgMjgsIDQsIDIxOSwgMTg5LCAyOCwgNCwgMjE5LCA1NiwgMjgsIDQsIDIxOSwgOTQsIDI4LCA0LCAyMTksIDE4OCwgMjgsIDQsIAorICAgIDIxOSwgMTYwLCAyOCwgNCwgMjE5LCAxNjUsIDI4LCA0LCAyMTksIDcyLCAyOCwgNCwgMjE5LCA0OSwgMjgsIDQsIDIyMiwgCisgICAgMTU1LCAyOCwgNCwgMjIxLCAwLCAyOCwgNCwgMjIxLCAyMDUsIDI4LCA0LCAyMjIsIDE1MiwgMjgsIDQsIDIyMiwgODAsIDI4LCAKKyAgICA0LCAyMjIsIDg3LCAyOCwgNCwgMTAxLCAyOCwgNCwgMjIwLCAyMjUsIDI4LCA0LCAyNTEsIDE2OSwgMjgsIDQsIDI1MCwgOTIsIAorICAgIDI4LCA0LCAyNTAsIDIzNSwgMjgsIDQsIDI1MSwgMTY4LCAyOCwgNCwgMjUxLCA5MSwgMjgsIDQsIDI1MSwgOTksIDI4LCA0LCAKKyAgICAyNTAsIDE4MiwgMjgsIDQsIDI1MCwgNjYsIDI4LCA0LCAyMTgsIDEzOCwgMjgsIDQsIDIxOCwgMTE0LCAyOCwgNCwgMjE4LCAKKyAgICAxMzAsIDI4LCA0LCAyMTgsIDEzNywgMjgsIDQsIDIxOCwgMTM0LCAyOCwgNCwgMjE4LCAxMzUsIDI4LCA0LCAyMTgsIDEyMSwgCisgICAgMjgsIDQsIDIxOCwgMTIwLCAyOCwgNCwgMjE4LCAxMDksIDI4LCA0LCAyMTgsIDEwNSwgMjgsIDQsIDIxOCwgMTA4LCAyOCwgCisgICAgNCwgMjE4LCAxMDYsIDI4LCA0LCAyMTgsIDEwNywgMjgsIDQsIDIwOCwgMjgsIDQsIDIzMSwgMTQ0LCAyOCwgNCwgMjMyLCAKKyAgICA2MiwgMjgsIDQsIDIzMiwgMjM1LCAyOCwgNCwgMjMyLCAxMzksIDI4LCA0LCAyMzIsIDE0MSwgMjgsIDQsIDIzMSwgMjA0LCAKKyAgICAyOCwgNCwgMjMxLCA4NSwgMjgsIDQsIDIzMSwgNzcsIDI4LCA0LCAyMzEsIDUwLCAyOCwgNCwgMjMxLCA2NywgMjgsIDQsIAorICAgIDIzMSwgNzYsIDI4LCA0LCAyMzEsIDcyLCAyOCwgNCwgMjMxLCA3MywgMjgsIDQsIDIzMSwgNTYsIDI4LCA0LCAyMzEsIDQzLCAKKyAgICAyOCwgNCwgMjQ0LCA3MywgNjAsIDI4LCA0LCAyNDQsIDczLCA2OCwgMjgsIDQsIDI0NCwgNzMsIDcyLCAyOCwgNCwgMjQ0LCAKKyAgICA3MywgMjU1LCA1OCwgMjgsIDQsIDI0NCwgNzMsIDI0NiwgMjUwLCAyOCwgNCwgMjQ0LCA3MywgNzMsIDI4LCA0LCAyNDQsIAorICAgIDczLCA3NCwgMjgsIDQsIDI0NCwgNzMsIDIxOSwgNywgMjgsIDQsIDE3NSwgMjgsIDQsIDIzNiwgNywgMjgsIDQsIDIzNiwgCisgICAgMTEzLCAyOCwgNCwgMjM3LCA1LCAyOCwgNCwgMjM2LCAxODMsIDI4LCA0LCAyMzYsIDE4NCwgMjgsIDQsIDIzNiwgNTcsIDI4LCAKKyAgICA0LCAyMzYsIDU2LCAyOCwgNCwgMjM1LCAyMzQsIDI4LCA0LCAyMzUsIDIyOSwgMjgsIDQsIDIzNSwgMjMzLCAyOCwgNCwgCisgICAgMjM1LCAyMzAsIDI4LCA0LCAyMzUsIDIzMSwgMjgsIDQsIDIzNSwgMjI0LCAyOCwgNCwgMjM1LCAyMTgsIDI4LCA0LCAyMzUsIAorICAgIDIyMCwgMjgsIDQsIDIzNSwgMjIzLCAyOCwgNCwgMjM1LCAyMjEsIDI4LCA0LCAyMzUsIDIyMiwgMjgsIDQsIDIzNSwgMjE5LCAKKyAgICAyOCwgNCwgMjM1LCAyMTcsIDI4LCA0LCAyMzUsIDIxMywgMjgsIDQsIDIzNSwgMjE2LCAyOCwgNCwgMjM1LCAyMTQsIDI4LCAKKyAgICA0LCAyMzUsIDIxNSwgMjgsIDQsIDIxOSwgNywgMjgsIDQsIDIxOCwgMTY1LCAyOCwgNCwgMjE4LCAyMDQsIDI4LCA0LCAyMTksIAorICAgIDYsIDI4LCA0LCAyMTgsIDIyNCwgMjgsIDQsIDIxOCwgMjI3LCAyOCwgNCwgMjE4LCAxODcsIDI4LCA0LCAyMTgsIDE4NiwgCisgICAgMjgsIDQsIDIyOSwgMTMzLCA2MCwgMjgsIDQsIDIyOSwgMTMzLCA2OCwgMjgsIDQsIDIyOSwgMTMzLCA3MiwgMjgsIDQsIAorICAgIDIyOSwgMTMzLCAyNTUsIDU4LCAyOCwgNCwgMjI5LCAxMzMsIDI0NiwgMjUwLCAyOCwgNCwgMjI5LCAxMzMsIDczLCAyOCwgNCwgCisgICAgMjI5LCAxMzMsIDc0LCAyOCwgNCwgMjE3LCAxMTQsIDI4LCA0LCAyMTcsIDEzLCAyOCwgNCwgMjE3LCA0MiwgMjgsIDQsIAorICAgIDIxNywgMTEzLCAyOCwgNCwgMjE3LCA5MCwgMjgsIDQsIDIxNywgOTIsIDI4LCA0LCAyMTcsIDIxLCAyOCwgNCwgMjE3LCAwLCAKKyAgICAyOCwgNCwgMjE3LCA4MCwgMjgsIDQsIDIxNywgNjAsIDI4LCA0LCAyMTcsIDY3LCAyOCwgNCwgMjE3LCA3OSwgMjgsIDQsIAorICAgIDIxNywgNzEsIDI4LCA0LCAyMTcsIDcyLCAyOCwgNCwgMjE3LCA2NSwgMjgsIDQsIDIxNywgNTEsIDI4LCA0LCAxODQsIDI4LCAKKyAgICA0LCAyMTcsIDIwMCwgMjgsIDQsIDIxNywgMjUwLCAyOCwgNCwgMjE4LCA3NiwgMjgsIDQsIDIxOCwgMjIsIDI4LCA0LCAyMTgsIAorICAgIDI1LCAyOCwgNCwgMjE3LCAyMzEsIDI4LCA0LCAyMTcsIDIyMiwgMjgsIDQsIDI0OSwgMjA3LCAyOCwgNCwgMjQ3LCAxMTEsIAorICAgIDI4LCA0LCAyNDksIDE1LCAyOCwgNCwgMjQ5LCAyMDYsIDI4LCA0LCAyNDksIDgyLCAyOCwgNCwgMjQ5LCA5MiwgMjgsIDQsIAorICAgIDI0OCwgMTY3LCAyOCwgNCwgMjQ3LCA4MywgMjgsIDQsIDI0OSwgMTMyLCAyOCwgNCwgMjQ5LCAxMDIsIDI4LCA0LCAyNDksIAorICAgIDExNCwgMjgsIDQsIDI0OSwgMTMxLCAyOCwgNCwgMjQ5LCAxMTksIDI4LCA0LCAyNDksIDEyMCwgMjgsIDQsIDI0OSwgMTA3LCAKKyAgICAyOCwgNCwgMjQ5LCA5MywgMjgsIDQsIDIzNywgMTIzLCAyOCwgNCwgMjM3LCA0MywgMjgsIDQsIDIzNywgOTgsIDI4LCA0LCAKKyAgICAyMzcsIDEyMiwgMjgsIDQsIDIzNywgMTEzLCAyOCwgNCwgMjM3LCAxMTQsIDI4LCA0LCAyMzcsIDU5LCAyOCwgNCwgMjM3LCAKKyAgICAyNSwgMjgsIDQsIDI0NSwgMCwgMjgsIDQsIDI0NCwgMTcsIDI4LCA0LCAyNDQsIDEwMywgMjgsIDQsIDI0NCwgMjUzLCAyOCwgCisgICAgNCwgMjQ0LCAxODQsIDI4LCA0LCAyNDQsIDE5MSwgMjgsIDQsIDI0NCwgNjgsIDI4LCA0LCAyNDQsIDY3LCAyOCwgNCwgMjQzLCAKKyAgICAyNDMsIDI4LCA0LCAyNDMsIDIzOSwgMjgsIDQsIDI0MywgMjQyLCAyOCwgNCwgMjQzLCAyNDAsIDI4LCA0LCAyNDMsIDI0MSwgCisgICAgMjgsIDQsIDI0NCwgMTYwLCAyOCwgNCwgMjQ0LCAxNDAsIDI4LCA0LCAyNDQsIDE1MCwgMjgsIDQsIDI0NCwgMTU5LCAyOCwgCisgICAgNCwgMjQ0LCAxNTQsIDI4LCA0LCAyNDQsIDE1NSwgMjgsIDQsIDI0NCwgMTQ0LCAyOCwgNCwgMjQ0LCAxMjksIDI4LCA0LCAKKyAgICAyMjIsIDM1LCAyOCwgNCwgMjIxLCAyMjMsIDI4LCA0LCAyMjIsIDIsIDI4LCA0LCAyMjIsIDM0LCAyOCwgNCwgMjIyLCAyMSwgCisgICAgMjgsIDQsIDIyMiwgMjIsIDI4LCA0LCAyMjEsIDIzOSwgMjgsIDQsIDIyMSwgMjE2LCAyOCwgNCwgMjUxLCA2OSwgMjgsIDQsIAorICAgIDI1MCwgMjUzLCAyOCwgNCwgMjUxLCAzMSwgMjgsIDQsIDI1MSwgNjgsIDI4LCA0LCAyNTEsIDQzLCAyOCwgNCwgMjUxLCA0NiwgCisgICAgMjgsIDQsIDI1MSwgMTEsIDI4LCA0LCAyNTAsIDI0MiwgMjgsIDQsIDIyOSwgMTQxLCAyOCwgNCwgMjI5LCAxMTQsIDI4LCA0LCAKKyAgICAyMjksIDEyOSwgMjgsIDQsIDIyOSwgMTQwLCAyOCwgNCwgMjI5LCAxMzEsIDI4LCA0LCAyMjksIDEzMiwgMjgsIDQsIDIyOSwgCisgICAgMTE4LCAyOCwgNCwgMjI5LCAxMTAsIDI4LCA0LCAyMjEsIDU1LCAyOCwgNCwgMjIxLCAzNiwgMjgsIDQsIDIyMSwgMzksIDI4LCAKKyAgICA0LCAyMjEsIDU0LCAyOCwgNCwgMjIxLCA0OSwgMjgsIDQsIDIyMSwgNTAsIDI4LCA0LCAyMjEsIDM4LCAyOCwgNCwgMjIxLCAKKyAgICAzNCwgMjgsIDQsIDIyMCwgMTg4LCAyOCwgNCwgMjIwLCAxODAsIDI4LCA0LCAyMjAsIDE4NCwgMjgsIDQsIDIyMCwgMTg3LCAKKyAgICAyOCwgNCwgMjIwLCAxODUsIDI4LCA0LCAyMjAsIDE4NiwgMjgsIDQsIDIyMCwgMTgyLCAyOCwgNCwgMjIwLCAxODEsIDI4LCAKKyAgICA0LCAyNDYsIDgsIDI4LCA0LCAyNDUsIDkyLCAyOCwgNCwgMjQ1LCAyMDMsIDI4LCA0LCAyNDYsIDcsIDI4LCA0LCAyNDUsIAorICAgIDIyNiwgMjgsIDQsIDI0NSwgMjMxLCAyOCwgNCwgMjQ1LCAxMzksIDI4LCA0LCAyNDUsIDc4LCAyOCwgNCwgMTg3LCAyOCwgNCwgCisgICAgMjI4LCAyMDIsIDI4LCA0LCAyMjksIDEwOCwgMjgsIDQsIDIzMCwgNDMsIDI4LCA0LCAyMjksIDE5MSwgMjgsIDQsIDIyOSwgCisgICAgMTk4LCAyOCwgNCwgMjI5LCAzNywgMjgsIDQsIDIyOCwgMTgxLCAyOCwgNCwgMjI2LCAyNDIsIDI4LCA0LCAyMzMsIDM5LCAKKyAgICAyOCwgNCwgMjQ1LCA3MiwgMjgsIDM2LCAyNDQsIDE4MywgNzgsIDI4LCAyMjYsIDg3LCA3OCwgMjgsIDIxOCwgMTczLCAyOCwgCisgICAgMjQ1LCA5MCwgMjIzLCAxMzYsIDI4LCAyNTAsIDE2OCwgMjgsIDIyNSwgNjcsIDI4LCAyNTAsIDE3NSwgMjgsIDIyOCwgMjQyLCAKKyAgICAyNTAsIDE3NSwgMjgsIDIyOCwgODIsIDc4LCAyOCwgMjI5LCAyNDEsIDIyNSwgNTQsIDI4LCAyMCwgMTA3LCAyOCwgMjAsIAorICAgIDEwMywgMjgsIDIwLCAxNjAsIDI4LCAyMCwgMTU0LCAyOCwgMjAsIDE3NCwgMjgsIDIwLCAxODIsIDI4LCAyMCwgMTkxLCAyOCwgCisgICAgMjAsIDE4NSwgMjgsIDIwLCAxOTAsIDI4LCA1NCwgMjIyLCA2NSwgMjgsIDU0LCAyMjAsIDIxOSwgMjgsIDU0LCAyMjEsIAorICAgIDI0NSwgMjgsIDU0LCAyNDUsIDExOSwgMjgsIDU0LCAyNDUsIDE5NiwgMjgsIDU0LCAyMjQsIDY5LCAyOCwgNTQsIDIyNSwgCisgICAgMzgsIDI4LCA1NCwgMjQ2LCAyMjcsIDI4LCA1NCwgMjMyLCAyNywgMjgsIDU0LCAyNDIsIDE2MSwgMjgsIDU0LCAyMjIsIDY2LCAKKyAgICAyMjEsIDIzMSwgMjgsIDQsIDIyNiwgOTEsIDIzMywgNDksIDI4LCA0LCAyMzMsIDQ1LCAyOCwgNCwgMjMzLCA0NiwgMjgsIDQsIAorICAgIDIzMywgNDcsIDI4LCA0LCAyMjYsIDkxLCAyNTEsIDIxOCwgMjgsIDQsIDI1MSwgMjE1LCAyOCwgNCwgMjUxLCAyMTYsIDI4LCAKKyAgICA0LCAyNTEsIDIxNywgMjgsIDQsIDIyNiwgOTEsIDI0NSwgNzgsIDI4LCA0LCAyNDUsIDc0LCAyOCwgNCwgMjQ1LCA3NSwgMjgsIAorICAgIDQsIDI0NSwgNzYsIDI4LCA0LCAyMjYsIDkxLCAyMjgsIDE4MSwgMjgsIDQsIDIyOCwgMTc3LCAyOCwgNCwgMjI4LCAxNzgsIAorICAgIDI4LCA0LCAyMjgsIDE3OSwgMjgsIDIyMSwgMTMzLCAxNjQsIDIxNywgMjM0LCAyOCwgMjIxLCAxMzMsIDE2NCwgMjQ5LCA1MCwgCisgICAgMjgsIDIyMSwgMTMzLCAxNjQsIDIyNywgOTcsIDI4LCAyMjEsIDEzMywgMTY0LCAyMjQsIDE5MiwgMjI3LCA5NywgMjgsIAorICAgIDIyMSwgMTMzLCAxNjQsIDI0OCwgMjQ4LCAyOCwgMjIxLCAxMzMsIDE2NCwgMjM2LCAxNjcsIDI4LCAyMjEsIDEzMywgMTY0LCAKKyAgICAyNTEsIDE5LCAyOCwgMjIxLCAxMzMsIDE2NCwgMjQzLCAxMTAsIDI4LCAyMjEsIDEzMywgMTY0LCAyNDksIDQ5LCAyOCwgCisgICAgMjIxLCAxMzMsIDE2NCwgMjM1LCAyNDUsIDE0MywgMSwgNjAsIDE0MywgMSwgNzMsIDE0MywgMSwgNzIsIDE0MywgMSwgNzQsIAorICAgIDE0MywgMSwgNjgsIDE0MywgMSwgMjE2LCAyMTYsIDE0MywgMSwgMjQ1LCAwLCAxNDMsIDEsIDE3NSwgMTQzLCAxLCAyNDQsIAorICAgIDE5MSwgMTQzLCAxLCAyNDQsIDEwMywgMTQzLCAxLCAyNDQsIDY4LCAxNDMsIDEsIDI0NCwgMTcsIDE0MywgMSwgMjQzLCAKKyAgICAyNDQsIDE0MywgMSwgMTU1LCAxNDMsIDEsIDI0MywgMTYyLCAxNDMsIDEsIDI0MywgMTEyLCAxNDMsIDEsIDI0MywgNCwgCisgICAgMTQzLCAxLCAyNDIsIDE3MywgMTQzLCAxLCAyNDIsIDE1NCwgMTQzLCAxLCAyMzUsIDE4OCwgMTQzLCAxLCAyMzUsIDEyMiwgCisgICAgMTQzLCAxLCAyMzUsIDY3LCAxNDMsIDEsIDIzNSwgMTIsIDE0MywgMSwgMjM0LCAyMzEsIDE0MywgMSwgMjM0LCAyMDcsIAorICAgIDE0MywgMSwgMTk2LCAxNDMsIDEsIDIzNCwgMjUsIDE0MywgMSwgMjMzLCAxOTYsIDE0MywgMSwgMjMzLCAxMzYsIDE0MywgMSwgCisgICAgMjMzLCA5OSwgMTQzLCAxLCAyMDgsIDE0MywgMSwgMjQzLCAyNiwgMTQzLCAxLCAyMzIsIDIyNCwgMTQzLCAxLCAyMzIsIAorICAgIDE0MSwgMTQzLCAxLCAyMzIsIDYyLCAxNDMsIDEsIDIzMSwgMjA0LCAxNDMsIDEsIDIzMSwgMTQ0LCAxNDMsIDEsIDIzMSwgCisgICAgODcsIDE0MywgMSwgMjI4LCA5NywgMTQzLCAxLCAyMjgsIDg0LCAxNDMsIDEsIDIyOCwgNzgsIDE0MywgMSwgMjI4LCA3MiwgCisgICAgMTQzLCAxLCAyMjgsIDYxLCAxNDMsIDEsIDIyOCwgNTksIDE0MywgMSwgMjI2LCAxNzcsIDE0MywgMSwgMTk4LCAxNDMsIDEsIAorICAgIDIyNiwgOTQsIDE0MywgMSwgMjI0LCAxNDAsIDE0MywgMSwgMjI0LCAyNiwgMTQzLCAxLCAyMjMsIDEwMywgMTQzLCAxLCAKKyAgICAyMjMsIDQxLCAxNDMsIDEsIDI0OSwgMjA3LCAxNDMsIDEsIDIyMiwgMTU1LCAxNDMsIDEsIDI0OSwgOTIsIDE0MywgMSwgCisgICAgMjIyLCA4NywgMTQzLCAxLCAyNDksIDE1LCAxNDMsIDEsIDIyMSwgMjA1LCAxNDMsIDEsIDI0OCwgMTY3LCAxNDMsIDEsIAorICAgIDI0NywgMTExLCAxNDMsIDEsIDI0NywgODUsIDE0MywgMSwgMjQ4LCAxNzYsIDE0MywgMSwgMjIxLCAxNTUsIDE0MywgMSwgCisgICAgMjIxLCAxNTQsIDE0MywgMSwgMjIxLCAxNDQsIDE0MywgMSwgMjIxLCAxNDMsIDE0MywgMSwgMjIxLCAxNDIsIDE0MywgMSwgCisgICAgMjIxLCAxNDEsIDE0MywgMSwgMjIxLCA1NSwgMTQzLCAxLCAyMjEsIDUwLCAxNDMsIDEsIDIyMSwgMzksIDE0MywgMSwgMjIxLCAKKyAgICAzOCwgMTQzLCAxLCAyMjEsIDM2LCAxNDMsIDEsIDIyMSwgMzUsIDE0MywgMSwgMjE5LCA3LCAxNDMsIDEsIDIxOCwgMjI3LCAKKyAgICAxNDMsIDEsIDIxOCwgMjA0LCAxNDMsIDEsIDIxOCwgMTg3LCAxNDMsIDEsIDIxOCwgMTY1LCAxNDMsIDEsIDIxOCwgMTU2LCAKKyAgICAxNDMsIDEsIDE4NCwgMTQzLCAxLCAyMTgsIDI1LCAxNDMsIDEsIDIxNywgMjUwLCAxNDMsIDEsIDIxNywgMjMxLCAxNDMsIDEsIAorICAgIDIxNywgMjAwLCAxNDMsIDEsIDIxNywgMTc0LCAxOCwgMTksIDI0MiwgMTIxLCAxOCwgMTksIDczLCAxOCwgMTksIDI1NSwgCisgICAgMjIsIDE4LCAxOSwgNzIsIDE4LCAxOSwgMjM3LCAyNTUsIDE4LCAxOSwgNzQsIDE4LCAxOSwgMjMwLCAxMjcsIDE4LCAxOSwgCisgICAgMjE4LCA4OSwgMjMwLCAxMjcsIDE4LCAxOSwgNjQsIDI0NiwgMjUwLCAxOCwgMTksIDY0LCA3MiwgMTgsIDE5LCA2MCwgMTgsIAorICAgIDE5LCAyNTUsIDU4LCAxOCwgMTksIDIxOCwgMjI3LCAxOCwgMTksIDEzNywgMjE4LCAyMjcsIDE4LCAxOSwgMjE4LCAyMDQsIAorICAgIDE4LCAxOSwgMTM3LCAyMTgsIDIwNCwgMTgsIDE5LCAyMTgsIDE5NiwgMTgsIDE5LCAxMzcsIDIxOCwgMTk2LCAxOCwgMTksIAorICAgIDIxOCwgMTg3LCAxOCwgMTksIDEzNywgMjE4LCAxODcsIDE4LCAxOSwgMjE4LCAxODAsIDE4LCAxOSwgMTM3LCAyMTgsIDE4MCwgCisgICAgMTgsIDE5LCAyMzIsIDIwNywgMjE4LCAxODAsIDE4LCAxOSwgMjE5LCA3LCAxOCwgMTksIDEzNywgMjE5LCA3LCAxOCwgMTksIAorICAgIDIxOSwgNiwgMTgsIDE5LCAxMzcsIDIxOSwgNiwgMTgsIDE5LCAyMzIsIDIwNywgMjE5LCA2LCAxOCwgMTksIDI1NCwgMTk2LCAKKyAgICAxOCwgMTksIDIxOCwgODksIDIxOSwgNDAsIDE4LCAxOSwgMjQ0LCA3MywgMjIzLCAxMzYsIDE4LCAxOSwgMzksIDE2OCwgMTgsIAorICAgIDE5LCAzOSwgMjQ0LCAzNiwgMTgsIDE5LCAzOSwgMjUyLCAyOSwgMTQ0LCAyMjcsIDkzLCAxOCwgMTksIDM5LCAyMjEsIDEyMCwgCisgICAgMTQ0LCAyMjcsIDkzLCAxOCwgMTksIDM5LCA0NSwgMTQ0LCAyMjcsIDkzLCAxOCwgMTksIDM5LCAyMjcsIDkzLCAxOCwgMTksIAorICAgIDM5LCA1MSwgMTY4LCAxOCwgMTksIDM5LCA1MSwgMjI0LCAxOTIsIDY5LCAyMjMsIDEwNywgMTgsIDE5LCAzOSwgMjMzLCAKKyAgICAxOTMsIDI0OCwgMTQ1LCAxOCwgMTksIDM5LCAyMjQsIDE5MiwgMTg2LCA5MiwgMTgsIDE5LCAzOSwgMjI5LCA0MywgMTgsIAorICAgIDE5LCAzOSwgMTEzLCAyMjIsIDE0MywgMTgsIDE5LCAyNDYsIDE5NywgMTgsIDE5LCAyMzcsIDIyMywgMTgsIDE5LCAyMzAsIAorICAgIDEzOCwgMTgsIDE5LCAyNTQsIDEzMSwgMTgsIDE5LCAyMjksIDE5OCwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIDIyOSwgCisgICAgMTA4LCAxOCwgMTksIDIyOSwgNzYsIDE4LCAxOSwgMjI5LCAzNywgMTgsIDE5LCAyMjksIDIxLCAxOCwgMTksIDIxOCwgODksIAorICAgIDIyOSwgMjEsIDE4LCAxOSwgNjQsIDI0MywgMTQ4LCAxOCwgMTksIDY0LCAyNDMsIDExMiwgMTgsIDE5LCAxODcsIDE4LCAxOSwgCisgICAgMjMwLCA0MywgMTgsIDE5LCAyMjgsIDE3OSwgMTgsIDE5LCAxMzcsIDIyOCwgMTc5LCAxOCwgMTksIDIyOCwgMTc3LCAxOCwgCisgICAgMTksIDEzNywgMjI4LCAxNzcsIDE4LCAxOSwgMjI4LCAxNzYsIDE4LCAxOSwgMTM3LCAyMjgsIDE3NiwgMTgsIDE5LCAyMjgsIAorICAgIDE3NCwgMTgsIDE5LCAxMzcsIDIyOCwgMTc0LCAxOCwgMTksIDIyOCwgMTczLCAxOCwgMTksIDEzNywgMjI4LCAxNzMsIDE4LCAKKyAgICAxOSwgMjI4LCAxODEsIDE4LCAxOSwgMTM3LCAyMjgsIDE4MSwgMTgsIDE5LCAyMjgsIDE4MCwgMTgsIDE5LCAxMzcsIDIyOCwgCisgICAgMTgwLCAxOCwgMTksIDIxOCwgODksIDIyOCwgMTgwLCAxOCwgMTksIDIzMCwgNTksIDE4LCAxOSwgMTM3LCAyMzAsIDU5LCAKKyAgICAxOCwgMTksIDY0LCAyNDMsIDIyNSwgMTgsIDE5LCAyMjIsIDg3LCAxOCwgMTksIDIyMiwgMTUwLCAxOCwgMTksIDIyMSwgCisgICAgMjA1LCAxOCwgMTksIDIyMSwgMTk0LCAxOCwgMTksIDEwMSwgMTgsIDE5LCAyMjEsIDEyMiwgMTgsIDE5LCAyMTgsIDg5LCAKKyAgICAyMjEsIDEyMiwgMTgsIDE5LCA2NCwgMjQ5LCA4MiwgMTgsIDE5LCA2NCwgMjQ5LCAxNSwgMTgsIDE5LCAyMjIsIDE1NSwgMTgsIAorICAgIDE5LCAyMjIsIDE1MiwgMTgsIDE5LCAyMjAsIDIyMywgMTgsIDE5LCAxMzcsIDIyMCwgMjIzLCAxOCwgMTksIDIyMCwgMjA4LCAKKyAgICAxOCwgMTksIDEzNywgMjIwLCAyMDgsIDE4LCAxOSwgMjIwLCAyMDcsIDE4LCAxOSwgMTM3LCAyMjAsIDIwNywgMTgsIDE5LCAKKyAgICAxMDMsIDE4LCAxOSwgMTM3LCAxMDMsIDE4LCAxOSwgMjIwLCAyMDMsIDE4LCAxOSwgMTM3LCAyMjAsIDIwMywgMTgsIDE5LCAKKyAgICAyMjAsIDIyNSwgMTgsIDE5LCAxMzcsIDIyMCwgMjI1LCAxOCwgMTksIDIyMCwgMjI0LCAxOCwgMTksIDEzNywgMjIwLCAyMjQsIAorICAgIDE4LCAxOSwgMjMyLCAyMDcsIDIyMCwgMjI0LCAxOCwgMTksIDIyMiwgMjAxLCAxOCwgMTksIDIyMSwgMjYsIDE4LCAxOSwgCisgICAgMjIxLCAxMiwgMTgsIDE5LCAyMjEsIDExLCAxOCwgMTksIDIyMSwgMjksIDE4LCAxOSwgMjM2LCAxODQsIDE4LCAxOSwgMjM3LCAKKyAgICAyLCAxOCwgMTksIDIzNiwgMTEzLCAxOCwgMTksIDIzNiwgMTA1LCAxOCwgMTksIDIzNiwgNTcsIDE4LCAxOSwgMjM2LCA0MSwgCisgICAgMTgsIDE5LCAyMTgsIDg5LCAyMzYsIDQxLCAxOCwgMTksIDE3NSwgMTgsIDE5LCAyMzcsIDUsIDE4LCAxOSwgMjM1LCAyMzEsIAorICAgIDE4LCAxOSwgMTM3LCAyMzUsIDIzMSwgMTgsIDE5LCAyMzUsIDIyOSwgMTgsIDE5LCAxMzcsIDIzNSwgMjI5LCAxOCwgMTksIAorICAgIDIzNSwgMjI4LCAxOCwgMTksIDEzNywgMjM1LCAyMjgsIDE4LCAxOSwgMjM1LCAyMjcsIDE4LCAxOSwgMTM3LCAyMzUsIDIyNywgCisgICAgMTgsIDE5LCAyMzUsIDIyNiwgMTgsIDE5LCAxMzcsIDIzNSwgMjI2LCAxOCwgMTksIDIzNSwgMjM0LCAxOCwgMTksIDEzNywgCisgICAgMjM1LCAyMzQsIDE4LCAxOSwgMjM1LCAyMzMsIDE4LCAxOSwgMTM3LCAyMzUsIDIzMywgMTgsIDE5LCAyMzIsIDIwNywgMjM1LCAKKyAgICAyMzMsIDE4LCAxOSwgMjM3LCAxNywgMTgsIDE5LCAyMzUsIDIzNSwgMTgsIDE5LCAyMjQsIDUsIDIzNiwgMTc4LCAxOCwgMTksIAorICAgIDIyNCwgNSwgMjM2LCAxMDYsIDE4LCAxOSwgMjI0LCA1LCAyMzYsIDUzLCAxOCwgMTksIDIyNCwgNSwgMjM2LCAyNDUsIDE4LCAKKyAgICAxOSwgMjUxLCA5OSwgMTgsIDE5LCAyNTEsIDE2NywgMTgsIDE5LCAyNTAsIDIzNSwgMTgsIDE5LCAyNTAsIDIyNSwgMTgsIAorICAgIDE5LCAyNTAsIDE4MiwgMTgsIDE5LCAyNTAsIDEzMCwgMTgsIDE5LCAyMTgsIDg5LCAyNTAsIDEzMCwgMTgsIDE5LCAyNTEsIAorICAgIDE2OSwgMTgsIDE5LCAyNTEsIDE2OCwgMTgsIDE5LCAyNTAsIDY0LCAxOCwgMTksIDEzNywgMjUwLCA2NCwgMTgsIDE5LCAKKyAgICAyNTAsIDYyLCAxOCwgMTksIDEzNywgMjUwLCA2MiwgMTgsIDE5LCAyNTAsIDYxLCAxOCwgMTksIDEzNywgMjUwLCA2MSwgMTgsIAorICAgIDE5LCAyNTAsIDYwLCAxOCwgMTksIDEzNywgMjUwLCA2MCwgMTgsIDE5LCAyNTAsIDU5LCAxOCwgMTksIDEzNywgMjUwLCA1OSwgCisgICAgMTgsIDE5LCAyNTAsIDY2LCAxOCwgMTksIDEzNywgMjUwLCA2NiwgMTgsIDE5LCAyNTAsIDY1LCAxOCwgMTksIDEzNywgMjUwLCAKKyAgICA2NSwgMTgsIDE5LCAyMzIsIDIwNywgMjUwLCA2NSwgMTgsIDE5LCAyNTEsIDIwMiwgMTgsIDE5LCAyMjYsIDExNiwgMjIyLCAKKyAgICAzNywgMTgsIDE5LCAyMzQsIDI1LCAxOCwgMTksIDIzNCwgMTE3LCAxOCwgMTksIDIzMywgMTk2LCAxOCwgMTksIDIzMywgCisgICAgMTcxLCAxOCwgMTksIDIzMywgMTM2LCAxOCwgMTksIDIzMywgMTE5LCAxOCwgMTksIDIxOCwgODksIDIzMywgMTE5LCAxOCwgCisgICAgMTksIDE5NiwgMTgsIDE5LCAyMzQsIDExOCwgMTgsIDE5LCAyMzMsIDQ3LCAxOCwgMTksIDEzNywgMjMzLCA0NywgMTgsIDE5LCAKKyAgICAyMzMsIDQ1LCAxOCwgMTksIDEzNywgMjMzLCA0NSwgMTgsIDE5LCAyMzMsIDQ0LCAxOCwgMTksIDEzNywgMjMzLCA0NCwgMTgsIAorICAgIDE5LCAyMzMsIDQzLCAxOCwgMTksIDEzNywgMjMzLCA0MywgMTgsIDE5LCAyMzMsIDQyLCAxOCwgMTksIDEzNywgMjMzLCA0MiwgCisgICAgMTgsIDE5LCAyMzMsIDQ5LCAxOCwgMTksIDEzNywgMjMzLCA0OSwgMTgsIDE5LCAyMzMsIDQ4LCAxOCwgMTksIDEzNywgMjMzLCAKKyAgICA0OCwgMTgsIDE5LCAyMzIsIDIwNywgMjMzLCA0OCwgMTgsIDE5LCAxODksIDE4LCAxOSwgMTM3LCAxODksIDE4LCAxOSwgCisgICAgMjMzLCAxOTksIDE4LCAxOSwgMjUzLCAyNDMsIDE4OSwgMTgsIDE5LCAyMjYsIDExNiwgMTg5LCAxOCwgMTksIDIzMiwgMTQxLCAKKyAgICAxOCwgMTksIDIzMiwgMjM0LCAxOCwgMTksIDIzMiwgNjIsIDE4LCAxOSwgMjMyLCAzOCwgMTgsIDE5LCAyMzEsIDIwNCwgMTgsIAorICAgIDE5LCAyMzEsIDE5NSwgMTgsIDE5LCAyMTgsIDg5LCAyMzEsIDE5NSwgMTgsIDE5LCAyMDgsIDE4LCAxOSwgMjMyLCAyMzUsIAorICAgIDE4LCAxOSwgMjMxLCA4MywgMTgsIDE5LCAxMzcsIDIzMSwgODMsIDE4LCAxOSwgMjMxLCA4NSwgMTgsIDE5LCAxMzcsIDIzMSwgCisgICAgODUsIDE4LCAxOSwgMjMxLCA4NCwgMTgsIDE5LCAxMzcsIDIzMSwgODQsIDE4LCAxOSwgMjMyLCAyMDcsIDIzMSwgODQsIDE4LCAKKyAgICAxOSwgMjA3LCAxOCwgMTksIDY0LCAyMzIsIDExNywgMTgsIDE5LCAyMzIsIDY3LCAxOCwgMTksIDIzNSwgMTIyLCAxOCwgMTksIAorICAgIDIzNSwgMTg2LCAxOCwgMTksIDIzNSwgNjcsIDE4LCAxOSwgMjM1LCA1NSwgMTgsIDE5LCAyMzUsIDEyLCAxOCwgMTksIDIzNCwgCisgICAgMjQ4LCAxOCwgMTksIDIxOCwgODksIDIzNCwgMjQ4LCAxOCwgMTksIDIzNSwgMTg4LCAxOCwgMTksIDIzNSwgMTg3LCAxOCwgCisgICAgMTksIDIzNCwgMjA0LCAxOCwgMTksIDEzNywgMjM0LCAyMDQsIDE4LCAxOSwgMjM0LCAyMDMsIDE4LCAxOSwgMTM3LCAyMzQsIAorICAgIDIwMywgMTgsIDE5LCAyMzQsIDIwMiwgMTgsIDE5LCAxMzcsIDIzNCwgMjAyLCAxOCwgMTksIDIzNCwgMjAxLCAxOCwgMTksIAorICAgIDEzNywgMjM0LCAyMDEsIDE4LCAxOSwgMjM0LCAyMDAsIDE4LCAxOSwgMTM3LCAyMzQsIDIwMCwgMTgsIDE5LCAyMzQsIDIwNiwgCisgICAgMTgsIDE5LCAxMzcsIDIzNCwgMjA2LCAxOCwgMTksIDIzNCwgMjA1LCAxOCwgMTksIDEzNywgMjM0LCAyMDUsIDE4LCAxOSwgCisgICAgMTUzLCAxOCwgMTksIDEzNywgMTUzLCAxOCwgMTksIDEyOCwgMTUzLCAxOCwgMTksIDIyNiwgOTQsIDE4LCAxOSwgMjI2LCAKKyAgICAxNzMsIDE4LCAxOSwgMjI0LCAxNDAsIDE4LCAxOSwgMjI0LCAxMjUsIDE4LCAxOSwgMjI0LCAyNiwgMTgsIDE5LCAyMjQsIAorICAgIDE0LCAxOCwgMTksIDIxOCwgODksIDIyNCwgMTQsIDE4LCAxOSwgMjI2LCAxNzcsIDE4LCAxOSwgMjI2LCAxNzUsIDE4LCAxOSwgCisgICAgMjIzLCAzMiwgMTgsIDE5LCAxMzcsIDIyMywgMzIsIDE4LCAxOSwgMjIzLCAyOSwgMTgsIDE5LCAxMzcsIDIyMywgMjksIDE4LCAKKyAgICAxOSwgMjIzLCAyOCwgMTgsIDE5LCAxMzcsIDIyMywgMjgsIDE4LCAxOSwgMjIzLCAyNywgMTgsIDE5LCAxMzcsIDIyMywgMjcsIAorICAgIDE4LCAxOSwgMjIzLCAyNiwgMTgsIDE5LCAxMzcsIDIyMywgMjYsIDE4LCAxOSwgMjIzLCAzNiwgMTgsIDE5LCAxMzcsIDIyMywgCisgICAgMzYsIDE4LCAxOSwgMjIzLCAzNSwgMTgsIDE5LCAxMzcsIDIyMywgMzUsIDE4LCAxOSwgMjMyLCAyMDcsIDIyMywgMzUsIDE4LCAKKyAgICAxOSwgMTk4LCAxOCwgMTksIDI1MywgMjQzLCAxOTgsIDE4LCAxOSwgMjIzLCAzNywgMTgsIDE5LCAyNTIsIDUwLCAxOTgsIAorICAgIDE4LCAxOSwgMjMzLCAxMTYsIDIyNCwgNjYsIDE4LCAxOSwgMjMyLCAyMDcsIDIyNCwgNTksIDE4LCAxOSwgMjMyLCAyMDcsIAorICAgIDIyNiwgMjMzLCAxOCwgMTksIDIzMiwgMjA3LCAyMjMsIDIyOCwgMTgsIDE5LCAyMzIsIDIwNywgMjIzLCAxMDUsIDE4LCAxOSwgCisgICAgMjMyLCAyMDcsIDIyNCwgNTgsIDE4LCAxOSwgMjMyLCAyMDcsIDIyNiwgOTcsIDE4LCAxOSwgMjI0LCAyNDYsIDE4LCAxOSwgCisgICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI0LCAyMTYsIDE4LCAxOSwgMjI0LCAyMDAsIDE4LCAxOSwgMjI0LCAxOTUsIDE4LCAxOSwgCisgICAgMjI1LCAyNSwgMTgsIDE5LCAyMjUsIDIxLCAxOCwgMTksIDIyNCwgMTU1LCAxOCwgMTksIDEzNywgMjI0LCAxNTUsIDE4LCAKKyAgICAxOSwgMjI0LCAxNTQsIDE4LCAxOSwgMTM3LCAyMjQsIDE1NCwgMTgsIDE5LCAyMjQsIDE1MywgMTgsIDE5LCAxMzcsIDIyNCwgCisgICAgMTUzLCAxOCwgMTksIDIyNCwgMTUyLCAxOCwgMTksIDEzNywgMjI0LCAxNTIsIDE4LCAxOSwgMjI0LCAxNTEsIDE4LCAxOSwgCisgICAgMTM3LCAyMjQsIDE1MSwgMTgsIDE5LCAyMjQsIDE1NywgMTgsIDE5LCAxMzcsIDIyNCwgMTU3LCAxOCwgMTksIDIyNCwgMTU2LCAKKyAgICAxOCwgMTksIDEzNywgMjI0LCAxNTYsIDE4LCAxOSwgMjI1LCAyNywgMTgsIDE5LCAyMTgsIDI1LCAxOCwgMTksIDIxOCwgNzQsIAorICAgIDE4LCAxOSwgMjE3LCAyNTAsIDE4LCAxOSwgMjE3LCAyNDIsIDE4LCAxOSwgMjE3LCAyMzEsIDE4LCAxOSwgMjE3LCAyMTYsIAorICAgIDE4LCAxOSwgMjE4LCA4OSwgMjE3LCAyMTYsIDE4LCAxOSwgMTg0LCAxOCwgMTksIDIxOCwgNzYsIDE4LCAxOSwgMjE3LCAKKyAgICAxNzEsIDE4LCAxOSwgMTM3LCAyMTcsIDE3MSwgMTgsIDE5LCAyMTcsIDE3MCwgMTgsIDE5LCAxMzcsIDIxNywgMTcwLCAxOCwgCisgICAgMTksIDIxNywgMTY5LCAxOCwgMTksIDEzNywgMjE3LCAxNjksIDE4LCAxOSwgMjE3LCAxNjgsIDE4LCAxOSwgMTM3LCAyMTcsIAorICAgIDE2OCwgMTgsIDE5LCAyMTcsIDE2NywgMTgsIDE5LCAxMzcsIDIxNywgMTY3LCAxOCwgMTksIDIxNywgMTczLCAxOCwgMTksIAorICAgIDEzNywgMjE3LCAxNzMsIDE4LCAxOSwgMjE3LCAxNzIsIDE4LCAxOSwgMTM3LCAyMTcsIDE3MiwgMTgsIDE5LCAyMzIsIDIwNywgCisgICAgMjE3LCAxNzIsIDE4LCAxOSwgMjE4LCA5MCwgMTgsIDE5LCAyNTIsIDgyLCAyMTgsIDkwLCAxOCwgMTksIDEzNywgMjE4LCAKKyAgICA5MCwgMTgsIDE5LCAyMjYsIDExNiwgMjE3LCAyNTAsIDE4LCAxOSwgMjI3LCAyMTYsIDE4LCAxOSwgMjI4LCAzOCwgMjI3LCAKKyAgICAyMTYsIDE4LCAxOSwgMTM3LCAyMzUsIDEyMiwgMTgsIDE5LCAyMjcsIDI1NSwgMTgsIDE5LCAyMjcsIDE0NywgMTgsIDE5LCAKKyAgICAyMjcsIDk4LCAxOCwgMTksIDIyNywgNzUsIDE4LCAxOSwgMjI3LCA2NywgMTgsIDE5LCAxMzcsIDIzNSwgMTIsIDE4LCAxOSwgCisgICAgMjAzLCAxOCwgMTksIDIyOCwgMCwgMTgsIDE5LCAxMzcsIDIzNSwgMTg4LCAxOCwgMTksIDIyNiwgMjUxLCAxOCwgMTksIAorICAgIDEzNywgMjI2LCAyNTEsIDE4LCAxOSwgMTUyLCAxOCwgMTksIDEzNywgMTUyLCAxOCwgMTksIDEyOCwgMTUyLCAxOCwgMTksIAorICAgIDI0NSwgMjMxLCAxOCwgMTksIDI0NiwgNSwgMTgsIDE5LCAyNDUsIDIwMywgMTgsIDE5LCAyNDUsIDE5MCwgMTgsIDE5LCAKKyAgICAyNDUsIDEzOSwgMTgsIDE5LCAyNDUsIDEzNCwgMTgsIDE5LCAyNDYsIDgsIDE4LCAxOSwgMjQ2LCA3LCAxOCwgMTksIDI0NSwgCisgICAgNzcsIDE4LCAxOSwgMTM3LCAyNDUsIDc3LCAxOCwgMTksIDI0NiwgNzQsIDE4LCAxOSwgMjIyLCAyMiwgMTgsIDE5LCAyMzMsIAorICAgIDMyLCAyMjIsIDIyLCAxOCwgMTksIDIyMiwgMiwgMTgsIDE5LCAyMzMsIDMyLCAyMjIsIDIsIDE4LCAxOSwgMjIxLCAyNTQsIAorICAgIDE4LCAxOSwgMjMzLCAzMiwgMjIxLCAyNTQsIDE4LCAxOSwgMjIxLCAyMzksIDE4LCAxOSwgMjIxLCAyMzYsIDE4LCAxOSwgCisgICAgMjIyLCAzNSwgMTgsIDE5LCAyMjIsIDM0LCAxOCwgMTksIDIyMSwgMjE1LCAxOCwgMTksIDEzNywgMjIxLCAyMTUsIDE4LCAKKyAgICAxOSwgMjIyLCAzNywgMTgsIDE5LCAyMjEsIDE3LCAxOCwgMTksIDIyMSwgMTYsIDE4LCAxOSwgMjIxLCAxNSwgMTgsIDE5LCAKKyAgICAyMjEsIDE5LCAxOCwgMTksIDIyMSwgMjAsIDE4LCAxOSwgMjIwLCAyMDEsIDE4LCAxOSwgMjIwLCAyMDAsIDE4LCAxOSwgCisgICAgMjIwLCAxOTksIDE4LCAxOSwgMjIwLCAyMDIsIDE4LCAxOSwgMjMxLCAxMDIsIDI0MywgMTYyLCAxOCwgMTksIDIzMSwgMTAyLCAKKyAgICAyNDMsIDExMiwgMTgsIDE5LCAyMzEsIDEwMiwgMjQzLCA5NywgMTgsIDE5LCAyMzEsIDEwMiwgMjQzLCA0LCAxOCwgMTksIAorICAgIDIzMSwgMTAyLCAyNDIsIDI0OCwgMTgsIDE5LCAyMzEsIDEwMiwgMTU1LCAxOCwgMTksIDIzMSwgMTAyLCAyNDMsIDIxMSwgCisgICAgMTgsIDE5LCAyMzEsIDEwMiwgMjQzLCAyMjUsIDE4LCAxOSwgMjMxLCAxMDEsIDI0MywgMjI1LCAxOCwgMTksIDI0MywgOTAsIAorICAgIDE4LCAxOSwgMjI4LCAxNTEsIDE4LCAxOSwgMjI4LCAxMjEsIDE4LCAxOSwgMjI4LCAxMTYsIDE4LCAxOSwgMjI4LCAxMTAsIAorICAgIDE4LCAxOSwgMjI4LCAxMDUsIDE4LCAxOSwgMjI4LCAxNTUsIDE4LCAxOSwgMjI4LCAxNTQsIDE4LCAxOSwgMjI4LCAxNjMsIAorICAgIDE4LCAxOSwgMjIxLCAxNTEsIDE4LCAxOSwgMjIxLCAxNDksIDE4LCAxOSwgMjIxLCAxNDgsIDE4LCAxOSwgMjIxLCAxNTIsIAorICAgIDE4LCAxOSwgMTM3LCAyMjcsIDIxNiwgMTgsIDE5LCAxMzcsIDIyNywgMTQ3LCAxOCwgMTksIDEzNywgMjI3LCA3NSwgMTgsIAorICAgIDE5LCAxMzcsIDIwMywgMTgsIDE5LCAyMzIsIDExMywgMTgsIDE5LCAyMzIsIDkyLCAxOCwgMTksIDIzMiwgODgsIDE4LCAxOSwgCisgICAgMjMyLCA4NCwgMTgsIDE5LCAyMzIsIDgwLCAxOCwgMTksIDIzMiwgMTE1LCAxOCwgMTksIDIzMiwgMTE0LCAxOCwgMTksIAorICAgIDIzMiwgMTE3LCAxOCwgMTksIDIzMSwgMjE1LCAxOCwgMTksIDIyNiwgMTE2LCAyMjQsIDI0NiwgMTgsIDE5LCAyMjYsIDExNiwgCisgICAgMjI0LCAyMjEsIDE4LCAxOSwgMjI2LCAxMTYsIDIyNCwgMjAwLCAxOCwgMTksIDIyNiwgMTE2LCAyMjUsIDI1LCAxOCwgMTksIAorICAgIDIxOCwgMTc4LCAyMjIsIDIyLCAxOCwgMTksIDIxOCwgMTc4LCAyMjIsIDIsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjM5LCAKKyAgICAxOCwgMTksIDIxOCwgMTc4LCAyMjIsIDM1LCAxOCwgMTksIDIxOCwgMTc4LCAyMjIsIDM3LCAxOCwgMTksIDIzNSwgNzMsIAorICAgIDE4LCAxOSwgMjM1LCA3MiwgMTgsIDE5LCAyMzUsIDcxLCAxOCwgMTksIDIzNSwgNzAsIDE4LCAxOSwgMjM1LCA3OSwgMTgsIAorICAgIDE5LCAyMzUsIDc4LCAxOCwgMTksIDIzNSwgODAsIDE4LCAxOSwgMjIyLCAzNiwgMjIyLCAyMiwgMTgsIDE5LCAyMjIsIDM2LCAKKyAgICAyMjIsIDIsIDE4LCAxOSwgMjIyLCAzNiwgMjIxLCAyNTQsIDE4LCAxOSwgMjIyLCAzNiwgMjIxLCAyMzksIDE4LCAxOSwgCisgICAgMjIyLCAzNiwgMjIxLCAyMzYsIDE4LCAxOSwgMjIyLCAzNiwgMjIyLCAzNSwgMTgsIDE5LCAyMjIsIDM2LCAyMjIsIDM0LCAKKyAgICAxOCwgMTksIDIyMiwgMzYsIDIyMiwgMzcsIDE4LCAxOSwgMjU0LCAxODUsIDI1MywgMjA0LCAxOCwgMTksIDI1MiwgNTAsIAorICAgIDczLCAxOCwgMTksIDI1MiwgNTAsIDcyLCAxOCwgMTksIDI1MiwgNTAsIDc0LCAxOCwgMTksIDI1MiwgNTAsIDYwLCAxOCwgCisgICAgMTksIDI1MiwgNTAsIDIxOCwgMjI3LCAxOCwgMTksIDI1MiwgNTAsIDIxOCwgMjA0LCAxOCwgMTksIDI1MiwgNTAsIDIxOCwgCisgICAgMTg3LCAxOCwgMTksIDI1MiwgNTAsIDIxOSwgNywgMTgsIDE5LCAyNTIsIDUwLCAyMzIsIDE0MSwgMTgsIDE5LCAyNTIsIDUwLCAKKyAgICAyMzIsIDYyLCAxOCwgMTksIDI1MiwgNTAsIDIzMSwgMjA0LCAxOCwgMTksIDI1MiwgNTAsIDIwOCwgMTgsIDE5LCAyNTIsIAorICAgIDUwLCAyMzYsIDE4NCwgMTgsIDE5LCAyNTIsIDUwLCAyMzYsIDExMywgMTgsIDE5LCAyNTIsIDUwLCAyMzYsIDU3LCAxOCwgCisgICAgMTksIDI1MiwgNTAsIDE3NSwgMTgsIDE5LCAyMjYsIDExNiwgMjQzLCAxNjIsIDE4LCAxOSwgMjI2LCAxMTYsIDI0MywgMTEyLCAKKyAgICAxOCwgMTksIDIyNiwgMTE2LCAyNDMsIDQsIDE4LCAxOSwgMjI2LCAxMTYsIDE1NSwgMTgsIDE5LCA2NCwgMjQ0LCAxMDksIAorICAgIDE4LCAxOSwgNjQsIDI0NCwgMTEyLCAxOCwgMTksIDY0LCAyNDQsIDExNiwgMTgsIDE5LCA2NCwgMjQ0LCAxMTUsIDE4LCAxOSwgCisgICAgNjQsIDI0NCwgMTEzLCAxOCwgMTksIDY0LCAyNDQsIDEyNSwgMTgsIDE5LCA2NCwgMjI3LCAyMiwgMTgsIDE5LCA2NCwgMjI3LCAKKyAgICA3NSwgMTgsIDE5LCA2NCwgMjI3LCAyMTYsIDE4LCAxOSwgNjQsIDIyNywgMjAwLCAxOCwgMTksIDY0LCAyMjcsIDE0NywgMTgsIAorICAgIDE5LCA2NCwgMjAzLCAxOCwgMTksIDY0LCAyMTgsIDE2NSwgMTgsIDE5LCA2NCwgMjE4LCAxODcsIDE4LCAxOSwgNjQsIDIxOCwgCisgICAgMjI3LCAxOCwgMTksIDY0LCAyMTgsIDIyNCwgMTgsIDE5LCA2NCwgMjE4LCAyMDQsIDE4LCAxOSwgNjQsIDIxOSwgNywgMTgsIAorICAgIDE5LCA2NCwgMjQyLCAxNDcsIDE4LCAxOSwgNjQsIDI0MiwgMTQ4LCAxOCwgMTksIDY0LCAyNDIsIDE1MSwgMTgsIDE5LCA2NCwgCisgICAgMjQyLCAxNTAsIDE4LCAxOSwgNjQsIDI0MiwgMTQ5LCAxOCwgMTksIDY0LCAyNDIsIDE1MywgMTgsIDE5LCA2NCwgMjIxLCAKKyAgICAyMjMsIDE4LCAxOSwgNjQsIDIyMSwgMjM5LCAxOCwgMTksIDY0LCAyMjIsIDIyLCAxOCwgMTksIDY0LCAyMjIsIDIxLCAxOCwgCisgICAgMTksIDY0LCAyMjIsIDIsIDE4LCAxOSwgNjQsIDIyMiwgMzUsIDE4LCAxOSwgNjQsIDIyMSwgMywgMTgsIDE5LCA2NCwgMjIxLCAKKyAgICAxMSwgMTgsIDE5LCA2NCwgMjIxLCAyNiwgMTgsIDE5LCA2NCwgMjIxLCAyNSwgMTgsIDE5LCA2NCwgMjIxLCAxMiwgMTgsIAorICAgIDE5LCA2NCwgMjIxLCAyOSwgMTgsIDE5LCA2NCwgMjI4LCAyMDIsIDE4LCAxOSwgNjQsIDIyOSwgMzcsIDE4LCAxOSwgNjQsIAorICAgIDIyOSwgMTk4LCAxOCwgMTksIDY0LCAyMjksIDE5MSwgMTgsIDE5LCA2NCwgMjI5LCAxMDgsIDE4LCAxOSwgNjQsIDE4NywgCisgICAgMTgsIDE5LCA2NCwgMjMwLCA1OSwgMTgsIDE5LCA2NCwgMjQ0LCAxNywgMTgsIDE5LCA2NCwgMjQ0LCA2OCwgMTgsIDE5LCAKKyAgICA2NCwgMjQ0LCAxOTEsIDE4LCAxOSwgNjQsIDI0NCwgMTg0LCAxOCwgMTksIDY0LCAyNDQsIDEwMywgMTgsIDE5LCA2NCwgCisgICAgMjQ1LCAwLCAxOCwgMTksIDY0LCAyMzYsIDEyMCwgMTgsIDE5LCA2NCwgMjM2LCAxMjUsIDE4LCAxOSwgNjQsIDIzNiwgMTM3LCAKKyAgICAxOCwgMTksIDY0LCAyMzYsIDEzNiwgMTgsIDE5LCA2NCwgMjM2LCAxMzAsIDE4LCAxOSwgNjQsIDIzNiwgMTQ5LCAxOCwgMTksIAorICAgIDY0LCAyMzYsIDY5LCAxOCwgMTksIDY0LCAyMzYsIDcwLCAxOCwgMTksIDY0LCAyMzYsIDczLCAxOCwgMTksIDY0LCAyMzYsIAorICAgIDcyLCAxOCwgMTksIDY0LCAyMzYsIDcxLCAxOCwgMTksIDY0LCAyMzYsIDc0LCAxOCwgMTksIDY0LCAyMzYsIDc1LCAxOCwgCisgICAgMTksIDY0LCAyMzEsIDE0NCwgMTgsIDE5LCA2NCwgMjMxLCAyMDQsIDE4LCAxOSwgNjQsIDIzMiwgMTQxLCAxOCwgMTksIDY0LCAKKyAgICAyMzIsIDEzOSwgMTgsIDE5LCA2NCwgMjMyLCA2MiwgMTgsIDE5LCA2NCwgMjA4LCAxOCwgMTksIDY0LCAyMzMsIDk5LCAxOCwgCisgICAgMTksIDY0LCAyMzMsIDEzNiwgMTgsIDE5LCA2NCwgMjM0LCAyNSwgMTgsIDE5LCA2NCwgMjM0LCAxNiwgMTgsIDE5LCA2NCwgCisgICAgMjMzLCAxOTYsIDE4LCAxOSwgNjQsIDE5NiwgMTgsIDE5LCA2NCwgMjE3LCAyMDAsIDE4LCAxOSwgNjQsIDIxNywgMjMxLCAKKyAgICAxOCwgMTksIDY0LCAyMTgsIDI1LCAxOCwgMTksIDY0LCAyMTgsIDIyLCAxOCwgMTksIDY0LCAyMTcsIDI1MCwgMTgsIDE5LCAKKyAgICA2NCwgMTg0LCAxOCwgMTksIDY0LCAyMzcsIDQzLCAxOCwgMTksIDIyNiwgMTE2LCAyMzcsIDQzLCAxOCwgMTksIDY0LCAyMzcsIAorICAgIDU5LCAxOCwgMTksIDY0LCAyMzcsIDExNCwgMTgsIDE5LCA2NCwgMjM3LCAxMTMsIDE4LCAxOSwgNjQsIDIzNywgOTgsIDE4LCAKKyAgICAxOSwgMjI2LCAxMTYsIDIzNywgOTgsIDE4LCAxOSwgNjQsIDIzNywgMTIzLCAxOCwgMTksIDY0LCAyMzcsIDcyLCAxOCwgMTksIAorICAgIDY0LCAyMzcsIDc2LCAxOCwgMTksIDY0LCAyMzcsIDg2LCAxOCwgMTksIDY0LCAyMzcsIDg1LCAxOCwgMTksIDY0LCAyMzcsIAorICAgIDg0LCAxOCwgMTksIDY0LCAyMzcsIDg3LCAxOCwgMTksIDY0LCAyMzQsIDIzMSwgMTgsIDE5LCA2NCwgMjM1LCAxMiwgMTgsIAorICAgIDE5LCA2NCwgMjM1LCAxMjIsIDE4LCAxOSwgNjQsIDIzNSwgMTE4LCAxOCwgMTksIDY0LCAyMzUsIDY3LCAxOCwgMTksIDY0LCAKKyAgICAyMzUsIDE4OCwgMTgsIDE5LCA2NCwgMjQ4LCAxNzEsIDE4LCAxOSwgNjQsIDI0OCwgMTcyLCAxOCwgMTksIDY0LCAyNDgsIAorICAgIDE3NSwgMTgsIDE5LCA2NCwgMjQ4LCAxNzQsIDE4LCAxOSwgNjQsIDI0OCwgMTczLCAxOCwgMTksIDY0LCAyNDgsIDE3NiwgCisgICAgMTgsIDE5LCA2NCwgMjM1LCA2OSwgMTgsIDE5LCA2NCwgMjM1LCA3MSwgMTgsIDE5LCA2NCwgMjM1LCA3NSwgMTgsIDE5LCAKKyAgICA2NCwgMjM1LCA3NCwgMTgsIDE5LCA2NCwgMjM1LCA3MywgMTgsIDE5LCA2NCwgMjM1LCA3OSwgMTgsIDE5LCA2NCwgMjIxLCAKKyAgICAxNDYsIDE4LCAxOSwgNjQsIDIyMSwgMTQ4LCAxOCwgMTksIDY0LCAyMjEsIDE1MSwgMTgsIDE5LCA2NCwgMjIxLCAxNTAsIAorICAgIDE4LCAxOSwgNjQsIDIyMSwgMTQ5LCAxOCwgMTksIDY0LCAyMjEsIDE1MiwgMTgsIDE5LCA2NCwgMjIxLCAxNDIsIDE4LCAxOSwgCisgICAgNjQsIDIyMSwgMTQzLCAxOCwgMTksIDY0LCAyMjEsIDE1NCwgMTgsIDE5LCA2NCwgMjIxLCAxNTMsIDE4LCAxOSwgNjQsIAorICAgIDIyMSwgMTQ0LCAxOCwgMTksIDY0LCAyMjEsIDE1NSwgMTgsIDE5LCA2NCwgMjE3LCAxMywgMTgsIDE5LCA2NCwgMjE3LCAyMSwgCisgICAgMTgsIDE5LCA2NCwgMjE3LCA5MiwgMTgsIDE5LCA2NCwgMjE3LCA5MCwgMTgsIDE5LCA2NCwgMjE3LCA0MiwgMTgsIDE5LCAKKyAgICA2NCwgMjE3LCAxMTQsIDE4LCAxOSwgNjQsIDIxNywgMTU3LCAxOCwgMTksIDY0LCA2NiwgMjE3LCAxNTcsIDE4LCAxOSwgNjQsIAorICAgIDI0NywgNjUsIDE4LCAxOSwgNjQsIDI0NywgNjYsIDE4LCAxOSwgNjQsIDI0NywgNzMsIDE4LCAxOSwgNjQsIDI0NywgNzIsIAorICAgIDE4LCAxOSwgNjQsIDI0NywgNjgsIDE4LCAxOSwgNjQsIDI0NywgNzQsIDE4LCAxOSwgNjQsIDIyMywgMTAzLCAxOCwgMTksIAorICAgIDY0LCAyMjQsIDI2LCAxOCwgMTksIDY0LCAyMjYsIDk0LCAxOCwgMTksIDY0LCAyMjYsIDg0LCAxOCwgMTksIDY0LCAyMjQsIAorICAgIDE0MCwgMTgsIDE5LCA2NCwgMjI2LCAxNzcsIDE4LCAxOSwgNjQsIDIyNCwgMTcwLCAxOCwgMTksIDY0LCAyMjQsIDIwMCwgCisgICAgMTgsIDE5LCA2NCwgMjI0LCAyNDYsIDE4LCAxOSwgNjQsIDIyNCwgMjQ0LCAxOCwgMTksIDY0LCAyMjQsIDIyMSwgMTgsIDE5LCAKKyAgICA2NCwgMjI1LCAyNSwgMTgsIDE5LCA2NCwgMjI1LCAyNywgMTgsIDE5LCA2NCwgMjIxLCAzNiwgMTgsIDE5LCA2NCwgMjIxLCAKKyAgICAzOCwgMTgsIDE5LCA2NCwgMjIxLCA1MCwgMTgsIDE5LCA2NCwgMjIxLCA0OSwgMTgsIDE5LCA2NCwgMjIxLCAzOSwgMTgsIAorICAgIDE5LCA2NCwgMjIxLCA1NSwgMTgsIDE5LCA2NCwgMjUwLCAyNTMsIDE4LCAxOSwgNjQsIDI1MSwgMTEsIDE4LCAxOSwgNjQsIAorICAgIDI1MSwgNDYsIDE4LCAxOSwgNjQsIDI1MSwgNDMsIDE4LCAxOSwgNjQsIDI1MSwgMzEsIDE4LCAxOSwgNjQsIDI1MSwgNjksIAorICAgIDE4LCAxOSwgNjQsIDIyMSwgNSwgMTgsIDE5LCA2NCwgMjIxLCA2LCAxOCwgMTksIDY0LCAyMjEsIDksIDE4LCAxOSwgNjQsIAorICAgIDIyMSwgOCwgMTgsIDE5LCA2NCwgMjIxLCA3LCAxOCwgMTksIDY0LCAyMjEsIDEwLCAxOCwgMTksIDI1MSwgMzIsIDU1LCAxOCwgCisgICAgMTksIDI0NSwgOTAsIDIyMywgMTM2LCAxOCwgMTksIDIyOCwgMTQ3LCAxOCwgMTksIDIzMiwgMTEyLCAxOCwgMTksIDIzMSwgCisgICAgMjEyLCAxOCwgMTksIDIzMSwgMjExLCAxOCwgMTksIDIzMSwgMjEwLCAxOCwgMTksIDIzMSwgMjA5LCAxOCwgMTksIDIzMSwgCisgICAgMjE0LCAxOCwgMTksIDIzMSwgMjEzLCAxOCwgMTksIDIxOCwgMTc4LCAyMjEsIDIxMywgMTgsIDE5LCAyMTgsIDE3OCwgMjIxLCAKKyAgICAyMTIsIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjExLCAxOCwgMTksIDIxOCwgMTc4LCAyMjEsIDIxMCwgMTgsIDE5LCAyMTgsIAorICAgIDE3OCwgMjIxLCAyMDksIDE4LCAxOSwgMjE4LCAxNzgsIDIyMSwgMjE2LCAxOCwgMTksIDIxOCwgMTc4LCAyMjEsIDIxNSwgCisgICAgMTgsIDE5LCAyMTgsIDE3OCwgMzksIDIyMiwgMzcsIDE4LCAxOSwgMjUyLCA1MCwgMjE5LCA0MCwgMjMwLCAxNjQsIDIyMywgCisgICAgMjU1LCA3OCwgMjMwLCAxNjQsIDEsIDI1MiwgMTIyLCAyMzAsIDE2NCwgMSwgMjM0LCAyMjIsIDIzMCwgMTY0LCAxLCAyNDUsIAorICAgIDIzMCwgMjMwLCAxNjQsIDEsIDIyNiwgMTYxLCAyMzAsIDE2NCwgMSwgMjMyLCAyNSwgMjMwLCAxNjQsIDEsIDIyMCwgMTIyLCAKKyAgICAyMzAsIDE2NCwgMSwgMjQ5LCAxODUsIDIzMCwgMTY0LCAxLCAyMjEsIDE3MywgMjMwLCAxNjQsIDEsIDI1MCwgMTc3LCAyMzAsIAorICAgIDE2NCwgMSwgMjUxLCA4OSwgMjMwLCAxNjQsIDEsIDIzMywgOTEsIDIzMCwgMTY0LCAxLCAyNDQsIDUzLCAyMzAsIDE2NCwgMSwgCisgICAgMjMyLCAxMDUsIDIzMCwgMTY0LCAxLCAyMjMsIDEzMSwgMjMwLCAxNjQsIDEsIDIyNywgMTgsIDIzMCwgMTY0LCAxLCAyNTQsIAorICAgIDE5MywgMjMwLCAxNjQsIDEsIDIzMCwgMTMxLCAyMzAsIDE2NCwgMSwgMjIwLCA1MCwgMjMwLCAxNjQsIDEsIDI0NywgMTQsIAorICAgIDIzMCwgMTY0LCAxLCAyMzcsIDE2NSwgMjMwLCAxNjQsIDEsIDI0NywgMTUsIDIzMCwgMTY0LCAxLCAyMzAsIDEwNSwgMjMwLCAKKyAgICAxNjQsIDEsIDIyMCwgMTAzLCAyMzAsIDE2NCwgMSwgMjM4LCA1LCAyMzAsIDE2NCwgMSwgMjQ3LCAxMiwgMjMwLCAxNjQsIDEsIAorICAgIDIyOSwgMTg0LCAyMzAsIDE2NCwgMjQ1LCAyMjksIDc4LCAyMzAsIDE2NCwgMjEwLCAyNDUsIDIyOSwgNzgsIDE1NywgMSwgCisgICAgMjQ1LCAyMjAsIDI0NSwgMjEyLCAyNDUsIDIzMiwgMjQ2LCA3NCwgMTU3LCAxLCAyMTYsIDIxNiwgMTU3LCAxLCAyMjAsIDM2LCAKKyAgICAyMjAsIDUxLCA2OCwgMTU3LCAxLCAyMTcsIDIwMiwgMTU3LCAxLCAyMTgsIDkwLCAxNTcsIDEsIDIxOSwgNDAsIDE1NywgMSwgCisgICAgMjIxLCAyMTgsIDIyMSwgMjE3LCAyMjEsIDIzNCwgMTU3LCAxLCAyNDYsIDExOCwgMTU3LCAxLCAyNTQsIDEwNiwgNjAsIAorICAgIDE1NywgMSwgMjMwLCA5NCwgNzQsIDE1NywgMSwgMjU1LCAzLCA2MCwgMTU3LCAxLCAyNTQsIDIxOSwgMTU3LCAxLCAyMzQsIAorICAgIDI1NCwgNzQsIDE1NywgMSwgMjI0LCAxODUsIDc0LCAxNTcsIDEsIDc0LCAxNTcsIDEsIDIzMCwgMTY3LCAxNTcsIDEsIDIzMCwgCisgICAgMTM4LCAxNTcsIDEsIDIyNywgMjQ0LCAyMjcsIDI1MywgMjI3LCAxOTUsIDE1MiwgMTU3LCAxLCAyMzYsIDE5NSwgMTU3LCAxLCAKKyAgICAyNTEsIDg3LCAxNTcsIDEsIDIzNiwgMTk2LCAyMzcsIDE3LCAxNTcsIDEsIDI0NSwgNjcsIDE1NywgMSwgMjQ2LCAxODUsIAorICAgIDE1NywgMSwgMjQ0LCAxODcsIDI0MywgMjMxLCAyNDUsIDY3LCAxNTcsIDEsIDI0NCwgMjIwLCAxNTcsIDEsIDIxOCwgMTYwLCAKKyAgICAyMTgsIDE1NSwgMjE5LCA0MCwgMTU3LCAxLCAyNDMsIDIwMywgMjQzLCAyMjUsIDE1NywgMSwgMjQzLCAyMDcsIDI0MywgCisgICAgMjI1LCAxNTcsIDEsIDIzNSwgMCwgMjQzLCAyMjUsIDE1NywgMSwgMjI0LCAxODgsIDI0MywgMjI1LCAxNTcsIDEsIDIzMiwgCisgICAgMjAzLCAyMzEsIDc0LCAyMzIsIDIwNCwgMjA3LCAxNTcsIDEsIDIyNCwgMTg2LCAyMDcsIDE1NywgMSwgMjQ3LCAxNDAsIAorICAgIDE1NywgMSwgMjM3LCAxNDgsIDIzNywgMTUyLCAyMzcsIDE0MiwgNzIsIDE1NywgMSwgNzMsIDE1NywgMSwgMjM3LCAxMDYsIAorICAgIDIzNywgMTI2LCAxNTcsIDEsIDI0NCwgMTczLCAxNTcsIDEsIDIzNSwgMSwgMjU0LCAyMzQsIDE1NywgMSwgMjI0LCAxOTAsIAorICAgIDYwLCAxNTcsIDEsIDIzNywgMTM1LCAyNDYsIDE2NCwgMTU3LCAxLCAyMjksIDE1NSwgMjI5LCAxNzMsIDIzMCwgNTksIDE1NywgCisgICAgMSwgMjU0LCAxNjIsIDI0NiwgMTYzLCAxNTcsIDEsIDIyNCwgMywgMTk4LCAxNTcsIDEsIDIyNCwgMTI5LCAyMzQsIDI1MywgCisgICAgMTk4LCAxNTcsIDEsIDIyNCwgMTg0LCAxOTgsIDE1NywgMSwgMjUxLCAyMDIsIDE1NywgMSwgMjE3LCAxNTcsIDE1NywgMSwgCisgICAgMjIxLCAxNTksIDIyMSwgMTY2LCAyMjAsIDE5MCwgMjIyLCAyMDEsIDE1NywgMSwgMjI0LCAxODMsIDIyMiwgMjAxLCAxNTcsIAorICAgIDEsIDI1MCwgNDYsIDE1NywgMSwgMjUyLCAxMDcsIDI1MiwgMTEwLCAyNTIsIDU2LCAyNTMsIDIwNCwgMTU3LCAxLCAyMjQsIAorICAgIDE4OSwgMjUzLCAyMDQsIDE1NywgMSwgMjQ3LCAxMzksIDE1NywgMSwgMjMwLCAxMTUsIDE1NywgMSwgMjQ2LCAyMzgsIDI0NiwgCisgICAgMjQwLCA3MywgMTU3LCAxLCAyMzQsIDgxLCAyMzQsIDg3LCAxODksIDE1NywgMSwgMjM0LCAyNTUsIDE4OSwgMTU3LCAxLCAKKyAgICAyMjQsIDE4NywgMTg5LCAxNTcsIDEsIDIzNSwgMTM2LCAyMzUsIDE3MSwgMjM1LCA0LCAxNTMsIDE1NywgMSwgMjQ3LCAxNDEsIAorICAgIDE1NywgMSwgMjM3LCAyMDMsIDE1NywgMSwgMjM3LCAyMDQsIDE1NywgMSwgMjQ5LCAxOTYsIDI0OSwgMjAxLCAyNTAsIDQ2LCAKKyAgICAxNTcsIDEsIDIzMCwgOTAsIDI0NiwgMTE3LCA3NCwgMTU3LCAxLCAyNDcsIDExLCAxNTcsIDEsIDIzNywgMTY0LCAxNTcsIDEsIAorICAgIDI1MCwgNjMsIDE1NywgMSwgMjUxLCAxNjAsIDE1NywgMSwgMjUxLCA5OCwgMTU3LCAxLCAyMjMsIDE2MSwgMTU3LCAxLCAKKyAgICAyMzQsIDI1MiwgMTU3LCAxLCAyMjQsIDE4MiwgMTU3LCAxLCAyNDIsIDY0LCAxNTcsIDEsIDIyOCwgMTYzLCAxNTcsIDEsIAorICAgIDIxOCwgMTUxLCAxNTcsIDIyNCwgMTA5LCAyMjgsIDE5NiwgMTU3LCAyMzMsIDg1LCAyMjgsIDE5NiwgMTU3LCAyNTAsIDEwMSwgCisgICAgMjI4LCAxOTYsIDE1NywgMjU0LCAzMywgMTAwLCAxNTcsIDIyMCwgMjI3LCAxMDAsIDE1NywgMjUyLCAxMjEsIDEwMCwgMjIyLCAKKyAgICAxNDAsIDEsIDYwLCAyMjIsIDE0MCwgMSwgNzIsIDIyMiwgMTQwLCAxLCA2OCwgMjIyLCAxNDAsIDEsIDE3NSwgMjIyLCAxNDAsIAorICAgIDEsIDI0NSwgMCwgMjIyLCAxNDAsIDEsIDIzMiwgMTE1LCAyMjIsIDE0MCwgMSwgMjIyLCAxNTUsIDIyMiwgMTQwLCAxLCAKKyAgICAyNDksIDIwNywgMjIyLCAxNDAsIDEsIDIwOCwgMjIyLCAxNDAsIDEsIDE4NywgMjIyLCAxNDAsIDEsIDI1MiwgMjM3LCAyMjIsIAorICAgIDE0MCwgMSwgMTk2LCAyMjIsIDE0MCwgMSwgMTg0LCAyMjIsIDE0MCwgMSwgMjM1LCAxODgsIDIyMiwgMTQwLCAxLCAyMTksIAorICAgIDcsIDIyMiwgMTQwLCAxLCAyMjYsIDE3NywgMjIyLCAxNDAsIDEsIDE1NSwgMjIyLCAxNDAsIDI5LCA1LCA3MiwgMjIyLCAKKyAgICAxNDAsIDI5LCA1LCA2OCwgMjIyLCAxNDAsIDUsIDIxOSwgODIsIDI0MywgMTg0LCAxLCA2MCwgMjQzLCAxODQsIDEsIDcyLCAKKyAgICAyNDMsIDE4NCwgMSwgNjgsIDI0MywgMTg0LCAxLCAxNzUsIDI0MywgMTg0LCAxLCAyNDUsIDAsIDI0MywgMTg0LCAxLCAyMzIsIAorICAgIDExNSwgMjQzLCAxODQsIDEsIDIyMiwgMTU1LCAyNDMsIDE4NCwgMSwgMjQ5LCAyMDcsIDI0MywgMTg0LCAxLCAyMDgsIDI0MywgCisgICAgMTg0LCAxLCAxODcsIDI0MywgMTg0LCAxLCAyNTIsIDIzNywgMjQzLCAxODQsIDEsIDE5NiwgMjQzLCAxODQsIDEsIDE4NCwgCisgICAgMjQzLCAxODQsIDEsIDIwMywgMjQzLCAxODQsIDEsIDIzNSwgMTg4LCAyNDMsIDE4NCwgMSwgMjE5LCA3LCAyNDMsIDE4NCwgCisgICAgMSwgMjI2LCAxNzcsIDI0MywgMTg0LCAxLCAxNTUsIDI0MywgMTg0LCAyOSwgNSwgNzIsIDI0MywgMTg0LCAyOSwgNSwgNjgsIAorICAgIDI0MywgMTg0LCA1LCAyMzAsIDE0LCAyMjksIDEyMiwgMjI0LCAxMDksIDIyOCwgMTk2LCAyMjksIDEyMiwgNTEsIDIyOCwgCisgICAgMTk2LCAyNTEsIDI0NSwgMSwgNjAsIDI1MSwgMjQ1LCAxLCA3MiwgMjUxLCAyNDUsIDEsIDY4LCAyNTEsIDI0NSwgMSwgMTc1LCAKKyAgICAyNTEsIDI0NSwgMSwgMjQ1LCAwLCAyNTEsIDI0NSwgMSwgMjMyLCAxMTUsIDI1MSwgMjQ1LCAxLCAyMjIsIDE1NSwgMjUxLCAKKyAgICAyNDUsIDEsIDI0OSwgMjA3LCAyNTEsIDI0NSwgMSwgMjA4LCAyNTEsIDI0NSwgMSwgMTg3LCAyNTEsIDI0NSwgMSwgMjUyLCAKKyAgICAyMzcsIDI1MSwgMjQ1LCAxLCAxOTYsIDI1MSwgMjQ1LCAxLCAxODQsIDI1MSwgMjQ1LCAxLCAyMDMsIDI1MSwgMjQ1LCAxLCAKKyAgICAyMzUsIDE4OCwgMjUxLCAyNDUsIDEsIDIxOSwgNywgMjUxLCAyNDUsIDEsIDIyNiwgMTc3LCAyNTEsIDI0NSwgMSwgMTU1LCAKKyAgICAyNTEsIDI0NSwgMjksIDUsIDcyLCAyNTEsIDI0NSwgMjksIDUsIDY4LCAyMjIsIDEzOSwgMSwgNjAsIDIyMiwgMTM5LCAxLCAKKyAgICA3MiwgMjIyLCAxMzksIDEsIDY4LCAyMjIsIDEzOSwgMSwgMTc1LCAyMjIsIDEzOSwgMSwgMjQ1LCAwLCAyMjIsIDEzOSwgMSwgCisgICAgMjMyLCAxMTUsIDIyMiwgMTM5LCAxLCAyMjIsIDE1NSwgMjIyLCAxMzksIDEsIDI0OSwgMjA3LCAyMjIsIDEzOSwgMSwgMjA4LCAKKyAgICAyMjIsIDEzOSwgMSwgMTg3LCAyMjIsIDEzOSwgMSwgMjUyLCAyMzcsIDIyMiwgMTM5LCAxLCAxOTYsIDIyMiwgMTM5LCAxLCAKKyAgICAxODQsIDIyMiwgMTM5LCAxLCAyMzUsIDE4OCwgMjIyLCAxMzksIDEsIDIxOSwgNywgMjIyLCAxMzksIDEsIDIyNiwgMTc3LCAKKyAgICAyMjIsIDEzOSwgMjksIDUsIDcyLCAyMjIsIDEzOSwgMjksIDUsIDY4LCA3OSwgMSwgMTc1LCA3OSwgMSwgMjM2LCAxNDksIAorICAgIDc5LCAxLCAyMzYsIDU3LCA3OSwgMSwgMjM2LCAxMjUsIDc5LCAxLCAyMzIsIDg0LCA3OSwgMSwgMjUxLCAxNjksIDc5LCAxLCAKKyAgICAyNTEsIDY5LCA3OSwgMSwgMjUwLCAxODIsIDc5LCAxLCAyNTEsIDExLCA3OSwgMSwgMjMxLCA1NiwgNzksIDEsIDI0OSwgCisgICAgMjA3LCA3OSwgMSwgMjIxLCAxOSwgNzksIDEsIDI0OCwgMTY3LCA3OSwgMSwgMjIxLCAxNSwgNzksIDEsIDIzMSwgMjA3LCAKKyAgICA3OSwgMSwgMjIyLCAxNTUsIDc5LCAxLCAyMjIsIDM1LCA3OSwgMSwgMTAxLCA3OSwgMSwgMjIxLCAyMzksIDc5LCAxLCAyMzEsIAorICAgIDIwNCwgNzksIDEsIDI1MiwgMjM3LCA3OSwgMSwgMjI5LCAxNDEsIDc5LCAxLCAyMjksIDM3LCA3OSwgMSwgMjI5LCAxMTgsIAorICAgIDc5LCAxLCAyMzMsIDEzNiwgNzksIDEsIDIxNywgMjMxLCA3OSwgMSwgMjI3LCA3NSwgNzksIDEsIDIzNSwgMTIsIDc5LCAxLCAKKyAgICAyMTksIDcyLCA3OSwgMSwgMjI1LCAyNSwgNzksIDEsIDIyMywgMTgyLCA3OSwgMSwgMjI2LCAxNzcsIDc5LCAxLCAxNTUsIAorICAgIDc5LCAxLCAyMzUsIDE4OCwgNzksIDEsIDIyOCwgMTU1LCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDE0MSwgNzksIDIzNywgCisgICAgMjE0LCAyOSwgMjI4LCAxNTQsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTIxLCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIAorICAgIDExNiwgNzksIDIzNywgMjE0LCAyOSwgMjI4LCA5OCwgNzksIDIzNywgMjE0LCAyOSwgMjI4LCA3MywgNzksIDIzNywgMjE0LCAKKyAgICAyOSwgMjI4LCA2MSwgNzksIDIzNywgMjE0LCAyOSwgMjI4LCA2MCwgNzksIDIzNywgMjE0LCAyOSwgMjI2LCAyNDMsIDc5LCAKKyAgICAyMzcsIDIxNCwgMjksIDIyNiwgMjM2LCA3OSwgMjM3LCAyMTQsIDI5LCAyMzQsIDE5OCwgNzksIDIzNywgMjE0LCAyOSwgCisgICAgMjM0LCAxODksIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTM2LCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDE0NywgNzksIAorICAgIDIzNywgMjE0LCAyOSwgMjI4LCAxMDYsIDIyMCwgMTk4LCAxMDcsIDc5LCAyMzcsIDIxNCwgMjksIDIyOCwgMTA2LCAyMjAsIAorICAgIDE5OCwgMTAzLCA3OSwgMjM3LCAyMTQsIDI5LCAyMjgsIDEzNywgNzksIDI5LCAyMzcsIDIwMiwgMjU0LCA2OSwgNzksIDI5LCAKKyAgICAyMzcsIDIwMiwgMjU1LCA1OCwgNzksIDI5LCA1LCAyNTUsIDU4LCA3OSwgMjksIDUsIDcyLCA3OSwgMjksIDUsIDIzNywgCisgICAgMjU1LCA3OSwgMjksIDUsIDIxOCwgOTAsIDc5LCAyOSwgNSwgMjE3LCAxNjYsIDc5LCAyOSwgNSwgNjgsIDc5LCAyOSwgNSwgCisgICAgMjIwLCAyMywgNzksIDI5LCA1LCAyMjAsIDEyMywgNzksIDI5LCA1LCAyMzAsIDE2NywgNzksIDI5LCA1LCAxODQsIDc5LCAKKyAgICAyOSwgNSwgMjM4LCAyNiwgNzksIDI5LCA1LCA3MywgNzksIDI5LCA1LCAyNTQsIDIzNCwgNzksIDI5LCA1LCAyNTQsIDE5NiwgCisgICAgNzksIDI5LCA1LCAyMzAsIDEyNywgNzksIDI5LCA1LCAyNTMsIDIzMiwgNzksIDUsIDIzMiwgMzcsIDc5LCA1LCAyMjcsIAorICAgIDIxNCwgNzksIDUsIDIxNywgMTc2LCA3OSwgNSwgMjMzLCA1NSwgNzksIDUsIDIyMSwgODAsIDc5LCA1LCAyNTIsIDIwMywgCisgICAgNzksIDUsIDIyNywgNzEsIDc5LCA1LCAyMjEsIDEzOCwgNzksIDUsIDIzNiwgMjM5LCA3OSwgNSwgMjU0LCAxOTgsIDc5LCA1LCAKKyAgICAyMjYsIDE0MSwgMjI2LCAxMzcsIDc5LCA1LCAyMTksIDc5LCA3OSwgNSwgMjUwLCAxNzksIDc5LCA1LCAyNTIsIDE4MywgNzksIAorICAgIDUsIDIzNiwgMTQyLCA3OSwgNSwgMjUyLCAxOTksIDc5LCA1LCAyNTEsIDE1NiwgMjI5LCA3NywgMjM1LCAyMzksIDc5LCA1LCAKKyAgICAyMzUsIDEwMCwgMjIxLCAxMjIsIDc5LCA1LCAyNTIsIDk2LCA3OSwgNSwgMjI5LCAxMjAsIDIzMywgOTcsIDc5LCA1LCAyMzYsIAorICAgIDQwLCA3OSwgMjUwLCA3OCwgMTYsIDIyNywgMTQyLCA3OSwgNSwgMjUzLCAyMTgsIDc5LCA1LCAyNTMsIDIzNSwgNzksIDIwLCAKKyAgICAyMTcsIDg0LCA3OSwgMjAsIDEwNywgNzksIDIwLCAxMDMsIDc5LCAyMCwgMTYwLCA3OSwgMjAsIDE1NCwgNzksIDIwLCAxNzQsIAorICAgIDc5LCAyMCwgMTgyLCA3OSwgMjAsIDE5MSwgNzksIDIwLCAxODUsIDc5LCAyMCwgMTkwLCA3OSwgMTYsIDIzNSwgMTAwLCAKKyAgICAyNTMsIDIzNywgMjI0LCAxNiwgNzksIDE2LCAyMzUsIDEwMCwgMjUzLCAyMzcsIDIzMywgNzIsIDc5LCAxNiwgMjM1LCAxMDAsIAorICAgIDI1MywgMjM3LCAyMjksIDc2LCA3OSwgMTYsIDIzNSwgMTAwLCAyNTMsIDIzNywgMjUyLCAxMjMsIDc5LCAxNiwgMjM1LCAKKyAgICAxMDAsIDI1MywgMjM3LCAyNTEsIDIzMywgNzksIDE2LCAyMzUsIDEwMCwgMjUzLCAyMzcsIDIyOSwgMSwgNzksIDE2LCAyMzUsIAorICAgIDEwMCwgMjUzLCAyMzcsIDIyOCwgMjUxLCA3OSwgMTYsIDIzNSwgMTAwLCAyNTMsIDIzNywgMjI4LCAyNDksIDc5LCAxNiwgCisgICAgMjM1LCAxMDAsIDI1MywgMjM3LCAyMjgsIDI1NSwgNzksIDE2LCAyMzUsIDEwMCwgMjUzLCAyMzcsIDIyOCwgMjUzLCA3NywgCisgICAgMjUyLCA2NiwgNzcsIDI0NiwgMjA4LCA3NywgMjUwLCAxNjgsIDc3LCAyNDUsIDkwLCAyMjMsIDEzNiwgNzcsIDI1MCwgMTc1LCAKKyAgICA3NywgMjQ1LCAxMTYsIDI0OCwgMTQzLCA3NywgMjIxLCAxMzcsIDIyNCwgMjEsIDI0MiwgMTIxLCA3NywgMjI0LCAxMzksIDQsIAorICAgIDI1MiwgMjYsIDIzNCwgNjMsIDc3LCAyMzQsIDg0LCAyNTAsIDE2OCwgNzcsIDIzNCwgODQsIDI0NSwgOTAsIDIyMywgMTM2LCAKKyAgICA3NywgMjMyLCAyMywgNzcsIDI0NSwgMTAzLCA0MSwgMjI2LCA3NCwgMTA3LCA3NywgMjQ1LCAxMDMsIDQxLCAyMjYsIDc0LCAKKyAgICAxMDMsIDc3LCAyNDUsIDEwMywgNDEsIDIyNiwgNzQsIDE2MCwgNzcsIDI5LCAyMjUsIDU0LCA3NywgMjAsIDIxNywgODQsIAorICAgIDc3LCAyMCwgMTA3LCA3NywgMjAsIDEwMywgNzcsIDIwLCAxNjAsIDc3LCAyMCwgMTU0LCA3NywgMjAsIDE3NCwgNzcsIDIwLCAKKyAgICAxODIsIDc3LCAyMCwgMTkxLCA3NywgMjAsIDE4NSwgNzcsIDIwLCAxOTAsIDc3LCAxLCA2MCwgNzcsIDEsIDczLCA3NywgMSwgCisgICAgNzIsIDc3LCAxLCA3NCwgNzcsIDEsIDY4LCA3NywgMSwgMjMwLCAxNjcsIDc3LCAxLCAyMjAsIDExMCwgNzcsIDEsIDI0NiwgCisgICAgMjUwLCA3NywgMSwgMjA4LCA3NywgMSwgMjU0LCAxMjMsIDc3LCAxLCAyNTIsIDIzNywgNzcsIDEsIDE4NywgNzcsIDEsIAorICAgIDIyOCwgMTU1LCA3NywgMSwgMjQ1LCAwLCA3NywgMSwgMTk2LCA3NywgMSwgMjM1LCAxODgsIDc3LCAxLCAyMjYsIDE3NywgCisgICAgNzcsIDEsIDIyNSwgMjUsIDc3LCAxLCAyMjIsIDE1NSwgNzcsIDEsIDI0OSwgMjA3LCA3NywgMSwgMjUxLCA2OSwgNzcsIDEsIAorICAgIDIzNywgMTIzLCA3NywgMSwgMTg0LCA3NywgMSwgMjAzLCA3NywgMSwgMjE5LCA3LCA3NywgMSwgMjQ2LCA4LCA3NywgMSwgCisgICAgMTc1LCA3NywgMSwgMjM2LCAxNDksIDc3LCAxLCAyMjEsIDU1LCA3NywgMSwgMjE3LCAxMTQsIDc3LCAxLCAyNDMsIDIxMSwgCisgICAgNzcsIDEsIDIxNywgMTQsIDc3LCAxLCAyMzUsIDc5LCA3NywgMSwgMjE3LCA2NywgNzcsIDEsIDI1MSwgMzEsIDc3LCAxLCAKKyAgICAyMjEsIDEzNywgMTcxLCAyOSwgNTUsIDc3LCAxLCAyMjEsIDEzNywgNzMsIDc3LCAxLCAyMjEsIDEzNywgNzIsIDc3LCAxLCAKKyAgICAyMjEsIDEzNywgNzQsIDc3LCAxLCAyMjEsIDEzNywgNjgsIDc3LCAxLCAyMjEsIDEzNywgMjMwLCAxNjcsIDc3LCAxLCAyMjEsIAorICAgIDEzNywgMjIwLCAxMTAsIDc3LCAxLCAyMjEsIDEzNywgMjU0LCAxMjMsIDc3LCAxLCAyMjEsIDEzNywgMjUyLCAyMzcsIDc3LCAKKyAgICAxLCAyMjEsIDEzNywgMTg3LCA3NywgMSwgMjIxLCAxMzcsIDIyOCwgMTU1LCA3NywgMSwgMjIxLCAxMzcsIDI0NSwgMCwgNzcsIAorICAgIDEsIDIyMSwgMTM3LCAxOTYsIDc3LCAxLCAyMjEsIDEzNywgMjIyLCAxNTUsIDc3LCAxLCAyMjEsIDEzNywgMjQ5LCAyMDcsIAorICAgIDc3LCAxLCAyMjEsIDEzNywgMjUxLCA2OSwgNzcsIDEsIDIyMSwgMTM3LCAyMzcsIDEyMywgNzcsIDEsIDIyMSwgMTM3LCAKKyAgICAyMjEsIDU1LCA3NywgMSwgMjIxLCAxMzcsIDE4NCwgNzcsIDEsIDIyMSwgMTM3LCAyMTksIDcsIDc3LCAxLCAyMjEsIDEzNywgCisgICAgMTc1LCA3NywgMSwgMjIxLCAxMzcsIDI0NCwgMjUzLCA3NywgMSwgMjIxLCAxMzcsIDI0MywgMjExLCA3NywgMSwgMjIxLCAKKyAgICAxMzcsIDIzNywgOTcsIDc3LCAxLCAyMjEsIDEzNywgMjMyLCA2MCwgNzcsIDEsIDIyMSwgMTM3LCAyNDcsIDc0LCA3NywgMSwgCisgICAgMjI0LCAxMzksIDczLCA3NywgMSwgMjI0LCAxMzksIDcyLCA3NywgMSwgMjI0LCAxMzksIDIzNywgMTMzLCA3NywgMSwgMjI0LCAKKyAgICAxMzksIDIyMCwgMTEwLCA3NywgMSwgMjI0LCAxMzksIDY4LCA3NywgMSwgMjI0LCAxMzksIDI1NCwgMTIzLCA3NywgMSwgCisgICAgMjI0LCAxMzksIDE3NSwgNzcsIDEsIDIyNCwgMTM5LCAyNDUsIDAsIDc3LCAxLCAyMjQsIDEzOSwgMTU1LCA3NywgMSwgMjI0LCAKKyAgICAxMzksIDE4NywgNzcsIDEsIDIyNCwgMTM5LCAyMjUsIDI1LCA3NywgMSwgMjI0LCAxMzksIDIyMiwgMTU1LCA3NywgMSwgCisgICAgMjI0LCAxMzksIDI0OSwgMjA3LCA3NywgMSwgMjI0LCAxMzksIDIzNywgMTIzLCA3NywgMSwgMjI0LCAxMzksIDI0NiwgOCwgCisgICAgNzcsIDEsIDIyNCwgMTM5LCAyNDQsIDI1MywgNzcsIDEsIDIyNCwgMTM5LCAyNDMsIDIxMSwgNzcsIDEsIDIyNCwgMTM5LCAKKyAgICAyMjEsIDU1LCA3NywgMSwgMjI0LCAxMzksIDIxNywgMTE0LCA3NywgMSwgMjI0LCAxMzksIDIyOCwgMCwgNzcsIDEsIDIyNCwgCisgICAgMTM5LCAyNTEsIDY5LCA3NywgMSwgMjI0LCAxMzksIDIxNywgODAsIDc3LCAxLCAyMzQsIDg0LCA3MiwgNzcsIDEsIDIzNCwgCisgICAgODQsIDE3NSwgNzcsIDEsIDIzNCwgODQsIDIwMywgNzcsIDEsIDIzNCwgODQsIDI0NiwgOCwgNzcsIDEsIDIzNCwgODQsIAorICAgIDIxNywgODAsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI1NCwgOTYsIDEwNywgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIAorICAgIDIzOCwgMjE5LCA3OCwgMTA3LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyNDksIDE3NCwgNzcsIDEsIDI1NCwgMTYxLCAKKyAgICAyNDQsIDIzOCwgMjIwLCAxMjAsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIzNywgMTcwLCAyMjAsIDEyMCwgNzcsIDEsIAorICAgIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjUyLCAyMTIsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDE0OCwgMjUyLCAyMTIsIAorICAgIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDYwLCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCA3MiwgNzcsIDEsIDI1NCwgCisgICAgMTYxLCAyNDQsIDIzOCwgMTc1LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMzIsIDExNSwgNzcsIDEsIDI1NCwgMTYxLCAKKyAgICAyNDQsIDIzOCwgMjUxLCAxNjksIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIyMSwgMjksIDc3LCAxLCAyNTQsIDE2MSwgCisgICAgMjQ0LCAyMzgsIDIyMSwgMTksIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI0OSwgMTMyLCA3NywgMSwgMjU0LCAxNjEsIAorICAgIDI0NCwgMjM4LCAyMzEsIDIxNywgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjIyLCAxNTUsIDc3LCAxLCAyNTQsIDE2MSwgCisgICAgMjQ0LCAyMzgsIDI0OSwgMjA3LCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAxODcsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAKKyAgICAyMzgsIDIyOSwgMTQxLCA3NywgMSwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMjMsIDIxOCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIAorICAgIDIzOCwgMjE3LCA4MCwgNzcsIDEsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjE3LCAxMTQsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAKKyAgICAyMzgsIDI1NCwgMjAyLCA3NywgMSwgMjIxLCAxMzcsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjIyLCAxNTUsIDc3LCAxLCAyMjEsIAorICAgIDEzNywgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMTcsIDgwLCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAKKyAgICAyNDQsIDEyNSwgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjMyLCAxMTUsIDc3LCAxLCAyMzQsIDg0LCAKKyAgICAyNTQsIDE2MSwgMjQ0LCAyMzgsIDI1MSwgMTY5LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyMzcsIAorICAgIDEwMywgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjIxLCAyOSwgNzcsIDEsIDIzNCwgODQsIDI1NCwgCisgICAgMTYxLCAyNDQsIDIzOCwgMjQ5LCAxMTYsIDc3LCAxLCAyMzQsIDg0LCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDIyMiwgMTU1LCAKKyAgICA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyNDksIDM2LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIAorICAgIDI0NCwgMjM4LCAyMjMsIDIxOCwgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjUwLCA1NywgNzcsIDEsIAorICAgIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjE3LCA4MCwgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgCisgICAgMjE3LCAxMTQsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIDE0NCwgNjgsIDc3LCAxLCAyNTQsIDE2MSwgMjQ0LCAyMzgsIAorICAgIDE0NCwgMTg0LCA3NywgMSwgMjM0LCA4NCwgMjU0LCAxNjEsIDI0NCwgMjM4LCAyNTIsIDk0LCA3NywgMSwgMjU0LCAxNjEsIAorICAgIDI0NCwgMjM4LCAyNDksIDE5NywgNzcsIDEsIDIzNCwgODQsIDI1NCwgMTYxLCAyNDQsIDIzOCwgMjM1LCA3OSwgMTgsIDE5LCAKKyAgICAyMzAsIDYzLCAxOCwgMTksIDI1MywgMjEyLCAxOCwgMTksIDI1NSwgMTQsIDE4LCAxOSwgMjE4LCAyMjksIDE4LCAxOSwgCisgICAgMjI5LCA3LCAxOCwgMTksIDIyOSwgMjA1LCAxOCwgMTksIDIyOCwgMTcyLCAxOCwgMTksIDIyMiwgOTYsIDE4LCAxOSwgMjM2LCAKKyAgICAxOTEsIDE4LCAxOSwgMjM1LCAyMzIsIDE4LCAxOSwgMjM0LCA0NSwgMTgsIDE5LCAyMzEsIDE3MiwgMTgsIDE5LCAyMzIsIAorICAgIDE5OSwgMTgsIDE5LCAyMzUsIDEzMiwgMTgsIDE5LCAyMjQsIDEsIDE4LCAxOSwgMjI2LCAxMTgsIDE4LCAxOSwgMjI0LCAKKyAgICAxNzUsIDE4LCAxOSwgMjI0LCAyNDksIDE4LCAxOSwgMjI0LCAxNTAsIDE4LCAxOSwgMjE3LCAyMDgsIDE4LCAxOSwgMjE4LCAKKyAgICAzMCwgMTgsIDE5LCAyMjcsIDIyMiwgMTgsIDE5LCAyMzEsIDgyLCAxOCwgMTksIDIzMCwgMTU1LCAyMzEsIDgyLCAxOCwgMTksIAorICAgIDIzMSwgODEsIDE4LCAxOSwgMjMwLCAxNTUsIDIzMSwgODEsIDE4LCAxOSwgMjMxLCA4MCwgMTgsIDE5LCAyMzAsIDE1NSwgCisgICAgMjMxLCA4MCwgMTgsIDE5LCAyMzEsIDc5LCAxOCwgMTksIDIzMCwgMTU1LCAyMzEsIDc5LCAxOCwgMTksIDIyNiwgMjQ4LCAKKyAgICAxOCwgMTksIDIyNiwgMjQ3LCAxOCwgMTksIDIyNiwgMjQ2LCAxOCwgMTksIDIyNiwgMjQ1LCAxOCwgMTksIDIyNiwgMjQ0LCAKKyAgICAxOCwgMTksIDIyNiwgMjUyLCAxOCwgMTksIDIzMCwgMTU1LCAyMzAsIDU5LCAxOCwgMTksIDIzMCwgMTU1LCAyMjIsIDIwMSwgCisgICAgMTgsIDE5LCAyMzAsIDE1NSwgMjM3LCAxNywgMTgsIDE5LCAyMzAsIDE1NSwgMjUxLCAyMDIsIDE4LCAxOSwgMjMwLCAxNTUsIAorICAgIDE4OSwgMTgsIDE5LCAyMzAsIDE1NSwgMjA3LCAxOCwgMTksIDIzMCwgMTU1LCAxOTgsIDE4LCAxOSwgMjMwLCAxNTUsIDIyNSwgCisgICAgMjcsIDE4LCAxOSwgMjQ3LCA0LCAyMTksIDQwLCAxOCwgMTksIDIxOCwgMjE1LCAyMTksIDQwLCAxOCwgMTksIDM5LCAzLCAKKyAgICAyMjcsIDkzLCAxOCwgMTksIDM5LCAyMjcsIDI0MSwgMjQ4LCAxNDUsIDE4LCAxOSwgMjI4LCAzOCwgMjI2LCAyNDksIDE4LCAKKyAgICAxOSwgMTM3LCAyMzQsIDI0OCwgMTgsIDE5LCAxMzcsIDIzNSwgMTg3LCAxOCwgMTksIDIyMSwgMjE0LCAxOCwgMTksIDIyMSwgCisgICAgMjE2LCAxOCwgMTksIDIyMSwgMTMsIDE4LCAxOSwgMjIxLCAxNCwgMTgsIDE5LCAyMjEsIDE4LCAxOCwgMTksIDIyMSwgMTQ1LCAKKyAgICAxOCwgMTksIDIyMSwgMTQ3LCAxOCwgMTksIDIyNiwgMTE2LCAyMjQsIDE1NSwgMTgsIDE5LCAyMjYsIDExNiwgMjI0LCAxOTUsIAorICAgIDE4LCAxOSwgMjI2LCAxMTYsIDI0MiwgMjQ4LCAxOCwgMTksIDY0LCAyNDMsIDIzOCwgMTgsIDE5LCA2NCwgMjQ5LCA2MCwgCisgICAgMjQ0LCAxODQsIDE4LCAxOSwgNjQsIDI0NCwgMjUzLCAxOCwgMTksIDY0LCAyNDMsIDI0MywgMTgsIDE5LCAyMjYsIDExNiwgCisgICAgMjM3LCAyNywgMTgsIDE5LCA2NCwgMjM3LCAyNSwgMTgsIDE5LCAyNTIsIDEzOSwgMjQ5LCA2MCwgMTUzLCAxOCwgMTksIAorICAgIDI1MiwgMTM5LCAyNDksIDYwLCAxNTIsIDE4LCAxOSwgNjQsIDI0OSwgNTUsIDE5OCwgMTk1LCAyMTksIDU5LCAyMzUsIDg0LCAKKyAgICAxOTUsIDEsIDE3NSwgMTk1LCAxLCAyMzYsIDE0OSwgMTk1LCAxLCAyNDUsIDAsIDE5NSwgMSwgMjQ0LCAxMjUsIDE5NSwgMSwgCisgICAgMjMyLCAxMTUsIDE5NSwgMSwgMjUxLCAxNjksIDE5NSwgMSwgMjUxLCA2OSwgMTk1LCAxLCAyMzcsIDEyMywgMTk1LCAxLCAKKyAgICAyMzcsIDEwMywgMTk1LCAxLCAyMTgsIDQ3LCAxOTUsIDEsIDIyMiwgMTU1LCAxOTUsIDEsIDIyMiwgMzUsIDE5NSwgMSwgCisgICAgMjQ5LCAyMDcsIDE5NSwgMSwgMjQ5LCAzNiwgMTk1LCAxLCAyMDgsIDE5NSwgMSwgMTg3LCAxOTUsIDEsIDIyOSwgMTQxLCAKKyAgICAxOTUsIDEsIDI1MiwgMjM3LCAxOTUsIDEsIDI1MiwgOTQsIDE5NSwgMSwgMTk2LCAxOTUsIDEsIDE4NCwgMTk1LCAxLCAyMDMsIAorICAgIDE5NSwgMSwgMjM1LCAxODgsIDE5NSwgMSwgMjE5LCA3LCAxOTUsIDEsIDIyNSwgMjUsIDE5NSwgMSwgMjIzLCAyMTgsIDE5NSwgCisgICAgMSwgMjI2LCAxNzcsIDE5NSwgMSwgMTU1LCAxOTUsIDI5LCA1LCA2MCwgMTk1LCAyOSwgNSwgNzIsIDE5NSwgMjksIDUsIDY4LCAKKyAgICAxOTUsIDI5LCA1LCAyNDYsIDI1MCwgMTk1LCAyOSwgNSwgMjU0LCAxOTYsIDE5NSwgMjksIDUsIDIzMCwgMTI3LCAxOTUsIAorICAgIDI5LCA1LCAyNTMsIDIzMiwgMTk1LCAyOSwgNSwgNzMsIDE5NSwgMjksIDUsIDc0LCAxOTUsIDIyMywgOTcsIDEsIDE4NCwgCisgICAgMTk1LCAyMjMsIDk3LCAxLCAyMDMsIDE5NSwgMjIzLCA5NywgMSwgMjE5LCA3LCAxOTUsIDMsIDEsIDE3NSwgMTk1LCAzLCAxLCAKKyAgICAyMzIsIDExNSwgMTk1LCAzLCAxLCAyNTQsIDk1LCAxOTUsIDMsIDEsIDIyMiwgMTU1LCAxOTUsIDMsIDEsIDIwOCwgMTk1LCAKKyAgICAzLCAxLCAxODcsIDE5NSwgMywgMSwgMTk2LCAxOTUsIDMsIDEsIDIwMywgMTk1LCAzLCAxLCAyMzUsIDE4OCwgMTk1LCA1LCAKKyAgICAyMzMsIDg5LCAxOTUsIDUsIDIzNiwgMTczLCAxOTUsIDUsIDIyNiwgMTc2LCAxOTUsIDUsIDIzNCwgMjQ4LCAxOTUsIDI0NiwgCisgICAgOTUsIDc4LCAxOTUsIDIyOCwgODIsIDc4LCAxOTUsIDIwLCAyMTcsIDg0LCAxOTUsIDIwLCAxMDcsIDE5NSwgMjAsIDEwMywgCisgICAgMTk1LCAyMCwgMTYwLCAxOTUsIDIwLCAxNTQsIDE5NSwgMjAsIDE3NCwgMTk1LCAyMCwgMTgyLCAxOTUsIDIwLCAxOTEsIAorICAgIDE5NSwgMjAsIDE4NSwgMTk1LCAyMCwgMTkwLCAzNywgMjM1LCAxMjMsIDEsIDE3NSwgMzcsIDIzNSwgMTIzLCAxLCAyMTgsIAorICAgIDEzOCwgMzcsIDIzNSwgMTIzLCAxLCAyMzIsIDExNSwgMzcsIDIzNSwgMTIzLCAxLCAyMjEsIDU1LCAzNywgMjM1LCAxMjMsIAorICAgIDEsIDIyNiwgMTc3LCAzNywgMjM1LCAxMjMsIDEsIDE4NCwgMzcsIDIzNSwgMTIzLCAxLCAyMjIsIDE1NSwgMzcsIDIzNSwgCisgICAgMTIzLCAxLCAyMjIsIDM1LCAzNywgMjM1LCAxMjMsIDEsIDIzNSwgMTg4LCAzNywgMjM1LCAxMjMsIDEsIDE4NywgMzcsIAorICAgIDIzNSwgMTIzLCAxLCAyMjksIDE0MSwgMzcsIDIzNSwgMTIzLCAxLCAxOTYsIDM3LCAyMzUsIDEyMywgMSwgMjQ2LCA4LCAzNywgCisgICAgMjM1LCAxMjMsIDEsIDIxOSwgMTg5LCAzNywgMjM1LCAxMjMsIDEsIDE1NSwgMzcsIDIzNSwgMTIzLCAxLCAyMjgsIDE1NSwgCisgICAgMzcsIDIzNSwgMTIzLCAxLCAyMzYsIDE0OSwgMzcsIDIzNSwgMTIzLCAxLCAyMjEsIDQ3LCAzNywgMjM1LCAxMjMsIDEsIAorICAgIDIwOCwgMzcsIDIzNSwgMTIzLCAxLCA2MCwgMzcsIDIzNSwgMTIzLCAxLCA3MiwgMzcsIDIzNSwgMTIzLCAxLCAyNDYsIDI1MCwgCisgICAgMzcsIDIzNSwgMTIzLCAxLCAyNDYsIDIzOSwgMzcsIDIzNSwgMTIzLCAxLCA2OCwgMzcsIDIzNSwgMTIzLCAxLCAyMzAsIAorICAgIDEyNywgMzcsIDIzNSwgMTIzLCAxLCA3NCwgMzcsIDIzNSwgMTIzLCAxLCAyMjAsIDExMCwgMzcsIDIzNSwgMTIzLCAxLCA3MywgCisgICAgMzcsIDIzNSwgMTIzLCAxLCAyNTMsIDIzMSwgMzcsIDIzNSwgMTIzLCAxLCAyNTQsIDE5NiwgMzcsIDIzNSwgMTIzLCAxLCAKKyAgICAyMjEsIDEzMCwgMzcsIDIzNSwgMTIzLCAxLCAyMjEsIDEyOSwgMzcsIDIzNSwgMTIzLCAxLCAyMjEsIDEyOCwgMzcsIDIzNSwgCisgICAgMTIzLCAxLCAyMjEsIDEyNywgMzcsIDIzNSwgMTIzLCAxLCAyMjEsIDEyNiwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyOCwgCisgICAgMTU1LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjI4LCAxNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTE2LCAxNzUsIDE0NiwgMzcsIAorICAgIDE1MSwgMSwgMTE2LCAyMTgsIDEzOCwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIzMiwgMTE1LCAxNDYsIDM3LCAxNTEsIDEsIAorICAgIDEwOSwgMTc1LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjE4LCAxMzgsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMzIsIDExNSwgCisgICAgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyMSwgNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTE2LCAyMjYsIDE3NywgMTQ2LCAzNywgCisgICAgMTUxLCAxLCAxMTYsIDE4NCwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIyMSwgNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAKKyAgICAyMjYsIDE3NywgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDE4NCwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyMiwgMTU1LCAxNDYsIAorICAgIDM3LCAxNTEsIDEsIDExNiwgMjIyLCAzNSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIwOCwgMTQ2LCAzNywgMTUxLCAxLCAKKyAgICAxMDksIDIyMiwgMTU1LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjIyLCAzNSwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIwOCwgCisgICAgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDE4NywgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIyOSwgMTQxLCAxNDYsIDM3LCAxNTEsIAorICAgIDEsIDExNiwgMTk2LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMTg3LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjI5LCAxNDEsIAorICAgIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAxOTYsIDE0NiwgMzcsIDE1MSwgMSwgMTE2LCAyNDYsIDgsIDE0NiwgMzcsIDE1MSwgMSwgCisgICAgMTE2LCAyMTksIDE4OSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDIzNSwgMTg4LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjQ2LCAKKyAgICA4LCAxNDYsIDM3LCAxNTEsIDEsIDEwOSwgMjE5LCAxODksIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyMzUsIDE4OCwgMTQ2LCAKKyAgICAzNywgMTUxLCAxLCAxMTYsIDE1NSwgMTQ2LCAzNywgMTUxLCAxLCAxMTYsIDI0OSwgMjA3LCAxNDYsIDM3LCAxNTEsIDEsIAorICAgIDExNiwgMjUyLCAyMzcsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAxNTUsIDE0NiwgMzcsIDE1MSwgMSwgMTA5LCAyNDksIDIwNywgCisgICAgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDI1MiwgMjM3LCAxNDYsIDM3LCAxNTEsIDEsIDExNiwgMjM1LCAyMzYsIDE0NiwgMzcsIAorICAgIDE1MSwgMSwgMTE2LCAyMTgsIDExMSwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIzNSwgMjM2LCAxNDYsIDM3LCAxNTEsIDEsIAorICAgIDEwOSwgMjE4LCAxMTEsIDE0NiwgMzcsIDE1MSwgMSwgMTE2LCAyMjMsIDEwMiwgMTQ2LCAzNywgMTUxLCAxLCAxMDksIDIyMywgCisgICAgMTAyLCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyOSwgMjI0LCAxODEsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDI1NSwgNTgsIAorICAgIDE0NiwgMzcsIDE1MSwgMjksIDUsIDIzNywgMjU1LCAxNDYsIDM3LCAxNTEsIDI5LCA1LCA2OCwgMTQ2LCAzNywgMTUxLCAyOSwgCisgICAgNSwgMjIwLCAyMywgMTQ2LCAzNywgMTUxLCAyOSwgNSwgNzMsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDI1NCwgMjM0LCAxNDYsIAorICAgIDM3LCAxNTEsIDI5LCA1LCA3NCwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjMwLCAxODUsIDE0NiwgMzcsIDE1MSwgMjksIDUsIAorICAgIDIyMCwgMTEwLCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyNTMsIDIxMiwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjU1LCAxNCwgCisgICAgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjIwLCAxNiwgMTQ2LCAzNywgMTUxLCAyOSwgNSwgMjMwLCA2MywgMTQ2LCAzNywgMTUxLCAKKyAgICAyOSwgNSwgMjMwLCAxODIsIDE0NiwgMzcsIDE1MSwgMjksIDUsIDIyMCwgMTA3LCAxNDYsIDM3LCAxNTEsIDI5LCA1LCAyMzcsIAorICAgIDEzMywgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMjE2LCAyMTYsIDE0NiwgMzcsIDE1MSwgMSwgMzksIDIzMiwgMTE3LCAxNDYsIAorICAgIDM3LCAxNTEsIDEsIDM5LCAyMDcsIDE0NiwgMzcsIDE1MSwgMSwgMzksIDE4OSwgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMjM3LCAKKyAgICAxNywgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMjUwLCA0NiwgMTQ2LCAzNywgMTUxLCAxLCAzOSwgMjUzLCAyMDQsIDE0NiwgMzcsIAorICAgIDE1MSwgMTQ1LCAyMzQsIDY3LCAxNDYsIDM3LCAxNTEsIDE0NSwgMjM0LCA2NiwgMTQ2LCAzNywgMTUxLCAyMCwgMjE3LCA4NCwgCisgICAgMTQ2LCAzNywgMTUxLCAyMCwgMTA3LCAxNDYsIDM3LCAxNTEsIDIwLCAxMDMsIDE0NiwgMzcsIDE1MSwgMjAsIDE2MCwgMTQ2LCAKKyAgICAzNywgMTUxLCAyMCwgMTU0LCAxNDYsIDM3LCAxNTEsIDIwLCAxNzQsIDE0NiwgMzcsIDE1MSwgMjAsIDE4MiwgMTQ2LCAzNywgCisgICAgMTUxLCAyMCwgMTkxLCAxNDYsIDM3LCAxNTEsIDIwLCAxODUsIDE0NiwgMzcsIDE1MSwgMjAsIDE5MCwgMTQ2LCAzNywgMTUxLCAKKyAgICA4MywgMjAsIDEwNywgMTQ2LCAzNywgMTUxLCA1LCAyMzUsIDE3NywgMTQ2LCAzNywgMTUxLCA1LCAyMzUsIDE3NiwgNzksIAorICAgIDE2LCAyMjksIDIxMSwgNzksIDE2LCAyMzMsIDczLCAyMzYsIDU1LCA3OSwgMTYsIDIyOSwgNzcsIDIzNiwgNTUsIDc5LCAxNiwgCisgICAgMjUyLCAxMjQsIDIzNiwgNTUsIDc5LCAxNiwgMjUxLCAyMzQsIDIzNiwgNTUsIDc5LCAxNiwgMjI5LCAyLCAyMzYsIDU1LCAKKyAgICA3OSwgMTYsIDIyOCwgMjUyLCAyMzYsIDU1LCA3OSwgMTYsIDIyOCwgMjUwLCAyMzYsIDU1LCA3OSwgMTYsIDIyOSwgMCwgCisgICAgMjM2LCA1NSwgNzksIDE2LCAyMjgsIDI1NCwgMjM2LCA1NSwgNzksIDE2LCAyNDksIDE2MywgMjM2LCA1NSwgNzksIDE2LCAKKyAgICAyNDksIDE1OSwgMjM2LCA1NSwgNzksIDE2LCAyNDksIDE1OCwgMjM2LCA1NSwgNzksIDE2LCAyNDksIDE2MSwgMjM2LCA1NSwgCisgICAgNzksIDE2LCAyNDksIDE2MCwgMjM2LCA1NSwgNzksIDE2LCAyNDksIDE1NywgMjM2LCA1NSwgNzksIDE2LCAyMjAsIDIzMCwgCisgICAgNzksIDE2LCAyMzMsIDczLCAyMjcsIDcwLCA3OSwgMTYsIDIyOSwgNzcsIDIyNywgNzAsIDc5LCAxNiwgMjUyLCAxMjQsIAorICAgIDIyNywgNzAsIDc5LCAxNiwgMjUxLCAyMzQsIDIyNywgNzAsIDc5LCAxNiwgMjI5LCAyLCAyMjcsIDcwLCA3OSwgMTYsIDIyOCwgCisgICAgMjUyLCAyMjcsIDcwLCA3OSwgMTYsIDIyOCwgMjUwLCAyMjcsIDcwLCA3OSwgMTYsIDIyOSwgMCwgMjI3LCA3MCwgNzksIDE2LCAKKyAgICAyMjgsIDI1NCwgMjI3LCA3MCwgNzksIDE2LCAyNDksIDE2MywgMjI3LCA3MCwgNzksIDE2LCAyNDksIDE1OSwgMjI3LCA3MCwgCisgICAgNzksIDE2LCAyNDksIDE1OCwgMjI3LCA3MCwgNzksIDE2LCAyNDksIDE2MSwgMjI3LCA3MCwgNzksIDE2LCAyNDksIDE2MCwgCisgICAgMjI3LCA3MCwgNzksIDE2LCAyNDksIDE1NywgMjI3LCA3MCwgMjUxLCAyNDYsIDEsIDE3NSwgMjUxLCAyNDYsIDEsIDI0NSwgCisgICAgMCwgMjUxLCAyNDYsIDEsIDIzMiwgMTE1LCAyNTEsIDI0NiwgMSwgMjMyLCA4NywgMjUxLCAyNDYsIDEsIDE4NywgMjUxLCAKKyAgICAyNDYsIDEsIDI1MiwgMjM3LCAyNTEsIDI0NiwgMSwgMTk2LCAyNTEsIDI0NiwgMSwgMjMzLCAxMDIsIDI1MSwgMjQ2LCAxLCAKKyAgICAyMjIsIDE1NSwgMjUxLCAyNDYsIDEsIDI0OSwgMjA3LCAyNTEsIDI0NiwgMSwgMjA4LCAyNTEsIDI0NiwgMSwgMjMxLCAxNzEsIAorICAgIDI1MSwgMjQ2LCAxLCAyNTEsIDE2OSwgMjUxLCAyNDYsIDEsIDIzNywgMTIzLCAyNTEsIDI0NiwgMSwgMjMxLCA3NywgMjUxLCAKKyAgICAyNDYsIDEsIDIzMSwgNzUsIDI1MSwgMjQ2LCAxLCAxODQsIDI1MSwgMjQ2LCAxLCAyMDMsIDI1MSwgMjQ2LCAxLCAyMzUsIAorICAgIDE4OCwgMjUxLCAyNDYsIDEsIDIxOSwgMTg5LCAyNTEsIDI0NiwgMSwgMjI2LCAxNzcsIDI1MSwgMjQ2LCAxLCA2MCwgMjUxLCAKKyAgICAyNDYsIDEsIDE1NSwgMjUxLCAyNDYsIDI5LCA1LCA3MiwgMjUxLCAyNDYsIDI5LCA1LCA2OCwgMjUxLCAyNDYsIDI5LCA1LCAKKyAgICA3MywgMjUxLCAyNDYsIDI5LCA1LCA3NCwgMjUxLCAyNDYsIDI5LCA1LCAyNTQsIDIzNCwgMjUxLCAyNDYsIDIzMCwgMjQsIAorICAgIDI1MSwgMjQ2LCAyNDYsIDE5MCwgMTE3LCAyMjYsIDg2LCAzNywgODMsIDEsIDExNiwgMTc1LCAzNywgODMsIDEsIDExNiwgCisgICAgMjM2LCAxNDksIDM3LCA4MywgMSwgMTE2LCAyMzUsIDIyNCwgMzcsIDgzLCAxLCAxMDksIDE3NSwgMzcsIDgzLCAxLCAxMDksIAorICAgIDIzNSwgMjI0LCAzNywgODMsIDEsIDEwOSwgMjM2LCAxNDksIDM3LCA4MywgMSwgMjMyLCAxMTUsIDM3LCA4MywgMSwgMTE2LCAKKyAgICAyNTEsIDE2OSwgMzcsIDgzLCAxLCAxMTYsIDI1MSwgNjksIDM3LCA4MywgMSwgMTA5LCAyNTEsIDE2OSwgMzcsIDgzLCAxLCAKKyAgICAxMDksIDIyNiwgMTc3LCAzNywgODMsIDEsIDEwOSwgMjUxLCA2OSwgMzcsIDgzLCAxLCAyMzEsIDc3LCAzNywgODMsIDEsIAorICAgIDIyNywgMjI3LCAzNywgODMsIDEsIDExNiwgMjI3LCAyMjUsIDM3LCA4MywgMSwgMjQ5LCAyMDcsIDM3LCA4MywgMSwgMTA5LCAKKyAgICAyMjcsIDIyNSwgMzcsIDgzLCAxLCAyMjcsIDIzNSwgMzcsIDgzLCAxLCAxMTYsIDIyMiwgMTU1LCAzNywgODMsIDEsIDExNiwgCisgICAgMjIyLCAzNSwgMzcsIDgzLCAxLCAxMDksIDIyMiwgMTU1LCAzNywgODMsIDEsIDEwOSwgMjIyLCAzNSwgMzcsIDgzLCAxLCAKKyAgICAyMDgsIDM3LCA4MywgMSwgMjUyLCAyMzcsIDM3LCA4MywgMSwgMTE2LCAxODcsIDM3LCA4MywgMSwgMTE2LCAyMjksIDE0MSwgCisgICAgMzcsIDgzLCAxLCAxMTYsIDI0NiwgOCwgMzcsIDgzLCAxLCAxMDksIDE4NywgMzcsIDgzLCAxLCAxMDksIDI0NiwgOCwgMzcsIAorICAgIDgzLCAxLCAxMDksIDIyOSwgMTQxLCAzNywgODMsIDEsIDE5NiwgMzcsIDgzLCAxLCAxMDksIDE4NCwgMzcsIDgzLCAxLCAKKyAgICAxMTYsIDE4NCwgMzcsIDgzLCAxLCAyMDMsIDM3LCA4MywgMSwgMjI3LCAxOSwgMzcsIDgzLCAxLCAyMzUsIDE4OCwgMzcsIAorICAgIDgzLCAxLCAyMzQsIDIyNywgMzcsIDgzLCAxLCAyMTksIDcsIDM3LCA4MywgMSwgMTE2LCAyMjUsIDI1LCAzNywgODMsIDEsIAorICAgIDExNiwgMjIzLCAyMTgsIDM3LCA4MywgMSwgMTE2LCAyMjYsIDE3NywgMzcsIDgzLCAxLCAxMTYsIDE1NSwgMzcsIDgzLCAxLCAKKyAgICAyMzUsIDE3LCAzNywgODMsIDEsIDYwLCAzNywgODMsIDEsIDEwOSwgMTU1LCAzNywgODMsIDEsIDcyLCAzNywgODMsIDEsIAorICAgIDIzNywgMjU1LCAzNywgODMsIDEsIDY4LCAzNywgODMsIDEsIDIyMCwgMjMsIDM3LCA4MywgMSwgMjQ2LCAyNTAsIDM3LCA4MywgCisgICAgMSwgMjMwLCAxMjcsIDM3LCA4MywgMSwgMjM1LCAxNzcsIDM3LCA4MywgMSwgMjQ0LCAzMiwgMjI2LCAxNzcsIDM3LCA4MywgCisgICAgMjUwLCAxNDcsIDUsIDEyOCwgMjAzLCAzNywgODMsIDI1MCwgMTQ3LCA1LCAxMjgsIDIzNSwgMTg4LCAzNywgODMsIDI1MCwgCisgICAgMTQ3LCA1LCAyMzUsIDE4OSwgMjIyLCAxMTgsIDIzNSwgMTY3LCAzNywgODMsIDUsIDIzNCwgMTAwLCAyMzYsIDIzMCwgMjM1LCAKKyAgICAxNjcsIDM3LCA4MywgMjUwLCAxNDcsIDUsIDM5LCAyMzIsIDExNSwgMzcsIDgzLCAyNTAsIDE0NywgNSwgMTA5LCAxODcsIAorICAgIDM3LCA4MywgMjUwLCAxNDcsIDUsIDExNiwgMjI3LCAyMjYsIDE1NiwgMTA5LCAxODcsIDM3LCA4MywgMjUwLCAxNDcsIDUsIAorICAgIDE5NiwgMzcsIDgzLCAyNTAsIDE0NywgNSwgMjUyLCAyMzcsIDM3LCA4MywgMjUwLCAxNDcsIDUsIDIyNiwgMTc3LCAzNywgCisgICAgODMsIDUsIDIyNiwgMTU4LCAzNywgODMsIDI5LCA1LCA2MCwgMzcsIDgzLCAyOSwgNSwgMjM0LCAxMDAsIDIyNiwgMTI3LCAKKyAgICAzNywgODMsIDI5LCA1LCAyNTUsIDU4LCAzNywgODMsIDI5LCA1LCAyMjIsIDEyMywgMjU1LCA1OCwgMzcsIDgzLCAyOSwgNSwgCisgICAgNzIsIDM3LCA4MywgMjksIDUsIDIzNywgMjU1LCAzNywgODMsIDI5LCA1LCAyMjAsIDExMCwgMzcsIDgzLCAyOSwgNSwgMjIwLCAKKyAgICAyMiwgMzcsIDgzLCAyOSwgNSwgNjgsIDM3LCA4MywgMjksIDUsIDIyMCwgMjMsIDM3LCA4MywgMjksIDUsIDc0LCAzNywgODMsIAorICAgIDI5LCA1LCAyMzAsIDE4NiwgNTYsIDM3LCA4MywgMjksIDUsIDIzMCwgNjMsIDM3LCA4MywgMjksIDUsIDczLCAzNywgODMsIAorICAgIDI5LCA1LCAyNTQsIDIzNCwgMzcsIDgzLCAyOSwgNSwgMjMwLCAxMjcsIDM3LCA4MywgMjksIDUsIDI1NCwgMTk2LCAzNywgCisgICAgODMsIDI5LCA1LCA4MywgMjU0LCAxOTYsIDM3LCA4MywgMjksIDUsIDIzMCwgMTg2LCA1MCwgMzcsIDgzLCA1LCAyMzQsIAorICAgIDEwMCwgMjM2LCAyMjksIDM3LCA4MywgNSwgMjIxLCAxMzEsIDM3LCA4MywgNSwgMjIxLCAxMzAsIDM3LCA4MywgNSwgMjM2LCAKKyAgICAxMTgsIDIyMSwgMTI5LCAzNywgODMsIDUsIDIzNiwgMTE4LCAyMjEsIDEyOCwgMzcsIDgzLCA1LCAyMzYsIDExOCwgMjIxLCAKKyAgICAxMjcsIDM3LCA4MywgNSwgMjI4LCAzLCAyNDMsIDIxMCwgMzcsIDgzLCA1LCAyMzQsIDEwMCwgMjI2LCAxNDgsIDM3LCA4MywgCisgICAgNSwgMjM2LCAxMTcsIDIzNiwgMjE1LCAzNywgODMsIDM2LCAyNTAsIDkzLCAyNDgsIDE0NSwgMzcsIDgzLCAyNDIsIDI0MywgCisgICAgMjAsIDIxNywgODQsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxMDcsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxMDMsIDM3LCAKKyAgICA4MywgMjQyLCAyNDMsIDIwLCAxNjAsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxNTQsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAKKyAgICAxNzQsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxODIsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxOTEsIDM3LCA4MywgMjQyLCAKKyAgICAyNDMsIDIwLCAxODUsIDM3LCA4MywgMjQyLCAyNDMsIDIwLCAxOTAsIDM3LCA4MywgODMsIDIwLCAyMTcsIDg0LCAzNywgODMsIAorICAgIDgzLCAyMCwgMTA3LCAzNywgODMsIDgzLCAyMCwgMTAzLCAzNywgODMsIDgzLCAyMCwgMTYwLCAzNywgODMsIDgzLCAyMCwgCisgICAgMTU0LCAzNywgODMsIDgzLCAyMCwgMTc0LCAzNywgODMsIDgzLCAyMCwgMTgyLCAzNywgODMsIDgzLCAyMCwgMTkxLCAzNywgCisgICAgODMsIDgzLCAyMCwgMTg1LCAzNywgODMsIDgzLCAyMCwgMTkwLCAzNywgODMsIDUsIDIxOCwgMjAzLCAzNywgODMsIDUsIAorICAgIDIxOCwgMjAyLCAzNywgODMsIDUsIDIyNiwgMTIxLCAzNywgODMsIDUsIDIzNiwgMTYzLCAzNywgODMsIDUsIDI0MiwgMTgwLCAKKyAgICAzNywgODMsIDUsIDI0OCwgMTU3LCAzNywgODMsIDUsIDIxMCwgMjI3LCA1OSwgMjI3LCAyMzUsIDM3LCA4MywgNSwgMjM0LCAKKyAgICAxMDAsIDIxOCwgNDgsIDM3LCA4MywgNSwgMjM3LCAxLCAzNywgODMsIDUsIDIzNywgMCwgMzcsIDgzLCA1LCAyMjYsIDEyNiwgCisgICAgMzcsIDgzLCA1LCAyMjYsIDEyNSwgMzcsIDgzLCA1LCAyNDMsIDE4NiwgMzcsIDgzLCA1LCAyNTEsIDE2NiwgOTQsIDUsIAorICAgIDIyMCwgOTcsIDIyNywgMTQ0LCA5NCwgNSwgMjIwLCA5NywgMjUxLCAxNDgsIDk0LCA1LCAyNTEsIDk1LCA5NCwgNSwgMjIzLCAKKyAgICA1MSwgOTQsIDUsIDI1MiwgNjQsIDk0LCAxLCAyNTQsIDE4MCwgOTQsIDEsIDI1NCwgMTgxLCAyMjIsIDgyLCA5NCwgMSwgCisgICAgMjM3LCAyNTEsIDk0LCAxLCAyMzcsIDI1MiwgMjIyLCA4MiwgOTQsIDEsIDIyMCwgMTAwLCA5NCwgMSwgMjIwLCAxMDEsIAorICAgIDIyMiwgODIsIDk0LCAxLCAyMjgsIDMsIDIyNywgMTgzLCA5NCwgMSwgMjI4LCAzLCAyMjcsIDE4NCwgMjIyLCA4MiwgOTQsIAorICAgIDEsIDIzNSwgMTg5LCAyMzUsIDk1LCA5NCwgMSwgMjM1LCAxODksIDIzNSwgOTYsIDIyMiwgODIsIDk0LCAxLCAyNDYsIDIyMiwgCisgICAgOTQsIDEsIDI1NCwgMTk0LCA5NCwgMSwgMjMwLCAxNTMsIDk0LCAxLCAyMzAsIDE1NCwgMjIyLCA4MiwgOTQsIDEsIDE3NSwgCisgICAgOTQsIDEsIDIwNiwgMjM0LCAxMDMsIDk0LCAxLCAyNDUsIDAsIDk0LCAxLCAyNDUsIDEsIDI0NCwgNTgsIDk0LCAxLCAyMzIsIAorICAgIDExNSwgOTQsIDEsIDI1MSwgMTY5LCA5NCwgMSwgMjUxLCAxNzAsIDIzNSwgMTc5LCA5NCwgMSwgMjM3LCAxMjMsIDk0LCAxLCAKKyAgICAyMzcsIDEyNCwgMjM3LCAxMDcsIDk0LCAxLCAyMzEsIDc3LCA5NCwgMSwgMjIyLCAxNTYsIDIzNSwgMTM4LCA5NCwgMSwgCisgICAgMjIyLCAxNTYsIDIzMywgNjgsIDIzNCwgMTAzLCA5NCwgMSwgMjQ5LCAyMDgsIDIzMywgNjgsIDI1NCwgMTQ4LCA5NCwgMSwgCisgICAgMjQ5LCAyMDgsIDIzMywgNjgsIDIzNCwgMTAzLCA5NCwgMSwgMjMyLCAyMzgsIDIyNywgMjM4LCA5NCwgMSwgMjIyLCAxNTUsIAorICAgIDk0LCAxLCAyMjIsIDE1NiwgMjIyLCA5OSwgOTQsIDEsIDI0OSwgMjA3LCA5NCwgMSwgMjQ5LCAyMDgsIDIzNCwgMTA4LCA5NCwgCisgICAgMSwgMjA4LCA5NCwgMSwgMTg3LCA5NCwgMSwgMjMwLCA0NCwgMjM2LCAyMjUsIDk0LCAxLCAyNTIsIDIzNywgOTQsIDEsIAorICAgIDI1MiwgMjM4LCAyMzYsIDE3NCwgOTQsIDEsIDE5NiwgOTQsIDEsIDE4NCwgOTQsIDEsIDIwMywgOTQsIDEsIDIzNSwgMTg4LCAKKyAgICA5NCwgMSwgMjE5LCA3LCA5NCwgMSwgMjI2LCAxNzgsIDIyNiwgMTY0LCA5NCwgMSwgMjI2LCAxNzgsIDIyNiwgMTMyLCA5NCwgCisgICAgMSwgMjI2LCAxNzcsIDk0LCAxLCAxNTUsIDk0LCA1LCAyMjcsIDE3NywgOTQsIDI5LCA1LCAyMjIsIDgyLCA5NCwgMjksIDUsIAorICAgIDIyMCwgOTYsIDk0LCAyOSwgNSwgMjIwLCA5NywgMjI2LCAxMjksIDk0LCAyOSwgNSwgMjIzLCA3NywgOTQsIDI5LCA1LCAKKyAgICAyMjMsIDc4LCAyMzcsIDI0MywgOTQsIDI5LCA1LCAyMjgsIDMsIDIyNywgMTgzLCA5NCwgMjksIDUsIDIyOCwgMywgMjI3LCAKKyAgICAxODQsIDIyMiwgODIsIDk0LCAyOSwgNSwgMjM1LCAxODksIDIzNSwgOTUsIDk0LCAyOSwgNSwgMjM1LCAxODksIDIzNSwgOTYsIAorICAgIDIyMiwgODIsIDk0LCAyOSwgNSwgMjIyLCAxMjQsIDk0LCAyOSwgNSwgMjIyLCAxMjUsIDIyNywgMTgzLCA5NCwgMjksIDUsIAorICAgIDIyMiwgMTI1LCAyMjIsIDgyLCA5NCwgMjksIDUsIDIyMiwgMTI1LCAyMjcsIDE4NCwgMjIyLCA4MiwgOTQsIDI5LCA1LCAKKyAgICAyMjksIDE3MSwgOTQsIDI5LCA1LCAyMjksIDE3MiwgMjIyLCA4MiwgOTQsIDI1NCwgMjQwLCAyNTQsIDIzOSwgOTQsIDEsIAorICAgIDIzNiwgMjQ3LCAyMjYsIDEyOCwgOTQsIDEsIDIzNiwgMTIyLCAyMjYsIDEyOCwgOTQsIDEsIDIyMCwgMTgzLCAyMjYsIDEyOCwgCisgICAgOTQsIDEsIDI0NiwgMjQ1LCAyMjYsIDEyOCwgOTQsIDEsIDIxOSwgMTY2LCAyMjYsIDEyOCwgOTQsIDEsIDIxNywgMTA1LCAKKyAgICAyMjYsIDEyOCwgOTQsIDEsIDI1MywgMjQ2LCAyMjYsIDEyOCwgOTQsIDIwLCAyMTcsIDg0LCA5NCwgMjAsIDEwNywgOTQsIAorICAgIDIwLCAxMDMsIDk0LCAyMCwgMTYwLCA5NCwgMjAsIDE1NCwgOTQsIDIwLCAxNzQsIDk0LCAyMCwgMTgyLCA5NCwgMjAsIDE5MSwgCisgICAgOTQsIDIwLCAxODUsIDk0LCAyMCwgMTkwLCA5NCwgMjI5LCAyNTQsIDk0LCAyMzAsIDE5LCA5NCwgMjE4LCAxOTMsIDk0LCAKKyAgICAyNTEsIDEzMiwgMjMwLCAxMywgOTQsIDI1MSwgMTMyLCAyMjQsIDEyMiwgOTQsIDI1MSwgMTMyLCAyMjksIDIyOCwgOTQsIAorICAgIDIzMCwgMTgsIDk0LCAyNiwgMTYsIDI0OCwgMTUxLCA5NCwgMjYsIDE2LCAyNDksIDU5LCA5NCwgMjYsIDE2LCAyNDcsIDk3LCAKKyAgICA5NCwgMjYsIDE2LCAyNDksIDE2NSwgOTQsIDI2LCAxNiwgMjQ5LCAxNjYsIDIyMywgNTEsIDk0LCAyNiwgMTYsIDI0OCwgCisgICAgMjE4LCA5NCwgMjYsIDE2LCAyNDksIDIwMCwgOTQsIDI2LCAxNiwgMjQ5LCA0NCwgOTQsIDI2LCAxNiwgMjQ5LCAxODYsIDk0LCAKKyAgICAyNiwgMTYsIDI0OSwgMTY2LCAyNDQsIDE4NiwgOTQsIDI2LCAxNiwgMzYsIDIyMiwgNzksIDk0LCAyNiwgMTYsIDM2LCAyNDYsIAorICAgIDE4OCwgOTQsIDI2LCAxNiwgMzYsIDIzNiwgMTY5LCA5NCwgMjYsIDE2LCAzNiwgMjM2LCAxNzEsIDk0LCAyNiwgMTYsIDM2LCAKKyAgICAyMzcsIDExMSwgOTQsIDI2LCAxNiwgMzYsIDIzNiwgMTcwLCAyLCAyMzcsIDExMSwgOTQsIDI2LCAxNiwgMzYsIDIzNiwgCisgICAgMTcyLCAyLCAyMzcsIDExMSwgOTQsIDI2LCAxNiwgMzYsIDI1MiwgMTEyLCA5NCwgMjYsIDE2LCAzNiwgMjQ0LCA2MSwgOTQsIAorICAgIDI2LCAxNiwgMjI3LCAxMDcsIDIzMCwgMTE5LCAyNDcsIDEwNywgOTQsIDI2LCAxNiwgMjI3LCAxMDcsIDIzMCwgMTE5LCAKKyAgICAyNDksIDE5OCwgOTQsIDI2LCAxNiwgMjI3LCAxMDcsIDI1MCwgMTk3LCAyMjAsIDI1MSwgOTQsIDI2LCAxNiwgMjI3LCAxMDcsIAorICAgIDI1MCwgMTk3LCAyMjIsIDEzMSwgOTQsIDI2LCAxNiwgMjM1LCAxMTMsIDIzMCwgMTE5LCAyMzAsIDksIDk0LCAyNiwgMTYsIAorICAgIDIzNSwgMTEzLCAyMzAsIDExOSwgMjI4LCAxOTUsIDk0LCAyNiwgMTYsIDIzNSwgMTEzLCAyNTAsIDE5NywgMjI5LCA1NCwgCisgICAgOTQsIDI2LCAxNiwgMjM1LCAxMTMsIDI1MCwgMTk3LCAyMjksIDQ2LCA5NCwgMjYsIDE2LCAyMzUsIDExMywgMjMwLCAxMTksIAorICAgIDIyOSwgNzIsIDIyMywgNjcsIDUsIDIyOSwgMjUxLCAyMjMsIDY3LCA1LCAyMzAsIDUsIDIyMywgNjcsIDUsIDIzMCwgMywgCisgICAgMjIzLCA2NywgMSwgNjAsIDIyMywgNjcsIDEsIDcyLCAyMjMsIDY3LCAxLCA2OCwgMjIzLCA2NywgMSwgMjU0LCAyMzQsIAorICAgIDIyMywgNjcsIDEsIDc0LCAyMjMsIDY3LCAxLCA3MywgMjIzLCA2NywgMSwgMjQ2LCAxMTUsIDIyMywgNjcsIDEsIDE3NSwgCisgICAgMjIzLCA2NywgMSwgMjI4LCAxNTUsIDIyMywgNjcsIDEsIDI0NSwgMCwgMjIzLCA2NywgMSwgMjMyLCAxMTUsIDIyMywgNjcsIAorICAgIDEsIDI1MSwgMTY5LCAyMjMsIDY3LCAxLCAyMzcsIDEyMywgMjIzLCA2NywgMSwgMjE3LCAxMTQsIDIyMywgNjcsIDEsIDIzMSwgCisgICAgNzcsIDIyMywgNjcsIDEsIDIyMiwgMTU1LCAyMjMsIDY3LCAxLCAyNDksIDIwNywgMjIzLCA2NywgMSwgMjA4LCAyMjMsIDY3LCAKKyAgICAxLCAxODcsIDIyMywgNjcsIDEsIDI0NiwgOCwgMjIzLCA2NywgMSwgMjE5LCAxODksIDIyMywgNjcsIDEsIDI1MiwgMjM3LCAKKyAgICAyMjMsIDY3LCAxLCAxOTYsIDIyMywgNjcsIDEsIDE4NCwgMjIzLCA2NywgMSwgMjAzLCAyMjMsIDY3LCAxLCAyMzUsIDE4OCwgCisgICAgMjIzLCA2NywgMSwgMjE5LCA3LCAyMjMsIDY3LCAxLCAyMjYsIDE3NywgMjIzLCA2NywgMSwgMjE4LCAxMzgsIDIyMywgNjcsIAorICAgIDEsIDE1NSwgMjIzLCA2NywgMjUwLCAxNDcsIDUsIDIzMCwgMTYsIDIyMywgNjcsIDI1MCwgMTQ3LCA1LCAyMjksIDI1MywgCisgICAgMjIzLCA2NywgMjUwLCAxNDcsIDUsIDIyOSwgMjUwLCAyMjMsIDY3LCAyOSwgNSwgMjMwLCA4LCAyMjMsIDY3LCAyOSwgNSwgCisgICAgMjI5LCAyNDksIDIyMywgNjcsIDI5LCA1LCAyMzAsIDExLCAyMjMsIDY3LCAyOSwgNSwgMjMwLCAyLCAyMjMsIDY3LCAyOSwgCisgICAgNSwgMjMwLCAxNywgMjIzLCA2NywgMjksIDUsIDIzMCwgMTAsIDIyMywgNjcsIDUsIDIzMCwgMjAsIDIyMywgNjcsIDEsIAorICAgIDIzNiwgMTQ5LCAyMjMsIDY3LCAxLCAyMjMsIDIwLCAyMjMsIDY3LCAyMCwgMjE3LCA4NCwgMjIzLCA2NywgMjAsIDEwNywgCisgICAgMjIzLCA2NywgMjAsIDEwMywgMjIzLCA2NywgMjAsIDE2MCwgMjIzLCA2NywgMjAsIDE1NCwgMjIzLCA2NywgMjAsIDE3NCwgCisgICAgMjIzLCA2NywgMjAsIDE4MiwgMjIzLCA2NywgMjAsIDE5MSwgMjIzLCA2NywgMjAsIDE4NSwgMjIzLCA2NywgMjAsIDE5MCwgCisgICAgMTY5LCAxLCAxNzUsIDE2OSwgMSwgMjM2LCA2NywgMTY5LCAxLCAyMzYsIDE0OSwgMTY5LCAxLCAyNDUsIDAsIDE2OSwgMSwgCisgICAgMjQ0LCA3NywgMTY5LCAxLCAyMzIsIDExNSwgMTY5LCAxLCAyNTEsIDE2OSwgMTY5LCAxLCAyNTEsIDY5LCAxNjksIDEsIAorICAgIDIzNywgMTIzLCAxNjksIDEsIDIzMSwgNzcsIDE2OSwgMSwgMjIyLCAxNTUsIDE2OSwgMSwgMjIyLCAzNSwgMTY5LCAxLCAKKyAgICAyNDksIDIwNywgMTY5LCAxLCAyMDgsIDE2OSwgMSwgMTg3LCAxNjksIDEsIDIyOSwgNTgsIDE2OSwgMSwgMjI5LCAxNDEsIAorICAgIDE2OSwgMSwgMjQ2LCA4LCAxNjksIDEsIDI0NSwgMTY1LCAxNjksIDEsIDI1MiwgMjM3LCAxNjksIDEsIDI1MiwgNTQsIDE2OSwgCisgICAgMSwgMTk2LCAxNjksIDEsIDIzMywgMTQyLCAxNjksIDEsIDIyMSwgNTUsIDE2OSwgMSwgMjIxLCA0NywgMTY5LCAxLCAyNDcsIAorICAgIDc0LCAxNjksIDEsIDE4NCwgMTY5LCAxLCAyMDMsIDE2OSwgMSwgMjM1LCAxODgsIDE2OSwgMSwgMTU1LCAxNjksIDEsIDI0MywgCisgICAgODksIDE2OSwgMSwgMjE5LCAxODksIDE2OSwgMSwgMjI2LCAxNzcsIDE2OSwgMSwgMjI1LCAyNSwgMTY5LCAxLCAyMTksIDcsIAorICAgIDE2OSwgMSwgNjAsIDE2OSwgMjIzLCA5NywgMSwgMTg0LCAxNjksIDIyMywgOTcsIDEsIDIwMywgMTY5LCAyOSwgNSwgMjU1LCAKKyAgICA1OCwgMTY5LCAyOSwgNSwgNzIsIDE2OSwgMjksIDUsIDc0LCAxNjksIDI5LCA1LCAyMzAsIDEyNywgMTY5LCAyOSwgNSwgNjgsIAorICAgIDE2OSwgMjksIDUsIDIyMCwgMjMsIDE2OSwgMjksIDUsIDczLCAxNjksIDI1MCwgMTQ3LCA1LCAyMzcsIDE3LCAxNjksIDI1MCwgCisgICAgMTQ3LCA1LCAxODksIDE2OSwgMjUwLCAxNDcsIDUsIDE1MywgMTY5LCAyNTAsIDE0NywgNSwgMjA3LCAxNjksIDI1MCwgMTQ3LCAKKyAgICA1LCAyMzAsIDU5LCAxNjksIDI1MCwgMTQ3LCA1LCAxNTIsIDE2OSwgMjUwLCAxNDcsIDUsIDIyMiwgMjAxLCAxNjksIDI1MCwgCisgICAgMTQ3LCA1LCAyMzEsIDYyLCAxNjksIDI1MCwgMTQ3LCA1LCAyMzYsIDIyOSwgMTY5LCA1LCAyMjcsIDIzNiwgMTY5LCA1LCAKKyAgICAyMzEsIDExMiwgMTY5LCAyMjgsIDE5NywgMjIyLCAxNTQsIDE2OSwgMjI4LCAxOTcsIDIzMSwgNjksIDIyMSwgMjA4LCAyMjIsIAorICAgIDE1NCwgMTY5LCAyMjgsIDE5NywgMjUxLCA3NCwgMTY5LCAyMjgsIDE5NywgMjIxLCA0MiwgMjUxLCA3NCwgMTY5LCAyMjgsIAorICAgIDE5NywgMjIxLCA0MSwgMTY5LCAyMCwgMjE3LCA4NCwgMTY5LCAyMCwgMTA3LCAxNjksIDIwLCAxMDMsIDE2OSwgMjAsIDE2MCwgCisgICAgMTY5LCAyMCwgMTU0LCAxNjksIDIwLCAxNzQsIDE2OSwgMjAsIDE4MiwgMTY5LCAyMCwgMTkxLCAxNjksIDIwLCAxODUsIAorICAgIDE2OSwgMjAsIDE5MCwgMTY5LCAxLCAyMjEsIDI5LCAxNjksIDEsIDIyMSwgMTksIDE2OSwgMSwgMjQ5LCAxMzIsIDIzMCwgCisgICAgMTUxLCAyNTEsIDI2LCAyMCwgMjE3LCA4NCwgMjMwLCAxNTEsIDI1MSwgMjYsIDIwLCAxMDcsIDIzMCwgMTUxLCAyNTEsIDI2LCAKKyAgICAyMCwgMTAzLCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIDE2MCwgMjMwLCAxNTEsIDI1MSwgMjYsIDIwLCAxNTQsIDIzMCwgCisgICAgMTUxLCAyNTEsIDI2LCAyMCwgMTc0LCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIDE4MiwgMjMwLCAxNTEsIDI1MSwgMjYsIDIwLCAKKyAgICAxOTEsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMCwgMTg1LCAyMzAsIDE1MSwgMjUxLCAyNiwgMjAsIDE5MCwgMjMwLCAxNTEsIAorICAgIDI1MSwgMjYsIDEsIDIzNSwgMTg4LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjUzLCAyNDQsIDIzMCwgMTUxLCAyNTEsIDI2LCAKKyAgICAxLCAyNTQsIDIwOSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDI1NCwgMTIzLCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjU0LCAKKyAgICAxNzUsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzUsIDE4NywgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDI1NSwgMjAsIDIzMCwgCisgICAgMTUxLCAyNTEsIDI2LCAxLCAyNTUsIDIxLCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjU1LCAxOSwgMjMwLCAxNTEsIDI1MSwgCisgICAgMjYsIDEsIDI1NSwgMTUsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzUsIDY3LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjM3LCAKKyAgICAxNTEsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzgsIDAsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzcsIDE2NywgMjMwLCAKKyAgICAxNTEsIDI1MSwgMjYsIDEsIDIzNywgMTU2LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjM0LCAyMzEsIDIzMCwgMTUxLCAyNTEsIAorICAgIDI2LCAxLCAyMjAsIDExNywgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIyMCwgMTE1LCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgCisgICAgMjIwLCA2OCwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIyMCwgMTYsIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzUsIDEyMiwgCisgICAgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDI0NiwgMTYyLCAyMzAsIDE1MSwgMjUxLCAyNiwgMSwgMjQ2LCAyNTMsIDIzMCwgMTUxLCAKKyAgICAyNTEsIDI2LCAxLCAyNDYsIDE5NywgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDI0NiwgMTQyLCAyMzAsIDE1MSwgMjUxLCAyNiwgCisgICAgMSwgMjM1LCAxMiwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzMCwgODksIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzAsIAorICAgIDE4MSwgMjMwLCAxNTEsIDI1MSwgMjYsIDEsIDIzMCwgNzksIDIzMCwgMTUxLCAyNTEsIDI2LCAxLCAyMzAsIDE2MSwgMjMwLCAKKyAgICAxNTEsIDI1MSwgMjYsIDIzMywgMTAwLCAyMjEsIDEsIDIzMCwgMTUxLCAyNTEsIDI2LCAyNDQsIDI1MSwgMjIxLCAyLCAyMzAsIAorICAgIDE1MSwgMjUxLCAyNiwgMjMzLCA5OCwgMjIxLCAyLCAyMzAsIDE1MSwgMjUxLCAyNiwgMjI3LCAxOTMsIDIzMCwgMTUxLCAKKyAgICAyNTEsIDI2LCAyMjksIDEzOSwgMjMwLCAxNTEsIDI1MSwgMjYsIDI1NCwgMjAxLCAyMzAsIDE1MSwgMjUxLCAyNiwgMjI4LCAKKyAgICAxOTcsIDIzMywgOTYsIDIzMCwgMTUxLCAyNTEsIDI2LCAyMjgsIDE5NywgNTEsIDIzMywgOTYsIDIxOSwgMTYyLCAxNDUsIAorICAgIDIzNiwgMjExLCAyMTksIDE2MiwgMTQ1LCAyMjUsIDIsIDIxOSwgMTYyLCAxNDUsIDIyOCwgMjQxLCAyMTksIDE2MiwgNSwgCisgICAgMjMyLCAzOSwgMjE5LCAxNjIsIDUsIDIxOCwgNTYsIDIzMywgMTkxLCAyMjMsIDM5LCAyMTksIDE2MiwgMTQ1LCAyMTgsIDU2LCAKKyAgICAyNTQsIDIwNiwgMjM3LCAyMTQsIDIyMywgMzksIDIxOSwgMTYyLCAxNDUsIDIxOCwgNTYsIDIzNywgMjE0LCAyMjMsIDM5LCAKKyAgICAyMTksIDE2MiwgMTQ1LCAyMTgsIDU2LCAyMzYsIDE5OSwgMjM3LCAyMTQsIDIyMywgMzksIDIxOSwgMTYyLCAxNDUsIDI1MSwgCisgICAgMTQ5LCA1NiwgMjE5LCAxNjIsIDE0NSwgMjE4LCA1NiwgMjM2LCAxOTksIDIzNywgMjE0LCAyMjMsIDQwLCAyMjYsIDEwNiwgCisgICAgMjE5LCAxNjIsIDE0NSwgNTEsIDIyMywgMzksIDIxOSwgMTYyLCAxNDUsIDIyMSwgNzgsIDIyMywgMzksIDIxOSwgMTYyLCAKKyAgICAxNDUsIDIzNiwgMTk5LCAyNTQsIDk3LCAyMTksIDE2MiwgMTQ1LCA2MSwgNTYsIDIxOSwgMTYyLCAxNDUsIDEyNCwgMTg4LCAKKyAgICA1NiwgMjE5LCAxNjIsIDE0NSwgMTQ4LCAxODgsIDU2LCAyMTksIDE2MiwgMTQ1LCAyMjcsIDk5LCAyMzYsIDIxMCwgMjM3LCAKKyAgICAyMTQsIDIyMywgMzksIDIxOSwgMTYyLCAxNDUsIDI1MywgMjQyLCAyMzcsIDIxNCwgMjIzLCAzOSwgMjE5LCAxNjIsIDUsIAorICAgIDIxOSwgNzgsIDIyMywgMzksIDIxOSwgMTYyLCA1LCAyMTksIDc4LCAyMjAsIDExMiwgMjE5LCAxNjIsIDUsIDIxMCwgMjE5LCAKKyAgICA3OCwgMjIwLCAxMTIsIDIxOSwgMTYyLCA1LCAyMTksIDc4LCAyNTQsIDk3LCAyMTksIDE2MiwgNSwgMjEwLCAyMTksIDc4LCAKKyAgICAyNTQsIDk3LCAyMTksIDE2MiwgNSwgMjE5LCA3OCwgMjIwLCAxMTMsIDIsIDIyMiwgMTM1LCAyMTksIDE2MiwgNSwgMjE5LCAKKyAgICA3OCwgMjU0LCA5OCwgMiwgMjIyLCAxMzUsIDIxOSwgMTYyLCA1LCAyNTQsIDk2LCAyNTQsIDEwNSwgMjE5LCAxNjIsIDUsIAorICAgIDI1NCwgOTYsIDI1MiwgMjIyLCAyMTksIDE2MiwgNSwgMjU0LCA5NiwgMjE5LCAxODQsIDIxOSwgMTYyLCA1LCAyNTQsIDk2LCAKKyAgICAyMTksIDE4NSwgMiwgMjIyLCAxMzUsIDIxOSwgMTYyLCA1LCAyMjEsIDE2MiwgMjE5LCAxNjIsIDUsIDI0MywgMTIzLCAxNzEsIAorICAgIDI1NCwgOTUsIDIxOSwgMTYyLCA1LCAxNzEsIDI1NCwgOTUsIDIxOSwgMTYyLCA1LCAyMjcsIDI0LCAxNzEsIDI1NCwgOTUsIAorICAgIDIxOSwgMTYyLCA1LCAyNTQsIDk2LCAyMjAsIDExOSwgMjMzLCA5MCwgMjE5LCAxNjIsIDUsIDI1NCwgNDYsIDcsIDEsIDMsIAorICAgIDYsIDYwLCA3LCAxLCAzLCA2LCAyNTQsIDIzNCwgNywgMywgMSwgMjE1LCAyNTQsIDIzNCwgNywgMSwgMywgNiwgMjUyLCAKKyAgICAxOTYsIDI1MywgMjA0LCA3LCAxLCAzLCA2LCAyNTEsIDIwMiwgNywgMSwgMywgNiwgMjUwLCA0NiwgNywgMSwgMywgNiwgCisgICAgMjQ2LCAxMTgsIDcsIDEsIDMsIDYsIDczLCA3LCAzLCAxLCAyMTUsIDIzMCwgMTE5LCA3MywgNywgMywgMSwgMjE1LCA3MiwgCisgICAgNywgMSwgMywgNiwgMjM3LCAxMjYsIDcsIDEsIDMsIDYsIDIzNywgMTcsIDcsIDEsIDMsIDYsIDIzNSwgMjAyLCAyLCA5MiwgCisgICAgNywgMSwgMywgNiwgMTg5LCA3LCAxLCAzLCA2LCAyMTAsIDIwNywgNywgMSwgMywgNiwgNzQsIDcsIDEsIDMsIDYsIDIzMCwgCisgICAgMTE5LCA3NCwgNywgMywgMSwgMjI0LCAxMzYsIDc0LCA3LCAzLCAxLCAyMjQsIDEzNiwgMjMwLCAxMTksIDc0LCA3LCAzLCAxLCAKKyAgICAyMjQsIDEzNiwgMTQyLCAyLCA5MiwgNywgMywgMSwgMjE1LCAyMzAsIDE2NywgNywgMSwgMywgNiwgMjMwLCA4NiwgNywgMywgCisgICAgMSwgMjIxLCAxMjAsIDE0NCwgNzQsIDcsIDMsIDEsIDI1MiwgMjksIDE0NCwgNzQsIDcsIDEsIDMsIDYsIDIzMCwgNTksIDcsIAorICAgIDEsIDMsIDYsIDIxMCwgMTUyLCA3LCAxLCAzLCA2LCAyMTUsIDE1MiwgNywgMSwgMywgNiwgMjIyLCAyMDEsIDcsIDEsIDMsIAorICAgIDYsIDY4LCA3LCAzLCAxLCAyMjQsIDEzNiwgNjgsIDcsIDMsIDEsIDIyNCwgMTM2LCAyNDksIDEyLCA2OCwgNywgMywgMSwgCisgICAgMjI0LCAxMzYsIDIxNSwgMTg5LCA3LCAxLCAzLCA2LCAyMTYsIDIxNiwgNywgMSwgMywgNiwgMjE5LCA0MCwgNywgMSwgMywgCisgICAgNiwgMjE3LCAxNTcsIDcsIDEsIDMsIDYsIDI0NiwgNzYsIDcsIDEsIDIxOSwgNzAsIDIzNSwgMTQ0LCAyMjMsIDI0MSwgNywgCisgICAgMSwgMjU0LCAxOTEsIDIzLCAxLCAzLCA2LCAyNDQsIDIzMSwgMjMsIDEsIDMsIDYsIDIzNSwgMTU2LCAyMywgMSwgMywgNiwgCisgICAgMjI5LCAxMDgsIDIzLCAxLCAzLCA2LCAyMjcsIDE0OSwgMjMsIDEsIDMsIDYsIDIyOCwgMjEyLCAzMSwgMSwgMywgNiwgMjQ2LCAKKyAgICAyMTcsIDU4LCAxLCA2LCA2MCwgNTgsIDEsIDYsIDI1NCwgMjM0LCA1OCwgMSwgNiwgMjUzLCAyMDQsIDU4LCAxLCA2LCAyNTIsIAorICAgIDE5NiwgMjUzLCAyMDQsIDU4LCAxLCA2LCAyNTAsIDQ2LCA1OCwgMSwgNiwgNzMsIDU4LCAxLCA2LCAyMTAsIDczLCA1OCwgMSwgCisgICAgNiwgMjQ1LCA2NywgNTgsIDEsIDYsIDI0MywgMjI1LCA1OCwgMSwgNiwgNzIsIDU4LCAxLCA2LCAyMzcsIDEyNiwgNTgsIDEsIAorICAgIDYsIDIzNywgMTcsIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAxODksIDU4LCAxLCA2LCAyMDcsIDU4LCAxLCA2LCAyMTAsIAorICAgIDIwNywgNTgsIDEsIDYsIDc0LCA1OCwgMSwgNiwgMjMwLCA4NiwgNTgsIDEsIDYsIDIzMCwgNTksIDU4LCAxLCA2LCAxNTIsIAorICAgIDU4LCAxLCA2LCAyMjIsIDIwMSwgNTgsIDEsIDYsIDY4LCA1OCwgMSwgNiwgMjE5LCA0MCwgNTgsIDEsIDMsIDYwLCA1OCwgMSwgCisgICAgMywgMjE1LCA2MCwgNTgsIDEsIDMsIDI1NCwgMTQ2LCA1OCwgMSwgMywgMjE1LCAyNTQsIDIzNCwgNTgsIDEsIDMsIDI1MywgCisgICAgMjA0LCA1OCwgMSwgMywgMjUwLCA0NiwgNTgsIDEsIDMsIDczLCA1OCwgMSwgMywgMjI2LCAxMDQsIDU4LCAxLCAzLCAyMzAsIAorICAgIDExOSwgNzMsIDU4LCAxLCAzLCAyMTUsIDIzMCwgMTE5LCA3MywgNTgsIDEsIDMsIDI0NSwgNjcsIDU4LCAxLCAzLCAyMTUsIAorICAgIDcyLCA1OCwgMSwgMywgMjM3LCAxNywgNTgsIDEsIDMsIDE4OSwgNTgsIDEsIDMsIDI0NiwgMTg1LCA1OCwgMSwgMywgNzQsIAorICAgIDU4LCAxLCAzLCAyMzAsIDExOSwgNzQsIDU4LCAxLCAzLCAyMjEsIDEyMCwgMTQ0LCA3NCwgNTgsIDEsIDMsIDI1MiwgMjksIAorICAgIDE0NCwgNzQsIDU4LCAxLCAzLCAyMzAsIDU5LCA1OCwgMSwgMywgMjIyLCAyMDEsIDU4LCAxLCAzLCA2OCwgNTgsIDEsIDMsIAorICAgIDIyNCwgMTM2LCA2OCwgNTgsIDEsIDMsIDIxNSwgMTg5LCA1OCwgMSwgMywgMjE2LCAyMTYsIDU4LCAxLCAzLCAyNTQsIDE5MSwgCisgICAgNTgsIDEsIDMsIDI1MiwgMTAyLCA1OCwgMSwgMywgMjMsIDI0NCwgMjMxLCA1OCwgMSwgMywgMjQ5LCA2MiwgNTgsIDEsIDMsIAorICAgIDIzLCAyMjksIDEyOSwgNTgsIDEsIDMsIDI1MSwgMzEsIDcsIDIyMywgOTQsIDMsIDEsIDcyLCA3LCAyMjMsIDk0LCAzLCAxLCAKKyAgICAxNTIsIDcsIDIyMywgOTQsIDMsIDEsIDY4LCA3LCAyMjMsIDk0LCAzLCAxLCAyMTYsIDIxNiwgMjMsIDIyMywgOTQsIDMsIDEsIAorICAgIDI1MiwgMTAyLCAyMywgMjIzLCA5NCwgMywgMSwgMjQ0LCAyMzEsIDIzLCAyMjMsIDk0LCAzLCAxLCAyMjcsIDE0OSwgMjMsIAorICAgIDIyMywgOTQsIDMsIDEsIDIyOSwgMTI5LCAyMywgMjIzLCA5NCwgMywgMSwgMjUxLCAzMSwgNywgMywgMSwgMjIwLCAxMTAsIAorICAgIDcsIDMsIDEsIDQ5LCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDIzMywgMTkzLCAyMjEsIAorICAgIDE3OSwgNywgMywgMSwgMjQ2LCA3NSwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMzQsIDE4NywgMiwgMjMzLCAKKyAgICAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAyMzMsIDM0LCAyLCAyMzMsIDE5MywgMjIxLCAxNzksIDcsIDMsIDEsIDIzMCwgNjAsIAorICAgIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjI4LCAzOSwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCAzLCAxLCAKKyAgICAyMjgsIDM5LCAyLCAyNDUsIDE3NCwgMjUsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDIzMywgCisgICAgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjIyLCAyMDIsIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjE3LCAKKyAgICAxNTgsIDIsIDIzMywgMTkzLCAyMjEsIDE3OSwgNywgMywgMSwgMjE1LCAyNDUsIDY3LCA1OCwgMSwgMzEsIDI0NiwgMTk3LCAKKyAgICA3LCAzLCAxLCAyMzcsIDE4OCwgMjQ1LCA2NywgNywgMywgMSwgMjIyLCAzOCwgMiwgMjIzLCAxMjEsIDcsIDMsIDYsIDEsIAorICAgIDI0MiwgMTA3LCAyLCA5MiwgNywgMywgMSwgMjM3LCAxNjMsIDIsIDkyLCA3LCAzLCAxLCAyMzAsIDYwLCAyLCA5MiwgNywgMywgCisgICAgNiwgMSwgMTA1LCAyLCA5MiwgNywgMywgMSwgMjIwLCA1OCwgMiwgOTIsIDcsIDMsIDEsIDQ5LCAyLCAyMzAsIDI5LCA5NiwgCisgICAgNywgMywgMSwgMjUwLCA0NywgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDI0NiwgNzUsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAKKyAgICAxLCAyNDUsIDY4LCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjM3LCAxOCwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIAorICAgIDIzNSwgMjAyLCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjM0LCAxODcsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAKKyAgICAyMzMsIDM0LCAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjMwLCA2MCwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDIyOCwgCisgICAgMzksIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDI0NiwgMTM0LCAKKyAgICAyLCAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjIwLCAxMSwgMiwgMjMwLCAyOSwgOTYsIDcsIDMsIDEsIDIxOCwgMTUyLCAyLCAKKyAgICAyMzAsIDI5LCA5NiwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDIzMCwgMjksIDk2LCA3LCAzLCAxLCAxMTIsIDIsIDIyNywgCisgICAgMTY0LCA5NiwgNywgMywgMSwgMjU0LCAxNDcsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjUwLCA0NywgMiwgMjQyLCAKKyAgICAyNDcsIDI1LCAyMjIsIDEzNSwgNywgMywgMSwgMTc4LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIDIzMCwgMTE5LCAxNzgsIAorICAgIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjEwLCAyMzAsIDExOSwgMTc4LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIAorICAgIDIyNiwgMTA1LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIAorICAgIDIzMCwgMTE5LCAxNDIsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgMSwgMjQ2LCAxMzQsIDIsIDIyNywgMTY0LCA5NiwgNywgMywgCisgICAgMSwgMTA1LCAyLCAyMjcsIDE2NCwgOTYsIDcsIDMsIDEsIDI0NiwgNzcsIDIsIDIyNywgMTY0LCA5NiwgNTgsIDEsIDMsIAorICAgIDIxNSwgMjU0LCAxNDYsIDU4LCAxLCAzLCAyNTEsIDIwMiwgNTgsIDEsIDMsIDI1MSwgMjAzLCAyLCAyNTAsIDgwLCA1OCwgMSwgCisgICAgMywgMjQ2LCAxMTgsIDU4LCAxLCAzLCAyMTAsIDIzMCwgMTE5LCA3MywgNTgsIDEsIDMsIDI0NiwgNzQsIDU4LCAxLCAzLCAKKyAgICAyNDgsIDE0NCwgMjM3LCAxMjcsIDIsIDkyLCA1OCwgMSwgMywgMTAyLCAyNDUsIDY3LCA1OCwgMSwgMywgMjE1LCAyNDMsIAorICAgIDIyNSwgNTgsIDEsIDMsIDI0MiwgMTA3LCAyLCA5MiwgNTgsIDEsIDMsIDIzNywgMTYyLCA1OCwgMSwgMywgNiwgNzIsIDU4LCAKKyAgICAxLCAzLCA2LCAyNDIsIDEwNywgMiwgOTIsIDU4LCAxLCAzLCAyMzcsIDEyNywgMiwgMjUwLCA5NywgNTgsIDEsIDMsIDIzNSwgCisgICAgMjAyLCAyLCAyMjcsIDE2NCwgOTYsIDU4LCAxLCAzLCAyMzUsIDIwMiwgMiwgMjMwLCAyOSwgOTYsIDU4LCAxLCAzLCA2LCAKKyAgICAxNTMsIDU4LCAxLCAzLCAyMzQsIDE4NywgMiwgOTYsIDU4LCAxLCAzLCAyMTUsIDIzNCwgMTg3LCAyLCAxNzEsIDIzNSwgCisgICAgMTA2LCA1OCwgMSwgMywgMjMzLCAzNCwgMiwgNDIsIDk2LCA1OCwgMSwgMywgMjMzLCAzNCwgMiwgMjI3LCAxNjQsIDk2LCAKKyAgICA1OCwgMSwgMywgNiwgMjA3LCA1OCwgMSwgMywgMjUyLCAxOTYsIDc0LCA1OCwgMSwgMywgMjI5LCAxMjksIDU4LCAxLCAzLCAKKyAgICAyMjYsIDIzNSwgMiwgOTYsIDU4LCAxLCAzLCAyNDYsIDEzMywgNTgsIDEsIDMsIDIyMiwgMjAyLCAyLCAyMzAsIDI5LCA5NiwgCisgICAgNTgsIDEsIDMsIDEwNSwgMTM1LCA1OCwgMSwgMywgMjIwLCA1NywgNTgsIDEsIDMsIDYsIDY4LCA1OCwgMSwgMywgMjIwLCAKKyAgICAxMSwgMiwgOTYsIDU4LCAxLCAzLCAyMTUsIDIxNiwgMjE2LCA1OCwgMSwgMywgMjE3LCAxNTcsIDU4LCAxLCAzLCAyMTcsIAorICAgIDE1OCwgMiwgMjI3LCAxNjQsIDk2LCA1OCwgMSwgMywgMjE3LCAxNTgsIDIsIDI1MCwgODAsIDU4LCAxLCAzLCAyNDYsIDc2LCAKKyAgICA1OCwgMSwgMywgMjIyLCA2LCAzNiwgMjQ3LCAxNDMsIDI0NCwgMzcsIDI1NSwgMCwgMzYsIDI0NywgMTQzLCAyNTQsIDI0OCwgCisgICAgMjU1LCAwLCAzNiwgMjI0LCAzNiwgNTYsIDM2LCAyMjMsIDQ1LCA3OCwgMzYsIDIzNCwgMTE0LCAzNiwgMjQ0LCAzNCwgMzYsIAorICAgIDIzNCwgMTEyLCAzNiwgMjU0LCAyNDYsIDM2LCAyNDQsIDM1LCAzNiwgMjU0LCAyNDcsIDM2LCA3LCAzLCAxLCAyMjgsIDM5LCAKKyAgICA1NiwgMzYsIDI1MiwgNywgMzYsIDIzNCwgMTEzLCAzNiwgNTEsIDI1MCwgMjE3LCA1MCwgMzYsIDIzMCwgMTYzLCA1MCwgMzYsIAorICAgIDIxNywgMzMsIDU2LCAzNiwgMjM3LCAxNTIsIDU2LCAzNiwgMjIwLCA1MSwgNTAsIDM2LCAyMjAsIDM1LCA1MCwgMzYsIDcsIAorICAgIDMsIDEsIDI0NSwgMTU0LCAyMzAsIDExOSwgMTEyLCA1MCwgMzYsIDcsIDMsIDEsIDI1NCwgMjM0LCAzNiwgNywgMywgMSwgCisgICAgMjU0LCA5MywgMzYsIDcsIDMsIDEsIDI1MywgMjIwLCAzNiwgNywgMywgMSwgMjUxLCAyMDMsIDI1MSwgOTIsIDM2LCA3LCAzLCAKKyAgICAxLCAyMzcsIDE4OCwgMjUwLCA0NiwgMzYsIDcsIDMsIDEsIDI0NiwgMTE4LCAzNiwgNywgMywgMSwgMjQ1LCA2NywgMzYsIDcsIAorICAgIDEsIDMsIDYsIDI0NSwgNjcsIDM2LCA3LCAzLCAxLCAyMzcsIDE3LCAzNiwgNywgMywgMSwgMTUzLCAzNiwgNywgMSwgMywgNiwgCisgICAgMTUzLCAzNiwgNywgMSwgMywgNiwgMTg5LCAzNiwgNywgMywgMSwgMjA3LCAzNiwgNywgMSwgMywgNiwgMjA3LCAzNiwgNywgCisgICAgMSwgMywgNiwgMTUyLCAzNiwgNywgMywgMSwgMjI4LCAzOSwgMjI3LCA1OCwgMzYsIDcsIDMsIDEsIDE5OCwgMzYsIDcsIDMsIAorICAgIDEsIDE3MSwgMTk4LCAzNiwgNywgMywgMSwgMjE3LCAxNTcsIDM2LCAyNTQsIDE1MSwgMTE0LCAxOTksIDU2LCAzNiwgNDIsIAorICAgIDI1NCwgMjEsIDUwLCAzNiwgNDUsIDI1NCwgMjEsIDI1LCAxMTMsIDI1NCwgMjEsIDU2LCA3LCA2LCAxLCAxMTIsIDIsIDIyNywgCisgICAgOTQsIDU2LCA3LCAzLCAxLCAxMTIsIDIsIDIyNywgOTQsIDU2LCA3LCA2LCAxLCA0OSwgMiwgNjEsIDUwLCA3LCAzLCAxLCAKKyAgICA0OSwgMiwgNjEsIDUwLCA3LCA2LCAxLCA0OSwgMiwgNjEsIDU2LCA3LCAzLCAxLCA0OSwgMiwgNjEsIDU2LCA3LCA2LCAxLCAKKyAgICA0OSwgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIDQ5LCAyLCAyMzUsIDQ0LCA1NiwgNywgNiwgMSwgMjUxLCAyMDMsIDIsIAorICAgIDI1MSwgOTMsIDI1LCAxNjgsIDcsIDMsIDEsIDI1MSwgMjAzLCAyLCAyNTEsIDkzLCAyNSwgMTY4LCA3LCA2LCAxLCAyNTAsIAorICAgIDQ3LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDI1MCwgNDcsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjUwLCA0NywgMiwgNjEsIDU2LCAKKyAgICA3LCAzLCAxLCAyNTAsIDQ3LCAyLCA2MSwgNTYsIDcsIDYsIDEsIDI1MCwgNDcsIDIsIDIzNSwgNDQsIDU2LCA3LCAzLCAxLCAKKyAgICAyNTAsIDQ3LCAyLCAyMzUsIDQ0LCA1NiwgNywgNiwgMSwgMjUwLCA0NywgMiwgMjUxLCA5MiwgNywgMywgMSwgMjUwLCA0NywgCisgICAgMiwgMjUxLCA5MiwgNywgNiwgMSwgMjUwLCA0NywgMiwgMjUwLCAyMTcsIDU2LCA3LCAzLCAxLCAyNTAsIDQ3LCAyLCAyNTAsIAorICAgIDIxNywgNTYsIDcsIDYsIDEsIDE3OCwgMiwgMjM0LCAxMTYsIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAxNzgsIDIsIDIzNCwgCisgICAgMTE2LCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgMTc4LCAyLCAyMzQsIDExNiwgMjUsIDE2OCwgNywgMywgMSwgMTc4LCAyLCAKKyAgICAyMzQsIDExNiwgMjUsIDE2OCwgNywgNiwgMSwgMTc4LCAyLCAyNTAsIDIxNywgNTYsIDcsIDMsIDEsIDE3OCwgMiwgMjUwLCAKKyAgICAyMTcsIDU2LCA3LCA2LCAxLCAxNzgsIDIsIDIyMSwgMTgwLCA1NiwgNywgMywgMSwgMTc4LCAyLCAyMjEsIDE4MCwgNTYsIDcsIAorICAgIDYsIDEsIDE3OCwgMiwgMjUxLCA5MywgMjUsIDI1MiwgOCwgNywgMywgMSwgMTc4LCAyLCAyNTEsIDkzLCAyNSwgMjUyLCA4LCAKKyAgICA3LCA2LCAxLCAyNDYsIDc1LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDI0NiwgNzUsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjQ1LCAKKyAgICA2OCwgMiwgMjM0LCAxMTUsIDcsIDMsIDEsIDI0NSwgNjgsIDIsIDIzNCwgMTE1LCA3LCA2LCAxLCAyNDMsIDIyNiwgMiwgNjEsIAorICAgIDUwLCA3LCAzLCAxLCAyNDMsIDIyNiwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyNDMsIDIyNiwgMiwgNjEsIDU2LCA3LCAzLCAxLCAKKyAgICAyNDMsIDIyNiwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyNDMsIDIyNiwgMiwgMjQ5LCAxMywgNywgMywgMSwgMjQzLCAyMjYsIDIsIAorICAgIDI0OSwgMTMsIDcsIDYsIDEsIDI0MywgMjI2LCAyLCAyNTEsIDkyLCA3LCAzLCAxLCAyNDMsIDIyNiwgMiwgMjUxLCA5MiwgNywgCisgICAgNiwgMSwgMjQzLCAyMjYsIDIsIDI1MiwgOSwgNTYsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCAyNTIsIDksIDU2LCA3LCA2LCAxLCAKKyAgICAyNDIsIDEwNywgMiwgMjIxLCAxODAsIDU2LCA3LCAzLCAxLCAyNDIsIDEwNywgMiwgMjIxLCAxODAsIDU2LCA3LCA2LCAxLCAKKyAgICAyNDIsIDEwNywgMiwgMjQ5LCAxNCwgMjUsIDE2OCwgNywgMywgMSwgMjQyLCAxMDcsIDIsIDI0OSwgMTQsIDI1LCAxNjgsIDcsIAorICAgIDYsIDEsIDIzNywgMTgsIDIsIDE2OCwgNywgMywgMSwgMjM3LCAxOCwgMiwgMTY4LCA3LCA2LCAxLCAyMzcsIDE4LCAyLCA2MSwgCisgICAgNTYsIDcsIDMsIDEsIDIzNywgMTgsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjM3LCAxOCwgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIAorICAgIDEsIDIzNywgMTgsIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgNjEsIDU2LCA3LCAzLCAxLCAyMzUsIAorICAgIDIwMiwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMzUsIDIwMiwgMiwgNjEsIDI1MiwgMTE4LCAyNSwgMjM0LCAxMTUsIDcsIDMsIAorICAgIDEsIDIzNSwgMjAyLCAyLCA2MSwgMjUyLCAxMTgsIDI1LCAyMzQsIDExNSwgNywgNiwgMSwgMjM1LCAyMDIsIDIsIDIzNSwgCisgICAgNDQsIDU2LCA3LCAzLCAxLCAyMzUsIDIwMiwgMiwgMjM1LCA0NCwgNTYsIDcsIDYsIDEsIDIzNSwgMjAyLCAyLCAyNTAsIAorICAgIDIxNywgNTYsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAyNTAsIDIxNywgNTYsIDcsIDYsIDEsIDIzNCwgMTg3LCAyLCAxNjgsIAorICAgIDcsIDMsIDEsIDIzNCwgMTg3LCAyLCAxNjgsIDcsIDYsIDEsIDIzNCwgMTg3LCAyLCA2MSwgNTAsIDcsIDMsIDEsIDIzNCwgCisgICAgMTg3LCAyLCA2MSwgNTAsIDcsIDYsIDEsIDIzNCwgMTg3LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDIzNCwgMTg3LCAyLCA2MSwgCisgICAgNTYsIDcsIDYsIDEsIDIzMywgMzQsIDIsIDYxLCA1MCwgNywgMywgMSwgMjMzLCAzNCwgMiwgNjEsIDUwLCA3LCA2LCAxLCAKKyAgICAyMzMsIDM0LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjMzLCAzNCwgMiwgCisgICAgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDIzNSwgNDQsIDU2LCA3LCA2LCAxLCAyMzMsIDM0LCAyLCAyNTAsIAorICAgIDIxNywgNTYsIDcsIDMsIDEsIDIzMywgMzQsIDIsIDI1MCwgMjE3LCA1NiwgNywgNiwgMSwgMTQyLCAyLCAyMjEsIDE4MCwgCisgICAgMjUsIDE2OCwgNywgMywgMSwgMTQyLCAyLCAyMjEsIDE4MCwgMjUsIDE2OCwgNywgNiwgMSwgMTQyLCAyLCAyMjEsIDE4MCwgCisgICAgMjUsIDI0OSwgMTMsIDcsIDMsIDEsIDE0MiwgMiwgMjIxLCAxODAsIDI1LCAyNDksIDEzLCA3LCA2LCAxLCAxNDIsIDIsIAorICAgIDIzNCwgMTE2LCAyNSwgMjQ0LCAzNiwgNywgMywgMSwgMTQyLCAyLCAyMzQsIDExNiwgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIAorICAgIDE0MiwgMiwgMjM0LCAxMTYsIDI1LCAxNjgsIDcsIDMsIDEsIDE0MiwgMiwgMjM0LCAxMTYsIDI1LCAxNjgsIDcsIDYsIDEsIAorICAgIDIzMCwgNjAsIDIsIDE2OCwgNywgMywgMSwgMjMwLCA2MCwgMiwgMTY4LCA3LCA2LCAxLCAyMzAsIDYwLCAyLCA2MSwgNTAsIAorICAgIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjI4LCAzOSwgMiwgNjEsIDUwLCA3LCAzLCAxLCAyMjgsIAorICAgIDM5LCAyLCA2MSwgNTAsIDcsIDYsIDEsIDIyOCwgMzksIDIsIDYxLCA1NiwgNywgMywgMSwgMjI4LCAzOSwgMiwgNjEsIDU2LCAKKyAgICA3LCA2LCAxLCAyMjgsIDM5LCAyLCA2MSwgMjUyLCAxMTgsIDI1LCAyMzQsIDExNSwgNywgMywgMSwgMjI4LCAzOSwgMiwgNjEsIAorICAgIDI1MiwgMTE4LCAyNSwgMjM0LCAxMTUsIDcsIDYsIDEsIDIyOCwgMzksIDIsIDIzNSwgNDQsIDU2LCA3LCAzLCAxLCAyMjgsIAorICAgIDM5LCAyLCAyMzUsIDQ0LCA1NiwgNywgNiwgMSwgMjI2LCAyMzUsIDIsIDYxLCA1MCwgNywgMywgMSwgMjI2LCAyMzUsIDIsIAorICAgIDYxLCA1MCwgNywgNiwgMSwgMjI2LCAyMzUsIDIsIDYxLCA1NiwgNywgMywgMSwgMjI2LCAyMzUsIDIsIDYxLCA1NiwgNywgNiwgCisgICAgMSwgMjI2LCAyMzUsIDIsIDI1NCwgMjQ4LCAyNSwgNjEsIDUwLCA3LCAzLCAxLCAyMjYsIDIzNSwgMiwgMjU0LCAyNDgsIDI1LCAKKyAgICA2MSwgNTAsIDcsIDYsIDEsIDIyNiwgMjM1LCAyLCAyNTEsIDEzMSwgMjUsIDYxLCA1MCwgNywgMywgMSwgMjI2LCAyMzUsIDIsIAorICAgIDI1MSwgMTMxLCAyNSwgNjEsIDUwLCA3LCA2LCAxLCAyMjYsIDIzNSwgMiwgNjEsIDI1MiwgMTE4LCAyNSwgNjEsIDUwLCA3LCAKKyAgICAzLCAxLCAyMjYsIDIzNSwgMiwgNjEsIDI1MiwgMTE4LCAyNSwgNjEsIDUwLCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgNjEsIAorICAgIDUwLCA3LCAzLCAxLCAyMjIsIDIwMiwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgNjEsIDU2LCA3LCAzLCAxLCAKKyAgICAyMjIsIDIwMiwgMiwgNjEsIDU2LCA3LCA2LCAxLCAyMjIsIDIwMiwgMiwgMjM1LCA0NCwgNTYsIDcsIDMsIDEsIDIyMiwgCisgICAgMjAyLCAyLCAyMzUsIDQ0LCA1NiwgNywgNiwgMSwgMjIyLCAyMDIsIDIsIDI1MCwgMjE3LCA1NiwgNywgMywgMSwgMjIyLCAKKyAgICAyMDIsIDIsIDI1MCwgMjE3LCA1NiwgNywgNiwgMSwgMTA1LCAyLCAyNDksIDE0LCA1NiwgNywgMywgMSwgMTA1LCAyLCAyNDksIAorICAgIDE0LCA1NiwgNywgNiwgMSwgMTA1LCAyLCAyMjEsIDE4MCwgNTYsIDcsIDMsIDEsIDEwNSwgMiwgMjIxLCAxODAsIDU2LCA3LCAKKyAgICA2LCAxLCAxMDUsIDIsIDI1MCwgMjE3LCA1NiwgNywgMywgMSwgMTA1LCAyLCAyNTAsIDIxNywgNTYsIDcsIDYsIDEsIDEwNSwgCisgICAgMiwgMjIxLCAxODAsIDI1LCAxNjgsIDcsIDMsIDEsIDEwNSwgMiwgMjIxLCAxODAsIDI1LCAxNjgsIDcsIDYsIDEsIDEwNSwgCisgICAgMiwgMjM0LCAxMTYsIDI1LCAyNDksIDEzLCA3LCAzLCAxLCAxMDUsIDIsIDIzNCwgMTE2LCAyNSwgMjQ5LCAxMywgNywgNiwgCisgICAgMSwgMjIwLCAxMSwgMiwgMjIxLCAxNzksIDcsIDMsIDEsIDIyMCwgMTEsIDIsIDIyMSwgMTc5LCA3LCA2LCAxLCAyMjAsIDExLCAKKyAgICAyLCA2MSwgNTYsIDcsIDMsIDEsIDIyMCwgMTEsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjE5LCA0MSwgMiwgMjQ0LCAzNiwgNywgCisgICAgMywgMSwgMjE5LCA0MSwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMjE5LCA0MSwgMiwgMTY4LCA3LCAzLCAxLCAyMTksIDQxLCAyLCAKKyAgICAxNjgsIDcsIDYsIDEsIDIxOSwgNDEsIDIsIDI0OSwgMTMsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIDI0OSwgMTMsIDcsIDYsIDEsIAorICAgIDIxOSwgNDEsIDIsIDYxLCA1MCwgNywgMywgMSwgMjE5LCA0MSwgMiwgNjEsIDUwLCA3LCA2LCAxLCAyMTksIDQxLCAyLCA2MSwgCisgICAgNTYsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIDYxLCA1NiwgNywgNiwgMSwgMjE4LCAxNTIsIDIsIDYxLCA1MCwgNywgMywgMSwgCisgICAgMjE4LCAxNTIsIDIsIDYxLCA1MCwgNywgNiwgMSwgMjE4LCAxNTIsIDIsIDI0OSwgMTMsIDcsIDMsIDEsIDIxOCwgMTUyLCAyLCAKKyAgICAyNDksIDEzLCA3LCA2LCAxLCAyMTgsIDkxLCAyLCA2MSwgNTAsIDcsIDMsIDEsIDIxOCwgOTEsIDIsIDYxLCA1MCwgNywgNiwgCisgICAgMSwgMjE3LCAxNTgsIDIsIDI1MCwgMjE2LCA3LCAzLCAxLCAyMTcsIDE1OCwgMiwgMjUwLCAyMTYsIDcsIDYsIDEsIDIxNywgCisgICAgMTU4LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDIxNywgMTU4LCAyLCA2MSwgNTYsIDcsIDYsIDEsIDIxNywgMTU4LCAyLCAyMzUsIAorICAgIDQ0LCA1NiwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDIzNSwgNDQsIDU2LCA3LCAzLCAxLCAyNDMsIDIyNiwgMiwgMjM1LCA0NCwgCisgICAgNTYsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyNDksIDEzLCA3LCAzLCAxLCAyMTksIDQxLCAyLCAyMjcsIDk0LCA1MCwgNywgCisgICAgMywgMSwgMjE4LCA5MSwgMiwgMjI3LCA5NCwgNTAsIDcsIDMsIDEsIDExMiwgMiwgNDUsIDE0NCwgMjI3LCA5MywgNywgMywgCisgICAgMSwgMTcxLCAyMjYsIDIzNSwgMiwgNjEsIDUwLCA3LCAzLCAxLCAxNzEsIDIyNiwgMjM1LCAyLCAyNDksIDExLCA5MiwgNywgCisgICAgMywgMSwgMTcxLCAyMjYsIDIzNSwgMiwgMTE2LCA5MiwgNywgNiwgMSwgMjI1LCAxLCAxOTgsIDcsIDMsIDEsIDI0OSwgNjIsIAorICAgIDcsIDYsIDEsIDExMiwgMiwgNjEsIDU2LCA3LCAzLCAxLCAxMTIsIDIsIDYxLCA1NiwgNywgNiwgMSwgMTEyLCAyLCAyNDIsIAorICAgIDI0NywgNTAsIDcsIDMsIDEsIDExMiwgMiwgMjQyLCAyNDcsIDUwLCA3LCA2LCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgCisgICAgMTY4LCA3LCAzLCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgMTY4LCA3LCA2LCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgCisgICAgMjQ0LCAzNiwgNywgMywgMSwgMTEyLCAyLCAyNTAsIDIxNywgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIDExMiwgMiwgMjUwLCAKKyAgICAyMTcsIDI1LCAyNDIsIDI0NywgNTAsIDcsIDMsIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCAyNDIsIDI0NywgNTAsIDcsIDYsIAorICAgIDEsIDExMiwgMiwgMjUwLCAyMTcsIDI1LCAyMjEsIDE3OSwgNywgMywgMSwgMTEyLCAyLCAyNTAsIDIxNywgMjUsIDIyMSwgCisgICAgMTc5LCA3LCA2LCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAyNSwgNjEsIDU2LCA3LCAzLCAxLCAxMTIsIDIsIDI1MCwgMjE3LCAKKyAgICAyNSwgNjEsIDU2LCA3LCA2LCAxLCAxMTIsIDIsIDI1MiwgOSwgMjUsIDE2OCwgNywgMywgMSwgMTEyLCAyLCAyNTIsIDksIAorICAgIDI1LCAxNjgsIDcsIDYsIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgMjQ0LCAzNiwgNywgMywgMSwgMTEyLCAyLCAyNTIsIDksIAorICAgIDI1LCAyNDQsIDM2LCA3LCA2LCAxLCAxMTIsIDIsIDI1MiwgOSwgMjUsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTEyLCAyLCAKKyAgICAyNTIsIDksIDI1LCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgMjIxLCAxNzksIDcsIDMsIDEsIAorICAgIDExMiwgMiwgMjUyLCA5LCAyNSwgMjIxLCAxNzksIDcsIDYsIDEsIDExMiwgMiwgMjUyLCA5LCAyNSwgNjEsIDU2LCA3LCAzLCAKKyAgICAxLCAxMTIsIDIsIDI1MiwgOSwgMjUsIDYxLCA1NiwgNywgNiwgMSwgMTc4LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDE3OCwgMiwgCisgICAgNjEsIDU2LCA3LCA2LCAxLCAxNzgsIDIsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTc4LCAyLCAyNDIsIDI0NywgNTAsIDcsIAorICAgIDYsIDEsIDE3OCwgMiwgMjIxLCAxNzksIDcsIDMsIDEsIDE3OCwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDE3OCwgMiwgMjUwLCAKKyAgICAyMTcsIDI1LCAxNjgsIDcsIDMsIDEsIDE3OCwgMiwgMjUwLCAyMTcsIDI1LCAxNjgsIDcsIDYsIDEsIDE3OCwgMiwgMjUwLCAKKyAgICAyMTcsIDI1LCAyNDQsIDM2LCA3LCAzLCAxLCAxNzgsIDIsIDI1MCwgMjE3LCAyNSwgMjQ0LCAzNiwgNywgNiwgMSwgMTc4LCAKKyAgICAyLCAyNTAsIDIxNywgMjUsIDI0MiwgMjQ3LCA1MCwgNywgMywgMSwgMTc4LCAyLCAyNTAsIDIxNywgMjUsIDI0MiwgMjQ3LCAKKyAgICA1MCwgNywgNiwgMSwgMTc4LCAyLCAyNTAsIDIxNywgMjUsIDIyMSwgMTc5LCA3LCAzLCAxLCAxNzgsIDIsIDI1MCwgMjE3LCAKKyAgICAyNSwgMjIxLCAxNzksIDcsIDYsIDEsIDE3OCwgMiwgMjUwLCAyMTcsIDI1LCA2MSwgNTYsIDcsIDMsIDEsIDE3OCwgMiwgCisgICAgMjUwLCAyMTcsIDI1LCA2MSwgNTYsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCAyNDIsIDI0NywgNTAsIDcsIDMsIDEsIDI0MiwgCisgICAgMTA3LCAyLCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDI0MiwgMTA3LCAyLCA2MSwgNTYsIDcsIDMsIDEsIDI0MiwgMTA3LCAyLCAKKyAgICA2MSwgNTYsIDcsIDYsIDEsIDE0MiwgMiwgNjEsIDU2LCA3LCAzLCAxLCAxNDIsIDIsIDYxLCA1NiwgNywgNiwgMSwgMTQyLCAKKyAgICAyLCAyNDIsIDI0NywgNTAsIDcsIDMsIDEsIDE0MiwgMiwgMjQyLCAyNDcsIDUwLCA3LCA2LCAxLCAxNDIsIDIsIDI1MCwgCisgICAgMjE3LCAyNSwgMTY4LCA3LCAzLCAxLCAxNDIsIDIsIDI1MCwgMjE3LCAyNSwgMTY4LCA3LCA2LCAxLCAxNDIsIDIsIDI1MCwgCisgICAgMjE3LCAyNSwgMjQ0LCAzNiwgNywgMywgMSwgMTQyLCAyLCAyNTAsIDIxNywgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIDE0MiwgCisgICAgMiwgMjUwLCAyMTcsIDI1LCAyNDIsIDI0NywgNTAsIDcsIDMsIDEsIDE0MiwgMiwgMjUwLCAyMTcsIDI1LCAyNDIsIDI0NywgCisgICAgNTAsIDcsIDYsIDEsIDE0MiwgMiwgMjUwLCAyMTcsIDI1LCAyMjEsIDE3OSwgNywgMywgMSwgMTQyLCAyLCAyNTAsIDIxNywgCisgICAgMjUsIDIyMSwgMTc5LCA3LCA2LCAxLCAxNDIsIDIsIDI1MCwgMjE3LCAyNSwgNjEsIDU2LCA3LCAzLCAxLCAxNDIsIDIsIAorICAgIDI1MCwgMjE3LCAyNSwgNjEsIDU2LCA3LCA2LCAxLCAxNDIsIDIsIDI0MiwgMTkwLCAyNSwgMTY4LCA3LCAzLCAxLCAxNDIsIAorICAgIDIsIDI0MiwgMTkwLCAyNSwgMTY4LCA3LCA2LCAxLCAxNDIsIDIsIDI0MiwgMTkwLCAyNSwgMjQ0LCAzNiwgNywgMywgMSwgCisgICAgMTQyLCAyLCAyNDIsIDE5MCwgMjUsIDI0NCwgMzYsIDcsIDYsIDEsIDE0MiwgMiwgMjQyLCAxOTAsIDI1LCAyNDIsIDI0NywgCisgICAgNTAsIDcsIDMsIDEsIDE0MiwgMiwgMjQyLCAxOTAsIDI1LCAyNDIsIDI0NywgNTAsIDcsIDYsIDEsIDE0MiwgMiwgMjQyLCAKKyAgICAxOTAsIDI1LCAyMjEsIDE3OSwgNywgMywgMSwgMTQyLCAyLCAyNDIsIDE5MCwgMjUsIDIyMSwgMTc5LCA3LCA2LCAxLCAxNDIsIAorICAgIDIsIDI0MiwgMTkwLCAyNSwgNjEsIDU2LCA3LCAzLCAxLCAxNDIsIDIsIDI0MiwgMTkwLCAyNSwgNjEsIDU2LCA3LCA2LCAxLCAKKyAgICAxMDUsIDIsIDYxLCA1NiwgNywgMywgMSwgMTA1LCAyLCA2MSwgNTYsIDcsIDYsIDEsIDEwNSwgMiwgMjQyLCAyNDcsIDUwLCAKKyAgICA3LCAzLCAxLCAxMDUsIDIsIDI0MiwgMjQ3LCA1MCwgNywgNiwgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDE2OCwgNywgMywgCisgICAgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDE2OCwgNywgNiwgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDI0NCwgMzYsIDcsIAorICAgIDMsIDEsIDEwNSwgMiwgMjQyLCAxOTAsIDI1LCAyNDQsIDM2LCA3LCA2LCAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgMjQyLCAKKyAgICAyNDcsIDUwLCA3LCAzLCAxLCAxMDUsIDIsIDI0MiwgMTkwLCAyNSwgMjQyLCAyNDcsIDUwLCA3LCA2LCAxLCAxMDUsIDIsIAorICAgIDI0MiwgMTkwLCAyNSwgMjIxLCAxNzksIDcsIDMsIDEsIDEwNSwgMiwgMjQyLCAxOTAsIDI1LCAyMjEsIDE3OSwgNywgNiwgMSwgCisgICAgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDYxLCA1NiwgNywgMywgMSwgMTA1LCAyLCAyNDIsIDE5MCwgMjUsIDYxLCA1NiwgNywgCisgICAgNiwgMSwgMjE4LCA5MSwgMiwgMjQ0LCAzNiwgNywgMywgMSwgMjE4LCA5MSwgMiwgMjQ0LCAzNiwgNywgNiwgMSwgMjE4LCAKKyAgICA5MSwgMiwgNjEsIDU2LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCA2MSwgNTYsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDI0MiwgCisgICAgMjQ3LCA1MCwgNywgMywgMSwgMjE4LCA5MSwgMiwgMjQyLCAyNDcsIDUwLCA3LCA2LCAxLCAyMTgsIDkxLCAyLCAyMjEsIAorICAgIDE3OSwgNywgMywgMSwgMjE4LCA5MSwgMiwgMjIxLCAxNzksIDcsIDYsIDEsIDIzMywgMTkyLCAyMzUsIDE4LCA3LCAzLCAxLCAKKyAgICAyMzMsIDE5MiwgMjM1LCAxOCwgNywgNiwgMSwgMjMzLCAxOTIsIDIxNiwgMjE2LCA3LCAzLCAxLCAyMzMsIDE5MiwgMjE2LCAKKyAgICAyMTYsIDcsIDYsIDEsIDIxOCwgOTEsIDIsIDIzNCwgMjQ3LCA3LCAzLCAxLCAyMTgsIDkxLCAyLCAyMzQsIDI0NywgMjMsIDMsIAorICAgIDEsIDI1NCwgMTQ3LCAyLCAyMjgsIDIwNiwgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyNDksIDE0NCwgMjMsIDMsIDEsIDI1NCwgCisgICAgMTQ3LCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIAorICAgIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIzMCwgCisgICAgNjQsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMTkzLCAKKyAgICAyNSwgMjI5LCAxNjMsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjI4LCAyMDYsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgCisgICAgMjQ5LCAxNDQsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyNTQsIDE0NywgCisgICAgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIAorICAgIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDIwOSwgMjUsIDIyOSwgMTYzLCAKKyAgICAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDIyOCwgCisgICAgMjA2LCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDI0OSwgMTQ0LCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDIwOSwgMjUsIAorICAgIDIxOSwgMTc4LCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgMywgMSwgMjQ2LCAxNTcsIAorICAgIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyNDYsIDE1NywgMiwgMTkzLCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIAorICAgIDI0NiwgMTU3LCAyLCAyMjgsIDIwNiwgMjMsIDYsIDEsIDI0NiwgMTU3LCAyLCAyNDksIDE0NCwgMjMsIDYsIDEsIDI0NiwgCisgICAgMTU3LCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDI0NiwgMTU3LCAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIAorICAgIDYsIDEsIDI0NiwgMTU3LCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgMjQ2LCAxNTcsIDIsIDE5MywgMjUsIDIzMCwgCisgICAgNjQsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjI4LCAyMDYsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjQ5LCAxNDQsIDIzLCAKKyAgICAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgCisgICAgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAKKyAgICAxOTMsIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgCisgICAgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDIyOCwgMjA2LCAyMywgNiwgCisgICAgMSwgMjQ2LCAxMjIsIDIsIDI0OSwgMTQ0LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgCisgICAgNiwgMSwgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIAorICAgIDIzMCwgNjQsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAKKyAgICAyMDksIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMjksIDE2MywgMjMsIDMsIDEsIAorICAgIDIzNywgMTYzLCAyLCAyMjgsIDIwNiwgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyNDksIDE0NCwgMjMsIDMsIDEsIDIzNywgCisgICAgMTYzLCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIAorICAgIDMsIDEsIDIzNywgMTYzLCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDE5MywgMjUsIDIzMCwgCisgICAgNjQsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMTkzLCAKKyAgICAyNSwgMjI5LCAxNjMsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjI4LCAyMDYsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgCisgICAgMjQ5LCAxNDQsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMzcsIDE2MywgCisgICAgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjA5LCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIAorICAgIDIzNywgMTYzLCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgMjM3LCAxNjMsIDIsIDIwOSwgMjUsIDIyOSwgMTYzLCAKKyAgICAyMywgNiwgMSwgMjM3LCAxNjMsIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDIyOCwgCisgICAgMjA2LCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDI0OSwgMTQ0LCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDIwOSwgMjUsIAorICAgIDIxOSwgMTc4LCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgMywgMSwgMjMwLCAxNDIsIAorICAgIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzAsIDE0MiwgMiwgMTkzLCAyNSwgMjMwLCA2NCwgMjMsIDYsIDEsIAorICAgIDIzMCwgMTQyLCAyLCAyMjgsIDIwNiwgMjMsIDYsIDEsIDIzMCwgMTQyLCAyLCAyNDksIDE0NCwgMjMsIDYsIDEsIDIzMCwgCisgICAgMTQyLCAyLCAyMDksIDI1LCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzMCwgMTQyLCAyLCAxOTMsIDI1LCAyMTksIDE3OCwgMjMsIAorICAgIDYsIDEsIDIzMCwgMTQyLCAyLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgMjMwLCAxNDIsIDIsIDE5MywgMjUsIDIzMCwgCisgICAgNjQsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyMjgsIDIwNiwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDI0OSwgMTQ0LCAyMywgCisgICAgMywgMSwgMjIwLCA1OCwgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAxOTMsIDI1LCAyMTksIAorICAgIDE3OCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAxOTMsIAorICAgIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjA5LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMjAsIDU4LCAKKyAgICAyLCAxOTMsIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIDI0OSwgMTQ0LCAyMywgNiwgMSwgMjIwLCA1OCwgCisgICAgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMjAsIDU4LCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjIwLCA1OCwgMiwgMTkzLCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjI4LCAyMDYsIDIzLCAzLCAxLCAKKyAgICAyMzAsIDE0NCwgMiwgMjQ5LCAxNDQsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAKKyAgICAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjMwLCAKKyAgICA2NCwgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIwOSwgCisgICAgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjMwLCAKKyAgICAxNDQsIDIsIDIyOCwgMjA2LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDI0OSwgMTQ0LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIAorICAgIDIwOSwgMjUsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgNiwgMSwgCisgICAgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIzMCwgNjQsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjMwLCA2NCwgCisgICAgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAyMDksIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAKKyAgICAyMjksIDE2MywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMTksIDE3OCwgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMzAsIAorICAgIDY0LCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDIxOSwgMTc4LCAyMywgMywgMSwgMjQ2LCAxNTcsIDIsIDIzMCwgNjQsIDIzLCAKKyAgICAzLCAxLCAyNDYsIDEyMiwgMiwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjMwLCA2NCwgMjMsIDMsIDEsIAorICAgIDIzNywgMTYzLCAyLCAyMTksIDE3OCwgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyMzAsIDY0LCAyMywgMywgMSwgMjMwLCAKKyAgICAxNDIsIDIsIDIxOSwgMTc4LCAyMywgMywgMSwgMjMwLCAxNDIsIDIsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAKKyAgICAyMTksIDE3OCwgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDIzMCwgNjQsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjE5LCAxNzgsIAorICAgIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjMwLCA2NCwgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAyMTcsIDIwNywgCisgICAgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMDksIDI1LCAKKyAgICAyMTksIDE3OSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIxOSwgMTc5LCAyNSwgCisgICAgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjMwLCA2NSwgMjUsIDIxNywgMjA3LCAyMywgMywgCisgICAgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIzMCwgNjUsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAKKyAgICAyMDksIDI1LCAyMjksIDE2NCwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDE5MywgMjUsIDIyOSwgCisgICAgMTY0LCAyNSwgMjE3LCAyMDcsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAKKyAgICAyNTQsIDE0NywgMiwgMTkzLCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjE5LCAxNzksIAorICAgIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMTksIDE3OSwgMjUsIDIyOCwgMjE3LCAyMywgCisgICAgNiwgMSwgMjU0LCAxNDcsIDIsIDIwOSwgMjUsIDIzMCwgNjUsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAKKyAgICAxOTMsIDI1LCAyMzAsIDY1LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNTQsIDE0NywgMiwgMjA5LCAyNSwgMjI5LCAxNjQsIAorICAgIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAxOTMsIDI1LCAyMjksIDE2NCwgMjUsIDIyOCwgMjE3LCAyMywgCisgICAgMywgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIAorICAgIDIxNywgMjA3LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIxOSwgMTc5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAKKyAgICAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDI0NiwgMTIyLCAyLCAKKyAgICAyMDksIDI1LCAyMzAsIDY1LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjMwLCA2NSwgCisgICAgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDIwOSwgMjUsIDIyOSwgMTY0LCAyNSwgMjE3LCAyMDcsIDIzLCAKKyAgICAzLCAxLCAyNDYsIDEyMiwgMiwgMTkzLCAyNSwgMjI5LCAxNjQsIDI1LCAyMTcsIDIwNywgMjMsIDYsIDEsIDI0NiwgMTIyLCAKKyAgICAyLCAyMDksIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAxOTMsIDI1LCAyMjgsIDIxNywgMjMsIDYsIDEsIAorICAgIDI0NiwgMTIyLCAyLCAyMDksIDI1LCAyMTksIDE3OSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDE5MywgCisgICAgMjUsIDIxOSwgMTc5LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyNDYsIDEyMiwgMiwgMjA5LCAyNSwgMjMwLCA2NSwgMjUsIAorICAgIDIyOCwgMjE3LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIDE5MywgMjUsIDIzMCwgNjUsIDI1LCAyMjgsIDIxNywgMjMsIDYsIAorICAgIDEsIDI0NiwgMTIyLCAyLCAyMDksIDI1LCAyMjksIDE2NCwgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjQ2LCAxMjIsIDIsIAorICAgIDE5MywgMjUsIDIyOSwgMTY0LCAyNSwgMjI4LCAyMTcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjA5LCAyNSwgMjE3LCAKKyAgICAyMDcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgCisgICAgMjA5LCAyNSwgMjE5LCAxNzksIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMTksIAorICAgIDE3OSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIzMCwgNjUsIDI1LCAyMTcsIDIwNywgCisgICAgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAyMzAsIDY1LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyMzAsIAorICAgIDE0NCwgMiwgMjA5LCAyNSwgMjI5LCAxNjQsIDI1LCAyMTcsIDIwNywgMjMsIDMsIDEsIDIzMCwgMTQ0LCAyLCAxOTMsIDI1LCAKKyAgICAyMjksIDE2NCwgMjUsIDIxNywgMjA3LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgCisgICAgMSwgMjMwLCAxNDQsIDIsIDE5MywgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIwOSwgMjUsIDIxOSwgCisgICAgMTc5LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjE5LCAxNzksIDI1LCAyMjgsIAorICAgIDIxNywgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAyMDksIDI1LCAyMzAsIDY1LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAKKyAgICAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjMwLCA2NSwgMjUsIDIyOCwgMjE3LCAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIwOSwgCisgICAgMjUsIDIyOSwgMTY0LCAyNSwgMjI4LCAyMTcsIDIzLCA2LCAxLCAyMzAsIDE0NCwgMiwgMTkzLCAyNSwgMjI5LCAxNjQsIDI1LCAKKyAgICAyMjgsIDIxNywgMjMsIDMsIDEsIDI1NCwgMTQ3LCAyLCAyMTksIDU3LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIzNCwgCisgICAgMTE1LCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIxOSwgMTc5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgCisgICAgMiwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNTQsIDE0NywgMiwgMjMwLCA2NSwgMjUsIDIxNywgMjA3LCAyMywgMywgMSwgMjU0LCAKKyAgICAxNDcsIDIsIDIyOSwgMTYzLCAyMywgMywgMSwgMjU0LCAxNDcsIDIsIDIyOSwgMTY0LCAyNSwgMjE3LCAyMDcsIDIzLCA2LCAKKyAgICAxLCAyNTQsIDE0NywgMiwgMjE5LCA1NywgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMzQsIDExNSwgMjMsIDYsIDEsIDI1NCwgCisgICAgMTQ3LCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDI1NCwgMTQ3LCAyLCAyMzAsIDY0LCAyMywgNiwgMSwgMjU0LCAxNDcsIDIsIAorICAgIDIyOCwgMjE3LCAyMywgMjM2LCAzMywgMjMsIDIyOCwgMjE3LCAyMywgMjI4LCAyMDYsIDIzLCAyMjksIDE2MywgMjMsIDI0OSwgCisgICAgOCwgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDIxOSwgMTc5LCAyNSwgMjE3LCAyMDcsIDIzLCAzLCAxLCAKKyAgICAyNDYsIDEyMiwgMiwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyNDYsIDEyMiwgMiwgMjMwLCA2NSwgMjUsIDIxNywgMjA3LCAyMywgCisgICAgMywgMSwgMjQ2LCAxMjIsIDIsIDIyOSwgMTYzLCAyMywgMywgMSwgMjQ2LCAxMjIsIDIsIDIyOSwgMTY0LCAyNSwgMjE3LCAKKyAgICAyMDcsIDIzLCA2LCAxLCAyNDYsIDE1NywgMiwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyNDYsIDE1NywgMiwgMjMwLCA2NCwgMjMsIAorICAgIDYsIDEsIDI0NiwgMTIyLCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDI0NiwgMTIyLCAyLCAyMzAsIDY0LCAyMywgNiwgMSwgCisgICAgMjQ2LCAxMjIsIDIsIDIyOCwgMjE3LCAyMywgMjA5LCAyNSwgMjE5LCAxNzgsIDIzLCAyMDksIDI1LCAyMzAsIDY0LCAyMywgCisgICAgMjA5LCAyNSwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMzcsIDE2MywgMiwgMjE5LCA1NywgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAKKyAgICAyMzQsIDExNSwgMjMsIDMsIDEsIDIzNywgMTYzLCAyLCAyNDksIDgsIDI1LCAyMTksIDE3OCwgMjMsIDMsIDEsIDIzNywgCisgICAgMTYzLCAyLCAyNDksIDgsIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjM3LCAxNjMsIDIsIDIyOSwgMTYzLCAyMywgMywgMSwgCisgICAgMjM3LCAxNjMsIDIsIDI0OSwgOCwgMjUsIDIyOSwgMTYzLCAyMywgNiwgMSwgMjM3LCAxNjMsIDIsIDIxOSwgNTcsIDIzLCA2LCAKKyAgICAxLCAyMzcsIDE2MywgMiwgMjM0LCAxMTUsIDIzLCA2LCAxLCAyMzcsIDE2MywgMiwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMzcsIAorICAgIDE2MywgMiwgMjMwLCA2NCwgMjMsIDE5MywgMjUsIDIxOSwgMTc4LCAyMywgMTkzLCAyNSwgMjMwLCA2NCwgMjMsIDE5MywgCisgICAgMjUsIDIyOSwgMTYzLCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjE5LCA1NywgMjMsIDMsIDEsIDIyMCwgNTgsIDIsIDIzNCwgCisgICAgMTE1LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjQ5LCA4LCAyNSwgMjE5LCAxNzgsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAKKyAgICAyNDksIDgsIDI1LCAyMzAsIDY0LCAyMywgMywgMSwgMjI3LCAxNTAsIDIsIDIyOCwgMjA2LCAyMywgMywgMSwgMjI3LCAxNTAsIAorICAgIDIsIDI0OSwgMTQ0LCAyMywgMywgMSwgMjIwLCA1OCwgMiwgMjI5LCAxNjMsIDIzLCAzLCAxLCAyMjAsIDU4LCAyLCAyNDksIAorICAgIDgsIDI1LCAyMjksIDE2MywgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIDIxOSwgNTcsIDIzLCA2LCAxLCAyMjAsIDU4LCAyLCAKKyAgICAyMzQsIDExNSwgMjMsIDYsIDEsIDIyMCwgNTgsIDIsIDIxOSwgMTc4LCAyMywgNiwgMSwgMjIwLCA1OCwgMiwgMjMwLCA2NCwgCisgICAgMjMsIDYsIDEsIDIyNywgMTUwLCAyLCAyNDksIDE0NCwgMjMsIDI0OSwgOCwgMjUsIDIxOSwgMTc4LCAyMywgMjQ5LCA4LCAKKyAgICAyNSwgMjMwLCA2NCwgMjMsIDIxOSwgMTc4LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIxOSwgMTc5LCAyNSwgMjE3LCAyMDcsIAorICAgIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjE3LCAyMDcsIDIzLCAzLCAxLCAyMzAsIDE0NCwgMiwgMjMwLCA2NSwgMjUsIDIxNywgCisgICAgMjA3LCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIyOSwgMTYzLCAyMywgMywgMSwgMjMwLCAxNDQsIDIsIDIyOSwgMTY0LCAKKyAgICAyNSwgMjE3LCAyMDcsIDIzLCA2LCAxLCAyMzAsIDE0MiwgMiwgMjE5LCAxNzgsIDIzLCA2LCAxLCAyMzAsIDE0MiwgMiwgCisgICAgMjMwLCA2NCwgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAyMTksIDE3OCwgMjMsIDYsIDEsIDIzMCwgMTQ0LCAyLCAyMzAsIDY0LCAKKyAgICAyMywgNiwgMSwgMjMwLCAxNDQsIDIsIDIyOCwgMjE3LCAyMywgMjMwLCA2NCwgMjMsIDI0OSwgMTQ0LCAyNDYsIDE5OCwgCisgICAgMjI4LCA5NSwgMjQ2LCAyMDYsIDIyOCwgOTUsIDI0NiwgMTk4LCAyMjMsIDI1NCwgMjQ2LCAyMDYsIDIyMywgMjU0LCAyMjEsIAorICAgIDIyNiwgMjIzLCAyNTQsIDI0NSwgMTE0LCAyMjMsIDI1NCwgMjI0LCA4MCwgMjIzLCAyNTQsIDI0NSwgMTk0LCAyMjMsIDI1NCwgCisgICAgMjI4LCAxOTcsIDIyMywgMjU0LCAyMjEsIDI1MywgMjIzLCAyNTQsIDI0MywgMjAxLCAyMjMsIDI1NCwgMjE3LCA4NSwgMjE4LCAKKyAgICAxOTksIDIyMywgMjU0LCAyMTcsIDg1LCAyMTgsIDE5OSwgMjMxLCAxOTcsIDIxNywgODUsIDIxOCwgMTk5LCAyMzcsIDU0LCAKKyAgICAyMzUsIDEwOCwgNzgsIDIyNywgMTAyLCA3OCwgMjQyLCAxMjEsIDIzMSwgMTk4LCAyNDIsIDEyMSwgMjQ1LCAxOTQsIDI0OSwgCisgICAgMTQ2LCAyNDYsIDE5OCwgMjQ5LCAxNDYsIDI0NiwgMjA2LCAyNDksIDE0NiwgMTg2LCAxMzUsIDUxLCA2OSwgMjM1LCA0MywgCisgICAgNTEsIDEwOSwgMjM1LCA0MywgNDIsIDIyNCwgMTA5LCAyMjgsIDY5LCA3OCwgNDUsIDIyNCwgMTA5LCAyMjgsIDY5LCA3OCwgCisgICAgMjI0LCAxMDksIDIzNCwgMjM4LCAyMjgsIDY5LCA3OCwgMjI0LCAxMDksIDI0MywgOTgsIDIyOCwgNjksIDc4LCA0MiwgNTEsIAorICAgIDIyOCwgNjksIDc4LCA0NSwgNTEsIDIyOCwgNjksIDc4LCA1MSwgMjM0LCAyMzgsIDIyOCwgNjksIDc4LCA1MSwgMjQzLCA5OCwgCisgICAgMjI4LCA2OSwgNzgsIDI0OSwgMTkyLCA1MSwgMjQ5LCAxOTIsIDI1MSwgMjQxLCAyMjEsIDg3LCAyNTEsIDI0MSwgMTMxLCAKKyAgICA2MSwgMjM1LCAxMjEsIDEyNCwgNjEsIDIzNSwgMTIxLCAxODYsIDI0NiwgMjA4LCAyNDIsIDExOSwgMjI5LCAzMSwgMjM1LCAKKyAgICA0NCwgMjI1LCA1NCwgMjI5LCAyNDEsIDIyNSwgNTQsIDIzNSwgMTA4LCAyNDYsIDIwNCwgMjI3LCAxMDIsIDI0NiwgMjA0LCAKKyAgICAyMjksIDIwLCAyNDgsIDIwOSwgMjQ1LCAxMjMsIDIzNSwgMTA4LCAyMzAsIDcxLCAyMjcsIDEwMiwgMjMwLCA3MSwgMjMyLCAKKyAgICAyMTAsIDIzMSwgMjAzLCAyMjMsIDI1NCwgMjI5LCAxNzAsIDIzMywgMTY0LCA1NSwgMjI5LCAxNzAsIDIyMiwgNjYsIDIyMSwgCisgICAgMjMyLCA1NSwgMjI4LCAyMzUsIDUxLCAyMjgsIDIzNSwgMjIxLCA3OCwgMjI4LCAyMzUsIDIxMCwgMjI4LCAyMzUsIDIxMCwgCisgICAgNTEsIDIyOCwgMjM1LCAyMTAsIDIyMSwgNzgsIDIyOCwgMjM1LCAyNTEsIDEzNCwgMjI0LCAxMDksIDIzNSwgMTEyLCAyNTQsIAorICAgIDEyMCwgMjI4LCA2OSwgNzgsIDIyNCwgMTA5LCAyMjcsIDEwNiwgMjU0LCAxMjAsIDIyOCwgNjksIDc4LCAyMjcsIDE5OSwgCisgICAgNzgsIDUxLCAyNDYsIDk1LCA3OCwgMjM3LCAxNzcsIDIzMCwgNzMsIDIyMCwgNzgsIDEyNiwgMjIxLCAyMDAsIDI1MSwgMTM1LCAKKyAgICAyMzcsIDE5MSwgMjI5LCAzMSwgMjUzLCAyNDksIDI0MiwgMTIyLCAyNTEsIDI0MSwgMjQ1LCAxMDgsIDIyNCwgNTUsIDQyLCAKKyAgICA0MCwgMjUyLCAxOCwgMiwgMjI4LCA3NywgNDUsIDQwLCAyNTIsIDE4LCAyLCAyMjgsIDc3LCA1MSwgMjI4LCA4MiwgNzgsIAorICAgIDIyOCwgODIsIDI0NiwgOTUsIDc4LCAyNDYsIDk1LCAyMjgsIDgyLCA3OCwgMjIxLCAxNjQsIDUsIDI0NiwgMTIzLCAyMTAsIAorICAgIDIyOSwgNzMsIDU1LCA4NCwgMTI3LCAyNTEsIDI0MSwgODQsIDkwLCAyNTEsIDI0MSwgMTA5LCAyNTMsIDI1MSwgMjEwLCAKKyAgICAyMjUsIDY3LCAyNTAsIDE5OCwgMjIwLCA2MywgMTI0LCAyNTMsIDI1MCwgMjU0LCAxNTksIDIxOSwgMTAxLCAyNTAsIDE2NywgCisgICAgMjMzLCAxNTUsIDU1LCAyMjMsIDIzLCAyNDksIDE0NiwgMjM3LCAxNzAsIDIyMCwgNzgsIDI0NSwgMTQ1LCAyMjgsIDE5NywgCisgICAgNzgsIDE0OCwgNjEsIDIyOCwgMTk2LCAyMjgsIDkyLCAyMjgsIDIzNSwgMjQ1LCAxMTYsIDYxLCAyMjgsIDE5NiwgMjQ1LCAKKyAgICAxNzAsIDYxLCAyMjgsIDE5NiwgMTI0LCA2MSwgMjI4LCAxOTYsIDI0NSwgMTE2LCA2MSwgNzgsIDI0NywgMTQzLCAyNTAsIAorICAgIDEwMCwgMjIxLCA4NiwgNjksIDI0NSwgMTE2LCAyNDgsIDE0MywgMjM0LCAxOCwgMTQsIDIyMywgMjU0LCAyMTgsIDE3NCwgCisgICAgMjM3LCA1NCwgMjQ1LCA4OCwgMjU0LCA3NiwgMjM3LCAxNjgsIDIyMSwgMTc2LCAyMzcsIDE2OCwgMjI1LCA1NCwgMjM3LCAKKyAgICAxNjgsIDIyOSwgNDMsIDIzNywgMjAxLCAyMjIsIDIyOCwgMjIzLCAzNCwgMjU0LCAyNTAsIDIyMiwgMjI4LCAyMjMsIDM0LCAKKyAgICAyMzcsIDIwMSwgMTIsIDI0NSwgMTI0LCAyMjUsIDUsIDI1NCwgMjUwLCAxMiwgMjQ1LCAxMjQsIDIyNSwgNSwgMjMyLCAyMDYsIAorICAgIDIwLCAyMjUsIDYsIDIzMSwgMTk5LCAyMCwgMjI1LCA2LCAyMjMsIDU5LCAyMTcsIDg0LCAyMjMsIDU5LCA3LCAzLCAxLCA3MiwgCisgICAgMjIzLCA1OSwgMTU0LCAyMjMsIDU5LCAxNzQsIDIyMywgNTksIDE4MiwgMjIzLCA1OSwgMTkxLCAyMjMsIDU5LCAxODUsIAorICAgIDIyMywgNTksIDE5MCwgMjIzLCA1OSwgODgsIDU1LCAyMjMsIDU5LCAyMzMsIDE1NCwgMjIzLCA1OSwgMjQ2LCAxNTQsIDU1LCAKKyAgICAyMjMsIDU5LCA0MiwgMjI5LCAyMjksIDIyMywgNTksIDQ1LCAyMjksIDIyOSwgMjIzLCA1OSwgNywgMywgMSwgMjA3LCAyMjMsIAorICAgIDk0LCAyMTcsIDg0LCAyMjMsIDk0LCAxMDcsIDIyMywgOTQsIDEwMywgMjIzLCA5NCwgMTYwLCAyMjMsIDk0LCAxNTQsIDIyMywgCisgICAgOTQsIDE3NCwgMjIzLCA5NCwgMTgyLCAyMjMsIDk0LCAxOTEsIDIyMywgOTQsIDE4NSwgMjIzLCA5NCwgMTkwLCAyMjMsIDk0LCAKKyAgICA4OCwgNTUsIDIyMywgOTQsIDIzMywgMTU0LCAyMjMsIDk0LCAyNDYsIDE1NCwgNTUsIDIyMywgOTQsIDQyLCAyMjksIDIyOSwgCisgICAgMjIzLCA5NCwgNDUsIDIyOSwgMjI5LCA3LCAyMjMsIDk0LCAzLCAxLCA2MCwgNywgMjIzLCA5NCwgMywgMSwgNzMsIDcsIAorICAgIDIyMywgOTQsIDMsIDEsIDc0LCA3LCAyMjMsIDk0LCAzLCAxLCAyMTgsIDE1MSwgNywgMjIzLCA5NCwgMywgMSwgMjI2LCAKKyAgICAxMDQsIDI0NiwgMTA2LCA1NSwgMjUwLCAxNzYsIDU1LCAyNTAsIDk0LCA1NSwgMjQ1LCAxMDIsIDI0NSwgMTA0LCA1NSwgCisgICAgMjM1LCAzMCwgNTUsIDIzMywgMTY1LCA1NSwgMjMyLCAyMjMsIDU1LCAyMjksIDE1MywgNTUsIDIyNywgNCwgNTUsIDIxOCwgCisgICAgMTgyLCA1NSwgMTQ2LCAyMjQsIDIzMiwgNTUsIDI0OCwgMTUyLCA1NSwgMjQ2LCAxMDcsIDU1LCAyMzYsIDEwMCwgNTUsIAorICAgIDIyMCwgMjUyLCA1NSwgMjQ3LCAxMjcsIDU1LCAyNDQsIDE3MCwgMjI5LCAxNzcsIDU1LCAyMjksIDE1MSwgNTUsIDI0NCwgCisgICAgMTQsIDU1LCAyNTMsIDIyNCwgNTUsIDI0MiwgMTc2LCA1NSwgMjUxLCA5NCwgNTUsIDIzNSwgMjQsIDIyMSwgMTExLCA1NSwgCisgICAgMjIzLCAyNDYsIDU1LCAyMjIsIDY0LCA1NSwgMzYsIDQyLCAyNDMsIDE3NywgNTAsIDM2LCA0NSwgMjQzLCAxNzcsIDUwLCAKKyAgICAzNiwgMTcxLCA2OSwgMjM1LCA0NCwgMjMwLCA3NCwgMzYsIDIyNCwgMTkyLCA2OSwgMjM1LCA0NCwgMjMwLCA3NCwgMzYsIAorICAgIDI1NCwgMTA0LCA3NiwgNTAsIDM2LCAyNTAsIDE5OSwgNzYsIDUwLCAzNiwgNDIsIDc2LCA1MCwgMzYsIDQ1LCA3NiwgNTAsIAorICAgIDM2LCAyMjcsIDk0LCAyMzAsIDc0LCAzNiwgMjUwLCAxOTksIDIyNywgOTQsIDIzMCwgNzQsIDM2LCAyNTQsIDEwNCwgMjI3LCAKKyAgICA5NCwgMjMwLCA3NCwgMzYsIDE0OCwgMTg4LCA1MCwgMzYsIDI0NSwgMTE2LCAxODgsIDUwLCAzNiwgMjQ2LCAxOTMsIDI1MCwgCisgICAgMjIxLCAzNiwgMjQ2LCAxOTMsIDIyMywgMjI3LCAzNiwgMjQ2LCAxOTMsIDI0OSwgNCwgMzYsIDI0NiwgMTkzLCAyNTAsIAorICAgIDIyMiwgMjUyLCAyMzAsIDM2LCA0MiwgNDUsIDc2LCA1MCwgMzYsIDI0NiwgMTkzLCAyMjYsIDEwMCwgMzYsIDI0NiwgMTkzLCAKKyAgICAyMzYsIDE1MiwgMzYsIDI0NiwgMTkzLCAyMjAsIDU1LCAyMjksIDI4LCAyMjEsIDkwLCAzNiwgMjI3LCAxNjAsIDIyNCwgMTgsIAorICAgIDIzMCwgNzQsIDM2LCA1MSwgNjksIDIxNCwgMjMwLCA3NCwgMzYsIDI1NCwgMTExLCAxMDAsIDM2LCAyMjEsIDc4LCAyMjAsIAorICAgIDgwLCAzNiwgMjE4LCAyMDEsIDI1MiwgNCwgNTAsIDM2LCAxMjcsIDc2LCAyMzAsIDc0LCAzNiwgMTcxLCA1MSwgMjI0LCAxOCwgCisgICAgMjMwLCA3NCwgMzYsIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAyNDcsIDEyOSwgMzYsIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgCisgICAgMjQ3LCAxMjksIDM2LCA0MiwgNzYsIDU2LCAzNiwgNDUsIDc2LCA1NiwgMzYsIDI1MywgMjUyLCA1MCwgMjU0LCAyNTQsIAorICAgIDIzMCwgMTY1LCAyNTQsIDI0MSwgMTk5LCAyMjIsIDIzLCAyMjMsIDk4LCAxNzMsIDYsIDI1MSwgMjAyLCAyNDksIDc3LCAKKyAgICAyNTEsIDg4LCAyNTEsIDg1LCAyMzUsIDQ0LCAxMDAsIDI1MSwgMTM2LCAyMzAsIDE2NSwgMjUxLCAxNjUsIDIyMCwgODYsIAorICAgIDI0NiwgMTA4LCAyNTAsIDE0NCwgMjI2LCA5OCwgMjQ5LCA3NywgMjQ1LCAyNTAsIDEwMiwgMywgMjQ1LCA2NywgMTAyLCA2LCAKKyAgICAyNDMsIDIyNSwgMjUyLCA1MSwgNiwgMjQzLCAyMjUsIDE3MywgNiwgMjQzLCAyMjUsIDIyOSwgNTMsIDI1MCwgMTQ0LCAyMjksIAorICAgIDUzLCAyNTAsIDE0NSwgMTA0LCAxMjQsIDIyOSwgMTA4LCAxMDIsIDYsIDcyLCAyNTIsIDUxLCA2LCA3MiwgMTAyLCA2LCAKKyAgICAxNTMsIDEwMiwgMywgMTUzLCAyMzUsIDIwMiwgNDksIDI1MiwgMjAxLCAxMDAsIDE3MywgNiwgMjA3LCAyMzEsIDEwNSwgNTUsIAorICAgIDIyNCwgOSwgMjI3LCAyMTAsIDI1MCwgMTI1LCAxMDIsIDYsIDIzMCwgNTksIDE3MywgNiwgMjMwLCA1OSwgMTczLCA2LCAKKyAgICAyMjgsIDE2MywgMTAyLCA2LCAxNTIsIDI1MiwgNTEsIDYsIDE1MiwgMTczLCA2LCAxNTIsIDIyOCwgMjM5LCAyMjIsIDEyOSwgCisgICAgMjI3LCAxNjksIDIyNSwgNTAsIDc4LCAyMjIsIDcyLCA1NSwgMjIxLCAxMDcsIDE2NCwgNTUsIDIxOSwgMTUzLCAxNzMsIDYsIAorICAgIDIxNywgMTU3LCAyMzAsIDg1LCA1NSwgMjMwLCAxNjAsIDU1LCAyMzcsIDE3MCwgMjMwLCAxNjAsIDU1LCAyNTIsIDUxLCA2LCAKKyAgICAyMTcsIDE1NywgMjE1LCAyMywgMywgMSwgMjM3LCAxNjIsIDIzNiwgMTc1LCA1NSwgMjU0LCAxMTgsIDU1LCAxMDIsIDYsIAorICAgIDI1MywgMjA0LCAyNTIsIDUxLCA2LCAyNTEsIDIwMiwgMjQ2LCAxMjYsIDEwMCwgMTAyLCAzLCA3MywgMTAyLCA2LCA3MywgCisgICAgMTAyLCA2LCAyNDYsIDc0LCAyMTUsIDYsIDI0NiwgNzQsIDEwMiwgNiwgMTg5LCAxMDIsIDMsIDc0LCA5OSwgMTAwLCAyNTIsIAorICAgIDEwNSwgMTAwLCAyNDQsIDkyLCAxMDAsIDI0OSwgMTc4LCAxMDAsIDIzNywgMjA1LCAyMjQsIDcsIDIyNywgNTksIDYsIDIyOCwgCisgICAgMTYzLCAyNDUsIDI1MiwgNTUsIDE3MywgMywgMjI5LCAxMDgsIDE3MywgMywgMjQ0LCAyMzEsIDE3MywgNiwgMjQ0LCAyMzEsIAorICAgIDE3MywgNiwgMjI5LCAxMDgsIDE3MywgMjMzLCAzMywgMjIzLCA3MSwgMjE1LCAzMywgNiwgMjQ1LCA2NywgMjE1LCAzMywgNiwgCisgICAgMTUzLCAyMTAsIDMzLCA2LCAxNTMsIDIxNSwgMzMsIDYsIDIxOCwgOTAsIDE3MywgMzAsIDYsIDI1MCwgNDYsIDE3MywgMzAsIAorICAgIDMsIDI1MCwgNDYsIDE3MywgMzAsIDMsIDczLCAxNzMsIDMwLCAzLCA3MiwgMTczLCAzMCwgMywgMjM3LCAxMjYsIDIyOCwgCisgICAgMjIwLCAyMzUsIDQzLCAyMTUsIDI1NCwgMTM0LCAyMjksIDE3MCwgNTUsIDI1NCwgMTc3LCAyMTUsIDMsIDI0NiwgNzQsIDE2LCAKKyAgICAzNSwgMjEzLCAyMjQsIDcsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIDIyNSwgNDAsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIAorICAgIDIzMiwgMjYsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIDIyMiwgNjEsIDIxOSwgNTUsIDI0NSwgMTA4LCAxMzEsIDIyMSwgCisgICAgMjUxLCAyMTksIDU1LCAyNDUsIDEwOCwgMTI0LCAyMjEsIDI0OSwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjQ1LCAxOTksIAorICAgIDIxOSwgNTUsIDI0NSwgMTA4LCAxMjQsIDI0NSwgMTk4LCAyMTksIDU1LCAyNDUsIDEwOCwgMTQ4LCAyNDUsIDE5OCwgMjE5LCAKKyAgICA1NSwgMjQ1LCAxMDgsIDI0NSwgMTE2LCAyNDUsIDE5OCwgMjE5LCA1NSwgMjQ1LCAxMDgsIDEzMSwgMjI0LCA3MywgMjE5LCAKKyAgICA1NSwgMjQ1LCAxMDgsIDI0NSwgMTcwLCAyMjQsIDcxLCAyMTksIDU1LCAyNDUsIDEwOCwgMTMxLCAyNDYsIDIzMSwgMjE5LCAKKyAgICA1NSwgMjQ1LCAxMDgsIDE0OCwgMjQ2LCAyMjksIDIxOSwgNTUsIDI0NSwgMTA4LCAyNDUsIDE3MCwgMjQ2LCAyMjksIDIxOSwgCisgICAgNTUsIDI0NSwgMTA4LCAyMjUsIDQzLCAyNDYsIDIyOSwgMjQ1LCAxMDgsIDIzMSwgMTA2LCAxMDcsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAxMDcsIDIyNywgNjgsIDIzMSwgMTA3LCAxMDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxNjAsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAxNTQsIDIyNywgNjgsIDIzMSwgMTA3LCAxNzQsIDIyNywgNjgsIDIzMSwgMTA3LCAxODIsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAxOTEsIDIyNywgNjgsIDIzMSwgMTA3LCAxODUsIDIyNywgNjgsIDIzMSwgMTA3LCAxOTAsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAyMjIsIDY1LCAyMjcsIDY4LCAyMzEsIDEwNywgMjQ2LCAyMTEsIDIyNywgNjgsIDIzMSwgMTA3LCAyMjAsIDIyMSwgCisgICAgMjI3LCA2OCwgMjMxLCAxMDcsIDI0NSwgMTk2LCAyMjcsIDY4LCAyMzEsIDEwNywgMTMxLCAyNDIsIDE2MSwgMjI3LCA2OCwgCisgICAgMjMxLCAxMDcsIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjI3LCA2OCwgMjMxLCAxMDcsIDEzMSwgMjIxLCAyMzEsIDMsIDIyNywgCisgICAgNjgsIDIzMSwgMTA3LCAxMDcsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxMDMsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxNjAsIAorICAgIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxNTQsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxNzQsIDMsIDIyNywgNjgsIDIzMSwgCisgICAgMTA3LCAxODIsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxOTEsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAxODUsIDMsIDIyNywgCisgICAgNjgsIDIzMSwgMTA3LCAxOTAsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAyMjIsIDY1LCAzLCAyMjcsIDY4LCAyMzEsIDEwNywgCisgICAgMjQ2LCAyMTEsIDMsIDIyNywgNjgsIDIzMSwgMTA3LCAyMjAsIDIyMSwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDI0NSwgMTk2LCAKKyAgICAzLCAyMjcsIDY4LCAyMzEsIDEwNywgMTMxLCAyNDIsIDE2MSwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDI0NSwgMTcwLCAyNDIsIAorICAgIDE2MSwgMywgMjI3LCA2OCwgMjMxLCAxMDcsIDEzMSwgMjIxLCAyMzEsIDIyNywgNjgsIDIzMSwgMTA3LCAxMzEsIDIyMSwgCisgICAgMjMyLCAyNTEsIDIwMywgMjUwLCA0NiwgMjI3LCA2OCwgMjMxLCAxMDcsIDI0NSwgMTcwLCAyMjEsIDIzMSwgMjI3LCA2OCwgCisgICAgMjMxLCAxMDcsIDIyMiwgNjYsIDIyMSwgMjMxLCAyMjcsIDY4LCAyMzEsIDEwNywgMjEwLCAxMzEsIDI0MiwgMTYxLCA3LCAzLCAKKyAgICAxLCAyMTAsIDI1MSwgMjAyLCAyMjcsIDY4LCAyMzEsIDEwNywgMjI0LCA4MiwgMjM1LCAxNDAsIDE3LCAyMjcsIDY4LCAyMzEsIAorICAgIDEwNywgMjQ1LCAxOTcsIDI0NywgMTAsIDE3LCAyMjcsIDY4LCAyMzEsIDEwNywgMjQ1LCAxOTcsIDIyMSwgMjMxLCAyMjcsIAorICAgIDY4LCAyMzEsIDEwNywgMTMxLCAyNDIsIDE2MiwgMjIxLCAyMzEsIDIxOSwgNTUsIDI0NSwgMTA4LCAyMTcsIDg1LCAyMjEsIAorICAgIDI0OSwgMTI3LCA2NSwgMjIwLCA1MywgNjUsIDkwLCA2NSwgMjQ3LCAxMzAsIDY1LCA0MiwgNDUsIDY1LCAxMDgsIDExMywgCisgICAgNjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNjUsIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAyMjQsIDYsIDI0NywgNSwgNjUsIAorICAgIDIyNCwgNiwgMjE4LCAyMTcsIDY1LCAxMjcsIDc2LCAyLCA5MiwgOTAsIDc2LCAyLCA5MiwgMTI3LCAyMTgsIDIzNywgNjUsIAorICAgIDkwLCAyMTgsIDIzNywgNjUsIDEyNywgMTI0LCAyNDMsIDE1OCwgNjUsIDIyMCwgNTMsIDEyNCwgMjQzLCAxNTgsIDY1LCA5MCwgCisgICAgMTI0LCAyNDMsIDE1OCwgNjUsIDI0NywgMTMwLCAxMjQsIDI0MywgMTU4LCA2NSwgMTI3LCA3NiwgMiwgMjIyLCAxMzUsIDkwLCAKKyAgICA3NiwgMiwgMjIyLCAxMzUsIDEyNywgNzYsIDI0NSwgOTcsIDEzNSwgMjIwLCA1MywgNzYsIDI0NSwgOTcsIDEzNSwgOTAsIAorICAgIDc2LCAyNDUsIDk3LCAxMzUsIDI0NywgMTMwLCA3NiwgMjQ1LCA5NywgMTM1LCAxMDgsIDExMywgNzYsIDIsIDI1MiwgMTg5LCAKKyAgICAxMjcsIDc2LCAyLCA5NiwgOTAsIDc2LCAyLCA5NiwgMTI3LCA3NiwgMiwgMjM0LCAyNDcsIDkwLCA3NiwgMiwgMjM0LCAyNDcsIAorICAgIDQyLCA0NSwgMjE4LCAyMzcsIDY1LCA0MiwgNDUsIDc2LCAyLCA5MiwgMjQ3LCAxMzAsIDIxNywgMzMsIDY1LCAyMjAsIDUzLCAKKyAgICA3NiwgMiwgMjIxLCAxNzAsIDIzNSwgMTA3LCAyMjAsIDUzLCA3NiwgMiwgMjIxLCAxNzAsIDIyNywgMTAwLCAyNDcsIDEzMCwgCisgICAgNzYsIDIsIDIyMSwgMTcwLCAyMzUsIDEwNywgMjQ3LCAxMzAsIDc2LCAyLCAyMjEsIDE3MCwgMjI3LCAxMDAsIDkwLCA3NiwgCisgICAgMiwgMjUwLCAxMjQsIDI0NywgMTI5LCAyNDcsIDEzMCwgNzYsIDIsIDI1MCwgMTI0LCAyMzUsIDEwNywgMjU0LCAxMDQsIAorICAgIDIyMSwgMTIwLCAyMjUsIDcwLCA2NSwgMjUwLCAxOTksIDIyMSwgMTIwLCAyMjUsIDcwLCA2NSwgMjMxLCAxODcsIDIxOCwgCisgICAgMjE3LCA3NiwgMTk5LCAxNzEsIDEzNSwgMTI3LCA3NiwgMTk5LCAyNTIsIDIwMSwgMTA0LCA5MCwgNzYsIDE5OSwgMTM1LCAKKyAgICAyNTQsIDEwNCwgMjMwLCAxMTksIDI1MCwgMjIyLCA2NSwgMjUwLCAxOTksIDIzMCwgMTE5LCAyNTAsIDIyMiwgNjUsIDEyNywgCisgICAgMjQzLCAxNzcsIDIsIDE5MiwgMjIwLCA1MiwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAyNDcsIDEyOSwgMjIwLCA1MywgMjQzLCAKKyAgICAxNzcsIDIsIDE5MiwgMjI3LCAxMDAsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDIzNSwgMTA3LCA5MCwgMjQzLCAxNzcsIAorICAgIDIsIDE5MiwgMjIwLCA1MiwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIDI0NywgMTI5LCAyNDcsIDEzMCwgMjQzLCAxNzcsIDIsIAorICAgIDE5MiwgMjI3LCAxMDAsIDI0NywgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCAyMzUsIDEwNywgOTAsIDc2LCAxMDQsIDEyNywgCisgICAgNjUsIDIyMCwgNTMsIDc2LCAxMjcsIDExNywgMjQ3LCAxMzAsIDY1LCAxMjcsIDc2LCAxMDQsIDkwLCA2NSwgMTI3LCAyMzAsIAorICAgIDMyLCAyNTQsIDE5LCAyMjAsIDUzLCAyMzAsIDMyLCAyNTQsIDE5LCA5MCwgMjMwLCAzMiwgMjU0LCAxOSwgMjQ3LCAxMzAsIAorICAgIDIzMCwgMzIsIDI1NCwgMTksIDEyNywgMjQzLCAxNzcsIDEwNCwgOTAsIDI0MywgMTc2LCA5MCwgMjQzLCAxNzcsIDEwNCwgCisgICAgMTI3LCAyNDMsIDE3NiwgMTI3LCA1MSwgNzYsIDIsIDkyLCA0MiwgNDUsIDUxLCA3NiwgMiwgOTIsIDkwLCA1MSwgNzYsIDIsIAorICAgIDkyLCAxMjcsIDUxLCA2NSwgMjIwLCA1MywgNTEsIDY1LCA5MCwgNTEsIDY1LCAyNDcsIDEzMCwgNTEsIDY1LCA0MiwgNDUsIAorICAgIDUxLCA2NSwgMTA4LCAxMTMsIDUxLCA2NSwgMjMxLCAxODcsIDIxOCwgMjE3LCA1MSwgNjUsIDIzMSwgMTg3LCAyNDcsIDUsIAorICAgIDUxLCA2NSwgMjI0LCA2LCAyNDcsIDUsIDUxLCA2NSwgMjI0LCA2LCAyMTgsIDIxNywgNTEsIDY1LCAxMjcsIDIyMSwgNzgsIAorICAgIDY1LCA5MCwgMjIxLCA3OCwgNjUsIDEyNywgMjIzLCAyMjMsIDY1LCA5MCwgMjIzLCAyMjMsIDY1LCAyMjAsIDUzLCA3NiwgMiwgCisgICAgNTEsIDkyLCAyNDcsIDEzMCwgNzYsIDIsIDUxLCA5MiwgMTI3LCAyNDksIDE0NSwgNjUsIDIyMCwgNTMsIDI0OSwgMTQ1LCAKKyAgICA2NSwgOTAsIDI0OSwgMTQ1LCA2NSwgMjQ3LCAxMzAsIDI0OSwgMTQ1LCA2NSwgMTI3LCA3NiwgMTk5LCAxMzUsIDkwLCA3NiwgCisgICAgMTk5LCAxMzUsIDEyNywgNjcsIDY1LCAyMjAsIDUzLCA2NywgNjUsIDkwLCA2NywgNjUsIDI0NywgMTMwLCA2NywgNjUsIAorICAgIDIyMCwgNTMsIDY3LCA3NiwgMjQ1LCA5NywgMTM1LCAyMjAsIDUzLCA2NywgNzYsIDIzMCwgMTM5LCAyMjksIDE5MywgMjIwLCAKKyAgICA1MywgNjcsIDc2LCAyMzAsIDEzOSwgMjI5LCAxOTQsIDIsIDE4NiwgMTM1LCAyMjAsIDUzLCA2NywgNzYsIDIzMCwgMTM5LCAKKyAgICAyMjksIDE5NCwgMiwgNjksIDEzNSwgMjIwLCA1MywgNjcsIDUxLCA2NSwgMjIwLCA1MywgNjcsIDUxLCA3NiwgMjMwLCAxMzksIAorICAgIDIyOSwgMTkzLCA5MCwgNjcsIDc2LCAyNDUsIDk3LCAyMTgsIDI1NCwgMjMxLCAxODcsIDIxOCwgMjE3LCA3NiwgMTk5LCAKKyAgICAyNTAsIDEyMywgMjI0LCA2LCAyNDcsIDUsIDc2LCAxOTksIDI1MCwgMTIzLCAxMDgsIDExMywgNjcsIDY1LCA0NSwgNzYsIDIsIAorICAgIDMsIDI1MCwgMjIxLCAyNDcsIDEzMCwgNzYsIDEyNywgMTE3LCAyMjAsIDUzLCA2NSwgMTQ4LCA5MCwgMjU0LCAxOSwgMTI3LCAKKyAgICA3NiwgMiwgNjksIDkyLCA5MCwgNzYsIDIsIDY5LCA5MiwgNDIsIDQ1LCA3NiwgMiwgNjksIDkyLCAxMjcsIDc2LCAyLCA1MSwgCisgICAgNjksIDkyLCA5MCwgNzYsIDIsIDUxLCA2OSwgOTIsIDQyLCA0NSwgNzYsIDIsIDUxLCA2OSwgOTIsIDEyNywgMjMwLCAxMTcsIAorICAgIDY1LCA5MCwgMjMwLCAxMTcsIDY1LCA0MiwgNDUsIDIzMCwgMTE3LCA2NSwgMzUsIDI1NCwgMTU3LCAyNTAsIDE2NCwgMjI5LCAKKyAgICAyMjMsIDI0OCwgMjQ2LCAyMjIsIDE0LCAyNDYsIDkxLCAyMjIsIDE0LCAyNDgsIDE2MCwgMjEyLCAyNDYsIDkyLCAyNDYsIAorICAgIDE5OSwgMjI1LCA0NSwgMjM3LCAyMTUsIDIzMiwgMjMxLCAyNDYsIDIxMywgMjMwLCAxNjUsIDIxMiwgMjU0LCAxMzIsIDI0NiwgCisgICAgMjEzLCAyMzAsIDE2NSwgMywgMjQ2LCAyMTMsIDIzMCwgMTY1LCAyNTAsIDE0MCwgMjU0LCAxNCwgMjMzLCAyNTQsIDI0OCwgCisgICAgMTYwLCAyMTIsIDI1MCwgMTQyLCAyNTQsIDE0LCAyMzMsIDI1NCwgMywgMjUwLCAxNDAsIDI1NCwgMTQsIDIzMywgMjU0LCAKKyAgICAyNDYsIDE5MCwgMTE3LCAyMjgsIDIyMiwgMjMzLCAzMywgMjI4LCAyMjksIDIzMywgMzMsIDI1MCwgMTI4LCAyMzMsIDMzLCAKKyAgICAyMjMsIDcxLCAyMzMsIDE1NSwgNTUsIDIzMywgMTUzLCA1NSwgNjEsIDIyOSwgNDMsIDI0OCwgMTg4LCAyMjQsIDU1LCAyMjUsIAorICAgIDQ2LCAyMzMsIDE1NCwgMjUzLCAyNTIsIDIzMCwgMTEyLCAyMjcsIDk0LCAyMzAsIDExMiwgMjUxLCAyNDIsIDIzMCwgMTEyLCAKKyAgICA0MCwgMjI3LCA2NCwgMjUwLCA4OSwgMjI3LCA2NCwgMjQ1LCAxMTAsIDIyNywgNjQsIDIyOCwgMjE4LCAxMDEsIDIzNywgCisgICAgMjA3LCA0NSwgMjU0LCAxMTksIDI1NCwgMTE5LCAyMzQsIDIyLCAyNTQsIDExOSwgMjIzLCAyNDUsIDI1NCwgMTE5LCAyNDgsIAorICAgIDE5MCwgMjQ4LCAxNjAsIDIxMiwgMjQ4LCAxOTMsIDIyOSwgMjM0LCAxMDEsIDIxMiwgMjI5LCAyMzQsIDEwMSwgMjM1LCA3LCAKKyAgICAyNTQsIDEyNiwgMjM1LCA3LCAyMzAsIDEwNSwgMjM3LCAxNzQsIDIyMCwgNzQsIDIzNywgMTg2LCA1MSwgMjM3LCAxODYsIAorICAgIDIyMSwgNzgsIDIzNywgMTg2LCAyNTAsIDEzNiwgMjM3LCAxODYsIDIyMywgNDksIDIzNywgMTg2LCAyMTksIDY1LCAyMzcsIAorICAgIDE4NiwgMjUwLCAxOTksIDIzNywgMTg2LCAyNTAsIDE5OSwgMjUwLCAxMzYsIDIzNywgMTg2LCAyNTQsIDEwNCwgMjUwLCAKKyAgICAxMzYsIDIzNywgMTg2LCAyMjIsIDEzLCAyNTIsIDEzOCwgMjI3LCAyMjQsIDIyOCwgMjE5LCA2MSwgMjMzLCAxNTQsIDI0NiwgCisgICAgOTYsIDI0NCwgMTc2LCAyMjgsIDIxOSwgMjQyLCAyNTAsIDIyMSwgMTgwLCAyMzAsIDExMiwgMjEwLCAyMjEsIDE3OSwgMjM3LCAKKyAgICAxNzAsIDIzNSwgMTI5LCAxOTgsIDIyNCwgMTExLCAyMTgsIDIzNiwgMjE4LCAxNjgsIDIyOCwgMjI5LCAyMTIsIDIyMSwgCisgICAgMTc5LCAyMzMsIDE1NSwgMjIxLCAxNzksIDI1MywgMjQ3LCAxMTQsIDEwMSwgMjEyLCAyNTMsIDI0NywgMTE0LCAxMDEsIAorICAgIDI1NCwgNzIsIDExNCwgMTAxLCAyNTQsIDcyLCAyNTEsIDIyMiwgMjEyLCAyNTQsIDI0OSwgMTE0LCAxMDEsIDIzMiwgMTM1LCAKKyAgICAyNTQsIDcyLCAyMzEsIDE5MCwgMjU0LCAyNDksIDExNCwgMTAxLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIxMiwgMjU0LCAxNTEsIAorICAgIDExNCwgMTAxLCAyNTQsIDE1MSwgMTE0LCAxNTYsIDExNCwgMTAxLCAyMjEsIDc4LCAyMjEsIDE3OSwgMjU0LCAxNTgsIDExNCwgCisgICAgMTAxLCAyNDYsIDE1MCwgMTAxLCAyNDQsIDE3NSwgMjQ2LCAxNTAsIDEwMSwgMjQ4LCAyNDcsIDI1MiwgOTksIDI1NCwgNzQsIAorICAgIDIyMiwgMjMsIDIzNSwgNTEsIDI0NCwgMTc1LCAxMTQsIDEwMSwgMjU0LCA3MiwgMTE0LCAxOTksIDE1NiwgMjIyLCAyMywgCisgICAgMjM3LCAyMzcsIDIzMCwgMTY1LCAyMzcsIDIzNywgMTE3LCAxNTYsIDI1NCwgNzIsIDExNCwgMTAxLCAyNTAsIDE3NiwgMjQ2LCAKKyAgICAxNTMsIDI0NiwgMTU0LCAyNTAsIDE3NSwgMjI3LCA5NCwgMjM3LCAyMjQsIDExNCwgMTAxLCAyMjcsIDk0LCAxMTQsIDEwMSwgCisgICAgMjUwLCAxMTcsIDEwMSwgMjQ2LCAxMjUsIDI0NiwgMTUyLCAxMDEsIDIyMywgMTU3LCAyNDYsIDE1MywgMjQ5LCA2MywgMTE0LCAKKyAgICAxMDEsIDExNCwgMTk5LCAyNTEsIDIxMywgMjQ5LCA3OCwgMjM0LCAyMiwgMjUxLCAyMTIsIDIyOCwgODAsIDExNCwgMTAxLCAKKyAgICAyMTIsIDExNCwgMTAxLCAyNDIsIDU5LCAxMDEsIDIxMiwgMjQyLCA1OSwgMTAxLCAyMjMsIDEyMywgMjQ2LCAxNTAsIDEwMSwgCisgICAgMjM1LCA4NywgMTU2LCAxMTQsIDEwMSwgMjQ0LCAzMCwgMTU2LCAxMTQsIDEwMSwgMjM1LCA4NywgMTA0LCAxMTQsIDEwMSwgCisgICAgMjQ0LCAzMCwgMTA0LCAxMTQsIDEwMSwgMjM1LCA4NywgMjUxLCAyMjIsIDIxMiwgMTE0LCAxMDEsIDI0NCwgMzAsIDI1MSwgCisgICAgMjIyLCAyMTIsIDExNCwgMTAxLCAyMzMsIDk1LCAyMzUsIDg2LCAyMzMsIDk1LCAyNDQsIDI5LCAyNTIsIDk5LCAyMTIsIAorICAgIDI0NiwgMTUwLCAxMDEsIDIxMiwgMjM1LCA4NiwgMjEyLCAyNDQsIDI5LCAyMzIsIDEzNSwgMjM1LCA4NywgMjMxLCAxOTAsIAorICAgIDExNCwgMTAxLCAyMzIsIDEzNSwgMjQ0LCAzMCwgMjMxLCAxOTAsIDExNCwgMTAxLCAyMzUsIDg3LCAxNTYsIDI0NiwgMTUwLCAKKyAgICAxMDEsIDI0NCwgMzAsIDE1NiwgMjQ2LCAxNTAsIDEwMSwgMjMyLCAxMzUsIDIzNSwgODcsIDIzMSwgMTkwLCAyNDYsIDE1MCwgCisgICAgMTAxLCAyMzIsIDEzNSwgMjQ0LCAzMCwgMjMxLCAxOTAsIDI0NiwgMTUwLCAxMDEsIDIzNSwgODcsIDE1NiwgMjQ0LCAyOSwgCisgICAgMjQ0LCAzMCwgMTU2LCAyMzUsIDg2LCAyMzIsIDEzNSwgMjM1LCA4NywgMjMxLCAxOTAsIDI0NCwgMjksIDIzMiwgMTM1LCAKKyAgICAyNDQsIDMwLCAyMzEsIDE5MCwgMjM1LCA4NiwgMjI4LCAyNDQsIDIyMywgODQsIDIyOCwgMjQ1LCAxNTYsIDExNCwgMTAxLCAKKyAgICAyMjMsIDg1LCAxNTYsIDExNCwgMTAxLCAyMjgsIDI0NSwgMTU2LCAyNDYsIDE1MCwgMTAxLCAyMjMsIDg1LCAxNTYsIDI0NiwgCisgICAgMTUwLCAxMDEsIDI0OCwgMTYwLCAyMTIsIDIyOCwgMjQ3LCAyNDgsIDE2MCwgMjEyLCAyMjMsIDg2LCAyMjMsIDkzLCAyMzAsIAorICAgIDE2NSwgMjIzLCA1OCwgMjMwLCAxNjUsIDIxMiwgMTEyLCAyMjMsIDkzLCAyMzAsIDE2NSwgMjEyLCAxMTIsIDIyMywgNTgsIAorICAgIDIzMCwgMTY1LCAyMjMsIDkzLCAxMTcsIDE1NiwgMTE0LCAxMDEsIDIyMywgNTgsIDExNywgMTU2LCAxMTQsIDEwMSwgMjMyLCAKKyAgICAxMzUsIDExMiwgMjIzLCA5MywgMTE3LCAyMzEsIDE5MCwgMTE0LCAxMDEsIDIzMiwgMTM1LCAxMTIsIDIyMywgNTgsIDExNywgCisgICAgMjMxLCAxOTAsIDExNCwgMTAxLCAyMjMsIDkzLCAxMTcsIDIsIDIxMiwgMTE0LCAxMDEsIDIyMywgNTgsIDExNywgMiwgMjEyLCAKKyAgICAxMTQsIDEwMSwgMjMzLCA4MSwgMjMzLCA4MiwgMjMzLCA4MywgMjMzLCA4MiwgMjIwLCA3NCwgNDAsIDIzNywgMjM3LCAyMzAsIAorICAgIDE2NSwgNDAsIDIzMCwgMTAxLCAyMzAsIDE2NSwgNDAsIDIzNywgMjM3LCAxMTcsIDE1NiwgMTE0LCAxMDEsIDQwLCAyMzAsIAorICAgIDEwMSwgMTE3LCAxNTYsIDExNCwgMTAxLCA0MCwgMjUxLCAxNDMsIDQwLCAyNTAsIDgyLCAzNCwgMjI5LCA0MywgMzQsIDIzMywgCisgICAgMTU0LCAzNCwgMjIxLCAxNzYsIDM0LCAyNDgsIDE4OCwgMjI0LCA1NSwgMzQsIDYxLCAyMzAsIDExMiwgMzQsIDIyNywgOTQsIAorICAgIDIzMCwgMTEyLCAzNCwgMjUzLCAyNTIsIDIzMCwgMTEyLCAzNCwgMjQ2LCAxNTMsIDM0LCAyNDksIDE0NiwgMjA0LCAyMjksIAorICAgIDQzLCAyMDQsIDIzMywgMTU0LCAyMDQsIDIyMSwgMTc2LCAyMDQsIDYxLCAyMzAsIDExMiwgNDUsIDIyMiwgMTQzLCA0MiwgCisgICAgMjIyLCAxNDMsIDExMywgMjIyLCAxNDMsIDEwOCwgMjIyLCAxNDMsIDI1MywgMjU1LCAyMzMsIDEzMywgMjIxLCA2MiwgMjQ1LCAKKyAgICAxMjgsIDIyMSwgNzgsIDY5LCAyNTIsIDIwMSwgNDUsIDIyMCwgMjM2LCA1MSwgNjksIDI1MiwgMjAxLCA1MSwgNDUsIDIyMCwgCisgICAgMjM2LCAyNDgsIDE2MCwgMjEyLCAyMjgsIDIxNCwgMjEyLCAyMjEsIDYyLCAyNDgsIDE2MCwgMjEyLCAyNDUsIDEyOSwgMjMyLCAKKyAgICAxMzgsIDUxLCA2OSwgMjUyLCAyMDEsIDUxLCA0NSwgMjIwLCAyMzYsIDIyOCwgMjQ1LCAyMjAsIDgyLCAyMjcsIDE5MiwgCisgICAgMjIzLCA4NSwgMjIwLCA4MiwgMjI3LCAxOTIsIDIzMSwgMTg4LCAyMjMsIDEwMSwgMjMwLCAxNjUsIDI1MCwgMTQwLCAyNTQsIAorICAgIDE0LCAyMzEsIDE4OCwgMjIzLCAxMDAsIDIzMSwgMTg4LCAyMjMsIDEwMSwgMTE3LCAxNTYsIDExNCwgMTAxLCAyNTAsIDE0MCwgCisgICAgMjU0LCAxNCwgMjMxLCAxODgsIDIyMywgMTAxLCAxNTYsIDExNCwgMTAxLCAyMzAsIDEwMSwgMjMwLCAxNjUsIDIzNywgMjM3LCAKKyAgICAyMzAsIDE2NSwgMjMzLCA4NywgMjQzLCAxMzEsIDI1MCwgMTUwLCAyMzQsIDQ5LCAyMzcsIDE4MywgMjE4LCAxMTgsIDIzMiwgCisgICAgMjE2LCAyMzEsIDE4OSwgNDUsIDI1NCwgMTIwLCAyLCAyNTQsIDUxLCA0NSwgMjIxLCA5MCwgMjMzLCAzMywgMjM1LCA3LCAKKyAgICAyNTQsIDEyNiwgMjMzLCAzMywgMjM1LCA3LCAyMzAsIDEwNSwgMjMzLCAzMywgMjM3LCAxNzQsIDIzMywgMzMsIDIyMCwgNzQsIAorICAgIDI0OSwgNSwgMjMwLCAxMTIsIDYxLCAyMzAsIDExMiwgMjIzLCAxNTcsIDIzMCwgMTEyLCAyNDgsIDE4OCwgMjIxLCAxNzYsIAorICAgIDI1MiwgMjIsIDQyLCAyMzEsIDE4OCwgMjQ1LCAyNTEsIDIyNSwgNjYsIDIyOCwgMjI5LCA0NSwgMjMxLCAxODgsIDI0NSwgCisgICAgMjUxLCAyMjUsIDY2LCAyMjgsIDIyOSwgNDIsIDIyNSwgNjYsIDIyOCwgMjI5LCA0NSwgMjI1LCA2NiwgMjI4LCAyMjksIAorICAgIDIxMCwgMjIxLCAxODAsIDI0NiwgMTUzLCAyNTAsIDc5LCAyMzUsIDcsIDIzMCwgMTA1LCAyNTAsIDc5LCAyMzUsIDcsIDI1NCwgCisgICAgMTI2LCA1MSwgMjIzLCA5MiwgNTEsIDIyMywgNTcsIDUxLCAyMzcsIDE3NCwgNTEsIDIyMCwgNzQsIDIyOSwgNjIsIDExNCwgCisgICAgMjUsIDIyOSwgMjM0LCAxMDEsIDIzNSwgODcsIDIsIDI0OCwgMTQ1LCAyNDQsIDMwLCAyLCAyNDgsIDE0NSwgMjE5LCAxMDAsIAorICAgIDIzMywgOTUsIDIzNSwgODYsIDIxOSwgMTAwLCAyMzMsIDk1LCAyNDQsIDI5LCAyMzUsIDg3LCAxMTQsIDE5OSwgMTU2LCAKKyAgICAyNDQsIDI5LCAyNDQsIDMwLCAxMTQsIDE5OSwgMTU2LCAyMzUsIDg2LCAxMTQsIDE5OSwgMTU2LCAyMzUsIDg2LCAxMTQsIAorICAgIDE5OSwgMTU2LCAyNDQsIDI5LCAxMTQsIDE5OSwgMTU2LCAyMjgsIDI0NCwgMTE0LCAxOTksIDE1NiwgMjIzLCA4NCwgMjQ4LCAKKyAgICAxNjAsIDIxMiwgMjI4LCAyNDgsIDE1NiwgMjQ2LCAxNTUsIDI0OCwgMTYwLCAyMTIsIDIyMywgODcsIDE1NiwgMjQ2LCAxNTUsIAorICAgIDIxMiwgNDAsIDIzNywgMjM3LCAxMTcsIDE1NiwgMTE0LCAxMDEsIDIxMiwgNDAsIDIzMCwgMTAxLCAxMTcsIDE1NiwgMTE0LCAKKyAgICAxMDEsIDQwLCAyMzcsIDIzNywgMTE3LCAxNTYsIDIxMiwgMTE0LCAxMDEsIDQwLCAyMzAsIDEwMSwgMTE3LCAxNTYsIDIxMiwgCisgICAgMTE0LCAxMDEsIDIzNSwgODcsIDI1MSwgMjIyLCAyMTIsIDI0NiwgMTUwLCAxMDEsIDI0NCwgMzAsIDI1MSwgMjIyLCAyMTIsIAorICAgIDI0NiwgMTUwLCAxMDEsIDIyOCwgMjQ1LCAyNTEsIDIyMiwgMjEyLCAyNDYsIDE1MCwgMTAxLCAyMjMsIDg1LCAyNTEsIDIyMiwgCisgICAgMjEyLCAyNDYsIDE1MCwgMTAxLCAyMTIsIDIzMSwgMTg4LCAyMjMsIDEwMSwgMjMwLCAxNjUsIDI0OCwgMTYwLCAyMTIsIAorICAgIDI1MCwgMTQyLCAyNTQsIDE0LCAyMzEsIDE4OCwgMjIzLCAxMDAsIDIxMiwgMjMxLCAxODgsIDIyMywgMTAxLCAxMTcsIDE1NiwgCisgICAgMTE0LCAxMDEsIDI0OCwgMTYwLCAyMTIsIDI1MCwgMTQyLCAyNTQsIDE0LCAyMzEsIDE4OCwgMjIzLCAxMDEsIDE1NiwgMjQ2LCAKKyAgICAxNTUsIDY5LCAyNDYsIDIwOCwgMjMzLCAxOTEsIDE4NiwgMjQ2LCAyMDgsIDEwOCwgNDUsIDI0OSwgMTEsIDI0NiwgMjA4LCAKKyAgICAxMTMsIDQ1LCAyNDksIDExLCAyNDYsIDIwOCwgMjQ2LCAyMTMsIDExNywgMiwgMTcxLCAxODYsIDkyLCAyNDYsIDIxMywgCisgICAgMTE3LCAyLCA2OSwgMjUyLCAyMDEsIDI1MywgMjQ1LCAyNDYsIDE5MCwgMTE3LCAxODYsIDkyLCAzLCAyNDYsIDIxMywgMTE3LCAKKyAgICAyLCA2OSwgMjUyLCAyMDEsIDI1MywgMjQ1LCAyNDYsIDE5MCwgMTE3LCAxODYsIDkyLCAyNDYsIDIxMywgMTE3LCAyLCA2MSwgCisgICAgNTAsIDI0NiwgMjEzLCAxMTcsIDIsIDIzMCwgNzcsIDMsIDI0NiwgMjEzLCAxMTcsIDIsIDIzMCwgNzcsIDI0NiwgMjEzLCAKKyAgICAxMTcsIDIsIDIyMCwgODEsIDI0NiwgMjEzLCAxMTcsIDIsIDEyNCwgMTg2LCAyMjMsIDEwNywgMjUwLCAxNDAsIDIsIDE3MSwgCisgICAgMTg2LCA5MiwgMjUwLCAxNDAsIDIsIDY5LCAyNTIsIDIwMSwgMjUzLCAyNDUsIDI0NiwgMTkwLCAxMTcsIDE4NiwgOTIsIDMsIAorICAgIDI1MCwgMTQwLCAyLCA2OSwgMjUyLCAyMDEsIDI1MywgMjQ1LCAyNDYsIDE5MCwgMTE3LCAxODYsIDkyLCAyNTAsIDE0MCwgMiwgCisgICAgMjMwLCA3NywgMywgMjUwLCAxNDAsIDIsIDIzMCwgNzcsIDIxNywgMTU4LCAxNjUsIDI1MiwgMjI2LCAyMzMsIDI1MywgMjQ5LCAKKyAgICA2LCA1NSwgMjQ2LCAyMTUsIDY1LCAyNDIsIDE4MiwgMTA4LCAyNTQsIDIwLCAxMTMsIDI1NCwgMjAsIDIyOCwgMjI1LCAyMjksIAorICAgIDE1NiwgMjE4LCAyMzUsIDIzNSwgNDMsIDQyLCAyNTEsIDkwLCA0NSwgMjUxLCA5MCwgNDIsIDI0NSwgMTQ5LCA0NSwgMjQ1LCAKKyAgICAxNDksIDI1MiwgMjksIDQ1LCAyNTAsIDEwMiwgMjUyLCAyOSwgNDIsIDI1MCwgMTAyLCAyMjEsIDEyMCwgNDUsIDI1MCwgCisgICAgMTAyLCAyMjEsIDEyMCwgNDIsIDI1MCwgMTAyLCAyMTAsIDIxMiwgNTUsIDQwLCAyMzQsIDIzNCwgMjU0LCA1MSwgMjI2LCAKKyAgICA4MCwgMjI2LCA4NSwgMjIyLCA3MiwgMjI3LCAyMTEsIDIyOSwgMTYsIDIzNywgMjExLCAyMTksIDg4LCAyMjMsIDIyNywgCisgICAgMjI5LCA1NywgMTE3LCAyMzcsIDE4MiwgNTUsIDIxNSwgMjEyLCA1NSwgMjE4LCAyNDIsIDI0MiwgMTgzLCAyMjEsIDEyMCwgCisgICAgNDIsIDI1MCwgMTIzLCAyMjEsIDEyMCwgNDUsIDI1MCwgMTIzLCAyNTIsIDI5LCA0MiwgMjUwLCAxMjMsIDI1MiwgMjksIDQ1LCAKKyAgICAyNTAsIDEyMywgMjIxLCAxMjAsIDE0NCwgMjM3LCAxODYsIDI1MiwgMjksIDE0NCwgMjM3LCAxODYsIDI0NSwgOTUsIDIyNCwgCisgICAgMzksIDEwOCwgMjU0LCAyMSwgMjUyLCAxMDAsIDEyNCwgMTg2LCAyNTIsIDE5MSwgMjMwLCAxMDcsIDIzNiwgMTU0LCAyNDYsIAorICAgIDE0NiwgMTk5LCAyMjIsIDIzLCAyMjcsIDEwOSwgMjE4LCAxNTIsIDIzNywgMjI0LCAxMTIsIDIyNywgMjA5LCAyNTIsIDIxLCAKKyAgICAyMzYsIDE1MywgMjM1LCAxMTIsIDI1NCwgMTIwLCAxMTUsIDIyNywgMTA2LCAyNTQsIDEyMCwgMTE1LCAyNDYsIDE0NiwgCisgICAgMTk5LCAyMjIsIDIzLCAyMzUsIDExNSwgMjUyLCAxMTEsIDIyNywgOTMsIDI1MCwgNTYsIDI1NCwgMTU4LCAyNTQsIDI4LCAKKyAgICAyMjIsIDIyNywgMjIxLCAxMTIsIDIyNywgOSwgMjQ4LCAyMjgsIDIzMCwgMTAyLCAyNTAsIDE1MiwgMjIyLCAxMTMsIDIyNCwgCisgICAgNDksIDI1MCwgMTE0LCAyNTAsIDExMywgMTc5LCAxODAsIDE2LCAyNDIsIDEwNCwgMTc5LCAxODAsIDE2LCAyMjMsIDIyMSwgCisgICAgMjI4LCA5NSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNDYsIDE1NSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNDgsIAorICAgIDE5MywgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNDksIDQsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjM3LCA0NywgMTc5LCAKKyAgICAxODAsIDE2LCAyMjgsIDk2LCAyNTAsIDIyMSwgMTc5LCAxODAsIDE2LCAyNTAsIDIyMiwgMjIzLCAxNDIsIDE3OSwgMTgwLCAKKyAgICAxNiwgMjUwLCAyMjIsIDIzNywgNDcsIDE3OSwgMTgwLCAxNiwgMjI0LCA1NiwgMTM1LCAxNzksIDE4MCwgMTYsIDI1MiwgCisgICAgMjMxLCAxMzUsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjI0LCA1NSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNTIsIAorICAgIDIzMCwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyMzUsIDg2LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0NCwgMjksIDE3OSwgCisgICAgMTgwLCAxNiwgMTI3LCAyMTksIDE4MywgMTc5LCAxODAsIDE2LCA5MCwgMjE5LCAxODMsIDE3OSwgMTgwLCAxNiwgMjI4LCAKKyAgICA5NiwgMTI3LCA2NSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCA5MCwgNjUsIDE3OSwgMTgwLCAxNiwgMjUwLCAyMjIsIDI1MiwgCisgICAgMjMwLCAxNzksIDE4MCwgMTYsIDExMywgMjIyLCAxNDQsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjQ5LCA2MywgMjIzLCAKKyAgICAxNDIsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMTEzLCAyNTEsIDEzNCwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyNDksIAorICAgIDYyLCAxNzksIDE4MCwgMTYsIDExMywgMjIyLCAxNDQsIDIzNywgNDcsIDE3OSwgMTgwLCAxNiwgMjIwLCA1MywgMjE5LCAKKyAgICAxODMsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjIwLCA1MywgNjUsIDE3OSwgMTgwLCAxNiwgMTA4LCAyMjIsIDE0NCwgCisgICAgMjMwLCA3NywgMTc5LCAxODAsIDE2LCAyNDksIDcyLCAyMjMsIDE0MiwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAxMDgsIAorICAgIDI1MSwgMTM0LCAxNzksIDE4MCwgMTYsIDIyOCwgOTYsIDI0OSwgNzEsIDE3OSwgMTgwLCAxNiwgMTA4LCAyMjIsIDE0NCwgCisgICAgMjM3LCA0NywgMTc5LCAxODAsIDE2LCAyNDcsIDEzMCwgMjE5LCAxODMsIDE3OSwgMTgwLCAxNiwgMjI4LCA5NiwgMjQ3LCAKKyAgICAxMzAsIDY1LCAxNzksIDE4MCwgMTYsIDIyOCwgNjgsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjQ5LCA2MywgMjIwLCA4MSwgCisgICAgMTc5LCAxODAsIDE2LCAyNDksIDUsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjM3LCA0OCwgMjIwLCA4MSwgMTc5LCAxODAsIAorICAgIDE2LCAyNTAsIDIyMiwgMjIwLCA4MSwgMTc5LCAxODAsIDE2LCAxMDgsIDIyNCwgMTk4LCAyMzcsIDQ3LCAxNzksIDE4MCwgCisgICAgMTYsIDIyOCwgNjgsIDIyOCwgOTUsIDE3OSwgMTgwLCAxNiwgMjUwLCAyMjIsIDIyMywgMTU2LCAxNzksIDE4MCwgMTYsIAorICAgIDIyOCwgOTYsIDI1MCwgMTc1LCAxNzksIDE4MCwgMTYsIDEwOCwgMjIyLCAxNDQsIDI0OSwgMTMsIDE3OSwgMTgwLCAxNiwgCisgICAgMjQ5LCA3MiwgMjQ5LCAxMywgMTc5LCAxODAsIDE2LCAyMjMsIDE1NywgMjQ5LCAxMywgMTc5LCAxODAsIDE2LCAyMzcsIDQ4LCAKKyAgICAyNDksIDEzLCAxNzksIDE4MCwgMTYsIDI1MCwgMjIyLCAyNDksIDEzLCAxNzksIDE4MCwgMTYsIDExMywgMjI0LCAxOTgsIAorICAgIDIyMywgMTQyLCAxNzksIDE4MCwgMTYsIDQyLCAyMjQsIDE5OCwgMjIzLCAxNDIsIDE3OSwgMTgwLCAxNiwgMjIxLCAxODAsIAorICAgIDI0OSwgMTMsIDE3OSwgMTgwLCAxNiwgMjQ0LCAzMCwgMjQ5LCAxMywgMTc5LCAxODAsIDE2LCAyNTAsIDE2OSwgMTM1LCAKKyAgICAxNzksIDE4MCwgMTYsIDI0OSwgNzIsIDIyMSwgMTc5LCAxNzksIDE4MCwgMTYsIDIxNywgMzIsIDE3OSwgMTgwLCAxNiwgCisgICAgMjIzLCAxNDMsIDIyMSwgMTc5LCAxNzksIDE4MCwgMTYsIDIyNSwgNjgsIDIyMCwgODEsIDE3OSwgMTgwLCAxNiwgMjI4LCAKKyAgICA5NiwgMjEyLCAyNDYsIDE1NSwgMTc5LCAxODAsIDE2LCAyMjgsIDk2LCAyMjgsIDgxLCAxNzksIDE4MCwgMTYsIDExMywgCisgICAgMjUxLCAxMzUsIDIyMSwgMTc5LCAxNzksIDE4MCwgMTYsIDEwOCwgMjUxLCAxMzUsIDIyMSwgMTc5LCAxNzksIDE4MCwgMTYsIAorICAgIDIzNywgMTYyLCAxNzksIDE4MCwgMTYsIDIyNywgMTQ5LCAxNzksIDE4MCwgMTYsIDIzMCwgMTQzLCAxNzksIDE4MCwgMTYsIAorICAgIDI1NCwgMTQ3LCAyMjAsIDgxLCAxNzksIDE4MCwgMTYsIDI0NiwgMTU3LCAyMjAsIDgxLCAxNzksIDE4MCwgMTYsIDIzNywgCisgICAgMTYzLCAyMjAsIDgxLCAxNzksIDE4MCwgMTYsIDIzMCwgMTQ0LCAyMjAsIDgxLCAxNzksIDE4MCwgMTYsIDI1NCwgMTQ2LCAKKyAgICAyMTIsIDI1MSwgNDUsIDc4LCA0NSwgMjU0LCAxMjAsIDIsIDI0NywgMTMwLCAyMTcsIDMzLCA2NSwgMjI0LCAxNzcsIDIzMCwgCisgICAgMTE5LCAyNTIsIDIxLCAyNTIsIDEyMCwgMTAwLCA2OSwgMjM1LCA0NCwgMiwgMjMzLCAxOTMsIDI0OCwgMTQ1LCAyMzcsIAorICAgIDE5MSwgMTAwLCAyNTAsIDEzNywgMjIwLCA3OSwgMTAwLCAyNDgsIDIwNCwgMjIwLCA3OSwgMTAwLCAyNDYsIDIwMSwgMTAwLCAKKyAgICAyNTAsIDE2MCwgMTAwLCA2NywgNDAsIDIsIDI1MSwgODUsIDY5LCAyMzUsIDQzLCAyNDYsIDE3OSwgMTAwLCAyNTQsIDE0MiwgCisgICAgMjM2LCAxNTUsIDEwMCwgMjQzLCAxNDIsIDEwMCwgMzQsIDE4NiwgMjUyLCAyMDEsIDIsIDIzMSwgMTgzLCAzNCwgMjIxLCAKKyAgICA5MSwgMjQ3LCAxMzIsIDI1MiwgMSwgMjUwLCAyMjIsIDIsIDIzMSwgMTg2LCA2NSwgMjIwLCA3NywgMTAwLCAyMzMsIDEyMiwgCisgICAgMTAwLCAyNDIsIDExNywgMTAwLCAyMzAsIDExOCwgMjQzLCAyMjQsIDEwMCwgMjMwLCAxMTgsIDIzNSwgMjAwLCAxMDAsIAorICAgIDIyOSwgMjE4LCAxMDAsIDIyOSwgMjE3LCAxMDAsIDI0OCwgMjEwLCAyNTAsIDc3LCAxNiwgMjQ1LCAxMjQsIDEwMywgMjI0LCAKKyAgICAyMCwgMTAwLCAxNzksIDE4MCwgMTYsIDIyOCwgOTUsIDI0OSwgODYsIDIyNSwgNTUsIDIzNiwgMTU1LCAxMDAsIDIyOCwgCisgICAgMjM3LCAyMzAsIDM0LCAyMzIsIDEyMCwgMjMwLCAzNCwgMjI4LCAyMzQsIDIyNiwgMTAxLCAxMDAsIDI1MCwgMjA5LCAyMjYsIAorICAgIDEwMSwgMTAwLCA0MiwgMjI5LCAyMzAsIDIyMCwgNjAsIDk2LCA0MiwgMjI5LCAyMzAsIDI0NiwgODYsIDQyLCAyMjksIDIzMCwgCisgICAgMjM0LCAyMzcsIDk2LCA0NSwgMjI5LCAyMzAsIDIyMCwgNjAsIDk2LCA0NSwgMjI5LCAyMzAsIDI0NiwgODYsIDQ1LCAyMjksIAorICAgIDIzMCwgMjM0LCAyMzcsIDk2LCA0MiwgNDAsIDI1MiwgMTgsIDIyMCwgNjAsIDI1MCwgMTIzLCA0MiwgNDAsIDI1MiwgMTgsIAorICAgIDI0NiwgODYsIDQyLCA0MCwgMjUyLCAxOCwgMjM0LCAyMzcsIDI1MCwgMTIzLCA0NSwgNDAsIDI1MiwgMTgsIDIyMCwgNjAsIAorICAgIDI1MCwgMTIzLCA0NSwgNDAsIDI1MiwgMTgsIDI0NiwgODYsIDQ1LCA0MCwgMjUyLCAxOCwgMjM0LCAyMzcsIDI1MCwgMTIzLCAKKyAgICA0MiwgMjUwLCA3OSwgMjUyLCAxOCwgMjIwLCA2MCwgOTYsIDQyLCAyNTAsIDc5LCAyNTIsIDE4LCAyMzMsIDE5MywgMjI5LCAKKyAgICAxMDIsIDQyLCAyNTAsIDc5LCAyNTIsIDE4LCAyMzQsIDIzNywgOTYsIDI1MCwgNzksIDI1MiwgMTgsIDI0NiwgODYsIDQ1LCAKKyAgICAyNTAsIDc5LCAyNTIsIDE4LCAyMjAsIDYwLCA5NiwgNDUsIDI1MCwgNzksIDI1MiwgMTgsIDIzMywgMTkzLCAyMjksIDEwMiwgCisgICAgNDUsIDI1MCwgNzksIDI1MiwgMTgsIDIzNCwgMjM3LCA5NiwgMjM3LCAxODcsIDI0NiwgODYsIDE4NiwgMjM1LCA0NCwgMjQ2LCAKKyAgICA4NiwgMjIwLCA2MCwgNDIsIDE1NiwgMjM0LCAyMzcsIDQ1LCAyNTAsIDc5LCAyNTIsIDE4LCAyMjYsIDg2LCAyMjAsIDYwLCAKKyAgICA0NSwgMTU2LCAyMzQsIDIzNywgNDIsIDI1MCwgNzksIDI1MiwgMTgsIDIyNiwgODYsIDIyMywgNzIsIDIyMSwgMTE5LCAyMjMsIAorICAgIDcyLCAyNTIsIDI4LCAyMjEsIDEyMCwgNDAsIDExNSwgMjUyLCAyOSwgNDAsIDExNSwgMjUyLCAyOSwgNDAsIDI1MiwgMTgsIAorICAgIDEwNCwgMjIxLCAxMjAsIDQwLCAxMTUsIDMyLCAxNiwgMjUyLCAyOCwgNDIsIDY5LCA4NiwgMjM1LCA0MywgNDUsIDY5LCA4NiwgCisgICAgMjM1LCA0MywgMTg2LCAyMjYsIDExMiwgMjM1LCA0MiwgMTg2LCAyMjYsIDExMiwgMjM1LCA0MSwgMTg2LCAyMjYsIDExMiwgCisgICAgMjM1LCA0MCwgMTg2LCAyMjYsIDExMiwgMjM1LCAzOSwgMjQ5LCA1NCwgMTYsIDE3MCwgNjksIDI1LCAyMjEsIDEyMCwgMjI3LCAKKyAgICAxMDksIDI0OSwgNTQsIDE2LCAxNzAsIDY5LCAyNSwgMjUyLCAyOSwgMjI3LCAxMDksIDI0OSwgNTQsIDE2LCAxNzAsIDY5LCAKKyAgICAyLCAyNTAsIDIyMSwgMjQ5LCA1NCwgMTYsIDE3MCwgMTEzLCAyNSwgMTg2LCAyLCAyNTAsIDIyMSwgMjQ5LCA1NCwgMTYsIAorICAgIDE3MCwgMTA4LCAyNSwgMTg2LCAyLCAyNTAsIDIyMSwgMjQ5LCA1NCwgMTYsIDE3MCwgNjksIDIsIDIyMSwgOTAsIDI0OSwgCisgICAgNTQsIDE2LCAxNzAsIDExMywgMjUsIDE4NiwgMiwgMjIxLCA5MCwgMjQ5LCA1NCwgMTYsIDE3MCwgMTA4LCAyNSwgMTg2LCAyLCAKKyAgICAyMjEsIDkwLCAyNDksIDU0LCAxNiwgMTcwLCA2OSwgMjUsIDIxOCwgMjM2LCAyNDksIDU0LCAxNiwgMTcwLCAxMTMsIDI1LCAKKyAgICAxODYsIDIsIDIxOCwgMjM2LCAyNDksIDU0LCAxNiwgMTcwLCAxMDgsIDI1LCAxODYsIDIsIDIxOCwgMjM2LCAyNDksIDU0LCAKKyAgICAxNiwgMTcwLCAxMTMsIDI1LCAyNDIsIDI0MSwgMjQ5LCA1NCwgMTYsIDE3MCwgMTA4LCAyNSwgMjQyLCAyNDEsIDI0OSwgNTQsIAorICAgIDE2LCAxNzAsIDY5LCAyNSwgMjIxLCAxMjAsIDIzNSwgMTE1LCAyNDksIDU0LCAxNiwgMTcwLCA2OSwgMjUsIDI1MiwgMjksIAorICAgIDIzNSwgMTE1LCA0MCwgMjQ1LCAxMzMsIDIyNywgMTYzLCAxMDAsIDI0NiwgMjI1LCAxMDAsIDY5LCAyMzUsIDQ0LCAyNDYsIAorICAgIDg2LCAyMzMsIDIzMywgMjUyLCA4LCAyMzMsIDIzMywgMTcxLCAxMDQsIDIyNCwgMTkxLCAyMzMsIDIzMywgMjI0LCAxOTIsIAorICAgIDEwNCwgMjM1LCAyLCAyMzMsIDIzMywgMTcxLCAxMDQsIDEyNCwgMjI0LCAxNzksIDIzMywgMjMzLCAxMjQsIDIyNCwgMTgwLCAKKyAgICAxMDQsIDIzNSwgMiwgMjMzLCAyMzMsIDEyNCwgMjI0LCAxODAsIDIzNywgNTUsIDIzMywgMjMzLCAyMjEsIDc1LCAyMzMsIAorICAgIDIzMywgMjIyLCA0MywgMjMzLCAyMzMsIDIyOSwgMTc0LCAyNDcsIDksIDI0NCwgMjQsIDI0NSwgODEsIDIyMSwgMTIwLCAKKyAgICAyMjksIDIyOSwgMjUyLCAyOSwgMjI5LCAyMjksIDIyMSwgMTIwLCAyNTAsIDc5LCAxMTUsIDI1MiwgMjksIDI1MCwgNzksIAorICAgIDExNSwgMjIxLCAxMjAsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAyNTIsIDI5LCAyMjEsIDExNCwgMjI0LCAyMzYsIDExNSwgCisgICAgNjcsIDIyMSwgMTAxLCAyNTIsIDExMSwgMjI3LCA5NCwgMiwgMjUwLCAyMjEsIDIyMywgMTI5LCAyNDUsIDE1NSwgMjU1LCAzLCAKKyAgICAyNTAsIDc2LCAyNDYsIDIxNCwgMjM3LCAxNzQsIDI0OSwgODYsIDI0NiwgODgsIDEwMCwgMTYsIDM1LCAyMzEsIDExMCwgMTYsIAorICAgIDM1LCAyMjMsIDE1NCwgMTE3LCAyNDMsIDE1NywgMTYsIDM1LCAyMjMsIDE1NCwgMTE3LCAyMjIsIDM5LCAxNiwgMzUsIDI0NiwgCisgICAgMTkwLCAxMTcsIDIyMiwgMzksIDE2LCAzNSwgMjQ2LCAxOTAsIDExNywgMjIxLCAxMDQsIDE2LCAzNSwgMjQ2LCAxODEsIDE2LCAKKyAgICAzNSwgMjU0LCAyNTIsIDE2LCAzNSwgMjUyLCAxMTksIDE2LCAzNSwgMjUyLCAyMjksIDE2LCAzNSwgMTg2LCAyMjIsIDE0NSwgCisgICAgMTYsIDM1LCAyMzUsIDQ0LCAyNDUsIDIyNCwgMTYsIDM1LCA2OSwgMjIyLCAxNDUsIDE2LCAzNSwgMjQ1LCAxMjQsIDI0NSwgCisgICAgMjI0LCAxNiwgMzUsIDI1MSwgMTI4LCAyMjcsIDE2MiwgMTYsIDM1LCAyMjQsIDIxNywgMjMwLCA4MywgMTYsIDM1LCAyMjQsIAorICAgIDIxNywgMjM3LCAyMjMsIDE2LCAzNSwgMjQ5LCAxNDIsIDIzNSwgMzQsIDI0NiwgMTM1LCAxNiwgMzUsIDI0OSwgNDIsIDI1MCwgCisgICAgMTMyLCAxMDcsIDE2LCAzNSwgMjQ5LCA0MiwgMjUwLCAxMzIsIDEwMywgMTYsIDM1LCAyNDksIDQyLCAyNTAsIDEzMiwgMTYwLCAKKyAgICAxNiwgMzUsIDI0OSwgNDIsIDI1MCwgMTMyLCAxNTQsIDE2LCAzNSwgMjMyLCAxMzYsIDI1NCwgMjUyLCAxNiwgMzUsIDIyMiwgCisgICAgMjI0LCAyMzgsIDI4LCAxNiwgMzUsIDI0NiwgMTkwLCAxMTcsIDIyMSwgMTA1LCAyNTIsIDQ1LCAxNiwgMzUsIDI1MSwgMTUyLCAKKyAgICAxNiwgMzUsIDI0NiwgMTkwLCAxMTcsIDIzNCwgMTcsIDE2LCAzNSwgMjIzLCA5MCwgMTYsIDM1LCAyNDYsIDEzNSwgMTYsIAorICAgIDM1LCAyNDUsIDE4OSwgMjI1LCA1NCwgMTYsIDM1LCAyNDQsIDIzLCAyMjUsIDU0LCAxNiwgMzUsIDIyNywgMjEyLCAyMjUsIAorICAgIDU0LCAxNiwgMzUsIDIyMCwgNzMsIDIyNSwgNTQsIDE2LCAzNSwgMjIzLCAyNTQsIDE2LCAzNSwgMjQ5LCA2OSwgMjUyLCA0OCwgCisgICAgMTAwLCAyMzAsIDExOSwgMjUyLCAyMSwgMTYsIDM1LCAyMzIsIDEyMiwgMTYsIDM1LCAyNDksIDcwLCAyNDUsIDEyNCwgMTAzLCAKKyAgICAxNiwgMzUsIDIyMywgOTEsIDI0NSwgMTI0LCAxMDMsIDIzMCwgMTcxLCA5NiwgMjMwLCAxNzEsIDI1MSwgNjQsIDIzMCwgCisgICAgMTcxLCAyNDUsIDEyNywgMjMwLCAxNzEsIDIzNywgMTcwLCAyNDUsIDEyNywgMjMwLCAxNzEsIDI1MiwgMTE3LCAyNTEsIAorICAgIDI0NywgMjMwLCAxNzEsIDI1MiwgMjUsIDIyMSwgMjAwLCAyMzAsIDE3MSwgMjUyLCAxNSwgMjUyLCAyMDQsIDI0MiwgNTgsIAorICAgIDIzMCwgMTcxLCAyNTQsIDEzNSwgMTE3LCAyNTEsIDQ0LCAyMzAsIDE3MSwgMjQ5LCAxNDYsIDIzMCwgMTcxLCAyNTAsIDcwLCAKKyAgICAyNTQsIDI1NCwgMjMxLCAxMDgsIDIzMCwgMTcxLCA1MSwgMjUyLCAyMzAsIDM0LCAyMCwgMTA3LCAzNCwgMjAsIDEwMywgMzQsIAorICAgIDIwLCAxNjAsIDM0LCAyMCwgMTU0LCAzNCwgMjAsIDE3NCwgMzQsIDIwLCAxODIsIDM0LCAyMCwgMTkxLCAzNCwgMjAsIDE4NSwgCisgICAgMzQsIDIwLCAxOTAsIDM0LCA1NCwgMjIyLCA2NSwgMzQsIDU0LCAyNDYsIDIxMSwgMzQsIDU0LCAyMjAsIDIyMSwgMzQsIDU0LCAKKyAgICAyMjEsIDI0NywgMzQsIDU0LCAyNDUsIDExMSwgMzQsIDU0LCAyNDUsIDIwMCwgMzQsIDU0LCAyMjQsIDc3LCAzNCwgNTQsIAorICAgIDIyNSwgNDEsIDM0LCA1NCwgMjQ2LCAyMzMsIDM0LCA1NCwgMjMyLCAyOSwgMzQsIDU0LCAyMjAsIDIxOSwgODIsIDIwLCAKKyAgICAxMDcsIDgyLCAyMCwgMTAzLCA4MiwgMjAsIDE2MCwgODIsIDIwLCAxNTQsIDgyLCAyMCwgMTc0LCA4MiwgMjAsIDE4MiwgODIsIAorICAgIDIwLCAxOTEsIDgyLCAyMCwgMTg1LCA4MiwgMjAsIDE5MCwgODIsIDU0LCAyMjIsIDY1LCA4MiwgNTQsIDI0NiwgMjExLCA4MiwgCisgICAgNTQsIDIyMCwgMjIxLCA4MiwgNTQsIDIyMSwgMjQ3LCA4MiwgNTQsIDI0NSwgMTExLCA4MiwgNTQsIDI0NSwgMjAwLCA4MiwgCisgICAgNTQsIDIyNCwgNzcsIDgyLCA1NCwgMjI1LCA0MSwgODIsIDU0LCAyNDYsIDIzMywgODIsIDU0LCAyMzIsIDI5LCA4MiwgNTQsIAorICAgIDIyMCwgMjE5LCAyMCwgMTMxLCAyNDUsIDkwLCAyMjMsIDEzNiwgMjAsIDEyNCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIwLCAKKyAgICAxNDgsIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgMjQ1LCAxMTYsIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgMjQ1LCAxNzAsIAorICAgIDI0NSwgOTAsIDIyMywgMTM2LCAyMCwgMjI0LCA4MiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIwLCAyMjUsIDQzLCAyNDUsIDkwLCAKKyAgICAyMjMsIDEzNiwgMjAsIDI0NiwgMjM1LCAyNDUsIDkwLCAyMjMsIDEzNiwgMjAsIDIzMiwgMzEsIDI0NSwgOTAsIDIyMywgCisgICAgMTM2LCA1NCwgMjIyLCA2NiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyNDYsIDIxMiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAKKyAgICAyMjAsIDIyMiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyMjEsIDI0OCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyNDUsIAorICAgIDExMiwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyNDUsIDIwMSwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyMjQsIDc4LCAKKyAgICAyNDUsIDkwLCAyMjMsIDEzNiwgNTQsIDIyNSwgNDIsIDI0NSwgOTAsIDIyMywgMTM2LCA1NCwgMjQ2LCAyMzQsIDI0NSwgOTAsIAorICAgIDIyMywgMTM2LCA1NCwgMjMyLCAzMCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDU0LCAyMjAsIDIyMCwgMjQ1LCA5MCwgMjIzLCAKKyAgICAxMzYsIDgyLCA3LCAzLCAxLCA2MCwgODIsIDcsIDMsIDEsIDI1MywgMjA0LCA4MiwgNywgMywgMSwgMjUxLCAyMDIsIDgyLCAKKyAgICA3LCAzLCAxLCAyNTAsIDQ2LCA4MiwgNywgMywgMSwgNzMsIDgyLCA3LCAzLCAxLCAyNDYsIDc0LCA4MiwgNywgMywgMSwgCisgICAgMjQ1LCA2NywgODIsIDcsIDMsIDEsIDI0MywgMjI1LCA4MiwgNywgMywgMSwgNzIsIDgyLCA3LCAzLCAxLCAyMzcsIDEyNiwgCisgICAgODIsIDcsIDMsIDEsIDIzNywgMTcsIDgyLCA3LCAzLCAxLCAxNTMsIDgyLCA3LCAzLCAxLCAxODksIDgyLCA3LCAzLCAxLCAKKyAgICAyMDcsIDgyLCA3LCAzLCAxLCA3NCwgODIsIDcsIDMsIDEsIDIzMCwgNTksIDgyLCA3LCAzLCAxLCAyMjgsIDE2MywgODIsIDcsIAorICAgIDMsIDEsIDE1MiwgODIsIDcsIDMsIDEsIDE5OCwgODIsIDcsIDMsIDEsIDIyMiwgMjAxLCA4MiwgNywgMywgMSwgNjgsIDgyLCAKKyAgICA3LCAzLCAxLCAyMTYsIDIxNiwgODIsIDcsIDMsIDEsIDIxOSwgNDAsIDgyLCA3LCAzLCAxLCAyMTgsIDE1MSwgODIsIDcsIDMsIAorICAgIDEsIDIxOCwgOTAsIDgyLCA3LCAzLCAxLCAyMTcsIDE1NywgMzQsIDcsIDYsIDEsIDYwLCAzNCwgNywgNiwgMSwgMjUzLCAKKyAgICAyMDQsIDM0LCA3LCA2LCAxLCAyNTEsIDIwMiwgMzQsIDcsIDYsIDEsIDI1MCwgNDYsIDM0LCA3LCA2LCAxLCA3MywgMzQsIDcsIAorICAgIDYsIDEsIDI0NiwgNzQsIDM0LCA3LCA2LCAxLCAyNDUsIDY3LCAzNCwgNywgNiwgMSwgMjQzLCAyMjUsIDM0LCA3LCA2LCAxLCAKKyAgICA3MiwgMzQsIDcsIDYsIDEsIDIzNywgMTI2LCAzNCwgNywgNiwgMSwgMjM3LCAxNywgMzQsIDcsIDYsIDEsIDE1MywgMzQsIDcsIAorICAgIDYsIDEsIDE4OSwgMzQsIDcsIDYsIDEsIDIwNywgMzQsIDcsIDYsIDEsIDc0LCAzNCwgNywgNiwgMSwgMjMwLCA1OSwgMzQsIAorICAgIDcsIDYsIDEsIDIyOCwgMTYzLCAzNCwgNywgNiwgMSwgMTUyLCAzNCwgNywgNiwgMSwgMTk4LCAzNCwgNywgNiwgMSwgMjIyLCAKKyAgICAyMDEsIDM0LCA3LCA2LCAxLCA2OCwgMzQsIDcsIDYsIDEsIDIxNiwgMjE2LCAzNCwgNywgNiwgMSwgMjE5LCA0MCwgMzQsIDcsIAorICAgIDYsIDEsIDIxOCwgMTUxLCAzNCwgNywgNiwgMSwgMjE4LCA5MCwgMzQsIDcsIDYsIDEsIDIxNywgMTU3LCAzNCwgNywgMywgMSwgCisgICAgNjAsIDM0LCA3LCAzLCAxLCAyNTMsIDIwNCwgMzQsIDcsIDMsIDEsIDI1MSwgMjAyLCAzNCwgNywgMywgMSwgMjUwLCA0NiwgCisgICAgMzQsIDcsIDMsIDEsIDczLCAzNCwgNywgMywgMSwgMjQ2LCA3NCwgMzQsIDcsIDMsIDEsIDI0NSwgNjcsIDM0LCA3LCAzLCAxLCAKKyAgICAyNDMsIDIyNSwgMzQsIDcsIDMsIDEsIDcyLCAzNCwgNywgMywgMSwgMjM3LCAxMjYsIDM0LCA3LCAzLCAxLCAyMzcsIDE3LCAKKyAgICAzNCwgNywgMywgMSwgMTUzLCAzNCwgNywgMywgMSwgMTg5LCAzNCwgNywgMywgMSwgMjA3LCAzNCwgNywgMywgMSwgNzQsIAorICAgIDM0LCA3LCAzLCAxLCAyMzAsIDU5LCAzNCwgNywgMywgMSwgMjI4LCAxNjMsIDM0LCA3LCAzLCAxLCAxNTIsIDM0LCA3LCAzLCAKKyAgICAxLCAxOTgsIDM0LCA3LCAzLCAxLCAyMjIsIDIwMSwgMzQsIDcsIDMsIDEsIDY4LCAzNCwgNywgMywgMSwgMjE2LCAyMTYsIAorICAgIDM0LCA3LCAzLCAxLCAyMTksIDQwLCAzNCwgNywgMywgMSwgMjE4LCAxNTEsIDM0LCA3LCAzLCAxLCAyMTgsIDkwLCAzNCwgNywgCisgICAgMywgMSwgMjE3LCAxNTcsIDM0LCAyMCwgMjE3LCA4NCwgMjMyLCAxMzYsIDM0LCA1NCwgMjQ2LCAyMTEsIDIzMiwgMTM2LCAKKyAgICAzNCwgNTQsIDIyMCwgMjIxLCAyMzIsIDEzNiwgMzQsIDU0LCAyMjEsIDI0NywgMjMyLCAxMzYsIDM0LCA1NCwgMjQ1LCAxMTEsIAorICAgIDIzMiwgMTM2LCAzNCwgNTQsIDI0NSwgMjAwLCAyMzIsIDEzNiwgMzQsIDU0LCAyMjQsIDc3LCAyMzIsIDEzNiwgMzQsIDU0LCAKKyAgICAyMjUsIDQxLCAyMzIsIDEzNiwgMzQsIDU0LCAyNDYsIDIzMywgMjMyLCAxMzYsIDM0LCA1NCwgMjMyLCAyOSwgMjMyLCAxMzYsIAorICAgIDM0LCA1NCwgMjIwLCAyMTksIDUxLCAzNCwgMjAsIDEwNywgNTEsIDM0LCAyMCwgMTAzLCA1MSwgMzQsIDIwLCAxNjAsIDUxLCAKKyAgICAzNCwgMjAsIDE1NCwgNTEsIDM0LCAyMCwgMTc0LCA1MSwgMzQsIDIwLCAxODIsIDUxLCAzNCwgMjAsIDE5MSwgNTEsIDM0LCAKKyAgICAyMCwgMTg1LCA1MSwgMzQsIDIwLCAxOTAsIDUxLCAzNCwgNTQsIDIyMiwgNjUsIDIzMiwgMTM2LCAzNCwgMjAsIDIxNywgODQsIAorICAgIDg2LCA4OSwgMTcwLCAyNDIsIDI0MSwgODYsIDg5LCAxMDYsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgMjE5LCAxNTIsIDg2LCAKKyAgICA4OSwgMTA2LCAyMTksIDE1MiwgODYsIDg5LCAxNzAsIDIyMSwgNzgsIDI0OSwgMTQ3LCAyNDIsIDI0MSwgODYsIDg5LCAxMDYsIAorICAgIDIyMSwgNzgsIDI0OSwgMTQ3LCAyNDIsIDI0MSwgODYsIDg5LCAxNzAsIDIyMSwgNzgsIDI0OSwgMTQ3LCAyMTksIDE1MiwgCisgICAgODYsIDg5LCAxMDYsIDIyMSwgNzgsIDI0OSwgMTQ3LCAyMTksIDE1MiwgODYsIDg5LCAxNzAsIDIyOCwgOTIsIDI0OSwgMTQ3LCAKKyAgICAyNDIsIDI0MSwgODYsIDg5LCAxMDYsIDIyOCwgOTIsIDI0OSwgMTQ3LCAyNDIsIDI0MSwgODYsIDg5LCAxNzAsIDIyOCwgOTIsIAorICAgIDI0OSwgMTQ3LCAyMTksIDE1MiwgODYsIDg5LCAxMDYsIDIyOCwgOTIsIDI0OSwgMTQ3LCAyMTksIDE1MiwgODYsIDg5LCAKKyAgICAxNzAsIDExMywgMjUsIDIyNywgMTA5LCA4NiwgODksIDExMywgMTcwLCAyNSwgNDUsIDI0MywgMTQ5LCA4NiwgODksIDExMywgCisgICAgMTA2LCAyNSwgNDUsIDIzNSwgNTgsIDg2LCA4OSwgMTA2LCAxMTMsIDI1LCAyMjcsIDEwOSwgODYsIDg5LCAxNzAsIDExMywgCisgICAgMjUsIDIzNSwgMTE1LCA4NiwgODksIDExMywgMTcwLCAyNSwgNDIsIDI0MywgMTQ5LCA4NiwgODksIDExMywgMTA2LCAyNSwgCisgICAgNDIsIDIzNSwgNTgsIDg2LCA4OSwgMTA2LCAxMTMsIDI1LCAyMzUsIDExNSwgODYsIDg5LCAxNzAsIDEwOCwgMjUsIDIyNywgCisgICAgMTA5LCA4NiwgODksIDEwOCwgMTcwLCAyNSwgNDUsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgNDUsIDIzNSwgCisgICAgNTgsIDg2LCA4OSwgMTA2LCAxMDgsIDI1LCAyMjcsIDEwOSwgODYsIDg5LCAxNzAsIDEwOCwgMjUsIDIzNSwgMTE1LCA4NiwgCisgICAgODksIDEwOCwgMTcwLCAyNSwgNDIsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgNDIsIDIzNSwgNTgsIDg2LCAKKyAgICA4OSwgMTA2LCAxMDgsIDI1LCAyMzUsIDExNSwgODYsIDg5LCAxNzAsIDY5LCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgNjksIAorICAgIDE3MCwgMjUsIDQ1LCAyNDMsIDE0OSwgODYsIDg5LCAxMDgsIDEwNiwgMjUsIDQ1LCAxMTMsIDIzNSwgNTgsIDg2LCA4OSwgCisgICAgMTEzLCAxMDYsIDI1LCA0NSwgMTA4LCAyMzUsIDU4LCA4NiwgODksIDY5LCAxMDYsIDI1LCA0NSwgMjM1LCA1OCwgODYsIDg5LCAKKyAgICAxMTMsIDE3MCwgMjUsIDQ1LCAxMDgsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTcwLCAyNSwgNDUsIDExMywgMjQzLCAxNDksIAorICAgIDg2LCA4OSwgMTA2LCA2OSwgMjUsIDIyNywgMTA5LCA4NiwgODksIDE3MCwgNjksIDI1LCAyMzUsIDExNSwgODYsIDg5LCA2OSwgCisgICAgMTcwLCAyNSwgNDIsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgNDIsIDExMywgMjM1LCA1OCwgODYsIDg5LCAKKyAgICAxMTMsIDEwNiwgMjUsIDQyLCAxMDgsIDIzNSwgNTgsIDg2LCA4OSwgNjksIDEwNiwgMjUsIDQyLCAyMzUsIDU4LCA4NiwgODksIAorICAgIDExMywgMTcwLCAyNSwgNDIsIDEwOCwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxNzAsIDI1LCA0MiwgMTEzLCAyNDMsIDE0OSwgCisgICAgODYsIDg5LCAxMDYsIDY5LCAyNSwgMjM1LCAxMTUsIDg2LCA4OSwgMTcwLCAxMTMsIDI1LCAyNDIsIDI0MSwgODYsIDg5LCAKKyAgICA0MiwgMTA2LCAyNSwgNDUsIDExMywgMjM1LCA1OCwgODYsIDg5LCA0NSwgMTA2LCAyNSwgNDIsIDExMywgMjM1LCA1OCwgODYsIAorICAgIDg5LCAxMTMsIDE3MCwgMjUsIDE4NiwgMjQzLCAxNDksIDg2LCA4OSwgMTEzLCAxMDYsIDI1LCAxODYsIDIzNSwgNTgsIDg2LCAKKyAgICA4OSwgNDUsIDE3MCwgMjUsIDQyLCAxMTMsIDI0MywgMTQ5LCA4NiwgODksIDQyLCAxNzAsIDI1LCA0NSwgMTEzLCAyNDMsIAorICAgIDE0OSwgODYsIDg5LCAxMDYsIDExMywgMjUsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgMTA4LCAyNSwgMjQyLCAyNDEsIDg2LCAKKyAgICA4OSwgNDIsIDEwNiwgMjUsIDQ1LCAxMDgsIDIzNSwgNTgsIDg2LCA4OSwgNDUsIDEwNiwgMjUsIDQyLCAxMDgsIDIzNSwgNTgsIAorICAgIDg2LCA4OSwgMTA4LCAxNzAsIDI1LCAxODYsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgMTg2LCAyMzUsIDU4LCAKKyAgICA4NiwgODksIDQ1LCAxNzAsIDI1LCA0MiwgMTA4LCAyNDMsIDE0OSwgODYsIDg5LCA0MiwgMTcwLCAyNSwgNDUsIDEwOCwgCisgICAgMjQzLCAxNDksIDg2LCA4OSwgMTA2LCAxMDgsIDI1LCAyNDIsIDI0MSwgODYsIDg5LCAxNzAsIDY5LCAyNSwgMjQyLCAyNDEsIAorICAgIDg2LCA4OSwgNDIsIDEwNiwgMjUsIDQ1LCA2OSwgMjM1LCA1OCwgODYsIDg5LCA0NSwgMTA2LCAyNSwgNDIsIDY5LCAyMzUsIAorICAgIDU4LCA4NiwgODksIDY5LCAxNzAsIDI1LCAxODYsIDI0MywgMTQ5LCA4NiwgODksIDEwOCwgMTA2LCAyNSwgMTEzLCAxODYsIAorICAgIDIzNSwgNTgsIDg2LCA4OSwgMTEzLCAxMDYsIDI1LCAxMDgsIDE4NiwgMjM1LCA1OCwgODYsIDg5LCA2OSwgMTA2LCAyNSwgCisgICAgMTg2LCAyMzUsIDU4LCA4NiwgODksIDQyLCAxMDgsIDEwNiwgMjUsIDQ1LCAxMTMsIDIzNSwgNTgsIDg2LCA4OSwgNDUsIAorICAgIDEwOCwgMTA2LCAyNSwgNDIsIDExMywgMjM1LCA1OCwgODYsIDg5LCA0MiwgMTEzLCAxMDYsIDI1LCA0NSwgMTA4LCAyMzUsIAorICAgIDU4LCA4NiwgODksIDQ1LCAxMTMsIDEwNiwgMjUsIDQyLCAxMDgsIDIzNSwgNTgsIDg2LCA4OSwgMTEzLCAxNzAsIDI1LCAKKyAgICAxMDgsIDE4NiwgMjQzLCAxNDksIDg2LCA4OSwgMTA4LCAxNzAsIDI1LCAxMTMsIDE4NiwgMjQzLCAxNDksIDg2LCA4OSwgNDUsIAorICAgIDE3MCwgMjUsIDQyLCA2OSwgMjQzLCAxNDksIDg2LCA4OSwgNDIsIDE3MCwgMjUsIDQ1LCA2OSwgMjQzLCAxNDksIDg2LCA4OSwgCisgICAgMTA2LCA2OSwgMjUsIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgNTEsIDI0OSwgMTQ3LCAyNDIsIDI0MSwgODYsIDg5LCAxMDYsIAorICAgIDUxLCAyNDksIDE0NywgMjQyLCAyNDEsIDg2LCA4OSwgMTcwLCA1MSwgMjQ5LCAxNDcsIDIxOSwgMTUyLCA4NiwgODksIDEwNiwgCisgICAgNTEsIDI0OSwgMTQ3LCAyMTksIDE1MiwgODYsIDg5LCA1MSwgMjQyLCAyNDEsIDg2LCA4OSwgNTEsIDIxOSwgMTUyLCA4NiwgCisgICAgODksIDExMywgMjI0LCAxMDksIDI1LCA0NSwgMjQ3LCAxMzgsIDg2LCA4OSwgMTEzLCA1MSwgMjUsIDQ1LCAyMjQsIDEwOCwgCisgICAgODYsIDg5LCA1MSwgMTEzLCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTEzLCAyMjQsIDEwOSwgMjUsIDQyLCAyNDcsIDEzOCwgCisgICAgODYsIDg5LCAxMTMsIDUxLCAyNSwgNDIsIDIyNCwgMTA4LCA4NiwgODksIDUxLCAxMTMsIDI1LCAyMzUsIDExNSwgODYsIDg5LCAKKyAgICAxMDgsIDIyNCwgMTA5LCAyNSwgNDUsIDI0NywgMTM4LCA4NiwgODksIDEwOCwgNTEsIDI1LCA0NSwgMjI0LCAxMDgsIDg2LCAKKyAgICA4OSwgNTEsIDEwOCwgMjUsIDIyNywgMTA5LCA4NiwgODksIDEwOCwgMjI0LCAxMDksIDI1LCA0MiwgMjQ3LCAxMzgsIDg2LCAKKyAgICA4OSwgMTA4LCA1MSwgMjUsIDQyLCAyMjQsIDEwOCwgODYsIDg5LCA1MSwgMTA4LCAyNSwgMjM1LCAxMTUsIDg2LCA4OSwgNjksIAorICAgIDIyNCwgMTA5LCAyNSwgNDUsIDI0NywgMTM4LCA4NiwgODksIDY5LCA1MSwgMjUsIDQ1LCAyMjQsIDEwOCwgODYsIDg5LCA1MSwgCisgICAgNjksIDI1LCAyMjcsIDEwOSwgODYsIDg5LCA2OSwgMjI0LCAxMDksIDI1LCA0MiwgMjQ3LCAxMzgsIDg2LCA4OSwgNjksIDUxLCAKKyAgICAyNSwgNDIsIDIyNCwgMTA4LCA4NiwgODksIDUxLCA2OSwgMjUsIDIzNSwgMTE1LCA4NiwgODksIDExMywgMjI0LCAxMDksIAorICAgIDI1LCAxODYsIDI0NywgMTM4LCA4NiwgODksIDExMywgNTEsIDI1LCAxODYsIDIyNCwgMTA4LCA4NiwgODksIDUxLCAxMTMsIAorICAgIDI1LCAyNDIsIDI0MSwgODYsIDg5LCAxMDgsIDIyNCwgMTA5LCAyNSwgMTg2LCAyNDcsIDEzOCwgODYsIDg5LCAxMDgsIDUxLCAKKyAgICAyNSwgMTg2LCAyMjQsIDEwOCwgODYsIDg5LCA1MSwgMTA4LCAyNSwgMjQyLCAyNDEsIDg2LCA4OSwgNjksIDIyNCwgMTA5LCAKKyAgICAyNSwgMTg2LCAyNDcsIDEzOCwgODYsIDg5LCA2OSwgNTEsIDI1LCAxODYsIDIyNCwgMTA4LCA4NiwgODksIDUxLCA2OSwgMjUsIAorICAgIDI0MiwgMjQxLCA4NiwgODksIDE3MCwgMjU0LCA1MiwgMTEzLCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTcwLCAyNTQsIDUyLCAKKyAgICAxMTMsIDI1LCAyMzUsIDExNSwgODYsIDg5LCAxNzAsIDI1NCwgNTIsIDEwOCwgMjUsIDIzNSwgMTE1LCA4NiwgODksIDE3MCwgCisgICAgMjU0LCA1MiwgMTA4LCAyNSwgMjI3LCAxMDksIDg2LCA4OSwgMTcwLCAyNDksIDExLCAyMjAsIDYwLCA0NSwgMTk5LCAyMzQsIAorICAgIDIzNywgMjM1LCAxMTUsIDg2LCA4OSwgMTcwLCAyNDksIDExLCAyMjAsIDYwLCA0MiwgMTk5LCAyMzQsIDIzNywgMjI3LCAKKyAgICAxMDksIDg2LCA4OSwgMTcwLCAyNDksIDExLCAyNTAsIDEwMCwgODYsIDg5LCAxNzAsIDIzNSwgMTE1LCA4NiwgODksIDE3MCwgCisgICAgMjIwLCA2MywgODYsIDg5LCAxNzAsIDIyNywgMTA5LCA4NiwgODksIDE3MCwgMjQ3LCAxMzIsIDg2LCA4OSwgMTA2LCAyMzUsIAorICAgIDExNSwgODYsIDg5LCAxMDYsIDIyMCwgNjMsIDg2LCA4OSwgMTA2LCAyMjcsIDEwOSwgODYsIDg5LCAxMDYsIDI0NywgMTMyLCAKKyAgICA4NiwgODksIDE3MCwgNDIsIDI1LCAxMDYsIDIyNywgMTA5LCA4NiwgODksIDE3MCwgMTA4LCAyNSwgMTA2LCAyNDcsIDEzMiwgCisgICAgODYsIDg5LCAxMDYsIDQyLCAyNSwgMTcwLCAyMjcsIDEwOSwgODYsIDg5LCAxMDYsIDEwOCwgMjUsIDE3MCwgMjQ3LCAxMzIsIAorICAgIDIyMCwgNjAsIDE0NCwgMjUyLCA0NSwgMjM0LCAyMzcsIDEzMSwgMjQ2LCAyMzIsIDI1MiwgNDUsIDIzNCwgMjM3LCAxMzEsIAorICAgIDIyOCwgOTAsIDI1MiwgNDUsIDIzNCwgMjM3LCAxNDgsIDI0NiwgMjMwLCAyNTIsIDQ1LCAyMzQsIDIzNywgMTQ0LCAyNTIsIAorICAgIDQ1LCAyMzQsIDIzNywgMjQ1LCAxNzAsIDI0NiwgMjMwLCAyNTIsIDQ1LCAyMzQsIDIzNywgMTQ4LCAyMjgsIDg4LCAyNTIsIAorICAgIDQ1LCAyMzQsIDIzNywgMjI1LCA0MywgMjQ2LCAyMzAsIDI1MiwgNDUsIDI0NSwgOTAsIDI1MiwgNDUsIDQyLCAyMjUsIDQzLCAKKyAgICAyNDYsIDIzMCwgMjUyLCA0NSwgNDIsIDE0OCwgMjI4LCA4OCwgMjUyLCA0NSwgNDIsIDI0NSwgMTcwLCAyNDYsIDIzMCwgCisgICAgMjUyLCA0NSwgNDIsIDE0NCwgMjUyLCA0NSwgNDIsIDE0OCwgMjQ2LCAyMzAsIDI1MiwgNDUsIDQyLCAxMzEsIDIyOCwgOTAsIAorICAgIDI1MiwgNDUsIDQyLCAxMzEsIDI0NiwgMjMyLCAyNTIsIDQ1LCA0NSwgMTQ0LCAyNTIsIDQ1LCAxNzAsIDIyNSwgMTUsIDIzNCwgCisgICAgMTgsIDIyNSwgMTUsIDI0OSwgMTUyLCAyMjUsIDE1LCAyMjAsIDYwLCAxMzEsIDI0NiwgMjMyLCAyNTIsIDQ1LCA0NSwgMTMxLCAKKyAgICAyNDYsIDIzMiwgMjUyLCA0NSwgMjI4LCA5NCwgMjM0LCAyMzcsIDIzNSwgMTE1LCAyMjgsIDk0LCAyMzQsIDIzNywgMjI3LCAKKyAgICAxMDksIDIyOCwgOTQsIDIyMCwgNjAsIDIzNSwgMTE1LCAyMjgsIDk0LCAyMjAsIDYwLCA0MiwgMjUsIDIzNCwgMjM3LCA0MiwgCisgICAgMjUsIDIzNCwgMjM3LCAyMjcsIDEwOSwgMjI4LCA5NCwgMjIwLCA2MCwgNDIsIDI1LCAyMzQsIDIzNywgMjI3LCAxMDksIAorICAgIDIyOCwgOTQsIDIyMCwgNjAsIDQyLCAyNSwgMjIwLCA2MCwgNDUsIDI1LCAyMzQsIDIzNywgMjM1LCAxMTUsIDIyOCwgOTQsIAorICAgIDIyMCwgNjAsIDQyLCAyNSwgMjIwLCA2MCwgNDUsIDI1LCAyMzQsIDIzNywgMjI3LCAxMDksIDIyOCwgOTQsIDIyMCwgNjAsIAorICAgIDIyNywgMTA5LCAyMjgsIDk0LCAyMjAsIDYwLCA0NSwgMjUsIDIzNCwgMjM3LCAyMzUsIDExNSwgMjI4LCA5NCwgMjIwLCA2MCwgCisgICAgNDUsIDI1LCAyMzQsIDIzNywgNDIsIDI1LCAyMzQsIDIzNywgMjI3LCAxMDksIDg0LCAyMjMsIDIyNywgNjcsIDIyMywgMjI3LCAKKyAgICA2NywgNDAsIDIsIDIyNywgNTUsIDI1MCwgMTIyLCA2NywgNDAsIDI1MCwgMTQxLCA4NCwgMywgMjIzLCAyMjcsIDQwLCAyLCAKKyAgICAxODYsIDI0NSwgMTg3LCA0MCwgMiwgNjksIDI0NSwgMTg3LCA0MCwgMiwgMjMwLCA5NSwgMjUwLCA5NiwgMjQ1LCAxODcsIAorICAgIDQwLCAyLCAyMjAsIDYwLCA0MiwgMTk5LCAyMzQsIDIzNywgNDUsIDI0NSwgMTg3LCA0MCwgMiwgMjIwLCA2MCwgNDUsIDE5OSwgCisgICAgMjM0LCAyMzcsIDQyLCAyNDUsIDE4NywgNDAsIDIsIDI0OSwgMTEsIDI1MCwgOTYsIDI0NSwgMTg3LCA4NCwgMywgMjIzLCAKKyAgICAyMjcsIDY3LCAzLCAyMjMsIDIyNywgODQsIDIyNywgMjA4LCA2NywgMjI3LCAyMDgsIDg0LCA2OSwgMjI3LCAyMDgsIDY3LCAKKyAgICA2OSwgMjI3LCAyMDgsIDg0LCAyMjksIDIzMiwgNjcsIDIyOSwgMjMyLCA4NCwgMjIwLCA2MiwgMjIxLCA5MCwgNjcsIDIyMCwgCisgICAgNjIsIDIyMSwgOTAsIDg0LCAyMjAsIDYyLCAzLCAyMjEsIDkwLCA2NywgMjIwLCA2MiwgMywgMjIxLCA5MCwgODQsIDIyNywgCisgICAgMTA2LCAyMjEsIDkwLCA2NywgMjI3LCAxMDYsIDIyMSwgOTAsIDg0LCAyMjcsIDEwNiwgMywgMjIxLCA5MCwgNjcsIDIyNywgCisgICAgMTA2LCAzLCAyMjEsIDkwLCA4NCwgMjI3LCAxMDYsIDIyOSwgMjksIDY3LCAyMjcsIDEwNiwgMjI5LCAyOSwgODQsIDI0NywgCisgICAgMTMxLCAyMjEsIDkwLCA2NywgMjQ3LCAxMzEsIDIyMSwgOTAsIDg0LCAyNDcsIDEzMSwgMywgMjIxLCA5MCwgNjcsIDI0NywgCisgICAgMTMxLCAzLCAyMjEsIDkwLCA4NCwgMjM1LCAxMTIsIDIyMSwgOTAsIDY3LCAyMzUsIDExMiwgMjIxLCA5MCwgODQsIDIzNSwgCisgICAgMTEyLCAzLCAyMjEsIDkwLCA2NywgMjM1LCAxMTIsIDMsIDIyMSwgOTAsIDg0LCAyMzUsIDExMiwgMjI5LCAyOSwgNjcsIAorICAgIDIzNSwgMTEyLCAyMjksIDI5LCA4NCwgMjQ5LCA0LCA2NywgMjQ5LCA0LCA2NywgMjQ5LCA1LCAyNTAsIDE0MSwgODQsIDMsIAorICAgIDI0OSwgNCwgMjQ1LCAxNzUsIDIzNCwgMjM0LCA2NywgMjUwLCAyMjEsIDI0NywgMTQzLCAyNTAsIDIyMSwgMjUwLCAyMjIsIAorICAgIDIsIDY5LCAyNDUsIDE4NywgMjUxLCAyMzksIDg0LCAyNTAsIDIyMSwgMjUwLCAyMjIsIDIsIDQyLCAxNDQsIDI1MiwgNTMsIAorICAgIDI1MCwgMjIyLCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCAyNTAsIDIyMiwgMiwgMjM0LCAyMzcsIDE0NCwgMjUyLCA1MywgMjUwLCAKKyAgICAyMjIsIDIsIDIyMCwgNjAsIDE0NCwgMjUyLCA1MywgMjUwLCAyMjIsIDIsIDIyMCwgNjAsIDQ1LCAyMjgsIDk0LCAyNTIsIAorICAgIDUzLCAyNTAsIDIyMiwgMiwgMjU0LCAxNTgsIDI1MSwgMjIyLCAyMjAsIDYwLCA0MiwgMjI4LCA5NCwgMjUyLCA1MywgNDIsIAorICAgIDE0NCwgODQsIDI1MCwgMjIxLCA0NSwgMTQ0LCA4NCwgMjUwLCAyMjEsIDIzNywgMTcxLCAyNTEsIDI0MSwgMjM3LCAxNzEsIAorICAgIDY3LCAyNTAsIDIyMSwgMjIwLCA2MCwgMTQ0LCAyMzcsIDE3MSwgNjcsIDI1MCwgMjIxLCAyMzQsIDIzNywgMTQ0LCAyMzcsIAorICAgIDE3MSwgNjcsIDI1MCwgMjIxLCAyMjAsIDYwLCA0MiwgMjI4LCA5NCwgMjUwLCAyMTksIDI1NCwgNTEsIDIyMCwgNjAsIDQ1LCAKKyAgICAyMjgsIDk0LCAyNTAsIDIxOSwgMjU0LCA1MSwgMjM0LCAyMzcsIDQ1LCAyMjgsIDk0LCAyNTAsIDIxOSwgMjU0LCA1MSwgCisgICAgMjM0LCAyMzcsIDQyLCAyMjgsIDk0LCAyNTAsIDIxOSwgMjU0LCA1MSwgMjIwLCA2MCwgMTQ0LCAyNTAsIDIyMSwgMjM0LCAKKyAgICAyMzcsIDE0NCwgMjUwLCAyMjEsIDg0LCAyMzQsIDIzNywgNDUsIDIyMSwgOTAsIDg0LCAyMzQsIDIzNywgNDIsIDIyMSwgOTAsIAorICAgIDg0LCAyMjAsIDYwLCA0MiwgMjIxLCA5MCwgODQsIDIyMCwgNjAsIDQ1LCAyMjEsIDkwLCA2NywgMjUxLCAyNDEsIDQwLCAyLCAKKyAgICA0MiwgMTQ0LCAyNTIsIDUzLCA0MCwgMiwgNDUsIDE0NCwgMjUyLCA1MywgNDAsIDIsIDIyMCwgNjAsIDQyLCAyNDksIDExLCAKKyAgICAxNDQsIDI1MiwgNTMsIDQwLCAyLCAyMzQsIDIzNywgNDUsIDI0OSwgMTEsIDE0NCwgMjUyLCA1MywgNjcsIDQwLCAyLCA2OSwgCisgICAgMjUyLCA2MywgMjM1LCA0MywgNjcsIDIyMCwgNjIsIDIyMSwgOTEsIDIsIDI0OCwgMTQ1LCAyMjAsIDYyLCAyMjEsIDkxLCAyLCAKKyAgICA0MiwgMTQ0LCAyNTIsIDUzLCAyMjAsIDYyLCAyMjEsIDkxLCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCAyMzUsIDE0NiwgMjUwLCAKKyAgICAyMjEsIDY3LCA0MCwgMiwgMjIwLCA2MCwgNDIsIDIyOCwgOTMsIDY3LCA0MCwgMiwgMjM0LCAyMzcsIDQyLCAyMjgsIDkzLCAKKyAgICA2NywgNDAsIDIsIDIzNCwgMjM3LCA0NSwgMjI4LCA5MywgNjcsIDQwLCAyLCAyMjAsIDYwLCA0NSwgMjI4LCA5MywgNjcsIAorICAgIDI1MCwgMjIyLCAyLCAyMjAsIDYwLCA0MiwgMjI4LCA5MywgNjcsIDI1MCwgMjIyLCAyLCAyMzQsIDIzNywgNDIsIDIyOCwgCisgICAgOTMsIDY3LCAyNTAsIDIyMiwgMiwgMjM0LCAyMzcsIDQ1LCAyMjgsIDkzLCA2NywgMjUwLCAyMjIsIDIsIDIyMCwgNjAsIDQ1LCAKKyAgICAyMjgsIDkzLCAyMjAsIDYwLCA0MiwgMjIxLCA5MCwgMjIwLCA2MCwgNDUsIDIyMSwgOTAsIDIzNCwgMjM3LCA0MiwgMjIxLCAKKyAgICA5MCwgNjcsIDIzNCwgMTgsIDIyMywgMjI3LCA4NCwgMjM0LCAxOCwgMjIzLCAyMjcsIDY3LCAyMzQsIDE4LCAzLCAyMjMsIAorICAgIDIyNywgODQsIDIzNCwgMTgsIDMsIDIyMywgMjI3LCAyMzQsIDIzNywgNDUsIDIyMSwgOTAsIDg0LCAyMjMsIDY5LCAyLCAKKyAgICAyMjcsIDIyMCwgMjUwLCAxODksIDIyMCwgOTEsIDIyNCwgMjgsIDI1MCwgMTcxLCA4NCwgMjIzLCAxNTYsIDY3LCAyMjMsIAorICAgIDE1NiwgMjM1LCA1NiwgMjIxLCAyMjAsIDIyMywgNjgsIDI1NCwgMTAsIDIzMSwgMjAxLCAyNDksIDQ3LCAyMzEsIDIwMSwgCisgICAgMjUwLCAxNDksIDIzMCwgMTA5LCA4NCwgMjIyLCA3MSwgNjcsIDIyMiwgNzEsIDI1MiwgMjEzLCAyNTIsIDIxLCAyNTIsIAorICAgIDIxMywgODYsIDIsIDI1MSwgNDQsIDI1MiwgMjEzLCA4NiwgMiwgMjE4LCAxNTEsIDIyNiwgMTQ5LCAyMjAsIDkyLCAyLCAKKyAgICAyMjcsIDI0MywgMjQ3LCAxMTcsIDI0MiwgMTg3LCAyNTIsIDk4LCA2NywgMjI0LCAxOTYsIDIyOSwgMTAyLCA4NCwgMjI0LCAKKyAgICAxOTYsIDIyOSwgMTAyLCAyMjUsIDExLCAyMTAsIDIyNywgNTksIDI0NSwgMTQ4LCAyNDMsIDE1NCwgMjUxLCAyNDEsIDg0LCAKKyAgICA0MiwgMjI5LCAyOCwgMjM3LCAyMTMsIDg0LCA0NSwgMjI5LCAyOCwgMjM3LCAyMTMsIDY3LCA0MiwgMjI5LCAyOCwgMjM3LCAKKyAgICAyMTMsIDY3LCAxMDgsIDIyOSwgMjgsIDIzNywgMjEzLCA2NywgNDUsIDIyOSwgMjgsIDIzNywgMjEzLCA2NywgMTEzLCAyMjksIAorICAgIDI4LCAyMzcsIDIxMywgMjI0LCA2MCwgMjUsIDI1MCwgOTksIDI1MSwgMTIwLCA1NSwgMjI3LCAyNTAsIDU1LCAyNTIsIDY5LCAKKyAgICA1NSwgMjUxLCAxNjQsIDI1NCwgMTE1LCAyMzAsIDk2LCAyNTAsIDEwMCwgMjUxLCAzMiwgMjI3LCAxNDksIDI1MCwgMTAxLCAKKyAgICAxMTcsIDIzNCwgMjQzLCAyNTAsIDEwMSwgMTE3LCAyMzcsIDEwNSwgMjIzLCAxNTcsIDI1LCAyNTAsIDEwNCwgMjQ1LCAyNDEsIAorICAgIDEwMCwgMjU0LCAyMzgsIDIyNSwgMTMsIDI0MywgMTkzLCAyNSwgMjI0LCAxMzgsIDIyOSwgMTk3LCAxMDAsIDIxNywgMjQxLCAKKyAgICAyMTgsIDQ1LCAyMjEsIDgyLCAzNSwgMjQzLCAxNTEsIDIyMSwgODIsIDM1LCAyMzUsIDE2NSwgMjIxLCA4MiwgMzUsIDI0NSwgCisgICAgMTc5LCAyMjEsIDgyLCAzNSwgMjIxLCAyMjEsIDIyMSwgODIsIDM1LCAyMTgsIDE5NCwgMjIxLCA4MiwgMzUsIDIxOCwgMjQwLCAKKyAgICAyMjEsIDgyLCAzNSwgMjMzLCAxMDcsIDIyMSwgODIsIDM1LCAyNDcsIDgsIDIxOCwgMjExLCAxMTcsIDI0OSwgMzAsIDY3LCAKKyAgICAyNDUsIDk0LCAyNDYsIDMsIDY3LCAyMjQsIDM4LCAyNDYsIDMsIDg0LCAyMjQsIDM4LCAyNDYsIDMsIDY3LCAyMjMsIDY5LCAKKyAgICAyLCAyMjcsIDIyMCwgMjQ1LCAxNzgsIDIyOCwgOTAsIDIzMywgMTE3LCAyMzUsIDE0MiwgMjI4LCA5MCwgMjMzLCAxMTcsIAorICAgIDIzMywgMjQ5LCAyNDUsIDIxNywgNTUsIDI0NywgOCwgMjM0LCA5MCwgNTUsIDIzNywgMzEsIDIyNiwgMTI0LCAyMjAsIDQ1LCAKKyAgICAyMzIsIDEyOSwgMjI5LCA0MSwgMjU0LCAzOSwgMjIyLCAxMDQsIDI0NCwgMTgyLCAyNTEsIDE1MCwgMjM1LCA5MCwgMjE5LCAKKyAgICA4MCwgMjM1LCA2NSwgMjI2LCAxMDIsIDIyNiwgMTYzLCAyNTEsIDE0MCwgMjU0LCA2OCwgMjI5LCA2NiwgNjcsIDI1MSwgMzcsIAorICAgIDIzNiwgMTAyLCA2NywgMjUxLCAzNywgMjI4LCA4MywgNjcsIDI1MSwgMzcsIDIyNywgNjUsIDY3LCAyNTEsIDM3LCAyNTIsIAorICAgIDYyLCA2NywgMjUxLCAzNywgMjM2LCA1OSwgNjcsIDI1MSwgMzcsIDIyOSwgMjA3LCA4NCwgMjUxLCAzNywgMjM2LCAxMDIsIAorICAgIDg0LCAyNTEsIDM3LCAyMjgsIDgzLCA4NCwgMjUxLCAzNywgMjI3LCA2NSwgODQsIDI1MSwgMzcsIDI1MiwgNjIsIDg0LCAKKyAgICAyNTEsIDM3LCAyMzYsIDU5LCA4NCwgMjUxLCAzNywgMjI5LCAyMDcsIDg0LCAyMjMsIDI1MiwgMjIzLCA4MCwgNjcsIDI0MywgCisgICAgMTU0LCAyMjMsIDgwLCA2NywgMjQ5LCA1LCAyMjMsIDgwLCA4NCwgMjUwLCAxODgsIDIyMywgODAsIDY3LCAyMjMsIDI1MiwgCisgICAgMjIzLCA4MCwgODQsIDI0MywgMTU0LCAyMjMsIDgwLCA4NCwgMjQ5LCA1LCAyMjMsIDgwLCA2NywgMjUwLCAxODgsIDIyMywgCisgICAgODAsIDI0MiwgMTg3LCAyMjMsIDIzMSwgMjI4LCA5MCwgMjMxLCAxODAsIDI0NiwgMjMyLCAyMzEsIDE4MCwgMjUyLCAxNDIsIAorICAgIDI0NiwgMjMyLCAyMzEsIDE3NywgMjUyLCAxNDIsIDIyNCwgNzYsIDIzMSwgMTc3LCAyMzMsIDU5LCAyNDUsIDE1NywgNTUsIAorICAgIDIzMywgNTksIDIzMiwgMjA1LCA1NSwgMjMzLCA1OSwgMjI1LCAxLCA1NSwgMjE4LCAyMTcsIDE2NiwgMjUwLCAxMDAsIDI0NywgCisgICAgNSwgMTY2LCAyNTAsIDEwMCwgMjIwLCA3MCwgMjI3LCAyMDQsIDEwMCwgMjI3LCAyMDQsIDE2LCAzNSwgMjIwLCAxOTcsIAorICAgIDIyOSwgNTAsIDIyNywgMjA0LCAxNiwgMzUsIDIyMCwgMTk2LCAyMjksIDUwLCAyMjcsIDIwNCwgMTYsIDM1LCAyMjAsIDE5NSwgCisgICAgMjI5LCA1MCwgMjI3LCAyMDQsIDE2LCAzNSwgMjIwLCAxOTQsIDIyOSwgNTAsIDIyNywgMjA0LCAxNiwgMzUsIDIyMCwgMTkzLCAKKyAgICAyMjksIDUwLCAyMjcsIDIwNCwgMTYsIDM1LCAyMjAsIDE5MiwgMjI5LCA1MCwgMjI3LCAyMDQsIDE2LCAzNSwgMjIwLCAxOTEsIAorICAgIDIyOSwgNTAsIDIyNywgMjA0LCAxNiwgMzUsIDI0NCwgMTgwLCAyMzQsIDUwLCA4NCwgMjIwLCA3MCwgMjI3LCAyMDQsIDEwMCwgCisgICAgMjI3LCAyMDUsIDIyOSwgMjQ1LCAxMDAsIDIyOSwgMjIyLCAyMjksIDI0NSwgMTAwLCAyMjksIDE2MiwgMjI5LCAyNDUsIDU1LCAKKyAgICAyMTgsIDIwOSwgMTAwLCAyNDgsIDI1NCwgMjQ2LCAyLCAyNDgsIDI1NCwgMjQ2LCAxLCAyNDgsIDI1NCwgMjQ2LCAwLCAyNDgsIAorICAgIDI1NCwgMjQ1LCAyNTUsIDI0OCwgMjU0LCAyNDUsIDI1NCwgMjQ4LCAyNTQsIDI0NSwgMjUzLCA2NywgMjUwLCAyMjIsIDIsIAorICAgIDYxLCAyMjcsIDEwOSwgNjcsIDI1MCwgMjIyLCAyLCAxMjQsIDI0OCwgMTQzLCA4NCwgMjUwLCAyMjIsIDIsIDY3LCA2MSwgCisgICAgMjI3LCAxMDksIDg0LCAyNTAsIDIyMiwgMiwgMTI0LCA2NywgMjQ4LCAxNDMsIDIzMywgMTI1LCAzNSwgMjE4LCA0NSwgMjMzLCAKKyAgICAxMjUsIDM1LCAyMTcsIDI0MCwgMjQ4LCAyMzcsIDM1LCAyNDQsIDMxLCAyMTgsIDQ1LCAyNDgsIDIzNywgMzUsIDIzNSwgODUsIAorICAgIDIxNywgMjQwLCAyNDgsIDIzNywgMzUsIDIzNSwgODUsIDIxOCwgNDUsIDI0OCwgMjM3LCAzNSwgMjQ0LCAzMSwgMjE3LCAKKyAgICAyNDAsIDY3LCAyNDUsIDE2MywgODQsIDI0NSwgMTYzLCAyNDMsIDE5MywgMjUsIDIyOSwgMTA0LCAyNTQsIDEyOCwgMjUwLCAKKyAgICA5OCwgMjIzLCAyNCwgMjIzLCAxNjQsIDExNywgMjU0LCAyMTgsIDIyNiwgMTEzLCAyNTQsIDE2NywgMjQ1LCAxNDQsIDI0NCwgCisgICAgMTg5LCAyMjMsIDE2NCwgMTE3LCAyNDMsIDEzMywgMjUzLCAyMzgsIDEwMCwgMjQ1LCAxNTMsIDIzMCwgODAsIDY3LCAyMjMsIAorICAgIDE1NiwgMTQ4LCAyMzUsIDM4LCAyNTAsIDEzMSwgMjI3LCAxMDksIDE0OCwgMjM1LCAzOCwgMjUwLCAxMzEsIDIzNSwgMTE1LCAKKyAgICAyMTgsIDI1MCwgNTUsIDExNiwgMjE5LCA2NiwgNTUsIDI0NywgMTM1LCAyNDUsIDIxNywgNTUsIDI0NywgMTM1LCAyMzQsIAorICAgIDkwLCA1NSwgMjM3LCAxNzksIDI0NSwgMjE3LCAyNSwgMjM0LCA5MCwgNTUsIDIzNCwgOTAsIDI1LCAyNDUsIDIxNywgNTUsIAorICAgIDIzNCwgOTAsIDIsIDIxNCwgNTUsIDIzNCwgOTAsIDIsIDIxNCwgMjUsIDIzNCwgOTAsIDI1LCAyNDUsIDIxNywgNTUsIDY5LCAKKyAgICAyMzQsIDkwLCAyLCAyMTQsIDU1LCAxODYsIDIzNCwgOTAsIDIsIDIxNCwgNTUsIDIzNCwgMTgsIDY3LCAyNTAsIDIyMSwgCisgICAgMjM0LCAxOCwgODQsIDI1MCwgMjIxLCAyMzQsIDE4LCAzLCA2NywgMjUwLCAyMjEsIDIzNCwgNjIsIDEwMCwgMjQ4LCAxODYsIAorICAgIDEwMCwgMjIwLCA2OSwgMjI5LCAyMjEsIDEwMCwgMjUwLCAxNzgsIDI0NSwgODYsIDIyMCwgNDIsIDIzMiwgMTI0LCAyNTEsIAorICAgIDcyLCAyMzAsIDI1LCAyMzcsIDM3LCAyMTksIDk4LCAyNTEsIDE4LCA4NCwgMjMzLCAxMTgsIDIzNSwgNTMsIDIyNSwgMzQsIAorICAgIDIyNSwgNjQsIDIyOCwgNzUsIDIyNSwgNDgsIDIyNCwgMjQsIDI1MiwgMjE1LCAyNTIsIDE4OCwgMjA0LCAyMzYsIDE1NCwgCisgICAgNjcsIDI0NywgMTIyLCAyMzQsIDg2LCA2NywgMjQ3LCAxMjIsIDIzNiwgMTAyLCA4NCwgMjQ3LCAxMjIsIDIzNCwgODYsIDg0LCAKKyAgICAyNDcsIDEyMiwgMjM2LCAxMDIsIDIyNCwgMjksIDIxOCwgMTg5LCAyMjQsIDMxLCAyMjMsIDY5LCAyNTIsIDEyNSwgMjUwLCAKKyAgICAxODksIDIyNywgMjQyLCA4NCwgMjI0LCAyOCwgMjIxLCAyMjIsIDI1MCwgMTkwLCAyNSwgMjI3LCAyNDIsIDIxNSwgNjcsIAorICAgIDIyNCwgMTk2LCAyMjksIDEwMiwgMjE1LCA4NCwgMjI0LCAxOTYsIDIyOSwgMTAyLCA2NywgMjQ5LCA1LCAyMzcsIDIyNCwgCisgICAgMjIzLCAyMjcsIDI1MCwgOTUsIDIzNSwgMTQ5LCAyNDgsIDIwNiwgMjUxLCAxMzcsIDIyOSwgMTA0LCAyNTEsIDEzOCwgMjI0LCAKKyAgICA1MSwgMjQzLCAxNDEsIDIsIDY3LCAyNTAsIDEwMCwgMzQsIDI1MCwgOTUsIDIzNSwgMTQ5LCAyNTEsIDY1LCAyMzEsIDIwNSwgCisgICAgMjQ2LCAxNzQsIDI1NCwgMTQ0LCAyMzAsIDEzNSwgNDIsIDIxOCwgMjMwLCAyMjEsIDEwNiwgODQsIDIyMCwgMjA0LCA0MiwgCisgICAgMjE4LCAyMzAsIDIyMSwgMTA2LCA2NywgMjIwLCAyMDQsIDQyLCAyMTgsIDIzMCwgMjIxLCAxMDYsIDg0LCA0MiwgMjM1LCAKKyAgICAxNTAsIDIzMywgMjQ4LCA2NywgNDIsIDIzNSwgMTUwLCAyMzMsIDI0OCwgMjQ3LCAxMjAsIDIyNCwgNDYsIDU1LCAxMDYsIAorICAgIDY3LCAyNDcsIDEzMSwgMjIxLCA5MCwgNDIsIDI1MCwgMTk3LCAyNDYsIDE3NCwgMjA0LCAyMjYsIDE0OSwgMjQ1LCAyNDcsIAorICAgIDI0OSwgMTEsIDIzNywgMjI0LCA2NywgMjUwLCAyMjIsIDIzNywgMjI0LCA4NCwgMjIzLCAyMjcsIDg0LCAyMjEsIDYzLCAKKyAgICAyMjcsIDE2NywgNDIsIDI0NiwgMTczLCAyMjcsIDE2NywgNDIsIDI0NiwgMTcyLCAxMDYsIDI1MCwgMjIyLCAyLCAyMTQsIAorICAgIDI1LCAxMjQsIDE4OCwgNTAsIDg0LCAyNTAsIDEwMSwgMjMwLCAxMzksIDIyNCwgMjE4LCAyMjQsIDIwNywgMjI0LCAxNzQsIAorICAgIDI1MCwgMjQ1LCAyNTEsIDEyNSwgMjQzLCA5MywgMjI0LCA4MywgMjQ0LCAxOTAsIDIxOCwgMTg5LCAyNDIsIDE3MSwgMjQ0LCAKKyAgICAxOTAsIDIsIDI0MywgMTg4LCAyMzQsIDc5LCAxNiwgMzUsIDIzNSwgNTcsIDIzMywgMTA3LCAyMjAsIDkyLCAyMzAsIDEzOSwgCisgICAgMjQ0LCAyNCwgMjQ1LCAxMTcsIDI0NSwgMTY0LCAyMzcsIDIyNCwgMjQyLCAyNTIsIDI0NSwgMjA5LCAyMjYsIDE2MCwgNDAsIAorICAgIDI0NSwgMTE2LCAyNTAsIDEyMiwgMjI0LCA2MywgMjQyLCA2NiwgMjI0LCA2NSwgMjI5LCAxNTgsIDIsIDI1MiwgMjE1LCAKKyAgICAyMjIsIDYyLCAyMzcsIDExOCwgMjUyLCAyMDQsIDEwMCwgMjQzLCAxNTYsIDI0NCwgMzMsIDEwMCwgMjQ1LCA5MSwgMjI4LCAKKyAgICAxOTgsIDI1MCwgODMsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIDY3LCAyNDUsIDE2NCwgMiwgMTg2LCAyMzMsIDE5MywgODQsIAorICAgIDIyMywgMTIwLCAyMjAsIDYwLCAyNTIsIDQ5LCAyMjYsIDEwMywgODQsIDIyNiwgMTAzLCAyMzQsIDIzNywgMjUyLCA0OSwgCisgICAgMjI2LCAxMDMsIDY3LCAyMjYsIDEwMywgMjIyLCA3MiwgMjM1LCAxMCwgNTUsIDIyMiwgMTE0LCAyNDcsIDExOSwgMjU0LCAKKyAgICAxODcsIDI0NiwgMTcwLCAyMTksIDkzLCAyNDMsIDE4OSwgMjE4LCAxNjcsIDI0MywgMTg5LCAyMzQsIDIzNywgNDUsIDIyOSwgCisgICAgMTgxLCAyMjksIDE4MSwgMjIwLCA2MCwgNDUsIDIyOSwgMTgxLCA2NywgMjMyLCA1OSwgODQsIDIzMiwgNTksIDI1MSwgNDUsIAorICAgIDc4LCAxMDYsIDI1MSwgNDUsIDc4LCAyMzMsIDg0LCAyMTgsIDE1MSwgMTA2LCAyMzMsIDg0LCAyMTgsIDE1MSwgMjUyLCAKKyAgICAyMTMsIDIxOCwgMTUxLCAxMDYsIDI1MiwgMjEzLCAyMTgsIDE1MSwgMjMwLCA4MCwgMjMsIDI1MCwgMTAwLCAxMDYsIDIzLCAKKyAgICAyNTAsIDEwMCwgMjMwLCAxMTksIDI1MSwgODUsIDI1MCwgMTAwLCAxMDYsIDIzMCwgMTE5LCAyNTEsIDg1LCAyNTAsIDEwMCwgCisgICAgNywgMjUwLCAxMDAsIDIyNSwgMTQsIDY3LCA3LCAyNTAsIDEwMCwgMjMwLCA4MCwgNywgMjUwLCAxMDAsIDIzNCwgODgsIAorICAgIDI1MCwgMTAwLCAyMjMsIDE1NywgMTE3LCAyNDksIDE0MCwgMjQ1LCAxMTYsIDIyMiwgODMsIDI1MywgMjUxLCAyNDUsIDExNiwgCisgICAgMjUyLCAyMTQsIDI1MywgMjUxLCAxMDYsIDI0NSwgMTE2LCAyNTIsIDIxNCwgMjUzLCAyNTEsIDI0NSwgMTE2LCAyNTAsIAorICAgIDE4NiwgMjUzLCAyNTEsIDg0LCAyNDUsIDExNiwgMjI5LCAzMCwgMjIzLCAxNTYsIDY3LCAyNDUsIDExNiwgMjI5LCAzMCwgCisgICAgMjIzLCAxNTYsIDIyMywgMTI1LCAyMzAsIDgwLCA2NywgMjIzLCAxNTYsIDM0LCA2NywgMjIzLCAxNTYsIDIzMCwgMTE5LCAKKyAgICAyNTEsIDg1LCA4NCwgMjIzLCAxNTYsIDg0LCAyNTEsIDg1LCA2NywgMjIzLCAxNTYsIDIzMCwgODAsIDg0LCAyMjMsIDE1NiwgCisgICAgMTA2LCAyMzAsIDgwLCA4NCwgMjIzLCAxNTYsIDIyOSwgNzEsIDIyMywgMTU2LCAyMjUsIDE0LCA2NywgMjIzLCAxNTYsIAorICAgIDEwNiwgMjUzLCAyNTEsIDIzMCwgMTE5LCAyNTEsIDg1LCAyNTMsIDI1MSwgMjQ2LCAyMzUsIDIyMywgMjM2LCAyNTMsIDI1MSwgCisgICAgMjQ2LCAyMzUsIDIyOSwgMzAsIDg0LCAyMjMsIDE1NiwgMjQ2LCAyMzUsIDIyOSwgMzAsIDIyOSwgNzEsIDIyMywgMTU2LCAKKyAgICAyMjQsIDgyLCAyMjksIDMwLCA4NCwgMjIzLCAxNTYsIDI0NiwgMjM1LCAyMjksIDMwLCAyMjcsIDIwNiwgODQsIDIyMywgCisgICAgMTU2LCAxMDYsIDI0NiwgMjM1LCAyMjksIDMwLCAyMjcsIDIwNiwgODQsIDIyMywgMTU2LCAyMjAsIDIyMiwgMjI5LCAzMCwgCisgICAgODQsIDIyMywgMTU2LCAyMjQsIDc4LCAyMjksIDMwLCAyNTMsIDI1MSwgMjIyLCA4MywgMjUzLCAyNTEsIDIzMCwgMTE5LCAKKyAgICAyNTEsIDg1LCAyMjIsIDgzLCAyNTMsIDI1MSwgMTA2LCAyMjIsIDgzLCAyNTMsIDI1MSwgMjI0LCA4MiwgMjI5LCAxNDksIAorICAgIDg0LCAyNSwgNjcsIDI0NSwgMTQ3LCA4NCwgMjQ1LCAxNDcsIDY3LCAyNDUsIDE0NywgMjQ2LCAyMzUsIDIyOSwgMTQ5LCAKKyAgICAyMzAsIDgwLCA4NCwgMjQ1LCAxNDcsIDM0LCAyMzAsIDExOSwgMjUxLCA4NSwgMjQ2LCAyMzUsIDIyOSwgMzAsIDIyMywgCisgICAgMTU2LCAxMDYsIDIyMiwgODMsIDIyOSwgNzEsIDI1MywgMjUxLCAyMjQsIDMwLCAyMjEsIDE5NSwgMjIxLCA4NSwgMjI0LCAKKyAgICAzMCwgMTA2LCAyNTEsIDM1LCAyMjQsIDMwLCAyMjMsIDI1MSwgMTA2LCAyMjMsIDI1MSwgMjUyLCAyMTQsIDI1MywgMjUxLCAKKyAgICAyNDYsIDIzNSwgMjIyLCA4MywgMjI4LCAyMjEsIDI1MywgMjUxLCAxMDYsIDI0NiwgMjM1LCAyMjIsIDgzLCAyMjgsIDIyMSwgCisgICAgMjUzLCAyNTEsIDIyNSwgMTQsIDY3LCAyNTAsIDIyMSwgMjM0LCAyMzcsIDQ1LCAyNDcsIDExOCwgNjcsIDIyMywgMjI3LCAKKyAgICAyMjAsIDYwLCA0NSwgMjQ3LCAxMTgsIDY3LCAyMjMsIDIyNywgMjM0LCAyMzcsIDQ1LCAyMjUsIDE0LCA2NywgMjIzLCAyMjcsIAorICAgIDIyMCwgNjAsIDQ1LCAyMjUsIDE0LCA2NywgMjIzLCAyMjcsIDg0LCAyNDksIDUsIDIzMywgMTU1LCA2NywgMjE4LCAxNTEsIAorICAgIDEwNiwgMjQ2LCA5NSwgMTY0LCAxMDAsIDE3MCwgNjksIDEzNSwgMjM0LCAxOCwgNjksIDEzNSwgMTA2LCA2OSwgMTM1LCAKKyAgICAxMDYsIDIyNCwgMTA5LCAyMTUsIDI1MCwgMTY5LCAyMjgsIDY5LCAxNjQsIDIzMCwgOTgsIDEwNiwgMjI0LCAxMDksIDI1MCwgCisgICAgMTY5LCAyMjgsIDY5LCAxNjQsIDIzMCwgOTgsIDEwNiwgNTEsIDIxNSwgMjUwLCAxNjksIDIyOCwgNjksIDE2NCwgMjMwLCAKKyAgICA5OCwgMTA2LCA1MSwgMjUwLCAxNjksIDIyOCwgNjksIDE2NCwgMjMwLCA5OCwgMjUwLCA3MywgMjIzLCAxNDcsIDIyOSwgCisgICAgMjQxLCA1LCAyMzAsIDk4LCAxMDYsIDI0NiwgOTUsIDE2NCwgMjMwLCA5OCwgMTA2LCAyNDMsIDE1NCwgMjQ2LCA5NSwgMTY0LCAKKyAgICAyMzAsIDk4LCAxMDYsIDg0LCAyNDMsIDE1MywgMjI3LCA1OSwgMTA2LCA4NCwgMjQzLCAxNTQsIDI1MSwgMjQxLCAyNDUsIAorICAgIDE0OCwgMjQzLCAxNTMsIDIyNywgNTksIDI0NSwgMTQ4LCAyNDMsIDE1NCwgMjUxLCAyNDEsIDIzNCwgMTgsIDQyLCAyMjksIAorICAgIDIzMCwgMjMwLCA5OCwgMjM0LCAxOCwgNDUsIDIyOSwgMjMwLCAyMzAsIDk4LCAyMzQsIDE4LCAyNDUsIDE1NCwgNDIsIDIyOSwgCisgICAgMjMwLCAyMzAsIDk4LCAyMzQsIDE4LCAyNDUsIDE1NCwgNDUsIDIyOSwgMjMwLCAyMzAsIDk4LCAyMzQsIDE4LCAyMzUsIAorICAgIDExMiwgMjU0LCAxMjAsIDI1MiwgMTgsIDIzMCwgOTgsIDIzNCwgMTgsIDIyNywgMTA2LCAyNTQsIDEyMCwgMjUyLCAxOCwgCisgICAgMjMwLCA5OCwgMTA2LCAyMzUsIDExMiwgMjU0LCAxMjAsIDIyOCwgNjksIDE2NCwgMjMwLCA5OCwgMTA2LCAyMjcsIDEwNiwgCisgICAgMjU0LCAxMjAsIDIyOCwgNjksIDE2NCwgMjMwLCA5OCwgMTA2LCAyMzUsIDExMiwgMjU0LCAxMjAsIDI1MiwgMTgsIDIzMCwgCisgICAgOTgsIDEwNiwgMjI3LCAxMDYsIDI1NCwgMTIwLCAyNTIsIDE4LCAyMzAsIDk4LCAxNzAsIDQyLCAyMjEsIDExNCwgMjI0LCAKKyAgICAyMzYsIDI1MiwgMTgsIDIzMCwgOTgsIDE3MCwgNDUsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxOCwgMjMwLCA5OCwgCisgICAgMjM0LCAxOCwgNDIsIDI1MCwgNzksIDI1MiwgMTgsIDIzMCwgOTgsIDIzNCwgMTgsIDQ1LCAyNTAsIDc5LCAyNTIsIDE4LCAKKyAgICAyMzAsIDk4LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTA3LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgCisgICAgMTAzLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTYwLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTU0LCAKKyAgICAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTc0LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTgyLCAyNDgsIAorICAgIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTkxLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAyMCwgMTg1LCAyNDgsIDIxNywgCisgICAgMjMyLCAxMzYsIDM0LCAyMCwgMTkwLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCA1NCwgMjIyLCA2NSwgMjQ4LCAyMTcsIDM0LCAKKyAgICAzMywgMjAsIDEwNywgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIDEwMywgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIDE2MCwgMjQ4LCAKKyAgICAyMTcsIDM0LCAzMywgMjAsIDE1NCwgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIDE3NCwgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIAorICAgIDE4MiwgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIDE5MSwgMjQ4LCAyMTcsIDM0LCAzMywgMjAsIDE4NSwgMjQ4LCAyMTcsIDM0LCAKKyAgICAzMywgMjAsIDE5MCwgMjQ4LCAyMTcsIDM0LCAzMywgNTQsIDIyMiwgNjUsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAKKyAgICAyMCwgMTA3LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgMjAsIDEwMywgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIAorICAgIDIwLCAxNjAsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAyMCwgMTU0LCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgCisgICAgMjAsIDE3NCwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIDIwLCAxODIsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCAKKyAgICAyMCwgMTkxLCAyNDgsIDIxNywgMjMyLCAxMzYsIDM0LCAzMywgMjAsIDE4NSwgMjQ4LCAyMTcsIDIzMiwgMTM2LCAzNCwgMzMsIAorICAgIDIwLCAxOTAsIDI0OCwgMjE3LCAyMzIsIDEzNiwgMzQsIDMzLCA1NCwgMjIyLCA2NSwgMTA2LCAyMTgsIDIwMCwgOTAsIDY1LCAKKyAgICAxMDYsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMTA2LCA5MCwgNjUsIDEwNiwgMjMxLCAxODcsIDI0NywgNSwgNjUsIDI0NywgCisgICAgMTI0LCAyMjksIDMyLCA5MCwgNjUsIDEwNiwgMjI3LCA1NiwgOTAsIDY1LCAyMjEsIDg5LCA5MCwgNjUsIDEwNiwgMjIxLCAKKyAgICA4OSwgOTAsIDY1LCAyNDksIDE0NSwgMjIxLCA4OSwgOTAsIDY1LCAxMDYsIDI0OSwgMTQ1LCAyMjEsIDg5LCA5MCwgNjUsIAorICAgIDg0LCA5MCwgNjUsIDIyMSwgMjI4LCAyMjEsIDExOCwgOTAsIDI1NCwgMjAsIDIyMSwgMjI4LCAyNTIsIDI3LCA5MCwgMjU0LCAKKyAgICAyMCwgODQsIDkwLCAyNTQsIDIwLCAxMDYsIDg0LCAyNTAsIDczLCAyNDcsIDEzMCwgMjUsIDkwLCA2NSwgMTA2LCA4NCwgCisgICAgMjUwLCA3MywgMjIwLCA1MywgMjUsIDkwLCA2NSwgMjIzLCAyMjQsIDg0LCA5MCwgNjUsIDEwNiwgMjUwLCAxNTcsIDg0LCAKKyAgICA5MCwgNjUsIDIyNywgMTA1LCA2NywgOTAsIDY1LCAyMzUsIDExMSwgNjcsIDkwLCA2NSwgMjUyLCAyMzIsIDIyNSwgMTQsIAorICAgIDY3LCA5MCwgNjUsIDI0NSwgOTYsIDIyNSwgMTQsIDY3LCA5MCwgNjUsIDEwNiwgMjM0LCAyMzcsIDIyNywgMTA0LCA2NywgCisgICAgOTAsIDY1LCAxMDYsIDIyMCwgNjAsIDIyNywgMTA0LCA2NywgOTAsIDY1LCAyMzEsIDE4MiwgMjM0LCAyMzcsIDIyNywgMTA0LCAKKyAgICA2NywgOTAsIDY1LCAyMzEsIDE4MiwgMjIwLCA2MCwgMjI3LCAxMDQsIDY3LCA5MCwgNjUsIDM0LCAxMDYsIDY3LCA5MCwgNjUsIAorICAgIDIxOCwgMjA2LCA5MCwgNjUsIDI1MiwgNTIsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMjUyLCA1MiwgOTAsIDY1LCAyNTIsIDUyLCAKKyAgICAyMzEsIDE4NywgMjQ3LCA1LCA2NSwgMTA2LCAyNTIsIDUyLCAyMjQsIDYsIDI0NywgNSwgNjUsIDEwNiwgMjUyLCA1MiwgOTAsIAorICAgIDY1LCAxMDYsIDI1MiwgNTIsIDIzMSwgMTg3LCAyNDcsIDUsIDY1LCAyMjIsIDg1LCA5MCwgNjUsIDEwNiwgMjIyLCA4NCwgCisgICAgOTAsIDY1LCAyMTgsIDIyNSwgOTAsIDY1LCAxMDYsIDIxOCwgMjI1LCA5MCwgNjUsIDIzMCwgMTE2LCA5MCwgNjUsIDE0OCwgCisgICAgMjQ4LCAyMjcsIDI1NCwgMTE5LCA2NywgMjIxLCA5MSwgMjUwLCAxNDEsIDMsIDY3LCAyMjEsIDkwLCAyMjksIDE2MCwgMjMwLCAKKyAgICAxMTksIDIyMywgOTIsIDIzMCwgMTE5LCAyMjMsIDU3LCA0MiwgMjI2LCAyMzQsIDI1MiwgMjI2LCAyNDksIDY3LCA0NSwgCisgICAgMjI2LCAyMzQsIDI1MiwgMjI2LCAyNDksIDY3LCAxNTYsIDIsIDYxLCAyMzcsIDE5MCwgMjI3LCAxNjAsIDIyNCwgMTgsIAorICAgIDIyOCwgMjQzLCAyMjMsIDkyLCAyMjMsIDU4LCAyMjgsIDI0MywgMjI0LCAxNywgNjksIDI1MiwgMjAxLCAyLCAxODYsIDkyLCAKKyAgICAxNzEsIDI0OCwgMTg3LCA2NywgMjQ5LCA1LCAyLCAyNTEsIDgzLCAyNDgsIDE0NSwgMjUsIDIsIDI0OCwgMTQ1LCAyNDYsIAorICAgIDIxMywgMTE3LCAyMzAsIDExNCwgMjIwLCA1MiwgMjM0LCAyMzcsIDQ1LCAyNTAsIDEyNCwgMiwgMjQ4LCAxNDUsIDIyMCwgCisgICAgNjAsIDQyLCAyNTAsIDEyNCwgMiwgMjQ4LCAxNDUsIDQyLCAyMzAsIDgyLCAyMzcsIDU3LCA0NSwgMjMwLCA4MiwgMjM3LCAKKyAgICA1NywgMjQ1LCA5MCwgMjMwLCA4MiwgMjM3LCA1NywgMjM1LCAxNDYsIDEwOCwgMjIyLCAxNDMsIDIzNSwgMTQ2LCAxMTMsIAorICAgIDIyMiwgMTQzLCA0MiwgMjUsIDQ1LCA1MSwgMjIwLCAyMzYsIDQyLCAyNSwgNDUsIDIyMiwgMTQzLCA0MiwgMjMzLCA4NywgCisgICAgMTcxLCA0NSwgMjIyLCAxNDMsIDE3MSwgNDIsIDIyMiwgMTQzLCAxMDgsIDIyMiwgMTQ0LCAyLCAyNTAsIDIyMiwgNTAsIAorICAgIDIzNCwgMjM1LCAyNDgsIDE5MiwgMjUxLCAyMTMsIDE4NiwgMjI3LCAxNiwgNjcsIDI1MCwgMTU2LCAyNDksIDQsIDY3LCAKKyAgICAyNTAsIDE1NiwgMjQ5LCA1LCAyLCAxMjcsIDIyMSwgMjAyLCA2NywgMjUwLCAxNTYsIDI0OSwgNSwgMiwgOTAsIDIyMSwgCisgICAgMjAyLCA2NywgNDAsIDIsIDEyNywgMjIxLCAyMDIsIDY3LCA0MCwgMiwgOTAsIDIyMSwgMjAyLCAxNCwgNDIsIDY3LCA0MCwgCisgICAgMTE1LCAxNCwgNDUsIDY3LCA0MCwgMTE1LCAxNCwgNDIsIDI1NCwgMTIwLCAxMTUsIDE0LCA0NSwgMjU0LCAxMjAsIDExNSwgCisgICAgMTQsIDQyLCA1MSwgMjU0LCAxMjAsIDExNSwgMTQsIDQ1LCA1MSwgMjU0LCAxMjAsIDExNSwgMTQsIDQyLCA2NywgMjIxLCAKKyAgICAxMTQsIDIyNCwgMjM2LCAxMTUsIDE0LCA0NSwgNjcsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAxNCwgNDIsIDI0NSwgCisgICAgMTU0LCAyMjksIDIyOSwgMTQsIDQ1LCAyNDUsIDE1NCwgMjI5LCAyMjksIDIyMCwgNTMsIDIyOCwgOTIsIDY1LCAyNDcsIAorICAgIDEzMCwgMjI4LCA5MiwgNjUsIDI1NCwgMTA0LCAyNDQsIDIyMiwgMjUwLCAyMjIsIDY1LCAyNTAsIDE5OSwgMjQ0LCAyMjIsIAorICAgIDI1MCwgMjIyLCA2NSwgNDUsIDc2LCAyLCAzNCwgMjI5LCA0MywgMTcxLCAxMjcsIDY1LCAxNzEsIDkwLCA2NSwgMTcxLCA0MiwgCisgICAgNDUsIDY1LCAxNzEsIDEyNywgNTEsIDY1LCAxNzEsIDkwLCA1MSwgNjUsIDE3MSwgNDIsIDQ1LCA1MSwgNjUsIDE3MSwgMTI3LCAKKyAgICA3NiwgMjQ1LCA5NywgMTM1LCAxNzEsIDkwLCA3NiwgMjQ1LCA5NywgMTM1LCAxNzEsIDEyNywgNTEsIDc2LCAyNDUsIDk3LCAKKyAgICAxMzUsIDE3MSwgOTAsIDUxLCA3NiwgMjQ1LCA5NywgMTM1LCAxNzEsIDkwLCAyMjMsIDIyMywgNjUsIDQzLCA0NCwgMjUyLCAKKyAgICA0NywgNDMsIDQ0LCAyNDgsIDE0MiwgNDMsIDQ0LCAyNDgsIDE0LCA0MywgNDQsIDI0OCwgMTQxLCA0MywgNDQsIDI0NywgCisgICAgMjA2LCA0MywgNDQsIDI0OCwgNzcsIDQzLCA0NCwgMjQ4LCAxMywgNDMsIDQ0LCAyNDgsIDE0MCwgNDMsIDQ0LCAyNDcsIAorICAgIDE3NCwgNDMsIDQ0LCAyNDgsIDQ1LCA0MywgNDQsIDI0NywgMjM3LCA0MywgNDQsIDI0OCwgMTA4LCA0MywgNDQsIDI0NywgCisgICAgMjA1LCA0MywgNDQsIDI0OCwgNzYsIDQzLCA0NCwgMjQ4LCAxMiwgNDMsIDQ0LCAyNDgsIDEzOSwgNDMsIDQ0LCAyNDcsIAorICAgIDE1OCwgNDMsIDQ0LCAyNDgsIDI5LCA0MywgNDQsIDI0NywgMjIxLCA0MywgNDQsIDI0OCwgOTIsIDQzLCA0NCwgMjQ3LCAKKyAgICAxODksIDQzLCA0NCwgMjQ4LCA2MCwgNDMsIDQ0LCAyNDcsIDI1MiwgNDMsIDQ0LCAyNDgsIDEyMywgNDMsIDQ0LCAyNDcsIAorICAgIDE3MywgNDMsIDQ0LCAyNDgsIDQ0LCA0MywgNDQsIDI0NywgMjM2LCA0MywgNDQsIDI0OCwgMTA3LCA0MywgNDQsIDI0NywgCisgICAgMjA0LCA0MywgNDQsIDI0OCwgNzUsIDQzLCA0NCwgMjQ4LCAxMSwgNDMsIDQ0LCAyNDgsIDEzOCwgNDMsIDQ0LCAyNDcsIAorICAgIDE1MCwgNDMsIDQ0LCAyNDgsIDIxLCA0MywgNDQsIDI0NywgMjEzLCA0MywgNDQsIDI0OCwgODQsIDQzLCA0NCwgMjQ3LCAKKyAgICAxODEsIDQzLCA0NCwgMjQ4LCA1MiwgNDMsIDQ0LCAyNDcsIDI0NCwgNDMsIDQ0LCAyNDgsIDExNSwgNDMsIDQ0LCAyNDcsIAorICAgIDE2NSwgNDMsIDQ0LCAyNDgsIDM2LCA0MywgNDQsIDI0NywgMjI4LCA0MywgNDQsIDI0OCwgOTksIDQzLCA0NCwgMjQ3LCAKKyAgICAxOTYsIDQzLCA0NCwgMjQ4LCA2NywgNDMsIDQ0LCAyNDgsIDMsIDQzLCA0NCwgMjQ4LCAxMzAsIDQzLCA0NCwgMjQ3LCAxNTcsIAorICAgIDQzLCA0NCwgMjQ4LCAyOCwgNDMsIDQ0LCAyNDcsIDIyMCwgNDMsIDQ0LCAyNDgsIDkxLCA0MywgNDQsIDI0NywgMTg4LCA0MywgCisgICAgNDQsIDI0OCwgNTksIDQzLCA0NCwgMjQ3LCAyNTEsIDQzLCA0NCwgMjQ4LCAxMjIsIDQzLCA0NCwgMjQ3LCAxNzIsIDQzLCAKKyAgICA0NCwgMjQ4LCA0MywgNDMsIDQ0LCAyNDcsIDIzNSwgNDMsIDQ0LCAyNDgsIDEwNiwgNDMsIDQ0LCAyNDcsIDIwMywgNDMsIAorICAgIDQ0LCAyNDgsIDc0LCA0MywgNDQsIDI0OCwgMTAsIDQzLCA0NCwgMjQ4LCAxMzcsIDQzLCA0NCwgMjQ3LCAxNDYsIDQzLCA0NCwgCisgICAgMjQ4LCAxNywgNDMsIDQ0LCAyNDcsIDIwOSwgNDMsIDQ0LCAyNDgsIDgwLCA0MywgNDQsIDI0NywgMTc3LCA0MywgNDQsIAorICAgIDI0OCwgNDgsIDQzLCA0NCwgMjQ3LCAyNDAsIDQzLCA0NCwgMjQ4LCAxMTEsIDQzLCA0NCwgMjQ3LCAxNjEsIDQzLCA0NCwgCisgICAgMjQ4LCAzMiwgNDMsIDQ0LCAyNDcsIDIyNCwgNDMsIDQ0LCAyNDgsIDk1LCA0MywgNDQsIDI0NywgMTkyLCA0MywgNDQsIAorICAgIDI0OCwgNjMsIDQzLCA0NCwgMjQ3LCAyNTUsIDQzLCA0NCwgMjQ4LCAxMjYsIDQzLCA0NCwgMjQ3LCAxNTMsIDQzLCA0NCwgCisgICAgMjQ4LCAyNCwgNDMsIDQ0LCAyNDcsIDIxNiwgNDMsIDQ0LCAyNDgsIDg3LCA0MywgNDQsIDI0NywgMTg0LCA0MywgNDQsIAorICAgIDI0OCwgNTUsIDQzLCA0NCwgMjQ3LCAyNDcsIDQzLCA0NCwgMjQ4LCAxMTgsIDQzLCA0NCwgMjQ3LCAxNjgsIDQzLCA0NCwgCisgICAgMjQ4LCAzOSwgNDMsIDQ0LCAyNDcsIDIzMSwgNDMsIDQ0LCAyNDgsIDEwMiwgNDMsIDQ0LCAyNDcsIDE5OSwgNDMsIDQ0LCAKKyAgICAyNDgsIDcwLCA0MywgNDQsIDI0OCwgNiwgNDMsIDQ0LCAyNDgsIDEzMywgNDMsIDQ0LCAyNDcsIDE0OSwgNDMsIDQ0LCAyNDgsIAorICAgIDIwLCA0MywgNDQsIDI0NywgMjEyLCA0MywgNDQsIDI0OCwgODMsIDQzLCA0NCwgMjQ3LCAxODAsIDQzLCA0NCwgMjQ4LCA1MSwgCisgICAgNDMsIDQ0LCAyNDcsIDI0MywgNDMsIDQ0LCAyNDgsIDExNCwgNDMsIDQ0LCAyNDcsIDE2NCwgNDMsIDQ0LCAyNDgsIDM1LCAKKyAgICA0MywgNDQsIDI0NywgMjI3LCA0MywgNDQsIDI0OCwgOTgsIDQzLCA0NCwgMjQ3LCAxOTUsIDQzLCA0NCwgMjQ4LCA2NiwgNDMsIAorICAgIDQ0LCAyNDgsIDIsIDQzLCA0NCwgMjQ4LCAxMjksIDQzLCA0NCwgMjQ3LCAxNTYsIDQzLCA0NCwgMjQ4LCAyNywgNDMsIDQ0LCAKKyAgICAyNDcsIDIxOSwgNDMsIDQ0LCAyNDgsIDkwLCA0MywgNDQsIDI0NywgMTg3LCA0MywgNDQsIDI0OCwgNTgsIDQzLCA0NCwgCisgICAgMjQ3LCAyNTAsIDQzLCA0NCwgMjQ4LCAxMjEsIDQzLCA0NCwgMjQ3LCAxNzEsIDQzLCA0NCwgMjQ4LCA0MiwgNDMsIDQ0LCAKKyAgICAyNDcsIDIzNCwgNDMsIDQ0LCAyNDgsIDEwNSwgNDMsIDQ0LCAyNDcsIDIwMiwgNDMsIDQ0LCAyNDgsIDczLCA0MywgNDQsIAorICAgIDI0OCwgOSwgNDMsIDQ0LCAyNDgsIDEzNiwgNDMsIDQ0LCAyNDcsIDE0NCwgNDMsIDQ0LCAyNDgsIDE1LCA0MywgNDQsIDI0NywgCisgICAgMjA3LCA0MywgNDQsIDI0OCwgNzgsIDQzLCA0NCwgMjQ3LCAxNzUsIDQzLCA0NCwgMjQ4LCA0NiwgNDMsIDQ0LCAyNDcsIAorICAgIDIzOCwgNDMsIDQ0LCAyNDgsIDEwOSwgNDMsIDQ0LCAyNDcsIDE1OSwgNDMsIDQ0LCAyNDgsIDMwLCA0MywgNDQsIDI0NywgCisgICAgMjIyLCA0MywgNDQsIDI0OCwgOTMsIDQzLCA0NCwgMjQ3LCAxOTAsIDQzLCA0NCwgMjQ4LCA2MSwgNDMsIDQ0LCAyNDcsIAorICAgIDI1MywgNDMsIDQ0LCAyNDgsIDEyNCwgNDMsIDQ0LCAyNDcsIDE1MSwgNDMsIDQ0LCAyNDgsIDIyLCA0MywgNDQsIDI0NywgCisgICAgMjE0LCA0MywgNDQsIDI0OCwgODUsIDQzLCA0NCwgMjQ3LCAxODIsIDQzLCA0NCwgMjQ4LCA1MywgNDMsIDQ0LCAyNDcsIAorICAgIDI0NSwgNDMsIDQ0LCAyNDgsIDExNiwgNDMsIDQ0LCAyNDcsIDE2NiwgNDMsIDQ0LCAyNDgsIDM3LCA0MywgNDQsIDI0NywgCisgICAgMjI5LCA0MywgNDQsIDI0OCwgMTAwLCA0MywgNDQsIDI0NywgMTk3LCA0MywgNDQsIDI0OCwgNjgsIDQzLCA0NCwgMjQ4LCA0LCAKKyAgICA0MywgNDQsIDI0OCwgMTMxLCA0MywgNDQsIDI0NywgMTQ3LCA0MywgNDQsIDI0OCwgMTgsIDQzLCA0NCwgMjQ3LCAyMTAsIAorICAgIDQzLCA0NCwgMjQ4LCA4MSwgNDMsIDQ0LCAyNDcsIDE3OCwgNDMsIDQ0LCAyNDgsIDQ5LCA0MywgNDQsIDI0NywgMjQxLCA0MywgCisgICAgNDQsIDI0OCwgMTEyLCA0MywgNDQsIDI0NywgMTYyLCA0MywgNDQsIDI0OCwgMzMsIDQzLCA0NCwgMjQ3LCAyMjUsIDQzLCAKKyAgICA0NCwgMjQ4LCA5NiwgNDMsIDQ0LCAyNDcsIDE5MywgNDMsIDQ0LCAyNDgsIDY0LCA0MywgNDQsIDI0OCwgMCwgNDMsIDQ0LCAKKyAgICAyNDgsIDEyNywgNDMsIDQ0LCAyNDcsIDE1NCwgNDMsIDQ0LCAyNDgsIDI1LCA0MywgNDQsIDI0NywgMjE3LCA0MywgNDQsIAorICAgIDI0OCwgODgsIDQzLCA0NCwgMjQ3LCAxODUsIDQzLCA0NCwgMjQ4LCA1NiwgNDMsIDQ0LCAyNDcsIDI0OCwgNDMsIDQ0LCAKKyAgICAyNDgsIDExOSwgNDMsIDQ0LCAyNDcsIDE2OSwgNDMsIDQ0LCAyNDgsIDQwLCA0MywgNDQsIDI0NywgMjMyLCA0MywgNDQsIAorICAgIDI0OCwgMTAzLCA0MywgNDQsIDI0NywgMjAwLCA0MywgNDQsIDI0OCwgNzEsIDQzLCA0NCwgMjQ4LCA3LCA0MywgNDQsIDI0OCwgCisgICAgMTM0LCA0MywgNDQsIDI0NywgMTQ1LCA0MywgNDQsIDI0OCwgMTYsIDQzLCA0NCwgMjQ3LCAyMDgsIDQzLCA0NCwgMjQ4LCAKKyAgICA3OSwgNDMsIDQ0LCAyNDcsIDE3NiwgNDMsIDQ0LCAyNDgsIDQ3LCA0MywgNDQsIDI0NywgMjM5LCA0MywgNDQsIDI0OCwgCisgICAgMTEwLCA0MywgNDQsIDI0NywgMTYwLCA0MywgNDQsIDI0OCwgMzEsIDQzLCA0NCwgMjQ3LCAyMjMsIDQzLCA0NCwgMjQ4LCAKKyAgICA5NCwgNDMsIDQ0LCAyNDcsIDE5MSwgNDMsIDQ0LCAyNDgsIDYyLCA0MywgNDQsIDI0NywgMjU0LCA0MywgNDQsIDI0OCwgCisgICAgMTI1LCA0MywgNDQsIDI0NywgMTUyLCA0MywgNDQsIDI0OCwgMjMsIDQzLCA0NCwgMjQ3LCAyMTUsIDQzLCA0NCwgMjQ4LCAKKyAgICA4NiwgNDMsIDQ0LCAyNDcsIDE4MywgNDMsIDQ0LCAyNDgsIDU0LCA0MywgNDQsIDI0NywgMjQ2LCA0MywgNDQsIDI0OCwgCisgICAgMTE3LCA0MywgNDQsIDI0NywgMTY3LCA0MywgNDQsIDI0OCwgMzgsIDQzLCA0NCwgMjQ3LCAyMzAsIDQzLCA0NCwgMjQ4LCAKKyAgICAxMDEsIDQzLCA0NCwgMjQ3LCAxOTgsIDQzLCA0NCwgMjQ4LCA2OSwgNDMsIDQ0LCAyNDgsIDUsIDQzLCA0NCwgMjQ4LCAxMzIsIAorICAgIDQzLCA0NCwgMjQ3LCAxNDgsIDQzLCA0NCwgMjQ4LCAxOSwgNDMsIDQ0LCAyNDcsIDIxMSwgNDMsIDQ0LCAyNDgsIDgyLCA0MywgCisgICAgNDQsIDI0NywgMTc5LCA0MywgNDQsIDI0OCwgNTAsIDQzLCA0NCwgMjQ3LCAyNDIsIDQzLCA0NCwgMjQ4LCAxMTMsIDQzLCAKKyAgICA0NCwgMjQ3LCAxNjMsIDQzLCA0NCwgMjQ4LCAzNCwgNDMsIDQ0LCAyNDcsIDIyNiwgNDMsIDQ0LCAyNDgsIDk3LCA0MywgNDQsIAorICAgIDI0NywgMTk0LCA0MywgNDQsIDI0OCwgNjUsIDQzLCA0NCwgMjQ4LCAxLCA0MywgNDQsIDI0OCwgMTI4LCA0MywgNDQsIDI0NywgCisgICAgMTU1LCA0MywgNDQsIDI0OCwgMjYsIDQzLCA0NCwgMjQ3LCAyMTgsIDQzLCA0NCwgMjQ4LCA4OSwgNDMsIDQ0LCAyNDcsIAorICAgIDE4NiwgNDMsIDQ0LCAyNDgsIDU3LCA0MywgNDQsIDI0NywgMjQ5LCA0MywgNDQsIDI0OCwgMTIwLCA0MywgNDQsIDI0NywgCisgICAgMTcwLCA0MywgNDQsIDI0OCwgNDEsIDQzLCA0NCwgMjQ3LCAyMzMsIDQzLCA0NCwgMjQ4LCAxMDQsIDQzLCA0NCwgMjQ3LCAKKyAgICAyMDEsIDQzLCA0NCwgMjQ4LCA3MiwgNDMsIDQ0LCAyNDgsIDgsIDQzLCA0NCwgMjQ4LCAxMzUsIDkwLCAyMjAsIDIwNiwgNzYsIAorICAgIDIsIDY5LCA5MiwgOTAsIDIyMCwgMjA2LCA3NiwgMiwgNTEsIDY5LCA5MiwgMTI3LCA1MSwgNzYsIDIsIDY5LCA5MiwgOTAsIAorICAgIDUxLCA3NiwgMiwgNjksIDkyLCA0MiwgNDUsIDUxLCA3NiwgMiwgNjksIDkyLCA5MCwgMjIwLCAyMDYsIDc2LCAyNDUsIDk3LCAKKyAgICAxMzUsIDEyNywgNTEsIDc2LCAyNDUsIDk3LCAxMzUsIDkwLCA1MSwgNzYsIDI0NSwgOTcsIDEzNSwgMjQ3LCAxMzAsIDc2LCAKKyAgICAyLCAxODYsIDkyLCAyMjAsIDUzLCA3NiwgMiwgMTg2LCA5MiwgMjIwLCA1MywgMjIxLCA3OCwgNjUsIDI0NywgMTMwLCAyMjEsIAorICAgIDc4LCA2NSwgMTI3LCA1MSwgMjQ5LCAxNDcsIDY1LCA5MCwgNTEsIDI0OSwgMTQ3LCA2NSwgMTI3LCAyMjEsIDc4LCAyNDksIAorICAgIDE0NywgNjUsIDkwLCAyMjEsIDc4LCAyNDksIDE0NywgNjUsIDkwLCAyMjAsIDIwNiwgMjIxLCA3OCwgMjQ5LCAxNDcsIDY1LCAKKyAgICA5MCwgNzYsIDIsIDI0NywgMTQzLCAyMjMsIDE0NiwgMjIwLCA1MywgNzYsIDE5OSwgMTM1LCAyNDcsIDEzMCwgNzYsIDE5OSwgCisgICAgMTM1LCA5MCwgNzYsIDIsIDIyMiwgMTM2LCAyLCA2OSwgOTIsIDkwLCA3NiwgMiwgMjIyLCAxMzYsIDIsIDUxLCA2OSwgOTIsIAorICAgIDkwLCAyMjAsIDIwNiwgNzYsIDIsIDIyMiwgMTM1LCA5MCwgMjIwLCAyMDYsIDc2LCAyLCAyMjIsIDEzNiwgMiwgNjksIDkyLCAKKyAgICA5MCwgMjIwLCAyMDYsIDc2LCAyLCAyMjIsIDEzNiwgMiwgNTEsIDY5LCA5MiwgMTI3LCAyNTQsIDIyLCA5MCwgMjU0LCAyMiwgCisgICAgMTI3LCA1MSwgMjU0LCAyMiwgOTAsIDUxLCAyNTQsIDIyLCAxMjcsIDc2LCAxOTksIDg0LCAyNDksIDQsIDkwLCA3NiwgMTk5LCAKKyAgICA4NCwgMjQ5LCA0LCAxMjcsIDc2LCAyNDUsIDk3LCAyNTIsIDIwMSwgMTk5LCA4NCwgMjQ5LCA0LCA5MCwgNzYsIDI0NSwgOTcsIAorICAgIDI1MiwgMjAxLCAxOTksIDg0LCAyNDksIDQsIDIzMSwgMTg3LCAyMTgsIDIxNywgMjUsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgCisgICAgMjMxLCAxODcsIDI0NywgNSwgMjUsIDIyNCwgNiwgMjE4LCAyMTcsIDY1LCAyMzEsIDE4NywgMjE4LCAyMTcsIDc2LCAyLCAKKyAgICA5NiwgMjMxLCAxODcsIDI0NywgNSwgNzYsIDIsIDk2LCAyMjQsIDYsIDI0NywgNSwgNzYsIDIsIDk2LCAyMjQsIDYsIDIxOCwgCisgICAgMjE3LCA3NiwgMiwgOTYsIDIzMSwgMTg3LCAyMTgsIDIxNywgNzYsIDI1LCAyMzEsIDE4NywgMjQ3LCA1LCA2NSwgMjMxLCAKKyAgICAxODcsIDI0NywgNSwgNzYsIDI1LCAyMjQsIDYsIDI0NywgNSwgNjUsIDIyNCwgNiwgMjQ3LCA1LCA3NiwgMjUsIDIyNCwgNiwgCisgICAgMjE4LCAyMTcsIDY1LCAyMjQsIDYsIDIxOCwgMjE3LCA3NiwgMjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNjUsIDIyNywgODgsIAorICAgIDI0OSwgMTEsIDI1MCwgOTUsIDI0NSwgMjQ3LCAyNDksIDEwLCAyNDUsIDI0NywgMjQ5LCAxMSwgMjUwLCA5NSwgMjI3LCA4OCwgCisgICAgMjQ5LCAxMCwgMjI0LCA2LCAyNDcsIDUsIDc2LCAyNTAsIDk1LCAyMzEsIDE4NywgMjQ3LCA1LCA2NSwgMjMxLCAxODcsIAorICAgIDI0NywgNSwgNzYsIDI1MCwgOTUsIDIyNCwgNiwgMjQ3LCA1LCA2NSwgMjQ1LCAyNDcsIDI0OSwgMTEsIDI1MCwgOTUsIDIzMSwgCisgICAgMTg3LCAyNDcsIDUsIDY1LCAyMjcsIDg4LCAyNDksIDExLCAyNTAsIDk1LCAyMjQsIDYsIDI0NywgNSwgNjUsIDIzMSwgMTg3LCAKKyAgICAyNDcsIDUsIDc2LCAyNTAsIDk1LCAyMzEsIDE4NywgMjE4LCAyMTcsIDY1LCAyMzEsIDE4NywgMjE4LCAyMTcsIDc2LCAyNTAsIAorICAgIDk1LCAyMzEsIDE4NywgMjQ3LCA1LCA2NSwgMjE4LCAyMzcsIDc2LCAyMjksIDI4LCAyNDgsIDIwOCwgMjI3LCAxMDksIDc2LCAKKyAgICAyMjksIDI4LCA5MCwgMjIyLCAxNSwgMjUwLCA3MiwgMjIwLCA1MiwgNzYsIDIyOSwgMjgsIDkwLCAyMjIsIDE1LCAyNTAsIAorICAgIDcyLCAyNDcsIDEyOSwgNzYsIDIyOSwgMjgsIDI0NywgMTMwLCAyMjIsIDE1LCAyNTAsIDcyLCAyMzUsIDEwNywgNzYsIDIyOSwgCisgICAgMjgsIDI0NywgMTMwLCAyMjIsIDE1LCAyNTAsIDcyLCAyMjcsIDEwMCwgMjI3LCAxMDMsIDI1NCwgNTIsIDI1MCwgMTk5LCAKKyAgICA2NSwgMjM1LCAxMTAsIDI1NCwgNTIsIDI1NCwgMTA0LCA2NSwgMjIxLCAxMjAsIDI1NCwgNTIsIDI1NCwgMTA0LCA2NSwgCisgICAgMjUyLCAyOSwgMjU0LCA1MiwgMjU0LCAxMDQsIDY1LCAyMjEsIDEyMCwgMjU0LCA1MiwgMjUwLCAxOTksIDc2LCAyLCAyMzMsIAorICAgIDE1NCwgMjIxLCAxMjAsIDI1NCwgNTIsIDI1NCwgMTA0LCA3NiwgMiwgMjI5LCA0MywgMjM0LCAyMzcsIDQ1LCAyMjUsIDY5LCAKKyAgICAyNTAsIDE5OSwgNjUsIDIzNCwgMjM3LCA0MiwgMjI1LCA2OSwgMjU0LCAxMDQsIDY1LCAyNTQsIDEwNCwgMjUwLCAxOTcsIAorICAgIDI1MCwgMjIyLCA2NSwgMjUwLCAxOTksIDI1MCwgMTk3LCAyNTAsIDIyMiwgNjUsIDkwLCA3NiwgNzEsIDIyNCwgMTkyLCAKKyAgICAxMjcsIDY1LCAxMjcsIDc2LCA3MSwgMjI0LCAxOTIsIDkwLCA2NSwgMjI0LCAxOTIsIDkwLCA3NiwgNzEsIDEyNywgNjUsIAorICAgIDkwLCA3NiwgMiwgODgsIDU2LCAxMjcsIDc2LCAyLCA4OCwgNTYsIDkwLCA3NiwgMjIxLCAyMjUsIDIxOCwgMTUxLCA0MiwgCisgICAgNDUsIDc2LCAyMjEsIDIyNSwgMywgMjUwLCAyMjEsIDIyMCwgNTMsIDIyMCwgMjA2LCA3NiwgMjQ1LCA5NywgMywgMjUwLCAKKyAgICAyMjEsIDQyLCAxOTIsIDEwOCwgNDUsIDE5MiwgMTEzLCAyNDMsIDE3NiwgNDIsIDE5MiwgMTEzLCA0NSwgMTkyLCAxMDgsIAorICAgIDI0MywgMTc2LCAxMDgsIDE5MiwgNDUsIDExMywgMTkyLCA0MiwgMjQzLCAxNzYsIDEwOCwgMTkyLCA0MiwgMTEzLCAxOTIsIAorICAgIDQ1LCAyNDMsIDE3NiwgNDIsIDE5MiwgMTA4LCA0NSwgMTkyLCAxMDgsIDI0MywgMTc2LCAxMDgsIDE5MiwgNDUsIDExMywgCisgICAgMTkyLCA0NSwgMjQzLCAxNzYsIDQyLCAxOTIsIDExMywgNDUsIDE5MiwgMTEzLCAyNDMsIDE3NiwgMTA4LCAxOTIsIDQyLCAKKyAgICAxMTMsIDE5MiwgNDIsIDI0MywgMTc2LCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDEwOCwgMTk5LCAxMzUsIDkwLCAyNDMsIAorICAgIDE3NywgMiwgMTkyLCAxMDgsIDE5OSwgMTM1LCAyMjAsIDUzLCAyNDMsIDE3NywgMiwgMTkyLCA0NSwgMTk5LCAxMzUsIDI0NywgCisgICAgMTMwLCAyNDMsIDE3NywgMiwgMTkyLCA0NSwgMTk5LCAxMzUsIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCAxOTksIAorICAgIDEzNSwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIDExMywgMTk5LCAxMzUsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDQyLCAKKyAgICAxOTksIDEzNSwgMjQ3LCAxMzAsIDI0MywgMTc3LCAyLCAxOTIsIDQyLCAxOTksIDEzNSwgMTI3LCAyNDMsIDE3NywgMiwgCisgICAgMTkyLCAxMDgsIDI0NSwgOTcsIDEzNSwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIDEwOCwgMjQ1LCA5NywgMTM1LCAyMjAsIDUzLCAKKyAgICAyNDMsIDE3NywgMiwgMTkyLCA0NSwgMjQ1LCA5NywgMTM1LCAyNDcsIDEzMCwgMjQzLCAxNzcsIDIsIDE5MiwgNDUsIDI0NSwgCisgICAgOTcsIDEzNSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAxMTMsIDI0NSwgOTcsIDEzNSwgOTAsIDI0MywgMTc3LCAyLCAxOTIsIAorICAgIDExMywgMjQ1LCA5NywgMTM1LCAyMjAsIDUzLCAyNDMsIDE3NywgMiwgMTkyLCA0MiwgMjQ1LCA5NywgMTM1LCAyNDcsIDEzMCwgCisgICAgMjQzLCAxNzcsIDIsIDE5MiwgNDIsIDI0NSwgOTcsIDEzNSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCAxMjcsIAorICAgIDI0MywgMTc3LCAyLCAxOTIsIDI0NywgMTMyLCAyMjAsIDUzLCAyNDMsIDE3NywgMiwgMTkyLCA0MiwgMjUyLCAxMDYsIDIyMCwgCisgICAgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDIyNywgMTA5LCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTA4LCA3MSwgOTAsIDI0MywgCisgICAgMTc3LCAyLCAxOTIsIDI0NywgMTMyLCAyNDcsIDEzMCwgMjQzLCAxNzcsIDIsIDE5MiwgNDIsIDI1MiwgMTA2LCAyNDcsIAorICAgIDEzMCwgMjQzLCAxNzcsIDIsIDE5MiwgMjI3LCAxMDksIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgMTA4LCA3MSwgOTAsIDI0MywgCisgICAgMTc3LCAyLCAxOTIsIDIyMCwgNjMsIDEyNywgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCA3MSwgOTAsIDI0MywgMTc3LCAyLCAKKyAgICAxOTIsIDI0NywgMTMyLCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTA4LCA3MSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAyMjAsIAorICAgIDYzLCA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCA3MSwgMTI3LCAyNDMsIDE3NywgMiwgMTkyLCAyNDcsIDEzMiwgMTI3LCAKKyAgICAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCAxNzEsIDI0OSwgMTQ2LCAxMjcsIDI0MywgMTc3LCAyLCAxOTIsIDExMywgCisgICAgMjUyLCAxMTgsIDE3MSwgMjQ5LCAxNDYsIDkwLCAyNDMsIDE3NywgMiwgMTkyLCAxMDgsIDcxLCAxNzEsIDI0OSwgMTQ2LCAKKyAgICA5MCwgMjQzLCAxNzcsIDIsIDE5MiwgMTEzLCAyNTIsIDExOCwgMTcxLCAyNDksIDE0NiwgMjIwLCA1MywgMjQzLCAxNzcsIDIsIAorICAgIDE5MiwgNDIsIDI1MiwgMTA2LCAyNDcsIDEzMCwgMjQzLCAxNzcsIDIsIDE5MiwgMjI3LCAxMDksIDI0NywgMTMwLCAyNDMsIAorICAgIDE3NywgMiwgMTkyLCA0MiwgMjUyLCAxMDYsIDIyMCwgNTMsIDI0MywgMTc3LCAyLCAxOTIsIDIyNywgMTA5LCA0NSwgNTEsIAorICAgIDc2LCAyLCAyMjcsIDU1LCAyNDMsIDE1OSwgMjQ2LCAxNTQsIDUsIDcxLCA5MCwgNjUsIDIyMSwgMTgwLCAyMzAsIDExMywgCisgICAgNzEsIDkwLCA2NSwgMTI3LCA3NiwgNzEsIDIyMSwgMTgwLCAyMzAsIDExMiwgOTAsIDc2LCA3MSwgMjIxLCAxODAsIDIzMCwgCisgICAgMTEyLCA5MCwgNzYsIDcxLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIzNSwgODcsIDcxLCAxMjcsIDY1LCAxMjcsIDc2LCAyMjEsIAorICAgIDIyNSwgMjM1LCA4NiwgMjQ0LCAzMCwgNzEsIDkwLCA2NSwgMjIzLCA5MywgNzEsIDkwLCA2NSwgMTI3LCA3NiwgMjIxLCAKKyAgICAyMjUsIDIyMywgOTIsIDIyMywgNTgsIDcxLCAxMjcsIDY1LCA0MiwgMjQ1LCAxNzcsIDIyMiwgMTM1LCA0NSwgMjQ1LCAxNzcsIAorICAgIDIyMiwgMTM1LCAxMDgsIDI0NSwgMTc3LCAyMjIsIDEzNSwgMTEzLCAyNDUsIDE3NywgMjIyLCAxMzUsIDIyMSwgNzgsIDY5LCAKKyAgICAyNTIsIDIwMSwgMjQ5LCA2NywgMjE3LCAxNTgsIDE2NSwgMjIzLCAyMzQsIDIxNywgMTU4LCAxNjUsIDIyMCwgMTk4LCAyNTAsIAorICAgIDE3NSwgNDIsIDY3LCAyNTAsIDc5LCAxMTUsIDQ1LCA2NywgMjUwLCA3OSwgMTE1LCA0MiwgNjcsIDIyOSwgMjI5LCA0NSwgCisgICAgNjcsIDIyOSwgMjI5LCAyMTcsIDE1OCwgMTY1LCA0MiwgMjM3LCAyMzcsIDExNSwgMjE3LCAxNTgsIDE2NSwgNDUsIDIzNywgCisgICAgMjM3LCAxMTUsIDIxNywgMTU4LCAxNjUsIDQyLCAyNTIsIDcxLCAxMTUsIDIxNywgMTU4LCAxNjUsIDQ1LCAyNTIsIDcxLCAKKyAgICAxMTUsIDQyLCA0MCwgMjUyLCAxOCwgMiwgMjIwLCA4MSwgNDUsIDQwLCAyNTIsIDE4LCAyLCAyMjAsIDgxLCA0MiwgNDAsIAorICAgIDI1MiwgMTgsIDIsIDIyMSwgMjAzLCAyMzcsIDIyNCwgMjIxLCAxMjAsIDI1MCwgMTIzLCA0NSwgNDAsIDI1MiwgMTgsIDIsIAorICAgIDIyMSwgMjAzLCAyMzcsIDIyNCwgMjUyLCAyOSwgMjUwLCAxMjMsIDQyLCA0MCwgMjUyLCAxOCwgMiwgMjIxLCAyMDMsIDIzNywgCisgICAgMjI0LCAyNTIsIDI5LCAyNTAsIDEyMywgNDUsIDQwLCAyNTIsIDE4LCAyLCAyMjEsIDIwMywgMjM3LCAyMjQsIDIyMSwgMTIwLCAKKyAgICAyNTAsIDEyMywgNDIsIDI1NCwgMTIwLCAyNTIsIDE4LCAyLCAyNDgsIDE0NSwgNDUsIDI1NCwgMTIwLCAyNTIsIDE4LCAyLCAKKyAgICAyNDgsIDE0NSwgNDIsIDI1NCwgNTIsIDIzNSwgODcsIDExNSwgNDUsIDI1NCwgNTIsIDI0NCwgMzAsIDExNSwgNTEsIDQyLCAKKyAgICAyNTQsIDUyLCAyNDQsIDMwLCAxMTUsIDUxLCA0NSwgMjU0LCA1MiwgMjM1LCA4NywgMTE1LCA0MiwgODQsIDIyMSwgMTE0LCAKKyAgICAyMjQsIDIzNiwgMTE1LCA0NSwgODQsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAyNDcsIDE0MywgMjQ1LCAyMTQsIDY5LCAKKyAgICAyMTcsIDMzLCAyMzUsIDQzLCAyMzQsIDIyLCAyNTQsIDEyMCwgMjMwLCAxMTQsIDIzNSwgMTE1LCA0NSwgMjU0LCAxMjAsIAorICAgIDIxOSwgMTc3LCAyLCAyMjMsIDIyNywgMjM0LCAyMiwgNDUsIDI1NCwgMTIwLCAyLCAyNDgsIDE0NSwgMjU0LCAxMjAsIDIsIAorICAgIDIyNiwgMjM1LCAyMzcsIDE5MCwgMjU0LCAyNDgsIDI1NCwgMTE5LCAyMjMsIDI0NSwgMjU0LCAxMjAsIDIzMCwgMTE0LCAKKyAgICAyMzUsIDExNSwgMjIzLCAyNDUsIDI1NCwgMTIwLCAyMzAsIDExNCwgMjIwLCA2MywgMjE1LCAyNTQsIDExOSwgMjEwLCAyNTQsIAorICAgIDExOSwgMjU0LCAxMjAsIDIsIDIyMCwgODEsIDIxMCwgMjU0LCAxMjAsIDIsIDIyMCwgODEsIDIzMCwgMTc3LCAyNTQsIDEyMCwgCisgICAgMjMwLCAxMTQsIDIyMCwgNjMsIDIzMCwgMTc3LCAyNTQsIDEyMCwgMjMwLCAxMTQsIDI0NywgMTMyLCAyMzQsIDIyLCAyNTQsIAorICAgIDEyMCwgMiwgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgNzYsIDIyOSwgMjgsIDEwOCwgMjUsIDIyNywgCisgICAgMTA5LCAyMzQsIDIyLCAyNTQsIDEyMCwgMiwgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgNzYsIAorICAgIDIyOSwgMjgsIDEwOCwgMjUsIDIzNSwgMTE1LCAyMzQsIDIyLCAyNTQsIDEyMCwgMiwgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgCisgICAgMTg3LCAyMzcsIDIyNCwgNzYsIDIyOSwgMjgsIDExMywgMjUsIDIyNywgMTA5LCAyMzQsIDIyLCAyNTQsIDEyMCwgMiwgMjMwLCAKKyAgICAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgNzYsIDIyOSwgMjgsIDExMywgMjUsIDIzNSwgMTE1LCAyMzQsIAorICAgIDIyLCAyNTQsIDEyMCwgMiwgMjMwLCAxMTksIDI1NCwgMzIsIDI0NiwgMTg3LCAyMzcsIDIyNCwgNzYsIDIyOSwgMjgsIDQ1LCAKKyAgICAyNSwgMjIwLCA2MywgMjM0LCAyMiwgMjU0LCAxMjAsIDIsIDIzMCwgMTE5LCAyNTQsIDMyLCAyNDYsIDE4NywgMjM3LCAyMjQsIAorICAgIDc2LCAyMjksIDI4LCA0MiwgMjUsIDIyMCwgNjMsIDIzNCwgMjIsIDI1NCwgMTIwLCAyLCAyMzAsIDExOSwgMjU0LCAzMiwgCisgICAgMjQ2LCAxODcsIDIzNywgMjI0LCA3NiwgMjI5LCAyOCwgNDUsIDI1LCAyNDcsIDEzMiwgMjM0LCAyMiwgMjU0LCAxMjAsIDIsIAorICAgIDIzMCwgMTE5LCAyNTQsIDMyLCAyNDYsIDE4NywgMjM3LCAyMjQsIDc2LCAyMjksIDI4LCA0MiwgMjUsIDI0NywgMTMyLCAKKyAgICAyMTAsIDI0NiwgMTk5LCAyMjUsIDQ1LCAyNDYsIDE5OSwgMjI1LCA0NiwgMiwgMjMwLCA3NywgMjQ2LCAxOTksIDIyNSwgNDYsIAorICAgIDIsIDMsIDI1MCwgMjIyLCA1MCwgMjQ2LCAxOTksIDIyNSwgNDYsIDIsIDQ1LCA3NiwgNTAsIDI0NiwgMTk5LCAyMjUsIDQ2LCAKKyAgICAyLCA0MiwgNzYsIDUwLCAyNTAsIDIyMiwgMiwgMTg2LCAxMzUsIDM0LCA2OSwgMTM1LCAzNCwgMjI5LCAyMzMsIDM0LCAyMjcsIAorICAgIDE2MCwgMjI0LCAxNywgMzQsIDIyOSwgMTYwLCAyNTAsIDIyMiwgMjQ4LCAxOTIsIDI1MSwgMjEzLCAxODYsIDI1MiwgMjAxLCAKKyAgICAyNSwgMjIxLCAxMjAsIDE0NCwgMjQ4LCAxOTIsIDI1MSwgMjEzLCA2OSwgMTM1LCAyNTAsIDIyMiwgMiwgMjIzLCA2MCwgCisgICAgMjE4LCAxNTEsIDM0LCAyNTQsIDEwMywgMjQ4LCAxODgsIDU1LCAxMDgsIDc2LCAyMjEsIDIyNSwgMjUwLCAyMjEsIDM0LCAKKyAgICA2NywgMjUxLCAyNDEsIDM0LCAyNTEsIDI0MSwgMzQsIDIzNSwgODYsIDM0LCAyNDQsIDI5LCAyNTAsIDIyMiwgMiwgMywgCisgICAgMjUwLCAyMjIsIDE5OSwgMjIyLCAyMywgMjI3LCAxMDksIDI1MCwgMjIyLCAyLCAxMjQsIDE4NiwgMjIzLCAxMDgsIDE5OSwgCisgICAgMjIyLCAyMywgMjI3LCAxMDksIDIwNCwgMjI3LCA4OCwgMjQ5LCAxMSwgMjI0LCA1NSwgMjA0LCAyNDUsIDI0NywgMjQ5LCAKKyAgICAxMSwgMjI0LCA1NSwgMjA0LCAyNTMsIDI1MSwgMjA0LCAzLCAyNTAsIDIyMSwgMjA0LCAyMjMsIDIyNywgMTI0LCAyMzcsIAorICAgIDU2LCAyMjMsIDIyNSwgMjIxLCA5MSwgMiwgNjEsIDUwLCAyMjEsIDkxLCAyLCAyMjAsIDgxLCAyMjYsIDIzNSwgMjM3LCAKKyAgICAyMjQsIDIyMSwgOTAsIDIyMSwgOTEsIDIsIDIyNSwgNTIsIDI1MywgMjQ1LCAyNTIsIDI4LCA0NSwgMjIxLCA5MSwgNzEsIAorICAgIDQyLCAyMjEsIDkwLCA0MiwgMjIxLCA5MSwgMjUyLCAxMDYsIDY5LCAxMzUsIDY5LCAyNTIsIDIwMSwgMjUyLCAxMDYsIDQ1LCAKKyAgICAyMjEsIDkwLCAyNTIsIDIzLCAyLCA0MiwgMTQ0LCAyNTIsIDUzLCAyNTIsIDIzLCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCA4NCwgCisgICAgMjUyLCAyMiwgMjcsIDIsIDQyLCAxNDQsIDI1MiwgNTMsIDI3LCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCA2NywgMjQyLCAxODMsIAorICAgIDg0LCAyNDIsIDE4MywgNDIsIDIxOCwgMTk4LCAyNDUsIDIxNCwgNDUsIDIxOCwgMTk4LCAyNDUsIDIxNCwgNDIsIDUxLCAKKyAgICAyMTgsIDE5OCwgMjQ1LCAyMTQsIDQ1LCA1MSwgMjE4LCAxOTgsIDI0NSwgMjE0LCAyMzcsIDIxOCwgMjM3LCAyMDcsIDIyMSwgCisgICAgMjAxLCAxMDQsIDIzNywgMjA3LCAyMzcsIDIwOCwgMjMyLCAxMzgsIDIsIDY5LCAxMzUsIDI0NywgMTM3LCAyMzMsIDg3LCAKKyAgICA0MCwgMiwgMjUwLCAxMzUsIDIzMCwgODEsIDIzNywgMjE2LCAyNTQsIDEzLCAyMjQsIDE2NiwgMjI4LCAyMjksIDI0NiwgCisgICAgMTU0LCA1LCAyNSwgMjI0LCA1NywgMjI5LCAyMzMsIDI0NiwgMTU0LCA1LCAyNSwgMjI0LCA1NywgMjI5LCAyMzQsIDIsIAorICAgIDIyMSwgMTgwLCA1MCwgMjQyLCA1OSwgMTk5LCAyNSwgMjI0LCA1NywgMjI5LCAyMzMsIDI0NCwgNzUsIDIyMywgMTU1LCAKKyAgICAyMjIsIDEyLCAyNDcsIDEzMSwgMjIxLCA5MSwgMiwgNDIsIDE0NCwgMjUyLCA1MywgMjQ3LCAxMzEsIDIyMSwgOTEsIDIsIAorICAgIDQ1LCAxNDQsIDI1MiwgNTMsIDg0LCAyNDksIDUsIDIsIDExMywgNjUsIDg0LCAyMzQsIDIzNCwgNjcsIDI1MCwgMjIyLCAyLCAKKyAgICAxMTMsIDY1LCA4NCwgMjUwLCAyMjIsIDIsIDExMywgNjUsIDI0NiwgMTQxLCA2NywgMjIzLCAyMjcsIDI0NiwgMTQxLCA4NCwgCisgICAgMjIzLCAyMjcsIDI0NiwgMTQxLCA2NywgMjQ5LCA0LCAyNDYsIDE0MSwgODQsIDI0OSwgNCwgMjQ2LCAxNDEsIDY3LCAyNTAsIAorICAgIDIyMSwgMjQ2LCAxNDEsIDg0LCAyNTAsIDIyMSwgMjI3LCAxNSwgMjI3LCAxNjAsIDIyNCwgMTgsIDIzMCwgMTEyLCAyMjQsIAorICAgIDE4LCAyLCAyMzAsIDc3LCAyMjcsIDE2MCwgMjI0LCAxOCwgMiwgMTg2LCA5MiwgMjUyLCA3NiwgMjI0LCAxNywgMjUyLCA3NiwgCisgICAgMjI3LCAxNjAsIDIyNCwgMTcsIDUxLCAyMjksIDQzLCAyMjEsIDc4LCAyMjksIDQzLCAyMzUsIDExMiwgMjUwLCA3MywgMjU0LCAKKyAgICAxMjAsIDExNSwgMjI3LCAxMDYsIDI1MCwgNzMsIDI1NCwgMTIwLCAxMTUsIDIyMSwgMTcxLCAyMzMsIDE1MiwgMjMzLCAzMywgCisgICAgMzQsIDYxLCAyMzAsIDExMiwgMjMzLCAzMywgMzQsIDg4LCAyMzAsIDExMiwgMjMzLCAzMywgMzQsIDI3LCAyMzAsIDExMiwgCisgICAgMjMzLCAzMywgMjIwLCA3NSwgMjMwLCAxMTMsIDIsIDI0OCwgMTQ1LCAyMzMsIDMzLCAyMjAsIDc1LCAyMzAsIDExMywgMiwgCisgICAgMjI5LCA0MywgMjMzLCAzMywgNDAsIDIzNywgMTc1LCAyMzAsIDExMiwgMjMzLCAzMywgNDAsIDIyMCwgNzUsIDIzMCwgMTEyLCAKKyAgICAxMjQsIDIzNSwgNywgMjUsIDIzMCwgMTEyLCAxMjQsIDIzNSwgNywgMTU2LCAyMzAsIDExMiwgMjMzLCAzMywgMjcsIDIzMCwgCisgICAgMTEyLCAyMzMsIDEzMSwgMTI0LCAyMjMsIDc0LCAyMjMsIDcyLCAyLCAyMzcsIDE4NiwgMjI4LCA5MiwgMjM3LCAxODcsIAorICAgIDIzMCwgMTEyLCAyNDUsIDE4MSwgMjI5LCAyMjUsIDIzNywgMTg2LCAyMzcsIDE4NywgMiwgNTEsIDkyLCAyMzcsIDE4NywgCisgICAgMjUzLCAyMTcsIDIsIDIyNCwgNTUsIDI1MCwgMjE4LCAyNDUsIDg3LCAyNTQsIDEwNCwgMjM3LCAxODQsIDIzNSwgNDQsIAorICAgIDIzNywgMTg1LCAyLCAyMjcsIDIwNywgMjI5LCAyMTIsIDI1NCwgMjksIDIyOSwgMjQsIDIzNSwgNDQsIDIzNywgMTg1LCAyLCAKKyAgICAyMjUsIDY5LCAyMjksIDIxMiwgMjU0LCAyOSwgMjI5LCAyNCwgMjM1LCA0NCwgMjM3LCAxODUsIDIxMiwgMjM3LCAyMTksIAorICAgIDIyMiwgMjMsIDIyOSwgMjQsIDIzNywgMTg3LCAyNTQsIDI5LCAxMTIsIDIyOSwgMzIsIDIzMCwgMTEyLCAyMjgsIDg2LCAKKyAgICAyMzcsIDE4NywgMjMwLCAxMTIsIDIzNywgMTg3LCAyLCAxMjcsIDc2LCAyLCA5NiwgMjM3LCAxODcsIDIsIDI3LCA1NSwgCisgICAgMjM3LCAxODcsIDIsIDIzNywgMTc0LCAyMzcsIDE4NywgMiwgMjIwLCA3NCwgMjM3LCAxODcsIDIsIDIzMCwgNzcsIDIzNywgCisgICAgMTg3LCAyLCAyMjAsIDgxLCAyMzcsIDU3LCAyMzUsIDE0NiwgNDIsIDIyMSwgOTEsIDIzMCwgMTEyLCAyMTcsIDE1OCwgMTY1LCAKKyAgICAyMjYsIDEwOSwgMjUwLCAxNTksIDIxNywgMTU4LCAxNjUsIDIyNiwgMTA5LCAyMjksIDY5LCAyMTcsIDE1OCwgMTY1LCAyMjYsIAorICAgIDEwOSwgMjI4LCAyMjYsIDg4LCA1LCAyLCAzLCAyNTAsIDIyMiwgNTAsIDg4LCA1LCAyLCAyNTAsIDIxNywgMjU1LCAxLCA1MCwgCisgICAgODgsIDUsIDIsIDIyMSwgMTgwLCA1MCwgODgsIDUsIDIsIDYxLCA1NiwgODgsIDUsIDIsIDIyMSwgMTgwLCA1NiwgODgsIDUsIAorICAgIDIsIDIyMywgOTQsIDEwMywgODgsIDUsIDIsIDg0LCAyMjEsIDkwLCAyMzMsIDE1NSwgNSwgMiwgMjUwLCAxNjksIDUwLCAKKyAgICAyMzMsIDE1NSwgNSwgMiwgNjEsIDU2LCAyMzMsIDE1NSwgNSwgMiwgMjQ1LCAyNDcsIDI0OCwgMTQzLCAyMzMsIDE1NSwgNSwgCisgICAgMiwgMjI3LCA4OCwgMjQ4LCAxNDMsIDg4LCA1LCAyMzcsIDIyNCwgNDIsIDE0NCwgMjUwLCAyMjEsIDg4LCA1LCAyMzcsIAorICAgIDIyNCwgNDUsIDE0NCwgMjUwLCAyMjEsIDIxOSwgMTY0LCAxNTYsIDI1MCwgMTAxLCAyMjgsIDIyOSwgMjMzLCA4NCwgNSwgMiwgCisgICAgNjEsIDUwLCAyMzMsIDg0LCA1LCAyLCAyMjAsIDgxLCAyMjUsIDY2LCAyMjgsIDIzMCwgMiwgMjUyLCAyOSwgMjUwLCAxOTYsIAorICAgIDIyNCwgNDEsIDIyOCwgMjI5LCAyMzMsIDg0LCA1LCAyMzcsIDIyNCwgNDIsIDE0NCwgMjUwLCAyMjEsIDIzMywgODQsIDUsIAorICAgIDIzNywgMjI0LCA0NSwgMTQ0LCAyNTAsIDIyMSwgMzQsIDIzMywgODQsIDUsIDIsIDI1MCwgMjE3LCAyNTUsIDAsIDIzMywgCisgICAgODQsIDUsIDIzNywgMjI0LCA1MSwgMjUwLCAyMjEsIDM0LCAyNDgsIDE4OCwgNTUsIDg4LCA1LCAyMzcsIDIyNCwgMjIxLCAKKyAgICA5MCwgMjMzLCAxNTUsIDUsIDIzNywgMjI0LCAyMjEsIDkwLCAyMzMsIDg0LCA1LCAyMzcsIDIyNCwgMjIxLCA5MCwgMjM3LCAKKyAgICAxODEsIDIyOCwgMjI5LCAyMjcsIDEwMSwgMjM3LCAxODEsIDIyOCwgMjI5LCAyMTcsIDE1OCwgMTY1LCAyMjcsIDE5MSwgCisgICAgMjUwLCAxNTksIDI1NCwgMTM5LCAxNTYsIDI1MCwgMTI4LCAyMzcsIDE3NSwgMiwgMjQ4LCAxNDUsIDIyMCwgNzUsIDIsIAorICAgIDIzMywgMTU1LCA1NSwgMjIwLCA3NSwgMiwgMjMwLCA3NywgMjM3LCAxNzUsIDIsIDIzMCwgNzcsIDIzNywgMTc1LCAyLCAKKyAgICAyMzUsIDcsIDI1NCwgMTI2LCAyMjAsIDc1LCAyLCAyMzUsIDcsIDIzMCwgMTA1LCAyMjAsIDc1LCA3MSwgMjM3LCAxNzQsIAorICAgIDIzNywgMTc1LCA3MSwgMjIwLCA3NCwgMjIwLCA3NSwgNzEsIDI1MiwgMjAxLCA3MSwgMjM3LCAxNzQsIDIzNywgMTc1LCA3MSwgCisgICAgMjUyLCAyMDEsIDcxLCAyMjAsIDc0LCAyMjAsIDc1LCAyNTIsIDEwNiwgMjUsIDIzNywgNTYsIDIsIDIyMCwgNzQsIDIzNywgCisgICAgMTc1LCAyNTIsIDEwNiwgMjUsIDIzNywgNTYsIDIsIDIzNywgMTc0LCAyNTAsIDE5NywgMjIwLCA3NSwgMiwgMjI1LCA1MSwgCisgICAgMjUwLCAxOTcsIDIzNywgMTc1LCAyLCAyMjUsIDUxLCA1MSwgNDAsIDIzNywgMTc0LCA1MSwgNDAsIDIyMCwgNzQsIDI1MCwgCisgICAgMTk3LCAyMjAsIDc1LCAyLCAyMjUsIDUyLCAyNSwgMjI0LCA0MSwgMjI4LCAyMjksIDIzNSwgNywgMjUsIDIsIDYxLCA1MCwgCisgICAgMjM1LCA3LCAxNTYsIDIsIDYxLCA1MCwgNTEsIDIzNSwgNywgMjU0LCAxMjYsIDUxLCAyMzUsIDcsIDIzMCwgMTA1LCAxMjQsIAorICAgIDIzNywgMTc2LCAyMzUsIDcsIDI1NCwgMTI2LCAxMjQsIDIzNywgMTc2LCAyMzUsIDcsIDIzMCwgMTA1LCAyMjQsIDQ4LCAKKyAgICAyMzUsIDE0NiwgMjMwLCAxMDUsIDIyNCwgNDgsIDIzNSwgMTQ2LCAyNTQsIDEyNiwgMjM1LCA3LCAxNTYsIDIzMCwgNzUsIAorICAgIDIzNSwgNywgMjU0LCAxMjYsIDIzNSwgNywgMjUsIDIsIDIzMywgMTkzLCAyMjMsIDE0NiwgMjM1LCA3LCAxNTYsIDIsIDIzMywgCisgICAgMTkzLCAyMjMsIDE0NiwgMjM1LCA3LCAyNSwgMiwgMTg2LCAyNDksIDE0NiwgMjM1LCA3LCAxNTYsIDIsIDE4NiwgMjQ5LCAKKyAgICAxNDYsIDIzNSwgNywgMjUsIDIsIDUxLCAyMzAsIDc3LCAyMzUsIDcsIDI1LCAyLCAyMjAsIDgxLCAyMzUsIDcsIDI1LCAyLCAKKyAgICA1MSwgMjIwLCA4MSwgMywgMjE5LCAxNjEsIDIsIDIyMCwgODEsIDIzNSwgNywgMTU2LCAyLCA1MSwgMjMwLCA3NywgMjM1LCAKKyAgICA3LCAxNTYsIDIsIDUxLCAyMjAsIDgxLCAyMTcsIDE1OCwgMTY1LCAyNDgsIDE1NCwgMjU0LCA5OSwgMjE3LCAxNTgsIDE2NSwgCisgICAgMjI3LCAyMzQsIDI1NCwgOTksIDI0NiwgMTU0LCA1LCAyLCA2MSwgNTYsIDI0MiwgNTksIDIsIDYxLCA1MCwgMjIxLCA3OCwgCisgICAgMTg2LCAyNTIsIDIwMSwgMiwgNTEsIDY5LCA5MiwgMjIxLCA3OCwgMTg2LCAyNTIsIDIwMSwgMiwgMjIxLCA3OCwgNjksIDkyLCAKKyAgICAyMjEsIDE4MCwgMjMwLCAxMTMsIDIsIDYxLCA1MCwgMjIxLCAxODAsIDIzMCwgMTEzLCAyLCAyMjcsIDg4LCAyNDgsIDE0MywgCisgICAgMjI0LCAxMTYsIDIzMywgMTU1LCAyMjQsIDExNSwgMjUwLCAxNTMsIDIsIDYxLCA1MCwgMjQ2LCAxNTQsIDIsIDI1MywgMjUxLCAKKyAgICAyNTQsIDE1MSwgMTE0LCAxOTksIDIsIDI1MCwgMjE3LCAyNTUsIDAsIDI1NCwgNzIsIDExNCwgMTU2LCAxMTQsIDEwMSwgCisgICAgMjQ2LCAxNTQsIDUsIDcxLCA4OCwgNTUsIDg4LCA1LCA3MSwgMjQ2LCAxNTQsIDU1LCAyNDYsIDE1NCwgNSwgNzEsIDIyMSwgCisgICAgMTgwLCAyMzAsIDExMiwgNTEsIDI1MCwgMTc2LCAyNDYsIDE1NSwgMTI0LCAyNTAsIDE0OCwgMjQ2LCAxNTQsIDIyNCwgMTI2LCAKKyAgICAxNDgsIDI1MCwgMTQ4LCAyNDYsIDE1NCwgMjI0LCAxMjYsIDI0NiwgMTU0LCA1LCAyLCAxMjQsIDE4OCwgNzEsIDI1LCAxMjQsIAorICAgIDE4OCwgNTYsIDI0NiwgMTUwLCAyLCAyNDUsIDExNiwgMTg4LCA1MCwgMjM1LCA4NywgMiwgMjUwLCAyMjIsIDIzNywgMTkwLCAKKyAgICAyNDQsIDMwLCAyLCAyNTAsIDIyMiwgMjM3LCAxOTAsIDIzNSwgODcsIDIsIDIyOCwgODIsIDE2NCwgNTAsIDI0NCwgMzAsIDIsIAorICAgIDIyOCwgODIsIDE2NCwgNTAsIDIzNSwgODcsIDE1NiwgMjI0LCA1NywgMTE0LCAxMDEsIDI0NCwgMzAsIDE1NiwgMjI0LCA1NywgCisgICAgMTE0LCAxMDEsIDIzNSwgODcsIDE1NiwgMjI0LCA1NywgMTE0LCAxOTksIDIsIDYxLCAyMzcsIDE5MCwgMjQ0LCAzMCwgMTU2LCAKKyAgICAyMjQsIDU3LCAxMTQsIDE5OSwgMiwgNjEsIDIzNywgMTkwLCAyMzUsIDg3LCAxNTYsIDIyNCwgNTcsIDExNCwgMTk5LCAyLCAKKyAgICA2MSwgNTAsIDI0NCwgMzAsIDE1NiwgMjI0LCA1NywgMTE0LCAxOTksIDIsIDYxLCA1MCwgMjM1LCA4NywgMTU2LCAyMjQsIAorICAgIDU3LCAxMTQsIDE5OSwgMiwgNjEsIDcxLCAyMjcsIDEwOSwgMjQ0LCAzMCwgMTU2LCAyMjQsIDU3LCAxMTQsIDE5OSwgMiwgCisgICAgNjEsIDcxLCAyMzUsIDExNSwgMjM1LCA4NywgMTU2LCAyNTQsIDczLCAyNDQsIDMwLCAxNTYsIDI1NCwgNzMsIDIzNSwgODcsIAorICAgIDI1LCAyMjQsIDEwNywgMjEyLCAxMTQsIDEwMSwgMjQ0LCAzMCwgMjUsIDIyNCwgMTA3LCAyMTIsIDExNCwgMTAxLCAyMzUsIAorICAgIDg3LCAyNSwgMjEyLCAyNTQsIDczLCAyNDQsIDMwLCAyNSwgMjEyLCAyNTQsIDczLCAyMzUsIDg3LCA3MSwgMjQ3LCAxMzYsIAorICAgIDExNCwgNzEsIDI0NCwgMjksIDI0NCwgMzAsIDcxLCAyNDcsIDEzNiwgMTE0LCA3MSwgMjM1LCA4NiwgMjM1LCA4NywgNzEsIAorICAgIDIyNCwgMTE2LCAxNTYsIDI0NiwgMTU1LCAyNDQsIDMwLCA3MSwgMjI0LCAxMTYsIDE1NiwgMjQ2LCAxNTUsIDIzNSwgODcsIAorICAgIDcxLCAyMjQsIDExNiwgNzEsIDI0NCwgMjksIDI0NCwgMzAsIDcxLCAyMjQsIDExNiwgNzEsIDIzNSwgODYsIDIzNSwgODcsIAorICAgIDcxLCAyNDQsIDMwLCA3MSwgMjQ3LCAxMzYsIDI0NiwgMTU1LCAyNDQsIDMwLCA3MSwgMjM1LCA4NywgNzEsIDI0NywgMTM2LCAKKyAgICAyNDYsIDE1NSwgMjM1LCA4NywgNzEsIDIyNCwgNTcsIDExNCwgNzEsIDI0NCwgMzAsIDcxLCAyMjQsIDU3LCAyNDYsIDE1NSwgCisgICAgMjQ0LCAzMCwgNzEsIDIyNCwgNTcsIDExNCwgNzEsIDIzNSwgODcsIDcxLCAyMjQsIDU3LCAyNDYsIDE1NSwgMjI0LCA1NywgCisgICAgMTE0LCAxOTksIDE1NiwgMjM1LCA4NiwgMjI0LCA1NywgMTE0LCAxOTksIDE1NiwgMjQ0LCAyOSwgMjI0LCA1NywgMTE0LCAKKyAgICAxOTksIDE1NiwgMjM1LCA4NywgMiwgNjEsIDIzNywgMTkwLCAyMjQsIDU3LCAxMTQsIDE5OSwgMTU2LCAyNDQsIDMwLCAyLCAKKyAgICA2MSwgMjM3LCAxOTAsIDI0NywgMTM2LCAxMTQsIDE5OSwgMTU2LCAyMzUsIDg2LCAyNDcsIDEzNiwgMTE0LCAxOTksIDE1NiwgCisgICAgMjQ0LCAyOSwgMjQ3LCAxMzYsIDIyNCwgNTcsIDExNCwgMTk5LCAxNTYsIDIzNSwgODYsIDI0NywgMTM2LCAyMjQsIDU3LCAKKyAgICAxMTQsIDE5OSwgMTU2LCAyNDQsIDI5LCAyMjQsIDExNiwgMTU2LCAyMzUsIDg2LCAyMjQsIDExNiwgMTU2LCAyNDQsIDI5LCAKKyAgICAyMjQsIDExNiwgNzEsIDIzNSwgODcsIDcxLCAyNDYsIDE1NCwgNTUsIDIyNCwgMTE2LCA3MSwgMjQ0LCAzMCwgNzEsIDI0NiwgCisgICAgMTU0LCA1NSwgNTEsIDIzMiwgMTI3LCAyMzUsIDg2LCA1MSwgMjMyLCAxMjcsIDI0NCwgMjksIDUxLCAyMzIsIDEyNywgMjM1LCAKKyAgICA4NywgMiwgMjIwLCA4MSwgMjQ0LCAzMCwgMjMwLCA3NSwgMjM1LCA4NiwgMjQ0LCAzMCwgMjUyLCAxMDYsIDIzNSwgODYsIAorICAgIDIzNSwgODcsIDI1MCwgMTk3LCAyNTEsIDIxMywgMjUwLCA3NCwgMjQ0LCAzMCwgMjUwLCAxOTcsIDI1MSwgMjEzLCAyNTAsIAorICAgIDc0LCAyMzUsIDg3LCAyNTAsIDE5NywgMjUxLCAyMTMsIDI1MCwgNzUsIDcxLCAyMjQsIDU3LCAyNDYsIDE1NSwgMjQ0LCAzMCwgCisgICAgMjUwLCAxOTcsIDI1MSwgMjEzLCAyNTAsIDc1LCA3MSwgMjI0LCA1NywgMjQ2LCAxNTUsIDIyNCwgNDIsIDIyMiwgMjcsIAorICAgIDIzNSwgMTQ1LCAyMjIsIDI3LCAyMjQsIDQyLCAyMjIsIDI4LCAxNTYsIDExNCwgMTAxLCAyMzUsIDE0NSwgMjIyLCAyOCwgCisgICAgMTU2LCAxMTQsIDEwMSwgMjQ2LCAxNTQsIDUsIDIsIDI1MSwgMjM2LCA1MCwgMjI4LCAyNDUsIDcxLCAyMjQsIDEwNywgMjQ2LCAKKyAgICAxNTQsIDU1LCAyMjMsIDg1LCA3MSwgMjI0LCAxMDcsIDI0NiwgMTU0LCA1NSwgMjI4LCAyNDUsIDcxLCAyMjQsIDEwNywgCisgICAgMjEyLCAxMTQsIDEwMSwgMjIzLCA4NSwgNzEsIDIyNCwgMTA3LCAyMTIsIDExNCwgMTAxLCAyMjgsIDI0NSwgNzEsIDI0NiwgCisgICAgMTU0LCA1NSwgMjIzLCA4NSwgNzEsIDI0NiwgMTU0LCA1NSwgMjI4LCAyNDUsIDcxLCAyMTIsIDExNCwgMTAxLCAyMjMsIDg1LCAKKyAgICA3MSwgMjEyLCAxMTQsIDEwMSwgMjI4LCAyNDUsIDcxLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIyMywgODUsIDcxLCAyNTQsIAorICAgIDE1MSwgMTE0LCAxMDEsIDIyOCwgMjQ1LCA3MSwgMjEyLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIyMywgODUsIDcxLCAyMTIsIAorICAgIDI1NCwgMTUxLCAxMTQsIDEwMSwgNTEsIDIyOCwgMjQ0LCA1MSwgMjIzLCA4NCwgMjIzLCA5MywgMiwgMjQ4LCAxNDUsIDIyMywgCisgICAgNTgsIDIsIDI0OCwgMTQ1LCAyMjMsIDkzLCAyLCA4OCwgNSwgNTYsIDIyMywgNTgsIDIsIDg4LCA1LCA1NiwgMjIzLCA5MywgCisgICAgMiwgMjMzLCA4NCwgNSwgNTYsIDIyMywgNTgsIDIsIDIzMywgODQsIDUsIDU2LCAyMjMsIDkzLCAxMTcsIDE1NiwgMTE0LCAKKyAgICAxOTksIDIsIDYxLCA1MCwgMjIzLCA1OCwgMTE3LCAxNTYsIDExNCwgMTk5LCAyLCA2MSwgNTAsIDIyMywgOTMsIDExNywgNzEsIAorICAgIDI0NiwgMTU0LCA1NSwgMjIzLCA1OCwgMTE3LCA3MSwgMjQ2LCAxNTQsIDU1LCAyMjMsIDkzLCAxMTcsIDcxLCAyMjEsIDE4MCwgCisgICAgMjMwLCAxMTIsIDIyMywgNTgsIDExNywgNzEsIDIyMSwgMTgwLCAyMzAsIDExMiwgMjIzLCA5MywgMTE3LCA3MSwgMjU0LCAKKyAgICAxNTEsIDExNCwgMTAxLCAyMjMsIDU4LCAxMTcsIDcxLCAyNTQsIDE1MSwgMTE0LCAxMDEsIDIyMywgOTMsIDExNywgNzEsIAorICAgIDIxMiwgMTE0LCAxMDEsIDIyMywgNTgsIDExNywgNzEsIDIxMiwgMTE0LCAxMDEsIDQwLCA0MiwgMjMwLCAxMTksIDg2LCAKKyAgICAyMzAsIDExMiwgNDAsIDQ1LCAyMzAsIDExOSwgODYsIDIzMCwgMTEyLCAyNTAsIDE5NywgMjIzLCA5MiwgMjUwLCAxOTcsIAorICAgIDIyMywgNTcsIDI1MCwgMTk3LCAyMjMsIDkzLCAxNTYsIDExNCwgMTAxLCAyNTAsIDE5NywgMjIzLCA1OCwgMTU2LCAxMTQsIAorICAgIDEwMSwgMjIzLCA5MywgNzEsIDIyMywgNTcsIDIyMywgNTgsIDcxLCAyMjMsIDkyLCAyMjMsIDkzLCA3MSwgMjIzLCA5MiwgCisgICAgMjIzLCA1OCwgNzEsIDIyMywgNTcsIDIyMywgNTgsIDI1MiwgMTA2LCAyMjMsIDkyLCAyMjMsIDU4LCAyNTIsIDEwNiwgMjUsIAorICAgIDIzNywgNTYsIDI1MSwgMjEzLCAyNDksIDE0NywgMiwgMjIzLCA5MiwgMjQ2LCAyMTMsIDExNywgMjMwLCAxMTQsIDI0NywgCisgICAgMTI5LCAyMjksIDYzLCAyLCAyMjIsIDgxLCAyMjEsIDExOSwgMjIxLCAxMDIsIDIzNywgMTc0LCAyNDUsIDEyNSwgMjMxLCAKKyAgICAxOTYsIDIyNCwgMTkyLCA0MiwgMjIyLCAxNDMsIDIyNCwgMTkyLCAxMTMsIDIyMiwgMTQzLCAyMjQsIDE5MiwgMTA4LCAyMjIsIAorICAgIDE0MywgMjI5LCAxNjEsIDIsIDE5OCwgNjksIDI1MiwgMjAxLCAyMjEsIDc4LCA0NSwgMjIwLCAyMzYsIDUxLCA2OSwgMjUyLCAKKyAgICAyMDEsIDQyLCAyMjAsIDIzNiwgNjksIDI1MiwgMjAxLCA1MSwgNDIsIDIyMCwgMjM2LCA1MSwgNjksIDI1MiwgMjAxLCA1MSwgCisgICAgNDIsIDIyMCwgMjM2LCAxNzEsIDI0OSwgMTQ3LCAyNDUsIDk3LCA0MiwgMjMzLCAyNTUsIDExNywgNTEsIDIxOSwgMTUyLCAKKyAgICAyMjQsIDE5MiwgMTEzLCAyMjIsIDE0NCwgMiwgMjMwLCA3NywgMjI0LCAxOTIsIDEwOCwgMjIyLCAxNDQsIDIsIDIyMCwgODEsIAorICAgIDIyNCwgMTkyLCAxMDgsIDIyMiwgMTQ0LCA3MSwgMjI0LCAxOTIsIDExMywgMjIyLCAxNDMsIDUxLCAxMTMsIDIyMiwgMTQzLCAKKyAgICA1MSwgMTA4LCAyMjIsIDE0MywgNTEsIDIxNCwgMjEyLCA1NSwgMjEwLCA1MSwgMjE0LCAyMTIsIDU1LCAyNDgsIDE2MCwgCisgICAgMjEyLCAyNDgsIDE5NCwgMiwgMjEwLCAyMzIsIDEzNywgMjI0LCA1NSwgNjksIDIzNSwgNDQsIDIsIDI1MCwgMjIyLCA1MCwgCisgICAgNjksIDIzNSwgNDQsIDIsIDI1MCwgMjIyLCA1NiwgMTEzLCAyMjIsIDE0NCwgMiwgMjUwLCAyMjIsIDU2LCAyMjksIDIzNCwgCisgICAgMiwgMTg2LCA5MiwgMjI5LCAyMzQsIDIsIDIyMSwgMTgwLCAyMzAsIDExMiwgMjIxLCA3OCwgNjksIDI1MiwgMjAxLCAyNTIsIAorICAgIDczLCAyMjcsIDE5MiwgMjIxLCA3OCwgNjksIDI1MiwgMjAxLCAyLCAxODYsIDkyLCAyMjEsIDc4LCAyNTAsIDE3NiwgMjMwLCAKKyAgICAxMTIsIDIyMSwgNzgsIDIzMiwgMTI3LCAyMzUsIDg2LCAyMjEsIDc4LCAyMzIsIDEyNywgMjQ0LCAyOSwgMjQ3LCAxMzYsIAorICAgIDIyNCwgNTcsIDIzNSwgODcsIDE1NiwgMTE0LCAxMDEsIDI0NywgMTM2LCAyMjQsIDU3LCAyNDQsIDMwLCAxNTYsIDExNCwgCisgICAgMTAxLCAyMjEsIDc4LCAyMjQsIDE4LCAyNTIsIDczLCAyMjcsIDE5MiwgMjM1LCAxNDYsIDIyMSwgNzgsIDY5LCAyNTIsIAorICAgIDIwMSwgMjMwLCAxMTIsIDUxLCAyMjQsIDE4LCAyMzAsIDExMiwgNjcsIDY5LCAxMzUsIDIzMywgMzMsIDY3LCA2OSwgMTM1LCAKKyAgICAyMzEsIDE4NywgMjQ3LCA1LCA2NywgNjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgNjcsIDY1LCAyMjQsIDYsIDI0NywgNSwgNjcsIAorICAgIDY1LCAyMjQsIDYsIDIxOCwgMjE3LCA2NywgNjUsIDQyLCA0NSwgNjcsIDY1LCAxMjcsIDg0LCA2NSwgMjIwLCA1MywgODQsIAorICAgIDY1LCAyNDcsIDEzMCwgODQsIDY1LCAyMzEsIDE4NywgMjQ3LCA1LCA4NCwgNjUsIDIzMSwgMTg3LCAyMTgsIDIxNywgODQsIAorICAgIDY1LCAyMjQsIDYsIDI0NywgNSwgODQsIDY1LCAyMjQsIDYsIDIxOCwgMjE3LCA4NCwgNjUsIDQyLCA0NSwgODQsIDY1LCAKKyAgICAxMDgsIDExMywgODQsIDY1LCA5MCwgNzYsIDIsIDIyMSwgMTcwLCAyNDcsIDEyOSwgOTAsIDc2LCAyLCAyMjEsIDE3MCwgCisgICAgMjIwLCA1MiwgMTI3LCA3NiwgMiwgMjIxLCAxNzAsIDI0NywgMTI5LCAxMjcsIDc2LCAyLCAyMjEsIDE3MCwgMjIwLCA1MiwgCisgICAgNDAsIDIsIDIyMSwgMTIwLCAxNDQsIDI1MiwgNTMsIDQwLCAyLCAyNTIsIDI5LCAxNDQsIDI1MiwgNTMsIDQwLCAyLCAyMjAsIAorICAgIDYwLCA0NSwgMjQ5LCAxMSwgMTQ0LCAyNTIsIDUzLCA0MCwgMiwgMjM0LCAyMzcsIDQyLCAyNDksIDExLCAxNDQsIDI1MiwgCisgICAgNTMsIDI0OSwgNSwgMiwgNDIsIDE0NCwgMjUyLCA1MywgMjQ5LCA1LCAyLCA0NSwgMTQ0LCAyNTIsIDUzLCAyNDksIDUsIDIsIAorICAgIDIyMSwgMTIwLCAxNDQsIDI1MiwgNTMsIDI0OSwgNSwgMiwgMjUyLCAyOSwgMTQ0LCAyNTIsIDUzLCAyNDcsIDE0MywgMjIzLCAKKyAgICAyMjcsIDg0LCAyMzUsIDE0NiwgMjIzLCAyMjcsIDY3LCAyMzUsIDE0NiwgMjIzLCAyMjcsIDg0LCAyMTksIDEwMCwgMywgCisgICAgMjIzLCAyMjcsIDY3LCAyMTksIDEwMCwgMywgMjIzLCAyMjcsIDg0LCAyMjksIDE3NSwgNjcsIDIyOSwgMTc1LCA2NywgMjQzLCAKKyAgICAxMjQsIDg0LCAyNDMsIDEyNCwgMTg2LCA4NCwgMjQzLCAxMjQsIDg0LCAyMzUsIDE0NiwgMjUwLCAyMjEsIDg0LCAyMzQsIAorICAgIDE4LCAyNDksIDQsIDY3LCAyMzQsIDE4LCAyNDksIDQsIDg0LCAyMzQsIDE4LCAyMzQsIDIzNCwgNjcsIDIzNCwgMTgsIDIzNCwgCisgICAgMjM0LCA4NCwgMywgMjQ5LCA0LCA4NCwgMywgMjM0LCAyMzQsIDY3LCAzLCAyMzQsIDIzNCwgODQsIDE4NiwgMjQ2LCAyMDksIAorICAgIDY3LCAxODYsIDI0NiwgMjA5LCA4NCwgNjksIDI0NiwgMjA5LCA2NywgNjksIDI0NiwgMjA5LCA0MiwgNzYsIDIsIDMsIDI1MCwgCisgICAgMjIxLCAxNDgsIDEyNywgMjU0LCAxOSwgNDIsIDc2LCAyLCAzNCwgMjI5LCA0MywgMTcxLCAxMjcsIDIyMywgMjIzLCA2NSwgCisgICAgMTI3LCAyMjAsIDIwNiwgNzYsIDIsIDY5LCA5MiwgMTI3LCAyMjAsIDIwNiwgNzYsIDIsIDUxLCA2OSwgOTIsIDEyNywgMjIwLCAKKyAgICAyMDYsIDc2LCAyNDUsIDk3LCAxMzUsIDEyNywgMjIwLCAyMDYsIDIyMSwgNzgsIDI0OSwgMTQ3LCA2NSwgMTI3LCA3NiwgMiwgCisgICAgMjQ3LCAxNDMsIDIyMywgMTQ2LCAxMjcsIDc2LCAyLCAyMjIsIDEzNiwgMiwgNjksIDkyLCAxMjcsIDc2LCAyLCAyMjIsIAorICAgIDEzNiwgMiwgNTEsIDY5LCA5MiwgMTI3LCAyMjAsIDIwNiwgNzYsIDIsIDIyMiwgMTM1LCAxMjcsIDIyMCwgMjA2LCA3NiwgMiwgCisgICAgMjIyLCAxMzYsIDIsIDY5LCA5MiwgMTI3LCAyMjAsIDIwNiwgNzYsIDIsIDIyMiwgMTM2LCAyLCA1MSwgNjksIDkyLCAxMjcsIAorICAgIDc2LCAyMjEsIDIyNSwgMjE4LCAxNTEsIDIxOCwgMjM3LCA3NiwgMjI5LCAyOCwgMjQ4LCAyMDgsIDIzNSwgMTE1LCAyNDYsIAorICAgIDE1NCwgNSwgNzEsIDEyNywgNjUsIDIyNywgMTYwLCAyMjEsIDE4MCwgMjMwLCAxMTMsIDcxLCAxMjcsIDY1LCAxMjcsIDc2LCAKKyAgICA3MSwgMjI3LCAxNjAsIDI1NCwgMTUxLCAxMTQsIDEwMSwgOTAsIDc2LCAyMjEsIDIyNSwgMjQ0LCAyOSwgOTAsIDc2LCAyMjEsIAorICAgIDIyNSwgMjIzLCA1NywgMTI3LCAyMjgsIDkyLCA2NSwgOTAsIDIyOCwgOTIsIDY1LCAyMjcsIDE2MCwgMjIxLCAxODAsIDIzMCwgCisgICAgMTEzLCA3MSwgOTAsIDY1LCA5MCwgNzYsIDcxLCAyMjcsIDE2MCwgMjU0LCAxNTEsIDExNCwgMTAxLCAyMjEsIDE4MCwgMjMwLCAKKyAgICAxMTMsIDcxLCAxMjcsIDY1LCAxMjcsIDc2LCA3MSwgMjU0LCAxNTEsIDExNCwgMTAxLCAxMjcsIDc2LCA3MSwgMjI3LCAxNjAsIAorICAgIDIyMSwgMTgwLCAyMzAsIDExMiwgOTAsIDc2LCA3MSwgMjI3LCAxNjAsIDIyMSwgMTgwLCAyMzAsIDExMiwgNjcsIDIzNCwgCisgICAgMTgsIDIyMywgMTU2LCA4NCwgMywgMjIzLCAxNTYsIDY3LCAzLCAyMjMsIDE1NiwgODQsIDIyNywgMTA2LCAyMjksIDE3NSwgCisgICAgNjcsIDIyNywgMTA2LCAyMjksIDE3NSwgMTA2LCAyMzUsIDE0NiwgMjUwLCAyMjEsIDEwNiwgMjMwLCA3OCwgMiwgMjMwLCAKKyAgICA3OCwgMjM3LCAxOTAsIDEwNiwgMjUwLCAyMjIsIDIsIDI1MCwgMjIyLCAyMzcsIDE5MCwgMTA2LCAyNTAsIDIyMSwgMTA2LCAKKyAgICAzNCwgMjI2LCAxNDksIDEyNSwgNiwgMSwgMjUzLCAyMDUsIDEyNSwgNiwgMSwgMjUxLCAyNDQsIDEyNSwgNiwgMSwgMjE5LCAKKyAgICAxNjMsIDEyNSwgNiwgMSwgMjQ0LCA3NiwgMTI1LCA2LCAxLCAyNDgsIDE2MiwgMTI1LCA2LCAxLCAyMTgsIDEsIDEyNSwgNiwgCisgICAgMSwgMjE3LCA2NiwgMTI1LCA2LCAxLCAyNDcsIDcxLCAxMjUsIDYsIDEsIDIxNywgODksIDEyNSwgNiwgMSwgMjM3LCAxMzAsIAorICAgIDEyNSwgNiwgMSwgNjYsIDIzNywgMTMwLCAxMjUsIDYsIDEsIDcyLCAxMjUsIDYsIDEsIDI0OCwgMTgwLCAxMjUsIDYsIDEsIAorICAgIDIzNiwgMjM4LCAxMjUsIDYsIDEsIDIzNSwgMTksIDEyNSwgNiwgMSwgMjMzLCAzNywgMTI1LCA2LCAxLCAyMzIsIDIwOCwgCisgICAgMTI1LCA2LCAxLCAyMzAsIDEyOSwgMTI1LCA2LCAxLCAyMjksIDI2LCAxMjUsIDYsIDEsIDIyNywgODcsIDEyNSwgNiwgMSwgCisgICAgMjI0LCA0NywgMTI1LCA2LCAxLCAyMjAsIDIyNiwgMTI1LCA2LCAxLCAyMjAsIDk4LCAxMjUsIDYsIDEsIDI0NSwgOTksIAorICAgIDEyNSwgNiwgMSwgMjQzLCAxMzAsIDEyNSwgNiwgMSwgMjMwLCA4NywgMTI1LCA2LCAxLCAyMjksIDE5OCwgMTI1LCA2LCAxLCAKKyAgICAyMjQsIDE3MywgMTI1LCA2LCAxLCAyMjEsIDM5LCAxMjUsIDYsIDEsIDI1MSwgMywgMTI1LCA2LCAxLCAyMjUsIDI1LCAxMjUsIAorICAgIDYsIDEsIDIxOCwgNywgMTI1LCA2LCAxLCAyMTgsIDksIDEyNSwgNiwgMSwgMjE4LCAzNCwgMTI1LCA2LCAxLCAyMjMsIDI0MywgCisgICAgMTU1LCAxMjUsIDYsIDEsIDIxNywgMjAwLCAxMjUsIDYsIDEsIDMsIDIxNywgMTc4LCAxMjUsIDYsIDEsIDMsIDIxNywgMTc5LCAKKyAgICAyLCAyMjIsIDEzNSwgMTI1LCA2LCAxLCAyMTcsIDIzMSwgMTI1LCA2LCAxLCAyMzcsIDE2MSwgMywgMjE3LCAxNzgsIDEyNSwgCisgICAgNiwgMSwgMjUyLCA3NiwgMjE3LCAxNzgsIDEyNSwgNiwgMSwgMjM3LCAxNjEsIDI1MiwgNzYsIDIxNywgMTc4LCAxMjUsIDYsIAorICAgIDEsIDI0NSwgMTcxLCAxMjUsIDYsIDEsIDIzNywgMTI4LCAxMjUsIDYsIDEsIDIyNCwgMTcyLCAxMjUsIDYsIDEsIDIyMSwgCisgICAgNzAsIDYwLCAxMjUsIDYsIDEsIDIzNSwgMTM3LCAyMzMsIDM3LCAxMjUsIDMsIDEsIDI1MywgMjA1LCAxMjUsIDMsIDEsIAorICAgIDI1MSwgMjQ0LCAxMjUsIDMsIDEsIDIxOSwgMTYzLCAxMjUsIDMsIDEsIDI0NCwgNzYsIDEyNSwgMywgMSwgMjQ4LCAxNjIsIAorICAgIDEyNSwgMywgMSwgMjE4LCAxLCAxMjUsIDMsIDEsIDIxNywgNjYsIDEyNSwgMywgMSwgMjQ3LCA3MSwgMTI1LCAzLCAxLCAKKyAgICAyMTcsIDg5LCAxMjUsIDMsIDEsIDIzNywgMTMwLCAxMjUsIDMsIDEsIDY2LCAyMzcsIDEzMCwgMTI1LCAzLCAxLCA3MiwgCisgICAgMTI1LCAzLCAxLCAyNDgsIDE4MCwgMTI1LCAzLCAxLCAyMzYsIDIzOCwgMTI1LCAzLCAxLCAyMzUsIDE5LCAxMjUsIDMsIDEsIAorICAgIDIzMywgMzcsIDEyNSwgMywgMSwgMjMyLCAyMDgsIDEyNSwgMywgMSwgMjMwLCAxMjksIDEyNSwgMywgMSwgMjI5LCAyNiwgCisgICAgMTI1LCAzLCAxLCAyMjcsIDg3LCAxMjUsIDMsIDEsIDIyNCwgNDcsIDEyNSwgMywgMSwgMjIwLCAyMjYsIDEyNSwgMywgMSwgCisgICAgMjIwLCA5OCwgMTI1LCAzLCAxLCAyNDUsIDk5LCAxMjUsIDMsIDEsIDI0MywgMTMwLCAxMjUsIDMsIDEsIDIzMCwgODcsIAorICAgIDEyNSwgMywgMSwgMjI5LCAxOTgsIDEyNSwgMywgMSwgMjI0LCAxNzMsIDEyNSwgMywgMSwgMjIxLCAzOSwgMTI1LCAzLCAxLCAKKyAgICAyNTEsIDMsIDEyNSwgMywgMSwgMjI1LCAyNSwgMTI1LCAzLCAxLCAyMTgsIDcsIDEyNSwgMywgMSwgMjE4LCA5LCAxMjUsIDMsIAorICAgIDEsIDIxOCwgMzQsIDEyNSwgMywgMSwgMjIzLCAyNDMsIDE1NSwgMTI1LCAzLCAxLCAyMTcsIDIwMCwgMTI1LCAzLCAxLCAzLCAKKyAgICAyMTcsIDE3OCwgMTI1LCAzLCAxLCAzLCAyMTcsIDE3OSwgMiwgMjIyLCAxMzUsIDEyNSwgMywgMSwgMjE3LCAyMzEsIDEyNSwgCisgICAgMywgMSwgMjM3LCAxNjEsIDMsIDIxNywgMTc4LCAxMjUsIDMsIDEsIDI1MiwgNzYsIDIxNywgMTc4LCAxMjUsIDMsIDEsIAorICAgIDIzNywgMTYxLCAyNTIsIDc2LCAyMTcsIDE3OCwgMTI1LCAzLCAxLCAyNDUsIDE3MSwgMTI1LCAzLCAxLCAyMzcsIDEyOCwgCisgICAgMTI1LCAzLCAxLCAyMjQsIDE3MiwgMTI1LCAzLCAxLCAyMjEsIDcwLCA2MCwgMTI1LCAzLCAxLCAyMzUsIDEzNywgMjMzLCAKKyAgICAzNywgNywgNiwgMSwgMjM1LCAyMDIsIDIsIDUxLCAxMzUsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCA1MSwgMTM1LCA3LCA2LCAKKyAgICAxLCAyMzUsIDIwMiwgMiwgMjMzLCAxOTMsIDIyMSwgMTc5LCA3LCA2LCAxLCAyMzAsIDYwLCAyLCA5MiwgNywgNiwgMSwgCisgICAgMjI4LCAzOSwgMiwgMjIyLCAxMzUsIDcsIDMsIDEsIDExMiwgMiwgOTIsIDcsIDMsIDEsIDIyMiwgMjAyLCAyLCAyNDksIDExLCAKKyAgICA5MiwgNywgNiwgMSwgMjQzLCAyMjYsIDIsIDI0OSwgNDgsIDcsIDMsIDEsIDI0MywgMjI2LCAyLCAyNDksIDQ4LCA3LCA2LCAKKyAgICAxLCAyMzcsIDE4LCAyLCAyNDksIDQ4LCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAyNDksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1OCwgCisgICAgMiwgMjQ5LCA0OCwgNywgMywgMSwgMjE3LCAxNTgsIDIsIDI0OSwgNDgsIDcsIDYsIDEsIDI1NCwgMTQ2LCA3LCA2LCAxLCAKKyAgICAyMzQsIDE4NywgMiwgOTYsIDcsIDYsIDEsIDIxNSwgNjAsIDcsIDYsIDEsIDIxNSwgMjU0LCAxNDYsIDcsIDMsIDEsIDIyMCwgCisgICAgMTEsIDIsIDQ1LCA5NiwgNywgNiwgMSwgMjE5LCA0MSwgMiwgOTYsIDcsIDMsIDEsIDIxOSwgNDEsIDIsIDk2LCA3LCAzLCAxLCAKKyAgICAyMjAsIDExLCAyLCAyNTAsIDgwLCA3LCA2LCAxLCAxNDQsIDI0MywgMjI1LCA3LCAzLCAxLCAxNDQsIDI0MywgMjI1LCA3LCAKKyAgICAzLCAxLCAyMjIsIDEzMywgMjI5LCAxMjksIDcsIDMsIDEsIDE3OCwgMiwgMjMxLCAxODMsIDcsIDMsIDEsIDIxNSwgMjI4LCAKKyAgICAzOSwgMiwgMjIyLCAxMzUsIDcsIDMsIDEsIDE0MiwgMiwgMTA5LCAyMjcsIDk0LCAyMzcsIDE5MCwgNywgMSwgMywgNiwgCisgICAgMjE1LCA3MywgNywgMjIzLCA5NCwgMywgMSwgMjM3LCAxMjYsIDU4LCAxLCA2LCAyMTYsIDIxNiwgNywgNiwgMSwgMjI2LCAKKyAgICAyMzUsIDIsIDIyMywgMzMsIDIyMiwgMTM1LCA3LCA2LCAxLCAyMTcsIDE1OCwgMiwgMjIzLCAzMywgMjIyLCAxMzUsIDc1LCAKKyAgICA2LCAxLCAyNTQsIDE2MywgNzUsIDMsIDEsIDI1NCwgMTYzLCA3NSwgNiwgMSwgMjE5LCA5MiwgNzUsIDMsIDEsIDIxOSwgOTIsIAorICAgIDc1LCA2LCAxLCAyNDQsIDIzMSwgNzUsIDMsIDEsIDI0NCwgMjMxLCA3NSwgNiwgMSwgMjQ5LCAxNzksIDc1LCAzLCAxLCAKKyAgICAyNDksIDE3OSwgNzUsIDYsIDEsIDI0NiwgMjM2LCA3NSwgMywgMSwgMjQ2LCAyMzYsIDc1LCA2LCAxLCAyMjQsIDExLCA3NSwgCisgICAgMywgMSwgMjI0LCAxMSwgNzUsIDYsIDEsIDIxNywgOTksIDc1LCAzLCAxLCAyMTcsIDk5LCA3NSwgNiwgMSwgMjQzLCAxNzEsIAorICAgIDc1LCAzLCAxLCAyNDMsIDE3MSwgNzUsIDYsIDEsIDIyMiwgNCwgNzUsIDMsIDEsIDIyMiwgNCwgNzUsIDYsIDEsIDI0MiwgCisgICAgNzAsIDc1LCAzLCAxLCAyNDIsIDcwLCA3NSwgNiwgMSwgMjM2LCAyMjYsIDc1LCAzLCAxLCAyMzYsIDIyNiwgNzUsIDYsIDEsIAorICAgIDIzNSwgMTM1LCA3NSwgMywgMSwgMjM1LCAxMzUsIDc1LCA2LCAxLCAyMzMsIDE5NiwgNzUsIDMsIDEsIDIzMywgMTk2LCA3NSwgCisgICAgNiwgMSwgMjMyLCA2MiwgNzUsIDMsIDEsIDIzMiwgNjIsIDc1LCA2LCAxLCAyMzYsIDExLCA3NSwgMywgMSwgMjM2LCAxMSwgCisgICAgNzUsIDYsIDEsIDc0LCA3NSwgMywgMSwgNzQsIDc1LCA2LCAxLCAyMjksIDEwOCwgNzUsIDMsIDEsIDIyOSwgMTA4LCA3NSwgCisgICAgNiwgMSwgMjI3LCA3NSwgNzUsIDMsIDEsIDIyNywgNzUsIDc1LCA2LCAxLCAyMjQsIDExOCwgNzUsIDMsIDEsIDIyNCwgMTE4LCAKKyAgICA3NSwgNiwgMSwgMjIyLCAxMDUsIDc1LCAzLCAxLCAyMjIsIDEwNSwgNzUsIDYsIDEsIDIyMCwgMTIzLCA3NSwgMywgMSwgCisgICAgMjIwLCAxMjMsIDc1LCA2LCAxLCAyNDUsIDIwMywgNzUsIDMsIDEsIDI0NSwgMjAzLCA3NSwgNiwgMSwgMjM2LCAxMzAsIDc1LCAKKyAgICAzLCAxLCAyMzYsIDEzMCwgNzUsIDYsIDEsIDIyOCwgMjEyLCA3NSwgMywgMSwgMjI4LCAyMTIsIDc1LCA2LCAxLCAyMzAsIAorICAgIDEyMywgNzUsIDMsIDEsIDIzMCwgMTIzLCA3NSwgNiwgMSwgMjQ5LCA5LCAyNTQsIDE2OCwgNzUsIDMsIDEsIDI0OSwgOSwgCisgICAgMjU0LCAxNjgsIDc1LCA2LCAxLCA0OCwgNzUsIDI1NCwgMTkxLCA3NSwgMywgMSwgNDgsIDc1LCAyNTQsIDE5MSwgNzUsIDYsIAorICAgIDEsIDI1MCwgOTMsIDI0NiwgMjM2LCA3NSwgMywgMSwgMjUwLCA5MywgMjQ2LCAyMzYsIDc1LCA2LCAxLCAyNDksIDksIDIzNiwgCisgICAgMjI2LCA3NSwgMywgMSwgMjQ5LCA5LCAyMzYsIDIyNiwgNzUsIDYsIDEsIDI0OSwgOSwgMjMyLCA2MiwgNzUsIDMsIDEsIAorICAgIDI0OSwgOSwgMjMyLCA2MiwgNzUsIDYsIDEsIDI1MCwgOTMsIDIzMiwgNjIsIDc1LCAzLCAxLCAyNTAsIDkzLCAyMzIsIDYyLCAKKyAgICA3NSwgNiwgMSwgNDgsIDc1LCAyMzAsIDEyMywgNzUsIDMsIDEsIDQ4LCA3NSwgMjMwLCAxMjMsIDc1LCA2LCAxLCAyMjYsIAorICAgIDE0MiwgNzUsIDMsIDEsIDIyNiwgMTQyLCA3NSwgNiwgMSwgMjUwLCA5OCwgMjI0LCAyMzgsIDc1LCAzLCAxLCAyNTAsIDk4LCAKKyAgICAyMjQsIDIzOCwgNzUsIDYsIDEsIDQ4LCA3NSwgMjI0LCAyMzgsIDc1LCAzLCAxLCA0OCwgNzUsIDIyNCwgMjM4LCA3NSwgNiwgCisgICAgMSwgNDgsIDc1LCAyNDYsIDEzMywgNzUsIDMsIDEsIDQ4LCA3NSwgMjQ2LCAxMzMsIDc1LCA2LCAxLCAyNTQsIDE3OCwgMjM2LCAKKyAgICAxMzUsIDc1LCAzLCAxLCAyNTQsIDE3OCwgMjM2LCAxMzUsIDc1LCA2LCAxLCAyNDksIDksIDI0MiwgMjQyLCA3NSwgMywgMSwgCisgICAgMjQ5LCA5LCAyNDIsIDI0MiwgNzUsIDYsIDEsIDQ4LCA3NSwgMjQyLCAyNDIsIDc1LCAzLCAxLCA0OCwgNzUsIDI0MiwgMjQyLCAKKyAgICA3NSwgNiwgMSwgNDgsIDc1LCAxNTUsIDc1LCAzLCAxLCA0OCwgNzUsIDE1NSwgNzUsIDYsIDEsIDIzNSwgMjAxLCAxNTUsIAorICAgIDc1LCAzLCAxLCAyMzUsIDIwMSwgMTU1LCA3NSwgNiwgMSwgNDgsIDc1LCAyNDMsIDE0NSwgNzUsIDMsIDEsIDQ4LCA3NSwgCisgICAgMjQzLCAxNDUsIDc1LCA2LCAxLCA0OCwgNzUsIDI0MywgMTczLCA3NSwgMywgMSwgNDgsIDc1LCAyNDMsIDE3MywgNzUsIDYsIAorICAgIDEsIDQ4LCA3NSwgMjQ0LCAyMjYsIDc1LCAzLCAxLCA0OCwgNzUsIDI0NCwgMjI2LCA3NSwgNiwgMSwgNDgsIDc1LCAyNDgsIAorICAgIDE4MywgNzUsIDMsIDEsIDQ4LCA3NSwgMjQ4LCAxODMsIDc1LCA2LCAxLCA0OCwgNzUsIDIyNCwgMjExLCA3NSwgMywgMSwgCisgICAgNDgsIDc1LCAyMjQsIDIxMSwgNzUsIDYsIDEsIDQ4LCAyMzEsIDExNSwgMjI0LCAyMTEsIDc1LCAzLCAxLCA0OCwgMjMxLCAKKyAgICAxMTUsIDIyNCwgMjExLCA3NSwgNiwgMSwgNDgsIDIzMSwgMTE1LCAyMzIsIDkyLCA3NSwgMywgMSwgNDgsIDIzMSwgMTE1LCAKKyAgICAyMzIsIDkyLCA3NSwgNiwgMSwgNDgsIDIzMSwgMTE1LCAyMzEsIDY3LCA3NSwgMywgMSwgNDgsIDIzMSwgMTE1LCAyMzEsIAorICAgIDY3LCA3NSwgNiwgMSwgNDgsIDIzMSwgMTE1LCAyMTgsIDIzOCwgNzUsIDMsIDEsIDQ4LCAyMzEsIDExNSwgMjE4LCAyMzgsIAorICAgIDc1LCAxNiwgMjM2LCAyNDMsIDc1LCAxNiwgMjMzLCAxOTcsIDIyNywgNzUsIDc1LCAxNiwgMjI5LCAxMDksIDIyNywgNzUsIAorICAgIDc1LCAxNiwgMjIzLCAxNTIsIDc1LCAxNiwgMjIyLCAxMDYsIDIyNywgNzUsIDc1LCAxNiwgMjM2LCAxMzEsIDIyNywgNzUsIAorICAgIDc1LCAxNiwgMjI0LCAyMTIsIDIyNCwgMTE4LCA3NSwgNiwgMSwgMjUwLCA5MywgMjI0LCAyMzgsIDc1LCAzLCAxLCAyNTAsIAorICAgIDkzLCAyMjQsIDIzOCwgNzUsIDYsIDEsIDI1MCwgOTMsIDI0NCwgMjI2LCA3NSwgMywgMSwgMjUwLCA5MywgMjQ0LCAyMjYsIAorICAgIDc1LCAzNiwgMjMyLCA2MywgNTAsIDc1LCAzNiwgMjIzLCAyMzgsIDI1NCwgMiwgNzUsIDM2LCAyMjMsIDIzOCwgMjM1LCA5MiwgCisgICAgNzUsIDQ4LCAyMzEsIDExNSwgMjQ1LCA5MCwgMjIzLCAxMzYsIDc1LCA0OCwgMjMxLCAxMTUsIDI0OCwgMjEwLCAyMjgsIDgyLCAKKyAgICA3OCwgNzUsIDQ4LCAyMzEsIDExNSwgMjM3LCAyMTAsIDIyOCwgODIsIDc4LCA3NSwgNDgsIDIzMSwgMTE1LCAyMTksIDE1NCwgCisgICAgMjQ4LCAxOTEsIDc1LCAyNDUsIDEwOCwgMTMxLCAyNDMsIDE5NCwgNzUsIDI0NSwgOTAsIDIyMywgMTM2LCA3NSwgMjMzLCAKKyAgICAxMTMsIDI0OCwgMTkxLCA5NSwgMywgMSwgMjU0LCAxMzEsIDk1LCAzLCAxLCAyNTIsIDIwOSwgOTUsIDMsIDEsIDI0NCwgCisgICAgMjMwLCA5NSwgMywgMSwgMjQ4LCAxNTMsIDk1LCAzLCAxLCAyNDYsIDE5NywgOTUsIDMsIDEsIDIxOSwgODUsIDk1LCAzLCAxLCAKKyAgICAyMTcsIDg3LCA5NSwgMywgMSwgMjIyLCAxMTksIDk1LCAzLCAxLCAyMzcsIDIyMywgOTUsIDMsIDEsIDIzNiwgMjMzLCA5NSwgCisgICAgMywgMSwgMjM1LCAxNDMsIDk1LCAzLCAxLCAyMzQsIDg2LCA5NSwgMywgMSwgMjMyLCAyMTEsIDk1LCAzLCAxLCAyMzAsIAorICAgIDEzOCwgOTUsIDMsIDEsIDIyOSwgMjQzLCA5NSwgMywgMSwgMjE3LCA3NiwgOTUsIDMsIDEsIDIyNywgMjQ5LCA5NSwgMywgMSwgCisgICAgMjI2LCAxNDAsIDk1LCAzLCAxLCAyMjIsIDExMiwgOTUsIDMsIDEsIDIyMCwgODcsIDk1LCAzLCAxLCAyMjksIDEzNCwgOTUsIAorICAgIDMsIDEsIDIzNiwgMTM4LCA5NSwgMywgMSwgMjQ0LCAxMTksIDk1LCAzLCAxLCAyMjgsIDE0MCwgOTUsIDMsIDEsIDIyNCwgCisgICAgMjA5LCA5NSwgMywgMSwgMjUxLCAyMiwgOTUsIDMsIDEsIDI1MSwgMTU0LCA5NSwgMywgMSwgMjM3LCA5MSwgOTUsIDMsIDEsIAorICAgIDI1MCwgMjI0LCA5NSwgMywgMSwgMjUxLCA1NiwgOTUsIDMsIDEsIDIxOCwgMTM2LCA5NSwgMywgMSwgMjM3LCAxMDEsIDk1LCAKKyAgICAzLCAxLCAyNDMsIDIwOCwgOTUsIDMsIDEsIDI0MywgMTYyLCA5NSwgMywgMSwgMjQzLCAxMDgsIDk1LCAzLCAxLCAyMTgsIAorICAgIDIyNywgOTUsIDMsIDEsIDI0MywgMTgyLCA5NSwgMywgMSwgMjQzLCAyLCAyMjEsIDE5NywgMSwgMTg0LCAyMjEsIDE5NywgMSwgCisgICAgMjE4LCA3MiwgMjIxLCAxOTcsIDEsIDIxOCwgNzEsIDIyMSwgMTk3LCAxLCAyMTgsIDYzLCAyMjEsIDE5NywgMSwgMjE4LCAKKyAgICA2MSwgMjIxLCAxOTcsIDEsIDI1MiwgMTA4LCAyNTUsIDIsIDIxOCwgNTcsIDIyMSwgMTk3LCAxLCAyMTgsIDU3LCAyMjEsIAorICAgIDE5NywgMSwgMjE4LCA2OSwgMjIxLCAxOTcsIDEsIDIxOCwgNjYsIDIyMSwgMTk3LCAxLCAyMTgsIDY4LCAyMjEsIDE5NywgMSwgCisgICAgMjE4LCA2NywgMjIxLCAxOTcsIDEsIDIxNywgMjU0LCAyMjEsIDE5NywgMSwgMjE4LCA2NCwgMjIxLCAxOTcsIDEsIDIxOCwgCisgICAgNTUsIDIyMSwgMTk3LCAxLCAyMjAsIDI1NSwgMjE4LCA1NSwgMjIxLCAxOTcsIDEsIDIxOCwgNTIsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDU5LCAyMjEsIDE5NywgMSwgMjUyLCAxMDgsIDI1NSwgMiwgMjE4LCA1OSwgMjIxLCAxOTcsIDEsIDIyMCwgMjU1LCAKKyAgICAyMTgsIDU5LCAyMjEsIDE5NywgMSwgMjE4LCA1OCwgMjIxLCAxOTcsIDEsIDIxOCwgNzYsIDIyMSwgMTk3LCAxLCAyMTgsIAorICAgIDUzLCAyMjEsIDE5NywgMSwgMjIwLCAyNTUsIDIxOCwgNTMsIDIyMSwgMTk3LCAxLCAyMTgsIDQzLCAyMjEsIDE5NywgMSwgCisgICAgMjIwLCAyNTUsIDIxOCwgNDMsIDIyMSwgMTk3LCAxLCAyMTcsIDI1MCwgMjIxLCAxOTcsIDEsIDIxOCwgMjcsIDIyMSwgMTk3LCAKKyAgICAxLCAyNTQsIDIwMCwgMjE4LCAyNywgMjIxLCAxOTcsIDEsIDIyMCwgMjU1LCAyMTgsIDI3LCAyMjEsIDE5NywgMSwgMjE4LCAKKyAgICA1MSwgMjIxLCAxOTcsIDEsIDIxOCwgNTAsIDIyMSwgMTk3LCAxLCAyMTgsIDQ3LCAyMjEsIDE5NywgMSwgMjIwLCAyNTUsIAorICAgIDIxOCwgNjAsIDIyMSwgMTk3LCAxLCAyMjAsIDI1NSwgMjE4LCA0NSwgMjIxLCAxOTcsIDEsIDIxOCwgNDQsIDIyMSwgMTk3LCAKKyAgICAxLCAyMTcsIDIwMCwgMjIxLCAxOTcsIDEsIDIxOCwgNDEsIDIyMSwgMTk3LCAxLCAyMTgsIDQwLCAyMjEsIDE5NywgMSwgCisgICAgMjE4LCA2MiwgMjIxLCAxOTcsIDEsIDIyMCwgMjU1LCAyMTgsIDYyLCAyMjEsIDE5NywgMSwgMjUzLCAyMDgsIDIxOCwgNjIsIAorICAgIDIyMSwgMTk3LCAxLCAyMTgsIDM5LCAyMjEsIDE5NywgMSwgMjE4LCAzNywgMjIxLCAxOTcsIDEsIDIxOCwgMzgsIDIyMSwgCisgICAgMTk3LCAxLCAyMTgsIDM2LCAyMjEsIDE5NywgMSwgMjE4LCAzNSwgMjIxLCAxOTcsIDEsIDIxOCwgNzAsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDMzLCAyMjEsIDE5NywgMSwgMjE4LCAzMiwgMjIxLCAxOTcsIDEsIDIxOCwgMzEsIDIyMSwgMTk3LCAxLCAyMTgsIAorICAgIDMwLCAyMjEsIDE5NywgMSwgMjE4LCAyOCwgMjIxLCAxOTcsIDEsIDIyMiwgOTgsIDIxOCwgMjgsIDIyMSwgMTk3LCAxLCAKKyAgICAyMTgsIDI2LCAyMjEsIDE5NywgNTgsIDEsIDIzNSwgMTgyLCA3OCwgMjgsIDQsIDIzNSwgMTEsIDI4LCA0LCAyMzMsIDEzNSwgCisgICAgMjgsIDQsIDIyNywgNzMsIDI4LCA0LCAyMjQsIDI1LCAyOCwgNCwgMjI0LCAxOTksIDI4LCA0LCAyNTIsIDQwLCAyOCwgNCwgCisgICAgMjIxLCAxMzksIDI4LCA0LCAyNTAsIDE4MSwgMjgsIDQsIDIzMSwgMjAyLCAyOCwgNCwgMjMxLCA1NSwgMjgsIDQsIDI0NCwgCisgICAgNzMsIDIzMCwgMTg1LCAyOCwgNCwgMjE3LCAyMCwgMjgsIDQsIDI0OCwgMTY1LCAyOCwgNCwgMjQ5LCAxMDYsIDI4LCA0LCAKKyAgICAyMzcsIDU4LCAyOCwgNCwgMjIxLCAyMzgsIDI4LCA0LCAyNTEsIDEwLCAyOCwgNCwgMjI5LCAxMTcsIDI4LCA0LCAyMjksIAorICAgIDM2LCAyOCwgNCwgMjQ0LCAxMzAsIDI4LCA0LCAyNDQsIDEyNiwgMjgsIDQsIDI0NCwgMTI3LCAyOCwgNCwgMjQ0LCAxMjgsIAorICAgIDI4LCA0LCAyMjMsIDIxOCwgMjgsIDQsIDIyMywgMTc4LCAyOCwgNCwgMjIzLCAxODksIDI4LCA0LCAyMjMsIDIxNywgMjgsIAorICAgIDQsIDIyMywgMTkzLCAyOCwgNCwgMjIzLCAxOTQsIDI4LCA0LCAyMjMsIDE4MiwgMjgsIDQsIDI1MSwgMTE0LCAyOCwgNCwgCisgICAgMjUxLCAxMDEsIDI4LCA0LCAyNTEsIDEwMywgMjgsIDQsIDI1MSwgMTEzLCAyOCwgNCwgMjUxLCAxMTEsIDI4LCA0LCAyNTEsIAorICAgIDExMiwgMjgsIDQsIDI1MSwgMTAyLCAyOCwgNCwgMjE2LCAyNDcsIDI4LCA0LCAyMTYsIDIyNywgMjgsIDQsIDIxNiwgMjM4LCAKKyAgICAyOCwgNCwgMjE2LCAyNDYsIDI4LCA0LCAyMTYsIDI0MSwgMjgsIDQsIDIxNiwgMjQyLCAyOCwgNCwgMjE2LCAyMzAsIDI4LCAKKyAgICA0LCAyNTEsIDExMCwgMjgsIDQsIDI1MSwgMTA0LCAyOCwgNCwgMjUxLCAxMDYsIDI4LCA0LCAyNTEsIDEwOSwgMjgsIDQsIAorICAgIDI1MSwgMTA3LCAyOCwgNCwgMjUxLCAxMDgsIDI4LCA0LCAyNTEsIDEwNSwgMjgsIDQsIDIyOCwgNTEsIDI4LCA0LCAyMjgsIAorICAgIDQxLCAyOCwgNCwgMjI4LCA0NywgMjgsIDQsIDIyOCwgNTAsIDI4LCA0LCAyMjgsIDQ4LCAyOCwgNCwgMjI4LCA0OSwgMjgsIAorICAgIDQsIDIyOCwgNDYsIDI4LCA0LCAyMzUsIDIxMiwgMjgsIDQsIDIzNSwgMjA0LCAyOCwgNCwgMjM1LCAyMDcsIDI4LCA0LCAKKyAgICAyMzUsIDIxMSwgMjgsIDQsIDIzNSwgMjA4LCAyOCwgNCwgMjM1LCAyMDksIDI4LCA0LCAyMzUsIDIwNSwgMjgsIDQsIDIxOCwgCisgICAgMTAzLCAyOCwgNCwgMjE4LCA5MywgMjgsIDQsIDIxOCwgOTksIDI4LCA0LCAyMTgsIDEwMiwgMjgsIDQsIDIxOCwgMTAwLCAKKyAgICAyOCwgNCwgMjE4LCAxMDEsIDI4LCA0LCAyMTgsIDk4LCAyOCwgNCwgMjQzLCAyMzYsIDI4LCA0LCAyNDMsIDIyNywgMjgsIDQsIAorICAgIDI0MywgMjMwLCAyOCwgNCwgMjQzLCAyMzUsIDI4LCA0LCAyNDMsIDIzMiwgMjgsIDQsIDI0MywgMjMzLCAyOCwgNCwgMjQzLCAKKyAgICAyMjksIDM2LCAzMSwgMSwgMjUyLCAxNDQsIDM2LCAzMSwgMSwgMjE5LCAxNjUsIDM2LCAzMSwgMSwgMjQ0LCAxMTYsIDM2LCAKKyAgICAzMSwgMSwgMjQ5LCA5MiwgMzYsIDMxLCAxLCAyMTcsIDcyLCAzNiwgMzEsIDEsIDIxNywgOTIsIDM2LCAzMSwgMSwgMTc1LCAKKyAgICAzNiwgMzEsIDEsIDI0NiwgMjE3LCAzNiwgMzEsIDEsIDI0NiwgMjA1LCAzNiwgMzEsIDEsIDI0NiwgMTk3LCAzNiwgMzEsIDEsIAorICAgIDc0LCAzNiwgMzEsIDEsIDIyOSwgMTk4LCAzNiwgMzEsIDEsIDI0NiwgMTQ4LCAzNiwgMzEsIDEsIDI0NiwgMTM4LCAzNiwgCisgICAgMzEsIDEsIDIyMiwgODcsIDM2LCAzMSwgMSwgMTU1LCAzNiwgMzEsIDEsIDIyMSwgNTAsIDM2LCAzMSwgMSwgMjUxLCA0NiwgCisgICAgMzYsIDMxLCAxLCAyMjUsIDI1LCAzNiwgMzEsIDEsIDIyNCwgMjQ4LCAzNiwgMzEsIDEsIDI0NSwgMTcxLCAzNiwgMzEsIDEsIAorICAgIDI0NiwgMTM3LCAzNiwgMzEsIDEsIDYwLCAzNiwgMzEsIDEsIDIzOCwgMjYsIDM2LCAzMSwgMSwgMjQ4LCAxODEsIDM2LCAzMSwgCisgICAgMSwgMjMzLCAxMjMsIDIyMCwgMTAyLCAzNiwgMzEsIDEsIDIxOCwgMzYsIDM2LCAzMSwgMSwgMjE3LCAyMDAsIDM2LCAzMSwgCisgICAgMSwgMjM3LCAxNjAsIDYwLCAzNiwgMzEsIDEsIDIzNSwgMjUsIDIxNywgMTc4LCAzNiwgMzEsIDEsIDI1MiwgNzYsIDIxNywgCisgICAgMTc4LCAzNiwgMzEsIDEsIDIzNywgMTYwLCAyNTIsIDc2LCAyMTcsIDE3OCwgNDUsIDI1NCwgMTIwLCAyMjMsIDg5LCAyMzQsIAorICAgIDYzLCA0NSwgMjU0LCAxMjAsIDI0NywgMTQzLCAyMjMsIDg5LCAyMzQsIDYzLCA0MiwgMjIzLCA4OSwgMTE1LCA0NSwgMjIzLCAKKyAgICA4OSwgMTE1LCA0MiwgMjQ3LCAxNDMsIDIyMywgODksIDExNSwgNDUsIDI0NywgMTQzLCAyMjMsIDg5LCAxMTUsIDIyNywgCisgICAgMjQxLCAyMzcsIDE3OCwgMjM0LCA2MywgMjI3LCAyNDEsIDI0NywgMTQzLCAyMzcsIDE3OCwgMjM0LCA2MywgMjQ3LCAxNDMsIAorICAgIDIyMSwgMTAzLCAyMzQsIDYzLCA0MiwgMjIxLCAxMDMsIDExNSwgNDUsIDIyMSwgMTAzLCAxMTUsIDIyNywgMjQxLCAyMjMsIAorICAgIDIyNywgNDIsIDIyNywgMjQxLCAyMzAsIDE0MCwgMTE1LCA0NSwgMjI3LCAyNDEsIDIzMCwgMTQwLCAxMTUsIDI0NiwgMjUxLCAKKyAgICAyNTAsIDEyMSwgMjI5LCAyMzksIDI0NSwgMTI2LCAyMjksIDIzOSwgMjEwLCAyNDUsIDEyNiwgMjI5LCAyMzksIDI0MiwgCisgICAgMTE4LCAyNDcsIDE0MywgMjMwLCAxODAsIDI0NywgMTMwLCAyNTQsIDEyNywgMjIwLCA1MywgMjU0LCAxMjcsIDI0NywgMTQzLCAKKyAgICAyMjcsIDEwNiwgMjU0LCAxMTksIDUxLCAyMzAsIDE3NywgMjQyLCAxMjEsIDIzNywgMTcwLCAyMzcsIDE3NywgMjMwLCAyMywgCisgICAgMjUyLCAxNCwgMjQyLCAxMjIsIDIsIDI0OSwgMTMsIDIyMSwgMTgwLCAyLCAyMjcsIDk0LCA1MCwgNDIsIDEwOSwgMjI5LCAKKyAgICAyMzEsIDExNSwgNDUsIDEwOSwgMjI5LCAyMzEsIDExNSwgMjIxLCAxODAsIDIsIDYxLCA1MCwgMjIxLCAxODAsIDIsIDYxLCAKKyAgICA1NiwgNDIsIDY5LCAyNTIsIDIwMSwgMiwgMjI4LCA3NywgNDUsIDY5LCAyNTIsIDIwMSwgMiwgMjI4LCA3NywgMjIxLCAxMjAsIAorICAgIDQyLCAxNDQsIDExNSwgMjIxLCAxMjAsIDQ1LCAxNDQsIDExNSwgMjUyLCAyOSwgNDIsIDE0NCwgMTE1LCAyNTIsIDI5LCA0NSwgCisgICAgMTQ0LCAxMTUsIDQyLCAyMjQsIDEzNiwgMTA1LCAxMTUsIDQ1LCAyMjQsIDEzNiwgMTA1LCAxMTUsIDQyLCA1MSwgMjI5LCAKKyAgICAyMjksIDQ1LCA1MSwgMjI5LCAyMjksIDEyNCwgMTg4LCAxMDQsIDEzMSwgNjEsIDIyOCwgMTk2LCAxMzEsIDYxLCAxMDQsIAorICAgIDEyNCwgMTg4LCAyMjgsIDE5NiwgMjA0LCAyNDUsIDExNiwgNjEsIDIyOCwgMTk2LCAyNDUsIDE3MCwgNjEsIDc4LCAyMTAsIAorICAgIDIyOCwgODIsIDc4LCA2OSwgMjIxLCAxNzksIDIyNywgOTQsIDIyOSwgMzEsIDIxOCwgMTc0LCAyMjUsIDU1LCAyMzMsIDE5MywgCisgICAgMjQ4LCAxNDUsIDksIDMyLCAyMjcsIDE4MSwgOSwgMzIsIDI1MCwgMjAzLCA5LCAzMiwgMjI2LCA5MCwgMTA3LCA5LCAzMiwgCisgICAgMjI2LCA5MCwgMTAzLCA5LCAzMiwgMjI2LCA5MCwgMTYwLCA5LCAzMiwgMjI5LCAxNTcsIDksIDMyLCAyNTIsIDIxLCA5LCAKKyAgICAzMiwgMjIyLCAxNDYsIDksIDMyLCAyMzYsIDYxLCAxMDcsIDksIDMyLCAyMzYsIDYxLCAxMDMsIDksIDMyLCAyNDgsIDE4OSwgCisgICAgOSwgMzIsIDIyNiwgOTIsIDksIDMyLCAzLCAxMDcsIDksIDMyLCAzLCAxMDMsIDksIDMyLCAyMzUsIDE1NSwgMTA3LCA5LCAKKyAgICAzMiwgMjM1LCAxNTUsIDEwMywgOSwgMzIsIDIzNSwgMTU1LCAxNjAsIDksIDMyLCAyMzUsIDE1NSwgMTU0LCA5LCAzMiwgCisgICAgMjI0LCAzNSwgOSwgMzIsIDIyMSwgMjI5LCA5LCAzMiwgMjI0LCAzMywgMTA3LCA5LCAzMiwgMjI0LCAzMywgMTAzLCA5LCAKKyAgICAzMiwgMjQzLCAxNTQsIDEwNywgOSwgMzIsIDI0MywgMTU0LCAxMDMsIDksIDMyLCAyNDMsIDE4OSwgOSwgMzIsIDIyNywgCisgICAgMjMzLCA5LCAzMiwgMjUxLCA4LCA5LCAzMiwgMjIzLCA2OCwgOSwgMzIsIDIzMywgMTE3LCA5LCAzMiwgMjQ5LCA5MCwgOSwgCisgICAgMzIsIDIzMywgMTEwLCA5LCAzMiwgMjUwLCAyMTMsIDksIDMyLCAyMTgsIDI0MSwgMTA3LCA5LCAzMiwgMjE4LCAyNDEsIAorICAgIDEwMywgOSwgMzIsIDI0NSwgMTc5LCA5LCAzMiwgMjI5LCAyMDgsIDEwNywgOSwgMzIsIDIyOSwgMjA4LCAxMDMsIDksIDMyLCAKKyAgICAyMjQsIDExNCwgMTQ0LCAyMjEsIDk5LCAyMjEsIDYwLCA5LCAzMiwgMjUwLCAxMTAsIDksIDMyLCAyNDgsIDE1OSwgOSwgMzIsIAorICAgIDIzNywgMTIxLCA5LCAzMiwgMjUyLCAzNiwgMTE3LCAyNTAsIDE5MiwgOSwgMzIsIDI0NiwgODEsIDksIDMyLCAyMjMsIDI0MCwgCisgICAgMTA3LCA5LCAzMiwgMjIzLCAyNDAsIDEwMywgOSwgMzIsIDI1MiwgMjExLCA5LCAzMiwgMjI0LCAxMTksIDksIDMyLCAyNTEsIAorICAgIDE5OSwgMjI0LCAxMTksIDksIDMyLCAyMzIsIDEyNiwgMTA3LCA5LCAzMiwgMjMyLCAxMjYsIDEwMywgOSwgMzIsIDIzMiwgCisgICAgMTI2LCAxNjAsIDksIDMyLCAyMzIsIDEyNiwgMTU0LCA5LCAzMiwgMjMzLCAyNDMsIDksIDMyLCAyMjQsIDI0MCwgOSwgMzIsIAorICAgIDIyNywgMjM5LCA5LCAzMiwgMjQ2LCAxMDAsIDksIDMyLCAyMzAsIDE1MCwgOSwgMzIsIDI1MSwgMjU1LCAxMDcsIDksIDMyLCAKKyAgICAyNTEsIDI1NSwgMTAzLCA5LCAzMiwgMjM0LCAyMSwgOSwgMzIsIDIzMywgMTEyLCA5LCAzMiwgMjQ0LCA0MCwgMTA3LCA5LCAKKyAgICAzMiwgMjQ0LCA0MCwgMTAzLCA5LCAzMiwgMjQ0LCA0MCwgMTYwLCA5LCAzMiwgMjIxLCAxOTYsIDksIDMyLCAyNTAsIDE5MSwgCisgICAgOSwgMzIsIDIxOCwgMjE3LCAxMDcsIDksIDMyLCAyMTgsIDIxNywgMTAzLCA5LCAzMiwgMjUxLCAxOTksIDIyNiwgODQsIDksIAorICAgIDMyLCAyMjQsIDExNCwgMjQyLCAxODksIDksIDMyLCAyNDIsIDE4OSwgOSwgMzIsIDI1MSwgMTk5LCAyMjMsIDI0NywgOSwgCisgICAgMzIsIDI1MSwgMTk5LCAyMjQsIDIzNSwgOSwgMzIsIDI0NSwgMTMzLCA5LCAzMiwgMjUxLCAxOTksIDI1MSwgMTI3LCA5LCAKKyAgICAzMiwgMjI0LCAxMTQsIDIxOCwgMjU1LCA5LCAzMiwgMjE5LCAwLCAxMDcsIDksIDMyLCAyMTksIDAsIDEwMywgOSwgMzIsIAorICAgIDI1MCwgMjE0LCA5LCAzMiwgMjUxLCAxOTksIDI0NCwgNjIsIDksIDMyLCAxNzEsIDEwNywgOSwgMzIsIDE3MSwgMTAzLCA5LCAKKyAgICAzMiwgMjUxLCAxOTksIDIzNSwgMiwgOSwgMzIsIDI1MSwgMTk5LCAyNDQsIDIxMywgOSwgMzIsIDIzMywgMTA5LCAxMDcsIDksIAorICAgIDMyLCAyMzMsIDEwOSwgMTAzLCA5LCAzMiwgMjI3LCAyNDIsIDksIDMyLCAyNTIsIDQzLCA5LCAzMiwgMjUxLCAxOTksIDIyMiwgCisgICAgMTE3LCAyMzUsIDExOSwgOSwgMzIsIDI1MSwgMTk5LCAyMzUsIDEyMCwgOSwgMzIsIDI1MSwgMTk5LCAyMTgsIDE5NCwgOSwgCisgICAgMzIsIDI1MSwgMTk5LCAyNDUsIDE0MiwgOSwgMzIsIDI0NywgMywgMTA3LCA5LCAzMiwgMjQ3LCAzLCAxMDMsIDksIDMyLCAKKyAgICAyNDcsIDMsIDE2MCwgOSwgMzIsIDI1MSwgMTk5LCAyNDcsIDIsIDksIDMyLCAyNDMsIDE1OSwgOSwgMzIsIDI1MSwgMTk5LCAKKyAgICAyNDIsIDE4OCwgOSwgMzIsIDI1MiwgMzUsIDksIDMyLCAyNDQsIDExMSwgOSwgMzIsIDI1MSwgMTk5LCAyNDUsIDE3NiwgOSwgCisgICAgMzIsIDI1MSwgMTk5LCAyNTIsIDY3LCA5LCAzMiwgMjUxLCAxOTksIDIyNiwgMTUxLCA5LCAzMiwgMjI0LCAxMTQsIDIxOCwgCisgICAgMjEyLCA5LCAzMiwgMjI0LCAxMTQsIDIxOCwgMjAsIDksIDMyLCAyNTEsIDE5OSwgMjQ1LCA5OCwgOSwgMzIsIDIzNywgMTI1LCAKKyAgICAyNDYsIDEwMywgOSwgMzIsIDI1MSwgMTk5LCAyNDYsIDEwMywgOSwgMzIsIDIzNywgMTI1LCAyMjEsIDEyMSwgOSwgMzIsIAorICAgIDI1MSwgMTk5LCAyMjEsIDEyMSwgOSwgMzIsIDIzNywgMTI1LCAyNDcsIDEyMywgOSwgMzIsIDI1MSwgMTk5LCAyNDcsIDEyMywgCisgICAgOSwgMzIsIDIyMCwgMjM0LCA5LCAzMiwgMjM3LCAxMjUsIDIyMCwgMjM0LCA5LCAzMiwgMjUxLCAxOTksIDIyMCwgMjM0LCAKKyAgICA1MywgMzIsIDEwNywgNTMsIDMyLCAyMzUsIDQzLCA1MywgMzIsIDI0OCwgMTQ1LCA1MywgMzIsIDIyNCwgNTUsIDUzLCAzMiwgCisgICAgMjI2LCA4OSwgNTMsIDMyLCA5NiwgNTMsIDMyLCAxMDMsIDUzLCAzMiwgMjM1LCA2NCwgNTMsIDMyLCAyMzQsIDg2LCA1MywgCisgICAgMzIsIDIzNSwgMTAzLCA1MywgMzIsIDI0NiwgMTc4LCA1MywgMzIsIDE4NSwgNTMsIDMyLCAxMTMsIDI1MiwgMjEsIDUzLCAKKyAgICAzMiwgMjUwLCAxMTEsIDUzLCAzMiwgMjQyLCA2NSwgNTMsIDMyLCAyMjIsIDE0NiwgNTMsIDMyLCAyMzAsIDExOSwgMjUyLCAKKyAgICAyMSwgNTMsIDMyLCAyMzYsIDYwLCA1MywgMzIsIDIyOSwgMTAsIDUzLCAzMiwgMjE4LCAxNjksIDUzLCAzMiwgMjIzLCAyMzUsIAorICAgIDUzLCAzMiwgNDUsIDIzMCwgMTE5LCAyNTIsIDIxLCA1MywgMzIsIDI0MywgMTA5LCAyNDYsIDE5MiwgNTMsIDMyLCAyMjIsIAorICAgIDY1LCA1MywgMzIsIDI0OCwgMTg5LCA1MywgMzIsIDIyNiwgOTIsIDUzLCAzMiwgMjUwLCAyMDMsIDUzLCAzMiwgMjI4LCAKKyAgICAyMzEsIDUzLCAzMiwgMjU0LCAyMDgsIDUzLCAzMiwgMjMzLCAxMDUsIDUzLCAzMiwgMjQ2LCAxOTIsIDUzLCAzMiwgMjQ3LCAKKyAgICA4LCA1MywgMzIsIDIyNiwgMTA4LCA1MywgMzIsIDI0NCwgNjgsIDUzLCAzMiwgMjQ0LCA2OSwgMjI0LCA0NSwgNTMsIDMyLCAKKyAgICAyNDYsIDEwMiwgNTMsIDMyLCAyNTIsIDc1LCA1MywgMzIsIDIxOCwgMTgzLCA1MywgMzIsIDI1MSwgMjQsIDUzLCAzMiwgCisgICAgMjI3LCA2NiwgNTMsIDMyLCAyMzcsIDIyMCwgNTMsIDMyLCAyMjQsIDQzLCA1MywgMzIsIDIzNSwgMTU0LCA1MywgMzIsIAorICAgIDI1MCwgMTE5LCA1MywgMzIsIDIyMywgMjMwLCA1MywgMzIsIDIzMywgMTA3LCA1MywgMzIsIDIyNywgODQsIDUzLCAzMiwgCisgICAgMjE4LCAxNzEsIDUzLCAzMiwgMjMwLCAxMzQsIDUzLCAzMiwgMjIwLCAyMzksIDUzLCAzMiwgMjQ3LCAxMTMsIDUzLCAzMiwgCisgICAgMjI0LCAxOTIsIDIyMSwgMjI5LCA1MywgMzIsIDI0NywgMTQzLCAyNTAsIDIwMywgNTMsIDMyLCAxNzEsIDIyMywgMTIyLCAKKyAgICA1MywgMzIsIDEyNCwgMjQzLCAxODcsIDUzLCAzMiwgMjI0LCAxOTQsIDUzLCAzMiwgMjUyLCAyNCwgNTMsIDMyLCAyMjQsIAorICAgIDMyLCA1MywgMzIsIDI1MiwgMywgNTMsIDMyLCAyMjMsIDE0NSwgNTMsIDMyLCAyNDMsIDE1MywgNTMsIDMyLCAyNDMsIDE5NSwgCisgICAgNTMsIDMyLCAyNDgsIDE0OCwgNTMsIDMyLCAyNDMsIDE4OSwgNTMsIDMyLCAyNTIsIDE0LCA1MywgMzIsIDIyNywgMjMzLCAKKyAgICA1MywgMzIsIDIyNiwgOTksIDUzLCAzMiwgMjQ4LCAyMTIsIDUzLCAzMiwgMjUzLCAyMTMsIDUzLCAzMiwgMjIzLCAyMjcsIAorICAgIDUzLCAzMiwgMjMxLCAxODQsIDUzLCAzMiwgMjIzLCA2OCwgNTMsIDMyLCAyMjYsIDExOCwgNTMsIDMyLCAyMzMsIDExNywgCisgICAgNTMsIDMyLCAyMjEsIDk4LCA1MywgMzIsIDIzNSwgMTc4LCA1MywgMzIsIDIyMywgMTM2LCA1MywgMzIsIDI0OSwgOTAsIDUzLCAKKyAgICAzMiwgMjE4LCAyMjYsIDUzLCAzMiwgMjQ4LCAxNjgsIDIzMSwgMTg0LCA1MywgMzIsIDI1MCwgMTY1LCA1MywgMzIsIDI0NSwgCisgICAgODQsIDUzLCAzMiwgMjUwLCAyMTEsIDUzLCAzMiwgMjIzLCAxNDgsIDUzLCAzMiwgMjE4LCAyNDAsIDUzLCAzMiwgMjQ1LCAKKyAgICAxNzksIDUzLCAzMiwgMjUwLCAyMTAsIDUzLCAzMiwgMjQ1LCAyMzUsIDUzLCAzMiwgNTEsIDIxOCwgMTUxLCA1MywgMzIsIAorICAgIDE0NCwgMjIxLCA5OSwgMjIxLCA2MCwgNTMsIDMyLCAyMjQsIDUyLCA1MywgMzIsIDI0NSwgMjQzLCA1MywgMzIsIDI1MCwgCisgICAgMTEwLCA1MywgMzIsIDI0OCwgMTU5LCA1MywgMzIsIDIyOCwgMjI4LCA1MywgMzIsIDIzNywgMTIxLCA1MywgMzIsIDIzNCwgCisgICAgMywgNTMsIDMyLCAyMjEsIDE3OCwgNTMsIDMyLCAyMjMsIDMxLCA1MywgMzIsIDIzNSwgNTksIDUzLCAzMiwgMjIwLCAzMywgCisgICAgNTMsIDMyLCAyNDUsIDIwMiwgNTMsIDMyLCAyNTIsIDM2LCAxMTcsIDI1MCwgMTkyLCA1MywgMzIsIDIyNCwgMTM3LCA1MywgCisgICAgMzIsIDI0NywgMTQzLCAyMjIsIDYyLCA1MywgMzIsIDIxOCwgMjA3LCA1MywgMzIsIDIyNCwgNjIsIDUzLCAzMiwgMjQ4LCAKKyAgICAyMDIsIDUzLCAzMiwgMjQ2LCA4MSwgNTMsIDMyLCAyMjMsIDI0OSwgNTMsIDMyLCA2NSwgNTMsIDMyLCAyMjMsIDEzOCwgNTMsIAorICAgIDMyLCAyMjMsIDIzOSwgNTMsIDMyLCAyMjEsIDEwOCwgNTMsIDMyLCAyNDQsIDQ1LCA1MywgMzIsIDI1MSwgMTE5LCA1MywgCisgICAgMzIsIDIyMywgMTYwLCA1MywgMzIsIDI1MiwgMjExLCA1MywgMzIsIDIyNywgMTQ1LCA1MywgMzIsIDIyNCwgMTE5LCA1MywgCisgICAgMzIsIDIzNywgMTE3LCA1MywgMzIsIDIzMiwgMTI1LCA1MywgMzIsIDIyNCwgMjQwLCA1MywgMzIsIDI0NSwgMjI4LCA1MywgCisgICAgMzIsIDIzMCwgMTUwLCA1MywgMzIsIDI1NCwgMTI2LCA1MywgMzIsIDIyOSwgNDcsIDUzLCAzMiwgMjQ3LCAxMSwgNTMsIDMyLCAKKyAgICAyNTEsIDI1NCwgNTMsIDMyLCAyMzQsIDIxLCA1MywgMzIsIDIzMywgMTU2LCA1MywgMzIsIDIyNSwgNzMsIDUzLCAzMiwgCisgICAgMjU0LCAyMywgNTMsIDMyLCAyMzMsIDExMiwgNTMsIDMyLCAyMjEsIDEyNCwgNTMsIDMyLCAyMzAsIDExMSwgNTMsIDMyLCAKKyAgICAyNTIsIDM4LCA1MywgMzIsIDIyMywgMTM0LCA1MywgMzIsIDI1MCwgMTc0LCA1MywgMzIsIDI0NCwgMzksIDUzLCAzMiwgCisgICAgMjIxLCAxOTYsIDUzLCAzMiwgMjM3LCAxOTIsIDUzLCAzMiwgMjUyLCA0NCwgNTMsIDMyLCAyMTksIDAsIDI0NiwgMTkyLCAKKyAgICA1MywgMzIsIDI1MCwgMTkxLCA1MywgMzIsIDIxOCwgMjE2LCA1MywgMzIsIDIyNiwgODQsIDUzLCAzMiwgMjQyLCAxODksIAorICAgIDUzLCAzMiwgMjIzLCAyNDcsIDUzLCAzMiwgMjE5LCAxODYsIDUzLCAzMiwgMjUyLCAxNDEsIDUzLCAzMiwgMjI5LCA3OCwgCisgICAgNTMsIDMyLCAyNTIsIDIyNywgNTMsIDMyLCAyMjQsIDIzNSwgNTMsIDMyLCAyMjcsIDIwMiwgNTMsIDMyLCAyMjcsIDEwLCAKKyAgICA1MywgMzIsIDI0NSwgMTMzLCA1MywgMzIsIDI1MiwgMzcsIDUzLCAzMiwgMjUxLCAxMjcsIDUzLCAzMiwgMjUyLCA1OCwgNTMsIAorICAgIDMyLCAyMzMsIDExNCwgNTMsIDMyLCAyMTgsIDI1NSwgNTMsIDMyLCAyNTAsIDIxNCwgNTMsIDMyLCAyMTgsIDE5MiwgNTMsIAorICAgIDMyLCAyNDgsIDE5OSwgNTMsIDMyLCAyMTksIDg2LCA1MywgMzIsIDI0NCwgNjIsIDUzLCAzMiwgMjM1LCAyLCA1MywgMzIsIAorICAgIDI0NCwgMjEzLCA1MywgMzIsIDIzMywgMTA4LCA1MywgMzIsIDIyNCwgNTQsIDUzLCAzMiwgMjI0LCAxOTIsIDIyMiwgMTM0LCAKKyAgICAyNTIsIDY3LCA1MywgMzIsIDIyNywgMjQyLCA1MywgMzIsIDI1MiwgNDMsIDUzLCAzMiwgMjE4LCAxNjYsIDUzLCAzMiwgCisgICAgMjQ2LCAzLCA1MywgMzIsIDIzNSwgMTE5LCA1MywgMzIsIDIyMiwgMTE3LCAyMzUsIDExOSwgNTMsIDMyLCAyMzUsIDExNiwgCisgICAgNTMsIDMyLCAyMjQsIDgsIDUzLCAzMiwgMjM1LCAxMjAsIDUzLCAzMiwgMjE4LCAxOTQsIDUzLCAzMiwgMjQ1LCAxNDIsIDUzLCAKKyAgICAzMiwgMjQ3LCAyLCA1MywgMzIsIDI0MywgMTU5LCA1MywgMzIsIDI0NSwgMTA2LCA1MywgMzIsIDI0MiwgMTg4LCA1MywgMzIsIAorICAgIDI1MiwgMzUsIDUzLCAzMiwgMjIyLCAxMjIsIDUzLCAzMiwgMjQzLCAyMDAsIDUzLCAzMiwgMjQ1LCAxOTUsIDUzLCAzMiwgCisgICAgMjI2LCAxNzIsIDIxOCwgMTkyLCA1MywgMzIsIDI1MSwgMTIxLCA1MywgMzIsIDI0NCwgMTExLCA1MywgMzIsIDI0NSwgMTc2LCAKKyAgICA1MywgMzIsIDI1MiwgNjcsIDUzLCAzMiwgMjI2LCAxNTEsIDUzLCAzMiwgMjQ5LCA4MCwgNTMsIDMyLCAyMTgsIDIxMiwgNTMsIAorICAgIDMyLCAyNDMsIDEzOSwgNTMsIDMyLCAyMTgsIDIwLCA1MywgMzIsIDIzMywgMTYzLCA1MywgMzIsIDI1MiwgNTMsIDUzLCAzMiwgCisgICAgMjQ2LCAyMDIsIDUzLCAzMiwgMjQ1LCA5OCwgNTMsIDMyLCAyMjEsIDc2LCA1MywgMzIsIDI0NywgMTE1LCA1MywgMzIsIAorICAgIDIyNywgMjI4LCA1MywgMzIsIDIzMSwgMTg1LCA1MywgMzIsIDI0NiwgMTAzLCA1MywgMzIsIDIyMSwgMTIxLCA1MywgMzIsIAorICAgIDI0NywgMTIzLCA1MywgMzIsIDIyMCwgMjM0LCA1MywgMzIsIDI0NSwgMTQzLCA5OCwgMjQ5LCA0NiwgMTI2LCA0MiwgMTk5LCAKKyAgICAyMjcsIDEwOSwgOTgsIDI0OSwgNDYsIDEyNiwgNzEsIDE5OSwgNTYsIDk4LCAyNDksIDQ2LCAxMjYsIDQyLCAxOTksIDIzMywgCisgICAgMTkzLCAyNSwgMjI3LCAxMDksIDk4LCAyNDksIDQ2LCAxMjYsIDcxLCAxOTksIDIzMywgMTkzLCAyNSwgNTYsIDk4LCAyNDksIAorICAgIDQ2LCAxMjYsIDI0NSwgOTAsIDIyMywgNDcsIDk4LCAyNDksIDQ2LCAxMjYsIDIyMywgNDgsIDI0NSwgOTcsIDUwLCA5OCwgCisgICAgMjQ5LCA0NiwgMTI2LCAyMjMsIDQ4LCAyNDUsIDk3LCA1NiwgOTgsIDI0OSwgNDYsIDEyNiwgMjIzLCA0OCwgMjQ1LCA5NywgCisgICAgMjM1LCAxMTUsIDk4LCAyNDksIDQ2LCAxMjYsIDIyMywgNDgsIDI0NSwgOTcsIDIyMCwgNjAsIDIzNSwgMTE1LCA5OCwgMjQ5LCAKKyAgICA0NiwgMTI2LCAyMjMsIDQ4LCAyNDUsIDk3LCAyMjAsIDYwLCAyMjcsIDEwOSwgOTgsIDI0OSwgNDYsIDEyNiwgMjIzLCA0OCwgCisgICAgMjQ1LCA5NywgMjM0LCAyMzcsIDIzNSwgMTE1LCA5OCwgMjQ5LCA0NiwgMTI2LCAyMzAsIDc2LCA5OCwgMjIzLCAyNTQsIDk4LCAKKyAgICAyNTAsIDE2OCwgOTgsIDI0NSwgOTAsIDIyMywgMTM2LCAyNDgsIDE5NiwgNzgsIDIzNywgMTE4LCAyMzcsIDIwOSwgMjIzLCAKKyAgICAxNTksIDEwMCwgOTgsIDIzNywgMTM4LCA3OCwgOTgsIDI1MCwgMTk0LCA3OCwgOTgsIDU0LCAyMTcsIDg0LCA0MiwgMjU0LCAKKyAgICAxMjAsIDExNSwgNDUsIDI1NCwgMTIwLCAxMTUsIDQyLCA1MSwgMjU0LCAxMjAsIDExNSwgNDUsIDUxLCAyNTQsIDEyMCwgCisgICAgMTE1LCA0MiwgMjUwLCAxMjQsIDExNSwgNDUsIDI1MCwgMTI0LCAxMTUsIDQyLCA2NywgMjUwLCAxMjQsIDExNSwgNDUsIDY3LCAKKyAgICAyNTAsIDEyNCwgMTE1LCA0MiwgODQsIDIzNSwgOTEsIDExNSwgNDUsIDg0LCAyMzUsIDkxLCAxMTUsIDIyOSwgMTQsIDc4LCAKKyAgICAyNDQsIDE2MywgNzgsIDQyLCAyMjEsIDExNCwgMjI0LCAyMzYsIDExNSwgNDUsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMTE1LCAKKyAgICA0MiwgNjcsIDIzNSwgOTEsIDExNSwgNDUsIDY3LCAyMzUsIDkxLCAxMTUsIDQyLCA2NywgMjIxLCAxMTQsIDIyNCwgMjM2LCAKKyAgICAxMTUsIDQ1LCA2NywgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIDQyLCA2NywgNDAsIDExNSwgNDUsIDY3LCA0MCwgMTE1LCAKKyAgICAyMTgsIDIzNywgMjQ5LCAxNDYsIDIxMCwgNTEsIDIyOCwgMjM2LCAyMjgsIDY5LCA3OCwgNTEsIDIyOCwgMjM2LCAyMjgsIAorICAgIDY5LCA3OCwgMTA5LCA1MSwgMjI4LCAyMzYsIDIyOCwgNjksIDc4LCAyMjksIDE0LCAxNjQsIDI0NiwgMywgMjQzLCAxODUsIAorICAgIDIzMSwgMTA3LCAxMDcsIDI0MywgMTg1LCAyMzEsIDEwNywgMTAzLCAyNDMsIDE4NSwgMjMxLCAxMDcsIDE2MCwgMjQzLCAKKyAgICAxODUsIDIzMSwgMTA3LCAxNTQsIDI0MywgMTg1LCAyMzEsIDEwNywgMTc0LCAyNDMsIDE4NSwgMjMxLCAxMDcsIDE4MiwgCisgICAgMjQzLCAxODUsIDIzMSwgMTA3LCAxOTEsIDI0MywgMTg1LCAyMzEsIDEwNywgMTg1LCAyNDMsIDE4NSwgMjMxLCAxMDcsIAorICAgIDE5MCwgOTgsIDIzNSwgODMsIDE0NSwgNzgsIDk4LCAyMjcsIDg4LCAxNDUsIDc4LCA5OCwgMjQ5LCA1MiwgMTQ1LCA3OCwgCisgICAgOTgsIDI0NiwgMTc3LCAxNDUsIDc4LCAyMiwgMjI0LCAxMDksIDYxLCAxNDUsIDc4LCAyMiwgNTEsIDYxLCAxNDUsIDc4LCAKKyAgICAyMTgsIDIzNSwgMjQ5LCAxNDYsIDY5LCAyMzYsIDIzMiwgMjI3LCAxODIsIDc4LCA2OSwgMjM2LCAyMzIsIDIyNywgMTgyLCAKKyAgICAyLCAyMTksIDcwLCAyMjQsIDksIDc4LCA2OSwgMjM2LCAyMzIsIDIyNywgMTgyLCAxNjQsIDIyMCwgNjAsIDI0MywgMTk0LCAKKyAgICA2OSwgMjM2LCAyMzIsIDIyNywgMTgyLCAyLCAyMTksIDcwLCAyMjQsIDksIDE2NCwgMjIwLCA2MCwgMjQzLCAxOTQsIDY5LCAKKyAgICAyMzYsIDIzMiwgMjI3LCAxODIsIDE2NCwgMjM0LCAyMzcsIDI0MywgMTk0LCAzNCwgMjI5LCAxNCwgNzgsIDk4LCAxODMsIAorICAgIDIzNSwgNDQsIDI0NSwgMjI1LCAyMjUsIDU1LCAxMDAsIDI0MywgMTg1LCAyMzEsIDEwNywgMjIyLCA2NSwgMjQzLCAxODUsIAorICAgIDIzMSwgMTA3LCAyMjAsIDIxOSwgMjQzLCAxODUsIDIzMSwgMTA3LCAyMjEsIDI0NSwgNjksIDk4LCAyMzcsIDEzOCwgNzgsIAorICAgIDIzNCwgNTIsIDc4LCAyMjksIDIyNSwgMjU0LCAxNDMsIDc4LCA5OCwgNDEsIDIzNywgMjExLCA5OCwgMTQ0LCAyNDUsIDE4OCwgCisgICAgMjIzLCAyNTQsIDEzNiwgMSwgMywgNjAsIDEzNiwgMSwgNjAsIDEzNiwgMSwgMywgNzIsIDEzNiwgMSwgNzIsIDEzNiwgMSwgCisgICAgMywgNjgsIDEzNiwgMSwgNjgsIDEzNiwgMSwgMywgNzMsIDEzNiwgMSwgNzMsIDEzNiwgMSwgMywgNzQsIDEzNiwgMSwgNzQsIAorICAgIDEzNiwgMSwgMTc1LCAxMzYsIDEsIDI0NSwgMCwgMTM2LCAxLCAyMzYsIDExMywgMTM2LCAxLCAyNDQsIDEwMywgMTM2LCAxLCAKKyAgICAyMzYsIDcsIDEzNiwgMSwgMjQ0LCAxNywgMTM2LCAxLCAyMzYsIDE4NCwgMTM2LCAxLCAyNDQsIDE5MSwgMTM2LCAxLCAyMzYsIAorICAgIDU3LCAxMzYsIDEsIDI0NCwgNjgsIDEzNiwgMSwgMjI2LCAxNzcsIDEzNiwgMSwgMjE3LCAxMTQsIDEzNiwgMSwgMjI0LCAKKyAgICAxNDAsIDEzNiwgMSwgMjE3LCA0MiwgMTM2LCAxLCAyMjMsIDEwMywgMTM2LCAxLCAyMTcsIDEzLCAxMzYsIDEsIDIyNiwgOTQsIAorICAgIDEzNiwgMSwgMjE3LCA5MiwgMTM2LCAxLCAyMjQsIDI2LCAxMzYsIDEsIDIxNywgMjEsIDEzNiwgMSwgMjIyLCAxNTUsIDEzNiwgCisgICAgMSwgMjQ5LCAyMDcsIDEzNiwgMSwgMjIxLCAyMDUsIDEzNiwgMSwgMjQ5LCAxNSwgMTM2LCAxLCAzLCAyMjEsIDAsIDEzNiwgCisgICAgMSwgMjIxLCAwLCAxMzYsIDEsIDI0NywgMTExLCAxMzYsIDEsIDIyMiwgODcsIDEzNiwgMSwgMjQ5LCA5MiwgMTM2LCAxLCAKKyAgICAxMDEsIDEzNiwgMSwgMjQ4LCAxNjcsIDEzNiwgMSwgMjA4LCAxMzYsIDEsIDIzMiwgNjIsIDEzNiwgMSwgMjMxLCAxNDQsIAorICAgIDEzNiwgMSwgMjMyLCAxNDEsIDEzNiwgMSwgMjMxLCAyMDQsIDEzNiwgMSwgMTU1LCAxMzYsIDEsIDI1MiwgMjM3LCAxMzYsIAorICAgIDEsIDE4NywgMTM2LCAxLCAyNDMsIDExMiwgMTM2LCAxLCAyNTIsIDg0LCAxMzYsIDEsIDIyOSwgMTA4LCAxMzYsIDEsIDI0MiwgCisgICAgMTczLCAxMzYsIDEsIDI1MSwgMjQ4LCAxMzYsIDEsIDIyOCwgMjAyLCAxMzYsIDEsIDI0MywgMTYyLCAxMzYsIDEsIDI1MiwgCisgICAgMTQ0LCAxMzYsIDEsIDIyOSwgMTk4LCAxMzYsIDEsIDI0MywgNCwgMTM2LCAxLCAyNTIsIDQxLCAxMzYsIDEsIDIyOSwgMzcsIAorICAgIDEzNiwgMSwgMTk2LCAxMzYsIDEsIDIzMywgMTk2LCAxMzYsIDEsIDIzMywgOTksIDEzNiwgMSwgMjM0LCAyNSwgMTM2LCAxLCAKKyAgICAyMzMsIDEzNiwgMTM2LCAxLCAzLCAxODQsIDEzNiwgMSwgMTg0LCAxMzYsIDEsIDMsIDIxNywgMjAwLCAxMzYsIDEsIDIxNywgCisgICAgMjAwLCAxMzYsIDEsIDMsIDIxNywgMjMxLCAxMzYsIDEsIDIxNywgMjMxLCAxMzYsIDEsIDIwMywgMTM2LCAxLCAyMjcsIAorICAgIDE0NywgMTM2LCAxLCAyMjcsIDIyLCAxMzYsIDEsIDIyNywgMjE2LCAxMzYsIDEsIDIyNywgNzUsIDEzNiwgMSwgMywgMjE5LCAKKyAgICA3LCAxMzYsIDEsIDIxOSwgNywgMTM2LCAxLCAyMTgsIDIwNCwgMTM2LCAxLCAyMTgsIDIyNywgMTM2LCAxLCAyMTgsIDE4NywgCisgICAgMTM2LCAxLCAyMDcsIDEzNiwgMSwgMjE5LCA1NiwgMTM2LCAxLCAzLCAxNzUsIDEzNiwgMSwgMywgMjM2LCAxODQsIDM2LCAKKyAgICAyMzYsIDIwMiwgMjE5LCA3MCwgMjI0LCA5LCA3OCwgMzYsIDIzNiwgMjAyLCAyMjUsIDcyLCAyMjQsIDksIDc4LCAyMzYsIAorICAgIDIwMiwgMjE5LCA3MCwgMjI0LCA5LCA3OCwgMjM2LCAyMDIsIDIyNSwgNzIsIDIyNCwgOSwgNzgsIDEzNiwgMjM3LCAxMzgsIAorICAgIDc4LCAxMzYsIDIxOSwgNzAsIDIzNywgMTM4LCA3OCwgMTM2LCAyNDgsIDIzNCwgMjE3LCAyMTMsIDIzNiwgMjAyLCA1MSwgCisgICAgMjQyLCAxMjEsIDUyLCAxLCAzLCA2MCwgNTIsIDEsIDYwLCA1MiwgMSwgMywgNzIsIDUyLCAxLCA3MiwgNTIsIDEsIDMsIDY4LCAKKyAgICA1MiwgMSwgNjgsIDUyLCAxLCAzLCA3MywgNTIsIDEsIDczLCA1MiwgMSwgMywgNzQsIDUyLCAxLCA3NCwgNTIsIDEsIDE3NSwgCisgICAgNTIsIDEsIDI0NSwgMCwgNTIsIDEsIDIzNiwgMTEzLCA1MiwgMSwgMjQ0LCAxMDMsIDUyLCAxLCAyMzYsIDcsIDUyLCAxLCAKKyAgICAyNDQsIDE3LCA1MiwgMSwgMjM2LCAxODQsIDUyLCAxLCAyNDQsIDE5MSwgNTIsIDEsIDIzNiwgNTcsIDUyLCAxLCAyNDQsIAorICAgIDY4LCA1MiwgMSwgMjI2LCAxNzcsIDUyLCAxLCAyMTcsIDExNCwgNTIsIDEsIDIyNCwgMTQwLCA1MiwgMSwgMjE3LCA0MiwgCisgICAgNTIsIDEsIDIyMywgMTAzLCA1MiwgMSwgMjE3LCAxMywgNTIsIDEsIDIyNiwgOTQsIDUyLCAxLCAyMTcsIDkyLCA1MiwgMSwgCisgICAgMjI0LCAyNiwgNTIsIDEsIDIxNywgMjEsIDUyLCAxLCAyMjIsIDE1NSwgNTIsIDEsIDI0OSwgMjA3LCA1MiwgMSwgMjIxLCAKKyAgICAyMDUsIDUyLCAxLCAyNDksIDE1LCA1MiwgMSwgMywgMjIxLCAwLCA1MiwgMSwgMjIxLCAwLCA1MiwgMSwgMjQ3LCAxMTEsIAorICAgIDUyLCAxLCAyMjIsIDg3LCA1MiwgMSwgMjQ5LCA5MiwgNTIsIDEsIDEwMSwgNTIsIDEsIDI0OCwgMTY3LCA1MiwgMSwgMjA4LCAKKyAgICA1MiwgMSwgMjMyLCA2MiwgNTIsIDEsIDIzMSwgMTQ0LCA1MiwgMSwgMjMyLCAxNDEsIDUyLCAxLCAyMzEsIDIwNCwgNTIsIDEsIAorICAgIDE1NSwgNTIsIDEsIDI1MiwgMjM3LCA1MiwgMSwgMTg3LCA1MiwgMSwgMjQzLCAxMTIsIDUyLCAxLCAyNTIsIDg0LCA1MiwgMSwgCisgICAgMjI5LCAxMDgsIDUyLCAxLCAyNDIsIDE3MywgNTIsIDEsIDI1MSwgMjQ4LCA1MiwgMSwgMjI4LCAyMDIsIDUyLCAxLCAyNDMsIAorICAgIDE2MiwgNTIsIDEsIDI1MiwgMTQ0LCA1MiwgMSwgMjI5LCAxOTgsIDUyLCAxLCAyNDMsIDQsIDUyLCAxLCAyNTIsIDQxLCA1MiwgCisgICAgMSwgMjI5LCAzNywgNTIsIDEsIDE5NiwgNTIsIDEsIDIzMywgMTk2LCA1MiwgMSwgMjMzLCA5OSwgNTIsIDEsIDIzNCwgMjUsIAorICAgIDUyLCAxLCAyMzMsIDEzNiwgNTIsIDEsIDMsIDE4NCwgNTIsIDEsIDE4NCwgNTIsIDEsIDMsIDIxNywgMjAwLCA1MiwgMSwgCisgICAgMjE3LCAyMDAsIDUyLCAxLCAzLCAyMTcsIDIzMSwgNTIsIDEsIDIxNywgMjMxLCA1MiwgMSwgMjAzLCA1MiwgMSwgMjI3LCAKKyAgICAxNDcsIDUyLCAxLCAyMjcsIDIyLCA1MiwgMSwgMjI3LCAyMTYsIDUyLCAxLCAyMjcsIDc1LCA1MiwgMSwgMywgMjE5LCA3LCAKKyAgICA1MiwgMSwgMjE5LCA3LCA1MiwgMSwgMjE4LCAyMDQsIDUyLCAxLCAyMTgsIDIyNywgNTIsIDEsIDIxOCwgMTg3LCA1MiwgMSwgCisgICAgMjA3LCA1MiwgMSwgMjE5LCA1NiwgNTIsIDEsIDMsIDE3NSwgNTIsIDEsIDMsIDIzNiwgMTg0LCA1MiwgMSwgMjE5LCAxODksIAorICAgIDUyLCAxLCAyMTksIDk0LCA1MiwgMSwgMjE5LCAxNjUsIDUyLCAxLCAyMTksIDcyLCA1MiwgMjMzLCAxOTMsIDI0OCwgMTQ1LCAKKyAgICAyMzYsIDIwMiwgMjI4LCAyMjMsIDIyNCwgOSwgNzgsIDUyLCAyMzcsIDEzOCwgNzgsIDUyLCAyMTksIDcwLCAyMzcsIDEzOCwgCisgICAgNzgsIDUyLCAyNDgsIDIzNCwgMjM2LCAzMCwgMjAwLCAxLCAyNTMsIDIwNCwgMjAwLCAxLCAyMzAsIDU5LCAyMDAsIDEsIAorICAgIDE4OSwgMjAwLCAxLCAyNDYsIDc0LCAyMDAsIDEsIDI1MCwgNDYsIDIwMCwgMSwgMjIyLCAyMDEsIDIwMCwgMSwgMjA3LCAKKyAgICAyMDAsIDEsIDE1MywgMjAwLCAxLCAyNDUsIDY3LCAyMDAsIDEsIDIzNywgMTcsIDIwMCwgMSwgMjQzLCAyMjUsIDIwMCwgMSwgCisgICAgMjM3LCAxMjYsIDIwMCwgMSwgMjI4LCAxNjMsIDIwMCwgMSwgMjE4LCAxNTEsIDIwMCwgMSwgMjE3LCA4MSwgMjAwLCAxLCAKKyAgICAyNTEsIDcwLCAyMDAsIDEsIDIyNSwgMjcsIDIwMCwgMSwgMTUyLCAyMDAsIDEsIDIxNywgMTU3LCAyMDAsIDEsIDI1MSwgCisgICAgMjAyLCAyMDAsIDEsIDE5OCwgMjAwLCAxLCA2MCwgMjAwLCAxLCA3NCwgMjAwLCAxLCA3MywgMjAwLCAxLCAyNDYsIDIzOSwgCisgICAgMjAwLCAxLCAyNTQsIDE5NiwgMjAwLCAxLCAyNDYsIDIzNywgMjAwLCAxLCAyNTMsIDIzMiwgMjAwLCAxLCAyMzAsIDg2LCAKKyAgICAyMDAsIDEsIDI1NCwgMTMxLCAyMDAsIDEsIDI0NiwgMTk3LCAyMDAsIDEsIDI1NCwgMTIzLCAyMDAsIDEsIDI0NiwgMTg1LCAKKyAgICAyMDAsIDEsIDI0NiwgMTQ4LCAyMDAsIDEsIDcyLCAyMDAsIDEsIDY4LCAyMDAsIDEsIDIzNywgMTM3LCAyMDAsIDEsIDIxNiwgCisgICAgMjE2LCAyMDAsIDEsIDIzMiwgMTE3LCAyMDAsIDEsIDI0NCwgNzIsIDIwMCwgMSwgMjM4LCAwLCAyMiwgMSwgMjM2LCA4NiwgCisgICAgMjIsIDEsIDIyMywgMjExLCAyMiwgMSwgMjM2LCA3OSwgMjIsIDEsIDIzMiwgNTUsIDIyLCAxLCAyMzIsIDUzLCAyMiwgMSwgCisgICAgMjMyLCA1MiwgMjIsIDEsIDIyMSwgMTkyLCAyMiwgMSwgMjIzLCAyMDAsIDIyLCAxLCAyMjcsIDE0MCwgMjIsIDEsIDIyNywgCisgICAgMTM1LCAyMiwgMSwgMjI3LCAxMzIsIDIyLCAxLCAyMjcsIDEyNSwgMjIsIDEsIDIyNywgMTIwLCAyMiwgMSwgMjI3LCAxMTUsIAorICAgIDIyLCAxLCAyMjcsIDEyNiwgMjIsIDEsIDIyNywgMTM4LCAyMiwgMSwgMjMzLCAxODcsIDIyLCAxLCAyMjksIDk5LCAyMiwgMSwgCisgICAgMjIzLCAyMDgsIDIyLCAxLCAyMjksIDg4LCAyMiwgMSwgMjI0LCAxMDQsIDIyLCAxLCAyMjMsIDIwNSwgMjIsIDEsIDIzOCwgCisgICAgMjIsIDIyLCAxLCAyNTAsIDIzMCwgMjIsIDEsIDIyMywgMjE1LCAyMiwgMSwgMjUxLCAyOSwgMjIsIDEsIDIzNiwgMTI4LCAKKyAgICAyMiwgMSwgMjIyLCAwLCAyMiwgMSwgMjI5LCAxMjcsIDIyLCAxLCAyNDMsIDEwNiwgMjIsIDEsIDYwLCAyMiwgMSwgMjU0LCAKKyAgICAyMzQsIDIyLCAxLCAxODQsIDIyLCAxLCAyMTgsIDY1LCAyMiwgMSwgMjQ2LCAxNjgsIDIyLCAxLCA3MywgMjIsIDEsIDIxOCwgCisgICAgMTYsIDIyLCAxLCAyMTgsIDI1LCAyMiwgMSwgNzQsIDIyLCAxLCAyMTksIDcsIDIyLCAxLCAyMTksIDQsIDIyLCAxLCAyMzAsIAorICAgIDE2NywgMjIsIDEsIDIxNywgMjMxLCAyMiwgMSwgNjgsIDIyLCAxLCAyMTgsIDIxOSwgMjIsIDEsIDIxOCwgMjI3LCAyMiwgMSwgCisgICAgMjE4LCAyMDQsIDIyLCAxLCAyMTcsIDIwMCwgMjIsIDEsIDI0NiwgMTE1LCAyMiwgMSwgMjE3LCAyNTAsIDIyLCAxLCA3MiwgCisgICAgMjIsIDI0NSwgMTg1LCAyMiwgMSwgMjIzLCAyMDksIDIyLCAxLCAyMzIsIDQ1LCAyMiwgMSwgMjMyLCA0NywgMjIsIDEsIAorICAgIDIzMiwgNTAsIDIyLCAxLCAyMjcsIDEzMywgMjIsIDEsIDIyNywgMTE0LCAyMiwgMSwgMjI3LCAxMjIsIDIyLCAxLCAyMjcsIAorICAgIDEyNywgMjIsIDEsIDIyNywgMTEyLCAyMiwgMSwgMjMzLCAxODAsIDIyLCAxLCAyMzMsIDE3NywgMjIsIDEsIDIzMywgMTgxLCAKKyAgICAyMiwgMSwgMjM2LCAyMjAsIDIyLCAxLCAyMjksIDk0LCAyMiwgMSwgMjI5LCA4MCwgMjIsIDEsIDIyOSwgODYsIDIyLCAxLCAKKyAgICAyMjksIDgzLCAyMiwgMSwgMjI5LCA5NywgMjIsIDEsIDIyOSwgODEsIDIyLCAxLCAyMzYsIDIxOCwgMjIsIDEsIDIzNiwgCisgICAgMjE2LCAyMiwgMSwgMjI0LCA5NywgMjIsIDEsIDIyNCwgOTUsIDIyLCAxLCAyMjQsIDg3LCAyMiwgMSwgMjI0LCA5MiwgMjIsIAorICAgIDEsIDIyNCwgMTAyLCAyMiwgMSwgMjMwLCAxLCAyMiwgMSwgMjIzLCAyMTIsIDIyLCAxLCAyMTgsIDYsIDIyLCAxLCAyMTgsIAorICAgIDIsIDIyLCAxLCAyMTgsIDMsIDIyLCAxLCAyMzYsIDIxOSwgMjIsIDEsIDIyMywgMjEzLCAyMiwgMSwgMjE4LCAxMiwgMjIsIAorICAgIDEsIDIxNywgMjI1LCAyMiwgMSwgMjE3LCAyMjQsIDIyLCAxLCAyMTcsIDIyNywgMjIsIDEsIDIxNywgMTkxLCAyMiwgMSwgCisgICAgMjE3LCAxOTIsIDIyLCAxLCAyMTcsIDE5NSwgMjIsIDEsIDI1NCwgNjAsIDIyLCAxLCAyNTQsIDU0LCA5OCwgMjU0LCAxMTIsIAorICAgIDIzNSwgMzMsIDc4LCA5OCwgMjU0LCAxMTIsIDIyNywgMTYwLCA3OCwgOTgsIDI1NCwgMTEyLCAxMzEsIDc4LCA5OCwgMjU0LCAKKyAgICAxMTIsIDEyNCwgNzgsIDk4LCAyNTQsIDExMiwgMTQ4LCA3OCwgOTgsIDI1NCwgMTEyLCAyNDUsIDExNiwgNzgsIDk4LCAyNTQsIAorICAgIDExMiwgMjIxLCAxMjAsIDc4LCA5OCwgMjU0LCAxMTIsIDIzMywgMTkzLCA3OCwgOTgsIDI1NCwgMTEyLCAyNTIsIDI5LCA3OCwgCisgICAgOTgsIDI1NCwgMTEyLCAyNDUsIDE3OCwgNzgsIDk4LCAyNTQsIDExMiwgMjI2LCA5MCwgNzgsIDk4LCAyNTQsIDExMiwgMjIxLCAKKyAgICAyNTIsIDc4LCA5OCwgMjU0LCAxMTIsIDI0NSwgMTEwLCA3OCwgOTgsIDI1NCwgMTEyLCAyNDMsIDE1MiwgNzgsIDk4LCAyNTQsIAorICAgIDExMiwgMjQ3LCA5LCA3OCwgOTgsIDI1NCwgMTEyLCAyMzQsIDg3LCA3OCwgMjAwLCAxLCAyNTEsIDI0OCwgMjAwLCAxLCAKKyAgICAyMTcsIDQyLCAyMDAsIDEsIDIzNywgOTgsIDIwMCwgMSwgMjQ0LCAxNywgMjAwLCAxLCAyNDYsIDI1MCwgMjAwLCAxLCAyNDYsIAorICAgIDE4MywgMjAwLCAxLCAyMzAsIDEyNywgMjAwLCAxLCAyMzAsIDEzMSwgMjAwLCAxLCAyMzcsIDE1NiwgMjAwLCAxLCAyNTQsIAorICAgIDExNCwgMjAwLCAxLCAyMzcsIDE5OCwgMjAwLCAxLCAyMjAsIDY4LCAyMDAsIDEsIDIzNywgMjM4LCAyMDAsIDEsIDIzMiwgCisgICAgMTAxLCAyMDAsIDEsIDI1NCwgMTkwLCAyMDAsIDEsIDI1MywgMjI4LCAyMDAsIDEsIDI1NCwgMTQwLCAyMDAsIDEsIDIzMCwgCisgICAgMTQ2LCAyMDAsIDEsIDIzMCwgMTMzLCAyMDAsIDEsIDIzNywgMTk1LCAyMDAsIDM5LCAxLCAyMzAsIDU5LCAyMDAsIDM5LCAxLCAKKyAgICAyMjIsIDIwMSwgMjAwLCAzOSwgMSwgMjM3LCAxNywgMjAwLCAzOSwgMSwgMjQzLCAyMjUsIDksIDIxNCwgMjIyLCAyMDEsIDksIAorICAgIDIxNCwgMjE4LCAyMTMsIDksIDIxNCwgMjE4LCAxMzEsIDksIDIxNCwgMjUxLCAyMTQsIDksIDIxNCwgMjIzLCAzNywgOSwgCisgICAgMjE0LCAyNDIsIDExMSwgOSwgMjE0LCAyNDIsIDExNSwgOSwgMjE0LCAyNDIsIDE3OSwgOSwgMjE0LCAyNDIsIDExMiwgOSwgCisgICAgMjE0LCAyMjIsIDIwNCwgOSwgMjE0LCAyNDIsIDExNCwgOSwgMjE0LCAyNDIsIDExMCwgOSwgMjE0LCAyNDIsIDE3NywgOSwgCisgICAgMjE0LCAyNDIsIDExMywgOSwgMjE0LCAyNDIsIDEwOSwgOSwgMjE0LCAyMDcsIDksIDIxNCwgMjQzLCAyMjUsIDksIDIxNCwgCisgICAgMTk4LCA5LCAyMTQsIDIzMCwgNTksIDksIDIxNCwgMjI0LCAwLCA5LCAyMTQsIDI1MCwgNDYsIDksIDIxNCwgMjQyLCAxMTYsIAorICAgIDksIDIxNCwgMjQzLCAxMjIsIDksIDIxNCwgMjIyLCAyMTMsIDksIDIxNCwgMjIzLCAyMiwgOSwgMjE0LCAyMjMsIDE2OCwgOSwgCisgICAgMjE0LCAyMjUsIDMyLCA5LCAyMTQsIDIyOSwgMjAwLCA5LCAyMTQsIDIyOCwgMTY1LCA5LCAyMTQsIDIyMSwgMTQwLCA5LCAKKyAgICAyMTQsIDIyMiwgMjAzLCA5LCAyMTQsIDIyMywgMzAsIDksIDIxNCwgMjQyLCAxMjMsIDksIDIxNCwgMjQyLCAxMDgsIDksIAorICAgIDIxNCwgMjI5LCAxNDMsIDksIDIxNCwgMjI4LCAxNjMsIDUyLCAxLCAzLCAyMzYsIDcsIDUyLCAxLCAzLCAyMjQsIDE0MCwgCisgICAgNTIsIDEsIDMsIDIyMywgMTAzLCA1MiwgMSwgMywgMTAxLCA1MiwgMSwgMywgMjMxLCAxNDQsIDUyLCAxLCAzLCAxNTUsIDUyLCAKKyAgICAxLCAzLCAyNDMsIDExMiwgNTIsIDEsIDMsIDI0MiwgMTczLCA1MiwgMSwgMywgMjQzLCAxNjIsIDUyLCAxLCAzLCAyNDMsIDQsIAorICAgIDUyLCAxLCAzLCAyMzMsIDk5LCA1MiwgMSwgMywgMjAzLCA1MiwgMSwgMywgMjI3LCAxNDcsIDUyLCAxLCAzLCAyMjcsIDIyLCAKKyAgICA1MiwgMSwgMywgMjI3LCAyMTYsIDUyLCAxLCAzLCAyMjcsIDc1LCA4MiwgMjIsIDIzNiwgODYsIDgyLCAyMiwgMjMyLCA1NSwgCisgICAgODIsIDIyLCAyMjEsIDE5MiwgODIsIDIyLCAyMjcsIDE0MCwgODIsIDIyLCAyMzMsIDE4NywgODIsIDIyLCAyMjksIDk5LCAKKyAgICA4MiwgMjIsIDIyNCwgMTA0LCA4MiwgMjIsIDIzOCwgMjIsIDgyLCAyMiwgMjUwLCAyMzAsIDgyLCAyMiwgMjUxLCAyOSwgODIsIAorICAgIDIyLCAyMzYsIDEyOCwgODIsIDIyLCAyMjIsIDAsIDgyLCAyMiwgMjI5LCAxMjcsIDgyLCAyMiwgMjQzLCAxMDYsIDgyLCAyMiwgCisgICAgMjM2LCA4NywgNjAsIDgyLCAyMiwgMjMyLCA1NiwgNjAsIDgyLCAyMiwgMjIxLCAxOTMsIDYwLCA4MiwgMjIsIDIyNywgMTQxLCAKKyAgICA2MCwgODIsIDIyLCAyMzMsIDE4OCwgNjAsIDgyLCAyMiwgMjI5LCAxMDAsIDYwLCA4MiwgMjIsIDIyNCwgMTA1LCA2MCwgODIsIAorICAgIDIyLCAyMzgsIDIzLCA2MCwgODIsIDIyLCAyNTAsIDIzMSwgNjAsIDgyLCAyMiwgMjUxLCAzMCwgNjAsIDgyLCAyMiwgMjM2LCAKKyAgICAxMjksIDYwLCA4MiwgMjIsIDIyMiwgMSwgNjAsIDgyLCAyMiwgMjI5LCAxMjgsIDYwLCA4MiwgMjIsIDI0MywgMTA3LCA2MCwgCisgICAgODIsIDIyLCAyNTAsIDIzMSwgNjgsIDgyLCAyMzYsIDM0LCAxMjYsIDIzMCwgMTU2LCA4MiwgMjM2LCAzNCwgMTI2LCAxNDIsIAorICAgIDI0MiwgMTczLCA4MiwgMTM4LCAxMDcsIDgyLCAxMzgsIDEwMywgODIsIDEzOCwgMTYwLCA4MiwgMTM4LCAxNTQsIDgyLCAKKyAgICAxMzgsIDE3NCwgODIsIDEzOCwgMTgyLCA4MiwgMTM4LCAxOTEsIDgyLCAxMzgsIDE4NSwgODIsIDEzOCwgMTkwLCA4MiwgCisgICAgMTM4LCAyMjIsIDY1LCA4MiwgMTM4LCAyMzMsIDExNywgODIsIDEzOCwgMjQ1LCAxNzksIDgyLCAxMzgsIDIxOCwgMjQwLCAKKyAgICA4MiwgMTM4LCAyMTgsIDE3OSwgODIsIDEzOCwgMjMzLCAyMzgsIDgyLCAxMzgsIDI0NywgOCwgODIsIDEzOCwgMjIzLCA2OCwgCisgICAgODIsIDEzOCwgMjIzLCAxMzksIDgyLCAxMzgsIDI0MywgMTY4LCA4MiwgMTM4LCAyMjQsIDIzLCA4MiwgMTM4LCAyMzIsIAorICAgIDIxOCwgODIsIDEzOCwgMjIzLCAyNDgsIDgyLCAxMzgsIDI0NSwgMTg0LCA4MiwgMTM4LCAyNTAsIDE1NCwgODIsIDEzOCwgCisgICAgMjM1LCAxODEsIDgyLCAxMzgsIDIyNywgMTc4LCA4MiwgMTM4LCAyNTEsIDE1OSwgODIsIDEzOCwgMjIzLCAxMDYsIDgyLCAKKyAgICAxMzgsIDIyMywgNTYsIDgyLCAxMzgsIDI0NiwgMTc2LCA4MiwgMTM4LCAyMjcsIDE3MCwgODIsIDEzOCwgMjU0LCAxNTMsIAorICAgIDgyLCAxMzgsIDI0NSwgMjA4LCA4MiwgMTM4LCAyMjcsIDE2OCwgODIsIDEzOCwgMjI1LCA3MywgODIsIDEzOCwgMjI3LCAKKyAgICAyMTUsIDM0LCAxMzgsIDIyOCwgODEsIDM0LCAxMzgsIDIzNiwgMTAzLCAzNCwgMTM4LCAyMjYsIDEwNywgMzQsIDEzOCwgCisgICAgMjM2LCAzMCwgMzQsIDU0LCAyMjIsIDY2LCAyMzAsIDEzOSwgODQsIDIyMywgMjI3LCAzNCwgNTQsIDIyMCwgMjIwLCAyMzAsIAorICAgIDEzOSwgODQsIDIyMywgMjI3LCAzNCwgNTQsIDIyMSwgMjQ2LCAyMzAsIDEzOSwgODQsIDIyMywgMjI3LCAzNCwgNTQsIDI0NSwgCisgICAgMTIwLCAyMzAsIDEzOSwgODQsIDIyMywgMjI3LCAzNCwgNTQsIDI0NSwgMTk3LCAyMzAsIDEzOSwgODQsIDIyMywgMjI3LCAKKyAgICAzNCwgNTQsIDIyNCwgNzAsIDIzMCwgMTM5LCA4NCwgMjIzLCAyMjcsIDM0LCA1NCwgMjI1LCAzOSwgMjMwLCAxMzksIDg0LCAKKyAgICAyMjMsIDIyNywgMzQsIDU0LCAyNDYsIDIyOCwgMjMwLCAxMzksIDg0LCAyMjMsIDIyNywgMjI5LCAyMjEsIDU1LCAzNCwgNTQsIAorICAgIDIyMCwgMjIwLCAxMDcsIDM0LCA1NCwgMjIwLCAyMjAsIDEwMywgMzQsIDU0LCAyMjAsIDIyMCwgMTYwLCAzNCwgNTQsIDIyMCwgCisgICAgMjIwLCAxNTQsIDM0LCA1NCwgMjIwLCAyMjAsIDE3NCwgMzQsIDU0LCAyMjAsIDIyMCwgMTgyLCAzNCwgNTQsIDIyMCwgMjIwLCAKKyAgICAxOTEsIDM0LCA1NCwgMjIwLCAyMjAsIDE4NSwgMzQsIDU0LCAyMjAsIDIyMCwgMTkwLCAzNCwgNTQsIDIyMSwgMjQ1LCAzNCwgCisgICAgNTQsIDIyMSwgMjQ2LCAxMDcsIDM0LCA1NCwgMjIxLCAyNDYsIDEwMywgMzQsIDU0LCAyMjEsIDI0NiwgMTYwLCAzNCwgNTQsIAorICAgIDIyMSwgMjQ2LCAxNTQsIDM0LCA1NCwgMjIxLCAyNDYsIDE3NCwgMzQsIDIyLCAyMzYsIDg2LCAzNCwgMjIsIDIzMiwgNTUsIAorICAgIDM0LCAyMiwgMjIxLCAxOTIsIDM0LCAyMiwgMjI3LCAxNDAsIDM0LCAyMiwgMjMzLCAxODcsIDM0LCAyMiwgMjI5LCA5OSwgCisgICAgMzQsIDIyLCAyMjQsIDEwNCwgMzQsIDIyLCAyMzgsIDIyLCAzNCwgMjIsIDI1MCwgMjMwLCAzNCwgMjIsIDI1MSwgMjksIDM0LCAKKyAgICAyMiwgMjM2LCAxMjgsIDM0LCAyMiwgMjIyLCAwLCAzNCwgMjIsIDIyOSwgMTI3LCAzNCwgMjIsIDI0MywgMTA2LCAzNCwgMjIsIAorICAgIDIzNiwgODcsIDYwLCAzNCwgMjIsIDIzMiwgNTYsIDYwLCAzNCwgMjIsIDIyMSwgMTkzLCA2MCwgMzQsIDIyLCAyMjcsIDE0MSwgCisgICAgNjAsIDM0LCAyMiwgMjMzLCAxODgsIDYwLCAzNCwgMjIsIDIyOSwgMTAwLCA2MCwgMzQsIDIyLCAyMjQsIDEwNSwgNjAsIDM0LCAKKyAgICAyMiwgMjM4LCAyMywgNjAsIDM0LCAyMiwgMjUwLCAyMzEsIDYwLCAzNCwgMjIsIDI1MSwgMzAsIDYwLCAzNCwgMjIsIDIzNiwgCisgICAgMTI5LCA2MCwgMzQsIDIyLCAyMjIsIDEsIDYwLCAzNCwgMjIsIDIyOSwgMTI4LCA2MCwgMzQsIDIyLCAyNDMsIDEwNywgNjAsIAorICAgIDM0LCAyMzYsIDM0LCAxMjYsIDI1MSwgNjEsIDM0LCAyMzYsIDM0LCAxMjYsIDIzNywgNDAsIDM0LCAyMiwgMjM4LCAyMywgCisgICAgNjgsIDIzNiwgMzQsIDIyMywgMTU5LCAxMDAsIDM0LCAxMzgsIDEwNywgMzQsIDEzOCwgMTAzLCAzNCwgMTM4LCAxNjAsIDM0LCAKKyAgICAxMzgsIDE1NCwgMzQsIDEzOCwgMTc0LCAzNCwgMTM4LCAxODIsIDM0LCAxMzgsIDE5MSwgMzQsIDEzOCwgMTg1LCAzNCwgCisgICAgMTM4LCAxOTAsIDM0LCAxMzgsIDIyMiwgNjUsIDM0LCAxMzgsIDIzMywgMTE3LCAzNCwgMTM4LCAyNDUsIDE3OSwgMzQsIAorICAgIDEzOCwgMjE4LCAyNDAsIDM0LCAxMzgsIDIxOCwgMTc5LCAzNCwgMTM4LCAyMzMsIDIzOCwgMzQsIDEzOCwgMjQ3LCA4LCAzNCwgCisgICAgMTM4LCAyMjMsIDY4LCAzNCwgMTM4LCAyMjMsIDEzOSwgMzQsIDEzOCwgMjQzLCAxNjgsIDM0LCAxMzgsIDIyNCwgMjMsIDM0LCAKKyAgICAxMzgsIDIzMiwgMjE4LCAzNCwgMTM4LCAyMjMsIDI0OCwgMzQsIDEzOCwgMjQ1LCAxODQsIDM0LCAxMzgsIDI1MCwgMTU0LCAKKyAgICAzNCwgMTM4LCAyMzUsIDE4MSwgMzQsIDEzOCwgMjI2LCA4OCwgMzQsIDEzOCwgMjM0LCA4OSwgMzQsIDEzOCwgMjQ1LCAyMTYsIAorICAgIDM0LCAxMzgsIDIyMywgNzksIDM0LCAxMzgsIDI0NiwgOTcsIDM0LCAxMzgsIDIyOCwgMjMzLCAzNCwgMTM4LCAyNTMsIDIzNiwgCisgICAgMzQsIDEzOCwgMjM3LCAxMzksIDM0LCAxMzgsIDIyNywgMTY4LCAzNCwgMTM4LCAyNTAsIDEyNywgMzQsIDEzOCwgMjUwLCAKKyAgICAxMTgsIDM0LCAxMzgsIDI0MywgOTksIDM0LCAxMzgsIDI1MSwgODQsIDM0LCAxMzgsIDIzNCwgMjM5LCAzNCwgMTM4LCAyMzUsIAorICAgIDExNSwgMzQsIDEzOCwgMjI3LCAxMDksIDM0LCAxMzgsIDIzNCwgMTksIDM0LCAxMzgsIDIyNywgMTg5LCAzNCwgMTM4LCAKKyAgICAyMjMsIDEwNiwgMzQsIDEzOCwgMjIzLCA1NiwgMzQsIDEzOCwgMjQ2LCAxNzYsIDM0LCAxMzgsIDIyNywgMTcwLCAzNCwgCisgICAgMTM4LCAyNTQsIDE1MywgMzQsIDEzOCwgMjMyLCA0MiwgMzQsIDU0LCAyMjEsIDI0NiwgMTgyLCAzNCwgNTQsIDIyMSwgMjQ2LCAKKyAgICAxOTEsIDM0LCA1NCwgMjIxLCAyNDYsIDE4NSwgMzQsIDU0LCAyMjEsIDI0NiwgMTkwLCAzNCwgNTQsIDI0NSwgMTE5LCAzNCwgCisgICAgNTQsIDI0NSwgMTIwLCAxMDcsIDM0LCA1NCwgMjQ1LCAxMjAsIDEwMywgMzQsIDU0LCAyNDUsIDEyMCwgMTYwLCAzNCwgNTQsIAorICAgIDI0NSwgMTIwLCAxNTQsIDM0LCA1NCwgMjQ1LCAxMjAsIDE3NCwgMzQsIDU0LCAyNDUsIDEyMCwgMTgyLCAzNCwgNTQsIDI0NSwgCisgICAgMTIwLCAxOTEsIDM0LCA1NCwgMjQ1LCAxMjAsIDE4NSwgMzQsIDU0LCAyNDUsIDEyMCwgMTkwLCAzNCwgNTQsIDI0NSwgMTk2LCAKKyAgICA5OCwgMTgzLCAxNiwgMzUsIDIzNywgMTE5LCA5OCwgMTgzLCAxNiwgMzUsIDI0NSwgMjI3LCA5OCwgMTgzLCAxNiwgMzUsIAorICAgIDIzNCwgNjksIDk4LCAxODMsIDE2LCAzNSwgMjU0LCA3MSwgOTgsIDE4MywgMTYsIDM1LCAyMzQsIDQ1LCA5OCwgMTgzLCAxNiwgCisgICAgMzUsIDIzNywgMzgsIDk4LCAxODMsIDE2LCAzNSwgMjM3LCAzOSwgOTgsIDE4MywgMTYsIDM1LCAyNTMsIDIyOSwgOTgsIAorICAgIDE4MywgMTYsIDM1LCAyMjUsIDUzLCA5OCwgMTgzLCAxNiwgMzUsIDIzMCwgMTcwLCA5OCwgMTgzLCAxNiwgMzUsIDIzMSwgCisgICAgMTc1LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgODcsIDQwLCAyNDMsIDEyMiwgNDAsIDI0NiwgMTQ0LCA0MCwgMjQ2LCAxMDUsIAorICAgIDIzNSwgNDksIDIzNSwgNjYsIDU1LCAzNCwgNTIsIDYwLCAzNCwgNTIsIDcyLCAzNCwgNTIsIDY4LCAzNCwgNTIsIDczLCAzNCwgCisgICAgNTIsIDc0LCAzNCwgNTIsIDE3NSwgMzQsIDUyLCAyMzYsIDExMywgMzQsIDUyLCAyMzYsIDcsIDM0LCA1MiwgMjM2LCAxODQsIAorICAgIDM0LCA1MiwgMjM2LCA1NywgMzQsIDUyLCAyMjYsIDE3NywgMzQsIDUyLCAyMjQsIDE0MCwgMzQsIDUyLCAyMjMsIDEwMywgCisgICAgMzQsIDUyLCAyMjYsIDk0LCAzNCwgNTIsIDIyNCwgMjYsIDM0LCA1MiwgMjIyLCAxNTUsIDM0LCA1MiwgMjIxLCAyMDUsIDM0LCAKKyAgICA1MiwgMjIxLCAwLCAzNCwgNTIsIDIyMiwgODcsIDM0LCA1MiwgMTAxLCAzNCwgNTIsIDIwOCwgMzQsIDUyLCAyMzIsIDYyLCAKKyAgICAzNCwgNTIsIDIzMSwgMTQ0LCAzNCwgNTIsIDIzMiwgMTQxLCAzNCwgNTIsIDIzMSwgMjA0LCAzNCwgNTIsIDE1NSwgMzQsIAorICAgIDUyLCAyNDMsIDExMiwgMzQsIDUyLCAyNDIsIDE3MywgMzQsIDUyLCAyNDMsIDE2MiwgMzQsIDUyLCAyNDMsIDQsIDM0LCA1MiwgCisgICAgMTk2LCAzNCwgNTIsIDIzMywgMTk2LCAzNCwgNTIsIDIzMywgOTksIDM0LCA1MiwgMjM0LCAyNSwgMzQsIDUyLCAyMzMsIAorICAgIDEzNiwgMzQsIDUyLCAxODQsIDM0LCA1MiwgMjE3LCAyMDAsIDM0LCA1MiwgMjE3LCAyMzEsIDM0LCA1MiwgMjAzLCAzNCwgCisgICAgNTIsIDIyNywgMTQ3LCAzNCwgNTIsIDIyNywgMjIsIDM0LCA1MiwgMjI3LCAyMTYsIDM0LCA1MiwgMjI3LCA3NSwgMzQsIDUyLCAKKyAgICAyMTksIDcsIDM0LCA1MiwgMjE4LCAyMDQsIDM0LCA1MiwgMjE4LCAyMjcsIDM0LCA1MiwgMjE4LCAxODcsIDQwLCAyNTQsIAorICAgIDkxLCA0MCwgMjU0LCAxNSwgNDAsIDI1NCwgMTA4LCA0MCwgMjU1LCAxNiwgNDAsIDIzNywgMTk5LCA0MCwgMjM3LCAxNzIsIAorICAgIDQwLCAyMjAsIDY2LCA0MCwgMjQ2LCAxMjQsIDQwLCAyNDYsIDI0OCwgNDAsIDIzMCwgMTMwLCA0MCwgMjMwLCAxMjUsIDQwLCAKKyAgICAyMzYsIDI0MiwgNDAsIDIzNiwgMjE0LCA0MCwgMjM2LCAyMTIsIDQwLCAyNDQsIDIxNywgNDAsIDI0NCwgMjI1LCA0MCwgCisgICAgMjQ0LCA5NCwgNDAsIDI0NCwgOTAsIDQwLCAyMzUsIDIwMywgNDAsIDI0NCwgODQsIDQwLCAyMzYsIDk3LCA0MCwgMjM2LCAKKyAgICA5NiwgNDAsIDIzNiwgOTUsIDQwLCAyMzYsIDk0LCA0MCwgMjQzLCAyNTEsIDQwLCAyNDMsIDI1MCwgNDAsIDIzNSwgMjQ0LCAKKyAgICA0MCwgMjM1LCAyNDYsIDQwLCAyMzYsIDE4MCwgNDAsIDIzNiwgMzIsIDQwLCAyMzYsIDM5LCA0MCwgMjI2LCAxNjIsIDQwLCAKKyAgICAyMjYsIDEzNiwgNDAsIDIyNCwgODUsIDQwLCAyMjUsIDU4LCA0MCwgMjI1LCA1NywgNDAsIDI0OSwgMjA0LCA0MCwgMjQ5LCAKKyAgICA0NSwgNDAsIDI0OCwgMTQ2LCA0MCwgMjIxLCAxMzQsIDQwLCAyMzIsIDIxNCwgNDAsIDIzMSwgMTc2LCA0MCwgMjQzLCAxOTksIAorICAgIDQwLCAyMzAsIDQwLCA0MCwgMjMwLCAzOSwgNDAsIDI1MiwgMjM1LCA0MCwgMjI5LCAxMDUsIDQwLCAyMjksIDc0LCA0MCwgCisgICAgMjI5LCA3NSwgNDAsIDI1MiwgNjUsIDQwLCAyNDIsIDE3MiwgNDAsIDI0MiwgMTY4LCA0MCwgMjUxLCAyMjMsIDQwLCAyNDIsIAorICAgIDE1NSwgNDAsIDI0MywgMTQzLCA0MCwgMjI5LCAxNTAsIDQwLCAyMjksIDE3OCwgNDAsIDI0MywgMTI5LCA0MCwgMjI5LCAKKyAgICAxNzYsIDQwLCAyMjksIDE4OSwgNDAsIDI1MiwgMTMzLCA0MCwgMjI5LCAyNywgNDAsIDI1MiwgMzEsIDQwLCAyNDIsIDI0OSwgCisgICAgNDAsIDIyOSwgMjIsIDQwLCAyNDIsIDI0NSwgNDAsIDI0MiwgMjQ2LCA0MCwgMjM0LCA5OCwgNDAsIDIzNCwgOTUsIDQwLCAKKyAgICAyMzQsIDEwMiwgNDAsIDIzNCwgNTksIDQwLCAyMzQsIDgwLCA0MCwgMjMzLCAxNjcsIDQwLCAyMzMsIDE0OSwgNDAsIDIzMywgCisgICAgMTQ4LCA0MCwgMjM0LCA5LCA0MCwgMjM0LCA3LCA0MCwgMjM0LCAxMCwgNDAsIDIxOCwgNzUsIDQwLCAyMTgsIDczLCA0MCwgCisgICAgMjE3LCAxOTAsIDQwLCAyMjcsIDg2LCA0MCwgMjI3LCA5MCwgNDAsIDIyNywgMywgNDAsIDIyNiwgMjU0LCA0MCwgMjI3LCAKKyAgICAxODgsIDQwLCAyMjcsIDE4NiwgNDAsIDIxOCwgMjM5LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyMTcsIDg0LCA5OCwgCisgICAgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAxMDcsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDEwMywgOTgsIDE4MywgMTYsIAorICAgIDM1LCAyNDIsIDE4NCwgMTYwLCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAxNTQsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAKKyAgICAxODQsIDE3NCwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMTgyLCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAxOTEsIAorICAgIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDE4NSwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMTkwLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0MiwgMTg0LCAyMjIsIDY1LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyNDYsIDIxMSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDIsIDE4NCwgMjIwLCAyMjEsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDIyMSwgMjQ3LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0MiwgMTg0LCAyNDUsIDExMSwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMjQ1LCAyMDAsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDIyNCwgNzcsIDk4LCAxODMsIDE2LCAzNSwgMjQyLCAxODQsIDIyNSwgNDEsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDI0NiwgMjMzLCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyMzIsIDI5LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0MiwgMTg0LCAyMjAsIDIxOSwgOTgsIDE4MywgMTYsIDM1LCAyNDIsIDE4NCwgMjIwLCAyMTMsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQyLCAxODQsIDIyMCwgMjA5LCA5OCwgMTgzLCAxNiwgMzUsIDI0MiwgMTg0LCAyMjAsIDIxMCwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDIsIDE4NCwgMjIwLCAyMTUsIDQwLCAyNDIsIDE3OCwgNDAsIDI0OSwgMjA3LCA0MCwgMjUzLCAyMzIsIDQwLCAKKyAgICAxMzUsIDQwLCAyMzAsIDc5LCA0MCwgMjI5LCAyMDEsIDQwLCAyNDgsIDE2OSwgNDAsIDI0OCwgMTcwLCAyMjMsIDIyNiwgNDAsIAorICAgIDI0OCwgMTcwLCAyNTAsIDg4LCA0MCwgMjM3LCAxMzcsIDQwLCAyNDYsIDE0NywgMjMyLCAyMTksIDI0MywgMTQ0LCA0MCwgCisgICAgMjQ2LCAxNDcsIDIzMiwgMjE5LCAyMjIsIDIyMSwgNDAsIDI0NiwgMTQ3LCAyMzIsIDIxOSwgMjIyLCAxMzIsIDQwLCAyNDYsIAorICAgIDE0NywgMjMyLCAyMTksIDIzNCwgNiwgNDAsIDI1MCwgMTIwLCA0MCwgMjMwLCA0NCwgMjU0LCAxMzMsIDQwLCAyMDgsIDQwLCAKKyAgICAyMzMsIDEwMCwgNjAsIDQwLCAxOTYsIDQwLCAxNzUsIDQwLCAyMzYsIDE4NywgNDAsIDIzNCwgNDEsIDQwLCAyNDQsIDIwNSwgCisgICAgNDAsIDI1MSwgMTYxLCA0MCwgMjM2LCAxODYsIDQwLCAyMjksIDE0NCwgNDAsIDIzMiwgMTE5LCA0MCwgMjMzLCAxMDAsIAorICAgIDI0NiwgNzQsIDQwLCAyMzMsIDEwMCwgMjQ1LCA2NywgNDAsIDIzMywgMjMwLCA0MCwgMjM2LCAxNTEsIDQwLCAyNDIsIDExNiwgCisgICAgNDAsIDIzNiwgMTE1LCA0MCwgMjMzLCAxOTgsIDQwLCAyNDQsIDEwNSwgNDAsIDIyMSwgMjA3LCA0MCwgMjMzLCAxMDAsIAorICAgIDE1MywgNDAsIDIzMywgMTQzLCA0MCwgMjQ4LCAxNzcsIDQwLCAyMzYsIDY4LCA0MCwgMjQ1LCAxNDEsIDQwLCAyMzEsIDIxOSwgCisgICAgNDAsIDIzMywgMTAwLCAxODksIDQwLCAyMzMsIDE0MCwgNDAsIDI1MCwgMTgzLCA0MCwgMjM2LCA2MiwgNDAsIDIzMywgMTQxLCAKKyAgICAyMjMsIDIyNiwgNDAsIDI1MCwgMTg0LCAyMjMsIDIyNiwgNDAsIDIzNCwgMTg3LCAyMjMsIDIyNiwgNDAsIDIzNiwgNjMsIAorICAgIDIyMywgMjI2LCA0MCwgMjMzLCAxNDEsIDI1MCwgODgsIDQwLCAyNTAsIDE4NCwgMjUwLCA4OCwgNDAsIDIzNCwgMTg3LCAKKyAgICAyNTAsIDg4LCA0MCwgMjM2LCA2MywgMjUwLCA4OCwgNDAsIDIzNCwgMTg3LCAxMDQsIDE5OCwgNDAsIDIzNCwgMTg3LCAxMDQsIAorICAgIDIyNiwgMjM1LCAyMjMsIDIyNiwgNDAsIDE4NywgNDAsIDIzNiwgMjYsIDQwLCAyMzMsIDEwMiwgNDAsIDI0NCwgNDgsIDQwLCAKKyAgICAyMjcsIDI1MiwgNDAsIDIyNywgMjUzLCAxMDQsIDE5OCwgNDAsIDIyNywgMjUzLCAxMDQsIDIyNiwgMjM1LCAyMjMsIDIyNiwgCisgICAgNDAsIDIyOCwgMjEzLCA0MCwgMjMxLCAxNDgsIDQwLCAyMzMsIDEwMCwgMTk4LCA0MCwgMjMzLCAxMDEsIDQwLCAyMjgsIAorICAgIDE4MywgNDAsIDIzMSwgODcsIDQwLCAyMzMsIDEwMCwgMjE2LCAyMTYsIDQwLCAyMzMsIDUyLCA0MCwgMjM1LCAyMzcsIDQwLCAKKyAgICAyMzMsIDUzLCAyMzQsIDksIDQwLCAyMjgsIDE4MiwgNDAsIDIzMSwgODYsIDQwLCAyMzMsIDEwMCwgMjE5LCA0MCwgNDAsIAorICAgIDIzMywgNTAsIDQwLCAyMzUsIDIzNSwgNDAsIDIzMywgNTEsIDIzNCwgOSwgNDAsIDIzNywgMTgsIDIzMCwgMTU5LCA0MCwgCisgICAgMjM0LCAxODcsIDIzMCwgMTU5LCA0MCwgMjU0LCAxNDAsIDQwLCAyNTIsIDIwLCA0MCwgMjUxLCAxMTUsIDQwLCAyNTEsIAorICAgIDEwMCwgNDAsIDI1MSwgMjAzLCAxMDQsIDIzNiwgMTUxLCA0MCwgMjUwLCAxODIsIDQwLCAyNDksIDEzNCwgNDAsIDI0MywgCisgICAgMjM3LCA0MCwgMTU1LCA0MCwgMjQyLCAxNzksIDQwLCAyMzcsIDIyMywgNDAsIDIzNiwgNzUsIDQwLCAyMzYsIDYzLCAyNTEsIAorICAgIDE0MiwgNDAsIDIzNiwgOSwgNDAsIDIzNSwgMTUsIDQwLCAyMzUsIDE0LCA0MCwgMjM1LCA4LCA0MCwgMjM0LCAxOTksIDQwLCAKKyAgICAyMzQsIDQyLCAyMjQsIDQzLCA0MCwgMjMzLCAxNjYsIDQwLCAyMzMsIDEyOSwgNDAsIDIyOSwgMTQyLCA0MCwgMjI5LCA0MCwgCisgICAgNDAsIDIyOSwgNSwgNDAsIDIyOSwgMywgNDAsIDIyMywgMjIwLCA0MCwgMjIzLCA0MSwgNDAsIDIxOCwgMjI4LCA0MCwgMjIwLCAKKyAgICAxMSwgMTA0LCAxODksIDQwLCAxMTIsIDEwNCwgMTg5LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAxMDcsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDEwMywgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMTYwLCA5OCwgMTgzLCAxNiwgMzUsIAorICAgIDI0OSwgMTM3LCAxNTQsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDE3NCwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgCisgICAgMTgyLCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAxOTEsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDE4NSwgOTgsIAorICAgIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMTkwLCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjIsIDY1LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyNDYsIDIxMSwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMjEsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMSwgMjQ3LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyNDUsIDExMSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjQ1LCAyMDAsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyNCwgNzcsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyNSwgNDEsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDI0NiwgMjMzLCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyMzIsIDI5LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxOSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMTMsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjA5LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxMCwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMTUsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjE2LCA5OCwgMTgzLCAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxMSwgOTgsIDE4MywgCisgICAgMTYsIDM1LCAyNDksIDEzNywgMjIwLCAyMTIsIDk4LCAxODMsIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMCwgMjE4LCA5OCwgMTgzLCAKKyAgICAxNiwgMzUsIDI0OSwgMTM3LCAyMjAsIDIxNCwgOTgsIDE4MywgMTYsIDM1LCAyNDksIDEzNywgMjIxLCAyNDUsIDk4LCAxODMsIAorICAgIDE2LCAzNSwgMjQ5LCAxMzcsIDIyMSwgMjQ0LCA0MCwgMjQ0LCAyNDAsIDIwNSwgMzUsIDIyMiwgMjMsIDI1MCwgMTA4LCAKKyAgICAyNDMsIDE1MSwgMjA1LCAzNSwgMjIyLCAyMywgMjI3LCAyMTMsIDI0NywgOCwgMjA1LCAzNSwgMjQ4LCAyNDQsIDI1MywgCisgICAgMjQ1LCAyMjIsIDIzLCAyNTIsIDEzMCwgMjA1LCAzNSwgMjE3LCAyMTEsIDI0NSwgMTM3LCAyMDUsIDM1LCAyMTksIDEsIAorICAgIDIwNSwgMzUsIDI1MCwgMTU1LCAyMDUsIDM1LCAyMjIsIDIzLCAyNTQsIDMwLCAyMDUsIDM1LCAyNDIsIDI1MywgMjIxLCAKKyAgICAxMzYsIDIwNSwgMzUsIDMsIDIyMiwgMTIwLCAyMDUsIDM1LCAyMjEsIDEwMCwgMjA1LCAzNSwgMjI5LCAxOTYsIDIwNSwgMzUsIAorICAgIDIyMywgMTU4LCAyMDUsIDM1LCAyNDUsIDIxOCwgMjA1LCAzNSwgMjQ0LCAzMiwgMjI5LCAxNSwgMjA1LCAzNSwgMjMzLCAKKyAgICAxMzIsIDIwNSwgMzUsIDI0NiwgMTc1LCAyMDUsIDM1LCAyNDUsIDEzOCwgMjA1LCAzNSwgMjE4LCAxNzIsIDIzMCwgMTM5LCAKKyAgICAyMjIsIDIzLCAyNDksIDg4LCAyMDUsIDM1LCAyNTQsIDc1LCAyMDUsIDM1LCAyNTAsIDEzOSwgMjA1LCAzNSwgMjUyLCA1OSwgCisgICAgMjIxLCAyMjQsIDIwNSwgMzUsIDI0NCwgNDYsIDIwNSwgMzUsIDIyMywgMjM3LCAyNTQsIDkwLCAyMDUsIDM1LCAyMjcsIAorICAgIDE2MiwgMjA1LCAzNSwgMjM3LCAxOTQsIDIwNSwgMzUsIDI0NCwgMzIsIDIyMiwgMTIwLCAyMDUsIDM1LCAyMzMsIDEwNiwgCisgICAgMjUwLCAxMjIsIDIwNSwgMzUsIDI0NCwgMzIsIDIyOCwgMjQwLCAyMDUsIDM1LCAyMjIsIDIzLCAyNTUsIDQsIDIxOCwgMjQwLCAKKyAgICAyMDUsIDM1LCAyMjIsIDIzLCAyNTAsIDIwMSwgMjQ1LCAxNzksIDIwNSwgMzUsIDIzNywgMjA2LCAyMDUsIDM1LCAyNDcsIAorICAgIDkwLCAyMDUsIDM1LCAyMjcsIDE2NSwgMjA1LCAzNSwgMjQ0LCAzMiwgMjI5LCAxMCwgMjA1LCAzNSwgMjI4LCAyMjcsIDIwNSwgCisgICAgMzUsIDI0OSwgMTUxLCAxMTcsIDIyMiwgMjMsIDIzNSwgNTgsIDIwNSwgMzUsIDIyMiwgMjMsIDI0NSwgMjQ2LCAyMDUsIDM1LCAKKyAgICAyMzAsIDEwOSwgMjA1LCAzNSwgMjMwLCAxNzMsIDIwNSwgMzUsIDI0OSwgNjYsIDIwNSwgMzUsIDI0OSwgODQsIDIwNSwgMzUsIAorICAgIDIzNywgMjE3LCAyMDUsIDM1LCAyNTIsIDExLCAyMDUsIDM1LCAyNTAsIDE3MCwgMTk5LCAyMzQsIDEyLCAyMDUsIDM1LCAKKyAgICAyNDQsIDIxMiwgMjIxLCAxMzYsIDIwNSwgMzUsIDIyOCwgMTg3LCAyMjAsIDU0LCAyMDUsIDM1LCAyMzAsIDEwOCwgMjA1LCAKKyAgICAzNSwgMjIyLCAyMywgMjE4LCAyMjEsIDIwNSwgMzUsIDIyNywgMTU2LCAyMDUsIDM1LCAyMjIsIDIzLCAyNTEsIDEyMSwgCisgICAgMjA1LCAzNSwgMjIyLCAyMywgMjU0LCAyNiwgMjIxLCAyMjEsIDIwNSwgMzUsIDIyMiwgMjMsIDIzNiwgMTgxLCAyMjMsIAorICAgIDE0MSwgMjMzLCAxMDcsIDIwNSwgMzUsIDI0OSwgNDMsIDIwNSwgMzUsIDIyMiwgMjMsIDIzNCwgNjEsIDIzNCwgOTksIDIwNSwgCisgICAgMzUsIDI1NSwgNSwgMjA1LCAzNSwgMjIyLCAyMywgMjE4LCAyNTIsIDIwNSwgMzUsIDIyMiwgMjMsIDI0NCwgMTc3LCAyMTgsIAorICAgIDE5NCwgMjA1LCAzNSwgMjIyLCAyMywgMjM3LCA0NCwgMjM1LCAxNjUsIDIwNSwgMzUsIDI0OCwgMjAwLCAyMDUsIDM1LCAKKyAgICAyMzUsIDUwLCAyMDUsIDM1LCAyMzcsIDE5NywgMjIxLCA1OSwgMjA1LCAzNSwgMywgMjI4LCAyNDAsIDIwNSwgMzUsIDI1NCwgCisgICAgMjEwLCAyNTAsIDE2MiwgMjA1LCAzNSwgMjUyLCAxMzIsIDI1MCwgMTYyLCA4LCA0LCAyMzcsIDE0MCwgOCwgNCwgMjM3LCAKKyAgICAxMzQsIDgsIDQsIDcyLCA4LCA0LCAyMzcsIDE1OSwgOCwgNCwgMjM4LCAyNCwgOCwgNCwgMjM4LCA3LCA4LCA0LCAyMzgsIAorICAgIDI2LCA4LCA0LCAyMzgsIDI1LCA4LCA0LCAyNTMsIDI0NCwgOCwgNCwgMjUzLCAyMTQsIDgsIDQsIDYwLCA4LCA0LCAyNTQsIAorICAgIDkyLCA4LCA0LCAyMjAsIDY0LCA4LCA0LCAyMjAsIDY3LCA4LCA0LCAyMjAsIDY1LCA4LCA0LCAyMzAsIDkyLCA4LCA0LCAKKyAgICAyMzAsIDY4LCA4LCA0LCA3NCwgOCwgNCwgMjMwLCAxMjAsIDgsIDQsIDI0NiwgOTgsIDgsIDQsIDczLCA4LCA0LCAyMTgsIAorICAgIDE2NSwgOCwgNCwgMjUyLCA2MCwgOCwgNCwgMjUyLCA1NywgOCwgNCwgMjUyLCA4NCwgOCwgNCwgMjUyLCA2OCwgOCwgNCwgCisgICAgMjUyLCA3OCwgOCwgNCwgMjUyLCA3NywgOCwgNCwgMjUyLCA4MCwgOCwgNCwgMjUyLCA3OSwgOCwgNCwgMjUyLCAxODQsIDgsIAorICAgIDQsIDI1MiwgMTgwLCA4LCA0LCAyNTIsIDIzNywgOCwgNCwgMjUyLCAyMDIsIDgsIDQsIDI1MSwgMjMxLCA4LCA0LCAyNTEsIAorICAgIDIzNSwgOCwgNCwgMjUxLCAyMzIsIDgsIDQsIDI1MiwgMzAsIDgsIDQsIDI1MiwgMjEsIDgsIDQsIDI1MiwgNDEsIDgsIDQsIAorICAgIDI1MiwgMzIsIDgsIDQsIDI1MiwgOTcsIDgsIDQsIDI1MiwgMTQ0LCA4LCA0LCAyNTIsIDEwOSwgOCwgNCwgMjUxLCAyMjEsIAorICAgIDgsIDQsIDI1MSwgMjE5LCA4LCA0LCAyNTEsIDI0OCwgOCwgNCwgMjUxLCAyMzAsIDgsIDQsIDI1MSwgMjI0LCA4LCA0LCAKKyAgICAyNTEsIDIyOCwgOCwgNCwgMjUxLCAyMDcsIDgsIDQsIDI1MSwgMjA2LCA4LCA0LCAyNTEsIDIxMiwgOCwgNCwgMjUxLCAyMTAsIAorICAgIDgsIDQsIDI1MSwgMjA4LCA4LCA0LCAyNTEsIDIwOSwgOCwgNCwgMjI5LCA2NCwgOCwgNCwgMjI5LCA2MCwgOCwgNCwgMjI5LCAKKyAgICAxMDgsIDgsIDQsIDIyOSwgNzAsIDgsIDQsIDIyOSwgNzksIDgsIDQsIDIyOSwgMTAzLCA4LCA0LCAyMjksIDEwMSwgOCwgNCwgCisgICAgMjI5LCAyMTUsIDgsIDQsIDIyOSwgMjA2LCA4LCA0LCAxODcsIDgsIDQsIDIyOSwgMjQ2LCA4LCA0LCAyMjgsIDE5MiwgOCwgCisgICAgNCwgMjI4LCAxOTQsIDgsIDQsIDIyOCwgMTkzLCA4LCA0LCAyMjksIDEyLCA4LCA0LCAyMjksIDgsIDgsIDQsIDIyOSwgMzcsIAorICAgIDgsIDQsIDIyOSwgMTksIDgsIDQsIDIyOCwgMTg1LCA4LCA0LCAyMjgsIDE4NCwgOCwgNCwgMjI4LCAyMDIsIDgsIDQsIDIyOCwgCisgICAgMTkxLCA4LCA0LCAyMjgsIDE4OCwgOCwgNCwgMjI4LCAxOTAsIDgsIDQsIDIyOCwgMTY3LCA4LCA0LCAyMjgsIDE2NiwgOCwgCisgICAgNCwgMjI4LCAxNzEsIDgsIDQsIDIyOCwgMTcwLCA4LCA0LCAyMjgsIDE2OCwgOCwgNCwgMjI4LCAxNjksIDgsIDQsIDI1MiwgCisgICAgMTY1LCA4LCA0LCAyNTIsIDE2NCwgOCwgNCwgMjUyLCAxNzEsIDgsIDQsIDI1MiwgMTY2LCA4LCA0LCAyNTIsIDE2OCwgOCwgCisgICAgNCwgMjUyLCAxNjcsIDgsIDQsIDI1MiwgMTcwLCA4LCA0LCAyNTIsIDE2OSwgOCwgNCwgMjUyLCAxNzYsIDgsIDQsIDI1MiwgCisgICAgMTc1LCA4LCA0LCAyNTIsIDE3OCwgOCwgNCwgMjUyLCAxNzcsIDgsIDQsIDI1MiwgMTU2LCA4LCA0LCAyNTIsIDE1OCwgOCwgCisgICAgNCwgMjUyLCAxNTcsIDgsIDQsIDI1MiwgMTYxLCA4LCA0LCAyNTIsIDE2MCwgOCwgNCwgMjUyLCAxNjMsIDgsIDQsIDI1MiwgCisgICAgMTYyLCA4LCA0LCAyNTIsIDE3MiwgOCwgNCwgMjUyLCAxNzQsIDgsIDQsIDI1MiwgMTczLCA4LCA0LCAyNTIsIDE1MiwgOCwgCisgICAgNCwgMjUyLCAxNTEsIDgsIDQsIDI1MiwgMTU5LCA4LCA0LCAyNTIsIDE1NSwgOCwgNCwgMjUyLCAxNTMsIDgsIDQsIDI1MiwgCisgICAgMTU0LCA4LCA0LCAyNTIsIDE0OCwgOCwgNCwgMjUyLCAxNDcsIDgsIDQsIDI1MiwgMTUwLCA4LCA0LCAyNTIsIDE0OSwgOCwgCisgICAgNCwgMjMyLCAxODgsIDgsIDQsIDIzMiwgMTg3LCA4LCA0LCAyMzIsIDE5MywgOCwgNCwgMjMyLCAxODksIDgsIDQsIDIzMiwgCisgICAgMTkwLCA4LCA0LCAyMzIsIDE5MiwgOCwgNCwgMjMyLCAxOTEsIDgsIDQsIDIzMiwgMTk1LCA4LCA0LCAyMzIsIDE5NCwgOCwgCisgICAgNCwgMjMyLCAxOTcsIDgsIDQsIDIzMiwgMTk2LCA4LCA0LCAyMzIsIDE4NCwgOCwgNCwgMjMyLCAxODMsIDgsIDQsIDIzMiwgCisgICAgMTg2LCA4LCA0LCAyMzIsIDE4NSwgOCwgNCwgMjMyLCAxNzgsIDgsIDQsIDIzMiwgMTc3LCA4LCA0LCAyMzIsIDE4MiwgOCwgCisgICAgNCwgMjMyLCAxODEsIDgsIDQsIDIzMiwgMTc5LCA4LCA0LCAyMzIsIDE4MCwgOCwgNCwgMjMyLCAxNzIsIDgsIDQsIDIzMiwgCisgICAgMTcxLCA4LCA0LCAyMzIsIDE3NiwgOCwgNCwgMjMyLCAxNzUsIDgsIDQsIDIzMiwgMTczLCA4LCA0LCAyMzIsIDE3NCwgOCwgCisgICAgNCwgMjQzLCA0NiwgOCwgNCwgMjQzLCA0NSwgOCwgNCwgMjQzLCA1MSwgOCwgNCwgMjQzLCA0NywgOCwgNCwgMjQzLCA0OCwgCisgICAgOCwgNCwgMjQzLCA1MCwgOCwgNCwgMjQzLCA0OSwgOCwgNCwgMjQzLCA1NCwgOCwgNCwgMjQzLCA1MywgOCwgNCwgMjQzLCAKKyAgICA1NiwgOCwgNCwgMjQzLCA1NSwgOCwgNCwgMjQzLCAzNywgOCwgNCwgMjQzLCAzOSwgOCwgNCwgMjQzLCAzOCwgOCwgNCwgCisgICAgMjQzLCA0MiwgOCwgNCwgMjQzLCA0MSwgOCwgNCwgMjQzLCA0NCwgOCwgNCwgMjQzLCA0MywgOCwgNCwgMjQzLCAzMywgOCwgCisgICAgNCwgMjQzLCAzMiwgOCwgNCwgMjQzLCA0MCwgOCwgNCwgMjQzLCAzNiwgOCwgNCwgMjQzLCAzNCwgOCwgNCwgMjQzLCAzNSwgCisgICAgOCwgNCwgMjQzLCAyNywgOCwgNCwgMjQzLCAzMSwgOCwgNCwgMjQzLCAzMCwgOCwgNCwgMjQzLCAyOCwgOCwgNCwgMjQzLCAKKyAgICAyOSwgOCwgNCwgMjMzLCAxNDUsIDgsIDQsIDIzMywgMTQ0LCA4LCA0LCAyMzMsIDE5NiwgOCwgNCwgMjMzLCAxNTEsIDgsIDQsIAorICAgIDIzMywgMTczLCA4LCA0LCAyMzMsIDE5MCwgOCwgNCwgMjMzLCAxODksIDgsIDQsIDIzNCwgNTEsIDgsIDQsIDIzNCwgNDcsIAorICAgIDgsIDQsIDE5NiwgOCwgNCwgMjM0LCA3OCwgOCwgNCwgMjMzLCA3NSwgOCwgNCwgMjMzLCA3NCwgOCwgNCwgMjMzLCA3NywgOCwgCisgICAgNCwgMjMzLCA3NiwgOCwgNCwgMjMzLCAxMTEsIDgsIDQsIDIzMywgMTAzLCA4LCA0LCAyMzMsIDEzNiwgOCwgNCwgMjMzLCAKKyAgICAxMTUsIDgsIDQsIDIzMywgMjMyLCA4LCA0LCAyMzQsIDI1LCA4LCA0LCAyMzMsIDU3LCA4LCA0LCAyMzMsIDU0LCA4LCA0LCAKKyAgICAyMzMsIDk5LCA4LCA0LCAyMzMsIDcxLCA4LCA0LCAyMzMsIDY0LCA4LCA0LCAyMzMsIDY5LCA4LCA0LCAyMzMsIDM2LCA4LCAKKyAgICA0LCAyMzMsIDM1LCA4LCA0LCAyMzMsIDQxLCA4LCA0LCAyMzMsIDM4LCA4LCA0LCAyNDUsIDE3MiwgOCwgNCwgMjQ1LCAxNjgsIAorICAgIDgsIDQsIDI0NSwgMjAzLCA4LCA0LCAyNDUsIDE4MCwgOCwgNCwgMjQ1LCAyNDAsIDgsIDQsIDI0NSwgMjM0LCA4LCA0LCAKKyAgICAyNDYsIDgsIDgsIDQsIDI0NSwgMjQyLCA4LCA0LCAyNDUsIDEwOSwgOCwgNCwgMjQ1LCAxMzksIDgsIDQsIDI0NSwgMTMwLCAKKyAgICA4LCA0LCAyNDUsIDgwLCA4LCA0LCAyNDUsIDc5LCA4LCA0LCAyNDUsIDkyLCA4LCA0LCAyNDUsIDg1LCA4LCA0LCAyNDUsIAorICAgIDgzLCA4LCA0LCAyNDUsIDg0LCA4LCA0LCAyNDUsIDcwLCA4LCA0LCAyNDUsIDY5LCA4LCA0LCAyNDUsIDczLCA4LCA0LCAKKyAgICAyNDUsIDcxLCA4LCA0LCAyMTksIDc0LCA4LCA0LCAyMTksIDczLCA4LCA0LCAyMTksIDk0LCA4LCA0LCAyMTksIDgzLCA4LCAKKyAgICA0LCAyMTksIDg5LCA4LCA0LCAyMTksIDg3LCA4LCA0LCAyMTksIDkxLCA4LCA0LCAyMTksIDkwLCA4LCA0LCAyMTksIDE3MiwgCisgICAgOCwgNCwgMjE5LCAxNjgsIDgsIDQsIDIxOSwgMTg5LCA4LCA0LCAyMTksIDE4MiwgOCwgNCwgMjE5LCA2MiwgOCwgNCwgMjE5LCAKKyAgICA1OCwgOCwgNCwgMjE5LCA3MiwgOCwgNCwgMjE5LCA2MywgOCwgNCwgMjE5LCA5NSwgOCwgNCwgMjE5LCAxNTYsIDgsIDQsIAorICAgIDIxOSwgNTEsIDgsIDQsIDIxOSwgNTAsIDgsIDQsIDIxOSwgNTYsIDgsIDQsIDIxOSwgNTQsIDgsIDQsIDIxOSwgNTIsIDgsIAorICAgIDQsIDIxOSwgNTMsIDgsIDQsIDIxOSwgNDQsIDgsIDQsIDIxOSwgNDMsIDgsIDQsIDIxOSwgNDgsIDgsIDQsIDIxOSwgNDcsIAorICAgIDgsIDQsIDIxOSwgNDUsIDgsIDQsIDIxOSwgNDYsIDgsIDQsIDI0OCwgMTk3LCA4LCA0LCAyNDgsIDE4NSwgOCwgNCwgMjQ5LCAKKyAgICAxNSwgOCwgNCwgMjQ4LCAyMTYsIDgsIDQsIDI0OCwgMjQ5LCA4LCA0LCAyNDgsIDI1MywgOCwgNCwgMjQ4LCAyNTIsIDgsIDQsIAorICAgIDI0OSwgMTQzLCA4LCA0LCAyNDksIDEzOCwgOCwgNCwgMjQ5LCAyMDcsIDgsIDQsIDI0OSwgMTYyLCA4LCA0LCAyNDcsIDk1LCAKKyAgICA4LCA0LCAyNDcsIDk2LCA4LCA0LCAyNDgsIDE0NSwgOCwgNCwgMjQ3LCAxMjgsIDgsIDQsIDI0OCwgMTY3LCA4LCA0LCAyNDgsIAorICAgIDE0NywgOCwgNCwgMjQ5LCA0MSwgOCwgNCwgMjQ5LCA5MiwgOCwgNCwgMjQ5LCA1MywgOCwgNCwgMjQ3LCA4OCwgOCwgNCwgCisgICAgMjQ3LCA4NiwgOCwgNCwgMjQ3LCAxMTEsIDgsIDQsIDI0NywgOTQsIDgsIDQsIDI0NywgODksIDgsIDQsIDI0NywgOTIsIDgsIAorICAgIDQsIDIyMSwgMTYxLCA4LCA0LCAyMjEsIDE1NywgOCwgNCwgMjIxLCAyMDUsIDgsIDQsIDIyMSwgMTY5LCA4LCA0LCAyMjEsIAorICAgIDE5OCwgOCwgNCwgMjIxLCAyMDAsIDgsIDQsIDIyMSwgMTk5LCA4LCA0LCAyMjIsIDExMCwgOCwgNCwgMjIyLCA5NywgOCwgNCwgCisgICAgMjIyLCAxNTUsIDgsIDQsIDIyMiwgMTE1LCA4LCA0LCAyMjAsIDI0NCwgOCwgNCwgMjIwLCAyNDMsIDgsIDQsIDIyMCwgMjQ2LCAKKyAgICA4LCA0LCAyMjAsIDI0NSwgOCwgNCwgMjIxLCAxMTMsIDgsIDQsIDIyMSwgMTEwLCA4LCA0LCAxMDEsIDgsIDQsIDIyMSwgCisgICAgMTE5LCA4LCA0LCAyMjIsIDQwLCA4LCA0LCAyMjIsIDg3LCA4LCA0LCAyMjIsIDU3LCA4LCA0LCAyMjAsIDIzMSwgOCwgNCwgCisgICAgMjIwLCAyMjgsIDgsIDQsIDIyMSwgMCwgOCwgNCwgMjIwLCAyNDIsIDgsIDQsIDIyMCwgMjMyLCA4LCA0LCAyMjAsIDI0MCwgCisgICAgOCwgNCwgMjQ5LCAxMDksIDgsIDQsIDI0OSwgMTA4LCA4LCA0LCAyNDksIDExNCwgOCwgNCwgMjQ5LCAxMTAsIDgsIDQsIAorICAgIDI0OSwgMTExLCA4LCA0LCAyNDksIDExMywgOCwgNCwgMjQ5LCAxMTIsIDgsIDQsIDI0OSwgMTI1LCA4LCA0LCAyNDksIDEyNCwgCisgICAgOCwgNCwgMjQ5LCAxMzIsIDgsIDQsIDI0OSwgMTI2LCA4LCA0LCAyNDksIDk5LCA4LCA0LCAyNDksIDEwMSwgOCwgNCwgMjQ5LCAKKyAgICAxMDAsIDgsIDQsIDI0OSwgMTA0LCA4LCA0LCAyNDksIDEwMywgOCwgNCwgMjQ5LCAxMDcsIDgsIDQsIDI0OSwgMTA1LCA4LCAKKyAgICA0LCAyNDksIDExNywgOCwgNCwgMjQ5LCAxMjAsIDgsIDQsIDI0OSwgMTE4LCA4LCA0LCAyNDksIDk1LCA4LCA0LCAyNDksIAorICAgIDk0LCA4LCA0LCAyNDksIDEwMiwgOCwgNCwgMjQ5LCA5OCwgOCwgNCwgMjQ5LCA5NiwgOCwgNCwgMjQ5LCA5NywgOCwgNCwgCisgICAgMjMyLCAxNTYsIDgsIDQsIDIzMiwgMTU1LCA4LCA0LCAyMzIsIDE2MCwgOCwgNCwgMjMyLCAxNTcsIDgsIDQsIDIzMiwgMTU4LCAKKyAgICA4LCA0LCAyMzIsIDE1OSwgOCwgNCwgMjMyLCAxNjYsIDgsIDQsIDIzMiwgMTY1LCA4LCA0LCAyMzIsIDE2OSwgOCwgNCwgCisgICAgMjMyLCAxNjcsIDgsIDQsIDIzMiwgMTUwLCA4LCA0LCAyMzIsIDE0OSwgOCwgNCwgMjMyLCAxNTQsIDgsIDQsIDIzMiwgMTUxLCAKKyAgICA4LCA0LCAyMzIsIDE2MSwgOCwgNCwgMjMyLCAxNjQsIDgsIDQsIDIzMiwgMTYyLCA4LCA0LCAyMzIsIDE0NCwgOCwgNCwgCisgICAgMjMyLCAxNDMsIDgsIDQsIDIzMiwgMTQ4LCA4LCA0LCAyMzIsIDE0NywgOCwgNCwgMjMyLCAxNDUsIDgsIDQsIDIzMiwgMTQ2LCAKKyAgICA4LCA0LCAyNDMsIDEzLCA4LCA0LCAyNDMsIDEyLCA4LCA0LCAyNDMsIDE5LCA4LCA0LCAyNDMsIDE0LCA4LCA0LCAyNDMsIAorICAgIDE2LCA4LCA0LCAyNDMsIDE1LCA4LCA0LCAyNDMsIDE4LCA4LCA0LCAyNDMsIDE3LCA4LCA0LCAyNDMsIDI0LCA4LCA0LCAKKyAgICAyNDMsIDIzLCA4LCA0LCAyNDMsIDI2LCA4LCA0LCAyNDMsIDI1LCA4LCA0LCAyNDMsIDcsIDgsIDQsIDI0MywgOCwgOCwgNCwgCisgICAgMjQzLCAxMCwgOCwgNCwgMjQzLCA5LCA4LCA0LCAyNDMsIDExLCA4LCA0LCAyNDMsIDIwLCA4LCA0LCAyNDMsIDIyLCA4LCA0LCAKKyAgICAyNDMsIDIxLCA4LCA0LCAyNDMsIDYsIDgsIDQsIDIzMiwgMjEsIDgsIDQsIDIzMiwgMjAsIDgsIDQsIDIzMiwgNjIsIDgsIDQsIAorICAgIDIzMiwgMjQsIDgsIDQsIDIzMiwgNDQsIDgsIDQsIDIzMiwgNTgsIDgsIDQsIDIzMiwgNTcsIDgsIDQsIDIzMiwgMjAxLCA4LCAKKyAgICA0LCAyMDgsIDgsIDQsIDIzMiwgMjEyLCA4LCA0LCAyMzEsIDk1LCA4LCA0LCAyMzEsIDk3LCA4LCA0LCAyMzEsIDk2LCA4LCAKKyAgICA0LCAyMzEsIDE4NCwgOCwgNCwgMjMxLCAxNzMsIDgsIDQsIDIzMSwgMjA0LCA4LCA0LCAyMzEsIDE5MSwgOCwgNCwgMjMyLCAKKyAgICAxMjEsIDgsIDQsIDIzMiwgMTQxLCA4LCA0LCAyMzIsIDEzMCwgOCwgNCwgMjMxLCA5MSwgOCwgNCwgMjMxLCA4OCwgOCwgNCwgCisgICAgMjMxLCAxNDQsIDgsIDQsIDIzMSwgOTQsIDgsIDQsIDIzMSwgOTIsIDgsIDQsIDIzMSwgOTMsIDgsIDQsIDI0MywgNzcsIDgsIAorICAgIDQsIDI0MywgNzYsIDgsIDQsIDI0MywgODIsIDgsIDQsIDI0MywgNzgsIDgsIDQsIDI0MywgNzksIDgsIDQsIDI0MywgODEsIAorICAgIDgsIDQsIDI0MywgODAsIDgsIDQsIDI0MywgODcsIDgsIDQsIDI0MywgODYsIDgsIDQsIDI0MywgODksIDgsIDQsIDI0MywgCisgICAgODgsIDgsIDQsIDI0MywgNjksIDgsIDQsIDI0MywgNzEsIDgsIDQsIDI0MywgNzAsIDgsIDQsIDI0MywgNzMsIDgsIDQsIAorICAgIDI0MywgNzUsIDgsIDQsIDI0MywgNzQsIDgsIDQsIDI0MywgODMsIDgsIDQsIDI0MywgODUsIDgsIDQsIDI0MywgODQsIDgsIAorICAgIDQsIDI0MywgNjUsIDgsIDQsIDI0MywgNjQsIDgsIDQsIDI0MywgNzIsIDgsIDQsIDI0MywgNjgsIDgsIDQsIDI0MywgNjYsIAorICAgIDgsIDQsIDI0MywgNjcsIDgsIDQsIDI0MywgNTksIDgsIDQsIDI0MywgNTgsIDgsIDQsIDI0MywgNjMsIDgsIDQsIDI0MywgCisgICAgNjIsIDgsIDQsIDI0MywgNjAsIDgsIDQsIDI0MywgNjEsIDgsIDQsIDIzNSwgMjcsIDgsIDQsIDIzNSwgMjIsIDgsIDQsIAorICAgIDIzNSwgNjcsIDgsIDQsIDIzNSwgMzIsIDgsIDQsIDIzNSwgNjEsIDgsIDQsIDIzNSwgNjAsIDgsIDQsIDIzNSwgNjMsIDgsIAorICAgIDQsIDIzNSwgNjIsIDgsIDQsIDIzNSwgMTQxLCA4LCA0LCAyMzUsIDEzMywgOCwgNCwgMjM1LCAxODgsIDgsIDQsIDIzNSwgCisgICAgMTQ3LCA4LCA0LCAyMzQsIDIxNCwgOCwgNCwgMjM0LCAyMTMsIDgsIDQsIDIzNCwgMjE2LCA4LCA0LCAyMzQsIDIxNSwgOCwgCisgICAgNCwgMjM0LCAyNDIsIDgsIDQsIDIzNCwgMjM2LCA4LCA0LCAyMzUsIDEyLCA4LCA0LCAyMzQsIDI0NSwgOCwgNCwgMjM1LCAKKyAgICA4MiwgOCwgNCwgMjM1LCAxMjIsIDgsIDQsIDIzNSwgODksIDgsIDQsIDIzNCwgMjA5LCA4LCA0LCAyMzQsIDIwOCwgOCwgNCwgCisgICAgMjM0LCAyMzEsIDgsIDQsIDIzNCwgMjEyLCA4LCA0LCAyMzQsIDIxMCwgOCwgNCwgMjM0LCAyMTEsIDgsIDQsIDIzNCwgMTkxLCAKKyAgICA4LCA0LCAyMzQsIDE5MCwgOCwgNCwgMjM0LCAxOTgsIDgsIDQsIDIzNCwgMTk0LCA4LCA0LCAyMzQsIDE5MiwgOCwgNCwgCisgICAgMjM0LCAxOTMsIDgsIDQsIDI0NCwgODAsIDgsIDQsIDI0NCwgNzksIDgsIDQsIDI0NCwgMTAzLCA4LCA0LCAyNDQsIDg5LCA4LCAKKyAgICA0LCAyNDQsIDk2LCA4LCA0LCAyNDQsIDk1LCA4LCA0LCAyNDQsIDk4LCA4LCA0LCAyNDQsIDk3LCA4LCA0LCAyNDQsIDIxNCwgCisgICAgOCwgNCwgMjQ0LCAyMDksIDgsIDQsIDI0NSwgMCwgOCwgNCwgMjQ0LCAyMjMsIDgsIDQsIDI0NCwgMCwgOCwgNCwgMjQzLCAKKyAgICAyNTUsIDgsIDQsIDI0NCwgMiwgOCwgNCwgMjQ0LCAxLCA4LCA0LCAyNDQsIDUxLCA4LCA0LCAyNDQsIDQ5LCA4LCA0LCAyNDQsIAorICAgIDY4LCA4LCA0LCAyNDQsIDU5LCA4LCA0LCAyNDQsIDE2NCwgOCwgNCwgMjQ0LCAxNjIsIDgsIDQsIDI0NCwgMTkxLCA4LCA0LCAKKyAgICAyNDQsIDE3NCwgOCwgNCwgMjQzLCAyNDYsIDgsIDQsIDI0MywgMjQ1LCA4LCA0LCAyNDQsIDE3LCA4LCA0LCAyNDMsIDI1NCwgCisgICAgOCwgNCwgMjQzLCAyNDcsIDgsIDQsIDI0MywgMjUzLCA4LCA0LCAyMzYsIDg5LCA4LCA0LCAyMzYsIDg4LCA4LCA0LCAyMzYsIAorICAgIDExMywgOCwgNCwgMjM2LCA5OSwgOCwgNCwgMjM2LCAxMDcsIDgsIDQsIDIzNiwgMTA5LCA4LCA0LCAyMzYsIDEwOCwgOCwgNCwgCisgICAgMjM2LCAyMDMsIDgsIDQsIDIzNiwgMTkyLCA4LCA0LCAxNzUsIDgsIDQsIDIzNiwgMjI3LCA4LCA0LCAyMzUsIDI1MCwgOCwgCisgICAgNCwgMjM1LCAyNTIsIDgsIDQsIDIzNSwgMjUxLCA4LCA0LCAyMzYsIDMxLCA4LCA0LCAyMzYsIDI3LCA4LCA0LCAyMzYsIDU3LCAKKyAgICA4LCA0LCAyMzYsIDM4LCA4LCA0LCAyMzYsIDE1OSwgOCwgNCwgMjM2LCAxNTYsIDgsIDQsIDIzNiwgMTg0LCA4LCA0LCAyMzYsIAorICAgIDE2MiwgOCwgNCwgMjM1LCAyNDAsIDgsIDQsIDIzNSwgMjM4LCA4LCA0LCAyMzYsIDcsIDgsIDQsIDIzNSwgMjQ5LCA4LCA0LCAKKyAgICAyMzUsIDI0MywgOCwgNCwgMjM1LCAyNDcsIDgsIDQsIDI0NCwgMTQ2LCA4LCA0LCAyNDQsIDE0NSwgOCwgNCwgMjQ0LCAxNTAsIAorICAgIDgsIDQsIDI0NCwgMTQ3LCA4LCA0LCAyNDQsIDE0OSwgOCwgNCwgMjQ0LCAxNDgsIDgsIDQsIDI0NCwgMTU3LCA4LCA0LCAKKyAgICAyNDQsIDE1NiwgOCwgNCwgMjQ0LCAxNjAsIDgsIDQsIDI0NCwgMTU4LCA4LCA0LCAyNDQsIDEzNywgOCwgNCwgMjQ0LCAxMzYsIAorICAgIDgsIDQsIDI0NCwgMTM5LCA4LCA0LCAyNDQsIDEzOCwgOCwgNCwgMjQ0LCAxNDIsIDgsIDQsIDI0NCwgMTQxLCA4LCA0LCAKKyAgICAyNDQsIDE0NCwgOCwgNCwgMjQ0LCAxNDMsIDgsIDQsIDI0NCwgMTUyLCA4LCA0LCAyNDQsIDE1MSwgOCwgNCwgMjQ0LCAxNTUsIAorICAgIDgsIDQsIDI0NCwgMTUzLCA4LCA0LCAyNDQsIDEzMiwgOCwgNCwgMjQ0LCAxMzEsIDgsIDQsIDI0NCwgMTQwLCA4LCA0LCAKKyAgICAyNDQsIDEzNSwgOCwgNCwgMjQ0LCAxMzMsIDgsIDQsIDI0NCwgMTM0LCA4LCA0LCAyMzMsIDIxNCwgOCwgNCwgMjMzLCAyMTUsIAorICAgIDgsIDQsIDIzMywgMjI3LCA4LCA0LCAyMzMsIDIyNiwgOCwgNCwgMjMzLCAyMjksIDgsIDQsIDIzMywgMjI4LCA4LCA0LCAKKyAgICAyMzMsIDIwNSwgOCwgNCwgMjMzLCAyMDcsIDgsIDQsIDIzMywgMjA2LCA4LCA0LCAyMzMsIDIxMCwgOCwgNCwgMjMzLCAyMDksIAorICAgIDgsIDQsIDIzMywgMjEyLCA4LCA0LCAyMzMsIDIxMSwgOCwgNCwgMjMzLCAyMTYsIDgsIDQsIDIzMywgMjE4LCA4LCA0LCAKKyAgICAyMzMsIDIxNywgOCwgNCwgMjMzLCAyMDEsIDgsIDQsIDIzMywgMjAwLCA4LCA0LCAyMzMsIDIwOCwgOCwgNCwgMjMzLCAyMDQsIAorICAgIDgsIDQsIDIzMywgMjAyLCA4LCA0LCAyMzMsIDIwMywgOCwgNCwgMjQyLCAxMzMsIDgsIDQsIDI0MiwgMTMyLCA4LCA0LCAKKyAgICAyNDIsIDEzOSwgOCwgNCwgMjQyLCAxMzQsIDgsIDQsIDI0MiwgMTM2LCA4LCA0LCAyNDIsIDEzNSwgOCwgNCwgMjQyLCAxMzgsIAorICAgIDgsIDQsIDI0MiwgMTM3LCA4LCA0LCAyNDIsIDE0NCwgOCwgNCwgMjQyLCAxNDMsIDgsIDQsIDI0MiwgMTQ2LCA4LCA0LCAKKyAgICAyNDIsIDE0NSwgOCwgNCwgMjQyLCAxMjUsIDgsIDQsIDI0MiwgMTI0LCA4LCA0LCAyNDIsIDEyNywgOCwgNCwgMjQyLCAxMjYsIAorICAgIDgsIDQsIDI0MiwgMTI5LCA4LCA0LCAyNDIsIDEyOCwgOCwgNCwgMjQyLCAxMzEsIDgsIDQsIDI0MiwgMTMwLCA4LCA0LCAKKyAgICAyNDIsIDE0MCwgOCwgNCwgMjQyLCAxNDIsIDgsIDQsIDI0MiwgMTQxLCA4LCA0LCAyMzIsIDg5LCA4LCA0LCAyMzIsIDkxLCAKKyAgICA4LCA0LCAyMzIsIDkwLCA4LCA0LCAyMzIsIDEwOCwgOCwgNCwgMjMyLCAxMDcsIDgsIDQsIDIzMiwgMTE1LCA4LCA0LCAyMzIsIAorICAgIDExMCwgOCwgNCwgMjMyLCA3MSwgOCwgNCwgMjMyLCA3MCwgOCwgNCwgMjMyLCA3MiwgOCwgNCwgMjMyLCA3OCwgOCwgNCwgCisgICAgMjMyLCA3NSwgOCwgNCwgMjMyLCA4NCwgOCwgNCwgMjMyLCA3OSwgOCwgNCwgMjMyLCAxMDIsIDgsIDQsIDIzMiwgMTA2LCA4LCAKKyAgICA0LCAyMzIsIDEwMywgOCwgNCwgMjQzLCA5MiwgOCwgNCwgMjQzLCAxMDAsIDgsIDQsIDI0MywgMTA4LCA4LCA0LCAyNDMsIAorICAgIDE3MywgOCwgNCwgMjQzLCAxNjcsIDgsIDQsIDE1NSwgOCwgNCwgMjQzLCAxODMsIDgsIDQsIDI0MiwgMTU3LCA4LCA0LCAKKyAgICAyNDIsIDE1NiwgOCwgNCwgMjQyLCAxNTksIDgsIDQsIDI0MiwgMTU4LCA4LCA0LCAyNDIsIDE4NiwgOCwgNCwgMjQyLCAxODEsIAorICAgIDgsIDQsIDI0MywgNCwgOCwgNCwgMjQyLCAyNDQsIDgsIDQsIDI0MywgMTI1LCA4LCA0LCAyNDMsIDE2MiwgOCwgNCwgMjQzLCAKKyAgICAxMzUsIDgsIDQsIDIxOCwgMjQzLCA4LCA0LCAyMTgsIDIzMSwgOCwgNCwgMjE5LCA3LCA4LCA0LCAyMTgsIDI1MSwgOCwgNCwgCisgICAgMjE4LCAxNTcsIDgsIDQsIDIxOCwgMTU5LCA4LCA0LCAyMTgsIDE1OCwgOCwgNCwgMjE4LCAxNzAsIDgsIDQsIDIxOCwgMTg3LCAKKyAgICA4LCA0LCAyMTgsIDE3NSwgOCwgNCwgMjE4LCAyMTQsIDgsIDQsIDIxOCwgMjI3LCA4LCA0LCAyMTgsIDIxOCwgOCwgNCwgCisgICAgMjE3LCAyOCwgOCwgNCwgMjE3LCAyNywgOCwgNCwgMjE3LCA0MiwgOCwgNCwgMjE3LCAzMCwgOCwgNCwgMjE3LCAzNSwgOCwgCisgICAgNCwgMjE3LCAzNywgOCwgNCwgMjE3LCAzNiwgOCwgNCwgMjE3LCAxMDAsIDgsIDQsIDIxNywgOTcsIDgsIDQsIDIxNywgMTE0LCAKKyAgICA4LCA0LCAyMTcsIDEwMywgOCwgNCwgMjE3LCA2LCA4LCA0LCAyMTcsIDgsIDgsIDQsIDIxNywgNywgOCwgNCwgMjE3LCAxNywgCisgICAgOCwgNCwgMjE3LCAxNiwgOCwgNCwgMjE3LCAyMSwgOCwgNCwgMjE3LCAxOCwgOCwgNCwgMjE3LCA4MiwgOCwgNCwgMjE3LCAKKyAgICA5MiwgOCwgNCwgMjE3LCA4NiwgOCwgNCwgMjE3LCAyLCA4LCA0LCAyMTcsIDEsIDgsIDQsIDIxNywgMTMsIDgsIDQsIDIxNywgCisgICAgNSwgOCwgNCwgMjE3LCAzLCA4LCA0LCAyMTcsIDQsIDgsIDQsIDIxNiwgMjQ5LCA4LCA0LCAyMTYsIDI0OCwgOCwgNCwgMjE2LCAKKyAgICAyNTQsIDgsIDQsIDIxNiwgMjUyLCA4LCA0LCAyMTYsIDI1MCwgOCwgNCwgMjE2LCAyNTEsIDgsIDQsIDI1MCwgMjE1LCA4LCAKKyAgICA0LCAyNTAsIDIxMiwgOCwgNCwgMjUwLCAyMzUsIDgsIDQsIDI1MCwgMjIzLCA4LCA0LCAyNTAsIDIzMiwgOCwgNCwgMjUwLCAKKyAgICAyMjYsIDgsIDQsIDI1MCwgMjM0LCA4LCA0LCAyNTAsIDIzMywgOCwgNCwgMjUxLCAxMjQsIDgsIDQsIDI1MSwgMTE4LCA4LCAKKyAgICA0LCAyNTEsIDE2OSwgOCwgNCwgMjUxLCAxNDMsIDgsIDQsIDI1MCwgODQsIDgsIDQsIDI1MCwgODYsIDgsIDQsIDI1MCwgODUsIAorICAgIDgsIDQsIDI1MCwgMTE2LCA4LCA0LCAyNTAsIDEwOSwgOCwgNCwgMjUwLCAxODIsIDgsIDQsIDI1MCwgMTI5LCA4LCA0LCAKKyAgICAyNTEsIDcxLCA4LCA0LCAyNTEsIDk5LCA4LCA0LCAyNTEsIDc1LCA4LCA0LCAyNTAsIDY4LCA4LCA0LCAyNTAsIDY3LCA4LCAKKyAgICA0LCAyNTAsIDkyLCA4LCA0LCAyNTAsIDgyLCA4LCA0LCAyNTAsIDcxLCA4LCA0LCAyNTAsIDgxLCA4LCA0LCAyNTAsIDQ5LCAKKyAgICA4LCA0LCAyNTAsIDQ4LCA4LCA0LCAyNTAsIDU4LCA4LCA0LCAyNTAsIDU1LCA4LCA0LCAyNTAsIDUwLCA4LCA0LCAyNTAsIAorICAgIDUyLCA4LCA0LCAyMTYsIDIzMiwgOCwgNCwgMjE2LCAyMzEsIDgsIDQsIDIxNiwgMjM4LCA4LCA0LCAyMTYsIDIzMywgOCwgNCwgCisgICAgMjE2LCAyMzUsIDgsIDQsIDIxNiwgMjM0LCA4LCA0LCAyMTYsIDIzNywgOCwgNCwgMjE2LCAyMzYsIDgsIDQsIDIxNiwgMjQ0LCAKKyAgICA4LCA0LCAyMTYsIDI0MywgOCwgNCwgMjE2LCAyNDcsIDgsIDQsIDIxNiwgMjQ1LCA4LCA0LCAyMTYsIDIyOCwgOCwgNCwgCisgICAgMjE2LCAyMzAsIDgsIDQsIDIxNiwgMjI5LCA4LCA0LCAyMTYsIDIzOSwgOCwgNCwgMjE2LCAyNDIsIDgsIDQsIDIxNiwgMjQwLCAKKyAgICA4LCA0LCAyMTYsIDIyMywgOCwgNCwgMjE2LCAyMjcsIDgsIDQsIDIxNiwgMjI2LCA4LCA0LCAyMTYsIDIyNCwgOCwgNCwgCisgICAgMjE2LCAyMjUsIDgsIDQsIDIxNiwgMjE4LCA4LCA0LCAyMTYsIDIxNywgOCwgNCwgMjE2LCAyMjIsIDgsIDQsIDIxNiwgMjIxLCAKKyAgICA4LCA0LCAyMTYsIDIxOSwgOCwgNCwgMjE2LCAyMjAsIDgsIDQsIDIzMSwgMzEsIDgsIDQsIDIzMSwgMzAsIDgsIDQsIDIzMSwgCisgICAgMzYsIDgsIDQsIDIzMSwgMzIsIDgsIDQsIDIzMSwgMzMsIDgsIDQsIDIzMSwgMzUsIDgsIDQsIDIzMSwgMzQsIDgsIDQsIAorICAgIDIzMSwgNDAsIDgsIDQsIDIzMSwgMzksIDgsIDQsIDIzMSwgNDIsIDgsIDQsIDIzMSwgNDEsIDgsIDQsIDIzMSwgMjUsIDgsIAorICAgIDQsIDIzMSwgMjYsIDgsIDQsIDIzMSwgMjgsIDgsIDQsIDIzMSwgMjksIDgsIDQsIDIzMSwgMzcsIDgsIDQsIDIzMSwgMzgsIAorICAgIDgsIDQsIDIzMSwgMjEsIDgsIDQsIDIzMSwgMjcsIDgsIDQsIDIzMSwgMjQsIDgsIDQsIDIzMSwgMjIsIDgsIDQsIDIzMSwgCisgICAgMjMsIDgsIDQsIDIzMSwgMTYsIDgsIDQsIDIzMSwgMTUsIDgsIDQsIDIzMSwgMjAsIDgsIDQsIDIzMSwgMTksIDgsIDQsIAorICAgIDIzMSwgMTcsIDgsIDQsIDIzMSwgMTgsIDgsIDQsIDIyNCwgODQsIDgsIDQsIDE4MiwgOCwgNCwgMjI0LCAxNDAsIDgsIDQsIAorICAgIDIyNCwgODYsIDgsIDQsIDIyNCwgMTMzLCA4LCA0LCAyMjQsIDEzNSwgOCwgNCwgMjI0LCAxMzQsIDgsIDQsIDIyNiwgMTI3LCAKKyAgICA4LCA0LCAyMjYsIDEyMCwgOCwgNCwgMjI2LCAxNzcsIDgsIDQsIDIyNiwgMTMzLCA4LCA0LCAyMjMsIDYzLCA4LCA0LCAyMjMsIAorICAgIDY1LCA4LCA0LCAyMjMsIDY0LCA4LCA0LCAyMjQsIDEyLCA4LCA0LCAyMjQsIDIsIDgsIDQsIDIyNCwgMjYsIDgsIDQsIDIyNCwgCisgICAgMTMsIDgsIDQsIDIyNSwgMzYsIDgsIDQsIDIyNiwgOTQsIDgsIDQsIDIyNSwgNTYsIDgsIDQsIDIyMywgNDQsIDgsIDQsIAorICAgIDIyMywgNDIsIDgsIDQsIDIyMywgMTAzLCA4LCA0LCAyMjMsIDYyLCA4LCA0LCAyMjMsIDQ2LCA4LCA0LCAyMjMsIDUzLCA4LCAKKyAgICA0LCAyMjIsIDIxNSwgOCwgNCwgMjIyLCAyMTQsIDgsIDQsIDIyMywgMjEsIDgsIDQsIDIyMiwgMjIwLCA4LCA0LCAyMjIsIAorICAgIDIxNiwgOCwgNCwgMjIyLCAyMTksIDgsIDQsIDIyMywgMTg0LCA4LCA0LCAyMjMsIDE4MywgOCwgNCwgMjIzLCAxODksIDgsIAorICAgIDQsIDIyMywgMTg1LCA4LCA0LCAyMjMsIDE4NiwgOCwgNCwgMjIzLCAxODgsIDgsIDQsIDIyMywgMTg3LCA4LCA0LCAyMjMsIAorICAgIDE5NiwgOCwgNCwgMjIzLCAxOTUsIDgsIDQsIDIyMywgMjE4LCA4LCA0LCAyMjMsIDE5NywgOCwgNCwgMjIzLCAxODAsIDgsIAorICAgIDQsIDIyMywgMTc5LCA4LCA0LCAyMjMsIDE4MiwgOCwgNCwgMjIzLCAxODEsIDgsIDQsIDIyMywgMTkxLCA4LCA0LCAyMjMsIAorICAgIDE5NCwgOCwgNCwgMjIzLCAxOTIsIDgsIDQsIDIyMywgMTc2LCA4LCA0LCAyMjMsIDE3NSwgOCwgNCwgMjIzLCAxNzgsIDgsIAorICAgIDQsIDIyMywgMTc3LCA4LCA0LCAyMjMsIDE3MCwgOCwgNCwgMjIzLCAxNjksIDgsIDQsIDIyMywgMTc0LCA4LCA0LCAyMjMsIAorICAgIDE3MywgOCwgNCwgMjIzLCAxNzEsIDgsIDQsIDIyMywgMTcyLCA4LCA0LCAyMTcsIDc1LCA4LCA0LCAyMTcsIDc0LCA4LCA0LCAKKyAgICAyMTcsIDgwLCA4LCA0LCAyMTcsIDc3LCA4LCA0LCAyMTcsIDU3LCA4LCA0LCAyMTcsIDU5LCA4LCA0LCAyMTcsIDU4LCA4LCAKKyAgICA0LCAyMTcsIDYyLCA4LCA0LCAyMTcsIDYxLCA4LCA0LCAyMTcsIDY1LCA4LCA0LCAyMTcsIDYzLCA4LCA0LCAyMTcsIDY5LCAKKyAgICA4LCA0LCAyMTcsIDY4LCA4LCA0LCAyMTcsIDcyLCA4LCA0LCAyMTcsIDcwLCA4LCA0LCAyMTcsIDUzLCA4LCA0LCAyMTcsIAorICAgIDUyLCA4LCA0LCAyMTcsIDYwLCA4LCA0LCAyMTcsIDU2LCA4LCA0LCAyMTcsIDU0LCA4LCA0LCAyMTcsIDU1LCA4LCA0LCAKKyAgICAyMTcsIDQ1LCA4LCA0LCAyMTcsIDQ0LCA4LCA0LCAyMTcsIDQ5LCA4LCA0LCAyMTcsIDQ4LCA4LCA0LCAyMTcsIDQ2LCA4LCAKKyAgICA0LCAyMTcsIDQ3LCA4LCA0LCAyNTEsIDUxLCA4LCA0LCAyNTEsIDQ4LCA4LCA0LCAyNTEsIDY5LCA4LCA0LCAyNTEsIDU3LCAKKyAgICA4LCA0LCAyNTAsIDI0OSwgOCwgNCwgMjUwLCAyNDgsIDgsIDQsIDI1MCwgMjUxLCA4LCA0LCAyNTAsIDI1MCwgOCwgNCwgCisgICAgMjUxLCA1LCA4LCA0LCAyNTEsIDQsIDgsIDQsIDI1MSwgMTEsIDgsIDQsIDI1MSwgNywgOCwgNCwgMjUxLCAzNiwgOCwgNCwgCisgICAgMjUxLCAzNCwgOCwgNCwgMjUxLCA0NiwgOCwgNCwgMjUxLCAzOCwgOCwgNCwgMjUwLCAyNDMsIDgsIDQsIDI1MCwgMjUzLCA4LCAKKyAgICA0LCAyNTAsIDI0NywgOCwgNCwgMjUwLCAyNDQsIDgsIDQsIDI1MCwgMjQ2LCA4LCA0LCAyNTAsIDIzNywgOCwgNCwgMjUwLCAKKyAgICAyMzYsIDgsIDQsIDI1MCwgMjQxLCA4LCA0LCAyNTAsIDI0MCwgOCwgNCwgMjUwLCAyMzgsIDgsIDQsIDI1MCwgMjM5LCA4LCAKKyAgICA0LCAyMjcsIDUxLCA4LCA0LCAyMjcsIDUyLCA4LCA0LCAyMjcsIDM4LCA4LCA0LCAyMjcsIDM5LCA4LCA0LCAyMjcsIDQyLCAKKyAgICA4LCA0LCAyMjcsIDQxLCA4LCA0LCAyMjcsIDQ0LCA4LCA0LCAyMjcsIDQzLCA4LCA0LCAyMjcsIDQ2LCA4LCA0LCAyMjcsIAorICAgIDQ1LCA4LCA0LCAyMjcsIDUwLCA4LCA0LCAyMjcsIDQ3LCA4LCA0LCAyMjcsIDM0LCA4LCA0LCAyMjcsIDMzLCA4LCA0LCAKKyAgICAyMjcsIDQwLCA4LCA0LCAyMjcsIDM3LCA4LCA0LCAyMjcsIDM1LCA4LCA0LCAyMjcsIDM2LCA4LCA0LCAyMjcsIDI4LCA4LCAKKyAgICA0LCAyMjcsIDI3LCA4LCA0LCAyMjcsIDMyLCA4LCA0LCAyMjcsIDMxLCA4LCA0LCAyMjcsIDI5LCA4LCA0LCAyMjcsIDMwLCAKKyAgICA4LCA0LCAyMzEsIDE2OSwgOCwgNCwgMjMxLCAxNjgsIDgsIDQsIDIzMSwgMTcxLCA4LCA0LCAyMzEsIDE3MCwgOCwgNCwgCisgICAgMjMxLCAxNjEsIDgsIDQsIDIzMSwgMTYzLCA4LCA0LCAyMzEsIDE2MiwgOCwgNCwgMjMxLCAxNjUsIDgsIDQsIDIzMSwgMTY0LCAKKyAgICA4LCA0LCAyMzEsIDE2NywgOCwgNCwgMjMxLCAxNjYsIDgsIDQsIDIzMSwgMTU2LCA4LCA0LCAyMzEsIDE1NSwgOCwgNCwgCisgICAgMjMxLCAxNjAsIDgsIDQsIDIzMSwgMTU5LCA4LCA0LCAyMzEsIDE1NywgOCwgNCwgMjMxLCAxNTgsIDgsIDQsIDIzMSwgMTUwLCAKKyAgICA4LCA0LCAyMzEsIDE0OSwgOCwgNCwgMjMxLCAxNTQsIDgsIDQsIDIzMSwgMTUzLCA4LCA0LCAyMzEsIDE1MSwgOCwgNCwgCisgICAgMjMxLCAxNTIsIDgsIDQsIDIyNCwgMjUzLCA4LCA0LCAyMjQsIDI1MCwgOCwgNCwgMjI1LCAyNSwgOCwgNCwgMjI1LCA3LCA4LCAKKyAgICA0LCAyMjQsIDE2MywgOCwgNCwgMjI0LCAxNjUsIDgsIDQsIDIyNCwgMTY0LCA4LCA0LCAyMjQsIDE3OCwgOCwgNCwgMjI0LCAKKyAgICAxNzYsIDgsIDQsIDIyNCwgMjAwLCA4LCA0LCAyMjQsIDE5MywgOCwgNCwgMjI0LCAyMjYsIDgsIDQsIDIyNCwgMjIzLCA4LCAKKyAgICA0LCAyMjQsIDI0NiwgOCwgNCwgMjI0LCAyMzMsIDgsIDQsIDIyNCwgMTU5LCA4LCA0LCAyMjQsIDE1OCwgOCwgNCwgMjI0LCAKKyAgICAxNzAsIDgsIDQsIDIyNCwgMTYyLCA4LCA0LCAyMjQsIDE2MCwgOCwgNCwgMjI0LCAxNjEsIDgsIDQsIDIyNCwgMTQzLCA4LCAKKyAgICA0LCAyMjQsIDE0MiwgOCwgNCwgMjI0LCAxNDksIDgsIDQsIDIyNCwgMTQ2LCA4LCA0LCAyMjQsIDE0NCwgOCwgNCwgMjI0LCAKKyAgICAxNDUsIDgsIDQsIDIyNywgMjI4LCA4LCA0LCAyMjcsIDIyMywgOCwgNCwgMjAzLCA4LCA0LCAyMjcsIDIzMywgOCwgNCwgCisgICAgMjI3LCA2LCA4LCA0LCAyMjcsIDgsIDgsIDQsIDIyNywgNywgOCwgNCwgMjI3LCA2MCwgOCwgNCwgMjI3LCA1NCwgOCwgNCwgCisgICAgMjI3LCA3NSwgOCwgNCwgMjI3LCA2MywgOCwgNCwgMjI3LCAxNTUsIDgsIDQsIDIyNywgMjE2LCA4LCA0LCAyMjcsIDE4NSwgCisgICAgOCwgNCwgMjI2LCAyNTUsIDgsIDQsIDIyNiwgMjUzLCA4LCA0LCAyMjcsIDIyLCA4LCA0LCAyMjcsIDUsIDgsIDQsIDIyNywgCisgICAgMSwgOCwgNCwgMjI3LCAyLCA4LCA0LCAyMjYsIDIzOCwgOCwgNCwgMjI2LCAyMzcsIDgsIDQsIDIyNiwgMjQzLCA4LCA0LCAKKyAgICAyMjYsIDI0MSwgOCwgNCwgMjI2LCAyMzksIDgsIDQsIDIyNiwgMjQwLCA4LCA0LCAyMzcsIDg5LCA4LCA0LCAyMzcsIDg4LCAKKyAgICA4LCA0LCAyMzcsIDk4LCA4LCA0LCAyMzcsIDkwLCA4LCA0LCAyMzcsIDk0LCA4LCA0LCAyMzcsIDkzLCA4LCA0LCAyMzcsIAorICAgIDk2LCA4LCA0LCAyMzcsIDk1LCA4LCA0LCAyMzcsIDM0LCA4LCA0LCAyMzcsIDMzLCA4LCA0LCAyMzcsIDM2LCA4LCA0LCAKKyAgICAyMzcsIDM1LCA4LCA0LCAyMzcsIDQ3LCA4LCA0LCAyMzcsIDQ2LCA4LCA0LCAyMzcsIDU5LCA4LCA0LCAyMzcsIDQ5LCA4LCAKKyAgICA0LCAyMzcsIDI4LCA4LCA0LCAyMzcsIDI2LCA4LCA0LCAyMzcsIDQzLCA4LCA0LCAyMzcsIDMyLCA4LCA0LCAyMzcsIDI5LCAKKyAgICA4LCA0LCAyMzcsIDMwLCA4LCA0LCAyMzcsIDIwLCA4LCA0LCAyMzcsIDE5LCA4LCA0LCAyMzcsIDI0LCA4LCA0LCAyMzcsIAorICAgIDIzLCA4LCA0LCAyMzcsIDIxLCA4LCA0LCAyMzcsIDIyLCA4LCA0LCAyMjgsIDExNCwgOCwgNCwgMjI4LCAxMTIsIDgsIDQsIAorICAgIDIyOCwgMTIxLCA4LCA0LCAyMjgsIDExNSwgOCwgNCwgMjI4LCAxMTgsIDgsIDQsIDIyOCwgMTE3LCA4LCA0LCAyMjgsIDEyMCwgCisgICAgOCwgNCwgMjI4LCAxMTksIDgsIDQsIDIyOCwgNzAsIDgsIDQsIDIyOCwgNjcsIDgsIDQsIDIyOCwgNzIsIDgsIDQsIDIyOCwgCisgICAgNzEsIDgsIDQsIDIyOCwgMTAxLCA4LCA0LCAyMjgsIDEwMCwgOCwgNCwgMjI4LCAxMTAsIDgsIDQsIDIyOCwgMTA0LCA4LCA0LCAKKyAgICAyMjgsIDYyLCA4LCA0LCAyMjgsIDU4LCA4LCA0LCAyMjgsIDk4LCA4LCA0LCAyMjgsIDY2LCA4LCA0LCAyMjgsIDY0LCA4LCAKKyAgICA0LCAyMjgsIDY1LCA4LCA0LCAyMjgsIDQyLCA4LCA0LCAyMjgsIDQwLCA4LCA0LCAyMjgsIDUyLCA4LCA0LCAyMjgsIDQ1LCAKKyAgICA4LCA0LCAyMjgsIDQzLCA4LCA0LCAyMjgsIDQ0LCA4LCA0LCAyMzcsIDc4LCA4LCA0LCAyMzcsIDc3LCA4LCA0LCAyMzcsIAorICAgIDg0LCA4LCA0LCAyMzcsIDc5LCA4LCA0LCAyMzcsIDgxLCA4LCA0LCAyMzcsIDgwLCA4LCA0LCAyMzcsIDgzLCA4LCA0LCAKKyAgICAyMzcsIDgyLCA4LCA0LCAyMzcsIDY5LCA4LCA0LCAyMzcsIDcxLCA4LCA0LCAyMzcsIDcwLCA4LCA0LCAyMzcsIDc0LCA4LCAKKyAgICA0LCAyMzcsIDczLCA4LCA0LCAyMzcsIDc2LCA4LCA0LCAyMzcsIDc1LCA4LCA0LCAyMzcsIDY1LCA4LCA0LCAyMzcsIDY0LCAKKyAgICA4LCA0LCAyMzcsIDcyLCA4LCA0LCAyMzcsIDY4LCA4LCA0LCAyMzcsIDY2LCA4LCA0LCAyMzcsIDY3LCA4LCA0LCAyMzcsIAorICAgIDYxLCA4LCA0LCAyMzcsIDYwLCA4LCA0LCAyMzcsIDYzLCA4LCA0LCAyMzcsIDYyLCA4LCA0LCAyMzIsIDcsIDgsIDQsIDIzMiwgCisgICAgNiwgOCwgNCwgMjMyLCAxMywgOCwgNCwgMjMyLCA4LCA4LCA0LCAyMzIsIDEwLCA4LCA0LCAyMzIsIDksIDgsIDQsIDIzMiwgCisgICAgMTIsIDgsIDQsIDIzMiwgMTEsIDgsIDQsIDIzMSwgMjUzLCA4LCA0LCAyMzEsIDI1NCwgOCwgNCwgMjMyLCAyLCA4LCA0LCAKKyAgICAyMzIsIDEsIDgsIDQsIDIzMiwgNSwgOCwgNCwgMjMyLCAzLCA4LCA0LCAyMzEsIDI0OSwgOCwgNCwgMjMyLCAwLCA4LCA0LCAKKyAgICAyMzEsIDI1MiwgOCwgNCwgMjMxLCAyNTAsIDgsIDQsIDIzMSwgMjUxLCA4LCA0LCAyMzEsIDI0NCwgOCwgNCwgMjMxLCAyNDMsIAorICAgIDgsIDQsIDIzMSwgMjQ4LCA4LCA0LCAyMzEsIDI0NywgOCwgNCwgMjMxLCAyNDUsIDgsIDQsIDIzMSwgMjQ2LCA4LCA0LCAKKyAgICAyMzEsIDU5LCA4LCA0LCAyMzEsIDU4LCA4LCA0LCAyMzEsIDY3LCA4LCA0LCAyMzEsIDYxLCA4LCA0LCAyMzEsIDY0LCA4LCAKKyAgICA0LCAyMzEsIDYzLCA4LCA0LCAyMzEsIDY2LCA4LCA0LCAyMzEsIDY1LCA4LCA0LCAyMzEsIDQ3LCA4LCA0LCAyMzEsIDQ5LCAKKyAgICA4LCA0LCAyMzEsIDQ4LCA4LCA0LCAyMzEsIDUyLCA4LCA0LCAyMzEsIDUxLCA4LCA0LCAyMzEsIDU2LCA4LCA0LCAyMzEsIAorICAgIDUzLCA4LCA0LCAyMzEsIDQ1LCA4LCA0LCAyMzEsIDQ0LCA4LCA0LCAyMzEsIDUwLCA4LCA0LCAyMzEsIDQ2LCA4LCA0LCAKKyAgICAyMTgsIDEyMywgOCwgNCwgMjE4LCAxMjIsIDgsIDQsIDIxOCwgMTMwLCA4LCA0LCAyMTgsIDEyNSwgOCwgNCwgMjE4LCAxMjcsIAorICAgIDgsIDQsIDIxOCwgMTI2LCA4LCA0LCAyMTgsIDEyOSwgOCwgNCwgMjE4LCAxMjgsIDgsIDQsIDIxOCwgMTEyLCA4LCA0LCAKKyAgICAyMTgsIDExMywgOCwgNCwgMjE4LCAxMTcsIDgsIDQsIDIxOCwgMTE2LCA4LCA0LCAyMTgsIDEyMSwgOCwgNCwgMjE4LCAxMTksIAorICAgIDgsIDQsIDIxOCwgOTQsIDgsIDQsIDIxOCwgOTIsIDgsIDQsIDIxOCwgMTA0LCA4LCA0LCAyMTgsIDk3LCA4LCA0LCAyMTgsIAorICAgIDk1LCA4LCA0LCAyMTgsIDk2LCA4LCA0LCAyMTcsIDIzNywgOCwgNCwgMjE3LCAyMzUsIDgsIDQsIDIxNywgMjUwLCA4LCA0LCAKKyAgICAyMTcsIDIzOCwgOCwgNCwgMjE3LCAyNDUsIDgsIDQsIDIxNywgMjQ0LCA4LCA0LCAyMTcsIDI0NywgOCwgNCwgMjE3LCAyNDYsIAorICAgIDgsIDQsIDIxNywgMTg1LCA4LCA0LCAyMTcsIDE4NCwgOCwgNCwgMjE3LCAxODcsIDgsIDQsIDIxNywgMTg2LCA4LCA0LCAKKyAgICAyMTcsIDIxMiwgOCwgNCwgMjE3LCAyMDksIDgsIDQsIDIxNywgMjMxLCA4LCA0LCAyMTcsIDIxNSwgOCwgNCwgMjE3LCAxNzcsIAorICAgIDgsIDQsIDIxNywgMTc1LCA4LCA0LCAyMTcsIDIwMCwgOCwgNCwgMjE3LCAxODMsIDgsIDQsIDIxNywgMTgwLCA4LCA0LCAKKyAgICAyMTcsIDE4MSwgOCwgNCwgMjE3LCAxNjAsIDgsIDQsIDIxNywgMTU5LCA4LCA0LCAyMTcsIDE2NiwgOCwgNCwgMjE3LCAxNjMsIAorICAgIDgsIDQsIDIxNywgMTYxLCA4LCA0LCAyMTcsIDE2MiwgOCwgMzIsIDIyOCwgMTAxLCA4LCAzMiwgMjM1LCA2NywgOCwgMzIsIAorICAgIDIzNiwgODksIDgsIDMyLCAyMzEsIDYxLCA4LCAzMiwgMjUwLCA1NSwgOCwgMzIsIDIyMywgMTg5LCA4LCAzMiwgMjQ0LCAKKyAgICAxNDMsIDgsIDMyLCAyNDQsIDE3NCwgOCwgMzIsIDIzMywgMTk2LCA4LCAzMiwgMjQyLCAxMzMsIDgsIDMyLCAyMzQsIDE5MywgCisgICAgOCwgMzIsIDI1MiwgMTUyLCA4LCAzMiwgMjMzLCAxMTUsIDgsIDMyLCAyMTcsIDIzMSwgOCwgMzIsIDIyOCwgMTg1LCA4LCAKKyAgICAzMiwgMjQyLCAxMjcsIDgsIDMyLCAyMjIsIDExMCwgOCwgMzIsIDI0NSwgMCwgOCwgMzIsIDIxNywgNSwgOCwgMzIsIDI1MCwgCisgICAgNDksIDgsIDMyLCAyNDksIDk3LCA4LCAzMiwgMjUxLCAyMjgsIDgsIDMyLCAyNDQsIDEzOSwgOCwgMzIsIDIzMSwgNTMsIDgsIAorICAgIDMyLCAyMjEsIDAsIDgsIDMyLCAyMzAsIDEyMCwgOCwgMzIsIDIzNywgNjUsIDgsIDMyLCAyMTcsIDE3LCA4LCAzMiwgMjI4LCAKKyAgICAxNjcsIDgsIDMyLCAyNDMsIDQ0LCA4LCAzMiwgMjE3LCAyMzcsIDgsIDMyLCAyMTksIDUzLCA4LCAzMiwgMjI0LCAxNDksIDgsIAorICAgIDMyLCAyMTksIDE1NiwgOCwgMzIsIDIxNywgMTE0LCA4LCAzMiwgMjM3LCA1OSwgOCwgMzIsIDIzMSwgMjQsIDgsIDMyLCAKKyAgICAyMzcsIDYzLCA4LCAzMiwgMjQ0LCA1MSwgOCwgMzIsIDIzNywgODMsIDgsIDMyLCAyMTgsIDE4NywgOCwgMzIsIDI0NywgCisgICAgMTExLCA4LCAzMiwgMjI0LCAxNjEsIDgsIDMyLCAyMzUsIDYzLCA4LCAzMiwgMjUwLCA1OCwgOCwgMzIsIDI1MCwgODUsIDgsIAorICAgIDMyLCAyNTAsIDIyMywgOCwgMzIsIDI0MiwgMTMwLCA4LCAzMiwgMjI0LCAyNTMsIDgsIDMyLCAyMTcsIDQsIDgsIDMyLCAKKyAgICAyMjQsIDE5MywgOCwgMzIsIDI1MSwgNDYsIDgsIDMyLCAyMTYsIDIzNSwgOCwgMzIsIDIzMiwgMTkyLCA4LCAzMiwgMjM2LCAKKyAgICAxODQsIDIzNSwgMjgsIDEsIDI1MiwgMjM3LCAyMzUsIDI4LCAxLCAxODcsIDIzNSwgMjgsIDEsIDIyOSwgMTQxLCAyMzUsIAorICAgIDI4LCAxLCAyNDksIDIwNywgMjM1LCAyOCwgMSwgMjIyLCAxNTUsIDIzNSwgMjgsIDEsIDIyMiwgMzUsIDIzNSwgMjgsIDEsIAorICAgIDI0NSwgMCwgMjM1LCAyOCwgMSwgMTc1LCAyMzUsIDI4LCAxLCAyMzYsIDE0OSwgMjM1LCAyOCwgMSwgMjM3LCAxMjMsIDIzNSwgCisgICAgMjgsIDEsIDI1MSwgMTY5LCAyMzUsIDI4LCAxLCAyNTEsIDY5LCAyMzUsIDI4LCAxLCAyNDcsIDc0LCAyMzUsIDI4LCAxLCAKKyAgICAyMjEsIDU1LCAyMzUsIDI4LCAxLCAyMjEsIDQ3LCAyMzUsIDI4LCAxLCAxOTYsIDIzNSwgMjgsIDEsIDIwOCwgMjM1LCAyOCwgCisgICAgMSwgMjM1LCAxODgsIDIzNSwgMjgsIDEsIDIyNiwgMTc3LCAyMzUsIDI4LCAxLCAyMTcsIDgwLCAyMzUsIDI4LCAxLCAyMTcsIAorICAgIDExNCwgMjM1LCAyOCwgMSwgMjMyLCAxMTUsIDIzNSwgMjgsIDEsIDE1NSwgMjM1LCAyOCwgMSwgMjE4LCAxMzgsIDIzNSwgCisgICAgMjgsIDEsIDI0MywgMTIxLCAyMzUsIDI4LCAxLCAyNDYsIDgsIDIzNSwgMjgsIDEsIDIxOSwgNywgMjM1LCAyOCwgMSwgMjI1LCAKKyAgICAyNSwgMjM1LCAyOCwgMSwgMTg0LCAyMzUsIDI4LCAxLCAyNDQsIDEyNSwgMjM1LCAyOCwgMSwgNjAsIDIzNSwgMjgsIDEsIAorICAgIDI1NCwgMjM0LCAyMzUsIDI4LCAxLCA3MywgMjM1LCAyOCwgMSwgMjQ2LCAxMTUsIDIzNSwgMjgsIDEsIDcyLCAyMzUsIDI4LCAKKyAgICAxLCA3NCwgMjM1LCAyOCwgMSwgNjgsIDIzNSwgMjgsIDEsIDIyMCwgMTEwLCAyMzUsIDI4LCAxLCAyMjAsIDEwNSwgMjM1LCAKKyAgICAyOCwgMSwgMjMwLCAxNjcsIDIzNSwgMjgsIDEsIDE0NSwgMjMzLCA0MCwgMjIxLCAyMDUsIDIzNSwgMjgsIDEsIDE0NSwgCisgICAgMjMyLCAyMzgsIDIyOSwgMzcsIDIzNSwgMjgsIDEsIDE0NSwgMjMzLCA0MCwgMjUwLCA1NywgMjM1LCAyOCwgMSwgMTQ1LCAKKyAgICAyMzMsIDQwLCAyNTIsIDQxLCAyMzUsIDI4LCAxLCAxNDUsIDIzMywgNDAsIDIwOCwgMjM1LCAyOCwgMSwgMTQ1LCAyMzMsIAorICAgIDQwLCAyMzcsIDEwNCwgMjM1LCAyOCwgMjI4LCAxOTcsIDI1MCwgMTY4LCAyMzUsIDI4LCAyMjgsIDE5NywgMjQ1LCA5MCwgCisgICAgMjIzLCAxMzYsIDM4LCA0LCAyNDYsIDI1MCwgMzgsIDQsIDI0NiwgMjQ3LCAzOCwgNCwgMjQzLCAxNDgsIDM4LCA0LCAyMTgsIAorICAgIDIyNCwgMzgsIDQsIDIxOCwgMjIzLCAzOCwgNCwgMjI5LCAxOTEsIDM4LCA0LCAyNTIsIDkxLCAzOCwgNCwgMjUyLCAxMzcsIAorICAgIDM4LCA0LCAyMzQsIDM0LCAzOCwgNCwgMjM2LCAyMywgMzgsIDQsIDIzMywgMjIzLCAzOCwgNCwgMjQ0LCAyMDEsIDM4LCA0LCAKKyAgICAyNDUsIDIyNiwgMzgsIDQsIDIxOSwgMTYwLCAzOCwgNCwgMjIyLCA4MCwgMzgsIDQsIDIyMiwgMjEsIDM4LCA0LCAyNDksIAorICAgIDI4LCAzOCwgNCwgMjQ5LCAyNSwgMzgsIDQsIDIzNSwgMTE4LCAzOCwgNCwgMjI3LCAyMDAsIDM4LCA0LCAyNDksIDgyLCAzOCwgCisgICAgNCwgMjMyLCAxNjMsIDM4LCA0LCAyMjYsIDg0LCAzOCwgNCwgMjI0LCAyNDQsIDM4LCA0LCAyMTcsIDkwLCAzOCwgNCwgMjE3LCAKKyAgICA3MSwgMzgsIDQsIDI1MSwgOTEsIDM4LCA0LCAyMzcsIDExMywgMzgsIDQsIDIzMiwgMTQsIDM4LCA0LCAyMTgsIDIyLCAzOCwgCisgICAgNCwgMjM2LCAxODMsIDM4LCA0LCAyMzIsIDk4LCAzOCwgNCwgMjQ0LCAxODQsIDM4LCA0LCAyMzQsIDE2LCAzOCwgNCwgMjMyLCAKKyAgICAxMzksIDM4LCA0LCAyMzEsIDcyLCAzOCwgNCwgNzIsIDM4LCA0LCAyMzcsIDIyMywgMzgsIDQsIDI0MywgMTEyLCAzOCwgNCwgCisgICAgMjQzLCA5NiwgMzgsIDQsIDIxOCwgMjA0LCAzOCwgNCwgMjE4LCAxOTUsIDM4LCA0LCAyMjksIDEwOCwgMzgsIDQsIDI1MiwgCisgICAgODksIDM4LCA0LCAyNTIsIDg0LCAzOCwgNCwgMjM0LCAzMiwgMzgsIDQsIDIzNiwgMjEsIDM4LCA0LCAyMzMsIDIyMiwgMzgsIAorICAgIDQsIDI0NCwgMTk5LCAzOCwgNCwgMjQ1LCAyMDMsIDM4LCA0LCAyMTksIDk0LCAzOCwgNCwgMjIxLCAyMDUsIDM4LCA0LCAKKyAgICAyMjIsIDIsIDM4LCA0LCAyNDksIDIwLCAzOCwgNCwgMjQ5LCAyNCwgMzgsIDQsIDIzNSwgNjcsIDM4LCA0LCAyMjcsIDE0NywgCisgICAgMzgsIDQsIDI0OSwgMTUsIDM4LCA0LCAyMzIsIDE2MCwgMzgsIDQsIDIyNCwgMTQwLCAzOCwgNCwgMjI0LCAyMjEsIDM4LCA0LCAKKyAgICAyMTcsIDQyLCAzOCwgNCwgMjE3LCA2NywgMzgsIDQsIDI1MCwgMjM1LCAzOCwgNCwgMjM3LCA5OCwgMzgsIDQsIDIzMiwgMTMsIAorICAgIDM4LCA0LCAyMTcsIDI1MCwgMzgsIDQsIDIzNiwgMTEzLCAzOCwgNCwgMjMyLCA5NiwgMzgsIDQsIDI0NCwgMTAzLCAzOCwgNCwgCisgICAgMjMzLCAxOTYsIDM4LCA0LCAyMzIsIDYyLCAzOCwgNCwgMjMxLCA2NywgMzgsIDQsIDYwLCAzOCwgNCwgMjU0LCAxMzEsIDM4LCAKKyAgICA0LCAyMzIsIDExMSwgMzgsIDQsIDE1NSwgMzgsIDQsIDI0MywgMTkxLCAzOCwgNCwgMjE5LCA3LCAzOCwgNCwgMjE4LCAyNTMsIAorICAgIDM4LCA0LCAxODcsIDM4LCA0LCAyNTIsIDk0LCAzOCwgNCwgMjUyLCAyMzcsIDM4LCA0LCAyMzQsIDM3LCAzOCwgNCwgMjM2LCAKKyAgICAyNiwgMzgsIDQsIDIzNiwgMjUsIDM4LCA0LCAyMzMsIDIyNSwgMzgsIDQsIDI0NCwgMjA0LCAzOCwgNCwgMjQ2LCA4LCAzOCwgCisgICAgNCwgMjE5LCAxODksIDM4LCA0LCAyMjIsIDE1NSwgMzgsIDQsIDIyMiwgMzUsIDM4LCA0LCAyNDksIDM2LCAzOCwgNCwgMjQ5LCAKKyAgICAyNywgMzgsIDQsIDIzNSwgMTg4LCAzOCwgNCwgMjAzLCAzOCwgNCwgMjQ5LCAyMDcsIDM4LCA0LCAyMzIsIDE2OSwgMzgsIDQsIAorICAgIDIyNiwgMTc3LCAzOCwgNCwgMjI1LCAyNSwgMzgsIDQsIDIxNywgMTE0LCAzOCwgNCwgMjE3LCA4MCwgMzgsIDQsIDI1MSwgCisgICAgMTY5LCAzOCwgNCwgMjM3LCAxMjMsIDM4LCA0LCAyMzIsIDE4LCAzOCwgNCwgMTg0LCAzOCwgNCwgMTc1LCAzOCwgNCwgMjM2LCAKKyAgICAyMzMsIDM4LCA0LCAyMzIsIDEwMCwgMzgsIDQsIDI0NSwgMCwgMzgsIDQsIDE5NiwgMzgsIDQsIDIwOCwgMzgsIDQsIDIzMSwgCisgICAgNzcsIDM4LCA0LCAyMzAsIDEyNywgMzgsIDQsIDIzMCwgMTI0LCAzOCwgNCwgMjQyLCAyNDgsIDM4LCA0LCAyMTgsIDE4MCwgCisgICAgMzgsIDQsIDIxOCwgMTc2LCAzOCwgNCwgMjI5LCAyMSwgMzgsIDQsIDI1MiwgODcsIDM4LCA0LCAyNTIsIDM0LCAzOCwgNCwgCisgICAgMjM0LCAzMCwgMzgsIDQsIDIzNiwgMTksIDM4LCA0LCAyMzMsIDIyMCwgMzgsIDQsIDI0NCwgMTk2LCAzOCwgNCwgMjQ1LCAKKyAgICAxMzQsIDM4LCA0LCAyMTksIDY0LCAzOCwgNCwgMjIxLCAxMjIsIDM4LCA0LCAyMjEsIDIzNiwgMzgsIDQsIDI0OSwgMTgsIAorICAgIDM4LCA0LCAyNDksIDIyLCAzOCwgNCwgMjM0LCAyNDgsIDM4LCA0LCAyMjcsIDY3LCAzOCwgNCwgMjQ4LCAxNTAsIDM4LCA0LCAKKyAgICAyMzIsIDE1MiwgMzgsIDQsIDIyNCwgMTQsIDM4LCA0LCAyMjQsIDE5NSwgMzgsIDQsIDIxNywgMTksIDM4LCA0LCAyMTcsIAorICAgIDY0LCAzOCwgNCwgMjUwLCAxMzAsIDM4LCA0LCAyMzcsIDUwLCAzOCwgNCwgMjMyLCA0LCAzOCwgNCwgMjE3LCAyMTYsIDM4LCAKKyAgICA0LCAyMzYsIDQxLCAzOCwgNCwgMjMyLCA5NCwgMzgsIDQsIDI0NCwgNjAsIDM4LCA0LCAyMzMsIDExOSwgMzgsIDQsIDIzMSwgCisgICAgMTk1LCAzOCwgNCwgMjMxLCA1NCwgMzgsIDQsIDY4LCAzOCwgNCwgMjIwLCA4NywgMzgsIDQsIDI0MiwgMTczLCAzOCwgNCwgCisgICAgMjQyLCAxNjMsIDM4LCA0LCAyMTgsIDE2NSwgMzgsIDQsIDIxOCwgMTYxLCAzOCwgNCwgMjI4LCAyMDIsIDM4LCA0LCAyNTIsIAorICAgIDg2LCAzOCwgNCwgMjUxLCAyNDgsIDM4LCA0LCAyMzQsIDI5LCAzOCwgNCwgMjM2LCAxOCwgMzgsIDQsIDIzMywgMjE5LCAzOCwgCisgICAgNCwgMjQ0LCAxOTUsIDM4LCA0LCAyNDUsIDkyLCAzOCwgNCwgMjE5LCA1NiwgMzgsIDQsIDIyMSwgMCwgMzgsIDQsIDIyMSwgCisgICAgMjIzLCAzOCwgNCwgMjQ5LCAxNiwgMzgsIDQsIDI0OSwgMjEsIDM4LCA0LCAyMzQsIDIzMSwgMzgsIDQsIDIyNywgMjIsIDM4LCAKKyAgICA0LCAyNDcsIDExMSwgMzgsIDQsIDIzMiwgMTQ4LCAzOCwgNCwgMjIzLCAxMDMsIDM4LCA0LCAyMjQsIDE3MCwgMzgsIDQsIAorICAgIDIxNywgMTMsIDM4LCA0LCAyMTcsIDYwLCAzOCwgNCwgMjUwLCA5MiwgMzgsIDQsIDIzNywgNDMsIDM4LCA0LCAyMzIsIDAsIAorICAgIDM4LCA0LCAyMTcsIDIwMCwgMzgsIDQsIDIzNiwgNywgMzgsIDQsIDIzMiwgOTMsIDM4LCA0LCAyNDQsIDE3LCAzOCwgNCwgCisgICAgMjMzLCA5OSwgMzgsIDQsIDIzMSwgMTQ0LCAzOCwgNCwgMjMxLCA1MCwgMzgsIDQsIDc0LCAzOCwgNCwgMjMwLCAxMzgsIDM4LCAKKyAgICA0LCAyMzIsIDgxLCAzOCwgNCwgMjQzLCA0LCAzOCwgNCwgMjQyLCAyNDksIDM4LCA0LCAyMTgsIDE4NywgMzgsIDQsIDIxOCwgCisgICAgMTgxLCAzOCwgNCwgMjI5LCAzNywgMzgsIDQsIDI1MiwgODgsIDM4LCA0LCAyNTIsIDQxLCAzOCwgNCwgMjM0LCAzMSwgMzgsIAorICAgIDQsIDIzNiwgMjAsIDM4LCA0LCAyMzMsIDIyMSwgMzgsIDQsIDI0NCwgMTk4LCAzOCwgNCwgMjQ0LCAxOTcsIDM4LCA0LCAKKyAgICAyNDUsIDEzOSwgMzgsIDQsIDIxOSwgNzIsIDM4LCA0LCAxMDEsIDM4LCA0LCAyMjEsIDIzOSwgMzgsIDQsIDI0OSwgMTksIAorICAgIDM4LCA0LCAyNDksIDIzLCAzOCwgNCwgMjM1LCAxMiwgMzgsIDQsIDIyNywgNzUsIDM4LCA0LCAyNDgsIDE2NywgMzgsIDQsIAorICAgIDIzMiwgMTU0LCAzOCwgNCwgMjI0LCAyNiwgMzgsIDQsIDIyNCwgMjAwLCAzOCwgNCwgMjE3LCAyMSwgMzgsIDQsIDIxNywgCisgICAgNjUsIDM4LCA0LCAyNTAsIDE4MiwgMzgsIDQsIDIzNywgNTksIDM4LCA0LCAyMzIsIDUsIDM4LCA0LCAyMTcsIDIzMSwgMzgsIAorICAgIDQsIDIzNiwgNTcsIDM4LCA0LCAyMzIsIDk1LCAzOCwgNCwgMjQ0LCA2OCwgMzgsIDQsIDIzMywgMTM2LCAzOCwgNCwgMjMxLCAKKyAgICAyMDQsIDM4LCA0LCAyMzEsIDU2LCAzOCwgNCwgNzMsIDM4LCA0LCAyNDYsIDE5NywgMzgsIDQsIDIzMiwgMTA0LCAzOCwgNCwgCisgICAgMjQzLCAxNjIsIDM4LCA0LCAyNDMsIDEzOCwgMzgsIDQsIDIxOCwgMjI3LCAzOCwgNCwgMjE4LCAyMjAsIDM4LCA0LCAyMjksIAorICAgIDE5OCwgMzgsIDQsIDI1MiwgOTIsIDM4LCA0LCAyNTIsIDE0NCwgMzgsIDQsIDIzNCwgMzUsIDM4LCA0LCAyMzYsIDI0LCAzOCwgCisgICAgNCwgMjM2LCAyMiwgMzgsIDQsIDIzMywgMjI0LCAzOCwgNCwgMjQ0LCAyMDIsIDM4LCA0LCAyNDQsIDIwMCwgMzgsIDQsIAorICAgIDI0NSwgMjMxLCAzOCwgNCwgMjE5LCAxNjUsIDM4LCA0LCAyMjIsIDg3LCAzOCwgNCwgMjIyLCAyMiwgMzgsIDQsIDI0OSwgCisgICAgMjksIDM4LCA0LCAyNDksIDI2LCAzOCwgNCwgMjM1LCAxMjIsIDM4LCA0LCAyMjcsIDIxNiwgMzgsIDQsIDI0OSwgOTIsIDM4LCAKKyAgICA0LCAyMzIsIDE2NCwgMzgsIDQsIDIyNiwgOTQsIDM4LCA0LCAyMjQsIDI0NiwgMzgsIDQsIDIxNywgOTIsIDM4LCA0LCAyMTcsIAorICAgIDcyLCAzOCwgNCwgMjUxLCA5OSwgMzgsIDQsIDIzNywgMTE0LCAzOCwgNCwgMjMyLCAxNSwgMzgsIDQsIDIxOCwgMjUsIDM4LCAKKyAgICA0LCAyMzYsIDE4NCwgMzgsIDQsIDIzMiwgOTksIDM4LCA0LCAyMzIsIDk3LCAzOCwgNCwgMjQ0LCAxOTEsIDM4LCA0LCAyNDQsIAorICAgIDE4MSwgMzgsIDQsIDIzNCwgMjUsIDM4LCA0LCAyMzIsIDE0MSwgMzgsIDQsIDIzMSwgNzMsIDM4LCA0LCAyMzIsIDExNywgCisgICAgMzgsIDQsIDIzNSwgOTMsIDM4LCAyNTAsIDE2OCwgMzgsIDI0NSwgOTAsIDIyMywgMTM2LCAzOCwgMjI4LCA4MiwgNzgsIDM4LCAKKyAgICA0LCAyMzIsIDE1MywgMjQ2LCA4LCAzOCwgNCwgMjMyLCAxNTMsIDE3NSwgMzgsIDQsIDIzMiwgMTUzLCAyMjQsIDE0LCAzOCwgCisgICAgMTYsIDI0NSwgMjIzLCAzOCwgMTYsIDIzNiwgMTgyLCAzOCwgMTYsIDIyMSwgMTc0LCAzOCwgMTYsIDIzMiwgMzgsIDM4LCAKKyAgICAxNiwgMjUyLCAyMDUsIDM4LCAxNiwgMjQ2LCA3LCAzOCwgMTYsIDIyMiwgMTUyLCAzOCwgMTYsIDI0OSwgMTY1LCAzOCwgMTYsIAorICAgIDI0OCwgMTQ5LCAzOCwgMTYsIDIzNSwgMjUzLCAzOCwgMTYsIDIyMSwgMTI1LCAzOCwgMTYsIDI0OCwgMTY2LCAzOCwgMTYsIAorICAgIDIzNywgNTEsIDM4LCAyMCwgMjE3LCA4NCwgMzgsIDIwLCAxMDcsIDM4LCAyMCwgMTAzLCAzOCwgMjAsIDE2MCwgMzgsIDIwLCAKKyAgICAxNTQsIDM4LCAyMCwgMTc0LCAzOCwgMjAsIDE4MiwgMzgsIDIwLCAxOTEsIDM4LCAyMCwgMTg1LCAzOCwgMjAsIDE5MCwgMzgsIAorICAgIDQsIDIzMiwgMTUzLCAxOTYsIDM4LCA0LCAyMzIsIDE1MywgMjQ4LCAxNjcsIDMxLCA2LCAxLCAyMTcsIDg4LCAzMSwgMywgMSwgCisgICAgMjE3LCA4OCwgMzEsIDYsIDEsIDI0NywgNzEsIDMxLCAzLCAxLCAyNDcsIDcxLCAzMSwgNiwgMSwgMjEwLCAyNDcsIDczLCAKKyAgICAzMSwgMywgMSwgMjEwLCAyNDcsIDczLCAzMSwgNiwgMSwgMjM3LCAxNjIsIDMxLCAzLCAxLCAyMzcsIDE2MiwgMzEsIDYsIDEsIAorICAgIDI0OCwgMTgxLCAzMSwgMywgMSwgMjQ4LCAxODEsIDMxLCA2LCAxLCAyMzMsIDEyMywgMjIwLCAxMDIsIDMxLCAzLCAxLCAKKyAgICAyMzMsIDEyMywgMjIwLCAxMDIsIDMxLCA2LCAxLCAyNTIsIDIsIDIzMCwgMTQzLCAzMSwgMywgMSwgMjUyLCAyLCAyMzAsIAorICAgIDE0MywgMzEsIDYsIDEsIDIzMiwgMTIzLCAyMTgsIDExLCAzMSwgMywgMSwgMjMyLCAxMjMsIDIxOCwgMTEsIDMxLCA2LCAxLCAKKyAgICAyMTgsIDgsIDIsIDI1MiwgMjM0LCAyMTgsIDExLCAzMSwgMywgMSwgMjE4LCA4LCAyLCAyNTIsIDIzNCwgMjE4LCAxMSwgMzEsIAorICAgIDYsIDEsIDIzNywgMTYwLCAyMTgsIDM2LCAzMSwgMywgMSwgMjM3LCAxNjAsIDIxOCwgMzYsIDMxLCA2LCAxLCAyMTAsIDIxNywgCisgICAgMjAwLCAzMSwgMywgMSwgMjEwLCAyMTcsIDIwMCwgMzEsIDYsIDEsIDIzNywgMTYwLCA2MCwgMzEsIDMsIDEsIDIzNywgMTYwLCAKKyAgICA2MCwgMzEsIDYsIDEsIDI1MCwgMTk3LCAyMzUsIDI1LCAyMTcsIDE3OCwgMzEsIDMsIDEsIDI1MCwgMTk3LCAyMzUsIDI1LCAKKyAgICAyMTcsIDE3OCwgMzEsIDYsIDEsIDI1MiwgNDYsIDIxNywgMTc4LCAzMSwgMywgMSwgMjUyLCA0NiwgMjE3LCAxNzgsIDMxLCAKKyAgICA2LCAxLCAyMzcsIDE2MCwgMjUwLCAxOTcsIDIzNSwgMjUsIDIxNywgMTc4LCAzMSwgMywgMSwgMjM3LCAxNjAsIDI1MCwgCisgICAgMTk3LCAyMzUsIDI1LCAyMTcsIDE3OCwgMzEsIDYsIDEsIDIxNywgMjMzLCAzMSwgMywgMSwgMjE3LCAyMzMsIDMxLCA2LCAxLCAKKyAgICAyMjQsIDIxLCAyNDksIDkyLCAzMSwgMywgMSwgMjI0LCAyMSwgMjQ5LCA5MiwgMzEsIDYsIDEsIDIyNCwgMjEsIDI0NiwgCisgICAgMjE3LCAzMSwgMywgMSwgMjI0LCAyMSwgMjQ2LCAyMTcsIDMxLCA2LCAxLCAyMjQsIDIxLCAyNDYsIDIwNSwgMzEsIDMsIDEsIAorICAgIDIyNCwgMjEsIDI0NiwgMjA1LCAzMSwgNiwgMSwgMjMzLCAxMjcsIDc0LCAzMSwgMywgMSwgMjMzLCAxMjcsIDc0LCAzMSwgNiwgCisgICAgMSwgMjUyLCA3MCwgNzQsIDMxLCAzLCAxLCAyNTIsIDcwLCA3NCwgMzEsIDYsIDEsIDUxLCAyMzMsIDEyNywgNzQsIDMxLCAzLCAKKyAgICAxLCA1MSwgMjMzLCAxMjcsIDc0LCAzMSwgMSwgMjMzLCA4NiwgNzQsIDM2LCAzMSwgMjE5LCA0MiwgMzYsIDMxLCAyMjIsIAorICAgIDY2LCAyMzMsIDE2MiwgNTUsIDM2LCAzMSwgMjQyLCAxNjIsIDIzMywgMTYyLCA1NSwgMzYsIDMxLCAyMjEsIDIzMiwgMjMzLCAKKyAgICAxNjIsIDU1LCAyMjQsIDUzLCAyNTMsIDI1MSwgMzYsIDMxLCAyMzYsIDE5NCwgMzYsIDMxLCAyMjksIDIwMywgMzEsIDIzNiwgCisgICAgMTk0LCAzMSwgMjI5LCAyMDMsIDMxLCA2LCAxLCAyNDcsIDgyLCAzMSwgMywgMSwgMjQ3LCA4MiwgMzEsIDYsIDEsIDI0NywgCisgICAgNjQsIDMxLCAzLCAxLCAyNDcsIDY0LCAzMSwgNiwgMSwgMjE3LCA1MCwgMzEsIDMsIDEsIDIxNywgNTAsIDMxLCA2LCAxLCAKKyAgICAyNTEsIDEwOCwgMzEsIDMsIDEsIDI1MSwgMTA4LCAzMSwgNiwgMSwgMjQ3LCA2MywgMzEsIDMsIDEsIDI0NywgNjMsIDMxLCAKKyAgICA2LCAxLCAyMjIsIDg4LCAyLCAyMzMsIDE5MywgOTYsIDMxLCAzLCAxLCAyMjIsIDg4LCAyLCAyMzMsIDE5MywgOTYsIDMxLCAKKyAgICA2LCAxLCAyMjAsIDIyMywgMzEsIDMsIDEsIDIyMCwgMjIzLCAzMSwgNiwgMSwgMjIxLCAzMywgMzEsIDMsIDEsIDIyMSwgMzMsIAorICAgIDMxLCA2LCAxLCAyMjEsIDM3LCAzMSwgMywgMSwgMjIxLCAzNywgMzEsIDYsIDEsIDIyMiwgOTMsIDMxLCAzLCAxLCAyMjIsIAorICAgIDkzLCAzMSwgNiwgMSwgMjQyLCAxNTEsIDMxLCAzLCAxLCAyNDIsIDE1MSwgMzEsIDYsIDEsIDIyNCwgMTU1LCAzMSwgMywgMSwgCisgICAgMjI0LCAxNTUsIDEzOSwgMSwgNjAsIDEzOSwgMSwgMTc1LCAxMzksIDEsIDY4LCAxMzksIDEsIDIzNiwgNywgMTM5LCAxLCAKKyAgICAyNDYsIDI1MCwgMTM5LCAxLCAyMjcsIDIwMCwgMTM5LCAxLCAyMjIsIDE0MiwgMTM5LCAxLCA3NCwgMTM5LCAxLCAyMzEsIAorICAgIDY3LCAxMzksIDEsIDcyLCAxMzksIDEsIDIzNSwgMTg4LCAxMzksIDEsIDE4NywgMTM5LCAxLCAyMjcsIDk4LCAxMzksIDEsIAorICAgIDIyNywgMTQzLCAxMzksIDEsIDIzNSwgMTE3LCAxMzksIDEsIDIzNCwgMTUsIDEzOSwgMSwgMjIyLCAxNTIsIDEzOSwgMSwgCisgICAgMjMyLCAxNjgsIDEzOSwgMSwgMjMyLCAxNywgMTM5LCAxLCAxODksIDEzOSwgMSwgMjIzLCA0MywgMTM5LCAxLCAyMzMsIDk5LCAKKyAgICAxMzksIDEsIDIyNCwgMjE2LCAxMzksIDEsIDIyNCwgMTQwLCAxMzksIDEsIDIyNCwgMjI1LCAxMzksIDEsIDIyNSwgNDQsIAorICAgIDEzOSwgMSwgMjM1LCAyMDgsIDEzOSwgMSwgMjM2LCAxNTksIDEzOSwgMSwgMjMxLCAxMTYsIDEzOSwgMSwgMjMxLCAxNDQsIAorICAgIDEzOSwgMSwgMjMxLCAyNTUsIDEzOSwgMSwgMjE3LCAyMTQsIDEzOSwgMSwgMjI0LCAxNzAsIDEzOSwgMSwgMjE3LCAxODIsIAorICAgIDEzOSwgMSwgMTg0LCAxMzksIDEsIDIzMSwgMTQ3LCAxMzksIDEsIDIzNiwgMTU3LCAxMzksIDEsIDIyOSwgMTQ1LCAxMzksIAorICAgIDEsIDIzMiwgMTQsIDEzOSwgMSwgMjMxLCAxNDYsIDEzOSwgMSwgMjI4LCAxOTksIDEzOSwgMSwgMjE4LCAxNjQsIDEzOSwgMSwgCisgICAgMjI5LCAxOTEsIDEzOSwgMSwgMjQ1LCAyMjYsIDEzOSwgMSwgMjI3LCAyMiwgMTM5LCAxLCAyMzQsIDIzMSwgMTM5LCAxLCAKKyAgICAyMzMsIDE5NiwgMTM5LCAxLCAyMzIsIDYyLCAxMzksIDEsIDIyNywgMTYxLCAxMzksIDEsIDIyNywgMjQ5LCAxMzksIDEsIAorICAgIDIzNiwgMTY4LCAxMzksIDEsIDIzMiwgODYsIDEzOSwgMSwgMjMyLCAxMDAsIDEzOSwgMSwgMjMyLCAxMTUsIDEzOSwgMSwgCisgICAgMjI0LCAyMDAsIDEzOSwgMSwgMjI4LCAyMDAsIDEzOSwgMSwgMjQ1LCA5MiwgMTM5LCAxLCAyNDUsIDEzNiwgMTM5LCAxLCAKKyAgICAyMTksIDcsIDEzOSwgMSwgMjA4LCAxMzksIDEsIDIzNSwgNjcsIDEzOSwgMSwgMjI5LCAxMDgsIDEzOSwgMSwgMjM0LCAyNDQsIAorICAgIDEzOSwgMSwgMjM2LCA1NywgMTM5LCAxLCAyMzQsIDMzLCAxMzksIDEsIDIyNywgMTg3LCAxMzksIDEsIDIzMywgMjUxLCAKKyAgICAxMzksIDEsIDE5NiwgMTM5LCAxLCAyMjEsIDIwNSwgMTM5LCAxLCAyMzYsIDExMywgMTM5LCAxLCAyMzMsIDEzNiwgMTM5LCAKKyAgICAxLCAyMzQsIDM2LCAxMzksIDEsIDIyMiwgNTAsIDEzOSwgMSwgMjM2LCAyNiwgMTM5LCAxLCAyMjIsIDY1LCAxMzksIDEsIAorICAgIDIzMSwgMTQ1LCAxMzksIDEsIDIyNiwgMTQ3LCAxMzksIDEsIDI0NiwgNCwgMTM5LCAxLCAyMzYsIDI4LCAxMzksIDEsIDIzNiwgCisgICAgNTQsIDEzOSwgMzYsIDE2NCwgMjM2LCAzNiwgMTM5LCAzNiwgMTY0LCAyMjAsIDI1MCwgMTM5LCAyMzIsIDE2LCAxMzksIAorICAgIDI0NSwgOTAsIDIyMywgMTM2LCAxMzksIDI1MCwgMTc1LCAxMzksIDI1MCwgMTY4LCAxMzksIDIyNSwgNjcsIDEzOSwgMjI4LCAKKyAgICA4MiwgNzgsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIDIxNywgMjQxLCAyMjksIDcyLCA1OCwgMSwgMjUxLCAyMSwgMTQ1LCAyMTgsIAorICAgIDQ2LCAyMjksIDcyLCA1OCwgMSwgMjUxLCAyMSwgMTQ1LCAyMTcsIDI0MSwgMjI1LCA4LCA1OCwgMSwgMjUxLCAyMSwgMTQ1LCAKKyAgICAyMTgsIDQ2LCAyMjUsIDgsIDU4LCAxLCAyNTEsIDIxLCAxNDUsIDIxNywgMjQxLCAyMjgsIDk4LCA1OCwgMSwgMjUxLCAyMSwgCisgICAgMTQ1LCAyMTgsIDQ2LCAyMjgsIDk4LCA1OCwgMSwgMjUxLCAyMSwgMTQ1LCAyMTcsIDI0MSwgMjI3LCAyMiwgNTgsIDEsIAorICAgIDI1MSwgMjEsIDE0NSwgMjE4LCA0NiwgMjI3LCAyMiwgNTgsIDEsIDI0NiwgODUsIDI0NywgMTQzLCAxNDUsIDEzNSwgNTgsIAorICAgIDEsIDExNiwgMjQ3LCAxNDMsIDE0NSwgMTM1LCA1OCwgMSwgMjMzLCAxOTQsIDI0NywgMTQzLCAxNDUsIDEzNSwgNTgsIDEsIAorICAgIDEwOSwgMjQ3LCAxNDMsIDE0NSwgMTM1LCA1OCwgMSwgMjQ2LCA4NCwgMjQ3LCAxNDMsIDE0NSwgMTM1LCA1OCwgMSwgMjQ2LCAKKyAgICA4NSwgMjQ3LCAxNDMsIDIzNSwgMTA5LCAxNDUsIDEzNSwgNTgsIDEsIDExNiwgMjQ3LCAxNDMsIDIzNSwgMTA5LCAxNDUsIAorICAgIDEzNSwgNTgsIDEsIDIzMywgMTk0LCAyNDcsIDE0MywgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMTA5LCAyNDcsIDE0MywgCisgICAgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMjQ2LCA4NCwgMjQ3LCAxNDMsIDIzNSwgMTA5LCAxNDUsIDEzNSwgNTgsIDEsIAorICAgIDI0NiwgODUsIDIzNSwgMTA5LCAxNDUsIDEzNSwgNTgsIDEsIDExNiwgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMjMzLCAKKyAgICAxOTQsIDIzNSwgMTA5LCAxNDUsIDEzNSwgNTgsIDEsIDEwOSwgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgMjQ2LCA4NCwgCisgICAgMjM1LCAxMDksIDE0NSwgMTM1LCA1OCwgMSwgNjEsIDY5LCAxMzUsIDU4LCAxLCA2MSwgMjI0LCA1NSwgNTgsIDEsIDYxLCAKKyAgICAxODYsIDEzNSwgNTgsIDEsIDIzNCwgMjM3LCA0NSwgMjUwLCAxMjQsIDI1NCwgMTE5LCA1OCwgMSwgMjI3LCAyNDEsIDEwOCwgCisgICAgNjUsIDU4LCAxLCAyMjcsIDI0MSwgMTEzLCA2NSwgNTgsIDEsIDIyNywgMjQxLCAyNDYsIDk1LCA3OCwgNTgsIDEsIDIyNywgCisgICAgMjQxLCAyMzcsIDE3MCwgMjQ2LCA5NSwgNzgsIDU4LCAxLCAxMDksIDIzNywgMTcwLCAyNDYsIDk1LCA3OCwgNTgsIDEsIAorICAgIDIyMywgMTI1LCAyNSwgMTE2LCAyMjEsIDEzMiwgNTgsIDEsIDIyMywgMTI1LCAyNSwgMTA5LCAyMjEsIDEzMiwgNywgNiwgMSwgCisgICAgMjQ2LCAyNDEsIDI1NCwgMTY4LCA3LCAzLCAxLCAyNDYsIDI0MSwgMjU0LCAxNjgsIDcsIDYsIDEsIDI0NiwgMjQxLCAyNTQsIAorICAgIDE5MSwgNywgMywgMSwgMjQ2LCAyNDEsIDI1NCwgMTkxLCA3LCA2LCAxLCAyNDMsIDEzNiwgNywgMywgMSwgMjQzLCAxMzYsIAorICAgIDcsIDYsIDEsIDIyMCwgMTg5LCA3LCAzLCAxLCAyMjAsIDE4OSwgNywgNiwgMSwgMjIxLCA5NCwgNywgMywgMSwgMjIxLCA5NCwgCisgICAgNywgNiwgMSwgMjUwLCA5MCwgNywgMywgMSwgMjUwLCA5MCwgNywgNiwgMSwgMjUwLCA5MSwgMiwgMjUwLCAxNjgsIDcsIDMsIAorICAgIDEsIDI1MCwgOTEsIDIsIDI1MCwgMTY4LCA3LCAxLCAzLCA2LCAyNDYsIDc0LCA3LCAxLCAzLCA2LCAxOTgsIDcsIDYsIDEsIAorICAgIDI1NSwgNTgsIDcsIDMsIDEsIDI1NSwgNTgsIDcsIDYsIDEsIDI1NCwgOTMsIDcsIDMsIDEsIDI1NCwgOTMsIDcsIDYsIDEsIAorICAgIDI1MywgMjMyLCA3LCAzLCAxLCAyNTMsIDIzMiwgNywgNiwgMSwgMjUzLCAyMjAsIDcsIDMsIDEsIDI1MywgMjIwLCA3LCA2LCAKKyAgICAxLCAyNTMsIDIyMSwgMiwgMTg2LCAxMzUsIDcsIDMsIDEsIDI1MywgMjIxLCAyLCAxODYsIDEzNSwgNywgNiwgMSwgMjUzLCAKKyAgICAyMTIsIDcsIDMsIDEsIDI1MywgMjEyLCA3LCA2LCAxLCAyMTAsIDI1MSwgMjAzLCAyLCAyNDgsIDE0NSwgNywgMywgMSwgCisgICAgMjEwLCAyNTEsIDIwMywgMiwgMjQ4LCAxNDUsIDcsIDYsIDEsIDIzNywgMTgsIDIsIDkyLCA3LCAzLCAxLCAyMzcsIDE4LCAyLCAKKyAgICA5MiwgNywgNiwgMSwgMjM3LCAxOCwgMiwgMjQ5LCAxMSwgOTIsIDcsIDMsIDEsIDIzNywgMTgsIDIsIDI0OSwgMTEsIDkyLCAKKyAgICA3LCA2LCAxLCAyMzcsIDE4LCAyLCAyMTQsIDI1LCAyNDksIDExLCA5MiwgNywgMywgMSwgMjM3LCAxOCwgMiwgMjE0LCAyNSwgCisgICAgMjQ5LCAxMSwgOTIsIDcsIDYsIDEsIDI1MiwgMSwgMTUzLCA3LCAzLCAxLCAyNTIsIDEsIDE1MywgNywgNiwgMSwgMjM1LCAKKyAgICAyMDIsIDIsIDExNiwgOTIsIDcsIDMsIDEsIDIzNSwgMjAyLCAyLCAxMTYsIDkyLCA3LCA2LCAxLCAxNDIsIDIsIDE3MSwgCisgICAgMjE0LCAyMzAsIDc0LCA3LCAzLCAxLCAxNDIsIDIsIDE3MSwgMjE0LCAyMzAsIDc0LCA3LCA2LCAxLCAxNDIsIDIsIDIzNCwgCisgICAgMjQ3LCA3LCAzLCAxLCAxNDIsIDIsIDIzNCwgMjQ3LCA3LCA2LCAxLCAyMzAsIDEyNywgNywgMywgMSwgMjMwLCAxMjcsIDcsIAorICAgIDYsIDEsIDIzMCwgNjAsIDIsIDIxNCwgMjIxLCAyMjUsIDI0OSwgNDgsIDcsIDMsIDEsIDIzMCwgNjAsIDIsIDIxNCwgMjIxLCAKKyAgICAyMjUsIDI0OSwgNDgsIDcsIDYsIDEsIDIzMCwgNjAsIDIsIDI0NSwgMTQ2LCA3LCAzLCAxLCAyMzAsIDYwLCAyLCAyNDUsIAorICAgIDE0NiwgNywgNiwgMSwgMjMwLCA2MCwgMiwgMjIzLCAyMjIsIDIyMiwgMTM1LCA3LCAzLCAxLCAyMzAsIDYwLCAyLCAyMjMsIAorICAgIDIyMiwgMjIyLCAxMzUsIDcsIDYsIDEsIDIyOCwgMTY0LCAyLCAyMTQsIDIyMSwgMjI1LCAyNDksIDQ4LCA3LCAzLCAxLCAKKyAgICAyMjgsIDE2NCwgMiwgMjE0LCAyMjEsIDIyNSwgMjQ5LCA0OCwgNywgNiwgMSwgMjI4LCAxNjQsIDIsIDI0OSwgMTEsIDkyLCAKKyAgICA3LCAzLCAxLCAyMjgsIDE2NCwgMiwgMjQ5LCAxMSwgOTIsIDcsIDYsIDEsIDIyOCwgMzksIDIyNywgNTgsIDcsIDMsIDEsIAorICAgIDIyOCwgMzksIDIyNywgNTgsIDcsIDYsIDEsIDIyNywgMTQsIDIyNywgNTgsIDcsIDMsIDEsIDIyNywgMTQsIDIyNywgNTgsIAorICAgIDcsIDYsIDEsIDIyMCwgMTEsIDIsIDI0OSwgMTEsIDkyLCA3LCAzLCAxLCAyMjAsIDExLCAyLCAyNDksIDExLCA5MiwgNywgNiwgCisgICAgMSwgMjE5LCA0OCwgNywgMywgMSwgMjE5LCA0OCwgNywgNiwgMSwgMjE5LCA3NSwgMjE3LCAxNTcsIDcsIDMsIDEsIDIxOSwgCisgICAgNzUsIDIxNywgMTU3LCA3LCA2LCAxLCAyMjEsIDIzNSwgMiwgOTIsIDcsIDMsIDEsIDIyMSwgMjM1LCAyLCA5MiwgNywgNiwgCisgICAgMSwgMjIxLCAyMzUsIDIsIDIxNCwgMjIxLCAyMjUsIDI0OSwgNDgsIDcsIDMsIDEsIDIyMSwgMjM1LCAyLCAyMTQsIDIyMSwgCisgICAgMjI1LCAyNDksIDQ4LCA3LCA2LCAxLCAyMTksIDE1NywgNywgMywgMSwgMjE5LCAxNTcsIDcsIDYsIDEsIDI0NiwgMTIzLCA3LCAKKyAgICAzLCAxLCAyNDYsIDEyMywgNywgNiwgMSwgMjM3LCAxNTEsIDcsIDMsIDEsIDIzNywgMTUxLCA3LCA2LCAxLCAyNTAsIDE1OCwgCisgICAgNywgMywgMSwgMjUwLCAxNTgsIDU4LCAxLCAyMjAsIDM0LCA3LCAzLCAxLCAyNDcsIDEwMiwgNywgMywgMSwgMjM0LCAyMTksIAorICAgIDcsIDMsIDEsIDIzMywgODAsIDcsIDMsIDEsIDIzMSwgMTA5LCA3LCAzLCAxLCAyMjcsIDEzLCA3LCAxLCAzLCA2LCAyMjcsIAorICAgIDEzLCA3LCAzLCAxLCAyMjAsIDI0OSwgNywgMywgMSwgMjIwLCA5NCwgNywgNiwgMSwgMjM3LCAxODgsIDI1MCwgNDYsIDcsIAorICAgIDMsIDEsIDIzNywgMTg4LCAyNTAsIDQ2LCA3LCA2LCAxLCAyMzcsIDE4OCwgMjQ2LCA3NCwgNywgMywgMSwgMjM3LCAxODgsIAorICAgIDI0NiwgNzQsIDcsIDYsIDEsIDIzNywgMTg4LCAyNDUsIDY3LCA3LCA2LCAxLCAyMTUsIDIzNywgMTg4LCAyNDUsIDY3LCA3LCAKKyAgICAzLCAxLCAyMTUsIDIzNywgMTg4LCAyNDUsIDY3LCA3LCA2LCAxLCAyMTUsIDE1MywgNywgMywgMSwgMjE1LCAxNTMsIDcsIDYsIAorICAgIDEsIDIzNywgMTg4LCAxNTIsIDcsIDMsIDEsIDIzNywgMTg4LCAxNTIsIDcsIDYsIDEsIDIzNywgMTg4LCAxOTgsIDcsIDMsIAorICAgIDEsIDIzNywgMTg4LCAxOTgsIDcsIDYsIDEsIDIzNywgMTg4LCAyMjIsIDIwMSwgNywgMywgMSwgMjM3LCAxODgsIDIyMiwgCisgICAgMjAxLCA1OCwgMSwgMTA5LCAyNTAsIDIxNywgMjU1LCAwLCA1OCwgMSwgMjUwLCAxNzUsIDU4LCAxLCAyMjQsIDE5MiwgMjQ2LCAKKyAgICAxNTQsIDU1LCA3LCA2LCAxLCAyMjYsIDE1MCwgNywgMywgMSwgMjI2LCAxNTAsIDcsIDI0NiwgMTU4LCAxLCAyMTAsIDI0NiwgCisgICAgNzQsIDcsIDI0NiwgMTU4LCAxLCAyMTAsIDIzMCwgNTksIDcsIDI0NiwgMTU4LCAxLCAyMzcsIDE3MCwgMTg5LCA3LCAyNDYsIAorICAgIDE1OCwgMSwgMjQyLCAxMDcsIDIzNCwgMjUwLCA3LCAyNDYsIDE1OCwgMSwgMjU0LCA0OSwgMTg5LCAyMjMsIDE5LCAyMzIsIAorICAgIDIyNSwgMSwgNjAsIDIyMywgMTksIDIzMiwgMjI1LCAxLCA3MiwgMjIzLCAxOSwgMjMyLCAyMjUsIDUsIDI0NywgODQsIDIyMywgCisgICAgMTksIDIzMiwgMjI1LCAxLCA2OCwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDczLCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgNzQsIAorICAgIDIyMywgMTksIDIzMiwgMjI1LCA1LCAyNDMsIDE3NSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIzNiwgNTcsIDIyMywgMTksIAorICAgIDIzMiwgMjI1LCAxLCAyMzYsIDEyNSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI0NCwgNjgsIDIyMywgMTksIDIzMiwgMjI1LCAKKyAgICAxLCAyNDQsIDExMiwgMjIzLCAxOSwgMjMyLCAyMjUsIDUsIDI1NCwgOTUsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyNTAsIAorICAgIDE4MiwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI1MSwgMTEsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyMzcsIDU5LCAyMjMsIAorICAgIDE5LCAyMzIsIDIyNSwgMSwgMjM3LCA5OSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIyMSwgMTEsIDIyMywgMTksIDIzMiwgCisgICAgMjI1LCAxLCAyMjEsIDE1LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjQ5LCAxMDcsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAKKyAgICAyNDksIDExNSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDEwMSwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIyMSwgMjM5LCAyMjMsIAorICAgIDE5LCAyMzIsIDIyNSwgMSwgMjQ4LCAxNjcsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyNDksIDE5LCAyMjMsIDE5LCAyMzIsIAorICAgIDIyNSwgMSwgMjMxLCAyMDQsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyMjksIDM3LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgCisgICAgMjI5LCAxMTgsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyNTIsIDQxLCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjUyLCA4OCwgCisgICAgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDIzMywgMTM2LCAyMjMsIDE5LCAyMzIsIDIyNSwgMSwgMjI3LCA3NSwgMjIzLCAxOSwgCisgICAgMjMyLCAyMjUsIDEsIDIzNSwgMTIsIDIyMywgMTksIDIzMiwgMjI1LCAxLCAyMjcsIDQ0LCAyMjMsIDE5LCAyMzIsIDIyNSwgCisgICAgMSwgMjI0LCAyNiwgMjIzLCAxOSwgMjMyLCAyMjUsIDEsIDI0MywgNCwgMjIzLCAxOSwgMjMyLCAyMjUsIDI5LCA1LCA2MCwgCisgICAgMjIzLCAxOSwgMjMyLCAyMjUsIDI5LCA1LCA3MiwgMjIzLCAxOSwgMjMyLCAyMjUsIDI5LCA1LCA2OCwgMjIzLCAxOSwgMjMyLCAKKyAgICAyMjUsIDI5LCA1LCA3MywgMjIzLCAxOSwgMjMyLCAyMjUsIDI5LCA1LCAyMzAsIDEyNywgMjIzLCAxOSwgMjMyLCAyMjUsIAorICAgIDIyOSwgMzMsIDIzNCwgNjcsIDIyMywgMTksIDIzMiwgMjI1LCAyMjksIDMzLCAyMzQsIDY2LCAyMjMsIDE5LCAyMzIsIDIyNSwgCisgICAgMjI5LCAzMywgMjM0LCA2NSwgMjIzLCAxOSwgMjMyLCAyMjUsIDIyOSwgMzMsIDIzNCwgNjQsIDIzMSwgMTg3LCAyMzcsIAorICAgIDIxMiwgMjQ1LCAxMDgsIDEzMSwgMjI4LCA4OSwgMjMxLCAxODcsIDIzNywgMjEyLCAyNDUsIDEwOCwgMTMxLCAyNDMsIDE5NCwgCisgICAgMjMxLCAxODcsIDIzNywgMjEyLCAyNDUsIDEwOCwgMTQ4LCAyMjgsIDg3LCAyMzEsIDE4NywgMjM3LCAyMTIsIDI0NSwgMTA4LCAKKyAgICAxMzEsIDIyNCwgNzUsIDIzMSwgMTg3LCAyMzcsIDIxMiwgMjQ1LCAxMDgsIDEzMSwgMjQ2LCAyMzEsIDIzMSwgMTg3LCAyMzcsIAorICAgIDIxMiwgMjQ1LCAxMDgsIDE0OCwgMjI0LCA3NCwgMjMxLCAxODcsIDIzNywgMjEyLCAyMjgsIDkwLCA3OCwgMjMxLCAxODcsIAorICAgIDIzNywgMjEyLCAyMjksIDU2LCA3OCwgMjMxLCAxODcsIDIzNywgMjEyLCAyMjcsIDQsIDc4LCAyMzEsIDE4NywgMjM3LCAKKyAgICAyMTIsIDIyOCwgOTEsIDc4LCAyMjksIDEzOCwgMSwgMTc1LCAyMjksIDEzOCwgMSwgMjM2LCAxNDksIDIyOSwgMTM4LCAxLCAKKyAgICAyNDUsIDAsIDIyOSwgMTM4LCAxLCAyMzIsIDExNSwgMjI5LCAxMzgsIDEsIDI1MSwgMTY5LCAyMjksIDEzOCwgMSwgMjUxLCAKKyAgICA2OSwgMjI5LCAxMzgsIDEsIDIzNywgMTIzLCAyMjksIDEzOCwgMSwgMjMxLCA3NywgMjI5LCAxMzgsIDEsIDIyMiwgMTU1LCAKKyAgICAyMjksIDEzOCwgMSwgMjIyLCAzNSwgMjI5LCAxMzgsIDEsIDI0OSwgMjA3LCAyMjksIDEzOCwgMSwgMjA4LCAyMjksIDEzOCwgCisgICAgMSwgMTg3LCAyMjksIDEzOCwgMSwgMjI5LCAxNDEsIDIyOSwgMTM4LCAxLCAyNTIsIDIzNywgMjI5LCAxMzgsIDEsIDE5NiwgCisgICAgMjI5LCAxMzgsIDEsIDIyMSwgNTUsIDIyOSwgMTM4LCAxLCAyMjEsIDQ3LCAyMjksIDEzOCwgMSwgMjQ3LCA3NCwgMjI5LCAKKyAgICAxMzgsIDEsIDIxOSwgNywgMjI5LCAxMzgsIDEsIDIxNywgODAsIDIyOSwgMTM4LCAxLCAyMTcsIDExNCwgMjI5LCAxMzgsIDEsIAorICAgIDMsIDYwLCAyMjksIDEzOCwgMSwgMTg0LCAyMjksIDEzOCwgMSwgMjAzLCAyMjksIDEzOCwgMSwgMjM1LCAxODgsIDIyOSwgCisgICAgMTM4LCAxLCAyMjUsIDI1LCAyMjksIDEzOCwgMSwgMjI2LCAxNzcsIDIyOSwgMTM4LCAxLCAxNTUsIDIyOSwgMTM4LCAxLCAKKyAgICA2MCwgMjI5LCAxMzgsIDEsIDcyLCAyMjksIDEzOCwgMSwgNjgsIDIyOSwgMTM4LCAxLCA3MywgMjI5LCAxMzgsIDEsIDc0LCAKKyAgICAyMjksIDEzOCwgMSwgMjI4LCAxNTUsIDIyOSwgMTM4LCAxLCAyMTgsIDEzOCwgMjI5LCAxMzgsIDEsIDI0NiwgOCwgMjI5LCAKKyAgICAxMzgsIDEsIDI0NCwgMTYwLCAyMjksIDEzOCwgMSwgMjQ2LCAyNTAsIDIyOSwgMTM4LCAyMjMsIDk3LCAxLCAyMTksIDcsIAorICAgIDIyOSwgMTM4LCAyMjMsIDk3LCAxLCAxODQsIDIyOSwgMTM4LCAxLCAyMjEsIDI5LCAyMjksIDEzOCwgMSwgMjIxLCAxOSwgCisgICAgMjI5LCAxMzgsIDEsIDI0OSwgMTMyLCAyMjksIDEzOCwgMSwgMjMxLCAyMTcsIDIyOSwgMTM4LCAxLCAyNTQsIDE0NCwgMTg0LCAKKyAgICAyMjksIDEzOCwgMSwgMjE5LCA2OSwgMjI1LCAyNSwgMjI5LCAxMzgsIDEsIDIxOSwgNzAsIDE1NSwgMjI5LCAxMzgsIDEsIAorICAgIDI1NCwgMSwgMjQ2LCA4LCAyMjksIDEzOCwgMjIzLCA5NywgMSwgMjAzLCAyMjksIDEzOCwgMjIzLCA2MSwgMSwgMjAzLCAKKyAgICAyMjksIDEzOCwgMSwgMjUxLCAxNDYsIDIyOSwgMTM4LCAyMjQsIDEwOSwgMjQzLCAxNjAsIDc4LCAyMjksIDEzOCwgNTEsIAorICAgIDI0MywgMTYwLCA3OCwgMjI5LCAxMzgsIDE2NCwgMjI1LCAxOCwgMjI5LCAxMzgsIDE2NCwgNTEsIDIyNSwgMTgsIDE1OCwgNSwgCisgICAgMjU0LCA5NSwgMTU4LCA1LCAyMTksIDc3LCAxNTgsIDEsIDYwLCAxNTgsIDEsIDI1NSwgNTgsIDE1OCwgMSwgNzIsIDE1OCwgCisgICAgMSwgMjM3LCAyNTUsIDE1OCwgMSwgNjgsIDE1OCwgMSwgMjIwLCAyMywgMTU4LCAxLCAxNjcsIDE1MiwgMTU4LCAxLCAxNjcsIAorICAgIDIyNywgNTMsIDE1OCwgMSwgMTY3LCAxNTMsIDE1OCwgMSwgMTY3LCAyMzUsIDE4LCAxNTgsIDEsIDczLCAxNTgsIDEsIDI0NiwgCisgICAgMjUwLCAxNTgsIDEsIDI1NCwgMTk2LCAxNTgsIDEsIDc0LCAxNTgsIDEsIDIzMCwgMTI3LCAxNTgsIDEsIDI1MywgMjMyLCAKKyAgICAxNTgsIDEsIDE3NSwgMTU4LCAxLCAyMzYsIDE0OSwgMTU4LCAxLCAyNDUsIDAsIDE1OCwgMSwgMjQ0LCAxMjUsIDE1OCwgMSwgCisgICAgMjMyLCAxMTUsIDE1OCwgMSwgMjUxLCAxNjksIDE1OCwgMSwgMjUxLCA2OSwgMTU4LCAxLCAyMzcsIDEyMywgMTU4LCAxLCAKKyAgICAyMzcsIDEwMywgMTU4LCAxLCAyMzEsIDc3LCAxNTgsIDEsIDIyMSwgMjksIDE1OCwgMSwgMjIxLCAxOSwgMTU4LCAxLCAyNDksIAorICAgIDEzMiwgMTU4LCAxLCAyNDksIDExNiwgMTU4LCAxLCAyMzEsIDIxNywgMTU4LCAxLCAyMjIsIDE1NSwgMTU4LCAxLCAyMjIsIAorICAgIDM1LCAxNTgsIDEsIDI0OSwgMjA3LCAxNTgsIDEsIDI0OSwgMzYsIDE1OCwgMSwgMjA4LCAxNTgsIDEsIDE4NywgMTU4LCAxLCAKKyAgICAyMjksIDE0MSwgMTU4LCAxLCAyNTIsIDIzNywgMTU4LCAxLCAyNTIsIDk0LCAxNTgsIDEsIDE5NiwgMTU4LCAxLCAxODQsIAorICAgIDE1OCwgMSwgMjAzLCAxNTgsIDEsIDIzNSwgMTg4LCAxNTgsIDEsIDIxOSwgMTg5LCAxNTgsIDEsIDIyNSwgMjUsIDE1OCwgMSwgCisgICAgMjIzLCAyMTgsIDE1OCwgMSwgMjI2LCAxNzcsIDE1OCwgMSwgMTU1LCAxNTgsIDEsIDIzNSwgMTcsIDE1OCwgMjUwLCAxNDcsIAorICAgIDUsIDI0MywgMjA5LCAxNTgsIDI5LCA1LCAyNTUsIDU4LCAxNTgsIDI5LCA1LCA3MiwgMTU4LCAyOSwgNSwgMjM3LCAyNTUsIAorICAgIDE1OCwgMjksIDUsIDY4LCAxNTgsIDI5LCA1LCAyMjAsIDIzLCAxNTgsIDI5LCA1LCAxNjcsIDE1MiwgMTU4LCAyOSwgNSwgCisgICAgMTY3LCAyMjcsIDUzLCAxNTgsIDI5LCA1LCAxNjcsIDE1MywgMTU4LCAyOSwgNSwgMTY3LCAyMzUsIDE4LCAxNTgsIDI5LCA1LCAKKyAgICA3MywgMTU4LCAyOSwgNSwgMjQ2LCAyNTAsIDE1OCwgMjksIDUsIDI1NCwgMTk2LCAxNTgsIDI5LCA1LCA3NCwgMTU4LCAyOSwgCisgICAgNSwgMjMwLCAxMjcsIDE1OCwgMjksIDUsIDI1MywgMjMyLCAxNTgsIDUsIDIxOSwgODIsIDE1OCwgMjQ5LCAxNjcsIDE1OCwgCisgICAgNTEsIDI0OSwgMTY3LCAxNTgsIDIwLCAyMTcsIDg0LCAxNTgsIDIwLCAxMDcsIDE1OCwgMjAsIDEwMywgMTU4LCAyMCwgMTYwLCAKKyAgICAxNTgsIDIwLCAxNTQsIDE1OCwgMjAsIDE3NCwgMTU4LCAyMCwgMTgyLCAxNTgsIDIwLCAxOTEsIDE1OCwgMjAsIDE4NSwgCisgICAgMTU4LCAyMCwgMTkwLCAzNiwgODAsIDIwLCAyMTcsIDg0LCAzNiwgODAsIDIwLCAxMDcsIDM2LCA4MCwgMjAsIDEwMywgMzYsIAorICAgIDgwLCAyMCwgMTYwLCAzNiwgODAsIDIwLCAxNTQsIDM2LCA4MCwgMjAsIDE3NCwgMzYsIDgwLCAyMCwgMTgyLCAzNiwgODAsIAorICAgIDIwLCAxOTEsIDM2LCA4MCwgMjAsIDE4NSwgMzYsIDgwLCAyMCwgMTkwLCAzNiwgODAsIDEsIDYwLCAzNiwgODAsIDEsIDY4LCAKKyAgICAzNiwgODAsIDEsIDE3NSwgMzYsIDgwLCAxLCAyMDgsIDM2LCA4MCwgMSwgMTg3LCAzNiwgODAsIDEsIDIwMywgMzYsIDgwLCAKKyAgICAxLCAyMTksIDk0LCAzNiwgODAsIDUsIDI1MywgMjE5LCA4MCwgNSwgMjIzLCAyNTMsIDI1MSwgMTQ2LCA4MCwgNSwgMjUxLCAKKyAgICAxNDcsIDIxOSwgODIsIDgwLCA1LCA1MSwgMjUxLCAxNDcsIDIxOSwgODIsIDgwLCA1LCAyNTEsIDE0NywgMTAzLCA4MCwgNSwgCisgICAgMjUxLCAxNDcsIDE2MCwgODAsIDUsIDI1MSwgMTQ3LCAyNTMsIDIxOSwgODAsIDUsIDIyOCwgMTg2LCA4MCwgMjQ0LCAyMjQsIAorICAgIDI0NSwgMTg1LCA4MCwgMjUxLCAxMzQsIDgwLCAyNDMsIDE1NSwgMjM2LCAxOTAsIDIzNSwgNjgsIDIwLCAyMTcsIDg0LCAKKyAgICAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDEwNywgMjM2LCAxOTAsIDIzNSwgNjgsIDIwLCAxMDMsIDIzNiwgMTkwLCAyMzUsIAorICAgIDY4LCAyMCwgMTYwLCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDE1NCwgMjM2LCAxOTAsIDIzNSwgNjgsIDIwLCAxNzQsIDIzNiwgCisgICAgMTkwLCAyMzUsIDY4LCAyMCwgMTgyLCAyMzYsIDE5MCwgMjM1LCA2OCwgMjAsIDE5MSwgMjM2LCAxOTAsIDIzNSwgNjgsIDIwLCAKKyAgICAxODUsIDIzNiwgMTkwLCAyMzUsIDY4LCAyMCwgMTkwLCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMTc1LCAyMzYsIDE5MCwgCisgICAgMjM1LCA2OCwgMSwgMjM2LCAxNDksIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyNDUsIDAsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAKKyAgICAyMzIsIDExNSwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIyNiwgMTc3LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjI1LCAyNSwgCisgICAgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIxNywgMTE0LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjMxLCA3NywgMjM2LCAxOTAsIAorICAgIDIzNSwgNjgsIDEsIDIyMiwgMTU1LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgMjQyLCAxNzUsIDIzNiwgMTkwLCAyMzUsIDY4LCAKKyAgICAxLCAyMDgsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAxODcsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyMjksIDE0MSwgMjM2LCAKKyAgICAxOTAsIDIzNSwgNjgsIDEsIDE5NiwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDI0OSwgMjA3LCAyMzYsIDE5MCwgMjM1LCA2OCwgCisgICAgMSwgMjUyLCAyMzcsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyMDMsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAxODQsIDIzNiwgCisgICAgMTkwLCAyMzUsIDY4LCAxLCAyMzUsIDE4OCwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDIxOSwgNywgMjM2LCAxOTAsIDIzNSwgCisgICAgNjgsIDEsIDIyMiwgMzUsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAxNTUsIDIzNiwgMTkwLCAyMzUsIDY4LCAxLCAyMTksIAorICAgIDE4OSwgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDI1MSwgMTY5LCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgNjAsIDIzNiwgMTkwLCAKKyAgICAyMzUsIDY4LCAxLCAyMzAsIDE2NywgMjM2LCAxOTAsIDIzNSwgNjgsIDEsIDcyLCAyMzYsIDE5MCwgMjM1LCA2OCwgMSwgCisgICAgMjMwLCAxMjcsIDIzNiwgMTkwLCAyMzUsIDY4LCAyOSwgMjIwLCAxMTAsIDIzNiwgMTkwLCAyMzUsIDY4LCAyOSwgNzMsIAorICAgIDIzNiwgMTkwLCAyMzUsIDY4LCAyOSwgNjgsIDIzNiwgMTkwLCAyMzUsIDY4LCAyOSwgMjQ2LCAyNTAsIDIzNiwgMTkwLCAKKyAgICAyMzUsIDY4LCAyOSwgNzQsIDIzNiwgMTkwLCAyMzUsIDY4LCAxNDUsIDIyOSwgNDgsIDIzNiwgMTkwLCAyMzUsIDY4LCAxNDUsIAorICAgIDI1MSwgMTU3LCAyMzYsIDE5MCwgMjM1LCA2OCwgMTQ1LCAyNTEsIDE1OCwgMjI5LCA0OCwgMjM2LCAxOTAsIDIzNSwgNjgsIAorICAgIDUsIDI1MCwgNjIsIDIzNiwgMTkwLCAyMzUsIDY4LCA1LCAyMjQsIDE0OCwgMjI3LCAxOTQsIDEsIDE3NSwgMjI3LCAxOTQsIAorICAgIDEsIDI0NSwgMCwgMjI3LCAxOTQsIDEsIDIzMiwgMTE1LCAyMjcsIDE5NCwgMSwgMjIyLCAxNTUsIDIyNywgMTk0LCAxLCAKKyAgICAyNDksIDIwNywgMjI3LCAxOTQsIDEsIDIwOCwgMjI3LCAxOTQsIDEsIDE4NywgMjI3LCAxOTQsIDEsIDI1MiwgMjM3LCAyMjcsIAorICAgIDE5NCwgMSwgMTk2LCAyMjcsIDE5NCwgMSwgMjUxLCAxNjksIDIyNywgMTk0LCAxLCAyMzcsIDEyMywgMjI3LCAxOTQsIDEsIAorICAgIDIzMSwgNzcsIDIyNywgMTk0LCAxLCAyMjYsIDE3NywgMjI3LCAxOTQsIDEsIDIwMywgMjI3LCAxOTQsIDEsIDIzNSwgMTg4LCAKKyAgICAyMjcsIDE5NCwgMSwgMTg0LCAyMjcsIDE5NCwgMSwgMjE5LCA3LCAyMjcsIDE5NCwgMSwgMTU1LCAyMjcsIDE5NCwgMSwgCisgICAgMjM0LCAzNywgMjI3LCAxOTQsIDEsIDIzMiwgMTAwLCAyMjcsIDE5NCwgMSwgMjMyLCAxNjksIDIyNywgMTk0LCAxLCAyMzEsIAorICAgIDU3LCAyMjcsIDE5NCwgMSwgNjAsIDIyNywgMTk0LCAyOSwgNSwgNzIsIDIyNywgMTk0LCAyOSwgNSwgNjgsIDIyNywgMTk0LCAKKyAgICAyOSwgNSwgNzMsIDIyNywgMTk0LCAyOSwgNSwgMjU0LCAxOTYsIDIyNywgMTk0LCAyOSwgNSwgNzQsIDIyNywgMTk0LCAyOSwgCisgICAgNSwgMjUzLCAyMzIsIDIyNywgMTk0LCAyOSwgNSwgMjQ2LCAxMTUsIDIyNywgMTk0LCAyOSwgNSwgMjQ3LCAxNiwgMjI3LCAKKyAgICAxOTQsIDI1MCwgMTQ3LCA1LCAyMzIsIDExNywgMjI3LCAxOTQsIDI1MCwgMTQ3LCA1LCAyMDcsIDIyNywgMTk0LCAyNTAsIAorICAgIDE0NywgNSwgMTUyLCAyMjcsIDE5NCwgMjUwLCAxNDcsIDUsIDI0MywgMjI1LCAyMjcsIDE5NCwgMjE5LCA4MiwgMjI3LCAKKyAgICAxOTQsIDIyNiwgODcsIDc4LCAyMiwgOTEsIDIyMSwgMTg4LCAyMiwgOTEsIDIyMSwgMTg3LCAyMiwgOTEsIDIyMSwgMTg1LCAKKyAgICAyMiwgOTEsIDIyMSwgMTkwLCAyMiwgOTEsIDIyNywgMTM1LCAyMiwgOTEsIDIyNywgMTE5LCAyMiwgOTEsIDIyNywgMTE0LCAKKyAgICAyMiwgOTEsIDIyNywgMTE2LCAyMiwgOTEsIDIyNywgMTMyLCAyMiwgOTEsIDIyNywgMTI1LCAyMiwgOTEsIDIyNywgMTE4LCAKKyAgICAyMiwgOTEsIDIyNywgMTM3LCAyMiwgOTEsIDIyNywgMTIwLCAyMiwgOTEsIDIyNywgMTM5LCAyMiwgOTEsIDIyNywgMTM2LCAKKyAgICAyMiwgOTEsIDIzMywgMTgzLCAyMiwgOTEsIDIzMywgMTc0LCAyMiwgOTEsIDIzMywgMTc3LCAyMiwgOTEsIDIyOSwgODQsIAorICAgIDIyLCA5MSwgMjI5LCA5NSwgMjIsIDkxLCAyMjksIDk2LCAyMiwgOTEsIDIyMywgMjAzLCAyMiwgOTEsIDIzOCwgMTIsIDIyLCAKKyAgICA5MSwgMjM4LCAxOSwgMjIsIDkxLCAyMjMsIDIxNCwgMjIsIDkxLCAyMjMsIDIwMSwgMjIsIDkxLCAyMjksIDEyNiwgMjIsIAorICAgIDkxLCAyNDMsIDEwMSwgMjIsIDkxLCAyMjMsIDE5OCwgMTMzLCA1LCAyMjksIDI1MiwgMTMzLCA1LCAyNTEsIDk2LCAxMzMsIAorICAgIDUsIDIzNSwgMTMwLCAxMzMsIDUsIDIxOCwgMTk3LCAxMzMsIDEsIDYwLCAxMzMsIDEsIDI0MiwgMTA3LCAyMzYsIDE5MywgCisgICAgMTMzLCAxLCA3MiwgMTMzLCAxLCAyMzcsIDI1NSwgMTMzLCAxLCA2OCwgMTMzLCAxLCAyMzAsIDQ0LCAyNTEsIDczLCAxMzMsIAorICAgIDEsIDIzMiwgMTE2LCAyMzUsIDk4LCAxMzMsIDEsIDIzMiwgMTE2LCAyMzUsIDk5LCAyMjcsIDIyOSwgMTMzLCAxLCA3MywgCisgICAgMTMzLCAxLCAyNTQsIDE5NiwgMTMzLCAxLCA3NCwgMTMzLCAxLCAxNzUsIDEzMywgMSwgMjA2LCAyMjYsIDEyOCwgMTMzLCAxLCAKKyAgICAyMDYsIDIzMywgNjcsIDEzMywgMSwgMjQ1LCAwLCAxMzMsIDEsIDI0NSwgMSwgMjMzLCA2NywgMTMzLCAxLCAyMzIsIDExNSwgCisgICAgMTMzLCAxLCAyNTEsIDE2OSwgMTMzLCAxLCAyNTEsIDE3MCwgMjMzLCA2NywgMTMzLCAxLCAyMzcsIDEyMywgMTMzLCAxLCAKKyAgICAyMzEsIDc4LCAyMzMsIDY3LCAxMzMsIDEsIDIzNywgMTI0LCAyMzQsIDEwMywgMTMzLCAxLCAyMzEsIDc3LCAxMzMsIDEsIAorICAgIDIyMSwgMjksIDEzMywgMSwgMjIxLCAzMCwgMjM0LCAxMDMsIDEzMywgMSwgMjQ5LCAxMzIsIDEzMywgMSwgMjQ5LCAxMzMsIAorICAgIDIzNCwgMTAzLCAxMzMsIDEsIDIzMiwgMjM4LCAyMzMsIDY3LCAxMzMsIDEsIDIyMiwgMTU1LCAxMzMsIDEsIDIyMiwgMTU2LCAKKyAgICAyMzMsIDY3LCAxMzMsIDEsIDI0OSwgMjA3LCAxMzMsIDEsIDI0OSwgMjA4LCAyMzQsIDEwMywgMTMzLCAxLCAyMDgsIDEzMywgCisgICAgMSwgMTg3LCAxMzMsIDEsIDIzMCwgNDQsIDIzMywgNjcsIDEzMywgMSwgMjUyLCAyMzcsIDEzMywgMSwgMjUyLCAyMzgsIAorICAgIDIzMywgNjcsIDEzMywgMSwgMTk2LCAxMzMsIDEsIDE4NCwgMTMzLCAxLCAyMDMsIDEzMywgMSwgMjI4LCAzLCAyNTQsIDIwMywgCisgICAgMTMzLCAxLCAyMzUsIDE4OCwgMTMzLCAxLCAyMTksIDcsIDEzMywgMSwgMjI2LCAxNzgsIDIzMywgNjcsIDEzMywgMSwgMjI2LCAKKyAgICAxNzgsIDIzNCwgMTAzLCAxMzMsIDEsIDIyNiwgMTc3LCAxMzMsIDEsIDE1NSwgMTMzLCA1LCAyNTEsIDk3LCAyMjIsIDY4LCAKKyAgICAxMzMsIDI5LCA1LCAyMjIsIDExMSwgMTMzLCAyOSwgNSwgMjIxLCAxMzUsIDEzMywgMjksIDUsIDIxOCwgMTYyLCAxMzMsIAorICAgIDI5LCA1LCAyMTgsIDE2MywgMjM0LCA1LCAxMzMsIDI5LCA1LCAyMjMsIDc3LCAxMzMsIDI5LCA1LCAyMjMsIDc4LCAyMzMsIAorICAgIDI1MCwgMTMzLCAyOSwgNSwgMjIyLCAxMjQsIDEzMywgMjksIDUsIDI0OCwgMjA3LCAyMzMsIDY2LCAxMzMsIDI5LCA1LCAKKyAgICAyMjksIDE3MSwgMTMzLCAyNTAsIDE0NywgNSwgMjM2LCAxNjEsIDEzMywgMjUwLCAxNDcsIDUsIDIyOSwgMTc5LCAxMzMsIAorICAgIDI1MCwgMTQ3LCA1LCAyNTEsIDE2MiwgMTMzLCAyMzAsIDYsIDEzMywgNDIsIDIyNywgMTc2LCAxMzMsIDQ1LCAyMjcsIDE3NiwgCisgICAgMTMzLCAyMzAsIDM2LCAyNTQsIDEyNSwgMTMzLCAyMzAsIDM2LCAyMzQsIDEwNywgMTMzLCAyMzAsIDM2LCAyMzQsIDIyMywgCisgICAgMTMzLCAyMzAsIDM2LCAyMTgsIDE5MywgMTMzLCAyMzAsIDM2LCAyMzAsIDcsIDEzMywgMjMwLCAzNiwgMjM1LCAzNSwgMTMzLCAKKyAgICAyMzAsIDM2LCAyMzQsIDIxNywgMTMzLCAyMzAsIDM2LCAyNTQsIDIzOSwgMTMzLCAyMzAsIDM2LCAyNTQsIDI0MCwgMjU0LCAKKyAgICAyMzksIDEzMywgMjMwLCAzNiwgMjI5LCA2NSwgMTMzLCAyMTUsIDIzMCwgMzYsIDIyOSwgNjUsIDEzMywgMjMwLCA0LCAxMzMsIAorICAgIDIwLCAyMTcsIDg0LCAxMzMsIDIwLCAxMDcsIDEzMywgMjAsIDEwMywgMTMzLCAyMCwgMTYwLCAxMzMsIDIwLCAxNTQsIDEzMywgCisgICAgMjAsIDE3NCwgMTMzLCAyMCwgMTgyLCAxMzMsIDIwLCAxOTEsIDEzMywgMjAsIDE4NSwgMTMzLCAyMCwgMTkwLCAxMzMsIAorICAgIDIzMCwgMzYsIDIyMSwgMTYzLCAyMjAsIDI0OCwgMTMzLCAyMzAsIDM2LCAyMzcsIDE0NywgMTQ5LCAxLCA2MCwgMTQ5LCAxLCAKKyAgICA3MiwgMTQ5LCAxLCA2OCwgMTQ5LCAxLCA3MywgMTQ5LCAxLCAyNTQsIDE5NiwgMTQ5LCAxLCA3NCwgMTQ5LCAxLCAxNzUsIAorICAgIDE0OSwgMSwgMjM2LCAxNDksIDE0OSwgMSwgMjQ1LCAwLCAxNDksIDEsIDI0NCwgMTI1LCAxNDksIDEsIDIzMiwgNzMsIDE0OSwgCisgICAgMSwgMjMyLCAxMTUsIDE0OSwgMSwgMjUxLCA2OSwgMTQ5LCAxLCAyNTEsIDMzLCAxNDksIDEsIDIzNywgMTIzLCAxNDksIDEsIAorICAgIDIzNywgMTAzLCAxNDksIDEsIDIzMiwgNjQsIDE0OSwgMSwgMjMyLCA2NiwgMTQ5LCAxLCAyMzIsIDY1LCAxNDksIDEsIDIyMiwgCisgICAgMTU1LCAxNDksIDEsIDIyMiwgMzUsIDE0OSwgMSwgMjQ5LCAyMDcsIDE0OSwgMSwgMjQ5LCAzNiwgMTQ5LCAxLCAyMzEsIAorICAgIDExNCwgMTQ5LCAxLCAyMDgsIDE0OSwgMSwgMjQ5LCAxMzIsIDE0OSwgMSwgMTg3LCAxNDksIDEsIDIyOSwgNiwgMTQ5LCAxLCAKKyAgICAyMjksIDE0MSwgMTQ5LCAxLCAyNTIsIDIzNywgMTQ5LCAxLCAyNTIsIDk0LCAxNDksIDEsIDIzMywgOTQsIDE0OSwgMSwgCisgICAgMTk2LCAxNDksIDEsIDI1MiwgMTc4LCAxNDksIDEsIDE4NCwgMTQ5LCAxLCAyMDMsIDE0OSwgMSwgMjM1LCAxODgsIDE0OSwgCisgICAgMSwgMjE5LCAxODksIDE0OSwgMSwgMjIzLCAyMTgsIDE0OSwgMSwgMjI2LCAxNzcsIDE0OSwgMSwgMTU1LCAxNDksIDI5LCA1LCAKKyAgICAyNTUsIDU4LCAxNDksIDI5LCA1LCA3MiwgMTQ5LCAyOSwgNSwgMjM3LCAyNTUsIDE0OSwgMjksIDUsIDI0NiwgMjM3LCAxNDksIAorICAgIDI5LCA1LCA2OCwgMTQ5LCAyOSwgNSwgMjMwLCAxNjcsIDE0OSwgMjksIDUsIDc0LCAxNDksIDI5LCA1LCAyNTQsIDE5NiwgCisgICAgMTQ5LCAyOSwgNSwgMjUzLCAyMzIsIDE0OSwgMjksIDUsIDIyMCwgMTEwLCAxNDksIDI1MCwgMTQ3LCA1LCAxODQsIDE0OSwgCisgICAgMjUwLCAxNDcsIDUsIDIwMywgMTQ5LCAyNTAsIDE0NywgNSwgMjM1LCAxODgsIDE0OSwgMjUwLCAxNDcsIDUsIDIxOSwgNywgCisgICAgMTQ5LCAxLCAzOSwgMjM3LCAxNywgMTQ5LCAxLCAzOSwgMjQ1LCA2NywgMTQ5LCAxLCAzOSwgMjMyLCAxMTcsIDE0OSwgMjUwLCAKKyAgICAxNDcsIDUsIDM5LCAyMzIsIDExNywgMTQ5LCAxLCAzOSwgMjUxLCA3MCwgMTQ5LCAxLCAzOSwgMjIyLCAyMDEsIDE0OSwgMSwgCisgICAgMzksIDIwNywgMTQ5LCAxLCAzOSwgMjMwLCA1OSwgMTQ5LCAxLCAzOSwgMjE4LCA5MCwgMTQ5LCAxLCAzOSwgMTUyLCAxNDksIAorICAgIDEsIDM5LCAxNTMsIDE0OSwgMSwgMzksIDIyMywgMjE5LCAxNDksIDI1MCwgMTQ3LCA1LCAzOSwgMTg5LCAxNDksIDI1MCwgCisgICAgMTQ3LCA1LCAzOSwgMjQzLCAyMjUsIDE0OSwgMjAsIDIxNywgODQsIDE0OSwgMjAsIDEwNywgMTQ5LCAyMCwgMTAzLCAxNDksIAorICAgIDIwLCAxNjAsIDE0OSwgMjAsIDE1NCwgMTQ5LCAyMCwgMTc0LCAxNDksIDIwLCAxODIsIDE0OSwgMjAsIDE5MSwgMTQ5LCAyMCwgCisgICAgMTg1LCAxNDksIDIwLCAxOTAsIDE0OSwgMjI4LCAxOTcsIDIyMywgMjQyLCAxNDksIDIyOCwgMTk3LCAyNDksIDE2NywgMTQ5LCAKKyAgICAyMjgsIDE5NywgNTEsIDI0OSwgMTY3LCAxNDksIDIyOCwgMTk3LCAyMjEsIDc4LCAyNDksIDE2NywgNjMsIDEsIDIzNiwgCisgICAgMTQzLCAyNDUsIDAsIDYzLCAxLCAyMzYsIDE0MywgMjUxLCAxNjksIDYzLCAxLCAyMzYsIDE0MywgMjUxLCA2OSwgNjMsIDEsIAorICAgIDIzNiwgMTQzLCAyMzcsIDEyMywgNjMsIDEsIDIzNiwgMTQzLCAyMzcsIDEwMywgNjMsIDEsIDIzNiwgMTQzLCAyMzEsIDc3LCAKKyAgICA2MywgMSwgMjM2LCAxNDMsIDIyMSwgMjksIDYzLCAxLCAyMzYsIDE0MywgMjIxLCAxOSwgNjMsIDEsIDIzNiwgMTQzLCAyNDksIAorICAgIDEzMiwgNjMsIDEsIDIzNiwgMTQzLCAyNDksIDExNiwgNjMsIDEsIDIzNiwgMTQzLCAyNDksIDM2LCA2MywgMSwgMjM2LCAKKyAgICAxNDMsIDIwOCwgNjMsIDEsIDIzNiwgMTQzLCAyMjYsIDE3NywgNjMsIDEsIDIzNiwgMTQzLCAxNTUsIDYzLCAxLCAyMzYsIAorICAgIDE0MywgMjQzLCAxMjEsIDYzLCAxLCAyMzYsIDE0MywgMjQ2LCA4LCA2MywgNTgsIDEsIDIzNiwgMTQzLCAyMjcsIDIwMSwgCisgICAgNjMsIDEsIDIzNiwgMTQzLCAyMTgsIDEzOCwgNjMsIDEsIDIzNiwgMTQzLCAyMTcsIDExNCwgNjMsIDEsIDIzNiwgMTQzLCAKKyAgICAyMDMsIDYzLCAyMzUsIDYsIDIzNiwgMTQzLCAyMzAsIDE4MiwgNjMsIDIzNSwgNiwgMjM2LCAxNDMsIDIyOCwgMTExLCA2MywgCisgICAgMjM1LCA2LCAyMzYsIDE0MywgMjQzLCA1NywgNjMsIDE2LCAyNTQsIDE4NiwgMjQ2LCA5NCwgNjMsIDE2LCAyNTQsIDE4NiwgCisgICAgMTA3LCA2MywgMTYsIDI1NCwgMTg2LCAxMDMsIDYzLCAxLCAyNTQsIDE4NiwgMjAzLCA2MywgNSwgMjI5LCAyNDgsIDIzNiwgCisgICAgMjEzLCAyMjEsIDEzMiwgMzcsIDE3NywgMSwgMTA5LCAyMzYsIDU3LCAzNywgMTc3LCAxLCAxMTYsIDIzNiwgNTcsIDM3LCAKKyAgICAxNzcsIDEsIDEwOSwgMjM2LCAxMjUsIDM3LCAxNzcsIDEsIDExNiwgMjM2LCAxMjUsIDM3LCAxNzcsIDEsIDEwOSwgMjM2LCAKKyAgICAxMzIsIDM3LCAxNzcsIDEsIDExNiwgMjM2LCAxMzIsIDM3LCAxNzcsIDEsIDEwOSwgMjQ0LCA2OCwgMzcsIDE3NywgMSwgCisgICAgMTE2LCAyNDQsIDY4LCAzNywgMTc3LCAxLCAxMDksIDIzMiwgODQsIDM3LCAxNzcsIDEsIDExNiwgMjMyLCA4NCwgMzcsIAorICAgIDE3NywgMSwgMTA5LCAyNTAsIDE4MiwgMzcsIDE3NywgMSwgMTE2LCAyNTAsIDE4MiwgMzcsIDE3NywgMSwgMTA5LCAyNTEsIAorICAgIDExLCAzNywgMTc3LCAxLCAxMTYsIDI1MSwgMTEsIDM3LCAxNzcsIDEsIDEwOSwgMjI0LCAyNiwgMzcsIDE3NywgMSwgMTE2LCAKKyAgICAyMjQsIDI2LCAzNywgMTc3LCAxLCAxMDksIDIzMSwgNTYsIDM3LCAxNzcsIDEsIDExNiwgMjMxLCA1NiwgMzcsIDE3NywgMSwgCisgICAgMTA5LCAyNDgsIDE2NywgMzcsIDE3NywgMSwgMTE2LCAyNDgsIDE2NywgMzcsIDE3NywgMSwgMTA5LCAxMDEsIDM3LCAxNzcsIAorICAgIDEsIDExNiwgMTAxLCAzNywgMTc3LCAxLCAxMDksIDIyMSwgMjM5LCAzNywgMTc3LCAxLCAxMTYsIDIyMSwgMjM5LCAzNywgCisgICAgMTc3LCAxLCAxMDksIDIzMSwgMjA0LCAzNywgMTc3LCAxLCAxMTYsIDIzMSwgMjA0LCAzNywgMTc3LCAxLCAxMDksIDI1MiwgCisgICAgNDEsIDM3LCAxNzcsIDEsIDExNiwgMjUyLCA0MSwgMzcsIDE3NywgMSwgMTA5LCAyMjksIDM3LCAzNywgMTc3LCAxLCAxMTYsIAorICAgIDIyOSwgMzcsIDM3LCAxNzcsIDEsIDEwOSwgMjI5LCAxMTgsIDM3LCAxNzcsIDEsIDExNiwgMjI5LCAxMTgsIDM3LCAxNzcsIAorICAgIDEsIDEwOSwgMjQ1LCAxMzksIDM3LCAxNzcsIDEsIDExNiwgMjQ1LCAxMzksIDM3LCAxNzcsIDEsIDEwOSwgMjMzLCAxMzYsIAorICAgIDM3LCAxNzcsIDEsIDExNiwgMjMzLCAxMzYsIDM3LCAxNzcsIDEsIDEwOSwgMjE3LCAyMzEsIDM3LCAxNzcsIDEsIDExNiwgCisgICAgMjE3LCAyMzEsIDM3LCAxNzcsIDEsIDEwOSwgMjI3LCA3NSwgMzcsIDE3NywgMSwgMTE2LCAyMjcsIDc1LCAzNywgMTc3LCAxLCAKKyAgICAxMDksIDIzNSwgMTIsIDM3LCAxNzcsIDEsIDExNiwgMjM1LCAxMiwgMzcsIDE3NywgMSwgMTA5LCAyMTksIDcyLCAzNywgCisgICAgMTc3LCAxLCAxMTYsIDIxOSwgNzIsIDM3LCAxNzcsIDEsIDEwOSwgMjQzLCA0LCAzNywgMTc3LCAxLCAxMTYsIDI0MywgNCwgCisgICAgMzcsIDE3NywgMSwgMTA5LCA3NCwgMzcsIDE3NywgMSwgMTE2LCA3NCwgMzcsIDE3NywgMjM0LCAxMDAsIDIzNiwgMjI5LCAKKyAgICAzNywgMTc3LCAyOSwgMjU1LCA1OCwgMzcsIDE3NywgMjksIDcyLCAzNywgMTc3LCAyOSwgMjIwLCAxMTAsIDM3LCAxNzcsIAorICAgIDI5LCA2OCwgMzcsIDE3NywgMjksIDczLCAzNywgMTc3LCAyOSwgNzQsIDM3LCAxNzcsIDIzNCwgMTAwLCAyMzYsIDEyNywgCisgICAgMzcsIDE3NywgMjksIDI0MiwgNzIsIDM3LCAxNzcsIDI5LCAyMjAsIDEwOSwgMzcsIDE3NywgMjksIDIyMCwgMTIzLCAzNywgCisgICAgMTc3LCAyOSwgMjUzLCAyMzEsIDM3LCAxNzcsIDI5LCAyNTMsIDIxMiwgMzcsIDE3NywgMjksIDI1NCwgMTMxLCAzNywgMTc3LCAKKyAgICAyOSwgMjU0LCAxNDAsIDM3LCAxNzcsIDE0NSwgMjM0LCAxMDAsIDI0NiwgMjIzLCAzNywgMTc3LCAxNDUsIDIzNCwgMTAwLCAKKyAgICAyMzEsIDExMywgMzcsIDE3NywgMTQ1LCAyMzQsIDEwMCwgMjIxLCAyMzksIDM3LCAxNzcsIDE0NSwgMjM0LCAxMDAsIDIyNCwgCisgICAgMTUsIDM3LCAxNzcsIDE2LCAyMzYsIDQ0LCAzNywgMTc3LCAxNiwgMjMxLCAxMTMsIDM3LCAxNzcsIDE2LCAyMjYsIDE0OCwgCisgICAgMzcsIDE3NywgMTYsIDI0MywgNSwgMjQzLCAxLCAzNywgMTc3LCAxNiwgMjM2LCA1MiwgMjM2LCA1MSwgMjM0LCAxMSwgMjM0LCAKKyAgICA0MywgMSwgMjM2LCA0OSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjI2LCAxNDgsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzNSwgCisgICAgMTY3LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzMsIDE0NSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMTg3LCAyMzQsIDExLCAKKyAgICAyMzQsIDQzLCAxLCAyMDgsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDI1MSwgMjUsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIyMSwgCisgICAgMTgxLCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMzYsIDEyMSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjMyLCA3NiwgMjM0LCAKKyAgICAxMSwgMjM0LCA0MywgMSwgMjIxLCAyMzMsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIxOSwgMiwgMjM0LCAxMSwgMjM0LCA0MywgCisgICAgMSwgMjE4LCA0NSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjQyLCAxNjcsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIyMCwgODcsIAorICAgIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDcyLCAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMjksIDEzNiwgMjM0LCAxMSwgMjM0LCA0MywgCisgICAgMSwgMjUzLCAyNDEsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDI0NCwgNjMsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzNywgMTAyLCAKKyAgICAyMzQsIDExLCAyMzQsIDQzLCAxLCAyMjcsIDI0NiwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjUyLCAyMzcsIDIzNCwgMTEsIAorICAgIDIzNCwgNDMsIDEsIDIzNywgOTEsIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDI0OCwgMjMyLCAyMzQsIDExLCAyMzQsIDQzLCAxLCAKKyAgICAyNDQsIDExMCwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjQ5LCAxNywgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjUyLCA5MywgCisgICAgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjM2LCA1MCwgMjM0LCAyNDksIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzNSwgMTY4LCAKKyAgICAyMzQsIDI0OSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjMzLCAxNDYsIDIzNCwgMjQ5LCAyMzQsIDExLCAyMzQsIDQzLCAxLCAKKyAgICAyMzAsIDQ0LCAyMzQsIDI0OSwgMjM0LCAxMSwgMjM0LCA0MywgMSwgMjMyLCAyMzgsIDIzNCwgMjQ5LCAyMzQsIDExLCAyMzQsIAorICAgIDQzLCAxLCAyMjEsIDE4MiwgMjM0LCAyNDksIDIzNCwgMTEsIDIzNCwgNDMsIDEsIDIzMiwgNzcsIDIzNCwgMjQ5LCAyMzQsIAorICAgIDExLCAyMzQsIDQzLCAxLCAyNDIsIDEwNywgMjM0LCAyNDksIDIzNCwgMTEsIDIzNCwgNDMsIDI5LCA1LCAyMzAsIDEzNywgCisgICAgMjM0LCAxMSwgMjM0LCA0MywgMjksIDUsIDIzNywgMjIxLCAyMzQsIDExLCAyMzQsIDQzLCAyOSwgNSwgMjU0LCAxMzAsIAorICAgIDIzNCwgMTEsIDIzNCwgNDMsIDI5LCA1LCAyMTgsIDE4LCAyMzQsIDExLCAyMzQsIDQzLCAyOSwgNSwgMjI0LCAxMCwgMjM0LCAKKyAgICAxMSwgMjM0LCA0MywgMjksIDUsIDIyMCwgODUsIDIzNCwgMTEsIDIzNCwgNDMsIDI5LCA1LCAyNTEsIDQwLCAyMzQsIDExLCAKKyAgICAyMzQsIDQzLCAyOSwgNSwgMjMxLCAxMDAsIDIzNCwgMTEsIDIzNCwgNDMsIDI1MSwgNDEsIDIzNCwgMTEsIDIzNCwgNDMsIAorICAgIDIzNCwgMjIwLCAyMzcsIDEzMSwgMjM0LCAxMSwgMjM0LCA0MywgMjU0LCA3MCwgMjM3LCAxMzEsIDIzNCwgMTEsIDIzNCwgCisgICAgNDMsIDIwLCAyMTcsIDg0LCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTA3LCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTAzLCAKKyAgICAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTYwLCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTU0LCAyMzQsIDExLCAyMzQsIDQzLCAKKyAgICAyMCwgMTc0LCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTgyLCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTkxLCAyMzQsIDExLCAKKyAgICAyMzQsIDQzLCAyMCwgMTg1LCAyMzQsIDExLCAyMzQsIDQzLCAyMCwgMTkwLCAyMiwgMTIyLCAyMzEsIDYsIDIyLCAxMjIsIAorICAgIDIzMSwgMTEsIDIyLCAxMjIsIDIxNywgMjMwLCAyMiwgMTIyLCAyMTcsIDIyOSwgMjIsIDEyMiwgMjE3LCAyMjgsIDIyLCAKKyAgICAxMjIsIDIyMCwgMTczLCAyMiwgMTIyLCAyMjAsIDE3NiwgMjIsIDEyMiwgMjE3LCAxOTgsIDIyLCAxMjIsIDIxNywgMTk0LCAKKyAgICAyMiwgMTIyLCAyNDYsIDExNCwgMjIsIDEyMiwgMjQ2LCAxMTIsIDIyLCAxMjIsIDI0NiwgMTEzLCAyMiwgMTIyLCAyNDYsIAorICAgIDExMCwgMjIsIDEyMiwgMjQyLCA5NywgMjIsIDEyMiwgMjQyLCA5NiwgMjIsIDEyMiwgMjQyLCA5NCwgMjIsIDEyMiwgMjQyLCAKKyAgICA5NSwgMjIsIDEyMiwgMjQyLCAxMDAsIDIyLCAxMjIsIDI0MiwgOTMsIDIyLCAxMjIsIDI0MiwgOTIsIDIyLCAxMjIsIDI0MiwgCisgICAgMTAyLCAyMiwgMTIyLCAyNTQsIDU5LCAyMiwgMTIyLCAyNTQsIDU4LCAyMiwgODUsIDIzMiwgNDgsIDIyLCA4NSwgMjMyLCAKKyAgICA1NCwgMjIsIDg1LCAyMjMsIDIwMCwgMjIsIDg1LCAyMjMsIDE5OSwgMjIsIDg1LCAyMjEsIDE4NywgMjIsIDg1LCAyMjEsIAorICAgIDE4NSwgMjIsIDg1LCAyMjEsIDE4NCwgMjIsIDg1LCAyMjEsIDE5MCwgMjIsIDg1LCAyMjEsIDE5MSwgMjIsIDg1LCAyMjEsIAorICAgIDE4MywgMjIsIDg1LCAyMjcsIDExOSwgMjIsIDg1LCAyMjcsIDEzNCwgMjIsIDg1LCAyMjMsIDIwNiwgMjIsIDg1LCAyMjcsIAorICAgIDEzMSwgMjIsIDg1LCAyMjcsIDEyMSwgMjIsIDg1LCAyMjcsIDEyMywgMjIsIDg1LCAyMjcsIDExMCwgMjIsIDg1LCAyMjcsIAorICAgIDExMSwgMjIsIDg1LCAyMzYsIDIxNywgMjIsIDg1LCAyMzMsIDE4MiwgMjIsIDg1LCAyMzMsIDE3NiwgMjIsIDg1LCAyMjMsIAorICAgIDIxMCwgMjIsIDg1LCAyMzMsIDE3OSwgMjIsIDg1LCAyMzMsIDE4NSwgMjIsIDg1LCAyMjksIDgwLCAyMiwgODUsIDIyOSwgCisgICAgODksIDIyLCA4NSwgMjI5LCA5MywgMjIsIDg1LCAyMjMsIDIwOCwgMjIsIDg1LCAyMjksIDgzLCAyMiwgODUsIDIyOSwgOTcsIAorICAgIDIyLCA4NSwgMjI5LCA5OCwgMjIsIDg1LCAyMjQsIDk2LCAyMiwgODUsIDIyNCwgOTksIDIyLCA4NSwgMjIzLCAyMDQsIDIyLCAKKyAgICA4NSwgMjIzLCAyMDIsIDIyLCA4NSwgMjI0LCA5NCwgMjIsIDg1LCAyMjQsIDEwMiwgMjIsIDg1LCAyMjQsIDEwMywgMjIsIAorICAgIDg1LCAyMjQsIDg4LCAyMiwgODUsIDIyNCwgMTAxLCAyMiwgODUsIDIyOSwgMjU1LCAyMiwgODUsIDIzMCwgMCwgMjIsIDg1LCAKKyAgICAyMTgsIDQsIDIyLCA4NSwgMjE4LCA1LCAyMiwgODUsIDI1MCwgMjI4LCAyMiwgODUsIDI1MCwgMjI3LCAyMiwgODUsIDIyMywgCisgICAgMjE1LCAyMiwgODUsIDIyOSwgMTI0LCAyMiwgODUsIDIyOSwgMTIzLCA5LCAxMywgMjM5LCAyNDQsIDksIDEzLCAyMzksIAorICAgIDI0MywgOSwgMTMsIDIzOSwgMjQyLCA5LCAxMywgMjM5LCAyNDEsIDksIDEzLCAyMzksIDI0MCwgOSwgMTMsIDIzOSwgMjM5LCAKKyAgICA5LCAxMywgMjM5LCAyMzgsIDksIDEzLCAyMzksIDIzNywgOSwgMTMsIDIzOSwgMjM2LCA5LCAxMywgMjM5LCAyMzUsIDksIAorICAgIDEzLCAyMzksIDIzNCwgOSwgMTMsIDIzOSwgMjMzLCA5LCAxMywgMjM5LCAyMzIsIDksIDEzLCAyMzksIDIzMSwgOSwgMTMsIAorICAgIDIzOSwgMjMwLCA5LCAxMywgMjM5LCAyMjksIDksIDEzLCAyMzksIDIyOCwgOSwgMTMsIDIzOSwgMjI3LCA5LCAxMywgMjM5LCAKKyAgICAyMjYsIDksIDEzLCAyMzksIDIyNSwgOSwgMTMsIDIzOSwgMjI0LCA5LCAxMywgMjM5LCAyMjMsIDksIDEzLCAyMzksIDIyMiwgCisgICAgOSwgMTMsIDIzOSwgMjIxLCA5LCAxMywgMjM5LCAyMjAsIDksIDEzLCAyMzksIDIxOSwgOSwgMTMsIDIzOSwgMjE4LCA5LCAKKyAgICAxMywgMjM5LCAyMTcsIDksIDEzLCAyMzksIDIxNiwgOSwgMTMsIDIzOSwgMjE1LCA5LCAxMywgMjM5LCAyMTQsIDksIDEzLCAKKyAgICAyMzksIDIxMywgOSwgMTMsIDIzOSwgMjEyLCA5LCAxMywgMjM5LCAyMTEsIDksIDEzLCAyMzksIDIxMCwgOSwgMTMsIDIzOSwgCisgICAgMjA5LCA5LCAxMywgMjM5LCAyMDgsIDksIDEzLCAyMzksIDIwNywgOSwgMTMsIDIzOSwgMjA2LCA5LCAxMywgMjM5LCAyMDUsIAorICAgIDksIDEzLCAyMzksIDIwNCwgOSwgMTMsIDIzOSwgMjAzLCA5LCAxMywgMjM5LCAyMDIsIDksIDEzLCAyMzksIDIwMSwgOSwgCisgICAgMTMsIDIzOSwgMjAwLCA5LCAxMywgMjM5LCAxOTksIDksIDEzLCAyMzksIDE5OCwgOSwgMTMsIDIzOSwgMTk3LCA5LCAxMywgCisgICAgMjM5LCAxOTYsIDksIDEzLCAyMzksIDE5NSwgOSwgMTMsIDIzOSwgMTk0LCA5LCAxMywgMjM5LCAxOTMsIDksIDEzLCAyMzksIAorICAgIDE5MiwgOSwgMTMsIDIzOSwgMTkxLCA5LCAxMywgMjM5LCAxOTAsIDksIDEzLCAyMzksIDE4OSwgOSwgMTMsIDIzOSwgMTg4LCAKKyAgICA5LCAxMywgMjM5LCAxODcsIDksIDEzLCAyMzksIDE4NiwgOSwgMTMsIDIzOSwgMTg1LCA5LCAxMywgMjM5LCAxODQsIDksIAorICAgIDEzLCAyMzksIDE4MywgOSwgMTMsIDIzOSwgMTgyLCA5LCAxMywgMjM5LCAxODEsIDksIDEzLCAyMzksIDE4MCwgOSwgMTMsIAorICAgIDIzOSwgMTc5LCA5LCAxMywgMjM5LCAxNzgsIDksIDEzLCAyMzksIDE3NywgOSwgMTMsIDIzOSwgMTc2LCA5LCAxMywgMjM5LCAKKyAgICAxNzUsIDksIDEzLCAyMzksIDE3NCwgOSwgMTMsIDIzOSwgMTczLCA5LCAxMywgMjM5LCAxNzIsIDksIDEzLCAyMzksIDE3MSwgCisgICAgOSwgMTMsIDIzOSwgMTcwLCA5LCAxMywgMjM5LCAxNjksIDksIDEzLCAyMzksIDE2OCwgOSwgMTMsIDIzOSwgMTY3LCA5LCAKKyAgICAxMywgMjM5LCAxNjYsIDksIDEzLCAyMzksIDE2NSwgOSwgMTMsIDIzOSwgMTY0LCA5LCAxMywgMjM5LCAxNjMsIDksIDEzLCAKKyAgICAyMzksIDE2MiwgOSwgMTMsIDIzOSwgMTYxLCA5LCAxMywgMjM5LCAxNjAsIDksIDEzLCAyMzksIDE1OSwgOSwgMTMsIDIzOSwgCisgICAgMTU4LCA5LCAxMywgMjM5LCAxNTcsIDksIDEzLCAyMzksIDE1NiwgOSwgMTMsIDIzOSwgMTU1LCA5LCAxMywgMjM5LCAxNTQsIAorICAgIDksIDEzLCAyMzksIDE1MywgOSwgMTMsIDIzOSwgMTUyLCA5LCAxMywgMjM5LCAxNTEsIDksIDEzLCAyMzksIDE1MCwgOSwgCisgICAgMTMsIDIzOSwgMTQ5LCA5LCAxMywgMjM5LCAxNDgsIDksIDEzLCAyMzksIDE0NywgOSwgMTMsIDIzOSwgMTQ2LCA5LCAxMywgCisgICAgMjM5LCAxNDUsIDksIDEzLCAyMzksIDE0NCwgOSwgMTMsIDIzOSwgMTQzLCA5LCAxMywgMjM5LCAxNDIsIDksIDEzLCAyMzksIAorICAgIDE0MSwgOSwgMTMsIDIzOSwgMTQwLCA5LCAxMywgMjM5LCAxMzksIDksIDEzLCAyMzksIDEzOCwgOSwgMTMsIDIzOSwgMTM3LCAKKyAgICA5LCAxMywgMjM5LCAxMzYsIDksIDEzLCAyMzksIDEzNSwgOSwgMTMsIDIzOSwgMTM0LCA5LCAxMywgMjM5LCAxMzMsIDksIAorICAgIDEzLCAyMzksIDEzMiwgOSwgMTMsIDIzOSwgMTMxLCA5LCAxMywgMjM5LCAxMzAsIDksIDEzLCAyMzksIDEyOSwgOSwgMTMsIAorICAgIDIzOSwgMTI4LCA5LCAxMywgMjM5LCAxMjcsIDksIDEzLCAyMzksIDEyNiwgOSwgMTMsIDIzOSwgMTI1LCA5LCAxMywgMjM5LCAKKyAgICAxMjQsIDksIDEzLCAyMzksIDEyMywgOSwgMTMsIDIzOSwgMTIyLCA5LCAxMywgMjM5LCAxMjEsIDksIDEzLCAyMzksIDEyMCwgCisgICAgOSwgMTMsIDIzOSwgMTE5LCA5LCAxMywgMjM5LCAxMTgsIDksIDEzLCAyMzksIDExNywgOSwgMTMsIDIzOSwgMTE2LCA5LCAKKyAgICAxMywgMjM5LCAxMTUsIDksIDEzLCAyMzksIDExNCwgOSwgMTMsIDIzOSwgMTEzLCA5LCAxMywgMjM5LCAxMTIsIDksIDEzLCAKKyAgICAyMzksIDExMSwgOSwgMTMsIDIzOSwgMTEwLCA5LCAxMywgMjM5LCAxMDksIDksIDEzLCAyMzksIDEwOCwgOSwgMTMsIDIzOSwgCisgICAgMTA3LCA5LCAxMywgMjM5LCAxMDYsIDksIDEzLCAyMzksIDEwNSwgOSwgMTMsIDIzOSwgMTA0LCA5LCAxMywgMjM5LCAxMDMsIAorICAgIDksIDEzLCAyMzksIDEwMiwgOSwgMTMsIDIzOSwgMTAxLCA5LCAxMywgMjM5LCAxMDAsIDksIDEzLCAyMzksIDk5LCA5LCAxMywgCisgICAgMjM5LCA5OCwgOSwgMTMsIDIzOSwgOTcsIDksIDEzLCAyMzksIDk2LCA5LCAxMywgMjM5LCA5NSwgOSwgMTMsIDIzOSwgOTQsIAorICAgIDksIDEzLCAyMzksIDkzLCA5LCAxMywgMjM5LCA5MiwgOSwgMTMsIDIzOSwgOTEsIDksIDEzLCAyMzksIDkwLCA5LCAxMywgCisgICAgMjM5LCA4OSwgOSwgMTMsIDIzOSwgODgsIDksIDEzLCAyMzksIDg3LCA5LCAxMywgMjM5LCA4NiwgOSwgMTMsIDIzOSwgODUsIAorICAgIDksIDEzLCAyMzksIDg0LCA5LCAxMywgMjM5LCA4MywgOSwgMTMsIDIzOSwgODIsIDksIDEzLCAyMzksIDgxLCA5LCAxMywgCisgICAgMjM5LCA4MCwgOSwgMTMsIDIzOSwgNzksIDksIDEzLCAyMzksIDc4LCA5LCAxMywgMjM5LCA3NywgOSwgMTMsIDIzOSwgNzYsIAorICAgIDksIDEzLCAyMzksIDc1LCA5LCAxMywgMjM5LCA3NCwgOSwgMTMsIDIzOSwgNzMsIDksIDEzLCAyMzksIDcyLCA5LCAxMywgCisgICAgMjM5LCA3MSwgOSwgMTMsIDIzOSwgNzAsIDksIDEzLCAyMzksIDY5LCA5LCAxMywgMjM5LCA2OCwgOSwgMTMsIDIzOSwgNjcsIAorICAgIDksIDEzLCAyMzksIDY2LCA5LCAxMywgMjM5LCA2NSwgOSwgMTMsIDIzOSwgNjQsIDksIDEzLCAyMzksIDYzLCA5LCAxMywgCisgICAgMjM5LCA2MiwgOSwgMTMsIDIzOSwgNjEsIDksIDEzLCAyMzksIDYwLCA5LCAxMywgMjM5LCA1OSwgOSwgMTMsIDIzOSwgNTgsIAorICAgIDksIDEzLCAyMzksIDU3LCA5LCAxMywgMjM5LCA1NiwgOSwgMTMsIDIzOSwgNTUsIDksIDEzLCAyMzksIDU0LCA5LCAxMywgCisgICAgMjM5LCA1MywgOSwgMTMsIDIzOSwgNTIsIDksIDEzLCAyMzksIDUxLCA5LCAxMywgMjM5LCA1MCwgOSwgMTMsIDIzOSwgNDksIAorICAgIDksIDEzLCAyMzksIDQ4LCA5LCAxMywgMjM5LCA0NywgOSwgMTMsIDIzOSwgNDYsIDksIDEzLCAyMzksIDQ1LCA5LCAxMywgCisgICAgMjM5LCA0NCwgOSwgMTMsIDIzOSwgNDMsIDksIDEzLCAyMzksIDQyLCA5LCAxMywgMjM5LCA0MSwgOSwgMTMsIDIzOSwgNDAsIAorICAgIDksIDEzLCAyMzksIDM5LCA5LCAxMywgMjM5LCAzOCwgOSwgMTMsIDIzOSwgMzcsIDksIDEzLCAyMzksIDM2LCA5LCAxMywgCisgICAgMjM5LCAzNSwgOSwgMTMsIDIzOSwgMzQsIDksIDEzLCAyMzksIDMzLCA5LCAxMywgMjM5LCAzMiwgOSwgMTMsIDIzOSwgMzEsIAorICAgIDksIDEzLCAyMzksIDMwLCA5LCAxMywgMjM5LCAyOSwgOSwgMTMsIDIzOSwgMjgsIDksIDEzLCAyMzksIDI3LCA5LCAxMywgCisgICAgMjM5LCAyNiwgOSwgMTMsIDIzOSwgMjUsIDksIDEzLCAyMzksIDI0LCA5LCAxMywgMjM5LCAyMywgOSwgMTMsIDIzOSwgMjIsIAorICAgIDksIDEzLCAyMzksIDIxLCA5LCAxMywgMjM5LCAyMCwgOSwgMTMsIDIzOSwgMTksIDksIDEzLCAyMzksIDE4LCA5LCAxMywgCisgICAgMjM5LCAxNywgOSwgMTMsIDIzOSwgMTYsIDksIDEzLCAyMzksIDE1LCA5LCAxMywgMjM5LCAxNCwgOSwgMTMsIDIzOSwgMTMsIAorICAgIDksIDEzLCAyMzksIDEyLCA5LCAxMywgMjM5LCAxMSwgOSwgMTMsIDIzOSwgMTAsIDksIDEzLCAyMzksIDksIDksIDEzLCAKKyAgICAyMzksIDgsIDksIDEzLCAyMzksIDcsIDksIDEzLCAyMzksIDYsIDksIDEzLCAyMzksIDUsIDksIDEzLCAyMzksIDQsIDksIAorICAgIDEzLCAyMzksIDMsIDksIDEzLCAyMzksIDIsIDksIDEzLCAyMzksIDEsIDksIDEzLCAyMzksIDAsIDksIDEzLCAyMzgsIDI1NSwgCisgICAgOSwgMTMsIDIzOCwgMjU0LCA5LCAxMywgMjM4LCAyNTMsIDksIDEzLCAyMzgsIDI1MiwgOSwgMTMsIDIzOCwgMjUxLCA5LCAKKyAgICAxMywgMjM4LCAyNTAsIDksIDEzLCAyMzgsIDI0OSwgOSwgMTMsIDIzOCwgMjQ4LCA5LCAxMywgMjM4LCAyNDcsIDksIDEzLCAKKyAgICAyMzgsIDI0NiwgOSwgMTMsIDIzOCwgMjQ1LCA5LCAxMywgMjM4LCAyNDQsIDksIDEzLCAyMzgsIDI0MywgOSwgMTMsIDIzOCwgCisgICAgMjQyLCA5LCAxMywgMjM4LCAyNDEsIDksIDEzLCAyMzgsIDI0MCwgOSwgMTMsIDIzOCwgMjM5LCA5LCAxMywgMjM4LCAyMzgsIAorICAgIDksIDEzLCAyMzgsIDIzNywgOSwgMTMsIDIzOCwgMjM2LCA5LCAxMywgMjM4LCAyMzUsIDksIDEzLCAyMzgsIDIzNCwgOSwgCisgICAgMTMsIDIzOCwgMjMzLCA5LCAxMywgMjM4LCAyMzIsIDksIDEzLCAyMzgsIDIzMSwgOSwgMTMsIDIzOCwgMjMwLCA5LCAxMywgCisgICAgMjM4LCAyMjksIDksIDEzLCAyMzgsIDIyOCwgOSwgMTMsIDIzOCwgMjI3LCA5LCAxMywgMjM4LCAyMjYsIDksIDEzLCAyMzgsIAorICAgIDIyNSwgOSwgMTMsIDIzOCwgMjI0LCA5LCAxMywgMjM4LCAyMjMsIDksIDEzLCAyMzgsIDIyMiwgOSwgMTMsIDIzOCwgMjIxLCAKKyAgICA5LCAxMywgMjM4LCAyMjAsIDksIDEzLCAyMzgsIDIxOSwgOSwgMTMsIDIzOCwgMjE4LCA5LCAxMywgMjM4LCAyMTcsIDksIAorICAgIDEzLCAyMzgsIDIxNiwgOSwgMTMsIDIzOCwgMjE1LCA5LCAxMywgMjM4LCAyMTQsIDksIDEzLCAyMzgsIDIxMywgOSwgMTMsIAorICAgIDIzOCwgMjEyLCA5LCAxMywgMjM4LCAyMTEsIDksIDEzLCAyMzgsIDIxMCwgOSwgMTMsIDIzOCwgMjA5LCA5LCAxMywgMjM4LCAKKyAgICAyMDgsIDksIDEzLCAyMzgsIDIwNywgOSwgMTMsIDIzOCwgMjA2LCA5LCAxMywgMjM4LCAyMDUsIDksIDEzLCAyMzgsIDIwNCwgCisgICAgOSwgMTMsIDIzOCwgMjAzLCA5LCAxMywgMjM4LCAyMDIsIDksIDEzLCAyMzgsIDIwMSwgOSwgMTMsIDIzOCwgMjAwLCA5LCAKKyAgICAxMywgMjM4LCAxOTksIDksIDEzLCAyMzgsIDE5OCwgOSwgMTMsIDIzOCwgMTk3LCA5LCAxMywgMjM4LCAxOTYsIDksIDEzLCAKKyAgICAyMzgsIDE5NSwgOSwgMTMsIDIzOCwgMTk0LCA5LCAxMywgMjM4LCAxOTMsIDksIDEzLCAyMzgsIDE5MiwgOSwgMTMsIDIzOCwgCisgICAgMTkxLCA5LCAxMywgMjM4LCAxOTAsIDksIDEzLCAyMzgsIDE4OSwgOSwgMTMsIDIzOCwgMTg4LCA5LCAxMywgMjM4LCAxODcsIAorICAgIDksIDEzLCAyMzgsIDE4NiwgOSwgMTMsIDIzOCwgMTg1LCA5LCAxMywgMjM4LCAxODQsIDksIDEzLCAyMzgsIDE4MywgOSwgCisgICAgMTMsIDIzOCwgMTgyLCA5LCAxMywgMjM4LCAxODEsIDksIDEzLCAyMzgsIDE4MCwgOSwgMTMsIDIzOCwgMTc5LCA5LCAxMywgCisgICAgMjM4LCAxNzgsIDksIDEzLCAyMzgsIDE3NywgOSwgMTMsIDIzOCwgMTc2LCA5LCAxMywgMjM4LCAxNzUsIDksIDEzLCAyMzgsIAorICAgIDE3NCwgOSwgMTMsIDIzOCwgMTczLCA5LCAxMywgMjM4LCAxNzIsIDksIDEzLCAyMzgsIDE3MSwgOSwgMTMsIDIzOCwgMTcwLCAKKyAgICA5LCAxMywgMjM4LCAxNjksIDksIDEzLCAyMzgsIDE2OCwgOSwgMTMsIDIzOCwgMTY3LCA5LCAxMywgMjM4LCAxNjYsIDksIAorICAgIDEzLCAyMzgsIDE2NSwgOSwgMTMsIDIzOCwgMTY0LCA5LCAxMywgMjM4LCAxNjMsIDksIDEzLCAyMzgsIDE2MiwgOSwgMTMsIAorICAgIDIzOCwgMTYxLCA5LCAxMywgMjM4LCAxNjAsIDksIDEzLCAyMzgsIDE1OSwgOSwgMTMsIDIzOCwgMTU4LCA5LCAxMywgMjM4LCAKKyAgICAxNTcsIDksIDEzLCAyMzgsIDE1NiwgOSwgMTMsIDIzOCwgMTU1LCA5LCAxMywgMjM4LCAxNTQsIDksIDEzLCAyMzgsIDE1MywgCisgICAgOSwgMTMsIDIzOCwgMTUyLCA5LCAxMywgMjM4LCAxNTEsIDksIDEzLCAyMzgsIDE1MCwgOSwgMTMsIDIzOCwgMTQ5LCA5LCAKKyAgICAxMywgMjM4LCAxNDgsIDksIDEzLCAyMzgsIDE0NywgOSwgMTMsIDIzOCwgMTQ2LCA5LCAxMywgMjM4LCAxNDUsIDksIDEzLCAKKyAgICAyMzgsIDE0NCwgOSwgMTMsIDIzOCwgMTQzLCA5LCAxMywgMjM4LCAxNDIsIDksIDEzLCAyMzgsIDE0MSwgOSwgMTMsIDIzOCwgCisgICAgMTQwLCA5LCAxMywgMjM4LCAxMzksIDksIDEzLCAyMzgsIDEzOCwgOSwgMTMsIDIzOCwgMTM3LCA5LCAxMywgMjM4LCAxMzYsIAorICAgIDksIDEzLCAyMzgsIDEzNSwgOSwgMTMsIDIzOCwgMTM0LCA5LCAxMywgMjM4LCAxMzMsIDksIDEzLCAyMzgsIDEzMiwgOSwgCisgICAgMTMsIDIzOCwgMTMxLCA5LCAxMywgMjM4LCAxMzAsIDksIDEzLCAyMzgsIDEyOSwgOSwgMTMsIDIzOCwgMTI4LCA5LCAxMywgCisgICAgMjM4LCAxMjcsIDksIDEzLCAyMzgsIDEyNiwgOSwgMTMsIDIzOCwgMTI1LCA5LCAxMywgMjM4LCAxMjQsIDksIDEzLCAyMzgsIAorICAgIDEyMywgOSwgMTMsIDIzOCwgMTIyLCA5LCAxMywgMjM4LCAxMjEsIDksIDEzLCAyMzgsIDEyMCwgOSwgMTMsIDIzOCwgMTE5LCAKKyAgICA5LCAxMywgMjM4LCAxMTgsIDksIDEzLCAyMzgsIDExNywgOSwgMTMsIDIzOCwgMTE2LCA5LCAxMywgMjM4LCAxMTUsIDksIAorICAgIDEzLCAyMzgsIDExNCwgOSwgMTMsIDIzOCwgMTEzLCA5LCAxMywgMjM4LCAxMTIsIDksIDEzLCAyMzgsIDExMSwgOSwgMTMsIAorICAgIDIzOCwgMTEwLCA5LCAxMywgMjM4LCAxMDksIDksIDEzLCAyMzgsIDEwOCwgOSwgMTMsIDIzOCwgMTA3LCA5LCAxMywgMjM4LCAKKyAgICAxMDYsIDksIDEzLCAyMzgsIDEwNSwgOSwgMTMsIDIzOCwgMTA0LCA5LCAxMywgMjM4LCAxMDMsIDksIDEzLCAyMzgsIDEwMiwgCisgICAgOSwgMTMsIDIzOCwgMTAxLCA5LCAxMywgMjM4LCAxMDAsIDksIDEzLCAyMzgsIDk5LCA5LCAxMywgMjM4LCA5OCwgOSwgMTMsIAorICAgIDIzOCwgOTcsIDksIDEzLCAyMzgsIDk2LCA5LCAxMywgMjM4LCA5NSwgOSwgMTMsIDIzOCwgOTQsIDksIDEzLCAyMzgsIDkzLCAKKyAgICA5LCAxMywgMjM4LCA5MiwgOSwgMTMsIDIzOCwgOTEsIDksIDEzLCAyMzgsIDkwLCA5LCAxMywgMjM4LCA4OSwgOSwgMTMsIAorICAgIDIzOCwgODgsIDksIDEzLCAyMzgsIDg3LCA5LCAxMywgMjM4LCA4NiwgOSwgMTMsIDIzOCwgODUsIDksIDEzLCAyMzgsIDg0LCAKKyAgICA5LCAxMywgMjM4LCA4MywgOSwgMTMsIDIzOCwgODIsIDksIDEzLCAyMzgsIDgxLCA5LCAxMywgMjM4LCA4MCwgOSwgMTMsIAorICAgIDIzOCwgNzksIDksIDEzLCAyMzgsIDc4LCA5LCAxMywgMjM4LCA3NywgOSwgMTMsIDIzOCwgNzYsIDksIDEzLCAyMzgsIDc1LCAKKyAgICA5LCAxMywgMjM4LCA3NCwgOSwgMTMsIDIzOCwgNzMsIDksIDEzLCAyMzgsIDcyLCA5LCAxMywgMjM4LCA3MSwgOSwgMTMsIAorICAgIDIzOCwgNzAsIDksIDEzLCAyMzgsIDY5LCA5LCAxMywgMjM4LCA2OCwgOSwgMTMsIDIzOCwgNjcsIDksIDEzLCAyMzgsIDY2LCAKKyAgICA5LCAxMywgMjM4LCA2NSwgOSwgMTMsIDIzOCwgNjQsIDksIDEzLCAyMzgsIDYzLCA5LCAxMywgMjM4LCA2MiwgOSwgMTMsIAorICAgIDIzOCwgNjEsIDksIDEzLCAyMzgsIDYwLCA5LCAxMywgMjM4LCA1OSwgOSwgMTMsIDIzOCwgNTgsIDksIDEzLCAyMzgsIDU3LCAKKyAgICA5LCAxMywgMjM4LCA1NiwgOSwgMTMsIDIzOCwgNTUsIDksIDEzLCAyMzgsIDU0LCA5LCAxMywgMjM4LCA1MywgOSwgMTMsIAorICAgIDIzOCwgNTIsIDksIDEzLCAyMzgsIDUxLCA5LCAxMywgMjM4LCA1MCwgOSwgMTMsIDIzOCwgNDksIDksIDEzLCAyMzgsIDQ4LCAKKyAgICA5LCAxMywgMjM4LCA0NywgOSwgMTMsIDIzOCwgNDYsIDksIDEzLCAyMzgsIDQ1LCA5LCAxMywgMjM4LCA0NCwgOSwgMTMsIAorICAgIDIzOCwgNDMsIDksIDEzLCAyMzgsIDQyLCA5LCAxMywgMjM4LCA0MSwgOSwgMTMsIDIzOCwgNDAsIDksIDEzLCAyMzgsIDM5LCAKKyAgICA5LCAxMywgMjM4LCAzOCwgOSwgMTMsIDIzOCwgMzcsIDksIDEzLCAyMzgsIDM2LCA5LCAxMywgMjM4LCAzNSwgOSwgMTMsIAorICAgIDIzOCwgMzQsIDksIDEzLCAyMzgsIDMzLCA5LCAxMywgMjM4LCAzMiwgOSwgMTMsIDIzOCwgMzEsIDcsIDMsIDI0LCAyNDUsIAorICAgIDIwNywgNywgMywgMjQsIDI0NSwgMjAzLCA3LCAzLCAyNCwgMjQ1LCAxNjYsIDcsIDMsIDI0LCAyNDUsIDIwNiwgNywgMywgCisgICAgMjQsIDI0NSwgMjA1LCA3LCAzLCAyNCwgMTcxLCAyMjYsIDIzNSwgMjIyLCAyMDEsIDcsIDMsIDI0LCAyMjMsIDE2OCwgMTMyLCAKKyAgICAzLCAyNCwgMjMzLCAyNTIsIDIzMSwgMTc0LCAxMzIsIDMsIDI0LCAyMzMsIDI1MiwgMjQ2LCAyNTQsIDEzMiwgMywgMjQsIAorICAgIDIzMywgMjUyLCAyMzcsIDIwMCwgMTMyLCAzLCAyNCwgMjE5LCA5NywgMjMxLCAxNzQsIDEzMiwgMywgMjQsIDIzMywgMjUyLCAKKyAgICAyMTgsIDEzMywgODcsIDEsIDIxNywgMjIxLCAyLCAyNDMsIDk0LCA4NywgMjI5LCAzMiwgMjM3LCA0MiwgMjE5LCAxNzYsIAorICAgIDg3LCAyNCwgMjE3LCAyNDgsIDIxNywgMjIxLCAyMTcsIDIyMSwgMjI5LCAyMTQsIDg3LCAxLCAyNTQsIDE0MiwgMjUzLCAKKyAgICAyMDcsIDg3LCAxLCAyMTgsIDIwMSwgMjU0LCAxNjgsIDg3LCAxLCAyMTgsIDIwMSwgMjQ5LCAxNzcsIDg3LCAxLCAyMTgsIAorICAgIDIwMSwgMjQzLCAxNjIsIDg3LCAxLCAyMTgsIDIwMSwgMjM2LCAyNDYsIDg3LCAxLCAyMTgsIDIwMSwgMjM1LCAxNTIsIDg3LCAKKyAgICAxLCAyMTgsIDIwMSwgMzksIDIzNCwgMSwgODcsIDEsIDIxOCwgMjAxLCAyMjcsIDE3NCwgODcsIDEsIDIxOCwgMjAxLCAyMjIsIAorICAgIDEwMiwgODcsIDEsIDI1NCwgMTQyLCA4OCwgNTUsIDg3LCAxLCAyMjQsIDIxMCwgMiwgMjI0LCAyMTAsIDI0OCwgMTQ1LCA4NywgCisgICAgMSwgMjI0LCAyMTAsIDIsIDIyNCwgMTEzLCAyNDgsIDE0NSwgODcsIDEsIDIyNCwgMjEwLCAyLCAyNDksIDE5NCwgMjUsIAorICAgIDIyNCwgMjEwLCAyNDgsIDE0NSwgODcsIDEsIDIyNCwgMjEwLCAyLCAyNDksIDE5NCwgMjUsIDIyNCwgMTEzLCAyNDgsIDE0NSwgCisgICAgODcsIDEsIDk5LCAyLCAyMjksIDIxNCwgODcsIDEsIDk5LCAyLCAyMjgsIDE0MywgODcsIDEsIDk5LCAyLCAyMzQsIDc3LCAKKyAgICA4NywgMSwgMjUyLCAxMDUsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjQ0LCA5MiwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyNDksIAorICAgIDE3OCwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyNDMsIDE2MywgMiwgMjM0LCA3NywgODcsIDEsIDIxOSwgMTcwLCAyLCAyNDksIAorICAgIDE5MywgODcsIDEsIDIxNywgOTYsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjIyLCA1MSwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAKKyAgICAyMTcsIDIyMSwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAzOSwgMjM2LCAyNDcsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjM2LCAyNDcsIAorICAgIDIsIDI0OSwgMTkzLCA4NywgMSwgMjM1LCAxNTMsIDIsIDI0OSwgMTkzLCA4NywgMSwgMjM0LCAyLCAyLCAyNDksIDE5MywgCisgICAgODcsIDEsIDIzMSwgMTA0LCAyLCAyNDksIDE5MywgODcsIDEsIDIyNiwgMTQ2LCAyLCAyNDksIDE5MywgODcsIDEsIDM5LCAKKyAgICAyMjksIDE5OSwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMjksIDE5OSwgMiwgMjQ5LCAxOTMsIDg3LCAxLCAyMjEsIDUyLCAyLCAKKyAgICAyNDksIDE5MywgODcsIDEsIDIyOCwgMTA4LCAyLCAyNDksIDE5MywgODcsIDEsIDIyNywgMTc1LCAyLCAyNDksIDE5MywgODcsIAorICAgIDEsIDIyNCwgMjEwLCAyLCAyNDksIDE5MywgODcsIDEsIDIyMiwgMTAzLCAyLCAyNDksIDE5MywgODcsIDEsIDIxOSwgMTcwLCAKKyAgICAyLCAyNDIsIDI1NCwgODcsIDEsIDI1MiwgMTA1LCAyLCAyMjcsIDI0OCwgODcsIDEsIDIzNiwgMjQ3LCAyLCAyMjcsIDI0OCwgCisgICAgODcsIDEsIDIyOSwgMTk5LCAyLCAyMjcsIDI0OCwgODcsIDI0LCA5OSwgMjM1LCAxNTIsIDEyLCAxLCA5OSwgMjE4LCAyNDcsIAorICAgIDQ3LCAxNywgMTIsIDEsIDk5LCAyMTgsIDI0NywgMzksIDE3LCAxMiwgMSwgMjUyLCAxMzYsIDQ3LCAxNywgMTIsIDEsIDI1MiwgCisgICAgMTM2LCAzOSwgMTcsIDEyLCAxLCAyNTIsIDEzNiwgNjYsIDE3LCAxMiwgMSwgMjUyLCAxMzYsIDEyOCwgMTcsIDEyLCAxLCAKKyAgICAyMjksIDE4OCwgNDcsIDE3LCAxMiwgMSwgMjI5LCAxODgsIDM5LCAxNywgMTIsIDEsIDIyOSwgMTg4LCA2NiwgMTcsIDEyLCAKKyAgICAxLCAyMjksIDE4OCwgMTI4LCAxNywgMTIsIDEsIDI1MiwgMTI3LCA0NywgMTcsIDEyLCAxLCAyNTIsIDEyNywgMzksIDE3LCAKKyAgICAxMiwgMSwgMjUyLCAxMjcsIDY2LCAxNywgMTIsIDEsIDI1MiwgMTI3LCAxMjgsIDE3LCAxMiwgMSwgMjIxLCAyMiwgNDcsIAorICAgIDE3LCAxMiwgMSwgMjIxLCAyMiwgMzksIDE3LCAxMiwgMSwgMjIxLCAyMiwgNjYsIDE3LCAxMiwgMSwgMjIxLCAyMiwgMTI4LCAKKyAgICAxNywgMTIsIDEsIDIyMiwgNzYsIDQ3LCAxNywgMTIsIDEsIDIyMiwgNzYsIDM5LCAxNywgMTIsIDEsIDIyMiwgNzYsIDY2LCAKKyAgICAxNywgMTIsIDEsIDIyMiwgNzYsIDEyOCwgMTcsIDEyLCAxLCAyMjEsIDI0LCA0NywgMTcsIDEyLCAxLCAyMjEsIDI0LCAzOSwgCisgICAgMTcsIDEyLCAxLCAyMjEsIDI0LCA2NiwgMTcsIDEyLCAxLCAyMjEsIDI0LCAxMjgsIDE3LCAxMiwgMSwgMjE5LCAxNTksIDQ3LCAKKyAgICAxNywgMTIsIDEsIDIxOSwgMTU5LCAzOSwgMTcsIDEyLCAxLCAyMTksIDE1OSwgNjYsIDE3LCAxMiwgMSwgMjE5LCAxNTksIAorICAgIDEyOCwgMTcsIDEyLCAxLCAyMjksIDE4NiwgNDcsIDE3LCAxMiwgMSwgMjI5LCAxODYsIDM5LCAxNywgMTIsIDEsIDIyOSwgCisgICAgMTg2LCA2NiwgMTcsIDEyLCAxLCAyMjksIDE4NiwgMTI4LCAxNywgMTIsIDEsIDI0NywgODAsIDQ3LCAxNywgMTIsIDEsIAorICAgIDI0NywgODAsIDM5LCAxNywgMTIsIDEsIDI0NywgODAsIDY2LCAxNywgMTIsIDEsIDI0NywgODAsIDEyOCwgMTcsIDEyLCAxLCAKKyAgICAyMzEsIDcxLCA0NywgMTcsIDEyLCAxLCAyMzEsIDcxLCAzOSwgMTcsIDEyLCAxLCAyMzEsIDcxLCA2NiwgMTcsIDEyLCAxLCAKKyAgICAyMzEsIDcxLCAxMjgsIDE3LCAxMiwgMSwgMjIyLCA5MiwgNDcsIDE3LCAxMiwgMSwgMjIyLCA5MiwgMzksIDE3LCAxMiwgMSwgCisgICAgMjIyLCA5MiwgNjYsIDE3LCAxMiwgMSwgMjIyLCA5MiwgMTI4LCAxNywgMTIsIDEsIDIyMiwgOTAsIDQ3LCAxNywgMTIsIDEsIAorICAgIDIyMiwgOTAsIDM5LCAxNywgMTIsIDEsIDIyMiwgOTAsIDY2LCAxNywgMTIsIDEsIDIyMiwgOTAsIDEyOCwgMTcsIDEyLCAxLCAKKyAgICAyNDksIDEzMCwgNDcsIDE3LCAxMiwgMSwgMjQ5LCAxMzAsIDM5LCAxNywgMTIsIDEsIDI0OSwgMTkwLCA0NywgMTcsIDEyLCAKKyAgICAxLCAyNDksIDE5MCwgMzksIDE3LCAxMiwgMSwgMjQ3LCAxMDQsIDQ3LCAxNywgMTIsIDEsIDI0NywgMTA0LCAzOSwgMTcsIAorICAgIDEyLCAxLCAyNDksIDEyOCwgNDcsIDE3LCAxMiwgMSwgMjQ5LCAxMjgsIDM5LCAxNywgMTIsIDEsIDIzNywgMTEwLCA0NywgCisgICAgMTcsIDEyLCAxLCAyMzcsIDExMCwgMzksIDE3LCAxMiwgMSwgMjI3LCA0OSwgNDcsIDE3LCAxMiwgMSwgMjI3LCA0OSwgMzksIAorICAgIDE3LCAxMiwgMSwgMjM2LCAxNzcsIDQ3LCAxNywgMTIsIDEsIDIzNiwgMTc3LCAzOSwgMTcsIDEyLCAxLCAyMzYsIDE3NywgCisgICAgNjYsIDE3LCAxMiwgMSwgMjM2LCAxNzcsIDEyOCwgMTcsIDEyLCAxLCAyNDQsIDI0NCwgNDcsIDE3LCAxMiwgMSwgMjQ0LCAKKyAgICAyNDQsIDM5LCAxNywgMTIsIDEsIDI0NCwgMjQ0LCA2NiwgMTcsIDEyLCAxLCAyNDQsIDI0NCwgMTI4LCAxNywgMTIsIDEsIAorICAgIDI0NCwgMTAsIDQ3LCAxNywgMTIsIDEsIDI0NCwgMTAsIDM5LCAxNywgMTIsIDEsIDI0NCwgMTAsIDY2LCAxNywgMTIsIDEsIAorICAgIDI0NCwgMTAsIDEyOCwgMTcsIDEyLCAxLCAyMzIsIDgzLCA0NywgMTcsIDEyLCAxLCAyMzIsIDgzLCAzOSwgMTcsIDEyLCAxLCAKKyAgICAyMzIsIDgzLCA2NiwgMTcsIDEyLCAxLCAyMzIsIDgzLCAxMjgsIDE3LCAxMiwgMSwgMjMxLCAxOTQsIDI0NCwgMTA4LCA0NywgCisgICAgMTcsIDEyLCAxLCAyMzEsIDE5NCwgMjQ0LCAxMDgsIDM5LCAxNywgMTIsIDEsIDIyNywgNzksIDQ3LCAxNywgMTIsIDEsIAorICAgIDIyNywgNzksIDM5LCAxNywgMTIsIDEsIDIyNywgNzksIDY2LCAxNywgMTIsIDEsIDIyNywgNzksIDEyOCwgMTcsIDEyLCAxLCAKKyAgICAyNDMsIDE0NywgMiwgNzAsIDcxLCA0NywgMTcsIDEyLCAxLCAyNDMsIDE0NywgMiwgNzAsIDcxLCAzOSwgMTcsIDEyLCAxLCAKKyAgICAyNDMsIDE0NywgMjQ0LCA2NiwgNDcsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDI0NCwgNjYsIDM5LCAxNywgMTIsIDEsIDI0MywgCisgICAgMTQ3LCAyNDQsIDY2LCA2NiwgMTcsIDEyLCAxLCAyNDMsIDE0NywgMjQ0LCA2NiwgMTI4LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAKKyAgICAyNDgsIDE2NCwgNDcsIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDI0OCwgMTY0LCAzOSwgMTcsIDEyLCAxLCAyNDMsIDE0NywgCisgICAgMjQ4LCAxNjQsIDY2LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAyNDgsIDE2NCwgMTI4LCAxNywgMTIsIDEsIDcwLCAyNTIsIAorICAgIDE5NSwgNDcsIDE3LCAxMiwgMSwgNzAsIDI1MiwgMTk1LCAzOSwgMTcsIDEyLCAxLCA3MCwgMjUyLCAxOTUsIDIsIDE4MSwgCisgICAgNzEsIDQ3LCAxNywgMTIsIDEsIDcwLCAyNTIsIDE5NSwgMiwgMTgxLCA3MSwgMzksIDE3LCAxMiwgMSwgMjMyLCAxMTgsIDQ3LCAKKyAgICAxNywgMTIsIDEsIDIzMiwgMTE4LCAzOSwgMTcsIDEyLCAxLCAyMzIsIDExOCwgNjYsIDE3LCAxMiwgMSwgMjMyLCAxMTgsIAorICAgIDEyOCwgMTcsIDEyLCAxLCAxMDUsIDQ3LCAxNywgMTIsIDEsIDEwNSwgMzksIDE3LCAxMiwgMSwgMjMwLCAxNjgsIDQ3LCAxNywgCisgICAgMTIsIDEsIDIzMCwgMTY4LCAzOSwgMTcsIDEyLCAxLCAyMTcsIDIwMSwgNDcsIDE3LCAxMiwgMSwgMjE3LCAyMDEsIDM5LCAKKyAgICAxNywgMTIsIDEsIDEwNSwgMiwgMTgxLCA3MSwgNDcsIDE3LCAxMiwgMSwgMjE5LCAxNjYsIDQ3LCAxNywgMTIsIDEsIDIxOSwgCisgICAgMTY2LCAzOSwgMTcsIDEyLCAxLCAyMzYsIDk4LCAyMzAsIDE2OCwgNDcsIDE3LCAxMiwgMSwgMjM2LCA5OCwgMjMwLCAxNjgsIAorICAgIDM5LCAxNywgMTIsIDEsIDIzNiwgOTgsIDIxNywgMjAxLCA0NywgMTcsIDEyLCAxLCAyMzYsIDk4LCAyMTcsIDIwMSwgMzksIAorICAgIDE3LCAxMiwgMSwgMTc4LCA0NywgMTcsIDEyLCAxLCAxNzgsIDM5LCAxNywgMTIsIDEsIDE3OCwgNjYsIDE3LCAxMiwgMSwgCisgICAgMTc4LCAxMjgsIDE3LCAxMiwgMSwgMjIwLCAxMDQsIDIzNiwgMTg4LCAyMzYsIDk4LCA5OSwgMTk3LCA2NiwgMTcsIDEyLCAxLCAKKyAgICAyMjAsIDEwNCwgMjM2LCAxODgsIDIzNiwgOTgsIDk5LCAxOTcsIDEyOCwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIAorICAgIDk5LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDk5LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgCisgICAgNzEsIDIsIDI1NCwgMjM1LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDI1NCwgMjM1LCAzOSwgMTcsIDEyLCAKKyAgICAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDIxOCwgMjM0LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDIxOCwgCisgICAgMjM0LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDEwNSwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIAorICAgIDcxLCAyLCAxMDUsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjMwLCAxNjgsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICA3MCwgMiwgMTgxLCA3MSwgMiwgMjMwLCAxNjgsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjE3LCAyMDEsIAorICAgIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjE3LCAyMDEsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCAKKyAgICA3MSwgMiwgMTc4LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDE3OCwgMzksIDE3LCAxMiwgMjQsIDcwLCAKKyAgICAyLCAxODEsIDcxLCAyLCAxNzgsIDY2LCAxNywgMTIsIDI0LCAyMjAsIDEwNCwgMjM2LCA5OCwgNzAsIDIsIDE4MSwgNzEsIDIsIAorICAgIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMjAsIDEwNCwgMjM2LCA5OCwgNzAsIDIsIDE4MSwgNzEsIDIsIDk5LCAxOTcsIAorICAgIDM5LCAxNywgMTIsIDI0LCAyMjAsIDEwNCwgMjM2LCA5OCwgNzAsIDIsIDE4MSwgNzEsIDIsIDk5LCAxOTcsIDY2LCAxNywgCisgICAgMTIsIDEsIDI0NSwgMjQxLCA3MCwgNDcsIDE3LCAxMiwgMSwgMjQ1LCAyNDEsIDcwLCAzOSwgMTcsIDEyLCAxLCAyNDUsIAorICAgIDI0MSwgNzAsIDY2LCAxNywgMTIsIDEsIDI0NSwgMjQxLCA3MCwgMTI4LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgCisgICAgMTM0LCA0NywgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIAorICAgIDcxLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgCisgICAgNzAsIDIsIDE4MSwgNzEsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIAorICAgIDI1MiwgMTI5LCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICAyNTIsIDEyOSwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIAorICAgIDI1MiwgMTI5LCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgCisgICAgNzgsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAyNCwgMjIyLCAKKyAgICA3OCwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjIyLCA3OCwgCisgICAgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCA2MiwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCA3MCwgNDcsIAorICAgIDE3LCAxMiwgMjQsIDEzNCwgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMTM0LCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDExMSwgCisgICAgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMTExLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIzNiwgMTQ3LCAyLCAxMzQsIDQ3LCAKKyAgICAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAxNDcsIDIsIDYyLCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjI2LCA4MywgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjI2LCA4MywgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIAorICAgIDIyNiwgMTcxLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyNDksIAorICAgIDIwMywgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAKKyAgICAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAKKyAgICAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyMTcsIDExMCwgMiwgNjIsIAorICAgIDQ3LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDYyLCA0NywgCisgICAgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCA2MiwgNDcsIDE3LCAKKyAgICAxMiwgMjQsIDI0NSwgMjIyLCAyLCAxMzQsIDQ3LCAxNywgMTIsIDI0LCAyNDUsIDIyMiwgMiwgMTExLCA0NywgMTcsIDEyLCAKKyAgICAyNCwgMjQ1LCAyMjIsIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAyNCwgMjQ1LCAyMjIsIDIsIDYyLCA0NywgMTcsIDEyLCAKKyAgICAyNCwgMjQ1LCAyMjIsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyNDUsIDIyMiwgMiwgNzAsIDQ3LCAxNywgMTIsIAorICAgIDI0LCAyMjgsIDE0OSwgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgMjI4LCAxNDksIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjI4LCAxNDksIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMjgsIDE0OSwgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAKKyAgICAyMzYsIDI0NywgMiwgOTksIDQ3LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjM2LCAKKyAgICAyNDcsIDIsIDExMSwgNDcsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDIzNiwgCisgICAgMjQ3LCAyLCAyMzUsIDE2MSwgNDcsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCA2MiwgNDcsIDE3LCAxMiwgMjQsIDIzNiwgCisgICAgMjQ3LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjM1LCAKKyAgICAxNjEsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgCisgICAgMiwgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgCisgICAgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDYyLCAyLCAxMzQsIAorICAgIDQ3LCAxNywgMTIsIDI0LCA2MiwgMiwgMTExLCA0NywgMTcsIDEyLCAyNCwgNjIsIDIsIDIzNiwgMTQ3LCA0NywgMTcsIDEyLCAKKyAgICAyNCwgNjIsIDIsIDYyLCA0NywgMTcsIDEyLCAyNCwgNjIsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCA2MiwgMiwgNzAsIAorICAgIDQ3LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMTM0LCA0NywgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDExMSwgNDcsIAorICAgIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCA2MiwgNDcsIAorICAgIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDcwLCA0NywgCisgICAgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDI0MywgMTQ3LCAyLCA2MiwgNDcsIDE3LCAKKyAgICAxMiwgMjQsIDI0MywgMTQ3LCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIDIsIDcwLCA0NywgMTcsIAorICAgIDEyLCAyNCwgNzAsIDIsIDEzNCwgNDcsIDE3LCAxMiwgMjQsIDcwLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgCisgICAgMjM2LCAxNDcsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgOTksIDE5NywgNDcsIAorICAgIDE3LCAxMiwgMjQsIDcwLCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMzAsIDIsIDIyMywgNTksIDk5LCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjI3LCAxOTcsIDIsIDIyMywgNTksIDk5LCA0NywgMTcsIDEyLCAyNCwgOTksIDE5NywgMiwgMjIzLCA1OSwgCisgICAgOTksIDQ3LCAxNywgMTIsIDI0LCAyMjUsIDE3LCAyLCAyNDksIDE3MSwgNDcsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIDIsIAorICAgIDIzNiwgMjA1LCA0NywgMTcsIDEyLCAyNCwgMjI1LCAxNywgMiwgMjQ1LCAyMzksIDQ3LCAxNywgMTIsIDI0LCAyMjUsIDE3LCAKKyAgICAyLCAyNDksIDE3MywgNDcsIDE3LCAxMiwgMjQsIDIyNSwgMTcsIDIsIDIzNiwgMjA3LCA0NywgMTcsIDEyLCAyNCwgMjI1LCAKKyAgICAxNywgMiwgMjIzLCA1OSwgOTksIDQ3LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjI3LCAxOTcsIDM5LCAxNywgCisgICAgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjE3LCAxMDcsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgCisgICAgNjIsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjMxLCAxOTQsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgCisgICAgMTgxLCA3MSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCA3MCwgMzksIDE3LCAxMiwgCisgICAgMjQsIDI1MiwgMTI5LCAyLCAyMjcsIDE5NywgMzksIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyMTcsIDEwNywgMzksIDE3LCAKKyAgICAxMiwgMjQsIDI1MiwgMTI5LCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyMzEsIDE5NCwgMzksIDE3LCAKKyAgICAxMiwgMjQsIDI1MiwgMTI5LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDcwLCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjIyLCA3OCwgMiwgMjI3LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAyMTcsIDEwNywgMzksIAorICAgIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgMjMxLCAxOTQsIDM5LCAxNywgCisgICAgMTIsIDI0LCAyMjIsIDc4LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNzAsIDM5LCAxNywgMTIsIAorICAgIDI0LCAyMjIsIDIwLCAyLCAyMjcsIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDIxNywgMTA3LCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjIyLCAyMCwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCAyMzEsIDE5NCwgMzksIDE3LCAxMiwgCisgICAgMjQsIDIyMiwgMjAsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIAorICAgIDI0NSwgMjIyLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjQ1LCAyMjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjI4LCAxNDksIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjgsIDE0OSwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMzYsIDI0NywgMiwgOTksIDM5LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgMjM1LCAxNjEsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMzYsIDI0NywgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMjQ3LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIzNSwgCisgICAgMTYxLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNjIsIDIsIAorICAgIDk5LCAzOSwgMTcsIDEyLCAyNCwgNjIsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDIyNywgMTk3LCAzOSwgCisgICAgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDIxNywgMTA3LCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDYyLCAzOSwgCisgICAgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDIzMSwgMTk0LCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDk5LCAxOTcsIAorICAgIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA5OSwgMTk3LCAyLCAyMjMsIDU5LCA5OSwgCisgICAgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAyMjcsIDE5NywgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAyMTcsIDEwNywgMzksIDE3LCAKKyAgICAxMiwgMjQsIDcwLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCAyMzEsIDE5NCwgMzksIDE3LCAxMiwgMjQsIDcwLCAKKyAgICAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDE4MSwgNzEsIDIsIAorICAgIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDcwLCAyLCAxODEsIDcxLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCAKKyAgICA3MSwgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAKKyAgICA3MCwgMiwgMTgxLCA3MSwgMiwgMjQzLCAxNDcsIDY2LCAxNywgMTIsIDI0LCAyNTIsIDEyOSwgMiwgMTM0LCA2NiwgMTcsIAorICAgIDEyLCAyNCwgMjUyLCAxMjksIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyMzYsIDE0NywgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDI1MiwgMTI5LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyNDMsIDE0NywgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDIyMiwgNzgsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyMiwgNzgsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAyMjIsIDc4LCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDIyMiwgMjAsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMTM0LCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAxMzQsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMTExLCAyLCAxMzQsIDY2LCAKKyAgICAxNywgMTIsIDI0LCAxMTEsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAxNDcsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMTQ3LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgCisgICAgODMsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICA4MywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIAorICAgIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIAorICAgIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgMjM2LCAKKyAgICAxNDcsIDY2LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgMiwgMTExLCAKKyAgICA2NiwgMTcsIDEyLCAyNCwgMjE3LCAxMTAsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDEzNCwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCAxMzQsIDY2LCAxNywgCisgICAgMTIsIDI0LCAyNDQsIDEyMywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyNDUsIDIyMiwgMiwgMTM0LCA2NiwgMTcsIDEyLCAKKyAgICAyNCwgMjQ1LCAyMjIsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDI0NSwgMjIyLCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgCisgICAgMjQsIDI0NSwgMjIyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyOCwgMTQ5LCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAyMjgsIDE0OSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjM2LCAKKyAgICAyNDcsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDIzNiwgCisgICAgMjQ3LCAyLCAyMzUsIDE2MSwgNjYsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzNSwgCisgICAgMTYxLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIAorICAgIDIsIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIAorICAgIDIsIDI0MywgMTQ3LCA2NiwgMTcsIDEyLCAyNCwgNjIsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCAxMTEsIDY2LCAKKyAgICAxNywgMTIsIDI0LCA2MiwgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCA2MiwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAyMzEsIDE5NCwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIzMSwgCisgICAgMTk0LCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzMSwgCisgICAgMTk0LCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDI0MywgMTQ3LCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyNDMsIAorICAgIDE0NywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyNDMsIDE0NywgMiwgMjIzLCA1OSwgOTksIDY2LCAxNywgMTIsIDI0LCA3MCwgCisgICAgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgNzAsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDcwLCAyLCAyMzYsIDE0NywgNjYsIAorICAgIDE3LCAxMiwgMjQsIDcwLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDcwLCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIAorICAgIDcwLCAyLCAxODEsIDcxLCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCA3MCwgMiwgMTgxLCA3MSwgMiwgMjQzLCAxNDcsIDEyOCwgCisgICAgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAyNDMsIDE0NywgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAyNDMsIDE0NywgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCAyMjIsIDIwLCAyLCAyNDMsIDE0NywgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA2MiwgMTI4LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAyNDMsIDE0NywgMTI4LCAKKyAgICAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgNjIsIDEyOCwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAyMzUsIDE2MSwgMTI4LCAxNywgMTIsIDI0LCAyMzYsIDI0NywgMiwgNjIsIDEyOCwgCisgICAgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCA2MiwgMTI4LCAxNywgCisgICAgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMjQzLCAxNDcsIDEyOCwgMTcsIDEyLCAyNCwgNzAsIDIsIDYyLCAxMjgsIDE3LCAxMiwgCisgICAgMjQsIDcwLCAyLCAyNDMsIDE0NywgMTI4LCAxNywgMTIsIDI0LCAyMjUsIDE3LCAyLCAyNDUsIDIzOSwgMTI4LCAxNywgMTIsIAorICAgIDI0LCAyMjUsIDE3LCAyLCAyNDksIDE3MywgMTI4LCAxNywgMTIsIDI0LCAyMjUsIDE3LCAyLCAyMzYsIDIwNywgMTI4LCAxNywgCisgICAgMTIsIDI0LCAyMjIsIDEzOCwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCA3MCwgNDcsIDE3LCAKKyAgICAxMiwgMjQsIDI1NCwgMTkyLCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIDcwLCA0NywgMTcsIAorICAgIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyNDQsIDEyMywgMiwgNzAsIDQ3LCAxNywgCisgICAgMTIsIDI0LCAyMjYsIDgzLCAyLCA5OSwgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgNzAsIDQ3LCAxNywgMTIsIAorICAgIDI0LCAyMjQsIDI0MywgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA3MCwgNDcsIDE3LCAxMiwgCisgICAgMjQsIDExMSwgMiwgOTksIDE5NywgNDcsIDE3LCAxMiwgMjQsIDExMSwgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAxMzQsIDIsIAorICAgIDk5LCAxOTcsIDQ3LCAxNywgMTIsIDI0LCAxMzQsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjM2LCAxNDcsIDIsIDk5LCAKKyAgICAxOTcsIDQ3LCAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgNzAsIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgOTksIAorICAgIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCA3MCwgNDcsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCA5OSwgCisgICAgMTk3LCA0NywgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDcwLCA0NywgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDEzNCwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAxMTEsIDQ3LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMjM2LCAxNDcsIAorICAgIDQ3LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgNjIsIDQ3LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMjI3LCAxOTcsIAorICAgIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAyMjcsIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCAyMjcsIAorICAgIDE5NywgNDcsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCAyMjcsIDE5NywgNDcsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCAKKyAgICA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjU0LCAxOTIsIDIsIAorICAgIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyNTQsIDE5MiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyNDQsIDEyMywgMiwgCisgICAgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDk5LCAKKyAgICAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA5OSwgCisgICAgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMTExLCAyLCA5OSwgMTk3LCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgMTExLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDEzNCwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgCisgICAgMjQsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMzYsIDE0NywgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIAorICAgIDIzNiwgMTQ3LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyNiwgMTcxLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjI2LCAxNzEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyNDksIDIwMywgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMTM0LCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAKKyAgICAyNDMsIDIsIDExMSwgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMzYsIDE0NywgMzksIDE3LCAxMiwgMjQsIDIyNCwgCisgICAgMjQzLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMjcsIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyNiwgCisgICAgODMsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjQ5LCAyMDMsIDIsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDEzNCwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyNCwgMjQzLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgMjM2LCAxNDcsIDY2LCAxNywgMTIsIDI0LCAKKyAgICAyMjQsIDI0MywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyNCwgMjQzLCAyLCAyNDMsIDE0NywgNjYsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIyNiwgODMsIDIsIDEzNCwgMTI4LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAxMTEsIDEyOCwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICA4MywgMiwgMjM2LCAxNDcsIDEyOCwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDEzNCwgMTI4LCAxNywgMTIsIDI0LCAyMjQsIAorICAgIDI0MywgMiwgMTExLCAxMjgsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAyMzYsIDE0NywgMTI4LCAxNywgMTIsIDI0LCAKKyAgICAyMjIsIDEzOCwgMiwgNjIsIDEyOCwgMTcsIDEyLCAyNCwgMjE3LCAxMTAsIDIsIDYyLCAxMjgsIDE3LCAxMiwgMjQsIDk5LCAKKyAgICAyLCAyNDUsIDIzNywgMzksIDE3LCAxMiwgMjQsIDk5LCAyLCAyNDUsIDIzNywgNDcsIDE3LCAyMzAsIDk3LCA0MiwgMjI5LCAKKyAgICAyMjksIDIzMCwgOTcsIDQ1LCAyMjksIDIyOSwgMTIsIDI0LCAyMjIsIDc4LCAyLCAxMzQsIDIsIDYyLCA2NiwgMTcsIDEyLCAKKyAgICAyNCwgMjIyLCA3OCwgMiwgMTExLCAyLCAxMzQsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAxMTEsIDIsIDEzNCwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDExMSwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAyMzYsIDE0NywgCisgICAgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCA2MiwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjIyLCA3OCwgCisgICAgMiwgNjIsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAyLCAyMzYsIDE0NywgNjYsIDE3LCAxMiwgCisgICAgMjQsIDEzNCwgMiwgNjIsIDIsIDExMSwgMzksIDE3LCAxMiwgMjQsIDEzNCwgMiwgNjIsIDIsIDExMSwgNjYsIDE3LCAxMiwgCisgICAgMjQsIDExMSwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMTExLCAyLCA2MiwgMiwgOTksIDE5NywgMzksIDE3LCAKKyAgICAxMiwgMjQsIDIyNiwgODMsIDIsIDExMSwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgMTM0LCAyLCAxMTEsIAorICAgIDY2LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAxMzQsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAKKyAgICA2MiwgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMjI2LCA4MywgMiwgNjIsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgCisgICAgODMsIDIsIDYyLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCA2MiwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMjYsIDgzLCAyLCA2MiwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgMTExLCAyLCAxMTEsIDM5LCAxNywgCisgICAgMTIsIDI0LCAyMjYsIDE3MSwgMiwgMTExLCAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMjYsIDE3MSwgMiwgNjIsIDIsIDYyLCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDExMSwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgCisgICAgMTExLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCAxMzQsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAKKyAgICAyNDMsIDIsIDYyLCAyLCAyMzYsIDE0NywgMzksIDE3LCAxMiwgMjQsIDIyNCwgMjQzLCAyLCA2MiwgMiwgMjM2LCAxNDcsIAorICAgIDY2LCAxNywgMTIsIDI0LCAyMjQsIDI0MywgMiwgNjIsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDYyLCAKKyAgICAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI0OSwgMjAzLCAyLCAxMTEsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyNDksIAorICAgIDIwMywgMiwgMjM2LCAxNDcsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjQ5LCAyMDMsIDIsIDIzNiwgMTQ3LCAyLCA2MiwgCisgICAgNjYsIDE3LCAxMiwgMjQsIDIyMiwgMTM4LCAyLCA2MiwgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIDIsIDYyLCAKKyAgICAyLCAxMTEsIDY2LCAxNywgMTIsIDI0LCAyMjIsIDEzOCwgMiwgNjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjIyLCAxMzgsIAorICAgIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCAxMzQsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjU0LCAxOTIsIDIsIDYyLCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCA2MiwgMiwgNjIsIDY2LCAxNywgCisgICAgMTIsIDI0LCAyNTQsIDE5MiwgMiwgNjIsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyNDQsIDEyMywgMiwgNjIsIDIsIAorICAgIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjQ0LCAxMjMsIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDI0NCwgMTIzLCAyLCAKKyAgICA2MiwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDI0NSwgMjIyLCAyLCAyMzYsIDE0NywgMiwgNjIsIDM5LCAxNywgMTIsIAorICAgIDI0LCAyNDUsIDIyMiwgMiwgMjM2LCAxNDcsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjI4LCAxNDksIDIsIDYyLCAyLCAKKyAgICAxMTEsIDM5LCAxNywgMTIsIDI0LCAyMjgsIDE0OSwgMiwgNjIsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIAorICAgIDExMSwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTExLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzNSwgCisgICAgMTYxLCAyLCAxMTEsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTM0LCAyLCAxMzQsIDY2LCAKKyAgICAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTM0LCAyLCAxMzQsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMjM2LCAKKyAgICAxNDcsIDIsIDYyLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDIzNiwgMTQ3LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIAorICAgIDIzNSwgMTYxLCAyLCA2MiwgMiwgMTExLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDYyLCAyLCAxMTEsIDY2LCAxNywgCisgICAgMTIsIDI0LCA2MiwgMiwgMTExLCAyLCAxMzQsIDY2LCAxNywgMTIsIDI0LCA2MiwgMiwgMTExLCAyLCA2MiwgNjYsIDE3LCAKKyAgICAxMiwgMjQsIDYyLCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNjIsIDIsIDEzNCwgMiwgMTExLCA2NiwgMTcsIAorICAgIDEyLCAyNCwgNjIsIDIsIDEzNCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCA2MiwgMiwgMjM2LCAxNDcsIDIsIDEzNCwgNjYsIAorICAgIDE3LCAxMiwgMjQsIDYyLCAyLCAyMzYsIDE0NywgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCA2MiwgMiwgMTM0LCAyLCAyMzYsIAorICAgIDE0NywgNjYsIDE3LCAxMiwgMjQsIDI0MywgMTQ3LCAyLCA2MiwgMiwgMTM0LCA2NiwgMTcsIDEyLCAyNCwgMjQzLCAxNDcsIAorICAgIDIsIDYyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMTEsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgCisgICAgMjMxLCAxOTQsIDIsIDExMSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMzQsIDIsIDYyLCAKKyAgICAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDEzNCwgMiwgNjIsIDY2LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgCisgICAgMTM0LCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMjMxLCAxOTQsIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIAorICAgIDIzMSwgMTk0LCAyLCA2MiwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDcwLCAyLCA2MiwgMiwgNjIsIDM5LCAxNywgCisgICAgMTIsIDI0LCA3MCwgMiwgNjIsIDIsIDYyLCA2NiwgMTcsIDEyLCAyNCwgMjUyLCAxMjksIDIsIDIzNiwgMTQ3LCAyLCA3MCwgCisgICAgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAxMzQsIAorICAgIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjIsIDc4LCAyLCAyMzYsIDE0NywgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAKKyAgICAyMjIsIDc4LCAyLCAyMzYsIDE0NywgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAyLCA3MCwgCisgICAgMzksIDE3LCAxMiwgMjQsIDIyMiwgNzgsIDIsIDYyLCAyLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAyNCwgMTM0LCAyLCA2MiwgCisgICAgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAxMzQsIDIsIDExMSwgMiwgOTksIDE5NywgMzksIDE3LCAxMiwgMjQsIDEzNCwgMiwgCisgICAgNjIsIDIsIDk5LCAxOTcsIDM5LCAxNywgMTIsIDI0LCAyMjYsIDgzLCAyLCAyMzYsIDE0NywgMiwgOTksIDE5NywgMzksIDE3LCAKKyAgICAxMiwgMjQsIDIyNiwgMTcxLCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI0LCAyNDMsIDIsIDExMSwgMiwgNzAsIAorICAgIDM5LCAxNywgMTIsIDI0LCAyNDksIDIwMywgMiwgMTExLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCAKKyAgICAxMzQsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDcwLCAKKyAgICAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNzAsIDIsIDEzNCwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCA3MCwgMiwgCisgICAgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgNjIsIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyOCwgMTQ5LCAyLCAKKyAgICA2MiwgMiwgNzAsIDM5LCAxNywgMTIsIDI0LCAyMzEsIDE5NCwgMiwgMTExLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIyOCwgCisgICAgMTQ5LCAyLCA2MiwgMiwgMTExLCA2NiwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDExMSwgMiwgNjIsIDY2LCAxNywgMTIsIAorICAgIDI0LCAyNTQsIDE5MiwgMiwgNjIsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDYyLCAyLCA3MCwgMzksIAorICAgIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMzQsIDIsIDExMSwgNjYsIDE3LCAxMiwgMjQsIDYyLCAyLCAyMzYsIDE0NywgMiwgCisgICAgNzAsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTM0LCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIzNiwgMjQ3LCAyLCAKKyAgICA2MiwgMiwgNjIsIDM5LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgMTM0LCAyLCA2MiwgMzksIDE3LCAxMiwgMjQsIDIzMSwgCisgICAgMTk0LCAyLCAxMzQsIDIsIDExMSwgMzksIDE3LCAxMiwgMjQsIDEzNCwgMiwgMTExLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIAorICAgIDExMSwgMiwgMTM0LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDYyLCAyLCAxMzQsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgCisgICAgMjQ1LCAyMjIsIDIsIDYyLCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDI1MiwgMTI5LCAyLCAxMTEsIDIsIDcwLCAzOSwgMTcsIAorICAgIDEyLCAyNCwgMjM2LCAyNDcsIDIsIDYyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDI1NCwgMTkyLCAyLCAxMzQsIDIsIDYyLCAKKyAgICA2NiwgMTcsIDEyLCAyNCwgMjI2LCAxNzEsIDIsIDYyLCAyLCA2MiwgNjYsIDE3LCAxMiwgMjQsIDIyNiwgODMsIDIsIDIzNiwgCisgICAgMTQ3LCAyLCA3MCwgMzksIDE3LCAxMiwgMjQsIDIzMSwgMTk0LCAyLCAxMzQsIDIsIDcwLCAzOSwgMTcsIDEyLCAyNCwgMjI2LCAKKyAgICAxNTMsIDIyMCwgMzIsIDI1NCwgMTQsIDIzNiwgMzUsIDIyMywgMTM3LCA1LCA0NywgMTcsIDEyLCAyNCwgMjI4LCAxNDUsIAorICAgIDIyMCwgMzIsIDI1NCwgMTQsIDIzNiwgMzUsIDIyMywgMTM3LCA1LCA0NywgMTcsIDEyLCAyNCwgMjU0LCAxNTYsIDQ3LCAxNywgCisgICAgMTIsIDI0LCAyNTQsIDE3OSwgNDcsIDE3LCAxMiwgMjQsIDIzMywgMTMwLCA0NywgMTcsIDEyLCAyNCwgMjI2LCAxNTQsIDQ3LCAKKyAgICAxNywgMTIsIDI0LCAyMjcsIDIzMCwgNDcsIDE3LCAxMiwgMjQsIDI1NCwgMTcwLCA0NywgMTcsIDEyLCAyNCwgMjE4LCAyNDksIAorICAgIDQ3LCAxNywgMTIsIDI0LCAyMjYsIDE1MywgNDcsIDE3LCAxMiwgMjQsIDIyNiwgMTUyLCAyNTQsIDE3MCwgMjE4LCAyNDgsIAorICAgIDEyLCAyNCwgMjM3LCAxMjAsIDIyNywgMTQ2LCA1NSwgMTIsIDI0LCAyNTIsIDYxLCAyNTQsIDY1LCAyNTQsIDY2LCA0MSwgCisgICAgMjI2LCA3MywgNDEsIDIyNSwgMjE4LCA0MSwgMjI1LCAxNTAsIDQxLCAyMjUsIDEzOSwgNDEsIDIyNSwgMTI4LCA0MSwgMjI1LCAKKyAgICAxMTcsIDQxLCAyMjUsIDEwNiwgNDEsIDIyNSwgOTUsIDQxLCAyMjUsIDg0LCA0MSwgMjI2LCA3MiwgNDEsIDIyNiwgNjEsIAorICAgIDQxLCAyMjYsIDUwLCA0MSwgMjI2LCAzOSwgNDEsIDIyNiwgMjgsIDQxLCAyMjYsIDE3LCA0MSwgMjI2LCA2LCAyMjgsIDIzOCwgCisgICAgMjQ1LCAxMjQsIDM1LCA2OSwgMjUwLCAxNjgsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA5OCwgMjUwLCAxNjgsIAorICAgIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA5OCwgMjQ1LCA5MCwgMjIzLCAxMzYsIDIyOCwgMjM4LCAyNDUsIDEyNCwgCisgICAgMzUsIDY5LCAyNTAsIDE3NSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDIyNSwgNjcsIDIyOCwgMjM4LCAyNDUsIAorICAgIDEyNCwgMzUsIDY5LCAyNDYsIDk1LCA3OCwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDIyOCwgODIsIDc4LCAyMjgsIAorICAgIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDY3LCAyMzUsIDkxLCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCAKKyAgICA0NSwgNjcsIDIzNSwgOTEsIDI1MiwgMTYsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCAxODYsIDI0NiwgMjA4LCAzNiwgCisgICAgMjQsIDQyLCAyNDMsIDE5NCwgMzYsIDI0LCA0NSwgMjQzLCAxOTQsIDM2LCA1MSwgMjIxLCAxODAsIDQyLCAyNDMsIDE5NCwgCisgICAgMzYsIDUxLCAyMjEsIDE4MCwgNDUsIDI0MywgMTk0LCAzNiwgMjM0LCAxMTYsIDQyLCAyNDMsIDE5NCwgMzYsIDIzNCwgMTE2LCAKKyAgICA0NSwgMjQzLCAxOTQsIDM2LCAyNTAsIDE1MSwgMjM0LCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCAxMjQsIAorICAgIDYxLCAyMzUsIDEyMSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDI0NiwgMjA2LCAyNDksIDE0NiwgMjI4LCAyMzgsIAorICAgIDI0NSwgMTI0LCAzNSwgNjksIDI0NiwgMTk4LCAyNDksIDE0NiwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDEwOSwgCisgICAgMjM1LCA0MywgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDIxOCwgMjM1LCAxMDksIDIzNSwgNDMsIDIyOCwgMjM4LCAKKyAgICAyNDUsIDEyNCwgMzUsIDY5LCA0MiwgMjI5LCAyMjksIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0NSwgMjI5LCAyMjksIAorICAgIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0MiwgMjUwLCA3OSwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgCisgICAgNDUsIDI1MCwgNzksIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQyLCAyMjEsIDExNCwgMjI0LCAyMzYsIAorICAgIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCAyMjEsIDExNCwgMjI0LCAyMzYsIDExNSwgMjI4LCAyMzgsIAorICAgIDI0NSwgMTI0LCAzNSwgNjksIDQyLCA4NCwgMjM1LCA5MSwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDUsIAorICAgIDg0LCAyMzUsIDkxLCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0MiwgNTEsIDI1NCwgMTIwLCAxMTUsIDIyOCwgCisgICAgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0NSwgNTEsIDI1NCwgMTIwLCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCAKKyAgICA0MiwgMjU0LCAxMjAsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCAyNTQsIDEyMCwgMTE1LCAyMjgsIAorICAgIDIzOCwgMjQ1LCAxMjQsIDM1LCA2OSwgNDIsIDI1MCwgMTI0LCAxMTUsIDIyOCwgMjM4LCAyNDUsIDEyNCwgMzUsIDY5LCA0NSwgCisgICAgMjUwLCAxMjQsIDExNSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQyLCA2NywgMjUwLCAxMjQsIDExNSwgMjI4LCAKKyAgICAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQ1LCA2NywgMjUwLCAxMjQsIDExNSwgMjI1LCA0OSwgMjQ4LCAxNDUsIDY3LCAyMjUsIAorICAgIDQ5LCAyNDgsIDE0NSwgMjI4LCAyMzgsIDI0NSwgMTI0LCAzNSwgNjksIDQyLCA0MCwgMTE1LCAyMjgsIDIzOCwgMjQ1LCAKKyAgICAxMjQsIDM1LCA2OSwgNDUsIDQwLCAxMTUsIDI0OSwgMTQ1LCAyMzAsIDczLCAyNTEsIDgyLCAyMzAsIDczLCAyMTgsIDIzNSwgCisgICAgMjMwLCA3MywgNTEsIDIxOCwgMjM1LCAyMzAsIDczLCAyNDksIDE0NSwgMTA5LCAyMzUsIDQzLCAyNTEsIDgyLCAxMDksIAorICAgIDIzNSwgNDMsIDIxOCwgMjM1LCAxMDksIDIzNSwgNDMsIDMsIDI1MCwgMTY4LCAzLCA5OCwgMjUwLCAxNjgsIDMsIDI0NSwgCisgICAgOTAsIDIyMywgMTM2LCAzLCAyMjUsIDY3LCAzLCAyNTAsIDE3NSwgMywgMjI4LCA4MiwgNzgsIDMsIDI0NiwgOTUsIDc4LCAzLCAKKyAgICAyNDYsIDIwNiwgMjQ5LCAxNDYsIDMsIDQyLCAyMjksIDIyOSwgMywgNDUsIDIyOSwgMjI5LCAzLCA0MiwgMjUwLCA3OSwgCisgICAgMTE1LCAzLCA0NSwgMjUwLCA3OSwgMTE1LCAzLCA0MiwgMjIxLCAxMTQsIDIyNCwgMjM2LCAxMTUsIDMsIDQ1LCAyMjEsIAorICAgIDExNCwgMjI0LCAyMzYsIDExNSwgMywgNTQsIDU1LCAzLCAyNTQsIDEzNCwgMywgMjUzLCAyNTEsIDMsIDg4LCA1NSwgMywgCisgICAgMjQyLCAxMjAsIDMsIDIzNSwgODcsIDU1LCAzLCAyNDQsIDMwLCA1NSwgMywgMjQ2LCAxNTQsIDU1LCAzLCAyMjcsIDE2MCwgCisgICAgMjI0LCAxNywgMywgMjQ4LCAxNTUsIDU1LCAzLCAyMjksIDE2OSwgNTUsIDMsIDI1MCwgMTY3LCAyNTMsIDI0NCwgMTIsIAorICAgIDI0NSwgMjM3LCA0NywgMTcsIDEyLCAyMjIsIDEwOCwgMiwgMjQ1LCAyMzcsIDUwLCAxMiwgMjQ5LCAxNzEsIDQ3LCAxNywgCisgICAgMTIsIDIyMiwgMTM2LCAyNDUsIDEwNywgMTIsIDIzNiwgMjA1LCA0NywgMTcsIDEyLCAyNDUsIDIzOSwgNDcsIDE3LCAxMiwgCisgICAgMjQ1LCAyMzksIDEyOCwgMTcsIDEyLCAyNDksIDE3MywgNDcsIDE3LCAxMiwgMjQ5LCAxNzMsIDEyOCwgMTcsIDEyLCAyMzYsIAorICAgIDIwNywgNDcsIDE3LCAxMiwgMjM2LCAyMDcsIDEyOCwgMTcsIDEyLCAyMjUsIDE3LCA0NywgMTcsIDEyLCAyMjUsIDE3LCAKKyAgICAxMjgsIDE3LCAxMiwgMjIzLCA3NiwgNDcsIDE3LCAxMiwgMjIzLCA3NiwgMTI4LCAxNywgMTIsIDEsIDE4MSwgNDcsIDE3LCAKKyAgICAxMiwgMSwgOTksIDIsIDIzNCwgMTExLCA3MSwgNDcsIDE3LCAxMiwgMSwgOTksIDIsIDIzNCwgMTExLCA3MSwgMzksIDE3LCAKKyAgICAxMiwgMSwgOTksIDIsIDE4MSwgNzEsIDQ3LCAxNywgMTIsIDEsIDk5LCAyLCAxODEsIDcxLCAzOSwgMTcsIDEyLCAxLCAyMTgsIAorICAgIDIzNCwgMiwgMTgxLCA3MSwgNDcsIDE3LCAxMiwgMSwgMjE4LCAyMzQsIDIsIDE4MSwgNzEsIDM5LCAxNywgMTIsIDEsIDk5LCAKKyAgICAyLCAxODEsIDI1MiwgMTE4LCA0NywgMTcsIDEyLCAxLCA5OSwgMiwgMTgxLCAyNTIsIDExOCwgMzksIDE3LCAxMiwgMSwgNzAsIAorICAgIDIsIDE4MSwgNzEsIDQ3LCAxNywgMTIsIDEsIDcwLCAyLCAxODEsIDcxLCAzOSwgMTcsIDEyLCAxLCA3MCwgMiwgMTgxLCA3MSwgCisgICAgNjYsIDE3LCAxMiwgMSwgNzAsIDIsIDE4MSwgNzEsIDEyOCwgMTcsIDEyLCAxLCA5OSwgNDcsIDE3LCAxMiwgMSwgOTksIDM5LCAKKyAgICAxNywgMTIsIDEsIDI1MiwgMTI5LCA0NywgMTcsIDEyLCAxLCAyNTIsIDEyOSwgMzksIDE3LCAxMiwgMSwgMjUyLCAxMjksIAorICAgIDY2LCAxNywgMTIsIDEsIDI1MiwgMTI5LCAxMjgsIDE3LCAxMiwgMSwgMjIyLCA3OCwgMjM0LCA3MywgNDcsIDE3LCAxMiwgMSwgCisgICAgMjIyLCA3OCwgMjM0LCA3MywgMzksIDE3LCAxMiwgMSwgMjIyLCA3OCwgNDcsIDE3LCAxMiwgMSwgMjIyLCA3OCwgMzksIDE3LCAKKyAgICAxMiwgMSwgMjIyLCA3OCwgNjYsIDE3LCAxMiwgMSwgMjIyLCA3OCwgMTI4LCAxNywgMTIsIDEsIDIyMiwgMjAsIDQ3LCAxNywgCisgICAgMTIsIDEsIDIyMiwgMjAsIDM5LCAxNywgMTIsIDEsIDIyMiwgMjAsIDY2LCAxNywgMTIsIDEsIDIyMiwgMjAsIDEyOCwgMTcsIAorICAgIDEyLCAxLCAxMzQsIDQ3LCAxNywgMTIsIDEsIDEzNCwgMzksIDE3LCAxMiwgMSwgMTM0LCA2NiwgMTcsIDEyLCAxLCAxMzQsIAorICAgIDEyOCwgMTcsIDEyLCAxLCAxMTEsIDQ3LCAxNywgMTIsIDEsIDExMSwgMzksIDE3LCAxMiwgMSwgMTExLCA2NiwgMTcsIDEyLCAKKyAgICAxLCAxMTEsIDEyOCwgMTcsIDEyLCAxLCAyMzYsIDE0NywgNDcsIDE3LCAxMiwgMSwgMjM2LCAxNDcsIDM5LCAxNywgMTIsIDEsIAorICAgIDIzNiwgMTQ3LCA2NiwgMTcsIDEyLCAxLCAyMzYsIDE0NywgMTI4LCAxNywgMTIsIDEsIDI0OSwgMTg0LCA0NywgMTcsIDEyLCAKKyAgICAxLCAyNDksIDE4NCwgMzksIDE3LCAxMiwgMSwgMjIyLCAzMCwgNDcsIDE3LCAxMiwgMSwgMjIyLCAzMCwgMzksIDE3LCAxMiwgCisgICAgMSwgMjI3LCAxOTcsIDQ3LCAxNywgMTIsIDEsIDIyNywgMTk3LCAzOSwgMTcsIDEyLCAxLCAyMTcsIDEwNywgNDcsIDE3LCAKKyAgICAxMiwgMSwgMjE3LCAxMDcsIDM5LCAxNywgMTIsIDEsIDIyNiwgODMsIDQ3LCAxNywgMTIsIDEsIDIyNiwgODMsIDM5LCAxNywgCisgICAgMTIsIDEsIDIyNiwgODMsIDY2LCAxNywgMTIsIDEsIDIyNiwgODMsIDEyOCwgMTcsIDEyLCAxLCAyMjQsIDI0MywgNDcsIDE3LCAKKyAgICAxMiwgMSwgMjI0LCAyNDMsIDM5LCAxNywgMTIsIDEsIDIyNCwgMjQzLCA2NiwgMTcsIDEyLCAxLCAyMjQsIDI0MywgMTI4LCAKKyAgICAxNywgMTIsIDEsIDIyNiwgMTcxLCA0NywgMTcsIDEyLCAxLCAyMjYsIDE3MSwgMzksIDE3LCAxMiwgMSwgMjI2LCAxNzEsIAorICAgIDY2LCAxNywgMTIsIDEsIDIyNiwgMTcxLCAxMjgsIDE3LCAxMiwgMSwgMjQ5LCAyMDMsIDQ3LCAxNywgMTIsIDEsIDI0OSwgCisgICAgMjAzLCAzOSwgMTcsIDEyLCAxLCAyNDksIDIwMywgNjYsIDE3LCAxMiwgMSwgMjQ5LCAyMDMsIDEyOCwgMTcsIDEyLCAxLCAKKyAgICAyMjIsIDEzOCwgNDcsIDE3LCAxMiwgMSwgMjIyLCAxMzgsIDM5LCAxNywgMTIsIDEsIDIyMiwgMTM4LCA2NiwgMTcsIDEyLCAKKyAgICAxLCAyMjIsIDEzOCwgMTI4LCAxNywgMTIsIDEsIDIxNywgMTEwLCA0NywgMTcsIDEyLCAxLCAyMTcsIDExMCwgMzksIDE3LCAKKyAgICAxMiwgMSwgMjE3LCAxMTAsIDY2LCAxNywgMTIsIDEsIDIxNywgMTEwLCAxMjgsIDE3LCAxMiwgMSwgMjU0LCAxOTIsIDQ3LCAKKyAgICAxNywgMTIsIDEsIDI1NCwgMTkyLCAzOSwgMTcsIDEyLCAxLCAyNTQsIDE5MiwgNjYsIDE3LCAxMiwgMSwgMjU0LCAxOTIsIAorICAgIDEyOCwgMTcsIDEyLCAxLCAyNDQsIDEyMywgNDcsIDE3LCAxMiwgMSwgMjQ0LCAxMjMsIDM5LCAxNywgMTIsIDEsIDI0NCwgCisgICAgMTIzLCA2NiwgMTcsIDEyLCAxLCAyNDQsIDEyMywgMTI4LCAxNywgMTIsIDEsIDI0NSwgMjIyLCA0NywgMTcsIDEyLCAxLCAKKyAgICAyNDUsIDIyMiwgMzksIDE3LCAxMiwgMSwgMjQ1LCAyMjIsIDY2LCAxNywgMTIsIDEsIDI0NSwgMjIyLCAxMjgsIDE3LCAxMiwgCisgICAgMSwgMjI4LCAxNDksIDQ3LCAxNywgMTIsIDEsIDIyOCwgMTQ5LCAzOSwgMTcsIDEyLCAxLCAyMjgsIDE0OSwgNjYsIDE3LCAKKyAgICAxMiwgMSwgMjI4LCAxNDksIDEyOCwgMTcsIDEyLCAxLCAyMzYsIDI0NywgNDcsIDE3LCAxMiwgMSwgMjM2LCAyNDcsIDM5LCAKKyAgICAxNywgMTIsIDEsIDIzNiwgMjQ3LCA2NiwgMTcsIDEyLCAxLCAyMzYsIDI0NywgMTI4LCAxNywgMTIsIDEsIDIzNSwgMTYxLCAKKyAgICA0NywgMTcsIDEyLCAxLCAyMzUsIDE2MSwgMzksIDE3LCAxMiwgMSwgMjM1LCAxNjEsIDY2LCAxNywgMTIsIDEsIDIzNSwgCisgICAgMTYxLCAxMjgsIDE3LCAxMiwgMSwgNjIsIDQ3LCAxNywgMTIsIDEsIDYyLCAzOSwgMTcsIDEyLCAxLCA2MiwgNjYsIDE3LCAKKyAgICAxMiwgMSwgNjIsIDEyOCwgMTcsIDEyLCAxLCAyMzEsIDE5NCwgNDcsIDE3LCAxMiwgMSwgMjMxLCAxOTQsIDM5LCAxNywgMTIsIAorICAgIDEsIDIzMSwgMTk0LCA2NiwgMTcsIDEyLCAxLCAyMzEsIDE5NCwgMTI4LCAxNywgMTIsIDEsIDI0MywgMTQ3LCA0NywgMTcsIAorICAgIDEyLCAxLCAyNDMsIDE0NywgMzksIDE3LCAxMiwgMSwgMjQzLCAxNDcsIDY2LCAxNywgMTIsIDEsIDI0MywgMTQ3LCAxMjgsIAorICAgIDE3LCAxMiwgMSwgMjE4LCAyMzQsIDQ3LCAxNywgMTIsIDEsIDIxOCwgMjM0LCAzOSwgMTcsIDEyLCAxLCA5OSwgMTk3LCA0NywgCisgICAgMTcsIDEyLCAxLCA5OSwgMTk3LCAzOSwgMTcsIDEyLCAxLCA3MCwgNDcsIDE3LCAxMiwgMSwgNzAsIDM5LCAxNywgMTIsIDEsIAorICAgIDcwLCA2NiwgMTcsIDEyLCAxLCA3MCwgMTI4LCAxNywgMTIsIDI0LCAyMzUsIDE2MSwgMiwgOTksIDIsIDIzNCwgMTExLCA3MSwgCisgICAgNDcsIDE3LCAxMiwgMjQsIDIzNSwgMTYxLCAyLCA5OSwgMiwgMjM0LCAxMTEsIDcxLCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAKKyAgICAxNjEsIDIsIDk5LCAyLCAxODEsIDcxLCA0NywgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDk5LCAyLCAxODEsIDcxLCAzOSwgCisgICAgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDk5LCAyLCAxODEsIDI1MiwgMTE4LCA0NywgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIAorICAgIDIsIDk5LCAyLCAxODEsIDI1MiwgMTE4LCAzOSwgMTcsIDEyLCAyNCwgMjM1LCAxNjEsIDIsIDk5LCA0NywgMTcsIDEyLCAyNCwgCisgICAgMjM1LCAxNjEsIDIsIDk5LCAzOSwgMTcsIDIxNywgODUsIDIxOCwgMTk5LCAyMzEsIDIwMywgMjIzLCAyNTQsIDExMCwgMjQ2LCAKKyAgICA5NSwgNzgsIDExMCwgMjI4LCA2OSwgNzgsIDExMCwgNTQsIDU1LCAxMTAsIDI0OCwgMTU1LCA1NSwgMTEwLCAyMjksIDE2OSwgCisgICAgNTUsIDExMCwgMjU0LCAxMzQsIDExMCwgMjU0LCA3OSwgMTEwLCA0MiwgMjI5LCAyMjksIDExMCwgNDUsIDIyOSwgMjI5LCAKKyAgICAxMTAsIDI1MywgMjUxLCAxMTAsIDg4LCA1NSwgMTEwLCAyNTAsIDE2OCwgMTEwLCAyNDIsIDEyMCwgMTEwLCAyNDUsIDkwLCAKKyAgICAyMjMsIDEzNiwgMTEwLCAyMjQsIDE3LCAxMTAsIDIwLCAyMTcsIDg0LCAxMTAsIDIwLCAxMDcsIDExMCwgMjAsIDEwMywgCisgICAgMTEwLCAyMCwgMTYwLCAxMTAsIDIwLCAxNTQsIDExMCwgMjAsIDE3NCwgMTEwLCAyMCwgMTgyLCAxMTAsIDIwLCAxOTEsIAorICAgIDExMCwgMjAsIDE4NSwgMTEwLCAyMCwgMTkwLCAxMTAsIDI1MCwgMTc1LCAxMTAsIDIyNSwgNjcsIDExMCwgMjM1LCA4NywgCisgICAgNTUsIDExMCwgMjQ2LCAxNTQsIDU1LCAxMTAsIDI0NCwgMzAsIDU1LCAxMTAsIDIyOCwgODIsIDc4LCAxMTAsIDI1MCwgMTY3LCAKKyAgICAyNTMsIDI0NCwgMTEwLCA3LCA2LCAxLCA2MCwgMTEwLCA3LCA2LCAxLCAyNTMsIDIwNCwgMTEwLCA3LCA2LCAxLCAyNTEsIAorICAgIDIwMiwgMTEwLCA3LCA2LCAxLCAyNTAsIDQ2LCAxMTAsIDcsIDYsIDEsIDczLCAxMTAsIDcsIDYsIDEsIDI0NiwgNzQsIDExMCwgCisgICAgNywgNiwgMSwgMjQ1LCA2NywgMTEwLCA3LCA2LCAxLCAyNDMsIDIyNSwgMTEwLCA3LCA2LCAxLCA3MiwgMTEwLCA3LCA2LCAxLCAKKyAgICAyMzcsIDEyNiwgMTEwLCA3LCA2LCAxLCAyMzcsIDE3LCAxMTAsIDcsIDYsIDEsIDE1MywgMTEwLCA3LCA2LCAxLCAxODksIAorICAgIDExMCwgNywgNiwgMSwgMjA3LCAxMTAsIDcsIDYsIDEsIDc0LCAxMTAsIDcsIDYsIDEsIDIzMCwgNTksIDExMCwgNywgNiwgMSwgCisgICAgMjI4LCAxNjMsIDExMCwgNywgNiwgMSwgMTUyLCAxMTAsIDcsIDYsIDEsIDE5OCwgMTEwLCA3LCA2LCAxLCAyMjIsIDIwMSwgCisgICAgMTEwLCA3LCA2LCAxLCA2OCwgMTEwLCA3LCA2LCAxLCAyMTYsIDIxNiwgMTEwLCA3LCA2LCAxLCAyMTksIDQwLCAxMTAsIDcsIAorICAgIDYsIDEsIDIxOCwgMTUxLCAxMTAsIDcsIDYsIDEsIDIxOCwgOTAsIDExMCwgNywgNiwgMSwgMjE3LCAxNTcsIDExMCwgNDIsIAorICAgIDQwLCAxMTUsIDExMCwgMjI3LCAxNjAsIDIyNCwgMTcsIDExMCwgNDUsIDQwLCAxMTUsIDExMCwgMjUwLCAyMTcsIDI1NSwgMCwgCisgICAgMTEwLCAxMDksIDIzNSwgNDMsIDExMCwgMjQ0LCAzNywgMjU1LCAwLCAxMTAsIDcsIDMsIDEsIDYwLCAxMTAsIDcsIDMsIDEsIAorICAgIDI1MywgMjA0LCAxMTAsIDcsIDMsIDEsIDI1MSwgMjAyLCAxMTAsIDcsIDMsIDEsIDI1MCwgNDYsIDExMCwgNywgMywgMSwgCisgICAgNzMsIDExMCwgNywgMywgMSwgMjQ2LCA3NCwgMTEwLCA3LCAzLCAxLCAyNDUsIDY3LCAxMTAsIDcsIDMsIDEsIDI0MywgMjI1LCAKKyAgICAxMTAsIDcsIDMsIDEsIDcyLCAxMTAsIDcsIDMsIDEsIDIzNywgMTI2LCAxMTAsIDcsIDMsIDEsIDIzNywgMTcsIDExMCwgNywgCisgICAgMywgMSwgMTUzLCAxMTAsIDcsIDMsIDEsIDE4OSwgMTEwLCA3LCAzLCAxLCAyMDcsIDExMCwgNywgMywgMSwgNzQsIDExMCwgCisgICAgNywgMywgMSwgMjMwLCA1OSwgMTEwLCA3LCAzLCAxLCAyMjgsIDE2MywgMTEwLCA3LCAzLCAxLCAxNTIsIDExMCwgNywgMywgCisgICAgMSwgMTk4LCAxMTAsIDcsIDMsIDEsIDIyMiwgMjAxLCAxMTAsIDcsIDMsIDEsIDY4LCAxMTAsIDcsIDMsIDEsIDIxNiwgMjE2LCAKKyAgICAxMTAsIDcsIDMsIDEsIDIxOSwgNDAsIDExMCwgNywgMywgMSwgMjE4LCAxNTEsIDExMCwgNywgMywgMSwgMjE4LCA5MCwgCisgICAgMTEwLCA3LCAzLCAxLCAyMTcsIDE1NywgMTEwLCA0MiwgMjUwLCA3OSwgMTE1LCAxMTAsIDY5LCAyMzUsIDQzLCAxMTAsIDQ1LCAKKyAgICAyNTAsIDc5LCAxMTUsIDExMCwgMjIxLCAxNzksIDExMCwgNDIsIDY3LCAyMjksIDIyOSwgMTEwLCA0NSwgNjcsIDIyOSwgCisgICAgMjI5LCA5MywgOTgsIDI0NSwgOTAsIDIyMywgMTM2LCA5MywgNDIsIDI1MCwgMTI0LCAxMTUsIDkzLCA0NSwgMjUwLCAxMjQsIAorICAgIDExNSwgOTMsIDk4LCAyNTAsIDE2OCwgOTMsIDUyLCAyMzMsIDE5MywgMjQ4LCAxNDUsIDkzLCA1MiwgMSwgMjE4LCAxODcsIAorICAgIDkzLCA1MiwgMSwgMywgNjAsIDkzLCA1MiwgMSwgMywgNzIsIDkzLCA1MiwgMSwgMywgNjgsIDkzLCA1MiwgMSwgMywgNzMsIAorICAgIDkzLCA1MiwgMSwgMywgNzQsIDkzLCA1MiwgMSwgMywgMTg0LCA5MywgNTIsIDEsIDMsIDIxNywgMjAwLCA5MywgNTIsIDEsIAorICAgIDMsIDIxNywgMjMxLCA5MywgNTIsIDEsIDMsIDIyMSwgMCwgOTMsIDIzNiwgMjAyLCAyMjgsIDIyMywgMjI0LCA5LCA3OCwgCisgICAgOTMsIDUyLCAxLCA2MCwgOTMsIDUyLCAxLCA3MiwgOTMsIDUyLCAxLCA2OCwgOTMsIDUyLCAxLCA3MywgOTMsIDUyLCAxLCAKKyAgICA3NCwgOTMsIDUyLCAxLCAxNzUsIDkzLCA1MiwgMSwgMjM2LCAxMTMsIDkzLCA1MiwgMSwgMjM2LCA3LCA5MywgNTIsIDEsIAorICAgIDIzNiwgMTg0LCA5MywgNTIsIDEsIDIzNiwgNTcsIDkzLCA1MiwgMSwgMjI2LCAxNzcsIDkzLCA1MiwgMSwgMjI0LCAxNDAsIAorICAgIDkzLCA1MiwgMSwgMjIzLCAxMDMsIDkzLCA1MiwgMSwgMjI2LCA5NCwgOTMsIDUyLCAxLCAyMjQsIDI2LCA5MywgNTIsIDEsIAorICAgIDIyMiwgMTU1LCA5MywgNTIsIDEsIDIyMSwgMjA1LCA5MywgNTIsIDEsIDIyMSwgMCwgOTMsIDUyLCAxLCAyMjIsIDg3LCA5MywgCisgICAgNTIsIDEsIDEwMSwgOTMsIDUyLCAxLCAyMDgsIDkzLCA1MiwgMSwgMjMyLCA2MiwgOTMsIDUyLCAxLCAyMzEsIDE0NCwgOTMsIAorICAgIDUyLCAxLCAyMzIsIDE0MSwgOTMsIDUyLCAxLCAyMzEsIDIwNCwgOTMsIDUyLCAxLCAxNTUsIDkzLCA1MiwgMSwgMjQzLCAKKyAgICAxMTIsIDkzLCA1MiwgMSwgMjQyLCAxNzMsIDkzLCA1MiwgMSwgMjQzLCAxNjIsIDkzLCA1MiwgMSwgMjQzLCA0LCA5MywgNTIsIAorICAgIDEsIDE5NiwgOTMsIDUyLCAxLCAyMzMsIDE5NiwgOTMsIDUyLCAxLCAyMzMsIDk5LCA5MywgNTIsIDEsIDIzNCwgMjUsIDkzLCAKKyAgICA1MiwgMSwgMjMzLCAxMzYsIDkzLCA1MiwgMSwgMTg0LCA5MywgNTIsIDEsIDIxNywgMjAwLCA5MywgNTIsIDEsIDIxNywgCisgICAgMjMxLCA5MywgNTIsIDEsIDIwMywgOTMsIDUyLCAxLCAyMjcsIDE0NywgOTMsIDUyLCAxLCAyMjcsIDIyLCA5MywgNTIsIDEsIAorICAgIDIyNywgMjE2LCA5MywgNTIsIDEsIDIyNywgNzUsIDkzLCA1MiwgMSwgMjE5LCA3LCA5MywgNTIsIDEsIDIwNywgOTMsIDUyLCAKKyAgICAyMTksIDcwLCAyMjQsIDksIDc4LCA5MywgNTIsIDIyNSwgNzIsIDIyNCwgOSwgNzgsIDkzLCAyMiwgMjQ1LCAxODUsIDkzLCAKKyAgICAyMiwgMSwgMjM2LCA4NiwgOTMsIDIyLCAxLCAyMjMsIDIxMSwgOTMsIDIyLCAxLCAyMzYsIDc5LCA5MywgMjIsIDEsIDIzMiwgCisgICAgNTUsIDkzLCAyMiwgMSwgMjMyLCA1MywgOTMsIDIyLCAxLCAyMzIsIDUyLCA5MywgMjIsIDEsIDIyMSwgMTkyLCA5MywgMjIsIAorICAgIDEsIDIyMywgMjAwLCA5MywgMjIsIDEsIDIyNywgMTQwLCA5MywgMjIsIDEsIDIyNywgMTM1LCA5MywgMjIsIDEsIDIyNywgCisgICAgMTMyLCA5MywgMjIsIDEsIDIyNywgMTI1LCA5MywgMjIsIDEsIDIyNywgMTIwLCA5MywgMjIsIDEsIDIyNywgMTE1LCA5MywgCisgICAgMjIsIDEsIDIyNywgMTI2LCA5MywgMjIsIDEsIDIyNywgMTM4LCA5MywgMjIsIDEsIDIzMywgMTg3LCA5MywgMjIsIDEsIAorICAgIDIyOSwgOTksIDkzLCAyMiwgMSwgMjIzLCAyMDgsIDkzLCAyMiwgMSwgMjI5LCA4OCwgOTMsIDIyLCAxLCAyMjQsIDEwNCwgCisgICAgOTMsIDIyLCAxLCAyMjMsIDIwNSwgOTMsIDIyLCAxLCAyMzgsIDIyLCA5MywgMjIsIDEsIDI1MCwgMjMwLCA5MywgMjIsIDEsIAorICAgIDIyMywgMjE1LCA5MywgMjIsIDEsIDI1MSwgMjksIDkzLCAyMiwgMSwgMjM2LCAxMjgsIDkzLCAyMiwgMSwgMjIyLCAwLCA5MywgCisgICAgMjIsIDEsIDIyOSwgMTI3LCA5MywgMjIsIDEsIDI0MywgMTA2LCA5MywgMjIsIDEsIDYwLCA5MywgMjIsIDEsIDI1NCwgMjM0LCAKKyAgICA5MywgMjIsIDEsIDE4NCwgOTMsIDIyLCAxLCAyMTgsIDY1LCA5MywgMjIsIDEsIDI0NiwgMTY4LCA5MywgMjIsIDEsIDczLCAKKyAgICA5MywgMjIsIDEsIDIxOCwgMTYsIDkzLCAyMiwgMSwgMjE4LCAyNSwgOTMsIDIyLCAxLCA3NCwgOTMsIDIyLCAxLCAyMTksIDcsIAorICAgIDkzLCAyMiwgMSwgMjE5LCA0LCA5MywgMjIsIDEsIDIzMCwgMTY3LCA5MywgMjIsIDEsIDIxNywgMjMxLCA5MywgMjIsIDEsIAorICAgIDY4LCA5MywgMjIsIDEsIDIxOCwgMjE5LCA5MywgMjIsIDEsIDIxOCwgMjI3LCA5MywgMjIsIDEsIDIxOCwgMjA0LCA5MywgCisgICAgMjIsIDEsIDIxNywgMjAwLCA5MywgMjIsIDEsIDI0NiwgMTE1LCA5MywgMjIsIDEsIDIxNywgMjUwLCA5MywgMjIsIDEsIDcyLCAKKyAgICAxMTAsIDI1MSwgODYsIDU1LCAxMTAsIDIyOSwgMTEsIDU1LCAxMTAsIDIxMiwgNTUsIDExMCwgMjM0LCAxMTUsIDExMCwgCisgICAgMjUyLCAxLCAxMzUsIDExMCwgMjE4LCAxOSwgNTUsIDExMCwgMjE4LCAxODIsIDU1LCA5MywgMjQ1LCAxMjIsIDE3MCwgMjE5LCAKKyAgICAxNTIsIDkzLCAxMjcsIDY1LCA5MywgMjIwLCA1MywgNjUsIDkzLCA5MCwgNjUsIDkzLCAyNDcsIDEzMCwgNjUsIDkzLCA4NCwgCisgICAgMjIzLCAyMjcsIDkzLCA2NywgMjUwLCAyMjEsIDIzNywgMTgwLCAyNTQsIDExMiwgMjU0LCAxMjgsIDIzNywgMTgwLCAyNTQsIAorICAgIDExMiwgMjI1LCA1NCwgMjM3LCAxODAsIDI1NCwgMTEyLCAyMjIsIDU2LCAyMzAsIDE3OCwgMjI3LCAxNzksIDI1MSwgNTUsIAorICAgIDIyNywgMTc5LCAyNTEsIDU1LCA1NywgNDksIDQsIDI1MywgMTg4LCA2MCwgNTcsIDQ5LCA0LCAyNTMsIDE1NywgNzMsIDU3LCAKKyAgICA0OSwgNCwgMjUzLCAxNjYsIDcyLCA1NywgNDksIDQsIDI1MywgMTM0LCA3NCwgNTcsIDQ5LCA0LCAyNTMsIDE4NCwgNjgsIAorICAgIDU3LCA0OSwgNCwgMjUzLCAyMDMsIDI0OSwgMjA3LCA1NywgNDksIDQsIDI1MywgMTUwLCAyNDksIDkyLCA1NywgNDksIDQsIAorICAgIDI1MywgMTkwLCAyNDksIDE1LCA1NywgNDksIDQsIDI1MywgMTgwLCAyNDgsIDE2NywgNTcsIDQ5LCA0LCAyNTMsIDE0NCwgCisgICAgMjQ3LCAxMTEsIDU3LCA0OSwgNCwgMjUzLCAxMzgsIDIzNywgMTIzLCA1NywgNDksIDQsIDI1MywgMTQ5LCAyMzcsIDExNCwgCisgICAgNTcsIDQ5LCA0LCAyNTMsIDE1OSwgMjM3LCA1OSwgNTcsIDQ5LCA0LCAyNTMsIDEzMCwgMjM3LCA0MywgNTcsIDQ5LCA0LCAKKyAgICAyNTMsIDExOCwgMTc1LCA1NywgNDksIDQsIDI1MywgMTUxLCAyMzYsIDE4NCwgNTcsIDQ5LCA0LCAyNTMsIDEyOCwgMjM2LCAKKyAgICAxMTMsIDU3LCA0OSwgNCwgMjUzLCAxMjUsIDIzNiwgNTcsIDU3LCA0OSwgNCwgMjUzLCAxMTQsIDIzNiwgNywgNTcsIDQ5LCAKKyAgICA0LCAyNTMsIDExNSwgMTk2LCA1NywgNDksIDQsIDI1MywgMTgxLCAyMzQsIDI1LCA1NywgNDksIDQsIDI1MywgMTIyLCAyMzMsIAorICAgIDE5NiwgNTcsIDQ5LCA0LCAyNTMsIDE3OSwgMjMzLCAxMzYsIDU3LCA0OSwgNCwgMjUzLCAxNzEsIDIzMywgOTksIDU3LCA0OSwgCisgICAgNCwgMjUzLCAxOTIsIDIwOCwgNTcsIDQ5LCA0LCAyNTMsIDE3MCwgMjMyLCAxNDEsIDU3LCA0OSwgNCwgMjUzLCAxNjQsIAorICAgIDIzMiwgNjIsIDU3LCA0OSwgNCwgMjUzLCAxNDMsIDIzMSwgMjA0LCA1NywgNDksIDQsIDI1MywgMTQwLCAyMzEsIDE0NCwgCisgICAgNTcsIDQ5LCA0LCAyNTMsIDE5OSwgMTg3LCA1NywgNDksIDQsIDI1MywgMTIzLCAyMjksIDE5OCwgNTcsIDQ5LCA0LCAyNTMsIAorICAgIDE1NiwgMjI5LCAxMDgsIDU3LCA0OSwgNCwgMjUzLCAxODMsIDIyOSwgMzcsIDU3LCA0OSwgNCwgMjUzLCAxNDUsIDIyOCwgCisgICAgMjAyLCA1NywgNDksIDQsIDI1MywgMTc4LCAyMjgsIDE1NSwgNTcsIDQ5LCA0LCAyNTMsIDExNywgMjI4LCAxMzYsIDU3LCAKKyAgICA0OSwgNCwgMjUzLCAxNzMsIDIyOCwgMTIxLCA1NywgNDksIDQsIDI1MywgMTYyLCAyMjgsIDExMCwgNTcsIDQ5LCA0LCAyNTMsIAorICAgIDEzNSwgMjAzLCA1NywgNDksIDQsIDI1MywgMTY3LCAyMjcsIDIxNiwgNTcsIDQ5LCA0LCAyNTMsIDE0MiwgMjI3LCAxNDcsIAorICAgIDU3LCA0OSwgNCwgMjUzLCAyMDEsIDIyNywgNzUsIDU3LCA0OSwgNCwgMjUzLCAxNjgsIDIyNywgMjIsIDU3LCA0OSwgNCwgCisgICAgMjUzLCAxNjMsIDIyNiwgMTc3LCA1NywgNDksIDQsIDI1MywgMTg2LCAyMjYsIDk0LCA1NywgNDksIDQsIDI1MywgMTU0LCAKKyAgICAyMjQsIDE0MCwgNTcsIDQ5LCA0LCAyNTMsIDE4MiwgMjI0LCAyNiwgNTcsIDQ5LCA0LCAyNTMsIDEzNywgMjIzLCAxMDMsIAorICAgIDU3LCA0OSwgNCwgMjUzLCAxMzYsIDIyMiwgMTU1LCA1NywgNDksIDQsIDI1MywgMTk3LCAyMjIsIDg3LCA1NywgNDksIDQsIAorICAgIDI1MywgMTU4LCAyMjEsIDIwNSwgNTcsIDQ5LCA0LCAyNTMsIDE5NSwgMTAxLCA1NywgNDksIDQsIDI1MywgMTI2LCAyMjEsIAorICAgIDAsIDU3LCA0OSwgNCwgMjUzLCAxNDEsIDIxOSwgNywgNTcsIDQ5LCA0LCAyNTMsIDEyMCwgMjE4LCAyMjcsIDU3LCA0OSwgNCwgCisgICAgMjUzLCAxNTUsIDIxOCwgMjA0LCA1NywgNDksIDQsIDI1MywgMTUzLCAyMTgsIDE4NywgNTcsIDQ5LCA0LCAyNTMsIDE3NywgCisgICAgMjE3LCAxMTQsIDU3LCA0OSwgNCwgMjUzLCAxMjEsIDIxNywgOTIsIDU3LCA0OSwgNCwgMjUzLCAxNzQsIDIxNywgMjEsIDU3LCAKKyAgICA0OSwgNCwgMjUzLCAxNjksIDI1NSwgNjAsIDU3LCA0OSwgNCwgMjUzLCAxNTIsIDI1NSwgNTksIDU3LCA0OSwgNCwgMjUzLCAKKyAgICAxMTEsIDI1MywgMjMyLCA1NywgNDksIDQsIDI1MywgMTI0LCAyNDcsIDgyLCA1NywgNDksIDQsIDI1MywgMTA3LCAyNDcsIAorICAgIDgxLCA1NywgNDksIDQsIDI1MywgMTQ3LCAyMzEsIDg1LCA1NywgNDksIDQsIDI1MywgMTY1LCAyMjgsIDIwMSwgNTcsIDQ5LCAKKyAgICA0LCAyNTMsIDEzMywgMjI4LCAyMDQsIDU3LCA0OSwgNCwgMjUzLCAxMTksIDIyOCwgMiwgNTcsIDQ5LCA0LCAyNTMsIDE2MSwgCisgICAgMjI4LCAxLCA1NywgNDksIDQsIDI1MywgMTI3LCAyMjcsIDc0LCA1NywgNDksIDQsIDI1MywgMTI5LCAyMjIsIDE1MywgNTcsIAorICAgIDQ5LCA0LCAyNTMsIDEwOSwgMjIwLCAyMjMsIDU3LCA0OSwgNCwgMjUzLCAxMDYsIDEwMywgNTcsIDQ5LCAxNiwgMjUzLCAKKyAgICAxNzYsIDU3LCA0OSwgMTYsIDI1MywgMTc1LCA1NywgNDksIDE2LCAyNTMsIDE3MiwgNTcsIDQ5LCAxNiwgMjUzLCAxNjAsIAorICAgIDU3LCA0OSwgMTYsIDI1MywgMTQ4LCA1NywgNDksIDE2LCAyNTMsIDE0NiwgNTcsIDQ5LCAxNiwgMjUzLCAxMzksIDU3LCA0OSwgCisgICAgMTYsIDI1MywgMTMyLCA1NywgNDksIDE2LCAyNTMsIDEzMSwgNTcsIDQ5LCAxNiwgMjUzLCAxMTYsIDU3LCA0OSwgMTYsIAorICAgIDI1MywgMTEzLCA1NywgNDksIDE2LCAyNTMsIDExMiwgNTcsIDQ5LCAxNiwgMjUzLCAxMTAsIDU3LCA0OSwgMTYsIDI1MywgCisgICAgMTA4LCA1NywgNDksIDk3LCAyNTMsIDEwNSwgMjM0LCA4NiwgNTcsIDQ5LCA5NywgMjUzLCAxMDQsIDIxOCwgMTgzLCA1NywgCisgICAgNDksIDk3LCAyNTMsIDEwMywgMjQ5LCA4MCwgNTcsIDQ5LCA5NywgMjUzLCAxMDIsIDI0NiwgMTUxLCA1NywgNDksIDk3LCAKKyAgICAyNTMsIDEwMSwgMjM0LCA2OCwgNTcsIDQ5LCA5NywgMjUzLCAxMDAsIDIyMywgMTYyLCA1NywgNDksIDk3LCAyNTMsIDk5LCAKKyAgICAyNDYsIDEwMCwgNTcsIDQ5LCA5NywgMjUzLCA5OCwgMjI3LCAyMzksIDU3LCA0OSwgOTcsIDI1MywgOTcsIDIyNCwgMjQ1LCAKKyAgICA1NywgNDksIDk3LCAyNTMsIDk2LCAyNDMsIDE2MSwgNTcsIDQ5LCA5NywgMjUzLCA5NSwgMjI0LCA0LCA1NywgNDksIDk3LCAKKyAgICAyNTMsIDk0LCAyNTIsIDM5LCA1NywgNDksIDk3LCAyNTMsIDkzLCAyNTAsIDExMCwgNTcsIDQ5LCA5NywgMjUzLCA5MiwgCisgICAgMjUxLCAyNDMsIDU3LCA0OSwgOTcsIDI1MywgOTEsIDIxOCwgMjEyLCA1NywgNDksIDk3LCAyNTMsIDkwLCAyNTIsIDE5OCwgCisgICAgNTcsIDQ5LCA5NywgMjUzLCA4OSwgMjMwLCAxNDcsIDU3LCA0OSwgOTcsIDI1MywgODgsIDIyMywgMjQ0LCA1NywgNDksIDk3LCAKKyAgICAyNTMsIDg3LCAyNTAsIDU0LCA1NywgNDksIDIzMywgMTI1LCAyNTMsIDg2LCAyMzYsIDIyMywgNTcsIDQ5LCAyMzMsIDEyNSwgCisgICAgMjUzLCA4NSwgMjM2LCAyMzEsIDU3LCA0OSwgOTcsIDI1MywgODQsIDIzMCwgMTU3LCA1NywgNDksIDk3LCAyNTMsIDgzLCAKKyAgICAyMTgsIDE5MiwgNTcsIDQ5LCA5NywgMjUzLCA4MiwgNTcsIDQ5LCAyMzMsIDEyNSwgMjUzLCA4MSwgMjU0LCA0NCwgNTcsIAorICAgIDQ5LCAyMzMsIDEyNSwgMjUzLCA4MCwgMjMzLCAyNDcsIDU3LCA0OSwgOTcsIDI1MywgNzksIDI1MiwgMCwgNTcsIDQ5LCA5NywgCisgICAgMjUzLCA3OCwgMjQ0LCA2MiwgNTcsIDQ5LCA5NywgMjUzLCA3NywgNTcsIDQ5LCA5NywgMjUzLCA3NiwgMjE4LCAxNzcsIDU3LCAKKyAgICA0OSwgOTcsIDI1MywgNzUsIDU3LCA0OSwgOTcsIDI1MywgNzQsIDU3LCA0OSwgOTcsIDI1MywgNzMsIDI0MiwgMTg5LCA1NywgCisgICAgNDksIDk3LCAyNTMsIDcyLCA1NywgNDksIDk3LCAyNTMsIDcxLCA1NywgNDksIDk3LCAyNTMsIDcwLCA1NywgNDksIDIzMywgCisgICAgMTI1LCAyNTMsIDY4LCAyMjAsIDIzNSwgNTcsIDQ5LCA5NywgMjUzLCA2NywgNTcsIDQ5LCA5NywgMjUzLCA2NiwgNTcsIDQ5LCAKKyAgICA5NywgMjUzLCA2NSwgMjUwLCAxOTIsIDU3LCA0OSwgOTcsIDI1MywgNjQsIDU3LCA0OSwgOTcsIDI1MywgNjMsIDU3LCA0OSwgCisgICAgOTcsIDI1MywgNjIsIDI0NCwgMjE4LCA1NywgNDksIDk3LCAyNTMsIDYxLCAyNTQsIDMxLCA1NywgNDksIDk3LCAyNTMsIDYwLCAKKyAgICA1NywgNDksIDk3LCAyNTMsIDU5LCA1NywgNDksIDk3LCAyNTMsIDU4LCA1NywgNDksIDk3LCAyNTMsIDU3LCA1NywgNDksIAorICAgIDk3LCAyNTMsIDU2LCA1NywgNDksIDk3LCAyNTMsIDU1LCA1NywgNDksIDk3LCAyNTMsIDU0LCA1NywgNDksIDk3LCAyNTMsIAorICAgIDUzLCA1NywgNDksIDk3LCAyNTMsIDUyLCA1NywgNDksIDk3LCAyNTMsIDUxLCAyMzMsIDEyMCwgNTcsIDQ5LCA5NywgMjUzLCAKKyAgICA1MCwgNTcsIDQ5LCA5NywgMjUzLCA0OSwgMjIxLCA5OCwgNTcsIDQ5LCA5NywgMjUzLCA0OCwgNTcsIDQ5LCA5NywgMjUzLCAKKyAgICA0NywgNTcsIDQ5LCA5NywgMjUzLCA0NiwgNTcsIDQ5LCA5NywgMjUzLCA0NSwgNTcsIDQ5LCA5NywgMjUzLCA0NCwgNTcsIAorICAgIDQ5LCA5NywgMjUzLCA0MywgNTcsIDQ5LCA5NywgMjUzLCA0MiwgNTcsIDQ5LCA5NywgMjUzLCA0MSwgNTcsIDQ5LCA5NywgCisgICAgMjUzLCA0MCwgNTcsIDQ5LCA5NywgMjUzLCAzOSwgNTcsIDQ5LCA5NywgMjUzLCAzOCwgNTcsIDQ5LCA5NywgMjUzLCAzNywgCisgICAgMjQzLCAxNDAsIDU3LCA0OSwgOTcsIDI1MywgMTYsIDI0NSwgMTMxLCA1NywgNDksIDk3LCAyNTMsIDEzLCAyNTIsIDE4MiwgCisgICAgNTcsIDQ5LCA5NywgMjUzLCA4LCAyMjMsIDI0OSwgNTcsIDQ5LCA5NywgMjUzLCA3LCA2NSwgNTcsIDQ5LCA5NywgMjUzLCA2LCAKKyAgICA1NywgNDksIDk3LCAyNTMsIDUsIDIyMywgMjUsIDU3LCA0OSwgOTcsIDI1MywgNCwgNTcsIDQ5LCA5NywgMjUzLCAzLCA1NywgCisgICAgNDksIDk3LCAyNTMsIDIsIDIxOCwgMjA4LCAyNTEsIDUyLCA1NywgNDksIDk3LCAyNTMsIDEsIDI1MSwgNTIsIDU3LCA0OSwgCisgICAgOTcsIDI1MywgMCwgMjUxLCA1MywgMjQ1LCAxMDUsIDU3LCA0OSwgOTcsIDI1MiwgMjU1LCAyMTgsIDIxMCwgNTcsIDQ5LCAKKyAgICA5NywgMjUyLCAyNTQsIDU3LCA0OSwgOTcsIDI1MiwgMjUzLCA1NywgNDksIDIzMywgMTI1LCAyNTIsIDI1MiwgMjQ4LCAyMTEsIAorICAgIDU3LCA0OSwgOTcsIDI1MiwgMjUxLCA1NywgNDksIDk3LCAyNTIsIDI1MCwgNTcsIDQ5LCA5NywgMjUyLCAyNDgsIDU3LCA0OSwgCisgICAgOTcsIDI1MiwgMjQ3LCA1NywgNDksIDk3LCAyNTIsIDI0NiwgNTcsIDQ5LCA5NywgMjUyLCAyNDUsIDI0OSwgMTQ5LCA1NywgCisgICAgNDksIDk3LCAyNTIsIDI0NCwgNTcsIDQ5LCA5NywgMjUyLCAyNDMsIDU3LCA0OSwgOTcsIDI1MiwgMjQyLCA1NywgNDksIDk3LCAKKyAgICAyNTIsIDI0MSwgNTcsIDQ5LCA5NywgMjUyLCAyNDAsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgNjksIDU3LCA0OSwgOTcsIAorICAgIDIxOSwgOTksIDI1MywgMzYsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMzUsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgCisgICAgMzQsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMzMsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMzIsIDU3LCA0OSwgCisgICAgOTcsIDIxOSwgOTksIDI1MywgMzEsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMzAsIDU3LCA0OSwgOTcsIDIxOSwgOTksIAorICAgIDI1MywgMjksIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjgsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjcsIDU3LCAKKyAgICA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjYsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjUsIDU3LCA0OSwgOTcsIDIxOSwgCisgICAgOTksIDI1MywgMjQsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjMsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjIsIAorICAgIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjEsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMjAsIDU3LCA0OSwgOTcsIAorICAgIDIxOSwgOTksIDI1MywgMTksIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMTgsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgCisgICAgMTcsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMTUsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMTQsIDU3LCA0OSwgCisgICAgOTcsIDIxOSwgOTksIDI1MywgMTIsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgMTEsIDU3LCA0OSwgOTcsIDIxOSwgOTksIAorICAgIDI1MywgMTAsIDU3LCA0OSwgOTcsIDIxOSwgOTksIDI1MywgOSwgNTcsIDQ5LCA5NywgMjE5LCA5OSwgMjUyLCAyNDksIDU3LCAKKyAgICA0OSwgOTcsIDIxOSwgOTksIDI1MiwgMjM5LCAyNTQsIDIyNywgMjE4LCAxNzQsIDIyNSwgNTUsIDIzNSwgNDMsIDI1NCwgCisgICAgMjI3LCAyMTgsIDE3NCwgMjI1LCA1NSwgMjQ4LCAxNDUsIDI1NCwgMjI3LCAyNTEsIDQ1LCA3OCwgMjU0LCAyMjcsIDU0LCAKKyAgICAxMDcsIDI1NCwgMjI3LCA1NCwgMTAzLCAyNTQsIDIyNywgNTQsIDE2MCwgMjU0LCAyMjcsIDU0LCAxNTQsIDI1NCwgMjI3LCAKKyAgICA1NCwgMTc0LCAyNTQsIDIyNywgNTQsIDE4MiwgMjU0LCAyMjcsIDU0LCAxOTEsIDI1NCwgMjI3LCA1NCwgMTg1LCAyNTQsIAorICAgIDIyNywgNTQsIDE5MCwgMjU0LCAyMjcsIDU0LCAyMjIsIDY1LCAyNTQsIDIyNywgNTQsIDIyMCwgMjE5LCAyNTQsIDIyNywgCisgICAgNTQsIDIyMSwgMjQ1LCAyNTQsIDIyNywgNTQsIDI0NSwgMTE5LCAyNTQsIDIyNywgNTQsIDI0NSwgMTk2LCAyNTQsIDIyNywgCisgICAgNTQsIDIyNCwgNjksIDI1NCwgMjI3LCA1NCwgMjI1LCAzOCwgMjU0LCAyMjcsIDU0LCAyNDYsIDIyNywgMjU0LCAyMjcsIDU0LCAKKyAgICAyMzIsIDI3LCAyNTQsIDIyNywgNTQsIDEzMSwgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMTI0LCAyNDIsIDE2MSwgMjU0LCAKKyAgICAyMjcsIDU0LCAxNDgsIDI0MiwgMTYxLCAyNTQsIDIyNywgNTQsIDI0NSwgMTE2LCAyNDIsIDE2MSwgMjU0LCAyMjcsIDU0LCAKKyAgICAyNDUsIDE3MCwgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMjI0LCA4MiwgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMjI1LCAKKyAgICA0MywgMjQyLCAxNjEsIDI1NCwgMjI3LCA1NCwgMjQ2LCAyMzUsIDI0MiwgMTYxLCAyNTQsIDIyNywgNTQsIDIzMiwgMzEsIAorICAgIDI0MiwgMTYxLCAyNTQsIDIyNywgNTQsIDEzMSwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMTI0LCAyMjEsIDIzMSwgMjU0LCAKKyAgICAyMjcsIDU0LCAxNDgsIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDI0NSwgMTE2LCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAKKyAgICAyNDUsIDE3MCwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjI0LCA4MiwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjI1LCAKKyAgICA0MywgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjQ2LCAyMzUsIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDIzMiwgMzEsIAorICAgIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDIyMiwgNjYsIDIyMSwgMjMxLCAyNTQsIDIyNywgNTQsIDIyMCwgMjIwLCAyMjEsIAorICAgIDIzMSwgMjU0LCAyMjcsIDU0LCAyMjEsIDI0NiwgMjIxLCAyMzEsIDI1NCwgMjI3LCA1NCwgMjQ1LCAxMjAsIDIyMSwgMjMxLCAKKyAgICAyNTQsIDIyNywgNTQsIDI0NSwgMTk3LCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyMjQsIDcwLCAyMjEsIDIzMSwgMjU0LCAKKyAgICAyMjcsIDU0LCAyMjUsIDM5LCAyMjEsIDIzMSwgMjU0LCAyMjcsIDU0LCAyNDYsIDIyOCwgMjIxLCAyMzEsIDI1NCwgMjI3LCAKKyAgICA1NCwgMjMyLCAyOCwgMjIxLCAyMzEsIDI1NCwgMjI3LCAyMTgsIDIyMiwgMjUyLCAxOTAsIDIyMCwgNzIsIDI1NCwgMjI3LCAKKyAgICAyMTgsIDIyMiwgMjQ1LCAxNzgsIDIyMywgODgsIDI1NCwgMjI3LCAyMTgsIDIyMiwgMjI2LCA5MCwgMjIzLCA4OCwgMjU0LCAKKyAgICAyMjcsIDIxOCwgMjIyLCAyMjEsIDI1MiwgMjIzLCA4OCwgMjU0LCAyMjcsIDIxOCwgMjIyLCAyNDUsIDExMCwgMjIzLCA4OCwgCisgICAgMjU0LCAyMjcsIDI0NywgMTE0LCAyMzQsIDI0LCAyNDUsIDE3OCwgMjIzLCA4OCwgMjU0LCAyMjcsIDIzNSwgMzEsIDIzNCwgCisgICAgMjQsIDI0NSwgMTc4LCAyMjMsIDg4LCAyNTQsIDIyNywgMjM0LCAyNCwgMjI2LCA5MCwgMjIzLCA4OCwgMjU0LCAyMjcsIAorICAgIDIzNCwgMjQsIDIyMSwgMjUyLCAyMjMsIDg4LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAxMzEsIDIyOCwgODksIDIzLCAKKyAgICAyNTQsIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjQzLCAxOTQsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjQ3LCAxMjYsIAorICAgIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDE3NCwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMjQ1LCAxOTYsIDIzLCAyNTQsIAorICAgIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTcwLCAyNDIsIDE2MSwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMjQ1LCAxNzAsIDIyMSwgCisgICAgMjMxLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE5NywgMjIxLCAyMzEsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIAorICAgIDI0NSwgMTcwLCAyMjIsIDEyNiwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMjIyLCA2NiwgMjIyLCAxMjYsIDIzLCAyNTQsIAorICAgIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTk3LCAyMjIsIDEyNiwgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMTMxLCAyNDIsIDE2MiwgCisgICAgMjIyLCAxMjYsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDI0NSwgMTcwLCAyNDIsIDE2MiwgMjIyLCAxMjYsIDIzLCAyNTQsIAorICAgIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjIxLCAyMzIsIDIyMiwgMTI2LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE3MCwgCisgICAgMjIxLCAyMzIsIDIyMiwgMTI2LCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE3MCwgMjIzLCAxNTMsIDIzLCAyNTQsIAorICAgIDI1MSwgMjUzLCAyMzQsIDIyMiwgNjYsIDIyMywgMTUzLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyNDUsIDE5NywgMjIzLCAKKyAgICAxNTMsIDIzLCAyNTQsIDI1MSwgMjUzLCAyMzQsIDEzMSwgMjQyLCAxNjIsIDIyMywgMTUzLCAyMywgMjU0LCAyNTEsIDI1MywgCisgICAgMjM0LCAyNDUsIDE3MCwgMjQyLCAxNjIsIDIyMywgMTUzLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAxMzEsIDIyMSwgMjMyLCAKKyAgICAyMjMsIDE1MywgMjMsIDI1NCwgMjUxLCAyNTMsIDIzNCwgMjIyLCA2NiwgMjIxLCAyMzIsIDIyMywgMTUzLCAyMywgMjU0LCAKKyAgICAyNTEsIDI1MywgMjM0LCAyNDUsIDE5NywgMjIxLCAyMzIsIDIyMywgMTUzLCAyMywgMjU0LCAyNTEsIDI1MywgMjM0LCAyMjIsIAorICAgIDY2LCAyMzMsIDEzOSwgMjMsIDI1NCwgMjUxLCAyNDMsIDEzNCwgMTMxLCAyMjksIDQ5LCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgCisgICAgMTA3LCAyMywgMjU0LCAyNTEsIDI0MywgMTMyLCAxMDcsIDIzLCAyNTQsIDI1MSwgMjQ2LCAxNTksIDEwMywgMjMsIDI1NCwgCisgICAgMjUxLCAyMjIsIDgsIDEwMywgMjMsIDI1NCwgMjUxLCAyNTAsIDUxLCAxMjQsIDI0NywgMTI1LCAyMywgMjU0LCAyNTEsIAorICAgIDI0NiwgMTU5LCAxMjQsIDI0NywgMTI1LCAyMywgMjU0LCAyNTEsIDIyMSwgNzEsIDE3NCwgMjMsIDI1NCwgMjUxLCAyMjEsIAorICAgIDcxLCAyMjIsIDY1LCAyMywgMjU0LCAyNTEsIDIyMSwgNzEsIDIyMiwgNjYsIDI1NCwgMTQ0LCAxNywgMjMsIDI1NCwgMjUxLCAKKyAgICAyNDMsIDEzMiwgMjIyLCA2NSwgMjMsIDI1NCwgMjUxLCAyMzMsIDI0MCwgMjIyLCA2NSwgMjMsIDI1NCwgMjUxLCAyMjIsIDgsIAorICAgIDIyMiwgNjUsIDIzLCAyNTQsIDI1MSwgMjIyLCA4LCAyMjEsIDI0NSwgMjMsIDI1NCwgMjUxLCAyMjEsIDcxLCAyNDUsIDE5NiwgCisgICAgMjMsIDI1NCwgMjUxLCAyMjEsIDcxLCAyNDUsIDE5NywgMjU0LCAxNDQsIDE3LCAyMywgMjU0LCAyNTEsIDI0MywgMTMyLCAKKyAgICAyNDUsIDE5NiwgMjMsIDI1NCwgMjUxLCAyMjIsIDgsIDI0NSwgMTk2LCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgMTMxLCAyNDIsIAorICAgIDE2MSwgMjMsIDI1NCwgMjUxLCAyMjIsIDgsIDE0OCwgMjQyLCAxNjEsIDIzLCAyNTQsIDI1MSwgMjQ2LCAxNTksIDI0NSwgCisgICAgMTcwLCAyNDIsIDE2MSwgMjMsIDI1NCwgMjUxLCAyMjEsIDcxLCAyNDUsIDE3MCwgMjQyLCAxNjEsIDIzLCAyNTQsIDI1MSwgCisgICAgMjIyLCA4LCAyNDUsIDE3MCwgMjQyLCAxNjEsIDIzLCAyNTQsIDI1MSwgMjUxLCAxMjYsIDI0NSwgMTcwLCAyNDIsIDE2MSwgCisgICAgMjMsIDI1NCwgMjUxLCAyMzIsIDIwMCwgMjQ1LCAxNzAsIDI0MiwgMTYxLCAyMywgMjU0LCAyNTEsIDIyMiwgOCwgMTMxLCAKKyAgICAyMjEsIDIzMSwgMjMsIDI1NCwgMjUxLCAyMjIsIDgsIDI0NSwgMTcwLCAyMjEsIDIzMSwgMjMsIDI1NCwgMjUxLCAyNDksIAorICAgIDY1LCAyNDUsIDE3MCwgMjMzLCAxMzksIDIzLCAyNTQsIDI1MSwgMjIzLCAxMjcsIDI0NSwgMTk3LCAyMzMsIDEzOSwgMjMsIAorICAgIDEzMSwgMTQ0LCA1NSwgMjMsIDEzMSwgMTQ0LCA1LCAyNTQsIDE0NCwgMTcsIDIzLCAxMjQsIDIyMSwgMjUwLCA1NSwgMjMsIAorICAgIDE0OCwgMjI4LCA4OCwgNTUsIDIzLCAyMTgsIDIzLCA1NSwgMjMsIDIyMiwgMTI3LCA1NSwgMjMsIDI0NywgMTI3LCA1NSwgCisgICAgMjMsIDIzMCwgMTc1LCA1NSwgMjMsIDEyNCwgMjMwLCAxNzQsIDU1LCAyMywgMTQ4LCAyMzAsIDE3NCwgNTUsIDIzLCAyNDUsIAorICAgIDExNiwgMjMwLCAxNzQsIDU1LCAyMywgMjQ1LCAxNzAsIDIzMCwgMTc0LCA1NSwgMjMsIDIzMywgMjM1LCA1NSwgMjMsIDIzNSwgCisgICAgMjEwLCAyNTIsIDE5MCwgNTUsIDIzLCAyMzUsIDI2LCA1NSwgMjMsIDIzMCwgODQsIDU1LCAyMywgMjE4LCAxMzIsIDU1LCAKKyAgICAyMywgMjU0LCAxNiwgNTUsIDIzLCAyNTQsIDI3LCA1NSwgMjMsIDI0NCwgNDIsIDU1LCAyMywgMjIxLCA1OCwgMjUyLCAxOTAsIAorICAgIDU1LCAyMywgMjE3LCA4NSwgNTUsIDIyNywgNjgsIDIyNSwgMzUsIDU1LCAyMjcsIDY4LCAyMjAsIDgzLCA1NSwgMjI3LCA2OCwgCisgICAgMjI1LCA1OSwgNTUsIDIyNywgNjgsIDIyNSwgMzMsIDU1LCAyMjcsIDY4LCAyNDgsIDIyNiwgMjI1LCAzMywgNTUsIDIyNywgCisgICAgNjgsIDIyNCwgMTIwLCA1NSwgMjI3LCA2OCwgMjQ5LCA2MSwgNTUsIDIyNywgNjgsIDIyOCwgNzYsIDU1LCAyMjcsIDY4LCAKKyAgICAyMjUsIDQ3LCA1NSwgMjI3LCA2OCwgMjQ3LCA5MywgNTUsIDIyNywgNjgsIDI1NCwgMTQsIDU1LCAyMjcsIDY4LCAyNTEsIAorICAgIDgxLCA1NSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjksIDE5MiwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjksIDQ0LCAKKyAgICAyNDMsIDE1OSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjIsIDEwOSwgMjQzLCAxNTksIDIyOSwgMTM3LCAyNDgsIDIwNSwgCisgICAgNSwgMjUxLCAxMzksIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjUxLCAyNCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMTgsIAorICAgIDE4MywgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDMsIDE0MCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDQsIDIxMCwgCisgICAgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjEsIDIwNCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCA2NSwgMjI5LCAxMzcsIAorICAgIDI0OCwgMjA1LCA1LCAyNTIsIDI0LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIyNCwgMjE4LCAyMjksIDEzNywgMjQ4LCAKKyAgICAyMDUsIDUsIDI1MCwgMTg3LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIzNCwgODUsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgCisgICAgMjM0LCA0OCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjYsIDEyMiwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMzUsIDY0LCAKKyAgICAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI1MiwgMzMsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjUxLCAxMjksIDIyOSwgNTEsIAorICAgIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjQ4LCAxNTYsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjUwLCAxNzIsIDIyOSwgCisgICAgMTM3LCAyNDgsIDIwNSwgNSwgMjI0LCA1MCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTAsIDE3MywgMjI5LCAxMzcsIAorICAgIDI0OCwgMjA1LCA1LCAyNTIsIDEzNCwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjQsIDIwNiwgMjI5LCAxMzcsIDI0OCwgCisgICAgMjA1LCA1LCAyNDIsIDE4OSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDMsIDExMSwgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAKKyAgICAyNTEsIDI0MCwgMjM1LCAxMDYsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjUxLCAxMjQsIDIyOSwgMTM3LCAyNDgsIDIwNSwgCisgICAgNSwgMjI3LCAyMzksIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjQ3LCAxMywgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNDcsIAorICAgIDEzMywgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjAsIDI0NywgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyNTIsIDEzNywgCisgICAgMjI5LCAxMzcsIDI0OCwgMjA1LCA1LCAyMjksIDUyLCAyMjEsIDk4LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIxOSwgODQsIAorICAgIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjI5LCAyNDQsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMjI3LCA2MiwgMjI5LCAKKyAgICAxMzcsIDI0OCwgMjA1LCA1LCAyMzUsIDUyLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDIzMCwgNjksIDI1MiwgMjMzLCAyMjksIAorICAgIDEzNywgMjQ4LCAyMDUsIDUsIDI0NSwgMTQzLCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDI0NCwgMzgsIDIyOSwgMTM3LCAKKyAgICAyNDgsIDIwNSwgNSwgMjIzLCAxMjgsIDIyOSwgMTM3LCAyNDgsIDIwNSwgNSwgMywgMjUzLCAyMTMsIDIyOSwgMTM3LCAyNDgsIAorICAgIDIwNSwgNSwgMjE4LCAyMzUsIDI1MiwgMjA2LCAyMjksIDEzNywgMjQ4LCAyMDUsIDUsIDM2LCAyMzAsIDE3NywgOTIsIDIzNCwgCisgICAgMTk3LCAxLCA2MCwgMjM0LCAxOTcsIDEsIDczLCAyMzQsIDE5NywgMSwgMjUzLCAyMDQsIDIzNCwgMTk3LCAxLCAyNTIsIDk1LCAKKyAgICAyMzQsIDE5NywgMSwgMjQ1LCA2NywgMjM0LCAxOTcsIDEsIDI1MCwgNDYsIDIzNCwgMTk3LCAxLCA3MiwgMjM0LCAxOTcsIDEsIAorICAgIDIxOSwgNDAsIDIzNCwgMTk3LCAxLCAyMTcsIDE1NywgMjM0LCAxOTcsIDEsIDIyMiwgMzcsIDIzNCwgMTk3LCAxLCAyMzcsIAorICAgIDEyNiwgMjM0LCAxOTcsIDEsIDIzNywgMTcsIDIzNCwgMTk3LCAxLCAyMjgsIDE2MywgMjM0LCAxOTcsIDEsIDE1MywgMjM0LCAKKyAgICAxOTcsIDEsIDE4OSwgMjM0LCAxOTcsIDEsIDIwNywgMjM0LCAxOTcsIDEsIDIzMywgMTQwLCAyMzQsIDE5NywgMSwgMjMxLCAKKyAgICAyMTgsIDIzNCwgMTk3LCAxLCA2OCwgMjM0LCAxOTcsIDEsIDIzMCwgNTksIDIzNCwgMTk3LCAxLCAyMzYsIDc1LCAyMzQsIAorICAgIDE5NywgMSwgMTUyLCAyMzQsIDE5NywgMSwgMTk4LCAyMzQsIDE5NywgMSwgMjIyLCAyMDEsIDIzNCwgMTk3LCAxLCAyMjEsIAorICAgIDMyLCAyMzQsIDE5NywgMSwgMjU0LCAxMzEsIDIzNCwgMTk3LCAxLCAyNDYsIDE5NywgMjM0LCAxOTcsIDEsIDI0MywgMjI1LCAKKyAgICAyMzQsIDE5NywgMSwgMjE4LCAxNTEsIDI1MSwgMTMzLCAxLCA2MCwgMjUxLCAxMzMsIDEsIDIzMCwgNDUsIDI1MSwgMTMzLCAKKyAgICAxLCAyNTAsIDQ2LCAyNTEsIDEzMywgMSwgMTUzLCAyNTEsIDEzMywgMSwgMjIwLCAyMSwgMjUxLCAxMzMsIDEsIDE1MiwgCisgICAgMjUxLCAxMzMsIDEsIDIzNSwgMTI2LCAyNTEsIDEzMywgMSwgMjU1LCA2MCwgMjUxLCAxMzMsIDEsIDIyOCwgMTYzLCAyNTEsIAorICAgIDEzMywgMSwgMjUzLCAyMDQsIDI1MSwgMTMzLCAxLCAxODksIDI1MSwgMTMzLCAxLCA3NCwgMjUxLCAxMzMsIDEsIDI0OSwgCisgICAgMjA5LCAyNTEsIDEzMywgMSwgMjIyLCAyMDEsIDI1MSwgMTMzLCAxLCAyMjUsIDI3LCAyNTEsIDEzMywgMSwgMjI1LCAyNiwgCisgICAgMjUxLCAxMzMsIDEsIDE5OCwgMjUxLCAxMzMsIDEsIDI1MSwgMjAxLCAyNTEsIDEzMywgMSwgNjgsIDI1MSwgMTMzLCAxLCAKKyAgICAyMzEsIDIxOCwgMjUxLCAxMzMsIDEsIDIxOCwgMTUxLCAyNTEsIDEzMywgMSwgMjA3LCAyNTEsIDEzMywgMSwgMjIxLCAzMSwgCisgICAgMjUxLCAxMzMsIDEsIDIzMCwgNTksIDI1MSwgMTMzLCAxLCAyMjMsIDIxOSwgMjUxLCAxMzMsIDEsIDcyLCAyNTEsIDEzMywgCisgICAgMSwgNzMsIDI1MSwgMTMzLCAxLCAyMjAsIDE4LCAyNTEsIDEzMywgMSwgMjM3LCAxNywgMjUxLCAxMzMsIDEsIDIzNywgOCwgCisgICAgMjUxLCAxMzMsIDEsIDIzMiwgMTcwLCAyNTEsIDEzMywgMSwgMjIwLCAyMywgMjUxLCAxMzMsIDEsIDI0NSwgNjcsIDI1MSwgCisgICAgMTMzLCAxLCAyNDUsIDIsIDI1MSwgMTMzLCAxLCAyMjMsIDE2OCwgMjUxLCAxMzMsIDEsIDIyMywgMTY3LCAyNTEsIDEzMywgCisgICAgMSwgMjMyLCAxMTcsIDI1MSwgMTMzLCAxLCAyMzcsIDI1NSwgMjUxLCAxMzMsIDEsIDI1MSwgMjAwLCAyNTEsIDEzMywgMSwgCisgICAgMjIxLCAzMiwgMjUxLCAxMzMsIDEsIDIyMCwgMjAsIDI1MSwgMTMzLCAxLCAyMjcsIDUzLCAyNTEsIDEzMywgMSwgMjM0LCAKKyAgICA0MSwgMjUxLCAxMzMsIDEsIDIzNCwgNDAsIDI1MSwgMTMzLCAxLCAyMzQsIDM5LCAyNTEsIDEzMywgMSwgMjM0LCAzOCwgCisgICAgMjUxLCAxMzMsIDEsIDIzNSwgMTI1LCAyNTEsIDEzMywgMSwgMjQ3LCAxNywgMjUxLCAxMzMsIDEsIDIyMCwgMTksIDQ4LCAKKyAgICAzMCwgMSwgNjAsIDQ4LCAzMCwgMSwgMjUyLCAxNDQsIDQ4LCAzMCwgMSwgMjM2LCAxODQsIDQ4LCAzMCwgMSwgMjQ5LCA5MiwgCisgICAgNDgsIDMwLCAxLCA3MywgNDgsIDMwLCAxLCAyMTksIDE2NSwgNDgsIDMwLCAxLCAyMTcsIDkyLCA0OCwgMzAsIDEsIDI0MywgCisgICAgMTYyLCA0OCwgMzAsIDEsIDIyMiwgMjIsIDQ4LCAzMCwgMSwgNzIsIDQ4LCAzMCwgMSwgMTc1LCA0OCwgMzAsIDEsIDI0NiwgCisgICAgMjE3LCA0OCwgMzAsIDEsIDI0NiwgMjA1LCA0OCwgMzAsIDEsIDI0NiwgMTk3LCA0OCwgMzAsIDEsIDI0NiwgMTMzLCA0OCwgCisgICAgMzAsIDEsIDc0LCA0OCwgMzAsIDEsIDIyOSwgMTk4LCA0OCwgMzAsIDEsIDIyNCwgMjQ2LCA0OCwgMzAsIDEsIDIzNiwgNywgCisgICAgNDgsIDMwLCAxLCAyNDYsIDE0OCwgNDgsIDMwLCAxLCAyNDYsIDEzOCwgNDgsIDMwLCAxLCAyMjIsIDg3LCA0OCwgMzAsIDEsIAorICAgIDY4LCA0OCwgMzAsIDEsIDI0NiwgMjIwLCA0OCwgMzAsIDEsIDIyOSwgMTMyLCA0OCwgMzAsIDEsIDIzNiwgMTM3LCA0OCwgCisgICAgMzAsIDEsIDI0NiwgMjQ0LCA0OCwgMzAsIDEsIDI0NiwgMTQwLCA0OCwgMzAsIDEsIDI1MSwgNDYsIDQ4LCAzMCwgMSwgMjM3LCAKKyAgICAyNTUsIDQ4LCAzMCwgMSwgMjIwLCAyMywgNDgsIDMwLCAyMzEsIDEwNywgMTA3LCA0OCwgMzAsIDIzMSwgMTA3LCAxNzQsIAorICAgIDQ4LCAzMCwgMjMxLCAxMDcsIDIyMiwgNjUsIDQ4LCAzMCwgMjMxLCAxMDcsIDI0NSwgMTk2LCAyNDQsIDUwLCAxLCAyNTQsIAorICAgIDE5OSwgMjQ0LCA1MCwgMSwgMjUyLCAyMTksIDI0NCwgNTAsIDEsIDI0NCwgMTAwLCAyNDQsIDUwLCAxLCAyNDksIDE5MSwgCisgICAgMjQ0LCA1MCwgMSwgMjU0LCAxOTUsIDI0NCwgNTAsIDEsIDIyOCwgMTQ2LCAyNDQsIDUwLCAxLCAyMzcsIDEzNiwgMjQ0LCAKKyAgICA1MCwgMSwgMjQzLCAyMDQsIDI0NCwgNTAsIDEsIDIyMSwgMjQxLCAyNDQsIDUwLCAxLCAyNDYsIDIyNiwgMjQ0LCA1MCwgMSwgCisgICAgMjM1LCAyNDEsIDI0NCwgNTAsIDEsIDIzNSwgMTcwLCAyNDQsIDUwLCAxLCAyMzQsIDgyLCAyNDQsIDUwLCAxLCAyMzIsIAorICAgIDIwMiwgMjQ0LCA1MCwgMSwgMjM3LCAxMDgsIDI0NCwgNTAsIDEsIDIyMCwgMzcsIDI0NCwgNTAsIDEsIDIzMCwgMzEsIDI0NCwgCisgICAgNTAsIDEsIDIzMiwgMjcsIDI0NCwgNTAsIDEsIDIyNywgMjQ1LCAyNDQsIDUwLCAxLCAyMjYsIDEyMywgMjQ0LCA1MCwgMSwgCisgICAgMjIyLCA3NCwgMjQ0LCA1MCwgMSwgMjE4LCAxOTEsIDI0NCwgNTAsIDEsIDI0NSwgMjQ5LCAyNDQsIDUwLCAxLCAyMzgsIDMsIAorICAgIDI0NCwgNTAsIDEsIDI0MiwgMTUyLCAyNDQsIDUwLCAxLCAyMzAsIDkxLCAyNDQsIDUwLCAxLCAyMzIsIDMxLCAyNDIsIDE2MSwgCisgICAgMjIwLCAxMDYsIDEsIDI1NCwgMTUwLCAyMjAsIDEwNiwgMSwgMjUyLCAxMDIsIDIyMCwgMTA2LCAxLCAyNDQsIDIzMiwgMjIwLCAKKyAgICAxMDYsIDEsIDIzNiwgMTQ5LCAyMjAsIDEwNiwgMSwgMjQ5LCA2MiwgMjIwLCAxMDYsIDEsIDI0MywgNCwgMjIwLCAxMDYsIDEsIAorICAgIDIxOCwgMTg3LCAyMjAsIDEwNiwgMSwgMjE3LCA4MywgMjIwLCAxMDYsIDEsIDI0MiwgMTg1LCAyMjAsIDEwNiwgMSwgMjIyLCAKKyAgICA1MCwgMjIwLCAxMDYsIDEsIDIxNywgMjIwLCAyMjAsIDEwNiwgMSwgMjM2LCAyNDYsIDIyMCwgMTA2LCAxLCAyMjQsIDIwOSwgCisgICAgMjIwLCAxMDYsIDEsIDIzNSwgMTU2LCAyMjAsIDEwNiwgMSwgMjM0LCAxLCAyMjAsIDEwNiwgMSwgMjQ5LCAzMywgMjIwLCAKKyAgICAxMDYsIDEsIDIzMSwgMTAzLCAyMjAsIDEwNiwgMSwgMjE3LCAxMywgMjIwLCAxMDYsIDEsIDIyNiwgMTQ0LCAyMjAsIDEwNiwgCisgICAgMSwgMjU0LCAxOTEsIDIyMCwgMTA2LCAxLCAyMjgsIDIwMiwgMjIwLCAxMDYsIDEsIDIyNiwgMTY5LCAyMjAsIDEwNiwgMSwgCisgICAgMjI4LCAxMDMsIDIyMCwgMTA2LCAxLCAyMjcsIDIzMSwgMjIwLCAxMDYsIDEsIDIyMiwgMjYsIDIyMCwgMTA2LCAxLCAyNDQsIAorICAgIDEyMiwgMjIwLCAxMDYsIDEsIDEwMSwgMjIwLCAxMDYsIDEsIDcyLCAyMjAsIDEwNiwgMSwgNjgsIDIyMCwgMTA2LCAxLCAKKyAgICAyMjMsIDE3OCwgMjIwLCAxMDYsIDIxOCwgMTc0LCAyNDgsIDE5MSwgNDgsIDIyOSwgMTU5LCA1LCA2MCwgNDgsIDIyOSwgCisgICAgMTU5LCA1LCA3MiwgNDgsIDIyOSwgMTU5LCA1LCA2OCwgNDgsIDIyOSwgMTU5LCA1LCAxNzUsIDQ4LCAyMjksIDE1OSwgNSwgCisgICAgMjM2LCA3LCA0OCwgMjI5LCAxNTksIDUsIDI0NSwgMCwgNDgsIDIyOSwgMTU5LCA1LCAyNDQsIDE3LCA0OCwgMjI5LCAxNTksIAorICAgIDUsIDIxOCwgMTM4LCA0OCwgMjI5LCAxNTksIDUsIDI1MSwgMTY5LCA0OCwgMjI5LCAxNTksIDUsIDIzNywgMTIzLCA0OCwgCisgICAgMjI5LCAxNTksIDUsIDIzNywgOTgsIDQ4LCAyMjksIDE1OSwgNSwgMjIyLCAxNTUsIDQ4LCAyMjksIDE1OSwgNSwgMjIxLCAwLCAKKyAgICA0OCwgMjI5LCAxNTksIDUsIDI0OSwgMjA3LCA0OCwgMjI5LCAxNTksIDUsIDI0OSwgMTUsIDQ4LCAyMjksIDE1OSwgNSwgCisgICAgMjQ3LCAxMTEsIDQ4LCAyMjksIDE1OSwgNSwgMjIyLCAzNSwgNDgsIDIyOSwgMTU5LCA1LCAxODcsIDQ4LCAyMjksIDE1OSwgCisgICAgNSwgMjUyLCAyMzcsIDQ4LCAyMjksIDE1OSwgNSwgMjQ2LCA4LCA0OCwgMjI5LCAxNTksIDUsIDIwOCwgNDgsIDIyOSwgMTU5LCAKKyAgICA1LCAyMzEsIDE0NCwgNDgsIDIyOSwgMTU5LCA1LCAxOTYsIDQ4LCAyMjksIDE1OSwgNSwgMjMzLCAxOTYsIDQ4LCAyMjksIAorICAgIDE1OSwgNSwgMjMzLCA5OSwgNDgsIDIyOSwgMTU5LCA1LCAxODQsIDQ4LCAyMjksIDE1OSwgNSwgMjE5LCAxODksIDQ4LCAKKyAgICAyMjksIDE1OSwgNSwgMjE5LCA5NCwgNDgsIDIyOSwgMTU5LCA1LCAyMDMsIDQ4LCAyMjksIDE1OSwgNSwgMjI3LCAyMiwgNDgsIAorICAgIDIyOSwgMTU5LCA1LCAyMzUsIDE4OCwgNDgsIDIyOSwgMTU5LCA1LCAyMjYsIDE3NywgNDgsIDIyOSwgMTU5LCA1LCAyMTcsIAorICAgIDExNCwgNDgsIDIyOSwgMTU5LCA1LCAyMjUsIDI1LCA0OCwgMjI5LCAxNTksIDUsIDIyMywgMjE4LCA0OCwgMjI5LCAxNTksIAorICAgIDUsIDE1NSwgNDgsIDIyOSwgMTU5LCA1LCAyNTMsIDIyNywgNDgsIDIyOSwgMTU5LCA1LCAyNTMsIDIyNiwgNDgsIDIyOSwgCisgICAgMTU5LCA1LCAyNTMsIDIyNSwgNDgsIDIyOSwgMTU5LCA1LCAyMTgsIDExNSwgNDgsIDIyOSwgMTU5LCA1LCAyNDksIDE4OCwgCisgICAgNDgsIDIyOSwgMTU5LCA1LCAyNDksIDE4NywgNDgsIDIyOSwgMTU5LCA1LCAyNTIsIDIyNCwgNDgsIDIyOSwgMTU5LCA1LCAKKyAgICAyNTEsIDIyMCwgNDgsIDIyOSwgMTU5LCAyMTgsIDE3NCwgMjQ4LCAxOTEsIDQ4LCAyMjksIDE1OSwgNTQsIDEwNywgNDgsIAorICAgIDIyOSwgMTU5LCA1NCwgMTAzLCA0OCwgMjI5LCAxNTksIDU0LCAyMjIsIDY1LCA0OCwgMjI5LCAxNTksIDU0LCAyMjAsIDIxOSwgCisgICAgNDgsIDIyOSwgMTU5LCA1NCwgMjQyLCAxNjEsIDE2MSwgNiwgMSwgMTcxLCA3MiwgMTYxLCA2LCAxLCAxNzEsIDczLCAxNjEsIAorICAgIDYsIDEsIDE3MSwgNjAsIDE2MSwgNiwgMSwgMTcxLCAyNTQsIDIwMiwgMTYxLCA2LCAxLCAxNzEsIDc0LCAxNjEsIDYsIDEsIAorICAgIDE3MSwgMjMwLCAxMjcsIDE2MSwgNiwgMSwgMjI0LCAxOTIsIDcyLCAxNjEsIDYsIDEsIDIyNCwgMTkyLCA3MywgMTYxLCA2LCAKKyAgICAxLCAyMjQsIDE5MiwgNjAsIDE2MSwgNiwgMSwgMjI0LCAxOTIsIDI1NCwgMjAyLCAxNjEsIDYsIDEsIDIyNCwgMTkyLCA3NCwgCisgICAgMTYxLCA2LCAxLCAyMjQsIDE5MiwgMjMwLCAxMjcsIDE2MSwgNiwgMSwgMjUzLCAyMTIsIDE2MSwgNiwgMSwgMjMwLCA3MCwgCisgICAgMTYxLCA2LCAxLCAyMTgsIDE2NSwgMTYxLCA2LCAxLCAyMTgsIDIyLCAxNjEsIDYsIDEsIDI0MywgMjI1LCAxNjEsIDYsIDEsIAorICAgIDIyOSwgMTkxLCAxNjEsIDYsIDEsIDI1MiwgMTM3LCAxNjEsIDYsIDEsIDIyMiwgODAsIDE2MSwgNiwgMSwgMjQ5LCA4MiwgCisgICAgMTYxLCA2LCAxLCAyNTEsIDQzLCAxNjEsIDYsIDEsIDIzNywgMTEzLCAxNjEsIDYsIDEsIDIzNiwgMTkxLCAxNjEsIDYsIDEsIAorICAgIDI0NCwgMjA4LCAxNjEsIDYsIDEsIDI0NiwgMjQ0LCAxNjEsIDYsIDEsIDIxOSwgMTYwLCAxNjEsIDYsIDEsIDI0NiwgMTE4LCAKKyAgICAxNjEsIDYsIDEsIDIyMiwgMjEsIDE2MSwgNiwgMSwgMjQ2LCAxMzgsIDE2MSwgNiwgMSwgMjE3LCA5MCwgMTYxLCA2LCAxLCAKKyAgICAyNDYsIDEzMywgMTYxLCA2LCAxLCAyMTcsIDcxLCAxNjEsIDYsIDEsIDI0NiwgMTQ4LCAxNjEsIDYsIDEsIDI0NiwgMjE3LCAKKyAgICAxNjEsIDYsIDEsIDI0NiwgMjA1LCAxNjEsIDYsIDEsIDI0NiwgMTk3LCAxNjEsIDYsIDEsIDI0NiwgMTg1LCAxNjEsIDYsIDEsIAorICAgIDIzMCwgMTU4LCAxNjEsIDYsIDEsIDI0NiwgMTAxLCAxNjEsIDMsIDEsIDE3MSwgNzIsIDE2MSwgMywgMSwgMTcxLCA3MywgCisgICAgMTYxLCAzLCAxLCAxNzEsIDYwLCAxNjEsIDMsIDEsIDE3MSwgMjU0LCAyMDIsIDE2MSwgMywgMSwgMTcxLCA3NCwgMTYxLCAzLCAKKyAgICAxLCAxNzEsIDIzMCwgMTI3LCAxNjEsIDMsIDEsIDIyNCwgMTkyLCA3MiwgMTYxLCAzLCAxLCAyMjQsIDE5MiwgNzMsIDE2MSwgCisgICAgMywgMSwgMjI0LCAxOTIsIDYwLCAxNjEsIDMsIDEsIDIyNCwgMTkyLCAyNTQsIDIwMiwgMTYxLCAzLCAxLCAyMjQsIDE5MiwgCisgICAgNzQsIDE2MSwgMywgMSwgMjI0LCAxOTIsIDIzMCwgMTI3LCAxNjEsIDMsIDEsIDI1MywgMjEyLCAxNjEsIDMsIDEsIDIzMCwgCisgICAgNzAsIDE2MSwgMywgMSwgMjE4LCAxNjUsIDE2MSwgMywgMSwgMjE4LCAyMiwgMTYxLCAzLCAxLCAyNDMsIDIyNSwgMTYxLCAzLCAKKyAgICAxLCAyMjksIDE5MSwgMTYxLCAzLCAxLCAyNTIsIDEzNywgMTYxLCAzLCAxLCAyMjIsIDgwLCAxNjEsIDMsIDEsIDI0OSwgODIsIAorICAgIDE2MSwgMywgMSwgMjUxLCA0MywgMTYxLCAzLCAxLCAyMzcsIDExMywgMTYxLCAzLCAxLCAyMzYsIDE5MSwgMTYxLCAzLCAxLCAKKyAgICAyNDQsIDIwOCwgMTYxLCAzLCAxLCAyNDYsIDI0NCwgMTYxLCAzLCAxLCAyMTksIDE2MCwgMTYxLCAzLCAxLCAyNDYsIDExOCwgCisgICAgMTYxLCAzLCAxLCAyMjIsIDIxLCAxNjEsIDMsIDEsIDI0NiwgMTM4LCAxNjEsIDMsIDEsIDIxNywgOTAsIDE2MSwgMywgMSwgCisgICAgMjQ2LCAxMzMsIDE2MSwgMywgMSwgMjE3LCA3MSwgMTYxLCAzLCAxLCAyNDYsIDE0OCwgMTYxLCAzLCAxLCAyNDYsIDIxNywgCisgICAgMTYxLCAzLCAxLCAyNDYsIDIwNSwgMTYxLCAzLCAxLCAyNDYsIDE5NywgMTYxLCAzLCAxLCAyNDYsIDE4NSwgMTYxLCAzLCAxLCAKKyAgICAyMzAsIDE1OCwgMTYxLCAzLCAxLCAyNDYsIDEwMSwgMjI0LCAyNTIsIDEsIDIyOSwgMTkwLCAyMjQsIDI1MiwgMSwgMjIxLCAKKyAgICAxMTMsIDIyNCwgMjUyLCAxLCAyMzYsIDExMiwgMjI0LCAyNTIsIDEsIDI0NSwgMjI2LCAyMjQsIDI1MiwgMSwgMjIxLCAyNTUsIAorICAgIDIyNCwgMjUyLCAxLCAyMjQsIDI2LCAyMjQsIDI1MiwgMSwgMjIzLCA1MCwgMjI0LCAyNTIsIDEsIDI1MCwgMjQ1LCAyMjQsIAorICAgIDI1MiwgMSwgMjE4LCAyNCwgMjI0LCAyNTIsIDEsIDI0MiwgMTYwLCAyMjQsIDI1MiwgMSwgMjUyLCA4MywgMjI0LCAyNTIsIAorICAgIDEsIDI0OSwgOTEsIDIyNCwgMjUyLCAxLCAyNDQsIDI0MiwgMjI0LCAyNTIsIDEsIDIxOSwgNjAsIDIyNCwgMjUyLCAxLCAKKyAgICAyMjIsIDMsIDIyNCwgMjUyLCAxLCAyMTcsIDE5LCAyMjQsIDI1MiwgMSwgMjM0LCAyMywgMjI0LCAyNTIsIDEsIDIzNywgNDEsIAorICAgIDIyNCwgMjUyLCAxLCAyMTgsIDE4NSwgMjI0LCAyNTIsIDEsIDI0MywgMjEzLCAyMjQsIDI1MiwgMSwgMjM1LCAzLCAyMjQsIAorICAgIDI1MiwgMSwgMjMzLCAxNjAsIDIyNCwgMjUyLCAxLCAyMzgsIDYsIDIyNCwgMjUyLCAxLCAyNDYsIDI0MywgMjI0LCAyNTIsIAorICAgIDEsIDI1NCwgNywgMjI0LCAyNTIsIDEsIDI1NCwgMjM3LCAyMjQsIDI1MiwgMSwgMjMwLCAxMzgsIDIyNCwgMjUyLCAxLCAKKyAgICAyMTgsIDE3NywgMjI0LCAyNTIsIDEsIDIzMCwgODMsIDIyNCwgMjUyLCAxLCAyNTQsIDIwMiwgMjI0LCAyNTIsIDEsIDIyNywgCisgICAgNzIsIDIyNCwgMjUyLCAxLCAyMzEsIDEwMywgMjI0LCAyNTIsIDEsIDI0NywgMiwgMjI0LCAyNTIsIDEsIDI1NCwgMjA3LCAKKyAgICAyMjQsIDI1MiwgMSwgMjQyLCA2NSwgMjI0LCAyNTIsIDEsIDIyMCwgNjMsIDIyNCwgMjUyLCAxLCAyMzAsIDE4MywgMjI0LCAKKyAgICAyNTIsIDEsIDIzMCwgMTIxLCAyMjQsIDI1MiwgMSwgMjMwLCAxNTcsIDIyNCwgMjUyLCAxLCAyNTMsIDIxNSwgMjI0LCAyNTIsIAorICAgIDEsIDI1NCwgNDUsIDIyNCwgMjUyLCAxLCAyMzAsIDEwNSwgMjI0LCAyNTIsIDEsIDI1NCwgMTg4LCAyMjQsIDI1MiwgMSwgCisgICAgMjQ2LCAxNDIsIDIyNCwgMjUyLCAxLCAyNTQsIDI0LCAyMjQsIDI1MiwgMSwgMjQ3LCAxMSwgMjI0LCAyNTIsIDEsIDI0MiwgCisgICAgNzEsIDIyNCwgMjUyLCAxLCAyMTcsIDI1NSwgMjMwLCA5MywgMSwgMjU0LCAxNjgsIDIzMCwgOTMsIDEsIDI1MiwgMjM3LCAKKyAgICAyMzAsIDkzLCAxLCAyMjIsIDE1NSwgMjMwLCA5MywgMSwgMjM3LCAxMjMsIDIzMCwgOTMsIDEsIDIxOCwgMTM4LCAyMzAsIAorICAgIDkzLCAxLCAyMzYsIDE0OSwgMjMwLCA5MywgMSwgMjQ5LCA4MSwgMjMwLCA5MywgMSwgMjAzLCAyMzAsIDkzLCAxLCAyMjYsIAorICAgIDE3NywgMjMwLCA5MywgMSwgMjI0LCAyMTUsIDIzMCwgOTMsIDEsIDI0OSwgMzYsIDIzMCwgOTMsIDEsIDI1MSwgMTE2LCAKKyAgICAyMzAsIDkzLCAxLCAyNDUsIDAsIDIzMCwgOTMsIDEsIDI0NiwgOCwgMjMwLCA5MywgMSwgMjI4LCAxNTMsIDIzMCwgOTMsIDEsIAorICAgIDIzNywgNCwgMjMwLCA5MywgMSwgMjM1LCAxODQsIDIzMCwgOTMsIDEsIDIzMywgMTcwLCAyMzAsIDkzLCAxLCAyMzEsIDg5LCAKKyAgICAyMzAsIDkzLCAxLCAyMTgsIDIzMywgMjMwLCA5MywgMSwgMTU1LCAyMzAsIDkzLCAxLCAxODQsIDIzMCwgOTMsIDEsIDYwLCAKKyAgICAyMzAsIDkzLCAxLCA3MywgMjMwLCA5MywgMSwgNzIsIDIzMCwgOTMsIDEsIDc0LCAyMzAsIDkzLCAxLCA2OCwgMjMwLCA5MywgCisgICAgMSwgMjU1LCA1OCwgMjMwLCA5MywgMSwgMjQ2LCAyNTAsIDIzMCwgOTMsIDEsIDIzMCwgMTI3LCAyMzAsIDkzLCAyMCwgMjE3LCAKKyAgICA4NCwgMjMwLCA5MywgMjAsIDEwNywgMjMwLCA5MywgMjAsIDEwMywgMjMwLCA5MywgMjAsIDE2MCwgMjMwLCA5MywgMjAsIAorICAgIDE1NCwgMjMwLCA5MywgMjAsIDE3NCwgMjMwLCA5MywgMjAsIDE4MiwgMjMwLCA5MywgMjAsIDE5MSwgMjMwLCA5MywgMjAsIAorICAgIDE4NSwgMjMwLCA5MywgMjAsIDE5MCwgMjUwLCA1MywgNCwgNjAsIDI1MCwgNTMsIDQsIDczLCAyNTAsIDUzLCA0LCA3MiwgCisgICAgMjUwLCA1MywgNCwgNzQsIDI1MCwgNTMsIDQsIDY4LCAyNTAsIDUzLCA0LCAyMzcsIDEyMywgMjUwLCA1MywgNCwgMjM3LCAKKyAgICA1OSwgMjUwLCA1MywgNCwgMTc1LCAyNTAsIDUzLCA0LCAyMzYsIDE4NCwgMjUwLCA1MywgNCwgMjM2LCAxMTMsIDI1MCwgNTMsIAorICAgIDQsIDIzNiwgNTcsIDI1MCwgNTMsIDQsIDIzNiwgNywgMjUwLCA1MywgNCwgMjM1LCAxODgsIDI1MCwgNTMsIDQsIDIzNSwgCisgICAgMTIyLCAyNTAsIDUzLCA0LCAyMzUsIDY3LCAyNTAsIDUzLCA0LCAyMzUsIDEyLCAyNTAsIDUzLCA0LCAyMzQsIDIzMSwgMjUwLCAKKyAgICA1MywgNCwgMTk2LCAyNTAsIDUzLCA0LCAyMzQsIDI1LCAyNTAsIDUzLCA0LCAyMzMsIDE5NiwgMjUwLCA1MywgNCwgMjMzLCAKKyAgICAxMzYsIDI1MCwgNTMsIDQsIDIzMywgOTksIDI1MCwgNTMsIDQsIDIwOCwgMjUwLCA1MywgNCwgMjMyLCAxNDEsIDI1MCwgNTMsIAorICAgIDQsIDIzMiwgNjIsIDI1MCwgNTMsIDQsIDIzMSwgMjA0LCAyNTAsIDUzLCA0LCAyMzEsIDE0NCwgMjUwLCA1MywgNCwgMTg3LCAKKyAgICAyNTAsIDUzLCA0LCAyMjksIDE5OCwgMjUwLCA1MywgNCwgMjI5LCAxMDgsIDI1MCwgNTMsIDQsIDIyOSwgMzcsIDI1MCwgNTMsIAorICAgIDQsIDIyOCwgMjAyLCAyNTAsIDUzLCA0LCAyMDMsIDI1MCwgNTMsIDQsIDIyNywgMjE2LCAyNTAsIDUzLCA0LCAyMjcsIDE0NywgCisgICAgMjUwLCA1MywgNCwgMjI3LCA3NSwgMjUwLCA1MywgNCwgMjI3LCAyMiwgMjUwLCA1MywgNCwgMjI2LCAxNzcsIDI1MCwgNTMsIAorICAgIDQsIDIyNiwgOTQsIDI1MCwgNTMsIDQsIDIyNCwgMTQwLCAyNTAsIDUzLCA0LCAyMjQsIDI2LCAyNTAsIDUzLCA0LCAyMjMsIAorICAgIDEwMywgMjUwLCA1MywgNCwgMjIyLCAxNTUsIDI1MCwgNTMsIDQsIDIyMiwgODcsIDI1MCwgNTMsIDQsIDIyMSwgMjA1LCAKKyAgICAyNTAsIDUzLCA0LCAxMDEsIDI1MCwgNTMsIDQsIDIyMSwgMCwgMjUwLCA1MywgNCwgMjE5LCA3LCAyNTAsIDUzLCA0LCAyMTgsIAorICAgIDIyNywgMjUwLCA1MywgNCwgMjE4LCAyMDQsIDI1MCwgNTMsIDQsIDIxOCwgMTg3LCAyNTAsIDUzLCA0LCAyMTgsIDEzOCwgCisgICAgMjUwLCA1MywgNCwgMjE4LCAxMzUsIDI1MCwgNTMsIDQsIDIxNywgMTE0LCAyNTAsIDUzLCA0LCAyMTcsIDIxLCAyMzcsIAorICAgIDIyNSwgMjU0LCA1MywgMSwgMjU0LCAxNjYsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyNTIsIDEwMSwgMjM3LCAyMjUsIDI1NCwgCisgICAgNTMsIDEsIDI0NCwgOTEsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyNDksIDE3NiwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIAorICAgIDI0MywgMTYyLCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjE4LCAyMzMsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMTcsIDk1LCAKKyAgICAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjQzLCAxMjYsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMjIsIDQ2LCAyMzcsIDIyNSwgCisgICAgMjU0LCA1MywgMSwgMjE3LCAyMTksIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMzYsIDIyNCwgMjM3LCAyMjUsIDI1NCwgNTMsIAorICAgIDEsIDIzNSwgMTUxLCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjM0LCAxLCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjMxLCAKKyAgICAxMDMsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMjYsIDE0NSwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDI1MywgMjA3LCAyMzcsIAorICAgIDIyNSwgMjU0LCA1MywgMSwgMjI5LCAxOTgsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAyMjYsIDE2OCwgMjM3LCAyMjUsIDI1NCwgCisgICAgNTMsIDEsIDIyOCwgMTAyLCAyMzcsIDIyNSwgMjU0LCA1MywgMSwgMjI3LCAxNzQsIDIzNywgMjI1LCAyNTQsIDUzLCAxLCAKKyAgICAyMjQsIDIwOSwgMjM3LCAyMjUsIDI1NCwgNTMsIDEsIDIyMiwgMTAwLCAyMzcsIDIyNSwgMjU0LCA1MywgMjI2LCA4NywgNTUsIAorICAgIDIzNywgMjI1LCAyNTQsIDUzLCA1NCwgMTA3LCAyMzcsIDIyNSwgMjU0LCA1MywgNTQsIDEwMywgMjM3LCAyMjUsIDI1NCwgCisgICAgNTMsIDU0LCAxNjAsIDIzNywgMjI1LCAyNTQsIDUzLCA1NCwgMjIyLCA2NSwgMjM3LCAyMjUsIDI1NCwgNTMsIDU0LCAyMjAsIAorICAgIDIxOSwgMjM3LCAyMjUsIDI1NCwgNTMsIDU0LCAxMzEsIDI0MiwgMTYxLCAyMzcsIDIyNSwgMjU0LCA1MywgNTQsIDEzMSwgCisgICAgMjIxLCAyMzEsIDIzNywgMjI1LCAyNTQsIDUzLCA1NCwgMjIyLCA2NiwgMjIxLCAyMzEsIDIyOSwgMTE2LCAxLCAyNTQsIAorICAgIDE2NCwgMjI5LCAxMTYsIDEsIDI1MiwgMTA0LCAyMjksIDExNiwgMSwgMjQ0LCAyMzMsIDIyOSwgMTE2LCAxLCAyNDksIDY0LCAKKyAgICAyMjksIDExNiwgMSwgMjQzLCAxNjIsIDIyOSwgMTE2LCAxLCAyMTgsIDIzOCwgMjI5LCAxMTYsIDEsIDIxNywgMTA4LCAyMjksIAorICAgIDExNiwgMSwgMjQzLCAxMjgsIDIyOSwgMTE2LCAxLCAyMjIsIDUwLCAyMjksIDExNiwgMSwgMjE3LCAyMjAsIDIyOSwgMTE2LCAKKyAgICAxLCAyMzYsIDI0NiwgMjI5LCAxMTYsIDEsIDIzNSwgMTU3LCAyMjksIDExNiwgMSwgMjM0LCAxLCAyMjksIDExNiwgMSwgCisgICAgMjMxLCAxMDMsIDIyOSwgMTE2LCAxLCAyMjUsIDYxLCAyMjksIDExNiwgMSwgMjU0LCAxOTEsIDIyOSwgMTE2LCAxLCAyMjksIAorICAgIDE5OCwgMjI5LCAxMTYsIDEsIDIyNiwgMTY5LCAyMjksIDExNiwgMSwgMjI4LCAxMDcsIDIyOSwgMTE2LCAxLCAyMjcsIDYxLCAKKyAgICAyMjksIDExNiwgMSwgMjI0LCAyMDksIDIyOSwgMTE2LCAxLCAyMjIsIDEwNSwgMjI5LCAxMTYsIDU0LCAxMDcsIDIyOSwgCisgICAgMTE2LCA1NCwgMjIyLCA2NSwgMjI5LCAxMTYsIDU0LCAyMjAsIDIxOSwgMjI5LCAxMTYsIDU0LCAxMzEsIDI0MiwgMTYxLCAKKyAgICAyMjksIDExNiwgNTQsIDEwMywgMjI5LCAxMTYsIDU0LCAxNjAsIDIyOSwgMTE2LCAyMTgsIDE3NCwgMjI1LCA1NCwgMjM0LCAKKyAgICAxOTYsIDEsIDYwLCAyMzQsIDE5NiwgMSwgMjUzLCAyMDQsIDIzNCwgMTk2LCAxLCAyNDUsIDY3LCAyMzQsIDE5NiwgMSwgCisgICAgMjUwLCA0NiwgMjM0LCAxOTYsIDEsIDczLCAyMzQsIDE5NiwgMSwgMjE2LCAyMTYsIDIzNCwgMTk2LCAxLCA3MiwgMjM0LCAKKyAgICAxOTYsIDEsIDIxOCwgOTAsIDIzNCwgMTk2LCAxLCAyMzcsIDE3LCAyMzQsIDE5NiwgMSwgMTUzLCAyMzQsIDE5NiwgMSwgCisgICAgMTg5LCAyMzQsIDE5NiwgMSwgMjA3LCAyMzQsIDE5NiwgMSwgNzQsIDIzNCwgMTk2LCAxLCAxNTIsIDIzNCwgMTk2LCAxLCAKKyAgICAyMjMsIDIxOSwgMjM0LCAxOTYsIDEsIDIyMiwgMjAxLCAyMzQsIDE5NiwgMSwgNjgsIDIzNCwgMTk2LCAxLCAyNDYsIDc0LCAKKyAgICAyMzQsIDE5NiwgMSwgMjI4LCAxNjMsIDIzNCwgMTk2LCAxLCAxOTgsIDIzNCwgMTk2LCAxLCAyMjEsIDMyLCAyMzQsIDE5NiwgCisgICAgMSwgMjU0LCAxMzEsIDIzNCwgMTk2LCAxLCAyNDYsIDE5NywgMjM0LCAxOTYsIDEsIDIzNCwgMTk4LCAyMzQsIDE5NiwgMSwgCisgICAgMjMxLCAyMTgsIDIzNCwgMTk2LCAxLCAyNTEsIDIwMiwgMjM0LCAxOTYsIDIyMSwgODcsIDc4LCAyMDEsIDEsIDYwLCAyMDEsIAorICAgIDI5LCA1LCA3MiwgMjAxLCAyOSwgNSwgNjgsIDIwMSwgMjksIDUsIDE2NywgMTUyLCAyMDEsIDI5LCA1LCA3MywgMjAxLCAyOSwgCisgICAgNSwgNzQsIDIwMSwgMjksIDIzNSwgOTQsIDc4LCAyMDEsIDUsIDUxLCAyMjcsIDk0LCA1NiwgMjAxLCA1LCAyNTQsIDk1LCAKKyAgICAyMDEsIDUsIDIxOSwgNzcsIDIwMSwgMSwgMTc1LCAyMDEsIDEsIDIzNiwgMTQ5LCAyMDEsIDEsIDI0NSwgMCwgMjAxLCAxLCAKKyAgICAyNDQsIDEyNSwgMjAxLCAxLCAyNTEsIDE2OSwgMjAxLCAxLCAyNTEsIDY5LCAyMDEsIDEsIDIzNywgMTIzLCAyMDEsIDEsIAorICAgIDIzMSwgNzcsIDIwMSwgMSwgMjIxLCAyOSwgMjAxLCAxLCAyMjEsIDE5LCAyMDEsIDEsIDI0OSwgMTMyLCAyMDEsIDEsIDI0OSwgCisgICAgMTE2LCAyMDEsIDEsIDIzMSwgMjE3LCAyMDEsIDEsIDIyMiwgMTU1LCAyMDEsIDEsIDIyMiwgMzUsIDIwMSwgMSwgMjQ5LCAKKyAgICAyMDcsIDIwMSwgMSwgMjQ5LCAzNiwgMjAxLCAxLCAyMDgsIDIwMSwgMSwgMTg3LCAyMDEsIDEsIDIyOSwgMTQxLCAyMDEsIDEsIAorICAgIDI1MiwgMjM3LCAyMDEsIDEsIDI1MiwgOTQsIDIwMSwgMSwgMTk2LCAyMDEsIDEsIDE4NCwgMjAxLCAxLCAyMDMsIDIwMSwgMSwgCisgICAgMjM1LCAxODgsIDIwMSwgMSwgMjE5LCAxODksIDIwMSwgMSwgMjI1LCAyNSwgMjAxLCAxLCAyMjMsIDIxOCwgMjAxLCAxLCAKKyAgICAyMjYsIDE3NywgMjAxLCAxLCAyMTcsIDExNCwgMjAxLCAxLCAxNTUsIDIwMSwgMSwgMjM2LCA3NCwgMjAxLCAxLCAyMjEsIDQsIAorICAgIDIwMSwgNSwgMjUyLCAyMDEsIDUwLCAyMDEsIDUsIDI1MSwgMTIyLCAyMDEsIDUsIDYxLCA1NiwgMjAxLCAyMTksIDgyLCAKKyAgICAyMDEsIDIwLCAxMDcsIDIwMSwgMjAsIDEwMywgMjAxLCAyMCwgMTYwLCAyMDEsIDIwLCAxNTQsIDIwMSwgNTQsIDIyMiwgNjUsIAorICAgIDIwMSwgNTQsIDIyMCwgMjE5LCAyMDEsIDU0LCAxMzEsIDI0MiwgMTYxLCAyMDEsIDU0LCAxMzEsIDIyMSwgMjMxLCAyMDEsIAorICAgIDIyOCwgMTk3LCAyNDgsIDE0NSwgMjAxLCAyMjgsIDE5NywgMywgMjUwLCAyMjEsIDIwMSwgMjI4LCAxOTcsIDI1MCwgMjIxLCAKKyAgICAyMDEsIDIyOCwgMTk3LCAyNTAsIDEwNSwgMTM1LCAyMDEsIDIyOCwgMTk3LCAyMzQsIDgzLCAyMDEsIDIyOCwgMTk3LCAyMzQsIAorICAgIDI0MSwgMjAxLCAyMjgsIDE5NywgMjQ5LCAxNjcsIDIwMSwgMjI4LCAxOTcsIDUxLCAyNDksIDE2NywgMjAxLCAyMjgsIDE5NywgCisgICAgMjM1LCAzNywgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjQzLCAxNjIsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIzNSwgCisgICAgMTUxLCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDMsIDEyNiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjM0LCAxLCAKKyAgICA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMjgsIDEwMiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjE4LCAyMzMsIDQ4LCAKKyAgICAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyNCwgMjA5LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMjcsIDE3NCwgNDgsIDIyNCwgCisgICAgNiwgMjU0LCA2NCwgMSwgMjUyLCAxMDEsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyMiwgMTAwLCA0OCwgMjI0LCA2LCAKKyAgICAyNTQsIDY0LCAxLCAyMjYsIDEyNywgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjM2LCAyMjQsIDQ4LCAyMjQsIDYsIDI1NCwgCisgICAgNjQsIDEsIDIzMSwgMTAzLCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMzYsIDEzNCwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgCisgICAgMSwgMjI2LCAxNjgsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyNiwgMTQ1LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAKKyAgICAyNDUsIDIzMSwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjU0LCAxNjgsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDI1MywgCisgICAgMjA2LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDksIDM0LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDQsIDkxLCAKKyAgICA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyNDksIDE3NiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMSwgMjQ0LCAxMTgsIDQ4LCAKKyAgICAyMjQsIDYsIDI1NCwgNjQsIDEsIDIyMiwgNDYsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIxNywgOTQsIDQ4LCAyMjQsIDYsIAorICAgIDI1NCwgNjQsIDEsIDI0OSwgMzEsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDEsIDIxNywgMjE5LCA0OCwgMjI0LCA2LCAyNTQsIAorICAgIDY0LCAxLCAyMjIsIDI0LCA0OCwgMjI0LCA2LCAyNTQsIDY0LCAxLCAyMjIsIDUsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDU0LCAKKyAgICAxMDcsIDQ4LCAyMjQsIDYsIDI1NCwgNjQsIDU0LCAyNDUsIDE5NiwgNDgsIDIyNCwgNiwgMjU0LCA2NCwgMTIwLCAyMzcsIAorICAgIDIxMSwgMjUzLCAyMTYsIDEsIDYwLCAyNTMsIDIxNiwgMSwgMjU1LCA1OCwgMjUzLCAyMTYsIDEsIDI1NCwgOTMsIDI1MywgCisgICAgMjE2LCAxLCAyNTUsIDE3LCAyNTMsIDIxNiwgMSwgMjU0LCAxMzEsIDI1MywgMjE2LCAxLCAyNTUsIDE4LCAyNTMsIDIxNiwgCisgICAgMSwgMjU0LCAyMzQsIDI1MywgMjE2LCAxLCAyNTQsIDIzMCwgMjUzLCAyMTYsIDEsIDczLCAyNTMsIDIxNiwgMSwgMjQ2LCAKKyAgICAyNTAsIDI1MywgMjE2LCAxLCA3NCwgMjUzLCAyMTYsIDEsIDIzMCwgMTI3LCAyNTMsIDIxNiwgMSwgNzIsIDI1MywgMjE2LCAKKyAgICAxLCAyMzcsIDI1NSwgMjUzLCAyMTYsIDEsIDY4LCAyNTMsIDIxNiwgMSwgMjIwLCAyMywgMjUzLCAyMTYsIDEsIDIzNiwgCisgICAgMTg0LCAyNTMsIDIxNiwgMSwgMjE4LCAxMzUsIDI1MywgMjE2LCAxLCAyMTgsIDEwMSwgMjUzLCAyMTYsIDEsIDIxOCwgMTEwLCAKKyAgICAyNTMsIDIxNiwgMSwgMjQ0LCAxOTEsIDI1MywgMjE2LCAxLCAyNDQsIDE1NSwgMjUzLCAyMTYsIDEsIDI0NCwgMTE2LCAyNTMsIAorICAgIDIxNiwgMSwgMjUxLCA5OSwgMjUzLCAyMTYsIDEsIDIzNywgMTE0LCAyNTMsIDIxNiwgMSwgMjIyLCA4NywgMjUzLCAyMTYsIAorICAgIDEsIDIyMiwgMjIsIDI1MywgMjE2LCAxLCAyNDksIDkyLCAyNTMsIDIxNiwgMSwgMjQ5LCAyOSwgMjUzLCAyMTYsIDEsIDIyMSwgCisgICAgMjYsIDI1MywgMjE2LCAxLCAyMjksIDE5OCwgMjUzLCAyMTYsIDEsIDI0NSwgMjMxLCAyNTMsIDIxNiwgMSwgMjUyLCAxNDQsIAorICAgIDI1MywgMjE2LCAxLCAyNTIsIDkyLCAyNTMsIDIxNiwgMSwgMjMyLCAxMDYsIDI1MywgMjE2LCAxLCAyMzIsIDY4LCAyNTMsIAorICAgIDIxNiwgMSwgMjMyLCA2OSwgMjUzLCAyMTYsIDEsIDIzMiwgMTQxLCAyNTMsIDIxNiwgMSwgMjMxLCA3MywgMjUzLCAyMTYsIAorICAgIDEsIDIzMSwgMjE2LCAyNTMsIDIxNiwgMSwgMjM0LCAyNSwgMjUzLCAyMTYsIDEsIDI0MywgNTIsIDI1MywgMjE2LCAxLCAKKyAgICAyMTcsIDE2NCwgMjUzLCAyMTYsIDEsIDIxOCwgMjUsIDI1MywgMjE2LCAxLCAyMTksIDE2NSwgMjUzLCAyMTYsIDEsIDIyNywgCisgICAgMjE2LCAyNTMsIDIxNiwgMSwgMjM1LCAxMjIsIDI1MywgMjE2LCAxLCAyMjYsIDk0LCAyNTMsIDIxNiwgMSwgMjE3LCA5MiwgCisgICAgMjUzLCAyMTYsIDEsIDIyNCwgMjQ2LCAyNTMsIDIxNiwgMSwgMjE3LCA3MiwgMjUzLCAyMTYsIDEsIDIyNCwgMTQ3LCAyNTMsIAorICAgIDIxNiwgMSwgMjIzLCAxOTAsIDI1MywgMjE2LCAxLCAyNDMsIDE2MiwgMjUzLCAyMTYsIDI1NSwgNywgNzgsIDIyMSwgMTcyLCAKKyAgICAxMjQsIDE4OCwgMTA0LCAxMzEsIDYxLCAyMjgsIDE5NiwgMywgMTI0LCAxODgsIDEwNCwgMTMxLCA2MSwgMjI4LCAxOTYsIAorICAgIDIzNSwgMTQ2LCAxMjQsIDE4OCwgMTA0LCAxMzEsIDYxLCAyMjgsIDE5NiwgMjM1LCAxNDYsIDEzMSwgNjEsIDEwNCwgMTI0LCAKKyAgICAxODgsIDIyOCwgMTk2LCAyMzUsIDE0NiwgMTI0LCAyMjcsIDkyLCAxMDQsIDEzMSwgMjI3LCA5NCwgMjI4LCAxOTYsIDIzNSwgCisgICAgMTQ2LCAxMzEsIDIyNywgOTQsIDEwNCwgMTI0LCAyMjcsIDkyLCAyMjgsIDE5NiwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAKKyAgICAyNTQsIDE2NiwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyNTIsIDEwMSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyNDQsIAorICAgIDkxLCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDI0OSwgMTc2LCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDI0MywgMTYyLCAKKyAgICAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDIxOCwgMjMzLCAyMzcsIDE5MywgMjI5LCAyMjQsIDEsIDIxNywgOTUsIDIzNywgCisgICAgMTkzLCAyMjksIDIyNCwgMSwgMjQzLCAxMjYsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjIyLCA0NiwgMjM3LCAxOTMsIAorICAgIDIyOSwgMjI0LCAxLCAyMTcsIDIxOSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMzYsIDIyNCwgMjM3LCAxOTMsIDIyOSwgCisgICAgMjI0LCAxLCAyMzUsIDE1MSwgMjM3LCAxOTMsIDIyOSwgMjI0LCAxLCAyMzQsIDEsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgCisgICAgMjMxLCAxMDMsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjI2LCAxNDUsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjUzLCAKKyAgICAyMDcsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjI5LCAxOTgsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjI2LCAxNjgsIAorICAgIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjI4LCAxMDIsIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjI3LCAxNzQsIDIzNywgCisgICAgMTkzLCAyMjksIDIyNCwgMSwgMjI0LCAyMDksIDIzNywgMTkzLCAyMjksIDIyNCwgMSwgMjIyLCAxMDAsIDIzNywgMTkzLCAKKyAgICAyMjksIDIyNCwgNTQsIDEwNywgMjM3LCAxOTMsIDIyOSwgMjI0LCA1NCwgMTAzLCAyMzcsIDE5MywgMjI5LCAyMjQsIDU0LCAKKyAgICAxNjAsIDIzNywgMTkzLCAyMjksIDIyNCwgNTQsIDE1NCwgMjM3LCAxOTMsIDIyOSwgMjI0LCA1NCwgMjIyLCA2NSwgMjM3LCAKKyAgICAxOTMsIDIyOSwgMjI0LCA1NCwgMjIwLCAyMTksIDIzNywgMTkzLCAyMjksIDIyNCwgNTQsIDEzMSwgMjQyLCAxNjEsIDIzNywgCisgICAgMTkzLCAyMjksIDIyNCwgNTQsIDEzMSwgMjIxLCAyMzEsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyNTQsIDE2NiwgMjM3LCAKKyAgICAxOTMsIDIzMCwgMzMsIDEsIDI1MiwgMTAxLCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjQ0LCA5MSwgMjM3LCAxOTMsIDIzMCwgCisgICAgMzMsIDEsIDI0OSwgMTc2LCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjQzLCAxNjIsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAKKyAgICAyMTgsIDIzMiwgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIxNywgOTUsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyNDMsIDEyNiwgCisgICAgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIyMiwgNDYsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMTcsIDIxOSwgMjM3LCAxOTMsIAorICAgIDIzMCwgMzMsIDEsIDIzNiwgMjI0LCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjM1LCAxNTEsIDIzNywgMTkzLCAyMzAsIDMzLCAKKyAgICAxLCAyMzQsIDAsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMzEsIDEwMywgMjM3LCAxOTMsIDIzMCwgMzMsIDEsIDIyNiwgCisgICAgMTQ1LCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjI5LCAxOTgsIDIzNywgMTkzLCAyMzAsIDMzLCAxLCAyMjYsIDE2OCwgMjM3LCAKKyAgICAxOTMsIDIzMCwgMzMsIDEsIDIyNCwgMjA5LCAyMzcsIDE5MywgMjMwLCAzMywgMSwgMjIyLCAxMDAsIDIzNywgMTkzLCAyMzAsIAorICAgIDMzLCA1NCwgMTA3LCAyMzcsIDE5MywgMjMwLCAzMywgNTQsIDEwMywgMjM3LCAxOTMsIDIzMCwgMzMsIDU0LCAxNjAsIDIzNywgCisgICAgMTkzLCAyMzAsIDMzLCA1NCwgMTU0LCAyMzcsIDE5MywgMjMwLCAzMywgNTQsIDIyMiwgNjUsIDIzNywgMTkzLCAyMzAsIDMzLCAKKyAgICA1NCwgMjIwLCAyMTksIDIzNywgMTkzLCAyMzAsIDMzLCA1NCwgMTMxLCAyNDIsIDE2MSwgMjM3LCAxOTMsIDIzMCwgMzMsIAorICAgIDU0LCAxMzEsIDIyMSwgMjMxLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgNjAsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDYwLCA0OCwgCisgICAgMTcyLCAxLCAyMTgsIDE3LCAyNTQsIDIzNCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDcyLCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAKKyAgICA3MiwgNDgsIDE3MiwgMSwgMjE4LCAxNywgNzMsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCA3NCwgNDgsIDE3MiwgMSwgMjMwLCAKKyAgICAxMDAsIDIzMCwgMTY3LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyMzAsIDE2NywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NSwgCisgICAgMTEsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI1NSwgMTEsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIzMywgNDgsIAorICAgIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAyMzMsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIwOSwgNDgsIDE3MiwgMSwgCisgICAgMjE4LCAxNywgMjU0LCAyMDksIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIyOCwgNDgsIDE3MiwgMSwgMjE4LCAxNywgCisgICAgMjU0LCAyMjgsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDI0NCwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAyNDQsIAorICAgIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIzMiwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgODAsIDQ4LCAxNzIsIAorICAgIDEsIDIxOCwgMTcsIDI0NiwgODAsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTMsIDIxMiwgNDgsIDE3MiwgMSwgMjE4LCAxNywgCisgICAgMjUzLCAyMTIsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIxNiwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAyMTYsIAorICAgIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDIyNiwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAyMjYsIDQ4LCAxNzIsIAorICAgIDEsIDIzMCwgMTAwLCAyMzAsIDE2NiwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjMwLCAxNjYsIDQ4LCAxNzIsIDEsIDIzMCwgCisgICAgMTAwLCAyNTQsIDE3NSwgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCAxNzUsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIAorICAgIDIyNSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMjA3LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQ2LCAyMDUsIDQ4LCAKKyAgICAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIDEzMSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMjIzLCA0OCwgMTcyLCAxLCAKKyAgICAyMTgsIDE3LCAyNTQsIDIyMywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMTgwLCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAKKyAgICAyNDYsIDE4MCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMTk0LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNDYsIDE5NCwgCisgICAgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NiwgMTY5LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyNDYsIDE2OSwgNDgsIDE3MiwgCisgICAgMSwgMjE4LCAxNywgMjU0LCAxMjMsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNDYsIDE4NSwgNDgsIDE3MiwgMSwgMjE4LCAKKyAgICAxNywgMjU0LCAyMjIsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNDYsIDE2MiwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDIzMCwgCisgICAgMTIwLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjQyLCA2NywgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI0NywgMCwgNDgsIAorICAgIDE3MiwgMSwgMjE4LCAxNywgMjQ3LCAwLCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCA2OSwgNDgsIDE3MiwgMSwgMjE4LCAKKyAgICAxNywgMjU0LCA2OSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDIzNywgMTU4LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyMzcsIAorICAgIDE1OCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDIzMCwgMTA2LCA0OCwgMTcyLCAxLCAyMTgsIDE3LCAyMzAsIDEwNiwgNDgsIAorICAgIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgNjcsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI1NCwgNjcsIDQ4LCAxNzIsIDEsIDIzMCwgCisgICAgMTAwLCAyNTQsIDIyMSwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgMTMsIDQ4LCAxNzIsIDEsIDIzMCwgMTAwLCAyNTQsIAorICAgIDIyMCwgNDgsIDE3MiwgMSwgMjMwLCAxMDAsIDI1NCwgNywgNDgsIDE3MiwgMSwgMjE4LCAxNywgMjU0LCA3LCA0OCwgMTcyLCAKKyAgICAxLCAyMzAsIDEwMCwgMjQ2LCAxMzMsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI0NiwgMTMzLCA0OCwgMTcyLCAxLCAyMzAsIAorICAgIDEwMCwgMjUzLCAyNDQsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI1MywgMjQ0LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjU0LCAKKyAgICAyMTcsIDQ4LCAxNzIsIDEsIDIxOCwgMTcsIDI1NCwgMjE3LCA0OCwgMTcyLCAxLCAyMzAsIDEwMCwgMjMwLCA5MiwgNDgsIAorICAgIDE3MiwgMSwgMjMwLCAxMDAsIDI1MiwgMTg3LCAyMjcsIDExLCAyMCwgMTA3LCAyMjcsIDExLCAyMCwgMTAzLCAyMjcsIDExLCAKKyAgICAyMCwgMTYwLCAyMjcsIDExLCAyMCwgMTU0LCAyMjcsIDExLCAyMCwgMTc0LCAyMjcsIDExLCAyMCwgMTgyLCAyMjcsIDExLCAKKyAgICAyMCwgMTkxLCAyMjcsIDExLCAyMCwgMTg1LCAyMjcsIDExLCAyMCwgMTkwLCAyMjcsIDExLCA1NCwgMjIyLCA2NSwgMjI3LCAKKyAgICAxMSwgNTQsIDIyMCwgMjE5LCAyMjcsIDExLCA1NCwgMjIxLCAyNDUsIDIyNywgMTEsIDU0LCAyNDUsIDExOSwgMjI3LCAxMSwgCisgICAgNTQsIDI0NSwgMTk2LCAyMjcsIDExLCA1NCwgMjI0LCA2OSwgMjI3LCAxMSwgNTQsIDIyNSwgMzgsIDIyNywgMTEsIDU0LCAKKyAgICAyNDYsIDIyNywgMjI3LCAxMSwgNTQsIDIzMiwgMjcsIDIyNywgMTEsIDU0LCAxMzEsIDI0MiwgMTYxLCAyMjcsIDExLCA1NCwgCisgICAgMTI0LCAyNDIsIDE2MSwgMjI3LCAxMSwgNTQsIDE0OCwgMjQyLCAxNjEsIDIyNywgMTEsIDU0LCAyNDUsIDExNiwgMjQyLCAKKyAgICAxNjEsIDIyNywgMTEsIDU0LCAyNDUsIDE3MCwgMjQyLCAxNjEsIDIyNywgMTEsIDU0LCAyMjQsIDgyLCAyNDIsIDE2MSwgCisgICAgMjI3LCAxMSwgNTQsIDIyNSwgNDMsIDI0MiwgMTYxLCAyMjcsIDExLCA1NCwgMjQ2LCAyMzUsIDI0MiwgMTYxLCAyMjcsIDExLCAKKyAgICA1NCwgMjMyLCAzMSwgMjQyLCAxNjEsIDIyNywgMTEsIDI0NSwgMTA4LCAxMzEsIDI0MywgMTk0LCAyMjcsIDExLCAyNDUsIAorICAgIDEwOCwgMTMxLCAyMjgsIDg5LCAyMjcsIDExLCAyNDUsIDEwOCwgMTMxLCAyMjEsIDI1MSwgMjI3LCAxMSwgMjQ1LCAxMDgsIAorICAgIDEyNCwgMjIxLCAyNDksIDE5NCwgNSwgMjUxLCAxNDYsIDE5NCwgNSwgMjU0LCA5NSwgMTk0LCA1LCAyMTksIDc3LCAxOTQsIAorICAgIDEsIDYwLCAxOTQsIDEsIDI1NSwgNTgsIDE5NCwgMSwgNzIsIDE5NCwgMSwgMjM3LCAyNTUsIDE5NCwgMSwgNjgsIDE5NCwgMSwgCisgICAgMjIwLCAyMywgMTk0LCAxLCA3MywgMTk0LCAxLCAyNTQsIDE5NiwgMTk0LCAxLCA3NCwgMTk0LCAxLCAyNTMsIDIzMiwgMTk0LCAKKyAgICAxLCAxNzUsIDE5NCwgMSwgMjM2LCAxNDksIDE5NCwgMSwgMjQ1LCAwLCAxOTQsIDEsIDI0NCwgMTI1LCAxOTQsIDEsIDIzMiwgCisgICAgMTE1LCAxOTQsIDEsIDI1MSwgMTY5LCAxOTQsIDEsIDI1MSwgNjksIDE5NCwgMSwgMjM3LCAxMjMsIDE5NCwgMSwgMjM3LCAKKyAgICAxMDMsIDE5NCwgMSwgMjMxLCA3NywgMTk0LCAxLCAyMjEsIDI5LCAxOTQsIDEsIDIyMSwgMTksIDE5NCwgMSwgMjQ5LCAxMzIsIAorICAgIDE5NCwgMSwgMjQ5LCAxMjEsIDE5NCwgMSwgMjQ5LCAxMTYsIDE5NCwgMSwgMjI3LCAxNTEsIDE5NCwgMSwgMjMxLCAyMTcsIAorICAgIDE5NCwgMSwgMjIyLCAxNTUsIDE5NCwgMSwgMjIyLCAzNSwgMTk0LCAxLCAyNDksIDIwNywgMTk0LCAxLCAyNDksIDM2LCAKKyAgICAxOTQsIDEsIDIwOCwgMTk0LCAxLCAxODcsIDE5NCwgMSwgMjI5LCAxNDEsIDE5NCwgMSwgMjUyLCAyMzcsIDE5NCwgMSwgCisgICAgMjUyLCA5NCwgMTk0LCAxLCAxOTYsIDE5NCwgMSwgMTg0LCAxOTQsIDEsIDIwMywgMTk0LCAxLCAyMzUsIDE4OCwgMTk0LCAxLCAKKyAgICAyMTksIDE4OSwgMTk0LCAxLCAyMjUsIDI1LCAxOTQsIDEsIDIyMywgMjE4LCAxOTQsIDEsIDIyNiwgMTc3LCAxOTQsIDEsIAorICAgIDE1NSwgMTk0LCAyOSwgNSwgMjU1LCA1OCwgMTk0LCAyOSwgNSwgNzIsIDE5NCwgMjksIDUsIDIzNywgMjU1LCAxOTQsIDI5LCAKKyAgICA1LCA2OCwgMTk0LCAyOSwgNSwgMjIwLCAyMywgMTk0LCAyOSwgNSwgNzMsIDE5NCwgMjksIDUsIDI1NCwgMTk2LCAxOTQsIAorICAgIDI5LCA1LCA3NCwgMTk0LCAyOSwgNSwgMjUzLCAyMzIsIDE5NCwgNSwgMjE5LCA4MiwgMTk0LCA1LCAyMzEsIDExMiwgMTk0LCAKKyAgICAyNTUsIDcsIDU1LCAxOTQsIDI0NiwgMTcxLCA1NSwgMTk0LCA1NCwgNTUsIDE5NCwgMjI2LCA4NywgNzgsIDE5NCwgNTEsIAorICAgIDIyNiwgODcsIDc4LCAxOTQsIDI0OSwgMTY3LCAxOTQsIDUxLCAyNDksIDE2NywgMTUsIDUsIDYwLCAxNSwgNSwgMTEyLCAyNywgCisgICAgNjAsIDE1LCA1LCAxMTIsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDExMiwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgCisgICAgMTEyLCAyNywgMTU1LCAxNSwgNSwgMTEyLCAyNywgMjM4LCAxLCAxNSwgNSwgMTEyLCAyNywgMjM1LCAxNzMsIDI0NCwgMywgCisgICAgMTUsIDUsIDExMiwgMjcsIDIzMywgNjIsIDE1LCA1LCAxMTIsIDI3LCAyMjYsIDE2NSwgMTUsIDUsIDI1NSwgNjAsIDE1LCA1LCAKKyAgICAyNTUsIDExLCAxNSwgNSwgMjU1LCAxMiwgMjcsIDI1NCwgNSwgMTUsIDUsIDI1NSwgMTIsIDI3LCAyNDcsIDEwMCwgMjQ0LCAKKyAgICAzLCAxNSwgNSwgMjU1LCAxMiwgMjcsIDI0NCwgMjQwLCAxNSwgNSwgMjU1LCAxMiwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAKKyAgICAxNSwgNSwgMjU1LCAxMiwgMjcsIDE1NSwgMTUsIDUsIDI1NSwgMTIsIDI3LCAyMzgsIDIsIDI0NCwgMywgMTUsIDUsIDI1NSwgCisgICAgMTIsIDI3LCAyMzcsIDIzMSwgMTUsIDUsIDI1NSwgMTIsIDI3LCAyMzUsIDE3NCwgMTUsIDUsIDI1NSwgMTIsIDI3LCAyMjQsIAorICAgIDIzMSwgMTUsIDUsIDI1NSwgMTIsIDI3LCAxMDUsIDg4LCAxMDUsIDg4LCA2OCwgMTUsIDUsIDI1NSwgMTIsIDI0NCwgMywgCisgICAgMTUsIDUsIDI1NSwgOSwgMTUsIDUsIDI1NSwgMTAsIDI3LCAyNTIsIDIxNiwgMTUsIDUsIDI1NSwgMTAsIDI3LCAyNDQsIAorICAgIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDI1NSwgMTAsIDI3LCAyMzQsIDI2LCA4OCwgMjQ2LCAxOTcsIDE1LCA1LCAyNTUsIDEwLCAKKyAgICAyNywgMjI1LCAyMywgMTUsIDUsIDI1NSwgMTAsIDI3LCAyMjIsIDEzMCwgMTUsIDUsIDI1NCwgMjQ0LCAxNSwgNSwgMjU0LCAKKyAgICAxODIsIDE1LCA1LCAyNTQsIDE4MywgMjcsIDI0NiwgMTQzLCAxNSwgNSwgMjU0LCAxODMsIDI3LCAyMjQsIDIwMywgODgsIAorICAgIDI0NCwgODEsIDE1LCA1LCAyNTQsIDE3NSwgMTUsIDUsIDI1NCwgMTc2LCAyNywgMjU0LCAxNzUsIDE1LCA1LCAyNTQsIDE3NiwgCisgICAgMjcsIDI0OCwgMjI5LCAxNSwgNSwgMjU0LCAxNzYsIDI3LCAyNDQsIDgxLCAxNSwgNSwgMjU0LCAxNzYsIDI3LCAxNTUsIDE1LCAKKyAgICA1LCAyNTQsIDE3NiwgMjcsIDIzNiwgMjUxLCAxNSwgNSwgMjU0LCAxNzYsIDI3LCAyMzYsIDExMywgMTUsIDUsIDI1NCwgCisgICAgMTc2LCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyNTQsIDE3NiwgMjcsIDIyMCwgMzAsIDE1LCA1LCAyNTQsIDE3MiwgMTUsIDUsIAorICAgIDI1NCwgMTY2LCAxNSwgNSwgMjU0LCAxMzcsIDE1LCA1LCAyNTQsIDEzOCwgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjU0LCAKKyAgICAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTA0LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxNDgsIDIyMSwgMTc2LCAxNSwgCisgICAgNSwgMjU0LCAxMzIsIDg4LCAyMzIsIDIyOCwgMjMwLCAxMTAsIDI1NCwgMTMyLCA4OCwgMjMyLCAyMjcsIDE1LCA1LCAyNTQsIAorICAgIDEzMiwgODgsIDIzMiwgMjI4LCAyMjMsIDIyNiwgMTUsIDUsIDI1NCwgMTA3LCAxNSwgNSwgMjU0LCA4OCwgMTUsIDUsIDI1NCwgCisgICAgNjEsIDE1LCA1LCAyNTQsIDYyLCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyNTQsIDM1LCAxNSwgNSwgMjU0LCAxMiwgMTUsIDUsIAorICAgIDI1NCwgNywgMTUsIDUsIDI1NCwgOCwgMjE3LCAzOCwgMjIyLCA1OSwgMTUsIDUsIDI1NCwgOCwgMjM2LCAyNTQsIDIyMiwgCisgICAgNTksIDE1LCA1LCAyNTQsIDgsIDEwNCwgMjU0LCA4LCAyMjAsIDI1NCwgMTA0LCAyMjAsIDI1NCwgMjIwLCAyNTQsIDEwNCwgCisgICAgMjIwLCAyNTQsIDIyOSwgMjQ2LCAxNSwgNSwgMjU0LCA4LCAxMDQsIDI1NCwgOCwgMTA0LCAyNTQsIDcsIDE1LCA1LCAyNTQsIAorICAgIDgsIDEwNCwgMjU0LCA4LCAxMDQsIDI1NCwgOCwgMjUwLCA5NSwgMjU0LCA4LCAxMDQsIDI1NCwgOCwgMTA0LCAyNTQsIDcsIAorICAgIDE1LCA1LCAyNTQsIDUsIDE1LCA1LCAyNTQsIDMsIDE1LCA1LCAyNTIsIDIzNywgMTUsIDUsIDI1MiwgMjI4LCAxNSwgNSwgCisgICAgMjUyLCAyMjUsIDE1LCA1LCAyNTIsIDIyMywgMTUsIDUsIDI1MiwgMjE3LCAxNSwgNSwgMjUyLCAyMTgsIDEwNCwgMjUyLCAKKyAgICAyMTcsIDE1LCA1LCAyNTIsIDIxNiwgMTUsIDUsIDEzNSwgMTUsIDUsIDI1MiwgMjAwLCAxNSwgNSwgMjUyLCA4NCwgMTUsIDUsIAorICAgIDI1MiwgODUsIDI3LCA2MCwgMTUsIDUsIDI1MiwgODUsIDI3LCAyNDQsIDIyMCwgMTUsIDUsIDI1MiwgODUsIDI3LCAyMzgsIAorICAgIDIsIDI0NCwgMywgMTUsIDUsIDI1MSwgMjQ4LCAxNSwgNSwgMjUxLCAyNDksIDEwNCwgMjUxLCAyNDksIDI1NSwgMTEsIDE1LCAKKyAgICA1LCAyNTEsIDI0OSwgMTA0LCAyNTEsIDI0OSwgMjIwLCA4NywgMTUsIDUsIDI1MSwgMjQ5LCAyNTAsIDk1LCAyNTEsIDI0OCwgCisgICAgMTUsIDUsIDI1MSwgMjM3LCAxNSwgNSwgMjUxLCAyMzgsIDEwNCwgMjUxLCAyMzcsIDE1LCA1LCAyNTEsIDIyOCwgMTUsIDUsIAorICAgIDI1MSwgMjI3LCAxNSwgNSwgMjQ5LCAyMDcsIDE1LCA1LCAyNDksIDE5OCwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgCisgICAgMTEyLCA4OCwgMjM0LCA1NywgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjU0LCAxMzcsIDE1LCA1LCAyNDksIAorICAgIDE5OSwgMjM2LCA5MSwgMjcsIDI1MiwgMjE2LCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyNTIsIDg0LCAxNSwgNSwgCisgICAgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyNDUsIDAsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDI0NSwgMSwgODgsIAorICAgIDIzNCwgNTcsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDI0NCwgMTAzLCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgCisgICAgOTEsIDI3LCAyNDQsIDg3LCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyNDQsIDExLCAxNSwgNSwgMjQ5LCAxOTksIAorICAgIDIzNiwgOTEsIDI3LCAxNTUsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDIzNywgMTU2LCAxNSwgNSwgMjQ5LCAKKyAgICAxOTksIDIzNiwgOTEsIDI3LCAyMzcsIDE1NywgODgsIDIzNCwgMjMxLCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAKKyAgICAyMzYsIDI0MCwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjM1LCAxODgsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCAKKyAgICA5MSwgMjcsIDIzNCwgMjMxLCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyMzQsIDIzMiwgODgsIDIzNCwgNTYsIAorICAgIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDIzNCwgMjE5LCAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAKKyAgICAyMzIsIDE0MSwgMTUsIDUsIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjI5LCAyNDcsIDg4LCAyMjksIDI0NiwgMTUsIDUsIAorICAgIDI0OSwgMTk5LCAyMzYsIDkxLCAyNywgMjI0LCAxNDAsIDE1LCA1LCAyNDksIDE5OSwgMjM2LCA5MSwgMjcsIDIyMiwgMTMwLCAKKyAgICAxNSwgNSwgMjQ5LCAxOTksIDIzNiwgOTEsIDI3LCAyMjAsIDEyNSwgODgsIDI0NCwgODcsIDE1LCA1LCAyNDksIDE5OSwgCisgICAgMjM2LCA5MSwgMjcsIDIyMCwgMzAsIDE1LCA1LCAyNDksIDE3NSwgMTUsIDUsIDI0OSwgMTU2LCAxNSwgNSwgMjQ5LCAxNTUsIAorICAgIDE1LCA1LCAyNDksIDE1NCwgMTUsIDUsIDI0OSwgMTUsIDE1LCA1LCAyNDgsIDI1NSwgMTUsIDUsIDI0OCwgMjMwLCAxNSwgNSwgCisgICAgMjQ4LCAyMzEsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDI0OCwgMjI5LCAxNSwgNSwgMjQ4LCAyMTksIDE1LCA1LCAyNDgsIAorICAgIDIyMCwgMjM2LCAyMDksIDEwNSwgMjQ0LCA0LCAyNDgsIDIwMiwgMTUsIDUsIDI0OCwgMjAyLCAxNSwgNSwgMjQ3LCAxMTEsIAorICAgIDE1LCA1LCAyNDcsIDExMiwgMTA0LCAyNDcsIDExMSwgMTUsIDUsIDI0NywgMTEyLCAyNDQsIDMsIDE1LCA1LCAyNDcsIDExMiwgCisgICAgMjI0LCAyMjgsIDE1LCA1LCAyNDcsIDEwOSwgMTUsIDUsIDI0NywgMTEwLCAyNywgMjQ2LCAxMzAsIDE1LCA1LCAyNDcsIAorICAgIDEwOCwgMTUsIDUsIDI0NywgMTA3LCAxNSwgNSwgMjQ3LCAxMDYsIDE1LCA1LCAyNDcsIDEwNSwgMTUsIDUsIDI0NywgMTAxLCAKKyAgICAxNSwgNSwgMjQ3LCA5OSwgMTUsIDUsIDI0NywgMTAwLCAyNDQsIDMsIDE1LCA1LCAyNDcsIDEwMCwgMjQ0LCA0LCAyNDQsIDMsIAorICAgIDE1LCA1LCAyNDcsIDk4LCAxNSwgNSwgMjQ3LCA5MSwgMTUsIDUsIDczLCAxNSwgNSwgMTc4LCAyNywgMjI5LCAyNDYsIDE1LCAKKyAgICA1LCAxNzgsIDEwNCwgMTc4LCAyMzEsIDEwNCwgMTA0LCAyMzEsIDEwMywgMTUsIDUsIDI0NywgMTcsIDE1LCA1LCAyNDcsIAorICAgIDE4LCAyNywgMTEyLCA4OCwgMjQzLCAyMTQsIDg4LCAyNDksIDIwNywgMTUsIDUsIDI0NywgMTgsIDI3LCAyNDQsIDIyMCwgCisgICAgMTUsIDUsIDI0NywgMTgsIDI3LCAyMzMsIDE5NiwgMTUsIDUsIDI0NywgMTgsIDI3LCAyMjYsIDE1NiwgMTUsIDUsIDI0NywgCisgICAgMTgsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDI0NywgMTgsIDI3LCA2OCwgMTUsIDUsIDI0NiwgMjUyLCAxNSwgNSwgMjQ2LCAKKyAgICAyNDIsIDE1LCA1LCAyNDYsIDIxNywgMTUsIDUsIDI0NiwgMTk3LCAxNSwgNSwgMjQ2LCAxOTgsIDI3LCAyNDQsIDIyOCwgMTUsIAorICAgIDUsIDI0NiwgMTk4LCAyNywgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAyNDYsIDE5OCwgMjcsIDIzNCwgMjUsIDE1LCA1LCAKKyAgICAyNDYsIDE5OCwgMjUwLCA5NSwgMjQ2LCAxOTcsIDE1LCA1LCAyNDYsIDE5OCwgMjMwLCAxMTAsIDI0NiwgMTk3LCAxNSwgNSwgCisgICAgMjQ2LCAxOTgsIDIyMywgMjI2LCAxNSwgNSwgMjQ2LCAxNDUsIDE1LCA1LCAyNDYsIDE0MywgMTUsIDUsIDI0NiwgMTMwLCAKKyAgICAxNSwgNSwgMjQ2LCA3OCwgMTUsIDUsIDI0NiwgNzksIDI3LCA2MCwgMTUsIDUsIDI0NiwgNzksIDI3LCAxMTIsIDg4LCAyMzUsIAorICAgIDE2MiwgMTUsIDUsIDI0NiwgNzksIDI3LCAxMTIsIDg4LCAyMzUsIDE2MywgMjcsIDIzNSwgMTYyLCAxNSwgNSwgMjQ2LCA3OSwgCisgICAgMjcsIDI1NCwgMTMxLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDI0NywgMTAwLCAKKyAgICAyNDQsIDMsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjQ3LCAxMDAsIDI0NCwgNCwgMjQ0LCAzLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIAorICAgIDE1NSwgMTUsIDUsIDI0NiwgNzksIDI3LCAyNDMsIDIxNCwgMjQ0LCAzLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIzOCwgMiwgCisgICAgMjQ0LCAzLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIzNiwgMjA4LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIzNiwgMjA5LCAyMjMsIAorICAgIDIyNiwgMTUsIDUsIDI0NiwgNzksIDI3LCAyMzYsIDUsIDE1LCA1LCAyNDYsIDc5LCAyNywgMjM1LCAxODgsIDE1LCA1LCAKKyAgICAyNDYsIDc5LCAyNywgMjM1LCAxNjMsIDI3LCAyMzUsIDE2MiwgMTUsIDUsIDI0NiwgNzksIDI3LCAyMzUsIDY3LCAxNSwgNSwgCisgICAgMjQ2LCA3OSwgMjcsIDIzNCwgMjMxLCAxNSwgNSwgMjQ2LCA3OSwgMjcsIDIyMCwgMTI0LCAxNSwgNSwgMjQ2LCA3OSwgMjcsIAorICAgIDIyMCwgMTE1LCAxNSwgNSwgMjQ1LCAwLCAxNSwgNSwgMjQ1LCAxLCAyNDQsIDMsIDE1LCA1LCAyNDQsIDI1NCwgMTUsIDUsIAorICAgIDI0NCwgMjU1LCAyNywgMTEyLCA4OCwgMjQ5LCAyMDgsIDg4LCAxNTUsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDExMiwgODgsIAorICAgIDE1NSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMTEyLCA4OCwgMjM4LCAxLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNTUsIDEwLCAKKyAgICAyMjIsIDYwLCA4OCwgMjIyLCAxNDcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI1NCwgMTMxLCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyNTQsIDcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI1NCwgNiwgODgsIDI0NCwgMjQwLCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjUyLCAyMDEsIDg4LCAyMDMsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDI1MSwgMjI4LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNTEsIDIyOSwgODgsIDIwMywgMTUsIDUsIDI0NCwgMjU1LCAKKyAgICAyNywgMjQ5LCAyMDcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0OSwgMTUsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0OCwgCisgICAgMjMxLCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0NywgMTA5LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAKKyAgICAyNDYsIDIxNywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQ2LCAyMTgsIDg4LCAyMzUsIDE4OCwgMTUsIDUsIDI0NCwgMjU1LCAKKyAgICAyNywgMjQ2LCAxOTcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0NiwgMTk4LCAyNywgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCAKKyAgICA1LCAyNDQsIDI1NSwgMjcsIDI0NCwgMjI5LCAyMjIsIDU5LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNDQsIDIyMCwgMTUsIDUsIAorICAgIDI0NCwgMjU1LCAyNywgMjQ0LCAxMDMsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0NCwgMTAxLCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyNDQsIDEwMiwgODgsIDYwLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyNDQsIDg4LCA4OCwgMjIzLCAxMDMsIDE1LCA1LCAKKyAgICAyNDQsIDI1NSwgMjcsIDI0MywgMjE0LCA4OCwgMjM0LCAyMzIsIDg4LCAyNDYsIDEzMCwgMTUsIDUsIDI0NCwgMjU1LCAyNywgCisgICAgMjQzLCAxOTcsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDI0MywgMTk4LCA4OCwgMjM1LCAxODgsIDE1LCA1LCAyNDQsIDI1NSwgCisgICAgMjcsIDI0MywgMTEzLCA4OCwgMjM1LCA2NywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjQyLCAxNjksIDE1LCA1LCAyNDQsIAorICAgIDI1NSwgMjcsIDIzOCwgMiwgMjQ0LCAzLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzcsIDE0NiwgODgsIDI0MiwgMTc0LCA4OCwgCisgICAgMjU0LCA3LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzYsIDI0MCwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjM2LCAyMDgsIDE1LCAKKyAgICA1LCAyNDQsIDI1NSwgMjcsIDIzNiwgMTEwLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzYsIDExMSwgODgsIDIzNSwgMTYyLCAKKyAgICAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzYsIDYsIDg4LCAyNTQsIDEzMSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjM1LCAxODgsIAorICAgIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzNCwgMjYsIDg4LCAyNDYsIDE5NywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjMzLCAKKyAgICAxOTYsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIzMSwgMTAzLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMzEsIDEwNCwgMTA0LCAKKyAgICAyMzEsIDEwMywgMTUsIDUsIDI0NCwgMjU1LCAyNywgMTg3LCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMjYsIDE1NiwgMTUsIDUsIAorICAgIDI0NCwgMjU1LCAyNywgMjI2LCAxMzEsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjQ0LCAyNTUsIAorICAgIDI3LCAyMjQsIDI0NywgODgsIDIyMCwgMjQwLCAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMjQsIDIxOSwgMTUsIDUsIDI0NCwgCisgICAgMjU1LCAyNywgMjIzLCA3NCwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjIyLCAxMzAsIDE1LCA1LCAyNDQsIDI1NSwgMjcsIDY4LCAKKyAgICAxNSwgNSwgMjQ0LCAyNTUsIDI3LCAyMjAsIDExNSwgMTUsIDUsIDI0NCwgMjU1LCAyNywgMjIwLCAxMTYsIDg4LCAyNDcsIAorICAgIDExMSwgMTUsIDUsIDI0NCwgMjU1LCAxMDQsIDI0NCwgMjU0LCAxNSwgNSwgMjQ0LCAyNDksIDE1LCA1LCAyNDQsIDI1MCwgCisgICAgMjUwLCA5NSwgMjQ0LCAyNDksIDE1LCA1LCAyNDQsIDI0NywgMTUsIDUsIDI0NCwgMjQ4LCAxMDQsIDI0NCwgMjQ4LCAyNDQsIAorICAgIDIyMSwgMTA0LCAyNDQsIDIyMCwgMTUsIDUsIDI0NCwgMjQwLCAxNSwgNSwgMjQ0LCAyNDEsIDI0NCwgMjQ4LCAxMDQsIDI0NCwgCisgICAgMjQ4LCAyNDQsIDIyMSwgMTA0LCAyNDQsIDIyMCwgMTUsIDUsIDI0NCwgMjM5LCAxNSwgNSwgMjQ0LCAyMzcsIDE1LCA1LCAKKyAgICAyNDQsIDIzMCwgMTUsIDUsIDI0NCwgMjI4LCAxNSwgNSwgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAyNDQsIDIyOSwgCisgICAgMTA0LCAyNDQsIDIyOCwgMTUsIDUsIDI0NCwgMjI5LCAyNTAsIDk1LCAyNDQsIDIyOCwgMTUsIDUsIDI0NCwgMjIwLCAxNSwgCisgICAgNSwgMjQ0LCAyMTksIDE1LCA1LCAyNDQsIDIxNSwgMTUsIDUsIDI0NCwgMTY2LCAxNSwgNSwgMjQ0LCAxNjcsIDI3LCAyMzUsIAorICAgIDI0NywgMTUsIDUsIDI0NCwgMTAzLCAxNSwgNSwgMjQ0LCAxMDQsIDI3LCA3MywgMTUsIDUsIDI0NCwgMTA0LCAyNywgNjgsIAorICAgIDE1LCA1LCAyNDQsIDEwNCwgMjUwLCA5NSwgMjQ0LCAxMDMsIDE1LCA1LCAyNDQsIDEwMSwgMTUsIDUsIDI0NCwgMTAyLCAKKyAgICAxMDQsIDI0NCwgMTAxLCAxNSwgNSwgMjQ0LCAxMDIsIDI1MCwgOTUsIDI0NCwgMTAxLCAxNSwgNSwgMjQ0LCA5OSwgMTUsIDUsIAorICAgIDI0NCwgODcsIDE1LCA1LCAyNDQsIDg4LCAyNDQsIDMsIDE1LCA1LCAyNDQsIDg1LCAxNSwgNSwgMjQ0LCA4NiwgMjcsIDExMiwgCisgICAgODgsIDIzOCwgMSwgMTUsIDUsIDI0NCwgODYsIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDI0NCwgODYsIDI3LCAKKyAgICAyMzgsIDEsIDE1LCA1LCAyNDQsIDg2LCAyNywgMjM0LCAyMzIsIDg4LCAyMzgsIDEsIDE1LCA1LCAyNDQsIDg2LCAyNywgCisgICAgMTg3LCAxNSwgNSwgMjQ0LCA4MywgMTUsIDUsIDI0NCwgODEsIDE1LCA1LCAyNDQsIDgyLCAyNTAsIDk1LCAyNDQsIDgxLCAKKyAgICAxNSwgNSwgMjQ0LCA4MiwgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMjQ0LCA4MiwgMjcsIDIyMiwgMTMwLCAxNSwgNSwgMjQ0LCAKKyAgICA4MiwgMjIyLCA1OSwgMTUsIDUsIDI0NCwgMTcsIDE1LCA1LCAyNDQsIDE4LCAyNTAsIDk1LCAyNDQsIDE3LCAxNSwgNSwgCisgICAgMjQ0LCAxNSwgMTUsIDUsIDI0NCwgMTYsIDI3LCAyMzYsIDI0MCwgMTUsIDUsIDI0NCwgMTYsIDI3LCAyMzYsIDI0MSwgMjcsIAorICAgIDIzOCwgMiwgMjQ0LCAzLCAxNSwgNSwgMjQ0LCAxNiwgMjcsIDIzMSwgMTAzLCAxNSwgNSwgMjQ0LCAxNiwgMjcsIDIyNiwgCisgICAgMTU3LCA4OCwgMjIwLCAyNTMsIDE1LCA1LCAyNDQsIDE2LCAyNDQsIDMsIDE1LCA1LCAyNDQsIDExLCAxNSwgNSwgMjQ0LCAKKyAgICAxMiwgMjcsIDExMiwgODgsIDIzNSwgMjQ3LCAxNSwgNSwgMjQ0LCAxMiwgMjcsIDIzNSwgMjQ3LCAxNSwgNSwgMjQ0LCAxMiwgCisgICAgMTA0LCAyNDQsIDEyLCAyMzQsIDIyNSwgMTUsIDUsIDI0NCwgNywgMTUsIDUsIDI0NCwgNSwgMTUsIDUsIDI0NCwgNiwgMjcsIAorICAgIDIyNCwgMjQ2LCAxNSwgNSwgMjQzLCAyNTMsIDE1LCA1LCAyNDMsIDI1MiwgMTUsIDUsIDI0MywgMjQ5LCAxNSwgNSwgMjQzLCAKKyAgICAyNDgsIDE1LCA1LCAxNTUsIDE1LCA1LCAyNDMsIDIxNCwgMjIyLCA1OSwgMTUsIDUsIDI0MywgMjE0LCAyNDQsIDMsIDE1LCAKKyAgICA1LCAyNDMsIDE5NywgMTUsIDUsIDI0MywgMTEyLCAxNSwgNSwgMjQzLCAxMTMsIDI3LCAyNTQsIDcsIDE1LCA1LCAyNDMsIAorICAgIDExMywgMjcsIDI1NCwgNSwgMTUsIDUsIDI0MywgMTEzLCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyNDMsIDExMywgMjcsIDI0OCwgCisgICAgMjAyLCAxNSwgNSwgMjQzLCAxMTMsIDI3LCAyNDQsIDI0NywgMTUsIDUsIDI0MywgMTEzLCAyNywgMjM2LCAxMDQsIDE1LCA1LCAKKyAgICAyNDMsIDExMywgMjcsIDIzMSwgMTAzLCAxNSwgNSwgMjQzLCAxMTMsIDI3LCAyMjQsIDI0NiwgMTUsIDUsIDI0MywgMTEzLCAKKyAgICAyNywgNjgsIDE1LCA1LCAyNDIsIDE3MywgMTUsIDUsIDI0MiwgMTY5LCAxNSwgNSwgMjQyLCAxNzAsIDI3LCAyNTQsIDEzMSwgCisgICAgMTUsIDUsIDI0MiwgMTcwLCAyNywgMjQzLCAxOTcsIDE1LCA1LCAyNDIsIDE3MCwgMjcsIDIzNiwgMjA4LCAxNSwgNSwgMjQyLCAKKyAgICAxNzAsIDI3LCAyMzUsIDI5LCAxNSwgNSwgMjQyLCAxNzAsIDI3LCAyMjAsIDExNSwgMTUsIDUsIDI0MiwgMTY2LCAxNSwgNSwgCisgICAgNzIsIDE1LCA1LCAyNDIsIDEwNywgNjAsIDE1LCA1LCAyNDIsIDY5LCAxNSwgNSwgMjM4LCAyOSwgMTUsIDUsIDIzOCwgMzAsIAorICAgIDEwNCwgMjM4LCAzMCwgMjUxLCAyMjgsIDE1LCA1LCAyMzgsIDMwLCAxMDQsIDIzOCwgMzAsIDIyMywgMjI2LCAxNSwgNSwgCisgICAgMjM4LCA0LCAxNSwgNSwgMjM4LCAxLCAxNSwgNSwgMjM4LCAyLCAyNDgsIDI1NSwgMTUsIDUsIDIzOCwgMiwgMjI3LCAxNDcsIAorICAgIDE1LCA1LCAyMzgsIDIsIDEwNCwgMjM4LCAyLCAyMjQsIDIwNSwgMTA0LCAyMjQsIDIwNSwgMjIwLCAxMTYsIDEwNCwgMjIwLCAKKyAgICAxMTUsIDE1LCA1LCAyMzgsIDIsIDI0NCwgMywgMTUsIDUsIDIzNywgMjQ5LCAxNSwgNSwgMjM3LCAyNTAsIDI3LCAyNDQsIAorICAgIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIzNywgMjQ4LCAxNSwgNSwgMjM3LCAyMzgsIDE1LCA1LCAyMzcsIDIzOSwgMjcsIDIyMiwgCisgICAgMTMwLCAxNSwgNSwgMjM3LCAyMzksIDI1MCwgOTUsIDIzNywgMjM4LCAxNSwgNSwgMjM3LCAyMzksIDIzMCwgMTEwLCAyMzcsIAorICAgIDIzOCwgMTUsIDUsIDIzNywgMjM5LCAyMjMsIDIyNiwgMTUsIDUsIDIzNywgMjMxLCAxNSwgNSwgMjM3LCAyMjMsIDE1LCA1LCAKKyAgICAyMzcsIDE1NiwgMTUsIDUsIDIzNywgMTQ1LCAxNSwgNSwgMTc1LCAxNSwgNSwgMjA2LCAyNywgNjAsIDE1LCA1LCAyMDYsIAorICAgIDI3LCAyNTQsIDI0NCwgMTUsIDUsIDIwNiwgMjcsIDI1NCwgMjQ1LCA4OCwgMjM2LCA1LCAxNSwgNSwgMjA2LCAyNywgMjU0LCAKKyAgICA1LCAxNSwgNSwgMjA2LCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyMDYsIDI3LCAyNTIsIDIxNiwgMTUsIDUsIDIwNiwgMjcsIAorICAgIDEzNSwgMTUsIDUsIDIwNiwgMjcsIDI1MiwgODQsIDE1LCA1LCAyMDYsIDI3LCAyNDYsIDE0MywgMTUsIDUsIDIwNiwgMjcsIAorICAgIDI0NiwgMTMwLCAxNSwgNSwgMjA2LCAyNywgMjQ1LCAwLCAxNSwgNSwgMjA2LCAyNywgMjQ0LCAyNDAsIDE1LCA1LCAyMDYsIAorICAgIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIwNiwgMjcsIDI0NCwgMjIwLCAxNSwgNSwgMjA2LCAyNywgMjQ0LCAKKyAgICAyMjEsIDg4LCAyMjUsIDI0LCA4OCwgNjAsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIDEwMywgMTUsIDUsIDIwNiwgMjcsIDI0NCwgCisgICAgODcsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIDgyLCA4OCwgMjI2LCAxMzEsIDE1LCA1LCAyMDYsIDI3LCAyNDQsIDgyLCAyNTAsIAorICAgIDk1LCAyNDQsIDgxLCAxNSwgNSwgMjA2LCAyNywgMjQ0LCAxNywgMTUsIDUsIDIwNiwgMjcsIDI0MywgMjUyLCAxNSwgNSwgCisgICAgMjA2LCAyNywgMjM4LCAxLCAxNSwgNSwgMjA2LCAyNywgMjM3LCAyMzgsIDE1LCA1LCAyMDYsIDI3LCAyMzYsIDI0MCwgMTUsIAorICAgIDUsIDIwNiwgMjcsIDIzNiwgMTEzLCAxNSwgNSwgMjA2LCAyNywgMjM2LCAxMTAsIDE1LCA1LCAyMDYsIDI3LCAyMzUsIDY3LCAKKyAgICAxNSwgNSwgMjA2LCAyNywgMjM0LCAyMzEsIDE1LCA1LCAyMDYsIDI3LCAyMzQsIDI1LCAxNSwgNSwgMjA2LCAyNywgMjM0LCAKKyAgICAyNiwgODgsIDI0NywgMTExLCAxNSwgNSwgMjA2LCAyNywgMjM0LCAyNiwgODgsIDI0NCwgMTAzLCAxNSwgNSwgMjA2LCAyNywgCisgICAgMjM0LCAyNiwgODgsIDIyMiwgODcsIDE1LCA1LCAyMDYsIDI3LCAyMzMsIDE5NiwgMTUsIDUsIDIwNiwgMjcsIDIzMywgMTk3LCAKKyAgICA4OCwgMjMxLCA5OCwgMTUsIDUsIDIwNiwgMjcsIDIzMiwgMTQxLCAxNSwgNSwgMjA2LCAyNywgMjMxLCAxMDMsIDE1LCA1LCAKKyAgICAyMDYsIDI3LCAyMjksIDEwOCwgMTUsIDUsIDIwNiwgMjcsIDIyNywgMjIsIDE1LCA1LCAyMDYsIDI3LCAyMjYsIDE3NywgMTUsIAorICAgIDUsIDIwNiwgMjcsIDIyNiwgMTMxLCAxNSwgNSwgMjA2LCAyNywgMjI1LCAyNSwgMTUsIDUsIDIwNiwgMjcsIDIyNCwgMjQ2LCAKKyAgICAxNSwgNSwgMjA2LCAyNywgMjI0LCAyMTksIDE1LCA1LCAyMDYsIDI3LCAyMjQsIDE3MCwgMTUsIDUsIDIwNiwgMjcsIDIyNCwgCisgICAgMTMyLCAxNSwgNSwgMjA2LCAyNywgMjIzLCA4MSwgMTUsIDUsIDIwNiwgMjcsIDIyMiwgMTEyLCAxNSwgNSwgMjA2LCAyNywgCisgICAgNjgsIDE1LCA1LCAyMDYsIDI3LCAyMjAsIDEyNCwgMTUsIDUsIDIwNiwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjA2LCAyNywgCisgICAgMjIwLCA5MCwgMjcsIDE4NywgMTUsIDUsIDIwNiwgMjcsIDIyMCwgMzAsIDE1LCA1LCAyMDYsIDI3LCAyMTcsIDQyLCAxNSwgCisgICAgNSwgMjM3LCA2LCAxNSwgNSwgMjM3LCA3LCAyNTAsIDk1LCAyMzcsIDYsIDE1LCA1LCAyMzYsIDI1NSwgMTUsIDUsIDIzNiwgCisgICAgMjUzLCAxNSwgNSwgMjM2LCAyNTEsIDE1LCA1LCAyMzYsIDI1MCwgMTUsIDUsIDIzNiwgMjQ4LCAxNSwgNSwgMjM2LCAyNDksIAorICAgIDEwNCwgMjM2LCAyNDgsIDE1LCA1LCAyMzYsIDI0MCwgMTUsIDUsIDIzNiwgMjQxLCAyNywgMjM4LCAyLCAyNDQsIDMsIDE1LCAKKyAgICA1LCAyMzYsIDIzNiwgMTUsIDUsIDIzNiwgMjM3LCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyMzYsIDIzNywgMjUwLCA5NSwgCisgICAgMjM2LCAyMzYsIDE1LCA1LCAyMzYsIDIzNSwgMTUsIDUsIDIzNiwgMjM0LCAxNSwgNSwgMjM2LCAyMDgsIDE1LCA1LCAyMzYsIAorICAgIDIwOSwgMjM1LCAxNzUsIDI3LCAxMDUsIDEwNCwgMjM1LCAxNzUsIDI3LCA2OCwgMTUsIDUsIDIzNiwgMjA5LCAxMDQsIDIzNiwgCisgICAgMjA5LCAyMzUsIDE3NSwgMjcsIDEwNSwgMTA0LCAyMzUsIDE3NSwgMjcsIDY4LCAxNSwgNSwgMjM2LCAxNjAsIDE1LCA1LCAKKyAgICAyMzYsIDExMywgMTUsIDUsIDIzNiwgMTE0LCAyNywgMjUyLCAyMjgsIDE1LCA1LCAyMzYsIDExNCwgMjcsIDY4LCAxNSwgNSwgCisgICAgMjM2LCAxMTQsIDI3LCAyMjAsIDExNSwgMTUsIDUsIDIzNiwgMTEwLCAxNSwgNSwgMjM2LCAxMDQsIDE1LCA1LCAyMzYsIDkzLCAKKyAgICAxNSwgNSwgMjM2LCA5MiwgMTUsIDUsIDIzNiwgOTAsIDE1LCA1LCAyMzYsIDkxLCAxMDQsIDIzNiwgOTAsIDE1LCA1LCAyMzYsIAorICAgIDcsIDE1LCA1LCAyMzYsIDgsIDEwNCwgMjQzLCAxMTMsIDI3LCAyNTQsIDYsIDIzNiwgOCwgMTA0LCAyNDMsIDExMywgMjcsIAorICAgIDI1NCwgNSwgMTUsIDUsIDIzNiwgNSwgMTUsIDUsIDIzNiwgMywgMTUsIDUsIDIzNiwgNCwgMjE5LCAxNzcsIDE3LCAxNSwgNSwgCisgICAgMjM2LCAyLCAxNSwgNSwgMjM2LCAwLCAxNSwgNSwgMjM2LCAxLCAyNDQsIDMsIDE1LCA1LCAyMzUsIDI1NSwgMTUsIDUsIAorICAgIDIzNSwgMjQ3LCAxNSwgNSwgMjM1LCAyNDgsIDIzMCwgMTEwLCAyMzUsIDI0NywgMTUsIDUsIDIzNSwgMjQyLCAxNSwgNSwgCisgICAgMjM1LCAyMjUsIDE1LCA1LCAyMzUsIDE4OCwgMTUsIDUsIDIzNSwgMTc0LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCA2MCwgMTUsIAorICAgIDUsIDIzNSwgMTc1LCAyNywgMTEyLCA4OCwgMjQ5LCAyMDgsIDg4LCAxNTUsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDExMiwgCisgICAgODgsIDI0NCwgMjIwLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAxMTIsIDg4LCAyMzUsIDE2MiwgMTUsIDUsIDIzNSwgMTc1LCAKKyAgICAyNywgMjU0LCAxNzUsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI1NCwgMTMxLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyNTQsIDgsIAorICAgIDIxNywgMzgsIDIyMiwgNTksIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI1MiwgMjI4LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAKKyAgICAyNTIsIDg0LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyNDksIDE1NiwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjQ2LCAxOTcsIAorICAgIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI0NSwgMCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjQ0LCAyMjAsIDE1LCA1LCAyMzUsIAorICAgIDE3NSwgMjcsIDI0NCwgMTEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI0NCwgMTIsIDg4LCAyNDQsIDExLCAxNSwgNSwgMjM1LCAKKyAgICAxNzUsIDI3LCAxNTUsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDI0MywgMTk3LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyNDMsIAorICAgIDExMywgMjcsIDIzMSwgMTAzLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzgsIDIsIDI0NCwgMywgMTUsIDUsIDIzNSwgMTc1LCAKKyAgICAyNywgMjM3LCAyMzgsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNywgMjM5LCA4OCwgMTU1LCAxNSwgNSwgMjM1LCAxNzUsIAorICAgIDI3LCAyMzcsIDIzOSwgODgsIDIzNCwgMjMxLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzYsIDExMywgMTUsIDUsIDIzNSwgCisgICAgMTc1LCAyNywgMjM2LCAxMDQsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNiwgNSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM2LCAKKyAgICAwLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzYsIDEsIDg4LCAyNDMsIDExMywgODgsIDYwLCAxNSwgNSwgMjM1LCAxNzUsIAorICAgIDI3LCAyMzUsIDE3NCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM1LCAyOSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjM0LCAKKyAgICAyMzEsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzNCwgMjIxLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMzQsIDI1LCAxNSwgNSwgCisgICAgMjM1LCAxNzUsIDI3LCAyMzQsIDI2LCA4OCwgMjQ2LCAxOTcsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIzMywgNjIsIDE1LCA1LCAKKyAgICAyMzUsIDE3NSwgMjcsIDIzMiwgMTQxLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMjQsIDI0NywgODgsIDIyMywgNzQsIDE1LCAKKyAgICA1LCAyMzUsIDE3NSwgMjcsIDIyNCwgMjAzLCA4OCwgMjQ0LCA4MiwgODgsIDI0NiwgMTQzLCAxNSwgNSwgMjM1LCAxNzUsIAorICAgIDI3LCAyMjQsIDIwMywgODgsIDI0NCwgODIsIDIyMiwgNTksIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDIyNCwgMTY4LCAxNSwgNSwgCisgICAgMjM1LCAxNzUsIDI3LCAyMjQsIDE2OSwgODgsIDIyNCwgMTY4LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMjMsIDc0LCAxNSwgCisgICAgNSwgMjM1LCAxNzUsIDI3LCAyMjIsIDE0MSwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjIyLCAxMzAsIDE1LCA1LCAyMzUsIAorICAgIDE3NSwgMjcsIDIyMiwgODgsIDg4LCAxMTIsIDg4LCAyMjMsIDEwNCwgODgsIDIwOCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgCisgICAgNjgsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIDEwNSwgODgsIDYwLCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAxMDUsIDg4LCAxMDUsIAorICAgIDg4LCA2OCwgMTUsIDUsIDIzNSwgMTc1LCAyNywgMjIwLCAxMjUsIDg4LCAyNTQsIDcsIDE1LCA1LCAyMzUsIDE3NSwgMjcsIAorICAgIDIyMCwgMTE1LCAxNSwgNSwgMjM1LCAxNzUsIDI3LCAyMjAsIDMwLCAxNSwgNSwgMjM1LCAxNzUsIDIyMywgMjI2LCAxNSwgNSwgCisgICAgMjM1LCAxNzIsIDE1LCA1LCAyMzUsIDE3MywgMjcsIDIyNCwgMjQ2LCAxNSwgNSwgMjM1LCAxNzMsIDI3LCAyMjQsIDI0NywgCisgICAgODgsIDIyMywgNzQsIDE1LCA1LCAyMzUsIDE3MywgMjQ0LCAzLCAxNSwgNSwgMjM1LCAxNzMsIDI0NCwgNCwgMTA0LCAyMzUsIAorICAgIDE3MywgMjQ0LCA0LCAyMjQsIDI0NiwgMTUsIDUsIDIzNSwgMTY5LCAxNSwgNSwgMjM1LCAxNjIsIDE1LCA1LCAyMzUsIDE2MywgCisgICAgMjcsIDIzNSwgMTYyLCAxNSwgNSwgMjM1LCAxNjAsIDE1LCA1LCAyMzUsIDE2MSwgMjcsIDIzNSwgMjQ3LCAxNSwgNSwgMjM1LCAKKyAgICAxNjEsIDI3LCAyMzUsIDI0OCwgODgsIDIyNywgMjIsIDE1LCA1LCAyMzUsIDY3LCAxNSwgNSwgMjM1LCA1NCwgMTUsIDUsIAorICAgIDIzNSwgNDYsIDE1LCA1LCAyMzUsIDI5LCAxNSwgNSwgMjM0LCAyMzEsIDE1LCA1LCAyMzQsIDIzMiwgMjcsIDI1MiwgMjI4LCAKKyAgICAxNSwgNSwgMjM0LCAyMjksIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDI1NCwgMTc1LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyNTIsIAorICAgIDIyOCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjQ2LCAxMzAsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDI0NiwgMTMxLCAyMjIsIAorICAgIDU5LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjQzLCAKKyAgICAxMTMsIDI3LCAyNTIsIDIyOCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjM3LCAyMzgsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIAorICAgIDIzNiwgMjUzLCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzYsIDI1MSwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjM2LCAyNTIsIAorICAgIDg4LCAyNTQsIDcsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIzNiwgMTEzLCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMzUsIDE4OSwgCisgICAgODgsIDI1NCwgNywgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjM1LCAxNzQsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIzNCwgMjYsIAorICAgIDg4LCAyNDYsIDE5NywgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjMyLCAxNDEsIDE1LCA1LCAyMzQsIDIzMCwgMjcsIDIzMSwgCisgICAgMTQ0LCAxNSwgNSwgMjM0LCAyMzAsIDI3LCAyMjQsIDE0MSwgODgsIDI1NCwgNywgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjI0LCAKKyAgICAxMjQsIDg4LCAyNTEsIDI0OCwgMTUsIDUsIDIzNCwgMjMwLCAyNywgMjIwLCAyNTMsIDE1LCA1LCAyMzQsIDIzMCwgMjIyLCAKKyAgICA1OSwgMTUsIDUsIDIzNCwgMjMwLCAyNTAsIDk1LCAyMzQsIDIyOSwgMTUsIDUsIDIzNCwgMjMwLCAyMzAsIDExMCwgMjM0LCAKKyAgICAyMjksIDE1LCA1LCAyMzQsIDIzMCwgMjIzLCAyMjYsIDE1LCA1LCAyMzQsIDIzMCwgMjI0LCAyMjgsIDE1LCA1LCAyMzQsIAorICAgIDIyOCwgMTUsIDUsIDIzNCwgMjI1LCAxNSwgNSwgMjM0LCAyMjYsIDEwNCwgMjM0LCAyMjUsIDE1LCA1LCAyMzQsIDIyNiwgCisgICAgMjMwLCAxMTAsIDIzNCwgMjI1LCAxNSwgNSwgMjM0LCAyMjYsIDIyNCwgMjI4LCAxNSwgNSwgMjM0LCAyMjQsIDE1LCA1LCAKKyAgICAyMzQsIDIyMSwgMTUsIDUsIDIzNCwgMjE5LCAxNSwgNSwgMjM0LCAyMjAsIDEwNCwgMjM0LCAyMTksIDE1LCA1LCAyMzQsIAorICAgIDIyMCwgMTA0LCAyMzQsIDIyMCwgMjQ0LCAyMjEsIDEwNCwgMjQ0LCAyMjAsIDE1LCA1LCAxOTYsIDE1LCA1LCAyMzQsIDEyMCwgCisgICAgMjcsIDIyMiwgMTMwLCAxNSwgNSwgMjM0LCAxMjAsIDI0NCwgMywgMTUsIDUsIDIzNCwgMTE5LCAxNSwgNSwgMjM0LCAxMDYsIAorICAgIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA1NywgMTUsIDUsIDIzNCwgNTYsIDE1LCA1LCAyMzQsIDI1LCAxNSwgNSwgCisgICAgMjMzLCAyNDQsIDE1LCA1LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTU5LCAxNSwgNSwgMjMzLCA5OSwgMTUsIDUsIDIzMywgCisgICAgMTAwLCAxMDQsIDIzMywgOTksIDE1LCA1LCAyMzMsIDkyLCAxNSwgNSwgMjMzLCA5MywgMjQ0LCAzLCAxNSwgNSwgMjMzLCAKKyAgICA3OCwgMTUsIDUsIDIzMywgNjUsIDE1LCA1LCAyMzMsIDYyLCAxNSwgNSwgMjMzLCA2MywgMjcsIDYwLCAxNSwgNSwgMjMzLCAKKyAgICA2MywgMjcsIDIzNSwgMjQ3LCAxNSwgNSwgMjMzLCA2MywgMjcsIDIxNywgMTE0LCAxNSwgNSwgMjMzLCA2MywgMTA0LCAyMzMsIAorICAgIDYyLCAxNSwgNSwgMjMzLCA2MywgMTA0LCAyMzMsIDYzLCAyNywgMTEyLCA4OCwgMjA4LCAxNSwgNSwgMjMzLCA2MywgMjUwLCAKKyAgICA5NSwgMjMzLCA2MiwgMTUsIDUsIDIzMywgNjAsIDE1LCA1LCAyMzMsIDYxLCAyNywgNjAsIDE1LCA1LCAyMzMsIDYxLCAyNywgCisgICAgMTEyLCA4OCwgMjQ5LCAxNSwgMTUsIDUsIDIzMywgNjEsIDI3LCAyNDksIDE1LCAxNSwgNSwgMjMzLCA2MSwgMjQ0LCAzLCAKKyAgICAxNSwgNSwgMjA4LCAxNSwgNSwgMjMyLCAyMzcsIDE1LCA1LCAyMzIsIDIyNywgMTUsIDUsIDIzMiwgMjI4LCAyMzcsIDE2OSwgCisgICAgMTUsIDUsIDIzMiwgMjI4LCAyNywgMjI0LCAxNzEsIDIyMiwgNTksIDE1LCA1LCAyMzIsIDIyOCwgMjMwLCAxMTAsIDIzMiwgCisgICAgMjI3LCAxNSwgNSwgMjMyLCAyMjYsIDE1LCA1LCAyMzIsIDIyMiwgMjMxLCA5MCwgMTUsIDUsIDIzMiwgMjIxLCAxNSwgNSwgCisgICAgMjMyLCAyMjAsIDE1LCA1LCAyMzIsIDE0MSwgMTUsIDUsIDIzMiwgMTQyLCAyNywgNjAsIDE1LCA1LCAyMzIsIDE0MiwgMjcsIAorICAgIDIyMCwgMTE1LCAxNSwgNSwgMjMyLCAxNDIsIDIyNCwgMjI4LCAxNSwgNSwgMjMyLCA2MiwgMTUsIDUsIDIzMiwgNjMsIDI3LCAKKyAgICA3MywgMTUsIDUsIDIzMiwgNjEsIDE1LCA1LCAyMzIsIDM0LCAxNSwgNSwgMjMyLCAzNSwgMjcsIDI0NCwgMjI5LCAyMjIsIAorICAgIDU5LCAxNSwgNSwgMjMyLCAzNSwgMjcsIDI0NCwgMjIxLCA4OCwgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAyMzIsIDMyLCAKKyAgICAxNSwgNSwgMjMyLCAzMywgMjcsIDI1NCwgMTMxLCAxNSwgNSwgMjMyLCAzMywgMjcsIDI1NCwgNywgMTUsIDUsIDIzMiwgMzMsIAorICAgIDI3LCAyNTQsIDgsIDg4LCAyNTQsIDcsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjQ0LCAxMSwgMTUsIDUsIDIzMiwgMzMsIDI3LCAKKyAgICAyMzQsIDI2LCA4OCwgMjQ0LCAyMjksIDIyMiwgNTksIDE1LCA1LCAyMzIsIDMzLCAyNywgMjMyLCAxNDEsIDE1LCA1LCAyMzIsIAorICAgIDMzLCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjI0LCAyNDYsIDE1LCA1LCAyMzIsIDMzLCAyNywgMjI0LCAKKyAgICAyNDcsIDg4LCAxMTIsIDI1NCwgMTMxLCAxNSwgNSwgMjMyLCAzMywgMjcsIDIyNCwgMjQ3LCA4OCwgMjU0LCA3LCAxNSwgNSwgCisgICAgMjMyLCAzMywgMjcsIDIyNCwgMjQ3LCA4OCwgMjU0LCA4LCA4OCwgMjU0LCA3LCAxNSwgNSwgMjMyLCAzMywgMjcsIDIyMCwgCisgICAgMTI1LCA4OCwgMjU0LCA3LCAxNSwgNSwgMjMyLCAzMywgMjcsIDIyMCwgMzAsIDE1LCA1LCAyMzIsIDIyLCAxNSwgNSwgMjMxLCAKKyAgICAxNDQsIDE1LCA1LCAyMzEsIDExNywgMTUsIDUsIDIzMSwgMTAzLCAxNSwgNSwgMjMxLCAxMDQsIDIzNSwgMTczLCAyNywgCisgICAgMjQ0LCAyMjAsIDE1LCA1LCAyMzEsIDEwNCwgMjM1LCAxNzMsIDI3LCAyMzQsIDU3LCAxNSwgNSwgMjMxLCAxMDQsIDIzNSwgCisgICAgMTczLCAyNywgMjI2LCAxNTYsIDE1LCA1LCAyMzEsIDEwNCwgMjM1LCAxNzMsIDI3LCAyMjYsIDE1NywgMTA0LCAyMzEsIAorICAgIDEwNCwgMjM1LCAxNzMsIDI3LCAyMjYsIDE1NiwgMTUsIDUsIDIzMSwgMTA0LCAyMzUsIDE3MywgMjcsIDIyMCwgMzAsIDE1LCAKKyAgICA1LCAyMzEsIDEwNCwgMjIyLCA1OSwgMTUsIDUsIDIzMSwgMTA0LCAxMDQsIDIzMSwgMTAzLCAxNSwgNSwgMjMxLCAxMDQsIAorICAgIDI1MCwgOTUsIDIzMSwgMTAzLCAxNSwgNSwgMjMxLCAxMDQsIDI1MCwgOTUsIDIzMSwgMTA0LCAyMzUsIDE3MywgMTA0LCAKKyAgICAyMzUsIDE3MiwgMTUsIDUsIDIzMSwgOTgsIDE1LCA1LCAyMzEsIDk5LCAyNTUsIDEwLCAyNywgMjU0LCAzLCAxNSwgNSwgCisgICAgMjMxLCA5OSwgMjU1LCAxMCwgMjcsIDI1MiwgODQsIDE1LCA1LCAyMzEsIDk5LCAyNTUsIDEwLCAyNywgMjQ3LCAxMDcsIDE1LCAKKyAgICA1LCAyMzEsIDk5LCAyNTUsIDEwLCAyNywgMjQ0LCAxMSwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyMzgsIDIsIAorICAgIDI0NCwgMywgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyMzYsIDI1MSwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIAorICAgIDI3LCAyMzUsIDE4OCwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyMzIsIDE0MSwgMTUsIDUsIDIzMSwgOTksIDI1NSwgCisgICAgMTAsIDI3LCAyMjQsIDEyMSwgMTUsIDUsIDIzMSwgOTksIDI1NSwgMTAsIDI3LCAyMjAsIDEyNCwgMTUsIDUsIDIzMSwgOTksIAorICAgIDIzNiwgOTEsIDI3LCAyNTIsIDg0LCAxNSwgNSwgMjMxLCA5OSwgMjM2LCA5MSwgMjcsIDI1MiwgODUsIDY4LCAxNSwgNSwgCisgICAgMTg3LCAxNSwgNSwgMjMwLCAzNywgMTUsIDUsIDIzMCwgMTIsIDE1LCA1LCAyMjksIDI0NiwgMTUsIDUsIDIyOSwgMTUyLCAKKyAgICAxNSwgNSwgMjI5LCAxMDgsIDE1LCA1LCAyMjksIDEwOSwgMjcsIDYwLCAxNSwgNSwgMjI5LCAxMDksIDI3LCAyNTUsIDExLCAKKyAgICAxNSwgNSwgMjI5LCAxMDksIDI3LCAyNTIsIDg0LCAxNSwgNSwgMjI5LCAxMDksIDI3LCAyNTEsIDI0OCwgMTUsIDUsIDIyOSwgCisgICAgMTA5LCAyNywgNzMsIDE1LCA1LCAyMjksIDEwOSwgMjcsIDcyLCAxNSwgNSwgMjI5LCAxMDksIDI3LCAyNDIsIDY5LCAxNSwgCisgICAgNSwgMjI5LCAxMDksIDI3LCA2OCwgMTUsIDUsIDIyOSwgMTA5LCAyNywgMjIwLCAxMjQsIDE1LCA1LCAyMjksIDEwOSwgMjUwLCAKKyAgICA5NSwgMjI5LCAxMDgsIDE1LCA1LCAyMjksIDY3LCAxNSwgNSwgMjI5LCA2OCwgMjcsIDIzNiwgMjM2LCAxNSwgNSwgMjI5LCAKKyAgICA2OCwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjI5LCA2OCwgMjcsIDIxNywgMTE0LCAxNSwgNSwgMjI5LCA2OCwgMjMwLCAxMTAsIAorICAgIDIyOSwgNjcsIDE1LCA1LCAyMDMsIDE1LCA1LCAyMjcsIDI1NCwgMTUsIDUsIDIyNywgMTQ3LCAxNSwgNSwgMjI3LCAyMiwgCisgICAgMTUsIDUsIDIyNiwgMTc3LCAxNSwgNSwgMjI2LCAxNjYsIDIzMSwgOTAsIDE1LCA1LCAyMjYsIDE2NSwgMTUsIDUsIDIyNiwgCisgICAgMTY2LCAyNywgNjAsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDI0NywgMTExLCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyNDcsIAorICAgIDEwOSwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMTU1LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMzYsIDI0MCwgMTUsIDUsIDIyNiwgCisgICAgMTY2LCAyNywgMjM1LCAyNDcsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDIzNCwgMjE5LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAKKyAgICAyMzMsIDE5NiwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyMjYsIDE2NiwgMjcsIDIyNiwgMTU2LCAKKyAgICAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMjQsIDIxOSwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjIyLCAxNDcsIDE1LCA1LCAyMjYsIAorICAgIDE2NiwgMjcsIDIyMCwgMTI0LCAxNSwgNSwgMjI2LCAxNjYsIDI3LCAyMjAsIDEyMSwgMTUsIDUsIDIyNiwgMTY2LCAyNywgCisgICAgMjIwLCA5NCwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjIwLCA1MCwgMTUsIDUsIDIyNiwgMTY2LCAyNywgMjIwLCAzMCwgMTUsIAorICAgIDUsIDIyNiwgMTY2LCAxMDQsIDIyNiwgMTY1LCAxNSwgNSwgMjI2LCAxNjYsIDI0NCwgMywgMTUsIDUsIDIyNiwgMTU2LCAxNSwgCisgICAgNSwgMjI2LCAxNTcsIDIzNSwgMTc1LCAyNywgMjU0LCA1LCAxNSwgNSwgMjI2LCAxMzgsIDE1LCA1LCAyMjYsIDEzMSwgMTUsIAorICAgIDUsIDIyNSwgMjUsIDE1LCA1LCAyMjUsIDIzLCAxNSwgNSwgMjI1LCAyNCwgMjcsIDYwLCAxNSwgNSwgMjI1LCAyNCwgMjcsIAorICAgIDI1MiwgMjI4LCAxNSwgNSwgMjI1LCAyNCwgMjcsIDI0NCwgODEsIDE1LCA1LCAyMjUsIDI0LCAyNywgMjMyLCAxNDEsIDE1LCAKKyAgICA1LCAyMjUsIDI0LCAyNywgMjI0LCAxNjgsIDE1LCA1LCAyMjUsIDI0LCAyNywgMjIwLCAyNDAsIDE1LCA1LCAyMjUsIDI0LCAKKyAgICAyNywgNjgsIDE1LCA1LCAyMjUsIDI0LCAyNywgMTA1LCA4OCwgNjAsIDE1LCA1LCAyMjUsIDIyLCAxNSwgNSwgMjI1LCAyMCwgCisgICAgMTUsIDUsIDIyNSwgMywgMTUsIDUsIDIyNCwgMjQ2LCAxNSwgNSwgMjI0LCAyNDcsIDI0MiwgMTczLCAxNSwgNSwgMjI0LCAKKyAgICAyNDcsIDEwNCwgMjI0LCAyNDcsIDI0NCwgMjQ4LCAxMDQsIDI0NCwgMjQ4LCAyNDQsIDIyMSwgMTA0LCAyNDQsIDIyMCwgMTUsIAorICAgIDUsIDIyNCwgMjQ3LCAxMDQsIDIyNCwgMjQ3LCAyMjIsIDE0OCwgMTA0LCAyMjIsIDE0OCwgMjQ0LCAyMjEsIDEwNCwgMjQ0LCAKKyAgICAyMjAsIDE1LCA1LCAyMjQsIDIzOSwgMTUsIDUsIDIyNCwgMjM0LCAxNSwgNSwgMjI0LCAyMzEsIDE1LCA1LCAyMjQsIDIzMCwgCisgICAgMTUsIDUsIDIyNCwgMjI3LCAxNSwgNSwgMjI0LCAyMTksIDE1LCA1LCAyMjQsIDIyMCwgMjcsIDYwLCAxNSwgNSwgMjI0LCAKKyAgICAyMjAsIDI3LCAyMzcsIDIzOCwgMTUsIDUsIDIyNCwgMjEzLCAxNSwgNSwgMjI0LCAyMTQsIDI3LCA2MCwgMTUsIDUsIDIyNCwgCisgICAgMjE0LCAyNywgMjUyLCAyMTcsIDE1LCA1LCAyMjQsIDIxNCwgMjcsIDI1MSwgMjM3LCAxNSwgNSwgMjI0LCAyMTQsIDI3LCAKKyAgICAyNDgsIDIxOSwgMTUsIDUsIDIyNCwgMjE0LCAyNywgMjQ0LCAyMjAsIDE1LCA1LCAyMjQsIDIxNCwgMjcsIDIzOCwgMSwgMTUsIAorICAgIDUsIDIyNCwgMjE0LCAyNywgMjM4LCAyLCAyNDQsIDMsIDE1LCA1LCAyMjQsIDIxNCwgMjcsIDIzNSwgMjQyLCAxNSwgNSwgCisgICAgMjI0LCAyMTQsIDI3LCAyMzQsIDIyMSwgMTUsIDUsIDIyNCwgMjE0LCAyNywgMjMzLCA5MiwgMTUsIDUsIDIyNCwgMjE0LCAKKyAgICAyNywgMjI2LCAxNTYsIDE1LCA1LCAyMjQsIDIwOCwgMTUsIDUsIDIyNCwgMjA0LCAxNSwgNSwgMjI0LCAyMDUsIDIyMiwgNTksIAorICAgIDE1LCA1LCAyMjQsIDIwNSwgMTA0LCAyMjQsIDIwNSwgMjUxLCAyMjksIDEwNCwgMjUxLCAyMjgsIDE1LCA1LCAyMjQsIDIwMiwgCisgICAgMTUsIDUsIDIyNCwgMTcwLCAxNSwgNSwgMjI0LCAxNzEsIDEwNCwgMjM3LCAxNzAsIDIyNCwgMTcwLCAxNSwgNSwgMjI0LCAKKyAgICAxNjgsIDE1LCA1LCAyMjQsIDE2NywgMTUsIDUsIDIyNCwgMTQwLCAxNSwgNSwgMjI0LCAxNDEsIDI0NCwgMywgMTUsIDUsIAorICAgIDIyNCwgMTMyLCAxNSwgNSwgMjI0LCAxMzAsIDE1LCA1LCAyMjQsIDEzMSwgMTA0LCAyMjQsIDEzMSwgMjI0LCAxNjgsIDE1LCAKKyAgICA1LCAyMjQsIDEyMywgMTUsIDUsIDIyNCwgMTIxLCAxNSwgNSwgMjIzLCAxMDMsIDE1LCA1LCAyMjMsIDEwNCwgMTA0LCAyMjMsIAorICAgIDEwMywgMTUsIDUsIDIyMywgODMsIDE1LCA1LCAyMjMsIDgyLCAxNSwgNSwgMjIzLCA4MSwgMTUsIDUsIDIyMywgNzQsIDE1LCAKKyAgICA1LCAyMjMsIDczLCAxNSwgNSwgMjIzLCA1MywgMTUsIDUsIDIyMywgNTIsIDE1LCA1LCAyMjIsIDE1NSwgMTUsIDUsIDIyMiwgCisgICAgMTU2LCAyNTMsIDI1MSwgMTUsIDUsIDIyMiwgMTU2LCAyNywgMjQzLCAxMTIsIDE1LCA1LCAyMjIsIDE1NiwgMjcsIDIzMywgCisgICAgMTk2LCAxNSwgNSwgMjIyLCAxNTYsIDI0NCwgMywgMTUsIDUsIDIyMiwgMTQ3LCAxNSwgNSwgMjIyLCAxNDgsIDEwNCwgMjIyLCAKKyAgICAxNDgsIDIzMiwgNjMsIDEwNCwgMjMyLCA2MywgMjQ4LCAyMDMsIDEwNCwgMjQ4LCAyMDIsIDE1LCA1LCAyMjIsIDE0OCwgCisgICAgMjIzLCAyMjYsIDE1LCA1LCAyMjIsIDE0MSwgMTUsIDUsIDExOCwgMjcsIDI1MiwgODQsIDE1LCA1LCAxMTgsIDI3LCAyNDQsIAorICAgIDExLCAxNSwgNSwgMTE4LCAyNywgMjI0LCAyNDYsIDE1LCA1LCAxMTgsIDI3LCAyMjQsIDE3MCwgMTUsIDUsIDExOCwgMjcsIAorICAgIDIyMCwgMjUzLCAxNSwgNSwgMTE4LCAyNywgMjIwLCAxMTUsIDE1LCA1LCAyMjIsIDEzMCwgMTUsIDUsIDIyMiwgMTEyLCAxNSwgCisgICAgNSwgMjIyLCA4NywgMTUsIDUsIDIyMiwgODgsIDI0NCwgMywgMTUsIDUsIDIyMSwgMjA1LCAxNSwgNSwgMjIxLCAyMDYsIAorICAgIDIyMiwgNTksIDE1LCA1LCAyMjEsIDE4MSwgMTUsIDUsIDIyMSwgMTY1LCAxNSwgNSwgMjIxLCAxNjYsIDI3LCAyMjIsIDEzMCwgCisgICAgMTUsIDUsIDIyMSwgMTY2LCAxMDQsIDIyMSwgMTY1LCAxNSwgNSwgMjIxLCAxNjYsIDEwNCwgMjIxLCAxNjYsIDI0NCwgMjQ4LCAKKyAgICAxMDQsIDI0NCwgMjQ4LCAyNDQsIDIyMSwgMTA0LCAyNDQsIDIyMCwgMTUsIDUsIDIyMSwgMCwgMTUsIDUsIDIyMCwgMjUzLCAKKyAgICAxNSwgNSwgMjIwLCAyNTEsIDE1LCA1LCAyMjAsIDI0OSwgMTUsIDUsIDIyMCwgMjQwLCAxNSwgNSwgMjIwLCAyNDEsIDEwNCwgCisgICAgMjIwLCAyNDEsIDIxNywgMTE1LCAxMDQsIDIxNywgMTE0LCAxNSwgNSwgNjgsIDE1LCA1LCAxMDUsIDI0NCwgMTEsIDE1LCA1LCAKKyAgICAxMDUsIDEwNSwgNjgsIDE1LCA1LCAxMDUsIDEwNCwgMTA1LCAyMzAsIDQ0LCAxMDQsIDIzMCwgNDQsIDI0NCwgMjIxLCAxMDQsIAorICAgIDI0NCwgMjIwLCAxNSwgNSwgMTA1LCAxMDQsIDEwNSwgMjIzLCA1NCwgMTA0LCAyMjMsIDUzLCAxNSwgNSwgMTA1LCAxMDQsIAorICAgIDEwNSwgMTA1LCAyMTAsIDEwNCwgMTA1LCAyMjcsIDE1OSwgMTUsIDUsIDIyMCwgMTI0LCAxNSwgNSwgMjIwLCAxMjEsIDE1LCAKKyAgICA1LCAyMjAsIDExNSwgMTUsIDUsIDIyMCwgMTE2LCAyMzUsIDI0MiwgMTUsIDUsIDIyMCwgMTE2LCAyNywgMjUyLCAyMjgsIAorICAgIDE1LCA1LCAyMjAsIDExNiwgMjcsIDIzMywgMTk2LCAxNSwgNSwgMjIwLCAxMTYsIDI3LCAxMDUsIDg4LCAxMDUsIDg4LCA2OCwgCisgICAgMTUsIDUsIDIyMCwgMTE2LCAyNywgMTA1LCA4OCwgMTA1LCA4OCwgMTA1LCAyNDQsIDMsIDE1LCA1LCAyMjAsIDExNiwgMjQ0LCAKKyAgICAzLCAxNSwgNSwgMjIwLCAxMTYsIDIyNCwgMjI4LCAxNSwgNSwgMjIwLCAxMTYsIDIyNCwgMjI5LCAyNywgMjUyLCAyMjgsIAorICAgIDE1LCA1LCAyMjAsIDExMSwgMTUsIDUsIDIyMCwgOTQsIDE1LCA1LCAyMjAsIDk1LCAyNywgMjM1LCAxNzQsIDE1LCA1LCAKKyAgICAyMjAsIDk1LCAyNywgMjM0LCAyNiwgODgsIDI0OSwgMjA3LCAxNSwgNSwgMjIwLCA5NSwgMjcsIDIyNSwgMjMsIDE1LCA1LCAKKyAgICAyMjAsIDk1LCAyNywgNjgsIDE1LCA1LCAyMjAsIDkzLCAxNSwgNSwgMjIwLCA4OSwgMTUsIDUsIDIyMCwgOTAsIDI3LCAyMzYsIAorICAgIDIwOCwgMTUsIDUsIDIyMCwgOTAsIDI3LCAxODcsIDE1LCA1LCAyMjAsIDg3LCAxNSwgNSwgMjIwLCA4OCwgMjQ0LCAzLCAxNSwgCisgICAgNSwgMjIwLCA1MCwgMTUsIDUsIDIyMCwgNTEsIDI1MCwgOTUsIDIyMCwgNTAsIDE1LCA1LCAyMjAsIDUxLCAyMjQsIDIyOCwgCisgICAgMTUsIDUsIDIyMCwgNDgsIDE1LCA1LCAyMjAsIDQ5LCAyNywgMTEyLCA4OCwgMTU1LCAxNSwgNSwgMjIwLCA0OSwgMjcsIAorICAgIDExMiwgODgsIDIwOCwgMTUsIDUsIDIyMCwgNDksIDI3LCAyNTQsIDE3NSwgMTUsIDUsIDIyMCwgNDksIDI3LCAxNTUsIDE1LCAKKyAgICA1LCAyMjAsIDQ5LCAyNywgMjMxLCAxMDMsIDE1LCA1LCAyMjAsIDQ5LCAyNywgMjIwLCAxMjQsIDE1LCA1LCAyMjAsIDQ5LCAKKyAgICAyNywgMjIwLCAxMjUsIDg4LCAyNTQsIDcsIDE1LCA1LCAyMjAsIDQ5LCAyNywgMjIwLCAxMjUsIDg4LCAyNTIsIDg0LCAxNSwgCisgICAgNSwgMjIwLCA0NywgMTUsIDUsIDIyMCwgNDQsIDE1LCA1LCAyMjAsIDQzLCAxNSwgNSwgMjIwLCA0MCwgMTUsIDUsIDIyMCwgCisgICAgNDEsIDI3LCA2MCwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyNTQsIDMsIDE1LCA1LCAyMjAsIDQxLCAyNywgMTM1LCAxNSwgNSwgCisgICAgMjIwLCA0MSwgMjcsIDI0NywgMTAxLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDI0NSwgMCwgMTUsIDUsIDIyMCwgNDEsIDI3LCAKKyAgICAyNDQsIDI0MCwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyNDQsIDIyOSwgMjIyLCA1OSwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyNDQsIAorICAgIDIyMCwgMTUsIDUsIDIyMCwgNDEsIDI3LCAyNDQsIDE3LCAxNSwgNSwgMjIwLCA0MSwgMjcsIDE1NSwgMTUsIDUsIDIyMCwgCisgICAgNDEsIDI3LCAyMzgsIDEsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjM3LCAyMzgsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjM3LCAKKyAgICAxNDUsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjM2LCAxMTMsIDE1LCA1LCAyMjAsIDQxLCAyNywgMjM0LCAyMTksIDE1LCA1LCAKKyAgICAyMjAsIDQxLCAyNywgMjMzLCAxNTksIDE1LCA1LCAyMjAsIDQxLCAyNywgMTg3LCAxNSwgNSwgMjIwLCA0MSwgMjcsIDIyNCwgCisgICAgMjQ2LCAxNSwgNSwgMjIwLCA0MSwgMjcsIDIyNCwgMTMwLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDIyMSwgMCwgMTUsIDUsIAorICAgIDIyMCwgNDEsIDI3LCAxMDUsIDg4LCAyNDQsIDExLCAxNSwgNSwgMjIwLCA0MSwgMjcsIDIyMCwgMTE1LCAxNSwgNSwgMjIwLCAKKyAgICA0MSwgMjcsIDIyMCwgMzgsIDE1LCA1LCAyMjAsIDM4LCAxNSwgNSwgMjIwLCAzOSwgMjcsIDY4LCAxNSwgNSwgMjIwLCAzMCwgCisgICAgMTUsIDUsIDIyMCwgMzEsIDI3LCA2MCwgMTUsIDUsIDIyMCwgMzEsIDI3LCAyMzYsIDcsIDE1LCA1LCAyMjAsIDMxLCAyNywgCisgICAgMjM1LCAyNDcsIDE1LCA1LCAyMjAsIDMxLCAyNywgMjIyLCAxMzAsIDE1LCA1LCAyMjAsIDI3LCAxNSwgNSwgMjIwLCAyOSwgCisgICAgMTUsIDUsIDIyMCwgMjgsIDE1LCA1LCAyMjAsIDI0LCAxNSwgNSwgMjIwLCAxMywgMTUsIDUsIDIyMCwgMTQsIDI3LCAyMzYsIAorICAgIDIwOCwgMTUsIDUsIDIyMCwgMTIsIDE1LCA1LCAyMTcsIDExNCwgMTUsIDUsIDIxNywgMTE1LCAyMjIsIDU5LCAxNSwgNSwgCisgICAgMjE3LCAxMTUsIDIwNCwgMjcsIDIzNSwgMjQ3LCAxNSwgNSwgMjE3LCAxMTEsIDE1LCA1LCAyMTcsIDEwNCwgMTUsIDUsIAorICAgIDIxNywgOTEsIDE1LCA1LCAyMTcsIDQyLCAxNSwgNSwgMjE3LCA0MywgMTA0LCAyMTcsIDQyLCAxNSwgNSwgMjE3LCA0MSwgCisgICAgMTUsIDUsIDIxNywgMzksIDE1LCA1LCAyMTcsIDQwLCAyMzYsIDI1NCwgMjIyLCA1OSwgMTUsIDUsIDIxNywgMzQsIDE1LCA1LCAKKyAgICAyMTcsIDI2LCAxNSwgNSwgMjE3LCAxMywgMTUsIDUsIDIxNywgMTEsIDE1LCA1LCAyMTcsIDEyLCAyNywgNjAsIDE1LCA1LCAKKyAgICAyMTcsIDEwLCAxNSwgNSwgMjE3LCA5LCAxNSwgMTIwLCA1LCAxMjQsIDI1NCwgNywgMTUsIDEyMCwgNSwgMTQ4LCAyNTQsIDcsIAorICAgIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyNTQsIDcsIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyNTQsIDcsIDE1LCAxMjAsIDUsIAorICAgIDIyNCwgODIsIDI1NCwgNywgMTUsIDEyMCwgNSwgMjI1LCA0MywgMjU0LCA3LCAxNSwgMTIwLCA1LCAyNDYsIDIzNSwgMjU0LCAKKyAgICA3LCAxNSwgMTIwLCA1LCAyMzIsIDMxLCAyNTQsIDcsIDE1LCAxMjAsIDUsIDE0OCwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIAorICAgIDI0NSwgMTE2LCAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMjQ1LCAxNzAsIDI0OCwgMjAyLCAxNSwgMTIwLCA1LCAyMjQsIDgyLCAKKyAgICAyNDgsIDIwMiwgMTUsIDEyMCwgNSwgMjI1LCA0MywgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAyNDgsIDIwMiwgCisgICAgMTUsIDEyMCwgNSwgMjMyLCAzMSwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCA2OCwgMTUsIDEyMCwgNSwgMjQ1LCAKKyAgICAxNzAsIDY4LCAxNSwgMTIwLCA1LCAyMjQsIDgyLCA2OCwgMTUsIDEyMCwgNSwgMjI1LCA0MywgNjgsIDE1LCAxMjAsIDUsIAorICAgIDI0NiwgMjM1LCA2OCwgMTUsIDEyMCwgNSwgMjMyLCAzMSwgNjgsIDE1LCAxMjAsIDUsIDEzMSwgMjQ0LCAxNjgsIDE1LCAKKyAgICAxMjAsIDUsIDEyNCwgMjQ0LCAxNjgsIDE1LCAxMjAsIDUsIDE0OCwgMjQ0LCAxNjgsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAKKyAgICAyNDQsIDE2OCwgMTUsIDEyMCwgNSwgMjQ1LCAxNzAsIDI0NCwgMTY4LCAxNSwgMTIwLCA1LCAyMjQsIDgyLCAyNDQsIDE2OCwgCisgICAgMTUsIDEyMCwgNSwgMjI1LCA0MywgMjQ0LCAxNjgsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAyNDQsIDE2OCwgMTUsIDEyMCwgCisgICAgNSwgMjMyLCAzMSwgMjQ0LCAxNjgsIDE1LCAxMjAsIDUsIDEzMSwgMjQ0LCAxNjUsIDE1LCAxMjAsIDUsIDEyNCwgMjQ0LCAKKyAgICAxNjUsIDE1LCAxMjAsIDUsIDE0OCwgMjQ0LCAxNjUsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyNDQsIDE2NSwgMTUsIDEyMCwgCisgICAgNSwgMjQ1LCAxNzAsIDI0NCwgMTY1LCAxNSwgMTIwLCA1LCAxMjQsIDIyNSwgMywgMTUsIDEyMCwgNSwgMTQ4LCAyMjUsIDMsIAorICAgIDE1LCAxMjAsIDUsIDE0OCwgMjI1LCA0LCAyMTksIDE3NywgMTcsIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyMjUsIDMsIDE1LCAKKyAgICAxMjAsIDUsIDI0NSwgMTcwLCAyMjUsIDMsIDE1LCAxMjAsIDUsIDIyNCwgODIsIDIyNSwgMywgMTUsIDEyMCwgNSwgMjI1LCAKKyAgICA0MywgMjI1LCAzLCAxNSwgMTIwLCA1LCAyNDYsIDIzNSwgMjI1LCAzLCAxNSwgMTIwLCA1LCAyMzIsIDMxLCAyMjUsIDMsIAorICAgIDE1LCAxMjAsIDUsIDEzMSwgMjI0LCAyNTQsIDE1LCAxMjAsIDUsIDEyNCwgMjI0LCAyNTQsIDE1LCAxMjAsIDUsIDE0OCwgCisgICAgMjI0LCAyNTQsIDE1LCAxMjAsIDUsIDE0OCwgMjI0LCAyNTUsIDIxOSwgMTc3LCAxNywgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIAorICAgIDIyNCwgMjU0LCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjI0LCAyNTQsIDE1LCAxMjAsIDUsIDIyNSwgNCwgMjcsIDI0NCwgCisgICAgMjQxLCA4OCwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDIyNSwgNCwgMjcsIDI0NCwgMjQxLCA4OCwgMjMzLCAxNTksIDE1LCAKKyAgICAxMjAsIDUsIDEzMSwgMjUxLCAyMjUsIDE1LCAxMjAsIDUsIDEyNCwgMjUxLCAyMjUsIDE1LCAxMjAsIDUsIDE0OCwgMjUxLCAKKyAgICAyMjUsIDE1LCAxMjAsIDUsIDE0OCwgMjUxLCAyMjYsIDIxOSwgMTc3LCAxNywgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIDI1MSwgCisgICAgMjI1LCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjUxLCAyMjUsIDE1LCAxMjAsIDUsIDE0OCwgMjE5LCAxNzcsIDI0NSwgMTI0LCAKKyAgICAyNDYsIDEzMiwgMTUsIDEyMCwgNSwgMTQ4LCAyMTksIDE3NywgMjQ1LCAxMjQsIDI0NiwgMTI5LCAxNSwgMTIwLCA1LCAyNDUsIAorICAgIDExNiwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzUsIDQ3LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgMjE5LCAxNzcsIDI0NSwgCisgICAgMTI0LCAyMzUsIDQ1LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzUsIDQ4LCA2MCwgMTUsIAorICAgIDEyMCwgNSwgMjQ1LCAxMTYsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjM1LCA0OCwgMjUzLCAyMDQsIDE1LCAxMjAsIDUsIDIyNCwgCisgICAgODIsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjU0LCA0LCAxNSwgMTIwLCA1LCAyMjUsIDQzLCAyMTksIDE3NywgMjQ1LCAxMjQsIAorICAgIDIzNywgMjMwLCAxNSwgMTIwLCA1LCAyMjUsIDQzLCAyMTksIDE3NywgMjQ1LCAxMjQsIDIzNywgMjMyLCA2MCwgMTUsIDEyMCwgCisgICAgNSwgMjI1LCA0MywgMjE5LCAxNzcsIDI0NSwgMTI0LCAyMzcsIDIzMiwgMjUzLCAyMDQsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAKKyAgICAyMTksIDE3NywgMjQ1LCAxMjQsIDIyMCwgMjYsIDE1LCAxMjAsIDUsIDI0NiwgMjM1LCAyMTksIDE3NywgMjQ1LCAxMjQsIAorICAgIDIyMCwgMjUsIDE1LCAxMjAsIDUsIDIzMiwgMzEsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjM3LCAyNDYsIDE1LCAxMjAsIDUsIAorICAgIDIzMiwgMzEsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjM3LCAyNDUsIDE1LCAxMjAsIDUsIDIzMiwgMzEsIDIxOSwgMTc3LCAKKyAgICAyNDUsIDEyNCwgMjM3LCAyNDQsIDE1LCAxMjAsIDUsIDIzMiwgMzEsIDIxOSwgMTc3LCAyNDUsIDEyNCwgMjM3LCAyNDcsIAorICAgIDYwLCAxNSwgMTIwLCA1LCAxMjQsIDI1NCwgOCwgMjIyLCA1OSwgMTUsIDEyMCwgNSwgMTQ4LCAyNTQsIDgsIDIyMiwgNTksIAorICAgIDE1LCAxMjAsIDUsIDI0NSwgMTE2LCAyNTQsIDgsIDIyMiwgNTksIDE1LCAxMjAsIDUsIDI0NSwgMTcwLCAyNTQsIDgsIDIyMiwgCisgICAgNTksIDE1LCAxMjAsIDUsIDIyNCwgODIsIDI1NCwgOCwgMjIyLCA1OSwgMTUsIDEyMCwgNSwgMTMxLCAyNTIsIDIwNywgMTUsIAorICAgIDEyMCwgNSwgMTI0LCAyNTIsIDIwNywgMTUsIDEyMCwgNSwgMTQ4LCAyNTIsIDIwNywgMTUsIDEyMCwgNSwgMjQ1LCAxMTYsIAorICAgIDI1MiwgMjA3LCAxNSwgMTIwLCA1LCAyNDUsIDExNiwgMjUyLCAyMDgsIDIxOSwgMTc3LCAxNywgMTUsIDEyMCwgNSwgMjQ1LCAKKyAgICAxNzAsIDI1MiwgMjA3LCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjUyLCAyMDgsIDIxOSwgMTc3LCAxNywgMTUsIDEyMCwgNSwgCisgICAgMjMyLCA0MCwgMTUsIDEyMCwgNSwgMjMyLCA0MSwgMTUsIDEyMCwgNSwgMTMxLCAyNDYsIDEyOCwgMTUsIDEyMCwgNSwgMTI0LCAKKyAgICAyNDYsIDEyOCwgMTUsIDEyMCwgNSwgMTMxLCAyMjEsIDI1MiwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDEyNCwgMjIxLCAyNTAsIAorICAgIDI0OCwgMjAyLCAxNSwgMTIwLCA1LCAyNDUsIDE3MCwgMjI0LCA3MiwgMjQ4LCAyMDIsIDE1LCAxMjAsIDUsIDEzMSwgMjIxLCAKKyAgICAyNTIsIDIxOSwgMTc3LCAyNDUsIDEyNCwgNjAsIDE1LCAxMjAsIDUsIDEyNCwgMjIxLCAyNTAsIDIxOSwgMTc3LCAyNDUsIAorICAgIDEyNCwgNjAsIDE1LCAxMjAsIDUsIDEzMSwgMjQ2LCAyMzIsIDI1NCwgNywgMTUsIDEyMCwgNSwgMTMxLCAyMjgsIDkwLCAKKyAgICAyNTQsIDcsIDE1LCAxMjAsIDUsIDQ4LCAyNTMsIDI1NCwgMTMxLCAyMjQsIDczLCAxNSwgMTIwLCA1LCA0OCwgMjUzLCAyNTQsIAorICAgIDEzMSwgMjI4LCA4OSwgMTUsIDIyOCwgMTk3LCA1LCA0OCwgMjUzLCAyNTQsIDIxOCwgMTc0LCAyNDgsIDE5MSwgMTUsIDIyOCwgCisgICAgMTk3LCA1LCA2OSwgMjUwLCAxNzUsIDE1LCAyMjgsIDE5NywgNSwgMjQ5LCAxMSwgMjUwLCAxNzUsIDE1LCAyMjgsIDE5NywgCisgICAgNSwgMjQ5LCAxMSwgMjIxLCA4NiwgMTAsIDExLCAyNTUsIDE0MCwgMTAsIDExLCAyNTUsIDEzOSwgMTAsIDExLCAyNTUsIAorICAgIDEzOCwgMTAsIDExLCAyNTUsIDEzNywgMTAsIDExLCAyNTUsIDEzNiwgMTAsIDExLCAyNTUsIDEzNSwgMTAsIDExLCAyNTUsIAorICAgIDEzNCwgMTAsIDExLCAyNTUsIDEzMywgMTAsIDExLCAyNTUsIDEzMiwgMTAsIDExLCAyNTUsIDEzMSwgMTAsIDExLCAyNTUsIAorICAgIDEzMCwgMTAsIDExLCAyNTUsIDEyOSwgMTAsIDExLCAyNTUsIDEyOCwgMTAsIDExLCAyNTUsIDEyNywgMTAsIDExLCAyNTUsIAorICAgIDEyNiwgMTAsIDExLCAyNTUsIDEyNSwgMTAsIDExLCAyNTUsIDEyNCwgMTAsIDExLCAyNTUsIDEyMywgMTAsIDExLCAyNTUsIAorICAgIDEyMiwgMTAsIDExLCAyNTUsIDEyMSwgMTAsIDExLCAyNTUsIDEyMCwgMTAsIDExLCAyNTUsIDExOSwgMTAsIDExLCAyNTUsIAorICAgIDExOCwgMTAsIDExLCAyNTUsIDExNywgMTAsIDExLCAyNTUsIDExNiwgMTAsIDExLCAyNTUsIDExNSwgMTAsIDExLCAyNTUsIAorICAgIDExNCwgMTAsIDExLCAyNTUsIDExMywgMTAsIDExLCAyNTUsIDExMiwgMTAsIDExLCAyNTUsIDExMSwgMTAsIDExLCAyNTUsIAorICAgIDExMCwgMTAsIDExLCAyNTUsIDEwOSwgMTAsIDExLCAyNTUsIDEwOCwgMTAsIDExLCAyNTUsIDEwNywgMTAsIDExLCAyNTUsIAorICAgIDEwNiwgMTAsIDExLCAyNTUsIDEwNSwgMTAsIDExLCAyNTUsIDEwNCwgMTAsIDExLCAyNTUsIDEwMywgMTAsIDExLCAyNTUsIAorICAgIDEwMiwgMTAsIDExLCAyNTUsIDEwMSwgMTAsIDExLCAyNTUsIDEwMCwgMTAsIDExLCAyNTUsIDk5LCAxMCwgMTEsIDI1NSwgCisgICAgOTgsIDEwLCAxMSwgMjU1LCA5NywgMTAsIDExLCAyNTUsIDk2LCAxMCwgMTEsIDI1NSwgOTUsIDEwLCAxMSwgMjU1LCA5NCwgCisgICAgMTAsIDExLCAyNTUsIDkzLCAxMCwgMTEsIDI1NSwgOTIsIDEwLCAxMSwgMjU1LCA5MSwgMTAsIDExLCAyNTUsIDkwLCAxMCwgCisgICAgMTEsIDI1NSwgODksIDEwLCAxMSwgMjU1LCA4OCwgMTAsIDExLCAyNTUsIDg3LCAxMCwgMTEsIDI1NSwgODYsIDEwLCAxMSwgCisgICAgMjU1LCA4NSwgMTAsIDExLCAyNTUsIDg0LCAxMCwgMTEsIDI1NSwgODMsIDEwLCAxMSwgMjU1LCA4MiwgMTAsIDExLCAyNTUsIAorICAgIDgxLCAxMCwgMTEsIDI1NSwgODAsIDEwLCAxMSwgMjU1LCA3OSwgMTAsIDExLCAyNTUsIDc4LCAxMCwgMTEsIDI1NSwgNzcsIAorICAgIDEwLCAxMSwgMjU1LCA3NiwgMTAsIDExLCAyNTUsIDc1LCAxMCwgMTEsIDI1NSwgNzQsIDEwLCAxMSwgMjU1LCA3MywgMTAsIAorICAgIDExLCAyNTUsIDcyLCAxMCwgMTEsIDI1NSwgNzEsIDEwLCAxMSwgMjU1LCA3MCwgMTAsIDExLCAyNTUsIDY5LCAxMCwgMTEsIAorICAgIDI1NSwgNjgsIDEwLCAxMSwgMjU1LCA2NywgMTAsIDExLCAyNTUsIDY2LCAxMCwgMTEsIDI1NSwgNjUsIDEwLCAxMSwgMjU1LCAKKyAgICA2NCwgMTAsIDExLCAyNTUsIDYzLCAxMCwgMTEsIDI1NSwgNjIsIDEwLCAxMSwgMjU1LCA2MSwgMTAsIDExLCAyNTMsIDIwMiwgCisgICAgMTAsIDExLCAyNTMsIDIwMCwgMTAsIDExLCAyNTMsIDE5OCwgMTAsIDExLCAyNTMsIDE5NiwgMTAsIDExLCAyNTMsIDE5NCwgCisgICAgMTAsIDExLCAyNTMsIDE5MywgMTAsIDExLCAyNTMsIDE5MSwgMTAsIDExLCAyNTMsIDE4OSwgMTAsIDExLCAyNTMsIDE4NywgCisgICAgMTAsIDExLCAyNTMsIDE4NSwgMTAsIDExLCAyNTEsIDE5OCwgMTAsIDExLCAyNTEsIDE5NywgMTAsIDExLCAyNTEsIDE5NiwgCisgICAgMTAsIDExLCAyNTEsIDE5NSwgMTAsIDExLCAyNTEsIDE5NCwgMTAsIDExLCAyNTEsIDE5MywgMTAsIDExLCAyNTEsIDE5MiwgCisgICAgMTAsIDExLCAyNTEsIDE5MSwgMTAsIDExLCAyNTEsIDE5MCwgMTAsIDExLCAyNTEsIDE4OSwgMTAsIDExLCAyNTEsIDE4OCwgCisgICAgMTAsIDExLCAyNTEsIDE4NywgMTAsIDExLCAyNTEsIDE4NiwgMTAsIDExLCAyNTEsIDE4NSwgMTAsIDExLCAyNTEsIDE4NCwgCisgICAgMTAsIDExLCAyNTEsIDE4MywgMTAsIDExLCAyNTEsIDE4MiwgMTAsIDExLCAyNTEsIDE4MSwgMTAsIDExLCAyNTEsIDE4MCwgCisgICAgMTAsIDExLCAyNTEsIDE3OSwgMTAsIDExLCAyNTEsIDE3OCwgMTAsIDExLCAyNTEsIDE3NywgMTAsIDExLCAyNTEsIDE3NiwgCisgICAgMTAsIDExLCAyNTEsIDE3NSwgMTAsIDExLCAyNTEsIDE3NCwgMTAsIDExLCAyNTEsIDE3MywgMTAsIDExLCAyNTEsIDE3MiwgCisgICAgMTAsIDExLCAyNTEsIDE3MSwgMTAsIDExLCAyNTAsIDQ1LCAxMCwgMTEsIDI1MCwgNDQsIDEwLCAxMSwgMjUwLCA0MywgMTAsIAorICAgIDExLCAyNTAsIDQyLCAxMCwgMTEsIDI1MCwgNDEsIDEwLCAxMSwgMjUwLCA0MCwgMTAsIDExLCAyNTAsIDM5LCAxMCwgMTEsIAorICAgIDI1MCwgMzgsIDEwLCAxMSwgMjUwLCAzNywgMTAsIDExLCAyNTAsIDM2LCAxMCwgMTEsIDI1MCwgMzUsIDEwLCAxMSwgMjUwLCAKKyAgICAzNCwgMTAsIDExLCAyNTAsIDMzLCAxMCwgMTEsIDI1MCwgMzIsIDEwLCAxMSwgMjUwLCAzMSwgMTAsIDExLCAyNTAsIDMwLCAKKyAgICAxMCwgMTEsIDI1MCwgMjksIDEwLCAxMSwgMjUwLCAyOCwgMTAsIDExLCAyNTAsIDI3LCAxMCwgMTEsIDI1MCwgMjYsIDEwLCAKKyAgICAxMSwgMjUwLCAyNSwgMTAsIDExLCAyNTAsIDI0LCAxMCwgMTEsIDI1MCwgMjMsIDEwLCAxMSwgMjUwLCAyMiwgMTAsIDExLCAKKyAgICAyNTAsIDIxLCAxMCwgMTEsIDI1MCwgMjAsIDEwLCAxMSwgMjUwLCAxOSwgMTAsIDExLCAyNTAsIDE4LCAxMCwgMTEsIDI1MCwgCisgICAgMTcsIDEwLCAxMSwgMjUwLCAxNiwgMTAsIDExLCAyNTAsIDE1LCAxMCwgMTEsIDI1MCwgMTQsIDEwLCAxMSwgMjUwLCAxMywgCisgICAgMTAsIDExLCAyNTAsIDEyLCAxMCwgMTEsIDI1MCwgMTEsIDEwLCAxMSwgMjUwLCAxMCwgMTAsIDExLCAyNTAsIDksIDEwLCAKKyAgICAxMSwgMjUwLCA4LCAxMCwgMTEsIDI1MCwgNywgMTAsIDExLCAyNTAsIDYsIDEwLCAxMSwgMjUwLCA1LCAxMCwgMTEsIDI1MCwgCisgICAgNCwgMTAsIDExLCAyNTAsIDMsIDEwLCAxMSwgMjUwLCAyLCAxMCwgMTEsIDI1MCwgMSwgMTAsIDExLCAyNTAsIDAsIDEwLCAKKyAgICAxMSwgMjQ5LCAyNTUsIDEwLCAxMSwgMjQ5LCAyNTQsIDEwLCAxMSwgMjQ5LCAyNTMsIDEwLCAxMSwgMjQ5LCAyNTIsIDEwLCAKKyAgICAxMSwgMjQ5LCAyNTEsIDEwLCAxMSwgMjQ5LCAyNTAsIDEwLCAxMSwgMjQ5LCAyNDksIDEwLCAxMSwgMjQ5LCAyNDgsIDEwLCAKKyAgICAxMSwgMjQ5LCAyNDcsIDEwLCAxMSwgMjQ5LCAyNDYsIDEwLCAxMSwgMjQ5LCAyNDUsIDEwLCAxMSwgMjQ5LCAyNDQsIDEwLCAKKyAgICAxMSwgMjQ5LCAyNDMsIDEwLCAxMSwgMjQ5LCAyNDIsIDEwLCAxMSwgMjQ5LCAyNDEsIDEwLCAxMSwgMjQ5LCAyNDAsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMzksIDEwLCAxMSwgMjQ5LCAyMzgsIDEwLCAxMSwgMjQ5LCAyMzcsIDEwLCAxMSwgMjQ5LCAyMzYsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMzUsIDEwLCAxMSwgMjQ5LCAyMzQsIDEwLCAxMSwgMjQ5LCAyMzMsIDEwLCAxMSwgMjQ5LCAyMzIsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMzEsIDEwLCAxMSwgMjQ5LCAyMzAsIDEwLCAxMSwgMjQ5LCAyMjksIDEwLCAxMSwgMjQ5LCAyMjgsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMjcsIDEwLCAxMSwgMjQ5LCAyMjYsIDEwLCAxMSwgMjQ5LCAyMjUsIDEwLCAxMSwgMjQ5LCAyMjQsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMjMsIDEwLCAxMSwgMjQ5LCAyMjIsIDEwLCAxMSwgMjQ5LCAyMjEsIDEwLCAxMSwgMjQ5LCAyMjAsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMTksIDEwLCAxMSwgMjQ5LCAyMTgsIDEwLCAxMSwgMjQ5LCAyMTcsIDEwLCAxMSwgMjQ5LCAyMTYsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMTUsIDEwLCAxMSwgMjQ5LCAyMTQsIDEwLCAxMSwgMjQ5LCAyMTMsIDEwLCAxMSwgMjQ5LCAyMTIsIDEwLCAKKyAgICAxMSwgMjQ5LCAyMTEsIDEwLCAxMSwgMjQ5LCAyMTAsIDEwLCAxMSwgMjQ3LCA2MiwgMTAsIDExLCAyNDcsIDYxLCAxMCwgMTEsIAorICAgIDI0NywgNjAsIDEwLCAxMSwgMjQ3LCA1OSwgMTAsIDExLCAyNDcsIDU4LCAxMCwgMTEsIDI0NywgNTcsIDEwLCAxMSwgMjQ3LCAKKyAgICA1NiwgMTAsIDExLCAyNDcsIDU1LCAxMCwgMTEsIDI0NywgNTQsIDEwLCAxMSwgMjQ3LCA1MywgMTAsIDExLCAyNDcsIDUyLCAKKyAgICAxMCwgMTEsIDI0NywgNTEsIDEwLCAxMSwgMjQ3LCA1MCwgMTAsIDExLCAyNDcsIDQ5LCAxMCwgMTEsIDI0NywgNDgsIDEwLCAKKyAgICAxMSwgMjQ3LCA0NywgMTAsIDExLCAyNDcsIDQ2LCAxMCwgMTEsIDI0NywgNDUsIDEwLCAxMSwgMjQ3LCA0NCwgMTAsIDExLCAKKyAgICAyNDcsIDQzLCAxMCwgMTEsIDI0NywgNDIsIDEwLCAxMSwgMjQ3LCA0MSwgMTAsIDExLCAyNDcsIDQwLCAxMCwgMTEsIDI0NywgCisgICAgMzksIDEwLCAxMSwgMjQ3LCAzOCwgMTAsIDExLCAyNDcsIDM3LCAxMCwgMTEsIDI0NywgMzYsIDEwLCAxMSwgMjQ3LCAzNSwgCisgICAgMTAsIDExLCAyNDcsIDM0LCAxMCwgMTEsIDI0NywgMzMsIDEwLCAxMSwgMjQ3LCAzMiwgMTAsIDExLCAyNDcsIDMxLCAxMCwgCisgICAgMTEsIDI0NywgMzAsIDEwLCAxMSwgMjQ3LCAyOSwgMTAsIDExLCAyNDcsIDI4LCAxMCwgMTEsIDI0NywgMjcsIDEwLCAxMSwgCisgICAgMjQ3LCAyNiwgMTAsIDExLCAyNDcsIDI1LCAxMCwgMTEsIDI0NywgMjQsIDEwLCAxMSwgMjQ3LCAyMywgMTAsIDExLCAyNDcsIAorICAgIDIyLCAxMCwgMTEsIDI0NywgMjEsIDEwLCAxMSwgMjQ3LCAyMCwgMTAsIDExLCAyNDcsIDE5LCAxMCwgMTEsIDI0NiwgNzMsIAorICAgIDEwLCAxMSwgMjQ2LCA3MiwgMTAsIDExLCAyNDYsIDcxLCAxMCwgMTEsIDI0NiwgNzAsIDEwLCAxMSwgMjQ2LCA2OSwgMTAsIAorICAgIDExLCAyNDYsIDY4LCAxMCwgMTEsIDI0NiwgNjcsIDEwLCAxMSwgMjQ2LCA2NiwgMTAsIDExLCAyNDYsIDY1LCAxMCwgMTEsIAorICAgIDI0NiwgNjQsIDEwLCAxMSwgMjQ2LCA2MywgMTAsIDExLCAyNDYsIDYyLCAxMCwgMTEsIDI0NiwgNjEsIDEwLCAxMSwgMjQ2LCAKKyAgICA2MCwgMTAsIDExLCAyNDYsIDU5LCAxMCwgMTEsIDI0NiwgNTgsIDEwLCAxMSwgMjQ2LCA1NywgMTAsIDExLCAyNDYsIDU2LCAKKyAgICAxMCwgMTEsIDI0NiwgNTUsIDEwLCAxMSwgMjQ2LCA1NCwgMTAsIDExLCAyNDYsIDUzLCAxMCwgMTEsIDI0NiwgNTIsIDEwLCAKKyAgICAxMSwgMjQ2LCA1MSwgMTAsIDExLCAyNDYsIDUwLCAxMCwgMTEsIDI0NiwgNDksIDEwLCAxMSwgMjQ2LCA0OCwgMTAsIDExLCAKKyAgICAyNDYsIDQ3LCAxMCwgMTEsIDI0NiwgNDYsIDEwLCAxMSwgMjQ2LCA0NSwgMTAsIDExLCAyNDYsIDQ0LCAxMCwgMTEsIDI0NiwgCisgICAgNDMsIDEwLCAxMSwgMjQ2LCA0MiwgMTAsIDExLCAyNDYsIDQxLCAxMCwgMTEsIDI0NiwgNDAsIDEwLCAxMSwgMjQ2LCAzOSwgCisgICAgMTAsIDExLCAyNDYsIDM4LCAxMCwgMTEsIDI0NiwgMzcsIDEwLCAxMSwgMjQ2LCAzNiwgMTAsIDExLCAyNDYsIDM1LCAxMCwgCisgICAgMTEsIDI0NiwgMzQsIDEwLCAxMSwgMjQ2LCAzMywgMTAsIDExLCAyNDYsIDMyLCAxMCwgMTEsIDI0NiwgMzEsIDEwLCAxMSwgCisgICAgMjQ2LCAzMCwgMTAsIDExLCAyNDYsIDI5LCAxMCwgMTEsIDI0NiwgMjgsIDEwLCAxMSwgMjQ2LCAyNywgMTAsIDExLCAyNDYsIAorICAgIDI2LCAxMCwgMTEsIDI0NiwgMjUsIDEwLCAxMSwgMjQ2LCAyNCwgMTAsIDExLCAyNDYsIDIzLCAxMCwgMTEsIDI0NiwgMjIsIAorICAgIDEwLCAxMSwgMjQ2LCAyMSwgMTAsIDExLCAyNDYsIDIwLCAxMCwgMTEsIDI0NiwgMTksIDEwLCAxMSwgMjQ2LCAxOCwgMTAsIAorICAgIDExLCAyNDYsIDE3LCAxMCwgMTEsIDI0NiwgMTYsIDEwLCAxMSwgMjQ2LCAxNSwgMTAsIDExLCAyNDYsIDE0LCAxMCwgMTEsIAorICAgIDI0NiwgMTMsIDEwLCAxMSwgMjQ2LCAxMiwgMTAsIDExLCAyNDYsIDExLCAxMCwgMTEsIDI0NiwgMTAsIDEwLCAxMSwgMjQ2LCAKKyAgICA5LCAxMCwgMTEsIDI0NSwgNjYsIDEwLCAxMSwgMjQ1LCA2NSwgMTAsIDExLCAyNDUsIDY0LCAxMCwgMTEsIDI0NSwgNjMsIAorICAgIDEwLCAxMSwgMjQ1LCA2MiwgMTAsIDExLCAyNDUsIDYxLCAxMCwgMTEsIDI0NSwgNjAsIDEwLCAxMSwgMjQ1LCA1OSwgMTAsIAorICAgIDExLCAyNDUsIDU4LCAxMCwgMTEsIDI0NSwgNTcsIDEwLCAxMSwgMjQ1LCA1NiwgMTAsIDExLCAyNDUsIDU1LCAxMCwgMTEsIAorICAgIDI0NSwgNTQsIDEwLCAxMSwgMjQ1LCA1MywgMTAsIDExLCAyNDUsIDUyLCAxMCwgMTEsIDI0NSwgNTEsIDEwLCAxMSwgMjQ1LCAKKyAgICA1MCwgMTAsIDExLCAyNDUsIDQ5LCAxMCwgMTEsIDI0NSwgNDgsIDEwLCAxMSwgMjQ1LCA0NywgMTAsIDExLCAyNDUsIDQ2LCAKKyAgICAxMCwgMTEsIDI0NSwgNDUsIDEwLCAxMSwgMjQ1LCA0NCwgMTAsIDExLCAyNDUsIDQzLCAxMCwgMTEsIDI0NSwgNDIsIDEwLCAKKyAgICAxMSwgMjQ1LCA0MSwgMTAsIDExLCAyNDUsIDQwLCAxMCwgMTEsIDI0NSwgMzksIDEwLCAxMSwgMjQ1LCAzOCwgMTAsIDExLCAKKyAgICAyNDUsIDM3LCAxMCwgMTEsIDI0NSwgMzYsIDEwLCAxMSwgMjQ1LCAzNSwgMTAsIDExLCAyNDUsIDM0LCAxMCwgMTEsIDI0NSwgCisgICAgMzMsIDEwLCAxMSwgMjQ1LCAzMiwgMTAsIDExLCAyNDUsIDMxLCAxMCwgMTEsIDI0NSwgMzAsIDEwLCAxMSwgMjQ1LCAyOSwgCisgICAgMTAsIDExLCAyNDUsIDI4LCAxMCwgMTEsIDI0NSwgMjcsIDEwLCAxMSwgMjQ1LCAyNiwgMTAsIDExLCAyNDUsIDI1LCAxMCwgCisgICAgMTEsIDI0NSwgMjQsIDEwLCAxMSwgMjQ1LCAyMywgMTAsIDExLCAyNDUsIDIyLCAxMCwgMTEsIDI0NSwgMjEsIDEwLCAxMSwgCisgICAgMjQ1LCAyMCwgMTAsIDExLCAyNDUsIDE5LCAxMCwgMTEsIDI0NSwgMTgsIDEwLCAxMSwgMjQ1LCAxNywgMTAsIDExLCAyNDUsIAorICAgIDE2LCAxMCwgMTEsIDI0NSwgMTUsIDEwLCAxMSwgMjQ1LCAxNCwgMTAsIDExLCAyNDUsIDEzLCAxMCwgMTEsIDI0NSwgMTIsIAorICAgIDEwLCAxMSwgMjQ1LCAxMSwgMTAsIDExLCAyNDUsIDEwLCAxMCwgMTEsIDI0NSwgOSwgMTAsIDExLCAyNDUsIDgsIDEwLCAxMSwgCisgICAgMjQ1LCA3LCAxMCwgMTEsIDI0NSwgNiwgMTAsIDExLCAyNDUsIDUsIDEwLCAxMSwgMjQ1LCA0LCAxMCwgMTEsIDI0NSwgMywgCisgICAgMTAsIDExLCAyNDMsIDIyMywgMTAsIDExLCAyNDMsIDIyMiwgMTAsIDExLCAyNDMsIDIyMSwgMTAsIDExLCAyNDMsIDIyMCwgCisgICAgMTAsIDExLCAyNDMsIDIxOSwgMTAsIDExLCAyNDMsIDIxOCwgMTAsIDExLCAyNDMsIDIxNywgMTAsIDExLCAyNDMsIDIxNiwgCisgICAgMTAsIDExLCAyNDMsIDIxNSwgMTAsIDExLCAyNDIsIDkxLCAxMCwgMTEsIDI0MiwgOTAsIDEwLCAxMSwgMjQyLCA4OSwgMTAsIAorICAgIDExLCAyNDIsIDg4LCAxMCwgMTEsIDI0MiwgODcsIDEwLCAxMSwgMjQyLCA4NiwgMTAsIDExLCAyNDIsIDg1LCAxMCwgMTEsIAorICAgIDI0MiwgODQsIDEwLCAxMSwgMjQyLCA4MywgMTAsIDExLCAyNDIsIDgyLCAxMCwgMTEsIDI0MiwgODEsIDEwLCAxMSwgMjQyLCAKKyAgICA4MCwgMTAsIDExLCAyNDIsIDc5LCAxMCwgMTEsIDI0MiwgNzgsIDEwLCAxMSwgMjQyLCA3NywgMTAsIDExLCAyNDIsIDc2LCAKKyAgICAxMCwgMTEsIDI0MiwgNzUsIDEwLCAxMSwgMjQyLCA3NCwgMTAsIDExLCAyNDIsIDczLCAxMCwgMTEsIDIzNywgMTYsIDEwLCAKKyAgICAxMSwgMjM3LCAxNSwgMTAsIDExLCAyMzcsIDE0LCAxMCwgMTEsIDIzNywgMTMsIDEwLCAxMSwgMjM3LCAxMiwgMTAsIDExLCAKKyAgICAyMzcsIDExLCAxMCwgMTEsIDIzNywgMTAsIDEwLCAxMSwgMjM3LCA5LCAxMCwgMTEsIDIzNSwgMTk5LCAxMCwgMTEsIDIzNSwgCisgICAgMTk4LCAxMCwgMTEsIDIzNSwgMTk3LCAxMCwgMTEsIDIzNSwgMTk2LCAxMCwgMTEsIDIzNSwgMTk1LCAxMCwgMTEsIDIzNSwgCisgICAgMTk0LCAxMCwgMTEsIDIzNSwgMTkzLCAxMCwgMTEsIDIzNSwgMTkyLCAxMCwgMTEsIDIzNSwgMTkxLCAxMCwgMTEsIDIzNSwgCisgICAgMTkwLCAxMCwgMTEsIDIzNCwgMTg2LCAxMCwgMTEsIDIzNCwgMTg1LCAxMCwgMTEsIDIzNCwgMTg0LCAxMCwgMTEsIDIzNCwgCisgICAgMTgzLCAxMCwgMTEsIDIzNCwgMTgyLCAxMCwgMTEsIDIzNCwgMTgxLCAxMCwgMTEsIDIzNCwgMTgwLCAxMCwgMTEsIDIzNCwgCisgICAgMTc5LCAxMCwgMTEsIDIzNCwgMTc4LCAxMCwgMTEsIDIzNCwgMTc3LCAxMCwgMTEsIDIzNCwgMTc2LCAxMCwgMTEsIDIzNCwgCisgICAgMTc1LCAxMCwgMTEsIDIzNCwgMTc0LCAxMCwgMTEsIDIzNCwgMTczLCAxMCwgMTEsIDIzNCwgMTcyLCAxMCwgMTEsIDIzNCwgCisgICAgMTcxLCAxMCwgMTEsIDIzNCwgMTcwLCAxMCwgMTEsIDIzNCwgMTY5LCAxMCwgMTEsIDIzNCwgMTY4LCAxMCwgMTEsIDIzNCwgCisgICAgMTY3LCAxMCwgMTEsIDIzNCwgMTY2LCAxMCwgMTEsIDIzNCwgMTY1LCAxMCwgMTEsIDIzNCwgMTY0LCAxMCwgMTEsIDIzNCwgCisgICAgMTYzLCAxMCwgMTEsIDIzNCwgMTYyLCAxMCwgMTEsIDIzNCwgMTYxLCAxMCwgMTEsIDIzNCwgMTYwLCAxMCwgMTEsIDIzNCwgCisgICAgMTU5LCAxMCwgMTEsIDIzNCwgMTU4LCAxMCwgMTEsIDIzNCwgMTU3LCAxMCwgMTEsIDIzNCwgMTU2LCAxMCwgMTEsIDIzNCwgCisgICAgMTU1LCAxMCwgMTEsIDIzNCwgMTU0LCAxMCwgMTEsIDIzNCwgMTUzLCAxMCwgMTEsIDIzNCwgMTUyLCAxMCwgMTEsIDIzNCwgCisgICAgMTUxLCAxMCwgMTEsIDIzNCwgMTUwLCAxMCwgMTEsIDIzNCwgMTQ5LCAxMCwgMTEsIDIzNCwgMTQ4LCAxMCwgMTEsIDIzNCwgCisgICAgMTQ3LCAxMCwgMTEsIDIzNCwgMTQ2LCAxMCwgMTEsIDIzNCwgMTQ1LCAxMCwgMTEsIDIzNCwgMTQ0LCAxMCwgMTEsIDIzNCwgCisgICAgMTQzLCAxMCwgMTEsIDIzNCwgMTQyLCAxMCwgMTEsIDIzNCwgMTQxLCAxMCwgMTEsIDIzNCwgMTQwLCAxMCwgMTEsIDIzNCwgCisgICAgMTM5LCAxMCwgMTEsIDIzNCwgMTM4LCAxMCwgMTEsIDIzNCwgMTM3LCAxMCwgMTEsIDIzNCwgMTM2LCAxMCwgMTEsIDIzNCwgCisgICAgMTM1LCAxMCwgMTEsIDIzNCwgMTM0LCAxMCwgMTEsIDIzNCwgMTMzLCAxMCwgMTEsIDIzNCwgMTMyLCAxMCwgMTEsIDIzNCwgCisgICAgMTMxLCAxMCwgMTEsIDIzNCwgMTMwLCAxMCwgMTEsIDIzNCwgMTI5LCAxMCwgMTEsIDIzNCwgMTI4LCAxMCwgMTEsIDIzNCwgCisgICAgMTI3LCAxMCwgMTEsIDIzNCwgMTI2LCAxMCwgMTEsIDIzNCwgMTI1LCAxMCwgMTEsIDIzNCwgMTI0LCAxMCwgMTEsIDIzNCwgCisgICAgMTIzLCAxMCwgMTEsIDIzNCwgMTIyLCAxMCwgMTEsIDIzNCwgMTIxLCAxMCwgMTEsIDIzMywgMzEsIDEwLCAxMSwgMjMzLCAKKyAgICAzMCwgMTAsIDExLCAyMzMsIDI5LCAxMCwgMTEsIDIzMywgMjgsIDEwLCAxMSwgMjMzLCAyNywgMTAsIDExLCAyMzMsIDI2LCAKKyAgICAxMCwgMTEsIDIzMywgMjUsIDEwLCAxMSwgMjMzLCAyNCwgMTAsIDExLCAyMzMsIDIzLCAxMCwgMTEsIDIzMywgMjIsIDEwLCAKKyAgICAxMSwgMjMzLCAyMSwgMTAsIDExLCAyMzMsIDIwLCAxMCwgMTEsIDIzMywgMTksIDEwLCAxMSwgMjMzLCAxOCwgMTAsIDExLCAKKyAgICAyMzMsIDE3LCAxMCwgMTEsIDIzMywgMTYsIDEwLCAxMSwgMjMzLCAxNSwgMTAsIDExLCAyMzMsIDE0LCAxMCwgMTEsIDIzMywgCisgICAgMTMsIDEwLCAxMSwgMjMzLCAxMiwgMTAsIDExLCAyMzMsIDExLCAxMCwgMTEsIDIzMywgMTAsIDEwLCAxMSwgMjMzLCA5LCAKKyAgICAxMCwgMTEsIDIzMywgOCwgMTAsIDExLCAyMzMsIDcsIDEwLCAxMSwgMjMzLCA2LCAxMCwgMTEsIDIzMywgNSwgMTAsIDExLCAKKyAgICAyMzMsIDQsIDEwLCAxMSwgMjMzLCAzLCAxMCwgMTEsIDIzMywgMiwgMTAsIDExLCAyMzMsIDEsIDEwLCAxMSwgMjMzLCAwLCAKKyAgICAxMCwgMTEsIDIzMiwgMjU1LCAxMCwgMTEsIDIzMiwgMjU0LCAxMCwgMTEsIDIzMiwgMjUzLCAxMCwgMTEsIDIzMiwgMjUyLCAKKyAgICAxMCwgMTEsIDIzMiwgMjUxLCAxMCwgMTEsIDIzMiwgMjUwLCAxMCwgMTEsIDIzMiwgMjQ5LCAxMCwgMTEsIDIzMiwgMjQ4LCAKKyAgICAxMCwgMTEsIDIzMiwgMjQ3LCAxMCwgMTEsIDIzMiwgMjQ2LCAxMCwgMTEsIDIzMiwgMjQ1LCAxMCwgMTEsIDIzMiwgMjQ0LCAKKyAgICAxMCwgMTEsIDIzMiwgMjQzLCAxMCwgMTEsIDIzMiwgMjQyLCAxMCwgMTEsIDIzMiwgMjQxLCAxMCwgMTEsIDIzMiwgMjQwLCAKKyAgICAxMCwgMTEsIDIzMiwgMjM5LCAxMCwgMTEsIDIzMSwgMjQxLCAxMCwgMTEsIDIzMSwgMjQwLCAxMCwgMTEsIDIzMSwgMjM5LCAKKyAgICAxMCwgMTEsIDIzMSwgMjM4LCAxMCwgMTEsIDIzMSwgMjM3LCAxMCwgMTEsIDIzMSwgMjM2LCAxMCwgMTEsIDIzMSwgMjM1LCAKKyAgICAxMCwgMTEsIDIzMSwgMjM0LCAxMCwgMTEsIDIzMSwgMjMzLCAxMCwgMTEsIDIzMSwgMjMyLCAxMCwgMTEsIDIzMSwgMjMxLCAKKyAgICAxMCwgMTEsIDIzMSwgMjMwLCAxMCwgMTEsIDIzMSwgMjI5LCAxMCwgMTEsIDIzMSwgMjI4LCAxMCwgMTEsIDIzMSwgMjI3LCAKKyAgICAxMCwgMTEsIDIzMSwgMjI2LCAxMCwgMTEsIDIzMSwgMjI1LCAxMCwgMTEsIDIzMSwgMjI0LCAxMCwgMTEsIDIzMSwgMjIzLCAKKyAgICAxMCwgMTEsIDIzMSwgMjIyLCAxMCwgMTEsIDIzMSwgMjIxLCAxMCwgMTEsIDIzMSwgMjIwLCAxMCwgMTEsIDIzMSwgMTQzLCAKKyAgICAxMCwgMTEsIDIzMSwgMTQyLCAxMCwgMTEsIDIzMSwgMTQxLCAxMCwgMTEsIDIzMSwgMTQwLCAxMCwgMTEsIDIzMSwgMTM5LCAKKyAgICAxMCwgMTEsIDIzMSwgMTM4LCAxMCwgMTEsIDIzMSwgMTM3LCAxMCwgMTEsIDIzMSwgMTM2LCAxMCwgMTEsIDIzMSwgMTM1LCAKKyAgICAxMCwgMTEsIDIzMSwgMTM0LCAxMCwgMTEsIDIzMSwgMTMzLCAxMCwgMTEsIDIzMSwgMTMyLCAxMCwgMTEsIDIzMSwgMTMxLCAKKyAgICAxMCwgMTEsIDIzMSwgMTMwLCAxMCwgMTEsIDIzMSwgMTI5LCAxMCwgMTEsIDIzMSwgMTI4LCAxMCwgMTEsIDIzMSwgMTI3LCAKKyAgICAxMCwgMTEsIDIzMSwgMTI2LCAxMCwgMTEsIDIzMSwgMTI1LCAxMCwgMTEsIDIzMSwgMTI0LCAxMCwgMTEsIDIzMSwgMTIzLCAKKyAgICAxMCwgMTEsIDIzMSwgMTIyLCAxMCwgMTEsIDIzMSwgMTIxLCAxMCwgMTEsIDIzMSwgMTIwLCAxMCwgMTEsIDIzMSwgMTE5LCAKKyAgICAxMCwgMTEsIDIzMSwgMTE4LCAxMCwgMTEsIDIzMSwgNSwgMTAsIDExLCAyMzEsIDQsIDEwLCAxMSwgMjMxLCAzLCAxMCwgMTEsIAorICAgIDIzMSwgMiwgMTAsIDExLCAyMzEsIDEsIDEwLCAxMSwgMjMxLCAwLCAxMCwgMTEsIDIzMCwgMjU1LCAxMCwgMTEsIDIzMCwgCisgICAgMjU0LCAxMCwgMTEsIDIzMCwgMjUzLCAxMCwgMTEsIDIzMCwgMjUyLCAxMCwgMTEsIDIzMCwgMjUxLCAxMCwgMTEsIDIzMCwgCisgICAgMjUwLCAxMCwgMTEsIDIzMCwgMjQ5LCAxMCwgMTEsIDIzMCwgMjQ4LCAxMCwgMTEsIDIzMCwgMjQ3LCAxMCwgMTEsIDIzMCwgCisgICAgMjQ2LCAxMCwgMTEsIDIzMCwgMjQ1LCAxMCwgMTEsIDIzMCwgMjQ0LCAxMCwgMTEsIDIzMCwgMjQzLCAxMCwgMTEsIDIzMCwgCisgICAgMjQyLCAxMCwgMTEsIDIzMCwgMjQxLCAxMCwgMTEsIDIzMCwgMjQwLCAxMCwgMTEsIDIzMCwgMjM5LCAxMCwgMTEsIDIzMCwgCisgICAgMjM4LCAxMCwgMTEsIDIzMCwgMjM3LCAxMCwgMTEsIDIzMCwgMjM2LCAxMCwgMTEsIDIzMCwgMjM1LCAxMCwgMTEsIDIzMCwgCisgICAgMjM0LCAxMCwgMTEsIDIzMCwgMjMzLCAxMCwgMTEsIDIzMCwgMjMyLCAxMCwgMTEsIDIzMCwgMjMxLCAxMCwgMTEsIDIzMCwgCisgICAgMjMwLCAxMCwgMTEsIDIzMCwgMjI5LCAxMCwgMTEsIDIzMCwgMjI4LCAxMCwgMTEsIDIzMCwgMjI3LCAxMCwgMTEsIDIzMCwgCisgICAgMjI2LCAxMCwgMTEsIDIzMCwgMjI1LCAxMCwgMTEsIDIzMCwgMjI0LCAxMCwgMTEsIDIzMCwgMjIzLCAxMCwgMTEsIDIzMCwgCisgICAgMjIyLCAxMCwgMTEsIDIzMCwgMjIxLCAxMCwgMTEsIDIzMCwgMjIwLCAxMCwgMTEsIDIzMCwgMjE5LCAxMCwgMTEsIDIzMCwgCisgICAgMjE4LCAxMCwgMTEsIDIzMCwgMjE3LCAxMCwgMTEsIDIzMCwgMjE2LCAxMCwgMTEsIDIzMCwgMjE1LCAxMCwgMTEsIDIzMCwgCisgICAgMjE0LCAxMCwgMTEsIDIzMCwgMjEzLCAxMCwgMTEsIDIzMCwgMjEyLCAxMCwgMTEsIDIzMCwgMjExLCAxMCwgMTEsIDIzMCwgCisgICAgMjEwLCAxMCwgMTEsIDIzMCwgMjA5LCAxMCwgMTEsIDIzMCwgMjA4LCAxMCwgMTEsIDIzMCwgMjA3LCAxMCwgMTEsIDIzMCwgCisgICAgMjA2LCAxMCwgMTEsIDIzMCwgMjA1LCAxMCwgMTEsIDIzMCwgMjA0LCAxMCwgMTEsIDIzMCwgMjAzLCAxMCwgMTEsIDIzMCwgCisgICAgMjAyLCAxMCwgMTEsIDIzMCwgMjAxLCAxMCwgMTEsIDIzMCwgMjAwLCAxMCwgMTEsIDIzMCwgMTk5LCAxMCwgMTEsIDIzMCwgCisgICAgMTk4LCAxMCwgMTEsIDIzMCwgMTk3LCAxMCwgMTEsIDIzMCwgMTk2LCAxMCwgMTEsIDIzMCwgMTk1LCAxMCwgMTEsIDIzMCwgCisgICAgMTk0LCAxMCwgMTEsIDIzMCwgMTkzLCAxMCwgMTEsIDIzMCwgMTkyLCAxMCwgMTEsIDIzMCwgMTkxLCAxMCwgMTEsIDIzMCwgCisgICAgMTkwLCAxMCwgMTEsIDIzMCwgMTg5LCAxMCwgMTEsIDIzMCwgMTg4LCAxMCwgMTEsIDIzMCwgMTg3LCAxMCwgMTEsIDIzMCwgCisgICAgNTgsIDEwLCAxMSwgMjMwLCA1NywgMTAsIDExLCAyMzAsIDU2LCAxMCwgMTEsIDIzMCwgNTUsIDEwLCAxMSwgMjMwLCA1NCwgCisgICAgMTAsIDExLCAyMzAsIDUzLCAxMCwgMTEsIDIzMCwgNTIsIDEwLCAxMSwgMjMwLCA1MSwgMTAsIDExLCAyMzAsIDUwLCAxMCwgCisgICAgMTEsIDIzMCwgNDksIDEwLCAxMSwgMjMwLCA0OCwgMTAsIDExLCAyMzAsIDQ3LCAxMCwgMTEsIDIzMCwgNDYsIDEwLCAxMSwgCisgICAgMjI4LCAxNjIsIDEwLCAxMSwgMjI4LCAxNjEsIDEwLCAxMSwgMjI4LCAxNjAsIDEwLCAxMSwgMjI4LCAxNTksIDEwLCAxMSwgCisgICAgMjI4LCAxNTgsIDEwLCAxMSwgMjI4LCAxNTcsIDEwLCAxMSwgMjI4LCAxNTYsIDEwLCAxMSwgMjI4LCAzNywgMTAsIDExLCAKKyAgICAyMjgsIDM2LCAxMCwgMTEsIDIyOCwgMzUsIDEwLCAxMSwgMjI4LCAzNCwgMTAsIDExLCAyMjgsIDMzLCAxMCwgMTEsIDIyOCwgCisgICAgMzIsIDEwLCAxMSwgMjI4LCAzMSwgMTAsIDExLCAyMjgsIDMwLCAxMCwgMTEsIDIyOCwgMjksIDEwLCAxMSwgMjI4LCAyOCwgCisgICAgMTAsIDExLCAyMjgsIDI3LCAxMCwgMTEsIDIyOCwgMjYsIDEwLCAxMSwgMjI4LCAyNSwgMTAsIDExLCAyMjgsIDI0LCAxMCwgCisgICAgMTEsIDIyOCwgMjMsIDEwLCAxMSwgMjI4LCAyMiwgMTAsIDExLCAyMjgsIDIxLCAxMCwgMTEsIDIyOCwgMjAsIDEwLCAxMSwgCisgICAgMjI4LCAxOSwgMTAsIDExLCAyMjgsIDE4LCAxMCwgMTEsIDIyOCwgMTcsIDEwLCAxMSwgMjI4LCAxNiwgMTAsIDExLCAyMjgsIAorICAgIDE1LCAxMCwgMTEsIDIyOCwgMTQsIDEwLCAxMSwgMjI4LCAxMywgMTAsIDExLCAyMjgsIDEyLCAxMCwgMTEsIDIyOCwgMTEsIAorICAgIDEwLCAxMSwgMjI4LCAxMCwgMTAsIDExLCAyMjgsIDksIDEwLCAxMSwgMjI4LCA4LCAxMCwgMTEsIDIyOCwgNywgMTAsIDExLCAKKyAgICAyMjgsIDYsIDEwLCAxMSwgMjI4LCA1LCAxMCwgMTEsIDIyOCwgNCwgMTAsIDExLCAyMjYsIDIzMiwgMTAsIDExLCAyMjYsIAorICAgIDIzMSwgMTAsIDExLCAyMjYsIDIzMCwgMTAsIDExLCAyMjYsIDIyOSwgMTAsIDExLCAyMjYsIDIyOCwgMTAsIDExLCAyMjYsIAorICAgIDIyNywgMTAsIDExLCAyMjYsIDIyNiwgMTAsIDExLCAyMjYsIDIyNSwgMTAsIDExLCAyMjYsIDIyNCwgMTAsIDExLCAyMjYsIAorICAgIDIyMywgMTAsIDExLCAyMjYsIDIyMiwgMTAsIDExLCAyMjYsIDIyMSwgMTAsIDExLCAyMjYsIDIyMCwgMTAsIDExLCAyMjYsIAorICAgIDIxOSwgMTAsIDExLCAyMjYsIDIxOCwgMTAsIDExLCAyMjYsIDIxNywgMTAsIDExLCAyMjYsIDIxNiwgMTAsIDExLCAyMjYsIAorICAgIDIxNSwgMTAsIDExLCAyMjYsIDIxNCwgMTAsIDExLCAyMjYsIDIxMywgMTAsIDExLCAyMjYsIDIxMiwgMTAsIDExLCAyMjYsIAorICAgIDIxMSwgMTAsIDExLCAyMjYsIDIxMCwgMTAsIDExLCAyMjYsIDIwOSwgMTAsIDExLCAyMjYsIDIwOCwgMTAsIDExLCAyMjYsIAorICAgIDIwNywgMTAsIDExLCAyMjYsIDIwNiwgMTAsIDExLCAyMjYsIDIwNSwgMTAsIDExLCAyMjYsIDIwNCwgMTAsIDExLCAyMjYsIAorICAgIDIwMywgMTAsIDExLCAyMjYsIDIwMiwgMTAsIDExLCAyMjYsIDIwMSwgMTAsIDExLCAyMjYsIDIwMCwgMTAsIDExLCAyMjYsIAorICAgIDE5OSwgMTAsIDExLCAyMjYsIDE5OCwgMTAsIDExLCAyMjYsIDE5NywgMTAsIDExLCAyMjYsIDE5NiwgMTAsIDExLCAyMjYsIAorICAgIDE5NSwgMTAsIDExLCAyMjYsIDE5NCwgMTAsIDExLCAyMjYsIDE5MywgMTAsIDExLCAyMjYsIDE5MiwgMTAsIDExLCAyMjYsIAorICAgIDE5MSwgMTAsIDExLCAyMjYsIDE5MCwgMTAsIDExLCAyMjYsIDE4OSwgMTAsIDExLCAyMjYsIDE4OCwgMTAsIDExLCAyMjYsIAorICAgIDE4NywgMTAsIDExLCAyMjYsIDE4NiwgMTAsIDExLCAyMjYsIDE4NSwgMTAsIDExLCAyMjYsIDE4NCwgMTAsIDExLCAyMjYsIAorICAgIDE4MywgMTAsIDExLCAyMjYsIDE4MiwgMTAsIDExLCAyMjYsIDE4MSwgMTAsIDExLCAyMjYsIDE4MCwgMTAsIDExLCAyMjYsIAorICAgIDE3OSwgMTAsIDExLCAyMjIsIDIwMCwgMTAsIDExLCAyMjIsIDE5OSwgMTAsIDExLCAyMjIsIDE5OCwgMTAsIDExLCAyMjIsIAorICAgIDE5NywgMTAsIDExLCAyMjIsIDE5NiwgMTAsIDExLCAyMjIsIDE5NSwgMTAsIDExLCAyMjIsIDE5NCwgMTAsIDExLCAyMjIsIAorICAgIDE5MywgMTAsIDExLCAyMjIsIDE5MiwgMTAsIDExLCAyMjIsIDE5MSwgMTAsIDExLCAyMjIsIDE5MCwgMTAsIDExLCAyMjIsIAorICAgIDE4OSwgMTAsIDExLCAyMjIsIDE4OCwgMTAsIDExLCAyMjIsIDE4NywgMTAsIDExLCAyMjIsIDE4NiwgMTAsIDExLCAyMjIsIAorICAgIDE4NSwgMTAsIDExLCAyMjIsIDE4NCwgMTAsIDExLCAyMjIsIDE4MywgMTAsIDExLCAyMjIsIDE4MiwgMTAsIDExLCAyMjIsIAorICAgIDE4MSwgMTAsIDExLCAyMjIsIDE4MCwgMTAsIDExLCAyMjIsIDE3OSwgMTAsIDExLCAyMjIsIDE3OCwgMTAsIDExLCAyMjIsIAorICAgIDE3NywgMTAsIDExLCAyMjIsIDE3NiwgMTAsIDExLCAyMjIsIDE3NSwgMTAsIDExLCAyMjIsIDE3NCwgMTAsIDExLCAyMjIsIAorICAgIDE3MywgMTAsIDExLCAyMjIsIDE3MiwgMTAsIDExLCAyMjIsIDE3MSwgMTAsIDExLCAyMjIsIDE3MCwgMTAsIDExLCAyMjIsIAorICAgIDE2OSwgMTAsIDExLCAyMjIsIDE2OCwgMTAsIDExLCAyMjIsIDE2NywgMTAsIDExLCAyMjIsIDE2NiwgMTAsIDExLCAyMjIsIAorICAgIDE2NSwgMTAsIDExLCAyMjIsIDE2NCwgMTAsIDExLCAyMjIsIDE2MywgMTAsIDExLCAyMjIsIDE2MiwgMTAsIDExLCAyMjIsIAorICAgIDE2MSwgMTAsIDExLCAyMjIsIDE2MCwgMTAsIDExLCAyMjIsIDE1OSwgMTAsIDExLCAyMjIsIDE1OCwgMTAsIDExLCAyMjIsIAorICAgIDE1NywgMTAsIDExLCAyMjAsIDE3MiwgMTAsIDExLCAyMjAsIDE3MSwgMTAsIDExLCAyMjAsIDE3MCwgMTAsIDExLCAyMjAsIAorICAgIDE2OSwgMTAsIDExLCAyMjAsIDE2OCwgMTAsIDExLCAyMjAsIDE2NywgMTAsIDExLCAyMjAsIDE2NiwgMTAsIDExLCAyMjAsIAorICAgIDE2NSwgMTAsIDExLCAyMjAsIDE2NCwgMTAsIDExLCAyMjAsIDE2MywgMTAsIDExLCAyMjAsIDE2MiwgMTAsIDExLCAyMjAsIAorICAgIDE2MSwgMTAsIDExLCAyMjAsIDE2MCwgMTAsIDExLCAyMjAsIDE1OSwgMTAsIDExLCAyMjAsIDE1OCwgMTAsIDExLCAyMjAsIAorICAgIDE1NywgMTAsIDExLCAyMjAsIDE1NiwgMTAsIDExLCAyMjAsIDE1NSwgMTAsIDExLCAyMjAsIDE1NCwgMTAsIDExLCAyMjAsIAorICAgIDE1MywgMTAsIDExLCAyMjAsIDE1MiwgMTAsIDExLCAyMjAsIDE1MSwgMTAsIDExLCAyMjAsIDE1MCwgMTAsIDExLCAyMjAsIAorICAgIDE0OSwgMTAsIDExLCAyMjAsIDE0OCwgMTAsIDExLCAyMjAsIDE0NywgMTAsIDExLCAyMjAsIDE0NiwgMTAsIDExLCAyMjAsIAorICAgIDE0NSwgMTAsIDExLCAyMjAsIDE0NCwgMTAsIDExLCAyMjAsIDE0MywgMTAsIDExLCAyMjAsIDE0MiwgMTAsIDExLCAyMjAsIAorICAgIDE0MSwgMTAsIDExLCAyMjAsIDE0MCwgMTAsIDExLCAyMjAsIDEzOSwgMTAsIDExLCAyMjAsIDEzOCwgMTAsIDExLCAyMjAsIAorICAgIDEzNywgMTAsIDExLCAyMjAsIDEzNiwgMTAsIDExLCAyMjAsIDEzNSwgMTAsIDExLCAyMjAsIDEzNCwgMTAsIDExLCAyMjAsIAorICAgIDEzMywgMTAsIDExLCAyMjAsIDEzMiwgMTAsIDExLCAyMjAsIDEzMSwgMTAsIDExLCAyMjAsIDEzMCwgMTAsIDExLCAyMjAsIAorICAgIDEyOSwgMTAsIDExLCAyMjAsIDEyOCwgMTAsIDExLCAyMjAsIDEyNywgMTAsIDExLCAyMjAsIDEyNiwgMTAsIDExLCAyMjAsIAorICAgIDEwLCAxMCwgMTEsIDIyMCwgOSwgMTAsIDExLCAyMjAsIDgsIDEwLCAxMSwgMjIwLCA3LCAxMCwgMTEsIDIyMCwgNiwgMTAsIAorICAgIDExLCAyMjAsIDUsIDEwLCAxMSwgMjIwLCA0LCAxMCwgMTEsIDIyMCwgMywgMTAsIDExLCAyMjAsIDIsIDEwLCAxMSwgMjIwLCAKKyAgICAxLCAxMCwgMTEsIDIyMCwgMCwgMTAsIDExLCAyMTksIDI1NSwgMTAsIDExLCAyMTksIDI1NCwgMTAsIDExLCAyMTksIDI1MywgCisgICAgMTAsIDExLCAyMTksIDI1MiwgMTAsIDExLCAyMTksIDI1MSwgMTAsIDExLCAyMTksIDI1MCwgMTAsIDExLCAyMTksIDI0OSwgCisgICAgMTAsIDExLCAyMTksIDI0OCwgMTAsIDExLCAyMTksIDI0NywgMTAsIDExLCAyMTksIDI0NiwgMTAsIDExLCAyMTksIDI0NSwgCisgICAgMTAsIDExLCAyMTksIDI0NCwgMTAsIDExLCAyMTksIDI0MywgMTAsIDExLCAyMTksIDI0MiwgMTAsIDExLCAyMTksIDI0MSwgCisgICAgMTAsIDExLCAyMTksIDI0MCwgMTAsIDExLCAyMTksIDIzOSwgMTAsIDExLCAyMTksIDIzOCwgMTAsIDExLCAyMTksIDIzNywgCisgICAgMTAsIDExLCAyMTksIDIzNiwgMTAsIDExLCAyMTksIDIzNSwgMTAsIDExLCAyMTksIDIzNCwgMTAsIDExLCAyMTksIDIzMywgCisgICAgMTAsIDExLCAyMTksIDIzMiwgMTAsIDExLCAyMTksIDIzMSwgMTAsIDExLCAyMTksIDIzMCwgMTAsIDExLCAyMTksIDIyOSwgCisgICAgMTAsIDExLCAyMTksIDIyOCwgMTAsIDExLCAyMTksIDIyNywgMTAsIDExLCAyMTksIDIyNiwgMTAsIDExLCAyMTksIDIyNSwgCisgICAgMTAsIDExLCAyMTksIDIyNCwgMTAsIDExLCAyMTksIDIyMywgMTAsIDExLCAyMTksIDIyMiwgMTAsIDExLCAyMTksIDIyMSwgCisgICAgMTAsIDExLCAyMTksIDIyMCwgMTAsIDExLCAyMTksIDIxOSwgMTAsIDExLCAyMTksIDIxOCwgMTAsIDExLCAyMTksIDIxNywgCisgICAgMTAsIDExLCAyMTksIDIxNiwgMTAsIDExLCAyMTksIDIxNSwgMTAsIDExLCAyMTksIDIxNCwgMTAsIDExLCAyMTksIDIxMywgCisgICAgMTAsIDExLCAyMTksIDIxMiwgMTAsIDExLCAyMTksIDIxMSwgMTAsIDExLCAyMTksIDIxMCwgMTAsIDExLCAyMTksIDIwOSwgCisgICAgMTAsIDExLCAyMTksIDIwOCwgMTAsIDExLCAyMTksIDIwNywgMTAsIDExLCAyMTksIDIwNiwgMTAsIDExLCAyMTksIDIwNSwgCisgICAgMTAsIDExLCAyMTksIDIwNCwgMTAsIDExLCAyMTksIDIwMywgMTAsIDExLCAyMTksIDIwMiwgMTAsIDExLCAyMTksIDIwMSwgCisgICAgMTAsIDExLCAyMTksIDIwMCwgMTAsIDExLCAyMTksIDE5OSwgMTAsIDExLCAyMTksIDE5OCwgMTAsIDExLCAyMTksIDE5NywgCisgICAgMTAsIDExLCAyMTksIDE5NiwgMTAsIDExLCAyMTksIDE5NSwgMTAsIDExLCAyMTksIDE5NCwgMTAsIDExLCAyMTksIDE5MywgCisgICAgMTAsIDExLCAyMTksIDE5MiwgMTAsIDExLCAyMTksIDE5MSwgMTAsIDExLCAyMTksIDE5MCwgMTAsIDExLCAyMTksIDM5LCAKKyAgICAxMCwgMTEsIDIxOSwgMzgsIDEwLCAxMSwgMjE5LCAzNywgMTAsIDExLCAyMTksIDM2LCAxMCwgMTEsIDIxOSwgMzUsIDEwLCAKKyAgICAxMSwgMjE5LCAzNCwgMTAsIDExLCAyMTksIDMzLCAxMCwgMTEsIDIxOSwgMzIsIDEwLCAxMSwgMjE5LCAzMSwgMTAsIDExLCAKKyAgICAyMTksIDMwLCAxMCwgMTEsIDIxOSwgMjksIDEwLCAxMSwgMjE5LCAyOCwgMTAsIDExLCAyMTksIDI3LCAxMCwgMTEsIDIxOSwgCisgICAgMjYsIDEwLCAxMSwgMjE5LCAyNSwgMTAsIDExLCAyMTksIDI0LCAxMCwgMTEsIDIxOSwgMjMsIDEwLCAxMSwgMjE5LCAyMiwgCisgICAgMTAsIDExLCAyMTksIDIxLCAxMCwgMTEsIDIxOSwgMjAsIDEwLCAxMSwgMjE5LCAxOSwgMTAsIDExLCAyMTksIDE4LCAxMCwgCisgICAgMTEsIDIxOSwgMTcsIDEwLCAxMSwgMjE5LCAxNiwgMTAsIDExLCAyMTksIDE1LCAxMCwgMTEsIDIxOSwgMTQsIDEwLCAxMSwgCisgICAgMjE5LCAxMywgMTAsIDExLCAyMTksIDEyLCAxMCwgMTEsIDIxOSwgMTEsIDEwLCAxMSwgMjE5LCAxMCwgMTAsIDExLCAyMTksIAorICAgIDksIDEwLCAxMSwgMjE5LCA4LCAxMCwgMTEsIDIxOCwgMTUwLCAxMCwgMTEsIDIxOCwgMTQ5LCAxMCwgMTEsIDIxOCwgMTQ4LCAKKyAgICAxMCwgMTEsIDIxOCwgMTQ3LCAxMCwgMTEsIDIxOCwgMTQ2LCAxMCwgMTEsIDIxOCwgMTQ1LCAxMCwgMTEsIDIxOCwgMTQ0LCAKKyAgICAxMCwgMTEsIDIxOCwgMTQzLCAxMCwgMTEsIDIxOCwgMTQyLCAxMCwgMTEsIDIxOCwgMTQxLCAxMCwgMTEsIDIxOCwgMTQwLCAKKyAgICAxMCwgMTEsIDIxOCwgMTM5LCAxMCwgMTEsIDIxOCwgODgsIDEwLCAxMSwgMjE4LCA4NywgMTAsIDExLCAyMTgsIDg2LCAxMCwgCisgICAgMTEsIDIxOCwgODUsIDEwLCAxMSwgMjE4LCA4NCwgMTAsIDExLCAyMTgsIDgzLCAxMCwgMTEsIDIxOCwgODIsIDEwLCAxMSwgCisgICAgMjE4LCA4MSwgMTAsIDExLCAyMTgsIDgwLCAxMCwgMTEsIDIxNywgMTU2LCAxMCwgMTEsIDIxNywgMTU1LCAxMCwgMTEsIAorICAgIDIxNywgMTU0LCAxMCwgMTEsIDIxNywgMTUzLCAxMCwgMTEsIDIxNywgMTUyLCAxMCwgMTEsIDIxNywgMTUxLCAxMCwgMTEsIAorICAgIDIxNywgMTUwLCAxMCwgMTEsIDIxNywgMTQ5LCAxMCwgMTEsIDIxNywgMTQ4LCAxMCwgMTEsIDIxNywgMTQ3LCAxMCwgMTEsIAorICAgIDIxNywgMTQ2LCAxMCwgMTEsIDIxNywgMTQ1LCAxMCwgMTEsIDIxNywgMTQ0LCAxMCwgMTEsIDIxNywgMTQzLCAxMCwgMTEsIAorICAgIDIxNywgMTQyLCAxMCwgMTEsIDIxNywgMTQxLCAxMCwgMTEsIDIxNywgMTQwLCAxMCwgMTEsIDIxNywgMTM5LCAxMCwgMTEsIAorICAgIDIxNywgMTM4LCAxMCwgMTEsIDIxNywgMTM3LCAxMCwgMTEsIDIxNywgMTM2LCAxMCwgMTEsIDIxNywgMTM1LCAxMCwgMTEsIAorICAgIDIxNywgMTM0LCAxMCwgMTEsIDIxNywgMTMzLCAxMCwgMTEsIDIxNywgMTMyLCAxMCwgMTEsIDIxNywgMTMxLCAxMCwgMTEsIAorICAgIDIxNywgMTMwLCAxMCwgMTEsIDIxNywgMTI5LCAxMCwgMTEsIDIxNywgMTI4LCAxMCwgMTEsIDIxNywgMTI3LCAxMCwgMTEsIAorICAgIDIxNywgMTI2LCAxMCwgMTEsIDIxNywgMTI1LCAxMCwgMTEsIDIxNywgMTI0LCAxMCwgMTEsIDIxNywgMTIzLCAxMCwgMTEsIAorICAgIDIxNywgMTIyLCAxMCwgMTEsIDIxNywgMTIxLCAxMCwgMTEsIDIxNywgMTIwLCAxMCwgMTEsIDIxNywgMTE5LCAxMCwgMTEsIAorICAgIDIxNywgMTE4LCAxMCwgMTEsIDIxNywgMTE3LCAxMCwgMTEsIDIxNywgMTE2LCAxMCwgMTEsIDI1NSwgNTcsIDEwLCAxMSwgCisgICAgMjU1LCA1NiwgMTAsIDExLCAyNTUsIDU1LCAxMCwgMTEsIDI1NSwgNTQsIDEwLCAxMSwgMjU1LCA1MywgMTAsIDExLCAyNTUsIAorICAgIDUyLCAxMCwgMTEsIDI1NSwgNTEsIDEwLCAxMSwgMjU1LCA1MCwgMTAsIDExLCAyNTUsIDQ5LCAxMCwgMTEsIDI1NSwgNDgsIAorICAgIDEwLCAxMSwgMjU1LCA0NywgMTAsIDExLCAyNTUsIDQ2LCAxMCwgMTEsIDI1NSwgNDUsIDEwLCAxMSwgMjU1LCA0NCwgMTAsIAorICAgIDExLCAyNTUsIDQzLCAxMCwgMTEsIDI1NSwgNDIsIDEwLCAxMSwgMjU1LCA0MSwgMTAsIDExLCAyNTUsIDQwLCAxMCwgMTEsIAorICAgIDI1NSwgMzksIDEwLCAxMSwgMjU1LCAzOCwgMTAsIDExLCAyNTUsIDM3LCAxMCwgMTEsIDI1NSwgMzYsIDEwLCAxMSwgMjU1LCAKKyAgICAzNSwgMTAsIDExLCAyNTUsIDM0LCAxMCwgMTEsIDI1NSwgMzMsIDEwLCAxMSwgMjU1LCAzMiwgMTAsIDExLCAyNTUsIDMxLCAKKyAgICAxMCwgMTEsIDI1NSwgMzAsIDEwLCAxMSwgMjU1LCAyOSwgMTAsIDExLCAyNTUsIDI4LCAxMCwgMTEsIDI1NSwgMjcsIDEwLCAKKyAgICAxMSwgMjU1LCAyNiwgMTAsIDExLCAyNTUsIDI1LCAxMCwgMTEsIDI1NSwgMjQsIDQ2LCAyNiwgMTYsIDIyOCwgMjA2LCA0NiwgCisgICAgMjYsIDE2LCAyNDksIDE0OCwgNDYsIDI2LCAxNiwgMjI5LCAxNjMsIDQ2LCAyNiwgMTYsIDIzMCwgNjcsIDI0NiwgMjIxLCAKKyAgICA0NiwgMjYsIDE2LCAyMzAsIDY3LCAyNDgsIDIxNCwgNDYsIDI2LCAxNiwgMjE5LCAxODEsIDI0NiwgMjIxLCA0NiwgMjYsIAorICAgIDE2LCAyMTksIDE4MSwgMjQ4LCAyMTQsIDQ2LCAyNiwgMTYsIDIzNiwgMTk4LCA0NiwgMjYsIDE2LCAyMjIsIDIxNywgNDYsIAorICAgIDI2LCAxNiwgMjI5LCAyMzUsIDQ2LCAyNiwgMTYsIDIxNywgMjA1LCA0NiwgMjYsIDE2LCAyMTcsIDIwNiwgMjQ4LCAyMTQsIAorICAgIDQ2LCAyNiwgMTYsIDIzNiwgMTIsIDQ2LCAyNiwgMTYsIDI1NCwgODksIDI0NiwgMjIxLCA0NiwgMjYsIDE2LCAyNDYsIDkwLCAKKyAgICAyNDYsIDIyMSwgNDYsIDI2LCAxNiwgMjIyLCA3MywgNDYsIDI2LCAxNiwgMjM2LCAxNjQsIDQ2LCAyNiwgMTYsIDI1NCwgODAsIAorICAgIDQ2LCAyNiwgMTYsIDI1NCwgODEsIDI0OCwgMjE0LCA0NiwgMjYsIDE2LCAyMjIsIDIyMiwgNDYsIDI2LCAxNiwgMjIxLCAKKyAgICAyNDIsIDQ2LCAyNiwgMTYsIDIzMCwgMTQ4LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyNDQsIDU2LCAyNTQsIDQ3LCA0NiwgMjYsIAorICAgIDE2LCAyMjgsIDIwNSwgNDYsIDI2LCAxNiwgMjUxLCA2MiwgNDYsIDI2LCAxNiwgMjE5LCAxNzEsIDQ2LCAyNiwgMTYsIDIzNywgCisgICAgMTQ0LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMzYsIDE2NiwgMjU0LCA0NywgNDYsIDI2LCAxNiwgMjM2LCAxNjUsIDI1NCwgCisgICAgNDcsIDQ2LCAyNiwgMTYsIDIyNiwgMTE5LCA0NiwgMjYsIDE2LCAyMjksIDIyNiwgNDYsIDI2LCAxNiwgMjIzLCAxNTEsIAorICAgIDI1NCwgODMsIDQ2LCAyNiwgMTYsIDIzMCwgNjYsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIxOSwgMTgwLCAyNTQsIDQ3LCA0NiwgCisgICAgMjYsIDE2LCAyNTQsIDg0LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyNTQsIDc4LCA0NiwgMjYsIDE2LCAyMzYsIDY1LCA0NiwgCisgICAgMjYsIDE2LCAyMjcsIDE1NywgNDYsIDI2LCAxNiwgMjI5LCAxMDYsIDI1NCwgNDcsIDQ2LCAyNiwgMTYsIDIyMSwgMTc1LCAKKyAgICA0NiwgMjYsIDE2LCAyNTQsIDEyOSwgNDYsIDI2LCAxNiwgMjI2LCA3NSwgNDYsIDI2LCAxNiwgMjIyLCAyMjUsIDI1NCwgNDcsIAorICAgIDQ2LCAyNiwgMTYsIDIyMiwgMjI1LCAyMzMsIDIzOSwgMjIzLCAxNDksIDQ2LCAyNiwgMTYsIDIzMCwgNjEsIDI1NCwgNDcsIAorICAgIDQ2LCAyNiwgMTYsIDIyMiwgMTcsIDQ2LCAyNiwgMTYsIDIzNSwgOTcsIDQ2LCAyNiwgMTYsIDI0NywgNzcsIDQ2LCAyNiwgCisgICAgMTYsIDIyMSwgOTIsIDQ2LCAyNiwgMTYsIDIyMiwgNTIsIDQ2LCAyNiwgMTYsIDIzNiwgMTUsIDQ2LCAyNiwgMTYsIDI1NCwgCisgICAgODksIDI0NiwgOTAsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMzcsIAorICAgIDIzNCwgNDYsIDI2LCAxNiwgMjIxLCA2OCwgMjU0LCA0NywgNDYsIDI2LCAxNiwgMjM2LCAyMDEsIDIyMSwgNjcsIDQ2LCAyNiwgCisgICAgMTYsIDIyOSwgMTgyLCA0NiwgMjYsIDE2LCAyMjgsIDIwOSwgNDYsIDI2LCAxNiwgMjM2LCA0MiwgNDYsIDI2LCAxNiwgMjUxLCAKKyAgICA2LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMjcsIDIzMiwgNDYsIDI2LCAxNiwgMjI5LCAyMzgsIDI1NCwgNDcsIDQ2LCAyNiwgCisgICAgMTYsIDIyOSwgMjM2LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyNDIsIDYzLCA0NiwgMjYsIDE2LCAyMzIsIDIxNywgNDYsIDI2LCAKKyAgICAxNiwgMjI5LCAxNDgsIDQ2LCAyNiwgMTYsIDIzNiwgNDMsIDI1NCwgMTUyLCA0NiwgMjYsIDE2LCAyMjEsIDY4LCAyNTQsIAorICAgIDE1MiwgNDYsIDI2LCAxNiwgMjIzLCAxMzIsIDQ2LCAyNiwgMTYsIDI0NCwgMjUsIDQ2LCAyNiwgMTYsIDIzNywgMTQ0LCAKKyAgICAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjMwLCAxNDgsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMzAsIDY3LCAyMzIsIDEzMSwgCisgICAgNDYsIDI2LCAxNiwgMjI5LCAxNDcsIDQ2LCAyNiwgMTYsIDIzNiwgMjksIDQ2LCAyNiwgMTYsIDIyOSwgMTQ2LCA0NiwgMjYsIAorICAgIDE2LCAyMzYsIDE0LCA0NiwgMjYsIDE2LCAyMjksIDE4MywgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDIzNiwgMTY1LCAyMzIsIAorICAgIDEzMiwgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDIzNiwgMTY2LCAyMzIsIDEzMiwgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDIxNywgCisgICAgMjAzLCA0NiwgMjYsIDE2LCAyNTQsIDgxLCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjU0LCA4MiwgMjIyLCAyMjMsIDIzMiwgCisgICAgMTMxLCA0NiwgMjYsIDE2LCAyMTcsIDIwNCwgNDYsIDI2LCAxNiwgMjM2LCAxMywgNDYsIDI2LCAxNiwgMjQ2LCAyMTYsIDQ2LCAKKyAgICAyNiwgMTYsIDI1MSwgNjMsIDQ2LCAyNiwgMTYsIDIzMywgMTY4LCAyMzcsIDE0MywgNDYsIDI2LCAxNiwgMjE5LCAxODEsIAorICAgIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMjksIDEwNiwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDIyOCwgMjEwLCAyMzIsIDEzMSwgCisgICAgNDYsIDI2LCAxNiwgMjMwLCAxNDUsIDQ2LCAyNiwgMTYsIDI1NCwgMTAwLCA0NiwgMjYsIDE2LCAyMzQsIDE5NSwgNDYsIDI2LCAKKyAgICAxNiwgMjI5LCAyMzYsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyMjksIDIzOCwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDI0NiwgCisgICAgMTE5LCAyMjksIDIzNywgNDYsIDI2LCAxNiwgMjM1LCAyMDYsIDQ2LCAyNiwgMTYsIDI1NCwgMTAxLCA0NiwgMjYsIDE2LCAKKyAgICAyMjEsIDY4LCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjQ2LCAyMTksIDQ2LCAyNiwgMTYsIDIyMiwgMjI1LCAyMzIsIDEzMSwgCisgICAgNDYsIDI2LCAxNiwgMjIyLCAyMTgsIDQ2LCAyNiwgMTYsIDI1MSwgNiwgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDI0NiwgMTYxLCAKKyAgICA0NiwgMjYsIDE2LCAyMjYsIDc2LCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjE4LCAxMjQsIDIzNiwgNjUsIDQ2LCAyNiwgMTYsIAorICAgIDIyMSwgNjUsIDQ2LCAyNiwgMTYsIDIyOCwgMjExLCA0NiwgMjYsIDE2LCAyMjEsIDY5LCA0NiwgMjYsIDE2LCAyMjEsIDY2LCAKKyAgICA0NiwgMjYsIDE2LCAyMjgsIDIwOCwgNDYsIDI2LCAxNiwgMjIxLCA2NCwgNDYsIDI2LCAxNiwgMjI4LCAyMDcsIDQ2LCAyNiwgCisgICAgMTYsIDI0NCwgNTUsIDQ2LCAyNiwgMTYsIDI1NCwgNDEsIDQ2LCAyNiwgMTYsIDI0NiwgMTE5LCAyNTQsIDQxLCA0NiwgMjYsIAorICAgIDE2LCAyMzAsIDYxLCAyMzIsIDEzMSwgNDYsIDI2LCAxNiwgMjIyLCAxNiwgMjQ2LCAxMjcsIDQ2LCAyNiwgMTYsIDIyMiwgCisgICAgMTYsIDI0NiwgODksIDQ2LCAyNiwgMTYsIDIyMiwgMTgsIDI1NCwgODUsIDQ2LCAyNiwgMTYsIDIyMiwgMTEsIDIzNiwgMjQ0LCAKKyAgICAyNTQsIDc3LCA0NiwgMjYsIDE2LCAyMzYsIDIwMCwgNDYsIDI2LCAxNiwgMjQ2LCAxODYsIDQ2LCAyNiwgMTYsIDIxNywgCisgICAgMjUzLCAyMzYsIDE5NywgNDYsIDI2LCAxNiwgMjE3LCAyNTMsIDI1NCwgMTA5LCA0NiwgMjYsIDE2LCAyMjMsIDE1MCwgNDYsIAorICAgIDI2LCAxNiwgMjM2LCA2NiwgMjU0LCAxMDksIDQ2LCAyNiwgMTYsIDI0OCwgMjE1LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAKKyAgICAyMzYsIDE2LCAyNTQsIDQ3LCA0NiwgMjYsIDE2LCAyMzYsIDE2LCAyNTQsIDE1MiwgNDYsIDI2LCAxNiwgMjM2LCAxNiwgCisgICAgMjMyLCAxMzEsIDQ2LCAyNiwgMTYsIDI1NCwgODQsIDIzMiwgMTMxLCA0NiwgMjYsIDE2LCAyNTQsIDg2LCA0NiwgMjYsIDE2LCAKKyAgICAyNDgsIDIxNCwgNDYsIDI2LCAxNiwgMjIxLCA3NywgNDYsIDI2LCAxNiwgMjIyLCA0NCwgNDYsIDI2LCAxNiwgMjM2LCAzMywgCisgICAgNDYsIDI2LCAxNiwgMjM1LCAxMDIsIDI0NiwgMTgyLCAyNTAsIDI1NSwgNDYsIDI2LCAxNiwgMjM1LCAxMDIsIDI0NywgNzgsIAorICAgIDI1MSwgMCwgNDYsIDI2LCAxNiwgMjM1LCAxMDIsIDIyMSwgNzksIDI1MSwgMCwgNDYsIDI2LCAxNiwgMjM1LCAxMDIsIDIyMiwgCisgICAgNTQsIDI1MSwgMCwgNDYsIDI2LCAxNiwgMjM1LCAxMDIsIDIzNywgMjI5LCAyNTAsIDI1NSwgNDYsIDI2LCAxNiwgMjQ0LCAKKyAgICA1NiwgMjMyLCAxMzIsIDI1NCwgMTA5LCA0NiwgMjYsIDE2LCAyNDQsIDU2LCAyMjksIDIyNywgMjU0LCAzNywgNDYsIDI2LCAKKyAgICAxNiwgMjQ0LCA1NiwgMjI5LCAyMjcsIDI0OSwgNDAsIDQ2LCAyNiwgMTYsIDI0OCwgMjM4LCA0NiwgMjYsIDE2LCAyNDgsIAorICAgIDIzOSwgMjI5LCAyMjcsIDI1NCwgMzgsIDIzNiwgMTk3LCA0NiwgMjYsIDE2LCAyNDgsIDIzOSwgMjI5LCAyMjcsIDI1NCwgCisgICAgMzgsIDI1NCwgMTA5LCA0NiwgMjYsIDE2LCAyNDgsIDIzOSwgMjI5LCAyMjcsIDI0OSwgNDAsIDQ2LCAyNiwgMTYsIDIyMSwgCisgICAgODMsIDQ2LCAyNiwgMTYsIDI1NCwgNDIsIDQ2LCAyNiwgMTYsIDIzNywgMjM2LCA0NiwgMjYsIDE2LCAyNDksIDMsIDQ2LCAKKyAgICAyNiwgMTYsIDI1NCwgMjA0LCAyMjksIDIzLCAyNTQsIDQzLCA0NiwgMjYsIDE2LCAyNTQsIDIwNCwgMjU0LCA0MCwgNDYsIAorICAgIDI2LCAxNiwgMjU0LCAyMDQsIDI1NCwgNDMsIDQ2LCAyNiwgMTYsIDI1NCwgMjA0LCAyMzMsIDIzNCwgNDYsIDI2LCAxNiwgCisgICAgMjU0LCAyMDQsIDIzMywgMjQyLCA0NiwgMjYsIDE2LCAyNTQsIDIwNCwgMjQ0LCA1NywgNDYsIDI2LCAxNiwgMjU0LCAyMDQsIAorICAgIDI0NCwgNTQsIDQ2LCAyNiwgMTYsIDI1NCwgMjA0LCAyMjksIDIzLCAyNDQsIDU3LCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAKKyAgICAyMjgsIDIxNiwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjU0LCAxNTQsIDIyOCwgMjE2LCAyNDIsIDYxLCA0NiwgCisgICAgMjYsIDE2LCAyMzQsIDYwLCAyNDksIDM5LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzQsIDYwLCAyNTQsIDE1NCwgMjQ5LCAKKyAgICAzOSwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjIxLCA3MiwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgCisgICAgMjIxLCA4NCwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjIyLCA0OCwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjIyLCAKKyAgICA0OCwgMjM1LCAxMDUsIDI0MiwgNjEsIDQ2LCAyNiwgMTYsIDIzNCwgNjAsIDIzNSwgMTA1LCAyNDIsIDYxLCA0NiwgMjYsIAorICAgIDE2LCAyMzQsIDYwLCAyMjksIDU1LCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyMzcsIDE0OSwgMjIyLCA2OSwgMjQyLCA2MiwgCisgICAgNDYsIDI2LCAxNiwgMjU0LCA4MiwgMjIyLCA2OSwgMjQyLCA2MiwgNDYsIDI2LCAxNiwgMjQ1LCAyNDQsIDIyMiwgNDUsIDQ2LCAKKyAgICAyNiwgMTYsIDI0NSwgMjQ0LCAyMzMsIDEyNiwgNDYsIDI2LCAxNiwgMjQ1LCAyNDQsIDI0OCwgMjQzLCA0NiwgMjYsIDE2LCAKKyAgICAyMzQsIDYwLCAyMTksIDE3NSwgMjQyLCA2MSwgNDYsIDI2LCAxNiwgMjM0LCA2MCwgMjI4LCAyMTUsIDI0MiwgNjEsIDQ2LCAKKyAgICAyNiwgMTYsIDIzNCwgNjAsIDIyOSwgNTUsIDIyMiwgNDgsIDI0MiwgNjEsIDQ2LCAyNiwgMTYsIDI0NCwgNTIsIDIzMywgMzQsIAorICAgIDI1NCwgODUsIDQ2LCAyNiwgMTYsIDI0NCwgNTIsIDIzMywgMzQsIDI0OCwgMjEzLCA0NiwgMjYsIDE2LCAyNDYsIDE5NSwgCisgICAgMjM2LCAyNDQsIDI0NSwgOTMsIDIxOSwgNjEsIDQ2LCAyNiwgMTYsIDIzNywgMjM1LCA0NiwgMjYsIDE2LCAyMzcsIDIzMywgCisgICAgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjU0LCA0OCwgMjQ5LCAzOCwgMjQyLCA2MCwgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjQ5LCAKKyAgICAxLCAxODcsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDI0OSwgMSwgMjMyLCAyMTcsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIDIzMiwgCisgICAgMjEzLCAyNDIsIDYxLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDksIDEsIDI0OSwgMTUsIDQ2LCAyNiwgMTYsIDI0NSwgOTMsIAorICAgIDIyNCwgNjEsIDI0OSwgMCwgMjQ5LCAxNSwgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjQ5LCAxLCAyMzYsIDE4NCwgNDYsIDI2LCAKKyAgICAxNiwgMjQ1LCA5MywgMjQ5LCAxLCAyMTcsIDIxLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDksIDEsIDIzMiwgNjMsIDIzNiwgCisgICAgMTk3LCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyNDksIDEsIDIzMiwgNjMsIDI1NCwgMTA5LCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAKKyAgICAyMzQsIDkxLCAyNTEsIDEsIDI0OCwgMjQzLCA0NiwgMjYsIDE2LCAyNDUsIDkzLCAyMzQsIDkxLCAyNTEsIDEsIDIzMywgCisgICAgMTI2LCA0NiwgMjYsIDE2LCAyNDUsIDIwNCwgMjI0LCA2MSwgMjUxLCAxLCAyMTksIDE3NCwgNDYsIDI2LCAxNiwgMjQ1LCAKKyAgICA5MywgMjI0LCA2MSwgMjUxLCAxLCAyMjIsIDIyNiwgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjMyLCAxMzMsIDQ2LCAyNiwgMTYsIAorICAgIDI1MSwgMiwgMjE2LCAyNTMsIDQ2LCAyNiwgMTYsIDI1MSwgMiwgMjM2LCA2NCwgNDYsIDI2LCAxNiwgMjUxLCAyLCAyMjMsIAorICAgIDI1MCwgNDYsIDI2LCAxNiwgMjQ1LCA5MywgMjQyLCAxMDcsIDIxNywgMjUyLCAyMjIsIDQ5LCA0NiwgMjYsIDE2LCAyNDUsIAorICAgIDkzLCAyNDYsIDE5NiwgMjU0LCAxMDIsIDQ2LCAyNiwgMTYsIDIxNywgMjUyLCAyMjEsIDczLCA0NiwgMjYsIDE2LCAyNDgsIAorICAgIDI1MSwgMjIxLCA3MywgNDYsIDI2LCAxNiwgMjQ4LCAyNTEsIDIyMiwgNDksIDQ2LCAyNiwgMTYsIDI0OCwgMjUxLCAyNTQsIAorICAgIDg3LCAyNDcsIDc4LCAyNDgsIDE2MSwgNDYsIDI2LCAxNiwgMjQ4LCAyNTEsIDIzMywgMTI0LCAyMjIsIDUzLCAyNDgsIDE2MSwgCisgICAgNDYsIDI2LCAxNiwgMjQ4LCAyNTEsIDI0OCwgMjM1LCAyNDYsIDk5LCAyNDgsIDE2MSwgNDYsIDI2LCAxNiwgMjQ4LCAyNTEsIAorICAgIDIyMSwgODEsIDIzMCwgMTUyLCAyNDgsIDE2MSwgNDYsIDI2LCAxNiwgMjE3LCAyNTIsIDI1NCwgODcsIDI0NywgNzgsIDI0OCwgCisgICAgMTYxLCA0NiwgMjYsIDE2LCAyMTcsIDI1MiwgMjMzLCAxMjQsIDIyMiwgNTMsIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyMTcsIAorICAgIDI1MiwgMjQ4LCAyMzUsIDI0NiwgOTksIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyMTcsIDI1MiwgMjIxLCA4MSwgMjMwLCAKKyAgICAxNTIsIDI0OCwgMTYxLCA0NiwgMjYsIDE2LCAyNDQsIDE3OSwgMjQ4LCAyNTAsIDQ2LCAyNiwgMTYsIDI0NCwgMTc5LCAyMTcsIAorICAgIDI1MSwgNDYsIDI2LCAxNiwgMjQ5LCAyLCAyNTQsIDg3LCAyMzMsIDE2OSwgNDYsIDI2LCAxNiwgMjQ5LCAyLCAyNTQsIDg3LCAKKyAgICAyMzQsIDgsIDQ2LCAyNiwgMTYsIDI0OSwgMiwgMjQ4LCAyMTQsIDQ2LCAyNiwgMTYsIDI0OSwgMiwgMjIyLCA5LCA0NiwgMjYsIAorICAgIDE2LCAyMjQsIDExNywgMjIyLCA5LCA0NiwgMjYsIDE2LCAyMjQsIDExNywgMjIyLCAxMCwgMjQ4LCAyMDEsIDQ2LCAyNiwgCisgICAgMTYsIDIyNCwgMTE3LCAyMjIsIDEwLCAyMjEsIDc0LCA0NiwgMjYsIDE2LCAyMjQsIDExNywgMjIyLCAxMCwgMjIyLCA0MiwgCisgICAgNDYsIDI2LCAxNiwgMjI0LCAxMTcsIDI1NCwgMTcsIDQ2LCAyNiwgMTYsIDIyNCwgMTE3LCAyNTQsIDE4LCAyNDgsIDIwMSwgCisgICAgNDYsIDI2LCAxNiwgMjI0LCAxMTcsIDI1NCwgMTgsIDIyMSwgNzQsIDQ2LCAyNiwgMTYsIDIyNCwgMTE3LCAyNTQsIDE4LCAKKyAgICAyMjIsIDQyLCA0NiwgMjYsIDE2LCAyNDgsIDIzNiwgMjQ0LCAxNjEsIDQ2LCAyNiwgMTYsIDI0OCwgMjQyLCAyMzAsIDg2LCAKKyAgICA0NiwgMjYsIDE2LCAyMjMsIDE0NCwgNDYsIDI2LCAxNiwgMjU0LCAzNCwgMTg3LCA0NiwgMjYsIDE2LCAyNTQsIDM0LCAyMTksIAorICAgIDYxLCA0NiwgMjYsIDE2LCAyNTQsIDM0LCAyNDUsIDAsIDQ2LCAyNiwgMTYsIDI1NCwgMzQsIDI0OSwgMTUsIDQ2LCAyNiwgCisgICAgMTYsIDI1NCwgMzQsIDIzNiwgMTg0LCA0NiwgMjYsIDE2LCAyNTQsIDM0LCAyMTcsIDIxLCA0NiwgMjYsIDE2LCAyNTQsIDM0LCAKKyAgICAyMzIsIDYyLCA0NiwgMjYsIDE2LCAyMzYsIDE2NSwgMjMyLCAxMzIsIDIzMywgMjQxLCA0NiwgMjYsIDE2LCAyMzYsIDE2NiwgCisgICAgMjMyLCAxMzIsIDIzMywgMjQxLCA0NiwgMjYsIDE2LCAyMzYsIDE2NSwgMjMyLCAxMzIsIDIzNiwgMTk3LCA0NiwgMjYsIDE2LCAKKyAgICAyMzYsIDE2NiwgMjMyLCAxMzIsIDIzNiwgMTk3LCA0NiwgMjYsIDE2LCAyMzYsIDY2LCAyMzYsIDE5NywgNDYsIDI2LCAxNiwgCisgICAgMjQ0LCA1NiwgMjMyLCAxMzIsIDIzNiwgMTk3LCAyNiwgMTYsIDIyNCwgMTA5LCAyNTIsIDE5NywgMjYsIDE2LCA1MSwgMjUyLCAKKyAgICAxOTcsIDI2LCAxNiwgMzksIDI1MiwgMTk3LCAyNiwgMTYsIDIyNywgMTYwLCAzOSwgMjUyLCAxOTcsIDI2LCAxNiwgMjQ5LCAKKyAgICAxNDUsIDI1MiwgMTk3LCAyNiwgMTYsIDIyNCwgMTkyLCAyNTIsIDE5NywgMjYsIDE2LCA0MiwgMjI3LCAxODIsIDU1LCAyNiwgCisgICAgMTYsIDQ1LCAyMjcsIDE4MiwgNTUsIDI2LCAxNiwgMjI3LCAxODIsIDI0OCwgMTQzLCAyNiwgMTYsIDI0OSwgMTg0LCAyMjYsIAorICAgIDc5LCAyNiwgMTYsIDI0OSwgMjA4LCAyNTEsIDE0MSwgMjYsIDE2LCAyMjYsIDc5LCAyNiwgMTYsIDI1MCwgMTgwLCAyNiwgCisgICAgMTYsIDIyNywgMTgwLCAyNDUsIDE5MywgMjYsIDE2LCAyMjcsIDE4MCwgMjQ1LCAxOTIsIDI2LCAxNiwgMjI3LCAxODAsIAorICAgIDI0NSwgMTkxLCAyNiwgMTYsIDI0NSwgMjEwLCAyNiwgMTYsIDI0NSwgMjExLCA1NiwgMjYsIDE2LCAyNTIsIDEwLCA3OCwgCisgICAgMjYsIDE2LCAyNTEsIDE2MywgMjYsIDE2LCAyNTIsIDE5LCAyNiwgMTYsIDExNSwgMjYsIDE2LCAyMzAsIDEzNiwgMjIzLCAKKyAgICAxNjMsIDI2LCAxNiwgMjIwLCAyMDUsIDIyMywgMTYzLCAyNiwgMTYsIDIyMSwgMjI3LCAyMjMsIDE2MywgMjYsIDE2LCAyNDUsIAorICAgIDExNSwgMjIzLCAxNjMsIDI2LCAxNiwgMjQ1LCAxNjksIDIyMywgMTYzLCAyNiwgMTYsIDIyNCwgODEsIDIyMywgMTYzLCAyNiwgCisgICAgMTYsIDIyNCwgNzksIDI0NSwgMTAxLCAyNiwgMTYsIDI0NSwgMTEzLCAyNDUsIDEwMSwgMjYsIDE2LCAyNDUsIDY4LCAyNTAsIAorICAgIDIwNywgMjYsIDE2LCAyNDUsIDY4LCAyNTAsIDIwOCwgMjMwLCA4OCwgMjU0LCAxNDUsIDI2LCAxNiwgMjQ1LCA2OCwgMjUwLCAKKyAgICAyMDgsIDIzMCwgODgsIDI1MiwgMTg1LCAyNiwgMTYsIDI1MSwgMjAzLCAyNTAsIDIwNywgMjYsIDE2LCAyNDYsIDc1LCAyNTAsIAorICAgIDIwNywgMjYsIDE2LCAyNDYsIDc1LCAyNTAsIDIwOCwgMjMwLCA4OCwgMjU0LCAxNDUsIDI2LCAxNiwgMjQ2LCA3NSwgMjUwLCAKKyAgICAyMDgsIDIzMCwgODgsIDI1MiwgMTg1LCAyNiwgMTYsIDI0NywgMTE2LCAyNTAsIDIwNiwgMjYsIDE2LCAyNDcsIDExNiwgCisgICAgMjUwLCAyMDUsIDI2LCAxNiwgMjMzLCA4NSwgMjM0LCAyNCwgMjI3LCAxNjgsIDI2LCAxNiwgNTEsIDIyNSwgMCwgMjYsIDE2LCAKKyAgICA1MSwgMjQ1LCAxNTYsIDI2LCAxNiwgMjQ1LCAxNTcsIDIyMCwgNjMsIDI2LCAxNiwgMjQ1LCAxNTcsIDI0NywgMTMyLCAyNiwgCisgICAgMTYsIDIzMiwgMjA1LCAyMjAsIDYzLCAyNiwgMTYsIDIzMiwgMjA1LCAyNDcsIDEzMiwgMjYsIDE2LCAyMjUsIDEsIDIyMCwgCisgICAgNjMsIDI2LCAxNiwgMjI1LCAxLCAyNDcsIDEzMiwgMjYsIDE2LCAyMjgsIDkwLCAxNDUsIDIyNSwgMCwgMjYsIDE2LCAyMjgsIAorICAgIDkwLCAxNDUsIDI0NSwgMTU2LCAyNiwgMTYsIDI1MCwgMTY2LCAyMjEsIDE3NywgMjYsIDE2LCAyNTAsIDY5LCAyMjEsIDE3NywgCisgICAgMjYsIDE2LCAyMzAsIDg4LCAyNTQsIDE0NSwgMjYsIDE2LCAyMzAsIDg4LCAyNTIsIDE4NSwgMjYsIDE2LCAyMjgsIDc0LCAKKyAgICAyNTQsIDE0NSwgMjYsIDE2LCAyMjgsIDc0LCAyNTIsIDE4NSwgMjYsIDE2LCAyMzMsIDg4LCAyMjcsIDE2OCwgMjYsIDE2LCAKKyAgICAyMTgsIDIwNSwgMjI3LCAxNjgsIDI2LCAxNiwgMTQ0LCAyMjcsIDE2OCwgMjYsIDE2LCAyMjgsIDkwLCAyMjcsIDE2OCwgMjYsIAorICAgIDE2LCAyNDYsIDIzMiwgMjI3LCAxNjgsIDI2LCAxNiwgMjI0LCA3NiwgMjI3LCAxNjgsIDI2LCAxNiwgMjIxLCAyNDMsIDIyNywgCisgICAgMTY4LCAyNiwgMTYsIDIyNCwgNjgsIDIyNywgMTY4LCAyNiwgMTYsIDEzMSwgMjQyLCAxNjIsIDIyMCwgMjE3LCAyMjcsIAorICAgIDE2OCwgMjYsIDE2LCAyMTgsIDE1MiwgMjMxLCAxNzgsIDI2LCAxNiwgODgsIDIzMSwgMTc4LCAyNiwgMTYsIDI1MCwgMjIyLCAKKyAgICAyMTgsIDE1MiwgMjMxLCAxNzgsIDI2LCAxNiwgNDAsIDIzMSwgMTc5LCAyMTgsIDIwNywgMjYsIDE2LCA0MCwgMjMxLCAxNzksIAorICAgIDI1MiwgNTMsIDI2LCAxNiwgMjIxLCA5MSwgMjMxLCAxNzksIDEwOCwgMjE4LCAyMDcsIDI2LCAxNiwgMjIxLCA5MSwgMjMxLCAKKyAgICAxNzksIDEwOCwgMjUyLCA1MywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgNDIsIDIxOCwgMjA3LCAyNiwgMTYsIDIyMSwgCisgICAgOTEsIDIzMSwgMTc5LCA0MiwgMjUyLCA1MywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgNDUsIDIxOCwgMjA3LCAyNiwgCisgICAgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCA0NSwgMjUyLCA1MywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgMTEzLCAyMTgsIAorICAgIDIwNywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgMTEzLCAyNTIsIDUzLCAyNiwgMTYsIDIyMSwgOTEsIDIzMSwgMTc5LCAKKyAgICAxMDgsIDQ1LCAyMTgsIDIwNywgMjYsIDE2LCAyMjEsIDkxLCAyMzEsIDE3OSwgMTA4LCA0NSwgMjUyLCA1MywgMjYsIDE2LCAKKyAgICAyMzMsIDExOCwgMjMxLCAxNzksIDIxOCwgMjA3LCAyNiwgMTYsIDIzMywgMTE4LCAyMzEsIDE3OSwgMjUyLCA1MywgMjYsIAorICAgIDE2LCAyMjEsIDg4LCAyMzEsIDE3OSwgMTEzLCAyMTgsIDIwNywgMjYsIDE2LCAyMjEsIDg4LCAyMzEsIDE3OSwgMTEzLCAKKyAgICAyNTIsIDUzLCAyNiwgMTYsIDIyOSwgMjMwLCAyMzEsIDE3OCwgMjYsIDE2LCAyMTksIDY3LCAyMzEsIDE3OCwgMjYsIDE2LCAKKyAgICAyMzEsIDE3OSwgMjUyLCA1MywgMjYsIDE2LCAyMzEsIDExMSwgMjMxLCAxNzgsIDI2LCAxNiwgMjUwLCAxODUsIDIzMSwgCisgICAgMTc5LCAyMTgsIDIwNywgMjYsIDE2LCAyNTAsIDE4NSwgMjMxLCAxNzksIDI1MiwgNTMsIDI2LCAxNiwgMjUyLCA4LCAyNiwgCisgICAgMTYsIDIxOCwgMjA1LCAyMzEsIDE4MCwgMjYsIDE2LCAxNDQsIDIzMSwgMTgwLCAyNiwgMTYsIDIyOCwgOTAsIDIzMSwgMTgwLCAKKyAgICAyNiwgMTYsIDI0NiwgMjMyLCAyMzEsIDE4MCwgMjYsIDE2LCAyMjQsIDc2LCAyMzEsIDE4MCwgMjYsIDE2LCAyMjEsIDI0MywgCisgICAgMjMxLCAxODAsIDI2LCAxNiwgMjI0LCA2OCwgMjMxLCAxODAsIDI2LCAxNiwgMTMxLCAyNDIsIDE2MiwgMjIwLCAyMTcsIAorICAgIDIzMSwgMTgwLCAyNiwgMTYsIDM2LCAyMjMsIDE0NiwgMjYsIDE2LCAzNiwgMjIzLCAyMzMsIDIyMywgMTQ2LCAyNiwgMTYsIAorICAgIDM2LCAyMjEsIDk3LCAyNiwgMTYsIDM2LCAyMjEsIDk2LCAyNiwgMTYsIDM2LCAyMjEsIDk1LCAyNiwgMTYsIDI0NSwgMTgzLCAKKyAgICAyMjEsIDk3LCAyNiwgMTYsIDI0NSwgMTgzLCAyMjEsIDk2LCAyNiwgMTYsIDI0NSwgMTgzLCAyMjEsIDk1LCAyNiwgMTYsIAorICAgIDM2LCAyNTMsIDIzMCwgMjQ4LCAxNDUsIDI2LCAxNiwgMzYsIDI0NSwgMTYyLCAyNiwgMTYsIDM2LCAyNDUsIDE2MSwgMjYsIAorICAgIDE2LCAzNiwgMjQ1LCAxNjAsIDI2LCAxNiwgMzYsIDI0NSwgMTU5LCAyNiwgMTYsIDM2LCAyNDUsIDE1OCwgMjYsIDE2LCAKKyAgICAyNTIsIDEzMSwgMjUyLCAxNDMsIDI2LCAxNiwgMjQ2LCAxOTAsIDI1MiwgMTQzLCAyNiwgMTYsIDI1MiwgMTMxLCAyMjEsIAorICAgIDIwMCwgMjYsIDE2LCAyNDYsIDE5MCwgMjIxLCAyMDAsIDI2LCAxNiwgMjUyLCAxMzEsIDIyNCwgNDQsIDI2LCAxNiwgMjQ2LCAKKyAgICAxOTAsIDIyNCwgNDQsIDI2LCAxNiwgMjUyLCAxMzEsIDIyOSwgMTE1LCAyNiwgMTYsIDI0NiwgMTkwLCAyMjksIDExNSwgMjYsIAorICAgIDE2LCAzNiwgMjU1LCAwLCAyNiwgMTYsIDM2LCAyMjMsIDE2NSwgMjYsIDE2LCAzNiwgMjIyLCA1OCwgMjYsIDE2LCAzNiwgCisgICAgMjIzLCAxNjYsIDI2LCAxNiwgMzYsIDIzNCwgNzEsIDI2LCAxNiwgMzYsIDIzNCwgNzAsIDI2LCAxNiwgMzYsIDI1NCwgMjU1LCAKKyAgICAyNiwgMTYsIDM2LCAyMzQsIDI0MCwgMjYsIDE2LCAyNTQsIDI1LCAyMjAsIDYzLCAyNiwgMTYsIDI1NCwgMjUsIDI0NywgCisgICAgMTMyLCAyNiwgMTYsIDM2LCAyNDgsIDE1OCwgMjYsIDE2LCAzNiwgMjI3LCA5MSwgMjYsIDE2LCAzNiwgMjQ1LCAxNTAsIDI2LCAKKyAgICAxNiwgMzYsIDIyNCwgNDAsIDI2LCAxNiwgMzYsIDI1MiwgMTEzLCAyNiwgMTYsIDM2LCA1MSwgMjIxLCAxMjQsIDI2LCAxNiwgCisgICAgMzYsIDIyMSwgNzgsIDIyMSwgMTI0LCAyNiwgMTYsIDIyNywgOTUsIDI2LCAxNiwgMjIzLCA5OSwgMjYsIDE2LCAyMTcsIAorICAgIDE1NywgMjYsIDE2LCAyMjksIDEwNywgMjYsIDE2LCAyMzMsIDIzMSwgMjYsIDE2LCAyNDUsIDEyMSwgMjYsIDE2LCAyNTAsIAorICAgIDEwNiwgMjYsIDE2LCAyNDksIDgzLCAyNiwgMTYsIDI0NCwgNDcsIDIzMSwgMTgxLCAyMjQsIDU1LCAyNiwgMTYsIDI0NCwgCisgICAgNDcsIDIzMSwgMTgxLCAyMzEsIDIwNSwgMjI0LCA1NSwgMjYsIDE2LCAyMjEsIDEwOSwgMjYsIDE2LCAyMjAsIDIzNywgMjYsIAorICAgIDE2LCAyMzcsIDE3MCwgMjIwLCAyMzcsIDI2LCAxNiwgMjIwLCAyMzgsIDIyNCwgNTUsIDI2LCAxNiwgMjIwLCAyMzgsIDIyMCwgCisgICAgNjMsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTksIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTYsIDI2LCAxNiwgMjMwLCAKKyAgICA5OSwgMjIzLCAxMTUsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTQsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTMsIDI2LCAKKyAgICAxNiwgMjMwLCA5OSwgMjIzLCAxMTIsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTEsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAKKyAgICAxMTAsIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMDksIDI2LCAxNiwgMjMwLCA5OSwgMjIzLCAxMTgsIDI2LCAxNiwgMjMwLCAKKyAgICA5OSwgMjIzLCAxMTcsIDI2LCAxNiwgMjQzLCAxNjksIDI2LCAxNiwgMjMyLCAxNDAsIDI2LCAxNiwgMjQ2LCAxOTAsIDExNywgCisgICAgMjIzLCAxNDAsIDI2LCAxNiwgMjQ5LCA3NywgMjI0LCA1NSwgMjYsIDE2LCAzNiwgMTEzLCAyNTIsIDI0LCAyNiwgMTYsIDM2LCAKKyAgICAxMDgsIDI1MiwgMjQsIDI2LCAxNiwgMzYsIDI0MywgMTc4LCAyNiwgMTYsIDM2LCAyMjQsIDM0LCAyMjksIDU5LCAyNiwgMTYsIAorICAgIDIyOSwgMTk1LCA3OCwgMjYsIDE2LCAyMjksIDE5NSwgMTA4LCA3OCwgMjYsIDE2LCAxNDQsIDIyOSwgMTk1LCA3OCwgMjYsIAorICAgIDE2LCAyNDQsIDc0LCAyMjAsIDYzLCAyNiwgMTYsIDI0NCwgNzQsIDI0NywgMTMyLCAyNiwgMTYsIDIsIDI0NSwgMTgyLCAyNiwgCisgICAgMTYsIDI0OSwgMTY4LCAyNiwgMTYsIDI0OSwgMTY5LCAyNTQsIDE1NywgMjYsIDE2LCAyMzQsIDQ2LCAyNiwgMTYsIDIzNCwgCisgICAgMjUwLCAyNiwgMTYsIDI1MiwgNSwgMjYsIDE2LCAyMjUsIDcxLCAyMTgsIDIwNywgMjYsIDE2LCAyMjUsIDcxLCAyNTIsIDUzLCAKKyAgICAyNiwgMTYsIDIzMywgMTU3LCAyNiwgMTYsIDIzMywgMTU4LCAyNTIsIDUzLCAyNiwgMTYsIDIyNSwgNjUsIDIxOCwgMjA3LCAKKyAgICAyNiwgMTYsIDIyNSwgNjUsIDI1MiwgNTMsIDI2LCAxNiwgMjQ1LCA4MiwgMjE4LCAyMDcsIDI2LCAxNiwgMjQ1LCA4MiwgCisgICAgMjUyLCA1MywgMjYsIDE2LCAyMzQsIDI1MSwgMjI5LCAxNjcsIDIyNywgMTY4LCAyNiwgMTYsIDIzNCwgMjUxLCAyMzcsIAorICAgIDIyOCwgMjI3LCAxNjgsIDI2LCAxNiwgMjUyLCA2LCAyMjcsIDE2OCwgMjYsIDE2LCAyMjUsIDcxLCAyMjcsIDE2OCwgMjYsIAorICAgIDE2LCAyMzMsIDE1OCwgMjI3LCAxNjgsIDI2LCAxNiwgMjI1LCA2NSwgMjI3LCAxNjgsIDI2LCAxNiwgMjIyLCA2NywgMjI5LCAKKyAgICAxNjUsIDI1MCwgODcsIDIyOCwgMjI0LCAyMjksIDE2NiwgMjYsIDE2LCAyMjIsIDY3LCAyMjksIDE2NSwgMjUwLCA4NywgCisgICAgMjI4LCAyMjQsIDIzNywgMjI3LCAyNiwgMTYsIDIyMiwgNjcsIDIyOSwgMTY1LCAyNTAsIDg3LCAyMjgsIDIyNCwgMjI5LCAKKyAgICAxNjcsIDI0OCwgMjI0LCAyNiwgMTYsIDIyMiwgNjcsIDIzNywgMjI2LCAyNTAsIDg3LCAyMjgsIDIyNCwgMjI5LCAxNjYsIAorICAgIDI2LCAxNiwgMjIyLCA2NywgMjM3LCAyMjYsIDI1MCwgODcsIDIyOCwgMjI0LCAyMzcsIDIyNywgMjYsIDE2LCAyMjIsIDY3LCAKKyAgICAyMzcsIDIyNiwgMjUwLCA4NywgMjI4LCAyMjQsIDIzNywgMjI4LCAyNDgsIDIyNCwgMjYsIDE2LCAyMjIsIDY3LCAyMzcsIAorICAgIDIyNiwgMjUwLCA4NywgMjI4LCAyMjQsIDIzNywgMjI4LCAyNDgsIDIyMywgMjYsIDE2LCAyMjIsIDY3LCAyMzcsIDIyNiwgCisgICAgMjUwLCA4NywgMjI4LCAyMjQsIDIzNywgMjI4LCAyNDgsIDIyMiwgMjYsIDE2LCAyNTAsIDEwMywgMjYsIDE2LCAyNDQsIDI2LCAKKyAgICAyNTEsIDIwMywgMjUwLCAyMDcsIDI2LCAxNiwgMjQ0LCAyNiwgMjQ2LCA3NSwgMjUwLCAyMDcsIDI2LCAxNiwgNDAsIDI1MywgCisgICAgMjA0LCAyNiwgMTYsIDIxOSwgODEsIDI2LCAxNiwgMjI5LCAzNSwgMjYsIDE2LCAyNTAsIDIwMCwgMjYsIDE2LCAyMjYsIAorICAgIDExMCwgMjYsIDE2LCAyNTAsIDIwMiwgMjYsIDE2LCAyMjEsIDExNSwgMjYsIDE2LCAyMjksIDE3LCAyNiwgMTYsIDIyOSwgCisgICAgMTgsIDI0NSwgMTUyLCAyNiwgMTYsIDIyNiwgMTExLCAyNDUsIDE1MiwgMjYsIDE2LCAyMjEsIDExNiwgMjI3LCAxNjYsIDI2LCAKKyAgICAxNiwgMjI5LCAxNTQsIDIyMywgOTUsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTgsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgCisgICAgNywgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyNTMsIDIzLCAyMTksIDcxLCAxNjUsIDIyMiwgMjQ2LCAyMywgMjE5LCA3MSwgCisgICAgMTY1LCAyMjIsIDIzOCwgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMzIsIDIzLCAyMTksIDcxLCAxNjUsIDIyMiwgMjMxLCAKKyAgICAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIzMCwgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMjksIDIzLCAyMTksIDcxLCAxNjUsIAorICAgIDIyMywgMTcsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTYsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTUsIDIzLCAyMTksIAorICAgIDcxLCAxNjUsIDIyMywgMTQsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTMsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTIsIAorICAgIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTEsIDIzLCAyMTksIDcxLCAxNjUsIDIyMywgMTAsIDIzLCAyMTksIDcxLCAxNjUsIAorICAgIDIyMywgOSwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCA4LCAyMywgMjE5LCA3MSwgMTY1LCAyMjMsIDYsIDIzLCAyMTksIDcxLCAKKyAgICAxNjUsIDIyMywgNSwgMjMsIDIxOSwgNzEsIDE2NSwgMjIzLCA0LCAyMywgMjE5LCA3MSwgMTY1LCAyMjMsIDMsIDIzLCAyMTksIAorICAgIDcxLCAxNjUsIDIyMywgMiwgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMzcsIDIzLCAyMTksIDcxLCAxNjUsIDIyMiwgMjM2LCAKKyAgICAyMywgMjE5LCA3MSwgMTY1LCAyMjIsIDIzNSwgMjMsIDIxOSwgNzEsIDE2NSwgMjIyLCAyMzQsIDIzLCAyMTksIDcxLCAxNjUsIAorICAgIDIyMiwgMjMzLCAyMywgMjM3LCAxODksIDE2NSwgMjIzLCAxOCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgNywgMjMsIDIzNywgCisgICAgMTg5LCAxNjUsIDIyMiwgMjQ2LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzgsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIAorICAgIDIzMSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjMwLCAyMywgMjM3LCAxODksIDE2NSwgMjIzLCAxNiwgMjMsIDIzNywgCisgICAgMTg5LCAxNjUsIDIyMywgMTUsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDE0LCAyMywgMjM3LCAxODksIDE2NSwgMjIzLCAKKyAgICAxMywgMjMsIDIzNywgMTg5LCAxNjUsIDIyMywgMTAsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDksIDIzLCAyMzcsIDE4OSwgCisgICAgMTY1LCAyMjMsIDgsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDMsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDIsIDIzLCAKKyAgICAyMzcsIDE4OSwgMTY1LCAyMjMsIDEsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjMsIDAsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIAorICAgIDI1NSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjU0LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyNTIsIDIzLCAyMzcsIAorICAgIDE4OSwgMTY1LCAyMjIsIDI1MSwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjUwLCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAKKyAgICAyNDksIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDI0OCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjQ3LCAyMywgMjM3LCAKKyAgICAxODksIDE2NSwgMjIyLCAyNDUsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDI0NCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgCisgICAgMjQzLCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyNDIsIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIDI0MSwgMjMsIDIzNywgCisgICAgMTg5LCAxNjUsIDIyMiwgMjQwLCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzksIDIzLCAyMzcsIDE4OSwgMTY1LCAyMjIsIAorICAgIDIzNywgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjM2LCAyMywgMjM3LCAxODksIDE2NSwgMjIyLCAyMzUsIDIzLCAyMzcsIAorICAgIDE4OSwgMTY1LCAyMjIsIDIzNCwgMjMsIDIzNywgMTg5LCAxNjUsIDIyMiwgMjMzLCAzNiwgMjMsIDI2LCAyMjEsIDc1LCAzNiwgCisgICAgMjMsIDI2LCAyMjIsIDQzLCAzNiwgMjMsIDI2LCAyMjksIDE3NCwgMjMsIDI2LCAyMzUsIDEwMSwgMjMzLCAxMjUsIDM1LCAKKyAgICAyNDcsIDgsIDI0OCwgMjM3LCAzNSwgMjQzLCAxNTAsIDI0NywgOCwgMjQ4LCAyMzcsIDM1LCAyNDIsIDE2NSwgMjQ3LCA4LCAKKyAgICAyNDgsIDIzNywgMzUsIDI0NywgNywgMjQzLCAxNTEsIDI0OCwgMjM3LCAzNSwgMjQ3LCA3LCAyNDIsIDE2NCwgMjQ4LCAyMzcsIAorICAgIDM1LCAyNDcsIDgsIDE1OSwgMzUsIDI1MSwgODQsIDE1OSwgMzUsIDI0NSwgOTAsIDI1MCwgMjIxLCAxNTksIDM1LCAyMzMsIAorICAgIDE1MCwgMTU5LCAzNSwgMjUyLCAxOTIsIDE1OSwgMzUsIDIzNiwgMTgxLCAyMjQsIDQzLCAxNTksIDM1LCAyNTAsIDEzMywgCisgICAgMTU5LCAzNSwgMjU0LCA5LCAxNTksIDM1LCAyMzAsIDEwOSwgMTU5LCAzNSwgMjUyLCAxMywgMjMwLCA4MywgMTU5LCAzNSwgCisgICAgMjQ5LCA3OSwgMTU2LCAyNDgsIDE5OCwgMTU5LCAzNSwgMjQ4LCAxOTUsIDE1OSwgMzUsIDIxNywgMjEwLCAxNTksIDM1LCAKKyAgICAyMzcsIDIxNywgMTU5LCAzNSwgMjI5LCAxODAsIDE1OSwgMzUsIDIyNywgMjE1LCAxNTksIDM1LCAyNTAsIDE0MywgMTU5LCAKKyAgICAzNSwgMjQyLCAyNTMsIDI1MiwgMjMzLCAxNTksIDM1LCAyMTksIDEsIDE1OSwgMzUsIDI0NSwgMTM4LCAxNTksIDM1LCAyNTQsIAorICAgIDIzNiwgMTU5LCAzNSwgMjI3LCAxOTAsIDE1OSwgMzUsIDIyNywgMTcyLCAxNTksIDM1LCAyNDcsIDYsIDE1OSwgMzUsIDIzNywgCisgICAgNDUsIDE1OSwgMzUsIDI1MCwgMTM4LCAxNTksIDM1LCAyNDYsIDE4OSwgMTU5LCAzNSwgMjQ3LCA4NywgMTU5LCAzNSwgMjUxLCAKKyAgICA1OCwgMTU5LCAzNSwgMjQ5LCA4NSwgMTU5LCAzNSwgMjEsIDIyNywgMTcxLCAxNTksIDM1LCAyMzAsIDM4LCAxNTksIDM1LCAKKyAgICAyMzUsIDEwNCwgMTU5LCAzNSwgMjUwLCAxOTUsIDE1OSwgMzUsIDIzNiwgMTAxLCAxNTksIDM1LCAyNDQsIDIxMSwgMTU5LCAKKyAgICAzNSwgMjIzLCAxMjYsIDE1OSwgMzUsIDIyOCwgMTg5LCAxNTksIDM1LCAyNDUsIDg5LCAxNTksIDM1LCAyMjcsIDE3MywgCisgICAgMTU5LCAzNSwgMjM1LCAxMzQsIDE1NiwgMjMzLCAxMzQsIDE1OSwgMzUsIDIyNywgMTY5LCAxNTksIDM1LCAyNDQsIDY0LCAKKyAgICAxOTksIDIzNCwgMTIsIDE1OSwgMzUsIDI0NiwgMTkxLCAxNTksIDM1LCAyMjMsIDEzMywgMTU5LCAzNSwgMjQ0LCAyOCwgCisgICAgMTU5LCAzNSwgMjQ2LCAxODQsIDE1OSwgMzUsIDIyOSwgMjEwLCAxNTksIDM1LCAyMjcsIDg1LCAxNTksIDM1LCAyNDUsIAorICAgIDE1MSwgMTU5LCAzNSwgMjE5LCAxNzMsIDE1NiwgMjE4LCAyNDQsIDE1OSwgMzUsIDI1MCwgMTQ2LCAxNTksIDM1LCAyMzQsIAorICAgIDIzLCAxNTksIDM1LCAyNDYsIDEyMCwgMTU5LCAzNSwgMjIwLCA3MSwgMTU5LCAzNSwgMjQ4LCAyMjUsIDE1OSwgMzUsIDI1MCwgCisgICAgMTk3LCAyMzMsIDEwNSwgMTU5LCAzNSwgMjQ0LCAxMywgMTU5LCAzNSwgMjQ0LCAyMTIsIDIzNywgMjIzLCAxNTksIDM1LCAKKyAgICAyMzQsIDUzLCAxNTksIDM1LCAyNTQsIDI1MywgMTU5LCAzNSwgMjQ2LCAyMDMsIDE1OSwgMzUsIDI0NywgMTM0LCAxNTksIAorICAgIDM1LCAyMTgsIDI0MiwgMTU5LCAzNSwgMjI0LCAxMDYsIDE1OSwgMzUsIDIzNywgMTk2LCAxNTksIDM1LCAyNDksIDUxLCAKKyAgICAxNTksIDM1LCAyNDksIDE1MCwgMTU5LCAzNSwgMjQ4LCAyMjEsIDE1OSwgMzUsIDI0NiwgOTMsIDE1OSwgMzUsIDIyNSwgMzcsIAorICAgIDE1OSwgMzUsIDIyMywgMTM1LCAxNTksIDM1LCAyNDMsIDE4MCwgMTU5LCAzNSwgMjUwLCAxNjIsIDE1OSwgMzUsIDI1MCwgCisgICAgMTkzLCAxNTksIDM1LCAyNDUsIDI0OCwgMTU5LCAzNSwgMjU0LCAyMDUsIDE1OSwgMzUsIDI1MCwgMTYxLCAxNTksIDM1LCAKKyAgICAyMzAsIDEzOSwgMjIyLCAyMywgMjE5LCAxNTUsIDE1OSwgMzUsIDI0OCwgMjQ1LCAxNTksIDM1LCAyMzUsIDE4MCwgMTU5LCAKKyAgICAzNSwgMjQ1LCAxMTgsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjAsIDczLCAyMCwgMTA3LCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIwLCA3MywgMjAsIDEwMywgMjUwLCAxMTIsIDIyNywgNjksIDIyMCwgNzMsIDIwLCAxNjAsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjAsIDczLCAyMCwgMTU0LCAyNTAsIDExMiwgMjI3LCA2OSwgMjIwLCA3MywgMjAsIDE3NCwgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMCwgNzMsIDIwLCAxODIsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjAsIDczLCAyMCwgMTkxLCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIwLCA3MywgMjAsIDE4NSwgMjUwLCAxMTIsIDIyNywgNjksIDIyMCwgNzMsIDIwLCAxOTAsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjIsIDYzLCAyMCwgMTA3LCAyNTAsIDExMiwgMjI3LCA2OSwgMjIyLCA2MywgMjAsIDEwMywgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMiwgNjMsIDIwLCAxNjAsIDI1MCwgMTEyLCAyMjcsIDY5LCAyMjIsIDYzLCAyMCwgMTU0LCAyNTAsIDExMiwgMjI3LCA2OSwgCisgICAgMjIyLCA2MywgMjAsIDE3NCwgMjUwLCAxMTIsIDIyNywgNjksIDIyMiwgNjMsIDIwLCAxODIsIDI1MCwgMTEyLCAyMjcsIDY5LCAKKyAgICAyMjIsIDYzLCAyMCwgMTkxLCAyNTAsIDExMiwgMjI3LCA2OSwgMjIyLCA2MywgMjAsIDE4NSwgMjUwLCAxMTIsIDIyNywgNjksIAorICAgIDIyMiwgNjMsIDIwLCAxOTAsIDE0LCAyMSwgNiwgNjAsIDE0LCAyMSwgNiwgMjUzLCAyMDQsIDE0LCAyMSwgNiwgMjUxLCAKKyAgICAyMDIsIDE0LCAyMSwgNiwgMjUwLCA0NiwgMTQsIDIxLCA2LCA3MywgMTQsIDIxLCA2LCAyNDYsIDc0LCAxNCwgMjEsIDYsIAorICAgIDI0NSwgNjcsIDE0LCAyMSwgNiwgMjQzLCAyMjUsIDE0LCAyMSwgNiwgNzIsIDE0LCAyMSwgNiwgMjM3LCAxMjYsIDE0LCAyMSwgCisgICAgNiwgMjM3LCAxNywgMTQsIDIxLCA2LCAxNTMsIDE0LCAyMSwgNiwgMTg5LCAxNCwgMjEsIDYsIDIwNywgMTQsIDIxLCA2LCAKKyAgICA3NCwgMTQsIDIxLCA2LCAyMzAsIDU5LCAxNCwgMjEsIDYsIDIyOCwgMTYzLCAxNCwgMjEsIDYsIDE1MiwgMTQsIDIxLCA2LCAKKyAgICAxOTgsIDE0LCAyMSwgNiwgMjIyLCAyMDEsIDE0LCAyMSwgNiwgNjgsIDE0LCAyMSwgNiwgMjE2LCAyMTYsIDE0LCAyMSwgNiwgCisgICAgMjE5LCA0MCwgMTQsIDIxLCA2LCAyMTgsIDE1MSwgMTQsIDIxLCA2LCAyMTgsIDkwLCAxNCwgMjEsIDYsIDIxNywgMTU3LCAKKyAgICAxNCwgMjEsIDMsIDYwLCAxNCwgMjEsIDMsIDI1MywgMjA0LCAxNCwgMjEsIDMsIDI1MSwgMjAyLCAxNCwgMjEsIDMsIDI1MCwgCisgICAgNDYsIDE0LCAyMSwgMywgNzMsIDE0LCAyMSwgMywgMjQ2LCA3NCwgMTQsIDIxLCAzLCAyNDUsIDY3LCAxNCwgMjEsIDMsIAorICAgIDI0MywgMjI1LCAxNCwgMjEsIDMsIDcyLCAxNCwgMjEsIDMsIDIzNywgMTI2LCAxNCwgMjEsIDMsIDIzNywgMTcsIDE0LCAyMSwgCisgICAgMywgMTUzLCAxNCwgMjEsIDMsIDE4OSwgMTQsIDIxLCAzLCAyMDcsIDE0LCAyMSwgMywgNzQsIDE0LCAyMSwgMywgMjMwLCAKKyAgICA1OSwgMTQsIDIxLCAzLCAyMjgsIDE2MywgMTQsIDIxLCAzLCAxNTIsIDE0LCAyMSwgMywgMTk4LCAxNCwgMjEsIDMsIDIyMiwgCisgICAgMjAxLCAxNCwgMjEsIDMsIDY4LCAxNCwgMjEsIDMsIDIxNiwgMjE2LCAxNCwgMjEsIDMsIDIxOSwgNDAsIDE0LCAyMSwgMywgCisgICAgMjE4LCAxNTEsIDE0LCAyMSwgMywgMjE4LCA5MCwgMTQsIDIxLCAzLCAyMTcsIDE1NywgMTQsIDMwLCA2LCA2MCwgMTQsIDMwLCAKKyAgICA2LCAyNTMsIDIwNCwgMTQsIDMwLCA2LCAyNTEsIDIwMiwgMTQsIDMwLCA2LCAyNTAsIDQ2LCAxNCwgMzAsIDYsIDczLCAxNCwgCisgICAgMzAsIDYsIDI0NiwgNzQsIDE0LCAzMCwgNiwgMjQ1LCA2NywgMTQsIDMwLCA2LCAyNDMsIDIyNSwgMTQsIDMwLCA2LCA3MiwgCisgICAgMTQsIDMwLCA2LCAyMzcsIDEyNiwgMTQsIDMwLCA2LCAyMzcsIDE3LCAxNCwgMzAsIDYsIDE1MywgMTQsIDMwLCA2LCAxODksIAorICAgIDE0LCAzMCwgNiwgMjA3LCAxNCwgMzAsIDYsIDc0LCAxNCwgMzAsIDYsIDIzMCwgNTksIDE0LCAzMCwgNiwgMjI4LCAxNjMsIAorICAgIDE0LCAzMCwgNiwgMTUyLCAxNCwgMzAsIDYsIDE5OCwgMTQsIDMwLCA2LCAyMjIsIDIwMSwgMTQsIDMwLCA2LCA2OCwgMTQsIAorICAgIDMwLCA2LCAyMTYsIDIxNiwgMTQsIDMwLCA2LCAyMTksIDQwLCAxNCwgMzAsIDYsIDIxOCwgMTUxLCAxNCwgMzAsIDYsIDIxOCwgCisgICAgOTAsIDE0LCAzMCwgNiwgMjE3LCAxNTcsIDE0LCAzMCwgMywgNjAsIDE0LCAzMCwgMywgMjUzLCAyMDQsIDE0LCAzMCwgMywgCisgICAgMjUxLCAyMDIsIDE0LCAzMCwgMywgMjUwLCA0NiwgMTQsIDMwLCAzLCA3MywgMTQsIDMwLCAzLCAyNDYsIDc0LCAxNCwgMzAsIAorICAgIDMsIDI0NSwgNjcsIDE0LCAzMCwgMywgNzIsIDE0LCAzMCwgMywgMjM3LCAxMjYsIDE0LCAzMCwgMywgMjM3LCAxNywgMTQsIAorICAgIDMwLCAzLCAxNTMsIDE0LCAzMCwgMywgMTg5LCAxNCwgMzAsIDMsIDIwNywgMTQsIDMwLCAzLCA3NCwgMTQsIDMwLCAzLCAKKyAgICAyMzAsIDU5LCAxNCwgMzAsIDMsIDIyOCwgMTYzLCAxNCwgMzAsIDMsIDE1MiwgMTQsIDMwLCAzLCAxOTgsIDE0LCAzMCwgMywgCisgICAgMjIyLCAyMDEsIDE0LCAzMCwgMywgNjgsIDE0LCAzMCwgMywgMjE2LCAyMTYsIDE0LCAzMCwgMywgMjE5LCA0MCwgMTQsIDMwLCAKKyAgICAzLCAyMTgsIDE1MSwgMTQsIDMwLCAzLCAyMTgsIDkwLCAxNCwgMzAsIDMsIDIxNywgMTU3LCAxNCwgMjEsIDMwLCA2LCA2MCwgCisgICAgMTQsIDIxLCAzMCwgNiwgMjUzLCAyMDQsIDE0LCAyMSwgMzAsIDYsIDI1MSwgMjAyLCAxNCwgMjEsIDMwLCA2LCAyNTAsIDQ2LCAKKyAgICAxNCwgMjEsIDMwLCA2LCA3MywgMTQsIDIxLCAzMCwgNiwgMjQ2LCA3NCwgMTQsIDIxLCAzMCwgNiwgMjQ1LCA2NywgMTQsIAorICAgIDIxLCAzMCwgNiwgMjQzLCAyMjUsIDE0LCAyMSwgMzAsIDYsIDcyLCAxNCwgMjEsIDMwLCA2LCAyMzcsIDEyNiwgMTQsIDIxLCAKKyAgICAzMCwgNiwgMjM3LCAxNywgMTQsIDIxLCAzMCwgNiwgMTUzLCAxNCwgMjEsIDMwLCA2LCAxODksIDE0LCAyMSwgMzAsIDYsIAorICAgIDIwNywgMTQsIDIxLCAzMCwgNiwgNzQsIDE0LCAyMSwgMzAsIDYsIDIzMCwgNTksIDE0LCAyMSwgMzAsIDYsIDIyOCwgMTYzLCAKKyAgICAxNCwgMjEsIDMwLCA2LCAxNTIsIDE0LCAyMSwgMzAsIDYsIDE5OCwgMTQsIDIxLCAzMCwgNiwgMjIyLCAyMDEsIDE0LCAyMSwgCisgICAgMzAsIDYsIDY4LCAxNCwgMjEsIDMwLCA2LCAyMTYsIDIxNiwgMTQsIDIxLCAzMCwgNiwgMjE5LCA0MCwgMTQsIDIxLCAzMCwgCisgICAgNiwgMjE4LCAxNTEsIDE0LCAyMSwgMzAsIDYsIDIxOCwgOTAsIDE0LCAyMSwgMzAsIDYsIDIxNywgMTU3LCAxNCwgMjEsIDMwLCAKKyAgICAzLCA2MCwgMTQsIDIxLCAzMCwgMywgMjUzLCAyMDQsIDE0LCAyMSwgMzAsIDMsIDI1MSwgMjAyLCAxNCwgMjEsIDMwLCAzLCAKKyAgICAyNTAsIDQ2LCAxNCwgMjEsIDMwLCAzLCA3MywgMTQsIDIxLCAzMCwgMywgMjQ2LCA3NCwgMTQsIDIxLCAzMCwgMywgMjQ1LCAKKyAgICA2NywgMTQsIDIxLCAzMCwgMywgMjQzLCAyMjUsIDE0LCAyMSwgMzAsIDMsIDcyLCAxNCwgMjEsIDMwLCAzLCAyMzcsIDEyNiwgCisgICAgMTQsIDIxLCAzMCwgMywgMjM3LCAxNywgMTQsIDIxLCAzMCwgMywgMTUzLCAxNCwgMjEsIDMwLCAzLCAxODksIDE0LCAyMSwgCisgICAgMzAsIDMsIDIwNywgMTQsIDIxLCAzMCwgMywgNzQsIDE0LCAyMSwgMzAsIDMsIDIzMCwgNTksIDE0LCAyMSwgMzAsIDMsIAorICAgIDIyOCwgMTYzLCAxNCwgMjEsIDMwLCAzLCAxNTIsIDE0LCAyMSwgMzAsIDMsIDE5OCwgMTQsIDIxLCAzMCwgMywgMjIyLCAKKyAgICAyMDEsIDE0LCAyMSwgMzAsIDMsIDY4LCAxNCwgMjEsIDMwLCAzLCAyMTYsIDIxNiwgMTQsIDIxLCAzMCwgMywgMjE5LCA0MCwgCisgICAgMTQsIDIxLCAzMCwgMywgMjE4LCAxNTEsIDE0LCAyMSwgMzAsIDMsIDIxOCwgOTAsIDE0LCAyMSwgMzAsIDMsIDIxNywgMTU3LCAKKyAgICAxNCwgMTAyLCA2LCA2MCwgMTQsIDEwMiwgNiwgMjUxLCAyMDIsIDE0LCAxMDIsIDYsIDI1MCwgNDYsIDE0LCAxMDIsIDYsIAorICAgIDI0NSwgNjcsIDE0LCAxMDIsIDYsIDIzNywgMTI2LCAxNCwgMTAyLCA2LCAyMzcsIDE3LCAxNCwgMTAyLCA2LCAyMDcsIDE0LCAKKyAgICAxMDIsIDYsIDc0LCAxNCwgMTAyLCA2LCAyMzAsIDU5LCAxNCwgMTAyLCA2LCAyMjgsIDE2MywgMTQsIDEwMiwgNiwgMTk4LCAKKyAgICAxNCwgMTAyLCA2LCAyMjIsIDIwMSwgMTQsIDEwMiwgNiwgNjgsIDE0LCAxMDIsIDYsIDIxNiwgMjE2LCAxNCwgMTAyLCA2LCAKKyAgICAyMTksIDQwLCAxNCwgMTAyLCA2LCAyMTgsIDE1MSwgMTQsIDEwMiwgNiwgMjE4LCA5MCwgMTQsIDEwMiwgNiwgMjE3LCAxNTcsIAorICAgIDE0LCAxMDIsIDMsIDYwLCAxNCwgMTAyLCAzLCAyNTMsIDIwNCwgMTQsIDEwMiwgMywgMjUxLCAyMDIsIDE0LCAxMDIsIDMsIAorICAgIDI1MCwgNDYsIDE0LCAxMDIsIDMsIDI0NiwgNzQsIDE0LCAxMDIsIDMsIDI0MywgMjI1LCAxNCwgMTAyLCAzLCA3MiwgMTQsIAorICAgIDEwMiwgMywgMjM3LCAxMjYsIDE0LCAxMDIsIDMsIDIzNywgMTcsIDE0LCAxMDIsIDMsIDE1MywgMTQsIDEwMiwgMywgMTg5LCAKKyAgICAxNCwgMTAyLCAzLCAyMDcsIDE0LCAxMDIsIDMsIDIzMCwgNTksIDE0LCAxMDIsIDMsIDIyOCwgMTYzLCAxNCwgMTAyLCAzLCAKKyAgICAxNTIsIDE0LCAxMDIsIDMsIDE5OCwgMTQsIDEwMiwgMywgMjIyLCAyMDEsIDE0LCAxMDIsIDMsIDY4LCAxNCwgMTAyLCAzLCAKKyAgICAyMTYsIDIxNiwgMTQsIDEwMiwgMywgMjE5LCA0MCwgMTQsIDEwMiwgMywgMjE4LCAxNTEsIDE0LCAxMDIsIDMsIDIxOCwgOTAsIAorICAgIDE0LCAxMDIsIDMsIDIxNywgMTU3LCAxNCwgMjEsIDEwMiwgNiwgNjAsIDE0LCAyMSwgMTAyLCA2LCAyNTMsIDIwNCwgMTQsIAorICAgIDIxLCAxMDIsIDYsIDI1MSwgMjAyLCAxNCwgMjEsIDEwMiwgNiwgMjUwLCA0NiwgMTQsIDIxLCAxMDIsIDYsIDczLCAxNCwgCisgICAgMjEsIDEwMiwgNiwgMjQ2LCA3NCwgMTQsIDIxLCAxMDIsIDYsIDI0NSwgNjcsIDE0LCAyMSwgMTAyLCA2LCAyNDMsIDIyNSwgCisgICAgMTQsIDIxLCAxMDIsIDYsIDcyLCAxNCwgMjEsIDEwMiwgNiwgMjM3LCAxMjYsIDE0LCAyMSwgMTAyLCA2LCAyMzcsIDE3LCAKKyAgICAxNCwgMjEsIDEwMiwgNiwgMTUzLCAxNCwgMjEsIDEwMiwgNiwgMTg5LCAxNCwgMjEsIDEwMiwgNiwgMjA3LCAxNCwgMjEsIAorICAgIDEwMiwgNiwgNzQsIDE0LCAyMSwgMTAyLCA2LCAyMzAsIDU5LCAxNCwgMjEsIDEwMiwgNiwgMjI4LCAxNjMsIDE0LCAyMSwgCisgICAgMTAyLCA2LCAxNTIsIDE0LCAyMSwgMTAyLCA2LCAxOTgsIDE0LCAyMSwgMTAyLCA2LCAyMjIsIDIwMSwgMTQsIDIxLCAxMDIsIAorICAgIDYsIDY4LCAxNCwgMjEsIDEwMiwgNiwgMjE2LCAyMTYsIDE0LCAyMSwgMTAyLCA2LCAyMTksIDQwLCAxNCwgMjEsIDEwMiwgNiwgCisgICAgMjE4LCAxNTEsIDE0LCAyMSwgMTAyLCA2LCAyMTgsIDkwLCAxNCwgMjEsIDEwMiwgNiwgMjE3LCAxNTcsIDE0LCAyMSwgMTAyLCAKKyAgICAzLCA2MCwgMTQsIDIxLCAxMDIsIDMsIDI1MywgMjA0LCAxNCwgMjEsIDEwMiwgMywgMjUxLCAyMDIsIDE0LCAyMSwgMTAyLCAKKyAgICAzLCAyNTAsIDQ2LCAxNCwgMjEsIDEwMiwgMywgNzMsIDE0LCAyMSwgMTAyLCAzLCAyNDYsIDc0LCAxNCwgMjEsIDEwMiwgMywgCisgICAgMjQ1LCA2NywgMTQsIDIxLCAxMDIsIDMsIDI0MywgMjI1LCAxNCwgMjEsIDEwMiwgMywgNzIsIDE0LCAyMSwgMTAyLCAzLCAKKyAgICAyMzcsIDEyNiwgMTQsIDIxLCAxMDIsIDMsIDIzNywgMTcsIDE0LCAyMSwgMTAyLCAzLCAxNTMsIDE0LCAyMSwgMTAyLCAzLCAKKyAgICAxODksIDE0LCAyMSwgMTAyLCAzLCAyMDcsIDE0LCAyMSwgMTAyLCAzLCA3NCwgMTQsIDIxLCAxMDIsIDMsIDIzMCwgNTksIAorICAgIDE0LCAyMSwgMTAyLCAzLCAyMjgsIDE2MywgMTQsIDIxLCAxMDIsIDMsIDE1MiwgMTQsIDIxLCAxMDIsIDMsIDE5OCwgMTQsIAorICAgIDIxLCAxMDIsIDMsIDIyMiwgMjAxLCAxNCwgMjEsIDEwMiwgMywgNjgsIDE0LCAyMSwgMTAyLCAzLCAyMTYsIDIxNiwgMTQsIAorICAgIDIxLCAxMDIsIDMsIDIxOSwgNDAsIDE0LCAyMSwgMTAyLCAzLCAyMTgsIDE1MSwgMTQsIDIxLCAxMDIsIDMsIDIxOCwgOTAsIAorICAgIDE0LCAyMSwgMTAyLCAzLCAyMTcsIDE1NywgMTQsIDEyMSwgNiwgNjAsIDE0LCAxMjEsIDYsIDI1MywgMjA0LCAxNCwgMTIxLCAKKyAgICA2LCAyNTAsIDQ2LCAxNCwgMTIxLCA2LCA3MywgMTQsIDEyMSwgNiwgMjQ2LCA3NCwgMTQsIDEyMSwgNiwgMjQ1LCA2NywgMTQsIAorICAgIDEyMSwgNiwgMjM3LCAxMjYsIDE0LCAxMjEsIDYsIDIzNywgMTcsIDE0LCAxMjEsIDYsIDE1MywgMTQsIDEyMSwgNiwgMTg5LCAKKyAgICAxNCwgMTIxLCA2LCAyMDcsIDE0LCAxMjEsIDYsIDc0LCAxNCwgMTIxLCA2LCAyMzAsIDU5LCAxNCwgMTIxLCA2LCAyMjgsIAorICAgIDE2MywgMTQsIDEyMSwgNiwgMTk4LCAxNCwgMTIxLCA2LCAyMjIsIDIwMSwgMTQsIDEyMSwgNiwgNjgsIDE0LCAxMjEsIDYsIAorICAgIDIxNiwgMjE2LCAxNCwgMTIxLCA2LCAyMTksIDQwLCAxNCwgMTIxLCA2LCAyMTgsIDE1MSwgMTQsIDEyMSwgNiwgMjE4LCA5MCwgCisgICAgMTQsIDEyMSwgMywgNjAsIDE0LCAxMjEsIDMsIDI1MywgMjA0LCAxNCwgMTIxLCAzLCAyNTEsIDIwMiwgMTQsIDEyMSwgMywgCisgICAgMjUwLCA0NiwgMTQsIDEyMSwgMywgNzMsIDE0LCAxMjEsIDMsIDI0NiwgNzQsIDE0LCAxMjEsIDMsIDI0NSwgNjcsIDE0LCAKKyAgICAxMjEsIDMsIDI0MywgMjI1LCAxNCwgMTIxLCAzLCA3MiwgMTQsIDEyMSwgMywgMjM3LCAxMjYsIDE0LCAxMjEsIDMsIDIzNywgCisgICAgMTcsIDE0LCAxMjEsIDMsIDE1MywgMTQsIDEyMSwgMywgMTg5LCAxNCwgMTIxLCAzLCAyMDcsIDE0LCAxMjEsIDMsIDc0LCAKKyAgICAxNCwgMTIxLCAzLCAyMzAsIDU5LCAxNCwgMTIxLCAzLCAyMjgsIDE2MywgMTQsIDEyMSwgMywgMTUyLCAxNCwgMTIxLCAzLCAKKyAgICAxOTgsIDE0LCAxMjEsIDMsIDIyMiwgMjAxLCAxNCwgMTIxLCAzLCA2OCwgMTQsIDEyMSwgMywgMjE2LCAyMTYsIDE0LCAxMjEsIAorICAgIDMsIDIxOSwgNDAsIDE0LCAxMjEsIDMsIDIxOCwgMTUxLCAxNCwgMTIxLCAzLCAyMTgsIDkwLCAxNCwgMTIxLCAzLCAyMTcsIAorICAgIDE1NywgMTQsIDE3MywgNiwgNjAsIDE0LCAxNzMsIDYsIDI1MywgMjA0LCAxNCwgMTczLCA2LCAyNTAsIDQ2LCAxNCwgMTczLCAKKyAgICA2LCA3MywgMTQsIDE3MywgNiwgMjQ2LCA3NCwgMTQsIDE3MywgNiwgMjQ1LCA2NywgMTQsIDE3MywgNiwgNzIsIDE0LCAxNzMsIAorICAgIDYsIDIzNywgMTI2LCAxNCwgMTczLCA2LCAyMzcsIDE3LCAxNCwgMTczLCA2LCAxNTMsIDE0LCAxNzMsIDYsIDE4OSwgMTQsIAorICAgIDE3MywgNiwgNzQsIDE0LCAxNzMsIDYsIDE5OCwgMTQsIDE3MywgNiwgMjIyLCAyMDEsIDE0LCAxNzMsIDYsIDY4LCAxNCwgCisgICAgMTczLCA2LCAyMTYsIDIxNiwgMTQsIDE3MywgNiwgMjE5LCA0MCwgMTQsIDE3MywgNiwgMjE4LCAxNTEsIDE0LCAxNzMsIDYsIAorICAgIDIxOCwgOTAsIDE0LCAxNzMsIDMsIDYwLCAxNCwgMTczLCAzLCAyNTMsIDIwNCwgMTQsIDE3MywgMywgMjUxLCAyMDIsIDE0LCAKKyAgICAxNzMsIDMsIDI1MCwgNDYsIDE0LCAxNzMsIDMsIDczLCAxNCwgMTczLCAzLCAyNDYsIDc0LCAxNCwgMTczLCAzLCAyNDUsIAorICAgIDY3LCAxNCwgMTczLCAzLCAyNDMsIDIyNSwgMTQsIDE3MywgMywgNzIsIDE0LCAxNzMsIDMsIDIzNywgMTI2LCAxNCwgMTczLCAKKyAgICAzLCAyMzcsIDE3LCAxNCwgMTczLCAzLCAxNTMsIDE0LCAxNzMsIDMsIDE4OSwgMTQsIDE3MywgMywgMjA3LCAxNCwgMTczLCAKKyAgICAzLCA3NCwgMTQsIDE3MywgMywgMjMwLCA1OSwgMTQsIDE3MywgMywgMjI4LCAxNjMsIDE0LCAxNzMsIDMsIDE1MiwgMTQsIAorICAgIDE3MywgMywgMTk4LCAxNCwgMTczLCAzLCAyMjIsIDIwMSwgMTQsIDE3MywgMywgNjgsIDE0LCAxNzMsIDMsIDIxNiwgMjE2LCAKKyAgICAxNCwgMTczLCAzLCAyMTksIDQwLCAxNCwgMTczLCAzLCAyMTgsIDE1MSwgMTQsIDE3MywgMywgMjE4LCA5MCwgMTQsIDE3MywgCisgICAgMywgMjE3LCAxNTcsIDE0LCAyMSwgMTIxLCA2LCA2MCwgMTQsIDIxLCAxMjEsIDYsIDI1MywgMjA0LCAxNCwgMjEsIDEyMSwgCisgICAgNiwgMjUxLCAyMDIsIDE0LCAyMSwgMTIxLCA2LCAyNTAsIDQ2LCAxNCwgMjEsIDEyMSwgNiwgNzMsIDE0LCAyMSwgMTIxLCA2LCAKKyAgICAyNDYsIDc0LCAxNCwgMjEsIDEyMSwgNiwgMjQ1LCA2NywgMTQsIDIxLCAxMjEsIDYsIDI0MywgMjI1LCAxNCwgMjEsIDEyMSwgCisgICAgNiwgNzIsIDE0LCAyMSwgMTIxLCA2LCAyMzcsIDEyNiwgMTQsIDIxLCAxMjEsIDYsIDIzNywgMTcsIDE0LCAyMSwgMTIxLCA2LCAKKyAgICAxNTMsIDE0LCAyMSwgMTIxLCA2LCAxODksIDE0LCAyMSwgMTIxLCA2LCAyMDcsIDE0LCAyMSwgMTIxLCA2LCA3NCwgMTQsIAorICAgIDIxLCAxMjEsIDYsIDIzMCwgNTksIDE0LCAyMSwgMTIxLCA2LCAyMjgsIDE2MywgMTQsIDIxLCAxMjEsIDYsIDE1MiwgMTQsIAorICAgIDIxLCAxMjEsIDYsIDE5OCwgMTQsIDIxLCAxMjEsIDYsIDIyMiwgMjAxLCAxNCwgMjEsIDEyMSwgNiwgNjgsIDE0LCAyMSwgCisgICAgMTIxLCA2LCAyMTYsIDIxNiwgMTQsIDIxLCAxMjEsIDYsIDIxOSwgNDAsIDE0LCAyMSwgMTIxLCA2LCAyMTgsIDE1MSwgMTQsIAorICAgIDIxLCAxMjEsIDYsIDIxOCwgOTAsIDE0LCAyMSwgMTIxLCA2LCAyMTcsIDE1NywgMTQsIDIxLCAxMjEsIDMsIDYwLCAxNCwgCisgICAgMjEsIDEyMSwgMywgMjUzLCAyMDQsIDE0LCAyMSwgMTIxLCAzLCAyNTEsIDIwMiwgMTQsIDIxLCAxMjEsIDMsIDI1MCwgNDYsIAorICAgIDE0LCAyMSwgMTIxLCAzLCA3MywgMTQsIDIxLCAxMjEsIDMsIDI0NiwgNzQsIDE0LCAyMSwgMTIxLCAzLCAyNDUsIDY3LCAxNCwgCisgICAgMjEsIDEyMSwgMywgMjQzLCAyMjUsIDE0LCAyMSwgMTIxLCAzLCA3MiwgMTQsIDIxLCAxMjEsIDMsIDIzNywgMTI2LCAxNCwgCisgICAgMjEsIDEyMSwgMywgMjM3LCAxNywgMTQsIDIxLCAxMjEsIDMsIDE1MywgMTQsIDIxLCAxMjEsIDMsIDE4OSwgMTQsIDIxLCAKKyAgICAxMjEsIDMsIDIwNywgMTQsIDIxLCAxMjEsIDMsIDc0LCAxNCwgMjEsIDEyMSwgMywgMjMwLCA1OSwgMTQsIDIxLCAxMjEsIDMsIAorICAgIDIyOCwgMTYzLCAxNCwgMjEsIDEyMSwgMywgMTUyLCAxNCwgMjEsIDEyMSwgMywgMTk4LCAxNCwgMjEsIDEyMSwgMywgMjIyLCAKKyAgICAyMDEsIDE0LCAyMSwgMTIxLCAzLCA2OCwgMTQsIDIxLCAxMjEsIDMsIDIxNiwgMjE2LCAxNCwgMjEsIDEyMSwgMywgMjE5LCAKKyAgICA0MCwgMTQsIDIxLCAxMjEsIDMsIDIxOCwgMTUxLCAxNCwgMjEsIDEyMSwgMywgMjE4LCA5MCwgMTQsIDIxLCAxMjEsIDMsIAorICAgIDIxNywgMTU3LCAxNCwgMzMsIDYsIDYwLCAxNCwgMzMsIDYsIDI1MywgMjA0LCAxNCwgMzMsIDYsIDI1MSwgMjAyLCAxNCwgCisgICAgMzMsIDYsIDI1MCwgNDYsIDE0LCAzMywgNiwgNzMsIDE0LCAzMywgNiwgMjQ2LCA3NCwgMTQsIDMzLCA2LCAyNDUsIDY3LCAKKyAgICAxNCwgMzMsIDYsIDI0MywgMjI1LCAxNCwgMzMsIDYsIDcyLCAxNCwgMzMsIDYsIDIzNywgMTI2LCAxNCwgMzMsIDYsIDIzNywgCisgICAgMTcsIDE0LCAzMywgNiwgMTUzLCAxNCwgMzMsIDYsIDE4OSwgMTQsIDMzLCA2LCAyMDcsIDE0LCAzMywgNiwgNzQsIDE0LCAKKyAgICAzMywgNiwgMjMwLCA1OSwgMTQsIDMzLCA2LCAyMjgsIDE2MywgMTQsIDMzLCA2LCAxNTIsIDE0LCAzMywgNiwgMTk4LCAxNCwgCisgICAgMzMsIDYsIDIyMiwgMjAxLCAxNCwgMzMsIDYsIDY4LCAxNCwgMzMsIDYsIDIxNiwgMjE2LCAxNCwgMzMsIDYsIDIxOSwgNDAsIAorICAgIDE0LCAzMywgNiwgMjE4LCAxNTEsIDE0LCAzMywgNiwgMjE4LCA5MCwgMTQsIDMzLCA2LCAyMTcsIDE1NywgMTQsIDMzLCAzLCAKKyAgICA2MCwgMTQsIDMzLCAzLCAyNTMsIDIwNCwgMTQsIDMzLCAzLCAyNTEsIDIwMiwgMTQsIDMzLCAzLCAyNTAsIDQ2LCAxNCwgMzMsIAorICAgIDMsIDczLCAxNCwgMzMsIDMsIDI0NiwgNzQsIDE0LCAzMywgMywgMjQ1LCA2NywgMTQsIDMzLCAzLCAyNDMsIDIyNSwgMTQsIAorICAgIDMzLCAzLCA3MiwgMTQsIDMzLCAzLCAyMzcsIDEyNiwgMTQsIDMzLCAzLCAyMzcsIDE3LCAxNCwgMzMsIDMsIDE1MywgMTQsIAorICAgIDMzLCAzLCAxODksIDE0LCAzMywgMywgMjA3LCAxNCwgMzMsIDMsIDc0LCAxNCwgMzMsIDMsIDIzMCwgNTksIDE0LCAzMywgMywgCisgICAgMjI4LCAxNjMsIDE0LCAzMywgMywgMTUyLCAxNCwgMzMsIDMsIDE5OCwgMTQsIDMzLCAzLCAyMjIsIDIwMSwgMTQsIDMzLCAzLCAKKyAgICA2OCwgMTQsIDMzLCAzLCAyMTYsIDIxNiwgMTQsIDMzLCAzLCAyMTksIDQwLCAxNCwgMzMsIDMsIDIxOCwgMTUxLCAxNCwgMzMsIAorICAgIDMsIDIxOCwgOTAsIDE0LCAzMywgMywgMjE3LCAxNTcsIDE0LCAzMywgMjEsIDYsIDYwLCAxNCwgMzMsIDIxLCA2LCAyNTMsIAorICAgIDIwNCwgMTQsIDMzLCAyMSwgNiwgMjUxLCAyMDIsIDE0LCAzMywgMjEsIDYsIDI1MCwgNDYsIDE0LCAzMywgMjEsIDYsIDczLCAKKyAgICAxNCwgMzMsIDIxLCA2LCAyNDYsIDc0LCAxNCwgMzMsIDIxLCA2LCAyNDUsIDY3LCAxNCwgMzMsIDIxLCA2LCAyNDMsIDIyNSwgCisgICAgMTQsIDMzLCAyMSwgNiwgNzIsIDE0LCAzMywgMjEsIDYsIDIzNywgMTI2LCAxNCwgMzMsIDIxLCA2LCAyMzcsIDE3LCAxNCwgCisgICAgMzMsIDIxLCA2LCAxNTMsIDE0LCAzMywgMjEsIDYsIDE4OSwgMTQsIDMzLCAyMSwgNiwgMjA3LCAxNCwgMzMsIDIxLCA2LCAKKyAgICA3NCwgMTQsIDMzLCAyMSwgNiwgMjMwLCA1OSwgMTQsIDMzLCAyMSwgNiwgMjI4LCAxNjMsIDE0LCAzMywgMjEsIDYsIDE1MiwgCisgICAgMTQsIDMzLCAyMSwgNiwgMTk4LCAxNCwgMzMsIDIxLCA2LCAyMjIsIDIwMSwgMTQsIDMzLCAyMSwgNiwgNjgsIDE0LCAzMywgCisgICAgMjEsIDYsIDIxNiwgMjE2LCAxNCwgMzMsIDIxLCA2LCAyMTksIDQwLCAxNCwgMzMsIDIxLCA2LCAyMTgsIDE1MSwgMTQsIDMzLCAKKyAgICAyMSwgNiwgMjE4LCA5MCwgMTQsIDMzLCAyMSwgNiwgMjE3LCAxNTcsIDE0LCAzMywgMjEsIDMsIDYwLCAxNCwgMzMsIDIxLCAKKyAgICAzLCAyNTMsIDIwNCwgMTQsIDMzLCAyMSwgMywgMjUxLCAyMDIsIDE0LCAzMywgMjEsIDMsIDI1MCwgNDYsIDE0LCAzMywgMjEsIAorICAgIDMsIDczLCAxNCwgMzMsIDIxLCAzLCAyNDYsIDc0LCAxNCwgMzMsIDIxLCAzLCAyNDUsIDY3LCAxNCwgMzMsIDIxLCAzLCAKKyAgICAyNDMsIDIyNSwgMTQsIDMzLCAyMSwgMywgNzIsIDE0LCAzMywgMjEsIDMsIDIzNywgMTI2LCAxNCwgMzMsIDIxLCAzLCAyMzcsIAorICAgIDE3LCAxNCwgMzMsIDIxLCAzLCAxNTMsIDE0LCAzMywgMjEsIDMsIDE4OSwgMTQsIDMzLCAyMSwgMywgMjA3LCAxNCwgMzMsIAorICAgIDIxLCAzLCA3NCwgMTQsIDMzLCAyMSwgMywgMjMwLCA1OSwgMTQsIDMzLCAyMSwgMywgMjI4LCAxNjMsIDE0LCAzMywgMjEsIAorICAgIDMsIDE1MiwgMTQsIDMzLCAyMSwgMywgMTk4LCAxNCwgMzMsIDIxLCAzLCAyMjIsIDIwMSwgMTQsIDMzLCAyMSwgMywgNjgsIAorICAgIDE0LCAzMywgMjEsIDMsIDIxNiwgMjE2LCAxNCwgMzMsIDIxLCAzLCAyMTksIDQwLCAxNCwgMzMsIDIxLCAzLCAyMTgsIDE1MSwgCisgICAgMTQsIDMzLCAyMSwgMywgMjE4LCA5MCwgMTQsIDMzLCAyMSwgMywgMjE3LCAxNTcsIDE0LCAzMywgMzAsIDYsIDYwLCAxNCwgCisgICAgMzMsIDMwLCA2LCAyNTMsIDIwNCwgMTQsIDMzLCAzMCwgNiwgMjUxLCAyMDIsIDE0LCAzMywgMzAsIDYsIDI1MCwgNDYsIDE0LCAKKyAgICAzMywgMzAsIDYsIDczLCAxNCwgMzMsIDMwLCA2LCAyNDYsIDc0LCAxNCwgMzMsIDMwLCA2LCAyNDUsIDY3LCAxNCwgMzMsIAorICAgIDMwLCA2LCAyNDMsIDIyNSwgMTQsIDMzLCAzMCwgNiwgNzIsIDE0LCAzMywgMzAsIDYsIDIzNywgMTI2LCAxNCwgMzMsIDMwLCAKKyAgICA2LCAyMzcsIDE3LCAxNCwgMzMsIDMwLCA2LCAxNTMsIDE0LCAzMywgMzAsIDYsIDE4OSwgMTQsIDMzLCAzMCwgNiwgMjA3LCAKKyAgICAxNCwgMzMsIDMwLCA2LCA3NCwgMTQsIDMzLCAzMCwgNiwgMjMwLCA1OSwgMTQsIDMzLCAzMCwgNiwgMjI4LCAxNjMsIDE0LCAKKyAgICAzMywgMzAsIDYsIDE1MiwgMTQsIDMzLCAzMCwgNiwgMTk4LCAxNCwgMzMsIDMwLCA2LCAyMjIsIDIwMSwgMTQsIDMzLCAzMCwgCisgICAgNiwgNjgsIDE0LCAzMywgMzAsIDYsIDIxNiwgMjE2LCAxNCwgMzMsIDMwLCA2LCAyMTksIDQwLCAxNCwgMzMsIDMwLCA2LCAKKyAgICAyMTgsIDE1MSwgMTQsIDMzLCAzMCwgNiwgMjE4LCA5MCwgMTQsIDMzLCAzMCwgNiwgMjE3LCAxNTcsIDE0LCAzMywgMzAsIDMsIAorICAgIDYwLCAxNCwgMzMsIDMwLCAzLCAyNTMsIDIwNCwgMTQsIDMzLCAzMCwgMywgMjUxLCAyMDIsIDE0LCAzMywgMzAsIDMsIDI1MCwgCisgICAgNDYsIDE0LCAzMywgMzAsIDMsIDczLCAxNCwgMzMsIDMwLCAzLCAyNDYsIDc0LCAxNCwgMzMsIDMwLCAzLCAyNDUsIDY3LCAKKyAgICAxNCwgMzMsIDMwLCAzLCAyNDMsIDIyNSwgMTQsIDMzLCAzMCwgMywgNzIsIDE0LCAzMywgMzAsIDMsIDIzNywgMTI2LCAxNCwgCisgICAgMzMsIDMwLCAzLCAyMzcsIDE3LCAxNCwgMzMsIDMwLCAzLCAxNTMsIDE0LCAzMywgMzAsIDMsIDE4OSwgMTQsIDMzLCAzMCwgCisgICAgMywgMjA3LCAxNCwgMzMsIDMwLCAzLCA3NCwgMTQsIDMzLCAzMCwgMywgMjMwLCA1OSwgMTQsIDMzLCAzMCwgMywgMjI4LCAKKyAgICAxNjMsIDE0LCAzMywgMzAsIDMsIDE1MiwgMTQsIDMzLCAzMCwgMywgMTk4LCAxNCwgMzMsIDMwLCAzLCAyMjIsIDIwMSwgMTQsIAorICAgIDMzLCAzMCwgMywgNjgsIDE0LCAzMywgMzAsIDMsIDIxNiwgMjE2LCAxNCwgMzMsIDMwLCAzLCAyMTksIDQwLCAxNCwgMzMsIAorICAgIDMwLCAzLCAyMTgsIDE1MSwgMTQsIDMzLCAzMCwgMywgMjE4LCA5MCwgMTQsIDMzLCAzMCwgMywgMjE3LCAxNTcsIDE0LCAzMywgCisgICAgMjEsIDMwLCA2LCA2MCwgMTQsIDMzLCAyMSwgMzAsIDYsIDI1MywgMjA0LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjUxLCAyMDIsIAorICAgIDE0LCAzMywgMjEsIDMwLCA2LCAyNTAsIDQ2LCAxNCwgMzMsIDIxLCAzMCwgNiwgNzMsIDE0LCAzMywgMjEsIDMwLCA2LCAKKyAgICAyNDYsIDc0LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjQ1LCA2NywgMTQsIDMzLCAyMSwgMzAsIDYsIDI0MywgMjI1LCAxNCwgMzMsIAorICAgIDIxLCAzMCwgNiwgNzIsIDE0LCAzMywgMjEsIDMwLCA2LCAyMzcsIDEyNiwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzNywgMTcsIAorICAgIDE0LCAzMywgMjEsIDMwLCA2LCAxNTMsIDE0LCAzMywgMjEsIDMwLCA2LCAxODksIDE0LCAzMywgMjEsIDMwLCA2LCAyMDcsIAorICAgIDE0LCAzMywgMjEsIDMwLCA2LCA3NCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzMCwgNTksIDE0LCAzMywgMjEsIDMwLCA2LCAKKyAgICAyMjgsIDE2MywgMTQsIDMzLCAyMSwgMzAsIDYsIDE1MiwgMTQsIDMzLCAyMSwgMzAsIDYsIDE5OCwgMTQsIDMzLCAyMSwgMzAsIAorICAgIDYsIDIyMiwgMjAxLCAxNCwgMzMsIDIxLCAzMCwgNiwgNjgsIDE0LCAzMywgMjEsIDMwLCA2LCAyMTYsIDIxNiwgMTQsIDMzLCAKKyAgICAyMSwgMzAsIDYsIDIxOSwgNDAsIDE0LCAzMywgMjEsIDMwLCA2LCAyMTgsIDE1MSwgMTQsIDMzLCAyMSwgMzAsIDYsIDIxOCwgCisgICAgOTAsIDE0LCAzMywgMjEsIDMwLCA2LCAyMTcsIDE1NywgMTQsIDMzLCAyMSwgMzAsIDMsIDYwLCAxNCwgMzMsIDIxLCAzMCwgCisgICAgMywgMjUzLCAyMDQsIDE0LCAzMywgMjEsIDMwLCAzLCAyNTEsIDIwMiwgMTQsIDMzLCAyMSwgMzAsIDMsIDI1MCwgNDYsIDE0LCAKKyAgICAzMywgMjEsIDMwLCAzLCA3MywgMTQsIDMzLCAyMSwgMzAsIDMsIDI0NiwgNzQsIDE0LCAzMywgMjEsIDMwLCAzLCAyNDUsIAorICAgIDY3LCAxNCwgMzMsIDIxLCAzMCwgMywgMjQzLCAyMjUsIDE0LCAzMywgMjEsIDMwLCAzLCA3MiwgMTQsIDMzLCAyMSwgMzAsIAorICAgIDMsIDIzNywgMTI2LCAxNCwgMzMsIDIxLCAzMCwgMywgMjM3LCAxNywgMTQsIDMzLCAyMSwgMzAsIDMsIDE1MywgMTQsIDMzLCAKKyAgICAyMSwgMzAsIDMsIDE4OSwgMTQsIDMzLCAyMSwgMzAsIDMsIDIwNywgMTQsIDMzLCAyMSwgMzAsIDMsIDc0LCAxNCwgMzMsIAorICAgIDIxLCAzMCwgMywgMjMwLCA1OSwgMTQsIDMzLCAyMSwgMzAsIDMsIDIyOCwgMTYzLCAxNCwgMzMsIDIxLCAzMCwgMywgMTUyLCAKKyAgICAxNCwgMzMsIDIxLCAzMCwgMywgMTk4LCAxNCwgMzMsIDIxLCAzMCwgMywgMjIyLCAyMDEsIDE0LCAzMywgMjEsIDMwLCAzLCAKKyAgICA2OCwgMTQsIDMzLCAyMSwgMzAsIDMsIDIxNiwgMjE2LCAxNCwgMzMsIDIxLCAzMCwgMywgMjE5LCA0MCwgMTQsIDMzLCAyMSwgCisgICAgMzAsIDMsIDIxOCwgMTUxLCAxNCwgMzMsIDIxLCAzMCwgMywgMjE4LCA5MCwgMTQsIDMzLCAyMSwgMzAsIDMsIDIxNywgMTU3LCAKKyAgICAxNCwgMjExLCA2LCA2MCwgMTQsIDIxMSwgNiwgMjUzLCAyMDQsIDE0LCAyMTEsIDYsIDI1MSwgMjAyLCAxNCwgMjExLCA2LCAKKyAgICAyNTAsIDQ2LCAxNCwgMjExLCA2LCA3MywgMTQsIDIxMSwgNiwgMjQ2LCA3NCwgMTQsIDIxMSwgNiwgMjQ1LCA2NywgMTQsIAorICAgIDIxMSwgNiwgMjQzLCAyMjUsIDE0LCAyMTEsIDYsIDcyLCAxNCwgMjExLCA2LCAyMzcsIDEyNiwgMTQsIDIxMSwgNiwgMjM3LCAKKyAgICAxNywgMTQsIDIxMSwgNiwgMTUzLCAxNCwgMjExLCA2LCAxODksIDE0LCAyMTEsIDYsIDIwNywgMTQsIDIxMSwgNiwgNzQsIAorICAgIDE0LCAyMTEsIDYsIDIzMCwgNTksIDE0LCAyMTEsIDYsIDIyOCwgMTYzLCAxNCwgMjExLCA2LCAxNTIsIDE0LCAyMTEsIDYsIAorICAgIDE5OCwgMTQsIDIxMSwgNiwgMjIyLCAyMDEsIDE0LCAyMTEsIDYsIDY4LCAxNCwgMjExLCA2LCAyMTYsIDIxNiwgMTQsIDIxMSwgCisgICAgNiwgMjE5LCA0MCwgMTQsIDIxMSwgNiwgMjE4LCAxNTEsIDE0LCAyMTEsIDYsIDIxOCwgOTAsIDE0LCAyMTEsIDYsIDIxNywgCisgICAgMTU3LCAxNCwgMjExLCAzLCA2MCwgMTQsIDIxMSwgMywgMjUzLCAyMDQsIDE0LCAyMTEsIDMsIDI1MSwgMjAyLCAxNCwgMjExLCAKKyAgICAzLCAyNTAsIDQ2LCAxNCwgMjExLCAzLCA3MywgMTQsIDIxMSwgMywgMjQ2LCA3NCwgMTQsIDIxMSwgMywgMjQ1LCA2NywgMTQsIAorICAgIDIxMSwgMywgMjQzLCAyMjUsIDE0LCAyMTEsIDMsIDcyLCAxNCwgMjExLCAzLCAyMzcsIDEyNiwgMTQsIDIxMSwgMywgMjM3LCAKKyAgICAxNywgMTQsIDIxMSwgMywgMTUzLCAxNCwgMjExLCAzLCAxODksIDE0LCAyMTEsIDMsIDIwNywgMTQsIDIxMSwgMywgNzQsIAorICAgIDE0LCAyMTEsIDMsIDIzMCwgNTksIDE0LCAyMTEsIDMsIDIyOCwgMTYzLCAxNCwgMjExLCAzLCAxNTIsIDE0LCAyMTEsIDMsIAorICAgIDE5OCwgMTQsIDIxMSwgMywgMjIyLCAyMDEsIDE0LCAyMTEsIDMsIDY4LCAxNCwgMjExLCAzLCAyMTYsIDIxNiwgMTQsIDIxMSwgCisgICAgMywgMjE5LCA0MCwgMTQsIDIxMSwgMywgMjE4LCAxNTEsIDE0LCAyMTEsIDMsIDIxOCwgOTAsIDE0LCAyMTEsIDMsIDIxNywgCisgICAgMTU3LCAxNCwgMzAsIDMsIDI0OCwgMTQ0LCA3MiwgMTQsIDMwLCAzLCAyNDgsIDE0NCwgMjM3LCAxMjYsIDE0LCAyMSwgNiwgCisgICAgMjU0LCAxNDYsIDE0LCAyMSwgNiwgMjUyLCAxMDIsIDE0LCAyMSwgNiwgMjQ0LCAyMzEsIDE0LCAyMSwgNiwgMjQ5LCA2MiwgCisgICAgMTQsIDIxLCA2LCAyNDYsIDE1NiwgMTQsIDIxLCA2LCAyMTcsIDgzLCAxNCwgMjEsIDYsIDI0NiwgMTIxLCAxNCwgMjEsIDYsIAorICAgIDIyMiwgNiwgMTQsIDIxLCA2LCAyMzcsIDE2MiwgMTQsIDIxLCA2LCAyMzYsIDIyMSwgMTQsIDIxLCA2LCAyMzUsIDE1NiwgCisgICAgMTQsIDIxLCA2LCAyMzMsIDk5LCAxNCwgMjEsIDYsIDIzMSwgMTQ0LCAxNCwgMjEsIDYsIDIxOCwgMTMwLCAxNCwgMjEsIDYsIAorICAgIDIzMCwgMTQxLCAxNCwgMjEsIDYsIDIyOSwgMTA4LCAxNCwgMjEsIDYsIDIyNywgMTQ5LCAxNCwgMjEsIDYsIDIyMiwgNywgCisgICAgMTAwLCAxNCwgMjEsIDYsIDIyNCwgMTI3LCAxNCwgMjEsIDYsIDIyMiwgMTA1LCAxNCwgMjEsIDYsIDIyMCwgNTcsIDE0LCAKKyAgICAyMSwgNiwgMjI5LCAxMjksIDE0LCAyMSwgNiwgMjUxLCAzMSwgMTQsIDIxLCA2LCAyMjgsIDIxMiwgMTQsIDIxLCA2LCAyMzAsIAorICAgIDE0MywgMTQsIDIxLCAyMzIsIDIzMSwgMTQsIDIxLCAzLCAyNTQsIDE0NiwgMTQsIDIxLCAzLCAyNTIsIDEwMiwgMTQsIDIxLCAKKyAgICAzLCAyNDQsIDIzMSwgMTQsIDIxLCAzLCAyNDksIDYyLCAxNCwgMjEsIDMsIDI0NiwgMTU2LCAxNCwgMjEsIDMsIDIxNywgODMsIAorICAgIDE0LCAyMSwgMywgMjQ2LCAxMjEsIDE0LCAyMSwgMywgMjIyLCA2LCAxNCwgMjEsIDMsIDIzNywgMTYyLCAxNCwgMjEsIDMsIAorICAgIDIzNiwgMjIxLCAxNCwgMjEsIDMsIDIzNSwgMTU2LCAxNCwgMjEsIDMsIDIzMywgOTksIDE0LCAyMSwgMywgMjMxLCAxNDQsIAorICAgIDE0LCAyMSwgMywgMjE4LCAxMzAsIDE0LCAyMSwgMywgMjMwLCAxNDEsIDE0LCAyMSwgMywgMjI5LCAxMDgsIDE0LCAyMSwgMywgCisgICAgMjI3LCAxNDksIDE0LCAyMSwgMywgMzksIDIyNCwgMTI3LCAxNCwgMjEsIDMsIDIyNCwgMTI3LCAxNCwgMjEsIDMsIDIyMiwgCisgICAgMTA1LCAxNCwgMjEsIDMsIDIyMCwgNTcsIDE0LCAyMSwgMywgMjI5LCAxMjksIDE0LCAyMSwgMywgMjUxLCAzMSwgMTQsIDIxLCAKKyAgICAzLCAyMjgsIDIxMiwgMTQsIDIxLCAzLCAyMzAsIDE0MywgMTQsIDIxLCAyMjksIDIyMywgMjQ4LCAyNDYsIDE0LCAyMSwgCisgICAgMjQ2LCAxNTcsIDEwMCwgMTQsIDIxLCAyMjIsIDcsIDEwMCwgMTQsIDIxLCAyMzYsIDIyMiwgMTAwLCAxNCwgMjEsIDIyOSwgCisgICAgMTMwLCAxMDAsIDE0LCAyMSwgMjI3LCAxNTAsIDEwMCwgMTQsIDIxLCAyMjksIDEwOSwgMTAwLCAxNCwgMzAsIDYsIDI1NCwgCisgICAgMTQ2LCAxNCwgMzAsIDYsIDI1MiwgMTAyLCAxNCwgMzAsIDYsIDI0NCwgMjMxLCAxNCwgMzAsIDYsIDI0OSwgNjIsIDE0LCAKKyAgICAzMCwgNiwgMjQ2LCAxNTYsIDE0LCAzMCwgNiwgMjE3LCA4MywgMTQsIDMwLCA2LCAyNDYsIDEyMSwgMTQsIDMwLCA2LCAyMjIsIAorICAgIDYsIDE0LCAzMCwgNiwgMjM3LCAxNjIsIDE0LCAzMCwgNiwgMjM2LCAyMjEsIDE0LCAzMCwgNiwgMjM1LCAxNTYsIDE0LCAzMCwgCisgICAgNiwgMjMzLCA5OSwgMTQsIDMwLCA2LCAyMzEsIDE0NCwgMTQsIDMwLCA2LCAyMTgsIDEzMCwgMTQsIDMwLCA2LCAyMzAsIAorICAgIDE0MSwgMTQsIDMwLCA2LCAyMjksIDEwOCwgMTQsIDMwLCA2LCAyMjcsIDE0OSwgMTQsIDMwLCA2LCAyMjIsIDcsIDEwMCwgCisgICAgMTQsIDMwLCA2LCAyMjQsIDEyNywgMTQsIDMwLCA2LCAyMjIsIDEwNSwgMTQsIDMwLCA2LCAyMjAsIDU3LCAxNCwgMzAsIDYsIAorICAgIDIyOSwgMTI5LCAxNCwgMzAsIDYsIDI1MSwgMzEsIDE0LCAzMCwgNiwgMjI4LCAyMTIsIDE0LCAzMCwgNiwgMjMwLCAxNDMsIAorICAgIDE0LCAzMCwgMjMyLCAyMzEsIDE0LCAzMCwgMywgMjU0LCAxNDYsIDE0LCAzMCwgMywgMjUyLCAxMDIsIDE0LCAzMCwgMywgCisgICAgMjQ0LCAyMzEsIDE0LCAzMCwgMywgMjQ5LCA2MiwgMTQsIDMwLCAzLCAyNDYsIDE1NiwgMTQsIDMwLCAzLCAyMTcsIDgzLCAKKyAgICAxNCwgMzAsIDMsIDI0NiwgMTIxLCAxNCwgMzAsIDMsIDIyMiwgNiwgMTQsIDMwLCAzLCAyMzcsIDE2MiwgMTQsIDMwLCAzLCAKKyAgICAyMzYsIDIyMSwgMTQsIDMwLCAzLCAyMzUsIDE1NiwgMTQsIDMwLCAzLCAyMzMsIDk5LCAxNCwgMzAsIDMsIDIzMSwgMTQ0LCAKKyAgICAxNCwgMzAsIDMsIDIxOCwgMTMwLCAxNCwgMzAsIDMsIDIzMCwgMTQxLCAxNCwgMzAsIDMsIDIyOSwgMTA4LCAxNCwgMzAsIDMsIAorICAgIDIyNywgMTQ5LCAxNCwgMzAsIDMsIDM5LCAyMjQsIDEyNywgMTQsIDMwLCAzLCAyMjQsIDEyNywgMTQsIDMwLCAzLCAyMjIsIAorICAgIDEwNSwgMTQsIDMwLCAzLCAyMjAsIDU3LCAxNCwgMzAsIDMsIDIyOSwgMTI5LCAxNCwgMzAsIDMsIDI1MSwgMzEsIDE0LCAzMCwgCisgICAgMywgMjI4LCAyMTIsIDE0LCAzMCwgMywgMjMwLCAxNDMsIDE0LCAzMCwgMjI5LCAyMjMsIDI0OCwgMjQ2LCAxNCwgMzAsIAorICAgIDI0NiwgMTU3LCAxMDAsIDE0LCAzMCwgMjIyLCA3LCAxMDAsIDE0LCAzMCwgMjM2LCAyMjIsIDEwMCwgMTQsIDMwLCAyMjksIAorICAgIDEzMCwgMTAwLCAxNCwgMzAsIDIyNywgMTUwLCAxMDAsIDE0LCAzMCwgMjI5LCAxMDksIDEwMCwgMTQsIDIxLCAzMCwgNiwgCisgICAgMjU0LCAxNDYsIDE0LCAyMSwgMzAsIDYsIDI1MiwgMTAyLCAxNCwgMjEsIDMwLCA2LCAyNDQsIDIzMSwgMTQsIDIxLCAzMCwgCisgICAgNiwgMjQ5LCA2MiwgMTQsIDIxLCAzMCwgNiwgMjQ2LCAxNTYsIDE0LCAyMSwgMzAsIDYsIDIxNywgODMsIDE0LCAyMSwgMzAsIAorICAgIDYsIDI0NiwgMTIxLCAxNCwgMjEsIDMwLCA2LCAyMjIsIDYsIDE0LCAyMSwgMzAsIDYsIDIzNywgMTYyLCAxNCwgMjEsIDMwLCAKKyAgICA2LCAyMzYsIDIyMSwgMTQsIDIxLCAzMCwgNiwgMjM1LCAxNTYsIDE0LCAyMSwgMzAsIDYsIDIzMywgOTksIDE0LCAyMSwgMzAsIAorICAgIDYsIDIzMSwgMTQ0LCAxNCwgMjEsIDMwLCA2LCAyMTgsIDEzMCwgMTQsIDIxLCAzMCwgNiwgMjMwLCAxNDEsIDE0LCAyMSwgCisgICAgMzAsIDYsIDIyOSwgMTA4LCAxNCwgMjEsIDMwLCA2LCAyMjcsIDE0OSwgMTQsIDIxLCAzMCwgNiwgMjIyLCA3LCAxMDAsIDE0LCAKKyAgICAyMSwgMzAsIDYsIDIyNCwgMTI3LCAxNCwgMjEsIDMwLCA2LCAyMjIsIDEwNSwgMTQsIDIxLCAzMCwgNiwgMjIwLCA1NywgMTQsIAorICAgIDIxLCAzMCwgNiwgMjI5LCAxMjksIDE0LCAyMSwgMzAsIDYsIDI1MSwgMzEsIDE0LCAyMSwgMzAsIDYsIDIyOCwgMjEyLCAxNCwgCisgICAgMjEsIDMwLCA2LCAyMzAsIDE0MywgMTQsIDIxLCAzMCwgMjMyLCAyMzEsIDE0LCAyMSwgMzAsIDMsIDI1NCwgMTQ2LCAxNCwgCisgICAgMjEsIDMwLCAzLCAyNTIsIDEwMiwgMTQsIDIxLCAzMCwgMywgMjQ0LCAyMzEsIDE0LCAyMSwgMzAsIDMsIDI0OSwgNjIsIDE0LCAKKyAgICAyMSwgMzAsIDMsIDI0NiwgMTU2LCAxNCwgMjEsIDMwLCAzLCAyMTcsIDgzLCAxNCwgMjEsIDMwLCAzLCAyNDYsIDEyMSwgMTQsIAorICAgIDIxLCAzMCwgMywgMjIyLCA2LCAxNCwgMjEsIDMwLCAzLCAyMzcsIDE2MiwgMTQsIDIxLCAzMCwgMywgMjM2LCAyMjEsIDE0LCAKKyAgICAyMSwgMzAsIDMsIDIzNSwgMTU2LCAxNCwgMjEsIDMwLCAzLCAyMzMsIDk5LCAxNCwgMjEsIDMwLCAzLCAyMzEsIDE0NCwgMTQsIAorICAgIDIxLCAzMCwgMywgMjE4LCAxMzAsIDE0LCAyMSwgMzAsIDMsIDIzMCwgMTQxLCAxNCwgMjEsIDMwLCAzLCAyMjksIDEwOCwgCisgICAgMTQsIDIxLCAzMCwgMywgMjI3LCAxNDksIDE0LCAyMSwgMzAsIDMsIDM5LCAyMjQsIDEyNywgMTQsIDIxLCAzMCwgMywgMjI0LCAKKyAgICAxMjcsIDE0LCAyMSwgMzAsIDMsIDIyMiwgMTA1LCAxNCwgMjEsIDMwLCAzLCAyMjAsIDU3LCAxNCwgMjEsIDMwLCAzLCAyMjksIAorICAgIDEyOSwgMTQsIDIxLCAzMCwgMywgMjUxLCAzMSwgMTQsIDIxLCAzMCwgMywgMjI4LCAyMTIsIDE0LCAyMSwgMzAsIDMsIDIzMCwgCisgICAgMTQzLCAxNCwgMjEsIDMwLCAyMjksIDIyMywgMjQ4LCAyNDYsIDE0LCAyMSwgMzAsIDI0NiwgMTU3LCAxMDAsIDE0LCAyMSwgCisgICAgMzAsIDIyMiwgNywgMTAwLCAxNCwgMjEsIDMwLCAyMzYsIDIyMiwgMTAwLCAxNCwgMjEsIDMwLCAyMjksIDEzMCwgMTAwLCAKKyAgICAxNCwgMjEsIDMwLCAyMjcsIDE1MCwgMTAwLCAxNCwgMjEsIDMwLCAyMjksIDEwOSwgMTAwLCAxNCwgMzMsIDIxLCA2LCAyNTQsIAorICAgIDE0NiwgMTQsIDMzLCAyMSwgNiwgMjUyLCAxMDIsIDE0LCAzMywgMjEsIDYsIDI0NCwgMjMxLCAxNCwgMzMsIDIxLCA2LCAKKyAgICAyNDksIDYyLCAxNCwgMzMsIDIxLCA2LCAyNDYsIDE1NiwgMTQsIDMzLCAyMSwgNiwgMjE3LCA4MywgMTQsIDMzLCAyMSwgNiwgCisgICAgMjQ2LCAxMjEsIDE0LCAzMywgMjEsIDYsIDIyMiwgNiwgMTQsIDMzLCAyMSwgNiwgMjM3LCAxNjIsIDE0LCAzMywgMjEsIDYsIAorICAgIDIzNiwgMjIxLCAxNCwgMzMsIDIxLCA2LCAyMzUsIDE1NiwgMTQsIDMzLCAyMSwgNiwgMjMzLCA5OSwgMTQsIDMzLCAyMSwgNiwgCisgICAgMjMxLCAxNDQsIDE0LCAzMywgMjEsIDYsIDIxOCwgMTMwLCAxNCwgMzMsIDIxLCA2LCAyMzAsIDE0MSwgMTQsIDMzLCAyMSwgCisgICAgNiwgMjI5LCAxMDgsIDE0LCAzMywgMjEsIDYsIDIyNywgMTQ5LCAxNCwgMzMsIDIxLCA2LCAyMjIsIDcsIDEwMCwgMTQsIDMzLCAKKyAgICAyMSwgNiwgMjI0LCAxMjcsIDE0LCAzMywgMjEsIDYsIDIyMiwgMTA1LCAxNCwgMzMsIDIxLCA2LCAyMjAsIDU3LCAxNCwgMzMsIAorICAgIDIxLCA2LCAyMjksIDEyOSwgMTQsIDMzLCAyMSwgNiwgMjUxLCAzMSwgMTQsIDMzLCAyMSwgNiwgMjI4LCAyMTIsIDE0LCAzMywgCisgICAgMjEsIDYsIDIzMCwgMTQzLCAxNCwgMzMsIDIxLCAyMzIsIDIzMSwgMTQsIDMzLCAyMSwgMywgMjU0LCAxNDYsIDE0LCAzMywgCisgICAgMjEsIDMsIDI1MiwgMTAyLCAxNCwgMzMsIDIxLCAzLCAyNDQsIDIzMSwgMTQsIDMzLCAyMSwgMywgMjQ5LCA2MiwgMTQsIDMzLCAKKyAgICAyMSwgMywgMjQ2LCAxNTYsIDE0LCAzMywgMjEsIDMsIDIxNywgODMsIDE0LCAzMywgMjEsIDMsIDI0NiwgMTIxLCAxNCwgMzMsIAorICAgIDIxLCAzLCAyMjIsIDYsIDE0LCAzMywgMjEsIDMsIDIzNywgMTYyLCAxNCwgMzMsIDIxLCAzLCAyMzYsIDIyMSwgMTQsIDMzLCAKKyAgICAyMSwgMywgMjM1LCAxNTYsIDE0LCAzMywgMjEsIDMsIDIzMywgOTksIDE0LCAzMywgMjEsIDMsIDIzMSwgMTQ0LCAxNCwgMzMsIAorICAgIDIxLCAzLCAyMTgsIDEzMCwgMTQsIDMzLCAyMSwgMywgMjMwLCAxNDEsIDE0LCAzMywgMjEsIDMsIDIyOSwgMTA4LCAxNCwgCisgICAgMzMsIDIxLCAzLCAyMjcsIDE0OSwgMTQsIDMzLCAyMSwgMywgMzksIDIyNCwgMTI3LCAxNCwgMzMsIDIxLCAzLCAyMjQsIAorICAgIDEyNywgMTQsIDMzLCAyMSwgMywgMjIyLCAxMDUsIDE0LCAzMywgMjEsIDMsIDIyMCwgNTcsIDE0LCAzMywgMjEsIDMsIDIyOSwgCisgICAgMTI5LCAxNCwgMzMsIDIxLCAzLCAyNTEsIDMxLCAxNCwgMzMsIDIxLCAzLCAyMjgsIDIxMiwgMTQsIDMzLCAyMSwgMywgMjMwLCAKKyAgICAxNDMsIDE0LCAzMywgMjEsIDIyOSwgMjIzLCAyNDgsIDI0NiwgMTQsIDMzLCAyMSwgMjQ2LCAxNTcsIDEwMCwgMTQsIDMzLCAKKyAgICAyMSwgMjIyLCA3LCAxMDAsIDE0LCAzMywgMjEsIDIzNiwgMjIyLCAxMDAsIDE0LCAzMywgMjEsIDIyOSwgMTMwLCAxMDAsIAorICAgIDE0LCAzMywgMjEsIDIyNywgMTUwLCAxMDAsIDE0LCAzMywgMjEsIDIyOSwgMTA5LCAxMDAsIDE0LCAzMywgMjEsIDMwLCA2LCAKKyAgICAyNTQsIDE0NiwgMTQsIDMzLCAyMSwgMzAsIDYsIDI1MiwgMTAyLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjQ0LCAyMzEsIDE0LCAKKyAgICAzMywgMjEsIDMwLCA2LCAyNDksIDYyLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjQ2LCAxNTYsIDE0LCAzMywgMjEsIDMwLCA2LCAKKyAgICAyMTcsIDgzLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjQ2LCAxMjEsIDE0LCAzMywgMjEsIDMwLCA2LCAyMjIsIDYsIDE0LCAzMywgCisgICAgMjEsIDMwLCA2LCAyMzcsIDE2MiwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzNiwgMjIxLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjM1LCAKKyAgICAxNTYsIDE0LCAzMywgMjEsIDMwLCA2LCAyMzMsIDk5LCAxNCwgMzMsIDIxLCAzMCwgNiwgMjMxLCAxNDQsIDE0LCAzMywgMjEsIAorICAgIDMwLCA2LCAyMTgsIDEzMCwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzMCwgMTQxLCAxNCwgMzMsIDIxLCAzMCwgNiwgMjI5LCAKKyAgICAxMDgsIDE0LCAzMywgMjEsIDMwLCA2LCAyMjcsIDE0OSwgMTQsIDMzLCAyMSwgMzAsIDYsIDIyMiwgNywgMTAwLCAxNCwgMzMsIAorICAgIDIxLCAzMCwgNiwgMjI0LCAxMjcsIDE0LCAzMywgMjEsIDMwLCA2LCAyMjIsIDEwNSwgMTQsIDMzLCAyMSwgMzAsIDYsIDIyMCwgCisgICAgNTcsIDE0LCAzMywgMjEsIDMwLCA2LCAyMjksIDEyOSwgMTQsIDMzLCAyMSwgMzAsIDYsIDI1MSwgMzEsIDE0LCAzMywgMjEsIAorICAgIDMwLCA2LCAyMjgsIDIxMiwgMTQsIDMzLCAyMSwgMzAsIDYsIDIzMCwgMTQzLCAxNCwgMzMsIDIxLCAzMCwgMjMyLCAyMzEsIAorICAgIDE0LCAzMywgMjEsIDMwLCAzLCAyNTQsIDE0NiwgMTQsIDMzLCAyMSwgMzAsIDMsIDI1MiwgMTAyLCAxNCwgMzMsIDIxLCAzMCwgCisgICAgMywgMjQ0LCAyMzEsIDE0LCAzMywgMjEsIDMwLCAzLCAyNDksIDYyLCAxNCwgMzMsIDIxLCAzMCwgMywgMjQ2LCAxNTYsIDE0LCAKKyAgICAzMywgMjEsIDMwLCAzLCAyMTcsIDgzLCAxNCwgMzMsIDIxLCAzMCwgMywgMjQ2LCAxMjEsIDE0LCAzMywgMjEsIDMwLCAzLCAKKyAgICAyMjIsIDYsIDE0LCAzMywgMjEsIDMwLCAzLCAyMzcsIDE2MiwgMTQsIDMzLCAyMSwgMzAsIDMsIDIzNiwgMjIxLCAxNCwgMzMsIAorICAgIDIxLCAzMCwgMywgMjM1LCAxNTYsIDE0LCAzMywgMjEsIDMwLCAzLCAyMzMsIDk5LCAxNCwgMzMsIDIxLCAzMCwgMywgMjMxLCAKKyAgICAxNDQsIDE0LCAzMywgMjEsIDMwLCAzLCAyMTgsIDEzMCwgMTQsIDMzLCAyMSwgMzAsIDMsIDIzMCwgMTQxLCAxNCwgMzMsIAorICAgIDIxLCAzMCwgMywgMjI5LCAxMDgsIDE0LCAzMywgMjEsIDMwLCAzLCAyMjcsIDE0OSwgMTQsIDMzLCAyMSwgMzAsIDMsIDM5LCAKKyAgICAyMjQsIDEyNywgMTQsIDMzLCAyMSwgMzAsIDMsIDIyNCwgMTI3LCAxNCwgMzMsIDIxLCAzMCwgMywgMjIyLCAxMDUsIDE0LCAKKyAgICAzMywgMjEsIDMwLCAzLCAyMjAsIDU3LCAxNCwgMzMsIDIxLCAzMCwgMywgMjI5LCAxMjksIDE0LCAzMywgMjEsIDMwLCAzLCAKKyAgICAyNTEsIDMxLCAxNCwgMzMsIDIxLCAzMCwgMywgMjI4LCAyMTIsIDE0LCAzMywgMjEsIDMwLCAzLCAyMzAsIDE0MywgMTQsIAorICAgIDMzLCAyMSwgMzAsIDIyOSwgMjIzLCAyNDgsIDI0NiwgMTQsIDMzLCAyMSwgMzAsIDI0NiwgMTU3LCAxMDAsIDE0LCAzMywgCisgICAgMjEsIDMwLCAyMjIsIDcsIDEwMCwgMTQsIDMzLCAyMSwgMzAsIDIzNiwgMjIyLCAxMDAsIDE0LCAzMywgMjEsIDMwLCAyMjksIAorICAgIDEzMCwgMTAwLCAxNCwgMzMsIDIxLCAzMCwgMjI3LCAxNTAsIDEwMCwgMTQsIDMzLCAyMSwgMzAsIDIyOSwgMTA5LCAxMDAsIAorICAgIDE0LCAyMSwgNiwgMjQ4LCAyNDAsIDE0LCAyMSwgMywgMjQ4LCAyNDAsIDE0LCAyMSwgMjAsIDIxNywgODQsIDE0LCAyMSwgCisgICAgMjAsIDEwNywgMTQsIDIxLCAyMCwgMTAzLCAxNCwgMjEsIDIwLCAxNjAsIDE0LCAyMSwgMjAsIDE1NCwgMTQsIDIxLCAyMCwgCisgICAgMTc0LCAxNCwgMjEsIDIwLCAxODIsIDE0LCAyMSwgMjAsIDE5MSwgMTQsIDIxLCAyMCwgMTg1LCAxNCwgMjEsIDIwLCAxOTAsIAorICAgIDE0LCAxNzMsIDIwLCAyMTcsIDg0LCAxNCwgMTczLCAyMCwgMTA3LCAxNCwgMTczLCAyMCwgMTAzLCAxNCwgMTczLCAyMCwgCisgICAgMTYwLCAxNCwgMTczLCAyMCwgMTU0LCAxNCwgMTczLCAyMCwgMTc0LCAxNCwgMTczLCAyMCwgMTgyLCAxNCwgMTczLCAyMCwgCisgICAgMTkxLCAxNCwgMTczLCAyMCwgMTg1LCAxNCwgMTczLCAyMCwgMTkwLCAxNCwgMzMsIDIwLCAyMTcsIDg0LCAxNCwgMzMsIDIwLCAKKyAgICAxMDcsIDE0LCAzMywgMjAsIDEwMywgMTQsIDMzLCAyMCwgMTYwLCAxNCwgMzMsIDIwLCAxNTQsIDE0LCAzMywgMjAsIDE3NCwgCisgICAgMTQsIDMzLCAyMCwgMTgyLCAxNCwgMzMsIDIwLCAxOTEsIDE0LCAzMywgMjAsIDE4NSwgMTQsIDMzLCAyMCwgMTkwLCAxNCwgCisgICAgMzMsIDIxLCAyMCwgMjE3LCA4NCwgMTQsIDMzLCAyMSwgMjAsIDEwNywgMTQsIDMzLCAyMSwgMjAsIDEwMywgMTQsIDMzLCAKKyAgICAyMSwgMjAsIDE2MCwgMTQsIDMzLCAyMSwgMjAsIDE1NCwgMTQsIDMzLCAyMSwgMjAsIDE3NCwgMTQsIDMzLCAyMSwgMjAsIAorICAgIDE4MiwgMTQsIDMzLCAyMSwgMjAsIDE5MSwgMTQsIDMzLCAyMSwgMjAsIDE4NSwgMTQsIDMzLCAyMSwgMjAsIDE5MCwgMTQsIAorICAgIDIxMSwgMjAsIDIxNywgODQsIDE0LCAyMTEsIDIwLCAxMDcsIDE0LCAyMTEsIDIwLCAxMDMsIDE0LCAyMTEsIDIwLCAxNjAsIAorICAgIDE0LCAyMTEsIDIwLCAxNTQsIDE0LCAyMTEsIDIwLCAxNzQsIDE0LCAyMTEsIDIwLCAxODIsIDE0LCAyMTEsIDIwLCAxOTEsIAorICAgIDE0LCAyMTEsIDIwLCAxODUsIDE0LCAyMTEsIDIwLCAxOTAsIDIzNCwgMTAxLCA4MSwgMjQ3LCA1LCAyMTgsIDE5NCwgMjM0LCAKKyAgICAxMDEsIDgxLCAyMjQsIDYsIDIxOCwgMTk0LCAyMzQsIDEwMSwgODEsIDIxOCwgMjE3LCAyMTgsIDE5NCwgMjM0LCAxMDEsIAorICAgIDgxLCAyMzEsIDE4NywgMjE4LCAxOTQsIDIzNCwgMTAxLCA4MSwgMjI3LCAyMDMsIDI0NywgMTIzLCAyMzQsIDEwMSwgODEsIAorICAgIDI0NCwgMjcsIDI0NywgMTIzLCAyMzQsIDEwMSwgODEsIDY3LCAyNDcsIDEyMywgMjM0LCAxMDEsIDgxLCAxMzEsIDExNywgCisgICAgMjUxLCA1NCwgMjM0LCAxMDEsIDgxLCAxMjQsIDExNywgMjUxLCA1NCwgMjM0LCAxMDEsIDgxLCAxNDgsIDExNywgMjUxLCAKKyAgICA1NCwgMjM0LCAxMDEsIDgxLCAyNDUsIDExNiwgMTE3LCAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDI0NSwgMTcwLCAxMTcsIAorICAgIDI1MSwgNTQsIDIzNCwgMTAxLCA4MSwgMjI0LCA4MiwgMTE3LCAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDIyNSwgNDMsIDExNywgCisgICAgMjUxLCA1NCwgMjM0LCAxMDEsIDgxLCAyNDYsIDIzNSwgMTE3LCAyNTEsIDU0LCAyMzQsIDEwMSwgODEsIDIzMiwgMzEsIAorICAgIDExNywgMjUxLCA1NCwgMjM0LCAxMDEsIDgxLCAxMzEsIDExNywgMjUyLCAyMTAsIDIzNCwgMTAxLCA4MSwgMTI0LCAxMTcsIAorICAgIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIDE0OCwgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAyNDUsIDExNiwgMTE3LCAKKyAgICAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAyNDUsIDE3MCwgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAyMjQsIDgyLCAKKyAgICAxMTcsIDI1MiwgMjEwLCAyMzQsIDEwMSwgODEsIDIyNSwgNDMsIDExNywgMjUyLCAyMTAsIDIzNCwgMTAxLCA4MSwgMjQ2LCAKKyAgICAyMzUsIDExNywgMjUyLCAyMTAsIDIzNCwgMTAxLCA4MSwgMjMyLCAzMSwgMTE3LCAyNTIsIDIxMCwgMjM0LCAxMDEsIDgxLCAKKyAgICAxMzEsIDExNywgMjUwLCAyMjAsIDIzNCwgMTAxLCA4MSwgMTI0LCAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIDE0OCwgCisgICAgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAyNDUsIDExNiwgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAyNDUsIAorICAgIDE3MCwgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAyMjQsIDgyLCAxMTcsIDI1MCwgMjIwLCAyMzQsIDEwMSwgODEsIAorICAgIDIyNSwgNDMsIDExNywgMjUwLCAyMjAsIDIzNCwgMTAxLCA4MSwgMjQ2LCAyMzUsIDExNywgMjUwLCAyMjAsIDIzNCwgMTAxLCAKKyAgICA4MSwgMjMyLCAzMSwgMTE3LCAyNTAsIDIyMCwgMjM0LCAxMDEsIDgxLCAyMjksIDQ1LCAyMzQsIDEwMSwgODEsIDIzMCwgCisgICAgMTA0LCAyMzQsIDEwMSwgODEsIDI1MiwgMjExLCAyMzQsIDEwMSwgODEsIDI1MCwgMjU0LCAyMzQsIDEwMSwgODEsIDIyMywgCisgICAgMjMyLCAyMzQsIDEwMSwgODEsIDIyMywgNzAsIDIzNCwgMTAxLCA4MSwgMjUzLCAyMjMsIDIzNCwgMTAxLCA4MSwgMjE4LCAKKyAgICAxOTAsIDIzNCwgMTAxLCA4MSwgMjM3LCA1MywgMjM0LCAxMDEsIDgxLCAyNTIsIDIzMywgMTE5LCA4MSwgMTg2LCAyNTIsIAorICAgIDIzMywgMTE5LCA4MSwgMjQyLCAyNDAsIDExOSwgODEsIDI0MiwgMjM5LCAxMTksIDgxLCAyNDIsIDIzOCwgMTE5LCA4MSwgCisgICAgMjQyLCAyMzcsIDExOSwgODEsIDI0MiwgMjM2LCAxMTksIDgxLCAyNDIsIDIzNSwgMTE5LCA4MSwgMjQyLCAyMzQsIDExOSwgCisgICAgODEsIDI0MiwgMjMzLCAxMTksIDgxLCAyNDIsIDIzMiwgMTE5LCA4MSwgMjQyLCAyMzEsIDExOSwgODEsIDI0MiwgMjMwLCAKKyAgICAxMTksIDgxLCAyNDIsIDIyOSwgMTE5LCA4MSwgMjQyLCAyMjgsIDExOSwgODEsIDI0MiwgMjI3LCAxMTksIDgxLCAyNDIsIAorICAgIDIyNiwgMTE5LCA4MSwgMjQyLCAyMjUsIDExOSwgODEsIDI0MiwgMjI0LCAxMTksIDgxLCAyNDIsIDIyMywgMTE5LCA4MSwgCisgICAgMjQyLCAyMjIsIDExOSwgODEsIDI0MiwgMjIxLCAxMTksIDgxLCAyNDIsIDIyMCwgMTE5LCA4MSwgMjQyLCAyMTksIDExOSwgCisgICAgODEsIDI0MiwgMjE4LCAxMTksIDgxLCAyNDIsIDIxNywgMTE5LCA4MSwgMjQyLCAyMTYsIDExOSwgODEsIDI0MiwgMjE1LCAKKyAgICAxMTksIDgxLCAyNDIsIDIxNCwgMTE5LCA4MSwgMjQyLCAyMTMsIDExOSwgODEsIDI0MiwgMjEyLCAxMTksIDgxLCAyNDIsIAorICAgIDIxMSwgMTE5LCA4MSwgMjQyLCAyMTAsIDExOSwgODEsIDI0MiwgMjA5LCAxMTksIDgxLCAyNDIsIDIwOCwgMTE5LCA4MSwgCisgICAgMjQyLCAyMDcsIDExOSwgODEsIDI0MiwgMjA2LCAxMTksIDgxLCAyNDIsIDIwNSwgMTE5LCA4MSwgMjQyLCAyMDQsIDExOSwgCisgICAgODEsIDI0MiwgMjAzLCAxMTksIDgxLCAyNDIsIDIwMiwgMTE5LCA4MSwgMjQyLCAyMDEsIDExOSwgODEsIDI0MiwgMjAwLCAKKyAgICAxMTksIDgxLCAyNDIsIDE5OSwgMTE5LCA4MSwgMjQyLCAxOTgsIDExOSwgODEsIDI0MiwgMTk3LCAxMTksIDgxLCAyNDIsIAorICAgIDE5NiwgMTE5LCA4MSwgMjQyLCAxOTUsIDExOSwgODEsIDI0MiwgMTk0LCAxMTksIDgxLCAyNDIsIDE5MywgMTE5LCA4MSwgCisgICAgMjQyLCAxOTIsIDExOSwgODEsIDY5LCAyNTIsIDIzMywgMTE5LCA4MSwgMjE5LCAxNTEsIDExOSwgODEsIDIxOSwgMTUwLCAKKyAgICAxMTksIDgxLCAyMTksIDE0OSwgMTE5LCA4MSwgMjE5LCAxNDgsIDExOSwgODEsIDIxOSwgMTQ3LCAxMTksIDgxLCAyMTksIAorICAgIDE0NiwgMTE5LCA4MSwgMjE5LCAxNDUsIDExOSwgODEsIDIxOSwgMTQ0LCAxMTksIDgxLCAyMTksIDE0MywgMTE5LCA4MSwgCisgICAgMjE5LCAxNDIsIDExOSwgODEsIDIxOSwgMTQxLCAxMTksIDgxLCAyMTksIDE0MCwgMTE5LCA4MSwgMjE5LCAxMzksIDExOSwgCisgICAgODEsIDIxOSwgMTM4LCAxMTksIDgxLCAyMTksIDEzNywgMTE5LCA4MSwgMjE5LCAxMzYsIDExOSwgODEsIDIxOSwgMTM1LCAKKyAgICAxMTksIDgxLCAyMTksIDEzNCwgMTE5LCA4MSwgMjE5LCAxMzMsIDExOSwgODEsIDIxOSwgMTMyLCAxMTksIDgxLCAyMTksIAorICAgIDEzMSwgMTE5LCA4MSwgMjE5LCAxMzAsIDExOSwgODEsIDIxOSwgMTI5LCAxMTksIDgxLCAyMTksIDEyOCwgMTE5LCA4MSwgCisgICAgMjE5LCAxMjcsIDExOSwgODEsIDIxOSwgMTI2LCAxMTksIDgxLCAyMTksIDEyNSwgMTE5LCA4MSwgMjE5LCAxMjQsIDExOSwgCisgICAgODEsIDIxOSwgMTIzLCAxMTksIDgxLCAyMTksIDEyMiwgMTE5LCA4MSwgMjE5LCAxMjEsIDExOSwgODEsIDIxOSwgMTIwLCAKKyAgICAxMTksIDgxLCAyMTksIDExOSwgMTE5LCA4MSwgMjE5LCAxMTgsIDExOSwgODEsIDIxOSwgMTE3LCAxMTksIDgxLCAyMTksIAorICAgIDExNiwgMTE5LCA4MSwgMjE5LCAxMTUsIDExOSwgODEsIDIxOSwgMTE0LCAxMTksIDgxLCAyMTksIDExMywgMTE5LCA4MSwgCisgICAgMjE5LCAxMTIsIDExOSwgODEsIDIxOSwgMTExLCAxMTksIDgxLCAyMTksIDExMCwgMTE5LCA4MSwgMjE5LCAxMDksIDExOSwgCisgICAgODEsIDIxOSwgMTA4LCAxMTksIDgxLCAyMTksIDEwNywgMTE5LCA4MSwgMjE5LCAxMDYsIDExOSwgODEsIDIxOSwgMTA1LCAKKyAgICAxMTksIDgxLCAyMTksIDEwNCwgMTE5LCA4MSwgMjE5LCAxMDMsIDIwLCAyMTcsIDg1LCAyNDUsIDkwLCAyMjMsIDEzNiwgMjAsIAorICAgIDIxNywgODUsIDI1MCwgMTY4LCAyMCwgMTMxLCAyNTAsIDE2OCwgMjAsIDEyNCwgMjUwLCAxNjgsIDIwLCAxNDgsIDI1MCwgCisgICAgMTY4LCAyMCwgMjQ1LCAxMTYsIDI1MCwgMTY4LCAyMCwgMjQ1LCAxNzAsIDI1MCwgMTY4LCAyMCwgMjI0LCA4MiwgMjUwLCAKKyAgICAxNjgsIDIwLCAyMjUsIDQzLCAyNTAsIDE2OCwgMjAsIDI0NiwgMjM1LCAyNTAsIDE2OCwgMjAsIDIzMiwgMzEsIDI1MCwgCisgICAgMTY4LCA4MiwgNywgNiwgMSwgNjAsIDgyLCA3LCA2LCAxLCAyNTMsIDIwNCwgODIsIDcsIDYsIDEsIDI1MSwgMjAyLCA4MiwgCisgICAgNywgNiwgMSwgMjUwLCA0NiwgODIsIDcsIDYsIDEsIDczLCA4MiwgNywgNiwgMSwgMjQ2LCA3NCwgODIsIDcsIDYsIDEsIAorICAgIDI0NSwgNjcsIDgyLCA3LCA2LCAxLCAyNDMsIDIyNSwgODIsIDcsIDYsIDEsIDcyLCA4MiwgNywgNiwgMSwgMjM3LCAxMjYsIAorICAgIDgyLCA3LCA2LCAxLCAyMzcsIDE3LCA4MiwgNywgNiwgMSwgMTUzLCA4MiwgNywgNiwgMSwgMTg5LCA4MiwgNywgNiwgMSwgCisgICAgMjA3LCA4MiwgNywgNiwgMSwgNzQsIDgyLCA3LCA2LCAxLCAyMzAsIDU5LCA4MiwgNywgNiwgMSwgMjI4LCAxNjMsIDgyLCA3LCAKKyAgICA2LCAxLCAxNTIsIDgyLCA3LCA2LCAxLCAxOTgsIDgyLCA3LCA2LCAxLCAyMjIsIDIwMSwgODIsIDcsIDYsIDEsIDY4LCA4MiwgCisgICAgNywgNiwgMSwgMjE2LCAyMTYsIDgyLCA3LCA2LCAxLCAyMTksIDQwLCA4MiwgNywgNiwgMSwgMjE4LCAxNTEsIDgyLCA3LCA2LCAKKyAgICAxLCAyMTgsIDkwLCA4MiwgNywgNiwgMSwgMjE3LCAxNTcsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgNywgNiwgMSwgCisgICAgMTk4LCAzNCwgMzAsIDcsIDYsIDEsIDI1MSwgMjAyLCAzNCwgMzAsIDcsIDYsIDEsIDE1MiwgMzQsIDI1MSwgMTAwLCAzNCwgCisgICAgMjE4LCAxNTMsIDIwNCwgNywgNiwgMSwgMjUzLCAyMDQsIDIwNCwgNywgNiwgMSwgMjA3LCAyMDQsIDcsIDYsIDEsIDIzMCwgCisgICAgNTksIDIwNCwgNywgNiwgMSwgMTk4LCAyMDQsIDcsIDYsIDEsIDIxOSwgNDAsIDIwNCwgMjQyLCAxNTQsIDIwNCwgMjMzLCAKKyAgICA1MiwgMjA0LCAyMjYsIDk2LCAyMDQsIDIyMywgMjE5LCAyMDQsIDIyOSwgNCwgMjMyLCAxMzYsIDM0LCA3LCA2LCAxLCAyNDMsIAorICAgIDIyNSwgMjMyLCAxMzYsIDM0LCA3LCA2LCAxLCAyMzAsIDU5LCAyMzIsIDEzNiwgMjA0LCA3LCA2LCAxLCAyMzcsIDEyNiwgCisgICAgMjMyLCAxMzYsIDIwNCwgNywgNiwgMSwgMTUzLCAyMzIsIDEzNiwgMjA0LCA3LCA2LCAxLCAxODksIDIzMiwgMTM2LCAyMDQsIAorICAgIDcsIDYsIDEsIDIzMCwgNTksIDI1MCwgOTgsIDIzMiwgMTM2LCAyMDQsIDcsIDYsIDEsIDIzMCwgNTksIDIzMiwgMTM2LCAKKyAgICAyMDQsIDI0MiwgNjcsIDIzMiwgMTM2LCAyMDQsIDE4NywgMjMyLCAxMzYsIDIwNCwgMjI2LCAxNzcsIDQwLCAyNDgsIDE4NCwgCisgICAgNDAsIDEzNiwgMjQzLCAwLCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgOCwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDEyLCAyMDQsIAorICAgIDksIDIyMCwgNzYsIDI0MCwgMTgsIDIwNCwgNTIsIDI0OSwgOTIsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyNCwgMjA0LCA5LCAKKyAgICAyMjAsIDc2LCAyNDAsIDE0LCAyMDQsIDksIDIyMCwgNzYsIDIzOSwgMjQ4LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMTMsIAorICAgIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyMywgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDAsIDIwNCwgOSwgMjIwLCA3NiwgMjM5LCAKKyAgICAyNTIsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyLCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMjAsIDIwNCwgOSwgMjIwLCA3NiwgCisgICAgMjQwLCA5LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMjIsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAxLCAyMDQsIDksIDIyMCwgCisgICAgNzYsIDI0MCwgMjEsIDIwNCwgOSwgMjIwLCA3NiwgMjM5LCAyNDksIDIwNCwgOSwgMjIwLCA3NiwgMjM5LCAyNTEsIDIwNCwgCisgICAgOSwgMjIwLCA3NiwgMjM5LCAyNDcsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAxNSwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDE2LCAKKyAgICAyMDQsIDksIDIyMCwgNzYsIDIzOSwgMjU0LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgNiwgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIAorICAgIDQsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyNywgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDI2LCAyMDQsIDksIDIyMCwgNzYsIAorICAgIDIzOSwgMjQ1LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgMTAsIDIwNCwgOSwgMjIwLCA3NiwgMjQwLCAyNSwgMjA0LCA5LCAKKyAgICAyMjAsIDc2LCAyNDAsIDE3LCAyMDQsIDksIDIyMCwgNzYsIDI0MCwgNSwgMjA0LCA5LCAyMjAsIDc2LCAyMzksIDI0NiwgCisgICAgMjA0LCA5LCAyMjAsIDc2LCAyNDAsIDcsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjM5LCAKKyAgICAyNTUsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjQwLCAyNiwgMjIxLCAxMTQsIDIyNCwgCisgICAgMjM2LCAyNTIsIDE3LCA5LCAyMjAsIDc2LCAyNDAsIDI0LCAyMjEsIDExNCwgMjI0LCAyMzYsIDI1MiwgMTcsIDksIDIyMCwgCisgICAgNzYsIDI0MCwgMTEsIDIyMSwgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjM5LCAyNTMsIDIyMSwgMTE0LCAKKyAgICAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjQwLCA3LCAyMjEsIDExNCwgMjI0LCAyMzYsIDI1MiwgMTcsIDksIAorICAgIDIyMCwgNzYsIDIzOSwgMjUwLCAyMjEsIDExNCwgMjI0LCAyMzYsIDI1MiwgMTcsIDksIDIyMCwgNzYsIDI0MCwgMTksIDIyMSwgCisgICAgMTE0LCAyMjQsIDIzNiwgMjUyLCAxNywgOSwgMjIwLCA3NiwgMjQwLCAzLCA5LCAxMywgMjQyLCA1NywgOSwgMTMsIDI0MiwgCisgICAgNTYsIDksIDEzLCAyNDIsIDU1LCA5LCAxMywgMjQyLCA1NCwgOSwgMTMsIDI0MiwgNTMsIDksIDEzLCAyNDIsIDUyLCA5LCAKKyAgICAxMywgMjQyLCA1MSwgOSwgMTMsIDI0MiwgNTAsIDksIDEzLCAyNDIsIDQ5LCA5LCAxMywgMjQyLCA0OCwgOSwgMTMsIDI0MiwgCisgICAgNDcsIDksIDEzLCAyNDIsIDQ2LCA5LCAxMywgMjQyLCA0NSwgOSwgMTMsIDI0MiwgNDQsIDksIDEzLCAyNDIsIDQzLCA5LCAKKyAgICAxMywgMjQyLCA0MiwgOSwgMTMsIDI0MiwgNDEsIDksIDEzLCAyNDIsIDQwLCA5LCAxMywgMjQyLCAzOSwgOSwgMTMsIDI0MiwgCisgICAgMzgsIDksIDEzLCAyNDIsIDM3LCA5LCAxMywgMjQyLCAzNiwgOSwgMTMsIDI0MiwgMzUsIDksIDEzLCAyNDIsIDM0LCA5LCAKKyAgICAxMywgMjQyLCAzMywgOSwgMTMsIDI0MiwgMzIsIDksIDEzLCAyNDIsIDMxLCA5LCAxMywgMjQyLCAzMCwgOSwgMTMsIDI0MiwgCisgICAgMjksIDksIDEzLCAyNDIsIDI4LCA5LCAxMywgMjQyLCAyNywgOSwgMTMsIDI0MiwgMjYsIDksIDEzLCAyNDIsIDI1LCA5LCAKKyAgICAxMywgMjQyLCAyNCwgOSwgMTMsIDI0MiwgMjMsIDksIDEzLCAyNDIsIDIyLCA5LCAxMywgMjQyLCAyMSwgOSwgMTMsIDI0MiwgCisgICAgMjAsIDksIDEzLCAyNDIsIDE5LCA5LCAxMywgMjQyLCAxOCwgOSwgMTMsIDI0MiwgMTcsIDksIDEzLCAyNDIsIDE2LCA5LCAKKyAgICAxMywgMjQyLCAxNSwgOSwgMTMsIDI0MiwgMTQsIDksIDEzLCAyNDIsIDEzLCA5LCAxMywgMjQyLCAxMiwgOSwgMTMsIDI0MiwgCisgICAgMTEsIDksIDEzLCAyNDIsIDEwLCA5LCAxMywgMjQyLCA5LCA5LCAxMywgMjQyLCA4LCA5LCAxMywgMjQyLCA3LCA5LCAxMywgCisgICAgMjQyLCA2LCA5LCAxMywgMjQyLCA1LCA5LCAxMywgMjQyLCA0LCA5LCAxMywgMjQyLCAzLCA5LCAxMywgMjQyLCAyLCA5LCAKKyAgICAxMywgMjQyLCAxLCA5LCAxMywgMjQyLCAwLCA5LCAxMywgMjQxLCAyNTUsIDksIDEzLCAyNDEsIDI1NCwgOSwgMTMsIDI0MSwgCisgICAgMjUzLCA5LCAxMywgMjQxLCAyNTIsIDksIDEzLCAyNDEsIDI1MSwgOSwgMTMsIDI0MSwgMjUwLCA5LCAxMywgMjQxLCAyNDksIAorICAgIDksIDEzLCAyNDEsIDI0OCwgOSwgMTMsIDI0MSwgMjQ3LCA5LCAxMywgMjQxLCAyNDYsIDksIDEzLCAyNDEsIDI0NSwgOSwgCisgICAgMTMsIDI0MSwgMjQ0LCA5LCAxMywgMjQxLCAyNDMsIDksIDEzLCAyNDEsIDI0MiwgOSwgMTMsIDI0MSwgMjQxLCA5LCAxMywgCisgICAgMjQxLCAyNDAsIDksIDEzLCAyNDEsIDIzOSwgOSwgMTMsIDI0MSwgMjM4LCA5LCAxMywgMjQxLCAyMzcsIDksIDEzLCAyNDEsIAorICAgIDIzNiwgOSwgMTMsIDI0MSwgMjM1LCA5LCAxMywgMjQxLCAyMzQsIDksIDEzLCAyNDEsIDIzMywgOSwgMTMsIDI0MSwgMjMyLCAKKyAgICA5LCAxMywgMjQxLCAyMzEsIDksIDEzLCAyNDEsIDIzMCwgOSwgMTMsIDI0MSwgMjI5LCA5LCAxMywgMjQxLCAyMjgsIDksIAorICAgIDEzLCAyNDEsIDIyNywgOSwgMTMsIDI0MSwgMjI2LCA5LCAxMywgMjQxLCAyMjUsIDksIDEzLCAyNDEsIDIyNCwgOSwgMTMsIAorICAgIDI0MSwgMjIzLCA5LCAxMywgMjQxLCAyMjIsIDksIDEzLCAyNDEsIDIyMSwgOSwgMTMsIDI0MSwgMjIwLCA5LCAxMywgMjQxLCAKKyAgICAyMTksIDksIDEzLCAyNDEsIDIxOCwgOSwgMTMsIDI0MSwgMjE3LCA5LCAxMywgMjQxLCAyMTYsIDksIDEzLCAyNDEsIDIxNSwgCisgICAgOSwgMTMsIDI0MSwgMjE0LCA5LCAxMywgMjQxLCAyMTMsIDksIDEzLCAyNDEsIDIxMiwgOSwgMTMsIDI0MSwgMjExLCA5LCAKKyAgICAxMywgMjQxLCAyMTAsIDksIDEzLCAyNDEsIDIwOSwgOSwgMTMsIDI0MSwgMjA4LCA5LCAxMywgMjQxLCAyMDcsIDksIDEzLCAKKyAgICAyNDEsIDIwNiwgOSwgMTMsIDI0MSwgMjA1LCA5LCAxMywgMjQxLCAyMDQsIDksIDEzLCAyNDEsIDIwMywgOSwgMTMsIDI0MSwgCisgICAgMjAyLCA5LCAxMywgMjQxLCAyMDEsIDksIDEzLCAyNDEsIDIwMCwgOSwgMTMsIDI0MSwgMTk5LCA5LCAxMywgMjQxLCAxOTgsIAorICAgIDksIDEzLCAyNDEsIDE5NywgOSwgMTMsIDI0MSwgMTk2LCA5LCAxMywgMjQxLCAxOTUsIDksIDEzLCAyNDEsIDE5NCwgOSwgCisgICAgMTMsIDI0MSwgMTkzLCA5LCAxMywgMjQxLCAxOTIsIDksIDEzLCAyNDEsIDE5MSwgOSwgMTMsIDI0MSwgMTkwLCA5LCAxMywgCisgICAgMjQxLCAxODksIDksIDEzLCAyNDEsIDE4OCwgOSwgMTMsIDI0MSwgMTg3LCA5LCAxMywgMjQxLCAxODYsIDksIDEzLCAyNDEsIAorICAgIDE4NSwgOSwgMTMsIDI0MSwgMTg0LCA5LCAxMywgMjQxLCAxODMsIDksIDEzLCAyNDEsIDE4MiwgOSwgMTMsIDI0MSwgMTgxLCAKKyAgICA5LCAxMywgMjQxLCAxODAsIDksIDEzLCAyNDEsIDE3OSwgOSwgMTMsIDI0MSwgMTc4LCA5LCAxMywgMjQxLCAxNzcsIDksIAorICAgIDEzLCAyNDEsIDE3NiwgOSwgMTMsIDI0MSwgMTc1LCA5LCAxMywgMjQxLCAxNzQsIDksIDEzLCAyNDEsIDE3MywgOSwgMTMsIAorICAgIDI0MSwgMTcyLCA5LCAxMywgMjQxLCAxNzEsIDksIDEzLCAyNDEsIDE3MCwgOSwgMTMsIDI0MSwgMTY5LCA5LCAxMywgMjQxLCAKKyAgICAxNjgsIDksIDEzLCAyNDEsIDE2NywgOSwgMTMsIDI0MSwgMTY2LCA5LCAxMywgMjQxLCAxNjUsIDksIDEzLCAyNDEsIDE2NCwgCisgICAgOSwgMTMsIDI0MSwgMTYzLCA5LCAxMywgMjQxLCAxNjIsIDksIDEzLCAyNDEsIDE2MSwgOSwgMTMsIDI0MSwgMTYwLCA5LCAKKyAgICAxMywgMjQxLCAxNTksIDksIDEzLCAyNDEsIDE1OCwgOSwgMTMsIDI0MSwgMTU3LCA5LCAxMywgMjQxLCAxNTYsIDksIDEzLCAKKyAgICAyNDEsIDE1NSwgOSwgMTMsIDI0MSwgMTU0LCA5LCAxMywgMjQxLCAxNTMsIDksIDEzLCAyNDEsIDE1MiwgOSwgMTMsIDI0MSwgCisgICAgMTUxLCA5LCAxMywgMjQxLCAxNTAsIDksIDEzLCAyNDEsIDE0OSwgOSwgMTMsIDI0MSwgMTQ4LCA5LCAxMywgMjQxLCAxNDcsIAorICAgIDksIDEzLCAyNDEsIDE0NiwgOSwgMTMsIDI0MSwgMTQ1LCA5LCAxMywgMjQxLCAxNDQsIDksIDEzLCAyNDEsIDE0MywgOSwgCisgICAgMTMsIDI0MSwgMTQyLCA5LCAxMywgMjQxLCAxNDEsIDksIDEzLCAyNDEsIDE0MCwgOSwgMTMsIDI0MSwgMTM5LCA5LCAxMywgCisgICAgMjQxLCAxMzgsIDksIDEzLCAyNDEsIDEzNywgOSwgMTMsIDI0MSwgMTM2LCA5LCAxMywgMjQxLCAxMzUsIDksIDEzLCAyNDEsIAorICAgIDEzNCwgOSwgMTMsIDI0MSwgMTMzLCA5LCAxMywgMjQxLCAxMzIsIDksIDEzLCAyNDEsIDEzMSwgOSwgMTMsIDI0MSwgMTMwLCAKKyAgICA5LCAxMywgMjQxLCAxMjksIDksIDEzLCAyNDEsIDEyOCwgOSwgMTMsIDI0MSwgMTI3LCA5LCAxMywgMjQxLCAxMjYsIDksIAorICAgIDEzLCAyNDEsIDEyNSwgOSwgMTMsIDI0MSwgMTI0LCA5LCAxMywgMjQxLCAxMjMsIDksIDEzLCAyNDEsIDEyMiwgOSwgMTMsIAorICAgIDI0MSwgMTIxLCA5LCAxMywgMjQxLCAxMjAsIDksIDEzLCAyNDEsIDExOSwgOSwgMTMsIDI0MSwgMTE4LCA5LCAxMywgMjQxLCAKKyAgICAxMTcsIDksIDEzLCAyNDEsIDExNiwgOSwgMTMsIDI0MSwgMTE1LCA5LCAxMywgMjQxLCAxMTQsIDksIDEzLCAyNDEsIDExMywgCisgICAgOSwgMTMsIDI0MSwgMTEyLCA5LCAxMywgMjQxLCAxMTEsIDksIDEzLCAyNDEsIDExMCwgOSwgMTMsIDI0MSwgMTA5LCA5LCAKKyAgICAxMywgMjQxLCAxMDgsIDksIDEzLCAyNDEsIDEwNywgOSwgMTMsIDI0MSwgMTA2LCA5LCAxMywgMjQxLCAxMDUsIDksIDEzLCAKKyAgICAyNDEsIDEwNCwgOSwgMTMsIDI0MSwgMTAzLCA5LCAxMywgMjQxLCAxMDIsIDksIDEzLCAyNDEsIDEwMSwgOSwgMTMsIDI0MSwgCisgICAgMTAwLCA5LCAxMywgMjQxLCA5OSwgOSwgMTMsIDI0MSwgOTgsIDksIDEzLCAyNDEsIDk3LCA5LCAxMywgMjQxLCA5NiwgOSwgCisgICAgMTMsIDI0MSwgOTUsIDksIDEzLCAyNDEsIDk0LCA5LCAxMywgMjQxLCA5MywgOSwgMTMsIDI0MSwgOTIsIDksIDEzLCAyNDEsIAorICAgIDkxLCA5LCAxMywgMjQxLCA5MCwgOSwgMTMsIDI0MSwgODksIDksIDEzLCAyNDEsIDg4LCA5LCAxMywgMjQxLCA4NywgOSwgCisgICAgMTMsIDI0MSwgODYsIDksIDEzLCAyNDEsIDg1LCA5LCAxMywgMjQxLCA4NCwgOSwgMTMsIDI0MSwgODMsIDksIDEzLCAyNDEsIAorICAgIDgyLCA5LCAxMywgMjQxLCA4MSwgOSwgMTMsIDI0MSwgODAsIDksIDEzLCAyNDEsIDc5LCA5LCAxMywgMjQxLCA3OCwgOSwgCisgICAgMTMsIDI0MSwgNzcsIDksIDEzLCAyNDEsIDc2LCA5LCAxMywgMjQxLCA3NSwgOSwgMTMsIDI0MSwgNzQsIDksIDEzLCAyNDEsIAorICAgIDczLCA5LCAxMywgMjQxLCA3MiwgOSwgMTMsIDI0MSwgNzEsIDksIDEzLCAyNDEsIDcwLCA5LCAxMywgMjQxLCA2OSwgOSwgCisgICAgMTMsIDI0MSwgNjgsIDksIDEzLCAyNDEsIDY3LCA5LCAxMywgMjQxLCA2NiwgOSwgMTMsIDI0MSwgNjUsIDksIDEzLCAyNDEsIAorICAgIDY0LCA5LCAxMywgMjQxLCA2MywgOSwgMTMsIDI0MSwgNjIsIDksIDEzLCAyNDEsIDYxLCA5LCAxMywgMjQxLCA2MCwgOSwgCisgICAgMTMsIDI0MSwgNTksIDksIDEzLCAyNDEsIDU4LCA5LCAxMywgMjQxLCA1NywgOSwgMTMsIDI0MSwgNTYsIDksIDEzLCAyNDEsIAorICAgIDU1LCA5LCAxMywgMjQxLCA1NCwgOSwgMTMsIDI0MSwgNTMsIDksIDEzLCAyNDEsIDUyLCA5LCAxMywgMjQxLCA1MSwgOSwgCisgICAgMTMsIDI0MSwgNTAsIDksIDEzLCAyNDEsIDQ5LCA5LCAxMywgMjQxLCA0OCwgOSwgMTMsIDI0MSwgNDcsIDksIDEzLCAyNDEsIAorICAgIDQ2LCA5LCAxMywgMjQxLCA0NSwgOSwgMTMsIDI0MSwgNDQsIDksIDEzLCAyNDEsIDQzLCA5LCAxMywgMjQxLCA0MiwgOSwgCisgICAgMTMsIDI0MSwgNDEsIDksIDEzLCAyNDEsIDQwLCA5LCAxMywgMjQxLCAzOSwgOSwgMTMsIDI0MSwgMzgsIDksIDEzLCAyNDEsIAorICAgIDM3LCA5LCAxMywgMjQxLCAzNiwgOSwgMTMsIDI0MSwgMzUsIDksIDEzLCAyNDEsIDM0LCA5LCAxMywgMjQxLCAzMywgOSwgCisgICAgMTMsIDI0MSwgMzIsIDksIDEzLCAyNDEsIDMxLCA5LCAxMywgMjQxLCAzMCwgOSwgMTMsIDI0MSwgMjksIDksIDEzLCAyNDEsIAorICAgIDI4LCA5LCAxMywgMjQxLCAyNywgOSwgMTMsIDI0MSwgMjYsIDksIDEzLCAyNDEsIDI1LCA5LCAxMywgMjQxLCAyNCwgOSwgCisgICAgMTMsIDI0MSwgMjMsIDksIDEzLCAyNDEsIDIyLCA5LCAxMywgMjQxLCAyMSwgOSwgMTMsIDI0MSwgMjAsIDksIDEzLCAyNDEsIAorICAgIDE5LCA5LCAxMywgMjQxLCAxOCwgOSwgMTMsIDI0MSwgMTcsIDksIDEzLCAyNDEsIDE2LCA5LCAxMywgMjQxLCAxNSwgOSwgCisgICAgMTMsIDI0MSwgMTQsIDksIDEzLCAyNDEsIDEzLCA5LCAxMywgMjQxLCAxMiwgOSwgMTMsIDI0MSwgMTEsIDksIDEzLCAyNDEsIAorICAgIDEwLCA5LCAxMywgMjQxLCA5LCA5LCAxMywgMjQxLCA4LCA5LCAxMywgMjQxLCA3LCA5LCAxMywgMjQxLCA2LCA5LCAxMywgCisgICAgMjQxLCA1LCA5LCAxMywgMjQxLCA0LCA5LCAxMywgMjQxLCAzLCA5LCAxMywgMjQxLCAyLCA5LCAxMywgMjQxLCAxLCA5LCAKKyAgICAxMywgMjQxLCAwLCA5LCAxMywgMjQwLCAyNTUsIDksIDEzLCAyNDAsIDI1NCwgOSwgMTMsIDI0MCwgMjUzLCA5LCAxMywgCisgICAgMjQwLCAyNTIsIDksIDEzLCAyNDAsIDI1MSwgOSwgMTMsIDI0MCwgMjUwLCA5LCAxMywgMjQwLCAyNDksIDksIDEzLCAyNDAsIAorICAgIDI0OCwgOSwgMTMsIDI0MCwgMjQ3LCA5LCAxMywgMjQwLCAyNDYsIDksIDEzLCAyNDAsIDI0NSwgOSwgMTMsIDI0MCwgMjQ0LCAKKyAgICA5LCAxMywgMjQwLCAyNDMsIDksIDEzLCAyNDAsIDI0MiwgOSwgMTMsIDI0MCwgMjQxLCA5LCAxMywgMjQwLCAyNDAsIDksIAorICAgIDEzLCAyNDAsIDIzOSwgOSwgMTMsIDI0MCwgMjM4LCA5LCAxMywgMjQwLCAyMzcsIDksIDEzLCAyNDAsIDIzNiwgOSwgMTMsIAorICAgIDI0MCwgMjM1LCA5LCAxMywgMjQwLCAyMzQsIDksIDEzLCAyNDAsIDIzMywgOSwgMTMsIDI0MCwgMjMyLCA5LCAxMywgMjQwLCAKKyAgICAyMzEsIDksIDEzLCAyNDAsIDIzMCwgOSwgMTMsIDI0MCwgMjI5LCA5LCAxMywgMjQwLCAyMjgsIDksIDEzLCAyNDAsIDIyNywgCisgICAgOSwgMTMsIDI0MCwgMjI2LCA5LCAxMywgMjQwLCAyMjUsIDksIDEzLCAyNDAsIDIyNCwgOSwgMTMsIDI0MCwgMjIzLCA5LCAKKyAgICAxMywgMjQwLCAyMjIsIDksIDEzLCAyNDAsIDIyMSwgOSwgMTMsIDI0MCwgMjIwLCA5LCAxMywgMjQwLCAyMTksIDksIDEzLCAKKyAgICAyNDAsIDIxOCwgOSwgMTMsIDI0MCwgMjE3LCA5LCAxMywgMjQwLCAyMTYsIDksIDEzLCAyNDAsIDIxNSwgOSwgMTMsIDI0MCwgCisgICAgMjE0LCA5LCAxMywgMjQwLCAyMTMsIDksIDEzLCAyNDAsIDIxMiwgOSwgMTMsIDI0MCwgMjExLCA5LCAxMywgMjQwLCAyMTAsIAorICAgIDksIDEzLCAyNDAsIDIwOSwgOSwgMTMsIDI0MCwgMjA4LCA5LCAxMywgMjQwLCAyMDcsIDksIDEzLCAyNDAsIDIwNiwgOSwgCisgICAgMTMsIDI0MCwgMjA1LCA5LCAxMywgMjQwLCAyMDQsIDksIDEzLCAyNDAsIDIwMywgOSwgMTMsIDI0MCwgMjAyLCA5LCAxMywgCisgICAgMjQwLCAyMDEsIDksIDEzLCAyNDAsIDIwMCwgOSwgMTMsIDI0MCwgMTk5LCA5LCAxMywgMjQwLCAxOTgsIDksIDEzLCAyNDAsIAorICAgIDE5NywgOSwgMTMsIDI0MCwgMTk2LCA5LCAxMywgMjQwLCAxOTUsIDksIDEzLCAyNDAsIDE5NCwgOSwgMTMsIDI0MCwgMTkzLCAKKyAgICA5LCAxMywgMjQwLCAxOTIsIDksIDEzLCAyNDAsIDE5MSwgOSwgMTMsIDI0MCwgMTkwLCA5LCAxMywgMjQwLCAxODksIDksIAorICAgIDEzLCAyNDAsIDE4OCwgOSwgMTMsIDI0MCwgMTg3LCA5LCAxMywgMjQwLCAxODYsIDksIDEzLCAyNDAsIDE4NSwgOSwgMTMsIAorICAgIDI0MCwgMTg0LCA5LCAxMywgMjQwLCAxODMsIDksIDEzLCAyNDAsIDE4MiwgOSwgMTMsIDI0MCwgMTgxLCA5LCAxMywgMjQwLCAKKyAgICAxODAsIDksIDEzLCAyNDAsIDE3OSwgOSwgMTMsIDI0MCwgMTc4LCA5LCAxMywgMjQwLCAxNzcsIDksIDEzLCAyNDAsIDE3NiwgCisgICAgOSwgMTMsIDI0MCwgMTc1LCA5LCAxMywgMjQwLCAxNzQsIDksIDEzLCAyNDAsIDE3MywgOSwgMTMsIDI0MCwgMTcyLCA5LCAKKyAgICAxMywgMjQwLCAxNzEsIDksIDEzLCAyNDAsIDE3MCwgOSwgMTMsIDI0MCwgMTY5LCA5LCAxMywgMjQwLCAxNjgsIDksIDEzLCAKKyAgICAyNDAsIDE2NywgOSwgMTMsIDI0MCwgMTY2LCA5LCAxMywgMjQwLCAxNjUsIDksIDEzLCAyNDAsIDE2NCwgOSwgMTMsIDI0MCwgCisgICAgMTYzLCA5LCAxMywgMjQwLCAxNjIsIDksIDEzLCAyNDAsIDE2MSwgOSwgMTMsIDI0MCwgMTYwLCA5LCAxMywgMjQwLCAxNTksIAorICAgIDksIDEzLCAyNDAsIDE1OCwgOSwgMTMsIDI0MCwgMTU3LCA5LCAxMywgMjQwLCAxNTYsIDksIDEzLCAyNDAsIDE1NSwgOSwgCisgICAgMTMsIDI0MCwgMTU0LCA5LCAxMywgMjQwLCAxNTMsIDksIDEzLCAyNDAsIDE1MiwgOSwgMTMsIDI0MCwgMTUxLCA5LCAxMywgCisgICAgMjQwLCAxNTAsIDksIDEzLCAyNDAsIDE0OSwgOSwgMTMsIDI0MCwgMTQ4LCA5LCAxMywgMjQwLCAxNDcsIDksIDEzLCAyNDAsIAorICAgIDE0NiwgOSwgMTMsIDI0MCwgMTQ1LCA5LCAxMywgMjQwLCAxNDQsIDksIDEzLCAyNDAsIDE0MywgOSwgMTMsIDI0MCwgMTQyLCAKKyAgICA5LCAxMywgMjQwLCAxNDEsIDksIDEzLCAyNDAsIDE0MCwgOSwgMTMsIDI0MCwgMTM5LCA5LCAxMywgMjQwLCAxMzgsIDksIAorICAgIDEzLCAyNDAsIDEzNywgOSwgMTMsIDI0MCwgMTM2LCA5LCAxMywgMjQwLCAxMzUsIDksIDEzLCAyNDAsIDEzNCwgOSwgMTMsIAorICAgIDI0MCwgMTMzLCA5LCAxMywgMjQwLCAxMzIsIDksIDEzLCAyNDAsIDEzMSwgOSwgMTMsIDI0MCwgMTMwLCA5LCAxMywgMjQwLCAKKyAgICAxMjksIDksIDEzLCAyNDAsIDEyOCwgOSwgMTMsIDI0MCwgMTI3LCA5LCAxMywgMjQwLCAxMjYsIDksIDEzLCAyNDAsIDEyNSwgCisgICAgOSwgMTMsIDI0MCwgMTI0LCA5LCAxMywgMjQwLCAxMjMsIDksIDEzLCAyNDAsIDEyMiwgOSwgMTMsIDI0MCwgMTIxLCA5LCAKKyAgICAxMywgMjQwLCAxMjAsIDksIDEzLCAyNDAsIDExOSwgOSwgMTMsIDI0MCwgMTE4LCA5LCAxMywgMjQwLCAxMTcsIDksIDEzLCAKKyAgICAyNDAsIDExNiwgOSwgMTMsIDI0MCwgMTE1LCA5LCAxMywgMjQwLCAxMTQsIDksIDEzLCAyNDAsIDExMywgOSwgMTMsIDI0MCwgCisgICAgMTEyLCA5LCAxMywgMjQwLCAxMTEsIDksIDEzLCAyNDAsIDExMCwgOSwgMTMsIDI0MCwgMTA5LCA5LCAxMywgMjQwLCAxMDgsIAorICAgIDksIDEzLCAyNDAsIDEwNywgOSwgMTMsIDI0MCwgMTA2LCA5LCAxMywgMjQwLCAxMDUsIDksIDEzLCAyNDAsIDEwNCwgOSwgCisgICAgMTMsIDI0MCwgMTAzLCA5LCAxMywgMjQwLCAxMDIsIDksIDEzLCAyNDAsIDEwMSwgOSwgMTMsIDI0MCwgMTAwLCA5LCAxMywgCisgICAgMjQwLCA5OSwgOSwgMTMsIDI0MCwgOTgsIDksIDEzLCAyNDAsIDk3LCA5LCAxMywgMjQwLCA5NiwgOSwgMTMsIDI0MCwgOTUsIAorICAgIDksIDEzLCAyNDAsIDk0LCA5LCAxMywgMjQwLCA5MywgOSwgMTMsIDI0MCwgOTIsIDksIDEzLCAyNDAsIDkxLCA5LCAxMywgCisgICAgMjQwLCA5MCwgOSwgMTMsIDI0MCwgODksIDksIDEzLCAyNDAsIDg4LCA5LCAxMywgMjQwLCA4NywgOSwgMTMsIDI0MCwgODYsIAorICAgIDksIDEzLCAyNDAsIDg1LCA5LCAxMywgMjQwLCA4NCwgOSwgMTMsIDI0MCwgODMsIDksIDEzLCAyNDAsIDgyLCA5LCAxMywgCisgICAgMjQwLCA4MSwgOSwgMTMsIDI0MCwgODAsIDksIDEzLCAyNDAsIDc5LCA5LCAxMywgMjQwLCA3OCwgOSwgMTMsIDI0MCwgNzcsIAorICAgIDksIDEzLCAyNDAsIDc2LCA5LCAxMywgMjQwLCA3NSwgOSwgMTMsIDI0MCwgNzQsIDksIDEzLCAyNDAsIDczLCA5LCAxMywgCisgICAgMjQwLCA3MiwgOSwgMTMsIDI0MCwgNzEsIDksIDEzLCAyNDAsIDcwLCA5LCAxMywgMjQwLCA2OSwgOSwgMTMsIDI0MCwgNjgsIAorICAgIDksIDEzLCAyNDAsIDY3LCA5LCAxMywgMjQwLCA2NiwgOSwgMTMsIDI0MCwgNjUsIDksIDEzLCAyNDAsIDY0LCA5LCAxMywgCisgICAgMjQwLCA2MywgOSwgMTMsIDI0MCwgNjIsIDksIDEzLCAyNDAsIDYxLCA5LCAxMywgMjQwLCA2MCwgOSwgMTMsIDI0MCwgNTksIAorICAgIDksIDEzLCAyNDAsIDU4LCA5LCAxMywgMjQwLCA1NywgOSwgMTMsIDI0MCwgNTYsIDksIDEzLCAyNDAsIDU1LCA5LCAxMywgCisgICAgMjQwLCA1NCwgOSwgMTMsIDI0MCwgNTMsIDksIDEzLCAyNDAsIDUyLCA5LCAxMywgMjQwLCA1MSwgOSwgMTMsIDI0MCwgNTAsIAorICAgIDksIDEzLCAyNDAsIDQ5LCA5LCAxMywgMjQwLCA0OCwgOSwgMTMsIDI0MCwgNDcsIDksIDEzLCAyNDAsIDQ2LCA5LCAxMywgCisgICAgMjQwLCA0NSwgOSwgMTMsIDI0MCwgNDQsIDksIDEzLCAyNDAsIDQzLCA5LCAxMywgMjQwLCA0MiwgOSwgMTMsIDI0MCwgNDEsIAorICAgIDksIDEzLCAyNDAsIDQwLCA5LCAxMywgMjQwLCAzOSwgOSwgMTMsIDI0MCwgMzgsIDksIDEzLCAyNDAsIDM3LCA5LCAxMywgCisgICAgMjQwLCAzNiwgOSwgMTMsIDI0MCwgMzUsIDksIDEzLCAyNDAsIDM0LCA5LCAxMywgMjQwLCAzMywgOSwgMTMsIDI0MCwgMzIsIAorICAgIDksIDEzLCAyNDAsIDMxLCA5LCAxMywgMjQwLCAzMCwgOSwgMTMsIDI0MCwgMjksIDksIDEzLCAyNDAsIDI4LCAyMzUsIDE0OCwgCisgICAgMjIyLCAxNDEsIDExOCwgMjIzLCAyNTQsIDExOCwgMjQ2LCA5NSwgNzgsIDExOCwgMjI4LCA2OSwgNzgsIDExOCwgNTQsIDU1LCAKKyAgICAxMTgsIDI0OCwgMTU1LCA1NSwgMTE4LCAyMjksIDE2OSwgNTUsIDExOCwgMjU0LCAxMzQsIDExOCwgMjU0LCA3OSwgMTE4LCAKKyAgICA0MiwgMjI5LCAyMjksIDExOCwgNDUsIDIyOSwgMjI5LCAxMTgsIDI1MywgMjUxLCAxMTgsIDg4LCA1NSwgMTE4LCAyNTAsIAorICAgIDE2OCwgMTE4LCAyNDIsIDEyMCwgMTE4LCAyNDUsIDkwLCAyMjMsIDEzNiwgMTE4LCAyMjQsIDE3LCAxMTgsIDIwLCAyMTcsIAorICAgIDg0LCAxMTgsIDIwLCAxMDcsIDExOCwgMjAsIDEwMywgMTE4LCAyMCwgMTYwLCAxMTgsIDIwLCAxNTQsIDExOCwgMjAsIDE3NCwgCisgICAgMTE4LCAyMCwgMTgyLCAxMTgsIDIwLCAxOTEsIDExOCwgMjAsIDE4NSwgMTE4LCAyMCwgMTkwLCAxMTgsIDI1MCwgMTc1LCAKKyAgICAxMTgsIDIyNSwgNjcsIDExOCwgMjM1LCA4NywgNTUsIDExOCwgMjQ2LCAxNTQsIDU1LCAxMTgsIDI0NCwgMzAsIDU1LCAxMTgsIAorICAgIDIyOCwgODIsIDc4LCAxMTgsIDI1MCwgMTY3LCAyNTMsIDI0NCwgMTE4LCA3LCA2LCAxLCA2MCwgMTE4LCA3LCA2LCAxLCAKKyAgICAyNTMsIDIwNCwgMTE4LCA3LCA2LCAxLCAyNTEsIDIwMiwgMTE4LCA3LCA2LCAxLCAyNTAsIDQ2LCAxMTgsIDcsIDYsIDEsIAorICAgIDczLCAxMTgsIDcsIDYsIDEsIDI0NiwgNzQsIDExOCwgNywgNiwgMSwgMjQ1LCA2NywgMTE4LCA3LCA2LCAxLCAyNDMsIDIyNSwgCisgICAgMTE4LCA3LCA2LCAxLCA3MiwgMTE4LCA3LCA2LCAxLCAyMzcsIDEyNiwgMTE4LCA3LCA2LCAxLCAyMzcsIDE3LCAxMTgsIDcsIAorICAgIDYsIDEsIDE1MywgMTE4LCA3LCA2LCAxLCAxODksIDExOCwgNywgNiwgMSwgMjA3LCAxMTgsIDcsIDYsIDEsIDc0LCAxMTgsIAorICAgIDcsIDYsIDEsIDIzMCwgNTksIDExOCwgNywgNiwgMSwgMjI4LCAxNjMsIDExOCwgNywgNiwgMSwgMTUyLCAxMTgsIDcsIDYsIAorICAgIDEsIDE5OCwgMTE4LCA3LCA2LCAxLCAyMjIsIDIwMSwgMTE4LCA3LCA2LCAxLCA2OCwgMTE4LCA3LCA2LCAxLCAyMTYsIDIxNiwgCisgICAgMTE4LCA3LCA2LCAxLCAyMTksIDQwLCAxMTgsIDcsIDYsIDEsIDIxOCwgMTUxLCAxMTgsIDcsIDYsIDEsIDIxOCwgOTAsIAorICAgIDExOCwgNywgNiwgMSwgMjE3LCAxNTcsIDExOCwgNDIsIDQwLCAxMTUsIDExOCwgMjI3LCAxNjAsIDIyNCwgMTcsIDExOCwgCisgICAgNDUsIDQwLCAxMTUsIDExOCwgMjUwLCAyMTcsIDI1NSwgMCwgMTE4LCAxMDksIDIzNSwgNDMsIDExOCwgMjQ0LCAzNywgMjU1LCAKKyAgICAwLCAxMTgsIDcsIDMsIDEsIDYwLCAxMTgsIDcsIDMsIDEsIDI1MywgMjA0LCAxMTgsIDcsIDMsIDEsIDI1MSwgMjAyLCAxMTgsIAorICAgIDcsIDMsIDEsIDI1MCwgNDYsIDExOCwgNywgMywgMSwgNzMsIDExOCwgNywgMywgMSwgMjQ2LCA3NCwgMTE4LCA3LCAzLCAxLCAKKyAgICAyNDUsIDY3LCAxMTgsIDcsIDMsIDEsIDI0MywgMjI1LCAxMTgsIDcsIDMsIDEsIDcyLCAxMTgsIDcsIDMsIDEsIDIzNywgCisgICAgMTI2LCAxMTgsIDcsIDMsIDEsIDIzNywgMTcsIDExOCwgNywgMywgMSwgMTUzLCAxMTgsIDcsIDMsIDEsIDE4OSwgMTE4LCA3LCAKKyAgICAzLCAxLCAyMDcsIDExOCwgNywgMywgMSwgNzQsIDExOCwgNywgMywgMSwgMjMwLCA1OSwgMTE4LCA3LCAzLCAxLCAyMjgsIAorICAgIDE2MywgMTE4LCA3LCAzLCAxLCAxNTIsIDExOCwgNywgMywgMSwgMTk4LCAxMTgsIDcsIDMsIDEsIDIyMiwgMjAxLCAxMTgsIAorICAgIDcsIDMsIDEsIDY4LCAxMTgsIDcsIDMsIDEsIDIxNiwgMjE2LCAxMTgsIDcsIDMsIDEsIDIxOSwgNDAsIDExOCwgNywgMywgMSwgCisgICAgMjE4LCAxNTEsIDExOCwgNywgMywgMSwgMjE4LCA5MCwgMTE4LCA3LCAzLCAxLCAyMTcsIDE1NywgMTE4LCA0MiwgMjUwLCAKKyAgICA3OSwgMTE1LCAxMTgsIDY5LCAyMzUsIDQzLCAxMTgsIDQ1LCAyNTAsIDc5LCAxMTUsIDExOCwgMjIxLCAxNzksIDI1MSwgCisgICAgMTUzLCAyMjIsIDE0MSwgNDEsIDIyNSwgMjUxLCA0MSwgMjI1LCAyNDAsIDQxLCAyMjUsIDIyOSwgNDEsIDIyNSwgMjE3LCAKKyAgICA0MSwgMjI1LCAyMDYsIDQxLCAyMjUsIDE5NSwgNDEsIDIyNSwgMTg0LCA0MSwgMjI1LCAxNzMsIDQxLCAyMjUsIDE2MiwgNDEsIAorICAgIDIyNSwgMTU0LCA0MSwgMjI1LCAxNTMsIDQxLCAyMjUsIDE1MiwgNDEsIDIyNSwgMTUxLCA0MSwgMjI1LCAxNDksIDQxLCAKKyAgICAyMjUsIDE0OCwgNDEsIDIyNSwgMTQ3LCA0MSwgMjI1LCAxNDYsIDQxLCAyMjUsIDE0NSwgNDEsIDIyNSwgMTQ0LCA0MSwgCisgICAgMjI1LCAxNDMsIDQxLCAyMjUsIDE0MiwgNDEsIDIyNSwgMTQxLCA0MSwgMjI1LCAxNDAsIDQxLCAyMjUsIDEzOCwgNDEsIAorICAgIDIyNSwgMTM3LCA0MSwgMjI1LCAxMzYsIDQxLCAyMjUsIDEzNSwgNDEsIDIyNSwgMTM0LCA0MSwgMjI1LCAxMzMsIDQxLCAKKyAgICAyMjUsIDEzMiwgNDEsIDIyNSwgMTMxLCA0MSwgMjI1LCAxMzAsIDQxLCAyMjUsIDEyOSwgNDEsIDIyNSwgMTI3LCA0MSwgCisgICAgMjI1LCAxMjYsIDQxLCAyMjUsIDEyNSwgNDEsIDIyNSwgMTI0LCA0MSwgMjI1LCAxMjMsIDQxLCAyMjUsIDEyMiwgNDEsIAorICAgIDIyNSwgMTIxLCA0MSwgMjI1LCAxMjAsIDQxLCAyMjUsIDExOSwgNDEsIDIyNSwgMTE4LCA0MSwgMjI1LCAxMTYsIDQxLCAKKyAgICAyMjUsIDExNSwgNDEsIDIyNSwgMTE0LCA0MSwgMjI1LCAxMTMsIDQxLCAyMjUsIDExMiwgNDEsIDIyNSwgMTExLCA0MSwgCisgICAgMjI1LCAxMTAsIDQxLCAyMjUsIDEwOSwgNDEsIDIyNSwgMTA4LCA0MSwgMjI1LCAxMDcsIDQxLCAyMjUsIDEwNSwgNDEsIAorICAgIDIyNSwgMTA0LCA0MSwgMjI1LCAxMDMsIDQxLCAyMjUsIDEwMiwgNDEsIDIyNSwgMTAxLCA0MSwgMjI1LCAxMDAsIDQxLCAKKyAgICAyMjUsIDk5LCA0MSwgMjI1LCA5OCwgNDEsIDIyNSwgOTcsIDQxLCAyMjUsIDk2LCA0MSwgMjI1LCA5NCwgNDEsIDIyNSwgOTMsIAorICAgIDQxLCAyMjUsIDkyLCA0MSwgMjI1LCA5MSwgNDEsIDIyNSwgOTAsIDQxLCAyMjUsIDg5LCA0MSwgMjI1LCA4OCwgNDEsIDIyNSwgCisgICAgODcsIDQxLCAyMjUsIDg2LCA0MSwgMjI1LCA4NSwgNDEsIDIyNSwgODMsIDQxLCAyMjUsIDgyLCA0MSwgMjI1LCA4MSwgNDEsIAorICAgIDIyNSwgODAsIDQxLCAyMjUsIDc5LCA0MSwgMjI1LCA3OCwgNDEsIDIyNSwgNzcsIDQxLCAyMjUsIDc2LCA0MSwgMjI1LCA3NSwgCisgICAgNDEsIDIyNSwgNzQsIDQxLCAyMjYsIDcxLCA0MSwgMjI2LCA3MCwgNDEsIDIyNiwgNjksIDQxLCAyMjYsIDY4LCA0MSwgMjI2LCAKKyAgICA2NywgNDEsIDIyNiwgNjYsIDQxLCAyMjYsIDY1LCA0MSwgMjI2LCA2NCwgNDEsIDIyNiwgNjMsIDQxLCAyMjYsIDYyLCA0MSwgCisgICAgMjI2LCA2MCwgNDEsIDIyNiwgNTksIDQxLCAyMjYsIDU4LCA0MSwgMjI2LCA1NywgNDEsIDIyNiwgNTYsIDQxLCAyMjYsIDU1LCAKKyAgICA0MSwgMjI2LCA1NCwgNDEsIDIyNiwgNTMsIDQxLCAyMjYsIDUyLCA0MSwgMjI2LCA1MSwgNDEsIDIyNiwgNDksIDQxLCAyMjYsIAorICAgIDQ4LCA0MSwgMjI2LCA0NywgNDEsIDIyNiwgNDYsIDQxLCAyMjYsIDQ1LCA0MSwgMjI2LCA0NCwgNDEsIDIyNiwgNDMsIDQxLCAKKyAgICAyMjYsIDQyLCA0MSwgMjI2LCA0MSwgNDEsIDIyNiwgNDAsIDQxLCAyMjYsIDM4LCA0MSwgMjI2LCAzNywgNDEsIDIyNiwgMzYsIAorICAgIDQxLCAyMjYsIDM1LCA0MSwgMjI2LCAzNCwgNDEsIDIyNiwgMzMsIDQxLCAyMjYsIDMyLCA0MSwgMjI2LCAzMSwgNDEsIDIyNiwgCisgICAgMzAsIDQxLCAyMjYsIDI5LCA0MSwgMjI2LCAyNywgNDEsIDIyNiwgMjYsIDQxLCAyMjYsIDI1LCA0MSwgMjI2LCAyNCwgNDEsIAorICAgIDIyNiwgMjMsIDQxLCAyMjYsIDIyLCA0MSwgMjI2LCAyMSwgNDEsIDIyNiwgMjAsIDQxLCAyMjYsIDE5LCA0MSwgMjI2LCAxOCwgCisgICAgNDEsIDIyNiwgMTYsIDQxLCAyMjYsIDE1LCA0MSwgMjI2LCAxNCwgNDEsIDIyNiwgMTMsIDQxLCAyMjYsIDEyLCA0MSwgMjI2LCAKKyAgICAxMSwgNDEsIDIyNiwgMTAsIDQxLCAyMjYsIDksIDQxLCAyMjYsIDgsIDQxLCAyMjYsIDcsIDQxLCAyMjYsIDUsIDQxLCAyMjYsIAorICAgIDQsIDQxLCAyMjYsIDMsIDQxLCAyMjYsIDIsIDQxLCAyMjYsIDEsIDQxLCAyMjYsIDAsIDQxLCAyMjUsIDI1NSwgNDEsIDIyNSwgCisgICAgMjU0LCA0MSwgMjI1LCAyNTMsIDQxLCAyMjUsIDI1MiwgNDEsIDIyNSwgMjUwLCA0MSwgMjI1LCAyNDksIDQxLCAyMjUsIAorICAgIDI0OCwgNDEsIDIyNSwgMjQ3LCA0MSwgMjI1LCAyNDYsIDQxLCAyMjUsIDI0NSwgNDEsIDIyNSwgMjQ0LCA0MSwgMjI1LCAKKyAgICAyNDMsIDQxLCAyMjUsIDI0MiwgNDEsIDIyNSwgMjQxLCA0MSwgMjI1LCAyMzksIDQxLCAyMjUsIDIzOCwgNDEsIDIyNSwgCisgICAgMjM3LCA0MSwgMjI1LCAyMzYsIDQxLCAyMjUsIDIzNSwgNDEsIDIyNSwgMjM0LCA0MSwgMjI1LCAyMzMsIDQxLCAyMjUsIAorICAgIDIzMiwgNDEsIDIyNSwgMjMxLCA0MSwgMjI1LCAyMzAsIDQxLCAyMjUsIDIyOCwgNDEsIDIyNSwgMjI3LCA0MSwgMjI1LCAKKyAgICAyMjYsIDQxLCAyMjUsIDIyNSwgNDEsIDIyNSwgMjI0LCA0MSwgMjI1LCAyMjMsIDQxLCAyMjUsIDIyMiwgNDEsIDIyNSwgCisgICAgMjIxLCA0MSwgMjI1LCAyMjAsIDQxLCAyMjUsIDIxOSwgNDEsIDIyNSwgMjE2LCA0MSwgMjI1LCAyMTUsIDQxLCAyMjUsIAorICAgIDIxNCwgNDEsIDIyNSwgMjEzLCA0MSwgMjI1LCAyMTIsIDQxLCAyMjUsIDIxMSwgNDEsIDIyNSwgMjEwLCA0MSwgMjI1LCAKKyAgICAyMDksIDQxLCAyMjUsIDIwOCwgNDEsIDIyNSwgMjA3LCA0MSwgMjI1LCAyMDUsIDQxLCAyMjUsIDIwNCwgNDEsIDIyNSwgCisgICAgMjAzLCA0MSwgMjI1LCAyMDIsIDQxLCAyMjUsIDIwMSwgNDEsIDIyNSwgMjAwLCA0MSwgMjI1LCAxOTksIDQxLCAyMjUsIAorICAgIDE5OCwgNDEsIDIyNSwgMTk3LCA0MSwgMjI1LCAxOTYsIDQxLCAyMjUsIDE5NCwgNDEsIDIyNSwgMTkzLCA0MSwgMjI1LCAKKyAgICAxOTIsIDQxLCAyMjUsIDE5MSwgNDEsIDIyNSwgMTkwLCA0MSwgMjI1LCAxODksIDQxLCAyMjUsIDE4OCwgNDEsIDIyNSwgCisgICAgMTg3LCA0MSwgMjI1LCAxODYsIDQxLCAyMjUsIDE4NSwgNDEsIDIyNSwgMTgzLCA0MSwgMjI1LCAxODIsIDQxLCAyMjUsIAorICAgIDE4MSwgNDEsIDIyNSwgMTgwLCA0MSwgMjI1LCAxNzksIDQxLCAyMjUsIDE3OCwgNDEsIDIyNSwgMTc3LCA0MSwgMjI1LCAKKyAgICAxNzYsIDQxLCAyMjUsIDE3NSwgNDEsIDIyNSwgMTc0LCA0MSwgMjI1LCAxNzIsIDQxLCAyMjUsIDE3MSwgNDEsIDIyNSwgCisgICAgMTcwLCA0MSwgMjI1LCAxNjksIDQxLCAyMjUsIDE2OCwgNDEsIDIyNSwgMTY3LCA0MSwgMjI1LCAxNjYsIDQxLCAyMjUsIAorICAgIDE2NSwgNDEsIDIyNSwgMTY0LCA0MSwgMjI1LCAxNjMsIDQxLCAyMjUsIDE2MSwgNDEsIDIyNSwgMTYwLCA0MSwgMjI1LCAKKyAgICAxNTksIDQxLCAyMjUsIDE1OCwgNDEsIDIyNSwgMTU3LCA0MSwgMjI1LCAxNTYsIDQxLCAyMjUsIDE1NSwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rX29mZnNldDFbXSA9IHsKLSAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTYsIDE3LCAxOCwgMTksIAotICAgIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIAotICAgIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgMTYsIDUyLCA1MywgNTQsIAotICAgIDE2LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIAotICAgIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDE2LCA4NCwgODUsIDg2LCA4NywgODgsIAotICAgIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIAotICAgIDEwNywgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTYsIDEyMCwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEyMSwgMTIyLCAxMjMsIDEyNCwgCi0gICAgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDE2LCAKLSAgICAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTQ0LCAxNiwgMTQ1LCAxNiwgMTQ2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNiwgMTU0LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2LCAxNjAsIDE2LCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAKLSAgICAxNjcsIDE2OCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTY5LCAxNzAsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTc2LCAKLSAgICAxNiwgMTc3LCAxNzgsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAKKyAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAKKyAgICAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAKKyAgICA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCAKKyAgICA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCAxNywgODcsIDg4LCA4OSwgOTAsIDkxLCAKKyAgICA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEwMywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgCisgICAgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIAorICAgIDEyMywgMTI0LCAxMjUsIDE3LCAxMjYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDEyNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTI4LCAxMjksIAorICAgIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAKKyAgICAxNDQsIDE0NSwgMTcsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNTEsIDE3LCAKKyAgICAxNTIsIDE3LCAxNTMsIDE3LCAxNTQsIDE3LCAxNTUsIDE3LCAxNywgMTcsIDE1NiwgMTcsIDE3LCAxNywgMTcsIDE1NywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgCisgICAgMTY0LCAxNywgMTY1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAKKyAgICAxNzQsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE3LCAxODAsIDE3LCAxODEsIDE4MiwgCisgICAgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTk5LCAxNywgMjAwLCAyMDEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBocmFzZWJvb2tfb2Zmc2V0MltdID0gewogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDMsIDYsIDksIDExLCAxNCwgMTcsIDE5LCAyMSwgMjQsIDI3LCAyOSwgMzEsIAogICAgIDMzLCAzNSwgMzksIDQxLCA0NCwgNDYsIDQ4LCA1MCwgNTIsIDU0LCA1NiwgNTgsIDYwLCA2MiwgNjQsIDY2LCA2OSwgNzIsIAotICAgIDc1LCA3OCwgODIsIDg2LCA5MSwgOTYsIDEwMSwgMTA1LCAxMTAsIDExNCwgMTE4LCAxMjIsIDEyNywgMTMyLCAxMzYsIDE0MCwgCi0gICAgMTQ0LCAxNDgsIDE1MywgMTU4LCAxNjIsIDE2NiwgMTcxLCAxNzUsIDE3OSwgMTg0LCAxODksIDE5NCwgMTk5LCAyMDIsIAotICAgIDIwNiwgMjA5LCAyMTMsIDIxNiwgMjIwLCAyMjQsIDIyOSwgMjM0LCAyMzksIDI0MywgMjQ4LCAyNTIsIDI1NiwgMjYwLCAKLSAgICAyNjUsIDI3MCwgMjc0LCAyNzgsIDI4MiwgMjg2LCAyOTEsIDI5NiwgMzAwLCAzMDQsIDMwOSwgMzEzLCAzMTcsIDMyMiwgCi0gICAgMzI3LCAzMzIsIDMzNywgMzQxLCAzNDQsIDM0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ5LCAzNTMsIDM1OCwgCi0gICAgMzYxLCAzNjQsIDM2NywgMzcwLCAzNzMsIDM3NiwgMzc3LCAzODAsIDM4NiwgMzk0LCAzOTYsIDQwMCwgNDAzLCA0MDUsIAotICAgIDQwOCwgNDExLCA0MTQsIDQxNywgNDIxLCA0MjQsIDQyNywgNDMxLCA0MzMsIDQzNiwgNDQyLCA0NTAsIDQ1NywgNDY0LCAKLSAgICA0NzEsIDQ3NiwgNDgzLCA0ODksIDQ5NiwgNTAyLCA1MDgsIDUxNiwgNTIxLCA1MjksIDUzNiwgNTQyLCA1NDksIDU1NSwgCi0gICAgNTYzLCA1NzAsIDU3OCwgNTg1LCA1OTAsIDU5NywgNjA0LCA2MTAsIDYxNywgNjIzLCA2MjksIDYzMiwgNjM4LCA2NDUsIAotICAgIDY1MSwgNjU4LCA2NjQsIDY3MSwgNjc2LCA2ODIsIDY4OSwgNjk1LCA3MDIsIDcwOCwgNzE0LCA3MjIsIDcyNywgNzM1LCAKLSAgICA3NDIsIDc0OCwgNzU1LCA3NjEsIDc2OSwgNzc2LCA3ODQsIDc5MSwgNzk2LCA4MDMsIDgxMCwgODE2LCA4MjMsIDgyOSwgCi0gICAgODM1LCA4MzgsIDg0NCwgODUxLCA4NTcsIDg2NCwgODcwLCA4NzcsIDg4MiwgODg5LCA4OTYsIDkwMywgOTEwLCA5MTcsIAotICAgIDkyNCwgOTMxLCA5MzgsIDk0NSwgOTUzLCA5NjEsIDk2OSwgOTc3LCA5ODUsIDk5MywgMTAwMSwgMTAwOSwgMTAxNiwgMTAyMywgCi0gICAgMTAzMCwgMTAzNywgMTA0NCwgMTA1MSwgMTA1OCwgMTA2NSwgMTA3MiwgMTA3OSwgMTA4NiwgMTA5MywgMTEwMSwgMTEwOSwgCi0gICAgMTExNywgMTEyNSwgMTEzMywgMTE0MSwgMTE0OSwgMTE1NywgMTE2NSwgMTE3MywgMTE4MCwgMTE4NywgMTE5NCwgMTIwMSwgCi0gICAgMTIwOSwgMTIxNywgMTIyNSwgMTIzMywgMTI0MSwgMTI0OSwgMTI1NywgMTI2MywgMTI2OCwgMTI3MywgMTI4MSwgMTI4OSwgCi0gICAgMTI5NywgMTMwNSwgMTMxMCwgMTMxNywgMTMyNCwgMTMzMiwgMTM0MCwgMTM0OCwgMTM1NiwgMTM2NiwgMTM3NiwgMTM4MywgCi0gICAgMTM5MCwgMTM5NywgMTQwNCwgMTQxMiwgMTQyMCwgMTQyOCwgMTQzNiwgMTQ0NywgMTQ1MiwgMTQ1NywgMTQ2NCwgMTQ3MSwgCi0gICAgMTQ3OCwgMTQ4NSwgMTQ5MiwgMTQ5OSwgMTUwNCwgMTUwOSwgMTUxNiwgMTUyMywgMTUzMSwgMTUzOSwgMTU0NywgMTU1NSwgCi0gICAgMTU2MiwgMTU2OSwgMTU3NywgMTU4NSwgMTU5MywgMTYwMSwgMTYwOSwgMTYxNywgMTYyNSwgMTYzMywgMTY0MSwgMTY0OSwgCi0gICAgMTY1NiwgMTY2MywgMTY2OSwgMTY3NSwgMTY4MiwgMTY4OSwgMTY5NiwgMTcwMywgMTcxMSwgMTcxOSwgMTcyNiwgMTczMywgCi0gICAgMTc0MCwgMTc0NywgMTc1NSwgMTc2MywgMTc3MSwgMTc3OSwgMTc4NiwgMTc5MywgMTgwMCwgMTgwOCwgMTgxNiwgMTgyNCwgCi0gICAgMTgzMiwgMTgzNywgMTg0MywgMTg0OSwgMTg1NiwgMTg2MywgMTg2OCwgMTg3MywgMTg3OSwgMTg4NiwgMTg5MywgMTkwMCwgCi0gICAgMTkwNywgMTkxNSwgMTkyMywgMTkyOSwgMTkzNCwgMTkzOSwgMTk0NSwgMTk1MiwgMTk1OSwgMTk2NiwgMTk3MSwgMTk3NiwgCi0gICAgMTk4MSwgMTk4OCwgMTk5NSwgMjAwMiwgMjAwOSwgMjAxNiwgMjAyMSwgMjAyOSwgMjAzOSwgMjA0NywgMjA1NCwgMjA2MSwgCi0gICAgMjA2NiwgMjA3MSwgMjA3OCwgMjA4NSwgMjA4OSwgMjA5NCwgMjA5OSwgMjEwNCwgMjExMSwgMjEyMCwgMjEyNywgMjEzNCwgCi0gICAgMjE0MywgMjE1MCwgMjE1NywgMjE2MiwgMjE2OSwgMjE3NiwgMjE4MywgMjE5MCwgMjE5NywgMjIwMiwgMjIwOSwgMjIxNiwgCi0gICAgMjIyNCwgMjIyOSwgMjIzNCwgMjIzOSwgMjI0OSwgMjI1MywgMjI1OSwgMjI2NSwgMjI3MSwgMjI3NywgMjI4NSwgMjI5OCwgCi0gICAgMjMwNiwgMjMxMSwgMjMyMSwgMjMyNiwgMjMzMSwgMjM0MSwgMjM0NiwgMjM1MywgMjM2MCwgMjM2OCwgMjM3NiwgMjM4MywgCi0gICAgMjM5MCwgMjM5NywgMjQwNCwgMjQxNCwgMjQyNCwgMjQzMywgMjQ0MiwgMjQ1MiwgMjQ2MiwgMjQ3MiwgMjQ4MiwgMjQ4NywgCi0gICAgMjQ5NywgMjUwNywgMjUxNywgMjUyNywgMjUzNSwgMjU0MywgMjU1MCwgMjU1NywgMjU2NSwgMjU3MywgMjU4MSwgMjU4OSwgCi0gICAgMjU5NiwgMjYwMywgMjYxMywgMjYyMywgMjYzMSwgMjYzOSwgMjY0NywgMjY1MiwgMjY2MiwgMjY2NywgMjY3NCwgMjY4MSwgCi0gICAgMjY4NiwgMjY5MSwgMjY5OSwgMjcwNywgMjcxNywgMjcyNywgMjczNCwgMjc0MSwgMjc0OSwgMjc1NywgMjc2NSwgMjc3MywgCi0gICAgMjc4MiwgMjc5MSwgMjc5OSwgMjgwNywgMjgxNiwgMjgyNSwgMjgzNCwgMjg0MywgMjg1MywgMjg2MywgMjg3MSwgMjg3OSwgCi0gICAgMjg4OCwgMjg5NywgMjkwNiwgMjkxNSwgMjkyNSwgMjkzNSwgMjk0MywgMjk1MSwgMjk2MCwgMjk2OSwgMjk3OCwgMjk4NywgCi0gICAgMjk5NiwgMzAwNSwgMzAxMCwgMzAxNSwgMzAyMywgMzAzMSwgMzA0MSwgMzA0OSwgMzA1NCwgMzA1OSwgMzA2NiwgMzA3MywgCi0gICAgMzA4MCwgMzA4NywgMzA5NCwgMzEwMSwgMzExMSwgMzEyMSwgMzEzMSwgMzE0MSwgMzE0OCwgMzE1NSwgMzE2NSwgMzE3NSwgCi0gICAgMzE4MywgMzE5MSwgMzE5OSwgMzIwNywgMzIxNSwgMzIyMiwgMzIyOSwgMzIzNiwgMzI0MiwgMzI0OSwgMzI1NiwgMzI2MywgCi0gICAgMzI3MiwgMzI4MiwgMzI5MiwgMzI5OSwgMzMwNiwgMzMxMiwgMzMxNywgMzMyMiwgMzMyOCwgMzMzNCwgMzM0MSwgMzM0OCwgCi0gICAgMzM1OSwgMzM2OSwgMzM3NiwgMzM4MywgMzM5MCwgMzM5NywgMzQwMiwgMzQwNywgMzQxMywgMzQxOSwgMzQyNSwgMzQzMywgCi0gICAgMzQ0MSwgMzQ0OCwgMzQ1MywgMzQ1OCwgMzQ2NSwgMzQ3MSwgMzQ3OCwgMzQ4NywgMzQ5NiwgMzUwNSwgMzUxMiwgMzUxNywgCi0gICAgMzUyMiwgMzUyNywgMzUzNCwgMzUzOSwgMzU0NiwgMzU1MywgMzU2MCwgMzU2NSwgMzU3MCwgMzU3OSwgMzU4NywgMzU5NiwgCi0gICAgMzYwMSwgMzYwNiwgMzYxNiwgMzYyMywgMzYzMSwgMzY0MCwgMzY0NSwgMzY1MSwgMzY1NywgMzY2NCwgMzY2OSwgMzY3NCwgCi0gICAgMzY4NCwgMzY5MiwgMzcwMSwgMzcwOSwgMzcxNywgMzcyNiwgMzczMSwgMzczOCwgMzc0NSwgMzc1MCwgMzc2MSwgMzc2OSwgCi0gICAgMzc3NywgMzc4MywgMzc5MiwgMzc5NywgMzgwMiwgMzgwOSwgMzgxNCwgMzgyMCwgMzgyNiwgMzgzMiwgMzg0MSwgMzg0OSwgCi0gICAgMzg1NCwgMzg2MiwgMzg2OCwgMzg3NiwgMzg4NCwgMzg5MCwgMzg5NiwgMzkwMiwgMzkxMCwgMzkxOCwgMzkyMywgMzkzMSwgCi0gICAgMzkzNywgMzk0MiwgMzk0OSwgMzk1NywgMzk2NiwgMzk3MywgMzk4MCwgMzk5MCwgMzk5NywgNDAwNCwgNDAxNCwgNDAyMSwgCi0gICAgNDAyOCwgNDAzNSwgNDA0MSwgNDA0NywgNDA1NiwgNDA2OCwgNDA3MiwgNDA3OSwgNDA4NCwgNDA4OCwgNDA5MywgNDEwMSwgCi0gICAgNDEwOCwgNDExMywgNDExOCwgNDEyMiwgNDEyNywgNDEzMiwgNDEzNiwgNDE0MSwgNDE0NywgNDE1MywgNDE1OSwgNDE2NiwgCi0gICAgNDE3MSwgNDE3NiwgNDE4MSwgNDE4NiwgNDE5MiwgNDE5NCwgNDE5OSwgNDIwMywgNDIwOSwgNDIxNSwgNDIyMSwgNDIyNiwgCi0gICAgNDIzMywgNDI0MCwgNDI0NiwgNDI1MywgNDI2MSwgNDI2OSwgNDI3NCwgNDI3OSwgNDI4MywgNDI4OCwgNDI5MCwgNDI5MiwgCi0gICAgNDI5NSwgNDI5NywgNDI5OSwgNDMwNCwgNDMwOSwgNDMxNSwgNDMyMCwgNDMyNCwgNDMyOCwgNDMzMywgNDM0MSwgNDM0NywgCi0gICAgNDM1MiwgNDM1OCwgNDM2MywgNDM2OSwgNDM3NywgNDM4NSwgNDM4OSwgNDM5MywgNDM5OCwgNDQwNCwgNDQxMCwgNDQxNiwgCi0gICAgNDQyMiwgNDQyNywgNDQzNSwgNDQ0NCwgNDQ1MywgNDQ1NywgNDQ2MywgNDQ3MCwgNDQ3NywgNDQ4NCwgNDQ5MSwgNDQ5NSwgCi0gICAgNDUwMSwgNDUwNiwgNDUxMSwgNDUxNiwgNDUyMSwgNDUyMywgNDUyNiwgNDUyOSwgNDUzMiwgNDUzNSwgNDUzNywgNDU0MSwgCi0gICAgNDU0NSwgNDU1MSwgNDU1NCwgNDU1OSwgNDU2NSwgNDU3MSwgNDU3NCwgNDU3OSwgNDU4NCwgNDU4OCwgNDU5MywgNDU5OSwgCi0gICAgNDYwNSwgNDYxMSwgNDYxNiwgNDYyMSwgNDYyNiwgNDYyOSwgNDYzNSwgNDY0MCwgNDY0NSwgNDY0OSwgNDY1NCwgNDY2MCwgCi0gICAgNDY2NiwgNDY2OSwgNDY3MywgNDY3NywgNDY4MSwgNDY4NCwgNDY4NywgNDY5MiwgNDY5NiwgNDcwMywgNDcwNywgNDcxMywgCi0gICAgNDcxNywgNDcyMywgNDcyNywgNDczMSwgNDczNSwgNDc0MCwgNDc0NSwgNDc1MSwgNDc1NiwgNDc2MywgNDc2OSwgNDc3NSwgCi0gICAgNDc4MSwgNDc4NCwgNDc4OCwgNDc5MiwgNDc5NSwgNDc5OSwgNDgwNCwgNDgwOSwgNDgxMywgNDgxNywgNDgyMywgNDgyNywgCi0gICAgNDgzMSwgNDgzNiwgNDg0MiwgNDg0NywgNDg1MiwgNDg1NiwgNDg2MiwgNDg2NywgNDg3MiwgNDg3NywgNDg4MiwgNDg4OCwgCi0gICAgNDg5MSwgNDg5NSwgNDkwMCwgNDkwNSwgNDkxNCwgNDkyMCwgNDkyNSwgNDkyOSwgNDkzNCwgNDkzOCwgNDk0MywgNDk0NywgCi0gICAgNDk1MSwgNDk1NiwgNDk1OSwgNDk2NSwgNDk3MCwgNDk3NSwgNDk4MCwgNDk4NSwgNDk5MCwgNDk5NSwgNTAwMSwgNTAwNywgCi0gICAgNTAxMiwgNTAxNywgNTAyMiwgNTAyOCwgNTAzMywgNTAzOSwgNTA0NCwgNTA0OSwgNTA1NiwgNTA2MywgNTA2NiwgNTA3MCwgCi0gICAgNTA3NywgMCwgMCwgNTA4NCwgNTA4NywgNTA5NSwgNTEwNCwgNTExNCwgMCwgMCwgMCwgMCwgMCwgNTExOCwgNTEyMSwgCi0gICAgNTEyNiwgNTEzNCwgNTEzOSwgNTE0NywgNTE1NSwgMCwgNTE2MywgMCwgNTE3MSwgNTE3OSwgNTE4NywgNTE5OCwgNTIwMywgCi0gICAgNTIwOCwgNTIxMywgNTIxOCwgNTIyMywgNTIyOCwgNTIzMywgNTIzOCwgNTI0MywgNTI0OCwgNTI1MywgNTI1OCwgNTI2MywgCi0gICAgNTI2OCwgNTI3MywgNTI3OCwgMCwgNTI4MywgNTI4OCwgNTI5MywgNTI5OCwgNTMwMywgNTMwOCwgNTMxMywgNTMxOCwgCi0gICAgNTMyNiwgNTMzNCwgNTM0MiwgNTM1MCwgNTM1OCwgNTM2NiwgNTM3NywgNTM4MiwgNTM4NywgNTM5MiwgNTM5NywgNTQwMiwgCi0gICAgNTQwNywgNTQxMiwgNTQxNywgNTQyMiwgNTQyNywgNTQzMiwgNTQzNywgNTQ0MiwgNTQ0NywgNTQ1MiwgNTQ1NywgNTQ2MiwgCi0gICAgNTQ2OCwgNTQ3MywgNTQ3OCwgNTQ4MywgNTQ4OCwgNTQ5MywgNTQ5OCwgNTUwMywgNTUxMSwgNTUxOSwgNTUyNywgNTUzNSwgCi0gICAgNTU0MywgNTU0OCwgNTU1MiwgNTU1NiwgNTU2MywgNTU3MywgNTU4MywgNTU4NywgNTU5MSwgNTU5NSwgNTYwMSwgNTYwOCwgCi0gICAgNTYxMiwgNTYxNywgNTYyMSwgNTYyNiwgNTYzMCwgNTYzNSwgNTYzOSwgNTY0NCwgNTY0OSwgNTY1NCwgNTY1OSwgNTY2NCwgCi0gICAgNTY2OSwgNTY3NCwgNTY3OSwgNTY4NCwgNTY4OSwgNTY5NCwgNTY5OSwgNTcwNCwgNTcwOSwgNTcxNCwgNTcxOCwgNTcyMiwgCi0gICAgNTcyOCwgNTczMiwgNTczNywgNTc0MywgNTc1MCwgNTc1NSwgNTc2MCwgNTc2NywgNTc3MiwgNTc3NywgNTc4MywgNTc5MSwgCi0gICAgNTgwMCwgNTgxMCwgNTgxOCwgNTgyMywgNTgyOCwgNTgzMywgNTg0MCwgNTg0NSwgNTg1MSwgNTg1NiwgNTg2MSwgNTg2NiwgCi0gICAgNTg3MSwgNTg3NiwgNTg4MSwgNTg4OSwgNTg5NSwgNTkwMCwgNTkwNCwgNTkwOSwgNTkxNCwgNTkxOSwgNTkyNCwgNTkyOSwgCi0gICAgNTkzNCwgNTkzOSwgNTk0MywgNTk0OSwgNTk1MywgNTk1OCwgNTk2MywgNTk2OCwgNTk3MiwgNTk3NywgNTk4MiwgNTk4NywgCi0gICAgNTk5MiwgNTk5NiwgNjAwMSwgNjAwNSwgNjAxMCwgNjAxNSwgNjAyMCwgNjAyNSwgNjAzMSwgNjAzNiwgNjA0MiwgNjA0NiwgCi0gICAgNjA1MSwgNjA1NSwgNjA1OSwgNjA2NCwgNjA2OSwgNjA3NCwgNjA3OSwgNjA4NCwgNjA4OSwgNjA5NCwgNjA5OCwgNjEwNCwgCi0gICAgNjEwOCwgNjExMywgNjExOCwgNjEyMywgNjEyNywgNjEzMiwgNjEzNywgNjE0MiwgNjE0NywgNjE1MSwgNjE1NiwgNjE2MCwgCi0gICAgNjE2NSwgNjE3MCwgNjE3NSwgNjE4MCwgNjE4NiwgNjE5MSwgNjE5NywgNjIwMSwgNjIwNiwgNjIxMCwgNjIxOCwgNjIyMywgCi0gICAgNjIyOCwgNjIzMywgNjI0MCwgNjI0NSwgNjI1MSwgNjI1NiwgNjI2MSwgNjI2NiwgNjI3MSwgNjI3NiwgNjI4MSwgNjI4OSwgCi0gICAgNjI5NSwgNjMwMCwgNjMwNSwgNjMxMCwgNjMxNSwgNjMyMCwgNjMyNiwgNjMzMiwgNjMzOSwgNjM0NiwgNjM1NSwgNjM2NCwgCi0gICAgNjM3MSwgNjM3OCwgNjM4NywgNjM5NiwgNjQwMSwgNjQwNiwgNjQxMSwgNjQxNiwgNjQyMSwgNjQyNiwgNjQzMSwgNjQzNiwgCi0gICAgNjQ0NywgNjQ1OCwgNjQ2MywgNjQ2OCwgNjQ3NSwgNjQ4MiwgNjQ5MCwgNjQ5OCwgNjUwMywgNjUwOCwgNjUxMywgNjUxOCwgCi0gICAgNjUyMiwgNjUyNiwgNjUzMCwgNjUzNSwgNjU0MCwgNjU0NCwgNjU1MSwgNjU1NiwgNjU2NiwgNjU3NiwgNjU4MiwgNjU4OCwgCi0gICAgNjU5NiwgNjYwNCwgNjYxMiwgNjYyMCwgNjYyNywgNjYzNCwgNjY0MywgNjY1MiwgNjY2MCwgNjY2OCwgNjY3NiwgNjY4NCwgCi0gICAgNjY5MSwgNjY5OCwgNjcwNSwgNjcxMiwgNjcxOCwgNjcyNCwgNjczMCwgNjczNiwgNjc0NCwgNjc1MiwgNjc1OSwgNjc2NiwgCi0gICAgNjc3NSwgNjc4NCwgNjc5MCwgNjc5NiwgNjgwNCwgNjgxMiwgNjgyMCwgNjgyOCwgNjgzNCwgNjg0MCwgNjg0OCwgNjg1NiwgCi0gICAgNjg2NCwgNjg3MiwgNjg3OSwgNjg4NiwgNjg5NCwgNjkwMiwgNjkxMCwgNjkxOCwgNjkyMywgNjkyOCwgNjkzNSwgNjk0MiwgCi0gICAgNjk1MiwgNjk2MiwgNjk2NiwgNjk3NCwgNjk4MiwgNjk4OCwgNjk5NCwgNzAwMiwgNzAxMCwgNzAxNywgNzAyNCwgNzAzMiwgCi0gICAgNzA0MCwgNzA0NywgNzA1NCwgNzA2MiwgNzA3MCwgNzA3NSwgNzA4MiwgNzA4OSwgNzA5NSwgNzEwMSwgNzEwNywgNzExMywgCi0gICAgNzEyMSwgNzEyOSwgNzEzNCwgNzEzOSwgNzE0NiwgNzE1MywgNzE2MCwgNzE2NywgNzE3NCwgNzE4MSwgNzE4OCwgNzE5NSwgCi0gICAgNzIwMywgNzIxMSwgNzIxOCwgNzIyNSwgNzIzMSwgNzIzNywgNzI0MywgNzI0OSwgNzI1NywgNzI2NSwgNzI3MSwgNzI3NywgCi0gICAgNzI4NCwgNzI5MSwgNzI5NywgNzMwMywgNzMxMCwgNzMxNywgNzMyNCwgNzMzMSwgNzMzOSwgNzM0NywgNzM1NCwgNzM2MSwgCi0gICAgNzM3MCwgNzM3OSwgNzM4NiwgNzM5MywgNzQwMCwgNzQwNywgNzQxNCwgNzQyMSwgNzQyOCwgNzQzNSwgNzQ0MiwgNzQ0OSwgCi0gICAgNzQ1NiwgNzQ2MywgNzQ3MCwgNzQ3NywgNzQ4NCwgNzQ5MSwgNzQ5OCwgNzUwNSwgNzUxMiwgNzUxOSwgNzUyNSwgNzUzMSwgCi0gICAgNzUzOCwgNzU0NSwgNzU1MCwgNzU1NSwgNzU2MCwgNzU2NSwgNzU3MCwgNzU3NSwgNzU4MCwgNzU4NSwgNzU5MCwgNzU5NSwgCi0gICAgNzYwMSwgNzYwNywgNzYxNiwgNzYyNSwgNzYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzY0MywgNzY0OCwgNzY1MywgNzY1OCwgNzY2MywgNzY2OCwgNzY3MywgNzY3OCwgNzY4MywgNzY4NywgNzY5MiwgNzY5NywgCi0gICAgNzcwMiwgNzcwNywgNzcxMiwgNzcxNywgNzcyMiwgNzcyNywgNzczMiwgNzczNywgNzc0MiwgNzc0NywgNzc1MiwgNzc1NywgCi0gICAgNzc2MiwgNzc2NywgNzc3MiwgNzc3NywgNzc4MSwgNzc4NiwgNzc5MSwgNzc5NiwgNzgwMSwgNzgwNiwgNzgxMSwgNzgxNiwgCi0gICAgNzgyMSwgNzgyNiwgMCwgMCwgNzgzMSwgNzgzOCwgNzg0MSwgNzg0NSwgNzg0OSwgNzg1MiwgNzg1NiwgMCwgNzg2MCwgCi0gICAgNzg2NSwgNzg3MCwgNzg3NSwgNzg4MCwgNzg4NSwgNzg5MCwgNzg5NSwgNzkwMCwgNzkwNCwgNzkwOSwgNzkxNCwgNzkxOSwgCi0gICAgNzkyNCwgNzkyOSwgNzkzNCwgNzkzOSwgNzk0NCwgNzk0OSwgNzk1NCwgNzk1OSwgNzk2NCwgNzk2OSwgNzk3NCwgNzk3OSwgCi0gICAgNzk4NCwgNzk4OSwgNzk5NCwgNzk5OCwgODAwMywgODAwOCwgODAxMywgODAxOCwgODAyMywgODAyOCwgODAzMywgODAzOCwgCi0gICAgODA0MywgODA0OCwgMCwgODA1NSwgODA2MCwgMCwgMCwgMCwgMCwgMCwgMCwgODA2MywgODA2OCwgODA3MywgODA3OCwgCi0gICAgODA4NSwgODA5MiwgODA5NywgODEwMiwgODEwNywgODExMiwgODExNywgODEyMiwgODEyNywgODEzNCwgODEzOSwgODE0NiwgCi0gICAgODE1MywgODE1OCwgODE2NSwgODE3MCwgODE3NSwgODE4MCwgODE4NywgODE5MiwgODE5NywgODIwNCwgODIxMywgODIxOCwgCi0gICAgODIyMywgODIyOCwgODIzMywgODIzOSwgODI0NCwgODI1MSwgODI1OCwgODI2NSwgODI3MCwgODI3NSwgODI4MCwgODI4NSwgCi0gICAgODI5MCwgODI5NSwgODMwNSwgODMxMCwgODMxOCwgODMyMywgODMyOCwgODMzMywgODMzOCwgODM0NSwgODM1MiwgODM1OSwgCi0gICAgODM2NSwgODM3MCwgODM3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODM4NCwgODM4OCwgODM5MiwgODM5NiwgODQwMCwgCi0gICAgODQwNCwgODQwOCwgODQxMiwgODQxNiwgODQyMCwgODQyNCwgODQyOSwgODQzMywgODQzNywgODQ0MiwgODQ0NiwgODQ1MSwgCi0gICAgODQ1NSwgODQ1OSwgODQ2MywgODQ2OCwgODQ3MiwgODQ3NywgODQ4MSwgODQ4NSwgODQ4OSwgODQ5MywgMCwgMCwgMCwgMCwgCi0gICAgMCwgODQ5NywgODUwNCwgODUxMiwgODUxOSwgODUyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODUyOSwgCi0gICAgODUzMiwgODUzNiwgODU0MSwgMCwgMCwgODU0NSwgODU1MSwgODU1NywgODU2MCwgODU2NywgODU3NiwgODU3OSwgODU4MiwgCi0gICAgODU4NywgODU5MywgODU5NywgODYwNSwgODYxMSwgODYxNywgODYyNSwgODYyOSwgODYzNCwgODY0NCwgODY0OSwgODY1MywgCi0gICAgODY1NywgODY2MSwgMCwgMCwgODY2NCwgODY3MSwgMCwgODY3NSwgODY3OSwgODY4NiwgODY5MiwgODY5OSwgODcwNSwgCi0gICAgODcxMSwgODcxNSwgODcxOSwgODcyNSwgODcyOSwgODczMywgODczNywgODc0MSwgODc0NSwgODc0OSwgODc1MywgODc1NywgCi0gICAgODc2MSwgODc2NSwgODc2OSwgODc3MywgODc3NywgODc4MSwgODc4NSwgODc4OSwgODc5MywgODgwMSwgODgwOSwgODgxOCwgCi0gICAgODgyNywgODgzNiwgODgzOSwgODg0MywgODg0NywgODg1MSwgODg1NSwgODg1OSwgODg2MywgODg2NywgODg3MSwgODg3NiwgCi0gICAgODg4MCwgODg4MywgODg4NiwgODg4OSwgODg5MiwgODg5NSwgODg5OCwgODkwMSwgODkwNCwgODkwOCwgODkxMSwgODkxNCwgCi0gICAgODkxOSwgODkyNCwgODkzMCwgODkzMywgODk0MCwgODk0OSwgODk1NCwgODk1OCwgMCwgODk2NSwgODk3MCwgODk3NCwgCi0gICAgODk3OCwgODk4MiwgODk4NiwgODk5MCwgODk5NCwgODk5OCwgOTAwMiwgOTAwNiwgOTAxMCwgOTAxNSwgOTAyMCwgOTAyNywgCi0gICAgOTAzMywgOTAzOSwgOTA0NSwgOTA1MCwgOTA1OCwgOTA2NiwgOTA3MSwgOTA3NywgOTA4MywgOTA4OSwgOTA5NSwgOTA5OSwgCi0gICAgOTEwMywgOTEwNywgOTExNCwgOTEyNCwgOTEyOCwgOTEzMiwgOTEzNiwgOTE0MiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2NSwgCi0gICAgOTE2OSwgOTE3MywgOTE3NywgOTE4NCwgOTE5MSwgOTIwMywgOTIwNywgOTIxMSwgOTIxNSwgOTIyNSwgOTIzNCwgOTIzOCwgCi0gICAgOTI0NSwgOTI1MiwgOTI1OSwgOTI2OCwgOTI3OSwgOTI4NywgOTI5MSwgOTMwMCwgOTMxMSwgOTMxOSwgOTMzMiwgOTM0MCwgCi0gICAgOTM0OCwgOTM1NiwgOTM2NCwgOTM3MCwgOTM3OSwgOTM4NiwgOTM5MCwgOTM5OCwgOTQwMiwgOTQwOSwgOTQxNywgOTQyMSwgCi0gICAgOTQyNywgOTQzNCwgOTQ0MSwgOTQ0NSwgOTQ1MywgOTQ1NywgOTQ2NCwgOTQ2OCwgOTQ3NiwgOTQ4MCwgOTQ4OCwgOTQ5NCwgCi0gICAgOTUwMCwgOTUwNywgOTUxNCwgOTUyMSwgOTUyNywgOTUzMSwgOTUzOCwgOTU0NiwgOTU1MiwgOTU1OSwgOTU2NiwgOTU3MiwgCi0gICAgOTU4MSwgOTU4OSwgOTU5NiwgOTYwMiwgOTYwNiwgOTYwOSwgOTYxMywgOTYxOSwgOTYyNywgOTYzMSwgOTYzNywgOTY0MywgCi0gICAgOTY0OSwgOTY1NiwgOTY1OSwgOTY2NiwgOTY3MSwgOTY3OSwgOTY4NCwgOTY4OCwgOTcwMCwgOTcxMiwgOTcxOCwgOTcyNCwgCi0gICAgOTcyOSwgOTczNSwgOTc0MCwgOTc0NiwgOTc1NiwgOTc2MywgOTc3MiwgOTc4MiwgOTc4OCwgOTc5MywgOTc5OCwgOTgwMiwgCi0gICAgOTgwNiwgOTgxMSwgOTgxNiwgOTgyMiwgOTgzMCwgOTgzOCwgOTg0OSwgOTg1NCwgOTg2MiwgOTg3MCwgOTg3NywgOTg4MywgCi0gICAgOTg4OSwgOTg5NSwgOTkwMSwgOTkwNywgOTkxMywgOTkxOSwgOTkyNSwgOTkzMSwgOTkzOCwgOTk0NSwgOTk1MiwgOTk1OCwgCi0gICAgOTk2NiwgOTk3NCwgOTk4MCwgOTk4NywgOTk5NCwgOTk5OSwgMTAwMDQsIDEwMDA4LCAxMDAxNSwgMTAwMjIsIDEwMDMxLCAKLSAgICAxMDA0MCwgMTAwNDMsIDEwMDQ4LCAxMDA1MywgMCwgMTAwNTgsIDEwMDYyLCAxMDA2NiwgMTAwNzIsIDEwMDc2LCAxMDA4MCwgCi0gICAgMTAwODYsIDEwMDkwLCAxMDA5OCwgMTAxMDIsIDEwMTA2LCAxMDExMCwgMTAxMTQsIDEwMTE4LCAxMDEyNCwgMTAxMjgsIAotICAgIDEwMTM0LCAxMDEzOCwgMTAxNDIsIDEwMTQ2LCAxMDE1MCwgMTAxNTQsIDEwMTU5LCAxMDE2MiwgMTAxNjYsIDEwMTcxLCAKLSAgICAxMDE3NSwgMTAxNzksIDEwMTgzLCAxMDE4NywgMTAxOTEsIDEwMTk3LCAxMDIwMywgMTAyMDksIDEwMjEzLCAxMDIxNywgCi0gICAgMTAyMjIsIDEwMjI2LCAxMDIzMCwgMTAyMzUsIDEwMjM5LCAxMDI0MywgMTAyNTAsIDEwMjU3LCAxMDI2MSwgMTAyNjUsIAotICAgIDEwMjcwLCAxMDI3NCwgMTAyNzgsIDEwMjgxLCAxMDI4NiwgMTAyODksIDEwMjkyLCAxMDI5NywgMTAzMDIsIDEwMzA2LCAKLSAgICAxMDMxMCwgMTAzMTYsIDEwMzIyLCAxMDMyNSwgMCwgMCwgMTAzMjgsIDEwMzM0LCAxMDM0MCwgMTAzNDYsIDEwMzU2LCAKLSAgICAxMDM2OCwgMTAzODAsIDEwMzk3LCAxMDQwOSwgMTA0MjAsIDEwNDI3LCAxMDQzNCwgMTA0NDUsIDEwNDYwLCAxMDQ3MSwgCi0gICAgMTA0NzcsIDEwNDg2LCAxMDQ5NCwgMTA1MDYsIDEwNTE2LCAxMDUyNCwgMTA1MzYsIDEwNTQzLCAxMDU1MSwgMTA1NjMsIAotICAgIDEwNTY5LCAxMDU3NSwgMTA1ODMsIDEwNTkxLCAxMDU5OCwgMTA2MDMsIDEwNjEzLCAxMDYyMCwgMTA2MzAsIDEwNjQwLCAKLSAgICAxMDY1MywgMTA2NjcsIDEwNjgxLCAxMDY5MSwgMTA3MDIsIDEwNzEzLCAxMDcyNiwgMTA3MzksIDEwNzUzLCAxMDc2NSwgCi0gICAgMTA3NzcsIDEwNzkwLCAxMDgwMywgMTA4MTUsIDEwODI4LCAxMDgzNiwgMTA4NDQsIDEwODQ5LCAxMDg1NCwgMTA4NTksIAotICAgIDEwODY0LCAxMDg2OSwgMTA4NzQsIDEwODc5LCAxMDg4NCwgMTA4ODksIDEwODk0LCAxMDg5OSwgMTA5MDQsIDEwOTA5LCAKLSAgICAxMDkxNCwgMTA5MTksIDEwOTI0LCAxMDkyOSwgMTA5MzQsIDEwOTM5LCAxMDk0NCwgMTA5NDksIDEwOTU0LCAxMDk1OSwgCi0gICAgMTA5NjQsIDEwOTY5LCAxMDk3NCwgMTA5NzksIDEwOTg0LCAxMDk4OSwgMTA5OTQsIDEwOTk5LCAxMTAwNCwgMTEwMDgsIAotICAgIDExMDEzLCAxMTAxOCwgMTEwMjMsIDExMDI4LCAxMTAzMywgMTEwMzcsIDExMDQxLCAxMTA0NSwgMTEwNDksIDExMDUzLCAKLSAgICAxMTA1NywgMTEwNjEsIDExMDY1LCAxMTA2OSwgMTEwNzMsIDExMDc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMTA4MiwgMTEwODYsIDExMDg5LCAxMTA5MiwgMTEwOTUsIDExMDk4LCAxMTEwMSwgMTExMDQsIAotICAgIDExMTA3LCAxMTExMCwgMTExMTMsIDExMTE2LCAxMTEyMCwgMTExMjMsIDExMTI2LCAxMTEyOSwgMTExMzMsIDExMTM2LCAKLSAgICAxMTE0MCwgMTExNDMsIDExMTQ3LCAxMTE1MCwgMTExNTQsIDExMTU4LCAxMTE2MiwgMTExNjYsIDExMTY5LCAxMTE3MywgCi0gICAgMTExNzcsIDExMTgxLCAxMTE4NSwgMTExODgsIDExMTkyLCAxMTE5OCwgMTEyMDEsIDExMjA1LCAxMTIwOSwgMTEyMTIsIAotICAgIDExMjE2LCAxMTIxOSwgMTEyMjUsIDExMjMxLCAxMTIzNywgMTEyNDIsIDExMjQ5LCAxMTI1NiwgMTEyNjQsIDExMjcxLCAKLSAgICAxMTI3NywgMTEyODMsIDExMjkwLCAxMTI5NSwgMTEzMDAsIDExMzA1LCAxMTMxMCwgMTEzMTYsIDExMzIwLCAxMTMyMywgCi0gICAgMTEzMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc1LCA3OCwgODIsIDg2LCA5MSwgOTYsIDEwMSwgMTA1LCAxMTAsIDExNSwgMTIwLCAxMjQsIDEyOSwgMTM0LCAxMzgsIDE0MiwgCisgICAgMTQ2LCAxNTAsIDE1NSwgMTYwLCAxNjQsIDE2OCwgMTczLCAxNzcsIDE4MiwgMTg3LCAxOTIsIDE5NywgMjAyLCAyMDUsIAorICAgIDIwOSwgMjEyLCAyMTYsIDIxOSwgMjIzLCAyMjcsIDIzMiwgMjM3LCAyNDIsIDI0NiwgMjUxLCAyNTYsIDI2MSwgMjY1LCAKKyAgICAyNzAsIDI3NSwgMjc5LCAyODMsIDI4NywgMjkxLCAyOTYsIDMwMSwgMzA1LCAzMDksIDMxNCwgMzE4LCAzMjMsIDMyOCwgCisgICAgMzMzLCAzMzgsIDM0MywgMzQ3LCAzNTAsIDM1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU2LCAzNjAsIDM2NSwgCisgICAgMzY4LCAzNzEsIDM3NCwgMzc3LCAzODAsIDM4MywgMzg1LCAzODgsIDM5NCwgNDAyLCA0MDQsIDQwOCwgNDExLCA0MTMsIAorICAgIDQxNiwgNDE5LCA0MjIsIDQyNSwgNDI5LCA0MzIsIDQzNSwgNDM5LCA0NDEsIDQ0NCwgNDUwLCA0NTgsIDQ2NSwgNDcyLCAKKyAgICA0NzksIDQ4NCwgNDkxLCA0OTcsIDUwNCwgNTExLCA1MTgsIDUyNiwgNTMxLCA1MzksIDU0NiwgNTUyLCA1NTksIDU2NiwgCisgICAgNTc0LCA1ODEsIDU4OSwgNTk3LCA2MDIsIDYxMCwgNjE3LCA2MjMsIDYzMCwgNjM3LCA2NDQsIDY0NywgNjUzLCA2NjAsIAorICAgIDY2NiwgNjczLCA2ODAsIDY4NywgNjkyLCA2OTgsIDcwNSwgNzExLCA3MTgsIDcyNSwgNzMyLCA3NDAsIDc0NSwgNzUzLCAKKyAgICA3NjAsIDc2NiwgNzczLCA3ODAsIDc4OCwgNzk1LCA4MDMsIDgxMSwgODE2LCA4MjQsIDgzMSwgODM3LCA4NDQsIDg1MSwgCisgICAgODU4LCA4NjEsIDg2NywgODc0LCA4ODAsIDg4NywgODk0LCA5MDEsIDkwNiwgOTE0LCA5MjEsIDkyOCwgOTM1LCA5NDIsIAorICAgIDk0OSwgOTU2LCA5NjMsIDk3MCwgOTc4LCA5ODYsIDk5NCwgMTAwMiwgMTAxMCwgMTAxOCwgMTAyNiwgMTAzNCwgMTA0MSwgCisgICAgMTA0OCwgMTA1NSwgMTA2MiwgMTA2OSwgMTA3NiwgMTA4MywgMTA5MCwgMTA5NywgMTEwNCwgMTExMSwgMTExOCwgMTEyNiwgCisgICAgMTEzNCwgMTE0MiwgMTE1MCwgMTE1OCwgMTE2NiwgMTE3NCwgMTE4MiwgMTE5MCwgMTE5OCwgMTIwNSwgMTIxMiwgMTIyMCwgCisgICAgMTIyOCwgMTIzNiwgMTI0NCwgMTI1MiwgMTI2MCwgMTI2OCwgMTI3NiwgMTI4NCwgMTI5MCwgMTI5NSwgMTMwMCwgMTMwOCwgCisgICAgMTMxNiwgMTMyNCwgMTMzMiwgMTMzNywgMTM0NCwgMTM1MSwgMTM1OSwgMTM2NywgMTM3NSwgMTM4MywgMTM5MywgMTQwMywgCisgICAgMTQxMCwgMTQxNywgMTQyNCwgMTQzMSwgMTQzOSwgMTQ0NywgMTQ1NSwgMTQ2MywgMTQ3NCwgMTQ3OSwgMTQ4NCwgMTQ5MSwgCisgICAgMTQ5OCwgMTUwNSwgMTUxMiwgMTUxOSwgMTUyNiwgMTUzMSwgMTUzNiwgMTU0MywgMTU1MCwgMTU1OCwgMTU2NiwgMTU3NCwgCisgICAgMTU4MiwgMTU4OSwgMTU5NiwgMTYwNCwgMTYxMiwgMTYyMCwgMTYyOCwgMTYzNiwgMTY0NCwgMTY1MiwgMTY2MCwgMTY2OCwgCisgICAgMTY3NiwgMTY4MywgMTY5MCwgMTY5NywgMTcwNCwgMTcxMSwgMTcxOCwgMTcyNSwgMTczMiwgMTc0MCwgMTc0OCwgMTc1NSwgCisgICAgMTc2MiwgMTc2OSwgMTc3NiwgMTc4NCwgMTc5MiwgMTgwMCwgMTgwOCwgMTgxNiwgMTgyMywgMTgzMCwgMTgzOCwgMTg0NiwgCisgICAgMTg1NCwgMTg2MiwgMTg2NywgMTg3MywgMTg3OSwgMTg4NiwgMTg5MywgMTg5OCwgMTkwMywgMTkwOSwgMTkxNiwgMTkyMywgCisgICAgMTkzMCwgMTkzNywgMTk0NSwgMTk1MywgMTk1OSwgMTk2NCwgMTk2OSwgMTk3NSwgMTk4MiwgMTk4OSwgMTk5NiwgMjAwMSwgCisgICAgMjAwNiwgMjAxMSwgMjAxOCwgMjAyNSwgMjAzMiwgMjAzOSwgMjA0NiwgMjA1MSwgMjA1OSwgMjA2OSwgMjA3OCwgMjA4NSwgCisgICAgMjA5MiwgMjA5NywgMjEwMiwgMjEwOSwgMjExNiwgMjEyMCwgMjEyNSwgMjEzMCwgMjEzNSwgMjE0MiwgMjE1MSwgMjE1OCwgCisgICAgMjE2NSwgMjE3NCwgMjE4MSwgMjE4OCwgMjE5MywgMjIwMCwgMjIwNywgMjIxNCwgMjIyMSwgMjIyOCwgMjIzMywgMjI0MCwgCisgICAgMjI0NywgMjI1NSwgMjI2MCwgMjI2NSwgMjI3MCwgMjI4MCwgMjI4NCwgMjI5MCwgMjI5NiwgMjMwMiwgMjMwOCwgMjMxNiwgCisgICAgMjMyOSwgMjMzNywgMjM0MiwgMjM1MiwgMjM1NywgMjM2MiwgMjM3MiwgMjM3NywgMjM4NCwgMjM5MSwgMjM5OSwgMjQwNywgCisgICAgMjQxNCwgMjQyMSwgMjQyOCwgMjQzNSwgMjQ0NSwgMjQ1NSwgMjQ2NCwgMjQ3MywgMjQ4MywgMjQ5MywgMjUwMywgMjUxMywgCisgICAgMjUxOCwgMjUyOCwgMjUzOCwgMjU0OCwgMjU1OCwgMjU2NiwgMjU3NCwgMjU4MSwgMjU4OCwgMjU5NiwgMjYwNCwgMjYxMiwgCisgICAgMjYyMCwgMjYyNywgMjYzNCwgMjY0NCwgMjY1NCwgMjY2MiwgMjY3MCwgMjY3OCwgMjY4MywgMjY5MywgMjY5OCwgMjcwNSwgCisgICAgMjcxMiwgMjcxNywgMjcyMiwgMjczMCwgMjczOCwgMjc0OCwgMjc1OCwgMjc2NSwgMjc3MiwgMjc4MCwgMjc4OCwgMjc5NiwgCisgICAgMjgwNCwgMjgxMywgMjgyMiwgMjgzMCwgMjgzOCwgMjg0NywgMjg1NiwgMjg2NSwgMjg3NCwgMjg4NCwgMjg5NCwgMjkwMiwgCisgICAgMjkxMCwgMjkxOSwgMjkyOCwgMjkzNywgMjk0NiwgMjk1NiwgMjk2NiwgMjk3NCwgMjk4MiwgMjk5MSwgMzAwMCwgMzAwOSwgCisgICAgMzAxOCwgMzAyNywgMzAzNiwgMzA0MSwgMzA0NiwgMzA1NCwgMzA2MiwgMzA3MiwgMzA4MCwgMzA4NSwgMzA5MCwgMzA5NywgCisgICAgMzEwNCwgMzExMSwgMzExOCwgMzEyNSwgMzEzMiwgMzE0MiwgMzE1MiwgMzE2MiwgMzE3MiwgMzE3OSwgMzE4NiwgMzE5NiwgCisgICAgMzIwNiwgMzIxNCwgMzIyMiwgMzIzMCwgMzIzOCwgMzI0NiwgMzI1MywgMzI2MCwgMzI2NywgMzI3MywgMzI4MCwgMzI4NywgCisgICAgMzI5NCwgMzMwMywgMzMxMywgMzMyMywgMzMzMCwgMzMzNywgMzM0MywgMzM0OCwgMzM1NCwgMzM2MCwgMzM2NiwgMzM3MywgCisgICAgMzM4MCwgMzM5MSwgMzQwMSwgMzQwOCwgMzQxNSwgMzQyMiwgMzQyOSwgMzQzNCwgMzQzOSwgMzQ0NSwgMzQ1MSwgMzQ1NywgCisgICAgMzQ2NSwgMzQ3MywgMzQ4MCwgMzQ4NSwgMzQ5MCwgMzQ5NywgMzUwMywgMzUxMCwgMzUxOSwgMzUyOCwgMzUzNywgMzU0NCwgCisgICAgMzU1MCwgMzU1NiwgMzU2MSwgMzU2OCwgMzU3NCwgMzU4MSwgMzU4OCwgMzU5NSwgMzYwMCwgMzYwNSwgMzYxNSwgMzYyMywgCisgICAgMzYzMiwgMzYzNywgMzY0MiwgMzY1MiwgMzY1OSwgMzY2NywgMzY3NiwgMzY4MSwgMzY4NywgMzY5MywgMzcwMCwgMzcwNSwgCisgICAgMzcxMCwgMzcyMCwgMzcyOCwgMzczNywgMzc0NSwgMzc1MywgMzc2MiwgMzc2NywgMzc3NCwgMzc4MSwgMzc4NiwgMzc5NywgCisgICAgMzgwNSwgMzgxMywgMzgxOSwgMzgyOCwgMzgzMywgMzgzOCwgMzg0NSwgMzg1MSwgMzg1NywgMzg2MywgMzg2OSwgMzg3OCwgCisgICAgMzg4NiwgMzg5MSwgMzg5OSwgMzkwNSwgMzkxMywgMzkyMSwgMzkyNywgMzkzMywgMzkzOSwgMzk0NywgMzk1NSwgMzk2MSwgCisgICAgMzk2OSwgMzk3NSwgMzk4MCwgMzk4NywgMzk5NSwgNDAwNCwgNDAxMSwgNDAxOCwgNDAyOCwgNDAzNSwgNDA0MiwgNDA1MiwgCisgICAgNDA1OSwgNDA2NiwgNDA3MywgNDA3OSwgNDA4NSwgNDA5NCwgNDEwNiwgNDExMSwgNDExOCwgNDEyMywgNDEyNywgNDEzMiwgCisgICAgNDE0MCwgNDE0NywgNDE1MiwgNDE1NywgNDE2MSwgNDE2NiwgNDE3MSwgNDE3NSwgNDE4MCwgNDE4NiwgNDE5MiwgNDE5OCwgCisgICAgNDIwNSwgNDIxMCwgNDIxNSwgNDIyMCwgNDIyNSwgNDIzMSwgNDIzMywgNDIzOCwgNDI0MiwgNDI0OCwgNDI1NCwgNDI2MCwgCisgICAgNDI2NSwgNDI3MiwgNDI3OSwgNDI4NSwgNDI5MiwgNDMwMCwgNDMwOCwgNDMxMywgNDMxOCwgNDMyMiwgNDMyNywgNDMyOSwgCisgICAgNDMzMSwgNDMzNCwgNDMzNiwgNDMzOSwgNDM0NCwgNDM0OSwgNDM1NSwgNDM2MCwgNDM2NCwgNDM2OCwgNDM3MywgNDM4MSwgCisgICAgNDM4NywgNDM5MiwgNDM5OCwgNDQwMywgNDQwOSwgNDQxNywgNDQyNSwgNDQyOSwgNDQzMywgNDQzOCwgNDQ0NCwgNDQ1MCwgCisgICAgNDQ1NiwgNDQ2MiwgNDQ2NywgNDQ3NSwgNDQ4NCwgNDQ5MywgNDQ5OCwgNDUwNCwgNDUxMSwgNDUxOCwgNDUyNSwgNDUzMiwgCisgICAgNDUzNiwgNDU0MiwgNDU0NywgNDU1MiwgNDU1NywgNDU2MiwgNDU2NSwgNDU2OCwgNDU3MSwgNDU3NCwgNDU3NywgNDU4MCwgCisgICAgNDU4NCwgNDU4OCwgNDU5NCwgNDU5NywgNDYwMiwgNDYwOCwgNDYxNCwgNDYxNywgNDYyMiwgNDYyNywgNDYzMSwgNDYzNiwgCisgICAgNDY0MiwgNDY0OCwgNDY1NCwgNDY1OSwgNDY2NCwgNDY2OSwgNDY3MiwgNDY3OCwgNDY4MywgNDY4OCwgNDY5MiwgNDY5NywgCisgICAgNDcwMywgNDcwOSwgNDcxMiwgNDcxNiwgNDcyMCwgNDcyNCwgNDcyNywgNDczMCwgNDczNSwgNDczOSwgNDc0NiwgNDc1MCwgCisgICAgNDc1NiwgNDc2MCwgNDc2NiwgNDc3MCwgNDc3NCwgNDc3OCwgNDc4MywgNDc4OCwgNDc5NCwgNDc5OSwgNDgwNiwgNDgxMiwgCisgICAgNDgxOCwgNDgyNCwgNDgyNywgNDgzMSwgNDgzNSwgNDgzOSwgNDg0MywgNDg0OCwgNDg1MywgNDg1NywgNDg2MSwgNDg2NywgCisgICAgNDg3MSwgNDg3NSwgNDg4MCwgNDg4NiwgNDg5MSwgNDg5NiwgNDkwMCwgNDkwNiwgNDkxMSwgNDkxNiwgNDkyMSwgNDkyNiwgCisgICAgNDkzMiwgNDkzNSwgNDkzOSwgNDk0NCwgNDk0OSwgNDk1OCwgNDk2NCwgNDk2OSwgNDk3MywgNDk3OCwgNDk4MiwgNDk4NywgCisgICAgNDk5MSwgNDk5NSwgNTAwMCwgNTAwNCwgNTAxMCwgNTAxNSwgNTAyMCwgNTAyNSwgNTAzMCwgNTAzNSwgNTA0MCwgNTA0NiwgCisgICAgNTA1MiwgNTA1OCwgNTA2MywgNTA2OCwgNTA3NCwgNTA4MCwgNTA4NiwgNTA5MSwgNTA5NiwgNTEwMywgNTExMCwgNTExNCwgCisgICAgNTEyMCwgNTEyNywgMCwgMCwgNTEzNCwgNTEzNywgNTE0NSwgNTE1NCwgNTE2NCwgMCwgMCwgMCwgMCwgMCwgNTE2OCwgCisgICAgNTE3MSwgNTE3NiwgNTE4NCwgNTE4OSwgNTE5NywgNTIwNSwgMCwgNTIxMywgMCwgNTIyMSwgNTIyOSwgNTIzNywgNTI0OCwgCisgICAgNTI1MywgNTI1OCwgNTI2MywgNTI2OCwgNTI3MywgNTI3OCwgNTI4MywgNTI4OCwgNTI5MywgNTI5OCwgNTMwMywgNTMwOCwgCisgICAgNTMxMywgNTMxOCwgNTMyMywgNTMyOCwgMCwgNTMzMywgNTMzOCwgNTM0MywgNTM0OCwgNTM1MywgNTM1OCwgNTM2MywgCisgICAgNTM2OCwgNTM3NiwgNTM4NCwgNTM5MiwgNTQwMCwgNTQwOCwgNTQxNiwgNTQyNywgNTQzMiwgNTQzNywgNTQ0MiwgNTQ0NywgCisgICAgNTQ1MiwgNTQ1NywgNTQ2MiwgNTQ2NywgNTQ3MiwgNTQ3NywgNTQ4MiwgNTQ4NywgNTQ5MiwgNTQ5NywgNTUwMiwgNTUwNywgCisgICAgNTUxMiwgNTUxOCwgNTUyMywgNTUyOCwgNTUzMywgNTUzOCwgNTU0MywgNTU0OCwgNTU1MywgNTU2MSwgNTU2OSwgNTU3NywgCisgICAgNTU4NSwgNTU5MywgNTU5OCwgNTYwMiwgNTYwNiwgNTYxMywgNTYyMywgNTYzMywgNTYzNywgNTY0MSwgNTY0NSwgNTY1MSwgCisgICAgNTY1OCwgNTY2MiwgNTY2NywgNTY3MSwgNTY3NiwgNTY4MCwgNTY4NSwgNTY4OSwgNTY5NCwgNTY5OSwgNTcwNCwgNTcwOSwgCisgICAgNTcxNCwgNTcxOSwgNTcyNCwgNTcyOSwgNTczNCwgNTczOSwgNTc0NCwgNTc0OSwgNTc1NCwgNTc1OSwgNTc2NCwgNTc2OCwgCisgICAgNTc3MiwgNTc3OCwgNTc4MiwgNTc4NywgNTc5MywgNTgwMCwgNTgwNSwgNTgxMCwgNTgxNywgNTgyMiwgNTgyNywgNTgzMywgCisgICAgNTg0MSwgNTg1MCwgNTg2MCwgNTg2OCwgNTg3MywgNTg3OCwgNTg4MywgNTg5MCwgNTg5NSwgNTkwMSwgNTkwNiwgNTkxMSwgCisgICAgNTkxNiwgNTkyMSwgNTkyNiwgNTkzMSwgNTkzOSwgNTk0NSwgNTk1MCwgNTk1NCwgNTk1OSwgNTk2NCwgNTk2OSwgNTk3NCwgCisgICAgNTk3OSwgNTk4NCwgNTk4OSwgNTk5MywgNTk5OSwgNjAwMywgNjAwOCwgNjAxMywgNjAxOCwgNjAyMiwgNjAyNywgNjAzMiwgCisgICAgNjAzNywgNjA0MiwgNjA0NiwgNjA1MSwgNjA1NSwgNjA2MCwgNjA2NSwgNjA3MCwgNjA3NSwgNjA4MSwgNjA4NiwgNjA5MiwgCisgICAgNjA5NiwgNjEwMSwgNjEwNSwgNjEwOSwgNjExNCwgNjExOSwgNjEyNCwgNjEyOSwgNjEzNCwgNjEzOSwgNjE0NCwgNjE0OCwgCisgICAgNjE1NCwgNjE1OCwgNjE2MywgNjE2OCwgNjE3MywgNjE3NywgNjE4MiwgNjE4NywgNjE5MiwgNjE5NywgNjIwMSwgNjIwNiwgCisgICAgNjIxMCwgNjIxNSwgNjIyMCwgNjIyNSwgNjIzMCwgNjIzNiwgNjI0MSwgNjI0NywgNjI1MSwgNjI1NiwgNjI2MCwgNjI2OCwgCisgICAgNjI3MywgNjI3OCwgNjI4MywgNjI5MCwgNjI5NSwgNjMwMSwgNjMwNiwgNjMxMSwgNjMxNiwgNjMyMSwgNjMyNiwgNjMzMSwgCisgICAgNjMzOSwgNjM0NSwgNjM1MCwgNjM1NSwgNjM2MCwgNjM2NSwgNjM3MCwgNjM3NiwgNjM4MiwgNjM4OSwgNjM5NiwgNjQwNSwgCisgICAgNjQxNCwgNjQyMSwgNjQyOCwgNjQzNywgNjQ0NiwgNjQ1MSwgNjQ1NiwgNjQ2MSwgNjQ2NiwgNjQ3MSwgNjQ3NiwgNjQ4MSwgCisgICAgNjQ4NiwgNjQ5NywgNjUwOCwgNjUxMywgNjUxOCwgNjUyNSwgNjUzMiwgNjU0MCwgNjU0OCwgNjU1MywgNjU1OCwgNjU2MywgCisgICAgNjU2OCwgNjU3MiwgNjU3NiwgNjU4MCwgNjU4NSwgNjU5MCwgNjU5NCwgNjYwMSwgNjYwNiwgNjYxNiwgNjYyNiwgNjYzMiwgCisgICAgNjYzOCwgNjY0NiwgNjY1NCwgNjY2MiwgNjY3MCwgNjY3NywgNjY4NCwgNjY5MywgNjcwMiwgNjcxMCwgNjcxOCwgNjcyNiwgCisgICAgNjczNCwgNjc0MSwgNjc0OCwgNjc1NSwgNjc2MiwgNjc2OCwgNjc3NCwgNjc4MCwgNjc4NiwgNjc5NCwgNjgwMiwgNjgwOSwgCisgICAgNjgxNiwgNjgyNSwgNjgzNCwgNjg0MCwgNjg0NiwgNjg1NCwgNjg2MiwgNjg3MCwgNjg3OCwgNjg4NCwgNjg5MCwgNjg5OCwgCisgICAgNjkwNiwgNjkxNCwgNjkyMiwgNjkyOSwgNjkzNiwgNjk0NCwgNjk1MiwgNjk2MCwgNjk2OCwgNjk3MywgNjk3OCwgNjk4NSwgCisgICAgNjk5MiwgNzAwMiwgNzAxMiwgNzAxNiwgNzAyNCwgNzAzMiwgNzAzOCwgNzA0NCwgNzA1MiwgNzA2MCwgNzA2NywgNzA3NCwgCisgICAgNzA4MiwgNzA5MCwgNzA5NywgNzEwNCwgNzExMiwgNzEyMCwgNzEyNSwgNzEzMiwgNzEzOSwgNzE0NiwgNzE1MywgNzE1OSwgCisgICAgNzE2NSwgNzE3MywgNzE4MSwgNzE4NiwgNzE5MSwgNzE5OSwgNzIwNywgNzIxNSwgNzIyMywgNzIzMSwgNzIzOSwgNzI0NiwgCisgICAgNzI1MywgNzI2MSwgNzI2OSwgNzI3NywgNzI4NSwgNzI5MiwgNzI5OSwgNzMwNSwgNzMxMSwgNzMyMCwgNzMyOSwgNzMzNiwgCisgICAgNzM0MywgNzM1MCwgNzM1NywgNzM2NCwgNzM3MSwgNzM3OCwgNzM4NSwgNzM5MywgNzQwMSwgNzQwOSwgNzQxNywgNzQyNSwgCisgICAgNzQzMywgNzQ0MiwgNzQ1MSwgNzQ1OCwgNzQ2NSwgNzQ3MiwgNzQ3OSwgNzQ4NiwgNzQ5MywgNzUwMCwgNzUwNywgNzUxNCwgCisgICAgNzUyMSwgNzUyOCwgNzUzNSwgNzU0MiwgNzU0OSwgNzU1NiwgNzU2MywgNzU3MCwgNzU3NywgNzU4NCwgNzU5MSwgNzU5NywgCisgICAgNzYwMywgNzYxMCwgNzYxNywgNzYyMiwgNzYyNywgNzYzMiwgNzYzNywgNzY0MiwgNzY0NywgNzY1MiwgNzY1NywgNzY2MiwgCisgICAgNzY2NywgNzY3MywgNzY3OSwgNzY4OCwgNzY5NywgNzcwNiwgNzcxNSwgNzcyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzczMSwgNzczNiwgNzc0MSwgNzc0NiwgNzc1MSwgNzc1NiwgNzc2MSwgNzc2NiwgNzc3MSwgNzc3NSwgCisgICAgNzc4MCwgNzc4NSwgNzc5MCwgNzc5NSwgNzgwMCwgNzgwNSwgNzgxMCwgNzgxNSwgNzgyMCwgNzgyNSwgNzgzMCwgNzgzNSwgCisgICAgNzg0MCwgNzg0NSwgNzg1MCwgNzg1NSwgNzg2MCwgNzg2NSwgNzg2OSwgNzg3NCwgNzg3OSwgNzg4NCwgNzg4OSwgNzg5NCwgCisgICAgNzg5OSwgNzkwNCwgNzkwOSwgNzkxNCwgMCwgMCwgNzkxOSwgNzkyNiwgNzkyOSwgNzkzMywgNzkzNywgNzk0MCwgNzk0NCwgCisgICAgMCwgNzk0OCwgNzk1MywgNzk1OCwgNzk2MywgNzk2OCwgNzk3MywgNzk3OCwgNzk4MywgNzk4OCwgNzk5MiwgNzk5NywgCisgICAgODAwMiwgODAwNywgODAxMiwgODAxNywgODAyMiwgODAyNywgODAzMiwgODAzNywgODA0MiwgODA0NywgODA1MiwgODA1NywgCisgICAgODA2MiwgODA2NywgODA3MiwgODA3NywgODA4MiwgODA4NiwgODA5MSwgODA5NiwgODEwMSwgODEwNiwgODExMSwgODExNiwgCisgICAgODEyMSwgODEyNiwgODEzMSwgODEzNiwgMCwgODE0MywgODE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgODE1MSwgODE1NiwgCisgICAgODE2MSwgODE2NiwgODE3MywgODE4MCwgODE4NSwgODE5MCwgODE5NSwgODIwMCwgODIwNSwgODIxMCwgODIxNSwgODIyMiwgCisgICAgODIyNywgODIzNCwgODI0MSwgODI0NiwgODI1MywgODI1OCwgODI2MywgODI2OCwgODI3NSwgODI4MCwgODI4NSwgODI5MiwgCisgICAgODMwMSwgODMwNiwgODMxMSwgODMxNiwgODMyMSwgODMyNywgODMzMiwgODMzOSwgODM0NiwgODM1MywgODM1OCwgODM2MywgCisgICAgODM2OCwgODM3MywgODM3OCwgODM4MywgODM5MywgODM5OCwgODQwNiwgODQxMSwgODQxNiwgODQyMSwgODQyNiwgODQzMywgCisgICAgODQ0MCwgODQ0NywgODQ1MywgODQ1OSwgODQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQ3MywgODQ3NywgODQ4MSwgCisgICAgODQ4NSwgODQ4OSwgODQ5MywgODQ5NywgODUwMSwgODUwNSwgODUwOSwgODUxMywgODUxOCwgODUyMiwgODUyNiwgODUzMSwgCisgICAgODUzNSwgODU0MCwgODU0NCwgODU0OCwgODU1MiwgODU1NywgODU2MSwgODU2NiwgODU3MCwgODU3NCwgODU3OCwgODU4MiwgCisgICAgMCwgMCwgMCwgMCwgMCwgODU4NiwgODU5MywgODYwMSwgODYwOCwgODYxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgODYxOCwgODYyMSwgODYyNSwgODYzMCwgMCwgMCwgODYzNCwgODY0MCwgODY0NiwgODY0OSwgODY1NiwgODY2NSwgCisgICAgODY2OCwgODY3MSwgODY3NiwgODY4MiwgODY4NiwgODY5NCwgODcwMCwgODcwNiwgODcxNCwgODcxOCwgODcyMywgODczNCwgCisgICAgODczOSwgODc0MywgODc0NywgODc1MSwgMCwgMCwgODc1NCwgODc2MSwgMCwgODc2NSwgODc2OSwgODc3NiwgODc4MiwgCisgICAgODc4OSwgODc5NSwgODgwMSwgODgwNSwgODgwOSwgODgxNSwgODgxOSwgODgyMywgODgyNywgODgzMSwgODgzNSwgODgzOSwgCisgICAgODg0MywgODg0NywgODg1MSwgODg1NSwgODg1OSwgODg2MywgODg2NywgODg3MSwgODg3NSwgODg3OSwgODg4MywgODg5MSwgCisgICAgODg5OSwgODkwOSwgODkxOCwgODkyNywgODkzMCwgODkzNCwgODkzOCwgODk0MiwgODk0NiwgODk1MCwgODk1NCwgODk1OCwgCisgICAgODk2MiwgODk2NywgODk3MSwgODk3NCwgODk3NywgODk4MCwgODk4MywgODk4NiwgODk4OSwgODk5MiwgODk5NSwgODk5OSwgCisgICAgOTAwMiwgOTAwNSwgOTAxMCwgOTAxNSwgOTAyMSwgOTAyNCwgOTAzMSwgOTA0MCwgOTA0NSwgOTA0OSwgMCwgOTA1NiwgCisgICAgOTA2MSwgOTA2NSwgOTA2OSwgOTA3MywgOTA3NywgOTA4MSwgOTA4NSwgOTA4OSwgOTA5MywgOTA5NywgOTEwMSwgOTEwNiwgCisgICAgOTExMSwgOTExOCwgOTEyNCwgOTEzMCwgOTEzNiwgOTE0MSwgOTE0OSwgOTE1NywgOTE2MiwgOTE2OCwgOTE3NCwgOTE4MCwgCisgICAgOTE4NiwgOTE5MCwgOTE5NCwgOTE5OCwgOTIwNSwgOTIxNSwgOTIxOSwgOTIyMywgOTIyNywgOTIzMywgOTI0MSwgOTI0NSwgCisgICAgOTI0OSwgOTI1NiwgOTI2MCwgOTI2NCwgOTI2OCwgOTI3NSwgOTI4MiwgOTI5NCwgOTI5OCwgOTMwMiwgOTMwNiwgOTMxNiwgCisgICAgOTMyNSwgOTMyOSwgOTMzNywgOTM0NCwgOTM1MSwgOTM2MCwgOTM3MSwgOTM3OSwgOTM4MywgOTM5MiwgOTQwMywgOTQxMSwgCisgICAgOTQyNCwgOTQzMiwgOTQ0MCwgOTQ0OCwgOTQ1NiwgOTQ2MiwgOTQ3MSwgOTQ3OCwgOTQ4MiwgOTQ5MCwgOTQ5NCwgOTUwMSwgCisgICAgOTUwOSwgOTUxMywgOTUxOSwgOTUyNiwgOTUzMywgOTUzNywgOTU0NSwgOTU0OSwgOTU1NiwgOTU2MCwgOTU2OCwgOTU3MiwgCisgICAgOTU4MCwgOTU4OCwgOTU5NSwgOTYwMywgOTYxMSwgOTYxOCwgOTYyNCwgOTYyOCwgOTYzNSwgOTY0MywgOTY0OSwgOTY1NiwgCisgICAgOTY2MywgOTY2OSwgOTY3OCwgOTY4NiwgOTY5MywgOTY5OSwgOTcwMywgOTcwNiwgOTcxMCwgOTcxNiwgOTcyNCwgOTcyOCwgCisgICAgOTczNCwgOTc0MCwgOTc0NywgOTc1NCwgOTc1NywgOTc2NCwgOTc2OSwgOTc3NywgOTc4MiwgOTc4NiwgOTc5OSwgOTgxMiwgCisgICAgOTgxOCwgOTgyNSwgOTgzMCwgOTgzNiwgOTg0MSwgOTg0NywgOTg1NywgOTg2NCwgOTg3MywgOTg4MywgOTg4OSwgOTg5NCwgCisgICAgOTg5OSwgOTkwMywgOTkwNywgOTkxMiwgOTkxNywgOTkyMywgOTkzMSwgOTkzOSwgOTk1MCwgOTk1NSwgOTk2NCwgOTk3MywgCisgICAgOTk4MCwgOTk4NiwgOTk5MiwgOTk5OCwgMTAwMDQsIDEwMDEwLCAxMDAxNiwgMTAwMjIsIDEwMDI4LCAxMDAzNCwgMTAwNDEsIAorICAgIDEwMDQ4LCAxMDA1NSwgMTAwNjEsIDEwMDY5LCAxMDA3OCwgMTAwODQsIDEwMDkxLCAxMDA5OCwgMTAxMDMsIDEwMTA4LCAKKyAgICAxMDExMiwgMTAxMTksIDEwMTI2LCAxMDEzNSwgMTAxNDQsIDEwMTQ3LCAxMDE1MiwgMTAxNTcsIDAsIDEwMTYyLCAxMDE2NiwgCisgICAgMTAxNzAsIDEwMTc2LCAxMDE4MCwgMTAxODQsIDEwMTkwLCAxMDE5NCwgMTAyMDIsIDEwMjA2LCAxMDIxMCwgMTAyMTQsIAorICAgIDEwMjE4LCAxMDIyMiwgMTAyMjgsIDEwMjMyLCAxMDIzOCwgMTAyNDIsIDEwMjQ2LCAxMDI1MCwgMTAyNTQsIDEwMjU4LCAKKyAgICAxMDI2MywgMTAyNjYsIDEwMjcwLCAxMDI3NSwgMTAyNzksIDEwMjgzLCAxMDI4NywgMTAyOTEsIDEwMjk1LCAxMDMwMSwgCisgICAgMTAzMDcsIDEwMzEzLCAxMDMxNywgMTAzMjEsIDEwMzI2LCAxMDMzMCwgMTAzMzQsIDEwMzM5LCAxMDM0MywgMTAzNDcsIAorICAgIDEwMzU0LCAxMDM2MSwgMTAzNjUsIDEwMzY5LCAxMDM3NCwgMTAzNzgsIDEwMzgyLCAxMDM4NSwgMTAzOTAsIDEwMzkzLCAKKyAgICAxMDM5NiwgMTA0MDEsIDEwNDA2LCAxMDQxMCwgMTA0MTQsIDEwNDIwLCAxMDQyNiwgMTA0MjksIDAsIDAsIDEwNDMyLCAKKyAgICAxMDQzOCwgMTA0NDQsIDEwNDUwLCAxMDQ2MCwgMTA0NzIsIDEwNDg0LCAxMDUwMSwgMTA1MTMsIDEwNTI0LCAxMDUzMiwgCisgICAgMTA1MzksIDEwNTUwLCAxMDU2NSwgMTA1NzYsIDEwNTgyLCAxMDU5MSwgMTA1OTksIDEwNjExLCAxMDYyMSwgMTA2MjksIAorICAgIDEwNjQxLCAxMDY0OCwgMTA2NTYsIDEwNjY4LCAxMDY3NCwgMTA2ODAsIDEwNjg4LCAxMDY5NiwgMTA3MDQsIDEwNzEwLCAKKyAgICAxMDcyMCwgMTA3MjcsIDEwNzM3LCAxMDc0NywgMTA3NjAsIDEwNzc0LCAxMDc4OCwgMTA3OTgsIDEwODA5LCAxMDgyMCwgCisgICAgMTA4MzMsIDEwODQ2LCAxMDg2MCwgMTA4NzIsIDEwODg0LCAxMDg5NywgMTA5MTAsIDEwOTIyLCAxMDkzNSwgMTA5NDQsIAorICAgIDEwOTUyLCAxMDk1NywgMTA5NjIsIDEwOTY3LCAxMDk3MiwgMTA5NzcsIDEwOTgyLCAxMDk4NywgMTA5OTIsIDEwOTk3LCAKKyAgICAxMTAwMiwgMTEwMDcsIDExMDEyLCAxMTAxNywgMTEwMjIsIDExMDI3LCAxMTAzMiwgMTEwMzcsIDExMDQyLCAxMTA0NywgCisgICAgMTEwNTIsIDExMDU3LCAxMTA2MiwgMTEwNjcsIDExMDcyLCAxMTA3NywgMTEwODIsIDExMDg3LCAxMTA5MiwgMTEwOTcsIAorICAgIDExMTAyLCAxMTEwNywgMTExMTIsIDExMTE2LCAxMTEyMSwgMTExMjYsIDExMTMxLCAxMTEzNiwgMTExNDEsIDExMTQ1LCAKKyAgICAxMTE0OSwgMTExNTMsIDExMTU3LCAxMTE2MSwgMTExNjUsIDExMTY5LCAxMTE3MywgMTExNzcsIDExMTgxLCAxMTE4NSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExOTAsIDExMTk1LCAxMTE5OSwgMTEyMDMsIDExMjA3LCAKKyAgICAxMTIxMSwgMTEyMTUsIDExMjE5LCAxMTIyMywgMTEyMjcsIDExMjMxLCAxMTIzNSwgMTEyNDAsIDExMjQ0LCAxMTI0OCwgCisgICAgMTEyNTIsIDExMjU3LCAxMTI2MSwgMTEyNjYsIDExMjcwLCAxMTI3NSwgMTEyNzksIDExMjg0LCAxMTI4OSwgMTEyOTQsIAorICAgIDExMjk5LCAxMTMwMywgMTEzMDgsIDExMzEzLCAxMTMxOCwgMTEzMjMsIDExMzI3LCAxMTMzMiwgMTEzMzksIDExMzQzLCAKKyAgICAxMTM0OCwgMTEzNTIsIDExMzU2LCAxMTM2MSwgMTEzNjUsIDExMzcyLCAxMTM3OSwgMTEzODYsIDExMzkyLCAxMTQwMCwgCisgICAgMTE0MDgsIDExNDE3LCAxMTQyNSwgMTE0MzIsIDExNDM5LCAxMTQ0NywgMTE0NTMsIDExNDU5LCAxMTQ2NSwgMTE0NzEsIAorICAgIDExNDc4LCAxMTQ4MywgMTE0ODcsIDExNDkyLCAwLCAwLCAwLCAwLCAwLCAxMTQ5NiwgMTE1MDAsIDExNTA0LCAxMTUwOCwgCisgICAgMTE1MTIsIDExNTE2LCAxMTUyMCwgMTE1MjQsIDExNTI4LCAxMTUzMiwgMTE1MzYsIDExNTQwLCAxMTU0NCwgMTE1NDgsIAorICAgIDExNTUyLCAxMTU1NiwgMTE1NjAsIDExNTY0LCAxMTU2OCwgMTE1NzIsIDExNTc2LCAxMTU4MCwgMTE1ODQsIDExNTg4LCAKKyAgICAxMTU5MiwgMTE1OTYsIDExNjAwLCAxMTYwNywgMTE2MTMsIDExNjE4LCAxMTYyMiwgMTE2MjksIDExNjM1LCAxMTY0MCwgCisgICAgMTE2NDYsIDExNjUxLCAxMTY1NSwgMTE2NjEsIDExNjY3LCAxMTY3MiwgMTE2NzYsIDExNjgwLCAxMTY4NSwgMTE2ODksIAorICAgIDExNjkzLCAxMTY5OCwgMCwgMCwgMTE3MDIsIDExNzA3LCAxMTcxMiwgMTE3MTcsIDExNzIyLCAxMTcyNywgMTE3MzIsIAorICAgIDExNzM2LCAxMTc0MywgMTE3NDgsIDExNzUzLCAxMTc1OCwgMTE3NjMsIDExNzY4LCAxMTc3NSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzMzAsIDExMzM0LCAxMTMzOCwgCi0gICAgMTEzNDIsIDExMzQ3LCAxMTM1MCwgMTEzNTQsIDExMzU3LCAxMTM2MSwgMTEzNjQsIDExMzY4LCAxMTM3MiwgMTEzNzYsIAotICAgIDExMzgxLCAxMTM4NiwgMTEzODksIDExMzkzLCAxMTM5OCwgMTE0MDMsIDExNDA2LCAxMTQxMCwgMTE0MTMsIDExNDE3LCAKLSAgICAxMTQyMSwgMTE0MjUsIDExNDI5LCAxMTQzMywgMTE0MzcsIDExNDQxLCAxMTQ0NSwgMTE0NDksIDExNDUzLCAxMTQ1NywgCi0gICAgMTE0NjEsIDExNDY1LCAxMTQ2OSwgMTE0NzMsIDExNDc3LCAxMTQ4MSwgMTE0ODUsIDExNDg5LCAxMTQ5MywgMTE0OTYsIAotICAgIDExNTAwLCAxMTUwNCwgMTE1MDgsIDExNTExLCAxMTUxNCwgMTE1MTcsIDExNTIxLCAxMTUyNSwgMTE1MjksIDExNTMzLCAKLSAgICAxMTUzNywgMTE1NDEsIDExNTQ1LCAxMTU0OSwgMCwgMCwgMTE1NTIsIDExNTU2LCAxMTU2MCwgMTE1NjUsIDExNTY5LCAKLSAgICAxMTU3NCwgMTE1NzgsIDExNTgzLCAxMTU4OCwgMTE1OTQsIDExNjAwLCAxMTYwNiwgMTE2MTAsIDExNjE1LCAxMTYyMSwgCi0gICAgMTE2MjcsIDExNjMxLCAxMTYzNiwgMCwgMCwgMTE2NDAsIDExNjQzLCAxMTY0OSwgMTE2NTUsIDExNjYwLCAwLCAwLCAwLCAKLSAgICAxMTY2NSwgMTE2NjksIDExNjczLCAxMTY3NywgMTE2ODEsIDExNjg1LCAxMTY4OSwgMTE2OTMsIDExNjk3LCAxMTcwMiwgCi0gICAgMTE3MDcsIDExNzEyLCAxMTcxOCwgMTE3MjEsIDExNzI1LCAxMTcyOSwgMTE3MzIsIDExNzM1LCAxMTczOCwgMTE3NDEsIAotICAgIDExNzQ0LCAxMTc0NywgMTE3NTAsIDExNzUzLCAxMTc1NiwgMTE3NjAsIDExNzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTc3MiwgMTE3NzYsIDExNzgwLCAxMTc4NiwgMTE3OTAsIDAsIDExNzk0LCAxMTc5OCwgMTE4MDIsIDAsIDExODA2LCAKLSAgICAxMTgwOSwgMTE4MTMsIDExODE2LCAxMTgyMCwgMTE4MjMsIDExODI3LCAxMTgzMSwgMCwgMCwgMTE4MzUsIDExODM4LCAwLCAKLSAgICAwLCAxMTg0MiwgMTE4NDUsIDExODQ5LCAxMTg1MiwgMTE4NTYsIDExODYwLCAxMTg2NCwgMTE4NjgsIDExODcyLCAxMTg3NiwgCi0gICAgMTE4ODAsIDExODg0LCAxMTg4OCwgMTE4OTIsIDExODk2LCAxMTkwMCwgMTE5MDQsIDExOTA4LCAxMTkxMiwgMTE5MTYsIAotICAgIDExOTIwLCAxMTkyNCwgMCwgMTE5MjgsIDExOTMxLCAxMTkzNSwgMTE5MzksIDExOTQzLCAxMTk0NiwgMTE5NDksIDAsIAotICAgIDExOTUyLCAwLCAwLCAwLCAxMTk1NiwgMTE5NjAsIDExOTY0LCAxMTk2OCwgMCwgMCwgMTE5NzEsIDExOTc1LCAxMTk3OSwgCi0gICAgMTE5ODQsIDExOTg4LCAxMTk5MywgMTE5OTcsIDEyMDAyLCAxMjAwNywgMCwgMCwgMTIwMTMsIDEyMDE3LCAwLCAwLCAKLSAgICAxMjAyMiwgMTIwMjYsIDEyMDMxLCAxMjAzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDEsIDAsIDAsIDAsIDAsIAotICAgIDEyMDQ3LCAxMjA1MSwgMCwgMTIwNTUsIDEyMDU5LCAxMjA2NCwgMTIwNjksIDEyMDc0LCAwLCAwLCAxMjA4MCwgMTIwODQsIAotICAgIDEyMDg3LCAxMjA5MCwgMTIwOTMsIDEyMDk2LCAxMjA5OSwgMTIxMDIsIDEyMTA1LCAxMjEwOCwgMTIxMTEsIDEyMTIwLCAKLSAgICAxMjEyOCwgMTIxMzIsIDEyMTM2LCAxMjE0MiwgMTIxNDgsIDEyMTU0LCAxMjE2MCwgMTIxNzQsIDEyMTgxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjE4NCwgMTIxOTAsIDEyMTk0LCAwLCAxMjE5OCwgMTIyMDEsIDEyMjA1LCAxMjIwOCwgMTIyMTIsIAotICAgIDEyMjE1LCAwLCAwLCAwLCAwLCAxMjIxOSwgMTIyMjMsIDAsIDAsIDEyMjI3LCAxMjIzMSwgMTIyMzUsIDEyMjM4LCAxMjI0MiwgCi0gICAgMTIyNDYsIDEyMjUwLCAxMjI1NCwgMTIyNTgsIDEyMjYyLCAxMjI2NiwgMTIyNzAsIDEyMjc0LCAxMjI3OCwgMTIyODIsIAotICAgIDEyMjg2LCAxMjI5MCwgMTIyOTQsIDEyMjk4LCAxMjMwMiwgMTIzMDYsIDEyMzEwLCAwLCAxMjMxNCwgMTIzMTcsIDEyMzIxLCAKLSAgICAxMjMyNSwgMTIzMjksIDEyMzMyLCAxMjMzNSwgMCwgMTIzMzgsIDEyMzQyLCAwLCAxMjM0NiwgMTIzNTAsIDAsIDEyMzU0LCAKLSAgICAxMjM1OCwgMCwgMCwgMTIzNjEsIDAsIDEyMzY1LCAxMjM3MCwgMTIzNzQsIDEyMzc5LCAxMjM4MywgMCwgMCwgMCwgMCwgCi0gICAgMTIzODgsIDEyMzkzLCAwLCAwLCAxMjM5OCwgMTI0MDMsIDEyNDA4LCAwLCAwLCAwLCAxMjQxMiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTI0MTYsIDEyNDIwLCAxMjQyNCwgMTI0MjgsIDAsIDEyNDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNiwgCi0gICAgMTI0NDAsIDEyNDQzLCAxMjQ0NiwgMTI0NDksIDEyNDUyLCAxMjQ1NSwgMTI0NTgsIDEyNDYxLCAxMjQ2NCwgMTI0NjcsIAotICAgIDEyNDcwLCAxMjQ3MywgMTI0NzYsIDEyNDc5LCAxMjQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0ODgsIDEyNDkyLCAxMjQ5NiwgMCwgMTI1MDAsIDEyNTAzLCAxMjUwNywgMTI1MTAsIDEyNTE0LCAxMjUxNywgMTI1MjEsIAotICAgIDEyNTI1LCAxMjUyOSwgMCwgMTI1MzQsIDEyNTM3LCAxMjU0MSwgMCwgMTI1NDYsIDEyNTQ5LCAxMjU1MywgMTI1NTYsIAotICAgIDEyNTYwLCAxMjU2NCwgMTI1NjgsIDEyNTcyLCAxMjU3NiwgMTI1ODAsIDEyNTg0LCAxMjU4OCwgMTI1OTIsIDEyNTk2LCAKLSAgICAxMjYwMCwgMTI2MDQsIDEyNjA4LCAxMjYxMiwgMTI2MTYsIDEyNjIwLCAxMjYyNCwgMTI2MjgsIDAsIDEyNjMyLCAxMjYzNSwgCi0gICAgMTI2MzksIDEyNjQzLCAxMjY0NywgMTI2NTAsIDEyNjUzLCAwLCAxMjY1NiwgMTI2NjAsIDAsIDEyNjY0LCAxMjY2OCwgCi0gICAgMTI2NzIsIDEyNjc2LCAxMjY4MCwgMCwgMCwgMTI2ODMsIDEyNjg3LCAxMjY5MSwgMTI2OTYsIDEyNzAwLCAxMjcwNSwgCi0gICAgMTI3MDksIDEyNzE0LCAxMjcxOSwgMTI3MjUsIDAsIDEyNzMxLCAxMjczNSwgMTI3NDAsIDAsIDEyNzQ2LCAxMjc1MCwgCi0gICAgMTI3NTUsIDAsIDAsIDEyNzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjc2MiwgCi0gICAgMTI3NjcsIDEyNzcyLCAxMjc3NywgMCwgMCwgMTI3ODMsIDEyNzg3LCAxMjc5MCwgMTI3OTMsIDEyNzk2LCAxMjc5OSwgCi0gICAgMTI4MDIsIDEyODA1LCAxMjgwOCwgMTI4MTEsIDAsIDEyODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjgxOCwgMTI4MjIsIDEyODI2LCAwLCAxMjgzMCwgMTI4MzMsIDEyODM3LCAxMjg0MCwgMTI4NDQsIAotICAgIDEyODQ3LCAxMjg1MSwgMTI4NTUsIDAsIDAsIDEyODU5LCAxMjg2MiwgMCwgMCwgMTI4NjYsIDEyODY5LCAxMjg3MywgCi0gICAgMTI4NzYsIDEyODgwLCAxMjg4NCwgMTI4ODgsIDEyODkyLCAxMjg5NiwgMTI5MDAsIDEyOTA0LCAxMjkwOCwgMTI5MTIsIAotICAgIDEyOTE2LCAxMjkyMCwgMTI5MjQsIDEyOTI4LCAxMjkzMiwgMTI5MzYsIDEyOTQwLCAxMjk0NCwgMTI5NDgsIDAsIDEyOTUyLCAKLSAgICAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzAsIDEyOTczLCAwLCAxMjk3NiwgMTI5ODAsIDAsIDEyOTg0LCAKLSAgICAxMjk4OCwgMTI5OTIsIDEyOTk2LCAxMzAwMCwgMCwgMCwgMTMwMDMsIDEzMDA3LCAxMzAxMSwgMTMwMTYsIDEzMDIwLCAKLSAgICAxMzAyNSwgMTMwMjksIDEzMDM0LCAxMzAzOSwgMCwgMCwgMTMwNDUsIDEzMDQ5LCAwLCAwLCAxMzA1NCwgMTMwNTgsIAotICAgIDEzMDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2NywgMTMwNzMsIDAsIDAsIDAsIDAsIDEzMDc5LCAxMzA4MywgMCwgCi0gICAgMTMwODcsIDEzMDkxLCAxMzA5NiwgMTMxMDEsIDEzMTA2LCAwLCAwLCAxMzExMiwgMTMxMTYsIDEzMTE5LCAxMzEyMiwgCi0gICAgMTMxMjUsIDEzMTI4LCAxMzEzMSwgMTMxMzQsIDEzMTM3LCAxMzE0MCwgMTMxNDMsIDEzMTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzE1MCwgMTMxNTQsIDAsIDEzMTU4LCAxMzE2MSwgMTMxNjUsIAotICAgIDEzMTY4LCAxMzE3MiwgMTMxNzUsIDAsIDAsIDAsIDEzMTc5LCAxMzE4MiwgMTMxODYsIDAsIDEzMTkwLCAxMzE5MywgCi0gICAgMTMxOTcsIDEzMjAxLCAwLCAwLCAwLCAxMzIwNCwgMTMyMDgsIDAsIDEzMjEyLCAwLCAxMzIxNiwgMTMyMjAsIDAsIDAsIDAsIAotICAgIDEzMjI0LCAxMzIyOCwgMCwgMCwgMCwgMTMyMzIsIDEzMjM2LCAxMzI0MCwgMCwgMCwgMCwgMTMyNDMsIDEzMjQ2LCAxMzI0OSwgCi0gICAgMTMyNTIsIDEzMjU2LCAxMzI2MCwgMTMyNjQsIDEzMjY4LCAxMzI3MiwgMTMyNzYsIDEzMjgwLCAxMzI4NCwgMCwgMCwgMCwgCi0gICAgMCwgMTMyODcsIDEzMjkyLCAxMzI5NiwgMTMzMDEsIDEzMzA1LCAwLCAwLCAwLCAxMzMxMCwgMTMzMTQsIDEzMzE5LCAwLCAKLSAgICAxMzMyNCwgMTMzMjgsIDEzMzMzLCAxMzMzOCwgMCwgMCwgMTMzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzQ1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzM1MSwgMTMzNTUsIDEzMzU4LCAxMzM2MSwgMTMzNjQsIAotICAgIDEzMzY3LCAxMzM3MCwgMTMzNzMsIDEzMzc2LCAxMzM3OSwgMTMzODIsIDEzMzg2LCAxMzM5MSwgMTMzOTYsIDEzNDAwLCAKLSAgICAxMzQwNCwgMTM0MDgsIDEzNDEyLCAxMzQxNiwgMTM0MjEsIDEzNDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQyOCwgMTM0MzIsIAotICAgIDEzNDM2LCAwLCAxMzQ0MCwgMTM0NDMsIDEzNDQ3LCAxMzQ1MCwgMTM0NTQsIDEzNDU3LCAxMzQ2MSwgMTM0NjUsIDAsIAotICAgIDEzNDY5LCAxMzQ3MiwgMTM0NzYsIDAsIDEzNDgwLCAxMzQ4MywgMTM0ODcsIDEzNDkxLCAxMzQ5NCwgMTM0OTgsIDEzNTAyLCAKLSAgICAxMzUwNiwgMTM1MTAsIDEzNTE0LCAxMzUxOCwgMTM1MjIsIDEzNTI2LCAxMzUzMCwgMTM1MzQsIDEzNTM4LCAxMzU0MiwgCi0gICAgMTM1NDYsIDEzNTUwLCAxMzU1NCwgMTM1NTgsIDEzNTYyLCAxMzU2NiwgMCwgMTM1NzAsIDEzNTczLCAxMzU3NywgMTM1ODEsIAotICAgIDEzNTg1LCAxMzU4OCwgMTM1OTEsIDEzNTk0LCAxMzU5OCwgMTM2MDIsIDAsIDEzNjA2LCAxMzYxMCwgMTM2MTQsIDEzNjE4LCAKLSAgICAxMzYyMiwgMCwgMCwgMCwgMTM2MjUsIDEzNjI5LCAxMzYzNCwgMTM2MzgsIDEzNjQzLCAxMzY0NywgMTM2NTIsIDEzNjU3LCAKLSAgICAwLCAxMzY2MywgMTM2NjcsIDEzNjcyLCAwLCAxMzY3NywgMTM2ODEsIDEzNjg2LCAxMzY5MSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTM2OTUsIDEzNjk5LCAwLCAxMzcwNSwgMTM3MDksIDAsIDAsIDAsIDAsIDAsIDAsIDEzNzEzLCAxMzcxOCwgMTM3MjMsIAotICAgIDEzNzI4LCAwLCAwLCAxMzczNCwgMTM3MzgsIDEzNzQxLCAxMzc0NCwgMTM3NDcsIDEzNzUwLCAxMzc1MywgMTM3NTYsIAotICAgIDEzNzU5LCAxMzc2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM3NjUsIDEzNzc4LCAxMzc5MCwgMTM4MDIsIDEzODE0LCAKLSAgICAxMzgyNiwgMTM4MzgsIDEzODUwLCAwLCAwLCAxMzg1NCwgMTM4NTgsIDAsIDEzODYyLCAxMzg2NSwgMTM4NjksIDEzODcyLCAKLSAgICAxMzg3NiwgMTM4NzksIDEzODgzLCAxMzg4NywgMCwgMTM4OTEsIDEzODk0LCAxMzg5OCwgMCwgMTM5MDIsIDEzOTA1LCAKLSAgICAxMzkwOSwgMTM5MTMsIDEzOTE2LCAxMzkyMCwgMTM5MjQsIDEzOTI4LCAxMzkzMiwgMTM5MzYsIDEzOTQwLCAxMzk0NCwgCi0gICAgMTM5NDgsIDEzOTUyLCAxMzk1NiwgMTM5NjAsIDEzOTY0LCAxMzk2OCwgMTM5NzIsIDEzOTc2LCAxMzk4MCwgMTM5ODQsIAotICAgIDEzOTg4LCAwLCAxMzk5MiwgMTM5OTUsIDEzOTk5LCAxNDAwMywgMTQwMDcsIDE0MDEwLCAxNDAxMywgMTQwMTYsIDE0MDIwLCAKLSAgICAxNDAyNCwgMCwgMTQwMjgsIDE0MDMyLCAxNDAzNiwgMTQwNDAsIDE0MDQ0LCAwLCAwLCAxNDA0NywgMTQwNTEsIDE0MDU1LCAKLSAgICAxNDA2MCwgMTQwNjQsIDE0MDY5LCAxNDA3MywgMTQwNzgsIDE0MDgzLCAwLCAxNDA4OSwgMTQwOTMsIDE0MDk4LCAwLCAKLSAgICAxNDEwMywgMTQxMDcsIDE0MTEyLCAxNDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMjEsIDE0MTI1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxNDEzMSwgMCwgMTQxMzUsIDE0MTQwLCAxNDE0NSwgMTQxNTAsIDAsIDAsIDE0MTU2LCAxNDE2MCwgCi0gICAgMTQxNjMsIDE0MTY2LCAxNDE2OSwgMTQxNzIsIDE0MTc1LCAxNDE3OCwgMTQxODEsIDE0MTg0LCAwLCAxNDE4NywgMTQxOTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTk1LCAxNDE5OSwgMCwgMTQyMDMsIAotICAgIDE0MjA2LCAxNDIxMCwgMTQyMTMsIDE0MjE3LCAxNDIyMCwgMTQyMjQsIDE0MjI4LCAwLCAxNDIzMiwgMTQyMzUsIDE0MjM5LCAKLSAgICAwLCAxNDI0MywgMTQyNDYsIDE0MjUwLCAxNDI1NCwgMTQyNTcsIDE0MjYxLCAxNDI2NSwgMTQyNjksIDE0MjczLCAxNDI3NywgCi0gICAgMTQyODEsIDE0Mjg1LCAxNDI4OSwgMTQyOTMsIDE0Mjk3LCAxNDMwMSwgMTQzMDUsIDE0MzA5LCAxNDMxMywgMTQzMTcsIAotICAgIDE0MzIxLCAxNDMyNSwgMTQzMjksIDAsIDE0MzMzLCAxNDMzNiwgMTQzNDAsIDE0MzQ0LCAxNDM0OCwgMTQzNTEsIDE0MzU0LCAKLSAgICAxNDM1NywgMTQzNjEsIDE0MzY1LCAxNDM2OSwgMTQzNzMsIDE0Mzc3LCAxNDM4MSwgMTQzODUsIDE0Mzg5LCAwLCAwLCAwLCAKLSAgICAxNDM5MiwgMTQzOTYsIDE0NDAxLCAxNDQwNSwgMTQ0MTAsIDE0NDE0LCAxNDQxOSwgMTQ0MjQsIDAsIDE0NDMwLCAxNDQzNCwgCi0gICAgMTQ0MzksIDAsIDE0NDQ0LCAxNDQ0OCwgMTQ0NTMsIDE0NDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQ2MiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0NjgsIDE0NDczLCAxNDQ3OCwgMTQ0ODMsIDAsIDAsIDE0NDg5LCAxNDQ5MywgCi0gICAgMTQ0OTYsIDE0NDk5LCAxNDUwMiwgMTQ1MDUsIDE0NTA4LCAxNDUxMSwgMTQ1MTQsIDE0NTE3LCAxNDUyMCwgMTQ1MjQsIAotICAgIDE0NTI5LCAxNDUzNCwgMTQ1NDAsIDE0NTQ2LCAwLCAwLCAwLCAxNDU1MiwgMTQ1NTYsIDE0NTYyLCAxNDU2NywgMTQ1NzMsIAotICAgIDE0NTc4LCAxNDU4NCwgMCwgMCwgMTQ1OTAsIDE0NTk0LCAwLCAxNDU5OCwgMTQ2MDIsIDE0NjA2LCAxNDYxMCwgMTQ2MTQsIAotICAgIDE0NjE4LCAxNDYyMiwgMTQ2MjYsIDE0NjMwLCAxNDYzNCwgMTQ2MzgsIDE0NjQyLCAxNDY0NiwgMTQ2NTAsIDE0NjU0LCAKLSAgICAxNDY1OCwgMTQ2NjIsIDE0NjY2LCAwLCAwLCAwLCAxNDY3MCwgMTQ2NzYsIDE0NjgyLCAxNDY4OCwgMTQ2OTQsIDE0NzAwLCAKLSAgICAxNDcwNiwgMTQ3MTIsIDE0NzE4LCAxNDcyNCwgMTQ3MzAsIDE0NzM2LCAxNDc0NCwgMTQ3NTAsIDE0NzU2LCAxNDc2MiwgCi0gICAgMTQ3NjgsIDE0Nzc0LCAxNDc4MCwgMTQ3ODYsIDE0NzkyLCAxNDc5OCwgMTQ4MDQsIDE0ODEwLCAwLCAxNDgxNiwgMTQ4MjIsIAotICAgIDE0ODI4LCAxNDgzNCwgMTQ4NDAsIDE0ODQ2LCAxNDg1MCwgMTQ4NTYsIDE0ODYwLCAwLCAxNDg2NCwgMCwgMCwgMTQ4NzAsIAotICAgIDE0ODc0LCAxNDg4MCwgMTQ4ODYsIDE0ODkyLCAxNDg5NiwgMTQ5MDIsIDAsIDAsIDAsIDE0OTA2LCAwLCAwLCAwLCAwLCAKLSAgICAxNDkxMCwgMTQ5MTUsIDE0OTIyLCAxNDkyOSwgMTQ5MzYsIDE0OTQzLCAwLCAxNDk1MCwgMCwgMTQ5NTcsIDE0OTYyLCAKLSAgICAxNDk2NywgMTQ5NzQsIDE0OTgxLCAxNDk5MCwgMTUwMDEsIDE1MDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTAxNSwgMTUwMjIsIDE1MDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxNTAzNCwgMTUwNDAsIDE1MDQ2LCAxNTA1MiwgMTUwNTgsIDE1MDY0LCAxNTA3MCwgMTUwNzYsIDE1MDgyLCAKLSAgICAxNTA4OCwgMTUwOTQsIDE1MTAwLCAxNTEwNiwgMTUxMTIsIDE1MTE4LCAxNTEyMywgMTUxMjksIDE1MTM1LCAxNTE0MSwgCi0gICAgMTUxNDcsIDE1MTUzLCAxNTE1OCwgMTUxNjQsIDE1MTcwLCAxNTE3NiwgMTUxODIsIDE1MTg4LCAxNTE5NCwgMTUyMDAsIAotICAgIDE1MjA2LCAxNTIxMiwgMTUyMTgsIDE1MjI0LCAxNTIyOSwgMTUyMzUsIDE1MjQxLCAxNTI0NSwgMTUyNTEsIDE1MjU1LCAKLSAgICAxNTI2MSwgMTUyNjcsIDE1MjczLCAxNTI3OSwgMTUyODUsIDE1MjkxLCAxNTI5NiwgMTUzMDIsIDE1MzA2LCAxNTMxMSwgCi0gICAgMTUzMTcsIDE1MzIzLCAxNTMyOSwgMTUzMzQsIDE1MzQwLCAxNTM0NiwgMTUzNTIsIDE1MzU3LCAxNTM2MywgMCwgMCwgMCwgCi0gICAgMCwgMTUzNjcsIDE1MzczLCAxNTM3OCwgMTUzODQsIDE1Mzg5LCAxNTM5NywgMTU0MDUsIDE1NDA5LCAxNTQxMywgMTU0MTcsIAotICAgIDE1NDIzLCAxNTQyOSwgMTU0MzUsIDE1NDQxLCAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY0LCAKLSAgICAxNTQ2NywgMTU0NzAsIDE1NDczLCAxNTQ3NiwgMTU0NzksIDE1NDgyLCAxNTQ4NSwgMTU0ODgsIDE1NDkyLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTQ5NiwgMTU1MDAsIDAsIDE1NTA2LCAwLCAwLCAxNTUxMiwgMTU1MTYsIAotICAgIDAsIDE1NTIwLCAwLCAwLCAxNTUyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1MzAsIDE1NTM0LCAxNTUzNywgMTU1NDMsIDAsIAotICAgIDE1NTQ5LCAxNTU1MywgMTU1NTcsIDE1NTYxLCAxNTU2NywgMTU1NzMsIDE1NTc5LCAwLCAxNTU4NSwgMTU1ODksIDE1NTkzLCAKLSAgICAwLCAxNTU5OSwgMCwgMTU2MDUsIDAsIDAsIDE1NjA5LCAxNTYxNSwgMCwgMTU2MjEsIDE1NjI0LCAxNTYzMCwgMTU2MzMsIAotICAgIDE1NjM3LCAxNTY0NCwgMTU2NDksIDE1NjU0LCAxNTY1OCwgMTU2NjMsIDE1NjY4LCAxNTY3MywgMTU2NzcsIDAsIDE1NjgyLCAKLSAgICAxNTY4OSwgMTU2OTUsIDAsIDAsIDE1NzAxLCAxNTcwNSwgMTU3MTAsIDE1NzE0LCAxNTcxOSwgMCwgMTU3MjQsIDAsIAotICAgIDE1NzI5LCAxNTczNSwgMTU3NDEsIDE1NzQ3LCAxNTc1MywgMTU3NTcsIDAsIDAsIDE1NzYwLCAxNTc2NCwgMTU3NjcsIAotICAgIDE1NzcwLCAxNTc3MywgMTU3NzYsIDE1Nzc5LCAxNTc4MiwgMTU3ODUsIDE1Nzg4LCAwLCAwLCAxNTc5MSwgMTU3OTYsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1ODAxLCAxNTgwNSwgMTU4MTYsIDE1ODMxLCAxNTg0NiwgMTU4NTYsIAotICAgIDE1ODY3LCAxNTg4MCwgMTU4OTEsIDE1ODk3LCAxNTkwNSwgMTU5MTUsIDE1OTIxLCAxNTkyOSwgMTU5MzMsIDE1OTM5LCAKLSAgICAxNTk0NSwgMTU5NTMsIDE1OTYzLCAxNTk3MSwgMTU5ODQsIDE1OTkwLCAxNTk5OCwgMTYwMDYsIDE2MDE4LCAxNjAyNSwgCi0gICAgMTYwMzMsIDE2MDQxLCAxNjA0OSwgMTYwNTcsIDE2MDY1LCAxNjA3MywgMTYwODMsIDE2MDg3LCAxNjA5MCwgMTYwOTMsIAotICAgIDE2MDk2LCAxNjA5OSwgMTYxMDIsIDE2MTA1LCAxNjEwOCwgMTYxMTEsIDE2MTE0LCAxNjExOCwgMTYxMjIsIDE2MTI2LCAKLSAgICAxNjEzMCwgMTYxMzQsIDE2MTM4LCAxNjE0MiwgMTYxNDYsIDE2MTUwLCAxNjE1NSwgMTYxNjEsIDE2MTcxLCAxNjE4NSwgCi0gICAgMTYxOTUsIDE2MjAxLCAxNjIwNywgMTYyMTUsIDE2MjIzLCAxNjIzMSwgMTYyMzksIDE2MjQ1LCAxNjI1MSwgMTYyNTQsIAotICAgIDE2MjU4LCAxNjI2MiwgMTYyNjYsIDE2MjcwLCAxNjI3NCwgMTYyNzgsIDAsIDE2MjgyLCAxNjI4NiwgMTYyOTAsIDE2Mjk0LCAKLSAgICAxNjI5OCwgMTYzMDIsIDE2MzA2LCAxNjMxMCwgMTYzMTQsIDE2MzE4LCAxNjMyMiwgMTYzMjYsIDE2MzI5LCAxNjMzMywgCi0gICAgMTYzMzcsIDE2MzQxLCAxNjM0NCwgMTYzNDgsIDE2MzUyLCAxNjM1NiwgMTYzNjAsIDE2MzY0LCAxNjM2OCwgMTYzNzIsIAotICAgIDE2Mzc2LCAxNjM3OSwgMTYzODIsIDE2Mzg2LCAxNjM5MCwgMTYzOTQsIDE2Mzk4LCAxNjQwMSwgMTY0MDQsIDE2NDA4LCAKLSAgICAxNjQxMywgMTY0MTcsIDAsIDAsIDAsIDAsIDE2NDIxLCAxNjQyNiwgMTY0MzAsIDE2NDM1LCAxNjQzOSwgMTY0NDQsIAotICAgIDE2NDQ5LCAxNjQ1NSwgMTY0NjAsIDE2NDY2LCAxNjQ3MCwgMTY0NzUsIDE2NDc5LCAxNjQ4NCwgMTY0OTQsIDE2NTAwLCAKLSAgICAxNjUwNSwgMTY1MTEsIDE2NTIxLCAxNjUyNywgMTY1MzEsIDE2NTM1LCAxNjU0MSwgMTY1NDcsIDE2NTU1LCAxNjU2MSwgCi0gICAgMTY1NjksIDAsIDAsIDAsIDAsIDE2NTc3LCAxNjU4MiwgMTY1ODgsIDE2NTk0LCAxNjYwMCwgMTY2MDYsIDE2NjEyLCAKLSAgICAxNjYxOCwgMCwgMTY2MjQsIDE2NjMwLCAxNjYzNiwgMTY2NDIsIDE2NjQ4LCAxNjY1NCwgMTY2NjAsIDE2NjY2LCAxNjY3MiwgCi0gICAgMTY2NzgsIDE2Njg0LCAxNjY5MCwgMTY2OTUsIDE2NzAxLCAxNjcwNywgMTY3MTMsIDE2NzE4LCAxNjcyNCwgMTY3MzAsIAotICAgIDE2NzM2LCAxNjc0MiwgMTY3NDgsIDE2NzU0LCAxNjc2MCwgMTY3NjYsIDE2NzcxLCAxNjc3NiwgMTY3ODIsIDE2Nzg4LCAKLSAgICAxNjc5NCwgMTY4MDAsIDE2ODA1LCAxNjgxMCwgMTY4MTYsIDE2ODI0LCAxNjgzMSwgMCwgMTY4MzgsIDE2ODQ1LCAxNjg1OCwgCi0gICAgMTY4NjUsIDE2ODcyLCAxNjg4MCwgMTY4ODgsIDE2ODk0LCAxNjkwMCwgMTY5MDYsIDE2OTE2LCAxNjkyMSwgMTY5MjcsIAotICAgIDE2OTM3LCAxNjk0NywgMCwgMTY5NTcsIDE2OTY3LCAxNjk3NSwgMTY5ODcsIDE2OTk5LCAxNzAwNSwgMTcwMTksIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MDM0LCAxNzAzNywgMTcwNDEsIAotICAgIDE3MDQ1LCAxNzA0OSwgMTcwNTMsIDE3MDU3LCAxNzA2MSwgMTcwNjUsIDE3MDY5LCAxNzA3MywgMTcwNzcsIDE3MDgxLCAKLSAgICAxNzA4NSwgMTcwODksIDE3MDkzLCAxNzA5NywgMTcxMDEsIDE3MTA1LCAxNzEwOSwgMTcxMTMsIDE3MTE3LCAxNzEyMCwgCi0gICAgMTcxMjQsIDE3MTI4LCAxNzEzMiwgMTcxMzUsIDE3MTM4LCAxNzE0MSwgMTcxNDUsIDE3MTQ5LCAxNzE1MywgMTcxNTYsIAotICAgIDE3MTYwLCAxNzE2MywgMTcxNjgsIDE3MTcxLCAxNzE3NSwgMTcxNzgsIDE3MTgyLCAxNzE4NSwgMTcxOTAsIDE3MTkzLCAKLSAgICAxNzE5NywgMTcyMDQsIDE3MjA5LCAxNzIxMywgMTcyMTgsIDE3MjIyLCAxNzIyNywgMTcyMzEsIDE3MjM2LCAxNzI0MywgCi0gICAgMTcyNDksIDE3MjU0LCAxNzI1OCwgMTcyNjIsIDE3MjY2LCAxNzI3MCwgMTcyNzQsIDE3MjgwLCAxNzI4NiwgMTcyOTMsIAotICAgIDE3Mjk5LCAxNzMwNSwgMTczMDksIDE3MzEyLCAxNzMxNSwgMTczMTgsIDE3MzIxLCAxNzMyNCwgMTczMjcsIDE3MzMwLCAKLSAgICAxNzMzMywgMTczMzYsIDE3MzQyLCAxNzM0NiwgMTczNTAsIDE3MzU0LCAxNzM1OCwgMTczNjIsIDE3MzY2LCAxNzM3MCwgCi0gICAgMTczNzQsIDE3Mzc5LCAxNzM4MywgMTczODgsIDE3MzkzLCAxNzM5OSwgMTc0MDQsIDE3NDEwLCAxNzQxNiwgMTc0MjIsIAotICAgIDE3NDI4LCAxNzQzNCwgMTc0NDMsIDE3NDUxLCAxNzQ2MCwgMTc0NjgsIDE3NDc3LCAxNzQ4NiwgMTc0OTcsIDE3NTA3LCAKLSAgICAxNzUxNywgMTc1MjgsIDE3NTM5LCAxNzU0OSwgMTc1NTksIDE3NTY5LCAxNzU3OSwgMTc1ODksIDE3NTk5LCAxNzYwOSwgCi0gICAgMTc2MTksIDE3NjI3LCAxNzYzNCwgMTc2NDAsIDE3NjQ3LCAxNzY1MiwgMTc2NTgsIDE3NjY0LCAxNzY3MCwgMTc2NzYsIAotICAgIDE3NjgyLCAxNzY4OCwgMTc2OTQsIDE3NzAwLCAxNzcwNiwgMTc3MTIsIDE3NzE4LCAxNzcyMywgMTc3MzIsIDE3NzM5LCAKLSAgICAxNzc0NSwgMTc3NTIsIDE3NzYwLCAxNzc2NiwgMTc3NzIsIDE3Nzc4LCAxNzc4NCwgMTc3OTIsIDE3ODAwLCAxNzgxMCwgCi0gICAgMTc4MTgsIDE3ODI2LCAxNzgzMiwgMTc4MzcsIDE3ODQyLCAxNzg0NywgMTc4NTIsIDE3ODU3LCAxNzg2MiwgMTc4NjcsIAotICAgIDE3ODcyLCAwLCAwLCAwLCAwLCAxNzg3NywgMTc4ODIsIDE3ODg4LCAxNzg5MywgMTc4OTgsIDE3OTAzLCAxNzkwOCwgCi0gICAgMTc5MTMsIDE3OTE4LCAxNzkyMywgMTc5MjgsIDE3OTMzLCAxNzkzOCwgMTc5NDMsIDE3OTQ4LCAxNzk1MywgMTc5NTgsIAotICAgIDE3OTYzLCAxNzk2OCwgMTc5NzMsIDE3OTc4LCAxNzk4MywgMTc5ODgsIDE3OTkzLCAxNzk5OCwgMTgwMDMsIDE4MDA4LCAKLSAgICAxODAxMywgMTgwMTgsIDE4MDIzLCAxODAyOCwgMTgwMzMsIDE4MDM4LCAxODA0MywgMTgwNDgsIDE4MDUzLCAxODA1OCwgCi0gICAgMTgwNjMsIDE4MDY4LCAxODA3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNzgsIDE4MDgyLCAxODA4NiwgCi0gICAgMTgwOTAsIDE4MDk0LCAxODA5OCwgMTgxMDIsIDE4MTA2LCAxODExMCwgMTgxMTQsIDE4MTE4LCAxODEyMiwgMTgxMjYsIAotICAgIDE4MTMwLCAxODEzNCwgMTgxMzgsIDE4MTQyLCAxODE0NiwgMTgxNTAsIDE4MTU0LCAxODE1OCwgMTgxNjIsIDE4MTY2LCAKLSAgICAxODE3MCwgMTgxNzQsIDE4MTc4LCAxODE4MiwgMTgxODYsIDE4MTkwLCAxODE5NCwgMTgxOTgsIDE4MjAyLCAxODIwNiwgCi0gICAgMTgyMTAsIDE4MjE0LCAxODIxOCwgMTgyMjIsIDE4MjI2LCAxODIzMCwgMTgyMzQsIDE4MjM4LCAxODI0MiwgMTgyNDcsIAotICAgIDE4MjUxLCAxODI1NiwgMCwgMCwgMCwgMTgyNjEsIDE4MjY1LCAxODI2OSwgMTgyNzMsIDE4Mjc3LCAxODI4MSwgMTgyODUsIAotICAgIDE4Mjg5LCAxODI5MywgMTgyOTcsIDE4MzAxLCAxODMwNSwgMTgzMDksIDE4MzEzLCAxODMxNywgMTgzMjEsIDE4MzI1LCAKLSAgICAxODMyOSwgMTgzMzMsIDE4MzM3LCAxODM0MSwgMTgzNDUsIDE4MzQ5LCAxODM1MywgMTgzNTcsIDE4MzYxLCAxODM2NSwgCi0gICAgMTgzNjksIDE4MzczLCAxODM3NywgMTgzODEsIDE4Mzg1LCAxODM4OSwgMTgzOTMsIDE4Mzk3LCAxODQwMSwgMTg0MDUsIAotICAgIDE4NDA5LCAxODQxMywgMTg0MTcsIDE4NDIxLCAxODQyNSwgMTg0MjksIDE4NDMzLCAxODQzNywgMTg0NDEsIDE4NDQ1LCAKLSAgICAxODQ0OSwgMTg0NTMsIDE4NDU3LCAxODQ2MSwgMTg0NjUsIDE4NDY5LCAxODQ3MywgMTg0NzcsIDE4NDgxLCAxODQ4NSwgCi0gICAgMTg0ODksIDE4NDkzLCAxODQ5NywgMTg1MDEsIDE4NTA1LCAxODUwOSwgMTg1MTMsIDE4NTE3LCAxODUyMSwgMTg1MjUsIAotICAgIDE4NTI5LCAxODUzMywgMTg1MzcsIDE4NTQxLCAxODU0NSwgMTg1NDksIDE4NTUzLCAxODU1NywgMTg1NjEsIDE4NTY1LCAKLSAgICAxODU2OSwgMTg1NzMsIDE4NTc3LCAxODU4MSwgMTg1ODUsIDE4NTg5LCAxODU5MywgMTg1OTcsIDE4NjAxLCAxODYwNSwgCi0gICAgMTg2MDksIDE4NjEzLCAxODYxNywgMCwgMCwgMCwgMCwgMCwgMTg2MjEsIDE4NjI1LCAxODYyOSwgMTg2MzIsIDE4NjM2LCAKLSAgICAxODYzOSwgMTg2NDMsIDE4NjQ3LCAxODY1MCwgMTg2NTQsIDE4NjU4LCAxODY2MSwgMTg2NjUsIDE4NjY5LCAxODY3MywgCi0gICAgMTg2NzcsIDE4NjgwLCAxODY4NCwgMTg2ODgsIDE4NjkyLCAxODY5NiwgMTg3MDAsIDE4NzA0LCAxODcwNywgMTg3MTEsIAotICAgIDE4NzE1LCAxODcxOSwgMTg3MjMsIDE4NzI3LCAxODczMSwgMTg3MzUsIDE4NzM5LCAxODc0MywgMTg3NDcsIDE4NzUxLCAKLSAgICAxODc1NSwgMTg3NTksIDE4NzYzLCAxODc2NywgMTg3NzEsIDE4Nzc1LCAxODc3OSwgMTg3ODMsIDE4Nzg3LCAxODc5MSwgCi0gICAgMTg3OTUsIDE4Nzk5LCAxODgwMywgMTg4MDcsIDE4ODExLCAxODgxNSwgMTg4MTksIDE4ODIzLCAxODgyNywgMTg4MzEsIAotICAgIDE4ODM1LCAxODgzOSwgMTg4NDMsIDE4ODQ3LCAxODg1MSwgMTg4NTUsIDE4ODU5LCAxODg2MywgMTg4NjcsIDE4ODcxLCAKLSAgICAxODg3NSwgMTg4NzksIDE4ODgzLCAwLCAwLCAwLCAwLCAwLCAxODg4NywgMTg4OTEsIDE4ODk1LCAxODg5OSwgMTg5MDMsIAotICAgIDE4OTA3LCAxODkxMSwgMTg5MTUsIDE4OTE5LCAxODkyMywgMTg5MjcsIDE4OTMxLCAxODkzNSwgMTg5MzksIDE4OTQzLCAKLSAgICAxODk0NywgMTg5NTEsIDE4OTU1LCAxODk1OSwgMTg5NjMsIDE4OTY3LCAxODk3MSwgMTg5NzUsIDE4OTc5LCAxODk4MywgCi0gICAgMTg5ODcsIDE4OTkxLCAxODk5NSwgMTg5OTksIDE5MDAzLCAxOTAwNywgMTkwMTEsIDE5MDE1LCAxOTAxOSwgMTkwMjMsIAotICAgIDE5MDI3LCAxOTAzMSwgMTkwMzUsIDE5MDM5LCAxOTA0MywgMTkwNDcsIDE5MDUxLCAxOTA1NSwgMTkwNTksIDE5MDYzLCAKLSAgICAxOTA2NywgMTkwNzEsIDE5MDc1LCAxOTA3OSwgMTkwODMsIDE5MDg3LCAxOTA5MSwgMTkwOTUsIDE5MDk5LCAxOTEwMywgCi0gICAgMTkxMDcsIDE5MTExLCAxOTExNSwgMTkxMTksIDE5MTIzLCAxOTEyNywgMTkxMzEsIDE5MTM1LCAxOTEzOSwgMTkxNDMsIAotICAgIDE5MTQ3LCAxOTE1MSwgMTkxNTUsIDE5MTU5LCAxOTE2MywgMTkxNjcsIDE5MTcxLCAxOTE3NSwgMTkxNzksIDE5MTgzLCAKLSAgICAxOTE4NywgMTkxOTEsIDE5MTk1LCAxOTE5OSwgMTkyMDMsIDE5MjA3LCAxOTIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTkyMTUsIAotICAgIDE5MjE4LCAxOTIyMiwgMTkyMjYsIDE5MjMwLCAxOTIzNCwgMTkyMzgsIDE5MjQyLCAxOTI0NiwgMTkyNTAsIDE5MjU0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTc4MCwgMTE3ODYsIAorICAgIDExNzkwLCAxMTc5NCwgMTE3OTgsIDExODAzLCAxMTgwNiwgMTE4MTAsIDExODEzLCAxMTgxNywgMTE4MjAsIDExODI0LCAKKyAgICAxMTgyOCwgMTE4MzIsIDExODM3LCAxMTg0MiwgMTE4NDUsIDExODQ5LCAxMTg1NCwgMTE4NTksIDExODYyLCAxMTg2NiwgCisgICAgMTE4NjksIDExODczLCAxMTg3NywgMTE4ODEsIDExODg1LCAxMTg4OSwgMTE4OTMsIDExODk3LCAxMTkwMSwgMTE5MDUsIAorICAgIDExOTA5LCAxMTkxMywgMTE5MTcsIDExOTIxLCAxMTkyNSwgMTE5MjksIDExOTMzLCAxMTkzNywgMTE5NDEsIDExOTQ0LCAKKyAgICAxMTk0OCwgMTE5NTEsIDExOTU1LCAxMTk1OSwgMTE5NjMsIDExOTY2LCAxMTk2OSwgMTE5NzIsIDExOTc2LCAxMTk4MCwgCisgICAgMTE5ODQsIDExOTg4LCAxMTk5MiwgMTE5OTYsIDEyMDAwLCAxMjAwNCwgMCwgMCwgMTIwMDcsIDEyMDExLCAxMjAxNSwgCisgICAgMTIwMjAsIDEyMDI0LCAxMjAyOSwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNDksIDEyMDU1LCAxMjA2MSwgMTIwNjUsIAorICAgIDEyMDcwLCAxMjA3NiwgMTIwODIsIDEyMDg2LCAxMjA5MSwgMTIwOTUsIDAsIDEyMTAxLCAxMjEwNCwgMTIxMTAsIDEyMTE2LCAKKyAgICAxMjEyMSwgMTIxMjYsIDAsIDAsIDEyMTMzLCAxMjEzNywgMTIxNDEsIDEyMTQ1LCAxMjE0OSwgMTIxNTMsIDEyMTU3LCAKKyAgICAxMjE2MSwgMTIxNjUsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg2LCAxMjE4OSwgMTIxOTMsIDEyMTk3LCAxMjIwMCwgCisgICAgMTIyMDMsIDEyMjA2LCAxMjIwOSwgMTIyMTIsIDEyMjE1LCAxMjIxOCwgMTIyMjEsIDEyMjI0LCAxMjIyOCwgMTIyMzUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyMjQwLCAxMjI0NCwgMTIyNDgsIDEyMjUyLCAxMjI1NiwgMTIyNjIsIDEyMjY2LCAwLCAxMjI3MCwgCisgICAgMTIyNzQsIDEyMjc4LCAwLCAxMjI4MiwgMTIyODUsIDEyMjg5LCAxMjI5MiwgMTIyOTYsIDEyMjk5LCAxMjMwMywgMTIzMDcsIAorICAgIDAsIDAsIDEyMzExLCAxMjMxNCwgMCwgMCwgMTIzMTgsIDEyMzIxLCAxMjMyNSwgMTIzMjgsIDEyMzMyLCAxMjMzNiwgCisgICAgMTIzNDAsIDEyMzQ0LCAxMjM0OCwgMTIzNTIsIDEyMzU2LCAxMjM2MCwgMTIzNjQsIDEyMzY4LCAxMjM3MiwgMTIzNzYsIAorICAgIDEyMzgwLCAxMjM4NCwgMTIzODgsIDEyMzkyLCAxMjM5NiwgMTI0MDAsIDAsIDEyNDAzLCAxMjQwNiwgMTI0MTAsIDEyNDE0LCAKKyAgICAxMjQxOCwgMTI0MjEsIDEyNDI0LCAwLCAxMjQyNywgMCwgMCwgMCwgMTI0MzEsIDEyNDM1LCAxMjQzOSwgMTI0NDMsIDAsIDAsIAorICAgIDEyNDQ2LCAxMjQ1MCwgMTI0NTQsIDEyNDU5LCAxMjQ2MywgMTI0NjgsIDEyNDcyLCAxMjQ3NywgMTI0ODIsIDAsIDAsIAorICAgIDEyNDg4LCAxMjQ5MiwgMCwgMCwgMTI0OTcsIDEyNTAxLCAxMjUwNiwgMTI1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNTE2LCAwLCAwLCAwLCAwLCAxMjUyMiwgMTI1MjYsIDAsIDEyNTMwLCAxMjUzNCwgMTI1MzksIDEyNTQ0LCAxMjU0OSwgMCwgCisgICAgMCwgMTI1NTUsIDEyNTU5LCAxMjU2MiwgMTI1NjUsIDEyNTY4LCAxMjU3MSwgMTI1NzQsIDEyNTc3LCAxMjU4MCwgMTI1ODMsIAorICAgIDEyNTg2LCAxMjU5NSwgMTI2MDQsIDEyNjA4LCAxMjYxMiwgMTI2MTgsIDEyNjI0LCAxMjYzMCwgMTI2MzYsIDEyNjUwLCAKKyAgICAxMjY1NywgMTI2NjAsIDAsIDAsIDAsIDAsIDAsIDEyNjY0LCAxMjY3MCwgMTI2NzQsIDAsIDEyNjc4LCAxMjY4MSwgMTI2ODUsIAorICAgIDEyNjg4LCAxMjY5MiwgMTI2OTUsIDAsIDAsIDAsIDAsIDEyNjk5LCAxMjcwMywgMCwgMCwgMTI3MDcsIDEyNzExLCAxMjcxNSwgCisgICAgMTI3MTgsIDEyNzIyLCAxMjcyNiwgMTI3MzAsIDEyNzM0LCAxMjczOCwgMTI3NDIsIDEyNzQ2LCAxMjc1MCwgMTI3NTQsIAorICAgIDEyNzU4LCAxMjc2MiwgMTI3NjYsIDEyNzcwLCAxMjc3NCwgMTI3NzgsIDEyNzgyLCAxMjc4NiwgMTI3OTAsIDAsIDEyNzkzLCAKKyAgICAxMjc5NiwgMTI4MDAsIDEyODA0LCAxMjgwOCwgMTI4MTEsIDEyODE0LCAwLCAxMjgxNywgMTI4MjEsIDAsIDEyODI1LCAKKyAgICAxMjgyOSwgMCwgMTI4MzMsIDEyODM3LCAwLCAwLCAxMjg0MCwgMCwgMTI4NDQsIDEyODQ5LCAxMjg1MywgMTI4NTgsIAorICAgIDEyODYyLCAwLCAwLCAwLCAwLCAxMjg2NywgMTI4NzIsIDAsIDAsIDEyODc3LCAxMjg4MiwgMTI4ODcsIDAsIDAsIDAsIAorICAgIDEyODkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjg5NSwgMTI4OTksIDEyOTAzLCAxMjkwNywgMCwgMTI5MTEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyOTE1LCAxMjkxOSwgMTI5MjIsIDEyOTI1LCAxMjkyOCwgMTI5MzEsIDEyOTM0LCAxMjkzNywgCisgICAgMTI5NDAsIDEyOTQzLCAxMjk0NiwgMTI5NDksIDEyOTUyLCAxMjk1NSwgMTI5NTgsIDEyOTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAwLCAxMjk3OSwgMTI5ODIsIDEyOTg2LCAxMjk4OSwgMTI5OTMsIAorICAgIDEyOTk2LCAxMzAwMCwgMTMwMDQsIDEzMDA4LCAwLCAxMzAxMywgMTMwMTYsIDEzMDIwLCAwLCAxMzAyNSwgMTMwMjgsIAorICAgIDEzMDMyLCAxMzAzNSwgMTMwMzksIDEzMDQzLCAxMzA0NywgMTMwNTEsIDEzMDU1LCAxMzA1OSwgMTMwNjMsIDEzMDY3LCAKKyAgICAxMzA3MSwgMTMwNzUsIDEzMDc5LCAxMzA4MywgMTMwODcsIDEzMDkxLCAxMzA5NSwgMTMwOTksIDEzMTAzLCAxMzEwNywgMCwgCisgICAgMTMxMTAsIDEzMTEzLCAxMzExNywgMTMxMjEsIDEzMTI1LCAxMzEyOCwgMTMxMzEsIDAsIDEzMTM0LCAxMzEzOCwgMCwgCisgICAgMTMxNDIsIDEzMTQ2LCAxMzE1MCwgMTMxNTQsIDEzMTU4LCAwLCAwLCAxMzE2MSwgMTMxNjUsIDEzMTY5LCAxMzE3NCwgCisgICAgMTMxNzgsIDEzMTgzLCAxMzE4NywgMTMxOTIsIDEzMTk3LCAxMzIwMywgMCwgMTMyMDksIDEzMjEzLCAxMzIxOCwgMCwgCisgICAgMTMyMjQsIDEzMjI4LCAxMzIzMywgMCwgMCwgMTMyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzMjQwLCAxMzI0NSwgMTMyNTAsIDEzMjU1LCAwLCAwLCAxMzI2MSwgMTMyNjUsIDEzMjY4LCAxMzI3MSwgCisgICAgMTMyNzQsIDEzMjc3LCAxMzI4MCwgMTMyODMsIDEzMjg2LCAxMzI4OSwgMCwgMTMyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMjk2LCAxMzMwMCwgMTMzMDQsIDAsIDEzMzA4LCAxMzMxMSwgMTMzMTUsIAorICAgIDEzMzE4LCAxMzMyMiwgMTMzMjUsIDEzMzI5LCAxMzMzMywgMCwgMCwgMTMzMzcsIDEzMzQwLCAwLCAwLCAxMzM0NCwgCisgICAgMTMzNDcsIDEzMzUxLCAxMzM1NCwgMTMzNTgsIDEzMzYyLCAxMzM2NiwgMTMzNzAsIDEzMzc0LCAxMzM3OCwgMTMzODIsIAorICAgIDEzMzg2LCAxMzM5MCwgMTMzOTQsIDEzMzk4LCAxMzQwMiwgMTM0MDYsIDEzNDEwLCAxMzQxNCwgMTM0MTgsIDEzNDIyLCAKKyAgICAxMzQyNiwgMCwgMTM0MjksIDEzNDMyLCAxMzQzNiwgMTM0NDAsIDEzNDQ0LCAxMzQ0NywgMTM0NTAsIDAsIDEzNDUzLCAKKyAgICAxMzQ1NywgMCwgMTM0NjEsIDEzNDY1LCAxMzQ2OSwgMTM0NzMsIDEzNDc3LCAwLCAwLCAxMzQ4MCwgMTM0ODQsIDEzNDg4LCAKKyAgICAxMzQ5MywgMTM0OTcsIDEzNTAyLCAxMzUwNiwgMTM1MTEsIDEzNTE2LCAwLCAwLCAxMzUyMiwgMTM1MjYsIDAsIDAsIAorICAgIDEzNTMxLCAxMzUzNSwgMTM1NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQ0LCAxMzU1MCwgMCwgMCwgMCwgMCwgCisgICAgMTM1NTYsIDEzNTYwLCAwLCAxMzU2NCwgMTM1NjgsIDEzNTczLCAxMzU3OCwgMTM1ODMsIDAsIDAsIDEzNTg5LCAxMzU5MywgCisgICAgMTM1OTYsIDEzNTk5LCAxMzYwMiwgMTM2MDUsIDEzNjA4LCAxMzYxMSwgMTM2MTQsIDEzNjE3LCAxMzYyMCwgMTM2MjMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNjI3LCAxMzYzMSwgMCwgMTM2MzUsIAorICAgIDEzNjM4LCAxMzY0MiwgMTM2NDUsIDEzNjQ5LCAxMzY1MiwgMCwgMCwgMCwgMTM2NTYsIDEzNjU5LCAxMzY2MywgMCwgCisgICAgMTM2NjcsIDEzNjcwLCAxMzY3NCwgMTM2NzgsIDAsIDAsIDAsIDEzNjgxLCAxMzY4NSwgMCwgMTM2ODksIDAsIDEzNjkzLCAKKyAgICAxMzY5NywgMCwgMCwgMCwgMTM3MDEsIDEzNzA1LCAwLCAwLCAwLCAxMzcwOSwgMTM3MTIsIDEzNzE2LCAwLCAwLCAwLCAKKyAgICAxMzcxOSwgMTM3MjIsIDEzNzI1LCAxMzcyOCwgMTM3MzIsIDEzNzM2LCAxMzc0MCwgMTM3NDQsIDEzNzQ4LCAxMzc1MiwgCisgICAgMTM3NTYsIDEzNzYwLCAwLCAwLCAwLCAwLCAxMzc2MywgMTM3NjgsIDEzNzcyLCAxMzc3NywgMTM3ODEsIDAsIDAsIDAsIAorICAgIDEzNzg2LCAxMzc5MCwgMTM3OTUsIDAsIDEzODAwLCAxMzgwNCwgMTM4MDksIDEzODE0LCAwLCAwLCAxMzgxOCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTM4MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODI3LCAxMzgzMSwgCisgICAgMTM4MzQsIDEzODM3LCAxMzg0MCwgMTM4NDMsIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjIsIAorICAgIDEzODY3LCAxMzg3MiwgMTM4NzYsIDEzODgwLCAxMzg4NCwgMTM4ODgsIDEzODkyLCAxMzg5NywgMTM5MDEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEzOTA0LCAxMzkwOCwgMTM5MTIsIDAsIDEzOTE2LCAxMzkxOSwgMTM5MjMsIDEzOTI2LCAxMzkzMCwgCisgICAgMTM5MzMsIDEzOTM3LCAxMzk0MSwgMCwgMTM5NDUsIDEzOTQ4LCAxMzk1MiwgMCwgMTM5NTYsIDEzOTU5LCAxMzk2MywgCisgICAgMTM5NjcsIDEzOTcwLCAxMzk3NCwgMTM5NzgsIDEzOTgyLCAxMzk4NiwgMTM5OTAsIDEzOTk0LCAxMzk5OCwgMTQwMDIsIAorICAgIDE0MDA2LCAxNDAxMCwgMTQwMTQsIDE0MDE4LCAxNDAyMiwgMTQwMjYsIDE0MDMwLCAxNDAzNCwgMTQwMzgsIDE0MDQyLCAwLCAKKyAgICAxNDA0NSwgMTQwNDgsIDE0MDUyLCAxNDA1NiwgMTQwNjAsIDE0MDYzLCAxNDA2NiwgMTQwNjksIDE0MDczLCAxNDA3NywgMCwgCisgICAgMTQwODEsIDE0MDg1LCAxNDA4OSwgMTQwOTMsIDE0MDk3LCAwLCAwLCAwLCAxNDEwMCwgMTQxMDQsIDE0MTA5LCAxNDExMywgCisgICAgMTQxMTgsIDE0MTIyLCAxNDEyNywgMTQxMzIsIDAsIDE0MTM4LCAxNDE0MiwgMTQxNDcsIDAsIDE0MTUyLCAxNDE1NiwgCisgICAgMTQxNjEsIDE0MTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDE3MCwgMTQxNzQsIDAsIDE0MTgwLCAxNDE4NCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQxODgsIDE0MTkzLCAxNDE5OCwgMTQyMDMsIDAsIDAsIDE0MjA5LCAxNDIxMywgMTQyMTYsIDE0MjE5LCAKKyAgICAxNDIyMiwgMTQyMjUsIDE0MjI4LCAxNDIzMSwgMTQyMzQsIDE0MjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDI0MCwgCisgICAgMTQyNTMsIDE0MjY1LCAxNDI3NywgMTQyODksIDE0MzAxLCAxNDMxMywgMTQzMjUsIDAsIDAsIDE0MzI5LCAxNDMzMywgMCwgCisgICAgMTQzMzcsIDE0MzQwLCAxNDM0NCwgMTQzNDcsIDE0MzUxLCAxNDM1NCwgMTQzNTgsIDE0MzYyLCAwLCAxNDM2NiwgMTQzNjksIAorICAgIDE0MzczLCAwLCAxNDM3NywgMTQzODAsIDE0Mzg0LCAxNDM4OCwgMTQzOTEsIDE0Mzk1LCAxNDM5OSwgMTQ0MDMsIDE0NDA3LCAKKyAgICAxNDQxMSwgMTQ0MTUsIDE0NDE5LCAxNDQyMywgMTQ0MjcsIDE0NDMxLCAxNDQzNSwgMTQ0MzksIDE0NDQzLCAxNDQ0NywgCisgICAgMTQ0NTEsIDE0NDU1LCAxNDQ1OSwgMTQ0NjMsIDAsIDE0NDY2LCAxNDQ2OSwgMTQ0NzMsIDE0NDc3LCAxNDQ4MSwgMTQ0ODQsIAorICAgIDE0NDg3LCAxNDQ5MCwgMTQ0OTQsIDE0NDk4LCAwLCAxNDUwMiwgMTQ1MDYsIDE0NTEwLCAxNDUxNCwgMTQ1MTgsIDAsIDAsIAorICAgIDE0NTIxLCAxNDUyNSwgMTQ1MjksIDE0NTM0LCAxNDUzOCwgMTQ1NDMsIDE0NTQ3LCAxNDU1MiwgMTQ1NTcsIDAsIDE0NTYzLCAKKyAgICAxNDU2NywgMTQ1NzIsIDAsIDE0NTc3LCAxNDU4MSwgMTQ1ODYsIDE0NTkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDU5NSwgCisgICAgMTQ1OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NjA1LCAwLCAxNDYwOSwgMTQ2MTQsIDE0NjE5LCAxNDYyNCwgMCwgMCwgCisgICAgMTQ2MzAsIDE0NjM0LCAxNDYzNywgMTQ2NDAsIDE0NjQzLCAxNDY0NiwgMTQ2NDksIDE0NjUyLCAxNDY1NSwgMTQ2NTgsIDAsIAorICAgIDE0NjYxLCAxNDY2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2NjksIDE0NjczLCAKKyAgICAwLCAxNDY3NywgMTQ2ODAsIDE0Njg0LCAxNDY4NywgMTQ2OTEsIDE0Njk0LCAxNDY5OCwgMTQ3MDIsIDAsIDE0NzA2LCAKKyAgICAxNDcwOSwgMTQ3MTMsIDAsIDE0NzE3LCAxNDcyMCwgMTQ3MjQsIDE0NzI4LCAxNDczMSwgMTQ3MzUsIDE0NzM5LCAxNDc0MywgCisgICAgMTQ3NDcsIDE0NzUxLCAxNDc1NSwgMTQ3NTksIDE0NzYzLCAxNDc2NywgMTQ3NzEsIDE0Nzc1LCAxNDc3OSwgMTQ3ODMsIAorICAgIDE0Nzg3LCAxNDc5MSwgMTQ3OTUsIDE0Nzk5LCAxNDgwMywgMCwgMTQ4MDYsIDE0ODA5LCAxNDgxMywgMTQ4MTcsIDE0ODIxLCAKKyAgICAxNDgyNCwgMTQ4MjcsIDE0ODMwLCAxNDgzNCwgMTQ4MzgsIDE0ODQyLCAxNDg0NiwgMTQ4NTAsIDE0ODU0LCAxNDg1OCwgCisgICAgMTQ4NjIsIDAsIDAsIDAsIDE0ODY1LCAxNDg2OSwgMTQ4NzQsIDE0ODc4LCAxNDg4MywgMTQ4ODcsIDE0ODkyLCAxNDg5NywgCisgICAgMCwgMTQ5MDMsIDE0OTA3LCAxNDkxMiwgMCwgMTQ5MTcsIDE0OTIxLCAxNDkyNiwgMTQ5MzEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0OTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDk0MSwgMTQ5NDYsIDE0OTUxLCAxNDk1NiwgMCwgMCwgCisgICAgMTQ5NjIsIDE0OTY2LCAxNDk2OSwgMTQ5NzIsIDE0OTc1LCAxNDk3OCwgMTQ5ODEsIDE0OTg0LCAxNDk4NywgMTQ5OTAsIAorICAgIDE0OTkzLCAxNDk5NywgMTUwMDIsIDE1MDA3LCAxNTAxMywgMTUwMTksIDAsIDAsIDAsIDE1MDI1LCAxNTAyOSwgMTUwMzUsIAorICAgIDE1MDQwLCAxNTA0NiwgMTUwNTEsIDE1MDU3LCAwLCAwLCAxNTA2MywgMTUwNjcsIDAsIDE1MDcxLCAxNTA3NSwgMTUwNzksIAorICAgIDE1MDgzLCAxNTA4NywgMTUwOTEsIDE1MDk1LCAxNTA5OSwgMTUxMDMsIDE1MTA3LCAxNTExMSwgMTUxMTUsIDE1MTE5LCAKKyAgICAxNTEyMywgMTUxMjcsIDE1MTMxLCAxNTEzNSwgMTUxMzksIDAsIDAsIDAsIDE1MTQzLCAxNTE0OSwgMTUxNTUsIDE1MTYxLCAKKyAgICAxNTE2NywgMTUxNzMsIDE1MTc5LCAxNTE4NSwgMTUxOTEsIDE1MTk3LCAxNTIwMywgMTUyMDksIDE1MjE3LCAxNTIyMywgCisgICAgMTUyMjksIDE1MjM1LCAxNTI0MSwgMTUyNDcsIDE1MjUzLCAxNTI1OSwgMTUyNjUsIDE1MjcxLCAxNTI3NywgMTUyODMsIDAsIAorICAgIDE1Mjg5LCAxNTI5NSwgMTUzMDEsIDE1MzA3LCAxNTMxMywgMTUzMTksIDE1MzIzLCAxNTMyOSwgMTUzMzMsIDAsIDE1MzM3LCAKKyAgICAwLCAwLCAxNTM0MywgMTUzNDcsIDE1MzUzLCAxNTM1OSwgMTUzNjUsIDE1MzY5LCAxNTM3NSwgMCwgMCwgMCwgMTUzNzksIDAsIAorICAgIDAsIDAsIDAsIDE1MzgzLCAxNTM4OCwgMTUzOTUsIDE1NDAyLCAxNTQwOSwgMTU0MTYsIDAsIDE1NDIzLCAwLCAxNTQzMCwgCisgICAgMTU0MzUsIDE1NDQwLCAxNTQ0NywgMTU0NTQsIDE1NDYzLCAxNTQ3NCwgMTU0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NDg4LCAxNTQ5NSwgMTU1MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE1NTA3LCAxNTUxMywgMTU1MTksIDE1NTI1LCAxNTUzMSwgMTU1MzcsIDE1NTQzLCAxNTU0OSwgCisgICAgMTU1NTUsIDE1NTYxLCAxNTU2NywgMTU1NzMsIDE1NTc5LCAxNTU4NSwgMTU1OTEsIDE1NTk2LCAxNTYwMiwgMTU2MDgsIAorICAgIDE1NjE0LCAxNTYyMCwgMTU2MjYsIDE1NjMxLCAxNTYzNywgMTU2NDMsIDE1NjQ5LCAxNTY1NSwgMTU2NjEsIDE1NjY3LCAKKyAgICAxNTY3MywgMTU2NzksIDE1Njg1LCAxNTY5MSwgMTU2OTcsIDE1NzAyLCAxNTcwOCwgMTU3MTQsIDE1NzE4LCAxNTcyNCwgCisgICAgMTU3MjgsIDE1NzM0LCAxNTc0MCwgMTU3NDYsIDE1NzUyLCAxNTc1OCwgMTU3NjQsIDE1NzY5LCAxNTc3NSwgMTU3NzksIAorICAgIDE1Nzg0LCAxNTc5MCwgMTU3OTYsIDE1ODAyLCAxNTgwNywgMTU4MTMsIDE1ODE5LCAxNTgyNSwgMTU4MzAsIDE1ODM2LCAwLCAKKyAgICAwLCAwLCAwLCAxNTg0MCwgMTU4NDYsIDE1ODUxLCAxNTg1NywgMTU4NjIsIDE1ODcwLCAxNTg3OCwgMTU4ODIsIDE1ODg2LCAKKyAgICAxNTg5MCwgMTU4OTYsIDE1OTAyLCAxNTkwOCwgMTU5MTQsIDE1OTE4LCAxNTkyMiwgMTU5MjYsIDE1OTMwLCAxNTkzNCwgCisgICAgMTU5MzcsIDE1OTQwLCAxNTk0MywgMTU5NDYsIDE1OTQ5LCAxNTk1MiwgMTU5NTUsIDE1OTU4LCAxNTk2MSwgMTU5NjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1OTY5LCAxNTk3MywgMCwgMTU5NzksIDAsIDAsIDE1OTg1LCAKKyAgICAxNTk4OSwgMCwgMTU5OTMsIDAsIDAsIDE1OTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjAwMywgMTYwMDcsIDE2MDEwLCAKKyAgICAxNjAxNiwgMCwgMTYwMjIsIDE2MDI2LCAxNjAzMCwgMTYwMzQsIDE2MDQwLCAxNjA0NiwgMTYwNTIsIDAsIDE2MDU4LCAKKyAgICAxNjA2MiwgMTYwNjYsIDAsIDE2MDcyLCAwLCAxNjA3OCwgMCwgMCwgMTYwODIsIDE2MDg4LCAwLCAxNjA5NCwgMTYwOTcsIAorICAgIDE2MTAzLCAxNjEwNiwgMTYxMTAsIDE2MTE3LCAxNjEyMiwgMTYxMjcsIDE2MTMxLCAxNjEzNiwgMTYxNDEsIDE2MTQ2LCAKKyAgICAxNjE1MCwgMCwgMTYxNTUsIDE2MTYyLCAxNjE2OCwgMCwgMCwgMTYxNzQsIDE2MTc4LCAxNjE4MywgMTYxODcsIDE2MTkyLCAKKyAgICAwLCAxNjE5NywgMCwgMTYyMDIsIDE2MjA4LCAxNjIxNCwgMTYyMjAsIDE2MjI2LCAxNjIzMCwgMCwgMCwgMTYyMzMsIAorICAgIDE2MjM3LCAxNjI0MCwgMTYyNDMsIDE2MjQ2LCAxNjI0OSwgMTYyNTIsIDE2MjU1LCAxNjI1OCwgMTYyNjEsIDAsIDAsIAorICAgIDE2MjY0LCAxNjI2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYyNzQsIDE2Mjc4LCAxNjI4OSwgMTYzMDQsIAorICAgIDE2MzE5LCAxNjMyOSwgMTYzNDAsIDE2MzUzLCAxNjM2NCwgMTYzNzAsIDE2Mzc4LCAxNjM4OCwgMTYzOTQsIDE2NDAyLCAKKyAgICAxNjQwNiwgMTY0MTIsIDE2NDE4LCAxNjQyNiwgMTY0MzYsIDE2NDQ0LCAxNjQ1NywgMTY0NjMsIDE2NDcxLCAxNjQ3OSwgCisgICAgMTY0OTEsIDE2NDk4LCAxNjUwNiwgMTY1MTQsIDE2NTIyLCAxNjUzMCwgMTY1MzgsIDE2NTQ2LCAxNjU1NiwgMTY1NjAsIAorICAgIDE2NTYzLCAxNjU2NiwgMTY1NjksIDE2NTcyLCAxNjU3NSwgMTY1NzgsIDE2NTgxLCAxNjU4NCwgMTY1ODcsIDE2NTkxLCAKKyAgICAxNjU5NSwgMTY1OTksIDE2NjAzLCAxNjYwNywgMTY2MTEsIDE2NjE1LCAxNjYxOSwgMTY2MjMsIDE2NjI4LCAxNjYzNCwgCisgICAgMTY2NDQsIDE2NjU4LCAxNjY2OCwgMTY2NzQsIDE2NjgwLCAxNjY4OCwgMTY2OTYsIDE2NzA0LCAxNjcxMiwgMTY3MTgsIAorICAgIDE2NzI0LCAxNjcyNywgMTY3MzEsIDE2NzM1LCAxNjczOSwgMTY3NDMsIDE2NzQ3LCAxNjc1MSwgMCwgMTY3NTUsIDE2NzU5LCAKKyAgICAxNjc2MywgMTY3NjcsIDE2NzcxLCAxNjc3NSwgMTY3NzksIDE2NzgzLCAxNjc4NywgMTY3OTEsIDE2Nzk1LCAxNjc5OCwgCisgICAgMTY4MDEsIDE2ODA1LCAxNjgwOSwgMTY4MTMsIDE2ODE2LCAxNjgyMCwgMTY4MjQsIDE2ODI4LCAxNjgzMiwgMTY4MzYsIAorICAgIDE2ODQwLCAxNjg0NCwgMTY4NDgsIDE2ODUxLCAxNjg1NCwgMTY4NTgsIDE2ODYyLCAxNjg2NiwgMTY4NzAsIDE2ODczLCAKKyAgICAxNjg3NiwgMTY4ODAsIDE2ODg1LCAxNjg4OSwgMCwgMCwgMCwgMCwgMTY4OTMsIDE2ODk4LCAxNjkwMiwgMTY5MDcsIAorICAgIDE2OTExLCAxNjkxNiwgMTY5MjEsIDE2OTI3LCAxNjkzMiwgMTY5MzgsIDE2OTQyLCAxNjk0NywgMTY5NTEsIDE2OTU2LCAKKyAgICAxNjk2NiwgMTY5NzIsIDE2OTc3LCAxNjk4MywgMTY5OTMsIDE2OTk5LCAxNzAwMywgMTcwMDcsIDE3MDEzLCAxNzAxOSwgCisgICAgMTcwMjcsIDE3MDMzLCAxNzA0MSwgMCwgMCwgMCwgMCwgMTcwNDksIDE3MDU0LCAxNzA2MCwgMTcwNjYsIDE3MDcyLCAKKyAgICAxNzA3OCwgMTcwODQsIDE3MDkwLCAwLCAxNzA5NiwgMTcxMDIsIDE3MTA4LCAxNzExNCwgMTcxMjAsIDE3MTI2LCAxNzEzMiwgCisgICAgMTcxMzgsIDE3MTQ0LCAxNzE1MCwgMTcxNTYsIDE3MTYxLCAxNzE2NiwgMTcxNzIsIDE3MTc4LCAxNzE4NCwgMTcxODksIAorICAgIDE3MTk1LCAxNzIwMSwgMTcyMDcsIDE3MjEzLCAxNzIxOSwgMTcyMjUsIDE3MjMxLCAxNzIzNywgMTcyNDIsIDE3MjQ3LCAKKyAgICAxNzI1MywgMTcyNTksIDE3MjY1LCAxNzI3MSwgMTcyNzYsIDE3MjgxLCAxNzI4NywgMTcyOTUsIDE3MzAyLCAwLCAxNzMwOSwgCisgICAgMTczMTYsIDE3MzI5LCAxNzMzNiwgMTczNDMsIDE3MzUxLCAxNzM1OSwgMTczNjUsIDE3MzcxLCAxNzM3NywgMTczODcsIAorICAgIDE3MzkyLCAxNzM5OCwgMTc0MDgsIDE3NDE4LCAwLCAxNzQyOCwgMTc0MzgsIDE3NDQ2LCAxNzQ1OCwgMTc0NzAsIDE3NDc2LCAKKyAgICAxNzQ5MCwgMTc1MDUsIDE3NTEwLCAxNzUxNSwgMTc1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE3NTMxLCAxNzUzNCwgMTc1MzgsIDE3NTQyLCAxNzU0NiwgMTc1NTAsIDE3NTU0LCAxNzU1OCwgMTc1NjIsIAorICAgIDE3NTY2LCAxNzU3MCwgMTc1NzQsIDE3NTc4LCAxNzU4MiwgMTc1ODYsIDE3NTkwLCAxNzU5NCwgMTc1OTgsIDE3NjAyLCAKKyAgICAxNzYwNiwgMTc2MTAsIDE3NjEzLCAxNzYxNiwgMTc2MjAsIDE3NjI0LCAxNzYyOCwgMTc2MzEsIDE3NjM0LCAxNzYzNywgCisgICAgMTc2NDEsIDE3NjQ1LCAxNzY0OSwgMTc2NTIsIDE3NjU2LCAxNzY1OSwgMTc2NjQsIDE3NjY3LCAxNzY3MSwgMTc2NzQsIAorICAgIDE3Njc4LCAxNzY4MSwgMTc2ODYsIDE3Njg5LCAxNzY5MywgMTc3MDAsIDE3NzA1LCAxNzcwOSwgMTc3MTQsIDE3NzE4LCAKKyAgICAxNzcyMywgMTc3MjcsIDE3NzMyLCAxNzczOSwgMTc3NDUsIDE3NzUwLCAxNzc1NCwgMTc3NTgsIDE3NzYyLCAxNzc2NiwgCisgICAgMTc3NzAsIDE3Nzc2LCAxNzc4MiwgMTc3ODksIDE3Nzk1LCAxNzgwMSwgMTc4MDUsIDE3ODA4LCAxNzgxMSwgMTc4MTQsIAorICAgIDE3ODE3LCAxNzgyMCwgMTc4MjMsIDE3ODI2LCAxNzgyOSwgMTc4MzIsIDE3ODM4LCAxNzg0MiwgMTc4NDYsIDE3ODUwLCAKKyAgICAxNzg1NCwgMTc4NTgsIDE3ODYyLCAxNzg2NiwgMTc4NzAsIDE3ODc1LCAxNzg3OSwgMTc4ODQsIDE3ODg5LCAxNzg5NSwgCisgICAgMTc5MDAsIDE3OTA2LCAxNzkxMiwgMTc5MTgsIDE3OTI0LCAxNzkzMCwgMTc5MzgsIDE3OTQ2LCAxNzk1NSwgMTc5NjMsIAorICAgIDE3OTcyLCAxNzk4MSwgMTc5OTIsIDE4MDAyLCAxODAxMiwgMTgwMjMsIDE4MDM0LCAxODA0NCwgMTgwNTQsIDE4MDY0LCAKKyAgICAxODA3NCwgMTgwODQsIDE4MDk0LCAxODEwNCwgMTgxMTQsIDE4MTIyLCAxODEyOSwgMTgxMzUsIDE4MTQyLCAxODE0NywgCisgICAgMTgxNTMsIDE4MTU5LCAxODE2NSwgMTgxNzEsIDE4MTc3LCAxODE4MywgMTgxODgsIDE4MTk0LCAxODIwMCwgMTgyMDYsIAorICAgIDE4MjEyLCAxODIxNywgMTgyMjYsIDE4MjMzLCAxODIzOSwgMTgyNDYsIDE4MjU0LCAxODI2MCwgMTgyNjYsIDE4MjcyLCAKKyAgICAxODI3OCwgMTgyODYsIDE4Mjk0LCAxODMwNCwgMTgzMTIsIDE4MzIwLCAxODMyNiwgMTgzMzEsIDE4MzM2LCAxODM0MSwgCisgICAgMTgzNDYsIDE4MzUxLCAxODM1NiwgMTgzNjEsIDE4MzY2LCAxODM3MSwgMTgzNzcsIDE4MzgzLCAxODM4OSwgMTgzOTYsIAorICAgIDE4NDAxLCAxODQwNywgMTg0MTIsIDE4NDE3LCAxODQyMiwgMTg0MjcsIDE4NDMyLCAxODQzNywgMTg0NDIsIDE4NDQ3LCAKKyAgICAxODQ1MiwgMTg0NTcsIDE4NDYyLCAxODQ2NywgMTg0NzIsIDE4NDc3LCAxODQ4MiwgMTg0ODcsIDE4NDkyLCAxODQ5NywgCisgICAgMTg1MDIsIDE4NTA3LCAxODUxMiwgMTg1MTcsIDE4NTIyLCAxODUyNywgMTg1MzIsIDE4NTM3LCAxODU0MiwgMTg1NDcsIAorICAgIDE4NTUyLCAxODU1NywgMTg1NjIsIDE4NTY3LCAxODU3MiwgMTg1NzcsIDE4NTgyLCAxODU4NywgMTg1OTIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NTk3LCAxODYwMSwgMTg2MDUsIDE4NjA5LCAxODYxMywgMTg2MTcsIDE4NjIxLCAKKyAgICAxODYyNSwgMTg2MjksIDE4NjMzLCAxODYzNywgMTg2NDEsIDE4NjQ1LCAxODY0OSwgMTg2NTMsIDE4NjU3LCAxODY2MSwgCisgICAgMTg2NjUsIDE4NjY5LCAxODY3MywgMTg2NzcsIDE4NjgxLCAxODY4NSwgMTg2ODksIDE4NjkzLCAxODY5NywgMTg3MDEsIAorICAgIDE4NzA1LCAxODcwOSwgMTg3MTMsIDE4NzE3LCAxODcyMSwgMTg3MjUsIDE4NzI5LCAxODczMywgMTg3MzcsIDE4NzQxLCAKKyAgICAxODc0NSwgMTg3NDksIDE4NzUzLCAxODc1NywgMTg3NjEsIDE4NzY2LCAxODc3MCwgMTg3NzUsIDAsIDAsIDAsIDE4NzgwLCAKKyAgICAxODc4NCwgMTg3ODgsIDE4NzkyLCAxODc5NiwgMTg4MDAsIDE4ODA0LCAxODgwOCwgMTg4MTIsIDE4ODE2LCAxODgyMCwgCisgICAgMTg4MjQsIDE4ODI4LCAxODgzMiwgMTg4MzYsIDE4ODQwLCAxODg0NCwgMTg4NDgsIDE4ODUyLCAxODg1NiwgMTg4NjAsIAorICAgIDE4ODY0LCAxODg2OCwgMTg4NzIsIDE4ODc2LCAxODg4MCwgMTg4ODQsIDE4ODg4LCAxODg5MiwgMTg4OTYsIDE4OTAwLCAKKyAgICAxODkwNCwgMTg5MDgsIDE4OTEyLCAxODkxNiwgMTg5MjAsIDE4OTI0LCAxODkyOCwgMTg5MzIsIDE4OTM2LCAxODk0MCwgCisgICAgMTg5NDQsIDE4OTQ4LCAxODk1MiwgMTg5NTYsIDE4OTYwLCAxODk2NCwgMTg5NjgsIDE4OTcyLCAxODk3NiwgMTg5ODAsIAorICAgIDE4OTg0LCAxODk4OCwgMTg5OTIsIDE4OTk2LCAxOTAwMCwgMTkwMDQsIDE5MDA4LCAxOTAxMiwgMTkwMTYsIDE5MDIwLCAKKyAgICAxOTAyNCwgMTkwMjgsIDE5MDMyLCAxOTAzNiwgMTkwNDAsIDE5MDQ0LCAxOTA0OCwgMTkwNTIsIDE5MDU2LCAxOTA2MCwgCisgICAgMTkwNjQsIDE5MDY4LCAxOTA3MiwgMTkwNzYsIDE5MDgwLCAxOTA4NCwgMTkwODgsIDE5MDkyLCAxOTA5NiwgMTkxMDAsIAorICAgIDE5MTA0LCAxOTEwOCwgMTkxMTIsIDE5MTE2LCAxOTEyMCwgMTkxMjQsIDE5MTI4LCAxOTEzMiwgMTkxMzYsIDE5MTQwLCAKKyAgICAxOTE0NCwgMTkxNDgsIDE5MTUyLCAxOTE1NiwgMTkxNjAsIDE5MTY0LCAxOTE2OCwgMTkxNzEsIDE5MTc1LCAxOTE3OCwgCisgICAgMTkxODIsIDE5MTg2LCAxOTE4OSwgMTkxOTMsIDE5MTk3LCAxOTIwMCwgMTkyMDQsIDE5MjA4LCAxOTIxMiwgMTkyMTYsIAorICAgIDE5MjE5LCAxOTIyMywgMTkyMjcsIDE5MjMxLCAxOTIzNSwgMTkyMzksIDE5MjQzLCAxOTI0NiwgMTkyNTAsIDE5MjU0LCAKICAgICAxOTI1OCwgMTkyNjIsIDE5MjY2LCAxOTI3MCwgMTkyNzQsIDE5Mjc4LCAxOTI4MiwgMTkyODYsIDE5MjkwLCAxOTI5NCwgCi0gICAgMTkyOTgsIDE5MzAyLCAxOTMwNiwgMTkzMTAsIDE5MzEzLCAxOTMxNywgMTkzMjEsIDE5MzI1LCAxOTMyOSwgMTkzMzMsIAotICAgIDE5MzM3LCAxOTM0MSwgMTkzNDUsIDE5MzQ5LCAxOTM1MywgMTkzNTcsIDE5MzYxLCAxOTM2NSwgMTkzNjksIDE5MzczLCAKLSAgICAxOTM3NiwgMTkzODAsIDE5Mzg0LCAxOTM4OCwgMTkzOTIsIDE5Mzk2LCAxOTQwMCwgMTk0MDQsIDE5NDA4LCAxOTQxMiwgCi0gICAgMTk0MTYsIDE5NDIwLCAxOTQyNCwgMTk0MjgsIDE5NDMyLCAxOTQzNiwgMTk0NDAsIDE5NDQ0LCAxOTQ0OCwgMTk0NTIsIAotICAgIDE5NDU2LCAxOTQ2MCwgMTk0NjQsIDE5NDY4LCAxOTQ3MiwgMTk0NzYsIDE5NDgwLCAxOTQ4NCwgMTk0ODgsIDE5NDkyLCAKLSAgICAxOTQ5NiwgMTk1MDAsIDAsIDE5NTA0LCAxOTUwOCwgMTk1MTIsIDE5NTE2LCAwLCAwLCAxOTUyMCwgMTk1MjQsIDE5NTI4LCAKLSAgICAxOTUzMiwgMTk1MzYsIDE5NTQwLCAxOTU0NCwgMCwgMTk1NDgsIDAsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAwLCAKLSAgICAwLCAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCi0gICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAotICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjU5LCAxOTY2MywgMTk2NjcsIDE5NjcxLCAxOTY3NSwgMTk2NzksIDE5NjgzLCAKLSAgICAxOTY4NywgMTk2OTEsIDE5Njk1LCAxOTY5OSwgMTk3MDMsIDE5NzA3LCAxOTcxMSwgMTk3MTUsIDE5NzE5LCAxOTcyMywgCi0gICAgMTk3MjcsIDAsIDE5NzMxLCAxOTczNSwgMTk3MzksIDE5NzQzLCAwLCAwLCAxOTc0NywgMTk3NTEsIDE5NzU1LCAxOTc1OSwgCi0gICAgMTk3NjMsIDE5NzY3LCAxOTc3MSwgMTk3NzUsIDE5Nzc5LCAxOTc4MywgMTk3ODcsIDE5NzkxLCAxOTc5NSwgMTk3OTksIAotICAgIDE5ODAzLCAxOTgwNywgMTk4MTEsIDE5ODE2LCAxOTgyMSwgMTk4MjYsIDE5ODMyLCAxOTgzOCwgMTk4NDMsIDE5ODQ4LCAKLSAgICAxOTg1NCwgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIDE5ODg1LCAwLCAxOTg4OSwgCi0gICAgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMCwgMCwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAxOTkyNSwgCi0gICAgMTk5MjksIDAsIDE5OTMzLCAwLCAxOTkzNywgMTk5NDEsIDE5OTQ1LCAxOTk0OSwgMCwgMCwgMTk5NTMsIDE5OTU3LCAKLSAgICAxOTk2MSwgMTk5NjUsIDE5OTY5LCAxOTk3MywgMTk5NzcsIDE5OTgxLCAxOTk4NSwgMTk5OTAsIDE5OTk1LCAyMDAwMCwgCi0gICAgMjAwMDYsIDIwMDEyLCAyMDAxNywgMCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAyMDA0MiwgMjAwNDYsIAotICAgIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgMjAwODIsIDIwMDg2LCAKLSAgICAyMDA4OSwgMjAwOTMsIDIwMDk3LCAyMDEwMSwgMjAxMDUsIDIwMTA5LCAyMDExMywgMjAxMTcsIDIwMTIxLCAyMDEyNSwgCi0gICAgMjAxMjksIDIwMTMzLCAyMDEzNywgMjAxNDEsIDIwMTQ1LCAyMDE0OSwgMjAxNTMsIDIwMTU3LCAyMDE2MSwgMjAxNjUsIAotICAgIDIwMTY5LCAyMDE3MywgMjAxNzcsIDIwMTgxLCAyMDE4NSwgMjAxODksIDIwMTkzLCAyMDE5NywgMjAyMDEsIDIwMjA1LCAKLSAgICAyMDIwOSwgMjAyMTMsIDIwMjE3LCAyMDIyMSwgMjAyMjUsIDIwMjI5LCAyMDIzMywgMjAyMzcsIDIwMjQxLCAyMDI0NSwgMCwgCi0gICAgMjAyNDksIDIwMjUzLCAyMDI1NywgMjAyNjEsIDAsIDAsIDIwMjY1LCAyMDI2OSwgMjAyNzMsIDIwMjc3LCAyMDI4MSwgCi0gICAgMjAyODUsIDIwMjg5LCAyMDI5MywgMjAyOTcsIDIwMzAxLCAyMDMwNSwgMjAzMDksIDIwMzEzLCAyMDMxNywgMjAzMjEsIAotICAgIDIwMzI1LCAyMDMyOSwgMjAzMzMsIDIwMzM3LCAyMDM0MSwgMjAzNDUsIDIwMzQ5LCAyMDM1MywgMjAzNTcsIDIwMzYxLCAKLSAgICAyMDM2NSwgMjAzNjksIDIwMzczLCAyMDM3NywgMjAzODEsIDIwMzg1LCAyMDM4OSwgMjAzOTMsIDIwMzk3LCAyMDQwMSwgCi0gICAgMjA0MDUsIDIwNDA5LCAyMDQxMywgMjA0MTcsIDIwNDIxLCAyMDQyNSwgMjA0MjksIDIwNDMzLCAyMDQzNywgMjA0NDEsIAotICAgIDIwNDQ1LCAyMDQ0OSwgMjA0NTMsIDIwNDU3LCAyMDQ2MSwgMjA0NjUsIDIwNDY5LCAyMDQ3MywgMjA0NzcsIDIwNDgxLCAKLSAgICAyMDQ4NSwgMjA0ODksIDIwNDkyLCAyMDQ5NiwgMjA1MDAsIDIwNTA0LCAyMDUwOCwgMjA1MTIsIDIwNTE2LCAyMDUyMCwgCi0gICAgMjA1MjQsIDIwNTI4LCAwLCAwLCAwLCAwLCAyMDUzMiwgMjA1MzcsIDIwNTQxLCAyMDU0NCwgMjA1NDksIDIwNTUyLCAKLSAgICAyMDU1NSwgMjA1NTgsIDIwNTYzLCAyMDU2NywgMjA1NzIsIDIwNTc1LCAyMDU3OCwgMjA1ODEsIDIwNTg0LCAyMDU4NywgCi0gICAgMjA1OTAsIDIwNTkzLCAyMDU5NiwgMjA1OTksIDIwNjAzLCAyMDYwNywgMjA2MTEsIDIwNjE1LCAyMDYxOSwgMjA2MjMsIAotICAgIDIwNjI3LCAyMDYzMSwgMjA2MzUsIDIwNjM5LCAwLCAwLCAwLCAyMDY0NSwgMjA2NTEsIDIwNjU1LCAyMDY1OSwgMjA2NjMsIAotICAgIDIwNjY5LCAyMDY3MywgMjA2NzcsIDIwNjgxLCAyMDY4NywgMjA2OTEsIDIwNjk1LCAyMDY5OSwgMjA3MDUsIDIwNzA5LCAKLSAgICAyMDcxMywgMjA3MTcsIDIwNzIzLCAyMDcyOSwgMjA3MzUsIDIwNzQzLCAyMDc0OSwgMjA3NTUsIDIwNzYxLCAyMDc2NywgCi0gICAgMjA3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNzc5LCAyMDc4MiwgMjA3ODUsIDIwNzg4LCAyMDc5MSwgMjA3OTQsIDIwNzk3LCAKLSAgICAyMDgwMSwgMjA4MDQsIDIwODA4LCAyMDgxMiwgMjA4MTYsIDIwODIwLCAyMDgyNCwgMjA4MjcsIDIwODMxLCAyMDgzNSwgCi0gICAgMjA4MzksIDIwODQzLCAyMDg0NywgMjA4NTEsIDIwODU1LCAyMDg1OSwgMjA4NjMsIDIwODY3LCAyMDg3MSwgMjA4NzQsIAotICAgIDIwODc4LCAyMDg4MiwgMjA4ODYsIDIwODkwLCAyMDg5NCwgMjA4OTgsIDIwOTAyLCAyMDkwNiwgMjA5MTAsIDIwOTE0LCAKLSAgICAyMDkxOCwgMjA5MjIsIDIwOTI2LCAyMDkzMCwgMjA5MzQsIDIwOTM4LCAyMDk0MiwgMjA5NDYsIDIwOTUwLCAyMDk1MywgCi0gICAgMjA5NTcsIDIwOTYxLCAyMDk2NSwgMjA5NjksIDIwOTczLCAyMDk3NywgMjA5ODEsIDIwOTg1LCAyMDk4OSwgMjA5OTMsIAotICAgIDIwOTk3LCAyMTAwMSwgMjEwMDUsIDIxMDA5LCAyMTAxMywgMjEwMTcsIDIxMDIxLCAyMTAyNSwgMjEwMjksIDIxMDMzLCAKLSAgICAyMTAzNywgMjEwNDEsIDIxMDQ1LCAyMTA0OSwgMjEwNTMsIDIxMDU3LCAyMTA2MSwgMjEwNjUsIDIxMDY5LCAyMTA3MywgCi0gICAgMjEwNzcsIDIxMDgxLCAyMTA4NSwgMjEwODgsIDIxMDkyLCAyMTA5NiwgMjExMDAsIDIxMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyMTEwOCwgMjExMTEsIDIxMTE1LCAyMTExOCwgMjExMjIsIDIxMTI1LCAyMTEyOSwgMjExMzUsIAotICAgIDIxMTQwLCAyMTE0NCwgMjExNDcsIDIxMTUxLCAyMTE1NSwgMjExNjAsIDIxMTY0LCAyMTE2OSwgMjExNzMsIDIxMTc4LCAKLSAgICAyMTE4MiwgMjExODcsIDIxMTkxLCAyMTE5NiwgMjEyMDIsIDIxMjA2LCAyMTIxMSwgMjEyMTUsIDIxMjIwLCAyMTIyNiwgCi0gICAgMjEyMzAsIDIxMjM2LCAyMTI0MiwgMjEyNDYsIDIxMjUxLCAyMTI1OSwgMjEyNjcsIDIxMjc0LCAyMTI3OSwgMjEyODQsIAotICAgIDIxMjkzLCAyMTMwMCwgMjEzMDcsIDIxMzEyLCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIDIxMzM4LCAKLSAgICAyMTM0MiwgMjEzNDYsIDIxMzUwLCAyMTM1NCwgMjEzNTgsIDIxMzY0LCAyMTM2OSwgMjEzNzQsIDIxMzc3LCAyMTM4MSwgCi0gICAgMjEzODUsIDIxMzkwLCAyMTM5NCwgMjEzOTksIDIxNDAzLCAyMTQwOCwgMjE0MTIsIDIxNDE3LCAyMTQyMSwgMjE0MjYsIAotICAgIDIxNDMwLCAyMTQzNSwgMjE0MzksIDIxNDQ0LCAyMTQ1MCwgMjE0NTQsIDIxNDU5LCAyMTQ2MywgMjE0NjcsIDIxNDcxLCAKLSAgICAyMTQ3NSwgMjE0NzksIDIxNDgyLCAyMTQ4NiwgMjE0OTIsIDIxNDk3LCAyMTUwMiwgMjE1MDYsIDIxNTEwLCAyMTUxNCwgCi0gICAgMjE1MTksIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM3LCAyMTU0MCwgMjE1NDQsIDIxNTQ4LCAyMTU1MywgMjE1NTcsIAotICAgIDIxNTYyLCAyMTU2NiwgMjE1NzEsIDIxNTc3LCAyMTU4MSwgMjE1ODUsIDIxNTg5LCAyMTU5MywgMjE1OTcsIDIxNjAxLCAKLSAgICAyMTYwNSwgMjE2MDksIDIxNjEzLCAyMTYxNywgMjE2MjEsIDIxNjI3LCAyMTYzMCwgMjE2MzQsIDIxNjM4LCAyMTY0MywgCi0gICAgMjE2NDcsIDIxNjUyLCAyMTY1NiwgMjE2NjEsIDIxNjY1LCAyMTY3MCwgMjE2NzQsIDIxNjc5LCAyMTY4MywgMjE2ODgsIAotICAgIDIxNjkyLCAyMTY5NywgMjE3MDMsIDIxNzA3LCAyMTcxMSwgMjE3MTcsIDIxNzIzLCAyMTcyOSwgMjE3MzUsIDIxNzM5LCAKLSAgICAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzY1LCAyMTc2OSwgMjE3NzMsIDIxNzc3LCAyMTc4MiwgCi0gICAgMjE3ODYsIDIxNzkxLCAyMTc5NSwgMjE4MDAsIDIxODA0LCAyMTgwOSwgMjE4MTMsIDIxODE4LCAyMTgyMiwgMjE4MjcsIAotICAgIDIxODMxLCAyMTgzNiwgMjE4NDIsIDIxODQ2LCAyMTg1MiwgMjE4NTYsIDIxODYwLCAyMTg2NCwgMjE4NjgsIDIxODcyLCAKLSAgICAyMTg3NiwgMjE4ODIsIDIxODg1LCAyMTg4OSwgMjE4OTMsIDIxODk4LCAyMTkwMiwgMjE5MDcsIDIxOTExLCAyMTkxNiwgCi0gICAgMjE5MjAsIDIxOTI1LCAyMTkyOSwgMjE5MzQsIDIxOTM4LCAyMTk0MywgMjE5NDcsIDIxOTUyLCAyMTk1OCwgMjE5NjEsIAotICAgIDIxOTY1LCAyMTk2OSwgMjE5NzQsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAKLSAgICAyMjAwOSwgMjIwMTMsIDIyMDE3LCAyMjAyMSwgMjIwMjYsIDIyMDMwLCAyMjAzNSwgMjIwMzksIDIyMDQ0LCAyMjA1MCwgCi0gICAgMjIwNTMsIDIyMDU4LCAyMjA2MiwgMjIwNjYsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4NiwgMjIwOTIsIAotICAgIDIyMDk2LCAyMjEwMCwgMjIxMDQsIDIyMTA5LCAyMjExMywgMjIxMTgsIDIyMTIyLCAyMjEyNywgMjIxMzEsIDIyMTM2LCAKLSAgICAyMjE0MCwgMjIxNDUsIDIyMTQ5LCAyMjE1NCwgMjIxNTgsIDIyMTYzLCAyMjE2NiwgMjIxNzAsIDIyMTc0LCAyMjE3OCwgCi0gICAgMjIxODIsIDIyMTg2LCAyMjE5MCwgMjIxOTQsIDIyMTk4LCAyMjIwNCwgMjIyMDgsIDIyMjEyLCAyMjIxNiwgMjIyMjEsIAotICAgIDIyMjI1LCAyMjIzMCwgMjIyMzQsIDIyMjM5LCAyMjI0MywgMjIyNDgsIDIyMjUyLCAyMjI1NywgMjIyNjEsIDIyMjY2LCAKLSAgICAyMjI3MCwgMjIyNzUsIDIyMjgxLCAyMjI4NCwgMjIyODksIDIyMjkzLCAyMjI5OCwgMjIzMDQsIDIyMzEwLCAyMjMxNiwgCi0gICAgMjIzMjIsIDIyMzI4LCAyMjMzNCwgMjIzNDAsIDIyMzQ0LCAyMjM0OCwgMjIzNTIsIDIyMzU2LCAyMjM2MCwgMjIzNjQsIAotICAgIDIyMzY4LCAyMjM3MiwgMjIzNzcsIDIyMzgxLCAyMjM4NiwgMjIzOTAsIDIyMzk1LCAyMjM5OSwgMjI0MDQsIDIyNDA4LCAKLSAgICAyMjQxMywgMjI0MTcsIDIyNDIyLCAyMjQyNiwgMjI0MzEsIDIyNDM1LCAyMjQzOSwgMjI0NDMsIDIyNDQ3LCAyMjQ1MSwgCi0gICAgMjI0NTUsIDIyNDU5LCAyMjQ2NSwgMjI0NjgsIDIyNDcyLCAyMjQ3NiwgMjI0ODEsIDIyNDg1LCAyMjQ5MCwgMjI0OTQsIAotICAgIDIyNDk5LCAyMjUwMywgMjI1MDgsIDIyNTEyLCAyMjUxNywgMjI1MjEsIDIyNTI2LCAyMjUzMCwgMjI1MzUsIDIyNTQxLCAKLSAgICAyMjU0NSwgMjI1NTEsIDIyNTU2LCAyMjU2MiwgMjI1NjYsIDIyNTcyLCAyMjU3NywgMjI1ODEsIDIyNTg1LCAyMjU4OSwgCi0gICAgMjI1OTMsIDIyNTk3LCAyMjYwMiwgMjI2MDUsIDIyNjA5LCAyMjYxNCwgMjI2MTgsIDIyNjIzLCAyMjYyNiwgMjI2MzAsIAotICAgIDIyNjM0LCAyMjYzOCwgMjI2NDIsIDIyNjQ2LCAyMjY1MCwgMjI2NTQsIDIyNjU4LCAyMjY2MiwgMjI2NjYsIDIyNjcwLCAKLSAgICAyMjY3NSwgMjI2NzksIDIyNjgzLCAyMjY4OSwgMjI2OTMsIDIyNjk5LCAyMjcwMywgMjI3MDksIDIyNzEzLCAyMjcxNywgCi0gICAgMjI3MjEsIDIyNzI1LCAyMjcyOSwgMjI3MzQsIDIyNzM4LCAyMjc0MiwgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTgsIAotICAgIDIyNzYyLCAyMjc2NiwgMjI3NzAsIDIyNzc0LCAyMjc4MCwgMjI3ODYsIDIyNzkyLCAyMjc5OCwgMjI4MDQsIDIyODA5LCAKLSAgICAyMjgxNSwgMjI4MjAsIDIyODI1LCAyMjgyOSwgMjI4MzMsIDIyODM3LCAyMjg0MSwgMjI4NDUsIDIyODQ5LCAyMjg1MywgCi0gICAgMjI4NTcsIDIyODYxLCAyMjg2NSwgMjI4NjksIDIyODczLCAyMjg3NywgMjI4ODIsIDIyODg3LCAyMjg5MiwgMjI4OTYsIAotICAgIDIyOTAwLCAyMjkwNCwgMjI5MDgsIDIyOTEyLCAyMjkxNiwgMjI5MjAsIDIyOTI0LCAyMjkyOCwgMjI5MzIsIDIyOTM4LCAKLSAgICAyMjk0NCwgMjI5NTAsIDIyOTU2LCAyMjk2MiwgMjI5NjgsIDIyOTc0LCAyMjk4MCwgMjI5ODYsIDIyOTkwLCAyMjk5NCwgCi0gICAgMjI5OTgsIDIzMDAyLCAyMzAwNiwgMjMwMTAsIDIzMDE0LCAyMzAyMCwgMjMwMjYsIDIzMDMyLCAyMzAzOCwgMjMwNDQsIAotICAgIDIzMDUwLCAyMzA1NiwgMjMwNjIsIDIzMDY4LCAyMzA3MywgMjMwNzgsIDIzMDgzLCAyMzA4OCwgMjMwOTQsIDIzMTAwLCAKLSAgICAyMzEwNiwgMjMxMTIsIDIzMTE4LCAyMzEyNCwgMjMxMzAsIDIzMTM2LCAyMzE0MiwgMjMxNDgsIDIzMTU0LCAyMzE1OSwgCi0gICAgMjMxNjUsIDIzMTcxLCAyMzE3NywgMjMxODIsIDIzMTg3LCAyMzE5MiwgMjMxOTcsIDIzMjAyLCAyMzIwNywgMjMyMTIsIAotICAgIDIzMjE3LCAyMzIyMiwgMjMyMjcsIDIzMjMyLCAyMzIzNywgMjMyNDEsIDIzMjQ2LCAyMzI1MSwgMjMyNTYsIDIzMjYxLCAKLSAgICAyMzI2NiwgMjMyNzEsIDIzMjc2LCAyMzI4MSwgMjMyODYsIDIzMjkxLCAyMzI5NiwgMjMzMDEsIDIzMzA2LCAyMzMxMSwgCi0gICAgMjMzMTYsIDIzMzIxLCAyMzMyNiwgMjMzMzEsIDIzMzM2LCAyMzM0MSwgMjMzNDYsIDIzMzUxLCAyMzM1NiwgMjMzNjEsIAotICAgIDIzMzY2LCAyMzM3MSwgMjMzNzYsIDIzMzgxLCAyMzM4NiwgMjMzOTAsIDIzMzk1LCAyMzQwMCwgMjM0MDUsIDIzNDEwLCAKLSAgICAyMzQxNSwgMjM0MjAsIDIzNDI1LCAyMzQzMCwgMjM0MzUsIDIzNDQwLCAyMzQ0NSwgMjM0NTAsIDIzNDU1LCAyMzQ2MCwgCi0gICAgMjM0NjUsIDIzNDcwLCAyMzQ3NSwgMjM0ODAsIDIzNDg1LCAyMzQ5MCwgMjM0OTUsIDIzNTAwLCAyMzUwNSwgMjM1MTAsIAotICAgIDIzNTE1LCAyMzUyMCwgMjM1MjUsIDIzNTMwLCAyMzUzNSwgMjM1NDAsIDIzNTQ1LCAyMzU0OSwgMjM1NTQsIDIzNTU5LCAKLSAgICAyMzU2NCwgMjM1NjksIDIzNTc0LCAyMzU3OCwgMjM1ODMsIDIzNTg5LCAyMzU5NCwgMjM1OTksIDIzNjA0LCAyMzYwOSwgCi0gICAgMjM2MTUsIDIzNjIwLCAyMzYyNSwgMjM2MzAsIDIzNjM1LCAyMzY0MCwgMjM2NDUsIDIzNjUwLCAyMzY1NSwgMjM2NjAsIAotICAgIDIzNjY1LCAyMzY3MCwgMjM2NzUsIDIzNjgwLCAyMzY4NSwgMjM2OTAsIDIzNjk1LCAyMzcwMCwgMjM3MDUsIDIzNzEwLCAKLSAgICAyMzcxNSwgMjM3MjAsIDIzNzI1LCAyMzczMCwgMjM3MzUsIDIzNzQwLCAyMzc0NSwgMjM3NTAsIDIzNzU1LCAyMzc2MCwgCi0gICAgMjM3NjUsIDIzNzcwLCAyMzc3NSwgMjM3ODAsIDIzNzg1LCAyMzc5MCwgMjM3OTUsIDIzODAwLCAyMzgwNSwgMjM4MTAsIAotICAgIDIzODE1LCAyMzgyMCwgMjM4MjUsIDIzODMwLCAyMzgzNSwgMjM4NDEsIDIzODQ2LCAyMzg1MSwgMjM4NTYsIDIzODYxLCAKLSAgICAyMzg2NiwgMjM4NzEsIDIzODc2LCAyMzg4MSwgMjM4ODYsIDIzODkxLCAyMzg5NiwgMjM5MDEsIDIzOTA2LCAyMzkxMSwgCi0gICAgMjM5MTYsIDIzOTIxLCAyMzkyNiwgMjM5MzEsIDIzOTM2LCAyMzk0MSwgMjM5NDYsIDIzOTUxLCAyMzk1NiwgMjM5NjEsIAotICAgIDIzOTY2LCAyMzk3MSwgMjM5NzYsIDIzOTgxLCAyMzk4NiwgMjM5OTEsIDIzOTk2LCAyNDAwMSwgMjQwMDYsIDI0MDExLCAKLSAgICAyNDAxNiwgMjQwMjEsIDI0MDI2LCAyNDAzMSwgMjQwMzcsIDI0MDQxLCAyNDA0NSwgMjQwNDksIDI0MDUzLCAyNDA1NywgCi0gICAgMjQwNjEsIDI0MDY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDA2OSwgMjQwNzQsIDI0MDc5LCAyNDA4NCwgCi0gICAgMjQwODksIDI0MDk0LCAyNDA5OSwgMjQxMDQsIDI0MTA5LCAyNDExNCwgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE4OSwgMjQxOTQsIDI0MTk5LCAyNDIwNCwgMjQyMDksIDAsIDAsIDAsIDI0MjE1LCAyNDIyNSwgMjQyMjgsIDI0MjM1LCAKLSAgICAyNDIzOSwgMjQyNDMsIDI0MjQ3LCAyNDI1NSwgMjQyNTksIDI0MjY0LCAyNDI2OSwgMjQyNzQsIDI0Mjc4LCAyNDI4MywgCi0gICAgMjQyODgsIDI0MjkxLCAyNDI5NSwgMjQyOTksIDI0MzA4LCAyNDMxMiwgMjQzMTYsIDI0MzIyLCAyNDMyNSwgMjQzMjksIAotICAgIDI0MzM2LCAyNDM0MCwgMjQzNDgsIDI0MzUzLCAyNDM1OCwgMjQzNjMsIDI0MzY4LCAyNDM3NywgMjQzODIsIDI0Mzg2LCAKLSAgICAyNDM5NSwgMjQzOTgsIDI0NDA0LCAyNDQwOCwgMjQ0MTQsIDI0NDE5LCAyNDQyNSwgMjQ0MzMsIDI0NDM5LCAyNDQ0NCwgCi0gICAgMjQ0NTEsIDI0NDU2LCAyNDQ2MCwgMjQ0NjQsIDI0NDc0LCAyNDQ4MCwgMjQ0ODQsIDI0NDk0LCAyNDUwMCwgMjQ1MDQsIAotICAgIDI0NTA4LCAyNDUxNSwgMjQ1MjIsIDI0NTI3LCAyNDUzMiwgMjQ1NDEsIDI0NTQ1LCAyNDU0OSwgMjQ1NTMsIDI0NTYxLCAKLSAgICAyNDU2OCwgMjQ1NzIsIDI0NTc2LCAyNDU4MCwgMjQ1ODQsIDI0NTg4LCAyNDU5MiwgMjQ1OTYsIDI0NjAwLCAyNDYwNCwgCi0gICAgMjQ2MDgsIDI0NjEyLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMSwgMjQ2MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NjM5LCAyNDY0MywgMjQ2NDcsIDI0NjUxLCAyNDY1NSwgMjQ2NjAsIDI0NjY1LCAKLSAgICAyNDY3MCwgMjQ2NzUsIDI0NjgwLCAyNDY4NCwgMjQ2ODksIDI0NjkzLCAwLCAyNDY5NywgMjQ3MDIsIDI0NzA3LCAyNDcxMiwgCi0gICAgMjQ3MTYsIDI0NzIxLCAyNDcyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ3MzEsIDI0NzM1LCAKLSAgICAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAyNDc2NywgMjQ3NzIsIDI0Nzc2LCAyNDc4MSwgCi0gICAgMjQ3ODUsIDI0Nzg5LCAyNDc5MywgMjQ3OTgsIDI0ODAzLCAyNDgwOCwgMjQ4MTIsIDI0ODE3LCAyNDgyMiwgMjQ4MjcsIAotICAgIDI0ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgzOCwgMjQ4NDIsIDI0ODQ2LCAyNDg1MCwgMjQ4NTQsIAotICAgIDI0ODU5LCAyNDg2NCwgMjQ4NjksIDI0ODc0LCAyNDg3OSwgMjQ4ODMsIDI0ODg4LCAyNDg5MiwgMjQ4OTYsIDI0OTAwLCAKLSAgICAyNDkwNSwgMjQ5MTAsIDI0OTE1LCAyNDkxOSwgMjQ5MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0OTI5LCAyNDkzMywgMjQ5MzcsIDI0OTQxLCAyNDk0NSwgMjQ5NTAsIDI0OTU1LCAyNDk2MCwgMjQ5NjUsIDI0OTcwLCAKLSAgICAyNDk3NCwgMjQ5NzksIDI0OTgzLCAwLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAwLCAyNTAwMiwgMjUwMDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MDEyLCAyNTAxNSwgMjUwMTksIDI1MDIzLCAyNTAyNywgMjUwMzEsIDI1MDM1LCAKLSAgICAyNTAzOSwgMjUwNDMsIDI1MDQ3LCAyNTA1MSwgMjUwNTUsIDI1MDU5LCAyNTA2MywgMjUwNjcsIDI1MDcxLCAyNTA3NSwgCi0gICAgMjUwNzksIDI1MDgyLCAyNTA4NiwgMjUwOTAsIDI1MDk0LCAyNTA5OCwgMjUxMDIsIDI1MTA2LCAyNTExMCwgMjUxMTQsIAotICAgIDI1MTE4LCAyNTEyMiwgMjUxMjYsIDI1MTMwLCAyNTEzNCwgMjUxMzgsIDI1MTQxLCAyNTE0NSwgMjUxNDksIDI1MTU1LCAKLSAgICAyNTE2MSwgMjUxNjcsIDI1MTczLCAyNTE3OSwgMjUxODUsIDI1MTkxLCAyNTE5NywgMjUyMDMsIDI1MjA5LCAyNTIxNSwgCi0gICAgMjUyMjEsIDI1MjI3LCAyNTIzMywgMjUyNDIsIDI1MjUxLCAyNTI1NywgMjUyNjMsIDI1MjY5LCAyNTI3NCwgMjUyNzgsIAotICAgIDI1MjgzLCAyNTI4OCwgMjUyOTMsIDI1Mjk3LCAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNiwgMjUzMjEsIDI1MzI1LCAKLSAgICAyNTMzMCwgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMjUzNDksIDI1MzUzLCAyNTM1NywgMjUzNjEsIDI1MzY1LCAyNTM2OSwgCi0gICAgMjUzNzMsIDI1Mzc3LCAyNTM4MSwgMjUzODUsIDI1MzkxLCAyNTM5NSwgMjUzOTksIDI1NDAzLCAyNTQwNywgMjU0MTEsIAotICAgIDI1NDE5LCAyNTQyNSwgMjU0MjksIDI1NDM1LCAyNTQzOSwgMjU0NDUsIDI1NDQ5LCAwLCAwLCAyNTQ1MywgMjU0NTcsIAotICAgIDI1NDYwLCAyNTQ2MywgMjU0NjYsIDI1NDY5LCAyNTQ3MiwgMjU0NzUsIDI1NDc4LCAyNTQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjU0ODQsIDI1NDkyLCAyNTUwMCwgMjU1MDgsIDI1NTE2LCAyNTUyNCwgMjU1MzIsIDI1NTQwLCAyNTU0OCwgMjU1NTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI1NTY0LCAyNTU2NywgMjU1NzAsIDI1NTczLCAyNTU3OCwgMjU1ODEsIDI1NTg2LCAyNTU5MywgCi0gICAgMjU2MDEsIDI1NjA2LCAyNTYxMywgMjU2MTYsIDI1NjIzLCAyNTYzMCwgMjU2MzcsIDAsIDI1NjQxLCAyNTY0NSwgMjU2NDgsIAotICAgIDI1NjUxLCAyNTY1NCwgMjU2NTcsIDI1NjYwLCAyNTY2MywgMjU2NjYsIDI1NjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNTY3MiwgCi0gICAgMjU2NzUsIDI1Njc4LCAyNTY4MSwgMjU2ODQsIDI1Njg3LCAyNTY5MSwgMjU2OTUsIDI1Njk5LCAyNTcwMywgMjU3MDcsIAotICAgIDI1NzExLCAyNTcxNCwgMjU3MTgsIDI1NzIyLCAyNTcyNSwgMjU3MjksIDI1NzMzLCAyNTczNywgMjU3NDEsIDI1NzQ1LCAKLSAgICAyNTc0OSwgMjU3NTMsIDI1NzU2LCAyNTc1OSwgMjU3NjMsIDI1NzY3LCAyNTc3MCwgMjU3NzQsIDI1Nzc4LCAyNTc4MiwgCi0gICAgMjU3ODYsIDI1NzkwLCAyNTc5NCwgMjU3OTgsIDI1ODAyLCAyNTgwOSwgMjU4MTQsIDI1ODE5LCAyNTgyNCwgMjU4MjksIAotICAgIDI1ODM1LCAyNTg0MSwgMjU4NDcsIDI1ODUzLCAyNTg1OCwgMjU4NjQsIDI1ODcwLCAyNTg3NSwgMjU4ODEsIDI1ODg3LCAKLSAgICAyNTg5MywgMjU4OTksIDI1OTA1LCAyNTkxMCwgMjU5MTYsIDI1OTIxLCAyNTkyNywgMjU5MzMsIDI1OTM5LCAyNTk0NSwgCi0gICAgMjU5NTEsIDI1OTU2LCAyNTk2MSwgMjU5NjcsIDI1OTczLCAyNTk3OCwgMjU5ODQsIDI1OTg5LCAyNTk5NSwgMjYwMDAsIAotICAgIDI2MDA1LCAyNjAxMSwgMjYwMTcsIDI2MDIzLCAyNjAyOSwgMjYwMzUsIDI2MDQxLCAyNjA0NywgMjYwNTMsIDI2MDU5LCAKLSAgICAyNjA2NSwgMjYwNzEsIDI2MDc3LCAyNjA4MiwgMjYwODcsIDI2MDkyLCAyNjA5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYxMDQsIDI2MTEzLCAyNjEyMiwgMjYxMzAsIDI2MTM4LCAyNjE0OCwgMjYxNTYsIDI2MTY1LCAyNjE3MiwgMjYxNzksIAotICAgIDI2MTg2LCAyNjE5NCwgMjYyMDIsIDI2MjEwLCAyNjIxOCwgMjYyMjYsIDI2MjM0LCAyNjI0MiwgMjYyNTAsIDI2MjU3LCAKLSAgICAyNjI2NSwgMjYyNzMsIDI2MjgxLCAyNjI4OSwgMjYyOTcsIDI2MzA3LCAyNjMxNywgMjYzMjcsIDI2MzM3LCAyNjM0NywgCi0gICAgMjYzNTcsIDI2MzY3LCAyNjM3NywgMjYzODcsIDI2Mzk3LCAyNjQwNywgMjY0MTcsIDI2NDI3LCAyNjQzNywgMjY0NDUsIAotICAgIDI2NDUzLCAyNjQ2MywgMjY0NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE5Mjk4LCAxOTMwMiwgMTkzMDYsIDE5MzEwLCAxOTMxNCwgMTkzMTgsIDE5MzIyLCAxOTMyNiwgMTkzMzAsIDE5MzM0LCAKKyAgICAxOTMzOCwgMTkzNDIsIDE5MzQ2LCAxOTM1MCwgMTkzNTQsIDE5MzU4LCAxOTM2MiwgMTkzNjYsIDE5MzcwLCAxOTM3NCwgCisgICAgMTkzNzgsIDE5MzgyLCAxOTM4NiwgMTkzOTAsIDE5Mzk0LCAxOTM5OCwgMTk0MDIsIDE5NDA2LCAxOTQxMCwgMTk0MTQsIAorICAgIDE5NDE4LCAxOTQyMiwgMTk0MjYsIDE5NDMwLCAxOTQzNCwgMTk0MzgsIDE5NDQyLCAxOTQ0NiwgMTk0NTAsIDE5NDU0LCAKKyAgICAxOTQ1OCwgMTk0NjIsIDE5NDY2LCAxOTQ3MCwgMTk0NzQsIDE5NDc4LCAxOTQ4MiwgMTk0ODYsIDE5NDkwLCAxOTQ5NCwgCisgICAgMTk0OTgsIDE5NTAyLCAxOTUwNiwgMTk1MTAsIDE5NTE0LCAxOTUxOCwgMTk1MjIsIDE5NTI2LCAxOTUzMCwgMTk1MzQsIAorICAgIDE5NTM4LCAxOTU0MiwgMTk1NDYsIDE5NTUwLCAxOTU1NCwgMTk1NTgsIDE5NTYyLCAxOTU2NiwgMTk1NzAsIDE5NTc0LCAKKyAgICAxOTU3OCwgMTk1ODIsIDE5NTg2LCAxOTU5MCwgMTk1OTQsIDE5NTk4LCAxOTYwMiwgMTk2MDYsIDE5NjEwLCAxOTYxNCwgCisgICAgMTk2MTgsIDE5NjIyLCAxOTYyNiwgMTk2MzAsIDE5NjM0LCAxOTYzOCwgMTk2NDIsIDE5NjQ2LCAxOTY1MCwgMTk2NTQsIAorICAgIDE5NjU4LCAxOTY2MiwgMTk2NjYsIDE5NjcwLCAxOTY3NCwgMTk2NzgsIDE5NjgyLCAxOTY4NiwgMTk2OTAsIDE5Njk0LCAKKyAgICAxOTY5OCwgMTk3MDIsIDE5NzA2LCAxOTcxMCwgMTk3MTQsIDE5NzE4LCAxOTcyMiwgMTk3MjYsIDE5NzMwLCAxOTczNCwgCisgICAgMTk3MzgsIDE5NzQyLCAxOTc0NiwgMTk3NTAsIDE5NzU0LCAxOTc1OCwgMTk3NjIsIDE5NzY2LCAxOTc3MCwgMTk3NzQsIAorICAgIDE5Nzc4LCAxOTc4MiwgMTk3ODYsIDE5NzkwLCAxOTc5NCwgMTk3OTgsIDE5ODAxLCAxOTgwNSwgMTk4MDksIDE5ODEzLCAKKyAgICAxOTgxNywgMTk4MjEsIDE5ODI1LCAxOTgyOSwgMTk4MzMsIDE5ODM3LCAxOTg0MSwgMTk4NDUsIDE5ODQ5LCAxOTg1MywgCisgICAgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIDE5ODg1LCAxOTg4OSwgMTk4OTMsIAorICAgIDE5ODk2LCAxOTkwMCwgMTk5MDQsIDE5OTA4LCAxOTkxMiwgMTk5MTYsIDE5OTIwLCAxOTkyNCwgMTk5MjgsIDE5OTMyLCAKKyAgICAxOTkzNiwgMTk5NDAsIDE5OTQ0LCAxOTk0OCwgMTk5NTIsIDE5OTU2LCAxOTk1OSwgMTk5NjMsIDE5OTY3LCAxOTk3MSwgCisgICAgMTk5NzUsIDE5OTc5LCAxOTk4MywgMTk5ODcsIDE5OTkxLCAxOTk5NSwgMTk5OTksIDIwMDAzLCAyMDAwNywgMjAwMTEsIAorICAgIDIwMDE1LCAyMDAxOSwgMjAwMjMsIDIwMDI3LCAyMDAzMSwgMjAwMzUsIDIwMDM5LCAyMDA0MywgMjAwNDcsIDIwMDUxLCAKKyAgICAyMDA1NSwgMjAwNTksIDIwMDYzLCAyMDA2NywgMjAwNzEsIDIwMDc1LCAyMDA3OSwgMjAwODMsIDAsIDIwMDg3LCAyMDA5MSwgCisgICAgMjAwOTUsIDIwMDk5LCAwLCAwLCAyMDEwMywgMjAxMDcsIDIwMTExLCAyMDExNSwgMjAxMTksIDIwMTIzLCAyMDEyNywgMCwgCisgICAgMjAxMzEsIDAsIDIwMTM1LCAyMDEzOSwgMjAxNDMsIDIwMTQ3LCAwLCAwLCAyMDE1MSwgMjAxNTUsIDIwMTU5LCAyMDE2MywgCisgICAgMjAxNjcsIDIwMTcxLCAyMDE3NSwgMjAxNzksIDIwMTgzLCAyMDE4NywgMjAxOTEsIDIwMTk1LCAyMDE5OSwgMjAyMDMsIAorICAgIDIwMjA3LCAyMDIxMSwgMjAyMTUsIDIwMjE5LCAyMDIyMywgMjAyMjcsIDIwMjMxLCAyMDIzNSwgMjAyMzksIDIwMjQyLCAKKyAgICAyMDI0NiwgMjAyNTAsIDIwMjU0LCAyMDI1OCwgMjAyNjIsIDIwMjY2LCAyMDI3MCwgMjAyNzQsIDIwMjc4LCAyMDI4MiwgCisgICAgMjAyODYsIDIwMjkwLCAyMDI5NCwgMjAyOTgsIDIwMzAyLCAyMDMwNiwgMjAzMTAsIDAsIDIwMzE0LCAyMDMxOCwgMjAzMjIsIAorICAgIDIwMzI2LCAwLCAwLCAyMDMzMCwgMjAzMzMsIDIwMzM3LCAyMDM0MSwgMjAzNDUsIDIwMzQ5LCAyMDM1MywgMjAzNTcsIAorICAgIDIwMzYxLCAyMDM2NSwgMjAzNjksIDIwMzczLCAyMDM3NywgMjAzODEsIDIwMzg1LCAyMDM4OSwgMjAzOTMsIDIwMzk4LCAKKyAgICAyMDQwMywgMjA0MDgsIDIwNDE0LCAyMDQyMCwgMjA0MjUsIDIwNDMwLCAyMDQzNiwgMjA0MzksIDIwNDQzLCAyMDQ0NywgCisgICAgMjA0NTEsIDIwNDU1LCAyMDQ1OSwgMjA0NjMsIDIwNDY3LCAwLCAyMDQ3MSwgMjA0NzUsIDIwNDc5LCAyMDQ4MywgMCwgMCwgCisgICAgMjA0ODcsIDIwNDkxLCAyMDQ5NSwgMjA0OTksIDIwNTAzLCAyMDUwNywgMjA1MTEsIDAsIDIwNTE1LCAwLCAyMDUxOSwgCisgICAgMjA1MjMsIDIwNTI3LCAyMDUzMSwgMCwgMCwgMjA1MzUsIDIwNTM5LCAyMDU0MywgMjA1NDcsIDIwNTUxLCAyMDU1NSwgCisgICAgMjA1NTksIDIwNTYzLCAyMDU2NywgMjA1NzIsIDIwNTc3LCAyMDU4MiwgMjA1ODgsIDIwNTk0LCAyMDU5OSwgMCwgMjA2MDQsIAorICAgIDIwNjA4LCAyMDYxMiwgMjA2MTYsIDIwNjIwLCAyMDYyNCwgMjA2MjgsIDIwNjMyLCAyMDYzNiwgMjA2NDAsIDIwNjQ0LCAKKyAgICAyMDY0OCwgMjA2NTIsIDIwNjU2LCAyMDY2MCwgMjA2NjQsIDIwNjY4LCAyMDY3MSwgMjA2NzUsIDIwNjc5LCAyMDY4MywgCisgICAgMjA2ODcsIDIwNjkxLCAyMDY5NSwgMjA2OTksIDIwNzAzLCAyMDcwNywgMjA3MTEsIDIwNzE1LCAyMDcxOSwgMjA3MjMsIAorICAgIDIwNzI3LCAyMDczMSwgMjA3MzUsIDIwNzM5LCAyMDc0MywgMjA3NDcsIDIwNzUxLCAyMDc1NSwgMjA3NTksIDIwNzYzLCAKKyAgICAyMDc2NywgMjA3NzEsIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgMjA3OTUsIDIwNzk5LCAyMDgwMywgCisgICAgMjA4MDcsIDIwODExLCAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMCwgMjA4MzEsIDIwODM1LCAyMDgzOSwgMjA4NDMsIAorICAgIDAsIDAsIDIwODQ3LCAyMDg1MSwgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDIwODcxLCAyMDg3NSwgMjA4NzksIAorICAgIDIwODgzLCAyMDg4NywgMjA4OTEsIDIwODk1LCAyMDg5OSwgMjA5MDMsIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDIwOTE5LCAKKyAgICAyMDkyMywgMjA5MjcsIDIwOTMxLCAyMDkzNSwgMjA5MzksIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgCisgICAgMjA5NjMsIDIwOTY3LCAyMDk3MSwgMjA5NzUsIDIwOTc5LCAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIAorICAgIDIxMDAzLCAyMTAwNywgMjEwMTEsIDIxMDE1LCAyMTAxOSwgMjEwMjMsIDIxMDI3LCAyMTAzMSwgMjEwMzUsIDIxMDM5LCAKKyAgICAyMTA0MywgMjEwNDcsIDIxMDUxLCAyMTA1NSwgMjEwNTksIDIxMDYzLCAyMTA2NywgMjEwNzEsIDIxMDc0LCAyMTA3OCwgCisgICAgMjEwODIsIDIxMDg2LCAyMTA5MCwgMjEwOTQsIDIxMDk4LCAyMTEwMiwgMjExMDYsIDIxMTEwLCAwLCAwLCAwLCAwLCAKKyAgICAyMTExNCwgMjExMTksIDIxMTIzLCAyMTEyNiwgMjExMzEsIDIxMTM0LCAyMTEzNywgMjExNDAsIDIxMTQ1LCAyMTE0OSwgCisgICAgMjExNTQsIDIxMTU3LCAyMTE2MCwgMjExNjMsIDIxMTY2LCAyMTE2OSwgMjExNzIsIDIxMTc1LCAyMTE3OCwgMjExODEsIAorICAgIDIxMTg1LCAyMTE4OSwgMjExOTMsIDIxMTk3LCAyMTIwMSwgMjEyMDUsIDIxMjA5LCAyMTIxMywgMjEyMTcsIDIxMjIxLCAwLCAKKyAgICAwLCAwLCAyMTIyNywgMjEyMzMsIDIxMjM3LCAyMTI0MSwgMjEyNDUsIDIxMjUxLCAyMTI1NSwgMjEyNTksIDIxMjYzLCAKKyAgICAyMTI2OSwgMjEyNzMsIDIxMjc3LCAyMTI4MSwgMjEyODcsIDIxMjkxLCAyMTI5NSwgMjEyOTksIDIxMzA1LCAyMTMxMSwgCisgICAgMjEzMTcsIDIxMzI1LCAyMTMzMSwgMjEzMzcsIDIxMzQzLCAyMTM0OSwgMjEzNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMzYxLCAKKyAgICAyMTM2NCwgMjEzNjcsIDIxMzcwLCAyMTM3MywgMjEzNzYsIDIxMzgwLCAyMTM4NCwgMjEzODcsIDIxMzkxLCAyMTM5NSwgCisgICAgMjEzOTksIDIxNDAzLCAyMTQwNywgMjE0MTAsIDIxNDE0LCAyMTQxOCwgMjE0MjIsIDIxNDI2LCAyMTQzMCwgMjE0MzQsIAorICAgIDIxNDM4LCAyMTQ0MiwgMjE0NDYsIDIxNDUwLCAyMTQ1NCwgMjE0NTcsIDIxNDYxLCAyMTQ2NSwgMjE0NjksIDIxNDczLCAKKyAgICAyMTQ3NiwgMjE0ODAsIDIxNDg0LCAyMTQ4OCwgMjE0OTIsIDIxNDk2LCAyMTUwMCwgMjE1MDQsIDIxNTA4LCAyMTUxMiwgCisgICAgMjE1MTYsIDIxNTIwLCAyMTUyNCwgMjE1MjgsIDIxNTMyLCAyMTUzNSwgMjE1MzksIDIxNTQzLCAyMTU0NywgMjE1NTEsIAorICAgIDIxNTU1LCAyMTU1OSwgMjE1NjMsIDIxNTY3LCAyMTU3MSwgMjE1NzUsIDIxNTc5LCAyMTU4MywgMjE1ODcsIDIxNTkxLCAKKyAgICAyMTU5NSwgMjE1OTksIDIxNjAzLCAyMTYwNywgMjE2MTEsIDIxNjE1LCAyMTYxOSwgMjE2MjMsIDIxNjI3LCAyMTYzMSwgCisgICAgMjE2MzUsIDIxNjM5LCAyMTY0MywgMjE2NDcsIDIxNjUxLCAyMTY1NSwgMjE2NTksIDIxNjYzLCAyMTY2NywgMjE2NzAsIAorICAgIDIxNjc0LCAyMTY3OCwgMjE2ODIsIDIxNjg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTY5MCwgCisgICAgMjE2OTQsIDIxNjk3LCAyMTcwMSwgMjE3MDQsIDIxNzA4LCAyMTcxMSwgMjE3MTUsIDIxNzIxLCAyMTcyNiwgMjE3MzAsIAorICAgIDIxNzMzLCAyMTczNywgMjE3NDEsIDIxNzQ2LCAyMTc1MCwgMjE3NTUsIDIxNzU5LCAyMTc2NCwgMjE3NjgsIDIxNzczLCAKKyAgICAyMTc3NywgMjE3ODIsIDIxNzg4LCAyMTc5MiwgMjE3OTcsIDIxODAxLCAyMTgwNiwgMjE4MTIsIDIxODE2LCAyMTgyMiwgCisgICAgMjE4MjgsIDIxODMyLCAyMTgzNywgMjE4NDUsIDIxODUzLCAyMTg2MCwgMjE4NjUsIDIxODcwLCAyMTg3OSwgMjE4ODYsIAorICAgIDIxODkzLCAyMTg5OCwgMjE5MDQsIDIxOTA4LCAyMTkxMiwgMjE5MTYsIDIxOTIwLCAyMTkyNCwgMjE5MjgsIDIxOTMyLCAKKyAgICAyMTkzNiwgMjE5NDAsIDIxOTQ0LCAyMTk1MCwgMjE5NTUsIDIxOTYwLCAyMTk2MywgMjE5NjcsIDIxOTcxLCAyMTk3NiwgCisgICAgMjE5ODAsIDIxOTg1LCAyMTk4OSwgMjE5OTQsIDIxOTk4LCAyMjAwMywgMjIwMDcsIDIyMDEyLCAyMjAxNiwgMjIwMjEsIAorICAgIDIyMDI1LCAyMjAzMCwgMjIwMzYsIDIyMDQwLCAyMjA0NSwgMjIwNTAsIDIyMDU0LCAyMjA1OCwgMjIwNjIsIDIyMDY2LCAKKyAgICAyMjA2OSwgMjIwNzMsIDIyMDc5LCAyMjA4NCwgMjIwODksIDIyMDkzLCAyMjA5NywgMjIxMDEsIDIyMTA2LCAyMjExMCwgCisgICAgMjIxMTUsIDIyMTE5LCAyMjEyNCwgMjIxMjcsIDIyMTMxLCAyMjEzNSwgMjIxNDAsIDIyMTQ0LCAyMjE0OSwgMjIxNTMsIAorICAgIDIyMTU4LCAyMjE2NCwgMjIxNjgsIDIyMTcyLCAyMjE3NiwgMjIxODAsIDIyMTg0LCAyMjE4OCwgMjIxOTIsIDIyMTk2LCAKKyAgICAyMjIwMCwgMjIyMDQsIDIyMjA4LCAyMjIxNCwgMjIyMTcsIDIyMjIxLCAyMjIyNSwgMjIyMzAsIDIyMjM0LCAyMjIzOSwgCisgICAgMjIyNDMsIDIyMjQ4LCAyMjI1MiwgMjIyNTcsIDIyMjYxLCAyMjI2NiwgMjIyNzAsIDIyMjc1LCAyMjI3OSwgMjIyODQsIAorICAgIDIyMjkwLCAyMjI5NCwgMjIyOTgsIDIyMzA0LCAyMjMxMCwgMjIzMTYsIDIyMzIyLCAyMjMyNiwgMjIzMzAsIDIyMzM0LCAKKyAgICAyMjMzOCwgMjIzNDIsIDIyMzQ2LCAyMjM1MiwgMjIzNTYsIDIyMzYwLCAyMjM2NCwgMjIzNjksIDIyMzczLCAyMjM3OCwgCisgICAgMjIzODIsIDIyMzg3LCAyMjM5MSwgMjIzOTYsIDIyNDAwLCAyMjQwNSwgMjI0MDksIDIyNDE0LCAyMjQxOCwgMjI0MjMsIAorICAgIDIyNDI5LCAyMjQzMywgMjI0MzksIDIyNDQzLCAyMjQ0NywgMjI0NTEsIDIyNDU1LCAyMjQ1OSwgMjI0NjMsIDIyNDY5LCAKKyAgICAyMjQ3MiwgMjI0NzYsIDIyNDgwLCAyMjQ4NSwgMjI0ODksIDIyNDk0LCAyMjQ5OCwgMjI1MDMsIDIyNTA3LCAyMjUxMiwgCisgICAgMjI1MTYsIDIyNTIxLCAyMjUyNSwgMjI1MzAsIDIyNTM0LCAyMjUzOSwgMjI1NDUsIDIyNTQ4LCAyMjU1MiwgMjI1NTYsIAorICAgIDIyNTYxLCAyMjU2NiwgMjI1NzAsIDIyNTc0LCAyMjU3OCwgMjI1ODIsIDIyNTg2LCAyMjU5MCwgMjI1OTYsIDIyNTk5LCAKKyAgICAyMjYwMywgMjI2MDcsIDIyNjEyLCAyMjYxNiwgMjI2MjEsIDIyNjI1LCAyMjYzMCwgMjI2MzYsIDIyNjM5LCAyMjY0NCwgCisgICAgMjI2NDgsIDIyNjUyLCAyMjY1NiwgMjI2NjAsIDIyNjY0LCAyMjY2OCwgMjI2NzIsIDIyNjc4LCAyMjY4MiwgMjI2ODYsIAorICAgIDIyNjkwLCAyMjY5NSwgMjI2OTksIDIyNzA0LCAyMjcwOCwgMjI3MTMsIDIyNzE3LCAyMjcyMiwgMjI3MjYsIDIyNzMxLCAKKyAgICAyMjczNSwgMjI3NDAsIDIyNzQ0LCAyMjc0OSwgMjI3NTIsIDIyNzU2LCAyMjc2MCwgMjI3NjQsIDIyNzY4LCAyMjc3MiwgCisgICAgMjI3NzYsIDIyNzgwLCAyMjc4NCwgMjI3OTAsIDIyNzk0LCAyMjc5OCwgMjI4MDIsIDIyODA3LCAyMjgxMSwgMjI4MTYsIAorICAgIDIyODIwLCAyMjgyNSwgMjI4MjksIDIyODM0LCAyMjgzOCwgMjI4NDMsIDIyODQ3LCAyMjg1MiwgMjI4NTYsIDIyODYxLCAKKyAgICAyMjg2NywgMjI4NzAsIDIyODc1LCAyMjg3OSwgMjI4ODQsIDIyODkwLCAyMjg5NiwgMjI5MDIsIDIyOTA4LCAyMjkxNCwgCisgICAgMjI5MjAsIDIyOTI2LCAyMjkzMCwgMjI5MzQsIDIyOTM4LCAyMjk0MiwgMjI5NDYsIDIyOTUwLCAyMjk1NCwgMjI5NTgsIAorICAgIDIyOTYzLCAyMjk2NywgMjI5NzIsIDIyOTc2LCAyMjk4MSwgMjI5ODUsIDIyOTkwLCAyMjk5NCwgMjI5OTksIDIzMDAzLCAKKyAgICAyMzAwOCwgMjMwMTIsIDIzMDE3LCAyMzAyMSwgMjMwMjUsIDIzMDI5LCAyMzAzMywgMjMwMzcsIDIzMDQxLCAyMzA0NSwgCisgICAgMjMwNTEsIDIzMDU0LCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MSwgMjMwNzYsIDIzMDgwLCAyMzA4NSwgMjMwODksIAorICAgIDIzMDk0LCAyMzA5OCwgMjMxMDMsIDIzMTA3LCAyMzExMiwgMjMxMTYsIDIzMTIxLCAyMzEyNywgMjMxMzEsIDIzMTM3LCAKKyAgICAyMzE0MiwgMjMxNDgsIDIzMTUyLCAyMzE1OCwgMjMxNjMsIDIzMTY3LCAyMzE3MSwgMjMxNzUsIDIzMTc5LCAyMzE4MywgCisgICAgMjMxODgsIDIzMTkxLCAyMzE5NSwgMjMyMDAsIDIzMjA0LCAyMzIwOSwgMjMyMTIsIDIzMjE2LCAyMzIyMCwgMjMyMjQsIAorICAgIDIzMjI4LCAyMzIzMiwgMjMyMzYsIDIzMjQwLCAyMzI0NCwgMjMyNDgsIDIzMjUyLCAyMzI1NiwgMjMyNjEsIDIzMjY1LCAKKyAgICAyMzI2OSwgMjMyNzUsIDIzMjc5LCAyMzI4NSwgMjMyODksIDIzMjk1LCAyMzI5OSwgMjMzMDMsIDIzMzA3LCAyMzMxMSwgCisgICAgMjMzMTUsIDIzMzIwLCAyMzMyNCwgMjMzMjgsIDIzMzMyLCAyMzMzNiwgMjMzNDAsIDIzMzQ0LCAyMzM0OCwgMjMzNTIsIAorICAgIDIzMzU2LCAyMzM2MCwgMjMzNjYsIDIzMzcyLCAyMzM3OCwgMjMzODQsIDIzMzkwLCAyMzM5NSwgMjM0MDEsIDIzNDA3LCAKKyAgICAyMzQxMywgMjM0MTcsIDIzNDIxLCAyMzQyNSwgMjM0MjksIDIzNDMzLCAyMzQzNywgMjM0NDEsIDIzNDQ1LCAyMzQ0OSwgCisgICAgMjM0NTMsIDIzNDU3LCAyMzQ2MSwgMjM0NjUsIDIzNDcwLCAyMzQ3NSwgMjM0ODAsIDIzNDg0LCAyMzQ4OCwgMjM0OTIsIAorICAgIDIzNDk2LCAyMzUwMCwgMjM1MDQsIDIzNTA4LCAyMzUxMiwgMjM1MTYsIDIzNTIwLCAyMzUyNiwgMjM1MzIsIDIzNTM4LCAKKyAgICAyMzU0NCwgMjM1NTAsIDIzNTU2LCAyMzU2MiwgMjM1NjgsIDIzNTc0LCAyMzU3OCwgMjM1ODIsIDIzNTg2LCAyMzU5MCwgCisgICAgMjM1OTQsIDIzNTk4LCAyMzYwMiwgMjM2MDgsIDIzNjE0LCAyMzYyMCwgMjM2MjYsIDIzNjMyLCAyMzYzOCwgMjM2NDQsIAorICAgIDIzNjUwLCAyMzY1NiwgMjM2NjEsIDIzNjY2LCAyMzY3MSwgMjM2NzYsIDIzNjgyLCAyMzY4OCwgMjM2OTQsIDIzNzAwLCAKKyAgICAyMzcwNiwgMjM3MTIsIDIzNzE4LCAyMzcyMywgMjM3MjksIDIzNzM1LCAyMzc0MSwgMjM3NDYsIDIzNzUyLCAyMzc1OCwgCisgICAgMjM3NjQsIDIzNzY5LCAyMzc3NCwgMjM3NzksIDIzNzg0LCAyMzc4OSwgMjM3OTQsIDIzNzk5LCAyMzgwNCwgMjM4MDksIAorICAgIDIzODE0LCAyMzgxOSwgMjM4MjQsIDIzODI4LCAyMzgzMywgMjM4MzgsIDIzODQzLCAyMzg0OCwgMjM4NTMsIDIzODU4LCAKKyAgICAyMzg2MywgMjM4NjgsIDIzODczLCAyMzg3OCwgMjM4ODMsIDIzODg4LCAyMzg5MywgMjM4OTgsIDIzOTAzLCAyMzkwOCwgCisgICAgMjM5MTMsIDIzOTE4LCAyMzkyMywgMjM5MjgsIDIzOTMzLCAyMzkzOCwgMjM5NDMsIDIzOTQ4LCAyMzk1MywgMjM5NTgsIAorICAgIDIzOTYzLCAyMzk2OCwgMjM5NzMsIDIzOTc3LCAyMzk4MiwgMjM5ODcsIDIzOTkyLCAyMzk5NywgMjQwMDIsIDI0MDA3LCAKKyAgICAyNDAxMiwgMjQwMTcsIDI0MDIyLCAyNDAyNywgMjQwMzIsIDI0MDM3LCAyNDA0MiwgMjQwNDcsIDI0MDUyLCAyNDA1NywgCisgICAgMjQwNjIsIDI0MDY3LCAyNDA3MiwgMjQwNzcsIDI0MDgyLCAyNDA4NywgMjQwOTIsIDI0MDk3LCAyNDEwMiwgMjQxMDYsIAorICAgIDI0MTExLCAyNDExNiwgMjQxMjEsIDI0MTI2LCAyNDEzMSwgMjQxMzUsIDI0MTQwLCAyNDE0NSwgMjQxNTAsIDI0MTU1LCAKKyAgICAyNDE2MCwgMjQxNjQsIDI0MTY5LCAyNDE3NSwgMjQxODAsIDI0MTg1LCAyNDE5MCwgMjQxOTUsIDI0MjAxLCAyNDIwNiwgCisgICAgMjQyMTEsIDI0MjE2LCAyNDIyMSwgMjQyMjYsIDI0MjMxLCAyNDIzNiwgMjQyNDEsIDI0MjQ2LCAyNDI1MSwgMjQyNTYsIAorICAgIDI0MjYxLCAyNDI2NiwgMjQyNzEsIDI0Mjc2LCAyNDI4MSwgMjQyODYsIDI0MjkxLCAyNDI5NiwgMjQzMDEsIDI0MzA2LCAKKyAgICAyNDMxMSwgMjQzMTYsIDI0MzIxLCAyNDMyNiwgMjQzMzEsIDI0MzM2LCAyNDM0MSwgMjQzNDYsIDI0MzUxLCAyNDM1NiwgCisgICAgMjQzNjEsIDI0MzY2LCAyNDM3MSwgMjQzNzYsIDI0MzgxLCAyNDM4NiwgMjQzOTEsIDI0Mzk2LCAyNDQwMSwgMjQ0MDYsIAorICAgIDI0NDExLCAyNDQxNiwgMjQ0MjEsIDI0NDI3LCAyNDQzMiwgMjQ0MzcsIDI0NDQyLCAyNDQ0NywgMjQ0NTIsIDI0NDU3LCAKKyAgICAyNDQ2MiwgMjQ0NjcsIDI0NDcyLCAyNDQ3NywgMjQ0ODIsIDI0NDg3LCAyNDQ5MiwgMjQ0OTcsIDI0NTAyLCAyNDUwNywgCisgICAgMjQ1MTIsIDI0NTE3LCAyNDUyMiwgMjQ1MjcsIDI0NTMyLCAyNDUzNywgMjQ1NDIsIDI0NTQ3LCAyNDU1MiwgMjQ1NTcsIAorICAgIDI0NTYyLCAyNDU2NywgMjQ1NzIsIDI0NTc3LCAyNDU4MiwgMjQ1ODcsIDI0NTkyLCAyNDU5NywgMjQ2MDIsIDI0NjA3LCAKKyAgICAyNDYxMiwgMjQ2MTcsIDI0NjIzLCAyNDYyNywgMjQ2MzEsIDI0NjM1LCAyNDYzOSwgMjQ2NDMsIDI0NjQ3LCAyNDY1MSwgCisgICAgMjQ2NTUsIDI0NjYxLCAyNDY2NywgMjQ2NzMsIDI0Njc5LCAyNDY4NSwgMjQ2OTEsIDI0Njk3LCAyNDcwNCwgMjQ3MTAsIAorICAgIDI0NzE1LCAyNDcyMCwgMjQ3MjUsIDI0NzMwLCAyNDczNSwgMjQ3NDAsIDI0NzQ1LCAyNDc1MCwgMjQ3NTUsIDI0NzYwLCAKKyAgICAyNDc2NSwgMjQ3NzAsIDI0Nzc1LCAyNDc4MCwgMjQ3ODUsIDI0NzkwLCAyNDc5NSwgMjQ4MDAsIDI0ODA1LCAyNDgxMCwgCisgICAgMjQ4MTUsIDI0ODIwLCAyNDgyNSwgMjQ4MzAsIDI0ODM1LCAyNDg0MCwgMjQ4NDUsIDI0ODUwLCAwLCAwLCAwLCAyNDg1NiwgCisgICAgMjQ4NjYsIDI0ODcwLCAyNDg3NywgMjQ4ODEsIDI0ODg1LCAyNDg4OSwgMjQ4OTcsIDI0OTAxLCAyNDkwNiwgMjQ5MTEsIAorICAgIDI0OTE2LCAyNDkyMCwgMjQ5MjUsIDI0OTMwLCAyNDkzMywgMjQ5MzcsIDI0OTQxLCAyNDk1MCwgMjQ5NTQsIDI0OTU4LCAKKyAgICAyNDk2NCwgMjQ5NjgsIDI0OTcyLCAyNDk4MCwgMjQ5ODQsIDI0OTkyLCAyNDk5OCwgMjUwMDQsIDI1MDEwLCAyNTAxNiwgCisgICAgMjUwMjUsIDI1MDMwLCAyNTAzNCwgMjUwNDMsIDI1MDQ2LCAyNTA1MiwgMjUwNTYsIDI1MDYyLCAyNTA2NywgMjUwNzMsIAorICAgIDI1MDgxLCAyNTA4NywgMjUwOTIsIDI1MDk5LCAyNTEwNCwgMjUxMDgsIDI1MTEyLCAyNTEyMiwgMjUxMjgsIDI1MTMyLCAKKyAgICAyNTE0MiwgMjUxNDgsIDI1MTUyLCAyNTE1NiwgMjUxNjMsIDI1MTcwLCAyNTE3NSwgMjUxODAsIDI1MTg5LCAyNTE5MywgCisgICAgMjUxOTcsIDI1MjAxLCAyNTIwOSwgMjUyMTYsIDI1MjIwLCAyNTIyNCwgMjUyMjgsIDI1MjMyLCAyNTIzNiwgMjUyNDAsIAorICAgIDI1MjQ0LCAyNTI0OCwgMjUyNTIsIDI1MjU2LCAyNTI2MCwgMjUyNjUsIDI1MjcwLCAyNTI3NSwgMjUyNzksIDI1MjgzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTI4NywgMjUyOTEsIDI1Mjk1LCAyNTI5OSwgCisgICAgMjUzMDMsIDI1MzA4LCAyNTMxMywgMjUzMTgsIDI1MzIzLCAyNTMyNywgMjUzMzEsIDI1MzM2LCAyNTM0MCwgMCwgMjUzNDQsIAorICAgIDI1MzQ5LCAyNTM1NCwgMjUzNTksIDI1MzYzLCAyNTM2OCwgMjUzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI1Mzc4LCAyNTM4MiwgMjUzODYsIDI1MzkwLCAyNTM5NCwgMjUzOTksIDI1NDA0LCAyNTQwOSwgMjU0MTQsIDI1NDE4LCAKKyAgICAyNTQyMiwgMjU0MjcsIDI1NDMxLCAyNTQzNSwgMjU0MzksIDI1NDQ0LCAyNTQ0OSwgMjU0NTQsIDI1NDU4LCAyNTQ2MywgCisgICAgMjU0NjgsIDI1NDczLCAyNTQ3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0ODQsIDI1NDg4LCAyNTQ5MiwgCisgICAgMjU0OTYsIDI1NTAwLCAyNTUwNSwgMjU1MTAsIDI1NTE1LCAyNTUyMCwgMjU1MjQsIDI1NTI4LCAyNTUzMywgMjU1MzcsIAorICAgIDI1NTQxLCAyNTU0NSwgMjU1NTAsIDI1NTU1LCAyNTU2MCwgMjU1NjQsIDI1NTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNTU3NCwgMjU1NzgsIDI1NTgyLCAyNTU4NiwgMjU1OTAsIDI1NTk1LCAyNTYwMCwgMjU2MDUsIAorICAgIDI1NjEwLCAyNTYxNCwgMjU2MTgsIDI1NjIzLCAyNTYyNywgMCwgMjU2MzEsIDI1NjM2LCAyNTY0MSwgMCwgMjU2NDYsIAorICAgIDI1NjUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTY1NiwgMjU2NTksIDI1NjYzLCAyNTY2NywgCisgICAgMjU2NzEsIDI1Njc1LCAyNTY3OSwgMjU2ODMsIDI1Njg3LCAyNTY5MSwgMjU2OTUsIDI1Njk5LCAyNTcwMywgMjU3MDcsIAorICAgIDI1NzExLCAyNTcxNSwgMjU3MTksIDI1NzIzLCAyNTcyNiwgMjU3MzAsIDI1NzM0LCAyNTczOCwgMjU3NDIsIDI1NzQ2LCAKKyAgICAyNTc1MCwgMjU3NTQsIDI1NzU4LCAyNTc2MiwgMjU3NjYsIDI1NzcwLCAyNTc3NCwgMjU3NzgsIDI1NzgyLCAyNTc4NSwgCisgICAgMjU3ODksIDI1NzkzLCAyNTc5OSwgMjU4MDUsIDI1ODExLCAyNTgxNywgMjU4MjMsIDI1ODI5LCAyNTgzNSwgMjU4NDEsIAorICAgIDI1ODQ3LCAyNTg1MywgMjU4NTksIDI1ODY1LCAyNTg3MSwgMjU4NzcsIDI1ODg2LCAyNTg5NSwgMjU5MDEsIDI1OTA3LCAKKyAgICAyNTkxMywgMjU5MTgsIDI1OTIyLCAyNTkyNywgMjU5MzIsIDI1OTM3LCAyNTk0MSwgMjU5NDYsIDI1OTUxLCAyNTk1NiwgCisgICAgMjU5NjAsIDI1OTY1LCAyNTk2OSwgMjU5NzQsIDI1OTc5LCAyNTk4NCwgMjU5ODksIDI1OTkzLCAyNTk5NywgMjYwMDEsIAorICAgIDI2MDA1LCAyNjAwOSwgMjYwMTMsIDI2MDE3LCAyNjAyMSwgMjYwMjUsIDI2MDI5LCAyNjAzNSwgMjYwMzksIDI2MDQzLCAKKyAgICAyNjA0NywgMjYwNTEsIDI2MDU1LCAyNjA2MywgMjYwNjksIDI2MDczLCAyNjA3OSwgMjYwODMsIDI2MDg5LCAyNjA5MywgMCwgCisgICAgMCwgMjYwOTcsIDI2MTAxLCAyNjEwNCwgMjYxMDcsIDI2MTEwLCAyNjExMywgMjYxMTYsIDI2MTE5LCAyNjEyMiwgMjYxMjUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2MTI4LCAyNjEzNiwgMjYxNDQsIDI2MTUyLCAyNjE2MCwgMjYxNjgsIDI2MTc2LCAyNjE4NCwgCisgICAgMjYxOTIsIDI2MjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIwOCwgMjYyMTEsIDI2MjE0LCAyNjIxNywgMjYyMjIsIDI2MjI1LCAKKyAgICAyNjIzMCwgMjYyMzcsIDI2MjQ1LCAyNjI1MCwgMjYyNTcsIDI2MjYwLCAyNjI2NywgMjYyNzQsIDI2MjgxLCAwLCAyNjI4NSwgCisgICAgMjYyODksIDI2MjkyLCAyNjI5NSwgMjYyOTgsIDI2MzAxLCAyNjMwNCwgMjYzMDcsIDI2MzEwLCAyNjMxMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjYzMTYsIDI2MzE5LCAyNjMyMiwgMjYzMjUsIDI2MzI4LCAyNjMzMSwgMjYzMzUsIDI2MzM5LCAyNjM0MywgCisgICAgMjYzNDYsIDI2MzUwLCAyNjM1NCwgMjYzNTcsIDI2MzYxLCAyNjM2NSwgMjYzNjgsIDI2MzcyLCAyNjM3NiwgMjYzODAsIAorICAgIDI2Mzg0LCAyNjM4OCwgMjYzOTIsIDI2Mzk2LCAyNjM5OSwgMjY0MDIsIDI2NDA2LCAyNjQxMCwgMjY0MTMsIDI2NDE3LCAKKyAgICAyNjQyMSwgMjY0MjUsIDI2NDI5LCAyNjQzMywgMjY0MzcsIDI2NDQxLCAyNjQ0NSwgMjY0NTIsIDI2NDU3LCAyNjQ2MiwgCisgICAgMjY0NjcsIDI2NDcyLCAyNjQ3OCwgMjY0ODQsIDI2NDkwLCAyNjQ5NiwgMjY1MDEsIDI2NTA3LCAyNjUxMywgMjY1MTgsIAorICAgIDI2NTI0LCAyNjUzMCwgMjY1MzYsIDI2NTQyLCAyNjU0OCwgMjY1NTMsIDI2NTU5LCAyNjU2NCwgMjY1NzAsIDI2NTc2LCAKKyAgICAyNjU4MiwgMjY1ODgsIDI2NTk0LCAyNjU5OSwgMjY2MDQsIDI2NjEwLCAyNjYxNiwgMjY2MjEsIDI2NjI3LCAyNjYzMiwgCisgICAgMjY2MzgsIDI2NjQzLCAyNjY0OCwgMjY2NTQsIDI2NjYwLCAyNjY2NiwgMjY2NzIsIDI2Njc4LCAyNjY4NCwgMjY2OTAsIAorICAgIDI2Njk2LCAyNjcwMiwgMjY3MDgsIDI2NzE0LCAyNjcyMCwgMjY3MjUsIDI2NzMwLCAyNjczNSwgMjY3NDEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI2NzQ3LCAyNjc1NiwgMjY3NjUsIDI2NzczLCAyNjc4MSwgMjY3OTEsIDI2Nzk5LCAyNjgwOCwgCisgICAgMjY4MTUsIDI2ODIyLCAyNjgyOSwgMjY4MzcsIDI2ODQ1LCAyNjg1MywgMjY4NjEsIDI2ODY5LCAyNjg3NywgMjY4ODUsIAorICAgIDI2ODkzLCAyNjkwMCwgMjY5MDgsIDI2OTE2LCAyNjkyNCwgMjY5MzIsIDI2OTQwLCAyNjk1MCwgMjY5NjAsIDI2OTcwLCAKKyAgICAyNjk4MCwgMjY5OTAsIDI3MDAwLCAyNzAxMCwgMjcwMjAsIDI3MDMwLCAyNzA0MCwgMjcwNTAsIDI3MDYwLCAyNzA3MCwgCisgICAgMjcwODAsIDI3MDg4LCAyNzA5NiwgMjcxMDYsIDI3MTE0LCAwLCAwLCAwLCAwLCAwLCAyNzEyNCwgMjcxMjgsIDI3MTMyLCAKKyAgICAyNzEzNiwgMjcxNDAsIDI3MTQ0LCAyNzE0OCwgMjcxNTIsIDI3MTU2LCAyNzE2MCwgMjcxNjQsIDI3MTY4LCAyNzE3MiwgCisgICAgMjcxNzYsIDI3MTgwLCAyNzE4NCwgMjcxODgsIDI3MTkyLCAyNzE5NiwgMjcyMDAsIDI3MjA0LCAyNzIwOCwgMjcyMTIsIAorICAgIDI3MjE2LCAyNzIyMiwgMjcyMjYsIDI3MjMyLCAyNzIzNiwgMjcyNDIsIDI3MjQ2LCAyNzI1MiwgMjcyNTYsIDI3MjYwLCAKKyAgICAyNzI2NCwgMjcyNjgsIDI3MjcyLCAyNzI3NiwgMjcyODIsIDI3Mjg4LCAyNzI5NCwgMjczMDAsIDI3MzA1LCAyNzMxMCwgCisgICAgMjczMTUsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM5LCAyNzM0NiwgMjczNTIsIDI3MzU3LCAyNzM2MiwgMjczNjYsIAorICAgIDI3MzcwLCAyNzM3NCwgMjczNzgsIDI3MzgyLCAyNzM4NiwgMjczOTAsIDI3Mzk2LCAyNzQwMiwgMjc0MDgsIDI3NDEzLCAKKyAgICAyNzQyMCwgMjc0MjUsIDI3NDMwLCAyNzQzNiwgMjc0NDEsIDI3NDQ4LCAyNzQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjc0NjEsIDI3NDY2LCAyNzQ2OSwgMjc0NzMsIDI3NDc3LCAyNzQ4MSwgMjc0ODUsIDI3NDg5LCAyNzQ5MywgCisgICAgMjc0OTcsIDI3NTAxLCAyNzUwNSwgMjc1MDksIDI3NTEzLCAyNzUxNywgMjc1MjEsIDI3NTI0LCAyNzUyNywgMjc1MzEsIAorICAgIDI3NTM1LCAyNzUzOSwgMjc1NDIsIDI3NTQ1LCAyNzU0OCwgMjc1NTIsIDI3NTU2LCAyNzU2MCwgMjc1NjQsIDI3NTY4LCAwLCAKKyAgICAwLCAwLCAyNzU3MSwgMjc1NzUsIDI3NTc5LCAyNzU4MywgMjc1ODgsIDI3NTkzLCAyNzU5OCwgMjc2MDMsIDI3NjA3LCAKKyAgICAyNzYxMSwgMjc2MTYsIDI3NjIxLCAwLCAwLCAwLCAwLCAyNzYyNywgMjc2MzEsIDI3NjM2LCAyNzY0MSwgMjc2NDYsIAorICAgIDI3NjUwLCAyNzY1NCwgMjc2NTgsIDI3NjYyLCAyNzY2NywgMjc2NzEsIDI3Njc1LCAwLCAwLCAwLCAwLCAyNzY3OSwgMCwgMCwgCisgICAgMCwgMjc2ODMsIDI3Njg3LCAyNzY5MSwgMjc2OTUsIDI3Njk4LCAyNzcwMSwgMjc3MDQsIDI3NzA3LCAyNzcxMCwgMjc3MTMsIAorICAgIDI3NzE2LCAyNzcxOSwgMjc3MjIsIDI3NzI3LCAyNzczMywgMjc3MzksIDI3NzQ1LCAyNzc1MSwgMjc3NTYsIDI3NzYyLCAKKyAgICAyNzc2OCwgMjc3NzQsIDI3Nzc5LCAyNzc4NSwgMjc3OTAsIDI3Nzk2LCAyNzgwMiwgMjc4MDcsIDI3ODEzLCAyNzgxOSwgCisgICAgMjc4MjUsIDI3ODMwLCAyNzgzNSwgMjc4NDAsIDI3ODQ2LCAyNzg1MiwgMjc4NTcsIDI3ODYzLCAyNzg2OCwgMjc4NzQsIAorICAgIDI3ODc5LCAyNzg4NSwgMCwgMCwgMjc4OTEsIDI3ODk3LCAyNzkwMywgMjc5MDksIDI3OTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNzkyMSwgMjc5MjgsIDI3OTM1LCAyNzk0MSwgMjc5NDgsIDI3OTU1LCAyNzk2MSwgMjc5NjgsIAorICAgIDI3OTc1LCAyNzk4MiwgMjc5ODksIDI3OTk1LCAyODAwMiwgMjgwMDksIDI4MDE1LCAyODAyMiwgMjgwMjksIDI4MDM1LCAKKyAgICAyODA0MiwgMjgwNDksIDI4MDU1LCAyODA2MSwgMjgwNjgsIDI4MDc0LCAyODA4MCwgMjgwODcsIDI4MDkzLCAyODEwMCwgCisgICAgMjgxMDcsIDI4MTE0LCAyODEyMSwgMjgxMjgsIDI4MTM1LCAyODE0MSwgMjgxNDgsIDI4MTU1LCAyODE2MSwgMjgxNjgsIAorICAgIDI4MTc1LCAyODE4MiwgMjgxODksIDI4MTk2LCAyODIwMywgMjgyMTAsIDAsIDAsIDAsIDAsIDI4MjE3LCAyODIyNSwgCisgICAgMjgyMzIsIDI4MjM5LCAyODI0NSwgMjgyNTIsIDI4MjU4LCAyODI2NSwgMjgyNzEsIDI4Mjc4LCAyODI4NSwgMjgyOTIsIAorICAgIDI4Mjk5LCAyODMwNiwgMjgzMTMsIDI4MzIwLCAyODMyNywgMjgzMzQsIDI4MzQxLCAyODM0OCwgMjgzNTQsIDI4MzYwLCAKKyAgICAyODM2NywgMjgzNzQsIDI4MzgxLCAyODM4NywgMCwgMCwgMCwgMCwgMCwgMCwgMjgzOTMsIDI4Mzk5LCAyODQwNCwgMjg0MDksIAorICAgIDI4NDE0LCAyODQxOSwgMjg0MjQsIDI4NDI5LCAyODQzNCwgMjg0MzksIDI4NDQ0LCAwLCAwLCAwLCAyODQ1MCwgMjg0NTYsIAorICAgIDI4NDYyLCAyODQ2NiwgMjg0NzIsIDI4NDc4LCAyODQ4NCwgMjg0OTAsIDI4NDk2LCAyODUwMiwgMjg1MDgsIDI4NTE0LCAKKyAgICAyODUyMCwgMjg1MjYsIDI4NTMyLCAyODUzOCwgMjg1NDQsIDI4NTUwLCAyODU1NiwgMjg1NjAsIDI4NTY2LCAyODU3MiwgCisgICAgMjg1NzgsIDI4NTg0LCAyODU5MCwgMjg1OTYsIDI4NjAyLCAyODYwOCwgMjg2MTQsIDI4NjIwLCAyODYyNiwgMjg2MzIsIAorICAgIDI4NjM4LCAyODY0NCwgMjg2NTAsIDI4NjU0LCAyODY1OSwgMjg2NjQsIDI4NjY5LCAyODY3MywgMjg2NzgsIDI4NjgyLCAKKyAgICAyODY4NywgMjg2OTIsIDI4Njk3LCAyODcwMSwgMjg3MDYsIDI4NzExLCAyODcxNiwgMjg3MjEsIDI4NzI2LCAyODczMCwgCisgICAgMjg3MzQsIDI4NzM5LCAyODc0NCwgMjg3NDksIDI4NzUzLCAyODc1NywgMjg3NjIsIDI4NzY3LCAyODc3MiwgMjg3NzcsIDAsIAorICAgIDAsIDI4NzgzLCAyODc4NywgMjg3OTQsIDI4Nzk5LCAyODgwNSwgMjg4MTEsIDI4ODE2LCAyODgyMiwgMjg4MjgsIDI4ODMzLCAKKyAgICAyODgzOSwgMjg4NDUsIDI4ODUxLCAyODg1NywgMjg4NjMsIDI4ODY4LCAyODg3MywgMjg4NzksIDI4ODg0LCAyODg5MCwgCisgICAgMjg4OTUsIDI4OTAxLCAyODkwNywgMjg5MTMsIDI4OTE5LCAyODkyMywgMjg5MjgsIDI4OTMzLCAyODkzOSwgMjg5NDUsIAorICAgIDI4OTUwLCAyODk1NiwgMjg5NjIsIDI4OTY2LCAyODk3MSwgMjg5NzYsIDI4OTgwLCAyODk4NSwgMjg5OTAsIDI4OTk1LCAKKyAgICAyOTAwMCwgMjkwMDYsIDI5MDEyLCAyOTAxOCwgMjkwMjMsIDI5MDI4LCAyOTAzMiwgMjkwMzcsIDI5MDQxLCAyOTA0NiwgCisgICAgMjkwNTAsIDI5MDU1LCAyOTA2MCwgMjkwNjUsIDI5MDcwLCAyOTA3NywgMjkwODQsIDI5MDkyLCAyOTEwMywgMjkxMTIsIAorICAgIDI5MTIwLCAyOTEyNywgMjkxMzgsIDI5MTQ0LCAyOTE1MSwgMCwgMjkxNTgsIDI5MTYzLCAyOTE2OCwgMjkxNzYsIDI5MTgyLCAKKyAgICAyOTE5MCwgMjkxOTUsIDI5MjAxLCAyOTIwNywgMjkyMTMsIDI5MjE4LCAyOTIyNCwgMjkyMjksIDI5MjM2LCAyOTI0MiwgCisgICAgMjkyNDcsIDI5MjUzLCAyOTI1OSwgMjkyNjUsIDI5MjcyLCAyOTI3OSwgMjkyODYsIDI5MjkxLCAyOTI5NiwgMjkzMDMsIAorICAgIDI5MzEwLCAyOTMxNywgMjkzMjQsIDI5MzMxLCAwLCAwLCAyOTMzOCwgMjkzNDUsIDI5MzUyLCAyOTM1OCwgMjkzNjQsIAorICAgIDI5MzcwLCAyOTM3NiwgMjkzODIsIDI5Mzg4LCAyOTM5NCwgMjk0MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NDA2LCAyOTQxMiwgCisgICAgMjk0MTcsIDI5NDIyLCAyOTQyNywgMjk0MzIsIDI5NDM3LCAyOTQ0MiwgMjk0NDcsIDI5NDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyOTQ1NywgMjk0NjIsIDI5NDY3LCAyOTQ3MiwgMjk0NzcsIDI5NDgyLCAyOTQ4NywgMjk0OTUsIDI5NTAyLCAyOTUwNywgCisgICAgMjk1MTIsIDI5NTE3LCAyOTUyMiwgMjk1MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDgxLCAyNjQ4NiwgCi0gICAgMjY0ODksIDI2NDkzLCAyNjQ5NywgMjY1MDEsIDI2NTA1LCAyNjUwOSwgMjY1MTMsIDI2NTE3LCAyNjUyMSwgMjY1MjUsIAotICAgIDI2NTI5LCAyNjUzMywgMjY1MzcsIDI2NTQxLCAyNjU0NSwgMjY1NDgsIDI2NTUyLCAyNjU1NiwgMjY1NjAsIDI2NTYzLCAKLSAgICAyNjU2NiwgMjY1NjksIDI2NTczLCAyNjU3NywgMjY1ODEsIDI2NTg1LCAyNjU4OSwgMCwgMCwgMCwgMjY1OTIsIDI2NTk2LCAKLSAgICAyNjYwMCwgMjY2MDQsIDI2NjA5LCAyNjYxNCwgMjY2MTksIDI2NjI0LCAyNjYyOCwgMjY2MzIsIDI2NjM3LCAyNjY0MiwgMCwgCi0gICAgMCwgMCwgMCwgMjY2NDgsIDI2NjUyLCAyNjY1NywgMjY2NjIsIDI2NjY3LCAyNjY3MiwgMjY2NzYsIDI2NjgwLCAyNjY4NCwgCi0gICAgMjY2ODksIDI2NjkzLCAyNjY5NywgMCwgMCwgMCwgMCwgMjY3MDEsIDAsIDAsIDAsIDI2NzA1LCAyNjcwOSwgMjY3MTMsIAotICAgIDI2NzE3LCAyNjcyMCwgMjY3MjMsIDI2NzI2LCAyNjcyOSwgMjY3MzIsIDI2NzM1LCAyNjczOCwgMjY3NDEsIDI2NzQ0LCAKLSAgICAyNjc0OSwgMjY3NTUsIDI2NzYxLCAyNjc2NywgMjY3NzMsIDI2Nzc4LCAyNjc4NCwgMjY3OTAsIDI2Nzk2LCAyNjgwMSwgCi0gICAgMjY4MDcsIDI2ODEyLCAyNjgxOCwgMjY4MjQsIDI2ODI5LCAyNjgzNSwgMjY4NDEsIDI2ODQ3LCAyNjg1MywgMjY4NTgsIAotICAgIDI2ODYzLCAyNjg2OSwgMjY4NzUsIDI2ODgwLCAyNjg4NiwgMjY4OTEsIDI2ODk3LCAyNjkwMiwgMjY5MDgsIDAsIDAsIAotICAgIDI2OTE0LCAyNjkyMCwgMjY5MjYsIDI2OTMyLCAyNjkzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjY5NDQsIDI2OTUxLCAyNjk1OCwgMjY5NjQsIDI2OTcxLCAyNjk3OCwgMjY5ODQsIDI2OTkxLCAyNjk5OCwgMjcwMDUsIAotICAgIDI3MDEyLCAyNzAxOCwgMjcwMjUsIDI3MDMyLCAyNzAzOCwgMjcwNDUsIDI3MDUyLCAyNzA1OSwgMjcwNjYsIDI3MDczLCAKLSAgICAyNzA4MCwgMjcwODYsIDI3MDkzLCAyNzA5OSwgMjcxMDUsIDI3MTEyLCAyNzExOCwgMjcxMjUsIDI3MTMyLCAyNzEzOSwgCi0gICAgMjcxNDYsIDI3MTUzLCAyNzE2MCwgMjcxNjYsIDI3MTczLCAyNzE4MCwgMjcxODYsIDI3MTkzLCAyNzIwMCwgMjcyMDcsIAotICAgIDI3MjE0LCAyNzIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyMjgsIDI3MjM2LCAyNzI0MywgMjcyNTAsIDI3MjU2LCAyNzI2MywgCi0gICAgMjcyNjksIDI3Mjc2LCAyNzI4MiwgMjcyODksIDI3Mjk2LCAyNzMwMywgMjczMTAsIDI3MzE3LCAyNzMyNCwgMjczMzEsIAotICAgIDI3MzM4LCAyNzM0NSwgMjczNTEsIDI3MzU4LCAyNzM2NCwgMjczNzAsIDI3Mzc3LCAyNzM4NCwgMjczOTEsIDI3Mzk3LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNzQwMywgMjc0MDksIDI3NDE0LCAyNzQxOSwgMjc0MjQsIDI3NDI5LCAyNzQzNCwgMjc0MzksIAotICAgIDI3NDQ0LCAyNzQ0OSwgMCwgMCwgMCwgMCwgMjc0NTQsIDI3NDYwLCAyNzQ2NiwgMjc0NzAsIDI3NDc2LCAyNzQ4MiwgCi0gICAgMjc0ODgsIDI3NDk0LCAyNzUwMCwgMjc1MDYsIDI3NTEyLCAyNzUxOCwgMjc1MjQsIDI3NTMwLCAyNzUzNiwgMjc1NDIsIAotICAgIDI3NTQ4LCAyNzU1NCwgMjc1NjAsIDI3NTY0LCAyNzU3MCwgMjc1NzYsIDI3NTgyLCAyNzU4OCwgMjc1OTQsIDI3NjAwLCAKLSAgICAyNzYwNiwgMjc2MTIsIDI3NjE4LCAyNzYyNCwgMjc2MzAsIDI3NjM2LCAyNzY0MiwgMjc2NDgsIDI3NjU0LCAyNzY1OCwgCi0gICAgMjc2NjMsIDI3NjY4LCAyNzY3MywgMjc2NzcsIDI3NjgyLCAyNzY4NiwgMjc2OTEsIDI3Njk2LCAyNzcwMSwgMjc3MDYsIAotICAgIDI3NzExLCAyNzcxNiwgMjc3MjEsIDI3NzI2LCAyNzczMSwgMjc3MzUsIDI3NzM5LCAyNzc0NCwgMjc3NDksIDI3NzU0LCAKLSAgICAyNzc1OCwgMjc3NjIsIDI3NzY3LCAyNzc3MiwgMjc3NzcsIDI3NzgyLCAwLCAwLCAyNzc4OCwgMjc3OTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NTMyLCAyOTUzOCwgCisgICAgMjk1NDQsIDI5NTQ4LCAyOTU1MiwgMjk1NTYsIDI5NTYwLCAyOTU2NiwgMjk1NzAsIDI5NTc2LCAyOTU4MCwgMjk1ODYsIAorICAgIDI5NTkyLCAyOTYwMCwgMjk2MDYsIDI5NjE0LCAyOTYxOCwgMjk2MjIsIDI5NjI2LCAyOTYzMiwgMjk2MzUsIDI5NjQwLCAKKyAgICAyOTY0NCwgMjk2NTAsIDI5NjU0LCAyOTY1OCwgMjk2NjQsIDI5NjY4LCAyOTY3NCwgMjk2NzgsIDI5Njg0LCAyOTY5MiwgCisgICAgMjk3MDAsIDI5NzA4LCAyOTcxNCwgMjk3MTgsIDI5NzI0LCAyOTcyOCwgMjk3MzQsIDI5NzM3LCAyOTc0MCwgMjk3NDYsIAorICAgIDI5NzUwLCAyOTc1NiwgMjk3NTksIDI5NzYyLCAyOTc2NSwgMjk3NjksIDI5NzczLCAyOTc3OSwgMjk3ODUsIDI5Nzg5LCAKKyAgICAyOTc5MiwgMjk3OTYsIDI5ODAxLCAyOTgwNiwgMjk4MTMsIDI5ODE4LCAyOTgyNSwgMjk4MzIsIDI5ODQxLCAyOTg0OCwgCisgICAgMjk4NTcsIDI5ODYyLCAyOTg2OSwgMjk4NzYsIDI5ODg1LCAyOTg5MCwgMjk4OTcsIDI5OTAyLCAyOTkwOCwgMjk5MTQsIAorICAgIDI5OTIwLCAyOTkyNiwgMjk5MzIsIDI5OTM4LCAwLCAwLCAwLCAwLCAyOTk0NCwgMjk5NDgsIDI5OTUxLCAyOTk1NCwgCisgICAgMjk5NTcsIDI5OTYwLCAyOTk2MywgMjk5NjYsIDI5OTY5LCAyOTk3MiwgMjk5NzUsIDI5OTc4LCAyOTk4MSwgMjk5ODQsIAorICAgIDI5OTg5LCAyOTk5NCwgMjk5OTksIDMwMDAyLCAzMDAwNywgMzAwMTIsIDMwMDE3LCAzMDAyMiwgMzAwMjksIDMwMDM0LCAKKyAgICAzMDAzOSwgMzAwNDQsIDMwMDQ5LCAzMDA1NiwgMzAwNjIsIDMwMDY4LCAzMDA3NCwgMzAwODAsIDMwMDg2LCAzMDA5NSwgCisgICAgMzAxMDQsIDMwMTEwLCAzMDExNiwgMzAxMjUsIDMwMTM0LCAzMDE0MywgMzAxNTIsIDMwMTYxLCAzMDE3MCwgMzAxNzksIAorICAgIDMwMTg4LCAwLCAwLCAwLCAzMDE5NywgMzAyMDIsIDMwMjA3LCAzMDIxMiwgMzAyMTYsIDMwMjIwLCAzMDIyNCwgMzAyMjksIAorICAgIDMwMjMzLCAzMDIzNywgMzAyNDIsIDMwMjQ2LCAzMDI1MSwgMzAyNTYsIDMwMjYxLCAzMDI2NiwgMzAyNzEsIDMwMjc2LCAKKyAgICAzMDI4MSwgMzAyODYsIDMwMjkxLCAzMDI5NSwgMzAyOTksIDMwMzA0LCAzMDMwOSwgMzAzMTQsIDMwMzE4LCAzMDMyMiwgCisgICAgMzAzMjYsIDMwMzMxLCAzMDMzNiwgMzAzNDEsIDMwMzQ2LCAzMDM1MCwgMzAzNTcsIDMwMzY0LCAzMDM3MSwgMzAzNzcsIAorICAgIDMwMzgzLCAzMDM4OSwgMzAzOTUsIDMwNDAxLCAzMDQwNywgMCwgMCwgMCwgMzA0MTIsIDMwNDE3LCAzMDQyMiwgMzA0MjcsIAorICAgIDMwNDMxLCAzMDQzNSwgMzA0MzksIDMwNDQzLCAzMDQ0NywgMzA0NTEsIDMwNDU1LCAzMDQ1OSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA0NjMsIDMwNDY2LCAzMDQ3MCwgCisgICAgMzA0NzQsIDMwNDc4LCAzMDQ4MiwgMzA0ODYsIDMwNDkwLCAzMDQ5NCwgMzA0OTgsIDMwNTAyLCAzMDUwNiwgMzA1MTAsIAorICAgIDMwNTE0LCAzMDUxNywgMzA1MjAsIDMwNTI0LCAzMDUyOCwgMzA1MzIsIDMwNTM2LCAzMDU0MCwgMzA1NDQsIDMwNTQ3LCAKKyAgICAzMDU1MSwgMzA1NTUsIDMwNTU5LCAzMDU2MywgMzA1NjYsIDMwNTY5LCAzMDU3MywgMzA1NzYsIDMwNTgwLCAzMDU4NCwgCisgICAgMzA1ODgsIDMwNTkyLCAzMDU5NiwgMzA1OTksIDMwNjA0LCAzMDYwOSwgMzA2MTQsIDMwNjE4LCAzMDYyMiwgMzA2MjcsIAorICAgIDMwNjMxLCAzMDYzNiwgMzA2NDAsIDMwNjQ2LCAzMDY1MSwgMzA2NTYsIDMwNjYxLCAzMDY2NywgMzA2NzIsIDMwNjc4LCAKKyAgICAzMDY4NCwgMzA2OTAsIDMwNjk0LCAwLCAwLCAwLCAzMDY5OCwgMzA3MDMsIDMwNzEyLCAzMDcxNywgMzA3MjQsIDMwNzI5LCAKKyAgICAzMDczMywgMzA3MzYsIDMwNzM5LCAzMDc0MiwgMzA3NDUsIDMwNzQ4LCAzMDc1MSwgMzA3NTQsIDMwNzU3LCAwLCAwLCAwLCAKKyAgICAzMDc2MCwgMzA3NjQsIDMwNzY4LCAzMDc3MiwgMzA3NzksIDMwNzg1LCAzMDc5MSwgMzA3OTcsIDMwODAzLCAzMDgwOSwgCisgICAgMzA4MTUsIDMwODIxLCAzMDgyNywgMzA4MzMsIDMwODQwLCAzMDg0NywgMzA4NTQsIDMwODYxLCAzMDg2OCwgMzA4NzUsIAorICAgIDMwODgyLCAzMDg4OSwgMzA4OTYsIDMwOTAzLCAzMDkxMCwgMzA5MTcsIDMwOTI0LCAzMDkzMSwgMzA5MzgsIDMwOTQ1LCAKKyAgICAzMDk1MiwgMzA5NTksIDMwOTY2LCAzMDk3MywgMzA5ODAsIDMwOTg3LCAzMDk5NCwgMzEwMDEsIDMxMDA4LCAzMTAxNSwgCisgICAgMzEwMjIsIDMxMDI5LCAzMTAzNiwgMzEwNDMsIDMxMDUxLCAzMTA1OSwgMzEwNjcsIDMxMDczLCAzMTA3OSwgMzEwODUsIAorICAgIDMxMDkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTEwMiwgMzExMDcsIDMxMTEyLCAzMTExNywgMzExMjIsIDMxMTMxLCAKKyAgICAzMTE0MiwgMzExNTEsIDMxMTYyLCAzMTE2OCwgMzExODEsIDMxMTg3LCAzMTE5NCwgMzEyMDEsIDMxMjA2LCAzMTIxMiwgCisgICAgMzEyMTgsIDMxMjI5LCAzMTIzOCwgMzEyNDUsIDMxMjUyLCAzMTI2MCwgMzEyNjcsIDMxMjc1LCAzMTI4NSwgMzEyOTUsIAorICAgIDMxMzAyLCAzMTMwOSwgMzEzMTYsIDMxMzI2LCAzMTMzMSwgMzEzMzksIDMxMzQ1LCAzMTM1MywgMzEzNjIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzY3LCAzMTM3MiwgMzEzNzgsIDMxMzg0LCAzMTM5MiwgMzEzOTgsIAorICAgIDMxNDA0LCAzMTQxMCwgMzE0MTUsIDMxNDIyLCAzMTQyNywgMzE0MzMsIDMxNDM5LCAzMTQ0NywgMzE0NTIsIDMxNDU4LCAKKyAgICAzMTQ2MywgMzE0NzAsIDMxNDc2LCAzMTQ4NCwgMzE0OTIsIDMxNDk4LCAzMTUwNCwgMzE1MTEsIDMxNTE4LCAzMTUyNCwgCisgICAgMzE1MzAsIDMxNTM2LCAzMTU0MiwgMzE1NDcsIDMxNTUzLCAzMTU2MSwgMzE1NjgsIDMxNTc0LCAzMTU4MCwgMzE1ODYsIAorICAgIDMxNTkyLCAzMTYwMCwgMzE2MDQsIDMxNjEwLCAzMTYxNiwgMzE2MjIsIDMxNjI4LCAzMTYzNCwgMzE2NDAsIDMxNjQ0LCAKKyAgICAzMTY0OSwgMzE2NTQsIDMxNjYxLCAzMTY2NiwgMzE2NzAsIDMxNjc1LCAzMTY4MCwgMzE2ODUsIDMxNjg5LCAzMTY5NCwgCisgICAgMzE2OTksIDMxNzAzLCAzMTcwNywgMzE3MTEsIDMxNzE2LCAzMTcyMCwgMzE3MjUsIDMxNzMwLCAzMTczNCwgMzE3MzksIAorICAgIDMxNzQzLCAzMTc0OCwgMzE3NTIsIDMxNzU3LCAzMTc2MiwgMzE3NjgsIDMxNzczLCAzMTc3OCwgMzE3ODIsIDMxNzg3LCAKKyAgICAzMTc5MywgMzE4MDAsIDMxODA1LCAzMTgxMCwgMzE4MTUsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODM0LCAzMTg0MSwgCisgICAgMzE4NDgsIDMxODUzLCAzMTg1OCwgMzE4NjIsIDMxODY4LCAzMTg3MywgMzE4NzgsIDMxODgzLCAzMTg4OCwgMzE4OTQsIAorICAgIDMxODk5LCAzMTkwNSwgMzE5MTAsIDMxOTE2LCAzMTkyMiwgMzE5MjgsIDMxOTM1LCAzMTk0MiwgMzE5NDksIDMxOTU2LCAKKyAgICAzMTk2MywgMzE5NzAsIDMxOTc1LCAzMTk4NCwgMzE5OTQsIDMyMDA0LCAzMjAxNCwgMzIwMjQsIDMyMDM0LCAzMjA0NCwgCisgICAgMzIwNTcsIDMyMDY3LCAzMjA3NywgMzIwODcsIDMyMDkzLCAzMjA5OCwgMzIxMDUsIDMyMTEzLCAzMjEyMSwgMzIxMjgsIAorICAgIDMyMTM1LCAzMjE0MiwgMzIxNDksIDMyMTU3LCAzMjE2NiwgMzIxNzUsIDMyMTg0LCAzMjE5MywgMzIyMDIsIDMyMjExLCAKKyAgICAzMjIyMCwgMzIyMjksIDMyMjM4LCAzMjI0NywgMzIyNTYsIDMyMjY1LCAzMjI3NCwgMzIyODMsIDMyMjkxLCAzMjMwMCwgCisgICAgMzIzMTEsIDMyMzE5LCAzMjMyOSwgMzIzNDAsIDMyMzQ5LCAzMjM1OCwgMzIzNjgsIDMyMzc3LCAzMjM4NSwgMzIzOTQsIAorICAgIDMyNDAwLCAzMjQwNSwgMzI0MTMsIDMyNDE4LCAzMjQyNSwgMzI0MzAsIDMyNDM5LCAzMjQ0NSwgMzI0NTEsIDMyNDU4LCAKKyAgICAzMjQ2MywgMzI0NjgsIDMyNDc2LCAzMjQ4NCwgMzI0OTMsIDMyNTAyLCAzMjUwNywgMzI1MTQsIDMyNTI0LCAzMjUzMiwgCisgICAgMzI1NDEsIDMyNTQ2LCAzMjU1MiwgMzI1NTcsIDMyNTY0LCAzMjU2OSwgMzI1NzgsIDMyNTgzLCAzMjU4OCwgMzI1OTMsIAorICAgIDMyNjAwLCAzMjYwNiwgMzI2MTEsIDMyNjIwLCAzMjYyOCwgMzI2MzMsIDMyNjM4LCAzMjY0NSwgMzI2NTIsIDMyNjU2LCAKKyAgICAzMjY2MCwgMzI2NjMsIDMyNjY2LCAzMjY2OSwgMzI2NzIsIDMyNjc1LCAzMjY3OCwgMzI2ODUsIDMyNjg4LCAzMjY5MSwgCisgICAgMzI2OTYsIDMyNzAwLCAzMjcwNCwgMzI3MDgsIDMyNzEyLCAzMjcxNiwgMzI3MjYsIDMyNzMyLCAzMjczOCwgMzI3NDQsIAorICAgIDMyNzUyLCAzMjc2MCwgMzI3NjYsIDMyNzcyLCAzMjc3OSwgMzI3ODUsIDMyNzkwLCAzMjc5NiwgMzI4MDIsIDMyODA3LCAKKyAgICAzMjgxMywgMzI4MTksIDMyODI3LCAzMjgzMiwgMzI4MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyODQ0LCAzMjg1MCwgMzI4NTUsIDMyODY0LCAzMjg3MiwgMzI4ODAsIAorICAgIDMyODg3LCAzMjg5NCwgMzI5MDEsIDMyOTA4LCAzMjkxNiwgMzI5MjQsIDMyOTM0LCAzMjk0NCwgMzI5NTIsIDMyOTYwLCAKKyAgICAzMjk2OCwgMzI5NzYsIDMyOTg1LCAzMjk5NCwgMzMwMDIsIDMzMDEwLCAzMzAxOSwgMzMwMjgsIDMzMDM4LCAzMzA0OCwgCisgICAgMzMwNTcsIDMzMDY2LCAzMzA3NCwgMzMwODIsIDMzMDkwLCAzMzA5OCwgMzMxMDgsIDMzMTE4LCAzMzEyNiwgMzMxMzQsIAorICAgIDMzMTQyLCAzMzE1MCwgMzMxNTgsIDMzMTY2LCAzMzE3NCwgMzMxODIsIDMzMTkwLCAzMzE5OCwgMzMyMDYsIDMzMjE0LCAKKyAgICAzMzIyMywgMzMyMzIsIDMzMjQxLCAzMzI1MCwgMzMyNjAsIDMzMjcwLCAzMzI3NywgMzMyODQsIDMzMjkyLCAzMzMwMCwgCisgICAgMzMzMDksIDMzMzE4LCAzMzMyNiwgMzMzMzQsIDMzMzQ2LCAzMzM1OCwgMzMzNjcsIDMzMzc2LCAzMzM4NSwgMzMzOTQsIAorICAgIDMzNDAxLCAzMzQwOCwgMzM0MTYsIDMzNDI0LCAzMzQzMiwgMzM0NDAsIDMzNDQ4LCAzMzQ1NiwgMzM0NjQsIDMzNDcyLCAKKyAgICAzMzQ4MSwgMzM0OTAsIDMzNDk5LCAzMzUwOCwgMzM1MTcsIDMzNTI2LCAzMzUzNiwgMzM1NDYsIDMzNTU2LCAzMzU2NiwgCisgICAgMzM1NzUsIDMzNTg0LCAzMzU5MSwgMzM1OTgsIDMzNjA2LCAzMzYxNCwgMzM2MjIsIDMzNjMwLCAzMzYzOCwgMzM2NDYsIAorICAgIDMzNjU4LCAzMzY3MCwgMzM2NzksIDMzNjg4LCAzMzY5NiwgMzM3MDQsIDMzNzEyLCAzMzcyMCwgMzM3MzEsIDMzNzQyLCAKKyAgICAzMzc1MywgMzM3NjQsIDMzNzc2LCAzMzc4OCwgMzM3OTYsIDMzODA0LCAzMzgxMiwgMzM4MjAsIDMzODI5LCAzMzgzOCwgCisgICAgMzM4NDcsIDMzODU2LCAzMzg2NCwgMzM4NzIsIDMzODgwLCAzMzg4OCwgMzM4OTYsIDMzOTA0LCAzMzkxMywgMzM5MjIsIAorICAgIDMzOTMyLCAzMzk0MiwgMzM5NTAsIDMzOTU4LCAzMzk2NiwgMzM5NzQsIDMzOTgyLCAzMzk5MCwgMzM5OTcsIDM0MDA0LCAKKyAgICAzNDAxMiwgMzQwMjAsIDM0MDI4LCAzNDAzNiwgMzQwNDQsIDM0MDUyLCAzNDA2MCwgMzQwNjgsIDM0MDc2LCAzNDA4NCwgCisgICAgMzQwOTIsIDM0MTAwLCAzNDEwOCwgMzQxMTYsIDM0MTI0LCAzNDEzMiwgMzQxNDEsIDM0MTUwLCAzNDE1OSwgMzQxNjcsIAorICAgIDM0MTc2LCAzNDE4NSwgMzQxOTQsIDM0MjAzLCAzNDIxMywgMzQyMjIsIDM0MjI4LCAzNDIzMywgMzQyNDAsIDM0MjQ3LCAKKyAgICAzNDI1NSwgMzQyNjMsIDM0MjcyLCAzNDI4MSwgMzQyOTEsIDM0MzAxLCAzNDMxMiwgMzQzMjMsIDM0MzMzLCAzNDM0MywgCisgICAgMzQzNTMsIDM0MzYzLCAzNDM3MiwgMzQzODEsIDM0MzkxLCAzNDQwMSwgMzQ0MTIsIDM0NDIzLCAzNDQzMywgMzQ0NDMsIAorICAgIDM0NDUzLCAzNDQ2MywgMzQ0NzAsIDM0NDc3LCAzNDQ4NSwgMzQ0OTMsIDM0NTAwLCAzNDUwNywgMzQ1MTYsIDM0NTI1LCAKKyAgICAzNDUzNSwgMzQ1NDUsIDM0NTU2LCAzNDU2NywgMzQ1NzcsIDM0NTg3LCAzNDU5NywgMzQ2MDcsIDM0NjE2LCAzNDYyNSwgCisgICAgMzQ2MzMsIDM0NjQxLCAzNDY0OCwgMzQ2NTUsIDM0NjYzLCAzNDY3MSwgMzQ2ODAsIDM0Njg5LCAzNDY5OSwgMzQ3MDksIAorICAgIDM0NzIwLCAzNDczMSwgMzQ3NDEsIDM0NzUxLCAzNDc2MSwgMzQ3NzEsIDM0NzgwLCAzNDc4OSwgMzQ3OTksIDM0ODA5LCAKKyAgICAzNDgyMCwgMzQ4MzEsIDM0ODQxLCAzNDg1MSwgMzQ4NjEsIDM0ODcxLCAzNDg3OCwgMzQ4ODUsIDM0ODkzLCAzNDkwMSwgCisgICAgMzQ5MTAsIDM0OTE5LCAzNDkyOSwgMzQ5MzksIDM0OTUwLCAzNDk2MSwgMzQ5NzEsIDM0OTgxLCAzNDk5MSwgMzUwMDEsIAorICAgIDM1MDA5LCAzNTAxNywgMzUwMjUsIDM1MDMzLCAzNTA0MiwgMzUwNTEsIDM1MDU5LCAzNTA2NywgMzUwNzQsIDM1MDgxLCAKKyAgICAzNTA4OCwgMzUwOTUsIDM1MTAzLCAzNTExMSwgMzUxMTksIDM1MTI3LCAzNTEzNywgMzUxNDcsIDM1MTU3LCAzNTE2NywgCisgICAgMzUxNzcsIDM1MTg3LCAzNTE5NSwgMzUyMDMsIDM1MjEzLCAzNTIyMywgMzUyMzMsIDM1MjQzLCAzNTI1MywgMzUyNjMsIAorICAgIDM1MjcxLCAzNTI3OSwgMzUyODksIDM1Mjk5LCAzNTMwOSwgMCwgMCwgMzUzMTksIDM1MzI3LCAzNTMzNSwgMzUzNDUsIAorICAgIDM1MzU1LCAzNTM2NSwgMCwgMCwgMzUzNzUsIDM1MzgzLCAzNTM5MSwgMzU0MDEsIDM1NDExLCAzNTQyMSwgMzU0MzEsIAorICAgIDM1NDQxLCAzNTQ1MSwgMzU0NTksIDM1NDY3LCAzNTQ3NywgMzU0ODcsIDM1NDk3LCAzNTUwNywgMzU1MTcsIDM1NTI3LCAKKyAgICAzNTUzNSwgMzU1NDMsIDM1NTUzLCAzNTU2MywgMzU1NzMsIDM1NTgzLCAzNTU5MywgMzU2MDMsIDM1NjExLCAzNTYxOSwgCisgICAgMzU2MjksIDM1NjM5LCAzNTY0OSwgMzU2NTksIDM1NjY5LCAzNTY3OSwgMzU2ODcsIDM1Njk1LCAzNTcwNSwgMzU3MTUsIAorICAgIDM1NzI1LCAwLCAwLCAzNTczNSwgMzU3NDMsIDM1NzUxLCAzNTc2MSwgMzU3NzEsIDM1NzgxLCAwLCAwLCAzNTc5MSwgCisgICAgMzU3OTksIDM1ODA3LCAzNTgxNywgMzU4MjcsIDM1ODM3LCAzNTg0NywgMzU4NTcsIDAsIDM1ODY3LCAwLCAzNTg3NSwgMCwgCisgICAgMzU4ODUsIDAsIDM1ODk1LCAzNTkwNSwgMzU5MTMsIDM1OTIxLCAzNTkzMSwgMzU5NDEsIDM1OTUxLCAzNTk2MSwgMzU5NzEsIAorICAgIDM1OTgxLCAzNTk4OSwgMzU5OTcsIDM2MDA3LCAzNjAxNywgMzYwMjcsIDM2MDM3LCAzNjA0NywgMzYwNTcsIDM2MDY1LCAKKyAgICAzNjA3MywgMzYwODEsIDM2MDg5LCAzNjA5NywgMzYxMDUsIDM2MTEzLCAzNjEyMSwgMzYxMjksIDM2MTM3LCAzNjE0NSwgCisgICAgMzYxNTMsIDM2MTYxLCAwLCAwLCAzNjE2OSwgMzYxNzksIDM2MTg5LCAzNjIwMiwgMzYyMTUsIDM2MjI4LCAzNjI0MSwgCisgICAgMzYyNTQsIDM2MjY3LCAzNjI3NywgMzYyODcsIDM2MzAwLCAzNjMxMywgMzYzMjYsIDM2MzM5LCAzNjM1MiwgMzYzNjUsIAorICAgIDM2Mzc1LCAzNjM4NSwgMzYzOTgsIDM2NDExLCAzNjQyNCwgMzY0MzcsIDM2NDUwLCAzNjQ2MywgMzY0NzMsIDM2NDgzLCAKKyAgICAzNjQ5NiwgMzY1MDksIDM2NTIyLCAzNjUzNSwgMzY1NDgsIDM2NTYxLCAzNjU3MSwgMzY1ODEsIDM2NTk0LCAzNjYwNywgCisgICAgMzY2MjAsIDM2NjMzLCAzNjY0NiwgMzY2NTksIDM2NjY5LCAzNjY3OSwgMzY2OTIsIDM2NzA1LCAzNjcxOCwgMzY3MzEsIAorICAgIDM2NzQ0LCAzNjc1NywgMzY3NjUsIDM2NzczLCAzNjc4NCwgMzY3OTIsIDAsIDM2ODAzLCAzNjgxMSwgMzY4MjIsIDM2ODMwLCAKKyAgICAzNjgzOCwgMzY4NDYsIDM2ODU0LCAzNjg2MiwgMzY4NjUsIDM2ODY4LCAzNjg3MSwgMzY4NzQsIDM2ODgwLCAzNjg5MSwgCisgICAgMzY4OTksIDAsIDM2OTEwLCAzNjkxOCwgMzY5MjksIDM2OTM3LCAzNjk0NSwgMzY5NTMsIDM2OTYxLCAzNjk2OSwgMzY5NzQsIAorICAgIDM2OTc5LCAzNjk4NCwgMzY5OTIsIDM3MDAwLCAzNzAxMSwgMCwgMCwgMzcwMjIsIDM3MDMwLCAzNzA0MSwgMzcwNDksIAorICAgIDM3MDU3LCAzNzA2NSwgMCwgMzcwNzMsIDM3MDc4LCAzNzA4MywgMzcwODgsIDM3MDk2LCAzNzEwNCwgMzcxMTUsIDM3MTI2LCAKKyAgICAzNzEzNCwgMzcxNDIsIDM3MTUwLCAzNzE2MSwgMzcxNjksIDM3MTc3LCAzNzE4NSwgMzcxOTMsIDM3MjAxLCAzNzIwNywgCisgICAgMzcyMTMsIDAsIDAsIDM3MjE2LCAzNzIyNywgMzcyMzUsIDAsIDM3MjQ2LCAzNzI1NCwgMzcyNjUsIDM3MjczLCAzNzI4MSwgCisgICAgMzcyODksIDM3Mjk3LCAzNzMwNSwgMzczMDgsIDAsIDM3MzExLCAzNzMxNSwgMzczMTksIDM3MzIzLCAzNzMyNywgMzczMzEsIAorICAgIDM3MzM1LCAzNzMzOSwgMzczNDMsIDM3MzQ3LCAzNzM1MSwgMzczNTUsIDM3MzYxLCAzNzM2NywgMzczNzMsIDM3Mzc2LCAKKyAgICAzNzM3OSwgMzczODEsIDM3Mzg1LCAzNzM4OSwgMzczOTMsIDM3Mzk3LCAzNzM5OSwgMzc0MDMsIDM3NDA3LCAzNzQxMywgCisgICAgMzc0MTksIDM3NDI2LCAzNzQzMywgMzc0MzgsIDM3NDQzLCAzNzQ0OSwgMzc0NTUsIDM3NDU3LCAzNzQ2MCwgMzc0NjIsIAorICAgIDM3NDY2LCAzNzQ3MCwgMzc0NzQsIDM3NDc3LCAzNzQ4MSwgMzc0ODUsIDM3NDg5LCAzNzQ5MywgMzc0OTcsIDM3NTAzLCAKKyAgICAzNzUwNywgMzc1MTEsIDM3NTE3LCAzNzUyMiwgMzc1MjksIDM3NTMxLCAzNzUzNCwgMzc1MzgsIDM3NTQxLCAzNzU0NSwgCisgICAgMzc1NTAsIDM3NTUyLCAzNzU2MSwgMzc1NzAsIDM3NTczLCAzNzU3NywgMzc1NzksIDM3NTgxLCAzNzU4MywgMzc1ODYsIAorICAgIDM3NTkyLCAzNzU5NCwgMzc1OTgsIDM3NjAyLCAzNzYwOSwgMzc2MTYsIDM3NjIwLCAzNzYyNSwgMzc2MzAsIDM3NjM1LCAKKyAgICAzNzYzOSwgMzc2NDMsIDM3NjQ3LCAzNzY1MCwgMzc2NTMsIDM3NjU3LCAzNzY2NCwgMzc2NjksIDM3NjczLCAzNzY3NywgCisgICAgMzc2ODIsIDM3Njg2LCAzNzY5MCwgMzc2OTUsIDM3NzAwLCAzNzcwNCwgMzc3MDgsIDM3NzEyLCAzNzcxNCwgMzc3MTksIAorICAgIDM3NzI0LCAzNzcyOCwgMzc3MzIsIDM3NzM2LCAzNzc0MCwgMCwgMCwgMCwgMCwgMCwgMzc3NDQsIDM3NzUwLCAzNzc1NiwgCisgICAgMzc3NjMsIDM3NzcwLCAzNzc3NSwgMzc3ODAsIDM3Nzg0LCAwLCAwLCAzNzc5MCwgMzc3OTMsIDM3Nzk2LCAzNzc5OSwgCisgICAgMzc4MDIsIDM3ODA1LCAzNzgwOCwgMzc4MTIsIDM3ODE2LCAzNzgyMSwgMzc4MjYsIDM3ODMxLCAzNzgzNywgMzc4NDEsIAorICAgIDM3ODQ0LCAzNzg0NywgMzc4NTAsIDM3ODUzLCAzNzg1NiwgMzc4NTksIDM3ODYyLCAzNzg2NSwgMzc4NjgsIDM3ODcyLCAKKyAgICAzNzg3NiwgMzc4ODEsIDM3ODg2LCAwLCAzNzg5MSwgMzc4OTcsIDM3OTAzLCAzNzkwOSwgMzc5MTYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM3OTIzLCAzNzkyNiwgMzc5MjksIDM3OTMyLCAzNzkzNywgMzc5NDAsIDM3OTQzLCAzNzk0NiwgCisgICAgMzc5NDksIDM3OTUyLCAzNzk1NSwgMzc5NTksIDM3OTYyLCAzNzk2NSwgMzc5NjgsIDM3OTcxLCAzNzk3NCwgMzc5NzksIAorICAgIDM3OTgyLCAzNzk4NSwgMzc5ODgsIDM3OTkxLCAzNzk5NCwgMzc5OTksIDM4MDAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODAwNSwgMzgwMTAsIDM4MDE1LCAzODAyMiwgCisgICAgMzgwMzAsIDM4MDM1LCAzODA0MCwgMzgwNDQsIDM4MDQ4LCAzODA1MywgMzgwNjAsIDM4MDY3LCAzODA3MSwgMzgwNzYsIAorICAgIDM4MDgxLCAzODA4NiwgMzgwOTEsIDM4MDk4LCAzODEwMywgMzgxMDgsIDM4MTEzLCAzODEyMiwgMzgxMjksIDM4MTM1LCAKKyAgICAzODEzOSwgMzgxNDQsIDM4MTUwLCAzODE1NSwgMzgxNjIsIDM4MTcwLCAzODE3OCwgMzgxODIsIDM4MTg2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODE5MCwgMzgxOTQsIDM4MjAxLCAzODIwNSwgMzgyMDksIAorICAgIDM4MjE0LCAzODIxOCwgMzgyMjIsIDM4MjI2LCAzODIyOCwgMzgyMzIsIDM4MjM2LCAzODI0MCwgMzgyNDUsIDM4MjQ5LCAKKyAgICAzODI1MywgMzgyNjEsIDM4MjY0LCAzODI2OCwgMzgyNzEsIDM4Mjc0LCAzODI4MCwgMzgyODMsIDM4Mjg2LCAzODI5MiwgCisgICAgMzgyOTYsIDM4MzAwLCAzODMwNCwgMzgzMDcsIDM4MzExLCAzODMxNCwgMzgzMTgsIDM4MzIwLCAzODMyMywgMzgzMjYsIAorICAgIDM4MzMwLCAzODMzMiwgMzgzMzYsIDM4MzM5LCAzODM0MiwgMzgzNDcsIDM4MzUyLCAzODM1OCwgMzgzNjEsIDM4MzY0LCAKKyAgICAzODM2OCwgMzgzNzMsIDM4Mzc2LCAzODM3OSwgMzgzODIsIDM4Mzg2LCAzODM5MCwgMzgzOTMsIDM4Mzk2LCAzODM5OCwgCisgICAgMzg0MDEsIDM4NDA0LCAzODQwNywgMzg0MTEsIDM4NDE2LCAzODQxOSwgMzg0MjMsIDM4NDI3LCAzODQzMSwgMzg0MzUsIAorICAgIDM4NDQwLCAzODQ0NSwgMzg0NDksIDM4NDUzLCAzODQ1OCwgMzg0NjMsIDM4NDY4LCAzODQ3MiwgMzg0NzYsIDM4NDgxLCAKKyAgICAzODQ4NSwgMzg0ODgsIDM4NDkxLCAzODQ5MywgMzg0OTcsIDM4NTAyLCAzODUwOSwgMzg1MTYsIDM4NTIzLCAzODUzMCwgCisgICAgMzg1MzcsIDM4NTQ0LCAzODU1MSwgMzg1NTgsIDM4NTY2LCAzODU3MywgMzg1ODEsIDM4NTg4LCAzODU5NSwgMzg2MDMsIAorICAgIDM4NjExLCAzODYxNiwgMzg2MjEsIDM4NjI2LCAzODYzMSwgMzg2MzYsIDM4NjQxLCAzODY0NiwgMzg2NTEsIDM4NjU2LCAKKyAgICAzODY2MSwgMzg2NjcsIDM4NjczLCAzODY3OSwgMzg2ODUsIDM4NjkyLCAzODcwMCwgMzg3MDcsIDM4NzEzLCAzODcxOSwgCisgICAgMzg3MjUsIDM4NzMxLCAzODczNywgMzg3NDMsIDM4NzQ5LCAzODc1NSwgMzg3NjEsIDM4NzY4LCAzODc3NSwgMzg3ODIsIAorICAgIDM4Nzg5LCAzODc5NywgMzg4MDYsIDM4ODE0LCAzODgyNSwgMzg4MzMsIDM4ODQxLCAzODg0OSwgMzg4NTUsIDM4ODY0LCAKKyAgICAzODg3MywgMzg4ODEsIDM4ODkwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODg5OCwgMzg5MDAsIDM4OTAzLCAzODkwNSwgMzg5MDgsIAorICAgIDM4OTExLCAzODkxNCwgMzg5MTksIDM4OTI0LCAzODkyOSwgMzg5MzQsIDM4OTM4LCAzODk0MiwgMzg5NDYsIDM4OTUwLCAKKyAgICAzODk1NSwgMzg5NjEsIDM4OTY2LCAzODk3MiwgMzg5NzcsIDM4OTgyLCAzODk4NywgMzg5OTMsIDM4OTk4LCAzOTAwNCwgCisgICAgMzkwMTAsIDM5MDE0LCAzOTAxOCwgMzkwMjMsIDM5MDI4LCAzOTAzMywgMzkwMzgsIDM5MDQzLCAzOTA1MSwgMzkwNTksIAorICAgIDM5MDY3LCAzOTA3NSwgMzkwODIsIDM5MDkwLCAzOTA5NywgMzkxMDQsIDM5MTEyLCAzOTEyMiwgMzkxMjksIDM5MTM2LCAKKyAgICAzOTE0MywgMzkxNTAsIDM5MTU4LCAzOTE2NiwgMzkxNzMsIDM5MTgwLCAzOTE4OCwgMzkxOTYsIDM5MjAxLCAzOTIwOSwgCisgICAgMzkyMTQsIDM5MjE5LCAzOTIyNSwgMzkyMzAsIDM5MjM2LCAzOTI0MywgMzkyNTAsIDM5MjU1LCAzOTI2MSwgMzkyNjYsIAorICAgIDM5MjY5LCAzOTI3MywgMzkyNzYsIDM5MjgwLCAzOTI4NCwgMzkyODgsIDM5Mjk0LCAzOTMwMCwgMzkzMDYsIDM5MzEyLCAKKyAgICAzOTMxNiwgMzkzMjAsIDM5MzI0LCAzOTMyOCwgMzkzMzQsIDM5MzQwLCAzOTM0NCwgMzkzNDksIDM5MzUzLCAzOTM1OCwgCisgICAgMzkzNjIsIDM5MzY2LCAzOTM2OSwgMzkzNzMsIDM5Mzc2LCAzOTM4MCwgMzkzODcsIDM5Mzk1LCAzOTQwNiwgMzk0MTcsIAorICAgIDM5NDIyLCAzOTQzMSwgMzk0MzgsIDM5NDQ2LCAzOTQ1NCwgMzk0NTgsIDM5NDY0LCAzOTQ3MiwgMzk0NzYsIDM5NDgxLCAKKyAgICAzOTQ4NiwgMzk0OTIsIDM5NDk4LCAzOTUwNCwgMzk1MTEsIDM5NTE1LCAzOTUxOSwgMzk1MjQsIDM5NTI3LCAzOTUyOSwgCisgICAgMzk1MzMsIDM5NTM3LCAzOTU0NCwgMzk1NDgsIDM5NTUwLCAzOTU1MiwgMzk1NTYsIDM5NTYzLCAzOTU2OCwgMzk1NzQsIAorICAgIDM5NTgzLCAzOTU5MCwgMzk1OTUsIDM5NTk5LCAzOTYwMywgMzk2MDcsIDM5NjEwLCAzOTYxMywgMzk2MTYsIDM5NjIwLCAKKyAgICAzOTYyNCwgMzk2MjgsIDM5NjMyLCAzOTYzNiwgMzk2MzksIDM5NjQzLCAzOTY0NywgMzk2NTAsIDM5NjUyLCAzOTY1NSwgCisgICAgMzk2NTcsIDM5NjYxLCAzOTY2NSwgMzk2NjcsIDM5NjcyLCAzOTY3NSwgMzk2NzksIDM5NjgzLCAzOTY4NywgMzk2ODksIAorICAgIDM5NjkxLCAzOTY5MywgMzk2OTYsIDM5NzAwLCAzOTcwNCwgMzk3MDgsIDM5NzEyLCAzOTcxNiwgMzk3MjIsIDM5NzI4LCAKKyAgICAzOTczMCwgMzk3MzIsIDM5NzM0LCAzOTczNiwgMzk3MzksIDM5NzQxLCAzOTc0NSwgMzk3NDcsIDM5NzUxLCAzOTc1NCwgCisgICAgMzk3NTksIDM5NzYzLCAzOTc2NywgMzk3NzAsIDM5Nzc0LCAzOTc3OCwgMzk3ODMsIDM5Nzg3LCAzOTc5NiwgMzk4MDYsIAorICAgIDM5ODEwLCAzOTgxNSwgMzk4MjEsIDM5ODI1LCAzOTgyOSwgMzk4MzIsIDM5ODM3LCAzOTg0MSwgMzk4NDcsIDM5ODUxLCAKKyAgICAzOTg2MiwgMzk4NzAsIDM5ODc0LCAzOTg3OCwgMzk4ODQsIDM5ODg4LCAzOTg5MSwgMzk4OTMsIDM5ODk2LCAzOTkwMCwgCisgICAgMzk5MDQsIDM5OTEwLCAzOTkxNCwgMzk5MTgsIDM5OTIxLCAzOTkyNCwgMzk5MjgsIDM5OTMzLCAzOTkzOCwgMzk5NDMsIAorICAgIDM5OTQ4LCAzOTk1MywgMzk5NjAsIDM5OTY3LCAzOTk3MSwgMzk5NzUsIDM5OTc3LCAzOTk4MSwgMzk5ODQsIDM5OTg3LCAKKyAgICAzOTk5NSwgNDAwMDMsIDQwMDA5LCA0MDAxNSwgNDAwMjQsIDQwMDMzLCA0MDAzOCwgNDAwNDMsIDQwMDUxLCA0MDA1OSwgCisgICAgNDAwNjEsIDQwMDYzLCA0MDA2OCwgNDAwNzMsIDQwMDc5LCA0MDA4NSwgNDAwOTAsIDQwMDk1LCA0MDA5OSwgNDAxMDMsIAorICAgIDQwMTA5LCA0MDExNSwgNDAxMjEsIDQwMTI3LCA0MDEzNywgNDAxNDcsIDQwMTU0LCA0MDE2MSwgNDAxNjMsIDQwMTY3LCAKKyAgICA0MDE3MSwgNDAxNzYsIDQwMTgxLCA0MDE4OCwgNDAxOTUsIDQwMTk4LCA0MDIwMSwgNDAyMDQsIDQwMjA3LCA0MDIxMCwgCisgICAgNDAyMTUsIDQwMjE5LCA0MDIyNCwgNDAyMjksIDQwMjMyLCA0MDIzNSwgNDAyMzgsIDQwMjQxLCA0MDI0NCwgNDAyNDgsIAorICAgIDQwMjUxLCA0MDI1NCwgNDAyNTcsIDQwMjYwLCA0MDI2MiwgNDAyNjQsIDQwMjY2LCA0MDI2OCwgNDAyNzYsIDQwMjg0LCAKKyAgICA0MDI4OSwgNDAyOTIsIDQwMjk3LCA0MDMwNywgNDAzMTMsIDQwMzE5LCA0MDMyNSwgNDAzMzMsIDQwMzQxLCA0MDM1MiwgCisgICAgNDAzNTYsIDQwMzYwLCA0MDM2MiwgNDAzNjgsIDQwMzcwLCA0MDM3MiwgNDAzNzQsIDQwMzc2LCA0MDM4MiwgNDAzODUsIAorICAgIDQwMzkxLCA0MDM5NywgNDA0MDEsIDQwNDA1LCA0MDQwOSwgNDA0MTIsIDQwNDE2LCA0MDQyMCwgNDA0MjIsIDQwNDMxLCAKKyAgICA0MDQ0MCwgNDA0NDUsIDQwNDUwLCA0MDQ1NSwgNDA0NjEsIDQwNDY3LCA0MDQ3MCwgNDA0NzMsIDQwNDc2LCA0MDQ3OSwgCisgICAgNDA0ODEsIDQwNDg2LCA0MDQ5MSwgNDA0OTYsIDQwNTAyLCA0MDUwOCwgNDA1MTUsIDQwNTIyLCA0MDUyNywgNDA1MzIsIAorICAgIDQwNTM3LCA0MDU0MiwgNDA1NTAsIDQwNTU4LCA0MDU2NiwgNDA1NzQsIDQwNTgyLCA0MDU5MCwgNDA1OTgsIDQwNjA2LCAKKyAgICA0MDYxNCwgNDA2MjIsIDQwNjI5LCA0MDY0MCwgNDA2NDksIDQwNjYzLCA0MDY2NiwgNDA2NzEsIDQwNjc3LCA0MDY4MywgCisgICAgNDA2OTAsIDQwNzA0LCA0MDcxOSwgNDA3MjUsIDQwNzMxLCA0MDczOCwgNDA3NDQsIDQwNzUyLCA0MDc1OCwgNDA3NzEsIAorICAgIDQwNzg1LCA0MDc5MCwgNDA3OTYsIDQwODAzLCA0MDgwNiwgNDA4MDksIDQwODExLCA0MDgxNCwgNDA4MTcsIDQwODE5LCAKKyAgICA0MDgyMSwgNDA4MjUsIDQwODI4LCA0MDgzMSwgNDA4MzQsIDQwODM3LCA0MDg0MiwgNDA4NDcsIDQwODUyLCA0MDg1NywgCisgICAgNDA4NjAsIDQwODYzLCA0MDg2NSwgNDA4NjcsIDQwODY5LCA0MDg3MywgNDA4NzcsIDQwODgxLCA0MDg4NywgNDA4OTAsIAorICAgIDQwODkyLCA0MDg5NCwgNDA4OTksIDQwOTA0LCA0MDkwOSwgNDA5MTQsIDQwOTE5LCA0MDkyNCwgNDA5MjYsIDQwOTI4LCAKKyAgICA0MDkzNywgNDA5NDEsIDQwOTQ4LCA0MDk1NywgNDA5NTksIDQwOTY0LCA0MDk2OSwgNDA5NzYsIDQwOTgwLCA0MDk4MiwgCisgICAgNDA5ODYsIDQwOTg4LCA0MDk5MiwgNDA5OTYsIDQxMDAwLCA0MTAwMiwgNDEwMDQsIDQxMDA2LCA0MTAxMSwgNDEwMTgsIAorICAgIDQxMDI1LCA0MTAzMiwgNDEwMzksIDQxMDQ2LCA0MTA1MywgNDEwNjAsIDQxMDY3LCA0MTA3MywgNDEwNzksIDQxMDg2LCAKKyAgICA0MTA5MywgNDExMDAsIDQxMTA3LCA0MTExMywgNDExMTksIDQxMTI2LCA0MTEzMywgNDExNDAsIDQxMTQ4LCA0MTE1NSwgCisgICAgNDExNjMsIDQxMTcwLCA0MTE3OCwgNDExODUsIDQxMTkzLCA0MTIwMSwgNDEyMDgsIDQxMjE2LCA0MTIyMywgNDEyMzEsIAorICAgIDQxMjM4LCA0MTI0NiwgNDEyNTMsIDQxMjYwLCA0MTI2NywgNDEyNzQsIDQxMjgxLCA0MTI4OSwgNDEyOTYsIDQxMzAzLCAKKyAgICA0MTMxMCwgNDEzMTgsIDQxMzI1LCA0MTMzMiwgNDEzMzksIDQxMzQ2LCA0MTM1NCwgNDEzNjIsIDQxMzY5LCA0MTM3NiwgCisgICAgNDEzODIsIDQxMzg5LCA0MTM5NCwgNDE0MDEsIDQxNDA4LCA0MTQxNiwgNDE0MjMsIDQxNDMxLCA0MTQzOSwgNDE0NDQsIAorICAgIDQxNDQ5LCA0MTQ1NCwgNDE0NjEsIDQxNDY4LCA0MTQ3NSwgNDE0ODIsIDQxNDg3LCA0MTQ5MSwgNDE1MDAsIDQxNTA2LCAKKyAgICA0MTUwOSwgNDE1MTcsIDQxNTIwLCA0MTUyNSwgNDE1MzAsIDQxNTMzLCA0MTUzNiwgNDE1NDQsIDQxNTQ3LCA0MTU1MiwgCisgICAgNDE1NTUsIDQxNTYyLCA0MTU2NywgNDE1NzUsIDQxNTc4LCA0MTU4MSwgNDE1ODQsIDQxNTg5LCA0MTU5NCwgNDE1OTcsIAorICAgIDQxNjAwLCA0MTYwOCwgNDE2MTEsIDQxNjE2LCA0MTYyMywgNDE2MjcsIDQxNjMxLCA0MTYzNiwgNDE2NDEsIDQxNjQ3LCAKKyAgICA0MTY1MiwgNDE2NTgsIDQxNjY0LCA0MTY2OSwgNDE2NzUsIDQxNjgzLCA0MTY4OSwgNDE2OTcsIDQxNzA1LCA0MTcxMSwgCisgICAgNDE3MTksIDQxNzI3LCA0MTczNiwgNDE3NDQsIDQxNzUwLCA0MTc1OCwgNDE3NjcsIDQxNzc1LCA0MTc3OSwgNDE3ODQsIAorICAgIDQxNzk3LCA0MTgxMCwgNDE4MTQsIDQxODE4LCA0MTgyMiwgNDE4MjYsIDQxODM2LCA0MTg0MCwgNDE4NDUsIDQxODUwLCAKKyAgICA0MTg1NSwgNDE4NjAsIDQxODY1LCA0MTg3MCwgNDE4ODAsIDQxODkwLCA0MTg5OCwgNDE5MDgsIDQxOTE4LCA0MTkyNiwgCisgICAgNDE5MzYsIDQxOTQ2LCA0MTk1NCwgNDE5NjQsIDQxOTc0LCA0MTk4MiwgNDE5OTAsIDQyMDAwLCA0MjAxMCwgNDIwMTMsIAorICAgIDQyMDE2LCA0MjAxOSwgNDIwMjQsIDQyMDI4LCA0MjAzNCwgNDIwNDEsIDQyMDQ4LCA0MjA1NiwgNDIwNjMsIDQyMDY3LCAKKyAgICA0MjA3MSwgNDIwNzUsIDQyMDc5LCA0MjA4MSwgNDIwODUsIDQyMDg5LCA0MjA5NCwgNDIwOTksIDQyMTA2LCA0MjExMywgCisgICAgNDIxMTYsIDQyMTIzLCA0MjEyNSwgNDIxMjcsIDQyMTMxLCA0MjEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIxNDAsIDQyMTQ0LCA0MjE1MSwgNDIxNTgsIDQyMTY1LCAKKyAgICA0MjE3MiwgNDIxNzYsIDQyMTgwLCA0MjE4NCwgNDIxODgsIDQyMTkzLCA0MjE5OSwgNDIyMDQsIDQyMjEwLCA0MjIxNiwgCisgICAgNDIyMjIsIDQyMjI4LCA0MjIzNiwgNDIyNDMsIDQyMjUwLCA0MjI1NywgNDIyNjQsIDQyMjcwLCA0MjI3NiwgNDIyODUsIAorICAgIDQyMjg5LCA0MjI5NiwgNDIzMDAsIDQyMzA0LCA0MjMxMCwgNDIzMTYsIDQyMzIyLCA0MjMyOCwgNDIzMzIsIDQyMzM2LCAKKyAgICA0MjMzOSwgNDIzNDMsIDQyMzQ3LCA0MjM1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIzNjEsIDQyMzY0LCA0MjM2OCwgNDIzNzIsIDQyMzc4LCA0MjM4NCwgCisgICAgNDIzOTAsIDQyMzk4LCA0MjQwNSwgNDI0MDksIDQyNDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjQyMiwgNDI0MjUsIDQyNDI4LCA0MjQzMSwgNDI0MzQsIDQyNDM3LCA0MjQ0MCwgCisgICAgNDI0NDMsIDQyNDQ2LCA0MjQ0OSwgNDI0NTMsIDQyNDU3LCA0MjQ2MSwgNDI0NjUsIDQyNDY5LCA0MjQ3MywgNDI0NzcsIAorICAgIDQyNDgxLCA0MjQ4NSwgNDI0ODksIDQyNDkzLCA0MjQ5NiwgNDI0OTksIDQyNTAyLCA0MjUwNSwgNDI1MDgsIDQyNTExLCAKKyAgICA0MjUxNCwgNDI1MTcsIDQyNTIwLCA0MjUyNCwgNDI1MjgsIDQyNTMyLCA0MjUzNiwgNDI1NDAsIDQyNTQ0LCA0MjU0OCwgCisgICAgNDI1NTIsIDQyNTU2LCA0MjU2MCwgNDI1NjQsIDQyNTcwLCA0MjU3NiwgNDI1ODIsIDQyNTg5LCA0MjU5NiwgNDI2MDMsIAorICAgIDQyNjEwLCA0MjYxNywgNDI2MjQsIDQyNjMxLCA0MjYzOCwgNDI2NDUsIDQyNjUyLCA0MjY1OSwgNDI2NjYsIDQyNjczLCAKKyAgICA0MjY4MCwgNDI2ODcsIDQyNjk0LCA0MjcwMSwgNDI3MDYsIDQyNzEyLCA0MjcxOCwgNDI3MjQsIDQyNzI5LCA0MjczNSwgCisgICAgNDI3NDEsIDQyNzQ3LCA0Mjc1MiwgNDI3NTgsIDQyNzY0LCA0Mjc2OSwgNDI3NzQsIDQyNzc5LCA0Mjc4NCwgNDI3OTAsIAorICAgIDQyNzk2LCA0MjgwMSwgNDI4MDYsIDQyODEyLCA0MjgxNywgNDI4MjMsIDQyODI5LCA0MjgzNSwgNDI4NDEsIDQyODQ3LCAKKyAgICA0Mjg1MiwgNDI4NTgsIDQyODY0LCA0Mjg3MCwgNDI4NzUsIDQyODgxLCA0Mjg4NywgNDI4OTMsIDQyODk4LCA0MjkwNCwgCisgICAgNDI5MTAsIDQyOTE1LCA0MjkyMCwgNDI5MjUsIDQyOTMwLCA0MjkzNiwgNDI5NDIsIDQyOTQ3LCA0Mjk1MiwgNDI5NTgsIAorICAgIDQyOTYzLCA0Mjk2OSwgNDI5NzUsIDQyOTgxLCA0Mjk4NywgNDI5OTMsIDQyOTk4LCA0MzAwNCwgNDMwMTAsIDQzMDE2LCAKKyAgICA0MzAyMSwgNDMwMjcsIDQzMDMzLCA0MzAzOSwgNDMwNDQsIDQzMDUwLCA0MzA1NiwgNDMwNjEsIDQzMDY2LCA0MzA3MSwgCisgICAgNDMwNzYsIDQzMDgyLCA0MzA4OCwgNDMwOTMsIDQzMDk4LCA0MzEwNCwgNDMxMDksIDQzMTE1LCA0MzEyMSwgNDMxMjcsIAorICAgIDQzMTMzLCA0MzEzOSwgNDMxNDMsIDQzMTQ5LCA0MzE1NSwgNDMxNjEsIDQzMTY3LCA0MzE3MywgNDMxNzksIDQzMTg1LCAKKyAgICA0MzE5MSwgNDMxOTcsIDQzMjAzLCA0MzIwNywgNDMyMTEsIDQzMjE1LCA0MzIxOSwgNDMyMjMsIDQzMjI3LCA0MzIzMSwgCisgICAgNDMyMzUsIDQzMjM5LCA0MzI0NCwgNDMyNTAsIDQzMjU1LCA0MzI2MCwgNDMyNjUsIDQzMjcwLCA0MzI3OSwgNDMyODgsIAorICAgIDQzMjk3LCA0MzMwNiwgNDMzMTUsIDQzMzI0LCA0MzMzMywgNDMzNDIsIDQzMzQ5LCA0MzM1NywgNDMzNjUsIDQzMzcyLCAKKyAgICA0MzM3OSwgNDMzODcsIDQzMzk1LCA0MzQwMiwgNDM0MDksIDQzNDE3LCA0MzQyNSwgNDM0MzIsIDQzNDM5LCA0MzQ0NywgCisgICAgNDM0NTUsIDQzNDYyLCA0MzQ2OSwgNDM0NzcsIDQzNDg2LCA0MzQ5NSwgNDM1MDMsIDQzNTEyLCA0MzUyMSwgNDM1MjgsIAorICAgIDQzNTM1LCA0MzU0MywgNDM1NTIsIDQzNTYxLCA0MzU2OSwgNDM1NzgsIDQzNTg3LCA0MzU5NCwgNDM2MDEsIDQzNjEwLCAKKyAgICA0MzYxOSwgNDM2MjcsIDQzNjM1LCA0MzY0NCwgNDM2NTMsIDQzNjYwLCA0MzY2NywgNDM2NzYsIDQzNjg1LCA0MzY5MywgCisgICAgNDM3MDEsIDQzNzEwLCA0MzcxOSwgNDM3MjYsIDQzNzMzLCA0Mzc0MiwgNDM3NTEsIDQzNzU5LCA0Mzc2OCwgNDM3NzcsIAorICAgIDQzNzg1LCA0Mzc5NSwgNDM4MDUsIDQzODE1LCA0MzgyNSwgNDM4MzQsIDQzODQzLCA0Mzg1MiwgNDM4NjEsIDQzODY4LCAKKyAgICA0Mzg3NiwgNDM4ODQsIDQzODkyLCA0MzkwMCwgNDM5MDUsIDQzOTEwLCA0MzkxOSwgNDM5MjcsIDQzOTM0LCA0Mzk0MywgCisgICAgNDM5NTEsIDQzOTU4LCA0Mzk2NywgNDM5NzUsIDQzOTgyLCA0Mzk5MSwgNDM5OTksIDQ0MDA2LCA0NDAxNSwgNDQwMjMsIAorICAgIDQ0MDMwLCA0NDAzOSwgNDQwNDcsIDQ0MDU0LCA0NDA2MywgNDQwNzEsIDQ0MDc4LCA0NDA4NywgNDQwOTUsIDQ0MTAyLCAKKyAgICA0NDExMSwgNDQxMTksIDQ0MTI2LCA0NDEzNSwgNDQxNDQsIDQ0MTUzLCA0NDE2MiwgNDQxNzUsIDQ0MTg4LCA0NDE5NSwgCisgICAgNDQyMDAsIDQ0MjA1LCA0NDIxMCwgNDQyMTUsIDQ0MjIwLCA0NDIyNSwgNDQyMzAsIDQ0MjM1LCA0NDI0MywgNDQyNTEsIAorICAgIDQ0MjU5LCA0NDI2NywgNDQyNzIsIDQ0Mjc5LCA0NDI4NiwgNDQyOTMsIDQ0Mjk4LCA0NDMwNiwgNDQzMTMsIDQ0MzIxLCAKKyAgICA0NDMyNSwgNDQzMzIsIDQ0MzM4LCA0NDM0NSwgNDQzNDksIDQ0MzU1LCA0NDM2MSwgNDQzNjcsIDQ0MzcxLCA0NDM3NCwgCisgICAgNDQzNzgsIDQ0MzgyLCA0NDM4OSwgNDQzOTUsIDQ0NDAxLCA0NDQwNywgNDQ0MTMsIDQ0NDI3LCA0NDQzNywgNDQ0NTEsIAorICAgIDQ0NDY1LCA0NDQ3MSwgNDQ0ODEsIDQ0NDk1LCA0NDQ5OCwgNDQ1MDEsIDQ0NTA4LCA0NDUxNiwgNDQ1MjEsIDQ0NTI2LCAKKyAgICA0NDUzNCwgNDQ1NDUsIDQ0NTU2LCA0NDU2NCwgNDQ1NjgsIDQ0NTcyLCA0NDU3NSwgNDQ1NzgsIDQ0NTgyLCA0NDU4NiwgCisgICAgNDQ1ODksIDQ0NTkyLCA0NDU5NywgNDQ2MDIsIDQ0NjA4LCA0NDYxNCwgNDQ2MTksIDQ0NjI0LCA0NDYzMCwgNDQ2MzYsIAorICAgIDQ0NjQxLCA0NDY0NiwgNDQ2NTEsIDQ0NjU2LCA0NDY2MiwgNDQ2NjgsIDQ0NjczLCA0NDY3OCwgNDQ2ODQsIDQ0NjkwLCAKKyAgICA0NDY5NSwgNDQ3MDAsIDQ0NzAzLCA0NDcwNiwgNDQ3MTUsIDQ0NzE3LCA0NDcxOSwgNDQ3MjIsIDQ0NzI2LCA0NDczMiwgCisgICAgNDQ3MzQsIDQ0NzM3LCA0NDc0NCwgNDQ3NTEsIDQ0NzU5LCA0NDc2NywgNDQ3NzcsIDQ0NzkxLCA0NDc5NiwgNDQ4MDEsIAorICAgIDQ0ODA1LCA0NDgxMCwgNDQ4MTgsIDQ0ODI2LCA0NDgzNSwgNDQ4NDQsIDQ0ODUzLCA0NDg2MiwgNDQ4NjcsIDQ0ODcyLCAKKyAgICA0NDg3OCwgNDQ4ODQsIDQ0ODkwLCA0NDg5NiwgNDQ4OTksIDQ0OTA1LCA0NDkxMSwgNDQ5MjEsIDQ0OTMxLCA0NDkzOSwgCisgICAgNDQ5NDcsIDQ0OTU2LCA0NDk2NSwgNDQ5NjksIDQ0OTc3LCA0NDk4NSwgNDQ5OTMsIDQ1MDAxLCA0NTAxMCwgNDUwMTksIAorICAgIDQ1MDI4LCA0NTAzNywgNDUwNDIsIDQ1MDQ3LCA0NTA1MiwgNDUwNTcsIDQ1MDYyLCA0NTA2OCwgNDUwNzQsIDQ1MDc5LCAKKyAgICA0NTA4NSwgNDUwODcsIDQ1MDg5LCA0NTA5MSwgNDUwOTMsIDQ1MDk2LCA0NTA5OSwgNDUxMDEsIDQ1MTAzLCA0NTEwNSwgCisgICAgNDUxMDksIDQ1MTEzLCA0NTExNSwgNDUxMTcsIDQ1MTIwLCA0NTEyMywgNDUxMjcsIDQ1MTMzLCA0NTEzOSwgNDUxNDEsIAorICAgIDQ1MTQ4LCA0NTE1MiwgNDUxNTcsIDQ1MTYyLCA0NTE2NCwgNDUxNzMsIDQ1MTc5LCA0NTE4NSwgNDUxOTEsIDQ1MTk3LCAKKyAgICA0NTIwMywgNDUyMDksIDQ1MjE0LCA0NTIxNywgNDUyMjAsIDQ1MjIzLCA0NTIyNSwgNDUyMjcsIDQ1MjMxLCA0NTIzNSwgCisgICAgNDUyNDAsIDQ1MjQ1LCA0NTI1MCwgNDUyNTMsIDQ1MjU3LCA0NTI2MiwgNDUyNjUsIDQ1MjY5LCA0NTI3NCwgNDUyNzksIAorICAgIDQ1Mjg0LCA0NTI4OSwgNDUyOTQsIDQ1Mjk5LCA0NTMwNCwgNDUzMDksIDQ1MzE0LCA0NTMxOSwgNDUzMjQsIDQ1MzI5LCAKKyAgICA0NTMzNSwgNDUzNDEsIDQ1MzQ3LCA0NTM0OSwgNDUzNTIsIDQ1MzU0LCA0NTM1NywgNDUzNTksIDQ1MzYxLCA0NTM2MywgCisgICAgNDUzNjUsIDQ1MzY3LCA0NTM2OSwgNDUzNzEsIDQ1MzczLCA0NTM3NSwgNDUzNzcsIDQ1Mzc5LCA0NTM4MSwgNDUzODMsIAorICAgIDQ1Mzg1LCA0NTM4NywgNDUzODksIDQ1MzkxLCA0NTM5NiwgNDU0MDEsIDQ1NDA2LCA0NTQxMSwgNDU0MTYsIDQ1NDIxLCAKKyAgICA0NTQyNiwgNDU0MzEsIDQ1NDM2LCA0NTQ0MSwgNDU0NDYsIDQ1NDUxLCA0NTQ1NiwgNDU0NjEsIDQ1NDY2LCA0NTQ3MSwgCisgICAgNDU0NzYsIDQ1NDgxLCA0NTQ4NiwgNDU0OTEsIDQ1NDk1LCA0NTQ5OSwgNDU1MDMsIDQ1NTA5LCA0NTUxNSwgNDU1MjAsIAorICAgIDQ1NTI1LCA0NTUzMCwgNDU1MzUsIDQ1NTQwLCA0NTU0NSwgNDU1NTMsIDQ1NTYxLCA0NTU2OSwgNDU1NzcsIDQ1NTg1LCAKKyAgICA0NTU5MywgNDU2MDEsIDQ1NjA5LCA0NTYxNSwgNDU2MjAsIDQ1NjI1LCA0NTYzMCwgNDU2MzMsIDQ1NjM3LCA0NTY0MSwgCisgICAgNDU2NDUsIDQ1NjQ5LCA0NTY1MywgNDU2NTcsIDQ1NjY0LCA0NTY3MSwgNDU2NzksIDQ1Njg3LCA0NTY5MiwgNDU2OTcsIAorICAgIDQ1NzA0LCA0NTcxMSwgNDU3MTgsIDQ1NzI1LCA0NTcyOCwgNDU3MzEsIDQ1NzM2LCA0NTczOCwgNDU3NDIsIDQ1NzQ3LCAKKyAgICA0NTc0OSwgNDU3NTEsIDQ1NzUzLCA0NTc1NSwgNDU3NjAsIDQ1NzYzLCA0NTc2NSwgNDU3NzAsIDQ1Nzc3LCA0NTc4NCwgCisgICAgNDU3ODcsIDQ1NzkxLCA0NTc5NiwgNDU4MDEsIDQ1ODA5LCA0NTgxNSwgNDU4MjAsIDQ1ODMxLCA0NTgzNywgNDU4NDMsIAorICAgIDQ1ODQ4LCA0NTg1MywgNDU4NTksIDQ1ODYyLCA0NTg2NSwgNDU4NzAsIDQ1ODcyLCA0NTg3NiwgNDU4NzgsIDQ1ODgwLCAKKyAgICA0NTg4MiwgNDU4ODQsIDQ1ODg2LCA0NTg4OCwgNDU4OTMsIDQ1ODk1LCA0NTg5NywgNDU4OTksIDQ1OTAxLCA0NTkwNSwgCisgICAgNDU5MDcsIDQ1OTEwLCA0NTkxNSwgNDU5MjAsIDQ1OTI1LCA0NTkzMCwgNDU5MzYsIDQ1OTQyLCA0NTk0NCwgNDU5NDcsIAorICAgIDQ1OTU0LCA0NTk2MCwgNDU5NjYsIDQ1OTczLCA0NTk3NywgMCwgNDU5ODEsIDQ1OTgzLCA0NTk4NywgNDU5OTMsIDQ1OTk4LCAKKyAgICA0NjAwMCwgNDYwMDQsIDQ2MDEzLCA0NjAyMSwgNDYwMjksIDQ2MDM1LCA0NjA0MSwgNDYwNDYsIDQ2MDUyLCA0NjA1NywgCisgICAgNDYwNjAsIDQ2MDc0LCA0NjA3NywgNDYwODIsIDAsIDQ2MDg3LCAwLCAwLCAwLCAwLCA0NjA5NiwgNDYxMDMsIDQ2MTA3LCAKKyAgICA0NjEwOSwgNDYxMTEsIDQ2MTE1LCA0NjEyMSwgNDYxMjYsIDQ2MTMyLCA0NjEzNCwgNDYxNDAsIDQ2MTQyLCA0NjE0OCwgCisgICAgNDYxNTAsIDQ2MTUyLCA0NjE1NywgNDYxNTksIDQ2MTYzLCA0NjE2OCwgNDYxNzAsIDQ2MTc1LCA0NjE4MCwgNDYxODQsIAorICAgIDQ2MTkxLCAwLCA0NjIwMSwgNDYyMDcsIDQ2MjEwLCA0NjIxNiwgMCwgNDYyMTksIDQ2MjI0LCA0NjIyOCwgNDYyMzAsIDAsIAorICAgIDAsIDQ2MjMyLCA0NjIzNiwgNDYyNDAsIDQ2MjQ1LCA0NjI0NywgNDYyNTIsIDQ2MjU1LCA0NjI1OCwgNDYyNjEsIDQ2MjY1LCAKKyAgICA0NjI2OSwgNDYyNzQsIDQ2Mjc4LCA0NjI4MywgNDYyODgsIDQ2MjkyLCA0NjI5OCwgNDYzMDUsIDQ2MzA4LCA0NjMxNCwgCisgICAgNDYzMTksIDQ2MzIzLCA0NjMyOCwgNDYzMzQsIDQ2MzQwLCA0NjM0NywgNDYzNTMsIDQ2MzYwLCAwLCA0NjM2NywgNDYzNzQsIAorICAgIDQ2Mzc4LCA0NjM4NSwgNDYzOTEsIDQ2Mzk2LCA0NjQwMiwgNDY0MDYsIDQ2NDExLCA0NjQxNCwgNDY0MjAsIDQ2NDI2LCAKKyAgICA0NjQzMywgNDY0NDEsIDQ2NDQ4LCA0NjQ1NywgNDY0NjcsIDQ2NDc0LCA0NjQ4MCwgNDY0ODQsIDQ2NDkyLCA0NjQ5NywgCisgICAgNDY1MDYsIDQ2NTA5LCA0NjUxMiwgNDY1MjEsIDQ2NTMyLCA0NjUzOSwgNDY1NDEsIDQ2NTQ3LCA0NjU1MiwgNDY1NTQsIAorICAgIDQ2NTU3LCA0NjU2MSwgNDY1NjksIDAsIDQ2NTc4LCAwLCA0NjU4MywgNDY1OTEsIDQ2NTk5LCA0NjYwNywgMCwgMCwgMCwgCisgICAgNDY2MTUsIDQ2NjIzLCA0NjYyOCwgNDY2MzEsIDQ2NjM1LCA0NjYzOCwgNDY2NDksIDQ2NjU5LCA0NjY2OSwgMCwgMCwgCisgICAgNDY2NzgsIDQ2Njg3LCA0NjY5MywgNDY3MDEsIDQ2NzA1LCA0NjcxMywgNDY3MTcsIDQ2NzI1LCA0NjczMiwgNDY3MzksIAorICAgIDQ2NzQ4LCA0Njc1NywgNDY3NjcsIDQ2Nzc3LCA0Njc4NywgNDY3OTcsIDQ2ODA2LCA0NjgxNSwgNDY4MjUsIDQ2ODM1LCAKKyAgICA0Njg0NCwgNDY4NTMsIDQ2ODYwLCA0Njg2NywgNDY4NzQsIDQ2ODgxLCA0Njg4OCwgNDY4OTUsIDQ2OTAyLCA0NjkwOSwgCisgICAgNDY5MTYsIDQ2OTI0LCA0NjkzMCwgNDY5MzYsIDQ2OTQyLCA0Njk0OCwgNDY5NTQsIDQ2OTYwLCA0Njk2NiwgNDY5NzIsIAorICAgIDQ2OTc4LCA0Njk4NSwgNDY5OTMsIDQ3MDAxLCA0NzAwOSwgNDcwMTcsIDQ3MDI1LCA0NzAzMywgNDcwNDEsIDQ3MDQ5LCAKKyAgICA0NzA1NywgNDcwNjYsIDAsIDAsIDAsIDQ3MDcxLCA0NzA3NywgNDcwODAsIDQ3MDg2LCA0NzA5MiwgNDcwOTcsIDQ3MTAxLCAKKyAgICA0NzEwNiwgNDcxMTIsIDQ3MTE5LCA0NzEyMiwgNDcxMjksIDQ3MTM2LCA0NzE0MCwgNDcxNDksIDQ3MTU4LCA0NzE2MywgCisgICAgNDcxNjksIDQ3MTc0LCA0NzE3OSwgNDcxODYsIDQ3MTkzLCA0NzIwMSwgNDcyMDksIDAsIDQ3MjE4LCA0NzIyNywgNDcyMzIsIAorICAgIDQ3MjM2LCA0NzI0MywgNDcyNDcsIDQ3MjU0LCA0NzI2MiwgNDcyNjcsIDQ3Mjc1LCA0NzI3OSwgNDcyODQsIDQ3Mjg4LCAKKyAgICA0NzI5MywgMCwgNDcyOTcsIDQ3MzAyLCA0NzMxMSwgNDczMTMsIDQ3MzE3LCA0NzMyMSwgNDczMjgsIDQ3MzM1LCA0NzM0MCwgCisgICAgNDczNDgsIDQ3MzU0LCAwLCA0NzM2MCwgMCwgMCwgMCwgNDczNjMsIDQ3MzcxLCA0NzM3NSwgNDczODIsIDQ3MzkwLCAKKyAgICA0NzM5OCwgNDc0MDMsIDQ3NDA4LCA0NzQxNCwgNDc0MTksIDQ3NDI0LCA0NzQzMCwgNDc0MzUsIDQ3NDM4LCA0NzQ0MiwgCisgICAgNDc0NDYsIDQ3NDUzLCA0NzQ2MiwgNDc0NjcsIDQ3NDc2LCA0NzQ4NSwgNDc0OTEsIDQ3NDk3LCA0NzUwMiwgNDc1MDcsIAorICAgIDQ3NTEyLCA0NzUxNywgNDc1MjMsIDQ3NTI5LCA0NzUzNywgNDc1NDUsIDQ3NTUxLCA0NzU1NywgNDc1NjIsIDQ3NTY3LCAKKyAgICA0NzU3NCwgNDc1ODEsIDQ3NTg3LCA0NzU5MCwgNDc1OTMsIDQ3NTk3LCA0NzYwMSwgNDc2MDUsIDQ3NjEwLCA0NzYxNiwgCisgICAgNDc2MjIsIDQ3NjI5LCA0NzYzNiwgNDc2NDEsIDQ3NjQ1LCA0NzY0OSwgNDc2NTMsIDQ3NjU3LCA0NzY2MSwgNDc2NjUsIAorICAgIDQ3NjY5LCA0NzY3MywgNDc2NzcsIDQ3NjgxLCA0NzY4NSwgNDc2ODksIDQ3NjkzLCA0NzY5NywgNDc3MDEsIDQ3NzA1LCAKKyAgICA0NzcwOSwgNDc3MTMsIDQ3NzE3LCA0NzcyMSwgNDc3MjUsIDQ3NzI5LCA0NzczMywgNDc3MzcsIDQ3NzQxLCA0Nzc0NSwgCisgICAgNDc3NDksIDQ3NzUzLCA0Nzc1NywgNDc3NjEsIDQ3NzY1LCA0Nzc2OSwgNDc3NzMsIDQ3Nzc3LCA0Nzc4MSwgNDc3ODUsIAorICAgIDQ3Nzg5LCA0Nzc5MywgNDc3OTcsIDQ3ODAxLCA0NzgwNSwgNDc4MDksIDQ3ODEzLCA0NzgxNywgNDc4MjEsIDQ3ODI1LCAKKyAgICA0NzgyOSwgNDc4MzMsIDQ3ODM3LCA0Nzg0MSwgNDc4NDUsIDQ3ODQ5LCA0Nzg1MywgNDc4NTcsIDQ3ODYxLCA0Nzg2NSwgCisgICAgNDc4NjksIDQ3ODczLCA0Nzg3NywgNDc4ODEsIDQ3ODg1LCA0Nzg4OSwgNDc4OTMsIDQ3ODk3LCA0NzkwMSwgNDc5MDUsIAorICAgIDQ3OTA5LCA0NzkxMywgNDc5MTcsIDQ3OTIxLCA0NzkyNSwgNDc5MjksIDQ3OTMzLCA0NzkzNywgNDc5NDEsIDQ3OTQ1LCAKKyAgICA0Nzk0OSwgNDc5NTMsIDQ3OTU3LCA0Nzk2MSwgNDc5NjUsIDQ3OTY5LCA0Nzk3MywgNDc5NzcsIDQ3OTgxLCA0Nzk4NSwgCisgICAgNDc5ODksIDQ3OTkzLCA0Nzk5NywgNDgwMDEsIDQ4MDA1LCA0ODAwOSwgNDgwMTMsIDQ4MDE3LCA0ODAyMSwgNDgwMjUsIAorICAgIDQ4MDI5LCA0ODAzMywgNDgwMzcsIDQ4MDQxLCA0ODA0NSwgNDgwNDksIDQ4MDUzLCA0ODA1NywgNDgwNjEsIDQ4MDY1LCAKKyAgICA0ODA2OSwgNDgwNzMsIDQ4MDc3LCA0ODA4MSwgNDgwODUsIDQ4MDg5LCA0ODA5MywgNDgwOTcsIDQ4MTAxLCA0ODEwNSwgCisgICAgNDgxMDksIDQ4MTEzLCA0ODExNywgNDgxMjEsIDQ4MTI1LCA0ODEyOSwgNDgxMzMsIDQ4MTM3LCA0ODE0MSwgNDgxNDUsIAorICAgIDQ4MTQ5LCA0ODE1MywgNDgxNTcsIDQ4MTYxLCA0ODE2NSwgNDgxNjksIDQ4MTczLCA0ODE3NywgNDgxODEsIDQ4MTg1LCAKKyAgICA0ODE4OSwgNDgxOTMsIDQ4MTk3LCA0ODIwMSwgNDgyMDUsIDQ4MjA5LCA0ODIxMywgNDgyMTcsIDQ4MjIxLCA0ODIyNSwgCisgICAgNDgyMjksIDQ4MjMzLCA0ODIzNywgNDgyNDEsIDQ4MjQ1LCA0ODI0OSwgNDgyNTMsIDQ4MjU3LCA0ODI2MSwgNDgyNjUsIAorICAgIDQ4MjY5LCA0ODI3MywgNDgyNzcsIDQ4MjgxLCA0ODI4NSwgNDgyODksIDQ4MjkzLCA0ODI5NywgNDgzMDEsIDQ4MzA1LCAKKyAgICA0ODMwOSwgNDgzMTMsIDQ4MzE3LCA0ODMyMSwgNDgzMjUsIDQ4MzI5LCA0ODMzMywgNDgzMzcsIDQ4MzQxLCA0ODM0NSwgCisgICAgNDgzNDksIDQ4MzUzLCA0ODM1NywgNDgzNjEsIDQ4MzY1LCA0ODM2OSwgNDgzNzMsIDQ4Mzc3LCA0ODM4MSwgNDgzODUsIAorICAgIDQ4Mzg5LCA0ODM5MywgNDgzOTcsIDQ4NDAxLCA0ODQwNSwgNDg0MDksIDQ4NDEzLCA0ODQxNywgNDg0MjEsIDQ4NDI1LCAKKyAgICA0ODQyOSwgNDg0MzMsIDQ4NDM3LCA0ODQ0MSwgNDg0NDUsIDQ4NDQ5LCA0ODQ1MywgNDg0NTcsIDQ4NDYxLCA0ODQ2NSwgCisgICAgNDg0NjksIDQ4NDczLCA0ODQ3NywgNDg0ODEsIDQ4NDg1LCA0ODQ4OSwgNDg0OTMsIDQ4NDk3LCA0ODUwMSwgNDg1MDUsIAorICAgIDQ4NTA5LCA0ODUxMywgNDg1MTcsIDQ4NTIxLCA0ODUyNSwgNDg1MjksIDQ4NTMzLCA0ODUzNywgNDg1NDEsIDQ4NTQ1LCAKKyAgICA0ODU0OSwgNDg1NTMsIDQ4NTU3LCA0ODU2MSwgNDg1NjUsIDQ4NTY5LCA0ODU3MywgNDg1NzcsIDQ4NTgxLCA0ODU4NSwgCisgICAgNDg1ODksIDQ4NTkzLCA0ODU5NywgNDg2MDEsIDQ4NjA1LCA0ODYwOSwgNDg2MTMsIDQ4NjE3LCA0ODYyMSwgNDg2MjUsIAorICAgIDQ4NjI5LCA0ODYzMywgNDg2MzcsIDQ4NjQxLCA0ODY0NSwgNDg2NDksIDQ4NjUzLCA0ODY1NywgNDg2NjEsIDQ4NjY1LCAKKyAgICA0ODY3MiwgNDg2ODAsIDQ4Njg2LCA0ODY5MiwgNDg2OTksIDQ4NzA2LCA0ODcxMiwgNDg3MTgsIDQ4NzI0LCA0ODczMCwgCisgICAgNDg3MzUsIDQ4NzQwLCA0ODc0NSwgNDg3NTAsIDQ4NzU2LCA0ODc2MiwgNDg3NzAsIDQ4Nzc3LCA0ODc4MiwgNDg3ODcsIAorICAgIDQ4Nzk1LCA0ODgwNCwgNDg4MTEsIDQ4ODIxLCA0ODgzMiwgNDg4MzUsIDQ4ODM4LCA0ODg0MiwgNDg4NDYsIDQ4ODUyLCAKKyAgICA0ODg1OCwgNDg4NjgsIDQ4ODc4LCA0ODg4OCwgNDg4OTgsIDQ4OTA1LCA0ODkxMiwgNDg5MTksIDQ4OTI2LCA0ODkzNywgCisgICAgNDg5NDgsIDQ4OTU5LCA0ODk3MCwgNDg5ODAsIDQ4OTkwLCA0OTAwMiwgNDkwMTQsIDQ5MDI1LCA0OTAzNiwgNDkwNDgsIAorICAgIDQ5MDYwLCA0OTA2OSwgNDkwNzksIDQ5MDg5LCA0OTEwMCwgNDkxMTEsIDQ5MTE4LCA0OTEyNSwgNDkxMzIsIDQ5MTM5LCAKKyAgICA0OTE0OSwgNDkxNTksIDQ5MTY3LCA0OTE3NSwgNDkxODIsIDQ5MTg5LCA0OTE5NiwgNDkyMDMsIDQ5MjEwLCA0OTIxNSwgCisgICAgNDkyMjAsIDQ5MjI2LCA0OTIzNCwgNDkyNDQsIDQ5MjUyLCA0OTI2MCwgNDkyNjgsIDQ5Mjc2LCA0OTI4NCwgNDkyOTIsIAorICAgIDQ5MzAwLCA0OTMwOCwgNDkzMTYsIDQ5MzI0LCA0OTMzMywgNDkzNDIsIDQ5MzUwLCA0OTM1OCwgNDkzNjcsIDQ5Mzc2LCAKKyAgICA0OTM4NSwgNDkzOTQsIDQ5NDA0LCA0OTQxNCwgNDk0MjMsIDQ5NDMyLCA0OTQ0MiwgNDk0NTIsIDQ5NDY2LCA0OTQ4MywgCisgICAgNDk0OTcsIDQ5NTE0LCA0OTUyOCwgNDk1NDIsIDQ5NTU2LCA0OTU3MCwgNDk1ODAsIDQ5NTkxLCA0OTYwMSwgNDk2MTIsIAorICAgIDQ5NjI5LCA0OTY0NiwgNDk2NTQsIDQ5NjYwLCA0OTY2NywgNDk2NzQsIDQ5NjgxLCA0OTY4OCwgNDk2OTMsIDQ5Njk5LCAKKyAgICA0OTcwNCwgNDk3MDksIDQ5NzE1LCA0OTcyMCwgNDk3MjUsIDQ5NzMwLCA0OTczNSwgNDk3NDAsIDQ5NzQ3LCA0OTc1MiwgCisgICAgNDk3NTksIDQ5NzY0LCA0OTc2OSwgNDk3NzMsIDQ5Nzc3LCA0OTc4NCwgNDk3OTEsIDQ5Nzk4LCA0OTgwNSwgNDk4MTIsIAorICAgIDQ5ODE5LCA0OTgzMiwgNDk4NDUsIDQ5ODU4LCA0OTg3MSwgNDk4NzksIDQ5ODg3LCA0OTg5MywgNDk4OTksIDQ5OTA2LCAKKyAgICA0OTkxMywgNDk5MjAsIDQ5OTI3LCA0OTkzMSwgNDk5MzYsIDQ5OTQ0LCA0OTk1MiwgNDk5NjAsIDQ5OTY3LCA0OTk3MSwgCisgICAgNDk5NzksIDQ5OTg3LCA0OTk5MCwgNDk5OTMsIDQ5OTk4LCA1MDAwNCwgNTAwMTIsIDUwMDIwLCA1MDA0MCwgNTAwNjAsIAorICAgIDUwMDgwLCA1MDEwMCwgNTAxMjAsIDUwMTQwLCA1MDE2MCwgNTAxODAsIDUwMTg1LCA1MDE5MiwgNTAyMDEsIDUwMjA5LCAKKyAgICA1MDIxNywgNTAyMjIsIDUwMjI1LCA1MDIyOCwgNTAyMzMsIDUwMjM2LCA1MDI1NSwgNTAyNjIsIDUwMjY4LCA1MDI3NCwgCisgICAgNTAyNzgsIDUwMjgxLCA1MDI4NCwgNTAyODcsIDUwMjk4LCA1MDMxMCwgNTAzMTcsIDUwMzI0LCA1MDMyNywgNTAzMzEsIAorICAgIDUwMzM0LCA1MDMzOSwgNTAzNDQsIDUwMzQ5LCA1MDM1NSwgNTAzNjQsIDUwMzcxLCA1MDM3OCwgNTAzODYsIDUwMzkzLCAKKyAgICA1MDQwMCwgNTA0MDMsIDUwNDA5LCA1MDQxNSwgNTA0MTgsIDUwNDIxLCA1MDQyNiwgNTA0MzEsIDUwNDM3LCA1MDQ0MywgCisgICAgNTA0NDcsIDUwNDUyLCA1MDQ1OSwgNTA0NjMsIDUwNDY5LCA1MDQ3MywgNTA0NzcsIDUwNDg1LCA1MDQ5NywgNTA1MDUsIAorICAgIDUwNTA5LCA1MDUxMSwgNTA1MjAsIDUwNTI5LCA1MDUzNSwgNTA1MzgsIDUwNTQ0LCA1MDU1MCwgNTA1NTUsIDUwNTYwLCAKKyAgICA1MDU2NSwgNTA1NzAsIDUwNTc1LCA1MDU4MCwgNTA1ODIsIDUwNTg4LCA1MDU5MywgNTA2MDAsIDUwNjA0LCA1MDYxMCwgCisgICAgNTA2MTMsIDUwNjE3LCA1MDYyNCwgNTA2MzEsIDUwNjMzLCA1MDYzNSwgNTA2NDEsIDUwNjQ3LCA1MDY1MywgNTA2NjIsIAorICAgIDUwNjcxLCA1MDY3OCwgNTA2ODUsIDUwNjkxLCA1MDY5NywgNTA3MDIsIDUwNzA3LCA1MDcxMiwgNTA3MTgsIDUwNzI0LCAKKyAgICA1MDcyOSwgNTA3MzYsIDUwNzQwLCA1MDc0NCwgNTA3NTcsIDUwNzcwLCA1MDc4MSwgNTA3OTAsIDUwNzk2LCA1MDgwMywgCisgICAgNTA4MDgsIDUwODEzLCA1MDgxOCwgNTA4MjMsIDUwODI4LCA1MDgzMCwgNTA4MzcsIDUwODQ0LCA1MDg1MSwgNTA4NTgsIAorICAgIDUwODY1LCA1MDg3MywgNTA4NzksIDUwODg0LCA1MDg5MCwgNTA4OTYsIDUwOTAyLCA1MDkwOSwgNTA5MTUsIDUwOTIzLCAKKyAgICA1MDkzMSwgNTA5MzksIDUwOTQ3LCA1MDk1NCwgNTA5NjAsIDUwOTY2LCA1MDk3NSwgNTA5NzksIDUwOTg4LCA1MDk5NywgCisgICAgNTEwMDYsIDUxMDE0LCA1MTAxOCwgNTEwMjQsIDUxMDMxLCA1MTAzOCwgNTEwNDIsIDUxMDQ4LCA1MTA1NSwgNTEwNjAsIAorICAgIDUxMDY1LCA1MTA3MSwgNTEwNzYsIDUxMDgxLCA1MTA4OCwgNTEwOTUsIDUxMTAwLCA1MTEwNSwgNTExMTMsIDUxMTIxLCAKKyAgICA1MTEzMSwgNTExNDEsIDUxMTQ4LCA1MTE1NSwgNTExNTksIDUxMTYzLCA1MTE3NSwgNTExODEsIDUxMTg3LCA1MTE5MiwgCisgICAgNTExOTcsIDUxMjA0LCA1MTIxMSwgNTEyMTcsIDUxMjIzLCA1MTIzMiwgNTEyNDAsIDUxMjQ4LCA1MTI1NSwgNTEyNjIsIAorICAgIDUxMjY5LCA1MTI3NSwgNTEyODIsIDUxMjg4LCA1MTI5NSwgNTEzMDIsIDUxMzA5LCA1MTMxNiwgNTEzMjIsIDUxMzI3LCAKKyAgICA1MTMzNiwgNTEzNDYsIDUxMzUzLCA1MTM2MiwgNTEzNjgsIDUxMzczLCA1MTM3OCwgNTEzODcsIDUxMzkzLCA1MTM5OSwgCisgICAgNTE0MDUsIDUxNDEzLCA1MTQxOCwgNTE0MjUsIDUxNDMyLCA1MTQ0MywgNTE0NTAsIDUxNDU3LCA1MTQ2NCwgNTE0NzEsIAorICAgIDUxNDc4LCA1MTQ4NSwgNTE0OTIsIDUxNTAzLCA1MTUxNCwgNTE1MjQsIDUxNTM0LCA1MTU0NiwgNTE1NTgsIDUxNTYzLCAKKyAgICA1MTU2OCwgNTE1NzYsIDUxNTg0LCA1MTU5MCwgNTE1OTYsIDUxNjA1LCA1MTYxNCwgNTE2MjIsIDUxNjMwLCA1MTYzOCwgCisgICAgNTE2NDYsIDUxNjU2LCA1MTY2NiwgNTE2ODAsIDUxNjk0LCA1MTcwMSwgNTE3MDgsIDUxNzE5LCA1MTczMCwgNTE3MzcsIAorICAgIDUxNzQ0LCA1MTc1MywgNTE3NjIsIDUxNzY3LCA1MTc3MiwgNTE3ODEsIDUxNzkwLCA1MTc5NSwgNTE4MDAsIDUxODA4LCAKKyAgICA1MTgxNCwgNTE4MjAsIDUxODI4LCA1MTgzNiwgNTE4NDksIDUxODYyLCA1MTg2NiwgNTE4NzAsIDUxODc3LCA1MTg4NCwgCisgICAgNTE4OTEsIDUxODk5LCA1MTkwNywgNTE5MTUsIDUxOTIzLCA1MTkyOSwgNTE5MzUsIDUxOTQxLCA1MTk0NywgNTE5NTQsIAorICAgIDUxOTYxLCA1MTk2OSwgNTE5NzcsIDUxOTgwLCA1MTk4MywgNTE5ODgsIDUxOTkzLCA1MTk5OSwgNTIwMDUsIDUyMDEyLCAKKyAgICA1MjAxOSwgNTIwMjgsIDUyMDM3LCA1MjA0NCwgNTIwNTEsIDUyMDU5LCA1MjA2NywgNTIwNzUsIDUyMDgzLCA1MjA5MCwgCisgICAgNTIwOTcsIDUyMTA0LCA1MjExMSwgNTIxMTUsIDUyMTE5LCA1MjEyNiwgNTIxMzMsIDUyMTM4LCA1MjE0MywgNTIxNDgsIAorICAgIDUyMTUzLCA1MjE1OSwgNTIxNzMsIDUyMTgwLCA1MjE4NywgNTIxOTEsIDUyMTkzLCA1MjE5NSwgNTIyMDAsIDUyMjA1LCAKKyAgICA1MjIxMCwgNTIyMTQsIDUyMjIyLCA1MjIyOSwgNTIyMzYsIDUyMjQ0LCA1MjI1NiwgNTIyNjQsIDUyMjcyLCA1MjI4MywgCisgICAgNTIyODcsIDUyMjkxLCA1MjI5NSwgNTIzMDAsIDUyMzExLCA1MjMxOCwgNTIzMjUsIDUyMzMyLCA1MjMzNywgNTIzNDQsIAorICAgIDUyMzUzLCA1MjM2MSwgNTIzNjcsIDUyMzczLCA1MjM3OSwgNTIzODgsIDUyMzk3LCA1MjQwNSwgNTI0MTQsIDUyNDE5LCAKKyAgICA1MjQyMiwgNTI0MjcsIDUyNDMzLCA1MjQzOSwgNTI0NDUsIDUyNDUxLCA1MjQ1NSwgNTI0NTgsIDUyNDYyLCA1MjQ2NiwgCisgICAgNTI0NzIsIDUyNDc4LCA1MjQ4NCwgNTI0OTAsIDUyNDk0LCA1MjQ5OCwgNTI1MDUsIDUyNTEyLCA1MjUxOSwgNTI1MjYsIAorICAgIDUyNTMzLCA1MjU0MCwgNTI1NTAsIDUyNTYwLCA1MjU2NywgNTI1NzQsIDUyNTgyLCA1MjU5MCwgNTI1OTQsIDUyNTk5LCAKKyAgICA1MjYwNCwgNTI2MTAsIDUyNjE2LCA1MjYxOSwgNTI2MjIsIDUyNjI1LCA1MjYyOCwgNTI2MzIsIDUyNjM3LCA1MjY0MiwgCisgICAgNTI2NDcsIDUyNjUyLCA1MjY1NywgNTI2NjEsIDUyNjY1LCA1MjY2OSwgNTI2NzMsIDUyNjc3LCA1MjY4MSwgNTI2ODUsIAorICAgIDUyNjkxLCA1MjY5NSwgNTI3MDEsIDUyNzA2LCA1MjcxMywgNTI3MjEsIDUyNzI4LCA1MjczNiwgNTI3NDMsIDUyNzUxLCAKKyAgICA1Mjc2MCwgNTI3NjcsIDUyNzc3LCA1Mjc4OCwgNTI3OTQsIDUyODAzLCA1MjgwOSwgNTI4MTgsIDUyODI3LCA1MjgzMywgCisgICAgNTI4MzksIDUyODQzLCA1Mjg0NywgNTI4NTYsIDUyODY1LCA1Mjg3MiwgNTI4NzksIDUyODg4LCAwLCAwLCAwLCA1Mjg5NywgCisgICAgNTI5MDIsIDUyOTA2LCA1MjkxMCwgNTI5MTUsIDUyOTIwLCA1MjkyNSwgNTI5MzMsIDUyOTQxLCA1Mjk0NCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI5NDgsIDUyOTUzLCA1Mjk1OCwgNTI5NjMsIDUyOTY4LCAKKyAgICA1Mjk3MywgNTI5NzgsIDUyOTgzLCA1Mjk4OCwgNTI5OTMsIDUyOTk4LCA1MzAwNCwgNTMwMDgsIDUzMDEzLCA1MzAxOCwgCisgICAgNTMwMjMsIDUzMDI4LCA1MzAzMywgNTMwMzgsIDUzMDQzLCA1MzA0OCwgNTMwNTMsIDUzMDU4LCA1MzA2MywgNTMwNjgsIAorICAgIDUzMDczLCA1MzA3OCwgNTMwODMsIDUzMDg4LCA1MzA5MywgNTMwOTgsIDUzMTAzLCA1MzEwOCwgNTMxMTMsIDUzMTE4LCAKKyAgICA1MzEyNCwgNTMxMjksIDUzMTM1LCA1MzE0NCwgNTMxNDksIDUzMTU3LCA1MzE2NCwgNTMxNzMsIDUzMTc4LCA1MzE4MywgCisgICAgNTMxODgsIDUzMTk0LCAwLCA1MzIwMSwgNTMyMDYsIDUzMjExLCA1MzIxNiwgNTMyMjEsIDUzMjI2LCA1MzIzMSwgNTMyMzYsIAorICAgIDUzMjQxLCA1MzI0NiwgNTMyNTEsIDUzMjU3LCA1MzI2MSwgNTMyNjYsIDUzMjcxLCA1MzI3NiwgNTMyODEsIDUzMjg2LCAKKyAgICA1MzI5MSwgNTMyOTYsIDUzMzAxLCA1MzMwNiwgNTMzMTEsIDUzMzE2LCA1MzMyMSwgNTMzMjYsIDUzMzMxLCA1MzMzNiwgCisgICAgNTMzNDEsIDUzMzQ2LCA1MzM1MSwgNTMzNTYsIDUzMzYxLCA1MzM2NiwgNTMzNzEsIDUzMzc3LCA1MzM4MiwgNTMzODgsIAorICAgIDUzMzk3LCA1MzQwMiwgNTM0MTAsIDUzNDE3LCA1MzQyNiwgNTM0MzEsIDUzNDM2LCA1MzQ0MSwgNTM0NDcsIDAsIDUzNDU0LCAKKyAgICA1MzQ2MiwgNTM0NzAsIDUzNDgwLCA1MzQ4NywgNTM0OTUsIDUzNTAxLCA1MzUxMCwgNTM1MTgsIDUzNTI2LCA1MzUzNCwgCisgICAgNTM1NDIsIDUzNTUwLCA1MzU1OCwgNTM1NjMsIDUzNTcwLCA1MzU3NSwgNTM1ODEsIDUzNTg5LCA1MzU5NiwgNTM2MDMsIAorICAgIDUzNjExLCA1MzYxNywgNTM2MjMsIDUzNjMwLCA1MzYzNywgNTM2NDYsIDUzNjU2LCA1MzY2MiwgNTM2NjksIDUzNjc0LCAKKyAgICA1MzY4NCwgNTM2OTQsIDUzNjk5LCA1MzcwNCwgNTM3MDksIDUzNzE0LCA1MzcxOSwgNTM3MjQsIDUzNzI5LCA1MzczNCwgCisgICAgNTM3MzksIDUzNzQ0LCA1Mzc0OSwgNTM3NTQsIDUzNzU5LCA1Mzc2NCwgNTM3NjksIDUzNzc0LCA1Mzc3OSwgNTM3ODQsIAorICAgIDUzNzg5LCA1Mzc5NCwgNTM3OTksIDUzODA0LCA1MzgwOSwgNTM4MTQsIDUzODE5LCA1MzgyNCwgNTM4MjksIDUzODM0LCAKKyAgICA1MzgzOSwgNTM4NDQsIDUzODQ4LCA1Mzg1MiwgNTM4NTcsIDUzODYyLCA1Mzg2NywgNTM4NzIsIDUzODc3LCA1Mzg4MiwgCisgICAgNTM4ODcsIDUzODkyLCA1Mzg5NywgNTM5MDIsIDUzOTA3LCA1MzkxMiwgNTM5MTcsIDUzOTIyLCA1MzkyNywgNTM5MzIsIAorICAgIDUzOTM3LCA1Mzk0MiwgNTM5NDksIDUzOTU2LCA1Mzk2MywgNTM5NzAsIDUzOTc3LCA1Mzk4NCwgNTM5OTEsIDUzOTk4LCAKKyAgICA1NDAwNSwgNTQwMTIsIDU0MDE5LCA1NDAyNiwgNTQwMzMsIDU0MDQwLCA1NDA0NSwgNTQwNTAsIDU0MDU3LCA1NDA2NCwgCisgICAgNTQwNzEsIDU0MDc4LCA1NDA4NSwgNTQwOTIsIDU0MDk5LCA1NDEwNiwgNTQxMTMsIDU0MTIwLCA1NDEyNywgNTQxMzQsIAorICAgIDU0MTQwLCA1NDE0NiwgNTQxNTIsIDU0MTU4LCA1NDE2NSwgNTQxNzIsIDU0MTc5LCA1NDE4NiwgNTQxOTMsIDU0MjAwLCAKKyAgICA1NDIwNywgNTQyMTQsIDU0MjIxLCA1NDIyOCwgNTQyMzYsIDU0MjQ0LCA1NDI1MiwgNTQyNjAsIDU0MjY4LCA1NDI3NiwgCisgICAgNTQyODQsIDU0MjkyLCA1NDI5NiwgNTQzMDIsIDU0MzA4LCA1NDMxMiwgNTQzMTgsIDU0MzI0LCA1NDMzMCwgNTQzMzcsIAorICAgIDU0MzQ0LCA1NDM1MSwgNTQzNTgsIDU0MzYzLCA1NDM2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQzNzUsIDU0MzgzLCAKKyAgICA1NDM5MiwgNTQ0MDEsIDU0NDA5LCA1NDQxNSwgNTQ0MjAsIDU0NDI1LCA1NDQzMCwgNTQ0MzUsIDU0NDQwLCA1NDQ0NSwgCisgICAgNTQ0NTAsIDU0NDU1LCA1NDQ2MCwgNTQ0NjUsIDU0NDcwLCA1NDQ3NSwgNTQ0ODAsIDU0NDg1LCA1NDQ5MCwgNTQ0OTUsIAorICAgIDU0NTAwLCA1NDUwNSwgNTQ1MTAsIDU0NTE1LCA1NDUyMCwgNTQ1MjUsIDU0NTMwLCA1NDUzNSwgNTQ1NDAsIDU0NTQ1LCAKKyAgICA1NDU1MCwgNTQ1NTUsIDU0NTYwLCA1NDU2NSwgNTQ1NzAsIDU0NTc1LCA1NDU4MCwgNTQ1ODUsIDU0NTkwLCA1NDU5NSwgCisgICAgNTQ2MDAsIDU0NjA1LCA1NDYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ2MTUsIDU0NjE5LCA1NDYyNCwgCisgICAgNTQ2MjksIDU0NjM0LCA1NDYzOSwgNTQ2NDgsIDU0NjUzLCA1NDY1OCwgNTQ2NjMsIDU0NjY4LCA1NDY3MywgNTQ2NzgsIAorICAgIDU0NjgzLCA1NDY4OCwgNTQ2OTUsIDU0NzAwLCA1NDcwNSwgNTQ3MTQsIDU0NzIxLCA1NDcyNiwgNTQ3MzEsIDU0NzM2LCAKKyAgICA1NDc0MywgNTQ3NDgsIDU0NzU1LCA1NDc2MCwgNTQ3NjUsIDU0NzcyLCA1NDc3OSwgNTQ3ODQsIDU0Nzg5LCA1NDc5NCwgCisgICAgNTQ4MDEsIDU0ODA4LCA1NDgxMywgNTQ4MTgsIDU0ODIzLCA1NDgyOCwgNTQ4MzMsIDU0ODQwLCA1NDg0NywgNTQ4NTIsIAorICAgIDU0ODU3LCA1NDg2MiwgNTQ4NjcsIDU0ODcyLCA1NDg3NywgNTQ4ODIsIDU0ODg3LCA1NDg5MiwgNTQ4OTcsIDU0OTAyLCAKKyAgICA1NDkwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ5MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU0OTIxLCA1NDkyNSwgNTQ5MjksIDU0OTMzLCA1NDkzNywgNTQ5NDEsIDU0OTQ1LCA1NDk0OSwgCisgICAgNTQ5NTMsIDU0OTU3LCA1NDk2MSwgNTQ5NjcsIDU0OTcxLCA1NDk3NSwgNTQ5NzksIDU0OTgzLCA1NDk4NywgNTQ5OTEsIAorICAgIDU0OTk1LCA1NDk5OSwgNTUwMDMsIDU1MDA3LCA1NTAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUwMTUsIAorICAgIDU1MDE5LCA1NTAyMywgNTUwMjcsIDU1MDMxLCA1NTAzNSwgNTUwMzksIDAsIDU1MDQzLCA1NTA0NywgNTUwNTEsIDU1MDU1LCAKKyAgICA1NTA1OSwgNTUwNjMsIDU1MDY3LCAwLCA1NTA3MSwgNTUwNzUsIDU1MDc5LCA1NTA4MywgNTUwODcsIDU1MDkxLCA1NTA5NSwgCisgICAgMCwgNTUwOTksIDU1MTAzLCA1NTEwNywgNTUxMTEsIDU1MTE1LCA1NTExOSwgNTUxMjMsIDAsIDU1MTI3LCA1NTEzMSwgCisgICAgNTUxMzUsIDU1MTM5LCA1NTE0MywgNTUxNDcsIDU1MTUxLCAwLCA1NTE1NSwgNTUxNTksIDU1MTYzLCA1NTE2NywgNTUxNzEsIAorICAgIDU1MTc1LCA1NTE3OSwgMCwgNTUxODMsIDU1MTg3LCA1NTE5MSwgNTUxOTUsIDU1MTk5LCA1NTIwMywgNTUyMDcsIDAsIAorICAgIDU1MjExLCA1NTIxNSwgNTUyMTksIDU1MjIzLCA1NTIyNywgNTUyMzEsIDU1MjM1LCAwLCA1NTIzOSwgNTUyNDQsIDU1MjQ5LCAKKyAgICA1NTI1NCwgNTUyNTksIDU1MjY0LCA1NTI2OSwgNTUyNzMsIDU1Mjc4LCA1NTI4MywgNTUyODgsIDU1MjkyLCA1NTI5NywgCisgICAgNTUzMDIsIDU1MzA3LCA1NTMxMiwgNTUzMTYsIDU1MzIxLCA1NTMyNiwgNTUzMzEsIDU1MzM2LCA1NTM0MSwgNTUzNDYsIAorICAgIDU1MzUwLCA1NTM1NSwgNTUzNjAsIDU1MzY3LCA1NTM3MiwgNTUzNzcsIDU1MzgzLCA1NTM5MCwgNTUzOTcsIDU1NDA2LCAKKyAgICA1NTQxMywgNTU0MjIsIDU1NDI2LCA1NTQzMCwgNTU0MzYsIDU1NDQyLCA1NTQ0OCwgNTU0NTYsIDU1NDYyLCA1NTQ2NiwgCisgICAgNTU0NzAsIDU1NDc0LCA1NTQ4MCwgNTU0ODYsIDU1NDkwLCA1NTQ5MiwgNTU0OTYsIDU1NTAxLCA1NTUwMywgNTU1MDcsIAorICAgIDU1NTExLCA1NTUxNSwgNTU1MjEsIDU1NTI2LCA1NTUzMCwgNTU1MzQsIDU1NTM5LCA1NTU0NSwgNTU1NTAsIDU1NTU1LCAKKyAgICA1NTU2MCwgNTU1NjUsIDU1NTcyLCA1NTU3OSwgNTU1ODQsIDU1NTg5LCA1NTU5NCwgNTU1OTksIDU1NjA0LCA1NTYwOSwgCisgICAgNTU2MTMsIDU1NjE3LCA1NTYyNCwgNTU2MzEsIDU1NjM3LCA1NTY0MSwgNTU2NDUsIDU1NjQ4LCA1NTY1MiwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc3OTksIDI3ODA1LCAKLSAgICAyNzgxMSwgMjc4MTUsIDI3ODE5LCAyNzgyMywgMjc4MjcsIDI3ODMzLCAyNzgzNywgMjc4NDMsIDI3ODQ3LCAyNzg1MywgCi0gICAgMjc4NTksIDI3ODY3LCAyNzg3MywgMjc4ODEsIDI3ODg1LCAyNzg4OSwgMjc4OTMsIDI3ODk5LCAyNzkwMiwgMjc5MDcsIAotICAgIDI3OTExLCAyNzkxNywgMjc5MjEsIDI3OTI1LCAyNzkzMSwgMjc5MzUsIDI3OTQxLCAyNzk0NSwgMjc5NTEsIDI3OTU5LCAKLSAgICAyNzk2NywgMjc5NzUsIDI3OTgxLCAyNzk4NSwgMjc5OTEsIDI3OTk1LCAyODAwMSwgMjgwMDUsIDI4MDA4LCAyODAxNCwgCi0gICAgMjgwMTgsIDI4MDI0LCAyODAyNywgMjgwMzAsIDI4MDMzLCAyODAzNywgMjgwNDEsIDI4MDQ3LCAyODA1MywgMjgwNTcsIAotICAgIDI4MDYwLCAyODA2NCwgMjgwNjksIDI4MDc0LCAyODA4MSwgMjgwODYsIDI4MDkzLCAyODEwMCwgMjgxMDksIDI4MTE2LCAKLSAgICAyODEyNSwgMjgxMzAsIDI4MTM3LCAyODE0NCwgMjgxNTMsIDI4MTU4LCAyODE2NSwgMjgxNzAsIDI4MTc2LCAyODE4MiwgCi0gICAgMjgxODgsIDI4MTk0LCAyODIwMCwgMjgyMDYsIDAsIDAsIDAsIDAsIDI4MjEyLCAyODIxNiwgMjgyMTksIDI4MjIyLCAKLSAgICAyODIyNSwgMjgyMjgsIDI4MjMxLCAyODIzNCwgMjgyMzcsIDI4MjQwLCAyODI0MywgMjgyNDYsIDI4MjQ5LCAyODI1MiwgCi0gICAgMjgyNTcsIDI4MjYyLCAyODI2NywgMjgyNzAsIDI4Mjc1LCAyODI4MCwgMjgyODUsIDI4MjkwLCAyODI5NywgMjgzMDIsIAotICAgIDI4MzA3LCAyODMxMiwgMjgzMTcsIDI4MzI0LCAyODMzMCwgMjgzMzYsIDI4MzQyLCAyODM0OCwgMjgzNTQsIDI4MzYzLCAKLSAgICAyODM3MiwgMjgzNzgsIDI4Mzg0LCAyODM5MywgMjg0MDIsIDI4NDExLCAyODQyMCwgMjg0MjksIDI4NDM4LCAyODQ0NywgCi0gICAgMjg0NTYsIDAsIDAsIDAsIDI4NDY1LCAyODQ2OSwgMjg0NzMsIDI4NDc3LCAyODQ4MCwgMjg0ODMsIDI4NDg2LCAyODQ5MCwgCi0gICAgMjg0OTMsIDI4NDk2LCAyODUwMCwgMjg1MDMsIDI4NTA3LCAyODUxMSwgMjg1MTUsIDI4NTE5LCAyODUyMywgMjg1MjcsIAotICAgIDI4NTMxLCAyODUzNSwgMjg1MzksIDI4NTQzLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjEsIDI4NTY0LCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU3OSwgMjg1ODMsIDI4NTg2LCAyODU5MiwgMjg1OTgsIDI4NjA0LCAyODYwOSwgCi0gICAgMjg2MTQsIDI4NjE5LCAyODYyNCwgMjg2MjksIDI4NjM0LCAwLCAwLCAwLCAyODYzOCwgMjg2NDIsIDI4NjQ2LCAyODY1MCwgCi0gICAgMjg2NTMsIDI4NjU2LCAyODY1OSwgMjg2NjIsIDI4NjY1LCAyODY2OCwgMjg2NzEsIDI4Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NTY2MCwgNTU2NjQsIDU1NjY4LCA1NTY3MywgNTU2NzgsIDU1NjgzLCA1NTY4NywgNTU2OTEsIDU1Njk1LCAKKyAgICA1NTcwMCwgNTU3MDUsIDU1NzA5LCA1NTcxMywgNTU3MTcsIDU1NzIxLCA1NTcyNiwgNTU3MzEsIDU1NzM2LCA1NTc0MSwgCisgICAgNTU3NDUsIDU1NzQ5LCA1NTc1NCwgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzMsIDAsIDU1Nzc3LCA1NTc4MSwgNTU3ODUsIAorICAgIDU1Nzg5LCA1NTc5MywgNTU3OTcsIDU1ODAxLCA1NTgwNiwgNTU4MTEsIDU1ODE1LCA1NTgyMCwgNTU4MjUsIDU1ODM0LCAKKyAgICA1NTgzOCwgNTU4NDIsIDU1ODQ2LCA1NTg1MywgNTU4NTcsIDU1ODYyLCA1NTg2NywgNTU4NzEsIDU1ODc1LCA1NTg4MSwgCisgICAgNTU4ODYsIDU1ODkxLCA1NTg5NiwgNTU5MDEsIDU1OTA1LCA1NTkwOSwgNTU5MTMsIDU1OTE3LCA1NTkyMSwgNTU5MjYsIAorICAgIDU1OTMxLCA1NTkzNSwgNTU5MzksIDU1OTQ0LCA1NTk0OSwgNTU5NTQsIDU1OTU4LCA1NTk2MiwgNTU5NjcsIDU1OTcyLCAKKyAgICA1NTk3OCwgNTU5ODQsIDU1OTg4LCA1NTk5NCwgNTYwMDAsIDU2MDA0LCA1NjAxMCwgNTYwMTYsIDU2MDIxLCA1NjAyNiwgCisgICAgNTYwMzAsIDU2MDM2LCA1NjA0MCwgNTYwNDQsIDU2MDUwLCA1NjA1NiwgNTYwNjEsIDU2MDY2LCA1NjA3MCwgNTYwNzQsIAorICAgIDU2MDgyLCA1NjA4OCwgNTYwOTQsIDU2MTAwLCA1NjEwNSwgNTYxMTAsIDU2MTE1LCA1NjEyMSwgNTYxMjUsIDU2MTMxLCAKKyAgICA1NjEzNSwgNTYxMzksIDU2MTQ1LCA1NjE1MSwgNTYxNTcsIDU2MTYzLCA1NjE2OSwgNTYxNzUsIDU2MTgxLCA1NjE4NywgCisgICAgNTYxOTMsIDU2MTk5LCA1NjIwNSwgNTYyMTEsIDU2MjE1LCA1NjIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTYyMjcsIDU2MjMwLCA1NjIzNCwgNTYyMzgsIDU2MjQyLCA1NjI0NiwgNTYyNDksIDU2MjUyLCA1NjI1NiwgCisgICAgNTYyNjAsIDU2MjY0LCA1NjI2OCwgNTYyNzEsIDU2Mjc2LCA1NjI4MCwgNTYyODQsIDU2Mjg4LCA1NjI5NCwgNTYyOTgsIAorICAgIDU2MzAyLCA1NjMwNiwgNTYzMTAsIDU2MzE3LCA1NjMyMywgNTYzMjcsIDU2MzMxLCA1NjMzNSwgNTYzMzksIDU2MzQzLCAKKyAgICA1NjM0NywgNTYzNTEsIDU2MzU1LCA1NjM1OSwgNTYzNjMsIDU2MzY3LCA1NjM3MywgNTYzNzcsIDU2MzgxLCA1NjM4NSwgCisgICAgNTYzODksIDU2MzkzLCA1NjM5NywgNTY0MDEsIDU2NDA1LCA1NjQwOSwgNTY0MTMsIDU2NDE3LCA1NjQyMSwgNTY0MjUsIAorICAgIDU2NDI5LCA1NjQzMywgNTY0MzcsIDU2NDQzLCA1NjQ0OSwgNTY0NTQsIDU2NDU5LCA1NjQ2MywgNTY0NjcsIDU2NDcxLCAKKyAgICA1NjQ3NSwgNTY0NzksIDU2NDgzLCA1NjQ4NywgNTY0OTEsIDU2NDk1LCA1NjQ5OSwgNTY1MDMsIDU2NTA3LCA1NjUxMSwgCisgICAgNTY1MTUsIDU2NTE5LCA1NjUyMywgNTY1MjcsIDU2NTMxLCA1NjUzNSwgNTY1MzksIDU2NTQzLCA1NjU0NywgNTY1NTEsIAorICAgIDU2NTU1LCA1NjU2MSwgNTY1NjUsIDU2NTY5LCA1NjU3MywgNTY1NzcsIDU2NTgxLCA1NjU4NSwgNTY1ODksIDU2NTkzLCAKKyAgICA1NjU5OCwgNTY2MDUsIDU2NjA5LCA1NjYxMywgNTY2MTcsIDU2NjIxLCA1NjYyNSwgNTY2MjksIDU2NjMzLCA1NjYzNywgCisgICAgNTY2NDEsIDU2NjQ1LCA1NjY0OSwgNTY2NTMsIDU2NjYwLCA1NjY2NCwgNTY2NzAsIDU2Njc0LCA1NjY3OCwgNTY2ODIsIAorICAgIDU2Njg2LCA1NjY5MCwgNTY2OTMsIDU2Njk3LCA1NjcwMSwgNTY3MDUsIDU2NzA5LCA1NjcxMywgNTY3MTcsIDU2NzIxLCAKKyAgICA1NjcyNSwgNTY3MjksIDU2NzMzLCA1NjczNywgNTY3NDEsIDU2NzQ1LCA1Njc0OSwgNTY3NTMsIDU2NzU3LCA1Njc2MSwgCisgICAgNTY3NjUsIDU2NzY5LCA1Njc3MywgNTY3NzcsIDU2NzgxLCA1Njc4NSwgNTY3ODksIDU2NzkzLCA1Njc5NywgNTY4MDEsIAorICAgIDU2ODA1LCA1NjgwOSwgNTY4MTMsIDU2ODE3LCA1NjgyMSwgNTY4MjcsIDU2ODMxLCA1NjgzNSwgNTY4MzksIDU2ODQzLCAKKyAgICA1Njg0NywgNTY4NTEsIDU2ODU1LCA1Njg1OSwgNTY4NjMsIDU2ODY3LCA1Njg3MSwgNTY4NzUsIDU2ODc5LCA1Njg4MywgCisgICAgNTY4ODcsIDU2ODkxLCA1Njg5NSwgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTEsIDU2OTE1LCA1NjkxOSwgNTY5MjMsIAorICAgIDU2OTI3LCA1NjkzMSwgNTY5MzUsIDU2OTQzLCA1Njk0NywgNTY5NTEsIDU2OTU1LCA1Njk1OSwgNTY5NjMsIDU2OTY5LCAKKyAgICA1Njk3MywgNTY5NzcsIDU2OTgxLCA1Njk4NSwgNTY5ODksIDU2OTkzLCA1Njk5NywgNTcwMDEsIDU3MDA1LCA1NzAwOSwgCisgICAgNTcwMTMsIDU3MDE3LCA1NzAyMSwgNTcwMjcsIDU3MDMxLCA1NzAzNSwgNTcwMzksIDU3MDQzLCA1NzA0NywgNTcwNTEsIAorICAgIDU3MDU1LCA1NzA1OSwgNTcwNjMsIDU3MDY3LCA1NzA3MSwgNTcwNzUsIDU3MDc5LCA1NzA4MywgNTcwODcsIDU3MDkxLCAKKyAgICA1NzA5NSwgNTcwOTksIDU3MTAzLCA1NzEwNywgNTcxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3MTE1LCA1NzEyMywgNTcxMzAsIDU3MTQxLCA1NzE1MSwgCisgICAgNTcxNTksIDU3MTY4LCA1NzE3NywgNTcxODcsIDU3MTk5LCA1NzIxMSwgNTcyMjMsIDAsIDAsIDAsIDAsIDU3MjI5LCAKKyAgICA1NzIzMiwgNTcyMzUsIDU3MjQwLCA1NzI0MywgNTcyNTAsIDU3MjU0LCA1NzI1OCwgNTcyNjIsIDU3MjY2LCA1NzI3MCwgCisgICAgNTcyNzUsIDU3MjgwLCA1NzI4NCwgNTcyODgsIDU3MjkzLCA1NzI5OCwgNTczMDMsIDU3MzA4LCA1NzMxMSwgNTczMTQsIAorICAgIDU3MzIwLCA1NzMyNiwgNTczMzEsIDU3MzM2LCA1NzM0MywgNTczNTAsIDU3MzU0LCA1NzM1OCwgNTczNjIsIDU3MzY5LCAKKyAgICA1NzM3NSwgNTczODIsIDU3Mzg3LCA1NzM5MiwgNTczOTcsIDU3NDAyLCA1NzQwNywgNTc0MTIsIDU3NDE3LCA1NzQyMiwgCisgICAgNTc0MjcsIDU3NDMyLCA1NzQzNywgNTc0NDIsIDU3NDQ3LCA1NzQ1MiwgNTc0NTgsIDU3NDYzLCA1NzQ2NywgNTc0NzMsIAorICAgIDU3NDg0LCA1NzQ5NCwgNTc1MDksIDU3NTE5LCA1NzUyMywgNTc1MzIsIDU3NTM4LCA1NzU0NCwgNTc1NTAsIDU3NTU1LCAKKyAgICA1NzU1OCwgNTc1NjMsIDU3NTY3LCAwLCA1NzU3MywgNTc1NzcsIDU3NTgwLCA1NzU4NCwgNTc1ODcsIDU3NTkxLCA1NzU5NCwgCisgICAgNTc1OTgsIDU3NjAxLCA1NzYwNSwgNTc2MDgsIDU3NjExLCA1NzYxNSwgNTc2MTksIDU3NjIzLCA1NzYyNywgNTc2MzEsIAorICAgIDU3NjM1LCA1NzYzOSwgNTc2NDMsIDU3NjQ3LCA1NzY1MSwgNTc2NTUsIDU3NjU5LCA1NzY2MywgNTc2NjcsIDU3NjcxLCAKKyAgICA1NzY3NSwgNTc2NzksIDU3NjgzLCA1NzY4NywgNTc2OTEsIDU3Njk1LCA1NzY5OSwgNTc3MDMsIDU3NzA4LCA1NzcxMiwgCisgICAgNTc3MTYsIDU3NzIwLCA1NzcyNCwgNTc3MjcsIDU3NzMxLCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NiwgNTc3NTAsIAorICAgIDU3NzUzLCA1Nzc1NywgNTc3NjAsIDU3NzY0LCA1Nzc2OCwgNTc3NzIsIDU3Nzc2LCA1Nzc4MCwgNTc3ODQsIDU3Nzg4LCAKKyAgICA1Nzc5MiwgNTc3OTYsIDU3ODAwLCA1NzgwNCwgNTc4MDgsIDU3ODExLCA1NzgxNSwgNTc4MTksIDU3ODIzLCA1NzgyNywgCisgICAgNTc4MzEsIDU3ODM0LCA1NzgzOSwgNTc4NDMsIDU3ODQ4LCA1Nzg1MiwgNTc4NTUsIDU3ODU5LCA1Nzg2MywgNTc4NjcsIAorICAgIDU3ODcxLCA1Nzg3NiwgNTc4ODAsIDU3ODg0LCA1Nzg4OCwgNTc4OTIsIDU3ODk1LCA1Nzg5OSwgNTc5MDMsIDAsIDAsIAorICAgIDU3OTA4LCA1NzkxNiwgNTc5MjQsIDU3OTMxLCA1NzkzOCwgNTc5NDIsIDU3OTQ4LCA1Nzk1MywgNTc5NTgsIDU3OTYyLCAKKyAgICA1Nzk2NSwgNTc5NjksIDU3OTcyLCA1Nzk3NiwgNTc5NzksIDU3OTgzLCA1Nzk4NiwgNTc5OTAsIDU3OTkzLCA1Nzk5NiwgCisgICAgNTgwMDAsIDU4MDA0LCA1ODAwOCwgNTgwMTIsIDU4MDE2LCA1ODAyMCwgNTgwMjQsIDU4MDI4LCA1ODAzMiwgNTgwMzYsIAorICAgIDU4MDQwLCA1ODA0NCwgNTgwNDgsIDU4MDUyLCA1ODA1NiwgNTgwNjAsIDU4MDY0LCA1ODA2OCwgNTgwNzIsIDU4MDc2LCAKKyAgICA1ODA4MCwgNTgwODQsIDU4MDg4LCA1ODA5MywgNTgwOTcsIDU4MTAxLCA1ODEwNSwgNTgxMDksIDU4MTEyLCA1ODExNiwgCisgICAgNTgxMTksIDU4MTIzLCA1ODEyNywgNTgxMzEsIDU4MTM1LCA1ODEzOCwgNTgxNDIsIDU4MTQ1LCA1ODE0OSwgNTgxNTMsIAorICAgIDU4MTU3LCA1ODE2MSwgNTgxNjUsIDU4MTY5LCA1ODE3MywgNTgxNzcsIDU4MTgxLCA1ODE4NSwgNTgxODksIDU4MTkzLCAKKyAgICA1ODE5NiwgNTgyMDAsIDU4MjA0LCA1ODIwOCwgNTgyMTIsIDU4MjE2LCA1ODIxOSwgNTgyMjQsIDU4MjI4LCA1ODIzMywgCisgICAgNTgyMzcsIDU4MjQwLCA1ODI0NCwgNTgyNDgsIDU4MjUyLCA1ODI1NiwgNTgyNjEsIDU4MjY1LCA1ODI2OSwgNTgyNzMsIAorICAgIDU4Mjc3LCA1ODI4MCwgNTgyODQsIDU4Mjg4LCA1ODI5MywgNTgyOTcsIDU4MzAxLCA1ODMwNSwgNTgzMDksIDU4MzE0LCAKKyAgICA1ODMyMSwgNTgzMjUsIDU4MzMxLCAwLCAwLCAwLCAwLCAwLCA1ODMzNiwgNTgzNDAsIDU4MzQ0LCA1ODM0NywgNTgzNTEsIAorICAgIDU4MzU1LCA1ODM1OSwgNTgzNjIsIDU4MzY1LCA1ODM2OSwgNTgzNzMsIDU4Mzc3LCA1ODM4MSwgNTgzODUsIDU4Mzg5LCAKKyAgICA1ODM5MywgNTgzOTcsIDU4NDAxLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNSwgNTg0MTgsIDU4NDIxLCA1ODQyNCwgCisgICAgNTg0MjgsIDU4NDMyLCA1ODQzNiwgNTg0NDAsIDU4NDQ0LCA1ODQ0OCwgNTg0NTIsIDU4NDU2LCA1ODQ2MCwgNTg0NjQsIAorICAgIDU4NDY3LCA1ODQ3MCwgNTg0NzQsIDU4NDc4LCA1ODQ4MiwgNTg0ODYsIDAsIDAsIDAsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIAorICAgIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCA1ODUxOCwgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCAKKyAgICA1ODU0MiwgNTg1NDYsIDU4NTUwLCA1ODU1NCwgNTg1NTgsIDU4NTYyLCA1ODU2NiwgNTg1NzAsIDU4NTc0LCA1ODU3OCwgCisgICAgNTg1ODIsIDU4NTg2LCA1ODU5MCwgNTg1OTQsIDU4NTk4LCA1ODYwMiwgNTg2MDYsIDU4NjEwLCA1ODYxMywgNTg2MTcsIAorICAgIDU4NjIwLCA1ODYyNCwgNTg2MjgsIDU4NjMxLCA1ODYzNSwgNTg2MzksIDU4NjQyLCA1ODY0NiwgNTg2NTAsIDU4NjU0LCAKKyAgICA1ODY1OCwgNTg2NjEsIDU4NjY1LCA1ODY2OSwgNTg2NzMsIDU4Njc3LCA1ODY4MSwgNTg2ODUsIDU4Njg4LCA1ODY5MSwgCisgICAgNTg2OTUsIDU4Njk5LCA1ODcwMywgNTg3MDcsIDU4NzExLCA1ODcxNSwgNTg3MTksIDU4NzIzLCA1ODcyNywgNTg3MzEsIAorICAgIDU4NzM1LCA1ODczOSwgNTg3NDMsIDU4NzQ3LCA1ODc1MSwgNTg3NTUsIDU4NzU5LCA1ODc2MywgNTg3NjcsIDU4NzcxLCAKKyAgICA1ODc3NSwgNTg3NzksIDU4NzgzLCA1ODc4NywgNTg3OTEsIDU4Nzk1LCA1ODc5OSwgNTg4MDMsIDU4ODA3LCA1ODgxMSwgCisgICAgNTg4MTUsIDU4ODE5LCA1ODgyMywgNTg4MjcsIDU4ODMxLCA1ODgzNSwgNTg4MzksIDU4ODQzLCA1ODg0NywgNTg4NTEsIAorICAgIDU4ODU1LCAwLCA1ODg1OSwgNTg4NjUsIDU4ODcxLCA1ODg3NiwgNTg4ODEsIDU4ODg2LCA1ODg5MiwgNTg4OTgsIDU4OTA0LCAKKyAgICA1ODkxMCwgNTg5MTYsIDU4OTIyLCA1ODkyOCwgNTg5MzQsIDU4OTQwLCA1ODk0NiwgNTg5NTIsIDU4OTU2LCA1ODk2MCwgCisgICAgNTg5NjQsIDU4OTY4LCA1ODk3MiwgNTg5NzYsIDU4OTgwLCA1ODk4NCwgNTg5ODgsIDU4OTkyLCA1ODk5NiwgNTkwMDAsIAorICAgIDU5MDA0LCA1OTAwOCwgNTkwMTIsIDU5MDE2LCA1OTAyMCwgNTkwMjQsIDU5MDI4LCA1OTAzMiwgNTkwMzcsIDU5MDQyLCAKKyAgICA1OTA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkwNTIsIDU5MDU2LCA1OTA2MCwgNTkwNjQsIDU5MDY4LCA1OTA3MiwgCisgICAgNTkwNzYsIDU5MDgwLCA1OTA4NCwgNTkwODgsIDU5MDkyLCA1OTA5NiwgNTkxMDAsIDU5MTA0LCA1OTEwOCwgNTkxMTIsIAorICAgIDU5MTE1LCA1OTExOSwgNTkxMjIsIDU5MTI2LCA1OTEzMCwgNTkxMzQsIDU5MTM4LCA1OTE0MiwgNTkxNDYsIDU5MTUwLCAKKyAgICA1OTE1NCwgNTkxNTgsIDU5MTYyLCA1OTE2NiwgNTkxNzAsIDU5MTc0LCA1OTE3OCwgNTkxODIsIDU5MTg2LCA1OTE5MCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkxOTQsIDU5MTk5LCA1OTIwNCwgNTkyMDksIDU5MjEzLCAKKyAgICA1OTIxOCwgNTkyMjIsIDU5MjI3LCA1OTIzMiwgNTkyMzcsIDU5MjQyLCA1OTI0NywgNTkyNTEsIDU5MjU2LCA1OTI2MSwgCisgICAgNTkyNjYsIDU5MjcxLCA1OTI3NSwgNTkyNzksIDU5MjgzLCA1OTI4NywgNTkyOTEsIDU5Mjk1LCA1OTI5OSwgNTkzMDMsIAorICAgIDU5MzA3LCA1OTMxMSwgNTkzMTUsIDU5MzE5LCA1OTMyMywgNTkzMjcsIDU5MzMyLCA1OTMzNywgNTkzNDIsIDU5MzQ3LCAKKyAgICA1OTM1MiwgNTkzNTcsIDU5MzYyLCA1OTM2NywgNTkzNzIsIDU5Mzc3LCA1OTM4MiwgNTkzODcsIDU5MzkyLCA1OTM5NywgCisgICAgNTk0MDIsIDU5NDA4LCAwLCA1OTQxNSwgNTk0MTgsIDU5NDIxLCA1OTQyNCwgNTk0MjcsIDU5NDMwLCA1OTQzMywgNTk0MzYsIAorICAgIDU5NDM5LCA1OTQ0MiwgNTk0NDYsIDU5NDUwLCA1OTQ1NCwgNTk0NTgsIDU5NDYyLCA1OTQ2NiwgNTk0NzAsIDU5NDc0LCAKKyAgICA1OTQ3OCwgNTk0ODIsIDU5NDg2LCA1OTQ5MCwgNTk0OTQsIDU5NDk4LCA1OTUwMiwgNTk1MDYsIDU5NTEwLCA1OTUxNCwgCisgICAgNTk1MTgsIDU5NTIyLCA1OTUyNiwgNTk1MzAsIDU5NTM0LCA1OTUzOCwgNTk1NDIsIDU5NTQ2LCA1OTU1MCwgNTk1NTQsIAorICAgIDU5NTU4LCA1OTU2MiwgNTk1NjYsIDU5NTc1LCA1OTU4NCwgNTk1OTMsIDU5NjAyLCA1OTYxMSwgNTk2MjAsIDU5NjI5LCAKKyAgICA1OTYzOCwgNTk2NDEsIDU5NjQ2LCA1OTY1MSwgNTk2NTYsIDU5NjYxLCA1OTY2NiwgNTk2NzEsIDU5Njc2LCA1OTY4MSwgCisgICAgNTk2ODYsIDU5NjkwLCA1OTY5NSwgNTk3MDAsIDU5NzA1LCA1OTcxMCwgNTk3MTUsIDU5NzE5LCA1OTcyMywgNTk3MjcsIAorICAgIDU5NzMxLCA1OTczNSwgNTk3MzksIDU5NzQzLCA1OTc0NywgNTk3NTEsIDU5NzU1LCA1OTc1OSwgNTk3NjMsIDU5NzY3LCAKKyAgICA1OTc3MSwgNTk3NzYsIDU5NzgxLCA1OTc4NiwgNTk3OTEsIDU5Nzk2LCA1OTgwMSwgNTk4MDYsIDU5ODExLCA1OTgxNiwgCisgICAgNTk4MjEsIDU5ODI2LCA1OTgzMSwgNTk4MzYsIDU5ODQxLCA1OTg0NywgNTk4NTMsIDU5ODU4LCA1OTg2MywgNTk4NjYsIAorICAgIDU5ODY5LCA1OTg3MiwgNTk4NzUsIDU5ODc4LCA1OTg4MSwgNTk4ODQsIDU5ODg3LCA1OTg5MCwgNTk4OTQsIDU5ODk4LCAKKyAgICA1OTkwMiwgNTk5MDYsIDU5OTEwLCA1OTkxNCwgNTk5MTgsIDU5OTIyLCA1OTkyNiwgNTk5MzAsIDU5OTM0LCA1OTkzOCwgCisgICAgNTk5NDIsIDU5OTQ2LCA1OTk1MCwgNTk5NTQsIDU5OTU4LCA1OTk2MiwgNTk5NjYsIDU5OTcwLCA1OTk3NCwgNTk5NzgsIAorICAgIDU5OTgyLCA1OTk4NiwgNTk5OTAsIDU5OTk0LCA1OTk5OCwgNjAwMDIsIDYwMDA2LCA2MDAxMCwgNjAwMTQsIDYwMDE4LCAKKyAgICA2MDAyMiwgNjAwMjYsIDYwMDMwLCA2MDAzNCwgNjAwMzgsIDYwMDQyLCA2MDA0NiwgNjAwNTAsIDYwMDU1LCA2MDA2MCwgCisgICAgNjAwNjUsIDYwMDcwLCA2MDA3NCwgNjAwNzksIDYwMDg0LCA2MDA4OSwgNjAwOTQsIDYwMDk5LCA2MDEwNCwgNjAxMDksIAorICAgIDYwMTE0LCA2MDExOSwgNjAxMjMsIDYwMTI5LCA2MDEzNSwgNjAxNDEsIDYwMTQ3LCA2MDE1MywgNjAxNTksIDYwMTY1LCAKKyAgICA2MDE3MSwgNjAxNzcsIDYwMTgzLCA2MDE4OSwgNjAxOTUsIDYwMTk4LCA2MDIwMSwgNjAyMDQsIDYwMjA5LCA2MDIxMiwgCisgICAgNjAyMTUsIDYwMjE4LCA2MDIyMSwgNjAyMjQsIDYwMjI3LCA2MDIzMSwgNjAyMzUsIDYwMjM5LCA2MDI0MywgNjAyNDcsIAorICAgIDYwMjUxLCA2MDI1NSwgNjAyNTksIDYwMjYzLCA2MDI2NywgNjAyNzEsIDYwMjc1LCA2MDI3OSwgNjAyODIsIDYwMjg1LCAKKyAgICA2MDI4OSwgNjAyOTMsIDYwMjk3LCA2MDMwMSwgNjAzMDQsIDYwMzA4LCA2MDMxMiwgNjAzMTYsIDYwMzIwLCA2MDMyMywgCisgICAgNjAzMjcsIDYwMzMxLCA2MDMzNSwgNjAzMzksIDYwMzQyLCA2MDM0NiwgNjAzNTAsIDYwMzUzLCA2MDM1NywgNjAzNjEsIAorICAgIDYwMzY1LCA2MDM2OSwgNjAzNzMsIDYwMzc3LCA2MDM4MSwgMCwgNjAzODUsIDYwMzg4LCA2MDM5MSwgNjAzOTQsIDYwMzk3LCAKKyAgICA2MDQwMCwgNjA0MDMsIDYwNDA2LCA2MDQwOSwgNjA0MTIsIDYwNDE1LCA2MDQxOCwgNjA0MjEsIDYwNDI0LCA2MDQyNywgCisgICAgNjA0MzAsIDYwNDMzLCA2MDQzNiwgNjA0MzksIDYwNDQyLCA2MDQ0NSwgNjA0NDgsIDYwNDUxLCA2MDQ1NCwgNjA0NTcsIAorICAgIDYwNDYwLCA2MDQ2MywgNjA0NjYsIDYwNDY5LCA2MDQ3MiwgNjA0NzUsIDYwNDc4LCA2MDQ4MSwgNjA0ODQsIDYwNDg3LCAKKyAgICA2MDQ5MCwgNjA0OTMsIDYwNDk2LCA2MDQ5OSwgNjA1MDIsIDYwNTA1LCA2MDUwOCwgNjA1MTEsIDYwNTE0LCA2MDUxNywgCisgICAgNjA1MjAsIDYwNTIzLCA2MDUyNiwgNjA1MjksIDYwNTMyLCA2MDUzNSwgNjA1MzgsIDYwNTQxLCA2MDU0NCwgNjA1NDcsIAorICAgIDYwNTUwLCA2MDU1MywgNjA1NTYsIDYwNTU5LCA2MDU2MiwgNjA1NjUsIDYwNTY4LCA2MDU3MSwgNjA1NzQsIDYwNTc3LCAKKyAgICA2MDU4MCwgNjA1ODMsIDYwNTg2LCA2MDU4OSwgNjA1OTIsIDYwNTk1LCA2MDU5OCwgNjA2MDEsIDYwNjA0LCA2MDYwNywgCisgICAgNjA2MTAsIDYwNjEzLCA2MDYxNiwgNjA2MTksIDYwNjIyLCA2MDYyNSwgNjA2MjgsIDYwNjMxLCA2MDYzNCwgNjA2MzcsIAorICAgIDYwNjQwLCA2MDY0MywgNjA2NDYsIDYwNjQ5LCA2MDY1NywgNjA2NjQsIDYwNjcxLCA2MDY3OCwgNjA2ODUsIDYwNjkyLCAKKyAgICA2MDY5OSwgNjA3MDYsIDYwNzEzLCA2MDcyMCwgNjA3MjgsIDYwNzM2LCA2MDc0NCwgNjA3NTIsIDYwNzYwLCA2MDc2OCwgCisgICAgNjA3NzYsIDYwNzg0LCA2MDc5MiwgNjA4MDAsIDYwODA4LCA2MDgxNiwgNjA4MjQsIDYwODMyLCA2MDg0MCwgNjA4NDMsIAorICAgIDYwODQ2LCA2MDg0OSwgNjA4NTEsIDYwODU0LCA2MDg1NywgNjA4NjAsIDYwODY1LCA2MDg3MCwgNjA4NzMsIDYwODgwLCAKKyAgICA2MDg4NywgNjA4OTQsIDYwOTAxLCA2MDkwNCwgNjA5MDksIDYwOTExLCA2MDkxNSwgNjA5MTcsIDYwOTE5LCA2MDkyMiwgCisgICAgNjA5MjUsIDYwOTI4LCA2MDkzMSwgNjA5MzQsIDYwOTM3LCA2MDk0MCwgNjA5NDUsIDYwOTUwLCA2MDk1MywgNjA5NTYsIAorICAgIDYwOTU5LCA2MDk2MiwgNjA5NjUsIDYwOTY4LCA2MDk3MSwgNjA5NzUsIDYwOTc4LCA2MDk4MSwgNjA5ODQsIDYwOTg3LCAKKyAgICA2MDk5MCwgNjA5OTQsIDYwOTk3LCA2MTAwMCwgNjEwMDMsIDYxMDA4LCA2MTAxMywgNjEwMTgsIDYxMDIzLCA2MTAyOCwgCisgICAgNjEwMzMsIDYxMDM4LCA2MTA0MywgNjEwNDgsIDYxMDU2LCA2MTA1OCwgNjEwNjEsIDYxMDY0LCA2MTA2NywgNjEwNzAsIAorICAgIDYxMDc1LCA2MTA4MywgNjEwODYsIDYxMDg5LCA2MTA5MywgNjEwOTYsIDYxMDk5LCA2MTEwMiwgNjExMDcsIDYxMTEwLCAKKyAgICA2MTExMywgNjExMTgsIDYxMTIxLCA2MTEyNCwgNjExMjksIDYxMTMyLCA2MTEzNSwgNjExNDAsIDYxMTQ1LCA2MTE1MCwgCisgICAgNjExNTMsIDYxMTU2LCA2MTE1OSwgNjExNjIsIDYxMTY4LCA2MTE3MSwgNjExNzQsIDYxMTc3LCA2MTE3OSwgNjExODIsIAorICAgIDYxMTg1LCA2MTE4OCwgNjExOTMsIDYxMTk2LCA2MTE5OSwgNjEyMDIsIDYxMjA1LCA2MTIwOCwgNjEyMTMsIDYxMjE2LCAKKyAgICA2MTIxOSwgNjEyMjIsIDYxMjI1LCA2MTIyOCwgNjEyMzEsIDYxMjM0LCA2MTIzNywgNjEyNDAsIDYxMjQ1LCA2MTI0OSwgCisgICAgNjEyNTYsIDYxMjYzLCA2MTI3MCwgNjEyNzcsIDYxMjg0LCA2MTI5MSwgNjEyOTgsIDYxMzA1LCA2MTMxMiwgNjEzMjAsIAorICAgIDYxMzI4LCA2MTMzNiwgNjEzNDQsIDYxMzUyLCA2MTM2MCwgNjEzNjgsIDYxMzc2LCA2MTM4NCwgNjEzOTIsIDYxNDAwLCAKKyAgICA2MTQwOCwgNjE0MTYsIDYxNDI0LCA2MTQzMiwgNjE0NDAsIDYxNDQ4LCA2MTQ1NiwgNjE0NjQsIDYxNDcyLCA2MTQ4MCwgCisgICAgNjE0ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4Njc3LCAyODY4MCwgMjg2ODQsIAotICAgIDI4Njg4LCAyODY5MiwgMjg2OTYsIDI4NzAwLCAyODcwNCwgMjg3MDgsIDI4NzEyLCAyODcxNiwgMjg3MjAsIDI4NzI0LCAKLSAgICAyODcyOCwgMjg3MzIsIDI4NzM1LCAyODczOSwgMjg3NDMsIDI4NzQ3LCAyODc1MSwgMjg3NTUsIDI4NzU5LCAyODc2MiwgCi0gICAgMjg3NjYsIDI4NzcwLCAyODc3NCwgMjg3NzgsIDI4NzgxLCAyODc4NCwgMjg3ODgsIDI4NzkxLCAyODc5NSwgMjg3OTksIAotICAgIDI4ODAzLCAyODgwNywgMjg4MTEsIDI4ODE0LCAyODgxOSwgMjg4MjQsIDI4ODI5LCAyODgzMywgMjg4MzcsIDI4ODQyLCAKLSAgICAyODg0NiwgMjg4NTEsIDI4ODU1LCAyODg2MSwgMjg4NjYsIDI4ODcxLCAyODg3NiwgMjg4ODIsIDI4ODg3LCAyODg5MywgCi0gICAgMjg4OTksIDI4OTA1LCAyODkwOSwgMCwgMCwgMCwgMjg5MTMsIDI4OTE4LCAyODkyNywgMjg5MzIsIDI4OTM5LCAyODk0NCwgCi0gICAgMjg5NDgsIDI4OTUxLCAyODk1NCwgMjg5NTcsIDI4OTYwLCAyODk2MywgMjg5NjYsIDI4OTY5LCAyODk3MiwgMCwgMCwgMCwgCi0gICAgMjg5NzUsIDI4OTc5LCAyODk4MywgMjg5ODcsIDI4OTk0LCAyOTAwMCwgMjkwMDYsIDI5MDEyLCAyOTAxOCwgMjkwMjQsIAotICAgIDI5MDMwLCAyOTAzNiwgMjkwNDIsIDI5MDQ4LCAyOTA1NSwgMjkwNjIsIDI5MDY5LCAyOTA3NiwgMjkwODMsIDI5MDkwLCAKLSAgICAyOTA5NywgMjkxMDQsIDI5MTExLCAyOTExOCwgMjkxMjUsIDI5MTMyLCAyOTEzOSwgMjkxNDYsIDI5MTUzLCAyOTE2MCwgCi0gICAgMjkxNjcsIDI5MTc0LCAyOTE4MSwgMjkxODgsIDI5MTk1LCAyOTIwMiwgMjkyMDksIDI5MjE2LCAyOTIyMywgMjkyMzAsIAotICAgIDI5MjM3LCAyOTI0NCwgMjkyNTEsIDI5MjU4LCAyOTI2NiwgMjkyNzQsIDI5MjgyLCAyOTI4OCwgMjkyOTQsIDI5MzAwLCAKLSAgICAyOTMwOCwgMjkzMTcsIDI5MzIyLCAyOTMyOCwgMjkzMzQsIDI5MzQyLCAyOTM0OCwgMjkzNTQsIDI5MzYwLCAyOTM2NSwgCi0gICAgMjkzNzIsIDI5Mzc3LCAyOTM4MywgMjkzODksIDI5Mzk3LCAyOTQwMiwgMjk0MDgsIDI5NDEzLCAyOTQyMCwgMjk0MjYsIAotICAgIDI5NDM0LCAyOTQ0MiwgMjk0NDgsIDI5NDU0LCAyOTQ2MSwgMjk0NjgsIDI5NDc0LCAyOTQ4MCwgMjk0ODYsIDI5NDkyLCAKLSAgICAyOTQ5NywgMjk1MDMsIDI5NTExLCAyOTUxOCwgMjk1MjMsIDI5NTI5LCAyOTUzNSwgMjk1NDEsIDI5NTQ5LCAyOTU1MywgCi0gICAgMjk1NTksIDI5NTY1LCAyOTU3MSwgMjk1NzcsIDI5NTgzLCAyOTU4OSwgMjk1OTMsIDI5NTk4LCAyOTYwMywgMjk2MTAsIAotICAgIDI5NjE1LCAyOTYxOSwgMjk2MjQsIDI5NjI4LCAyOTYzMiwgMjk2MzYsIDI5NjQxLCAyOTY0NiwgMjk2NTAsIDI5NjU0LCAKLSAgICAyOTY1OCwgMjk2NjMsIDI5NjY3LCAyOTY3MiwgMjk2NzcsIDI5NjgxLCAyOTY4NiwgMjk2OTAsIDI5Njk1LCAyOTY5OSwgCi0gICAgMjk3MDQsIDI5NzA5LCAyOTcxNSwgMjk3MjAsIDI5NzI1LCAyOTcyOSwgMjk3MzQsIDI5NzQwLCAyOTc0NywgMjk3NTEsIAotICAgIDI5NzU2LCAyOTc2MSwgMjk3NjUsIDI5NzcwLCAyOTc3NCwgMjk3ODAsIDI5Nzg3LCAyOTc5NCwgMjk3OTksIDI5ODA0LCAKLSAgICAyOTgwOCwgMjk4MTQsIDI5ODE5LCAyOTgyMywgMjk4MjgsIDI5ODMzLCAyOTgzOSwgMjk4NDQsIDI5ODUwLCAyOTg1NSwgCi0gICAgMjk4NjEsIDI5ODY3LCAyOTg3MywgMjk4NzksIDI5ODg2LCAyOTg5MywgMjk5MDAsIDI5OTA3LCAyOTkxNCwgMjk5MTksIAotICAgIDI5OTI3LCAyOTkzNiwgMjk5NDUsIDI5OTU0LCAyOTk2MywgMjk5NzIsIDI5OTgxLCAyOTk5MywgMzAwMDIsIDMwMDExLCAKLSAgICAzMDAyMCwgMzAwMjUsIDMwMDMwLCAzMDAzNiwgMzAwNDQsIDMwMDUyLCAzMDA1OSwgMzAwNjYsIDMwMDczLCAzMDA4MCwgCi0gICAgMzAwODgsIDMwMDk3LCAzMDEwNiwgMzAxMTUsIDMwMTI0LCAzMDEzMywgMzAxNDIsIDMwMTUxLCAzMDE2MCwgMzAxNjksIAotICAgIDMwMTc4LCAzMDE4NywgMzAxOTYsIDMwMjA1LCAzMDIxNCwgMzAyMjIsIDMwMjMxLCAzMDI0MiwgMzAyNTAsIDMwMjYwLCAKLSAgICAzMDI3MSwgMzAyODAsIDMwMjg5LCAzMDI5OSwgMzAzMDgsIDMwMzE2LCAzMDMyNSwgMzAzMzEsIDMwMzM2LCAzMDM0NCwgCi0gICAgMzAzNDksIDMwMzU2LCAzMDM2MSwgMzAzNzAsIDMwMzc1LCAzMDM4MCwgMzAzODcsIDMwMzkyLCAzMDM5NywgMzA0MDUsIAotICAgIDMwNDEzLCAzMDQyMiwgMzA0MzEsIDMwNDM2LCAzMDQ0MywgMzA0NTMsIDMwNDYxLCAzMDQ3MCwgMzA0NzUsIDMwNDgxLCAKLSAgICAzMDQ4NiwgMzA0OTMsIDMwNDk4LCAzMDUwNywgMzA1MTIsIDMwNTE3LCAzMDUyMiwgMzA1MjksIDMwNTM0LCAzMDUzOSwgCi0gICAgMzA1NDgsIDMwNTU2LCAzMDU2MSwgMzA1NjYsIDMwNTczLCAzMDU4MCwgMzA1ODQsIDMwNTg4LCAzMDU5MSwgMzA1OTQsIAotICAgIDMwNTk3LCAzMDYwMCwgMzA2MDMsIDMwNjA2LCAzMDYxMywgMzA2MTYsIDMwNjE5LCAzMDYyNCwgMzA2MjgsIDMwNjMyLCAKLSAgICAzMDYzNiwgMzA2NDAsIDMwNjQ0LCAzMDY1NCwgMzA2NjAsIDMwNjY2LCAzMDY3MiwgMzA2ODAsIDMwNjg4LCAzMDY5NCwgCi0gICAgMzA2OTksIDMwNzA1LCAzMDcxMSwgMzA3MTYsIDMwNzIyLCAzMDcyOCwgMzA3MzMsIDMwNzM5LCAzMDc0NSwgMzA3NTMsIAotICAgIDMwNzU4LCAzMDc2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzA3NzAsIDMwNzc1LCAzMDc4NCwgMzA3OTIsIDMwODAwLCAzMDgwNywgMzA4MTQsIDMwODIxLCAzMDgyOCwgCi0gICAgMzA4MzYsIDMwODQ0LCAzMDg1NCwgMzA4NjQsIDMwODcyLCAzMDg4MCwgMzA4ODgsIDMwODk2LCAzMDkwNSwgMzA5MTQsIAotICAgIDMwOTIyLCAzMDkzMCwgMzA5MzksIDMwOTQ4LCAzMDk1OCwgMzA5NjgsIDMwOTc3LCAzMDk4NiwgMzA5OTQsIDMxMDAyLCAKLSAgICAzMTAxMCwgMzEwMTgsIDMxMDI4LCAzMTAzOCwgMzEwNDYsIDMxMDU0LCAzMTA2MiwgMzEwNzAsIDMxMDc4LCAzMTA4NiwgCi0gICAgMzEwOTQsIDMxMTAyLCAzMTEwOSwgMzExMTYsIDMxMTI0LCAzMTEzMiwgMzExNDEsIDMxMTUwLCAzMTE1OSwgMzExNjgsIAotICAgIDMxMTc4LCAzMTE4OCwgMzExOTUsIDMxMjAyLCAzMTIxMCwgMzEyMTgsIDMxMjI3LCAzMTIzNiwgMzEyNDQsIDMxMjUyLCAKLSAgICAzMTI2NCwgMzEyNzYsIDMxMjg1LCAzMTI5NCwgMzEzMDMsIDMxMzEyLCAzMTMxOSwgMzEzMjYsIDMxMzM0LCAzMTM0MiwgCi0gICAgMzEzNTAsIDMxMzU4LCAzMTM2NiwgMzEzNzQsIDMxMzgyLCAzMTM5MCwgMzEzOTksIDMxNDA4LCAzMTQxNywgMzE0MjYsIAotICAgIDMxNDM1LCAzMTQ0NCwgMzE0NTMsIDMxNDYyLCAzMTQ3MiwgMzE0ODIsIDMxNDkxLCAzMTUwMCwgMzE1MDcsIDMxNTE0LCAKLSAgICAzMTUyMiwgMzE1MzAsIDMxNTM4LCAzMTU0NiwgMzE1NTQsIDMxNTYyLCAzMTU3NCwgMzE1ODYsIDMxNTk1LCAzMTYwNCwgCi0gICAgMzE2MTIsIDMxNjIwLCAzMTYyOCwgMzE2MzYsIDMxNjQ3LCAzMTY1OCwgMzE2NjksIDMxNjgwLCAzMTY5MiwgMzE3MDQsIAotICAgIDMxNzEyLCAzMTcyMCwgMzE3MjgsIDMxNzM2LCAzMTc0NSwgMzE3NTQsIDMxNzYzLCAzMTc3MiwgMzE3ODAsIDMxNzg4LCAKLSAgICAzMTc5NiwgMzE4MDQsIDMxODEyLCAzMTgyMCwgMzE4MjksIDMxODM4LCAzMTg0NywgMzE4NTYsIDMxODYzLCAzMTg3MCwgCi0gICAgMzE4NzgsIDMxODg2LCAzMTg5NCwgMzE5MDIsIDMxOTA5LCAzMTkxNiwgMzE5MjMsIDMxOTMwLCAzMTkzOCwgMzE5NDYsIAotICAgIDMxOTU0LCAzMTk2MiwgMzE5NzAsIDMxOTc4LCAzMTk4NSwgMzE5OTIsIDMyMDAwLCAzMjAwOCwgMzIwMTYsIDMyMDI0LCAKLSAgICAzMjAzMiwgMzIwNDAsIDMyMDQ5LCAzMjA1OCwgMzIwNjcsIDMyMDc0LCAzMjA4MywgMzIwOTIsIDMyMTAxLCAzMjExMCwgCi0gICAgMzIxMjAsIDMyMTI5LCAzMjEzNSwgMzIxNDAsIDMyMTQ3LCAzMjE1NCwgMzIxNjIsIDMyMTcwLCAzMjE3OSwgMzIxODgsIAotICAgIDMyMTk4LCAzMjIwOCwgMzIyMTksIDMyMjMwLCAzMjIzOSwgMzIyNDgsIDMyMjU4LCAzMjI2OCwgMzIyNzcsIDMyMjg2LCAKLSAgICAzMjI5NiwgMzIzMDYsIDMyMzE3LCAzMjMyOCwgMzIzMzcsIDMyMzQ2LCAzMjM1NiwgMzIzNjYsIDMyMzczLCAzMjM4MCwgCi0gICAgMzIzODgsIDMyMzk2LCAzMjQwMiwgMzI0MDgsIDMyNDE3LCAzMjQyNiwgMzI0MzYsIDMyNDQ2LCAzMjQ1NywgMzI0NjgsIAotICAgIDMyNDc3LCAzMjQ4NiwgMzI0OTYsIDMyNTA2LCAzMjUxNSwgMzI1MjQsIDMyNTMyLCAzMjU0MCwgMzI1NDcsIDMyNTU0LCAKLSAgICAzMjU2MiwgMzI1NzAsIDMyNTc5LCAzMjU4OCwgMzI1OTgsIDMyNjA4LCAzMjYxOSwgMzI2MzAsIDMyNjM5LCAzMjY0OCwgCi0gICAgMzI2NTgsIDMyNjY4LCAzMjY3NywgMzI2ODYsIDMyNjk2LCAzMjcwNiwgMzI3MTcsIDMyNzI4LCAzMjczNywgMzI3NDYsIAotICAgIDMyNzU2LCAzMjc2NiwgMzI3NzMsIDMyNzgwLCAzMjc4OCwgMzI3OTYsIDMyODA1LCAzMjgxNCwgMzI4MjQsIDMyODM0LCAKLSAgICAzMjg0NSwgMzI4NTYsIDMyODY1LCAzMjg3NCwgMzI4ODQsIDMyODk0LCAzMjkwMiwgMzI5MTAsIDMyOTE4LCAzMjkyNiwgCi0gICAgMzI5MzUsIDMyOTQ0LCAzMjk1MSwgMzI5NTgsIDMyOTY1LCAzMjk3MiwgMzI5NzgsIDMyOTg0LCAzMjk5MiwgMzMwMDAsIAotICAgIDMzMDA4LCAzMzAxNiwgMzMwMjYsIDMzMDM2LCAzMzA0NiwgMzMwNTYsIDMzMDY2LCAzMzA3NiwgMzMwODQsIDMzMDkyLCAKLSAgICAzMzEwMiwgMzMxMTIsIDMzMTIyLCAzMzEzMiwgMzMxNDIsIDMzMTUyLCAzMzE2MCwgMzMxNjgsIDMzMTc4LCAzMzE4OCwgCi0gICAgMzMxOTgsIDAsIDAsIDMzMjA4LCAzMzIxNiwgMzMyMjQsIDMzMjM0LCAzMzI0NCwgMzMyNTQsIDAsIDAsIDMzMjY0LCAKLSAgICAzMzI3MiwgMzMyODAsIDMzMjkwLCAzMzMwMCwgMzMzMTAsIDMzMzIwLCAzMzMzMCwgMzMzNDAsIDMzMzQ4LCAzMzM1NiwgCi0gICAgMzMzNjYsIDMzMzc2LCAzMzM4NiwgMzMzOTYsIDMzNDA2LCAzMzQxNiwgMzM0MjQsIDMzNDMyLCAzMzQ0MiwgMzM0NTIsIAotICAgIDMzNDYyLCAzMzQ3MiwgMzM0ODIsIDMzNDkyLCAzMzUwMCwgMzM1MDgsIDMzNTE4LCAzMzUyOCwgMzM1MzgsIDMzNTQ4LCAKLSAgICAzMzU1OCwgMzM1NjgsIDMzNTc2LCAzMzU4NCwgMzM1OTQsIDMzNjA0LCAzMzYxNCwgMCwgMCwgMzM2MjQsIDMzNjMyLCAKLSAgICAzMzY0MCwgMzM2NTAsIDMzNjYwLCAzMzY3MCwgMCwgMCwgMzM2ODAsIDMzNjg4LCAzMzY5NiwgMzM3MDYsIDMzNzE2LCAKLSAgICAzMzcyNiwgMzM3MzYsIDMzNzQ2LCAwLCAzMzc1NiwgMCwgMzM3NjQsIDAsIDMzNzc0LCAwLCAzMzc4NCwgMzM3OTQsIAotICAgIDMzODAyLCAzMzgxMCwgMzM4MjAsIDMzODMwLCAzMzg0MCwgMzM4NTAsIDMzODYwLCAzMzg3MCwgMzM4NzgsIDMzODg2LCAKLSAgICAzMzg5NiwgMzM5MDYsIDMzOTE2LCAzMzkyNiwgMzM5MzYsIDMzOTQ2LCAzMzk1NCwgMzM5NjIsIDMzOTcwLCAzMzk3OCwgCi0gICAgMzM5ODYsIDMzOTk0LCAzNDAwMiwgMzQwMTAsIDM0MDE4LCAzNDAyNiwgMzQwMzQsIDM0MDQyLCAzNDA1MCwgMCwgMCwgCi0gICAgMzQwNTgsIDM0MDY4LCAzNDA3OCwgMzQwOTEsIDM0MTA0LCAzNDExNywgMzQxMzAsIDM0MTQzLCAzNDE1NiwgMzQxNjYsIAotICAgIDM0MTc2LCAzNDE4OSwgMzQyMDIsIDM0MjE1LCAzNDIyOCwgMzQyNDEsIDM0MjU0LCAzNDI2NCwgMzQyNzQsIDM0Mjg3LCAKLSAgICAzNDMwMCwgMzQzMTMsIDM0MzI2LCAzNDMzOSwgMzQzNTIsIDM0MzYyLCAzNDM3MiwgMzQzODUsIDM0Mzk4LCAzNDQxMSwgCi0gICAgMzQ0MjQsIDM0NDM3LCAzNDQ1MCwgMzQ0NjAsIDM0NDcwLCAzNDQ4MywgMzQ0OTYsIDM0NTA5LCAzNDUyMiwgMzQ1MzUsIAotICAgIDM0NTQ4LCAzNDU1OCwgMzQ1NjgsIDM0NTgxLCAzNDU5NCwgMzQ2MDcsIDM0NjIwLCAzNDYzMywgMzQ2NDYsIDM0NjU0LCAKLSAgICAzNDY2MiwgMzQ2NzMsIDM0NjgxLCAwLCAzNDY5MiwgMzQ3MDAsIDM0NzExLCAzNDcxOSwgMzQ3MjcsIDM0NzM1LCAzNDc0MywgCi0gICAgMzQ3NTEsIDM0NzU0LCAzNDc1NywgMzQ3NjAsIDM0NzYzLCAzNDc2OSwgMzQ3ODAsIDM0Nzg4LCAwLCAzNDc5OSwgMzQ4MDcsIAotICAgIDM0ODE4LCAzNDgyNiwgMzQ4MzQsIDM0ODQyLCAzNDg1MCwgMzQ4NTgsIDM0ODYzLCAzNDg2OCwgMzQ4NzMsIDM0ODgxLCAKLSAgICAzNDg4OSwgMzQ5MDAsIDAsIDAsIDM0OTExLCAzNDkxOSwgMzQ5MzAsIDM0OTM4LCAzNDk0NiwgMzQ5NTQsIDAsIDM0OTYyLCAKLSAgICAzNDk2NywgMzQ5NzIsIDM0OTc3LCAzNDk4NSwgMzQ5OTMsIDM1MDA0LCAzNTAxNSwgMzUwMjMsIDM1MDMxLCAzNTAzOSwgCi0gICAgMzUwNTAsIDM1MDU4LCAzNTA2NiwgMzUwNzQsIDM1MDgyLCAzNTA5MCwgMzUwOTYsIDM1MTAyLCAwLCAwLCAzNTEwNSwgCi0gICAgMzUxMTYsIDM1MTI0LCAwLCAzNTEzNSwgMzUxNDMsIDM1MTU0LCAzNTE2MiwgMzUxNzAsIDM1MTc4LCAzNTE4NiwgMzUxOTQsIAotICAgIDM1MTk3LCAwLCAzNTIwMCwgMzUyMDQsIDM1MjA4LCAzNTIxMiwgMzUyMTYsIDM1MjIwLCAzNTIyNCwgMzUyMjgsIDM1MjMyLCAKLSAgICAzNTIzNiwgMzUyNDAsIDM1MjQ0LCAzNTI1MCwgMzUyNTYsIDM1MjYyLCAzNTI2NSwgMzUyNjgsIDM1MjcwLCAzNTI3NCwgCi0gICAgMzUyNzgsIDM1MjgyLCAzNTI4NiwgMzUyODgsIDM1MjkyLCAzNTI5NiwgMzUzMDIsIDM1MzA4LCAzNTMxNSwgMzUzMjIsIAotICAgIDM1MzI3LCAzNTMzMiwgMzUzMzgsIDM1MzQ0LCAzNTM0NiwgMzUzNDksIDM1MzUxLCAzNTM1NSwgMzUzNTksIDM1MzYzLCAKLSAgICAzNTM2NiwgMzUzNzAsIDM1Mzc0LCAzNTM3OCwgMzUzODIsIDM1Mzg2LCAzNTM5MiwgMzUzOTYsIDM1NDAwLCAzNTQwNiwgCi0gICAgMzU0MTEsIDM1NDE4LCAzNTQyMCwgMzU0MjMsIDM1NDI3LCAzNTQzMCwgMzU0MzQsIDM1NDM5LCAzNTQ0MSwgMzU0NTAsIAotICAgIDM1NDU5LCAzNTQ2MiwgMzU0NjYsIDM1NDY4LCAzNTQ3MCwgMzU0NzIsIDM1NDc1LCAzNTQ4MSwgMzU0ODMsIDM1NDg3LCAKLSAgICAzNTQ5MSwgMzU0OTgsIDM1NTA1LCAzNTUwOSwgMzU1MTQsIDM1NTE5LCAzNTUyNCwgMzU1MjgsIDM1NTMyLCAzNTUzNiwgCi0gICAgMzU1MzksIDM1NTQyLCAzNTU0NiwgMzU1NTMsIDM1NTU4LCAzNTU2MiwgMzU1NjYsIDM1NTcxLCAzNTU3NSwgMzU1NzksIAotICAgIDM1NTg0LCAzNTU4OSwgMzU1OTMsIDM1NTk3LCAzNTYwMSwgMzU2MDMsIDM1NjA4LCAzNTYxMywgMzU2MTcsIDM1NjIxLCAKLSAgICAzNTYyNSwgMzU2MjksIDAsIDAsIDAsIDAsIDAsIDM1NjMzLCAzNTYzOSwgMzU2NDUsIDM1NjUxLCAzNTY1NywgMzU2NjIsIAotICAgIDM1NjY3LCAzNTY3MSwgMCwgMCwgMzU2NzcsIDM1NjgwLCAzNTY4MywgMzU2ODYsIDM1Njg5LCAzNTY5MiwgMzU2OTUsIAotICAgIDM1Njk5LCAzNTcwMywgMzU3MDgsIDM1NzEzLCAzNTcxOCwgMzU3MjQsIDM1NzI4LCAzNTczMSwgMzU3MzQsIDM1NzM3LCAKLSAgICAzNTc0MCwgMzU3NDMsIDM1NzQ2LCAzNTc0OSwgMzU3NTIsIDM1NzU1LCAzNTc1OSwgMzU3NjMsIDM1NzY4LCAzNTc3MywgMCwgCi0gICAgMzU3NzgsIDM1Nzg0LCAzNTc5MCwgMzU3OTYsIDM1ODAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzNTgxMCwgMzU4MTMsIDM1ODE2LCAzNTgxOSwgMzU4MjQsIDM1ODI3LCAzNTgzMCwgMzU4MzMsIDM1ODM2LCAzNTgzOSwgCi0gICAgMzU4NDIsIDM1ODQ2LCAzNTg0OSwgMzU4NTIsIDM1ODU1LCAzNTg1OCwgMzU4NjEsIDM1ODY2LCAzNTg2OSwgMzU4NzIsIAotICAgIDM1ODc1LCAzNTg3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzU4ODEsIDM1ODg2LCAzNTg5MSwgMzU4OTgsIDM1OTA2LCAzNTkxMSwgMzU5MTYsIDM1OTIwLCAKLSAgICAzNTkyNCwgMzU5MjksIDM1OTM2LCAzNTk0MywgMzU5NDcsIDM1OTUyLCAzNTk1NywgMzU5NjIsIDM1OTY3LCAzNTk3NCwgCi0gICAgMzU5NzksIDM1OTg0LCAzNTk4OSwgMzU5OTgsIDM2MDA1LCAzNjAxMSwgMzYwMTUsIDM2MDIwLCAzNjAyNiwgMzYwMzEsIAotICAgIDM2MDM4LCAzNjA0NiwgMzYwNTQsIDM2MDU4LCAzNjA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzYwNjYsIDM2MDcwLCAzNjA3NywgMzYwODEsIDM2MDg1LCAzNjA5MCwgMzYwOTQsIDM2MDk4LCAzNjEwMiwgCi0gICAgMzYxMDQsIDM2MTA4LCAzNjExMSwgMzYxMTQsIDM2MTE4LCAzNjEyMSwgMzYxMjUsIDM2MTMzLCAzNjEzNiwgMzYxNDAsIAotICAgIDM2MTQzLCAzNjE0NiwgMzYxNTIsIDM2MTU1LCAzNjE1OCwgMzYxNjQsIDM2MTY4LCAzNjE3MiwgMzYxNzYsIDM2MTc5LCAKLSAgICAzNjE4MywgMzYxODYsIDM2MTkwLCAzNjE5MiwgMzYxOTUsIDM2MTk4LCAzNjIwMiwgMzYyMDQsIDM2MjA4LCAzNjIxMSwgCi0gICAgMzYyMTQsIDM2MjE5LCAzNjIyNCwgMzYyMzAsIDM2MjMzLCAzNjIzNiwgMzYyNDAsIDM2MjQ1LCAzNjI0OCwgMzYyNTEsIAotICAgIDM2MjU0LCAzNjI1OCwgMzYyNjIsIDM2MjY1LCAzNjI2OCwgMzYyNzAsIDM2MjczLCAzNjI3NiwgMzYyNzksIDM2MjgzLCAKLSAgICAzNjI4OCwgMzYyOTEsIDM2Mjk1LCAzNjI5OSwgMzYzMDMsIDM2MzA3LCAzNjMxMiwgMzYzMTYsIDM2MzIwLCAzNjMyNCwgCi0gICAgMzYzMjksIDM2MzM0LCAzNjMzOSwgMzYzNDMsIDM2MzQ3LCAzNjM1MiwgMzYzNTYsIDM2MzU5LCAzNjM2MiwgMzYzNjQsIAotICAgIDM2MzY4LCAwLCAwLCAwLCAzNjM3NCwgMzYzODEsIDM2Mzg4LCAzNjM5NSwgMzY0MDIsIDM2NDA5LCAzNjQxNywgMzY0MjQsIAotICAgIDM2NDMyLCAzNjQzOSwgMzY0NDYsIDM2NDU0LCAzNjQ2MiwgMzY0NjcsIDM2NDcxLCAzNjQ3NSwgMzY0NzksIDM2NDgzLCAKLSAgICAzNjQ4NywgMzY0OTEsIDM2NDk1LCAzNjQ5OSwgMzY1MDMsIDM2NTA4LCAzNjUxMywgMzY1MTgsIDM2NTIzLCAzNjUyOSwgCi0gICAgMzY1MzYsIDM2NTQyLCAzNjU0NywgMzY1NTIsIDM2NTU3LCAzNjU2MiwgMzY1NjcsIDM2NTcyLCAzNjU3NywgMzY1ODIsIAotICAgIDM2NTg3LCAzNjU5MywgMzY1OTksIDM2NjA1LCAzNjYxMSwgMzY2MTgsIDM2NjI2LCAzNjYzMywgMzY2NDMsIDM2NjUwLCAKLSAgICAzNjY1NywgMzY2NjQsIDM2NjcwLCAzNjY3OCwgMzY2ODYsIDM2NjkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcwMSwgCi0gICAgMzY3MDMsIDM2NzA2LCAzNjcwOCwgMzY3MTEsIDM2NzE0LCAzNjcxNywgMzY3MjIsIDM2NzI3LCAzNjczMiwgMzY3MzcsIAotICAgIDM2NzQxLCAzNjc0NSwgMzY3NDksIDM2NzUzLCAzNjc1OCwgMzY3NjQsIDM2NzY5LCAzNjc3NSwgMzY3ODAsIDM2Nzg1LCAKLSAgICAzNjc5MCwgMzY3OTYsIDM2ODAxLCAzNjgwNywgMzY4MTMsIDM2ODE3LCAzNjgyMSwgMzY4MjYsIDM2ODMxLCAzNjgzNiwgCi0gICAgMzY4NDEsIDM2ODQ2LCAzNjg1NCwgMzY4NjIsIDM2ODcwLCAzNjg3OCwgMzY4ODUsIDM2ODkzLCAzNjkwMCwgMzY5MDcsIAotICAgIDM2OTE1LCAzNjkyNSwgMzY5MzIsIDM2OTM5LCAzNjk0NiwgMzY5NTMsIDM2OTYxLCAzNjk2OSwgMzY5NzYsIDM2OTgzLCAKLSAgICAzNjk5MSwgMzY5OTksIDM3MDA0LCAzNzAxMiwgMzcwMTcsIDM3MDIyLCAzNzAyOCwgMzcwMzMsIDM3MDM5LCAzNzA0NiwgCi0gICAgMzcwNTMsIDM3MDU4LCAzNzA2NCwgMzcwNjksIDM3MDcyLCAzNzA3NiwgMzcwNzksIDM3MDgzLCAzNzA4NywgMzcwOTEsIAotICAgIDM3MDk3LCAzNzEwMywgMzcxMDksIDM3MTE1LCAzNzExOSwgMzcxMjMsIDM3MTI3LCAzNzEzMSwgMzcxMzcsIDM3MTQzLCAKLSAgICAzNzE0NywgMzcxNTIsIDM3MTU2LCAzNzE2MSwgMzcxNjUsIDM3MTY5LCAzNzE3MiwgMzcxNzYsIDM3MTc5LCAzNzE4MywgCi0gICAgMzcxOTAsIDM3MTk4LCAzNzIwOSwgMzcyMjAsIDM3MjI1LCAzNzIzNCwgMzcyNDEsIDM3MjQ5LCAzNzI1NywgMzcyNjEsIAotICAgIDM3MjY3LCAzNzI3NSwgMzcyNzksIDM3Mjg0LCAzNzI4OSwgMzcyOTUsIDM3MzAxLCAzNzMwNywgMzczMTQsIDM3MzE4LCAKLSAgICAzNzMyMiwgMzczMjcsIDM3MzMwLCAzNzMzMiwgMzczMzYsIDM3MzQwLCAzNzM0NywgMzczNTEsIDM3MzUzLCAzNzM1NSwgCi0gICAgMzczNTksIDM3MzY2LCAzNzM3MSwgMzczNzcsIDM3Mzg2LCAzNzM5MywgMzczOTgsIDM3NDAyLCAzNzQwNiwgMzc0MTAsIAotICAgIDM3NDEzLCAzNzQxNiwgMzc0MTksIDM3NDIzLCAzNzQyNywgMzc0MzEsIDM3NDM1LCAzNzQzOSwgMzc0NDIsIDM3NDQ2LCAKLSAgICAzNzQ1MCwgMzc0NTMsIDM3NDU1LCAzNzQ1OCwgMzc0NjAsIDM3NDY0LCAzNzQ2OCwgMzc0NzAsIDM3NDc1LCAzNzQ3OCwgCi0gICAgMzc0ODIsIDM3NDg2LCAzNzQ5MCwgMzc0OTIsIDM3NDk0LCAzNzQ5NiwgMzc0OTksIDM3NTAzLCAzNzUwNywgMzc1MTEsIAotICAgIDM3NTE1LCAzNzUxOSwgMzc1MjUsIDM3NTMxLCAzNzUzMywgMzc1MzUsIDM3NTM3LCAzNzUzOSwgMzc1NDIsIDM3NTQ0LCAKLSAgICAzNzU0OCwgMzc1NTAsIDM3NTU0LCAzNzU1NiwgMzc1NjEsIDM3NTY1LCAzNzU2OSwgMzc1NzEsIDM3NTc0LCAzNzU3OCwgCi0gICAgMzc1ODMsIDM3NTg3LCAzNzU5NiwgMzc2MDYsIDM3NjEwLCAzNzYxNSwgMzc2MjEsIDM3NjI0LCAzNzYyOCwgMzc2MzEsIAotICAgIDM3NjM2LCAzNzY0MCwgMzc2NDYsIDM3NjUwLCAzNzY2MSwgMzc2NjksIDM3NjczLCAzNzY3NywgMzc2ODMsIDM3Njg3LCAKLSAgICAzNzY5MCwgMzc2OTIsIDM3Njk1LCAzNzY5OSwgMzc3MDMsIDM3NzA5LCAzNzcxMywgMzc3MTcsIDM3NzIwLCAzNzcyMywgCi0gICAgMzc3MjcsIDM3NzMyLCAzNzczNywgMzc3NDIsIDM3NzQ3LCAzNzc1MiwgMzc3NTksIDM3NzY2LCAzNzc3MCwgMzc3NzQsIAotICAgIDM3Nzc2LCAzNzc4MCwgMzc3ODMsIDM3Nzg2LCAzNzc5NCwgMzc4MDIsIDM3ODA4LCAzNzgxNCwgMzc4MjMsIDM3ODMyLCAKLSAgICAzNzgzNywgMzc4NDIsIDM3ODUwLCAzNzg1OCwgMzc4NjAsIDM3ODYyLCAzNzg2NywgMzc4NzIsIDM3ODc4LCAzNzg4NCwgCi0gICAgMzc4ODksIDM3ODk0LCAzNzg5OCwgMzc5MDIsIDM3OTA4LCAzNzkxNCwgMzc5MjAsIDM3OTI2LCAzNzkzNiwgMzc5NDYsIAotICAgIDM3OTUzLCAzNzk2MCwgMzc5NjIsIDM3OTY2LCAzNzk3MCwgMzc5NzUsIDM3OTgwLCAzNzk4NywgMzc5OTQsIDM3OTk3LCAKLSAgICAzODAwMCwgMzgwMDMsIDM4MDA2LCAzODAwOSwgMzgwMTQsIDM4MDE4LCAzODAyMywgMzgwMjgsIDM4MDMxLCAzODAzNCwgCi0gICAgMzgwMzgsIDM4MDQyLCAzODA0NiwgMzgwNTEsIDM4MDU0LCAzODA1NywgMzgwNjAsIDM4MDYzLCAzODA2NSwgMzgwNjcsIAotICAgIDM4MDY5LCAzODA3MSwgMzgwNzksIDM4MDg3LCAzODA5MiwgMzgwOTUsIDM4MTAwLCAzODExMCwgMzgxMTYsIDM4MTIyLCAKLSAgICAzODEyOCwgMzgxMzYsIDM4MTQ0LCAzODE1NSwgMzgxNTksIDM4MTYzLCAzODE2NSwgMzgxNzEsIDM4MTczLCAzODE3NSwgCi0gICAgMzgxNzcsIDM4MTc5LCAzODE4NSwgMzgxODgsIDM4MTk0LCAzODIwMCwgMzgyMDQsIDM4MjA4LCAzODIxMiwgMzgyMTUsIAotICAgIDM4MjE5LCAzODIyMywgMzgyMjUsIDM4MjM0LCAzODI0MywgMzgyNDgsIDM4MjUzLCAzODI1OCwgMzgyNjQsIDM4MjcwLCAKLSAgICAzODI3MywgMzgyNzYsIDM4Mjc5LCAzODI4MiwgMzgyODQsIDM4Mjg5LCAzODI5NCwgMzgyOTksIDM4MzA1LCAzODMxMSwgCi0gICAgMzgzMTgsIDM4MzI1LCAzODMzMCwgMzgzMzUsIDM4MzQwLCAzODM0NSwgMzgzNTMsIDM4MzYxLCAzODM2OSwgMzgzNzcsIAotICAgIDM4Mzg1LCAzODM5MywgMzg0MDEsIDM4NDA5LCAzODQxNywgMzg0MjUsIDM4NDMyLCAzODQ0MywgMzg0NTIsIDM4NDY2LCAKLSAgICAzODQ2OSwgMzg0NzQsIDM4NDgwLCAzODQ4NiwgMzg0OTMsIDM4NTA3LCAzODUyMiwgMzg1MjgsIDM4NTM0LCAzODU0MSwgCi0gICAgMzg1NDcsIDM4NTU1LCAzODU2MSwgMzg1NzQsIDM4NTg4LCAzODU5MywgMzg1OTksIDM4NjA2LCAzODYwOSwgMzg2MTIsIAotICAgIDM4NjE0LCAzODYxNywgMzg2MjAsIDM4NjIyLCAzODYyNCwgMzg2MjgsIDM4NjMxLCAzODYzNCwgMzg2MzcsIDM4NjQwLCAKLSAgICAzODY0NSwgMzg2NTAsIDM4NjU1LCAzODY2MCwgMzg2NjMsIDM4NjY2LCAzODY2OCwgMzg2NzAsIDM4NjcyLCAzODY3NiwgCi0gICAgMzg2ODAsIDM4Njg0LCAzODY5MCwgMzg2OTMsIDM4Njk1LCAzODY5NywgMzg3MDIsIDM4NzA3LCAzODcxMiwgMzg3MTcsIAotICAgIDM4NzIyLCAzODcyNywgMzg3MjksIDM4NzMxLCAzODc0MCwgMzg3NDQsIDM4NzUxLCAzODc2MCwgMzg3NjIsIDM4NzY3LCAKLSAgICAzODc3MiwgMzg3NzksIDM4NzgzLCAzODc4NSwgMzg3ODksIDM4NzkxLCAzODc5NSwgMzg3OTksIDM4ODAzLCAzODgwNSwgCi0gICAgMzg4MDcsIDM4ODA5LCAzODgxNCwgMzg4MjEsIDM4ODI4LCAzODgzNSwgMzg4NDIsIDM4ODQ5LCAzODg1NiwgMzg4NjMsIAotICAgIDM4ODcwLCAzODg3NiwgMzg4ODIsIDM4ODg5LCAzODg5NiwgMzg5MDMsIDM4OTEwLCAzODkxNiwgMzg5MjIsIDM4OTI5LCAKLSAgICAzODkzNiwgMzg5NDMsIDM4OTUxLCAzODk1OCwgMzg5NjYsIDM4OTczLCAzODk4MSwgMzg5ODgsIDM4OTk2LCAzOTAwNCwgCi0gICAgMzkwMTEsIDM5MDE5LCAzOTAyNiwgMzkwMzQsIDM5MDQxLCAzOTA0OSwgMzkwNTYsIDM5MDYzLCAzOTA3MCwgMzkwNzcsIAotICAgIDM5MDg0LCAzOTA5MiwgMzkwOTksIDM5MTA2LCAzOTExMywgMzkxMjAsIDM5MTI2LCAzOTEzMiwgMzkxMzgsIDM5MTQ0LCAKLSAgICAzOTE1MiwgMzkxNjAsIDM5MTY2LCAzOTE3MiwgMzkxNzgsIDM5MTg0LCAzOTE4OSwgMzkxOTUsIDM5MjAyLCAzOTIxMCwgCi0gICAgMzkyMTcsIDM5MjI0LCAzOTIzMSwgMzkyMzYsIDM5MjQxLCAzOTI0NiwgMzkyNTMsIDM5MjYwLCAzOTI2NywgMzkyNzQsIAotICAgIDM5Mjc5LCAzOTI4MywgMzkyOTIsIDM5Mjk4LCAzOTMwMSwgMzkzMDksIDM5MzEyLCAzOTMxNywgMzkzMjIsIDM5MzI1LCAKLSAgICAzOTMyOCwgMzkzMzYsIDM5MzM5LCAzOTM0NCwgMzkzNDcsIDM5MzU0LCAzOTM1OSwgMzkzNjcsIDM5MzcwLCAzOTM3MywgCi0gICAgMzkzNzYsIDM5MzgxLCAzOTM4NiwgMzkzODksIDM5MzkyLCAzOTM5OSwgMzk0MDIsIDM5NDA3LCAzOTQxNCwgMzk0MTgsIAotICAgIDM5NDIyLCAzOTQyNywgMzk0MzIsIDM5NDM4LCAzOTQ0MywgMzk0NDgsIDM5NDU0LCAzOTQ1OSwgMzk0NjQsIDM5NDcyLCAKLSAgICAzOTQ3OCwgMzk0ODUsIDM5NDkzLCAzOTQ5OSwgMzk1MDYsIDM5NTE0LCAzOTUyMywgMzk1MzAsIDM5NTM2LCAzOTU0NCwgCi0gICAgMzk1NTMsIDM5NTYwLCAzOTU2NCwgMzk1NjksIDM5NTgxLCAzOTU5MywgMzk1OTcsIDM5NjAxLCAzOTYwNSwgMzk2MDksIAotICAgIDM5NjE5LCAzOTYyMywgMzk2MjgsIDM5NjMzLCAzOTYzOCwgMzk2NDMsIDM5NjQ4LCAzOTY1MywgMzk2NjMsIDM5NjczLCAKLSAgICAzOTY4MSwgMzk2OTEsIDM5NzAxLCAzOTcwOSwgMzk3MTksIDM5NzI5LCAzOTczNywgMzk3NDcsIDM5NzU3LCAzOTc2NSwgCi0gICAgMzk3NzMsIDM5NzgzLCAzOTc5MywgMzk3OTYsIDM5Nzk5LCAzOTgwMiwgMzk4MDcsIDM5ODExLCAzOTgxNywgMzk4MjQsIAotICAgIDM5ODMxLCAzOTgzOSwgMzk4NDYsIDM5ODUwLCAzOTg1NCwgMzk4NTgsIDM5ODYyLCAzOTg2NCwgMzk4NjgsIDM5ODcyLCAKLSAgICAzOTg3NywgMzk4ODIsIDM5ODg5LCAzOTg5NiwgMzk4OTksIDM5OTA2LCAzOTkwOCwgMzk5MTAsIDM5OTE0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTkxOCwgCi0gICAgMzk5MjIsIDM5OTI5LCAzOTkzNiwgMzk5NDMsIDM5OTUwLCAzOTk1NCwgMzk5NTgsIDM5OTYyLCAzOTk2NiwgMzk5NzEsIAotICAgIDM5OTc3LCAzOTk4MiwgMzk5ODcsIDM5OTkzLCAzOTk5OSwgNDAwMDUsIDQwMDEzLCA0MDAyMCwgNDAwMjcsIDQwMDM0LCAKLSAgICA0MDA0MSwgNDAwNDcsIDQwMDUzLCA0MDA2MiwgNDAwNjYsIDQwMDczLCA0MDA3NywgNDAwODEsIDQwMDg3LCA0MDA5MywgCi0gICAgNDAwOTksIDQwMTA1LCA0MDEwOSwgNDAxMTMsIDQwMTE2LCA0MDEyMCwgNDAxMjQsIDQwMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDEzNiwgNDAxMzksIAotICAgIDQwMTQzLCA0MDE0NywgNDAxNTMsIDQwMTU5LCA0MDE2NSwgNDAxNzMsIDQwMTgwLCA0MDE4NCwgNDAxOTIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMTk3LCA0MDIwMCwgCi0gICAgNDAyMDMsIDQwMjA2LCA0MDIwOSwgNDAyMTIsIDQwMjE1LCA0MDIxOCwgNDAyMjEsIDQwMjI0LCA0MDIyOCwgNDAyMzIsIAotICAgIDQwMjM2LCA0MDI0MCwgNDAyNDQsIDQwMjQ4LCA0MDI1MiwgNDAyNTYsIDQwMjYwLCA0MDI2NCwgNDAyNjgsIDQwMjcxLCAKLSAgICA0MDI3NCwgNDAyNzcsIDQwMjgwLCA0MDI4MywgNDAyODYsIDQwMjg5LCA0MDI5MiwgNDAyOTUsIDQwMjk5LCA0MDMwMywgCi0gICAgNDAzMDcsIDQwMzExLCA0MDMxNSwgNDAzMTksIDQwMzIzLCA0MDMyNywgNDAzMzEsIDQwMzM1LCA0MDMzOSwgNDAzNDUsIAotICAgIDQwMzUxLCA0MDM1NywgNDAzNjQsIDQwMzcxLCA0MDM3OCwgNDAzODUsIDQwMzkyLCA0MDM5OSwgNDA0MDYsIDQwNDEzLCAKLSAgICA0MDQyMCwgNDA0MjcsIDQwNDM0LCA0MDQ0MSwgNDA0NDgsIDQwNDU1LCA0MDQ2MiwgNDA0NjksIDQwNDc2LCA0MDQ4MSwgCi0gICAgNDA0ODcsIDQwNDkzLCA0MDQ5OSwgNDA1MDQsIDQwNTEwLCA0MDUxNSwgNDA1MjAsIDQwNTI1LCA0MDUzMSwgNDA1MzcsIAotICAgIDQwNTQyLCA0MDU0NywgNDA1NTIsIDQwNTU3LCA0MDU2MywgNDA1NjksIDQwNTc0LCA0MDU3OSwgNDA1ODUsIDQwNTkwLCAKLSAgICA0MDU5NSwgNDA2MDEsIDQwNjA3LCA0MDYxMywgNDA2MTksIDQwNjI0LCA0MDYzMCwgNDA2MzYsIDQwNjQyLCA0MDY0NywgCi0gICAgNDA2NTMsIDQwNjU4LCA0MDY2MywgNDA2NjgsIDQwNjc0LCA0MDY4MCwgNDA2ODUsIDQwNjkwLCA0MDY5NSwgNDA3MDAsIAotICAgIDQwNzA2LCA0MDcxMiwgNDA3MTcsIDQwNzIyLCA0MDcyOCwgNDA3MzMsIDQwNzM4LCA0MDc0NCwgNDA3NTAsIDQwNzU2LCAKLSAgICA0MDc2MiwgNDA3NjcsIDQwNzczLCA0MDc3OSwgNDA3ODUsIDQwNzkwLCA0MDc5NiwgNDA4MDEsIDQwODA2LCA0MDgxMSwgCi0gICAgNDA4MTcsIDQwODIzLCA0MDgyOCwgNDA4MzMsIDQwODM4LCA0MDg0MywgNDA4NDksIDQwODU1LCA0MDg2MCwgNDA4NjUsIAotICAgIDQwODcxLCA0MDg3NiwgNDA4ODEsIDQwODg3LCA0MDg5MywgNDA4OTksIDQwOTA1LCA0MDkwOSwgNDA5MTUsIDQwOTIxLCAKLSAgICA0MDkyNywgNDA5MzMsIDQwOTM5LCA0MDk0NSwgNDA5NTEsIDQwOTU3LCA0MDk2MywgNDA5NjksIDQwOTczLCA0MDk3NywgCi0gICAgNDA5ODEsIDQwOTg1LCA0MDk4OSwgNDA5OTMsIDQwOTk3LCA0MTAwMSwgNDEwMDUsIDQxMDEwLCA0MTAxNiwgNDEwMjEsIAotICAgIDQxMDI2LCA0MTAzMSwgNDEwMzYsIDQxMDQ1LCA0MTA1NCwgNDEwNjMsIDQxMDcyLCA0MTA4MSwgNDEwOTAsIDQxMDk5LCAKLSAgICA0MTEwOCwgNDExMTUsIDQxMTIzLCA0MTEzMSwgNDExMzgsIDQxMTQ1LCA0MTE1MywgNDExNjEsIDQxMTY4LCA0MTE3NSwgCi0gICAgNDExODMsIDQxMTkxLCA0MTE5OCwgNDEyMDUsIDQxMjEzLCA0MTIyMSwgNDEyMjgsIDQxMjM1LCA0MTI0MywgNDEyNTIsIAotICAgIDQxMjYxLCA0MTI2OSwgNDEyNzgsIDQxMjg3LCA0MTI5NCwgNDEzMDEsIDQxMzA5LCA0MTMxOCwgNDEzMjcsIDQxMzM1LCAKLSAgICA0MTM0NCwgNDEzNTMsIDQxMzYwLCA0MTM2NywgNDEzNzYsIDQxMzg1LCA0MTM5MywgNDE0MDEsIDQxNDEwLCA0MTQxOSwgCi0gICAgNDE0MjYsIDQxNDMzLCA0MTQ0MiwgNDE0NTEsIDQxNDU5LCA0MTQ2NywgNDE0NzYsIDQxNDg1LCA0MTQ5MiwgNDE0OTksIAotICAgIDQxNTA4LCA0MTUxNywgNDE1MjUsIDQxNTM0LCA0MTU0MywgNDE1NTEsIDQxNTYxLCA0MTU3MSwgNDE1ODEsIDQxNTkxLCAKLSAgICA0MTYwMCwgNDE2MDksIDQxNjE4LCA0MTYyNywgNDE2MzQsIDQxNjQyLCA0MTY1MCwgNDE2NTgsIDQxNjY2LCA0MTY3MSwgCi0gICAgNDE2NzYsIDQxNjg1LCA0MTY5MywgNDE3MDAsIDQxNzA5LCA0MTcxNywgNDE3MjQsIDQxNzMzLCA0MTc0MSwgNDE3NDgsIAotICAgIDQxNzU3LCA0MTc2NSwgNDE3NzIsIDQxNzgxLCA0MTc4OSwgNDE3OTYsIDQxODA1LCA0MTgxMywgNDE4MjAsIDQxODI5LCAKLSAgICA0MTgzNywgNDE4NDQsIDQxODUzLCA0MTg2MSwgNDE4NjgsIDQxODc3LCA0MTg4NSwgNDE4OTIsIDQxOTAxLCA0MTkxMCwgCi0gICAgNDE5MTksIDQxOTI4LCA0MTk0MCwgNDE5NTIsIDQxOTU5LCA0MTk2NCwgNDE5NjksIDQxOTc0LCA0MTk3OSwgNDE5ODQsIAotICAgIDQxOTg5LCA0MTk5NCwgNDE5OTksIDQyMDA3LCA0MjAxNSwgNDIwMjMsIDQyMDMxLCA0MjAzNiwgNDIwNDIsIDQyMDQ4LCAKLSAgICA0MjA1NCwgNDIwNTgsIDQyMDY1LCA0MjA3MSwgNDIwNzgsIDQyMDgyLCA0MjA4OSwgNDIwOTUsIDQyMTAyLCA0MjEwNiwgCi0gICAgNDIxMTIsIDQyMTE4LCA0MjEyNCwgNDIxMjgsIDQyMTMxLCA0MjEzNSwgNDIxMzksIDQyMTQ2LCA0MjE1MiwgNDIxNTcsIAotICAgIDQyMTYyLCA0MjE2OCwgNDIxODAsIDQyMTg5LCA0MjIwMiwgNDIyMTUsIDQyMjIxLCA0MjIzMCwgNDIyNDIsIDQyMjQ1LCAKLSAgICA0MjI0OCwgNDIyNTUsIDQyMjYzLCA0MjI2OCwgNDIyNzMsIDQyMjgxLCA0MjI5MSwgNDIzMDEsIDQyMzA5LCA0MjMxMywgCi0gICAgNDIzMTcsIDQyMzIwLCA0MjMyMywgNDIzMjcsIDQyMzMxLCA0MjMzNCwgNDIzMzcsIDQyMzQyLCA0MjM0NywgNDIzNTMsIAotICAgIDQyMzU5LCA0MjM2NCwgNDIzNjksIDQyMzc1LCA0MjM4MSwgNDIzODYsIDQyMzkxLCA0MjM5NiwgNDI0MDEsIDQyNDA3LCAKLSAgICA0MjQxMywgNDI0MTgsIDQyNDIzLCA0MjQyOSwgNDI0MzUsIDQyNDQwLCA0MjQ0NSwgNDI0NDgsIDQyNDUxLCA0MjQ2MCwgCi0gICAgNDI0NjIsIDQyNDY0LCA0MjQ2NywgNDI0NzEsIDQyNDc3LCA0MjQ3OSwgNDI0ODIsIDQyNDg5LCA0MjQ5NiwgNDI1MDMsIAotICAgIDQyNTExLCA0MjUyMSwgNDI1MzUsIDQyNTQwLCA0MjU0NSwgNDI1NDksIDQyNTU0LCA0MjU2MiwgNDI1NjksIDQyNTc4LCAKLSAgICA0MjU4NywgNDI1OTUsIDQyNjAzLCA0MjYwOCwgNDI2MTIsIDQyNjE3LCA0MjYyMiwgNDI2MjgsIDQyNjM0LCA0MjYzNywgCi0gICAgNDI2NDMsIDQyNjQ5LCA0MjY1OSwgNDI2NjgsIDQyNjc2LCA0MjY4NCwgNDI2OTMsIDQyNzAyLCA0MjcwNiwgNDI3MTQsIAotICAgIDQyNzIxLCA0MjcyOCwgNDI3MzYsIDQyNzQ1LCA0Mjc1MywgNDI3NjEsIDQyNzcwLCA0Mjc3NSwgNDI3ODAsIDQyNzg0LCAKLSAgICA0Mjc4OSwgNDI3OTQsIDQyODAwLCA0MjgwNiwgNDI4MTAsIDQyODE2LCA0MjgxOCwgNDI4MjAsIDQyODIyLCA0MjgyNCwgCi0gICAgNDI4MjcsIDQyODMwLCA0MjgzMiwgNDI4MzQsIDQyODM2LCA0Mjg0MCwgNDI4NDQsIDQyODQ2LCA0Mjg0OCwgNDI4NTEsIAotICAgIDQyODU0LCA0Mjg1OCwgNDI4NjQsIDQyODcwLCA0Mjg3MiwgNDI4NzksIDQyODgzLCA0Mjg4OCwgNDI4OTMsIDQyODk1LCAKLSAgICA0MjkwNCwgNDI5MTAsIDQyOTE2LCA0MjkyMiwgNDI5MjgsIDQyOTM0LCA0Mjk0MCwgNDI5NDUsIDQyOTQ4LCA0Mjk1MSwgCi0gICAgNDI5NTQsIDQyOTU2LCA0Mjk1OCwgNDI5NjIsIDQyOTY2LCA0Mjk3MSwgNDI5NzYsIDQyOTgxLCA0Mjk4NCwgNDI5ODgsIAotICAgIDQyOTkzLCA0Mjk5NiwgNDMwMDAsIDQzMDA1LCA0MzAxMCwgNDMwMTUsIDQzMDIwLCA0MzAyNSwgNDMwMzAsIDQzMDM1LCAKLSAgICA0MzA0MCwgNDMwNDUsIDQzMDUwLCA0MzA1NSwgNDMwNjAsIDQzMDY2LCA0MzA3MiwgNDMwNzgsIDQzMDgwLCA0MzA4MywgCi0gICAgNDMwODUsIDQzMDg4LCA0MzA5MCwgNDMwOTIsIDQzMDk0LCA0MzA5NiwgNDMwOTgsIDQzMTAwLCA0MzEwMiwgNDMxMDQsIAotICAgIDQzMTA2LCA0MzEwOCwgNDMxMTAsIDQzMTEyLCA0MzExNCwgNDMxMTYsIDQzMTE4LCA0MzEyMCwgNDMxMjIsIDQzMTI3LCAKLSAgICA0MzEzMiwgNDMxMzcsIDQzMTQyLCA0MzE0NywgNDMxNTIsIDQzMTU3LCA0MzE2MiwgNDMxNjcsIDQzMTcyLCA0MzE3NywgCi0gICAgNDMxODIsIDQzMTg3LCA0MzE5MiwgNDMxOTcsIDQzMjAyLCA0MzIwNywgNDMyMTIsIDQzMjE3LCA0MzIyMiwgNDMyMjYsIAotICAgIDQzMjMwLCA0MzIzNCwgNDMyNDAsIDQzMjQ2LCA0MzI1MSwgNDMyNTYsIDQzMjYxLCA0MzI2NiwgNDMyNzEsIDQzMjc2LCAKLSAgICA0MzI4NCwgNDMyOTIsIDQzMzAwLCA0MzMwOCwgNDMzMTYsIDQzMzI0LCA0MzMzMiwgNDMzNDAsIDQzMzQ2LCA0MzM1MSwgCi0gICAgNDMzNTYsIDQzMzYxLCA0MzM2NCwgNDMzNjgsIDQzMzcyLCA0MzM3NiwgNDMzODAsIDQzMzg0LCA0MzM4OCwgNDMzOTUsIAotICAgIDQzNDAyLCA0MzQxMCwgNDM0MTgsIDQzNDIzLCA0MzQyOCwgNDM0MzUsIDQzNDQyLCA0MzQ0OSwgNDM0NTYsIDQzNDU5LCAKLSAgICA0MzQ2MiwgNDM0NjcsIDQzNDY5LCA0MzQ3MywgNDM0NzgsIDQzNDgwLCA0MzQ4MiwgNDM0ODQsIDQzNDg2LCA0MzQ5MSwgCi0gICAgNDM0OTQsIDQzNDk2LCAwLCAwLCA0MzUwMSwgNDM1MDQsIDQzNTA4LCA0MzUxMywgNDM1MTgsIDQzNTI2LCA0MzUzMiwgCi0gICAgNDM1MzcsIDQzNTQ4LCA0MzU1NCwgNDM1NjAsIDQzNTY1LCA0MzU3MCwgNDM1NzYsIDQzNTc5LCA0MzU4MiwgNDM1ODcsIAotICAgIDQzNTg5LCA0MzU5MywgNDM1OTUsIDQzNTk3LCA0MzU5OSwgNDM2MDEsIDQzNjAzLCA0MzYwNSwgNDM2MTAsIDQzNjEyLCAKLSAgICA0MzYxNCwgNDM2MTYsIDAsIDAsIDAsIDQzNjE4LCA0MzYyMywgNDM2MjgsIDQzNjMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0MzYzOCwgNDM2NDQsIDQzNjQ3LCA0MzY1MiwgMCwgNDM2NTUsIDQzNjYwLCA0MzY2NCwgCi0gICAgNDM2NjYsIDAsIDAsIDQzNjY4LCA0MzY3MiwgNDM2NzYsIDQzNjgwLCA0MzY4MiwgNDM2ODcsIDQzNjkwLCA0MzY5MywgCi0gICAgNDM2OTYsIDQzNzAwLCA0MzcwNCwgNDM3MDksIDQzNzEzLCA0MzcxOCwgNDM3MjMsIDQzNzI3LCA0MzczMywgNDM3NDAsIAotICAgIDQzNzQzLCA0Mzc0OSwgNDM3NTQsIDQzNzU4LCA0Mzc2MywgNDM3NjksIDQzNzc1LCA0Mzc4MiwgNDM3ODgsIDQzNzk1LCAwLCAKLSAgICA0MzgwMiwgNDM4MDksIDQzODEzLCA0MzgyMCwgNDM4MjYsIDQzODMxLCA0MzgzNywgNDM4NDEsIDQzODQ2LCA0Mzg0OSwgCi0gICAgNDM4NTUsIDQzODYxLCA0Mzg2OCwgNDM4NzYsIDQzODgzLCA0Mzg5MiwgNDM5MDIsIDQzOTA5LCA0MzkxNSwgNDM5MTksIAotICAgIDQzOTI3LCA0MzkzMiwgNDM5NDEsIDQzOTQ0LCA0Mzk0NywgNDM5NTYsIDQzOTY3LCA0Mzk3NCwgNDM5NzYsIDQzOTgyLCAKLSAgICA0Mzk4NywgNDM5ODksIDQzOTkyLCA0Mzk5NiwgNDQwMDQsIDAsIDQ0MDEzLCAwLCA0NDAxOCwgNDQwMjUsIDQ0MDMzLCAKLSAgICA0NDA0MCwgMCwgMCwgMCwgNDQwNDgsIDAsIDQ0MDU2LCA0NDA1OSwgNDQwNjMsIDQ0MDY2LCA0NDA3NywgNDQwODcsIAotICAgIDQ0MDk3LCAwLCAwLCA0NDEwNiwgNDQxMTUsIDQ0MTIxLCA0NDEyOSwgNDQxMzMsIDQ0MTQxLCA0NDE0NSwgNDQxNTMsIAotICAgIDQ0MTYwLCA0NDE2NywgNDQxNzYsIDQ0MTg1LCA0NDE5NSwgNDQyMDUsIDQ0MjE1LCA0NDIyNSwgNDQyMzQsIDQ0MjQzLCAKLSAgICA0NDI1MywgNDQyNjMsIDQ0MjcyLCA0NDI4MSwgNDQyODgsIDQ0Mjk1LCA0NDMwMiwgNDQzMDksIDQ0MzE2LCA0NDMyMywgCi0gICAgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTIsIDQ0MzU4LCA0NDM2NCwgNDQzNzAsIDQ0Mzc2LCA0NDM4MiwgNDQzODgsIAotICAgIDQ0Mzk0LCA0NDQwMCwgNDQ0MDYsIDQ0NDEzLCA0NDQyMSwgNDQ0MjksIDQ0NDM3LCA0NDQ0NSwgNDQ0NTMsIDQ0NDYxLCAKLSAgICA0NDQ2OSwgNDQ0NzcsIDQ0NDg1LCA0NDQ5NCwgMCwgMCwgMCwgNDQ0OTksIDQ0NTA1LCA0NDUwOCwgNDQ1MTQsIDQ0NTIwLCAKLSAgICA0NDUyNSwgNDQ1MjksIDQ0NTM0LCA0NDU0MCwgNDQ1NDcsIDQ0NTUwLCA0NDU1NywgNDQ1NjQsIDQ0NTY4LCA0NDU3NywgCi0gICAgNDQ1ODYsIDQ0NTkxLCA0NDU5NywgNDQ2MDIsIDQ0NjA3LCA0NDYxNCwgNDQ2MjEsIDQ0NjI4LCA0NDYzNiwgMCwgNDQ2NDQsIAotICAgIDQ0NjUzLCA0NDY1OCwgNDQ2NjIsIDQ0NjY5LCA0NDY3MywgNDQ2ODAsIDQ0Njg4LCA0NDY5MywgNDQ3MDEsIDQ0NzA1LCAKLSAgICA0NDcxMCwgNDQ3MTQsIDQ0NzE5LCAwLCA0NDcyMywgNDQ3MjgsIDQ0NzM3LCA0NDczOSwgNDQ3NDMsIDQ0NzQ3LCA0NDc1NCwgCi0gICAgNDQ3NjEsIDQ0NzY2LCA0NDc3NCwgNDQ3ODAsIDAsIDQ0Nzg2LCAwLCAwLCAwLCA0NDc4OSwgNDQ3OTcsIDQ0ODAxLCAKLSAgICA0NDgwOCwgNDQ4MTUsIDQ0ODIzLCA0NDgyOCwgNDQ4MzMsIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ0ODU1LCA0NDg2MCwgCi0gICAgNDQ4NjMsIDQ0ODY3LCA0NDg3MSwgNDQ4NzgsIDQ0ODg3LCA0NDg5MiwgNDQ5MDEsIDQ0OTEwLCA0NDkxNiwgNDQ5MjIsIAotICAgIDQ0OTI3LCA0NDkzMiwgNDQ5MzcsIDQ0OTQyLCA0NDk0OCwgNDQ5NTQsIDQ0OTYyLCA0NDk3MCwgNDQ5NzYsIDQ0OTgyLCAKLSAgICA0NDk4NywgNDQ5OTIsIDQ0OTk5LCA0NTAwNiwgNDUwMTIsIDQ1MDE1LCA0NTAxOCwgNDUwMjIsIDQ1MDI2LCA0NTAzMCwgCi0gICAgNDUwMzUsIDQ1MDQxLCA0NTA0NywgNDUwNTQsIDQ1MDYxLCA0NTA2NiwgNDUwNzAsIDQ1MDc0LCA0NTA3OCwgNDUwODIsIAotICAgIDQ1MDg2LCA0NTA5MCwgNDUwOTQsIDQ1MDk4LCA0NTEwMiwgNDUxMDYsIDQ1MTEwLCA0NTExNCwgNDUxMTgsIDQ1MTIyLCAKLSAgICA0NTEyNiwgNDUxMzAsIDQ1MTM0LCA0NTEzOCwgNDUxNDIsIDQ1MTQ2LCA0NTE1MCwgNDUxNTQsIDQ1MTU4LCA0NTE2MiwgCi0gICAgNDUxNjYsIDQ1MTcwLCA0NTE3NCwgNDUxNzgsIDQ1MTgyLCA0NTE4NiwgNDUxOTAsIDQ1MTk0LCA0NTE5OCwgNDUyMDIsIAotICAgIDQ1MjA2LCA0NTIxMCwgNDUyMTQsIDQ1MjE4LCA0NTIyMiwgNDUyMjYsIDQ1MjMwLCA0NTIzNCwgNDUyMzgsIDQ1MjQyLCAKLSAgICA0NTI0NiwgNDUyNTAsIDQ1MjU0LCA0NTI1OCwgNDUyNjIsIDQ1MjY2LCA0NTI3MCwgNDUyNzQsIDQ1Mjc4LCA0NTI4MiwgCi0gICAgNDUyODYsIDQ1MjkwLCA0NTI5NCwgNDUyOTgsIDQ1MzAyLCA0NTMwNiwgNDUzMTAsIDQ1MzE0LCA0NTMxOCwgNDUzMjIsIAotICAgIDQ1MzI2LCA0NTMzMCwgNDUzMzQsIDQ1MzM4LCA0NTM0MiwgNDUzNDYsIDQ1MzUwLCA0NTM1NCwgNDUzNTgsIDQ1MzYyLCAKLSAgICA0NTM2NiwgNDUzNzAsIDQ1Mzc0LCA0NTM3OCwgNDUzODIsIDQ1Mzg2LCA0NTM5MCwgNDUzOTQsIDQ1Mzk4LCA0NTQwMiwgCi0gICAgNDU0MDYsIDQ1NDEwLCA0NTQxNCwgNDU0MTgsIDQ1NDIyLCA0NTQyNiwgNDU0MzAsIDQ1NDM0LCA0NTQzOCwgNDU0NDIsIAotICAgIDQ1NDQ2LCA0NTQ1MCwgNDU0NTQsIDQ1NDU4LCA0NTQ2MiwgNDU0NjYsIDQ1NDcwLCA0NTQ3NCwgNDU0NzgsIDQ1NDgyLCAKLSAgICA0NTQ4NiwgNDU0OTAsIDQ1NDk0LCA0NTQ5OCwgNDU1MDIsIDQ1NTA2LCA0NTUxMCwgNDU1MTQsIDQ1NTE4LCA0NTUyMiwgCi0gICAgNDU1MjYsIDQ1NTMwLCA0NTUzNCwgNDU1MzgsIDQ1NTQyLCA0NTU0NiwgNDU1NTAsIDQ1NTU0LCA0NTU1OCwgNDU1NjIsIAotICAgIDQ1NTY2LCA0NTU3MCwgNDU1NzQsIDQ1NTc4LCA0NTU4MiwgNDU1ODYsIDQ1NTkwLCA0NTU5NCwgNDU1OTgsIDQ1NjAyLCAKLSAgICA0NTYwNiwgNDU2MTAsIDQ1NjE0LCA0NTYxOCwgNDU2MjIsIDQ1NjI2LCA0NTYzMCwgNDU2MzQsIDQ1NjM4LCA0NTY0MiwgCi0gICAgNDU2NDYsIDQ1NjUwLCA0NTY1NCwgNDU2NTgsIDQ1NjYyLCA0NTY2NiwgNDU2NzAsIDQ1Njc0LCA0NTY3OCwgNDU2ODIsIAotICAgIDQ1Njg2LCA0NTY5MCwgNDU2OTQsIDQ1Njk4LCA0NTcwMiwgNDU3MDYsIDQ1NzEwLCA0NTcxNCwgNDU3MTgsIDQ1NzIyLCAKLSAgICA0NTcyNiwgNDU3MzAsIDQ1NzM0LCA0NTczOCwgNDU3NDIsIDQ1NzQ2LCA0NTc1MCwgNDU3NTQsIDQ1NzU4LCA0NTc2MiwgCi0gICAgNDU3NjYsIDQ1NzcwLCA0NTc3NCwgNDU3NzgsIDQ1NzgyLCA0NTc4NiwgNDU3OTAsIDQ1Nzk0LCA0NTc5OCwgNDU4MDIsIAotICAgIDQ1ODA2LCA0NTgxMCwgNDU4MTQsIDQ1ODE4LCA0NTgyMiwgNDU4MjYsIDQ1ODMwLCA0NTgzNCwgNDU4MzgsIDQ1ODQyLCAKLSAgICA0NTg0NiwgNDU4NTAsIDQ1ODU0LCA0NTg1OCwgNDU4NjIsIDQ1ODY2LCA0NTg3MCwgNDU4NzQsIDQ1ODc4LCA0NTg4MiwgCi0gICAgNDU4ODYsIDQ1ODkwLCA0NTg5NCwgNDU4OTgsIDQ1OTAyLCA0NTkwNiwgNDU5MTAsIDQ1OTE0LCA0NTkxOCwgNDU5MjIsIAotICAgIDQ1OTI2LCA0NTkzMCwgNDU5MzQsIDQ1OTM4LCA0NTk0MiwgNDU5NDYsIDQ1OTUwLCA0NTk1NCwgNDU5NTgsIDQ1OTYyLCAKLSAgICA0NTk2NiwgNDU5NzAsIDQ1OTc0LCA0NTk3OCwgNDU5ODIsIDQ1OTg2LCA0NTk5MCwgNDU5OTQsIDQ1OTk4LCA0NjAwMiwgCi0gICAgNDYwMDYsIDQ2MDEwLCA0NjAxNCwgNDYwMTgsIDQ2MDIyLCA0NjAyNiwgNDYwMzAsIDQ2MDM0LCA0NjAzOCwgNDYwNDIsIAotICAgIDQ2MDQ2LCA0NjA1MCwgNDYwNTQsIDQ2MDU4LCA0NjA2MiwgNDYwNjYsIDQ2MDcwLCA0NjA3NCwgNDYwNzgsIDQ2MDgyLCAKLSAgICA0NjA4NiwgNDYwOTAsIDQ2MDk3LCA0NjEwNSwgNDYxMTEsIDQ2MTE3LCA0NjEyNCwgNDYxMzEsIDQ2MTM3LCA0NjE0MywgCi0gICAgNDYxNDksIDQ2MTU1LCA0NjE2MCwgNDYxNjUsIDQ2MTcwLCA0NjE3NSwgNDYxODEsIDQ2MTg3LCA0NjE5NSwgNDYyMDIsIAotICAgIDQ2MjA3LCA0NjIxMiwgNDYyMjAsIDQ2MjI5LCA0NjIzNiwgNDYyNDYsIDQ2MjU3LCA0NjI2MCwgNDYyNjMsIDQ2MjY3LCAKLSAgICA0NjI3MSwgNDYyNzcsIDQ2MjgzLCA0NjI5MywgNDYzMDMsIDQ2MzEzLCA0NjMyMywgNDYzMzAsIDQ2MzM3LCA0NjM0NCwgCi0gICAgNDYzNTEsIDQ2MzYyLCA0NjM3MywgNDYzODQsIDQ2Mzk1LCA0NjQwNSwgNDY0MTUsIDQ2NDI3LCA0NjQzOSwgNDY0NTAsIAotICAgIDQ2NDYxLCA0NjQ3MywgNDY0ODUsIDQ2NDk0LCA0NjUwNCwgNDY1MTQsIDQ2NTI1LCA0NjUzNiwgNDY1NDMsIDQ2NTUwLCAKLSAgICA0NjU1NywgNDY1NjQsIDQ2NTc0LCA0NjU4NCwgNDY1OTEsIDQ2NTk4LCA0NjYwNSwgNDY2MTIsIDQ2NjE5LCA0NjYyNiwgCi0gICAgNDY2MzMsIDQ2NjM4LCA0NjY0MywgNDY2NDksIDQ2NjU3LCA0NjY2NywgNDY2NzUsIDQ2NjgzLCA0NjY5MSwgNDY2OTksIAotICAgIDQ2NzA3LCA0NjcxNSwgNDY3MjMsIDQ2NzMxLCA0NjczOSwgNDY3NDcsIDQ2NzU2LCA0Njc2NSwgNDY3NzMsIDQ2NzgxLCAKLSAgICA0Njc5MCwgNDY3OTksIDQ2ODA4LCA0NjgxNywgNDY4MjcsIDQ2ODM3LCA0Njg0NiwgNDY4NTUsIDQ2ODY1LCA0Njg3NSwgCi0gICAgNDY4ODksIDQ2OTA2LCA0NjkyMCwgNDY5MzcsIDQ2OTUxLCA0Njk2NSwgNDY5NzksIDQ2OTkzLCA0NzAwMywgNDcwMTQsIAotICAgIDQ3MDI0LCA0NzAzNSwgNDcwNTIsIDQ3MDY5LCA0NzA3NywgNDcwODMsIDQ3MDkwLCA0NzA5NywgNDcxMDQsIDQ3MTExLCAKLSAgICA0NzExNiwgNDcxMjIsIDQ3MTI3LCA0NzEzMiwgNDcxMzgsIDQ3MTQzLCA0NzE0OCwgNDcxNTMsIDQ3MTU4LCA0NzE2MywgCi0gICAgNDcxNzAsIDQ3MTc1LCA0NzE4MiwgNDcxODcsIDQ3MTkyLCA0NzE5NiwgNDcyMDAsIDQ3MjA3LCA0NzIxNCwgNDcyMjEsIAotICAgIDQ3MjI4LCA0NzIzNSwgNDcyNDIsIDQ3MjU1LCA0NzI2OCwgNDcyODEsIDQ3Mjk0LCA0NzMwMiwgNDczMTAsIDQ3MzE2LCAKLSAgICA0NzMyMiwgNDczMjksIDQ3MzM2LCA0NzM0MywgNDczNTAsIDQ3MzU0LCA0NzM1OSwgNDczNjcsIDQ3Mzc1LCA0NzM4MywgCi0gICAgNDczOTAsIDQ3Mzk0LCA0NzQwMiwgNDc0MTAsIDQ3NDEzLCA0NzQxNiwgNDc0MjEsIDQ3NDI3LCA0NzQzNSwgNDc0NDMsIAotICAgIDQ3NDYzLCA0NzQ4MywgNDc1MDMsIDQ3NTIzLCA0NzU0MywgNDc1NjMsIDQ3NTgzLCA0NzYwMywgNDc2MDgsIDQ3NjE1LCAKLSAgICA0NzYyNCwgNDc2MzIsIDQ3NjQwLCA0NzY0NSwgNDc2NDgsIDQ3NjUxLCA0NzY1NiwgNDc2NTksIDQ3Njc4LCA0NzY4NSwgCi0gICAgNDc2OTEsIDQ3Njk3LCA0NzcwMSwgNDc3MDQsIDQ3NzA3LCA0NzcxMCwgNDc3MjEsIDQ3NzMzLCA0Nzc0MSwgNDc3NDksIAotICAgIDQ3NzUzLCA0Nzc1OCwgNDc3NjIsIDQ3NzY3LCA0Nzc3MiwgNDc3NzcsIDQ3NzgzLCA0Nzc5MiwgNDc3OTksIDQ3ODA2LCAKLSAgICA0NzgxNCwgNDc4MjEsIDQ3ODI4LCA0NzgzMSwgNDc4MzcsIDQ3ODQzLCA0Nzg0NiwgNDc4NDksIDQ3ODU0LCA0Nzg1OSwgCi0gICAgNDc4NjUsIDQ3ODcxLCA0Nzg3NSwgNDc4ODAsIDQ3ODg3LCA0Nzg5MSwgNDc4OTcsIDQ3OTAxLCA0NzkwNSwgNDc5MTMsIAotICAgIDQ3OTI1LCA0NzkzMywgNDc5MzcsIDQ3OTM5LCA0Nzk0OCwgNDc5NTcsIDQ3OTYzLCA0Nzk2NiwgNDc5NzIsIDQ3OTc4LCAKLSAgICA0Nzk4MywgNDc5ODgsIDQ3OTkzLCA0Nzk5OCwgNDgwMDMsIDQ4MDA4LCA0ODAxMCwgNDgwMTYsIDQ4MDIxLCA0ODAyOCwgCi0gICAgNDgwMzIsIDQ4MDM4LCA0ODA0MSwgNDgwNDUsIDQ4MDUyLCA0ODA1OSwgNDgwNjEsIDQ4MDYzLCA0ODA2OSwgNDgwNzUsIAotICAgIDQ4MDgxLCA0ODA5MCwgNDgwOTksIDQ4MTA2LCA0ODExMywgNDgxMTksIDQ4MTI1LCA0ODEzMCwgNDgxMzUsIDQ4MTQwLCAKLSAgICA0ODE0NiwgNDgxNTIsIDQ4MTU3LCA0ODE2NCwgNDgxNjgsIDQ4MTcyLCA0ODE4NSwgNDgxOTgsIDQ4MjA5LCA0ODIxOCwgCi0gICAgNDgyMjQsIDQ4MjMxLCA0ODIzNiwgNDgyNDEsIDQ4MjQ2LCA0ODI1MSwgNDgyNTYsIDQ4MjU4LCA0ODI2NSwgNDgyNzIsIAotICAgIDQ4Mjc5LCA0ODI4NiwgNDgyOTMsIDQ4MzAxLCA0ODMwNywgNDgzMTIsIDQ4MzE4LCA0ODMyNCwgNDgzMzAsIDQ4MzM3LCAKLSAgICA0ODM0MywgNDgzNTEsIDQ4MzU5LCA0ODM2NywgNDgzNzUsIDQ4MzgyLCA0ODM4OCwgNDgzOTQsIDQ4NDAzLCA0ODQwNywgCi0gICAgNDg0MTYsIDQ4NDI1LCA0ODQzNCwgNDg0NDIsIDQ4NDQ2LCA0ODQ1MiwgNDg0NTksIDQ4NDY2LCA0ODQ3MCwgNDg0NzYsIAotICAgIDQ4NDgzLCA0ODQ4OCwgNDg0OTMsIDQ4NDk5LCA0ODUwNCwgNDg1MDksIDQ4NTE2LCA0ODUyMywgNDg1MjgsIDQ4NTMzLCAKLSAgICA0ODU0MSwgNDg1NDksIDQ4NTU5LCA0ODU2OSwgNDg1NzYsIDQ4NTgzLCA0ODU4NywgNDg1OTEsIDQ4NjAzLCA0ODYwOSwgCi0gICAgNDg2MTUsIDQ4NjIwLCA0ODYyNSwgNDg2MzIsIDQ4NjM5LCA0ODY0NSwgNDg2NTEsIDQ4NjYwLCA0ODY2OCwgNDg2NzYsIAotICAgIDQ4NjgzLCA0ODY5MCwgNDg2OTcsIDQ4NzAzLCA0ODcxMCwgNDg3MTYsIDQ4NzIzLCA0ODczMCwgNDg3MzcsIDQ4NzQ0LCAKLSAgICA0ODc1MCwgNDg3NTUsIDQ4NzY0LCA0ODc3NCwgNDg3ODEsIDQ4NzkwLCA0ODc5NiwgNDg4MDEsIDQ4ODA2LCA0ODgxNSwgCi0gICAgNDg4MjEsIDQ4ODI3LCA0ODgzMywgNDg4NDEsIDQ4ODQ2LCA0ODg1MywgNDg4NjAsIDQ4ODcxLCA0ODg3OCwgNDg4ODUsIAotICAgIDQ4ODkyLCA0ODg5OSwgNDg5MDYsIDQ4OTEzLCA0ODkyMCwgNDg5MzEsIDQ4OTQyLCA0ODk1MiwgNDg5NjIsIDQ4OTc0LCAKLSAgICA0ODk4NiwgNDg5OTEsIDQ4OTk2LCA0OTAwNCwgNDkwMTIsIDQ5MDE4LCA0OTAyNCwgNDkwMzMsIDQ5MDQyLCA0OTA1MCwgCi0gICAgNDkwNTgsIDQ5MDY2LCA0OTA3NCwgNDkwODQsIDQ5MDk0LCA0OTEwOCwgNDkxMjIsIDQ5MTI5LCA0OTEzNiwgNDkxNDcsIAotICAgIDQ5MTU4LCA0OTE2NSwgNDkxNzIsIDQ5MTgxLCA0OTE5MCwgNDkxOTUsIDQ5MjAwLCA0OTIwOSwgNDkyMTgsIDQ5MjIzLCAKLSAgICA0OTIyOCwgNDkyMzYsIDQ5MjQyLCA0OTI0OCwgNDkyNTYsIDQ5MjY0LCA0OTI3NywgNDkyOTAsIDQ5Mjk0LCA0OTI5OCwgCi0gICAgNDkzMDUsIDQ5MzEyLCA0OTMxOSwgNDkzMjcsIDQ5MzM1LCA0OTM0MywgNDkzNTEsIDQ5MzU3LCA0OTM2MywgNDkzNjksIAotICAgIDQ5Mzc1LCA0OTM4MiwgNDkzODksIDQ5Mzk3LCA0OTQwNSwgNDk0MDgsIDQ5NDExLCA0OTQxNiwgNDk0MjEsIDQ5NDI3LCAKLSAgICA0OTQzMywgNDk0NDAsIDQ5NDQ3LCA0OTQ1NiwgNDk0NjUsIDQ5NDcyLCA0OTQ3OSwgNDk0ODcsIDQ5NDk1LCA0OTUwMywgCi0gICAgNDk1MTEsIDQ5NTE4LCA0OTUyNSwgNDk1MzIsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTU0LCA0OTU2MSwgNDk1NjYsIAotICAgIDQ5NTcxLCA0OTU3NiwgNDk1ODEsIDQ5NTg3LCA0OTYwMSwgNDk2MDgsIDQ5NjE1LCA0OTYxOSwgNDk2MjEsIDQ5NjIzLCAKLSAgICA0OTYyOCwgNDk2MzMsIDQ5NjM4LCA0OTY0MiwgNDk2NTAsIDQ5NjU3LCA0OTY2NCwgNDk2NzIsIDQ5Njg0LCA0OTY5MiwgCi0gICAgNDk3MDAsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCA0OTcyOCwgNDk3MzksIDQ5NzQ2LCA0OTc1MywgNDk3NjAsIAotICAgIDQ5NzY1LCA0OTc3MiwgNDk3ODEsIDQ5Nzg5LCA0OTc5NSwgNDk4MDEsIDQ5ODA3LCA0OTgxNiwgNDk4MjUsIDQ5ODMzLCAKLSAgICA0OTg0MiwgNDk4NDcsIDQ5ODUwLCA0OTg1NSwgNDk4NjEsIDQ5ODY3LCA0OTg3MywgNDk4NzksIDQ5ODgzLCA0OTg4NiwgCi0gICAgNDk4OTAsIDQ5ODk0LCA0OTkwMCwgNDk5MDYsIDQ5OTEyLCA0OTkxOCwgNDk5MjIsIDQ5OTI2LCA0OTkzMywgNDk5NDAsIAotICAgIDQ5OTQ3LCA0OTk1NCwgNDk5NjEsIDQ5OTY4LCA0OTk3OCwgNDk5ODcsIDQ5OTk0LCA1MDAwMSwgNTAwMDksIDUwMDE3LCAKLSAgICA1MDAyMSwgNTAwMjYsIDUwMDMxLCA1MDAzNywgNTAwNDMsIDUwMDQ2LCA1MDA0OSwgNTAwNTIsIDUwMDU1LCA1MDA1OSwgCi0gICAgNTAwNjQsIDUwMDY5LCA1MDA3NCwgNTAwNzksIDUwMDg0LCA1MDA4OCwgNTAwOTIsIDUwMDk2LCA1MDEwMCwgNTAxMDQsIAotICAgIDUwMTA4LCA1MDExMiwgNTAxMTgsIDUwMTIyLCA1MDEyOCwgNTAxMzMsIDUwMTQwLCA1MDE0OCwgNTAxNTUsIDUwMTYzLCAKLSAgICA1MDE3MCwgNTAxNzgsIDUwMTg3LCA1MDE5NCwgNTAyMDQsIDUwMjE1LCA1MDIyMSwgNTAyMzAsIDUwMjM2LCA1MDI0NSwgCi0gICAgNTAyNTQsIDUwMjYwLCA1MDI2NiwgNTAyNzAsIDUwMjc0LCA1MDI4MywgNTAyOTIsIDUwMjk5LCA1MDMwNiwgNTAzMTUsIDAsIAotICAgIDAsIDAsIDUwMzI0LCA1MDMyOSwgNTAzMzMsIDUwMzM3LCA1MDM0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAzNDcsIDUwMzUyLCA1MDM1NywgNTAzNjIsIDUwMzY3LCA1MDM3MiwgNTAzNzcsIAotICAgIDUwMzgyLCA1MDM4NywgNTAzOTIsIDUwMzk3LCA1MDQwMywgNTA0MDcsIDUwNDEyLCA1MDQxNywgNTA0MjIsIDUwNDI3LCAKLSAgICA1MDQzMiwgNTA0MzcsIDUwNDQyLCA1MDQ0NywgNTA0NTIsIDUwNDU3LCA1MDQ2MiwgNTA0NjcsIDUwNDcyLCA1MDQ3NywgCi0gICAgNTA0ODIsIDUwNDg3LCA1MDQ5MiwgNTA0OTcsIDUwNTAyLCA1MDUwNywgNTA1MTIsIDUwNTE3LCA1MDUyMywgNTA1MjgsIAotICAgIDUwNTM0LCA1MDU0MywgNTA1NDgsIDUwNTU2LCA1MDU2MywgNTA1NzIsIDUwNTc3LCA1MDU4MiwgNTA1ODcsIDUwNTkzLCAwLCAKLSAgICA1MDYwMCwgNTA2MDUsIDUwNjEwLCA1MDYxNSwgNTA2MjAsIDUwNjI1LCA1MDYzMCwgNTA2MzUsIDUwNjQwLCA1MDY0NSwgCi0gICAgNTA2NTAsIDUwNjU2LCA1MDY2MCwgNTA2NjUsIDUwNjcwLCA1MDY3NSwgNTA2ODAsIDUwNjg1LCA1MDY5MCwgNTA2OTUsIAotICAgIDUwNzAwLCA1MDcwNSwgNTA3MTAsIDUwNzE1LCA1MDcyMCwgNTA3MjUsIDUwNzMwLCA1MDczNSwgNTA3NDAsIDUwNzQ1LCAKLSAgICA1MDc1MCwgNTA3NTUsIDUwNzYwLCA1MDc2NSwgNTA3NzAsIDUwNzc2LCA1MDc4MSwgNTA3ODcsIDUwNzk2LCA1MDgwMSwgCi0gICAgNTA4MDksIDUwODE2LCA1MDgyNSwgNTA4MzAsIDUwODM1LCA1MDg0MCwgNTA4NDYsIDAsIDUwODUzLCA1MDg2MSwgNTA4NjksIAotICAgIDUwODc4LCA1MDg4NSwgNTA4OTMsIDUwODk5LCA1MDkwOCwgNTA5MTYsIDUwOTI0LCA1MDkzMiwgNTA5NDAsIDUwOTQ4LCAKLSAgICA1MDk1NiwgNTA5NjEsIDUwOTY4LCAwLCA1MDk3MywgNTA5ODEsIDUwOTg4LCA1MDk5NSwgNTEwMDMsIDUxMDA4LCA1MTAxMywgCi0gICAgNTEwMjAsIDUxMDI3LCA1MTAzNiwgNTEwNDYsIDUxMDUyLCA1MTA1OSwgMCwgMCwgNTEwNjMsIDUxMDY4LCA1MTA3MywgCi0gICAgNTEwNzgsIDUxMDgzLCA1MTA4OCwgNTEwOTMsIDUxMDk4LCA1MTEwMywgNTExMDgsIDUxMTEzLCA1MTExOCwgNTExMjMsIAotICAgIDUxMTI4LCA1MTEzMywgNTExMzgsIDUxMTQzLCA1MTE0OCwgNTExNTMsIDUxMTU4LCA1MTE2MywgNTExNjgsIDUxMTczLCAKLSAgICA1MTE3OCwgNTExODMsIDUxMTg4LCA1MTE5MywgNTExOTgsIDUxMjAzLCA1MTIwOCwgNTEyMTMsIDUxMjE3LCA1MTIyMSwgCi0gICAgNTEyMjYsIDUxMjMxLCA1MTIzNiwgNTEyNDEsIDUxMjQ2LCA1MTI1MSwgNTEyNTYsIDUxMjYxLCA1MTI2NiwgNTEyNzEsIAotICAgIDUxMjc2LCA1MTI4MSwgNTEyODYsIDUxMjkxLCA1MTI5NiwgNTEzMDEsIDUxMzA2LCA1MTMxMSwgNTEzMTgsIDUxMzI1LCAKLSAgICA1MTMzMiwgNTEzMzksIDUxMzQ2LCA1MTM1MywgNTEzNjAsIDUxMzY3LCA1MTM3NCwgNTEzODEsIDUxMzg4LCA1MTM5NSwgCi0gICAgNTE0MDIsIDUxNDA5LCA1MTQxNCwgNTE0MTksIDUxNDI2LCA1MTQzMywgNTE0NDAsIDUxNDQ3LCA1MTQ1NCwgNTE0NjEsIAotICAgIDUxNDY4LCA1MTQ3NSwgNTE0ODIsIDUxNDg5LCA1MTQ5NiwgNTE1MDMsIDUxNTA5LCA1MTUxNSwgNTE1MjEsIDUxNTI3LCAKLSAgICA1MTUzNCwgNTE1NDEsIDUxNTQ4LCA1MTU1NSwgNTE1NjIsIDUxNTY5LCA1MTU3NiwgNTE1ODMsIDUxNTkwLCA1MTU5NywgCi0gICAgNTE2MDUsIDUxNjEzLCA1MTYyMSwgNTE2MjksIDUxNjM3LCA1MTY0NSwgNTE2NTMsIDUxNjYxLCA1MTY2NSwgNTE2NzEsIAotICAgIDUxNjc3LCA1MTY4MSwgNTE2ODcsIDUxNjkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MTY5OSwgNTE3MDcsIDUxNzE2LCA1MTcyNSwgNTE3MzMsIDUxNzM5LCA1MTc0NCwgNTE3NDksIDUxNzU0LCA1MTc1OSwgCi0gICAgNTE3NjQsIDUxNzY5LCA1MTc3NCwgNTE3NzksIDUxNzg0LCA1MTc4OSwgNTE3OTQsIDUxNzk5LCA1MTgwNCwgNTE4MDksIAotICAgIDUxODE0LCA1MTgxOSwgNTE4MjQsIDUxODI5LCA1MTgzNCwgNTE4MzksIDUxODQ0LCA1MTg0OSwgNTE4NTQsIDUxODU5LCAKLSAgICA1MTg2NCwgNTE4NjksIDUxODc0LCA1MTg3OSwgNTE4ODQsIDUxODg5LCA1MTg5NCwgNTE4OTksIDUxOTA0LCA1MTkwOSwgCi0gICAgNTE5MTQsIDUxOTE5LCA1MTkyNCwgNTE5MjksIDUxOTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTkzOSwgCi0gICAgNTE5NDIsIDUxOTQ2LCA1MTk1MCwgNTE5NTQsIDUxOTU4LCA1MTk2NiwgNTE5NzAsIDUxOTc0LCA1MTk3OCwgNTE5ODIsIAotICAgIDUxOTg2LCA1MTk5MCwgNTE5OTQsIDUxOTk4LCA1MjAwNCwgNTIwMDgsIDUyMDEyLCA1MjAyMCwgNTIwMjYsIDUyMDMwLCAKLSAgICA1MjAzNCwgNTIwMzgsIDUyMDQ0LCA1MjA0OCwgNTIwNTQsIDUyMDU4LCA1MjA2MiwgNTIwNjgsIDUyMDc0LCA1MjA3OCwgCi0gICAgNTIwODIsIDUyMDg2LCA1MjA5MiwgNTIwOTgsIDUyMTAyLCA1MjEwNiwgNTIxMTAsIDUyMTE0LCA1MjExOCwgNTIxMjQsIAotICAgIDUyMTMwLCA1MjEzNCwgNTIxMzgsIDUyMTQyLCA1MjE0NiwgNTIxNTAsIDUyMTU0LCA1MjE1OCwgNTIxNjIsIDUyMTY2LCAKLSAgICA1MjE3MCwgNTIxNzQsIDUyMTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjE4NCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxOTAsIDUyMTk0LCA1MjE5OCwgNTIyMDIsIDUyMjA2LCA1MjIxMCwgCi0gICAgNTIyMTQsIDUyMjE4LCA1MjIyMiwgNTIyMjYsIDUyMjMwLCA1MjIzNiwgNTIyNDAsIDUyMjQ0LCA1MjI0OCwgNTIyNTIsIAotICAgIDUyMjU2LCA1MjI2MCwgNTIyNjQsIDUyMjY4LCA1MjI3MiwgNTIyNzYsIDUyMjgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA1MjI4NCwgNTIyODgsIDUyMjkyLCA1MjI5NiwgNTIzMDAsIDUyMzA0LCA1MjMwOCwgMCwgNTIzMTIsIDUyMzE2LCAKLSAgICA1MjMyMCwgNTIzMjQsIDUyMzI4LCA1MjMzMiwgNTIzMzYsIDAsIDUyMzQwLCA1MjM0NCwgNTIzNDgsIDUyMzUyLCA1MjM1NiwgCi0gICAgNTIzNjAsIDUyMzY0LCAwLCA1MjM2OCwgNTIzNzIsIDUyMzc2LCA1MjM4MCwgNTIzODQsIDUyMzg4LCA1MjM5MiwgMCwgCi0gICAgNTIzOTYsIDUyNDAwLCA1MjQwNCwgNTI0MDgsIDUyNDEyLCA1MjQxNiwgNTI0MjAsIDAsIDUyNDI0LCA1MjQyOCwgNTI0MzIsIAotICAgIDUyNDM2LCA1MjQ0MCwgNTI0NDQsIDUyNDQ4LCAwLCA1MjQ1MiwgNTI0NTYsIDUyNDYwLCA1MjQ2NCwgNTI0NjgsIDUyNDcyLCAKLSAgICA1MjQ3NiwgMCwgNTI0ODAsIDUyNDg0LCA1MjQ4OCwgNTI0OTIsIDUyNDk2LCA1MjUwMCwgNTI1MDQsIDAsIDUyNTA4LCAKLSAgICA1MjUxMywgNTI1MTgsIDUyNTIzLCA1MjUyOCwgNTI1MzMsIDUyNTM4LCA1MjU0MiwgNTI1NDcsIDUyNTUyLCA1MjU1NywgCi0gICAgNTI1NjEsIDUyNTY2LCA1MjU3MSwgNTI1NzYsIDUyNTgxLCA1MjU4NSwgNTI1OTAsIDUyNTk1LCA1MjYwMCwgNTI2MDUsIAotICAgIDUyNjEwLCA1MjYxNSwgNTI2MTksIDUyNjI0LCA1MjYyOSwgNTI2MzYsIDUyNjQxLCA1MjY0NiwgNTI2NTIsIDUyNjU5LCAKLSAgICA1MjY2NiwgNTI2NzUsIDUyNjgyLCA1MjY5MSwgNTI2OTUsIDUyNjk5LCA1MjcwNSwgNTI3MTEsIDUyNzE3LCA1MjcyNSwgCi0gICAgNTI3MzEsIDUyNzM1LCA1MjczOSwgNTI3NDMsIDUyNzQ5LCA1Mjc1NSwgNTI3NTksIDUyNzYxLCA1Mjc2NSwgNTI3NzAsIAotICAgIDUyNzcyLCA1Mjc3NiwgNTI3ODAsIDUyNzg0LCA1Mjc5MCwgNTI3OTUsIDUyNzk5LCA1MjgwMywgNTI4MDcsIDUyODEzLCAKLSAgICA1MjgxOCwgNTI4MjMsIDUyODI4LCA1MjgzMywgNTI4NDAsIDUyODQ3LCA1Mjg1MiwgNTI4NTcsIDUyODYyLCA1Mjg2NywgCi0gICAgNTI4NzIsIDUyODc3LCA1Mjg4MSwgNTI4ODUsIDUyODkyLCA1Mjg5OSwgNTI5MDYsIDUyOTEwLCA1MjkxNCwgNTI5MTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNDkxLCA2MTQ5OSwgCisgICAgNjE1MDcsIDYxNTE3LCA2MTUyMywgNjE1MjcsIDYxNTMxLCA2MTUzNywgNjE1NDMsIDYxNTQ4LCA2MTU1MiwgNjE1NTYsIAorICAgIDYxNTYwLCA2MTU2NCwgNjE1NzAsIDYxNTc0LCA2MTU3OCwgNjE1ODIsIDYxNTkyLCA2MTU5NiwgNjE2MDAsIDYxNjA2LCAKKyAgICA2MTYxMCwgNjE2MTYsIDYxNjIwLCA2MTYyNCwgNjE2MzAsIDYxNjM2LCA2MTY0MiwgNjE2NTAsIDYxNjU4LCA2MTY2MiwgCisgICAgNjE2NjYsIDYxNjcwLCA2MTY3NiwgNjE2ODAsIDYxNjg5LCA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIAorICAgIDYxNzE1LCA2MTcxOSwgNjE3MjYsIDYxNzMyLCA2MTczOCwgNjE3NDIsIDYxNzQ4LCA2MTc1MiwgNjE3NTgsIDYxNzY2LCAKKyAgICA2MTc3NiwgNjE3ODAsIDYxNzg4LCA2MTc5MiwgNjE3OTgsIDYxODA2LCA2MTgxNCwgNjE4MTgsIDYxODIyLCA2MTgyOCwgCisgICAgNjE4MzMsIDYxODM5LCA2MTg0NSwgNjE4NDksIDYxODUzLCA2MTg1NiwgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIAorICAgIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg3LCA2MTg5MSwgNjE4OTUsIDYxODk5LCA2MTkwMywgNjE5MDcsIDYxOTExLCAKKyAgICA2MTkxNCwgNjE5MTgsIDYxOTIyLCA2MTkyNSwgNjE5MjksIDYxOTMzLCA2MTkzNywgNjE5NDEsIDYxOTQ1LCA2MTk0OSwgCisgICAgNjE5NTMsIDYxOTU3LCA2MTk2MSwgNjE5NjUsIDYxOTY5LCA2MTk3MywgNjE5NzcsIDYxOTgxLCA2MTk4NSwgNjE5ODksIAorICAgIDYxOTkzLCA2MTk5NywgNjIwMDEsIDYyMDA1LCA2MjAwOSwgNjIwMTMsIDYyMDE3LCA2MjAyMSwgNjIwMjUsIDYyMDI5LCAKKyAgICA2MjAzMywgNjIwMzcsIDYyMDQxLCA2MjA0NSwgNjIwNDksIDYyMDUzLCA2MjA1NywgNjIwNjEsIDYyMDY1LCA2MjA2OSwgCisgICAgNjIwNzMsIDYyMDc3LCA2MjA4MSwgNjIwODUsIDYyMDg5LCA2MjA5MywgNjIwOTcsIDYyMTAxLCA2MjEwNCwgNjIxMDgsIAorICAgIDYyMTEyLCA2MjExNiwgNjIxMjAsIDYyMTI0LCA2MjEyOCwgNjIxMzIsIDYyMTM2LCA2MjE0MCwgNjIxNDQsIDYyMTQ4LCAKKyAgICA2MjE1MiwgNjIxNTYsIDYyMTYwLCA2MjE2NCwgNjIxNjgsIDYyMTcyLCA2MjE3NiwgNjIxODAsIDYyMTg0LCA2MjE4OCwgCisgICAgNjIxOTIsIDYyMTk2LCA2MjIwMCwgNjIyMDQsIDYyMjA4LCA2MjIxMiwgNjIyMTYsIDYyMjIwLCA2MjIyNCwgNjIyMjgsIAorICAgIDYyMjMyLCA2MjIzNiwgNjIyNDAsIDYyMjQ0LCA2MjI0OCwgNjIyNTIsIDYyMjU2LCA2MjI2MCwgNjIyNjQsIDYyMjY4LCAKKyAgICA2MjI3MiwgNjIyNzYsIDYyMjgwLCA2MjI4NCwgNjIyODgsIDYyMjkyLCA2MjI5NiwgNjIzMDAsIDYyMzA0LCA2MjMwOCwgCisgICAgNjIzMTIsIDYyMzE2LCA2MjMyMCwgNjIzMjQsIDYyMzI4LCA2MjMzMiwgNjIzMzYsIDYyMzQwLCA2MjM0NCwgNjIzNDgsIAorICAgIDYyMzUyLCA2MjM1NiwgNjIzNjAsIDYyMzY0LCA2MjM2OCwgNjIzNzIsIDYyMzc2LCA2MjM4MCwgNjIzODQsIDYyMzg4LCAKKyAgICA2MjM5MiwgNjIzOTYsIDYyNDAwLCA2MjQwNCwgNjI0MDgsIDYyNDEyLCA2MjQxNiwgNjI0MjAsIDYyNDI0LCA2MjQyOCwgCisgICAgNjI0MzIsIDYyNDM2LCA2MjQ0MCwgNjI0NDQsIDYyNDQ4LCA2MjQ1MiwgNjI0NTYsIDYyNDYwLCA2MjQ2NCwgNjI0NjgsIAorICAgIDYyNDcyLCA2MjQ3NiwgNjI0ODAsIDYyNDg0LCA2MjQ4OCwgNjI0OTIsIDYyNDk2LCA2MjUwMCwgNjI1MDQsIDYyNTA4LCAKKyAgICA2MjUxMiwgNjI1MTYsIDYyNTIwLCA2MjUyNCwgNjI1MjgsIDYyNTMyLCA2MjUzNiwgNjI1NDAsIDYyNTQ0LCA2MjU0OCwgCisgICAgNjI1NTIsIDYyNTU2LCA2MjU2MCwgNjI1NjQsIDYyNTY4LCA2MjU3MiwgNjI1NzUsIDYyNTc5LCA2MjU4MywgNjI1ODcsIAorICAgIDYyNTkxLCA2MjU5NSwgNjI1OTksIDYyNjAzLCA2MjYwNywgNjI2MTEsIDYyNjE1LCA2MjYxOSwgNjI2MjMsIDYyNjI3LCAKKyAgICA2MjYzMSwgNjI2MzUsIDYyNjM5LCA2MjY0MywgNjI2NDcsIDYyNjUxLCA2MjY1NSwgNjI2NTksIDYyNjYzLCA2MjY2NywgCisgICAgNjI2NzEsIDYyNjc1LCA2MjY3OSwgNjI2ODMsIDYyNjg3LCA2MjY5MSwgNjI2OTUsIDYyNjk5LCA2MjcwMywgNjI3MDcsIAorICAgIDYyNzExLCA2MjcxNSwgNjI3MTksIDYyNzIzLCA2MjcyNywgNjI3MzEsIDYyNzM1LCA2MjczOSwgNjI3NDMsIDYyNzQ3LCAKKyAgICA2Mjc1MSwgNjI3NTUsIDYyNzU5LCA2Mjc2MywgNjI3NjcsIDYyNzcxLCA2Mjc3NSwgNjI3NzksIDYyNzgzLCA2Mjc4NywgCisgICAgNjI3OTEsIDYyNzk1LCA2Mjc5OSwgNjI4MDMsIDYyODA3LCA2MjgxMSwgNjI4MTUsIDYyODE5LCA2MjgyMywgNjI4MjcsIAorICAgIDYyODMxLCA2MjgzNSwgNjI4MzksIDYyODQzLCA2Mjg0NywgNjI4NTEsIDYyODU1LCA2Mjg1OSwgNjI4NjMsIDYyODY3LCAKKyAgICA2Mjg3MSwgNjI4NzUsIDYyODc5LCA2Mjg4MywgNjI4ODcsIDYyODkxLCA2Mjg5NSwgNjI4OTksIDYyOTAzLCA2MjkwNywgCisgICAgNjI5MTEsIDYyOTE1LCA2MjkxOSwgNjI5MjMsIDYyOTI3LCA2MjkzMSwgNjI5MzUsIDYyOTM5LCA2Mjk0MywgNjI5NDcsIAorICAgIDYyOTUxLCA2Mjk1NSwgNjI5NTksIDYyOTYzLCA2Mjk2NywgNjI5NzEsIDYyOTc1LCA2Mjk3OSwgNjI5ODMsIDYyOTg3LCAKKyAgICA2Mjk5MSwgNjI5OTUsIDYyOTk5LCA2MzAwMywgNjMwMDcsIDYzMDExLCA2MzAxNSwgNjMwMTksIDYzMDIzLCA2MzAyNywgCisgICAgNjMwMzEsIDYzMDM1LCA2MzAzOCwgNjMwNDIsIDYzMDQ2LCA2MzA1MCwgNjMwNTQsIDYzMDU4LCA2MzA2MiwgNjMwNjYsIAorICAgIDYzMDcwLCA2MzA3NCwgNjMwNzgsIDYzMDgyLCA2MzA4NiwgNjMwOTAsIDYzMDk0LCA2MzA5OCwgNjMxMDIsIDYzMTA2LCAKKyAgICA2MzExMCwgNjMxMTQsIDYzMTE4LCA2MzEyMiwgNjMxMjYsIDYzMTMwLCA2MzEzNCwgNjMxMzgsIDYzMTQyLCA2MzE0NiwgCisgICAgNjMxNTAsIDYzMTU0LCA2MzE1OCwgNjMxNjIsIDYzMTY2LCA2MzE3MCwgNjMxNzQsIDYzMTc4LCA2MzE4MiwgNjMxODYsIAorICAgIDYzMTkwLCA2MzE5NCwgNjMxOTgsIDYzMjAyLCA2MzIwNiwgNjMyMTAsIDYzMjE0LCA2MzIxOCwgNjMyMjIsIDYzMjI2LCAKKyAgICA2MzIzMCwgNjMyMzQsIDYzMjM4LCA2MzI0MiwgNjMyNDYsIDYzMjUwLCA2MzI1NCwgNjMyNTgsIDYzMjYyLCA2MzI2NiwgCisgICAgNjMyNzAsIDYzMjc0LCA2MzI3OCwgNjMyODIsIDYzMjg2LCA2MzI5MCwgNjMyOTQsIDYzMjk4LCA2MzMwMiwgNjMzMDYsIAorICAgIDYzMzEwLCA2MzMxNCwgNjMzMTgsIDYzMzIyLCA2MzMyNiwgNjMzMzAsIDYzMzM0LCA2MzMzOCwgNjMzNDIsIDYzMzQ2LCAKKyAgICA2MzM1MCwgNjMzNTQsIDYzMzU4LCA2MzM2MiwgNjMzNjYsIDYzMzcwLCA2MzM3NCwgNjMzNzgsIDYzMzgyLCA2MzM4NiwgCisgICAgNjMzOTAsIDYzMzk0LCA2MzM5NywgNjM0MDEsIDYzNDA1LCA2MzQwOSwgNjM0MTMsIDYzNDE3LCA2MzQyMSwgNjM0MjUsIAorICAgIDYzNDI5LCA2MzQzMywgNjM0MzcsIDYzNDQxLCA2MzQ0NSwgNjM0NDksIDYzNDUzLCA2MzQ1NywgNjM0NjEsIDYzNDY1LCAKKyAgICA2MzQ2OSwgNjM0NzMsIDYzNDc3LCA2MzQ4MSwgNjM0ODUsIDYzNDg5LCA2MzQ5MywgNjM0OTcsIDYzNTAxLCA2MzUwNSwgCisgICAgNjM1MDksIDYzNTEzLCA2MzUxNywgNjM1MjEsIDYzNTI1LCA2MzUyOSwgNjM1MzMsIDYzNTM3LCA2MzU0MSwgNjM1NDUsIAorICAgIDYzNTQ5LCA2MzU1MywgNjM1NTcsIDYzNTYxLCA2MzU2NSwgNjM1NjksIDYzNTczLCA2MzU3NywgNjM1ODEsIDYzNTg1LCAKKyAgICA2MzU4OSwgNjM1OTMsIDYzNTk3LCA2MzYwMSwgNjM2MDUsIDYzNjA5LCA2MzYxMywgNjM2MTcsIDYzNjIxLCA2MzYyNSwgCisgICAgNjM2MjksIDYzNjMzLCA2MzYzNywgNjM2NDEsIDYzNjQ1LCA2MzY0OSwgNjM2NTMsIDYzNjU3LCA2MzY2MSwgNjM2NjUsIAorICAgIDYzNjY5LCA2MzY3MywgNjM2NzcsIDYzNjgxLCA2MzY4NSwgNjM2ODksIDYzNjkzLCA2MzY5NywgNjM3MDEsIDYzNzA1LCAKKyAgICA2MzcwOSwgNjM3MTMsIDYzNzE3LCA2MzcyMSwgNjM3MjUsIDYzNzI5LCA2MzczMywgNjM3MzcsIDYzNzQxLCA2Mzc0NSwgCisgICAgNjM3NDksIDYzNzUzLCA2Mzc1NywgNjM3NjEsIDYzNzY1LCA2Mzc2OSwgNjM3NzMsIDYzNzc3LCA2Mzc4MSwgNjM3ODUsIAorICAgIDYzNzg5LCA2Mzc5MywgNjM3OTcsIDYzODAxLCA2MzgwNSwgNjM4MDksIDYzODEzLCA2MzgxNywgNjM4MjEsIDYzODI1LCAKKyAgICA2MzgyOSwgNjM4MzMsIDYzODM3LCA2Mzg0MSwgNjM4NDUsIDYzODQ5LCA2Mzg1MywgNjM4NTcsIDYzODYxLCA2Mzg2NSwgCisgICAgNjM4NjksIDYzODczLCA2Mzg3NywgNjM4ODEsIDYzODg1LCA2Mzg4OSwgNjM4OTIsIDYzODk2LCA2MzkwMCwgNjM5MDQsIAorICAgIDYzOTA4LCA2MzkxMiwgNjM5MTYsIDYzOTIwLCA2MzkyNCwgNjM5MjgsIDYzOTMyLCA2MzkzNiwgNjM5NDAsIDYzOTQ0LCAKKyAgICA2Mzk0OCwgNjM5NTIsIDYzOTU2LCA2Mzk2MCwgNjM5NjQsIDYzOTY4LCA2Mzk3MiwgNjM5NzYsIDYzOTgwLCA2Mzk4NCwgCisgICAgNjM5ODgsIDYzOTkyLCA2Mzk5NiwgNjQwMDAsIDY0MDA0LCA2NDAwOCwgNjQwMTIsIDY0MDE2LCA2NDAyMCwgNjQwMjQsIAorICAgIDY0MDI4LCA2NDAzMiwgNjQwMzYsIDY0MDQwLCA2NDA0NCwgNjQwNDgsIDY0MDUyLCA2NDA1NiwgNjQwNjAsIDY0MDY0LCAKKyAgICA2NDA2OCwgNjQwNzIsIDY0MDc2LCA2NDA4MCwgNjQwODQsIDY0MDg4LCA2NDA5MiwgNjQwOTYsIDY0MTAwLCA2NDEwNCwgCisgICAgNjQxMDgsIDY0MTEyLCA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIDY0MTM2LCA2NDE0MCwgNjQxNDQsIAorICAgIDY0MTQ4LCA2NDE1MiwgNjQxNTYsIDY0MTYwLCA2NDE2NCwgNjQxNjgsIDY0MTcyLCA2NDE3NiwgNjQxODAsIDY0MTg0LCAKKyAgICA2NDE4OCwgNjQxOTIsIDY0MTk2LCA2NDIwMCwgNjQyMDQsIDY0MjA4LCA2NDIxMiwgNjQyMTYsIDY0MjIwLCA2NDIyNCwgCisgICAgNjQyMjgsIDY0MjMyLCA2NDIzNiwgNjQyNDAsIDY0MjQ0LCA2NDI0OCwgNjQyNTIsIDY0MjU2LCA2NDI2MCwgNjQyNjQsIAorICAgIDY0MjY4LCA2NDI3MiwgNjQyNzYsIDY0MjgwLCA2NDI4NCwgNjQyODgsIDY0MjkyLCA2NDI5NiwgNjQzMDAsIDY0MzA0LCAKKyAgICA2NDMwOCwgNjQzMTIsIDY0MzE2LCA2NDMyMCwgNjQzMjQsIDY0MzI4LCA2NDMzMiwgNjQzMzYsIDY0MzQwLCA2NDM0NCwgCisgICAgNjQzNDcsIDY0MzUxLCA2NDM1NSwgNjQzNTksIDY0MzYzLCA2NDM2NywgNjQzNzEsIDY0Mzc1LCA2NDM3OSwgNjQzODMsIAorICAgIDY0Mzg3LCA2NDM5MSwgNjQzOTUsIDY0Mzk5LCA2NDQwMywgNjQ0MDcsIDY0NDExLCA2NDQxNSwgNjQ0MTksIDY0NDIzLCAKKyAgICA2NDQyNywgNjQ0MzEsIDY0NDM1LCA2NDQzOSwgNjQ0NDMsIDY0NDQ3LCA2NDQ1MSwgNjQ0NTUsIDY0NDU5LCA2NDQ2MywgCisgICAgNjQ0NjcsIDY0NDcxLCA2NDQ3NSwgNjQ0NzksIDY0NDgzLCA2NDQ4NywgNjQ0OTEsIDY0NDk1LCA2NDQ5OSwgNjQ1MDMsIAorICAgIDY0NTA3LCA2NDUxMSwgNjQ1MTUsIDY0NTE5LCA2NDUyMywgNjQ1MjcsIDY0NTMxLCA2NDUzNSwgNjQ1MzksIDY0NTQzLCAKKyAgICA2NDU0NywgNjQ1NTEsIDY0NTU1LCA2NDU1OSwgNjQ1NjMsIDY0NTY3LCA2NDU3MSwgNjQ1NzUsIDY0NTc5LCA2NDU4MywgCisgICAgNjQ1ODcsIDY0NTkxLCA2NDU5NSwgNjQ1OTksIDY0NjAzLCA2NDYwNywgNjQ2MTEsIDY0NjE1LCA2NDYxOSwgNjQ2MjMsIAorICAgIDY0NjI3LCA2NDYzMSwgNjQ2MzUsIDY0NjM5LCA2NDY0MywgNjQ2NDcsIDY0NjUxLCA2NDY1NSwgNjQ2NTksIDY0NjYzLCAKKyAgICA2NDY2NywgNjQ2NzEsIDY0Njc1LCA2NDY3OSwgNjQ2ODMsIDY0Njg3LCA2NDY5MSwgNjQ2OTUsIDY0Njk5LCA2NDcwMywgCisgICAgNjQ3MDcsIDY0NzExLCA2NDcxNSwgNjQ3MTksIDY0NzIzLCA2NDcyNywgNjQ3MzEsIDY0NzM1LCA2NDczOSwgNjQ3NDMsIAorICAgIDY0NzQ3LCA2NDc1MSwgNjQ3NTUsIDY0NzU5LCA2NDc2MywgNjQ3NjcsIDY0NzcxLCA2NDc3NSwgNjQ3NzksIDY0NzgzLCAKKyAgICA2NDc4NywgNjQ3OTEsIDY0Nzk1LCA2NDc5OSwgNjQ4MDMsIDY0ODA3LCA2NDgxMSwgNjQ4MTUsIDY0ODE5LCA2NDgyMywgCisgICAgNjQ4MjcsIDY0ODMxLCA2NDgzNSwgNjQ4MzksIDY0ODQzLCA2NDg0NywgNjQ4NTEsIDY0ODU1LCA2NDg1OSwgNjQ4NjMsIAorICAgIDY0ODY3LCA2NDg3MSwgNjQ4NzUsIDY0ODc5LCA2NDg4MywgNjQ4ODcsIDY0ODkxLCA2NDg5NSwgNjQ4OTksIDY0OTAzLCAKKyAgICA2NDkwNywgNjQ5MTEsIDY0OTE1LCA2NDkxOSwgNjQ5MjMsIDY0OTI3LCA2NDkzMSwgNjQ5MzUsIDY0OTM5LCA2NDk0MywgCisgICAgNjQ5NDcsIDY0OTUwLCA2NDk1NCwgNjQ5NTgsIDY0OTYyLCA2NDk2NiwgNjQ5NzAsIDY0OTc0LCA2NDk3OCwgNjQ5ODIsIAorICAgIDY0OTg2LCA2NDk5MCwgNjQ5OTQsIDY0OTk4LCA2NTAwMiwgNjUwMDYsIDY1MDEwLCA2NTAxNCwgNjUwMTgsIDY1MDIyLCAKKyAgICA2NTAyNiwgNjUwMzAsIDY1MDM0LCA2NTAzOCwgNjUwNDIsIDY1MDQ2LCA2NTA1MCwgNjUwNTQsIDY1MDU4LCA2NTA2MiwgCisgICAgNjUwNjYsIDY1MDcwLCA2NTA3NCwgNjUwNzgsIDY1MDgyLCA2NTA4NiwgNjUwOTAsIDY1MDk0LCA2NTA5OCwgNjUxMDIsIAorICAgIDY1MTA2LCA2NTExMCwgNjUxMTQsIDY1MTE4LCA2NTEyMiwgNjUxMjYsIDY1MTMwLCA2NTEzNCwgNjUxMzgsIDY1MTQyLCAKKyAgICA2NTE0NiwgNjUxNTAsIDY1MTU0LCA2NTE1OCwgNjUxNjIsIDY1MTY2LCA2NTE3MCwgNjUxNzQsIDY1MTc4LCA2NTE4MiwgCisgICAgNjUxODYsIDY1MTkwLCA2NTE5NCwgNjUxOTgsIDY1MjAyLCA2NTIwNiwgNjUyMTAsIDY1MjE0LCA2NTIxOCwgNjUyMjIsIAorICAgIDY1MjI2LCA2NTIzMCwgNjUyMzQsIDY1MjM4LCA2NTI0MiwgNjUyNDYsIDY1MjUwLCA2NTI1NCwgNjUyNTgsIDY1MjYyLCAKKyAgICA2NTI2NiwgNjUyNzAsIDY1Mjc0LCA2NTI3OCwgNjUyODIsIDY1Mjg2LCA2NTI5MCwgNjUyOTQsIDY1Mjk4LCA2NTMwMiwgCisgICAgNjUzMDYsIDY1MzEwLCA2NTMxNCwgNjUzMTgsIDY1MzIyLCA2NTMyNiwgNjUzMzAsIDY1MzM0LCA2NTMzOCwgNjUzNDIsIAorICAgIDY1MzQ2LCA2NTM1MCwgNjUzNTQsIDY1MzU4LCA2NTM2MiwgNjUzNjYsIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCAKKyAgICA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5OCwgNjU0MDIsIDY1NDA2LCA2NTQxMCwgNjU0MTQsIDY1NDE4LCA2NTQyMiwgCisgICAgNjU0MjYsIDY1NDMwLCA2NTQzNCwgNjU0MzgsIDY1NDQyLCA2NTQ0NiwgNjU0NTAsIDY1NDU0LCA2NTQ1OCwgNjU0NjIsIAorICAgIDY1NDY2LCA2NTQ3MCwgNjU0NzQsIDY1NDc4LCA2NTQ4MiwgNjU0ODYsIDY1NDkwLCA2NTQ5NCwgNjU0OTgsIDY1NTAyLCAKKyAgICA2NTUwNiwgNjU1MTAsIDY1NTE0LCA2NTUxOCwgNjU1MjIsIDY1NTI2LCA2NTUzMCwgNjU1MzQsIDY1NTM4LCA2NTU0MiwgCisgICAgNjU1NDYsIDY1NTUwLCA2NTU1NCwgNjU1NTgsIDY1NTYyLCA2NTU2NiwgNjU1NzAsIDY1NTc0LCA2NTU3OCwgNjU1ODIsIAorICAgIDY1NTg2LCA2NTU5MCwgNjU1OTQsIDY1NTk4LCA2NTYwMiwgNjU2MDYsIDY1NjEwLCA2NTYxNCwgNjU2MTgsIDY1NjIyLCAKKyAgICA2NTYyNiwgNjU2MzAsIDY1NjM0LCA2NTYzOCwgNjU2NDIsIDY1NjQ2LCA2NTY1MCwgNjU2NTQsIDY1NjU4LCA2NTY2MiwgCisgICAgNjU2NjYsIDY1NjcwLCA2NTY3NCwgNjU2NzgsIDY1NjgyLCA2NTY4NiwgNjU2OTAsIDY1Njk0LCA2NTY5OCwgNjU3MDIsIAorICAgIDY1NzA2LCA2NTcwOSwgNjU3MTMsIDY1NzE3LCA2NTcyMSwgNjU3MjUsIDY1NzI5LCA2NTczMywgNjU3MzcsIDY1NzQxLCAKKyAgICA2NTc0NSwgNjU3NDksIDY1NzUzLCA2NTc1NywgNjU3NjEsIDY1NzY1LCA2NTc2OSwgNjU3NzMsIDY1Nzc3LCA2NTc4MSwgCisgICAgNjU3ODUsIDY1Nzg5LCA2NTc5MywgNjU3OTcsIDY1ODAxLCA2NTgwNSwgNjU4MDksIDY1ODEzLCA2NTgxNywgNjU4MjEsIAorICAgIDY1ODI1LCA2NTgyOSwgNjU4MzMsIDY1ODM3LCA2NTg0MSwgNjU4NDUsIDY1ODQ5LCA2NTg1MywgNjU4NTcsIDY1ODYxLCAKKyAgICA2NTg2NSwgNjU4NjksIDY1ODczLCA2NTg3NywgNjU4ODEsIDY1ODg1LCA2NTg4OSwgNjU4OTMsIDY1ODk3LCA2NTkwMSwgCisgICAgNjU5MDUsIDY1OTA5LCA2NTkxMywgNjU5MTcsIDY1OTIxLCA2NTkyNSwgNjU5MjksIDY1OTMzLCA2NTkzNywgNjU5NDEsIAorICAgIDY1OTQ1LCA2NTk0OSwgNjU5NTMsIDY1OTU3LCA2NTk2MSwgNjU5NjUsIDY1OTY5LCA2NTk3MywgNjU5NzcsIDY1OTgxLCAKKyAgICA2NTk4NSwgNjU5ODksIDY1OTkzLCA2NTk5NywgNjYwMDEsIDY2MDA1LCA2NjAwOSwgNjYwMTMsIDY2MDE3LCA2NjAyMSwgCisgICAgNjYwMjUsIDY2MDI5LCA2NjAzMywgNjYwMzcsIDY2MDQxLCA2NjA0NSwgNjYwNDksIDY2MDUzLCA2NjA1NywgNjYwNjEsIAorICAgIDY2MDY1LCA2NjA2OSwgNjYwNzMsIDY2MDc3LCA2NjA4MSwgNjYwODUsIDY2MDg5LCA2NjA5MywgNjYwOTcsIDY2MTAxLCAKKyAgICA2NjEwNSwgNjYxMDksIDY2MTEzLCA2NjExNywgNjYxMjEsIDY2MTI1LCA2NjEyOSwgNjYxMzMsIDY2MTM3LCA2NjE0MSwgCisgICAgNjYxNDUsIDY2MTQ5LCA2NjE1MywgNjYxNTcsIDY2MTYxLCA2NjE2NSwgNjYxNjksIDY2MTczLCA2NjE3NywgNjYxODEsIAorICAgIDY2MTg1LCA2NjE4OSwgNjYxOTMsIDY2MTk3LCA2NjIwMSwgNjYyMDUsIDY2MjA5LCA2NjIxMywgNjYyMTcsIDY2MjIxLCAKKyAgICA2NjIyNSwgNjYyMjksIDY2MjMzLCA2NjIzNywgNjYyNDEsIDY2MjQ1LCA2NjI0OSwgNjYyNTMsIDY2MjU3LCA2NjI2MSwgCisgICAgNjYyNjUsIDY2MjY5LCA2NjI3MywgNjYyNzcsIDY2MjgxLCA2NjI4NSwgNjYyODksIDY2MjkzLCA2NjI5NywgNjYzMDEsIAorICAgIDY2MzA1LCA2NjMwOSwgNjYzMTMsIDY2MzE3LCA2NjMyMSwgNjYzMjUsIDY2MzI5LCA2NjMzMywgNjYzMzcsIDY2MzQxLCAKKyAgICA2NjM0NSwgNjYzNDksIDY2MzUzLCA2NjM1NywgNjYzNjEsIDY2MzY1LCA2NjM2OSwgNjYzNzMsIDY2Mzc3LCA2NjM4MSwgCisgICAgNjYzODUsIDY2Mzg5LCA2NjM5MywgNjYzOTcsIDY2NDAxLCA2NjQwNSwgNjY0MDksIDY2NDEzLCA2NjQxNywgNjY0MjEsIAorICAgIDY2NDI1LCA2NjQyOSwgNjY0MzMsIDY2NDM3LCA2NjQ0MSwgNjY0NDUsIDY2NDQ5LCA2NjQ1MywgNjY0NTcsIDY2NDYxLCAKKyAgICA2NjQ2NSwgNjY0NjksIDY2NDczLCA2NjQ3NywgNjY0ODEsIDY2NDg1LCA2NjQ4OSwgMCwgMCwgMCwgNjY0OTMsIDY2NDk3LCAKKyAgICA2NjUwMSwgNjY1MDUsIDY2NTA5LCA2NjUxMywgNjY1MTcsIDY2NTIxLCA2NjUyNSwgNjY1MjksIDY2NTMzLCA2NjUzNywgCisgICAgNjY1NDEsIDY2NTQ1LCA2NjU0OSwgNjY1NTMsIDY2NTU3LCA2NjU2MSwgNjY1NjUsIDY2NTY5LCA2NjU3MywgNjY1NzcsIAorICAgIDY2NTgxLCA2NjU4NSwgNjY1ODksIDY2NTkzLCA2NjU5NywgNjY2MDEsIDY2NjA1LCA2NjYwOSwgNjY2MTMsIDY2NjE3LCAKKyAgICA2NjYyMSwgNjY2MjUsIDY2NjI5LCA2NjYzMywgNjY2MzcsIDY2NjQxLCA2NjY0NSwgNjY2NDksIDY2NjUzLCA2NjY1NywgCisgICAgNjY2NjEsIDY2NjY1LCA2NjY2OSwgNjY2NzMsIDY2Njc3LCA2NjY4MSwgNjY2ODUsIDY2Njg5LCA2NjY5MywgNjY2OTcsIAorICAgIDY2NzAxLCA2NjcwNSwgNjY3MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NzEzLCA2NjcxOCwgNjY3MjIsIAorICAgIDY2NzI3LCA2NjczMiwgNjY3MzcsIDY2NzQyLCA2Njc0NywgNjY3NTEsIDY2NzU2LCA2Njc2MSwgNjY3NjYsIDY2NzcxLCAKKyAgICA2Njc3NiwgNjY3ODEsIDY2Nzg2LCA2Njc5MCwgNjY3OTQsIDY2Nzk5LCA2NjgwNCwgNjY4MDksIDY2ODE0LCA2NjgxOSwgCisgICAgNjY4MjMsIDY2ODI4LCA2NjgzMywgNjY4MzgsIDY2ODQzLCA2Njg0OCwgNjY4NTIsIDY2ODU3LCA2Njg2MSwgNjY4NjYsIAorICAgIDY2ODcwLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTIsIDY2ODk3LCA2NjkwMiwgNjY5MTAsIDY2OTE4LCAKKyAgICA2NjkyNiwgNjY5MzQsIDY2OTQxLCA2Njk0OSwgNjY5NTUsIDY2OTYzLCA2Njk2NywgNjY5NzEsIDY2OTc1LCA2Njk3OSwgCisgICAgNjY5ODMsIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgNjcwMDcsIDY3MDExLCA2NzAxNSwgNjcwMTksIAorICAgIDY3MDIzLCA2NzAyNywgNjcwMzEsIDY3MDM1LCA2NzAzOSwgNjcwNDMsIDY3MDQ3LCA2NzA1MSwgNjcwNTUsIDY3MDU5LCAKKyAgICA2NzA2MywgNjcwNjcsIDY3MDcxLCA2NzA3NSwgNjcwNzksIDY3MDgzLCA2NzA4NywgNjcwOTEsIDY3MDk1LCA2NzA5OSwgCisgICAgNjcxMDMsIDY3MTA3LCA2NzExMCwgNjcxMTQsIDY3MTE4LCA2NzEyMiwgNjcxMjYsIDY3MTMwLCA2NzEzNCwgNjcxMzgsIAorICAgIDY3MTQyLCA2NzE0NiwgNjcxNTAsIDY3MTU0LCA2NzE1OCwgNjcxNjIsIDY3MTY2LCA2NzE3MCwgNjcxNzQsIDY3MTc4LCAKKyAgICA2NzE4MiwgNjcxODYsIDY3MTkwLCA2NzE5NCwgNjcxOTgsIDY3MjAyLCA2NzIwNiwgNjcyMTAsIDY3MjE0LCA2NzIxOCwgCisgICAgNjcyMjIsIDY3MjI2LCA2NzIzMCwgNjcyMzQsIDY3MjM4LCA2NzI0MiwgNjcyNDYsIDY3MjUwLCA2NzI1NCwgNjcyNTcsIAorICAgIDY3MjYxLCA2NzI2NSwgNjcyNjgsIDY3MjcyLCA2NzI3NiwgNjcyODAsIDY3MjgzLCA2NzI4NywgNjcyOTEsIDY3Mjk1LCAKKyAgICA2NzI5OSwgNjczMDMsIDY3MzA3LCA2NzMxMSwgNjczMTUsIDY3MzE5LCA2NzMyMywgNjczMjcsIDY3MzMxLCA2NzMzNSwgCisgICAgNjczMzksIDY3MzQyLCA2NzM0NiwgNjczNTAsIDY3MzU0LCA2NzM1OCwgNjczNjIsIDY3MzY2LCA2NzM3MCwgNjczNzQsIAorICAgIDY3Mzc4LCA2NzM4MSwgNjczODQsIDY3Mzg4LCA2NzM5MiwgNjczOTYsIDY3Mzk5LCA2NzQwMiwgNjc0MDYsIDY3NDEwLCAKKyAgICA2NzQxNCwgNjc0MTgsIDY3NDIyLCA2NzQyNiwgNjc0MzAsIDY3NDM0LCA2NzQzOCwgNjc0NDIsIDY3NDQ2LCA2NzQ1MCwgCisgICAgNjc0NTQsIDY3NDU4LCA2NzQ2MiwgNjc0NjYsIDY3NDcwLCA2NzQ3NCwgNjc0NzgsIDY3NDgyLCA2NzQ4NiwgNjc0OTAsIAorICAgIDY3NDk0LCA2NzQ5OCwgNjc1MDIsIDY3NTA2LCA2NzUxMCwgNjc1MTQsIDY3NTE4LCA2NzUyMiwgNjc1MjYsIDY3NTMwLCAKKyAgICA2NzUzNCwgNjc1MzgsIDY3NTQyLCA2NzU0NiwgNjc1NTAsIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCisgICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAorICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKKyAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCisgICAgNjc2OTMsIDY3Njk3LCA2NzcwMCwgNjc3MDQsIDY3NzA4LCA2NzcxMiwgNjc3MTYsIDY3NzIwLCA2NzcyNCwgNjc3MjgsIAorICAgIDY3NzMyLCA2NzczNiwgNjc3NDAsIDY3NzQ0LCA2Nzc0OCwgNjc3NTIsIDY3NzU2LCA2Nzc2MCwgNjc3NjQsIDY3NzY3LCAKKyAgICA2Nzc3MSwgNjc3NzUsIDY3Nzc5LCA2Nzc4MywgNjc3ODcsIDY3NzkxLCA2Nzc5NSwgNjc3OTksIDY3ODAzLCA2NzgwNywgCisgICAgNjc4MTEsIDY3ODE1LCA2NzgxOSwgNjc4MjMsIDY3ODI3LCA2NzgzMSwgNjc4MzUsIDY3ODM5LCA2Nzg0MywgNjc4NDcsIAorICAgIDY3ODUxLCA2Nzg1NCwgNjc4NTgsIDY3ODYyLCA2Nzg2NiwgNjc4NzAsIDY3ODc0LCA2Nzg3OCwgNjc4ODIsIDY3ODg2LCAKKyAgICA2Nzg5MCwgNjc4OTQsIDY3ODk4LCA2NzkwMiwgNjc5MDYsIDY3OTEwLCA2NzkxNCwgNjc5MTgsIDY3OTIyLCA2NzkyNiwgCisgICAgNjc5MzAsIDY3OTM0LCA2NzkzOCwgNjc5NDIsIDY3OTQ2LCA2Nzk1MCwgNjc5NTQsIDY3OTU4LCA2Nzk2MiwgNjc5NjYsIAorICAgIDY3OTcwLCA2Nzk3NCwgNjc5NzgsIDY3OTgyLCA2Nzk4NiwgNjc5OTAsIDY3OTk0LCA2Nzk5OCwgNjgwMDIsIDY4MDA2LCAKKyAgICA2ODAxMCwgNjgwMTQsIDY4MDE4LCA2ODAyMiwgNjgwMjYsIDY4MDI5LCA2ODAzNCwgNjgwMzgsIDY4MDQ0LCA2ODA0OSwgCisgICAgNjgwNTUsIDY4MDU5LCA2ODA2MywgNjgwNjcsIDY4MDcxLCA2ODA3NSwgNjgwNzksIDY4MDgzLCA2ODA4NywgNjgwOTEsIAorICAgIDY4MDk1LCA2ODA5OSwgNjgxMDMsIDY4MTA3LCA2ODExMSwgNjgxMTQsIDY4MTE3LCA2ODEyMCwgNjgxMjMsIDY4MTI2LCAKKyAgICA2ODEyOSwgNjgxMzIsIDY4MTM1LCA2ODEzOCwgNjgxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4MTQ5LCA2ODE1NCwgNjgxNTksIDY4MTY0LCA2ODE2OSwgNjgxNzUsIDY4MTgxLCAKKyAgICA2ODE4NiwgNjgxOTEsIDY4MTk2LCA2ODIwMSwgNjgyMDgsIDY4MjE1LCA2ODIyMiwgNjgyMjksIDY4MjM2LCA2ODI0MywgCisgICAgNjgyNTMsIDY4MjYzLCA2ODI3MCwgNjgyNzcsIDY4MjgzLCA2ODI4OSwgNjgyOTUsIDY4MzAxLCA2ODMxMCwgNjgzMTksIAorICAgIDY4MzI2LCA2ODMzMywgNjgzNDQsIDY4MzU1LCA2ODM2MCwgMCwgMCwgNjgzNjUsIDY4MzcyLCA2ODM3OSwgNjgzODYsIAorICAgIDY4MzkzLCA2ODQwMCwgNjg0MDcsIDY4NDEzLCA2ODQxOSwgNjg0MjUsIDY4NDMxLCA2ODQzOCwgNjg0NDUsIDY4NDUwLCAKKyAgICA2ODQ1NCwgNjg0NjEsIDY4NDY4LCA2ODQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg0NzksIDY4NDgzLCA2ODQ4NywgCisgICAgNjg0OTAsIDY4NDkzLCA2ODQ5OCwgNjg1MDMsIDY4NTA4LCA2ODUxMywgNjg1MTgsIDY4NTIzLCA2ODUyOCwgNjg1MzMsIAorICAgIDY4NTM4LCA2ODU0MywgNjg1NTIsIDY4NTYxLCA2ODU2NiwgNjg1NzEsIDY4NTc2LCA2ODU4MSwgNjg1ODYsIDY4NTkxLCAKKyAgICA2ODU5NiwgNjg2MDEsIDY4NjA2LCA2ODYxMSwgNjg2MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4NjIxLCA2ODYyNCwgCisgICAgNjg2MjcsIDY4NjMwLCA2ODYzNCwgNjg2MzgsIDY4NjQyLCA2ODY0NiwgNjg2NDksIDY4NjUzLCA2ODY1NiwgNjg2NjAsIAorICAgIDY4NjYzLCA2ODY2NywgNjg2NzEsIDY4Njc1LCA2ODY3OSwgNjg2ODMsIDY4Njg3LCA2ODY5MSwgNjg2OTQsIDY4Njk4LCAKKyAgICA2ODcwMiwgNjg3MDYsIDY4NzEwLCA2ODcxNCwgNjg3MTgsIDY4NzIyLCA2ODcyNiwgNjg3MzAsIDY4NzM0LCA2ODczOCwgCisgICAgNjg3NDIsIDY4NzQ2LCA2ODc1MCwgNjg3NTMsIDY4NzU3LCA2ODc2MSwgNjg3NjUsIDY4NzY5LCA2ODc3MywgNjg3NzcsIAorICAgIDY4NzgxLCA2ODc4NSwgNjg3ODksIDY4NzkzLCA2ODc5NywgNjg4MDEsIDY4ODA1LCA2ODgwOSwgNjg4MTMsIDY4ODE3LCAKKyAgICA2ODgyMSwgNjg4MjUsIDY4ODI5LCA2ODgzMywgNjg4MzcsIDY4ODQxLCA2ODg0NSwgNjg4NDksIDY4ODUyLCA2ODg1NiwgCisgICAgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCA2ODg4MCwgNjg4ODMsIDY4ODg3LCA2ODg5MSwgNjg4OTUsIAorICAgIDY4ODk5LCA2ODkwMywgNjg5MDcsIDY4OTExLCA2ODkxNSwgNjg5MTksIDY4OTIzLCA2ODkyNywgNjg5MzEsIDY4OTM2LCAKKyAgICA2ODk0MSwgNjg5NDQsIDY4OTQ5LCA2ODk1MiwgNjg5NTUsIDY4OTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODk2MiwgCisgICAgNjg5NzEsIDY4OTgwLCA2ODk4OSwgNjg5OTgsIDY5MDA3LCA2OTAxNiwgNjkwMjUsIDY5MDM0LCA2OTA0MiwgNjkwNDksIAorICAgIDY5MDU3LCA2OTA2NCwgNjkwNzIsIDY5MDgyLCA2OTA5MSwgNjkxMDEsIDY5MTEwLCA2OTEyMCwgNjkxMjgsIDY5MTM1LCAKKyAgICA2OTE0MywgNjkxNTAsIDY5MTU4LCA2OTE2MywgNjkxNjgsIDY5MTczLCA2OTE4MiwgNjkxODgsIDY5MTk0LCA2OTIwMSwgCisgICAgNjkyMTAsIDY5MjE4LCA2OTIyNiwgNjkyMzQsIDY5MjQxLCA2OTI0OCwgNjkyNTUsIDY5MjYyLCA2OTI2NywgNjkyNzIsIAorICAgIDY5Mjc3LCA2OTI4MiwgNjkyODcsIDY5MjkyLCA2OTI5NywgNjkzMDIsIDY5MzEwLCA2OTMxOCwgNjkzMjQsIDY5MzI5LCAKKyAgICA2OTMzNCwgNjkzMzksIDY5MzQ0LCA2OTM0OSwgNjkzNTQsIDY5MzU5LCA2OTM2NCwgNjkzNjksIDY5Mzc3LCA2OTM4NSwgCisgICAgNjkzOTAsIDY5Mzk1LCA2OTQwNCwgNjk0MTMsIDY5NDIwLCA2OTQyNywgNjk0MzYsIDY5NDQ1LCA2OTQ1NiwgNjk0NjcsIAorICAgIDY5NDczLCA2OTQ3OSwgNjk0ODcsIDY5NDk1LCA2OTUwNCwgNjk1MTMsIDY5NTIwLCA2OTUyNywgNjk1MzIsIDY5NTM3LCAKKyAgICA2OTU0OCwgNjk1NTksIDY5NTY3LCA2OTU3NSwgNjk1ODUsIDY5NTk1LCA2OTYwNiwgNjk2MTcsIDY5NjI2LCA2OTYzNSwgCisgICAgNjk2NDIsIDY5NjQ5LCA2OTY1NiwgNjk2NjMsIDY5NjcyLCA2OTY4MSwgNjk2ODYsIDY5NjkxLCA2OTY5OCwgNjk3MDUsIAorICAgIDY5NzEyLCA2OTcxOSwgNjk3MzAsIDY5NzQxLCA2OTc0NiwgNjk3NTEsIDY5NzU2LCA2OTc2MSwgNjk3NjYsIDY5NzcxLCAKKyAgICA2OTc3NiwgNjk3ODEsIDY5Nzg1LCA2OTc5MCwgNjk3OTUsIDY5ODAwLCA2OTgwNSwgNjk4MTAsIDY5ODE2LCA2OTgyMSwgCisgICAgNjk4MjYsIDY5ODMzLCA2OTg0MCwgNjk4NDcsIDY5ODU0LCA2OTg2MSwgNjk4NjksIDY5ODc3LCA2OTg4MiwgNjk4ODcsIAorICAgIDY5ODkzLCA2OTg5OSwgNjk5MDUsIDY5OTExLCA2OTkxOCwgNjk5MjUsIDY5OTMyLCA2OTkzNiwgNjk5NDMsIDY5OTQ4LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1MjkyMCwgNTI5MjQsIDUyOTI4LCA1MjkzMywgNTI5MzgsIDUyOTQzLCA1Mjk0NywgNTI5NTEsIAotICAgIDUyOTU1LCA1Mjk2MCwgNTI5NjUsIDUyOTY5LCA1Mjk3MywgNTI5NzcsIDUyOTgxLCA1Mjk4NiwgNTI5OTEsIDUyOTk2LCAKLSAgICA1MzAwMSwgNTMwMDUsIDUzMDA5LCA1MzAxNCwgNTMwMTksIDUzMDI0LCA1MzAyOSwgNTMwMzMsIDAsIDUzMDM3LCA1MzA0MSwgCi0gICAgNTMwNDUsIDUzMDQ5LCA1MzA1MywgNTMwNTcsIDUzMDYxLCA1MzA2NiwgNTMwNzEsIDUzMDc1LCA1MzA4MCwgNTMwODUsIAotICAgIDUzMDk0LCA1MzA5OCwgNTMxMDIsIDUzMTA2LCA1MzExMywgNTMxMTcsIDUzMTIyLCA1MzEyNywgNTMxMzEsIDUzMTM1LCAKLSAgICA1MzE0MSwgNTMxNDYsIDUzMTUxLCA1MzE1NiwgNTMxNjEsIDUzMTY1LCA1MzE2OSwgNTMxNzMsIDUzMTc3LCA1MzE4MSwgCi0gICAgNTMxODYsIDUzMTkxLCA1MzE5NSwgNTMxOTksIDUzMjA0LCA1MzIwOSwgNTMyMTQsIDUzMjE4LCA1MzIyMiwgNTMyMjcsIAotICAgIDUzMjMyLCA1MzIzOCwgNTMyNDQsIDUzMjQ4LCA1MzI1NCwgNTMyNjAsIDUzMjY0LCA1MzI3MCwgNTMyNzYsIDUzMjgxLCAKLSAgICA1MzI4NiwgNTMyOTAsIDUzMjk2LCA1MzMwMCwgNTMzMDQsIDUzMzEwLCA1MzMxNiwgNTMzMjEsIDUzMzI2LCA1MzMzMCwgCi0gICAgNTMzMzQsIDUzMzQyLCA1MzM0OCwgNTMzNTQsIDUzMzYwLCA1MzM2NSwgNTMzNzAsIDUzMzc1LCA1MzM4MSwgNTMzODUsIAotICAgIDUzMzkxLCA1MzM5NSwgNTMzOTksIDUzNDA1LCA1MzQxMSwgNTM0MTcsIDUzNDIzLCA1MzQyOSwgNTM0MzUsIDUzNDQxLCAKLSAgICA1MzQ0NywgNTM0NTMsIDUzNDU5LCA1MzQ2NSwgNTM0NzEsIDUzNDc1LCA1MzQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTM0ODcsIDUzNDkwLCA1MzQ5NCwgNTM0OTgsIDUzNTAyLCA1MzUwNiwgNTM1MDksIDUzNTEyLCAKLSAgICA1MzUxNiwgNTM1MjAsIDUzNTI0LCA1MzUyOCwgNTM1MzEsIDUzNTM2LCA1MzU0MCwgNTM1NDQsIDUzNTQ4LCA1MzU1NCwgCi0gICAgNTM1NTgsIDUzNTYyLCA1MzU2NiwgNTM1NzAsIDUzNTc3LCA1MzU4MywgNTM1ODcsIDUzNTkxLCA1MzU5NSwgNTM1OTksIAotICAgIDUzNjAzLCA1MzYwNywgNTM2MTEsIDUzNjE1LCA1MzYxOSwgNTM2MjMsIDUzNjI3LCA1MzYzMywgNTM2MzcsIDUzNjQxLCAKLSAgICA1MzY0NSwgNTM2NDksIDUzNjUzLCA1MzY1NywgNTM2NjEsIDUzNjY1LCA1MzY2OSwgNTM2NzMsIDUzNjc3LCA1MzY4MSwgCi0gICAgNTM2ODUsIDUzNjg5LCA1MzY5MywgNTM2OTcsIDUzNzAzLCA1MzcwOSwgNTM3MTQsIDUzNzE5LCA1MzcyMywgNTM3MjcsIAotICAgIDUzNzMxLCA1MzczNSwgNTM3MzksIDUzNzQzLCA1Mzc0NywgNTM3NTEsIDUzNzU1LCA1Mzc1OSwgNTM3NjMsIDUzNzY3LCAKLSAgICA1Mzc3MSwgNTM3NzUsIDUzNzc5LCA1Mzc4MywgNTM3ODcsIDUzNzkxLCA1Mzc5NSwgNTM3OTksIDUzODAzLCA1MzgwNywgCi0gICAgNTM4MTEsIDUzODE1LCA1MzgyMSwgNTM4MjUsIDUzODI5LCA1MzgzMywgNTM4MzcsIDUzODQxLCA1Mzg0NSwgNTM4NDksIAotICAgIDUzODUzLCA1Mzg1OCwgNTM4NjUsIDUzODY5LCA1Mzg3MywgNTM4NzcsIDUzODgxLCA1Mzg4NSwgNTM4ODksIDUzODkzLCAKLSAgICA1Mzg5NywgNTM5MDEsIDUzOTA1LCA1MzkwOSwgNTM5MTMsIDUzOTIwLCA1MzkyNCwgNTM5MzAsIDUzOTM0LCA1MzkzOCwgCi0gICAgNTM5NDIsIDUzOTQ2LCA1Mzk1MCwgNTM5NTMsIDUzOTU3LCA1Mzk2MSwgNTM5NjUsIDUzOTY5LCA1Mzk3MywgNTM5NzcsIAotICAgIDUzOTgxLCA1Mzk4NSwgNTM5ODksIDUzOTkzLCA1Mzk5NywgNTQwMDEsIDU0MDA1LCA1NDAwOSwgNTQwMTMsIDU0MDE3LCAKLSAgICA1NDAyMSwgNTQwMjUsIDU0MDI5LCA1NDAzMywgNTQwMzcsIDU0MDQxLCA1NDA0NSwgNTQwNDksIDU0MDUzLCA1NDA1NywgCi0gICAgNTQwNjEsIDU0MDY1LCA1NDA2OSwgNTQwNzMsIDU0MDc3LCA1NDA4MSwgNTQwODcsIDU0MDkxLCA1NDA5NSwgNTQwOTksIAotICAgIDU0MTAzLCA1NDEwNywgNTQxMTEsIDU0MTE1LCA1NDExOSwgNTQxMjMsIDU0MTI3LCA1NDEzMSwgNTQxMzUsIDU0MTM5LCAKLSAgICA1NDE0MywgNTQxNDcsIDU0MTUxLCA1NDE1NSwgNTQxNTksIDU0MTYzLCA1NDE2NywgNTQxNzEsIDU0MTc1LCA1NDE3OSwgCi0gICAgNTQxODMsIDU0MTg3LCA1NDE5MSwgNTQxOTUsIDU0MjAzLCA1NDIwNywgNTQyMTEsIDU0MjE1LCA1NDIxOSwgNTQyMjMsIAotICAgIDU0MjI5LCA1NDIzMywgNTQyMzcsIDU0MjQxLCA1NDI0NSwgNTQyNDksIDU0MjUzLCA1NDI1NywgNTQyNjEsIDU0MjY1LCAKLSAgICA1NDI2OSwgNTQyNzMsIDU0Mjc3LCA1NDI4MSwgNTQyODcsIDU0MjkxLCA1NDI5NSwgNTQyOTksIDU0MzAzLCA1NDMwNywgCi0gICAgNTQzMTEsIDU0MzE1LCA1NDMxOSwgNTQzMjMsIDU0MzI3LCA1NDMzMSwgNTQzMzUsIDU0MzM5LCA1NDM0MywgNTQzNDcsIAotICAgIDU0MzUxLCA1NDM1NSwgNTQzNTksIDU0MzYzLCA1NDM2NywgNTQzNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0Mzc1LCA1NDM4MywgNTQzOTAsIAotICAgIDU0NDAxLCA1NDQxMSwgNTQ0MTksIDU0NDI4LCA1NDQzNywgNTQ0NDcsIDU0NDU5LCA1NDQ3MSwgNTQ0ODIsIDAsIDAsIDAsIAotICAgIDAsIDU0NDg4LCA1NDQ5MSwgNTQ0OTQsIDU0NDk5LCA1NDUwMiwgNTQ1MDksIDU0NTEzLCA1NDUxNywgNTQ1MjEsIDU0NTI1LCAKLSAgICA1NDUyOSwgNTQ1MzQsIDU0NTM5LCA1NDU0MywgNTQ1NDcsIDU0NTUyLCA1NDU1NywgNTQ1NjIsIDU0NTY3LCA1NDU3MCwgCi0gICAgNTQ1NzMsIDU0NTc5LCA1NDU4NSwgNTQ1OTAsIDU0NTk1LCA1NDYwMiwgNTQ2MDksIDU0NjEzLCA1NDYxNywgNTQ2MjEsIAotICAgIDU0NjI4LCA1NDYzNCwgNTQ2NDEsIDU0NjQ2LCA1NDY1MCwgNTQ2NTQsIDU0NjU4LCA1NDY2MiwgNTQ2NjYsIDU0NjcwLCAKLSAgICA1NDY3NCwgNTQ2NzgsIDU0NjgyLCA1NDY4NywgNTQ2OTIsIDU0Njk3LCA1NDcwMiwgNTQ3MDgsIDU0NzEzLCA1NDcxNywgCi0gICAgNTQ3MjMsIDU0NzM0LCA1NDc0NCwgNTQ3NTksIDU0NzY4LCA1NDc3MiwgNTQ3ODEsIDU0Nzg2LCA1NDc5MSwgNTQ3OTYsIAotICAgIDU0ODAxLCA1NDgwNCwgNTQ4MDksIDU0ODEzLCAwLCA1NDgxOSwgNTQ4MjMsIDU0ODI2LCA1NDgzMCwgNTQ4MzMsIDU0ODM3LCAKLSAgICA1NDg0MCwgNTQ4NDQsIDU0ODQ3LCA1NDg1MSwgNTQ4NTQsIDU0ODU3LCA1NDg2MSwgNTQ4NjUsIDU0ODY5LCA1NDg3MywgCi0gICAgNTQ4NzcsIDU0ODgxLCA1NDg4NSwgNTQ4ODksIDU0ODkzLCA1NDg5NywgNTQ5MDEsIDU0OTA1LCA1NDkwOSwgNTQ5MTMsIAotICAgIDU0OTE3LCA1NDkyMSwgNTQ5MjUsIDU0OTI5LCA1NDkzMywgNTQ5MzcsIDU0OTQxLCA1NDk0NSwgNTQ5NDksIDU0OTU0LCAKLSAgICA1NDk1OCwgNTQ5NjIsIDU0OTY2LCA1NDk3MCwgNTQ5NzMsIDU0OTc3LCA1NDk4MSwgNTQ5ODUsIDU0OTg5LCA1NDk5MywgCi0gICAgNTQ5OTcsIDU1MDAwLCA1NTAwNCwgNTUwMDcsIDU1MDExLCA1NTAxNSwgNTUwMTksIDU1MDIzLCA1NTAyNywgNTUwMzEsIAotICAgIDU1MDM1LCA1NTAzOSwgNTUwNDMsIDU1MDQ3LCA1NTA1MSwgNTUwNTUsIDU1MDU4LCA1NTA2MiwgNTUwNjYsIDU1MDcwLCAKLSAgICA1NTA3NCwgNTUwNzgsIDU1MDgxLCA1NTA4NiwgNTUwOTAsIDU1MDk1LCA1NTA5OSwgNTUxMDIsIDU1MTA2LCA1NTExMCwgCi0gICAgNTUxMTQsIDU1MTE4LCA1NTEyMywgNTUxMjcsIDU1MTMxLCA1NTEzNSwgNTUxMzksIDU1MTQyLCA1NTE0NiwgNTUxNTAsIDAsIAotICAgIDAsIDU1MTU1LCA1NTE2MywgNTUxNzEsIDU1MTc4LCA1NTE4NSwgNTUxODksIDU1MTk1LCA1NTIwMCwgNTUyMDUsIDU1MjA5LCAKLSAgICA1NTIxMiwgNTUyMTYsIDU1MjE5LCA1NTIyMywgNTUyMjYsIDU1MjMwLCA1NTIzMywgNTUyMzcsIDU1MjQwLCA1NTI0MywgCi0gICAgNTUyNDcsIDU1MjUxLCA1NTI1NSwgNTUyNTksIDU1MjYzLCA1NTI2NywgNTUyNzEsIDU1Mjc1LCA1NTI3OSwgNTUyODMsIAotICAgIDU1Mjg3LCA1NTI5MSwgNTUyOTUsIDU1Mjk5LCA1NTMwMywgNTUzMDcsIDU1MzExLCA1NTMxNSwgNTUzMTksIDU1MzIzLCAKLSAgICA1NTMyNywgNTUzMzEsIDU1MzM1LCA1NTM0MCwgNTUzNDQsIDU1MzQ4LCA1NTM1MiwgNTUzNTYsIDU1MzU5LCA1NTM2MywgCi0gICAgNTUzNjcsIDU1MzcxLCA1NTM3NSwgNTUzNzksIDU1MzgzLCA1NTM4NiwgNTUzOTAsIDU1MzkzLCA1NTM5NywgNTU0MDEsIAotICAgIDU1NDA1LCA1NTQwOSwgNTU0MTMsIDU1NDE3LCA1NTQyMSwgNTU0MjUsIDU1NDI5LCA1NTQzMywgNTU0MzcsIDU1NDQxLCAKLSAgICA1NTQ0NCwgNTU0NDgsIDU1NDUyLCA1NTQ1NiwgNTU0NjAsIDU1NDY0LCA1NTQ2NywgNTU0NzIsIDU1NDc2LCA1NTQ4MSwgCi0gICAgNTU0ODUsIDU1NDg4LCA1NTQ5MiwgNTU0OTYsIDU1NTAwLCA1NTUwNCwgNTU1MDksIDU1NTEzLCA1NTUxNywgNTU1MjEsIAotICAgIDU1NTI1LCA1NTUyOCwgNTU1MzIsIDU1NTM2LCA1NTU0MSwgNTU1NDUsIDU1NTQ5LCA1NTU1MywgNTU1NTcsIDU1NTYyLCAKLSAgICA1NTU2OSwgNTU1NzMsIDU1NTc5LCAwLCAwLCAwLCAwLCAwLCA1NTU4NCwgNTU1ODgsIDU1NTkyLCA1NTU5NSwgNTU1OTksIAotICAgIDU1NjAzLCA1NTYwNywgNTU2MTAsIDU1NjEzLCA1NTYxNiwgNTU2MjAsIDU1NjIzLCA1NTYyNywgNTU2MzEsIDU1NjM1LCAKLSAgICA1NTYzOSwgNTU2NDMsIDU1NjQ3LCA1NTY1MCwgNTU2NTQsIDU1NjU4LCA1NTY2MSwgNTU2NjQsIDU1NjY3LCA1NTY3MCwgCi0gICAgNTU2NzQsIDU1Njc4LCA1NTY4MiwgNTU2ODYsIDU1NjkwLCA1NTY5NCwgNTU2OTgsIDU1NzAyLCA1NTcwNiwgNTU3MTAsIAotICAgIDU1NzEzLCA1NTcxNiwgNTU3MjAsIDU1NzIzLCA1NTcyNywgNTU3MzEsIDAsIDAsIDAsIDU1NzM1LCA1NTczOSwgNTU3NDMsIAotICAgIDU1NzQ3LCA1NTc1MSwgNTU3NTUsIDU1NzU5LCA1NTc2MywgNTU3NjcsIDU1NzcxLCA1NTc3NSwgNTU3NzksIDU1NzgzLCAKLSAgICA1NTc4NywgNTU3OTEsIDU1Nzk1LCA1NTc5OSwgNTU4MDMsIDU1ODA3LCA1NTgxMSwgNTU4MTUsIDU1ODE5LCA1NTgyMywgCi0gICAgNTU4MjcsIDU1ODMxLCA1NTgzNSwgNTU4MzksIDU1ODQzLCA1NTg0NywgNTU4NTEsIDU1ODU1LCA1NTg1OCwgNTU4NjIsIAotICAgIDU1ODY1LCA1NTg2OSwgNTU4NzMsIDU1ODc2LCA1NTg4MCwgNTU4ODQsIDU1ODg3LCA1NTg5MSwgNTU4OTUsIDU1ODk5LCAKLSAgICA1NTkwMywgNTU5MDYsIDU1OTEwLCA1NTkxNCwgNTU5MTgsIDU1OTIyLCA1NTkyNiwgNTU5MzAsIDU1OTMzLCA1NTkzNiwgCi0gICAgNTU5NDAsIDU1OTQ0LCA1NTk0OCwgNTU5NTIsIDU1OTU2LCA1NTk2MCwgNTU5NjQsIDU1OTY4LCA1NTk3MiwgNTU5NzYsIAotICAgIDU1OTgwLCA1NTk4NCwgNTU5ODgsIDU1OTkyLCA1NTk5NiwgNTYwMDAsIDU2MDA0LCA1NjAwOCwgNTYwMTIsIDU2MDE2LCAKLSAgICA1NjAyMCwgNTYwMjQsIDU2MDI4LCA1NjAzMiwgNTYwMzYsIDU2MDQwLCA1NjA0NCwgNTYwNDgsIDU2MDUyLCA1NjA1NiwgCi0gICAgNTYwNjAsIDU2MDY0LCA1NjA2OCwgNTYwNzIsIDU2MDc2LCA1NjA4MCwgNTYwODQsIDU2MDg4LCA1NjA5MiwgNTYwOTYsIAotICAgIDU2MTAwLCAwLCA1NjEwNCwgNTYxMTAsIDU2MTE2LCA1NjEyMSwgNTYxMjYsIDU2MTMxLCA1NjEzNywgNTYxNDMsIDU2MTQ5LCAKLSAgICA1NjE1NSwgNTYxNjEsIDU2MTY3LCA1NjE3MywgNTYxNzksIDU2MTg1LCA1NjE5MSwgNTYxOTcsIDU2MjAxLCA1NjIwNSwgCi0gICAgNTYyMDksIDU2MjEzLCA1NjIxNywgNTYyMjEsIDU2MjI1LCA1NjIyOSwgNTYyMzMsIDU2MjM3LCA1NjI0MSwgNTYyNDUsIAotICAgIDU2MjQ5LCA1NjI1MywgNTYyNTcsIDU2MjYxLCA1NjI2NSwgNTYyNjksIDU2MjczLCA1NjI3NywgNTYyODIsIDU2Mjg3LCAKLSAgICA1NjI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYyOTYsIDU2MzAwLCA1NjMwNCwgNTYzMDgsIDU2MzEyLCA1NjMxNiwgCi0gICAgNTYzMjAsIDU2MzI0LCA1NjMyOCwgNTYzMzIsIDU2MzM2LCA1NjM0MCwgNTYzNDQsIDU2MzQ4LCA1NjM1MiwgNTYzNTYsIAotICAgIDU2MzU5LCA1NjM2MiwgNTYzNjUsIDU2MzY5LCA1NjM3MywgNTYzNzcsIDU2MzgxLCA1NjM4NSwgNTYzODksIDU2MzkzLCAKLSAgICA1NjM5NywgNTY0MDEsIDU2NDA1LCA1NjQwOSwgNTY0MTMsIDU2NDE3LCA1NjQyMSwgNTY0MjUsIDU2NDI5LCA1NjQzMywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY0MzcsIDU2NDQyLCA1NjQ0NywgNTY0NTIsIDU2NDU2LCAKLSAgICA1NjQ2MSwgNTY0NjUsIDU2NDcwLCA1NjQ3NSwgNTY0ODAsIDU2NDg1LCA1NjQ5MCwgNTY0OTQsIDU2NDk5LCA1NjUwNCwgCi0gICAgNTY1MDksIDU2NTE0LCA1NjUxOCwgNTY1MjIsIDU2NTI2LCA1NjUzMCwgNTY1MzQsIDU2NTM4LCA1NjU0MiwgNTY1NDYsIAotICAgIDU2NTUwLCA1NjU1NCwgNTY1NTgsIDU2NTYyLCA1NjU2NiwgNTY1NzAsIDU2NTc1LCA1NjU4MCwgNTY1ODUsIDU2NTkwLCAKLSAgICA1NjU5NSwgNTY2MDAsIDU2NjA1LCA1NjYxMCwgNTY2MTUsIDU2NjIwLCA1NjYyNSwgNTY2MzAsIDU2NjM1LCA1NjY0MCwgCi0gICAgNTY2NDUsIDU2NjUxLCAwLCA1NjY1OCwgNTY2NjEsIDU2NjY0LCA1NjY2NywgNTY2NzAsIDU2NjczLCA1NjY3NiwgNTY2NzksIAotICAgIDU2NjgyLCA1NjY4NSwgNTY2ODksIDU2NjkzLCA1NjY5NywgNTY3MDEsIDU2NzA1LCA1NjcwOSwgNTY3MTMsIDU2NzE3LCAKLSAgICA1NjcyMSwgNTY3MjUsIDU2NzI5LCA1NjczMywgNTY3MzcsIDU2NzQxLCA1Njc0NSwgNTY3NDksIDU2NzUzLCA1Njc1NywgCi0gICAgNTY3NjEsIDU2NzY1LCA1Njc2OSwgNTY3NzMsIDU2Nzc3LCA1Njc4MSwgNTY3ODUsIDU2Nzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1Njc5MywgNTY3OTYsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIAotICAgIDU2ODMxLCA1NjgzNiwgNTY4NDEsIDU2ODQ1LCA1Njg1MCwgNTY4NTUsIDU2ODYwLCA1Njg2NSwgNTY4NzAsIDU2ODc0LCAKLSAgICA1Njg3OCwgNTY4ODIsIDU2ODg2LCA1Njg5MCwgNTY4OTQsIDU2ODk4LCA1NjkwMiwgNTY5MDYsIDU2OTEwLCA1NjkxNCwgCi0gICAgNTY5MTgsIDU2OTIyLCA1NjkyNiwgNTY5MzEsIDU2OTM2LCA1Njk0MSwgNTY5NDYsIDU2OTUxLCA1Njk1NiwgNTY5NjEsIAotICAgIDU2OTY2LCA1Njk3MSwgNTY5NzYsIDU2OTgxLCA1Njk4NiwgNTY5OTEsIDU2OTk2LCA1NzAwMiwgNTcwMDgsIDU3MDEzLCAKLSAgICA1NzAxOCwgNTcwMjEsIDU3MDI0LCA1NzAyNywgNTcwMzAsIDU3MDMzLCA1NzAzNiwgNTcwMzksIDU3MDQyLCA1NzA0NSwgCi0gICAgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgNTcwNzMsIDU3MDc3LCA1NzA4MSwgNTcwODUsIAotICAgIDU3MDg5LCA1NzA5MywgNTcwOTcsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgNTcxMjEsIDU3MTI1LCAKLSAgICA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgNTcxNTcsIDU3MTYxLCA1NzE2NSwgCi0gICAgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIDU3MTk3LCA1NzIwMSwgNTcyMDUsIAotICAgIDU3MjEwLCA1NzIxNSwgNTcyMjAsIDU3MjI1LCA1NzIyOSwgNTcyMzQsIDU3MjM5LCA1NzI0NCwgNTcyNDksIDU3MjU0LCAKLSAgICA1NzI1OSwgNTcyNjQsIDU3MjY5LCA1NzI3NCwgNTcyNzgsIDU3Mjg0LCA1NzI5MCwgNTcyOTYsIDU3MzAyLCA1NzMwOCwgCi0gICAgNTczMTQsIDU3MzIwLCA1NzMyNiwgNTczMzIsIDU3MzM4LCA1NzM0NCwgNTczNTAsIDU3MzUzLCA1NzM1NiwgNTczNTksIAotICAgIDU3MzY0LCA1NzM2NywgNTczNzAsIDU3MzczLCA1NzM3NiwgNTczNzksIDU3MzgyLCA1NzM4NiwgNTczOTAsIDU3Mzk0LCAKLSAgICA1NzM5OCwgNTc0MDIsIDU3NDA2LCA1NzQxMCwgNTc0MTQsIDU3NDE4LCA1NzQyMiwgNTc0MjYsIDU3NDMwLCA1NzQzNCwgCi0gICAgNTc0MzcsIDU3NDQxLCA1NzQ0NSwgNTc0NDksIDU3NDUzLCA1NzQ1NywgNTc0NjAsIDU3NDY0LCA1NzQ2OCwgNTc0NzIsIAotICAgIDU3NDc2LCA1NzQ3OSwgNTc0ODMsIDU3NDg3LCA1NzQ5MSwgNTc0OTUsIDU3NDk4LCA1NzUwMiwgNTc1MDYsIDU3NTA5LCAKLSAgICA1NzUxMywgNTc1MTcsIDU3NTIxLCA1NzUyNSwgNTc1MjksIDU3NTMzLCA1NzUzNywgMCwgNTc1NDEsIDU3NTQ0LCA1NzU0NywgCi0gICAgNTc1NTAsIDU3NTUzLCA1NzU1NiwgNTc1NTksIDU3NTYyLCA1NzU2NSwgNTc1NjgsIDU3NTcxLCA1NzU3NCwgNTc1NzcsIAotICAgIDU3NTgwLCA1NzU4MywgNTc1ODYsIDU3NTg5LCA1NzU5MiwgNTc1OTUsIDU3NTk4LCA1NzYwMSwgNTc2MDQsIDU3NjA3LCAKLSAgICA1NzYxMCwgNTc2MTMsIDU3NjE2LCA1NzYxOSwgNTc2MjIsIDU3NjI1LCA1NzYyOCwgNTc2MzEsIDU3NjM0LCA1NzYzNywgCi0gICAgNTc2NDAsIDU3NjQzLCA1NzY0NiwgNTc2NDksIDU3NjUyLCA1NzY1NSwgNTc2NTgsIDU3NjYxLCA1NzY2NCwgNTc2NjcsIAotICAgIDU3NjcwLCA1NzY3MywgNTc2NzYsIDU3Njc5LCA1NzY4MiwgNTc2ODUsIDU3Njg4LCA1NzY5MSwgNTc2OTQsIDU3Njk3LCAKLSAgICA1NzcwMCwgNTc3MDMsIDU3NzA2LCA1NzcwOSwgNTc3MTIsIDU3NzE1LCA1NzcxOCwgNTc3MjEsIDU3NzI0LCA1NzcyNywgCi0gICAgNTc3MzAsIDU3NzMzLCA1NzczNiwgNTc3MzksIDU3NzQyLCA1Nzc0NSwgNTc3NDgsIDU3NzUxLCA1Nzc1NCwgNTc3NTcsIAotICAgIDU3NzYwLCA1Nzc2MywgNTc3NjYsIDU3NzY5LCA1Nzc3MiwgNTc3NzUsIDU3Nzc4LCA1Nzc4MSwgNTc3ODQsIDU3Nzg3LCAKLSAgICA1Nzc5MCwgNTc3OTMsIDU3Nzk2LCA1Nzc5OSwgNTc4MDIsIDU3ODA1LCA1NzgxMywgNTc4MjAsIDU3ODI3LCA1NzgzNCwgCi0gICAgNTc4NDEsIDU3ODQ4LCA1Nzg1NSwgNTc4NjIsIDU3ODY5LCA1Nzg3NiwgNTc4ODQsIDU3ODkyLCA1NzkwMCwgNTc5MDgsIAotICAgIDU3OTE2LCA1NzkyNCwgNTc5MzIsIDU3OTQwLCA1Nzk0OCwgNTc5NTYsIDU3OTY0LCA1Nzk3MiwgNTc5ODAsIDU3OTg4LCAKLSAgICA1Nzk5NiwgNTc5OTksIDU4MDAyLCA1ODAwNSwgNTgwMDcsIDU4MDEwLCA1ODAxMywgNTgwMTYsIDU4MDIxLCA1ODAyNiwgCi0gICAgNTgwMjksIDU4MDM2LCA1ODA0MywgNTgwNTAsIDU4MDU3LCA1ODA2MCwgNTgwNjUsIDU4MDY4LCA1ODA3MiwgNTgwNzQsIAotICAgIDU4MDc2LCA1ODA3OSwgNTgwODIsIDU4MDg1LCA1ODA4OCwgNTgwOTEsIDU4MDk0LCA1ODA5NywgNTgxMDIsIDU4MTA2LCAKLSAgICA1ODEwOSwgNTgxMTIsIDU4MTE1LCA1ODExOCwgNTgxMjEsIDU4MTI0LCA1ODEyNywgNTgxMzEsIDU4MTM0LCA1ODEzNywgCi0gICAgNTgxNDAsIDU4MTQzLCA1ODE0NiwgNTgxNTAsIDU4MTUzLCA1ODE1NiwgNTgxNTksIDU4MTY0LCA1ODE2OSwgNTgxNzQsIAotICAgIDU4MTc5LCA1ODE4NCwgNTgxODksIDU4MTk0LCA1ODE5OSwgNTgyMDQsIDU4MjEyLCA1ODIxNCwgNTgyMTcsIDU4MjIwLCAKLSAgICA1ODIyMywgNTgyMjYsIDU4MjMxLCA1ODIzOSwgNTgyNDIsIDU4MjQ1LCA1ODI0OSwgNTgyNTIsIDU4MjU1LCA1ODI1OCwgCi0gICAgNTgyNjIsIDU4MjY1LCA1ODI2OCwgNTgyNzMsIDU4Mjc2LCA1ODI3OSwgNTgyODQsIDU4Mjg3LCA1ODI5MCwgNTgyOTUsIAotICAgIDU4MzAwLCA1ODMwNSwgNTgzMDgsIDU4MzExLCA1ODMxNCwgNTgzMTcsIDU4MzIzLCA1ODMyNiwgNTgzMjksIDU4MzMyLCAKLSAgICA1ODMzNCwgNTgzMzcsIDU4MzQwLCA1ODM0MywgNTgzNDgsIDU4MzUxLCA1ODM1NCwgNTgzNTcsIDU4MzYwLCA1ODM2MywgCi0gICAgNTgzNjgsIDU4MzcxLCA1ODM3NCwgNTgzNzcsIDU4MzgwLCA1ODM4MywgNTgzODYsIDU4Mzg5LCA1ODM5MiwgNTgzOTUsIAotICAgIDU4NDAwLCA1ODQwNCwgNTg0MTEsIDU4NDE4LCA1ODQyNSwgNTg0MzIsIDU4NDM5LCA1ODQ0NiwgNTg0NTMsIDU4NDYwLCAKLSAgICA1ODQ2NywgNTg0NzUsIDU4NDgzLCA1ODQ5MSwgNTg0OTksIDU4NTA3LCA1ODUxNSwgNTg1MjMsIDU4NTMxLCA1ODUzOSwgCi0gICAgNTg1NDcsIDU4NTU1LCA1ODU2MywgNTg1NzEsIDU4NTc5LCA1ODU4NywgNTg1OTUsIDU4NjAzLCA1ODYxMSwgNTg2MTksIAotICAgIDU4NjI3LCA1ODYzNSwgNTg2NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5OTUzLCA2OTk2MCwgNjk5NjcsIDY5OTc0LCA2OTk4MiwgCisgICAgNjk5ODksIDY5OTk1LCA3MDAwMSwgNzAwMDgsIDcwMDE0LCA3MDAyMCwgNzAwMjYsIDcwMDMzLCA3MDA0MCwgNzAwNDcsIAorICAgIDcwMDU0LCA3MDA2MSwgNzAwNjgsIDcwMDc1LCA3MDA4MiwgNzAwODksIDcwMDk2LCA3MDEwMywgNzAxMTAsIDcwMTE3LCAKKyAgICA3MDEyNCwgNzAxMzAsIDcwMTM3LCA3MDE0NCwgNzAxNTEsIDcwMTU4LCA3MDE2NSwgNzAxNzIsIDcwMTc5LCA3MDE4NiwgCisgICAgNzAxOTMsIDcwMjAwLCA3MDIwNywgNzAyMTQsIDcwMjIxLCA3MDIyOCwgNzAyMzUsIDcwMjQyLCA3MDI0OSwgNzAyNTYsIAorICAgIDcwMjY0LCA3MDI3MiwgNzAyODAsIDcwMjg4LCAwLCAwLCAwLCAwLCA3MDI5NiwgNzAzMDUsIDcwMzE0LCA3MDMyMywgCisgICAgNzAzMzIsIDcwMzQxLCA3MDM1MCwgNzAzNTcsIDcwMzY0LCA3MDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgNzAzNzgsIDcwMzgyLCAKKyAgICA3MDM4NywgNzAzOTIsIDcwMzk3LCA3MDQwMiwgNzA0MDcsIDcwNDEyLCA3MDQxNywgNzA0MjIsIDcwNDI3LCA3MDQzMiwgCisgICAgNzA0MzYsIDcwNDQwLCA3MDQ0NSwgNzA0NTAsIDcwNDU0LCA3MDQ1OSwgNzA0NjQsIDcwNDY5LCA3MDQ3NCwgNzA0NzksIAorICAgIDcwNDg0LCA3MDQ4OSwgNzA0OTMsIDcwNDk3LCA3MDUwMiwgNzA1MDcsIDcwNTEyLCA3MDUxNiwgNzA1MjAsIDcwNTI0LCAKKyAgICA3MDUyOCwgNzA1MzIsIDcwNTM2LCA3MDU0MSwgNzA1NDYsIDcwNTUxLCA3MDU1NiwgNzA1NjEsIDcwNTY4LCA3MDU3NCwgCisgICAgNzA1NzksIDcwNTg0LCA3MDU4OSwgNzA1OTQsIDcwNjAwLCA3MDYwNywgNzA2MTMsIDcwNjIwLCA3MDYyNiwgNzA2MzIsIAorICAgIDcwNjM3LCA3MDY0NCwgNzA2NTAsIDcwNjU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDY2MSwgNzA2NjUsIDcwNjY5LCAKKyAgICA3MDY3MiwgNzA2NzYsIDcwNjc5LCA3MDY4MywgNzA2ODYsIDcwNjkwLCA3MDY5NCwgNzA2OTksIDcwNzAzLCA3MDcwOCwgCisgICAgNzA3MTEsIDcwNzE1LCA3MDcxOSwgNzA3MjIsIDcwNzI2LCA3MDczMCwgNzA3MzMsIDcwNzM3LCA3MDc0MSwgNzA3NDUsIAorICAgIDcwNzQ5LCA3MDc1MywgNzA3NTcsIDcwNzYxLCA3MDc2NSwgNzA3NjksIDcwNzczLCA3MDc3NywgNzA3ODEsIDcwNzg1LCAKKyAgICA3MDc4OSwgNzA3OTMsIDcwNzk3LCA3MDgwMSwgNzA4MDUsIDcwODA4LCA3MDgxMSwgNzA4MTUsIDcwODE5LCA3MDgyMywgCisgICAgNzA4MjYsIDcwODI5LCA3MDgzMiwgNzA4MzYsIDcwODQwLCA3MDg0NCwgNzA4NDgsIDcwODUyLCA3MDg1NSwgNzA4NTksIAorICAgIDcwODY1LCA3MDg3MCwgNzA4NzQsIDcwODc5LCA3MDg4MywgNzA4ODgsIDcwODkzLCA3MDg5OSwgNzA5MDQsIDcwOTEwLCAKKyAgICA3MDkxNCwgNzA5MTksIDcwOTI0LCA3MDkyOCwgNzA5MzMsIDcwOTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3MDk0MiwgNzA5NDUsIDcwOTQ5LCA3MDk1MywgNzA5NTYsIDcwOTU5LCA3MDk2MiwgNzA5NjUsIDcwOTY4LCA3MDk3MSwgCisgICAgNzA5NzQsIDcwOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk4MCwgNzA5ODUsIDcwOTg5LCA3MDk5MywgNzA5OTcsIDcxMDAxLCAKKyAgICA3MTAwNSwgNzEwMDksIDcxMDEzLCA3MTAxNywgNzEwMjEsIDcxMDI1LCA3MTAyOSwgNzEwMzMsIDcxMDM3LCA3MTA0MSwgCisgICAgNzEwNDUsIDcxMDUwLCA3MTA1NSwgNzEwNjEsIDcxMDY3LCA3MTA3NCwgNzEwNzksIDcxMDg0LCA3MTA5MCwgNzEwOTQsIAorICAgIDcxMDk5LCA3MTEwMiwgMCwgMCwgMCwgMCwgNzExMDUsIDcxMTEyLCA3MTExOCwgNzExMjQsIDcxMTMwLCA3MTEzNiwgCisgICAgNzExNDIsIDcxMTQ4LCA3MTE1NCwgNzExNjAsIDcxMTY2LCA3MTE3MiwgNzExNzksIDcxMTg2LCA3MTE5MywgNzEyMDAsIAorICAgIDcxMjA3LCA3MTIxNCwgNzEyMjEsIDcxMjI4LCA3MTIzNSwgNzEyNDEsIDcxMjQ3LCA3MTI1NCwgNzEyNjAsIDcxMjY3LCAKKyAgICA3MTI3NCwgNzEyODAsIDcxMjg2LCA3MTI5MywgNzEzMDAsIDcxMzA3LCA3MTMxMywgNzEzMjAsIDcxMzI3LCA3MTMzMywgCisgICAgNzEzNDAsIDcxMzQ2LCA3MTM1MywgNzEzNjAsIDcxMzY2LCA3MTM3MiwgNzEzNzksIDcxMzg1LCA3MTM5MiwgNzEzOTksIAorICAgIDcxNDA4LCA3MTQxNSwgNzE0MjIsIDcxNDI2LCA3MTQzMSwgNzE0MzYsIDcxNDQxLCA3MTQ0NiwgNzE0NTAsIDcxNDU0LCAKKyAgICA3MTQ1OSwgNzE0NjMsIDcxNDY4LCA3MTQ3MywgNzE0NzgsIDcxNDgzLCA3MTQ4NywgNzE0OTIsIDcxNDk2LCA3MTUwMSwgCisgICAgNzE1MDUsIDcxNTEwLCA3MTUxNSwgNzE1MjAsIDcxNTI1LCA3MTUyOSwgNzE1MzQsIDcxNTM5LCA3MTU0NCwgNzE1NTAsIAorICAgIDcxNTU1LCA3MTU2MSwgNzE1NjcsIDcxNTczLCA3MTU4MCwgNzE1ODYsIDcxNTkyLCA3MTU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNzE2MDMsIDcxNjA4LCA3MTYxMiwgNzE2MTYsIDcxNjIwLCA3MTYyNCwgNzE2MjgsIDcxNjMyLCAKKyAgICA3MTYzNiwgNzE2NDAsIDcxNjQ0LCA3MTY0OCwgNzE2NTIsIDcxNjU2LCA3MTY2MCwgNzE2NjQsIDcxNjY4LCA3MTY3MiwgCisgICAgNzE2NzYsIDcxNjgwLCA3MTY4NCwgNzE2ODgsIDcxNjkyLCA3MTY5NiwgNzE3MDAsIDcxNzA0LCA3MTcwOCwgNzE3MTIsIAorICAgIDcxNzE2LCA3MTcyMCwgMCwgMCwgMCwgNzE3MjQsIDcxNzI4LCA3MTczMiwgNzE3MzYsIDcxNzQwLCA3MTc0MywgNzE3NDksIAorICAgIDcxNzUyLCA3MTc1NiwgNzE3NTksIDcxNzY1LCA3MTc3MSwgNzE3NzksIDcxNzgyLCA3MTc4NiwgNzE3ODksIDcxNzkyLCAKKyAgICA3MTc5NywgNzE4MDIsIDcxODA2LCA3MTgxMiwgNzE4MTYsIDcxODIwLCA3MTgyNiwgNzE4MzAsIDcxODM2LCA3MTg0MiwgCisgICAgNzE4NDYsIDcxODUwLCA3MTg1NiwgNzE4NjAsIDcxODY2LCA3MTg3MiwgNzE4NzYsIDcxODgyLCA3MTg4NiwgNzE4OTIsIAorICAgIDcxODk1LCA3MTg5OCwgNzE5MDQsIDcxOTA4LCA3MTkxNCwgNzE5MTcsIDcxOTIwLCA3MTkyMywgNzE5MjksIDcxOTMzLCAKKyAgICA3MTkzNywgNzE5NDMsIDcxOTQ5LCA3MTk1MywgNzE5NTYsIDcxOTYyLCA3MTk2NywgNzE5NzIsIDcxOTc3LCA3MTk4NCwgCisgICAgNzE5ODksIDcxOTk2LCA3MjAwMSwgNzIwMDgsIDcyMDEzLCA3MjAxOSwgNzIwMjUsIDcyMDMxLCA3MjAzNCwgNzIwMzgsIAorICAgIDcyMDQyLCA3MjA0NywgNzIwNTIsIDcyMDU3LCA3MjA2MiwgNzIwNjcsIDcyMDcyLCA3MjA3NywgNzIwODIsIDcyMDg5LCAKKyAgICA3MjA5NCwgMCwgNzIxMDAsIDcyMTAzLCA3MjEwNywgNzIxMTAsIDcyMTEzLCA3MjExNiwgNzIxMTksIDcyMTIyLCA3MjEyNSwgCisgICAgNzIxMjgsIDcyMTMxLCAwLCAwLCAwLCAwLCA3MjEzNCwgNzIxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMTQ2LCAKKyAgICA3MjE0OSwgNzIxNTIsIDcyMTU1LCA3MjE1OCwgNzIxNjIsIDcyMTY1LCA3MjE2OCwgNzIxNzIsIDcyMTc2LCA3MjE4MCwgCisgICAgNzIxODQsIDcyMTg4LCA3MjE5MiwgNzIxOTYsIDcyMjAwLCA3MjIwNCwgNzIyMDgsIDcyMjEyLCA3MjIxNiwgNzIyMjAsIAorICAgIDcyMjI0LCA3MjIyOCwgNzIyMzIsIDcyMjM2LCA3MjIzOSwgNzIyNDMsIDcyMjQ2LCA3MjI1MCwgNzIyNTQsIDcyMjU4LCAKKyAgICA3MjI2MiwgNzIyNjYsIDcyMjY5LCA3MjI3MywgNzIyNzYsIDcyMjc5LCA3MjI4MywgNzIyODcsIDcyMjkxLCA3MjI5NSwgCisgICAgNzIyOTgsIDcyMzAzLCA3MjMwNywgNzIzMTIsIDcyMzE3LCA3MjMyMSwgNzIzMjYsIDcyMzMwLCA3MjMzNSwgNzIzNDAsIAorICAgIDcyMzQ1LCA3MjM1MCwgNzIzNTUsIDcyMzYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjM2NywgNzIzNzIsIAorICAgIDcyMzc3LCA3MjM4MiwgNzIzODksIDcyMzk0LCA3MjM5OSwgNzI0MDMsIDcyNDA4LCA3MjQxMywgNzI0MTcsIDcyNDIxLCAKKyAgICA3MjQyNiwgNzI0MzIsIDAsIDAsIDcyNDM5LCA3MjQ0MywgNzI0NDYsIDcyNDQ5LCA3MjQ1MiwgNzI0NTUsIDcyNDU4LCAKKyAgICA3MjQ2MSwgNzI0NjQsIDcyNDY3LCAwLCAwLCA3MjQ3MCwgNzI0NzUsIDcyNDgwLCA3MjQ4NiwgNzI0OTMsIDcyNDk5LCAKKyAgICA3MjUwNSwgNzI1MTEsIDcyNTE3LCA3MjUyMywgNzI1MjksIDcyNTM1LCA3MjU0MSwgNzI1NDcsIDcyNTUzLCA3MjU1OSwgCisgICAgNzI1NjQsIDcyNTcwLCA3MjU3NSwgNzI1ODEsIDcyNTg3LCA3MjU5NCwgNzI2MDAsIDcyNjA2LCA3MjYxMSwgNzI2MTgsIAorICAgIDcyNjI1LCA3MjYzMiwgNzI2MzgsIDcyNjQzLCA3MjY0OCwgNzI2NTMsIDAsIDAsIDAsIDAsIDcyNjYxLCA3MjY2NywgCisgICAgNzI2NzMsIDcyNjc5LCA3MjY4NSwgNzI2OTEsIDcyNjk3LCA3MjcwMywgNzI3MDksIDcyNzE1LCA3MjcyMSwgNzI3MjcsIAorICAgIDcyNzMzLCA3MjczOSwgNzI3NDUsIDcyNzUxLCA3Mjc1NywgNzI3NjMsIDcyNzY5LCA3Mjc3NSwgNzI3ODEsIDcyNzg2LCAKKyAgICA3Mjc5MSwgNzI3OTcsIDcyODAzLCA3MjgwOSwgNzI4MTUsIDcyODIxLCA3MjgyNywgNzI4MzMsIDcyODM5LCA3Mjg0NSwgCisgICAgNzI4NTEsIDcyODU3LCA3Mjg2MywgNzI4NjksIDcyODc1LCA3Mjg4MSwgNzI4ODcsIDcyODkzLCA3Mjg5OSwgNzI5MDUsIAorICAgIDcyOTExLCA3MjkxNywgNzI5MjMsIDcyOTI5LCA3MjkzNSwgNzI5NDAsIDcyOTQ1LCA3Mjk1MSwgNzI5NTYsIDcyOTYwLCAKKyAgICA3Mjk2NSwgNzI5NjksIDcyOTczLCA3Mjk3NywgNzI5ODMsIDcyOTg4LCA3Mjk5MywgNzI5OTgsIDczMDAzLCA3MzAwOCwgCisgICAgNzMwMTMsIDczMDE4LCA3MzAyNSwgNzMwMzIsIDczMDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzA0NiwgNzMwNTEsIDczMDU2LCA3MzA2MSwgNzMwNjgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMDc1LCAKKyAgICA3MzA4MiwgNzMwODksIDczMDk2LCA3MzEwMywgNzMxMDksIDczMTE1LCA3MzEyMiwgNzMxMjksIDczMTM2LCA3MzE0MywgCisgICAgNzMxNTAsIDczMTU3LCA3MzE2NCwgNzMxNzEsIDczMTc4LCA3MzE4NCwgNzMxOTEsIDczMTk4LCA3MzIwNSwgNzMyMTIsIAorICAgIDczMjE5LCA3MzIyNiwgNzMyMzMsIDczMjQwLCA3MzI0NywgNzMyNTQsIDczMjYxLCA3MzI3MCwgNzMyNzksIDczMjg4LCAKKyAgICA3MzI5NywgNzMzMDYsIDczMzE1LCA3MzMyNCwgNzMzMzMsIDczMzQxLCA3MzM0OSwgNzMzNTcsIDczMzY1LCA3MzM3MywgCisgICAgNzMzODEsIDczMzg5LCA3MzM5NywgNzM0MDMsIDczNDExLCAwLCAwLCA3MzQxOSwgNzM0MjYsIDczNDMyLCA3MzQzOCwgCisgICAgNzM0NDQsIDczNDUwLCA3MzQ1NiwgNzM0NjIsIDczNDY4LCA3MzQ3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzM0ODAsIDczNDg0LCAKKyAgICA3MzQ4OCwgNzM0OTIsIDczNDk2LCA3MzUwMCwgNzM1MDQsIDczNTA4LCA3MzUxMiwgNzM1MTYsIDczNTIwLCA3MzUyNCwgCisgICAgNzM1MjgsIDczNTMyLCA3MzUzNiwgNzM1NDAsIDczNTQ0LCA3MzU0OCwgNzM1NTIsIDczNTU2LCA3MzU2MCwgNzM1NjQsIAorICAgIDczNTY4LCAwLCAwLCAwLCAwLCA3MzU3MiwgNzM1NzYsIDczNTgwLCA3MzU4NCwgNzM1ODgsIDczNTkyLCA3MzU5NiwgCisgICAgNzM2MDAsIDczNjA0LCA3MzYwOCwgNzM2MTIsIDczNjE2LCA3MzYyMCwgNzM2MjQsIDczNjI4LCA3MzYzMiwgNzM2MzYsIAorICAgIDczNjQwLCA3MzY0NCwgNzM2NDgsIDczNjUyLCA3MzY1NiwgNzM2NjAsIDczNjY0LCA3MzY2OCwgNzM2NzIsIDczNjc2LCAKKyAgICA3MzY4MCwgNzM2ODQsIDczNjg4LCA3MzY5MiwgNzM2OTYsIDczNzAwLCA3MzcwNCwgNzM3MDgsIDczNzEyLCA3MzcxNiwgCisgICAgNzM3MjAsIDczNzI0LCA3MzcyOCwgNzM3MzIsIDczNzM2LCA3Mzc0MCwgNzM3NDQsIDczNzQ4LCA3Mzc1MiwgNzM3NTYsIAorICAgIDczNzYwLCA3Mzc2NCwgMCwgMCwgMCwgMCwgNzM3NjgsIDczNzcyLCA3Mzc3NiwgNzM3ODAsIDczNzg0LCA3Mzc4OCwgCisgICAgNzM3OTIsIDczNzk2LCA3MzgwMCwgNzM4MDQsIDczODA4LCA3MzgxMiwgNzM4MTYsIDczODIwLCA3MzgyNCwgNzM4MjgsIAorICAgIDczODMyLCA3MzgzNiwgNzM4NDAsIDczODQ0LCA3Mzg0OCwgNzM4NTIsIDczODU2LCA3Mzg2MCwgNzM4NjQsIDczODY4LCAKKyAgICA3Mzg3MiwgNzM4NzYsIDczODgwLCA3Mzg4NCwgNzM4ODgsIDczODkyLCA3Mzg5NiwgNzM5MDAsIDczOTA0LCA3MzkwOCwgCisgICAgNzM5MTIsIDczOTE2LCA3MzkyMCwgNzM5MjQsIDczOTI4LCA3MzkzMiwgNzM5MzYsIDczOTQwLCA3Mzk0NCwgNzM5NDgsIAorICAgIDczOTUyLCA3Mzk1NiwgNzM5NjAsIDczOTY0LCA3Mzk2OCwgNzM5NzIsIDczOTc2LCA3Mzk4MCwgNzM5ODQsIDczOTg4LCAKKyAgICA3Mzk5MiwgNzM5OTYsIDc0MDAwLCA3NDAwNCwgNzQwMDgsIDc0MDEyLCA3NDAxNiwgNzQwMjAsIDc0MDI0LCA3NDAyOCwgCisgICAgNzQwMzIsIDc0MDM2LCA3NDA0MCwgNzQwNDQsIDc0MDQ4LCA3NDA1MiwgNzQwNTYsIDc0MDYwLCA3NDA2NCwgNzQwNjgsIAorICAgIDc0MDcyLCA3NDA3NiwgNzQwODAsIDc0MDg0LCA3NDA4OCwgNzQwOTIsIDc0MDk2LCA3NDEwMCwgNzQxMDQsIDc0MTA4LCAKKyAgICA3NDExMiwgNzQxMTYsIDc0MTIwLCA3NDEyNCwgNzQxMjgsIDc0MTMyLCA3NDEzNiwgNzQxNDAsIDc0MTQ0LCA3NDE0OCwgCisgICAgNzQxNTIsIDc0MTU2LCA3NDE2MCwgNzQxNjQsIDc0MTY4LCA3NDE3MiwgNzQxNzYsIDc0MTgwLCA3NDE4NCwgNzQxODgsIAorICAgIDc0MTkyLCA3NDE5NiwgNzQyMDAsIDc0MjA0LCA3NDIwOCwgNzQyMTIsIDc0MjE2LCA3NDIyMCwgNzQyMjQsIDc0MjI4LCAKKyAgICA3NDIzMiwgNzQyMzYsIDc0MjQwLCA3NDI0NCwgNzQyNDgsIDc0MjUyLCA3NDI1NiwgNzQyNjAsIDc0MjY0LCA3NDI2OCwgCisgICAgNzQyNzIsIDc0Mjc2LCA3NDI4MCwgNzQyODQsIDc0Mjg4LCA3NDI5MiwgNzQyOTYsIDc0MzAwLCA3NDMwNCwgNzQzMDgsIAorICAgIDc0MzEyLCA3NDMxNiwgNzQzMjAsIDc0MzI0LCA3NDMyOCwgNzQzMzIsIDc0MzM2LCA3NDM0MCwgNzQzNDQsIDc0MzQ4LCAKKyAgICA3NDM1MiwgNzQzNTYsIDc0MzYwLCA3NDM2NCwgNzQzNjgsIDc0MzcyLCA3NDM3NiwgNzQzODAsIDc0Mzg0LCA3NDM4OCwgCisgICAgNzQzOTIsIDc0Mzk2LCA3NDQwMCwgNzQ0MDQsIDc0NDA4LCA3NDQxMiwgNzQ0MTYsIDc0NDIwLCA3NDQyNCwgNzQ0MjgsIAorICAgIDc0NDMyLCA3NDQzNiwgNzQ0NDAsIDc0NDQ0LCA3NDQ0OCwgNzQ0NTIsIDc0NDU2LCA3NDQ2MCwgNzQ0NjQsIDc0NDY4LCAKKyAgICA3NDQ3MiwgNzQ0NzYsIDc0NDgwLCA3NDQ4NCwgNzQ0ODgsIDc0NDkyLCA3NDQ5NiwgNzQ1MDAsIDc0NTA0LCA3NDUwOCwgCisgICAgNzQ1MTIsIDc0NTE2LCA3NDUyMCwgNzQ1MjQsIDc0NTI4LCA3NDUzMiwgNzQ1MzYsIDc0NTQwLCA3NDU0NCwgNzQ1NDgsIAorICAgIDc0NTUyLCA3NDU1NiwgNzQ1NjAsIDc0NTY0LCA3NDU2OCwgNzQ1NzIsIDc0NTc2LCA3NDU4MCwgNzQ1ODQsIDc0NTg4LCAKKyAgICA3NDU5MiwgNzQ1OTYsIDc0NjAwLCA3NDYwNCwgNzQ2MDgsIDc0NjEyLCA3NDYxNiwgNzQ2MjAsIDc0NjI0LCA3NDYyOCwgCisgICAgNzQ2MzIsIDc0NjM2LCA3NDY0MCwgNzQ2NDQsIDc0NjQ4LCA3NDY1MiwgNzQ2NTYsIDc0NjYwLCA3NDY2NCwgNzQ2NjgsIAorICAgIDc0NjcyLCA3NDY3NiwgNzQ2ODAsIDc0Njg0LCA3NDY4OCwgNzQ2OTIsIDc0Njk2LCA3NDcwMCwgNzQ3MDQsIDc0NzA4LCAKKyAgICA3NDcxMiwgNzQ3MTYsIDc0NzIwLCA3NDcyNCwgNzQ3MjgsIDc0NzMyLCA3NDczNiwgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgCisgICAgNzQ3NTIsIDc0NzU2LCA3NDc2MCwgNzQ3NjQsIDc0NzY4LCA3NDc3MiwgNzQ3NzYsIDc0NzgwLCA3NDc4NCwgNzQ3ODgsIAorICAgIDc0NzkyLCA3NDc5NiwgNzQ4MDAsIDc0ODA0LCA3NDgwOCwgNzQ4MTIsIDc0ODE2LCA3NDgyMCwgNzQ4MjQsIDc0ODI4LCAKKyAgICA3NDgzMiwgNzQ4MzYsIDc0ODQwLCA3NDg0NCwgNzQ4NDgsIDc0ODUyLCA3NDg1NiwgNzQ4NjAsIDc0ODY0LCA3NDg2OCwgCisgICAgNzQ4NzIsIDc0ODc2LCA3NDg4MCwgNzQ4ODQsIDc0ODg4LCA3NDg5MiwgNzQ4OTYsIDc0OTAwLCA3NDkwNCwgNzQ5MDgsIAorICAgIDc0OTEyLCA3NDkxNiwgNzQ5MjAsIDc0OTI0LCA3NDkyOCwgNzQ5MzIsIDc0OTM2LCA3NDk0MCwgNzQ5NDQsIDc0OTQ4LCAKKyAgICA3NDk1MiwgNzQ5NTYsIDc0OTYwLCA3NDk2NCwgNzQ5NjgsIDc0OTcyLCAwLCAwLCA3NDk3NiwgNzQ5ODAsIDc0OTg0LCAKKyAgICA3NDk4OCwgNzQ5OTIsIDc0OTk2LCA3NTAwMCwgNzUwMDQsIDc1MDA4LCA3NTAxMiwgNzUwMTYsIDc1MDIwLCA3NTAyNCwgCisgICAgNzUwMjgsIDc1MDMyLCA3NTAzNiwgNzUwNDAsIDc1MDQ0LCA3NTA0OCwgNzUwNTIsIDc1MDU2LCA3NTA2MCwgNzUwNjQsIAorICAgIDc1MDY4LCA3NTA3MiwgNzUwNzYsIDc1MDgwLCA3NTA4NCwgNzUwODgsIDc1MDkyLCA3NTA5NiwgNzUxMDAsIDc1MTA0LCAKKyAgICA3NTEwOCwgNzUxMTIsIDc1MTE2LCA3NTEyMCwgNzUxMjQsIDc1MTI4LCA3NTEzMiwgNzUxMzYsIDc1MTQwLCA3NTE0NCwgCisgICAgNzUxNDgsIDc1MTUyLCA3NTE1NiwgNzUxNjAsIDc1MTY0LCA3NTE2OCwgNzUxNzIsIDc1MTc2LCA3NTE4MCwgNzUxODQsIAorICAgIDc1MTg4LCA3NTE5MiwgNzUxOTYsIDc1MjAwLCA3NTIwNCwgNzUyMDgsIDc1MjEyLCA3NTIxNiwgNzUyMjAsIDAsIDAsIAorICAgIDc1MjI0LCA3NTIyOCwgNzUyMzIsIDc1MjM2LCA3NTI0MCwgNzUyNDQsIDc1MjQ4LCA3NTI1MiwgNzUyNTYsIDc1MjYwLCAKKyAgICA3NTI2NCwgNzUyNjgsIDc1MjcyLCA3NTI3NiwgNzUyODAsIDc1Mjg0LCA3NTI4OCwgNzUyOTIsIDc1Mjk2LCA3NTMwMCwgCisgICAgNzUzMDQsIDc1MzA4LCA3NTMxMiwgNzUzMTYsIDc1MzIwLCA3NTMyNCwgNzUzMjgsIDc1MzMyLCA3NTMzNiwgNzUzNDAsIAorICAgIDc1MzQ0LCA3NTM0OCwgNzUzNTIsIDc1MzU2LCA3NTM2MCwgNzUzNjQsIDc1MzY4LCA3NTM3MiwgNzUzNzYsIDc1MzgwLCAKKyAgICA3NTM4NCwgNzUzODgsIDc1MzkyLCA3NTM5NiwgNzU0MDAsIDc1NDA0LCA3NTQwOCwgNzU0MTIsIDc1NDE2LCA3NTQyMCwgCisgICAgNzU0MjQsIDc1NDI4LCA3NTQzMiwgNzU0MzYsIDc1NDQwLCA3NTQ0NCwgNzU0NDgsIDc1NDUyLCA3NTQ1NiwgNzU0NjAsIAorICAgIDc1NDY0LCA3NTQ2OCwgNzU0NzIsIDc1NDc2LCA3NTQ4MCwgNzU0ODQsIDc1NDg4LCA3NTQ5MiwgNzU0OTYsIDc1NTAwLCAKKyAgICA3NTUwNCwgNzU1MDgsIDc1NTEyLCA3NTUxNiwgNzU1MjAsIDc1NTI0LCA3NTUyOCwgNzU1MzIsIDc1NTM2LCA3NTU0MCwgCisgICAgNzU1NDQsIDc1NTQ4LCA3NTU1MiwgNzU1NTYsIDc1NTYwLCA3NTU2NCwgNzU1NjgsIDc1NTcyLCA3NTU3NiwgNzU1ODAsIAorICAgIDc1NTg0LCA3NTU4OCwgNzU1OTIsIDc1NTk2LCA3NTYwMCwgNzU2MDQsIDc1NjA4LCA3NTYxMiwgNzU2MTYsIDc1NjIwLCAKKyAgICA3NTYyNCwgNzU2MjgsIDc1NjMyLCA3NTYzNiwgNzU2NDAsIDc1NjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3NTY0OCwgNzU2NTMsIDc1NjU4LCA3NTY2MywgNzU2NjgsIDc1NjczLCA3NTY4MSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU2ODYsIDc1NjkzLCA3NTcwMCwgNzU3MDcsIDc1NzE0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3NTcyMSwgNzU3MjgsIDc1NzM1LCA3NTc0NSwgNzU3NTEsIDc1NzU3LCA3NTc2MywgNzU3NjksIDc1Nzc1LCA3NTc4MSwgCisgICAgNzU3ODgsIDc1Nzk0LCA3NTgwMCwgNzU4MDYsIDc1ODE1LCA3NTgyNCwgNzU4MzYsIDc1ODQ4LCA3NTg1NCwgNzU4NjAsIAorICAgIDc1ODY2LCA3NTg3MywgNzU4ODAsIDc1ODg3LCA3NTg5NCwgNzU5MDEsIDAsIDc1OTA4LCA3NTkxNSwgNzU5MjIsIDc1OTMwLCAKKyAgICA3NTkzNywgMCwgNzU5NDQsIDAsIDc1OTUxLCA3NTk1OCwgMCwgNzU5NjUsIDc1OTczLCAwLCA3NTk4MCwgNzU5ODcsIAorICAgIDc1OTk0LCA3NjAwMSwgNzYwMDgsIDc2MDE1LCA3NjAyMiwgNzYwMjksIDc2MDM2LCA3NjA0MywgNzYwNDgsIDc2MDU1LCAKKyAgICA3NjA2MiwgNzYwNjgsIDc2MDc0LCA3NjA4MCwgNzYwODYsIDc2MDkyLCA3NjA5OCwgNzYxMDQsIDc2MTEwLCA3NjExNiwgCisgICAgNzYxMjIsIDc2MTI4LCA3NjEzNCwgNzYxNDAsIDc2MTQ2LCA3NjE1MiwgNzYxNTgsIDc2MTY0LCA3NjE3MCwgNzYxNzYsIAorICAgIDc2MTgyLCA3NjE4OCwgNzYxOTQsIDc2MjAwLCA3NjIwNiwgNzYyMTIsIDc2MjE4LCA3NjIyNCwgNzYyMzAsIDc2MjM2LCAKKyAgICA3NjI0MiwgNzYyNDgsIDc2MjU0LCA3NjI2MCwgNzYyNjYsIDc2MjcyLCA3NjI3OCwgNzYyODQsIDc2MjkwLCA3NjI5NiwgCisgICAgNzYzMDIsIDc2MzA4LCA3NjMxNCwgNzYzMjAsIDc2MzI2LCA3NjMzMiwgNzYzMzgsIDc2MzQ0LCA3NjM1MCwgNzYzNTYsIAorICAgIDc2MzYyLCA3NjM2OCwgNzYzNzQsIDc2MzgwLCA3NjM4NiwgNzYzOTIsIDc2Mzk4LCA3NjQwNCwgNzY0MTAsIDc2NDE2LCAKKyAgICA3NjQyMiwgNzY0MjgsIDc2NDM0LCA3NjQ0MCwgNzY0NDYsIDc2NDUyLCA3NjQ1OCwgNzY0NjQsIDc2NDcwLCA3NjQ3NiwgCisgICAgNzY0ODIsIDc2NDg4LCA3NjQ5NCwgNzY1MDAsIDc2NTA2LCA3NjUxMiwgNzY1MTgsIDc2NTI2LCA3NjUzNCwgNzY1NDAsIAorICAgIDc2NTQ2LCA3NjU1MiwgNzY1NTgsIDc2NTY3LCA3NjU3NiwgNzY1ODQsIDc2NTkyLCA3NjYwMCwgNzY2MDgsIDc2NjE2LCAKKyAgICA3NjYyNCwgNzY2MzIsIDc2NjQwLCA3NjY0NywgNzY2NTQsIDc2NjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3NjY3NCwgNzY2ODAsIDc2Njg2LCA3NjY5MiwgNzY2OTgsIDc2NzAzLCA3NjcwOCwgNzY3MTQsIDc2NzIwLCA3NjcyNiwgCisgICAgNzY3MzIsIDc2NzQwLCA3Njc0NiwgNzY3NTIsIDc2NzYwLCA3Njc2OCwgNzY3NzYsIDc2Nzg0LCA3Njc4OSwgNzY3OTQsIAorICAgIDc2Nzk5LCA3NjgwNCwgNzY4MTYsIDc2ODI4LCA3NjgzOCwgNzY4NDgsIDc2ODU5LCA3Njg3MCwgNzY4ODEsIDc2ODkyLCAKKyAgICA3NjkwMiwgNzY5MTIsIDc2OTIzLCA3NjkzNCwgNzY5NDUsIDc2OTU2LCA3Njk2NiwgNzY5NzYsIDc2OTg2LCA3NzAwMSwgCisgICAgNzcwMTYsIDc3MDMxLCA3NzAzOCwgNzcwNDUsIDc3MDUyLCA3NzA1OSwgNzcwNjksIDc3MDc5LCA3NzA4OSwgNzcxMDAsIAorICAgIDc3MTEwLCA3NzExOCwgNzcxMjYsIDc3MTM1LCA3NzE0MywgNzcxNTIsIDc3MTYwLCA3NzE2OCwgNzcxNzYsIDc3MTg1LCAKKyAgICA3NzE5MywgNzcyMDIsIDc3MjEwLCA3NzIxOCwgNzcyMjYsIDc3MjM1LCA3NzI0MywgNzcyNTAsIDc3MjU3LCA3NzI2NCwgCisgICAgNzcyNzEsIDc3Mjc5LCA3NzI4NywgNzcyOTUsIDc3MzAzLCA3NzMxMSwgNzczMjAsIDc3MzI4LCA3NzMzNiwgNzczNDQsIAorICAgIDc3MzUyLCA3NzM2MCwgNzczNjksIDc3Mzc3LCA3NzM4NSwgNzczOTMsIDc3NDAxLCA3NzQwOSwgNzc0MTcsIDc3NDI1LCAKKyAgICA3NzQzMywgNzc0NDEsIDc3NDQ5LCA3NzQ1OCwgNzc0NjYsIDc3NDc1LCA3NzQ4MywgNzc0OTEsIDc3NDk5LCA3NzUwOCwgCisgICAgNzc1MTYsIDc3NTI0LCA3NzUzMiwgNzc1NDAsIDc3NTQ5LCA3NzU1OCwgNzc1NjYsIDc3NTc1LCA3NzU4MywgNzc1OTEsIAorICAgIDc3NTk5LCA3NzYwOCwgNzc2MTYsIDc3NjI1LCA3NzYzMywgNzc2NDAsIDc3NjQ3LCA3NzY1NSwgNzc2NjIsIDc3NjcwLCAKKyAgICA3NzY3NywgNzc2ODUsIDc3NjkzLCA3NzcwMiwgNzc3MTAsIDc3NzE5LCA3NzcyNywgNzc3MzUsIDc3NzQzLCA3Nzc1MiwgCisgICAgNzc3NjAsIDc3NzY3LCA3Nzc3NCwgNzc3ODIsIDc3Nzg5LCA3Nzc5NywgNzc4MDQsIDc3ODE0LCA3NzgyNCwgNzc4MzQsIAorICAgIDc3ODQzLCA3Nzg1MiwgNzc4NjEsIDc3ODcwLCA3Nzg3OSwgNzc4ODksIDc3OTAwLCA3NzkxMSwgNzc5MjEsIDc3OTMyLCAKKyAgICA3Nzk0MywgNzc5NTMsIDc3OTYyLCA3Nzk3MSwgNzc5NzksIDc3OTg4LCA3Nzk5NywgNzgwMDUsIDc4MDE0LCA3ODAyMywgCisgICAgNzgwMzEsIDc4MDQwLCA3ODA0OSwgNzgwNTcsIDc4MDY2LCA3ODA3NSwgNzgwODMsIDc4MDkyLCA3ODEwMSwgNzgxMDksIAorICAgIDc4MTE4LCA3ODEyNiwgNzgxMzUsIDc4MTQzLCA3ODE1MSwgNzgxNjAsIDc4MTY4LCA3ODE3NywgNzgxODUsIDc4MTkzLCAKKyAgICA3ODIwMiwgNzgyMTAsIDc4MjE3LCA3ODIyNCwgNzgyMzMsIDc4MjQyLCA3ODI1MCwgNzgyNTksIDc4MjY4LCA3ODI3NiwgCisgICAgNzgyODYsIDc4Mjk0LCA3ODMwMiwgNzgzMDksIDc4MzE3LCA3ODMyNSwgNzgzMzIsIDc4MzQyLCA3ODM1MiwgNzgzNjMsIAorICAgIDc4MzczLCA3ODM4NCwgNzgzOTIsIDc4NDAwLCA3ODQwOSwgNzg0MTcsIDc4NDI2LCA3ODQzNCwgNzg0NDIsIDc4NDUxLCAKKyAgICA3ODQ1OSwgNzg0NjgsIDc4NDc2LCA3ODQ4MywgNzg0OTAsIDc4NDk3LCA3ODUwNCwgNzg1MTIsIDc4NTIwLCA3ODUyOCwgCisgICAgNzg1MzYsIDc4NTQ1LCA3ODU1MywgNzg1NjEsIDc4NTcwLCA3ODU3OCwgNzg1ODYsIDc4NTk0LCA3ODYwMywgNzg2MTEsIAorICAgIDc4NjE5LCA3ODYyNywgNzg2MzUsIDc4NjQzLCA3ODY1MSwgNzg2NTksIDc4NjY3LCA3ODY3NSwgNzg2ODQsIDc4NjkyLCAKKyAgICA3ODcwMCwgNzg3MDgsIDc4NzE2LCA3ODcyNCwgNzg3MzMsIDc4NzQyLCA3ODc1MCwgNzg3NTgsIDc4NzY2LCA3ODc3NSwgCisgICAgNzg3ODMsIDc4NzkyLCA3ODc5OSwgNzg4MDYsIDc4ODE0LCA3ODgyMSwgNzg4MjksIDc4ODM3LCA3ODg0NiwgNzg4NTQsIAorICAgIDc4ODYzLCA3ODg3MSwgNzg4NzksIDc4ODg5LCA3ODg5NiwgNzg5MDMsIDc4OTExLCA3ODkxOCwgNzg5MjYsIDc4OTM2LCAKKyAgICA3ODk0NywgNzg5NTUsIDc4OTY0LCA3ODk3MiwgNzg5ODEsIDc4OTg5LCA3ODk5OCwgNzkwMDYsIDc5MDE1LCA3OTAyMywgCisgICAgNzkwMzIsIDc5MDQxLCA3OTA0OSwgNzkwNTcsIDc5MDY1LCA3OTA3NCwgNzkwODEsIDc5MDg5LCA3OTA5OCwgNzkxMDcsIAorICAgIDc5MTE2LCA3OTEyNSwgNzkxMzMsIDc5MTQyLCA3OTE1MCwgNzkxNTksIDc5MTY3LCA3OTE3NiwgNzkxODQsIDc5MTkzLCAKKyAgICA3OTIwMSwgNzkyMDksIDc5MjE2LCA3OTIyNCwgNzkyMzEsIDc5MjQwLCA3OTI0OCwgNzkyNTcsIDc5MjY1LCA3OTI3NCwgCisgICAgNzkyODIsIDc5MjkwLCA3OTI5OCwgNzkzMDcsIDc5MzE1LCA3OTMyNCwgNzkzMzMsIDc5MzQyLCA3OTM1MSwgNzkzNjAsIAorICAgIDc5MzY4LCA3OTM3NywgNzkzODUsIDc5Mzk0LCA3OTQwMiwgNzk0MTEsIDc5NDE5LCA3OTQyOCwgNzk0MzYsIDc5NDQ0LCAKKyAgICA3OTQ1MSwgNzk0NTksIDc5NDY2LCA3OTQ3NSwgNzk0ODMsIDc5NDkyLCA3OTUwMCwgNzk1MDksIDc5NTE3LCA3OTUyNSwgCisgICAgNzk1MzMsIDc5NTQyLCA3OTU1MCwgNzk1NTksIDc5NTY4LCA3OTU3NywgNzk1ODYsIDc5NTk0LCA3OTYwMiwgNzk2MTEsIAorICAgIDc5NjE5LCA3OTYyOCwgNzk2MzcsIDc5NjQ1LCA3OTY1MywgNzk2NjEsIDc5NjcwLCA3OTY3OCwgNzk2ODYsIDc5Njk1LCAKKyAgICA3OTcwMywgNzk3MTEsIDc5NzE5LCA3OTcyNywgNzk3MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDc5NzM3LCA3OTc0NywgNzk3NTcsIDc5NzY3LCA3OTc3NywgNzk3ODgsIDc5Nzk4LCA3OTgwOCwgNzk4MTksIAorICAgIDc5ODI4LCA3OTgzNywgNzk4NDYsIDc5ODU2LCA3OTg2NiwgNzk4NzYsIDc5ODg3LCA3OTg5NywgNzk5MDcsIDc5OTE3LCAKKyAgICA3OTkyNywgNzk5MzcsIDc5OTQ3LCA3OTk1NywgNzk5NjcsIDc5OTc3LCA3OTk4NywgNzk5OTcsIDgwMDA4LCA4MDAxOSwgCisgICAgODAwMjksIDgwMDM5LCA4MDA1MCwgODAwNjEsIDgwMDcyLCA4MDA4MiwgODAwOTIsIDgwMTAyLCA4MDExMiwgODAxMjIsIAorICAgIDgwMTMyLCA4MDE0MiwgODAxNTMsIDgwMTYzLCA4MDE3MywgODAxODQsIDgwMTk1LCA4MDIwNiwgODAyMTYsIDgwMjI2LCAKKyAgICA4MDIzNiwgODAyNDYsIDgwMjU3LCA4MDI2NywgODAyNzcsIDgwMjg4LCA4MDI5OSwgODAzMDksIDgwMzE5LCA4MDMyOCwgCisgICAgODAzMzcsIDgwMzQ2LCA4MDM1NSwgODAzNjQsIDgwMzc0LCAwLCAwLCA4MDM4NCwgODAzOTQsIDgwNDA0LCA4MDQxNCwgCisgICAgODA0MjQsIDgwNDM1LCA4MDQ0NSwgODA0NTUsIDgwNDY2LCA4MDQ3NiwgODA0ODcsIDgwNDk2LCA4MDUwNSwgODA1MTYsIAorICAgIDgwNTI2LCA4MDUzNywgODA1NDgsIDgwNTYwLCA4MDU3MCwgODA1ODEsIDgwNTkwLCA4MDYwMCwgODA2MTAsIDgwNjIyLCAKKyAgICA4MDYzMiwgODA2NDIsIDgwNjUyLCA4MDY2MiwgODA2NzIsIDgwNjgxLCA4MDY5MCwgODA2OTksIDgwNzA4LCA4MDcxOCwgCisgICAgODA3MjgsIDgwNzM4LCA4MDc0OCwgODA3NTgsIDgwNzY4LCA4MDc3OCwgODA3ODgsIDgwNzk4LCA4MDgwOCwgODA4MTgsIAorICAgIDgwODI4LCA4MDgzNywgODA4NDYsIDgwODU1LCA4MDg2NSwgODA4NzUsIDgwODg1LCA4MDg5NSwgODA5MDUsIDgwOTE2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDkyNiwgODA5NDEsIDgwOTU2LCA4MDk2MiwgCisgICAgODA5NjgsIDgwOTc0LCA4MDk4MCwgODA5ODYsIDgwOTkyLCA4MDk5OCwgODEwMDQsIDgxMDEyLCA4MTAxNiwgODEwMTksIDAsIAorICAgIDAsIDgxMDI3LCA4MTAzMCwgODEwMzMsIDgxMDM2LCA4MTAzOSwgODEwNDIsIDgxMDQ1LCA4MTA0OCwgODEwNTEsIDgxMDU0LCAKKyAgICA4MTA1NywgODEwNjAsIDgxMDYzLCA4MTA2NiwgODEwNjksIDgxMDcyLCA4MTA3NSwgODEwODMsIDgxMDkyLCA4MTEwMywgCisgICAgODExMTEsIDgxMTE5LCA4MTEyOCwgODExMzcsIDgxMTQ4LCA4MTE2MCwgMCwgMCwgMCwgMCwgMCwgMCwgODExNjksIDgxMTc0LCAKKyAgICA4MTE3OSwgODExODYsIDgxMTkzLCA4MTE5OSwgODEyMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMjEwLCAKKyAgICA4MTIyMCwgODEyMzAsIDgxMjQwLCA4MTI0OSwgODEyNjAsIDgxMjY5LCA4MTI3OCwgODEyODgsIDgxMjk4LCA4MTMxMCwgCisgICAgODEzMjIsIDgxMzMzLCA4MTM0NCwgODEzNTUsIDgxMzY2LCA4MTM3NiwgODEzODYsIDgxMzk2LCA4MTQwNiwgODE0MTcsIAorICAgIDgxNDI4LCA4MTQzMiwgODE0MzcsIDgxNDQ2LCA4MTQ1NSwgODE0NTksIDgxNDYzLCA4MTQ2NywgODE0NzIsIDgxNDc3LCAKKyAgICA4MTQ4MiwgODE0ODcsIDgxNDkwLCA4MTQ5NCwgMCwgODE0OTksIDgxNTAyLCA4MTUwNSwgODE1MDksIDgxNTEzLCA4MTUxOCwgCisgICAgODE1MjIsIDgxNTI2LCA4MTUzMSwgODE1MzYsIDgxNTQzLCA4MTU1MCwgODE1NTMsIDgxNTU2LCA4MTU1OSwgODE1NjIsIAorICAgIDgxNTY1LCA4MTU2OSwgODE1NzMsIDAsIDgxNTc3LCA4MTU4MiwgODE1ODYsIDgxNTkwLCAwLCAwLCAwLCAwLCA4MTU5NSwgCisgICAgODE2MDAsIDgxNjA3LCA4MTYxMiwgODE2MTcsIDAsIDgxNjIyLCA4MTYyNywgODE2MzIsIDgxNjM3LCA4MTY0MiwgODE2NDcsIAorICAgIDgxNjUyLCA4MTY1NywgODE2NjIsIDgxNjY3LCA4MTY3MiwgODE2NzcsIDgxNjg2LCA4MTY5NSwgODE3MDMsIDgxNzExLCAKKyAgICA4MTcyMCwgODE3MjksIDgxNzM4LCA4MTc0NywgODE3NTUsIDgxNzYzLCA4MTc3MSwgODE3NzksIDgxNzg0LCA4MTc4OSwgCisgICAgODE3OTUsIDgxODAxLCA4MTgwNywgODE4MTMsIDgxODIxLCA4MTgyOSwgODE4MzUsIDgxODQxLCA4MTg0NywgODE4NTMsIAorICAgIDgxODU5LCA4MTg2NSwgODE4NzEsIDgxODc3LCA4MTg4MiwgODE4ODcsIDgxODkyLCA4MTg5NywgODE5MDIsIDgxOTA3LCAKKyAgICA4MTkxMiwgODE5MTcsIDgxOTIzLCA4MTkyOSwgODE5MzUsIDgxOTQxLCA4MTk0NywgODE5NTMsIDgxOTU5LCA4MTk2NSwgCisgICAgODE5NzEsIDgxOTc3LCA4MTk4MywgODE5ODksIDgxOTk1LCA4MjAwMSwgODIwMDcsIDgyMDEzLCA4MjAxOSwgODIwMjUsIAorICAgIDgyMDMxLCA4MjAzNywgODIwNDMsIDgyMDQ5LCA4MjA1NSwgODIwNjEsIDgyMDY3LCA4MjA3MywgODIwNzksIDgyMDg1LCAKKyAgICA4MjA5MSwgODIwOTcsIDgyMTAzLCA4MjEwOSwgODIxMTUsIDgyMTIxLCA4MjEyNywgODIxMzMsIDgyMTM5LCA4MjE0NSwgCisgICAgODIxNTEsIDgyMTU3LCA4MjE2MywgODIxNjksIDgyMTc1LCA4MjE4MSwgODIxODcsIDgyMTkzLCA4MjE5OSwgODIyMDUsIAorICAgIDgyMjExLCA4MjIxNywgODIyMjMsIDgyMjI5LCA4MjIzNSwgODIyNDEsIDgyMjQ3LCA4MjI1MywgODIyNTksIDgyMjY1LCAKKyAgICA4MjI3MSwgODIyNzcsIDgyMjgyLCA4MjI4NywgODIyOTIsIDgyMjk3LCA4MjMwMywgODIzMDksIDgyMzE1LCA4MjMyMSwgCisgICAgODIzMjcsIDgyMzMzLCA4MjMzOSwgODIzNDUsIDgyMzUxLCA4MjM1NywgODIzNjMsIDgyMzY5LCA4MjM3NCwgODIzNzksIAorICAgIDgyMzg0LCA4MjM4OSwgODI0MDEsIDgyNDEzLCA4MjQyNCwgODI0MzUsIDgyNDQ3LCA4MjQ1OSwgODI0NjcsIDAsIDAsIAorICAgIDgyNDc1LCAwLCA4MjQ4MywgODI0ODcsIDgyNDkxLCA4MjQ5NCwgODI0OTgsIDgyNTAyLCA4MjUwNSwgODI1MDgsIDgyNTEyLCAKKyAgICA4MjUxNiwgODI1MTksIDgyNTIyLCA4MjUyNSwgODI1MjgsIDgyNTMzLCA4MjUzNiwgODI1NDAsIDgyNTQzLCA4MjU0NiwgCisgICAgODI1NDksIDgyNTUyLCA4MjU1NSwgODI1NTgsIDgyNTYxLCA4MjU2NCwgODI1NjcsIDgyNTcwLCA4MjU3MywgODI1NzcsIAorICAgIDgyNTgxLCA4MjU4NSwgODI1ODksIDgyNTk0LCA4MjU5OSwgODI2MDUsIDgyNjExLCA4MjYxNywgODI2MjIsIDgyNjI4LCAKKyAgICA4MjYzNCwgODI2NDAsIDgyNjQ1LCA4MjY1MSwgODI2NTcsIDgyNjYyLCA4MjY2NywgODI2NzIsIDgyNjc3LCA4MjY4MywgCisgICAgODI2ODksIDgyNjk0LCA4MjY5OSwgODI3MDUsIDgyNzEwLCA4MjcxNiwgODI3MjIsIDgyNzI4LCA4MjczNCwgODI3NDAsIAorICAgIDgyNzQ0LCA4Mjc0OSwgODI3NTMsIDgyNzU4LCA4Mjc2MiwgODI3NjcsIDgyNzcyLCA4Mjc3OCwgODI3ODQsIDgyNzkwLCAKKyAgICA4Mjc5NSwgODI4MDEsIDgyODA3LCA4MjgxMywgODI4MTgsIDgyODI0LCA4MjgzMCwgODI4MzUsIDgyODQwLCA4Mjg0NSwgCisgICAgODI4NTAsIDgyODU2LCA4Mjg2MiwgODI4NjcsIDgyODcyLCA4Mjg3OCwgODI4ODMsIDgyODg5LCA4Mjg5NSwgODI5MDEsIAorICAgIDgyOTA3LCA4MjkxMywgODI5MTgsIDgyOTIyLCA4MjkyNywgODI5MzAsIDgyOTM1LCA4Mjk0MCwgODI5NDYsIDgyOTUxLCAKKyAgICA4Mjk1NiwgODI5NjAsIDgyOTY2LCA4Mjk3MSwgODI5NzYsIDgyOTgxLCA4Mjk4NiwgODI5OTEsIDgyOTk2LCA4MzAwMSwgCisgICAgODMwMDcsIDgzMDEzLCA4MzAxOSwgODMwMjcsIDgzMDMxLCA4MzAzNSwgODMwMzksIDgzMDQzLCA4MzA0NywgODMwNTEsIAorICAgIDgzMDU2LCA4MzA2MSwgODMwNjYsIDgzMDcxLCA4MzA3NiwgODMwODEsIDgzMDg2LCA4MzA5MSwgODMwOTYsIDgzMTAxLCAKKyAgICA4MzEwNiwgODMxMTEsIDgzMTE2LCA4MzEyMCwgODMxMjQsIDgzMTI5LCA4MzEzNCwgODMxMzksIDgzMTQ0LCA4MzE0OCwgCisgICAgODMxNTMsIDgzMTU4LCA4MzE2MywgODMxNjgsIDgzMTcyLCA4MzE3NywgODMxODIsIDgzMTg3LCA4MzE5MiwgODMxOTYsIAorICAgIDgzMjAxLCA4MzIwNiwgODMyMTAsIDgzMjE1LCA4MzIyMCwgODMyMjUsIDgzMjMwLCA4MzIzNSwgODMyMzksIDgzMjQ2LCAKKyAgICA4MzI1MywgODMyNTcsIDgzMjYyLCA4MzI2NywgODMyNzIsIDgzMjc3LCA4MzI4MiwgODMyODcsIDgzMjkyLCA4MzI5NywgCisgICAgODMzMDIsIDgzMzA3LCA4MzMxMiwgODMzMTcsIDgzMzIyLCA4MzMyNywgODMzMzIsIDgzMzM3LCA4MzM0MiwgODMzNDcsIAorICAgIDgzMzUyLCA4MzM1NywgODMzNjIsIDgzMzY3LCA4MzM3MiwgODMzNzcsIDgzMzgyLCA4MzM4NywgODMzOTIsIDgzMzk3LCAKKyAgICA4MzQwMiwgMCwgMCwgMCwgODM0MDcsIDgzNDExLCA4MzQxNiwgODM0MjAsIDgzNDI1LCA4MzQzMCwgMCwgMCwgODM0MzQsIAorICAgIDgzNDM5LCA4MzQ0NCwgODM0NDgsIDgzNDUzLCA4MzQ1OCwgMCwgMCwgODM0NjMsIDgzNDY4LCA4MzQ3MiwgODM0NzcsIAorICAgIDgzNDgyLCA4MzQ4NywgMCwgMCwgODM0OTIsIDgzNDk3LCA4MzUwMiwgMCwgMCwgMCwgODM1MDYsIDgzNTEwLCA4MzUxNCwgCisgICAgODM1MTcsIDgzNTIwLCA4MzUyNCwgODM1MjgsIDAsIDgzNTMyLCA4MzUzOCwgODM1NDEsIDgzNTQ1LCA4MzU0OCwgODM1NTIsIAorICAgIDgzNTU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MzU2MCwgODM1NjYsIDgzNTcyLCA4MzU3OCwgODM1ODQsIAorICAgIDAsIDAsIDgzNTg4LCA4MzU5NCwgODM2MDAsIDgzNjA2LCA4MzYxMiwgODM2MTgsIDgzNjI1LCA4MzYzMiwgODM2MzksIAorICAgIDgzNjQ2LCA4MzY1MywgODM2NjAsIDAsIDgzNjY3LCA4MzY3NCwgODM2ODEsIDgzNjg3LCA4MzY5NCwgODM3MDEsIDgzNzA4LCAKKyAgICA4MzcxNSwgODM3MjEsIDgzNzI4LCA4MzczNSwgODM3NDIsIDgzNzQ5LCA4Mzc1NSwgODM3NjIsIDgzNzY5LCA4Mzc3NiwgCisgICAgODM3ODMsIDgzNzg5LCA4Mzc5NiwgODM4MDMsIDgzODEwLCA4MzgxNywgODM4MjQsIDgzODMxLCA4MzgzOCwgMCwgODM4NDUsIAorICAgIDgzODUxLCA4Mzg1OCwgODM4NjUsIDgzODcyLCA4Mzg3OSwgODM4ODYsIDgzODkzLCA4MzkwMCwgODM5MDcsIDgzOTE0LCAKKyAgICA4MzkyMSwgODM5MjgsIDgzOTM1LCA4Mzk0MSwgODM5NDgsIDgzOTU1LCA4Mzk2MiwgODM5NjksIDAsIDgzOTc2LCA4Mzk4MywgCisgICAgMCwgODM5OTAsIDgzOTk3LCA4NDAwNCwgODQwMTEsIDg0MDE4LCA4NDAyNSwgODQwMzIsIDg0MDM5LCA4NDA0NiwgODQwNTMsIAorICAgIDg0MDYwLCA4NDA2NywgODQwNzQsIDg0MDgxLCA4NDA4OCwgMCwgMCwgODQwOTQsIDg0MDk5LCA4NDEwNCwgODQxMDksIAorICAgIDg0MTE0LCA4NDExOSwgODQxMjQsIDg0MTI5LCA4NDEzNCwgODQxMzksIDg0MTQ0LCA4NDE0OSwgODQxNTQsIDg0MTU5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NDE2NCwgODQxNzEsIDg0MTc4LCA4NDE4NSwgODQxOTIsIDg0MTk5LCAKKyAgICA4NDIwNiwgODQyMTMsIDg0MjIwLCA4NDIyNywgODQyMzQsIDg0MjQxLCA4NDI0OCwgODQyNTUsIDg0MjYyLCA4NDI2OSwgCisgICAgODQyNzYsIDg0MjgzLCA4NDI5MCwgODQyOTcsIDg0MzA1LCA4NDMxMywgODQzMjAsIDg0MzI3LCA4NDMzMiwgODQzNDAsIAorICAgIDg0MzQ4LCA4NDM1NSwgODQzNjIsIDg0MzY3LCA4NDM3NCwgODQzNzksIDg0Mzg0LCA4NDM5MSwgODQzOTYsIDg0NDAxLCAKKyAgICA4NDQwNiwgODQ0MTQsIDg0NDE5LCA4NDQyNCwgODQ0MzEsIDg0NDM2LCA4NDQ0MSwgODQ0NDgsIDg0NDU1LCA4NDQ2MCwgCisgICAgODQ0NjUsIDg0NDcwLCA4NDQ3NSwgODQ0ODAsIDg0NDg1LCA4NDQ5MCwgODQ0OTUsIDg0NTAwLCA4NDUwNywgODQ1MTIsIAorICAgIDg0NTE5LCA4NDUyNCwgODQ1MjksIDg0NTM0LCA4NDUzOSwgODQ1NDQsIDg0NTQ5LCA4NDU1NCwgODQ1NTksIDg0NTY0LCAKKyAgICA4NDU2OSwgODQ1NzQsIDg0NTgxLCA4NDU4OCwgODQ1OTUsIDg0NjAyLCA4NDYwOCwgODQ2MTMsIDg0NjIwLCA4NDYyNSwgCisgICAgODQ2MzAsIDg0NjM5LCA4NDY0NiwgODQ2NTUsIDg0NjYyLCA4NDY2NywgODQ2NzIsIDg0NjgwLCA4NDY4NSwgODQ2OTAsIAorICAgIDg0Njk1LCA4NDcwMCwgODQ3MDUsIDg0NzEyLCA4NDcxNywgODQ3MjIsIDg0NzI3LCA4NDczMiwgODQ3MzcsIDg0NzQ0LCAKKyAgICA4NDc1MSwgODQ3NTgsIDg0NzY1LCA4NDc3MiwgODQ3NzksIDg0Nzg2LCA4NDc5MywgODQ4MDAsIDg0ODA3LCA4NDgxNCwgCisgICAgODQ4MjEsIDg0ODI4LCA4NDgzNSwgODQ4NDIsIDg0ODQ5LCA4NDg1NiwgODQ4NjMsIDg0ODcwLCA4NDg3NywgODQ4ODQsIAorICAgIDg0ODkxLCA4NDg5OCwgODQ5MDUsIDg0OTEyLCA4NDkxOSwgODQ5MjYsIDg0OTMzLCAwLCAwLCAwLCAwLCAwLCA4NDk0MCwgCisgICAgODQ5NDgsIDg0OTU2LCAwLCAwLCAwLCAwLCA4NDk2MSwgODQ5NjUsIDg0OTY5LCA4NDk3MywgODQ5NzcsIDg0OTgxLCAKKyAgICA4NDk4NSwgODQ5ODksIDg0OTkzLCA4NDk5NywgODUwMDIsIDg1MDA3LCA4NTAxMiwgODUwMTcsIDg1MDIyLCA4NTAyNywgCisgICAgODUwMzIsIDg1MDM3LCA4NTA0MiwgODUwNDgsIDg1MDU0LCA4NTA2MCwgODUwNjcsIDg1MDc0LCA4NTA4MSwgODUwODgsIAorICAgIDg1MDk1LCA4NTEwMiwgODUxMDgsIDg1MTE0LCA4NTEyMCwgODUxMjcsIDg1MTM0LCA4NTE0MSwgODUxNDgsIDg1MTU1LCAKKyAgICA4NTE2MiwgODUxNjksIDg1MTc2LCA4NTE4MywgODUxOTAsIDg1MTk3LCA4NTIwNCwgODUyMTEsIDg1MjE4LCAwLCAwLCAwLCAKKyAgICA4NTIyNSwgODUyMzMsIDg1MjQxLCA4NTI0OSwgODUyNTcsIDg1MjY1LCA4NTI3NSwgODUyODUsIDg1MjkzLCA4NTMwMSwgCisgICAgODUzMDksIDg1MzE3LCA4NTMyNSwgODUzMzEsIDg1MzM4LCA4NTM0NywgODUzNTYsIDg1MzY1LCA4NTM3NCwgODUzODMsIAorICAgIDg1MzkyLCA4NTQwMiwgODU0MTMsIDg1NDIzLCA4NTQzNCwgODU0NDMsIDg1NDUyLCA4NTQ2MSwgODU0NzEsIDg1NDgyLCAKKyAgICA4NTQ5MiwgODU1MDMsIDg1NTE0LCA4NTUyMywgODU1MzEsIDg1NTM3LCA4NTU0MywgODU1NDksIDg1NTU1LCA4NTU2MywgCisgICAgODU1NzEsIDg1NTc3LCA4NTU4NCwgODU1OTQsIDg1NjAxLCA4NTYwOCwgODU2MTUsIDg1NjIyLCA4NTYyOSwgODU2MzksIAorICAgIDg1NjQ2LCA4NTY1MywgODU2NjEsIDg1NjY5LCA4NTY3OCwgODU2ODcsIDg1Njk2LCA4NTcwNSwgODU3MTQsIDg1NzIyLCAKKyAgICA4NTczMSwgODU3NDAsIDg1NzQ5LCA4NTc1MywgODU3NjAsIDg1NzY1LCA4NTc3MCwgODU3NzQsIDg1Nzc4LCA4NTc4MiwgCisgICAgODU3ODYsIDg1NzkxLCA4NTc5NiwgODU4MDIsIDg1ODA4LCA4NTgxMiwgODU4MTgsIDg1ODIyLCA4NTgyNiwgODU4MzAsIAorICAgIDg1ODM0LCA4NTgzOCwgODU4NDIsIDg1ODQ4LCAwLCAwLCAwLCAwLCAwLCA4NTg1MiwgODU4NTcsIDg1ODYyLCA4NTg2NywgCisgICAgODU4NzIsIDg1ODc5LCA4NTg4NCwgODU4ODksIDg1ODk0LCA4NTg5OSwgODU5MDQsIDg1OTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NTkxNCwgCisgICAgODU5MjEsIDg1OTMwLCA4NTkzOSwgODU5NDYsIDg1OTUzLCA4NTk2MCwgODU5NjcsIDg1OTc0LCA4NTk4MSwgODU5ODcsIAorICAgIDg1OTk0LCA4NjAwMSwgODYwMDgsIDg2MDE1LCA4NjAyMiwgODYwMjksIDg2MDM2LCA4NjA0MywgODYwNTIsIDg2MDU5LCAKKyAgICA4NjA2NiwgODYwNzMsIDg2MDgwLCA4NjA4NywgODYwOTQsIDg2MTAxLCA4NjEwOCwgODYxMTcsIDg2MTI0LCA4NjEzMSwgCisgICAgODYxMzgsIDg2MTQ1LCA4NjE1MiwgODYxNTksIDg2MTY4LCA4NjE3NSwgODYxODIsIDg2MTg5LCA4NjE5NiwgODYyMDUsIAorICAgIDg2MjEyLCA4NjIxOSwgODYyMjYsIDg2MjM0LCA4NjI0MywgMCwgMCwgODYyNTIsIDg2MjU2LCA4NjI2MCwgODYyNjUsIAorICAgIDg2MjcwLCA4NjI3NSwgODYyODAsIDg2Mjg0LCA4NjI4OSwgODYyOTQsIDg2Mjk5LCA4NjMwNCwgODYzMDksIDg2MzE0LCAKKyAgICA4NjMxOCwgODYzMjIsIDg2MzI2LCA4NjMzMSwgODYzMzYsIDg2MzQwLCA4NjM0NSwgODYzNTAsIDg2MzU0LCA4NjM1OCwgCisgICAgODYzNjMsIDg2MzY4LCA4NjM3MywgODYzNzgsIDg2MzgzLCAwLCAwLCAwLCA4NjM4OCwgODYzOTIsIDg2Mzk3LCA4NjQwMiwgCisgICAgODY0MDYsIDg2NDExLCA4NjQxNSwgODY0MjAsIDg2NDI1LCA4NjQzMCwgODY0MzUsIDg2NDM5LCA4NjQ0MywgODY0NDgsIAorICAgIDg2NDUzLCA4NjQ1OCwgODY0NjMsIDg2NDY3LCA4NjQ3MiwgODY0NzYsIDg2NDgxLCA4NjQ4NiwgODY0OTAsIDg2NDk1LCAKKyAgICA4NjUwMCwgODY1MDUsIDg2NTA5LCA4NjUxMywgODY1MTgsIDg2NTIzLCA4NjUyOCwgODY1MzMsIDg2NTM4LCA4NjU0MywgCisgICAgODY1NDgsIDg2NTUzLCA4NjU1OCwgODY1NjMsIDg2NTY4LCA4NjU3MywgODY1NzgsIDg2NTgzLCA4NjU4OCwgODY1OTMsIAorICAgIDg2NTk4LCA4NjYwMywgODY2MDgsIDg2NjEzLCA4NjYxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY2MjMsIDg2NjI3LCA4NjYzMiwgODY2MzcsIDg2NjQyLCA4NjY0NiwgCisgICAgODY2NTEsIDg2NjU2LCA4NjY2MSwgODY2NjYsIDg2NjcwLCA4NjY3NCwgODY2NzksIDg2Njg0LCA4NjY4OSwgODY2OTQsIAorICAgIDg2Njk4LCA4NjcwMywgODY3MDgsIDg2NzEzLCA4NjcxOCwgODY3MjMsIDg2NzI4LCA4NjczMiwgODY3MzcsIDg2NzQyLCAKKyAgICA4Njc0NywgODY3NTIsIDg2NzU3LCA4Njc2MiwgODY3NjcsIDAsIDg2NzcyLCA4Njc3NywgODY3ODIsIDg2Nzg4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njc5NCwgODY3OTksIDg2ODA0LCA4NjgwOSwgODY4MTQsIDg2ODE5LCAKKyAgICA4NjgyNCwgODY4MjksIDg2ODM0LCA4NjgzOSwgODY4NDQsIDg2ODQ5LCA4Njg1NCwgODY4NTksIDg2ODY0LCA4Njg2OSwgCisgICAgODY4NzQsIDg2ODc5LCA4Njg4NCwgODY4ODksIDg2ODk0LCA4Njg5OSwgODY5MDQsIDg2OTA5LCA4NjkxNCwgODY5MTksIAorICAgIDg2OTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjkzMSwgODY5MzYsIDg2OTQxLCA4Njk0NiwgODY5NTEsIDg2OTU2LCA4Njk2MSwgCisgICAgODY5NjYsIDg2OTcxLCA4Njk3NiwgODY5ODEsIDg2OTg2LCA4Njk5MSwgODY5OTYsIDg3MDAxLCA4NzAwNiwgODcwMTEsIAorICAgIDg3MDE2LCA4NzAyMSwgODcwMjYsIDg3MDMxLCA4NzAzNiwgODcwNDEsIDg3MDQ2LCA4NzA1MSwgODcwNTYsIDg3MDYxLCAKKyAgICA4NzA2NSwgODcwNjksIDg3MDczLCAwLCA4NzA3OCwgODcwODQsIDg3MDg5LCA4NzA5NCwgODcwOTksIDg3MTA0LCA4NzExMCwgCisgICAgODcxMTYsIDg3MTIyLCA4NzEyOCwgODcxMzQsIDg3MTQwLCA4NzE0NiwgODcxNTIsIDg3MTU4LCA4NzE2NCwgODcxNzAsIAorICAgIDg3MTc2LCA4NzE4MiwgODcxODcsIDg3MTkzLCA4NzE5OSwgODcyMDQsIDg3MjEwLCA4NzIxNSwgODcyMjEsIDg3MjI3LCAKKyAgICA4NzIzMiwgODcyMzgsIDg3MjQ0LCA4NzI0OSwgODcyNTUsIDg3MjYxLCA4NzI2NywgODcyNzMsIDg3Mjc5LCA4NzI4NSwgMCwgCisgICAgMCwgMCwgMCwgODcyOTAsIDg3Mjk2LCA4NzMwMiwgODczMDgsIDg3MzE0LCA4NzMyMCwgODczMjYsIDg3MzMyLCA4NzMzOCwgCisgICAgODczNDUsIDg3MzUwLCA4NzM1NSwgODczNjEsIDg3MzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4NzM3MywgODczNzgsIDg3MzgzLCA4NzM4OCwgODczOTQsIDg3Mzk5LCA4NzQwNSwgODc0MTEsIAorICAgIDg3NDE3LCA4NzQyMywgODc0MzAsIDg3NDM2LCA4NzQ0MywgODc0NDgsIDg3NDUzLCA4NzQ1OCwgODc0NjMsIDg3NDY4LCAKKyAgICA4NzQ3MywgODc0NzgsIDg3NDgzLCA4NzQ4OCwgODc0OTMsIDg3NDk4LCA4NzUwMywgODc1MDgsIDg3NTEzLCA4NzUxOCwgCisgICAgODc1MjMsIDg3NTI4LCA4NzUzMywgODc1MzgsIDg3NTQzLCA4NzU0OCwgODc1NTMsIDg3NTU4LCA4NzU2MywgODc1NjgsIAorICAgIDg3NTczLCA4NzU3OCwgODc1ODMsIDg3NTg4LCA4NzU5MywgODc1OTgsIDg3NjA0LCA4NzYwOSwgODc2MTUsIDg3NjIxLCAKKyAgICA4NzYyNywgODc2MzMsIDg3NjQwLCA4NzY0NiwgODc2NTMsIDg3NjU4LCA4NzY2MywgODc2NjgsIDg3NjczLCA4NzY3OCwgCisgICAgODc2ODMsIDg3Njg4LCA4NzY5MywgODc2OTgsIDg3NzAzLCA4NzcwOCwgODc3MTMsIDg3NzE4LCA4NzcyMywgODc3MjgsIAorICAgIDg3NzMzLCA4NzczOCwgODc3NDMsIDg3NzQ4LCA4Nzc1MywgODc3NTgsIDg3NzYzLCA4Nzc2OCwgODc3NzMsIDg3Nzc4LCAKKyAgICA4Nzc4MywgODc3ODgsIDg3NzkzLCA4Nzc5OCwgODc4MDMsIDg3ODA4LCA4NzgxMywgODc4MTgsIDg3ODIzLCA4NzgyOCwgCisgICAgODc4MzMsIDg3ODM4LCA4Nzg0MywgODc4NDgsIDg3ODUzLCA4Nzg1OCwgODc4NjMsIDg3ODY4LCA4Nzg3MywgODc4NzgsIAorICAgIDg3ODgzLCA4Nzg4OCwgODc4OTMsIDg3ODk4LCA4NzkwMywgODc5MDgsIDg3OTEzLCA4NzkxOCwgODc5MjMsIDg3OTI4LCAKKyAgICA4NzkzMywgODc5MzgsIDg3OTQzLCA4Nzk0OCwgODc5NTMsIDg3OTU4LCA4Nzk2MywgODc5NjgsIDg3OTczLCA4Nzk3OCwgCisgICAgODc5ODMsIDg3OTg4LCA4Nzk5MywgODc5OTgsIDg4MDAzLCA4ODAwOCwgODgwMTMsIDg4MDE4LCA4ODAyMywgODgwMjgsIAorICAgIDg4MDMzLCA4ODAzOCwgODgwNDMsIDg4MDQ4LCA4ODA1MywgODgwNTgsIDg4MDYzLCA4ODA2OCwgODgwNzIsIDg4MDc3LCAKKyAgICA4ODA4MiwgODgwODcsIDg4MDkyLCA4ODA5NywgODgxMDIsIDg4MTA3LCA4ODExMiwgODgxMTcsIDg4MTIyLCA4ODEyNywgCisgICAgODgxMzIsIDg4MTM2LCA4ODE0MCwgODgxNDQsIDg4MTQ4LCA4ODE1MiwgODgxNTYsIDg4MTYwLCA4ODE2NSwgODgxNzAsIDAsIAorICAgIDAsIDg4MTc1LCA4ODE4MCwgODgxODQsIDg4MTg4LCA4ODE5MiwgODgxOTYsIDg4MjAwLCA4ODIwNCwgODgyMDgsIDg4MjEyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODIxNiwgODgyMjAsIDg4MjI0LCA4ODIyOCwgCisgICAgODgyMzIsIDg4MjM2LCAwLCAwLCA4ODI0MSwgMCwgODgyNDYsIDg4MjUwLCA4ODI1NSwgODgyNjAsIDg4MjY1LCA4ODI3MCwgCisgICAgODgyNzUsIDg4MjgwLCA4ODI4NSwgODgyOTAsIDg4Mjk1LCA4ODI5OSwgODgzMDQsIDg4MzA5LCA4ODMxNCwgODgzMTksIAorICAgIDg4MzIzLCA4ODMyOCwgODgzMzMsIDg4MzM4LCA4ODM0MywgODgzNDcsIDg4MzUyLCA4ODM1NywgODgzNjIsIDg4MzY3LCAKKyAgICA4ODM3MSwgODgzNzYsIDg4MzgxLCA4ODM4NiwgODgzOTEsIDg4Mzk2LCA4ODQwMSwgODg0MDYsIDg4NDExLCA4ODQxNiwgCisgICAgODg0MjEsIDg4NDI2LCA4ODQzMSwgODg0MzUsIDg4NDQwLCA4ODQ0NSwgODg0NTAsIDg4NDU1LCAwLCA4ODQ2MCwgODg0NjUsIAorICAgIDAsIDAsIDAsIDg4NDcwLCAwLCAwLCA4ODQ3NSwgODg0ODAsIDg4NDg3LCA4ODQ5NCwgODg1MDEsIDg4NTA4LCA4ODUxNSwgCisgICAgODg1MjIsIDg4NTI5LCA4ODUzNiwgODg1NDMsIDg4NTUwLCA4ODU1NywgODg1NjQsIDg4NTcxLCA4ODU3OCwgODg1ODUsIAorICAgIDg4NTkyLCA4ODU5OSwgODg2MDYsIDg4NjEzLCA4ODYyMCwgODg2MjcsIDAsIDg4NjM0LCA4ODY0MSwgODg2NDcsIDg4NjUzLCAKKyAgICA4ODY1OSwgODg2NjYsIDg4NjczLCA4ODY4MSwgODg2ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4Njk4LCA4ODcwMywgCisgICAgODg3MDgsIDg4NzEzLCA4ODcxOCwgODg3MjMsIDg4NzI4LCA4ODczMywgODg3MzgsIDg4NzQzLCA4ODc0OCwgODg3NTMsIAorICAgIDg4NzU4LCA4ODc2MywgODg3NjgsIDg4NzczLCA4ODc3OCwgODg3ODMsIDg4Nzg4LCA4ODc5MywgODg3OTgsIDg4ODAzLCAKKyAgICA4ODgwOCwgODg4MTIsIDg4ODE3LCA4ODgyMiwgODg4MjgsIDg4ODMyLCAwLCAwLCAwLCA4ODgzNiwgODg4NDIsIDg4ODQ2LCAKKyAgICA4ODg1MSwgODg4NTYsIDg4ODYxLCA4ODg2NSwgODg4NzAsIDg4ODc0LCA4ODg3OSwgODg4ODQsIDg4ODg4LCA4ODg5MiwgCisgICAgODg4OTYsIDg4OTAwLCA4ODkwNCwgODg5MDksIDg4OTE0LCA4ODkxOCwgODg5MjMsIDg4OTI4LCA4ODkzMiwgODg5MzcsIAorICAgIDg4OTQyLCA4ODk0NywgODg5NTIsIDg4OTU3LCAwLCAwLCAwLCAwLCAwLCA4ODk2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg5NjcsIDg4OTcwLCA4ODk3NCwgODg5NzgsIDAsIDg4OTgzLCA4ODk4NywgMCwgCisgICAgMCwgMCwgMCwgMCwgODg5OTEsIDg4OTk2LCA4OTAwMiwgODkwMDYsIDg5MDEwLCA4OTAxMywgODkwMTcsIDg5MDIxLCAwLCAKKyAgICA4OTAyNSwgODkwMjksIDg5MDMzLCAwLCA4OTAzNywgODkwNDEsIDg5MDQ1LCA4OTA0OSwgODkwNTMsIDg5MDU3LCA4OTA2MSwgCisgICAgODkwNjUsIDg5MDY5LCA4OTA3MywgODkwNzcsIDg5MDgwLCA4OTA4MywgODkwODcsIDg5MDkxLCA4OTA5NSwgODkwOTgsIAorICAgIDg5MTAxLCA4OTEwNCwgODkxMDgsIDg5MTEyLCA4OTExNiwgODkxMjAsIDg5MTI0LCA4OTEyOCwgODkxMzEsIDg5MTM1LCAwLCAKKyAgICAwLCAwLCAwLCA4OTEzOSwgODkxNDQsIDg5MTQ4LCAwLCAwLCAwLCAwLCA4OTE1MiwgODkxNTUsIDg5MTU4LCA4OTE2MSwgCisgICAgODkxNjQsIDg5MTY3LCA4OTE3MSwgODkxNzUsIDg5MTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTE4NSwgODkxOTAsIAorICAgIDg5MTk2LCA4OTIwMSwgODkyMDcsIDg5MjEyLCA4OTIxNywgODkyMjIsIDg5MjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4OTIzMywgODkyNDEsIDg5MjQ5LCA4OTI1NywgODkyNjUsIDg5MjczLCA4OTI4MSwgODkyODksIDg5Mjk3LCA4OTMwNSwgCisgICAgODkzMTMsIDg5MzIxLCA4OTMyOSwgODkzMzcsIDg5MzQ1LCA4OTM1MywgODkzNjEsIDg5MzY5LCA4OTM3NywgODkzODUsIAorICAgIDg5MzkzLCA4OTQwMSwgODk0MDksIDg5NDE3LCA4OTQyNSwgODk0MzMsIDg5NDQxLCA4OTQ0OSwgODk0NTcsIDg5NDY1LCAKKyAgICA4OTQ3MiwgODk0ODAsIDg5NDg4LCA4OTQ5MiwgODk0OTcsIDg5NTAyLCA4OTUwNywgODk1MTIsIDg5NTE3LCA4OTUyMiwgCisgICAgODk1MjcsIDg5NTMxLCA4OTUzNiwgODk1NDAsIDg5NTQ1LCA4OTU0OSwgODk1NTQsIDg5NTU4LCA4OTU2MywgODk1NjgsIAorICAgIDg5NTczLCA4OTU3OCwgODk1ODMsIDg5NTg4LCA4OTU5MywgODk1OTgsIDg5NjAzLCA4OTYwOCwgODk2MTMsIDg5NjE4LCAKKyAgICA4OTYyMywgODk2MjgsIDg5NjMzLCA4OTYzOCwgODk2NDMsIDg5NjQ4LCA4OTY1MywgODk2NTgsIDg5NjYzLCA4OTY2OCwgCisgICAgODk2NzMsIDg5Njc4LCA4OTY4MywgODk2ODgsIDg5NjkzLCA4OTY5OCwgODk3MDMsIDg5NzA4LCA4OTcxMywgODk3MTgsIAorICAgIDg5NzIzLCA4OTcyOCwgODk3MzMsIDg5NzM4LCA4OTc0MywgODk3NDgsIDAsIDAsIDAsIDg5NzUzLCA4OTc1OCwgODk3NjcsIAorICAgIDg5Nzc1LCA4OTc4NCwgODk3OTMsIDg5ODA0LCA4OTgxNSwgODk4MjIsIDg5ODI5LCA4OTgzNiwgODk4NDMsIDg5ODUwLCAKKyAgICA4OTg1NywgODk4NjQsIDg5ODcxLCA4OTg3OCwgODk4ODUsIDg5ODkyLCA4OTg5OSwgODk5MDYsIDg5OTEzLCA4OTkyMCwgCisgICAgODk5MjcsIDg5OTM0LCA4OTk0MSwgODk5NDgsIDg5OTU1LCA4OTk2MiwgMCwgMCwgODk5NjksIDg5OTc1LCA4OTk4MSwgCisgICAgODk5ODcsIDg5OTkzLCA5MDAwMCwgOTAwMDcsIDkwMDE1LCA5MDAyMywgOTAwMzAsIDkwMDM3LCA5MDA0NCwgOTAwNTEsIAorICAgIDkwMDU4LCA5MDA2NSwgOTAwNzIsIDkwMDc5LCA5MDA4NiwgOTAwOTMsIDkwMTAwLCA5MDEwNywgOTAxMTQsIDkwMTIxLCAKKyAgICA5MDEyOCwgOTAxMzUsIDkwMTQyLCA5MDE0OSwgMCwgMCwgMCwgMCwgMCwgOTAxNTYsIDkwMTYyLCA5MDE2OCwgOTAxNzQsIAorICAgIDkwMTgwLCA5MDE4NywgOTAxOTQsIDkwMjAyLCA5MDIxMCwgOTAyMTYsIDkwMjIyLCA5MDIyOSwgOTAyMzUsIDkwMjQxLCAKKyAgICA5MDI0NywgOTAyNTMsIDkwMjYwLCA5MDI2NywgOTAyNzQsIDkwMjgxLCA5MDI4OCwgOTAyOTUsIDkwMzAyLCA5MDMwOSwgCisgICAgOTAzMTYsIDkwMzIzLCA5MDMzMCwgOTAzMzcsIDkwMzQ0LCA5MDM1MSwgOTAzNTgsIDkwMzY1LCA5MDM3MiwgOTAzNzksIAorICAgIDkwMzg2LCA5MDM5MywgOTA0MDAsIDkwNDA3LCA5MDQxNCwgOTA0MjEsIDkwNDI4LCA5MDQzNSwgOTA0NDIsIDkwNDQ5LCAKKyAgICA5MDQ1NiwgOTA0NjMsIDkwNDcwLCA5MDQ3NywgOTA0ODQsIDkwNDkxLCA5MDQ5OCwgOTA1MDUsIDkwNTEyLCA5MDUxOSwgCisgICAgOTA1MjYsIDkwNTMzLCA5MDU0MCwgOTA1NDcsIDkwNTU0LCA5MDU2MSwgOTA1NjgsIDkwNTc1LCA5MDU4MiwgOTA1ODksIAorICAgIDkwNTk2LCA5MDYwMywgOTA2MTAsIDkwNjE3LCA5MDYyNCwgOTA2MzEsIDkwNjM4LCA5MDY0NSwgOTA2NTIsIDkwNjU5LCAKKyAgICA5MDY2NiwgOTA2NzMsIDkwNjgwLCA5MDY4NywgOTA2OTQsIDkwNzAxLCA5MDcwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTg2NDYsIDU4NjU0LCA1ODY2MiwgNTg2NzIsIDU4Njc4LCA1ODY4MiwgNTg2ODYsIDU4NjkyLCA1ODY5OCwgNTg3MDMsIAotICAgIDU4NzA3LCA1ODcxMSwgNTg3MTUsIDU4NzE5LCA1ODcyNSwgNTg3MjksIDU4NzMzLCA1ODczNywgNTg3NDcsIDU4NzUxLCAKLSAgICA1ODc1NSwgNTg3NjEsIDU4NzY1LCA1ODc3MSwgNTg3NzUsIDU4Nzc5LCA1ODc4NSwgNTg3OTEsIDU4Nzk3LCA1ODgwNSwgCi0gICAgNTg4MTMsIDU4ODE3LCA1ODgyMSwgNTg4MjUsIDU4ODMxLCA1ODgzNSwgNTg4NDQsIDU4ODUwLCA1ODg1NCwgNTg4NTgsIAotICAgIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg4MSwgNTg4ODcsIDU4ODkzLCA1ODg5NywgNTg5MDMsIDU4OTA3LCAKLSAgICA1ODkxMywgNTg5MjEsIDU4OTMxLCA1ODkzNSwgNTg5NDMsIDU4OTQ3LCA1ODk1MywgNTg5NjEsIDU4OTY5LCA1ODk3MywgCi0gICAgNTg5NzcsIDU4OTgzLCA1ODk4OCwgNTg5OTQsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDExLCA1OTAxNSwgNTkwMTksIAotICAgIDU5MDIzLCA1OTAyNywgNTkwMzEsIDU5MDM1LCA1OTAzOSwgNTkwNDIsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKLSAgICA1OTA2MiwgNTkwNjYsIDU5MDY5LCA1OTA3MywgNTkwNzcsIDU5MDgwLCA1OTA4NCwgNTkwODgsIDU5MDkyLCA1OTA5NiwgCi0gICAgNTkxMDAsIDU5MTA0LCA1OTEwOCwgNTkxMTIsIDU5MTE2LCA1OTEyMCwgNTkxMjQsIDU5MTI4LCA1OTEzMiwgNTkxMzYsIAotICAgIDU5MTQwLCA1OTE0NCwgNTkxNDgsIDU5MTUyLCA1OTE1NiwgNTkxNjAsIDU5MTY0LCA1OTE2OCwgNTkxNzIsIDU5MTc2LCAKLSAgICA1OTE4MCwgNTkxODQsIDU5MTg4LCA1OTE5MiwgNTkxOTYsIDU5MjAwLCA1OTIwNCwgNTkyMDgsIDU5MjEyLCA1OTIxNiwgCi0gICAgNTkyMjAsIDU5MjI0LCA1OTIyOCwgNTkyMzIsIDU5MjM2LCA1OTI0MCwgNTkyNDQsIDU5MjQ4LCA1OTI1MiwgNTkyNTYsIAotICAgIDU5MjU5LCA1OTI2MywgNTkyNjcsIDU5MjcxLCA1OTI3NSwgNTkyNzksIDU5MjgzLCA1OTI4NywgNTkyOTEsIDU5Mjk1LCAKLSAgICA1OTI5OSwgNTkzMDMsIDU5MzA3LCA1OTMxMSwgNTkzMTUsIDU5MzE5LCA1OTMyMywgNTkzMjcsIDU5MzMxLCA1OTMzNSwgCi0gICAgNTkzMzksIDU5MzQzLCA1OTM0NywgNTkzNTEsIDU5MzU1LCA1OTM1OSwgNTkzNjMsIDU5MzY3LCA1OTM3MSwgNTkzNzUsIAotICAgIDU5Mzc5LCA1OTM4MywgNTkzODcsIDU5MzkxLCA1OTM5NSwgNTkzOTksIDU5NDAzLCA1OTQwNywgNTk0MTEsIDU5NDE1LCAKLSAgICA1OTQxOSwgNTk0MjMsIDU5NDI3LCA1OTQzMSwgNTk0MzUsIDU5NDM5LCA1OTQ0MywgNTk0NDcsIDU5NDUxLCA1OTQ1NSwgCi0gICAgNTk0NTksIDU5NDYzLCA1OTQ2NywgNTk0NzEsIDU5NDc1LCA1OTQ3OSwgNTk0ODMsIDU5NDg3LCA1OTQ5MSwgNTk0OTUsIAotICAgIDU5NDk5LCA1OTUwMywgNTk1MDcsIDU5NTExLCA1OTUxNSwgNTk1MTksIDU5NTIzLCA1OTUyNywgNTk1MzEsIDU5NTM1LCAKLSAgICA1OTUzOSwgNTk1NDMsIDU5NTQ3LCA1OTU1MSwgNTk1NTUsIDU5NTU5LCA1OTU2MywgNTk1NjcsIDU5NTcxLCA1OTU3NSwgCi0gICAgNTk1NzksIDU5NTgzLCA1OTU4NywgNTk1OTEsIDU5NTk1LCA1OTU5OSwgNTk2MDMsIDU5NjA3LCA1OTYxMSwgNTk2MTUsIAotICAgIDU5NjE5LCA1OTYyMywgNTk2MjcsIDU5NjMxLCA1OTYzNSwgNTk2MzksIDU5NjQzLCA1OTY0NywgNTk2NTEsIDU5NjU1LCAKLSAgICA1OTY1OSwgNTk2NjMsIDU5NjY3LCA1OTY3MSwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIDU5NjkxLCA1OTY5NSwgCi0gICAgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCA1OTczMCwgNTk3MzQsIAotICAgIDU5NzM4LCA1OTc0MiwgNTk3NDYsIDU5NzUwLCA1OTc1NCwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgNTk3NzAsIDU5Nzc0LCAKLSAgICA1OTc3OCwgNTk3ODIsIDU5Nzg2LCA1OTc5MCwgNTk3OTQsIDU5Nzk4LCA1OTgwMiwgNTk4MDYsIDU5ODEwLCA1OTgxNCwgCi0gICAgNTk4MTgsIDU5ODIyLCA1OTgyNiwgNTk4MzAsIDU5ODM0LCA1OTgzOCwgNTk4NDIsIDU5ODQ2LCA1OTg1MCwgNTk4NTQsIAotICAgIDU5ODU4LCA1OTg2MiwgNTk4NjYsIDU5ODcwLCA1OTg3NCwgNTk4NzgsIDU5ODgyLCA1OTg4NiwgNTk4OTAsIDU5ODk0LCAKLSAgICA1OTg5OCwgNTk5MDIsIDU5OTA2LCA1OTkxMCwgNTk5MTQsIDU5OTE4LCA1OTkyMiwgNTk5MjYsIDU5OTMwLCA1OTkzNCwgCi0gICAgNTk5MzgsIDU5OTQyLCA1OTk0NiwgNTk5NTAsIDU5OTU0LCA1OTk1OCwgNTk5NjIsIDU5OTY2LCA1OTk3MCwgNTk5NzQsIAotICAgIDU5OTc4LCA1OTk4MiwgNTk5ODYsIDU5OTkwLCA1OTk5NCwgNTk5OTgsIDYwMDAyLCA2MDAwNiwgNjAwMTAsIDYwMDE0LCAKLSAgICA2MDAxOCwgNjAwMjIsIDYwMDI2LCA2MDAzMCwgNjAwMzQsIDYwMDM4LCA2MDA0MiwgNjAwNDYsIDYwMDUwLCA2MDA1NCwgCi0gICAgNjAwNTgsIDYwMDYyLCA2MDA2NiwgNjAwNzAsIDYwMDc0LCA2MDA3OCwgNjAwODIsIDYwMDg2LCA2MDA5MCwgNjAwOTQsIAotICAgIDYwMDk4LCA2MDEwMiwgNjAxMDYsIDYwMTEwLCA2MDExNCwgNjAxMTgsIDYwMTIyLCA2MDEyNiwgNjAxMzAsIDYwMTM0LCAKLSAgICA2MDEzOCwgNjAxNDIsIDYwMTQ2LCA2MDE1MCwgNjAxNTQsIDYwMTU4LCA2MDE2MiwgNjAxNjYsIDYwMTcwLCA2MDE3NCwgCi0gICAgNjAxNzgsIDYwMTgyLCA2MDE4NiwgNjAxOTAsIDYwMTkzLCA2MDE5NywgNjAyMDEsIDYwMjA1LCA2MDIwOSwgNjAyMTMsIAotICAgIDYwMjE3LCA2MDIyMSwgNjAyMjUsIDYwMjI5LCA2MDIzMywgNjAyMzcsIDYwMjQxLCA2MDI0NSwgNjAyNDksIDYwMjUzLCAKLSAgICA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgNjAyODUsIDYwMjg5LCA2MDI5MywgCi0gICAgNjAyOTcsIDYwMzAxLCA2MDMwNSwgNjAzMDksIDYwMzEzLCA2MDMxNywgNjAzMjEsIDYwMzI1LCA2MDMyOSwgNjAzMzMsIAotICAgIDYwMzM3LCA2MDM0MSwgNjAzNDUsIDYwMzQ5LCA2MDM1MywgNjAzNTcsIDYwMzYxLCA2MDM2NSwgNjAzNjksIDYwMzczLCAKLSAgICA2MDM3NywgNjAzODEsIDYwMzg1LCA2MDM4OSwgNjAzOTMsIDYwMzk3LCA2MDQwMSwgNjA0MDUsIDYwNDA5LCA2MDQxMywgCi0gICAgNjA0MTcsIDYwNDIxLCA2MDQyNSwgNjA0MjksIDYwNDMzLCA2MDQzNywgNjA0NDEsIDYwNDQ1LCA2MDQ0OSwgNjA0NTMsIAotICAgIDYwNDU3LCA2MDQ2MSwgNjA0NjUsIDYwNDY5LCA2MDQ3MywgNjA0NzcsIDYwNDgxLCA2MDQ4NSwgNjA0ODksIDYwNDkzLCAKLSAgICA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUwOSwgNjA1MTMsIDYwNTE3LCA2MDUyMSwgNjA1MjUsIDYwNTI5LCA2MDUzMywgCi0gICAgNjA1MzcsIDYwNTQxLCA2MDU0NSwgNjA1NDksIDYwNTUzLCA2MDU1NywgNjA1NjEsIDYwNTY1LCA2MDU2OSwgNjA1NzMsIAotICAgIDYwNTc3LCA2MDU4MSwgNjA1ODUsIDYwNTg5LCA2MDU5MywgNjA1OTcsIDYwNjAxLCA2MDYwNSwgNjA2MDksIDYwNjEzLCAKLSAgICA2MDYxNywgNjA2MjEsIDYwNjI1LCA2MDYyOSwgNjA2MzMsIDYwNjM3LCA2MDY0MSwgNjA2NDUsIDYwNjQ5LCA2MDY1MywgCi0gICAgNjA2NTcsIDYwNjYxLCA2MDY2NSwgNjA2NjksIDYwNjczLCA2MDY3NywgNjA2ODEsIDYwNjg1LCA2MDY4OSwgNjA2OTMsIAotICAgIDYwNjk3LCA2MDcwMSwgNjA3MDUsIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjksIDYwNzMzLCAKLSAgICA2MDczNywgNjA3NDEsIDYwNzQ1LCA2MDc0OSwgNjA3NTMsIDYwNzU3LCA2MDc2MSwgNjA3NjUsIDYwNzY5LCA2MDc3MywgCi0gICAgNjA3NzcsIDYwNzgxLCA2MDc4NSwgNjA3ODksIDYwNzkzLCA2MDc5NywgNjA4MDEsIDYwODA1LCA2MDgwOSwgNjA4MTMsIAotICAgIDYwODE3LCA2MDgyMSwgNjA4MjUsIDYwODI5LCA2MDgzMywgNjA4MzcsIDYwODQxLCA2MDg0NSwgNjA4NDksIDYwODUzLCAKLSAgICA2MDg1NywgNjA4NjEsIDYwODY1LCA2MDg2OSwgNjA4NzMsIDYwODc3LCA2MDg4MSwgNjA4ODUsIDYwODg5LCA2MDg5MywgCi0gICAgNjA4OTcsIDYwOTAxLCA2MDkwNSwgNjA5MDksIDYwOTEzLCA2MDkxNywgNjA5MjEsIDYwOTI1LCA2MDkyOSwgNjA5MzMsIAotICAgIDYwOTM3LCA2MDk0MSwgNjA5NDUsIDYwOTQ5LCA2MDk1MywgNjA5NTcsIDYwOTYxLCA2MDk2NSwgNjA5NjksIDYwOTczLCAKLSAgICA2MDk3NywgNjA5ODEsIDYwOTg1LCA2MDk4OSwgNjA5OTMsIDYwOTk3LCA2MTAwMSwgNjEwMDUsIDYxMDA5LCA2MTAxMywgCi0gICAgNjEwMTcsIDYxMDIxLCA2MTAyNSwgNjEwMjksIDYxMDMzLCA2MTAzNywgNjEwNDEsIDYxMDQ1LCA2MTA0OCwgNjEwNTIsIAotICAgIDYxMDU2LCA2MTA2MCwgNjEwNjQsIDYxMDY4LCA2MTA3MiwgNjEwNzYsIDYxMDgwLCA2MTA4NCwgNjEwODgsIDYxMDkyLCAKLSAgICA2MTA5NiwgNjExMDAsIDYxMTA0LCA2MTEwOCwgNjExMTIsIDYxMTE2LCA2MTEyMCwgNjExMjQsIDYxMTI4LCA2MTEzMiwgCi0gICAgNjExMzYsIDYxMTQwLCA2MTE0NCwgNjExNDgsIDYxMTUyLCA2MTE1NiwgNjExNjAsIDYxMTY0LCA2MTE2OCwgNjExNzIsIAotICAgIDYxMTc2LCA2MTE4MCwgNjExODQsIDYxMTg4LCA2MTE5MiwgNjExOTYsIDYxMjAwLCA2MTIwNCwgNjEyMDgsIDYxMjEyLCAKLSAgICA2MTIxNiwgNjEyMjAsIDYxMjI0LCA2MTIyOCwgNjEyMzIsIDYxMjM2LCA2MTI0MCwgNjEyNDQsIDYxMjQ4LCA2MTI1MiwgCi0gICAgNjEyNTYsIDYxMjYwLCA2MTI2NCwgNjEyNjgsIDYxMjcyLCA2MTI3NiwgNjEyODAsIDYxMjg0LCA2MTI4OCwgNjEyOTIsIAotICAgIDYxMjk2LCA2MTMwMCwgNjEzMDQsIDYxMzA4LCA2MTMxMiwgNjEzMTYsIDYxMzIwLCA2MTMyNCwgNjEzMjgsIDYxMzMyLCAKLSAgICA2MTMzNiwgNjEzNDAsIDYxMzQ0LCA2MTM0OCwgNjEzNTIsIDYxMzU2LCA2MTM2MCwgNjEzNjQsIDYxMzY4LCA2MTM3MiwgCi0gICAgNjEzNzYsIDYxMzgwLCA2MTM4NCwgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIAotICAgIDYxNDE2LCA2MTQyMCwgNjE0MjQsIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDgsIDYxNDUyLCAKLSAgICA2MTQ1NiwgNjE0NjAsIDYxNDY0LCA2MTQ2OCwgNjE0NzIsIDYxNDc2LCA2MTQ4MCwgNjE0ODQsIDYxNDg4LCA2MTQ5MiwgCi0gICAgNjE0OTYsIDYxNTAwLCA2MTUwMywgNjE1MDcsIDYxNTExLCA2MTUxNSwgNjE1MTksIDYxNTIzLCA2MTUyNywgNjE1MzEsIAotICAgIDYxNTM1LCA2MTUzOSwgNjE1NDMsIDYxNTQ3LCA2MTU1MSwgNjE1NTUsIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCAKLSAgICA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgCi0gICAgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIAotICAgIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4MywgNjE2ODcsIDYxNjkxLCAKLSAgICA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIDYxNzE1LCA2MTcxOSwgNjE3MjMsIDYxNzI3LCA2MTczMSwgCi0gICAgNjE3MzUsIDYxNzM5LCA2MTc0MywgNjE3NDcsIDYxNzUxLCA2MTc1NSwgNjE3NTksIDYxNzYzLCA2MTc2NywgNjE3NzEsIAotICAgIDYxNzc1LCA2MTc3OSwgNjE3ODMsIDYxNzg3LCA2MTc5MSwgNjE3OTUsIDYxNzk5LCA2MTgwMywgNjE4MDcsIDYxODExLCAKLSAgICA2MTgxNSwgNjE4MTksIDYxODIzLCA2MTgyNywgNjE4MzEsIDYxODM1LCA2MTgzOSwgNjE4NDMsIDYxODQ3LCA2MTg1MSwgCi0gICAgNjE4NTUsIDYxODU5LCA2MTg2MywgNjE4NjcsIDYxODcxLCA2MTg3NSwgNjE4NzksIDYxODgzLCA2MTg4NywgNjE4OTEsIAotICAgIDYxODk1LCA2MTg5OSwgNjE5MDMsIDYxOTA3LCA2MTkxMSwgNjE5MTUsIDYxOTE5LCA2MTkyMywgNjE5MjcsIDYxOTMxLCAKLSAgICA2MTkzNSwgNjE5MzksIDYxOTQzLCA2MTk0NywgNjE5NTEsIDYxOTU1LCA2MTk1OSwgNjE5NjMsIDYxOTY3LCA2MTk3MSwgCi0gICAgNjE5NzUsIDYxOTc5LCA2MTk4MywgNjE5ODcsIDYxOTkxLCA2MTk5NSwgNjE5OTksIDYyMDAzLCA2MjAwNywgNjIwMTEsIAotICAgIDYyMDE1LCA2MjAxOSwgNjIwMjMsIDYyMDI3LCA2MjAzMSwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCAKLSAgICA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgCi0gICAgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDYsIDYyMTEwLCA2MjExNCwgNjIxMTgsIDYyMTIyLCA2MjEyNiwgNjIxMzAsIAotICAgIDYyMTM0LCA2MjEzOCwgNjIxNDIsIDYyMTQ2LCA2MjE1MCwgNjIxNTQsIDYyMTU4LCA2MjE2MiwgNjIxNjYsIDYyMTcwLCAKLSAgICA2MjE3NCwgNjIxNzgsIDYyMTgyLCA2MjE4NiwgNjIxOTAsIDYyMTk0LCA2MjE5OCwgNjIyMDIsIDYyMjA2LCA2MjIxMCwgCi0gICAgNjIyMTQsIDYyMjE4LCA2MjIyMiwgNjIyMjYsIDYyMjMwLCA2MjIzNCwgNjIyMzgsIDYyMjQyLCA2MjI0NiwgNjIyNTAsIAotICAgIDYyMjU0LCA2MjI1OCwgNjIyNjIsIDYyMjY2LCA2MjI3MCwgNjIyNzQsIDYyMjc4LCA2MjI4MiwgNjIyODYsIDYyMjkwLCAKLSAgICA2MjI5NCwgNjIyOTgsIDYyMzAyLCA2MjMwNiwgNjIzMTAsIDYyMzE0LCA2MjMxOCwgNjIzMjIsIDYyMzI2LCA2MjMzMCwgCi0gICAgNjIzMzQsIDYyMzM4LCA2MjM0MiwgNjIzNDYsIDYyMzUwLCA2MjM1NCwgNjIzNTgsIDYyMzYyLCA2MjM2NiwgNjIzNzAsIAotICAgIDYyMzc0LCA2MjM3OCwgNjIzODIsIDYyMzg2LCA2MjM5MCwgNjIzOTQsIDYyMzk4LCA2MjQwMiwgNjI0MDYsIDYyNDEwLCAKLSAgICA2MjQxNCwgNjI0MTgsIDYyNDIyLCA2MjQyNiwgNjI0MzAsIDYyNDM0LCA2MjQzOCwgNjI0NDIsIDYyNDQ2LCA2MjQ1MCwgCi0gICAgNjI0NTQsIDYyNDU4LCA2MjQ2MiwgNjI0NjYsIDYyNDcwLCA2MjQ3NCwgNjI0NzgsIDYyNDgyLCA2MjQ4NiwgNjI0OTAsIAotICAgIDYyNDk0LCA2MjQ5OCwgNjI1MDIsIDYyNTA2LCA2MjUxMCwgNjI1MTQsIDYyNTE4LCA2MjUyMiwgNjI1MjYsIDYyNTMwLCAKLSAgICA2MjUzNCwgNjI1MzgsIDYyNTQyLCA2MjU0NiwgNjI1NTAsIDYyNTU0LCA2MjU1OCwgNjI1NjIsIDYyNTY2LCA2MjU3MCwgCi0gICAgNjI1NzQsIDYyNTc4LCA2MjU4MiwgNjI1ODYsIDYyNTkwLCA2MjU5NCwgNjI1OTgsIDYyNjAyLCA2MjYwNiwgNjI2MTAsIAotICAgIDYyNjE0LCA2MjYxOCwgNjI2MjIsIDYyNjI2LCA2MjYzMCwgNjI2MzQsIDYyNjM4LCA2MjY0MiwgNjI2NDYsIDYyNjUwLCAKLSAgICA2MjY1NCwgNjI2NTgsIDYyNjYyLCA2MjY2NiwgNjI2NzAsIDYyNjc0LCA2MjY3OCwgNjI2ODIsIDYyNjg2LCA2MjY5MCwgCi0gICAgNjI2OTQsIDYyNjk4LCA2MjcwMiwgNjI3MDYsIDYyNzEwLCA2MjcxNCwgNjI3MTgsIDYyNzIyLCA2MjcyNiwgNjI3MzAsIAotICAgIDYyNzM0LCA2MjczOCwgNjI3NDIsIDYyNzQ2LCA2Mjc1MCwgNjI3NTQsIDYyNzU4LCA2Mjc2MiwgNjI3NjYsIDYyNzcwLCAKLSAgICA2Mjc3NCwgNjI3NzgsIDYyNzgyLCA2Mjc4NiwgNjI3OTAsIDYyNzk0LCA2Mjc5OCwgNjI4MDIsIDYyODA2LCA2MjgxMCwgCi0gICAgNjI4MTQsIDYyODE4LCA2MjgyMiwgNjI4MjYsIDYyODMwLCA2MjgzNCwgNjI4MzgsIDYyODQyLCA2Mjg0NiwgNjI4NTAsIAotICAgIDYyODU0LCA2Mjg1OCwgNjI4NjIsIDYyODY1LCA2Mjg2OSwgNjI4NzMsIDYyODc3LCA2Mjg4MSwgNjI4ODUsIDYyODg5LCAKLSAgICA2Mjg5MywgNjI4OTcsIDYyOTAxLCA2MjkwNSwgNjI5MDksIDYyOTEzLCA2MjkxNywgNjI5MjEsIDYyOTI1LCA2MjkyOSwgCi0gICAgNjI5MzMsIDYyOTM3LCA2Mjk0MSwgNjI5NDUsIDYyOTQ5LCA2Mjk1MywgNjI5NTcsIDYyOTYxLCA2Mjk2NSwgNjI5NjksIAotICAgIDYyOTczLCA2Mjk3NywgNjI5ODEsIDYyOTg1LCA2Mjk4OSwgNjI5OTMsIDYyOTk3LCA2MzAwMSwgNjMwMDUsIDYzMDA5LCAKLSAgICA2MzAxMywgNjMwMTcsIDYzMDIxLCA2MzAyNSwgNjMwMjksIDYzMDMzLCA2MzAzNywgNjMwNDEsIDYzMDQ1LCA2MzA0OSwgCi0gICAgNjMwNTMsIDYzMDU3LCA2MzA2MSwgNjMwNjUsIDYzMDY5LCA2MzA3MywgNjMwNzcsIDYzMDgxLCA2MzA4NSwgNjMwODksIAotICAgIDYzMDkzLCA2MzA5NywgNjMxMDEsIDYzMTA1LCA2MzEwOSwgNjMxMTMsIDYzMTE3LCA2MzEyMSwgNjMxMjUsIDYzMTI5LCAKLSAgICA2MzEzMywgNjMxMzcsIDYzMTQxLCA2MzE0NSwgNjMxNDksIDYzMTUzLCA2MzE1NywgNjMxNjEsIDYzMTY1LCA2MzE2OSwgCi0gICAgNjMxNzMsIDYzMTc3LCA2MzE4MSwgNjMxODUsIDYzMTg5LCA2MzE5MywgNjMxOTcsIDYzMjAxLCA2MzIwNSwgNjMyMDksIAotICAgIDYzMjEzLCA2MzIxNywgNjMyMjEsIDYzMjI1LCA2MzIyOSwgNjMyMzMsIDYzMjM3LCA2MzI0MSwgNjMyNDUsIDYzMjQ5LCAKLSAgICA2MzI1MywgNjMyNTcsIDYzMjYxLCA2MzI2NSwgNjMyNjksIDYzMjczLCA2MzI3NywgNjMyODEsIDYzMjg1LCA2MzI4OSwgCi0gICAgNjMyOTMsIDYzMjk3LCA2MzMwMSwgNjMzMDUsIDYzMzA5LCA2MzMxMywgNjMzMTcsIDYzMzIxLCA2MzMyNSwgNjMzMjksIAotICAgIDYzMzMzLCA2MzMzNywgNjMzNDEsIDYzMzQ1LCA2MzM0OSwgNjMzNTMsIDYzMzU3LCA2MzM2MSwgNjMzNjUsIDYzMzY5LCAKLSAgICA2MzM3MywgNjMzNzcsIDYzMzgxLCA2MzM4NSwgNjMzODksIDYzMzkzLCA2MzM5NywgNjM0MDEsIDYzNDA1LCA2MzQwOSwgCi0gICAgNjM0MTMsIDYzNDE3LCA2MzQyMSwgNjM0MjUsIDYzNDI5LCA2MzQzMywgNjM0MzcsIDYzNDQxLCA2MzQ0NSwgNjM0NDksIAotICAgIDYzNDUzLCA2MzQ1NywgNjM0NjEsIDYzNDY1LCA2MzQ2OSwgNjM0NzMsIDYzNDc3LCA2MzQ4MSwgNjM0ODUsIDYzNDg5LCAKLSAgICA2MzQ5MywgNjM0OTcsIDYzNTAxLCA2MzUwNSwgNjM1MDksIDYzNTEzLCA2MzUxNywgNjM1MjEsIDYzNTI1LCA2MzUyOSwgCi0gICAgNjM1MzMsIDYzNTM3LCA2MzU0MSwgNjM1NDUsIDYzNTQ5LCA2MzU1MywgNjM1NTcsIDYzNTYxLCA2MzU2NSwgNjM1NjksIAotICAgIDYzNTczLCA2MzU3NywgNjM1ODEsIDYzNTg1LCA2MzU4OSwgNjM1OTMsIDYzNTk3LCA2MzYwMSwgNjM2MDUsIDYzNjA5LCAKLSAgICA2MzYxMywgNjM2MTcsIDYzNjIxLCA2MzYyNSwgNjM2MjksIDYzNjMzLCA2MzYzNywgNjM2NDEsIDYzNjQ1LCAwLCAwLCAwLCAKLSAgICA2MzY0OSwgNjM2NTMsIDYzNjU3LCA2MzY2MSwgNjM2NjUsIDYzNjY5LCA2MzY3MywgNjM2NzcsIDYzNjgxLCA2MzY4NSwgCi0gICAgNjM2ODksIDYzNjkzLCA2MzY5NywgNjM3MDEsIDYzNzA1LCA2MzcwOSwgNjM3MTMsIDYzNzE3LCA2MzcyMSwgNjM3MjUsIAotICAgIDYzNzI5LCA2MzczMywgNjM3MzcsIDYzNzQxLCA2Mzc0NSwgNjM3NDksIDYzNzUzLCA2Mzc1NywgNjM3NjEsIDYzNzY1LCAKLSAgICA2Mzc2OSwgNjM3NzMsIDYzNzc3LCA2Mzc4MSwgNjM3ODUsIDYzNzg5LCA2Mzc5MywgNjM3OTcsIDYzODAxLCA2MzgwNSwgCi0gICAgNjM4MDksIDYzODEzLCA2MzgxNywgNjM4MjEsIDYzODI1LCA2MzgyOSwgNjM4MzMsIDYzODM3LCA2Mzg0MSwgNjM4NDUsIAotICAgIDYzODQ5LCA2Mzg1MywgNjM4NTcsIDYzODYxLCA2Mzg2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTA3MTUsIDkwNzE5LCA5MDcyMywgOTA3MjcsIDkwNzMxLCA5MDczNSwgOTA3MzksIDkwNzQzLCA5MDc0NywgOTA3NTEsIAorICAgIDkwNzU2LCA5MDc2MSwgOTA3NjYsIDkwNzcxLCA5MDc3NiwgOTA3ODEsIDkwNzg2LCA5MDc5MSwgOTA3OTYsIDkwODAyLCAKKyAgICA5MDgwOCwgOTA4MTQsIDkwODIxLCA5MDgyOCwgOTA4MzUsIDkwODQyLCA5MDg0OSwgOTA4NTYsIDkwODYzLCA5MDg3MCwgCisgICAgOTA4NzcsIDAsIDkwODg0LCA5MDg4OCwgOTA4OTIsIDkwODk2LCA5MDg5OSwgOTA5MDMsIDkwOTA2LCA5MDkxMCwgOTA5MTMsIAorICAgIDkwOTE3LCA5MDkyMCwgOTA5MjQsIDkwOTI3LCA5MDkzMSwgOTA5MzQsIDkwOTM4LCA5MDk0MiwgOTA5NDYsIDkwOTUwLCAKKyAgICA5MDk1NCwgOTA5NTgsIDkwOTYyLCA5MDk2NiwgOTA5NzAsIDkwOTc0LCA5MDk3OCwgOTA5ODIsIDkwOTg2LCA5MDk5MCwgCisgICAgOTA5OTQsIDkwOTk4LCA5MTAwMiwgOTEwMDYsIDkxMDEwLCA5MTAxNCwgOTEwMTcsIDkxMDIwLCA5MTAyNCwgOTEwMjgsIAorICAgIDkxMDMyLCA5MTAzNSwgOTEwMzgsIDkxMDQxLCA5MTA0NSwgOTEwNDksIDkxMDUzLCA5MTA1NywgOTEwNjEsIDkxMDY0LCAKKyAgICA5MTA2OSwgOTEwNzMsIDkxMDc4LCA5MTA4MiwgOTEwODcsIDkxMDkxLCA5MTA5NiwgOTExMDAsIDkxMTA1LCA5MTEwOSwgCisgICAgOTExMTMsIDkxMTE3LCA5MTEyMSwgOTExMjQsIDkxMTI4LCA5MTEzMywgOTExMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzODY5LCA2Mzg3MywgCi0gICAgNjM4NzcsIDYzODgxLCA2Mzg4NSwgNjM4ODksIDYzODkzLCA2Mzg5NywgNjM5MDEsIDYzOTA1LCA2MzkwOSwgNjM5MTMsIAotICAgIDYzOTE3LCA2MzkyMSwgNjM5MjUsIDYzOTI5LCA2MzkzMywgNjM5MzcsIDYzOTQxLCA2Mzk0NSwgNjM5NDksIDYzOTUzLCAKLSAgICA2Mzk1NywgNjM5NjEsIDYzOTY1LCA2Mzk2OSwgNjM5NzMsIDYzOTc3LCA2Mzk4MSwgNjM5ODUsIDYzOTg5LCA2Mzk5MywgCi0gICAgNjM5OTcsIDY0MDAxLCA2NDAwNSwgNjQwMDksIDY0MDEzLCA2NDAxNiwgNjQwMjAsIDY0MDI0LCA2NDAyOCwgNjQwMzIsIAotICAgIDY0MDM2LCA2NDA0MCwgNjQwNDQsIDY0MDQ4LCA2NDA1MiwgNjQwNTYsIDY0MDYwLCA2NDA2NCwgNjQwNjgsIDY0MDcyLCAKLSAgICA2NDA3NiwgNjQwODAsIDY0MDg0LCA2NDA4OCwgNjQwOTIsIDY0MDk2LCA2NDEwMCwgNjQxMDQsIDY0MTA4LCA2NDExMiwgCi0gICAgNjQxMTYsIDY0MTIwLCA2NDEyNCwgNjQxMjgsIDY0MTMyLCA2NDEzNiwgNjQxNDAsIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIAotICAgIDY0MTU2LCA2NDE2MCwgNjQxNjMsIDY0MTY3LCA2NDE3MSwgNjQxNzQsIDY0MTc4LCA2NDE4MiwgNjQxODYsIDY0MTg5LCAKLSAgICA2NDE5MywgNjQxOTcsIDY0MjAxLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgNjQyMjEsIDY0MjI1LCA2NDIyOSwgCi0gICAgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ4LCA2NDI1MiwgNjQyNTYsIDY0MjYwLCA2NDI2NCwgNjQyNjgsIAotICAgIDY0MjcyLCA2NDI3NiwgNjQyODAsIDY0Mjg0LCA2NDI4NywgNjQyOTAsIDY0Mjk0LCA2NDI5OCwgNjQzMDIsIDY0MzA1LCAKLSAgICA2NDMwOSwgNjQzMTMsIDY0MzE3LCA2NDMyMSwgNjQzMjUsIDY0MzI5LCA2NDMzMywgNjQzMzcsIDY0MzQxLCA2NDM0NSwgCi0gICAgNjQzNDksIDY0MzUzLCA2NDM1NywgNjQzNjEsIDY0MzY1LCA2NDM2OSwgNjQzNzMsIDY0Mzc3LCA2NDM4MSwgNjQzODUsIAotICAgIDY0Mzg5LCA2NDM5MywgNjQzOTcsIDY0NDAxLCA2NDQwNSwgNjQ0MDksIDY0NDEzLCA2NDQxNywgNjQ0MjEsIDY0NDI1LCAKLSAgICA2NDQyOSwgNjQ0MzMsIDY0NDM3LCA2NDQ0MSwgNjQ0NDUsIDY0NDQ5LCA2NDQ1MywgNjQ0NTcsIDY0NDYwLCA2NDQ2NCwgCi0gICAgNjQ0NjgsIDY0NDcyLCA2NDQ3NiwgNjQ0ODAsIDY0NDg0LCA2NDQ4OCwgNjQ0OTIsIDY0NDk2LCA2NDUwMCwgNjQ1MDQsIAotICAgIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIDY0NTMyLCA2NDUzNiwgNjQ1NDAsIDY0NTQ0LCAKLSAgICA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCA2NDU3MiwgNjQ1NzYsIDY0NTgwLCA2NDU4NCwgCi0gICAgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwNywgNjQ2MTEsIDY0NjE1LCA2NDYxOSwgNjQ2MjMsIAotICAgIDY0NjI3LCA2NDYzMSwgNjQ2MzUsIDY0NjM5LCA2NDY0MywgNjQ2NDcsIDY0NjUxLCA2NDY1NSwgNjQ2NTksIDY0NjYzLCAKLSAgICA2NDY2NywgNjQ2NzEsIDY0Njc0LCA2NDY3OCwgNjQ2ODIsIDY0Njg2LCA2NDY5MCwgNjQ2OTQsIDY0Njk4LCA2NDcwMiwgCi0gICAgNjQ3MDYsIDY0NzEwLCA2NDcxNCwgNjQ3MTgsIDY0NzIyLCA2NDcyNiwgNjQ3MzAsIDY0NzM0LCA2NDczOCwgNjQ3NDIsIAotICAgIDY0NzQ2LCA2NDc1MCwgNjQ3NTQsIDY0NzU4LCA2NDc2MSwgNjQ3NjUsIDY0NzY5LCA2NDc3MywgNjQ3NzcsIDY0NzgxLCAKLSAgICA2NDc4NSwgNjQ3ODksIDY0NzkzLCA2NDc5NywgNjQ4MDEsIDY0ODA1LCA2NDgwOSwgNjQ4MTMsIDY0ODE3LCA2NDgyMSwgCi0gICAgNjQ4MjUsIDY0ODI5LCA2NDgzMywgNjQ4MzcsIDY0ODQxLCA2NDg0NSwgNjQ4NDksIDY0ODUzLCA2NDg1NywgNjQ4NjEsIAotICAgIDY0ODY1LCA2NDg2OSwgNjQ4NzMsIDY0ODc3LCA2NDg4MSwgNjQ4ODUsIDY0ODg5LCA2NDg5MywgNjQ4OTcsIDY0OTAxLCAKLSAgICA2NDkwNSwgNjQ5MDksIDY0OTEzLCA2NDkxNywgNjQ5MjEsIDY0OTI1LCA2NDkyOSwgNjQ5MzMsIDY0OTM2LCA2NDk0MSwgCi0gICAgNjQ5NDUsIDY0OTUxLCA2NDk1NiwgNjQ5NjIsIDY0OTY2LCA2NDk3MCwgNjQ5NzQsIDY0OTc4LCA2NDk4MiwgNjQ5ODYsIAotICAgIDY0OTkwLCA2NDk5NCwgNjQ5OTgsIDY1MDAyLCA2NTAwNiwgNjUwMTAsIDY1MDE0LCA2NTAxOCwgNjUwMjEsIDY1MDI0LCAKLSAgICA2NTAyNywgNjUwMzAsIDY1MDMzLCA2NTAzNiwgNjUwMzksIDY1MDQyLCA2NTA0NSwgNjUwNTAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MDU2LCA2NTA2MSwgNjUwNjYsIDY1MDcxLCAKLSAgICA2NTA3NiwgNjUwODIsIDY1MDg4LCA2NTA5MywgNjUwOTgsIDY1MTAzLCA2NTEwOCwgNjUxMTUsIDY1MTIyLCA2NTEyOSwgCi0gICAgNjUxMzYsIDY1MTQzLCA2NTE1MCwgNjUxNjAsIDY1MTcwLCA2NTE3NywgNjUxODQsIDY1MTkwLCA2NTE5NiwgNjUyMDIsIAotICAgIDY1MjA4LCA2NTIxNywgNjUyMjYsIDY1MjMzLCA2NTI0MCwgNjUyNTEsIDY1MjYyLCA2NTI2NywgMCwgMCwgNjUyNzIsIAotICAgIDY1Mjc5LCA2NTI4NiwgNjUyOTMsIDY1MzAwLCA2NTMwNywgNjUzMTQsIDY1MzIwLCA2NTMyNiwgNjUzMzIsIDY1MzM4LCAKLSAgICA2NTM0NSwgNjUzNTIsIDY1MzU3LCA2NTM2MSwgNjUzNjgsIDY1Mzc1LCA2NTM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTcsIDY1NDAwLCA2NTQwNSwgNjU0MTAsIDY1NDE1LCA2NTQyMCwgNjU0MjUsIAotICAgIDY1NDMwLCA2NTQzNSwgNjU0NDAsIDY1NDQ1LCA2NTQ1MCwgNjU0NTksIDY1NDY4LCA2NTQ3MywgNjU0NzgsIDY1NDgzLCAKLSAgICA2NTQ4OCwgNjU0OTMsIDY1NDk4LCA2NTUwMywgNjU1MDgsIDY1NTEzLCA2NTUxOCwgNjU1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDkxMTQwLCA5MTE0MywgOTExNDgsIDkxMTU0LCA5MTE2MiwgOTExNjcsIDkxMTczLCA5MTE4MSwgCisgICAgOTExODcsIDkxMTkzLCA5MTE5NywgOTEyMDEsIDkxMjA4LCA5MTIxNywgOTEyMjQsIDkxMjMzLCA5MTIzOSwgOTEyNDgsIAorICAgIDkxMjU1LCA5MTI2MiwgOTEyNjksIDkxMjc5LCA5MTI4NSwgOTEyODksIDkxMjk2LCA5MTMwNSwgOTEzMTUsIDkxMzIyLCAKKyAgICA5MTMyOSwgOTEzMzMsIDkxMzM3LCA5MTM0NCwgOTEzNTQsIDkxMzU4LCA5MTM2NSwgOTEzNzIsIDkxMzc5LCA5MTM4NSwgCisgICAgOTEzOTIsIDkxMzk5LCA5MTQwNiwgOTE0MTMsIDkxNDE3LCA5MTQyMSwgOTE0MjUsIDkxNDMyLCA5MTQzNiwgOTE0NDMsIAorICAgIDkxNDUwLCA5MTQ2NCwgOTE0NzMsIDkxNDc3LCA5MTQ4MSwgOTE0ODUsIDkxNDkyLCA5MTQ5NiwgOTE1MDAsIDkxNTA0LCAKKyAgICA5MTUxMiwgOTE1MjAsIDkxNTM5LCA5MTU0OSwgOTE1NjksIDkxNTczLCA5MTU3NywgOTE1ODEsIDkxNTg1LCA5MTU4OSwgCisgICAgOTE1OTMsIDkxNTk3LCA5MTYwNCwgOTE2MDgsIDkxNjExLCA5MTYxNSwgOTE2MTksIDkxNjI1LCA5MTYzMiwgOTE2NDEsIAorICAgIDkxNjQ1LCA5MTY1NCwgOTE2NjMsIDkxNjcxLCA5MTY3NSwgOTE2ODIsIDkxNjg2LCA5MTY5MCwgOTE2OTQsIDkxNjk4LCAKKyAgICA5MTcwOSwgOTE3MTgsIDkxNzI3LCA5MTczNiwgOTE3NDUsIDkxNzU3LCA5MTc2NiwgOTE3NzUsIDkxNzg0LCA5MTc5MiwgCisgICAgOTE4MDEsIDkxODEzLCA5MTgyMiwgOTE4MzEsIDkxODQwLCA5MTg1MiwgOTE4NjEsIDkxODcwLCA5MTg4MiwgOTE4OTEsIAorICAgIDkxOTAwLCA5MTkxMiwgOTE5MjEsIDkxOTI1LCA5MTkyOSwgOTE5MzMsIDkxOTM3LCA5MTk0MSwgOTE5NDUsIDkxOTQ5LCAKKyAgICA5MTk1NiwgOTE5NjAsIDkxOTY0LCA5MTk3NSwgOTE5NzksIDkxOTgzLCA5MTk5MCwgOTE5OTYsIDkyMDAyLCA5MjAwNiwgCisgICAgOTIwMTMsIDkyMDE3LCA5MjAyMSwgOTIwMjUsIDkyMDI5LCA5MjAzMywgOTIwMzcsIDkyMDQzLCA5MjA1MSwgOTIwNTUsIAorICAgIDkyMDU5LCA5MjA2MiwgOTIwNjgsIDkyMDc4LCA5MjA4MiwgOTIwOTQsIDkyMTAxLCA5MjEwOCwgOTIxMTUsIDkyMTIyLCAKKyAgICA5MjEyOCwgOTIxMzIsIDkyMTM2LCA5MjE0MCwgOTIxNDQsIDkyMTUxLCA5MjE2MCwgOTIxNjcsIDkyMTc1LCA5MjE4MywgCisgICAgOTIxODksIDkyMTkzLCA5MjE5NywgOTIyMDEsIDkyMjA1LCA5MjIxMSwgOTIyMjAsIDkyMjMyLCA5MjIzOSwgOTIyNDYsIAorICAgIDkyMjU1LCA5MjI2NiwgOTIyNzIsIDkyMjgxLCA5MjI5MCwgOTIyOTcsIDkyMzA2LCA5MjMxMywgOTIzMjAsIDkyMzMwLCAKKyAgICA5MjMzNywgOTIzNDQsIDkyMzUxLCA5MjM1OCwgOTIzNjIsIDkyMzY4LCA5MjM3MiwgOTIzODMsIDkyMzkxLCA5MjQwMCwgCisgICAgOTI0MTIsIDkyNDE5LCA5MjQyNiwgOTI0MzYsIDkyNDQzLCA5MjQ1MiwgOTI0NTksIDkyNDY4LCA5MjQ3NSwgOTI0ODIsIAorICAgIDkyNDkyLCA5MjQ5OSwgOTI1MDYsIDkyNTE2LCA5MjUyMywgOTI1MzUsIDkyNTQ0LCA5MjU1MSwgOTI1NTgsIDkyNTY1LCAKKyAgICA5MjU3NCwgOTI1ODQsIDkyNTk3LCA5MjYwNCwgOTI2MTQsIDkyNjI0LCA5MjYzMSwgOTI2NDAsIDkyNjUzLCA5MjY2MCwgCisgICAgOTI2NjcsIDkyNjc0LCA5MjY4NCwgOTI2OTQsIDkyNzAxLCA5MjcxMSwgOTI3MTgsIDkyNzI1LCA5MjczNSwgOTI3NDEsIAorICAgIDkyNzQ4LCA5Mjc1NSwgOTI3NjIsIDkyNzcyLCA5Mjc3OSwgOTI3ODYsIDkyNzkzLCA5Mjc5OSwgOTI4MDYsIDkyODE2LCAKKyAgICA5MjgyMywgOTI4MjcsIDkyODM1LCA5MjgzOSwgOTI4NTEsIDkyODU1LCA5Mjg2OSwgOTI4NzMsIDkyODc3LCA5Mjg4MSwgCisgICAgOTI4ODUsIDkyODkxLCA5Mjg5OCwgOTI5MDYsIDkyOTEwLCA5MjkxNCwgOTI5MTgsIDkyOTIyLCA5MjkyOSwgOTI5MzMsIAorICAgIDkyOTM5LCA5Mjk0NSwgOTI5NTMsIDkyOTU3LCA5Mjk2NCwgOTI5NzIsIDkyOTc2LCA5Mjk4MCwgOTI5ODYsIDkyOTkwLCAKKyAgICA5Mjk5OSwgOTMwMDgsIDkzMDE1LCA5MzAyNSwgOTMwMzEsIDkzMDM1LCA5MzAzOSwgOTMwNDcsIDkzMDU0LCA5MzA2MSwgCisgICAgOTMwNjcsIDkzMDcxLCA5MzA3OSwgOTMwODMsIDkzMDkwLCA5MzEwMiwgOTMxMDksIDkzMTE5LCA5MzEyNSwgOTMxMjksIAorICAgIDkzMTM4LCA5MzE0NSwgOTMxNTQsIDkzMTU4LCA5MzE2MiwgOTMxNjksIDkzMTczLCA5MzE3NywgOTMxODEsIDkzMTg1LCAKKyAgICA5MzE4OCwgOTMxOTQsIDkzMjAwLCA5MzIwNCwgOTMyMDgsIDkzMjE1LCA5MzIyMiwgOTMyMjksIDkzMjM2LCA5MzI0MywgCisgICAgOTMyNTAsIDkzMjU3LCA5MzI2NCwgOTMyNzAsIDkzMjc0LCA5MzI3OCwgOTMyODUsIDkzMjkyLCA5MzI5OSwgOTMzMDYsIAorICAgIDkzMzEzLCA5MzMxNywgOTMzMjAsIDkzMzI1LCA5MzMyOSwgOTMzMzMsIDkzMzQyLCA5MzM1MSwgOTMzNTUsIDkzMzU5LCAKKyAgICA5MzM2NSwgOTMzNzEsIDkzMzg4LCA5MzM5NCwgOTMzOTgsIDkzNDA3LCA5MzQxMSwgOTM0MTUsIDkzNDIyLCA5MzQzMCwgCisgICAgOTM0MzgsIDkzNDQ0LCA5MzQ0OCwgOTM0NTIsIDkzNDU2LCA5MzQ2MCwgOTM0NjMsIDkzNDY4LCA5MzQ3NCwgOTM0ODMsIAorICAgIDkzNDg5LCA5MzQ5NSwgOTM1MDEsIDkzNTA2LCA5MzUxMiwgOTM1MTgsIDkzNTI0LCA5MzUzMCwgOTM1MzYsIDkzNTQ0LCAKKyAgICA5MzU1MCwgOTM1NjEsIDkzNTY3LCA5MzU3MywgOTM1ODIsIDkzNTkyLCA5MzU5OCwgOTM2MDQsIDkzNjEwLCA5MzYxNiwgCisgICAgOTM2MjIsIDkzNjI4LCA5MzYzNCwgOTM2NDAsIDkzNjQ2LCA5MzY1MiwgOTM2NjEsIDkzNjcwLCA5MzY3OSwgOTM2ODUsIAorICAgIDkzNjk0LCA5MzcwMCwgOTM3MDYsIDkzNzEyLCA5MzcxOCwgOTM3MjQsIDkzNzMwLCA5MzczNiwgOTM3NDIsIDkzNzQ4LCAKKyAgICA5Mzc1NCwgOTM3NjAsIDkzNzY2LCA5Mzc3MiwgOTM3NzcsIDkzNzgzLCA5Mzc4OSwgOTM3OTcsIDkzODAzLCA5MzgwOSwgCisgICAgOTM4MTMsIDkzODIxLCA5MzgyNSwgOTM4MjksIDkzODMzLCA5MzgzNywgOTM4NDEsIDkzODQ4LCA5Mzg1MiwgOTM4NjEsIAorICAgIDkzODY1LCA5Mzg3MiwgOTM4ODAsIDkzODg0LCA5Mzg4OCwgOTM4OTIsIDkzOTA1LCA5MzkyMSwgOTM5MjUsIDkzOTI5LCAKKyAgICA5MzkzNiwgOTM5NDIsIDkzOTQ5LCA5Mzk1MywgOTM5NTcsIDkzOTYxLCA5Mzk2NSwgOTM5NjksIDkzOTc2LCA5Mzk4MCwgCisgICAgOTM5OTgsIDk0MDAyLCA5NDAwNiwgOTQwMTMsIDk0MDE3LCA5NDAyMSwgOTQwMjcsIDk0MDMxLCA5NDAzNSwgOTQwNDMsIAorICAgIDk0MDQ3LCA5NDA1MSwgOTQwNTUsIDk0MDU5LCA5NDA2NSwgOTQwNzYsIDk0MDg1LCA5NDA5NCwgOTQxMDEsIDk0MTA4LCAKKyAgICA5NDExOSwgOTQxMjYsIDk0MTMzLCA5NDE0MCwgOTQxNDcsIDk0MTU0LCA5NDE2MSwgOTQxNjgsIDk0MTc4LCA5NDE4NCwgCisgICAgOTQxOTEsIDk0MjAxLCA5NDIxMCwgOTQyMTcsIDk0MjI2LCA5NDIzNiwgOTQyNDMsIDk0MjUwLCA5NDI1NywgOTQyNjQsIAorICAgIDk0Mjc2LCA5NDI4MywgOTQyOTAsIDk0Mjk3LCA5NDMwNCwgOTQzMTEsIDk0MzIxLCA5NDMyOCwgOTQzMzUsIDk0MzQ1LCAKKyAgICA5NDM1OCwgOTQzNzAsIDk0Mzc3LCA5NDM4NywgOTQzOTQsIDk0NDAxLCA5NDQwOCwgOTQ0MjIsIDk0NDI4LCA5NDQzNiwgCisgICAgOTQ0NDYsIDk0NDU2LCA5NDQ2MywgOTQ0NzAsIDk0NDc2LCA5NDQ4MCwgOTQ0ODcsIDk0NDk3LCA5NDUwMywgOTQ1MTYsIAorICAgIDk0NTIwLCA5NDUyNCwgOTQ1MzEsIDk0NTM1LCA5NDU0MiwgOTQ1NTIsIDk0NTU2LCA5NDU2MCwgOTQ1NjQsIDk0NTY4LCAKKyAgICA5NDU3MiwgOTQ1NzksIDk0NTgzLCA5NDU5MCwgOTQ1OTcsIDk0NjA0LCA5NDYxMywgOTQ2MjIsIDk0NjMyLCA5NDYzOSwgCisgICAgOTQ2NDYsIDk0NjUzLCA5NDY2MywgOTQ2NzAsIDk0NjgwLCA5NDY4NywgOTQ2OTcsIDk0NzA0LCA5NDcxMSwgOTQ3MjEsIAorICAgIDk0NzMxLCA5NDczOCwgOTQ3NDQsIDk0NzUyLCA5NDc2MCwgOTQ3NjYsIDk0NzcyLCA5NDc3NiwgOTQ3ODAsIDk0Nzg3LCAKKyAgICA5NDc5NSwgOTQ4MDEsIDk0ODA1LCA5NDgwOSwgOTQ4MTMsIDk0ODIwLCA5NDgzMiwgOTQ4MzUsIDk0ODQyLCA5NDg0OCwgCisgICAgOTQ4NTIsIDk0ODU2LCA5NDg2MCwgOTQ4NjQsIDk0ODY4LCA5NDg3MiwgOTQ4NzYsIDk0ODgwLCA5NDg4NCwgOTQ4ODgsIAorICAgIDk0ODk1LCA5NDg5OSwgOTQ5MDUsIDk0OTA5LCA5NDkxMywgOTQ5MTcsIDk0OTIzLCA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCAKKyAgICA5NDk1NSwgOTQ5NjMsIDk0OTY3LCA5NDk3MywgOTQ5ODIsIDk0OTg5LCA5NDk5NSwgOTQ5OTgsIDk1MDAyLCA5NTAwNiwgCisgICAgOTUwMTIsIDk1MDIxLCA5NTAyOSwgOTUwMzMsIDk1MDM5LCA5NTA0MywgOTUwNDcsIDk1MDUxLCA5NTA1NywgOTUwNjQsIAorICAgIDk1MDcwLCA5NTA3NCwgOTUwODAsIDk1MDg0LCA5NTA4OCwgOTUwOTcsIDk1MTA5LCA5NTExMywgOTUxMjAsIDk1MTI3LCAKKyAgICA5NTEzNywgOTUxNDQsIDk1MTU2LCA5NTE2MywgOTUxNzAsIDk1MTc3LCA5NTE4OCwgOTUxOTgsIDk1MjExLCA5NTIyMSwgCisgICAgOTUyMjgsIDk1MjMyLCA5NTIzNiwgOTUyNDAsIDk1MjQ0LCA5NTI1MywgOTUyNjIsIDk1MjcxLCA5NTI4OCwgOTUyOTcsIAorICAgIDk1MzAzLCA5NTMxMCwgOTUzMTgsIDk1MzMxLCA5NTMzNSwgOTUzNDQsIDk1MzUzLCA5NTM2MiwgOTUzNzEsIDk1MzgyLCAKKyAgICA5NTM5MSwgOTU0MDAsIDk1NDA5LCA5NTQxOCwgOTU0MjcsIDk1NDM2LCA5NTQ0NiwgOTU0NDksIDk1NDUzLCA5NTQ1NywgCisgICAgOTU0NjEsIDk1NDY1LCA5NTQ2OSwgOTU0NzUsIDk1NDgyLCA5NTQ4OSwgOTU0OTYsIDk1NTAyLCA5NTUwOCwgOTU1MTUsIAorICAgIDk1NTIxLCA5NTUyOCwgOTU1MzYsIDk1NTQwLCA5NTU0NywgOTU1NTQsIDk1NTYxLCA5NTU2OSwgOTU1NzIsIDk1NTc2LCAKKyAgICA5NTU4MCwgOTU1ODQsIDk1NTg4LCA5NTU5NCwgOTU1OTgsIDk1NjA0LCA5NTYxMSwgOTU2MTgsIDk1NjI0LCA5NTYzMSwgCisgICAgOTU2MzgsIDk1NjQ1LCA5NTY1MiwgOTU2NTksIDk1NjY2LCA5NTY3MywgOTU2ODAsIDk1Njg3LCA5NTY5NCwgOTU3MDEsIAorICAgIDk1NzA4LCA5NTcxNSwgOTU3MjIsIDk1NzI4LCA5NTczMiwgOTU3NDEsIDk1NzQ1LCA5NTc0OSwgOTU3NTMsIDk1NzU3LCAKKyAgICA5NTc2MywgOTU3NzAsIDk1Nzc3LCA5NTc4NCwgOTU3OTEsIDk1Nzk4LCA5NTgwNCwgOTU4MTIsIDk1ODE2LCA5NTgyMCwgCisgICAgOTU4MjQsIDk1ODI4LCA5NTgzNCwgOTU4NTEsIDk1ODY4LCA5NTg3MiwgOTU4NzYsIDk1ODgwLCA5NTg4NCwgOTU4ODgsIAorICAgIDk1ODkyLCA5NTg5OCwgOTU5MDUsIDk1OTA5LCA5NTkxNSwgOTU5MjIsIDk1OTI5LCA5NTkzNiwgOTU5NDMsIDk1OTUwLCAKKyAgICA5NTk1OSwgOTU5NjYsIDk1OTczLCA5NTk4MCwgOTU5ODcsIDk1OTkxLCA5NTk5NSwgOTYwMDEsIDk2MDEzLCA5NjAxNywgCisgICAgOTYwMjEsIDk2MDMwLCA5NjAzNCwgOTYwMzgsIDk2MDQyLCA5NjA0OCwgOTYwNTIsIDk2MDU2LCA5NjA2NSwgOTYwNjksIAorICAgIDk2MDczLCA5NjA3NywgOTYwODQsIDk2MDg4LCA5NjA5MiwgOTYwOTYsIDk2MTAwLCA5NjEwNCwgOTYxMDgsIDk2MTEyLCAKKyAgICA5NjExNiwgOTYxMjIsIDk2MTI5LCA5NjEzNiwgOTYxNDIsIDk2MTQ2LCA5NjE2MywgOTYxNjksIDk2MTczLCA5NjE3OSwgCisgICAgOTYxODUsIDk2MTkxLCA5NjE5NywgOTYyMDMsIDk2MjA5LCA5NjIxMywgOTYyMTcsIDk2MjIxLCA5NjIyNywgOTYyMzEsIAorICAgIDk2MjM3LCA5NjI0MSwgOTYyNDUsIDk2MjUyLCA5NjI1OSwgOTYyNzYsIDk2MjgwLCA5NjI4NCwgOTYyODgsIDk2MjkyLCAKKyAgICA5NjI5NiwgOTYzMDgsIDk2MzExLCA5NjMxNiwgOTYzMjEsIDk2MzM2LCA5NjM0NiwgOTYzNTcsIDk2MzYxLCA5NjM2NSwgCisgICAgOTYzNjksIDk2Mzc1LCA5NjM4MiwgOTYzODksIDk2Mzk5LCA5NjQxMSwgOTY0MTcsIDk2NDIzLCA5NjQzMiwgOTY0MzYsIAorICAgIDk2NDQwLCA5NjQ0NywgOTY0NTcsIDk2NDY0LCA5NjQ3MCwgOTY0NzQsIDk2NDc4LCA5NjQ4NSwgOTY0OTEsIDk2NDk1LCAKKyAgICA5NjUwMSwgOTY1MDUsIDk2NTEzLCA5NjUxOSwgOTY1MjMsIDk2NTMxLCA5NjUzOSwgOTY1NDYsIDk2NTUyLCA5NjU1OSwgCisgICAgOTY1NjYsIDk2NTc2LCA5NjU4NiwgOTY1OTAsIDk2NTk0LCA5NjU5OCwgOTY2MDIsIDk2NjA4LCA5NjYxNSwgOTY2MjEsIAorICAgIDk2NjI4LCA5NjYzNSwgOTY2NDIsIDk2NjUxLCA5NjY1OCwgOTY2NjUsIDk2NjcxLCA5NjY3OCwgOTY2ODUsIDk2NjkyLCAKKyAgICA5NjY5OSwgOTY3MDYsIDk2NzEzLCA5NjcxOSwgOTY3MjYsIDk2NzMzLCA5Njc0MCwgOTY3NDksIDk2NzU2LCA5Njc2MywgCisgICAgOTY3NjcsIDk2NzczLCA5Njc3NywgOTY3ODMsIDk2NzkwLCA5Njc5NywgOTY4MDQsIDk2ODA4LCA5NjgxMiwgOTY4MTYsIAorICAgIDk2ODIwLCA5NjgyNCwgOTY4MzEsIDk2ODM1LCA5NjgzOSwgOTY4NDUsIDk2ODUzLCA5Njg1NywgOTY4NjEsIDk2ODY1LCAKKyAgICA5Njg2OSwgOTY4NzYsIDk2ODgwLCA5Njg4NCwgOTY4OTIsIDk2ODk2LCA5NjkwMCwgOTY5MDQsIDk2OTA4LCA5NjkxNCwgCisgICAgOTY5MTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2OTIyLCA5NjkyOCwgCisgICAgOTY5MzQsIDk2OTQxLCA5Njk0OCwgOTY5NTUsIDk2OTYyLCA5Njk2OSwgOTY5NzYsIDk2OTgyLCA5Njk4OSwgOTY5OTYsIAorICAgIDk3MDAzLCA5NzAxMCwgOTcwMTcsIDk3MDI0LCA5NzAzMCwgOTcwMzYsIDk3MDQyLCA5NzA0OCwgOTcwNTQsIDk3MDYwLCAKKyAgICA5NzA2NiwgOTcwNzIsIDk3MDc4LCA5NzA4NSwgOTcwOTIsIDk3MDk5LCA5NzEwNiwgOTcxMTMsIDk3MTIwLCA5NzEyNiwgCisgICAgOTcxMzIsIDk3MTM4LCA5NzE0NSwgOTcxNTIsIDk3MTU4LCA5NzE2NCwgOTcxNzMsIDk3MTgwLCA5NzE4NywgOTcxOTQsIAorICAgIDk3MjAxLCA5NzIwOCwgOTcyMTUsIDk3MjIxLCA5NzIyNywgOTcyMzMsIDk3MjQyLCA5NzI0OSwgOTcyNTYsIDk3MjY3LCAKKyAgICA5NzI3OCwgOTcyODQsIDk3MjkwLCA5NzI5NiwgOTczMDUsIDk3MzEyLCA5NzMxOSwgOTczMjksIDk3MzM5LCA5NzM1MCwgCisgICAgOTczNjEsIDk3MzczLCA5NzM4NiwgOTczOTcsIDk3NDA4LCA5NzQyMCwgOTc0MzMsIDk3NDQ0LCA5NzQ1NSwgOTc0NjYsIAorICAgIDk3NDc3LCA5NzQ4OCwgOTc1MDAsIDk3NTA4LCA5NzUxNiwgOTc1MjUsIDk3NTM0LCA5NzU0MywgOTc1NDksIDk3NTU1LCAKKyAgICA5NzU2MSwgOTc1NjgsIDk3NTc4LCA5NzU4NSwgOTc1OTUsIDk3NjAwLCA5NzYwNSwgOTc2MTEsIDk3NjE3LCA5NzYyNSwgCisgICAgOTc2MzMsIDk3NjQyLCA5NzY1MywgOTc2NjQsIDk3NjcyLCA5NzY4MCwgOTc2ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDk3Njk4LCA5NzcwOSwgOTc3MTYsIDk3NzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA5NzczMiwgOTc3MzYsIDk3NzQwLCA5Nzc0NCwgOTc3NDgsIDk3NzUyLCA5Nzc1NiwgOTc3NjAsIDk3NzY0LCAKKyAgICA5Nzc2OCwgOTc3NzIsIDk3Nzc2LCA5Nzc4MCwgOTc3ODQsIDk3Nzg4LCA5Nzc5MiwgOTc3OTYsIDk3ODAwLCA5NzgwNCwgCisgICAgOTc4MDgsIDk3ODEyLCA5NzgxNiwgOTc4MjAsIDk3ODI0LCA5NzgyOCwgOTc4MzIsIDk3ODM2LCA5Nzg0MCwgOTc4NDQsIAorICAgIDk3ODQ4LCA5Nzg1MiwgOTc4NTYsIDk3ODYwLCA5Nzg2NCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCAKKyAgICA5Nzg4OCwgOTc4OTIsIDk3ODk2LCA5NzkwMCwgOTc5MDQsIDk3OTA4LCA5NzkxMiwgOTc5MTYsIDk3OTIwLCA5NzkyNCwgCisgICAgOTc5MjgsIDk3OTMyLCA5NzkzNiwgOTc5NDAsIDk3OTQ0LCA5Nzk0OCwgOTc5NTIsIDk3OTU2LCA5Nzk2MCwgOTc5NjQsIAorICAgIDk3OTY4LCA5Nzk3MiwgOTc5NzYsIDk3OTgwLCA5Nzk4NCwgOTc5ODgsIDk3OTkyLCA5Nzk5NiwgOTgwMDAsIDk4MDA0LCAKKyAgICA5ODAwOCwgOTgwMTIsIDk4MDE2LCA5ODAyMCwgOTgwMjQsIDk4MDI4LCA5ODAzMiwgOTgwMzYsIDk4MDQwLCA5ODA0NCwgCisgICAgOTgwNDgsIDk4MDUyLCA5ODA1NiwgOTgwNjAsIDk4MDY0LCA5ODA2OCwgOTgwNzIsIDk4MDc2LCA5ODA4MCwgOTgwODQsIAorICAgIDk4MDg4LCA5ODA5MiwgOTgwOTYsIDk4MTAwLCA5ODEwNCwgOTgxMDgsIDk4MTEyLCA5ODExNiwgOTgxMjAsIDk4MTI0LCAKKyAgICA5ODEyOCwgOTgxMzIsIDk4MTM2LCA5ODE0MCwgOTgxNDQsIDk4MTQ4LCA5ODE1MiwgOTgxNTYsIDk4MTYwLCA5ODE2NCwgCisgICAgOTgxNjgsIDk4MTcyLCA5ODE3NiwgOTgxODAsIDk4MTg0LCA5ODE4OCwgOTgxOTIsIDk4MTk2LCA5ODIwMCwgOTgyMDQsIAorICAgIDk4MjA4LCA5ODIxMiwgOTgyMTYsIDk4MjIwLCA5ODIyNCwgOTgyMjgsIDk4MjMyLCA5ODIzNiwgOTgyNDAsIDk4MjQ0LCAKKyAgICA5ODI0OCwgOTgyNTIsIDk4MjU2LCA5ODI2MCwgOTgyNjQsIDk4MjY4LCA5ODI3MiwgOTgyNzYsIDk4MjgwLCA5ODI4NCwgCisgICAgOTgyODgsIDk4MjkyLCA5ODI5NiwgOTgzMDAsIDk4MzA0LCA5ODMwOCwgOTgzMTIsIDk4MzE2LCA5ODMyMCwgOTgzMjQsIAorICAgIDk4MzI4LCA5ODMzMiwgOTgzMzYsIDk4MzQwLCA5ODM0NCwgOTgzNDgsIDk4MzUyLCA5ODM1NiwgOTgzNjAsIDk4MzY0LCAKKyAgICA5ODM2OCwgOTgzNzIsIDk4Mzc2LCA5ODM4MCwgOTgzODQsIDk4Mzg4LCA5ODM5MiwgOTgzOTYsIDk4NDAwLCA5ODQwNCwgCisgICAgOTg0MDgsIDk4NDEyLCA5ODQxNiwgOTg0MjAsIDk4NDI0LCA5ODQyOCwgOTg0MzIsIDk4NDM2LCA5ODQ0MCwgOTg0NDQsIAorICAgIDk4NDQ4LCA5ODQ1MiwgOTg0NTYsIDk4NDYwLCA5ODQ2NCwgOTg0NjgsIDk4NDcyLCA5ODQ3NiwgOTg0ODAsIDk4NDg0LCAKKyAgICA5ODQ4OCwgOTg0OTIsIDk4NDk2LCA5ODUwMCwgOTg1MDQsIDk4NTA4LCA5ODUxMiwgOTg1MTYsIDk4NTIwLCA5ODUyNCwgCisgICAgOTg1MjgsIDk4NTMyLCA5ODUzNiwgOTg1NDAsIDk4NTQ0LCA5ODU0OCwgOTg1NTIsIDk4NTU2LCA5ODU2MCwgOTg1NjQsIAorICAgIDk4NTY4LCA5ODU3MiwgOTg1NzYsIDk4NTgwLCA5ODU4NCwgOTg1ODgsIDk4NTkyLCA5ODU5NiwgOTg2MDAsIDk4NjA0LCAKKyAgICA5ODYwOCwgOTg2MTIsIDk4NjE2LCA5ODYyMCwgOTg2MjQsIDk4NjI4LCA5ODYzMiwgOTg2MzYsIDk4NjQwLCA5ODY0NCwgCisgICAgOTg2NDgsIDk4NjUyLCA5ODY1NiwgOTg2NjAsIDk4NjY0LCA5ODY2OCwgOTg2NzIsIDk4Njc2LCA5ODY4MCwgOTg2ODQsIAorICAgIDk4Njg4LCA5ODY5MiwgOTg2OTYsIDk4NzAwLCA5ODcwNCwgOTg3MDgsIDk4NzEyLCA5ODcxNiwgOTg3MjAsIDk4NzI0LCAKKyAgICA5ODcyOCwgOTg3MzIsIDk4NzM2LCA5ODc0MCwgOTg3NDQsIDk4NzQ4LCA5ODc1MiwgOTg3NTYsIDk4NzYwLCA5ODc2NCwgCisgICAgOTg3NjgsIDk4NzcyLCA5ODc3NiwgOTg3ODAsIDk4Nzg0LCA5ODc4OCwgOTg3OTIsIDk4Nzk2LCA5ODgwMCwgOTg4MDQsIAorICAgIDk4ODA4LCA5ODgxMiwgOTg4MTYsIDk4ODIwLCA5ODgyNCwgOTg4MjgsIDk4ODMyLCA5ODgzNiwgOTg4NDAsIDk4ODQ0LCAKKyAgICA5ODg0OCwgOTg4NTIsIDk4ODU2LCA5ODg2MCwgOTg4NjQsIDk4ODY4LCA5ODg3MiwgOTg4NzYsIDk4ODgwLCA5ODg4NCwgCisgICAgOTg4ODgsIDk4ODkyLCA5ODg5NiwgOTg5MDAsIDk4OTA0LCA5ODkwOCwgOTg5MTIsIDk4OTE2LCA5ODkyMCwgOTg5MjQsIAorICAgIDk4OTI4LCA5ODkzMiwgOTg5MzYsIDk4OTQwLCA5ODk0NCwgOTg5NDgsIDk4OTUyLCA5ODk1NiwgOTg5NjAsIDk4OTY0LCAKKyAgICA5ODk2OCwgOTg5NzIsIDk4OTc2LCA5ODk4MCwgOTg5ODQsIDk4OTg4LCA5ODk5MiwgOTg5OTYsIDk5MDAwLCA5OTAwNCwgCisgICAgOTkwMDgsIDk5MDEyLCA5OTAxNiwgOTkwMjAsIDk5MDI0LCA5OTAyOCwgOTkwMzIsIDk5MDM2LCA5OTA0MCwgOTkwNDQsIAorICAgIDk5MDQ4LCA5OTA1MiwgOTkwNTYsIDk5MDYwLCA5OTA2NCwgOTkwNjgsIDk5MDcyLCA5OTA3NiwgOTkwODAsIDk5MDg0LCAKKyAgICA5OTA4OCwgOTkwOTIsIDk5MDk2LCA5OTEwMCwgOTkxMDQsIDk5MTA4LCA5OTExMiwgOTkxMTYsIDk5MTIwLCA5OTEyNCwgCisgICAgOTkxMjgsIDk5MTMyLCA5OTEzNiwgOTkxNDAsIDk5MTQ0LCA5OTE0OCwgOTkxNTIsIDk5MTU2LCA5OTE2MCwgOTkxNjQsIAorICAgIDk5MTY4LCA5OTE3MiwgOTkxNzYsIDk5MTgwLCA5OTE4NCwgOTkxODgsIDk5MTkyLCA5OTE5NiwgOTkyMDAsIDk5MjA0LCAKKyAgICA5OTIwOCwgOTkyMTIsIDk5MjE2LCA5OTIyMCwgOTkyMjQsIDk5MjI4LCA5OTIzMiwgOTkyMzYsIDk5MjQwLCA5OTI0NCwgCisgICAgOTkyNDgsIDk5MjUyLCA5OTI1NiwgOTkyNjAsIDk5MjY0LCA5OTI2OCwgOTkyNzIsIDk5Mjc2LCA5OTI4MCwgOTkyODQsIAorICAgIDk5Mjg4LCA5OTI5MiwgOTkyOTYsIDk5MzAwLCA5OTMwNCwgOTkzMDgsIDk5MzEyLCA5OTMxNiwgOTkzMjAsIDk5MzI0LCAKKyAgICA5OTMyOCwgOTkzMzIsIDk5MzM2LCA5OTM0MCwgOTkzNDQsIDk5MzQ4LCA5OTM1MiwgOTkzNTYsIDk5MzYwLCA5OTM2NCwgCisgICAgOTkzNjgsIDk5MzcyLCA5OTM3NiwgOTkzODAsIDk5Mzg0LCA5OTM4OCwgOTkzOTIsIDk5Mzk2LCA5OTQwMCwgOTk0MDQsIAorICAgIDk5NDA4LCA5OTQxMiwgOTk0MTYsIDk5NDIwLCA5OTQyNCwgOTk0MjgsIDk5NDMyLCA5OTQzNiwgOTk0NDAsIDk5NDQ0LCAKKyAgICA5OTQ0OCwgOTk0NTIsIDk5NDU2LCA5OTQ2MCwgOTk0NjQsIDk5NDY4LCA5OTQ3MiwgOTk0NzYsIDk5NDgwLCA5OTQ4NCwgCisgICAgOTk0ODgsIDk5NDkyLCA5OTQ5NiwgOTk1MDAsIDk5NTA0LCA5OTUwOCwgOTk1MTIsIDk5NTE2LCA5OTUyMCwgOTk1MjQsIAorICAgIDk5NTI4LCA5OTUzMiwgOTk1MzYsIDk5NTQwLCA5OTU0NCwgOTk1NDgsIDk5NTUyLCA5OTU1NiwgOTk1NjAsIDk5NTY0LCAKKyAgICA5OTU2OCwgOTk1NzIsIDk5NTc2LCA5OTU4MCwgOTk1ODQsIDk5NTg4LCA5OTU5MiwgOTk1OTYsIDk5NjAwLCA5OTYwNCwgCisgICAgOTk2MDgsIDk5NjEyLCA5OTYxNiwgOTk2MjAsIDk5NjI0LCA5OTYyOCwgOTk2MzIsIDk5NjM2LCA5OTY0MCwgOTk2NDQsIAorICAgIDk5NjQ4LCA5OTY1MiwgOTk2NTYsIDk5NjYwLCA5OTY2NCwgOTk2NjgsIDk5NjcyLCA5OTY3NiwgOTk2ODAsIDk5Njg0LCAKKyAgICA5OTY4OCwgOTk2OTIsIDk5Njk2LCA5OTcwMCwgOTk3MDQsIDk5NzA4LCA5OTcxMiwgOTk3MTYsIDk5NzIwLCA5OTcyNCwgCisgICAgOTk3MjgsIDk5NzMyLCA5OTczNiwgOTk3NDAsIDk5NzQ0LCA5OTc0OCwgOTk3NTIsIDk5NzU2LCA5OTc2MCwgOTk3NjQsIAorICAgIDk5NzY4LCA5OTc3MiwgOTk3NzYsIDk5NzgwLCA5OTc4NCwgOTk3ODgsIDk5NzkyLCA5OTc5NiwgOTk4MDAsIDk5ODA0LCAKKyAgICA5OTgwOCwgOTk4MTIsIDk5ODE2LCA5OTgyMCwgOTk4MjQsIDk5ODI4LCA5OTgzMiwgOTk4MzYsIDk5ODQwLCA5OTg0NCwgCisgICAgOTk4NDgsIDk5ODUyLCA5OTg1NiwgOTk4NjAsIDk5ODY0LCA5OTg2OCwgOTk4NzIsIDk5ODc2LCA5OTg4MCwgOTk4ODQsIAorICAgIDk5ODg4LCA5OTg5MiwgOTk4OTYsIDk5OTAwLCA5OTkwNCwgOTk5MDgsIDk5OTEyLCA5OTkxNiwgOTk5MjAsIDk5OTI0LCAKKyAgICA5OTkyOCwgOTk5MzIsIDk5OTM2LCA5OTk0MCwgOTk5NDQsIDk5OTQ4LCA5OTk1MiwgOTk5NTYsIDk5OTYwLCA5OTk2NCwgCisgICAgOTk5NjgsIDk5OTcyLCA5OTk3NiwgOTk5ODAsIDk5OTg0LCA5OTk4OCwgOTk5OTIsIDk5OTk2LCAxMDAwMDAsIDEwMDAwNCwgCisgICAgMTAwMDA4LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAxMDAwMjQsIDEwMDAyOCwgMTAwMDMyLCAxMDAwMzYsIDEwMDA0MCwgCisgICAgMTAwMDQ0LCAxMDAwNDgsIDEwMDA1MiwgMTAwMDU2LCAxMDAwNjAsIDEwMDA2NCwgMTAwMDY4LCAxMDAwNzIsIDEwMDA3NiwgCisgICAgMTAwMDgwLCAxMDAwODQsIDEwMDA4OCwgMTAwMDkyLCAxMDAwOTYsIDEwMDEwMCwgMTAwMTA0LCAxMDAxMDgsIDEwMDExMiwgCisgICAgMTAwMTE2LCAxMDAxMjAsIDEwMDEyNCwgMTAwMTI4LCAxMDAxMzIsIDEwMDEzNiwgMTAwMTQwLCAxMDAxNDQsIDEwMDE0OCwgCisgICAgMTAwMTUyLCAxMDAxNTYsIDEwMDE2MCwgMTAwMTY0LCAxMDAxNjgsIDEwMDE3MiwgMTAwMTc2LCAxMDAxODAsIDEwMDE4NCwgCisgICAgMTAwMTg4LCAxMDAxOTIsIDEwMDE5NiwgMTAwMjAwLCAxMDAyMDQsIDEwMDIwOCwgMTAwMjEyLCAxMDAyMTYsIDEwMDIyMCwgCisgICAgMTAwMjI0LCAxMDAyMjgsIDEwMDIzMiwgMTAwMjM2LCAxMDAyNDAsIDEwMDI0NCwgMTAwMjQ4LCAxMDAyNTIsIDEwMDI1NiwgCisgICAgMTAwMjYwLCAxMDAyNjQsIDEwMDI2OCwgMTAwMjcyLCAxMDAyNzYsIDEwMDI4MCwgMTAwMjg0LCAxMDAyODgsIDEwMDI5MiwgCisgICAgMTAwMjk2LCAxMDAzMDAsIDEwMDMwNCwgMTAwMzA4LCAxMDAzMTIsIDEwMDMxNiwgMTAwMzIwLCAxMDAzMjQsIDEwMDMyOCwgCisgICAgMTAwMzMyLCAxMDAzMzYsIDEwMDM0MCwgMTAwMzQ0LCAxMDAzNDgsIDEwMDM1MiwgMTAwMzU2LCAxMDAzNjAsIDEwMDM2NCwgCisgICAgMTAwMzY4LCAxMDAzNzIsIDEwMDM3NiwgMTAwMzgwLCAxMDAzODQsIDEwMDM4OCwgMTAwMzkyLCAxMDAzOTYsIDEwMDQwMCwgCisgICAgMTAwNDA0LCAxMDA0MDgsIDEwMDQxMiwgMTAwNDE2LCAxMDA0MjAsIDEwMDQyNCwgMTAwNDI4LCAxMDA0MzIsIDEwMDQzNiwgCisgICAgMTAwNDQwLCAxMDA0NDQsIDEwMDQ0OCwgMTAwNDUyLCAxMDA0NTYsIDEwMDQ2MCwgMTAwNDY0LCAxMDA0NjgsIDEwMDQ3MiwgCisgICAgMTAwNDc2LCAxMDA0ODAsIDEwMDQ4NCwgMTAwNDg4LCAxMDA0OTIsIDEwMDQ5NiwgMTAwNTAwLCAxMDA1MDQsIDEwMDUwOCwgCisgICAgMTAwNTEyLCAxMDA1MTYsIDEwMDUyMCwgMTAwNTI0LCAxMDA1MjgsIDEwMDUzMiwgMTAwNTM2LCAxMDA1NDAsIDEwMDU0NCwgCisgICAgMTAwNTQ4LCAxMDA1NTIsIDEwMDU1NiwgMTAwNTYwLCAxMDA1NjQsIDEwMDU2OCwgMTAwNTcyLCAxMDA1NzYsIDEwMDU4MCwgCisgICAgMTAwNTg0LCAxMDA1ODgsIDEwMDU5MiwgMTAwNTk2LCAxMDA2MDAsIDEwMDYwNCwgMTAwNjA4LCAxMDA2MTIsIDEwMDYxNiwgCisgICAgMTAwNjIwLCAxMDA2MjQsIDEwMDYyOCwgMTAwNjMyLCAxMDA2MzYsIDEwMDY0MCwgMTAwNjQ0LCAxMDA2NDgsIDEwMDY1MiwgCisgICAgMTAwNjU2LCAxMDA2NjAsIDEwMDY2NCwgMTAwNjY4LCAxMDA2NzIsIDEwMDY3NiwgMTAwNjgwLCAxMDA2ODQsIDEwMDY4OCwgCisgICAgMTAwNjkyLCAxMDA2OTYsIDEwMDcwMCwgMTAwNzA0LCAxMDA3MDgsIDEwMDcxMiwgMTAwNzE2LCAxMDA3MjAsIDEwMDcyNCwgCisgICAgMTAwNzI4LCAxMDA3MzIsIDEwMDczNiwgMTAwNzQwLCAxMDA3NDQsIDEwMDc0OCwgMTAwNzUyLCAxMDA3NTYsIDEwMDc2MCwgCisgICAgMTAwNzY0LCAxMDA3NjgsIDEwMDc3MiwgMTAwNzc2LCAxMDA3ODAsIDEwMDc4NCwgMTAwNzg4LCAxMDA3OTIsIDEwMDc5NiwgCisgICAgMTAwODAwLCAxMDA4MDQsIDEwMDgwOCwgMTAwODEyLCAxMDA4MTYsIDEwMDgyMCwgMTAwODI0LCAxMDA4MjgsIDEwMDgzMiwgCisgICAgMTAwODM2LCAxMDA4NDAsIDEwMDg0NCwgMTAwODQ4LCAxMDA4NTIsIDEwMDg1NiwgMTAwODYwLCAxMDA4NjQsIDEwMDg2OCwgCisgICAgMTAwODcyLCAxMDA4NzYsIDEwMDg4MCwgMTAwODg0LCAxMDA4ODgsIDEwMDg5MiwgMTAwODk2LCAxMDA5MDAsIDEwMDkwNCwgCisgICAgMTAwOTA4LCAxMDA5MTIsIDEwMDkxNiwgMTAwOTIwLCAxMDA5MjQsIDEwMDkyOCwgMTAwOTMyLCAxMDA5MzYsIDEwMDk0MCwgCisgICAgMTAwOTQ0LCAxMDA5NDgsIDEwMDk1MiwgMTAwOTU2LCAxMDA5NjAsIDEwMDk2NCwgMTAwOTY4LCAxMDA5NzIsIDEwMDk3NiwgCisgICAgMTAwOTgwLCAxMDA5ODQsIDEwMDk4OCwgMTAwOTkyLCAxMDA5OTYsIDEwMTAwMCwgMTAxMDA0LCAxMDEwMDgsIDEwMTAxMiwgCisgICAgMTAxMDE2LCAxMDEwMjAsIDEwMTAyNCwgMTAxMDI4LCAxMDEwMzIsIDEwMTAzNiwgMTAxMDQwLCAxMDEwNDQsIDEwMTA0OCwgCisgICAgMTAxMDUyLCAxMDEwNTYsIDEwMTA2MCwgMTAxMDY0LCAxMDEwNjgsIDEwMTA3MiwgMTAxMDc2LCAxMDEwODAsIDEwMTA4NCwgCisgICAgMTAxMDg4LCAxMDEwOTIsIDEwMTA5NiwgMTAxMTAwLCAxMDExMDQsIDEwMTEwOCwgMTAxMTEyLCAxMDExMTYsIDEwMTEyMCwgCisgICAgMTAxMTI0LCAxMDExMjgsIDEwMTEzMiwgMTAxMTM2LCAxMDExNDAsIDEwMTE0NCwgMTAxMTQ4LCAxMDExNTIsIDEwMTE1NiwgCisgICAgMTAxMTYwLCAxMDExNjQsIDEwMTE2OCwgMTAxMTcyLCAxMDExNzYsIDEwMTE4MCwgMTAxMTg0LCAxMDExODgsIDEwMTE5MiwgCisgICAgMTAxMTk2LCAxMDEyMDAsIDEwMTIwNCwgMTAxMjA4LCAxMDEyMTIsIDEwMTIxNiwgMTAxMjIwLCAxMDEyMjQsIDEwMTIyOCwgCisgICAgMTAxMjMyLCAxMDEyMzYsIDEwMTI0MCwgMTAxMjQ0LCAxMDEyNDgsIDEwMTI1MiwgMTAxMjU2LCAxMDEyNjAsIDEwMTI2NCwgCisgICAgMTAxMjY4LCAxMDEyNzIsIDEwMTI3NiwgMTAxMjgwLCAxMDEyODQsIDEwMTI4OCwgMTAxMjkyLCAxMDEyOTYsIDEwMTMwMCwgCisgICAgMTAxMzA0LCAxMDEzMDgsIDEwMTMxMiwgMTAxMzE2LCAxMDEzMjAsIDEwMTMyNCwgMTAxMzI4LCAxMDEzMzIsIDEwMTMzNiwgCisgICAgMTAxMzQwLCAxMDEzNDQsIDEwMTM0OCwgMTAxMzUyLCAxMDEzNTYsIDEwMTM2MCwgMTAxMzY0LCAxMDEzNjgsIDEwMTM3MiwgCisgICAgMTAxMzc2LCAxMDEzODAsIDEwMTM4NCwgMTAxMzg4LCAxMDEzOTIsIDEwMTM5NiwgMTAxNDAwLCAxMDE0MDQsIDEwMTQwOCwgCisgICAgMTAxNDEyLCAxMDE0MTYsIDEwMTQyMCwgMTAxNDI0LCAxMDE0MjgsIDEwMTQzMiwgMTAxNDM2LCAxMDE0NDAsIDEwMTQ0NCwgCisgICAgMTAxNDQ4LCAxMDE0NTIsIDEwMTQ1NiwgMTAxNDYwLCAxMDE0NjQsIDEwMTQ2OCwgMTAxNDcyLCAxMDE0NzYsIDEwMTQ4MCwgCisgICAgMTAxNDg0LCAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk2LCAxMDE1MDAsIDEwMTUwNCwgMTAxNTA4LCAxMDE1MTIsIDEwMTUxNiwgCisgICAgMTAxNTIwLCAxMDE1MjQsIDEwMTUyOCwgMTAxNTMyLCAxMDE1MzYsIDEwMTU0MCwgMTAxNTQ0LCAxMDE1NDgsIDEwMTU1MiwgCisgICAgMTAxNTU2LCAxMDE1NjAsIDEwMTU2NCwgMTAxNTY4LCAxMDE1NzIsIDEwMTU3NiwgMTAxNTgwLCAxMDE1ODQsIDEwMTU4OCwgCisgICAgMTAxNTkyLCAxMDE1OTYsIDEwMTYwMCwgMTAxNjA0LCAxMDE2MDgsIDEwMTYxMiwgMTAxNjE2LCAxMDE2MjAsIDEwMTYyNCwgCisgICAgMTAxNjI4LCAxMDE2MzIsIDEwMTYzNiwgMTAxNjQwLCAxMDE2NDQsIDEwMTY0OCwgMTAxNjUyLCAxMDE2NTYsIDEwMTY2MCwgCisgICAgMTAxNjY0LCAxMDE2NjgsIDEwMTY3MiwgMTAxNjc2LCAxMDE2ODAsIDEwMTY4NCwgMTAxNjg4LCAxMDE2OTIsIDEwMTY5NiwgCisgICAgMTAxNzAwLCAxMDE3MDQsIDEwMTcwOCwgMTAxNzEyLCAxMDE3MTYsIDEwMTcyMCwgMTAxNzI0LCAxMDE3MjgsIDEwMTczMiwgCisgICAgMTAxNzM2LCAxMDE3NDAsIDEwMTc0NCwgMTAxNzQ4LCAxMDE3NTIsIDEwMTc1NiwgMTAxNzYwLCAxMDE3NjQsIDEwMTc2OCwgCisgICAgMTAxNzcyLCAxMDE3NzYsIDEwMTc4MCwgMTAxNzg0LCAxMDE3ODgsIDEwMTc5MiwgMTAxNzk2LCAxMDE4MDAsIDEwMTgwNCwgCisgICAgMTAxODA4LCAxMDE4MTIsIDEwMTgxNiwgMTAxODIwLCAxMDE4MjQsIDEwMTgyOCwgMTAxODMyLCAxMDE4MzYsIDEwMTg0MCwgCisgICAgMTAxODQ0LCAxMDE4NDgsIDEwMTg1MiwgMTAxODU2LCAxMDE4NjAsIDEwMTg2NCwgMTAxODY4LCAxMDE4NzIsIDEwMTg3NiwgCisgICAgMTAxODgwLCAxMDE4ODQsIDEwMTg4OCwgMTAxODkyLCAxMDE4OTYsIDEwMTkwMCwgMTAxOTA0LCAxMDE5MDgsIDEwMTkxMiwgCisgICAgMTAxOTE2LCAxMDE5MjAsIDEwMTkyNCwgMTAxOTI4LCAxMDE5MzIsIDEwMTkzNiwgMTAxOTQwLCAxMDE5NDQsIDEwMTk0OCwgCisgICAgMTAxOTUyLCAxMDE5NTYsIDEwMTk2MCwgMTAxOTY0LCAxMDE5NjgsIDEwMTk3MiwgMTAxOTc2LCAxMDE5ODAsIDEwMTk4NCwgCisgICAgMTAxOTg4LCAxMDE5OTIsIDEwMTk5NiwgMTAyMDAwLCAxMDIwMDQsIDEwMjAwOCwgMTAyMDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDIwMTYsIDEwMjAyMSwgMTAyMDI2LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ1LCAxMDIwNTIsIDEwMjA1OSwgCisgICAgMTAyMDY0LCAxMDIwNjksIDEwMjA3NCwgMTAyMDc5LCAxMDIwODYsIDEwMjA5MSwgMTAyMDk4LCAxMDIxMDUsIDEwMjExMCwgCisgICAgMTAyMTE1LCAxMDIxMjAsIDEwMjEyNywgMTAyMTMyLCAxMDIxMzcsIDEwMjE0NCwgMTAyMTUxLCAxMDIxNTYsIDEwMjE2MSwgCisgICAgMTAyMTY2LCAxMDIxNzMsIDEwMjE4MCwgMTAyMTg3LCAxMDIxOTIsIDEwMjE5NywgMTAyMjA0LCAxMDIyMTEsIDEwMjIxOCwgCisgICAgMTAyMjI1LCAxMDIyMzAsIDEwMjIzNSwgMTAyMjQwLCAxMDIyNDcsIDEwMjI1MiwgMTAyMjU3LCAxMDIyNjIsIDEwMjI2OSwgCisgICAgMTAyMjc4LCAxMDIyODUsIDEwMjI5MCwgMTAyMjk1LCAxMDIzMDAsIDEwMjMwNSwgMTAyMzEwLCAxMDIzMTUsIDEwMjMyNCwgCisgICAgMTAyMzMxLCAxMDIzMzYsIDEwMjM0MywgMTAyMzUwLCAxMDIzNTUsIDEwMjM2MCwgMTAyMzY1LCAxMDIzNzIsIDEwMjM3NywgCisgICAgMTAyMzg0LCAxMDIzOTEsIDEwMjM5NiwgMTAyNDAxLCAxMDI0MDYsIDEwMjQxMywgMTAyNDIwLCAxMDI0MjUsIDEwMjQzMCwgCisgICAgMTAyNDM3LCAxMDI0NDQsIDEwMjQ1MSwgMTAyNDU2LCAxMDI0NjEsIDEwMjQ2NiwgMTAyNDcxLCAxMDI0NzgsIDEwMjQ4NywgCisgICAgMTAyNDk2LCAxMDI1MDEsIDEwMjUwOCwgMTAyNTE3LCAxMDI1MjIsIDEwMjUyNywgMTAyNTMyLCAxMDI1MzcsIDEwMjU0NCwgCisgICAgMTAyNTUxLCAxMDI1NTgsIDEwMjU2NSwgMTAyNTcwLCAxMDI1NzUsIDEwMjU4MCwgMTAyNTg3LCAxMDI1OTQsIDEwMjYwMSwgCisgICAgMTAyNjA2LCAxMDI2MTEsIDEwMjYxOCwgMTAyNjIzLCAxMDI2MzAsIDEwMjYzNSwgMTAyNjQyLCAxMDI2NDcsIDEwMjY1NCwgCisgICAgMTAyNjYxLCAxMDI2NjYsIDEwMjY3MSwgMTAyNjc2LCAxMDI2ODEsIDEwMjY4NiwgMTAyNjkxLCAxMDI2OTYsIDEwMjcwMSwgCisgICAgMTAyNzA2LCAxMDI3MTMsIDEwMjcyMCwgMTAyNzI3LCAxMDI3MzQsIDEwMjc0MSwgMTAyNzUwLCAxMDI3NTUsIDEwMjc2MCwgCisgICAgMTAyNzY3LCAxMDI3NzQsIDEwMjc3OSwgMTAyNzg2LCAxMDI3OTMsIDEwMjgwMCwgMTAyODA3LCAxMDI4MTQsIDEwMjgyMSwgCisgICAgMTAyODI2LCAxMDI4MzEsIDEwMjgzNiwgMTAyODQxLCAxMDI4NDYsIDEwMjg1NSwgMTAyODY0LCAxMDI4NzMsIDEwMjg4MiwgCisgICAgMTAyODkxLCAxMDI5MDAsIDEwMjkwOSwgMTAyOTE4LCAxMDI5MjMsIDEwMjkzNCwgMTAyOTQ1LCAxMDI5NTQsIDEwMjk1OSwgCisgICAgMTAyOTY0LCAxMDI5NjksIDEwMjk3NCwgMTAyOTgzLCAxMDI5OTAsIDEwMjk5NywgMTAzMDA0LCAxMDMwMTEsIDEwMzAxOCwgCisgICAgMTAzMDI1LCAxMDMwMzQsIDEwMzA0MywgMTAzMDU0LCAxMDMwNjMsIDEwMzA3NCwgMTAzMDgzLCAxMDMwOTAsIDEwMzA5OSwgCisgICAgMTAzMTEwLCAxMDMxMTksIDEwMzEyOCwgMTAzMTM3LCAxMDMxNDYsIDEwMzE1MywgMTAzMTYwLCAxMDMxNjcsIDEwMzE3NiwgCisgICAgMTAzMTg1LCAxMDMxOTYsIDEwMzIwNSwgMTAzMjE0LCAxMDMyMjUsIDEwMzIzMCwgMTAzMjM1LCAxMDMyNDYsIDEwMzI1NCwgCisgICAgMTAzMjYzLCAxMDMyNzIsIDEwMzI4MSwgMTAzMjkyLCAxMDMzMDEsIDEwMzMxMCwgMTAzMzIxLCAxMDMzMzIsIDEwMzM0MywgCisgICAgMTAzMzU0LCAxMDMzNjUsIDEwMzM3NiwgMTAzMzgzLCAxMDMzOTAsIDEwMzM5NywgMTAzNDA0LCAxMDM0MTUsIDEwMzQyNCwgCisgICAgMTAzNDMxLCAxMDM0MzgsIDEwMzQ0NSwgMTAzNDU2LCAxMDM0NjcsIDEwMzQ3OCwgMTAzNDg5LCAxMDM1MDAsIDEwMzUxMSwgCisgICAgMTAzNTIyLCAxMDM1MzMsIDEwMzU0MCwgMTAzNTQ3LCAxMDM1NTYsIDEwMzU2NSwgMTAzNTcyLCAxMDM1NzksIDEwMzU4NiwgCisgICAgMTAzNTk1LCAxMDM2MDQsIDEwMzYxMywgMTAzNjIwLCAxMDM2MjksIDEwMzYzOCwgMTAzNjQ3LCAxMDM2NTQsIDEwMzY2MSwgCisgICAgMTAzNjY2LCAxMDM2NzIsIDEwMzY3OSwgMTAzNjg2LCAxMDM2OTMsIDEwMzcwMCwgMTAzNzA3LCAxMDM3MTQsIDEwMzcyMywgCisgICAgMTAzNzMyLCAxMDM3NDEsIDEwMzc1MCwgMTAzNzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDM3NjYsIAorICAgIDEwMzc3MiwgMTAzNzc3LCAxMDM3ODIsIDEwMzc4OSwgMTAzNzk1LCAxMDM4MDEsIDEwMzgwNywgMTAzODEzLCAxMDM4MTksIAorICAgIDEwMzgyNSwgMTAzODMxLCAxMDM4MzUsIDEwMzgzOSwgMTAzODQ1LCAxMDM4NTEsIDEwMzg1NywgMTAzODYxLCAxMDM4NjYsIAorICAgIDEwMzg3MSwgMTAzODc1LCAxMDM4NzksIDEwMzg4MiwgMTAzODg4LCAxMDM4OTQsIDEwMzkwMCwgMTAzOTA2LCAxMDM5MTIsIAorICAgIDEwMzkxOCwgMTAzOTI0LCAxMDM5MzAsIDEwMzkzNiwgMTAzOTQ2LCAxMDM5NTYsIDEwMzk2MiwgMTAzOTY4LCAxMDM5NzgsIAorICAgIDEwMzk4OCwgMTAzOTk0LCAwLCAwLCAxMDQwMDAsIDEwNDAwOCwgMTA0MDEzLCAxMDQwMTgsIDEwNDAyNCwgMTA0MDMwLCAKKyAgICAxMDQwMzYsIDEwNDA0MiwgMTA0MDQ4LCAxMDQwNTQsIDEwNDA2MSwgMTA0MDY4LCAxMDQwNzQsIDEwNDA4MCwgMTA0MDg2LCAKKyAgICAxMDQwOTIsIDEwNDA5OCwgMTA0MTA0LCAxMDQxMTAsIDEwNDExNiwgMTA0MTIxLCAxMDQxMjcsIDEwNDEzMywgMTA0MTM5LCAKKyAgICAxMDQxNDUsIDEwNDE1MSwgMTA0MTYwLCAxMDQxNjYsIDEwNDE3MSwgMTA0MTc5LCAxMDQxODYsIDEwNDE5MywgMTA0MjAyLCAKKyAgICAxMDQyMTEsIDEwNDIyMCwgMTA0MjI5LCAxMDQyMzgsIDEwNDI0NywgMTA0MjU2LCAxMDQyNjUsIDEwNDI3NSwgMTA0Mjg1LCAKKyAgICAxMDQyOTMsIDEwNDMwMSwgMTA0MzEwLCAxMDQzMTksIDEwNDMyNSwgMTA0MzMxLCAxMDQzMzcsIDEwNDM0MywgMTA0MzUxLCAKKyAgICAxMDQzNTksIDEwNDM2MywgMTA0MzY5LCAxMDQzNzQsIDEwNDM4MCwgMTA0Mzg2LCAxMDQzOTIsIDEwNDM5OCwgMTA0NDA0LCAKKyAgICAxMDQ0MTMsIDEwNDQxOCwgMTA0NDI1LCAxMDQ0MzAsIDEwNDQzNSwgMTA0NDQwLCAxMDQ0NDYsIDEwNDQ1MiwgMTA0NDU4LCAKKyAgICAxMDQ0NjUsIDEwNDQ3MCwgMTA0NDc1LCAxMDQ0ODAsIDEwNDQ4NSwgMTA0NDkwLCAxMDQ0OTYsIDEwNDUwMiwgMTA0NTA4LCAKKyAgICAxMDQ1MTQsIDEwNDUyMCwgMTA0NTI2LCAxMDQ1MzIsIDEwNDUzOCwgMTA0NTQzLCAxMDQ1NDgsIDEwNDU1MywgMTA0NTU4LCAKKyAgICAxMDQ1NjMsIDEwNDU2OCwgMTA0NTczLCAxMDQ1NzgsIDEwNDU4NCwgMTA0NTkwLCAxMDQ1OTUsIDEwNDYwMCwgMTA0NjA1LCAKKyAgICAxMDQ2MTAsIDEwNDYxNSwgMTA0NjIxLCAxMDQ2MjgsIDEwNDYzMiwgMTA0NjM2LCAxMDQ2NDAsIDEwNDY0NCwgMTA0NjQ4LCAKKyAgICAxMDQ2NTIsIDEwNDY1NiwgMTA0NjYwLCAxMDQ2NjgsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MiwgMTA0Njk4LCAKKyAgICAxMDQ3MDQsIDEwNDcxMCwgMTA0NzE2LCAxMDQ3MjIsIDEwNDcyOCwgMTA0NzM0LCAxMDQ3NDAsIDEwNDc0NiwgMTA0NzUyLCAKKyAgICAxMDQ3NTgsIDEwNDc2NCwgMTA0NzcwLCAxMDQ3NzQsIDEwNDc3OCwgMTA0Nzg1LCAxMDQ3OTEsIDEwNDc5NywgMTA0ODAzLCAKKyAgICAxMDQ4MDgsIDEwNDgxNSwgMTA0ODIwLCAxMDQ4MjYsIDEwNDgzMiwgMTA0ODM4LCAxMDQ4NDQsIDEwNDg0OSwgMTA0ODUzLCAKKyAgICAxMDQ4NTksIDEwNDg2MywgMTA0ODY3LCAxMDQ4NzEsIDEwNDg3NywgMTA0ODgzLCAxMDQ4ODcsIDEwNDg5MywgMTA0ODk5LCAKKyAgICAxMDQ5MDUsIDEwNDkxMSwgMTA0OTE3LCAxMDQ5MjUsIDEwNDkzMywgMTA0OTM5LCAxMDQ5NDUsIDEwNDk1MSwgMTA0OTU3LCAKKyAgICAxMDQ5NjksIDEwNDk4MSwgMTA0OTk1LCAxMDUwMDcsIDEwNTAxOSwgMTA1MDMzLCAxMDUwNDcsIDEwNTA2MSwgMTA1MDY1LCAKKyAgICAxMDUwNzMsIDEwNTA4MSwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAKKyAgICAxMDUxMTQsIDEwNTEyMCwgMTA1MTI2LCAxMDUxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNTEzOCwgCisgICAgMTA1MTQ0LCAxMDUxNTAsIDEwNTE1NiwgMTA1MTYyLCAxMDUxNjgsIDEwNTE3NCwgMTA1MTgwLCAxMDUxODYsIDEwNTE5MiwgCisgICAgMTA1MTk4LCAxMDUyMDQsIDEwNTIxMCwgMTA1MjE2LCAxMDUyMjIsIDEwNTIyOCwgMTA1MjM0LCAxMDUyNDAsIDEwNTI0NiwgCisgICAgMTA1MjUyLCAxMDUyNTgsIDEwNTI2NCwgMTA1MjcwLCAxMDUyNzYsIDEwNTI4MiwgMTA1Mjg4LCAxMDUyOTQsIDEwNTMwMCwgCisgICAgMTA1MzA2LCAxMDUzMTIsIDEwNTMxOCwgMTA1MzI0LCAxMDUzMzAsIDEwNTMzNiwgMTA1MzQyLCAxMDUzNDgsIDEwNTM1NCwgCisgICAgMTA1MzYwLCAxMDUzNjYsIDEwNTM3MiwgMTA1Mzc4LCAxMDUzODQsIDEwNTM5MCwgMTA1Mzk2LCAxMDU0MDIsIDEwNTQwOCwgCisgICAgMTA1NDE0LCAxMDU0MjAsIDEwNTQyNiwgMTA1NDMyLCAxMDU0MzgsIDEwNTQ0NCwgMTA1NDUwLCAxMDU0NTYsIDEwNTQ2MiwgCisgICAgMTA1NDY4LCAxMDU0NzQsIDEwNTQ4MCwgMTA1NDg2LCAxMDU0OTIsIDEwNTQ5OCwgMTA1NTA0LCAxMDU1MTAsIDEwNTUxNiwgCisgICAgMTA1NTIyLCAxMDU1MjgsIDEwNTUzNCwgMTA1NTM5LCAxMDU1NDQsIDEwNTU0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTA1NTUzLCAxMDU1NTgsIDEwNTU2NSwgMTA1NTcyLCAxMDU1NzksIDEwNTU4NiwgMTA1NTkxLCAxMDU1OTUsIAorICAgIDEwNTYwMSwgMTA1NjA1LCAxMDU2MDksIDEwNTYxNSwgMTA1NjE5LCAxMDU2MjMsIDEwNTYyNywgMTA1NjMzLCAxMDU2NDAsIAorICAgIDEwNTY0NCwgMTA1NjQ4LCAxMDU2NTIsIDEwNTY1NiwgMTA1NjYwLCAxMDU2NjQsIDEwNTY3MCwgMTA1Njc0LCAxMDU2NzgsIAorICAgIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgMTA1NzEwLCAxMDU3MTQsIAorICAgIDEwNTcxOCwgMTA1NzIzLCAxMDU3MjcsIDEwNTczMSwgMTA1NzM1LCAxMDU3MzksIDEwNTc0MywgMTA1NzQ3LCAxMDU3NTEsIAorICAgIDEwNTc1NSwgMTA1NzU5LCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc3LCAxMDU3ODEsIDEwNTc4NSwgMTA1Nzg5LCAxMDU3OTMsIAorICAgIDEwNTc5NywgMTA1ODAxLCAxMDU4MDUsIDEwNTgxMiwgMTA1ODE2LCAxMDU4MjAsIDEwNTgyNCwgMTA1ODI4LCAxMDU4MzIsIAorICAgIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDgsIDEwNTg1MiwgMTA1ODU2LCAxMDU4NjAsIDEwNTg2NCwgMTA1ODY4LCAxMDU4NzIsIAorICAgIDEwNTg3NiwgMTA1ODgwLCAxMDU4ODQsIDEwNTg4OCwgMTA1ODkyLCAxMDU4OTYsIDEwNTkwMCwgMTA1OTA0LCAxMDU5MDgsIAorICAgIDEwNTkxMiwgMTA1OTE2LCAxMDU5MjAsIDEwNTkyNCwgMTA1OTMyLCAxMDU5MzYsIDEwNTk0MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTA1OTQ0LCAxMDU5NTIsIDEwNTk2MCwgMTA1OTY4LCAxMDU5NzYsIDEwNTk4NCwgMTA1OTkyLCAxMDYwMDAsIAorICAgIDEwNjAwOCwgMTA2MDE2LCAxMDYwMjQsIDEwNjAzMiwgMTA2MDQwLCAxMDYwNDgsIDEwNjA1NiwgMTA2MDY0LCAxMDYwNzIsIAorICAgIDEwNjA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2MDg4LCAxMDYwOTIsIDEwNjA5NywgCisgICAgMTA2MTAyLCAxMDYxMDcsIDEwNjExMSwgMTA2MTE2LCAxMDYxMjEsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzUsIDEwNjE0MCwgCisgICAgMTA2MTQ0LCAxMDYxNDgsIDEwNjE1MiwgMTA2MTU2LCAxMDYxNjEsIDEwNjE2NiwgMTA2MTcwLCAxMDYxNzQsIDEwNjE3OSwgCisgICAgMTA2MTgzLCAxMDYxODgsIDEwNjE5MywgMTA2MTk4LCAxMDYyMDMsIDEwNjIwOCwgMTA2MjEyLCAxMDYyMTcsIDEwNjIyMiwgCisgICAgMTA2MjI3LCAxMDYyMzEsIDEwNjIzNiwgMTA2MjQxLCAxMDYyNDYsIDEwNjI1MCwgMTA2MjU1LCAxMDYyNjAsIDEwNjI2NCwgCisgICAgMTA2MjY4LCAxMDYyNzIsIDEwNjI3NiwgMTA2MjgxLCAxMDYyODYsIDEwNjI5MCwgMTA2Mjk0LCAxMDYyOTksIDEwNjMwMywgCisgICAgMTA2MzA4LCAxMDYzMTMsIDEwNjMxOCwgMTA2MzIzLCAxMDYzMjgsIDEwNjMzMiwgMTA2MzM3LCAxMDYzNDIsIDEwNjM0NywgCisgICAgMTA2MzUxLCAxMDYzNTYsIDEwNjM2MSwgMTA2MzY2LCAxMDYzNzAsIDEwNjM3NSwgMTA2MzgwLCAxMDYzODQsIDEwNjM4OCwgCisgICAgMTA2MzkyLCAxMDYzOTYsIDEwNjQwMSwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE5LCAxMDY0MjMsIDEwNjQyOCwgCisgICAgMTA2NDMzLCAxMDY0MzgsIDEwNjQ0MywgMTA2NDQ4LCAxMDY0NTIsIDEwNjQ1NywgMTA2NDYyLCAxMDY0NjcsIDEwNjQ3MSwgCisgICAgMTA2NDc2LCAwLCAxMDY0ODEsIDEwNjQ4NSwgMTA2NDkwLCAxMDY0OTUsIDEwNjQ5OSwgMTA2NTAzLCAxMDY1MDcsIAorICAgIDEwNjUxMSwgMTA2NTE2LCAxMDY1MjEsIDEwNjUyNSwgMTA2NTI5LCAxMDY1MzQsIDEwNjUzOCwgMTA2NTQzLCAxMDY1NDgsIAorICAgIDEwNjU1MywgMTA2NTU4LCAxMDY1NjMsIDEwNjU2OCwgMTA2NTc0LCAxMDY1ODAsIDEwNjU4NiwgMTA2NTkxLCAxMDY1OTcsIAorICAgIDEwNjYwMywgMTA2NjA5LCAxMDY2MTQsIDEwNjYyMCwgMTA2NjI2LCAxMDY2MzEsIDEwNjYzNiwgMTA2NjQxLCAxMDY2NDYsIAorICAgIDEwNjY1MiwgMTA2NjU4LCAxMDY2NjMsIDEwNjY2OCwgMTA2Njc0LCAxMDY2NzksIDEwNjY4NSwgMTA2NjkxLCAxMDY2OTcsIAorICAgIDEwNjcwMywgMTA2NzA5LCAxMDY3MTQsIDEwNjcyMCwgMTA2NzI2LCAxMDY3MzIsIDEwNjczNywgMTA2NzQzLCAxMDY3NDksIAorICAgIDEwNjc1NSwgMTA2NzYwLCAxMDY3NjYsIDEwNjc3MiwgMTA2Nzc3LCAxMDY3ODIsIDEwNjc4NywgMTA2NzkyLCAxMDY3OTgsIAorICAgIDEwNjgwNCwgMTA2ODA5LCAxMDY4MTQsIDEwNjgyMCwgMTA2ODI1LCAxMDY4MzEsIDEwNjgzNywgMTA2ODQzLCAxMDY4NDksIAorICAgIDEwNjg1NSwgMCwgMTA2ODU5LCAxMDY4NjQsIDAsIDAsIDEwNjg2OSwgMCwgMCwgMTA2ODc0LCAxMDY4NzksIDAsIDAsIAorICAgIDEwNjg4NCwgMTA2ODg4LCAxMDY4OTIsIDEwNjg5NywgMCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMSwgMTA2OTE1LCAKKyAgICAxMDY5MjAsIDEwNjkyNSwgMTA2OTMwLCAxMDY5MzUsIDEwNjk0MCwgMTA2OTQ0LCAxMDY5NDksIDEwNjk1NCwgMCwgCisgICAgMTA2OTU5LCAwLCAxMDY5NjQsIDEwNjk2OSwgMTA2OTczLCAxMDY5NzgsIDEwNjk4MywgMTA2OTg3LCAxMDY5OTEsIDAsIAorICAgIDEwNjk5NSwgMTA3MDAwLCAxMDcwMDUsIDEwNzAwOSwgMTA3MDEzLCAxMDcwMTgsIDEwNzAyMiwgMTA3MDI3LCAxMDcwMzIsIAorICAgIDEwNzAzNywgMTA3MDQyLCAxMDcwNDcsIDEwNzA1MiwgMTA3MDU4LCAxMDcwNjQsIDEwNzA3MCwgMTA3MDc1LCAxMDcwODEsIAorICAgIDEwNzA4NywgMTA3MDkzLCAxMDcwOTgsIDEwNzEwNCwgMTA3MTEwLCAxMDcxMTUsIDEwNzEyMCwgMTA3MTI1LCAxMDcxMzAsIAorICAgIDEwNzEzNiwgMTA3MTQyLCAxMDcxNDcsIDEwNzE1MiwgMTA3MTU4LCAxMDcxNjMsIDEwNzE2OSwgMTA3MTc1LCAxMDcxODEsIAorICAgIDEwNzE4NywgMTA3MTkzLCAxMDcxOTgsIDEwNzIwNCwgMTA3MjEwLCAxMDcyMTYsIDEwNzIyMSwgMTA3MjI3LCAxMDcyMzMsIAorICAgIDEwNzIzOSwgMTA3MjQ0LCAxMDcyNTAsIDEwNzI1NiwgMTA3MjYxLCAxMDcyNjYsIDEwNzI3MSwgMTA3Mjc2LCAxMDcyODIsIAorICAgIDEwNzI4OCwgMTA3MjkzLCAxMDcyOTgsIDEwNzMwNCwgMTA3MzA5LCAxMDczMTUsIDEwNzMyMSwgMTA3MzI3LCAxMDczMzMsIAorICAgIDEwNzMzOSwgMTA3MzQzLCAwLCAxMDczNDgsIDEwNzM1MywgMTA3MzU3LCAxMDczNjIsIDAsIDAsIDEwNzM2NywgMTA3MzcyLCAKKyAgICAxMDczNzcsIDEwNzM4MSwgMTA3Mzg1LCAxMDczODksIDEwNzM5MywgMTA3Mzk4LCAwLCAxMDc0MDMsIDEwNzQwNywgCisgICAgMTA3NDEyLCAxMDc0MTYsIDEwNzQyMSwgMTA3NDI2LCAxMDc0MzEsIDAsIDEwNzQzNiwgMTA3NDQwLCAxMDc0NDUsIAorICAgIDEwNzQ1MCwgMTA3NDU1LCAxMDc0NTksIDEwNzQ2NCwgMTA3NDY5LCAxMDc0NzQsIDEwNzQ3OCwgMTA3NDgzLCAxMDc0ODgsIAorICAgIDEwNzQ5MiwgMTA3NDk2LCAxMDc1MDAsIDEwNzUwNCwgMTA3NTA5LCAxMDc1MTQsIDEwNzUxOCwgMTA3NTIyLCAxMDc1MjcsIAorICAgIDEwNzUzMSwgMTA3NTM2LCAxMDc1NDEsIDEwNzU0NiwgMTA3NTUxLCAxMDc1NTYsIDEwNzU2MCwgMCwgMTA3NTY1LCAKKyAgICAxMDc1NzAsIDEwNzU3NCwgMTA3NTc5LCAwLCAxMDc1ODQsIDEwNzU4OCwgMTA3NTkzLCAxMDc1OTgsIDEwNzYwMiwgMCwgCisgICAgMTA3NjA2LCAwLCAwLCAwLCAxMDc2MTAsIDEwNzYxNCwgMTA3NjE5LCAxMDc2MjMsIDEwNzYyOCwgMTA3NjMzLCAxMDc2MzgsIAorICAgIDAsIDEwNzY0MywgMTA3NjQ3LCAxMDc2NTIsIDEwNzY1NywgMTA3NjYyLCAxMDc2NjYsIDEwNzY3MSwgMTA3Njc2LCAKKyAgICAxMDc2ODEsIDEwNzY4NSwgMTA3NjkwLCAxMDc2OTUsIDEwNzY5OSwgMTA3NzAzLCAxMDc3MDcsIDEwNzcxMSwgMTA3NzE2LCAKKyAgICAxMDc3MjEsIDEwNzcyNSwgMTA3NzI5LCAxMDc3MzQsIDEwNzczOCwgMTA3NzQzLCAxMDc3NDgsIDEwNzc1MywgMTA3NzU4LCAKKyAgICAxMDc3NjMsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODAsIDEwNzc4NiwgMTA3NzkxLCAxMDc3OTcsIDEwNzgwMywgMTA3ODA5LCAKKyAgICAxMDc4MTQsIDEwNzgyMCwgMTA3ODI2LCAxMDc4MzEsIDEwNzgzNiwgMTA3ODQxLCAxMDc4NDYsIDEwNzg1MiwgMTA3ODU4LCAKKyAgICAxMDc4NjMsIDEwNzg2OCwgMTA3ODc0LCAxMDc4NzksIDEwNzg4NSwgMTA3ODkxLCAxMDc4OTcsIDEwNzkwMywgMTA3OTA5LCAKKyAgICAxMDc5MTQsIDEwNzkyMCwgMTA3OTI2LCAxMDc5MzIsIDEwNzkzNywgMTA3OTQzLCAxMDc5NDksIDEwNzk1NSwgMTA3OTYwLCAKKyAgICAxMDc5NjYsIDEwNzk3MiwgMTA3OTc3LCAxMDc5ODIsIDEwNzk4NywgMTA3OTkyLCAxMDc5OTgsIDEwODAwNCwgMTA4MDA5LCAKKyAgICAxMDgwMTQsIDEwODAyMCwgMTA4MDI1LCAxMDgwMzEsIDEwODAzNywgMTA4MDQzLCAxMDgwNDksIDEwODA1NSwgMTA4MDU5LCAKKyAgICAxMDgwNjQsIDEwODA2OSwgMTA4MDc0LCAxMDgwNzgsIDEwODA4MywgMTA4MDg4LCAxMDgwOTMsIDEwODA5NywgMTA4MTAyLCAKKyAgICAxMDgxMDcsIDEwODExMSwgMTA4MTE1LCAxMDgxMTksIDEwODEyMywgMTA4MTI4LCAxMDgxMzMsIDEwODEzNywgMTA4MTQxLCAKKyAgICAxMDgxNDYsIDEwODE1MCwgMTA4MTU1LCAxMDgxNjAsIDEwODE2NSwgMTA4MTcwLCAxMDgxNzUsIDEwODE3OSwgMTA4MTg0LCAKKyAgICAxMDgxODksIDEwODE5NCwgMTA4MTk4LCAxMDgyMDMsIDEwODIwOCwgMTA4MjEzLCAxMDgyMTcsIDEwODIyMiwgMTA4MjI3LCAKKyAgICAxMDgyMzEsIDEwODIzNSwgMTA4MjM5LCAxMDgyNDMsIDEwODI0OCwgMTA4MjUzLCAxMDgyNTcsIDEwODI2MSwgMTA4MjY2LCAKKyAgICAxMDgyNzAsIDEwODI3NSwgMTA4MjgwLCAxMDgyODUsIDEwODI5MCwgMTA4Mjk1LCAxMDgzMDAsIDEwODMwNiwgMTA4MzEyLCAKKyAgICAxMDgzMTgsIDEwODMyMywgMTA4MzI5LCAxMDgzMzUsIDEwODM0MSwgMTA4MzQ2LCAxMDgzNTIsIDEwODM1OCwgMTA4MzYzLCAKKyAgICAxMDgzNjgsIDEwODM3MywgMTA4Mzc4LCAxMDgzODQsIDEwODM5MCwgMTA4Mzk1LCAxMDg0MDAsIDEwODQwNiwgMTA4NDExLCAKKyAgICAxMDg0MTcsIDEwODQyMywgMTA4NDI5LCAxMDg0MzUsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTIsIDEwODQ1OCwgMTA4NDY0LCAKKyAgICAxMDg0NjksIDEwODQ3NSwgMTA4NDgxLCAxMDg0ODcsIDEwODQ5MiwgMTA4NDk4LCAxMDg1MDQsIDEwODUwOSwgMTA4NTE0LCAKKyAgICAxMDg1MTksIDEwODUyNCwgMTA4NTMwLCAxMDg1MzYsIDEwODU0MSwgMTA4NTQ2LCAxMDg1NTIsIDEwODU1NywgMTA4NTYzLCAKKyAgICAxMDg1NjksIDEwODU3NSwgMTA4NTgxLCAxMDg1ODcsIDEwODU5MiwgMTA4NTk4LCAxMDg2MDQsIDEwODYxMCwgMTA4NjE1LCAKKyAgICAxMDg2MjEsIDEwODYyNywgMTA4NjMzLCAxMDg2MzgsIDEwODY0NCwgMTA4NjUwLCAxMDg2NTUsIDEwODY2MCwgMTA4NjY1LCAKKyAgICAxMDg2NzAsIDEwODY3NiwgMTA4NjgyLCAxMDg2ODcsIDEwODY5MiwgMTA4Njk4LCAxMDg3MDMsIDEwODcwOSwgMTA4NzE1LCAKKyAgICAxMDg3MjEsIDEwODcyNywgMTA4NzMzLCAxMDg3MzgsIDEwODc0NCwgMTA4NzUwLCAxMDg3NTYsIDEwODc2MSwgMTA4NzY3LCAKKyAgICAxMDg3NzMsIDEwODc3OSwgMTA4Nzg0LCAxMDg3OTAsIDEwODc5NiwgMTA4ODAxLCAxMDg4MDYsIDEwODgxMSwgMTA4ODE2LCAKKyAgICAxMDg4MjIsIDEwODgyOCwgMTA4ODMzLCAxMDg4MzgsIDEwODg0NCwgMTA4ODQ5LCAxMDg4NTUsIDEwODg2MSwgMTA4ODY3LCAKKyAgICAxMDg4NzMsIDEwODg3OSwgMTA4ODg1LCAxMDg4OTIsIDEwODg5OSwgMTA4OTA2LCAxMDg5MTIsIDEwODkxOSwgMTA4OTI2LCAKKyAgICAxMDg5MzMsIDEwODkzOSwgMTA4OTQ2LCAxMDg5NTMsIDEwODk1OSwgMTA4OTY1LCAxMDg5NzEsIDEwODk3NywgMTA4OTg0LCAKKyAgICAxMDg5OTEsIDEwODk5NywgMTA5MDAzLCAxMDkwMTAsIDEwOTAxNiwgMTA5MDIzLCAxMDkwMzAsIDEwOTAzNywgMTA5MDQ0LCAKKyAgICAxMDkwNTEsIDEwOTA1NywgMTA5MDY0LCAxMDkwNzEsIDEwOTA3OCwgMTA5MDg0LCAxMDkwOTEsIDEwOTA5OCwgMTA5MTA1LCAKKyAgICAxMDkxMTEsIDEwOTExOCwgMTA5MTI1LCAxMDkxMzEsIDEwOTEzNywgMTA5MTQzLCAxMDkxNDksIDEwOTE1NiwgMTA5MTYzLCAKKyAgICAxMDkxNjksIDEwOTE3NSwgMTA5MTgyLCAxMDkxODgsIDEwOTE5NSwgMTA5MjAyLCAxMDkyMDksIDEwOTIxNiwgMTA5MjIzLCAKKyAgICAxMDkyMjcsIDEwOTIzMiwgMTA5MjM3LCAxMDkyNDIsIDEwOTI0NiwgMTA5MjUxLCAxMDkyNTYsIDEwOTI2MSwgMTA5MjY1LCAKKyAgICAxMDkyNzAsIDEwOTI3NSwgMTA5Mjc5LCAxMDkyODMsIDEwOTI4NywgMTA5MjkxLCAxMDkyOTYsIDEwOTMwMSwgMTA5MzA1LCAKKyAgICAxMDkzMDksIDEwOTMxNCwgMTA5MzE4LCAxMDkzMjMsIDEwOTMyOCwgMTA5MzMzLCAxMDkzMzgsIDEwOTM0MywgMTA5MzQ3LCAKKyAgICAxMDkzNTIsIDEwOTM1NywgMTA5MzYyLCAxMDkzNjYsIDEwOTM3MSwgMTA5Mzc2LCAxMDkzODEsIDEwOTM4NSwgMTA5MzkwLCAKKyAgICAxMDkzOTUsIDEwOTM5OSwgMTA5NDAzLCAxMDk0MDcsIDEwOTQxMSwgMTA5NDE2LCAxMDk0MjEsIDEwOTQyNSwgMTA5NDI5LCAKKyAgICAxMDk0MzQsIDEwOTQzOCwgMTA5NDQzLCAxMDk0NDgsIDEwOTQ1MywgMTA5NDU4LCAxMDk0NjMsIDEwOTQ2OSwgMCwgMCwgCisgICAgMTA5NDc2LCAxMDk0ODEsIDEwOTQ4NiwgMTA5NDkxLCAxMDk0OTYsIDEwOTUwMSwgMTA5NTA2LCAxMDk1MTEsIDEwOTUxNiwgCisgICAgMTA5NTIxLCAxMDk1MjYsIDEwOTUzMSwgMTA5NTM2LCAxMDk1NDEsIDEwOTU0NiwgMTA5NTUxLCAxMDk1NTYsIDEwOTU2MSwgCisgICAgMTA5NTY3LCAxMDk1NzIsIDEwOTU3NywgMTA5NTgyLCAxMDk1ODcsIDEwOTU5MiwgMTA5NTk3LCAxMDk2MDIsIDEwOTYwNiwgCisgICAgMTA5NjExLCAxMDk2MTYsIDEwOTYyMSwgMTA5NjI2LCAxMDk2MzEsIDEwOTYzNiwgMTA5NjQxLCAxMDk2NDYsIDEwOTY1MSwgCisgICAgMTA5NjU2LCAxMDk2NjEsIDEwOTY2NiwgMTA5NjcxLCAxMDk2NzYsIDEwOTY4MSwgMTA5Njg2LCAxMDk2OTEsIDEwOTY5NywgCisgICAgMTA5NzAyLCAxMDk3MDcsIDEwOTcxMiwgMTA5NzE3LCAxMDk3MjIsIDEwOTcyNywgMTA5NzMyLCAxMDk3MzgsIDEwOTc0MywgCisgICAgMTA5NzQ4LCAxMDk3NTMsIDEwOTc1OCwgMTA5NzYzLCAxMDk3NjgsIDEwOTc3MywgMTA5Nzc4LCAxMDk3ODMsIDEwOTc4OCwgCisgICAgMTA5NzkzLCAxMDk3OTgsIDEwOTgwMywgMTA5ODA4LCAxMDk4MTMsIDEwOTgxOCwgMTA5ODIzLCAxMDk4MjgsIDEwOTgzMywgCisgICAgMTA5ODM4LCAxMDk4NDMsIDEwOTg0OCwgMTA5ODUzLCAxMDk4NTksIDEwOTg2NCwgMTA5ODY5LCAxMDk4NzQsIDEwOTg3OSwgCisgICAgMTA5ODg0LCAxMDk4ODksIDEwOTg5NCwgMTA5ODk4LCAxMDk5MDMsIDEwOTkwOCwgMTA5OTEzLCAxMDk5MTgsIDEwOTkyMywgCisgICAgMTA5OTI4LCAxMDk5MzMsIDEwOTkzOCwgMTA5OTQzLCAxMDk5NDgsIDEwOTk1MywgMTA5OTU4LCAxMDk5NjMsIDEwOTk2OCwgCisgICAgMTA5OTczLCAxMDk5NzgsIDEwOTk4MywgMTA5OTg5LCAxMDk5OTQsIDEwOTk5OSwgMTEwMDA0LCAxMTAwMDksIDExMDAxNCwgCisgICAgMTEwMDE5LCAxMTAwMjQsIDExMDAzMCwgMTEwMDM1LCAxMTAwNDAsIDExMDA0NSwgMTEwMDUwLCAxMTAwNTUsIDExMDA2MCwgCisgICAgMTEwMDY2LCAxMTAwNzIsIDExMDA3OCwgMTEwMDg0LCAxMTAwOTAsIDExMDA5NiwgMTEwMTAyLCAxMTAxMDgsIDExMDExNCwgCisgICAgMTEwMTIwLCAxMTAxMjYsIDExMDEzMiwgMTEwMTM4LCAxMTAxNDQsIDExMDE1MCwgMTEwMTU2LCAxMTAxNjIsIDExMDE2OSwgCisgICAgMTEwMTc1LCAxMTAxODEsIDExMDE4NywgMTEwMTkzLCAxMTAxOTksIDExMDIwNSwgMTEwMjExLCAxMTAyMTYsIDExMDIyMiwgCisgICAgMTEwMjI4LCAxMTAyMzQsIDExMDI0MCwgMTEwMjQ2LCAxMTAyNTIsIDExMDI1OCwgMTEwMjY0LCAxMTAyNzAsIDExMDI3NiwgCisgICAgMTEwMjgyLCAxMTAyODgsIDExMDI5NCwgMTEwMzAwLCAxMTAzMDYsIDExMDMxMiwgMTEwMzE4LCAxMTAzMjUsIDExMDMzMSwgCisgICAgMTEwMzM3LCAxMTAzNDMsIDExMDM0OSwgMTEwMzU1LCAxMTAzNjEsIDExMDM2NywgMTEwMzc0LCAxMTAzODAsIDExMDM4NiwgCisgICAgMTEwMzkyLCAxMTAzOTgsIDExMDQwNCwgMTEwNDEwLCAxMTA0MTYsIDExMDQyMiwgMTEwNDI4LCAxMTA0MzQsIDExMDQ0MCwgCisgICAgMTEwNDQ2LCAxMTA0NTIsIDExMDQ1OCwgMTEwNDY0LCAxMTA0NzAsIDExMDQ3NiwgMTEwNDgyLCAxMTA0ODgsIDExMDQ5NCwgCisgICAgMTEwNTAwLCAxMTA1MDYsIDExMDUxMiwgMTEwNTE5LCAxMTA1MjUsIDExMDUzMSwgMTEwNTM3LCAxMTA1NDMsIDExMDU0OSwgCisgICAgMTEwNTU1LCAxMTA1NjEsIDExMDU2NiwgMTEwNTcyLCAxMTA1NzgsIDExMDU4NCwgMTEwNTkwLCAxMTA1OTYsIDExMDYwMiwgCisgICAgMTEwNjA4LCAxMTA2MTQsIDExMDYyMCwgMTEwNjI2LCAxMTA2MzIsIDExMDYzOCwgMTEwNjQ0LCAxMTA2NTAsIDExMDY1NiwgCisgICAgMTEwNjYyLCAxMTA2NjgsIDExMDY3NSwgMTEwNjgxLCAxMTA2ODcsIDExMDY5MywgMTEwNjk5LCAxMTA3MDUsIDExMDcxMSwgCisgICAgMTEwNzE3LCAxMTA3MjQsIDExMDczMCwgMTEwNzM2LCAxMTA3NDIsIDExMDc0OCwgMTEwNzU0LCAxMTA3NjAsIDExMDc2NywgCisgICAgMTEwNzc0LCAxMTA3ODEsIDExMDc4OCwgMTEwNzk1LCAxMTA4MDIsIDExMDgwOSwgMTEwODE2LCAxMTA4MjMsIDExMDgzMCwgCisgICAgMTEwODM3LCAxMTA4NDQsIDExMDg1MSwgMTEwODU4LCAxMTA4NjUsIDExMDg3MiwgMTEwODc5LCAxMTA4ODcsIDExMDg5NCwgCisgICAgMTEwOTAxLCAxMTA5MDgsIDExMDkxNSwgMTEwOTIyLCAxMTA5MjksIDExMDkzNiwgMTEwOTQyLCAxMTA5NDksIDExMDk1NiwgCisgICAgMTEwOTYzLCAxMTA5NzAsIDExMDk3NywgMTEwOTg0LCAxMTA5OTEsIDExMDk5OCwgMTExMDA1LCAxMTEwMTIsIDExMTAxOSwgCisgICAgMTExMDI2LCAxMTEwMzMsIDExMTA0MCwgMTExMDQ3LCAxMTEwNTQsIDExMTA2MSwgMTExMDY5LCAxMTEwNzYsIDExMTA4MywgCisgICAgMTExMDkwLCAxMTEwOTcsIDExMTEwNCwgMTExMTExLCAxMTExMTgsIDExMTEyNiwgMTExMTMzLCAxMTExNDAsIDExMTE0NywgCisgICAgMTExMTU0LCAxMTExNjEsIDExMTE2OCwgMTExMTczLCAwLCAwLCAxMTExNzgsIDExMTE4MywgMTExMTg3LCAxMTExOTEsIAorICAgIDExMTE5NSwgMTExMTk5LCAxMTEyMDMsIDExMTIwNywgMTExMjExLCAxMTEyMTUsIDExMTIxOSwgMTExMjI0LCAxMTEyMjgsIAorICAgIDExMTIzMiwgMTExMjM2LCAxMTEyNDAsIDExMTI0NCwgMTExMjQ4LCAxMTEyNTIsIDExMTI1NiwgMTExMjYwLCAxMTEyNjUsIAorICAgIDExMTI2OSwgMTExMjczLCAxMTEyNzcsIDExMTI4MSwgMTExMjg1LCAxMTEyODksIDExMTI5MywgMTExMjk3LCAxMTEzMDEsIAorICAgIDExMTMwNywgMTExMzEyLCAxMTEzMTcsIDExMTMyMiwgMTExMzI3LCAxMTEzMzIsIDExMTMzNywgMTExMzQyLCAxMTEzNDcsIAorICAgIDExMTM1MiwgMTExMzU3LCAxMTEzNjEsIDExMTM2NSwgMTExMzY5LCAxMTEzNzMsIDExMTM3NywgMTExMzgxLCAxMTEzODUsIAorICAgIDExMTM4OSwgMTExMzkzLCAxMTE0MDAsIDExMTQwNywgMTExNDE0LCAxMTE0MjEsIDExMTQyOCwgMTExNDM1LCAxMTE0NDEsIAorICAgIDExMTQ0OCwgMTExNDU1LCAxMTE0NjIsIDExMTQ3MCwgMTExNDc4LCAxMTE0ODYsIDExMTQ5NCwgMTExNTAyLCAxMTE1MTAsIAorICAgIDExMTUxNywgMTExNTI0LCAxMTE1MzEsIDExMTUzOSwgMTExNTQ3LCAxMTE1NTUsIDExMTU2MywgMTExNTcxLCAxMTE1NzksIAorICAgIDExMTU4NiwgMTExNTkzLCAxMTE2MDAsIDExMTYwOCwgMTExNjE2LCAxMTE2MjQsIDExMTYzMiwgMTExNjQwLCAxMTE2NDgsIAorICAgIDExMTY1MywgMTExNjU4LCAxMTE2NjMsIDExMTY2OCwgMTExNjczLCAxMTE2NzgsIDExMTY4MywgMTExNjg4LCAxMTE2OTMsIAorICAgIDAsIDAsIDAsIDAsIDExMTY5OCwgMTExNzAzLCAxMTE3MDcsIDExMTcxMSwgMTExNzE1LCAxMTE3MTksIDExMTcyMywgCisgICAgMTExNzI3LCAxMTE3MzEsIDExMTczNSwgMTExNzM5LCAxMTE3NDMsIDExMTc0NywgMTExNzUxLCAxMTE3NTUsIDExMTc1OSwgCisgICAgMTExNzYzLCAxMTE3NjcsIDExMTc3MSwgMTExNzc1LCAxMTE3NzksIDExMTc4MywgMTExNzg3LCAxMTE3OTEsIDExMTc5NSwgCisgICAgMTExNzk5LCAxMTE4MDMsIDExMTgwNywgMTExODExLCAxMTE4MTUsIDExMTgxOSwgMTExODIzLCAxMTE4MjcsIDExMTgzMSwgCisgICAgMTExODM1LCAxMTE4MzksIDExMTg0MywgMTExODQ3LCAxMTE4NTEsIDExMTg1NSwgMTExODU5LCAxMTE4NjMsIDExMTg2NywgCisgICAgMTExODcxLCAxMTE4NzUsIDExMTg3OSwgMTExODgzLCAxMTE4ODcsIDExMTg5MSwgMTExODk1LCAxMTE4OTksIDExMTkwNCwgCisgICAgMTExOTA4LCAxMTE5MTIsIDExMTkxNiwgMTExOTIwLCAxMTE5MjQsIDExMTkyOCwgMTExOTMyLCAxMTE5MzYsIDExMTk0MCwgCisgICAgMTExOTQ0LCAxMTE5NDgsIDExMTk1MiwgMTExOTU2LCAxMTE5NjAsIDExMTk2NCwgMTExOTY4LCAxMTE5NzIsIDExMTk3NiwgCisgICAgMTExOTgwLCAxMTE5ODQsIDExMTk4OCwgMTExOTkyLCAxMTE5OTYsIDExMjAwMCwgMTEyMDA0LCAxMTIwMDgsIDExMjAxMiwgCisgICAgMTEyMDE2LCAxMTIwMjAsIDExMjAyNCwgMTEyMDI4LCAxMTIwMzIsIDExMjAzNiwgMTEyMDQwLCAxMTIwNDQsIDExMjA0OCwgCisgICAgMTEyMDUyLCAxMTIwNTYsIDExMjA2MCwgMTEyMDY0LCAxMTIwNjgsIDExMjA3MiwgMTEyMDc2LCAxMTIwODAsIDExMjA4NCwgCisgICAgMTEyMDg4LCAxMTIwOTIsIDExMjA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyMTAwLCAKKyAgICAxMTIxMDcsIDExMjExMiwgMTEyMTE2LCAxMTIxMjAsIDExMjEyNCwgMTEyMTI5LCAxMTIxMzQsIDExMjEzOSwgMTEyMTQ0LCAKKyAgICAxMTIxNDksIDAsIDAsIDAsIDAsIDAsIDExMjE1NCwgMTEyMTU5LCAxMTIxNjUsIDExMjE3MSwgMTEyMTc3LCAxMTIxODIsIAorICAgIDExMjE4OCwgMTEyMTk0LCAxMTIyMDAsIDExMjIwNSwgMTEyMjExLCAxMTIyMTcsIDExMjIyMiwgMTEyMjI3LCAxMTIyMzIsIAorICAgIDExMjIzNywgMTEyMjQzLCAxMTIyNDksIDExMjI1NCwgMTEyMjU5LCAxMTIyNjUsIDExMjI3MCwgMTEyMjc2LCAxMTIyODIsIAorICAgIDExMjI4OCwgMTEyMjk0LCAxMTIzMDAsIDExMjMxMCwgMTEyMzE3LCAxMTIzMjMsIDExMjMyNiwgMCwgMCwgMTEyMzI5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIzMzUsIDAsIDExMjM0MCwgMCwgMCwgMTEyMzQ2LCAwLCAwLCAwLCAKKyAgICAxMTIzNTEsIDAsIDAsIDAsIDExMjM1NywgMTEyMzYwLCAxMTIzNjMsIDExMjM2NiwgMTEyMzY5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTIzNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjM4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyMzg4LCAwLCAxMTIzOTYsIAorICAgIDExMjQwMywgMCwgMCwgMTEyNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0MTgsIDExMjQyOCwgCisgICAgMTEyNDMzLCAxMTI0MzcsIDAsIDAsIDExMjQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjU1MjgsIDY1NTM3LCA2NTU0NiwgNjU1NTUsIDY1NTY0LCA2NTU3MywgNjU1ODIsIDY1NTkxLCA2NTYwMCwgCi0gICAgNjU2MDgsIDY1NjE1LCA2NTYyMywgNjU2MzAsIDY1NjM4LCA2NTY0OCwgNjU2NTcsIDY1NjY3LCA2NTY3NiwgNjU2ODYsIAotICAgIDY1Njk0LCA2NTcwMSwgNjU3MDksIDY1NzE2LCA2NTcyNCwgNjU3MjksIDY1NzM0LCA2NTczOSwgNjU3NDcsIDY1NzUzLCAKLSAgICA2NTc1OSwgNjU3NjYsIDY1Nzc1LCA2NTc4MywgNjU3OTEsIDY1Nzk5LCA2NTgwNiwgNjU4MTMsIDY1ODIwLCA2NTgyNywgCi0gICAgNjU4MzIsIDY1ODM3LCA2NTg0MiwgNjU4NDcsIDY1ODUyLCA2NTg1NywgNjU4NjIsIDY1ODY3LCA2NTg3NSwgNjU4ODMsIAotICAgIDY1ODg5LCA2NTg5NCwgNjU4OTksIDY1OTA0LCA2NTkwOSwgNjU5MTQsIDY1OTE5LCA2NTkyNCwgNjU5MjksIDY1OTM0LCAKLSAgICA2NTk0MiwgNjU5NTAsIDY1OTU1LCA2NTk2MCwgNjU5NjksIDY1OTc4LCA2NTk4NSwgNjU5OTIsIDY2MDAxLCA2NjAxMCwgCi0gICAgNjYwMjEsIDY2MDMyLCA2NjAzOCwgNjYwNDQsIDY2MDUyLCA2NjA2MCwgNjYwNjksIDY2MDc4LCA2NjA4NSwgNjYwOTIsIAotICAgIDY2MDk3LCA2NjEwMiwgNjYxMTMsIDY2MTI0LCA2NjEzMiwgNjYxNDAsIDY2MTUwLCA2NjE2MCwgNjYxNzEsIDY2MTgyLCAKLSAgICA2NjE5MSwgNjYyMDAsIDY2MjA3LCA2NjIxNCwgNjYyMjEsIDY2MjI4LCA2NjIzNywgNjYyNDYsIDY2MjUxLCA2NjI1NiwgCi0gICAgNjYyNjMsIDY2MjcwLCA2NjI3NywgNjYyODQsIDY2Mjk1LCA2NjMwNiwgNjYzMTEsIDY2MzE2LCA2NjMyMSwgNjYzMjYsIAotICAgIDY2MzMxLCA2NjMzNiwgNjYzNDEsIDY2MzQ2LCA2NjM1MCwgNjYzNTUsIDY2MzYwLCA2NjM2NSwgNjYzNzAsIDY2Mzc1LCAKLSAgICA2NjM4MSwgNjYzODYsIDY2MzkxLCA2NjM5OCwgNjY0MDUsIDY2NDEyLCA2NjQxOSwgNjY0MjUsIDY2NDMyLCA2NjQzOSwgCi0gICAgNjY0NDQsIDY2NDQ5LCA2NjQ1NSwgNjY0NjEsIDY2NDY3LCA2NjQ3MywgNjY0ODAsIDY2NDg3LCA2NjQ5NCwgNjY0OTgsIAotICAgIDY2NTA1LCA2NjUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTEyNDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0NDksIDExMjQ1NSwgCisgICAgMTEyNDYxLCAxMTI0NjcsIDExMjQ3MSwgMTEyNDc3LCAxMTI0ODMsIDExMjQ4OSwgMTEyNDk1LCAxMTI1MDEsIDExMjUwNywgCisgICAgMTEyNTEzLCAxMTI1MTksIDExMjUyNSwgMTEyNTMxLCAxMTI1MzcsIDExMjU0MywgMTEyNTQ5LCAxMTI1NTUsIDExMjU2MSwgCisgICAgMTEyNTY3LCAxMTI1NzMsIDExMjU3OSwgMTEyNTg1LCAxMTI1OTEsIDExMjU5NywgMTEyNjAzLCAxMTI2MDksIDExMjYxNSwgCisgICAgMTEyNjIxLCAxMTI2MjcsIDExMjYzMywgMTEyNjM5LCAxMTI2NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExMjY1MSwgMTEyNjYyLCAxMTI2NzMsIDExMjY4NCwgMTEyNjk1LCAxMTI3MDYsIDExMjcxNywgMTEyNzI4LCAKKyAgICAxMTI3MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjc1MCwgMTEyNzU0LCAxMTI3NTgsIDExMjc2MiwgMTEyNzY2LCAKKyAgICAxMTI3NzAsIDExMjc3NCwgMTEyNzc4LCAxMTI3ODIsIDExMjc4NiwgMTEyNzkwLCAxMTI3OTQsIDExMjc5OCwgMTEyODAyLCAKKyAgICAxMTI4MDYsIDExMjgxMCwgMTEyODE0LCAxMTI4MTgsIDExMjgyMiwgMTEyODI2LCAxMTI4MzAsIDExMjgzNCwgMTEyODM4LCAKKyAgICAxMTI4NDIsIDExMjg0NiwgMTEyODUwLCAxMTI4NTQsIDExMjg1OCwgMTEyODYyLCAxMTI4NjYsIDExMjg3MCwgMTEyODc0LCAKKyAgICAxMTI4NzgsIDExMjg4MiwgMTEyODg2LCAxMTI4OTAsIDExMjg5NCwgMTEyODk4LCAxMTI5MDIsIDExMjkwNiwgMTEyOTEwLCAKKyAgICAxMTI5MTQsIDExMjkxOCwgMTEyOTIyLCAxMTI5MjYsIDExMjkzMCwgMTEyOTM0LCAxMTI5MzgsIDExMjk0MiwgMTEyOTQ2LCAKKyAgICAxMTI5NTAsIDExMjk1NCwgMTEyOTU4LCAxMTI5NjIsIDExMjk2NiwgMTEyOTcwLCAxMTI5NzQsIDExMjk3OCwgMTEyOTgyLCAKKyAgICAxMTI5ODYsIDExMjk5MCwgMTEyOTk0LCAxMTI5OTgsIDExMzAwMiwgMTEzMDA2LCAxMTMwMTAsIDExMzAxNCwgMTEzMDE4LCAKKyAgICAxMTMwMjIsIDExMzAyNiwgMTEzMDMwLCAxMTMwMzQsIDExMzAzOCwgMTEzMDQyLCAxMTMwNDYsIDExMzA1MCwgMTEzMDU0LCAKKyAgICAxMTMwNTgsIDExMzA2MiwgMTEzMDY2LCAxMTMwNzAsIDExMzA3NCwgMTEzMDc4LCAxMTMwODIsIDExMzA4NiwgMTEzMDkwLCAKKyAgICAxMTMwOTQsIDExMzA5OCwgMTEzMTAyLCAxMTMxMDYsIDExMzExMCwgMTEzMTE0LCAxMTMxMTgsIDExMzEyMiwgMTEzMTI2LCAKKyAgICAxMTMxMzAsIDExMzEzNCwgMTEzMTM4LCAxMTMxNDIsIDExMzE0NiwgMTEzMTUwLCAxMTMxNTQsIDExMzE1OCwgMTEzMTYyLCAKKyAgICAxMTMxNjYsIDExMzE3MCwgMTEzMTc0LCAxMTMxNzgsIDExMzE4MiwgMTEzMTg2LCAxMTMxOTAsIDExMzE5NCwgMTEzMTk4LCAKKyAgICAxMTMyMDIsIDExMzIwNiwgMTEzMjEwLCAxMTMyMTQsIDExMzIxOCwgMTEzMjIyLCAxMTMyMjYsIDExMzIzMCwgMTEzMjM0LCAKKyAgICAxMTMyMzgsIDExMzI0MiwgMTEzMjQ2LCAxMTMyNTAsIDExMzI1NCwgMTEzMjU4LCAxMTMyNjIsIDExMzI2NiwgMTEzMjcwLCAKKyAgICAxMTMyNzQsIDExMzI3OCwgMTEzMjgyLCAxMTMyODYsIDExMzI5MCwgMTEzMjk0LCAxMTMyOTgsIDExMzMwMiwgMTEzMzA2LCAKKyAgICAxMTMzMTAsIDExMzMxNCwgMTEzMzE4LCAxMTMzMjIsIDExMzMyNiwgMTEzMzMwLCAxMTMzMzQsIDExMzMzOCwgMTEzMzQyLCAKKyAgICAxMTMzNDYsIDExMzM1MCwgMTEzMzU0LCAxMTMzNTgsIDExMzM2MiwgMTEzMzY2LCAxMTMzNzAsIDExMzM3NCwgMTEzMzc4LCAKKyAgICAxMTMzODIsIDExMzM4NiwgMTEzMzkwLCAxMTMzOTQsIDExMzM5OCwgMTEzNDAyLCAxMTM0MDYsIDExMzQxMCwgMTEzNDE0LCAKKyAgICAxMTM0MTgsIDExMzQyMiwgMTEzNDI2LCAxMTM0MzAsIDExMzQzNCwgMTEzNDM4LCAxMTM0NDIsIDExMzQ0NiwgMTEzNDUwLCAKKyAgICAxMTM0NTQsIDExMzQ1OCwgMTEzNDYyLCAxMTM0NjYsIDExMzQ3MCwgMTEzNDc0LCAxMTM0NzgsIDExMzQ4MiwgMTEzNDg2LCAKKyAgICAxMTM0OTAsIDExMzQ5NCwgMTEzNDk4LCAxMTM1MDIsIDExMzUwNiwgMTEzNTEwLCAxMTM1MTQsIDExMzUxOCwgMTEzNTIyLCAKKyAgICAxMTM1MjYsIDExMzUzMCwgMTEzNTM0LCAxMTM1MzgsIDExMzU0MiwgMTEzNTQ2LCAxMTM1NTAsIDExMzU1NCwgMTEzNTU4LCAKKyAgICAxMTM1NjIsIDExMzU2NiwgMTEzNTcwLCAxMTM1NzQsIDExMzU3OCwgMTEzNTgyLCAxMTM1ODYsIDExMzU5MCwgMTEzNTk0LCAKKyAgICAxMTM1OTgsIDExMzYwMiwgMTEzNjA2LCAxMTM2MTAsIDExMzYxNCwgMTEzNjE4LCAxMTM2MjIsIDExMzYyNiwgMTEzNjMwLCAKKyAgICAxMTM2MzQsIDExMzYzOCwgMTEzNjQyLCAxMTM2NDYsIDExMzY1MCwgMTEzNjU0LCAxMTM2NTgsIDExMzY2MiwgMTEzNjY2LCAKKyAgICAxMTM2NzAsIDExMzY3NCwgMTEzNjc4LCAxMTM2ODIsIDExMzY4NiwgMTEzNjkwLCAxMTM2OTQsIDExMzY5OCwgMTEzNzAyLCAKKyAgICAxMTM3MDYsIDExMzcxMCwgMTEzNzE0LCAxMTM3MTgsIDExMzcyMiwgMTEzNzI2LCAxMTM3MzAsIDExMzczNCwgMTEzNzM4LCAKKyAgICAxMTM3NDIsIDExMzc0NiwgMTEzNzUwLCAxMTM3NTQsIDExMzc1OCwgMTEzNzYyLCAxMTM3NjYsIDExMzc3MCwgMTEzNzc0LCAKKyAgICAxMTM3NzgsIDExMzc4MiwgMTEzNzg2LCAxMTM3OTAsIDExMzc5NCwgMTEzNzk4LCAxMTM4MDIsIDExMzgwNiwgMTEzODEwLCAKKyAgICAxMTM4MTQsIDExMzgxOCwgMTEzODIyLCAxMTM4MjYsIDExMzgzMCwgMTEzODM0LCAxMTM4MzgsIDExMzg0MiwgMTEzODQ2LCAKKyAgICAxMTM4NTAsIDExMzg1NCwgMTEzODU4LCAxMTM4NjIsIDExMzg2NiwgMTEzODcwLCAxMTM4NzQsIDExMzg3OCwgMTEzODgyLCAKKyAgICAxMTM4ODYsIDExMzg5MCwgMTEzODk0LCAxMTM4OTgsIDExMzkwMiwgMTEzOTA2LCAxMTM5MTAsIDExMzkxNCwgMTEzOTE4LCAKKyAgICAxMTM5MjIsIDExMzkyNiwgMTEzOTMwLCAxMTM5MzQsIDExMzkzOCwgMTEzOTQyLCAxMTM5NDYsIDExMzk1MCwgMTEzOTU0LCAKKyAgICAxMTM5NTgsIDExMzk2MiwgMTEzOTY2LCAxMTM5NzAsIDExMzk3NCwgMTEzOTc4LCAxMTM5ODIsIDExMzk4NiwgMTEzOTkwLCAKKyAgICAxMTM5OTQsIDExMzk5OCwgMTE0MDAyLCAxMTQwMDYsIDExNDAxMCwgMTE0MDE0LCAxMTQwMTgsIDExNDAyMiwgMTE0MDI2LCAKKyAgICAxMTQwMzAsIDExNDAzNCwgMTE0MDM4LCAxMTQwNDIsIDExNDA0NiwgMTE0MDUwLCAxMTQwNTQsIDExNDA1OCwgMTE0MDYyLCAKKyAgICAxMTQwNjYsIDExNDA3MCwgMTE0MDc0LCAxMTQwNzgsIDExNDA4MiwgMTE0MDg2LCAxMTQwOTAsIDExNDA5NCwgMTE0MDk4LCAKKyAgICAxMTQxMDIsIDExNDEwNiwgMTE0MTEwLCAxMTQxMTQsIDExNDExOCwgMTE0MTIyLCAxMTQxMjYsIDExNDEzMCwgMTE0MTM0LCAKKyAgICAxMTQxMzgsIDExNDE0MiwgMTE0MTQ2LCAxMTQxNTAsIDExNDE1NCwgMTE0MTU4LCAxMTQxNjIsIDExNDE2NiwgMTE0MTcwLCAKKyAgICAxMTQxNzQsIDExNDE3OCwgMTE0MTgyLCAxMTQxODYsIDExNDE5MCwgMTE0MTk0LCAxMTQxOTgsIDExNDIwMiwgMTE0MjA2LCAKKyAgICAxMTQyMTAsIDExNDIxNCwgMTE0MjE4LCAxMTQyMjIsIDExNDIyNiwgMTE0MjMwLCAxMTQyMzQsIDExNDIzOCwgMTE0MjQyLCAKKyAgICAxMTQyNDYsIDExNDI1MCwgMTE0MjU0LCAxMTQyNTgsIDExNDI2MiwgMTE0MjY2LCAxMTQyNzAsIDExNDI3NCwgMTE0Mjc4LCAKKyAgICAxMTQyODIsIDExNDI4NiwgMTE0MjkwLCAxMTQyOTQsIDExNDI5OCwgMTE0MzAyLCAxMTQzMDYsIDExNDMxMCwgMTE0MzE0LCAKKyAgICAxMTQzMTgsIDExNDMyMiwgMTE0MzI2LCAxMTQzMzAsIDExNDMzNCwgMTE0MzM4LCAxMTQzNDIsIDExNDM0NiwgMTE0MzUwLCAKKyAgICAxMTQzNTQsIDExNDM1OCwgMTE0MzYyLCAxMTQzNjYsIDExNDM3MCwgMTE0Mzc0LCAxMTQzNzgsIDExNDM4MiwgMTE0Mzg2LCAKKyAgICAxMTQzOTAsIDExNDM5NCwgMTE0Mzk4LCAxMTQ0MDIsIDExNDQwNiwgMTE0NDEwLCAxMTQ0MTQsIDExNDQxOCwgMTE0NDIyLCAKKyAgICAxMTQ0MjYsIDExNDQzMCwgMTE0NDM0LCAxMTQ0MzgsIDExNDQ0MiwgMTE0NDQ2LCAxMTQ0NTAsIDExNDQ1NCwgMTE0NDU4LCAKKyAgICAxMTQ0NjIsIDExNDQ2NiwgMTE0NDcwLCAxMTQ0NzQsIDExNDQ3OCwgMTE0NDgyLCAxMTQ0ODYsIDExNDQ5MCwgMTE0NDk0LCAKKyAgICAxMTQ0OTgsIDExNDUwMiwgMTE0NTA2LCAxMTQ1MTAsIDExNDUxNCwgMTE0NTE4LCAxMTQ1MjIsIDExNDUyNiwgMTE0NTMwLCAKKyAgICAxMTQ1MzQsIDExNDUzOCwgMTE0NTQyLCAxMTQ1NDYsIDExNDU1MCwgMTE0NTU0LCAxMTQ1NTgsIDExNDU2MiwgMTE0NTY2LCAKKyAgICAxMTQ1NzAsIDExNDU3NCwgMTE0NTc4LCAxMTQ1ODIsIDExNDU4NiwgMTE0NTkwLCAxMTQ1OTQsIDExNDU5OCwgMTE0NjAyLCAKKyAgICAxMTQ2MDYsIDExNDYxMCwgMTE0NjE0LCAxMTQ2MTgsIDExNDYyMiwgMTE0NjI2LCAxMTQ2MzAsIDExNDYzNCwgMTE0NjM4LCAKKyAgICAxMTQ2NDIsIDExNDY0NiwgMTE0NjUwLCAxMTQ2NTQsIDExNDY1OCwgMTE0NjYyLCAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAKKyAgICAxMTQ2NzgsIDExNDY4MiwgMTE0Njg2LCAxMTQ2OTAsIDExNDY5NCwgMTE0Njk4LCAxMTQ3MDIsIDExNDcwNiwgMTE0NzEwLCAKKyAgICAxMTQ3MTQsIDExNDcxOCwgMTE0NzIyLCAxMTQ3MjYsIDExNDczMCwgMTE0NzM0LCAxMTQ3MzgsIDExNDc0MiwgMTE0NzQ2LCAKKyAgICAxMTQ3NTAsIDExNDc1NCwgMTE0NzU4LCAxMTQ3NjIsIDExNDc2NiwgMTE0NzcwLCAxMTQ3NzQsIDExNDc3OCwgMTE0NzgyLCAKKyAgICAxMTQ3ODYsIDExNDc5MCwgMTE0Nzk0LCAxMTQ3OTgsIDExNDgwMiwgMTE0ODA2LCAxMTQ4MTAsIDExNDgxNCwgMTE0ODE4LCAKKyAgICAxMTQ4MjIsIDExNDgyNiwgMTE0ODMwLCAxMTQ4MzQsIDExNDgzOCwgMTE0ODQyLCAxMTQ4NDYsIDExNDg1MCwgMTE0ODU0LCAKKyAgICAxMTQ4NTgsIDExNDg2MiwgMTE0ODY2LCAxMTQ4NzAsIDExNDg3NCwgMTE0ODc4LCAxMTQ4ODIsIDExNDg4NiwgMTE0ODkwLCAKKyAgICAxMTQ4OTQsIDExNDg5OCwgMTE0OTAyLCAxMTQ5MDYsIDExNDkxMCwgMTE0OTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjUxNSwgNjY1MjIsIAotICAgIDY2NTI5LCA2NjUzNiwgNjY1NDQsIDY2NTUxLCA2NjU1NywgNjY1NjMsIDY2NTcwLCA2NjU3NiwgNjY1ODIsIDY2NTg4LCAKLSAgICA2NjU5NSwgNjY2MDIsIDY2NjA5LCA2NjYxNiwgNjY2MjMsIDY2NjMwLCA2NjYzNywgNjY2NDQsIDY2NjUxLCA2NjY1OCwgCi0gICAgNjY2NjUsIDY2NjcyLCA2NjY3OSwgNjY2ODYsIDY2NjkyLCA2NjY5OSwgNjY3MDYsIDY2NzEzLCA2NjcyMCwgNjY3MjcsIAotICAgIDY2NzM0LCA2Njc0MSwgNjY3NDgsIDY2NzU1LCA2Njc2MiwgNjY3NjksIDY2Nzc2LCA2Njc4MywgNjY3OTAsIDY2Nzk3LCAKLSAgICA2NjgwNCwgNjY4MTEsIDY2ODE4LCA2NjgyNiwgNjY4MzQsIDY2ODQyLCA2Njg1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY4NTgsIDY2ODYxLCA2Njg2NSwgNjY4NjksIDY2ODczLCAKLSAgICA2Njg3NywgNjY4ODEsIDY2ODg1LCA2Njg4OSwgNjY4OTMsIDY2ODk3LCA2NjkwMSwgNjY5MDUsIDY2OTA4LCA2NjkxMiwgCi0gICAgNjY5MTYsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTAsIAotICAgIDY2OTUzLCA2Njk1NywgNjY5NjEsIDY2OTY1LCA2Njk2OCwgNjY5NzEsIDY2OTc0LCA2Njk3NywgNjY5ODAsIDY2OTgzLCAKLSAgICA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIDY3MDA5LCA2NzAxNCwgNjcwMTgsIDY3MDIyLCA2NzAyNiwgCi0gICAgNjcwMzAsIDY3MDM1LCA2NzA0MSwgNjcwNDYsIDY3MDUyLCA2NzA1NywgNjcwNjIsIDY3MDY2LCA2NzA3MiwgNjcwNzcsIAotICAgIDY3MDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzA4NiwgNjcwOTAsIDY3MDk0LCA2NzA5NywgNjcxMDEsIDY3MTA0LCAKLSAgICA2NzEwOCwgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjQsIDY3MTI4LCA2NzEzMywgNjcxMzYsIDY3MTQwLCA2NzE0NCwgCi0gICAgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTgsIDY3MTYyLCA2NzE2NiwgNjcxNzAsIDY3MTc0LCA2NzE3OCwgNjcxODIsIAotICAgIDY3MTg2LCA2NzE5MCwgNjcxOTQsIDY3MTk4LCA2NzIwMiwgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCAKLSAgICA2NzIyNiwgNjcyMzAsIDY3MjM0LCA2NzIzNywgNjcyNDEsIDY3MjQ1LCA2NzI0OSwgNjcyNTIsIDY3MjU1LCA2NzI1OCwgCi0gICAgNjcyNjIsIDY3MjY2LCA2NzI3MCwgNjcyNzQsIDY3Mjc4LCA2NzI4MSwgNjcyODUsIDY3MjkxLCA2NzI5NiwgNjczMDAsIAotICAgIDY3MzA1LCA2NzMwOSwgNjczMTQsIDY3MzE5LCA2NzMyNSwgNjczMzAsIDY3MzM2LCA2NzM0MCwgNjczNDUsIDY3MzUwLCAKLSAgICA2NzM1NCwgNjczNTksIDY3MzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzM2OCwgNjczNzEsIDY3Mzc1LCAKLSAgICA2NzM3OSwgNjczODIsIDY3Mzg1LCA2NzM4OCwgNjczOTEsIDY3Mzk0LCA2NzM5NywgNjc0MDAsIDY3NDAzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ5MTgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3NDA2LCA2NzQxMywgNjc0MTksIDY3NDI1LCA2NzQzMSwgCi0gICAgNjc0MzcsIDY3NDQzLCA2NzQ0OSwgNjc0NTUsIDY3NDYxLCA2NzQ2NywgNjc0NzMsIDY3NDgwLCA2NzQ4NywgNjc0OTQsIAotICAgIDY3NTAxLCA2NzUwOCwgNjc1MTUsIDY3NTIyLCA2NzUyOSwgNjc1MzYsIDY3NTQzLCA2NzU0OSwgNjc1NTYsIDY3NTYyLCAKLSAgICA2NzU2OSwgNjc1NzYsIDY3NTgyLCA2NzU4OCwgNjc1OTUsIDY3NjAyLCA2NzYwOSwgNjc2MTUsIDY3NjIyLCA2NzYyOSwgCi0gICAgNjc2MzUsIDY3NjQyLCA2NzY0OCwgNjc2NTUsIDY3NjYyLCA2NzY2OCwgNjc2NzQsIDY3NjgxLCA2NzY4NywgNjc2OTQsIAotICAgIDY3NzAxLCA2NzcxMCwgNjc3MTcsIDY3NzI0LCA2NzcyOCwgNjc3MzMsIDY3NzM4LCA2Nzc0MywgNjc3NDgsIDY3NzUzLCAKLSAgICA2Nzc1NywgNjc3NjIsIDY3NzY2LCA2Nzc3MSwgNjc3NzYsIDY3NzgxLCA2Nzc4NiwgNjc3OTAsIDY3Nzk1LCA2Nzc5OSwgCi0gICAgNjc4MDQsIDY3ODA4LCA2NzgxMywgNjc4MTgsIDY3ODIzLCA2NzgyOCwgNjc4MzIsIDY3ODM3LCA2Nzg0MiwgNjc4NDcsIAotICAgIDY3ODUzLCA2Nzg1OCwgNjc4NjQsIDY3ODcwLCA2Nzg3NiwgNjc4ODMsIDY3ODg5LCA2Nzg5NSwgNjc5MDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3OTA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzkxMCwgNjc5MTMsIAotICAgIDY3OTE2LCA2NzkxOSwgNjc5MjIsIDY3OTI2LCA2NzkyOSwgNjc5MzIsIDY3OTM2LCA2Nzk0MCwgNjc5NDQsIDY3OTQ4LCAKLSAgICA2Nzk1MiwgNjc5NTYsIDY3OTYwLCA2Nzk2NCwgNjc5NjgsIDY3OTcyLCA2Nzk3NiwgNjc5ODAsIDY3OTg0LCA2Nzk4OCwgCi0gICAgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCA2ODAxMSwgNjgwMTUsIDY4MDE5LCA2ODAyMywgNjgwMjcsIAotICAgIDY4MDMxLCA2ODAzNCwgNjgwMzgsIDY4MDQxLCA2ODA0NCwgNjgwNDgsIDY4MDUyLCA2ODA1NiwgNjgwNjAsIDY4MDYzLCAKLSAgICA2ODA2OCwgNjgwNzIsIDY4MDc3LCA2ODA4MiwgNjgwODYsIDY4MDkxLCA2ODA5NSwgNjgxMDAsIDY4MTA1LCA2ODExMCwgCi0gICAgNjgxMTUsIDY4MTIwLCA2ODEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjgxMzIsIDY4MTM3LCA2ODE0MSwgCi0gICAgNjgxNDYsIDY4MTUzLCA2ODE1OCwgNjgxNjMsIDY4MTY3LCA2ODE3MiwgNjgxNzcsIDY4MTgxLCA2ODE4NSwgNjgxOTAsIAotICAgIDY4MTk2LCAwLCAwLCA2ODIwMiwgNjgyMDYsIDY4MjA5LCA2ODIxMiwgNjgyMTUsIDY4MjE4LCA2ODIyMSwgNjgyMjQsIAotICAgIDY4MjI3LCA2ODIzMCwgMCwgMCwgNjgyMzMsIDY4MjM4LCA2ODI0MywgNjgyNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY4MjU2LCA2ODI2MCwgNjgyNjQsIDY4MjY4LCA2ODI3MiwgNjgyNzYsIDY4MjgwLCA2ODI4NCwgNjgyODgsIDY4MjkyLCAKLSAgICA2ODI5NiwgNjgzMDAsIDY4MzA0LCA2ODMwOCwgNjgzMTIsIDY4MzE2LCA2ODMyMCwgNjgzMjQsIDY4MzI4LCA2ODMzMiwgCi0gICAgNjgzMzYsIDY4MzQwLCA2ODM0NCwgNjgzNDgsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIDY4MzY0LCA2ODM2OCwgNjgzNzIsIAotICAgIDY4Mzc2LCA2ODM4MCwgNjgzODQsIDY4Mzg4LCA2ODM5MiwgNjgzOTYsIDY4NDAwLCA2ODQwNCwgNjg0MDgsIDY4NDEyLCAKLSAgICA2ODQxNiwgNjg0MjAsIDY4NDI0LCA2ODQyOCwgNjg0MzIsIDY4NDM2LCA2ODQ0MCwgNjg0NDQsIDY4NDQ4LCA2ODQ1MiwgCi0gICAgNjg0NTYsIDY4NDYwLCA2ODQ2NCwgNjg0NjgsIDY4NDcyLCA2ODQ3NiwgNjg0ODAsIDY4NDg0LCA2ODQ4OCwgNjg0OTIsIAotICAgIDY4NDk2LCA2ODUwMCwgNjg1MDQsIDY4NTA4LCA2ODUxMiwgNjg1MTYsIDY4NTIwLCA2ODUyNCwgNjg1MjgsIDY4NTMyLCAKLSAgICA2ODUzNiwgNjg1NDAsIDY4NTQ0LCA2ODU0OCwgNjg1NTIsIDY4NTU2LCA2ODU2MCwgNjg1NjQsIDY4NTY4LCA2ODU3MiwgCi0gICAgNjg1NzYsIDY4NTgwLCA2ODU4NCwgNjg1ODgsIDY4NTkyLCA2ODU5NiwgNjg2MDAsIDY4NjA0LCA2ODYwOCwgNjg2MTIsIAotICAgIDY4NjE2LCA2ODYyMCwgNjg2MjQsIDY4NjI4LCA2ODYzMiwgNjg2MzYsIDY4NjQwLCA2ODY0NCwgNjg2NDgsIDY4NjUyLCAKLSAgICA2ODY1NiwgNjg2NjAsIDY4NjY0LCA2ODY2OCwgNjg2NzIsIDY4Njc2LCA2ODY4MCwgNjg2ODQsIDY4Njg4LCA2ODY5MiwgCi0gICAgNjg2OTYsIDY4NzAwLCA2ODcwNCwgNjg3MDgsIDY4NzEyLCA2ODcxNiwgNjg3MjAsIDY4NzI0LCA2ODcyOCwgNjg3MzIsIAotICAgIDY4NzM2LCA2ODc0MCwgNjg3NDQsIDY4NzQ4LCA2ODc1MiwgNjg3NTYsIDY4NzYwLCA2ODc2NCwgNjg3NjgsIDY4NzcyLCAKLSAgICA2ODc3NiwgNjg3ODAsIDY4Nzg0LCA2ODc4OCwgNjg3OTIsIDY4Nzk2LCA2ODgwMCwgNjg4MDQsIDY4ODA4LCA2ODgxMiwgCi0gICAgNjg4MTYsIDY4ODIwLCA2ODgyNCwgNjg4MjgsIDY4ODMyLCA2ODgzNiwgNjg4NDAsIDY4ODQ0LCA2ODg0OCwgNjg4NTIsIAotICAgIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIDY4ODgwLCA2ODg4NCwgNjg4ODgsIDY4ODkyLCAKLSAgICA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCA2ODkyMCwgNjg5MjQsIDY4OTI4LCA2ODkzMiwgCi0gICAgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgNjg5NjAsIDY4OTY0LCA2ODk2OCwgNjg5NzIsIAotICAgIDY4OTc2LCA2ODk4MCwgNjg5ODQsIDY4OTg4LCA2ODk5MiwgNjg5OTYsIDY5MDAwLCA2OTAwNCwgNjkwMDgsIDY5MDEyLCAKLSAgICA2OTAxNiwgNjkwMjAsIDY5MDI0LCA2OTAyOCwgNjkwMzIsIDY5MDM2LCA2OTA0MCwgNjkwNDQsIDY5MDQ4LCA2OTA1MiwgCi0gICAgNjkwNTYsIDY5MDYwLCA2OTA2NCwgNjkwNjgsIDY5MDcyLCA2OTA3NiwgNjkwODAsIDY5MDg0LCA2OTA4OCwgNjkwOTIsIAotICAgIDY5MDk2LCA2OTEwMCwgNjkxMDQsIDY5MTA4LCA2OTExMiwgNjkxMTYsIDY5MTIwLCA2OTEyNCwgNjkxMjgsIDY5MTMyLCAKLSAgICA2OTEzNiwgNjkxNDAsIDY5MTQ0LCA2OTE0OCwgNjkxNTIsIDY5MTU2LCA2OTE2MCwgNjkxNjQsIDY5MTY4LCA2OTE3MiwgCi0gICAgNjkxNzYsIDY5MTgwLCA2OTE4NCwgNjkxODgsIDY5MTkyLCA2OTE5NiwgNjkyMDAsIDY5MjA0LCA2OTIwOCwgNjkyMTIsIAotICAgIDY5MjE2LCA2OTIyMCwgNjkyMjQsIDY5MjI4LCA2OTIzMiwgNjkyMzYsIDY5MjQwLCA2OTI0NCwgNjkyNDgsIDY5MjUyLCAKLSAgICA2OTI1NiwgNjkyNjAsIDY5MjY0LCA2OTI2OCwgNjkyNzIsIDY5Mjc2LCA2OTI4MCwgNjkyODQsIDY5Mjg4LCA2OTI5MiwgCi0gICAgNjkyOTYsIDY5MzAwLCA2OTMwNCwgNjkzMDgsIDY5MzEyLCA2OTMxNiwgNjkzMjAsIDY5MzI0LCA2OTMyOCwgNjkzMzIsIAotICAgIDY5MzM2LCA2OTM0MCwgNjkzNDQsIDY5MzQ4LCA2OTM1MiwgNjkzNTYsIDY5MzYwLCA2OTM2NCwgNjkzNjgsIDY5MzcyLCAKLSAgICA2OTM3NiwgNjkzODAsIDY5Mzg0LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIDY5NDA4LCA2OTQxMiwgCi0gICAgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCA2OTQ0OCwgNjk0NTIsIAotICAgIDY5NDU2LCA2OTQ2MCwgMCwgMCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgNjk0ODgsIAotICAgIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIDY5NTI4LCAKLSAgICA2OTUzMiwgNjk1MzYsIDY5NTQwLCA2OTU0NCwgNjk1NDgsIDY5NTUyLCA2OTU1NiwgNjk1NjAsIDY5NTY0LCA2OTU2OCwgCi0gICAgNjk1NzIsIDY5NTc2LCA2OTU4MCwgNjk1ODQsIDY5NTg4LCA2OTU5MiwgNjk1OTYsIDY5NjAwLCA2OTYwNCwgNjk2MDgsIAotICAgIDY5NjEyLCA2OTYxNiwgNjk2MjAsIDY5NjI0LCA2OTYyOCwgNjk2MzIsIDY5NjM2LCA2OTY0MCwgNjk2NDQsIDY5NjQ4LCAKLSAgICA2OTY1MiwgNjk2NTYsIDY5NjYwLCA2OTY2NCwgNjk2NjgsIDY5NjcyLCA2OTY3NiwgNjk2ODAsIDY5Njg0LCA2OTY4OCwgCi0gICAgNjk2OTIsIDY5Njk2LCAwLCAwLCAwLCAwLCAwLCA2OTcwMCwgNjk3MDQsIDY5NzA4LCA2OTcxMiwgNjk3MTYsIDY5NzIwLCAKLSAgICA2OTcyNCwgNjk3MjgsIDY5NzMyLCA2OTczNiwgNjk3NDAsIDY5NzQ0LCA2OTc0OCwgNjk3NTIsIDY5NzU2LCA2OTc2MCwgCi0gICAgNjk3NjQsIDY5NzY4LCA2OTc3MiwgNjk3NzYsIDY5NzgwLCA2OTc4NCwgNjk3ODgsIDY5NzkyLCA2OTc5NiwgNjk4MDAsIAotICAgIDY5ODA0LCA2OTgwOCwgNjk4MTIsIDY5ODE2LCA2OTgyMCwgNjk4MjQsIDY5ODI4LCA2OTgzMiwgNjk4MzYsIDY5ODQwLCAKLSAgICA2OTg0NCwgNjk4NDgsIDY5ODUyLCA2OTg1NiwgNjk4NjAsIDY5ODY0LCA2OTg2OCwgNjk4NzIsIDY5ODc2LCA2OTg4MCwgCi0gICAgNjk4ODQsIDY5ODg4LCA2OTg5MiwgNjk4OTYsIDY5OTAwLCA2OTkwNCwgNjk5MDgsIDY5OTEyLCA2OTkxNiwgNjk5MjAsIAotICAgIDY5OTI0LCA2OTkyOCwgNjk5MzIsIDY5OTM2LCA2OTk0MCwgNjk5NDQsIDY5OTQ4LCA2OTk1MiwgNjk5NTYsIDY5OTYwLCAKLSAgICA2OTk2NCwgNjk5NjgsIDY5OTcyLCA2OTk3NiwgNjk5ODAsIDY5OTg0LCA2OTk4OCwgNjk5OTIsIDY5OTk2LCA3MDAwMCwgCi0gICAgNzAwMDQsIDcwMDA4LCA3MDAxMiwgNzAwMTYsIDcwMDIwLCA3MDAyNCwgNzAwMjgsIDcwMDMyLCA3MDAzNiwgNzAwNDAsIAotICAgIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgNzAwNzYsIDcwMDgwLCAKLSAgICA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIDcwMTE2LCA3MDEyMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzAxMjQsIDcwMTI5LCA3MDEzNCwgNzAxMzksIDcwMTQ0LCAKLSAgICA3MDE0OSwgNzAxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwMTYyLCA3MDE2OSwgNzAxNzYsIAotICAgIDcwMTgzLCA3MDE5MCwgMCwgMCwgMCwgMCwgMCwgNzAxOTcsIDcwMjA0LCA3MDIxMSwgNzAyMjEsIDcwMjI3LCA3MDIzMywgCi0gICAgNzAyMzksIDcwMjQ1LCA3MDI1MSwgNzAyNTcsIDcwMjY0LCA3MDI3MCwgNzAyNzYsIDcwMjgyLCA3MDI5MSwgNzAzMDAsIAotICAgIDcwMzEyLCA3MDMyNCwgNzAzMzAsIDcwMzM2LCA3MDM0MiwgNzAzNDksIDcwMzU2LCA3MDM2MywgNzAzNzAsIDcwMzc3LCAwLCAKLSAgICA3MDM4NCwgNzAzOTEsIDcwMzk4LCA3MDQwNiwgNzA0MTMsIDAsIDcwNDIwLCAwLCA3MDQyNywgNzA0MzQsIDAsIDcwNDQxLCAKLSAgICA3MDQ0OSwgMCwgNzA0NTYsIDcwNDYzLCA3MDQ3MCwgNzA0NzcsIDcwNDg0LCA3MDQ5MSwgNzA0OTgsIDcwNTA1LCA3MDUxMiwgCi0gICAgNzA1MTksIDcwNTI0LCA3MDUzMSwgNzA1MzgsIDcwNTQ0LCA3MDU1MCwgNzA1NTYsIDcwNTYyLCA3MDU2OCwgNzA1NzQsIAotICAgIDcwNTgwLCA3MDU4NiwgNzA1OTIsIDcwNTk4LCA3MDYwNCwgNzA2MTAsIDcwNjE2LCA3MDYyMiwgNzA2MjgsIDcwNjM0LCAKLSAgICA3MDY0MCwgNzA2NDYsIDcwNjUyLCA3MDY1OCwgNzA2NjQsIDcwNjcwLCA3MDY3NiwgNzA2ODIsIDcwNjg4LCA3MDY5NCwgCi0gICAgNzA3MDAsIDcwNzA2LCA3MDcxMiwgNzA3MTgsIDcwNzI0LCA3MDczMCwgNzA3MzYsIDcwNzQyLCA3MDc0OCwgNzA3NTQsIAotICAgIDcwNzYwLCA3MDc2NiwgNzA3NzIsIDcwNzc4LCA3MDc4NCwgNzA3OTAsIDcwNzk2LCA3MDgwMiwgNzA4MDgsIDcwODE0LCAKLSAgICA3MDgyMCwgNzA4MjYsIDcwODMyLCA3MDgzOCwgNzA4NDQsIDcwODUwLCA3MDg1NiwgNzA4NjIsIDcwODY4LCA3MDg3NCwgCi0gICAgNzA4ODAsIDcwODg2LCA3MDg5MiwgNzA4OTgsIDcwOTA0LCA3MDkxMCwgNzA5MTYsIDcwOTIyLCA3MDkyOCwgNzA5MzQsIAotICAgIDcwOTQwLCA3MDk0NiwgNzA5NTIsIDcwOTU4LCA3MDk2NCwgNzA5NzAsIDcwOTc2LCA3MDk4MiwgNzA5ODgsIDcwOTk0LCAKLSAgICA3MTAwMiwgNzEwMTAsIDcxMDE2LCA3MTAyMiwgNzEwMjgsIDcxMDM0LCA3MTA0MywgNzEwNTIsIDcxMDYwLCA3MTA2OCwgCi0gICAgNzEwNzYsIDcxMDg0LCA3MTA5MiwgNzExMDAsIDcxMTA4LCA3MTExNiwgNzExMjMsIDcxMTMwLCA3MTE0MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNzExNTAsIDcxMTU2LCA3MTE2MiwgNzExNjgsIDcxMTc0LCA3MTE3OSwgNzExODQsIDcxMTkwLCAKLSAgICA3MTE5NiwgNzEyMDIsIDcxMjA4LCA3MTIxNiwgNzEyMjIsIDcxMjI4LCA3MTIzNiwgNzEyNDQsIDcxMjUyLCA3MTI2MCwgCi0gICAgNzEyNjUsIDcxMjcwLCA3MTI3NSwgNzEyODAsIDcxMjkyLCA3MTMwNCwgNzEzMTQsIDcxMzI0LCA3MTMzNSwgNzEzNDYsIAotICAgIDcxMzU3LCA3MTM2OCwgNzEzNzgsIDcxMzg4LCA3MTM5OSwgNzE0MTAsIDcxNDIxLCA3MTQzMiwgNzE0NDIsIDcxNDUyLCAKLSAgICA3MTQ2MiwgNzE0NzcsIDcxNDkyLCA3MTUwNywgNzE1MTQsIDcxNTIxLCA3MTUyOCwgNzE1MzUsIDcxNTQ1LCA3MTU1NSwgCi0gICAgNzE1NjUsIDcxNTc2LCA3MTU4NiwgNzE1OTQsIDcxNjAyLCA3MTYxMCwgNzE2MTgsIDcxNjI3LCA3MTYzNSwgNzE2NDMsIAotICAgIDcxNjUxLCA3MTY1OSwgNzE2NjcsIDcxNjc2LCA3MTY4NCwgNzE2OTIsIDcxNzAwLCA3MTcwOSwgNzE3MTcsIDcxNzI0LCAKLSAgICA3MTczMSwgNzE3MzgsIDcxNzQ1LCA3MTc1MiwgNzE3NTksIDcxNzY2LCA3MTc3NCwgNzE3ODIsIDcxNzkwLCA3MTc5OCwgCi0gICAgNzE4MDYsIDcxODE0LCA3MTgyMiwgNzE4MzAsIDcxODM4LCA3MTg0NiwgNzE4NTQsIDcxODYyLCA3MTg3MCwgNzE4NzgsIAotICAgIDcxODg2LCA3MTg5NCwgNzE5MDIsIDcxOTEwLCA3MTkxOCwgNzE5MjYsIDcxOTM0LCA3MTk0MywgNzE5NTEsIDcxOTU5LCAKLSAgICA3MTk2NywgNzE5NzYsIDcxOTg0LCA3MTk5MiwgNzIwMDAsIDcyMDA4LCA3MjAxNiwgNzIwMjQsIDcyMDMyLCA3MjA0MSwgCi0gICAgNzIwNDksIDcyMDU2LCA3MjA2MywgNzIwNzAsIDcyMDc3LCA3MjA4NSwgNzIwOTIsIDcyMDk5LCA3MjEwNiwgNzIxMTMsIAotICAgIDcyMTIwLCA3MjEyOCwgNzIxMzUsIDcyMTQzLCA3MjE1MSwgNzIxNTksIDcyMTY3LCA3MjE3NiwgNzIxODQsIDcyMTkyLCAKLSAgICA3MjIwMCwgNzIyMDksIDcyMjE3LCA3MjIyNCwgNzIyMzEsIDcyMjM4LCA3MjI0NSwgNzIyNTMsIDcyMjYwLCA3MjI3MCwgCi0gICAgNzIyODAsIDcyMjkwLCA3MjI5OSwgNzIzMDgsIDcyMzE3LCA3MjMyNiwgNzIzMzUsIDcyMzQ1LCA3MjM1NiwgNzIzNjcsIAotICAgIDcyMzc3LCA3MjM4OCwgNzIzOTksIDcyNDA5LCA3MjQxOCwgNzI0MjcsIDcyNDM1LCA3MjQ0NCwgNzI0NTMsIDcyNDYxLCAKLSAgICA3MjQ3MCwgNzI0NzksIDcyNDg3LCA3MjQ5NiwgNzI1MDUsIDcyNTEzLCA3MjUyMiwgNzI1MzEsIDcyNTM5LCA3MjU0OCwgCi0gICAgNzI1NTcsIDcyNTY1LCA3MjU3NCwgNzI1ODIsIDcyNTkxLCA3MjU5OSwgNzI2MDcsIDcyNjE1LCA3MjYyMywgNzI2MzIsIAotICAgIDcyNjQwLCA3MjY0NywgNzI2NTUsIDcyNjYyLCA3MjY2OSwgNzI2NzYsIDcyNjg1LCA3MjY5NCwgNzI3MDIsIDcyNzExLCAKLSAgICA3MjcyMCwgNzI3MjgsIDcyNzM4LCA3Mjc0NiwgNzI3NTQsIDcyNzYxLCA3Mjc2OSwgNzI3NzcsIDcyNzg0LCA3Mjc5NCwgCi0gICAgNzI4MDQsIDcyODE0LCA3MjgyNCwgNzI4MzUsIDcyODQzLCA3Mjg1MSwgNzI4NTksIDcyODY3LCA3Mjg3NiwgNzI4ODQsIAotICAgIDcyODkyLCA3MjkwMCwgNzI5MDgsIDcyOTE3LCA3MjkyNSwgNzI5MzIsIDcyOTM5LCA3Mjk0NiwgNzI5NTMsIDcyOTYwLCAKLSAgICA3Mjk2NywgNzI5NzUsIDcyOTgzLCA3Mjk5MSwgNzI5OTksIDczMDA3LCA3MzAxNSwgNzMwMjMsIDczMDMxLCA3MzAzOSwgCi0gICAgNzMwNDcsIDczMDU1LCA3MzA2MywgNzMwNzEsIDczMDc5LCA3MzA4NywgNzMwOTUsIDczMTAzLCA3MzExMSwgNzMxMTksIAotICAgIDczMTI3LCA3MzEzNSwgNzMxNDMsIDczMTUxLCA3MzE1OSwgNzMxNjcsIDczMTc1LCA3MzE4MywgNzMxOTEsIDczMTk4LCAKLSAgICA3MzIwNSwgNzMyMTIsIDczMjE5LCA3MzIyNywgNzMyMzQsIDczMjQxLCA3MzI0OCwgNzMyNTUsIDczMjYzLCA3MzI3MSwgCi0gICAgNzMyNzksIDczMjg3LCA3MzI5NiwgNzMzMDQsIDczMzEyLCA3MzMyMiwgNzMzMjksIDczMzM2LCA3MzM0MywgNzMzNTAsIAotICAgIDczMzU4LCA3MzM2OCwgNzMzNzksIDczMzg3LCA3MzM5NiwgNzM0MDQsIDczNDEzLCA3MzQyMSwgNzM0MzAsIDczNDM4LCAKLSAgICA3MzQ0NywgNzM0NTUsIDczNDY0LCA3MzQ3MiwgNzM0ODAsIDczNDg3LCA3MzQ5NSwgNzM1MDQsIDczNTExLCA3MzUxOSwgCi0gICAgNzM1MjgsIDczNTM3LCA3MzU0NiwgNzM1NTUsIDczNTYzLCA3MzU3MiwgNzM1ODAsIDczNTg5LCA3MzU5NywgNzM2MDYsIAotICAgIDczNjE0LCA3MzYyMywgNzM2MzEsIDczNjM5LCA3MzY0NiwgNzM2NTQsIDczNjYxLCA3MzY2OSwgNzM2NzYsIDczNjg1LCAKLSAgICA3MzY5MywgNzM3MDIsIDczNzEwLCA3MzcxOCwgNzM3MjYsIDczNzM0LCA3Mzc0MiwgNzM3NTEsIDczNzYwLCA3Mzc2OSwgCi0gICAgNzM3NzgsIDczNzg3LCA3Mzc5NSwgNzM4MDQsIDczODEyLCA3MzgyMSwgNzM4MjksIDczODM4LCA3Mzg0NiwgNzM4NTUsIAotICAgIDczODYzLCA3Mzg3MSwgNzM4NzgsIDczODg2LCA3Mzg5MywgNzM5MDEsIDczOTA4LCA3MzkxNywgNzM5MjUsIDczOTM0LCAKLSAgICA3Mzk0MiwgNzM5NTAsIDczOTU4LCA3Mzk2NiwgNzM5NzQsIDczOTgzLCA3Mzk5MiwgNzQwMDEsIDc0MDEwLCA3NDAxOCwgCi0gICAgNzQwMjYsIDc0MDM0LCA3NDA0MiwgNzQwNTEsIDc0MDYwLCA3NDA2OCwgNzQwNzYsIDc0MDg0LCA3NDA5MiwgNzQxMDAsIAotICAgIDc0MTA4LCA3NDExNiwgNzQxMjQsIDc0MTMyLCA3NDE0MCwgNzQxNDgsIDc0MTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDE1OCwgNzQxNjgsIDc0MTc4LCA3NDE4OCwgNzQxOTgsIDc0MjA4LCA3NDIxOCwgCi0gICAgNzQyMjgsIDc0MjM4LCA3NDI0NywgNzQyNTYsIDc0MjY1LCA3NDI3NSwgNzQyODUsIDc0Mjk1LCA3NDMwNiwgNzQzMTYsIAotICAgIDc0MzI2LCA3NDMzNiwgNzQzNDYsIDc0MzU2LCA3NDM2NiwgNzQzNzYsIDc0Mzg2LCA3NDM5NiwgNzQ0MDYsIDc0NDE2LCAKLSAgICA3NDQyNiwgNzQ0MzYsIDc0NDQ2LCA3NDQ1NiwgNzQ0NjcsIDc0NDc3LCA3NDQ4NywgNzQ0OTcsIDc0NTA3LCA3NDUxNywgCi0gICAgNzQ1MjcsIDc0NTM3LCA3NDU0NywgNzQ1NTcsIDc0NTY4LCA3NDU3OCwgNzQ1ODgsIDc0NTk5LCA3NDYwOSwgNzQ2MTksIAotICAgIDc0NjI5LCA3NDYzOSwgNzQ2NDgsIDc0NjU3LCA3NDY2NywgNzQ2NzYsIDc0Njg1LCA3NDY5NCwgNzQ3MDMsIDc0NzEyLCAKLSAgICA3NDcyMSwgNzQ3MzAsIDc0NzM5LCA3NDc0OCwgNzQ3NTcsIDc0NzY2LCA3NDc3NSwgMCwgMCwgNzQ3ODQsIDc0NzkzLCAKLSAgICA3NDgwMywgNzQ4MTMsIDc0ODIzLCA3NDgzNCwgNzQ4NDQsIDc0ODU0LCA3NDg2NSwgNzQ4NzUsIDc0ODg2LCA3NDg5NSwgCi0gICAgNzQ5MDQsIDc0OTE0LCA3NDkyNCwgNzQ5MzUsIDc0OTQ1LCA3NDk1NiwgNzQ5NjYsIDc0OTc3LCA3NDk4NiwgNzQ5OTYsIAotICAgIDc1MDA2LCA3NTAxNywgNzUwMjcsIDc1MDM3LCA3NTA0NywgNzUwNTYsIDc1MDY1LCA3NTA3NCwgNzUwODMsIDc1MDkyLCAKLSAgICA3NTEwMSwgNzUxMTEsIDc1MTIxLCA3NTEzMSwgNzUxNDAsIDc1MTUwLCA3NTE2MCwgNzUxNzAsIDc1MTc5LCA3NTE4OCwgCi0gICAgNzUxOTgsIDc1MjA3LCA3NTIxNywgNzUyMjYsIDc1MjM1LCA3NTI0NCwgNzUyNTQsIDc1MjY0LCA3NTI3NCwgNzUyODQsIAotICAgIDc1Mjk0LCA3NTMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUzMTQsIDc1MzI5LCAKLSAgICA3NTM0NCwgNzUzNTAsIDc1MzU2LCA3NTM2MiwgNzUzNjgsIDc1Mzc0LCA3NTM4MCwgNzUzODYsIDc1MzkyLCA3NTQwMCwgCi0gICAgNzU0MDQsIDc1NDA3LCAwLCAwLCA3NTQxNSwgNzU0MTgsIDc1NDIxLCA3NTQyNCwgNzU0MjcsIDc1NDMwLCA3NTQzMywgCi0gICAgNzU0MzYsIDc1NDM5LCA3NTQ0MiwgNzU0NDUsIDc1NDQ4LCA3NTQ1MSwgNzU0NTQsIDc1NDU3LCA3NTQ2MCwgNzU0NjMsIAotICAgIDc1NDcwLCA3NTQ3OCwgNzU0ODgsIDc1NDk1LCA3NTUwMiwgNzU1MTAsIDc1NTE4LCA3NTUyOCwgNzU1MzksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc1NTQ3LCA3NTU1MiwgNzU1NTcsIDc1NTY0LCA3NTU3MSwgNzU1NzcsIDc1NTgzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NTU4OCwgNzU1OTcsIDc1NjA2LCA3NTYxNSwgNzU2MjMsIDc1NjMzLCA3NTY0MSwgNzU2NDksIAotICAgIDc1NjU4LCA3NTY2NywgNzU2NzgsIDc1Njg5LCA3NTY5OSwgNzU3MDksIDc1NzE5LCA3NTcyOSwgNzU3MzgsIDc1NzQ3LCAKLSAgICA3NTc1NiwgNzU3NjUsIDc1Nzc1LCA3NTc4NSwgNzU3ODksIDc1Nzk0LCA3NTgwMiwgNzU4MTAsIDc1ODE0LCA3NTgxOCwgCi0gICAgNzU4MjIsIDc1ODI3LCA3NTgzMiwgNzU4MzcsIDc1ODQyLCA3NTg0NSwgNzU4NDksIDAsIDc1ODU0LCA3NTg1NywgNzU4NjAsIAotICAgIDc1ODY0LCA3NTg2OCwgNzU4NzMsIDc1ODc3LCA3NTg4MSwgNzU4ODYsIDc1ODkxLCA3NTg5OCwgNzU5MDUsIDc1OTA4LCAKLSAgICA3NTkxMSwgNzU5MTQsIDc1OTE3LCA3NTkyMCwgNzU5MjQsIDc1OTI4LCAwLCA3NTkzMiwgNzU5MzcsIDc1OTQxLCA3NTk0NSwgCi0gICAgMCwgMCwgMCwgMCwgNzU5NTAsIDc1OTU1LCA3NTk2MiwgNzU5NjcsIDc1OTcyLCAwLCA3NTk3NywgNzU5ODIsIDc1OTg3LCAKLSAgICA3NTk5MiwgNzU5OTcsIDc2MDAyLCA3NjAwNywgNzYwMTIsIDc2MDE3LCA3NjAyMiwgNzYwMjcsIDc2MDMyLCA3NjA0MSwgCi0gICAgNzYwNTAsIDc2MDU4LCA3NjA2NiwgNzYwNzUsIDc2MDg0LCA3NjA5MywgNzYxMDIsIDc2MTEwLCA3NjExOCwgNzYxMjYsIAotICAgIDc2MTM0LCA3NjEzOSwgNzYxNDQsIDc2MTUwLCA3NjE1NiwgNzYxNjIsIDc2MTY4LCA3NjE3NiwgNzYxODQsIDc2MTkwLCAKLSAgICA3NjE5NiwgNzYyMDIsIDc2MjA4LCA3NjIxNCwgNzYyMjAsIDc2MjI2LCA3NjIzMiwgNzYyMzcsIDc2MjQyLCA3NjI0NywgCi0gICAgNzYyNTIsIDc2MjU3LCA3NjI2MiwgNzYyNjcsIDc2MjcyLCA3NjI3NywgNzYyODIsIDc2Mjg3LCA3NjI5MiwgNzYyOTgsIAotICAgIDc2MzA0LCA3NjMxMCwgNzYzMTYsIDc2MzIyLCA3NjMyOCwgNzYzMzQsIDc2MzQwLCA3NjM0NiwgNzYzNTIsIDc2MzU4LCAKLSAgICA3NjM2NCwgNzYzNzAsIDc2Mzc2LCA3NjM4MiwgNzYzODgsIDc2Mzk0LCA3NjQwMCwgNzY0MDYsIDc2NDEyLCA3NjQxOCwgCi0gICAgNzY0MjQsIDc2NDMwLCA3NjQzNiwgNzY0NDIsIDc2NDQ4LCA3NjQ1NCwgNzY0NjAsIDc2NDY2LCA3NjQ3MiwgNzY0NzgsIAotICAgIDc2NDg0LCA3NjQ5MCwgNzY0OTYsIDc2NTAyLCA3NjUwOCwgNzY1MTQsIDc2NTIwLCA3NjUyNiwgNzY1MzIsIDc2NTM4LCAKLSAgICA3NjU0NCwgNzY1NTAsIDc2NTU2LCA3NjU2MiwgNzY1NjgsIDc2NTc0LCA3NjU4MCwgNzY1ODYsIDc2NTkyLCA3NjU5OCwgCi0gICAgNzY2MDQsIDc2NjA5LCA3NjYxNCwgNzY2MTksIDc2NjI0LCA3NjYyOSwgNzY2MzQsIDc2NjM5LCA3NjY0NCwgNzY2NTAsIAotICAgIDc2NjU2LCA3NjY2MiwgNzY2NjgsIDc2Njc0LCA3NjY4MCwgNzY2ODYsIDc2NjkyLCA3NjY5OCwgNzY3MDQsIDc2NzEwLCAKLSAgICA3NjcxNiwgNzY3MjEsIDc2NzI2LCA3NjczMSwgNzY3MzYsIDc2NzQ3LCA3Njc1OCwgNzY3NjgsIDc2Nzc4LCA3Njc4OSwgCi0gICAgNzY4MDAsIDc2ODA3LCAwLCAwLCA3NjgxNCwgMCwgNzY4MjIsIDc2ODI2LCA3NjgzMCwgNzY4MzMsIDc2ODM3LCA3Njg0MSwgCi0gICAgNzY4NDQsIDc2ODQ3LCA3Njg1MSwgNzY4NTUsIDc2ODU4LCA3Njg2MSwgNzY4NjQsIDc2ODY3LCA3Njg3MiwgNzY4NzUsIAotICAgIDc2ODc5LCA3Njg4MiwgNzY4ODUsIDc2ODg4LCA3Njg5MSwgNzY4OTQsIDc2ODk3LCA3NjkwMCwgNzY5MDMsIDc2OTA2LCAKLSAgICA3NjkwOSwgNzY5MTIsIDc2OTE2LCA3NjkyMCwgNzY5MjQsIDc2OTI4LCA3NjkzMywgNzY5MzgsIDc2OTQ0LCA3Njk1MCwgCi0gICAgNzY5NTYsIDc2OTYxLCA3Njk2NywgNzY5NzIsIDc2OTc3LCA3Njk4MiwgNzY5ODgsIDc2OTk0LCA3Njk5OSwgNzcwMDQsIAotICAgIDc3MDA5LCA3NzAxNCwgNzcwMjAsIDc3MDI2LCA3NzAzMSwgNzcwMzYsIDc3MDQyLCA3NzA0NywgNzcwNTIsIDc3MDU4LCAKLSAgICA3NzA2NCwgNzcwNzAsIDc3MDc2LCA3NzA4MCwgNzcwODUsIDc3MDg5LCA3NzA5NCwgNzcwOTgsIDc3MTAzLCA3NzEwOCwgCi0gICAgNzcxMTQsIDc3MTIwLCA3NzEyNiwgNzcxMzEsIDc3MTM3LCA3NzE0MiwgNzcxNDcsIDc3MTUyLCA3NzE1OCwgNzcxNjQsIAotICAgIDc3MTY5LCA3NzE3NCwgNzcxNzksIDc3MTg0LCA3NzE5MCwgNzcxOTYsIDc3MjAxLCA3NzIwNiwgNzcyMTIsIDc3MjE3LCAKLSAgICA3NzIyMiwgNzcyMjgsIDc3MjM0LCA3NzI0MCwgNzcyNDYsIDc3MjUxLCA3NzI1NSwgNzcyNjAsIDc3MjYyLCA3NzI2NywgCi0gICAgNzcyNzIsIDc3Mjc4LCA3NzI4MywgNzcyODgsIDc3MjkyLCA3NzI5OCwgNzczMDMsIDc3MzA4LCA3NzMxMywgNzczMTgsIAotICAgIDc3MzIzLCA3NzMyOCwgNzczMzMsIDc3MzM5LCA3NzM0NSwgNzczNTEsIDc3MzU5LCA3NzM2MywgNzczNjcsIDc3MzcxLCAKLSAgICA3NzM3NSwgNzczNzksIDc3MzgzLCA3NzM4OCwgNzczOTMsIDc3Mzk4LCA3NzQwMywgNzc0MDgsIDc3NDEzLCA3NzQxOCwgCi0gICAgNzc0MjMsIDc3NDI4LCA3NzQzMywgNzc0MzgsIDc3NDQzLCA3NzQ0OCwgNzc0NTIsIDc3NDU3LCA3NzQ2MiwgNzc0NjcsIAotICAgIDc3NDcyLCA3NzQ3NywgNzc0ODEsIDc3NDg2LCA3NzQ5MSwgNzc0OTYsIDc3NTAxLCA3NzUwNSwgNzc1MTAsIDc3NTE1LCAKLSAgICA3NzUyMCwgNzc1MjUsIDc3NTI5LCA3NzUzNCwgNzc1MzksIDc3NTQzLCA3NzU0OCwgNzc1NTMsIDc3NTU4LCA3NzU2MywgCi0gICAgNzc1NjgsIDc3NTcyLCA3NzU3OSwgNzc1ODYsIDc3NTkwLCA3NzU5NSwgNzc2MDAsIDc3NjA1LCA3NzYxMCwgNzc2MTUsIAotICAgIDc3NjIwLCA3NzYyNSwgNzc2MzAsIDc3NjM1LCA3NzY0MCwgNzc2NDUsIDc3NjUwLCA3NzY1NSwgNzc2NjAsIDc3NjY1LCAKLSAgICA3NzY3MCwgNzc2NzUsIDc3NjgwLCA3NzY4NSwgNzc2OTAsIDc3Njk1LCA3NzcwMCwgNzc3MDUsIDc3NzEwLCA3NzcxNSwgCi0gICAgNzc3MjAsIDc3NzI1LCA3NzczMCwgNzc3MzUsIDAsIDAsIDAsIDc3NzQwLCA3Nzc0NCwgNzc3NDksIDc3NzUzLCA3Nzc1OCwgCi0gICAgNzc3NjMsIDAsIDAsIDc3NzY3LCA3Nzc3MiwgNzc3NzcsIDc3NzgxLCA3Nzc4NiwgNzc3OTEsIDAsIDAsIDc3Nzk2LCAKLSAgICA3NzgwMSwgNzc4MDUsIDc3ODEwLCA3NzgxNSwgNzc4MjAsIDAsIDAsIDc3ODI1LCA3NzgzMCwgNzc4MzUsIDAsIDAsIDAsIAotICAgIDc3ODM5LCA3Nzg0MywgNzc4NDcsIDc3ODUwLCA3Nzg1MywgNzc4NTcsIDc3ODYxLCAwLCA3Nzg2NSwgNzc4NzEsIDc3ODc0LCAKLSAgICA3Nzg3OCwgNzc4ODEsIDc3ODg1LCA3Nzg4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4OTMsIDc3ODk5LCAKLSAgICA3NzkwNSwgNzc5MTEsIDc3OTE3LCAwLCAwLCA3NzkyMSwgNzc5MjcsIDc3OTMzLCA3NzkzOSwgNzc5NDUsIDc3OTUxLCAKLSAgICA3Nzk1OCwgNzc5NjUsIDc3OTcyLCA3Nzk3OSwgNzc5ODYsIDc3OTkzLCAwLCA3ODAwMCwgNzgwMDcsIDc4MDE0LCA3ODAyMCwgCi0gICAgNzgwMjcsIDc4MDM0LCA3ODA0MSwgNzgwNDgsIDc4MDU0LCA3ODA2MSwgNzgwNjgsIDc4MDc1LCA3ODA4MiwgNzgwODksIAotICAgIDc4MDk2LCA3ODEwMywgNzgxMTAsIDc4MTE3LCA3ODEyMywgNzgxMzAsIDc4MTM3LCA3ODE0NCwgNzgxNTEsIDc4MTU4LCAKLSAgICA3ODE2NSwgNzgxNzIsIDAsIDc4MTc5LCA3ODE4NSwgNzgxOTIsIDc4MTk5LCA3ODIwNiwgNzgyMTMsIDc4MjIwLCA3ODIyNywgCi0gICAgNzgyMzQsIDc4MjQxLCA3ODI0OCwgNzgyNTUsIDc4MjYyLCA3ODI2OSwgNzgyNzUsIDc4MjgyLCA3ODI4OSwgNzgyOTYsIAotICAgIDc4MzAzLCAwLCA3ODMxMCwgNzgzMTcsIDAsIDc4MzI0LCA3ODMzMSwgNzgzMzgsIDc4MzQ1LCA3ODM1MiwgNzgzNTksIAotICAgIDc4MzY2LCA3ODM3MywgNzgzODAsIDc4Mzg3LCA3ODM5NCwgNzg0MDEsIDc4NDA4LCA3ODQxNSwgNzg0MjIsIDAsIDAsIAotICAgIDc4NDI4LCA3ODQzMywgNzg0MzgsIDc4NDQzLCA3ODQ0OCwgNzg0NTMsIDc4NDU4LCA3ODQ2MywgNzg0NjgsIDc4NDczLCAKLSAgICA3ODQ3OCwgNzg0ODMsIDc4NDg4LCA3ODQ5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg0OTgsIDc4NTA1LCAKLSAgICA3ODUxMiwgNzg1MTksIDc4NTI2LCA3ODUzMywgNzg1NDAsIDc4NTQ3LCA3ODU1NCwgNzg1NjEsIDc4NTY4LCA3ODU3NSwgCi0gICAgNzg1ODIsIDc4NTg5LCA3ODU5NiwgNzg2MDMsIDc4NjEwLCA3ODYxNywgNzg2MjQsIDc4NjMxLCA3ODYzOSwgNzg2NDcsIAotICAgIDc4NjU0LCA3ODY2MSwgNzg2NjYsIDc4Njc0LCA3ODY4MiwgNzg2ODksIDc4Njk2LCA3ODcwMSwgNzg3MDgsIDc4NzEzLCAKLSAgICA3ODcxOCwgNzg3MjUsIDc4NzMwLCA3ODczNSwgNzg3NDAsIDc4NzQ4LCA3ODc1MywgNzg3NTgsIDc4NzY1LCA3ODc3MCwgCi0gICAgNzg3NzUsIDc4NzgyLCA3ODc4OSwgNzg3OTQsIDc4Nzk5LCA3ODgwNCwgNzg4MDksIDc4ODE0LCA3ODgxOSwgNzg4MjQsIAotICAgIDc4ODI5LCA3ODgzNCwgNzg4NDEsIDc4ODQ2LCA3ODg1MywgNzg4NTgsIDc4ODYzLCA3ODg2OCwgNzg4NzMsIDc4ODc4LCAKLSAgICA3ODg4MywgNzg4ODgsIDc4ODkzLCA3ODg5OCwgNzg5MDMsIDc4OTA4LCA3ODkxNSwgNzg5MjIsIDc4OTI5LCA3ODkzNiwgCi0gICAgNzg5NDIsIDc4OTQ3LCA3ODk1NCwgNzg5NTksIDc4OTY0LCA3ODk3MywgNzg5ODAsIDc4OTg5LCA3ODk5NiwgNzkwMDEsIAotICAgIDc5MDA2LCA3OTAxNCwgNzkwMTksIDc5MDI0LCA3OTAyOSwgNzkwMzQsIDc5MDM5LCA3OTA0NiwgNzkwNTEsIDc5MDU2LCAKLSAgICA3OTA2MSwgNzkwNjYsIDc5MDcxLCA3OTA3OCwgNzkwODUsIDc5MDkyLCA3OTA5OSwgNzkxMDYsIDc5MTEzLCA3OTEyMCwgCi0gICAgNzkxMjcsIDc5MTM0LCA3OTE0MSwgNzkxNDgsIDc5MTU1LCA3OTE2MiwgNzkxNjksIDc5MTc2LCA3OTE4MywgNzkxOTAsIAotICAgIDc5MTk3LCA3OTIwNCwgNzkyMTEsIDc5MjE4LCA3OTIyNSwgNzkyMzIsIDc5MjM5LCA3OTI0NiwgNzkyNTMsIDc5MjYwLCAKLSAgICA3OTI2NywgMCwgMCwgMCwgMCwgMCwgNzkyNzQsIDc5MjgxLCA3OTI4OCwgMCwgMCwgMCwgMCwgNzkyOTIsIDc5Mjk1LCAKLSAgICA3OTI5OCwgNzkzMDEsIDc5MzA0LCA3OTMwNywgNzkzMTAsIDc5MzEzLCA3OTMxNiwgNzkzMTksIDc5MzIzLCA3OTMyNywgCi0gICAgNzkzMzEsIDc5MzM1LCA3OTMzOSwgNzkzNDMsIDc5MzQ3LCA3OTM1MSwgNzkzNTUsIDc5MzYwLCA3OTM2NSwgNzkzNzAsIAotICAgIDc5Mzc2LCA3OTM4MiwgNzkzODgsIDc5Mzk0LCA3OTQwMCwgNzk0MDYsIDc5NDExLCA3OTQxNiwgNzk0MjEsIDc5NDI3LCAKLSAgICA3OTQzMywgNzk0MzksIDc5NDQ1LCA3OTQ1MSwgNzk0NTcsIDc5NDYzLCA3OTQ2OSwgNzk0NzUsIDc5NDgxLCA3OTQ4NywgCi0gICAgNzk0OTMsIDc5NDk5LCA3OTUwNSwgMCwgMCwgMCwgNzk1MTEsIDc5NTE4LCA3OTUyNSwgNzk1MzIsIDc5NTM5LCA3OTU0NiwgCi0gICAgNzk1NTUsIDc5NTY0LCA3OTU3MSwgNzk1NzgsIDc5NTg2LCA3OTU5NCwgNzk2MDIsIDc5NjA4LCA3OTYxNSwgNzk2MjQsIAotICAgIDc5NjMzLCA3OTY0MiwgNzk2NTEsIDc5NjYwLCA3OTY2OSwgNzk2NzksIDc5NjkwLCA3OTcwMCwgNzk3MTEsIDc5NzIwLCAKLSAgICA3OTcyOSwgNzk3MzgsIDc5NzQ4LCA3OTc1OSwgNzk3NjksIDc5NzgwLCA3OTc5MSwgNzk4MDAsIDc5ODA4LCA3OTgxNCwgCi0gICAgNzk4MjAsIDc5ODI2LCA3OTgzMiwgNzk4NDAsIDc5ODQ4LCA3OTg1NCwgNzk4NjEsIDc5ODcxLCA3OTg3OCwgNzk4ODUsIAotICAgIDc5ODkyLCA3OTg5OSwgNzk5MDYsIDc5OTE2LCA3OTkyMywgNzk5MzAsIDc5OTM4LCA3OTk0NiwgNzk5NTUsIDc5OTY0LCAKLSAgICA3OTk3MywgNzk5ODIsIDc5OTkxLCA3OTk5OSwgODAwMDgsIDgwMDE3LCA4MDAyNiwgODAwMzAsIDgwMDM3LCA4MDA0MiwgCi0gICAgODAwNDcsIDgwMDUxLCA4MDA1NSwgODAwNTksIDgwMDYzLCA4MDA2OCwgODAwNzMsIDgwMDc5LCA4MDA4NSwgODAwODksIAotICAgIDgwMDk1LCA4MDA5OSwgODAxMDMsIDgwMTA3LCA4MDExMSwgODAxMTUsIDgwMTE5LCA4MDEyNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODAxMjksIDgwMTM0LCA4MDEzOSwgODAxNDQsIDgwMTQ5LCA4MDE1NiwgODAxNjEsIDgwMTY2LCA4MDE3MSwgODAxNzYsIAotICAgIDgwMTgxLCA4MDE4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAxOTEsIDgwMTk4LCA4MDIwNywgODAyMTYsIDgwMjIzLCA4MDIzMCwgODAyMzcsIAotICAgIDgwMjQ0LCA4MDI1MSwgODAyNTgsIDgwMjY0LCA4MDI3MSwgODAyNzgsIDgwMjg1LCA4MDI5MiwgODAyOTksIDgwMzA2LCAKLSAgICA4MDMxMywgODAzMjAsIDgwMzI5LCA4MDMzNiwgODAzNDMsIDgwMzUwLCA4MDM1NywgODAzNjQsIDgwMzcxLCA4MDM3OCwgCi0gICAgODAzODUsIDgwMzk0LCA4MDQwMSwgODA0MDgsIDgwNDE1LCA4MDQyMiwgODA0MjksIDgwNDM2LCA4MDQ0NSwgODA0NTIsIAotICAgIDgwNDU5LCA4MDQ2NiwgODA0NzMsIDgwNDgyLCA4MDQ4OSwgODA0OTYsIDgwNTAzLCA4MDUxMSwgODA1MjAsIDAsIDAsIAotICAgIDgwNTI5LCA4MDUzMywgODA1MzcsIDgwNTQyLCA4MDU0NywgODA1NTEsIDgwNTU2LCA4MDU2MCwgODA1NjUsIDgwNTcwLCAKLSAgICA4MDU3NSwgODA1ODAsIDgwNTg1LCA4MDU5MCwgODA1OTQsIDgwNTk4LCA4MDYwMiwgODA2MDcsIDgwNjEyLCA4MDYxNiwgCi0gICAgODA2MjEsIDgwNjI2LCA4MDYzMCwgODA2MzQsIDgwNjM5LCA4MDY0NCwgODA2NDksIDgwNjU0LCA4MDY1OCwgMCwgMCwgMCwgCi0gICAgODA2NjMsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgxLCA4MDY4NiwgODA2OTAsIDgwNjk1LCA4MDcwMCwgODA3MDUsIAotICAgIDgwNzEwLCA4MDcxNCwgODA3MTgsIDgwNzIzLCA4MDcyOCwgODA3MzMsIDgwNzM4LCA4MDc0MiwgODA3NDcsIDgwNzUxLCAKLSAgICA4MDc1NiwgODA3NjEsIDgwNzY1LCA4MDc3MCwgODA3NzUsIDgwNzgwLCA4MDc4NCwgODA3ODgsIDgwNzkzLCA4MDc5OCwgCi0gICAgODA4MDMsIDgwODA4LCA4MDgxMywgODA4MTcsIDgwODIyLCA4MDgyNywgODA4MzIsIDgwODM3LCA4MDg0MiwgODA4NDcsIAotICAgIDgwODUyLCA4MDg1NywgODA4NjIsIDgwODY3LCA4MDg3MiwgODA4NzcsIDgwODgyLCA4MDg4NywgODA4OTIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwODk3LCA4MDkwMSwgCi0gICAgODA5MDYsIDgwOTExLCA4MDkxNiwgODA5MjAsIDgwOTI1LCA4MDkzMCwgODA5MzUsIDgwOTQwLCA4MDk0NCwgODA5NDgsIAotICAgIDgwOTUzLCA4MDk1OCwgODA5NjMsIDgwOTY4LCA4MDk3MiwgODA5NzcsIDgwOTgyLCA4MDk4NywgODA5OTIsIDgwOTk3LCAKLSAgICA4MTAwMiwgODEwMDYsIDgxMDExLCA4MTAxNiwgODEwMjEsIDgxMDI2LCA4MTAzMSwgODEwMzYsIDgxMDQxLCAwLCA4MTA0NiwgCi0gICAgODEwNTAsIDgxMDU0LCA4MTA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEwNjQsIDgxMDY5LCAKLSAgICA4MTA3NCwgODEwNzksIDgxMDg0LCA4MTA4OSwgODEwOTQsIDgxMDk5LCA4MTEwNCwgODExMDksIDgxMTE0LCA4MTExOSwgCi0gICAgODExMjQsIDgxMTI5LCA4MTEzNCwgODExMzksIDgxMTQ0LCA4MTE0OSwgODExNTQsIDgxMTU5LCA4MTE2NCwgODExNjksIAotICAgIDgxMTc0LCA4MTE3OSwgODExODQsIDgxMTg5LCA4MTE5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEyMDEsIDgxMjA2LCA4MTIxMSwgCi0gICAgODEyMTYsIDgxMjIxLCA4MTIyNiwgODEyMzEsIDgxMjM2LCA4MTI0MSwgODEyNDYsIDgxMjUxLCA4MTI1NiwgODEyNjEsIAotICAgIDgxMjY2LCA4MTI3MSwgODEyNzYsIDgxMjgxLCA4MTI4NiwgODEyOTEsIDgxMjk2LCA4MTMwMSwgODEzMDYsIDgxMzExLCAKLSAgICA4MTMxNiwgODEzMjEsIDgxMzI2LCA4MTMzMSwgODEzMzUsIDgxMzM5LCA4MTM0MywgMCwgODEzNDgsIDgxMzU0LCA4MTM1OSwgCi0gICAgODEzNjQsIDgxMzY5LCA4MTM3NCwgODEzODAsIDgxMzg2LCA4MTM5MiwgODEzOTgsIDgxNDA0LCA4MTQxMCwgODE0MTYsIAotICAgIDgxNDIyLCA4MTQyOCwgODE0MzQsIDgxNDQwLCA4MTQ0NiwgODE0NTIsIDgxNDU3LCA4MTQ2MywgODE0NjksIDgxNDc1LCAKLSAgICA4MTQ4MSwgODE0ODYsIDgxNDkyLCA4MTQ5OCwgODE1MDMsIDgxNTA5LCA4MTUxNSwgODE1MjAsIDgxNTI2LCA4MTUzMiwgCi0gICAgODE1MzgsIDgxNTQ0LCA4MTU1MCwgODE1NTYsIDAsIDAsIDAsIDAsIDgxNTYxLCA4MTU2NywgODE1NzMsIDgxNTc5LCAKLSAgICA4MTU4NSwgODE1OTEsIDgxNTk3LCA4MTYwMywgODE2MDksIDgxNjE2LCA4MTYyMSwgODE2MjYsIDgxNjMyLCA4MTYzOCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE2NDQsIDgxNjQ5LCA4MTY1NCwgCi0gICAgODE2NTksIDgxNjY1LCA4MTY3MCwgODE2NzYsIDgxNjgyLCA4MTY4OCwgODE2OTQsIDgxNzAxLCA4MTcwNywgODE3MTQsIAotICAgIDgxNzE5LCA4MTcyNCwgODE3MjksIDgxNzM0LCA4MTczOCwgODE3NDMsIDgxNzQ4LCA4MTc1MywgODE3NTgsIDgxNzYzLCAKLSAgICA4MTc2OCwgODE3NzMsIDgxNzc4LCA4MTc4MywgODE3ODgsIDgxNzkzLCA4MTc5OCwgODE4MDMsIDgxODA4LCA4MTgxMywgCi0gICAgODE4MTgsIDgxODIzLCA4MTgyOCwgODE4MzMsIDgxODM4LCA4MTg0MywgODE4NDgsIDgxODUzLCA4MTg1OCwgODE4NjMsIAotICAgIDgxODY4LCA4MTg3NCwgODE4NzksIDgxODg1LCA4MTg5MSwgODE4OTcsIDgxOTAzLCA4MTkxMCwgODE5MTYsIDgxOTIzLCAKLSAgICA4MTkyOCwgODE5MzMsIDgxOTM4LCA4MTk0MywgODE5NDcsIDgxOTUyLCA4MTk1NywgODE5NjIsIDgxOTY3LCA4MTk3MiwgCi0gICAgODE5NzcsIDgxOTgyLCA4MTk4NywgODE5OTIsIDgxOTk3LCA4MjAwMiwgODIwMDcsIDgyMDEyLCA4MjAxNywgODIwMjIsIAotICAgIDgyMDI3LCA4MjAzMiwgODIwMzcsIDgyMDQyLCA4MjA0NywgODIwNTIsIDgyMDU3LCA4MjA2MiwgODIwNjcsIDgyMDcyLCAKLSAgICA4MjA3NywgODIwODIsIDgyMDg3LCA4MjA5MiwgODIwOTcsIDgyMTAyLCA4MjEwNywgODIxMTIsIDgyMTE3LCA4MjEyMiwgCi0gICAgODIxMjcsIDgyMTMyLCA4MjEzNywgODIxNDIsIDgyMTQ3LCA4MjE1MiwgODIxNTcsIDgyMTYyLCA4MjE2NywgODIxNzIsIAotICAgIDgyMTc3LCA4MjE4MiwgODIxODcsIDgyMTkyLCA4MjE5NywgODIyMDIsIDgyMjA3LCA4MjIxMiwgODIyMTcsIDgyMjIyLCAKLSAgICA4MjIyNywgODIyMzIsIDgyMjM3LCA4MjI0MiwgODIyNDcsIDgyMjUyLCA4MjI1NywgODIyNjIsIDgyMjY3LCA4MjI3MiwgCi0gICAgODIyNzcsIDgyMjgyLCA4MjI4NywgODIyOTIsIDgyMjk3LCA4MjMwMiwgODIzMDcsIDgyMzEyLCA4MjMxNywgODIzMjIsIAotICAgIDgyMzI3LCA4MjMzMiwgODIzMzcsIDgyMzQxLCA4MjM0NiwgODIzNTEsIDgyMzU2LCA4MjM2MSwgODIzNjYsIDgyMzcxLCAKLSAgICA4MjM3NiwgODIzODEsIDgyMzg2LCA4MjM5MSwgODIzOTYsIDgyNDAxLCA4MjQwNSwgODI0MDksIDgyNDEzLCA4MjQxNywgCi0gICAgODI0MjEsIDgyNDI1LCA4MjQyOSwgODI0MzQsIDgyNDM5LCAwLCAwLCA4MjQ0NCwgODI0NDksIDgyNDUzLCA4MjQ1NywgCi0gICAgODI0NjEsIDgyNDY1LCA4MjQ2OSwgODI0NzMsIDgyNDc3LCA4MjQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgODI0ODUsIDgyNDg4LCA4MjQ5MSwgODI0OTQsIDgyNDk3LCA4MjUwMCwgMCwgMCwgODI1MDQsIDAsIAotICAgIDgyNTA4LCA4MjUxMSwgODI1MTUsIDgyNTE5LCA4MjUyMywgODI1MjcsIDgyNTMxLCA4MjUzNSwgODI1MzksIDgyNTQzLCAKLSAgICA4MjU0NywgODI1NTAsIDgyNTU0LCA4MjU1OCwgODI1NjIsIDgyNTY2LCA4MjU3MCwgODI1NzQsIDgyNTc4LCA4MjU4MiwgCi0gICAgODI1ODYsIDgyNTg5LCA4MjU5MywgODI1OTcsIDgyNjAxLCA4MjYwNSwgODI2MDgsIDgyNjEyLCA4MjYxNiwgODI2MjAsIAotICAgIDgyNjI0LCA4MjYyOCwgODI2MzIsIDgyNjM2LCA4MjY0MCwgODI2NDQsIDgyNjQ4LCA4MjY1MiwgODI2NTYsIDgyNjU5LCAKLSAgICA4MjY2MywgODI2NjcsIDgyNjcxLCA4MjY3NSwgMCwgODI2NzksIDgyNjgzLCAwLCAwLCAwLCA4MjY4NywgMCwgMCwgODI2OTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNjk1LCA4MjcwMCwgODI3MDUsIAotICAgIDgyNzEwLCA4MjcxNSwgODI3MjAsIDgyNzI1LCA4MjczMCwgODI3MzUsIDgyNzQwLCA4Mjc0NSwgODI3NTAsIDgyNzU1LCAKLSAgICA4Mjc2MCwgODI3NjUsIDgyNzcwLCA4Mjc3NSwgODI3ODAsIDgyNzg1LCA4Mjc5MCwgODI3OTUsIDgyODAwLCA4MjgwNSwgCi0gICAgODI4MDksIDgyODE0LCA4MjgxOSwgMCwgMCwgMCwgMCwgMCwgODI4MjUsIDgyODMxLCA4MjgzNSwgODI4NDAsIDgyODQ0LCAKLSAgICA4Mjg0OSwgODI4NTMsIDgyODU3LCA4Mjg2MSwgODI4NjYsIDgyODcxLCA4Mjg3NSwgODI4NzksIDgyODgzLCA4Mjg4NywgCi0gICAgODI4OTEsIDgyODk2LCA4MjkwMSwgODI5MDUsIDgyOTEwLCA4MjkxNSwgODI5MTksIDgyOTI0LCA4MjkyOSwgODI5MzQsIAotICAgIDgyOTM5LCA4Mjk0NCwgMCwgMCwgMCwgMCwgMCwgODI5NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgyOTU0LCA4Mjk1NywgODI5NjEsIDgyOTY1LCAwLCA4Mjk3MCwgODI5NzQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgyOTc4LCA4Mjk4MywgODI5ODksIDgyOTkzLCA4Mjk5NywgODMwMDAsIDgzMDA0LCA4MzAwOCwgMCwgODMwMTIsIDgzMDE2LCAKLSAgICA4MzAyMCwgMCwgODMwMjQsIDgzMDI4LCA4MzAzMiwgODMwMzYsIDgzMDQwLCA4MzA0NCwgODMwNDgsIDgzMDUyLCA4MzA1NiwgCi0gICAgODMwNjAsIDgzMDY0LCA4MzA2OCwgODMwNzEsIDgzMDc1LCA4MzA3OSwgODMwODMsIDgzMDg2LCA4MzA4OSwgODMwOTIsIAotICAgIDgzMDk2LCA4MzEwMCwgODMxMDQsIDgzMTA4LCA4MzExMiwgODMxMTYsIDgzMTE5LCA4MzEyMywgMCwgMCwgMCwgMCwgCi0gICAgODMxMjcsIDgzMTMyLCA4MzEzNiwgMCwgMCwgMCwgMCwgODMxNDAsIDgzMTQzLCA4MzE0NiwgODMxNDksIDgzMTUyLCAKLSAgICA4MzE1NSwgODMxNTksIDgzMTYzLCA4MzE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMxNzMsIDgzMTc4LCA4MzE4NCwgCi0gICAgODMxODksIDgzMTk1LCA4MzIwMCwgODMyMDUsIDgzMjEwLCA4MzIxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODMyMjEsIDgzMjI0LCA4MzIyOSwgODMyMzUsIDgzMjQzLCA4MzI0OCwgODMyNTQsIDgzMjYyLCAKLSAgICA4MzI2OCwgODMyNzQsIDgzMjc4LCA4MzI4MiwgODMyODksIDgzMjk4LCA4MzMwNSwgODMzMTQsIDgzMzIwLCA4MzMyOSwgCi0gICAgODMzMzYsIDgzMzQzLCA4MzM1MCwgODMzNjAsIDgzMzY2LCA4MzM3MCwgODMzNzcsIDgzMzg2LCA4MzM5NiwgODM0MDMsIAotICAgIDgzNDEwLCA4MzQxNCwgODM0MTgsIDgzNDI1LCA4MzQzNSwgODM0MzksIDgzNDQ2LCA4MzQ1MywgODM0NjAsIDgzNDY2LCAKLSAgICA4MzQ3MywgODM0ODAsIDgzNDg3LCA4MzQ5NCwgODM0OTgsIDgzNTAyLCA4MzUwNiwgODM1MTMsIDgzNTE3LCA4MzUyNCwgCi0gICAgODM1MzEsIDgzNTQ1LCA4MzU1NCwgODM1NTgsIDgzNTYyLCA4MzU2NiwgODM1NzMsIDgzNTc3LCA4MzU4MSwgODM1ODUsIAotICAgIDgzNTkzLCA4MzYwMSwgODM2MjAsIDgzNjMwLCA4MzY1MCwgODM2NTQsIDgzNjU4LCA4MzY2MiwgODM2NjYsIDgzNjcwLCAKLSAgICA4MzY3NCwgODM2NzgsIDgzNjg1LCA4MzY4OSwgODM2OTIsIDgzNjk2LCA4MzcwMCwgODM3MDYsIDgzNzEzLCA4MzcyMiwgCi0gICAgODM3MjYsIDgzNzM1LCA4Mzc0NCwgODM3NTIsIDgzNzU2LCA4Mzc2MywgODM3NjcsIDgzNzcxLCA4Mzc3NSwgODM3NzksIAotICAgIDgzNzkwLCA4Mzc5OSwgODM4MDgsIDgzODE3LCA4MzgyNiwgODM4MzgsIDgzODQ3LCA4Mzg1NiwgODM4NjUsIDgzODczLCAKLSAgICA4Mzg4MiwgODM4OTQsIDgzOTAzLCA4MzkxMiwgODM5MjEsIDgzOTMzLCA4Mzk0MiwgODM5NTEsIDgzOTYzLCA4Mzk3MiwgCi0gICAgODM5ODEsIDgzOTkzLCA4NDAwMiwgODQwMDYsIDg0MDEwLCA4NDAxNCwgODQwMTgsIDg0MDIyLCA4NDAyNiwgODQwMzAsIAotICAgIDg0MDM3LCA4NDA0MSwgODQwNDUsIDg0MDU2LCA4NDA2MCwgODQwNjQsIDg0MDcxLCA4NDA3NywgODQwODMsIDg0MDg3LCAKLSAgICA4NDA5NCwgODQwOTgsIDg0MTAyLCA4NDEwNiwgODQxMTAsIDg0MTE0LCA4NDExOCwgODQxMjQsIDg0MTMyLCA4NDEzNiwgCi0gICAgODQxNDAsIDg0MTQzLCA4NDE0OSwgODQxNTksIDg0MTYzLCA4NDE3NSwgODQxODIsIDg0MTg5LCA4NDE5NiwgODQyMDMsIAotICAgIDg0MjA5LCA4NDIxMywgODQyMTcsIDg0MjIxLCA4NDIyNSwgODQyMzIsIDg0MjQxLCA4NDI0OCwgODQyNTYsIDg0MjY0LCAKLSAgICA4NDI3MCwgODQyNzQsIDg0Mjc4LCA4NDI4MiwgODQyODYsIDg0MjkyLCA4NDMwMSwgODQzMTMsIDg0MzIwLCA4NDMyNywgCi0gICAgODQzMzYsIDg0MzQ3LCA4NDM1MywgODQzNjIsIDg0MzcxLCA4NDM3OCwgODQzODcsIDg0Mzk0LCA4NDQwMSwgODQ0MTEsIAotICAgIDg0NDE4LCA4NDQyNSwgODQ0MzIsIDg0NDM5LCA4NDQ0MywgODQ0NDksIDg0NDUzLCA4NDQ2NCwgODQ0NzIsIDg0NDgxLCAKLSAgICA4NDQ5MywgODQ1MDAsIDg0NTA3LCA4NDUxNywgODQ1MjQsIDg0NTMzLCA4NDU0MCwgODQ1NDksIDg0NTU2LCA4NDU2MywgCi0gICAgODQ1NzMsIDg0NTgwLCA4NDU4NywgODQ1OTcsIDg0NjA0LCA4NDYxNiwgODQ2MjUsIDg0NjMyLCA4NDYzOSwgODQ2NDYsIAotICAgIDg0NjU1LCA4NDY2NSwgODQ2NzgsIDg0Njg1LCA4NDY5NSwgODQ3MDUsIDg0NzEyLCA4NDcyMSwgODQ3MzQsIDg0NzQxLCAKLSAgICA4NDc0OCwgODQ3NTUsIDg0NzY1LCA4NDc3NSwgODQ3ODIsIDg0NzkyLCA4NDc5OSwgODQ4MDYsIDg0ODE2LCA4NDgyMiwgCi0gICAgODQ4MjksIDg0ODM2LCA4NDg0MywgODQ4NTMsIDg0ODYwLCA4NDg2NywgODQ4NzQsIDg0ODgwLCA4NDg4NywgODQ4OTcsIAotICAgIDg0OTA0LCA4NDkwOCwgODQ5MTYsIDg0OTIwLCA4NDkzMiwgODQ5MzYsIDg0OTUwLCA4NDk1NCwgODQ5NTgsIDg0OTYyLCAKLSAgICA4NDk2NiwgODQ5NzIsIDg0OTc5LCA4NDk4NywgODQ5OTEsIDg0OTk1LCA4NDk5OSwgODUwMDMsIDg1MDEwLCA4NTAxNCwgCi0gICAgODUwMjAsIDg1MDI2LCA4NTAzNCwgODUwMzgsIDg1MDQ1LCA4NTA1MywgODUwNTcsIDg1MDYxLCA4NTA2NywgODUwNzEsIAotICAgIDg1MDgwLCA4NTA4OSwgODUwOTYsIDg1MTA2LCA4NTExMiwgODUxMTYsIDg1MTIwLCA4NTEyOCwgODUxMzUsIDg1MTQyLCAKLSAgICA4NTE0OCwgODUxNTIsIDg1MTYwLCA4NTE2NCwgODUxNzEsIDg1MTgzLCA4NTE5MCwgODUyMDAsIDg1MjA2LCA4NTIxMCwgCi0gICAgODUyMTksIDg1MjI2LCA4NTIzNSwgODUyMzksIDg1MjQzLCA4NTI1MCwgODUyNTQsIDg1MjU4LCA4NTI2MiwgODUyNjYsIAotICAgIDg1MjY5LCA4NTI3NSwgODUyODEsIDg1Mjg1LCA4NTI4OSwgODUyOTYsIDg1MzAzLCA4NTMxMCwgODUzMTcsIDg1MzI0LCAKLSAgICA4NTMzMSwgODUzMzgsIDg1MzQ1LCA4NTM1MSwgODUzNTUsIDg1MzU5LCA4NTM2NiwgODUzNzMsIDg1MzgwLCA4NTM4NywgCi0gICAgODUzOTQsIDg1Mzk4LCA4NTQwMSwgODU0MDYsIDg1NDEwLCA4NTQxNCwgODU0MjMsIDg1NDMyLCA4NTQzNiwgODU0NDAsIAotICAgIDg1NDQ2LCA4NTQ1MiwgODU0NjksIDg1NDc1LCA4NTQ3OSwgODU0ODgsIDg1NDkyLCA4NTQ5NiwgODU1MDMsIDg1NTExLCAKLSAgICA4NTUxOSwgODU1MjUsIDg1NTI5LCA4NTUzMywgODU1MzcsIDg1NTQxLCA4NTU0NCwgODU1NDksIDg1NTU1LCA4NTU2NCwgCi0gICAgODU1NzAsIDg1NTc2LCA4NTU4MiwgODU1ODcsIDg1NTkzLCA4NTU5OSwgODU2MDUsIDg1NjExLCA4NTYxNywgODU2MjUsIAotICAgIDg1NjMxLCA4NTY0MiwgODU2NDgsIDg1NjU0LCA4NTY2MywgODU2NzMsIDg1Njc5LCA4NTY4NSwgODU2OTEsIDg1Njk3LCAKLSAgICA4NTcwMywgODU3MDksIDg1NzE1LCA4NTcyMSwgODU3MjcsIDg1NzMzLCA4NTc0MiwgODU3NTEsIDg1NzYwLCA4NTc2NiwgCi0gICAgODU3NzUsIDg1NzgxLCA4NTc4NywgODU3OTMsIDg1Nzk5LCA4NTgwNSwgODU4MTEsIDg1ODE3LCA4NTgyMywgODU4MjksIAotICAgIDg1ODM1LCA4NTg0MSwgODU4NDcsIDg1ODUzLCA4NTg1OCwgODU4NjQsIDg1ODcwLCA4NTg3OCwgODU4ODQsIDg1ODkwLCAKLSAgICA4NTg5NCwgODU5MDIsIDg1OTA2LCA4NTkxMCwgODU5MTQsIDg1OTE4LCA4NTkyMiwgODU5MjksIDg1OTMzLCA4NTk0MiwgCi0gICAgODU5NDYsIDg1OTUzLCA4NTk2MSwgODU5NjUsIDg1OTY5LCA4NTk3MywgODU5ODQsIDg1OTk4LCA4NjAwMiwgODYwMDYsIAotICAgIDg2MDEzLCA4NjAxOSwgODYwMjYsIDg2MDMwLCA4NjAzNCwgODYwMzgsIDg2MDQyLCA4NjA0NiwgODYwNTMsIDg2MDU3LCAKLSAgICA4NjA3NSwgODYwNzksIDg2MDgzLCA4NjA5MCwgODYwOTQsIDg2MDk4LCA4NjEwNCwgODYxMDgsIDg2MTEyLCA4NjEyMCwgCi0gICAgODYxMjQsIDg2MTI4LCA4NjEzMiwgODYxMzYsIDg2MTQxLCA4NjE1MSwgODYxNTksIDg2MTY3LCA4NjE3MywgODYxNzksIAotICAgIDg2MTg5LCA4NjE5NSwgODYyMDEsIDg2MjA3LCA4NjIxMywgODYyMTksIDg2MjI1LCA4NjIzMSwgODYyNDAsIDg2MjQ1LCAKLSAgICA4NjI1MSwgODYyNjAsIDg2MjY4LCA4NjI3NCwgODYyODIsIDg2MjkxLCA4NjI5NywgODYzMDMsIDg2MzA5LCA4NjMxNSwgCi0gICAgODYzMjYsIDg2MzMyLCA4NjMzOCwgODYzNDQsIDg2MzUwLCA4NjM1NiwgODYzNjUsIDg2MzcxLCA4NjM3NywgODYzODYsIAotICAgIDg2Mzk4LCA4NjQwOSwgODY0MTUsIDg2NDI0LCA4NjQzMCwgODY0MzYsIDg2NDQyLCA4NjQ1NiwgODY0NjEsIDg2NDY4LCAKLSAgICA4NjQ3NywgODY0ODYsIDg2NDkyLCA4NjQ5OCwgODY1MDMsIDg2NTA3LCA4NjUxNCwgODY1MjQsIDg2NTMwLCA4NjU0MywgCi0gICAgODY1NDcsIDg2NTUxLCA4NjU1OCwgODY1NjIsIDg2NTY4LCA4NjU3NywgODY1ODEsIDg2NTg1LCA4NjU4OSwgODY1OTMsIAotICAgIDg2NTk3LCA4NjYwNCwgODY2MDgsIDg2NjE1LCA4NjYyMiwgODY2MjksIDg2NjM4LCA4NjY0NywgODY2NTcsIDg2NjY0LCAKLSAgICA4NjY3MSwgODY2NzgsIDg2Njg4LCA4NjY5NSwgODY3MDUsIDg2NzEyLCA4NjcyMiwgODY3MjksIDg2NzM2LCA4Njc0NiwgCi0gICAgODY3NTYsIDg2NzYzLCA4Njc2OSwgODY3NzcsIDg2Nzg1LCA4Njc5MSwgODY3OTcsIDg2ODAxLCA4NjgwNSwgODY4MTIsIAotICAgIDg2ODIwLCA4NjgyNiwgODY4MzAsIDg2ODM0LCA4NjgzOCwgODY4NDUsIDg2ODU3LCA4Njg2MCwgODY4NjcsIDg2ODczLCAKLSAgICA4Njg3NywgODY4ODEsIDg2ODg1LCA4Njg4OSwgODY4OTMsIDg2ODk3LCA4NjkwMSwgODY5MDUsIDg2OTA5LCA4NjkxMywgCi0gICAgODY5MjAsIDg2OTI0LCA4NjkzMCwgODY5MzQsIDg2OTM4LCA4Njk0MiwgODY5NDgsIDg2OTU1LCA4Njk2MiwgODY5NjksIAotICAgIDg2OTgxLCA4Njk4OSwgODY5OTMsIDg2OTk5LCA4NzAwOCwgODcwMTUsIDg3MDIxLCA4NzAyNSwgODcwMjksIDg3MDMzLCAKLSAgICA4NzAzOSwgODcwNDgsIDg3MDU2LCA4NzA2MCwgODcwNjYsIDg3MDcwLCA4NzA3NCwgODcwNzgsIDg3MDg0LCA4NzA5MSwgCi0gICAgODcwOTcsIDg3MTAxLCA4NzEwNywgODcxMTEsIDg3MTE1LCA4NzEyNCwgODcxMzYsIDg3MTQwLCA4NzE0NywgODcxNTQsIAotICAgIDg3MTY0LCA4NzE3MSwgODcxODMsIDg3MTkwLCA4NzE5NywgODcyMDQsIDg3MjE1LCA4NzIyNSwgODcyMzgsIDg3MjQ4LCAKLSAgICA4NzI1NSwgODcyNTksIDg3MjYzLCA4NzI2NywgODcyNzEsIDg3MjgwLCA4NzI4OSwgODcyOTgsIDg3MzE1LCA4NzMyNCwgCi0gICAgODczMzAsIDg3MzM3LCA4NzM0NSwgODczNTgsIDg3MzYyLCA4NzM3MSwgODczODAsIDg3Mzg5LCA4NzM5OCwgODc0MDksIAotICAgIDg3NDE4LCA4NzQyNywgODc0MzYsIDg3NDQ1LCA4NzQ1NCwgODc0NjMsIDg3NDczLCA4NzQ3NiwgODc0ODAsIDg3NDg0LCAKLSAgICA4NzQ4OCwgODc0OTIsIDg3NDk2LCA4NzUwMiwgODc1MDksIDg3NTE2LCA4NzUyMywgODc1MjksIDg3NTM1LCA4NzU0MiwgCi0gICAgODc1NDgsIDg3NTU1LCA4NzU2MywgODc1NjcsIDg3NTc0LCA4NzU4MSwgODc1ODgsIDg3NTk2LCA4NzU5OSwgODc2MDMsIAotICAgIDg3NjA3LCA4NzYxMSwgODc2MTUsIDg3NjIxLCA4NzYyNSwgODc2MzEsIDg3NjM4LCA4NzY0NSwgODc2NTEsIDg3NjU4LCAKLSAgICA4NzY2NSwgODc2NzIsIDg3Njc5LCA4NzY4NiwgODc2OTMsIDg3NzAwLCA4NzcwNywgODc3MTQsIDg3NzIxLCA4NzcyOCwgCi0gICAgODc3MzUsIDg3NzQyLCA4Nzc0OSwgODc3NTUsIDg3NzU5LCA4Nzc2NywgODc3NzEsIDg3Nzc1LCA4Nzc3OSwgODc3ODMsIAotICAgIDg3Nzg5LCA4Nzc5NiwgODc4MDMsIDg3ODEwLCA4NzgxNywgODc4MjQsIDg3ODMwLCA4NzgzOCwgODc4NDIsIDg3ODQ2LCAKLSAgICA4Nzg1MCwgODc4NTQsIDg3ODYwLCA4Nzg3NywgODc4OTQsIDg3ODk4LCA4NzkwMiwgODc5MDYsIDg3OTEwLCA4NzkxNCwgCi0gICAgODc5MTgsIDg3OTI0LCA4NzkzMSwgODc5MzUsIDg3OTQxLCA4Nzk0OCwgODc5NTUsIDg3OTYyLCA4Nzk2OSwgODc5NzYsIAotICAgIDg3OTg1LCA4Nzk5MiwgODc5OTksIDg4MDA2LCA4ODAxMywgODgwMTcsIDg4MDIxLCA4ODAyNywgODgwMzksIDg4MDQzLCAKLSAgICA4ODA0NywgODgwNTYsIDg4MDYwLCA4ODA2NCwgODgwNjgsIDg4MDc0LCA4ODA3OCwgODgwODIsIDg4MDkxLCA4ODA5NSwgCi0gICAgODgwOTksIDg4MTAzLCA4ODExMCwgODgxMTQsIDg4MTE4LCA4ODEyMiwgODgxMjYsIDg4MTMwLCA4ODEzNCwgODgxMzgsIAotICAgIDg4MTQyLCA4ODE0OCwgODgxNTUsIDg4MTYyLCA4ODE2OCwgODgxNzIsIDg4MTg5LCA4ODE5NSwgODgxOTksIDg4MjA1LCAKLSAgICA4ODIxMSwgODgyMTcsIDg4MjIzLCA4ODIyOSwgODgyMzUsIDg4MjM5LCA4ODI0MywgODgyNDcsIDg4MjUzLCA4ODI1NywgCi0gICAgODgyNjMsIDg4MjY3LCA4ODI3MSwgODgyNzgsIDg4Mjg1LCA4ODMwMiwgODgzMDYsIDg4MzEwLCA4ODMxNCwgODgzMTgsIAotICAgIDg4MzIyLCA4ODMzNCwgODgzMzcsIDg4MzQyLCA4ODM0NywgODgzNjIsIDg4MzcyLCA4ODM4MywgODgzODcsIDg4MzkxLCAKLSAgICA4ODM5NSwgODg0MDEsIDg4NDA4LCA4ODQxNSwgODg0MjUsIDg4NDM3LCA4ODQ0MywgODg0NDksIDg4NDU4LCA4ODQ2MiwgCi0gICAgODg0NjYsIDg4NDczLCA4ODQ4MywgODg0OTAsIDg4NDk2LCA4ODUwMCwgODg1MDQsIDg4NTExLCA4ODUxNywgODg1MjEsIAotICAgIDg4NTI3LCA4ODUzMSwgODg1MzksIDg4NTQ1LCA4ODU0OSwgODg1NTcsIDg4NTY2LCA4ODU3MywgODg1NzksIDg4NTg2LCAKLSAgICA4ODU5MywgODg2MDMsIDg4NjEzLCA4ODYxNywgODg2MjEsIDg4NjI1LCA4ODYyOSwgODg2MzUsIDg4NjQyLCA4ODY0OCwgCi0gICAgODg2NTUsIDg4NjYyLCA4ODY2OSwgODg2NzgsIDg4Njg1LCA4ODY5MiwgODg2OTgsIDg4NzA1LCA4ODcxMiwgODg3MTksIAotICAgIDg4NzI2LCA4ODczMywgODg3NDAsIDg4NzQ2LCA4ODc1MywgODg3NjAsIDg4NzY3LCA4ODc3NiwgODg3ODMsIDg4NzkwLCAKLSAgICA4ODc5NCwgODg4MDAsIDg4ODA0LCA4ODgxMCwgODg4MTcsIDg4ODI0LCA4ODgzMSwgODg4MzUsIDg4ODM5LCA4ODg0MywgCi0gICAgODg4NDcsIDg4ODUxLCA4ODg1OCwgODg4NjIsIDg4ODY2LCA4ODg3MiwgODg4ODEsIDg4ODg1LCA4ODg4OSwgODg4OTMsIAotICAgIDg4ODk3LCA4ODkwNCwgODg5MDgsIDg4OTEyLCA4ODkyMCwgODg5MjQsIDg4OTI4LCA4ODkzMiwgODg5MzYsIDg4OTQyLCAKLSAgICA4ODk0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg5NTAsIDg4OTU2LCAKLSAgICA4ODk2MiwgODg5NjksIDg4OTc2LCA4ODk4MywgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTAsIDg5MDE3LCA4OTAyNCwgCi0gICAgODkwMzEsIDg5MDM4LCA4OTA0NSwgODkwNTIsIDg5MDU4LCA4OTA2NCwgODkwNzAsIDg5MDc2LCA4OTA4MiwgODkwODgsIAotICAgIDg5MDk0LCA4OTEwMCwgODkxMDYsIDg5MTEzLCA4OTEyMCwgODkxMjcsIDg5MTM0LCA4OTE0MSwgODkxNDgsIDg5MTU0LCAKLSAgICA4OTE2MCwgODkxNjYsIDg5MTczLCA4OTE4MCwgODkxODYsIDg5MTkyLCA4OTIwMSwgODkyMDgsIDg5MjE1LCA4OTIyMiwgCi0gICAgODkyMjksIDg5MjM2LCA4OTI0MywgODkyNDksIDg5MjU1LCA4OTI2MSwgODkyNzAsIDg5Mjc3LCA4OTI4NCwgODkyOTUsIAotICAgIDg5MzA2LCA4OTMxMiwgODkzMTgsIDg5MzI0LCA4OTMzMywgODkzNDAsIDg5MzQ3LCA4OTM1NiwgODkzNjUsIDg5Mzc1LCAKLSAgICA4OTM4NSwgODkzOTYsIDg5NDA4LCA4OTQxOCwgODk0MjgsIDg5NDM5LCA4OTQ1MSwgODk0NjEsIDg5NDcxLCA4OTQ4MSwgCi0gICAgODk0OTEsIDg5NTAxLCA4OTUxMiwgODk1MjAsIDg5NTI4LCA4OTUzNywgODk1NDYsIDg5NTU1LCA4OTU2MSwgODk1NjcsIAotICAgIDg5NTczLCA4OTU4MCwgODk1OTAsIDg5NTk3LCA4OTYwNywgODk2MTIsIDg5NjE3LCA4OTYyMywgODk2MjksIDg5NjM3LCAKLSAgICA4OTY0NSwgODk2NTQsIDg5NjY0LCA4OTY3NCwgODk2ODIsIDg5NjkwLCA4OTY5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODk3MDgsIDg5NzE5LCA4OTcyNiwgODk3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg5NzQyLCA4OTc0NywgODk3NTIsIDg5NzU3LCA4OTc2NCwgODk3NzEsIDg5Nzc4LCA4OTc4NSwgODk3OTAsIAotICAgIDg5Nzk1LCA4OTgwMCwgODk4MDUsIDg5ODEyLCA4OTgxNywgODk4MjQsIDg5ODMxLCA4OTgzNiwgODk4NDEsIDg5ODQ2LCAKLSAgICA4OTg1MywgODk4NTgsIDg5ODYzLCA4OTg3MCwgODk4NzcsIDg5ODgyLCA4OTg4NywgODk4OTIsIDg5ODk5LCA4OTkwNiwgCi0gICAgODk5MTMsIDg5OTE4LCA4OTkyMywgODk5MzAsIDg5OTM3LCA4OTk0NCwgODk5NTEsIDg5OTU2LCA4OTk2MSwgODk5NjYsIAotICAgIDg5OTczLCA4OTk3OCwgODk5ODMsIDg5OTg4LCA4OTk5NSwgOTAwMDQsIDkwMDExLCA5MDAxNiwgOTAwMjEsIDkwMDI2LCAKLSAgICA5MDAzMSwgOTAwMzYsIDkwMDQxLCA5MDA1MCwgOTAwNTcsIDkwMDYyLCA5MDA2OSwgOTAwNzYsIDkwMDgxLCA5MDA4NiwgCi0gICAgOTAwOTEsIDkwMDk4LCA5MDEwMywgOTAxMTAsIDkwMTE3LCA5MDEyMiwgOTAxMjcsIDkwMTMyLCA5MDEzOSwgOTAxNDYsIAotICAgIDkwMTUxLCA5MDE1NiwgOTAxNjMsIDkwMTcwLCA5MDE3NywgOTAxODIsIDkwMTg3LCA5MDE5MiwgOTAxOTcsIDkwMjA0LCAKLSAgICA5MDIxMywgOTAyMjIsIDkwMjI3LCA5MDIzNCwgOTAyNDMsIDkwMjQ4LCA5MDI1MywgOTAyNTgsIDkwMjYzLCA5MDI3MCwgCi0gICAgOTAyNzcsIDkwMjg0LCA5MDI5MSwgOTAyOTYsIDkwMzAxLCA5MDMwNiwgOTAzMTMsIDkwMzIwLCA5MDMyNywgOTAzMzIsIAotICAgIDkwMzM3LCA5MDM0NCwgOTAzNDksIDkwMzU2LCA5MDM2MSwgOTAzNjgsIDkwMzczLCA5MDM4MCwgOTAzODcsIDkwMzkyLCAKLSAgICA5MDM5NywgOTA0MDIsIDkwNDA3LCA5MDQxMiwgOTA0MTcsIDkwNDIyLCA5MDQyNywgOTA0MzIsIDkwNDM5LCA5MDQ0NiwgCi0gICAgOTA0NTMsIDkwNDYwLCA5MDQ2NywgOTA0NzYsIDkwNDgxLCA5MDQ4NiwgOTA0OTMsIDkwNTAwLCA5MDUwNSwgOTA1MTIsIAotICAgIDkwNTE5LCA5MDUyNiwgOTA1MzMsIDkwNTQwLCA5MDU0NywgOTA1NTIsIDkwNTU3LCA5MDU2MiwgOTA1NjcsIDkwNTcyLCAKLSAgICA5MDU4MSwgOTA1OTAsIDkwNTk5LCA5MDYwOCwgOTA2MTcsIDkwNjI2LCA5MDYzNSwgOTA2NDQsIDkwNjQ5LCA5MDY2MCwgCi0gICAgOTA2NzEsIDkwNjgwLCA5MDY4NSwgOTA2OTAsIDkwNjk1LCA5MDcwMCwgOTA3MDksIDkwNzE2LCA5MDcyMywgOTA3MzAsIAotICAgIDkwNzM3LCA5MDc0NCwgOTA3NTEsIDkwNzYwLCA5MDc2OSwgOTA3ODAsIDkwNzg5LCA5MDgwMCwgOTA4MDksIDkwODE2LCAKLSAgICA5MDgyNSwgOTA4MzYsIDkwODQ1LCA5MDg1NCwgOTA4NjMsIDkwODcyLCA5MDg3OSwgOTA4ODYsIDkwODkzLCA5MDkwMiwgCi0gICAgOTA5MTEsIDkwOTIyLCA5MDkzMSwgOTA5NDAsIDkwOTUxLCA5MDk1NiwgOTA5NjEsIDkwOTcyLCA5MDk4MCwgOTA5ODksIAotICAgIDkwOTk4LCA5MTAwNywgOTEwMTgsIDkxMDI3LCA5MTAzNiwgOTEwNDcsIDkxMDU4LCA5MTA2OSwgOTEwODAsIDkxMDkxLCAKLSAgICA5MTEwMiwgOTExMDksIDkxMTE2LCA5MTEyMywgOTExMzAsIDkxMTQxLCA5MTE1MCwgOTExNTcsIDkxMTY0LCA5MTE3MSwgCi0gICAgOTExODIsIDkxMTkzLCA5MTIwNCwgOTEyMTUsIDkxMjI2LCA5MTIzNywgOTEyNDgsIDkxMjU5LCA5MTI2NiwgOTEyNzMsIAotICAgIDkxMjgyLCA5MTI5MSwgOTEyOTgsIDkxMzA1LCA5MTMxMiwgOTEzMjEsIDkxMzMwLCA5MTMzOSwgOTEzNDYsIDkxMzU1LCAKLSAgICA5MTM2NCwgOTEzNzMsIDkxMzgwLCA5MTM4NywgOTEzOTIsIDkxMzk4LCA5MTQwNSwgOTE0MTIsIDkxNDE5LCA5MTQyNiwgCi0gICAgOTE0MzMsIDkxNDQwLCA5MTQ0OSwgOTE0NTgsIDkxNDY3LCA5MTQ3NiwgOTE0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDkxNDkyLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxNSwgOTE1MjEsIDkxNTI3LCA5MTUzMywgOTE1MzksIAotICAgIDkxNTQ1LCA5MTU1MSwgOTE1NTcsIDkxNTYxLCA5MTU2NSwgOTE1NzEsIDkxNTc3LCA5MTU4MywgOTE1ODcsIDkxNTkyLCAKLSAgICA5MTU5NywgOTE2MDEsIDkxNjA1LCA5MTYwOCwgOTE2MTQsIDkxNjIwLCA5MTYyNiwgOTE2MzIsIDkxNjM4LCA5MTY0NCwgCi0gICAgOTE2NTAsIDkxNjU2LCA5MTY2MiwgOTE2NzIsIDkxNjgyLCA5MTY4OCwgOTE2OTQsIDkxNzA0LCA5MTcxNCwgOTE3MjAsIDAsIAotICAgIDAsIDkxNzI2LCA5MTczNCwgOTE3MzksIDkxNzQ0LCA5MTc1MCwgOTE3NTYsIDkxNzYyLCA5MTc2OCwgOTE3NzQsIDkxNzgwLCAKLSAgICA5MTc4NywgOTE3OTQsIDkxODAwLCA5MTgwNiwgOTE4MTIsIDkxODE4LCA5MTgyNCwgOTE4MzAsIDkxODM2LCA5MTg0MiwgCi0gICAgOTE4NDcsIDkxODUzLCA5MTg1OSwgOTE4NjUsIDkxODcxLCA5MTg3NywgOTE4ODYsIDkxODkyLCA5MTg5NywgOTE5MDUsIAotICAgIDkxOTEyLCA5MTkxOSwgOTE5MjgsIDkxOTM3LCA5MTk0NiwgOTE5NTUsIDkxOTY0LCA5MTk3MywgOTE5ODIsIDkxOTkxLCAKLSAgICA5MjAwMSwgOTIwMTEsIDkyMDE5LCA5MjAyNywgOTIwMzYsIDkyMDQ1LCA5MjA1MSwgOTIwNTcsIDkyMDYzLCA5MjA2OSwgCi0gICAgOTIwNzcsIDkyMDg1LCA5MjA4OSwgOTIwOTUsIDkyMTAwLCA5MjEwNiwgOTIxMTIsIDkyMTE4LCA5MjEyNCwgOTIxMzAsIAotICAgIDkyMTM5LCA5MjE0NCwgOTIxNTEsIDkyMTU2LCA5MjE2MSwgOTIxNjYsIDkyMTcyLCA5MjE3OCwgOTIxODQsIDkyMTkxLCAKLSAgICA5MjE5NiwgOTIyMDEsIDkyMjA2LCA5MjIxMSwgOTIyMTYsIDkyMjIyLCA5MjIyOCwgOTIyMzQsIDkyMjQwLCA5MjI0NiwgCi0gICAgOTIyNTIsIDkyMjU4LCA5MjI2NCwgOTIyNjksIDkyMjc0LCA5MjI3OSwgOTIyODQsIDkyMjg5LCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMxMCwgOTIzMTYsIDkyMzIxLCA5MjMyNiwgOTIzMzEsIDkyMzM2LCA5MjM0MSwgOTIzNDcsIDkyMzU0LCAKLSAgICA5MjM1OCwgOTIzNjIsIDkyMzY2LCA5MjM3MCwgOTIzNzQsIDkyMzc4LCA5MjM4MiwgOTIzODYsIDkyMzk0LCA5MjQwNCwgCi0gICAgOTI0MDgsIDkyNDEyLCA5MjQxOCwgOTI0MjQsIDkyNDMwLCA5MjQzNiwgOTI0NDIsIDkyNDQ4LCA5MjQ1NCwgOTI0NjAsIAotICAgIDkyNDY2LCA5MjQ3MiwgOTI0NzgsIDkyNDg0LCA5MjQ5MCwgOTI0OTYsIDkyNTAwLCA5MjUwNCwgOTI1MTEsIDkyNTE3LCAKLSAgICA5MjUyMywgOTI1MjksIDkyNTM0LCA5MjU0MSwgOTI1NDYsIDkyNTUyLCA5MjU1OCwgOTI1NjQsIDkyNTcwLCA5MjU3NSwgCi0gICAgOTI1NzksIDkyNTg1LCA5MjU4OSwgOTI1OTMsIDkyNTk3LCA5MjYwMywgOTI2MDksIDkyNjEzLCA5MjYxOSwgOTI2MjUsIAotICAgIDkyNjMxLCA5MjYzNywgOTI2NDMsIDkyNjUxLCA5MjY1OSwgOTI2NjUsIDkyNjcxLCA5MjY3NywgOTI2ODMsIDkyNjk1LCAKLSAgICA5MjcwNywgOTI3MjEsIDkyNzMzLCA5Mjc0NSwgOTI3NTksIDkyNzczLCA5Mjc4NywgOTI3OTEsIDkyNzk5LCA5MjgwNywgCi0gICAgOTI4MTIsIDkyODE2LCA5MjgyMCwgOTI4MjQsIDkyODI4LCA5MjgzMiwgOTI4MzYsIDkyODQwLCA5Mjg0NiwgOTI4NTIsIAotICAgIDkyODU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5Mjg2NCwgOTI4NzAsIDkyODc2LCA5Mjg4MiwgOTI4ODgsIAotICAgIDkyODk0LCA5MjkwMCwgOTI5MDYsIDkyOTEyLCA5MjkxOCwgOTI5MjQsIDkyOTMwLCA5MjkzNiwgOTI5NDIsIDkyOTQ4LCAKLSAgICA5Mjk1NCwgOTI5NjAsIDkyOTY2LCA5Mjk3MiwgOTI5NzgsIDkyOTg0LCA5Mjk5MCwgOTI5OTYsIDkzMDAyLCA5MzAwOCwgCi0gICAgOTMwMTQsIDkzMDIwLCA5MzAyNiwgOTMwMzIsIDkzMDM4LCA5MzA0NCwgOTMwNTAsIDkzMDU2LCA5MzA2MiwgOTMwNjgsIAotICAgIDkzMDc0LCA5MzA4MCwgOTMwODYsIDkzMDkyLCA5MzA5OCwgOTMxMDQsIDkzMTEwLCA5MzExNiwgOTMxMjIsIDkzMTI4LCAKLSAgICA5MzEzNCwgOTMxNDAsIDkzMTQ2LCA5MzE1MiwgOTMxNTgsIDkzMTY0LCA5MzE3MCwgOTMxNzYsIDkzMTgyLCA5MzE4OCwgCi0gICAgOTMxOTQsIDkzMjAwLCA5MzIwNiwgOTMyMTIsIDkzMjE4LCA5MzIyNCwgOTMyMzAsIDkzMjM2LCA5MzI0MiwgOTMyNDgsIAotICAgIDkzMjU0LCA5MzI2MCwgOTMyNjUsIDkzMjcwLCA5MzI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTMyNzksIAotICAgIDkzMjg0LCA5MzI5MSwgOTMyOTgsIDkzMzA1LCA5MzMxMiwgOTMzMTcsIDkzMzIxLCA5MzMyNywgOTMzMzEsIDkzMzM1LCAKLSAgICA5MzM0MSwgOTMzNDUsIDkzMzQ5LCA5MzM1MywgOTMzNTksIDkzMzY2LCA5MzM3MCwgOTMzNzQsIDkzMzc4LCA5MzM4MiwgCi0gICAgOTMzODYsIDkzMzkwLCA5MzM5NiwgOTM0MDAsIDkzNDA0LCA5MzQwOCwgOTM0MTIsIDkzNDE2LCA5MzQyMCwgOTM0MjQsIAotICAgIDkzNDI4LCA5MzQzMiwgOTM0MzYsIDkzNDQwLCA5MzQ0NCwgOTM0NDksIDkzNDUzLCA5MzQ1NywgOTM0NjEsIDkzNDY1LCAKLSAgICA5MzQ2OSwgOTM0NzMsIDkzNDc3LCA5MzQ4MSwgOTM0ODUsIDkzNDkyLCA5MzQ5NiwgOTM1MDMsIDkzNTA3LCA5MzUxMSwgCi0gICAgOTM1MTUsIDkzNTE5LCA5MzUyMywgOTM1MjcsIDkzNTMxLCA5MzUzOCwgOTM1NDIsIDkzNTQ2LCA5MzU1MCwgOTM1NTQsIAotICAgIDkzNTU4LCA5MzU2NCwgOTM1NjgsIDkzNTc0LCA5MzU3OCwgOTM1ODIsIDkzNTg2LCA5MzU5MCwgOTM1OTQsIDkzNTk4LCAKLSAgICA5MzYwMiwgOTM2MDYsIDkzNjEwLCA5MzYxNCwgOTM2MTgsIDkzNjIyLCA5MzYyNiwgOTM2MzAsIDkzNjM0LCA5MzYzOCwgCi0gICAgOTM2NDIsIDkzNjQ2LCA5MzY1MCwgOTM2NTgsIDkzNjYyLCA5MzY2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTM2NzAsIDkzNjc4LCA5MzY4NiwgOTM2OTQsIDkzNzAyLCA5MzcxMCwgOTM3MTgsIDkzNzI2LCA5MzczNCwgOTM3NDIsIAotICAgIDkzNzUwLCA5Mzc1OCwgOTM3NjYsIDkzNzc0LCA5Mzc4MiwgOTM3OTAsIDkzNzk4LCA5MzgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM4MTQsIDkzODE4LCA5MzgyMywgOTM4MjgsIDkzODMzLCA5MzgzNywgOTM4NDIsIAotICAgIDkzODQ2LCA5Mzg1MCwgOTM4NTQsIDkzODU5LCA5Mzg2NCwgOTM4NjgsIDkzODcyLCA5Mzg3NiwgOTM4ODAsIDkzODg1LCAKLSAgICA5Mzg5MCwgOTM4OTQsIDkzODk4LCA5MzkwMywgOTM5MDcsIDkzOTExLCA5MzkxNiwgOTM5MjEsIDkzOTI2LCA5MzkzMSwgCi0gICAgOTM5MzUsIDkzOTQwLCA5Mzk0NSwgOTM5NTAsIDkzOTU0LCA5Mzk1OSwgOTM5NjMsIDkzOTY3LCA5Mzk3MSwgOTM5NzYsIAotICAgIDkzOTgxLCA5Mzk4NSwgOTM5ODksIDkzOTkzLCA5Mzk5NywgOTQwMDIsIDk0MDA3LCA5NDAxMSwgOTQwMTUsIDk0MDIwLCAKLSAgICA5NDAyNCwgOTQwMjgsIDk0MDMzLCA5NDAzOCwgOTQwNDMsIDk0MDQ4LCA5NDA1MiwgOTQwNTcsIDk0MDYyLCA5NDA2NywgCi0gICAgOTQwNzEsIDk0MDc2LCA5NDA4MCwgOTQwODQsIDk0MDg4LCA5NDA5MywgOTQwOTgsIDk0MTAyLCA5NDEwNiwgOTQxMTAsIAotICAgIDk0MTE0LCA5NDExOSwgOTQxMjQsIDk0MTI4LCA5NDEzMiwgOTQxMzcsIDk0MTQxLCA5NDE0NSwgOTQxNTAsIDk0MTU1LCAKLSAgICA5NDE2MCwgOTQxNjUsIDk0MTY5LCA5NDE3NCwgOTQxNzksIDk0MTg0LCA5NDE4OCwgOTQxOTMsIDAsIDk0MTk3LCA5NDIwMSwgCi0gICAgOTQyMDYsIDk0MjExLCA5NDIxNSwgOTQyMTksIDk0MjIzLCA5NDIyNywgOTQyMzIsIDk0MjM3LCA5NDI0MSwgOTQyNDUsIAotICAgIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYzLCA5NDI2OCwgOTQyNzMsIDk0Mjc4LCA5NDI4MywgOTQyODksIDk0Mjk1LCAKLSAgICA5NDMwMSwgOTQzMDYsIDk0MzEyLCA5NDMxNywgOTQzMjIsIDk0MzI3LCA5NDMzMywgOTQzMzksIDk0MzQ0LCA5NDM0OSwgCi0gICAgOTQzNTQsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc2LCA5NDM4MSwgOTQzODcsIDk0MzkyLCA5NDM5NywgOTQ0MDMsIAotICAgIDk0NDA5LCA5NDQxNSwgOTQ0MjEsIDk0NDI2LCA5NDQzMiwgOTQ0MzgsIDk0NDQ0LCA5NDQ0OSwgOTQ0NTUsIDk0NDYwLCAKLSAgICA5NDQ2NSwgOTQ0NzAsIDk0NDc2LCA5NDQ4MiwgOTQ0ODcsIDk0NDkyLCA5NDQ5NywgOTQ1MDIsIDk0NTA4LCA5NDUxNCwgCi0gICAgOTQ1MTksIDk0NTI0LCA5NDUzMCwgOTQ1MzUsIDk0NTQwLCA5NDU0NiwgOTQ1NTIsIDk0NTU4LCA5NDU2NCwgMCwgOTQ1NjgsIAotICAgIDk0NTczLCAwLCAwLCA5NDU3OCwgMCwgMCwgOTQ1ODIsIDk0NTg3LCAwLCAwLCA5NDU5MiwgOTQ1OTYsIDk0NjAwLCA5NDYwNSwgCi0gICAgMCwgOTQ2MTAsIDk0NjE0LCA5NDYxOSwgOTQ2MjMsIDk0NjI3LCA5NDYzMiwgOTQ2MzcsIDk0NjQyLCA5NDY0NywgOTQ2NTEsIAotICAgIDk0NjU2LCA5NDY2MSwgMCwgOTQ2NjYsIDAsIDk0NjcxLCA5NDY3NSwgOTQ2NzksIDk0Njg0LCA5NDY4OSwgOTQ2OTMsIAotICAgIDk0Njk3LCAwLCA5NDcwMSwgOTQ3MDYsIDk0NzExLCA5NDcxNSwgOTQ3MTksIDk0NzI0LCA5NDcyOCwgOTQ3MzIsIDk0NzM3LCAKLSAgICA5NDc0MiwgOTQ3NDcsIDk0NzUyLCA5NDc1NywgOTQ3NjMsIDk0NzY5LCA5NDc3NSwgOTQ3ODAsIDk0Nzg2LCA5NDc5MSwgCi0gICAgOTQ3OTYsIDk0ODAxLCA5NDgwNywgOTQ4MTMsIDk0ODE4LCA5NDgyMywgOTQ4MjgsIDk0ODMzLCA5NDgzOSwgOTQ4NDUsIAotICAgIDk0ODUwLCA5NDg1NSwgOTQ4NjEsIDk0ODY2LCA5NDg3MSwgOTQ4NzcsIDk0ODgzLCA5NDg4OSwgOTQ4OTUsIDk0OTAwLCAKLSAgICA5NDkwNiwgOTQ5MTIsIDk0OTE4LCA5NDkyMywgOTQ5MjksIDk0OTM0LCA5NDkzOSwgOTQ5NDQsIDk0OTUwLCA5NDk1NiwgCi0gICAgOTQ5NjEsIDk0OTY2LCA5NDk3MSwgOTQ5NzYsIDk0OTgyLCA5NDk4OCwgOTQ5OTMsIDk0OTk4LCA5NTAwNCwgOTUwMDksIAotICAgIDk1MDE0LCA5NTAyMCwgOTUwMjYsIDk1MDMyLCA5NTAzOCwgOTUwNDIsIDAsIDk1MDQ3LCA5NTA1MiwgOTUwNTYsIDk1MDYxLCAKLSAgICAwLCAwLCA5NTA2NSwgOTUwNzAsIDk1MDc1LCA5NTA3OSwgOTUwODMsIDk1MDg3LCA5NTA5MSwgOTUwOTYsIDAsIDk1MTAxLCAKLSAgICA5NTEwNSwgOTUxMTAsIDk1MTE0LCA5NTExOCwgOTUxMjMsIDk1MTI4LCAwLCA5NTEzMywgOTUxMzcsIDk1MTQyLCA5NTE0NywgCi0gICAgOTUxNTIsIDk1MTU2LCA5NTE2MSwgOTUxNjUsIDk1MTY5LCA5NTE3MywgOTUxNzgsIDk1MTgzLCA5NTE4NywgOTUxOTEsIAotICAgIDk1MTk1LCA5NTE5OSwgOTUyMDQsIDk1MjA5LCA5NTIxMywgOTUyMTcsIDk1MjIyLCA5NTIyNiwgOTUyMzAsIDk1MjM1LCAKLSAgICA5NTI0MCwgOTUyNDUsIDk1MjUwLCA5NTI1NCwgMCwgOTUyNTksIDk1MjY0LCA5NTI2OCwgOTUyNzMsIDAsIDk1Mjc3LCAKLSAgICA5NTI4MSwgOTUyODYsIDk1MjkxLCA5NTI5NSwgMCwgOTUyOTksIDAsIDAsIDAsIDk1MzAzLCA5NTMwNywgOTUzMTIsIAotICAgIDk1MzE2LCA5NTMyMCwgOTUzMjUsIDk1MzMwLCAwLCA5NTMzNSwgOTUzMzksIDk1MzQ0LCA5NTM0OSwgOTUzNTQsIDk1MzU4LCAKLSAgICA5NTM2MywgOTUzNjcsIDk1MzcxLCA5NTM3NSwgOTUzODAsIDk1Mzg1LCA5NTM4OSwgOTUzOTMsIDk1Mzk3LCA5NTQwMSwgCi0gICAgOTU0MDYsIDk1NDExLCA5NTQxNSwgOTU0MTksIDk1NDI0LCA5NTQyOCwgOTU0MzIsIDk1NDM3LCA5NTQ0MiwgOTU0NDcsIAotICAgIDk1NDUyLCA5NTQ1NywgOTU0NjMsIDk1NDY5LCA5NTQ3NSwgOTU0ODAsIDk1NDg2LCA5NTQ5MSwgOTU0OTYsIDk1NTAxLCAKLSAgICA5NTUwNywgOTU1MTMsIDk1NTE4LCA5NTUyMywgOTU1MjgsIDk1NTMzLCA5NTUzOSwgOTU1NDUsIDk1NTUwLCA5NTU1NSwgCi0gICAgOTU1NjEsIDk1NTY2LCA5NTU3MSwgOTU1NzcsIDk1NTgzLCA5NTU4OSwgOTU1OTUsIDk1NjAwLCA5NTYwNiwgOTU2MTIsIAotICAgIDk1NjE4LCA5NTYyMywgOTU2MjksIDk1NjM0LCA5NTYzOSwgOTU2NDQsIDk1NjUwLCA5NTY1NiwgOTU2NjEsIDk1NjY2LCAKLSAgICA5NTY3MSwgOTU2NzYsIDk1NjgyLCA5NTY4OCwgOTU2OTMsIDk1Njk4LCA5NTcwNCwgOTU3MDksIDk1NzE0LCA5NTcyMCwgCi0gICAgOTU3MjYsIDk1NzMyLCA5NTczOCwgOTU3NDIsIDk1NzQ3LCA5NTc1MiwgOTU3NTcsIDk1NzYxLCA5NTc2NiwgOTU3NzAsIAotICAgIDk1Nzc0LCA5NTc3OCwgOTU3ODMsIDk1Nzg4LCA5NTc5MiwgOTU3OTYsIDk1ODAwLCA5NTgwNCwgOTU4MDksIDk1ODE0LCAKLSAgICA5NTgxOCwgOTU4MjIsIDk1ODI3LCA5NTgzMSwgOTU4MzUsIDk1ODQwLCA5NTg0NSwgOTU4NTAsIDk1ODU1LCA5NTg1OSwgCi0gICAgOTU4NjQsIDk1ODY5LCA5NTg3NCwgOTU4NzgsIDk1ODgzLCA5NTg4NywgOTU4OTEsIDk1ODk1LCA5NTkwMCwgOTU5MDUsIAotICAgIDk1OTA5LCA5NTkxMywgOTU5MTcsIDk1OTIxLCA5NTkyNiwgOTU5MzEsIDk1OTM1LCA5NTkzOSwgOTU5NDQsIDk1OTQ4LCAKLSAgICA5NTk1MiwgOTU5NTcsIDk1OTYyLCA5NTk2NywgOTU5NzIsIDk1OTc3LCA5NTk4MywgOTU5ODksIDk1OTk1LCA5NjAwMCwgCi0gICAgOTYwMDYsIDk2MDExLCA5NjAxNiwgOTYwMjEsIDk2MDI3LCA5NjAzMywgOTYwMzgsIDk2MDQzLCA5NjA0OCwgOTYwNTMsIAotICAgIDk2MDU5LCA5NjA2NSwgOTYwNzAsIDk2MDc1LCA5NjA4MSwgOTYwODYsIDk2MDkxLCA5NjA5NywgOTYxMDMsIDk2MTA5LCAKLSAgICA5NjExNSwgOTYxMjAsIDk2MTI2LCA5NjEzMiwgOTYxMzgsIDk2MTQzLCA5NjE0OSwgOTYxNTQsIDk2MTU5LCA5NjE2NCwgCi0gICAgOTYxNzAsIDk2MTc2LCA5NjE4MSwgOTYxODYsIDk2MTkxLCA5NjE5NiwgOTYyMDIsIDk2MjA4LCA5NjIxMywgOTYyMTgsIAotICAgIDk2MjI0LCA5NjIyOSwgOTYyMzQsIDk2MjQwLCA5NjI0NiwgOTYyNTIsIDk2MjU4LCA5NjI2MywgOTYyNjksIDk2Mjc1LCAKLSAgICA5NjI4MSwgOTYyODYsIDk2MjkyLCA5NjI5NywgOTYzMDIsIDk2MzA3LCA5NjMxMywgOTYzMTksIDk2MzI0LCA5NjMyOSwgCi0gICAgOTYzMzQsIDk2MzM5LCA5NjM0NSwgOTYzNTEsIDk2MzU2LCA5NjM2MSwgOTYzNjcsIDk2MzcyLCA5NjM3NywgOTYzODMsIAotICAgIDk2Mzg5LCA5NjM5NSwgOTY0MDEsIDk2NDA2LCA5NjQxMiwgOTY0MTgsIDk2NDI0LCA5NjQyOSwgOTY0MzUsIDk2NDQwLCAKLSAgICA5NjQ0NSwgOTY0NTAsIDk2NDU2LCA5NjQ2MiwgOTY0NjcsIDk2NDcyLCA5NjQ3NywgOTY0ODIsIDk2NDg4LCA5NjQ5NCwgCi0gICAgOTY0OTksIDk2NTA0LCA5NjUxMCwgOTY1MTUsIDk2NTIwLCA5NjUyNiwgOTY1MzIsIDk2NTM4LCA5NjU0NCwgOTY1NTAsIAotICAgIDk2NTU3LCA5NjU2NCwgOTY1NzEsIDk2NTc3LCA5NjU4NCwgOTY1OTAsIDk2NTk2LCA5NjYwMiwgOTY2MDksIDk2NjE2LCAKLSAgICA5NjYyMiwgOTY2MjgsIDk2NjM0LCA5NjY0MCwgOTY2NDcsIDk2NjU0LCA5NjY2MCwgOTY2NjYsIDk2NjczLCA5NjY3OSwgCi0gICAgOTY2ODUsIDk2NjkyLCA5NjY5OSwgOTY3MDYsIDk2NzEzLCA5NjcxOSwgOTY3MjYsIDk2NzMzLCA5Njc0MCwgOTY3NDYsIAotICAgIDk2NzUzLCA5Njc1OSwgOTY3NjUsIDk2NzcxLCA5Njc3OCwgOTY3ODUsIDk2NzkxLCA5Njc5NywgOTY4MDMsIDk2ODA5LCAKLSAgICA5NjgxNiwgOTY4MjMsIDk2ODI5LCA5NjgzNSwgOTY4NDIsIDk2ODQ4LCA5Njg1NCwgOTY4NjEsIDk2ODY4LCA5Njg3NSwgCi0gICAgOTY4ODIsIDk2ODg2LCA5Njg5MSwgOTY4OTYsIDk2OTAxLCA5NjkwNSwgOTY5MTAsIDk2OTE0LCA5NjkxOCwgOTY5MjIsIAotICAgIDk2OTI3LCA5NjkzMiwgOTY5MzYsIDk2OTQwLCA5Njk0NCwgOTY5NDgsIDk2OTUzLCA5Njk1OCwgOTY5NjIsIDk2OTY2LCAKLSAgICA5Njk3MSwgOTY5NzUsIDk2OTc5LCA5Njk4NCwgOTY5ODksIDk2OTk0LCA5Njk5OSwgOTcwMDMsIDk3MDA4LCA5NzAxMywgCi0gICAgOTcwMTgsIDk3MDIyLCA5NzAyNywgOTcwMzEsIDk3MDM1LCA5NzAzOSwgOTcwNDQsIDk3MDQ5LCA5NzA1MywgOTcwNTcsIAotICAgIDk3MDYxLCA5NzA2NSwgOTcwNzAsIDk3MDc1LCA5NzA3OSwgOTcwODMsIDk3MDg4LCA5NzA5MiwgOTcwOTYsIDk3MTAxLCAKLSAgICA5NzEwNiwgOTcxMTEsIDk3MTE2LCA5NzEyMiwgMCwgMCwgOTcxMjksIDk3MTM0LCA5NzEzOSwgOTcxNDQsIDk3MTQ5LCAKLSAgICA5NzE1NCwgOTcxNTksIDk3MTY0LCA5NzE2OSwgOTcxNzQsIDk3MTc5LCA5NzE4NCwgOTcxODksIDk3MTk0LCA5NzE5OSwgCi0gICAgOTcyMDQsIDk3MjA5LCA5NzIxNCwgOTcyMjAsIDk3MjI1LCA5NzIzMCwgOTcyMzUsIDk3MjQwLCA5NzI0NSwgOTcyNTAsIAotICAgIDk3MjU1LCA5NzI1OSwgOTcyNjQsIDk3MjY5LCA5NzI3NCwgOTcyNzksIDk3Mjg0LCA5NzI4OSwgOTcyOTQsIDk3Mjk5LCAKLSAgICA5NzMwNCwgOTczMDksIDk3MzE0LCA5NzMxOSwgOTczMjQsIDk3MzI5LCA5NzMzNCwgOTczMzksIDk3MzQ0LCA5NzM1MCwgCi0gICAgOTczNTUsIDk3MzYwLCA5NzM2NSwgOTczNzAsIDk3Mzc1LCA5NzM4MCwgOTczODUsIDk3MzkxLCA5NzM5NiwgOTc0MDEsIAotICAgIDk3NDA2LCA5NzQxMSwgOTc0MTYsIDk3NDIxLCA5NzQyNiwgOTc0MzEsIDk3NDM2LCA5NzQ0MSwgOTc0NDYsIDk3NDUxLCAKLSAgICA5NzQ1NiwgOTc0NjEsIDk3NDY2LCA5NzQ3MSwgOTc0NzYsIDk3NDgxLCA5NzQ4NiwgOTc0OTEsIDk3NDk2LCA5NzUwMSwgCi0gICAgOTc1MDYsIDk3NTEyLCA5NzUxNywgOTc1MjIsIDk3NTI3LCA5NzUzMiwgOTc1MzcsIDk3NTQyLCA5NzU0NywgOTc1NTEsIAotICAgIDk3NTU2LCA5NzU2MSwgOTc1NjYsIDk3NTcxLCA5NzU3NiwgOTc1ODEsIDk3NTg2LCA5NzU5MSwgOTc1OTYsIDk3NjAxLCAKLSAgICA5NzYwNiwgOTc2MTEsIDk3NjE2LCA5NzYyMSwgOTc2MjYsIDk3NjMxLCA5NzYzNiwgOTc2NDIsIDk3NjQ3LCA5NzY1MiwgCi0gICAgOTc2NTcsIDk3NjYyLCA5NzY2NywgOTc2NzIsIDk3Njc3LCA5NzY4MywgOTc2ODgsIDk3NjkzLCA5NzY5OCwgOTc3MDMsIAotICAgIDk3NzA4LCA5NzcxMywgOTc3MTksIDk3NzI1LCA5NzczMSwgOTc3MzcsIDk3NzQzLCA5Nzc0OSwgOTc3NTUsIDk3NzYxLCAKLSAgICA5Nzc2NywgOTc3NzMsIDk3Nzc5LCA5Nzc4NSwgOTc3OTEsIDk3Nzk3LCA5NzgwMywgOTc4MDksIDk3ODE1LCA5NzgyMiwgCi0gICAgOTc4MjgsIDk3ODM0LCA5Nzg0MCwgOTc4NDYsIDk3ODUyLCA5Nzg1OCwgOTc4NjQsIDk3ODY5LCA5Nzg3NSwgOTc4ODEsIAotICAgIDk3ODg3LCA5Nzg5MywgOTc4OTksIDk3OTA1LCA5NzkxMSwgOTc5MTcsIDk3OTIzLCA5NzkyOSwgOTc5MzUsIDk3OTQxLCAKLSAgICA5Nzk0NywgOTc5NTMsIDk3OTU5LCA5Nzk2NSwgOTc5NzEsIDk3OTc4LCA5Nzk4NCwgOTc5OTAsIDk3OTk2LCA5ODAwMiwgCi0gICAgOTgwMDgsIDk4MDE0LCA5ODAyMCwgOTgwMjcsIDk4MDMzLCA5ODAzOSwgOTgwNDUsIDk4MDUxLCA5ODA1NywgOTgwNjMsIAotICAgIDk4MDY5LCA5ODA3NSwgOTgwODEsIDk4MDg3LCA5ODA5MywgOTgwOTksIDk4MTA1LCA5ODExMSwgOTgxMTcsIDk4MTIzLCAKLSAgICA5ODEyOSwgOTgxMzUsIDk4MTQxLCA5ODE0NywgOTgxNTMsIDk4MTU5LCA5ODE2NSwgOTgxNzIsIDk4MTc4LCA5ODE4NCwgCi0gICAgOTgxOTAsIDk4MTk2LCA5ODIwMiwgOTgyMDgsIDk4MjE0LCA5ODIxOSwgOTgyMjUsIDk4MjMxLCA5ODIzNywgOTgyNDMsIAotICAgIDk4MjQ5LCA5ODI1NSwgOTgyNjEsIDk4MjY3LCA5ODI3MywgOTgyNzksIDk4Mjg1LCA5ODI5MSwgOTgyOTcsIDk4MzAzLCAKLSAgICA5ODMwOSwgOTgzMTUsIDk4MzIxLCA5ODMyOCwgOTgzMzQsIDk4MzQwLCA5ODM0NiwgOTgzNTIsIDk4MzU4LCA5ODM2NCwgCi0gICAgOTgzNzAsIDk4Mzc3LCA5ODM4MywgOTgzODksIDk4Mzk1LCA5ODQwMSwgOTg0MDcsIDk4NDEzLCA5ODQyMCwgOTg0MjcsIAotICAgIDk4NDM0LCA5ODQ0MSwgOTg0NDgsIDk4NDU1LCA5ODQ2MiwgOTg0NjksIDk4NDc2LCA5ODQ4MywgOTg0OTAsIDk4NDk3LCAKLSAgICA5ODUwNCwgOTg1MTEsIDk4NTE4LCA5ODUyNSwgOTg1MzIsIDk4NTQwLCA5ODU0NywgOTg1NTQsIDk4NTYxLCA5ODU2OCwgCi0gICAgOTg1NzUsIDk4NTgyLCA5ODU4OSwgOTg1OTUsIDk4NjAyLCA5ODYwOSwgOTg2MTYsIDk4NjIzLCA5ODYzMCwgOTg2MzcsIAotICAgIDk4NjQ0LCA5ODY1MSwgOTg2NTgsIDk4NjY1LCA5ODY3MiwgOTg2NzksIDk4Njg2LCA5ODY5MywgOTg3MDAsIDk4NzA3LCAKLSAgICA5ODcxNCwgOTg3MjIsIDk4NzI5LCA5ODczNiwgOTg3NDMsIDk4NzUwLCA5ODc1NywgOTg3NjQsIDk4NzcxLCA5ODc3OSwgCi0gICAgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDcsIDk4ODE0LCA5ODgyMSwgOTg4MjYsIDAsIDAsIDk4ODMxLCA5ODgzNiwgCi0gICAgOTg4NDAsIDk4ODQ0LCA5ODg0OCwgOTg4NTIsIDk4ODU2LCA5ODg2MCwgOTg4NjQsIDk4ODY4LCA5ODg3MiwgOTg4NzcsIAotICAgIDk4ODgxLCA5ODg4NSwgOTg4ODksIDk4ODkzLCA5ODg5NywgOTg5MDEsIDk4OTA1LCA5ODkwOSwgOTg5MTMsIDk4OTE4LCAKLSAgICA5ODkyMiwgOTg5MjYsIDk4OTMwLCA5ODkzNCwgOTg5MzgsIDk4OTQyLCA5ODk0NiwgOTg5NTAsIDk4OTU0LCA5ODk2MCwgCi0gICAgOTg5NjUsIDk4OTcwLCA5ODk3NSwgOTg5ODAsIDk4OTg1LCA5ODk5MCwgOTg5OTUsIDk5MDAwLCA5OTAwNSwgOTkwMTAsIAotICAgIDk5MDE0LCA5OTAxOCwgOTkwMjIsIDk5MDI2LCA5OTAzMCwgOTkwMzQsIDk5MDM4LCA5OTA0MiwgOTkwNDYsIDk5MDUzLCAKLSAgICA5OTA2MCwgOTkwNjcsIDk5MDc0LCA5OTA4MSwgOTkwODgsIDk5MDk0LCA5OTEwMSwgOTkxMDgsIDk5MTE1LCA5OTEyMywgCi0gICAgOTkxMzEsIDk5MTM5LCA5OTE0NywgOTkxNTUsIDk5MTYzLCA5OTE3MCwgOTkxNzcsIDk5MTg0LCA5OTE5MiwgOTkyMDAsIAotICAgIDk5MjA4LCA5OTIxNiwgOTkyMjQsIDk5MjMyLCA5OTIzOSwgOTkyNDYsIDk5MjUzLCA5OTI2MSwgOTkyNjksIDk5Mjc3LCAKLSAgICA5OTI4NSwgOTkyOTMsIDk5MzAxLCA5OTMwNiwgOTkzMTEsIDk5MzE2LCA5OTMyMSwgOTkzMjYsIDk5MzMxLCA5OTMzNiwgCi0gICAgOTkzNDEsIDk5MzQ2LCAwLCAwLCAwLCAwLCA5OTM1MSwgOTkzNTYsIDk5MzYwLCA5OTM2NCwgOTkzNjgsIDk5MzcyLCAKLSAgICA5OTM3NiwgOTkzODAsIDk5Mzg0LCA5OTM4OCwgOTkzOTIsIDk5Mzk2LCA5OTQwMCwgOTk0MDQsIDk5NDA4LCA5OTQxMiwgCi0gICAgOTk0MTYsIDk5NDIwLCA5OTQyNCwgOTk0MjgsIDk5NDMyLCA5OTQzNiwgOTk0NDAsIDk5NDQ0LCA5OTQ0OCwgOTk0NTIsIAotICAgIDk5NDU2LCA5OTQ2MCwgOTk0NjQsIDk5NDY4LCA5OTQ3MiwgOTk0NzYsIDk5NDgwLCA5OTQ4NCwgOTk0ODgsIDk5NDkyLCAKLSAgICA5OTQ5NiwgOTk1MDAsIDk5NTA0LCA5OTUwOCwgOTk1MTIsIDk5NTE2LCA5OTUyMCwgOTk1MjQsIDk5NTI4LCA5OTUzMiwgCi0gICAgOTk1MzYsIDk5NTQwLCA5OTU0NCwgOTk1NDgsIDk5NTUyLCA5OTU1NywgOTk1NjEsIDk5NTY1LCA5OTU2OSwgOTk1NzMsIAotICAgIDk5NTc3LCA5OTU4MSwgOTk1ODUsIDk5NTg5LCA5OTU5MywgOTk1OTcsIDk5NjAxLCA5OTYwNSwgOTk2MDksIDk5NjEzLCAKLSAgICA5OTYxNywgOTk2MjEsIDk5NjI1LCA5OTYyOSwgOTk2MzMsIDk5NjM3LCA5OTY0MSwgOTk2NDUsIDk5NjQ5LCA5OTY1MywgCi0gICAgOTk2NTcsIDk5NjYxLCA5OTY2NSwgOTk2NjksIDk5NjczLCA5OTY3NywgOTk2ODEsIDk5Njg1LCA5OTY4OSwgOTk2OTMsIAotICAgIDk5Njk3LCA5OTcwMSwgOTk3MDUsIDk5NzA5LCA5OTcxMywgOTk3MTcsIDk5NzIxLCA5OTcyNSwgOTk3MjksIDk5NzMzLCAKLSAgICA5OTczNywgOTk3NDEsIDk5NzQ1LCA5OTc0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTk3NTMsIAotICAgIDk5NzU3LCA5OTc2MSwgOTk3NjUsIDk5NzY5LCA5OTc3MywgOTk3NzcsIDk5NzgxLCA5OTc4NSwgOTk3ODksIDk5NzkzLCAKLSAgICA5OTc5NywgOTk4MDEsIDk5ODA1LCA5OTgwOSwgOTk4MTMsIDk5ODE3LCA5OTgyMSwgOTk4MjUsIDk5ODI5LCA5OTgzMywgCi0gICAgOTk4MzcsIDk5ODQxLCA5OTg0NSwgOTk4NDksIDk5ODUzLCA5OTg1NywgOTk4NjEsIDk5ODY1LCA5OTg2OSwgOTk4NzMsIAotICAgIDk5ODc3LCA5OTg4MSwgOTk4ODUsIDk5ODg5LCA5OTg5MywgOTk4OTcsIDk5OTAxLCA5OTkwNSwgOTk5MDksIDk5OTEzLCAKLSAgICA5OTkxNywgOTk5MjEsIDk5OTI1LCA5OTkyOSwgOTk5MzMsIDk5OTM3LCA5OTk0MSwgOTk5NDUsIDk5OTQ5LCA5OTk1MywgCi0gICAgOTk5NTcsIDk5OTYxLCA5OTk2NSwgOTk5NjksIDk5OTczLCA5OTk3NywgOTk5ODEsIDk5OTg1LCA5OTk4OSwgOTk5OTMsIAotICAgIDk5OTk3LCAxMDAwMDEsIDEwMDAwNSwgMTAwMDA5LCAxMDAwMTMsIDEwMDAxNywgMTAwMDIxLCAxMDAwMjUsIDEwMDAyOSwgCi0gICAgMTAwMDMzLCAxMDAwMzcsIDEwMDA0MSwgMTAwMDQ1LCAxMDAwNDksIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgCi0gICAgMTAwMDY5LCAxMDAwNzMsIDEwMDA3NywgMTAwMDgxLCAxMDAwODUsIDEwMDA4OSwgMTAwMDkzLCAxMDAwOTcsIDEwMDEwMSwgCi0gICAgMTAwMTA1LCAxMDAxMDksIDEwMDExMywgMTAwMTE3LCAxMDAxMjEsIDEwMDEyNSwgMTAwMTI5LCAxMDAxMzMsIDEwMDEzNywgCi0gICAgMTAwMTQxLCAxMDAxNDUsIDEwMDE0OSwgMTAwMTUzLCAxMDAxNTcsIDEwMDE2MSwgMTAwMTY1LCAxMDAxNjksIDEwMDE3MywgCi0gICAgMTAwMTc3LCAxMDAxODEsIDEwMDE4NSwgMTAwMTg5LCAxMDAxOTMsIDEwMDE5NywgMTAwMjAxLCAxMDAyMDUsIDEwMDIwOSwgCi0gICAgMTAwMjEzLCAxMDAyMTcsIDEwMDIyMSwgMTAwMjI1LCAxMDAyMjksIDEwMDIzMywgMTAwMjM3LCAxMDAyNDEsIDEwMDI0NSwgCi0gICAgMTAwMjQ5LCAxMDAyNTMsIDEwMDI1NywgMTAwMjYxLCAxMDAyNjUsIDEwMDI2OSwgMTAwMjczLCAxMDAyNzcsIDEwMDI4MSwgCi0gICAgMTAwMjg1LCAxMDAyODksIDEwMDI5MywgMTAwMjk3LCAxMDAzMDEsIDEwMDMwNSwgMTAwMzA5LCAxMDAzMTMsIDEwMDMxNywgCi0gICAgMTAwMzIxLCAxMDAzMjUsIDEwMDMyOSwgMTAwMzMzLCAxMDAzMzcsIDEwMDM0MSwgMTAwMzQ1LCAxMDAzNDksIDEwMDM1MywgCi0gICAgMTAwMzU3LCAxMDAzNjEsIDEwMDM2NSwgMTAwMzY5LCAxMDAzNzMsIDEwMDM3NywgMTAwMzgxLCAxMDAzODUsIDEwMDM4OSwgCi0gICAgMTAwMzkzLCAxMDAzOTcsIDEwMDQwMSwgMTAwNDA1LCAxMDA0MDksIDEwMDQxMywgMTAwNDE3LCAxMDA0MjEsIDEwMDQyNSwgCi0gICAgMTAwNDI5LCAxMDA0MzMsIDEwMDQzNywgMTAwNDQxLCAxMDA0NDUsIDEwMDQ0OSwgMTAwNDUzLCAxMDA0NTcsIDEwMDQ2MSwgCi0gICAgMTAwNDY1LCAxMDA0NjksIDEwMDQ3MywgMTAwNDc3LCAxMDA0ODEsIDEwMDQ4NSwgMTAwNDg5LCAxMDA0OTMsIDEwMDQ5NywgCi0gICAgMTAwNTAxLCAxMDA1MDUsIDEwMDUwOSwgMTAwNTEzLCAxMDA1MTcsIDEwMDUyMSwgMTAwNTI1LCAxMDA1MjksIDEwMDUzMywgCi0gICAgMTAwNTM3LCAxMDA1NDEsIDEwMDU0NSwgMTAwNTQ5LCAxMDA1NTMsIDEwMDU1NywgMTAwNTYxLCAxMDA1NjUsIDEwMDU2OSwgCi0gICAgMTAwNTczLCAxMDA1NzcsIDEwMDU4MSwgMTAwNTg1LCAxMDA1ODksIDEwMDU5MywgMTAwNTk3LCAxMDA2MDEsIDEwMDYwNSwgCi0gICAgMTAwNjA5LCAxMDA2MTMsIDEwMDYxNywgMTAwNjIxLCAxMDA2MjUsIDEwMDYyOSwgMTAwNjMzLCAxMDA2MzcsIDEwMDY0MSwgCi0gICAgMTAwNjQ1LCAxMDA2NDksIDEwMDY1MywgMTAwNjU3LCAxMDA2NjEsIDEwMDY2NSwgMTAwNjY5LCAxMDA2NzMsIDEwMDY3NywgCi0gICAgMTAwNjgxLCAxMDA2ODUsIDEwMDY4OSwgMTAwNjkzLCAxMDA2OTcsIDEwMDcwMSwgMTAwNzA1LCAxMDA3MDksIDEwMDcxMywgCi0gICAgMTAwNzE3LCAxMDA3MjEsIDEwMDcyNSwgMTAwNzI5LCAxMDA3MzMsIDEwMDczNywgMTAwNzQxLCAxMDA3NDUsIDEwMDc0OSwgCi0gICAgMTAwNzUzLCAxMDA3NTcsIDEwMDc2MSwgMTAwNzY1LCAxMDA3NjksIDEwMDc3MywgMTAwNzc3LCAxMDA3ODEsIDEwMDc4NSwgCi0gICAgMTAwNzg5LCAxMDA3OTMsIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAxMDA4MTcsIDEwMDgyMSwgCi0gICAgMTAwODI1LCAxMDA4MjksIDEwMDgzMywgMTAwODM3LCAxMDA4NDEsIDEwMDg0NSwgMTAwODQ5LCAxMDA4NTMsIDEwMDg1NywgCi0gICAgMTAwODYxLCAxMDA4NjUsIDEwMDg2OSwgMTAwODczLCAxMDA4NzcsIDEwMDg4MSwgMTAwODg1LCAxMDA4ODksIDEwMDg5MywgCi0gICAgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTA5LCAxMDA5MTMsIDEwMDkxNywgMTAwOTIxLCAxMDA5MjUsIDEwMDkyOSwgCi0gICAgMTAwOTMzLCAxMDA5MzcsIDEwMDk0MSwgMTAwOTQ1LCAxMDA5NDksIDEwMDk1MywgMTAwOTU3LCAxMDA5NjEsIDEwMDk2NSwgCi0gICAgMTAwOTY5LCAxMDA5NzMsIDEwMDk3NywgMTAwOTgxLCAxMDA5ODUsIDEwMDk4OSwgMTAwOTkzLCAxMDA5OTcsIDEwMTAwMSwgCi0gICAgMTAxMDA1LCAxMDEwMDksIDEwMTAxMywgMTAxMDE3LCAxMDEwMjEsIDEwMTAyNSwgMTAxMDI5LCAxMDEwMzMsIDEwMTAzNywgCi0gICAgMTAxMDQxLCAxMDEwNDUsIDEwMTA0OSwgMTAxMDUzLCAxMDEwNTcsIDEwMTA2MSwgMTAxMDY1LCAxMDEwNjksIDEwMTA3MywgCi0gICAgMTAxMDc3LCAxMDEwODEsIDEwMTA4NSwgMTAxMDg5LCAxMDEwOTMsIDEwMTA5NywgMTAxMTAxLCAxMDExMDUsIDEwMTEwOSwgCi0gICAgMTAxMTEzLCAxMDExMTcsIDEwMTEyMSwgMTAxMTI1LCAxMDExMjksIDEwMTEzMywgMTAxMTM3LCAxMDExNDEsIDEwMTE0NSwgCi0gICAgMTAxMTQ5LCAxMDExNTMsIDEwMTE1NywgMTAxMTYxLCAxMDExNjUsIDEwMTE2OSwgMTAxMTczLCAxMDExNzcsIDEwMTE4MSwgCi0gICAgMTAxMTg1LCAxMDExODksIDEwMTE5MywgMTAxMTk3LCAxMDEyMDEsIDEwMTIwNSwgMTAxMjA5LCAxMDEyMTMsIDEwMTIxNywgCi0gICAgMTAxMjIxLCAxMDEyMjUsIDEwMTIyOSwgMTAxMjMzLCAxMDEyMzcsIDEwMTI0MSwgMTAxMjQ1LCAxMDEyNDksIDEwMTI1MywgCi0gICAgMTAxMjU3LCAxMDEyNjEsIDEwMTI2NSwgMTAxMjY5LCAxMDEyNzMsIDEwMTI3NywgMTAxMjgxLCAxMDEyODUsIDEwMTI4OSwgCi0gICAgMTAxMjkzLCAxMDEyOTcsIDEwMTMwMSwgMTAxMzA1LCAxMDEzMDksIDEwMTMxMywgMTAxMzE3LCAxMDEzMjEsIDEwMTMyNSwgCi0gICAgMTAxMzI5LCAxMDEzMzMsIDEwMTMzNywgMTAxMzQxLCAxMDEzNDUsIDEwMTM0OSwgMTAxMzUzLCAxMDEzNTcsIDEwMTM2MSwgCi0gICAgMTAxMzY1LCAxMDEzNjksIDEwMTM3MywgMTAxMzc3LCAxMDEzODEsIDEwMTM4NSwgMTAxMzg5LCAxMDEzOTMsIDEwMTM5NywgCi0gICAgMTAxNDAxLCAxMDE0MDUsIDEwMTQwOSwgMTAxNDEzLCAxMDE0MTcsIDEwMTQyMSwgMTAxNDI1LCAxMDE0MjksIDEwMTQzMywgCi0gICAgMTAxNDM3LCAxMDE0NDEsIDEwMTQ0NSwgMTAxNDQ5LCAxMDE0NTMsIDEwMTQ1NywgMTAxNDYxLCAxMDE0NjUsIDEwMTQ2OSwgCi0gICAgMTAxNDczLCAxMDE0NzcsIDEwMTQ4MSwgMTAxNDg1LCAxMDE0ODksIDEwMTQ5MywgMTAxNDk3LCAxMDE1MDEsIDEwMTUwNSwgCi0gICAgMTAxNTA5LCAxMDE1MTMsIDEwMTUxNywgMTAxNTIxLCAxMDE1MjUsIDEwMTUyOSwgMTAxNTMzLCAxMDE1MzcsIDEwMTU0MSwgCi0gICAgMTAxNTQ1LCAxMDE1NDksIDEwMTU1MywgMTAxNTU3LCAxMDE1NjEsIDEwMTU2NSwgMTAxNTY5LCAxMDE1NzMsIDEwMTU3NywgCi0gICAgMTAxNTgxLCAxMDE1ODUsIDEwMTU4OSwgMTAxNTkzLCAxMDE1OTcsIDEwMTYwMSwgMTAxNjA1LCAxMDE2MDksIDEwMTYxMywgCi0gICAgMTAxNjE3LCAxMDE2MjEsIDEwMTYyNSwgMTAxNjI5LCAxMDE2MzMsIDEwMTYzNywgMTAxNjQxLCAxMDE2NDUsIDEwMTY0OSwgCi0gICAgMTAxNjUzLCAxMDE2NTcsIDEwMTY2MSwgMTAxNjY1LCAxMDE2NjksIDEwMTY3MywgMTAxNjc3LCAxMDE2ODEsIDEwMTY4NSwgCi0gICAgMTAxNjg5LCAxMDE2OTMsIDEwMTY5NywgMTAxNzAxLCAxMDE3MDUsIDEwMTcwOSwgMTAxNzEzLCAxMDE3MTcsIDEwMTcyMSwgCi0gICAgMTAxNzI1LCAxMDE3MjksIDEwMTczMywgMTAxNzM3LCAxMDE3NDEsIDEwMTc0NSwgMTAxNzQ5LCAxMDE3NTMsIDEwMTc1NywgCi0gICAgMTAxNzYxLCAxMDE3NjUsIDEwMTc2OSwgMTAxNzczLCAxMDE3NzcsIDEwMTc4MSwgMTAxNzg1LCAxMDE3ODksIDEwMTc5MywgCi0gICAgMTAxNzk3LCAxMDE4MDEsIDEwMTgwNSwgMTAxODA5LCAxMDE4MTMsIDEwMTgxNywgMTAxODIxLCAxMDE4MjUsIDEwMTgyOSwgCi0gICAgMTAxODMzLCAxMDE4MzcsIDEwMTg0MSwgMTAxODQ1LCAxMDE4NDksIDEwMTg1MywgMTAxODU3LCAxMDE4NjEsIDEwMTg2NSwgCi0gICAgMTAxODY5LCAxMDE4NzMsIDEwMTg3NywgMTAxODgxLCAxMDE4ODUsIDEwMTg4OSwgMTAxODkzLCAxMDE4OTcsIDEwMTkwMSwgCi0gICAgMTAxOTA1LCAxMDE5MDksIDEwMTkxMywgMTAxOTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDE5MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMTkyNSwgCi0gICAgMTAxOTI4LCAxMDE5MzIsIDEwMTkzNiwgMTAxOTM5LCAxMDE5NDMsIDEwMTk0NywgMTAxOTUwLCAxMDE5NTMsIDEwMTk1NywgCi0gICAgMTAxOTYxLCAxMDE5NjQsIDEwMTk2NywgMTAxOTcwLCAxMDE5NzMsIDEwMTk3OCwgMTAxOTgxLCAxMDE5ODUsIDEwMTk4OCwgCi0gICAgMTAxOTkxLCAxMDE5OTQsIDEwMTk5NywgMTAyMDAwLCAxMDIwMDMsIDEwMjAwNiwgMTAyMDA5LCAxMDIwMTIsIDEwMjAxNSwgCi0gICAgMTAyMDE4LCAxMDIwMjIsIDEwMjAyNiwgMTAyMDMwLCAxMDIwMzQsIDEwMjAzOSwgMTAyMDQ0LCAxMDIwNTAsIDEwMjA1NiwgCi0gICAgMTAyMDYyLCAxMDIwNjcsIDEwMjA3MywgMTAyMDc4LCAxMDIwODMsIDEwMjA4OCwgMTAyMDk0LCAxMDIxMDAsIDEwMjEwNSwgCi0gICAgMTAyMTEwLCAxMDIxMTUsIDEwMjEyMCwgMTAyMTI2LCAxMDIxMzIsIDEwMjEzNywgMTAyMTQyLCAxMDIxNDgsIDEwMjE1MywgCi0gICAgMTAyMTU4LCAxMDIxNjQsIDEwMjE3MCwgMTAyMTc2LCAxMDIxODIsIDEwMjE4NiwgMTAyMTkxLCAxMDIxOTUsIDEwMjIwMCwgCi0gICAgMTAyMjA0LCAxMDIyMDksIDEwMjIxNCwgMTAyMjIwLCAxMDIyMjYsIDEwMjIzMiwgMTAyMjM3LCAxMDIyNDMsIDEwMjI0OCwgCi0gICAgMTAyMjUzLCAxMDIyNTgsIDEwMjI2NCwgMTAyMjcwLCAxMDIyNzUsIDEwMjI4MCwgMTAyMjg1LCAxMDIyOTAsIDEwMjI5NiwgCi0gICAgMTAyMzAyLCAxMDIzMDcsIDEwMjMxMiwgMTAyMzE4LCAxMDIzMjMsIDEwMjMyOCwgMTAyMzM0LCAxMDIzNDAsIDEwMjM0NiwgCi0gICAgMTAyMzUyLCAxMDIzNTcsIDEwMjM2MSwgMTAyMzY2LCAxMDIzNjgsIDEwMjM3MiwgMTAyMzc1LCAxMDIzNzgsIDEwMjM4MSwgCi0gICAgMTAyMzg0LCAxMDIzODcsIDEwMjM5MCwgMTAyMzkzLCAxMDIzOTYsIDEwMjM5OSwgMTAyNDAyLCAxMDI0MDUsIDEwMjQwOCwgCi0gICAgMTAyNDExLCAxMDI0MTQsIDEwMjQxNywgMTAyNDIwLCAxMDI0MjMsIDEwMjQyNiwgMTAyNDI5LCAxMDI0MzIsIDEwMjQzNSwgCi0gICAgMTAyNDM4LCAxMDI0NDEsIDEwMjQ0NCwgMTAyNDQ3LCAxMDI0NTAsIDEwMjQ1MywgMTAyNDU2LCAxMDI0NTksIDEwMjQ2MiwgCi0gICAgMTAyNDY1LCAxMDI0NjgsIDEwMjQ3MSwgMTAyNDc0LCAxMDI0NzcsIDEwMjQ4MCwgMTAyNDgzLCAxMDI0ODYsIDEwMjQ4OSwgCi0gICAgMTAyNDkyLCAxMDI0OTUsIDEwMjQ5OCwgMTAyNTAxLCAxMDI1MDQsIDEwMjUwNywgMTAyNTEwLCAxMDI1MTMsIDEwMjUxNiwgCi0gICAgMTAyNTE5LCAxMDI1MjIsIDEwMjUyNSwgMTAyNTI4LCAxMDI1MzEsIDEwMjUzNCwgMTAyNTM3LCAxMDI1NDAsIDEwMjU0MywgCi0gICAgMTAyNTQ2LCAxMDI1NDksIDEwMjU1MiwgMTAyNTU1LCAxMDI1NTgsIDEwMjU2MSwgMTAyNTY0LCAxMDI1NjcsIDEwMjU3MCwgCi0gICAgMTAyNTczLCAxMDI1NzYsIDEwMjU3OSwgMTAyNTgyLCAxMDI1ODUsIDEwMjU4OCwgMTAyNTkxLCAxMDI1OTQsIDEwMjU5NywgCi0gICAgMTAyNjAwLCAxMDI2MDMsIDEwMjYwNiwgMTAyNjA5LCAxMDI2MTIsIDEwMjYxNSwgMTAyNjE4LCAxMDI2MjEsIDEwMjYyNCwgCi0gICAgMTAyNjI3LCAxMDI2MzAsIDEwMjYzMywgMTAyNjM2LCAxMDI2MzksIDEwMjY0MiwgMTAyNjQ1LCAxMDI2NDgsIDEwMjY1MSwgCi0gICAgMTAyNjU0LCAxMDI2NTcsIDEwMjY2MCwgMTAyNjYzLCAxMDI2NjYsIDEwMjY2OSwgMTAyNjcyLCAxMDI2NzUsIDEwMjY3OCwgCi0gICAgMTAyNjgxLCAxMDI2ODQsIDEwMjY4NywgMTAyNjkwLCAxMDI2OTMsIDEwMjY5NiwgMTAyNjk5LCAxMDI3MDIsIDEwMjcwNSwgCi0gICAgMTAyNzA4LCAxMDI3MTEsIDEwMjcxNCwgMTAyNzE3LCAxMDI3MjAsIDEwMjcyMywgMTAyNzI2LCAxMDI3MjksIDEwMjczMiwgCi0gICAgMTAyNzM1LCAxMDI3MzgsIDEwMjc0MSwgMTAyNzQ0LCAxMDI3NDcsIDEwMjc1MCwgMTAyNzUzLCAxMDI3NTYsIDEwMjc1OSwgCi0gICAgMTAyNzYyLCAxMDI3NjUsIDEwMjc2OCwgMTAyNzcxLCAxMDI3NzQsIDEwMjc3NywgMTAyNzgwLCAxMDI3ODMsIDEwMjc4NiwgCi0gICAgMTAyNzg5LCAxMDI3OTIsIDEwMjc5NSwgMTAyNzk4LCAxMDI4MDEsIDEwMjgwNCwgMTAyODA3LCAxMDI4MTAsIDEwMjgxMywgCi0gICAgMTAyODE2LCAxMDI4MTksIDEwMjgyMiwgMTAyODI1LCAxMDI4MjgsIDEwMjgzMSwgMTAyODM0LCAxMDI4MzcsIDEwMjg0MCwgCi0gICAgMTAyODQzLCAxMDI4NDYsIDEwMjg0OSwgMTAyODUyLCAxMDI4NTUsIDEwMjg1OCwgMTAyODYxLCAxMDI4NjQsIDEwMjg2NywgCi0gICAgMTAyODcwLCAxMDI4NzMsIDEwMjg3NiwgMTAyODc5LCAxMDI4ODIsIDEwMjg4NSwgMTAyODg4LCAxMDI4OTEsIDEwMjg5NCwgCi0gICAgMTAyODk3LCAxMDI5MDAsIDEwMjkwMywgMTAyOTA2LCAxMDI5MDksIDEwMjkxMiwgMTAyOTE1LCAxMDI5MTgsIDEwMjkyMSwgCi0gICAgMTAyOTI0LCAxMDI5MjcsIDEwMjkzMCwgMTAyOTMzLCAxMDI5MzYsIDEwMjkzOSwgMTAyOTQyLCAxMDI5NDUsIDEwMjk0OCwgCi0gICAgMTAyOTUxLCAxMDI5NTQsIDEwMjk1NywgMTAyOTYwLCAxMDI5NjMsIDEwMjk2NiwgMTAyOTY5LCAxMDI5NzIsIDEwMjk3NSwgCi0gICAgMTAyOTc4LCAxMDI5ODEsIDEwMjk4NCwgMTAyOTg3LCAxMDI5OTAsIDEwMjk5MywgMTAyOTk2LCAxMDI5OTksIDEwMzAwMiwgCi0gICAgMTAzMDA1LCAxMDMwMDgsIDEwMzAxMSwgMTAzMDE0LCAxMDMwMTcsIDEwMzAyMCwgMTAzMDIzLCAxMDMwMjYsIDEwMzAyOSwgCi0gICAgMTAzMDMyLCAxMDMwMzUsIDEwMzAzOCwgMTAzMDQxLCAxMDMwNDQsIDEwMzA0NywgMTAzMDUwLCAxMDMwNTMsIDEwMzA1NiwgCi0gICAgMTAzMDU5LCAxMDMwNjIsIDEwMzA2NSwgMTAzMDY4LCAxMDMwNzEsIDEwMzA3NCwgMTAzMDc3LCAxMDMwODAsIDEwMzA4MywgCi0gICAgMTAzMDg2LCAxMDMwODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExNDkyMiwgMTE0OTI1LCAxMTQ5MjksIDExNDkzMywgMTE0OTM2LCAxMTQ5NDAsIDExNDk0NCwgMTE0OTQ3LCAKKyAgICAxMTQ5NTAsIDExNDk1NCwgMTE0OTU4LCAxMTQ5NjEsIDExNDk2NCwgMTE0OTY3LCAxMTQ5NzAsIDExNDk3NSwgMTE0OTc4LCAKKyAgICAxMTQ5ODIsIDExNDk4NSwgMTE0OTg4LCAxMTQ5OTEsIDExNDk5NCwgMTE0OTk3LCAxMTUwMDAsIDExNTAwMywgMTE1MDA2LCAKKyAgICAxMTUwMDksIDExNTAxMiwgMTE1MDE1LCAxMTUwMTksIDExNTAyMywgMTE1MDI3LCAxMTUwMzEsIDExNTAzNiwgMTE1MDQxLCAKKyAgICAxMTUwNDcsIDExNTA1MywgMTE1MDU5LCAxMTUwNjQsIDExNTA3MCwgMTE1MDc2LCAxMTUwODIsIDExNTA4NywgMTE1MDkzLCAKKyAgICAxMTUwOTksIDExNTEwNCwgMTE1MTA5LCAxMTUxMTQsIDExNTExOSwgMTE1MTI1LCAxMTUxMzEsIDExNTEzNiwgMTE1MTQxLCAKKyAgICAxMTUxNDcsIDExNTE1MiwgMTE1MTU4LCAxMTUxNjQsIDExNTE3MCwgMTE1MTc2LCAxMTUxODIsIDExNTE4NiwgMTE1MTkxLCAKKyAgICAxMTUxOTUsIDExNTIwMCwgMTE1MjA0LCAxMTUyMDksIDExNTIxNCwgMTE1MjIwLCAxMTUyMjYsIDExNTIzMiwgMTE1MjM3LCAKKyAgICAxMTUyNDMsIDExNTI0OSwgMTE1MjU1LCAxMTUyNjAsIDExNTI2NiwgMTE1MjcyLCAxMTUyNzcsIDExNTI4MiwgMTE1Mjg3LCAKKyAgICAxMTUyOTIsIDExNTI5OCwgMTE1MzA0LCAxMTUzMDksIDExNTMxNCwgMTE1MzIwLCAxMTUzMjUsIDExNTMzMSwgMTE1MzM3LCAKKyAgICAxMTUzNDMsIDExNTM0OSwgMTE1MzU1LCAxMTUzNjAsIDExNTM2NCwgMTE1MzY5LCAxMTUzNzIsIDExNTM3NiwgMTE1Mzc5LCAKKyAgICAxMTUzODIsIDExNTM4NSwgMTE1Mzg4LCAxMTUzOTEsIDExNTM5NCwgMTE1Mzk3LCAxMTU0MDAsIDExNTQwMywgMTE1NDA2LCAKKyAgICAxMTU0MDksIDExNTQxMiwgMTE1NDE1LCAxMTU0MTgsIDExNTQyMSwgMTE1NDI0LCAxMTU0MjcsIDExNTQzMCwgMTE1NDMzLCAKKyAgICAxMTU0MzYsIDExNTQzOSwgMTE1NDQyLCAxMTU0NDUsIDExNTQ0OCwgMTE1NDUxLCAxMTU0NTQsIDExNTQ1NywgMTE1NDYwLCAKKyAgICAxMTU0NjMsIDExNTQ2NiwgMTE1NDY5LCAxMTU0NzIsIDExNTQ3NSwgMTE1NDc4LCAxMTU0ODEsIDExNTQ4NCwgMTE1NDg3LCAKKyAgICAxMTU0OTAsIDExNTQ5MywgMTE1NDk2LCAxMTU0OTksIDExNTUwMiwgMTE1NTA1LCAxMTU1MDgsIDExNTUxMSwgMTE1NTE0LCAKKyAgICAxMTU1MTcsIDExNTUyMCwgMTE1NTIzLCAxMTU1MjYsIDExNTUyOSwgMTE1NTMyLCAxMTU1MzUsIDExNTUzOCwgMTE1NTQxLCAKKyAgICAxMTU1NDQsIDExNTU0NywgMTE1NTUwLCAxMTU1NTMsIDExNTU1NiwgMTE1NTU5LCAxMTU1NjIsIDExNTU2NSwgMTE1NTY4LCAKKyAgICAxMTU1NzEsIDExNTU3NCwgMTE1NTc3LCAxMTU1ODAsIDExNTU4MywgMTE1NTg2LCAxMTU1ODksIDExNTU5MiwgMTE1NTk1LCAKKyAgICAxMTU1OTgsIDExNTYwMSwgMTE1NjA0LCAxMTU2MDcsIDExNTYxMCwgMTE1NjEzLCAxMTU2MTYsIDExNTYxOSwgMTE1NjIyLCAKKyAgICAxMTU2MjUsIDExNTYyOCwgMTE1NjMxLCAxMTU2MzQsIDExNTYzNywgMTE1NjQwLCAxMTU2NDMsIDExNTY0NiwgMTE1NjQ5LCAKKyAgICAxMTU2NTIsIDExNTY1NSwgMTE1NjU4LCAxMTU2NjEsIDExNTY2NCwgMTE1NjY3LCAxMTU2NzAsIDExNTY3MywgMTE1Njc2LCAKKyAgICAxMTU2NzksIDExNTY4MiwgMTE1Njg1LCAxMTU2ODgsIDExNTY5MSwgMTE1Njk0LCAxMTU2OTcsIDExNTcwMCwgMTE1NzAzLCAKKyAgICAxMTU3MDYsIDExNTcwOSwgMTE1NzEyLCAxMTU3MTUsIDExNTcxOCwgMTE1NzIxLCAxMTU3MjQsIDExNTcyNywgMTE1NzMwLCAKKyAgICAxMTU3MzMsIDExNTczNiwgMTE1NzM5LCAxMTU3NDIsIDExNTc0NSwgMTE1NzQ4LCAxMTU3NTEsIDExNTc1NCwgMTE1NzU3LCAKKyAgICAxMTU3NjAsIDExNTc2MywgMTE1NzY2LCAxMTU3NjksIDExNTc3MiwgMTE1Nzc1LCAxMTU3NzgsIDExNTc4MSwgMTE1Nzg0LCAKKyAgICAxMTU3ODcsIDExNTc5MCwgMTE1NzkzLCAxMTU3OTYsIDExNTc5OSwgMTE1ODAyLCAxMTU4MDUsIDExNTgwOCwgMTE1ODExLCAKKyAgICAxMTU4MTQsIDExNTgxNywgMTE1ODIwLCAxMTU4MjMsIDExNTgyNiwgMTE1ODI5LCAxMTU4MzIsIDExNTgzNSwgMTE1ODM4LCAKKyAgICAxMTU4NDEsIDExNTg0NCwgMTE1ODQ3LCAxMTU4NTAsIDExNTg1MywgMTE1ODU2LCAxMTU4NTksIDExNTg2MiwgMTE1ODY1LCAKKyAgICAxMTU4NjgsIDExNTg3MSwgMTE1ODc0LCAxMTU4NzcsIDExNTg4MCwgMTE1ODgzLCAxMTU4ODYsIDExNTg4OSwgMTE1ODkyLCAKKyAgICAxMTU4OTUsIDExNTg5OCwgMTE1OTAxLCAxMTU5MDQsIDExNTkwNywgMTE1OTEwLCAxMTU5MTMsIDExNTkxNiwgMTE1OTE5LCAKKyAgICAxMTU5MjIsIDExNTkyNSwgMTE1OTI4LCAxMTU5MzEsIDExNTkzNCwgMTE1OTM3LCAxMTU5NDAsIDExNTk0MywgMTE1OTQ2LCAKKyAgICAxMTU5NDksIDExNTk1MiwgMTE1OTU1LCAxMTU5NTgsIDExNTk2MSwgMTE1OTY0LCAxMTU5NjcsIDExNTk3MCwgMTE1OTczLCAKKyAgICAxMTU5NzYsIDExNTk3OSwgMTE1OTgyLCAxMTU5ODUsIDExNTk4OCwgMTE1OTkxLCAxMTU5OTQsIDExNTk5NywgMTE2MDAwLCAKKyAgICAxMTYwMDMsIDExNjAwNiwgMTE2MDA5LCAxMTYwMTIsIDExNjAxNSwgMTE2MDE4LCAxMTYwMjEsIDExNjAyNCwgMTE2MDI3LCAKKyAgICAxMTYwMzAsIDExNjAzMywgMTE2MDM2LCAxMTYwMzksIDExNjA0MiwgMTE2MDQ1LCAxMTYwNDgsIDExNjA1MSwgMTE2MDU0LCAKKyAgICAxMTYwNTcsIDExNjA2MCwgMTE2MDYzLCAxMTYwNjYsIDExNjA2OSwgMTE2MDcyLCAxMTYwNzUsIDExNjA3OCwgMTE2MDgxLCAKKyAgICAxMTYwODQsIDExNjA4NywgMTE2MDkwLCAxMTYwOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIAogfTsKIAogLyogbmFtZS0+Y29kZSBkaWN0aW9uYXJ5ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfaGFzaFtdID0gewotICAgIDc0MjI0LCA0ODUxLCAwLCAwLCAwLCAwLCA3OTI5LCAwLCAxOTQ2ODIsIDAsIDAsIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIAotICAgIDEyMDY0LCAwLCA1OTYsIDAsIDAsIDY1ODQyLCA4NjUxLCAwLCAwLCAxMjAyMTgsIDEyOTk1LCA2NDg2NSwgMTM3MywgMCwgMCwgCi0gICAgNTgxNiwgMTE5MDY3LCA2NDgxMCwgNDIzMSwgOTE3ODMzLCAwLCA0MjMzLCA0MjM0LCA0MjMyLCA5MTc4MzYsIDAsIAotICAgIDEyMDIxMCwgOTE3ODQxLCA5MTc4NDAsIDAsIDg4NTEsIDAsIDAsIDAsIDQxNjAxLCA4ODc0LCAwLCA3NzQ4LCAwLCAwLCAwLCAKLSAgICAwLCA0MTYwMywgOTc4NCwgMCwgOTE4OCwgNDE2MDAsIDAsIDAsIDAsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAKLSAgICAxMTk1MSwgMCwgMzQwNCwgMCwgMCwgMCwgMTc1OSwgMCwgMTk0OTY0LCAwLCAwLCAwLCA2NjU3NywgMCwgMCwgNjU4NTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDY1OTMwLCA5ODM0LCAzMDU1LCA5ODUyLCAwLCA2NTI4OCwgMCwgMTEzOTgsIDAsIDAsIDExOTI1NSwgCi0gICAgMCwgMCwgNjAzLCAwLCA0MzU0OCwgMCwgMCwgOTE3ODI0LCAzMzUwLCAxMjA4MTcsIDY0MzE4LCA5MTc4MjgsIDEyNzA4OSwgCi0gICAgMzM5MCwgNzQ0ODMsIDQzMjY1LCAxMjA1OTksIDkxNzgzMCwgOTE3ODI5LCAwLCAxOTE5LCAzNDAwLCAwLCA5MTc4MTMsIDAsIAotICAgIDkxNzU0MCwgNjY0NDYsIDY0MTQxLCA4NTYyLCA2NDEzOSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgCi0gICAgMTEyOTcsIDAsIDAsIDExOTY2LCA2NDEyOCwgMCwgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDAsIDAsIAotICAgIDk3NzksIDI3NjQsIDY2MDAyLCAwLCA5NDcxLCAwLCA2NjAyMSwgMCwgMCwgNTQ1NywgNTQ0MCwgODg1NywgMCwgNjUyODIsIAotICAgIDI4NDMsIDUzNTUsIDAsIDAsIDAsIDUxOTQsIDExNjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcwMjcsIDEwNzE3LCA2NDU3MCwgCi0gICAgNTYzMCwgNzQzNTAsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIDY2MTg2LCAwLCAwLCA2NDkzMCwgCi0gICAgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgMCwgMCwgMTA5MDYsIDEzNTMsIDY5NjAsIAotICAgIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgNDIyNDQsIDg1OCwgNzA4MCwgOTE3ODA4LCA5MTc4MDcsIAotICAgIDgwOTAsIDAsIDc0NDAxLCA5MTc4MTEsIDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgMjc1MCwgMCwgNTU2LCA2NDE1OCwgCi0gICAgNjQxNTcsIDAsIDEyMjEzLCAwLCAyNzYwLCAwLCAwLCAwLCAwLCA2NDE1NiwgNjQxNTUsIDQyNDk2LCAwLCA2NDE1MSwgCi0gICAgNjQxNTAsIDEyNjc5LCAxMDA1MywgMTA0MjEsIDExNzg3LCA2NDE1MywgNjQxNTIsIDAsIDAsIDQ4MzksIDAsIDAsIDE4NzQsIAotICAgIDEyMDM1MiwgMCwgNjU3NywgNjQxMjUsIDY0MTI0LCA2NDEyMywgMCwgMCwgMCwgNzAwNywgNzU5MCwgNjU0NDMsIDkwMzYsIAotICAgIDAsIDY0MTIyLCA3NDQyMiwgNjY2MDksIDAsIDY0MTE3LCA2NDExNiwgNjI4NywgNjQxMTQsIDI3MjUsIDY0MTIwLCA2NDExOSwgCi0gICAgNjQxMTgsIDQyMTI4LCAwLCAxMTc3LCA2NTYwMSwgMTIzMjIsIDY0MTA2LCAwLCAwLCA2NDEwMiwgNzg1OSwgMTk0NSwgCi0gICAgNjQwOTksIDAsIDEwNDUzLCA2NDEwNCwgNzE4OCwgNzk5NywgMCwgMCwgMCwgODcwNSwgNjQwOTcsIDY0MDk2LCA5NTcxLCAKLSAgICA1MjgsIDkxNzk4OSwgMCwgMTE0MjksIDAsIDAsIDAsIDAsIDczODQxLCAwLCAwLCA5MDU2LCAwLCA2MTg4LCAxMjAwMTksIAotICAgIDYxNTUsIDY0MDY4LCAxODIzLCA2NDA2NiwgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDAsIDAsIDQxOTA0LCAKLSAgICA2NjM5LCA2NDA2NCwgMCwgMCwgMCwgMTE3NiwgMTE4OTU5LCAwLCA4MTYyLCAwLCAwLCAwLCAxMjA1MTksIDY2Mzc2LCAKLSAgICA2NjI0MiwgMTE0MTUsIDQzMzMsIDk4NTUsIDY0MTEyLCA2NDY0MiwgMCwgNTM4OCwgMCwgMCwgMCwgNzcxNCwgNjYyMjIsIDAsIAotICAgIDc3NjgsIDAsIDQxOTksIDY0NzA4LCAwLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIDg5OTYsIDQ5OTIsIAotICAgIDQ0NzEsIDQyNjIyLCA2NDA3OSwgNjQwNzgsIDAsIDAsIDAsIDAsIDY0NjE1LCAwLCAwLCAxMjA3NSwgMCwgMCwgNTE3NCwgMCwgCi0gICAgMCwgMCwgMzEyMywgMCwgMTI2ODUsIDAsIDg0MDgsIDY0NzA0LCAwLCAwLCA5MjIzLCAwLCA0MTYxNiwgMCwgNzM3OTcsIDAsIAotICAgIDExMTYsIDAsIDQzMDQ5LCAwLCA0MzA1MCwgODU0OCwgMCwgMCwgMTE5MDYxLCAwLCAwLCAxMzExNSwgNjQwOTIsIDY0MDkxLCAKLSAgICA5MzIyLCAwLCAxMjA1OTUsIDY0MDk1LCA2NDA5NCwgODExMSwgNjYyNDcsIDQyMzMyLCA2NDA4OSwgNjQwODgsIDYxOTksIDAsIAotICAgIDAsIDExNDM0LCA2NDA4MywgNjQwODIsIDExMzI5LCA3NzM3LCA2NDA4NywgNjQwODYsIDY0MDg1LCA2NDA4NCwgMCwgMCwgCi0gICAgNDEzMzUsIDQxMTgsIDE3OTcsIDAsIDQxMzM0LCAwLCA0NiwgMCwgMCwgMjk4LCAwLCAwLCAwLCA0MjYyNywgMCwgMzIsIAotICAgIDYxODcsIDExOTA1MiwgMTE0OTUsIDExNDU5LCAzNjY1LCAwLCA0Mjg3MSwgMCwgMTk5MjMsIDc0MzM1LCAwLCAwLCA2NjIzOSwgCi0gICAgMCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDAsIDAsIDAsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCAwLCAKLSAgICAxMjAxOTgsIDEyMDIwMywgNjE4MSwgNjUwMTQsIDAsIDAsIDAsIDM2MzksIDExOTU4OCwgMCwgMCwgMCwgMTAwNzMsIAotICAgIDEyMDIwNiwgMCwgMCwgMCwgNDI4NDQsIDc0OTgsIDEwOTgsIDAsIDAsIDAsIDAsIDEwMjA3LCA4Nzg5LCAwLCAwLCAwLCAwLCAKLSAgICA5MjM0LCAwLCA2MTgyLCAwLCA2NTA1OCwgMCwgMCwgMCwgMCwgNTQ3MSwgOTQ2MSwgNTU3MywgMTE4OTM2LCA1NDczLCA0NCwgCi0gICAgMCwgNjYyNDQsIDExODkwNywgMCwgNjYyMzgsIDEyODQ0LCAwLCAxNjIyLCA3NzY3LCAxOTAwLCA0MTMzOSwgMTE0NTgsIDAsIAotICAgIDAsIDY1ODEsIDU1NzYsIDAsIDY0NDA1LCA0MTMzNywgMCwgMCwgODk0NywgMCwgMCwgNDE2OTQsIDAsIDAsIDc5MDgsIDAsIAotICAgIDEwNDA4LCA2NTc5LCAwLCAxOTQ4MjksIDAsIDAsIDAsIDY1ODMsIDc3NjEsIDEyNzAxMCwgMTIwNTA0LCAxOTQ4MjgsIDAsIAotICAgIDUwNTgsIDQxMDEwLCA5OTkyLCAwLCA1MDU3LCAwLCAwLCA3NDUzOCwgNTA1NCwgMTE4OTUxLCAxOTQ5NzEsIDAsIDAsIAotICAgIDE0MzcsIDQxNjE3LCA2NTgsIDM0OTcsIDAsIDc0ODYsIDUwNjEsIDUwNjAsIDQyMzUsIDAsIDAsIDAsIDEyMTEzLCA0MjM2LCAKLSAgICA0NzI3LCAwLCAwLCA3NjkzLCAxMDc0OSwgMCwgNzQ4OCwgNTc3MywgOTc4LCAwLCAwLCA0MTYxOSwgMTAyMzksIDAsIDAsIAotICAgIDY2MjA5LCAwLCAwLCA5NzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAKLSAgICAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgNjc4NTQsIDgxMjUsIDEyMDU0NSwgMCwgMTE5MTc1LCA5MTc5NDAsIAotICAgIDIzNjksIDAsIDAsIDAsIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCAwLCAwLCAwLCAwLCAyMzY3LCAwLCAwLCAyNjQsIAotICAgIDIzNzUsIDgwNjAsIDYxOTQsIDExOTg1OCwgMTg0NCwgMTE5MDg0LCAwLCAxMjg1OCwgMCwgMCwgNjk2MSwgMCwgMCwgMCwgCi0gICAgODgwMCwgMCwgNDI4NjIsIDQ0NjMsIDY1NTgxLCA2MTkyLCAxOTQ2NzYsIDQyNzcxLCAwLCAwLCA3MjUsIDY1MDQyLCAKKyAgICA3NDIyNCwgNDg1MSwgMCwgNzgxNTYsIDc4NDk5LCAwLCA3OTI5LCAwLCAxOTQ2ODIsIDAsIDc4NTAwLCA2NjQ4MCwgMCwgCisgICAgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCAwLCAwLCAxMzE5MiwgODY1MSwgMCwgMCwgMTIwMjE4LCAxMjk5NSwgCisgICAgNjQ4NjUsIDEzNzMsIDAsIDAsIDU4MTYsIDExOTA2NywgNjQ4MTAsIDQyMzEsIDY4MjUsIDAsIDQyMzMsIDQyMzQsIDQyMzIsIAorICAgIDkxNzgzNiwgNzQ0MTUsIDEyMDIxMCwgNjM4NCwgOTE3ODQwLCA3ODEwOCwgODg1MSwgMCwgMCwgMCwgNDE2MDEsIDg4NzQsIAorICAgIDAsIDc3NDgsIDAsIDAsIDAsIDAsIDQxNjAzLCA5Nzg0LCAwLCA5MTg4LCA0MTYwMCwgMCwgMTIwNjE4LCAwLCAxNDU3LCAKKyAgICAzNTM1LCAwLCAwLCAwLCAwLCA2NTI0MCwgMTE5NTEsIDAsIDM0MDQsIDAsIDAsIDAsIDE3NTksIDAsIDQxMDc2LCA2ODM4MywgCisgICAgMTIwNTcyLCAxMTkyMDUsIDY2NTc3LCAwLCAwLCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgMCwgMCwgNjU5MDgsIDk4MzQsIAorICAgIDMwNTUsIDk4NTIsIDAsIDY1Mjg4LCAwLCAxMTM5OCwgMCwgMCwgMTE5MjU1LCAwLCAwLCA2MDMsIDc0Mzk4LCA0MzU0OCwgMCwgCisgICAgMCwgOTE3ODI0LCAzMzUwLCAxMjA4MTcsIDY0MzE4LCA5MTc4MjgsIDEyNzA4OSwgMzM5MCwgNzQ0ODMsIDQzMjY1LCAKKyAgICAxMjA1OTksIDkxNzgzMCwgNzg1NzMsIDAsIDE5MTksIDM0MDAsIDAsIDkxNzgxMywgMCwgOTE3NTQwLCA2NjQ0NiwgNjQxNDEsIAorICAgIDg1NjIsIDY0MTM5LCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgMCwgMCwgMTE5NjYsIDY0MTI4LCAKKyAgICAwLCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgMCwgNDMzNzQsIDk3NzksIDI3NjQsIDY2MDAyLCAxMDE2NywgCisgICAgOTQ3MSwgMCwgNjYwMjEsIDAsIDAsIDU0NTcsIDU0NDAsIDg4NTcsIDAsIDY1MjgyLCAyODQzLCA1MzU1LCAwLCAwLCAwLCAKKyAgICA1MTk0LCAxMTY1NywgNDM5ODQsIDAsIDAsIDAsIDAsIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCA1NjMwLCA3NDM1MCwgCisgICAgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgNjYxODYsIDAsIDAsIDY0OTMwLCAxMTYzMSwgNjQxNDYsIAorICAgIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAxOTQ2NjEsIDY0NDY4LCAxMDkwNiwgMTM1MywgNjk2MCwgMCwgMCwgCisgICAgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCA0MjI0NCwgODU4LCA3MDgwLCA2NDEwOSwgNjQxMDgsIDgwOTAsIDAsIAorICAgIDc0NDAxLCA5MTc4MTEsIDU4NywgMCwgMCwgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDAsIDU1NiwgNjQxNTgsIDY0MTU3LCAwLCAKKyAgICAxMjIxMywgMTk0Njc4LCAyNzYwLCAwLCAwLCAwLCAwLCA2NDE1NiwgNjQxNTUsIDQyNDk2LCAwLCA2NDE1MSwgNjQxNTAsIAorICAgIDEyNjc5LCAxMDA1MywgMTA0MjEsIDExMDkzLCA2NDE1MywgNjQxNTIsIDAsIDAsIDQ4MzksIDAsIDAsIDE4NzQsIDExOTAxNiwgCisgICAgMCwgNjU3NywgNjQxMjUsIDY0MTI0LCA2NDEyMywgMCwgMCwgMCwgNzAwNywgNzU5MCwgNjU0NDMsIDkwMzYsIDAsIDY0MTIyLCAKKyAgICA3NDQyMiwgNjY2MDksIDAsIDY0MTE3LCA2NDExNiwgNjI4NywgNjQxMTQsIDI3MjUsIDY0MTIwLCA2NDExOSwgNDM5ODEsIAorICAgIDQyMTI4LCAwLCAxMTc3LCA2NTYwMSwgMTIzMjIsIDY0MTA2LCAwLCAxMjczMDYsIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgCisgICAgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCAwLCA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIDUyOCwgCisgICAgOTE3OTg5LCA0NDAxNywgMTE0MjksIDAsIDAsIDAsIDkxNzk5MCwgNzM4NDEsIDAsIDAsIDkwNTYsIDAsIDYxODgsIAorICAgIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgMTIwNjk4LCAKKyAgICAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDAsIDAsIDAsIDExNzYsIDExODk1OSwgMCwgODE2MiwgMCwgMCwgMCwgMTIwNTE5LCAKKyAgICA2NjM3NiwgNjYyNDIsIDExNDE1LCA0MzMzLCA5ODU1LCA2NDExMiwgNjQ2NDIsIDAsIDUzODgsIDAsIDAsIDAsIDc3MTQsIAorICAgIDY2MjIyLCAwLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgMCwgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCA4OTk2LCAKKyAgICA0OTkyLCA0NDcxLCA0MjYyMiwgNjQwNzksIDY0MDc4LCAwLCAwLCAwLCAwLCA2NDYxNSwgMCwgMCwgMTIwNzUsIDAsIDAsIAorICAgIDUxNzQsIDAsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDAsIDg0MDgsIDY0NzA0LCAwLCAwLCA5MjIzLCAwLCA0MTYxNiwgCisgICAgMCwgNzM3OTcsIDAsIDExMTYsIDAsIDQzMDQ5LCAwLCA0MzA1MCwgODU0OCwgMTIwNDg1LCAwLCAxMTkwNjEsIDkxNzk5OSwgCisgICAgMCwgMTMxMTUsIDQzNjc1LCA2NDA5MSwgOTMyMiwgMCwgMTIwNTk1LCA2NDA5NSwgNjQwOTQsIDgxMTEsIDY2MjQ3LCAKKyAgICA0MjMzMiwgNjQwODksIDY0MDg4LCA2MTk5LCAwLCAwLCAxMTQzNCwgNjQwODMsIDY0MDgyLCAxMTMyOSwgNzczNywgNjQwODcsIAorICAgIDY0MDg2LCA2NDA4NSwgNjQwODQsIDAsIDk5MjcsIDQxMzM1LCA0MTE4LCAxNzk3LCAwLCA0MTMzNCwgMCwgNDYsIDQzNDQ4LCAKKyAgICAwLCAyOTgsIDAsIDAsIDAsIDQyNjI3LCAwLCAzMiwgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDAsIAorICAgIDQyODcxLCAwLCAxOTkyMywgNzQzMzUsIDAsIDAsIDY2MjM5LCAwLCA2NDQwMywgNDQxMiwgNzI0MCwgMCwgMCwgMCwgCisgICAgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCAxMjAyMDMsIDYxODEsIDY1MDE0LCAKKyAgICAwLCAwLCAwLCAzNjM5LCAxMTk1ODgsIDAsIDAsIDAsIDEwMDczLCAxMjAyMDYsIDAsIDAsIDY4NDA5LCA0Mjg0NCwgNzQ5OCwgCisgICAgMTA5OCwgMCwgMCwgMCwgMCwgMTAyMDcsIDg3ODksIDAsIDAsIDAsIDAsIDkyMzQsIDAsIDYxODIsIDAsIDY1MDU4LCAwLCAwLCAKKyAgICAwLCAwLCA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgMTE4OTA3LCAwLCA2NjIzOCwgCisgICAgMTI4NDQsIDAsIDE2MjIsIDc3NjcsIDE5MDAsIDQxMzM5LCAxMTQ1OCwgMCwgMCwgNjU4MSwgNTU3NiwgMCwgNjQ0MDUsIAorICAgIDQxMzM3LCAwLCA0MTYzMSwgODk0NywgNjgzOTAsIDAsIDQxNjk0LCAwLCAwLCA3OTA4LCAwLCAxMDQwOCwgNjU3OSwgMCwgCisgICAgNjQ2MTgsIDAsIDEyMDE0NywgMCwgNjU4MywgNzc2MSwgMTI3MDEwLCAxMjA1MDQsIDE5NDgyOCwgMCwgNTA1OCwgNDEwMTAsIAorICAgIDk5OTIsIDAsIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgNzg2MDYsIDAsIDE0MzcsIDQxNjE3LCAKKyAgICA2NTgsIDM0OTcsIDAsIDc0ODYsIDUwNjEsIDUwNjAsIDQyMzUsIDAsIDAsIDAsIDEyMTEzLCA0MjM2LCA0NzI3LCAwLCAwLCAKKyAgICA3NjkzLCAxMDc0OSwgMCwgNzQ4OCwgNTc3MywgOTc4LCAwLCAwLCA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgCisgICAgMCwgOTc0OCwgMCwgMTI3NTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIAorICAgIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIAorICAgIDAsIDAsIDAsIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCA0MzY2MCwgMCwgMCwgMCwgMjM2NywgMCwgMCwgMjY0LCAKKyAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgMTI4NTgsIDAsIDAsIDY5NjEsIDAsIDExODgzOSwgCisgICAgMCwgODgwMCwgMCwgNDI4NjIsIDQ0NjMsIDY1NTgxLCA2MTkyLCAxOTQ2NzYsIDQyNzcxLCAwLCAwLCA3MjUsIDY1MDQyLCAKICAgICAxMTg3OTcsIDEyMDgwMCwgMCwgMTI4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDcwNywgMCwgMCwgNTA3NCwgNTA3MywgCi0gICAgMCwgODk4MywgMCwgOTE3OTM5LCAwLCA1MDcyLCAwLCA2MTk4LCAxMTYxNCwgMCwgMTk2LCAwLCAwLCAwLCA0OTI5LCAKKyAgICAwLCA4OTgzLCAwLCA3NDQ5MywgMCwgNTA3MiwgMCwgNjE5OCwgMTE2MTQsIDAsIDE5NiwgMCwgMCwgMCwgNDkyOSwgCiAgICAgMTIwMzQyLCAwLCAwLCAwLCAwLCA0Mjg0NywgMCwgMCwgMCwgNDkzNCwgMCwgNDEzMjMsIDk3NTgsIDAsIDEyMDM0MSwgMCwgCiAgICAgNDI1ODQsIDAsIDQzMjksIDQxMzIxLCA0OTc5LCAzMDQ4LCA3NzUyLCA0MTMyMCwgMCwgNzQ0MTgsIDEyODE5LCAwLCA1MDcxLCAKLSAgICAwLCAzNjQyLCAwLCA1MDcwLCAxMDA0MiwgMCwgMzk4NywgNTA2OCwgMCwgMCwgMTIwMjE2LCAwLCAwLCAxMDYzNiwgNzM5ODEsIAotICAgIDExODA2LCA0MzE2NywgNDUzMSwgMTI0NSwgOTEwNSwgNjY0NjMsIDQ5MjEsIDEyMDIxOSwgNDkyNiwgNjU1NDQsIDczODg0LCAKLSAgICAxOTQ2MTksIDAsIDAsIDY0NzA5LCAwLCAxOTQ2MjAsIDEyMDc5MCwgNDkyMiwgMzI1LCA5OTIsIDExOTU2OCwgNDkyNSwgMCwgCi0gICAgMCwgOTUyNiwgNDkyMCwgMCwgOTQ4LCAwLCAxMjAyMDgsIDQ5MzAsIDAsIDAsIDEyMDI3NSwgNDkzMywgMCwgMCwgMCwgCi0gICAgNDkyOCwgMCwgMCwgNzQ3NzAsIDAsIDAsIDcyMiwgMCwgMTk5MDgsIDEyNjM3LCAwLCAxMTk4NTUsIDg3NTMsIDE1MDksIDAsIAotICAgIDU0NjgsIDk1MTEsIDAsIDAsIDE2NzIsIDYyMDUsIDEwODY0LCA3NDU4NiwgMCwgMCwgMCwgMCwgMCwgNzM4NjMsIDAsIDAsIAotICAgIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTk0OTMyLCAxMjAxMTMsIDAsIDcwMDUsIDQxNjA5LCA5NTgwLCAwLCAKLSAgICA0MDEsIDAsIDEyMDEwOSwgNjk2OCwgNTc2MSwgMzQyLCA4NTUzLCAwLCA4MTQzLCAxMjcxMTUsIDExOTgzLCAxMjcxMTMsIAotICAgIDYyNCwgNzQ1MDgsIDAsIDExOTYzMCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAxOTQ2MDksIDAsIDEyMDA5NywgCi0gICAgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgMTIwMDk1LCAxMjAxMDIsIDEyMDA5NCwgMTIwNTUyLCAwLCAKLSAgICAxOTQ2MTEsIDAsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgNTAzNiwgNTAzNSwgMTIwNTkwLCAKLSAgICA0MjYwNCwgMCwgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgMCwgNDQzMiwgMCwgNTAzMywgMCwgMCwgNDgzNiwgMzg4OCwgCi0gICAgNzM3OTIsIDEwNzI5LCA2NDU0NiwgMTk0NjAwLCAxMjA2ODEsIDE5NDkzNywgMCwgNjc1ODgsIDExOTAwMCwgMCwgMCwgCi0gICAgODg1OCwgNjQwOSwgMCwgMTIwMjUyLCAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDAsIDM0MzIsIDEwMjE4LCAwLCA2MDk0LCAKKyAgICAwLCAzNjQyLCAwLCA1MDcwLCAxMDA0MiwgMTE4ODM1LCAzOTg3LCA1MDY4LCAwLCA4OTA5LCA3ODY1MCwgNzg2NDksIDAsIAorICAgIDEwNjM2LCA3Mzk4MSwgMTE4MDYsIDQzMTY3LCA0NTMxLCAxMjQ1LCA5MTA1LCA2NjQ2MywgNDkyMSwgMTIwMjE5LCA0OTI2LCAKKyAgICA2NTU0NCwgNzM4ODQsIDE5NDYxOSwgMCwgMCwgNjQ3MDksIDAsIDE5NDYyMCwgNzg4ODAsIDQ5MjIsIDMyNSwgOTkyLCAKKyAgICAxMTk1NjgsIDQ5MjUsIDAsIDAsIDk1MjYsIDQ5MjAsIDAsIDk0OCwgMCwgMTIwMjA4LCA0OTMwLCAwLCAwLCAxMjAyNzUsIAorICAgIDQ5MzMsIDAsIDAsIDExODk4NSwgNDkyOCwgMCwgMCwgNzQ3NzAsIDEyMDE5NCwgMCwgNzIyLCAwLCAxOTkwOCwgMTI2MzcsIAorICAgIDAsIDExOTg1NSwgODc1MywgMTUwOSwgMCwgNTQ2OCwgOTUxMSwgMCwgMCwgMTY3MiwgNjIwNSwgMTA4NjQsIDc0NTg2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3Mzg2MywgMCwgMCwgNDE2MDcsIDEyMDExNSwgMTY3OSwgMTIwMTE2LCAxMjAxODAsIDEyMDExMywgMCwgCisgICAgNzAwNSwgNDE2MDksIDk1ODAsIDAsIDQwMSwgMCwgMTIwMTA5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIAorICAgIDEyNzExNSwgMTE5ODMsIDEyNzExMywgNjI0LCA3NDUwOCwgMCwgMTE5NjMwLCA1MDc4LCA3NDI1OCwgMTI0NzgsIDAsIAorICAgIDUwNzYsIDAsIDE5NDYwOSwgMCwgMTIwMDk3LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCAxMjAwOTUsIAorICAgIDEyMDEwMiwgMTIwMDk0LCAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCAKKyAgICA2NDc3NSwgNTAzNiwgNTAzNSwgMTIwNTkwLCA0MjYwNCwgMCwgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAorICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAorICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCisgICAgMTI3MjU2LCAxMjAyNTIsIDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgNjA5NCwgCiAgICAgNzY0MSwgNDI0NDUsIDAsIDAsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCAwLCA1MDMwLCAwLCAwLCAwLCAwLCA5NjIyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDU0NCwgMTI5MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0NywgMTE5ODM1LCAKLSAgICAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgMTE5OTM3LCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgCi0gICAgNjQ5MTQsIDAsIDEyMDE5MiwgMTIwMjY4LCAwLCA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMCwgMTE5OTE5LCA3MjE2LCAKLSAgICA2NTIzMiwgNzIxNywgMjUxLCA3MjE4LCA3ODk1LCA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgCi0gICAgMTE5OTIyLCA3MjE0LCA3MjE1LCAwLCA3NDE0MSwgODg4MCwgNzY4NSwgMCwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIAotICAgIDgxODcsIDQyODYxLCAxMTEzLCA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgCi0gICAgMTA5ODAsIDI0ODksIDY1NjI0LCA4MTUwLCAxMzU5LCAwLCAwLCAwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI4MywgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIAotICAgIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgMCwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgMCwgCi0gICAgNzM3NzMsIDExOTA3MywgNTA0MCwgMCwgMCwgMCwgMCwgMCwgNTAzOSwgMCwgMCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIAotICAgIDc0MjkzLCAwLCA2NDY0OCwgMCwgOTM1OSwgMCwgMCwgMCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKLSAgICAwLCAwLCAwLCA0MzA5LCAwLCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgMTE5NTk1LCA1NjksIDAsIDAsIDcxMSwgCi0gICAgMTE5MDg1LCAwLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzEsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgCi0gICAgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDAsIDAsIDY1Nzg0LCAwLCA2NTI2NywgMzc1OCwgMCwgCi0gICAgNjU3ODEsIDY0NzM0LCAwLCAyNDQwLCA2NTc4MCwgMCwgODQ0OSwgMCwgNTAwOCwgMCwgODgyMiwgMCwgMTIxMjEsIDgyNTUsIAotICAgIDU1MTIsIDczODc1LCAxMTk1NjAsIDAsIDY0MzEzLCAyNjQxLCA1OTA2LCAxMTE5LCAxMjcwNjgsIDEzMDM4LCAwLCAyNDU1LCAKLSAgICAwLCAxMTg4MDksIDAsIDAsIDAsIDAsIDg3MTQsIDAsIDQyMTEsIDAsIDAsIDAsIDAsIDAsIDUwNTIsIDY2MjIwLCA1ODIxLCAKLSAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAotICAgIDY2MzcsIDU5MDcsIDEyMDY3MCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAwLCAwLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgCi0gICAgNTUxMCwgMCwgMCwgMCwgMjQ3MCwgMCwgMCwgMTkyNSwgMCwgMCwgMCwgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgMTk0ODYzLCAKLSAgICAwLCA3NDQ5NywgMCwgODA4OSwgNjkyOSwgNjM5LCAwLCA2ODE3OSwgMCwgMCwgMCwgNDU5OSwgNDE0MDIsIDY2NzQsIAotICAgIDEyMDYzMSwgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDAsIDEwMTY0LCAwLCAwLCAzNTMwLCA5NzUwLCAKLSAgICAwLCAwLCA2NjU2LCAxOTQ4NTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgODk2NywgMCwgNTA0NSwgMCwgMTkxNiwgCi0gICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKLSAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgMCwgNDE3NTAsIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgCi0gICAgMTE5NjA2LCAwLCAxMzI5NiwgNTE3LCAwLCAwLCAwLCA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgNzQ0NzgsIDEwNTMxLCAKLSAgICA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAzOTI1LCAwLCAKLSAgICA4MDY5LCA0MzE0MiwgMTIwNDM5LCA0ODksIDAsIDAsIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgMCwgMCwgNjYyMDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgNzYyMywgMTE4OTI1LCAxOTQ4NTMsIDkyMzUsIAotICAgIDEyNzYwLCA3NDE3NiwgMCwgNjY0NDUsIDQzNTQwLCAxMjA0MzcsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIAotICAgIDAsIDEyMDQzNSwgMCwgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgMCwgMTM3MSwgMTk0ODQ5LCAwLCAyNDU4LCAwLCAKLSAgICA2MjAxLCAwLCA0MTA3NCwgNDI2NiwgMTA2NTIsIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgMCwgMCwgCi0gICAgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIDkxNzU1MCwgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgMCwgNjQyNjEsIDY0OTM0LCAKLSAgICAwLCAxMzAxNCwgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCAwLCAwLCAwLCAwLCA5MDUzLCAxMzAxNSwgCi0gICAgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDAsIDY2NjAsIDE5NDk0MSwgOTE3NzYwLCA5MTc3OTMsIDAsIDEyNjI5LCAKLSAgICAxMTQzNSwgMCwgMCwgNjU1MzgsIDAsIDAsIDAsIDc0NTQ3LCAwLCA2NTQ0OCwgMCwgMTI5NDgsIDE5NTAwMywgMTk1MDAyLCAKLSAgICAxMTkyMzgsIDE5NTAwNCwgMTk1MDA3LCAxOTUwMDYsIDAsIDAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDAsIAotICAgIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAwLCA0ODk4LCA2NDI5OCwgMCwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAKKyAgICAwLCAwLCA2Nzg3LCAwLCAwLCAwLCAwLCAxMDU0NCwgMTI5MTksIDAsIDAsIDAsIDAsIDAsIDEyMDc4OSwgMCwgOTQ3LCAKKyAgICAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgMTE5OTM1LCA3NjEzLCAxMTk5MzcsIDExOTkzNiwgNDc5NSwgCisgICAgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCA0MzU2NywgNzQwNTYsIDkxNzkxMCwgCisgICAgMTE4OTYzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIDcyMTgsIDc4OTUsIDQzOTUsIDQzNTM4LCAxMTk5MjYsIAorICAgIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIDcyMTUsIDAsIDc0MTQxLCA4ODgwLCA3Njg1LCA2NjQ1OSwgCisgICAgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIDgxODcsIDQyODYxLCAxMTEzLCA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIAorICAgIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgMTA5ODAsIDI0ODksIDY1NjI0LCA4MTUwLCAxMzU5LCA2NzY1MiwgMCwgMCwgCisgICAgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAxMjA4NCwgMCwgMCwgMCwgMTI3MzE5LCAwLCA5MTc5MDYsIDAsIDAsIDEyMjgzLCAKKyAgICAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgNzM5MDUsIDEyNjc3LCAwLCAwLCAzMjM5LCAwLCAKKyAgICAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAwLCAwLCAKKyAgICAwLCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCA3NDI5MywgMCwgNjQ2NDgsIDAsIAorICAgIDkzNTksIDc4NDE2LCAwLCAwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgNzM5MDksIDQ4MzUsIDU1MjY2LCA0MzQzMiwgMCwgCisgICAgNDMwOSwgMCwgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIDAsIDczODEzLCA3MTEsIDExOTA4NSwgCisgICAgMCwgMCwgNzM4ODAsIDExNjEwLCAxMTM2OCwgMCwgMTk0NTcxLCA0MTMzMSwgMTAwNiwgNzQyNDAsIDAsIDE1NTAsIDgyMDEsIAorICAgIDczNzM3LCA3NjI3LCA1NDk5LCA1MDMxLCA3NzkwOCwgNDI3MzgsIDY1Nzg0LCA3NzkwNywgNjUyNjcsIDM3NTgsIDAsIAorICAgIDY1NzgxLCA2NDczNCwgMCwgMjQ0MCwgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCA1MDA4LCAwLCA4ODIyLCAwLCAxMjEyMSwgCisgICAgODI1NSwgNTUxMiwgNzM4NzUsIDExOTU2MCwgMCwgNjQzMTMsIDI2NDEsIDU5MDYsIDExMTksIDEyNzA2OCwgMTMwMzgsIDAsIAorICAgIDI0NTUsIDAsIDExODgwOSwgMCwgMCwgMCwgMCwgODcxNCwgMCwgNDIxMSwgMCwgMCwgMCwgMCwgNDM3MTMsIDUwNTIsIAorICAgIDY2MjIwLCA1ODIxLCA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAKKyAgICAzODgsIDQxMTE1LCA3MzUsIDY2MzcsIDU5MDcsIDEyMDY3MCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAwLCAxOTUwMTAsIAorICAgIDU1MTMsIDY2NjYsIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCAKKyAgICAwLCA3NDgwNywgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgMTk0ODYzLCAwLCA3NDQ5NywgMCwgODA4OSwgNjkyOSwgNjM5LCAKKyAgICAwLCA2ODE3OSwgMCwgMCwgMCwgNDU5OSwgNDE0MDIsIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgNjQ4LCAwLCA2NTgxOSwgCisgICAgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDAsIDAsIDM1MzAsIDk3NTAsIDAsIDAsIDY2NTYsIDE5NDg1OCwgMCwgNTA0NiwgCisgICAgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCAwLCAxOTE2LCA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIAorICAgIDEzMTI4LCA1MDQzLCAwLCA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCAKKyAgICAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAxMTk2MDYsIDAsIDEzMjk2LCA1MTcsIDAsIDAsIDAsIAorICAgIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIAorICAgIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgCisgICAgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCAwLCAwLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIAorICAgIDAsIDAsIDEyMDQ0OCwgNzYyMywgMTE4OTI1LCAxOTQ4NTMsIDkyMzUsIDEyNzYwLCA3NDE3NiwgMCwgNjY0NDUsIDQzNTQwLCAKKyAgICAxMjA0MzcsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDAsIDEyMDQzNSwgMCwgNzcyNiwgMCwgMTk5MjIsIAorICAgIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIDQxMDc0LCA0MjY2LCAKKyAgICAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCAwLCAwLCAzMzkxLCA0MTA3NSwgMjQ3NiwgMCwgCisgICAgOTE3NTUwLCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCAxMjc1MzcsIDEzMDE0LCAKKyAgICAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDAsIDAsIDAsIDAsIDkwNTMsIDEzMDE1LCA3NDUyMywgMCwgCisgICAgNzA0LCA2NjIxNSwgNjE5NSwgMCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCAKKyAgICA1NTI1NiwgNjU1MzgsIDAsIDAsIDAsIDc0NTQ3LCAwLCA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgCisgICAgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIDAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCAKKyAgICA2NjcyOCwgMTgxNiwgMCwgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCAwLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIAogICAgIDM2NTMsIDAsIDc5MSwgOTE2MiwgNjk3NywgMCwgMTE5Mjk4LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAwLCAwLCAKICAgICA3NTU3LCAwLCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDE5NDk5NCwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCi0gICAgMzk0NiwgMTk1MDAwLCAxMDk5OCwgMCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAwLCA3NDU5OSwgMCwgMCwgMTk0OTc3LCAKLSAgICAxOTQ5NzYsIDI0NDgsIDE5NDk3OCwgMTAyNjcsIDg0MjQsIDI0NTIsIDEyMDc2MCwgMTk0ODY0LCA4NzI5LCAwLCAwLCAKLSAgICA3ODQ1LCAwLCAwLCA0NDA4LCA0MTIyLCAwLCAxMTAzOSwgODcyMywgMTk0OTkwLCAxOTQ5ODksIDExOTMwMiwgNzMxLCAKLSAgICAxMTkzMDQsIDExOTMwMywgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIAotICAgIDUzOTYsIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIDUyNzMsIDgyNDgsIDUyNjksIDAsIDUyMDIsIAotICAgIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIDEyOTYzLCAwLCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgCi0gICAgMCwgMTE4ODczLCAxMjcxLCAwLCAwLCA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgCi0gICAgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgMCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgMCwgMCwgMCwgMCwgCi0gICAgNDEzODgsIDAsIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDAsIDcwMCwgMCwgNTU1MywgMCwgNzA4OCwgCi0gICAgNTM1NiwgNzQ5OSwgMCwgNjY1OTYsIDAsIDAsIDAsIDU1NTQsIDAsIDEyMzQ0LCAxMDMxMSwgMCwgNjY2NSwgMCwgMCwgCi0gICAgNzYxOCwgODUxNywgMTE0NTUsIDAsIDY0NjMyLCA2NjAxNywgNTU1NSwgMCwgMCwgMCwgMCwgMTE5MjA0LCA2NTAzMywgCi0gICAgOTE0MywgNjY2OCwgMTk1MDY3LCAxOTUwNjYsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgCi0gICAgMCwgMCwgMCwgNDI2OSwgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDkxNzc3NCwgOTUwLCAwLCAwLCA2NjU4MCwgMTE4ODk1LCAKLSAgICA2NjY4MywgMTA1NTQsIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgCi0gICAgOTg0OCwgMTAzODEsIDAsIDAsIDAsIDM2NTEsIDAsIDAsIDAsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgMCwgCi0gICAgMTkzMiwgNTEwMCwgMTQzOSwgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDAsIDE0NDEsIDQyMDg3LCAzMDYzLCAKLSAgICA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDE5NTA0NSwgMTk1MDQ0LCA5MDc4LCAKLSAgICA4NTQ1LCA2NjM1NiwgMTk1MDQ4LCAwLCA5MTU0LCA5MTE4LCAwLCAwLCAyNjc2LCA3NzUwLCAwLCA3MzgxMiwgNjE5MCwgCi0gICAgODU5OSwgMTk1MDUzLCAwLCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1OCwgMTk1MDMzLCAwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCi0gICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTk1MDM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAotICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMCwgNDI3NSwgNzQ4MTksIAotICAgIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCAwLCA1MTAzLCAwLCA2NDM0OCwgNDEzNjgsIDAsIDQ4OCwgMCwgMCwgMCwgMTAxNTcsIAotICAgIDAsIDQzMDM0LCAxMTQzOCwgMCwgMCwgMCwgMTE4ODM5LCA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDE5NTAyNSwgCi0gICAgNDEzNjcsIDUxMDUsIDE5NTAzMCwgMTk1MDI5LCA2NDc2LCA1MTA0LCAwLCAzMDQsIDMxNzYsIDAsIDAsIDkzMiwgMCwgCi0gICAgNjU2NywgMjM4LCA3NDUyMiwgMTk1MDExLCAxOTUwMTAsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgMTIwMTg3LCA0MTA0NCwgCi0gICAgNjc2NDAsIDAsIDY0ODE0LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgMTI1NTIsIDE5NTAxOSwgCi0gICAgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgMTk0NTk2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIDEyNTUzLCAwLCAKLSAgICA0MzI3NSwgNjk1MCwgOTcxMiwgMCwgMCwgMCwgNjUxNjUsIDAsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCi0gICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDAsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAwLCAKLSAgICA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIDAsIDAsIAotICAgIDExOTU3OSwgMCwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgMTIwNzcsIDAsIDAsIDAsIAotICAgIDQyMzk2LCAwLCAzNDc1LCAwLCAyNDc5LCAwLCAzNjMyLCAwLCAxMDY5OCwgMCwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgCi0gICAgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDAsIDQxNTYyLCAwLCA3NDU0OCwgCi0gICAgMCwgMzY0MCwgMCwgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgMTk0OTUyLCAxOTQ5NTEsIAotICAgIDAsIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxOTQ5NTUsIDE5NDYwNiwgMTk0OTU3LCA2NzYxOSwgCi0gICAgNjYzNjcsIDE5NDk1OCwgOTYzNCwgMCwgOTk4OCwgMCwgNDEwNjgsIDAsIDAsIDY1MjY0LCAwLCAwLCA5MTc5MjMsIDAsIAotICAgIDc4NSwgODIzNiwgMTk0OTQyLCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAwLCA5MjUsIDAsIDAsIDQxOTg1LCA0MTA3MSwgCi0gICAgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIDAsIDkxODYsIDY0NTgwLCA0MDE2LCAwLCAwLCAzODEsIDAsIDAsIDQyMDc3LCAKLSAgICAwLCAxOTQ5NDYsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAwLCA0NTg1LCAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIAotICAgIDgxMiwgMzYxNSwgMCwgNTE3OCwgMTk0OTI5LCAxMjA1NDgsIDEyMDUwNiwgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAKLSAgICAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCAwLCAwLCAyNDQyLCAxMDcwMywgMTk0OTQwLCAKLSAgICA2NzYzMiwgMCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgMCwgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgMCwgMCwgNDIyODgsIAotICAgIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgMCwgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIAotICAgIDAsIDQxMTE3LCAwLCAwLCAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIDI3MTUsIDgwNiwgMCwgNDE4ODQsIDAsIAotICAgIDcwMjcsIDY0NzMxLCAwLCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCAwLCAKLSAgICAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgNDMyMTksIDAsIAotICAgIDY0OTQsIDU1MzcsIDAsIDAsIDAsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIDAsIDAsIDEwNjIyLCAwLCAKLSAgICAwLCAwLCA2NTY2LCAwLCAwLCA3Mzc4MCwgMCwgNjQ4NjQsIDAsIDE5NDU4OCwgMCwgODI4NCwgMCwgMCwgMzU4OSwgMCwgCi0gICAgNDAzNSwgNjQ5MiwgMCwgNDI2NSwgNjY0MiwgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgCisgICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAwLCA3NDU5OSwgNzg0NDksIDg4OTAsIAorICAgIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIDc4MDgzLCAxOTQ4NjQsIDg3MjksIAorICAgIDc4NDU2LCAwLCA3ODQ1LCAwLCA3ODY5MiwgNDQwOCwgNDEyMiwgNjc3MiwgMTEwMzksIDg3MjMsIDE5NDk5MCwgMTk0OTg5LCAKKyAgICAxMTkzMDIsIDczMSwgMTE5MzA0LCAxMTkzMDMsIDI0MzgsIDY0ODU1LCAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIAorICAgIDM3MywgMTE5MTcyLCA1Mzk2LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIDAsIDAsIDQxOTUyLCAwLCA1MjczLCA4MjQ4LCAKKyAgICA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIDE5OTE1LCA1Mjc3LCAxMjk2MywgMCwgNjE4OSwgCisgICAgNDEyNSwgMTMxNCwgMTIxMzMsIDAsIDExODg3MywgMTI3MSwgMCwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgCisgICAgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIAorICAgIDAsIDU3NTksIDAsIDAsIDQxMzg4LCAwLCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCAwLCA3MDAsIDAsIAorICAgIDU1NTMsIDAsIDcwODgsIDUzNTYsIDc0OTksIDc4MTEwLCA2NjU5NiwgMCwgMCwgMTAyNjMsIDU1NTQsIDAsIDEyMzQ0LCAKKyAgICAxMDMxMSwgNzgxMTMsIDY2NjUsIDAsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY2MDE3LCA1NTU1LCAKKyAgICA3ODA4OCwgNzgwOTMsIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgMTk1MDY2LCAxOTUwNjksIAorICAgIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDAsIDQyNjksIDczODg1LCA5MTc3NzUsIDQyODQ2LCAKKyAgICA5MTc3NzQsIDk1MCwgMCwgMCwgNjY1ODAsIDExODg5NSwgNjY2ODMsIDEwNTU0LCA5MTc3NzgsIDExOTEyMSwgMCwgNTA5OCwgCisgICAgOTE3NzcwLCAwLCAxMTkwOTksIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCA5MTc1NjAsIDAsIDM2NTEsIDAsIDAsIAorICAgIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgCisgICAgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIAorICAgIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgMTk1MDQ0LCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTk1MDQ4LCAKKyAgICAwLCA5MTU0LCA5MTE4LCAwLCAwLCAyNjc2LCA3NzUwLCAwLCA3MzgxMiwgNjE5MCwgODU5OSwgMTk1MDUzLCAwLCAxMDc5NSwgCisgICAgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAwLCAxMjEyOSwgMCwgODQ4MSwgMCwgNjIwMiwgMTk1MDM1LCAxMDkyMCwgCisgICAgMTk1MDM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCAKKyAgICA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMCwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCAKKyAgICAwLCA1MTAzLCAwLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCA0ODgsIDY5ODExLCAwLCAwLCAxMDE1NywgMCwgNDMwMzQsIAorICAgIDExNDM4LCAwLCAwLCAwLCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgNDEzNjcsIAorICAgIDUxMDUsIDE5NTAzMCwgNjk4MDksIDY0NzYsIDUxMDQsIDAsIDMwNCwgMzE3NiwgMCwgMCwgOTMyLCAwLCA2NTY3LCAyMzgsIAorICAgIDc0NTIyLCAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCAxMjAxODcsIDQxMDQ0LCA2NzY0MCwgCisgICAgMTk0OTAyLCA0MjA1NSwgOTkxMiwgNjU5MzksIDEwNjcwLCA3NDA5MywgMTMyNzMsIDAsIDEyNTUyLCAxOTUwMTksIDg4MDMsIAorICAgIDMwOSwgNjYyMiwgODE1MSwgMTA4NTgsIDE5NDU5NiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMCwgNDMyNzUsIAorICAgIDY5NTAsIDk3MTIsIDY4NjgwLCA0Mzk3MCwgMCwgNjUxNjUsIDAsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCisgICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDAsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAKKyAgICA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCAKKyAgICAwLCA5MTc1NDcsIDExOTU3OSwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIAorICAgIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIDAsIDI0NzksIDAsIDM2MzIsIDEyMDcyOCwgCisgICAgMTA2OTgsIDgzNzYsIDM2NDgsIDE5NDk2MCwgNzQ4NDQsIDY3NjM5LCAzNjM2LCA2Nzg5NCwgMzY1MCwgODgzNywgNjUyMjksIAorICAgIDE4NDMsIDQyMjgzLCA0MzI1MCwgNDE1NjIsIDkxMDAsIDc0NTQ4LCAwLCAzNjQwLCAwLCA0MjMyMSwgNzI4NCwgMTk0OTc0LCAKKyAgICAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAxOTQ5NTIsIDE5NDk1MSwgMCwgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgCisgICAgNDIwODMsIDEyMDY3OCwgNjgzOTgsIDE5NDk1NywgNjc2MTksIDY2MzY3LCAxOTQ5NTgsIDk2MzQsIDAsIDk5ODgsIDAsIAorICAgIDQxMDY4LCAwLCAwLCA2NTI2NCwgMCwgMCwgOTE3OTIzLCAwLCA3ODUsIDgyMzYsIDE5NDk0MiwgOTAyNywgNjgxNjAsIAorICAgIDY3NjIzLCA2NDM4MywgMCwgOTI1LCAwLCAwLCA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCAKKyAgICA5MTg2LCAyMDY3LCA0MDE2LCAwLCAwLCAzODEsIDAsIDAsIDQyMDc3LCAwLCAxOTQ5NDYsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIAorICAgIDEwODEwLCAwLCA0NTg1LCAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIDgxMiwgMzYxNSwgMCwgNTE3OCwgNDQwMDAsIAorICAgIDEyMDU0OCwgNzg4MDcsIDUxODgsIDc0Mjg3LCA2NzYyOSwgMzYwNSwgMTA2OTIsIDExNjYsIDY0NDI5LCA0MjYzOSwgOTI0LCAKKyAgICAwLCA2NzYzMSwgMCwgMCwgMjQ0MiwgMTA3MDMsIDc4Nzg5LCA2NzYzMiwgOTE3OTI0LCAxMjc3MSwgMTI3MzYsIDEyNzUzLCAKKyAgICAwLCA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCAwLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIDAsIAorICAgIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgMCwgMCwgMCwgCisgICAgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCA3MDI3LCA2NDczMSwgCisgICAgMCwgMCwgMCwgNjYzMjUsIDM0NjUsIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgMCwgMTI3NTIsIDU4MzMsIAorICAgIDE0MzIsIDAsIDQxODgzLCA3MzkxMiwgOTc5OSwgMCwgNDE4ODYsIDI0ODAsIDAsIDIwNjIsIDEyNzI5MywgNjQ5NCwgNTUzNywgCisgICAgNzg2NTYsIDAsIDE5NDU4NywgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgMCwgMCwgMTA2MjIsIDAsIDAsIAorICAgIDAsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMCwgNjQ4NjQsIDAsIDc4NjYwLCAwLCA4Mjg0LCAwLCAwLCAzNTg5LCAwLCAKKyAgICA0MDM1LCA2NDkyLCAxMTg5ODEsIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAxMTkyMTYsIDI0ODgsIDAsIAogICAgIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgMCwgNzUyOCwgMTA1NTAsIDAsIDAsIDAsIDAsIDAsIDEzNzQsIDY0ODc4LCAKLSAgICAxMTkwMTQsIDAsIDQyMzg5LCA0MTM3NCwgMCwgMCwgMCwgNDEzNzcsIDAsIDAsIDQwMCwgMTI1OTcsIDAsIDAsIDAsIDY2NjEsIAotICAgIDAsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAwLCA3NDc1NSwgMCwgMzQ3MywgNzcxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE5NjksIDAsIDAsIDgwMDQsIDE4ODcsIDAsIDAsIDgwODAsIDcwMDYsIDAsIDAsIDAsIDAsIDE1NDQsIDAsIDAsIDY0Njc3LCAKLSAgICAxMjA3MTYsIDAsIDYxNDYsIDAsIDc3MSwgMCwgMCwgMTI4MTIsIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgCi0gICAgMCwgOTUzLCAxMjkxNywgMCwgMTIzMDAsIDAsIDExNDkxLCA5NzI0LCAxMDM0MSwgMCwgOTUyNCwgNzQ5MCwgMTEzODksIAotICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNzQ4MSwgNzQ4MCwgNzQ3OSwgNzQ3OCwgNzQ3NywgCi0gICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgMCwgCi0gICAgMTIwMjIyLCAxMDA0OSwgMCwgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDAsIDAsIDEzMzA2LCAxMDUzMywgNzg3MCwgNzM5NDksIAotICAgIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk5NjEsIDI0NzIsIDAsIDEyMDY5OSwgMCwgNjAxOSwgNDI1NiwgCi0gICAgMTIwNzc2LCA3NDM4MCwgMCwgNzM4NDcsIDczODQ0LCAxMjg0NSwgMCwgMCwgNjUxMzgsIDExOTM1NSwgNjc4NjIsIDAsIDAsIAotICAgIDEyMDAwMCwgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIAotICAgIDEyMDU2NiwgMCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIDAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgMTc3MCwgMCwgMCwgCi0gICAgMTU2MCwgMTIwMjA5LCAwLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAwLCAxMTE4LCAwLCAwLCAwLCAxMDgxLCAKLSAgICA3NDM2LCAwLCA3MjUyLCAwLCA1OTk2LCAwLCA0OTAzLCAwLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAxMzMwLCAwLCA2NDUzMCwgCi0gICAgMCwgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCAwLCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMCwgMCwgCi0gICAgMCwgMCwgMTI3MTUsIDAsIDAsIDAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgMCwgMCwgMCwgMTI2OTg0LCAKLSAgICAwLCA5MzM0LCAwLCAwLCAwLCA3OTc1LCAwLCAwLCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDAsIDAsIDAsIDYzMTMsIAotICAgIDY1NTEzLCAwLCAwLCAwLCAwLCAyMzQ1LCAwLCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgMCwgMCwgCi0gICAgNDIyNzksIDE5NDU3NywgMCwgMCwgMCwgMCwgMCwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIDAsIDAsIAotICAgIDI0ODIsIDE0NzEsIDAsIDAsIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDAsIDAsIDEyMzc0LCAwLCAwLCAwLCAwLCAyNDYwLCAwLCAKLSAgICAxMTk0NCwgMTIzNzYsIDAsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCA1ODcwLCAwLCAyMDI0LCAwLCAwLCAwLCAKLSAgICA1MzksIDAsIDAsIDAsIDM4NTMsIDY1MTgwLCAwLCAxMjA3OTYsIDEyMDI0NSwgMCwgMCwgODY1OSwgMCwgMTI0NzQsIDAsIAotICAgIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDAsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAKLSAgICAyNzQyLCAxMjQ3NiwgMTE3OTgsIDEwOTQ2LCAwLCA1MDAwLCAwLCAwLCAwLCAwLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNTgyLCAwLCAwLCAxMDMwMSwgMTAzMzMsIDEwMzk3LCAwLCAwLCA3Mzc5MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMCwgODI3NSwgMzg5MywgMCwgMCwgMCwgNzIyMSwgNDIxNDcsIAotICAgIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgMTI1MTYsIDAsIDAsIDExOTAxNywgNzQ1MzcsIDEwODkyLCAKLSAgICA4MjMxLCAwLCA2NDczLCA0MTk2OCwgMCwgNDE5NzMsIDM1OTEsIDQxOTY5LCAwLCAyNDUzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDM0OSwgMTA0MTMsIDQzNTkxLCA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDAsIDY4NywgMCwgMCwgMCwgCi0gICAgMTg0MCwgMCwgMCwgMTE5ODA5LCA0ODgzLCAyODUsIDQ3MjMsIDAsIDAsIDQ0NTksIDc0NTc3LCAwLCA0MTcyMCwgMTEwODksIAotICAgIDI0MCwgMTk5MDYsIDAsIDExOTI0OCwgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMCwgMCwgMCwgMCwgMCwgNDI2MzQsIDAsIAotICAgIDAsIDMwODEsIDExNDYzLCAxMjAyMzAsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgMTE5MDIzLCAKLSAgICAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCAxMjAyMzUsIDY2MjAxLCAwLCA2NjU3OCwgCi0gICAgNTAwMSwgNDE4NzksIDAsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCA3Mzg4OSwgNzQxODIsIAotICAgIDAsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgMCwgMTIwMDgzLCA2Mzg3MywgODQ5MSwgMCwgMCwgMCwgCi0gICAgNDUzMCwgNDI0MDksIDAsIDAsIDI3MjEsIDEyMDA3NCwgMTE5MDk2LCAxOTkyOSwgMCwgMTk0NTc0LCAwLCA0MjQyLCA0MjY0LCAKLSAgICAwLCAwLCA2NjE3OSwgNDI0MTIsIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIAotICAgIDQ0MzcsIDczOTQ4LCAwLCAwLCA2NTE3OSwgNDIxNzQsIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgCi0gICAgNDEzODAsIDAsIDAsIDAsIDY2NjY3LCAwLCAwLCAwLCAxMjA1NzgsIDQyNTY2LCAwLCAwLCA1MDg4LCA2OTQ4LCAwLCA4NTI0LCAKLSAgICAwLCAwLCAxMjM4NSwgMCwgMCwgMCwgMTM4NiwgNjUwMzQsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCAKLSAgICA2NTAzNiwgODA2NCwgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMCwgNzEwLCAwLCAxMTY2MywgMTY2NiwgNDIwOTEsIAotICAgIDExOTY1NywgMTIzODMsIDAsIDQyMDkyLCAwLCA0Mjg5LCAwLCA2Mzg5NiwgMTIwNjEsIDQyMDk2LCAwLCAzMzYyLCAxMjM3NywgCi0gICAgMCwgMCwgMCwgNzQ2MSwgNzM5MDEsIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIAotICAgIDAsIDEyMzc5LCAwLCAxMjA4MTgsIDQxOTY0LCAwLCA2Mzg0MywgMTIzODEsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgCi0gICAgNjM4NDAsIDAsIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAxMjkzMywgNDMxNzcsIDEyMzczLCAwLCAxMzAwMCwgMTM1MSwgMCwgCi0gICAgODY5OCwgMTI2NjUsIDAsIDE5MzAsIDAsIDAsIDEyNDI3LCAwLCAwLCAxMzAzMSwgMCwgMCwgMCwgMzY1NywgMCwgNjUyMDIsIAotICAgIDYwMDAsIDAsIDEyNDI2LCAwLCAwLCA0MTc0MCwgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgCi0gICAgOTY5NSwgMCwgNzU2MiwgMCwgNTE3MCwgMCwgNDE3NTUsIDY3NiwgMCwgMCwgNjY2NjQsIDc0NDI3LCAwLCAzNTM2LCAwLCAKLSAgICA5NzUyLCAwLCA2MTYyLCAwLCAwLCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIAotICAgIDAsIDEyMDUzMiwgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIAotICAgIDAsIDY3ODY0LCA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIDAsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgCi0gICAgNjM4NjEsIDAsIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIAotICAgIDAsIDc0NTYwLCA0MTM3LCA4MDgyLCAwLCAxMTkwNjIsIDAsIDAsIDQ1OTEsIDAsIDAsIDAsIDk2ODAsIDAsIDEyMDYyMywgCi0gICAgNTYxLCAxMjE1OSwgMTk1LCAwLCA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDAsIDgzNjgsIDAsIDQxNDk5LCAwLCAwLCAKLSAgICA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDAsIDY1ODA1LCA0MjQ2MywgMCwgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAKLSAgICAxMTkyMTMsIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgCi0gICAgNzI0NiwgNDIwODYsIDkxNzc5MCwgOTE3Nzg5LCAwLCAwLCAwLCAwLCAwLCAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCAKLSAgICA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgOTE3NzgwLCA5MTc3NzksIDEyNDMxLCA4NjY4LCAxMjQzNCwgMCwgOTE3NzgyLCAKLSAgICA1OTk5LCAwLCA3NzEyLCAxMjQzMiwgMCwgMCwgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgMCwgNDI0MjMsIDExOTA2NiwgMCwgCi0gICAgMCwgNjY3MDksIDAsIDg4MTEsIDkyNywgMCwgMCwgMTI0MzYsIDAsIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgNDIzNTAsIAotICAgIDY1MTQzLCAwLCAxOTUwMTYsIDAsIDAsIDExMzQ4LCAwLCAwLCAwLCAwLCAwLCAxOTkxNCwgMTIxNzksIDAsIDk2NDgsIDAsIAotICAgIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIAotICAgIDAsIDExMjY1LCAwLCAwLCAwLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCA5MTc3NjYsIDEyNDE2LCA5MTc3NjQsIDExOTYwOCwgCi0gICAgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgMTU3MywgMCwgMTE5ODQ3LCAKLSAgICA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCA2NTM0MywgMTk0NzgyLCAxMjQxNCwgODI4NywgMCwgMCwgNjgxMDgsIDExNDMsIAotICAgIDExOTE2OSwgMCwgMTI0MTUsIDY2MjYsIDQyNzYzLCAwLCAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIAotICAgIDEyNzEwNCwgMTk0Nzk0LCAwLCAwLCA4MDI3LCAxMDk5NywgOTE3MSwgMTI3NDEsIDExNDAwLCA3NDE5NywgMTk0Nzk5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjAxOTAsIDE5NDc3MywgMCwgMTk0NzcyLCA0MjM2OCwgMCwgNzcxNSwgMzg4MSwgNDE0ODcsIAotICAgIDEyMTE4LCA0MjUxNCwgMCwgMCwgMCwgMzAwOSwgNDE0NzYsIDQxNDg5LCAwLCAzMDA3LCAxNDQ4LCAzMDE4LCAwLCAzODg5LCAKKyAgICAxMTkwMTQsIDAsIDQyMzg5LCA0MTM3NCwgMCwgMCwgNzg0OTIsIDQxMzc3LCAwLCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIAorICAgIDAsIDY2NjEsIDAsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAwLCA3NDc1NSwgMCwgMzQ3MywgNzcxOCwgMCwgMCwgMCwgCisgICAgNTUyODUsIDAsIDAsIDAsIDExOTY5LCAwLCAwLCA2MzY1LCAxODg3LCA2NzYzLCAwLCA4MDgwLCA3MDA2LCAwLCAwLCA2NzU3LCAKKyAgICAwLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCAwLCA2MTQ2LCAwLCA3NzEsIDAsIDAsIDEyODEyLCAxMzE2OCwgCisgICAgNDIyNzIsIDEyMjAwLCA5MTc5MjcsIDc5MDQsIDAsIDk1MywgMTI5MTcsIDAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgCisgICAgMTAzNDEsIDAsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCA0NzEsIDc0ODQsIDc0ODIsIAorICAgIDY3NTMsIDc0ODAsIDc0NzksIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIDc0NzIsIDI0NzQsIDc0NzAsIAorICAgIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDAsIDEyMDIyMiwgMTAwNDksIDc4ODg0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgCisgICAgMCwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAxMjA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE5OTYxLCAyNDcyLCA0MjY2NSwgMTIwNjk5LCAwLCA2MDE5LCA0MjU2LCAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgCisgICAgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgNjU2NzEsIDEyMDAwMCwgMTIwMDA4LCA4MDY2LCAKKyAgICA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMCwgMCwgMCwgODMzMCwgCisgICAgMCwgMCwgNDI3OTcsIDAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgMTc3MCwgMCwgMCwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIAorICAgIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgMCwgMCwgMCwgMTA4MSwgNzQzNiwgNjg0MjAsIAorICAgIDcyNTIsIDAsIDU5OTYsIDAsIDQ5MDMsIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDQyODQ4LCAwLCAxMjA0NywgCisgICAgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIDYzMjQsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAxMjE4NiwgMCwgMCwgCisgICAgMCwgMTI3MTUsIDAsIDAsIDAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIDExOTE1NywgMCwgMCwgMCwgMTI2OTg0LCAwLCAKKyAgICA5MzM0LCAwLCAxMjczMTAsIDAsIDc5NzUsIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDAsIDAsIDAsIDYzMTMsIAorICAgIDY1NTEzLCAwLCAwLCAwLCAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDAsIAorICAgIDAsIDQyMjc5LCAxOTQ1NzcsIDAsIDc4NDE1LCAwLCAwLCAwLCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgCisgICAgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgNDIyNDcsIDEyMzc4LCA3MzkyNSwgMTI3MjMzLCAwLCAxMjM3NCwgMCwgMCwgMCwgCisgICAgMCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAwLCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgNTg3MCwgMCwgCisgICAgMjAyNCwgMCwgMCwgMCwgNTM5LCAwLCAwLCAwLCAzODUzLCA2NTE4MCwgMCwgMTIwNzk2LCAxMjAyNDUsIDAsIDAsIDg2NTksIAorICAgIDAsIDEyNDc0LCAwLCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCAwLCAxMjAwODksIAorICAgIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAxMDk0NiwgMCwgNTAwMCwgMCwgMCwgMCwgMCwgODIxMywgCisgICAgNzQwMTcsIDc3NzEsIDYxNjEsIDAsIDY3MDksIDAsIDc4ODg1LCAwLCAxOTQ4OTIsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAKKyAgICAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAwLCAwLCAwLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAwLCAKKyAgICA4Mjc1LCAzODkzLCAwLCAwLCAxMjc1NTUsIDcyMjEsIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIAorICAgIDEyNTE2LCA0NDQ0LCAwLCAxMTkwMTcsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCisgICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDAsIDAsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCA0MTk2MiwgCisgICAgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDAsIDY4NywgMCwgMCwgMCwgMTg0MCwgMCwgNjg2NzEsIDExOTgwOSwgCisgICAgNDg4MywgMjg1LCA0NzIzLCA3NzkyNywgMCwgNDQ1OSwgNzQ1NzcsIDAsIDQxNzIwLCAxMTA4OSwgMjQwLCAxOTkwNiwgMCwgCisgICAgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDAsIDAsIDAsIDAsIDAsIDQyNjM0LCAwLCA0MzQzNywgMzA4MSwgCisgICAgMTE0NjMsIDEyMDIzMCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAxMTkwMjMsIDE3MjksIDAsIAorICAgIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDEyMDIzNSwgNjYyMDEsIDAsIDY2NTc4LCA1MDAxLCAKKyAgICA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCA3Mzg4OSwgNzQxODIsIDAsIAorICAgIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgMCwgMTIwMDgzLCA2Mzg3MywgODQ5MSwgMCwgMCwgMCwgNDUzMCwgCisgICAgNDI0MDksIDAsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIAorICAgIDEyMDA3NywgMCwgNjYxNzksIDQyNDEyLCA2NTk0MSwgMTMxMTQsIDY0NTIyLCAxMDc0MCwgMzA5NCwgMCwgOTc1NCwgCisgICAgMTE5MTAyLCA0NDM3LCA3Mzk0OCwgMCwgMCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgCisgICAgNjYwMjYsIDQzMDYsIDQxMzgwLCA2ODQzMiwgMCwgMCwgNjY2NjcsIDEyNzMwOSwgMCwgMCwgNDIyMDAsIDQyNTY2LCAwLCAwLCAKKyAgICA1MDg4LCA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgMCwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCAKKyAgICA2NTAzOSwgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCAKKyAgICA3Nzk5OSwgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCAKKyAgICA2Mzg5NiwgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgMTIzNzcsIDAsIDAsIDY4NDQ5LCA3NDYxLCA3MzkwMSwgMTI0NCwgCisgICAgMzMxLCA3Mzc4NiwgMTI2ODMsIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgMCwgMTIzNzksIDE5NDg3NywgMTIwODE4LCAKKyAgICA0MTk2NCwgNDIyMDgsIDYzODQzLCAyMDg0LCA0MTk2NSwgMCwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCA3ODU0OSwgNDEyMjAsIAorICAgIDEzMDMyLCAwLCA1ODQsIDEyOTMzLCA0MzE3NywgMTIzNzMsIDAsIDEzMDAwLCAxMzUxLCAwLCA4Njk4LCAxMjY2NSwgMCwgCisgICAgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgMCwgMTMwMzEsIDAsIDYzOTAxLCAwLCAzNjU3LCAwLCA2NTIwMiwgCisgICAgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMCwgMCwgNDE3NDAsIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgCisgICAgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgCisgICAgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDAsIDYxNjIsIDAsIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAKKyAgICAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgCisgICAgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgCisgICAgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgCisgICAgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCAKKyAgICA3ODUwNCwgNjcwNCwgNDU5MSwgMCwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCAKKyAgICA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCAKKyAgICA5MTc3OTQsIDQyMDI1LCA3ODU2NywgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgCisgICAgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCAKKyAgICA0MjA4NiwgOTE3NzkwLCA5MTc3ODksIDAsIDAsIDAsIDAsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCA5MTc3NzYsIAorICAgIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCAwLCA5MTc3ODIsIAorICAgIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAwLCA0MzY1MywgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgMCwgNDI0MjMsIDExOTA2NiwgCisgICAgMCwgMCwgNjY3MDksIDAsIDg4MTEsIDkyNywgMCwgMCwgMTI0MzYsIDAsIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgCisgICAgNDIzNTAsIDY1MTQzLCAwLCAxOTUwMTYsIDAsIDc4MTk3LCAxMTM0OCwgMCwgNzgwMzcsIDAsIDAsIDAsIDE5OTE0LCAKKyAgICAxMjE3OSwgMCwgOTY0OCwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCAKKyAgICA2MzgxNywgNjQ2NTEsIDAsIDQxNTAzLCAwLCAxMTI2NSwgMCwgMCwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAwLCAKKyAgICA5MTc3NjYsIDEyNDE2LCA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIAorICAgIDg1MzIsIDkxNzc3MSwgMTU3MywgMCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCA2NTM0MywgMTk0NzgyLCAKKyAgICAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMCwgMTI0MTUsIDY2MjYsIDQyNzYzLCAKKyAgICAwLCAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIDEyNzEwNCwgMTk0Nzk0LCAwLCAwLCA4MDI3LCAKKyAgICAxMDk5NywgOTE3MSwgMTI3NDEsIDExNDAwLCA3NDE5NywgMTk0Nzk5LCAwLCAxOTQ3OTgsIDAsIDAsIDAsIDEyNzUyMywgCisgICAgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxOTQ3NzIsIDQyMzY4LCAwLCA3NzE1LCAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCAKKyAgICA2ODY1MSwgMCwgMCwgMzAwOSwgNDE0NzYsIDQxNDg5LCA2OTgyNSwgMzAwNywgMTQ0OCwgMzAxOCwgMTk0ODA5LCAzODg5LCAKICAgICA4NTIxLCA1MDgzLCA1MDgyLCAxMTk4NTksIDEyMDE4NCwgODUxOSwgMCwgMzAxNCwgNTA4MSwgNjU4NTMsIDAsIDAsIAotICAgIDEyMDE4MywgMCwgNTA3OSwgNjQ4MDIsIDY1MDk1LCA0NTk3LCA2NTUzMiwgMCwgMCwgMTIzNzEsIDAsIDg0MDcsIDAsIAotICAgIDEwODA1LCA4NTE4LCAxMDc3OSwgMTIwMTg4LCAwLCAwLCAxMjM2NywgNDIxNzAsIDAsIDAsIDYyOSwgMTkyNCwgMCwgCi0gICAgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgNjY2ODksIDAsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCAwLCAKLSAgICA1MDc3LCAxMjcxMDgsIDEwODgwLCA2MzkyNywgNTA3NSwgMCwgMCwgNjUwNzUsIDAsIDExMDA3LCAwLCA2NjY1OSwgMCwgMCwgCi0gICAgNjY2ODQsIDAsIDM0MzQsIDQ5NTQsIDE5MDQsIDAsIDUyNjYsIDEyNjk4MCwgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIAotICAgIDYzOTIzLCAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIDE5NDkyNiwgNDYxLCA5ODAzLCAwLCA0NTA0LCAxNTA1LCAwLCAwLCAKLSAgICA1Mjc2LCA0MzAyMSwgMCwgMCwgMCwgMCwgNjY0NjEsIDUxNzcsIDQxMzI0LCAxMjA1NSwgODcyMiwgMCwgNDEzMjcsIDAsIAotICAgIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIDg5NDgsIDQxMzI1LCAwLCA3MjEsIDEwMTgyLCA5MTA4LCAwLCAwLCAKLSAgICAxMTkxODUsIDAsIDAsIDAsIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDAsIDAsIDAsIDAsIDAsIDQxNTc2LCAKLSAgICA3NDEyMSwgMCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgNjM5NDksIAotICAgIDAsIDI2NzAsIDQxNjcsIDAsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNzM4NTcsIDczODU0LCAxMTczNywgCi0gICAgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDAsIDAsIDExNDkzLCAxMjMzNCwgMCwgNDE1MywgMTIzMDIsIDEwNzkzLCA1MjUwLCAKLSAgICAxMjQwNywgMTE5NzgsIDQ0MDQsIDkxODksIDEyNDAxLCA0MjAwNywgNTc3NSwgNDIwMDUsIDY1ODA2LCAwLCAwLCA0MjAwMiwgCi0gICAgMTI0MDQsIDAsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCAwLCA0OTgzLCAwLCA4NjEsIDAsIDAsIDAsIDAsIDY1NTc3LCAKLSAgICAwLCAwLCAwLCAxMTk1NiwgMCwgMCwgMCwgOTYxNiwgNjYzMSwgMCwgMTI4MTYsIDc0NTgzLCAwLCAxMjcxMCwgMCwgMTI3MjEsIAotICAgIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAwLCAwLCAxMjU3NywgMCwgMCwgODUzLCAwLCAwLCAwLCAwLCA1MDE2LCAKLSAgICA0MzUzNSwgMCwgNDI4MzUsIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgOTE3OTE5LCAwLCA2NTA2MCwgCisgICAgMTIwMTgzLCA3ODIxOSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCA0NTk3LCA2NTUzMiwgNzg0NDQsIDEyMDE4NSwgMTIzNzEsIDAsIAorICAgIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgMTIwMTg4LCAwLCAwLCAxMjM2NywgNDIxNzAsIDAsIDAsIDYyOSwgMTkyNCwgCisgICAgMCwgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgNjM5MzMsIDEyNzM3MCwgMTIwODE1LCAxMjM2OSwgCisgICAgMTA2NDksIDAsIDUwNzcsIDEyNzEwOCwgMTA4ODAsIDYzOTI3LCA1MDc1LCAwLCAwLCA2NTA3NSwgMCwgMTEwMDcsIDAsIAorICAgIDY2NjU5LCAwLCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCA1MjcyLCAxMDQ5OSwgCisgICAgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIDk4MDMsIDAsIDQ1MDQsIAorICAgIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAwLCAwLCA1NTIzNiwgMCwgNjY0NjEsIDUxNzcsIDQxMzI0LCAxMjA1NSwgCisgICAgODcyMiwgMCwgNDEzMjcsIDAsIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIDg5NDgsIDQxMzI1LCAwLCA3MjEsIAorICAgIDEwMTgyLCA5MTA4LCAwLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgCisgICAgMTI1ODcsIDAsIDc4NTcxLCAwLCAwLCAwLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIAorICAgIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDAsIDExNzIzLCAwLCAKKyAgICA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDAsIDAsIAorICAgIDExNDkzLCAxMjMzNCwgMCwgNDE1MywgMTIzMDIsIDEwNzkzLCA1MjUwLCAxMjQwNywgMTE5NzgsIDQ0MDQsIDkxODksIAorICAgIDEyNDAxLCA0MjAwNywgNTc3NSwgNjc1OSwgNjU4MDYsIDQzOTk3LCAwLCA0MjAwMiwgMTI0MDQsIDAsIDAsIDQ5NDAsIAorICAgIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgNDk4MywgMCwgODYxLCAwLCAwLCAwLCAwLCA2NTU3NywgNDMzNzAsIDAsIDAsIAorICAgIDExOTU2LCAwLCAwLCAwLCA5NjE2LCA2NjMxLCAwLCAxMjgxNiwgNzQ1ODMsIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCAKKyAgICA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgNzYxNiwgMCwgMCwgMTI1NzcsIDAsIDAsIDg1MywgNDI2OTMsIDAsIDAsIDAsIDUwMTYsIAorICAgIDQzNTM1LCA2Mzg5MywgNDI4MzUsIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgOTE3OTE5LCAwLCA2NTA2MCwgCiAgICAgMTIwNzk3LCA5OTAwLCAwLCAwLCAxOTQ5MTksIDAsIDAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDAsIDEyMTc3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OTAwLCAwLCAwLCAwLCA4OTg0LCA0MTE5LCAwLCA4OTcxLCAwLCA0MzExMywgOTcwMiwgMCwgMTEwMjUsIAotICAgIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCAwLCAxOTQ5MjEsIDAsIDEyMzk3LCAwLCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIAotICAgIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgNTAxMCwgMTY4MCwgMTA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcyNjcsIDAsIDc0ODMzLCAwLCA1OTkzLCAyODE5LCAwLCAxMjcwNiwgMCwgMTg5MywgNzI2NiwgNjM5MTUsIDcyNjQsIAotICAgIDcyNjUsIDAsIDEzNjMsIDAsIDYzOTk3LCA2MzkxMCwgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDAsIDEyNTg5LCA0MTQ3OSwgCi0gICAgMCwgMCwgNDMzMzksIDAsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIAotICAgIDgxNywgMTY2NCwgMTg1MCwgMCwgMzA3OSwgMTEzNDAsIDQyNDA4LCA0MjQ0NywgMCwgMTIwMDIwLCA0MjMwNywgMTIzODYsIAotICAgIDQyMzA0LCAwLCAwLCAxMjM4OSwgMCwgMCwgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgMTE0NywgNjY2ODgsIDQyODg3LCAKLSAgICAxOTg3LCAwLCA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgCi0gICAgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgMCwgCi0gICAgMCwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgMTE5ODMwLCA3NzQsIDExOTgzMSwgMCwgMTE5ODE1LCA1OTk0LCAxMjUzOSwgMCwgCi0gICAgMTE5ODE3LCAxMjA1OTcsIDExOTgzMywgMCwgMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMCwgMCwgMTYyLCAwLCAKLSAgICA2NTIxOSwgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAwLCA1MjYyLCAwLCA2NjY1OCwgMTI2ODEsIAotICAgIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMCwgNDI4MTAsIDEwNDkyLCAwLCAwLCAwLCA0MzExOSwgMCwgMTIwNzUzLCAKLSAgICAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAwLCAwLCAwLCA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCAKLSAgICAwLCAxMzExMiwgMCwgMCwgMTI4NTksIDAsIDAsIDY2MzY5LCA1ODYxLCAwLCAxMTk5OSwgMTI0MDAsIDAsIDAsIDEyNjQ1LCAKLSAgICA1MTQ2LCAxMTMyMCwgMCwgNjc2MTIsIDY1MDQwLCAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgMTIwNjQ1LCAKLSAgICA1MTQ3LCAwLCAwLCA3NDUyNCwgMCwgMTkyOCwgMCwgMCwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCAKLSAgICA2NzYxMCwgODI0MSwgMCwgMCwgNDIwNiwgMCwgMCwgMCwgMCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDAsIDAsIDgzNTcsIAotICAgIDQxMjQsIDAsIDY1ODM2LCAxMjA2NDEsIDAsIDAsIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMCwgMCwgCi0gICAgMzk4LCAxMzI3OCwgOTcyMywgNDE1NTEsIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgMTA4OTYsIDEyNDAyLCAwLCA0MjM5MiwgCi0gICAgMTMwNSwgMTI0MDgsIDAsIDAsIDAsIDAsIDQxNDY0LCAxMjQxMSwgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDAsIDE5NTAxNywgCi0gICAgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMCwgMCwgMCwgCi0gICAgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDczNzc2LCAxMjM2OCwgMTk1MDE4LCAwLCA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAKLSAgICAwLCAwLCA1ODA1LCAwLCAwLCAwLCA0MjE3NiwgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAxMjM2NCwgMCwgMTIzNzIsIAotICAgIDEyMDY0MiwgMCwgMCwgMCwgMCwgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgMCwgCi0gICAgMTA4MDMsIDQxMzIsIDAsIDAsIDAsIDAsIDAsIDc0ODM3LCAwLCAxNDk5LCAwLCA4MDU1LCAwLCA2Mzk2NSwgMCwgNjM5NjIsIAotICAgIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgNjM5NjksIDExNzgxLCA2Mzk2OCwgODc4OCwgMTM1NywgNjQ4NTEsIAotICAgIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDY3NjE4LCAxMjAxNzIsIDAsIDE5MzMsIDAsIDk1NjQsIDAsIDAsIDczODY2LCAKLSAgICAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIDAsIDAsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAKLSAgICAwLCAwLCAwLCA2Njc1LCAwLCAwLCA2NzU5MiwgMTIwNjg1LCAwLCA2NDc3MSwgMTE5OCwgOTEzMiwgMCwgNjQ2MTksIDUxMCwgCi0gICAgNjQ2NjMsIDAsIDAsIDQ1NjEsIDc3MTEsIDEzOTgsIDAsIDAsIDc0MDM0LCA0MTU2OSwgMCwgMTE0MDYsIDgxNjcsIDEyMTI3LCAKLSAgICAwLCA4NDAsIDAsIDAsIDAsIDY5NjcsIDAsIDAsIDk3OTYsIDAsIDMzMywgMCwgMCwgODE0NCwgMCwgMCwgMCwgMTI0MDYsIDAsIAotICAgIDAsIDAsIDY2NzgsIDc3NjksIDAsIDEyNjIxLCAwLCAwLCAxMDIyNywgNDc2NCwgNDMxMDEsIDAsIDAsIDQwOTg2LCA0MTI3LCAKLSAgICA2NjQ4NywgMCwgMCwgMTI3NTQsIDE5NTAyMiwgMCwgMCwgMCwgNjc1OTQsIDY1NjA5LCAxMjk0NCwgNDA1MCwgNjc1OTUsIDAsIAotICAgIDQzMTAyLCAxMDU4MSwgMTI5ODUsIDQ1MzMsIDAsIDAsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAxMjA3MDQsIDY1NDYxLCAKLSAgICA5Nzk4LCAwLCAwLCAxOTQ4LCAxMTkwMDcsIDAsIDk1MiwgMCwgMCwgMCwgMTIwODAyLCA2NDQ5LCA5NDk0LCAwLCAwLCAKLSAgICA0MzA5OCwgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAwLCAwLCAxMjgxNywgNjc1OTcsIAotICAgIDY2NzYsIDM5MzAsIDY2NzA4LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgCi0gICAgMCwgODUwMCwgMCwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAxMjAxNDAsIDAsIDY0Njc2LCAwLCAwLCA2NzYwNiwgCi0gICAgMTE5MDgzLCAwLCAwLCAxMzEwMiwgMCwgNjYwMDMsIDY2NzIsIDAsIDAsIDAsIDAsIDYzODQxLCA5NjEzLCA5MDAxLCA0NTI2LCAKLSAgICAxMTI3NCwgNjc2MDEsIDY0NTIwLCA2NDIxMCwgNjY2NCwgMCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIAotICAgIDY0MjEzLCAxNDY5LCA2NjY0MCwgNjUzODEsIDAsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgMCwgMTQ1MSwgCi0gICAgODA2MSwgODQ1MywgNDEzNCwgMCwgNzQ4NDcsIDY3NjAwLCAwLCAwLCAxMDUyMCwgODU3NSwgMCwgMTIwMSwgMCwgMTI4NDYsIAotICAgIDAsIDAsIDExOTE5LCA2NDk2MiwgMCwgNzQ4NjQsIDAsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgCi0gICAgMCwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIAotICAgIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCA5ODIxLCAwLCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgCi0gICAgMTIwMTIxLCA2NDQxMCwgMCwgMCwgNDMyMywgMTIwMDYyLCAwLCAwLCAwLCA0MjU4NywgNjUzMzksIDQxMzk0LCAwLCA0NzYzLCAKLSAgICA0MTEyLCAxMTg5MzUsIDAsIDUyNjAsIDQzMTQzLCAwLCAzMjYsIDEyMDEzMSwgMCwgMCwgMTA3NzEsIDI4NzYsIDE5NDkxNSwgCi0gICAgMTk0ODM1LCAxOTQ5MjQsIDQxMzk4LCAxMjcwNzksIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIAotICAgIDAsIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAwLCAwLCA0MzE0NCwgNDEyMywgMCwgCi0gICAgNDMxNDYsIDAsIDAsIDAsIDY1NzU5LCAxMDc2NSwgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgNDEyNiwgMCwgCi0gICAgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIDY0MDIwLCAwLCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgMTE1MjgsIDY0MDI0LCAKLSAgICAwLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDAsIDQxNDQxLCAxMDY5MywgNjQwMDYsIDAsIDY0MDA1LCAKLSAgICAxMDU0MSwgMTE5MDE5LCAwLCA2NDY2MCwgMCwgMTE5MDUwLCAwLCAwLCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCAKLSAgICA4OTcwLCAwLCA2NDAwMCwgMCwgMTA3NzQsIDAsIDQyNTIyLCAxMjQyMSwgMTk0ODc2LCAwLCAxODUyLCAzMDU3LCAwLCAKLSAgICA3Mzc0NCwgNjQwMzQsIDY0MDQxLCAwLCAwLCAwLCAwLCAwLCA3NjQ1LCAxMjg1NCwgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIAotICAgIDkxMDIsIDYyNywgMCwgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMCwgMTE1NzAsIDAsIDE5OTYwLCAxMTY5NiwgCi0gICAgMCwgMTAxOCwgMCwgMTk0OTA5LCAwLCAxNjgyLCAxOTQ4OTYsIDAsIDQyNzU2LCAxMjk1MSwgMTk0OTA2LCAwLCAwLCAKLSAgICA3MzgxNCwgMTE0MTIsIDEyNTYzLCAxMDcyOCwgMTk0ODMwLCAwLCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgMTE1NzcsIDAsIAotICAgIDQzMDQwLCAxODMzLCAxMTU3NiwgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgMTk0ODQ4LCA3NTM1LCAKLSAgICA4MDg1LCA0MjUyNSwgMTIwMzg3LCA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgMTIwNDg5LCAwLCAKLSAgICA2NDQ4MywgNjU2OTMsIDAsIDAsIDAsIDAsIDQyMjQwLCAwLCAwLCA0Mjg2NCwgMCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCAKLSAgICA4MTUsIDExNDg0LCAwLCA2Nzg0MCwgMCwgMCwgMCwgMCwgMCwgNjQ2ODMsIDAsIDAsIDAsIDAsIDAsIDk4NzksIDAsIDAsIAotICAgIDQxNTgsIDAsIDY4MTY2LCAwLCAwLCAwLCAwLCAwLCAzMzIsIDExODgwOCwgMCwgNTE0MiwgMjQwNywgMCwgMCwgMCwgMCwgCi0gICAgNzQzNzMsIDAsIDAsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgMTE5MDgxLCA0Mjg2NywgMTgzNCwgMCwgMCwgMCwgMTA5NDAsIAotICAgIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIDI2NTIsIDEyMDUyNywgMTE1MzksIDEwNzg0LCAxOTUwOTMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDExODg1OCwgOTE3NTA1LCAxODI4LCA3NDQ3NCwgMTIwMzI3LCAwLCA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIAotICAgIDExODg1NCwgNjUyMzgsIDAsIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAKLSAgICAxNjIwLCAwLCAzNjAxLCAwLCAwLCAwLCA2MDksIDExNTU1LCAwLCAxMjQ5NiwgMCwgNzQxODEsIDQzNDMsIDEyNTA1LCAwLCAKLSAgICAwLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQzMDI5LCAwLCAwLCAwLCA0MzU2NSwgMTI3MDgyLCAwLCAxMjY5NiwgCi0gICAgMCwgMCwgMCwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgMCwgNDI4MTgsIDAsIDAsIDEyMDQ5MCwgMCwgMCwgMTUwNiwgCi0gICAgNDM1NjIsIDAsIDAsIDAsIDEyNjUxLCAwLCA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCAKLSAgICA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIAotICAgIDEyMDMzLCA0MjE3OCwgMCwgMCwgNDI1NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNzgsIDAsIDAsIDAsIDAsIDkwODAsIAotICAgIDEyNzAwMCwgMCwgMCwgMCwgMCwgMTEwODIsIDAsIDU2OTksIDE5NTEwMCwgMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTI2NSwgMCwgMCwgMTE0ODcsIDY3ODU4LCAxMjQ2NCwgMCwgNDMwNDUsIDAsIDAsIDQzMzQ1LCAwLCAKLSAgICAxMDc3MCwgMTE4OTk0LCA0MzM0NCwgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgNDMzNDYsIDgxMTYsIDc5NSwgMCwgMCwgCi0gICAgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgMCwgMCwgMTIwODExLCAwLCAxMjQ2OCwgODYwNywgCi0gICAgMTAwOCwgMCwgMTAwOTIsIDAsIDkxNzg0MiwgNjc4NTUsIDAsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIAotICAgIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAwLCA2NDU5NSwgMCwgMCwgMCwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAKLSAgICAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIDY0OTUzLCA1NDA2LCAxOTkyMCwgMCwgNjY1MTAsIDM1OTAsIDAsIAotICAgIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDAsIDkzMjYsIAotICAgIDczODI2LCA1MzEwLCA3NDgxMiwgMCwgMTE5OTYyLCA4OTU5LCA0MzU4OSwgNzQzMzQsIDY2NzIzLCAwLCA4NTY4LCAwLCAKLSAgICAxMjA0OTYsIDczODE2LCAxMjA4MDMsIDAsIDAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMCwgMCwgMCwgNzQ1MTksIDAsIDAsIDAsIAorICAgIDAsIDc3ODI0LCAwLCA0OTAwLCAwLCAxMjg3OCwgMCwgODk4NCwgNDExOSwgNzQ3NjgsIDg5NzEsIDc4NTkzLCA0MzExMywgCisgICAgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgNzQxODUsIDE5NDkyMSwgMCwgMTIzOTcsIAorICAgIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgNTAxMCwgCisgICAgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCA3MjY3LCAwLCA3NDgzMywgMCwgNTk5MywgCisgICAgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIAorICAgIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgMCwgMTI1ODksIDQxNDc5LCAwLCAwLCA0MzMzOSwgMCwgOTgzNiwgCisgICAgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAxNjY0LCAxODUwLCAwLCAKKyAgICAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCAxOTQ3MDQsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgMCwgMCwgCisgICAgMTIzODksIDAsIDE5NDY5NCwgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgMTE0NywgNjM5OTIsIDQyODg3LCAxOTg3LCAwLCAKKyAgICA1NDgwLCA3ODU4LCAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIAorICAgIDYzOTA1LCAxMTk2MDEsIDE5NDY4OCwgMCwgMCwgMTI2NDksIDAsIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgCisgICAgNDM2NDMsIDE5NDY4OSwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgMTE5ODEzLCA3NzQsIDExOTgzMSwgMCwgMTE5ODE1LCA1OTk0LCAKKyAgICAxMjUzOSwgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCAwLCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDAsIAorICAgIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAwLCA1MjYyLCAKKyAgICAwLCA1NTIzMywgMTI2ODEsIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMTI3NTI4LCA0MjgxMCwgMTA0OTIsIDAsIDAsIDAsIAorICAgIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDAsIDAsIDAsIDc0MTEzLCAyMzQzLCAKKyAgICA0MTAzLCAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMCwgMCwgMTI4NTksIDAsIDEyMDE0OCwgNjYzNjksIDU4NjEsIDAsIAorICAgIDExOTk5LCAxMjQwMCwgMCwgMCwgMTI2NDUsIDUxNDYsIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIDAsIDY0MTg0LCAKKyAgICAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCA2NzY0OSwgNTk5MSwgCisgICAgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwMTM4LCAwLCAwLCA4ODk3LCAwLCAwLCA4MzU3LCA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMCwgNzc4NTksIDAsIAorICAgIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAwLCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAKKyAgICAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIDk5NzAsIDEyNDAyLCAwLCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAKKyAgICAwLCA0MTQ2NCwgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIDQxNDY1LCAwLCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAKKyAgICAzMDI0LCA0MTQ2NywgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAwLCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIAorICAgIDczNzc2LCA2NzUwLCAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDAsIDAsIDU4MDUsIDAsIDY3MjYsIAorICAgIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDEyMzY0LCAwLCAxMjM3MiwgMTIwNjQyLCAxMjAzMDcsIAorICAgIDAsIDAsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIDAsIDEwODAzLCAKKyAgICA0MTMyLCAxMjAzMDYsIDY4NDc0LCAwLCAwLCAwLCA3NDgzNywgMCwgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIDYzOTY1LCAwLCAKKyAgICA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDQyNzE4LCA4Nzg4LCAxMzU3LCAKKyAgICA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCAwLCAxOTMzLCAxMjAxNTQsIDk1NjQsIDAsIAorICAgIDAsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgMTgwNCwgMzMxMSwgNjc2MTUsIDAsIDc4MzAyLCAxMjIyMCwgCisgICAgNjc2MTYsIDEyMDU5OCwgMCwgMCwgNjgyMDAsIDY2NzUsIDAsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCAKKyAgICA5MTMyLCAwLCA2NDYxOSwgNTEwLCA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgMCwgNzQwMzQsIDQxNTY5LCAKKyAgICAwLCAxMTQwNiwgODE2NywgMTIxMjcsIDAsIDg0MCwgMCwgMCwgMCwgNjk2NywgMCwgMCwgOTc5NiwgMCwgMzMzLCAwLCAwLCAKKyAgICA4MTQ0LCAwLCAwLCAwLCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgMTI2MjEsIDAsIDAsIAorICAgIDEwMjI3LCA0NzY0LCA0MzEwMSwgOTk4MSwgMCwgNDA5ODYsIDQxMjcsIDY2NDg3LCAwLCA0MjIwMiwgMTI3NTQsIDE5NTAyMiwgCisgICAgMCwgMCwgMCwgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCAKKyAgICA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgMCwgMCwgCisgICAgMTk0OCwgMTE5MDA3LCAwLCA5NTIsIDAsIDAsIDAsIDEyMDgwMiwgNjQ0OSwgOTQ5NCwgMTIwMzEzLCAwLCA0MzA5OCwgCisgICAgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAwLCAwLCAxMjgxNywgNjc1OTcsIDY2NzYsIAorICAgIDM5MzAsIDY2NzA4LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgMCwgCisgICAgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgCisgICAgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgMCwgNjM4NDEsIDk2MTMsIAorICAgIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgCisgICAgMTEyODEsIDAsIDY0MjEzLCAxNDY5LCA2NjY0MCwgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgOTA0LCAKKyAgICAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDAsIDAsIDEwNTIwLCA4NTc1LCAKKyAgICA5OTYwLCAxMjAxLCAwLCAxMjg0NiwgMCwgMCwgMTE5MTksIDY0OTYyLCAwLCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCAKKyAgICA4MjMsIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDAsIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgNDI3ODMsIAorICAgIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgCisgICAgOTgyMSwgMCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgMCwgMCwgNDMyMywgMTIwMDYyLCAwLCAwLCAKKyAgICAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDAsIAorICAgIDMyNiwgMTIwMTMxLCA2ODQyMywgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCAxOTQ4MzUsIDE5NDkyNCwgNDEzOTgsIDczODIsIAorICAgIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAxMjE0MCwgOTU3MiwgMCwgNzAwMywgCisgICAgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMCwgMCwgNDMxNDQsIDQxMjMsIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgCisgICAgMTA3NjUsIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCAKKyAgICA2NDAyMCwgMCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIDExNTI4LCA2NDAyNCwgMCwgNjc5LCA2NDAxMywgMCwgCisgICAgNTg1MCwgNzU4LCA3NTM2LCAwLCAwLCA0MTQ0MSwgMTA2OTMsIDY0MDA2LCAwLCA2NDAwNSwgMTA1NDEsIDExOTAxOSwgMCwgCisgICAgNjQ2NjAsIDAsIDExOTA1MCwgMCwgMCwgMTEzOSwgNDMyOTgsIDY0MDI3LCA2NDAyOSwgODk3MCwgMCwgNjQwMDAsIDAsIAorICAgIDEwNzc0LCAwLCA0MjIwMSwgMTI0MjEsIDE5NDg3NiwgMCwgMTg1MiwgMzA1NywgMCwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDAsIDYxNTgsIDgzMjcsIAorICAgIDc0NTUzLCA2NjYzMiwgMTI0MTksIDEzMzA5LCAxMTU3MCwgMCwgMTk5NjAsIDExNjk2LCAwLCAxMDE4LCAxMTg5NzAsIAorICAgIDE5NDkwOSwgMCwgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIDAsIDAsIDczODE0LCAxMTQxMiwgCisgICAgNjc2OCwgMTA3MjgsIDE5NDgzMCwgMTE5MDEwLCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgMTE1NzcsIDAsIDQzMDQwLCAxODMzLCAKKyAgICAxMTU3NiwgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgMTk0ODQ4LCA3NTM1LCA4MDg1LCA0MjUyNSwgCisgICAgMTIwMzg3LCA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgMTIwNDg5LCAxOTQ3MTEsIDY0NDgzLCAKKyAgICA2NTY5MywgMCwgMCwgMCwgMCwgNDIyNDAsIDAsIDAsIDQyODY0LCAwLCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgCisgICAgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDAsIDAsIDAsIDAsIDEwOTg2LCA2NDY4MywgMCwgMCwgMCwgMCwgMCwgOTg3OSwgMCwgCisgICAgMCwgNDE1OCwgMCwgNjgxNjYsIDAsIDAsIDAsIDAsIDAsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCAwLCA0MjE5OSwgCisgICAgMCwgMCwgNzQzNzMsIDAsIDU1MjE3LCAwLCA2Mzg3MCwgNDMxNjMsIDAsIDAsIDExOTA4MSwgNDI4NjcsIDE4MzQsIDAsIDAsIAorICAgIDY5ODE3LCAxMDk0MCwgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgMjY1MiwgMTIwNTI3LCAxMTUzOSwgMTA3ODQsIAorICAgIDE5NTA5MywgNjc2NzQsIDAsIDAsIDAsIDAsIDc0NTYyLCA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAzMjcsIDc4NjIwLCAKKyAgICA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIDExODg1NCwgNjUyMzgsIDY4Mzc0LCA0ODMyLCA2NTU3MywgMCwgNjI3OSwgCisgICAgMTI1MDgsIDEyOTA0LCAxMjUwMiwgOTE2MSwgMCwgMTYyMCwgMCwgMzYwMSwgMTk1MDk0LCAwLCAwLCA2MDksIDExNTU1LCAwLCAKKyAgICAxMjQ5NiwgMCwgNzQxODEsIDQzNDMsIDEyNTA1LCAwLCAwLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAKKyAgICAwLCAwLCAwLCA0MzU2NSwgMTI3MDgyLCAwLCAxMjY5NiwgMCwgMCwgMCwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgMCwgCisgICAgNDI4MTgsIDAsIDAsIDEyMDQ5MCwgMCwgMCwgMTUwNiwgNDM1NjIsIDAsIDAsIDAsIDEyNjUxLCAwLCA2NDYyOCwgNzQ1MTcsIAorICAgIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAxMjcwODgsIDM1NSwgOTcxOSwgCisgICAgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIDQyNTcxLCA5MTc4MzcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDMxNzgsIDAsIDAsIDAsIDAsIDkwODAsIDEyNzAwMCwgMTIwMzUyLCAwLCA2ODIwOSwgMCwgMTEwODIsIAorICAgIDAsIDU2OTksIDE5NTEwMCwgNjYwMDAsIDk0ODgsIDY1MTY2LCAxMTkxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNjUsIAorICAgIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIAorICAgIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgCisgICAgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCAwLCAxMjA4MTEsIDAsIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAKKyAgICAxMDA5MiwgMCwgOTE3ODQyLCA2Nzg1NSwgNTUyNTcsIDczNzcxLCAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIAorICAgIDAsIDAsIDAsIDEzMjIzLCAwLCA2NDU5NSwgMCwgMCwgMCwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCAKKyAgICA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIDY0OTUzLCA1NDA2LCAxOTkyMCwgMCwgNjY1MTAsIDM1OTAsIDAsIDExMzAsIDAsIDAsIAorICAgIDQyMDE2LCAxMTgyMywgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDAsIDkzMjYsIDczODI2LCA1MzEwLCAKKyAgICA3NDgxMiwgMCwgMTE5OTYyLCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIAorICAgIDEyMDgwMywgMCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDAsIDAsIDAsIAogICAgIDAsIDAsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgMTE1OTQsIDAsIDAsIDExODk5MCwgMTA0OTEsIAogICAgIDAsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgCi0gICAgNDIxMzMsIDEyMDc1NSwgOTcwNiwgMCwgMCwgNjY2MTAsIDEwNDYxLCAxMjEwMywgMCwgODY0MiwgMCwgNDI3NjYsIDAsIDAsIAotICAgIDAsIDAsIDExOTEwNSwgMCwgMCwgMCwgODgxNiwgNDE1MTUsIDAsIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgCi0gICAgMCwgMzY1OCwgMCwgMTIwNTI1LCAwLCA3NjE3LCAwLCAxMjg4OCwgMCwgMCwgMTMxNDMsIDAsIDQxNTE0LCAwLCA1NzAzLCAwLCAKLSAgICA0MTUxNywgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgCi0gICAgNjEzLCA3NTQzLCAxMjA3NzQsIDQ3NywgNDEwODMsIDAsIDAsIDU5MiwgMTU3OCwgMTI0NTksIDAsIDAsIDAsIDgyMjUsIDAsIAotICAgIDY1NCwgMTEzNDUsIDY1MywgNjUyLCAwLCA2NDcsIDAsIDYzMywgMTIwNzQ0LCAwLCAwLCAxMjQ4MCwgNzQzNTQsIDAsIDM5LCAKLSAgICAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAzMTk1LCA1NTUwLCAwLCA3ODk3LCAwLCAKLSAgICAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgMCwgMCwgMCwgMCwgCi0gICAgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDAsIDAsIDAsIDAsIDAsIDExODgyNywgMCwgMCwgMCwgMTE5NTYxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA2OTIsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCA3NDAzOCwgCi0gICAgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAwLCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIAotICAgIDAsIDkzMzIsIDQ5NjYsIDAsIDAsIDAsIDAsIDM4NDEsIDAsIDAsIDEwNzMyLCAwLCA4NTAsIDQ5NzIsIDAsIDY0Njk5LCAKLSAgICAyOTA5LCAwLCA2NTMwOSwgMCwgMCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAxMTk2MiwgMCwgMTI1MDcsIDExOTYsIDAsIAotICAgIDAsIDc3NywgMCwgNDM3NSwgNjUyNzEsIDAsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMCwgMCwgOTQ1NCwgNjM3NzgsIDg2NTgsIAotICAgIDQyNTI4LCAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgNDI1MDIsIDgyODAsIDAsIDI3MDEsIAotICAgIDAsIDAsIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCA2NjcwMSwgNjM3NzIsIDAsIDYzNzQ1LCAxNzQ4LCA2Mzc3MCwgCi0gICAgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCAwLCAzMDYxLCAwLCA2Mzc2NCwgNjM3ODksIDkwNjcsIDYwOTYsIDAsIDc2OTQsIDAsIAotICAgIDcyNTcsIDYzNzY4LCAzNDg1LCAxMjk4NywgMCwgMCwgMCwgNjM4MDcsIDE1OTEsIDAsIDAsIDYzNzgzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgCi0gICAgMzEzOCwgMTA5OTYsIDAsIDE5MjIsIDAsIDEyNDk4LCAxMDk4NywgMCwgMCwgMzg5NCwgNjU1NDMsIDAsIDE5NDg0MiwgMCwgCi0gICAgNDkzLCAwLCA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgOTE3OTM0LCAwLCA5MTc5MzUsIDEwMzM1LCAzNTIwLCAKLSAgICA5MTc5MzIsIDEyNDkwLCA2NDMxNSwgMCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNjQ2MzYsIDEwMDIsIDEyNDkxLCAwLCAKLSAgICA2NDkxMSwgMTI3MDQwLCAwLCA2NTEyMCwgMCwgMCwgMCwgMTE2MTEsIDY2MjI4LCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCi0gICAgNjYyMjEsIDY2MjI2LCA2NjIyOSwgMTMyMTgsIDY2MjMxLCA2NjIxNiwgODUwNywgNjYyMzYsIDY2MjExLCA2NjIxOCwgMCwgCi0gICAgNjYyNDAsIDAsIDY2MjMzLCA4OTI4LCAwLCA3OTA5LCA2NjIzNCwgMTE2MDUsIDYzNzU5LCAwLCA2NjIwOCwgNzM5OTksIAotICAgIDYzNzk5LCAwLCAyNDQsIDExNTQyLCAxMjg5OCwgMTI0OTQsIDczNzYxLCAxMjQ5MiwgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAKLSAgICAwLCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAKLSAgICAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCAwLCA2Mzc5MiwgMCwgNzI5MiwgMCwgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgCi0gICAgMTg3MCwgOTE3OTE2LCA0NzAsIDAsIDAsIDEyMDMwNiwgMCwgMCwgNDU3OSwgMCwgMCwgMTI1MTEsIDc0NDUzLCAxMjUxNCwgCi0gICAgMCwgNzQ1NzksIDcyMzksIDcwMDEsIDg2MjMsIDAsIDAsIDAsIDAsIDEyNTEyLCAxMTYxNSwgMTMwNDEsIDAsIDAsIDY1OSwgCi0gICAgNjA5OCwgMCwgMTIyMzQsIDAsIDEyNzA2NywgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgCi0gICAgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCAwLCAwLCAwLCAyMzIzLCAwLCAyMzE5LCAwLCAxMjQ3NywgMCwgMjMxMSwgMCwgCi0gICAgNDQxNSwgMjM3LCA2MjgxLCAwLCAwLCAwLCAyMzA5LCAxMzEyLCA4MTczLCAwLCAxMjQ2OSwgMCwgMCwgNjQzMzUsIDEwNjA5LCAKLSAgICAwLCAwLCA5Mzk3LCAxMTUyNCwgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgCi0gICAgOTM4OCwgNDkzMiwgOTM4NiwgOTM4MywgOTM4NCwgMCwgMCwgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCAKLSAgICA3NDM3NSwgMjMxMywgMCwgNzk0OCwgOTIzNiwgMCwgMCwgMCwgMTA1NzAsIDAsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgCi0gICAgMTIwODIsIDEwOTI0LCAzMTQ3LCAwLCAwLCAxMjUyNCwgMCwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIAorICAgIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDAsIDAsIDY2NjEwLCAxMDQ2MSwgMTIxMDMsIDAsIDg2NDIsIDAsIDQyNzY2LCAwLCAKKyAgICA2NjU2NiwgOTk4MywgMCwgMTE5MTA1LCAwLCAwLCAwLCA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgCisgICAgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCAwLCAxMjA1MjUsIDAsIDc2MTcsIDAsIDEyODg4LCAwLCA2NzY2OCwgMTMxNDMsIDAsIAorICAgIDQxNTE0LCAxMTA5NywgNTcwMywgMCwgNDE1MTcsIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAwLCA2NTg2NCwgNjIzLCAKKyAgICA3ODEsIDY3MCwgMTA2NjAsIDU3NjksIDYxMywgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCAwLCAwLCA1OTIsIDE1NzgsIAorICAgIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAKKyAgICAxMjA3NDQsIDAsIDAsIDEyNDgwLCA0MzI0MywgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgCisgICAgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDAsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAKKyAgICAwLCAyODc3LCAwLCAwLCAxNjc1LCAwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMCwgMCwgMCwgMCwgMCwgCisgICAgNDMyNDQsIDAsIDAsIDAsIDExOTU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc4NjAsIDAsIDAsIDI3MCwgMCwgMTA3MTQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCAxOTQ5MDgsIAorICAgIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgCisgICAgMCwgMzg0MSwgNjg2MzQsIDAsIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCA2NDY5OSwgMjkwOSwgNjg2MTksIDQ0MDA4LCAKKyAgICA2ODYyNywgMCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAxMTk2MiwgMCwgMTI1MDcsIDExOTYsIDAsIDAsIDc3NywgMCwgCisgICAgNDM3NSwgNjUyNzEsIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDAsIDAsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCisgICAgMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIDQyNTAyLCA4MjgwLCAwLCAyNzAxLCAwLCAwLCAKKyAgICA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgNjY3MDEsIDYzNzcyLCAwLCA2Mzc0NSwgMTc0OCwgNjM3NzAsIDAsIDAsIAorICAgIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgCisgICAgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCAKKyAgICA2NjY5MSwgNzYyNCwgMzEzOCwgMTA5OTYsIDAsIDE5MjIsIDAsIDEyNDk4LCAxMDk4NywgMCwgMCwgMzg5NCwgNjU1NDMsIDAsIAorICAgIDE5NDg0MiwgMCwgNDkzLCAwLCA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgCisgICAgMTAzMzUsIDM1MjAsIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgCisgICAgMTI0OTEsIDAsIDY0OTExLCAxMjcwNDAsIDIwOTYsIDY1MTIwLCAwLCAwLCAwLCAxMTYxMSwgNjYyMjgsIDEyNzA0MSwgCisgICAgNjYyMTMsIDYzODY0LCA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCA2NjIzNiwgCisgICAgNjYyMTEsIDY2MjE4LCAwLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCAwLCA3OTA5LCA2NjIzNCwgMTE2MDUsIDYzNzU5LCAKKyAgICAwLCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIAorICAgIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMCwgMTIwNjgwLCA0ODgyLCAxMzA0MCwgMCwgODYxMiwgNDg4NSwgNzQwNTMsIDAsIAorICAgIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCA2Mzc5NywgMCwgNDIzNTgsIDAsIDcyOTIsIDAsIAorICAgIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDAsIDc4MDM0LCAKKyAgICA0NTc5LCAwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgMCwgMCwgMCwgCisgICAgNzM3OCwgMTI1MTIsIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgCisgICAgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCAwLCAwLCAwLCAKKyAgICAyMzIzLCAwLCAyMzE5LCA3NzkxNywgMTI0NzcsIDc3OTE2LCAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDAsIDAsIDAsIAorICAgIDIzMDksIDEzMTIsIDgxNzMsIDAsIDEyNDY5LCAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAwLCA5Mzk3LCAxMTUyNCwgCisgICAgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgOTM4NiwgCisgICAgOTM4MywgOTM4NCwgNjc0MCwgMCwgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgMjMxMywgCisgICAgMCwgNzk0OCwgOTIzNiwgMCwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgMCwgMCwgMTE5OTgsIDEyMDgyLCAKKyAgICAxMDkyNCwgMzE0NywgMCwgMTIwNjg0LCAxMjUyNCwgMCwgMjMxMCwgMTE4MTgsIDkzODEsIDkzODIsIDkzNzksIDkzODAsIAogICAgIDkzNzcsIDkzNzgsIDkzNzUsIDkzNzYsIDE2ODMsIDkzNzQsIDAsIDkzNzIsIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgMCwgCi0gICAgNDIwMjksIDExMDc5LCAxMjMzMSwgMCwgNDIwMzIsIDg3NDQsIDcyNiwgMCwgMCwgNDE1NSwgMCwgMCwgNDIwMzAsIDUwMDcsIAotICAgIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgMCwgMCwgMCwgOTkyMiwgNDMzMDksIDAsIDEyNTI1LCAwLCAxMjAxNiwgNjU3NzAsIAotICAgIDk1NDgsIDAsIDQwMywgMCwgMTI1MDMsIDAsIDAsIDExMDMwLCAwLCAwLCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAKLSAgICAwLCAxMTk5MjAsIDAsIDAsIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIDY3NjA1LCAxMjUwOSwgNjQzOTMsIDAsIAotICAgIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgMTIwMzIxLCAwLCAwLCA3NDA2OSwgMCwgMCwgMzYwOCwgODI4MSwgOTE3ODM5LCAKLSAgICAxMTA3LCAwLCA5MDc2LCA4ODYyLCAwLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgMTMyMjIsIDExODk2MywgCi0gICAgNzQ3ODIsIDAsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDAsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgCi0gICAgMCwgMTI1MjksIDgwNDIsIDAsIDIzNDQsIDEyNTI4LCA4MDMxLCAyNDE0LCAwLCAwLCAzMjMxLCAwLCA2NDIyLCA2NjUxMiwgCi0gICAgMCwgMTI1MzAsIDI1MzcsIDAsIDQxNDI5LCAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCAwLCA0MTQzMywgNDcxOSwgNDY5LCAwLCAKLSAgICA0MzYzLCAzMzEzLCA0MTQyOCwgMCwgMjAyMywgMTc3MiwgMCwgMCwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgMCwgMCwgOTkyMCwgCi0gICAgMTIyMTUsIDAsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDAsIDk2NjMsIDAsIDExOTYzNCwgNjUwMywgCi0gICAgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDAsIDQxMDYxLCAwLCAwLCAwLCA2NTAyNiwgNDE5OTMsIDQxNTA5LCAxMTA0NSwgCi0gICAgNjUwMjgsIDAsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgNDE1MDYsIDAsIAotICAgIDQxNjg3LCAwLCAxMjA3MTcsIDAsIDkxNzgxNiwgMCwgNzY5MiwgMCwgODAwOCwgMCwgMzMwLCA4NTY2LCA2NTA4MywgCi0gICAgNDExMzMsIDk4MTYsIDAsIDEyNTMyLCAxMjcwNTUsIDEyNzA1NiwgMzUwOCwgMTI3MDU4LCAxMjcwNTksIDAsIDkxNzU0MiwgCi0gICAgOTE3ODE1LCAwLCA2NDExLCAxMjkxMCwgMTIwNTA1LCA2NjY0NCwgMTMwMjgsIDAsIDEyNTM3LCAwLCAwLCA2NDEzNiwgCi0gICAgMTI1MzYsIDIzNTAsIDEzMDI5LCAwLCAwLCAwLCAxMzAzMCwgMCwgNDUyNywgMCwgMTI1MzgsIDAsIDAsIDY1NTk5LCAKLSAgICA2NTcxNywgMTI2MDcsIDAsIDQ5NDgsIDEyNDg0LCA0MDMyLCAwLCA0MjgwMywgMCwgNjIwNywgMCwgNjExNywgNjYwMDAsIAotICAgIDg0MTIsIDAsIDc0MzgsIDEyOTYsIDIzMjUsIDQxNTExLCAwLCAxMDE0OSwgNzQxMTgsIDAsIDAsIDEyNDgxLCAwLCAxMjQ4OCwgCi0gICAgMCwgMCwgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDAsIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCAKLSAgICA2NTAzMiwgNDE1MTMsIDAsIDExOTI3LCA2NjU4NCwgMCwgMCwgMTE5MDEwLCAwLCAwLCAwLCA4NDgsIDk4NjgsIDAsIDY0MjQsIAotICAgIDAsIDExOTMzOCwgMCwgNzQwMzEsIDAsIDAsIDIzNTIsIDAsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCAwLCAwLCAxMzAyNiwgCi0gICAgMCwgMCwgMCwgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAxMzQzLCAwLCAwLCA5MzI1LCAKLSAgICAxMzAyNSwgNjI4MywgMTE3MzgsIDAsIDAsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAwLCAKLSAgICAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDAsIDY0NTg4LCAwLCAKLSAgICAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIDEzMDIwLCAxMTg5OTMsIDE5NDc2NCwgMTk0NzY3LCA3NDM0MCwgCi0gICAgMCwgMCwgNjQ5NDUsIDgwMjksIDAsIDAsIDAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgMTk0NzQ4LCA1MjE1LCAKLSAgICA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgMCwgNTM2MywgMTI5NTcsIDAsIDQxNTYsIDAsIDAsIAotICAgIDY0MjEsIDAsIDE2MTEsIDAsIDEzMDE4LCA3NDI1NywgMCwgMCwgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCAwLCAKLSAgICA2NDgyLCA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCAwLCA3MzkyNywgCi0gICAgMjM5MiwgMTMwNDcsIDAsIDAsIDEwNjE3LCAxMzA0OSwgNjQ5OSwgMTk0NzM5LCAxMjQyNCwgMTk0NzQxLCA3Mzk0NCwgCi0gICAgMTMwNTAsIDE5NDc0MiwgMTk0NzQ1LCA2NTA3LCAwLCAwLCAwLCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAKLSAgICAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIAotICAgIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDE5NDczNCwgCi0gICAgNDEwNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgMCwgMTE4ODQyLCAKLSAgICAyMzQ2LCAxMzI3MCwgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDQyNTM2LCAwLCAwLCAxMzA0MywgODA1NiwgCi0gICAgMCwgNjU2ODEsIDIwOCwgMCwgMCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIDAsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgCi0gICAgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDAsIDAsIDAsIDAsIDMxMTUsIDAsIDAsIDExMzIxLCAwLCAwLCAwLCAxOTQ3MjYsIAotICAgIDQ4NzYsIDc0Mjg2LCAwLCAwLCAwLCAwLCA0MTU1OCwgNDE0NzEsIDczOTUwLCA4MTU4LCA0MTU2MSwgNDE0NzIsIDAsIAotICAgIDEzMDUxLCAxOTQ2NzIsIDMxNDMsIDE5NDY3NCwgMTk0NjczLCA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIAotICAgIDU2NjUsIDAsIDExOTA3MSwgNDE5ODYsIDYzOTc0LCAwLCA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgCi0gICAgNTY2MiwgNDIzODIsIDE5NDY4NiwgNzM5MjQsIDExMjEsIDE5NDY2NSwgNjM5NTksIDAsIDc0Mzc4LCAxMzIzMSwgMCwgCi0gICAgNjQ3NTIsIDQ3MzIsIDE5NDY2NiwgMTE1OTYsIDE5NDY2OCwgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgMTk0NjcxLCAKLSAgICA0MjAyNCwgNjQyMCwgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCA0OTEwLCAxOTQ3MjgsIDAsIDY0NzUzLCA2Mjc1LCAwLCAKLSAgICAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIAotICAgIDQyMDI2LCA2MTM3LCAwLCA3NTI0LCAwLCAwLCAxMTkzNDMsIDAsIDgzMzgsIDAsIDY1MDQzLCAwLCA4MjIsIDAsIDk5MDMsIAotICAgIDY0NzIxLCAxOTQ2NTcsIDE5NDY1NiwgMTk0NjU5LCAxOTQ2NTgsIDE5NDY2MSwgMTk0NjYwLCAwLCA0MTI2NSwgNTMxMSwgCi0gICAgMTc5NSwgOTY1LCAxMTg3OTEsIDEwNTg3LCAwLCAxMTI3OCwgMCwgMTk0NjQwLCAwLCAxMjk0NiwgMTk0NjQxLCAxMjA3MDUsIAotICAgIDE5NDY0MywgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAwLCAwLCA3NDgsIAotICAgIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCAxOTQ2NTIsIDE5NDYyOSwgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCAKLSAgICA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgMTk0NjM1LCA0ODkwLCAKLSAgICAxOTQ2MzcsIDAsIDU4MSwgNDg5MywgMCwgMCwgNjU1NDUsIDQ4ODgsIDQxNTcsIDkxNzgwNSwgMCwgMCwgMCwgMCwgMTAxMTksIAotICAgIDY0MTUsIDAsIDAsIDAsIDAsIDAsIDExMzc1LCA2NDc0NiwgMjMzMiwgMCwgNDEyLCAwLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAKLSAgICAwLCAwLCAwLCAwLCA2NTE5NywgMCwgMTIyMDMsIDAsIDAsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAKLSAgICAxOTQ2MjQsIDEyMDM5NywgOTM0NCwgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgCi0gICAgMCwgMCwgMzEzNCwgMCwgNjU2OTYsIDAsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIDAsIDAsIAotICAgIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDAsIDQzMjgsIDEwNzM0LCAxMjcwMTQsIDAsIDAsIDc4MDQsIDAsIAotICAgIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIDExODk3MSwgNDkxNywgNzQ1MTYsIDAsIDY0Mjg1LCA0OTEyLCAKLSAgICA1NDY0LCAwLCAxMTg4OTMsIDIzNjEsIDc5NzEsIDAsIDAsIDAsIDExODk4NiwgMCwgODA4NiwgNzQzMTcsIDAsIDgzMTksIAotICAgIDIzMTIsIDQwOTc3LCAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCAwLCA0MDk4MCwgMCwgMTMyMDIsIDAsIDEyNTgyLCAwLCAKLSAgICAwLCAwLCA0MjQzOCwgMCwgNjI4OCwgMCwgMCwgNTY1MywgNDI0MDAsIDEwODkxLCA3Njk4LCA1NjU4LCA3NDA0NSwgMCwgMCwgCi0gICAgMCwgNDkxMywgMCwgMCwgMCwgNDIzMjYsIDAsIDAsIDAsIDQyNDc4LCAyMzI3LCAwLCAxMjk1OSwgNDIyODcsIDEyNzA1LCAwLCAKLSAgICAwLCAxMjU4OCwgODgyMSwgNjE1MywgMjg2NywgMTk0NzA4LCA2NjMxMiwgNjk4LCAxOTQ3MDksIDE5NDcxMiwgMTAzNTYsIAotICAgIDc0MDc1LCAxOTQ3MTMsIDY1MSwgMTI2NDEsIDAsIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgMTk0NjkxLCAxOTQ2OTAsIAotICAgIDE5NDY5MywgMTk0NjkyLCAxOTQ2OTUsIDE5NDY5NCwgMTk0Njk3LCA3NDM1NiwgMCwgNDcxNiwgNDMyNzcsIDAsIDAsIAotICAgIDEyMzQwLCAxMjA1NjgsIDAsIDE5NDcwMCwgMTk0Njk5LCAxOTQ3MDIsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCAwLCAKKyAgICA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIDg3NDQsIDcyNiwgMCwgMCwgNDE1NSwgMCwgMCwgNDIwMzAsIAorICAgIDUwMDcsIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgMCwgMTI3MjQwLCAwLCA5OTIyLCA0MzMwOSwgMCwgMTI1MjUsIDAsIAorICAgIDEyMDE2LCA2NTc3MCwgOTU0OCwgNjc2NjUsIDQwMywgNzgyMzAsIDEyNTAzLCAwLCAwLCAxMTAzMCwgMCwgMCwgNjU2OTEsIAorICAgIDYzOTk4LCAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAwLCAwLCAxMjUwNiwgMCwgMTIyMzEsIDAsIDEyNTAwLCAKKyAgICA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDc4Mzk1LCAKKyAgICA3ODM5NCwgNzQwNjksIDc3OTk1LCA3ODM5MSwgMzYwOCwgODI4MSwgMTIwMzIwLCAxMTA3LCAwLCA5MDc2LCA4ODYyLCAwLCAKKyAgICA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMCwgODU0NiwgMTE1NTMsIAorICAgIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgMCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAwLCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgCisgICAgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDAsIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCAwLCAxMjUzMCwgMjUzNywgNzg0MDUsIAorICAgIDQxNDI5LCAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgNDE0MzMsIDQ3MTksIDQ2OSwgMCwgNDM2MywgMzMxMywgCisgICAgNDE0MjgsIDc4NDA3LCAyMDIzLCAxNzcyLCA3ODIyNCwgNzgyMjUsIDY1NzA2LCAxMDA1MSwgNjQ4MTIsIDc4MjIwLCAwLCAKKyAgICA5OTIwLCAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgOTYwNywgMCwgOTY2MywgMCwgMTE5NjM0LCAKKyAgICA2NTAzLCA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMCwgNDEwNjEsIDAsIDAsIDAsIDY1MDI2LCA0MTk5MywgNDE1MDksIAorICAgIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgCisgICAgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDAsIDk5NDAsIDAsIDc2OTIsIDAsIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIAorICAgIDY1MDgzLCA0MTEzMywgOTgxNiwgMCwgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgCisgICAgMTI3Mjk4LCA2OTc4MywgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgCisgICAgMCwgNjQxMzYsIDEyNTM2LCAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDAsIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgCisgICAgMCwgMCwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAxMjQ4NCwgNDAzMiwgMCwgMTI2MjMsIDAsIDYyMDcsIDAsIAorICAgIDYxMTcsIDY1OTMwLCA4NDEyLCAwLCA3NDM4LCAxMjk2LCAyMzI1LCA0MTUxMSwgMCwgMTAxNDksIDc0MTE4LCAwLCAwLCAKKyAgICAxMjQ4MSwgMCwgMTI0ODgsIDAsIDAsIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCAwLCA3Mzc2NiwgMCwgNjI5NSwgCisgICAgOTAxLCA0MTUxMCwgNzk1MywgMCwgNjUwMzIsIDQxNTEzLCAwLCAxMTkyNywgNjY1ODQsIDc4NTU5LCA3ODU2MCwgNzg1NTcsIAorICAgIDc4NTU4LCAwLCA3ODU1NiwgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCA3ODU2NSwgNzQwMzEsIDc4NTYzLCAKKyAgICA3ODU2NCwgMjM1MiwgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCAwLCAwLCAxMzAyNiwgNjc2MiwgNzg1NzksIAorICAgIDc4NTgwLCAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIDEzNDMsIDAsIDAsIDkzMjUsIAorICAgIDY4MTgsIDYyODMsIDExNzM4LCAwLCAwLCAwLCAxMTc0MSwgMCwgMCwgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgMCwgCisgICAgMTk0NzU0LCAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgNjQ1ODgsIAorICAgIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDExODk5MywgMTk0NzY0LCAxOTQ3NjcsIAorICAgIDc0MzQwLCAwLCAwLCA2NDk0NSwgODAyOSwgMCwgMCwgMCwgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAxOTQ3NDgsIAorICAgIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIDc4NTgxLCAKKyAgICA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc4NTg0LCAzMzM3LCAKKyAgICA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCA4ODM4LCAKKyAgICA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCA2NDk5LCAKKyAgICAxOTQ3MzksIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDAsIDAsIDAsIDMyNzcsIAorICAgIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAKKyAgICAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCAKKyAgICA0MTA1NCwgMTA3OCwgOTc1NywgMTk0NzM0LCA0MTA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MTA5LCAwLCA0MTQ5NiwgMCwgCisgICAgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCAKKyAgICA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgMCwgNjU2ODEsIDIwOCwgMCwgMCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIAorICAgIDAsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDAsIDAsIDExOTkzMywgMCwgMzExNSwgCisgICAgOTkxOCwgMCwgMTEzMjEsIDAsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNzQyODYsIDAsIDAsIDQzNDY4LCAwLCA0MTU1OCwgCisgICAgNDE0NzEsIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMCwgMTMwNTEsIDc4Njg5LCAzMTQzLCAxOTQ2NzQsIDY3MDEsIAorICAgIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgMCwgMTE5MDcxLCA3MDI1LCA2Mzk3NCwgMCwgCisgICAgNzQzNTIsIDc0MTYxLCA0MTU0LCA5ODYzLCA0MzU1MCwgMTIzMTAsIDU2NjIsIDQyMzgyLCAxOTQ2ODYsIDczOTI0LCAxMTIxLCAKKyAgICAxOTQ2NjUsIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgCisgICAgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIAorICAgIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5MTc4MDgsIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCAKKyAgICA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNDIwMjYsIDYxMzcsIDAsIDc1MjQsIDAsIAorICAgIDkxNzgwOSwgMTE5MzQzLCAwLCA4MzM4LCAwLCA2NTA0MywgMCwgODIyLCAwLCA5OTAzLCA2NDcyMSwgNDI3MjIsIDE5NDY1NiwgCisgICAgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCA1MzExLCAxNzk1LCA5NjUsIDExODc5MSwgCisgICAgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIDE5NDY0MSwgMTIwNzA1LCAxOTQ2NDMsIAorICAgIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgMCwgMCwgNzQ4LCA0MTA2NywgMjMzMCwgCisgICAgNTM1LCAzMTQ4LCAxMjM3NSwgMTk0NjUyLCAxOTQ2MjksIDEwNTU2LCAyNDc1LCAxMjM4OCwgNDg4OSwgODk2OCwgNjc4NjMsIAorICAgIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIDE5NDYzNSwgNDg5MCwgMTk0NjM3LCA5MTc4MDQsIAorICAgIDU4MSwgNDg5MywgMCwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIDc4MDQ4LCA3ODA0OSwgNzgwNDYsIDc4MDQ3LCAwLCAKKyAgICAxMDExOSwgNjQxNSwgMCwgMCwgMCwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIAorICAgIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgCisgICAgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgCisgICAgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCA2NTY5NiwgMCwgMCwgNjYyMTcsIDAsIDgzMzQsIAorICAgIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgNzg0MTQsIDc4NDEzLCAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAKKyAgICAxMjAxNjcsIDQzMjgsIDEwNzM0LCAxMjcwMTQsIDAsIDAsIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIAorICAgIDExMzY3LCAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMCwgMTE4ODkzLCAyMzYxLCAKKyAgICA3OTcxLCA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIAorICAgIDQwOTc3LCAxMDk2MCwgNDA5NjIsIDgzMDUsIDEyNTczLCAwLCA0MDk4MCwgMCwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgMCwgCisgICAgMCwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMCwgNTY1MywgNDI0MDAsIDEwODkxLCA3Njk4LCA1NjU4LCA3NDA0NSwgCisgICAgMCwgMCwgMCwgNDkxMywgMCwgMCwgMCwgNDIzMjYsIDAsIDAsIDAsIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIAorICAgIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgNjE1MywgMjg2NywgMTk0NzA4LCA2NjMxMiwgNjk4LCAxOTQ3MDksIDE5NDYwNiwgCisgICAgMTAzNTYsIDc0MDc1LCAxOTQ3MTMsIDY1MSwgMTI2NDEsIDAsIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCAKKyAgICA3ODQ2MywgNzg0NjQsIDE5NDY5NSwgNzg0NjEsIDE5NDY5NywgNzQzNTYsIDAsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgCisgICAgMTIzNDAsIDEyMDU2OCwgMCwgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCAwLCAKICAgICAxMDEwMSwgMCwgMCwgODQ3OSwgNDE1MSwgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDAsIDAsIDExOTE5NCwgCiAgICAgNzQwNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIDAsIAotICAgIDI2OTksIDAsIDAsIDI5ODUsIDExOTIyMiwgMCwgMCwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCA5ODI3LCAxMTkzMTAsIAotICAgIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCAwLCAwLCA2NjY5NCwgCi0gICAgNzQzNTcsIDAsIDAsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgMTA1MzQsIDAsIDAsIDczODQ4LCAwLCA0MjcyLCAwLCAKLSAgICA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIDAsIDQzMzA2LCAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDQzMzAzLCAKLSAgICAwLCAwLCA5MTc4MjYsIDUyNDQsIDQxODksIDEyNzA5OCwgNjc1OTYsIDAsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgMCwgMCwgCi0gICAgODg3MywgMCwgMCwgMCwgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NzgsIAotICAgIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDAsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAxMTg4NTAsIDExOTE0MSwgMCwgCi0gICAgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCAwLCA5NDY5LCA5NjMyLCAwLCA3NDc2MSwgNjQzMjMsIDAsIDAsIAotICAgIDAsIDAsIDMxMCwgMCwgNDE1NjQsIDEwOTc2LCAwLCAwLCAwLCAwLCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgCi0gICAgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIDY1MDQ3LCA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMCwgMCwgCi0gICAgMCwgNDE5MzQsIDc0NjUsIDAsIDAsIDAsIDQ3MTUsIDYxMDEsIDAsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAKLSAgICAwLCA5NTg1LCA1Mzc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTU2NywgMTIwNjE0LCAxOTI5LCAwLCAxMjE0MiwgMCwgCi0gICAgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDE5NDYyMSwgMTI5ODIsIDE5NDYyMywgNTM3OCwgMCwgMCwgNDE0MjEsIDAsIDQ0NjIsIAotICAgIDAsIDAsIDAsIDgyMSwgMCwgMjQ5OCwgNTgwMCwgMTIwMTU3LCAwLCAxNzYwLCAwLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIAotICAgIDAsIDc1NywgMTE4NSwgMCwgMCwgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCAwLCAwLCAwLCAxMDYzNCwgCi0gICAgMTA5NDIsIDc3MTMsIDIzNDgsIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgMTk0NjEwLCA2NDMyNCwgNDEyNDAsIAotICAgIDg2MiwgNjU2MjYsIDE5NDYxMywgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgCi0gICAgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCAxOTQ1OTUsIDEyMDgxMiwgMTk0NTk3LCA0NzQ4LCAxOTQ1OTksIDE5NDU5OCwgCi0gICAgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAwLCA3NDU3NiwgMCwgMCwgMTk0NjAyLCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCAKLSAgICA4Nzc1LCAxOTQ2MDUsIDAsIDI5NjMsIDAsIDg0MTAsIDQ0NTQsIDcyMywgMCwgOTY2LCA0NDQ5LCAwLCAxMjcwNjAsIDAsIAotICAgIDc4MTksIDIzMjAsIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgMCwgMCwgODA0NywgMCwgMCwgCi0gICAgMTI2MzQsIDQxNTQyLCAwLCA3NDY2LCAxMTg4MjIsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIDAsIDE1ODQsIDY2NjQ1LCAKLSAgICA2MDQ1LCAwLCAxMjA2NDAsIDY1MjE4LCAwLCAwLCAwLCA3NTM3LCAwLCAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCAKKyAgICAyNjk5LCAwLCA3Mzg0NSwgMjk4NSwgMTE5MjIyLCAwLCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgOTgyNywgCisgICAgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAzNSwgCisgICAgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAKKyAgICAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA3ODQ4MywgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCAKKyAgICA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgNDMzMDMsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIAorICAgIDQxODksIDEyNzA5OCwgNjc1OTYsIDAsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDAsIDAsIAorICAgIDkxNzgyNywgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIAorICAgIDEyNTc4LCAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAKKyAgICAxMTg4NTAsIDExOTE0MSwgMCwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgOTYzMiwgCisgICAgMCwgNzQ3NjEsIDY0MzIzLCAwLCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgMTk0NzY4LCAwLCA3NDI2NiwgCisgICAgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCA2NTA0NywgNjUxNjMsIAorICAgIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDAsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAwLCAwLCA0NzE1LCA2MTAxLCAwLCAKKyAgICA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgMCwgOTU4NSwgNTM3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjU1NjcsIDEyMDYxNCwgMTkyOSwgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxOTQ2MjEsIDEyOTgyLCAKKyAgICAxOTQ2MjMsIDUzNzgsIDc4NzkxLCAwLCA0MTQyMSwgMCwgNDQ2MiwgMCwgMCwgMCwgODIxLCAwLCAyNDk4LCA1ODAwLCAKKyAgICAxMjAxNTcsIDAsIDE3NjAsIDAsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgMTE4NSwgMCwgNzg3NzAsIAorICAgIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAxMDk0MiwgNzcxMywgMjM0OCwgCisgICAgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIDg2MiwgNjU2MjYsIDc4NDYyLCAKKyAgICAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIAorICAgIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCAxOTQ1OTksIDE5NDU5OCwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAKKyAgICAwLCA3NDU3NiwgNDQwMTksIDAsIDE5NDYwMiwgMzk2NywgMTk0NjA0LCAxMzEzNywgODc3NSwgMTk0NjA1LCAwLCAyOTYzLCAKKyAgICAwLCA4NDEwLCA0NDU0LCA3MjMsIDkxNzYwMCwgOTY2LCA0NDQ5LCAwLCAxMjcwNjAsIDAsIDc4MTksIDIzMjAsIDE5NDU4OSwgCisgICAgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgNDE1NDIsIAorICAgIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCAwLCAxNTg0LCA2NjY0NSwgNjA0NSwgNjcyOSwgCisgICAgMTIwNjQwLCA2NTIxOCwgNzg3NzcsIDAsIDc4MDYyLCA3NTM3LCAwLCAxMTM3MCwgMCwgMTAzMzAsIDAsIDEwMzk0LCAwLCAKICAgICAxOTQ3ODMsIDAsIDAsIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIDExOTYwNSwgMTk0NTc4LCA3MDc0LCAxMjAzOTYsIAogICAgIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTk0NTg0LCAyNTMxLCAxMzAzNCwgMCwgMCwgMCwgMTI1OSwgNzUxNywgMCwgMCwgCiAgICAgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgMTk0NTY3LCAxOTQ1NjYsIDExMDY0LCA0MTEyOSwgMCwgCiAgICAgNDI4NTAsIDEzMDM1LCA5MDc1LCAwLCA1NDY2LCAxOTQ1NzAsIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgMTk0NTczLCA0MjcxLCAKLSAgICAxOTQ1NzUsIDAsIDAsIDQxNDEwLCAwLCA2NDI2MiwgMCwgNDE0MDcsIDAsIDAsIDQxMTMxLCAxMTg4NjQsIDkwNDYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCA5MTc3ODcsIDAsIDEyMzM4LCA0NjUxLCAKLSAgICAwLCAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIDAsIDQxOTAzLCA2Nzg5MiwgMTEwMDEsIDAsIDQyMjU1LCAwLCAwLCAwLCAKLSAgICA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgMCwgNDI1MzUsIDAsIDY0NTI5LCAKLSAgICA0MTQwOCwgNDI4NTMsIDM4NzcsIDAsIDAsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDAsIDEwMjM2LCA2NTkxOCwgMCwgMCwgMCwgCi0gICAgNjQ1MDYsIDAsIDExODkyMSwgNDc0NywgMCwgMCwgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIDQyNjAwLCAwLCA0MzIwMywgCi0gICAgMCwgMCwgNDMyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MTM3LCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgCi0gICAgMCwgNjA1OSwgMTI2OTg1LCAwLCAwLCA4NTM1LCAwLCAwLCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMCwgMTIwNzg2LCAwLCAwLCAKLSAgICAxMDU1OCwgNjM4ODUsIDAsIDExODIyLCAwLCA0MzE4OSwgMCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA5MTc4MTcsIDAsIDAsIAotICAgIDAsIDkwMjgsIDExOTU3MSwgMCwgMCwgMCwgMTI4NSwgNjQ4ODIsIDQxMjQyLCAwLCAwLCAxMjY0MCwgMCwgNjY2NDIsIDAsIAotICAgIDEyNjI1LCAwLCAwLCAwLCAzOTQwLCA0MTU5NywgMCwgMzM5NiwgMTI2NDIsIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCAwLCAKKyAgICA3ODQxNywgMCwgNjc2OSwgNDE0MTAsIDAsIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgCisgICAgMTIzMzgsIDQ2NTEsIDAsIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIAorICAgIDAsIDAsIDAsIDQxOTA1LCAwLCAwLCAxMDc3NSwgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCAwLCA0MjUzNSwgCisgICAgNjk4MTIsIDY0NTI5LCA0MTQwOCwgNDI4NTMsIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDAsIAorICAgIDEwMjM2LCA2NTkxOCwgMCwgMCwgMCwgNjQ1MDYsIDAsIDExODkyMSwgNDc0NywgMCwgMCwgNDMyMDAsIDU4MzIsIDAsIDAsIAorICAgIDUxNDEsIDQyNjAwLCAwLCA0MzIwMywgMCwgMCwgNDMyODYsIDAsIDAsIDAsIDAsIDQxMzA1LCA3ODc3NiwgNzQxMzcsIAorICAgIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAwLCAKKyAgICA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDAsIDEyMDc4NiwgNDIyMzMsIDEyNzQ4OCwgOTk0NiwgNjM4ODUsIDAsIAorICAgIDExODIyLCAwLCA0MzE4OSwgMCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA5MTc4MTcsIDAsIDAsIDAsIDkwMjgsIDExOTU3MSwgCisgICAgNjkyMzQsIDAsIDAsIDEyODUsIDY0ODgyLCA0MTI0MiwgMCwgMCwgMTI2NDAsIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgCisgICAgMCwgMCwgMzk0MCwgNDE1OTcsIDU1MjYwLCAzMzk2LCAxMjY0MiwgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgCiAgICAgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTIwNTIzLCAwLCA4ODE1LCA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIAotICAgIDExOTMxNywgMTE5MzE4LCAxMTkzMTUsIDExOTMxNiwgNDI0ODUsIDExODgzNywgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAKLSAgICAwLCAwLCAwLCAwLCAxMjAzMiwgMCwgOTcyNSwgMCwgMCwgNTI2MywgMTI4MTgsIDAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIAotICAgIDExODgzMSwgNDI3NzcsIDEwMTM5LCA5ODAsIDAsIDY1Mzg2LCAwLCAwLCAwLCA0MzE5OCwgNzE4NCwgMCwgMTk0Nzk3LCAKLSAgICA5MTc4MTksIDEwMDg1LCAxMTk5OTIsIDAsIDExOTk5OSwgNjYzNCwgMCwgMCwgMTE5MzIzLCA4MDcyLCAxMTkzMjEsIAotICAgIDExOTMyMiwgMCwgODg3MiwgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIDAsIDEyMDU2NSwgCi0gICAgOTkxNCwgMTI3MDExLCA5MTc4NTQsIDczOTc1LCA3NDI4MSwgMCwgMCwgMCwgOTE3ODUzLCAwLCA2NDczNSwgNDEyNDMsIDAsIAotICAgIDc4MDgsIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgMCwgMCwgMCwgMCwgMCwgMTcxMCwgMCwgMCwgMCwgMCwgNDksIAotICAgIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCAwLCA5NzQxLCAxMjA0MjMsIDU2NDksIDkxNzk4NiwgMCwgNjQ0MTgsIDE2NDMsIAotICAgIDc0MTA0LCA4NDA1LCAzNDcwLCAwLCAxMzIxMywgNDI0NTIsIDkxNzk4NywgMCwgMTIwMDA5LCAwLCAxMDcyLCAwLCAKLSAgICA5MTc5OTAsIDAsIDY1NzYsIDQxOTg4LCA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgNzQxMDAsIDAsIDExMDEsIAotICAgIDEyMDAwMSwgMTIzMDksIDAsIDAsIDEyNjMyLCAxMDg2LCAxODY5LCAwLCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgCi0gICAgMzM4MCwgODEyMywgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDAsIDAsIDY2MzA5LCAwLCAwLCAxNDk0LCAwLCAwLCAwLCAKLSAgICAxMTY5MywgMCwgMTA0OTQsIDExOTIzMCwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAwLCA3NDEwNiwgMTI0MTMsIDAsIDAsIDAsIDAsIDU1NzAsIDE4ODEsIDcyMTAsIDAsIAotICAgIDEwMTIsIDY2NjMwLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCAwLCA0MjMzOSwgMCwgNjA2MywgMCwgMCwgMCwgCisgICAgMTE5MzE3LCAxMTkzMTgsIDExOTMxNSwgNjg0NTQsIDQyNDg1LCAxMTg4MzcsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgCisgICAgMCwgMCwgMCwgMTk0NjczLCAxMjAzMiwgMCwgOTcyNSwgMCwgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIAorICAgIDEwMDIyLCA2NTM4NywgNzg0MTksIDQyNzc3LCAxMDEzOSwgOTgwLCA0MzY5OCwgNjUzODYsIDAsIDAsIDQzNzAxLCA0MzE5OCwgCisgICAgNzE4NCwgMTIwNjczLCAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCAwLCAwLCAKKyAgICAxMTkzMjMsIDgwNzIsIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIAorICAgIDEyMzk1LCAwLCAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMTI3MDExLCA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgCisgICAgMCwgNzgxMDcsIDAsIDY0NzM1LCA0MTI0MywgMCwgNzgwOCwgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAKKyAgICAwLCAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCAKKyAgICA5NzQxLCA3ODQ0MywgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDAsIAorICAgIDEzMjEzLCA0MjQ1MiwgNzgzMzEsIDAsIDc4NDQ1LCAwLCAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgCisgICAgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAKKyAgICAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAKKyAgICAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgMCwgMCwgNjYzMDksIDAsIDAsIDE0OTQsIDAsIDAsIDAsIDExNjkzLCAwLCAKKyAgICAxMDQ5NCwgMTE5MjMwLCA2NTg3MiwgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIAorICAgIDAsIDAsIDc0MTA2LCAxMjQxMywgMTk0ODI5LCA5MTc5OTQsIDAsIDkxNzk5NSwgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgCisgICAgNjY2MzAsIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDAsIDQyMzM5LCAwLCA2MDYzLCAwLCAwLCAxMTk1OTQsIAogICAgIDYwNTMsIDY1NjAyLCAwLCAwLCA2NDcyNywgOTE2MCwgMTk0ODI3LCAwLCAwLCAwLCAxMDUwMywgMTE4ODEwLCA2MDU1LCAKICAgICAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCAwLCAwLCAwLCAKLSAgICAxMjAxMTksIDEyMDQxMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgMzY3NCwgOTc0MCwgCi0gICAgOTEyMSwgNTU2OCwgMTIwMTA3LCAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNjQ1NjcsIDQyODcwLCAxMjAxMDEsIDU4OSwgCisgICAgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgMzY3NCwgOTc0MCwgCisgICAgOTEyMSwgNTU2OCwgMTIwMTA3LCAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAxMjAxMDEsIDU4OSwgCiAgICAgNzA1MCwgMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgMCwgNzQwOTksIDQyNjQ1LCAwLCAKLSAgICAxOTQ4MTUsIDg1ODMsIDAsIDU4NDcsIDY5MjgsIDAsIDAsIDAsIDAsIDAsIDY2NTkyLCAxMjIwNCwgMCwgMTk5NjYsIDAsIAotICAgIDQyNTYxLCAxMjA2MjYsIDAsIDAsIDgxMjAsIDEyMDcwMSwgMCwgMCwgMCwgNDEwNjMsIDAsIDEwNjY0LCAwLCA4MzY5LCAwLCAKLSAgICA0NTUxLCAwLCA3NDc1OSwgMCwgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTI3MDAyLCAxMjUxNywgNTU3LCAKLSAgICA5NDU3LCAxMjAzNCwgMCwgNDEwNTYsIDEyNTE5LCA0MTAwNCwgMCwgMCwgNzQwOTQsIDAsIDAsIDExOTAwMSwgMCwgMCwgMCwgCi0gICAgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgMCwgMTA0NDEsIDczODM2LCAwLCAwLCAKLSAgICA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAxNjE4LCAwLCAwLCA5NjQ1LCAxMDQzMCwgMCwgNTg1MywgCi0gICAgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgMCwgMCwgMTEzMTQsIDAsIDEyMDYwLCAwLCAwLCAxMjgyNiwgMCwgMCwgMTA1MTQsIAotICAgIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgMTI3MDU0LCAwLCA0MzU3MCwgMjY5NywgMCwgMCwgMTI3MDU3LCAyNjk1LCAKLSAgICA0MjE3MSwgMCwgMCwgMCwgNjc2MTcsIDE5NDgxNCwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAxMTY0LCAwLCAwLCAKLSAgICA0MTkxOCwgMCwgMCwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAwLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCAKLSAgICA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIAotICAgIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgNjEwNCwgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgCi0gICAgNzQ0MzgsIDAsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgMCwgNzQ2MDAsIDc0NDM1LCA3NDgzNiwgMCwgMTI1NzksIDAsIAotICAgIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAxMjUyLCAwLCAwLCAKLSAgICA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCAwLCA3NDExNCwgMTIyMywgMTY0MiwgMTc0LCAwLCA4ODMsIDQxNjEsIAotICAgIDEyNjkxLCA0MjYwMywgNDE0MTMsIDMyMTIsIDEyNzAyNSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCAxMjcwMjksIDAsIDc0NDUwLCAKLSAgICA5NzI4LCAzODQ2LCA4MDcwLCA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCAKLSAgICA0OTg2LCAxMjE4OSwgMCwgMCwgMTIwNDk5LCA5MTc1NTMsIDQyNTcsIDEyMTA0LCAxMTkxODIsIDYyMjAsIDkwMDQsIAotICAgIDY1NTYxLCAwLCAwLCAwLCA2ODEzNSwgOTE3NTc2LCAwLCAwLCAwLCAwLCA5ODkwLCAwLCAxMjk3MSwgMCwgMCwgNzM4OTgsIAotICAgIDExOTc5LCAwLCAxMTg5MDAsIDAsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCA3NDIyNywgMCwgCisgICAgMTk0ODE1LCA4NTgzLCAwLCA1ODQ3LCA2OTI4LCAwLCAwLCAwLCAwLCAwLCA2NjU5MiwgMTIyMDQsIDAsIDE5OTY2LCAKKyAgICA3Nzg1NiwgNDI1NjEsIDEyMDYyNiwgMCwgMCwgODEyMCwgMTIwNzAxLCAwLCAwLCAwLCA0MTA2MywgMCwgMTA2NjQsIDAsIAorICAgIDgzNjksIDAsIDQ1NTEsIDAsIDc0NzU5LCAwLCAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIDEyNTE3LCAKKyAgICA1NTcsIDk0NTcsIDEyMDM0LCAwLCA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDAsIDc0MDk0LCAwLCAwLCA3Nzk3MCwgMCwgMCwgCisgICAgMCwgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgMCwgMTA0NDEsIDczODM2LCAwLCAKKyAgICA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgCisgICAgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAwLCAxMjA3MjksIDExMzE0LCAwLCAxMjA2MCwgMCwgCisgICAgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCAKKyAgICA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAKKyAgICAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDAsIDAsIDQxOTE4LCAwLCAwLCA4Njg3LCA2NjAwOSwgMTIxNzgsIAorICAgIDcwNTMsIDAsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIAorICAgIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCAKKyAgICA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgCisgICAgODkyMiwgMCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAKKyAgICAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgCisgICAgNTI5NSwgMCwgNzQxMTQsIDEyMjMsIDE2NDIsIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgCisgICAgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIAorICAgIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCAKKyAgICA2NzY0OCwgMTIwNDk5LCA5MTc1NTMsIDQyNTcsIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAKKyAgICAwLCA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgMCwgMCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgMCwgNzM4OTgsIAorICAgIDExOTc5LCAwLCAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIDc0MjI3LCAwLCAKICAgICA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgOTE3OTUyLCAwLCAwLCAKLSAgICAwLCA3MjgyLCAwLCA2NTczMywgNjQ2MTgsIDAsIDAsIDM0OTQsIDc0NjA2LCA2NTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NTg5OCwgMCwgNjUzMTIsIDU0NDcsIDAsIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY1ODA0LCAwLCAKLSAgICA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIDAsIDAsIDQzNjA4LCAxMTkwOTEsIDAsIDY1MzgsIDQzMzUsIDAsIDM5NDEsIAotICAgIDQxMTIyLCAxMTA2MSwgMCwgNjQ4OTIsIDkxMTMsIDE5NTQsIDEyMTU1LCAwLCA0Mjg3OCwgMCwgMCwgMCwgNzQ1NzgsIDAsIAotICAgIDY1ODMyLCAwLCAwLCAwLCAwLCAwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDAsIDAsIDAsIDUxMzMsIAotICAgIDAsIDAsIDk1MDAsIDAsIDEyMTYyLCA2NDc0MSwgMCwgOTM1NCwgMCwgMCwgMCwgMjQ5NiwgMTE1MTYsIDk0NCwgMTE4ODUxLCAKLSAgICAzODkwLCAxMjE2OCwgMTQzOCwgMCwgMCwgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMCwgMCwgMCwgMTU3MSwgNDI2MzAsIAotICAgIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDAsIDAsIDAsIDg4NzcsIDI2OSwgNDQyOSwgCi0gICAgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgMCwgNDExMjAsIDY1MTIxLCAxMDg2MiwgNjA2MCwgNDExMTksIDQxNDE2LCAKLSAgICA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgMCwgMTE1MzIsIDc0MDczLCAwLCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCAKLSAgICA5MTc4OTUsIDY0Mjg3LCAwLCAwLCAxMTQyOCwgMTczMCwgMjQ1NywgMCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCAKLSAgICA4ODQwLCA4MDM1LCAwLCAwLCAwLCAwLCA2MTI5LCAwLCAwLCAwLCAwLCA3ODc0LCA4NjgxLCAwLCAwLCAxMzEzNiwgMCwgMCwgCi0gICAgNzQyNzgsIDYzODg2LCAxMTg4ODEsIDk2MDUsIDczODkyLCAxMzIyMCwgMCwgMCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgCi0gICAgNTI0MCwgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDAsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCi0gICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCAwLCAwLCAKLSAgICAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCAwLCAxOTkzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3NSwgMCwgMCwgODYzNywgCi0gICAgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIDAsIDAsIDEyMDQyLCAKLSAgICAwLCAwLCA5NTM3LCAzOTYxLCAxMjExNSwgMCwgMjYwNSwgNDUwMCwgNjQ1NjEsIDAsIDQ5ODEsIDAsIDAsIDYzODc2LCAKLSAgICAxMTY2NywgMCwgMCwgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgMTIwMTk0LCAwLCAKLSAgICA4NTQxLCAwLCAwLCA0MTg2NiwgMCwgMCwgMCwgMCwgMCwgNDM1NTUsIDI4MjMsIDk1NTksIDAsIDQxOTQwLCA4Mjk5LCAKKyAgICAwLCA3MjgyLCA3ODcyOCwgNjU3MzMsIDQ0NDUsIDAsIDAsIDM0OTQsIDc0NjA2LCA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgCisgICAgNzg1NjYsIDAsIDAsIDY1ODk4LCAwLCA2NTMxMiwgNTQ0NywgMCwgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCA0MTEwNiwgMCwgCisgICAgNjU4MDQsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgMCwgMCwgNDM2MDgsIDExOTA5MSwgMCwgNjUzOCwgNDMzNSwgCisgICAgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAxMjE1NSwgMCwgNDI4NzgsIAorICAgIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCAKKyAgICA1MDksIDAsIDAsIDAsIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIDAsIDEyMTYyLCA2NDc0MSwgMCwgOTM1NCwgMCwgMCwgMCwgCisgICAgMjQ5NiwgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgMCwgMCwgNDE5NDcsIDEyMjAsIAorICAgIDEyMDgyOCwgMCwgMCwgMCwgMTU3MSwgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgCisgICAgNDE5ODAsIDAsIDAsIDc4MTIwLCA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCAKKyAgICA0MTEyMCwgNjUxMjEsIDEwODYyLCA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCAKKyAgICA5MTc5ODYsIDExNTMyLCA3NDA3MywgMCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIAorICAgIDExNDI4LCAxNzMwLCAyNDU3LCAwLCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIDAsIDAsIAorICAgIDYxMjksIDAsIDAsIDAsIDAsIDc4NzQsIDg2ODEsIDAsIDAsIDEzMTM2LCAwLCAwLCA3NDI3OCwgNjM4ODYsIDExODg4MSwgCisgICAgOTYwNSwgNzM4OTIsIDEzMjIwLCAwLCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIDk4MTEsIDEwMDEyLCAKKyAgICAzMDk2LCAwLCAwLCAwLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIAorICAgIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOTkzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3NSwgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIAorICAgIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIDAsIDI0MjYsIDEyMDQyLCAwLCAwLCA5NTM3LCAKKyAgICAzOTYxLCAxMjExNSwgMCwgMjYwNSwgNDUwMCwgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIAorICAgIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDAsIAorICAgIDg1NDEsIDc4Mjk4LCAwLCA0MTg2NiwgMCwgMCwgMCwgMCwgMCwgNDM1NTUsIDI4MjMsIDk1NTksIDAsIDQxOTQwLCA4Mjk5LCAKICAgICA0MTk0NSwgMCwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIDQxNjk5LCAxMDc2MiwgCiAgICAgMCwgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDAsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCAwLCAxMTk1NjcsIDY1NDQ3LCAKICAgICAwLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCA3NTA2LCA3NTEwLCAwLCAKICAgICA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgNjg4LCA0MTg0NywgNjkwLCAyNTQ4LCA3MzcsIDk3NCwgODAwMywgCi0gICAgMCwgMCwgMCwgMCwgMzk4NSwgMCwgNjU4NjAsIDYzOTIxLCA3MDUxLCA3NDIwOCwgNDY4MiwgMCwgMTI4MDksIDY0MDYsIAotICAgIDQ2ODUsIDAsIDEwODc5LCAxMDM0NywgNDY4MCwgOTA1NSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgCi0gICAgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAwLCAwLCAwLCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgMCwgCi0gICAgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMCwgNzY0NiwgMCwgMCwgOTY1MSwgMCwgMzg5MSwgMCwgCi0gICAgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCA1NDUyLCAwLCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIDc0OTUsIAotICAgIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDAsIDAsIDAsIDAsIDc3MjcsIDAsIDg0OTgsIDAsIDg5NDksIDMwNjUsIDAsIDAsIAotICAgIDE1NjksIDAsIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgMTI1MzMsIDAsIDY0MTgsIDQ1NDMsIDAsIDY5NjksIDAsIDc0ODAwLCAKLSAgICAwLCAwLCAxMTk4MCwgMCwgMCwgNjM4OTQsIDAsIDEyMjgyLCA2NjE5MiwgMCwgMCwgODg1MCwgNzQyNzUsIDkyMzgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNzkxLCAwLCAwLCAwLCAwLCA3MzczMiwgMTI3OTMsIDEyOTAwLCAwLCAxMDk1MCwgMCwgMCwgMTI3OTAsIAotICAgIDQxNDAwLCAxMTkxMjgsIDAsIDEyNzkyLCAwLCAwLCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgMCwgCi0gICAgNDEzOTksIDAsIDAsIDAsIDAsIDEyNjkwLCAwLCAwLCAwLCAwLCA0MTY1MiwgMjk3NCwgMCwgMTEzMTUsIDAsIDI3OCwgMCwgCi0gICAgNDE0MDUsIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCAKLSAgICA2NzkwMywgMCwgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgMCwgMCwgMCwgMCwgNjQxMywgCi0gICAgNjU1MCwgMCwgMTk0MCwgMCwgNjYyMjMsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgMTAwNDQsIDAsIDAsIDAsIDAsIAotICAgIDY0MDMsIDU3MDcsIDEwMzkzLCAwLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIDM5NTksIDAsIDAsIAotICAgIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA2Mzg0NSwgNDE4MiwgMCwgNDY3NiwgMTIwNTAxLCAwLCAKLSAgICAwLCAyNTEwLCAwLCAxMDIwOCwgMCwgMCwgMTE1NDAsIDQzNTQ2LCAxMjE4NiwgMCwgNDEwNjAsIDAsIDAsIDkwODMsIDAsIDAsIAotICAgIDAsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgCi0gICAgNDMwMjcsIDAsIDQxNzE2LCAwLCAwLCAwLCA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgCi0gICAgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIDAsIDAsIDQzMjIxLCA2NTE5NCwgMCwgNTUxNywgMCwgMCwgMCwgNjc4ODQsIAotICAgIDAsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAwLCAxOTAyLCA2Nzg4NywgCi0gICAgOTYzOCwgMTI5NzYsIDAsIDEyNDgzLCA2Nzg3MiwgNDE3NjksIDAsIDQxNzY1LCAwLCA2NjY3LCA2Nzg3NCwgNzU1NiwgCi0gICAgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA2Nzg3NiwgNjc4ODksIDAsIDEzMTEsIDAsIDQzMjYsIDExMDAwLCA2MzgyNCwgCi0gICAgMTMwNjgsIDEwOTMyLCAwLCA2OTE3LCAwLCAwLCA5NDksIDkxNzU5NSwgMCwgNjE0OCwgODYwNSwgNDIyNTMsIDkxNzk2NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIAotICAgIDAsIDAsIDQ0MzEsIDQzMzEsIDAsIDAsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgMTE4ODYxLCAwLCAwLCAKLSAgICAxMTk2NTQsIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgMCwgMTE4ODY2LCAwLCA1MjU2LCAxMDY3LCAyNTUsIAotICAgIDEyMTMxLCAwLCA5NDkzLCAwLCA0MTAxNCwgMTE3OTMsIDAsIDAsIDc0Mzk0LCA0MzU5NCwgMTA2NTMsIDAsIDAsIDExOTYzMiwgCi0gICAgMCwgNjU2MCwgNzAxNiwgNzQyNzQsIDAsIDQzNTU2LCAzOTI5LCAwLCA2NjE0LCAyNzY4LCAwLCA5NzQ2LCA1MTM1LCAKLSAgICAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCAwLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgNTE2OCwgMCwgCi0gICAgMCwgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgMCwgMCwgMCwgNjUyODUsIDgyMzAsIDkzNjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCAwLCA0MzU1MiwgCisgICAgNzQwNiwgMCwgMCwgMCwgMzk4NSwgMCwgNjU4NjAsIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgCisgICAgNjQwNiwgNDY4NSwgMCwgMTA4NzksIDEwMzQ3LCA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAKKyAgICAwLCA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIDAsIDQyNjU3LCAwLCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCAKKyAgICA0MzU2OCwgMCwgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMCwgNzY0NiwgMCwgNzgwODIsIDk2NTEsIAorICAgIDAsIDM4OTEsIDAsIDAsIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgNTQ1MiwgMCwgMCwgNDM1NjEsIDAsIDAsIDc0MTQ2LCAKKyAgICAxODYwLCA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAwLCAwLCAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIAorICAgIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgMCwgMTU2OSwgMCwgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgMCwgCisgICAgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAwLCAwLCAxMTk4MCwgMCwgMCwgNjM4OTQsIDEyMDc2MCwgCisgICAgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgODg1MCwgNzQyNzUsIDkyMzgsIDEwNjE3LCA5MTc1NDUsIDAsIDAsIDAsIDEyNzkxLCAKKyAgICAwLCAwLCAwLCA0NDQ3LCA3MzczMiwgMTI3OTMsIDEyOTAwLCAwLCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgCisgICAgMTE5MTI4LCAwLCAxMjc5MiwgNDIyMzIsIDAsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCAwLCA0MTM5OSwgCisgICAgMCwgMCwgNTUyNTgsIDAsIDEyNjkwLCAwLCAwLCA0MzY3MiwgMCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAyNzgsIAorICAgIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCA0MzU1MywgMCwgCisgICAgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDAsIDc3ODI5LCAwLCAwLCA2NDEzLCAKKyAgICA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAxMDA0NCwgMCwgMCwgMCwgNjg2NTksIAorICAgIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgMCwgMzk1OSwgMCwgCisgICAgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIDYzODQ1LCA0MTgyLCA3ODE3MSwgNDY3NiwgCisgICAgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDAsIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgNDEwNjAsIDAsIAorICAgIDAsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgMCwgNzQwNzAsIDAsIAorICAgIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAwLCAwLCAxMjA0NzIsIDU1MTYsIDI4NDUsIDc3MTcsIAorICAgIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgNjI3OCwgMCwgNTUxNSwgMCwgMCwgMCwgNjUzMzksIDQzMjIxLCAKKyAgICA2NTE5NCwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIAorICAgIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMCwgMTkwMiwgNjc4ODcsIDk2MzgsIDEyOTc2LCAwLCAxMjQ4MywgMTIzNjgsIDQxNzY5LCAKKyAgICA0MjcyNiwgNDE3NjUsIDAsIDY2NjcsIDY3ODc0LCA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCAKKyAgICA2Nzg4OSwgMCwgMTMxMSwgMCwgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDAsIDY5MTcsIDc4MTU1LCAwLCAKKyAgICA5NDksIDc4MTYyLCAwLCA2MTQ4LCA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgCisgICAgNDE3OTYsIDEyNjksIDY1MzAsIDAsIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIDAsIDAsIAorICAgIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDAsIDAsIDc4MTY1LCA2NjAzNiwgMCwgMCwgNjQyOCwgCisgICAgNDIyNzAsIDAsIDAsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgMCwgOTQ5MywgMCwgNDEwMTQsIAorICAgIDExNzkzLCAwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgMCwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgCisgICAgMCwgNDM1NTYsIDM5MjksIDAsIDY2MTQsIDI3NjgsIDAsIDk3NDYsIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIAorICAgIDY5NzYxLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgNTE2OCwgNzg1NTIsIDAsIDc0MzE1LCA3NDM2MSwgCisgICAgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDAsIDAsIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgNDM1NTIsIAogICAgIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDExOTg3MywgNzc3MCwgCi0gICAgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCA0MjM3NSwgMCwgMCwgNjYzNTIsIDEwNDcwLCAwLCAxMTA1OSwgMTA3OTEsIAotICAgIDAsIDQ1MCwgMCwgMCwgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNjM4NTYsIDAsIDY2MzM4LCAwLCAwLCAKLSAgICAxODM5LCAxMTg3OTksIDAsIDEwOTI3LCAxNzAxLCAwLCAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgCi0gICAgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgMTE5ODYwLCAxMTk4NjMsIDExOTg2MiwgMCwgMCwgMCwgNjY0MzIsIDg4MDEsIAotICAgIDMwNTMsIDQzNDAsIDAsIDAsIDY1ODEyLCAwLCAwLCA0MTgyNCwgMCwgMTk0ODAxLCAxOTQ4MDAsIDE5NDgwMywgMTE4OTk3LCAKLSAgICAxOTQ4MDUsIDE5NDgwNCwgMTk0ODA3LCAxOTQ4MDYsIDE5NDgwOSwgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAKLSAgICAyMzE0LCA0MzYwMiwgMCwgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCAxOTQ3OTEsIAotICAgIDAsIDE5NDc5MywgMTkxMiwgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAKLSAgICAxNjM1LCAxOTQ3OTgsIDE0MTAsIDAsIDAsIDExODg3OCwgMCwgMCwgMCwgMCwgNTU5LCAwLCA0MTgyNSwgMCwgMCwgNDg5MiwgCi0gICAgNzQwMTYsIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDAsIDU3NzcsIDAsIDc1OSwgNjU3NDksIDY1NzUwLCA2NTI0OCwgMTI3ODgsIAotICAgIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAwLCAzNjY4LCA2NTc1NCwgNDM1NjAsIDEyMjI2LCAwLCAKLSAgICA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDEyMDE1NCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAKLSAgICAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgMCwgODkyMSwgNjYwMTMsIDAsIDAsIDE5NDc2OSwgMTk0NzY4LCAxOTQ3NzEsIAotICAgIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCAxOTQ3NzYsIDQxODIwLCA0MzAzOCwgMjM5NSwgMCwgCi0gICAgMCwgMTIwMDQzLCAxOTQ3NzgsIDEyMDA1OCwgMTk0NzgwLCAxOTQ3NzksIDQyODA5LCA0MjgwNywgMCwgMTIwMDQ3LCAKLSAgICAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCAwLCA0MTg5OCwgMjM2MCwgNDE3OTQsIDkxNzk0MiwgMCwgMCwgMCwgCi0gICAgMCwgMjQxOCwgMCwgMjQxMSwgMTEzMzYsIDc5OSwgNjM4MjMsIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIAotICAgIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCAxMTk1NzYsIDAsIDAsIDEwMzg0LCAwLCAwLCAwLCA3NzUzLCAyMzUxLCAKLSAgICA2NjU1LCA2NDQ4OSwgMCwgMCwgMCwgMCwgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgCi0gICAgNTQ0MSwgNDE4OTYsIDEwMjg4LCAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDExOTExNiwgMCwgCi0gICAgMTAwOTgsIDAsIDc0MTQ1LCAwLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCAKLSAgICA0MTg4NywgMCwgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCAwLCAzOTE0LCAxMTk2MDQsIDAsIDkwNjUsIDEyOTYxLCAwLCAKLSAgICAwLCAwLCAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDAsIDQ2OTMsIDAsIDczOTE5LCAwLCAKLSAgICA0Njg4LCAxMjA0NTQsIDAsIDAsIDExOTYyOSwgODIzOCwgMzExMCwgMTIwMTYyLCAwLCAxMjAxNjMsIDY1MjgsIDAsIAotICAgIDQzMDM1LCAxMjAxNjEsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDAsIDAsIDEyMDE1OCwgMTAwODgsIAotICAgIDY1NDgsIDAsIDEyMDE1NiwgMCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIDczOTAyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCA3NDQ0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTAwNjUsIDgyMDcsIDAsIDAsIDAsIDAsIDY2MiwgMCwgOTI0NCwgMCwgMCwgMTE5MjYxLCAwLCAwLCAwLCAwLCA0MTkyOSwgCi0gICAgMCwgMCwgMCwgNDE5MjYsIDAsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAwLCAwLCA1MiwgMTMxMTgsIDY0NzUsIDAsIDAsIAotICAgIDEyMDk1LCAxMDIyNSwgNDgxMiwgMCwgMCwgMCwgNzQwODUsIDAsIDM5NzgsIDAsIDAsIDAsIDExNTgyLCAxMjA3NjEsIAotICAgIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgMCwgMCwgMCwgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCAKKyAgICAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgMTEwNTksIAorICAgIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMCwgMCwgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgNDQwMDksIAorICAgIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgMTE4Nzk5LCAwLCAxMDkyNywgMTcwMSwgMCwgMjM4OCwgNDE3NDksIDQxNzYxLCAKKyAgICA1NDUzLCA4MzYxLCAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDExOTg2MCwgMTE5ODYzLCA3ODY3NywgMCwgCisgICAgMCwgNzgxNzQsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCAwLCAwLCA2NTgxMiwgOTE3ODMxLCAwLCA0MTgyNCwgMCwgCisgICAgMTk0ODAxLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTk0ODA0LCAxOTQ4MDcsIDc4Njc2LCAxMjA0MTMsIAorICAgIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIAorICAgIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDE5NDc5MSwgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAKKyAgICAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCAwLCAwLCAxMTg4NzgsIDAsIDAsIAorICAgIDk5MTksIDAsIDU1OSwgMCwgNDE4MjUsIDAsIDc4MTg4LCA0ODkyLCA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMCwgCisgICAgNTc3NywgMCwgNzU5LCA2NTc0OSwgMjA3OSwgNjUyNDgsIDEyNzg4LCA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgCisgICAgMCwgMCwgMCwgMzY2OCwgNjU3NTQsIDQzNTYwLCAxMjIyNiwgMCwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIAorICAgIDE5NDc4NSwgMTk0Nzg4LCA0MzYxOCwgNjU3NDcsIDEwOTM3LCAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgMCwgODkyMSwgCisgICAgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIDQzNDA5LCAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgCisgICAgMjk1OCwgNjgzNTksIDQxODIwLCA0MzAzOCwgMjM5NSwgMCwgOTk3NiwgMTIwMDQzLCAxOTQ3NzgsIDEyMDA1OCwgNjgyMjAsIAorICAgIDE5NDc3OSwgNDI4MDksIDQyODA3LCAwLCAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDAsIAorICAgIDQxODk4LCAyMzYwLCA0MTc5NCwgOTE3OTQyLCAwLCAwLCAwLCAwLCAyNDE4LCAwLCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgCisgICAgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDU1Mjg0LCAwLCAKKyAgICAwLCAxMDM4NCwgMCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDAsIDAsIDc3ODcyLCA0NDQzLCA0Mjc3OSwgCisgICAgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgMTAyODgsIDEwMzIwLCAwLCA4NTUsIAorICAgIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCA3NDE0NSwgMCwgMTAyNjQsIDEwMjgwLCAKKyAgICA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIDQ4NjIsIDk3MzUsIDY1MzcsIDEyMDU5MSwgMCwgCisgICAgMzkxNCwgMTE5NjA0LCAwLCA5MDY1LCAxMjk2MSwgMCwgMCwgMCwgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgCisgICAgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDAsIDQyNzI0LCAwLCA0Njg4LCAxMjA0NTQsIDAsIDAsIDExOTYyOSwgODIzOCwgCisgICAgMzExMCwgMTIwMTYyLCAwLCAxMjAxNjMsIDY1MjgsIDEyNzU1MywgNDMwMzUsIDEyMDE2MSwgMjE4LCAwLCAxNTIwLCAwLCAKKyAgICA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgNzgxNjcsIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCAKKyAgICA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIDAsIDAsIDAsIDk5NzUsIDAsIDExOTkwMiwgNDY4OSwgODkzMiwgCisgICAgMCwgNjU1NjAsIDExOTIwOSwgNzQ0NDEsIDc4ODEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDA2NSwgODIwNywgMCwgCisgICAgMTIwNTM5LCAwLCAwLCA2NjIsIDAsIDkyNDQsIDAsIDAsIDExOTI2MSwgMCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIDY2Njc0LCAKKyAgICA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCAwLCA1MiwgMTMxMTgsIDY0NzUsIDAsIDAsIAorICAgIDEyMDk1LCAxMDIyNSwgNDgxMiwgMCwgMCwgMCwgNzQwODUsIDAsIDM5NzgsIDAsIDkxNzk0NSwgMCwgMTE1ODIsIDEyMDc2MSwgCisgICAgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCAwLCA2OTc4MiwgMCwgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCAKICAgICA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAKLSAgICAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgMCwgMCwgMCwgMCwgNjUxMDIsIDg5NjEsIDAsIDEwMjQzLCAKLSAgICAxMDI0NSwgMCwgMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgMCwgMCwgMjAyLCAwLCA3NDEzMSwgMTI0MiwgMCwgCi0gICAgMCwgNjM5NDAsIDAsIDY0NTMzLCAwLCAwLCA2Nzg0MiwgMTE5OTAsIDAsIDYzOTM5LCAwLCA2NTQ0MCwgMjUwNCwgMCwgMCwgCi0gICAgNjQ4MjksIDAsIDY5NDMsIDAsIDU4NTksIDAsIDI4NTgsIDAsIDc0Mjk0LCAwLCA3NDMwNSwgMCwgMTE5MDI3LCAxMjk5MiwgCi0gICAgMjc1MywgMTkzNiwgNzQ0OTEsIDAsIDI3NTEsIDEyNjYyLCAyNzYzLCA4OTUzLCA2NDcwMSwgMTA3MzEsIDEyOTIyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NDEyOCwgMjg1NiwgMTE5OTEwLCA0NywgMTE5OTExLCAxMjY5ODYsIDY1ODU4LCAwLCAwLCAwLCAKLSAgICA3ODk5LCAwLCA4NDE3LCA2NTkwMywgNzA3MiwgMCwgMCwgNDAzMywgMCwgNjY0NzQsIDAsIDAsIDIxMiwgNjQ2MDAsIDE5MDMsIAotICAgIDEyMzIwLCAwLCAwLCAwLCAwLCA4OTE1LCAyNzU5LCA5NDUsIDAsIDAsIDAsIDAsIDAsIDEyOTEsIDc0ODI4LCAwLCAwLCAKLSAgICA5NTMxLCAxMzE1NSwgODUwNSwgMCwgMTIwNjIsIDAsIDAsIDY1NDg3LCAwLCA0MTgzNywgMTIwNjExLCAxMjA0MzIsIDAsIDAsIAotICAgIDAsIDEyMDQzMywgMCwgNjM5MzUsIDczOTYyLCAwLCA2NDc4NywgNDM1MjQsIDAsIDY0NDI2LCAwLCAwLCAwLCAwLCA2NTY2NCwgCi0gICAgNjQ3ODUsIDk4NDMsIDAsIDg2NzQsIDAsIDAsIDAsIDAsIDEyNjI0LCAwLCAxNjczLCA0ODExLCAwLCA1OTg2LCA5MzM4LCAKLSAgICAzMDQ2LCA3NDQ4MCwgNTk4NSwgOTE3OTI4LCAxMTk1OTgsIDk4MjAsIDAsIDEyMTg3LCAwLCAwLCA1OTg0LCAwLCA0MzMwOCwgCi0gICAgNDM5MywgMCwgMCwgMCwgMCwgMCwgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAwLCAzNTE0LCA2NTQ4NSwgMCwgCi0gICAgNzQ5MiwgMCwgMCwgMCwgNzUxNCwgMCwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCAwLCAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgCi0gICAgMjE5LCAwLCAwLCA2OTIsIDQzNTg4LCA3NDQzMywgNDE2MzUsIDAsIDk2ODgsIDAsIDk1MzUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY0NjEwLCAxMTgwNCwgMCwgMCwgNzQ1MywgMCwgODAxMywgMCwgMCwgMCwgODg5NSwgNTI1MywgMCwgNTQ1OCwgMCwgMjg2NiwgCi0gICAgMCwgMCwgNjUxMTEsIDAsIDEyMDE4LCAxMjA0ODQsIDAsIDAsIDAsIDg5NjIsIDAsIDk2NDEsIDY2NjUzLCA3MDU5LCAwLCAwLCAKLSAgICA5NjA0LCAwLCA3NDQxLCA2MzgyNiwgMCwgMTE4OTQxLCA2NDM5MiwgMCwgMCwgMjg0NCwgMCwgNDE5NzQsIDAsIDEyMTM5LCAKLSAgICAwLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMCwgMCwgMCwgMCwgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAKLSAgICAyNzkyLCAxOTUwODgsIDAsIDAsIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAKLSAgICAxODE0LCAwLCAxMDI0MCwgMCwgMTk1MDkyLCAwLCAxMTkwMjAsIDAsIDAsIDQyNjQ2LCA3NjA2LCAyNTkxLCAyODM3LCAKLSAgICA0MzQxLCAwLCA2NDQ4MiwgMCwgODE2MywgNjUyNzAsIDAsIDAsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDAsIDAsIAotICAgIDQzMzIzLCAxMjA1MTMsIDAsIDkwNzEsIDAsIDAsIDM2NTQsIDAsIDk2MzcsIDAsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgCi0gICAgMCwgNjY1ODcsIDE5NTA5OCwgMCwgMCwgMCwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgNzQwODgsIAotICAgIDMwNTYsIDEwODIzLCAwLCAwLCA4NzYyLCAxMDUwOCwgNzQ1MDYsIDczNzcwLCA2Mzk5NCwgNDMxOTMsIDEwNzM3LCAzNDYzLCAKLSAgICAwLCAwLCA2NjYzMywgODY5NSwgNDgxNSwgMTEzMjIsIDU4MTEsIDEyMzQ1LCA3MDQ5LCAwLCA1MTk1LCAwLCAwLCA2NjYzOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTIwNTYxLCAxMjYyLCAwLCA2NTYxLCAxOTkzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE5OTA3LCA2NDYxMiwgMTE5OTEsIDAsIDAsIDAsIDE1MDIsIDAsIDAsIDkxMDcsIDAsIDU3MDIsIDM2NTUsIDAsIDg0MzAsIAotICAgIDAsIDc0MTMyLCAwLCAwLCA3NDA1NywgOTYwMywgMCwgNTI1NCwgMTIwNzQyLCA3NzI0LCA3NDM4OCwgNzQ4MzgsIDEwNzk2LCAKLSAgICA1MTI5LCAwLCAwLCA1OTAsIDc1NzksIDU2MTQsIDU4OTMsIDE5NDc0NCwgMTE3MjAsIDAsIDExNzIxLCAwLCAwLCAwLCAKLSAgICAxMjA1NDEsIDY2MDM4LCA0NzkzLCA2Nzg1MSwgMTE3MjYsIDAsIDc0MjA0LCAwLCAwLCA5MTc2MDAsIDg5NCwgMzAwLCAwLCAKLSAgICAxMjMwNiwgNjYyMzUsIDAsIDAsIDAsIDI1NjIsIDAsIDAsIDQyNTAzLCAwLCAxMTY1MiwgMCwgMCwgMTE5MjQxLCAwLCAwLCAKLSAgICA1MDk2LCA1MDk1LCAyODYzLCAzNDI0LCAwLCAxMDQ1NCwgNDI1MzAsIDUwOTQsIDExOTYzOCwgMCwgMTMxNTYsIDAsIAotICAgIDEwODMyLCA1MDkzLCAwLCAwLCAwLCA1MDkyLCAxMDcwOCwgMTEzMjcsIDAsIDUwOTEsIDE3NiwgMCwgOTE1MywgNDEwNCwgMCwgCi0gICAgMCwgMTIxNSwgMCwgNTc0NCwgMTIyNzIsIDk4MzIsIDExNzc3LCAwLCAwLCA0Mjg4MSwgMCwgODk4MCwgMTE4OTg4LCAKLSAgICA2Nzg2MSwgODg0NCwgNzQzMywgMCwgMCwgNDI3OCwgMCwgMCwgMCwgMCwgOTA3NCwgNDM0OCwgMCwgNjU1NTgsIDY1OTQ2LCAKLSAgICA4MTEzLCA3MDg3LCA1MjU1LCAxNzg2LCA2NjEsIDAsIDAsIDAsIDc0NDIzLCAwLCA1ODYsIDc0NDE0LCA2NDM1OSwgMTI2NywgCi0gICAgMCwgMCwgMCwgNjU3MzEsIDAsIDAsIDM2MjEsIDAsIDY2NjY2LCAwLCAwLCA2NTYyLCAxMjkyOCwgMCwgMTIyOCwgNjU0OTAsIAotICAgIDExMzgzLCAwLCAwLCAwLCAxNzE0LCA3NDQwNiwgMCwgMCwgMCwgMCwgNjYyMjUsIDAsIDAsIDAsIDExNDM2LCAxMTk2MTUsIAotICAgIDY0LCAwLCAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCAwLCAwLCA0MjAxMSwgNDE5OTksIAotICAgIDAsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgMCwgNjU4MzMsIDAsIDAsIDE3NjUsIDAsIDAsIAotICAgIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMCwgMTA0NzksIDY0OTU5LCAyODUyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA2OTYzLCAwLCAxMjY2NywgMCwgNzQ3ODYsIDEwMTQ3LCAxMjkzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjQ5NDcsIDEyNDY3LCAyODY0LCA2NDcxOSwgMTE0OCwgMTA0MzUsIDExNDYyLCA0MTY3NSwgMCwgMjc2NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjY2NjIsIDAsIDAsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDExOTI0NCwgMjYzLCAKLSAgICAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCAwLCAwLCAwLCAwLCA2OTMxLCAwLCA2NDM1NSwgNzE3NywgMTIwNTMwLCAwLCAwLCAKLSAgICAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAwLCAwLCA2OTkyLCA0MjAxOSwgMCwgNDEyOTAsIDAsIDc1MCwgMCwgMCwgCi0gICAgMTAxNjMsIDAsIDc0MDY2LCA3MDMyLCA1OTU0LCA2NDkzMSwgNDMxNCwgMCwgMTk4LCAwLCA3MzAsIDAsIDAsIDAsIDAsIAotICAgIDEzMTY1LCAxMDgxNCwgNzQxNzEsIDQyODA0LCA2NzgsIDgyNDAsIDExODk2MCwgMCwgNDEzNzgsIDExMDA4LCA2OTM4LCAwLCAKLSAgICAwLCA0MjgxMiwgNjYyNDYsIDEyMDU2MCwgMCwgMCwgMCwgMzg5MiwgMCwgMCwgMCwgNjYwNDUsIDQxNDcwLCA2NDgwNSwgMCwgCi0gICAgMCwgMCwgMTE4OTgyLCAwLCA0OTcsIDEyMTAwLCA1OTUzLCAwLCA3Nzk2LCAwLCAwLCA3MzgzMSwgMCwgMTAyOTMsIDU5NTIsIAotICAgIDEyODEsIDAsIDAsIDAsIDEwNjc3LCA2MDQsIDQxMDk3LCA5MTgyLCAxODU5LCAwLCAwLCAzNDI1LCAwLCAwLCAyODM2LCAwLCAKLSAgICAwLCA5NzA3LCAwLCA0MzIwMiwgMCwgMCwgNjUxOTksIDE3MzgsIDAsIDAsIDI4MzIsIDAsIDk2NzAsIDEyOTM3LCAwLCAwLCAKLSAgICAwLCAwLCAyODIyLCAwLCA0NDM2LCAwLCAwLCA3Mzc1MiwgMCwgNjQ4NzIsIDAsIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCAKLSAgICA1MDkwLCA1MDg5LCAwLCAwLCAxMTkxMDksIDAsIDAsIDMxOSwgMTE4OTMxLCAwLCA5NDc3LCAwLCAwLCA1MDg3LCAwLCAKLSAgICA3NjQwLCA5NiwgNTA4NiwgMCwgMCwgMCwgNTA4NSwgNjQyODYsIDAsIDAsIDQxNDIyLCAwLCAxMTk5MDEsIDQyMzU2LCAKLSAgICAzNzcyLCAwLCAwLCA1MDExLCAwLCAwLCAwLCAwLCAwLCAwLCA2Njc3LCA3NjAxLCAwLCA1OTEsIDY0NDE5LCAxMTg5NTMsIDAsIAotICAgIDAsIDExODkyMywgMCwgMCwgMTA5MzksIDYxMDYsIDY5MzMsIDQxMjcxLCAwLCAxMTk5MDMsIDQ1MzQsIDQxMjcwLCAwLCAwLCAKLSAgICA2NTU3NCwgMCwgOTIyNCwgMCwgMzY3MSwgODk3NiwgMCwgMCwgNDEyNzUsIDAsIDAsIDAsIDc5NjMsIDQyMDEzLCAwLCA1NjgsIAotICAgIDAsIDQxMjczLCAwLCAwLCAwLCAwLCA5NzE1LCAwLCA4MjU4LCAxMTc1MywgNzQ4MjAsIDAsIDk2MDIsIDExODkxOSwgNDIsIAotICAgIDAsIDAsIDAsIDAsIDc0NTgsIDAsIDAsIDY1Mzg1LCAwLCAwLCAxMTk1OCwgMCwgMCwgMCwgNjI1NCwgMCwgNjYzMzYsIAorICAgIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCA3ODIwMywgMCwgMCwgMCwgNjUxMDIsIDg5NjEsIDY1ODQyLCAKKyAgICAxMDI0MywgMTAyNDUsIDAsIDEyMDQxMCwgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgMCwgMCwgMjAyLCAwLCAKKyAgICA3NDEzMSwgMTI0MiwgNjU1MTQsIDAsIDYzOTQwLCAwLCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDAsIAorICAgIDYzOTM5LCA0MzM3NSwgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgMCwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAKKyAgICAyODU4LCAwLCA3NDI5NCwgMCwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDc0NDkxLCAwLCAyNzUxLCAKKyAgICAxMjY2MiwgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCA2MzkyMCwgCisgICAgNzQxMjgsIDI4NTYsIDExOTkxMCwgNDcsIDExOTkxMSwgMTI2OTg2LCA2NTg1OCwgMCwgMCwgMCwgNzg5OSwgMCwgODQxNywgCisgICAgNjU5MDMsIDcwNzIsIDAsIDAsIDQwMzMsIDAsIDQzOTkyLCAwLCAwLCAyMTIsIDY0NjAwLCAxOTAzLCAxMjMyMCwgMCwgMCwgCisgICAgMCwgMCwgODkxNSwgMjc1OSwgOTQ1LCA2Njg5LCAwLCAwLCAwLCAwLCAxMjkxLCA3NDgyOCwgMCwgMCwgOTUzMSwgMTMxNTUsIAorICAgIDg1MDUsIDY4Mzc5LCAxMjA2MiwgMCwgMCwgNjU0ODcsIDAsIDQxODM3LCAxMjA2MTEsIDEyMDQzMiwgMCwgMCwgMCwgCisgICAgMTIwNDMzLCAwLCA2MzkzNSwgNzM5NjIsIDEyMDgwNiwgNjQ3ODcsIDQzNTI0LCAwLCA2NDQyNiwgMCwgMCwgMCwgMCwgCisgICAgNjU2NjQsIDY2OTMsIDk4NDMsIDAsIDg2NzQsIDAsIDAsIDAsIDAsIDEyNjI0LCAwLCAxNjczLCA0ODExLCAwLCA1OTg2LCAKKyAgICA5MzM4LCAzMDQ2LCA3NDQ4MCwgNTk4NSwgOTE3OTI4LCAxMTk1OTgsIDk4MjAsIDAsIDEyMTg3LCAwLCAwLCA1OTg0LCAwLCAKKyAgICA0MzMwOCwgNDM5MywgMCwgMCwgMCwgMCwgMCwgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAwLCAzNTE0LCAKKyAgICA2NTQ4NSwgMCwgNzQ5MiwgMCwgNzQ2MDUsIDExOTEzNCwgNzUxNCwgMCwgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgCisgICAgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIDIxOSwgMCwgMCwgNjkyLCA0MzU4OCwgNzQ0MzMsIDQxNjM1LCA0MzI0MSwgOTY4OCwgCisgICAgMCwgOTUzNSwgMCwgMCwgMCwgNjQ1MzAsIDAsIDY0NjEwLCAxMTgwNCwgMCwgMCwgNzQ1MywgMCwgODAxMywgMCwgMCwgMCwgCisgICAgODg5NSwgNTI1MywgMCwgNTQ1OCwgMCwgMjg2NiwgMCwgMCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIDAsIDAsIAorICAgIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgMCwgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIDYzODI2LCAwLCAKKyAgICAxMTg5NDEsIDY0MzkyLCAwLCAwLCAyODQ0LCAwLCA0MTk3NCwgMCwgMTIxMzksIDAsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAKKyAgICAzMTA0LCAwLCAwLCAxOTQ3NjUsIDAsIDUzMDgsIDAsIDI5MCwgMCwgMCwgMjg2MiwgMjc5MiwgMTk1MDg4LCAwLCAwLCAKKyAgICAzMjY4LCA2NjU5MSwgMCwgNjU1MiwgNDIzNjcsIDcwMzUsIDEyMDU1OCwgMCwgMCwgMTgxNCwgMCwgMTAyNDAsIDAsIAorICAgIDc0MzA1LCAwLCA3NDUyOCwgMCwgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIDQzNDEsIDc3OTU2LCA2NDQ4MiwgMCwgCisgICAgODE2MywgNjUyNzAsIDAsIDAsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgMCwgNDMzMjMsIDEyMDUxMywgCisgICAgMTE5ODk3LCA5MDcxLCAwLCAwLCAzNjU0LCA3Nzg5LCA5NjM3LCAwLCAyNTM1LCA2NTUwNCwgNzY1MywgNDA5OTMsIAorICAgIDExOTg5OSwgNjY1ODcsIDE5NTA5OCwgMCwgMCwgMCwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgCisgICAgNzQwODgsIDMwNTYsIDEwODIzLCAwLCAxMjczMjcsIDg3NjIsIDEwNTA4LCA3NDUwNiwgNzM3NzAsIDQzOTY5LCA0MzE5MywgCisgICAgMTA3MzcsIDM0NjMsIDAsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIDcwNDksIDAsIDUxOTUsIAorICAgIDAsIDAsIDY2NjM5LCAwLCAwLCAwLCAwLCAwLCAxMjA1NjEsIDEyNjIsIDAsIDY1NjEsIDE5OTM5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMTk5MDcsIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgMCwgMCwgOTEwNywgMCwgNTcwMiwgCisgICAgMzY1NSwgNjc2NjEsIDg0MzAsIDAsIDc0MTMyLCAxMjA3NTgsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIAorICAgIDc3MjQsIDc0Mzg4LCA2ODM3NSwgMTA3OTYsIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgMTk0NzQ0LCAKKyAgICAxMTcyMCwgMCwgMTE3MjEsIDAsIDQ3OTgsIDAsIDExOTMxNiwgNjYwMzgsIDQ3OTMsIDY3ODUxLCAxMTcyNiwgMCwgNzQyMDQsIAorICAgIDY4NjEwLCAwLCA2ODYyNiwgODk0LCAzMDAsIDAsIDEyMzA2LCA2NjIzNSwgODAwNCwgMCwgMCwgMjU2MiwgMCwgMCwgCisgICAgNDI1MDMsIDAsIDExNjUyLCAwLCAwLCAxMTkyNDEsIDAsIDAsIDUwOTYsIDUwOTUsIDI4NjMsIDM0MjQsIDAsIDEwNDU0LCAKKyAgICA0MjUzMCwgNTA5NCwgMTE5NjM4LCAwLCAxMzE1NiwgMCwgMTA4MzIsIDUwOTMsIDAsIDAsIDAsIDUwOTIsIDEwNzA4LCAKKyAgICAxMTMyNywgMCwgNTA5MSwgMTc2LCAwLCA5MTUzLCA0MTA0LCA3ODU5OSwgNzg2MDEsIDEyMTUsIDQyNzEyLCA1NzQ0LCAKKyAgICAxMjI3MiwgOTgzMiwgMTE3NzcsIDAsIDEyNzM3MSwgNDI4ODEsIDAsIDg5ODAsIDExODk4OCwgNjc4NjEsIDg4NDQsIDcyMDksIAorICAgIDAsIDAsIDQyNzgsIDAsIDAsIDAsIDAsIDkwNzQsIDQzNDgsIDAsIDY1NTU4LCA2NTk0NiwgODExMywgNzA4NywgNTI1NSwgCisgICAgMTc4NiwgNjYxLCAwLCAwLCAwLCA3NDQyMywgMCwgNTg2LCA3NDQxNCwgNjQzNTksIDEyNjcsIDAsIDY1NDY4LCAwLCAKKyAgICA2NTczMSwgMCwgMCwgMzYyMSwgMTIwNDczLCA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgCisgICAgMTEzODMsIDAsIDAsIDAsIDE3MTQsIDc0NDA2LCAwLCAwLCAwLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCAKKyAgICA2NCwgMTIwNjk0LCAwLCAxMDI5MSwgMTAzMjMsIDI4MjYsIDAsIDAsIDAsIDQyMDA4LCA5NzA4LCA0MjcxMCwgMCwgNDIwMTEsIAorICAgIDQxOTk5LCAwLCAxMjIwNiwgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDAsIDY1ODMzLCA3Nzg0OCwgMCwgCisgICAgMTc2NSwgMCwgMCwgNjU1ODgsIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAwLCAxMDQ3OSwgNjQ5NTksIAorICAgIDI4NTIsIDAsIDAsIDAsIDAsIDE5NTA2MSwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAxMDE0NywgCisgICAgMTI5MzUsIDAsIDAsIDAsIDAsIDAsIDc4NzU3LCAwLCAwLCAwLCAwLCA2NDk0NywgMTI0NjcsIDI4NjQsIDY0NzE5LCAxMTQ4LCAKKyAgICAxMDQzNSwgMTE0NjIsIDQxNjc1LCAwLCAyNzY1LCAwLCAwLCAwLCAxMjA3MTksIDAsIDAsIDY2NjYyLCAwLCA3ODEzMywgCisgICAgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMCwgMCwgNzc5ODgsIDI2MywgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDAsIAorICAgIDc3OTg2LCAwLCA2OTMxLCAwLCA2NDM1NSwgNzE3NywgMTIwNTMwLCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIAorICAgIDQyMDIwLCAwLCA2ODA2LCA2OTkyLCA0MjAxOSwgMCwgNDEyOTAsIDAsIDc1MCwgMCwgMCwgMTAxNjMsIDYzOTEzLCA3NDA2NiwgCisgICAgNzAzMiwgNTk1NCwgNjQ5MzEsIDQzMTQsIDAsIDE5OCwgNjg0NTMsIDczMCwgMCwgNjM5MDcsIDc3OTkzLCA3ODg5MSwgCisgICAgMTMxNjUsIDEwODE0LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgNzgwMTUsIDAsIDQxMzc4LCAxMTAwOCwgNjkzOCwgMCwgCisgICAgMCwgMjA5NywgNjYyNDYsIDEyMDU2MCwgMCwgMCwgMCwgMzg5MiwgNjg2MzIsIDAsIDY3MTIsIDY2MDQ1LCA0MTQ3MCwgCisgICAgNjQ4MDUsIDAsIDAsIDAsIDY0ODAxLCAwLCA0OTcsIDEyMTAwLCA1OTUzLCAwLCA3Nzk2LCAwLCA0MzI1NCwgNzM4MzEsIDAsIAorICAgIDEwMjkzLCA1OTUyLCAxMjgxLCAwLCAwLCAwLCAxMDY3NywgNjA0LCA0MTA5NywgOTE4MiwgMTg1OSwgMCwgMCwgMzQyNSwgMCwgCisgICAgMCwgMjgzNiwgMCwgMCwgOTcwNywgMCwgNDMyMDIsIDAsIDAsIDY1MTk5LCAxNzM4LCA5MTc4MTgsIDAsIDI4MzIsIDAsIAorICAgIDk2NzAsIDEyOTM3LCAwLCA2NjM3NCwgMCwgMCwgMjgyMiwgMCwgNDQzNiwgMCwgMCwgNzM3NTIsIDAsIDY0ODcyLCAwLCAKKyAgICAxMzMxLCAwLCAwLCAwLCAxMjcwOCwgMCwgNTA5MCwgNTA4OSwgMCwgMCwgMTE5MTA5LCAwLCAwLCAzMTksIDExODkzMSwgCisgICAgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDAsIDc2NDAsIDk2LCA1MDg2LCAwLCAwLCAwLCA1MDg1LCA2NDI4NiwgMCwgMCwgCisgICAgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIDAsIDAsIDAsIDEyNzI0MSwgNjY3NywgCisgICAgNzYwMSwgMCwgNTkxLCA2NDQxOSwgMTE4OTUzLCAwLCAwLCAxMTg5MjMsIDczNzM0LCAwLCAxMDkzOSwgNjEwNiwgNjkzMywgCisgICAgNDEyNzEsIDY3NjAsIDExOTkwMywgNDUzNCwgNDEyNzAsIDkxNzk2MiwgMCwgNjU1NzQsIDAsIDkyMjQsIDAsIDM2NzEsIAorICAgIDg5NzYsIDAsIDAsIDQxMjc1LCA2MzcyLCAwLCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgMCwgMCwgCisgICAgNjcyOCwgMCwgOTcxNSwgMCwgODI1OCwgMTE3NTMsIDc0ODIwLCAwLCA5NjAyLCAxMTg5MTksIDQyLCAwLCA0MzY4OCwgMCwgCisgICAgMCwgNzQ1OCwgMCwgMCwgNjUzODUsIDExOTkwMCwgMCwgMTE5NTgsIDAsIDkxNzgyMiwgMCwgNjI1NCwgNDI3MjEsIDY2MzM2LCAKICAgICA4MDQ1LCAxMTU1MCwgMCwgMCwgMCwgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgOTE3OTQ2LCA5NzM3LCAxMzEwOSwgMCwgCi0gICAgOTQ2NywgNTU1OCwgODg3OCwgMCwgMTk1MDM2LCA3NDUxLCA3NDM1LCAxMDE0NiwgMCwgOTA4NiwgNjQ1NjYsIDAsIDY0NTg0LCAKLSAgICA3NDM3LCA3NDU0LCAxMjU5NCwgMCwgMCwgNDU0NiwgNzczMSwgMCwgOTE3OTQ4LCA3NDI0MywgMCwgMzgwNSwgMCwgMCwgMCwgCi0gICAgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCAwLCA3NTQ0LCAwLCA0MzUyNSwgMCwgMCwgMTAxNTIsIDY0NDIyLCA2NTA5MSwgCi0gICAgMTE5MTEzLCA3NjAyLCA2NDcyOSwgMCwgNDM1MjEsIDAsIDQyMzAyLCAwLCA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIAotICAgIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDAsIDAsIDAsIDU1MDYsIDAsIDE5MTEsIDY2NjUyLCAwLCAxMjU5OCwgCi0gICAgODg0NSwgNjY2OTgsIDAsIDEwNzkyLCA4ODg5LCAwLCA2OTUxLCAwLCA2NDc1MSwgMCwgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAKLSAgICAwLCAwLCA3NDM2NSwgNzU1MiwgMCwgMCwgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgCi0gICAgNjQ1MDEsIDEyMTAsIDAsIDY1MTc1LCAxMDE4NCwgNDMxNDAsIDY1NzI3LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDAsIAotICAgIDAsIDAsIDAsIDQzNTcsIDAsIDAsIDAsIDc0MjMzLCAxMTk4NDYsIDExOTg1MiwgNDI4NjAsIDExOTgzOCwgMTA5NDEsIAotICAgIDY1NzIxLCA2OTYyLCAwLCAwLCAwLCAwLCAxMTAxNCwgMCwgODk0MiwgMTIwMDAsIDAsIDAsIDAsIDExOTc0LCAwLCA0Mjc3MiwgCi0gICAgMCwgMTE2NTAsIDUwMTMsIDAsIDAsIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDAsIDAsIDAsIDAsIDAsIDY0NzE0LCAwLCAwLCAwLCAKLSAgICAxMjEyMCwgMCwgMCwgMTEwMjQsIDc0ODExLCAwLCAxMDU2MywgMCwgMCwgNDM1MjIsIDI0NjIsIDAsIDE4MzcsIDAsIAotICAgIDYzOTcyLCA2OTU3LCAwLCAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIDY1NzE0LCA2NTcxNSwgCi0gICAgNjU3MTYsIDAsIDEyNzAwNSwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIDExOTIzNCwgMTEyNywgNDU1LCAKLSAgICAwLCAwLCAwLCAzNDgzLCAxMjcxMjIsIDE5ODksIDAsIDAsIDkxMDQsIDM1MDMsIDY1Mzc1LCAwLCAwLCA0MjYzMywgMTg2NCwgCi0gICAgMCwgNzQzMDYsIDQxNDQ2LCAyNTQwLCA3NzM2LCAwLCA3NDA2NCwgMCwgMTA1MjEsIDAsIDQyMTczLCA5NzA1LCA3NDEyNCwgCi0gICAgODYwNCwgNjk1NSwgMTA5MTYsIDAsIDYxNDksIDM4ODcsIDE5OTU2LCAxNDExLCAyODI0LCAwLCAxMDEwNiwgMCwgMTQwMywgCi0gICAgMCwgMTM0NywgOTYzMSwgNzQ0NDQsIDAsIDAsIDAsIDAsIDg2NDAsIDAsIDI1OCwgMTY1NCwgMCwgMCwgMCwgNDMzMTQsIDAsIAotICAgIDAsIDQwNDIsIDExNDc4LCAyODczLCA2Mzk3NywgMTE1MjIsIDQxNjY4LCA4NTQ5LCAxMDg2MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzQ1ODUsIDQxMzkxLCAwLCA5MTc5MDMsIDM3NiwgNjk4NywgOTIyMSwgMCwgMCwgODgyMywgMCwgMTI5NDMsIDY1MTg1LCAKLSAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCAwLCA3NDQzOSwgMjAzOSwgMCwgNzQ0NiwgMTY4NCwgNjM5NzksIDEwOTc0LCA0NTgsIAotICAgIDEyMDYyMCwgMCwgMCwgMCwgMTE5MTYsIDY1MDE2LCAwLCAwLCA0MjExNSwgMCwgMTIyODgsIDAsIDAsIDE0OTMsIDQyMTExLCAKLSAgICA3NTUzLCA0MDk3LCAwLCAxMzA4MCwgMCwgNjU4MDgsIDY2MTAsIDYwMzAsIDgwNTksIDc1MDgsIDQxNjM2LCAwLCAwLCAwLCAKLSAgICA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAwLCA0MTI3NywgNjQ2NTgsIDAsIDY0MzgwLCA2NjI1LCAwLCAxOTkwNCwgMCwgCi0gICAgMCwgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgMCwgNzQ1OTIsIDAsIDEwOTc5LCA0MTk1MywgMCwgNDE0MzQsIDYwNjIsIDAsIAotICAgIDAsIDE5OTE2LCA2OTEzLCA5MzMsIDEzNDEsIDk4NDIsIDAsIDY1NzQ0LCAwLCAwLCAwLCAwLCA0MTYxNSwgMTAxMDUsIAotICAgIDY1ODEwLCAwLCA0MTYzMiwgNzQ5MywgMCwgMCwgNDE2MjIsIDAsIDAsIDExOTU1NiwgNzQ1ODQsIDc2MzIsIDk3MTYsIAotICAgIDE5OTU0LCA5ODA1LCA1OTkwLCA5MDAsIDAsIDYzOTU3LCAwLCAwLCAzNjEyLCAwLCA2NDM3NiwgMCwgNTM4OSwgMCwgMCwgCi0gICAgNjU5MzgsIDI4MzksIDk2MjEsIDU4MiwgMCwgNzQzNjgsIDM3NDksIDY5NDksIDc1NjksIDc0MDYxLCAwLCAwLCA2OTU2LCAKLSAgICA0NDAzLCAxOTk2MiwgNjU1NTksIDMyOTksIDAsIDAsIDExOTEyNywgOTAwMiwgMCwgNzQzNzIsIDc0MjM2LCA4NDc4LCAKLSAgICA3NTk4LCA1NDYsIDQyNDY5LCA2NTU2OSwgMTkxOCwgOTU0MiwgNDcyLCA3NzE2LCAxMDMxOSwgMTAzODMsIDY5OTYsIDAsIAotICAgIDYzOTUyLCA4NDI1LCAzNjAyLCA4MzI4LCAxMTc2NCwgMTE4ODk0LCAwLCAwLCA0MTE4MywgMTI5MDcsIDEwMjcxLCAxMDI4NywgCi0gICAgNjg0LCA3NDE4NSwgMCwgMjg1NCwgMTE5NTg2LCA0NTkyLCA2NTc1NSwgMCwgMCwgMTE5NjMsIDY1NzUzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5ODgxLCAwLCA2NTc1NywgMzQxNSwgMCwgMCwgODY0OCwgMCwgMTE4ODg2LCA0MzA0NywgMCwgMTMxODAsIDAsIDQxOCwgCi0gICAgMCwgMCwgMTAyOTUsIDEwMzI3LCAxMDM5MSwgNDE3NTIsIDc0MzM5LCA4NjQxLCA0MTQ0OSwgMCwgMCwgMCwgMTA5MTEsIAotICAgIDY5NDIsIDAsIDEwMjQsIDQyODQ5LCA0MTc1MSwgMCwgODk0MSwgMCwgNDU1NCwgMCwgOTAyMywgMTE2ODUsIDAsIDAsIDAsIAotICAgIDAsIDExNDM3LCAwLCAwLCAxMjA3MDAsIDYzOTY3LCAwLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgNDMxNjYsIDAsIAotICAgIDExNjgwLCAwLCAxMTY4NiwgMCwgNjUyMjQsIDQ1NjUsIDQ2NTUsIDExOTU1MywgMCwgMCwgNjQ1MjMsIDEwMzQzLCAxMDQwNywgCi0gICAgMCwgNjY2NzEsIDExNDY2LCAwLCAwLCA0Mjg5MCwgMCwgMTIwNTAsIDE5NDc1MCwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIAotICAgIDU3NDMsIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDAsIDAsIDg4NzUsIDAsIDAsIDkxNzk5MSwgNzUzMSwgMTI4NDcsIAotICAgIDI0MTMsIDAsIDAsIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCA0MjU2NCwgMCwgMTU4MiwgMCwgNTUwOCwgMCwgMCwgMCwgCi0gICAgMTA4MDEsIDAsIDExODc5OCwgMCwgNzE3MywgNDk2LCAxMDQzOSwgNDMxMywgNjQ2MDcsIDExOTU1NywgNzg2MCwgMCwgOTA2LCAKLSAgICA0Mjc5MywgMjg0MiwgNjQwNSwgNjQ3MjIsIDEzMTMyLCA3OTgsIDY0Njk0LCAxMjgwMSwgODQwNiwgMTE1MywgMCwgNjQ3ODgsIAotICAgIDAsIDgwNTQsIDkxNzQsIDE5NDc0OSwgOTE3OTc2LCAwLCAwLCA0MTYxMSwgNDY0MiwgNjY1NzQsIDExNTU2LCAwLCAwLCAwLCAKLSAgICA0MjA4OSwgMCwgOTAwOCwgMCwgMCwgMTk1MDk2LCA0MjA3OSwgOTE3OTgxLCA5MTc5OTYsIDQyNTEzLCAwLCA0Mjg0MiwgCi0gICAgNzM5ODUsIDAsIDExODk3NCwgMTI3MDAzLCAwLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAKLSAgICAwLCA0NTgwLCA0MTk2NywgMCwgNjQzODQsIDAsIDExOTE1OCwgMzAyMSwgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgCi0gICAgNjk0NiwgMCwgMCwgMCwgMCwgNjUyMDQsIDAsIDY4MTEzLCA2NTE5NiwgOTg4MCwgNDIwMTAsIDAsIDY0NTg5LCAxMDExMSwgCi0gICAgNjQ4NzUsIDAsIDAsIDAsIDExMzYwLCAwLCAwLCAwLCAwLCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDAsIDAsIDAsIDAsIAotICAgIDY1NjcxLCA0MTEwLCA2NjAwNSwgNjk1OSwgMTA5MjksIDExOTExMCwgMCwgNjY3MDMsIDAsIDg2MTcsIDQxOTgyLCA2MDI1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDAsIDEwMTE3LCAwLCAwLCA0MTY0MiwgMCwgMCwgMCwgODMwMSwgCi0gICAgMCwgMCwgMTg3LCAwLCA2NTY2OSwgMCwgNDk2MywgMCwgMCwgMCwgODk2NCwgNjU2NzYsIDY1Nzg1LCAwLCA0MTk0OCwgMCwgCi0gICAgMCwgMCwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgMCwgMCwgNDE3NjYsIDAsIAotICAgIDY1ODgyLCAwLCA0MTc2MCwgMTE4OSwgOTA1LCA0ODAsIDEwOTg1LCA0MTczMywgNjc4NTksIDk2MjksIDQyNDM2LCAxNzQ1LCAKLSAgICAwLCA3MzgzNSwgNzg4OCwgMCwgMCwgMCwgMCwgNDE1MDcsIDg4MDYsIDcwMjMsIDAsIDc0Mjc5LCA2NDU0MCwgMCwgNzg2NywgCi0gICAgMCwgNjIzNiwgMCwgMCwgMTA1MDUsIDAsIDEyODUxLCAxMTg5NDgsIDM0OCwgNTQ3NCwgMCwgMzEwMywgMCwgNDE3NTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQxNzM5LCAwLCA0MjUxNSwgMTA5MzEsIDQxNzU2LCA0MzM0NywgNDI1NjAsIDUzOTEsIDQxNzQ2LCAKLSAgICAxMTkxNDcsIDAsIDQxMjU5LCA1NTYxLCA3NDM2MCwgMjY5MSwgMCwgNjU1NTMsIDc5MzMsIDU1NjIsIDAsIDAsIDQxMjYyLCAKLSAgICAwLCA2NDQyMSwgNzQ4NDYsIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgMCwgMCwgMCwgMCwgMTE4ODQ3LCAKLSAgICA0MTI2NiwgMCwgMCwgOTE3NjMwLCAxMDU4NSwgNjU3NDEsIDQxNzM3LCA5NTc0LCAyNjY2LCAwLCA0MTczOCwgODMxLCA0MTksIAotICAgIDEzMTI2LCAxMDcxNiwgMCwgNDI4MjIsIDAsIDY0MzQsIDAsIDY5MzksIDc3NjYsIDY0MzIsIDAsIDAsIDkxNiwgNzY5LCAKLSAgICA0MTc0MiwgMTE5NjgsIDEyMDU1NywgNjQzMywgNTU2MywgNTQ3LCAxOTQzLCA2NDM5LCA1NTYwLCA0OTk0LCA0ODcsIDAsIAotICAgIDQ0OTcsIDM3NTQsIDAsIDEyMDQyNCwgOTAzOSwgMCwgNDE3NzYsIDAsIDg3MTYsIDE1OTUsIDExOTIwNiwgMCwgMCwgCi0gICAgNzQyNjAsIDAsIDQzMjY3LCAwLCAwLCAwLCAxMjE4NSwgMCwgMCwgMCwgMCwgMCwgNDI4NTYsIDg2MzQsIDAsIDAsIDQyMDksIAotICAgIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCA2NTYxMiwgMCwgNjY5LCA1Njc5LCAwLCAwLCAxMTg5NjEsIDAsIDAsIDU2NzgsIAotICAgIDExODIxLCAwLCAwLCA0NjAsIDAsIDAsIDAsIDAsIDEyMDc0NywgMCwgMCwgMCwgMTE5MDIyLCAwLCAwLCAwLCA3NzgyLCAKLSAgICA5MDQ0LCA0OTc0LCAxMTc2MCwgOTE3NTQ3LCA3NTc3LCA2NTcxMSwgNDE5MTIsIDEyMTYsIDAsIDAsIDU3OTIsIDAsIDAsIDAsIAotICAgIDAsIDQyMjY0LCAxMjI0NCwgMCwgNTY4MywgMCwgMCwgMCwgMTU0OSwgMCwgMCwgMTIwMzk4LCA1NjgyLCA2MjA2LCA4NjcwLCAKLSAgICA3NDUyMCwgNTY4MCwgOTE3NTY4LCAxMDAwMSwgMCwgMCwgMTQ0OSwgMTAyNDEsIDAsIDAsIDAsIDEwNTUyLCA2NDM0MiwgCi0gICAgNDE5MjIsIDAsIDg1ODQsIDAsIDU1NjcsIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDAsIAotICAgIDAsIDAsIDY1NzA4LCA2NTcwOSwgNTU2NiwgMCwgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDAsIDQyNTM5LCA1OTQyLCAKLSAgICA4NDY4LCAwLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIDAsIAotICAgIDAsIDAsIDQ1NywgMCwgNjU3MDEsIDE5MzQsIDQzMDA2LCAwLCA4ODAyLCAwLCA2NTEzMCwgMCwgMCwgNjA4NywgMCwgMCwgCi0gICAgNDE3NTcsIDAsIDgwNDMsIDg5NTAsIDY1Njk0LCA2NDQ4NSwgNDM1MzQsIDEwNDU3LCAwLCAxMTk2MSwgMTE5MDA2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA2NTUxNSwgOTQ5OSwgMTAwMzUsIDEzMDY5LCAwLCAwLCA5ODg5LCA2ODE4NCwgNDI4MDYsIDAsIDcyNTYsIDAsIAotICAgIDAsIDE2NjcsIDQyMTYxLCAwLCA0MjQyOCwgMCwgNjkzNCwgMCwgMTA4MDIsIDY0ODYxLCA2NTU2LCAwLCAwLCA4MTAxLCAKLSAgICAzNjEwLCAwLCA0MTc0OCwgNDk5NSwgOTU1LCA2NTkwNywgMTE5MjA4LCA1MzUwLCA2NDMzOSwgMCwgNjQ1NDksIDEwODc1LCAKLSAgICA5MTc5NTYsIDU0NzcsIDY1NjkyLCAwLCAwLCAwLCAxMjg5NiwgMTA0NTYsIDkxNzk1NCwgMCwgMzg3NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjU2MDMsIDAsIDY1Njg3LCAwLCA0MTAzOCwgNzQwMDksIDExOTU3MCwgNjc4NTcsIDg1MzYsIDAsIDAsIDAsIAotICAgIDc0NDMyLCA3MjQsIDAsIDE0NTUsIDAsIDcxODMsIDY0NTgzLCAxMTkyMzMsIDAsIDQxNzUsIDkxNzk2MiwgMCwgMCwgOTM5LCAKLSAgICAwLCA0MzUyMCwgMCwgNzQ1NjksIDkxNzk1OCwgMCwgOTE3OTU5LCA5MTc5NDUsIDE5NDcwNCwgMTA3ODgsIDYwODgsIDAsIDAsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCAwLCAwLCA0MTc0NCwgMCwgNzgyNywgMCwgNjk2NSwgMCwgCi0gICAgMCwgMTMyMDEsIDAsIDAsIDAsIDc0MzgyLCA3Mzc4MSwgNzkxOCwgNzM5ODgsIDAsIDAsIDkxNzg4NCwgMTcyOCwgMCwgCi0gICAgMTIwNzEwLCAxNzgsIDEyOTcyLCAwLCAwLCAwLCAxMjA2NzEsIDAsIDAsIDAsIDEyMDQwNSwgNjU2OTAsIDAsIDAsIAotICAgIDExOTA1NCwgMCwgOTI1MiwgOTE3ODg5LCA0NjUyLCA3NDI1OSwgMCwgMCwgMCwgMTMwNjUsIDk5MjMsIDEwODA2LCAwLCAKLSAgICAxMTc2MywgMCwgMTIwNjg4LCAwLCAxMTkwOTgsIDAsIDY5OTMsIDAsIDAsIDgzMzMsIDAsIDAsIDAsIDAsIDc0NDY0LCAwLCAKLSAgICAwLCA3NDA4MCwgMCwgMCwgMTE5MTAsIDAsIDgyNzgsIDg5NjMsIDQwMzQsIDAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAKLSAgICAwLCAwLCA4Njc3LCAwLCAxMjcwNywgOTM1MCwgNjYwMzcsIDAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgMCwgMCwgCi0gICAgNzQ5MSwgODg1NiwgMCwgMCwgNDMxNTAsIDAsIDEyMDQwNCwgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgMjU5MiwgCi0gICAgMTI4NTMsIDQzMjY5LCA3MjYzLCAxMjAyNDQsIDY1MzYsIDEyMDIzOCwgMTIwMjM5LCA2NTUxNiwgMTIzMjEsIDEyMDM5MSwgCi0gICAgMTIwMzg4LCAxMjAzODksIDEwMDA3LCAxMjAyNDYsIDk1ODgsIDEyMDI0OCwgMTU5NiwgMTIwMzgzLCA0MTk5NCwgNjU4MDEsIAotICAgIDAsIDAsIDY2NTcyLCAwLCAwLCAxMDYxMywgODA5MiwgMTI4MDUsIDQxOTI4LCA0MDk4MSwgMCwgMCwgNTAwNiwgNjQzMjgsIAotICAgIDAsIDY1Mjk4LCAwLCA4ODI1LCA3NDU1NSwgNjU5NDAsIDAsIDAsIDYxMDcsIDAsIDExOTE3NywgMCwgMCwgMCwgMTE3ODMsIAotICAgIDMzNSwgMTIwMjI3LCA2NDY4OSwgNDM4LCA0NTEwLCA1NzY1LCA4NzIxLCAxMjAyMzMsIDExOTIyNywgNjA5MiwgMTI4NDAsIAotICAgIDQzMTEyLCA4ODc2LCAxMjAyMzEsIDgwOTYsIDEwMjg0LCAwLCAwLCAwLCAxMDM4MCwgODczMywgMCwgMCwgNDE2MDIsIDAsIAotICAgIDAsIDc0ODMxLCA5MTc5MDEsIDAsIDczNzQ3LCA2NTM5OSwgMCwgNjQ1OTEsIDQyNDA1LCAwLCA5MTc4OTcsIDg0MywgCi0gICAgMTE1NDEsIDAsIDAsIDAsIDQxOTM1LCA3NDQ5NiwgNDE5MDIsIDAsIDAsIDIxNSwgNDEyNTgsIDAsIDQzMTU5LCAxOTUzLCAKLSAgICA5NTc5LCA0MTkzOCwgMTI1NiwgMzkxMCwgOTQwNywgNjI0MiwgMCwgMCwgNDEyNTcsIDQxOTAwLCA4Njc1LCAxMDcwMCwgCi0gICAgODgwNSwgMTc0MiwgMCwgOTMzMywgODIwMiwgMCwgMCwgMCwgMCwgMCwgNzM4ODIsIDQ5OSwgMCwgMCwgMCwgMTI2OTgzLCAwLCAKLSAgICAxNzEyLCA1OTMyLCAwLCA0MTc2MiwgMCwgMCwgMTE5NjcsIDE3NzUsIDAsIDAsIDAsIDAsIDAsIDk0NTgsIDAsIDY0NzAsIAotICAgIDkxODAsIDEyMDM4MCwgNDMxNzYsIDAsIDAsIDQyNzgyLCAwLCAwLCAwLCA5MTc5MTIsIDc0Nzc3LCAxMjA2NjksIDk0MTQsIAotICAgIDEyMDM4MiwgNzM3ODIsIDczOTY5LCA1NjUsIDQyNDg0LCA1Nzk0LCAyMDEsIDI2NjIsIDQyMjkyLCAwLCA4MjU0LCAwLCAKLSAgICAxMDk3NSwgMCwgMTIwNjI1LCA3NDc2MywgMTAyMiwgNDEwOCwgMzg4MCwgNzQyNDcsIDAsIDAsIDAsIDkxNzk4MCwgNzUwNywgCi0gICAgMCwgNDMxNDksIDAsIDY1MDMxLCA3OTYxLCAxNjM2LCAwLCA2NTAyOSwgNjUwMjQsIDAsIDEyNDczLCA2NTM0LCAwLCA5OSwgCi0gICAgOTgsIDk3LCAxMjA1NzEsIDY3NTg0LCA0MDQ5LCAwLCAwLCA3MDkwLCAwLCA3ODkyLCA5MTc5NjksIDEwNzc3LCAwLCAKLSAgICA2NTMxMCwgNjU1NjIsIDY2NTk5LCAwLCAwLCA4MDM5LCAzMzYzLCA2NjU5NCwgMCwgMCwgMCwgMTI1OTYsIDY2NTk1LCAKLSAgICA0MjI1OCwgNDI1NzAsIDU1OTMsIDExOTE0OCwgMTIwNzExLCAwLCAxMDEwMCwgNjA2MSwgNjQ4NTQsIDExOSwgMTE4LCAxMTcsIAotICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAotICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDAsIDE1MzYsIAotICAgIDY0MDkzLCA3Mzk3MCwgMCwgMCwgMCwgNjAyMCwgMTI3MTYsIDEyNzExMiwgMTI3NDQsIDQ3NSwgMTIwMzk0LCAxMzI2NiwgMCwgCi0gICAgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDAsIDgxMzQsIDAsIDI5MTMsIDczODcwLCAwLCAxODY2LCAKLSAgICAwLCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCA2NjU4NSwgMCwgMzE5NiwgMCwgMCwgNTkzNSwgMTI1MCwgMCwgCi0gICAgODE3NCwgOTc4NywgOTg1NiwgOTg1OSwgNzkxNiwgOTg2MSwgOTg2MCwgNTI1OCwgMTg4MiwgMTg5MiwgMCwgMTA4ODIsIAotICAgIDQwNSwgMTE0NTQsIDczOTExLCAwLCAwLCA0MTE2OSwgODkzOSwgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgCi0gICAgMTIxNTcsIDAsIDAsIDAsIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgMCwgODI2NCwgMTI2MTAsIDAsIDY0NSwgCi0gICAgMCwgNzYwOSwgNDA5NzMsIDAsIDAsIDAsIDU4MjQsIDk4NCwgMCwgMTA2ODgsIDU4NTEsIDAsIDc3MjksIDczOTgyLCAKLSAgICAxMjA1MTgsIDAsIDE5NTA4NiwgNjY3MjIsIDAsIDAsIDAsIDAsIDQ1MzgsIDEyMDQwNiwgNDMxNDEsIDAsIDAsIDc0MjE0LCAKLSAgICAwLCAwLCAwLCAxMTg5MDIsIDQzMDA1LCAwLCA5NTUyLCAwLCAwLCAwLCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIAotICAgIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCAKLSAgICA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDAsIDg0NTUsIDEwMDgyLCAxMTU3NSwgCi0gICAgMCwgMTE5NTY2LCAwLCAxMjgwOCwgMTIxODMsIDYxNDUsIDAsIDY0OTI5LCAwLCAwLCAwLCA0MzE4NiwgNDI1MDksIDAsIAotICAgIDM5MjIsIDkxODcsIDAsIDAsIDAsIDExOTA1NywgMTE3NTIsIDMzNTMsIDkzNTgsIDAsIDAsIDY2NjgwLCAxMjAwOTAsIAotICAgIDExNzQ3LCA3OTMxLCA4NTU4LCA5Nzk1LCAwLCAwLCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCA0MTAyNywgMTIwMDg2LCAKLSAgICAwLCAxMjAwODgsIDEyMDA4NywgNzAxOSwgMTIwMDczLCAwLCAxMTc1MSwgMTIwMDc4LCAxMjAwNzcsIDY0NjU3LCA4NjU3LCAKLSAgICAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgNDMxNTQsIDQxMDI5LCAKLSAgICAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDAsIDExMjk0LCAwLCA2NjY2NSwgNzg1MSwgMCwgMCwgODY5OSwgMCwgNDI1MjQsIDAsIAotICAgIDkwODUsIDAsIDc1MDQsIDkzMjcsIDYxNjAsIDAsIDAsIDAsIDgwODgsIDAsIDc0MDEyLCAwLCAwLCA0NDM5LCA2OTI2LCAwLCAKLSAgICAxMjkyNCwgMCwgNDIzNjksIDAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDAsIAotICAgIDAsIDAsIDY1ODI1LCA5NTc3LCAxMjA0OTQsIDAsIDY0NjcwLCAwLCAwLCA0MjE1OSwgMTEyOTUsIDAsIDAsIDEyMDc3OSwgMCwgCi0gICAgMCwgMTA5MDIsIDAsIDAsIDAsIDAsIDEwNDcyLCAyOTk1LCAwLCAwLCAwLCAyMzcxLCAwLCAxMjA4MDgsIDI1OSwgMTAwOSwgCi0gICAgMCwgMjQwMiwgMjMzMywgNjQ0MCwgMCwgMCwgNjUxMjUsIDQxMjQ0LCAwLCAxMzI3MSwgOTEwMywgNDExODAsIDAsIDAsIDAsIAotICAgIDAsIDEwMjE5LCAwLCAwLCAwLCAwLCA0MzE3OCwgMTI3MDcwLCA0MTI2MSwgMTE5MzYyLCA5MTc5NzQsIDg2MTMsIDAsIAotICAgIDExODk4OSwgOTE3OTc4LCA5MTc5NzksIDQxNDkyLCAxMjAwNSwgOTE3OTgyLCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIAotICAgIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCAxMTg4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDA1NCwgMTE4ODE1LCA2NjM1LCAKLSAgICAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgMCwgMTE2NjQsIDAsIDAsIDAsIDAsIDExODgxMiwgMCwgMCwgMCwgOTE3NSwgMTE5MjUsIAotICAgIDAsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAwLCAwLCA0OTg1LCAxMzI4OCwgNjcyLCA4MDk4LCAKLSAgICA0MzE5NiwgMTk0NzQ2LCAwLCAwLCAwLCA3NDA0MywgNjUwNzIsIDE1NzcsIDExNzcyLCAwLCA1OTI4LCA0NTI1LCAxMDY1OCwgCi0gICAgNjU5MTEsIDEyNjYsIDEwMTgwLCAwLCAwLCAxMjYyMiwgMCwgMCwgMCwgMTk0NzE0LCAwLCAxMzMxMCwgNzczLCAxOTkzMywgCi0gICAgMTUzOSwgMCwgMCwgNjYzNzQsIDAsIDAsIDAsIDAsIDMwNTEsIDU4NjIsIDc4MjMsIDAsIDAsIDEyMDQxMSwgMzI1MCwgCi0gICAgNzQwMjAsIDAsIDY2NjQ5LCA5NTEwLCA2NjIzNywgMCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgCi0gICAgMzUwNSwgODcwNywgOTE3OTY4LCA5MTc5NjUsIDkxNzk2NiwgOTE3OTcxLCA5MTc5NzIsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgCi0gICAgODgyLCA2Njg2LCAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI1LCAwLCAKLSAgICA0NDMzLCA0MTE1NiwgNzM3NDUsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCA2NDg3OSwgCisgICAgOTQ2NywgNTU1OCwgODg3OCwgMCwgMTk1MDM2LCA3NDUxLCA2NzA2LCAxMDE0NiwgMCwgOTA4NiwgNjQ1NjYsIDAsIDY0NTg0LCAKKyAgICA3NDM3LCA3NDU0LCAxMjU5NCwgMCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDExOTkwOSwgNzQyNDMsIDAsIDM4MDUsIDAsIAorICAgIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgMCwgNzU0NCwgMCwgNDM0NjksIDAsIDAsIDEwMTUyLCAKKyAgICA2NDQyMiwgNjUwOTEsIDExOTExMywgNzYwMiwgNjQ3MjksIDAsIDQzNTIxLCAwLCA0MjMwMiwgNDM3MTEsIDQzNTIzLCAKKyAgICA0MTQ0NywgNTU1OSwgMCwgODcwNCwgMjM5NywgNTU1NiwgMCwgMCwgMCwgOTAxMSwgOTYzMCwgMCwgMCwgMCwgNTUwNiwgMCwgCisgICAgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgMjA5OCwgMCwgNjQ3NTEsIDAsIAorICAgIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgMCwgNzQzNjUsIDc1NTIsIDAsIDAsIDY1Mzg0LCA3MjIzLCA0NTU5LCAwLCAKKyAgICAxOTU2LCA0MzEzOCwgNzAyNCwgNjU3MjgsIDY0NTAxLCAxMjEwLCAxOTUwNzcsIDY1MTc1LCAxMDE4NCwgNDMxNDAsIAorICAgIDQzNjU0LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDExOTEyNCwgMCwgMCwgMCwgNDM1NywgMCwgMCwgMCwgNzQyMzMsIAorICAgIDk5NjcsIDExOTg1MiwgNDI4NjAsIDExOTgzOCwgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAKKyAgICAwLCA4OTQyLCAxMjAwMCwgNjkyMjQsIDAsIDAsIDExOTc0LCAwLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgMCwgMCwgCisgICAgNjYyMTAsIDExODkxNCwgNjYxMywgMCwgMCwgMCwgMCwgMCwgNjQ3MTQsIDAsIDAsIDAsIDEyMTIwLCA0MzQ3NiwgMCwgCisgICAgMTEwMjQsIDc0ODExLCAwLCAxMDU2MywgMCwgMCwgNDM1MjIsIDI0NjIsIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAKKyAgICAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgCisgICAgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMCwgCisgICAgMzQ4MywgMTE5NTkzLCAxOTg5LCAwLCAwLCA5MTA0LCAzNTAzLCA2NTM3NSwgMCwgNjY5NCwgNDI2MzMsIDE4NjQsIDAsIAorICAgIDc0MzA2LCA0MTQ0NiwgMjU0MCwgNzczNiwgMCwgNzQwNjQsIDAsIDEwNTIxLCAwLCA0MjE3MywgOTcwNSwgNzQxMjQsIAorICAgIDg2MDQsIDY5NTUsIDEwOTE2LCA0MzY4NCwgNjE0OSwgMzg4NywgMTk5NTYsIDE0MTEsIDI4MjQsIDAsIDEwMTA2LCAwLCAKKyAgICAxNDAzLCAwLCAxMzQ3LCA5NjMxLCA3NDQ0NCwgMCwgMCwgMCwgMCwgODY0MCwgMCwgMjU4LCAxNjU0LCAwLCAwLCAwLCAKKyAgICA0MzMxNCwgMCwgMCwgNDA0MiwgMTE0NzgsIDI4NzMsIDYzOTc3LCAxMTUyMiwgNDE2NjgsIDg1NDksIDEwODYxLCAwLCAKKyAgICA2Mzk3NiwgMCwgNjg2MjMsIDAsIDc0NTg1LCA0MTM5MSwgMCwgOTE3OTAzLCAzNzYsIDY5ODcsIDkyMjEsIDAsIDAsIDg4MjMsIAorICAgIDAsIDEyOTQzLCA2NTE4NSwgNDE4NjksIDEyNjE5LCAwLCAxMDE1NCwgMCwgNzQ0MzksIDIwMzksIDAsIDc0NDYsIDE2ODQsIAorICAgIDYzOTc5LCAxMDk3NCwgNDU4LCAxMjA2MjAsIDAsIDY5NzkxLCAwLCAxMTkxNiwgNjUwMTYsIDAsIDc4MDY3LCA0MjExNSwgMCwgCisgICAgMTIyODgsIDc4MDU3LCAwLCAxNDkzLCA0MjExMSwgNzU1MywgNDA5NywgMCwgMTMwODAsIDAsIDY1ODA4LCA2NjEwLCA2MDMwLCAKKyAgICA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgMCwgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMCwgNDEyNzcsIDY0NjU4LCAKKyAgICAwLCA2NDM4MCwgNjYyNSwgNzQzNTQsIDE5OTA0LCAwLCAwLCAwLCA2NTM3MSwgNzA3OCwgMCwgODMzLCAwLCA2MzY5LCAwLCAKKyAgICAxMDk3OSwgNDE5NTMsIDAsIDQxNDM0LCA2MDYyLCAwLCAwLCAxOTkxNiwgNjkxMywgOTMzLCAxMzQxLCA5ODQyLCA2NzIwLCAKKyAgICA2NTc0NCwgMCwgMCwgMTk1MDc2LCAwLCA3NDA1LCAxMDEwNSwgNjU4MTAsIDAsIDQxNjMyLCA3NDkzLCAwLCAwLCA0MTYyMiwgCisgICAgMCwgMCwgMTE5NTU2LCA3NDU4NCwgNzYzMiwgOTcxNiwgMTk5NTQsIDk4MDUsIDU5OTAsIDkwMCwgMCwgNjM5NTcsIDAsIDAsIAorICAgIDM2MTIsIDAsIDY0Mzc2LCAwLCA1Mzg5LCAwLCAwLCA2NTkzOCwgMjgzOSwgOTYyMSwgNTgyLCAwLCA3NDM2OCwgMzc0OSwgCisgICAgNjk0OSwgNzU2OSwgNzQwNjEsIDAsIDAsIDY5NTYsIDQ0MDMsIDE5OTYyLCA2NTU1OSwgMzI5OSwgMCwgMCwgMTE5MTI3LCAKKyAgICA5MDAyLCAwLCA3NDM3MiwgNzQyMzYsIDg0NzgsIDc1OTgsIDU0NiwgNDI0NjksIDY1NTY5LCAxOTE4LCA5NTQyLCA0NzIsIAorICAgIDc3MTYsIDEwMzE5LCAxMDM4MywgNjk5NiwgMCwgNjM5NTIsIDg0MjUsIDM2MDIsIDgzMjgsIDExNzY0LCAxMTg4OTQsIDAsIAorICAgIDY5Nzk2LCA0MTE4MywgMTI5MDcsIDEwMjcxLCAxMDI4NywgNjg0LCA0MzUyNSwgMCwgMjg1NCwgMTE5NTg2LCA0NTkyLCAKKyAgICA2NTc1NSwgMCwgMCwgMTE5NjMsIDQzNjIwLCAwLCA3ODg4OSwgMCwgMCwgMCwgOTg4MSwgNDMxMTUsIDY1NzU3LCAzNDE1LCAKKyAgICAwLCAwLCA4NjQ4LCAwLCA2NzQxLCA0MzA0NywgMCwgMTMxODAsIDAsIDQxOCwgMCwgMCwgMTAyOTUsIDEwMzI3LCAxMDM5MSwgCisgICAgNDE3NTIsIDc0MzM5LCA4NjQxLCA0MTQ0OSwgMCwgNzQxMDAsIDAsIDEwOTExLCA2OTQyLCAwLCAxMDI0LCA0Mjg0OSwgCisgICAgNDE3NTEsIDY5Nzc2LCA4OTQxLCAwLCA0NTU0LCAwLCA5MDIzLCAxMTY4NSwgMCwgOTkyOCwgNzg2MTcsIDAsIDExNDM3LCAKKyAgICA0Mzc0MSwgMCwgMTIwNzAwLCA2Mzk2NywgMCwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIDQzMTY2LCAwLCAxMTY4MCwgCisgICAgMCwgMTE2ODYsIDAsIDY1MjI0LCA0NTY1LCA0NjU1LCAxMTk1NTMsIDAsIDAsIDY0NTIzLCAxMDM0MywgMTA0MDcsIDAsIAorICAgIDY2NjcxLCAxMTQ2NiwgMCwgMCwgNDI4OTAsIDAsIDEyMDUwLCA2ODIwMSwgMjg2MCwgMCwgMCwgMCwgNDI3OTIsIDU3NDMsIAorICAgIDEwNDI0LCAxMjA2NSwgNDI4NzIsIDAsIDAsIDAsIDg4NzUsIDAsIDAsIDkxNzk5MSwgNzUzMSwgMTI4NDcsIDI0MTMsIDAsIAorICAgIDc4NjM1LCA5NjIsIDAsIDEyODU1LCA0MTE5NiwgNDI1NjQsIDAsIDE1ODIsIDAsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCAwLCAKKyAgICAxMTg3OTgsIDAsIDcxNzMsIDQ5NiwgMTA0MzksIDQzMTMsIDY0NjA3LCAxMTk1NTcsIDc4NjAsIDAsIDkwNiwgNDI3OTMsIAorICAgIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgNzk4LCA2NDY5NCwgMTI4MDEsIDg0MDYsIDExNTMsIDAsIDY0Nzg4LCAwLCAKKyAgICA4MDU0LCA5MTc0LCAxOTQ3NDksIDkxNzk3NiwgOTk2NCwgMCwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgMCwgMCwgCisgICAgNzg4NTcsIDQyMDg5LCA3ODg1NSwgOTAwOCwgMCwgMCwgMTk1MDk2LCA0MjA3OSwgOTE3OTgxLCA3NzkyNCwgNDI1MTMsIDAsIAorICAgIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCAwLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIDQyMDkzLCAKKyAgICAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgMCwgNjQzODQsIDAsIDExOTE1OCwgMzAyMSwgNDIwMDQsIDAsIDAsIAorICAgIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMCwgNjUyMDQsIDAsIDY4MTEzLCA0MjY5MCwgOTg4MCwgNDIwMTAsIAorICAgIDc0ODI0LCA2NDU4OSwgMTAxMTEsIDY0ODc1LCAwLCA2ODM5OSwgNDM5OTgsIDExMzYwLCAwLCAwLCAwLCAwLCA0MjE0OSwgMCwgCisgICAgMCwgMCwgNjQ5NDEsIDc3OTE5LCAwLCAwLCAwLCA1NTI0NywgNDExMCwgNjYwMDUsIDY5NTksIDEwOTI5LCAxMTkxMTAsIDAsIAorICAgIDY2NzAzLCA3NzkyMSwgODYxNywgNDE5ODIsIDYwMjUsIDY5MjQyLCAwLCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIAorICAgIDAsIDEwMTE3LCAwLCAwLCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAwLCA0OTYzLCAKKyAgICAwLCAxMjc1MTcsIDAsIDg5NjQsIDY1Njc2LCA2NTc4NSwgMCwgNDE5NDgsIDAsIDAsIDAsIDQxOTQyLCA2NTQ0OSwgMzE2MCwgCisgICAgMTAwODEsIDEzMjI2LCA0MjEyMSwgNDI0NzUsIDQyNjYzLCAwLCA0MTc2NiwgMCwgNjU4ODIsIDc4ODQ5LCA0MTc2MCwgCisgICAgMTE4OSwgOTA1LCA0ODAsIDEwOTg1LCA0MTczMywgNjc4NTksIDk2MjksIDY3NDIsIDE3NDUsIDQzNjI1LCA3MzgzNSwgCisgICAgNzg4OCwgMCwgMCwgMCwgNDI2NTYsIDQxNTA3LCA4ODA2LCA3MDIzLCAwLCA3NDI3OSwgOTQ0NywgNzg2NTEsIDc4NjcsIAorICAgIDY5MjE4LCA2MjM2LCAwLCAwLCAxMDUwNSwgMCwgMTI4NTEsIDExODk0OCwgMzQ4LCA1NDc0LCAwLCAzMTAzLCAwLCA0MTc1MywgCisgICAgMCwgMCwgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgCisgICAgNTM5MSwgNDE3NDYsIDExOTE0NywgMCwgNDEyNTksIDU1NjEsIDc0MzYwLCAyNjkxLCAwLCA2NTU1MywgNzkzMywgNTU2MiwgCisgICAgNjk4MDAsIDkxNzg1MSwgNDEyNjIsIDAsIDY0NDIxLCA3NDg0NiwgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCAwLCAKKyAgICAwLCAwLCAwLCAxMTg4NDcsIDQxMjY2LCAwLCAwLCA5MTc2MzAsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIAorICAgIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMCwgCisgICAgMCwgOTE2LCA3NjksIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgCisgICAgNDk5NCwgNDg3LCAwLCA0NDk3LCAzNzU0LCAxMjcwNTYsIDEyMDQyNCwgOTAzOSwgMCwgNDE3NzYsIDAsIDg3MTYsIDE1OTUsIAorICAgIDQxNjE1LCAwLCAwLCA3NDI2MCwgMCwgNDMyNjcsIDQzMjE5LCAwLCAwLCAxMjE4NSwgMCwgMCwgNjgzNTUsIDY4MzU3LCAwLCAKKyAgICA0Mjg1NiwgODYzNCwgMCwgMCwgNDIwOSwgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIDY1NjEyLCAwLCA2NjksIDU2NzksIDAsIAorICAgIDY5Nzg2LCAxMTg5NjEsIDAsIDAsIDU2NzgsIDExODIxLCAwLCA2NzExLCA0NjAsIDAsIDAsIDAsIDAsIDEyMDc0NywgMCwgMCwgCisgICAgNzgwNTAsIDExOTAyMiwgMCwgMCwgMCwgNzc4MiwgOTA0NCwgNDk3NCwgMTE3NjAsIDc4NDk0LCA3NTc3LCA2NTcxMSwgCisgICAgNDE5MTIsIDEyMTYsIDAsIDAsIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCA0MjI2NCwgMTIyNDQsIDAsIDU2ODMsIDAsIDAsIAorICAgIDc4MTE5LCAxNTQ5LCAwLCAwLCAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIDEwMjU2LCA1NjgwLCA5MTc1NjgsIDEwMDAxLCAKKyAgICAwLCA2OTc2OCwgMTQ0OSwgMTAyNDEsIDc4MjkwLCAwLCAwLCAxMDU1MiwgNjQzNDIsIDQxOTIyLCAwLCA4NTg0LCAwLCAKKyAgICA1NTY3LCAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCAwLCAwLCAwLCA2NTcwOCwgNjU3MDksIAorICAgIDU1NjYsIDY5ODAzLCA2NTcwNCwgNjU3MDUsIDExOTA0LCA0Mjg3NSwgNDMzNzMsIDQyNTM5LCA1OTQyLCA4NDY4LCAwLCAKKyAgICAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIDc4NzAyLCAKKyAgICA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMCwgODgwMiwgNzg3MTAsIDY1MTMwLCAKKyAgICA3ODcwNiwgNzg3MDksIDYwODcsIDc4NzA1LCA3ODcxNiwgNDE3NTcsIDc4NzExLCA4MDQzLCA4OTUwLCA2NTY5NCwgNjQ0ODUsIAorICAgIDQzNTM0LCAxMDQ1NywgMCwgMTE5NjEsIDc4NzI1LCA3ODcyMiwgNzg3MjMsIDc4NzIwLCA3ODcyMSwgMCwgNjU1MTUsIAorICAgIDk0OTksIDEwMDM1LCAxMzA2OSwgMCwgMCwgOTg4OSwgNjgxODQsIDQyODA2LCAwLCA3MjU2LCAwLCAwLCAxNjY3LCA0MjE2MSwgCisgICAgMCwgNDI0MjgsIDAsIDY5MzQsIDAsIDEwODAyLCA2NDg2MSwgNjU1NiwgNzgzOTAsIDAsIDgxMDEsIDM2MTAsIDAsIDQxNzQ4LCAKKyAgICA0OTk1LCA5NTUsIDY1OTA3LCAxMTkyMDgsIDUzNTAsIDY0MzM5LCA3ODMwNiwgNjQ1NDksIDEwODc1LCA5MTc5NTYsIDU0NzcsIAorICAgIDY1NjkyLCAwLCAwLCAxMjAzOTcsIDEyODk2LCAxMDQ1NiwgOTE3OTU0LCAwLCAzODc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NTYwMywgMCwgNjU2ODcsIDAsIDQxMDM4LCA3NDAwOSwgMTE5NTcwLCA0MjIzOSwgODUzNiwgNzg3NDAsIDAsIDc4NzI2LCAKKyAgICA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIAorICAgIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgCisgICAgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCAKKyAgICAwLCAwLCA2MzcwLCAwLCA3ODI3LCA2ODQ0MSwgNjk2NSwgMCwgMCwgMTMyMDEsIDAsIDAsIDAsIDc0MzgyLCA3Mzc4MSwgCisgICAgNzkxOCwgNzM5ODgsIDAsIDAsIDkxNzg4NCwgMTcyOCwgMCwgMTIwNzEwLCAxNzgsIDEyOTcyLCAwLCAwLCAwLCAxMjA2NzEsIAorICAgIDAsIDAsIDc4MzI3LCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAxMTkwNTQsIDAsIDkyNTIsIDkxNzg4OSwgNDY1MiwgNjgzNzEsIAorICAgIDAsIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgMTE3NjMsIDAsIDEyMDY4OCwgNjcyMywgNzgxODcsIDAsIDY5OTMsIAorICAgIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgMCwgNzQwODAsIDAsIDAsIDExOTEwLCAwLCA4Mjc4LCAKKyAgICA4OTYzLCA0MDM0LCAwLCAwLCA2NTM0NCwgMTIwNTE3LCA0MTc0NywgMCwgMCwgODY3NywgMCwgMTI3MDcsIDkzNTAsIAorICAgIDY2MDM3LCAwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDAsIDAsIDc0OTEsIDg4NTYsIDAsIDAsIDQzMTUwLCAwLCAKKyAgICAxMjA0MDQsIDY1Mzg5LCAxMjA0MDIsIDEyMDQwMywgMTA4MTMsIDI1OTIsIDEyODUzLCA0MzI2OSwgNzI2MywgMTIwMjQ0LCAKKyAgICA2NTM2LCAxMjAyMzgsIDEyMDIzOSwgNjU1MTYsIDEyMzIxLCAxMjAzOTEsIDEyMDM4OCwgNTUyODcsIDEwMDA3LCAxMjAyNDYsIAorICAgIDk1ODgsIDEyMDI0OCwgMTU5NiwgMTIwMzgzLCA0MTk5NCwgNjU4MDEsIDAsIDAsIDY2NTcyLCAwLCAwLCAxMDYxMywgNjY5NywgCisgICAgMTI4MDUsIDQxOTI4LCA0MDk4MSwgNzg0MDMsIDc4NDA5LCA1MDA2LCA2NDMyOCwgMCwgOTkzMSwgMCwgODgyNSwgNzQ1NTUsIAorICAgIDY1OTQwLCA0MzI1OSwgMCwgNjEwNywgMCwgMTE5MTc3LCAwLCA3ODQwMSwgMCwgMTE3ODMsIDMzNSwgMTIwMjI3LCA2NDY4OSwgCisgICAgNDM4LCA0NTEwLCA1NzY1LCA4NzIxLCAxMjAyMzMsIDExOTIyNywgNjA5MiwgMTI4NDAsIDQzMTEyLCA4ODc2LCAxMjAyMzEsIAorICAgIDgwOTYsIDEwMjg0LCAwLCAwLCAwLCAxMDM4MCwgODczMywgMCwgMCwgNDE2MDIsIDAsIDAsIDc0ODMxLCA5MTc5MDEsIDAsIAorICAgIDczNzQ3LCA2NTM5OSwgMCwgNjQ1OTEsIDQyNDA1LCAwLCAxMjA4MjAsIDg0MywgMTE1NDEsIDAsIDkxNzg5OCwgMjA2NSwgCisgICAgNDE5MzUsIDc0NDk2LCA0MTkwMiwgMCwgMCwgMjE1LCA0MTI1OCwgNzc4NzUsIDQzMTU5LCAxOTUzLCA5NTc5LCA0MTkzOCwgCisgICAgMTI1NiwgMzkxMCwgOTQwNywgNjI0MiwgMCwgMCwgNDEyNTcsIDQxOTAwLCA4Njc1LCAxMDcwMCwgODgwNSwgMTc0MiwgMCwgCisgICAgOTMzMywgODIwMiwgMCwgMCwgMCwgMCwgMCwgNzM4ODIsIDQ5OSwgMCwgNDM0NjcsIDAsIDU1MjkwLCAwLCAxNzEyLCA1OTMyLCAKKyAgICA3Nzg0NSwgNDE3NjIsIDAsIDAsIDExOTY3LCAxNzc1LCAwLCAwLCAwLCAwLCAwLCA5NDU4LCAwLCA2NDcwLCA5MTgwLCAKKyAgICAxMjAzODAsIDQzMTc2LCAwLCAwLCA0Mjc4MiwgMCwgMCwgMCwgOTE3OTEyLCA3NDc3NywgMTIwNjY5LCA5NDE0LCAxMjAzODIsIAorICAgIDczNzgyLCA3Mzk2OSwgNTY1LCA0MjQ4NCwgNTc5NCwgMjAxLCAyNjYyLCA0MjI5MiwgMCwgODI1NCwgMCwgMTA5NzUsIDAsIAorICAgIDEyMDYyNSwgNzQ3NjMsIDEwMjIsIDQxMDgsIDM4ODAsIDc0MjQ3LCAwLCAwLCAxOTQ5NjQsIDkxNzk4MCwgNzUwNywgMCwgCisgICAgNDMxNDksIDAsIDY1MDMxLCA3OTYxLCAxNjM2LCAwLCA2NTAyOSwgNjUwMjQsIDAsIDEyNDczLCA2NTM0LCAwLCA5OSwgOTgsIAorICAgIDk3LCAxMjA1NzEsIDY3NTg0LCA0MDQ5LCA3NDE2MywgMTI3MDY1LCA3MDkwLCAwLCA3ODkyLCA5MTc5NjksIDEwNzc3LCAwLCAKKyAgICA2NTMxMCwgNjU1NjIsIDY2NTk5LCA2NjcyMiwgMCwgODAzOSwgMzM2MywgNjY1OTQsIDQzNDM0LCAwLCAwLCAxMjU5NiwgCisgICAgNjY1OTUsIDQyMjU4LCA0MjU3MCwgNTU5MywgMTE5MTQ4LCAxMjA3MTEsIDAsIDEwMTAwLCA2MDYxLCA2NDg1NCwgMTE5LCAKKyAgICAxMTgsIDExNywgMTE2LCAxMjk5OCwgMTIyLCAxMjEsIDEyMCwgMTExLCAxMTAsIDEwOSwgMTA4LCAxMTUsIDExNCwgMTEzLCAKKyAgICAxMTIsIDEwMywgMTAyLCAxMDEsIDEwMCwgMTA3LCAxMDYsIDEwNSwgMTA0LCA2NDM2LCA3Mzk3NCwgNTM0LCA0MTIxMiwgCisgICAgNzc5MzEsIDE1MzYsIDY0MDkzLCA3Mzk3MCwgNzc5MzAsIDAsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIAorICAgIDEyMDM5NCwgMTMyNjYsIDAsIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCAwLCA4MTM0LCAwLCAKKyAgICAyOTEzLCA3Mzg3MCwgMCwgMTg2NiwgMCwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgNjY1ODUsIDc4Nzg2LCAKKyAgICAzMTk2LCAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIDc5MTYsIDk4NjEsIDk4NjAsIAorICAgIDUyNTgsIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgMCwgNDExNjksIDg5MzksIAorICAgIDQxMjQ1LCAwLCA0MTE3MCwgMTQ1NCwgMTEzNjksIDY0NzcsIDEyMTU3LCAwLCAwLCAwLCA0MTE3MiwgNzg1NSwgMCwgMCwgCisgICAgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgMCwgNjQ1LCAwLCA3NjA5LCA0MDk3MywgMCwgNzM4MzMsIDc4MjQ5LCAKKyAgICA1ODI0LCA5ODQsIDc3OTE4LCAxMDY4OCwgNTg1MSwgMCwgNzcyOSwgNzM5ODIsIDEyMDUxOCwgMCwgMTk1MDg2LCA0MzM2OSwgCisgICAgMCwgMCwgNjg0MTUsIDAsIDQ1MzgsIDEyMDQwNiwgNDMxNDEsIDAsIDAsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCAKKyAgICA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIDAsIDEyOTk3LCAwLCAwLCAwLCAwLCAyMzgxLCAxMjg4MywgMTA5OTQsIAorICAgIDEwNTI5LCA0MTkwNiwgMCwgMCwgMCwgMTI0MjUsIDEwNjYxLCAxMDg1NiwgOTYxNCwgMjQyOCwgNDE0NzgsIDg1ODIsIAorICAgIDEwMDY0LCA3MzkzMCwgMCwgMCwgMCwgNjQ4OTYsIDExOTE2MiwgMTk1MiwgMCwgODQ1NSwgMTAwODIsIDExNTc1LCAwLCAKKyAgICAxMTk1NjYsIDAsIDEyODA4LCAxMjE4MywgNjE0NSwgMCwgNjQ5MjksIDAsIDAsIDAsIDQzMTg2LCA0MjUwOSwgMCwgMzkyMiwgCisgICAgOTE4NywgMCwgMCwgMCwgMTE5MDU3LCAxMTc1MiwgMzM1MywgOTM1OCwgMCwgOTE3OTU3LCA2NjY4MCwgMTIwMDkwLCAKKyAgICAxMTc0NywgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDAsIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIDQxMDI3LCAKKyAgICAxMjAwODYsIDAsIDEyMDA4OCwgMTIwMDg3LCA3MDE5LCAxMjAwNzMsIDAsIDExNzUxLCAxMjAwNzgsIDc4Mjk0LCA2NDY1NywgCisgICAgODY1NywgMTIwMDQ4LCA4NTk0LCAxMjAwNjgsIDAsIDAsIDEyMDA2OSwgMTIwMDcyLCAxMjAwNzEsIDAsIDAsIDQzMTU0LCAKKyAgICA0MTAyOSwgMCwgMTEzMzIsIDY1MzgwLCA3NzI4LCAwLCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIDgzNzUsIDg2OTksIDAsIAorICAgIDQyNTI0LCAwLCA5MDg1LCAwLCA3NTA0LCA5MzI3LCA2MTYwLCAwLCAwLCAwLCA4MDg4LCAwLCA3NDAxMiwgMCwgMCwgNDQzOSwgCisgICAgNjkyNiwgMCwgMTI5MjQsIDAsIDQyMzY5LCAwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIAorICAgIDExMjk2LCAwLCAwLCAwLCA2NTgyNSwgOTU3NywgNjgxOTksIDAsIDY0NjcwLCAwLCA3ODA1NiwgNjc5MywgMTEyOTUsIDAsIAorICAgIDc4MDUzLCA3Mzg3MiwgMCwgMCwgMTA5MDIsIDAsIDAsIDc4MDcwLCA3ODA2OCwgMTA0NzIsIDI5OTUsIDAsIDAsIDY0NjgyLCAKKyAgICAyMzcxLCA3ODA2OSwgMTIwODA4LCAyNTksIDEwMDksIDAsIDI0MDIsIDIzMzMsIDY0NDAsIDAsIDAsIDY1MTI1LCA0MTI0NCwgCisgICAgMCwgMTMyNzEsIDkxMDMsIDQxMTgwLCAwLCAwLCAwLCAwLCAxMDIxOSwgMCwgMCwgMCwgMCwgNDMxNzgsIDEyNzA3MCwgCisgICAgNDEyNjEsIDExOTM2MiwgNDM2NDAsIDg2MTMsIDAsIDExODk4OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAorICAgIDkxNzk4MiwgMCwgMTg5MCwgMTIwMDU2LCAwLCAwLCAwLCA3MjkzLCA3OTkxLCAwLCAxMDU3OCwgMCwgNzgwNzYsIDAsIAorICAgIDc4MDc3LCAwLCAwLCA3ODgwMCwgMCwgMTIwMDU0LCA0MjY2OCwgNjYzNSwgMCwgNjE2NCwgNjUxNzAsIDAsIDAsIDAsIAorICAgIDExNjY0LCAwLCAwLCAwLCAwLCAxMTg4MTIsIDAsIDAsIDAsIDkxNzUsIDExOTI1LCA3ODA0NSwgOTA4OCwgMCwgNjQ1NDUsIAorICAgIDEzOTYsIDAsIDc1NDYsIDM4NDcsIDAsIDAsIDQ5ODUsIDEzMjg4LCA2NzIsIDgwOTgsIDQzMTk2LCAxOTQ3NDYsIDAsIDAsIAorICAgIDAsIDc0MDQzLCA2NTA3MiwgMTU3NywgMTE3NzIsIDEzMDQxLCA1OTI4LCA0NTI1LCAxMDY1OCwgNjU5MTEsIDEyNjYsIAorICAgIDEwMTgwLCAwLCAwLCAxMjYyMiwgMCwgMCwgMCwgMTk0NzE0LCAwLCAxMzMxMCwgNzczLCAxOTkzMywgMTUzOSwgMCwgCisgICAgMTI2OTgzLCA0MjczMSwgMCwgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgMCwgMCwgMTIwNDExLCAzMjUwLCA0Mzk5MSwgCisgICAgMCwgNjY2NDksIDk1MTAsIDY2MjM3LCAwLCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAzNTA1LCA4NzA3LCAKKyAgICA5MTc5NjgsIDY3MjUsIDkxNzk2NiwgOTE3OTcxLCA5MTc5NzIsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKKyAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI1LCA5MTc5OTYsIDQ0MzMsIAorICAgIDQxMTU2LCA0Mzk3MywgNDMxNzMsIDE0NDMsIDQzODEsIDAsIDAsIDEwOTI2LCAxMTc1NiwgMTE3NTcsIDY0ODc5LCAKICAgICA5MTc5NDksIDkxNzk1MCwgOTE3OTQ3LCAxMzIyNywgMCwgMTAwMjEsIDUxNjAsIDEzODcsIDAsIDkxNzk1MywgNDE0MTgsIDAsIAotICAgIDY1OTE0LCA5MTc5NTcsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDkxNzk2MSwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgMTE5MjU3LCAKLSAgICA0Mjc0LCAwLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgMCwgMCwgNDEyNTIsIDY2NjgyLCAKLSAgICAwLCAxMTk2MzcsIDQxMjQ5LCAxMzY2LCA2NDYzNSwgMCwgMTI0NjYsIDAsIDAsIDQzOTcsIDAsIDAsIDQxMjk2LCA5NTQ1LCAKLSAgICA0MTI5MSwgMCwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAxMDQwMCwgMCwgMCwgNzYwLCAwLCAxMjA4OCwgNTc4NiwgCi0gICAgMCwgNDIyNTYsIDExOTg2OSwgMTE5ODYxLCA0MTcsIDQxNDc0LCAxMTk1NjIsIDQxNTY1LCAwLCA1OTM0LCAxMTk4NjcsIAotICAgIDY2NTgzLCAxMTkyMzEsIDY0ODc3LCAwLCA2NDQ4MSwgMCwgMCwgNDE5NTYsIDAsIDEyNjk5NSwgMCwgMCwgMCwgNDIyNzMsIAotICAgIDU4MTksIDAsIDkxNzU1NiwgMCwgMCwgMCwgNjU5MTAsIDAsIDEwMjQ2LCAwLCAwLCAxMjM3LCAxMDI3NCwgNDU1MiwgMCwgMCwgCi0gICAgMCwgMTM3NSwgNjY3MDUsIDQzNTczLCA2NTI2MCwgNDIwNjMsIDAsIDQyODExLCAxMDMxMiwgNzQxOTIsIDEyMDc5NCwgCi0gICAgNzg0MCwgMCwgNjQ4OTAsIDEwMjUyLCAwLCAwLCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAxMDc2OSwgMTAzMzEsIAotICAgIDExOTA0MSwgMCwgOTc1MywgMCwgODk0NCwgMCwgMCwgMTA0NzMsIDAsIDAsIDYwNzIsIDQzMDI1LCAxMDI5OSwgMCwgMCwgCi0gICAgMTIwNjA4LCAxMTk4NzQsIDAsIDAsIDAsIDAsIDkzMzAsIDAsIDcyMjIsIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDAsIAotICAgIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDAsIDAsIDExOTA5MiwgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgCi0gICAgNDMxODAsIDAsIDY4MDk2LCAwLCAwLCA3NDI4OCwgNjIyLCA3NDAyMywgODg1LCA2NDc3MiwgMTYwMiwgMCwgMCwgODUyLCAwLCAKLSAgICAxMjE2MCwgMCwgMTAyMTIsIDY1NDM1LCAwLCAxMjA3MSwgOTYwOSwgMTIxNTYsIDkxNzk4MywgOTE3OTg0LCA0MzU4NiwgCi0gICAgMTEwMzUsIDEwNDExLCA5MTc5ODgsIDEwMjU1LCAxMDI2MywgMTAyNzksIDQxOTQsIDEwMzc1LCA5MTc5OTMsIDAsIDQzMTUsIAotICAgIDEyNjQ0LCA5MTc5OTcsIDkxNzk5NCwgOTE3OTk1LCA0MzM0MywgMCwgOTE3OTk4LCA5MTc5OTksIDQxMTc3LCAwLCAwLCAKLSAgICA5MTc3OTIsIDAsIDAsIDg3MTUsIDAsIDQxMTc5LCAwLCA0MzMxMywgMCwgNDExNzYsIDAsIDk5NCwgMCwgODQ1MiwgCi0gICAgMTI3MTAzLCA3Mzk2NiwgMCwgMCwgNTkyMSwgMCwgMjU5NywgMCwgNTkyMiwgMTE4OTAzLCAxMjcxMDksIDQxODYsIAotICAgIDEyNzEwNywgMTI3MTA2LCAxMjcxMDUsIDczOTczLCAwLCA0NDA2LCA3NDYwMSwgODQ4MCwgMCwgOTc0NywgMCwgNDQxMywgMCwgCi0gICAgNDIyNjgsIDMxOTgsIDU5MjQsIDU5MjAsIDAsIDY5MjEsIDAsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIDQzMTY5LCAKLSAgICAxMDE3NiwgMCwgNzQyLCAwLCAyODkzLCAxMDc3MiwgNjUyNzYsIDU5MzcsIDE5MTQsIDI1NTMsIDExNjgyLCAwLCAwLCAwLCAKLSAgICA4MzYzLCAwLCAyOTkzLCA3NzcyLCAzOTE2LCAwLCAwLCAxMTQxLCA0MjQwNywgODE1OSwgNzE4LCA3NTcyLCA5NzMsIDAsIAotICAgIDEyMDcxOCwgMzIzNSwgMjQxNSwgNDMxNjQsIDAsIDgwMTgsIDQyMzMzLCA3NDc1NiwgMTA2NzUsIDY5MzcsIDQyNDg2LCAwLCAKLSAgICA2NTM5MCwgMCwgMCwgMTIwMiwgMCwgMCwgMTI3MDM3LCAwLCAwLCAwLCAwLCA2NDU0MiwgMzI2MCwgNzM4MjksIDY1Mzg4LCAKLSAgICAwLCA4NDE5LCAwLCAxMjcwMzYsIDAsIDAsIDc0MTkzLCAwLCAwLCAwLCAwLCAxNDMxLCAwLCA2NjU2NSwgMTA4MjEsIDAsIAotICAgIDEyODA0LCAwLCA4MjI5LCAxMjM1LCAzMzA3LCAxMTQ3MiwgMCwgMCwgNDU0NCwgMCwgMCwgMCwgMTc0MCwgMCwgODc1OCwgCi0gICAgOTg1LCAxMjg4MiwgNjQ1MTEsIDAsIDEyMDY4LCAwLCAwLCAxMDE0MSwgMCwgNjM3NjEsIDg3ODUsIDQ0NzYsIDAsIDYzNzYzLCAKLSAgICAxMjY1NSwgODkwNywgMCwgMCwgMCwgMCwgMCwgMTE5NTcyLCAxMDY2NSwgNjQ2MTYsIDQxNTcyLCAwLCAwLCAwLCA0MTU3MywgCi0gICAgMCwgMzkzMSwgMCwgNzQxNDMsIDAsIDAsIDAsIDAsIDExOTgyLCAwLCAwLCAwLCAwLCA2NDQ4NCwgMCwgNDExNjcsIDAsIAotICAgIDQxNzM1LCAwLCA3MTcsIDEwNzU0LCAwLCAwLCAwLCAwLCA2Mzc2NywgMCwgMTc4MCwgNjkzNiwgMCwgMCwgODE5LCAxMDYxMSwgCi0gICAgOTY5NCwgMTI2OTc4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgyMCwgMCwgNjU3OCwgNzAwOSwgNzUyMywgNjkyMiwgNzQyMTgsIAotICAgIDY3ODQ4LCA3NTI1LCAzMzQ2LCA4MzM5LCAwLCAwLCA1NzUsIDI2OCwgMCwgODU2MywgMCwgMTIwMzQzLCA0MTU0MSwgCi0gICAgNjU1NjUsIDgzMzYsIDU5MzYsIDcyOTAsIDAsIDgzMzcsIDEzMDgxLCAzMDgsIDExMzg4LCA3NTIyLCAxMjA3MjEsIDAsIAotICAgIDY1NDY2LCAxMTA5MCwgNjk1MywgMCwgMTIwMzQ2LCAwLCAxMjAzNDUsIDU5MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMzgsIAotICAgIDc4ODcsIDAsIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAwLCAxMTk1OTcsIDExNTkwLCAwLCA3NDA0OCwgCi0gICAgMCwgODU5NSwgMCwgMCwgMCwgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDAsIDEyMDYyMSwgMzQ4OCwgNTkzMywgCi0gICAgMTAwMzMsIDczNzM4LCA2NjI0MSwgNjU1NzAsIDAsIDEyMjk3LCAxMTkxNTMsIDE5NTUsIDAsIDUzNDksIDQyNTM4LCAwLCAwLCAKLSAgICA2NTMwOCwgOTQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgNTgzMSwgMCwgNzYzOCwgMCwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCAKLSAgICAxMTk1NywgMTIwNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgMTIwMzMxLCAwLCAyOTEsIAotICAgIDAsIDAsIDIwMjcsIDY2MjMwLCAwLCAwLCAxMDQwMywgMCwgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDQyNTEyLCAKLSAgICAxMjA0MzEsIDEyMDQzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MDk0LCA3NDIxMywgNzgyNCwgMCwgMCwgNDEyNzQsIAotICAgIDU3NzgsIDYzMDIsIDAsIDAsIDEyNjgwLCAxMTkxMzAsIDE0MTcsIDAsIDE5NDkxNCwgOTQ1MiwgMCwgMCwgMTE1NTIsIDAsIAotICAgIDAsIDAsIDY1MzkxLCAwLCAxMDE3MiwgNjU0NTMsIDEyMDQwOCwgNDEyNjQsIDEyMDQxMCwgNjQyNiwgNDY0MSwgOTE3OSwgCi0gICAgNjQ4MTksIDY0OTA2LCA0MTI1NSwgNDIwMzYsIDQxNDY5LCA0MTI2OSwgMTIwNDEyLCA0MTI2NywgNDY0NiwgMTIwNDI1LCAKLSAgICA4NjUsIDQyMDM0LCAxMjA0MjYsIDEyMDQyMSwgNDY0NSwgNDIwMzMsIDEyMDQyMiwgMCwgMCwgNjQ3MjgsIDAsIDAsIDAsIAotICAgIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIDE5NTA4OSwgNjA2OSwgOTIxOSwgMTk1MDkwLCAxNjYxLCAxMzEyMCwgNjM3ODQsIAotICAgIDE5NTA5NCwgMTAxNDAsIDk3MTMsIDExOTE0MywgMCwgMCwgMCwgMjMwNiwgMTA0ODUsIDExODk0MywgNjA2OCwgMTA2MTIsIAotICAgIDE5NTA5OSwgMCwgMTk1MTAxLCAxOTUwNzgsIDQxNDYyLCAxOTUwODAsIDE5NTA3OSwgNTQyMiwgMTk1MDgxLCAwLCAwLCAwLCAKLSAgICAxMDIyOSwgMTA2MzUsIDgyNiwgMTk1MDgzLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDAsIDE4MDgsIAotICAgIDc4NDgsIDAsIDgxMDAsIDAsIDAsIDAsIDEzMzAxLCAwLCA5NjY3LCAwLCAwLCAwLCAxMTAwMywgOTkwNCwgMCwgMCwgCi0gICAgMTIwNjkwLCA5MTQ0LCAxMDkyMSwgMCwgMCwgOTg0MCwgNjUxMzEsIDkxNzU2MCwgMCwgMTAzMTMsIDAsIDAsIDY0MzIwLCAKLSAgICAxMDI2NSwgMCwgMTA5NjIsIDExODk3MCwgNDMwMDgsIDg5NDUsIDAsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgCi0gICAgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDAsIDAsIDEyMDY2LCAwLCAzODUsIDQxNTIsIDI1ODUsIDAsIDAsIDMxMjYsIDAsIAotICAgIDc0MTM2LCAxMDk1NywgMCwgMCwgMCwgMCwgMTMxNTcsIDAsIDAsIDM1NzAsIDAsIDc0NDMsIDAsIDAsIDY5OTcsIDAsIDAsIAotICAgIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgMCwgMjU5MywgODQ2MywgNzgxMCwgOTE3ODYyLCA3ODM5LCAKLSAgICAxMTk5MTMsIDAsIDkxNzg2MCwgOTY5MSwgNDQxMSwgOTE3ODQ3LCAwLCAwLCAwLCAwLCA2NTI1NCwgMTAwNjYsIDAsIDAsIDAsIAotICAgIDAsIDEzMDYxLCA4MDE2LCAwLCAxOTkzMiwgNjQ4MzEsIDAsIDAsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAKKyAgICA2NTkxNCwgNjcyMSwgMjE3LCA5MTc5NTUsIDkxNzk2MCwgOTE3OTYxLCAxMDQ0MywgMTA3ODksIDQxMTU4LCAxMTkyNTcsIAorICAgIDQyNzQsIDAsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgMCwgNDEyNTIsIAorICAgIDY2NjgyLCAwLCAxMTk2MzcsIDQxMjQ5LCAxMzY2LCA2NDYzNSwgMCwgMTI0NjYsIDAsIDAsIDQzOTcsIDAsIDAsIDQxMjk2LCAKKyAgICA5NTQ1LCA0MTI5MSwgMCwgMCwgNDE0ODUsIDM1MTEsIDQxMjgyLCA1OTIzLCAxMDQwMCwgMCwgMCwgNzYwLCAwLCAxMjA4OCwgCisgICAgNTc4NiwgMCwgNDIyNTYsIDExOTg2OSwgMTE5ODYxLCA0MTcsIDQxNDc0LCAxMTk1NjIsIDQxNTY1LCAwLCA1OTM0LCAKKyAgICAxMTk4NjcsIDY2NTgzLCAxMTkyMzEsIDY0ODc3LCAwLCA2NDQ4MSwgNzg2MTQsIDY2MDEzLCA0MTk1NiwgNDM0NTUsIAorICAgIDEyNjk5NSwgMCwgMCwgMCwgNDIyNzMsIDU4MTksIDAsIDkxNzU1NiwgMCwgMCwgMCwgNjU5MTAsIDAsIDEwMjQ2LCAKKyAgICAxMjA4MTYsIDAsIDEyMzcsIDEwMjc0LCA0NTUyLCAwLCAwLCAwLCAxMzc1LCA2NjcwNSwgNDM1NzMsIDY1MjYwLCA0MjA2MywgCisgICAgMCwgNDI4MTEsIDEwMzEyLCA3NDE5MiwgMTIwNzk0LCA3ODQwLCAwLCA0MzYzMCwgMTAyNTIsIDAsIDAsIDQzMTg1LCAwLCAKKyAgICA0Mzk2LCAwLCAxMTk4ODAsIDEwNzY5LCA5Njc2LCAxMTkwNDEsIDAsIDk3NTMsIDAsIDg5NDQsIDAsIDAsIDEwNDczLCAwLCAKKyAgICAwLCA2MDcyLCA0MzAyNSwgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDAsIDAsIDAsIDAsIDkzMzAsIDAsIDcyMjIsIAorICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDAsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCA3ODM0NywgCisgICAgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA2ODA5NiwgNzc5MjksIDQzOTgyLCAKKyAgICA3NDI4OCwgNjIyLCA3NDAyMywgODg1LCA0MzQwNSwgMTYwMiwgMCwgMCwgODUyLCAwLCAxMjE2MCwgMCwgMTAyMTIsIAorICAgIDY1NDM1LCAwLCAxMjA3MSwgOTYwOSwgMTIxNTYsIDkxNzk4MywgOTE3OTg0LCA0MzU4NiwgMTEwMzUsIDEwNDExLCAKKyAgICA5MTc5ODgsIDEwMjU1LCA2NzEwLCAxMDI3OSwgNDE5NCwgMTAzNzUsIDkxNzk5MywgMCwgNDMxNSwgMTI2NDQsIDEyNzUxNiwgCisgICAgNzc5MzcsIDQzNjM5LCA0MzM0MywgMCwgOTE3OTk4LCAxMTUwMSwgNDExNzcsIDAsIDAsIDkxNzc5MiwgMCwgMCwgODcxNSwgCisgICAgMCwgNDExNzksIDAsIDQzMzEzLCAwLCA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAxMjcxMDMsIDczOTY2LCAwLCAwLCA1OTIxLCAKKyAgICAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCAxMjcxMDcsIDEyNzEwNiwgMTI3MTA1LCA2NzE4LCAwLCAKKyAgICA0NDA2LCA3NDYwMSwgODQ4MCwgOTE5MiwgOTc0NywgMCwgNDQxMywgMCwgNDIyNjgsIDMxOTgsIDU5MjQsIDU5MjAsIDAsIAorICAgIDY5MjEsIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgCisgICAgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgNjc1NiwgMCwgMCwgODM2MywgMCwgMjk5MywgNzc3MiwgCisgICAgMzkxNiwgMCwgMTIwNDk0LCAxMTQxLCA0MjQwNywgODE1OSwgNzE4LCA3NTcyLCA5NzMsIDAsIDEyMDcxOCwgMzIzNSwgCisgICAgMjQxNSwgNDMxNjQsIDAsIDgwMTgsIDQyMzMzLCA3NDc1NiwgMTA2NzUsIDY5MzcsIDQyNDg2LCA0MzM4MSwgNjUzOTAsIDAsIAorICAgIDAsIDEyMDIsIDAsIDAsIDEyNzAzNywgMCwgMCwgMCwgNzgxODIsIDY0NTQyLCAzMjYwLCA3MzgyOSwgNjUzODgsIDk5NDUsIAorICAgIDg0MTksIDc4MDQyLCA2NzM4LCAwLCA0MzY4MSwgNzQxOTMsIDIwNTksIDAsIDAsIDU1MjM3LCAxNDMxLCAwLCA2NjU2NSwgCisgICAgMTA4MjEsIDAsIDEyODA0LCAwLCA4MjI5LCAxMjM1LCAzMzA3LCAxMTQ3MiwgNzgwODksIDc4MTg0LCA0NTQ0LCAwLCAwLCAwLCAKKyAgICAxNzQwLCA3ODA5NywgODc1OCwgOTg1LCAxMjg3MiwgNjQ1MTEsIDc4MDk0LCAxMjA2OCwgNzgxMDIsIDAsIDEwMTQxLCAwLCAKKyAgICA2Mzc2MSwgODc4NSwgNDQ3NiwgNzgxMDksIDYzNzYzLCAxMjY1NSwgODkwNywgNzgxMDUsIDc4MTA2LCA3ODEwMywgNzgxMDQsIAorICAgIDAsIDExOTU3MiwgMTA2NjUsIDY0NjE2LCA0MTU3MiwgMCwgMCwgMCwgNDE1NzMsIDAsIDM5MzEsIDEyMDI5NSwgNzQxNDMsIAorICAgIDAsIDAsIDAsIDAsIDExOTgyLCAwLCAwLCAwLCAwLCA2NDQ4NCwgMCwgNDExNjcsIDAsIDQxNzM1LCAwLCA3MTcsIDEwNzU0LCAKKyAgICAwLCAwLCAwLCAwLCA2Mzc2NywgMCwgMTc4MCwgNjkzNiwgMCwgMCwgODE5LCAxMDYxMSwgOTY5NCwgMTI2OTc4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMjgyMCwgMCwgNjU3OCwgNzAwOSwgNzUyMywgNjkyMiwgNzQyMTgsIDY3ODQ4LCA3NTI1LCAzMzQ2LCAKKyAgICA4MzM5LCAwLCAwLCA1NzUsIDI2OCwgNzgxMTEsIDg1NjMsIDU3NTQsIDEyMDM0MywgNDE1NDEsIDY1NTY1LCA4MzM2LCAKKyAgICA1OTM2LCA3MjkwLCA3ODExNywgODMzNywgMTMwODEsIDMwOCwgMTEzODgsIDc1MjIsIDEyMDcyMSwgNzgxMjMsIDY1NDY2LCAKKyAgICAxMTA5MCwgNjk1MywgMCwgMTIwMzQ2LCAwLCA3ODEzMiwgNTkyNiwgNzgxMjgsIDc4MTMwLCA3ODEyNiwgNzgxMjcsIAorICAgIDc4MTI0LCA3ODEyNSwgOTAzOCwgNzg4NywgNDM0NTYsIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAKKyAgICAxMjg3NCwgMTE5NTk3LCAxMTU5MCwgMCwgNzQwNDgsIDAsIDg1OTUsIDAsIDAsIDQzNzAzLCAxMzA5NywgMCwgNjQ2NDMsIAorICAgIDEzMjgzLCAxMjY5NywgMCwgMTIzODEsIDM0ODgsIDU5MzMsIDEwMDMzLCA3MzczOCwgNjYyNDEsIDY1NTcwLCAwLCAxMjI5NywgCisgICAgMTE5MTUzLCAxOTU1LCAwLCA1MzQ5LCA0MjUzOCwgMCwgMCwgNjUzMDgsIDk0NjIsIDAsIDAsIDAsIDAsIDQyNzM2LCAwLCAKKyAgICA1NzU2LCAwLCA3NjM4LCA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCAxMjA2MDAsIDAsIDczODMyLCAwLCAKKyAgICAxMjA2MzUsIDAsIDc4MzM0LCAwLCA3NjM2LCA2NTE3MSwgOTEyNCwgMCwgNzg4OTIsIDAsIDI5MSwgMCwgMCwgMjAyNywgCisgICAgNjYyMzAsIDc4MTQyLCA3ODEzNiwgMTA0MDMsIDAsIDQ2NDAsIDY0NzEzLCAxMDIyNCwgMTIwNDI5LCA0MjUxMiwgMTIwNDMxLCAKKyAgICAxMjA0MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOTA5NCwgNzQyMTMsIDc4MjQsIDAsIDAsIDQxMjc0LCA1Nzc4LCAKKyAgICA2MzAyLCAwLCAwLCAxMjY4MCwgMTE5MTMwLCAxNDE3LCA3Nzg4OSwgMTk0OTE0LCA5NDUyLCAwLCA3NDM5MywgMTE1NTIsIDAsIAorICAgIDAsIDAsIDY1MzkxLCAwLCAxMDE3MiwgNjU0NTMsIDYzNzg5LCA0MTI2NCwgNzg2NTgsIDY0MjYsIDQ2NDEsIDkxNzksIAorICAgIDY0ODE5LCA1NTI3OCwgNDEyNTUsIDQyMDM2LCA0MTQ2OSwgNDEyNjksIDEyMDQxMiwgNDEyNjcsIDQ2NDYsIDEyMDQyNSwgCisgICAgODY1LCA0MjAzNCwgNzgyNzQsIDc4MjczLCA0NjQ1LCA0MjAzMywgNzgyNzAsIDAsIDAsIDY0NzI4LCAwLCA3ODY3MywgCisgICAgNzg2NzQsIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIDE5NTA4OSwgNjA2OSwgOTIxOSwgMTk1MDkwLCAxNjYxLCAxMzEyMCwgCisgICAgNjM3ODQsIDY5ODE5LCAxMDE0MCwgOTcxMywgMTE5MTQzLCAwLCAwLCAwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAKKyAgICAxMDYxMiwgMTk1MDk5LCAwLCAxOTUxMDEsIDE5NTA3OCwgNDE0NjIsIDE5NTA4MCwgMTk1MDc5LCA1NDIyLCAxOTUwODEsIDAsIAorICAgIDAsIDAsIDEwMjI5LCAxMDYzNSwgODI2LCAxOTUwODMsIDE5NTA4MiwgMTk1MDg1LCAxOTUwODQsIDE5NTA4NywgNjQ4MywgMCwgCisgICAgMTgwOCwgNzg0OCwgMCwgODEwMCwgNzgyMjcsIDc4NjY5LCA3ODY3MCwgMTMzMDEsIDc4NjY3LCA5NjY3LCA3ODY2NSwgCisgICAgNzg4NzIsIDAsIDExMDAzLCA5OTA0LCAwLCAwLCAxMjA2OTAsIDkxNDQsIDEwOTIxLCAwLCA3ODY4MCwgOTg0MCwgNjUxMzEsIAorICAgIDc4Njc4LCA3Nzg0MSwgMTAzMTMsIDAsIDAsIDY0MzIwLCAxMDI2NSwgNzg2ODYsIDEwOTYyLCA3ODY4NCwgNDMwMDgsIAorICAgIDg5NDUsIDc4NjgzLCAwLCA0MSwgMTk1MDcyLCAxNzkyLCAxMjA1MTUsIDE5NTA3MywgODY1NSwgMTk1MDc1LCAwLCA3Nzk1MSwgCisgICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMCwgMTE5MDY4LCAzMTI2LCAwLCA3NDEzNiwgMTA5NTcsIDAsIDQzMjU4LCAwLCAKKyAgICAwLCAxMzE1NywgMCwgMCwgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIDAsIDAsIDc4NzksIDg3MzksIDExMDc1LCAKKyAgICAwLCA2NTIxNiwgMCwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgCisgICAgMTE5OTEyLCA5NjkxLCA0NDExLCA3ODgwMiwgMCwgMCwgNDM0NDIsIDc4Nzk5LCA2NTI1NCwgMTAwNjYsIDAsIDAsIDAsIDAsIAorICAgIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAwLCAwLCAxMjM5MCwgMTE5MTcxLCAxNjM0LCA2ODExNSwgMCwgCiAgICAgMTEwNTYsIDAsIDExOTkyNSwgMCwgNDExNjUsIDExMzI4LCAxMjQ1MCwgMCwgNDExNjYsIDAsIDEyNDU2LCAxMTk5MTQsIAotICAgIDE3MSwgNTk0MSwgMTI0NTIsIDkxNzU0NCwgMTI0NTgsIDEyNTMxLCAwLCA0MzAxMywgNjM4MDAsIDc0MTYyLCAwLCAKLSAgICAxMjA0ODMsIDE5NDkyMCwgMCwgMTI0NTQsIDYzODA2LCA0MjEzMiwgMTIwNjMsIDE5NTA3NywgMCwgMzIzMCwgMCwgMCwgMCwgCi0gICAgNTIwOSwgMjk3LCA1ODEwLCA4NTIyLCA4NDE1LCAwLCAwLCAwLCA3MDc3LCAyNDk3LCAwLCA5NjAsIDc0MTU2LCA2OTgxLCAwLCAKLSAgICAxMjkzOCwgNDI5MiwgMCwgNzQ4MTUsIDEwNTEyLCAwLCA3NDgxNCwgMCwgMCwgMCwgMjUwMywgNzM3NzgsIDE3NjIsIAotICAgIDczODMzLCAyNDk1LCAwLCA1ODQ0LCAxMTkxMjQsIDExODgzOCwgMCwgMTI2NTQsIDQ2NjMsIDE4OTksIDAsIDI1MDcsIDAsIAotICAgIDg3MjYsIDY1NTk0LCAwLCAwLCAwLCA4ODkyLCAwLCAwLCAwLCAwLCA1NzgyLCA0MjAsIDAsIDAsIDEyMDQ2MiwgMTA3OTcsIAotICAgIDYzNzk0LCAwLCAwLCAwLCA2Mzc5NiwgMTE4OTY1LCAwLCA2NjU4MSwgMTE5MjA1LCA0MTYwOCwgMCwgMCwgMCwgNDY1OSwgCi0gICAgMTIwNzg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjksIDEyMDQ3MiwgMCwgOTE3NTQ4LCAwLCAwLCA0MTE4OCwgMTMyNDQsIAotICAgIDEyMDQ2NiwgNDIxNjcsIDAsIDAsIDUzODAsIDAsIDAsIDExNTUsIDExMzY1LCA0MzEyNiwgMCwgMCwgNjU2ODQsIDAsIAotICAgIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDAsIDExNzIsIDAsIDAsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCAKLSAgICA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDAsIDUzNDcsIDAsIDAsIAotICAgIDczODY4LCAxMTg5NDQsIDEwNTg4LCAwLCAwLCA2Mzc1NSwgMCwgNTM0MywgMTIwNDczLCAwLCA0NTU1LCA1MzQxLCAwLCAwLCAKLSAgICAwLCA1MzUxLCAwLCA0MzEwNCwgNjUyNDQsIDkxNzg5MiwgNjQ1NDEsIDQyNTE5LCA3NDQ3MiwgMCwgMCwgNzQ3NjUsIAotICAgIDkxNzg4OCwgMCwgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIDY1MzY2LCAKLSAgICA0MjE3MiwgNDEwODYsIDY1MzYzLCA2NTM2MiwgNjUzNjEsIDExOTEyLCA2NTM1OSwgMTEzMjMsIDY1MzU3LCAxMTgwMCwgCi0gICAgNjUzNTUsIDUzNDUsIDY1MzUzLCA2NTM1MiwgNjUzNTEsIDc2MSwgNjUzNDksIDE5OTU5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NDY0NywgMCwgMCwgNDY5OSwgMCwgMCwgMCwgMCwgNjQ2MDUsIDAsIDAsIDAsIDQ5MTYsIDAsIDM4MCwgMTA5NTgsIAotICAgIDY2NTYzLCA5MTc5MDYsIDAsIDk3NzMsIDEzMTY3LCAxMjkxOCwgNDEwOTYsIDczOTgwLCAwLCA5MTc4OTgsIDkxNzg5MywgCi0gICAgMTA2ODQsIDAsIDkxNzg5NiwgMCwgNzk0NiwgMTI1NDEsIDgxODIsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIAotICAgIDY2MzAsIDAsIDAsIDAsIDAsIDg4NDcsIDAsIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgMCwgMCwgMCwgMCwgMzEyNywgCi0gICAgMjU5NSwgNjU3MTMsIDAsIDAsIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDAsIDc0MjAwLCA0OTcwLCAKLSAgICA4NzY0LCAxMjA0NTksIDg5MzQsIDAsIDQxNTY2LCA0NDkyLCAwLCA2NTAxMSwgNDEwOTAsIDAsIDAsIDExODgsIDcyNTQsIAotICAgIDExMDAsIDAsIDAsIDQxMDgxLCAyOTEyLCAxMTc0OSwgMCwgMCwgMCwgMzU3MiwgMTAwMjMsIDQ5NTksIDEzMDc5LCAwLCAwLCAKLSAgICA5NzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIDEzMzA0LCAwLCAwLCA0MTQ1MSwgMCwgCi0gICAgMCwgODI3MywgMCwgMzQ1MSwgMCwgOTcyLCA0MTQ1MywgMCwgMCwgNzM4ODMsIDAsIDczOTQ1LCAwLCAzNDU1LCAxOTk1NSwgCi0gICAgOTUzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzOTYsIDAsIDExMDE5LCAwLCAwLCAwLCAxMjA1MDcsIDQxMDc4LCAwLCAyNjEsIAotICAgIDU5MjcsIDc3OTEsIDAsIDAsIDAsIDEwNjk2LCAwLCA2MDczLCA5ODM4LCAxMTg5MjAsIDAsIDYwNzUsIDAsIDI4MiwgMCwgCi0gICAgNjQzNywgNzQwNzgsIDAsIDY1ODYxLCAwLCAwLCAwLCAwLCAzNDc0LCAxMTg3ODcsIDAsIDEyMDY1NSwgNjA4MSwgMCwgMCwgCi0gICAgNzQwNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDg3NTEsIDEyNjIzLCAxMjAyNzMsIDc4MTYsIDEyNjM2LCA0NjY1LCAxMjYyOCwgCi0gICAgNDY3MCwgMTIwMjcxLCAxMjAyNzIsIDAsIDk2NDIsIDEwOTEyLCA5NTgsIDAsIDExMzg3LCAwLCA0NjY2LCAwLCA0OTE1LCAwLCAKLSAgICA0NjY5LCAwLCA2ODA5OSwgMTMyODcsIDQ2NjQsIDEwODM2LCAxMjA1NTAsIDAsIDAsIDAsIDQzNTk1LCA3NDUwLCAwLCAKLSAgICA5MTc4NzUsIDg2NjQsIDk2OTcsIDM2MDYsIDkxNzg3MywgMCwgMCwgNjQ4MTUsIDEwNjMsIDEyMDI1MCwgMTIwMjUxLCAKLSAgICA5NzcyLCA3MjU1LCA4ODg2LCAxMzg5LCAwLCAxMjAyNTcsIDEyMDI1OCwgMTIwMjU5LCAxMjk0MSwgMTIwMjUzLCAxMjAyNTQsIAotICAgIDEyMDI1NSwgMTIwMjU2LCAxMjMwMSwgMTIwMjY2LCAxMjAyNjcsIDQxMTAyLCA2NjYwNCwgMTIwMjYyLCAxMjAyNjMsIAotICAgIDEyMDI2NCwgMTAxNywgNjY2MDAsIDUyMywgNTA1LCAxNDQ3LCA3NDQzNiwgMCwgMCwgMCwgODYwOCwgNDI3ODksIDAsIDAsIAotICAgIDAsIDExOTE5NiwgMTEzMDcsIDY2NzA3LCA5MTc4NzEsIDAsIDExNzQ1LCA3OTE5LCAwLCAxNjQxLCAwLCAwLCA4OTY2LCAwLCAKLSAgICAwLCA1OTA4LCAwLCAwLCA3NDU2MiwgMCwgMTY5OSwgNzQxOTEsIDc0ODQzLCAwLCAwLCA2MzA2LCAxMDE2OSwgMCwgCi0gICAgMTE5MjUxLCAwLCAzNzY2LCAxMjA0NTcsIDEyMDQ1NiwgMTIwNDU1LCA2NjExLCAyNTcsIDQzMTcwLCAxMzE1MywgMCwgCi0gICAgNDIzODYsIDAsIDk0MzYsIDI1OTksIDAsIDY0OTYsIDk0NDksIDU5MzAsIDExNDc2LCAxMTAzMywgMTE0NDcsIDAsIDU2MjIsIAotICAgIDEyMDQzNiwgODQ3NywgMzc2MCwgMTcxOCwgOTQ0MiwgNjY0MzMsIDM3NzYsIDAsIDQxNDM1LCA0MzUyLCAwLCAyNDM1LCAKLSAgICAxMjA4MDksIDU2MjEsIDAsIDQyMDEsIDM3NzgsIDQyMDMsIDQyMDIsIDQyMDUsIDQyMDQsIDEyMDQ0NywgMzc2OCwgNjgxNDIsIAotICAgIDc2NSwgNDE0NDAsIDM3NjQsIDg0NzMsIDEyMDQ0MCwgODQ2OSwgMTIwNDM4LCAxMjk0NywgNDU2NCwgMCwgMCwgNzQyNzEsIAotICAgIDczNzUzLCAwLCAwLCAwLCAwLCA1MjI1LCAwLCAwLCAwLCAwLCAwLCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCAwLCAKLSAgICAwLCAwLCAwLCA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDAsIDQyNjIzLCA2NDI3NywgMCwgNjk1MiwgCi0gICAgMCwgMTIwNzUyLCAxMTkwMDMsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIDEyMDAzOCwgCisgICAgMTcxLCA1OTQxLCAxMjQ1MiwgOTE3NTQ0LCAxMjQ1OCwgMTI1MzEsIDc4Nzc5LCA0MzAxMywgNjM4MDAsIDc0MTYyLCAwLCAKKyAgICAxMjA0ODMsIDk5NjksIDAsIDEyNDU0LCA2MzgwNiwgNDIxMzIsIDEyMDYzLCA3ODQyNSwgNzg0MjQsIDMyMzAsIDAsIDAsIDAsIAorICAgIDUyMDksIDI5NywgNTgxMCwgODUyMiwgODQxNSwgMCwgNzg0MjksIDc4NDI4LCA3MDc3LCAyNDk3LCAwLCA5NjAsIDc0MTU2LCAKKyAgICA2OTgxLCAwLCAxMjkzOCwgNDI5MiwgMCwgNzQ4MTUsIDEwNTEyLCAwLCA3NDgxNCwgNzg4NzUsIDEyNzUwNSwgNzg4NzYsIAorICAgIDI1MDMsIDczNzc4LCAxNzYyLCA2OTc5NCwgMjQ5NSwgNzg4NzMsIDU4NDQsIDc4ODc0LCAxMTg4MzgsIDAsIDEyNjU0LCAKKyAgICA0NjYzLCAxODk5LCA3ODg3NywgMjUwNywgNjQxMjEsIDg3MjYsIDY1NTk0LCAwLCAwLCAwLCA4ODkyLCAwLCAwLCAwLCAwLCAKKyAgICA1NzgyLCA0MjAsIDAsIDAsIDEyMDQ2MiwgMTA3OTcsIDYzNzk0LCAwLCAwLCA2NDgxNCwgNjM3OTYsIDc3OTY1LCAwLCAKKyAgICA2NjU4MSwgMTE5MjA0LCA0MTYwOCwgMCwgMCwgNjM3OTIsIDQ2NTksIDEyMDc4OCwgMCwgNDM2NzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMyOSwgNzc5NjgsIDAsIDkxNzU0OCwgNzM5OSwgMCwgNDExODgsIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgCisgICAgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCAKKyAgICA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDAsIDExNzIsIDY5Nzk5LCA2Nzg2LCA0MzYwMSwgMTIwNDc2LCA3NDEyNiwgNTYwMywgCisgICAgMCwgNDQ3MywgMCwgMTk0ODIzLCAwLCA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAwLCA1MzQ3LCA2OTgwMiwgMCwgNzM4NjgsIAorICAgIDExODk0NCwgMTA1ODgsIDAsIDAsIDYzNzU1LCAwLCA1MzQzLCA3ODQyMiwgMCwgNDU1NSwgNTM0MSwgMCwgMCwgMCwgNTM1MSwgCisgICAgMCwgNDMxMDQsIDY1MjQ0LCA5MTc4OTIsIDY0NTQxLCA0MjUxOSwgNzQ0NzIsIDAsIDAsIDc0NzY1LCA5MTc4ODgsIDAsIAorICAgIDY2MzgsIDAsIDY1MTEzLCAyNzEsIDc0MTgwLCA2NTM3MCwgODgzNSwgNjUzNjgsIDEyNjUzLCA2NTM2NiwgNDIxNzIsIAorICAgIDQxMDg2LCA2NTM2MywgNjUzNjIsIDY1MzYxLCAxMTkxMiwgNDM0MTAsIDExMzIzLCA2NTM1NywgMTE4MDAsIDY1MzU1LCAKKyAgICA1MzQ1LCA2NTM1MywgNjUzNTIsIDY1MzUxLCA3NjEsIDY1MzQ5LCAxOTk1OSwgMCwgNjM4NTYsIDAsIDAsIDc3OTU4LCAKKyAgICA2NDY0NywgNzc5NTksIDExOTU3LCA0Njk5LCAwLCAwLCAwLCAwLCA2NDYwNSwgMCwgMCwgMCwgNDkxNiwgMCwgMzgwLCAKKyAgICAxMDk1OCwgNjY1NjMsIDc3OTU1LCA2OTc3MywgOTc3MywgMTMxNjcsIDEyOTE4LCA0MTA5NiwgNzM5ODAsIDY5MjQ1LCAKKyAgICA3ODI1NCwgOTE3ODkzLCAxMDY4NCwgMCwgOTE3ODk2LCAwLCA3OTQ2LCAxMjU0MSwgODE4MiwgMCwgNjk3ODAsIDAsIDAsIDAsIAorICAgIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDAsIDg4NDcsIDAsIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgMCwgMCwgCisgICAgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAwLCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCAKKyAgICAwLCA3NDIwMCwgNDk3MCwgODc2NCwgMTIwNDU5LCA4OTM0LCAwLCA0MTU2NiwgNDQ5MiwgMCwgNjUwMTEsIDQxMDkwLCAwLCAKKyAgICAwLCAxMTg4LCA3MjU0LCAxMTAwLCAwLCAwLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCAwLCAzNTcyLCAxMDAyMywgCisgICAgNDk1OSwgMTMwNzksIDAsIDAsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIAorICAgIDEzMzA0LCAwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCAwLCA5NzIsIDQxNDUzLCAwLCAKKyAgICAwLCA3Mzg4MywgMCwgNzM5NDUsIDAsIDM0NTUsIDE5OTU1LCA5NTM4LCAwLCA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIDAsIAorICAgIDExMDE5LCAwLCAwLCAwLCAxMjA1MDcsIDQxMDc4LCAwLCAyNjEsIDU5MjcsIDc3OTEsIDAsIDAsIDAsIDEwNjk2LCAwLCAKKyAgICA2MDczLCA5ODM4LCAxMTg5MjAsIDAsIDYwNzUsIDAsIDI4MiwgMCwgNjQzNywgNzQwNzgsIDAsIDY1ODYxLCAwLCAwLCAwLCAKKyAgICAwLCAzNDc0LCAxMTg3ODcsIDAsIDEyMDY1NSwgNjA4MSwgMCwgMCwgNzQwNzYsIDc4ODc5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4NzUxLCAxMTQ5OSwgMTIwMjczLCA3ODE2LCAxMjYzNiwgNDY2NSwgMTI2MjgsIDQ2NzAsIDEyMDI3MSwgMTIwMjcyLCAwLCAKKyAgICA5NjQyLCAxMDkxMiwgOTU4LCAwLCAxMTM4NywgNzg4NzgsIDQ2NjYsIDAsIDQ5MTUsIDAsIDQ2NjksIDAsIDY4MDk5LCAKKyAgICAxMzI4NywgNDY2NCwgMTA4MzYsIDEyMDU1MCwgMCwgNjk3NzUsIDAsIDQzNTk1LCA3NDUwLCAwLCA5MTc4NzUsIDg2NjQsIAorICAgIDk2OTcsIDM2MDYsIDkxNzg3MywgMCwgMCwgNjQ4MTUsIDEwNjMsIDEyMDI1MCwgMTIwMjUxLCA5NzcyLCA3MjU1LCA4ODg2LCAKKyAgICAxMzg5LCAwLCAxMjAyNTcsIDEyMDI1OCwgMTIwMjU5LCAxMjk0MSwgNDI2NjEsIDEyMDI1NCwgMTIwMjU1LCAxMjAyNTYsIAorICAgIDEyMzAxLCAxMjAyNjYsIDY5ODIwLCA0MTEwMiwgNjY2MDQsIDEyMDI2MiwgMTIwMjYzLCAxMjAyNjQsIDEwMTcsIDY2NjAwLCAKKyAgICA1MjMsIDUwNSwgMTQ0NywgNzQ0MzYsIDAsIDAsIDAsIDg2MDgsIDQyNzg5LCAwLCAwLCAwLCAxMTkxOTYsIDExMzA3LCAKKyAgICA2NjcwNywgOTE3ODcxLCAwLCAxMTc0NSwgNzkxOSwgMCwgMTY0MSwgMCwgMCwgODk2NiwgMCwgMCwgNTkwOCwgMCwgMCwgCisgICAgNjc0NCwgMCwgMTY5OSwgNzQxOTEsIDc0ODQzLCAwLCAwLCA2MzA2LCAxMDE2OSwgMCwgMTE5MjUxLCAxMTg5MzksIDM3NjYsIAorICAgIDIzODksIDEyMDQ1NiwgMTIwNDU1LCA2NjExLCAyNTcsIDQzMTcwLCAxMzE1MywgMCwgNDIzODYsIDAsIDk0MzYsIDI1OTksIAorICAgIDAsIDY0OTYsIDk0NDksIDU5MzAsIDExNDc2LCAxMTAzMywgMTE0NDcsIDAsIDU2MjIsIDEyMDQzNiwgODQ3NywgMzc2MCwgCisgICAgMTcxOCwgOTQ0MiwgNjY0MzMsIDM3NzYsIDAsIDQxNDM1LCA0MzUyLCAwLCAyNDM1LCAxMjA4MDksIDU2MjEsIDAsIDQyMDEsIAorICAgIDM3NzgsIDQyMDMsIDQyMDIsIDQyMDUsIDQyMDQsIDEyMDQ0NywgMzc2OCwgNjgxNDIsIDc2NSwgNDE0NDAsIDM3NjQsIAorICAgIDg0NzMsIDYzNzMsIDg0NjksIDEyMDQzOCwgMTI5NDcsIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgMCwgMCwgCisgICAgNjgyOSwgNTIyNSwgMCwgMCwgMCwgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCAwLCAwLCAwLCAwLCAKKyAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDAsIDY5NTIsIDAsIAorICAgIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIDEyMDAzOCwgCiAgICAgMTIwMDI3LCAxMjAwMjgsIDEyMDAyNSwgNTYyOCwgMTIwMDMxLCA5NzAsIDEyMDAyOSwgNDc3MiwgMjQwMCwgNTYyNywgCi0gICAgMTIwMDE3LCAxMjAwMTgsIDEyMDAyMywgNjQyNzUsIDEyMDAyMSwgMTA5NjEsIDAsIDIwMywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQzNzgsIDQyMDU0LCAwLCAwLCA1NTQsIDExOTY0OSwgMTEzNTgsIDAsIDEyMTgyLCA0MjA0OCwgMTEwNjUsIDAsIDczODkxLCAKLSAgICAwLCAwLCA1Njk0LCA3Njg5LCA3NDUyOCwgOTMyMywgNDMyNSwgMzA0NywgMTAzMTcsIDE3NSwgMCwgMCwgNzQ2MDUsIDAsIDAsIAotICAgIDEyNDMsIDQyMTU0LCA1NDMxLCA2NjUyLCAwLCAwLCAwLCAwLCA2ODExOCwgMCwgMTEyOSwgMCwgMCwgNjU5MDAsIDE5ODYsIAotICAgIDc4NDYsIDAsIDg2NjEsIDAsIDY1MjU1LCAwLCAzODQ1LCA0NDkwLCAwLCA2NjQ5LCA3NDQwMCwgMTQ1NiwgNzUzMCwgCi0gICAgMTE5NzcsIDcyNDksIDgzNjYsIDAsIDc3NTYsIDEyMzQyLCAwLCA1MSwgNDE1MTYsIDAsIDg1NzAsIDk1NjgsIDAsIDQ1NiwgCi0gICAgNzAyNiwgODE0NSwgMTE2OCwgOTI1MSwgOTA4MiwgMCwgNjQwNTUsIDQyNzgxLCAzODY2LCAxMjMyMywgNDE1MTIsIDczODA1LCAKLSAgICA2ODEyMSwgMCwgNDE0OTQsIDAsIDQ2NjAsIDAsIDEwNDA1LCAwLCAwLCAwLCAwLCA0MjA0MCwgNzM5MTgsIDExOTYyNywgCi0gICAgNzk0NCwgNDE0NTQsIDEyNjA1LCAwLCAwLCA0MTQ1NSwgMjM2LCAwLCAwLCA4MjE0LCAwLCAwLCAwLCA0MTQ1NywgMCwgCi0gICAgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCAwLCAwLCAwLCAwLCA4NzY2LCAwLCA5MTc4NjMsIDU4NTQsIDAsIDEwNTgzLCAwLCAKLSAgICAxMTk5ODksIDAsIDEwNDE2LCA5MTc4NjksIDM4NzIsIDAsIDAsIDg0MjksIDAsIDAsIDI4MzgsIDkxNzg2NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTE3ODY0LCAxMjA4MTMsIDEwNTUzLCAxNjYyLCA4NDgzLCAwLCA0MzYwNSwgNTg5MiwgOTE3ODY4LCAwLCAKLSAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAotICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAwLCAxMDM1NywgMCwgODE3MCwgMTcwNCwgODU1NiwgMCwgCi0gICAgOTY1OSwgMCwgMCwgMCwgOTU1NiwgMCwgNDUwMywgMTEzNTMsIDk2NDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MjI5LCAKLSAgICA2NjU5MywgNjQzOCwgMCwgOTEwOSwgMTE5NTY1LCAxMjg5LCA2NDU5OSwgMCwgMCwgMCwgNjU1MDcsIDI0NDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNzUwLCAwLCAwLCAxOTkzNywgMCwgMCwgMCwgNTY3NSwgMjU0LCAwLCAwLCAwLCA0MjQyNSwgODkxOCwgCi0gICAgNjQwMDMsIDU3MTYsIDQyMzEyLCAwLCAwLCA2OTcyLCA0MjgyNiwgMCwgNDI0NjQsIDEyMDU2NywgMCwgMCwgNzQ3OTYsIAotICAgIDY0NDAwLCA2NDY5MywgMCwgMCwgNjU0MjksIDk1MTUsIDQ0MzUsIDAsIDAsIDAsIDAsIDExNzg1LCAwLCA2NDY3MSwgCi0gICAgNDE5NzgsIDE0MTIsIDQ1OTQsIDEzOTEsIDEwNTM2LCA4MDY3LCA5OTAxLCA3Nzc1LCAwLCAwLCA3NDU4OCwgMTIwNzQ4LCAKLSAgICAzMTQwLCAwLCA3OTYwLCA0MzI3MSwgMCwgMTI1MTgsIDEwOTA5LCAwLCAxNDI4LCAxMjQ3MiwgMCwgMCwgNzY5OSwgMTIzOTMsIAotICAgIDAsIDAsIDAsIDc0NTE4LCA5MDYzLCAwLCA0MjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDU1NCwgCi0gICAgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCA3Mzc4NSwgMCwgNDI1MDYsIDAsIDEwMTk5LCAwLCAwLCAwLCA2NTkxOSwgCi0gICAgMCwgMCwgNzIwLCAzMjQsIDAsIDAsIDAsIDAsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA2ODEyMywgMCwgNjQ0ODgsIDAsIAotICAgIDAsIDAsIDc0Nzg3LCAwLCAwLCAwLCA2NTU5NywgMCwgMCwgMCwgMTMwMiwgMCwgMCwgMCwgMCwgMCwgNTIwNCwgNzQ3NzQsIAotICAgIDAsIDAsIDAsIDM5OTUsIDAsIDY1NjA4LCAzNzE0LCAwLCAwLCAwLCAxMDk5OSwgMTE3NTAsIDAsIDEyNzAwNCwgMCwgMCwgMCwgCi0gICAgMCwgODEzMCwgODY3MiwgMTA4NDUsIDExOTY0LCAwLCAwLCAwLCAwLCAwLCA0Mjg2MywgNzM4MzksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ2OCwgNjEyLCAwLCA2NDQwMSwgNjY0NDgsIDAsIDAsIDE2NzQsIDAsIDU4MjMsIDAsIDEyMjgwLCAwLCA1NDAsIAorICAgIDEyMDAxNywgMTIwMDE4LCAxMjAwMjMsIDY0Mjc1LCAxMjAwMjEsIDEwOTYxLCAwLCAyMDMsIDAsIDAsIDAsIDAsIDc4MzUwLCAKKyAgICAwLCA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgMCwgCisgICAgNzM4OTEsIDAsIDAsIDU2OTQsIDc2ODksIDY5Nzk4LCA5MzIzLCA0MzI1LCAzMDQ3LCAxMDMxNywgMTc1LCAwLCAwLCAKKyAgICA2OTc2NCwgMCwgMCwgMTI0MywgNDIxNTQsIDU0MzEsIDY2NTIsIDAsIDY5NzcwLCA0MzY1MSwgMCwgNjgxMTgsIDAsIDExMjksIAorICAgIDAsIDAsIDY1OTAwLCAxOTg2LCA3ODQ2LCA3ODgwNCwgODY2MSwgMCwgNjUyNTUsIDAsIDM4NDUsIDQ0OTAsIDExODk2OSwgCisgICAgNjY0OSwgNzQ0MDAsIDE0NTYsIDc1MzAsIDExOTc3LCA3MjQ5LCA4MzY2LCAwLCA3NzU2LCAxMjM0MiwgMCwgNTEsIDQxNTE2LCAKKyAgICAwLCA4NTcwLCA5NTY4LCA5MTc4NjMsIDQ1NiwgNzAyNiwgODE0NSwgMTE2OCwgOTI1MSwgOTA4MiwgMCwgNjQwNTUsIAorICAgIDQyNzgxLCAzODY2LCAxMjMyMywgNDE1MTIsIDczODA1LCA2ODEyMSwgMCwgNDE0OTQsIDAsIDQ2NjAsIDAsIDEwNDA1LCAwLCAKKyAgICA3ODgwMywgMCwgMCwgNDIwNDAsIDczOTE4LCAxMTk2MjcsIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAKKyAgICAyMzYsIDY0MDUxLCA3ODg2NywgODIxNCwgMCwgMCwgMCwgNDE0NTcsIDAsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgCisgICAgOTE3ODY0LCAwLCAwLCA3ODAyOSwgODc2NiwgMCwgNzgwNzksIDU4NTQsIDAsIDEwNTgzLCAwLCAxMTk5ODksIDAsIDEwNDE2LCAKKyAgICA5MTc4NjksIDM4NzIsIDkxNzg2OCwgMCwgODQyOSwgMCwgMCwgMjgzOCwgOTE3ODY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMTA5NiwgMTIwODEzLCAxMDU1MywgMTY2MiwgODQ4MywgMCwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCA3Mzc0MiwgNjYsIAorICAgIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIDgyLCA4MSwgODQsIAorICAgIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCA4NTU2LCAwLCAKKyAgICA5NjU5LCAwLCAwLCAwLCA5NTU2LCAwLCA0NTAzLCAxMTM1MywgOTY0NywgMCwgNzgxODUsIDAsIDAsIDAsIDc4ODg2LCAwLCAKKyAgICAwLCA3NDIyOSwgNjY1OTMsIDY0MzgsIDAsIDkxMDksIDc4ODgyLCAxMjg5LCA2NDU5OSwgMCwgMCwgMCwgNjU1MDcsIDI0NDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDYzMzQsIDAsIDAsIDE5OTM3LCAwLCAwLCAwLCA1Njc1LCAyNTQsIDAsIDAsIDAsIDQyNDI1LCAKKyAgICA4OTE4LCA2NDAwMywgNTcxNiwgNDIzMTIsIDAsIDAsIDY5NzIsIDQyODI2LCAwLCA0MjQ2NCwgMTIwNTY3LCAwLCAwLCAKKyAgICA3NDc5NiwgNjQ0MDAsIDY0NjkzLCAwLCA3Nzg2MSwgNjU0MjksIDk1MTUsIDQ0MzUsIDAsIDQyNTIyLCAwLCAwLCAxMTc4NSwgCisgICAgMCwgNjQ2NzEsIDQxOTc4LCAxNDEyLCA0NTk0LCAxMzkxLCAxMDUzNiwgODA2NywgOTkwMSwgNzc3NSwgMCwgMCwgNzQ1ODgsIAorICAgIDEyMDc0OCwgMzE0MCwgMCwgNzk2MCwgNDMyNzEsIDAsIDEyNTE4LCAxMDkwOSwgMTI3NTA4LCAxNDI4LCAxMjQ3MiwgMCwgMCwgCisgICAgNzY5OSwgMTIzOTMsIDAsIDAsIDAsIDc0NTE4LCA4MjIzLCAwLCA0MjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MzQxOSwgMCwgNjQ1NTQsIDEwNTc0LCAzODc4LCAwLCA0MjM1MiwgMTc1MiwgNzM3ODUsIDAsIDQyNTA2LCAwLCAxMDE5OSwgCisgICAgMCwgMCwgMCwgNjU5MTksIDAsIDY2OTUsIDcyMCwgMzI0LCAwLCAwLCA0MzQwNiwgMCwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIAorICAgIDAsIDQzNDc0LCAwLCA2NDQ4OCwgMCwgMCwgNjQwNDEsIDc0Nzg3LCAwLCA3ODg2NSwgMCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAKKyAgICAxMzAyLCAwLCA3ODg2MSwgMCwgMCwgMCwgNTIwNCwgNzQ3NzQsIDQzNDA0LCA0MzM5NiwgMCwgMzk5NSwgNjgzNjAsIAorICAgIDY1NjA4LCAzNzE0LCAwLCAwLCAwLCAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgCisgICAgODEzMCwgODY3MiwgMTA4NDUsIDExOTY0LCAwLCAwLCAwLCAwLCA2ODQ1NSwgNDI4NjMsIDczODM5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0NjgsIDYxMiwgMCwgNjQ0MDEsIDY2NDQ4LCA2ODM3NiwgMCwgMTY3NCwgMCwgNTgyMywgMCwgMTIyODAsIDAsIDU0MCwgCiAgICAgNzQ1NjQsIDAsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAwLCAKICAgICA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCAwLCA2NTE3NywgNjIyNiwgMzUzLCAxMjM5NiwgMCwgMTE5NjEyLCA2NDc0MiwgCi0gICAgMCwgMCwgMCwgMCwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDAsIDE4ODQsIDk0ODEsIDQyNDE4LCAwLCA0MTE1NywgMCwgCi0gICAgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAKLSAgICAxMjcwMDksIDk3MzksIDAsIDc0MzkyLCA3MzkyMSwgMCwgNDI1MjEsIDg1MzksIDAsIDAsIDAsIDAsIDQ3ODgsIDAsIDAsIAotICAgIDY1NzM0LCAwLCA2NDM1MywgMCwgMTMwNzUsIDc0NDI5LCAwLCA2NDU2OSwgNDM1MzIsIDEwODM3LCAyNDkyLCAwLCAKLSAgICAxMTg5MDEsIDAsIDQxMTM2LCA2NDM1MSwgMTE4MTMsIDk2NDksIDQxMTU0LCAxMTk2MTcsIDUxMjgsIDQwMzgsIDQxMTQzLCAKLSAgICA2NTYwNCwgNjQ4NTksIDQxNTkyLCAwLCAxNjQ4LCA1NDM1LCAwLCAwLCA0MTM0MywgMTE5ODQ4LCA2NTQzOSwgMTI3MDksIAotICAgIDY5ODYsIDAsIDAsIDAsIDQxMzQ5LCAwLCAxMjU4MSwgMTAzNzQsIDUxNzUsIDAsIDczODA2LCAxMDI1NCwgMCwgMTAyNzgsIAotICAgIDEwMjYyLCAxMjAyOTUsIDQxMzQ2LCAwLCA2MDcsIDAsIDAsIDAsIDEyOTIzLCAxMDMxNCwgMTAyODIsIDY1NDc3LCAxMDM3OCwgCi0gICAgMTIwMjk3LCA0MDk3NiwgODI2NSwgMCwgMTE5ODM0LCA0MDk3NSwgNTg0MCwgNDI4MzgsIDAsIDQwOTc4LCAwLCAxMTk4NDAsIAotICAgIDAsIDAsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgMTE5ODM2LCAwLCAwLCAwLCAzNTI1LCAwLCAwLCAwLCAwLCA1NjE5LCAKLSAgICA2NTgyMiwgMCwgMTk0ODgyLCA3NDU1LCAwLCA1NjE2LCAxMTQ4NiwgOTY1NiwgMCwgMCwgMTA3MjcsIDU2MTUsIDAsIAotICAgIDEyMDU1MSwgNDIzODAsIDY0ODk1LCAwLCA2NjQ1MSwgODA4LCA1NDU1LCAxMTM0NywgMCwgMTAyNiwgNTYyMCwgMTk0ODg3LCAKLSAgICAwLCAxMTM1MCwgNTYxNywgMCwgOTIyNSwgNjQ2MzksIDEyNzA3MywgOTE0NSwgMCwgMTMzOCwgMTIwNTgxLCAwLCAxMjczOSwgCi0gICAgMCwgMzA4NCwgMCwgMCwgNDEwMjUsIDYwMzcsIDAsIDM5NzQsIDAsIDEwMjkwLCAwLCAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgCi0gICAgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgMCwgNDEwMzIsIDQyMzg4LCAwLCA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAKLSAgICAwLCAxOTQ4OTMsIDAsIDQwOTYwLCAwLCAwLCAwLCA0MDk2MywgMCwgMTA0MDIsIDAsIDAsIDAsIDEwNjAzLCAwLCAwLCAwLCAKLSAgICAwLCAxOTQ5MjMsIDEwMDgzLCAxMjcwNjksIDAsIDE5NDkyMiwgMCwgMCwgMCwgOTA3MywgNDI1ODUsIDY0MzAyLCAxMDcwNCwgCi0gICAgNjUwMzAsIDQ3ODcsIDAsIDc0ODI5LCAwLCA2NTQyMywgMCwgMCwgOTU3MCwgMCwgOTUyNSwgMjY4OSwgOTE3NjI2LCAKLSAgICA2NTQyNiwgMCwgOTE3NjI0LCAwLCAwLCA0MDk2NiwgOTE3NjIzLCAxMzI4NiwgMzk5OCwgNDI1OTgsIDQyNTk2LCA1MDMsIDAsIAotICAgIDg3MzUsIDI2OTAsIDY2NDg4LCA0MjgzNiwgMTk0OTEzLCA0MTk1NCwgOTE3NjE3LCAxNjUyLCA3NzIsIDE5NDg3NywgODMxMCwgCi0gICAgNjU0MjgsIDM0ODcsIDAsIDM1ODUsIDEwMTk0LCA0MzMyMCwgMTE5MTU5LCAwLCAxOTQ4NzQsIDY0NjgsIDQxOTc2LCA5NzIwLCAKLSAgICA5MTc2MDYsIDExNzY3LCA0MTk3MCwgMCwgNTgzNiwgMTIzNTgsIDAsIDQzNTUsIDkwNDgsIDEyMTgwLCA2NTAyNywgNjQ2ODAsIAotICAgIDY1MDI1LCA2NDc1NywgMCwgNDE0ODgsIDAsIDg1MjcsIDE5NDkxNywgMTIzNjIsIDEyNDM1LCAxMjM2MCwgNDEwNTMsIAotICAgIDMyNjYsIDAsIDEyMzU2LCA4NjE2LCA0MTQ2NiwgMCwgMCwgMTE0NTAsIDAsIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAKLSAgICAyMzU4LCAwLCA4NjMzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTc1OSwgMCwgMCwgNzQ4MjMsIDAsIDQxNDIzLCA4MDc4LCAKLSAgICAxMDUwNCwgMCwgMCwgMCwgMCwgNzAwMiwgMCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIDAsIDQxMDUwLCAKLSAgICA0MTQ3MywgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIDQxNDIwLCAwLCAKLSAgICAzNjI1LCAwLCA0MTQwOSwgMCwgMCwgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCA0MzMxNywgMCwgMCwgMCwgCi0gICAgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAwLCAwLCA0MTQxNywgMTI2MSwgMCwgMCwgMTIxMDIsIDExOTY2MiwgNDE0MDEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQyMjkwLCAzMjc1LCAwLCA0MjMyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5ODksIDc0MjM0LCAwLCAKLSAgICAxMDU5OCwgMCwgMjY2OSwgOTAzLCAwLCAyOTIwLCAwLCAwLCA3NDYwMywgNjQ1MDQsIDE5OTI4LCAwLCAwLCAzOTE3LCAwLCAKLSAgICAxMTczMiwgMCwgMCwgNDE0NDgsIDQxNDYxLCAwLCAwLCA5MTc1NTgsIDAsIDg4MTksIDEyNjYzLCAwLCA0MTE4NCwgNzQwMTQsIAotICAgIDIzMiwgNzQ4MzUsIDEyMDY0NiwgOTE2OCwgNjU3ODYsIDAsIDAsIDAsIDkwOTQsIDAsIDExNzU4LCAwLCAwLCAxMDY0LCAKLSAgICA0MjQ2NywgMCwgMTAxMTUsIDE5OTI0LCAwLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgMCwgNzQwMTgsIDE4NzgsIDAsIDAsIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgMTI2MTcsIAotICAgIDQxMTc0LCAwLCA0MTQ1OCwgMCwgNDE0NjMsIDQyNDEzLCAxMTI5MiwgMjQwNiwgNzc1LCAwLCA2NTU4NCwgMCwgNjA3NCwgCi0gICAgOTYxOCwgMTk0OTAzLCAwLCAwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAxOTQ4OTksIDQxNDU2LCAwLCAxNTk5LCAKLSAgICAxMTMzMywgMCwgODUxNCwgODUxMywgMCwgMTYxMywgMCwgMCwgMCwgMCwgMCwgMCwgNzQ1MDAsIDQxNDYwLCAxMDE0NSwgCi0gICAgMTA1NDIsIDAsIDEyMDM3OSwgMCwgOTkwNSwgMCwgNjU3MzAsIDAsIDEyMDM3NCwgODQyNywgMTIwMzc1LCAwLCAxMjAzNzYsIAotICAgIDAsIDExNDk3LCA2NDY4NywgNzQwMDgsIDEyMDM3MSwgMzg3MSwgMCwgMCwgOTExMSwgNTc0MSwgMCwgMTk0ODQ2LCAKLSAgICAxMjAzNjYsIDExOTExMSwgMTIwNzQ1LCAwLCAxMjAzNjksIDAsIDExNjQ4LCAwLCAwLCAxMjAzNjQsIDQxNTg3LCAxMjAzNjUsIAotICAgIDAsIDc0MzIyLCA0MjExMywgMCwgMCwgMTIxNzIsIDAsIDc0NTMwLCAwLCA2NTcyMywgMCwgNzM4NzEsIDY1NzI0LCA3OTI4LCAKLSAgICAxMjAzNTQsIDAsIDQxNTk1LCA3MzczMCwgMCwgNDIxMTgsIDczODMwLCA2NjA0MiwgMTAzNTUsIDAsIDc4NzUsIDAsIAotICAgIDQxNTk4LCAzOTkzLCAwLCAxNTQ1LCA0MDk3MSwgNTM2LCAwLCAxMTk5NTksIDAsIDAsIDY1MTczLCA2NTI4NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDEzNzUsIDU0MDIsIDAsIDAsIDE2ODcsIDEyMDUwMywgMCwgMCwgMCwgNjQzMjYsIDQwOTY5LCAxMDUyNiwgCi0gICAgMCwgODMyMywgNDA5NjgsIDEzMzksIDExNzMxLCAwLCAwLCA2NTQ2MCwgMTIyNDIsIDAsIDgwMjAsIDEwODQzLCAxMTU1NCwgCi0gICAgMCwgMCwgODI2NiwgNDEwMDYsIDY1NzIyLCAwLCAxMDcxMCwgMCwgMTE4OTQyLCAwLCAwLCAxMTkxNTUsIDE5NTA5MSwgMCwgCi0gICAgMTE5NjM2LCAwLCAxMjA2ODcsIDAsIDAsIDExNzU1LCA2NjMwNSwgMCwgMCwgMTA5MTcsIDEyMDc2NywgMCwgMTEyNzIsIAotICAgIDIwNDAsIDQxMjQ3LCA0MTMyNiwgMCwgMTc0MSwgNDIzNzAsIDEyMjcsIDAsIDAsIDExNDEzLCAwLCAwLCAwLCAxNTg2LCAKLSAgICA0OTc4LCAwLCAxOTg0LCAwLCAwLCAxMjA2NTEsIDQwOTg0LCAwLCA5MzczLCAwLCAxMjkxNiwgNjI4NCwgMCwgNDE2NjMsIDAsIAotICAgIDAsIDAsIDkyMzcsIDkzODUsIDQxNjQ4LCAwLCAwLCAwLCA0MTY2NiwgMTgzMCwgNzM3ODMsIDQxMDc2LCA0MTI4NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDE5ODcsIDQxNjc2LCAwLCAxMjA4MjMsIDAsIDQxNjcwLCAwLCAwLCAyNzk2LCA2NTE2NywgMTE2ODMsIAotICAgIDk5MDIsIDc0NTIxLCAwLCAxMTQ1MSwgMCwgMCwgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCA3NDE2NCwgNDEyMzgsIDU0OCwgCi0gICAgMTE0MDUsIDEzMTMzLCA2NDM2OCwgMCwgMCwgMCwgMzk3LCA2NDY3OCwgNDIxMzksIDk1NDcsIDk1OTAsIDAsIDE2MTQsIDAsIAotICAgIDY0MzU2LCA2NjMwNywgNjY1MSwgMTM1OCwgMCwgNDI4LCA5NjIwLCAxNDY2LCAwLCAxMDk4MiwgMCwgMTMzMywgMCwgNDA3LCAKLSAgICA2NDI1LCAwLCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIDAsIDAsIDAsIDkwNTcsIDQyMjk0LCA0MTIxOCwgCi0gICAgMCwgMCwgMCwgMTg4MywgMTA5NTIsIDgwNDgsIDAsIDQxMjI1LCAwLCAxMTg5NTUsIDAsIDAsIDAsIDQ0MDcsIDAsIDY1ODA5LCAKLSAgICAxMTkwNzQsIDE5NDgyMSwgODQ0OCwgNjgxMjIsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIAotICAgIDE5NDgyNCwgMTE5MDU4LCAxMDc2NiwgMTIwMTIsIDIzODYsIDY0NzMyLCA5MTcwLCA5MTc4MjEsIDkxMjMsIDY0NTg1LCAKLSAgICAxMjA1MDAsIDAsIDAsIDQyMDUxLCAwLCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMCwgMCwgCi0gICAgMTIwNjM3LCA0MjQxOSwgMCwgNDIwNDcsIDAsIDAsIDg0NzAsIDExODA3LCA2NTg5NywgNTc3LCAwLCAwLCA3NDMwMCwgMCwgCi0gICAgMCwgNzQ4NDAsIDAsIDAsIDAsIDAsIDg3MzYsIDE0MTQsIDQyNjQzLCA5NjgzLCAwLCA3NDM0NCwgMCwgMjUzNiwgMCwgCi0gICAgNjYzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MzE3LCAwLCA2NjMxNSwgNjYzMTYsIDAsIDExMjczLCAwLCA0MzAwNCwgCi0gICAgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgNjYzMjQsIDAsIDAsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgMCwgODkxLCAKLSAgICAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyMzIyLCAwLCAwLCAxMTQ0OSwgMCwgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAwLCAwLCA0MzIxNiwgNjA4OSwgMCwgCi0gICAgMCwgMCwgNDE3MCwgMTAyOSwgMCwgMCwgMTE5MjI0LCA0MjM3NCwgMCwgNzQ0LCAwLCAwLCAwLCA2NTgyMywgMCwgMCwgCi0gICAgMzU1MSwgMCwgMCwgNDYyMywgMCwgMCwgNDU5OCwgMCwgNjUxMzYsIDAsIDAsIDAsIDEwODUxLCAwLCA2MTc5LCAwLCA2MTgwLCAKLSAgICAwLCAxMTk1MiwgMTIwNzc4LCAwLCAxMTk3MiwgMCwgMCwgMCwgMCwgMTc3LCAwLCA2MTc2LCAxMjA1ODAsIDAsIDAsIDYxNzcsIAotICAgIDkwMjAsIDAsIDAsIDYxNzgsIDEyMDI0OSwgMTIwMjQyLCAwLCAxMjAyNDMsIDc1MTgsIDg3NTQsIDAsIDEyMDIzNywgCi0gICAgNzQ1NTEsIDQzMDgxLCAwLCAwLCA5MTM2LCAxMjAyNDAsIDQ0MDEsIDQxMjgwLCAwLCA4OTc0LCAyMzA4LCAwLCA3NDE0OSwgCi0gICAgMCwgMjMxOCwgMCwgNjYzNjEsIDgxOTgsIDAsIDY0MzYwLCAxMjYwMSwgMCwgNjUyNjYsIDEyMDgyNywgNzQzMDcsIDAsIAotICAgIDY5NzAsIDU0MDQsIDQzMzMyLCAzNjY3LCA3OTM2LCAxMjkyNSwgMTI2OTg5LCA0MjA1NSwgMCwgMCwgMTE4OTQ5LCAxMDg3NCwgCi0gICAgNjU1MDUsIDAsIDAsIDQyMDUzLCAwLCA0MjA1NywgMTEwODMsIDQyMDUyLCAwLCAwLCA3Mzg0NSwgMCwgOTY2NSwgMCwgMCwgCi0gICAgMTMxODEsIDAsIDAsIDAsIDAsIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIAotICAgIDAsIDAsIDQxMTQ4LCA4NjgzLCA3NTk0LCAwLCAwLCAxMTkwOTAsIDEwODY5LCAwLCA0MTE0NiwgMCwgMTE0NDEsIDAsIAotICAgIDM1MTIsIDkxNzYxMiwgMCwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIDExOTEwNiwgCi0gICAgNDE1NDQsIDY1MTQ2LCAwLCAwLCAwLCAwLCAxOTk0MiwgMCwgMTE4OTA4LCA3OTg4LCAxMDQzNiwgNzQyNzMsIDMyNzEsIAotICAgIDczODA0LCA2NDcxMSwgMCwgMCwgMCwgMCwgMzgwNCwgMTMwNzAsIDExNTU3LCA0MjA0NCwgMCwgMTA5NSwgMCwgMzU5OSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNzQzNDYsIDY2Njk3LCAwLCAxMTY4NCwgMCwgMCwgMCwgMCwgNDIwNDMsIDAsIDY2Njc3LCAwLCAKLSAgICA0MjA0NiwgMTIwNzUxLCA0MDM2LCAwLCAwLCAwLCAxOTQ4NjIsIDAsIDExOTU0LCAwLCAxNDUwLCAxMjk4NiwgMTM0MCwgMCwgCi0gICAgNjU0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MzksIDAsIDAsIDAsIDAsIDAsIDAsIDQxMTkwLCAzOTczLCAKLSAgICAxOTQ4NTIsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDAsIDAsIDE5NDg1NCwgNjU3OTIsIDAsIDExODk2OCwgNjQxNywgCi0gICAgMTE4OTE4LCAwLCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAwLCA3NzU1LCAwLCAwLCA2NDU0OCwgMCwgMTYyMSwgCi0gICAgMTAyMTQsIDY1MTI2LCAwLCAwLCAwLCAxMjE4OCwgMCwgMTYxNywgODA1MCwgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgCi0gICAgMTk0ODcxLCAxNzU2LCAwLCAwLCA2NTc2OCwgMTIwNjk0LCA0MTg5MiwgMCwgNzU1NSwgMTMxMDMsIDU0MDgsIDI4MTcsIAotICAgIDEyMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTcsIDg2ODksIDY0NzIzLCAxMDU2LCAwLCA3NDE0NywgMCwgMCwgMCwgCi0gICAgNzA3MywgNjU4NTAsIDEyMzI3LCAwLCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIDAsIDAsIDAsIAotICAgIDg0NjEsIDAsIDEyMTUzLCAxMjc5OSwgMCwgMTIwNjU0LCAxMjA2ODQsIDk0NTEsIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIAotICAgIDAsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDAsIDExNzA5LCAwLCA3NDQ0NiwgMCwgMCwgMCwgMTEzMzgsIDEyMDc2OCwgCi0gICAgMzI3NiwgMCwgMCwgNjU5MjgsIDAsIDAsIDY1MDIxLCA2NDc5NSwgNzQ1NzQsIDAsIDEwMDQ3LCAwLCAzMjYyLCAwLCAwLCAwLCAKLSAgICAwLCA3NDMyOSwgMTYzLCA1NzYsIDk4OTUsIDE2NTUsIDAsIDc0NTkxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDAzOSwgMCwgMCwgCi0gICAgNTYyMywgNTcxNywgNTc3NiwgMCwgMCwgMCwgNDE1OTEsIDEyMDU4NiwgNjUyNTIsIDEyMDc5NSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODg4NywgMCwgNzI5NSwgMTEwMzEsIDAsIDQzMTU3LCAwLCA4OTQ2LCAxMDM0OCwgMTA0MTIsIDg3NTUsIDAsIDAsIAotICAgIDU3MTgsIDEzMjIxLCAwLCAwLCAwLCAwLCAwLCA4ODEwLCA3NDQ5OSwgNjg2LCAwLCAwLCA0NjE5LCAxMTg5NTQsIDY2NTQsIAotICAgIDczNzY5LCAwLCAwLCAxMjA0MCwgNjU2ODksIDEwMTI4LCA2NTExOCwgMCwgMTE5MTUxLCAxMTg4OTEsIDAsIDAsIDI0MDEsIAotICAgIDY4MTQ0LCA4NzkyLCAwLCAwLCA2NTQ1NSwgMCwgMCwgMCwgMTE5MTI5LCAwLCAxMjg4NiwgMCwgNjY2MjQsIDAsIDQzNTU3LCAKLSAgICAxMDMwMCwgMTAxNjEsIDEwMzk2LCA3NDEzNSwgMCwgMCwgMCwgNzM4NTEsIDMwMTAsIDY0NDEsIDAsIDE0NTgsIDQxNDc1LCAKLSAgICAwLCAwLCAwLCAxMTQ3OSwgMCwgMCwgOTEwMCwgMTI4NjQsIDAsIDAsIDEwNjEsIDY0NzgwLCAyMDAxLCA0MzExMSwgMCwgMCwgCi0gICAgNDA1MiwgMCwgNzYyNiwgMCwgMCwgMTA0NSwgMCwgNTYzMSwgMCwgMCwgMCwgMCwgNzQxMjcsIDAsIDAsIDg0ODYsIDAsIAotICAgIDczNzU4LCAyMzM1LCA0MzYyLCAwLCAwLCA3Mzg2NywgMTAyNSwgMCwgNDI2MjUsIDAsIDAsIDQxNDQzLCAwLCAwLCAwLCAKLSAgICAxNzc0LCAxNTIzLCAwLCAwLCA0MTQ0NSwgMCwgMCwgODU2NywgNDE0NDIsIDM5ODgsIDAsIDAsIDExODkxMCwgMCwgNjUyNzQsIAotICAgIDg1NjQsIDAsIDAsIDAsIDAsIDAsIDY1OTA4LCAwLCA2NjUxMywgNjI1NiwgMCwgNTc5LCAwLCAxMDIwNiwgMCwgMCwgMjY3MywgCi0gICAgMCwgMTE4MTQsIDAsIDQ0ODgsIDAsIDAsIDAsIDEwNDQ0LCAxMjA4MjAsIDAsIDExNzk5LCA3NDQwNywgMCwgNDQ4NywgMCwgCi0gICAgNDI4MzIsIDEwMzIsIDAsIDEyMDczNiwgMCwgNzIwMywgMCwgNjE0LCAwLCAwLCAxMjA2MTUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyMDI4MiwgMCwgMCwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDc4ODQ3LCAxODg0LCA5NDgxLCA0MjQxOCwgMCwgCisgICAgNDExNTcsIDAsIDExOTUsIDY0ODk4LCA3OTI0LCAwLCA0MTE1MSwgMjAxMCwgMCwgNDEzMjgsIDQyMzQ0LCAwLCAxMjQwOSwgCisgICAgMCwgNDM2MCwgMTI3MDA5LCA5NzM5LCAwLCA3NDM5MiwgNzM5MjEsIDAsIDQyNTIxLCA4NTM5LCAwLCAwLCAwLCAwLCA0Nzg4LCAKKyAgICAwLCAwLCA2NTczNCwgMCwgNjQzNTMsIDAsIDEzMDc1LCA3NDQyOSwgMCwgNjQ1NjksIDQzNTMyLCAxMDgzNywgMjQ5MiwgMCwgCisgICAgMTE4OTAxLCA2ODYzNywgNDExMzYsIDY0MzUxLCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgCisgICAgNDExNDMsIDY1NjA0LCA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDAsIDY3MzQsIDQxMzQzLCAxMTk4NDgsIAorICAgIDY1NDM5LCAxMjcwOSwgNjk4NiwgMTE5ODQ2LCAwLCAwLCA0MTM0OSwgMCwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCisgICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNzc5NTAsIDQxMzQ2LCAwLCA2MDcsIDAsIDAsIDAsIDEyOTIzLCAxMDMxNCwgCisgICAgMTAyODIsIDY1NDc3LCAxMDM3OCwgMTIwMjk3LCA0MDk3NiwgODI2NSwgMCwgMTE5ODM0LCA0MDk3NSwgNTg0MCwgNDI4MzgsIAorICAgIDAsIDQwOTc4LCAwLCAxMTk4NDAsIDAsIDAsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgMTE5ODM2LCA2Nzc5LCAwLCAwLCAKKyAgICAzNTI1LCA2ODI0LCAxMTg4ODYsIDAsIDAsIDU2MTksIDY1ODIyLCAwLCAxOTQ4ODIsIDc0NTUsIDAsIDU2MTYsIDExNDg2LCAKKyAgICA5NjU2LCAwLCAwLCAxMDcyNywgNTYxNSwgMCwgMTIwNTUxLCA0MjM4MCwgNjQ4OTUsIDQzNjkzLCA2NjQ1MSwgODA4LCAKKyAgICA1NDU1LCAxMTM0NywgMCwgMTAyNiwgNTYyMCwgMTk0ODg3LCAwLCAxMTM1MCwgNTYxNywgMCwgOTIyNSwgNjQ2MzksIAorICAgIDEyNzA3MywgOTE0NSwgMCwgMTMzOCwgMTIwNTgxLCAwLCAxMjczOSwgNDYwMywgMzA4NCwgMCwgMCwgOTg1OCwgNjAzNywgMCwgCisgICAgMzk3NCwgNzgyMTMsIDEwMjkwLCAwLCAzMDgzLCAxMDMyMiwgMCwgMCwgMCwgNDEwMzYsIDAsIDAsIDQzMzIxLCA2NTYwNiwgCisgICAgMCwgNDEwMzIsIDQyMzg4LCAwLCA2NDcwMCwgMTAwMTEsIDE0NDUsIDQwOTYxLCAwLCAxOTQ4OTMsIDAsIDQwOTYwLCAwLCAKKyAgICAxOTQ4OTEsIDAsIDQwOTYzLCA2NDk1MiwgMTA0MDIsIDAsIDAsIDAsIDEwNjAzLCAwLCAwLCAwLCAwLCA2NzE0LCAxMDA4MywgCisgICAgMTI3MDY5LCAxOTQ4OTUsIDc4MzY3LCAwLCAwLCAwLCA5MDczLCA0MjU4NSwgNjQzMDIsIDEwNzA0LCA2NTAzMCwgNDc4NywgCisgICAgMCwgNzQ4MjksIDAsIDY1NDIzLCAwLCAwLCA5NTcwLCAwLCA5NTI1LCAyNjg5LCA5MTc2MjYsIDY1NDI2LCAwLCA5MTc2MjQsIAorICAgIDQzNzQwLCAwLCA0MDk2NiwgOTE3NjIzLCAxMzI4NiwgMzk5OCwgNDI1OTgsIDQyNTk2LCA1MDMsIDAsIDg3MzUsIDI2OTAsIAorICAgIDY2NDg4LCA0MjgzNiwgMTk0OTEzLCA0MTk1NCwgOTE3NjE3LCAxNjUyLCA3NzIsIDY2ODgsIDgzMTAsIDY1NDI4LCAzNDg3LCAKKyAgICA0MzQxNiwgMzU4NSwgMTAxOTQsIDQzMzIwLCAxMTkxNTksIDAsIDE5NDg3NCwgNjQ2OCwgNDE5NzYsIDk3MjAsIDkxNzYwNiwgCisgICAgMTE3NjcsIDQxOTcwLCAwLCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgMTIxODAsIDY1MDI3LCA2NDY4MCwgNjUwMjUsIAorICAgIDQzNjk5LCAwLCA0MTQ4OCwgMCwgODUyNywgMTk0OTE3LCAxMjM2MiwgMTI0MzUsIDEyMzYwLCA0MTA1MywgMzI2NiwgMCwgCisgICAgMTIzNTYsIDg2MTYsIDQxNDY2LCAwLCAwLCAxMTQ1MCwgMCwgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIAorICAgIDExOTA2OSwgODYzMywgMCwgMCwgMTE5MTgyLCA2OTI0NCwgMCwgMCwgMTE3NTksIDAsIDYzNjgsIDc0ODIzLCAwLCA0MTQyMywgCisgICAgODA3OCwgMTA1MDQsIDAsIDQxNjk4LCA0MjIzNywgMCwgNzAwMiwgMCwgNDE0MzAsIDQyMjY3LCA0MTA1MSwgNDE0ODQsIDAsIAorICAgIDAsIDQxMDUwLCA0MTQ3MywgMTA0NjYsIDEzMDk5LCAwLCAwLCAwLCA2NDM1LCAwLCAxMTM2MiwgMCwgMCwgNjUzODIsIDAsIAorICAgIDQxNDIwLCAwLCAzNjI1LCA3ODE1NywgNDE0MDksIDAsIDAsIDIwNDEsIDkxNzgsIDk2NzIsIDQxNDI3LCA0MzU0MSwgCisgICAgNDMzMTcsIDAsIDAsIDAsIDQxNDI0LCA5MTc1OTgsIDEyMDU0NiwgMCwgMCwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAKKyAgICAxMTk2NjIsIDQxNDAxLCAwLCAwLCAwLCAwLCAwLCA0MjI5MCwgMzI3NSwgMCwgNDIzMjksIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMDcyNSwgMTA5ODksIDc0MjM0LCAwLCAxMDU5OCwgNzQxMCwgMjY2OSwgOTAzLCAwLCAyOTIwLCAwLCAxMjcyMzIsIAorICAgIDc0NjAzLCA2NDUwNCwgMTk5MjgsIDAsIDAsIDM5MTcsIDAsIDExNzMyLCAwLCAwLCA0MTQ0OCwgNDE0NjEsIDAsIDAsIAorICAgIDkxNzU1OCwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgCisgICAgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgMCwgMTAxMTUsIDE5OTI0LCAwLCAwLCAKKyAgICA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCAwLCAKKyAgICAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIDEyNjE3LCA0MTE3NCwgMCwgNDE0NTgsIDAsIDQxNDYzLCAKKyAgICA0MjQxMywgMTEyOTIsIDI0MDYsIDc3NSwgMCwgNjU1ODQsIDAsIDYwNzQsIDk2MTgsIDE5NDkwMywgMCwgNDM0NDAsIDAsIAorICAgIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIDE5NDg5OSwgNDE0NTYsIDAsIDE1OTksIDExMzMzLCAwLCA2NzAzLCA4NTEzLCAwLCAKKyAgICAxNjEzLCAwLCA2ODQ1NiwgMTI1OTgsIDAsIDAsIDc4NzQ1LCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAxMDU0MiwgOTkzNywgCisgICAgNzg3NDYsIDAsIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgCisgICAgMTE0OTcsIDY0Njg3LCA3NDAwOCwgMTIwMzcxLCAzODcxLCAwLCAwLCA5MTExLCA1NzQxLCAwLCAxOTQ4NDYsIDEyMDM2NiwgCisgICAgMTE5MTExLCAxMjA3NDUsIDAsIDEyMDM2OCwgMCwgMTE2NDgsIDAsIDAsIDEyMDM2NCwgNDE1ODcsIDEyMDM2NSwgMCwgCisgICAgNzQzMjIsIDQyMTEzLCAwLCAwLCAxMjE3MiwgMCwgNzQ1MzAsIDY1Mjk4LCA2NTcyMywgMTk0ODQwLCA3Mzg3MSwgNjU3MjQsIAorICAgIDc5MjgsIDEyMDM1NCwgMCwgNDE1OTUsIDczNzMwLCAwLCA0MjExOCwgNzM4MzAsIDY2MDQyLCAxMDM1NSwgMCwgNzg3NSwgMCwgCisgICAgNDE1OTgsIDM5OTMsIDAsIDE1NDUsIDQwOTcxLCA1MzYsIDAsIDQzMDI5LCAwLCAwLCA2NTE3MywgNjUyODYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQxMzc1LCA1NDAyLCAwLCAwLCAxNjg3LCAxMjA1MDMsIDAsIDAsIDc4MTk0LCA2NDMyNiwgNDA5NjksIAorICAgIDEwNTI2LCA3ODc1MywgODMyMywgNDA5NjgsIDEzMzksIDExNzMxLCA3ODc1NiwgMCwgNjU0NjAsIDEyMjQyLCAwLCA4MDIwLCAKKyAgICAxMDg0MywgMTE1NTQsIDAsIDAsIDgyNjYsIDQxMDA2LCA2NTcyMiwgMCwgMTA3MTAsIDAsIDExODk0MiwgNjc2NjcsIAorICAgIDY0NTY3LCAxMTkxNTUsIDE5NTA5MSwgMCwgMTE5NjM2LCA2Nzg1NywgMTIwNjg3LCAwLCAwLCAxMTc1NSwgNjYzMDUsIDAsIAorICAgIDAsIDEwOTE3LCAxMjA3NjcsIDAsIDExMjcyLCAyMDQwLCA0MTI0NywgNDEzMjYsIDE5NTA2MCwgMTc0MSwgNDIzNzAsIAorICAgIDEyMjcsIDAsIDAsIDExNDEzLCAwLCAwLCA1MjgzLCAxNTg2LCA0OTc4LCAwLCAxOTg0LCAwLCAwLCAxMjA2NTEsIDQwOTg0LCAKKyAgICAwLCA5MzczLCAwLCAxMjkxNiwgNjI4NCwgMCwgNDE2NjMsIDAsIDAsIDAsIDkyMzcsIDkzODUsIDQxNjQ4LCAwLCAwLCAwLCAKKyAgICA0MTY2NiwgMTgzMCwgNzM3ODMsIDIwNTYsIDQxMjg3LCAwLCAwLCAwLCA0MjIxOSwgMCwgMCwgNDE5ODcsIDQxNjc2LCAwLCAKKyAgICAxMjA4MjMsIDAsIDQxNjcwLCAwLCAwLCAyNzk2LCA1NTI5MSwgMTE2ODMsIDk5MDIsIDc0NTIxLCAwLCAxMTQ1MSwgMCwgMCwgCisgICAgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCA3NDE2NCwgNDEyMzgsIDU0OCwgMTE0MDUsIDEzMTMzLCA2NDM2OCwgMCwgMCwgMCwgCisgICAgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIDAsIDE2MTQsIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIAorICAgIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAxMTg4MzEsIDEzMzMsIDAsIDQwNywgNjQyNSwgMCwgNzQyNTMsIAorICAgIDAsIDAsIDAsIDU4MDQsIDExOTc2LCA4NTU0LCAwLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAKKyAgICAxODgzLCAxMDk1MiwgODA0OCwgMCwgNDEyMjUsIDAsIDExODk1NSwgMCwgMCwgMCwgNDQwNywgMCwgNjU4MDksIDExOTA3NCwgCisgICAgMTk0ODIxLCA4NDQ4LCA2ODEyMiwgNzQxODMsIDAsIDEyNjc1LCAxMjY1OSwgMCwgNDIzNjMsIDEyMDYyNCwgMTk0ODI0LCAKKyAgICA1NTI3MywgMTA3NjYsIDEyMDEyLCAyMzg2LCA2NDczMiwgOTE3MCwgOTE3ODIxLCA5MTIzLCA2NDU4NSwgMTIwNTAwLCAwLCAKKyAgICA0MzM2NywgNDIwNTEsIDAsIDQxNjQsIDkwODEsIDAsIDEyMDU2OSwgNDIwNDksIDQyMDQyLCA4NzA5LCAwLCAwLCAxMjA2MzcsIAorICAgIDQyNDE5LCAwLCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIDAsIDc0MzAwLCAwLCAxMjczMDgsIAorICAgIDc0ODQwLCAwLCAwLCAwLCAwLCA4NzM2LCAxNDE0LCA0MjY0MywgOTY4MywgNDM0ODYsIDc0MzQ0LCAwLCAyNTM2LCAwLCAKKyAgICA2NjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzMTcsIDkxNzYxMiwgNjYzMTUsIDIxMDYsIDAsIDExMjczLCAwLCAKKyAgICA0MzAwNCwgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgNjYzMjQsIDY0OTA2LCAwLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIAorICAgIDAsIDg5MSwgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjMyMiwgMCwgMCwgMTE0NDksIDAsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMCwgMCwgNDMyMTYsIAorICAgIDYwODksIDc4NjgyLCAwLCAxMjA1NzgsIDQxNzAsIDEwMjksIDAsIDEyNzAzNiwgMTE5MjI0LCA0MjM3NCwgMCwgNzQ0LCAwLCAKKyAgICAwLCAwLCA2NTgyMywgMCwgMCwgMzU1MSwgMCwgMCwgNDYyMywgNTUyNjgsIDAsIDQ1OTgsIDAsIDY1MTM2LCAwLCAwLCAwLCAKKyAgICAxMDg1MSwgMCwgNjE3OSwgMCwgNjE4MCwgMCwgMTE5NTIsIDEyMDc3OCwgNzg2NDgsIDExOTcyLCA3ODY0NiwgNzg2NDcsIAorICAgIDc4NjQ0LCA3ODY0NSwgMTc3LCA3ODY0MywgNjE3NiwgMTIwNTgwLCAwLCAwLCA2MTc3LCA5MDIwLCA3ODY1MiwgNzg2NTMsIAorICAgIDYxNzgsIDEyMDI0OSwgMTIwMjQyLCAwLCA2NzY3MywgNzUxOCwgODc1NCwgMCwgMTIwMjM3LCA3NDU1MSwgNDMwODEsIDAsIAorICAgIDAsIDkxMzYsIDEyMDI0MCwgNDQwMSwgNDEyODAsIDAsIDg5NzQsIDIzMDgsIDAsIDc0MTQ5LCAwLCAyMzE4LCAwLCA2NjM2MSwgCisgICAgODE5OCwgMCwgNjQzNjAsIDEyNjAxLCA0MjUzNiwgNjUyNjYsIDEyMDgyNywgNzQzMDcsIDAsIDY5NzAsIDU0MDQsIDQzMzMyLCAKKyAgICAzNjY3LCA3OTM2LCAxMjkyNSwgMTI2OTg5LCA2Mzg1LCAwLCAwLCAxMTg5NDksIDEwODc0LCA2NTUwNSwgMCwgMCwgNDIwNTMsIAorICAgIDIwNzUsIDQyMDU3LCAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCAwLCAwLCAxMzE4MSwgMCwgMCwgMCwgMCwgCisgICAgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgMCwgMCwgNDExNDgsIDg2ODMsIAorICAgIDc1OTQsIDEyNzUxOSwgMCwgMTE5MDkwLCAxMDg2OSwgNDM0NTgsIDQxMTQ2LCAwLCAxMTQ0MSwgMCwgMzUxMiwgMTE5NjMzLCAKKyAgICAwLCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgMTE5MTA2LCA0MTU0NCwgNjUxNDYsIDAsIDAsIAorICAgIDAsIDAsIDE5OTQyLCAwLCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgMzI3MSwgNzM4MDQsIDY0NzExLCAwLCAwLCAwLCAKKyAgICAwLCAzODA0LCAxMzA3MCwgMTE1NTcsIDQyMDQ0LCAwLCAxMDk1LCAwLCAzNTk5LCAwLCAwLCAwLCA4NTE0LCAwLCAwLCAwLCAKKyAgICA3NDM0NiwgNjY2OTcsIDAsIDExNjg0LCAwLCAwLCAwLCAwLCA0MjA0MywgNDMyMzIsIDY2Njc3LCAwLCA0MjA0NiwgNzgyNDEsIAorICAgIDQwMzYsIDAsIDAsIDAsIDE5NDg2MSwgMCwgMTE5NTQsIDAsIDE0NTAsIDEyOTg2LCAxMzQwLCAwLCA2NTQ0MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgOTE3NTQyLCAwLCAwLCA2NTM5LCAwLCAwLCAwLCAxOTQ4NTYsIDAsIDEyMDQ5MiwgNDExOTAsIDM5NzMsIAorICAgIDExOTM2NSwgNDU3NSwgNDExOTMsIDc5ODIsIDQyOSwgMCwgMCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgMTE4OTY4LCA2NDE3LCAKKyAgICAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAwLCA3NzU1LCAwLCAwLCA2NDU0OCwgCisgICAgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDAsIDE2MTcsIDgwNTAsIDAsIDUwMTUsIAorICAgIDAsIDExOTE3NCwgNDI1OTAsIDE5NDg3MSwgMTc1NiwgNzgxODEsIDAsIDY1NzY4LCA2MzUyLCA0MTg5MiwgMCwgNzU1NSwgCisgICAgMTMxMDMsIDU0MDgsIDI4MTcsIDEyMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTcsIDg2ODksIDY0NzIzLCAxMDU2LCAwLCAKKyAgICA3NDE0NywgMCwgMCwgNTUyODYsIDcwNzMsIDY1ODUwLCAxMjMyNywgMCwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCAKKyAgICA4NDg0LCA4NDc0LCAwLCAwLCAwLCA4NDYxLCAwLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgNzU3MSwgCisgICAgMTMwNzMsIDAsIDAsIDY4MSwgMCwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgMCwgMTE3MDksIDAsIDc0NDQ2LCAwLCAwLCAKKyAgICAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIAorICAgIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgOTg5NSwgMTY1NSwgNzg4MTcsIAorICAgIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDAsIDAsIDAsIDAsIDEwMDM5LCAwLCAwLCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCAKKyAgICA0MTU5MSwgMTEwMzYsIDY1MjUyLCAxMjA0ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4ODcsIDAsIDcyOTUsIDExMDMxLCAKKyAgICAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIAorICAgIDAsIDg4MTAsIDc0NDk5LCA2ODYsIDAsIDAsIDQ2MTksIDExODk1NCwgNjY1NCwgNzM3NjksIDc0NDI2LCAwLCAxMjA0MCwgCisgICAgNjU2ODksIDEwMTI4LCA2NTExOCwgMCwgMTE5MTUxLCAxMTg4OTEsIDAsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCAwLCAwLCAKKyAgICA2NTQ1NSwgMCwgMCwgMCwgMTE5MTI5LCAwLCAxMjg4NiwgMCwgNjY2MjQsIDAsIDQzNTU3LCAxMDMwMCwgMTAxNjEsIAorICAgIDEwMzk2LCA3NDEzNSwgMCwgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCA0MTQ3NSwgMCwgCisgICAgMCwgMCwgMTE0NzksIDAsIDAsIDYzNTAsIDEyODY0LCAwLCA3ODExNCwgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCAKKyAgICA1NTIzMCwgMCwgNDA1MiwgMCwgNzYyNiwgMCwgMCwgMTA0NSwgMCwgNTYzMSwgNDExMTMsIDAsIDAsIDQzNzA3LCA3NDEyNywgCisgICAgMCwgMCwgODQ4NiwgMCwgNzM3NTgsIDIzMzUsIDQzNjIsIDAsIDAsIDY5MjIxLCAxMDI1LCAwLCA0MjYyNSwgMCwgNzgwODQsIAorICAgIDQxNDQzLCAwLCAwLCAwLCAxNzc0LCAxNTIzLCAwLCAwLCA0MTQ0NSwgNzgyMzYsIDAsIDg1NjcsIDQxNDQyLCAzOTg4LCAwLCAKKyAgICA3ODIzNywgMTE4OTEwLCAwLCA2NTI3NCwgODU2NCwgMCwgNzgyMzgsIDEyNzUxNSwgMCwgMCwgNDM0NDYsIDAsIDY2NTEzLCAKKyAgICA2MjU2LCAwLCA1NzksIDU1MjE4LCAxMDIwNiwgMCwgNjM3NSwgMjY3MywgMCwgMTE4MTQsIDAsIDQ0ODgsIDAsIDAsIAorICAgIDY4NDUxLCAxMDQ0NCwgMTE4ODQ2LCAwLCAxMTc5OSwgNzQ0MDcsIDY4NDY2LCA0NDg3LCAwLCA0MjgzMiwgMTAzMiwgCisgICAgMTIwMjY3LCA0MzQ1MCwgNzgyNTcsIDcyMDMsIDAsIDYxNCwgNzgxOTEsIDAsIDEyMDYxNSwgMCwgNzgyNjIsIDAsIDAsIDAsIAogICAgIDQzMTIxLCAwLCAwLCAwLCAxMDUwLCA3NTQ5LCAwLCAwLCA5MzE0LCAwLCAwLCAxMjA2MTYsIDAsIDEwMDU3LCAwLCAwLCAwLCAKLSAgICA2NjUwNCwgMCwgMCwgMjMwNywgMCwgNjQzMzMsIDAsIDAsIDczODczLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDM2MCwgMCwgMCwgCi0gICAgMCwgNDQwLCAwLCAxMzA4NSwgOTIzMywgNzQyMTYsIDAsIDAsIDAsIDAsIDY2NDQ3LCA4MDQ2LCA2NDk2MywgNjU3NzcsIAotICAgIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCAwLCAxMDQ4NywgMCwgMTI1MjcsIDAsIDc5NzAsIAotICAgIDAsIDAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgMCwgMCwgNTIzNywgMCwgMCwgMTAxMDMsIDUyNDcsIAotICAgIDQ3NjksIDAsIDExODk3NywgMCwgNTc2NCwgMCwgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDAsIDQxMTAzLCAwLCAKLSAgICA2NDU2NSwgNDc3MywgMCwgMCwgMCwgNDc3MCwgMCwgOTE3NTY3LCA4NzMxLCA2NTM3OCwgMCwgMTIwNjE5LCA5MTIyLCAwLCAKLSAgICAwLCA0Nzc0LCAzMDE5LCA5OTk3LCAxMjgzNCwgMCwgOTQ1NiwgMTAyMTUsIDAsIDAsIDAsIDAsIDAsIDc0Nzc2LCA0MjgxLCAKLSAgICA0NzY4LCAwLCA0MTUzNSwgNDA5OSwgOTAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI4MTQsIDg4MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTAxMTYsIDk4NzcsIDAsIDAsIDAsIDcwOTUsIDAsIDAsIDEyMDYzMiwgMCwgMCwgODI0MywgMjQyNywgCi0gICAgMCwgNzA5MywgMCwgMTE1ODUsIDAsIDAsIDAsIDEyMjIzLCAwLCAwLCAxNDM0LCAwLCA1NjM3LCAxMTU3MywgMCwgMCwgMCwgCi0gICAgMTk5NTEsIDAsIDAsIDAsIDAsIDY0NDMyLCAwLCAwLCAxMTg4ODgsIDExNTYsIDg3NDAsIDAsIDM3ODIsIDY0MzMxLCAwLCAKLSAgICA0MTM3MCwgMTAxNCwgODI2MSwgMCwgMCwgMTA4MzUsIDAsIDY1NTM2LCAwLCAxMjA0NjMsIDAsIDc3MDIsIDExODgyNCwgMCwgCi0gICAgNDMwMTAsIDY1Nzc5LCA2NTc4MywgMTE1MCwgMTA1NDcsIDU3MDAsIDAsIDEyMDYwMywgNjUzODMsIDIzMzksIDQyNTk0LCAKLSAgICA1Njk3LCAxMTg3ODgsIDAsIDAsIDAsIDQyMjU3LCA1Njk2LCAxMjA0NzAsIDEyMDQ2NSwgMzg2MiwgOTY0MywgMCwgMCwgCi0gICAgNzYzNCwgMCwgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgNDE0OTAsIDAsIDE0MjYsIDEyMDQ3NCwgMCwgMCwgMCwgNzQzNDUsIAotICAgIDg1NzEsIDE5NDk5MSwgMCwgMCwgMCwgMCwgNDMxODIsIDEyMTg0LCAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIAotICAgIDQzMTk0LCA2NDcxMiwgMCwgMCwgOTkwLCA1NjQ3LCAwLCAwLCAwLCA0MTExNCwgMTE0NzcsIDU2NDYsIDAsIDExMDE4LCAwLCAKLSAgICAzOTQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDIwLCA3Mzc2MywgMCwgMCwgNTY0OCwgNjQ3NDgsIDAsIDAsIDEwMjA1LCAKLSAgICAzNTQ1LCAwLCA2OTg0LCAwLCA3NDA1MSwgMCwgMTE4ODY4LCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIDAsIAotICAgIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAwLCAwLCAxMTg4MzYsIDAsIDAsIDExNDAsIDAsIDAsIDEwMTU5LCAwLCAwLCA4MTI4LCAKLSAgICAwLCAwLCAwLCAxODE1LCAxOTkxMCwgODkwLCAwLCAzMjY3LCAwLCAwLCAxMDEyMywgMCwgNDQxMCwgMTA0MSwgMTA1NzYsIAotICAgIDgxMDIsIDAsIDU4MCwgNzQyMzIsIDAsIDAsIDAsIDAsIDAsIDE5OTM4LCA2NTkwNiwgMCwgMCwgMCwgMzI5OCwgNTM3NSwgCi0gICAgMTAxNDIsIDAsIDgyMTUsIDAsIDYxMzQsIDQxMjQ2LCA2NDQwMiwgMCwgMCwgMCwgMCwgMCwgNDEzODIsIDAsIDAsIDUxNzMsIAotICAgIDY1MzQ4LCA1MjcsIDAsIDAsIDAsIDAsIDAsIDExOTE1LCAwLCAwLCAxMDA3MiwgMCwgNjY0MzQsIDIzMjksIDQyMjUwLCAwLCAKLSAgICAwLCAwLCAxMjI0NSwgMTE5MjM3LCAwLCAwLCAwLCAwLCAwLCA3NDMyOCwgMCwgNzQ3NjksIDAsIDAsIDkwNjksIDYxNDQsIDAsIAotICAgIDAsIDczODIyLCAwLCAwLCA2NDkxNywgNDE1MjEsIDExODkzNCwgNDk0LCAxMzI1MCwgMCwgNjUwOTgsIDAsIDk1NiwgMCwgCi0gICAgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgMCwgMCwgMCwgMCwgNjY0NDksIDEzMjYzLCAwLCAwLCAxMzE3MSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTA0NCwgNDEyNzYsIDAsIDAsIDAsIDQyMDY4LCAxMTc5NSwgMCwgMCwgMCwgMCwgNDI0NTAsIDM5MDcsIDAsIDY0NTI2LCAKLSAgICAwLCAwLCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgMCwgMCwgMCwgMCwgMTA1NywgNTY2LCAKLSAgICAwLCAwLCAzMDE2LCA0MjI3NCwgMCwgNjY0OTAsIDEyOTIxLCA2NjU3MSwgMCwgMCwgMzAwNiwgNDYyMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ2NTksIDAsIDAsIDAsIDQzMzMzLCA2ODEyOSwgODYyNiwgMCwgMCwgOTA5MCwgNjUzNzcsIDQxNTk2LCAwLCAwLCAxNjk4LCAKLSAgICAwLCA2NDQ3NywgMCwgMCwgMTA1MywgMCwgMCwgMCwgMCwgMTA1MiwgMTA1MSwgNDU5LCAxMDYwLCA3NDM0OSwgNjY0NzksIDAsIAotICAgIDAsIDAsIDAsIDQyNDkwLCA2ODksIDY1MDgsIDQxNjMsIDQyMjk4LCA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgMCwgMTIxMzAsIAotICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOTI2LCAwLCAwLCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMCwgNTgzMCwgMCwgNjQ1OTQsIDAsIDAsIDAsIDAsIDg2OTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOTE4NywgMTE0MzksIDAsIDAsIDAsIDAsIDQyMzEzLCAKLSAgICA1NTc5LCAwLCAwLCAwLCAwLCAwLCA1NTc4LCA0MTc3NCwgMCwgNDIwMjMsIDYyMzQsIDU2NjksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU1ODMsIDAsIDAsIDQyNDI2LCA1NTgwLCA0MjI3NiwgMjkyMywgODkyLCA1NTgyLCA0MjQ2NSwgNDEzMzAsIDAsIDU3OTUsIAotICAgIDY1NTEyLCAwLCA2NTcwMiwgMCwgMTIwODAxLCA2NTI1MSwgMCwgNjU3MTAsIDAsIDAsIDAsIDAsIDUzNzAsIDAsIDAsIAotICAgIDE2MzgsIDEwOTY2LCAxMDE4OCwgNjU4NzgsIDExODg0OCwgMCwgMCwgMCwgMCwgODE3MiwgNDIwMTcsIDAsIDEwODQ0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyODYsIDAsIDEwNjIsIDAsIDAsIDAsIDAsIDAsIDEwNzAsIDY0OTAwLCAwLCA2MDk1LCA0MTg2NSwgCi0gICAgMCwgMzAxNSwgMCwgOTE3NzYzLCA1MjExLCAwLCA2NDAwLCAwLCAxOTQ5ODMsIDAsIDgxODksIDExMjc2LCAwLCAwLCAzNzIsIAotICAgIDAsIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAwLCAwLCA0MjEwMSwgMjc2LCAwLCAwLCAzMywgNzQyMjYsIDAsIDkwMDcsIAotICAgIDExODc5NiwgNDE1ODgsIDY2MDMzLCA0MjcsIDEwNzYzLCAwLCAwLCAwLCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgMCwgCi0gICAgMjMyOCwgMCwgMTA3MSwgMCwgMCwgNzQ4NDgsIDAsIDAsIDAsIDEwNDcsIDAsIDAsIDY0NzkwLCAwLCAwLCAxMDY1MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTE5MTgxLCA1NzExLCA0MTYzMywgMTIwOTgsIDY1NTcxLCA5MTY2LCAwLCA1NzEwLCAwLCAwLCAKLSAgICA2NTIxMywgMTMyMTYsIDAsIDAsIDAsIDAsIDY0NjExLCA0MTYyMywgMCwgNTcxNSwgMCwgMCwgMCwgNTcxMiwgMjc2MSwgCi0gICAgNDE2MjAsIDY4MTI0LCAzMDc0LCA1NzIyLCAwLCA4NjQzLCA3Mzc2OCwgMCwgMTE4OTA2LCAyNzU3LCAxMTA2NywgOTcxOCwgCi0gICAgNzQ0OTgsIDg5MTAsIDEwNjg5LCA2NDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTg5MTEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyMDAxMCwgMCwgODcwMSwgNjgxMzAsIDExOTYxNiwgMTIwNTIyLCAwLCA0MjQ3NywgMCwgMTIxMjMsIDQ0OTUsIAotICAgIDQzNTY5LCAwLCAwLCAwLCA2NDk0NiwgMTA5OTIsIDAsIDAsIDAsIDAsIDkzMTgsIDEyMDY2MSwgMTMyNDksIDY1Njc5LCAKLSAgICA3MzgwOCwgMCwgNjU0NTcsIDQyMjQ5LCA3NjM5LCAwLCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgCi0gICAgMTIwMDA1LCAwLCAwLCA1MDg0LCAwLCAwLCAxMTkxNzMsIDAsIDczMywgMCwgMCwgMCwgMCwgNDE2NzcsIDAsIDkyMTgsIAotICAgIDE3MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzAxOCwgMCwgNTE1NSwgMCwgNTM1OCwgMCwgMCwgOTE3NzY3LCAKLSAgICA2NDQyNCwgMCwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCAwLCAwLCAwLCAwLCA2NTk0MywgMCwgMzM3MSwgMTA5ODgsIDAsIAotICAgIDg3NzEsIDE0NzksIDAsIDAsIDExMDksIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIAotICAgIDAsIDc0ODQyLCAwLCAwLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCAwLCAwLCAyNTQ0LCA2NTA3NCwgMCwgCi0gICAgMCwgMCwgMCwgMzUxLCAxMTkxNDksIDAsIDAsIDAsIDAsIDc0MjY4LCAwLCAwLCAwLCA0MjM3NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTAxMywgNTU4OCwgMCwgMCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAyNTQ5LCA3NDQ2OSwgMCwgMCwgNTU4NCwgCi0gICAgODM1OCwgMCwgNzQ0MTEsIDAsIDEwOTE5LCAwLCA3OTgwLCAwLCAwLCAwLCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIAotICAgIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIDAsIDAsIDAsIDQyNTczLCA2Nzg1NiwgMCwgMCwgMCwgMCwgMCwgODEzNSwgCi0gICAgNjQ1MCwgMTAwNTUsIDAsIDAsIDAsIDAsIDU2NTcsIDAsIDk2MjYsIDAsIDAsIDEwMTc5LCA1NjU0LCAxMjkzOSwgMCwgCi0gICAgMTIwNzk5LCAwLCAwLCA1NjUyLCAxMDk0NSwgMCwgMCwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgMCwgMCwgNTY1OSwgMCwgCi0gICAgMCwgNjY3MjksIDU2NTUsIDAsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIDAsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIAotICAgIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgCi0gICAgMTAyNDQsIDEwMjQ4LCAxMDI1NiwgMCwgNjQ4NzAsIDAsIDM0NjcsIDAsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIAotICAgIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCAwLCA2NTkyNywgMCwgMCwgMTIwMTU1LCAwLCA2NDY1NiwgMCwgMCwgMTk0ODM3LCAwLCAKLSAgICA1NjY2LCA2NTIyNywgNTMxOCwgMCwgMCwgOTA5MSwgMTA3OTgsIDAsIDAsIDEwMTg2LCAwLCA3NzMyLCAwLCA2NDU1NiwgMCwgCi0gICAgMCwgNTY2OCwgNzQ0NDUsIDAsIDAsIDU2NzAsIDAsIDAsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAxOTk1MiwgMTIwODA3LCAKLSAgICAwLCAxMjc0OSwgMCwgMCwgMCwgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgMTQ5NywgMCwgMCwgMCwgMCwgCi0gICAgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIDY2MzUzLCAwLCAwLCA2Nzg5NiwgNDMxOTIsIDAsIDAsIDU1MywgMTIwNjUzLCAwLCAwLCAKLSAgICA1ODI5LCAwLCA0NTg3LCAwLCA2NTkxMiwgMCwgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCAwLCAwLCAwLCAKLSAgICA2NDkwNSwgMCwgOTUxMiwgMCwgMTI3NDIsIDY0NDMsIDAsIDAsIDkxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTQ4LCAKLSAgICAwLCAwLCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDAsIDAsIDExODg4MCwgNzQyNjYsIDY1MTgyLCAKLSAgICAwLCAwLCA1MjIxLCAwLCAzMjgsIDAsIDAsIDAsIDU2MzYsIDAsIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIAotICAgIDQzMjIzLCAwLCA1NjM1LCAzMzczLCAyOTg2LCAwLCA3NDIyMywgMzQzNywgMCwgNjIwMywgNDI0NywgMCwgMTE5MjAsIAotICAgIDgyNzQsIDAsIDAsIDE2NTcsIDExOTkyMSwgMCwgMCwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDE2MzcsIDAsIDAsIDAsIDQxNjI1LCAwLCAwLCAxMjA3MTMsIDExNzA1LCA1NjQyLCAwLCAwLCAwLCA0MzU2LCAxMTcxMCwgCi0gICAgMCwgMTIwNTEsIDAsIDAsIDU2NDEsIDgyNTksIDAsIDEwNTgsIDAsIDY3NjMwLCAwLCAwLCAxMTQ0LCAwLCAwLCAwLCAwLCAKLSAgICA3Mzg5MCwgMTE4OTcyLCAwLCA3MzczNCwgMCwgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCAwLCAwLCA1NjA4LCAKLSAgICA2NTg5MCwgMCwgMCwgNjc2MjEsIDExOTkzNCwgOTAwMCwgMCwgMCwgMCwgMTg2NSwgMCwgNTYxMywgNzQyNjcsIDAsIDAsIAotICAgIDU2MTAsIDAsIDAsIDY1ODI2LCA1NjEyLCAwLCAxMDc4NywgOTE3NTUxLCAyOTk3LCAwLCA1NjA5LCAwLCA2NTMxOSwgCi0gICAgMTE5OTMzLCAxMjMxNiwgNjUzNzYsIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCAwLCAxMzEzMCwgNjU4NzQsIDAsIAotICAgIDU4MDcsIDAsIDEwMDMwLCA1MzA2LCAxMjkzNiwgMCwgMCwgMTE3MDQsIDAsIDAsIDEwMjExLCAwLCAwLCAwLCAwLCAxMTcwNiwgCi0gICAgOTcxMCwgMCwgMCwgMCwgNDEzLCA2NTYyMywgNzQyMzcsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgCi0gICAgMTIxNzEsIDExOTI0MCwgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMCwgMCwgMTIyNDEsIDAsIDAsIDEzMDgsIDAsIAotICAgIDI1MzQsIDgxMCwgMCwgMCwgMCwgMCwgMCwgMTkxNywgMzAwMCwgMCwgMCwgMTIwNzM5LCAyMzY0LCAwLCA3NDQ3MCwgCi0gICAgNjY2MTgsIDY1NjgwLCAwLCAxMDAyNywgMCwgMCwgMTIzMzcsIDEyMDcyMiwgMCwgMCwgMjk4MCwgNzU1LCAwLCA5MzEsIAotICAgIDEzMTI0LCA2ODE4MiwgMCwgMjc0OCwgMCwgMCwgNjUwNDEsIDAsIDczOTk4LCA4NzMwLCAwLCAwLCAxMTkwMDksIDcyNzQsIAotICAgIDExOTI1MCwgMCwgNzI3NSwgMCwgOTM1LCAwLCA2NTg0MCwgMzc3LCA0MjMyNSwgMTE2NDksIDAsIDY1MjUzLCA2NDMwMSwgMCwgCi0gICAgMCwgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAKLSAgICAxMTkyMTcsIDcyNDgsIDAsIDAsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzMTQyLCAwLCA0MjQxNSwgNjY1NzUsIDQ1NDIsIDc0MDM3LCA0MzU0NywgMCwgMCwgMCwgMjk5MSwgCi0gICAgNDk0NiwgNDI0NTQsIDAsIDc5NDksIDAsIDAsIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCAwLCAwLCAKLSAgICAwLCA2NDc4LCA5ODk4LCAwLCA2NTIzNywgNjI0MSwgMCwgNDg3NywgMCwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgNDQwOSwgCi0gICAgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDEyMDUyOCwgNjIzNywgNTQ2MSwgMCwgOTE3NiwgMCwgMCwgNjUyMzEsIDY1ODg0LCAKLSAgICAxMjY3OCwgMCwgMCwgMTEzNzgsIDAsIDQyNzg1LCAyNDA4LCAzMjUxLCAwLCAwLCA1Njg1LCAwLCAyNDYxLCAxMTA1MiwgCi0gICAgNzA5MSwgNTM0MiwgODMxNywgMCwgNjgxNjMsIDUzNDAsIDAsIDAsIDAsIDczOTI4LCAwLCAwLCAwLCAwLCAwLCA2NTQ4MiwgCi0gICAgMCwgOTE0MiwgMCwgMCwgMCwgMTA5MzgsIDAsIDExODc5MCwgMTE4MiwgMjU0MiwgNDgyNiwgMCwgMCwgMCwgNTI5LCA4NTgwLCAKLSAgICAwLCAwLCAxMDU4NiwgMTA3OTAsIDExOTg3LCA2NjAyMywgNDE1OTMsIDQxMjA3LCAwLCAwLCA0MTU5NCwgMjI1LCA0MjgyOCwgCi0gICAgMCwgMCwgMCwgNjQ3MDUsIDc0Mzc5LCAxMDcyMSwgMCwgMzQzOCwgNDIwOTcsIDAsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKLSAgICAwLCAwLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMCwgMCwgODQyMCwgNjQ5MTgsIDAsIDQxODcxLCA0MTMzOCwgMzczNCwgCi0gICAgNzczNCwgMCwgODc1MCwgNjY2MDUsIDY2MDExLCAwLCA0MDk2NSwgMCwgMCwgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCAKLSAgICA3Mjg3LCA0MjE2MiwgMCwgMCwgMCwgMTE5NDgsIDAsIDEyMzU5LCA2NjY3NCwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCAwLCAKLSAgICA3Mjg2LCAwLCAwLCAxMDAzMSwgMCwgOTg3MCwgMCwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIAotICAgIDAsIDAsIDAsIDQxNTgzLCAwLCA2NTc5OSwgMCwgMCwgMCwgMCwgMCwgNjYxOTksIDAsIDM2MDksIDAsIDAsIDgzMiwgCi0gICAgMTIwNjkzLCAxMjA3NzAsIDAsIDY2MDA3LCAwLCA2NTcwMywgMCwgMCwgMCwgNTE4MCwgMCwgNDEzOTUsIDQxNTMwLCAKLSAgICAxMTY5MSwgNjQ3NzMsIDAsIDc0MDAyLCAwLCAwLCAwLCAxMTAzNiwgMjQzLCAxMzIwMCwgMCwgNjAyNCwgMCwgNzQzOTgsIAotICAgIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIDAsIDAsIDAsIDQyODUsIDY2MTk1LCAwLCA0MjMwLCAwLCAxMzMwNywgMCwgMCwgCi0gICAgNzU2MywgNDIzNzYsIDAsIDAsIDEyMDUxMiwgMCwgMCwgMjE0LCAwLCAwLCAwLCA2NTg5MywgMTIyMDgsIDEyMDQ4OCwgMCwgCi0gICAgNjYzMTEsIDY1NTg5LCAwLCAyNjAzLCAwLCAwLCAwLCAwLCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIDAsIAotICAgIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAxMjQ1MSwgCi0gICAgMCwgMCwgMCwgMTI0NTMsIDAsIDAsIDc0MjQxLCAwLCA4ODkwLCAxMjQ1NywgMCwgMCwgMCwgMCwgMTE4ODE5LCAwLCAwLCAwLCAKLSAgICA2NjYzNywgNzk5NSwgODc1OSwgMCwgMCwgMTI0NDksIDAsIDAsIDAsIDg3NTIsIDMxOTcsIDQ3MjAsIDEwMTY1LCAwLCAKLSAgICAxMTkyNDksIDAsIDExNTk1LCA2NDg5MywgMCwgMTIwMTgwLCAwLCAwLCA0OTkzLCAwLCA2MTY4LCAxMDkzNCwgMTk0NiwgCi0gICAgNzQxLCAwLCA1NDk0LCA0NjM5LCAwLCAxOTkwLCA2NjU4OSwgNDQ5OCwgMCwgMCwgMCwgMCwgMCwgMjk2MCwgNzM3NzksIDAsIAotICAgIDg5NjksIDAsIDAsIDAsIDAsIDI5NTAsIDAsIDYyMTAsIDAsIDM3MCwgMCwgMCwgMCwgNDk1MywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNjU2ODgsIDAsIDUwNjMsIDM1MTcsIDI5NjQsIDAsIDAsIDY1MDk0LCA3NDc5MSwgMTA1NjYsIDEwMTQ0LCA2NjMzMywgCi0gICAgODI1MiwgNzI5LCA2NjAxNiwgMCwgMCwgMCwgNjQ5MjMsIDAsIDY1MjA4LCA5MDMyLCAwLCAwLCAwLCA0MTIxNSwgMCwgCi0gICAgNjU4ODMsIDAsIDAsIDEyMDYwMiwgMzc2MSwgMCwgMCwgMCwgMCwgMTI5MTIsIDExOTAxMiwgMzg1MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOTA4LCAwLCA4NjExLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgNDE1ODYsIDEwNTI3LCAwLCAKLSAgICA5MTc4NDgsIDM4NDgsIDAsIDAsIDAsIDY1MjQxLCA1MzM2LCAwLCAwLCA2NjMsIDAsIDEwNzgwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNDcsIDAsIDAsIDAsIDY0Njc1LCA0MTU4MiwgMTE5MTI2LCAwLCA2NTU3OSwgMTI5ODAsIDAsIDEyMTQzLCA3MzczMywgCi0gICAgMCwgMCwgMCwgNDE4MDQsIDAsIDAsIDAsIDAsIDAsIDQxNTg0LCAxMDY4MSwgMCwgMCwgNzM5MzgsIDAsIDAsIDQ4MDAsIAotICAgIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDAsIDk1MTgsIDY2MDksIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCAKLSAgICA0MTczMCwgMCwgMCwgMCwgMCwgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDAsIDEzMTEwLCA0MTcyNiwgCi0gICAgMCwgMCwgMTAwMCwgMCwgMCwgNDExNDAsIDEyMDksIDAsIDAsIDAsIDEwNzMsIDAsIDAsIDQxMTM4LCAwLCAwLCAwLCAKLSAgICAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgMTI3MDYzLCAxMjcwNjQsIDEyMjM3LCAxMjcwNjYsIDY2MzE0LCAKLSAgICA2NTg3LCA5MjkwLCAwLCAwLCA5MjMxLCAwLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgCi0gICAgMCwgMCwgMTE4ODQ2LCAwLCAwLCAwLCAxMTk5NzMsIDAsIDAsIDAsIDEyMjkwLCAwLCAwLCAwLCA0MjE0MiwgMTAxNTEsIAotICAgIDgyMDUsIDAsIDUxMzEsIDAsIDk2MjcsIDAsIDAsIDAsIDAsIDE5NDQsIDEyNDgsIDEwMTQ4LCAwLCAxMTk5OTAsIDExOTk5MSwgCi0gICAgMTI3MDEsIDExOTk5MywgMTEzMDgsIDExOTk5NSwgMCwgMTE5OTk3LCAxMTk5OTgsIDY1MzA1LCA3NDI2MywgNDAzMSwgCi0gICAgNDI3OTQsIDEyMDAwMywgNzA3NSwgODE1NCwgMTIwMDA2LCAxMjAwMDcsIDQxODE3LCA3MzkzNCwgNDIyNzUsIDEyMDAxMSwgCi0gICAgMTIwMDEyLCAxMjAwMTMsIDEyMDAxNCwgMTIwMDE1LCA2MDQxLCAwLCA0MTg5OSwgMCwgODAwMiwgMCwgNDM2NCwgMCwgMCwgCi0gICAgNjQzMzIsIDAsIDc4MTMsIDkwNjQsIDExOTk4NiwgMTAxMjQsIDc1MjYsIDg2MDEsIDcyODEsIDAsIDcyNzksIDEyMDQxLCAKLSAgICAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDAsIDEzMDEyLCA0NTcxLCAwLCAwLCAwLCAxMjA3OCwgMjk3MCwgMCwgCi0gICAgMTA5MzMsIDAsIDAsIDAsIDAsIDAsIDQxNTk5LCAwLCAwLCAwLCAxMjk1MCwgMCwgMzQ4NiwgMCwgMCwgNDIzOSwgMCwgMCwgCi0gICAgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCA4NDYwLCAxMjcwNTMsIDg0NzYsIDAsIDAsIDAsIDAsIDY1NjczLCAxMDE5LCAwLCAKLSAgICA0MTQ4LCAwLCAxMjI4OSwgMCwgNDMxNiwgMCwgMTMxMTksIDAsIDU0MTIsIDY2MjQzLCAxMDc0NCwgMCwgNzM4NjQsIDAsIAotICAgIDQxNzM0LCA4MjA2LCA3NDA4MSwgOTE2MywgMzI4NiwgOTA3MiwgNTg2NywgMTMzMDIsIDc2MjIsIDAsIDQxNzM2LCAwLCAKLSAgICA0MTczMSwgMCwgOTQ4MywgNTQxNiwgMCwgMTE5NTkzLCAxMDgxNywgMCwgNDE1MzksIDAsIDAsIDczOTYzLCA0MTg1NSwgCi0gICAgNDE4NjcsIDY1NTY0LCAxMTI3NywgNjU4OTIsIDExNTM2LCAxMDYyMCwgMCwgMTIyMTAsIDAsIDczOTMyLCA1NDk4LCAKLSAgICA3Mzk0MiwgNDE1MzYsIDAsIDAsIDAsIDM0NTksIDg5OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDY2Mzc3LCAwLCAwLCAwLCAwLCAKLSAgICAzMTYxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDkwMTYsIDAsIDYzOTAzLCA2MzkwMiwgNjM5MDEsIDAsIDM5NzEsIDAsIAotICAgIDczOTcyLCAyOTUyLCAwLCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDAsIDY2NywgMTIzMzIsIDYzODg3LCAKLSAgICA2MDg2LCA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAotICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDAsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCAKLSAgICA2Mzg3NSwgNjM4NzQsIDExNDYwLCA3NDMyLCAxOTEzLCA0MTkxMywgNjM4NTIsIDAsIDAsIDQyMzQ4LCAwLCA3NDg0MSwgCi0gICAgNDQ2LCA0MTkxMSwgMCwgNjM4NTEsIDYzODUwLCA0MTkxMCwgMCwgNjM4NDYsIDI5NzIsIDEyOTMyLCA3MjYyLCAwLCAKLSAgICA2Mzg0OSwgNjM4NDgsIDYzODQ3LCAwLCAwLCA4MzAyLCA3MjU5LCA2Mzg0MiwgNDE3OCwgMTA3NDYsIDcyNTAsIDEzMjE0LCAKLSAgICAxMDA0MSwgODEwNSwgNjM4OTIsIDAsIDExODk4MywgMTEwNSwgNDE4MCwgMCwgMTIwOTQsIDk0OTcsIDAsIDYzODkxLCAKLSAgICA2Mzg5MCwgNjM4ODksIDYzODg4LCA1NTM4LCA5OTg3LCAwLCAxMTg5MzIsIDE2NzgsIDEzMjc0LCA1NTIsIDAsIDAsIAotICAgIDEwNzg1LCAwLCAxMTkxNzAsIDQ1NTcsIDAsIDkxNTksIDEwMTcxLCAxMzEyNSwgNjM4NjAsIDU1NDAsIDYzODU4LCA2Mzg2NSwgCi0gICAgMjgxLCAxMzI0MiwgNjM4NjIsIDc0MTU0LCAwLCA1NTM2LCA2NTU2OCwgNjM4NTcsIDEzODgsIDc0MTY5LCAwLCAxMDc3LCAwLCAKLSAgICA2NTA5OSwgMTE1MzEsIDAsIDAsIDAsIDAsIDAsIDQyNzczLCAwLCAwLCAwLCAxMTkyMjAsIDAsIDM2NjMsIDAsIDExMTIsIAotICAgIDExOTEyMiwgODY4NiwgMCwgNTMzNCwgNjUwODEsIDAsIDc0Nzc4LCAwLCAxMTA3NywgMCwgNjUwOSwgMCwgNTMyNywgMCwgCi0gICAgMTk5MDcsIDYzODY5LCAzNDc4LCA3NTgzLCA3Njc5LCAyOTAzLCAwLCAzMDAxLCAxMTU4LCA4NzQ1LCAwLCA3Mzc0OCwgCi0gICAgNjM4NjYsIDAsIDE5MTUsIDQ4NDYsIDAsIDY2MzcxLCAxMTg5ODQsIDQyMTA1LCAyOTkwLCAxMjAxMjgsIDgwNSwgMTIwMTMwLCAKLSAgICAxMjAxMjUsIDEyMDcwLCA4NzYwLCAxMTE3LCAxMTg5ODcsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgNjM4MzUsIAotICAgIDYzODM0LCAwLCAwLCAxMjIyNSwgNjM4MzgsIDYzODM3LCAwLCAwLCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAotICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCAwLCA1MjI3LCA5MDQ3LCA2MzgyMiwgMCwgNjA5MSwgMCwgMTA2OTEsIDU2MCwgCi0gICAgNTY0MywgODIyNiwgMTE5NTc4LCA2MzgxMiwgNjM4MTEsIDYzODEwLCA2MzgwOSwgNTU0MiwgNjM4MTUsIDYzODE0LCAKLSAgICA2MzgxMywgNjA0NywgMTU5NywgMTIwMTQzLCA3ODAsIDIwNiwgMCwgNDkzNiwgNjUxNDcsIDgxNjgsIDYzOTMwLCAwLCAKLSAgICAxMDkzLCA5ODgyLCA2MzkzNCwgNjM5MzMsIDYzOTMyLCA5MTc1NTQsIDYzOTI5LCAzNTQ2LCAxNjA1LCAwLCA5ODA2LCAKLSAgICA2NTU2NiwgMCwgODQwMCwgMTEzNDMsIDYzOTIwLCAwLCA2MzkyNiwgMjk4NCwgNTk2OCwgOTI4NywgMCwgNDYxOCwgMCwgMCwgCi0gICAgMTMxNjksIDUyOTAsIDUyODMsIDE2OTUsIDEwNzQzLCAxMDg4LCA2MzgyNSwgNzI2OCwgMTA4NCwgMTA4NSwgNjM4MjksIAotICAgIDEwODMsIDEwMTMxLCA3MjgzLCAwLCA2Mzk3MCwgMCwgMTA5MiwgNDc1NCwgNzI3MywgNTI1MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE4MDksIDAsIDAsIDAsIDI5NjUsIDcyNTgsIDg4MDgsIDAsIDEwODksIDQxODcsIDYzOTM3LCA0MjExOSwgNDIxMjAsIDAsIAotICAgIDk0MCwgNTc4NywgMTAwOTksIDYzOTM4LCAwLCA3NDQ5NCwgMTI0NjMsIDI5OTQsIDAsIDAsIDAsIDk2NjQsIDAsIDAsIDAsIAotICAgIDAsIDc0MzQzLCAwLCAwLCA2NjAsIDEwMTI3LCA2NjYsIDkwMjIsIDU1MzIsIDAsIDU1MzMsIDAsIDAsIDYxMTgsIDIyMiwgCi0gICAgOTc5LCAzODg0LCAwLCA3NDE1MSwgMTIwNDQ1LCA2NTAyLCAwLCAxMjcxMTgsIDAsIDYzOTUxLCAxMjQ2NSwgMCwgMCwgMCwgCi0gICAgNjM5NDYsIDE3MDcsIDYzOTI0LCAxMjQ2MSwgNjM5NTAsIDYzODk3LCA2Mzk0OCwgNjM5NDcsIDYzOTQ1LCA2MDM4LCAKLSAgICA2Mzk0MywgNjM5NDIsIDY0Njg1LCA2Mzg5NSwgNjU4MzgsIDAsIDc3NzYsIDAsIDAsIDAsIDEyMDQ0NCwgMCwgODAxLCAKLSAgICA0MzE2NSwgMTY5MCwgNjM5MTksIDYzOTE4LCA2MzkxNywgMTMyNzcsIDYzODkzLCAwLCAxMjA2MzgsIDk5MDYsIDU0ODYsIAotICAgIDIzMzQsIDAsIDYzOTE2LCA1NDgzLCA2MzkxNCwgMTIwNjEwLCA2MzkxMSwgNTQ4NCwgNjM5MDksIDYzOTA4LCAyNTM5LCAwLCAKLSAgICA2MzkxMywgNTQ4NSwgMCwgMTk1MDYwLCA5MDYxLCA1NTM0LCAxMDY3MiwgNDUwMiwgMCwgMjUzLCAwLCAwLCAwLCA0Mjg1NCwgCi0gICAgMCwgMCwgMTE1MzAsIDAsIDAsIDAsIDAsIDAsIDEwNDc0LCAwLCAxMzI1NywgNDIzNTQsIDAsIDAsIDAsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgMCwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgMCwgMTk1MDYzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDY2NjA3LCAwLCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgCi0gICAgMTA3NiwgNDEzMDUsIDE0MzYsIDAsIDAsIDAsIDYzOTgyLCAxMDIyMSwgMTI4MDcsIDYzOTA3LCA2MzkwNiwgMTU5OCwgCi0gICAgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAxMzA3LCAwLCAxMDUxNSwgNDE1ODksIDAsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIAotICAgIDAsIDEyMDYwNiwgMTE5MzY1LCA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCAwLCA3MzkzNywgCi0gICAgMTA1MTcsIDAsIDAsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMCwgMjcxMCwgMCwgMCwgNDE3MjQsIDAsIAotICAgIDQzMDczLCA0MTY5MCwgMTI0NzksIDAsIDAsIDAsIDAsIDExOTY1OSwgMTYyOCwgMCwgMCwgMCwgNjUyNjIsIDYzODU0LCAKLSAgICAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCAxMjA2ODMsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAxMzAwNCwgMCwgNDQ1NywgMCwgCi0gICAgMCwgMCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCAxMjA2MTcsIDEyNjMzLCAwLCAwLCAKLSAgICA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDAsIDAsIDEyMDY0NywgMCwgNTAsIDAsIDk4NzEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDY2NDY4LCAwLCAxMzI1OSwgNDQ0OCwgMCwgMCwgMCwgMCwgNjc4NTMsIDAsIDEwNjQwLCAwLCAxMTUxLCAKLSAgICAwLCAwLCAwLCAwLCAxOTUwNTAsIDAsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIDExODg3MCwgODgxMiwgMCwgCi0gICAgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDEwODM5LCA4MDg3LCAwLCAwLCA5ODk0LCAwLCAwLCAwLCAKLSAgICA0NjM2LCAwLCAxMTg5ODUsIDgwNTMsIDAsIDAsIDAsIDAsIDEyMDQ5NSwgMCwgMCwgMTIyNzcsIDE5NDYyNywgMTE5OTUsIAotICAgIDE5NDYyNiwgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAwLCAwLCAwLCA2NTMxLCAwLCAwLCA0NzMsIDAsIDAsIDAsIAotICAgIDE4NzMsIDEwODcsIDAsIDAsIDAsIDAsIDY2NDM5LCA0MzIxOCwgMCwgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIAotICAgIDAsIDAsIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCAxOTUwNTUsIDAsIDkxNzU2MSwgMTMyOTUsIDQzMTkxLCAwLCAwLCAKLSAgICAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAKLSAgICAwLCA0OTUsIDAsIDQxNzEyLCA3OTgzLCAwLCAwLCAwLCA4NDk0LCAwLCA3NjU0LCA0MTcxMCwgNDE5NiwgMCwgNDM3LCAKLSAgICA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCA0OTk5LCAxOTQ2NDIsIAotICAgIDAsIDAsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDAsIDQxNzg5LCAwLCAxMDgwOSwgMCwgMCwgMCwgCi0gICAgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIDEzMDU4LCAwLCAwLCAwLCAwLCAxMzIyOSwgMCwgCi0gICAgMTA1NzUsIDAsIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMDE2NywgMCwgMTI5OTMsIDgwNDksIDQxNTQ4LCAwLCA2NDU4LCAwLCAwLCA0NzYxLCA2MzgyOCwgCi0gICAgNDc2NiwgNjQ2MjMsIDEyNzMsIDE5NDY1MywgMCwgMTE4ODc2LCAwLCA2OTEyLCAxMzEzLCA3MDMzLCAxMDQ4MywgMCwgCi0gICAgNDE1NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCA1MTIyLCA0MTUyNywgMCwgCi0gICAgNjYzMjAsIDAsIDAsIDAsIDAsIDQxNTM3LCAwLCA4MzAzLCA4MjgyLCAxMTgxNywgMCwgMTAwMDMsIDczODU5LCA2NTkwNCwgCi0gICAgMTk0NjYzLCAxNjg2LCAwLCAwLCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgCi0gICAgNDIyNDYsIDExOTE1MiwgMCwgMCwgNjU5MjYsIDc3NDQsIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCAwLCAwLCA2OTY2LCAwLCAKLSAgICA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgMCwgMTMwNzgsIDAsIDQ3NjAsIAotICAgIDYzODI3LCAwLCAxMDg3MSwgNDMxOTksIDExMDIsIDAsIDAsIDAsIDAsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgCi0gICAgODYyNywgMTIyNzksIDExMTEsIDAsIDAsIDQ3MDcsIDAsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIDg2NDUsIAotICAgIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCAwLCAwLCAxMTk1NzUsIDAsIDAsIDY2NjU0LCAwLCAwLCAwLCAxMzAwOCwgMCwgNDM4NSwgCi0gICAgMCwgMTMwMTEsIDAsIDAsIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgCi0gICAgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDAsIDY1NzYyLCAxMTg4MjksIDY0NTczLCA1NzA5LCAwLCAxOTQ2MzgsIDAsIDAsIDAsIAotICAgIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDAsIDU3MDYsIDY0NzY4LCA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgCi0gICAgMTA5OTEsIDAsIDkxNzU3OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCA2NTk0MiwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCA5MTc1NzAsIDkxNzU3MywgOTE3NTcyLCAxMDA1OCwgMCwgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAKLSAgICAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgCi0gICAgOTE3NTg4LCA5MTc1ODMsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCAxMjcwNzUsIDEzMjQ2LCA4NjQsIDAsIAotICAgIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCAwLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCAwLCAxMDk0OCwgCi0gICAgOTE3NjAxLCAxMzE5OSwgMTIwMTY5LCAxMjM2LCAxMzIwOCwgMTMyNjEsIDEzMTg5LCAxMzE4OCwgMTIwMTY0LCAwLCA3NDQwLCAKLSAgICAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAKLSAgICAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIDQxNTIyLCAwLCAwLCAwLCAwLCAxMTM1NCwgMCwgMCwgCi0gICAgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIDEzMjcyLCAxMzE5NCwgMTMzNCwgMCwgNDQ3OSwgCi0gICAgMTE3OCwgNjU1ODYsIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM3ODcsIAorICAgIDY2NTA0LCAwLCAwLCAyMzA3LCAwLCA2NDMzMywgMCwgMCwgNzM4NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzYwLCA2NzQ2LCAKKyAgICAwLCAwLCA0NDAsIDAsIDEzMDg1LCA5MjMzLCA3NDIxNiwgMCwgMCwgNjg2MTIsIDAsIDY2NDQ3LCA4MDQ2LCA2NDk2MywgCisgICAgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAwLCAxNTIxLCA5ODk2LCAwLCAxMDQ4NywgMCwgMTI1MjcsIDAsIAorICAgIDc5NzAsIDAsIDAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgMCwgMCwgNTIzNywgMCwgMCwgMTAxMDMsIAorICAgIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDU3NjQsIDAsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgCisgICAgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAwLCAwLCA0NzcwLCAwLCA5MTc1NjcsIDg3MzEsIDY1Mzc4LCAwLCAxMjA2MTksIAorICAgIDkxMjIsIDAsIDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCAKKyAgICA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgCisgICAgNzgwOTgsIDAsIDQyODE0LCA4ODAsIDAsIDAsIDAsIDAsIDAsIDEwMTE2LCA5ODc3LCAwLCAwLCAwLCA3MDk1LCAwLCAwLCAKKyAgICA2Nzc4LCAwLCA3ODA5MCwgODI0MywgMjQyNywgMCwgNzA5MywgMCwgMTE1ODUsIDE5NTAwMywgOTk2MiwgMCwgMTIyMjMsIDAsIAorICAgIDAsIDE0MzQsIDAsIDU2MzcsIDExNTczLCAwLCAwLCAwLCAxOTk1MSwgMCwgNzgxMjEsIDAsIDAsIDU1MjgzLCAwLCAwLCAKKyAgICA3NDQzNywgMTE1NiwgODc0MCwgMCwgMzc4MiwgNjQzMzEsIDAsIDQxMzcwLCAxMDE0LCA4MjYxLCAwLCAwLCAxMDgzNSwgMCwgCisgICAgNjU1MzYsIDAsIDEyMDQ2MywgMCwgNzcwMiwgMTE4ODI0LCAwLCA0MzAxMCwgNjU3NzksIDY1NzgzLCAxMTUwLCAxMDU0NywgCisgICAgNTcwMCwgMCwgMTIwNjAzLCA2NTM4MywgMjMzOSwgNDI1OTQsIDU2OTcsIDExODc4OCwgMCwgMCwgMCwgNDIyNTcsIDU2OTYsIAorICAgIDEyMDQ3MCwgMTIwNDY1LCAzODYyLCA5NjQzLCAwLCAwLCA3NjM0LCA2NTE2NywgOTg0NSwgMCwgMCwgNTcwMSwgOTcyMiwgCisgICAgNDE0OTAsIDAsIDE0MjYsIDY4MjE3LCAwLCA2ODQ0NywgNDIyMDQsIDU1MjcwLCA4NTcxLCAxOTQ5OTEsIDAsIDAsIDc4ODE4LCAKKyAgICAwLCA0MzE4MiwgMTIxODQsIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgNDMxOTQsIDY0NzEyLCAxMDc0NCwgMCwgCisgICAgOTkwLCA1NjQ3LCAwLCA3Mzg3LCA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDAsIDM5NDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDc4MjEyLCAwLCAxMDIwLCA3Mzc2MywgMCwgNzg3MzEsIDU2NDgsIDY0NzQ4LCAxOTQ5MTAsIDAsIAorICAgIDEwMjA1LCAzNTQ1LCAwLCA2OTg0LCAwLCA3NDA1MSwgMCwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgMCwgCisgICAgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDAsIDAsIDExODgzNiwgMCwgNzg0MjcsIDExNDAsIDc4NDI2LCAwLCAxMDE1OSwgMCwgCisgICAgMCwgODEyOCwgMCwgMCwgOTE3OTY1LCAxODE1LCAxOTkxMCwgODkwLCAwLCAzMjY3LCAwLCAwLCAxMDEyMywgMCwgNDQxMCwgCisgICAgMTA0MSwgMTA1NzYsIDYzNTQsIDAsIDU4MCwgNzQyMzIsIDAsIDAsIDAsIDAsIDAsIDE5OTM4LCA2NTkwNiwgMCwgMCwgMCwgCisgICAgMzI5OCwgNTM3NSwgMTAxNDIsIDAsIDgyMTUsIDAsIDYxMzQsIDQxMjQ2LCA2NDQwMiwgMCwgMCwgMCwgMCwgMCwgNDEzODIsIAorICAgIDAsIDAsIDUxNzMsIDY1MzQ4LCA1MjcsIDAsIDAsIDAsIDAsIDc4Nzk3LCAxMTkxNSwgMCwgMCwgMTAwNzIsIDAsIDQyNjk1LCAKKyAgICAyMzI5LCA0MjI1MCwgMCwgMCwgMCwgMTIyNDUsIDk5MzksIDAsIDAsIDAsIDAsIDAsIDc0MzI4LCAxMTk1NzYsIDc0NzY5LCAKKyAgICAwLCAxMTkwODcsIDkwNjksIDYxNDQsIDAsIDAsIDczODIyLCAwLCAwLCA2NDkxNywgNDE1MjEsIDExODkzNCwgNDk0LCAKKyAgICAxMzI1MCwgMCwgNjUwOTgsIDYzNjQsIDk1NiwgMCwgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgMCwgMCwgMCwgMCwgNjY0NDksIAorICAgIDEzMjYzLCA3NDI4MSwgNjkyMTcsIDEzMTcxLCAwLCAwLCAwLCAwLCAwLCAxMDQ0LCA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIAorICAgIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIDAsIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIAorICAgIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgMCwgMCwgMCwgMCwgMTA1NywgNTY2LCA0MjY5NiwgMCwgMzAxNiwgNDIyNzQsIAorICAgIDQzNDY0LCA2NjQ5MCwgMTI5MjEsIDY2NTcxLCA3ODQ3MiwgMCwgMzAwNiwgNDYyMCwgMTI3MjM3LCAwLCAwLCAwLCA2NDY1OSwgCisgICAgMCwgMCwgNTUyNTMsIDYzNTcsIDYzNjIsIDg2MjYsIDAsIDAsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgMCwgMTY5OCwgMCwgCisgICAgNjQ0NzcsIDAsIDAsIDEwNTMsIDAsIDc4MjY5LCAwLCAwLCAxMDUyLCAxMDUxLCA0NTksIDEwNjAsIDc0MzQ5LCA2NjQ3OSwgCisgICAgMCwgMCwgMCwgMCwgNDI0OTAsIDY4OSwgNjUwOCwgNDE2MywgNDIyOTgsIDg2MzksIDY2NjQxLCA0MjQ2LCAwLCAwLCAKKyAgICAxMjEzMCwgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCAwLCAwLCAwLCAKKyAgICAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIDE5MjYsIDYzNTYsIDAsIDc4OTgsIDgxMTAsIDEwOTM1LCAwLCA0MzYzMywgNTgzMCwgCisgICAgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDAsIDAsIDAsIDEyNzI1NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTE5MTg3LCAxMTQzOSwgNzg4NjgsIDAsIDAsIDc4ODY5LCA0MjMxMywgNTU3OSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTU3OCwgNDE3NzQsIDAsIDQyMDIzLCA2MjM0LCA1NjY5LCAwLCAwLCAwLCAwLCAxMjc1MDYsIDY4MjAyLCA1NTgzLCAwLCAwLCAKKyAgICA0MjQyNiwgNTU4MCwgNDIyNzYsIDI5MjMsIDg5MiwgNTU4MiwgNDI0NjUsIDQxMzMwLCAxOTQ5ODcsIDU3OTUsIDY1NTEyLCAKKyAgICAxMTkwMDYsIDY1NzAyLCAwLCAxMjA4MDEsIDY1MjUxLCAwLCA2NTcxMCwgMCwgMCwgNjc2NzIsIDAsIDUzNzAsIDAsIAorICAgIDE5NDk4NiwgMTYzOCwgMTA5NjYsIDEwMTg4LCA2NTg3OCwgMTE4ODQ4LCAwLCAwLCAwLCAwLCA4MTcyLCA0MjAxNywgMCwgCisgICAgMTA4NDQsIDAsIDAsIDAsIDYzNzQsIDAsIDAsIDI4NiwgNzgwMjMsIDEwNjIsIDAsIDExOTk5OSwgMCwgNzM5NSwgMCwgCisgICAgMTA3MCwgNjQ5MDAsIDAsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAwLCA5MTc3NjMsIDUyMTEsIDAsIDY0MDAsIDAsIAorICAgIDE5NDk4MywgMCwgODE4OSwgMTEyNzYsIDAsIDAsIDM3MiwgMCwgMCwgMTE4ODc0LCA0MjEwMiwgNDE1ODUsIDAsIDAsIAorICAgIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDAsIDkwMDcsIDExODc5NiwgNDE1ODgsIDY2MDMzLCA0MjcsIAorICAgIDEwNzYzLCAxMTg4MTksIDAsIDAsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCAwLCAyMzI4LCAwLCAxMDcxLCAwLCAwLCAKKyAgICA3NDg0OCwgMCwgMCwgMCwgMTA0NywgMCwgMCwgNjQ3OTAsIDAsIDAsIDEwNjUxLCAwLCAwLCAwLCAwLCAwLCAxMTkxODEsIAorICAgIDU3MTEsIDQxNjMzLCAxMjA5OCwgNjU1NzEsIDkxNjYsIDAsIDU3MTAsIDAsIDY3OTAsIDY1MTY4LCAxMzIxNiwgMCwgMCwgMCwgCisgICAgMCwgNjQ2MTEsIDQxNjIzLCAxOTUwMDEsIDU3MTUsIDAsIDAsIDAsIDU3MTIsIDI3NjEsIDQxNjIwLCA2ODEyNCwgMzA3NCwgCisgICAgNTcyMiwgMCwgODY0MywgNzM3NjgsIDAsIDExODkwNiwgMjc1NywgMTEwNjcsIDk3MTgsIDc0NDk4LCA4OTEwLCAxMDY4OSwgCisgICAgNjQ3OSwgMCwgMCwgMCwgNzg2MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDExODkxMSwgMCwgMCwgMCwgMCwgMCwgMTIwMDEwLCAwLCAKKyAgICA4NzAxLCA2ODEzMCwgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAwLCAxMjEyMywgNDQ5NSwgNDM1NjksIDAsIDAsIDAsIAorICAgIDY0OTQ2LCAxMDk5MiwgMCwgMTIwMDA5LCAwLCAwLCA5MzE4LCAxMjA2NjEsIDEzMjQ5LCA2NTY3OSwgNzM4MDgsIDAsIAorICAgIDY1NDU3LCA0MjI0OSwgNzYzOSwgNDM5OTUsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAxMjAwMDUsIDAsIAorICAgIDAsIDUwODQsIDAsIDAsIDExODg2MSwgMCwgNzMzLCA5MTc4NzYsIDc4MDE0LCA3ODQzNiwgNzg0MzUsIDQxNjc3LCAwLCAKKyAgICA5MjE4LCAxNzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgMCwgNTE1NSwgMCwgNTM1OCwgMCwgMCwgCisgICAgOTE3NzY3LCA2NDQyNCwgMCwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCAwLCA2ODQzMCwgMTE5MTE2LCA0MzI1MywgNjU5NDMsIAorICAgIDAsIDMzNzEsIDEwOTg4LCAwLCA4NzcxLCAxNDc5LCAwLCAwLCAxMTA5LCAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCAKKyAgICA2NDUwNywgODg2OCwgMzk5LCAwLCA3NDg0MiwgMCwgMCwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgMCwgCisgICAgMCwgMjU0NCwgNjUwNzQsIDAsIDAsIDAsIDc4MDExLCAzNTEsIDExOTE0OSwgMCwgMCwgNTUyMjksIDAsIDc0MjY4LCAwLCAwLCAKKyAgICAwLCA0MjM3NywgMCwgMCwgMCwgMCwgMCwgOTAxMywgNDA1NCwgMCwgMCwgMCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKKyAgICAyNTQ5LCA3NDQ2OSwgMCwgMCwgNTU4NCwgODM1OCwgMCwgNzQ0MTEsIDAsIDEwOTE5LCAwLCA3OTgwLCAwLCAwLCAwLCAKKyAgICA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIDQzNDUyLCA3ODYwOSwgCisgICAgMCwgNDI1NzMsIDY3ODU2LCAwLCA3ODEyOSwgMCwgMCwgMCwgODEzNSwgNjQ1MCwgMTAwNTUsIDc3OTk2LCAwLCAwLCAwLCAKKyAgICA1NjU3LCAwLCA5NjI2LCAwLCA3Nzk5NCwgMTAxNzksIDU2NTQsIDEyOTM5LCAwLCAxMjA3OTksIDAsIDAsIDU2NTIsIAorICAgIDEwOTQ1LCAwLCA2NjQ4NiwgMCwgMzY2MSwgNzg2MywgMCwgMCwgMCwgNzQ1MDksIDAsIDU2NTksIDAsIDAsIDY2NzI5LCAKKyAgICA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAwLCA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCA3Mzk1NSwgNzM5NTYsIAorICAgIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAxMDMwNCwgMTAzNjgsIDQyNTE4LCA1OTQsIDEwMjQ0LCAxMDI0OCwgNzQwNywgCisgICAgMCwgNjQ4NzAsIDAsIDM0NjcsIDAsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCAKKyAgICA2OTIyMiwgNjU5MjcsIDAsIDAsIDEyMDE1NSwgNjk3NjksIDY0NjU2LCAwLCAwLCAxOTQ4MzcsIDAsIDU2NjYsIDY1MjI3LCAKKyAgICA1MzE4LCA2Mzk5NCwgMCwgOTA5MSwgMTA3OTgsIDAsIDkxNzk3OSwgMTAxODYsIDAsIDc3MzIsIDAsIDY0NTU2LCAwLCAwLCAKKyAgICA1NjY4LCA3NDQ0NSwgMCwgMCwgNTY3MCwgMCwgMCwgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIDE5OTUyLCAxMjA4MDcsIDAsIAorICAgIDEyNzQ5LCAwLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAxNDk3LCAwLCAwLCAwLCAwLCAzNTcxLCAKKyAgICAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgNjc4OTYsIDQzMTkyLCAwLCA3ODI2NSwgNTUzLCAxMjA2NTMsIAorICAgIDAsIDAsIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCA2NTkxMiwgMCwgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCAKKyAgICAwLCAwLCAwLCA2NDkwNSwgMCwgOTUxMiwgMCwgMTI3NDIsIDY0NDMsIDAsIDAsIDkxMzUsIDAsIDQxNTY0LCAwLCA1NTIxOSwgCisgICAgMCwgMCwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIDEyNzI3MCwgCisgICAgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMCwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIDAsIDY5ODE1LCA1NjM2LCAwLCAKKyAgICA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgMCwgNTYzNSwgMzM3MywgMjk4NiwgNzgyOTIsIAorICAgIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIDAsIDAsIDE2NTcsIDQxNTYxLCA3ODI5OSwgCisgICAgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCAwLCA3ODMwMCwgNDIyMjcsIDAsIDAsIDQxNjM3LCAKKyAgICA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgMTE3MDUsIDU2NDIsIDAsIDU0ODYsIDAsIAorICAgIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgMCwgMCwgNTY0MSwgODI1OSwgMCwgMTA1OCwgMCwgNjc2MzAsIDAsIDAsIDExNDQsIAorICAgIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgNjUzMjIsIDAsIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCAKKyAgICA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCAwLCAwLCA2NzYyMSwgMTE5OTM0LCA5MDAwLCAwLCAwLCAwLCAxODY1LCAKKyAgICAwLCA1NjEzLCA3NDI2NywgMCwgMCwgNTYxMCwgMCwgMCwgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgCisgICAgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgMCwgCisgICAgMTMxMzAsIDY1ODc0LCAwLCA1ODA3LCAwLCAxMDAzMCwgNTMwNiwgMTI5MzYsIDAsIDAsIDExNzA0LCAwLCAwLCAxMDIxMSwgCisgICAgMCwgMCwgMCwgMCwgMTE3MDYsIDk3MTAsIDAsIDAsIDAsIDQxMywgNjU2MjMsIDc0MjM3LCAwLCA5MTMzLCA3NDI2MiwgMCwgCisgICAgMTA0MiwgMCwgNjQ3NzksIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAKKyAgICAxMjI0MSwgMCwgMCwgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIAorICAgIDIzNjQsIDAsIDc0NDcwLCA2NjYxOCwgNjU2ODAsIDAsIDEwMDI3LCAwLCAwLCAxMjMzNywgMTIwNzIyLCAwLCAwLCAyOTgwLCAKKyAgICA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIDAsIDQ0MDExLCA4NzMwLCAKKyAgICAwLCAwLCA3ODMxMiwgNzI3NCwgMTE5MjUwLCAwLCA3Mjc1LCA3ODMwNCwgOTM1LCAwLCA2NTg0MCwgMzc3LCA0MjMyNSwgCisgICAgMTE2NDksIDAsIDY1MjUzLCA2NDMwMSwgMCwgNzgzMDgsIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCAKKyAgICA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgMTE5MjE3LCA3MjQ4LCAwLCAwLCAxNzgxLCA1NDk2LCAzNjI3LCAKKyAgICA2MiwgMTY0OSwgMCwgOTY0LCAwLCAwLCA3ODIyNiwgMCwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMCwgMTMxNDIsIAorICAgIDc4ODEyLCA0MjQxNSwgNjY1NzUsIDQ1NDIsIDc0MDM3LCA0MzU0NywgMCwgMCwgNzY3NywgMjk5MSwgNDk0NiwgNDI0NTQsIAorICAgIDAsIDc5NDksIDAsIDAsIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCAwLCA2NDc4LCAKKyAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDAsIDQ4NzcsIDAsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIDQ0MDksIDAsIDAsIAorICAgIDY0Nzk4LCAwLCA1MzQ2LCAwLCAxMjA1MjgsIDYyMzcsIDQ4NzQsIDAsIDkxNzYsIDAsIDAsIDY1MjMxLCA2NTg4NCwgCisgICAgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIDAsIDU2ODUsIDAsIAorICAgIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMCwgNDM2MzUsIDczOTI4LCAKKyAgICAxMjc1MjksIDAsIDAsIDAsIDAsIDY1NDgyLCAwLCA5MTQyLCAwLCAwLCAwLCAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAKKyAgICAyNTQyLCA0ODI2LCAwLCAwLCAwLCA1MjksIDg1ODAsIDAsIDAsIDEwNTg2LCAxMDc5MCwgMTA4MzksIDY2MDIzLCA0MTU5MywgCisgICAgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAwLCAwLCAwLCAxMTM3NiwgNzQzNzksIDEwNzIxLCA2NzY2NCwgCisgICAgMzQzOCwgNDIwOTcsIDEyNzI2NywgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIDc4MzA1LCAwLCA0MTg3MywgMTIwNTc1LCAKKyAgICAxMTMyNCwgMCwgMCwgODQyMCwgNjQ5MTgsIDAsIDQxODcxLCA0MTMzOCwgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIAorICAgIDY2NjA1LCA2NjAxMSwgMCwgNDA5NjUsIDAsIDAsIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIAorICAgIDEyNzU1MiwgMCwgMCwgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIAorICAgIDcyODYsIDAsIDY4NjM1LCAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgCisgICAgMTE5NTc3LCA0MjY3OCwgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgMCwgMCwgMCwgMCwgNzgxNjksIDY2MTk5LCAwLCAKKyAgICAzNjA5LCA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIAorICAgIDQyNzMyLCA1MTgwLCAwLCA0MTM5NSwgNDE1MzAsIDExNjkxLCA2NDc3MywgMCwgNzQwMDIsIDAsIDAsIDAsIDYzNDgsIDI0MywgCisgICAgMTMyMDAsIDAsIDYwMjQsIDAsIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIDQzNjg3LCAwLCAwLCA0Mjg1LCAKKyAgICA2NjE5NSwgMCwgNDIzMCwgMCwgMTMzMDcsIDQzMjU2LCAwLCA3NTYzLCA0MjM3NiwgMCwgNjg0NDIsIDEyMDUxMiwgMCwgMCwgCisgICAgMjE0LCAwLCAwLCA3ODQ2NiwgNjU4OTMsIDEyMjA4LCA5OTczLCAwLCA2NjMxMSwgNjU1ODksIDAsIDI2MDMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDYwMjIsIDAsIDI4ODQsIDAsIDExNjIwLCAwLCA0MywgMCwgNjY0NTMsIDEwMTYsIDQxMTA3LCAwLCA0MTEyMSwgCisgICAgMzg4NSwgOTIsIDY1NDU2LCA2NDYwOCwgMCwgNzQ4MDEsIDAsIDIwNzQsIDAsIDc4MjgzLCAwLCAxMjQ1MywgMCwgMCwgCisgICAgNzQyNDEsIDAsIDY3OTEsIDEyNDU3LCA3ODI2OCwgMCwgMCwgMCwgNzgyNzksIDAsIDAsIDAsIDY2NjM3LCA3OTk1LCA4NzU5LCAKKyAgICA0MzQyMSwgNzgyNzcsIDEyNDQ5LCAwLCAwLCAwLCA4NzUyLCAzMTk3LCA0NzIwLCAxMDE2NSwgMCwgMTE5MjQ5LCAwLCAKKyAgICAxMTU5NSwgNjQ4OTMsIDAsIDQzNDM1LCAwLCAwLCA0OTkzLCAwLCA2MTY4LCAxMDkzNCwgMTk0NiwgNzQxLCAwLCA1NDk0LCAKKyAgICA0NjM5LCAwLCAxOTkwLCA2NjU4OSwgNDQ5OCwgNzg2NjQsIDExOTE4MywgMCwgMCwgMCwgMjk2MCwgNzM3NzksIDAsIDg5NjksIAorICAgIDAsIDQzNDI0LCAxMjcwNTksIDAsIDI5NTAsIDAsIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIDAsIDAsIDAsIAorICAgIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgMCwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIAorICAgIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgNjYwMTYsIDc4MjUzLCAwLCAwLCA2NDkyMywgMCwgNDM2NjksIAorICAgIDkwMzIsIDc4MjYzLCA3ODI2NCwgMCwgNDEyMTUsIDAsIDY1ODgzLCAwLCAwLCAxMjA2MDIsIDM3NjEsIDAsIDAsIDAsIDAsIAorICAgIDEyOTEyLCAxMTkwMTIsIDM4NTAsIDAsIDAsIDAsIDAsIDAsIDkwOCwgMCwgODYxMSwgMCwgMCwgMCwgNDM2OTEsIDQxMTk3LCAKKyAgICAwLCA4OTc4LCAxMjA1NDAsIDExOTEzNSwgNDE1ODYsIDEwNTI3LCAwLCA5MTc4NDgsIDM4NDgsIDc4NzM5LCAxOTQ5MzcsIAorICAgIDEyNzUzNiwgNjUyNDEsIDUzMzYsIDAsIDAsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDc4NzY3LCAwLCAwLCA2ODE5MywgMzQ3LCAKKyAgICAwLCAwLCA3ODc3NSwgNjQ2NzUsIDQxNTgyLCA3ODc3NCwgNzg3NDQsIDY1NTc5LCAxMjk4MCwgNzg3NjksIDEyMTQzLCAKKyAgICA3MzczMywgNzg1MTIsIDAsIDQzNDQxLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAwLCA0MTU4NCwgMTA2ODEsIDAsIDAsIAorICAgIDczOTM4LCAwLCAwLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgNjYwOSwgMTA0MzQsIDAsIAorICAgIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCAwLCAwLCA3Mzg0NywgNzg3NjEsIDY1MTcyLCA0MTcyOCwgNDE3MjEsIAorICAgIDAsIDAsIDAsIDQxMjAzLCAwLCAxMzExMCwgNDE3MjYsIDAsIDAsIDEwMDAsIDAsIDAsIDQxMTQwLCAxMjA5LCA3Mzk3OCwgMCwgCisgICAgNzM3NTAsIDEwNzMsIDYzMjEsIDc3ODc4LCA0MTEzOCwgMCwgNjgyMTMsIDAsIDEyMTY3LCAxMTE1LCA0MTYwNSwgOTc5NCwgCisgICAgMTI3MDYyLCA2NzY3MSwgNTUyNDgsIDEyMjM3LCA3ODc4NywgNjYzMTQsIDY1ODcsIDkyOTAsIDc4NzgyLCA3ODc4MywgCisgICAgOTIzMSwgNzg3ODEsIDI5NTksIDc5MjYsIDAsIDAsIDAsIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCAwLCA3ODc5NiwgCisgICAgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIDc4NzkzLCA2NjY3MCwgMCwgMCwgMTIyOTAsIDAsIDAsIDAsIDQyMTQyLCAKKyAgICA5OTY4LCA4MjA1LCAwLCA1MTMxLCAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCAwLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgCisgICAgMCwgMTE5OTkwLCAxMTk5OTEsIDEyNzAxLCA3ODM3NiwgMTEzMDgsIDExOTk5NSwgMCwgMTE5OTk3LCAxMTk5OTgsIDY1MzA1LCAKKyAgICA3NDI2MywgNDAzMSwgNDI3OTQsIDEyMDAwMywgNzA3NSwgODE1NCwgMTIwMDA2LCAxMjAwMDcsIDQxODE3LCA3MzkzNCwgCisgICAgNDIyNzUsIDEyMDAxMSwgMTIwMDEyLCA3ODUyNiwgMTIwMDE0LCAxMjAwMTUsIDYwNDEsIDAsIDQxODk5LCAwLCA4MDAyLCAwLCAKKyAgICA0MzY0LCAwLCAwLCA2NDMzMiwgMCwgNzgxMywgOTA2NCwgMTE5OTg2LCAxMDEyNCwgNzUyNiwgODYwMSwgNzI4MSwgNzg0NTUsIAorICAgIDcyNzksIDEyMDQxLCAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDAsIDEzMDEyLCA0NTcxLCAwLCAwLCAwLCAKKyAgICAxMjA3OCwgMjk3MCwgMCwgMTA5MzMsIDAsIDc3ODcwLCAwLCAwLCAwLCA0MTU5OSwgMCwgMCwgMCwgMTI5NTAsIDAsIDM0ODYsIAorICAgIDAsIDAsIDQyMzksIDAsIDAsIDY2NTExLCAwLCAyNjM3LCA2NDYyOSwgODQ2MCwgMTI3MDUzLCA4NDc2LCAwLCAwLCAwLCAwLCAKKyAgICA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAwLCA0MzE2LCAwLCAxMzExOSwgMCwgNTQxMiwgNjYyNDMsIAorICAgIDk5MzUsIDAsIDczODY0LCAwLCA0MTczNCwgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCAKKyAgICA3NjIyLCAwLCA0MTczNiwgMCwgNDE3MzEsIDAsIDc0MDAsIDU0MTYsIDY4NjYzLCAxMTg5MjQsIDEwODE3LCAwLCA0MTUzOSwgCisgICAgMCwgMCwgNzM5NjMsIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCAwLCAxMjIxMCwgCisgICAgNjYwMzAsIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCAwLCAzNDU5LCA4OTk3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA2NjM3NywgNjk3ODEsIDAsIDAsIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgMCwgMCwgNzg3NDIsIDkwMTYsIAorICAgIDQzNDU0LCA2MzkwMywgNjM5MDIsIDQzNjQxLCAwLCAzOTcxLCAwLCA3Mzk3MiwgMjk1MiwgNzg3NjUsIDExMDM4LCAxMDkwMSwgCisgICAgNjM5MDAsIDYzODk5LCA2Mzg5OCwgMCwgNjY3LCAxMjMzMiwgNjM4ODcsIDYwODYsIDQxNzIyLCAwLCA1MTcyLCAwLCAwLCAKKyAgICA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgODU1NSwgNjM4NzgsIDYzODc3LCA0MjQ2MCwgCisgICAgNjA1MCwgNDI3MDgsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCA2Mzg3NSwgNjM4NzQsIDExNDYwLCA3NDMyLCAKKyAgICAxOTEzLCA0MTkxMywgNjM4NTIsIDAsIDAsIDQyMzQ4LCAwLCA2NzUyLCA0NDYsIDQxOTExLCAwLCA2Mzg1MSwgNjM4NTAsIAorICAgIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDAsIDY1NzAsIAorICAgIDgzMDIsIDcyNTksIDYzODQyLCA0MTc4LCAxMDc0NiwgNzI1MCwgMTMyMTQsIDEwMDQxLCA4MTA1LCA2Mzg5MiwgMCwgCisgICAgMTE4OTgzLCAxMTA1LCA0MTgwLCAwLCAxMjA5NCwgOTQ5NywgMCwgNjM4OTEsIDYzODkwLCA2Mzg4OSwgNjM4ODgsIDU1MzgsIAorICAgIDk5ODcsIDAsIDExODkzMiwgMTY3OCwgMTMyNzQsIDU1MiwgMTIwNjU0LCA0NDAxMCwgMTA3ODUsIDAsIDExOTE3MCwgNDU1NywgCisgICAgNzQ0NTksIDkxNTksIDEwMTcxLCAxMzEyNSwgNjM4NjAsIDU1NDAsIDYzODU4LCA2Mzg2NSwgMjgxLCAxMzI0MiwgNjM4NjIsIAorICAgIDc0MTU0LCAwLCA1NTM2LCA2NTU2OCwgNjM4NTcsIDEzODgsIDc0MTY5LCAwLCAxMDc3LCAwLCA2NTA5OSwgMTE1MzEsIAorICAgIDU4MzQsIDAsIDAsIDAsIDAsIDQyNzczLCAwLCAwLCAwLCAxMTkyMjAsIDAsIDM2NjMsIDAsIDExMTIsIDExOTEyMiwgODY4NiwgCisgICAgMCwgNTMzNCwgNjUwODEsIDQzMjQ5LCA3NDc3OCwgMCwgMTEwNzcsIDAsIDY1MDksIDAsIDUzMjcsIDAsIDE5OTA3LCAKKyAgICA2Mzg2OSwgMzQ3OCwgNzU4MywgNzY3OSwgMjkwMywgMCwgMzAwMSwgMTE1OCwgODc0NSwgMCwgNzM3NDgsIDYzODY2LCAwLCAKKyAgICAxOTE1LCA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDY5MjM4LCAxMjAxMjUsIAorICAgIDEyMDcwLCA4NzYwLCAxMTE3LCAxMTg5ODcsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgNjM4MzUsIDYzODM0LCAwLCAKKyAgICA3ODI0MCwgMTIyMjUsIDYzODM4LCA2MzgzNywgMCwgMCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCA2MzgyMSwgCisgICAgNjM4MjAsIDYzODE5LCA2MzgxOCwgMCwgNTIyNywgOTA0NywgNjM4MjIsIDAsIDYwOTEsIDAsIDEwNjkxLCA1NjAsIDU2NDMsIAorICAgIDgyMjYsIDExOTU3OCwgNjM4MTIsIDYzODExLCA2MzgxMCwgNjM4MDksIDU1NDIsIDYzODE1LCA2MzgxNCwgNjM4MTMsIAorICAgIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAyMDYsIDc3OTI1LCA0OTM2LCA2NTE0NywgODE2OCwgNjM5MzAsIDIwNzYsIAorICAgIDEwOTMsIDk4ODIsIDYzOTM0LCAyMDgyLCA2MzkzMiwgOTE3NTU0LCA2MzkyOSwgMzU0NiwgMTYwNSwgNzc5MzQsIDk4MDYsIAorICAgIDQzNDcyLCA3NzkzMywgODQwMCwgMTEzNDMsIDIwODYsIDAsIDYzOTI2LCAyOTg0LCA1OTY4LCA5Mjg3LCAwLCA0NjE4LCAKKyAgICA0MjIwOSwgNDM0MzEsIDEzMTY5LCA1MjkwLCAyMDg5LCAxNjk1LCAxMDc0MywgMTA4OCwgNjM4MjUsIDcyNjgsIDEwODQsIAorICAgIDEwODUsIDYzODI5LCAxMDgzLCAxMDEzMSwgNzI4MywgMCwgNjM5NzAsIDAsIDEwOTIsIDQ3NTQsIDcyNzMsIDUyNTIsIAorICAgIDQ0MDE2LCA0MzYyNywgMCwgMCwgNzQwOCwgMTE4MDksIDAsIDAsIDAsIDI5NjUsIDcyNTgsIDg4MDgsIDAsIDEwODksIAorICAgIDQxODcsIDYzOTM3LCA0MjExOSwgNDIxMjAsIDAsIDk0MCwgNTc4NywgMTAwOTksIDYzOTM4LCAwLCA3NDQ5NCwgMTI0NjMsIAorICAgIDI5OTQsIDAsIDExODgyNywgMCwgOTY2NCwgNzc5MzksIDc3OTQwLCA2Nzg5MiwgNzc5MzgsIDc0MzQzLCAwLCAwLCA2NjAsIAorICAgIDEwMTI3LCA2NjYsIDkwMjIsIDU1MzIsIDQzNjY3LCA1NTMzLCA3Nzk0MSwgNzg1MDcsIDYxMTgsIDIyMiwgOTc5LCAzODg0LCAKKyAgICAwLCA3NDE1MSwgMTIwNDQ1LCA2NTAyLCAwLCAxMjcxMTgsIDAsIDYzOTUxLCAxMjQ2NSwgMCwgMCwgMCwgNjM5NDYsIDE3MDcsIAorICAgIDYzOTI0LCAxMjQ2MSwgNjM5NTAsIDYzODk3LCA2Mzk0OCwgNjM5NDcsIDYzOTQ1LCA2MDM4LCA2Mzk0MywgNjM5NDIsIAorICAgIDY0Njg1LCA2Mzg5NSwgNjU4MzgsIDAsIDc3NzYsIDAsIDAsIDAsIDEyMDQ0NCwgNzgxNzIsIDgwMSwgNDMxNjUsIDE2OTAsIAorICAgIDYzOTE5LCA2MzkxOCwgNjM5MTcsIDEzMjc3LCA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgCisgICAgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgMTIwNjEwLCA2MzkxMSwgNTQ4NCwgNjM5MDksIDYzOTA4LCAyNTM5LCAwLCAKKyAgICA0Mzk4MCwgNTQ4NSwgMCwgNDI2OTcsIDkwNjEsIDU1MzQsIDEwNjcyLCA0NTAyLCAwLCAyNTMsIDAsIDY4MjA4LCAwLCAKKyAgICA0Mjg1NCwgNzgzOTMsIDAsIDExNTMwLCAwLCA2ODY2OCwgMCwgMCwgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgNDIzNTQsIDAsIAorICAgIDAsIDAsIDE5NTA2NSwgMCwgODQxMywgMCwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzg0NjAsIAorICAgIDE5NTA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY2MDgsIDMxMTEsIDQxODYzLCA4ODA0LCA2NjYwNywgMCwgCisgICAgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgMCwgNjM5ODIsIDczOTMsIAorICAgIDEyODA3LCA0MzQxMywgNjM5MDYsIDE1OTgsIDYzOTA0LCAwLCAwLCA0MTcyOSwgNDQyMywgMTMwNywgMCwgMTA1MTUsIAorICAgIDQxNTg5LCAwLCAwLCA2MjE4LCAwLCAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCAKKyAgICA3NDAzMiwgMTE1NDksIDEwNzM1LCA0MTc0MywgNzM5MzcsIDY4MDEsIDAsIDQ1MTgsIDEwOTkwLCA2NTA3MywgNTE2NywgCisgICAgNDQ4MSwgMzc3MSwgMCwgMjcxMCwgMCwgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgNDE2OTAsIDEyNDc5LCAwLCAwLCAwLCAwLCAKKyAgICAxMTk2NTksIDE2MjgsIDAsIDAsIDAsIDY1MjYyLCA2MzMzLCAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCAxMjA2ODMsIDAsIDAsIAorICAgIDUzMzksIDc0MzIzLCAwLCAxMzAwNCwgMCwgNDQ1NywgMCwgMCwgMCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIAorICAgIDY1ODA3LCAwLCA2ODQ2NCwgMTI2MzMsIDEyODcwLCA3ODUyMSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCAKKyAgICA1Njg2LCAwLCA3NDI1MSwgMCwgMTIwNjQ3LCAwLCA1MCwgMTA1NTgsIDk4NzEsIDAsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgCisgICAgMCwgMTMyNTksIDQ0NDgsIDAsIDAsIDAsIDAsIDY3ODUzLCAwLCAxMDY0MCwgMCwgMTE1MSwgMCwgOTE3NjA3LCAwLCAKKyAgICAxMjcwNzksIDE5NTA1MCwgMCwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgMTE4ODcwLCA4ODEyLCAwLCAKKyAgICAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIDAsIDk4OTQsIDAsIDAsIDAsIAorICAgIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAxMjA0OTUsIDAsIDAsIDEyMjc3LCAKKyAgICAxOTQ2MjcsIDExOTk1LCAxOTQ2MjYsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgMCwgMCwgMCwgNjUzMSwgMCwgMCwgCisgICAgNDczLCA0MzQxNSwgMCwgMCwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCA0MzIxOCwgMCwgMTk0NzE2LCAKKyAgICA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDAsIDAsIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCAxOTUwNTUsIDIwNTgsIAorICAgIDkxNzU2MSwgMTMyOTUsIDQzMTkxLCAwLCAwLCAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgCisgICAgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAwLCA0OTUsIDAsIDQxNzEyLCA3OTgzLCAwLCAxMjA3NzksIDAsIDYzNDcsIDAsIAorICAgIDc2NTQsIDQxNzEwLCA0MTk2LCAwLCA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgCisgICAgNjQzMDYsIDAsIDAsIDQ5OTksIDE5NDY0MiwgMCwgMCwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgCisgICAgMCwgNDE3ODksIDAsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgCisgICAgMTMwNTgsIDEyMDQ0OSwgMTI4NzUsIDAsIDAsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAKKyAgICAwLCAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCAwLCA2NzgzLCAwLCAKKyAgICAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCAwLCAwLCA0NzYxLCA2MzgyOCwgNDc2NiwgNjQ2MjMsIDEyNzMsIAorICAgIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIDAsIDQxNTQ1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIDUxMjIsIDQxNTI3LCAwLCA2NjMyMCwgMCwgMCwgMCwgMCwgCisgICAgNDE1MzcsIDAsIDgzMDMsIDgyODIsIDExODE3LCA3Mzg1NywgMTAwMDMsIDczODU5LCA2NTkwNCwgMTk0NjYzLCAxNjg2LCAwLCAKKyAgICA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCA2NDI5OSwgMTk0NjY0LCAwLCAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIAorICAgIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgMTk0NjM2LCA3NDI3NywgNzQzMDIsIDc4MDUyLCAwLCA2OTY2LCAwLCA4MTM2LCAwLCAKKyAgICA2NTYwMCwgMTYzMywgMCwgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgMCwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAKKyAgICAyMDUwLCAxMDg3MSwgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAwLCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCAKKyAgICA0MjU5MSwgODYyNywgMTIyNzksIDExMTEsIDAsIDAsIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCAKKyAgICA0NTIyLCA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgMCwgMCwgMTE5NTc1LCAwLCAwLCA2NjY1NCwgMCwgMCwgMCwgCisgICAgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAwLCAwLCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIDQxNzkzLCAKKyAgICA2NTc2MywgNzQyMjEsIDEyMDE0MSwgNDE3OTIsIDQyNzcwLCAwLCA2NTc2MiwgMTE4ODI5LCA2NDU3MywgNTcwOSwgMCwgCisgICAgMTk0NjM4LCAwLCAwLCAwLCAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCAwLCA1NzA2LCA2NDc2OCwgNTcwNSwgODc5MSwgCisgICAgNDAwNSwgMCwgMTAyMzcsIDEwOTkxLCAwLCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCA2NTk0MiwgCisgICAgOTE3NTc3LCA0MjYwNSwgMTIwNzY1LCA5MTc1NzAsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCA3NDg2NywgMTk0NjU0LCAKKyAgICAxMjcwNzgsIDMzMzksIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCA5MTc1ODcsIDkxNzU4NiwgCisgICAgOTE3NTg5LCA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDEyNzA3NSwgMTMyNDYsIAorICAgIDg2NCwgMCwgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDAsIDEzMjQwLCAxOTUwNjgsIDUxOTIsIDQzMzgsIDAsIAorICAgIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCAxMjAxNjksIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCAxMjAxNjQsIAorICAgIDAsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgCisgICAgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgNDE1MjIsIDAsIDAsIDAsIDAsIDExMzU0LCAwLCAKKyAgICAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCAwLCA0NDc5LCAKKyAgICAxMTc4LCA2NTU4NiwgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCAwLCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIAogICAgIDYzNzg2LCA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgCi0gICAgMTAxOTIsIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDAsIDAsIDAsIDAsIDQxNzE5LCAKLSAgICA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIDQzMTQ1LCAKLSAgICAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgNDEwODQsIAotICAgIDEyMDYyMiwgMCwgNDE5MzAsIDYzODA1LCA2MzgwNCwgNjM4MDMsIDYzODAxLCA0MTA4MiwgODE0MCwgNjM3OTgsIDYyNjAsIAotICAgIDAsIDAsIDExOTIyNSwgNjM3OTMsIDExOTg4LCAzODk4LCAwLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjM1OCwgMTAzNjcsIAotICAgIDEyNTIxLCAxMDQzMSwgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDAsIDAsIDc5NTAsIDEwODA0LCAKLSAgICA2Mzc3MSwgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDAsIAotICAgIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAKLSAgICAxMTA1MywgMCwgNjM3NDQsIDAsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDAsIDAsIDEwOTAsIAotICAgIDEyMDY3OSwgMCwgMTE2NjUsIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgMCwgMTE1MTMsIDAsIDYxNTcsIAotICAgIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCAKLSAgICAwLCAxMzAwNiwgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM2MDMsIDAsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIDEwMDI1LCAwLCAyOTE4LCAKLSAgICAwLCA2NTMwMCwgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIDAsIDY1MzkzLCAwLCA3NDEzOCwgCi0gICAgMCwgMCwgMCwgNzQxMzksIDEyMDYxMywgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAKLSAgICAxMjgyLCAxMjA3NzEsIDAsIDAsIDEwODg4LCAwLCA2NTI0MiwgMCwgMzMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwNCwgCi0gICAgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAwLCAwLCA0MzA5NCwgMCwgMCwgCi0gICAgMCwgMCwgOTAzNSwgMCwgMCwgMCwgMCwgMCwgNjgxMjUsIDAsIDE2NCwgMCwgMCwgMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDAsIAotICAgIDEzMjQ1LCAwLCAwLCAwLCAwLCA3Mzg5MywgMCwgMTI2NjYsIDEzMTc1LCAxMzIwNywgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCAKKyAgICAxMDE5MiwgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDAsIDAsIAorICAgIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIAorICAgIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgCisgICAgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIAorICAgIDYzNzk4LCA2MjYwLCAwLCAwLCAxMTkyMjUsIDYzNzkzLCAxMTk4OCwgMzg5OCwgMCwgMTAyMDEsIDEyMjM4LCA2Mzc5NSwgCisgICAgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCAwLCAKKyAgICA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAwLCAwLCAKKyAgICA2Mzc2OSwgOTUzMCwgMCwgMTIyMzIsIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgCisgICAgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAwLCA2Mzc0NCwgMCwgMCwgNzU4OCwgNjM3NDgsIDE2OTMsIDYzNzQ2LCAKKyAgICA0MzIwNCwgNTA1NSwgNjg0MjYsIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAwLCAxMTY2NSwgNzQxMzMsIDQ1NTgsIDY1Njg1LCAKKyAgICA5NTIzLCAwLCAwLCA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgCisgICAgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAwLCAwLCA5NDEsIDAsIAorICAgIDAsIDAsIDY1NTQxLCAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDAsIDAsIDAsIDczODYsIDAsIDY4MzU4LCAwLCAKKyAgICAwLCA0MzYwMywgMCwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgMTAwMjUsIDkxNzkxNiwgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgCisgICAgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAwLCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIDAsIDc0MTM5LCAKKyAgICAxMjA2MTMsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgMTIwNzcxLCAwLCAKKyAgICAwLCAxMDg4OCwgMCwgNjUyNDIsIDAsIDMzMzAsIDAsIDAsIDAsIDAsIDAsIDc0MjU5LCAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgCisgICAgMTYyNywgMCwgMCwgMCwgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgNDMwOTQsIDAsIDQzNjUwLCAwLCAwLCAKKyAgICA5MDM1LCAwLCAwLCAwLCAwLCAwLCA2ODEyNSwgMCwgMTY0LCAwLCAwLCAwLCA2OTU4LCAwLCA0MzExNiwgMCwgMCwgMTMyNDUsIAorICAgIDAsIDAsIDEyNzM3NiwgMCwgNzM4OTMsIDAsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgCiAgICAgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIAotICAgIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCA2NDc2NywgMCwgNzQ0MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMDQ1LCA2NDMwMywgCi0gICAgMTMyNzUsIDAsIDExMDU3LCAwLCAxMzI3NiwgMCwgNDE1MjUsIDAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgCi0gICAgNDE1MjMsIDAsIDAsIDczNzUxLCAwLCA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIDY0OTU4LCAwLCAwLCAKLSAgICA3Mzk4OSwgMCwgMCwgMCwgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIDY1NDc0LCA0Nzk2LCA0MTc4MiwgMCwgCi0gICAgNjU0NzksIDAsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDEyMDUxMSwgOTg5OSwgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgCi0gICAgNTc4OCwgMCwgMCwgNDEyMjIsIDE4MzEsIDY2MDIwLCAwLCAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTMxMzEsIAotICAgIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIAotICAgIDQzNzQsIDAsIDAsIDEzNjQsIDAsIDgwMzgsIDAsIDkxNzU5NywgMCwgMCwgMCwgMCwgNzM5NzksIDEzMTc0LCA3Mzk2OCwgCi0gICAgMTMyMjUsIDAsIDAsIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCA0Mjg2NiwgMCwgMCwgMCwgCi0gICAgNjY0MzgsIDQxNzg1LCA0MTE3MSwgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTY1LCAKLSAgICAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgMTU1NiwgNTI3NCwgMTMyMTAsIDAsIDEwMDE3LCA5NzMzLCAKLSAgICA0MTc4NywgMCwgMCwgNDEzNzMsIDAsIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAKLSAgICAwLCAxMjA3MDMsIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAwLCAxMDk2LCAwLCAwLCAwLCAxMjQ0MSwgCi0gICAgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMCwgCi0gICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMCwgMCwgCi0gICAgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgMCwgNDE1MzMsIAotICAgIDY2MzM3LCAwLCAwLCAwLCA0OTY1LCAwLCA5MTc1MzYsIDczODQ5LCAwLCAwLCAwLCAwLCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCAKLSAgICA2NjU3MCwgMTk1NywgMTA0MjAsIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAwLCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDAsIAotICAgIDEzMjEyLCA2NTExMCwgMCwgMTMxOTAsIDEzMTg3LCAwLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAKLSAgICAxNjk0LCA4MjE2LCAwLCAwLCA0MzMzMSwgMCwgNjU2MjAsIDAsIDQzNTQ0LCAwLCAwLCA0MTQ0NCwgNjU2MjEsIDEyMDMyNSwgCi0gICAgNjQ3OTksIDUyNDYsIDEyMDMyNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAxMjMxNCwgNjU2MTYsIDUyMzgsIAotICAgIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIDAsIDM5MzYsIDExOTMzMSwgMTE2OTksIAotICAgIDQxMzQ3LCAwLCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIDEzMjM5LCAxMjY5MiwgNzk2OSwgMCwgNzIxOSwgMCwgMCwgCi0gICAgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAyOTc5LCAxMjAzMDMsIDY1NjE5LCA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCAKLSAgICA2NjYzMSwgNDE0NzcsIDExOTI1NiwgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIAotICAgIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMCwgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCAKLSAgICA0MTc3NSwgMCwgMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAxMjExMCwgMCwgNjU1NzIsIDExOTYwMiwgCi0gICAgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIDAsIDU4MDgsIDY1OTIyLCAwLCAxMjk2NywgNjYwNDEsIAotICAgIDk2NzYsIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgMCwgMTE5NjUsIDAsIDExOTIxMSwgMCwgMCwgMCwgMCwgNjgxMDIsIAotICAgIDk2OTgsIDc4MTQsIDc0NDc2LCAxMTk2NTEsIDAsIDAsIDQxOTIxLCAwLCA5NzU2LCA2OTg1LCAxMTkyNTgsIDAsIDc0MjE5LCAKLSAgICAwLCAwLCAwLCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIDQyMzIzLCAwLCA0MTkyNSwgMCwgNDE5MjAsIAotICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDAsIDAsIDQyNTExLCAKLSAgICAxNzI3LCAwLCAwLCAwLCAwLCAwLCA3NDIyMiwgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIDc0MDkwLCAKLSAgICA1ODI2LCA3NDI3MCwgNTgxMywgMCwgMTIwNzEyLCA1ODQxLCA1ODM3LCAwLCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgCi0gICAgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCAKKyAgICA5NzEsIDEzMDYyLCAwLCAwLCA2NTE5NSwgMTAxNjQsIDAsIDc0NDI4LCAwLCA3ODE0NiwgMCwgMCwgMCwgMCwgMTAwNDUsIAorICAgIDEyODgyLCAxMzI3NSwgMCwgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAKKyAgICAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCAKKyAgICA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCAwLCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIAorICAgIDQ3OTYsIDEyMjkyLCAwLCA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgMTIwNTExLCA5ODk5LCAwLCAwLCA0MDQsIAorICAgIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAwLCAwLCA0Mzg4LCAwLCAKKyAgICA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAzNzk5LCA3NDI5MiwgCisgICAgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIDQzNzQsIDAsIDAsIDEzNjQsIDAsIDgwMzgsIDAsIDkxNzU5NywgMTI4NjgsIAorICAgIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIDY1ODM1LCAwLCAyMzY1LCAKKyAgICA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCA0MTE3MSwgNjQxNzIsIAorICAgIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIAorICAgIDExOTM1MiwgMTU1NiwgNTI3NCwgMTMyMTAsIDAsIDEwMDE3LCA5NzMzLCA0MTc4NywgMCwgMTI2OTk0LCA0MTM3MywgCisgICAgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIAorICAgIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAwLCAxMDk2LCAwLCAwLCA0MjY4OCwgMTI0NDEsIDEyMzU1LCAKKyAgICAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAxMzIzNywgMTI3MTksIDAsIDExOTEwMSwgMCwgCisgICAgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAwLCAxMjA3ODUsIDExOTg3NCwgMCwgMTMxOTUsIAorICAgIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgMCwgNDE1MzMsIDY2MzM3LCAKKyAgICAwLCAwLCAwLCA0OTY1LCAwLCA5MTc1MzYsIDczODQ5LCAwLCA0MzYzOCwgNzg1MzcsIDAsIDYyNjEsIDExOTM0MiwgNDMxNDcsIAorICAgIDY2NTcwLCAxOTU3LCAxMDQyMCwgOTgyLCAyNzU2LCAxMzI5MiwgMTMyMDYsIDAsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgCisgICAgMTI3NTU5LCAxMzIxMiwgNDMyMzgsIDAsIDEzMTkwLCAxMzE4NywgMCwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCAKKyAgICA2NDQ3NiwgMTY5NCwgODIxNiwgMCwgNjc3MCwgNDMzMzEsIDAsIDY1NjIwLCAwLCA0MzU0NCwgMCwgMCwgNDE0NDQsIAorICAgIDY1NjIxLCAxMjAzMjUsIDY0Nzk5LCA1MjQ2LCAxMjAzMjYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIAorICAgIDY1NjE2LCA1MjM4LCAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAwLCAzOTM2LCAKKyAgICAxMTkzMzEsIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIDEzMjM5LCAxMjY5MiwgCisgICAgNzk2OSwgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDAsIDEyMDUwOSwgMCwgNjYyMjQsIDczNCwgMjk3OSwgMTIwMzAzLCAKKyAgICA2NTYxOSwgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIDEyMDMxMCwgNzQ1MTEsIAorICAgIDQxNzcwLCAxNjcwLCA2NDQyLCAxMjAzMTcsIDQyNDQ2LCA1Mzc5LCAxMjAzMTgsIDQxMTYzLCA3NDgzMiwgMTIwMzE1LCAKKyAgICAxMjAzMTQsIDAsIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDAsIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgCisgICAgNjE1MSwgMTIxMTAsIDQyNjczLCA2NTU3MiwgMTE5NjAyLCA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgCisgICAgMCwgMCwgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAwLCAKKyAgICAxMTk2NSwgMCwgMTE5MjExLCAwLCA2OTc4OSwgMCwgMCwgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAxMTk2NTEsIDAsIDAsIAorICAgIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgMCwgNzQyMTksIDAsIDAsIDExODk5NywgODAxMiwgNTY3NCwgCisgICAgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCA1NTg4LCAwLCA0MTkyNSwgMCwgNDE5MjAsIDU2NzMsIDEyMDUzNCwgNTY3NiwgCisgICAgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgMTcyNywgMCwgNDI0MzYsIDAsIAorICAgIDAsIDAsIDc0MjIyLCA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIDU4MjYsIDU1MjMyLCAKKyAgICA1ODEzLCAwLCAxMjA3MTIsIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgNTgzOCwgNTc5NiwgMCwgCisgICAgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCAKICAgICA1ODA2LCA0MjM5OCwgMCwgOTAzNywgNTY3MSwgMTIwMDQxLCAwLCAwLCAwLCAwLCAwLCA4NDcsIDAsIDk1MjksIDAsIAotICAgIDY2NjU3LCA2OTgwLCAwLCAxMjAwMzUsIDAsIDAsIDAsIDEyMDAzMywgMCwgMCwgMCwgMTIwMDM5LCAwLCAwLCAwLCA5NjI0LCAKLSAgICAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgMCwgNDMyMDEsIDAsIAotICAgIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDEyMDQ5MiwgNjgxNDEsIDgzNzIsIDAsIAotICAgIDY1MTE2LCAwLCAxMjAwMjIsIDAsIDEwMzg4LCA0Mjc5OSwgMCwgNDEwMTMsIDEwNTY4LCAwLCAwLCAyODY5LCAwLCA0MTAxNSwgCi0gICAgMCwgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgMTk0Njg4LCA5ODg0LCA0NzU5LCAwLCAwLCAKLSAgICAxMDI2NiwgNDEzNTksIDExNzAsIDEyNzAxNywgMCwgNzM5MDgsIDE2MDksIDkwMiwgMCwgNjM5MzYsIDAsIDExNjYxLCAKLSAgICA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgMjU1NCwgNTE1OCwgNTcxNCwgMTI3MDE1LCAwLCAwLCA4MDcsIAotICAgIDQzMDc5LCAwLCAwLCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIDAsIDAsIAotICAgIDg2NzYsIDAsIDAsIDExMDY2LCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMCwgMCwgMCwgNDM2MDksIDE5NDcwMywgCi0gICAgMTIwNTUzLCAxNDQwLCAwLCAwLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIAotICAgIDAsIDAsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgNjY0MzYsIDY1NDYsIDkzLCAwLCAwLCA3NDQ0MCwgMCwgMCwgCi0gICAgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjUsIDkxNzU0MywgMzgzLCAxMDM3NywgNDE2NTYsIDAsIDAsIDAsIDUxODcsIDAsIDAsIAotICAgIDExMjg2LCAwLCA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCAwLCA4MjkyLCAxOTUwNzQsIAotICAgIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjY0NzgsIDcwNzYsIDEzMTgyLCAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgCi0gICAgNzk3MiwgMCwgMCwgMCwgNzkwMCwgMCwgMTEzMDksIDE5NDcxMSwgNDE5OCwgNjQyMTEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyOTMxLCAwLCAwLCA3NDI4NSwgMTAxODUsIDAsIDY0MzY2LCA2NTE1NiwgODgxNCwgMCwgNzQ3NzEsIDAsIDAsIDEyODM2LCAKLSAgICAwLCAwLCA3NDM0MiwgODU5MywgMCwgMCwgMCwgMTMyNTUsIDAsIDAsIDc0NjQsIDAsIDY1ODY1LCAwLCAxOTQ2NTAsIDAsIDAsIAotICAgIDkzNDIsIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDAsIDEwMTI5LCA0MTAwNywgMCwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgCi0gICAgMTE5MTM2LCAwLCAwLCAxMjA2MzMsIDQwOTkyLCAwLCAwLCAwLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCAKLSAgICAwLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCAwLCA5NzcxLCAwLCAxMzI1MSwgMCwgMCwgNjI2MiwgMjc4NCwgMCwgMCwgODEyNiwgCi0gICAgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgMCwgMCwgMTA4OTAsIAotICAgIDc0NDgxLCA2NTgzNCwgODMyNCwgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDAsIDY0NzM3LCAwLCAwLCA4OTMwLCAwLCA3NDI0OSwgCi0gICAgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgMCwgMCwgMCwgOTAzNCwgCi0gICAgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIAotICAgIDAsIDAsIDAsIDExNzkyLCAwLCAwLCA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIDY0MzkwLCAwLCAwLCA1NTIwLCAKLSAgICAxMTY2MiwgMCwgNjUzMzAsIDczODg2LCAwLCAwLCAxMjMyNiwgMCwgMCwgNDI4MDgsIDAsIDkzNDgsIDY0OTAxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODU3LCA2NTM0MiwgMCwgMTE5MTIwLCAwLCA4NjQ0LCAwLCAwLCAwLCA3NDI5NiwgCi0gICAgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgMCwgMTg5MSwgMCwgMCwgNDE5MDcsIDY2NjQ3LCAwLCA4NzYxLCAxMjk0MiwgCi0gICAgNTc0OCwgMCwgMTA3NzMsIDAsIDAsIDg3OTYsIDAsIDY0MTIsIDEyMDM0NywgODUyMCwgMTMxNDYsIDAsIDYzOTMxLCAwLCAKLSAgICA2NTkwMiwgMjg4MiwgMCwgMCwgMTI4NDMsIDQ1MjAsIDAsIDAsIDAsIDAsIDAsIDczODYwLCAwLCAwLCA2NDM0NSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTE3NTg1LCA2NTExNywgMCwgMCwgMTA0MjcsIDAsIDM4NDQsIDAsIDk3NTUsIDExMTAsIDY2MTIsIAotICAgIDEyMjIyLCAwLCAwLCAwLCAwLCA3ODMsIDE5NDkzNSwgMCwgMCwgMCwgMCwgNjUwNTYsIDM2MjAsIDAsIDExODk0NSwgNDU1NiwgCi0gICAgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgMCwgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAwLCA5MTc3LCA4OTAyLCAwLCAKLSAgICA5ODM5LCAwLCAxMjg5MSwgMCwgMCwgNjM5OTksIDIwMTYsIDQxOTE3LCA5Nzg4LCA2MzkyOCwgMCwgMTg2MiwgNjU4MDAsIAotICAgIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgNDE5MTksIDg1NzksIDQxOTE0LCA3OTgxLCAwLCAwLCA0NTA4LCA2NDg4MywgMCwgCi0gICAgMCwgMCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDQxNzgwLCAxMjAwNzksIDY4MTgxLCAwLCAwLCAwLCAwLCAxMjE0NywgCi0gICAgOTAyNCwgNjYzNzgsIDY2NDcyLCAwLCA2NDI4OSwgNjUyODksIDAsIDAsIDAsIDY0NTA5LCAwLCAwLCAwLCAxMTA1MSwgMCwgCi0gICAgMCwgMTEzNTUsIDY1ODg1LCAwLCAwLCA0MTIxNCwgMCwgMTIyOTksIDAsIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIAotICAgIDExODkxMiwgMCwgMCwgNDA0MCwgMCwgNjE2NywgMCwgNjM5MjIsIDY1OTQsIDAsIDAsIDAsIDM2MjQsIDQzMDM2LCAwLCAKLSAgICA2NDY1NSwgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgNDE5NTUsIDAsIDYzOTkzLCA2Mzk5MiwgOTYxMSwgMCwgMCwgMCwgNzczOCwgCi0gICAgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgMCwgMzQzNSwgMTE5NjUyLCAwLCAxMTkxMDgsIDcwMjksIDY0MjU4LCA0MTI5MiwgCi0gICAgMTE4ODk4LCAxMjc0OCwgNDMxMTUsIDk1MTcsIDExNTE4LCAwLCAwLCAwLCAxOTQ3NzcsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIAotICAgIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNjM5NTgsIDEwMjE3LCAxMTg4NDUsIDExNDY5LCAwLCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAKLSAgICAwLCA2NTU1MSwgMTE4OTI4LCA2NjMzLCAwLCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKLSAgICAwLCAwLCA0MTUsIDYzOTY0LCA2Mzk2MywgNDIzNDUsIDAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAwLCA2Mzk2MSwgCi0gICAgNDQ3MiwgMCwgMCwgMCwgMCwgOTE3OTM2LCA0MjM0MCwgNDc1NiwgMCwgNzA4MSwgMTA3MzAsIDc2OTEsIDAsIDYzODMwLCAKLSAgICAxMTk2MjUsIDE5NDk0NSwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgMCwgNjU3NjQsIAotICAgIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCA2NDg3MywgMTE5OTIsIDAsIDAsIDYzOTgwLCAxMTgwMSwgCi0gICAgMzYyMiwgMCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCA2Mzk3NiwgMCwgMCwgMCwgCi0gICAgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAwLCAKLSAgICA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAwLCAxMTMwMiwgNjI1OSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCAwLCA2NDk0MiwgMCwgMTk0NzMzLCAwLCAxOTQ3MzIsIDAsIAotICAgIDc0MzAxLCAwLCAxMTI4MCwgMCwgMCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIDY1MDE4LCA2NjUxNiwgCi0gICAgNTQwOSwgMCwgMTk0NjY5LCA2NDM0NywgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCAwLCAwLCAwLCAKLSAgICA1NDA1LCA5MTc1NTUsIDY0ODY2LCAwLCAwLCAwLCAwLCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIAotICAgIDAsIDQyMzkwLCAwLCAxOTQ3MjUsIDAsIDY1MDc3LCAwLCAwLCAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgCi0gICAgMCwgMzM3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MTE5LCAwLCAwLCAxMTkwNjgsIDAsIDAsIDEzNzksIDI0NiwgMCwgCi0gICAgMCwgMzc4OCwgMCwgMTEwNDEsIDAsIDY2MzA0LCAwLCAwLCA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIDAsIDEzMTYzLCAwLCAxMjA4MzEsIDc0NTk3LCAzMTgyLCAwLCAwLCAKLSAgICAwLCAwLCA2NTg4OSwgNDIxNjksIDQ3NTUsIDc0MjQ0LCAwLCAxMTQ0MywgMCwgNjYzMjYsIDc0NTk4LCA2MDgsIDYwMCwgMCwgCi0gICAgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIDQyNDQyLCA2NTQ3MCwgMCwgNjQyMDIsIDEzMTYwLCAKLSAgICA3NzU5LCA0MjQ4MiwgNDg1LCAwLCAwLCA5ODI4LCAwLCAwLCA0MjI4MCwgMCwgOTM1MSwgNzc3OCwgNjQzNzksIDc0OTYsIAotICAgIDQyNDMxLCA2OTE2LCAxMjA4LCAwLCAxMTk2MzEsIDExMDAyLCA0MjQ3MCwgMCwgMCwgMCwgMCwgNzQwNDEsIDAsIDAsIAotICAgIDQzNTM5LCA1NDExLCAwLCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgOTMzNywgCi0gICAgMTIwNTIsIDEwNjQzLCA2NDU4NiwgMCwgMTk0Njg0LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgCi0gICAgMTk0NzU2LCA3NDMxMCwgNjU1NCwgMCwgMTE5MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgMTE4ODI2LCAyNzEzLCAwLCAKLSAgICA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCAwLCAwLCAxOTQ2NzgsIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIAotICAgIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAwLCA4Nzc5LCAxMDU2OSwgODcyNSwgMTMyOTksIDY2NjM4LCAwLCA0MjI2MywgCi0gICAgNDE0NSwgMCwgNjU3NTEsIDY2NjEzLCAwLCA2NTczOCwgNzM3MjksIDkxODUsIDk1NTAsIDAsIDAsIDAsIDAsIDAsIDY1NzM2LCAKLSAgICA0MTk1MSwgNjQ4MTYsIDY1NzU2LCAwLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDAsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgCi0gICAgMCwgMjg3OCwgNTM5MCwgMCwgMTk0OTYxLCAwLCAwLCAwLCA3NTAxLCAxMzIwMywgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCAKLSAgICA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCAwLCAwLCAwLCA4OTg2LCAwLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAKLSAgICAwLCAwLCAwLCA5MTc1NDUsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA2Nzg0OSwgNTU1LCAwLCAwLCAKLSAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCAwLCAwLCA2NDE2MiwgNTg1OCwgNDE5MjcsIAotICAgIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAwLCAxMzE1OCwgMCwgNzIxMSwgMCwgCi0gICAgOTM3MSwgMCwgMCwgMCwgMTYyNSwgMCwgMCwgMTM0MiwgMCwgNjQxNzEsIDAsIDEwOTAzLCAwLCAwLCAwLCAwLCAwLCA0NDgyLCAKLSAgICA0MTYwNiwgMCwgMCwgMCwgMCwgNjQzODEsIDAsIDAsIDAsIDQyMjQ1LCAwLCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCAKLSAgICA2NjY4NywgNjY2MTksIDAsIDE5NDk3MiwgMCwgMTEzNDksIDQwOTkxLCAwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgMTE5NywgCi0gICAgMCwgMTE0OSwgMTk0OTcwLCAwLCAwLCA0MDk5MCwgMCwgMCwgMzQ5MiwgMCwgMCwgMCwgMCwgMCwgMTI4MzgsIDAsIDE5OTQ4LCAKLSAgICAwLCAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgMCwgMCwgMCwgODE1MiwgMCwgNjQ0MjgsIAotICAgIDEyMjI3LCAwLCAwLCAxMjgyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAzODYsIDExOTU3NCwgMCwgMCwgMCwgMCwgNjgxNTQsIAotICAgIDAsIDE3NDMsIDAsIDAsIDAsIDY1MTg2LCAwLCAwLCA5NjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTQ5NjcsIDAsIAotICAgIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCAwLCA2NDgzMCwgMCwgMCwgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIAotICAgIDAsIDQ3MzUsIDAsIDYxMTksIDEyODIyLCAwLCAwLCAwLCA3NDgxOCwgMCwgMCwgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgCi0gICAgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIDk1OTYsIDYxMzAsIDAsIDAsIDExNTc5LCAwLCAKLSAgICAwLCAxOTQ3NDAsIDAsIDAsIDY2Njk5LCAwLCAxMDA0LCAwLCAxOTQ3MzcsIDAsIDY2MDA4LCAxMjYyNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAxMTc3NiwgNzU1OCwgMCwgNjU2MjcsIDAsIDEwNzE4LCAxMzE1NCwgCi0gICAgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgMCwgNzM4NzcsIDY1NjI4LCAwLCAwLCAwLCA0MTcwOCwgMTI4NjAsIDQxNzAzLCAKLSAgICAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MzkxNywgMTAwNjEsIDAsIDAsIDUxNDAsIDIwOSwgMCwgNDE3MDQsIDAsIAotICAgIDQzMDc4LCAwLCAwLCAwLCAxMDg5OSwgNjU0NjksIDAsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDAsIAotICAgIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMCwgMCwgNzQ0NjIsIDAsIDEwNDg5LCA0MjE2NiwgMCwgMTA2NTksIDM2MDAsIDAsIAotICAgIDQyMjQsIDEzMzYsIDQxNTE4LCAwLCAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDAsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgCi0gICAgMjcyLCA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKLSAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDAsIDAsIDAsIDAsIDcyMDksIDgyMjMsIDI0MDksIDc3OTksIDAsIDc0NDI0LCAKLSAgICAwLCAwLCA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgMCwgMCwgMCwgNjUxMDEsIAotICAgIDAsIDExNjk0LCAwLCAxMTY5MCwgNTgzNSwgMCwgNjY2MjUsIDEwODQyLCA0MTM1NCwgNDIxMjMsIDQzMDk3LCAxMTY4OCwgCi0gICAgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIDAsIDczODcyLCA3Mzg2NSwgMCwgNjExNCwgMTA4OTgsIAotICAgIDQzMDcyLCAwLCAwLCAwLCAwLCAwLCAxMDY5NSwgMCwgNzU0MCwgMCwgODgxLCA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgCi0gICAgMTMzMTEsIDAsIDQxODU3LCA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgMCwgMCwgNjgxODMsIDAsIDAsIAotICAgIDEyODcsIDU0MzYsIDAsIDAsIDc0MTQyLCAxMjcwMTMsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCAwLCA4OTg1LCAKLSAgICAxMjEwOSwgMCwgMCwgMCwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDAsIDY1NDksIDI3OSwgMCwgMCwgMCwgMCwgCi0gICAgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDAsIDQyMTIyLCAwLCAwLCAwLCAxMTk4NSwgMTM0NSwgMTI3MDA2LCAKLSAgICAwLCAwLCA4OTU2LCA0MzA4MywgMCwgNDIxMzgsIDAsIDAsIDEyMTUxLCAwLCAwLCAwLCA2Mjg1LCAwLCAwLCAwLCA3NDE5NCwgCi0gICAgNDkyLCA4Njg1LCAwLCAwLCAwLCAwLCAwLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDAsIDAsIDQxNTUwLCAwLCAKLSAgICA3MzgzNywgMCwgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDAsIDAsIDEyMDI3NiwgMCwgMCwgNjY1MTUsIDc2NywgNTUyNCwgCi0gICAgNzAyOCwgMCwgMCwgMTE5ODI3LCAwLCAwLCAwLCAwLCAwLCAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAwLCAwLCAKLSAgICA2NTM0MCwgMTE4OTc5LCAwLCAyNDM0LCAwLCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDE5OTMxLCAKLSAgICA0MzIxNCwgMCwgNzU3MCwgMCwgMzE5MiwgMCwgODQxNCwgMCwgMCwgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDAsIDMxNzEsIAotICAgIDY2MjMsIDQ5NjEsIDAsIDg4NiwgMCwgODY1NCwgMCwgOTk5MywgNzQzOTAsIDY0NjAzLCAwLCAwLCA5NTk5LCAwLCA0MzA4NCwgCi0gICAgMCwgMCwgMCwgMjM5OSwgMCwgODk5NCwgMTA5NDQsIDQxMjA4LCAwLCA0MTE2OCwgODE3OCwgMCwgMzM2NywgMTk1MDA4LCAKLSAgICA0MjUxMCwgMCwgMCwgNzc4OSwgMCwgMTk0NywgMCwgMCwgMCwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgCi0gICAgOTE4MSwgMCwgMCwgODAxNywgMCwgNjUwOTYsIDY2NzIwLCAwLCAwLCAwLCA0OTA5LCAxMjEyNiwgMCwgMTIwNjk2LCA0OTA0LCAKLSAgICAwLCAxOTUwMTIsIDEzNjUsIDkyNTMsIDQyNzU3LCAwLCA3NDYyLCAwLCAwLCAwLCAwLCAxMTk1ODcsIDY0NDE1LCAwLCAwLCAKLSAgICA1Mzk4LCAwLCAxOTUwMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDk0NzYsIDAsIDAsIDEyNzYzLCAwLCAzNjI5LCAwLCAxMzAwNSwgCi0gICAgMCwgMzYyOCwgMCwgMCwgMCwgMzQ2OSwgNDIxMDcsIDQyMTE2LCA5MTc1NzgsIDY0ODA5LCAyOTI4LCA0OTA1LCA5ODUzLCAKLSAgICA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgMCwgNDI1ODMsIDkzMTUsIDQ4MjIsIDQ5MDYsIDM4NTIsIDI4NDcsIAotICAgIDAsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgCi0gICAgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCA2MDE4LCAwLCAwLCAxMjI3NiwgMCwgMCwgMCwgMCwgMTE5NjEzLCAwLCAwLCAKLSAgICAxMDQ2NywgMCwgMjQ0MywgMTA5MTgsIDAsIDAsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAwLCAwLCAwLCAKLSAgICAxMTg4MjgsIDAsIDY1Njc4LCAxMjg2NywgMCwgODI2MCwgMCwgNzUxOSwgMTE4Nzk0LCAxMjI3NCwgODkwNCwgNTE4LCAKLSAgICA2NTg1NywgMCwgMCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDExOTU4MywgNDMxMjUsIDEyMDU5MiwgMCwgMCwgCi0gICAgMCwgMCwgNTEzNiwgMTk2OCwgMCwgMTk1MDIzLCAxMzM3LCA2NDk2NywgMTYyOSwgMCwgNzk2LCA2NjUwNiwgMCwgNzQxMjMsIAotICAgIDAsIDAsIDQyMzE0LCAxOTUwMjEsIDAsIDc0NDAzLCA2MTIwLCA0NzgsIDY1MTUxLCA2ODEyOCwgMCwgNDMwODIsIDYwMTYsIAotICAgIDAsIDQyMjg0LCAwLCA0Mjc2LCAxMjA2LCAzNjE5LCA0MTYzOCwgMCwgMzg0MywgMTIwMTEsIDg4NTMsIDMzNjEsIDAsIDQ5MCwgCi0gICAgMTA3MTUsIDc1NzgsIDAsIDAsIDY1MzUwLCAxMDUzMCwgMTIzNDgsIDg2NTMsIDc0MzE0LCA0MjQzNSwgNjE1NCwgOTU1MSwgCi0gICAgNjUzNTQsIDAsIDc4NCwgNDIzOTcsIDMzNCwgMCwgNDI0MTYsIDY1MzU2LCA2NTI3MywgMCwgMCwgNzAyNSwgMTAzNjQsIDAsIAotICAgIDc3OCwgNDE2MjYsIDQyNDU1LCA3OTg5LCA3NDA2MywgMzIyNywgMCwgMCwgNzM5ODMsIDI5MTUsIDQxNjk4LCA0MTAyMiwgCi0gICAgNDE3MDIsIDEwMzA5LCAxMjcwMzUsIDAsIDAsIDY5NzUsIDAsIDU0MTUsIDEyMTc2LCAwLCAwLCAzNDYyLCA2NTIxNSwgCi0gICAgNDI2MjksIDAsIDczNzg0LCAwLCAwLCA5NzU5LCAwLCAwLCAwLCA4MTE0LCAwLCAwLCAwLCAwLCA4NzEwLCA0MjQ5NSwgCi0gICAgMTE4OTU2LCAwLCA0MDUxLCAxMDQ2MCwgNzQwOTcsIDExODkxNywgMTM1NiwgMTIxNjEsIDAsIDAsIDAsIDE2MTksIDk3MDMsIAorICAgIDY2NjU3LCA2OTgwLCAwLCAxMjAwMzUsIDc4NDg0LCAwLCAwLCAxMjAwMzMsIDc4NDg2LCAwLCAwLCAxMjAwMzksIDQyNjgzLCAKKyAgICAwLCAwLCA5NjI0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgCisgICAgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5ODIxLCAKKyAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMCwgMTAzODgsIDQyNzk5LCAwLCA0MTAxMywgMTA1NjgsIDAsIDAsIAorICAgIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgNDI2MDgsIDc4NDY5LCAKKyAgICA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIDE2MDksIDkwMiwgMCwgCisgICAgNjM5MzYsIDAsIDExNjYxLCA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgMjU1NCwgNTE1OCwgNTcxNCwgCisgICAgMTI3MDE1LCAwLCAwLCA4MDcsIDQzMDc5LCAwLCA3ODQ3NSwgOTc2LCA1NTExLCA2NDU1MywgMCwgNDIxNTUsIDAsIDQxMzU2LCAKKyAgICA3NDExMCwgMTE4ODAxLCAwLCAwLCA4Njc2LCAwLCAwLCAxMTA2NiwgNDUxLCA2Mzk0MSwgNTc5OCwgOTM0OSwgNDIwMTgsIDAsIAorICAgIDAsIDAsIDQzNjA5LCAxOTQ3MDMsIDEyMDU1MywgMTQ0MCwgMCwgMTk0NzAxLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgCisgICAgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIDAsIDQzMzkzLCAxMDA5NCwgMCwgMTE1MjksIDEwODU3LCAxMjA2NDMsIAorICAgIDY2NDM2LCA2NTQ2LCA5MywgODEwMiwgMCwgNjg0MDUsIDAsIDAsIDgxNzEsIDAsIDExOTA5NywgMTI3MDY0LCA5MTc1NDMsIAorICAgIDM4MywgMTAzNzcsIDQxNjU2LCAwLCAwLCAwLCA1MTg3LCAwLCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgNjQyMTcsIDAsIAorICAgIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgMCwgODI5MiwgMTk1MDc0LCA0OTgwLCA4ODYwLCA3Mzk0NywgCisgICAgMTAwMjgsIDY2NDc4LCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIDAsIDc4Nzg1LCAwLCAKKyAgICA3OTAwLCAwLCAxMTMwOSwgNzgzMTksIDQxOTgsIDQyNzI1LCAwLCA2NzY1NiwgNzg4MTksIDAsIDAsIDAsIDEyOTMxLCAwLCAKKyAgICA0MjY4NCwgNzQyODUsIDIwODgsIDAsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAwLCAwLCAxMjgzNiwgMCwgCisgICAgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIDAsIDE5NDY1MCwgMCwgCisgICAgMCwgOTM0MiwgMTIwNDY0LCAwLCA2NDUxNiwgMCwgNzg3OTIsIDEwMTI5LCA0MTAwNywgNzQzNzUsIDAsIDQwOTk1LCAKKyAgICAxMjIwOSwgNDEwMTIsIDExOTEzNiwgMCwgMCwgMTIwNjMzLCA0MDk5MiwgMCwgMCwgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCAKKyAgICA2MSwgMCwgNzQxMDUsIDM2MzMsIDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIDc4MjgxLCA5NzcxLCAwLCAxMzI1MSwgMCwgMCwgCisgICAgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCA0MTAwMiwgNDA5OTksIAorICAgIDExOTYyMywgNDMyNjYsIDAsIDAsIDEwODkwLCA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAwLCAKKyAgICA2NDczNywgMCwgMCwgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAKKyAgICAwLCAwLCA3NzQzLCAwLCAwLCA3NzkwNCwgMCwgNzc5MDUsIDkwMzQsIDYwMzksIDAsIDEwMDc1LCAwLCA0MTAxOCwgNjU2ODMsIAorICAgIDEwMzM4LCA2NjQ2OSwgMCwgMCwgMCwgNDI4MTUsIDAsIDQxOTY2LCAwLCAwLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCAKKyAgICA5MTEsIDc1MzksIDAsIDAsIDEyMDMzOSwgNjUxNTksIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIAorICAgIDQyODEyLCAwLCAwLCAxMjMyNiwgMCwgMCwgNDI4MDgsIDAsIDkzNDgsIDY0OTAxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5MTc1ODQsIDQzNzAyLCAwLCA1ODU3LCA2NTM0MiwgMCwgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCAKKyAgICA0MTkwOSwgMCwgMTIwMzMyLCAyNzkxLCAwLCAxODkxLCA2OTgyNCwgMCwgNDE5MDcsIDY2NjQ3LCAwLCA4NzYxLCAxMjk0MiwgCisgICAgNTc0OCwgMCwgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAxMzE0NiwgMCwgNjM5MzEsIDAsIAorICAgIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCAwLCAwLCAwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIAorICAgIDAsIDAsIDAsIDE5NDk0MCwgMCwgMCwgNDM2NzksIDkxNzU4NSwgNjUxMTcsIDE5NDkzOSwgMCwgMTA0MjcsIDAsIDM4NDQsIAorICAgIDAsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAwLCAxOTQ5MzQsIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCAwLCAKKyAgICAxOTQ3MjAsIDY1MDU2LCAzNjIwLCAwLCA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIAorICAgIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgMCwgOTE3NywgODkwMiwgMCwgOTgzOSwgMCwgMTI4OTEsIDAsIDAsIDYzOTk5LCAKKyAgICAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIAorICAgIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgMCwgNDUwOCwgNjQ4ODMsIDAsIDAsIDAsIDAsIDY0NTkyLCA3NDI3NiwgCisgICAgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCA2NjQ3MiwgCisgICAgMCwgNjQyODksIDY1Mjg5LCA3ODE1MSwgNjY2NTgsIDE5NDkyOSwgNjQ1MDksIDc4MTUyLCAwLCAwLCAxMTA1MSwgMCwgMCwgCisgICAgMTEzNTUsIDY1ODg1LCAwLCAwLCA0MTIxNCwgMCwgMTIyOTksIDAsIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIDk5NjMsIAorICAgIDY4NjQ5LCAwLCA0MDQwLCAwLCA2MTY3LCAwLCA2MzkyMiwgNjU5NCwgMCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIDYzODcsIAorICAgIDYzOTkwLCAxOTk0NywgNjM5ODgsIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIDAsIDY4MDMsIDAsIDc3MzgsIAorICAgIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIDEyMDMzMSwgMzQzNSwgNzgxNjQsIDAsIDExOTEwOCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAKKyAgICAxMTg4OTgsIDEyNzQ4LCA0Mjc0MiwgOTUxNywgMTE1MTgsIDAsIDc4NzkwLCAwLCAxOTQ3NzcsIDYzOTU2LCA0MjQ1OCwgCisgICAgNjM5NTQsIDYzOTUzLCA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAxMTQ2OSwgMCwgNDIzMDYsIDI3MjMsIAorICAgIDExODk0NywgMCwgMCwgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgCisgICAgNDI3MCwgMCwgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAKKyAgICAxMjAxMywgMCwgMCwgMCwgNDE1LCA2Mzk2NCwgNjM5NjMsIDQyMzQ1LCAwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgCisgICAgMCwgNjM5NjEsIDQ0NzIsIDAsIDAsIDc4MTU5LCAwLCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAwLCA3MDgxLCAxMDczMCwgCisgICAgNzY5MSwgMTAzMzEsIDYzODMwLCAxMTk2MjUsIDE5NDk0NSwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAxNjA0LCAKKyAgICA5NTY1LCAxMDUzOSwgMCwgNjU3NjQsIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCA2NDg3MywgMTE5OTIsIAorICAgIDAsIDAsIDYzOTgwLCAxMTgwMSwgMzYyMiwgMCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgNjM5ODEsIDQ5NjcsIDY0MTg5LCAKKyAgICAxOTY2LCA0MzYyOCwgMCwgMCwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCAKKyAgICA0MDIsIDAsIDEzMTQ3LCAwLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAwLCAKKyAgICAxMTMwMiwgNjI1OSwgNDMzOTUsIDAsIDAsIDE5NDY3MCwgMCwgMCwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCAwLCAKKyAgICA2NDk0MiwgMCwgMTk0NzMzLCAwLCAxOTQ3MzIsIDAsIDc0MzAxLCAwLCAxMTI4MCwgMCwgNjk3ODQsIDc0MDYwLCAwLCAwLCAKKyAgICAxMTk2NjQsIDUxNDUsIDEyNDg2LCA2NTAxOCwgNjY1MTYsIDU0MDksIDAsIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgCisgICAgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgMCwgMCwgNTQwNSwgOTE3NTU1LCA2NDg2NiwgMCwgMCwgMCwgCisgICAgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCA2NDY5MCwgMzI1NCwgMCwgMCwgMCwgNDIzOTAsIDQzNjc4LCAxOTQ3MjUsIAorICAgIDAsIDY1MDc3LCAwLCA2Mzg4LCAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgMCwgMzM3NywgMCwgMCwgMCwgCisgICAgMCwgNzgyMjgsIDAsIDAsIDQyNjkxLCA5MTc4ODYsIDAsIDc0NzY3LCAwLCAwLCAxMzc5LCAyNDYsIDAsIDAsIDM3ODgsIDAsIAorICAgIDExMDQxLCAwLCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2NTYsIDAsIAorICAgIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAwLCAxMzE2MywgMCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIAorICAgIDY1ODg5LCA0MjE2OSwgNDc1NSwgNzQyNDQsIDAsIDExNDQzLCAwLCA2NjMxOSwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAxMjE5LCAKKyAgICAzOTM0LCA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgNDI0NDIsIDY1NDcwLCAwLCA2NDIwMiwgMTMxNjAsIDc3NTksIAorICAgIDQyNDgyLCA0ODUsIDAsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgNDI0MzEsIAorICAgIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAwLCA0MzUzOSwgCisgICAgNTQxMSwgNDIxOTYsIDAsIDAsIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCA5MzM3LCAxMjA1MiwgCisgICAgMTA2NDMsIDU1MjcxLCAwLCAxOTQ2ODQsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIDY1NjExLCAwLCAwLCAxOTQ3NTYsIAorICAgIDc0MzEwLCA2NTU0LCAwLCAxMTkxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCAxMTg4MjYsIDI3MTMsIDAsIDk2NTAsIAorICAgIDQzMzMwLCAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDAsIDAsIDY4MjIzLCA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCA0MTQxLCAKKyAgICA5NjgyLCA2NTI4NywgMTUwOCwgMTk0OTYzLCA4Nzc5LCAxMDU2OSwgODcyNSwgMTMyOTksIDY2NjM4LCA2NTc1MCwgNDIyNjMsIAorICAgIDQxNDUsIDYzODAsIDY1NzUxLCA2NjYxMywgNDM5OTQsIDY1NzM4LCA1NTI1MCwgOTE4NSwgOTU1MCwgMCwgNDM0MDMsIDAsIAorICAgIDAsIDAsIDY1NzM2LCA0MTk1MSwgNjQ4MTYsIDY1NzU2LCAwLCAxMjk1NSwgMTA1OTYsIDI4ODgsIDAsIDAsIDAsIDk2NTcsIAorICAgIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgMTk0OTYxLCAwLCA2ODY3OSwgMCwgNzUwMSwgNjMyOCwgMCwgCisgICAgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgMCwgMTA2MzIsIAorICAgIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgMCwgMCwgMTE4ODg3LCAxNzkxLCA1MTkxLCA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgCisgICAgNDMzOTQsIDU1NSwgMCwgMCwgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCA3Mjg5LCA3NDA1NSwgMCwgODg1NCwgCisgICAgNjQxNjIsIDU4NTgsIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMCwgCisgICAgMTMxNTgsIDAsIDcyMTEsIDAsIDkzNzEsIDczOTczLCAwLCA2ODI4LCAxNjI1LCAwLCAwLCAxMzQyLCA2ODQ0MCwgNjQxNzEsIAorICAgIDAsIDEwOTAzLCAwLCAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMCwgMCwgMCwgNjQzODEsIDAsIDAsIDAsIDQyMjQ1LCAKKyAgICAwLCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgNjY2MTksIDAsIDc4MDI1LCAwLCAxMTM0OSwgNDA5OTEsIDAsIDAsIAorICAgIDExOTU5OSwgMTIwODMwLCAwLCAxMTk3LCAwLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCAwLCAwLCAzNDkyLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMjgzOCwgMCwgMTk5NDgsIDAsIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCAKKyAgICAwLCAwLCAwLCA4MTUyLCAwLCA2NDQyOCwgMTIyMjcsIDAsIDAsIDEyODI4LCAxMjc1MTEsIDAsIDAsIDEyMDcwOCwgMCwgMCwgCisgICAgMTAzODYsIDExOTU3NCwgMCwgMCwgMCwgMCwgNjgxNTQsIDAsIDE3NDMsIDAsIDAsIDAsIDY1MTg2LCAwLCAwLCA5NjA2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTQ5NjcsIDAsIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgNjQ4MzAsIAorICAgIDAsIDAsIDQxMDkxLCAzNDI2LCAxMzQ0LCA4ODcwLCAwLCAwLCA0NzM1LCAwLCA2MTE5LCAxMjgyMiwgNDI2OTksIDAsIDAsIAorICAgIDc0ODE4LCAwLCAwLCA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgCisgICAgMCwgNzE3MCwgOTU5NiwgNjEzMCwgMCwgNDM2MjksIDExNTc5LCAxOTQ3NDEsIDAsIDE5NDc0MCwgMCwgMCwgNjY2OTksIDAsIAorICAgIDEwMDQsIDAsIDE5NDczNywgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCA0MzM4MiwgMTEzMDAsIAorICAgIDQzMzA0LCA5Njg2LCA1ODkwLCAxMTc3NiwgNzU1OCwgMCwgNjU2MjcsIDAsIDEwNzE4LCAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgCisgICAgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDAsIDAsIDQxNzA4LCAxMjg2MCwgNDE3MDMsIDEyMDY5LCAKKyAgICAxMDgzOCwgNTQwMywgMTAzNTIsIDczOTE3LCAxMDA2MSwgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMCwgNDE3MDQsIDQxMDU2LCAKKyAgICA0MzA3OCwgMCwgMCwgMCwgMTA4OTksIDY1NDY5LCAwLCAwLCAwLCAyNDEwLCA5OTMsIDAsIDEyMDU4OSwgMTIwNjg5LCAKKyAgICA3ODY5MywgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAwLCAwLCA3NDQ2MiwgMjA2NiwgMTA0ODksIDQyMTY2LCA0MzQ2MywgCisgICAgMTA2NTksIDM2MDAsIDAsIDQyMjQsIDEzMzYsIDQxNTE4LCAwLCAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDAsIDEyOTY2LCAKKyAgICA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgCisgICAgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAwLCAwLCAyMDk5LCAKKyAgICA1MTIwLCAyNDA5LCA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIAorICAgIDAsIDk5MTMsIDAsIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgMCwgMTE2OTAsIDU4MzUsIDAsIDY2NjI1LCAKKyAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKKyAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCAwLCAwLCAwLCAxMDY5NSwgMCwgNzU0MCwgCisgICAgMCwgODgxLCA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgNjQzMjEsIDgzNTksIDAsIAorICAgIDEyNjg5LCAwLCAxOTQ1OTQsIDAsIDAsIDAsIDY4MTgzLCAwLCAwLCAxMjg3LCA1NDM2LCAwLCAwLCA3NDE0MiwgMTI3MDEzLCAKKyAgICA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgMCwgODk4NSwgMTIxMDksIDAsIDAsIDAsIDAsIDAsIDM2NTIsIDEwNTM3LCAKKyAgICAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIDI3OSwgNzM3NDUsIDAsIDAsIDAsIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIAorICAgIDQyMTI0LCAwLCA0MjEyMiwgMCwgMCwgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgMTE5ODMwLCAKKyAgICA0MjEzOCwgNzg2MTAsIDAsIDEyMTUxLCA3ODYwOCwgNzg2MDQsIDc4NjA1LCA2Mjg1LCA3ODYwMywgNzg2MTIsIDc4NjEzLCAKKyAgICA3NDE5NCwgNDkyLCA4Njg1LCAwLCAwLCAwLCA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIAorICAgIDc4NjE2LCA0MTU1MCwgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDAsIDQxOTQ0LCAKKyAgICAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIAorICAgIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMCwgMCwgNjUzNDAsIDExODk3OSwgNDE1NTEsIAorICAgIDI0MzQsIDAsIDAsIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIDc1NzAsIDAsIAorICAgIDMxOTIsIDAsIDg0MTQsIDAsIDAsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCAwLCAzMTcxLCA2NjIzLCA0OTYxLCA2ODM5NiwgCisgICAgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgMCwgNjkyNDEsIDk1OTksIDc4NjI5LCAKKyAgICA0MzA4NCwgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgMCwgODk5NCwgMTA5NDQsIDQxMjA4LCAwLCA0MTE2OCwgODE3OCwgCisgICAgMCwgMzM2NywgMTk1MDA4LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCA3ODYzNCwgMTk0NywgMCwgMCwgMCwgNDI3NTksIAorICAgIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgNjUzNTksIDAsIDgwMTcsIDAsIDY1MDk2LCA2NjcyMCwgMCwgCisgICAgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAwLCAxMjA2OTYsIDQ5MDQsIDAsIDE5NTAxMiwgMTM2NSwgOTI1MywgNDI3NTcsIAorICAgIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxOTUwMTQsIDAsIDAsIDAsIAorICAgIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgMCwgMTI3NjMsIDAsIDM2MjksIDAsIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCAwLCAKKyAgICAzNDY5LCA0MjEwNywgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIAorICAgIDQzMDg2LCA5MTE0LCAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgCisgICAgMTI1MSwgNzc3NywgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCAKKyAgICA2NTgyMSwgMCwgNjAxOCwgMTE5ODE0LCAwLCAxMjI3NiwgMCwgNjgzNzIsIDAsIDAsIDExOTI0NCwgMCwgMCwgMTA0NjcsIDAsIAorICAgIDI0NDMsIDEwOTE4LCA3ODIxNywgMTE5ODI1LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMCwgMCwgMCwgCisgICAgMTE4ODI4LCAxMjc1MDQsIDY1Njc4LCAxMjg2NywgMCwgODI2MCwgNzc5NDUsIDc1MTksIDExNTA1LCAxMjI3NCwgODkwNCwgCisgICAgNTE4LCA2NTg1NywgMCwgMCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDExOTU4MywgNDMxMjUsIDEyMDU5MiwgCisgICAgMCwgMCwgMCwgMCwgNTEzNiwgMTk2OCwgMCwgMTk1MDIzLCAxMzM3LCA2NDk2NywgMTYyOSwgMCwgNzk2LCA2NjUwNiwgMCwgCisgICAgNzQxMjMsIDEyODc3LCAwLCA0MjMxNCwgNDMzODgsIDAsIDc0NDAzLCA2MTIwLCA0NzgsIDY1MTUxLCA2ODEyOCwgMCwgCisgICAgNDMwODIsIDYwMTYsIDAsIDQyMjg0LCAwLCA0Mjc2LCAxMjA2LCAzNjE5LCA0MTYzOCwgMCwgMzg0MywgMTIwMTEsIDg4NTMsIAorICAgIDMzNjEsIDAsIDQ5MCwgMTA3MTUsIDc1NzgsIDY4Mzg0LCAwLCA2NTM1MCwgMTA1MzAsIDEyMzQ4LCA4NjUzLCA3NDMxNCwgCisgICAgNDI0MzUsIDYxNTQsIDk1NTEsIDY1MzU0LCA3ODUyMiwgNzg0LCA0MjM5NywgMzM0LCAwLCA0MjQxNiwgNjUzNTYsIDY1MjczLCAKKyAgICA3Nzk4NywgMTI3MjY1LCA0NDQyLCAxMDM2NCwgMCwgNzc4LCA0MTYyNiwgNDI0NTUsIDc5ODksIDc0MDYzLCAzMjI3LCAwLCAKKyAgICAxMjcyNzUsIDczOTgzLCAyOTE1LCAxMTUwMiwgNDEwMjIsIDQxNzAyLCAxMDMwOSwgMTI3MDM1LCA3ODMyMCwgMCwgNjk3NSwgCisgICAgMCwgNTQxNSwgMTIxNzYsIDAsIDAsIDM0NjIsIDY1MjE1LCA0MjYyOSwgNzg2OTEsIDczNzg0LCAwLCAwLCA5NzU5LCAwLCAKKyAgICA3ODMyNCwgMTI3MjU0LCA4MTE0LCA3ODY5OCwgNzg2OTcsIDc4Njk2LCA3ODY5NSwgODcxMCwgNDI0OTUsIDExODk1NiwgMCwgCisgICAgNDA1MSwgMTA0NjAsIDQzMzY0LCAxMTg5MTcsIDEzNTYsIDEyMTYxLCA0MjcxMywgMCwgMTI3MjY4LCAxNjE5LCA5NzAzLCAKICAgICA0MzE1MiwgNDI0ODksIDQyMTEyLCAwLCAxODc1LCAxMDgwOCwgNDIxMDksIDEyMDI4NCwgNDE4NjAsIDY0ODYyLCAxMzMwNSwgCi0gICAgNjQ5MDcsIDUyODksIDEzMTQ0LCAwLCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDc0NDkzLCAwLCAwLCAwLCAKLSAgICAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDAsIDAsIDExMjY5LCAwLCA3Mzc1OSwgNDMxMDAsIDc0NDQ5LCAKLSAgICA2NTUwOCwgMCwgMCwgMCwgODkzNSwgOTE3OTg1LCAwLCAwLCAwLCA2MTYsIDAsIDY1MTc4LCA0Njg0LCAwLCAxMTk2NTMsIDAsIAotICAgIDAsIDAsIDYwNDgsIDc0NDYwLCA0MjExMCwgNzM5NjUsIDEwODcwLCA4NTU3LCAxMTA1NCwgMCwgMCwgOTY4MSwgNDQ3NSwgMCwgCi0gICAgMCwgMCwgMCwgMTIwNzMxLCA2MDM1LCAwLCA3NjUxLCAxMDI5NiwgMCwgMCwgMCwgMCwgMCwgMTE4OTY2LCA3NDE0NCwgCi0gICAgNDA5OTcsIDAsIDEwMzkyLCAxMDMyOCwgNDA5OTgsIDAsIDc0NDg4LCAwLCA5ODAwLCA4OTc5LCAwLCAxMTkxMzEsIDQxMDAwLCAKLSAgICAwLCAxMTkyMzksIDY0ODcsIDEwOTc3LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDAsIDAsIDEwMjIwLCA2NjUwNSwgCi0gICAgNDEyMDAsIDAsIDQ0MjUsIDAsIDAsIDAsIDQzMDc0LCA3Mzc5OSwgMCwgMCwgMCwgMTIxNzMsIDAsIDAsIDAsIDY1MzM4LCAwLCAKLSAgICAwLCAxMTk1ODIsIDQ0NzQsIDAsIDQzMDkzLCAwLCAxNTg3LCAwLCAwLCA2NDQ3NSwgMCwgMTM2OSwgMCwgMCwgMCwgMCwgCi0gICAgNDU2MCwgMCwgMCwgMCwgMCwgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgMCwgMCwgODE5NCwgNjU0NjIsIAotICAgIDEwNjI2LCAxMDk2NSwgMCwgODg5MywgMCwgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMCwgMTA0NzUsIDAsIAotICAgIDAsIDEzNTIsIDExMDY5LCA3NzA3LCAwLCAwLCA2NTI3OSwgMTI3MTAyLCAxMjcxMDEsIDEyNzEwMCwgNjU2MDUsIDYwNDAsIAotICAgIDEyNzA5NywgMTA0NDAsIDAsIDkzMzYsIDAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCA2NDI1OSwgMCwgNjUxODgsIDc4MjAsIAotICAgIDQzMDE4LCAwLCAwLCA3NzQ2LCAxNDkyLCAwLCAxMDg4NCwgMCwgMCwgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCAKLSAgICA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCAwLCAxMjA3MjAsIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIAotICAgIDU0OTcsIDExNzA4LCAwLCAwLCAwLCAwLCA4MjI0LCAwLCA4OTM4LCA2MDQzLCAxMjczOCwgMCwgMCwgNTMyMSwgMCwgMCwgMCwgCi0gICAgMjU4OSwgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCAwLCAxMjAyOTYsIDY2NzA0LCAwLCAwLCAwLCAwLCAKLSAgICA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDAsIDU3MzEsIDEzODEsIAotICAgIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNjU1MTQsIDAsIDk2MDEsIDI4NzksIDk2NjgsIDk3NjYsIAotICAgIDAsIDU3MjksIDAsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAyODg3LCAwLCAzNTI2LCA2Mjk4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4NTcyLCA2MDIxLCAwLCAwLCAwLCA0MzE1NSwgMCwgMCwgMzE0NiwgMTA5NTksIDAsIDAsIDAsIAotICAgIDEwOTgxLCAxNjYsIDAsIDg2MzUsIDAsIDEwNjIzLCA0MDgsIDAsIDAsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgMTI3MTcsIAotICAgIDAsIDc2MDcsIDEwNjM5LCA2NjcxMywgMCwgMCwgNDE2NDMsIDc0MTM0LCAwLCA4NzEzLCA0MTY0MCwgMCwgNDE2NDUsIAotICAgIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDAsIDAsIDM0NzIsIDg2OTcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgMCwgNzQ1NzIsIDAsIDQyMTM2LCAwLCAwLCAwLCAwLCAzMjQ3LCAxMTk4NTQsIAotICAgIDY1MDE3LCAwLCAwLCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIDAsIDQxNTY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIDAsIDQwOTg4LCAwLCAwLCA0MTcyNywgMCwgMCwgMjM5NiwgMCwgMCwgCi0gICAgMCwgMCwgNjQ5NDAsIDAsIDM4ODYsIDAsIDQyNDU3LCAwLCAwLCA5OTYsIDAsIDkxNzU3MSwgNDI0OSwgMCwgOTE3NTk0LCAKLSAgICAxMTcwNywgODIyMiwgMCwgNzkzOSwgMCwgOTE3NTc0LCA5MTc1ODIsIDkxNzU5MiwgOTE3NTY5LCA4NTM0LCAwLCA0MDk4MywgCi0gICAgMCwgMCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMCwgMCwgMTAwNTIsIDQwOTgyLCAwLCAwLCAxNDg4LCAwLCAKLSAgICAwLCAwLCA5MTc1NTksIDAsIDAsIDE1NjMsIDAsIDk2MTksIDAsIDAsIDAsIDAsIDAsIDU4MDMsIDc3OTcsIDYwNzAsIAotICAgIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCA2NTAwOSwgMCwgMTI1NjcsIDAsIDAsIDAsIDAsIDAsIDM2MDcsIDY1ODYzLCAKLSAgICAxMDA0NiwgOTYxMiwgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMDg1LCA2MDU3LCAKLSAgICA1MDgsIDAsIDAsIDEyMDI2NSwgMCwgMCwgMCwgMCwgNjM4LCA2MDgzLCAxMTkwNzIsIDAsIDAsIDIzMDUsIDAsIDAsIDAsIAotICAgIDYwNTYsIDY2NTksIDAsIDAsIDYwODUsIDAsIDAsIDM5MTUsIDQxNjM0LCAwLCA0MTYzOSwgNjM5MTIsIDExOTQxLCAwLCAKLSAgICA0MDI4LCAxNzg3LCA0MjE4MCwgNDMwOTYsIDAsIDMyNDksIDE3NjgsIDAsIDEyMzI4LCA1MDEsIDEyNzA3NCwgMTA2MDEsIDAsIAotICAgIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCAxMTkzNTAsIDY1MDUsIDc0MDEwLCAwLCAxMzA2NCwgMCwgMTIwODEwLCA2NTAwLCAKLSAgICA1NTI2LCA2NTA0OSwgMCwgNzQ1MzEsIDAsIDAsIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDAsIDE3NzEsIDAsIAotICAgIDg5MzYsIDAsIDAsIDQyMDgsIDAsIDExOTExNSwgMCwgMCwgMCwgNzQxMDEsIDAsIDExNzYyLCAwLCAwLCAwLCAwLCA2NjQ3NSwgCi0gICAgMCwgNTAyNywgMCwgMCwgMCwgNTA2OSwgNzM4NjIsIDUwMjgsIDk4OTcsIDAsIDczNzM5LCA1MDI2LCAwLCAwLCAwLCAwLCAKLSAgICA4OTMxLCAwLCAxNDE1LCA4ODY2LCA0MTkwMSwgNzQ3OTAsIDAsIDExOTM2MSwgMCwgNDMxMDYsIDUwMjksIDExOTM2MCwgCi0gICAgMTU4MCwgMzU5OCwgMCwgNDEwNzAsIDAsIDAsIDM0NDAsIDExOTM1OSwgMTU2MiwgMCwgOTE3ODI3LCAxMTkzNTgsIDE3MTYsIAotICAgIDAsIDEwNjAwLCAwLCA2MjAsIDQxMDAxLCA2MDI4LCAwLCA0Mjg5MiwgMCwgNzQ4MjIsIDUwMjQsIDEyMDgyOSwgNDEwMDMsIAotICAgIDAsIDUwMjUsIDAsIDAsIDAsIDExOTMyOCwgMCwgNjU1NTcsIDAsIDAsIDAsIDExNTk5LCAwLCAxMTYwMiwgNjI0MywgCi0gICAgMTE1NzQsIDExNTgxLCAxMTU5NywgMTE1OTgsIDYyNTMsIDYxMDUsIDExNTg0LCA3NDE5NSwgMTE1NjksIDY1Mjc1LCA4OTA2LCAKLSAgICAxMjcwOTYsIDY2NDkxLCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDAsIDQxNTQwLCA3ODE1LCAxMTYxNiwgNjk3OSwgMTIwODAsIAotICAgIDc3MjEsIDExNjA0LCA3ODY5LCAxNTkyLCAwLCA0MjE1MiwgMCwgNDEwNDgsIDAsIDgyOSwgMCwgMCwgMTk5NTAsIDAsIDAsIAotICAgIDY2MTYsIDAsIDExODg3NSwgMTA5NTMsIDM5MSwgMCwgMCwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCAwLCAKLSAgICA2NjM3MCwgMCwgNDIzMzUsIDAsIDAsIDAsIDc1MzgsIDUzMTUsIDAsIDQyNDkxLCAwLCA0MjA2MSwgMCwgNDU3NiwgMCwgMCwgCi0gICAgMTIwMjQxLCA0Mjc3LCAwLCA0MDM5LCA2NDQ3MiwgNDIzMzgsIDM2OCwgNDIwNTgsIDM5NjAsIDExMDQzLCAxMTMzNywgCi0gICAgMTIwMjQ3LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgMCwgOTkyMSwgNDI0NTEsIDkxNzgxOCwgNDExNDcsIAotICAgIDQyMDY0LCAxMTk1OSwgNDI0MDQsIDQxMTYwLCAwLCAzNjE4LCAwLCAwLCA0MzMwMCwgNTE1NiwgMCwgMCwgOTI5LCAwLCAKLSAgICA5MTc4MjIsIDQyNDM3LCAxNTU1LCAwLCA4NjkxLCA2NjQzNSwgMCwgNDE2NjIsIDAsIDAsIDAsIDAsIDAsIDQ1NzgsIAotICAgIDY0NTEzLCA0MTY2NCwgMCwgNDI1NzgsIDAsIDQxNjYxLCAwLCA0MzMwNSwgOTM1NiwgMCwgMCwgMCwgMTI4NiwgMTAxNjYsIAotICAgIDAsIDAsIDY0NzA3LCAwLCA0MjQ3NiwgNzczMCwgMCwgMCwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIAotICAgIDQzMzU5LCAwLCA2NjQxLCA1MjUsIDQxNjI3LCAwLCA4NzYzLCAwLCA0MTYyOCwgNTMzLCAxMTkzMSwgNjUyMjUsIDgzMjEsIAotICAgIDQyNTA0LCA0MjU4MSwgMCwgNjkxNSwgNDIzMTAsIDQzNzcsIDg1NTksIDAsIDEyMDIzNCwgMCwgMTMxOTMsIDY0MzUwLCAKLSAgICAxMTY2NiwgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDAsIDAsIDczODQwLCAwLCAxMTM3NCwgMCwgMTA4ODksIDkxNzkwOSwgCi0gICAgNzc1NywgNDI0NjIsIDEyMDIyNiwgMTI2OTk0LCA2NjQ5MywgMjcxOCwgNDE2OCwgNzM4NDIsIDEzMzA4LCAxMjAxMTIsIDAsIAotICAgIDExNzksIDQ0NDAsIDAsIDAsIDM2MywgMTEwMTUsIDAsIDAsIDY0Mjk2LCAxMjcwOTAsIDY2NjkyLCAxMjA4MjYsIDAsIAotICAgIDY2NDkyLCA2NTkzLCA2NDYyNSwgNDE5NjMsIDAsIDExOTMyOSwgMCwgMTAwMTMsIDAsIDAsIDEyNzA5NSwgOTQ5MiwgCi0gICAgMTE3ODIsIDY0MzgyLCAxMjgzMywgMCwgMCwgMTI5NywgNDE2MzAsIDYzMCwgMTI3MDk0LCAwLCAwLCAwLCAxMDQzLCAwLCAwLCAKLSAgICAxMDA5MCwgMCwgMCwgMzEzLCA5MTc1NjMsIDQxODgxLCAwLCA0MjMxMSwgNzQ0NSwgMCwgNTc1MCwgMTA3NTksIDk0MTksIDAsIAotICAgIDk0MDUsIDExMjY4LCAwLCA5Mzk4LCA4NTI2LCA5Mzk5LCA5NDIyLCAwLCA2NjQ5NSwgMCwgMCwgMCwgNDE3MTgsIDEwNzA3LCAKLSAgICAxNjAzLCAwLCAwLCAwLCA2MzEsIDAsIDAsIDEzMTYxLCA2NTI3MiwgMCwgMTA1NDYsIDc0MjEwLCAwLCAxMTYwMCwgMCwgCi0gICAgMjc5NywgNzM4MjEsIDQyNDI3LCAzMDYsIDcxNCwgMzA1OCwgNDIzODEsIDEyMDAzNiwgMTI3MDgwLCAxMjM1MSwgNDIzOTUsIAotICAgIDAsIDExNjA3LCAwLCA0MjI4MiwgMCwgMCwgOTE1NywgNzM3NjUsIDY2MzY0LCA0MjQzMywgMCwgNzYwMywgMTI4MDMsIDE4MCwgCi0gICAgNDIxNDEsIDAsIDEyMDYxMiwgNjY0OTQsIDEyNjc0LCA4MjQ0LCAzNjIsIDAsIDAsIDgwMzcsIDkxNzgwNCwgMTE1MzUsIDAsIAotICAgIDc0ODQ1LCA1MTg1LCA2NjY5NiwgNTUyMSwgMTAzMzQsIDU1MTksIDAsIDEwMzAyLCAwLCAxMDEwNCwgMTAyNywgNTE4MSwgMCwgCi0gICAgMCwgMTA1MjMsIDE0NDYsIDQyMzIwLCA0MTY0NiwgOTkxLCA1MTg5LCA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgCi0gICAgNTU4MSwgMCwgMzQwNSwgMCwgMTk0NjQ0LCA1NTIzLCAwLCA0MjYyMCwgMCwgMCwgOTU0OSwgMCwgMTA1NDksIDAsIDk2NjEsIAotICAgIDY2NDg2LCAwLCAxMjA1MzcsIDEyMDAyNiwgMCwgMCwgMCwgMCwgNDE5OTEsIDAsIDAsIDc2MzAsIDk4NDYsIDc2ODQsIAotICAgIDEwMzUwLCAwLCAxMTc0LCAwLCAwLCAwLCAwLCA2NjQ4NSwgMCwgNDIyNzcsIDAsIDQyNDU2LCA2NTY2NywgMCwgMTIzMzAsIAotICAgIDAsIDAsIDQyNDE3LCA0MjM4MywgMCwgNDEzNDQsIDYyOTMsIDAsIDY2MjUyLCAwLCA3NDQ0MywgMCwgMTAyMDksIDgzMTMsIAotICAgIDQxOTUsIDAsIDkwMTAsIDY2NjkwLCAwLCAwLCA2NDg5NCwgMCwgNjU4NzEsIDAsIDE3MzYsIDAsIDM5MDEsIDEyMjI4LCAKLSAgICAxMjAxNTEsIDY1MjAwLCAzMzgzLCAxMDQ0NiwgMCwgNjkzLCA5MTMwLCAzMTQsIDY0MTQ5LCA0MjQyMCwgMTE5NDksIDAsIDAsIAotICAgIDExMDI2LCAwLCA1MzMyLCA2OTQwLCA2NDE1NCwgMTI2MzUsIDEyNzAwNywgMTIwNjI4LCAxNzUxLCAyNzMsIDgxNjUsIAotICAgIDEzMTY2LCAxMjA3NjMsIDAsIDAsIDEyODI0LCAwLCA0NTI4LCA1MzIwLCA2MzAxLCAwLCA2MTMzLCA5MzM5LCA5NDYzLCAKLSAgICA0MjM0NiwgMTA5MjIsIDY0NTYwLCAzNzU3LCAwLCAwLCAwLCA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAKLSAgICAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgMCwgNzQwOTUsIDAsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgMCwgMCwgCi0gICAgMTIyMzMsIDAsIDEwMjMsIDQ3NCwgMCwgMTE5ODE4LCAwLCAwLCA0MjQ4NywgNjU1NTYsIDAsIDAsIDQyMjk1LCAwLCAwLCAwLCAKLSAgICAwLCA5ODM1LCA2NjQ5OSwgMCwgMCwgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDAsIDEwMTE4LCAKLSAgICAzMTMzLCAwLCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgMCwgMCwgNDIxODIsIAotICAgIDc1ODEsIDE5OTQwLCAwLCA0MTY2NywgMCwgMCwgMTkyMywgNjU1ODMsIDY1ODAyLCAwLCA2NDU5NywgMCwgMTE5MTg0LCAwLCAKLSAgICAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAwLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY1MjE3LCAwLCAwLCAKLSAgICAxMTAxNywgMCwgMCwgMjkzLCAwLCAwLCA2NDc5MSwgNDE4MjcsIDQyNDY2LCA2NTQxNiwgMTA1NzksIDg1NjAsIDAsIAotICAgIDY1NDEzLCAxMTg4MzUsIDQ4MDMsIDEyOTY0LCAxNzM5LCAxOTQxLCAzOTAwLCAwLCAxNzEzLCAwLCAwLCA3Mzk1NywgCisgICAgNjQ5MDcsIDUyODksIDEzMTQ0LCAwLCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDAsIDAsIAorICAgIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIDczNzU5LCAKKyAgICA0MzEwMCwgNzQ0NDksIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIDY1MTc4LCAKKyAgICA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAwLCAwLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIDczOTY1LCAxMDg3MCwgODU1NywgCisgICAgMTEwNTQsIDY4NjY0LCAxMTkwNDksIDk2ODEsIDQ0NzUsIDAsIDQxMTQyLCAyMTAwLCAwLCAxMjA3MzEsIDYwMzUsIDAsIAorICAgIDc2NTEsIDEwMjk2LCAwLCAwLCAwLCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAwLCAxMDM5MiwgMTAzMjgsIAorICAgIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDExOTEzMSwgNDEwMDAsIDAsIDExOTIzOSwgNjQ4NywgCisgICAgMTA5NzcsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgNDMyNDYsIDc4MjQzLCAxMDIyMCwgNjY1MDUsIDQxMjAwLCAwLCAKKyAgICA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDAsIDc4MTQ3LCAwLCAxMjE3MywgNzg1NDUsIDAsIDAsIDY1MzM4LCAwLCAKKyAgICAwLCAxMTk1ODIsIDQ0NzQsIDAsIDQzMDkzLCAwLCAxNTg3LCAwLCAxMjczNzIsIDY0NDc1LCAwLCAxMzY5LCAwLCA3ODI1MSwgCisgICAgNzkyNywgMCwgNDU2MCwgMCwgMCwgMCwgMCwgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDAsIAorICAgIDgxOTQsIDY1NDYyLCAxMDYyNiwgMTA5NjUsIDAsIDg4OTMsIDAsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIAorICAgIDExOTgyMiwgMTA0NzUsIDAsIDAsIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDAsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAKKyAgICAxMjcxMDAsIDY1NjA1LCA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCAwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgCisgICAgNjQyNTksIDAsIDY1MTg4LCA3ODIwLCA0MzAxOCwgMCwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCA3Nzk4MiwgMCwgCisgICAgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCAKKyAgICA2ODYzNiwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIDAsIDgyMjQsIDAsIAorICAgIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCAwLCA1MzIxLCAwLCAwLCAwLCAyNTg5LCA3NDMzMiwgMTY4OSwgNzgwMiwgNDY4MywgCisgICAgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAwLCAwLCA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAKKyAgICAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDAsIDU3MzEsIDEzODEsIDIzODcsIDAsIDAsIDgyODksIDY0NTI1LCAKKyAgICA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIDk2NjgsIDk3NjYsIDAsIDU3MjksIDkxNzgzMywgNzQ0MTAsIAorICAgIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIDI4ODcsIDAsIDM1MjYsIDYyOTgsIDAsIDc3ODk3LCAwLCA3ODUxOSwgCisgICAgMCwgODU3MiwgNjAyMSwgNzc4OTYsIDAsIDc3ODk1LCA0MzE1NSwgMCwgMCwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAKKyAgICAxMDk4MSwgMTY2LCA5MTc4NDEsIDg2MzUsIDAsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgCisgICAgNDE2NDEsIDEyNzE3LCAwLCA3NjA3LCAxMDYzOSwgNjY3MTMsIDAsIDAsIDQxNjQzLCA3NDEzNCwgMCwgODcxMywgNDE2NDAsIAorICAgIDEwMjIxLCA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgMCwgNzc5MDEsIDM0NzIsIAorICAgIDg2OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgMCwgNzQ1NzIsIDAsIDQyMTM2LCAwLCAwLCAwLCAKKyAgICAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCAwLCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCA0MTU2NywgMCwgCisgICAgMCwgMCwgMTk0NjI0LCAwLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIDAsIDQwOTg4LCAwLCAwLCAKKyAgICA0MTcyNywgMCwgMCwgMjM5NiwgMCwgMCwgNzQwMTgsIDkxNzUzOCwgNjQ5NDAsIDAsIDM4ODYsIDAsIDQyNDU3LCAxMTkwMDgsIAorICAgIDAsIDk5NiwgNjgxMjMsIDkxNzU3MSwgNDI0OSwgMCwgOTE3NTk0LCAxMTcwNywgODIyMiwgMCwgNzkzOSwgMCwgOTE3NTc0LCAKKyAgICA5MTc1ODIsIDkxNzU5MiwgOTE3NTY5LCA4NTM0LCAwLCA0MDk4MywgMCwgMCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAKKyAgICAxMjU1OCwgMCwgMCwgMTAwNTIsIDQwOTgyLCAwLCAwLCAxNDg4LCAwLCAwLCAwLCA5MTc1NTksIDAsIDAsIDE1NjMsIDAsIAorICAgIDk2MTksIDAsIDAsIDAsIDAsIDAsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCA2NTAwOSwgMCwgCisgICAgMTI1NjcsIDAsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA2NTg2MywgMTAwNDYsIDk2MTIsIDQyMTUzLCA4MjE4LCA5NDg1LCAwLCAKKyAgICAyMDMyLCA3ODM1NCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIDUwOCwgMCwgMCwgMTIwMjY1LCAwLCAwLCAwLCAwLCAKKyAgICA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgNzgzNDgsIDAsIDAsIDYwNTYsIDY2NTksIDAsIDAsIDYwODUsIDAsIDAsIAorICAgIDM5MTUsIDQxNjM0LCAwLCA0MTYzOSwgNjM5MTIsIDExOTQxLCAwLCA0MDI4LCAxNzg3LCA0MjE4MCwgNDMwOTYsIDAsIAorICAgIDMyNDksIDE3NjgsIDAsIDEyMzI4LCA1MDEsIDEyNzA3NCwgMTA2MDEsIDAsIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCAKKyAgICAxMTkzNTAsIDY1MDUsIDc0MDEwLCAwLCAxMzA2NCwgNTUyNjcsIDEyMDgxMCwgNjUwMCwgNTUyNiwgNjUwNDksIDAsIAorICAgIDczNzY0LCAwLCAwLCAxMjc0NSwgOTY3OCwgMCwgMTIwNTg3LCA5ODY5LCAwLCAxNzcxLCAwLCA4OTM2LCAwLCAwLCA0MjA4LCAKKyAgICA3ODM0MSwgMTE5MTE1LCA3ODM0MiwgMCwgMCwgNzQxMDEsIDAsIDExNzYyLCAwLCAwLCA3Nzk5NywgMCwgNjY0NzUsIDAsIAorICAgIDUwMjcsIDAsIDAsIDAsIDUwNjksIDczODYyLCA1MDI4LCA5ODk3LCAwLCA3MzczOSwgNTAyNiwgMCwgNjg2MzksIDYzMzEsIAorICAgIDAsIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIDExOTM2MSwgMCwgNDMxMDYsIDUwMjksIAorICAgIDY1MzA5LCAxNTgwLCAzNTk4LCA2ODQyNCwgNDEwNzAsIDc3OTAzLCAwLCAzNDQwLCA3ODIxNSwgMTU2MiwgMCwgMTI3MjM2LCAKKyAgICAxMTkzNTgsIDE3MTYsIDAsIDEwNjAwLCAwLCA2MjAsIDQxMDAxLCA2MDI4LCAwLCA0Mjg5MiwgMCwgNzQ4MjIsIDUwMjQsIAorICAgIDEyMDgyOSwgNDEwMDMsIDAsIDUwMjUsIDAsIDAsIDAsIDExOTMyOCwgMCwgNjU1NTcsIDAsIDc0NTQxLCAwLCAxMTU5OSwgMCwgCisgICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKKyAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCAwLCAxMDgxNSwgMTE2MTksIDc4NzE3LCA0MTU0MCwgNzgxNSwgCisgICAgMTE2MTYsIDY5NzksIDEyMDgwLCA3NzIxLCAxMTYwNCwgNzg2OSwgMTU5MiwgMCwgNDIxNTIsIDc4NDk4LCA0MTA0OCwgMCwgCisgICAgODI5LCAwLCAwLCAxOTk1MCwgMCwgMCwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCA2OTc4NSwgNDgyLCAKKyAgICA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDAsIDQyMzM1LCAwLCAwLCAwLCA3NTM4LCA1MzE1LCAKKyAgICAwLCA0MjQ5MSwgMCwgNDIwNjEsIDAsIDQ1NzYsIDAsIDY4NDE3LCAxMjAyNDEsIDQyNzcsIDAsIDQwMzksIDY0NDcyLCAKKyAgICA0MjMzOCwgMzY4LCA0MjA1OCwgMzk2MCwgMTEwNDMsIDExMzM3LCA3ODIwOSwgOTE3ODIwLCA2Mzk4OSwgMzk1OCwgMTIxMzIsIAorICAgIDE4NDksIDAsIDk5MjEsIDQyNDUxLCA0MjUzLCA0MTE0NywgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIAorICAgIDc4MzM4LCAwLCA0MzMwMCwgNTE1NiwgMCwgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIAorICAgIDY2NDM1LCAwLCA0MTY2MiwgMCwgMCwgMCwgMCwgMCwgNDU3OCwgNjQ1MTMsIDQxNjY0LCAwLCA0MjU3OCwgMCwgNDE2NjEsIAorICAgIDc4NzE1LCA0MzMwNSwgOTM1NiwgMCwgMCwgMCwgMTI4NiwgMTAxNjYsIDAsIDAsIDY0NzA3LCAwLCA0MjQ3NiwgNzczMCwgMCwgCisgICAgMCwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIDQxNjI3LCAwLCA4NzYzLCAKKyAgICAwLCA0MTYyOCwgNTMzLCAxMTkzMSwgNjUyMjUsIDgzMjEsIDQyNTA0LCA0MjU4MSwgMCwgNjkxNSwgNDIzMTAsIDQzNzcsIAorICAgIDg1NTksIDAsIDEyMDIzNCwgMCwgMTMxOTMsIDY0MzUwLCAxMTY2NiwgODY3OSwgNDE5MjQsIDE1NzYsIDc3MzUsIDAsIDAsIAorICAgIDczODQwLCAwLCAxMTM3NCwgNzgwNDMsIDEwODg5LCA0MzQ2MSwgNzc1NywgNDI0NjIsIDEyMDIyNiwgMTAwMjksIDY2NDkzLCAKKyAgICAyNzE4LCA0MTY4LCA3Mzg0MiwgMTMzMDgsIDEyMDExMiwgMCwgMTE3OSwgNDQ0MCwgMCwgNzc5NDgsIDM2MywgMTEwMTUsIAorICAgIDc3OTQ3LCA3Nzk0NCwgNjQyOTYsIDEyNzA5MCwgNjY2OTIsIDEyMDgyNiwgMCwgNjY0OTIsIDY1OTMsIDY0NjI1LCA0MTk2MywgCisgICAgMCwgMTE5MzI5LCAwLCAxMDAxMywgMCwgMCwgMTI3MDk1LCA5NDkyLCAxMTc4MiwgNjQzODIsIDEyODMzLCAxMTg5ODYsIDAsIAorICAgIDEyOTcsIDQxNjMwLCA2MzAsIDEyNzA5NCwgMCwgMTIwNzc0LCAxMjA1NzAsIDEwNDMsIDQzNjUyLCA2NjIyMywgMTAwOTAsIAorICAgIDAsIDAsIDMxMywgOTE3NTYzLCA0MTg4MSwgMCwgNDIzMTEsIDc0NDUsIDAsIDU3NTAsIDEwNzU5LCA5NDE5LCA1NTIyMiwgCisgICAgOTQwNSwgMTEyNjgsIDAsIDkzOTgsIDg1MjYsIDkzOTksIDk0MjIsIDAsIDY2NDk1LCAwLCAwLCAxMjcyMzksIDQxNzE4LCAKKyAgICAxMDcwNywgMTYwMywgMCwgMTE5MDAzLCAwLCA2MzEsIDc3OTUyLCA3Nzk1MywgMTMxNjEsIDY1MjcyLCAwLCAxMDU0NiwgCisgICAgNzQyMTAsIDc4MTAxLCAxMTYwMCwgNzc5NjEsIDI3OTcsIDczODIxLCA0MjQyNywgMzA2LCA3MTQsIDMwNTgsIDQyMzgxLCAKKyAgICA3Nzk2MiwgMTI3MDgwLCAxMjM1MSwgNDIzOTUsIDAsIDExNjA3LCAwLCA0MjI4MiwgNzc5NzEsIDc3OTY3LCA5MTU3LCAKKyAgICA3Mzc2NSwgNjYzNjQsIDQyNDMzLCA3Nzk2NCwgNzYwMywgMTI4MDMsIDE4MCwgNDIxNDEsIDAsIDEyMDYxMiwgNjY0OTQsIAorICAgIDEyNjc0LCA4MjQ0LCAzNjIsIDAsIDAsIDgwMzcsIDkxNzgwMywgMTE1MzUsIDAsIDc0ODQ1LCA1MTg1LCA2NjY5NiwgNTUyMSwgCisgICAgMTAzMzQsIDIwOTMsIDc3OTgzLCAxMDMwMiwgMCwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKKyAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDc3OTc5LCAzNDA1LCAKKyAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCAwLCAwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIDQzNjgyLCAwLCAKKyAgICA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCAwLCAwLCA3NjMwLCA5ODQ2LCA3Njg0LCAxMDM1MCwgCisgICAgMCwgMTE3NCwgNzc5ODEsIDQyNzMzLCA3Nzk3OCwgNzc5ODAsIDY2NDg1LCA3Nzk3NywgNDIyNzcsIDc3OTc0LCA0MjQ1NiwgCisgICAgNjU2NjcsIDAsIDEyMzMwLCAwLCAwLCA0MjQxNywgNDIzODMsIDAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNzc5ODQsIAorICAgIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgNDE5NSwgNzQ0MzUsIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCAKKyAgICA2NTg3MSwgNzgwNjAsIDE3MzYsIDAsIDM5MDEsIDEyMjI4LCAxMjAxNTEsIDY1MjAwLCAzMzgzLCAxMDQ0NiwgNzg4NDEsIAorICAgIDY5MywgOTEzMCwgMzE0LCA2NDE0OSwgNDI0MjAsIDExOTQ5LCAwLCAxMjAxNTIsIDExMDI2LCAwLCA1MzMyLCA2OTQwLCAKKyAgICA2NDE1NCwgMTI2MzUsIDEyNzAwNywgNDI3MDYsIDE3NTEsIDI3MywgODE2NSwgMTMxNjYsIDEyMDc2MywgNzg4NDAsIDAsIAorICAgIDEyODI0LCAwLCA0NTI4LCA1MzIwLCA2MzAxLCA0MzY2MiwgNjEzMywgOTMzOSwgOTQ2MywgNDIzNDYsIDEwOTIyLCA2NDU2MCwgCisgICAgMzc1NywgMCwgMCwgMCwgNjU4NjksIDczNzYwLCAyNTY5LCAwLCAyMzI2LCA2NTc0MCwgMjU2NSwgNDI0NTksIDc1OTYsIAorICAgIDc5MjEsIDAsIDc0MDk1LCAwLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDAsIDAsIDEyMjMzLCAwLCAxMDIzLCAKKyAgICA0NzQsIDAsIDExOTgxOCwgMCwgMCwgNDI0ODcsIDY1NTU2LCAwLCAwLCA0MjI5NSwgMCwgMCwgMCwgMCwgOTgzNSwgNjY0OTksIAorICAgIDAsIDU0MTcsIDEyMjc1LCAxMDg5NSwgMCwgMjc0LCAwLCAxODU4LCAwLCAwLCA1NTI1MSwgMTAxMTgsIDMxMzMsIDAsIAorICAgIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAwLCAwLCA0MjE4MiwgNzU4MSwgCisgICAgMTk5NDAsIDQzNjY4LCA0MTY2NywgMCwgMCwgMTkyMywgNjU1ODMsIDY1ODAyLCAwLCA2NDU5NywgNDM0NDQsIDExOTE4NCwgCisgICAgMCwgMCwgNjQ2NCwgNzAzNiwgMjk5NiwgMTkzNywgMCwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgCisgICAgMTEwMTcsIDAsIDAsIDI5MywgNzc5NjYsIDAsIDY0NzkxLCA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgMCwgCisgICAgNjU0MTMsIDc3OTYzLCA0ODAzLCAxMjk2NCwgMTczOSwgMTk0MSwgMzkwMCwgMCwgMTcxMywgNzc5NjksIDAsIDczOTU3LCAKICAgICAxMTQwNywgNDI0NDEsIDQxOTcxLCA2Mjk3LCAxMjAwOTgsIDY0MTA1LCAwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKICAgICA0MjI4OSwgMCwgNjQxMDMsIDk2OSwgMCwgOTM1MiwgMCwgNjE2NSwgNjQxMDAsIDAsIDY2MzIsIDczODYxLCA0MjQwMiwgCi0gICAgNzQzMjcsIDc4MDYsIDAsIDg5MTQsIDAsIDAsIDMxODMsIDE0MzUsIDY0ODc2LCAyOTY5LCA2MDQ2LCAwLCA2MjA4LCAwLCAKLSAgICA1NzQ2LCA3Mzc0OSwgMCwgNjQ0MTYsIDQyNDIyLCAwLCAwLCA3MDgyLCA3Mzc3NSwgMzM4LCA1MDU5LCAxOTQ3MTksIDAsIAotICAgIDQyMzI4LCAxMDc2NywgMCwgODExNSwgMCwgMCwgMCwgODIyNywgMCwgMTIxOCwgMCwgMCwgNjU4NDgsIDAsIDAsIDAsIDAsIAotICAgIDEyNjk4NywgNDQ4NiwgMCwgMCwgMCwgMTA5MjUsIDAsIDAsIDAsIDAsIDQyMzA5LCAxMDI1NywgMCwgMTAyNzMsIDAsIAotICAgIDEwMzA1LCA0MjQ2MSwgMCwgNDIzNDksIDg4MzIsIDAsIDY0MTI3LCAxMDY0NCwgMCwgMCwgNDIyNzgsIDc0NDUxLCAKLSAgICAxMjY5ODgsIDkxNzg1NywgNzc5NCwgMCwgNDI0MjksIDExMDgxLCA0MjMxNiwgMTE5MDI2LCAzNjY5LCAzOTY4LCA0MjQ2OCwgCi0gICAgMCwgMCwgMCwgNjU0MDIsIDExOTU4MSwgMCwgMCwgNjQ5MzMsIDAsIDQxOTYwLCAwLCAwLCAwLCAwLCA2NjY3OCwgNDIzOTEsIAotICAgIDE1ODgsIDY1NDAwLCA4NDA5LCAwLCAxOTk2NywgNjUzOTgsIDc4NywgMCwgMCwgMCwgNjExNSwgMTE4OTQwLCA0MTY1NCwgCi0gICAgNDI0ODAsIDAsIDAsIDQxNjU1LCA2NTQwMSwgMCwgMCwgMCwgMCwgNjQ0LCA2NTUwMCwgNDE2NTcsIDEwNzc4LCAzNjU5LCAKLSAgICA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgMCwgMTA1MDIsIDc0NDU3LCAwLCAwLCA0MTU1NCwgMCwgODIyMCwgMCwgCi0gICAgNDE1NTcsIDAsIDAsIDExMDcwLCAwLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIDY0ODE4LCA2NTEwMywgCi0gICAgNjQ2NDEsIDAsIDExOTYzMywgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgMCwgMCwgMTE4OTMwLCA2NDUyNywgMCwgCi0gICAgNzg3NywgNzM4MDMsIDAsIDAsIDEyMDA5NiwgNzQ2MDIsIDAsIDAsIDAsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIDEyMTkwLCAKLSAgICAxMjMxOSwgMCwgMCwgMCwgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAwLCAwLCA5NzM0LCA2NTQyNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgMTA0NzcsIDAsIAotICAgIDg2MzYsIDAsIDgzMTUsIDY1NDQ0LCAwLCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMCwgMTIwMTcxLCAwLCA3NDU4OSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNDYsIDExNDkwLCA0MzEyNywgNDQ4NSwgMCwgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIAotICAgIDEyNDM3LCAwLCAwLCA3MDQwLCAzNTg4LCAwLCAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDAsIDEyMDE2NywgMjIzLCAwLCAwLCAKLSAgICAxMjAxNjYsIDQyNDQ0LCAwLCA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIDEyMDE2NSwgMCwgMTgwNSwgODc3MiwgMCwgMCwgCi0gICAgNjUwNzgsIDY1MjQ3LCAwLCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgMCwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgCi0gICAgNjgxMjYsIDEyMTMsIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAwLCA2NDM4NywgNDExNSwgMCwgNTAwNSwgCi0gICAgNjQwNzAsIDY0MDczLCAxMDY3OSwgMCwgMCwgMCwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICA2NTA4OCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCAwLCAxMDcwMSwgMTc2NCwgMzEwMSwgMCwgNjUyOTEsIDEyMDE1OSwgMCwgCi0gICAgMTEzNzMsIDc0NTY2LCAwLCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAzNzg3LCAwLCA5MjIyLCAwLCAwLCAKLSAgICA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCAKLSAgICA3OTQ3LCAxMjAwMywgMCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNzQ4MDcsIDM2MTMsIDAsIDAsIDAsIDY1ODg4LCAxMjAzMDcsIAotICAgIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAwLCAxMTg4MDYsIDAsIDExNTcsIAotICAgIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCAxMjAzMTksIDgyMzUsIDAsIDQ0MDUsIDEwMDg2LCAwLCAwLCAwLCAwLCA2NTQzMCwgCi0gICAgNzQwMTMsIDYwNzksIDAsIDEwNzY0LCAwLCA2NDI5MSwgMCwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMjAzMTMsIDY0MzI3LCAKLSAgICAxNTU4LCAwLCAxOTkxLCA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIAotICAgIDExOTMzNiwgNTc0MiwgNDMwNzYsIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIAotICAgIDY1OTUsIDY1OTYsIDAsIDY2MzczLCAwLCAwLCA2NDkwOCwgMCwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIAotICAgIDQzMTA4LCAwLCAwLCA0MTcwNSwgMCwgNjU5OCwgMCwgNjU5OSwgMCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIDAsIAotICAgIDY1OTcsIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMCwgMCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAwLCAyMzM2LCAwLCAwLCAwLCAxMjA0NDIsIDAsIDE5MjEsIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCAKLSAgICA0Mjg0LCAxMzIxNywgMCwgMCwgMTI4NDEsIDkyMjksIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIAotICAgIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCAwLCAxODU0LCAxMDc5NCwgMCwgMCwgMCwgMCwgMCwgNTI4MCwgMCwgCi0gICAgNDM0NCwgMTI5MDUsIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAKLSAgICAxMjkzNCwgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDAsIDQ4MDQsIDY5OTQsIDAsIDAsIDAsIAotICAgIDQxNjk2LCA0NjcsIDAsIDAsIDAsIDAsIDAsIDg0MjEsIDAsIDAsIDY0ODAxLCA1MDIsIDAsIDY1NDMxLCAwLCAwLCAxMjA0MywgCi0gICAgMTMwMywgMzE2LCAwLCAyMDI5LCA2NTE5MSwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDAsIDAsIDQ4NjAsIDE5NDY0NSwgMCwgCi0gICAgNDI0ODgsIDAsIDk1ODMsIDAsIDU1NDYsIDgwMTksIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIAotICAgIDU1NDMsIDExOTI0NSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCAwLCAwLCAwLCAwLCA2NTcyNiwgNjA3NywgMCwgNjU0NTIsIDAsIAotICAgIDExMzAxLCAwLCAwLCAwLCA5ODc0LCAwLCAwLCAwLCAzMDUwLCA2NTQxMCwgMCwgMCwgMCwgMCwgNDI4MzAsIDAsIDY2NzE2LCAKLSAgICAwLCA0NjkxLCAwLCA5MzQ1LCA2MjEsIDAsIDAsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgMCwgCi0gICAgOTQ3NCwgMTA1NDUsIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCAKKyAgICA3NDMyNywgNzgwNiwgMCwgODkxNCwgMCwgMCwgMzE4MywgMTQzNSwgNjQ4NzYsIDI5NjksIDYwNDYsIDAsIDYyMDgsIAorICAgIDY3ODQ5LCA1NzQ2LCA3Mzc0OSwgMCwgNjQ0MTYsIDQyNDIyLCAwLCAwLCA3MDgyLCA3Mzc3NSwgMzM4LCA1MDU5LCAKKyAgICAxOTQ3MTksIDAsIDQyMzI4LCAxMDc2NywgMCwgODExNSwgMCwgMCwgMCwgODIyNywgMjA3MywgMTIxOCwgMCwgMCwgNjU4NDgsIAorICAgIDAsIDAsIDAsIDAsIDEyNjk4NywgNDQ4NiwgMCwgMCwgMCwgMTA5MjUsIDAsIDAsIDAsIDAsIDQyMzA5LCAxMDI1NywgMCwgCisgICAgMTAyNzMsIDAsIDEwMzA1LCA0MjQ2MSwgMCwgNDIzNDksIDg4MzIsIDc4MDUxLCA2NDEyNywgMTA2NDQsIDQyNjYyLCAKKyAgICA3ODgyOCwgNDIyNzgsIDc0NDUxLCAxMjY5ODgsIDkxNzg1NywgNzc5NCwgMCwgNDI0MjksIDYzNzcsIDQyMzE2LCAxMTkwMjYsIAorICAgIDM2NjksIDM5NjgsIDQyNDY4LCAwLCA3ODU0NCwgMCwgNjU0MDIsIDExOTU4MSwgMCwgMCwgNjQ5MzMsIDAsIDQxOTYwLCAKKyAgICA2Njk5LCAwLCAwLCAwLCA2ODIzLCA0MjM5MSwgMTU4OCwgNjU0MDAsIDg0MDksIDc4MjIzLCAxOTk2NywgNjUzOTgsIDc4NywgCisgICAgMCwgOTE3OTM5LCAwLCA2MTE1LCAyMDc4LCA0MTY1NCwgNDI0ODAsIDAsIDAsIDQxNjU1LCA2NTQwMSwgNDM5NzUsIDAsIDAsIAorICAgIDAsIDY0NCwgNjU1MDAsIDQxNjU3LCAxMDc3OCwgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDAsIAorICAgIDEwNTAyLCA3NDQ1NywgMCwgMCwgNDE1NTQsIDAsIDgyMjAsIDkxNzk0MywgNDE1NTcsIDAsIDAsIDExMDcwLCAxMTkyMjEsIAorICAgIDUxNTcsIDQwMjAsIDczODU4LCA0MTU1NSwgOTUxNCwgNjQ4MTgsIDY1MTAzLCA2NDY0MSwgNjQzMDMsIDc4MTMxLCA3NTIwLCAKKyAgICAwLCA3NDM3NywgMTEwMjksIDY2NjUxLCAwLCAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgMCwgMCwgCisgICAgMTIwMDk2LCA3NDYwMiwgOTk1NSwgMCwgNDA1NSwgNDI4MTcsIDAsIDY1MjEyLCAxMTcxNSwgMTIxOTAsIDEyMzE5LCAKKyAgICA3ODYzMCwgMCwgNzg2MzEsIDk1MDIsIDY1NDI3LCAwLCA2NTQyNCwgMTI2MDcsIDAsIDk3MzQsIDY1NDI1LCAwLCAwLCAwLCAKKyAgICA3ODgzNSwgMCwgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgCisgICAgMTA0NzcsIDAsIDg2MzYsIDAsIDgzMTUsIDY1NDQ0LCAwLCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMCwgMTIwMTcxLCAKKyAgICAwLCA3NDU4OSwgNDM5OTMsIDAsIDY5NzkwLCAwLCAwLCA0MzY5MCwgMTEwNDYsIDExNDkwLCA0MjczMCwgNDQ4NSwgMCwgMCwgCisgICAgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIDEyNDM3LCA0MjcyOCwgMCwgNzA0MCwgMzU4OCwgMCwgMTI4MjUsIDAsIDAsIDEyNzI1LCAKKyAgICAwLCAwLCA3ODY0MiwgMjIzLCAwLCA2OTgwNiwgMTIwMTY2LCA0MjQ0NCwgMCwgNjQ0OTksIDY1MjQ1LCAwLCAxMTcxLCAwLCAKKyAgICAxMjAxNjUsIDAsIDE4MDUsIDg3NzIsIDAsIDAsIDk5MzAsIDY1MjQ3LCA3ODYxOSwgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIAorICAgIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgMTIxMywgMCwgNjQwNzUsIDc5NywgNjQwNzQsIAorICAgIDg3MzQsIDQyMTIsIDAsIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgMCwgCisgICAgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCA2NTA4OCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCAKKyAgICAxMjAxNTgsIDEwNzAxLCAxNzY0LCAzMTAxLCAwLCA2NTI5MSwgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMCwgMTIwMTAzLCAKKyAgICA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgMzc4NywgMCwgOTIyMiwgMCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAKKyAgICAwLCAxMjcyNCwgNjYzNTcsIDQyMzMxLCA2NDkzNSwgMCwgMCwgMTI5MywgNzk0NywgMTIwMDMsIDAsIDc0NTkzLCAxMjAzMDgsIAorICAgIDI0NTQsIDQyNzE3LCAzNjEzLCAwLCAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgCisgICAgNDMwODcsIDEyNTk1LCAxMjAzMDQsIDAsIDExODgwNiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIAorICAgIDEyMDMxOSwgODIzNSwgMTIwMzE2LCA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDc0MDEzLCAKKyAgICA2MDc5LCA2ODE3LCAxMDc2NCwgMCwgNjQyOTEsIDAsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIAorICAgIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCAKKyAgICA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgMCwgCisgICAgNjYzNzMsIDAsIDAsIDY0OTA4LCAwLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIDAsIDAsIDQxNzA1LCAKKyAgICAwLCA2NTk4LCAwLCA2NTk5LCAwLCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIAorICAgIDY0NzQ1LCAwLCAwLCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgMCwgMCwgCisgICAgNzg4NzEsIDEyMDQ0MiwgMCwgMTkyMSwgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCAKKyAgICAwLCAxMjg0MSwgOTIyOSwgMTA5NTYsIDQyMjg1LCA0MTY3NCwgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgCisgICAgODMyNSwgMCwgNjU0MDMsIDAsIDE4NTQsIDEwNzk0LCAwLCA2NzY2MCwgMCwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIAorICAgIDEyOTA1LCA2NTQzMywgNjA3NiwgNjQ3OTMsIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgCisgICAgMTI5MzQsIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIDYwNzEsIDY1NDM0LCAwLCA0ODA0LCA0MDUzLCAwLCAwLCAxOTQ2NTMsIAorICAgIDQxNjk2LCA0NjcsIDY5ODIzLCAwLCA2OTc5NywgMCwgMCwgODQyMSwgMCwgMCwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIAorICAgIDExOTA1NiwgMCwgMTIwNDMsIDEzMDMsIDMxNiwgMCwgMjAyOSwgNjUxOTEsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgCisgICAgMCwgNDg2MCwgMTk0NjQ1LCAwLCA0MjQ4OCwgMCwgOTU4MywgMCwgNTU0NiwgODAxOSwgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIAorICAgIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgNzc5ODksIDYzNzUxLCAxMjEzNywgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCAKKyAgICA2ODM4OCwgNjU3MjYsIDYwNzcsIDAsIDY1NDUyLCAwLCAxMTMwMSwgNzgwMTMsIDc4MDA4LCA3ODAxMCwgOTg3NCwgNzgwMDcsIAorICAgIDAsIDAsIDMwNTAsIDY1NDEwLCAwLCAwLCA3ODAxNiwgNzgwMTcsIDQyODMwLCA0Mzk5NiwgNjY3MTYsIDAsIDQ2OTEsIDAsIAorICAgIDkzNDUsIDYyMSwgMCwgMCwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgCisgICAgMTA1NDUsIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCAKICAgICAxMTkzNDEsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDAsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIAotICAgIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDAsIDg4NTksIDQxNDU5LCAwLCAwLCAxMjA3NDAsIDAsIDAsIDkxMTksIAotICAgIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCAwLCAwLCA0MTAsIDEyMDQ0OSwgCi0gICAgMTgwMiwgMTIwNzg5LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgMTAxMjYsIDEyMTE2LCAKLSAgICA0MTY3MywgMTIwMzcwLCAxMTQyMiwgMTIwMzcyLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgMTIwMzY4LCA0MTM0NSwgCi0gICAgMTIwMzYyLCAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMTI2OTgsIDY0ODU4LCAKLSAgICAzNjEsIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgMCwgNDU2OSwgNzQxMzAsIDAsIAotICAgIDExOTIyMSwgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMCwgNjU2MjksIDAsIDAsIDAsIDAsIDAsIDEyMDU0MywgMCwgMCwgCi0gICAgNjI5MSwgMCwgMCwgNDE2NjksIDcwOTQsIDkxNzkyMSwgMCwgMCwgNzQwNTQsIDAsIDAsIDAsIDgzOSwgMCwgNzY5NSwgCi0gICAgODc2OSwgNjUyNDYsIDQ4MjksIDAsIDQ4NTksIDY0NDY3LCAwLCAwLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDAsIDAsIDAsIAotICAgIDAsIDY0NzY0LCA0MjEwLCAwLCAwLCA4MDQsIDAsIDAsIDEyMjk4LCAwLCAwLCAwLCA2NDkyNCwgMTAwOTEsIDczOTMxLCAKLSAgICA5NDY4LCA3NDI0NSwgMCwgMCwgNzQyNDYsIDAsIDEyODM5LCA2NDY2OSwgMCwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgCi0gICAgMTE5MjI5LCAxMTA0OSwgMCwgOTE3NTQ5LCAwLCA4NDgyLCAwLCAwLCA1MDMyLCAwLCAxMTk0MCwgNjc4ODgsIDY2NCwgMCwgCi0gICAgNTAzNCwgMCwgMCwgMCwgMCwgNzM4ODgsIDAsIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIAotICAgIDEyMDM3NywgMCwgMTIwODE5LCAwLCAxMjAxNjgsIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgCi0gICAgNDExNjIsIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgCi0gICAgMTE4ODY3LCAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAwLCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAKLSAgICAwLCAwLCAwLCAxMjA2NTYsIDAsIDAsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIDAsIDExOTEwNywgCi0gICAgNDM2MTIsIDY0MzQ0LCAwLCAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDAsIDg5ODksIDIyMSwgNjU2ODYsIDAsIAotICAgIDAsIDgwMTAsIDcxOTEsIDQ5NjIsIDAsIDg4NTUsIDAsIDAsIDY0NDY5LCAwLCAxMDU1NSwgMCwgMCwgMCwgMCwgMTIwNDI3LCAKLSAgICAxMDQ1MSwgMCwgMTIwMTUyLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDEyMDE0OCwgMTIwMTQ5LCAxMjAxNTAsIDM4NzMsIDgzNjcsIAotICAgIDAsIDEyMDE0NiwgMTIwMTQ3LCAwLCA2NjUwNywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIDYyMTcsIAorICAgIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDAsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAwLCAwLCAKKyAgICA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDAsIDQ1NjksIAorICAgIDc0MTMwLCAwLCA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTIwMzc5LCA2NTYyOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgMCwgMCwgNzQwNTQsIDAsIAorICAgIDE5NTAyOSwgMCwgODM5LCAwLCA3Njk1LCA4NzY5LCA2NTI0NiwgNDgyOSwgMCwgNDg1OSwgNjQ0NjcsIDAsIDAsIDExODk5OCwgCisgICAgNzIwNiwgMCwgNjY0NywgNDM5ODYsIDAsIDY5NzY2LCAwLCA2NDc2NCwgNDIxMCwgMCwgMCwgODA0LCAwLCAwLCAxMjI5OCwgCisgICAgMCwgNjY2NTMsIDAsIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIDc0MjQ1LCAwLCAwLCA3NDI0NiwgMCwgMTI4MzksIAorICAgIDY0NjY5LCAwLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAxMTkyMjksIDExMDQ5LCAwLCA5MTc1NDksIDQzMjM5LCA4NDgyLCAwLCAKKyAgICAwLCA1MDMyLCA3NzgzMCwgMTE5NDAsIDY3ODg4LCA2NjQsIDAsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIDczODg4LCAKKyAgICAwLCAxMzI5NCwgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIDEyMDgxOSwgNjgzODcsIAorICAgIDEyMDE2OCwgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgMTIwMTYwLCA2NDUyOCwgCisgICAgMTE2OSwgNDM0LCA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIDE5NDY2OCwgNTI0LCAwLCAKKyAgICA3NDAyOSwgNzg4LCA3NDAyNywgMCwgMCwgMCwgMTY2MywgMTA0MTksIDc0MDI1LCA0MjYzNiwgMCwgMCwgMCwgMTIwNjU2LCAKKyAgICAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIAorICAgIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgCisgICAgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIDEwNTU1LCAwLCA0MzMzMywgMCwgMCwgMTIwNDI3LCAKKyAgICAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgCisgICAgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgCiAgICAgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIAogICAgIDExODg2MCwgMCwgMTIwNDE5LCAwLCA3NDA1MiwgMCwgMCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAxMjA0MTgsIDAsIAogICAgIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIDEyMDczMCwgMCwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIAotICAgIDAsIDk0NzAsIDY5NDQsIDAsIDAsIDAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIDAsIDAsIDAsIDczNzY0LCA4MjA0LCAzNjE0LCAKLSAgICAyODI3LCA5Njk2LCAwLCAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgMTIwNTAyLCAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCAKLSAgICA0MjU5OSwgNDI1OTcsIDAsIDEyMDQwOSwgMCwgMCwgODUzNywgMCwgMCwgMCwgMCwgMCwgNDExOTksIDEwMTIxLCAyMDI4LCAKLSAgICAwLCAwLCAwLCAwLCAzMDYyLCAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgMCwgCi0gICAgMTIwNzc3LCAwLCA0MTE1NSwgMCwgNzQwNzEsIDAsIDAsIDEyNzEzLCAwLCAwLCAwLCAwLCAwLCAxNzM0LCAwLCAwLCAwLCAwLCAKLSAgICAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgMCwgMTIzMCwgMCwgMCwgMzU5NywgOTc2MSwgMTA1ODQsIAotICAgIDc0MjM1LCAwLCA0MDM3LCAwLCA4MzUyLCAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgMCwgMCwgNjc4NDYsIDAsIDk3MDQsIDAsIAotICAgIDAsIDc0Mjg0LCAwLCAwLCA4NjYwLCAwLCAwLCAwLCAwLCA3NDQ4MiwgNDQ4MywgMTcwOSwgMCwgOTkwOSwgNjA4MCwgMCwgMCwgCi0gICAgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgMTEyNjYsIDAsIDEyMjYsIAotICAgIDY5MzAsIDAsIDAsIDAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgMTIwMzU2LCAwLCAwLCA0MTUwMCwgMCwgMzExLCAKLSAgICAxMTQ1MywgNjIyMSwgMTA2MDgsIDY0OTQzLCA3NDI4MCwgMTA4NzcsIDAsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMCwgMCwgCi0gICAgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIDY0NjA2LCA0MjU4OSwgMCwgMCwgNTAzNywgMCwgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCAKLSAgICA0MTUwOCwgNDEyMDEsIDMyMywgNDMzMjgsIDAsIDEyMDY5OCwgMTI5NSwgMCwgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDAsIAotICAgIDY1MTIzLCAxMTI5MywgMjY2OCwgMTEyODgsIDAsIDQyNjQwLCA2NTY2NiwgMjUxOSwgMCwgNjU0MjAsIDAsIDAsIDkxNzg4NiwgCi0gICAgNTA0OSwgMCwgMTE5MDExLCA3MDYsIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgMCwgCisgICAgMTI3MDQyLCA5NDcwLCA2OTQ0LCAwLCAwLCAwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAwLCAwLCAwLCA0MzQyOCwgODIwNCwgCisgICAgMzYxNCwgMjgyNywgOTY5NiwgMCwgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDc4NTYyLCAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCAKKyAgICA0MjU5OSwgNDI1OTcsIDQyNzA5LCAxMjA0MDksIDEyNzA0NCwgMCwgODUzNywgMCwgMCwgMCwgMCwgMCwgNDExOTksIAorICAgIDEwMTIxLCAyMDI4LCAwLCAwLCAwLCAwLCAzMDYyLCAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAKKyAgICAxMjU4MCwgMCwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgMCwgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAKKyAgICAwLCAxNzM0LCAwLCAwLCAwLCA2NDU5NCwgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIDAsIDEyMzAsIAorICAgIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgMCwgNDAzNywgMCwgODM1MiwgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIAorICAgIDAsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDc0Mjg0LCAwLCAwLCA4NjYwLCAwLCAwLCAwLCA3ODc3MywgCisgICAgNzQ0ODIsIDQ0ODMsIDE3MDksIDEyMDYxNywgOTkwOSwgNjA4MCwgMCwgMCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgCisgICAgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgMTEyNjYsIDAsIDEyMjYsIDY5MzAsIDAsIDAsIDYzNjAsIDEwODk3LCAKKyAgICA0MTIzMCwgNjA1LCAwLCA3NDc4NSwgMTIwMzU2LCAwLCAwLCA0MTUwMCwgMCwgMzExLCAxMTQ1MywgNjIyMSwgMTA2MDgsIAorICAgIDY0OTQzLCA3NDI4MCwgMTA4NzcsIDExODg2OCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAwLCAxMjA3MzYsIDc0MzEyLCAzNDUsIAorICAgIDAsIDc0NDU2LCA2NDYwNiwgOTkxNywgMCwgMCwgNTAzNywgMCwgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgCisgICAgNDEyMDEsIDMyMywgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAwLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMCwgNjUxMjMsIAorICAgIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIDY1NjY2LCAyNTE5LCAwLCA2NTQyMCwgMCwgMCwgNDI1MiwgNTA0OSwgCisgICAgNDI2NTksIDExOTAxMSwgNzA2LCA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIDAsIAogICAgIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDAsIDExODMsIDAsIDcwMTcsIDQyODUyLCAKLSAgICAwLCA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDAsIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDQyODQ4LCAwLCAKLSAgICA4OTIwLCAwLCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMCwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMCwgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgMCwgMCwgNDYyNCwgNzgxOCwgMTk0NjIyLCAwLCAwLCAKLSAgICA3ODA1LCAwLCAwLCA2OTM1LCAwLCAwLCAwLCAwLCA0MzMyNywgMCwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCAKLSAgICA4NDk3LCA4NDk2LCAwLCAwLCAwLCAwLCA5NTQzLCAwLCAwLCAwLCA2NTg0OSwgMCwgMCwgMCwgMCwgMCwgODY4NCwgMCwgCi0gICAgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgMCwgMCwgMCwgMTE5ODI2LCAwLCAxMTkyMTUsIDAsIDEyMDczLCAwLCAwLCAKLSAgICAwLCAxMzEwOCwgMCwgNzQzOTcsIDQxNDY4LCAwLCAwLCA1MjkyLCAwLCAwLCAxOTM5LCA1MzAyLCAzOTcwLCAwLCAxMjQ1NSwgCi0gICAgMTc5MywgMCwgMCwgMCwgNjY0MywgMCwgNjUyNjMsIDAsIDAsIDQxMjkzLCAwLCAxMTkxMjUsIDAsIDEzMjE5LCA5NTY5LCAwLCAKLSAgICA3NDM4MywgMCwgMCwgMCwgNTUwMCwgODgxMywgMCwgMCwgMCwgNTMyMiwgMCwgMCwgMCwgNTMyNCwgNjY0NDMsIDM3ODQsIAotICAgIDQxNjE0LCA2NTI2OSwgNjIzMCwgMCwgMCwgNDMzMjQsIDMzNjAsIDAsIDExNTIzLCAwLCAwLCA0MTczMiwgNzE5NywgMCwgMCwgCi0gICAgMCwgNDE4MjEsIDEyNDksIDAsIDAsIDAsIDExODk5MiwgMCwgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCAKLSAgICA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgMCwgMCwgMCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgMCwgCi0gICAgNDE5OTAsIDAsIDQxODExLCA3NDQ2NiwgMCwgNjY3MCwgMCwgMCwgMCwgNDMwOTIsIDQzMzI1LCAwLCAxMDE2OCwgMCwgCi0gICAgOTc4MSwgMCwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDAsIDMxNSwgMTI4MTMsIAotICAgIDAsIDExOTY0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDAsIDY3ODQ3LCAKLSAgICAwLCAwLCAwLCAwLCA4Nzg3LCAwLCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDAsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIAotICAgIDE5NDYxMiwgMCwgMCwgNDIwODgsIDAsIDAsIDcxNzYsIDAsIDEwMTM3LCA2MTIxLCAxMDk5NSwgMCwgNzQ1MzQsIDgxMTksIAotICAgIDY0ODc0LCAwLCAwLCAwLCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAKLSAgICAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgMCwgCi0gICAgNjUxNjgsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgMzY3MCwgMCwgMCwgMCwgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAKLSAgICAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAwLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIAotICAgIDExODA4LCAxMTkyMTQsIDc0MTE1LCA5MzY2LCA0Mjc5MCwgNDIwMDYsIDAsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAKLSAgICAxNTA3LCA2NTMyMiwgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCAKLSAgICA2NTMyOSwgNjUzMjgsIDAsIDkxMjgsIDExODg4NSwgNDIwNzMsIDQxNjMxLCA2NDU5MCwgMCwgNDM3MSwgNzE5NiwgNjUzMTgsIAotICAgIDIwMzUsIDY1MzE2LCA0MTA2LCA2NTMxNCwgNjUzMTMsIDQyMDc0LCAwLCA0MTIyOCwgMCwgMTE5MTE3LCA0MTI0MSwgNzkwMywgCi0gICAgNDEyMzksIDQzNTMzLCAxMjcwOTksIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgMCwgODQ4NywgOTEzMSwgMCwgCi0gICAgNDYxNSwgMTI2OTUsIDAsIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgMCwgCi0gICAgNjY0NTUsIDY0NzM4LCAzMjE5LCAwLCAwLCAwLCAxMDM3LCAwLCAyMDI1LCAwLCAxMzA5OCwgMCwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDE5NDU4NywgMTEwNzIsIDAsIDAsIDAsIDEyNjA2LCAwLCAyODI1LCAwLCAKLSAgICAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDAsIDAsIDAsIDEyMDU5MywgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCAKLSAgICA0MzYxNCwgMjgzMSwgMCwgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgCi0gICAgNDEzMzIsIDAsIDEyMzMzLCAwLCAxNjY4LCAwLCAwLCAwLCAxMTg3LCAwLCA0MjYyOCwgMCwgMCwgMCwgMCwgMzI0MCwgMCwgCi0gICAgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAwLCA1NzEsIAotICAgIDAsIDQ5MTgsIDAsIDUyODgsIDAsIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgMCwgMTE1NzEsIAotICAgIDc2MTUsIDAsIDAsIDQyMzcsIDAsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAwLCAKLSAgICAxMTQwMywgMCwgMCwgMCwgMzc5NiwgMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDY0ODU3LCAwLCAKLSAgICAyODU1LCAwLCA2NjMwOCwgNDE2MjEsIDAsIDAsIDAsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCAwLCAKLSAgICA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgMTE5OTMxLCAwLCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgCi0gICAgMjM3OCwgNDMxMzYsIDAsIDg0NjYsIDAsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAxMTQwOSwgMCwgCi0gICAgMCwgMCwgNjYzMTksIDAsIDAsIDExNjEyLCAwLCAwLCAyMzc0LCAwLCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIDUyODYsIAotICAgIDExOTI5NywgMCwgMCwgNjQ5MjUsIDAsIDAsIDAsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAxOTQ1ODEsIDMzMDksIAotICAgIDAsIDAsIDAsIDAsIDExOTc1LCAwLCA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIDAsIDAsIDQyNTY1LCA0MTY1MSwgCi0gICAgMCwgMCwgMCwgNDE2NTAsIDAsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDY1MTAwLCAwLCAKLSAgICAxNDc1LCAwLCAwLCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgMCwgMCwgMzI1NiwgMCwgNDIwNzYsIDAsIDAsIDAsIAotICAgIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAwLCAxMDU2MiwgNzQyMTUsIDY3NjA4LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgCi0gICAgOTAxNSwgMCwgMCwgMzYzNSwgNjQzMzcsIDAsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIAotICAgIDAsIDAsIDY1NjEzLCAwLCAwLCA3Mzk5NywgMCwgMCwgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMCwgNDE3NiwgMCwgCi0gICAgMjAzNCwgMCwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDAsIDAsIDAsIDM2NDksIDEzMTQ5LCAKLSAgICA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCAwLCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgCi0gICAgMTIwMTM0LCA3NDIzOCwgMTIwMTI5LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAxNzYxLCAxMTgxMiwgNjUzNzksIAotICAgIDc0NTA5LCAwLCAxMTU5LCAwLCAwLCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIDQxNjgwLCAwLCAwLCAxMTUzNCwgMTUxNCwgCi0gICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMCwgMTI5ODksIDE5NDU2MCwgOTM2OCwgMTI4NDgsIDE2MjQsIAotICAgIDQzMjcwLCAwLCAxOTQ1NjMsIDEwODE4LCAxOTQ1NjIsIDEyNjQ5LCAwLCAwLCAxMTk0LCAzMjQyLCAwLCA5NTU1LCA4NTk4LCAKLSAgICAxMjAyOTksIDYxNjksIDAsIDE1NTEsIDI3OTgsIDY1MTc2LCAxMjAyOTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAKLSAgICAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAwLCAwLCAwLCAwLCA0ODkxLCAwLCAxMDY0MSwgMCwgNzM3NDYsIDAsIDAsIDAsIAotICAgIDczNzg3LCAwLCAwLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgNjQ5NTIsIDAsIDE5MywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODE1NywgOTczNiwgNjQ1MDMsIDY1NDE4LCAwLCAwLCA3NDAzNSwgMCwgMTE5MTMsIDczODc0LCA2Njk2LCAwLCA4OTIwLCAKKyAgICAwLCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgMTg1NywgCisgICAgMCwgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgNzgzMjEsIDc4MzIyLCA0NjI0LCA3ODE4LCAxMTkxNzMsIDAsIAorICAgIDAsIDc4MDUsIDAsIDAsIDY5MzUsIDAsIDc4MzI1LCA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCAKKyAgICA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIAorICAgIDY1ODQ5LCA3NzgzMSwgMCwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDAsIAorICAgIDE5NTA2MiwgOTk0OSwgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAwLCAKKyAgICA3NDM5NywgNDE0NjgsIDAsIDAsIDUyOTIsIDU1MjcyLCAwLCAxOTM5LCA1MzAyLCAzOTcwLCAwLCAxMjQ1NSwgMTc5MywgMCwgCisgICAgMCwgMCwgNjY0MywgMCwgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDc4MzI5LCAwLCAxMzIxOSwgOTU2OSwgMCwgCisgICAgNzQzODMsIDAsIDAsIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCA3ODM0MCwgNDM2MzEsIDUzMjQsIAorICAgIDY2NDQzLCAzNzg0LCA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIDMzNjAsIDc4MzQ0LCAxMTUyMywgCisgICAgMCwgMCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDAsIDQxODIxLCAxMjQ5LCA3ODM2MCwgNzgzNjEsIDc4MzU2LCA3ODM1OCwgCisgICAgNzgzNTMsIDY0ODk5LCA2NDc2MywgNDExNDksIDQxODA3LCA0MzE2MiwgNDE4MTUsIDQxMTUwLCAwLCAxMDU3MSwgMTAwOTYsIAorICAgIDAsIDAsIDc4MDc0LCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgCisgICAgNzQ0NjYsIDAsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxOTQ2MTAsIAorICAgIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgMTMwMTksIDExNjcwLCAwLCAzMTUsIDEyODEzLCAwLCA3ODQzMiwgCisgICAgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgMCwgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDAsIDY3ODQ3LCAKKyAgICAwLCAwLCAwLCA3ODM2NSwgODc4NywgMCwgMTk0NjE2LCA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgCisgICAgMCwgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIDAsIDcxNzYsIDAsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIAorICAgIDc0NTM0LCA4MTE5LCA2NDg3NCwgOTE3ODE2LCAwLCAwLCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCAKKyAgICA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgCisgICAgMTE5MTAwLCA0MTIzNiwgMCwgNDIwMDUsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgMzY3MCwgMCwgMTk0NjAwLCAwLCAwLCAKKyAgICA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIDYxOSwgNDYzNSwgNjUwODAsIDAsIDAsIDQxMjAsIAorICAgIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIDkzNjYsIDQyNzkwLCA0MjAwNiwgMCwgNjUzMjcsIAorICAgIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCA2NTMyMSwgNjUzMjAsIDY1MzM1LCA2NTMzNCwgNjUzMzMsIAorICAgIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgMCwgOTEyOCwgMTE4ODg1LCA0MjA3MywgNjc4NSwgNjQ1OTAsIAorICAgIDAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMCwgNDEyMjgsIAorICAgIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIDQzNTMzLCA3ODQ1OSwgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCAKKyAgICA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgNDYxNSwgMTI2OTUsIDAsIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgCisgICAgNTYyLCAxMjE2OSwgNjU5MCwgNjk3NjIsIDY2NDU1LCA2NDczOCwgMzIxOSwgNjg2NTQsIDAsIDAsIDEwMzcsIDAsIDIwMjUsIAorICAgIDAsIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgCisgICAgMCwgMCwgMCwgMTI2MDYsIDc4NDMzLCAyODI1LCAwLCAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDAsIDAsIDAsIAorICAgIDEyMDU5MywgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCA3NDU5NiwgMTE0NjUsIAorICAgIDUyMTIsIDAsIDY0NzAzLCAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIDE2NjgsIDAsIDAsIAorICAgIDAsIDExODcsIDAsIDQyNjI4LCA3ODU3NSwgMCwgMCwgMCwgMzI0MCwgMCwgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgCisgICAgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAwLCA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgCisgICAgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAwLCAxMTU3MSwgNzYxNSwgMCwgMCwgNDIzNywgMCwgCisgICAgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIDAsIDAsIDAsIAorICAgIDM3OTYsIDY4MDAsIDAsIDM5OTQsIDExNDIxLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDg1NywgMCwgMjg1NSwgMCwgNjYzMDgsIAorICAgIDQxNjIxLCA2ODIxNCwgMCwgMCwgMTA2NTQsIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDQzOTcyLCA2NTg0NywgCisgICAgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgNzQyNzAsIDAsIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAyMzc4LCAKKyAgICA0MzEzNiwgMCwgODQ2NiwgMCwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIDExNDA5LCA2ODM3MywgCisgICAgNjM4MiwgMCwgNjQ2MzQsIDAsIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgMCwgODQ3NSwgMTE2MDksIDY2MzEzLCAwLCAwLCAKKyAgICA1Mjg2LCAxMTkyOTcsIDAsIDAsIDY0OTI1LCAwLCAwLCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAKKyAgICAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgMCwgCisgICAgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKKyAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA2NTEwMCwgMCwgMTQ3NSwgMCwgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIAorICAgIDAsIDAsIDMyNTYsIDAsIDQyMDc2LCA0MzI1MiwgNzg4MjMsIDAsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAwLCAxMDU2MiwgCisgICAgNzQyMTUsIDQzMDY1LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgMCwgMCwgMzYzNSwgNjQzMzcsIDAsIDAsIDAsIAorICAgIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIDY1NjEzLCA3NzkwOSwgMCwgNzM5OTcsIDAsIAorICAgIDAsIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDAsIDQxNzYsIDAsIDIwMzQsIDAsIDEyMDgwNSwgNjU4OTEsIDEyNzAzOCwgCisgICAgMCwgMzE4LCAyMDM4LCAwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgMzYzNCwgMTIwMjkxLCAKKyAgICAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgMTIwMTM0LCA3NDIzOCwgNDI2NjQsIDI4NDksIAorICAgIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDAsIDExNTksIDAsIDAsIDAsIDAsIAorICAgIDcxNzgsIDE5NDYzMiwgMCwgNDE2ODAsIDAsIDAsIDExNTM0LCAxNTE0LCAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIAorICAgIDY3ODc3LCAwLCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAxNjI0LCA0MzI3MCwgMCwgMTk0NTYzLCAxMDgxOCwgCisgICAgMTk0NTYyLCA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAKKyAgICAxMjg3MSwgMTU1MSwgMjc5OCwgNjUxNzYsIDEyMDI5OCwgNDI3NTIsIDExOTAyNSwgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgCisgICAgNjY2NDgsIDAsIDAsIDY4MzY0LCAwLCA0ODkxLCAwLCAxMDY0MSwgMCwgNzM3NDYsIDAsIDY4MzUyLCAwLCA3Mzc4NywgMCwgCisgICAgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCAKICAgICA1MjcxLCAwLCAxMTk2NjEsIDExODg4MiwgMTM2MiwgMTMyOTcsIDAsIDAsIDAsIDAsIDczNzg5LCAwLCA2NjU4LCA0NDI2LCAKLSAgICAwLCAwLCAwLCAxMTkxMjMsIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCAwLCAyNDE2LCAzMzEwLCA2NjAzMCwgMCwgMzc5LCAKLSAgICAwLCAwLCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMCwgNDU0OSwgMCwgMCwgMCwgMCwgMTA4MDcsIDk1NTgsIDAsIDAsIAotICAgIDg1MTUsIDg2ODgsIDEyODY2LCAwLCAzMjk0LCAwLCAwLCAwLCAwLCA3NTY0LCAwLCA0MzMyOSwgMCwgMCwgNzM3NTcsIAotICAgIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgNzIwMiwgMCwgMTI2NzYsIDY2NjE1LCAwLCAzMjE1LCAwLCA3NzEwLCAxNjEwLCAKLSAgICA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIDAsIDY1OTI0LCAwLCAyMjgsIDAsIDE1MDEsIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCAKLSAgICA2MjI1LCAwLCA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAwLCAwLCA4NTAyLCA1NzYyLCAKLSAgICAxOTY3LCA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCAwLCAwLCAwLCAxMDQxNCwgMTMwMDEsIDgxNDEsIDAsIDQyNTM3LCAKLSAgICAxNTU3LCAwLCAwLCAwLCAwLCA4NjMxLCAyNTQ1LCAxMjA2NzIsIDAsIDAsIDc0MTkwLCAwLCAwLCAwLCA0Mjc2MiwgMCwgMCwgCi0gICAgMTY1MCwgMjYyLCAxNjM3LCAwLCA3OTAxLCAzMjM4LCAwLCA0MTg2MSwgMCwgMCwgNjUxNTgsIDEwODYwLCAwLCAxMTkxMzQsIAotICAgIDc1MjcsIDAsIDQzMzE5LCA2NDE5LCAwLCA0NSwgMCwgMCwgMCwgMCwgMTE5ODEwLCA3MTk0LCA1MjkxLCAwLCAwLCAxMzEyOSwgCi0gICAgMCwgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCAwLCAxNzksIAotICAgIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgMCwgMTE4ODEzLCAwLCAxMTg5OTYsIDAsIDI4NTAsIDgwODQsIDAsIDczODUwLCAKLSAgICAyODAxLCAxMTk4MzcsIDQyMDY5LCAxMTk4MzksIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAxMTk4NDMsIDExOTg0MiwgNzQ3NjcsIAotICAgIDAsIDAsIDAsIDAsIDgyNDUsIDExOTMxMywgMzE1OCwgMTE5ODUzLCA0Mzg5LCA3MzgxMywgOTIzLCAxMTk4NTcsIDExOTg1NiwgCi0gICAgMjkyLCAxMzAwMiwgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIDExOTg0OSwgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIAotICAgIDcyNTMsIDEyNzExMCwgMTIwNjE4LCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgMCwgMzIyOCwgCi0gICAgNzM4NjksIDg3ODMsIDAsIDExOTYxNCwgMjczMSwgMCwgMCwgMTE4OTM5LCA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgMCwgCi0gICAgNDMzMTYsIDQxNzcsIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgMCwgNjQ1MDAsIDY4MTMzLCAwLCAwLCAxODU2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgMCwgMCwgMCwgMCwgNzQwNzIsIDAsIDAsIDAsIDAsIDIwMzMsIDExOTAwOCwgMCwgCi0gICAgMTk1MDI2LCAwLCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgMCwgMCwgNjU2NzQsIDAsIDAsIDQxNjg5LCAwLCA3NDAwNiwgCi0gICAgNjQ5MDksIDY2NDYsIDExNzkwLCA3NDAxOSwgMCwgMCwgMCwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCAKLSAgICA4MjU3LCAwLCA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDAsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgCi0gICAgNjY3MjEsIDExMzQyLCAwLCAwLCAwLCAwLCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgMCwgMCwgCi0gICAgMTE5NDYsIDAsIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCAwLCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIAotICAgIDc2NDgsIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgMCwgNDU2MywgMCwgMCwgCi0gICAgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAwLCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIDAsIAotICAgIDg3NSwgNzkwLCAwLCAwLCAwLCAwLCA2NjE4MiwgMCwgNTQyOSwgMCwgNjYxODAsIDAsIDY2MTgxLCAwLCAwLCAwLCA0MjA2NywgCi0gICAgMCwgNTQzMywgMTA2NTcsIDc5MTEsIDAsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMCwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgCi0gICAgNTQyMywgNDYxMSwgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAwLCAwLCAwLCA0NDE4LCA2NjE4NCwgNDYyOCwgCi0gICAgNDI0NSwgMCwgMCwgMCwgMTg1MSwgMCwgMCwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgMCwgNDI3NzYsIDY2MTg3LCAKLSAgICAxMjgzNywgODgyOSwgMCwgMCwgMCwgMCwgNDMzMTgsIDAsIDg4MDksIDExOTk3NCwgMCwgMCwgMTIwNjA0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NDI3LCAwLCA0NTg4LCAwLCAwLCA3NDQ4NCwgMCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgMCwgCi0gICAgMCwgNzkzLCA3NDQwNCwgMCwgMzA1LCA1NjcsIDAsIDg0MiwgMCwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIDExODg3NywgMCwgCi0gICAgNzgzNywgOTE3NjI1LCA4MTgsIDUzMzcsIDkxNzYyMiwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCA5MTc2MTgsIDEyMDU5NCwgCi0gICAgNzQwODYsIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgOTE3NjA5LCA5MTc2MDgsIDQ5NjksIAotICAgIDEyNTQsIDkxNzYwNSwgOTE3NjA0LCA5MTc2MDMsIDkxNzYwMiwgNjUyMjgsIDAsIDAsIDAsIDI4NDAsIDAsIDExOTk4MiwgMCwgCi0gICAgMCwgMzI0NSwgOTA2OCwgMTE5MDY5LCA2NDcyNSwgMCwgMCwgMTI5OTEsIDAsIDI2NTEsIDAsIDAsIDkxNzYxMSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDMzMjIsIDAsIDAsIDAsIDY0MzcyLCAwLCAzMjI2LCA2NTUsIDc1MiwgNzQ1NywgNzQ1NiwgCisgICAgMCwgMCwgMCwgMTE5MTIzLCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgMCwgMjQxNiwgMzMxMCwgNDI3MDMsIDAsIDM3OSwgCisgICAgMCwgMCwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgNDU0OSwgMCwgMCwgMCwgMCwgMTA4MDcsIDk1NTgsIAorICAgIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDAsIDMyOTQsIDAsIDg1MjksIDAsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgCisgICAgMCwgMCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCAwLCAzMjE1LCAwLCAKKyAgICA3NzEwLCAxNjEwLCA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIDEyMDUzNywgNjU5MjQsIDk5NzQsIDIyOCwgNjYzNTQsIDE1MDEsIAorICAgIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCA2MjI1LCAwLCA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAKKyAgICAwLCAwLCA4NTAyLCA1NzYyLCAxOTY3LCA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCAwLCAwLCAwLCAxMDQxNCwgMTMwMDEsIAorICAgIDgxNDEsIDAsIDQyNTM3LCAxNTU3LCA0MzU5NCwgMCwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgMTIwNjcyLCAwLCAwLCAKKyAgICA3NDE5MCwgMCwgMCwgMCwgNDI3NjIsIDAsIDEyNzAxNywgMTY1MCwgMjYyLCAxNjM3LCAwLCA3OTAxLCAzMjM4LCAwLCAKKyAgICA0MTg2MSwgMCwgMCwgNjUxNTgsIDEwODYwLCAwLCA0MzY1OCwgNzUyNywgMCwgNDMzMTksIDY0MTksIDAsIDQ1LCAwLCAwLCAKKyAgICAwLCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIAorICAgIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCAwLCAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgMCwgCisgICAgMTE4ODEzLCAwLCAxMTg5OTYsIDExOTAwOSwgMjg1MCwgODA4NCwgMCwgNzM4NTAsIDI4MDEsIDExOTgzNywgNDIwNjksIAorICAgIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgMCwgMCwgMCwgMCwgODI0NSwgCisgICAgNjg0MDEsIDMxNTgsIDExOTg1MywgNDM4OSwgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIAorICAgIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAxMTk4NDksIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIAorICAgIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIDQzNTQyLCAwLCA2NDU3OCwgMCwgMzIyOCwgNzM4NjksIDg3ODMsIDAsIAorICAgIDExOTYxNCwgMjczMSwgMCwgMCwgNzg1ODUsIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCA3ODU4NiwgNDMzMTYsIDQxNzcsIAorICAgIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgMCwgNjQ1MDAsIDQzNjc0LCAwLCAwLCAxODU2LCAwLCAwLCA2Mzc5LCAwLCAwLCAwLCAKKyAgICAzMjA4LCAxMjk3NSwgMCwgMCwgMCwgMCwgNzQwNzIsIDU1MjY5LCAwLCAwLCAwLCAyMDMzLCA3ODU3NywgNzg1NzYsIAorICAgIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCAwLCA2NzYxMiwgNjU2NzQsIDAsIDAsIDQxNjg5LCAwLCAKKyAgICA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCA3NDAxOSwgMCwgMCwgMCwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgCisgICAgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIAorICAgIDY1MDkyLCA3MzkwMywgNjY3MjEsIDExMzQyLCAwLCAwLCAwLCAwLCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIAorICAgIDk2NywgMCwgMCwgMTE5NDYsIDAsIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCAwLCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIAorICAgIDEwMDg5LCA4NzAsIDc2NDgsIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgCisgICAgNDM2OTIsIDQ1NjMsIDAsIDAsIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMCwgODY4LCA4NzMsIDc2NDIsIDAsIAorICAgIDg2OSwgODc0LCA3NjQ0LCAwLCA4NzUsIDc5MCwgMCwgMCwgMCwgMCwgNjYxODIsIDAsIDU0MjksIDAsIDY2MTgwLCAwLCAKKyAgICA2NjE4MSwgNjg0NTIsIDAsIDAsIDQyMDY3LCAwLCA1NDMzLCAxMDY1NywgNzkxMSwgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgCisgICAgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgNTQyMywgNDYxMSwgMCwgNjc2MzcsIDAsIDk2NzksIAorICAgIDc0MTIyLCAwLCAwLCAwLCAwLCA0NDE4LCA2NjE4NCwgNDYyOCwgNDI0NSwgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAwLCAKKyAgICAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCAwLCA0Mjc3NiwgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCAwLCAwLCAxMTk5NzMsIAorICAgIDQzMzE4LCAwLCA4ODA5LCAxMTk5NzQsIDAsIDAsIDEyMDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyNywgMCwgNDU4OCwgCisgICAgNDM2ODAsIDAsIDc0NDg0LCAwLCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCAwLCAwLCA3OTMsIDc0NDA0LCAwLCAKKyAgICAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMCwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIDExODg3NywgMCwgNzgzNywgOTE3NjI1LCAKKyAgICA4MTgsIDUzMzcsIDkxNzYyMiwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCA5MTc2MTgsIDEyMDU5NCwgNzQwODYsIDkxNzYxNSwgCisgICAgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgOTE3NjA5LCA5MTc2MDgsIDQ5NjksIDEyNTQsIDkxNzYwNSwgCisgICAgOTE3NjA0LCA5MTc2MDMsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAwLCAwLCAyODQwLCAwLCAxMTk5ODIsIDAsIDAsIDMyNDUsIAorICAgIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgMTI5OTEsIDAsIDI2NTEsIDAsIDAsIDkxNzYxMSwgMTI3MDI2LCAwLCAwLCAwLCAKKyAgICA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgMCwgMCwgMCwgNjQzNzIsIDAsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKICAgICA3NDUyLCAzMjg1LCAwLCAwLCAxMTk5ODgsIDY1NjEwLCAwLCAwLCAwLCA2NzEsIDI1MCwgNzQzNCwgNjE4LCA2NjgsIDYxMCwgCiAgICAgNDI4MDAsIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgNjI4LCAzOTA1LCA3MzgxMCwgMCwgCi0gICAgMCwgNjQ3NDksIDY3ODUwLCAwLCAwLCAwLCAwLCAxOTQ4NzMsIDAsIDAsIDY1OTQ1LCAwLCAwLCAxMTk1OTAsIDAsIDAsIDAsIAotICAgIDk4NywgNjkyNywgMTE1NzIsIDQyMjYxLCAxMTQ2NCwgMzM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzMzQsIAotICAgIDQzMzI2LCAxMjYwOSwgMTE1MTksIDAsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDAsIDUyMDgsIDAsIDAsIDEwMzMyLCA1MjE4LCAKLSAgICA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAwLCA3Mzg5NCwgMCwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgCi0gICAgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDEyMDI4MiwgMCwgNDAwMCwgNzQyOSwgNzQyOCwgCi0gICAgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzksIDc4ODQsIDAsIDAsIDAsIDAsIDIxMSwgMjUwOSwgMCwgMTIwNTczLCAwLCAzMjIwLCAKLSAgICAwLCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDAsIDU4NTIsIDAsIDAsIDAsIAotICAgIDE3MDgsIDAsIDAsIDI2MjMsIDAsIDAsIDAsIDAsIDQ2OTgsIDY2NTA5LCAxMDY2LCAwLCA0NzAxLCAwLCAxMjAyODUsIAotICAgIDc0MjI1LCAxMTkxMTQsIDgyNjcsIDAsIDAsIDAsIDc1MTYsIDAsIDI2MjUsIDAsIDgwMzQsIDc0MzA5LCAwLCAzNjMxLCAKLSAgICAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCAwLCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAKLSAgICAwLCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgMCwgMCwgNjYzNjgsIDUwMTcsIAotICAgIDY0OTU2LCA3MDcxLCAwLCAwLCAxMDMwLCAxMTg4MDAsIDAsIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAKLSAgICAxMjAzNTAsIDAsIDAsIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgMTg4MCwgNzQ3NjYsIDAsIDg5MDgsIDAsIDAsIAotICAgIDY1OTEzLCAwLCAxMDc1MiwgMTMwMDMsIDAsIDAsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIAotICAgIDAsIDAsIDEyMDgwNiwgMTAwMjksIDM2NDEsIDU0MTksIDAsIDAsIDAsIDAsIDEyMDM0NCwgMCwgMCwgODYxMCwgNjUyMzAsIAotICAgIDc1OTIsIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDAsIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgMCwgMTk5NTMsIDAsIAotICAgIDE1MDQsIDAsIDAsIDAsIDc0MjA2LCA3NTI5LCAwLCAwLCAwLCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgCi0gICAgMTIxNTIsIDAsIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIDAsIDAsIDgwMzMsIDAsIDAsIAotICAgIDk4MTAsIDAsIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDAsIDAsIDAsIDAsIDExOTI0NywgMCwgMCwgNzQyOTEsIAotICAgIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMCwgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAwLCA3NDIzOSwgCi0gICAgNDEzMTcsIDAsIDU0MTcsIDAsIDAsIDAsIDkzNTMsIDAsIDQxMzE1LCA5MTc2MTYsIDAsIDAsIDY1NjksIDAsIDAsIDAsIAotICAgIDExOTIzNiwgNjM0LCAwLCAwLCAwLCA5MTc2MTAsIDQxNjUsIDg3NDYsIDAsIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCAKLSAgICAwLCAwLCAwLCA0MTAzNywgMCwgNzc4NiwgOTE3NjA3LCA0MTAzOSwgMCwgMCwgNjgwLCA2Mjc0LCAwLCAxMTgxLCA3MDU2LCAKLSAgICAzMTc0LCAwLCAwLCAwLCA2NTY2NSwgMCwgMCwgNjkyMCwgMCwgMCwgMCwgMCwgMCwgNjQ2NDQsIDEyNjk4MSwgMCwgMCwgCi0gICAgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIDY1MzAyLCA0MDk4OSwgMCwgMCwgMCwgNDI3NjAsIDAsIDAsIDAsIDQwOTg3LCA0NjY3LCAKLSAgICAwLCAwLCA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgMCwgMCwgOTIxLCA0NzQ0LCAwLCAKLSAgICAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgMCwgMCwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgCi0gICAgOTUxLCAwLCAwLCAwLCA3NjA0LCAwLCA0MDA5LCAwLCAwLCAxMjA1NjIsIDAsIDAsIDY0ODYwLCAxMTkxMzgsIDExOTkwMiwgCi0gICAgMCwgMCwgNDA0OCwgMCwgMCwgMTIwNTk2LCAxNjQ2LCAwLCA2NDUzNCwgNzM5OTUsIDAsIDAsIDExOTg5MCwgMjU3OSwgCi0gICAgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgMCwgMCwgCi0gICAgMTAwODQsIDczOTQzLCAwLCAwLCA5MTc1NjIsIDAsIDMzOTksIDk4NTEsIDAsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCAKLSAgICA4ODU0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCAwLCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAwLCAwLCAKLSAgICAwLCAwLCA1OTg5LCAwLCAwLCAwLCAwLCA0MTY4NSwgMCwgMCwgOTc2OSwgNDE2ODQsIDAsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIAotICAgIDAsIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKLSAgICA3NDU0MiwgMCwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDAsIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIDAsIDExNzMwLCAwLCAKLSAgICA5NTkzLCAxMTkxODgsIDI0MDMsIDY0ODA4LCAwLCAwLCAxMTcyOCwgNjU4OTQsIDAsIDAsIDc3NjQsIDAsIDAsIDEyMDgyNSwgCi0gICAgMCwgMCwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAwLCAKLSAgICAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIDM0NTgsIDQzNjUsIAotICAgIDAsIDAsIDM2NDcsIDAsIDI2MDIsIDAsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIAotICAgIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMCwgMCwgNzU5NywgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAwLCAKLSAgICA1MzQ0LCAwLCAwLCAwLCA5MDYyLCAxMTkyNTIsIDAsIDAsIDAsIDY0NDc5LCA5MjMyLCAwLCAwLCAwLCAwLCAxMDkwMCwgCi0gICAgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIAotICAgIDAsIDAsIDI5OSwgMCwgODUyNSwgMCwgMzUyNCwgMCwgODgzMSwgMCwgMCwgMzA3NSwgMCwgMCwgMCwgNjYzNjIsIDAsIAotICAgIDc0NzU4LCAwLCAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNzQzOTMsIDAsIDQzMjgzLCA1NTUxLCAwLCAKLSAgICAxMjcwODUsIDAsIDAsIDExODg1NSwgMCwgMCwgODY4MCwgNzIwNCwgMCwgMjU4OCwgMjkxNCwgNzAxMSwgMCwgMCwgMjQ3MSwgCi0gICAgMCwgMjg4MywgMjc0OSwgMTE5NTYzLCA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIDY3NSwgNDI0OTMsIDAsIDAsIDAsIAotICAgIDYyMTksIDAsIDAsIDQxMjMyLCAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDAsIDAsIDEyNzExLCAKLSAgICAzMTgxLCA2NjIxMiwgNzQyODksIDAsIDQyODU3LCA4MjYyLCAwLCAwLCAwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIAotICAgIDc0MDQ3LCAwLCAwLCA2NDY3NCwgMCwgMCwgNzM4NDYsIDAsIDEyNzIyLCAwLCA5MjIsIDc0NDI2LCA3NDUwNywgMCwgMCwgCi0gICAgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAKLSAgICAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAwLCAxOTAxLCAwLCAwLCAxMjA0NjAsIDc0MjUsIAotICAgIDMyMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NDU5LCAyNjA2LCAwLCA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA3MzcsIDAsIDAsIDAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDAsIDY1Njk1LCAwLCAzNywgNzA2OCwgCi0gICAgMCwgMTIwNDgwLCAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDEyMDQ4MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNjU1MTAsIDAsIDAsIDUyMzMsIDAsIDY0NzkyLCAwLCAwLCAwLCAwLCA3MDYwLCA5ODQ3LCAwLCAxNjg1LCA1OTUsIDAsIAotICAgIDczOTcxLCAxMjkyLCA4OTQwLCAwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgCi0gICAgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIDY1NDcsIDAsIDgyMDMsIDAsIDAsIDg0NTgsIAotICAgIDY1MjExLCA4NDk1LCAwLCAwLCA5MTc1NTIsIDc3OSwgMCwgNjQzNjcsIDI0NjUsIDAsIDgxOTMsIDAsIDk3MzAsIDkyODAsIAotICAgIDAsIDcwNjUsIDc0MTU1LCA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCAxMjA3MTUsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgCi0gICAgMTA4ODMsIDAsIDkxNzg3NiwgNzMyLCAzNzM3LCAwLCAxNTQ4LCAwLCAwLCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMCwgCi0gICAgNDM3NiwgMCwgNDExNDIsIDM3NDUsIDAsIDAsIDQyODg4LCA2NTcxMiwgMCwgMzg2OSwgMTE5MzcsIDU3MjUsIDAsIDE3ODMsIAotICAgIDAsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgMCwgMCwgMCwgNzY0LCAwLCAwLCA0MzUzMSwgCi0gICAgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAwLCAxMTQyMywgMCwgMCwgMCwgMCwgMCwgMCwgNjU1OSwgNjQ1NTcsIAotICAgIDAsIDAsIDEyMDY0OCwgNDMwMTksIDAsIDEwMjM4LCAwLCAwLCAwLCAxMjA2NzUsIDAsIDE0NzgsIDk3ODMsIDAsIDI2MDcsIAorICAgIDAsIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTk0ODczLCAwLCA0MzM3MiwgNjU5NDUsIDAsIDAsIDExOTU5MCwgCisgICAgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMTMzNCwgNDMzMjYsIDEyNjA5LCAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDAsIDUyMDgsIDAsIDAsIAorICAgIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAwLCA3Mzg5NCwgMCwgNTQzMiwgNjQ5NjUsIDU1MjcsIAorICAgIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIAorICAgIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgMTIwMjc4LCA3ODg0LCAwLCAwLCAwLCAwLCAyMTEsIDI1MDksIDAsIAorICAgIDEyMDU3MywgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIAorICAgIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCAwLCAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIAorICAgIDQ2OTgsIDY2NTA5LCAxMDY2LCAxMTk5MjEsIDQ3MDEsIDAsIDEyMDI4NSwgNzQyMjUsIDExOTExNCwgODI2NywgMCwgMCwgMCwgCisgICAgNzUxNiwgMCwgMjYyNSwgMCwgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAxMjAyOTMsIDg0MTYsIDAsIDAsIAorICAgIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAwLCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIAorICAgIDcxMywgNzk5MCwgMCwgMzk5MCwgMCwgMCwgNjYzNjgsIDUwMTcsIDY0OTU2LCA3MDcxLCAwLCAxMTkxNDQsIDEwMzAsIAorICAgIDExODgwMCwgMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgCisgICAgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgMCwgODkwOCwgMCwgMCwgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIDAsIAorICAgIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDAsIDY0Nzg1LCA3Mzk0LCAzNjQxLCA1NDE5LCAKKyAgICAwLCAwLCAwLCAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgCisgICAgMTI3NTIxLCA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgMTUwNCwgMCwgMCwgMTI5MTMsIDc0MjA2LCAKKyAgICA3NTI5LCAwLCAwLCAwLCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDAsIDY4MiwgNjY0NTgsIAorICAgIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIDAsIDAsIDgwMzMsIDAsIDAsIDk4MTAsIDEyNzI2OSwgMCwgMTI5NzAsIAorICAgIDAsIDQyMzUxLCAxMDEwOSwgMCwgMCwgMTk0NjkzLCAwLCAxMTkyNDcsIDAsIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgCisgICAgMCwgNzM4ODcsIDAsIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgMCwgMCwgNzQyMzksIDQxMzE3LCAwLCAyMDkxLCAKKyAgICAwLCAyMDkwLCAwLCA5MzUzLCA3Nzg4NywgMjA3NywgNzc4ODYsIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgCisgICAgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgCisgICAgMCwgMCwgMCwgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgNDEwMzksIDAsIDAsIDY4MCwgNjI3NCwgMCwgMTE4MSwgCisgICAgNzA1NiwgMzE3NCwgMCwgMCwgMCwgNjU2NjUsIDAsIDAsIDY5MjAsIDAsIDAsIDAsIDExODk2NSwgMCwgNjQ2NDQsIAorICAgIDEyNjk4MSwgMCwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgCisgICAgMCwgMCwgNDA5ODcsIDQ2NjcsIDAsIDAsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCA0NzQ5LCAwLCAwLCAKKyAgICA5MjEsIDQ3NDQsIDAsIDEyNzAyLCAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgMCwgNzQwMzYsIAorICAgIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCAwLCA3NjA0LCAwLCA0MDA5LCAwLCAwLCAxMjA1NjIsIDAsIDAsIAorICAgIDY0ODYwLCAxMTkxMzgsIDExOTg4NywgMCwgMTk0NzAyLCA0MDQ4LCAwLCAwLCAxMjA1OTYsIDE2NDYsIDc3ODkwLCA2NDUzNCwgCisgICAgNzM5OTUsIDAsIDAsIDExOTg5MCwgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAKKyAgICAyOTc1LCA3NDQ0MiwgOTgyMiwgMCwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDAsIDMzOTksIAorICAgIDk4NTEsIDAsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNzc3LCA5MTUxLCAKKyAgICAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMCwgMCwgMCwgMCwgNTk4OSwgMCwgMCwgMCwgMCwgNDE2ODUsIAorICAgIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgMCwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCAKKyAgICA0MTI5NywgMCwgMzY2NiwgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIDc0NTQyLCA2OTc3MSwgNzQ0NzksIDAsIAorICAgIDY1NTgsIDAsIDAsIDY5NzY1LCAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIDAsIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgCisgICAgOTA2MCwgMCwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgMCwgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIAorICAgIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDY1ODk0LCAwLCAwLCA3NzY0LCAwLCAxMTA5NCwgMTIwODI1LCAwLCAwLCAKKyAgICA0MjgyLCA4Mjk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjc1MDksIDYzODU0LCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIAorICAgIDc4MjUwLCAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIAorICAgIDM0NTgsIDQzNjUsIDAsIDAsIDM2NDcsIDAsIDI2MDIsIDAsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAKKyAgICAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMCwgMCwgNzU5NywgMTA1MjgsIDAsIDAsIDM3MzIsIAorICAgIDczOTEwLCAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAwLCAwLCA2NDQ3OSwgOTIzMiwgCisgICAgMCwgMCwgMCwgMTk0NzEyLCAxMDkwMCwgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIAorICAgIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIDAsIDAsIDI5OSwgMCwgODUyNSwgMCwgMzUyNCwgOTE3NTY1LCA4ODMxLCAwLCAwLCAKKyAgICAzMDc1LCA2Nzg2NywgMCwgMCwgNjYzNjIsIDAsIDc0NzU4LCAwLCAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCAKKyAgICA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIDAsIDYzNDAsIDExODg1NSwgMCwgNzgxMzQsIDg2ODAsIAorICAgIDcyMDQsIDAsIDI1ODgsIDI5MTQsIDcwMTEsIDU1MjgxLCAwLCAyNDcxLCAwLCAyODgzLCAyNzQ5LCAxMTk1NjMsIDczNzc0LCAKKyAgICAxMDkxMywgMCwgMCwgODY2NiwgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAxMDkyOCwgCisgICAgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDAsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCAKKyAgICA0Mjg1NywgODI2MiwgMCwgMCwgMCwgMCwgNDIzNDcsIDEyMDkyLCA5NjE1LCA3MjM0LCA3NDA0NywgMCwgMCwgNjQ2NzQsIDAsIAorICAgIDAsIDczODQ2LCAwLCAxMjcyMiwgMCwgOTIyLCA0Mzk4MywgNzQ1MDcsIDAsIDc0NDYxLCAzMjE4LCAxMjA0NzEsIDc0MjkwLCAKKyAgICAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIDMyMTQsIDEyMDQ2MSwgMTIwNDY4LCAKKyAgICAxMjEyOCwgMzIwNywgNjU0ODYsIDc4NzI5LCAxOTAxLCA3ODcyNywgMCwgMTIwNDYwLCA3NDI1LCAzMjA1LCAwLCA3ODczNywgCisgICAgNzg3MzYsIDc4NzM1LCA0MzM4MywgNzg3MzMsIDY1NDU5LCAyNjA2LCA3ODczMCwgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCAKKyAgICA0MTI3MiwgMCwgMCwgMCwgMCwgMTIwNzM3LCAwLCAwLCAwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCAwLCA2NTY5NSwgMCwgMzcsIAorICAgIDcwNjgsIDAsIDEyMDQ4MCwgMTIwNDc5LCAzMjA5LCAxMjA0NzcsIDAsIDEwNjM4LCA5NzY4LCAxMjA0ODEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDY1NTEwLCAwLCAwLCA1MjMzLCAwLCA2NDc5MiwgMCwgMCwgMCwgMCwgNzA2MCwgOTg0NywgMTIwMTQ0LCAKKyAgICAxNjg1LCA1OTUsIDAsIDczOTcxLCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgNjU0MSwgCisgICAgMCwgMCwgMCwgMzI0MywgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIDY1NDcsIDAsIAorICAgIDgyMDMsIDc4NDg4LCAwLCA4NDU4LCA2NTIxMSwgODQ5NSwgMTE5OTA0LCAwLCA5MTc1NTIsIDc3OSwgNzgzMTQsIDY0MzY3LCAKKyAgICAyNDY1LCAwLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIAorICAgIDEyMDcxNSwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAxMDg4MywgMCwgMTk0ODUyLCA3MzIsIDM3MzcsIDEyNzI1MywgMTU0OCwgCisgICAgNjg2NTAsIDAsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCAKKyAgICA0Mjg4OCwgNjU3MTIsIDAsIDM4NjksIDExOTM3LCA1NzI1LCAwLCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgMCwgMCwgMTE5MTgsIAorICAgIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCAwLCAwLCAwLCA3NjQsIDAsIDAsIDQzNTMxLCAwLCA5MDMzLCAwLCA0MjUzMiwgNjIyMywgCisgICAgMTEwNDIsIDEyMDc0OSwgMTE0MjMsIDAsIDAsIDAsIDQzNDY1LCAwLCAwLCA2NTU5LCA2NDU1NywgMCwgMCwgMTIwNjQ4LCAKKyAgICA0MzAxOSwgNDM0NzcsIDEwMjM4LCAwLCAwLCA0MzM3NywgMTIwNjc1LCAwLCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgCiAgICAgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgMCwgNDExNDQsIDAsIDAsIDQzNTM3LCAKLSAgICAwLCAxMDA5MywgNDM2OSwgOTE3NzkxLCAwLCAwLCA4ODIwLCAzOTQ3LCAwLCAwLCAxMTUxNSwgNTI2LCAwLCA0MTI5NSwgCi0gICAgMTk0NjAzLCA5MTc3ODUsIDAsIDAsIDc2ODgsIDkxNzc4NiwgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIDAsIDE1NDMsIAotICAgIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgMTE3OTQsIDQyMDgyLCAKLSAgICAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgOTMzNSwgMTI4NTAsIDExOTg3MCwgNjU1MywgNzA1NSwgMCwgCi0gICAgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDcwNTIsIDAsIDAsIDEyOTkwLCAxMTYwLCA0MjA4NCwgMTE5NjUwLCA0MTIxNywgCi0gICAgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgMzEzNywgMCwgNDE0NywgMCwgNDEyMTYsIDc4NDQsIAotICAgIDI2MTYsIDExOTE5MCwgMCwgNjUyMzQsIDAsIDEzMDc2LCAzMTM1LCAwLCAwLCAxMTkxMzksIDMxNDIsIDE5NDk0OCwgMCwgCi0gICAgMTA4MTksIDExOTU4MCwgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCAwLCA2MjI3LCAwLCAwLCA3NDc3NSwgMCwgCi0gICAgNjE2MywgMCwgMCwgMCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgMCwgMTE5NTczLCAwLCA1ODM0LCAwLCAKLSAgICA2MjIyLCAwLCAwLCAxMjA4NiwgMCwgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgMCwgMTEzMTAsIDAsIDg4ODIsIDAsIAotICAgIDAsIDI1NzAsIDcwMjEsIDAsIDAsIDQzMTEwLCAwLCAxMjM0LCA2NTQwLCA2OTc0LCAwLCAwLCAwLCA1MDAyLCAwLCA0MTI4NiwgCi0gICAgMCwgMTI3MDE5LCAwLCA0MzU4NSwgMCwgNjU1MSwgMCwgMCwgMCwgNDEyODksIDAsIDAsIDAsIDg5NzcsIDYwMiwgMTIwODE0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MTI3OSwgMCwgMCwgMCwgMCwgNDM2MTUsIDAsIDAsIDAsIDAsIDEyNzI3LCAwLCAwLCAwLCAKLSAgICA5NDc1LCAwLCA2NTEwNSwgMCwgOTYzMywgMTA4ODYsIDQzNTkyLCA3ODMxLCAwLCAwLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIAotICAgIDgyOTAsIDgyOTEsIDQzMDUxLCAwLCAwLCAyNTk2LCA0MzU4NCwgMCwgMTMxMTMsIDAsIDAsIDIzOTMsIDcwNTgsIDkwODcsIAotICAgIDc0MDY3LCAwLCA0MTU3NCwgMCwgMCwgNzQwNTgsIDQyMDM1LCAwLCAwLCAwLCAwLCA5ODU0LCAwLCA2NDY5NiwgMCwgMCwgMCwgCi0gICAgNzQxNjUsIDAsIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDAsIDM3NTEsIDkxMjAsIDAsIDAsIDE3OTgsIDcwOSwgMCwgCi0gICAgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIDEyNDMwLCA4MTM3LCAwLCAwLCAwLCAwLCAyNDUsIDAsIDExNDU2LCA0MTIzMywgCi0gICAgNzA3MCwgMCwgMCwgNjEzNiwgMCwgNjU2NzcsIDg2ODIsIDQxMjM1LCAwLCA0MjA0NSwgOTgwNCwgMCwgNDMyLCAzNTk1LCAwLCAKLSAgICA2NTQzNywgMCwgNzQ0NTUsIDQyMzk5LCAwLCAwLCAwLCAwLCAxMTk2NTgsIDAsIDAsIDAsIDAsIDg3OTcsIDAsIDkwNTIsIAotICAgIDY0ODg4LCAwLCAyMzU2LCA5NSwgNzQ3ODQsIDEwNTgwLCAwLCA0MjI4NiwgMCwgNjQ2NDAsIDAsIDExOTEwNCwgMCwgMCwgMCwgCi0gICAgMTAwNjMsIDEyNjUyLCAxMjE5OSwgMTI3MDMwLCAwLCAyNTY2LCAxMTk3MSwgMCwgMCwgMTA2NSwgMCwgMCwgMCwgMjU3NiwgCi0gICAgMCwgMCwgMCwgNDM2MDQsIDAsIDAsIDc0MDgyLCA1MTQsIDc0NTAyLCAwLCAyOTIxLCA0MzIxNSwgNjQ0OTMsIDU3NzIsIAotICAgIDEyOTY4LCAwLCAwLCA3NDU4MCwgOTE3NTY1LCAyNTgwLCAwLCA0MTM0MSwgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCAKLSAgICA1MjkzLCAwLCAwLCAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIAotICAgIDkxNzkxNSwgMCwgMTI3MDI2LCAwLCA3NDgyMSwgMCwgMCwgMTE5MDQyLCAwLCAwLCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIAotICAgIDExMzIsIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIDQyNTY5LCAwLCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIDQyNDMyLCAKLSAgICAwLCAwLCAwLCAwLCA2NDQ5NiwgNzQxMDksIDAsIDk5MTUsIDAsIDAsIDcwNjEsIDQxMzM2LCAzODU0LCAwLCAxMzE0MSwgCi0gICAgOTE3NTY0LCAwLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwMjksIDQzNTQzLCAwLCAKLSAgICAyMzUzLCA2MzA4LCAwLCA3NDc5MiwgMjYxMSwgMTE5MTg2LCAwLCAwLCAwLCAwLCAwLCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgCi0gICAgMTE4OTc2LCAwLCA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgNDEyMjYsIDAsIAotICAgIDEyMTA3LCAwLCAxMDkwNSwgNjUwMTAsIDAsIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDAsIDEzMTIxLCAwLCAwLCAKLSAgICAxMjAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU4MTYsIDY4MTExLCAwLCAwLCA2NTY2OCwgMCwgMCwgMTE4Nzg0LCA2NjM2NSwgCi0gICAgMCwgMCwgMTI2NDgsIDAsIDAsIDAsIDU3ODUsIDQxMzA5LCA5NzY0LCA0MTMxNiwgNjU4NzcsIDAsIDEzMjMwLCA0MTI5OSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMjIsIDAsIDE5MSwgNzQxMTksIDAsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCAKLSAgICA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCA0MTU3NywgMCwgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAKLSAgICAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgMTI5MDEsIDAsIDAsIDM0MywgMCwgMCwgNDEzNjAsIDAsIDAsIDQ3NDMsIDAsIDAsIAotICAgIDc0MDQwLCA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzI0LCAwLCAzNzM5LCA2MjYzLCAwLCAwLCAzOTY0LCA2NTkyLCAKLSAgICAwLCAwLCA2NjA0MCwgMCwgNDI1NjgsIDAsIDAsIDE3NzgsIDM5NTYsIDAsIDQyMDcwLCA2NTYzLCA0MzA3NSwgOTAxOCwgMCwgCi0gICAgMCwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCAwLCAwLCAwLCA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIAotICAgIDE3MywgNjY0NjAsIDcxNzQsIDAsIDAsIDE3NTAsIDAsIDQzOTQsIDAsIDE4MDcsIDAsIDAsIDAsIDU4ODksIDAsIDcxODAsIAotICAgIDAsIDExOTE0NSwgMCwgMCwgNDI0NzEsIDY5ODIsIDE3MjEsIDExOTE0NCwgNzg5MSwgNDIyNDMsIDQyMTYwLCAyNTgzLCAKLSAgICA0NTEyLCAwLCAwLCAwLCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgMTE5MTQwLCAzOTc1LCAwLCAKLSAgICA3NDA4NywgMCwgMTI2NzIsIDM3OTgsIDI3MDMsIDAsIDAsIDAsIDk3NzQsIDEyNzUsIDAsIDAsIDQxMDk1LCAzOTYyLCAwLCAKLSAgICA3ODczLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgMCwgMCwgNzM5OTQsIDczOTkyLCAxNDY4LCAwLCAwLCA0MTg1MSwgMCwgCi0gICAgNDE4NDYsIDAsIDAsIDc2MzMsIDQxODQ5LCAwLCA0MzIwLCAzMjI0LCAwLCAwLCAwLCA0MjUzMSwgMCwgMTUxMCwgMCwgCi0gICAgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDAsIDAsIDg3NzAsIDAsIDAsIDEyNzEyMCwgMTkxMCwgODY3MSwgMCwgNDI4MywgCi0gICAgMCwgMTI3MTE3LCAwLCAwLCAyNjU0LCA3ODkzLCAwLCAwLCAwLCAwLCA2NTEwNiwgNDI3NjEsIDEyODU3LCA0NTgxLCA4NDExLCAKLSAgICAxMTkwMjksIDEyNzEyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTczMywgNDM5MiwgMjU2OCwgMTA3ODYsIDAsIDAsIDgxODQsIAotICAgIDQxNDg2LCAwLCAwLCAwLCAwLCAwLCAwLCA3MTg1LCA3OTY1LCAwLCAwLCAwLCAwLCA0MTM1MCwgOTEyOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTA0ODEsIDAsIDAsIDcxNzEsIDAsIDM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3NjIwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA2NTIwMywgMTEzOTIsIDAsIDAsIDAsIDMyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzYxOSwgMCwgMCwgMTAwNDMsIDAsIAotICAgIDExODYsIDQxNTcxLCA2OTk5LCA2MTcsIDk0NjQsIDAsIDM2NzUsIDUyMDcsIDY1MDYyLCA1MjEzLCAwLCAyNjE3LCA0MTM0OCwgCi0gICAgNDE1NjgsIDAsIDMyNTMsIDEyMDUzNSwgMCwgODYzMCwgMCwgMCwgNTU5NiwgNTU0NSwgNzI4OCwgMjU4NiwgNjQ4ODcsIDAsIAotICAgIDUyMTcsIDAsIDAsIDAsIDAsIDY0MjkzLCA2ODA5OCwgMjYzNSwgMCwgMCwgMCwgMCwgMCwgNzgzNSwgMCwgMCwgMTk0OTg4LCAKLSAgICAwLCA2NDU1OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc4NCwgMCwgMCwgMCwgMCwgNDAxMSwgMCwgNjgxMDEsIDAsIDc4NjQsIAotICAgIDQyNTQsIDExODk3NSwgMCwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgNTU5OCwgMTIwNywgMTIwNTIxLCAwLCAzNTAxLCAKLSAgICA0MjU4MiwgNDM2MDAsIDAsIDAsIDExMjQsIDU1OTcsIDAsIDAsIDkzMjEsIDAsIDAsIDAsIDAsIDE3MTksIDEyMDU3NiwgMCwgCi0gICAgOTY3MSwgMTEyNSwgNDM5OSwgMCwgMCwgMCwgNzYzMSwgNTQ4OCwgNjUyMjMsIDAsIDAsIDU0OTEsIDAsIDg5MzcsIDQzMDQ0LCAKLSAgICAyNjA0LCA3NDE4NywgNTQ5MCwgNDMwNDYsIDU0ODksIDcyMTIsIDExNzY4LCA0MzA0MywgNjMwMCwgMCwgMTk0Nzg5LCAwLCAKLSAgICA0MzkwLCA0NTQsIDQxMzk3LCAwLCA5ODc1LCA3NTkzLCAxOTQ3OTIsIDAsIDExODkxMywgNzIwNywgMCwgNjU5MDEsIDIzOTQsIAotICAgIDI1NzUsIDAsIDM3NDYsIDExMDE2LCA2NTc1MiwgMCwgMCwgOTE3OTQ0LCAwLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgCi0gICAgMCwgMCwgMCwgNjY0MCwgNzQ4MDYsIDI1OTgsIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMCwgNjUwMDgsIDAsIDE5NDc4NCwgCi0gICAgMCwgMTk0Nzk1LCAwLCAwLCAxOTQ5ODcsIDAsIDAsIDAsIDE5NDk4NiwgMTI2NDcsIDAsIDE5NDc5NiwgMCwgMTAzNiwgMCwgCi0gICAgMCwgMTcyMywgMCwgMCwgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgMCwgNzQ0ODYsIDAsIDc0MCwgMTk0OTg1LCAKLSAgICAwLCAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA5MTc5NDMsIDAsIDAsIDAsIDgxMjEsIDEwNDM4LCA3NDQ4NywgCi0gICAgNDI1NzQsIDEzMjg1LCAxOTUwMDEsIDExOTA3LCAwLCA1NjkwLCAxOTQ5OTksIDAsIDAsIDQzMTgxLCAxMzA5NSwgMCwgMCwgCi0gICAgNjQ0OTgsIDAsIDk1MDYsIDY5NzgsIDE5NDk5MywgMCwgMCwgMCwgMTk0OTkyLCAwLCAwLCAxMTIyLCAzMTcsIDAsIDAsIDAsIAotICAgIDAsIDE5MjAsIDAsIDEwMTczLCA4MjcsIDAsIDAsIDAsIDEyMDEyNiwgNTIyMywgMTMwNCwgMCwgMTE5NTY0LCA1MjI2LCAKLSAgICAxMjYwMiwgMCwgMCwgOTMyOSwgNzc1OCwgOTIzOSwgNDExNzMsIDUyMjQsIDU0ODcsIDEyMjIsIDU2OTIsIDQxNzI1LCAwLCAKLSAgICA5Njc0LCA1Njk1LCA0MTcxMSwgNjQ2MjcsIDE5OTA5LCAwLCA3NDYwNCwgNTY5MSwgMjg3LCA4NjYsIDIzMywgMCwgMCwgCi0gICAgNDI4MTYsIDAsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCA0MTE3NSwgMCwgMCwgMCwgCi0gICAgNTI5NiwgMCwgNDI0OTIsIDAsIDAsIDMzMDIsIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIAotICAgIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MjgsIDE5NDgxMywgMCwgMTc4NSwgMCwgMTIwNjM1LCA2NTE1MywgMTk0ODEwLCAKLSAgICA1MTM4LCAwLCAwLCAwLCAwLCA0NTQwLCA0MTE4MSwgMCwgNjIwMCwgMCwgNTEzNCwgMCwgMzIyLCA0NjQzLCA1MTMyLCAwLCAKLSAgICAwLCAwLCA1MTQzLCAwLCA4NzkwLCAwLCAwLCAxOTQ4MDIsIDAsIDg4NjksIDEyMDYwMSwgMCwgNDIwNjAsIDAsIDAsIDAsIDAsIAotICAgIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAwLCAwLCAKLSAgICA3NDM3NiwgNDMxMzksIDExODkyNCwgMTI3MDg0LCAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA0MTI4MSwgMTIwNzQ2LCAKLSAgICA1MjAxLCAwLCA2MjE1LCAxMjcxNCwgNjIxNCwgMTMxMDEsIDAsIDAsIDY1MjY4LCAwLCAwLCAwLCAxMTAyNywgMCwgMTAwNTksIAotICAgIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCAwLCAxMjcwNzEsIDAsIDMyMCwgMCwgODY0NywgMCwgMzA0OSwgMCwgCi0gICAgNjQ3MSwgNDIwNzEsIDQzMTU2LCAwLCAwLCAwLCAwLCA0OTYwLCA1NTQ5LCAwLCAwLCA4NDg1LCA0NjcxLCA1NDE4LCAwLCAKLSAgICAzMzUxLCAwLCAwLCAxMDYxMCwgNTQxNCwgMzA2NCwgNjIxMiwgNDI4NiwgNTQyMSwgMCwgOTU1NCwgMCwgMCwgMCwgNjY1MywgCi0gICAgMCwgMCwgNjQ1MTAsIDYyMTMsIDEyODg1LCAwLCAxMTkwNDUsIDY0NzIwLCAwLCAxMjA3NTksIDczNzQxLCAxMjYwMywgMCwgCi0gICAgMTE0MzAsIDQ1NjYsIDc4NDMsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCA0MjU3NiwgMCwgNTIwMCwgCi0gICAgMCwgMCwgMCwgOTE4MywgMCwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIDUxOTgsIDg3ODYsIDEwMzkwLCA3NDIwMiwgCi0gICAgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgCi0gICAgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAxMjg5MywgODA5MywgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgCi0gICAgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgMCwgNTczOCwgMCwgMzMzNiwgMCwgNTM2MSwgMzYyMywgNDExNTksIDAsIAotICAgIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAxMjYwLCAzMTQ5LCA1MzU5LCAwLCAwLCA3OTE0LCA1MzU3LCAwLCAwLCAyNjI0LCAKLSAgICA1MzY0LCAwLCAxMTQzMSwgMCwgOTEwMSwgMTEwNTgsIDAsIDAsIDAsIDQyMjcxLCAwLCA2NTczNywgMTIwNzkzLCAwLCAwLCAKLSAgICAwLCAxMDYxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTMxOSwgNzA5NywgMTE5MDU1LCAwLCAzMjMyLCA3MzgyNCwgCi0gICAgNzQ1ODEsIDAsIDAsIDAsIDQxODg5LCAwLCAwLCAxMTYxLCA0MTg5NSwgNzQxMDMsIDk3MDEsIDg2MjIsIDAsIDAsIDczODE5LCAKLSAgICAxMjA1ODgsIDUwMTIsIDExOTA0OSwgNDEzNjIsIDAsIDkxNzc2MiwgMTE5MjEsIDAsIDExNzY5LCAwLCAwLCA0MTM2NCwgMCwgCi0gICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDAsIDkxNywgMCwgMTE5OTE1LCAxMTk5MjMsIDgxOTksIAotICAgIDExOTkxMiwgMTE5OTE3LCA2NzcsIDExOTkxNiwgMCwgMTE5OTMyLCAwLCAwLCAwLCAwLCAzMzQ5LCA3NDEyNSwgNzAyMiwgCi0gICAgODkyNywgNDczOSwgMCwgNTgwMiwgMCwgODYxNSwgMCwgMCwgNDkxLCAwLCAwLCAwLCA2NTgzNywgMCwgODQyNiwgMTEwOTIsIAotICAgIDk4OTEsIDAsIDQyNDk3LCAwLCA3NTg2LCA0MjMwNSwgMTA4NTIsIDAsIDAsIDAsIDAsIDkwOTUsIDc3NDEsIDEyNjg0LCAKLSAgICA0MTg4NSwgMTA0NiwgMCwgMCwgMCwgNTgxNSwgNTE3MSwgNjU1MzksIDAsIDY5MzIsIDAsIDQyMzk0LCA0MTg3OCwgNzQ4NDksIAotICAgIDkxNzk1MSwgMCwgNTE2OSwgMTE5MzUsIDAsIDAsIDMxNzUsIDEyMDgyMiwgMTUzNywgMTIwODA0LCA1MTc2LCA4OTA1LCAKLSAgICA0MTM2LCA0ODcxLCAwLCAwLCA5ODMzLCAwLCAwLCAxMTI4LCA2NTkyMCwgMCwgOTcxMSwgNzA1NywgOTQwOCwgOTQwOSwgCi0gICAgOTQxMCwgOTQxMSwgMzY2MiwgOTQxMywgMzM3OCwgOTQxNSwgOTQxNiwgOTQxNywgOTQxOCwgODkwOSwgOTQyMCwgOTQyMSwgCi0gICAgNTg5NywgOTQyMywgNTE2NSwgNTEyNiwgNDEzODUsIDAsIDQxMzg5LCA5MTc5MzgsIDg5NTUsIDMzNzQsIDk0MDAsIDk0MDEsIAotICAgIDk0MDIsIDk0MDMsIDk0MDQsIDM1MDcsIDk0MDYsIDc2MjksIDAsIDE5OTI1LCAwLCA3MzgzMiwgMTgzLCAwLCAyNjMxLCAwLCAKLSAgICAxMDYyNywgNDExMzAsIDAsIDM5OTYsIDAsIDAsIDAsIDAsIDExOTMwNywgMCwgNjU4MCwgNDMzMiwgNjQ4MjUsIDY2MzI5LCAKLSAgICAxMDcyNiwgNjY2ODYsIDQxMTI1LCA1ODk5LCA0MTM2NSwgOTE3OTE4LCAxMjA4NSwgMCwgNTc0LCA5MTc5MjIsIDAsIAotICAgIDczODI4LCA1NDQ4LCA0MTA1OCwgNTQ0NiwgNzM5MDAsIDQxMzIyLCA3NDc2OCwgNTQ0MiwgNDE5MCwgMCwgMCwgNTQ1MSwgMCwgCi0gICAgMzYxNiwgMCwgMCwgMCwgNzcwOCwgMCwgMTA4NTksIDY1ODY3LCAxMDM0NSwgMTA0MDksIDQxOTEsIDAsIDEyMDcxOSwgCi0gICAgNzM4MDAsIDQyMTgxLCAwLCAwLCA0NDQ3LCAwLCAxMjA3MDgsIDExNzg4LCA2NTU4NywgMCwgMTA0MTUsIDc0MTAyLCAwLCAKLSAgICAyMDUsIDAsIDEwMzUxLCAxMTkwNzYsIDAsIDk4NjIsIDY1ODgsIDAsIDY0Njk3LCAwLCA0MTM1NSwgNTUwNSwgMTE5MTU0LCAKLSAgICA1NTAzLCA4MDIxLCAwLCAxMTkxNTAsIDk4MTksIDQxMzU3LCA4MDExLCA0Mjg4NSwgNTUwNywgMTIwNDQsIDAsIDAsIAotICAgIDEwMDI2LCA1NDcyLCA2NTEwOCwgMTE5MSwgMTMxMDYsIDU0NzAsIDEwMzI5LCA1NDc2LCA4OTkxLCA2NjMyMiwgMCwgMCwgCi0gICAgNDI4NzQsIDg1NTAsIDQyODc2LCA1NTkyLCAyOTE5LCAwLCAyNjc1LCA1NTk1LCAwLCAwLCA0MzY3LCAwLCAwLCA1NDc4LCAKLSAgICA1OTA0LCA1NTk0LCAwLCA3NDE1MCwgNzI5MSwgNTU5MCwgMCwgMTMwNjcsIDExODkwOSwgMCwgMCwgOTczMSwgMCwgNjQ2MzMsIAotICAgIDE5NDU2NSwgMCwgMCwgMCwgMCwgMCwgMTA3NTAsIDAsIDAsIDc0NTQ1LCAwLCAwLCAxMjg4NywgMTA1NTEsIDE5NDU2NCwgMCwgCi0gICAgMCwgMCwgMTIwNTcwLCAwLCA1MTk5LCAwLCAxMTIwLCA0MjM4NywgMCwgMTQ0NCwgOTQ4NiwgNzU1NCwgNjU4MzksIDAsIDAsIAotICAgIDE0NDIsIDAsIDU4OTQsIDAsIDAsIDAsIDAsIDc0MzEzLCAwLCAxMzE2MiwgMCwgMzMzNCwgMCwgMTE4ODAzLCAwLCA2NjAyMiwgCi0gICAgMCwgMCwgMTY1MSwgMCwgODg2MSwgMCwgMCwgMTE0MiwgMCwgODI3MSwgMCwgMCwgMCwgMTI5MDMsIDAsIDQwMDIsIDAsIAotICAgIDEwNDQyLCAxMDY3NiwgMzM0NCwgMCwgMCwgMTI5MjAsIDAsIDAsIDAsIDAsIDEyNzcsIDAsIDc4NzEsIDAsIDAsIDAsIDAsIAotICAgIDExOTAxNSwgMTIwMzYwLCAwLCAxMTc4NCwgMCwgMCwgNDcwMCwgNjYzNjYsIDAsIDEyMDM1OSwgMTEwMTIsIDAsIDAsIAotICAgIDEyMDM1OCwgMCwgNDk3MywgODc4NCwgMCwgNzQ4MDQsIDAsIDAsIDExODk4MSwgNDI0NDAsIDAsIDQzMTE4LCAwLCA0MjM2NCwgCi0gICAgMCwgMTE1NDMsIDAsIDAsIDEwMzQ2LCAxMDQxMCwgMCwgOTI0MywgMjQ2NCwgMCwgNjEwOCwgMzM3MiwgMCwgNjI0NywgCi0gICAgNDMxMTcsIDc0NTI2LCAwLCA3NDE2NiwgMCwgMTIwMzU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDIxNywgMzM1NCwgMCwgCi0gICAgNDE5MiwgOTI4OSwgMTE4OTk5LCA0MTE5MSwgMzg3NiwgMCwgMCwgMTIwNjYwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTYwMywgCi0gICAgMCwgMCwgNjU4OSwgMCwgMTk0Njc5LCAwLCAwLCAwLCAwLCAwLCA0MjU3MiwgMCwgMTA2MzAsIDc0ODI3LCAxOTYzLCAKLSAgICAxMTg4ODksIDAsIDExNjU0LCAwLCA3NTUwLCAxMDY4NiwgNTkwMywgMCwgMCwgNDEzMjksIDk2NjIsIDkxNzkzNywgNjQ2OTgsIAotICAgIDMzNjYsIDEwMzk5LCAwLCAwLCAxMTAxMywgMCwgOTE3OTMzLCAwLCAwLCAwLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIAotICAgIDExNTY4LCAwLCA5MTc5MzEsIDY0NTc5LCA5MTc5MzAsIDc4NTIsIDAsIDAsIDEyMjkyLCA2MzEyLCAwLCA2NDY3MiwgCi0gICAgNjUyOTYsIDAsIDExODk1NywgMCwgNDE2LCAxMjI5NiwgNzQ3NTMsIDczODM0LCAwLCAxMTA1MCwgMTA5ODQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDk1MzIsIDY2MzU1LCAwLCAwLCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDAsIDE5NTAzMSwgMCwgMCwgCi0gICAgMTk1MDU3LCAxMTQ0NSwgMCwgMTk1MDI4LCAwLCAxOTUwMjcsIDAsIDEwMjEsIDAsIDk1MDcsIDEwMjEwLCA3NDU0NCwgCi0gICAgODAyMywgMTIwMCwgMTIyNDMsIDE5NTA2MiwgNTI4MiwgMTk1MDYxLCAxMjU0MCwgMTE1NDUsIDAsIDEyMDQ5MywgMzM0MywgCi0gICAgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCAwLCA2NjQ5NywgMjk0NywgMzkyLCA3ODk0LCA0MzkxLCA2ODEzOSwgCi0gICAgMCwgMTMwNTksIDc0ODE2LCAwLCAzMzgxLCA3OTQyLCAwLCAwLCAwLCAwLCAwLCAzOTEzLCAwLCAwLCAwLCA3MDQ0LCAxMjY1LCAKLSAgICAwLCA2MzA5LCA3MDQ1LCA3MTc1LCA3MDQ3LCAwLCAxMTc5MSwgMCwgMCwgODIyMSwgMCwgNDE4NjQsIDAsIDAsIDAsIDAsIAotICAgIDE2NywgMCwgOTE3NTg0LCAwLCA3NDIxMSwgNDE4OTcsIDAsIDAsIDAsIDAsIDAsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCi0gICAgNjQzNTQsIDAsIDg3NzcsIDAsIDQwNiwgODg4NCwgMjM4NSwgMCwgMCwgMCwgMCwgNDMwMzAsIDQyMDI3LCAxMjExNCwgMCwgCi0gICAgMCwgNjQ5MzYsIDAsIDAsIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDAsIDAsIDY1ODQxLCAxMjA3ODcsIDExNjAxLCAwLCAwLCAKLSAgICAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAwLCAxMDI5OCwgNjYyNCwgNDkwOCwgOTE3NTk2LCAxNjM5LCAwLCAwLCAKLSAgICA3NDE1NywgMCwgMCwgMCwgMCwgMCwgMCwgNDgxNywgMCwgMTk0NzU5LCAwLCA3MDQzLCA5NjAwLCAxMTAyMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzU0OCwgNjQ3OTQsIDQyMDUwLCAxMjI5MSwgMCwgMTk0NzYxLCAxMjM0MywgNjU3LCAxOTUwNTQsIDY0NjgyLCAKLSAgICA0NDYxLCAxMTM0LCAxODM4LCAwLCAwLCAwLCA0NDY4LCAwLCAwLCAwLCA0NDU2LCA1MjA2LCAxMDcyMCwgMCwgNDI1MjMsIDAsIAotICAgIDAsIDAsIDAsIDY1NTUwLCAyNjAsIDQ4MTYsIDc0MTYzLCAxMDY4NywgMCwgNDgyMSwgNDQ2NiwgMCwgMTk1MDQzLCA0ODE4LCAKKyAgICA2NzYxLCAxMDA5MywgNDM2OSwgOTE3NzkxLCAwLCAwLCA4ODIwLCAzOTQ3LCAwLCAwLCAxMTUxNSwgNTI2LCAwLCA0MTI5NSwgCisgICAgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgMCwgCisgICAgMTU0MywgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgCisgICAgNDIwODIsIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAKKyAgICAwLCA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNjc4MCwgMCwgMCwgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIAorICAgIDQxMjE3LCAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAzMTM3LCAwLCA0MTQ3LCAwLCA0MTIxNiwgCisgICAgNzg0NCwgMjYxNiwgMTE5MTkwLCA2ODQ2MSwgNjUyMzQsIDAsIDEzMDc2LCAzMTM1LCAwLCA3ODE0MywgMTE5MTM5LCAzMTQyLCAKKyAgICAxOTQ5NDgsIDAsIDEwODE5LCAxMTk1ODAsIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCA3Mzk2NywgMCwgNjIyNywgMCwgMCwgCisgICAgNzQ3NzUsIDAsIDYxNjMsIDAsIDAsIDAsIDAsIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDQzMzkyLCAKKyAgICAxMTk1NzMsIDAsIDU3NTEsIDAsIDYyMjIsIDAsIDAsIDEyMDg2LCA3NDAzLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIAorICAgIDY0NzgzLCAwLCAxMTMxMCwgMCwgODg4MiwgMCwgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIAorICAgIDY5NzQsIDAsIDAsIDAsIDUwMDIsIDAsIDQxMjg2LCAwLCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCAwLCAwLCAwLCAKKyAgICA0MTI4OSwgMCwgMCwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDAsIDAsIDAsIDAsIDQxMjc5LCAwLCAwLCAwLCAxMTA4MSwgCisgICAgNDM2MTUsIDAsIDAsIDAsIDAsIDEyNzI3LCAwLCAwLCA3ODM5NywgOTQ3NSwgMCwgNjUxMDUsIDAsIDk2MzMsIDEwODg2LCAKKyAgICA0MzU5MiwgNzgzMSwgMCwgMCwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCA4MjkxLCA0MzA1MSwgMCwgMCwgMjU5NiwgCisgICAgNDM1ODQsIDAsIDEzMTEzLCAwLCAwLCAyMzkzLCA3MDU4LCA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgCisgICAgNzQwNTgsIDYzNzYsIDAsIDAsIDAsIDAsIDk4NTQsIDAsIDY0Njk2LCAwLCAwLCAwLCA2OTk0LCAwLCAxNzIwLCAwLCAwLCAwLCAKKyAgICA2NTI5LCA3MDYzLCAwLCAzNzUxLCA5MTIwLCAwLCAwLCAxNzk4LCA3MDksIDAsIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAKKyAgICAxMjQzMCwgODEzNywgMCwgMCwgMCwgMCwgMjQ1LCAwLCAxMTQ1NiwgNDEyMzMsIDcwNzAsIDAsIDAsIDYxMzYsIDAsIAorICAgIDY1Njc3LCA4NjgyLCA0MTIzNSwgMCwgNDIwNDUsIDk4MDQsIDAsIDQzMiwgMzU5NSwgMCwgNjU0MzcsIDAsIDc0NDU1LCAKKyAgICA0MjM5OSwgMCwgMCwgMCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDAsIDIzNTYsIAorICAgIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgMTE5MTA0LCAwLCAwLCAwLCAxMDA2MywgMTI2NTIsIAorICAgIDEyMTk5LCAxMjcwMzAsIDAsIDI1NjYsIDExOTcxLCAwLCAwLCAxMDY1LCAwLCAwLCA0MzQwMCwgMjU3NiwgMCwgMCwgMCwgCisgICAgNDM2MDQsIDAsIDAsIDc0MDgyLCA1MTQsIDc0NTAyLCAwLCAyOTIxLCA0MzIxNSwgNjQ0OTMsIDU3NzIsIDEyOTY4LCAwLCAKKyAgICAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgMCwgNDEzNDEsIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgNTI5MywgCisgICAgMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIAorICAgIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDAsIDExOTA0MiwgMCwgMCwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAxMTMyLCAKKyAgICA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgCisgICAgMCwgMCwgNjQ0OTYsIDc0MTA5LCAwLCA5OTE1LCAwLCAwLCA3MDYxLCA0MTMzNiwgMzg1NCwgMCwgMTMxNDEsIDY4NDEzLCAKKyAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgOTAyOSwgNDM1NDMsIDAsIAorICAgIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCAwLCA2NjYyNywgMCwgNDQ4NCwgCisgICAgODUwOSwgMTE4OTc2LCA3ODExNiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIAorICAgIDQxMjI2LCAwLCAxMjEwNywgNDQwMDIsIDEwOTA1LCA2NTAxMCwgMCwgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgMCwgCisgICAgMTMxMjEsIDEyMDAzNiwgMCwgMTIwMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1ODE2LCA2ODExMSwgMCwgMCwgNjU2NjgsIDAsIAorICAgIDY2MTgsIDExODc4NCwgNjYzNjUsIDAsIDQyMjM0LCAxMjY0OCwgMCwgMCwgMCwgNTc4NSwgNDEzMDksIDk3NjQsIDQxMzE2LCAKKyAgICA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMCwgMCwgMCwgMCwgMTMxMjIsIDAsIDE5MSwgNzQxMTksIAorICAgIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCA0MTU3NywgMCwgCisgICAgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgMTI5MDEsIDQzMDU4LCAKKyAgICAwLCAzNDMsIDAsIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIDQ3NDMsIDAsIDAsIDc0MDQwLCA3NDEwOCwgODc0MywgMTcyNCwgCisgICAgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCAwLCAwLCAzOTY0LCA2NTkyLCAwLCAwLCA2NjA0MCwgMCwgNDI1NjgsIDAsIAorICAgIDAsIDE3NzgsIDM5NTYsIDAsIDQyMDcwLCA2NTYzLCA0MzA3NSwgOTAxOCwgMCwgMCwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCAKKyAgICA3NDUzMSwgMCwgMCwgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MTc5MTcsIAorICAgIDExODgyMiwgMTc1MCwgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDAsIDAsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCisgICAgMCwgNDI0NzEsIDY5ODIsIDE3MjEsIDQ0MDIyLCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIDQ1MTIsIDExOTM2MCwgCisgICAgNjUyMzAsIDAsIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCAxMTkxNDAsIDM5NzUsIDAsIDc0MDg3LCAwLCAKKyAgICAxMjY3MiwgMzc5OCwgMjcwMywgMCwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgNDEwOTUsIDM5NjIsIDAsIDc4NzMsIAorICAgIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIDAsIDAsIDQxODUxLCAwLCA0MTg0NiwgCisgICAgMCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgMzIyNCwgMCwgMCwgMCwgNDI1MzEsIDAsIDE1MTAsIDAsIAorICAgIDgyNTYsIDAsIDExMzkzLCAwLCA4ODc5LCAwLCAwLCA4NzcwLCAwLCAwLCA3ODM3NywgMTkxMCwgODY3MSwgNzgzNzQsIAorICAgIDQyODMsIDAsIDEyNzExNywgNjgzNjEsIDc4MzE4LCAyNjU0LCA3ODkzLCAxOTUwMDcsIDAsIDAsIDAsIDY1MTA2LCA0Mjc2MSwgCisgICAgMTI4NTcsIDQ1ODEsIDg0MTEsIDc4MzcyLCA3ODM3MSwgNzgzNzAsIDc4MzY5LCA3ODM2OCwgMCwgMCwgMCwgMTczMywgCisgICAgNDM5MiwgMjU2OCwgMTA3ODYsIDAsIDAsIDgxODQsIDQxNDg2LCAwLCA3Mzk2LCAwLCAwLCA2OTc4OCwgMCwgNzE4NSwgCisgICAgNzk2NSwgMCwgMCwgMCwgMCwgNDEzNTAsIDkxMjksIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDgxLCAwLCAwLCA3MTcxLCAwLCAKKyAgICAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3NjQsIDAsIDAsIDAsIDAsIDAsIDY1MjAzLCAxMTM5MiwgMTE5MDk4LCAKKyAgICAxMTkzNTksIDAsIDMyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzYxOSwgMCwgMCwgMTAwNDMsIDAsIDExODYsIDQxNTcxLCAKKyAgICA2OTk5LCA2MTcsIDk0NjQsIDAsIDM2NzUsIDUyMDcsIDY1MDYyLCA1MjEzLCAxOTQ3NjksIDI2MTcsIDQxMzQ4LCA0MTU2OCwgCisgICAgMCwgMzI1MywgMTIwNTM1LCAwLCA4NjMwLCAwLCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAyNTg2LCA2NDg4NywgMCwgNTIxNywgCisgICAgMCwgMCwgMCwgMCwgNjQyOTMsIDY4MDk4LCAyNjM1LCAwLCAwLCAwLCAwLCAwLCA3ODM1LCAwLCAwLCAxOTQ5ODgsIDAsIAorICAgIDY0NTU4LCAxMjcxMjIsIDAsIDEyNzEyMSwgMCwgMCwgMCwgNTc4NCwgMCwgMCwgMCwgMCwgNDAxMSwgOTE3NjE2LCA2ODEwMSwgCisgICAgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDAsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIDU1OTgsIDEyMDcsIDEyMDUyMSwgCisgICAgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAwLCAwLCA5MzIxLCAwLCAwLCAwLCAwLCAKKyAgICAxNzE5LCA2ODM1NiwgNjgzNTQsIDk2NzEsIDExMjUsIDQzOTksIDAsIDkxNzYxMCwgMCwgNzYzMSwgNTQ4OCwgNjUyMjMsIAorICAgIDEyMDUzMiwgMCwgNTQ5MSwgMCwgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCA0MzA0NiwgNTQ4OSwgNzIxMiwgCisgICAgMTE3NjgsIDQzMDQzLCA2MzAwLCAwLCAxOTQ3ODksIDAsIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIDk4NzUsIDc1OTMsIAorICAgIDE5NDc5MiwgMCwgMTE4OTEzLCA3MjA3LCAwLCA2NTkwMSwgMjM5NCwgMjU3NSwgMCwgMzc0NiwgMTEwMTYsIDY1NzUyLCAKKyAgICAxMjAwMzcsIDAsIDQzNDIzLCAwLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgMCwgMCwgNzg1MzEsIDY2NDAsIAorICAgIDc0ODA2LCAyNTk4LCA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDEyNzAwMiwgNjUwMDgsIDAsIDE5NDc4NCwgMCwgMTk0Nzk1LCAKKyAgICAwLCAwLCA2ODQ3NSwgMCwgMCwgMCwgNzg2MzcsIDEyNjQ3LCAwLCAxOTQ3OTYsIDAsIDEwMzYsIDAsIDAsIDE3MjMsIDAsIDAsIAorICAgIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDAsIDc0NDg2LCAwLCA3NDAsIDE5NDk4NSwgMTk0OTc4LCAKKyAgICAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA2ODQzNywgNzgxNDAsIDc4MTM5LCAwLCA4MTIxLCAxMDQzOCwgNzQ0ODcsIAorICAgIDQyNTc0LCAxMzI4NSwgNTUyNjMsIDExOTA3LCAxOTUwMDAsIDU2OTAsIDE5NDk5OSwgMCwgMCwgNDMxODEsIDEzMDk1LCAwLCAKKyAgICAwLCA2NDQ5OCwgMCwgOTUwNiwgNjk3OCwgMTk0OTkzLCA3Nzk5MiwgMCwgMCwgMTk0OTkyLCAwLCAwLCAxMTIyLCAzMTcsIDAsIAorICAgIDAsIDAsIDAsIDE5MjAsIDAsIDEwMTczLCA4MjcsIDAsIDAsIDc4Mzc4LCAxMjAxMjYsIDUyMjMsIDEzMDQsIDAsIDExOTU2NCwgCisgICAgNTIyNiwgMTI2MDIsIDAsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCAKKyAgICA0MTcyNSwgNjkyMjksIDk2NzQsIDU2OTUsIDQxNzExLCA2NDYyNywgMTk5MDksIDAsIDc0NjA0LCA1NjkxLCAyODcsIDg2NiwgCisgICAgMjMzLCAwLCAwLCA0MjgxNiwgMCwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIDQxMTc1LCAwLCAKKyAgICAwLCAwLCA1Mjk2LCAwLCA0MjQ5MiwgNDM0MDIsIDAsIDMzMDIsIDAsIDAsIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIAorICAgIDAsIDc4NTYsIDg2OTAsIDAsIDAsIDEyMTIyLCAxMTk2MjgsIDQzOTc2LCAwLCAxNzg1LCAwLCA2ODYyMiwgNjUxNTMsIAorICAgIDE5NDgxMCwgNTEzOCwgMCwgMCwgMCwgMCwgNDU0MCwgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgCisgICAgNTEzMiwgMCwgNjM4OSwgMCwgNTE0MywgMCwgODc5MCwgMCwgMCwgMTk0ODAyLCAwLCA4ODY5LCAxMjA2MDEsIDAsIDQyMDYwLCAKKyAgICAwLCAwLCAwLCAwLCAxMDI3MCwgMTAyODYsIDEwMzE4LCAxMDM4MiwgNDM1MjksIDY2NDc3LCAwLCAwLCA3NDE3MCwgMCwgCisgICAgMzIzNCwgMCwgMCwgNzQzNzYsIDQzMTM5LCAxMTg4MTUsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCAwLCA3NDQ4OSwgOTY5NSwgCisgICAgMTIwNzQ2LCA1MjAxLCAwLCA2MjE1LCAxMjcxNCwgNjIxNCwgMTMxMDEsIDAsIDAsIDY1MjY4LCAwLCAwLCAwLCAxMTAyNywgCisgICAgMCwgMTAwNTksIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCA3ODg5MCwgMTI3MDcxLCAwLCAzMjAsIDAsIDg2NDcsIAorICAgIDAsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgMTI3MzU2LCAxMjczNTUsIDAsIDQ5NjAsIDU1NDksIAorICAgIDEyNzM1OSwgMCwgODQ4NSwgNDY3MSwgNTQxOCwgMCwgMzM1MSwgMTI3MDA2LCAwLCAxMDYxMCwgNTQxNCwgMzA2NCwgNjIxMiwgCisgICAgNDI4NiwgNTQyMSwgMCwgOTU1NCwgMCwgMCwgMCwgNjY1MywgMCwgMCwgNjQ1MTAsIDYyMTMsIDEyODg1LCAwLCAxMTkwNDUsIAorICAgIDY0NzIwLCAwLCAxMjA3NTksIDczNzQxLCAxMjYwMywgNzg2NTQsIDExNDMwLCA0NTY2LCA3ODQzLCA5MzE3LCAzODAxLCAKKyAgICAxMDM0MiwgMTA0MDYsIDAsIDExOTI1OSwgNDI1NzYsIDAsIDUyMDAsIDAsIDkxNzk0OCwgMCwgOTE4MywgMCwgNzQ0NTgsIAorICAgIDczODI1LCAzOTUsIDU0ODIsIDUxOTgsIDg3ODYsIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCAKKyAgICA1MjA1LCAwLCA0MzMwNywgMCwgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDAsIDEyMDE0LCAKKyAgICAxMjg5MywgODA5MywgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMCwgNjQ0MzAsIDUzODMsIDEwMjk0LCAxMDMyNiwgCisgICAgMCwgNTczOCwgMCwgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgCisgICAgMTI2MCwgMzE0OSwgNTM1OSwgMCwgMCwgNzkxNCwgNTM1NywgMCwgMCwgMjYyNCwgNTM2NCwgMCwgMTE0MzEsIDEyMDAzMCwgCisgICAgOTEwMSwgMTEwNTgsIDc4Mjg4LCAwLCA3ODI5MywgNDIyNzEsIDc4Mjg5LCA2NTczNywgMTIwNzkzLCAwLCA2NTU2NiwgCisgICAgNjcxNywgMTA2MTksIDQzMzYwLCA3ODM4NSwgNzgzODQsIDc4MzgzLCA3ODM4MiwgNzgzODEsIDc4MzgwLCA3ODM3OSwgCisgICAgOTMxOSwgNzA5NywgMTE5MDU1LCA3NzkwNiwgMzIzMiwgNzM4MjQsIDc0NTgxLCAxMjA2MzIsIDAsIDAsIDQxODg5LCAwLCAwLCAKKyAgICAxMTYxLCA0MTg5NSwgNzQxMDMsIDk3MDEsIDg2MjIsIDAsIDAsIDczODE5LCAxMjA1ODgsIDUwMTIsIDc3OTEyLCA0MTM2MiwgCisgICAgMCwgNzgyOTYsIDExOTIxLCAwLCAxMTc2OSwgMCwgNjg2MDksIDQxMzY0LCAwLCA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCAKKyAgICA0MTM2NiwgMCwgMzM1NiwgMCwgOTE3LCA2ODQyMiwgMTE5OTE1LCAxMTk5MjMsIDgxOTksIDc4Mzg5LCAxMTk5MTcsIDY3NywgCisgICAgMTE5OTE2LCAwLCAxMTk5MzIsIDAsIDAsIDAsIDAsIDMzNDksIDc0MTI1LCA3MDIyLCA4OTI3LCA0NzM5LCAwLCA1ODAyLCAwLCAKKyAgICA4NjE1LCAwLCAwLCA0OTEsIDAsIDAsIDAsIDY1ODM3LCAwLCA4NDI2LCAxMTA5MiwgOTg5MSwgMCwgNDI0OTcsIDAsIDc1ODYsIAorICAgIDQyMzA1LCAxMDg1MiwgMCwgMCwgNDYwNiwgNjg0NDgsIDkwOTUsIDc3NDEsIDEyNjg0LCA0MTg4NSwgMTA0NiwgMCwgMCwgMCwgCisgICAgNTgxNSwgNTE3MSwgNjU1MzksIDAsIDY5MzIsIDc4MzE1LCA0MjM5NCwgNDE4NzgsIDc0ODQ5LCAxMjA2MjEsIDAsIDUxNjksIAorICAgIDExOTM1LCAwLCAwLCAzMTc1LCAxMjA4MjIsIDE1MzcsIDEyMDgwNCwgNTE3NiwgODkwNSwgNDEzNiwgNDg3MSwgNzgyODcsIAorICAgIDAsIDk4MzMsIDAsIDAsIDExMjgsIDY1OTIwLCAwLCA5NzExLCA3MDU3LCA5NDA4LCA5NDA5LCA5NDEwLCA5NDExLCAzNjYyLCAKKyAgICA5NDEzLCAzMzc4LCA5NDE1LCA5NDE2LCA5NDE3LCA5NDE4LCA2MzIwLCA5NDIwLCA5NDIxLCA1ODk3LCA5NDIzLCA1MTY1LCAKKyAgICA1MTI2LCA0MTM4NSwgMCwgNDEzODksIDkxNzkzOCwgODk1NSwgMzM3NCwgOTQwMCwgOTQwMSwgOTQwMiwgOTQwMywgOTQwNCwgCisgICAgMzUwNywgOTQwNiwgNzYyOSwgMCwgMTk5MjUsIDQyNjY5LCA2ODQ2MywgMTgzLCA0Mzk4NSwgMjYzMSwgMCwgMTA2MjcsIAorICAgIDQxMTMwLCA3ODI2MCwgMzk5NiwgMCwgNzg3NzEsIDAsIDExOTMxMywgMTE5MzA3LCA3ODc2OCwgNjU4MCwgNDMzMiwgCisgICAgNjQ4MjUsIDY2MzI5LCAxMDcyNiwgNjY2ODYsIDQxMTI1LCA1ODk5LCA0MTM2NSwgOTE3OTE4LCAxMjA4NSwgMCwgNTc0LCAKKyAgICA5MTc5MjIsIDc3ODI1LCA3MzgyOCwgNTQ0OCwgNDEwNTgsIDU0NDYsIDczOTAwLCA0MTMyMiwgNDIyMTEsIDU0NDIsIDQxOTAsIAorICAgIDc3ODM0LCA3NzgzNSwgNTQ1MSwgNzc4MzMsIDM2MTYsIDc3ODI4LCA3NzgzNywgNzc4MzgsIDc3MDgsIDc3ODM2LCAxMDg1OSwgCisgICAgNjU4NjcsIDEwMzQ1LCAxMDQwOSwgNDE5MSwgMCwgNzc4NDQsIDczODAwLCA0MjE4MSwgNzc4NDMsIDc3ODM5LCAyMDYwLCAwLCAKKyAgICA3ODMxMSwgMTE3ODgsIDY1NTg3LCA2ODEyOSwgMTA0MTUsIDc0MTAyLCAwLCAyMDUsIDAsIDEwMzUxLCAxMTkwNzYsIDAsIAorICAgIDk4NjIsIDY1ODgsIDQzMjU3LCA2NDY5NywgNzM5OTgsIDQxMzU1LCA1NTA1LCAxMTkxNTQsIDU1MDMsIDgwMjEsIDAsIAorICAgIDExOTE1MCwgOTgxOSwgNDEzNTcsIDgwMTEsIDQyODg1LCA1NTA3LCAxMjA0NCwgMCwgMCwgMTAwMjYsIDU0NzIsIDY1MTA4LCAKKyAgICAxMTkxLCAxMzEwNiwgNTQ3MCwgMTAzMjksIDU0NzYsIDg5OTEsIDY2MzIyLCA2OTc3OCwgNzgyNjcsIDQyODc0LCA4NTUwLCAKKyAgICA0Mjg3NiwgNTU5MiwgMjkxOSwgMCwgMjY3NSwgNTU5NSwgNzg0MTEsIDAsIDQzNjcsIDAsIDAsIDU0NzgsIDU5MDQsIDU1OTQsIAorICAgIDAsIDc0MTUwLCA3MjkxLCA1NTkwLCA3Nzg0OSwgMTMwNjcsIDExODkwOSwgMTIwMzcyLCAwLCA5NzMxLCAwLCA2NDYzMywgCisgICAgNzc4NTcsIDc3ODU0LCA3Nzg1NSwgNzc4NTIsIDc3ODUzLCA3Nzg1MCwgMTA3NTAsIDQzNzE0LCA3Nzg1OCwgNzQ1NDUsIDAsIAorICAgIDAsIDEyODg3LCAxMDU1MSwgMTk0NTY0LCA3Nzg2NiwgNzc4NjcsIDc3ODY0LCA3Nzg2NSwgOTkyOSwgNTE5OSwgOTkzNiwgCisgICAgMTEyMCwgNDIzODcsIDAsIDE0NDQsIDk0ODYsIDc1NTQsIDY1ODM5LCA1NTI1MiwgMCwgMTQ0MiwgMCwgNTg5NCwgMCwgMCwgCisgICAgMCwgMCwgNzQzMTMsIDAsIDEzMTYyLCAwLCAzMzM0LCAwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgMCwgMTY1MSwgMCwgCisgICAgODg2MSwgMCwgMCwgMTE0MiwgMCwgODI3MSwgMCwgMCwgMCwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAxMDQ0MiwgMTA2NzYsIAorICAgIDMzNDQsIDAsIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCA3ODg1MywgMCwgCisgICAgNzg4NTQsIDEyMDM2MCwgMCwgMTE3ODQsIDAsIDc4MDEyLCA0NzAwLCA2NjM2NiwgNzg4NTgsIDEyMDM1OSwgMTEwMTIsIDAsIAorICAgIDc4ODU2LCAxMjAzNTgsIDc3ODc5LCA0OTczLCA4Nzg0LCA3Nzg3NywgNzQ4MDQsIDc3ODc0LCA3Nzg2OSwgNzc4NzEsIAorICAgIDQyNDQwLCAwLCA0MzExOCwgMCwgNDIzNjQsIDY3NzQsIDY3NzMsIDAsIDEyMDM2OSwgMTAzNDYsIDEwNDEwLCA3ODg1OSwgCisgICAgOTI0MywgMjQ2NCwgMCwgNjEwOCwgMzM3MiwgMCwgNjI0NywgNDMxMTcsIDc0NTI2LCAwLCA3NDE2NiwgMCwgMTIwMzU1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3NDIxNywgMzM1NCwgMCwgNDE5MiwgOTI4OSwgMTE4OTk5LCA0MTE5MSwgMzg3NiwgMCwgMCwgCisgICAgMTIwNjYwLCA0MzY5NiwgNDMzODAsIDAsIDAsIDAsIDAsIDExNjAzLCAwLCAwLCA2NTg5LCAwLCAxOTQ2NzksIDAsIDAsIDAsIAorICAgIDAsIDAsIDQyNTcyLCAwLCAxMDYzMCwgNzQ4MjcsIDE5NjMsIDExODg4OSwgMCwgMTE2NTQsIDAsIDc1NTAsIDEwNjg2LCAKKyAgICA1OTAzLCAwLCA3ODAwOSwgNDEzMjksIDk2NjIsIDkxNzkzNywgNjQ2OTgsIDMzNjYsIDEwMzk5LCAwLCAwLCAxMTAxMywgMCwgCisgICAgOTE3OTMzLCAwLCA3ODYyMSwgMTk0NjcyLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIDExNTY4LCAwLCA5MTc5MzEsIDY0NTc5LCAKKyAgICA5MTc5MzAsIDc4NTIsIDAsIDAsIDY3NTQsIDYzMTIsIDAsIDY0NjcyLCA2NTI5NiwgMCwgMTE4OTU3LCAwLCA0MTYsIAorICAgIDEyMjk2LCA2ODQ1NywgNzM4MzQsIDY4MTc3LCAxMTA1MCwgMTA5ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDk1MzIsIDY2MzU1LCAKKyAgICAwLCAwLCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDAsIDE5NTAzMSwgMCwgMCwgMTk1MDU3LCAxMTQ0NSwgMCwgMTk1MDI4LCAKKyAgICAxOTUwNTYsIDE5NTAyNywgMTAxODUsIDEwMjEsIDAsIDk1MDcsIDEwMjEwLCA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIAorICAgIDc4MDAxLCA1MjgyLCA3ODAwMywgMTI1NDAsIDExNTQ1LCAwLCAxMjA0OTMsIDMzNDMsIDQ0MjQsIDExMDQ3LCAxODg1LCAKKyAgICA0MzI2OCwgMzg5NiwgNzg2MjYsIDY2NDk3LCAyOTQ3LCAzOTIsIDc4OTQsIDQzOTEsIDY4MTM5LCAwLCAxMzA1OSwgNzQ4MTYsIAorICAgIDc3OTk4LCAzMzgxLCA3OTQyLCAwLCA2OTIxOSwgMCwgNjQ3NTcsIDAsIDM5MTMsIDAsIDAsIDc4MjM1LCA3MDQ0LCAxMjY1LCAKKyAgICAwLCA2MzA5LCA3MDQ1LCA3MTc1LCA3MDQ3LCA3ODIzOSwgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgCisgICAgMCwgMCwgMTY3LCAwLCA3ODMwMSwgMCwgNzQyMTEsIDQxODk3LCA2ODQ3NywgMCwgOTE3NTgzLCAwLCAwLCAyNDkzLCAwLCAKKyAgICAxMTg4MTEsIDAsIDAsIDY0MzU0LCAwLCA4Nzc3LCAwLCA0MDYsIDg4ODQsIDIzODUsIDAsIDAsIDAsIDkxNzU3MywgNDMwMzAsIAorICAgIDQyMDI3LCAxMjExNCwgMCwgOTE3NTc5LCA2NDkzNiwgMCwgMCwgMTIwNjI5LCAxMDU2MSwgMCwgODM2NSwgMCwgMCwgCisgICAgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAwLCAxMDI5OCwgCisgICAgNjYyNCwgNDkwOCwgOTE3NTk2LCAxNjM5LCAwLCAwLCA3NDE1NywgNjMyNywgNjcyNCwgMCwgMCwgMCwgMCwgNDgxNywgCisgICAgNzg0NDYsIDE5NDc1OSwgMCwgNzA0MywgOTYwMCwgMTEwMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NDgsIDY0Nzk0LCAKKyAgICA0MjA1MCwgMTIyOTEsIDU1Mjg5LCAxOTQ3NjEsIDEyMzQzLCA2NTcsIDE5NTA1NCwgNDI3MDUsIDQ0NjEsIDExMzQsIDE4MzgsIAorICAgIDc4NDM4LCAyMDU3LCAwLCA0NDY4LCAwLCAwLCAwLCA0NDU2LCA1MjA2LCAxMDcyMCwgMCwgNDI1MjMsIDEyNzUyMCwgMCwgMCwgCisgICAgOTE3NTk1LCA2NTU1MCwgMjYwLCA0ODE2LCA2NzY1OCwgMTA2ODcsIDAsIDQ4MjEsIDQ0NjYsIDAsIDE5NTA0MywgNDgxOCwgCiAgICAgMCwgNDE0MDMsIDExOTk3NywgMCwgMCwgNDE0MDYsIDQzMjczLCA3NDE2MCwgMTE5OTgzLCA3MzkzOSwgMTE5OTg1LCAKICAgICAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIAotICAgIDczODU1LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIDAsIDMzNzUsIDAsIDU5MDAsIDAsIDc4ODksIDI3MjIsIDQyMjYyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIDAsIDAsIDAsIAotICAgIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAwLCAwLCAwLCA0MzE2MSwgMCwgMTE5OTY0LCAwLCA1MTgyLCAwLCAxMjA1NDIsIDAsIAotICAgIDAsIDQyMjYsIDEyMDc5OCwgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDAsIDk3NywgNDQ1OCwgMCwgMCwgNjQ3NzAsIDAsIDAsIAotICAgIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgMCwgMCwgNzg2LCAwLCA0MzE3NCwgNjQzNDAsIDAsIDAsIDAsIAotICAgIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ5OCwgMCwgMTIwNzM0LCAwLCAKLSAgICAxMTkxNjAsIDEwMjA0LCAwLCAwLCAwLCAwLCAxMzk5LCAwLCAwLCAwLCA4ODUyLCAwLCAyNDEsIDAsIDQ5MDcsIDAsIDAsIAotICAgIDc5MzIsIDk3MjcsIDAsIDc0MjU1LCA4NzQ4LCAwLCAwLCAwLCAwLCA0Mjc4MCwgMCwgMCwgMCwgNDIxNywgMCwgODY1MCwgMCwgCi0gICAgMCwgMCwgMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMCwgMCwgMCwgMTMzMDAsIDAsIDAsIDAsIDY2NTg4LCAxMTg5OTEsIDAsIAotICAgIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAKLSAgICAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIDAsIDAsIDAsIDQyODI1LCA0MTg1NCwgNTMwNCwgMCwgMCwgNjkxOSwgCi0gICAgODYxOSwgMTE5NjU1LCAxMDAzOCwgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc0MzExLCAwLCAwLCAxMDE4MSwgMCwgMCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDAsIDk2ODksIDAsIAotICAgIDAsIDg5OTMsIDY2MzU4LCAwLCA0MjM3OCwgMzM2OCwgNjA2LCAwLCA3Njk3LCAwLCAwLCAyMDMwLCAwLCA2MDI3LCA4MzcwLCAKLSAgICA0MzIyLCAwLCA2NTIwNywgMCwgMCwgMCwgMCwgMCwgMjczNSwgNDI4MzEsIDAsIDAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIAotICAgIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgMCwgOTU3NiwgMCwgMzM0NywgNDE2MCwgNTE1NCwgMCwgMzc5NCwgNjY1NjQsIAotICAgIDY2NTE0LCAwLCA3NzA5LCA0MTExMiwgMCwgNjY1NjAsIDQyMDQxLCA0NTcyLCAwLCA2NjU2MSwgMCwgNDExMTMsIDAsIAotICAgIDE2MTUsIDU4NTUsIDgwOSwgMCwgMCwgMCwgMCwgNTc5OSwgMCwgMCwgMCwgNzI2MCwgMCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgCi0gICAgMTI3MDYxLCA2NDM4NiwgNjUyNTcsIDAsIDAsIDEyMDYwNywgOTM0NywgMCwgNjUzMiwgMCwgMCwgMCwgMCwgNjU4MjgsIDAsIAotICAgIDI4MywgOTE3OTE3LCAwLCA1MzIsIDAsIDAsIDAsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDAsIDgxNTMsIAotICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMCwgMCwgMCwgNjU0OTUsIDY0NzA2LCAwLCAwLCAwLCAwLCA5NDY2LCAxMTk2MDAsIAotICAgIDk4MjQsIDAsIDAsIDAsIDAsIDkxNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDMyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY4MTYxLCA2NDU1MCwgNTE4NiwgMTI4OTAsIDAsIDAsIDEyMTA4LCAwLCA2NTEyNCwgMCwgNjYwNDMsIDAsIDAsIDQzMTA3LCAKLSAgICAwLCAwLCA0MjU2MiwgMCwgMCwgMCwgMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgMCwgMTE3MTgsIDAsIDEyODg5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNjMwLCAwLCA2NTQ4MywgMCwgMTI1NjUsIDAsIDY1NDc2LCAwLCAwLCAxMTk1NTQsIDkyODMsIAotICAgIDc3MDAsIDkxNzUzNywgOTY5MCwgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDExODg2MiwgMCwgMCwgMCwgNjMyLCAKLSAgICAxMjk0MCwgMCwgNDI1MjksIDAsIDAsIDU5NTcsIDAsIDg5MjYsIDAsIDAsIDAsIDEwNzQ1LCAxMDE3NCwgMCwgNjQ1ODEsIAotICAgIDUzODYsIDEyMDY4NiwgMTE3MTMsIDEwNjMzLCAxMjA1MzEsIDUwNTYsIDAsIDAsIDAsIDEyMDc3MywgMCwgOTgxMiwgMCwgCi0gICAgNDQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQyNzgsIDAsIDAsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgCi0gICAgMTI4MzUsIDkxNzYyNywgMCwgNzM4MjMsIDAsIDY2Mzc1LCAwLCA3MDIsIDQyNTc5LCAwLCAwLCAxMzA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMTIxMDYsIDAsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDAsIDExNjMsIDI5NTEsIDk1MjIsIDc0MDc5LCAKLSAgICAxOTUwNzYsIDEyMDY3NCwgMCwgMzM4NCwgMTIwNzI4LCAxMDcwMiwgODMwLCAwLCAwLCAwLCA4NDUxLCAwLCAwLCAwLCAKLSAgICAxMjA3NjIsIDAsIDAsIDAsIDAsIDI5MDgsIDAsIDAsIDY0OTAyLCA0MjQzLCAwLCAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgMCwgCi0gICAgNzM5NDAsIDY0MzUyLCAwLCAwLCA0MTEsIDAsIDAsIDAsIDAsIDAsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgMCwgNTQyOCwgCi0gICAgMTk0NzQzLCAzMzY0LCA0MjI2NSwgMCwgMCwgMTE4ODE2LCAwLCA5Njg0LCAyMTYsIDAsIDE0MDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDkxNTgsIDAsIDEyMDY2NCwgNTc2OCwgMCwgMCwgMCwgNDg0LCAwLCAwLCAwLCA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIAotICAgIDU3MiwgNzA0MSwgMjczNiwgMCwgMCwgMCwgMjc5NCwgODgwNywgNjQ0OTEsIDAsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAKLSAgICAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAwLCAxOTQ3NDcsIDk1MzQsIDAsIDAsIDAsIDM0MzAsIDAsIDAsIDAsIDAsIAotICAgIDk4MSwgMCwgNDMzMCwgMTIwNjczLCAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIAotICAgIDczNzU0LCAzOTU3LCAwLCA2NDU0NywgMCwgNjc0LCA2Mzk5MSwgMCwgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgCi0gICAgMzc1OSwgMTE0MTEsIDgzNjQsIDUxMjMsIDAsIDUyODEsIDU0NjksIDUxMjEsIDAsIDAsIDAsIDUxMzAsIDAsIDAsIDAsIDAsIAotICAgIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDAsIDUyMTYsIDAsIDAsIDAsIDAsIDM0NjgsIDAsIDkyMzAsIDU5MzksIDAsIAotICAgIDAsIDAsIDEyMDY3NywgMTIwNzI5LCA3Mjc4LCAxMDMyMSwgMTAyODksIDY0NjEzLCAxMDM4NSwgNDE3MDYsIDAsIDAsIDAsIAotICAgIDAsIDExNzM5LCAwLCA0MTk4MSwgMCwgNTkzOCwgMCwgMCwgMTI0NDgsIDc1NzYsIDEwNDAxLCAxMDMzNywgNzM4NTIsIDAsIAorICAgIDczODU1LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIDEyNzU1OCwgMzM3NSwgMCwgNTkwMCwgMCwgNzg4OSwgMjcyMiwgCisgICAgNDIyNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDAxLCAwLCAwLCA2ODQ1OSwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIAorICAgIDcyODAsIDAsIDAsIDAsIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAwLCAwLCAwLCA0MzE2MSwgMCwgMTE5OTY0LCAwLCA1MTgyLCAKKyAgICAwLCAxMjA1NDIsIDAsIDAsIDQyMjYsIDEyMDc5OCwgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDAsIDk3NywgNDQ1OCwgMCwgMCwgCisgICAgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDAsIDAsIDc4NiwgMCwgNDMxNzQsIAorICAgIDY0MzQwLCAwLCAwLCAwLCA0MzAyNiwgNzYxMiwgMTAxMzIsIDY0NDEzLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODQ0NCwgMCwgCisgICAgMTIwNzM0LCAwLCAxMTkxNjAsIDEwMjA0LCAwLCAwLCAwLCAwLCAxMzk5LCAwLCA2NTIxNywgMCwgODg1MiwgMCwgMjQxLCAwLCAKKyAgICA0OTA3LCAwLCAwLCA3OTMyLCA5NzI3LCAwLCA3NDI1NSwgODc0OCwgMCwgMCwgMCwgMCwgNDI3ODAsIDAsIDAsIDAsIDQyMTcsIAorICAgIDAsIDg2NTAsIDAsIDAsIDAsIDAsIDExODg3MiwgNDMwOTksIDM5NjUsIDExOTExOSwgNjcxOSwgMCwgMTMzMDAsIDc4NDM5LCAKKyAgICAwLCA0MzA1NywgNjY1ODgsIDExODk5MSwgMCwgMCwgNzM4MTUsIDQ0MjAsIDAsIDY0MTAsIDc3NjAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIDExOTkzLCA0MzE4OCwgMjYyNiwgNzc2MiwgMCwgMCwgMCwgMCwgNDI4MjUsIAorICAgIDQxODU0LCA1MzA0LCAwLCA3ODUxNiwgNjkxOSwgODYxOSwgMTE5NjU1LCAxMDAzOCwgNjY0NTQsIDk1OTIsIDQyODUxLCAKKyAgICAxMjY5OTMsIDE1NDIsIDAsIDAsIDAsIDAsIDAsIDc0MzExLCA3ODQ5NywgMCwgMTAxODEsIDAsIDQzNjI0LCAwLCA3Nzc5LCAKKyAgICAwLCAxMDE5NSwgOTQ3OSwgNjAyOSwgMCwgMCwgOTY4OSwgMCwgMCwgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIAorICAgIDAsIDc2OTcsIDY5MjM3LCA2OTc4NywgMjAzMCwgMCwgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI3MzUsIDQyODMxLCA3NzkzNSwgMTI3MTIwLCA3NDg2NiwgODg4MSwgMTE5MDQ3LCAwLCAwLCA3Mzk0NiwgMCwgMCwgMCwgCisgICAgNjgxNDAsIDAsIDk1NzYsIDAsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKKyAgICA3NzA5LCA0MTExMiwgMCwgNjY1NjAsIDQyMDQxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDAsIDY3NTgsIDAsIDE2MTUsIDU4NTUsIAorICAgIDgwOSwgMCwgMCwgMCwgMCwgNTc5OSwgMCwgMCwgMCwgNzI2MCwgMCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgMTI3MDYxLCAKKyAgICA2NDM4NiwgNjUyNTcsIDAsIDY4NjE2LCAxMjA2MDcsIDkzNDcsIDAsIDY1MzIsIDAsIDAsIDAsIDAsIDY1ODI4LCAwLCAyODMsIAorICAgIDY4NjY1LCA3ODgxMywgNTMyLCA3ODY2MywgMCwgMCwgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIAorICAgIDgxNTMsIDczNzY3LCAwLCAxMDc0MSwgMCwgMCwgMCwgMCwgNjU0OTUsIDY0NzA2LCAwLCA0MzM0NCwgMCwgNzg4NzAsIAorICAgIDk0NjYsIDc4ODY2LCA5ODI0LCAwLCAwLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAwLCA0MzI2NCwgMCwgMCwgMCwgCisgICAgMCwgNzg4NjQsIDY3MzAsIDc4ODYyLCA2ODE2MSwgNjQ1NTAsIDUxODYsIDEyODkwLCAwLCAwLCAxMjEwOCwgMCwgNjUxMjQsIAorICAgIDQzMTI3LCA2NjA0MywgMCwgNjMyNiwgNDMxMDcsIDc3ODI2LCAwLCA0MjU2MiwgMCwgMCwgMCwgMCwgMTE0ODUsIDYxMDMsIAorICAgIDEyNzEyMywgMCwgMTE3MTgsIDAsIDEyODg5LCAwLCAwLCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMCwgNjU0ODMsIDAsIAorICAgIDEyNTY1LCAwLCA2NTQ3NiwgMTIwMDEzLCAwLCAxMTk1NTQsIDkyODMsIDc3MDAsIDkxNzUzNywgOTY5MCwgNjU0OTksIDAsIAorICAgIDY0NTkzLCA1MTIsIDMzNzYsIDY4MjEwLCAwLCAwLCA3Nzg5MiwgNjMyLCAxMjk0MCwgNzc4OTEsIDQyNTI5LCA3ODU4NywgMCwgCisgICAgNTk1NywgMCwgODkyNiwgMCwgMCwgMCwgMTA3NDUsIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgCisgICAgMTA2MzMsIDEyMDUzMSwgNTA1NiwgMCwgMCwgMCwgMTIwNzczLCAwLCA5ODEyLCAwLCA0NDYwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA2NDI3OCwgMCwgNDM0NjYsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgMTI4MzUsIDExOTAyOSwgMCwgCisgICAgNzM4MjMsIDAsIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgMCwgMCwgMCwgCisgICAgMTIxMDYsIDAsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAyOTUxLCA5NTIyLCA3NDA3OSwgCisgICAgNzgyNjYsIDEyMDY3NCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgNzc5MDAsIDg0NTEsIDAsIAorICAgIDAsIDAsIDEyMDc2MiwgMCwgMCwgMCwgMCwgMjkwOCwgMCwgNDMzODYsIDY0OTAyLCA0MjQzLCAwLCAxMjIzOSwgMCwgMCwgCisgICAgNDQ0MSwgMCwgMCwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDAsIDQxMSwgMCwgMCwgMCwgNDA1NiwgMTE4OTkyLCA0MTg5MCwgCisgICAgMCwgMjczMCwgNDE2MDQsIDAsIDU0MjgsIDE5NDc0MywgMzM2NCwgNDIyNjUsIDAsIDAsIDExODgxNiwgMTk0NzQyLCA5Njg0LCAKKyAgICAyMTYsIDAsIDE0MDEsIDAsIDQ0MDEyLCAwLCAwLCAwLCA5MTU4LCA3Nzg0MiwgMTIwNjY0LCA1NzY4LCAwLCAwLCAwLCA0ODQsIAorICAgIDAsIDAsIDAsIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgMCwgMCwgMjc5NCwgCisgICAgODgwNywgNjQ0OTEsIDc3ODQ3LCA1NDM4LCA1MjIyLCA1MzgxLCA0MzExNCwgMCwgNTE5MywgNTEyNSwgNTQ1NiwgNTUwOSwgCisgICAgNzc4NDYsIDE5NDc0NywgOTUzNCwgMCwgMCwgMCwgMzQzMCwgMCwgMCwgMCwgMCwgOTgxLCAwLCA0MzMwLCA3MzkyOSwgCisgICAgMTIwNTM2LCAxODI0LCAxMDkwOCwgMCwgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAKKyAgICAwLCA2NzQsIDYzOTkxLCAwLCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgODM2NCwgNTEyMywgCisgICAgMCwgNTI4MSwgNTQ2OSwgNTEyMSwgMTE5MjQ1LCAwLCAwLCA1MTMwLCAwLCAwLCA3Nzk5MCwgMCwgMTIwNzI2LCAxMjIxLCAKKyAgICAyNzMzLCAxMTc0NiwgNzc5OTEsIDUyMTYsIDAsIDAsIDAsIDAsIDM0NjgsIDcwMzMsIDkyMzAsIDU5MzksIDAsIDAsIDAsIAorICAgIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIDEwMzg1LCA0MTcwNiwgMCwgMCwgMCwgMCwgCisgICAgMTE3MzksIDAsIDQxOTgxLCAwLCA1OTM4LCAwLCAwLCAxMjQ0OCwgNzU3NiwgMTA0MDEsIDEwMzM3LCA3Mzg1MiwgMCwgCiAgICAgMTMwNTcsIDAsIDEyNjk3NiwgMCwgMTAwMDksIDAsIDY0MzA0LCAwLCAxMjE2NSwgMCwgMCwgOTg4NSwgMCwgODA3NywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDIyMCwgMTA3MjUsIDEwNDMzLCAwLCAwLCA0OTg3LCA2NDUxOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTA5NzAsIDExNzMzLCAwLCAxMjA3OTIsIDAsIDE5OTQ0LCAwLCA5MDA5LCA4NTUxLCAwLCAxMTQ2OCwgNzQwMDMsIDc1NzUsIAotICAgIDAsIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTk5NDksIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDExOTk0MiwgMTE5OTQzLCAKLSAgICAxMTk5NDAsIDExOTk0MSwgMTE5OTM4LCA5Nzc1LCA0MDQ2LCA0NTg5LCA0NTIxLCAwLCA5MTQxLCAwLCAwLCAyNzQxLCAKLSAgICA2NDM5OSwgNjE5NywgMTM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4NCwgODYwNiwgMzMwMywgNDEzNzIsIDExNzg2LCAKLSAgICA5NDczLCA2NjIwMywgNjYxNzcsIDAsIDExNTkzLCA0MzAwNywgNDQ3OCwgNjYxNzgsIDAsIDAsIDI3NDQsIDAsIDQ0NzcsIDAsIAotICAgIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNjYxOTQsIDExOTk2MSwgNjYxOTgsIDQxODgwLCA2NjE4OCwgNjYxOTcsIAotICAgIDExOTk1NCwgMTE5NTUsIDY2MTkwLCA2NjE5MSwgNDExMTEsIDY2MTg5LCA3Mzc4OCwgNzc4OCwgNDg0NywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU4MSwgNjUzNSwgMCwgMTI5NTQsIDQzMCwgMTk0OTM0LCAxOTQ5MzksIDAsIDE5NDkzOCwgNTI3OCwgNDk0NSwgCi0gICAgNDI4ODMsIDQ5NTAsIDAsIDEyMDU0NywgMCwgNzI2OSwgMCwgNTk2NCwgMTI5MDgsIDAsIDAsIDc0NzY0LCA3NDQ3NywgCi0gICAgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDAsIDQ0MywgMCwgNDk0NCwgNTQ2NywgMTE5NjAzLCAwLCA2NTEzNywgNjA0NCwgCi0gICAgNjUzOTIsIDAsIDQyMTMsIDAsIDQxMzAzLCAwLCAxOTQ5MzEsIDAsIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMCwgMCwgMTIwNzIsIAotICAgIDMxOTMsIDAsIDQxMzA0LCA4MjQsIDAsIDEyMDkxLCAxMTk4MTQsIDExOTgxMywgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgCi0gICAgMTE5ODIwLCAxMTk4MTksIDY1MDU5LCAwLCAxMTk4MDgsIDAsIDU0ODEsIDM0OTAsIDExOTksIDExOTgxMSwgODM1NiwgCi0gICAgMTE5ODI5LCAxMTk4MzIsIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCAxMTk4MjIsIDExOTgyMSwgNTUzMSwgMTE5ODIzLCAKLSAgICA0MjU3NSwgMTE5ODI1LCAxMTk4MjgsIDQ2NzQsIDQ1NDgsIDAsIDAsIDAsIDExOTk0NiwgODAyNSwgMCwgMTI3MDI0LCAKLSAgICAxODU1LCAwLCAxMTk5NDUsIDAsIDEyMDU1NCwgMCwgMCwgMCwgMCwgMjc0NSwgMTE3OTcsIDAsIDAsIDExOTkzOSwgNDY1NCwgCi0gICAgMCwgMCwgMTk0OTU5LCA3Mzk5MywgMTA1MjUsIDQ2NDksIDY1MjA5LCAwLCAwLCA0NjQ4LCA0MzA4MCwgMCwgMCwgMCwgCi0gICAgNjI0NiwgNjQ5NTAsIDc4MjgsIDQ2NTAsIDAsIDAsIDExOTA4NiwgNDY1MywgNzgyMiwgMCwgMCwgNDMxODcsIDg2NjksIDAsIAotICAgIDAsIDY1MDkzLCAwLCAwLCAyNzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDAsIAotICAgIDExOTIyOCwgNzk5MiwgMCwgMCwgNDY2MiwgMCwgMCwgOTE0OSwgOTE0NiwgNTk5LCA0NjU3LCAxOTQ5NjMsIDEyMDc1NCwgCi0gICAgMTk0OTYyLCA0NjU2LCAxMDEzMCwgMCwgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgCi0gICAgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIDAsIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgMCwgNzU0NywgNDg2NywgMCwgCi0gICAgMTAwMDgsIDEwMjIyLCAzMDU0LCAxOTQ5NTYsIDk3NDQsIDAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTA0NSwgMCwgNDIyNSwgMTk5MjYsIDAsIDEyODgwLCA2NTMwNywgNDYxNywgMCwgMCwgMCwgNDYxNiwgMTA1MTgsIDEwNDIzLCAKLSAgICAxMDM1OSwgMCwgNTk1OCwgMCwgMCwgNDIxNSwgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCAwLCA0MTMxMywgNTIyLCAKLSAgICA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgMTIyMDEsIDUzNzIsIDAsIDAsIDAsIDc3MjAsIDAsIDI2OTYsIDAsIDAsIDQ2MzgsIAotICAgIDAsIDE3OTAsIDAsIDU5NjUsIDY0MzYzLCA2NjU2OSwgMCwgMTk0OTY4LCA1Mzc2LCAxODM1LCA1MzM1LCAxOTQ5NjYsIDAsIAotICAgIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAwLCA1Mzg3LCA1MzMzLCAwLCAwLCA0MjA5NCwgNTMzMSwgNDYzNCwgCi0gICAgMTE5MjgsIDAsIDUzMzgsIDQ2MzcsIDAsIDU5NzEsIDQyNDE0LCAwLCAxMjY4LCA2NTA5NywgNDIzNjEsIDAsIDAsIDczODUzLCAKLSAgICAxNDI3LCAwLCAwLCA1OTcwLCAzNDMxLCAwLCAxMDM1OCwgMTA0MjIsIDQ3NTgsIDAsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCAKLSAgICA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIDc0Mzg0LCAwLCAwLCA2MjQ4LCAwLCAwLCAwLCA0MjMxOCwgCi0gICAgMCwgNTIyOSwgNDc1NywgMCwgMCwgMjcyOCwgNDc1MiwgNjQ1NjMsIDY1MjM1LCA1MjM0LCAwLCAwLCAwLCAxMDcxMywgMCwgCi0gICAgMCwgMjYyMiwgNzQ2MCwgMCwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCAwLCAxMDEwOCwgMTAxMSwgNTU3NCwgCi0gICAgMTg1MywgMjcwOSwgNjUxMzksIDU1NzcsIDAsIDAsIDExODg3MSwgMCwgODk2NSwgNzYzNSwgNDIxNzcsIDUzMTYsIDAsIAotICAgIDUzMTQsIDY0NTEsIDU1NzIsIDAsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDAsIDAsIDE5NDkwNywgMTE5MDE2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxOTUwMDksIDAsIDc0MDIyLCAwLCA2NDYwOSwgMCwgMCwgMCwgNTcyMSwgMCwgMTAzOTgsIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDAsIDU3MjAsIDAsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIDAsIDQ2MDksIAotICAgIDAsIDQ2MTQsIDU0MSwgMCwgNTI4NywgNTMwOSwgNTI4NSwgMCwgNTk2MSwgNDY0NywgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgCi0gICAgNjAxLCA0NjEzLCAwLCAwLCAwLCA0NjA4LCA2NDI2MCwgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgCi0gICAgMTE5MjQzLCA2NzYyMCwgMCwgMjczNCwgMTEwNzQsIDAsIDY3NjI3LCA0MzU5MywgMCwgNjc2MjUsIDU5NjAsIDAsIDg5OTIsIAotICAgIDY1MjkzLCAwLCAxNzgyLCA2NzYyMiwgNjgxMTQsIDExOTk1MCwgMCwgNjgxODAsIDU1MDEsIDExOTk1MiwgNDI1MDgsIAotICAgIDc0NDIsIDEyMDc0OSwgMzU5LCA0MTI1MywgMTE5OTU3LCA2MjM5LCAxMTk5NTYsIDQxMjU2LCAwLCA2ODEzNCwgMCwgCi0gICAgNzQyMDksIDAsIDkzNDYsIDExODkwNCwgNDEyNTQsIDAsIDQzMjkxLCAzNzY3LCA1NzM3LCAwLCA0ODY1LCAwLCA1NzQwLCAwLCAKLSAgICA1NzM2LCA0MzY4LCAwLCA3MTkzLCA2ODEzNywgMCwgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCAwLCA0ODY5LCAKLSAgICAxMjA1NjMsIDAsIDQyMjMsIDAsIDY2NTAsIDAsIDAsIDAsIDAsIDQ4NzAsIDAsIDc0ODA1LCA2NjU2NiwgMCwgMTIwNzU4LCAKLSAgICAwLCAwLCAwLCAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDAsIDYyNDUsIDAsIDI3MzIsIDY2NDU5LCA3NDUsIDAsIAotICAgIDE5NTA5NywgMCwgNDc3NywgNzgyMSwgMCwgMCwgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgNTk2NiwgMCwgNDc3OCwgCi0gICAgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIDY0NDA3LCAwLCAwLCA4NTc3LCAwLCAxMTg5NjQsIDQzMjg1LCAxMDIxNiwgNDc4MiwgCi0gICAgMCwgMCwgMTIwNzU3LCA5MTc5MjQsIDEyMzI1LCAwLCA4NzE3LCAwLCAwLCA0Nzc2LCAwLCAxMTQ5MiwgODcwMCwgMCwgCi0gICAgMTMxNzYsIDAsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAwLCAxNzE1LCA0ODQ5LCA4MjQyLCA5NTYxLCA3MzkyMiwgCi0gICAgNDMyNzgsIDQyNjM1LCAwLCAwLCA1OTYzLCA5MTc5MjYsIDAsIDAsIDQ4NTAsIDAsIDE2MDcsIDQ2NiwgNDg1MywgMTE4OTk1LCAKLSAgICA0ODU0LCAwLCA1MTY0LCAwLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgMCwgMTI0NDUsIAotICAgIDM3ODUsIDIzNCwgMzE5OSwgMCwgNDEyNjgsIDQ4NDgsIDI1MzAsIDAsIDQ3OTgsIDE5NjQsIDAsIDczNzYyLCAxMDQ1OCwgMCwgCi0gICAgODU3NiwgMCwgMCwgMjcwNCwgNDc5NCwgMCwgMCwgODMyMiwgNDc5NywgNzQwNzQsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIAotICAgIDY1MTA0LCAwLCAwLCAzMDMsIDAsIDAsIDAsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDExODg2OSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDMyOTIsIDAsIDI0NDEsIDEwNzM5LCA2NTA5MCwgMCwgMTE5MzI3LCAwLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDAsIAotICAgIDQ5MzcsIDc0NTQxLCA3NTMsIDU4NDksIDEwNTk3LCA0MzA4OSwgMTE3MjIsIDkyNDgsIDAsIDQyODc5LCAxMTcyNSwgMCwgMCwgCi0gICAgMjcyNiwgMzEwNywgNzM5NTgsIDQ5NDEsIDY0OTM3LCA5MTc1MzgsIDkxNDAsIDE0MDgsIDUyNjEsIDQxNDEyLCAwLCAxODEsIAotICAgIDAsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgMCwgMCwgNDk2NCwgCi0gICAgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgMCwgNjQxODIsIDY0MTgxLCA2NDE4MCwgNjQxNzksIDk0ODIsIDQ4NzMsIAotICAgIDQxMjMxLCAxODIyLCA0MjUyNiwgMCwgMTI3NTgsIDM4NjUsIDAsIDAsIDEwNTAwLCAwLCAwLCAwLCAwLCA5ODMwLCAwLCAKLSAgICAzODksIDEwODkzLCA3NTIxLCAwLCA0ODcyLCA1NDYzLCAwLCAzMTI1LCA5NTY3LCAwLCA0ODc4LCA1NDU5LCA0ODc0LCAwLCAKLSAgICA5NTU3LCA1NDY1LCAwLCAwLCAxMTQ5NCwgMCwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDAsIDAsIAotICAgIDY0MTkxLCA2NDE5MCwgODg5OCwgNjQxODgsIDAsIDQxMDMwLCAwLCAwLCA5MTc4MzUsIDAsIDkxNzgzNCwgMCwgOTE3ODM3LCAKLSAgICA0MTAzMSwgMCwgMTE5NjAsIDAsIDMwODIsIDAsIDAsIDAsIDEwNTczLCAwLCA3MDc5LCA1ODU2LCAxMjcwNDMsIDUxNjMsIAotICAgIDEyNzA0MiwgMCwgMTgxNywgNjY3MjQsIDAsIDAsIDEwNTY0LCA3NzYzLCAxMzA3NywgNDE4MTMsIDQ0MDAsIDQxNzQ1LCAKLSAgICA2NDIwNywgMTAyNzUsIDg5MjUsIDEwMzcxLCAxMDMwNywgNDE4MTQsIDQyNDgsIDAsIDAsIDQ1NDEsIDYyOTksIDY0MjA0LCAKLSAgICA2NDIwMywgNjQyMDEsIDY0MjAwLCA2NDE5OSwgNjQxOTgsIDAsIDQyMTU2LCAwLCAwLCA2NDE5MywgNjQxOTIsIDAsIDAsIAotICAgIDY0MTk3LCA2NDE5NiwgNjQxOTUsIDY0MTk0LCAxMzI4MiwgNjQxNzUsIDY0MTc0LCA2NDE3MywgMCwgODQ2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyNTQzLCAxMjE2MywgMzEwOCwgOTc0NSwgNjQxNjcsIDY0MTY2LCA2NDE2NSwgNjQxNjQsIDQxNzQzLCAwLCAKLSAgICA2NDE2OSwgNjQxNjgsIDY0OTQ5LCAxMDk3MiwgMTAyNTEsIDEwMjQ3LCA0Mjc2OCwgNzE1LCA2NDE2MSwgNDMyOTksIDk0NTMsIAotICAgIDUzNDgsIDEwOTQzLCAxMjAzNzgsIDAsIDExMzUyLCA1NTAsIDk5MTAsIDAsIDAsIDY2NTc5LCAxMTU1MSwgMCwgMCwgOTUwNCwgCi0gICAgNzE4NywgMCwgMTAzNzMsIDAsIDEyMDc5MSwgMTAyNjEsIDEwMjUzLCA2NDA0LCAxMDI3NywgMCwgMTE5ODQsIDE1NTIsIAotICAgIDY1MjIyLCA2OTk4LCAwLCAwLCAzMTI4LCA0Nzg5LCA1MDY3LCA1MDY2LCAxMTg4NDksIDQ3ODQsIDAsIDg4MjcsIDExNDYsIAotICAgIDUwNjUsIDAsIDAsIDY4MTM2LCAwLCAwLCA1MDY0LCAyNDMxLCAwLCA5NDUwLCAxODA5LCAwLCAwLCAwLCA1MDYyLCAxMjY0LCAKLSAgICA2NDgxNywgMTMyNTQsIDExNjk3LCAwLCA5Nzg1LCA2NDcxNiwgMCwgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIAotICAgIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCAwLCA0MjEzMCwgMCwgNTE1MSwgOTE3ODMxLCA5MTc4MjMsIDAsIDAsIAotICAgIDAsIDc2MjAsIDM4MDAsIDY1MTIyLCAwLCAwLCA4MzU1LCA3ODU0LCAwLCA5NTQsIDY0OTI3LCA0MTg1LCA0MTA0NSwgMCwgCi0gICAgNDE0MzgsIDQxNDM5LCA3Mzk3OCwgMTA3MTEsIDQ1OTMsIDAsIDEyMDU4NCwgMCwgNjQ3NzQsIDEzMzA5LCAxMDUzMiwgCi0gICAgNjY3MjcsIDAsIDAsIDAsIDY0NzU5LCAwLCA1MTY2LCA5ODg4LCAwLCA1MTQ4LCA0MjgzNCwgMCwgMTIwNjM0LCAxMTg5NDYsIAotICAgIDY0MTQwLCAwLCA2NDEzMSwgMzExOSwgOTE3ODE0LCAwLCAzMDYwLCA2NDEzNSwgOTk4NiwgMCwgMCwgNjM2LCAxMTY5OCwgMCwgCi0gICAgMCwgOTkxNiwgMTE3MDEsIDc4MzYsIDAsIDY0MTM3LCA4MzIwLCAxMTg5NjksIDg4NjMsIDAsIDExOTk2MCwgMTQ3NywgCi0gICAgNDMyODksIDAsIDc0MzU4LCA4NjE4LCAwLCA5OTA4LCAwLCAwLCAwLCAzOTM3LCAxMjMxMiwgMCwgMCwgMCwgNjQ3ODEsIAotICAgIDkxMiwgMTA0OTgsIDQ1MzYsIDExOTk2MywgNzQ1MzIsIDAsIDYyNDQsIDAsIDE5NDU4MCwgMzkzNSwgMTIwNjY1LCAwLCAwLCAKLSAgICAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCAwLCA1Mzk3LCAwLCAxMjA0NiwgMTI1OTksIDAsIDAsIDUzOTUsIDAsIDUzOTMsIAotICAgIDM1NCwgMCwgMTE5OTQ4LCAwLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDMyOTcsIDAsIDQzMTEsIDQ2NDQsIDg4MTgsIDAsIDAsIDAsIDczODE4LCAzOTE4LCA2NjQ1MiwgCi0gICAgMzc5NywgMTY0NCwgMTE5OTQ0LCA5NjU4LCA0MTQwLCAxMTM4NSwgNjU5NDcsIDY0NTUsIDkwMzAsIDgxMywgMCwgNjgxMzEsIAotICAgIDQxNDYsIDAsIDUzNjAsIDI0NjYsIDAsIDAsIDAsIDYyNDksIDQyMTE3LCAwLCAwLCAwLCAwLCA3NDA0NiwgMTIwNTgzLCAKLSAgICA0OTExLCA5ODgsIDkxNzgwOSwgMCwgMCwgMCwgNzA1NCwgNjQxNDcsIDAsIDY0OTIwLCA5MTc4MTIsIDkxNzgwMywgCi0gICAgMTE4OTMzLCAxMjAzNDksIDAsIDAsIDExOTgxLCAxMjIwMiwgMCwgMTEwMzIsIDEyMDcyNSwgNjA5MywgMTE2MDgsIDk3NSwgCi0gICAgMCwgNjU4NDMsIDE3MCwgMCwgMCwgNDE2OSwgMCwgNDE4NTksIDYwNTgsIDEyMDQwMSwgMCwgMTIwNjU3LCAwLCAwLCAwLCAKLSAgICA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgCi0gICAgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTE3ODY2LCA3MzczNiwgMCwgOTgyNSwgNjQ0OCwgMTI3MDAsIDEyNzAwOCwgNDgzMSwgCi0gICAgMCwgMCwgMCwgNTMwMCwgNDc0MSwgNDIxMDgsIDAsIDY0MTU5LCA0NzM2LCA2NDE0OCwgMCwgODQ5LCAwLCAwLCA0MzI4OCwgCi0gICAgMCwgNjY2MjAsIDAsIDAsIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMCwgMCwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgMzkyOCwgCi0gICAgOTE3ODcwLCA2NTI4MywgMTA3MDYsIDcxOTgsIDAsIDQ4NDIsIDEyMDUzLCAwLCAwLCA0ODQxLCAwLCA0MTcxLCAxMjAwOCwgCi0gICAgNjI1MSwgMzkyMywgMTQ5MCwgMCwgMTE5NTkxLCAwLCA0MDk3MiwgNTI0NSwgMCwgMTAxMTQsIDQyMDAxLCA0MTg4OCwgCi0gICAgNDg0NSwgODMzMiwgNDA5NzQsIDAsIDQ4NDAsIDkwNzcsIDkxNzg1MSwgMTc0NywgOTE3ODQ5LCA0ODI1LCAwLCA5MTc4NTIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk4NTAsIDExODkzNywgMzY3LCAxNDcyLCA5MTc4NTksIDY2ODcsIDEyNzQsIDAsIAotICAgIDU5MDUsIDEyMzM5LCA4OTE5LCA3Mzk1MywgMTA5MDcsIDY1MjYxLCAxMTAyMywgMTE5NTU5LCA0ODMwLCA5MTM0LCAwLCAKLSAgICA2NDEyNiwgNDMwMTEsIDAsIDAsIDY0MTAxLCAwLCAwLCA0ODI0LCAxMDYxNCwgMTIwMzkwLCAwLCAxODg4LCAxOTYwLCAKLSAgICA3ODYxLCA5MTc4NTYsIDAsIDQxODM2LCA0MzAxMiwgNjA1MiwgNjA2NCwgNTQsIDQzMDA5LCAxMjIxNCwgMCwgNjIxMSwgMCwgCi0gICAgMzU4LCA0MTk5NywgNDE4MzMsIDExNDQyLCAxMDc1OCwgNjU3NzQsIDAsIDEyMDM4NCwgNjQxMTUsIDEyMDM4NSwgMCwgMCwgCi0gICAgMCwgMTE5MDUzLCAwLCAxMjc2NSwgNjQxMjEsIDEyNjk5OCwgMTI5NjIsIDAsIDAsIDQwMTcsIDEyODI3LCA1MjQxLCAKLSAgICAxMjAzOTIsIDAsIDQxMTE4LCAzOTI0LCAwLCAxMTM2NiwgOTE3ODQzLCAwLCAwLCA5MTc4NDYsIDQxMTE2LCA5MTc4NDQsIAotICAgIDkxNzg0NSwgMCwgMTEzNjMsIDEyMDU3LCAxMTkxNywgMTU2NywgNzQwMDAsIDQ3MjEsIDAsIDY2MjAyLCA4OTU3LCA0MTM5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjc0MCwgMCwgNDcyMiwgMTI3NjEsIDAsIDEyNzU5LCA0NzI1LCAwLCA0NzI2LCAwLCAwLCAwLCAKLSAgICA5MTc5MDQsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIDAsIDAsIDY0MjEyLCAKLSAgICA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA2NDIxNSwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAwLCA0MTg0MywgODcyMCwgCi0gICAgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAwLCA4NTUyLCA2NDExMywgNDE4NDUsIDM4NDksIDAsIDY2MjMyLCA5Nzc4LCAKLSAgICAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA3NDQzNywgOTE3OTExLCAwLCAwLCA3OTM1LCA2NzU4NiwgMCwgMTExNCwgMCwgCi0gICAgNjc1ODUsIDEyMDA1MiwgMTIwMDUzLCAxMjAwNTAsIDEyMDA1MSwgMzkzOCwgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIAotICAgIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgNjQ1MiwgNDcxMywgOTE3ODg3LCAKLSAgICA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAxMjAwNDUsIDEyMDA0MiwgNDE5NDQsIAotICAgIDQ1MzIsIDY1NDEyLCAxMjAwNDYsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgNDcxMiwgOTE3OTAyLCAKLSAgICA5MTc4OTksIDkxNzkwMCwgMCwgODE1NSwgNDcxOCwgMzk0MiwgNDcxNCwgOTYyNSwgMCwgMCwgMCwgMTIwMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDY1NDE0LCA2NDU0LCAxMjI5LCAwLCA2NjQzNywgNjYwMjUsIDkxNzg5NCwgMCwgNDI1MDAsIDEyMDUwOCwgNDgwOSwgCi0gICAgOTYyMywgOTE3ODc0LCA5MTc4NzksIDkxNzg4MCwgOTE3ODc3LCA5MTc4NzgsIDY1NDA1LCA2ODE1OSwgOTE3ODgxLCAKLSAgICA5MTc4ODIsIDUzNjUsIDQ1NDUsIDg5MDEsIDkxNzU2NiwgMTE5NTU1LCA0ODEzLCAwLCAwLCA1OTI1LCA0ODA4LCA2NDMzMCwgCi0gICAgMCwgNjU0NzUsIDAsIDAsIDQ4MTQsIDAsIDQ4MTAsIDAsIDAsIDY0OTI4LCAxMDU0MywgMCwgMzUyMiwgMCwgNDE0LCAKLSAgICA2NTQwNCwgMCwgMCwgNjQ1NiwgNzM4MjAsIDAsIDExOTA1LCA5MTc4ODMsIDAsIDAsIDAsIDc0NDk1LCAwLCAwLCAwLCAKLSAgICAxMTg4MjAsIDk3NTEsIDY1NDA3LCAwLCAxMTc3MCwgMzkxOSwgMCwgMCwgNjUwNjEsIDAsIDAsIDAsIDEyMjM1LCAwLCAwLCAKLSAgICAwLCA2NjU3NiwgMCwgNjQwODAsIDAsIDY0MDkwLCAwLCAwLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIDAsIDQyMDM4LCAzODcsIAotICAgIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgMCwgMCwgNjQzMTAsIDY0NjIxLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODk2LCAwLCAKLSAgICAzNzUsIDY5NzYsIDAsIDExOTAwNSwgMCwgMCwgMCwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgCi0gICAgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIDAsIDAsIDAsIDEzMTUwLCAKLSAgICA2NDQ5MiwgMCwgMCwgMCwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDAsIDEwNzk5LCAwLCAyNTg3LCA2NjM3MiwgCi0gICAgMCwgNDE5MywgMTIwMzM0LCA0MjQxLCAwLCA3OTk4LCAwLCAwLCAwLCAwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIDAsIDY0Mjk3LCAKLSAgICA3NDc5OSwgMCwgNzQxNDAsIDAsIDUzNzMsIDAsIDAsIDM3NjIsIDEwMDE1LCAwLCAxMTkyMzIsIDAsIDQxNTkwLCAwLCAwLCAKLSAgICAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCAKLSAgICA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgMjgwLCA3NDU1OCwgMCwgNjgxMzgsIAotICAgIDEzMDcyLCAxODk0LCAwLCAwLCA2NTQ3OCwgNDMzMTAsIDcyMzEsIDAsIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCAKLSAgICA2NDUzLCAxMDIwMCwgNjIzNSwgMCwgMCwgMCwgMCwgNDQ3MCwgMCwgMCwgNzc4MCwgNTM2OSwgMTE4OTU4LCA1MjQ5LCAwLCAKLSAgICA1MzY3LCA4NzU2LCAwLCAwLCA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTY5NywgCi0gICAgNDEzMTksIDEzMDAsIDEwNjUwLCA0MTY5MiwgNjQ1MDUsIDQ2NjgsIDAsIDExOTYyNCwgMTQ2NSwgMTA4NTAsIDM5NDMsIDAsIAotICAgIDQxMjA1LCAwLCAwLCAwLCAwLCA1MzUyLCAwLCAwLCA4ODM5LCA0MTMxNCwgMCwgNzc4NSwgNDEyMDQsIDAsIDQxMjA5LCAwLCAKLSAgICAwLCA0MzYwNywgMCwgMCwgNTQyMCwgMzg5NywgMCwgMCwgNzQ0MTcsIDQwMTgsIDAsIDY4MTI3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNTYxLCAwLCAzNTQyLCA0MTkxNSwgMTIwNzYsIDc5NTEsIDY4MTUyLCAxMTg4NTcsIDUzMDMsIDYyNzYsIDE3MDYsIDAsIDAsIAotICAgIDc0MTE2LCAwLCA2NTE1MCwgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDAsIAotICAgIDAsIDEwNzUzLCAxMDgzMCwgMCwgNjE1LCA2NDQ5MCwgNzU3NCwgMCwgMCwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgCi0gICAgMTI3MDI4LCAwLCAwLCAwLCAyMDIwLCAwLCA0MDIyLCAwLCAwLCAwLCAwLCA0MTY5MSwgMCwgMCwgMCwgMCwgNjQ2MjIsIAotICAgIDkwNzAsIDAsIDAsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgMCwgMCwgNzAwMCwgMzkwNCwgMCwgMCwgMCwgMCwgCi0gICAgMTI3MDEyLCAxMzEyMywgMTA4NDYsIDM0NTAsIDAsIDAsIDExODgwNywgMCwgNDI3NzgsIDEwMDAwLCA0MTA4OCwgNDQ5LCAwLCAKLSAgICAzNzc3LCAwLCAwLCA5NjM2LCAwLCAxMDczOCwgMCwgOTM2NywgNTkzLCA0MTA4NSwgMzk5OSwgNjUyMjYsIDQxNzEzLCAKLSAgICAxMjc2NCwgMCwgNjQ0MDksIDM1OTYsIDAsIDAsIDk3NjMsIDEyMDI4MCwgMTIwMjgzLCAxMjM0NywgMTI0LCAxMjk4MSwgCi0gICAgNDExMjcsIDEyMDI3OCwgMCwgMCwgMCwgMCwgMTA4MjAsIDAsIDAsIDAsIDE3NjksIDQxNzE1LCAyNDYzLCAwLCAwLCAKLSAgICAxMjc3MCwgMCwgMTUzOCwgMCwgNDMxMjQsIDAsIDE5NTA1OCwgNzc5NSwgMTIwMzAwLCAwLCA0ODI4LCAxMjU4LCAwLCAKLSAgICAyMDA2LCAwLCAwLCA5NDk4LCAxMjcwMzIsIDEyNzAzMywgMTIwMjg5LCAxMjAyODgsIDM5MzksIDEyMDI5MCwgODg0NiwgCi0gICAgODk0MywgMTIwMjg3LCAxMjAyODYsIDI2NTAsIDQ0OTEsIDE5NjEsIDQyNjAyLCAxMTUyNSwgMTIwMjkyLCAxOTU5LCAKLSAgICAxMjAyOTQsIDAsIDExNzc0LCA0MTAxNiwgMCwgMCwgMCwgMTUxMSwgOTMyNCwgMCwgMTA1MTksIDY2MzMxLCAzNDU0LCAKLSAgICAxOTkzMCwgMCwgNDEwMTksIDAsIDAsIDY1MjkyLCAwLCAxMjg2MiwgMCwgMCwgNDIxNDMsIDQxODI4LCAwLCA2NTUzMSwgMCwgCi0gICAgMTE4ODc5LCAwLCAwLCAwLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDEyMDM0MCwgMCwgNzczMywgMCwgCi0gICAgNDk5OCwgMCwgMCwgNDE5NTAsIDAsIDQyNjgsIDAsIDAsIDAsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAwLCA3NDc4OCwgCi0gICAgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCAwLCA2NTI4MSwgMCwgMTA5NDksIDAsIDAsIDAsIDIwMTUsIDAsIAotICAgIDAsIDAsIDY2MzE4LCA3NDgyNCwgMCwgNDI1MTcsIDAsIDAsIDAsIDAsIDgwOTQsIDY0NDY4LCA2NTkwOSwgNjQ3NCwgNzk0LCAKLSAgICAwLCAxMjY1NiwgMCwgMTE5MzUzLCAwLCAxNjY1LCAwLCA0ODMzLCAwLCAxMTkzNTEsIDAsIDAsIDE4OSwgMTI2MTEsIDAsIDAsIAotICAgIDI4NTksIDQ4MzgsIDAsIDQ4MzQsIDAsIDAsIDAsIDQ4MzcsIDAsIDc3MCwgMCwgODExLCAwLCA0MTA0MiwgMCwgNDEzMTgsIAotICAgIDY0NDI3LCAwLCAwLCAwLCAzODk1LCAwLCA3NDM0MSwgMzk3NiwgMCwgNDI4NTksIDEwMTkzLCAzMTE2LCA3NzQ3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MTg3NywgMCwgMjg3MSwgNjQ2MTQsIDAsIDk5OSwgMCwgNjgxNzcsIDQxODc2LCAyNjYzLCAKLSAgICAyMDE3LCAwLCAwLCAxMTA0MCwgMTAxNTAsIDAsIDY0MzA4LCAxNTIyLCA1OTcsIDQ3NzUsIDEyNTU1LCAxMjU3MSwgMTI1NTAsIAotICAgIDEyNTgzLCAxMjU2MCwgMjAxOSwgMTI1NTYsIDEyNTg0LCAzMDkyLCAwLCAxMjU2MiwgNDc4MywgMTI1NjYsIDEyNTY5LCAKLSAgICAxMjU1NCwgMCwgMTA4MTIsIDAsIDAsIDAsIDMwNzgsIDE0MDIsIDAsIDAsIDAsIDAsIDAsIDM5NCwgMzA4OCwgMCwgMCwgMCwgCi0gICAgMzk5MSwgNjQzOTEsIDAsIDAsIDQyNCwgNjYzMjgsIDE5OTksIDAsIDczOTE0LCAwLCAwLCAwLCAwLCAwLCA4MjQ2LCAwLCAwLCAKLSAgICAwLCA0MTg0MCwgMCwgMjM3NywgMTI5OCwgNjQwMTEsIDEyNTcyLCAxMTMxOCwgMTI1NTcsIDEyNTU5LCAxMjU3MCwgODQ4OCwgCi0gICAgMTAwMywgMjM3MywgOTQ0NiwgOTQ0NywgOTQ0OCwgNDgsIDAsIDk0ODAsIDQ4MSwgMCwgOTQzOCwgOTQzOSwgOTQ0MCwgCi0gICAgOTQ0MSwgODQ2NSwgOTQ0MywgOTQ0NCwgOTQ0NSwgOTQzMCwgOTQzMSwgOTQzMiwgOTQzMywgOTQzNCwgOTQzNSwgMzk4NCwgCi0gICAgOTQzNywgMCwgMCwgOTQyNCwgOTQyNSwgOTQyNiwgOTQyNywgOTQyOCwgOTQyOSwgNjQ3NTgsIDAsIDk2NTUsIDAsIDIwMDQsIAotICAgIDkwOTYsIDk3ODIsIDAsIDkxNzIsIDAsIDE5OTY1LCAwLCA1OTU1LCAxMjA0ODUsIDExMDgsIDAsIDc0NzczLCAwLCAwLCAKLSAgICA2NDc4MiwgMzkyNiwgMCwgNjUyMTAsIDg3OTgsIDAsIDAsIDEzOTIsIDAsIDAsIDkxNzU1NywgMTA2MDYsIDgwNjUsIAotICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgMCwgNDAxOSwgMCwgMCwgNDMyODAsIDgyMTksIDAsIDE4MTIsIAotICAgIDAsIDAsIDAsIDAsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgCi0gICAgMzkwOSwgNzQ0NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDksIDAsIDY1NzA3LCAxMTk0MywgNDE4MDYsIDAsIDQyMzM2LCAKLSAgICAzOTIxLCAwLCAxMTc3NSwgNjQ3NjAsIDExNzY2LCAxMDM4LCA0MjMwMywgOTgyMywgMCwgMCwgNDAwOCwgNjQwMDQsIDg3NzMsIAotICAgIDEwNzMzLCAzNiwgMCwgNTE1MywgNDE4MDUsIDAsIDczNzM1LCA3NjMsIDQxODA4LCA2NDkxMCwgMCwgMjAwOSwgMCwgMCwgMCwgCi0gICAgOTY0MCwgMTE5OTUxLCAwLCAxMjA2OTUsIDg2MjEsIDAsIDEyODUyLCAzMDMxLCAwLCA2NDM2MSwgMCwgMTgyLCAxOTQ3MTgsIAotICAgIDAsIDAsIDAsIDAsIDkwNTgsIDM2NiwgMCwgOTg5MiwgNTk2OSwgMTE3NTQsIDEwODQ4LCA0NTcwLCA2NTMwMSwgMCwgNDI1NSwgCi0gICAgMCwgMTAxMDIsIDQxMTg5LCA0MDAzLCA0MTAyNiwgNjgxMDksIDEzMjkzLCA0MTE5MiwgMCwgMCwgNDIyNTEsIDAsIDQyNTM0LCAKLSAgICAwLCAxMTI4NywgNjEyOCwgMCwgMTEwMzQsIDEwOTIzLCA2NDQyMywgMCwgNjU1MDYsIDAsIDAsIDc0MDgzLCAwLCA2NjU4MiwgCi0gICAgMCwgMCwgMTE5OTU1LCAwLCA5ODE3LCAwLCAwLCAwLCAxMjExNywgNjY1ODYsIDQxODMsIDEwNTQwLCA2NjI1MCwgMTI3MDQ0LCAKLSAgICAxMjcwNDUsIDAsIDAsIDAsIDEyODk3LCAzNzkyLCAyMDExLCAwLCA2MDY1LCA0MzE2MCwgMCwgMTk0NzE1LCA4NjkyLCAKLSAgICA0MTE4NiwgNDE4MTYsIDQxMDIzLCA0MTgxOCwgNDExODcsIDExNjU5LCA3OTIyLCAxMjYxNCwgMjAwNSwgODUyMywgCi0gICAgMTIwMTQ0LCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCAxMjAyNzQsIDEyNzExNiwgNDcwNSwgNzE2LCAwLCAKLSAgICAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgMCwgNzQ1NDYsIDY2MjE0LCA0NzA2LCAwLCAwLCAxMjAwMzcsIAotICAgIDQ3MDksIDEwNjgwLCAwLCA0MzI5MywgMCwgMCwgMTE5MTY0LCAwLCAwLCAwLCAxNzAwLCAxMTkyMjMsIDAsIDAsIDAsIAotICAgIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgMCwgODUwNiwgMCwgMCwgMTI2OTk2LCAxMDA1LCA5MzcsIDEyMDAzMCwgNDczNCwgCi0gICAgMjg3MCwgMCwgMTIwMDMyLCAwLCA3NDYzLCA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgMTIwNjQ0LCAwLCAKLSAgICA4MTA5LCA0MzEwNSwgMCwgNDczMCwgNDQ3LCAxMzE4NiwgMTUxMywgNDczMywgMTIwNDE1LCAwLCAwLCA0MjUyNywgMTI5MTEsIAotICAgIDAsIDEzODMsIDg1NjUsIDI0NjksIDEyMDAyNCwgMTE5MDg5LCA2MTU2LCA2ODExNywgMCwgNzk5MywgNDI4OCwgMTIwNDE2LCAKLSAgICAyNjc0LCAxMzIzOCwgMTE5MjIsIDAsIDEyMDMzMCwgMzUxMCwgMTMyMzQsIDAsIDEyMDQwNywgNTYwNSwgNDIwOTUsIAotICAgIDExMzY0LCAwLCAxMzgwLCA2NTYxNywgMTIwMzIwLCAxMjAyNjEsIDEzMTk2LCAxMzE5NywgMTIwMzA5LCAxMjA2ODIsIAotICAgIDk0OTUsIDExOTM0NiwgMCwgNTk1OSwgMCwgNzM5NzYsIDEyMDMwNSwgMCwgNjk0MSwgMTE5MzQ5LCAxMzIwNSwgMTMyMTEsIAotICAgIDU4MDEsIDEyNzY5LCA2NTkwNSwgMTIwMzE2LCAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDAsIDE5OTU3LCAKLSAgICAwLCAyMDIxLCAxMTkzMzIsIDAsIDAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIDY0MzQxLCAxMTkzMzksIAotICAgIDk4MTQsIDQzNTcxLCA1ODI3LCAzMzE0LCA3Nzg3LCAwLCA2NTQ5NCwgNjgxNTMsIDAsIDAsIDEyMDYzNiwgNjQ1MzEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDY1NDY3LCA1NzcxLCA0MTI5OCwgMCwgOTc0MiwgNTIxLCAwLCAxMDgwMCwgMCwgODQwNCwgMTk0NjI1LCAKLSAgICA0ODMsIDcwOTYsIDcwODksIDY2MzIzLCA5MjgsIDAsIDAsIDAsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDAsIAotICAgIDY1NzgyLCA5ODQxLCA4ODQzLCAxMjE0NSwgMCwgMTAwNzQsIDEyMDgxNiwgMCwgMzc2OSwgMCwgMCwgMCwgMCwgOTU3MywgMCwgCi0gICAgNjUyOTAsIDg4NDksIDAsIDY1ODU1LCA2NTExMiwgMTc5NiwgMCwgMCwgMCwgODE2NCwgNDEzMDEsIDM1MDIsIDAsIDAsIAotICAgIDEwNjIxLCA3MzgzOCwgMCwgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAwLCAxMjY2MSwgNzYwOCwgMTAzNTQsIDEwNDE4LCAKLSAgICA0MjQxMSwgMjAyMiwgMCwgMTQwOSwgMTIxOTUsIDQwMDEsIDMxMTIsIDEwODI0LCAxMjA2MzksIDEzOTAsIDAsIDAsIDQyMSwgCi0gICAgNDM1MzYsIDU4NDYsIDEyMDEyMCwgNDEzMCwgMCwgNzU5NSwgNDI1ODgsIDc2MDAsIDAsIDY2MDM1LCAwLCAwLCA2NTg1MSwgCi0gICAgNDI2MDcsIDAsIDAsIDMxNjgsIDAsIDQyMTM0LCAwLCAyMzcwLCAyODQ2LCAwLCAwLCAwLCAxMjAxMzIsIDAsIDE4MzYsIDAsIAotICAgIDAsIDExOTEzNywgMzc0MCwgMCwgNjI5MCwgNjUzNzQsIDEyMDQ1MSwgNjU5MjMsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIAotICAgIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDAsIDAsIAotICAgIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCA5OTk4LCAwLCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCA4Mjc5LCA4Nzc2LCA2NDk1NCwgCi0gICAgNDk3NSwgNzQ4MDksIDAsIDQyNjcsIDAsIDAsIDAsIDAsIDE5NTA0NiwgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgMCwgCi0gICAgMCwgMTI1ODYsIDAsIDkyNDIsIDAsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCAwLCA3NzkzLCAwLCA5MzI4LCAwLCAwLCAKLSAgICAxMjYwNCwgMCwgNjYxNSwgMCwgMCwgMzk4NiwgMCwgMCwgODkxMiwgNjQ1NTUsIDAsIDAsIDAsIDk1NDEsIDAsIDAsIAotICAgIDExMjc1LCA4NTQwLCAxMTQ5OCwgMCwgMCwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDAsIDAsIDAsIAotICAgIDAsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgMCwgMCwgMTYwNiwgMTIwMzQ4LCAxMjAzNTEsIAotICAgIDMwOTMsIDAsIDAsIDAsIDEyMDY0OSwgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgMTIwMzM2LCAxMTkyMywgNDAyMywgCi0gICAgMTIwMzMzLCA1NzYzLCAxMjAzMzUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIDExODc4NSwgNDQ1NSwgNzQzMjEsIAotICAgIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMCwgMTE5NzMsIDEzMDg5LCA0MjkzLCAxMjAzMjksIDEyMDMyOCwgCi0gICAgNDI3NTgsIDEyMTk2LCA0MjgzNywgMCwgMTE5MzE5LCAwLCAwLCA1ODE3LCAwLCAwLCAzMTIwLCA5Nzk3LCAwLCAwLCAwLCAKLSAgICAxMDM4OSwgMCwgMCwgNDg5NSwgNjUzNTgsIDAsIDQzNTksIDU4NSwgMCwgMzUwOSwgMCwgNDg2LCA0MjkwLCAwLCAwLCAwLCAKLSAgICAwLCA3MDA0LCAwLCA2NTg4MCwgMCwgMTE5MDQ4LCAyMzgwLCAxMTM4MCwgMCwgMCwgMjM3NiwgMCwgMCwgMCwgNTE5NywgCi0gICAgMTI3MDQ2LCAxMjcwNDcsIDEyNzA0OCwgMjM2NiwgMTI3MDUwLCAxMjcwNTEsIDEyNzA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzQxODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDAsIDQyMzg0LCAwLCAKLSAgICA0MjI3LCA3NDE1OCwgMCwgMCwgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDAsIDAsIDY0Nzk3LCAwLCAKLSAgICA1ODIwLCAwLCAwLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIDEyMDA2MywgCi0gICAgMCwgMTMxOTIsIDAsIDQxNzk5LCA2NTUzMCwgMTcxMSwgMTI5ODQsIDQzMDM5LCAzMTE0LCA2MjU1LCAwLCAxMTg5MzgsIDAsIAotICAgIDEwODUzLCA5MjYsIDAsIDc0MTg0LCAwLCAxMjAwNTUsIDAsIDQzMTc1LCAwLCA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgCi0gICAgMCwgNDE4MDEsIDExOTA4OCwgMCwgNTIwLCA0MjAwLCAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDAsIDAsIDgzNjAsIAotICAgIDAsIDAsIDMyMSwgNDIyOSwgNjQ1NDMsIDAsIDY1NTYzLCAwLCAwLCAyODYxLCAwLCAxMDA5NSwgMCwgMCwgMCwgMTg2MSwgMCwgCi0gICAgMCwgMCwgMCwgNDMwNDEsIDAsIDAsIDAsIDM4NTksIDEyMTgxLCA0MTY2MCwgODIwOSwgMCwgMTIwNjc4LCAxMjk3MywgMCwgCi0gICAgNzQ3NTcsIDAsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgCi0gICAgNjUxNjEsIDczODk2LCAwLCAwLCAxNDA1LCAxMTkwNjMsIDQzMjIwLCA0MzM0MSwgMCwgMTk5MTksIDAsIDY0NTMyLCAKLSAgICA2NTM2NywgMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDAsIDAsIDY0ODUsIAotICAgIDEzOTcsIDAsIDY1MzY1LCAwLCAwLCAwLCAwLCAwLCA3NDcxLCAxMjA3OSwgMCwgMTI2ODIsIDQzMjg3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgMTE5NTk0LCAwLCAwLCAKLSAgICAxMzQ2LCAwLCA5MTc2MzEsIDY0NzI0LCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMCwgMCwgNDIxOCwgCi0gICAgMzA4NywgNjQ5NjAsIDAsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgMCwgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCAKLSAgICA0MjY0MiwgMCwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAwLCAwLCAyNjUsIDQxNzk1LCA2NDY2NiwgMCwgNDM1MzAsIDI3NTIsIAotICAgIDAsIDAsIDAsIDU5LCAwLCAwLCAwLCAwLCAwLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIAotICAgIDQyMjUyLCAwLCA4MDA5LCAzMzA1LCA0MzAzMywgNTExLCAxMTkzMjAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCAwLCAwLCAKLSAgICA5MTc5NzcsIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgNDEyMTEsIDEwMzg3LCA0NDUzLCA0MzI3NiwgCi0gICAgOTE3NzgzLCAxMzE1OSwgMCwgNjQ4MSwgNDEyMTMsIDAsIDAsIDAsIDAsIDQxOTgzLCA3NDE5OCwgNjYxNywgOTExNiwgMCwgCi0gICAgMCwgNDYyLCA2ODExMCwgMTA0OTMsIDAsIDgxMjksIDAsIDAsIDc0NDcxLCA2NjQ0LCAxMTY1OCwgMCwgMCwgMzQ1MiwgCi0gICAgMTE5MDYsIDk1ODEsIDEzODUsIDMwOTgsIDAsIDExOTAxMywgNDMzNDAsIDAsIDQxMDMzLCA2NDkzLCA0MjYyNiwgMCwgMCwgCi0gICAgMTE0MjYsIDAsIDE2ODEsIDExODc4OSwgMTIwNCwgMzc1NSwgNjQ2NjEsIDcyMzUsIDEwMTcwLCAzOTY2LCA4OTExLCAwLCAKLSAgICA0MTg0MSwgNDMzMzgsIDAsIDAsIDU3MjYsIDY0OTE1LCA0MjE3NSwgMCwgMCwgNDE0OTcsIDY1MDQ0LCAwLCAyODUxLCAKLSAgICA0MzAxNywgMCwgMCwgNDM3MywgMCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMCwgMzEwMCwgMCwgNjUzNjAsIDAsIDAsIDAsIAotICAgIDY0OTIyLCAwLCA4MTkwLCAxMjA4MywgMCwgMCwgNjUwNiwgNjQzMTIsIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCAwLCAwLCAKLSAgICAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgODk5MCwgMjg0OCwgCi0gICAgMCwgMCwgMCwgMjQ5LCAwLCAwLCAwLCAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCA2ODE3OCwgOTk1LCAwLCAwLCAKLSAgICA2NDgyNiwgMCwgOTE3Nzk4LCAwLCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMCwgMCwgMTIxMTIsIDAsIDAsIDAsIAotICAgIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIDEyOTEzLCA2NTQ0NSwgMCwgNjQ4OTEsIDAsIAotICAgIDc3MjUsIDAsIDAsIDAsIDg2MjQsIDAsIDEyNDQ2LCA0MzI5NSwgMCwgNDE4OTQsIDAsIDYyNzcsIDQxNjcyLCA0MTg5MywgCi0gICAgMTAwMTAsIDAsIDM1NDAsIDAsIDgzNSwgMCwgMCwgMTE5ODY4LCA3NDQwOCwgMCwgNzM5NTksIDU0MjYsIDQyNTgsIDAsIDAsIAotICAgIDU0MjQsIDAsIDgyODMsIDAsIDU0MzQsIDAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIAotICAgIDExNDMyLCAwLCAzNDY0LCA2NDg2LCA0ODE5LCAwLCAwLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgMCwgMCwgMCwgCi0gICAgNDMxLCAwLCAwLCAwLCAwLCA2ODE2NywgMCwgMTMwOTYsIDAsIDAsIDAsIDk1MTYsIDAsIDUyNjgsIDAsIDAsIDAsIDQ0NTAsIAotICAgIDEyMDcyMywgMTE1NDcsIDY0MzU4LCAwLCAzNTYsIDM0NzcsIDIyNywgMTA0ODgsIDAsIDM4MiwgMTE0MTgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY0ODQsIDI1NDEsIDY2MDM5LCAwLCAwLCAwLCAzNTQ5LCAwLCA5MTEwLCAxMTk2NjUsIDI3NDMsIDAsIAotICAgIDQzMjkwLCAxOTQ4MTIsIDkwOTcsIDAsIDQzMDE1LCA4NzgyLCAwLCA3NzYsIDI1MjQsIDAsIDg1NzMsIDAsIDAsIDAsIDAsIAotICAgIDEyMDU3MiwgNjQ5NDQsIDg5NTIsIDM4NTYsIDExODgxOCwgMCwgNTg3MiwgNjQ5NSwgMCwgMCwgMCwgMCwgMCwgMTIwNzMzLCAKLSAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgMCwgMTE5OTQsIDQzMzksIDc0NTU2LCAwLCA2Nzg0MywgMCwgMCwgMCwgNzQyNTEsIDAsIAotICAgIDUyMjgsIDAsIDc4NjgsIDQzMTg0LCAwLCAwLCA3Mzk4NiwgMCwgMCwgNDMwMjIsIDAsIDExNjIsIDAsIDI2NzEsIDAsIDAsIAotICAgIDAsIDAsIDExODg2NSwgNDU1MywgNzM4MTEsIDAsIDE5NTAwNSwgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMCwgNDU2NywgCi0gICAgNDE4OTEsIDAsIDAsIDExOTA1NiwgNDgyMCwgNjUyMzksIDE5NDY2MiwgMCwgMCwgNDMwNDIsIDExOTIxMiwgMTM3NywgMCwgCi0gICAgNDg5NywgNDI4MjEsIDkyNTAsIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAxMTMzMSwgNjE0NywgMCwgNDMyODIsIDg4MzMsIAotICAgIDAsIDAsIDY1MDQsIDE5NDY2NywgMTI2OTc5LCAxMDcxOSwgMCwgMTg5OCwgMTQxMywgNDI0NDMsIDAsIDgwMiwgMTIxNDEsIAotICAgIDAsIDAsIDY2NDgsIDEwNjcxLCAyNTI4LCAwLCA2NDc4OSwgOTE2OSwgODM4LCAxMjcwOTIsIDEyMDY5NywgODQ0LCA1MDE0LCAKLSAgICAwLCAyNTYsIDAsIDk5OTAsIDAsIDQzMzAxLCAwLCA3NTQyLCA2NTQ2NCwgOTcyNiwgMCwgNjQ4OSwgMTAwNDgsIDc0MzI2LCAKLSAgICAwLCA2NjU3MywgMCwgMCwgMCwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDAsIDAsIDAsIDYxOTYsIDY5NDUsIAotICAgIDE5NDYyOCwgMTk0ODkwLCAxOTQ2MzEsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgMCwgMCwgMCwgNDEwOTgsIDAsIAotICAgIDQxMDkzLCAwLCA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgMCwgMTY2MCwgNzM5MTYsIDAsIAotICAgIDExODkwNSwgNzQzNjIsIDAsIDAsIDE5NDY1MSwgMCwgMCwgMzM5NCwgMCwgMTIwNjY4LCAwLCAwLCAwLCA2NjIxOSwgMCwgCi0gICAgNDMyODQsIDAsIDc4MTcsIDE4NDEsIDExMDU1LCAxMjA1MzMsIDE5NDk3OSwgMTk0OTgyLCAxNjY5LCAxMDc3NiwgMTk0OTgxLCAKLSAgICA3NzAxLCAxOTQ5ODAsIDAsIDE5NDk5NSwgMTczMiwgNDAzMCwgMCwgMzk2MywgNjY2MTEsIDAsIDQxNzY4LCA2NDkxLCAwLCAKLSAgICA2NTMyNCwgOTE0LCA2NTMyMywgODA3MSwgMzUzOCwgMCwgMCwgMCwgMCwgNzQzNjcsIDc2MTQsIDAsIDExODE5LCAwLCAKLSAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDAsIDUzMDEsIDAsIDAsIDU3MzQsIDg5NjAsIDAsIDAsIAotICAgIDY1MzE3LCAwLCAwLCAwLCAwLCAxMjMwNCwgMCwgMCwgNjUzMTUsIDAsIDAsIDAsIDAsIDAsIDExOTYyMSwgMCwgNzQ1MzYsIAotICAgIDEyNDQ3LCA2NDQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgMCwgMTIwNTIwLCAwLCAKLSAgICAxOTQ4NzgsIDAsIDAsIDAsIDg2MjksIDAsIDQzMTY4LCA0MTg3MiwgMCwgNDQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ3MzAsIDAsIDY2NzE0LCAwLCAwLCAwLCA2NTU5NiwgMCwgMTE0MTYsIDQyODAsIDExOTAxOCwgODc2NSwgMTI3ODQsIAotICAgIDc3OTIsIDEzOTMsIDAsIDY3ODcxLCA3NDM4NiwgMCwgODIzMywgNDM1NzIsIDAsIDY2ODMsIDAsIDM0NDIsIDEyMTQ0LCAKLSAgICAyODQxLCAxMjU0MywgMCwgMTQ3MywgNDI4MjAsIDY0MzI5LCA5MTc3NzIsIDAsIDAsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIAotICAgIDAsIDQxMTA0LCAwLCA0MTA5OSwgMTA1NCwgMTE5MDY1LCAxMDQwLCA2NTQ1MCwgMCwgNDQzNCwgMTA2OSwgMCwgMCwgCi0gICAgNzQyMzEsIDkxNzc2NSwgMCwgMCwgMCwgOTY5MywgNDE5NDMsIDAsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDAsIDAsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgMCwgMCwgNzQ4MzAsIAotICAgIDAsIDEyNzQzLCAwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIDEyMjA3LCAxMTk2MTksIDEwOTg2LCAKLSAgICA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMCwgMCwgNDMwMjAsIDAsIDM5NTUsIDc0MjU0LCAwLCAwLCAKLSAgICA5MTc4NjEsIDAsIDEyMDczNSwgOTc3MCwgOTI0NiwgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIAotICAgIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCAxOTQ5MTIsIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NzQ3LCAxOTQ3MjAsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDc0MjA1LCAKLSAgICA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgMCwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgMCwgMTE5MDQzLCAwLCAwLCAKLSAgICA0MzEzNywgNjk0LCAwLCA5ODc2LCAwLCAxMTkxNjgsIDAsIDAsIDY0NTM3LCAwLCAyNzcsIDc0Mzg1LCA3MjI5LCA3NDQ1OSwgCi0gICAgMCwgMCwgNjQ2MzQsIDY0ODExLCA4NzU3LCAxMTkwODcsIDAsIDE1NzQsIDE5NDYzMywgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCi0gICAgMCwgMTMwMjcsIDQyODI0LCAxMjA1NzQsIDEwMzksIDk4MDEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgMCwgCi0gICAgNzQwMTUsIDAsIDQxODUzLCA0ODU4LCAwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIDgwNTEsIDAsIAotICAgIDExOTYwOSwgMCwgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIDAsIDczOTA2LCAwLCAKLSAgICAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIDE5NDkxOCwgMCwgMCwgMzUwNCwgCi0gICAgMTE5MTc4LCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIDEwMjI2LCA2NTE0MiwgMCwgMzU5NCwgNDI0MjQsIDAsIDQwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0MjIwLCAxMDcyNSwgMTA0MzMsIDAsIDY4Mzk1LCA0OTg3LCA2NDUxOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA5NzAsIDExNzMzLCAwLCAxMjA3OTIsIDAsIDE5OTQ0LCAwLCA5MDA5LCA4NTUxLCAwLCAxMTQ2OCwgNjQ2MzYsIAorICAgIDc1NzUsIDAsIDI3MjQsIDAsIDAsIDEyMzEzLCAxMTk5NDksIDUxNSwgMTE5OTQ3LCA0Mjc5MSwgNjM5ODcsIDc4Mjg2LCAKKyAgICAxMTk5NDMsIDExOTk0MCwgMTE5OTQxLCAxMTk5MzgsIDk3NzUsIDQwNDYsIDQ1ODksIDQ1MjEsIDY4NjI5LCA5MTQxLCAwLCAKKyAgICA3ODg1MCwgMjc0MSwgNjQzOTksIDYxOTcsIDEzNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxODQsIDg2MDYsIDMzMDMsIAorICAgIDQxMzcyLCAxMTc4NiwgOTQ3MywgNjYyMDMsIDY2MTc3LCAwLCAxMTU5MywgNDMwMDcsIDQ0NzgsIDY2MTc4LCAwLCAwLCAKKyAgICAyNzQ0LCAwLCA0NDc3LCAxMTg5NjQsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNjYxOTQsIDExOTk2MSwgNjYxOTgsIAorICAgIDQxODgwLCA2NjE4OCwgNjYxOTcsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIDczNzg4LCAKKyAgICA3Nzg4LCA0ODQ3LCAwLCAwLCAwLCAwLCAwLCAxNTgxLCA2NTM1LCA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCAKKyAgICA3ODE1OCwgMTk0OTM4LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgMCwgNjg2MjUsIDAsIDcyNjksIDAsIDU5NjQsIAorICAgIDEyOTA4LCAwLCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCAwLCA0NDMsIDAsIDQ5NDQsIDU0NjcsIAorICAgIDExOTYwMywgMCwgNjUxMzcsIDYwNDQsIDY1MzkyLCAwLCA0MjEzLCAwLCA0MTMwMywgMCwgMTk0OTMxLCAwLCA0MTMwNiwgCisgICAgNzM5ODQsIDI2OTgsIDEyNzUzMSwgMCwgMTIwNzIsIDMxOTMsIDAsIDQxMzA0LCA4MjQsIDAsIDEyMDkxLCA3ODg5MywgCisgICAgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgCisgICAgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCAxMTk4MjksIDExOTgzMiwgNDY3NywgMTI2ODgsIDMxMDIsIDAsIAorICAgIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCA3ODE3MCwgNzgxNjYsIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAKKyAgICAwLCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgMTI3MDI0LCAxODU1LCAwLCA2ODY2OSwgMCwgMTE5OTQyLCAxMjc1NTQsIAorICAgIDAsIDAsIDExOTY1MiwgMjc0NSwgMTE3OTcsIDAsIDAsIDY4NjQzLCA0NjU0LCAwLCAwLCA2ODYzOCwgNzM5OTMsIDEwNTI1LCAKKyAgICA0NjQ5LCA2NTIwOSwgMCwgMCwgNDY0OCwgNDMwODAsIDAsIDAsIDAsIDYyNDYsIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCAKKyAgICA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgMCwgNDMxODcsIDg2NjksIDAsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgCisgICAgMjcxNiwgMCwgMCwgMCwgMCwgNjgzNjksIDAsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAKKyAgICAwLCAwLCA0NjYyLCA3ODAzMywgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIAorICAgIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgCisgICAgNTgxNCwgNDY2MSwgNDI0MzQsIDAsIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgNzQ4NjQsIDc1NDcsIDQ4NjcsIDAsIAorICAgIDEwMDA4LCAxMDIyMiwgMzA1NCwgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDc4ODg3LCAxMjg4MCwgNjUzMDcsIDQ2MTcsIDc4ODgzLCAwLCA0MTczMiwgCisgICAgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgMCwgNTk1OCwgMCwgMCwgNDIxNSwgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCAKKyAgICAwLCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgNTM2NiwgMTIyMDEsIDUzNzIsIDAsIDAsIDAsIDc3MjAsIDczOTAsIAorICAgIDI2OTYsIDAsIDAsIDQ2MzgsIDAsIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxOTQ5NjgsIAorICAgIDUzNzYsIDE4MzUsIDUzMzUsIDE5NDk2NiwgMCwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDAsIDUzODcsIDUzMzMsIAorICAgIDAsIDAsIDQyMDk0LCA1MzMxLCA0NjM0LCAxMTkyOCwgMCwgNTMzOCwgNDYzNywgMCwgNTk3MSwgNDI0MTQsIDAsIDEyNjgsIAorICAgIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgNDc1OCwgCisgICAgMCwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgNzQzODQsIDAsIAorICAgIDY4Mzc3LCA2MjQ4LCAwLCAwLCAwLCA0MjMxOCwgMCwgNTIyOSwgNDc1NywgMCwgMCwgMjcyOCwgNDc1MiwgNjQ1NjMsIAorICAgIDY1MjM1LCA1MjM0LCAwLCAwLCAwLCAxMDcxMywgMCwgMCwgMjYyMiwgNzQ2MCwgMCwgMCwgMCwgODk1NCwgNzQ3NjAsIAorICAgIDY1MTg5LCAyNjMyLCAwLCAxMDEwOCwgMTAxMSwgNTU3NCwgMTg1MywgMjcwOSwgNjUxMzksIDU1NzcsIDAsIDAsIDExODg3MSwgCisgICAgNjg2NDEsIDg5NjUsIDc2MzUsIDQyMTc3LCA1MzE2LCAwLCA1MzE0LCA2NDUxLCA1NTcyLCAwLCA1MzEyLCAwLCA1NTI1LCAKKyAgICA1MzMwLCA1MzE5LCAwLCAwLCAxOTQ5MDcsIDQ0MDAzLCAwLCAwLCAwLCAxMjA0OTgsIDAsIDE5NTAwOSwgMCwgNzQwMjIsIDAsIAorICAgIDY0NjA5LCAwLCAxMjA2MzQsIDAsIDU3MjEsIDAsIDU1MTksIDg2MzIsIDY2NDY1LCAxMTI2NywgNzM5NjEsIDAsIDU3MjAsIAorICAgIDAsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDAsIDUyODcsIAorICAgIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDAsIDAsIAorICAgIDAsIDQ2MDgsIDY0MjYwLCA0MTEyNCwgNTE5MCwgNjc2MjgsIDAsIDY4MTQ1LCA3MDg2LCAwLCAxMTkyNDMsIDY3NjIwLCAwLCAKKyAgICAyNzM0LCAxMTA3NCwgMCwgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNjUyOTMsIDAsIDE3ODIsIAorICAgIDY3NjIyLCA2ODExNCwgMTE5OTM5LCAwLCA2ODE4MCwgNTUwMSwgMTE5OTUyLCA0MjUwOCwgNzQ0MiwgNDM2NjUsIDM1OSwgCisgICAgNDEyNTMsIDY4MzkyLCA2MjM5LCAxMTk5NTYsIDQxMjU2LCAwLCA2ODEzNCwgMCwgNzQyMDksIDAsIDkzNDYsIDExODkwNCwgCisgICAgNDEyNTQsIDAsIDQzMjkxLCAzNzY3LCA1NzM3LCAwLCA0ODY1LCAwLCA1NzQwLCA5MTc5OTcsIDU3MzYsIDQzNjgsIDAsIAorICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDAsIDQ4NjksIDEyMDU2MywgMCwgNDIyMywgMCwgCisgICAgNjY1MCwgMCwgMCwgMCwgMCwgNDg3MCwgMCwgNjg2NjEsIDY3MTYsIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAwLCAKKyAgICAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDAsIDYyNDUsIDY4NjUyLCAyNzMyLCA0MjczNCwgNzQ1LCAwLCAKKyAgICAxOTUwOTcsIDAsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCAwLCAKKyAgICA0Nzc4LCAwLCAxMDg2MywgMCwgNDc4MSwgMCwgNjQ0MDcsIDAsIDAsIDg1NzcsIDAsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIAorICAgIDQ3ODIsIDAsIDAsIDEyMDc1NywgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgMCwgMTE0OTIsIAorICAgIDg3MDAsIDAsIDEzMTc2LCA2ODM2MywgMTA0MjYsIDAsIDkxNzU5OSwgMTAzNjIsIDAsIDE3MTUsIDQ4NDksIDgyNDIsIAorICAgIDk1NjEsIDczOTIyLCA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCAKKyAgICA0ODUzLCAxMTg5OTUsIDQ4NTQsIDAsIDUxNjQsIDAsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAKKyAgICAyNzA4LCAwLCAxMjQ0NSwgMzc4NSwgMjM0LCAzMTk5LCAwLCA0MTI2OCwgNDg0OCwgMjUzMCwgOTE3OTA5LCAyMDY4LCAKKyAgICAxOTY0LCAwLCA3Mzc2MiwgMTA0NTgsIDAsIDg1NzYsIDc4NTQzLCAwLCAyNzA0LCA0Nzk0LCAwLCA2ODIxMSwgODMyMiwgCisgICAgNDc5NywgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCAwLCAzMDMsIDAsIDAsIDAsIDI0MzcsIAorICAgIDAsIDQyMjEsIDQ4NDQsIDExODg2OSwgMCwgMCwgMCwgMCwgMCwgNDMyOTIsIDAsIDI0NDEsIDEwNzM5LCA2NTA5MCwgMCwgCisgICAgMTE5MzI3LCAwLCAyNDUxLCAyNzE0LCAxMTkzMjYsIDAsIDQzMzc5LCA0OTM3LCA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgCisgICAgNDMwODksIDExNzIyLCA5MjQ4LCAwLCA0Mjg3OSwgMTE3MjUsIDAsIDAsIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCAKKyAgICA2NDkzNywgMTE5MjMzLCA5MTQwLCAxNDA4LCA1MjYxLCA0NjA3LCAwLCAxODEsIDAsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIAorICAgIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgMCwgMCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAKKyAgICAxMjk3OSwgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIAorICAgIDAsIDEyNzU4LCAzODY1LCAwLCAwLCAxMDUwMCwgMCwgMCwgNzgwMjgsIDAsIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCAKKyAgICA3NTIxLCAwLCA0ODcyLCA1NDYzLCAwLCAzMTI1LCA5NTY3LCAwLCA0ODc4LCA1NDU5LCA0NjA0LCAwLCA5NTU3LCA1NDY1LCAKKyAgICA2ODYxNywgMCwgMTE0OTQsIDAsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCAwLCA3ODcxNCwgNjQxOTEsIAorICAgIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDc4ODM2LCAwLCA5MTc4MzUsIDc4ODIwLCA5MTc4MzQsIDAsIDc4ODA1LCAKKyAgICA0MTAzMSwgNzg4MDEsIDExOTYwLCA2NzQ1LCAzMDgyLCAwLCA3ODUzOSwgNzM5MTksIDEwNTczLCA0MTc0NCwgNzA3OSwgCisgICAgNTg1NiwgMTI3MDQzLCA1MTYzLCA3ODgwOSwgMCwgMTgxNywgNjY3MjQsIDc4NTM4LCAwLCAxMDU2NCwgNzc2MywgMTMwNzcsIAorICAgIDQxODEzLCA0NDAwLCA0MTc0NSwgNjQyMDcsIDEwMjc1LCA4OTI1LCAxMDM3MSwgMTAzMDcsIDQxODE0LCA0MjQ4LCAwLCAwLCAKKyAgICA0NTQxLCA2Mjk5LCA2NDIwNCwgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAwLCA0MjE1NiwgNzg2ODgsIDAsIAorICAgIDY0MTkzLCA2NDE5MiwgNzgwMDAsIDk5NDMsIDY0MTk3LCA2NDE5NiwgNjQxOTUsIDY0MTk0LCAxMzI4MiwgNjQxNzUsIAorICAgIDY0MTc0LCA2NDE3MywgNzgxODksIDg0NiwgNzgxODYsIDk5NjUsIDAsIDAsIDAsIDAsIDI1NDMsIDEyMTYzLCAzMTA4LCAKKyAgICA5NzQ1LCA2NDE2NywgNjQxNjYsIDY0MTY1LCA2NDE2NCwgMjExMCwgMCwgNjQxNjksIDY0MTY4LCA2NDk0OSwgMTA5NzIsIAorICAgIDEwMjUxLCAxMDI0NywgNDI3NjgsIDcxNSwgNjQxNjEsIDQzMjk5LCA5NDUzLCA1MzQ4LCAxMDk0MywgMTIwMzc4LCAwLCAKKyAgICAxMTM1MiwgNTUwLCA5OTEwLCAwLCAwLCA2NjU3OSwgMTE1NTEsIDAsIDAsIDk1MDQsIDcxODcsIDAsIDEwMzczLCAwLCAKKyAgICAxMjA3OTEsIDEwMjYxLCAxMDI1MywgNjQwNCwgMTAyNzcsIDc4MTgzLCAxMTk4NCwgMTU1MiwgNjUyMjIsIDY5OTgsIAorICAgIDc4MTgwLCAwLCAzMTI4LCA0Nzg5LCA1MDY3LCA1MDY2LCAxMTg4NDksIDQ3ODQsIDAsIDg4MjcsIDExNDYsIDUwNjUsIAorICAgIDc4MTk2LCA3ODE5MiwgNjgxMzYsIDc4MTkwLCA0MzQxMiwgNTA2NCwgMjQzMSwgMCwgOTQ1MCwgMTgwOSwgMCwgNzgyMDAsIAorICAgIDc4MjAxLCA1MDYyLCAxMjY0LCA2NDgxNywgMTMyNTQsIDExNjk3LCAwLCA5Nzg1LCA2NDcxNiwgMCwgMzkzMywgNzQ1NTksIAorICAgIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCAwLCA0MjEzMCwgMCwgNTE1MSwgCisgICAgOTE3ODI5LCA5MTc4MjMsIDAsIDAsIDAsIDc2MjAsIDM4MDAsIDY1MTIyLCAwLCAwLCA4MzU1LCA3ODU0LCAwLCA5NTQsIAorICAgIDY0OTI3LCA0MTg1LCA0MTA0NSwgMCwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgMTA3MTEsIDQ1OTMsIDAsIDEyMDU4NCwgMCwgCisgICAgNjQ3NzQsIDgwNTMsIDEwNTMyLCA2NjcyNywgMCwgMCwgMCwgNjQ3NTksIDYzODEsIDUxNjYsIDk4ODgsIDAsIDUxNDgsIAorICAgIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDY0MTQwLCA3ODIwNCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgCisgICAgNjQxMzUsIDk5ODYsIDAsIDc3ODc2LCA2MzYsIDExNjk4LCAwLCAwLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCAKKyAgICA4MzIwLCA3ODY0MCwgODg2MywgMCwgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDAsIDk5MDgsIDAsIDAsIAorICAgIDAsIDM5MzcsIDEyMzEyLCAwLCAwLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCAxMTk5NjMsIDc0NTMyLCAwLCA2MjQ0LCAKKyAgICAwLCAxOTQ1ODAsIDM5MzUsIDEyMDY2NSwgMCwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIDUzOTcsIDAsIAorICAgIDEyMDQ2LCAxMjU5OSwgMCwgMCwgNTM5NSwgMCwgNTM5MywgMzU0LCA2ODYxNSwgMTE5OTQ4LCA3ODUwMywgMCwgMCwgCisgICAgNDIwMzksIDAsIDAsIDY0MTQyLCA2MjYsIDAsIDU4OTUsIDAsIDAsIDU3ODAsIDAsIDAsIDAsIDAsIDAsIDQzMjk3LCAwLCAKKyAgICA0MzExLCA0NjQ0LCA4ODE4LCAwLCAwLCAwLCA3MzgxOCwgMzkxOCwgNjY0NTIsIDM3OTcsIDE2NDQsIDExOTk0NCwgOTY1OCwgCisgICAgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgCisgICAgMjQ2NiwgMCwgNjc2NjksIDAsIDYyNDksIDQyMTE3LCAwLCAwLCAwLCAwLCA3NDA0NiwgMTIwNTgzLCA0OTExLCA5ODgsIAorICAgIDkxNzgwNywgMCwgMCwgNDMwNjEsIDcwNTQsIDY0MTQ3LCAwLCA2NDkyMCwgNjgxOTUsIDY2OTgsIDExODkzMywgMTIwMzQ5LCAKKyAgICAwLCAwLCAxMTk4MSwgMTIyMDIsIDAsIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIAorICAgIDAsIDAsIDQxNjksIDAsIDQxODU5LCA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAKKyAgICAxMDE3OCwgMTAzMjQsIDQyMTA2LCA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIAorICAgIDQ3NDIsIDEyMDU2NCwgOTE3ODY2LCA3MzczNiwgMCwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCAwLCAwLCAwLCAKKyAgICA1MzAwLCA0NzQxLCA0MjEwOCwgMCwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDAsIDc4NDkxLCA0MzI4OCwgMCwgCisgICAgNjY2MjAsIDAsIDE5NDkyMCwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDAsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIAorICAgIDM5MjgsIDkxNzg3MCwgNDMzNzgsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMCwgMCwgNDg0MSwgMCwgNDE3MSwgCisgICAgMTIwMDgsIDYyNTEsIDM5MjMsIDE0OTAsIDAsIDExOTU5MSwgMCwgNDA5NzIsIDUyNDUsIDAsIDEwMTE0LCA0MjAwMSwgCisgICAgNDE4ODgsIDQ4NDUsIDgzMzIsIDQwOTc0LCA2NDM0NywgNDg0MCwgOTA3NywgNzgzNDYsIDE3NDcsIDkxNzg0OSwgNDgyNSwgCisgICAgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDAsIDAsIDAsIDY4NjI4LCAwLCA5ODUwLCAxMTg5MzcsIDM2NywgMTQ3MiwgCisgICAgOTE3ODU5LCA2Njg3LCAxMjc0LCAwLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgMTEwMjMsIAorICAgIDExOTU1OSwgNDgzMCwgOTEzNCwgNzg2NjYsIDY0MTI2LCA0MzAxMSwgMCwgMCwgNjQxMDEsIDAsIDAsIDQ4MjQsIDEwNjE0LCAKKyAgICAxMjAzOTAsIDAsIDE4ODgsIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgNjA1MiwgNjA2NCwgNTQsIAorICAgIDQzMDA5LCAxMjIxNCwgMCwgNjIxMSwgMCwgMzU4LCA0MTk5NywgNDE4MzMsIDExNDQyLCAxMDc1OCwgNjU3NzQsIDAsIAorICAgIDEyMDM4NCwgNjQxMTUsIDEyMDM4NSwgMCwgMCwgMCwgMTE5MDUzLCAwLCAxMjc2NSwgNjQxMTgsIDEyNjk5OCwgMTI5NjIsIAorICAgIDAsIDAsIDQwMTcsIDEyODI3LCA1MjQxLCAxMjAzOTIsIDAsIDQxMTE4LCAzOTI0LCAwLCAxMTM2NiwgOTE3ODQzLCAwLCAwLCAKKyAgICA5MTc4NDYsIDQxMTE2LCA5MTc4NDQsIDkxNzU2NCwgMCwgMTEzNjMsIDEyMDU3LCAxMTkxNywgMTU2NywgNzQwMDAsIDQ3MjEsIAorICAgIDAsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAwLCAxMjc0MCwgMCwgNDcyMiwgNjgxNiwgMCwgMTI3NTksIAorICAgIDQ3MjUsIDAsIDQ3MjYsIDAsIDAsIDAsIDkxNzkwNCwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIAorICAgIDQ3NiwgMCwgMCwgMCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDY0MjE1LCA2NDIxNCwgMTY1NiwgCisgICAgNDE4MzEsIDAsIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDAsIDg1NTIsIDY0MTEzLCAKKyAgICA0MTg0NSwgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCA5MTc5MTEsIDAsIAorICAgIDAsIDc5MzUsIDY3NTg2LCAwLCAxMTE0LCAwLCA2NzU4NSwgNzg2NzUsIDEyMDA1MywgMTIwMDUwLCAxMjAwNTEsIDM5MzgsIAorICAgIDEyMDA1NywgNjU0MTcsIDY0NzE3LCAxMjAwNjAsIDEyMDA2MSwgNjU0MTUsIDEyMDA1OSwgNjI5MiwgNjUzMDMsIDc5NTUsIAorICAgIDY0NTIsIDQ3MTMsIDkxNzg4NywgNjYyNDksIDkxNzg4NSwgOTE3ODkwLCA5MTc4OTEsIDY1MTUyLCA3MTksIDEyMDA0NCwgCisgICAgNzg2MjMsIDEyMDA0MiwgNjcxMywgNDUzMiwgNjU0MTIsIDY5ODIyLCAxMDg2OCwgNDcxNywgMjM0OSwgNTkwMiwgNjY0NTAsIAorICAgIDQ3MTIsIDkxNzkwMiwgOTE3ODk5LCA5MTc5MDAsIDY1NDE2LCA4MTU1LCA0NzE4LCAzOTQyLCA0NzE0LCA5NjI1LCAwLCAKKyAgICA2MzgzLCAwLCAxMjAwNiwgMCwgMCwgMCwgMCwgMCwgNjU0MTQsIDY0NTQsIDEyMjksIDAsIDY2NDM3LCA2NjAyNSwgNzg2OTksIAorICAgIDAsIDQyNTAwLCAxMjA1MDgsIDQ4MDksIDk2MjMsIDkxNzg3NCwgNzg2OTQsIDkxNzg4MCwgOTE3ODc3LCA5MTc4NzgsIAorICAgIDY1NDA1LCA2ODE1OSwgOTE3ODgxLCA5MTc4ODIsIDUzNjUsIDQ1NDUsIDg5MDEsIDkxNzU2NiwgMTE5NTU1LCA0ODEzLCAwLCAKKyAgICAwLCA1OTI1LCA0ODA4LCA2NDMzMCwgMCwgNjU0NzUsIDExODk0MCwgMCwgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIAorICAgIDEwNTQzLCAwLCAzNTIyLCAwLCA0MTQsIDY1NDA0LCAwLCAwLCA2NDU2LCA3MzgyMCwgMCwgNjY5MSwgNDIxOTMsIDAsIDAsIAorICAgIDAsIDc0NDk1LCAwLCAwLCAwLCAxMTg4MjAsIDk3NTEsIDY1NDA3LCAwLCAxMTc3MCwgMzkxOSwgMCwgMCwgNjUwNjEsIDAsIAorICAgIDAsIDAsIDEyMjM1LCAwLCAwLCAxOTUwMjUsIDY0MDkyLCAwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDAsIDEwMTYyLCAxMDMxMCwgCisgICAgMCwgODQ1NCwgMCwgNDIwMzgsIDM4NywgNDEzNjMsIDEyNzM3LCAwLCA0NzgwLCA0MzM2OCwgMCwgNjQzMTAsIDY0NjIxLCAKKyAgICA2NzMyLCAwLCAwLCAwLCAwLCAwLCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDAsIDAsIDAsIDExOTIwMiwgCisgICAgMTE5MjAzLCAxMjUyNiwgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMCwgNDUyOSwgMTE5MjAwLCAxMTkyMDEsIAorICAgIDExOTE5OCwgMTE5MTk5LCAwLCAwLCAwLCAxMzE1MCwgNjQ0OTIsIDAsIDAsIDAsIDEyOTAyLCAwLCA0Mjg5MSwgNjYzMjcsIAorICAgIDc0Mjk4LCAwLCAxMDc5OSwgMCwgMjU4NywgNjYzNzIsIDAsIDQxOTMsIDEyMDMzNCwgNDI0MSwgMCwgNzk5OCwgMCwgMCwgMCwgCisgICAgMCwgMjMxNiwgMTE4ODIxLCAwLCAwLCAwLCA2NDI5NywgNzQ3OTksIDAsIDc0MTQwLCAwLCA1MzczLCAwLCAwLCAzNzYyLCAKKyAgICAxMDAxNSwgMCwgMTE5MjMyLCAwLCA0MTU5MCwgMCwgMCwgMzc4MCwgNzQ4NSwgNTc3OSwgMCwgNDIwMzcsIDAsIDM5MDYsIAorICAgIDEyMzQ5LCAwLCA4MzI2LCAwLCA2NTQ5OCwgMzc2MywgNjk4MywgNTYxOCwgMCwgMzc3OSwgMCwgNDM2MTMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI4MCwgNzQ1NTgsIDAsIDY4MTM4LCAxMzA3MiwgMTg5NCwgMCwgMCwgNjU0NzgsIDQzMzEwLCA3MjMxLCAwLCAKKyAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDAsIDExOTIzNywgMCwgMCwgNDQ3MCwgCisgICAgMTE5NjEzLCAwLCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIDUzNjcsIDg3NTYsIDAsIDAsIDUzNzcsIDEyMDU4NSwgCisgICAgNjgxNDMsIDE2ODgsIDc4MjQ1LCAwLCAwLCAwLCAwLCAwLCA0NDAyMCwgNjgwOCwgNDEzMTksIDEzMDAsIDEwNjUwLCAKKyAgICA0MTY5MiwgNjQ1MDUsIDQ2NjgsIDAsIDExOTYyNCwgMTQ2NSwgMTA4NTAsIDM5NDMsIDAsIDQxMjA1LCA0MTMxNSwgMCwgMCwgCisgICAgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIDQxMjA0LCAwLCA0MTIwOSwgMCwgMCwgNDM2MDcsIDAsIAorICAgIDAsIDU0MjAsIDM4OTcsIDAsIDAsIDc0NDE3LCA0MDE4LCAwLCA2ODEyNywgMCwgMCwgMCwgMCwgMTI3NTI2LCAyNTYxLCAKKyAgICA2ODYyMSwgMzU0MiwgNDE5MTUsIDEyMDc2LCA3OTUxLCA2ODE1MiwgMTE4ODU3LCA1MzAzLCA2Mjc2LCAxNzA2LCAwLCAKKyAgICA3ODc1MSwgNzQxMTYsIDAsIDY1MTUwLCA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAKKyAgICAxMDUwNiwgMCwgMCwgMTA3NTMsIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCAwLCA3NzkyMiwgMCwgMTI5MDksIAorICAgIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAwLCAwLCAwLCAyMDIwLCAwLCA0MDIyLCAwLCAwLCA3NzkyMywgMCwgNDE2OTEsIDAsIAorICAgIDAsIDc0MzI5LCAwLCA2NDYyMiwgOTA3MCwgMCwgNjg0MTEsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgNzQ0NDAsIDAsIAorICAgIDcwMDAsIDM5MDQsIDAsIDAsIDAsIDAsIDEyNzAxMiwgMTMxMjMsIDEwODQ2LCAzNDUwLCAwLCA3Mzk3LCAxMTg4MDcsIDAsIAorICAgIDQyNzc4LCAxMDAwMCwgNDEwODgsIDQ0OSwgMCwgMzc3NywgNjg0NTgsIDAsIDk2MzYsIDAsIDEwNzM4LCAwLCA5MzY3LCAKKyAgICA1OTMsIDQxMDg1LCAzOTk5LCA2NTIyNiwgNDE3MTMsIDEyNzY0LCAwLCA2NDQwOSwgMzU5NiwgMCwgMCwgOTc2MywgCisgICAgMTIwMjgwLCAxMjAyODMsIDEyMzQ3LCAxMjQsIDEyOTgxLCA0MTEyNywgMjA5MiwgMCwgMCwgMCwgMCwgMTA4MjAsIDQzOTg3LCAKKyAgICAwLCAwLCAxNzY5LCA0MTcxNSwgMjQ2MywgNzg0ODksIDAsIDEyNzcwLCAwLCAxNTM4LCAwLCA0MzEyNCwgMCwgMTk1MDU4LCAKKyAgICA3Nzk1LCAxMjAzMDAsIDAsIDQ4MjgsIDEyNTgsIDAsIDIwMDYsIDAsIDAsIDk0OTgsIDEyNzAzMiwgMTI3MDMzLCAxMjAyODksIAorICAgIDEyMDI4OCwgMzkzOSwgMTIwMjkwLCA4ODQ2LCA4OTQzLCAxMjAyODcsIDEyMDI4NiwgMjY1MCwgNDQ5MSwgMTk2MSwgCisgICAgNDI2MDIsIDExNTI1LCAxMjAyOTIsIDE5NTksIDEyMDI5NCwgNTUyMjgsIDExNzc0LCA0MTAxNiwgMCwgNjg2NzUsIDAsIAorICAgIDE1MTEsIDkzMjQsIDc4MjExLCAxMDUxOSwgNjYzMzEsIDM0NTQsIDE5OTMwLCAwLCA0MTAxOSwgMCwgMCwgNjUyOTIsIAorICAgIDY4MjIsIDEyODYyLCAwLCAwLCA0MjE0MywgNDE4MjgsIDc4MjA3LCA2NTUzMSwgNzgyMDgsIDExODg3OSwgNTUyMjMsIDAsIAorICAgIDAsIDQxODI2LCA4ODY1LCA2NDAyLCAwLCAxMzI3OSwgNzkxNywgMTIwMzQwLCAwLCA3NzMzLCAwLCA0OTk4LCAwLCAwLCAKKyAgICA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgMCwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIDAsIDc0Nzg4LCAyMDE0LCAwLCAwLCAKKyAgICA5NzY1LCAwLCAwLCAwLCAxOTUwNTksIDc4MzU3LCA2NTI4MSwgMCwgMTA5NDksIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIAorICAgIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCA0MzQ0NSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgCisgICAgMTI2NTYsIDAsIDExOTM1MywgMCwgMTY2NSwgMCwgNDgzMywgMCwgMTE5MzUxLCAwLCAwLCAxODksIDEyNjExLCAwLCAwLCAKKyAgICAyODU5LCA0ODM4LCAwLCA0ODM0LCA2NTA3OCwgMCwgMCwgNDgzNywgMCwgNzcwLCAwLCA4MTEsIDAsIDQxMDQyLCA5MTc1NTEsIAorICAgIDQxMzE4LCA2NDQyNywgMCwgMCwgNzg4NDgsIDM4OTUsIDAsIDc0MzQxLCAzOTc2LCAwLCA0Mjg1OSwgMTAxOTMsIDMxMTYsIAorICAgIDc3NDcsIDAsIDAsIDAsIDAsIDAsIDQzNjg2LCA3ODg0NiwgNDE4NzcsIDAsIDI4NzEsIDY0NjE0LCAwLCA5OTksIDAsIAorICAgIDYzNDUsIDQxODc2LCAyNjYzLCAyMDE3LCAwLCAwLCAxMTA0MCwgMTAxNTAsIDAsIDY0MzA4LCAxNTIyLCA1OTcsIDQ3NzUsIAorICAgIDEyNTU1LCAxMjU3MSwgMTI1NTAsIDEyNTgzLCAxMjU2MCwgMjAxOSwgMTI1NTYsIDEyNTg0LCAzMDkyLCAwLCAxMjU2MiwgCisgICAgNDc4MywgMTI1NjYsIDEyNTY5LCAxMjU1NCwgMCwgMTA4MTIsIDc4ODUxLCAwLCAwLCAzMDc4LCAxNDAyLCAwLCAwLCAwLCAwLCAKKyAgICAxMTkyNDgsIDM5NCwgMzA4OCwgMCwgMCwgMCwgMzk5MSwgNjQzOTEsIDAsIDAsIDQyNCwgNjYzMjgsIDE5OTksIDAsIAorICAgIDczOTE0LCAwLCAwLCAwLCAwLCA0MjIzMSwgODI0NiwgMCwgMCwgMCwgNDE4NDAsIDAsIDIzNzcsIDEyOTgsIDY0MDExLCAKKyAgICAxMjU3MiwgMTEzMTgsIDEyNTU3LCAxMjU1OSwgMTI1NzAsIDg0ODgsIDEwMDMsIDIzNzMsIDk0NDYsIDc0ODEsIDk0NDgsIAorICAgIDQ4LCAwLCA5NDgwLCA0ODEsIDAsIDk0MzgsIDk0MzksIDk0NDAsIDk0NDEsIDg0NjUsIDk0NDMsIDk0NDQsIDk0NDUsIAorICAgIDk0MzAsIDk0MzEsIDk0MzIsIDk0MzMsIDk0MzQsIDk0MzUsIDM5ODQsIDk0MzcsIDAsIDAsIDk0MjQsIDk0MjUsIDk0MjYsIAorICAgIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAwLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAwLCA5MTcyLCAwLCAxOTk2NSwgCisgICAgMCwgNTk1NSwgNjc2NjYsIDExMDgsIDAsIDc0NzczLCAwLCAwLCA2NDc4MiwgMzkyNiwgMCwgNjUyMTAsIDg3OTgsIDAsIDAsIAorICAgIDEzOTIsIDAsIDAsIDkxNzU1NywgMTA2MDYsIDgwNjUsIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgMCwgCisgICAgNDAxOSwgMCwgMCwgNDMyODAsIDgyMTksIDY4NDAyLCAxODEyLCAwLCAwLCAwLCAwLCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgCisgICAgNjA1NCwgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDAsIDAsIDY4Njc4LCAwLCAwLCAKKyAgICAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDAsIDQyMzM2LCAzOTIxLCAwLCAxMTc3NSwgNjQ3NjAsIDExNzY2LCAKKyAgICAxMDM4LCA0MjMwMywgOTgyMywgMTI3Mjc4LCA2OTIzNiwgNDAwOCwgNjQwMDQsIDg3NzMsIDEwNzMzLCAzNiwgMCwgNTE1MywgCisgICAgNDE4MDUsIDAsIDczNzM1LCA3NjMsIDQxODA4LCA2NDkxMCwgMCwgMjAwOSwgMCwgMCwgMCwgOTY0MCwgMTE5OTUxLCAwLCAKKyAgICAxMjA2OTUsIDg2MjEsIDAsIDEyODUyLCAzMDMxLCAwLCA2NDM2MSwgMCwgMTgyLCAxOTQ3MTgsIDAsIDAsIDExOTk1MCwgMCwgCisgICAgOTA1OCwgMzY2LCAwLCA5ODkyLCA1OTY5LCAxMTc1NCwgMTA4NDgsIDQ1NzAsIDY1MzAxLCA0NDAxMywgNDI1NSwgMCwgCisgICAgMTAxMDIsIDQxMTg5LCA0MDAzLCA0MTAyNiwgNjgxMDksIDEzMjkzLCA0MTE5MiwgMCwgMCwgNDIyNTEsIDAsIDQyNTM0LCAKKyAgICA2NTE3OSwgMTEyODcsIDYxMjgsIDAsIDExMDM0LCAxMDkyMywgNjQ0MjMsIDAsIDY1NTA2LCAwLCAwLCA3NDA4MywgMCwgCisgICAgOTkzMiwgMCwgMCwgMTE5OTU1LCAwLCA5ODE3LCAwLCAxMjAxNDAsIDAsIDEyMTE3LCA2NjU4NiwgNDE4MywgMTA1NDAsIAorICAgIDY2MjUwLCA5MDYzLCAxMjcwNDUsIDAsIDExOTk1NCwgMCwgMTI4OTcsIDM3OTIsIDIwMTEsIDAsIDYwNjUsIDQzMTYwLCAwLCAKKyAgICAxOTQ3MTUsIDg2OTIsIDQxMTg2LCA0MTgxNiwgNDEwMjMsIDQxODE4LCA0MTE4NywgMTE2NTksIDc5MjIsIDEyNjE0LCAKKyAgICAyMDA1LCA4NTIzLCA3ODAwMiwgMCwgNzUxMywgMTg2MywgNDcxMCwgMCwgNTk1NiwgNzYyMSwgNzgwMDYsIDEyNzExNiwgCisgICAgNDcwNSwgNzE2LCA3ODAwNCwgMCwgNDcwNCwgMTIwMDQwLCAxMjAyNzAsIDQyMjQxLCAxNjEsIDQzOTc3LCA3NDU0NiwgCisgICAgNjYyMTQsIDQ3MDYsIDAsIDAsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMCwgNDMyOTMsIDAsIDAsIDExOTE2NCwgMTIwMzI4LCAwLCAKKyAgICAwLCAxNzAwLCAxMTkyMjMsIDAsIDAsIDAsIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgMCwgODUwNiwgMCwgMCwgMTI2OTk2LCAKKyAgICAxMDA1LCA5MzcsIDc4MjE2LCA0NzM0LCAyODcwLCAwLCA3ODIxOCwgMCwgNzQ2MywgNDcyOSwgMCwgMjM1LCAxMzg0LCAKKyAgICA0NzI4LCAwLCAxMjA0MjAsIDEyMDY0NCwgMTIwNDIxLCA4MTA5LCA0MzEwNSwgMCwgNDczMCwgNDQ3LCAxMzE4NiwgMTUxMywgCisgICAgNDczMywgMTIwNDE1LCAwLCAwLCA0MjUyNywgMTI5MTEsIDQzNDI3LCAxMzgzLCA4NTY1LCAyNDY5LCAxMjAwMjQsIDY2OTAsIAorICAgIDYxNTYsIDY4MTE3LCA0MzQzOSwgNzk5MywgNDI4OCwgMTIwNDE2LCAyNjc0LCAxMzIzOCwgMTE5MjIsIDAsIDEyMDMzMCwgCisgICAgMzUxMCwgMTMyMzQsIDAsIDEyMDQwNywgNTYwNSwgNDIwOTUsIDExMzY0LCAwLCAxMzgwLCA2NTYxNywgMTIwMjUzLCAKKyAgICAxMjAyNjEsIDEzMTk2LCAxMzE5NywgMTIwMzA5LCAxMjA2ODIsIDk0OTUsIDExOTM0NiwgMCwgNTk1OSwgMCwgNzM5NzYsIAorICAgIDEyMDMwNSwgNDMzNzEsIDY5NDEsIDExOTM0OSwgMTMyMDUsIDEzMjExLCA1ODAxLCAxMjc2OSwgNjU5MDUsIDQxNjk3LCAKKyAgICAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDAsIDE5OTU3LCAwLCAyMDIxLCAxMTkzMzIsIDAsIDAsIAorICAgIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIDY0MzQxLCAxMTkzMzksIDk4MTQsIDQzNDU3LCA1ODI3LCAzMzE0LCAKKyAgICA3Nzg3LCA3ODIzNCwgNjU0OTQsIDY4MTUzLCAwLCAwLCAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDAsIDAsIDAsIDY2MzE2LCAKKyAgICA2NTQ2NywgNTc3MSwgNDEyOTgsIDAsIDk3NDIsIDUyMSwgMCwgMTA4MDAsIDAsIDg0MDQsIDE5NDYyNSwgNDgzLCA3MDk2LCAKKyAgICA3MDg5LCA2NjMyMywgOTI4LCAwLCAwLCAxMTkwMTgsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDAsIDY1NzgyLCAKKyAgICA5ODQxLCA4ODQzLCAxMjE0NSwgMCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCAwLCA5NTczLCAwLCA2NTI5MCwgCisgICAgODg0OSwgMCwgNjU4NTUsIDY1MTEyLCAxNzk2LCAxMjA1MDUsIDAsIDc4NTU1LCA4MTY0LCA0MTMwMSwgMzUwMiwgMCwgCisgICAgNzM4OCwgMTA2MjEsIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAKKyAgICAxMDM1NCwgMTA0MTgsIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgCisgICAgMTM5MCwgMCwgMCwgNDIxLCA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAwLCA3NTk1LCA0MjU4OCwgNzYwMCwgMTIwMTIxLCAKKyAgICA2NjAzNSwgMCwgMCwgNjU4NTEsIDQyNjA3LCAwLCAwLCAzMTY4LCAwLCA0MjEzNCwgMCwgMjM3MCwgMjg0NiwgMCwgMCwgMCwgCisgICAgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCAxMTkxMzcsIDM3NDAsIDAsIDYyOTAsIDY1Mzc0LCAxMjA0NTEsIDY1OTIzLCAzOTQ0LCAKKyAgICA2NjYyOCwgMTIwNDM0LCAwLCA2MTM1LCAzMTE4LCA3NDI2NSwgMTE5MDkzLCAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIAorICAgIDY0NzM5LCA3OTQzLCAwLCAwLCAxMDYxOCwgMjU4NCwgMCwgMCwgMCwgOTk5OCwgMCwgMCwgMCwgMCwgMCwgNjIwNCwgMCwgMCwgCisgICAgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDc0ODA5LCAxMjAxMzAsIDQyNjcsIDAsIDQyMjA2LCAwLCAwLCAxOTUwNDYsIAorICAgIDY1NzAwLCA2NjU2MiwgMCwgNjQ2NDUsIDAsIDAsIDAsIDEyNTg2LCAwLCA5MjQyLCAwLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgCisgICAgMzEyMiwgMCwgNzc5MywgNzgyNzUsIDkzMjgsIDAsIDAsIDEyNjA0LCAwLCA2NjE1LCA2NzY1MCwgMCwgMzk4NiwgNDQwMjUsIAorICAgIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCAwLCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIDExNDk4LCAwLCAwLCAKKyAgICA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgMCwgMCwgMCwgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIAorICAgIDcwMjAsIDEyMDM1MywgMzc2NSwgMCwgMCwgMTYwNiwgMTIwMzQ4LCAxMjAzNTEsIDMwOTMsIDY4NDM2LCAwLCAwLCAKKyAgICAxMjA2NDksIDAsIDAsIDQzMTIsIDc0MDkxLCAxMjAzMzcsIDEyMDMzNiwgMTE5MjMsIDQwMjMsIDEyMDMzMywgNTc2MywgCisgICAgMTIwMzM1LCA0ODI3LCAxMDg5NCwgMTI4MTAsIDY0NDA2LCAxMTg3ODUsIDQ0NTUsIDc0MzIxLCA0MzMsIDExOTYyMCwgCisgICAgNjY2NjAsIDI0OTksIDAsIDAsIDAsIDExOTczLCAxMzA4OSwgNDI5MywgMTIwMzI5LCA0MjIyNCwgNDI3NTgsIDEyMTk2LCAKKyAgICA0MjgzNywgNDIyMjYsIDExOTMxOSwgMCwgMTE5MTI2LCA1ODE3LCAwLCA1NTI3NywgMzEyMCwgOTc5NywgMCwgMCwgMCwgCisgICAgMTAzODksIDAsIDAsIDQ4OTUsIDY1MzU4LCAwLCA0MzU5LCA1ODUsIDAsIDM1MDksIDAsIDQ4NiwgNDI5MCwgNTc1OCwgMCwgCisgICAgMCwgMCwgNzAwNCwgMCwgNjU4ODAsIDAsIDExOTA0OCwgMjM4MCwgMTEzODAsIDAsIDAsIDIzNzYsIDAsIDkxNzg0NywgMCwgCisgICAgNTE5NywgMTI3MDQ2LCAxMjcwNDcsIDEyNzA0OCwgMjM2NiwgMTI3MDUwLCAxMjcwNTEsIDEyMDU1NCwgMTIwMDQ1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3NDE4OCwgMCwgMCwgMCwgMTIwMDQ3LCAwLCAwLCAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIAorICAgIDEwMzM5LCAwLCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDAsIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAKKyAgICAwLCAwLCAwLCA2NDc5NywgMCwgNTgyMCwgMCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgCisgICAgOTg5MywgMjc1NCwgMTI2NjQsIDEyMDA2MywgMCwgNzM3NywgMCwgNDE3OTksIDY1NTMwLCAxNzExLCAxMjk4NCwgNDMwMzksIAorICAgIDMxMTQsIDYyNTUsIDAsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgMCwgNzQxODQsIDAsIDEyMDA1NSwgMCwgNDMxNzUsIDAsIAorICAgIDQzMDM3LCA0MTc5OCwgNDEwMzUsIDExNTgzLCAwLCA0MTgwMSwgMTE5MDg4LCAwLCA1MjAsIDQyMDAsIDEyNjk5LCA4MzMxLCAKKyAgICAwLCAzMDkxLCA0MTAzNCwgMTI3MzUzLCAwLCA4MzYwLCAwLCA3ODA0NCwgMzIxLCA0MjI5LCA2NDU0MywgMCwgNjU1NjMsIDAsIAorICAgIDkxNzk3NCwgMjg2MSwgMCwgMTAwOTUsIDAsIDAsIDAsIDE4NjEsIDAsIDAsIDAsIDAsIDQzMDQxLCAwLCAwLCAwLCAzODU5LCAKKyAgICAxMjE4MSwgNDE2NjAsIDgyMDksIDAsIDczODY3LCAxMjk3MywgMCwgNzQ3NTcsIDEyNzUxNCwgNDE2NTgsIDAsIDAsIDU3NjAsIAorICAgIDAsIDc0MywgNDQxNCwgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCA2NTE2MSwgNzM4OTYsIDAsIDAsIDE0MDUsIDExOTA2MywgCisgICAgNDMyMjAsIDQzMzQxLCAwLCAxOTkxOSwgMCwgNjQ1MzIsIDY1MzY3LCA0MzcxMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCAKKyAgICA0MzM0MiwgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDAsIDAsIDY0ODUsIDEzOTcsIDAsIDQxOTg2LCAwLCAwLCAwLCA3NDA5NywgCisgICAgMCwgNzQ3MSwgMTIwNzksIDAsIDEyNjgyLCA0MzI4NywgMCwgMCwgMCwgMCwgMCwgMCwgMTA5OSwgMTA0OTAsIDAsIDEwNTAxLCAKKyAgICA2NTE4MSwgNzQ0NjMsIDAsIDQ2NCwgNDE2MjQsIDY1MjgzLCA2NzY2MywgNzgyMjIsIDEzNDYsIDAsIDkxNzYzMSwgNjQ3MjQsIAorICAgIDY0ODk3LCA0MjMsIDE4MTgsIDY1MTQ0LCAwLCA4MjcyLCAwLCAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgCisgICAgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCAwLCA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIDQyNjQyLCAwLCA2NDc1MCwgCisgICAgOTM5MCwgMCwgNDE3OTcsIDAsIDAsIDI2NSwgNDE3OTUsIDY0NjY2LCAwLCA0MzUzMCwgMjc1MiwgMCwgMCwgMCwgNTksIDAsIAorICAgIDAsIDAsIDAsIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgCisgICAgODAwOSwgMzMwNSwgNDMwMzMsIDUxMSwgMTE5MzIwLCA2NjI1NSwgMTMxMjcsIDEyMDA2NywgMCwgMCwgMCwgOTE3OTc3LCAKKyAgICA2NTkxNSwgMTQwMCwgNDE4MTIsIDEwNjg1LCAxOTQ4NzAsIDIxMDMsIDEwMzg3LCA0NDUzLCA0MzI3NiwgOTE3NzgzLCAKKyAgICAxMzE1OSwgMCwgNjQ4MSwgNDEyMTMsIDAsIDAsIDAsIDAsIDQxOTgzLCA3NDE5OCwgNjYxNywgOTExNiwgMTE5NjU0LCAwLCAKKyAgICA0NjIsIDY4MTEwLCAxMDQ5MywgMCwgODEyOSwgMCwgMCwgNzQ0NzEsIDY2NDQsIDExNjU4LCAwLCAwLCAzNDUyLCAxMTkwNiwgCisgICAgOTU4MSwgMTM4NSwgMzA5OCwgMCwgMTE5MDEzLCA0MzM0MCwgMCwgNDEwMzMsIDY0OTMsIDQyNjI2LCAwLCAwLCAxMTQyNiwgCisgICAgMCwgMTY4MSwgMTE4Nzg5LCAxMjA0LCAzNzU1LCA2NDY2MSwgNzIzNSwgMTAxNzAsIDM5NjYsIDg5MTEsIDAsIDQxODQxLCAKKyAgICA0MzMzOCwgMCwgMCwgNTcyNiwgNjQ5MTUsIDQyMTc1LCAwLCAwLCA0MTQ5NywgNjUwNDQsIDAsIDI4NTEsIDQzMDE3LCAwLCAKKyAgICAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMCwgMzEwMCwgMCwgNjUzNjAsIDAsIDEyNzUxMCwgMCwgCisgICAgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDAsIAorICAgIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDAsIAorICAgIDg5OTAsIDI4NDgsIDAsIDAsIDAsIDI0OSwgMCwgMCwgMCwgMTIwNjU4LCAwLCAwLCA4ODgzLCA5MTc4MDIsIDcyOCwgCisgICAgNjgxNzgsIDk5NSwgMCwgMCwgNjQ4MjYsIDAsIDkxNzc5OCwgMCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIAorICAgIDE5NDgxNCwgMCwgMTIxMTIsIDAsIDAsIDAsIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIAorICAgIDIxMDIsIDY1NDQ1LCA3ODI1OCwgNjQ4OTEsIDAsIDc3MjUsIDAsIDc4MjU1LCAwLCA4NjI0LCA2OTI0NiwgMTI0NDYsIAorICAgIDQzMjk1LCAwLCA0MTg5NCwgMCwgNjI3NywgNDE2NzIsIDQxODkzLCAxMDAxMCwgMCwgMzU0MCwgMCwgODM1LCAwLCA2OTgxNiwgCisgICAgMTE5ODY4LCA3NDQwOCwgMCwgNzM5NTksIDU0MjYsIDQyNTgsIDAsIDAsIDU0MjQsIDAsIDgyODMsIDAsIDU0MzQsIDAsIDAsIAorICAgIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIDExNDMyLCAxOTQ4MTMsIDM0NjQsIDY0ODYsIDQ4MTksIAorICAgIDAsIDAsIDU3MCwgODA5NSwgMzY3MiwgMTE5ODY0LCAxNDk4LCA2Nzg2NiwgMCwgMCwgNDMxLCAwLCAwLCAwLCAwLCA2ODE2NywgCisgICAgMCwgMTMwOTYsIDAsIDAsIDQzNDA4LCA5NTE2LCAwLCA1MjY4LCA0MjIzMCwgNDIyMjAsIDAsIDQ0NTAsIDEyMDcyMywgCisgICAgMTE1NDcsIDQzNDE3LCAwLCAzNTYsIDM0NzcsIDIyNywgMTA0ODgsIDY4MjAzLCAzODIsIDExNDE4LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA2NDg0LCAyNTQxLCA2NjAzOSwgMCwgNzg3MTgsIDAsIDM1NDksIDAsIDkxMTAsIDExOTY2NSwgMjc0MywgMCwgNDMyOTAsIAorICAgIDE5NDgxMiwgOTA5NywgMCwgNDMwMTUsIDg3ODIsIDAsIDc3NiwgMjUyNCwgNDI3MDcsIDg1NzMsIDAsIDAsIDAsIDAsIAorICAgIDQyNjk0LCA2NDk0NCwgODk1MiwgMzg1NiwgMTE4ODE4LCAwLCA1ODcyLCA2NDk1LCAwLCAwLCAwLCAwLCAwLCAxMjA3MzMsIAorICAgIDEyODQ5LCAzOTUzLCAxODk3LCAwLCA2NTA5NCwgMTE5OTQsIDQzMzksIDc0NTU2LCAwLCA2Nzg0MywgMCwgMCwgMCwgCisgICAgNjg0NzMsIDc0MTA0LCA1MjI4LCAwLCA3ODY4LCA0MzE4NCwgMCwgMCwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgMCwgCisgICAgMTE2MiwgMCwgMjY3MSwgMCwgMCwgMCwgMCwgMTE4ODY1LCA0NTUzLCA3MzgxMSwgMCwgMTk1MDA1LCAwLCAwLCAxOTkyMSwgCisgICAgNzQzMzEsIDExNDI0LCAxOTUwMDYsIDQ1NjcsIDQxODkxLCAwLCAwLCA1NTI0OSwgNDgyMCwgNjUyMzksIDE5NDY2MiwgMCwgCisgICAgMCwgNDMwNDIsIDExOTIxMiwgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCAwLCA0NDM4LCA2NDM4NSwgMCwgCisgICAgMTc1MywgMTEzMzEsIDYxNDcsIDE5NDk0MSwgNDMyODIsIDg4MzMsIDAsIDAsIDY1MDQsIDc4NDA4LCAxMjY5NzksIDEwNzE5LCAKKyAgICAwLCAxODk4LCAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMCwgMTk0NjcxLCA2NjQ4LCAxMDY3MSwgMjUyOCwgMCwgCisgICAgNjQ3ODksIDkxNjksIDgzOCwgMTI3MDkyLCAxMjA2OTcsIDg0NCwgNTAxNCwgMCwgMjU2LCAwLCA5OTkwLCAwLCA0MjczOSwgCisgICAgMCwgNzU0MiwgNjU0NjQsIDk3MjYsIDAsIDY0ODksIDEwMDQ4LCA3NDMyNiwgNzg3MTksIDY2NTczLCAwLCA3ODcyNCwgCisgICAgNzg3MTIsIDExNzYxLCAxOTQ2NTUsIDAsIDQxMDk0LCAwLCAwLCAwLCAwLCAwLCA2MTk2LCA2OTQ1LCAxOTQ2MjgsIAorICAgIDE5NDg5MCwgMTk0NjMxLCAxMjA0OTEsIDExODE2LCAxOTQ5NDMsIDU3MzMsIDAsIDAsIDAsIDQxMDk4LCAwLCA0MTA5MywgMCwgCisgICAgNjY2MjYsIDU4OCwgOTc2MCwgMCwgMTk0NzE3LCAxMjM4LCAyMDAsIDAsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAKKyAgICAwLCAwLCAxOTQ2NTEsIDAsIDAsIDMzOTQsIDE5NDg5NCwgMTIwNjY4LCAwLCAwLCAwLCA2NjIxOSwgMCwgNDMyODQsIAorICAgIDE5NDY1NywgNzgxNywgMTg0MSwgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIAorICAgIDc3MDEsIDE5NDk4MCwgMCwgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgCisgICAgMCwgNjUzMjQsIDkxNCwgNjUzMjMsIDgwNzEsIDM1MzgsIDAsIDc4NzEzLCA2NTMyOCwgMCwgNzQzNjcsIDc2MTQsIDAsIAorICAgIDExODE5LCAwLCAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCAwLCAKKyAgICA1NzM0LCA4OTYwLCAwLCAxMjc1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMTk2MjEsIDAsIDc0NTM2LCAxMjQ0NywgNjQ0ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNzY3LCAxMDkxNSwgCisgICAgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIDAsIDI1NTUsIDg2MjksIDAsIDQzMTY4LCAKKyAgICA0MTg3MiwgNDM3MDYsIDQ0OTYsIDE5NDg3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ3MzAsIDAsIDY2NzE0LCA2ODIyMiwgMCwgCisgICAgMCwgNjU1OTYsIDAsIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNzI0MiwgNjc4NzEsIAorICAgIDc0Mzg2LCAwLCA4MjMzLCA0MzU3MiwgMCwgNjY4MywgMCwgMzQ0MiwgMTIxNDQsIDI4NDEsIDEyNTQzLCAwLCAxNDczLCAKKyAgICA0MjgyMCwgNjQzMjksIDkxNzc3MiwgMCwgNjg2NDIsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIDAsIDQxMTA0LCAwLCAKKyAgICA0MTA5OSwgMTA1NCwgMTE5MDY1LCAxMDQwLCA2NTQ1MCwgMCwgNDQzNCwgMTA2OSwgMCwgMTE4ODYyLCA3NDIzMSwgCisgICAgOTE3NzY1LCAwLCAwLCAwLCA5NjkzLCA0MTk0MywgMCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgMTA1OSwgCisgICAgOTc5MCwgODk5NSwgMCwgMCwgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAwLCAwLCA3NDgzMCwgNzg1NjksIAorICAgIDEyNzQzLCAwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAKKyAgICAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAwLCAwLCA0MzAyMCwgMCwgMzk1NSwgNzQyNTQsIDAsIDAsIDkxNzg2MSwgMCwgCisgICAgNzc5MjYsIDk3NzAsIDkyNDYsIDEyMjMwLCAwLCAwLCAwLCAxMDQ0OCwgNDE3ODMsIDQxNzg2LCAxMjcwOTMsIDEyNzk3LCAKKyAgICAyNzU1LCA2NDU3MSwgNzg1NzgsIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAwLCA3ODU3NCwgMCwgMCwgCisgICAgMCwgNTc0NywgNzg4MjUsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDc0MjA1LCA0MjE0NCwgNjUwMTUsIDAsIAorICAgIDU2MywgMCwgMCwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDAsIDQzMTM3LCA2OTQsIDAsIAorICAgIDk4NzYsIDAsIDExOTE2OCwgMCwgNzg4MjIsIDY0NTM3LCAwLCAyNzcsIDc0Mzg1LCA3MjI5LCAxMjc2MSwgMCwgMCwgCisgICAgMTMwMjUsIDY0ODExLCA4NzU3LCA3ODgyNCwgMCwgMTU3NCwgNzM4MSwgMCwgMjUyNSwgNDg1MiwgNTc0OSwgNjg0NjUsIAorICAgIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA5ODAxLCAxMDE1NSwgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIDAsIAorICAgIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIDgwNTEsIAorICAgIDAsIDExOTYwOSwgMCwgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIDAsIDczOTA2LCAwLCAKKyAgICAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIAorICAgIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIDAsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAKICAgICAxMjY1NywgMCwgMCwgMzg2LCAwLCA4ODM0LCAwLCAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgCi0gICAgNzQ1MDQsIDAsIDc0MzE2LCAwLCAwLCA0MzA0LCA3NDUwMywgODE2MCwgMCwgMTk0NzUzLCAwLCAwLCAwLCAxMzQ4LCAwLCAwLCAKLSAgICAwLCAxMzMwMywgMCwgMCwgMTk0NzU1LCA3NTk5LCAxMjc4LCAwLCAxMzI2OSwgMCwgMCwgNzQzODcsIDAsIDAsIDc0NDkyLCAKLSAgICA2MDk3LCA3NTY4LCA4NzgwLCA0OTgyLCAwLCA3NDUwMSwgMTk0NzYzLCAwLCAxOTQ3NjIsIDI2NzIsIDM3MzUsIDE5NDczNSwgCi0gICAgMTMxMzgsIDQyMjY2LCA5NDg0LCAxMDcyNCwgNDEyMDIsIDExOTAyNCwgMCwgMCwgMCwgOTQ4NywgMCwgMTk0NzY1LCAzODQyLCAKLSAgICAxOTUwMzQsIDE5NTA1NiwgMTI0NDIsIDYxOTMsIDk3OTEsIDAsIDAsIDQyNTE2LCA3MjI4LCA3NTU5LCA3NDgwMywgCi0gICAgMTk0Njg5LCAxOTQ4NTEsIDExMzk5LCAxMTkyMTksIDE5NDg1NiwgMTk0ODU1LCAwLCAxOTQ4NTcsIDM2MDQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQyNTA3LCAxOTYyLCAxOTQ4NjEsIDE5NDY5NiwgNDI1MDUsIDExNjYwLCAwLCAwLCAwLCA2OTk1LCA3NDE3MywgCi0gICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCAxOTQ3MDYsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIAotICAgIDE5NDcwMSwgMTk0ODQ3LCAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDAsIDkyMjYsIDAsIDE5NTA3MCwgNjQ3MiwgCi0gICAgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCAwLCAwLCAwLCAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCAKLSAgICA2NTg1LCAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIDAsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCAKLSAgICAwLCAwLCAwLCAwLCAxOTQ4MzMsIDE5NDgzMiwgNjY4MSwgMTk0ODM0LCAxMjY5MywgMTk0ODM2LCAxOTQ4MzksIDE5NDgzOCwgCi0gICAgMTk0ODQxLCAxOTQ4NDAsIDY1NDQyLCAxMTk2MTAsIDExODg4NywgMTIxNjYsIDc0NDE1LCA2NjI0OCwgMTk0ODE2LCAwLCAKLSAgICAxOTQ4MTgsIDE5NDgxNywgMTk0ODIwLCAxOTQ4MTksIDUyOTcsIDcwNDIsIDEzMjg0LCA2MTEyLCA3OTY4LCAxOTQ4MjUsIAotICAgIDczOTI5LCAxOTQ3MzgsIDE5NDczNiwgNjU3NDYsIDAsIDc0NDA5LCA3NDM4OSwgMTk0ODI2LCA0MzQyLCA0MjgzOSwgCi0gICAgMTk0ODMxLCAxNjc3LCAwLCAwLCAwLCA5MTc4NTUsIDExMDkxLCAxMTAxMSwgMjcxOSwgMCwgMCwgMCwgNjQ0OTUsIDAsIDAsIAotICAgIDc1ODUsIDY1MTY5LCA0Mjg0NSwgNDMwOCwgOTE3ODU4LCA3NDE3NywgNzUwNSwgNTQzLCA2NDkxNiwgNjQ3MzYsIDAsIDAsIAotICAgIDY2NjcwLCAwLCAxMTg5MjIsIDE5OTExLCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzQ1MDQsIDAsIDc0MzE2LCAwLCA3NzkzMiwgNDMwNCwgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDAsIAorICAgIDEzNDgsIDAsIDc4NTk3LCAwLCAxMzMwMywgMCwgMCwgMTk0NzU1LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDAsIDAsIAorICAgIDc0Mzg3LCA3ODE3OSwgNzg1OTgsIDc0NDkyLCA2MDk3LCA3NTY4LCA4NzgwLCA0OTgyLCAwLCA3NDUwMSwgMTk0NzYzLCAKKyAgICA3ODU5MiwgMTk0NzYyLCAyNjcyLCAzNzM1LCAxOTQ3MzUsIDEzMTM4LCA0MjI2NiwgOTQ4NCwgMTA3MjQsIDQxMjAyLCAKKyAgICAxMTkwMjQsIDAsIDQzNzQyLCAwLCA5NDg3LCAxMTk5NTksIDExOTExNywgMzg0MiwgMTk1MDM0LCA3ODY2OCwgMTI0NDIsIAorICAgIDYxOTMsIDk3OTEsIDAsIDAsIDQyNTE2LCA3MjI4LCA3NTU5LCA3NDgwMywgNzg0NjgsIDE5NDg1MSwgMTEzOTksIDExOTIxOSwgCisgICAgMTk0NjkxLCAxOTQ4NTUsIDE5NDY5MCwgMTk0ODU3LCAzNjA0LCAwLCAxMTkxODgsIDAsIDc4NTQwLCA3ODU0MSwgNDI1MDcsIAorICAgIDE5NjIsIDc4NDkwLCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAwLCAyMDcyLCAwLCA2OTk1LCA3NDE3MywgNTQzNywgNzQxNzQsIAorICAgIDEwNjY5LCA4NzAyLCA3OTY0LCAxOTQ3MDYsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIDE5NDY5OSwgMTk0ODQ3LCAKKyAgICAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDc4NDc5LCA5MjI2LCA3ODQ4MCwgMTk1MDcwLCA2NDcyLCA2NTgxNCwgCisgICAgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCAwLCAwLCAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCA2NTg1LCAKKyAgICAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIDAsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCAwLCAwLCAKKyAgICAwLCAwLCAxOTQ4MzMsIDE5NDgzMiwgNjY4MSwgMTk0ODM0LCAxMjY5MywgMTk0ODM2LCA0MjcyNywgMTk0ODM4LCAxOTQ4NDEsIAorICAgIDc4MTk1LCA2NTQ0MiwgMTE5NjEwLCA3ODE5OSwgMTIxNjYsIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxOTQ4MTgsIAorICAgIDE5NDgxNywgMTk0ODIwLCAxOTQ4MTksIDUyOTcsIDcwNDIsIDEzMjg0LCA2MTEyLCA3OTY4LCAxOTQ4MjUsIDczOTI3LCAKKyAgICAxOTQ3MzgsIDE5NDczNiwgNjU3NDYsIDAsIDc0NDA5LCA3NDM4OSwgMTk0ODI2LCA0MzQyLCA0MjgzOSwgMTk0ODMxLCAKKyAgICAxNjc3LCAwLCAwLCAxOTQ4MDYsIDkxNzg1NSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIDY0NDk1LCAwLCAKKyAgICAwLCA3NTg1LCA2NTE2OSwgMjA1MiwgNDMwOCwgOTE3ODU4LCA3NDE3NywgNzUwNSwgNTQzLCA2NDkxNiwgNjQ3MzYsIDAsIDAsIAorICAgIDY0NjU1LCAwLCAxMTg5MjIsIDIwNjQsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxMjk5NCwgMCwgMTA4MjgsIDAsIDYyMjgsIDQzMDcsIDM0ODIsIDAsIDAsIDAsIDAsIDUwNiwgNzQ1NzMsIDQxMTk0LCAKLSAgICA2NTczNSwgMCwgMCwgNDExOTUsIDAsIDgxNjksIDAsIDg4NDEsIDAsIDUxNiwgMCwgNDExOTcsIDExOTA1MSwgMzQsIDAsIAotICAgIDEyMDE4NiwgMTIwMTg1LCAxNjEyLCA3NDMzMywgMTIwMTgyLCAxMjAxODEsIDc0MzA4LCAxMjAwMSwgMTIwMTc4LCAxMDI0MiwgCi0gICAgNjQ1NjQsIDEyMDE3OSwgMTIwMTc0LCA2NTg0LCA3NzQ5LCAxMTAzNywgMCwgMTc1OCwgMCwgMTA2NjcsIDEwNTYwLCAKLSAgICAxMjAxOTcsIDEyMDc1NiwgMTkzNSwgMTE1MTcsIDEyMDE5MywgMTIwMTk2LCAxMjAxOTUsIDE5MzEsIDEyMDE4OSwgNzQ4MzksIAotICAgIDEyMDE5MSwgMTIxNywgNjQ3MDIsIDEyNjQzLCA4MjUsIDAsIDE5NDkwNSwgMTIyOTQsIDAsIDE5NDkwOCwgOTEzOCwgCi0gICAgMTk0OTEwLCAxOTQ5MDIsIDEyNjMxLCAxOTQ5MTEsIDExMDgwLCA3NDU1NCwgMCwgNTU5MSwgMTIzOSwgMCwgMTEzMTMsIDAsIAotICAgIDM0MDMsIDAsIDAsIDY0MzY0LCAwLCAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDAsIDAsIDE5NDg5OCwgCi0gICAgNjc1ODksIDQxODUwLCA2NDI5MCwgMzQzMywgMCwgMTI2MTUsIDE1OTQsIDY1NjA3LCA2OTE0LCA2NzYwMywgMCwgMTE5NTY5LCAKKyAgICA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCAwLCA4ODQxLCAwLCA1MTYsIDAsIDIwNjMsIDExOTA1MSwgMzQsIAorICAgIDAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIDc0NTIwLCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgCisgICAgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDEyMDE3NCwgNjU4NCwgNzc0OSwgMTEwMzcsIDAsIDE3NTgsIDAsIDEwNjY3LCAKKyAgICAxMDU2MCwgMTIwMTk3LCAxMjA3NTYsIDE5MzUsIDExNTE3LCAxMjAxOTMsIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIAorICAgIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAwLCAxOTQ5MDUsIDEyMjk0LCAxMjcyNjEsIDc4ODM0LCAKKyAgICA5MTM4LCA3ODgzMSwgNzg4MzMsIDEyNjMxLCA3ODgyOSwgMTEwODAsIDc0NTU0LCAwLCA1NTkxLCAxMjM5LCAwLCAxMTMxMywgCisgICAgMCwgMzQwMywgMCwgMCwgNjQzNjQsIDAsIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgMCwgMCwgMTk0ODk4LCAKKyAgICA2NzU4OSwgNDE4NTAsIDY0MjkwLCAzNDMzLCAwLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIAogICAgIDc0NTY1LCA0MTM1MywgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxOTQ4OTcsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAKLSAgICAxOTQ5MDAsIDQyNTc3LCA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMCwgMCwgMCwgMCwgNjc2MDQsIDE5NDg4MCwgMCwgCi0gICAgNTczLCAxOTQ4ODEsIDE5NDg4NCwgMTE0MTcsIDE5NDg4NiwgMTk0ODg1LCAxOTQ4ODgsIDY3NTk5LCAwLCAxOTQ4ODksIAotICAgIDY3NjA3LCAxMTQ4MiwgMCwgMCwgMzM1NywgMCwgMTk0ODkxLCA0MjA3LCAxMjg4LCAxOTQ4OTIsIDE5NDg5NSwgMTk0ODk0LCAKLSAgICAwLCAxMTU4OSwgNjYzNTQsIDE5NDg3MiwgMCwgMCwgNjQ2MDIsIDE5NDY3MCwgMCwgMCwgNDI3ODgsIDAsIDY0NDgwLCAKLSAgICAxOTQ4NzUsIDg0MjMsIDMzNDgsIDQ0OCwgMTk0ODc5LCA5NzE3LCAwLCAwLCA5OTcsIDAsIDAsIDAsIDAsIDExNDQwLCAKLSAgICAxMTM3OSwgNDIwMDAsIDEzMTM5LCAwLCA2NTAxMywgMTI2OTk5LCAwLCA3Mzc5NiwgMCwgMCwgMTIwMzUsIDAsIDI4MTgsIDAsIAotICAgIDAsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAxMDg3MywgMTIxOTcsIDAsIDAsIDAsIDAsIDAsIDEyNjk3NywgMCwgMCwgCi0gICAgMTk0ODY1LCAxMjY5ODIsIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAwLCAxMTM4MSwgCi0gICAgMzI2NSwgNjY2MTcsIDMyNzQsIDAsIDAsIDAsIDAsIDAsIDQxOTg5LCAwLCAwLCAwLCAzMjYzLCAwLCA2NTY3MiwgMCwgCi0gICAgMzI3MCwgNjQ1MzksIDExNDg5LCAwLCAwLCAwLCAwLCA5NTA1LCA2NTUxOCwgMCwgNzU2LCAxOTUwNTIsIDAsIDAsIDAsIAotICAgIDcyNjEsIDAsIDE4NiwgMCwgMTE5MTU2LCA1NzcwLCAxMzE3OSwgNjU4MzAsIDEyNjEyLCAxMjk0OSwgNjQ4NTYsIDEyODAwLCAKLSAgICAwLCA3NDIwMywgNjQ3MTgsIDAsIDAsIDAsIDExODkyOSwgMCwgMTE1NzgsIDAsIDExOTI5NiwgMCwgMCwgMCwgMCwgNzQ1NjgsIAotICAgIDkyNTQsIDAsIDE3OTQsIDEyMDIxNywgNjQ1MjEsIDU2MjQsIDEyMDIyMCwgMTIwMjIxLCAxMTk5NTgsIDEyMDIyMywgMzYxNywgCi0gICAgNjY2MzYsIDY0ODg2LCAxMjAyMTEsIDEyMDIxMiwgMTIwMjEzLCAxMjAyMTQsIDE4NzIsIDY2NTA4LCAxMjA0NjcsIDQxMDc5LCAKLSAgICAxMDc0OCwgNTUwMiwgMTE5MzMwLCA0NDUyLCAwLCAwLCAwLCA0NTExLCAwLCAwLCAwLCAxMTQyNSwgMCwgMCwgMTIzMSwgMCwgCi0gICAgMCwgMCwgOTAwMywgODE5MiwgMCwgNTMwNSwgOTY1MywgMTA2MTYsIDg2OTQsIDk1NDYsIDAsIDAsIDEyMDQ3OCwgMTIwMjAwLCAKLSAgICA2NTIwNSwgMTIwMjAyLCA2NDA2MywgOTg3OCwgNzQ3ODAsIDExOTYyNiwgMTIwMjA3LCA2NDA1OCwgODc5OSwgNDIxMzEsIDAsIAotICAgIDY0MDYyLCAxMDI4LCA2NDA2MCwgNjQwNTksIDgzNywgMTA1NjcsIDAsIDQzMTAzLCAwLCAwLCAxMTQyNywgMjkwMiwgCi0gICAgNjQwNDMsIDY0MDQyLCA2NjQ2NCwgMTA3NTYsIDAsIDQyNjA2LCA2NDA0NSwgNjQwNDQsIDAsIDEwMDc2LCA2NDA0MCwgCi0gICAgNjQwMzksIDAsIDEwMzQsIDMzOTIsIDAsIDQzMDkxLCA2NDAzMywgNjQwMzIsIDY1NDY4LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCAKLSAgICA2NDAzNSwgNDI5MSwgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIDY0NjgxLCAxOTQ5MzAsIDAsIDE5NDk0NCwgMCwgNDMwOTAsIDAsIAotICAgIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDExOTE4MywgCisgICAgMTk0OTAwLCA0MjU3NywgNDEzOTMsIDEyNjY4LCAxOTQ5MDQsIDI0NzcsIDAsIDAsIDEyNzMwMiwgMCwgNjc2MDQsIAorICAgIDE5NDg4MCwgMTI3MjM1LCA1NzMsIDE5NDg4MSwgMTk0ODg0LCAxMTQxNywgMTk0ODg2LCAxOTQ4ODUsIDE5NDg4OCwgCisgICAgNjc1OTksIDAsIDE5NDg4OSwgNjc2MDcsIDExNDgyLCAwLCAwLCAzMzU3LCAwLCA0MjIyMywgNDIwNywgMTI4OCwgNzg4NDIsIAorICAgIDc4ODM5LCA2ODQxOSwgNzg4MzcsIDExNTg5LCA0MjE5NSwgMTk0ODcyLCA5MTc2MjcsIDEyNzI2MywgNjQ2MDIsIDY3NjE4LCAKKyAgICAwLCAwLCA0Mjc4OCwgNjg0MTYsIDY0NDgwLCAxOTQ4NzUsIDg0MjMsIDMzNDgsIDQ0OCwgNjg0NzYsIDk3MTcsIDAsIDAsIAorICAgIDk5NywgMCwgMCwgMCwgMCwgMTE0NDAsIDExMzc5LCA0MjAwMCwgMTMxMzksIDQyMjIxLCA2NTAxMywgMTI2OTk5LCAwLCAKKyAgICA3Mzc5NiwgMCwgMTE5MjI4LCAxMjAzNSwgMCwgMjgxOCwgMCwgMCwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIAorICAgIDEwODczLCAxMjE5NywgMCwgMCwgMCwgMCwgMCwgNzgyMTAsIDAsIDAsIDE5NDg2NSwgMTI2OTgyLCA3NDU2MywgNjQ4MjgsIAorICAgIDExNDE5LCAxOTQ4NjgsIDc2NiwgMTI1NywgMCwgMTE4ODQ1LCAxMTM4MSwgMzI2NSwgNjY2MTcsIDMyNzQsIDAsIDAsIDAsIAorICAgIDAsIDExOTA5MiwgNDE5ODksIDAsIDAsIDAsIDMyNjMsIDAsIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIAorICAgIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgMTk1MDUyLCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgCisgICAgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgMTI5NDksIDY0ODU2LCAxMjgwMCwgMCwgNzQyMDMsIDY0NzE4LCAwLCAwLCAwLCAKKyAgICAxMTg5MjksIDAsIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIAorICAgIDY0NTIxLCA1NjI0LCAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgMTIwMjExLCAKKyAgICAxMjAyMTIsIDEyMDIxMywgMTIwMjE0LCAxODcyLCA2NjUwOCwgMTIwNDY3LCA0MTA3OSwgMTA3NDgsIDU1MDIsIDExOTMzMCwgCisgICAgNDQ1MiwgMCwgMCwgOTE3ODc5LCA0NTExLCAwLCAwLCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAwLCAwLCAwLCAKKyAgICA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAxMjAyMDAsIAorICAgIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIDQyMTMxLCAwLCAKKyAgICA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAxMTQyNywgMjkwMiwgCisgICAgNjQwNDMsIDY0MDQyLCA2NjQ2NCwgMTA3NTYsIDAsIDQyNjA2LCA2NDA0NSwgNjQwNDQsIDQzOTc5LCAxMDA3NiwgNjQwNDAsIAorICAgIDQzMDYwLCAwLCAxMDM0LCAzMzkyLCAwLCA0MzA5MSwgNjQwMzMsIDY0MDMyLCA0MjczNSwgNjQwMzgsIDY0MDM3LCA2NDAzNiwgCisgICAgNjQwMzUsIDQyOTEsIDE5NDkyOCwgNjQwMTUsIDY0MDE0LCA2NDY4MSwgMTk0OTMwLCAwLCA3ODE0NSwgMCwgNDMwOTAsIDAsIAorICAgIDM0NzYsIDg5NzMsIDY0MDEyLCA0MjQ3MywgNjQwMTAsIDY0MDA4LCA2NDAwNywgMjAwMywgNzcwNiwgNjQ1MTcsIDc4MTUzLCAKICAgICAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIAogICAgIDcyNDcsIDY0MDU0LCAwLCAwLCA0NzY3LCA5MzQzLCA2NDA0OSwgNjQwNDgsIDEyMDAzNCwgMTEzMywgNjQwNTMsIDY0MDUyLCAKLSAgICA2NDA1MSwgNjQwNTAsIDQxMzQwLCAwLCAwLCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAwLCAKLSAgICA0MjUyMCwgMCwgMCwgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDAsIDAsIDY0MDI1LCA5MTY3LCAKLSAgICA0MjE1MSwgMCwgMCwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCAwLCAxMTg5MTUsIAotICAgIDAsIDAsIDAsIDAsIDEyMDUzOSwgMCwgNDE0MTEsIDEzMDk0LCAwLCA3NTMyLCA0MTQxNCwgMCwgMzE3OSwgMCwgNjQ3NjksIAotICAgIDAsIDAsIDExNDYxLCA3NDQ1NCwgMTA3NTEsIDkwNTEsIDAsIDAsIDEwNTM1LCAwLCAwLCAwLCAyMDA4LCA2NDAzMSwgCi0gICAgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgCi0gICAgNDE3ODgsIDE5NDg0NCwgMCwgMTE4Nzk1LCAwLCAxMTk4ODcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgCi0gICAgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAwLCAxMjkxNSwgMCwgMzI5NywgOTY5OSwgCi0gICAgMCwgMTEzNSwgMCwgMCwgMCwgMTk5NSwgNzkyNywgMCwgMCwgMjU1MiwgNDE1NDYsIDYwLCAwLCA4NjQ5LCA0MTU0OSwgMCwgCi0gICAgMCwgMCwgNjY4MiwgMCwgMCwgNjQ3MTAsIDQxNTQ3LCAwLCAyMDEzLCAwLCAxMTk4OTksIDExOTkwMCwgMTE5ODk3LCAKLSAgICAxMTk4OTgsIDEyODMyLCAxMTk5MDQsIDgwODEsIDgzNjIsIDM1MzcsIDExOTkwOCwgOTEzNywgMTE5OTA2LCA4OTk5LCAwLCAKLSAgICAxMTk5MDksIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCAwLCAKLSAgICA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgMCwgOTYyOCwgMCwgMTIwODEsIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAKLSAgICAwLCAwLCAxMjAyMDEsIDAsIDAsIDAsIDMwNTksIDAsIDEyMDIwNCwgMTE5OTUzLCAxMjAyMDUsIDAsIDAsIDAsIDQxMDAsIAotICAgIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMCwgCisgICAgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAwLCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAwLCAKKyAgICA0MjUyMCwgMCwgMCwgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgCisgICAgNDIxNTEsIDc4MjQ0LCAwLCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDc4MjUyLCAKKyAgICA3ODI0OCwgNzc5MTQsIDc4MjQ2LCA3ODI0NywgMCwgNzc5MTUsIDc4NzY2LCA2Nzg4LCAxMzA5NCwgNzc5MjAsIDc1MzIsIAorICAgIDQxNDE0LCA3ODUyMCwgMzE3OSwgNzg1MTgsIDY0NzY5LCA3ODUxNCwgNzg1MTcsIDExNDYxLCA3NDQ1NCwgMTA3NTEsIAorICAgIDkwNTEsIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDAsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIAorICAgIDQxODc0LCAwLCAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIAorICAgIDAsIDExODc5NSwgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgCisgICAgMTE5ODk1LCAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAKKyAgICAxMTM1LCAwLCAwLCAwLCAxOTk1LCA2NzIyLCAwLCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCA0MTU0OSwgCisgICAgNzg0OTYsIDAsIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDAsIDIwMTMsIDAsIDc4NTMwLCA3ODUzMiwgCisgICAgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIDExOTkwOCwgOTEzNywgMTE5OTA2LCA4OTk5LCAKKyAgICAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIAorICAgIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCAwLCA5NjI4LCA2ODQ0NiwgMTIwODEsIDk4MjYsIDY0NTAyLCAxNzY3LCAKKyAgICAwLCAwLCAwLCAxMjAyMDEsIDAsIDAsIDAsIDMwNTksIDQ0MDI0LCAxMjAyMDQsIDExOTk1MywgMTIwMjA1LCAwLCAwLCAwLCAKKyAgICA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIDM1OTIsIDEwMDc4LCAwLCAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDAsIAogICAgIDEwNzQyLCAwLCAwLCAxOTk0LCA5MjgxLCAzMjk2LCAxMjg2NSwgMTk5NywgMTg5NSwgCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3ppcGltcG9ydC5jIGIvTW9kdWxlcy96aXBpbXBvcnQuYwppbmRleCBjMzY3NmU1Li5jOWFjYjdkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3ppcGltcG9ydC5jCisrKyBiL01vZHVsZXMvemlwaW1wb3J0LmMKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgIGNoYXIgKmZ1bGxuYW1lLCAqbW9kcGF0aDsKICAgICBpbnQgaXNwYWNrYWdlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnppcGltcG9ydGVyLl9nZXRfZmlsZW5hbWUiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczp6aXBpbXBvcnRlci5nZXRfZmlsZW5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICZmdWxsbmFtZSkpCiAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU1Myw3ICs1NTMsNyBAQAogCiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2ZpbGVuYW1lLAotIl9nZXRfZmlsZW5hbWUoZnVsbG5hbWUpIC0+IGZpbGVuYW1lIHN0cmluZy5cblwKKyJnZXRfZmlsZW5hbWUoZnVsbG5hbWUpIC0+IGZpbGVuYW1lIHN0cmluZy5cblwKIFxuXAogUmV0dXJuIHRoZSBmaWxlbmFtZSBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuIik7CiAKQEAgLTU2OCw3ICs1NjgsNyBAQAogICAgICBkb2NfZ2V0X2NvZGV9LAogICAgIHsiZ2V0X3NvdXJjZSIsIHppcGltcG9ydGVyX2dldF9zb3VyY2UsIE1FVEhfVkFSQVJHUywKICAgICAgZG9jX2dldF9zb3VyY2V9LAotICAgIHsiX2dldF9maWxlbmFtZSIsIHppcGltcG9ydGVyX2dldF9maWxlbmFtZSwgTUVUSF9WQVJBUkdTLAorICAgIHsiZ2V0X2ZpbGVuYW1lIiwgemlwaW1wb3J0ZXJfZ2V0X2ZpbGVuYW1lLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGRvY19nZXRfZmlsZW5hbWV9LAogICAgIHsiaXNfcGFja2FnZSIsIHppcGltcG9ydGVyX2lzX3BhY2thZ2UsIE1FVEhfVkFSQVJHUywKICAgICAgZG9jX2lzX3BhY2thZ2V9LApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9hYnN0cmFjdC5jIGIvT2JqZWN0cy9hYnN0cmFjdC5jCmluZGV4IGQ1M2IxN2YuLjFlNzlkZGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYWJzdHJhY3QuYworKysgYi9PYmplY3RzL2Fic3RyYWN0LmMKQEAgLTkzLDcgKzkzLDcgQEAKIF9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKmhpbnRzdHJvYmogPSBOVUxMOwotICAgIFB5T2JqZWN0ICpybzsKKyAgICBQeU9iamVjdCAqcm8sICpoaW50bWV0aDsKICAgICBQeV9zc2l6ZV90IHJ2OwogCiAgICAgLyogdHJ5IG8uX19sZW5fXygpICovCkBAIC0xMDcsMTkgKzEwNywyMiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KIAotICAgIC8qIGNhY2hlIGEgaGFzaGVkIHZlcnNpb24gb2YgdGhlIGF0dHJpYnV0ZSBzdHJpbmcgKi8KLSAgICBpZiAoaGludHN0cm9iaiA9PSBOVUxMKSB7Ci0gICAgICAgIGhpbnRzdHJvYmogPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX2xlbmd0aF9oaW50X18iKTsKLSAgICAgICAgaWYgKGhpbnRzdHJvYmogPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KKyAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhvKSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKICAgICAvKiB0cnkgby5fX2xlbmd0aF9oaW50X18oKSAqLwotICAgIHJvID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MobywgaGludHN0cm9iaiwgTlVMTCk7CisgICAgaGludG1ldGggPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAiX19sZW5ndGhfaGludF9fIiwgJmhpbnRzdHJvYmopOworICAgIGlmIChoaW50bWV0aCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOworICAgIH0KKyAgICBybyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaGludG1ldGgsIE5VTEwpOworICAgIFB5X0RFQ1JFRihoaW50bWV0aCk7CiAgICAgaWYgKHJvID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikgJiYKICAgICAgICAgICAgICFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CiAgICAgfQpAQCAtMTUzLDcgKzE1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgaW50ZWdlciwgbm90ICclLjIwMHMnIiwga2V5KTsKICAgICB9CiAKLSAgICByZXR1cm4gdHlwZV9lcnJvcigiJyUuMjAwcycgb2JqZWN0IGlzIHVuc3Vic2NyaXB0YWJsZSIsIG8pOworICAgIHJldHVybiB0eXBlX2Vycm9yKCInJS4yMDBzJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiLCBvKTsKIH0KIAogaW50CkBAIC00MzksOCArNDQyLDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZAotX2FkZF9vbmVfdG9faW5kZXhfRihpbnQgbmQsIFB5X3NzaXplX3QgKmluZGV4LCBQeV9zc2l6ZV90ICpzaGFwZSkKK3ZvaWQKK19QeV9hZGRfb25lX3RvX2luZGV4X0YoaW50IG5kLCBQeV9zc2l6ZV90ICppbmRleCwgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUpCiB7CiAgICAgaW50IGs7CiAKQEAgLTQ1NSw4ICs0NTgsOCBAQAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQKLV9hZGRfb25lX3RvX2luZGV4X0MoaW50IG5kLCBQeV9zc2l6ZV90ICppbmRleCwgUHlfc3NpemVfdCAqc2hhcGUpCit2b2lkCitfUHlfYWRkX29uZV90b19pbmRleF9DKGludCBuZCwgUHlfc3NpemVfdCAqaW5kZXgsIGNvbnN0IFB5X3NzaXplX3QgKnNoYXBlKQogewogICAgIGludCBrOwogCkBAIC00ODAsNyArNDgzLDcgQEAKIFB5QnVmZmVyX1RvQ29udGlndW91cyh2b2lkICpidWYsIFB5X2J1ZmZlciAqdmlldywgUHlfc3NpemVfdCBsZW4sIGNoYXIgZm9ydCkKIHsKICAgICBpbnQgazsKLSAgICB2b2lkICgqYWRkb25lKShpbnQsIFB5X3NzaXplX3QgKiwgUHlfc3NpemVfdCAqKTsKKyAgICB2b2lkICgqYWRkb25lKShpbnQsIFB5X3NzaXplX3QgKiwgY29uc3QgUHlfc3NpemVfdCAqKTsKICAgICBQeV9zc2l6ZV90ICppbmRpY2VzLCBlbGVtZW50czsKICAgICBjaGFyICpkZXN0LCAqcHRyOwogCkBAIC01MDcsMTAgKzUxMCwxMCBAQAogICAgIH0KIAogICAgIGlmIChmb3J0ID09ICdGJykgewotICAgICAgICBhZGRvbmUgPSBfYWRkX29uZV90b19pbmRleF9GOworICAgICAgICBhZGRvbmUgPSBfUHlfYWRkX29uZV90b19pbmRleF9GOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgYWRkb25lID0gX2FkZF9vbmVfdG9faW5kZXhfQzsKKyAgICAgICAgYWRkb25lID0gX1B5X2FkZF9vbmVfdG9faW5kZXhfQzsKICAgICB9CiAgICAgZGVzdCA9IGJ1ZjsKICAgICAvKiBYWFggOiBUaGlzIGlzIG5vdCBnb2luZyB0byBiZSB0aGUgZmFzdGVzdCBjb2RlIGluIHRoZSB3b3JsZApAQCAtNTMxLDcgKzUzNCw3IEBACiBQeUJ1ZmZlcl9Gcm9tQ29udGlndW91cyhQeV9idWZmZXIgKnZpZXcsIHZvaWQgKmJ1ZiwgUHlfc3NpemVfdCBsZW4sIGNoYXIgZm9ydCkKIHsKICAgICBpbnQgazsKLSAgICB2b2lkICgqYWRkb25lKShpbnQsIFB5X3NzaXplX3QgKiwgUHlfc3NpemVfdCAqKTsKKyAgICB2b2lkICgqYWRkb25lKShpbnQsIFB5X3NzaXplX3QgKiwgY29uc3QgUHlfc3NpemVfdCAqKTsKICAgICBQeV9zc2l6ZV90ICppbmRpY2VzLCBlbGVtZW50czsKICAgICBjaGFyICpzcmMsICpwdHI7CiAKQEAgLTU1OCwxMCArNTYxLDEwIEBACiAgICAgfQogCiAgICAgaWYgKGZvcnQgPT0gJ0YnKSB7Ci0gICAgICAgIGFkZG9uZSA9IF9hZGRfb25lX3RvX2luZGV4X0Y7CisgICAgICAgIGFkZG9uZSA9IF9QeV9hZGRfb25lX3RvX2luZGV4X0Y7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBhZGRvbmUgPSBfYWRkX29uZV90b19pbmRleF9DOworICAgICAgICBhZGRvbmUgPSBfUHlfYWRkX29uZV90b19pbmRleF9DOwogICAgIH0KICAgICBzcmMgPSBidWY7CiAgICAgLyogWFhYIDogVGhpcyBpcyBub3QgZ29pbmcgdG8gYmUgdGhlIGZhc3Rlc3QgY29kZSBpbiB0aGUgd29ybGQKQEAgLTYzOCw3ICs2NDEsNyBAQAogICAgICAgICBlbGVtZW50cyAqPSB2aWV3X3NyYy5zaGFwZVtrXTsKICAgICB9CiAgICAgd2hpbGUgKGVsZW1lbnRzLS0pIHsKLSAgICAgICAgX2FkZF9vbmVfdG9faW5kZXhfQyh2aWV3X3NyYy5uZGltLCBpbmRpY2VzLCB2aWV3X3NyYy5zaGFwZSk7CisgICAgICAgIF9QeV9hZGRfb25lX3RvX2luZGV4X0Modmlld19zcmMubmRpbSwgaW5kaWNlcywgdmlld19zcmMuc2hhcGUpOwogICAgICAgICBkcHRyID0gUHlCdWZmZXJfR2V0UG9pbnRlcigmdmlld19kZXN0LCBpbmRpY2VzKTsKICAgICAgICAgc3B0ciA9IFB5QnVmZmVyX0dldFBvaW50ZXIoJnZpZXdfc3JjLCBpbmRpY2VzKTsKICAgICAgICAgbWVtY3B5KGRwdHIsIHNwdHIsIHZpZXdfc3JjLml0ZW1zaXplKTsKQEAgLTcyMCwxOSArNzIzLDEyIEBACiBQeU9iamVjdCAqCiBQeU9iamVjdF9Gb3JtYXQoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QgKmZvcm1hdF9zcGVjKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqIHN0cl9fZm9ybWF0X18gPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbXB0eSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgIGludCBzcGVjX2lzX3VuaWNvZGU7CiAgICAgaW50IHJlc3VsdF9pc191bmljb2RlOwotCi0gICAgLyogSW5pdGlhbGl6ZSBjYWNoZWQgdmFsdWUgKi8KLSAgICBpZiAoc3RyX19mb3JtYXRfXyA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlIG5lZWRlZCBieSBfUHlUeXBlX0xvb2t1cCAqLwotICAgICAgICBzdHJfX2Zvcm1hdF9fID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19mb3JtYXRfXyIpOwotICAgICAgICBpZiAoc3RyX19mb3JtYXRfXyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBkb25lOwotICAgIH0KKyNlbmRpZgogCiAgICAgLyogSWYgbm8gZm9ybWF0X3NwZWMgaXMgcHJvdmlkZWQsIHVzZSBhbiBlbXB0eSBzdHJpbmcgKi8KICAgICBpZiAoZm9ybWF0X3NwZWMgPT0gTlVMTCkgewpAQCAtNzQxLDkxICs3MzcsMTIxIEBACiAgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIGZvcm1hdF9zcGVjIHR5cGUsIGFuZCBtYWtlIHN1cmUgaXQncyBzdHIgb3IgdW5pY29kZSAqLworI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGZvcm1hdF9zcGVjKSkKICAgICAgICAgc3BlY19pc191bmljb2RlID0gMTsKICAgICBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhmb3JtYXRfc3BlYykpCiAgICAgICAgIHNwZWNfaXNfdW5pY29kZSA9IDA7CiAgICAgZWxzZSB7CisjZWxzZQorICAgIGlmICghUHlTdHJpbmdfQ2hlY2soZm9ybWF0X3NwZWMpKSB7CisjZW5kaWYKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgZXhwZWN0cyBhcmcgMiB0byBiZSBzdHJpbmcgIgogICAgICAgICAgICAgICAgICAgICAgIm9yIHVuaWNvZGUsIG5vdCAlLjEwMHMiLCBQeV9UWVBFKGZvcm1hdF9zcGVjKS0+dHBfbmFtZSk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICAvKiBNYWtlIHN1cmUgdGhlIHR5cGUgaXMgaW5pdGlhbGl6ZWQuICBmbG9hdCBnZXRzIGluaXRpYWxpemVkIGxhdGUgKi8KLSAgICBpZiAoUHlfVFlQRShvYmopLT50cF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGlmIChQeVR5cGVfUmVhZHkoUHlfVFlQRShvYmopKSA8IDApCi0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0KICAgICAvKiBDaGVjayBmb3IgYSBfX2Zvcm1hdF9fIG1ldGhvZCBhbmQgY2FsbCBpdC4gKi8KICAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhvYmopKSB7CiAgICAgICAgIC8qIFdlJ3JlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3NpYyBjbGFzcyAqLwotICAgICAgICBQeU9iamVjdCAqYm91bmRfbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0cihvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9fZm9ybWF0X18pOworICAgICAgICBQeU9iamVjdCAqYm91bmRfbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosICJfX2Zvcm1hdF9fIik7CiAgICAgICAgIGlmIChib3VuZF9tZXRob2QgIT0gTlVMTCkgewogICAgICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhib3VuZF9tZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihib3VuZF9tZXRob2QpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3QgKnNlbGZfYXNfc3RyOwotICAgICAgICAgICAgUHlPYmplY3QgKmZvcm1hdF9tZXRob2Q7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VsZl9hc19zdHIgPSBOVUxMOworICAgICAgICAgICAgUHlPYmplY3QgKmZvcm1hdF9tZXRob2QgPSBOVUxMOworICAgICAgICAgICAgUHlfc3NpemVfdCBmb3JtYXRfbGVuOwogCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgLyogUGVyIHRoZSBQRVAsIGNvbnZlcnQgdG8gc3RyIChvciB1bmljb2RlLAogICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHRoZSBmb3JtYXQKICAgICAgICAgICAgICAgIHNwZWNpZmllcikuICBGb3IgbmV3LXN0eWxlIGNsYXNzZXMsIHRoaXMKICAgICAgICAgICAgICAgIGxvZ2ljIGlzIGRvbmUgYnkgb2JqZWN0Ll9fZm9ybWF0X18oKS4gKi8KLSAgICAgICAgICAgIGlmIChzcGVjX2lzX3VuaWNvZGUpCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorICAgICAgICAgICAgaWYgKHNwZWNfaXNfdW5pY29kZSkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9sZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUoZm9ybWF0X3NwZWMpOwogICAgICAgICAgICAgICAgIHNlbGZfYXNfc3RyID0gUHlPYmplY3RfVW5pY29kZShvYmopOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoZm9ybWF0X3NwZWMpOwogICAgICAgICAgICAgICAgIHNlbGZfYXNfc3RyID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc2VsZl9hc19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgZ290byBkb25lMTsKKworICAgICAgICAgICAgaWYgKGZvcm1hdF9sZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgLyogU2VlIHRoZSBhbG1vc3QgaWRlbnRpY2FsIGNvZGUgaW4KKyAgICAgICAgICAgICAgICAgICB0eXBlb2JqZWN0LmMgZm9yIG5ldy1zdHlsZQorICAgICAgICAgICAgICAgICAgIGNsYXNzZXMuICovCisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkKKyAgICAgICAgICAgICAgICAgICAgIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmUxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZWNvbWUgYW4KKyAgICAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICJub24tZW1wdHkgZm9ybWF0IHN0cmluZyBwYXNzZWQgdG8gIgorICAgICAgICAgICAgICAgICAgICJvYmplY3QuX19mb3JtYXRfXyIpOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTE7CisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogVGhlbiBjYWxsIHN0ci5fX2Zvcm1hdF9fIG9uIHRoYXQgcmVzdWx0ICovCi0gICAgICAgICAgICBmb3JtYXRfbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0cihzZWxmX2FzX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9fZm9ybWF0X18pOworICAgICAgICAgICAgZm9ybWF0X21ldGhvZCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZl9hc19zdHIsICJfX2Zvcm1hdF9fIik7CiAgICAgICAgICAgICBpZiAoZm9ybWF0X21ldGhvZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlbGZfYXNfc3RyKTsKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgZ290byBkb25lMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZm9ybWF0X21ldGhvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlbGZfYXNfc3RyKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXRfbWV0aG9kKTsKK2RvbmUxOgorICAgICAgICAgICAgUHlfWERFQ1JFRihzZWxmX2FzX3N0cik7CisgICAgICAgICAgICBQeV9YREVDUkVGKGZvcm1hdF9tZXRob2QpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIE5vdCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzaWMgY2xhc3MsIHVzZSB0aGUgY29kZQogICAgICAgICAgICBmcm9tIHB5M2sgKi8KKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpmb3JtYXRfY2FjaGUgPSBOVUxMOwogCiAgICAgICAgIC8qIEZpbmQgdGhlICh1bmJvdW5kISkgX19mb3JtYXRfXyBtZXRob2QgKGEgYm9ycm93ZWQKICAgICAgICAgICAgcmVmZXJlbmNlKSAqLwotICAgICAgICBQeU9iamVjdCAqbWV0aG9kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX19mb3JtYXRfXyk7CisgICAgICAgIFB5T2JqZWN0ICptZXRob2QgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICJfX2Zvcm1hdF9fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXRfY2FjaGUpOwogICAgICAgICBpZiAobWV0aG9kID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fZm9ybWF0X18iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fZm9ybWF0X18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9Ci0gICAgICAgIC8qIEFuZCBjYWxsIGl0LCBiaW5kaW5nIGl0IHRvIHRoZSB2YWx1ZSAqLwotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKG1ldGhvZCwgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLCBOVUxMKTsKKyAgICAgICAgLyogQW5kIGNhbGwgaXQuICovCisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWV0aG9kLCBmb3JtYXRfc3BlYywgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihtZXRob2QpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwogCiAgICAgLyogQ2hlY2sgdGhlIHJlc3VsdCB0eXBlLCBhbmQgbWFrZSBzdXJlIGl0J3Mgc3RyIG9yIHVuaWNvZGUgKi8KKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhyZXN1bHQpKQogICAgICAgICByZXN1bHRfaXNfdW5pY29kZSA9IDE7CiAgICAgZWxzZSBpZiAoUHlTdHJpbmdfQ2hlY2socmVzdWx0KSkKICAgICAgICAgcmVzdWx0X2lzX3VuaWNvZGUgPSAwOwogICAgIGVsc2UgeworI2Vsc2UKKyAgICBpZiAoIVB5U3RyaW5nX0NoZWNrKHJlc3VsdCkpIHsKKyNlbmRpZgogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIiUuMTAwcy5fX2Zvcm1hdF9fIG11c3QgcmV0dXJuIHN0cmluZyBvciAiCiAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZSwgbm90ICUuMTAwcyIsIFB5X1RZUEUob2JqKS0+dHBfbmFtZSwKQEAgLTgzNywxMiArODYzLDE0IEBACiAKICAgICAvKiBDb252ZXJ0IHRvIHVuaWNvZGUsIGlmIG5lZWRlZC4gIFJlcXVpcmVkIGlmIHNwZWMgaXMgdW5pY29kZQogICAgICAgIGFuZCByZXN1bHQgaXMgc3RyICovCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgIGlmIChzcGVjX2lzX3VuaWNvZGUgJiYgIXJlc3VsdF9pc191bmljb2RlKSB7CiAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU9iamVjdF9Vbmljb2RlKHJlc3VsdCk7CiAgICAgICAgIC8qIFRoaXMgbG9naWMgd29ya3Mgd2hldGhlciBvciBub3QgdG1wIGlzIE5VTEwgKi8KICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJlc3VsdCA9IHRtcDsKICAgICB9CisjZW5kaWYKIAogZG9uZToKICAgICBQeV9YREVDUkVGKGVtcHR5KTsKQEAgLTE2ODUsNyArMTcxMywxNCBAQAogICAgIGlmIChtICYmIG0tPm5iX2xvbmcpIHsgLyogVGhpcyBzaG91bGQgaW5jbHVkZSBzdWJjbGFzc2VzIG9mIGxvbmcgKi8KICAgICAgICAgLyogQ2xhc3NpYyBjbGFzc2VzIGFsd2F5cyB0YWtlIHRoaXMgYnJhbmNoLiAqLwogICAgICAgICBQeU9iamVjdCAqcmVzID0gbS0+bmJfbG9uZyhvKTsKLSAgICAgICAgaWYgKHJlcyAmJiAoIVB5SW50X0NoZWNrKHJlcykgJiYgIVB5TG9uZ19DaGVjayhyZXMpKSkgeworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5SW50X0NoZWNrKHJlcykpIHsKKyAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUludF9BU19MT05HKHJlcyk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFQeUxvbmdfQ2hlY2socmVzKSkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb25nX18gcmV0dXJuZWQgbm9uLWxvbmcgKHR5cGUgJS4yMDBzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLT5vYl90eXBlLT50cF9uYW1lKTsKQEAgLTE3OTEsMTEgKzE4MjYsMTMgQEAKIGludAogUHlTZXF1ZW5jZV9DaGVjayhQeU9iamVjdCAqcykKIHsKLSAgICBpZiAocyAmJiBQeUluc3RhbmNlX0NoZWNrKHMpKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfSGFzQXR0clN0cmluZyhzLCAiX19nZXRpdGVtX18iKTsKLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShzLCAoUHlPYmplY3QgKikmUHlEaWN0X1R5cGUpKQorICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzICE9IE5VTEwgJiYgcy0+b2JfdHlwZS0+dHBfYXNfc2VxdWVuY2UgJiYKKyAgICBpZiAoUHlJbnN0YW5jZV9DaGVjayhzKSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcocywgIl9fZ2V0aXRlbV9fIik7CisgICAgaWYgKFB5RGljdF9DaGVjayhzKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuICBzLT5vYl90eXBlLT50cF9hc19zZXF1ZW5jZSAmJgogICAgICAgICBzLT5vYl90eXBlLT50cF9hc19zZXF1ZW5jZS0+c3FfaXRlbSAhPSBOVUxMOwogfQogCkBAIC0yODg5LDcgKzI5MjYsNiBAQAogUHlPYmplY3RfSXNJbnN0YW5jZShQeU9iamVjdCAqaW5zdCwgUHlPYmplY3QgKmNscykKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKm5hbWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpjaGVja2VyOwogCiAgICAgLyogUXVpY2sgdGVzdCBmb3IgYW4gZXhhY3QgbWF0Y2ggKi8KICAgICBpZiAoUHlfVFlQRShpbnN0KSA9PSAoUHlUeXBlT2JqZWN0ICopY2xzKQpAQCAtMjkxMywyOSArMjk0OSwyOCBAQAogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKICAgICAgICAgcmV0dXJuIHI7CiAgICAgfQotICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICAgICAgbmFtZSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9faW5zdGFuY2VjaGVja19fIik7Ci0gICAgICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNoZWNrZXIgPSBQeU9iamVjdF9HZXRBdHRyKGNscywgbmFtZSk7Ci0gICAgaWYgKGNoZWNrZXIgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIGlmIChjaGVja2VyICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnJlczsKLSAgICAgICAgaW50IG9rID0gLTE7Ci0gICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiBpbiBfX2luc3RhbmNlY2hlY2tfXyIpKSB7CisKKyAgICBpZiAoIShQeUNsYXNzX0NoZWNrKGNscykgfHwgUHlJbnN0YW5jZV9DaGVjayhjbHMpKSkgeworICAgICAgICBQeU9iamVjdCAqY2hlY2tlcjsKKyAgICAgICAgY2hlY2tlciA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKGNscywgIl9faW5zdGFuY2VjaGVja19fIiwgJm5hbWUpOworICAgICAgICBpZiAoY2hlY2tlciAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaW50IG9rID0gLTE7CisgICAgICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgaW4gX19pbnN0YW5jZWNoZWNrX18iKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNoZWNrZXIsIGluc3QsIE5VTEwpOworICAgICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoY2hlY2tlcik7CisgICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBvayA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG9rOwogICAgICAgICB9Ci0gICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgaW5zdCwgTlVMTCk7Ci0gICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBQeV9ERUNSRUYoY2hlY2tlcik7Ci0gICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgb2sgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvazsKKyAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIHJlY3Vyc2l2ZV9pc2luc3RhbmNlKGluc3QsIGNscyk7CiB9CkBAIC0yOTc0LDggKzMwMDksNiBAQAogUHlPYmplY3RfSXNTdWJjbGFzcyhQeU9iamVjdCAqZGVyaXZlZCwgUHlPYmplY3QgKmNscykKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKm5hbWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0LCAqdiwgKnRiOwotICAgIFB5T2JqZWN0ICpjaGVja2VyOwogCiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soY2xzKSkgewogICAgICAgICBQeV9zc2l6ZV90IGk7CkBAIC0yOTk1LDI5ICszMDI4LDI4IEBACiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwogICAgICAgICByZXR1cm4gcjsKICAgICB9Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICBuYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiX19zdWJjbGFzc2NoZWNrX18iKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOwotICAgIGNoZWNrZXIgPSBQeU9iamVjdF9HZXRBdHRyKGNscywgbmFtZSk7Ci0gICAgUHlFcnJfUmVzdG9yZSh0LCB2LCB0Yik7Ci0gICAgaWYgKGNoZWNrZXIgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqcmVzOwotICAgICAgICBpbnQgb2sgPSAtMTsKLSAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIGluIF9fc3ViY2xhc3NjaGVja19fIikpIHsKKyAgICBpZiAoIShQeUNsYXNzX0NoZWNrKGNscykgfHwgUHlJbnN0YW5jZV9DaGVjayhjbHMpKSkgeworICAgICAgICBQeU9iamVjdCAqY2hlY2tlcjsKKyAgICAgICAgY2hlY2tlciA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKGNscywgIl9fc3ViY2xhc3NjaGVja19fIiwgJm5hbWUpOworICAgICAgICBpZiAoY2hlY2tlciAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaW50IG9rID0gLTE7CisgICAgICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgaW4gX19zdWJjbGFzc2NoZWNrX18iKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjaGVja2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNoZWNrZXIsIGRlcml2ZWQsIE5VTEwpOworICAgICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoY2hlY2tlcik7CisgICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBvayA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG9rOwogICAgICAgICB9Ci0gICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgZGVyaXZlZCwgTlVMTCk7Ci0gICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBQeV9ERUNSRUYoY2hlY2tlcik7Ci0gICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgb2sgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG9rOwogICAgIH0KICAgICByZXR1cm4gcmVjdXJzaXZlX2lzc3ViY2xhc3MoZGVyaXZlZCwgY2xzKTsKIH0KQEAgLTMwNzIsNyArMzEwNCw2IEBACiBQeUl0ZXJfTmV4dChQeU9iamVjdCAqaXRlcikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGFzc2VydChQeUl0ZXJfQ2hlY2soaXRlcikpOwogICAgIHJlc3VsdCA9ICgqaXRlci0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKGl0ZXIpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCAmJgogICAgICAgICBQeUVycl9PY2N1cnJlZCgpICYmCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwppbmRleCAzODc3YzZmLi44NjA5Mzk1IDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKQEAgLTUsMjQgKzUsMTYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJieXRlc19tZXRob2RzLmgiCiAKLXN0YXRpYyBQeUJ5dGVBcnJheU9iamVjdCAqbnVsbGJ5dGVzID0gTlVMTDsKIGNoYXIgX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZ1tdID0gIiI7CiAKIHZvaWQKIFB5Qnl0ZUFycmF5X0Zpbmkodm9pZCkKIHsKLSAgICBQeV9DTEVBUihudWxsYnl0ZXMpOwogfQogCiBpbnQKIFB5Qnl0ZUFycmF5X0luaXQodm9pZCkKIHsKLSAgICBudWxsYnl0ZXMgPSBQeU9iamVjdF9OZXcoUHlCeXRlQXJyYXlPYmplY3QsICZQeUJ5dGVBcnJheV9UeXBlKTsKLSAgICBpZiAobnVsbGJ5dGVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIG51bGxieXRlcy0+b2JfYnl0ZXMgPSBOVUxMOwotICAgIFB5X1NJWkUobnVsbGJ5dGVzKSA9IG51bGxieXRlcy0+b2JfYWxsb2MgPSAwOwotICAgIG51bGxieXRlcy0+b2JfZXhwb3J0cyA9IDA7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTY4LDcgKzYwLDcgQEAKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLWJ5dGVzX2J1ZmZlcl9nZXRyZWFkYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcHRyKQorYnl0ZWFycmF5X2J1ZmZlcl9nZXRyZWFkYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcHRyKQogewogICAgIGlmICggaW5kZXggIT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtODAsNyArNzIsNyBAQAogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotYnl0ZXNfYnVmZmVyX2dldHdyaXRlYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCB2b2lkICoqcHRyKQorYnl0ZWFycmF5X2J1ZmZlcl9nZXR3cml0ZWJ1ZihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgY29uc3Qgdm9pZCAqKnB0cikKIHsKICAgICBpZiAoIGluZGV4ICE9IDAgKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTkyLDcgKzg0LDcgQEAKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLWJ5dGVzX2J1ZmZlcl9nZXRzZWdjb3VudChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCAqbGVucCkKK2J5dGVhcnJheV9idWZmZXJfZ2V0c2VnY291bnQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgKmxlbnApCiB7CiAgICAgaWYgKCBsZW5wICkKICAgICAgICAgKmxlbnAgPSBQeV9TSVpFKHNlbGYpOwpAQCAtMTAwLDcgKzkyLDcgQEAKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLWJ5dGVzX2J1ZmZlcl9nZXRjaGFyYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCBjaGFyICoqcHRyKQorYnl0ZWFycmF5X2J1ZmZlcl9nZXRjaGFyYnVmKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBjb25zdCBjaGFyICoqcHRyKQogewogICAgIGlmICggaW5kZXggIT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMTEyLDcgKzEwNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ5dGVzX2dldGJ1ZmZlcihQeUJ5dGVBcnJheU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKK2J5dGVhcnJheV9nZXRidWZmZXIoUHlCeXRlQXJyYXlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCiB7CiAgICAgaW50IHJldDsKICAgICB2b2lkICpwdHI7CkBAIC0xMjksNyArMTIxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJ5dGVzX3JlbGVhc2VidWZmZXIoUHlCeXRlQXJyYXlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KQorYnl0ZWFycmF5X3JlbGVhc2VidWZmZXIoUHlCeXRlQXJyYXlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KQogewogICAgIG9iai0+b2JfZXhwb3J0cy0tOwogfQpAQCAtMjk2LDcgKzI4OCw3IEBACiAKICAgICBzaXplID0gdmEubGVuICsgdmIubGVuOwogICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KIApAQCAtMzE3LDEzICszMDksMTMgQEAKIC8qIEZ1bmN0aW9ucyBzdHVmZmVkIGludG8gdGhlIHR5cGUgb2JqZWN0ICovCiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1ieXRlc19sZW5ndGgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCitieXRlYXJyYXlfbGVuZ3RoKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewogICAgIHJldHVybiBQeV9TSVpFKHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaWNvbmNhdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyKQorYnl0ZWFycmF5X2ljb25jYXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlcikKIHsKICAgICBQeV9zc2l6ZV90IG15c2l6ZTsKICAgICBQeV9zc2l6ZV90IHNpemU7CkBAIC0zNTYsNyArMzQ4LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JlcGVhdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBjb3VudCkKK2J5dGVhcnJheV9yZXBlYXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgY291bnQpCiB7CiAgICAgUHlCeXRlQXJyYXlPYmplY3QgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IG15c2l6ZTsKQEAgLTM4Miw3ICszNzQsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaXJlcGVhdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBjb3VudCkKK2J5dGVhcnJheV9pcmVwZWF0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGNvdW50KQogewogICAgIFB5X3NzaXplX3QgbXlzaXplOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKQEAgLTQxMyw3ICs0MDUsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfZ2V0aXRlbShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpKQorYnl0ZWFycmF5X2dldGl0ZW0oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDApCiAgICAgICAgIGkgKz0gUHlfU0laRShzZWxmKTsKQEAgLTQyNSw3ICs0MTcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgpCitieXRlYXJyYXlfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgpCiB7CiAgICAgaWYgKFB5SW5kZXhfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpbmRleCwgUHlFeGNfSW5kZXhFcnJvcik7CkBAIC00ODAsNyArNDcyLDcgQEAKIH0KIAogc3RhdGljIGludAotYnl0ZXNfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCitieXRlYXJyYXlfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCiAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWVzKQogewogICAgIFB5X3NzaXplX3QgYXZhaWwsIG5lZWRlZDsKQEAgLTQ5NSw3ICs0ODcsNyBAQAogICAgICAgICB2YWx1ZXMgPSBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KHZhbHVlcyk7CiAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZXJyID0gYnl0ZXNfc2V0c2xpY2Uoc2VsZiwgbG8sIGhpLCB2YWx1ZXMpOworICAgICAgICBlcnIgPSBieXRlYXJyYXlfc2V0c2xpY2Uoc2VsZiwgbG8sIGhpLCB2YWx1ZXMpOwogICAgICAgICBQeV9ERUNSRUYodmFsdWVzKTsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9CkBAIC01NzAsNyArNTYyLDcgQEAKIH0KIAogc3RhdGljIGludAotYnl0ZXNfc2V0aXRlbShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqdmFsdWUpCitieXRlYXJyYXlfc2V0aXRlbShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgaW50IGl2YWw7CiAKQEAgLTU4Myw3ICs1NzUsNyBAQAogICAgIH0KIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gYnl0ZXNfc2V0c2xpY2Uoc2VsZiwgaSwgaSsxLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIGJ5dGVhcnJheV9zZXRzbGljZShzZWxmLCBpLCBpKzEsIE5VTEwpOwogCiAgICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlLCAmaXZhbCkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTU5Myw3ICs1ODUsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1ieXRlc19hc3Nfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZXMpCitieXRlYXJyYXlfYXNzX3N1YnNjcmlwdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmluZGV4LCBQeU9iamVjdCAqdmFsdWVzKQogewogICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBuZWVkZWQ7CiAgICAgY2hhciAqYnl0ZXM7CkBAIC02NDQsMTIgKzYzNiwxMiBAQAogICAgICAgICBuZWVkZWQgPSAwOwogICAgIH0KICAgICBlbHNlIGlmICh2YWx1ZXMgPT0gKFB5T2JqZWN0ICopc2VsZiB8fCAhUHlCeXRlQXJyYXlfQ2hlY2sodmFsdWVzKSkgewotICAgICAgICAvKiBNYWtlIGEgY29weSBhbiBjYWxsIHRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgKi8KKyAgICAgICAgLyogTWFrZSBhIGNvcHkgYW5kIGNhbGwgdGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSAqLwogICAgICAgICBpbnQgZXJyOwogICAgICAgICB2YWx1ZXMgPSBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KHZhbHVlcyk7CiAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZXJyID0gYnl0ZXNfYXNzX3N1YnNjcmlwdChzZWxmLCBpbmRleCwgdmFsdWVzKTsKKyAgICAgICAgZXJyID0gYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQoc2VsZiwgaW5kZXgsIHZhbHVlcyk7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZXMpOwogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KQEAgLTc1MSw3ICs3NDMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1ieXRlc19pbml0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitieXRlYXJyYXlfaW5pdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic291cmNlIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIFB5T2JqZWN0ICphcmcgPSBOVUxMOwpAQCAtNzk0LDcgKzc4Niw3IEBACiAgICAgICAgICAgICBlbmNvZGVkID0gYXJnOwogICAgICAgICAgICAgUHlfSU5DUkVGKGFyZyk7CiAgICAgICAgIH0KLSAgICAgICAgbmV3ID0gYnl0ZXNfaWNvbmNhdChzZWxmLCBhcmcpOworICAgICAgICBuZXcgPSBieXRlYXJyYXlfaWNvbmNhdChzZWxmLCBhcmcpOwogICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgICAgIGlmIChuZXcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTgwMiw2ICs3OTQsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhhcmcpKSB7CiAgICAgICAgIC8qIEVuY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCiAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqbmV3OwpAQCAtODE0LDEzICs4MDcsMTQgQEAKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2soZW5jb2RlZCkpOwotICAgICAgICBuZXcgPSBieXRlc19pY29uY2F0KHNlbGYsIGVuY29kZWQpOworICAgICAgICBuZXcgPSBieXRlYXJyYXlfaWNvbmNhdChzZWxmLCBlbmNvZGVkKTsKICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwogICAgICAgICBpZiAobmV3ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisjZW5kaWYKIAogICAgIC8qIElmIGl0J3Mgbm90IHVuaWNvZGUsIHRoZXJlIGNhbid0IGJlIGVuY29kaW5nIG9yIGVycm9ycyAqLwogICAgIGlmIChlbmNvZGluZyAhPSBOVUxMIHx8IGVycm9ycyAhPSBOVUxMKSB7CkBAIC05MTcsNyArOTExLDcgQEAKIC8qIE1vc3RseSBjb3BpZWQgZnJvbSBzdHJpbmdfcmVwciwgYnV0IHdpdGhvdXQgdGhlCiAgICAic21hcnQgcXVvdGUiIGZ1bmN0aW9uYWxpdHkuICovCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9yZXByKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyICpoZXhkaWdpdHMgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgY29uc3QgY2hhciAqcXVvdGVfcHJlZml4ID0gImJ5dGVhcnJheShiIjsKQEAgLTkzMiwxNCArOTI2LDE0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBuZXdzaXplID0gMTQgKyA0ICogbGVuZ3RoOwotICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgbmV3c2l6ZSk7CisgICAgdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG5ld3NpemUpOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgYzsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSAqcDsKKyAgICAgICAgcmVnaXN0ZXIgY2hhciBjOworICAgICAgICByZWdpc3RlciBjaGFyICpwOwogICAgICAgICBpbnQgcXVvdGU7CiAKICAgICAgICAgLyogRmlndXJlIG91dCB3aGljaCBxdW90ZSB0byB1c2U7IHNpbmdsZSBpcyBwcmVmZXJyZWQgKi8KQEAgLTk1OSw3ICs5NTMsNyBAQAogICAgICAgICAgICAgOwogICAgICAgICB9CiAKLSAgICAgICAgcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHYpOworICAgICAgICBwID0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpOwogICAgICAgICB3aGlsZSAoKnF1b3RlX3ByZWZpeCkKICAgICAgICAgICAgICpwKysgPSAqcXVvdGVfcHJlZml4Kys7CiAgICAgICAgICpwKysgPSBxdW90ZTsKQEAgLTk2Nyw3ICs5NjEsNyBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZQogICAgICAgICAgICAgICAgYW5kIGEgY2xvc2luZyBxdW90ZS4gKi8KLSAgICAgICAgICAgIGFzc2VydChuZXdzaXplIC0gKHAgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSkgPj0gNSk7CisgICAgICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpKSA+PSA1KTsKICAgICAgICAgICAgIGMgPSBzZWxmLT5vYl9ieXRlc1tpXTsKICAgICAgICAgICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnXFwnKQogICAgICAgICAgICAgICAgICpwKysgPSAnXFwnLCAqcCsrID0gYzsKQEAgLTk4OCwxMyArOTgyLDEzIEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KG5ld3NpemUgLSAocCAtIFB5VW5pY29kZV9BU19VTklDT0RFKHYpKSA+PSAxKTsKKyAgICAgICAgYXNzZXJ0KG5ld3NpemUgLSAocCAtIFB5U3RyaW5nX0FTX1NUUklORyh2KSkgPj0gMSk7CiAgICAgICAgICpwKysgPSBxdW90ZTsKICAgICAgICAgd2hpbGUgKCpxdW90ZV9wb3N0Zml4KSB7CiAgICAgICAgICAgICpwKysgPSAqcXVvdGVfcG9zdGZpeCsrOwogICAgICAgICB9CiAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJnYsIChwIC0gUHlVbmljb2RlX0FTX1VOSUNPREUodikpKSkgeworICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgKHAgLSBQeVN0cmluZ19BU19TVFJJTkcodikpKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTEwMDMsNyArOTk3LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3N0cihQeU9iamVjdCAqb3ApCitieXRlYXJyYXlfc3RyKFB5T2JqZWN0ICpvcCkKIHsKICNpZiAwCiAgICAgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcpIHsKQEAgLTEwMTEsMTMgKzEwMDUsMTMgQEAKICAgICAgICAgICAgICAgICAgInN0cigpIG9uIGEgYnl0ZWFycmF5IGluc3RhbmNlIiwgMSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIGJ5dGVzX3JlcHIoKFB5Qnl0ZUFycmF5T2JqZWN0KilvcCk7CisgICAgcmV0dXJuIGJ5dGVhcnJheV9yZXByKChQeUJ5dGVBcnJheU9iamVjdCopb3ApOwogI2VuZGlmCiAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKChQeUJ5dGVBcnJheU9iamVjdCopb3ApLT5vYl9ieXRlcywgUHlfU0laRShvcCkpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQorYnl0ZWFycmF5X3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKIHsKICAgICBQeV9zc2l6ZV90IHNlbGZfc2l6ZSwgb3RoZXJfc2l6ZTsKICAgICBQeV9idWZmZXIgc2VsZl9ieXRlcywgb3RoZXJfYnl0ZXM7CkBAIC0xMDI4LDYgKzEwMjIsNyBAQAogICAgIC8qIEJ5dGVzIGNhbiBiZSBjb21wYXJlZCB0byBhbnl0aGluZyB0aGF0IHN1cHBvcnRzIHRoZSAoYmluYXJ5KQogICAgICAgIGJ1ZmZlciBBUEkuICBFeGNlcHQgdGhhdCBhIGNvbXBhcmlzb24gd2l0aCBVbmljb2RlIGlzIGFsd2F5cyBhbgogICAgICAgIGVycm9yLCBldmVuIGlmIHRoZSBjb21wYXJpc29uIGlzIGZvciBlcXVhbGl0eS4gKi8KKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2Uoc2VsZiwgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpIHx8CiAgICAgICAgIFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKSkgewogICAgICAgICBpZiAoUHlfQnl0ZXNXYXJuaW5nRmxhZyAmJiBvcCA9PSBQeV9FUSkgewpAQCAtMTAzOSw2ICsxMDM0LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKICAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwogICAgIH0KKyNlbmRpZgogCiAgICAgc2VsZl9zaXplID0gX2dldGJ1ZmZlcihzZWxmLCAmc2VsZl9ieXRlcyk7CiAgICAgaWYgKHNlbGZfc2l6ZSA8IDApIHsKQEAgLTEwOTIsMTMgKzEwODgsMTMgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJ5dGVzX2RlYWxsb2MoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCitieXRlYXJyYXlfZGVhbGxvYyhQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKIHsKLQlpZiAoc2VsZi0+b2JfZXhwb3J0cyA+IDApIHsKLQkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgIGlmIChzZWxmLT5vYl9leHBvcnRzID4gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVhbGxvY2F0ZWQgYnl0ZWFycmF5IG9iamVjdCBoYXMgZXhwb3J0ZWQgYnVmZmVycyIpOwotCQlQeUVycl9QcmludCgpOwotCX0KKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICB9CiAgICAgaWYgKHNlbGYtPm9iX2J5dGVzICE9IDApIHsKICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5vYl9ieXRlcyk7CiAgICAgfQpAQCAtMTExMCwxOSArMTEwNiwxOSBAQAogLyogTWV0aG9kcyAqLwogCiAjZGVmaW5lIFNUUklOR0xJQl9DSEFSIGNoYXIKLSNkZWZpbmUgU1RSSU5HTElCX0NNUCBtZW1jbXAKICNkZWZpbmUgU1RSSU5HTElCX0xFTiBQeUJ5dGVBcnJheV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfU1RSIFB5Qnl0ZUFycmF5X0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTkVXIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCi0jZGVmaW5lIFNUUklOR0xJQl9FTVBUWSBudWxsYnl0ZXMKKyNkZWZpbmUgU1RSSU5HTElCX0lTU1BBQ0UgUHlfSVNTUEFDRQorI2RlZmluZSBTVFJJTkdMSUJfSVNMSU5FQlJFQUsoeCkgKCh4ID09ICdcbicpIHx8ICh4ID09ICdccicpKQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgUHlCeXRlQXJyYXlfQ2hlY2tFeGFjdAogI2RlZmluZSBTVFJJTkdMSUJfTVVUQUJMRSAxCi0jZGVmaW5lIEZST01fQllURUFSUkFZIDEKIAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIgogCkBAIC0xMTMwLDI0ICsxMTI2LDIzIEBACiAvKiBUaGUgZm9sbG93aW5nIFB5X0xPQ0FMX0lOTElORSBhbmQgUHlfTE9DQUwgZnVuY3Rpb25zCiB3ZXJlIGNvcGllZCBmcm9tIHRoZSBvbGQgY2hhciogc3R5bGUgc3RyaW5nIG9iamVjdC4gKi8KIAotUHlfTE9DQUxfSU5MSU5FKHZvaWQpCi1fYWRqdXN0X2luZGljZXMoUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKmVuZCwgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgaWYgKCplbmQgPiBsZW4pCi0gICAgICAgICplbmQgPSBsZW47Ci0gICAgZWxzZSBpZiAoKmVuZCA8IDApCi0gICAgICAgICplbmQgKz0gbGVuOwotICAgIGlmICgqZW5kIDwgMCkKLSAgICAgICAgKmVuZCA9IDA7Ci0gICAgaWYgKCpzdGFydCA8IDApCi0gICAgICAgICpzdGFydCArPSBsZW47Ci0gICAgaWYgKCpzdGFydCA8IDApCi0gICAgICAgICpzdGFydCA9IDA7Ci19Ci0KKy8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCisjZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCisgICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbmQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChzdGFydCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiBQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKLWJ5dGVzX2ZpbmRfaW50ZXJuYWwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBpbnQgZGlyKQorYnl0ZWFycmF5X2ZpbmRfaW50ZXJuYWwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBpbnQgZGlyKQogewogICAgIFB5T2JqZWN0ICpzdWJvYmo7CiAgICAgUHlfYnVmZmVyIHN1YmJ1ZjsKQEAgLTExODEsOSArMTE3Niw5IEBACiBSZXR1cm4gLTEgb24gZmFpbHVyZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2ZpbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2ZpbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gYnl0ZXNfZmluZF9pbnRlcm5hbChzZWxmLCBhcmdzLCArMSk7CisgICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlYXJyYXlfZmluZF9pbnRlcm5hbChzZWxmLCBhcmdzLCArMSk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHJlc3VsdCk7CkBAIC0xMTk3LDcgKzExOTIsNyBAQAogYXMgaW4gc2xpY2Ugbm90YXRpb24uIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19jb3VudChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfY291bnQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpzdWJfb2JqOwogICAgIGNvbnN0IGNoYXIgKnN0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKQEAgLTEyMTIsMTAgKzEyMDcsMTAgQEAKICAgICBpZiAoX2dldGJ1ZmZlcihzdWJfb2JqLCAmdnN1YikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9hZGp1c3RfaW5kaWNlcygmc3RhcnQsICZlbmQsIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSk7CiAKICAgICBjb3VudF9vYmogPSBQeUludF9Gcm9tU3NpemVfdCgKLSAgICAgICAgc3RyaW5nbGliX2NvdW50KHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgdnN1Yi5idWYsIHZzdWIubGVuKQorICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCB2c3ViLmJ1ZiwgdnN1Yi5sZW4sIFBZX1NTSVpFX1RfTUFYKQogICAgICAgICApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwogICAgIHJldHVybiBjb3VudF9vYmo7CkBAIC0xMjI4LDkgKzEyMjMsOSBAQAogTGlrZSBCLmZpbmQoKSBidXQgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBzdWJzZWN0aW9uIGlzIG5vdCBmb3VuZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2luZGV4KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9pbmRleChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlc19maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsICsxKTsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVhcnJheV9maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsICsxKTsKICAgICBpZiAocmVzdWx0ID09IC0yKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocmVzdWx0ID09IC0xKSB7CkBAIC0xMjUyLDkgKzEyNDcsOSBAQAogUmV0dXJuIC0xIG9uIGZhaWx1cmUuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZmluZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfcmZpbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gYnl0ZXNfZmluZF9pbnRlcm5hbChzZWxmLCBhcmdzLCAtMSk7CisgICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlYXJyYXlfZmluZF9pbnRlcm5hbChzZWxmLCBhcmdzLCAtMSk7CiAgICAgaWYgKHJlc3VsdCA9PSAtMikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHJlc3VsdCk7CkBAIC0xMjY3LDkgKzEyNjIsOSBAQAogTGlrZSBCLnJmaW5kKCkgYnV0IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgc3Vic2VjdGlvbiBpcyBub3QgZm91bmQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yaW5kZXgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JpbmRleChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCByZXN1bHQgPSBieXRlc19maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsIC0xKTsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IGJ5dGVhcnJheV9maW5kX2ludGVybmFsKHNlbGYsIGFyZ3MsIC0xKTsKICAgICBpZiAocmVzdWx0ID09IC0yKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocmVzdWx0ID09IC0xKSB7CkBAIC0xMjgyLDcgKzEyNzcsNyBAQAogCiAKIHN0YXRpYyBpbnQKLWJ5dGVzX2NvbnRhaW5zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorYnl0ZWFycmF5X2NvbnRhaW5zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5X3NzaXplX3QgaXZhbCA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX1ZhbHVlRXJyb3IpOwogICAgIGlmIChpdmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKQEAgLTEzMTAsNyArMTMwNSw3IEBACiAgKiAtMSBvbiBlcnJvciwgMCBpZiBub3QgZm91bmQgYW5kIDEgaWYgZm91bmQuCiAgKi8KIFB5X0xPQ0FMKGludCkKLV9ieXRlc190YWlsbWF0Y2goUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdWJzdHIsIFB5X3NzaXplX3Qgc3RhcnQsCitfYnl0ZWFycmF5X3RhaWxtYXRjaChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN1YnN0ciwgUHlfc3NpemVfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsIGludCBkaXJlY3Rpb24pCiB7CiAgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKTsKQEAgLTEzMjMsNyArMTMxOCw3IEBACiAgICAgaWYgKF9nZXRidWZmZXIoc3Vic3RyLCAmdnN1YnN0cikgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBfYWRqdXN0X2luZGljZXMoJnN0YXJ0LCAmZW5kLCBsZW4pOworICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbik7CiAKICAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewogICAgICAgICAvKiBzdGFydHN3aXRoICovCkBAIC0xMzU3LDcgKzEzNTIsNyBAQAogcHJlZml4IGNhbiBhbHNvIGJlIGEgdHVwbGUgb2Ygc3RyaW5ncyB0byB0cnkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19zdGFydHN3aXRoKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9zdGFydHN3aXRoKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKICAgICBQeV9zc2l6ZV90IGVuZCA9IFBZX1NTSVpFX1RfTUFYOwpAQCAtMTM3MCw3ICsxMzY1LDcgQEAKICAgICBpZiAoUHlUdXBsZV9DaGVjayhzdWJvYmopKSB7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoc3Vib2JqKTsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBfYnl0ZXNfdGFpbG1hdGNoKHNlbGYsCisgICAgICAgICAgICByZXN1bHQgPSBfYnl0ZWFycmF5X3RhaWxtYXRjaChzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKHN1Ym9iaiwgaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCkBAIC0xMzgxLDcgKzEzNzYsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9Ci0gICAgcmVzdWx0ID0gX2J5dGVzX3RhaWxtYXRjaChzZWxmLCBzdWJvYmosIHN0YXJ0LCBlbmQsIC0xKTsKKyAgICByZXN1bHQgPSBfYnl0ZWFycmF5X3RhaWxtYXRjaChzZWxmLCBzdWJvYmosIHN0YXJ0LCBlbmQsIC0xKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBlbHNlCkBAIC0xMzk3LDcgKzEzOTIsNyBAQAogc3VmZml4IGNhbiBhbHNvIGJlIGEgdHVwbGUgb2Ygc3RyaW5ncyB0byB0cnkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19lbmRzd2l0aChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZW5kc3dpdGgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CkBAIC0xNDEwLDcgKzE0MDUsNyBAQAogICAgIGlmIChQeVR1cGxlX0NoZWNrKHN1Ym9iaikpIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShzdWJvYmopOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9ieXRlc190YWlsbWF0Y2goc2VsZiwKKyAgICAgICAgICAgIHJlc3VsdCA9IF9ieXRlYXJyYXlfdGFpbG1hdGNoKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0oc3Vib2JqLCBpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKQEAgLTE0MjEsNyArMTQxNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KLSAgICByZXN1bHQgPSBfYnl0ZXNfdGFpbG1hdGNoKHNlbGYsIHN1Ym9iaiwgc3RhcnQsIGVuZCwgKzEpOworICAgIHJlc3VsdCA9IF9ieXRlYXJyYXlfdGFpbG1hdGNoKHNlbGYsIHN1Ym9iaiwgc3RhcnQsIGVuZCwgKzEpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGVsc2UKQEAgLTE0MzgsNyArMTQzMyw3IEBACiB0YWJsZSwgd2hpY2ggbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCBvZiBsZW5ndGggMjU2LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfdHJhbnNsYXRlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV90cmFuc2xhdGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHJlZ2lzdGVyIGNoYXIgKmlucHV0LCAqb3V0cHV0OwogICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnRhYmxlOwpAQCAtMTQ0NiwyOSArMTQ0MSwzNSBAQAogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0OwogICAgIFB5X3NzaXplX3QgaW5sZW47Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgdHJhbnNfdGFibGVbMjU2XTsKLSAgICBQeU9iamVjdCAqdGFibGVvYmosICpkZWxvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICp0YWJsZW9iaiA9IE5VTEwsICpkZWxvYmogPSBOVUxMOwogICAgIFB5X2J1ZmZlciB2dGFibGUsIHZkZWw7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJ0cmFuc2xhdGUiLCAxLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhYmxlb2JqLCAmZGVsb2JqKSkKICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfZ2V0YnVmZmVyKHRhYmxlb2JqLCAmdnRhYmxlKSA8IDApCisgICAgaWYgKHRhYmxlb2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgdGFibGUgPSBOVUxMOworICAgICAgICB0YWJsZW9iaiA9IE5VTEw7CisgICAgfSBlbHNlIGlmIChfZ2V0YnVmZmVyKHRhYmxlb2JqLCAmdnRhYmxlKSA8IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodnRhYmxlLmxlbiAhPSAyNTYpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNsYXRpb24gdGFibGUgbXVzdCBiZSAyNTYgY2hhcmFjdGVycyBsb25nIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh2dGFibGUubGVuICE9IDI1NikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYW5zbGF0aW9uIHRhYmxlIG11c3QgYmUgMjU2IGNoYXJhY3RlcnMgbG9uZyIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHRhYmxlID0gKGNvbnN0IGNoYXIqKXZ0YWJsZS5idWY7CiAgICAgfQogCiAgICAgaWYgKGRlbG9iaiAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGRlbG9iaiwgJnZkZWwpIDwgMCkgewotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKLQkgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBpZiAodGFibGVvYmogIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dGFibGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xNDc2LDcgKzE0NzcsNiBAQAogICAgICAgICB2ZGVsLmxlbiA9IDA7CiAgICAgfQogCi0gICAgdGFibGUgPSAoY29uc3QgY2hhciAqKXZ0YWJsZS5idWY7CiAgICAgaW5sZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShpbnB1dF9vYmopOwogICAgIHJlc3VsdCA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgaW5sZW4pOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKQEAgLTE0ODQsNyArMTQ4NCw3IEBACiAgICAgb3V0cHV0X3N0YXJ0ID0gb3V0cHV0ID0gUHlCeXRlQXJyYXlfQXNTdHJpbmcocmVzdWx0KTsKICAgICBpbnB1dCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhpbnB1dF9vYmopOwogCi0gICAgaWYgKHZkZWwubGVuID09IDApIHsKKyAgICBpZiAodmRlbC5sZW4gPT0gMCAmJiB0YWJsZSAhPSBOVUxMKSB7CiAgICAgICAgIC8qIElmIG5vIGRlbGV0aW9ucyBhcmUgcmVxdWlyZWQsIHVzZSBmYXN0ZXIgY29kZSAqLwogICAgICAgICBmb3IgKGkgPSBpbmxlbjsgLS1pID49IDA7ICkgewogICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCppbnB1dCsrKTsKQEAgLTE0OTIsOSArMTQ5MiwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9Ci0gICAgCi0gICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgICAgICB0cmFuc190YWJsZVtpXSA9IFB5X0NIQVJNQVNLKHRhYmxlW2ldKTsKKworICAgIGlmICh0YWJsZSA9PSBOVUxMKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICAgIHRyYW5zX3RhYmxlW2ldID0gUHlfQ0hBUk1BU0soaSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICAgICAgdHJhbnNfdGFibGVbaV0gPSBQeV9DSEFSTUFTSyh0YWJsZVtpXSk7CisgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSA8IHZkZWwubGVuOyBpKyspCiAgICAgICAgIHRyYW5zX3RhYmxlWyhpbnQpIFB5X0NIQVJNQVNLKCAoKHVuc2lnbmVkIGNoYXIqKXZkZWwuYnVmKVtpXSApXSA9IC0xOwpAQCAtMTUxMCwyNyArMTUxNSwxOSBAQAogICAgICAgICBQeUJ5dGVBcnJheV9SZXNpemUocmVzdWx0LCBvdXRwdXQgLSBvdXRwdXRfc3RhcnQpOwogCiBkb25lOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7CisgICAgaWYgKHRhYmxlb2JqICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7CiAgICAgaWYgKGRlbG9iaiAhPSBOVUxMKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2ZGVsKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKLSNkZWZpbmUgRk9SV0FSRCAxCi0jZGVmaW5lIFJFVkVSU0UgLTEKLQogLyogZmluZCBhbmQgY291bnQgY2hhcmFjdGVycyBhbmQgc3Vic3RyaW5ncyAqLwogCiAjZGVmaW5lIGZpbmRjaGFyKHRhcmdldCwgdGFyZ2V0X2xlbiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKGNoYXIgKiltZW1jaHIoKGNvbnN0IHZvaWQgKikodGFyZ2V0KSwgYywgdGFyZ2V0X2xlbikpCiAKLS8qIERvbid0IGNhbGwgaWYgbGVuZ3RoIDwgMiAqLwotI2RlZmluZSBQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBvZmZzZXQsIHBhdHRlcm4sIGxlbmd0aCkgICAgICAgIFwKLSAgKHRhcmdldFtvZmZzZXRdID09IHBhdHRlcm5bMF0gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB0YXJnZXRbb2Zmc2V0K2xlbmd0aC0xXSA9PSBwYXR0ZXJuW2xlbmd0aC0xXSAmJiAgICAgICAgICAgICAgXAotICAgIW1lbWNtcCh0YXJnZXQrb2Zmc2V0KzEsIHBhdHRlcm4rMSwgbGVuZ3RoLTIpICkKLQogCiAvKiBCeXRlcyBvcHMgbXVzdCByZXR1cm4gYSBzdHJpbmcsIGNyZWF0ZSBhIGNvcHkgKi8KIFB5X0xPQ0FMKFB5Qnl0ZUFycmF5T2JqZWN0ICopCkBAIC0xNTU3LDkzICsxNTU0LDYgQEAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLVB5X0xPQ0FMKFB5X3NzaXplX3QpCi1maW5kc3RyaW5nKGNvbnN0IGNoYXIgKnRhcmdldCwgUHlfc3NpemVfdCB0YXJnZXRfbGVuLAotICAgICAgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBQeV9zc2l6ZV90IHBhdHRlcm5fbGVuLAotICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LAotICAgICAgICAgICBQeV9zc2l6ZV90IGVuZCwKLSAgICAgICAgICAgaW50IGRpcmVjdGlvbikKLXsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIHN0YXJ0ICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgfQotICAgIGlmIChlbmQgPiB0YXJnZXRfbGVuKSB7Ci0gICAgICAgIGVuZCA9IHRhcmdldF9sZW47Ci0gICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7Ci0gICAgICAgIGVuZCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgICAgIGVuZCA9IDA7Ci0gICAgfQotCi0gICAgLyogemVyby1sZW5ndGggc3Vic3RyaW5ncyBhbHdheXMgbWF0Y2ggYXQgdGhlIGZpcnN0IGF0dGVtcHQgKi8KLSAgICBpZiAocGF0dGVybl9sZW4gPT0gMCkKLSAgICAgICAgcmV0dXJuIChkaXJlY3Rpb24gPiAwKSA/IHN0YXJ0IDogZW5kOwotCi0gICAgZW5kIC09IHBhdHRlcm5fbGVuOwotCi0gICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKLSAgICAgICAgZm9yICg7IGVuZCA+PSBzdGFydDsgZW5kLS0pCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgZW5kLCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVuZDsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKDsgc3RhcnQgPD0gZW5kOyBzdGFydCsrKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIHN0YXJ0LCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLVB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQotY291bnRzdHJpbmcoY29uc3QgY2hhciAqdGFyZ2V0LCBQeV9zc2l6ZV90IHRhcmdldF9sZW4sCi0gICAgICAgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBQeV9zc2l6ZV90IHBhdHRlcm5fbGVuLAotICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwKLSAgICAgICAgICAgIFB5X3NzaXplX3QgZW5kLAotICAgICAgICAgICAgaW50IGRpcmVjdGlvbiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICBQeV9zc2l6ZV90IGNvdW50PTA7Ci0KLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIHN0YXJ0ICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgfQotICAgIGlmIChlbmQgPiB0YXJnZXRfbGVuKSB7Ci0gICAgICAgIGVuZCA9IHRhcmdldF9sZW47Ci0gICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7Ci0gICAgICAgIGVuZCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgICAgIGVuZCA9IDA7Ci0gICAgfQotCi0gICAgLyogemVyby1sZW5ndGggc3Vic3RyaW5ncyBtYXRjaCBldmVyeXdoZXJlICovCi0gICAgaWYgKHBhdHRlcm5fbGVuID09IDAgfHwgbWF4Y291bnQgPT0gMCkgewotICAgICAgICBpZiAodGFyZ2V0X2xlbisxIDwgbWF4Y291bnQpCi0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0X2xlbisxOwotICAgICAgICByZXR1cm4gbWF4Y291bnQ7Ci0gICAgfQotCi0gICAgZW5kIC09IHBhdHRlcm5fbGVuOwotICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7Ci0gICAgICAgIGZvciAoOyAoZW5kID49IHN0YXJ0KTsgZW5kLS0pCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgZW5kLCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDw9IDApIGJyZWFrOwotICAgICAgICAgICAgICAgIGVuZCAtPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoOyAoc3RhcnQgPD0gZW5kKTsgc3RhcnQrKykKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBzdGFydCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAoLS1tYXhjb3VudCA8PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBzdGFydCArPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIAogLyogQWxnb3JpdGhtcyBmb3IgZGlmZmVyZW50IGNhc2VzIG9mIHN0cmluZyByZXBsYWNlbWVudCAqLwogCkBAIC0xNzY1LDEwICsxNjc1LDkgQEAKICAgICBzZWxmX2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogICAgIHNlbGZfcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAotICAgIGNvdW50ID0gY291bnRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKyAgICBjb3VudCA9IHN0cmluZ2xpYl9jb3VudChzZWxmX3MsIHNlbGZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOwogCiAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgLyogbm8gbWF0Y2hlcyAqLwpAQCAtMTc4Nyw5ICsxNjk2LDkgQEAKICAgICBzdGFydCA9IHNlbGZfczsKICAgICBlbmQgPSBzZWxmX3MgKyBzZWxmX2xlbjsKICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV4dCA9IHN0YXJ0ICsgb2Zmc2V0OwpAQCAtMTg2NSw5ICsxNzc0LDkgQEAKICAgICBzZWxmX3MgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKTsKIAotICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgRk9SV0FSRCk7CisgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgIGlmIChvZmZzZXQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gbWF0Y2hlczsgcmV0dXJuIHRoZSBvcmlnaW5hbCBieXRlcyAqLwogICAgICAgICByZXR1cm4gcmV0dXJuX3NlbGYoc2VsZik7CkBAIC0xODg3LDkgKzE3OTYsOSBAQAogICAgIGVuZCA9IHJlc3VsdF9zICsgc2VsZl9sZW47CiAKICAgICB3aGlsZSAoIC0tbWF4Y291bnQgPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0PT0tMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBQeV9NRU1DUFkoc3RhcnQrb2Zmc2V0LCB0b19zLCBmcm9tX2xlbik7CkBAIC0xOTgyLDkgKzE4OTEsMTAgQEAKICAgICBzZWxmX3MgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKTsKIAotICAgIGNvdW50ID0gY291bnRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgRk9SV0FSRCwgbWF4Y291bnQpOworICAgIGNvdW50ID0gc3RyaW5nbGliX2NvdW50KHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CisKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAvKiBubyBtYXRjaGVzLCByZXR1cm4gdW5jaGFuZ2VkICovCiAgICAgICAgIHJldHVybiByZXR1cm5fc2VsZihzZWxmKTsKQEAgLTIwMTEsOSArMTkyMSw5IEBACiAgICAgc3RhcnQgPSBzZWxmX3M7CiAgICAgZW5kID0gc2VsZl9zICsgc2VsZl9sZW47CiAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHQgPSBzdGFydCtvZmZzZXQ7CkBAIC0yMTE3LDcgKzIwMjcsNyBAQAogZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IGNvdW50IG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JlcGxhY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JlcGxhY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgY291bnQgPSAtMTsKICAgICBQeU9iamVjdCAqZnJvbSwgKnRvLCAqcmVzOwpAQCAtMjE0MiwxMjMgKzIwNTIsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLQotLyogT3ZlcmFsbG9jYXRlIHRoZSBpbml0aWFsIGxpc3QgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcmVhbGxvY3MgZm9yIHNtYWxsCi0gICBzcGxpdCBzaXplcy4gIEVnLCAiQSBBIEEgQSBBIEEgQSBBIEEgQSIuc3BsaXQoKSAoMTAgZWxlbWVudHMpIGhhcyB0aHJlZQotICAgcmVzaXplcywgdG8gc2l6ZXMgNCwgOCwgdGhlbiAxNi4gIE1vc3Qgb2JzZXJ2ZWQgc3RyaW5nIHNwbGl0cyBhcmUgZm9yIGh1bWFuCi0gICB0ZXh0IChyb3VnaGx5IDExIHdvcmRzIHBlciBsaW5lKSBhbmQgZmllbGQgZGVsaW1pdGVkIGRhdGEgKHVzdWFsbHkgMS0xMAotICAgZmllbGRzKS4gIEZvciBsYXJnZSBzdHJpbmdzIHRoZSBzcGxpdCBhbGdvcml0aG1zIGFyZSBiYW5kd2lkdGggbGltaXRlZAotICAgc28gaW5jcmVhc2luZyB0aGUgcHJlYWxsb2NhdGlvbiBsaWtlbHkgd2lsbCBub3QgaW1wcm92ZSB0aGluZ3MuKi8KLQotI2RlZmluZSBNQVhfUFJFQUxMT0MgMTIKLQotLyogNSBzcGxpdHMgZ2l2ZXMgNiBlbGVtZW50cyAqLwotI2RlZmluZSBQUkVBTExPQ19TSVpFKG1heHNwbGl0KSBcCi0gICAgKG1heHNwbGl0ID49IE1BWF9QUkVBTExPQyA/IE1BWF9QUkVBTExPQyA6IG1heHNwbGl0KzEpCi0KLSNkZWZpbmUgU1BMSVRfQVBQRU5EKGRhdGEsIGxlZnQsIHJpZ2h0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RyID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoKGRhdGEpICsgKGxlZnQpLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICBcCi0gICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotCi0jZGVmaW5lIFNQTElUX0FERChkYXRhLCBsZWZ0LCByaWdodCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKChkYXRhKSArIChsZWZ0KSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodCkgLSAobGVmdCkpOyAgICAgXAotICAgIGlmIChzdHIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvdW50IDwgTUFYX1BSRUFMTE9DKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBjb3VudCwgc3RyKTsgICAgICAgICAgICAgIFwKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyKSkgeyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb3VudCsrOyB9Ci0KLS8qIEFsd2F5cyBmb3JjZSB0aGUgbGlzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZS4gKi8KLSNkZWZpbmUgRklYX1BSRUFMTE9DX1NJWkUobGlzdCkgUHlfU0laRShsaXN0KSA9IGNvdW50Ci0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1zcGxpdF9jaGFyKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuLCBjaGFyIGNoLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaiA8IGxlbikgJiYgKG1heGNvdW50LS0gPiAwKSkgewotICAgICAgICBmb3IoOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgIC8qIEkgZm91bmQgdGhhdCB1c2luZyBtZW1jaHIgbWFrZXMgbm8gZGlmZmVyZW5jZSAqLwotICAgICAgICAgICAgaWYgKHNbal0gPT0gY2gpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIGksIGxlbik7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotc3BsaXRfd2hpdGVzcGFjZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50ID0gMDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDwgbGVuOyApIHsKLSAgICAgICAgLyogZmluZCBhIHRva2VuICovCi0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIElTU1BBQ0Uoc1tpXSkpCi0gICAgICAgICAgICBpKys7Ci0gICAgICAgIGogPSBpOwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiAhSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGogPCBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQUREKHMsIGosIGkpOwotICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBTUExJVF9BREQocywgaiwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIFB5RG9jX1NUUlZBUihzcGxpdF9fZG9jX18sCiAiQi5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSkgLT4gbGlzdCBvZiBieXRlYXJyYXlcblwKIFxuXApAQCAtMjI2OCwxNiArMjA2MSwxMyBAQAogSWYgbWF4c3BsaXQgaXMgZ2l2ZW4sIGF0IG1vc3QgbWF4c3BsaXQgc3BsaXRzIGFyZSBkb25lLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3NwbGl0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLCBuLCBpLCBqOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMSwgY291bnQgPSAwOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG47CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksICpzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdHIsICpzdWJvYmogPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpsaXN0LCAqc3Vib2JqID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdnN1YjsKLSNpZmRlZiBVU0VfRkFTVAotICAgIFB5X3NzaXplX3QgcG9zOwotI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpzcGxpdCIsICZzdWJvYmosICZtYXhzcGxpdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjI4NSw4NiArMjA3NSwxOCBAQAogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogCiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQotICAgICAgICByZXR1cm4gc3BsaXRfd2hpdGVzcGFjZShzLCBsZW4sIG1heHNwbGl0KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCiAgICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CiAKLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG4gPT0gMSkgewotICAgICAgICBsaXN0ID0gc3BsaXRfY2hhcihzLCBsZW4sIHN1YlswXSwgbWF4c3BsaXQpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotI2lmZGVmIFVTRV9GQVNUCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlIChtYXhzcGxpdC0tID4gMCkgewotICAgICAgICBwb3MgPSBmYXN0c2VhcmNoKHMraSwgbGVuLWksIHN1YiwgbiwgRkFTVF9TRUFSQ0gpOwotICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaiA9IGkrcG9zOwotICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgIGkgPSBqICsgbjsKLSAgICB9Ci0jZWxzZQotICAgIGkgPSBqID0gMDsKLSAgICB3aGlsZSAoKGorbiA8PSBsZW4pICYmIChtYXhzcGxpdC0tID4gMCkpIHsKLSAgICAgICAgZm9yICg7IGorbiA8PSBsZW47IGorKykgewotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSChzLCBqLCBzdWIsIG4pKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGksIGopOwotICAgICAgICAgICAgICAgIGkgPSBqID0gaiArIG47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICBsaXN0ID0gc3RyaW5nbGliX3NwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIHN1YiwgbiwgbWF4c3BsaXQKKyAgICAgICAgKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKICAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogc3RyaW5nbGliJ3MgcGFydGl0aW9uIHNoYXJlcyBudWxsYnl0ZXMgaW4gc29tZSBjYXNlcy4KLSAgIHVuZG8gdGhpcywgd2UgZG9uJ3Qgd2FudCB0aGUgbnVsbGJ5dGVzIHRvIGJlIHNoYXJlZC4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1tYWtlX251bGxieXRlc191bmlxdWUoUHlPYmplY3QgKnJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrKHJlc3VsdCkpOwotICAgICAgICBhc3NlcnQoUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpID09IDMpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoUHlUdXBsZV9HRVRfSVRFTShyZXN1bHQsIGkpID09IChQeU9iamVjdCAqKW51bGxieXRlcykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuZXcgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobnVsbGJ5dGVzKTsKLSAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgbmV3KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIocGFydGl0aW9uX19kb2NfXywKQEAgLTIzNzUsNyArMjA5Nyw3IEBACiBmb3VuZCwgcmV0dXJucyBCIGFuZCB0d28gZW1wdHkgYnl0ZWFycmF5IG9iamVjdHMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19wYXJ0aXRpb24oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQorYnl0ZWFycmF5X3BhcnRpdGlvbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcF9vYmopCiB7CiAgICAgUHlPYmplY3QgKmJ5dGVzZXAsICpyZXN1bHQ7CiAKQEAgLTIzOTEsNyArMjExMyw3IEBACiAgICAgICAgICAgICApOwogCiAgICAgUHlfREVDUkVGKGJ5dGVzZXApOwotICAgIHJldHVybiBtYWtlX251bGxieXRlc191bmlxdWUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIocnBhcnRpdGlvbl9fZG9jX18sCkBAIC0yNDAzLDcgKzIxMjUsNyBAQAogYnl0ZWFycmF5IG9iamVjdHMgYW5kIEIuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19ycGFydGl0aW9uKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKK2J5dGVhcnJheV9ycGFydGl0aW9uKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKIHsKICAgICBQeU9iamVjdCAqYnl0ZXNlcCwgKnJlc3VsdDsKIApAQCAtMjQxOSw4MSArMjE0MSw3IEBACiAgICAgICAgICAgICApOwogCiAgICAgUHlfREVDUkVGKGJ5dGVzZXApOwotICAgIHJldHVybiBtYWtlX251bGxieXRlc191bmlxdWUocmVzdWx0KTsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1yc3BsaXRfY2hhcihjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbiwgY2hhciBjaCwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IGxlbiAtIDE7Ci0gICAgd2hpbGUgKChpID49IDApICYmIChtYXhjb3VudC0tID4gMCkpIHsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoc1tpXSA9PSBjaCkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgICAgIGogPSBpID0gaSAtIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGogPj0gLTEpIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotcnNwbGl0X3doaXRlc3BhY2UoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4sIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBjb3VudCA9IDA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmb3IgKGkgPSBqID0gbGVuIC0gMTsgaSA+PSAwOyApIHsKLSAgICAgICAgLyogZmluZCBhIHRva2VuICovCi0gICAgICAgIHdoaWxlIChpID49IDAgJiYgSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpID49IDAgJiYgIUlTU1BBQ0Uoc1tpXSkpCi0gICAgICAgICAgICBpLS07Ci0gICAgICAgIGlmIChqID4gaSkgewotICAgICAgICAgICAgaWYgKG1heGNvdW50LS0gPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBJU1NQQUNFKHNbaV0pKQotICAgICAgICAgICAgICAgIGktLTsKLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChqID49IDApIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKHJzcGxpdF9fZG9jX18sCkBAIC0yNTA2LDEyICsyMTU0LDEyIEBACiBJZiBtYXhzcGxpdCBpcyBnaXZlbiwgYXQgbW9zdCBtYXhzcGxpdCBzcGxpdHMgYXJlIGRvbmUuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JzcGxpdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwgbiwgaSwgajsKLSAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTEsIGNvdW50ID0gMDsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLCBuOworICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKICAgICBjb25zdCBjaGFyICpzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAqc3ViOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqc3RyLCAqc3Vib2JqID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqbGlzdCwgKnN1Ym9iaiA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZzdWI7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpyc3BsaXQiLCAmc3Vib2JqLCAmbWF4c3BsaXQpKQpAQCAtMjUyMCw1NCArMjE2OCwxOCBAQAogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogCiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQotICAgICAgICByZXR1cm4gcnNwbGl0X3doaXRlc3BhY2UocywgbGVuLCBtYXhzcGxpdCk7CisgICAgICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7CiAKICAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZ2c3ViKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKIAotICAgIGlmIChuID09IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChuID09IDEpIHsKLSAgICAgICAgbGlzdCA9IHJzcGxpdF9jaGFyKHMsIGxlbiwgc3ViWzBdLCBtYXhzcGxpdCk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaiA9IGxlbjsKLSAgICBpID0gaiAtIG47Ci0KLSAgICB3aGlsZSAoIChpID49IDApICYmIChtYXhzcGxpdC0tID4gMCkgKSB7Ci0gICAgICAgIGZvciAoOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0gocywgaSwgc3ViLCBuKSkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgbiwgaik7Ci0gICAgICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgICAgICAgICAgaSAtPSBuOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIFNQTElUX0FERChzLCAwLCBqKTsKLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgbGlzdCA9IHN0cmluZ2xpYl9yc3BsaXQoCisgICAgICAgIChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgc3ViLCBuLCBtYXhzcGxpdAorICAgICAgICApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwogICAgIHJldHVybiBsaXN0OwotCi1vbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKHJldmVyc2VfX2RvY19fLApAQCAtMjU3NSw3ICsyMTg3LDcgQEAKIFxuXAogUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHZhbHVlcyBpbiBCIGluIHBsYWNlLiIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JldmVyc2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCitieXRlYXJyYXlfcmV2ZXJzZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGFyIHN3YXAsICpoZWFkLCAqdGFpbDsKICAgICBQeV9zc2l6ZV90IGksIGosIG4gPSBQeV9TSVpFKHNlbGYpOwpAQCAtMjU5Nyw3ICsyMjA5LDcgQEAKIFxuXAogSW5zZXJ0IGEgc2luZ2xlIGl0ZW0gaW50byB0aGUgYnl0ZWFycmF5IGJlZm9yZSB0aGUgZ2l2ZW4gaW5kZXguIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfaW5zZXJ0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9pbnNlcnQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKICAgICBpbnQgaXZhbDsKQEAgLTI2MzQsNyArMjI0Niw3IEBACiBcblwKIEFwcGVuZCBhIHNpbmdsZSBpdGVtIHRvIHRoZSBlbmQgb2YgQi4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19hcHBlbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitieXRlYXJyYXlfYXBwZW5kKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IG4gPSBQeV9TSVpFKHNlbGYpOwpAQCAtMjY2MCwxNiArMjI3MiwxNiBAQAogQXBwZW5kIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmF0b3Igb3Igc2VxdWVuY2UgdG8gdGhlXG5cCiBlbmQgb2YgQi4iKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19leHRlbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitieXRlYXJyYXlfZXh0ZW5kKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICppdCwgKml0ZW0sICpieXRlc19vYmo7CisgICAgUHlPYmplY3QgKml0LCAqaXRlbSwgKmJ5dGVhcnJheV9vYmo7CiAgICAgUHlfc3NpemVfdCBidWZfc2l6ZSA9IDAsIGxlbiA9IDA7CiAgICAgaW50IHZhbHVlOwogICAgIGNoYXIgKmJ1ZjsKIAotICAgIC8qIGJ5dGVzX3NldHNsaWNlIGNvZGUgb25seSBhY2NlcHRzIHNvbWV0aGluZyBzdXBwb3J0aW5nIFBFUCAzMTE4LiAqLworICAgIC8qIGJ5dGVhcnJheV9zZXRzbGljZSBjb2RlIG9ubHkgYWNjZXB0cyBzb21ldGhpbmcgc3VwcG9ydGluZyBQRVAgMzExOC4gKi8KICAgICBpZiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIoYXJnKSkgewotICAgICAgICBpZiAoYnl0ZXNfc2V0c2xpY2Uoc2VsZiwgUHlfU0laRShzZWxmKSwgUHlfU0laRShzZWxmKSwgYXJnKSA9PSAtMSkKKyAgICAgICAgaWYgKGJ5dGVhcnJheV9zZXRzbGljZShzZWxmLCBQeV9TSVpFKHNlbGYpLCBQeV9TSVpFKHNlbGYpLCBhcmcpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yNjg2LDE2ICsyMjk4LDE2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGJ5dGVzX29iaiA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1Zl9zaXplKTsKLSAgICBpZiAoYnl0ZXNfb2JqID09IE5VTEwpCisgICAgYnl0ZWFycmF5X29iaiA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1Zl9zaXplKTsKKyAgICBpZiAoYnl0ZWFycmF5X29iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnl0ZXNfb2JqKTsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnl0ZWFycmF5X29iaik7CiAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKCEgX2dldGJ5dGV2YWx1ZShpdGVtLCAmdmFsdWUpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwotICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzX29iaik7CisgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZWFycmF5X29iaik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBidWZbbGVuKytdID0gdmFsdWU7CkBAIC0yNzAzLDI3ICsyMzE1LDI3IEBACiAKICAgICAgICAgaWYgKGxlbiA+PSBidWZfc2l6ZSkgewogICAgICAgICAgICAgYnVmX3NpemUgPSBsZW4gKyAobGVuID4+IDEpICsgMTsKLSAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopYnl0ZXNfb2JqLCBidWZfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKWJ5dGVhcnJheV9vYmosIGJ1Zl9zaXplKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlc19vYmopOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlYXJyYXlfb2JqKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIFJlY29tcHV0ZSB0aGUgYGJ1ZicgcG9pbnRlciwgc2luY2UgdGhlIHJlc2l6aW5nIG9wZXJhdGlvbiBtYXkKICAgICAgICAgICAgICAgIGhhdmUgaW52YWxpZGF0ZWQgaXQuICovCi0gICAgICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnl0ZXNfb2JqKTsKKyAgICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhieXRlYXJyYXlfb2JqKTsKICAgICAgICAgfQogICAgIH0KICAgICBQeV9ERUNSRUYoaXQpOwogCiAgICAgLyogUmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZS4gKi8KLSAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKWJ5dGVzX29iaiwgbGVuKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGJ5dGVzX29iaik7CisgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilieXRlYXJyYXlfb2JqLCBsZW4pIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoYnl0ZWFycmF5X29iaik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChieXRlc19zZXRzbGljZShzZWxmLCBQeV9TSVpFKHNlbGYpLCBQeV9TSVpFKHNlbGYpLCBieXRlc19vYmopID09IC0xKQorICAgIGlmIChieXRlYXJyYXlfc2V0c2xpY2Uoc2VsZiwgUHlfU0laRShzZWxmKSwgUHlfU0laRShzZWxmKSwgYnl0ZWFycmF5X29iaikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0RFQ1JFRihieXRlc19vYmopOworICAgIFB5X0RFQ1JFRihieXRlYXJyYXlfb2JqKTsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjczNCw3ICsyMzQ2LDcgQEAKIFJlbW92ZSBhbmQgcmV0dXJuIGEgc2luZ2xlIGl0ZW0gZnJvbSBCLiBJZiBubyBpbmRleFxuXAogYXJndW1lbnQgaXMgZ2l2ZW4sIHdpbGwgcG9wIHRoZSBsYXN0IHZhbHVlLiIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3BvcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfcG9wKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSA9IC0xLCBuID0gUHlfU0laRShzZWxmKTsKQEAgLTI3NDMsOCArMjM1NSw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgcG9wIGFuIGVtcHR5IGJ5dGVhcnJheSIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgZnJvbSBlbXB0eSBieXRlYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICh3aGVyZSA8IDApCkBAIC0yNzY5LDcgKzIzODEsNyBAQAogXG5cCiBSZW1vdmUgdGhlIGZpcnN0IG9jY3VyYW5jZSBvZiBhIHZhbHVlIGluIEIuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVtb3ZlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorYnl0ZWFycmF5X3JlbW92ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CkBAIC0yODIzLDcgKzI0MzUsNyBAQAogU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC5cblwKIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBzdHJpcCBBU0NJSSB3aGl0ZXNwYWNlLiIpOwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9zdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwogICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOwpAQCAtMjg1OSw3ICsyNDcxLDcgQEAKIFN0cmlwIGxlYWRpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC5cblwKIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBzdHJpcCBsZWFkaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfbHN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9sc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKICAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKQEAgLTI4OTIsNyArMjUwNCw3IEBACiBTdHJpcCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuXAogSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcnN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9yc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKICAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKQEAgLTI5MzAsMTUgKzI1NDIsMjIgQEAKIGFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19kZWNvZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2RlY29kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHNzOmRlY29kZSIsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCisgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOworI2Vsc2UKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJubyBlbmNvZGluZyBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKKyAgICB9CiAgICAgcmV0dXJuIFB5Q29kZWNfRGVjb2RlKHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogfQogCkBAIC0yOTQ4LDcgKzI1NjcsNyBAQAogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2FsbG9jKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQorYnl0ZWFycmF5X2FsbG9jKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewogICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdChzZWxmLT5vYl9hbGxvYyk7CiB9CkBAIC0yOTU5LDcgKzI1NzgsNyBAQAogQ29uY2F0ZW5hdGVzIGFueSBudW1iZXIgb2YgYnl0ZWFycmF5IG9iamVjdHMsIHdpdGggQiBpbiBiZXR3ZWVuIGVhY2ggcGFpci4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2pvaW4oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdCkKK2J5dGVhcnJheV9qb2luKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXQpCiB7CiAgICAgUHlPYmplY3QgKnNlcTsKICAgICBQeV9zc2l6ZV90IG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CkBAIC0zMDI4LDYgKzI2NDcsMjcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLAorIkIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKSAtPiBsaXN0IG9mIGxpbmVzXG5cCitcblwKK1JldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIEIsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cblwKK0xpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kc1xuXAoraXMgZ2l2ZW4gYW5kIHRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2J5dGVhcnJheV9zcGxpdGxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQga2VlcGVuZHMgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpzcGxpdGxpbmVzIiwgJmtlZXBlbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0bGluZXMoCisgICAgICAgIChQeU9iamVjdCopIHNlbGYsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIGtlZXBlbmRzCisgICAgICAgICk7Cit9CisKIFB5RG9jX1NUUlZBUihmcm9taGV4X2RvYywKICJieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpIC0+IGJ5dGVhcnJheVxuXAogXG5cCkBAIC0zMDM2LDE1ICsyNjc2LDEzIEBACiBFeGFtcGxlOiBieXRlYXJyYXkuZnJvbWhleCgnQjkgMDFFRicpIC0+IGJ5dGVhcnJheShiJ1xceGI5XFx4MDFcXHhlZicpLiIpOwogCiBzdGF0aWMgaW50Ci1oZXhfZGlnaXRfdG9faW50KFB5X1VOSUNPREUgYykKK2hleF9kaWdpdF90b19pbnQoY2hhciBjKQogewotICAgIGlmIChjID49IDEyOCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChJU0RJR0lUKGMpKQorICAgIGlmIChQeV9JU0RJR0lUKGMpKQogICAgICAgICByZXR1cm4gYyAtICcwJzsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKElTVVBQRVIoYykpCi0gICAgICAgICAgICBjID0gVE9MT1dFUihjKTsKKyAgICAgICAgaWYgKFB5X0lTVVBQRVIoYykpCisgICAgICAgICAgICBjID0gUHlfVE9MT1dFUihjKTsKICAgICAgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQogICAgICAgICAgICAgcmV0dXJuIGMgLSAnYScgKyAxMDsKICAgICB9CkBAIC0zMDUyLDE5ICsyNjkwLDE2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19mcm9taGV4KFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X2Zyb21oZXgoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm5ld2J5dGVzLCAqaGV4b2JqOworICAgIFB5T2JqZWN0ICpuZXdieXRlczsKICAgICBjaGFyICpidWY7Ci0gICAgUHlfVU5JQ09ERSAqaGV4OworICAgIGNoYXIgKmhleDsKICAgICBQeV9zc2l6ZV90IGhleGxlbiwgYnl0ZXNsZW4sIGksIGo7CiAgICAgaW50IHRvcCwgYm90OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmZyb21oZXgiLCAmaGV4b2JqKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmZyb21oZXgiLCAmaGV4LCAmaGV4bGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhoZXhvYmopKTsKLSAgICBoZXhsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUoaGV4b2JqKTsKLSAgICBoZXggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShoZXhvYmopOwogICAgIGJ5dGVzbGVuID0gaGV4bGVuLzI7IC8qIFRoaXMgb3ZlcmVzdGltYXRlcyBpZiB0aGVyZSBhcmUgc3BhY2VzICovCiAgICAgbmV3Ynl0ZXMgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBieXRlc2xlbik7CiAgICAgaWYgKCFuZXdieXRlcykKQEAgLTMwOTgsMTQgKzI3MzMsMjIgQEAKIFB5RG9jX1NUUlZBUihyZWR1Y2VfZG9jLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JlZHVjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9yZWR1Y2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmxhdGluMSwgKmRpY3Q7CiAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKQorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShzZWxmLT5vYl9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpLCBOVUxMKTsKKyNlbHNlCisgICAgICAgIGxhdGluMSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpKTsKKyNlbmRpZgogICAgIGVsc2UKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKyNlbHNlCisgICAgICAgIGxhdGluMSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIiIpOworI2VuZGlmCiAKICAgICBkaWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAiX19kaWN0X18iKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKSB7CkBAIC0zMTIyLDcgKzI3NjUsNyBAQAogIFxuXAogUmV0dXJucyB0aGUgc2l6ZSBvZiBCIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19zaXplb2YoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCitieXRlYXJyYXlfc2l6ZW9mKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewogICAgIFB5X3NzaXplX3QgcmVzOwogCkBAIC0zMTMwLDU0ICsyNzczLDU0IEBACiAgICAgcmV0dXJuIFB5SW50X0Zyb21Tc2l6ZV90KHJlcyk7CiB9CiAKLXN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBieXRlc19hc19zZXF1ZW5jZSA9IHsKLSAgICAobGVuZnVuYylieXRlc19sZW5ndGgsICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBieXRlYXJyYXlfYXNfc2VxdWVuY2UgPSB7CisgICAgKGxlbmZ1bmMpYnl0ZWFycmF5X2xlbmd0aCwgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLwogICAgIChiaW5hcnlmdW5jKVB5Qnl0ZUFycmF5X0NvbmNhdCwgICAgICAgICAvKiBzcV9jb25jYXQgKi8KLSAgICAoc3NpemVhcmdmdW5jKWJ5dGVzX3JlcGVhdCwgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KLSAgICAoc3NpemVhcmdmdW5jKWJ5dGVzX2dldGl0ZW0sICAgICAgICAvKiBzcV9pdGVtICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3Ffc2xpY2UgKi8KLSAgICAoc3NpemVvYmphcmdwcm9jKWJ5dGVzX3NldGl0ZW0sICAgICAvKiBzcV9hc3NfaXRlbSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19zbGljZSAqLwotICAgIChvYmpvYmpwcm9jKWJ5dGVzX2NvbnRhaW5zLCAgICAgICAgIC8qIHNxX2NvbnRhaW5zICovCi0gICAgKGJpbmFyeWZ1bmMpYnl0ZXNfaWNvbmNhdCwgICAgICAgICAgLyogc3FfaW5wbGFjZV9jb25jYXQgKi8KLSAgICAoc3NpemVhcmdmdW5jKWJ5dGVzX2lyZXBlYXQsICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLworICAgIChzc2l6ZWFyZ2Z1bmMpYnl0ZWFycmF5X3JlcGVhdCwgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKyAgICAoc3NpemVhcmdmdW5jKWJ5dGVhcnJheV9nZXRpdGVtLCAgICAgICAgLyogc3FfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLworICAgIChzc2l6ZW9iamFyZ3Byb2MpYnl0ZWFycmF5X3NldGl0ZW0sICAgICAvKiBzcV9hc3NfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3Nfc2xpY2UgKi8KKyAgICAob2Jqb2JqcHJvYylieXRlYXJyYXlfY29udGFpbnMsICAgICAgICAgLyogc3FfY29udGFpbnMgKi8KKyAgICAoYmluYXJ5ZnVuYylieXRlYXJyYXlfaWNvbmNhdCwgICAgICAgICAgLyogc3FfaW5wbGFjZV9jb25jYXQgKi8KKyAgICAoc3NpemVhcmdmdW5jKWJ5dGVhcnJheV9pcmVwZWF0LCAgICAgICAgLyogc3FfaW5wbGFjZV9yZXBlYXQgKi8KIH07CiAKLXN0YXRpYyBQeU1hcHBpbmdNZXRob2RzIGJ5dGVzX2FzX21hcHBpbmcgPSB7Ci0gICAgKGxlbmZ1bmMpYnl0ZXNfbGVuZ3RoLAotICAgIChiaW5hcnlmdW5jKWJ5dGVzX3N1YnNjcmlwdCwKLSAgICAob2Jqb2JqYXJncHJvYylieXRlc19hc3Nfc3Vic2NyaXB0LAorc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgYnl0ZWFycmF5X2FzX21hcHBpbmcgPSB7CisgICAgKGxlbmZ1bmMpYnl0ZWFycmF5X2xlbmd0aCwKKyAgICAoYmluYXJ5ZnVuYylieXRlYXJyYXlfc3Vic2NyaXB0LAorICAgIChvYmpvYmphcmdwcm9jKWJ5dGVhcnJheV9hc3Nfc3Vic2NyaXB0LAogfTsKIAotc3RhdGljIFB5QnVmZmVyUHJvY3MgYnl0ZXNfYXNfYnVmZmVyID0gewotICAgIChyZWFkYnVmZmVycHJvYylieXRlc19idWZmZXJfZ2V0cmVhZGJ1ZiwKLSAgICAod3JpdGVidWZmZXJwcm9jKWJ5dGVzX2J1ZmZlcl9nZXR3cml0ZWJ1ZiwKLSAgICAoc2VnY291bnRwcm9jKWJ5dGVzX2J1ZmZlcl9nZXRzZWdjb3VudCwKLSAgICAoY2hhcmJ1ZmZlcnByb2MpYnl0ZXNfYnVmZmVyX2dldGNoYXJidWYsCi0gICAgKGdldGJ1ZmZlcnByb2MpYnl0ZXNfZ2V0YnVmZmVyLAotICAgIChyZWxlYXNlYnVmZmVycHJvYylieXRlc19yZWxlYXNlYnVmZmVyLAorc3RhdGljIFB5QnVmZmVyUHJvY3MgYnl0ZWFycmF5X2FzX2J1ZmZlciA9IHsKKyAgICAocmVhZGJ1ZmZlcnByb2MpYnl0ZWFycmF5X2J1ZmZlcl9nZXRyZWFkYnVmLAorICAgICh3cml0ZWJ1ZmZlcnByb2MpYnl0ZWFycmF5X2J1ZmZlcl9nZXR3cml0ZWJ1ZiwKKyAgICAoc2VnY291bnRwcm9jKWJ5dGVhcnJheV9idWZmZXJfZ2V0c2VnY291bnQsCisgICAgKGNoYXJidWZmZXJwcm9jKWJ5dGVhcnJheV9idWZmZXJfZ2V0Y2hhcmJ1ZiwKKyAgICAoZ2V0YnVmZmVycHJvYylieXRlYXJyYXlfZ2V0YnVmZmVyLAorICAgIChyZWxlYXNlYnVmZmVycHJvYylieXRlYXJyYXlfcmVsZWFzZWJ1ZmZlciwKIH07CiAKIHN0YXRpYyBQeU1ldGhvZERlZgotYnl0ZXNfbWV0aG9kc1tdID0gewotICAgIHsiX19hbGxvY19fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2FsbG9jLCBNRVRIX05PQVJHUywgYWxsb2NfZG9jfSwKLSAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmVkdWNlLCBNRVRIX05PQVJHUywgcmVkdWNlX2RvY30sCi0gICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NpemVvZiwgTUVUSF9OT0FSR1MsIHNpemVvZl9kb2N9LAotICAgIHsiYXBwZW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2FwcGVuZCwgTUVUSF9PLCBhcHBlbmRfX2RvY19ffSwKK2J5dGVhcnJheV9tZXRob2RzW10gPSB7CisgICAgeyJfX2FsbG9jX18iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2FsbG9jLCBNRVRIX05PQVJHUywgYWxsb2NfZG9jfSwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JlZHVjZSwgTUVUSF9OT0FSR1MsIHJlZHVjZV9kb2N9LAorICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc2l6ZW9mLCBNRVRIX05PQVJHUywgc2l6ZW9mX2RvY30sCisgICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2FwcGVuZCwgTUVUSF9PLCBhcHBlbmRfX2RvY19ffSwKICAgICB7ImNhcGl0YWxpemUiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2NhcGl0YWxpemUsIE1FVEhfTk9BUkdTLAogICAgICBfUHlfY2FwaXRhbGl6ZV9fZG9jX199LAogICAgIHsiY2VudGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCi0gICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbilieXRlc19jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBkZWNvZGVfZG9jfSwKLSAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsIGVuZHN3aXRoX19kb2NfX30sCisgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfY291bnQsIE1FVEhfVkFSQVJHUywgY291bnRfX2RvY19ffSwKKyAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfZG9jfSwKKyAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLCBlbmRzd2l0aF9fZG9jX199LAogICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCi0gICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAotICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlc19maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKLSAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCisgICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2V4dGVuZCwgTUVUSF9PLCBleHRlbmRfX2RvY19ffSwKKyAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAorICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCiAgICAgIGZyb21oZXhfZG9jfSwKLSAgICB7ImluZGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2luZGV4LCBNRVRIX1ZBUkFSR1MsIGluZGV4X19kb2NfX30sCi0gICAgeyJpbnNlcnQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfaW5zZXJ0LCBNRVRIX1ZBUkFSR1MsIGluc2VydF9fZG9jX199LAorICAgIHsiaW5kZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2luZGV4LCBNRVRIX1ZBUkFSR1MsIGluZGV4X19kb2NfX30sCisgICAgeyJpbnNlcnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2luc2VydCwgTUVUSF9WQVJBUkdTLCBpbnNlcnRfX2RvY19ffSwKICAgICB7ImlzYWxudW0iLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2lzYWxudW0sIE1FVEhfTk9BUkdTLAogICAgICBfUHlfaXNhbG51bV9fZG9jX199LAogICAgIHsiaXNhbHBoYSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfaXNhbHBoYSwgTUVUSF9OT0FSR1MsCkBAIC0zMTkyLDM4ICsyODM1LDM4IEBACiAgICAgIF9QeV9pc3RpdGxlX19kb2NfX30sCiAgICAgeyJpc3VwcGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9pc3VwcGVyLCBNRVRIX05PQVJHUywKICAgICAgX1B5X2lzdXBwZXJfX2RvY19ffSwKLSAgICB7ImpvaW4iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfam9pbiwgTUVUSF9PLCBqb2luX2RvY30sCisgICAgeyJqb2luIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9qb2luLCBNRVRIX08sIGpvaW5fZG9jfSwKICAgICB7ImxqdXN0IiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9sanVzdCwgTUVUSF9WQVJBUkdTLCBsanVzdF9fZG9jX199LAogICAgIHsibG93ZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2xvd2VyLCBNRVRIX05PQVJHUywgX1B5X2xvd2VyX19kb2NfX30sCi0gICAgeyJsc3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfbHN0cmlwLCBNRVRIX1ZBUkFSR1MsIGxzdHJpcF9fZG9jX199LAotICAgIHsicGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3BhcnRpdGlvbiwgTUVUSF9PLCBwYXJ0aXRpb25fX2RvY19ffSwKLSAgICB7InBvcCIsIChQeUNGdW5jdGlvbilieXRlc19wb3AsIE1FVEhfVkFSQVJHUywgcG9wX19kb2NfX30sCi0gICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmVtb3ZlLCBNRVRIX08sIHJlbW92ZV9fZG9jX199LAotICAgIHsicmVwbGFjZSIsIChQeUNGdW5jdGlvbilieXRlc19yZXBsYWNlLCBNRVRIX1ZBUkFSR1MsIHJlcGxhY2VfX2RvY19ffSwKLSAgICB7InJldmVyc2UiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmV2ZXJzZSwgTUVUSF9OT0FSR1MsIHJldmVyc2VfX2RvY19ffSwKLSAgICB7InJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JmaW5kLCBNRVRIX1ZBUkFSR1MsIHJmaW5kX19kb2NfX30sCi0gICAgeyJyaW5kZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmluZGV4LCBNRVRIX1ZBUkFSR1MsIHJpbmRleF9fZG9jX199LAorICAgIHsibHN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9sc3RyaXAsIE1FVEhfVkFSQVJHUywgbHN0cmlwX19kb2NfX30sCisgICAgeyJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3BhcnRpdGlvbiwgTUVUSF9PLCBwYXJ0aXRpb25fX2RvY19ffSwKKyAgICB7InBvcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcG9wLCBNRVRIX1ZBUkFSR1MsIHBvcF9fZG9jX199LAorICAgIHsicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZW1vdmUsIE1FVEhfTywgcmVtb3ZlX19kb2NfX30sCisgICAgeyJyZXBsYWNlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZXBsYWNlLCBNRVRIX1ZBUkFSR1MsIHJlcGxhY2VfX2RvY19ffSwKKyAgICB7InJldmVyc2UiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JldmVyc2UsIE1FVEhfTk9BUkdTLCByZXZlcnNlX19kb2NfX30sCisgICAgeyJyZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmZpbmQsIE1FVEhfVkFSQVJHUywgcmZpbmRfX2RvY19ffSwKKyAgICB7InJpbmRleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmluZGV4LCBNRVRIX1ZBUkFSR1MsIHJpbmRleF9fZG9jX199LAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3JqdXN0LCBNRVRIX1ZBUkFSR1MsIHJqdXN0X19kb2NfX30sCi0gICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JwYXJ0aXRpb24sIE1FVEhfTywgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsicnNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JzcGxpdCwgTUVUSF9WQVJBUkdTLCByc3BsaXRfX2RvY19ffSwKLSAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlc19yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCi0gICAgeyJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlc19zcGxpdCwgTUVUSF9WQVJBUkdTLCBzcGxpdF9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTLAorICAgIHsicnBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnBhcnRpdGlvbiwgTUVUSF9PLCBycGFydGl0aW9uX19kb2NfX30sCisgICAgeyJyc3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JzcGxpdCwgTUVUSF9WQVJBUkdTLCByc3BsaXRfX2RvY19ffSwKKyAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnN0cmlwLCBNRVRIX1ZBUkFSR1MsIHJzdHJpcF9fZG9jX199LAorICAgIHsic3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3NwbGl0LCBNRVRIX1ZBUkFSR1MsIHNwbGl0X19kb2NfX30sCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MsCiAgICAgIHNwbGl0bGluZXNfX2RvY19ffSwKLSAgICB7InN0YXJ0c3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3RhcnRzd2l0aCwgTUVUSF9WQVJBUkdTICwKKyAgICB7InN0YXJ0c3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3N0YXJ0c3dpdGgsIE1FVEhfVkFSQVJHUyAsCiAgICAgIHN0YXJ0c3dpdGhfX2RvY19ffSwKLSAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3N0cmlwLCBNRVRIX1ZBUkFSR1MsIHN0cmlwX19kb2NfX30sCisgICAgeyJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3RyaXAsIE1FVEhfVkFSQVJHUywgc3RyaXBfX2RvY19ffSwKICAgICB7InN3YXBjYXNlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9zd2FwY2FzZSwgTUVUSF9OT0FSR1MsCiAgICAgIF9QeV9zd2FwY2FzZV9fZG9jX199LAogICAgIHsidGl0bGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3RpdGxlLCBNRVRIX05PQVJHUywgX1B5X3RpdGxlX19kb2NfX30sCi0gICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfdHJhbnNsYXRlLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3RyYW5zbGF0ZSwgTUVUSF9WQVJBUkdTLAogICAgICB0cmFuc2xhdGVfX2RvY19ffSwKICAgICB7InVwcGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl91cHBlciwgTUVUSF9OT0FSR1MsIF9QeV91cHBlcl9fZG9jX199LAogICAgIHsiemZpbGwiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3pmaWxsLCBNRVRIX1ZBUkFSR1MsIHpmaWxsX19kb2NfX30sCiAgICAge05VTEx9CiB9OwogCi1QeURvY19TVFJWQVIoYnl0ZXNfZG9jLAorUHlEb2NfU1RSVkFSKGJ5dGVhcnJheV9kb2MsCiAiYnl0ZWFycmF5KGl0ZXJhYmxlX29mX2ludHMpIC0+IGJ5dGVhcnJheS5cblwKIGJ5dGVhcnJheShzdHJpbmcsIGVuY29kaW5nWywgZXJyb3JzXSkgLT4gYnl0ZWFycmF5LlxuXAogYnl0ZWFycmF5KGJ5dGVzX29yX2J5dGVhcnJheSkgLT4gbXV0YWJsZSBjb3B5IG9mIGJ5dGVzX29yX2J5dGVhcnJheS5cblwKQEAgLTMyNDAsMzggKzI4ODMsMzggQEAKIENvbnN0cnVjdCBhIHplcm8taW5pdGlhbGl6ZWQgYnl0ZWFycmF5IG9mIHRoZSBnaXZlbiBsZW5ndGguIik7CiAKIAotc3RhdGljIFB5T2JqZWN0ICpieXRlc19pdGVyKFB5T2JqZWN0ICpzZXEpOworc3RhdGljIFB5T2JqZWN0ICpieXRlYXJyYXlfaXRlcihQeU9iamVjdCAqc2VxKTsKIAogUHlUeXBlT2JqZWN0IFB5Qnl0ZUFycmF5X1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAiYnl0ZWFycmF5IiwKICAgICBzaXplb2YoUHlCeXRlQXJyYXlPYmplY3QpLAogICAgIDAsCi0gICAgKGRlc3RydWN0b3IpYnl0ZXNfZGVhbGxvYywgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIChkZXN0cnVjdG9yKWJ5dGVhcnJheV9kZWFsbG9jLCAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KLSAgICAocmVwcmZ1bmMpYnl0ZXNfcmVwciwgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKWJ5dGVhcnJheV9yZXByLCAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAgICZieXRlc19hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgJmJ5dGVzX2FzX21hcHBpbmcsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgICZieXRlYXJyYXlfYXNfc2VxdWVuY2UsICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgJmJ5dGVhcnJheV9hc19tYXBwaW5nLCAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCi0gICAgYnl0ZXNfc3RyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgYnl0ZWFycmF5X3N0ciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgICZieXRlc19hc19idWZmZXIsICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgICZieXRlYXJyYXlfYXNfYnVmZmVyLCAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfAogICAgIFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVIsICAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgYnl0ZXNfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgYnl0ZWFycmF5X2RvYywgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIChyaWNoY21wZnVuYylieXRlc19yaWNoY29tcGFyZSwgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgKHJpY2hjbXBmdW5jKWJ5dGVhcnJheV9yaWNoY29tcGFyZSwgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIGJ5dGVzX2l0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICBieXRlYXJyYXlfaXRlciwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICBieXRlc19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgYnl0ZWFycmF5X21ldGhvZHMsICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0zMjc5LDcgKzI5MjIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpYnl0ZXNfaW5pdCwgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgKGluaXRwcm9jKWJ5dGVhcnJheV9pbml0LCAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwpAQCAtMzI5NCw3ICsyOTM3LDcgQEAKIH0gYnl0ZXNpdGVyb2JqZWN0OwogCiBzdGF0aWMgdm9pZAotYnl0ZXNpdGVyX2RlYWxsb2MoYnl0ZXNpdGVyb2JqZWN0ICppdCkKK2J5dGVhcnJheWl0ZXJfZGVhbGxvYyhieXRlc2l0ZXJvYmplY3QgKml0KQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGl0KTsKICAgICBQeV9YREVDUkVGKGl0LT5pdF9zZXEpOwpAQCAtMzMwMiwxNCArMjk0NSwxNCBAQAogfQogCiBzdGF0aWMgaW50Ci1ieXRlc2l0ZXJfdHJhdmVyc2UoYnl0ZXNpdGVyb2JqZWN0ICppdCwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCitieXRlYXJyYXlpdGVyX3RyYXZlcnNlKGJ5dGVzaXRlcm9iamVjdCAqaXQsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5X1ZJU0lUKGl0LT5pdF9zZXEpOwogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpdGVyX25leHQoYnl0ZXNpdGVyb2JqZWN0ICppdCkKK2J5dGVhcnJheWl0ZXJfbmV4dChieXRlc2l0ZXJvYmplY3QgKml0KQogewogICAgIFB5Qnl0ZUFycmF5T2JqZWN0ICpzZXE7CiAgICAgUHlPYmplY3QgKml0ZW07CkBAIC0zMzM0LDcgKzI5NzcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpdGVyX2xlbmd0aF9oaW50KGJ5dGVzaXRlcm9iamVjdCAqaXQpCitieXRlc2FycmF5aXRlcl9sZW5ndGhfaGludChieXRlc2l0ZXJvYmplY3QgKml0KQogewogICAgIFB5X3NzaXplX3QgbGVuID0gMDsKICAgICBpZiAoaXQtPml0X3NlcSkKQEAgLTMzNDUsOCArMjk4OCw4IEBACiBQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfZG9jLAogICAgICJQcml2YXRlIG1ldGhvZCByZXR1cm5pbmcgYW4gZXN0aW1hdGUgb2YgbGVuKGxpc3QoaXQpKS4iKTsKIAotc3RhdGljIFB5TWV0aG9kRGVmIGJ5dGVzaXRlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2xlbmd0aF9oaW50X18iLCAoUHlDRnVuY3Rpb24pYnl0ZXNpdGVyX2xlbmd0aF9oaW50LCBNRVRIX05PQVJHUywKK3N0YXRpYyBQeU1ldGhvZERlZiBieXRlYXJyYXlpdGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fbGVuZ3RoX2hpbnRfXyIsIChQeUNGdW5jdGlvbilieXRlc2FycmF5aXRlcl9sZW5ndGhfaGludCwgTUVUSF9OT0FSR1MsCiAgICAgIGxlbmd0aF9oaW50X2RvY30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwpAQCAtMzM1Nyw3ICszMDAwLDcgQEAKICAgICBzaXplb2YoYnl0ZXNpdGVyb2JqZWN0KSwgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpYnl0ZXNpdGVyX2RlYWxsb2MsICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgKGRlc3RydWN0b3IpYnl0ZWFycmF5aXRlcl9kZWFsbG9jLCAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwpAQCAtMzM3NCwxOCArMzAxNywxOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgKHRyYXZlcnNlcHJvYylieXRlc2l0ZXJfdHJhdmVyc2UsICAvKiB0cF90cmF2ZXJzZSAqLworICAgICh0cmF2ZXJzZXByb2MpYnl0ZWFycmF5aXRlcl90cmF2ZXJzZSwgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgKGl0ZXJuZXh0ZnVuYylieXRlc2l0ZXJfbmV4dCwgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIGJ5dGVzaXRlcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIChpdGVybmV4dGZ1bmMpYnl0ZWFycmF5aXRlcl9uZXh0LCAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBieXRlYXJyYXlpdGVyX21ldGhvZHMsICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2l0ZXIoUHlPYmplY3QgKnNlcSkKK2J5dGVhcnJheV9pdGVyKFB5T2JqZWN0ICpzZXEpCiB7CiAgICAgYnl0ZXNpdGVyb2JqZWN0ICppdDsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwppbmRleCA4Y2UwODU2Li4xNDA2YWMxIDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYworKysgYi9PYmplY3RzL2J5dGVzX21ldGhvZHMuYwpAQCAtMSwyMTkgKzEsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgImJ5dGVzX21ldGhvZHMuaCIKIAotLyogT3VyIG93biBsb2NhbGUtaW5kZXBlbmRlbnQgY3R5cGUuaC1saWtlIG1hY3JvcyAqLwotCi1jb25zdCB1bnNpZ25lZCBpbnQgX1B5X2N0eXBlX3RhYmxlWzI1Nl0gPSB7Ci0gICAgMCwgLyogMHgwICdceDAwJyAqLwotICAgIDAsIC8qIDB4MSAnXHgwMScgKi8KLSAgICAwLCAvKiAweDIgJ1x4MDInICovCi0gICAgMCwgLyogMHgzICdceDAzJyAqLwotICAgIDAsIC8qIDB4NCAnXHgwNCcgKi8KLSAgICAwLCAvKiAweDUgJ1x4MDUnICovCi0gICAgMCwgLyogMHg2ICdceDA2JyAqLwotICAgIDAsIC8qIDB4NyAnXHgwNycgKi8KLSAgICAwLCAvKiAweDggJ1x4MDgnICovCi0gICAgRkxBR19TUEFDRSwgLyogMHg5ICdcdCcgKi8KLSAgICBGTEFHX1NQQUNFLCAvKiAweGEgJ1xuJyAqLwotICAgIEZMQUdfU1BBQ0UsIC8qIDB4YiAnXHYnICovCi0gICAgRkxBR19TUEFDRSwgLyogMHhjICdcZicgKi8KLSAgICBGTEFHX1NQQUNFLCAvKiAweGQgJ1xyJyAqLwotICAgIDAsIC8qIDB4ZSAnXHgwZScgKi8KLSAgICAwLCAvKiAweGYgJ1x4MGYnICovCi0gICAgMCwgLyogMHgxMCAnXHgxMCcgKi8KLSAgICAwLCAvKiAweDExICdceDExJyAqLwotICAgIDAsIC8qIDB4MTIgJ1x4MTInICovCi0gICAgMCwgLyogMHgxMyAnXHgxMycgKi8KLSAgICAwLCAvKiAweDE0ICdceDE0JyAqLwotICAgIDAsIC8qIDB4MTUgJ1x4MTUnICovCi0gICAgMCwgLyogMHgxNiAnXHgxNicgKi8KLSAgICAwLCAvKiAweDE3ICdceDE3JyAqLwotICAgIDAsIC8qIDB4MTggJ1x4MTgnICovCi0gICAgMCwgLyogMHgxOSAnXHgxOScgKi8KLSAgICAwLCAvKiAweDFhICdceDFhJyAqLwotICAgIDAsIC8qIDB4MWIgJ1x4MWInICovCi0gICAgMCwgLyogMHgxYyAnXHgxYycgKi8KLSAgICAwLCAvKiAweDFkICdceDFkJyAqLwotICAgIDAsIC8qIDB4MWUgJ1x4MWUnICovCi0gICAgMCwgLyogMHgxZiAnXHgxZicgKi8KLSAgICBGTEFHX1NQQUNFLCAvKiAweDIwICcgJyAqLwotICAgIDAsIC8qIDB4MjEgJyEnICovCi0gICAgMCwgLyogMHgyMiAnIicgKi8KLSAgICAwLCAvKiAweDIzICcjJyAqLwotICAgIDAsIC8qIDB4MjQgJyQnICovCi0gICAgMCwgLyogMHgyNSAnJScgKi8KLSAgICAwLCAvKiAweDI2ICcmJyAqLwotICAgIDAsIC8qIDB4MjcgIiciICovCi0gICAgMCwgLyogMHgyOCAnKCcgKi8KLSAgICAwLCAvKiAweDI5ICcpJyAqLwotICAgIDAsIC8qIDB4MmEgJyonICovCi0gICAgMCwgLyogMHgyYiAnKycgKi8KLSAgICAwLCAvKiAweDJjICcsJyAqLwotICAgIDAsIC8qIDB4MmQgJy0nICovCi0gICAgMCwgLyogMHgyZSAnLicgKi8KLSAgICAwLCAvKiAweDJmICcvJyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzAgJzAnICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzMSAnMScgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDMyICcyJyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzMgJzMnICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzNCAnNCcgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDM1ICc1JyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzYgJzYnICovCi0gICAgRkxBR19ESUdJVHxGTEFHX1hESUdJVCwgLyogMHgzNyAnNycgKi8KLSAgICBGTEFHX0RJR0lUfEZMQUdfWERJR0lULCAvKiAweDM4ICc4JyAqLwotICAgIEZMQUdfRElHSVR8RkxBR19YRElHSVQsIC8qIDB4MzkgJzknICovCi0gICAgMCwgLyogMHgzYSAnOicgKi8KLSAgICAwLCAvKiAweDNiICc7JyAqLwotICAgIDAsIC8qIDB4M2MgJzwnICovCi0gICAgMCwgLyogMHgzZCAnPScgKi8KLSAgICAwLCAvKiAweDNlICc+JyAqLwotICAgIDAsIC8qIDB4M2YgJz8nICovCi0gICAgMCwgLyogMHg0MCAnQCcgKi8KLSAgICBGTEFHX1VQUEVSfEZMQUdfWERJR0lULCAvKiAweDQxICdBJyAqLwotICAgIEZMQUdfVVBQRVJ8RkxBR19YRElHSVQsIC8qIDB4NDIgJ0InICovCi0gICAgRkxBR19VUFBFUnxGTEFHX1hESUdJVCwgLyogMHg0MyAnQycgKi8KLSAgICBGTEFHX1VQUEVSfEZMQUdfWERJR0lULCAvKiAweDQ0ICdEJyAqLwotICAgIEZMQUdfVVBQRVJ8RkxBR19YRElHSVQsIC8qIDB4NDUgJ0UnICovCi0gICAgRkxBR19VUFBFUnxGTEFHX1hESUdJVCwgLyogMHg0NiAnRicgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDQ3ICdHJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NDggJ0gnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0OSAnSScgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDRhICdKJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NGIgJ0snICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0YyAnTCcgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDRkICdNJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NGUgJ04nICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg0ZiAnTycgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDUwICdQJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTEgJ1EnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1MiAnUicgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDUzICdTJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTQgJ1QnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1NSAnVScgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDU2ICdWJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NTcgJ1cnICovCi0gICAgRkxBR19VUFBFUiwgLyogMHg1OCAnWCcgKi8KLSAgICBGTEFHX1VQUEVSLCAvKiAweDU5ICdZJyAqLwotICAgIEZMQUdfVVBQRVIsIC8qIDB4NWEgJ1onICovCi0gICAgMCwgLyogMHg1YiAnWycgKi8KLSAgICAwLCAvKiAweDVjICdcXCcgKi8KLSAgICAwLCAvKiAweDVkICddJyAqLwotICAgIDAsIC8qIDB4NWUgJ14nICovCi0gICAgMCwgLyogMHg1ZiAnXycgKi8KLSAgICAwLCAvKiAweDYwICdgJyAqLwotICAgIEZMQUdfTE9XRVJ8RkxBR19YRElHSVQsIC8qIDB4NjEgJ2EnICovCi0gICAgRkxBR19MT1dFUnxGTEFHX1hESUdJVCwgLyogMHg2MiAnYicgKi8KLSAgICBGTEFHX0xPV0VSfEZMQUdfWERJR0lULCAvKiAweDYzICdjJyAqLwotICAgIEZMQUdfTE9XRVJ8RkxBR19YRElHSVQsIC8qIDB4NjQgJ2QnICovCi0gICAgRkxBR19MT1dFUnxGTEFHX1hESUdJVCwgLyogMHg2NSAnZScgKi8KLSAgICBGTEFHX0xPV0VSfEZMQUdfWERJR0lULCAvKiAweDY2ICdmJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NjcgJ2cnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2OCAnaCcgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDY5ICdpJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NmEgJ2onICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2YiAnaycgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDZjICdsJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NmQgJ20nICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg2ZSAnbicgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDZmICdvJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzAgJ3AnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3MSAncScgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDcyICdyJyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzMgJ3MnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3NCAndCcgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDc1ICd1JyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzYgJ3YnICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3NyAndycgKi8KLSAgICBGTEFHX0xPV0VSLCAvKiAweDc4ICd4JyAqLwotICAgIEZMQUdfTE9XRVIsIC8qIDB4NzkgJ3knICovCi0gICAgRkxBR19MT1dFUiwgLyogMHg3YSAneicgKi8KLSAgICAwLCAvKiAweDdiICd7JyAqLwotICAgIDAsIC8qIDB4N2MgJ3wnICovCi0gICAgMCwgLyogMHg3ZCAnfScgKi8KLSAgICAwLCAvKiAweDdlICd+JyAqLwotICAgIDAsIC8qIDB4N2YgJ1x4N2YnICovCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotfTsKLQotCi1jb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9jdHlwZV90b2xvd2VyWzI1Nl0gPSB7Ci0gICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKLSAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0gICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKLSAgICAweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAotICAgIDB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCi0gICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLSAgICAweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAotICAgIDB4NDAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0gICAgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKLSAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAotICAgIDB4NzgsIDB4NzksIDB4N2EsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCi0gICAgMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKLSAgICAweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAotICAgIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCi0gICAgMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKLSAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAotICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCi0gICAgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKLSAgICAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAotICAgIDB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCi0gICAgMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKLSAgICAweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAotICAgIDB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCi0gICAgMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKLSAgICAweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAotICAgIDB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCi0gICAgMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKLSAgICAweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAotICAgIDB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCi0gICAgMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKLSAgICAweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmLAotfTsKLQotY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG91cHBlclsyNTZdID0gewotICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0gICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLSAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCi0gICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKLSAgICAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAotICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0gICAgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKLSAgICAweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAotICAgIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsCi0gICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywKLSAgICAweDU4LCAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAotICAgIDB4NjAsIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsCi0gICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiwKLSAgICAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LAotICAgIDB4NTgsIDB4NTksIDB4NWEsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsCi0gICAgMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLSAgICAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAotICAgIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCi0gICAgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKLSAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAotICAgIDB4YTgsIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsCi0gICAgMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywKLSAgICAweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAotICAgIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCi0gICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKLSAgICAweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAotICAgIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCi0gICAgMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywKLSAgICAweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLAotICAgIDB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCi0gICAgMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZCwgMHhmZSwgMHhmZiwKLX07Ci0KLQogUHlEb2NfU1RSVkFSX3NoYXJlZChfUHlfaXNzcGFjZV9fZG9jX18sCiAiQi5pc3NwYWNlKCkgLT4gYm9vbFxuXAogXG5cCkBAIC0yMjgsNyArMTUsNyBAQAogICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCi0gICAgaWYgKGxlbiA9PSAxICYmIElTU1BBQ0UoKnApKQorICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU1NQQUNFKCpwKSkKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTIzNyw3ICsyNCw3IEBACiAKICAgICBlID0gcCArIGxlbjsKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewotICAgICAgICBpZiAoIUlTU1BBQ0UoKnApKQorICAgICAgICBpZiAoIVB5X0lTU1BBQ0UoKnApKQogICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTI1OCw3ICs0NSw3IEBACiAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KLSAgICBpZiAobGVuID09IDEgJiYgSVNBTFBIQSgqcCkpCisgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxQSEEoKnApKQogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgc3RyaW5ncyAqLwpAQCAtMjY3LDcgKzU0LDcgQEAKIAogICAgIGUgPSBwICsgbGVuOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIGlmICghSVNBTFBIQSgqcCkpCisgICAgICAgIGlmICghUHlfSVNBTFBIQSgqcCkpCiAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMjg4LDcgKzc1LDcgQEAKICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwotICAgIGlmIChsZW4gPT0gMSAmJiBJU0FMTlVNKCpwKSkKKyAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTE5VTSgqcCkpCiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBlbXB0eSBzdHJpbmdzICovCkBAIC0yOTcsNyArODQsNyBAQAogCiAgICAgZSA9IHAgKyBsZW47CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgaWYgKCFJU0FMTlVNKCpwKSkKKyAgICAgICAgaWYgKCFQeV9JU0FMTlVNKCpwKSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKICAgICB9CiAgICAgUHlfUkVUVVJOX1RSVUU7CkBAIC0zMTgsNyArMTA1LDcgQEAKICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwotICAgIGlmIChsZW4gPT0gMSAmJiBJU0RJR0lUKCpwKSkKKyAgICBpZiAobGVuID09IDEgJiYgUHlfSVNESUdJVCgqcCkpCiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBlbXB0eSBzdHJpbmdzICovCkBAIC0zMjcsNyArMTE0LDcgQEAKIAogICAgIGUgPSBwICsgbGVuOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIGlmICghSVNESUdJVCgqcCkpCisgICAgICAgIGlmICghUHlfSVNESUdJVCgqcCkpCiAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMzUwLDcgKzEzNyw3IEBACiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxKQotICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKElTTE9XRVIoKnApKTsKKyAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhQeV9JU0xPV0VSKCpwKSk7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGVtcHR5IHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDApCkBAIC0zNTksOSArMTQ2LDkgQEAKICAgICBlID0gcCArIGxlbjsKICAgICBjYXNlZCA9IDA7CiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKLSAgICAgICAgaWYgKElTVVBQRVIoKnApKQorICAgICAgICBpZiAoUHlfSVNVUFBFUigqcCkpCiAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Ci0gICAgICAgIGVsc2UgaWYgKCFjYXNlZCAmJiBJU0xPV0VSKCpwKSkKKyAgICAgICAgZWxzZSBpZiAoIWNhc2VkICYmIFB5X0lTTE9XRVIoKnApKQogICAgICAgICAgICAgY2FzZWQgPSAxOwogICAgIH0KICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGNhc2VkKTsKQEAgLTM4NCw3ICsxNzEsNyBAQAogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSkKLSAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhJU1VQUEVSKCpwKSk7CisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNVUFBFUigqcCkpOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBlbXB0eSBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAwKQpAQCAtMzkzLDkgKzE4MCw5IEBACiAgICAgZSA9IHAgKyBsZW47CiAgICAgY2FzZWQgPSAwOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIGlmIChJU0xPV0VSKCpwKSkKKyAgICAgICAgaWYgKFB5X0lTTE9XRVIoKnApKQogICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwotICAgICAgICBlbHNlIGlmICghY2FzZWQgJiYgSVNVUFBFUigqcCkpCisgICAgICAgIGVsc2UgaWYgKCFjYXNlZCAmJiBQeV9JU1VQUEVSKCpwKSkKICAgICAgICAgICAgIGNhc2VkID0gMTsKICAgICB9CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhjYXNlZCk7CkBAIC00MjAsNyArMjA3LDcgQEAKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEpCi0gICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoSVNVUFBFUigqcCkpOworICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFB5X0lTVVBQRVIoKnApKTsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZW1wdHkgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMCkKQEAgLTQzMiwxMyArMjE5LDEzIEBACiAgICAgZm9yICg7IHAgPCBlOyBwKyspIHsKICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOwogCi0gICAgICAgIGlmIChJU1VQUEVSKGNoKSkgeworICAgICAgICBpZiAoUHlfSVNVUFBFUihjaCkpIHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c19pc19jYXNlZCkKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgICAgICAgICBwcmV2aW91c19pc19jYXNlZCA9IDE7CiAgICAgICAgICAgICBjYXNlZCA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSVNMT1dFUihjaCkpIHsKKyAgICAgICAgZWxzZSBpZiAoUHlfSVNMT1dFUihjaCkpIHsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNfaXNfY2FzZWQpCiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgICAgICAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAxOwpAQCAtNDczLDggKzI2MCw4IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaW50IGMgPSBQeV9DSEFSTUFTSyhyZXN1bHRbaV0pOwotICAgICAgICAgICAgICAgIGlmIChJU1VQUEVSKGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gVE9MT1dFUihjKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNVUFBFUihjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IFB5X1RPTE9XRVIoYyk7CiAgICAgICAgIH0KIH0KIApAQCAtNTAxLDggKzI4OCw4IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaW50IGMgPSBQeV9DSEFSTUFTSyhyZXN1bHRbaV0pOwotICAgICAgICAgICAgICAgIGlmIChJU0xPV0VSKGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gVE9VUFBFUihjKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNMT1dFUihjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IFB5X1RPVVBQRVIoYyk7CiAgICAgICAgIH0KIH0KIApAQCAtNTI3LDEzICszMTQsMTMgQEAKICAgICAgICAgKi8KICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaW50IGMgPSBQeV9DSEFSTUFTSygqcysrKTsKLSAgICAgICAgICAgICAgICBpZiAoSVNMT1dFUihjKSkgeworICAgICAgICAgICAgICAgIGlmIChQeV9JU0xPV0VSKGMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzX2lzX2Nhc2VkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBUT1VQUEVSKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeV9UT1VQUEVSKGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNVUFBFUihjKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUHlfSVNVUFBFUihjKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBUT0xPV0VSKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeV9UT0xPV0VSKGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAxOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAwOwpAQCAtNTQ1LDcgKzMzMiw4IEBACiBQeURvY19TVFJWQVJfc2hhcmVkKF9QeV9jYXBpdGFsaXplX19kb2NfXywKICJCLmNhcGl0YWxpemUoKSAtPiBjb3B5IG9mIEJcblwKIFxuXAotUmV0dXJuIGEgY29weSBvZiBCIHdpdGggb25seSBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkIChBU0NJSSkuIik7CitSZXR1cm4gYSBjb3B5IG9mIEIgd2l0aCBvbmx5IGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWQgKEFTQ0lJKVxuXAorYW5kIHRoZSByZXN0IGxvd2VyLWNhc2VkLiIpOwogCiB2b2lkCiBfUHlfYnl0ZXNfY2FwaXRhbGl6ZShjaGFyICpyZXN1bHQsIGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuKQpAQCAtNTYwLDE2ICszNDgsMTYgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKDAgPCBsZW4pIHsKICAgICAgICAgICAgICAgICBpbnQgYyA9IFB5X0NIQVJNQVNLKCpzKyspOwotICAgICAgICAgICAgICAgIGlmIChJU0xPV0VSKGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IFRPVVBQRVIoYyk7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTTE9XRVIoYykpCisgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gUHlfVE9VUFBFUihjKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gYzsKICAgICAgICAgICAgICAgICByZXN1bHQrKzsKICAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpbnQgYyA9IFB5X0NIQVJNQVNLKCpzKyspOwotICAgICAgICAgICAgICAgIGlmIChJU1VQUEVSKGMpKQotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IFRPTE9XRVIoYyk7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTVVBQRVIoYykpCisgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gUHlfVE9MT1dFUihjKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gYzsKICAgICAgICAgICAgICAgICByZXN1bHQrKzsKQEAgLTU5NiwxMSArMzg0LDExIEBACiAgICAgICAgICovCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGludCBjID0gUHlfQ0hBUk1BU0soKnMrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKElTTE9XRVIoYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBUT1VQUEVSKGMpOworICAgICAgICAgICAgICAgIGlmIChQeV9JU0xPV0VSKGMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0ID0gUHlfVE9VUFBFUihjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNVUFBFUihjKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IFRPTE9XRVIoYyk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUHlfSVNVUFBFUihjKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IFB5X1RPTE9XRVIoYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBjOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jYXBzdWxlLmMgYi9PYmplY3RzL2NhcHN1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIwZjgyCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9jYXBzdWxlLmMKQEAgLTAsMCArMSwzMjQgQEAKKy8qIFdyYXAgdm9pZCAqIHBvaW50ZXJzIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIEMgbW9kdWxlcyAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKy8qIEludGVybmFsIHN0cnVjdHVyZSBvZiBQeUNhcHN1bGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgdm9pZCAqcG9pbnRlcjsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIHZvaWQgKmNvbnRleHQ7CisgICAgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3RvcjsKK30gUHlDYXBzdWxlOworCisKKworc3RhdGljIGludAorX2lzX2xlZ2FsX2NhcHN1bGUoUHlDYXBzdWxlICpjYXBzdWxlLCBjb25zdCBjaGFyICppbnZhbGlkX2NhcHN1bGUpCit7CisgICAgaWYgKCFjYXBzdWxlIHx8ICFQeUNhcHN1bGVfQ2hlY2tFeGFjdChjYXBzdWxlKSB8fCBjYXBzdWxlLT5wb2ludGVyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIGludmFsaWRfY2Fwc3VsZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworI2RlZmluZSBpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsIG5hbWUpIFwKKyAgICAoX2lzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgXAorICAgICBuYW1lICIgY2FsbGVkIHdpdGggaW52YWxpZCBQeUNhcHN1bGUgb2JqZWN0IikpCisKKworc3RhdGljIGludAorbmFtZV9tYXRjaGVzKGNvbnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMikgeworICAgIC8qIGlmIGVpdGhlciBpcyBOVUxMLCAqLworICAgIGlmICghbmFtZTEgfHwgIW5hbWUyKSB7CisgICAgICAgIC8qIHRoZXkncmUgb25seSB0aGUgc2FtZSBpZiB0aGV5J3JlIGJvdGggTlVMTC4gKi8KKyAgICAgICAgcmV0dXJuIG5hbWUxID09IG5hbWUyOworICAgIH0KKyAgICByZXR1cm4gIXN0cmNtcChuYW1lMSwgbmFtZTIpOworfQorCisKKworUHlPYmplY3QgKgorUHlDYXBzdWxlX05ldyh2b2lkICpwb2ludGVyLCBjb25zdCBjaGFyICpuYW1lLCBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZTsKKworICAgIGlmICghcG9pbnRlcikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIlB5Q2Fwc3VsZV9OZXcgY2FsbGVkIHdpdGggbnVsbCBwb2ludGVyIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNhcHN1bGUgPSBQeU9iamVjdF9ORVcoUHlDYXBzdWxlLCAmUHlDYXBzdWxlX1R5cGUpOworICAgIGlmIChjYXBzdWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2Fwc3VsZS0+cG9pbnRlciA9IHBvaW50ZXI7CisgICAgY2Fwc3VsZS0+bmFtZSA9IG5hbWU7CisgICAgY2Fwc3VsZS0+Y29udGV4dCA9IE5VTEw7CisgICAgY2Fwc3VsZS0+ZGVzdHJ1Y3RvciA9IGRlc3RydWN0b3I7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopY2Fwc3VsZTsKK30KKworCitpbnQKK1B5Q2Fwc3VsZV9Jc1ZhbGlkKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgcmV0dXJuIChjYXBzdWxlICE9IE5VTEwgJiYKKyAgICAgICAgICAgIFB5Q2Fwc3VsZV9DaGVja0V4YWN0KGNhcHN1bGUpICYmCisgICAgICAgICAgICBjYXBzdWxlLT5wb2ludGVyICE9IE5VTEwgJiYKKyAgICAgICAgICAgIG5hbWVfbWF0Y2hlcyhjYXBzdWxlLT5uYW1lLCBuYW1lKSk7Cit9CisKKwordm9pZCAqCitQeUNhcHN1bGVfR2V0UG9pbnRlcihQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKworICAgIGlmICghaXNfbGVnYWxfY2Fwc3VsZShjYXBzdWxlLCAiUHlDYXBzdWxlX0dldFBvaW50ZXIiKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIW5hbWVfbWF0Y2hlcyhuYW1lLCBjYXBzdWxlLT5uYW1lKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIGNhbGxlZCB3aXRoIGluY29ycmVjdCBuYW1lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjYXBzdWxlLT5wb2ludGVyOworfQorCisKK2NvbnN0IGNoYXIgKgorUHlDYXBzdWxlX0dldE5hbWUoUHlPYmplY3QgKm8pCit7CisgICAgUHlDYXBzdWxlICpjYXBzdWxlID0gKFB5Q2Fwc3VsZSAqKW87CisKKyAgICBpZiAoIWlzX2xlZ2FsX2NhcHN1bGUoY2Fwc3VsZSwgIlB5Q2Fwc3VsZV9HZXROYW1lIikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBjYXBzdWxlLT5uYW1lOworfQorCisKK1B5Q2Fwc3VsZV9EZXN0cnVjdG9yCitQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqbykKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKworICAgIGlmICghaXNfbGVnYWxfY2Fwc3VsZShjYXBzdWxlLCAiUHlDYXBzdWxlX0dldERlc3RydWN0b3IiKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGNhcHN1bGUtPmRlc3RydWN0b3I7Cit9CisKKwordm9pZCAqCitQeUNhcHN1bGVfR2V0Q29udGV4dChQeU9iamVjdCAqbykKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKworICAgIGlmICghaXNfbGVnYWxfY2Fwc3VsZShjYXBzdWxlLCAiUHlDYXBzdWxlX0dldENvbnRleHQiKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGNhcHN1bGUtPmNvbnRleHQ7Cit9CisKKworaW50CitQeUNhcHN1bGVfU2V0UG9pbnRlcihQeU9iamVjdCAqbywgdm9pZCAqcG9pbnRlcikKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKworICAgIGlmICghcG9pbnRlcikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIGNhbGxlZCB3aXRoIG51bGwgcG9pbnRlciIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfU2V0UG9pbnRlciIpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjYXBzdWxlLT5wb2ludGVyID0gcG9pbnRlcjsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK1B5Q2Fwc3VsZV9TZXROYW1lKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfU2V0TmFtZSIpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjYXBzdWxlLT5uYW1lID0gbmFtZTsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK1B5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yKFB5T2JqZWN0ICpvLCBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yKQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvciIpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjYXBzdWxlLT5kZXN0cnVjdG9yID0gZGVzdHJ1Y3RvcjsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK1B5Q2Fwc3VsZV9TZXRDb250ZXh0KFB5T2JqZWN0ICpvLCB2b2lkICpjb250ZXh0KQoreworICAgIFB5Q2Fwc3VsZSAqY2Fwc3VsZSA9IChQeUNhcHN1bGUgKilvOworCisgICAgaWYgKCFpc19sZWdhbF9jYXBzdWxlKGNhcHN1bGUsICJQeUNhcHN1bGVfU2V0Q29udGV4dCIpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjYXBzdWxlLT5jb250ZXh0ID0gY29udGV4dDsKKyAgICByZXR1cm4gMDsKK30KKworCit2b2lkICoKK1B5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKQoreworICAgIFB5T2JqZWN0ICpvYmplY3QgPSBOVUxMOworICAgIHZvaWQgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY2hhciAqdHJhY2U7CisgICAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gKHN0cmxlbihuYW1lKSArIDEpICogc2l6ZW9mKGNoYXIpOworICAgIGNoYXIgKm5hbWVfZHVwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobmFtZV9sZW5ndGgpOworCisgICAgaWYgKCFuYW1lX2R1cCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1jcHkobmFtZV9kdXAsIG5hbWUsIG5hbWVfbGVuZ3RoKTsKKworICAgIHRyYWNlID0gbmFtZV9kdXA7CisgICAgd2hpbGUgKHRyYWNlKSB7CisgICAgICAgIGNoYXIgKmRvdCA9IHN0cmNocih0cmFjZSwgJy4nKTsKKyAgICAgICAgaWYgKGRvdCkgeworICAgICAgICAgICAgKmRvdCsrID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvYmplY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKG5vX2Jsb2NrKSB7CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jayh0cmFjZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iamVjdCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSh0cmFjZSk7CisgICAgICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiUHlDYXBzdWxlX0ltcG9ydCBjb3VsZCBub3QgaW1wb3J0IG1vZHVsZSBcIiVzXCIiLCB0cmFjZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKm9iamVjdDIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iamVjdCwgdHJhY2UpOworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICBvYmplY3QgPSBvYmplY3QyOworICAgICAgICB9CisgICAgICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgICAgICBnb3RvIEVYSVQ7CisgICAgICAgIH0KKworICAgICAgICB0cmFjZSA9IGRvdDsKKyAgICB9CisKKyAgICAvKiBjb21wYXJlIGF0dHJpYnV0ZSBuYW1lIHRvIG1vZHVsZS5uYW1lIGJ5IGhhbmQgKi8KKyAgICBpZiAoUHlDYXBzdWxlX0lzVmFsaWQob2JqZWN0LCBuYW1lKSkgeworICAgICAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopb2JqZWN0OworICAgICAgICByZXR1cm5fdmFsdWUgPSBjYXBzdWxlLT5wb2ludGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICJQeUNhcHN1bGVfSW1wb3J0IFwiJXNcIiBpcyBub3QgdmFsaWQiLAorICAgICAgICAgICAgbmFtZSk7CisgICAgfQorCitFWElUOgorICAgIFB5X1hERUNSRUYob2JqZWN0KTsKKyAgICBpZiAobmFtZV9kdXApIHsKKyAgICAgICAgUHlNZW1fRlJFRShuYW1lX2R1cCk7CisgICAgfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKworc3RhdGljIHZvaWQKK2NhcHN1bGVfZGVhbGxvYyhQeU9iamVjdCAqbykKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKyAgICBpZiAoY2Fwc3VsZS0+ZGVzdHJ1Y3RvcikgeworICAgICAgICBjYXBzdWxlLT5kZXN0cnVjdG9yKG8pOworICAgIH0KKyAgICBQeU9iamVjdF9ERUwobyk7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2NhcHN1bGVfcmVwcihQeU9iamVjdCAqbykKK3sKKyAgICBQeUNhcHN1bGUgKmNhcHN1bGUgPSAoUHlDYXBzdWxlICopbzsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKnF1b3RlOworCisgICAgaWYgKGNhcHN1bGUtPm5hbWUpIHsKKyAgICAgICAgcXVvdGUgPSAiXCIiOworICAgICAgICBuYW1lID0gY2Fwc3VsZS0+bmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICBxdW90ZSA9ICIiOworICAgICAgICBuYW1lID0gIk5VTEwiOworICAgIH0KKworICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8Y2Fwc3VsZSBvYmplY3QgJXMlcyVzIGF0ICVwPiIsCisgICAgICAgIHF1b3RlLCBuYW1lLCBxdW90ZSwgY2Fwc3VsZSk7Cit9CisKKworCitQeURvY19TVFJWQVIoUHlDYXBzdWxlX1R5cGVfX2RvY19fLAorIkNhcHN1bGUgb2JqZWN0cyBsZXQgeW91IHdyYXAgYSBDIFwidm9pZCAqXCIgcG9pbnRlciBpbiBhIFB5dGhvblxuXAorb2JqZWN0LiAgVGhleSdyZSBhIHdheSBvZiBwYXNzaW5nIGRhdGEgdGhyb3VnaCB0aGUgUHl0aG9uIGludGVycHJldGVyXG5cCit3aXRob3V0IGNyZWF0aW5nIHlvdXIgb3duIGN1c3RvbSB0eXBlLlxuXAorXG5cCitDYXBzdWxlcyBhcmUgdXNlZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGV4dGVuc2lvbiBtb2R1bGVzLlxuXAorVGhleSBwcm92aWRlIGEgd2F5IGZvciBhbiBleHRlbnNpb24gbW9kdWxlIHRvIGV4cG9ydCBhIEMgaW50ZXJmYWNlXG5cCit0byBvdGhlciBleHRlbnNpb24gbW9kdWxlcywgc28gdGhhdCBleHRlbnNpb24gbW9kdWxlcyBjYW4gdXNlIHRoZVxuXAorUHl0aG9uIGltcG9ydCBtZWNoYW5pc20gdG8gbGluayB0byBvbmUgYW5vdGhlci5cblwKKyIpOworCitQeVR5cGVPYmplY3QgUHlDYXBzdWxlX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiUHlDYXBzdWxlIiwJCS8qdHBfbmFtZSovCisgICAgc2l6ZW9mKFB5Q2Fwc3VsZSksCQkvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwJCQkJLyp0cF9pdGVtc2l6ZSovCisgICAgLyogbWV0aG9kcyAqLworICAgIGNhcHN1bGVfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLAkJCQkvKnRwX3ByaW50Ki8KKyAgICAwLAkJCQkvKnRwX2dldGF0dHIqLworICAgIDAsCQkJCS8qdHBfc2V0YXR0ciovCisgICAgMCwJCQkJLyp0cF9yZXNlcnZlZCovCisgICAgY2Fwc3VsZV9yZXByLCAvKnRwX3JlcHIqLworICAgIDAsCQkJCS8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLAkJCQkvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLAkJCQkvKnRwX2FzX21hcHBpbmcqLworICAgIDAsCQkJCS8qdHBfaGFzaCovCisgICAgMCwJCQkJLyp0cF9jYWxsKi8KKyAgICAwLAkJCQkvKnRwX3N0ciovCisgICAgMCwJCQkJLyp0cF9nZXRhdHRybyovCisgICAgMCwJCQkJLyp0cF9zZXRhdHRybyovCisgICAgMCwJCQkJLyp0cF9hc19idWZmZXIqLworICAgIDAsCQkJCS8qdHBfZmxhZ3MqLworICAgIFB5Q2Fwc3VsZV9UeXBlX19kb2NfXwkvKnRwX2RvYyovCit9OworCisKZGlmZiAtLWdpdCBhL09iamVjdHMvY2xhc3NvYmplY3QuYyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwppbmRleCA4YzMzODIzLi4wODMyNTMxIDEwMDY0NAotLS0gYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICAgICBvcC0+Y2xfZGljdCA9IGRpY3Q7CiAgICAgUHlfWElOQ1JFRihuYW1lKTsKICAgICBvcC0+Y2xfbmFtZSA9IG5hbWU7CisgICAgb3AtPmNsX3dlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIG9wLT5jbF9nZXRhdHRyID0gY2xhc3NfbG9va3VwKG9wLCBnZXRhdHRyc3RyLCAmZHVtbXkpOwogICAgIG9wLT5jbF9zZXRhdHRyID0gY2xhc3NfbG9va3VwKG9wLCBzZXRhdHRyc3RyLCAmZHVtbXkpOwpAQCAtMTg4LDYgKzE4OSw4IEBACiBjbGFzc19kZWFsbG9jKFB5Q2xhc3NPYmplY3QgKm9wKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKG9wKTsKKyAgICBpZiAob3AtPmNsX3dlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIG9wKTsKICAgICBQeV9ERUNSRUYob3AtPmNsX2Jhc2VzKTsKICAgICBQeV9ERUNSRUYob3AtPmNsX2RpY3QpOwogICAgIFB5X1hERUNSRUYob3AtPmNsX25hbWUpOwpAQCAtNDU0LDcgKzQ1Nyw3IEBACiAgICAgKHRyYXZlcnNlcHJvYyljbGFzc190cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKFB5Q2xhc3NPYmplY3QsIGNsX3dlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC0yMjI2LDEwICsyMjI5LDYgQEAKIFB5TWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprbGFzcykKIHsKICAgICByZWdpc3RlciBQeU1ldGhvZE9iamVjdCAqaW07Ci0gICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGZ1bmMpKSB7Ci0gICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgaW0gPSBmcmVlX2xpc3Q7CiAgICAgaWYgKGltICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5TWV0aG9kT2JqZWN0ICopKGltLT5pbV9zZWxmKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29iamVjdC5jIGIvT2JqZWN0cy9jb2JqZWN0LmMKaW5kZXggYzQzNzQ5MS4uMzU1NDIxZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2JqZWN0LmMKQEAgLTksMTEgKzksMjIgQEAKIHR5cGVkZWYgdm9pZCAoKmRlc3RydWN0b3IxKSh2b2lkICopOwogdHlwZWRlZiB2b2lkICgqZGVzdHJ1Y3RvcjIpKHZvaWQgKiwgdm9pZCopOwogCitzdGF0aWMgaW50IGNvYmplY3RfZGVwcmVjYXRpb25fd2FybmluZyh2b2lkKQoreworICAgIHJldHVybiBQeUVycl9XYXJuUHkzaygiQ09iamVjdCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMy54LiAiCisgICAgICAgICJQbGVhc2UgdXNlIGNhcHN1bGUgb2JqZWN0cyBpbnN0ZWFkLiIsIDEpOworfQorCisKIFB5T2JqZWN0ICoKIFB5Q09iamVjdF9Gcm9tVm9pZFB0cih2b2lkICpjb2JqLCB2b2lkICgqZGVzdHIpKHZvaWQgKikpCiB7CiAgICAgUHlDT2JqZWN0ICpzZWxmOwogCisgICAgaWYgKGNvYmplY3RfZGVwcmVjYXRpb25fd2FybmluZygpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIHNlbGYgPSBQeU9iamVjdF9ORVcoUHlDT2JqZWN0LCAmUHlDT2JqZWN0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzAsNiArNDEsMTAgQEAKIHsKICAgICBQeUNPYmplY3QgKnNlbGY7CiAKKyAgICBpZiAoY29iamVjdF9kZXByZWNhdGlvbl93YXJuaW5nKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaWYgKCFkZXNjKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYyBjYWxsZWQgd2l0aCBudWxsIgpAQCAtNTAsNiArNjUsMTAgQEAKIFB5Q09iamVjdF9Bc1ZvaWRQdHIoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYpIHsKKyAgICAgICAgaWYgKFB5Q2Fwc3VsZV9DaGVja0V4YWN0KHNlbGYpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gUHlDYXBzdWxlX0dldE5hbWUoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gKHZvaWQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihzZWxmLCBuYW1lKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc2VsZi0+b2JfdHlwZSA9PSAmUHlDT2JqZWN0X1R5cGUpCiAgICAgICAgICAgICByZXR1cm4gKChQeUNPYmplY3QgKilzZWxmKS0+Y29iamVjdDsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKZGlmZiAtLWdpdCBhL09iamVjdHMvY29kZW9iamVjdC5jIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKaW5kZXggOWMzYmZlZS4uOTg3OWRmNSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKQEAgLTEwMywxMCArMTAzLDU3IEBACiAgICAgICAgIFB5X0lOQ1JFRihsbm90YWIpOwogICAgICAgICBjby0+Y29fbG5vdGFiID0gbG5vdGFiOwogICAgICAgICBjby0+Y29fem9tYmllZnJhbWUgPSBOVUxMOworICAgICAgICBjby0+Y29fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIH0KICAgICByZXR1cm4gY287CiB9CiAKK1B5Q29kZU9iamVjdCAqCitQeUNvZGVfTmV3RW1wdHkoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgZmlyc3RsaW5lbm8pCit7CisgICAgc3RhdGljIFB5T2JqZWN0ICplbXB0eXN0cmluZyA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpudWxsdHVwbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYiA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZ1bmNuYW1lX29iID0gTlVMTDsKKyAgICBQeUNvZGVPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaWYgKGVtcHR5c3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgZW1wdHlzdHJpbmcgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgaWYgKGVtcHR5c3RyaW5nID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgaWYgKG51bGx0dXBsZSA9PSBOVUxMKSB7CisgICAgICAgIG51bGx0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAobnVsbHR1cGxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZnVuY25hbWVfb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZ1bmNuYW1lKTsKKyAgICBpZiAoZnVuY25hbWVfb2IgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgZmlsZW5hbWVfb2IgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpbGVuYW1lKTsKKyAgICBpZiAoZmlsZW5hbWVfb2IgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWQ7CisKKyAgICByZXN1bHQgPSBQeUNvZGVfTmV3KDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGFyZ2NvdW50ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubG9jYWxzICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFja3NpemUgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisgICAgICAgICAgICAgICAgZW1wdHlzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBjb2RlICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdHMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIG5hbWVzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJuYW1lcyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZXZhcnMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIGNlbGx2YXJzICovCisgICAgICAgICAgICAgICAgZmlsZW5hbWVfb2IsICAgICAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSAqLworICAgICAgICAgICAgICAgIGZ1bmNuYW1lX29iLCAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLworICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCAgICAgICAgICAgICAgICAgICAgLyogZmlyc3RsaW5lbm8gKi8KKyAgICAgICAgICAgICAgICBlbXB0eXN0cmluZyAgICAgICAgICAgICAgICAgICAgIC8qIGxub3RhYiAqLworICAgICAgICAgICAgICAgICk7CisKK2ZhaWxlZDoKKyAgICBQeV9YREVDUkVGKGZ1bmNuYW1lX29iKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lX29iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUNvZGVPYmplY3QsIHgpCiAKQEAgLTI2OCw2ICszMTUsOCBAQAogICAgIFB5X1hERUNSRUYoY28tPmNvX2xub3RhYik7CiAgICAgaWYgKGNvLT5jb196b21iaWVmcmFtZSAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9HQ19EZWwoY28tPmNvX3pvbWJpZWZyYW1lKTsKKyAgICBpZiAoY28tPmNvX3dlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0Kiljbyk7CiAgICAgUHlPYmplY3RfREVMKGNvKTsKIH0KIApAQCAtNDQ0LDggKzQ5Myw4IEBACiAgICAgY29kZV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIGNvZGVfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgY29kZV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihQeUNvZGVPYmplY3QsIGNvX3dlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC00NjEsNDggKzUxMCw4IEBACiAgICAgY29kZV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi0vKiBBbGwgYWJvdXQgY19sbm90YWIuCi0KLWNfbG5vdGFiIGlzIGFuIGFycmF5IG9mIHVuc2lnbmVkIGJ5dGVzIGRpc2d1aXNlZCBhcyBhIFB5dGhvbiBzdHJpbmcuICBJbiAtTwotbW9kZSwgU0VUX0xJTkVOTyBvcGNvZGVzIGFyZW4ndCBnZW5lcmF0ZWQsIGFuZCBieXRlY29kZSBvZmZzZXRzIGFyZSBtYXBwZWQKLXRvIHNvdXJjZSBjb2RlIGxpbmUgI3MgKHdoZW4gbmVlZGVkIGZvciB0cmFjZWJhY2tzKSB2aWEgY19sbm90YWIgaW5zdGVhZC4KLVRoZSBhcnJheSBpcyBjb25jZXB0dWFsbHkgYSBsaXN0IG9mCi0gICAgKGJ5dGVjb2RlIG9mZnNldCBpbmNyZW1lbnQsIGxpbmUgbnVtYmVyIGluY3JlbWVudCkKLXBhaXJzLiAgVGhlIGRldGFpbHMgYXJlIGltcG9ydGFudCBhbmQgZGVsaWNhdGUsIGJlc3QgaWxsdXN0cmF0ZWQgYnkgZXhhbXBsZToKLQotICAgIGJ5dGUgY29kZSBvZmZzZXQgICAgc291cmNlIGNvZGUgbGluZSBudW1iZXIKLSAgICAwICAgICAgICAgICAgICAgICAgICAgICAxCi0gICAgNiAgICAgICAgICAgICAgICAgICAgICAgMgotICAgICAgIDUwICAgICAgICAgICAgICAgICAgIDcKLSAgICAgIDM1MCAgICAgICAgICAgICAgICAgMzA3Ci0gICAgICAzNjEgICAgICAgICAgICAgICAgIDMwOAotCi1UaGUgZmlyc3QgdHJpY2sgaXMgdGhhdCB0aGVzZSBudW1iZXJzIGFyZW4ndCBzdG9yZWQsIG9ubHkgdGhlIGluY3JlbWVudHMKLWZyb20gb25lIHJvdyB0byB0aGUgbmV4dCAodGhpcyBkb2Vzbid0IHJlYWxseSB3b3JrLCBidXQgaXQncyBhIHN0YXJ0KToKLQotICAgIDAsIDEsICA2LCAxLCAgNDQsIDUsICAzMDAsIDMwMCwgIDExLCAxCi0KLVRoZSBzZWNvbmQgdHJpY2sgaXMgdGhhdCBhbiB1bnNpZ25lZCBieXRlIGNhbid0IGhvbGQgbmVnYXRpdmUgdmFsdWVzLCBvcgotdmFsdWVzIGxhcmdlciB0aGFuIDI1NSwgc28gKGEpIHRoZXJlJ3MgYSBkZWVwIGFzc3VtcHRpb24gdGhhdCBieXRlIGNvZGUKLW9mZnNldHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGluZSAjcyBib3RoIGluY3JlYXNlIG1vbm90b25pY2FsbHksIGFuZCAoYikKLWlmIGF0IGxlYXN0IG9uZSBjb2x1bW4ganVtcHMgYnkgbW9yZSB0aGFuIDI1NSBmcm9tIG9uZSByb3cgdG8gdGhlIG5leHQsIG1vcmUKLXRoYW4gb25lIHBhaXIgaXMgd3JpdHRlbiB0byB0aGUgdGFibGUuIEluIGNhc2UgI2IsIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKLWZyb20gbG9va2luZyBhdCB0aGUgdGFibGUgbGF0ZXIgaG93IG1hbnkgd2VyZSB3cml0dGVuLiAgVGhhdCdzIHRoZSBkZWxpY2F0ZQotcGFydC4gIEEgdXNlciBvZiBjX2xub3RhYiBkZXNpcmluZyB0byBmaW5kIHRoZSBzb3VyY2UgbGluZSBudW1iZXIKLWNvcnJlc3BvbmRpbmcgdG8gYSBieXRlY29kZSBhZGRyZXNzIEEgc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlIHRoaXMKLQotICAgIGxpbmVubyA9IGFkZHIgPSAwCi0gICAgZm9yIGFkZHJfaW5jciwgbGluZV9pbmNyIGluIGNfbG5vdGFiOgotICAgIGFkZHIgKz0gYWRkcl9pbmNyCi0gICAgaWYgYWRkciA+IEE6Ci0gICAgICAgIHJldHVybiBsaW5lbm8KLSAgICBsaW5lbm8gKz0gbGluZV9pbmNyCi0KLUluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdoZW4gdGhlIGFkZHIgZmllbGQgaW5jcmVtZW50cyBieSBtb3JlIHRoYW4gMjU1LAotdGhlIGxpbmUgIyBpbmNyZW1lbnQgaW4gZWFjaCBwYWlyIGdlbmVyYXRlZCBtdXN0IGJlIDAgdW50aWwgdGhlIHJlbWFpbmluZyBhZGRyCi1pbmNyZW1lbnQgaXMgPCAyNTYuICBTbywgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIGNvbV9zZXRfbGluZW5vIHNob3VsZCBub3QgKGFzCi13YXMgYWN0dWFsbHkgZG9uZSB1bnRpbCAyLjIpIGV4cGFuZCAzMDAsIDMwMCB0byAyNTUsIDI1NSwgIDQ1LCA0NSwgYnV0IHRvCi0yNTUsIDAsICA0NSwgMjU1LCAgMCwgNDUuCisvKiBVc2UgY29fbG5vdGFiIHRvIGNvbXB1dGUgdGhlIGxpbmUgbnVtYmVyIGZyb20gYSBieXRlY29kZSBpbmRleCwgYWRkcnEuICBTZWUKKyAgIGxub3RhYl9ub3Rlcy50eHQgZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBsbm90YWIgcmVwcmVzZW50YXRpb24uCiAqLwogCiBpbnQKQEAgLTUyMSw4NSArNTMwLDEwIEBACiAgICAgcmV0dXJuIGxpbmU7CiB9CiAKLS8qCi0gICBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGlzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuCi0KLSAqLwotCi0gICAgLyogVGhlIHRoZW9yeSBvZiBTRVRfTElORU5PLWxlc3MgdHJhY2luZy4KLQotICAgICAgIEluIGEgbnV0c2hlbGwsIHdlIHVzZSB0aGUgY29fbG5vdGFiIGZpZWxkIG9mIHRoZSBjb2RlIG9iamVjdAotICAgICAgIHRvIHRlbGwgd2hlbiBleGVjdXRpb24gaGFzIG1vdmVkIG9udG8gYSBkaWZmZXJlbnQgbGluZS4KLQotICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdGhlIGJhc2ljIGlkZWEgaXMgc28gc2V0IHRoaW5ncyB1cCBzbwotICAgICAgIHRoYXQKLQotICAgICAgICAgKmluc3RyX2xiIDw9IGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX3ViCi0KLSAgICAgICBpcyB0cnVlIHNvIGxvbmcgYXMgZXhlY3V0aW9uIGRvZXMgbm90IGNoYW5nZSBsaW5lcy4KLQotICAgICAgIFRoaXMgaXMgYWxsIGZhaXJseSBzaW1wbGUuICBEaWdnaW5nIHRoZSBpbmZvcm1hdGlvbiBvdXQgb2YKLSAgICAgICBjb19sbm90YWIgdGFrZXMgc29tZSB3b3JrLCBidXQgaXMgY29uY2VwdHVhbGx5IGNsZWFyLgotCi0gICAgICAgU29tZXdoYXQgaGFyZGVyIHRvIGV4cGxhaW4gaXMgd2h5IHdlIGRvbid0ICphbHdheXMqIGNhbGwgdGhlCi0gICAgICAgbGluZSB0cmFjZSBmdW5jdGlvbiB3aGVuIHRoZSBhYm92ZSB0ZXN0IGZhaWxzLgotCi0gICAgICAgQ29uc2lkZXIgdGhpcyBjb2RlOgotCi0gICAgICAgMTogZGVmIGYoYSk6Ci0gICAgICAgMjogICAgIGlmIGE6Ci0gICAgICAgMzogICAgICAgIHByaW50IDEKLSAgICAgICA0OiAgICAgZWxzZToKLSAgICAgICA1OiAgICAgICAgcHJpbnQgMgotCi0gICAgICAgd2hpY2ggY29tcGlsZXMgdG8gdGhpczoKLQotICAgICAgIDIgICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKGEpCi0gICAgICAgICAgICAgICAgICAgMyBKVU1QX0lGX0ZBTFNFICAgICAgICAgICAgOSAodG8gMTUpCi0gICAgICAgICAgICAgICAgICAgNiBQT1BfVE9QCi0KLSAgICAgICAzICAgICAgICAgICA3IExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQotICAgICAgICAgICAgICAgICAgMTAgUFJJTlRfSVRFTQotICAgICAgICAgICAgICAgICAgMTEgUFJJTlRfTkVXTElORQotICAgICAgICAgICAgICAgICAgMTIgSlVNUF9GT1JXQVJEICAgICAgICAgICAgIDYgKHRvIDIxKQotICAgICAgICAgPj4gICAxNSBQT1BfVE9QCi0KLSAgICAgICA1ICAgICAgICAgIDE2IExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgyKQotICAgICAgICAgICAgICAgICAgMTkgUFJJTlRfSVRFTQotICAgICAgICAgICAgICAgICAgMjAgUFJJTlRfTkVXTElORQotICAgICAgICAgPj4gICAyMSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKLSAgICAgICAgICAgICAgMjQgUkVUVVJOX1ZBTFVFCi0KLSAgICAgICBJZiAnYScgaXMgZmFsc2UsIGV4ZWN1dGlvbiB3aWxsIGp1bXAgdG8gaW5zdHJ1Y3Rpb24gYXQgb2Zmc2V0Ci0gICAgICAgMTUgYW5kIHRoZSBjb19sbm90YWIgd2lsbCBjbGFpbSB0aGF0IGV4ZWN1dGlvbiBoYXMgbW92ZWQgdG8KLSAgICAgICBsaW5lIDMuICBUaGlzIGlzIGF0IGJlc3QgbWlzbGVhZGluZy4gIEluIHRoaXMgY2FzZSB3ZSBjb3VsZAotICAgICAgIGFzc29jaWF0ZSB0aGUgUE9QX1RPUCB3aXRoIGxpbmUgNCwgYnV0IHRoYXQgZG9lc24ndCBtYWtlCi0gICAgICAgc2Vuc2UgaW4gYWxsIGNhc2VzIChJIHRoaW5rKS4KLQotICAgICAgIFdoYXQgd2UgZG8gaXMgb25seSBjYWxsIHRoZSBsaW5lIHRyYWNlIGZ1bmN0aW9uIGlmIHRoZSBjb19sbm90YWIKLSAgICAgICBpbmRpY2F0ZXMgd2UgaGF2ZSBqdW1wZWQgdG8gdGhlICpzdGFydCogb2YgYSBsaW5lLCBpLmUuIGlmIHRoZQotICAgICAgIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb2Zmc2V0IG1hdGNoZXMgdGhlIG9mZnNldCBnaXZlbiBmb3IgdGhlCi0gICAgICAgc3RhcnQgb2YgYSBsaW5lIGJ5IHRoZSBjb19sbm90YWIuCi0KLSAgICAgICBUaGlzIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgc2l0dWF0aW9uIHdoZXJlICdhJyBpcyB0cnVlLgotICAgICAgIEV4ZWN1dGlvbiB3aWxsIGp1bXAgZnJvbSBpbnN0cnVjdGlvbiBvZmZzZXQgMTIgdG8gb2Zmc2V0IDIxLgotICAgICAgIFRoZW4gdGhlIGNvX2xub3RhYiB3b3VsZCBpbXBseSB0aGF0IGV4ZWN1dGlvbiBoYXMgbW92ZWQgdG8gbGluZQotICAgICAgIDUsIHdoaWNoIGlzIGFnYWluIG1pc2xlYWRpbmcuCi0KLSAgICAgICBXaHkgZG8gd2Ugc2V0IGZfbGluZW5vIHdoZW4gdHJhY2luZz8gIFdlbGwsIGNvbnNpZGVyIHRoZSBjb2RlCi0gICAgICAgYWJvdmUgd2hlbiAnYScgaXMgdHJ1ZS4gIElmIHN0ZXBwaW5nIHRocm91Z2ggdGhpcyB3aXRoICduJyBpbgotICAgICAgIHBkYiwgeW91IHdvdWxkIHN0b3AgYXQgbGluZSAxIHdpdGggYSAiY2FsbCIgdHlwZSBldmVudCwgdGhlbgotICAgICAgIGxpbmUgZXZlbnRzIG9uIGxpbmVzIDIgYW5kIDMsIHRoZW4gYSAicmV0dXJuIiB0eXBlIGV2ZW50IC0tIGJ1dAotICAgICAgIHlvdSB3b3VsZCBiZSBzaG93biBsaW5lIDUgZHVyaW5nIHRoaXMgZXZlbnQuICBUaGlzIGlzIGEgY2hhbmdlCi0gICAgICAgZnJvbSB0aGUgYmVoYXZpb3VyIGluIDIuMiBhbmQgYmVmb3JlLCBhbmQgSSd2ZSBmb3VuZCBpdAotICAgICAgIGNvbmZ1c2luZyBpbiBwcmFjdGljZS4gIEJ5IHNldHRpbmcgYW5kIHVzaW5nIGZfbGluZW5vIHdoZW4KLSAgICAgICB0cmFjaW5nLCBvbmUgY2FuIHJlcG9ydCBhIGxpbmUgbnVtYmVyIGRpZmZlcmVudCBmcm9tIHRoYXQKLSAgICAgICBzdWdnZXN0ZWQgYnkgZl9sYXN0aSBvbiB0aGlzIG9uZSBvY2Nhc2lvbiB3aGVyZSBpdCdzIGRlc2lyYWJsZS4KLSAgICAqLwotCi0KKy8qIFVwZGF0ZSAqYm91bmRzIHRvIGRlc2NyaWJlIHRoZSBmaXJzdCBhbmQgb25lLXBhc3QtdGhlLWxhc3QgaW5zdHJ1Y3Rpb25zIGluCisgICB0aGUgc2FtZSBsaW5lIGFzIGxhc3RpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhhdCBsaW5lLiAqLwogaW50Ci1QeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKFB5Q29kZU9iamVjdCogY28sIGludCBsYXN0aSwgUHlBZGRyUGFpciAqYm91bmRzKQorX1B5Q29kZV9DaGVja0xpbmVOdW1iZXIoUHlDb2RlT2JqZWN0KiBjbywgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpCiB7CiAgICAgaW50IHNpemUsIGFkZHIsIGxpbmU7CiAgICAgdW5zaWduZWQgY2hhciogcDsKQEAgLTYxNiwxMSArNTUwLDkgQEAKICAgICAgICBpbnN0cl9sYiAtLSBpZiB3ZSBzdG9yZWQgdGhlIG1hdGNoaW5nIHZhbHVlIG9mIHAKICAgICAgICBzb213aGVyZSB3ZSBjb3VsZCBza2lwIHRoZSBmaXJzdCB3aGlsZSBsb29wLiAqLwogCi0gICAgLyogc2VlIGNvbW1lbnRzIGluIGNvbXBpbGUuYyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mCisgICAgLyogU2VlIGxub3RhYl9ub3Rlcy50eHQgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZgogICAgICAgIGNvX2xub3RhYi4gIEEgcG9pbnQgdG8gcmVtZW1iZXI6IGluY3JlbWVudHMgdG8gcAotICAgICAgIHNob3VsZCBjb21lIGluIHBhaXJzIC0tIGFsdGhvdWdoIHdlIGRvbid0IGNhcmUgYWJvdXQKLSAgICAgICB0aGUgbGluZSBpbmNyZW1lbnRzIGhlcmUsIHRyZWF0aW5nIHRoZW0gYXMgYnl0ZQotICAgICAgIGluY3JlbWVudHMgZ2V0cyBjb25mdXNpbmcsIHRvIHNheSB0aGUgbGVhc3QuICovCisgICAgICAgY29tZSBpbiAoYWRkciwgbGluZSkgcGFpcnMuICovCiAKICAgICBib3VuZHMtPmFwX2xvd2VyID0gMDsKICAgICB3aGlsZSAoc2l6ZSA+IDApIHsKQEAgLTYzMywxMyArNTY1LDYgQEAKICAgICAgICAgLS1zaXplOwogICAgIH0KIAotICAgIC8qIElmIGxhc3RpIGFuZCBhZGRyIGRvbid0IG1hdGNoIGV4YWN0bHksIHdlIGRvbid0IHdhbnQgdG8KLSAgICAgICBjaGFuZ2UgdGhlIGxpbmVubyBzbG90IG9uIHRoZSBmcmFtZSBvciBleGVjdXRlIGEgdHJhY2UKLSAgICAgICBmdW5jdGlvbi4gIFJldHVybiAtMSBpbnN0ZWFkLgotICAgICovCi0gICAgaWYgKGFkZHIgIT0gbGFzdGkpCi0gICAgICAgIGxpbmUgPSAtMTsKLQogICAgIGlmIChzaXplID4gMCkgewogICAgICAgICB3aGlsZSAoLS1zaXplID49IDApIHsKICAgICAgICAgICAgIGFkZHIgKz0gKnArKzsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29tcGxleG9iamVjdC5jIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKaW5kZXggZThjOGViYi4uNjc3YWMwZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKQEAgLTgsMTAgKzgsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jaWZkZWYgSEFWRV9JRUVFRlBfSAotI2luY2x1ZGUgPGllZWVmcC5oPgotI2VuZGlmCi0KICNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAKIC8qIFByZWNpc2lvbnMgdXNlZCBieSByZXByKCkgYW5kIHN0cigpLCByZXNwZWN0aXZlbHkuCkBAIC0yODQsMTIgKzI4MCw0MyBAQAogICAgIH0KIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3RyeV9jb21wbGV4X3NwZWNpYWxfbWV0aG9kKFB5T2JqZWN0ICpvcCkgeworICAgIFB5T2JqZWN0ICpmOworICAgIHN0YXRpYyBQeU9iamVjdCAqY29tcGxleHN0cjsKKworICAgIGlmIChjb21wbGV4c3RyID09IE5VTEwpIHsKKyAgICAgICAgY29tcGxleHN0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fY29tcGxleF9fIik7CisgICAgICAgIGlmIChjb21wbGV4c3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5SW5zdGFuY2VfQ2hlY2sob3ApKSB7CisgICAgICAgIGYgPSBQeU9iamVjdF9HZXRBdHRyKG9wLCBjb21wbGV4c3RyKTsKKyAgICAgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGYgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvcCwgIl9fY29tcGxleF9fIiwgJmNvbXBsZXhzdHIpOworICAgICAgICBpZiAoZiA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGYgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwogUHlfY29tcGxleAogUHlDb21wbGV4X0FzQ0NvbXBsZXgoUHlPYmplY3QgKm9wKQogewogICAgIFB5X2NvbXBsZXggY3Y7CiAgICAgUHlPYmplY3QgKm5ld29wID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmNvbXBsZXhfc3RyID0gTlVMTDsKIAogICAgIGFzc2VydChvcCk7CiAgICAgLyogSWYgb3AgaXMgYWxyZWFkeSBvZiB0eXBlIFB5Q29tcGxleF9UeXBlLCByZXR1cm4gaXRzIHZhbHVlICovCkBAIC0zMDIsMjkgKzMyOSw3IEBACiAgICAgY3YucmVhbCA9IC0xLjsKICAgICBjdi5pbWFnID0gMC47CiAKLSAgICBpZiAoY29tcGxleF9zdHIgPT0gTlVMTCkgewotICAgICAgICBpZiAoIShjb21wbGV4X3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fY29tcGxleF9fIikpKQotICAgICAgICAgICAgcmV0dXJuIGN2OwotICAgIH0KLQotICAgIGlmIChQeUluc3RhbmNlX0NoZWNrKG9wKSkgewotICAgICAgICAvKiB0aGlzIGNhbiBnbyBhd2F5IGluIHB5dGhvbiAzMDAwICovCi0gICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyKG9wLCBjb21wbGV4X3N0cikpIHsKLSAgICAgICAgICAgIG5ld29wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChvcCwgIl9fY29tcGxleF9fIiwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoIW5ld29wKQotICAgICAgICAgICAgICAgIHJldHVybiBjdjsKLSAgICAgICAgfQotICAgICAgICAvKiBlbHNlIHRyeSBfX2Zsb2F0X18gKi8KLSAgICB9IGVsc2UgewotICAgICAgICBQeU9iamVjdCAqY29tcGxleGZ1bmM7Ci0gICAgICAgIGNvbXBsZXhmdW5jID0gX1B5VHlwZV9Mb29rdXAob3AtPm9iX3R5cGUsIGNvbXBsZXhfc3RyKTsKLSAgICAgICAgLyogY29tcGxleGZ1bmMgaXMgYSBib3Jyb3dlZCByZWZlcmVuY2UgKi8KLSAgICAgICAgaWYgKGNvbXBsZXhmdW5jKSB7Ci0gICAgICAgICAgICBuZXdvcCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29tcGxleGZ1bmMsIG9wLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICghbmV3b3ApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN2OwotICAgICAgICB9Ci0gICAgfQorICAgIG5ld29wID0gdHJ5X2NvbXBsZXhfc3BlY2lhbF9tZXRob2Qob3ApOwogCiAgICAgaWYgKG5ld29wKSB7CiAgICAgICAgIGlmICghUHlDb21wbGV4X0NoZWNrKG5ld29wKSkgewpAQCAtMzM3LDYgKzM0Miw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7CiAgICAgICAgIHJldHVybiBjdjsKICAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gY3Y7CisgICAgfQogICAgIC8qIElmIG5laXRoZXIgb2YgdGhlIGFib3ZlIHdvcmtzLCBpbnRlcnByZXQgb3AgYXMgYSBmbG9hdCBnaXZpbmcgdGhlCiAgICAgICAgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQsIGFuZCBmaWxsIGluIHRoZSBpbWFnaW5hcnkgcGFydCBhcyAwLiAqLwogICAgIGVsc2UgewpAQCAtMzUzLDgzICszNjEsOTggQEAKIH0KIAogCi1zdGF0aWMgdm9pZAotY29tcGxleF90b19idWYoY2hhciAqYnVmLCBpbnQgYnVmc3osIFB5Q29tcGxleE9iamVjdCAqdiwgaW50IHByZWNpc2lvbikKK3N0YXRpYyBQeU9iamVjdCAqCitjb21wbGV4X2Zvcm1hdChQeUNvbXBsZXhPYmplY3QgKnYsIGludCBwcmVjaXNpb24sIGNoYXIgZm9ybWF0X2NvZGUpCiB7Ci0gICAgY2hhciBmb3JtYXRbMzJdOwotICAgIGlmICh2LT5jdmFsLnJlYWwgPT0gMC4pIHsKLSAgICAgICAgaWYgKCFQeV9JU19GSU5JVEUodi0+Y3ZhbC5pbWFnKSkgewotICAgICAgICAgICAgaWYgKFB5X0lTX05BTih2LT5jdmFsLmltYWcpKQotICAgICAgICAgICAgICAgIHN0cm5jcHkoYnVmLCAibmFuKmoiLCA2KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvcHlzaWduKDEsIHYtPmN2YWwuaW1hZykgPT0gMSkKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgImluZipqIiwgNik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShidWYsICItaW5mKmoiLCA3KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T1Nfc25wcmludGYoZm9ybWF0LCBzaXplb2YoZm9ybWF0KSwgIiUlLiVpZyIsIHByZWNpc2lvbik7Ci0gICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnVmLCBidWZzeiAtIDEsIGZvcm1hdCwgdi0+Y3ZhbC5pbWFnKTsKLSAgICAgICAgICAgIHN0cm5jYXQoYnVmLCAiaiIsIDEpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgLyogSWYgdGhlc2UgYXJlIG5vbi1OVUxMLCB0aGV5J2xsIG5lZWQgdG8gYmUgZnJlZWQuICovCisgICAgY2hhciAqcHJlID0gTlVMTDsKKyAgICBjaGFyICppbSA9IE5VTEw7CisgICAgY2hhciAqYnVmID0gTlVMTDsKKworICAgIC8qIFRoZXNlIGRvIG5vdCBuZWVkIHRvIGJlIGZyZWVkLiByZSBpcyBlaXRoZXIgYW4gYWxpYXMKKyAgICAgICBmb3IgcHJlIG9yIGEgcG9pbnRlciB0byBhIGNvbnN0YW50LiAgbGVhZCBhbmQgdGFpbAorICAgICAgIGFyZSBwb2ludGVycyB0byBjb25zdGFudHMuICovCisgICAgY2hhciAqcmUgPSBOVUxMOworICAgIGNoYXIgKmxlYWQgPSAiIjsKKyAgICBjaGFyICp0YWlsID0gIiI7CisKKyAgICBpZiAodi0+Y3ZhbC5yZWFsID09IDAuICYmIGNvcHlzaWduKDEuMCwgdi0+Y3ZhbC5yZWFsKT09MS4wKSB7CisgICAgICAgIHJlID0gIiI7CisgICAgICAgIGltID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHYtPmN2YWwuaW1hZywgZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiwgMCwgTlVMTCk7CisgICAgICAgIGlmICghaW0pIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBjaGFyIHJlWzY0XSwgaW1bNjRdOwogICAgICAgICAvKiBGb3JtYXQgaW1hZ2luYXJ5IHBhcnQgd2l0aCBzaWduLCByZWFsIHBhcnQgd2l0aG91dCAqLwotICAgICAgICBpZiAoIVB5X0lTX0ZJTklURSh2LT5jdmFsLnJlYWwpKSB7Ci0gICAgICAgICAgICBpZiAoUHlfSVNfTkFOKHYtPmN2YWwucmVhbCkpCi0gICAgICAgICAgICAgICAgc3RybmNweShyZSwgIm5hbiIsIDQpOwotICAgICAgICAgICAgLyogZWxzZSBpZiAoY29weXNpZ24oMSwgdi0+Y3ZhbC5yZWFsKSA9PSAxKSAqLwotICAgICAgICAgICAgZWxzZSBpZiAodi0+Y3ZhbC5yZWFsID4gMCkKLSAgICAgICAgICAgICAgICBzdHJuY3B5KHJlLCAiaW5mIiwgNCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShyZSwgIi1pbmYiLCA1KTsKKyAgICAgICAgcHJlID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHYtPmN2YWwucmVhbCwgZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sIDAsIE5VTEwpOworICAgICAgICBpZiAoIXByZSkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T1Nfc25wcmludGYoZm9ybWF0LCBzaXplb2YoZm9ybWF0KSwgIiUlLiVpZyIsIHByZWNpc2lvbik7Ci0gICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQocmUsIHNpemVvZihyZSksIGZvcm1hdCwgdi0+Y3ZhbC5yZWFsKTsKKyAgICAgICAgcmUgPSBwcmU7CisKKyAgICAgICAgaW0gPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+Y3ZhbC5pbWFnLCBmb3JtYXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLCBQeV9EVFNGX1NJR04sIE5VTEwpOworICAgICAgICBpZiAoIWltKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9Ci0gICAgICAgIGlmICghUHlfSVNfRklOSVRFKHYtPmN2YWwuaW1hZykpIHsKLSAgICAgICAgICAgIGlmIChQeV9JU19OQU4odi0+Y3ZhbC5pbWFnKSkKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGltLCAiK25hbioiLCA2KTsKLSAgICAgICAgICAgIC8qIGVsc2UgaWYgKGNvcHlzaWduKDEsIHYtPmN2YWwuaW1hZykgPT0gMSkgKi8KLSAgICAgICAgICAgIGVsc2UgaWYgKHYtPmN2YWwuaW1hZyA+IDApCi0gICAgICAgICAgICAgICAgc3RybmNweShpbSwgIitpbmYqIiwgNik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShpbSwgIi1pbmYqIiwgNik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeU9TX3NucHJpbnRmKGZvcm1hdCwgc2l6ZW9mKGZvcm1hdCksICIlJSsuJWlnIiwgcHJlY2lzaW9uKTsKLSAgICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZChpbSwgc2l6ZW9mKGltKSwgZm9ybWF0LCB2LT5jdmFsLmltYWcpOwotICAgICAgICB9Ci0gICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBidWZzeiwgIiglcyVzaikiLCByZSwgaW0pOworICAgICAgICBsZWFkID0gIigiOworICAgICAgICB0YWlsID0gIikiOwogICAgIH0KKyAgICAvKiBBbGxvYyB0aGUgZmluYWwgYnVmZmVyLiBBZGQgb25lIGZvciB0aGUgImoiIGluIHRoZSBmb3JtYXQgc3RyaW5nLAorICAgICAgIGFuZCBvbmUgZm9yIHRoZSB0cmFpbGluZyB6ZXJvLiAqLworICAgIGxlbiA9IHN0cmxlbihsZWFkKSArIHN0cmxlbihyZSkgKyBzdHJsZW4oaW0pICsgc3RybGVuKHRhaWwpICsgMjsKKyAgICBidWYgPSBQeU1lbV9NYWxsb2MobGVuKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIFB5T1Nfc25wcmludGYoYnVmLCBsZW4sICIlcyVzJXNqJXMiLCBsZWFkLCByZSwgaW0sIHRhaWwpOworICAgIHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmKTsKKyAgZG9uZToKKyAgICBQeU1lbV9GcmVlKGltKTsKKyAgICBQeU1lbV9GcmVlKHByZSk7CisgICAgUHlNZW1fRnJlZShidWYpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludAogY29tcGxleF9wcmludChQeUNvbXBsZXhPYmplY3QgKnYsIEZJTEUgKmZwLCBpbnQgZmxhZ3MpCiB7Ci0gICAgY2hhciBidWZbMTAwXTsKLSAgICBjb21wbGV4X3RvX2J1ZihidWYsIHNpemVvZihidWYpLCB2LAotICAgICAgICAgICAgICAgICAgIChmbGFncyAmIFB5X1BSSU5UX1JBVykgPyBQUkVDX1NUUiA6IFBSRUNfUkVQUik7CisgICAgUHlPYmplY3QgKmZvcm1hdHY7CisgICAgY2hhciAqYnVmOworICAgIGlmIChmbGFncyAmIFB5X1BSSU5UX1JBVykKKyAgICAgICAgZm9ybWF0diA9IGNvbXBsZXhfZm9ybWF0KHYsIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiwgJ2cnKTsKKyAgICBlbHNlCisgICAgICAgIGZvcm1hdHYgPSBjb21wbGV4X2Zvcm1hdCh2LCAwLCAncicpOworICAgIGlmIChmb3JtYXR2ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBidWYgPSBQeVN0cmluZ19BU19TVFJJTkcoZm9ybWF0dik7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGZwdXRzKGJ1ZiwgZnApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgUHlfREVDUkVGKGZvcm1hdHYpOwogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcGxleF9yZXByKFB5Q29tcGxleE9iamVjdCAqdikKIHsKLSAgICBjaGFyIGJ1ZlsxMDBdOwotICAgIGNvbXBsZXhfdG9fYnVmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsIFBSRUNfUkVQUik7Ci0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmKTsKKyAgICByZXR1cm4gY29tcGxleF9mb3JtYXQodiwgMCwgJ3InKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGNvbXBsZXhfc3RyKFB5Q29tcGxleE9iamVjdCAqdikKIHsKLSAgICBjaGFyIGJ1ZlsxMDBdOwotICAgIGNvbXBsZXhfdG9fYnVmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsIFBSRUNfU1RSKTsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICAgIHJldHVybiBjb21wbGV4X2Zvcm1hdCh2LCBQeUZsb2F0X1NUUl9QUkVDSVNJT04sICdnJyk7CiB9CiAKIHN0YXRpYyBsb25nCkBAIC00OTAsNTYgKzUxMyw2OSBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb21wbGV4X2FkZChQeUNvbXBsZXhPYmplY3QgKnYsIFB5Q29tcGxleE9iamVjdCAqdykKK2NvbXBsZXhfYWRkKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeV9jb21wbGV4IHJlc3VsdDsKKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXhfYWRkIiwgcmV0dXJuIDApCi0gICAgcmVzdWx0ID0gY19zdW0odi0+Y3ZhbCx3LT5jdmFsKTsKKyAgICByZXN1bHQgPSBjX3N1bShhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgocmVzdWx0KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfc3ViKFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9zdWIoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5X2NvbXBsZXggcmVzdWx0OworICAgIFB5X2NvbXBsZXggYSwgYjsKKyAgICBUT19DT01QTEVYKHYsIGEpOworICAgIFRPX0NPTVBMRVgodywgYik7OwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXhfc3ViIiwgcmV0dXJuIDApCi0gICAgcmVzdWx0ID0gY19kaWZmKHYtPmN2YWwsdy0+Y3ZhbCk7CisgICAgcmVzdWx0ID0gY19kaWZmKGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChyZXN1bHQpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9tdWwoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X211bChQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCByZXN1bHQ7CisgICAgUHlfY29tcGxleCBhLCBiOworICAgIFRPX0NPTVBMRVgodiwgYSk7CisgICAgVE9fQ09NUExFWCh3LCBiKTsKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4X211bCIsIHJldHVybiAwKQotICAgIHJlc3VsdCA9IGNfcHJvZCh2LT5jdmFsLHctPmN2YWwpOworICAgIHJlc3VsdCA9IGNfcHJvZChhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgocmVzdWx0KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfZGl2KFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9kaXYoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5X2NvbXBsZXggcXVvdDsKLQorICAgIFB5X2NvbXBsZXggYSwgYjsKKyAgICBUT19DT01QTEVYKHYsIGEpOworICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9kaXYiLCByZXR1cm4gMCkKICAgICBlcnJubyA9IDA7Ci0gICAgcXVvdCA9IGNfcXVvdCh2LT5jdmFsLHctPmN2YWwpOworICAgIHF1b3QgPSBjX3F1b3QoYSwgYik7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocXVvdCkKICAgICBpZiAoZXJybm8gPT0gRURPTSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsICJjb21wbGV4IGRpdmlzaW9uIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwgImNvbXBsZXggZGl2aXNpb24gYnkgemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgocXVvdCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb21wbGV4X2NsYXNzaWNfZGl2KFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9jbGFzc2ljX2RpdihQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCBxdW90OwotCisgICAgUHlfY29tcGxleCBhLCBiOworICAgIFRPX0NPTVBMRVgodiwgYSk7CisgICAgVE9fQ09NUExFWCh3LCBiKTsKICAgICBpZiAoUHlfRGl2aXNpb25XYXJuaW5nRmxhZyA+PSAyICYmCiAgICAgICAgIFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICJjbGFzc2ljIGNvbXBsZXggZGl2aXNpb24iKSA8IDApCkBAIC01NDcsNTcgKzU4Myw2MSBAQAogCiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9jbGFzc2ljX2RpdiIsIHJldHVybiAwKQogICAgIGVycm5vID0gMDsKLSAgICBxdW90ID0gY19xdW90KHYtPmN2YWwsdy0+Y3ZhbCk7CisgICAgcXVvdCA9IGNfcXVvdChhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChxdW90KQogICAgIGlmIChlcnJubyA9PSBFRE9NKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwgImNvbXBsZXggZGl2aXNpb24iKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCBkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChxdW90KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfcmVtYWluZGVyKFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9yZW1haW5kZXIoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5X2NvbXBsZXggZGl2LCBtb2Q7Ci0KKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgICAiY29tcGxleCBkaXZtb2QoKSwgLy8gYW5kICUgYXJlIGRlcHJlY2F0ZWQiKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZXJybm8gPSAwOwotICAgIGRpdiA9IGNfcXVvdCh2LT5jdmFsLHctPmN2YWwpOyAvKiBUaGUgcmF3IGRpdmlzb3IgdmFsdWUuICovCisgICAgZGl2ID0gY19xdW90KGEsIGIpOyAvKiBUaGUgcmF3IGRpdmlzb3IgdmFsdWUuICovCiAgICAgaWYgKGVycm5vID09IEVET00pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCByZW1haW5kZXIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGRpdi5yZWFsID0gZmxvb3IoZGl2LnJlYWwpOyAvKiBVc2UgdGhlIGZsb29yIG9mIHRoZSByZWFsIHBhcnQuICovCiAgICAgZGl2LmltYWcgPSAwLjA7Ci0gICAgbW9kID0gY19kaWZmKHYtPmN2YWwsIGNfcHJvZCh3LT5jdmFsLCBkaXYpKTsKKyAgICBtb2QgPSBjX2RpZmYoYSwgY19wcm9kKGIsIGRpdikpOwogCiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgobW9kKTsKIH0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9kaXZtb2QoUHlDb21wbGV4T2JqZWN0ICp2LCBQeUNvbXBsZXhPYmplY3QgKncpCitjb21wbGV4X2Rpdm1vZChQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlfY29tcGxleCBkaXYsIG1vZDsKICAgICBQeU9iamVjdCAqZCwgKm0sICp6OwotCisgICAgUHlfY29tcGxleCBhLCBiOworICAgIFRPX0NPTVBMRVgodiwgYSk7CisgICAgVE9fQ09NUExFWCh3LCBiKTsKICAgICBpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgImNvbXBsZXggZGl2bW9kKCksIC8vIGFuZCAlIGFyZSBkZXByZWNhdGVkIikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVycm5vID0gMDsKLSAgICBkaXYgPSBjX3F1b3Qodi0+Y3ZhbCx3LT5jdmFsKTsgLyogVGhlIHJhdyBkaXZpc29yIHZhbHVlLiAqLworICAgIGRpdiA9IGNfcXVvdChhLCBiKTsgLyogVGhlIHJhdyBkaXZpc29yIHZhbHVlLiAqLwogICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwgImNvbXBsZXggZGl2bW9kKCkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGRpdi5yZWFsID0gZmxvb3IoZGl2LnJlYWwpOyAvKiBVc2UgdGhlIGZsb29yIG9mIHRoZSByZWFsIHBhcnQuICovCiAgICAgZGl2LmltYWcgPSAwLjA7Ci0gICAgbW9kID0gY19kaWZmKHYtPmN2YWwsIGNfcHJvZCh3LT5jdmFsLCBkaXYpKTsKKyAgICBtb2QgPSBjX2RpZmYoYSwgY19wcm9kKGIsIGRpdikpOwogICAgIGQgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGRpdik7CiAgICAgbSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgobW9kKTsKICAgICB6ID0gUHlUdXBsZV9QYWNrKDIsIGQsIG0pOwpAQCAtNjE1LDcgKzY1NSw2IEBACiAgICAgUHlfY29tcGxleCBhLCBiOwogICAgIFRPX0NPTVBMRVgodiwgYSk7CiAgICAgVE9fQ09NUExFWCh3LCBiKTsKLQogICAgIGlmICh6IT1QeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY29tcGxleCBtb2R1bG8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDUsMTAgKzY4NCwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9pbnRfZGl2KFB5Q29tcGxleE9iamVjdCAqdiwgUHlDb21wbGV4T2JqZWN0ICp3KQorY29tcGxleF9pbnRfZGl2KFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeU9iamVjdCAqdCwgKnI7Ci0KKyAgICBQeV9jb21wbGV4IGEsIGI7CisgICAgVE9fQ09NUExFWCh2LCBhKTsKKyAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIGlmIChQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgICAiY29tcGxleCBkaXZtb2QoKSwgLy8gYW5kICUgYXJlIGRlcHJlY2F0ZWQiKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzQyLDQzICs3ODMsNzAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wbGV4X3JpY2hjb21wYXJlKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdywgaW50IG9wKQogewotICAgIGludCBjOwotICAgIFB5X2NvbXBsZXggaSwgajsKICAgICBQeU9iamVjdCAqcmVzOwotCi0gICAgYyA9IFB5TnVtYmVyX0NvZXJjZUV4KCZ2LCAmdyk7Ci0gICAgaWYgKGMgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoYyA+IDApIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKLSAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwotICAgIH0KLSAgICAvKiBNYWtlIHN1cmUgYm90aCBhcmd1bWVudHMgYXJlIGNvbXBsZXguICovCi0gICAgaWYgKCEoUHlDb21wbGV4X0NoZWNrKHYpICYmIFB5Q29tcGxleF9DaGVjayh3KSkpIHsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0gICAgICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICB9Ci0KLSAgICBpID0gKChQeUNvbXBsZXhPYmplY3QgKil2KS0+Y3ZhbDsKLSAgICBqID0gKChQeUNvbXBsZXhPYmplY3QgKil3KS0+Y3ZhbDsKLSAgICBQeV9ERUNSRUYodik7Ci0gICAgUHlfREVDUkVGKHcpOworICAgIFB5X2NvbXBsZXggaTsKKyAgICBpbnQgZXF1YWw7CiAKICAgICBpZiAob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJubyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgY29tcGFyaXNvbnMgd2l0aCBub24tbnVtYmVycyByZXR1cm4KKyAgICAgICAgICogTm90SW1wbGVtZW50ZWQuICBPbmx5IGNvbXBhcmlzb25zIHdpdGggY29yZSBudW1lcmljIHR5cGVzIHJhaXNlCisgICAgICAgICAqIFR5cGVFcnJvci4KKyAgICAgICAgICovCisgICAgICAgIGlmIChQeUludF9DaGVjayh3KSB8fCBQeUxvbmdfQ2hlY2sodykgfHwKKyAgICAgICAgICAgIFB5RmxvYXRfQ2hlY2sodykgfHwgUHlDb21wbGV4X0NoZWNrKHcpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGNvbXBsZXggbnVtYmVycyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZ290byBVbmltcGxlbWVudGVkOwogICAgIH0KIAotICAgIGlmICgoaS5yZWFsID09IGoucmVhbCAmJiBpLmltYWcgPT0gai5pbWFnKSA9PSAob3AgPT0gUHlfRVEpKQotICAgICAgICByZXMgPSBQeV9UcnVlOworICAgIGFzc2VydChQeUNvbXBsZXhfQ2hlY2sodikpOworICAgIFRPX0NPTVBMRVgodiwgaSk7CisKKyAgICBpZiAoUHlJbnRfQ2hlY2sodykgfHwgUHlMb25nX0NoZWNrKHcpKSB7CisgICAgICAgIC8qIENoZWNrIGZvciAwLjAgaW1hZ2luYXJ5IHBhcnQgZmlyc3QgdG8gYXZvaWQgdGhlIHJpY2gKKyAgICAgICAgICogY29tcGFyaXNvbiB3aGVuIHBvc3NpYmxlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGkuaW1hZyA9PSAwLjApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpqLCAqc3ViX3JlczsKKyAgICAgICAgICAgIGogPSBQeUZsb2F0X0Zyb21Eb3VibGUoaS5yZWFsKTsKKyAgICAgICAgICAgIGlmIChqID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIHN1Yl9yZXMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShqLCB3LCBvcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaik7CisgICAgICAgICAgICByZXR1cm4gc3ViX3JlczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVxdWFsID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKHcpKSB7CisgICAgICAgIGVxdWFsID0gKGkucmVhbCA9PSBQeUZsb2F0X0FzRG91YmxlKHcpICYmIGkuaW1hZyA9PSAwLjApOworICAgIH0KKyAgICBlbHNlIGlmIChQeUNvbXBsZXhfQ2hlY2sodykpIHsKKyAgICAgICAgUHlfY29tcGxleCBqOworCisgICAgICAgIFRPX0NPTVBMRVgodywgaik7CisgICAgICAgIGVxdWFsID0gKGkucmVhbCA9PSBqLnJlYWwgJiYgaS5pbWFnID09IGouaW1hZyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBnb3RvIFVuaW1wbGVtZW50ZWQ7CisgICAgfQorCisgICAgaWYgKGVxdWFsID09IChvcCA9PSBQeV9FUSkpCisgICAgICAgICByZXMgPSBQeV9UcnVlOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlfRmFsc2U7CisgICAgICAgICByZXMgPSBQeV9GYWxzZTsKIAogICAgIFB5X0lOQ1JFRihyZXMpOwogICAgIHJldHVybiByZXM7CisKKyAgVW5pbXBsZW1lbnRlZDoKKyAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTgyNiw2ICs4OTQsNDEgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGRkKSIsIGMucmVhbCwgYy5pbWFnKTsKIH0KIAorUHlEb2NfU1RSVkFSKGNvbXBsZXhfX2Zvcm1hdF9fZG9jLAorImNvbXBsZXguX19mb3JtYXRfXygpIC0+IHN0clxuIgorIlxuIgorIkNvbnZlcnRzIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBmb3JtYXRfc3BlYy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NvbXBsZXhfX2Zvcm1hdF9fKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCAqZm9ybWF0X3NwZWM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCisgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soZm9ybWF0X3NwZWMpKQorICAgIHJldHVybiBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoZm9ybWF0X3NwZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZm9ybWF0X3NwZWMpKTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGZvcm1hdF9zcGVjKSkgeworICAgIC8qIENvbnZlcnQgZm9ybWF0X3NwZWMgdG8gYSBzdHIgKi8KKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpzdHJfc3BlYyA9IFB5T2JqZWN0X1N0cihmb3JtYXRfc3BlYyk7CisKKyAgICBpZiAoc3RyX3NwZWMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBfUHlDb21wbGV4X0Zvcm1hdEFkdmFuY2VkKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzdHJfc3BlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKHN0cl9zcGVjKSk7CisKKyAgICBQeV9ERUNSRUYoc3RyX3NwZWMpOworICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJfX2Zvcm1hdF9fIHJlcXVpcmVzIHN0ciBvciB1bmljb2RlIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKICNpZiAwCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcGxleF9pc19maW5pdGUoUHlPYmplY3QgKnNlbGYpCkBAIC04NTAsNiArOTUzLDggQEAKICAgICAgY29tcGxleF9pc19maW5pdGVfZG9jfSwKICNlbmRpZgogICAgIHsiX19nZXRuZXdhcmdzX18iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pY29tcGxleF9nZXRuZXdhcmdzLCAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsiX19mb3JtYXRfXyIsICAgICAgICAgIChQeUNGdW5jdGlvbiljb21wbGV4X19mb3JtYXRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgY29tcGxleF9fZm9ybWF0X19kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC04NjcsMTMgKzk3Miw5IEBACiAgICAgY29uc3QgY2hhciAqcywgKnN0YXJ0OwogICAgIGNoYXIgKmVuZDsKICAgICBkb3VibGUgeD0wLjAsIHk9MC4wLCB6OwotICAgIGludCBnb3RfcmU9MCwgZ290X2ltPTAsIGdvdF9icmFja2V0PTAsIGRvbmU9MDsKLSAgICBpbnQgZGlnaXRfb3JfZG90OwotICAgIGludCBzd19lcnJvcj0wOwotICAgIGludCBzaWduOwotICAgIGNoYXIgYnVmZmVyWzI1Nl07IC8qIEZvciBlcnJvcnMgKi8KKyAgICBpbnQgZ290X2JyYWNrZXQ9MDsKICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCi0gICAgY2hhciBzX2J1ZmZlclsyNTZdOworICAgIGNoYXIgKnNfYnVmZmVyID0gTlVMTDsKICNlbmRpZgogICAgIFB5X3NzaXplX3QgbGVuOwogCkBAIC04ODMsMTYgKzk4NCwxNCBAQAogICAgIH0KICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUodikgPj0gKFB5X3NzaXplX3Qpc2l6ZW9mKHNfYnVmZmVyKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGxpdGVyYWwgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgIHNfYnVmZmVyID0gKGNoYXIgKilQeU1lbV9NQUxMT0MoUHlVbmljb2RlX0dFVF9TSVpFKHYpKzEpOworICAgICAgICBpZiAoc19idWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBpZiAoUHlVbmljb2RlX0VuY29kZURlY2ltYWwoUHlVbmljb2RlX0FTX1VOSUNPREUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gc19idWZmZXI7CiAgICAgICAgIGxlbiA9IHN0cmxlbihzKTsKICAgICB9CkBAIC05MDUsMTQ3ICsxMDA0LDEzOCBAQAogCiAgICAgLyogcG9zaXRpb24gb24gZmlyc3Qgbm9uYmxhbmsgKi8KICAgICBzdGFydCA9IHM7Ci0gICAgd2hpbGUgKCpzICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkKKyAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCiAgICAgICAgIHMrKzsKLSAgICBpZiAoc1swXSA9PSAnXDAnKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmcgaXMgYW4gZW1wdHkgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoc1swXSA9PSAnKCcpIHsKKyAgICBpZiAoKnMgPT0gJygnKSB7CiAgICAgICAgIC8qIFNraXAgb3ZlciBwb3NzaWJsZSBicmFja2V0IGZyb20gcmVwcigpLiAqLwogICAgICAgICBnb3RfYnJhY2tldCA9IDE7CiAgICAgICAgIHMrKzsKLSAgICAgICAgd2hpbGUgKCpzICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkKKyAgICAgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKnMpKQogICAgICAgICAgICAgcysrOwogICAgIH0KIAotICAgIHogPSAtMS4wOwotICAgIHNpZ24gPSAxOwotICAgIGRvIHsKKyAgICAvKiBhIHZhbGlkIGNvbXBsZXggc3RyaW5nIHVzdWFsbHkgdGFrZXMgb25lIG9mIHRoZSB0aHJlZSBmb3JtczoKIAotICAgICAgICBzd2l0Y2ggKCpzKSB7CisgICAgICAgICA8ZmxvYXQ+ICAgICAgICAgICAgICAgICAgLSByZWFsIHBhcnQgb25seQorICAgICAgICAgPGZsb2F0PmogICAgICAgICAgICAgICAgIC0gaW1hZ2luYXJ5IHBhcnQgb25seQorICAgICAgICAgPGZsb2F0PjxzaWduZWQtZmxvYXQ+aiAgIC0gcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzCiAKLSAgICAgICAgY2FzZSAnXDAnOgotICAgICAgICAgICAgaWYgKHMtc3RhcnQgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZyBjb250YWlucyBhIG51bGwgYnl0ZSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYoIWRvbmUpIHN3X2Vycm9yPTE7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICB3aGVyZSA8ZmxvYXQ+IHJlcHJlc2VudHMgYW55IG51bWVyaWMgc3RyaW5nIHRoYXQncyBhY2NlcHRlZCBieSB0aGUKKyAgICAgICBmbG9hdCBjb25zdHJ1Y3RvciAoaW5jbHVkaW5nICduYW4nLCAnaW5mJywgJ2luZmluaXR5JywgZXRjLiksIGFuZAorICAgICAgIDxzaWduZWQtZmxvYXQ+IGlzIGFueSBzdHJpbmcgb2YgdGhlIGZvcm0gPGZsb2F0PiB3aG9zZSBmaXJzdAorICAgICAgIGNoYXJhY3RlciBpcyAnKycgb3IgJy0nLgogCi0gICAgICAgIGNhc2UgJyknOgotICAgICAgICAgICAgaWYgKCFnb3RfYnJhY2tldCB8fCAhKGdvdF9yZSB8fCBnb3RfaW0pKSB7Ci0gICAgICAgICAgICAgICAgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdF9icmFja2V0PTA7Ci0gICAgICAgICAgICBkb25lPTE7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgIGlmICgqcykgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIGV4dHJhIGZvcm1zCiAKLSAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgICAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KLSAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICBpZiAoZG9uZSkgIHN3X2Vycm9yPTE7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICBpZiAgKCAgKnM9PSdcMCd8fCpzPT0nKyd8fCpzPT0nLSd8fCpzPT0nKSd8fAotICAgICAgICAgICAgICAgICAgIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSAgKSAgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgPGZsb2F0PjxzaWduPmoKKyAgICAgICAgIDxzaWduPmoKKyAgICAgICAgIGoKIAotICAgICAgICBjYXNlICdKJzoKLSAgICAgICAgY2FzZSAnaic6Ci0gICAgICAgICAgICBpZiAoZ290X2ltIHx8IGRvbmUpIHsKLSAgICAgICAgICAgICAgICBzd19lcnJvciA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAgKHo8MC4wKSB7Ci0gICAgICAgICAgICAgICAgeT1zaWduOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICB5PXNpZ24qejsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdF9pbT0xOwotICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgaWYgICgqcyE9JysnICYmICpzIT0nLScgKQotICAgICAgICAgICAgICAgIGRvbmU9MTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgIGFyZSBhbHNvIGFjY2VwdGVkLCB0aG91Z2ggc3VwcG9ydCBmb3IgdGhlc2UgZm9ybXMgbWF5IGJlIHJlbW92ZWQgZnJvbQorICAgICAgIGEgZnV0dXJlIHZlcnNpb24gb2YgUHl0aG9uLgorICAgICovCiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChpc3NwYWNlKFB5X0NIQVJNQVNLKCpzKSkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKnMgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqcykpKQotICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgaWYgKCpzICYmICpzICE9ICcpJykKLSAgICAgICAgICAgICAgICAgICAgc3dfZXJyb3I9MTsKKyAgICAvKiBmaXJzdCBsb29rIGZvciBmb3JtcyBzdGFydGluZyB3aXRoIDxmbG9hdD4gKi8KKyAgICB6ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKHMsICZlbmQsIE5VTEwpOworICAgIGlmICh6ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19WYWx1ZUVycm9yKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChlbmQgIT0gcykgeworICAgICAgICAvKiBhbGwgNCBmb3JtcyBzdGFydGluZyB3aXRoIDxmbG9hdD4gbGFuZCBoZXJlICovCisgICAgICAgIHMgPSBlbmQ7CisgICAgICAgIGlmICgqcyA9PSAnKycgfHwgKnMgPT0gJy0nKSB7CisgICAgICAgICAgICAvKiA8ZmxvYXQ+PHNpZ25lZC1mbG9hdD5qIHwgPGZsb2F0PjxzaWduPmogKi8KKyAgICAgICAgICAgIHggPSB6OworICAgICAgICAgICAgeSA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAmZW5kLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICh5ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1ZhbHVlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkaWdpdF9vcl9kb3QgPQotICAgICAgICAgICAgICAgICgqcz09Jy4nIHx8IGlzZGlnaXQoUHlfQ0hBUk1BU0soKnMpKSk7Ci0gICAgICAgICAgICBpZiAgKGRvbmV8fCFkaWdpdF9vcl9kb3QpIHsKLSAgICAgICAgICAgICAgICBzd19lcnJvcj0xOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVuZCAhPSBzKQorICAgICAgICAgICAgICAgIC8qIDxmbG9hdD48c2lnbmVkLWZsb2F0PmogKi8KKyAgICAgICAgICAgICAgICBzID0gZW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogPGZsb2F0PjxzaWduPmogKi8KKyAgICAgICAgICAgICAgICB5ID0gKnMgPT0gJysnID8gMS4wIDogLTEuMDsKKyAgICAgICAgICAgICAgICBzKys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJzdHJ0b2QiLCByZXR1cm4gMCkKLSAgICAgICAgICAgIHogPSBQeU9TX2FzY2lpX3N0cnRvZChzLCAmZW5kKSA7Ci0gICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVCh6KQotICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSAmJiBmYWJzKHopID49IDEuMCkgewotICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgImZsb2F0KCkgb3V0IG9mIHJhbmdlOiAlLjE1MHMiLCBzKTsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzPWVuZDsKLSAgICAgICAgICAgIGlmICAoKnM9PSdKJyB8fCAqcz09J2onKSB7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICAoZ290X3JlKSB7Ci0gICAgICAgICAgICAgICAgc3dfZXJyb3I9MTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIGFjY2VwdCBhIHJlYWwgcGFydCAqLwotICAgICAgICAgICAgeD1zaWduKno7Ci0gICAgICAgICAgICBnb3RfcmU9MTsKLSAgICAgICAgICAgIGlmICAoZ290X2ltKSAgZG9uZT0xOwotICAgICAgICAgICAgeiA9IC0xLjA7Ci0gICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIH0gIC8qIGVuZCBvZiBzd2l0Y2ggICovCi0KLSAgICB9IHdoaWxlIChzIC0gc3RhcnQgPCBsZW4gJiYgIXN3X2Vycm9yKTsKLQotICAgIGlmIChzd19lcnJvciB8fCBnb3RfYnJhY2tldCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJnIGlzIGEgbWFsZm9ybWVkIHN0cmluZyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmICghKCpzID09ICdqJyB8fCAqcyA9PSAnSicpKQorICAgICAgICAgICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7CisgICAgICAgICAgICBzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnMgPT0gJ2onIHx8ICpzID09ICdKJykgeworICAgICAgICAgICAgLyogPGZsb2F0PmogKi8KKyAgICAgICAgICAgIHMrKzsKKyAgICAgICAgICAgIHkgPSB6OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8qIDxmbG9hdD4gKi8KKyAgICAgICAgICAgIHggPSB6OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogbm90IHN0YXJ0aW5nIHdpdGggPGZsb2F0PjsgbXVzdCBiZSA8c2lnbj5qIG9yIGogKi8KKyAgICAgICAgaWYgKCpzID09ICcrJyB8fCAqcyA9PSAnLScpIHsKKyAgICAgICAgICAgIC8qIDxzaWduPmogKi8KKyAgICAgICAgICAgIHkgPSAqcyA9PSAnKycgPyAxLjAgOiAtMS4wOworICAgICAgICAgICAgcysrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8qIGogKi8KKyAgICAgICAgICAgIHkgPSAxLjA7CisgICAgICAgIGlmICghKCpzID09ICdqJyB8fCAqcyA9PSAnSicpKQorICAgICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKKyAgICAgICAgcysrOwogICAgIH0KIAorICAgIC8qIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGNsb3NpbmcgYnJhY2tldCAqLworICAgIHdoaWxlIChQeV9JU1NQQUNFKCpzKSkKKyAgICAgICAgcysrOworICAgIGlmIChnb3RfYnJhY2tldCkgeworICAgICAgICAvKiBpZiB0aGVyZSB3YXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcywgdGhlbiB0aGUgY29ycmVzcG9uZGluZworICAgICAgICAgICBjbG9zaW5nIHBhcmVudGhlc2lzIHNob3VsZCBiZSByaWdodCBoZXJlICovCisgICAgICAgIGlmICgqcyAhPSAnKScpCisgICAgICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOworICAgICAgICBzKys7CisgICAgICAgIHdoaWxlIChQeV9JU1NQQUNFKCpzKSkKKyAgICAgICAgICAgIHMrKzsKKyAgICB9CisKKyAgICAvKiB3ZSBzaG91bGQgbm93IGJlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyAqLworICAgIGlmIChzLXN0YXJ0ICE9IGxlbikKKyAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKKworCisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorICAgIGlmIChzX2J1ZmZlcikKKyAgICAgICAgUHlNZW1fRlJFRShzX2J1ZmZlcik7CisjZW5kaWYKICAgICByZXR1cm4gY29tcGxleF9zdWJ0eXBlX2Zyb21fZG91Ymxlcyh0eXBlLCB4LCB5KTsKKworICBwYXJzZV9lcnJvcjoKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmcgaXMgYSBtYWxmb3JtZWQgc3RyaW5nIik7CisgIGVycm9yOgorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKKyAgICBpZiAoc19idWZmZXIpCisgICAgICAgIFB5TWVtX0ZSRUUoc19idWZmZXIpOworI2VuZGlmCisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wbGV4X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeU9iamVjdCAqciwgKmksICp0bXAsICpmOworICAgIFB5T2JqZWN0ICpyLCAqaSwgKnRtcDsKICAgICBQeU51bWJlck1ldGhvZHMgKm5iciwgKm5iaSA9IE5VTEw7CiAgICAgUHlfY29tcGxleCBjciwgY2k7CiAgICAgaW50IG93bl9yID0gMDsKICAgICBpbnQgY3JfaXNfY29tcGxleCA9IDA7CiAgICAgaW50IGNpX2lzX2NvbXBsZXggPSAwOwotICAgIHN0YXRpYyBQeU9iamVjdCAqY29tcGxleHN0cjsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InJlYWwiLCAiaW1hZyIsIDB9OwogCiAgICAgciA9IFB5X0ZhbHNlOwpAQCAtMTA4MCwyNiArMTE3MCwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBYWFggSGFjayB0byBzdXBwb3J0IGNsYXNzZXMgd2l0aCBfX2NvbXBsZXhfXyBtZXRob2QgKi8KLSAgICBpZiAoY29tcGxleHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGNvbXBsZXhzdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX2NvbXBsZXhfXyIpOwotICAgICAgICBpZiAoY29tcGxleHN0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGYgPSBQeU9iamVjdF9HZXRBdHRyKHIsIGNvbXBsZXhzdHIpOwotICAgIGlmIChmID09IE5VTEwpCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgciA9IFB5RXZhbF9DYWxsT2JqZWN0KGYsIGFyZ3MpOwotICAgICAgICBQeV9ERUNSRUYoYXJncyk7Ci0gICAgICAgIFB5X0RFQ1JFRihmKTsKLSAgICAgICAgaWYgKHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIHRtcCA9IHRyeV9jb21wbGV4X3NwZWNpYWxfbWV0aG9kKHIpOworICAgIGlmICh0bXApIHsKKyAgICAgICAgciA9IHRtcDsKICAgICAgICAgb3duX3IgPSAxOwogICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIG5iciA9IHItPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKICAgICBpZiAoaSAhPSBOVUxMKQogICAgICAgICBuYmkgPSBpLT5vYl90eXBlLT50cF9hc19udW1iZXI7CkBAIC0xMjQ4LDcgKzEzMjcsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQ0hFQ0tUWVBFUyB8CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIGNvbXBsZXhfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBiZmU2NjU2Li45ZDczNWEyIDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogfSBwcm9wZXJ0eW9iamVjdDsKIAogc3RhdGljIFB5T2JqZWN0ICogcHJvcGVydHlfY29weShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICopOwogCiBzdGF0aWMgUHlNZW1iZXJEZWYgcHJvcGVydHlfbWVtYmVyc1tdID0gewogICAgIHsiZmdldCIsIFRfT0JKRUNULCBvZmZzZXRvZihwcm9wZXJ0eW9iamVjdCwgcHJvcF9nZXQpLCBSRUFET05MWX0sCkBAIC0xMTE5LDcgKzExMTksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHByb3BlcnR5X2dldHRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmdldHRlcikKIHsKLSAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBnZXR0ZXIsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIHJldHVybiBwcm9wZXJ0eV9jb3B5KHNlbGYsIGdldHRlciwgTlVMTCwgTlVMTCk7CiB9CiAKIApAQCAtMTEyOSw3ICsxMTI5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwcm9wZXJ0eV9zZXR0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXR0ZXIpCiB7Ci0gICAgcmV0dXJuIHByb3BlcnR5X2NvcHkoc2VsZiwgTlVMTCwgc2V0dGVyLCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBzZXR0ZXIsIE5VTEwpOwogfQogCiAKQEAgLTExMzksNyArMTEzOSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHJvcGVydHlfZGVsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRlbGV0ZXIpCiB7Ci0gICAgcmV0dXJuIHByb3BlcnR5X2NvcHkoc2VsZiwgTlVMTCwgTlVMTCwgZGVsZXRlciwgTlVMTCk7CisgICAgcmV0dXJuIHByb3BlcnR5X2NvcHkoc2VsZiwgTlVMTCwgTlVMTCwgZGVsZXRlcik7CiB9CiAKIApAQCAtMTIwOCwxMSArMTIwOCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcHJvcGVydHlfY29weShQeU9iamVjdCAqb2xkLCBQeU9iamVjdCAqZ2V0LCBQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqZGVsLAotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MpCitwcm9wZXJ0eV9jb3B5KFB5T2JqZWN0ICpvbGQsIFB5T2JqZWN0ICpnZXQsIFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICpkZWwpCiB7CiAgICAgcHJvcGVydHlvYmplY3QgKnBvbGQgPSAocHJvcGVydHlvYmplY3QgKilvbGQ7Ci0gICAgUHlPYmplY3QgKm5ldywgKnR5cGU7CisgICAgUHlPYmplY3QgKm5ldywgKnR5cGUsICpkb2M7CiAKICAgICB0eXBlID0gUHlPYmplY3RfVHlwZShvbGQpOwogICAgIGlmICh0eXBlID09IE5VTEwpCkBAIC0xMjMwLDE1ICsxMjI5LDEyIEBACiAgICAgICAgIFB5X1hERUNSRUYoZGVsKTsKICAgICAgICAgZGVsID0gcG9sZC0+cHJvcF9kZWwgPyBwb2xkLT5wcm9wX2RlbCA6IFB5X05vbmU7CiAgICAgfQotICAgIGlmIChkb2MgPT0gTlVMTCB8fCBkb2MgPT0gUHlfTm9uZSkgewotICAgICAgICBQeV9YREVDUkVGKGRvYyk7Ci0gICAgICAgIGlmIChwb2xkLT5nZXR0ZXJfZG9jICYmIGdldCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAvKiBtYWtlIF9pbml0IHVzZSBfX2RvY19fIGZyb20gZ2V0dGVyICovCi0gICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZG9jID0gcG9sZC0+cHJvcF9kb2MgPyBwb2xkLT5wcm9wX2RvYyA6IFB5X05vbmU7Ci0gICAgICAgIH0KKyAgICBpZiAocG9sZC0+Z2V0dGVyX2RvYyAmJiBnZXQgIT0gUHlfTm9uZSkgeworICAgICAgICAvKiBtYWtlIF9pbml0IHVzZSBfX2RvY19fIGZyb20gZ2V0dGVyICovCisgICAgICAgIGRvYyA9IFB5X05vbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkb2MgPSBwb2xkLT5wcm9wX2RvYyA/IHBvbGQtPnByb3BfZG9jIDogUHlfTm9uZTsKICAgICB9CiAKICAgICBuZXcgPSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHR5cGUsICJPT09PIiwgZ2V0LCBzZXQsIGRlbCwgZG9jKTsKQEAgLTEyODAsMjYgKzEyNzYsMjkgQEAKICAgICAvKiBpZiBubyBkb2NzdHJpbmcgZ2l2ZW4gYW5kIHRoZSBnZXR0ZXIgaGFzIG9uZSwgdXNlIHRoYXQgb25lICovCiAgICAgaWYgKChkb2MgPT0gTlVMTCB8fCBkb2MgPT0gUHlfTm9uZSkgJiYgZ2V0ICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKmdldF9kb2MgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGdldCwgIl9fZG9jX18iKTsKLSAgICAgICAgaWYgKGdldF9kb2MgIT0gTlVMTCkgewotICAgICAgICAgICAgLyogZ2V0X2RvYyBhbHJlYWR5IElOQ1JFRidkIGJ5IEdldEF0dHIgKi8KLSAgICAgICAgICAgIGlmIChQeV9UWVBFKHNlbGYpPT0mUHlQcm9wZXJ0eV9UeXBlKSB7CisgICAgICAgIGlmIChnZXRfZG9jKSB7CisgICAgICAgICAgICBpZiAoUHlfVFlQRShzZWxmKSA9PSAmUHlQcm9wZXJ0eV9UeXBlKSB7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihwcm9wLT5wcm9wX2RvYyk7CiAgICAgICAgICAgICAgICAgcHJvcC0+cHJvcF9kb2MgPSBnZXRfZG9jOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBQdXQgX19kb2NfXyBpbiBkaWN0IG9mIHRoZSBzdWJjbGFzcyBpbnN0YW5jZSBpbnN0ZWFkLAotICAgICAgICAgICAgICAgIG90aGVyd2lzZSBpdCBnZXRzIHNoYWRvd2VkIGJ5IGNsYXNzJ3MgX19kb2NfXy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhzZWxmLCAiX19kb2NfXyIsIGdldF9kb2MpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBERUNSRUYgZm9yIHByb3BzIGhhbmRsZWQgYnkgX2RlYWxsb2MgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGdldF9kb2MpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogSWYgdGhpcyBpcyBhIHByb3BlcnR5IHN1YmNsYXNzLCBwdXQgX19kb2NfXworICAgICAgICAgICAgICAgIGluIGRpY3Qgb2YgdGhlIHN1YmNsYXNzIGluc3RhbmNlIGluc3RlYWQsCisgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGl0IGdldHMgc2hhZG93ZWQgYnkgX19kb2NfXyBpbiB0aGUKKyAgICAgICAgICAgICAgICBjbGFzcydzIGRpY3QuICovCisgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoc2VsZiwgIl9fZG9jX18iLCBnZXRfZG9jKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2V0X2RvYyk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByb3AtPmdldHRlcl9kb2MgPSAxOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfRXhjZXB0aW9uKSkgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMgYi9PYmplY3RzL2RpY3RvYmplY3QuYwppbmRleCA5ZDE5YjFkLi4zNjcwZTk3IDEwMDY0NAotLS0gYS9PYmplY3RzL2RpY3RvYmplY3QuYworKysgYi9PYmplY3RzL2RpY3RvYmplY3QuYwpAQCAtMTgwLDYgKzE4MCwyNCBAQAogfQogI2VuZGlmCiAKKy8qIERlYnVnIHN0YXRpc3RpYyB0byBjb3VudCBHQyB0cmFja2luZyBvZiBkaWN0cyAqLworI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKK3N0YXRpYyBQeV9zc2l6ZV90IGNvdW50X3VudHJhY2tlZCA9IDA7CitzdGF0aWMgUHlfc3NpemVfdCBjb3VudF90cmFja2VkID0gMDsKKworc3RhdGljIHZvaWQKK3Nob3dfdHJhY2sodm9pZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRpY3RzIGNyZWF0ZWQ6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgIGNvdW50X3RyYWNrZWQgKyBjb3VudF91bnRyYWNrZWQpOworICAgIGZwcmludGYoc3RkZXJyLCAiRGljdHMgdHJhY2tlZCBieSB0aGUgR0M6ICUiIFBZX0ZPUk1BVF9TSVpFX1QKKyAgICAgICAgImRcbiIsIGNvdW50X3RyYWNrZWQpOworICAgIGZwcmludGYoc3RkZXJyLCAiJS4yZiUlIGRpY3QgdHJhY2tpbmcgcmF0ZVxuXG4iLAorICAgICAgICAoMTAwLjAqY291bnRfdHJhY2tlZC8oY291bnRfdW50cmFja2VkK2NvdW50X3RyYWNrZWQpKSk7Cit9CisjZW5kaWYKKworCiAvKiBJbml0aWFsaXphdGlvbiBtYWNyb3MuCiAgICBUaGVyZSBhcmUgdHdvIHdheXMgdG8gY3JlYXRlIGEgZGljdDogIFB5RGljdF9OZXcoKSBpcyB0aGUgbWFpbiBDIEFQSQogICAgZnVuY3Rpb24sIGFuZCB0aGUgdHBfbmV3IHNsb3QgbWFwcyB0byBkaWN0X25ldygpLiAgSW4gdGhlIGxhdHRlciBjYXNlIHdlCkBAIC0yMzMsNiArMjUxLDkgQEAKICNpZmRlZiBTSE9XX0FMTE9DX0NPVU5UCiAgICAgICAgIFB5X0F0RXhpdChzaG93X2FsbG9jKTsKICNlbmRpZgorI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKKyAgICAgICAgUHlfQXRFeGl0KHNob3dfdHJhY2spOworI2VuZGlmCiAgICAgfQogICAgIGlmIChudW1mcmVlKSB7CiAgICAgICAgIG1wID0gZnJlZV9saXN0Wy0tbnVtZnJlZV07CkBAIC0yNjIsMTAgKzI4MywxMiBAQAogI2VuZGlmCiAgICAgfQogICAgIG1wLT5tYV9sb29rdXAgPSBsb29rZGljdF9zdHJpbmc7CisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgIGNvdW50X3VudHJhY2tlZCsrOworI2VuZGlmCiAjaWZkZWYgU0hPV19DT05WRVJTSU9OX0NPVU5UUwogICAgICsrY3JlYXRlZDsKICNlbmRpZgotICAgIF9QeU9iamVjdF9HQ19UUkFDSyhtcCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW1wOwogfQogCkBAIC00MzMsNiArNDU2LDUzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBTSE9XX1RSQUNLX0NPVU5UCisjZGVmaW5lIElOQ1JFQVNFX1RSQUNLX0NPVU5UIFwKKyAgICAoY291bnRfdHJhY2tlZCsrLCBjb3VudF91bnRyYWNrZWQtLSk7CisjZGVmaW5lIERFQ1JFQVNFX1RSQUNLX0NPVU5UIFwKKyAgICAoY291bnRfdHJhY2tlZC0tLCBjb3VudF91bnRyYWNrZWQrKyk7CisjZWxzZQorI2RlZmluZSBJTkNSRUFTRV9UUkFDS19DT1VOVAorI2RlZmluZSBERUNSRUFTRV9UUkFDS19DT1VOVAorI2VuZGlmCisKKyNkZWZpbmUgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgdmFsdWUpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKCFfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRChtcCkpIHsgXAorICAgICAgICAgICAgaWYgKF9QeU9iamVjdF9HQ19NQVlfQkVfVFJBQ0tFRChrZXkpIHx8IFwKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfR0NfTUFZX0JFX1RSQUNLRUQodmFsdWUpKSB7IFwKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0sobXApOyBcCisgICAgICAgICAgICAgICAgSU5DUkVBU0VfVFJBQ0tfQ09VTlQgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgIH0gd2hpbGUoMCkKKwordm9pZAorX1B5RGljdF9NYXliZVVudHJhY2soUHlPYmplY3QgKm9wKQoreworICAgIFB5RGljdE9iamVjdCAqbXA7CisgICAgUHlPYmplY3QgKnZhbHVlOworICAgIFB5X3NzaXplX3QgbWFzaywgaTsKKyAgICBQeURpY3RFbnRyeSAqZXA7CisKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG9wKSB8fCAhX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQob3ApKQorICAgICAgICByZXR1cm47CisKKyAgICBtcCA9IChQeURpY3RPYmplY3QgKikgb3A7CisgICAgZXAgPSBtcC0+bWFfdGFibGU7CisgICAgbWFzayA9IG1wLT5tYV9tYXNrOworICAgIGZvciAoaSA9IDA7IGkgPD0gbWFzazsgaSsrKSB7CisgICAgICAgIGlmICgodmFsdWUgPSBlcFtpXS5tZV92YWx1ZSkgPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoX1B5T2JqZWN0X0dDX01BWV9CRV9UUkFDS0VEKHZhbHVlKSB8fAorICAgICAgICAgICAgX1B5T2JqZWN0X0dDX01BWV9CRV9UUkFDS0VEKGVwW2ldLm1lX2tleSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIERFQ1JFQVNFX1RSQUNLX0NPVU5UCisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sob3ApOworfQorCisKIC8qCiBJbnRlcm5hbCByb3V0aW5lIHRvIGluc2VydCBhIG5ldyBpdGVtIGludG8gdGhlIHRhYmxlLgogVXNlZCBib3RoIGJ5IHRoZSBpbnRlcm5hbCByZXNpemUgcm91dGluZSBhbmQgYnkgdGhlIHB1YmxpYyBpbnNlcnQgcm91dGluZS4KQEAgLTQ1Myw2ICs1MjMsNyBAQAogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIHZhbHVlKTsKICAgICBpZiAoZXAtPm1lX3ZhbHVlICE9IE5VTEwpIHsKICAgICAgICAgb2xkX3ZhbHVlID0gZXAtPm1lX3ZhbHVlOwogICAgICAgICBlcC0+bWVfdmFsdWUgPSB2YWx1ZTsKQEAgLTQ5Miw2ICs1NjMsNyBAQAogICAgIFB5RGljdEVudHJ5ICplcDAgPSBtcC0+bWFfdGFibGU7CiAgICAgcmVnaXN0ZXIgUHlEaWN0RW50cnkgKmVwOwogCisgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgdmFsdWUpOwogICAgIGkgPSBoYXNoICYgbWFzazsKICAgICBlcCA9ICZlcDBbaV07CiAgICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgZXAtPm1lX2tleSAhPSBOVUxMOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7CkBAIC02NDAsOSArNzEyLDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBXZSBjYW4gYXJyaXZlIGhlcmUgd2l0aCBhIE5VTEwgdHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbjoKLSAgICAgICB0cnkgcnVubmluZyAicHl0aG9uIC1XaSIgZm9yIGFuIGV4YW1wbGUgcmVsYXRlZCB0byBzdHJpbmcKLSAgICAgICBpbnRlcm5pbmcuICBMZXQncyBqdXN0IGhvcGUgdGhhdCBubyBleGNlcHRpb24gb2NjdXJzIHRoZW4uLi4gKi8KKyAgICAvKiBXZSBjYW4gYXJyaXZlIGhlcmUgd2l0aCBhIE5VTEwgdHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbjogdHJ5CisgICAgICAgcnVubmluZyAicHl0aG9uIC1XaSIgZm9yIGFuIGV4YW1wbGUgcmVsYXRlZCB0byBzdHJpbmcgaW50ZXJuaW5nLgorICAgICAgIExldCdzIGp1c3QgaG9wZSB0aGF0IG5vIGV4Y2VwdGlvbiBvY2N1cnMgdGhlbi4uLiAgVGhpcyBtdXN0IGJlCisgICAgICAgX1B5VGhyZWFkU3RhdGVfQ3VycmVudCBhbmQgbm90IFB5VGhyZWFkU3RhdGVfR0VUKCkgYmVjYXVzZSBpbiBkZWJ1ZworICAgICAgIG1vZGUsIHRoZSBsYXR0ZXIgY29tcGxhaW5zIGlmIHRzdGF0ZSBpcyBOVUxMLiAqLwogICAgIHRzdGF0ZSA9IF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7CiAgICAgaWYgKHRzdGF0ZSAhPSBOVUxMICYmIHRzdGF0ZS0+Y3VyZXhjX3R5cGUgIT0gTlVMTCkgewogICAgICAgICAvKiBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uICovCkBAIC0xMDgxLDE1ICsxMTU1LDE5IEBACiAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG1wKSkgewogICAgICAgICAgICAgLyogTG9vayB1cCBfX21pc3NpbmdfXyBtZXRob2QgaWYgd2UncmUgYSBzdWJjbGFzcy4gKi8KLSAgICAgICAgICAgIFB5T2JqZWN0ICptaXNzaW5nOworICAgICAgICAgICAgUHlPYmplY3QgKm1pc3NpbmcsICpyZXM7CiAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKm1pc3Npbmdfc3RyID0gTlVMTDsKLSAgICAgICAgICAgIGlmIChtaXNzaW5nX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIG1pc3Npbmdfc3RyID0KLSAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fbWlzc2luZ19fIik7Ci0gICAgICAgICAgICBtaXNzaW5nID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShtcCksIG1pc3Npbmdfc3RyKTsKLSAgICAgICAgICAgIGlmIChtaXNzaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWlzc2luZywKLSAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopbXAsIGtleSwgTlVMTCk7CisgICAgICAgICAgICBtaXNzaW5nID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoKFB5T2JqZWN0ICopbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbWlzc2luZ19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWlzc2luZ19zdHIpOworICAgICAgICAgICAgaWYgKG1pc3NpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWlzc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgTlVMTCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1pc3NpbmcpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTAyLDggKzE5ODAsNyBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmx0KTsKICAgICAgICAgICAgIHJldHVybiBkZWZsdDsKICAgICAgICAgfQotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfS2V5RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9wKCk6IGRpY3Rpb25hcnkgaXMgZW1wdHkiKTsKKyAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKCFQeVN0cmluZ19DaGVja0V4YWN0KGtleSkgfHwKQEAgLTIxMDYsNiArMjE4MywxOCBAQAogUHlEb2NfU1RSVkFSKGl0ZXJpdGVtc19fZG9jX18sCiAiRC5pdGVyaXRlbXMoKSAtPiBhbiBpdGVyYXRvciBvdmVyIHRoZSAoa2V5LCB2YWx1ZSkgaXRlbXMgb2YgRCIpOwogCisvKiBGb3J3YXJkICovCitzdGF0aWMgUHlPYmplY3QgKmRpY3RrZXlzX25ldyhQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqZGljdGl0ZW1zX25ldyhQeU9iamVjdCAqKTsKK3N0YXRpYyBQeU9iamVjdCAqZGljdHZhbHVlc19uZXcoUHlPYmplY3QgKik7CisKK1B5RG9jX1NUUlZBUih2aWV3a2V5c19fZG9jX18sCisgICAgICAgICAgICAgIkQudmlld2tleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIik7CitQeURvY19TVFJWQVIodmlld2l0ZW1zX19kb2NfXywKKyAgICAgICAgICAgICAiRC52aWV3aXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIpOworUHlEb2NfU1RSVkFSKHZpZXd2YWx1ZXNfX2RvY19fLAorICAgICAgICAgICAgICJELnZpZXd2YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIik7CisKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsKICAgICB7Il9fY29udGFpbnNfXyIsKFB5Q0Z1bmN0aW9uKWRpY3RfY29udGFpbnMsICAgICAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAogICAgICBjb250YWluc19fZG9jX199LApAQCAtMjEyOSw2ICsyMjE4LDEyIEBACiAgICAgIGl0ZW1zX19kb2NfX30sCiAgICAgeyJ2YWx1ZXMiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pZGljdF92YWx1ZXMsICAgICAgIE1FVEhfTk9BUkdTLAogICAgICB2YWx1ZXNfX2RvY19ffSwKKyAgICB7InZpZXdrZXlzIiwgICAgICAgIChQeUNGdW5jdGlvbilkaWN0a2V5c19uZXcsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHZpZXdrZXlzX19kb2NfX30sCisgICAgeyJ2aWV3aXRlbXMiLCAgICAgICAoUHlDRnVuY3Rpb24pZGljdGl0ZW1zX25ldywgICAgIE1FVEhfTk9BUkdTLAorICAgICB2aWV3aXRlbXNfX2RvY19ffSwKKyAgICB7InZpZXd2YWx1ZXMiLCAgICAgIChQeUNGdW5jdGlvbilkaWN0dmFsdWVzX25ldywgICAgTUVUSF9OT0FSR1MsCisgICAgIHZpZXd2YWx1ZXNfX2RvY19ffSwKICAgICB7InVwZGF0ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X3VwZGF0ZSwgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgdXBkYXRlX19kb2NfX30sCiAgICAgeyJmcm9ta2V5cyIsICAgICAgICAoUHlDRnVuY3Rpb24pZGljdF9mcm9ta2V5cywgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfQ0xBU1MsCkBAIC0yMjAyLDkgKzIyOTcsMTggQEAKICAgICAgICAgYXNzZXJ0KGQtPm1hX3RhYmxlID09IE5VTEwgJiYgZC0+bWFfZmlsbCA9PSAwICYmIGQtPm1hX3VzZWQgPT0gMCk7CiAgICAgICAgIElOSVRfTk9OWkVST19ESUNUX1NMT1RTKGQpOwogICAgICAgICBkLT5tYV9sb29rdXAgPSBsb29rZGljdF9zdHJpbmc7CisgICAgICAgIC8qIFRoZSBvYmplY3QgaGFzIGJlZW4gaW1wbGljaXRlbHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLworICAgICAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhkKTsKICNpZmRlZiBTSE9XX0NPTlZFUlNJT05fQ09VTlRTCiAgICAgICAgICsrY3JlYXRlZDsKICNlbmRpZgorI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKKyAgICAgICAgaWYgKF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKGQpKQorICAgICAgICAgICAgY291bnRfdHJhY2tlZCsrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb3VudF91bnRyYWNrZWQrKzsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2MTMsMyArMjcxNyw0OTQgQEAKICAgICBkaWN0aXRlcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLAogfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVmlldyBvYmplY3RzIGZvciBrZXlzKCksIGl0ZW1zKCksIHZhbHVlcygpLiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGUgaW5zdGFuY2UgbGF5LW91dCBpcyB0aGUgc2FtZSBmb3IgYWxsIHRocmVlOyBidXQgdGhlIHR5cGUgZGlmZmVycy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeURpY3RPYmplY3QgKmR2X2RpY3Q7Cit9IGRpY3R2aWV3b2JqZWN0OworCisKK3N0YXRpYyB2b2lkCitkaWN0dmlld19kZWFsbG9jKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBQeV9YREVDUkVGKGR2LT5kdl9kaWN0KTsKKyAgICBQeU9iamVjdF9HQ19EZWwoZHYpOworfQorCitzdGF0aWMgaW50CitkaWN0dmlld190cmF2ZXJzZShkaWN0dmlld29iamVjdCAqZHYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKGR2LT5kdl9kaWN0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5X3NzaXplX3QKK2RpY3R2aWV3X2xlbihkaWN0dmlld29iamVjdCAqZHYpCit7CisgICAgUHlfc3NpemVfdCBsZW4gPSAwOworICAgIGlmIChkdi0+ZHZfZGljdCAhPSBOVUxMKQorICAgICAgICBsZW4gPSBkdi0+ZHZfZGljdC0+bWFfdXNlZDsKKyAgICByZXR1cm4gbGVuOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGljdHZpZXdfbmV3KFB5T2JqZWN0ICpkaWN0LCBQeVR5cGVPYmplY3QgKnR5cGUpCit7CisgICAgZGljdHZpZXdvYmplY3QgKmR2OworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgeworICAgICAgICAvKiBYWFggR2V0IHJpZCBvZiB0aGlzIHJlc3RyaWN0aW9uIGxhdGVyICovCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiJXMoKSByZXF1aXJlcyBhIGRpY3QgYXJndW1lbnQsIG5vdCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIGRpY3QtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZHYgPSBQeU9iamVjdF9HQ19OZXcoZGljdHZpZXdvYmplY3QsIHR5cGUpOworICAgIGlmIChkdiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoZGljdCk7CisgICAgZHYtPmR2X2RpY3QgPSAoUHlEaWN0T2JqZWN0ICopZGljdDsKKyAgICBfUHlPYmplY3RfR0NfVFJBQ0soZHYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilkdjsKK30KKworLyogVE9ETyhndWlkbyk6IFRoZSB2aWV3cyBvYmplY3RzIGFyZSBub3QgY29tcGxldGU6CisKKyAqIHN1cHBvcnQgbW9yZSBzZXQgb3BlcmF0aW9ucworICogc3VwcG9ydCBhcmJpdHJhcnkgbWFwcGluZ3M/CisgICAtIGVpdGhlciB0aGVzZSBzaG91bGQgYmUgc3RhdGljIG9yIGV4cG9ydGVkIGluIGRpY3RvYmplY3QuaAorICAgLSBpZiBwdWJsaWMgdGhlbiB0aGV5IHNob3VsZCBwcm9iYWJseSBiZSBpbiBidWlsdGlucworKi8KKworLyogUmV0dXJuIDEgaWYgc2VsZiBpcyBhIHN1YnNldCBvZiBvdGhlciwgaXRlcmF0aW5nIG92ZXIgc2VsZjsKKyAgIDAgaWYgbm90OyAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZC4gKi8KK3N0YXRpYyBpbnQKK2FsbF9jb250YWluZWRfaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlcikKK3sKKyAgICBQeU9iamVjdCAqaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIoc2VsZik7CisgICAgaW50IG9rID0gMTsKKworICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFB5T2JqZWN0ICpuZXh0ID0gUHlJdGVyX05leHQoaXRlcik7CisgICAgICAgIGlmIChuZXh0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIG9rID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvayA9IFB5U2VxdWVuY2VfQ29udGFpbnMob3RoZXIsIG5leHQpOworICAgICAgICBQeV9ERUNSRUYobmV4dCk7CisgICAgICAgIGlmIChvayA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICByZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0dmlld19yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgUHlfc3NpemVfdCBsZW5fc2VsZiwgbGVuX290aGVyOworICAgIGludCBvazsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworCisgICAgYXNzZXJ0KHNlbGYgIT0gTlVMTCk7CisgICAgYXNzZXJ0KFB5RGljdFZpZXdTZXRfQ2hlY2soc2VsZikpOworICAgIGFzc2VydChvdGhlciAhPSBOVUxMKTsKKworICAgIGlmICghUHlBbnlTZXRfQ2hlY2sob3RoZXIpICYmICFQeURpY3RWaWV3U2V0X0NoZWNrKG90aGVyKSkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CisgICAgfQorCisgICAgbGVuX3NlbGYgPSBQeU9iamVjdF9TaXplKHNlbGYpOworICAgIGlmIChsZW5fc2VsZiA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGxlbl9vdGhlciA9IFB5T2JqZWN0X1NpemUob3RoZXIpOworICAgIGlmIChsZW5fb3RoZXIgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9rID0gMDsKKyAgICBzd2l0Y2gob3ApIHsKKworICAgIGNhc2UgUHlfTkU6CisgICAgY2FzZSBQeV9FUToKKyAgICAgICAgaWYgKGxlbl9zZWxmID09IGxlbl9vdGhlcikKKyAgICAgICAgICAgIG9rID0gYWxsX2NvbnRhaW5lZF9pbihzZWxmLCBvdGhlcik7CisgICAgICAgIGlmIChvcCA9PSBQeV9ORSAmJiBvayA+PSAwKQorICAgICAgICAgICAgb2sgPSAhb2s7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgaWYgKGxlbl9zZWxmIDwgbGVuX290aGVyKQorICAgICAgICAgICAgb2sgPSBhbGxfY29udGFpbmVkX2luKHNlbGYsIG90aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUHlfTEU6CisgICAgICAgICAgaWYgKGxlbl9zZWxmIDw9IGxlbl9vdGhlcikKKyAgICAgICAgICAgICAgb2sgPSBhbGxfY29udGFpbmVkX2luKHNlbGYsIG90aGVyKTsKKyAgICAgICAgICBicmVhazsKKworICAgIGNhc2UgUHlfR1Q6CisgICAgICAgIGlmIChsZW5fc2VsZiA+IGxlbl9vdGhlcikKKyAgICAgICAgICAgIG9rID0gYWxsX2NvbnRhaW5lZF9pbihvdGhlciwgc2VsZik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBQeV9HRToKKyAgICAgICAgaWYgKGxlbl9zZWxmID49IGxlbl9vdGhlcikKKyAgICAgICAgICAgIG9rID0gYWxsX2NvbnRhaW5lZF9pbihvdGhlciwgc2VsZik7CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIGlmIChvayA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IG9rID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOworICAgIFB5X0lOQ1JFRihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0dmlld19yZXByKGRpY3R2aWV3b2JqZWN0ICpkdikKK3sKKyAgICBQeU9iamVjdCAqc2VxOworICAgIFB5T2JqZWN0ICpzZXFfc3RyOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0xpc3QoKFB5T2JqZWN0ICopZHYpOworICAgIGlmIChzZXEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZXFfc3RyID0gUHlPYmplY3RfUmVwcihzZXEpOworICAgIHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21Gb3JtYXQoIiVzKCVzKSIsIFB5X1RZUEUoZHYpLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKHNlcV9zdHIpKTsKKyAgICBQeV9ERUNSRUYoc2VxX3N0cik7CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKiBkaWN0X2tleXMgKioqLworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdGtleXNfaXRlcihkaWN0dmlld29iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBkaWN0aXRlcl9uZXcoZHYtPmR2X2RpY3QsICZQeURpY3RJdGVyS2V5X1R5cGUpOworfQorCitzdGF0aWMgaW50CitkaWN0a2V5c19jb250YWlucyhkaWN0dmlld29iamVjdCAqZHYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQeURpY3RfQ29udGFpbnMoKFB5T2JqZWN0ICopZHYtPmR2X2RpY3QsIG9iaik7Cit9CisKK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBkaWN0a2V5c19hc19zZXF1ZW5jZSA9IHsKKyAgICAobGVuZnVuYylkaWN0dmlld19sZW4sICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3Ffc2xpY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3NfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19zbGljZSAqLworICAgIChvYmpvYmpwcm9jKWRpY3RrZXlzX2NvbnRhaW5zLCAgICAgIC8qIHNxX2NvbnRhaW5zICovCit9OworCitzdGF0aWMgUHlPYmplY3QqCitkaWN0dmlld3Nfc3ViKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5U2V0X05ldyhzZWxmKTsKKyAgICBQeU9iamVjdCAqdG1wOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJlc3VsdCwgImRpZmZlcmVuY2VfdXBkYXRlIiwgIk8iLCBvdGhlcik7CisgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYodG1wKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlPYmplY3QqCitkaWN0dmlld3NfYW5kKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5U2V0X05ldyhzZWxmKTsKKyAgICBQeU9iamVjdCAqdG1wOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHJlc3VsdCwgImludGVyc2VjdGlvbl91cGRhdGUiLCAiTyIsIG90aGVyKTsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0RFQ1JFRih0bXApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RpY3R2aWV3c19vcihQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm90aGVyKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVNldF9OZXcoc2VsZik7CisgICAgUHlPYmplY3QgKnRtcDsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdG1wID0gUHlPYmplY3RfQ2FsbE1ldGhvZChyZXN1bHQsICJ1cGRhdGUiLCAiTyIsIG90aGVyKTsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0RFQ1JFRih0bXApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RpY3R2aWV3c194b3IoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpvdGhlcikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlTZXRfTmV3KHNlbGYpOworICAgIFB5T2JqZWN0ICp0bXA7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVzdWx0LCAic3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlIiwgIk8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIpOworICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5TnVtYmVyTWV0aG9kcyBkaWN0dmlld3NfYXNfbnVtYmVyID0geworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfYWRkKi8KKyAgICAoYmluYXJ5ZnVuYylkaWN0dmlld3Nfc3ViLCAgICAgICAgICAvKm5iX3N1YnRyYWN0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX211bHRpcGx5Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX2RpdmlkZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9yZW1haW5kZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfZGl2bW9kKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX3Bvd2VyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX25lZ2F0aXZlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX3Bvc2l0aXZlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX2Fic29sdXRlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX25vbnplcm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfaW52ZXJ0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX2xzaGlmdCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9yc2hpZnQqLworICAgIChiaW5hcnlmdW5jKWRpY3R2aWV3c19hbmQsICAgICAgICAgIC8qbmJfYW5kKi8KKyAgICAoYmluYXJ5ZnVuYylkaWN0dmlld3NfeG9yLCAgICAgICAgICAvKm5iX3hvciovCisgICAgKGJpbmFyeWZ1bmMpZGljdHZpZXdzX29yLCAgICAgICAgICAgLypuYl9vciovCit9OworCitzdGF0aWMgUHlNZXRob2REZWYgZGljdGtleXNfbWV0aG9kc1tdID0geworICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlEaWN0S2V5c19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgImRpY3Rfa2V5cyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKGRpY3R2aWV3b2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWRpY3R2aWV3X2RlYWxsb2MsICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgKHJlcHJmdW5jKWRpY3R2aWV3X3JlcHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgJmRpY3R2aWV3c19hc19udW1iZXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAmZGljdGtleXNfYXNfc2VxdWVuY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19DSEVDS1RZUEVTLCAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWRpY3R2aWV3X3RyYXZlcnNlLCAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIGRpY3R2aWV3X3JpY2hjb21wYXJlLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgKGdldGl0ZXJmdW5jKWRpY3RrZXlzX2l0ZXIsICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGRpY3RrZXlzX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdGtleXNfbmV3KFB5T2JqZWN0ICpkaWN0KQoreworICAgIHJldHVybiBkaWN0dmlld19uZXcoZGljdCwgJlB5RGljdEtleXNfVHlwZSk7Cit9CisKKy8qKiogZGljdF9pdGVtcyAqKiovCisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0aXRlbXNfaXRlcihkaWN0dmlld29iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBkaWN0aXRlcl9uZXcoZHYtPmR2X2RpY3QsICZQeURpY3RJdGVySXRlbV9UeXBlKTsKK30KKworc3RhdGljIGludAorZGljdGl0ZW1zX2NvbnRhaW5zKGRpY3R2aWV3b2JqZWN0ICpkdiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpmb3VuZDsKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9iaikgfHwgUHlUdXBsZV9HRVRfU0laRShvYmopICE9IDIpCisgICAgICAgIHJldHVybiAwOworICAgIGtleSA9IFB5VHVwbGVfR0VUX0lURU0ob2JqLCAwKTsKKyAgICB2YWx1ZSA9IFB5VHVwbGVfR0VUX0lURU0ob2JqLCAxKTsKKyAgICBmb3VuZCA9IFB5RGljdF9HZXRJdGVtKChQeU9iamVjdCAqKWR2LT5kdl9kaWN0LCBrZXkpOworICAgIGlmIChmb3VuZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh2YWx1ZSwgZm91bmQsIFB5X0VRKTsKK30KKworc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIGRpY3RpdGVtc19hc19zZXF1ZW5jZSA9IHsKKyAgICAobGVuZnVuYylkaWN0dmlld19sZW4sICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3Ffc2xpY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3NfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19zbGljZSAqLworICAgIChvYmpvYmpwcm9jKWRpY3RpdGVtc19jb250YWlucywgICAgIC8qIHNxX2NvbnRhaW5zICovCit9OworCitzdGF0aWMgUHlNZXRob2REZWYgZGljdGl0ZW1zX21ldGhvZHNbXSA9IHsKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworUHlUeXBlT2JqZWN0IFB5RGljdEl0ZW1zX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiZGljdF9pdGVtcyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YoZGljdHZpZXdvYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpZGljdHZpZXdfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAocmVwcmZ1bmMpZGljdHZpZXdfcmVwciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAmZGljdHZpZXdzX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgICZkaWN0aXRlbXNfYXNfc2VxdWVuY2UsICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0NIRUNLVFlQRVMsICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpZGljdHZpZXdfdHJhdmVyc2UsICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgZGljdHZpZXdfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpZGljdGl0ZW1zX2l0ZXIsICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgZGljdGl0ZW1zX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0aXRlbXNfbmV3KFB5T2JqZWN0ICpkaWN0KQoreworICAgIHJldHVybiBkaWN0dmlld19uZXcoZGljdCwgJlB5RGljdEl0ZW1zX1R5cGUpOworfQorCisvKioqIGRpY3RfdmFsdWVzICoqKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3R2YWx1ZXNfaXRlcihkaWN0dmlld29iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBkaWN0aXRlcl9uZXcoZHYtPmR2X2RpY3QsICZQeURpY3RJdGVyVmFsdWVfVHlwZSk7Cit9CisKK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBkaWN0dmFsdWVzX2FzX3NlcXVlbmNlID0geworICAgIChsZW5mdW5jKWRpY3R2aWV3X2xlbiwgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2l0ZW0gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2Fzc19pdGVtICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX3NsaWNlICovCisgICAgKG9iam9ianByb2MpMCwgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29udGFpbnMgKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiBkaWN0dmFsdWVzX21ldGhvZHNbXSA9IHsKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworUHlUeXBlT2JqZWN0IFB5RGljdFZhbHVlc19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgImRpY3RfdmFsdWVzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKGRpY3R2aWV3b2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWRpY3R2aWV3X2RlYWxsb2MsICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgKHJlcHJmdW5jKWRpY3R2aWV3X3JlcHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAmZGljdHZhbHVlc19hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWRpY3R2aWV3X3RyYXZlcnNlLCAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgKGdldGl0ZXJmdW5jKWRpY3R2YWx1ZXNfaXRlciwgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGRpY3R2YWx1ZXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdHZhbHVlc19uZXcoUHlPYmplY3QgKmRpY3QpCit7CisgICAgcmV0dXJuIGRpY3R2aWV3X25ldyhkaWN0LCAmUHlEaWN0VmFsdWVzX1R5cGUpOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9lbnVtb2JqZWN0LmMgYi9PYmplY3RzL2VudW1vYmplY3QuYwppbmRleCBkMGM4NzgyLi4xZWYzODFmIDEwMDY0NAotLS0gYS9PYmplY3RzL2VudW1vYmplY3QuYworKysgYi9PYmplY3RzL2VudW1vYmplY3QuYwpAQCAtMjIzLDcgKzIyMyw4IEBACiByZXZlcnNlZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlfc3NpemVfdCBuOwotICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnNlcSwgKnJldmVyc2VkX21ldGg7CisgICAgc3RhdGljIFB5T2JqZWN0ICpyZXZlcnNlZF9jYWNoZSA9IE5VTEw7CiAgICAgcmV2ZXJzZWRvYmplY3QgKnJvOwogCiAgICAgaWYgKHR5cGUgPT0gJlB5UmV2ZXJzZWRfVHlwZSAmJiAhX1B5QXJnX05vS2V5d29yZHMoInJldmVyc2VkKCkiLCBrd2RzKSkKQEAgLTIzMiw4ICsyMzMsMjYgQEAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZXZlcnNlZCIsIDEsIDEsICZzZXEpICkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhzZXEsICJfX3JldmVyc2VkX18iKSkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VxLCAiX19yZXZlcnNlZF9fIiwgTlVMTCk7CisgICAgaWYgKFB5SW5zdGFuY2VfQ2hlY2soc2VxKSkgeworICAgICAgICByZXZlcnNlZF9tZXRoID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZXEsICJfX3JldmVyc2VkX18iKTsKKyAgICAgICAgaWYgKHJldmVyc2VkX21ldGggPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldmVyc2VkX21ldGggPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChzZXEsICJfX3JldmVyc2VkX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJldmVyc2VkX2NhY2hlKTsKKyAgICAgICAgaWYgKHJldmVyc2VkX21ldGggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChyZXZlcnNlZF9tZXRoICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MocmV2ZXJzZWRfbWV0aCwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihyZXZlcnNlZF9tZXRoKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CiAKICAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2soc2VxKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9leGNlcHRpb25zLmMgYi9PYmplY3RzL2V4Y2VwdGlvbnMuYwppbmRleCBhMGQ3YjUzLi43MTFjODdkIDEwMDY0NAotLS0gYS9PYmplY3RzL2V4Y2VwdGlvbnMuYworKysgYi9PYmplY3RzL2V4Y2VwdGlvbnMuYwpAQCAtOSw3ICs5LDYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJvc2RlZnMuaCIKIAotI2RlZmluZSBNQUtFX0lUX05PTkUoeCkgKHgpID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwogI2RlZmluZSBFWENfTU9EVUxFX05BTUUgImV4Y2VwdGlvbnMuIgogCiAvKiBOT1RFOiBJZiB0aGUgZXhjZXB0aW9uIGNsYXNzIGhpZXJhcmNoeSBjaGFuZ2VzLCBkb24ndCBmb3JnZXQgdG8gdXBkYXRlCkBAIC0yMDQ3LDI4ICsyMDQ2LDYgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoYmRpY3QsICMgVFlQRSwgUHlFeGNfICMjIFRZUEUpKSBcCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIk1vZHVsZSBkaWN0aW9uYXJ5IGluc2VydGlvbiBwcm9ibGVtLiIpOwogCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIGRlZmluZWQoX19TVERDX1NFQ1VSRV9MSUJfXykKLS8qIGNydCB2YXJpYWJsZSBjaGVja2luZyBpbiBWaXN1YWxTdHVkaW8gLk5FVCAyMDA1ICovCi0jaW5jbHVkZSA8Y3J0ZGJnLmg+Ci0KLXN0YXRpYyBpbnQgICAgICBwcmV2Q3J0UmVwb3J0TW9kZTsKLXN0YXRpYyBfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciAgICAgICBwcmV2Q3J0SGFuZGxlcjsKLQotLyogSW52YWxpZCBwYXJhbWV0ZXIgaGFuZGxlci4gIFNldHMgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbiAqLwotc3RhdGljIHZvaWQKLUludmFsaWRQYXJhbWV0ZXJIYW5kbGVyKAotICAgIGNvbnN0IHdjaGFyX3QgKiBleHByZXNzaW9uLAotICAgIGNvbnN0IHdjaGFyX3QgKiBmdW5jdGlvbiwKLSAgICBjb25zdCB3Y2hhcl90ICogZmlsZSwKLSAgICB1bnNpZ25lZCBpbnQgbGluZSwKLSAgICB1aW50cHRyX3QgcFJlc2VydmVkKQotewotICAgIC8qIERvIG5vdGhpbmcsIGFsbG93IGV4ZWN1dGlvbiB0byBjb250aW51ZS4gIFVzdWFsbHkgdGhpcwotICAgICAqIG1lYW5zIHRoYXQgdGhlIENSVCB3aWxsIHNldCBlcnJubyB0byBFSU5WQUwKLSAgICAgKi8KLX0KLSNlbmRpZgotCiAKIFB5TU9ESU5JVF9GVU5DCiBfUHlFeGNfSW5pdCh2b2lkKQpAQCAtMjIwMiw3ICsyMTc5LDcgQEAKIAogICAgIFB5RXhjX01lbW9yeUVycm9ySW5zdCA9IEJhc2VFeGNlcHRpb25fbmV3KCZfUHlFeGNfTWVtb3J5RXJyb3IsIE5VTEwsIE5VTEwpOwogICAgIGlmICghUHlFeGNfTWVtb3J5RXJyb3JJbnN0KQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW5ub3QgcHJlLWFsbG9jYXRlIE1lbW9yeUVycm9yIGluc3RhbmNlXG4iKTsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2Fubm90IHByZS1hbGxvY2F0ZSBNZW1vcnlFcnJvciBpbnN0YW5jZSIpOwogCiAgICAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0ID0gQmFzZUV4Y2VwdGlvbl9uZXcoJl9QeUV4Y19SdW50aW1lRXJyb3IsIE5VTEwsIE5VTEwpOwogICAgIGlmICghUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0KQpAQCAtMjIyOCwyMyArMjIwNSwxMSBAQAogICAgIH0KIAogICAgIFB5X0RFQ1JFRihibHRpbm1vZCk7Ci0KLSNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgZGVmaW5lZChfX1NURENfU0VDVVJFX0xJQl9fKQotICAgIC8qIFNldCBDUlQgYXJndW1lbnQgZXJyb3IgaGFuZGxlciAqLwotICAgIHByZXZDcnRIYW5kbGVyID0gX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyKEludmFsaWRQYXJhbWV0ZXJIYW5kbGVyKTsKLSAgICAvKiB0dXJuIG9mZiBhc3NlcnRpb25zIGluIGRlYnVnIG1vZGUgKi8KLSAgICBwcmV2Q3J0UmVwb3J0TW9kZSA9IF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfQVNTRVJULCAwKTsKLSNlbmRpZgogfQogCiB2b2lkCiBfUHlFeGNfRmluaSh2b2lkKQogewotICAgIFB5X1hERUNSRUYoUHlFeGNfTWVtb3J5RXJyb3JJbnN0KTsKLSAgICBQeUV4Y19NZW1vcnlFcnJvckluc3QgPSBOVUxMOwotI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAmJiBkZWZpbmVkKF9fU1REQ19TRUNVUkVfTElCX18pCi0gICAgLyogcmVzZXQgQ1JUIGVycm9yIGhhbmRsaW5nICovCi0gICAgX3NldF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyKHByZXZDcnRIYW5kbGVyKTsKLSAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX0FTU0VSVCwgcHJldkNydFJlcG9ydE1vZGUpOwotI2VuZGlmCisgICAgUHlfQ0xFQVIoUHlFeGNfTWVtb3J5RXJyb3JJbnN0KTsKKyAgICBQeV9DTEVBUihQeUV4Y19SZWN1cnNpb25FcnJvckluc3QpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCBkZjVhMTAyLi45NzRkNjQyIDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtMTYsMTkgKzE2LDEzIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKLSNpZmRlZiBfTVNDX1ZFUgotLyogTmVlZCBHZXRWZXJzaW9uIHRvIHNlZSBpZiBvbiBOVCBzbyBzYWZlIHRvIHVzZSBfd2ZvcGVuICovCi0jZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYgLyogX01TQ19WRVIgKi8KLQogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCiAjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgogCiAjZGVmaW5lIEJVRih2KSBQeVN0cmluZ19BU19TVFJJTkcoKFB5U3RyaW5nT2JqZWN0ICopdikKIAotI2lmbmRlZiBET05UX0hBVkVfRVJSTk9fSAorI2lmZGVmIEhBVkVfRVJSTk9fSAogI2luY2x1ZGUgPGVycm5vLmg+CiAjZW5kaWYKIApAQCAtMTg4LDYgKzE4Miw4NyBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKikgZjsKIH0KIAorI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAmJiBkZWZpbmVkKF9fU1REQ19TRUNVUkVfTElCX18pCisjZGVmaW5lIFB5X1ZFUklGWV9XSU5OVAorLyogVGhlIENSVCBvbiB3aW5kb3dzIGNvbXBpbGVkIHdpdGggVmlzdWFsIFN0dWRpbyAyMDA1IGFuZCBoaWdoZXIgbWF5CisgKiBhc3NlcnQgaWYgZ2l2ZW4gaW52YWxpZCBtb2RlIHN0cmluZ3MuICBUaGlzIGlzIGFsbCBmaW5lIGFuZCB3ZWxsCisgKiBpbiBzdGF0aWMgbGFuZ3VhZ2VzIGxpa2UgQyB3aGVyZSB0aGUgbW9kZSBzdHJpbmcgaXMgdHlwY2lhbGx5IGhhcmQKKyAqIGNvZGVkLiAgQnV0IGluIFB5dGhvbiwgd2VyZSB3ZSBwYXNzIGluIHRoZSBtb2RlIHN0cmluZyBmcm9tIHRoZSB1c2VyLAorICogd2UgbmVlZCB0byB2ZXJpZnkgaXQgZmlyc3QgbWFudWFsbHkKKyAqLworc3RhdGljIGludCBfUHlWZXJpZnlfTW9kZV9XSU5OVChjb25zdCBjaGFyICptb2RlKQoreworICAgIC8qIFNlZSBpZiBtb2RlIHN0cmluZyBpcyB2YWxpZCBvbiBXaW5kb3dzIHRvIGF2b2lkIGhhcmQgYXNzZXJ0aW9ucyAqLworICAgIC8qIHJlbW92ZSBsZWFkaW5nIHNwYWNlc2UgKi8KKyAgICBpbnQgc2luZ2xlcyA9IDA7CisgICAgaW50IHBhaXJzID0gMDsKKyAgICBpbnQgZW5jb2RpbmcgPSAwOworICAgIGNvbnN0IGNoYXIgKnMsICpjOworCisgICAgd2hpbGUoKm1vZGUgPT0gJyAnKSAvKiBzdHJpcCBpbml0aWFsIHNwYWNlcyAqLworICAgICAgICArK21vZGU7CisgICAgaWYgKCFzdHJjaHIoInJ3YSIsICptb2RlKSkgLyogbXVzdCBzdGFydCB3aXRoIG9uZSBvZiB0aGVzZSAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAoKisrbW9kZSkgeworICAgICAgICBpZiAoKm1vZGUgPT0gJyAnIHx8ICptb2RlID09ICdOJykgLyogaWdub3JlIHNwYWNlcyBhbmQgTiAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHMgPSAiK1REIjsgLyogZWFjaCBvZiB0aGlzIGNhbiBhcHBlYXIgb25seSBvbmNlICovCisgICAgICAgIGMgPSBzdHJjaHIocywgKm1vZGUpOworICAgICAgICBpZiAoYykgeworICAgICAgICAgICAgcHRyZGlmZl90IGlkeCA9IHMtYzsKKyAgICAgICAgICAgIGlmIChzaW5nbGVzICYgKDE8PGlkeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBzaW5nbGVzIHw9ICgxPDxpZHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcyA9ICJidGNuU1IiOyAvKiBvbmx5IG9uZSBvZiBlYWNoIGxldHRlciBpbiB0aGUgcGFpcnMgYWxsb3dlZCAqLworICAgICAgICBjID0gc3RyY2hyKHMsICptb2RlKTsKKyAgICAgICAgaWYgKGMpIHsKKyAgICAgICAgICAgIHB0cmRpZmZfdCBpZHggPSAocy1jKS8yOworICAgICAgICAgICAgaWYgKHBhaXJzICYgKDE8PGlkeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBwYWlycyB8PSAoMTw8aWR4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICgqbW9kZSA9PSAnLCcpIHsKKyAgICAgICAgICAgIGVuY29kaW5nID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOyAvKiBmb3VuZCBhbiBpbnZhbGlkIGNoYXIgKi8KKyAgICB9CisKKyAgICBpZiAoZW5jb2RpbmcpIHsKKyAgICAgICAgY2hhciAqZVtdID0geyJVVEYtOCIsICJVVEYtMTZMRSIsICJVTklDT0RFIn07CisgICAgICAgIHdoaWxlICgqbW9kZSA9PSAnICcpCisgICAgICAgICAgICArK21vZGU7CisgICAgICAgIC8qIGZpbmQgJ2NjcyA9JyAqLworICAgICAgICBpZiAoc3RybmNtcChtb2RlLCAiY2NzIiwgMykpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgbW9kZSArPSAzOworICAgICAgICB3aGlsZSAoKm1vZGUgPT0gJyAnKQorICAgICAgICAgICAgKyttb2RlOworICAgICAgICBpZiAoKm1vZGUgIT0gJz0nKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICgqbW9kZSA9PSAnICcpCisgICAgICAgICAgICArK21vZGU7CisgICAgICAgIGZvcihlbmNvZGluZyA9IDA7IGVuY29kaW5nPF9jb3VudG9mKGUpOyArK2VuY29kaW5nKSB7CisgICAgICAgICAgICBzaXplX3QgbCA9IHN0cmxlbihlW2VuY29kaW5nXSk7CisgICAgICAgICAgICBpZiAoIXN0cm5jbXAobW9kZSwgZVtlbmNvZGluZ10sIGwpKSB7CisgICAgICAgICAgICAgICAgbW9kZSArPSBsOyAvKiBmb3VuZCBhIHZhbGlkIGVuY29kaW5nICovCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuY29kaW5nID09IF9jb3VudG9mKGUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8qIHNraXAgdHJhaWxpbmcgc3BhY2VzICovCisgICAgd2hpbGUgKCptb2RlID09ICcgJykKKyAgICAgICAgKyttb2RlOworCisgICAgcmV0dXJuICptb2RlID09ICdcMCc7IC8qIG11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCit9CisjZW5kaWYKKwogLyogY2hlY2sgZm9yIGtub3duIGluY29ycmVjdCBtb2RlIHN0cmluZ3MgLSBwcm9ibGVtIGlzLCBwbGF0Zm9ybXMgYXJlCiAgICBmcmVlIHRvIGFjY2VwdCBhbnkgbW9kZSBjaGFyYWN0ZXJzIHRoZXkgbGlrZSBhbmQgYXJlIHN1cHBvc2VkIHRvCiAgICBpZ25vcmUgc3R1ZmYgdGhleSBkb24ndCB1bmRlcnN0YW5kLi4uIHdyaXRlIG9yIGFwcGVuZCBtb2RlIHdpdGgKQEAgLTIzMCw3ICszMDUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgIm9uZSBvZiAncicsICd3JywgJ2EnIG9yICdVJywgbm90ICclLjIwMHMnIiwgbW9kZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0KKyNpZmRlZiBQeV9WRVJJRllfV0lOTlQKKyAgICAvKiBhZGRpdGlvbmFsIGNoZWNrcyBvbiBOVCB3aXRoIHZpc3VhbCBzdHVkaW8gMjAwNSBhbmQgaGlnaGVyICovCisgICAgaWYgKCFfUHlWZXJpZnlfTW9kZV9XSU5OVChtb2RlKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgbW9kZSAoJyUuNTBzJykiLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0zNDIsNiArNDIzLDcgQEAKICAgICBpbnQgc3RzID0gMDsKICAgICBpbnQgKCpsb2NhbF9jbG9zZSkoRklMRSAqKTsKICAgICBGSUxFICpsb2NhbF9mcCA9IGYtPmZfZnA7CisgICAgY2hhciAqbG9jYWxfc2V0YnVmID0gZi0+Zl9zZXRidWY7CiAgICAgaWYgKGxvY2FsX2ZwICE9IE5VTEwpIHsKICAgICAgICAgbG9jYWxfY2xvc2UgPSBmLT5mX2Nsb3NlOwogICAgICAgICBpZiAobG9jYWxfY2xvc2UgIT0gTlVMTCAmJiBmLT51bmxvY2tlZF9jb3VudCA+IDApIHsKQEAgLTM2NSwxMCArNDQ3LDE1IEBACiAgICAgICAgICAqIGNhbGxlZC4gKi8KICAgICAgICAgZi0+Zl9mcCA9IE5VTEw7CiAgICAgICAgIGlmIChsb2NhbF9jbG9zZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiBJc3N1ZSAjOTI5NTogbXVzdCB0ZW1wb3JhcmlseSByZXNldCBmX3NldGJ1ZiBzbyB0aGF0IGFub3RoZXIKKyAgICAgICAgICAgICAgIHRocmVhZCBkb2Vzbid0IGZyZWUgaXQgd2hlbiBydW5uaW5nIGZpbGVfY2xvc2UoKSBjb25jdXJyZW50bHkuCisgICAgICAgICAgICAgICBPdGhlcndpc2UgdGhpcyBjbG9zZSgpIHdpbGwgY3Jhc2ggd2hlbiBmbHVzaGluZyB0aGUgYnVmZmVyLiAqLworICAgICAgICAgICAgZi0+Zl9zZXRidWYgPSBOVUxMOwogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICAgICAgc3RzID0gKCpsb2NhbF9jbG9zZSkobG9jYWxfZnApOwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGYtPmZfc2V0YnVmID0gbG9jYWxfc2V0YnVmOwogICAgICAgICAgICAgaWYgKHN0cyA9PSBFT0YpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgICAgIGlmIChzdHMgIT0gMCkKQEAgLTEwMjMsOCArMTExMCw4IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoYnl0ZXNyZWFkICE9IGJ1ZmZlcnNpemUpCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIGJ5dGVzcmVhZCk7CisgICAgaWYgKGJ5dGVzcmVhZCAhPSBidWZmZXJzaXplICYmIF9QeVN0cmluZ19SZXNpemUoJnYsIGJ5dGVzcmVhZCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiB2OwogfQogCkBAIC0xMjc3LDggKzEzNjQsOCBAQAogICAgICAgICAvKiBvdmVyd3JpdGUgdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSAqLwogICAgICAgICBwdmZyZWUgPSBCVUYodikgKyAocHJldl92X3NpemUgLSAxKTsKICAgICB9Ci0gICAgaWYgKEJVRih2KSArIHRvdGFsX3Zfc2l6ZSAhPSBwKQotICAgICAgICBfUHlTdHJpbmdfUmVzaXplKCZ2LCBwIC0gQlVGKHYpKTsKKyAgICBpZiAoQlVGKHYpICsgdG90YWxfdl9zaXplICE9IHAgJiYgX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgcCAtIEJVRih2KSkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiB2OwogI3VuZGVmIElOSVRCVUZTSVpFCiAjdW5kZWYgTUFYQlVGU0laRQpAQCAtMTM5MCw4ICsxNDc3LDggQEAKICAgICB9CiAKICAgICB1c2VkX3Zfc2l6ZSA9IGJ1ZiAtIEJVRih2KTsKLSAgICBpZiAodXNlZF92X3NpemUgIT0gdG90YWxfdl9zaXplKQotICAgICAgICBfUHlTdHJpbmdfUmVzaXplKCZ2LCB1c2VkX3Zfc2l6ZSk7CisgICAgaWYgKHVzZWRfdl9zaXplICE9IHRvdGFsX3Zfc2l6ZSAmJiBfUHlTdHJpbmdfUmVzaXplKCZ2LCB1c2VkX3Zfc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiB2OwogfQogCkBAIC0xNDU3LDggKzE1NDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHdoZW4gcmVhZGluZyBhIGxpbmUiKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChzW2xlbi0xXSA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LT5vYl9yZWZjbnQgPT0gMSkKLSAgICAgICAgICAgICAgICBfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIGxlbi0xKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQtPm9iX3JlZmNudCA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgbGVuLTEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBsZW4tMSk7CkBAIC0xNjUyLDggKzE3NDEsMTAgQEAKIGZpbGVfd3JpdGUoUHlGaWxlT2JqZWN0ICpmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjaGFyICpzOworICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgUHlfc3NpemVfdCBuLCBuMjsKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisKICAgICBpZiAoZi0+Zl9mcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmICghZi0+d3JpdGFibGUpCkBAIC0xNjYzLDE0ICsxNzU0LDQxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcyA9IHBidWYuYnVmOwogICAgICAgICBuID0gcGJ1Zi5sZW47Ci0gICAgfSBlbHNlCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidCMiLCAmcywgJm4pKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCAqZXJyb3JzOworICAgICAgICBQeU9iamVjdCAqdGV4dDsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnRleHQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKHRleHQpKSB7CisgICAgICAgICAgICBzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHRleHQpOworICAgICAgICAgICAgbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHRleHQpOworICAgICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh0ZXh0KSkgeworICAgICAgICAgICAgaWYgKGYtPmZfZW5jb2RpbmcgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFB5U3RyaW5nX0FTX1NUUklORyhmLT5mX2VuY29kaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGlmIChmLT5mX2Vycm9ycyAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGVycm9ycyA9IFB5U3RyaW5nX0FTX1NUUklORyhmLT5mX2Vycm9ycyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXJyb3JzID0gInN0cmljdCI7CisgICAgICAgICAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh0ZXh0LCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBzID0gUHlTdHJpbmdfQVNfU1RSSU5HKGVuY29kZWQpOworICAgICAgICAgICAgbiA9IFB5U3RyaW5nX0dFVF9TSVpFKGVuY29kZWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih0ZXh0LCAmcywgJm4pKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogICAgIGYtPmZfc29mdHNwYWNlID0gMDsKICAgICBGSUxFX0JFR0lOX0FMTE9XX1RIUkVBRFMoZikKICAgICBlcnJubyA9IDA7CiAgICAgbjIgPSBmd3JpdGUocywgMSwgbiwgZi0+Zl9mcCk7CiAgICAgRklMRV9FTkRfQUxMT1dfVEhSRUFEUyhmKQorICAgIFB5X1hERUNSRUYoZW5jb2RlZCk7CiAgICAgaWYgKGYtPmZfYmluYXJ5KQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICBpZiAobjIgIT0gbikgewpAQCAtMTczNyw2ICsxODU1LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGosIGxpbmUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogVGhlIGl0ZXJhdG9yIG1pZ2h0IGhhdmUgY2xvc2VkIHRoZSBmaWxlIG9uIHVzLiAqLworICAgICAgICAgICAgaWYgKGYtPmZfZnAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGVycl9jbG9zZWQoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChqID09IDApCiAgICAgICAgICAgICBicmVhazsKQEAgLTIxOTEsNiArMjMxNCw5IEBACiAgICAgY2hhciAqbW9kZSA9ICJyIjsKICAgICBpbnQgYnVmc2l6ZSA9IC0xOwogICAgIGludCB3aWRlYXJndW1lbnQgPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBQeU9iamVjdCAqcG87CisjZW5kaWYKIAogICAgIGFzc2VydChQeUZpbGVfQ2hlY2soc2VsZikpOwogICAgIGlmIChmb3NlbGYtPmZfZnAgIT0gTlVMTCkgewpAQCAtMjIwMSwyMCArMjMyNywxNyBAQAogICAgICAgICBQeV9ERUNSRUYoY2xvc2VyZXN1bHQpOwogICAgIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwotICAgIGlmIChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKSB7ICAgIC8qIE9uIE5ULCBzbyB3aWRlIEFQSSBhdmFpbGFibGUgKi8KLSAgICAgICAgUHlPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJVfHNpOmZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnBvLCAmbW9kZSwgJmJ1ZnNpemUpKSB7Ci0gICAgICAgICAgICB3aWRlYXJndW1lbnQgPSAxOwotICAgICAgICAgICAgaWYgKGZpbGxfZmlsZV9maWVsZHMoZm9zZWxmLCBOVUxMLCBwbywgbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbG9zZSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cKLSAgICAgICAgICAgICAgIHN0cmluZ3MgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9CisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIlV8c2k6ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZwbywgJm1vZGUsICZidWZzaXplKSkgeworICAgICAgICB3aWRlYXJndW1lbnQgPSAxOworICAgICAgICBpZiAoZmlsbF9maWxlX2ZpZWxkcyhmb3NlbGYsIE5VTEwsIHBvLCBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY2xvc2UpID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIEVycm9yOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93CisgICAgICAgICAgIHN0cmluZ3MgYXJlIGFsc28gdmFsaWQuICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL09iamVjdHMvZmxvYXRvYmplY3QuYyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwppbmRleCAwYmI2OTYxLi43N2IxMDA1IDEwMDY0NAotLS0gYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCkBAIC0xNSwxMCArMTUsNiBAQAogI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKICNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCiAKLSNpZmRlZiBIQVZFX0lFRUVGUF9ICi0jaW5jbHVkZSA8aWVlZWZwLmg+Ci0jZW5kaWYKLQogI2lmZGVmIF9PU0ZfU09VUkNFCiAvKiBPU0YxIDUuMSBkb2Vzbid0IG1ha2UgdGhpcyBhdmFpbGFibGUgd2l0aCBYT1BFTl9TT1VSQ0VfRVhURU5ERUQgZGVmaW5lZCAqLwogZXh0ZXJuIGludCBmaW5pdGUoZG91YmxlKTsKQEAgLTcyLDcgKzY4LDcgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgRmxvYXRJbmZvVHlwZSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKIAogUHlEb2NfU1RSVkFSKGZsb2F0aW5mb19fZG9jX18sCi0ic3lzLmZsb2F0aW5mb1xuXAorInN5cy5mbG9hdF9pbmZvXG5cCiBcblwKIEEgc3RydWN0c2VxIGhvbGRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsb2F0IHR5cGUuIEl0IGNvbnRhaW5zIGxvdyBsZXZlbFxuXAogaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZWNpc2lvbiBhbmQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uIFBsZWFzZSBzdHVkeVxuXApAQCAtOTksNyArOTUsNyBAQAogfTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRGVzYyBmbG9hdGluZm9fZGVzYyA9IHsKLSAgICAic3lzLmZsb2F0aW5mbyIsICAgICAgICAgICAgLyogbmFtZSAqLworICAgICJzeXMuZmxvYXRfaW5mbyIsICAgICAgICAgICAvKiBuYW1lICovCiAgICAgZmxvYXRpbmZvX19kb2NfXywgICAgICAgICAgIC8qIGRvYyAqLwogICAgIGZsb2F0aW5mb19maWVsZHMsICAgICAgICAgICAvKiBmaWVsZHMgKi8KICAgICAxMQpAQCAtMTc3LDEzICsxNzMsMTQgQEAKIFB5T2JqZWN0ICoKIFB5RmxvYXRfRnJvbVN0cmluZyhQeU9iamVjdCAqdiwgY2hhciAqKnBlbmQpCiB7Ci0gICAgY29uc3QgY2hhciAqcywgKmxhc3QsICplbmQsICpzcDsKKyAgICBjb25zdCBjaGFyICpzLCAqbGFzdCwgKmVuZDsKICAgICBkb3VibGUgeDsKICAgICBjaGFyIGJ1ZmZlclsyNTZdOyAvKiBmb3IgZXJyb3JzICovCiAjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQotICAgIGNoYXIgc19idWZmZXJbMjU2XTsgLyogZm9yIG9iamVjdHMgY29udmVydGlibGUgdG8gYSBjaGFyIGJ1ZmZlciAqLworICAgIGNoYXIgKnNfYnVmZmVyID0gTlVMTDsKICNlbmRpZgogICAgIFB5X3NzaXplX3QgbGVuOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCiAgICAgaWYgKHBlbmQpCiAgICAgICAgICpwZW5kID0gTlVMTDsKQEAgLTE5MywxMDEgKzE5MCw1MCBAQAogICAgIH0KICNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUodikgPj0gKFB5X3NzaXplX3Qpc2l6ZW9mKHNfYnVmZmVyKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgIlVuaWNvZGUgZmxvYXQoKSBsaXRlcmFsIHRvbyBsb25nIHRvIGNvbnZlcnQiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgICAgIHNfYnVmZmVyID0gKGNoYXIgKilQeU1lbV9NQUxMT0MoUHlVbmljb2RlX0dFVF9TSVpFKHYpKzEpOworICAgICAgICBpZiAoc19idWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBpZiAoUHlVbmljb2RlX0VuY29kZURlY2ltYWwoUHlVbmljb2RlX0FTX1VOSUNPREUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gc19idWZmZXI7CiAgICAgICAgIGxlbiA9IHN0cmxlbihzKTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQogICAgIGxhc3QgPSBzICsgbGVuOwotICAgIHdoaWxlICgqcyAmJiBpc3NwYWNlKFB5X0NIQVJNQVNLKCpzKSkpCi0gICAgICAgIHMrKzsKLSAgICBpZiAoKnMgPT0gJ1wwJykgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHN0cmluZyBmb3IgZmxvYXQoKSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3AgPSBzOwotICAgIC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LiAgSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzCi0gICAgICogdGhlbSwgaW5maW5pdGllcyBhbmQgc2lnbmVkIHplcm9lcyAob24gdW5kZXJmbG93KSBhcmUgZmluZS4KLSAgICAgKiBIb3dldmVyLCBzdHJ0b2QgY2FuIHJldHVybiAwIGZvciBkZW5vcm1hbGl6ZWQgbnVtYmVycywgd2hlcmUgYXRvZgotICAgICAqIGRvZXMgbm90LiAgU28gKGFsYXMhKSB3ZSBzcGVjaWFsLWNhc2UgYSB6ZXJvIHJlc3VsdC4gIE5vdGUgdGhhdAotICAgICAqIHdoZXRoZXIgc3RydG9kIHNldHMgZXJybm8gb24gdW5kZXJmbG93IGlzIG5vdCBkZWZpbmVkLCBzbyB3ZSBjYW4ndAotICAgICAqIGtleSBvZmYgZXJybm8uCi0gICAgICovCi0gICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgic3RydG9kIiwgcmV0dXJuIE5VTEwpCi0gICAgeCA9IFB5T1NfYXNjaWlfc3RydG9kKHMsIChjaGFyICoqKSZlbmQpOwotICAgIFB5RlBFX0VORF9QUk9URUNUKHgpCi0gICAgZXJybm8gPSAwOwotICAgIC8qIEJlbGlldmUgaXQgb3Igbm90LCBTb2xhcmlzIDIuNiBjYW4gbW92ZSBlbmQgKmJleW9uZCogdGhlIG51bGwKLSAgICAgICBieXRlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgd2hlbiB0aGUgaW5wdXQgaXMgaW5mKGluaXR5KS4gKi8KLSAgICBpZiAoZW5kID4gbGFzdCkKLSAgICAgICAgZW5kID0gbGFzdDsKLSAgICAvKiBDaGVjayBmb3IgaW5mIGFuZCBuYW4uIFRoaXMgaXMgZG9uZSBsYXRlIGJlY2F1c2UgaXQgcmFyZWx5IGhhcHBlbnMuICovCi0gICAgaWYgKGVuZCA9PSBzKSB7Ci0gICAgICAgIGNoYXIgKnAgPSAoY2hhciopc3A7Ci0gICAgICAgIGludCBzaWduID0gMTsKIAotICAgICAgICBpZiAoKnAgPT0gJy0nKSB7Ci0gICAgICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgICAgICBwKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCpwID09ICcrJykgewotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeU9TX3N0cm5pY21wKHAsICJpbmYiLCA0KSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9SRVRVUk5fSU5GKHNpZ24pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeU9TX3N0cm5pY21wKHAsICJpbmZpbml0eSIsIDkpID09IDApIHsKLSAgICAgICAgICAgIFB5X1JFVFVSTl9JTkYoc2lnbik7Ci0gICAgICAgIH0KLSNpZmRlZiBQeV9OQU4KLSAgICAgICAgaWYoUHlPU19zdHJuaWNtcChwLCAibmFuIiwgNCkgPT0gMCkgewotICAgICAgICAgICAgUHlfUkVUVVJOX05BTjsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIFB5T1Nfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBmbG9hdCgpOiAlLjIwMHMiLCBzKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIGJ1ZmZlcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICAvKiBTaW5jZSBlbmQgIT0gcywgdGhlIHBsYXRmb3JtIG1hZGUgKnNvbWUqIGtpbmQgb2Ygc2Vuc2Ugb3V0Ci0gICAgICAgb2YgdGhlIGlucHV0LiAgVHJ1c3QgaXQuICovCi0gICAgd2hpbGUgKCplbmQgJiYgaXNzcGFjZShQeV9DSEFSTUFTSygqZW5kKSkpCisgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKnMpKQorICAgICAgICBzKys7CisgICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCBvdmVyZmxvdyBvciB1bmRlcmZsb3cuICBJZiB0aGUgcGxhdGZvcm0KKyAgICAgKiBzdXBwb3J0cyB0aGVtLCBpbmZpbml0aWVzIGFuZCBzaWduZWQgemVyb2VzIChvbiB1bmRlcmZsb3cpIGFyZQorICAgICAqIGZpbmUuICovCisgICAgeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAoY2hhciAqKikmZW5kLCBOVUxMKTsKKyAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgd2hpbGUgKFB5X0lTU1BBQ0UoKmVuZCkpCiAgICAgICAgIGVuZCsrOwotICAgIGlmICgqZW5kICE9ICdcMCcpIHsKKyAgICBpZiAoZW5kID09IGxhc3QpCisgICAgICAgIHJlc3VsdCA9IFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKyAgICBlbHNlIHsKICAgICAgICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAogICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGZsb2F0KCk6ICUuMjAwcyIsIHMpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgfQotICAgIGVsc2UgaWYgKGVuZCAhPSBsYXN0KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm51bGwgYnl0ZSBpbiBhcmd1bWVudCBmb3IgZmxvYXQoKSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHggPT0gMC4wKSB7Ci0gICAgICAgIC8qIFNlZSBhYm92ZSAtLSBtYXkgaGF2ZSBiZWVuIHN0cnRvZCBiZWluZyBhbmFsCi0gICAgICAgICAgIGFib3V0IGRlbm9ybXMuICovCi0gICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImF0b2YiLCByZXR1cm4gTlVMTCkKLSAgICAgICAgeCA9IFB5T1NfYXNjaWlfYXRvZihzKTsKLSAgICAgICAgUHlGUEVfRU5EX1BST1RFQ1QoeCkKLSAgICAgICAgZXJybm8gPSAwOyAgICAvKiB3aGV0aGVyIGF0b2YgZXZlciBzZXQgZXJybm8gaXMgdW5kZWZpbmVkICovCi0gICAgfQotICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CisKKyAgZXJyb3I6CisjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQorICAgIGlmIChzX2J1ZmZlcikKKyAgICAgICAgUHlNZW1fRlJFRShzX2J1ZmZlcik7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzM4LDc0ICsyODQsNiBAQAogCiAvKiBNZXRob2RzICovCiAKLXN0YXRpYyB2b2lkCi1mb3JtYXRfZmxvYXQoY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLCBQeUZsb2F0T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uKQotewotICAgIHJlZ2lzdGVyIGNoYXIgKmNwOwotICAgIGNoYXIgZm9ybWF0WzMyXTsKLSAgICBpbnQgaTsKLQotICAgIC8qIFN1YnJvdXRpbmUgZm9yIGZsb2F0X3JlcHIgYW5kIGZsb2F0X3ByaW50LgotICAgICAgIFdlIHdhbnQgZmxvYXQgbnVtYmVycyB0byBiZSByZWNvZ25pemFibGUgYXMgc3VjaCwKLSAgICAgICBpLmUuLCB0aGV5IHNob3VsZCBjb250YWluIGEgZGVjaW1hbCBwb2ludCBvciBhbiBleHBvbmVudC4KLSAgICAgICBIb3dldmVyLCAlZyBtYXkgcHJpbnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyOwotICAgICAgIGluIHN1Y2ggY2FzZXMsIHdlIGFwcGVuZCAiLjAiIHRvIHRoZSBzdHJpbmcuICovCi0KLSAgICBhc3NlcnQoUHlGbG9hdF9DaGVjayh2KSk7Ci0gICAgUHlPU19zbnByaW50Zihmb3JtYXQsIDMyLCAiJSUuJWlnIiwgcHJlY2lzaW9uKTsKLSAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnVmLCBidWZsZW4sIGZvcm1hdCwgdi0+b2JfZnZhbCk7Ci0gICAgY3AgPSBidWY7Ci0gICAgaWYgKCpjcCA9PSAnLScpCi0gICAgICAgIGNwKys7Ci0gICAgZm9yICg7ICpjcCAhPSAnXDAnOyBjcCsrKSB7Ci0gICAgICAgIC8qIEFueSBub24tZGlnaXQgbWVhbnMgaXQncyBub3QgYW4gaW50ZWdlcjsKLSAgICAgICAgICAgdGhpcyB0YWtlcyBjYXJlIG9mIE5BTiBhbmQgSU5GIGFzIHdlbGwuICovCi0gICAgICAgIGlmICghaXNkaWdpdChQeV9DSEFSTUFTSygqY3ApKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoKmNwID09ICdcMCcpIHsKLSAgICAgICAgKmNwKysgPSAnLic7Ci0gICAgICAgICpjcCsrID0gJzAnOwotICAgICAgICAqY3ArKyA9ICdcMCc7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogQ2hlY2tpbmcgdGhlIG5leHQgdGhyZWUgY2hhcnMgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggdG8KLSAgICAgKiBkZXRlY3QgaW5mIG9yIG5hbiwgZXZlbiBvbiBXaW5kb3dzLiBXZSBjaGVjayBmb3IgaW5mIG9yIG5hbgotICAgICAqIGF0IGxhc3QgYmVjYXVzZSB0aGV5IGFyZSByYXJlIGNhc2VzLgotICAgICAqLwotICAgIGZvciAoaT0wOyAqY3AgIT0gJ1wwJyAmJiBpPDM7IGNwKyssIGkrKykgewotICAgICAgICBpZiAoaXNkaWdpdChQeV9DSEFSTUFTSygqY3ApKSB8fCAqY3AgPT0gJy4nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8qIGZvdW5kIHNvbWV0aGluZyB0aGF0IGlzIG5laXRoZXIgYSBkaWdpdCBub3IgcG9pbnQKLSAgICAgICAgICogaXQgbWlnaHQgYmUgYSBOYU4gb3IgSU5GCi0gICAgICAgICAqLwotI2lmZGVmIFB5X05BTgotICAgICAgICBpZiAoUHlfSVNfTkFOKHYtPm9iX2Z2YWwpKSB7Ci0gICAgICAgICAgICBzdHJjcHkoYnVmLCAibmFuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2LT5vYl9mdmFsKSkgewotICAgICAgICAgICAgY3AgPSBidWY7Ci0gICAgICAgICAgICBpZiAoKmNwID09ICctJykKLSAgICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgc3RyY3B5KGNwLCAiaW5mIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi19Ci0KLS8qIFhYWCBQeUZsb2F0X0FzU3RyaW5nRXggc2hvdWxkIG5vdCBiZSBhIHB1YmxpYyBBUEkgZnVuY3Rpb24gKGZvciBvbmUKLSAgIFhYWCB0aGluZywgaXRzIHNpZ25hdHVyZSBwYXNzZXMgYSBidWZmZXIgd2l0aG91dCBhIGxlbmd0aDsgZm9yIGFub3RoZXIsCi0gICBYWFggaXQgaXNuJ3QgdXNlZnVsIG91dHNpZGUgdGhpcyBmaWxlKS4KLSovCi12b2lkCi1QeUZsb2F0X0FzU3RyaW5nRXgoY2hhciAqYnVmLCBQeUZsb2F0T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uKQotewotICAgIGZvcm1hdF9mbG9hdChidWYsIDEwMCwgdiwgcHJlY2lzaW9uKTsKLX0KLQogLyogTWFjcm8gYW5kIGhlbHBlciB0aGF0IGNvbnZlcnQgUHlPYmplY3Qgb2JqIHRvIGEgQyBkb3VibGUgYW5kIHN0b3JlCiAgICB0aGUgdmFsdWUgaW4gZGJsOyB0aGlzIHJlcGxhY2VzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjb2VyY2lvbgogICAgc2xvdCBmdW5jdGlvbi4gIElmIGNvbnZlcnNpb24gdG8gZG91YmxlIHJhaXNlcyBhbiBleGNlcHRpb24sIG9iaiBpcwpAQCAtNDQyLDY2ICszMjAsNzIgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogUHJlY2lzaW9ucyB1c2VkIGJ5IHJlcHIoKSBhbmQgc3RyKCksIHJlc3BlY3RpdmVseS4KLQotICAgVGhlIHJlcHIoKSBwcmVjaXNpb24gKDE3IHNpZ25pZmljYW50IGRlY2ltYWwgZGlnaXRzKSBpcyB0aGUgbWluaW1hbCBudW1iZXIKLSAgIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGVub3VnaCBwcmVjaXNpb24gc28gdGhhdCBpZiB0aGUgbnVtYmVyIGlzIHJlYWQKLSAgIGJhY2sgaW4gdGhlIGV4YWN0IHNhbWUgYmluYXJ5IHZhbHVlIGlzIHJlY3JlYXRlZC4gIFRoaXMgaXMgdHJ1ZSBmb3IgSUVFRQotICAgZmxvYXRpbmcgcG9pbnQgYnkgZGVzaWduLCBhbmQgYWxzbyBoYXBwZW5zIHRvIHdvcmsgZm9yIGFsbCBvdGhlciBtb2Rlcm4KLSAgIGhhcmR3YXJlLgotCi0gICBUaGUgc3RyKCkgcHJlY2lzaW9uIGlzIGNob3NlbiBzbyB0aGF0IGluIG1vc3QgY2FzZXMsIHRoZSByb3VuZGluZyBub2lzZQotICAgY3JlYXRlZCBieSB2YXJpb3VzIG9wZXJhdGlvbnMgaXMgc3VwcHJlc3NlZCwgd2hpbGUgZ2l2aW5nIHBsZW50eSBvZgotICAgcHJlY2lzaW9uIGZvciBwcmFjdGljYWwgdXNlLgotCi0qLwotCi0jZGVmaW5lIFBSRUNfUkVQUiAgICAgICAxNwotI2RlZmluZSBQUkVDX1NUUiAgICAgICAgMTIKLQotLyogWFhYIFB5RmxvYXRfQXNTdHJpbmcgYW5kIFB5RmxvYXRfQXNSZXByU3RyaW5nIHNob3VsZCBiZSBkZXByZWNhdGVkOgorLyogWFhYIFB5RmxvYXRfQXNTdHJpbmcgYW5kIFB5RmxvYXRfQXNSZXByU3RyaW5nIGFyZSBkZXByZWNhdGVkOgogICAgWFhYIHRoZXkgcGFzcyBhIGNoYXIgYnVmZmVyIHdpdGhvdXQgcGFzc2luZyBhIGxlbmd0aC4KICovCiB2b2lkCiBQeUZsb2F0X0FzU3RyaW5nKGNoYXIgKmJ1ZiwgUHlGbG9hdE9iamVjdCAqdikKIHsKLSAgICBmb3JtYXRfZmxvYXQoYnVmLCAxMDAsIHYsIFBSRUNfU1RSKTsKKyAgICBjaGFyICp0bXAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+b2JfZnZhbCwgJ2cnLAorICAgICAgICAgICAgICAgICAgICBQeUZsb2F0X1NUUl9QUkVDSVNJT04sCisgICAgICAgICAgICAgICAgICAgIFB5X0RUU0ZfQUREX0RPVF8wLCBOVUxMKTsKKyAgICBzdHJjcHkoYnVmLCB0bXApOworICAgIFB5TWVtX0ZyZWUodG1wKTsKIH0KIAogdm9pZAogUHlGbG9hdF9Bc1JlcHJTdHJpbmcoY2hhciAqYnVmLCBQeUZsb2F0T2JqZWN0ICp2KQogewotICAgIGZvcm1hdF9mbG9hdChidWYsIDEwMCwgdiwgUFJFQ19SRVBSKTsKKyAgICBjaGFyICogdG1wID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHYtPm9iX2Z2YWwsICdyJywgMCwKKyAgICAgICAgICAgICAgICAgICAgUHlfRFRTRl9BRERfRE9UXzAsIE5VTEwpOworICAgIHN0cmNweShidWYsIHRtcCk7CisgICAgUHlNZW1fRnJlZSh0bXApOwogfQogCiAvKiBBUkdTVVNFRCAqLwogc3RhdGljIGludAogZmxvYXRfcHJpbnQoUHlGbG9hdE9iamVjdCAqdiwgRklMRSAqZnAsIGludCBmbGFncykKIHsKLSAgICBjaGFyIGJ1ZlsxMDBdOwotICAgIGZvcm1hdF9mbG9hdChidWYsIHNpemVvZihidWYpLCB2LAotICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQeV9QUklOVF9SQVcpID8gUFJFQ19TVFIgOiBQUkVDX1JFUFIpOworICAgIGNoYXIgKmJ1ZjsKKyAgICBpZiAoZmxhZ3MgJiBQeV9QUklOVF9SQVcpCisgICAgICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2LT5vYl9mdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCBQeUZsb2F0X1NUUl9QUkVDSVNJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9EVFNGX0FERF9ET1RfMCwgTlVMTCk7CisgICAgZWxzZQorICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+b2JfZnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncicsIDAsIFB5X0RUU0ZfQUREX0RPVF8wLCBOVUxMKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZnB1dHMoYnVmLCBmcCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitmbG9hdF9zdHJfb3JfcmVwcihQeUZsb2F0T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uLCBjaGFyIGZvcm1hdF9jb2RlKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgY2hhciAqYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5RmxvYXRfQVNfRE9VQkxFKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9jb2RlLCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRFRTRl9BRERfRE9UXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIHJlc3VsdCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmKTsKKyAgICBQeU1lbV9GcmVlKGJ1Zik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X3JlcHIoUHlGbG9hdE9iamVjdCAqdikKIHsKLSAgICBjaGFyIGJ1ZlsxMDBdOwotICAgIGZvcm1hdF9mbG9hdChidWYsIHNpemVvZihidWYpLCB2LCBQUkVDX1JFUFIpOwotCi0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoYnVmKTsKKyAgICByZXR1cm4gZmxvYXRfc3RyX29yX3JlcHIodiwgMCwgJ3InKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X3N0cihQeUZsb2F0T2JqZWN0ICp2KQogewotICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgZm9ybWF0X2Zsb2F0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHYsIFBSRUNfU1RSKTsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhidWYpOworICAgIHJldHVybiBmbG9hdF9zdHJfb3JfcmVwcih2LCBQeUZsb2F0X1NUUl9QUkVDSVNJT04sICdnJyk7CiB9CiAKIC8qIENvbXBhcmlzb24gaXMgcHJldHR5IG11Y2ggYSBuaWdodG1hcmUuICBXaGVuIGNvbXBhcmluZyBmbG9hdCB0byBmbG9hdCwKQEAgLTc4NCw3ICs2NjgsNyBAQAogI2lmZGVmIFB5X05BTgogICAgIGlmIChiID09IDAuMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQgZGl2aXNpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCBkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgpAQCAtODA2LDcgKzY5MCw3IEBACiAjaWZkZWYgUHlfTkFOCiAgICAgaWYgKGIgPT0gMC4wKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCBkaXZpc2lvbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2VuZGlmCkBAIC04MzIsMTAgKzcxNiwyMCBAQAogI2VuZGlmCiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgibW9kdWxvIiwgcmV0dXJuIDApCiAgICAgbW9kID0gZm1vZCh2eCwgd3gpOwotICAgIC8qIG5vdGU6IGNoZWNraW5nIG1vZCp3eCA8IDAgaXMgaW5jb3JyZWN0IC0tIHVuZGVyZmxvd3MgdG8KLSAgICAgICAwIGlmIHd4IDwgc3FydChzbWFsbGVzdCBub256ZXJvIGRvdWJsZSkgKi8KLSAgICBpZiAobW9kICYmICgod3ggPCAwKSAhPSAobW9kIDwgMCkpKSB7Ci0gICAgICAgIG1vZCArPSB3eDsKKyAgICBpZiAobW9kKSB7CisgICAgICAgIC8qIGVuc3VyZSB0aGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkZW5vbWluYXRvciAqLworICAgICAgICBpZiAoKHd4IDwgMCkgIT0gKG1vZCA8IDApKSB7CisgICAgICAgICAgICBtb2QgKz0gd3g7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIHRoZSByZW1haW5kZXIgaXMgemVybywgYW5kIGluIHRoZSBwcmVzZW5jZSBvZiBzaWduZWQgemVyb2VzCisgICAgICAgICAgIGZtb2QgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0cyBhY3Jvc3MgcGxhdGZvcm1zOyBlbnN1cmUKKyAgICAgICAgICAgaXQgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRlbm9taW5hdG9yOyB3ZSdkIGxpa2UgdG8gZG8KKyAgICAgICAgICAgIm1vZCA9IHd4ICogMC4wIiwgYnV0IHRoYXQgbWF5IGdldCBvcHRpbWl6ZWQgYXdheSAqLworICAgICAgICBtb2QgKj0gbW9kOyAgLyogaGlkZSAibW9kID0gKzAiIGZyb20gb3B0aW1pemVyICovCisgICAgICAgIGlmICh3eCA8IDAuMCkKKyAgICAgICAgICAgIG1vZCA9IC1tb2Q7CiAgICAgfQogICAgIFB5RlBFX0VORF9QUk9URUNUKG1vZCkKICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKG1vZCk7CkBAIC05MDcsMTAgKzgwMSwxNSBAQAogICAgIHJldHVybiByOwogfQogCisvKiBkZXRlcm1pbmUgd2hldGhlciB4IGlzIGFuIG9kZCBpbnRlZ2VyIG9yIG5vdDsgIGFzc3VtZXMgdGhhdAorICAgeCBpcyBub3QgYW4gaW5maW5pdHkgb3IgbmFuLiAqLworI2RlZmluZSBET1VCTEVfSVNfT0REX0lOVEVHRVIoeCkgKGZtb2QoZmFicyh4KSwgMi4wKSA9PSAxLjApCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmbG9hdF9wb3coUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBQeU9iamVjdCAqeikKIHsKICAgICBkb3VibGUgaXYsIGl3LCBpeDsKKyAgICBpbnQgbmVnYXRlX3Jlc3VsdCA9IDA7CiAKICAgICBpZiAoKFB5T2JqZWN0ICopeiAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJwb3coKSAzcmQgYXJndW1lbnQgbm90ICIKQEAgLTkyNSwxNyArODI0LDUzIEBACiAgICAgaWYgKGl3ID09IDApIHsgICAgICAgICAgICAgIC8qIHYqKjAgaXMgMSwgZXZlbiAwKiowICovCiAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMS4wKTsKICAgICB9Ci0gICAgaWYgKGl2ID09IDAuMCkgeyAgLyogMCoqdyBpcyBlcnJvciBpZiB3PDAsIGVsc2UgMSAqLworICAgIGlmIChQeV9JU19OQU4oaXYpKSB7ICAgICAgICAvKiBuYW4qKncgPSBuYW4sIHVubGVzcyB3ID09IDAgKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShpdik7CisgICAgfQorICAgIGlmIChQeV9JU19OQU4oaXcpKSB7ICAgICAgICAvKiB2KipuYW4gPSBuYW4sIHVubGVzcyB2ID09IDE7IDEqKm5hbiA9IDEgKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShpdiA9PSAxLjAgPyAxLjAgOiBpdyk7CisgICAgfQorICAgIGlmIChQeV9JU19JTkZJTklUWShpdykpIHsKKyAgICAgICAgLyogdioqaW5mIGlzOiAwLjAgaWYgYWJzKHYpIDwgMTsgMS4wIGlmIGFicyh2KSA9PSAxOyBpbmYgaWYKKyAgICAgICAgICogICAgIGFicyh2KSA+IDEgKGluY2x1ZGluZyBjYXNlIHdoZXJlIHYgaW5maW5pdGUpCisgICAgICAgICAqCisgICAgICAgICAqIHYqKi1pbmYgaXM6IGluZiBpZiBhYnModikgPCAxOyAxLjAgaWYgYWJzKHYpID09IDE7IDAuMCBpZgorICAgICAgICAgKiAgICAgYWJzKHYpID4gMSAoaW5jbHVkaW5nIGNhc2Ugd2hlcmUgdiBpbmZpbml0ZSkKKyAgICAgICAgICovCisgICAgICAgIGl2ID0gZmFicyhpdik7CisgICAgICAgIGlmIChpdiA9PSAxLjApCisgICAgICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKDEuMCk7CisgICAgICAgIGVsc2UgaWYgKChpdyA+IDAuMCkgPT0gKGl2ID4gMS4wKSkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoZmFicyhpdykpOyAvKiByZXR1cm4gaW5mICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKTsKKyAgICB9CisgICAgaWYgKFB5X0lTX0lORklOSVRZKGl2KSkgeworICAgICAgICAvKiAoKy1pbmYpKip3IGlzOiBpbmYgZm9yIHcgcG9zaXRpdmUsIDAgZm9yIHcgbmVnYXRpdmU7IGluCisgICAgICAgICAqICAgICBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIGFkZCB0aGUgYXBwcm9wcmlhdGUgc2lnbiBpZiB3IGlzCisgICAgICAgICAqICAgICBhbiBvZGQgaW50ZWdlci4KKyAgICAgICAgICovCisgICAgICAgIGludCBpd19pc19vZGQgPSBET1VCTEVfSVNfT0REX0lOVEVHRVIoaXcpOworICAgICAgICBpZiAoaXcgPiAwLjApCisgICAgICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl3X2lzX29kZCA/IGl2IDogZmFicyhpdikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl3X2lzX29kZCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlzaWduKDAuMCwgaXYpIDogMC4wKTsKKyAgICB9CisgICAgaWYgKGl2ID09IDAuMCkgeyAgLyogMCoqdyBpczogMCBmb3IgdyBwb3NpdGl2ZSwgMSBmb3IgdyB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgKGFscmVhZHkgZGVhbHQgd2l0aCBhYm92ZSksIGFuZCBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHcgaXMgbmVnYXRpdmUuICovCisgICAgICAgIGludCBpd19pc19vZGQgPSBET1VCTEVfSVNfT0REX0lOVEVHRVIoaXcpOwogICAgICAgICBpZiAoaXcgPCAwLjApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMC4wIGNhbm5vdCBiZSByYWlzZWQgdG8gYSBuZWdhdGl2ZSBwb3dlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwLjAgY2Fubm90IGJlIHJhaXNlZCB0byBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgcG93ZXIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKTsKKyAgICAgICAgLyogdXNlIGNvcnJlY3Qgc2lnbiBpZiBpdyBpcyBvZGQgKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShpd19pc19vZGQgPyBpdiA6IDAuMCk7CiAgICAgfQotICAgIGlmIChpdiA9PSAxLjApIHsgLyogMSoqdyBpcyAxLCBldmVuIDEqKmluZiBhbmQgMSoqbmFuICovCi0gICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMS4wKTsKLSAgICB9CisKICAgICBpZiAoaXYgPCAwLjApIHsKICAgICAgICAgLyogV2hldGhlciB0aGlzIGlzIGFuIGVycm9yIGlzIGEgbWVzcywgYW5kIGJ1bXBzIGludG8gbGlibQogICAgICAgICAgKiBidWdzIHNvIHdlIGhhdmUgdG8gZmlndXJlIGl0IG91dCBvdXJzZWx2ZXMuCkBAIC05NDUsMzMgKzg4MCw0MSBAQAogICAgICAgICAgICAgICAgICJjYW5ub3QgYmUgcmFpc2VkIHRvIGEgZnJhY3Rpb25hbCBwb3dlciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgLyogaXcgaXMgYW4gZXhhY3QgaW50ZWdlciwgYWxiZWl0IHBlcmhhcHMgYSB2ZXJ5IGxhcmdlIG9uZS4KKyAgICAgICAgLyogaXcgaXMgYW4gZXhhY3QgaW50ZWdlciwgYWxiZWl0IHBlcmhhcHMgYSB2ZXJ5IGxhcmdlCisgICAgICAgICAqIG9uZS4gIFJlcGxhY2UgaXYgYnkgaXRzIGFic29sdXRlIHZhbHVlIGFuZCByZW1lbWJlcgorICAgICAgICAgKiB0byBuZWdhdGUgdGhlIHBvdyByZXN1bHQgaWYgaXcgaXMgb2RkLgorICAgICAgICAgKi8KKyAgICAgICAgaXYgPSAtaXY7CisgICAgICAgIG5lZ2F0ZV9yZXN1bHQgPSBET1VCTEVfSVNfT0REX0lOVEVHRVIoaXcpOworICAgIH0KKworICAgIGlmIChpdiA9PSAxLjApIHsgLyogMSoqdyBpcyAxLCBldmVuIDEqKmluZiBhbmQgMSoqbmFuICovCisgICAgICAgIC8qICgtMSkgKiogbGFyZ2VfaW50ZWdlciBhbHNvIGVuZHMgdXAgaGVyZS4gIEhlcmUncyBhbgorICAgICAgICAgKiBleHRyYWN0IGZyb20gdGhlIGNvbW1lbnRzIGZvciB0aGUgcHJldmlvdXMKKyAgICAgICAgICogaW1wbGVtZW50YXRpb24gZXhwbGFpbmluZyB3aHkgdGhpcyBzcGVjaWFsIGNhc2UgaXMKKyAgICAgICAgICogbmVjZXNzYXJ5OgorICAgICAgICAgKgogICAgICAgICAgKiAtMSByYWlzZWQgdG8gYW4gZXhhY3QgaW50ZWdlciBzaG91bGQgbmV2ZXIgYmUgZXhjZXB0aW9uYWwuCiAgICAgICAgICAqIEFsYXMsIHNvbWUgbGlibXMgKGNoaWVmbHkgZ2xpYmMgYXMgb2YgZWFybHkgMjAwMykgcmV0dXJuCiAgICAgICAgICAqIE5hTiBhbmQgc2V0IEVET00gb24gcG93KC0xLCBsYXJnZV9pbnQpIGlmIHRoZSBpbnQgZG9lc24ndAogICAgICAgICAgKiBoYXBwZW4gdG8gYmUgcmVwcmVzZW50YWJsZSBpbiBhICpDKiBpbnRlZ2VyLiAgVGhhdCdzIGEKLSAgICAgICAgICogYnVnOyB3ZSBsZXQgdGhhdCBzbGlkZSBpbiBtYXRoLnBvdygpICh3aGljaCBjdXJyZW50bHkKLSAgICAgICAgICogcmVmbGVjdHMgYWxsIHBsYXRmb3JtIGFjY2lkZW50cyksIGJ1dCBub3QgZm9yIFB5dGhvbidzICoqLgorICAgICAgICAgKiBidWcuCiAgICAgICAgICAqLwotICAgICAgICAgaWYgKGl2ID09IC0xLjAgJiYgUHlfSVNfRklOSVRFKGl3KSkgewotICAgICAgICAgICAgLyogUmV0dXJuIDEgaWYgaXcgaXMgZXZlbiwgLTEgaWYgaXcgaXMgb2RkOyB0aGVyZSdzCi0gICAgICAgICAgICAgKiBubyBndWFyYW50ZWUgdGhhdCBhbnkgQyBpbnRlZ3JhbCB0eXBlIGlzIGJpZwotICAgICAgICAgICAgICogZW5vdWdoIHRvIGhvbGQgaXcsIHNvIHdlIGhhdmUgdG8gY2hlY2sgdGhpcwotICAgICAgICAgICAgICogaW5kaXJlY3RseS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaXggPSBmbG9vcihpdyAqIDAuNSkgKiAyLjA7Ci0gICAgICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl4ID09IGl3ID8gMS4wIDogLTEuMCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogRWxzZSBpdiAhPSAtMS4wLCBhbmQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGFyZSBwb3NzaWJsZS4KLSAgICAgICAgICogVW5sZXNzIHdlJ3JlIHRvIHdyaXRlIHBvdygpIG91cnNlbHZlcywgd2UgaGF2ZSB0byB0cnVzdAotICAgICAgICAgKiB0aGUgcGxhdGZvcm0gdG8gZG8gdGhpcyBjb3JyZWN0bHkuCi0gICAgICAgICAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKG5lZ2F0ZV9yZXN1bHQgPyAtMS4wIDogMS4wKTsKICAgICB9CisKKyAgICAvKiBOb3cgaXYgYW5kIGl3IGFyZSBmaW5pdGUsIGl3IGlzIG5vbnplcm8sIGFuZCBpdiBpcworICAgICAqIHBvc2l0aXZlIGFuZCBub3QgZXF1YWwgdG8gMS4wLiAgV2UgZmluYWxseSBhbGxvdworICAgICAqIHRoZSBwbGF0Zm9ybSBwb3cgdG8gc3RlcCBpbiBhbmQgZG8gdGhlIHJlc3QuCisgICAgICovCiAgICAgZXJybm8gPSAwOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoInBvdyIsIHJldHVybiBOVUxMKQogICAgIGl4ID0gcG93KGl2LCBpdyk7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QoaXgpCiAgICAgUHlfQURKVVNUX0VSQU5HRTEoaXgpOworICAgIGlmIChuZWdhdGVfcmVzdWx0KQorICAgICAgICBpeCA9IC1peDsKKwogICAgIGlmIChlcnJubyAhPSAwKSB7CiAgICAgICAgIC8qIFdlIGRvbid0IGV4cGVjdCBhbnkgZXJybm8gdmFsdWUgb3RoZXIgdGhhbiBFUkFOR0UsIGJ1dAogICAgICAgICAgKiB0aGUgcmFuZ2Ugb2YgbGlibSBidWdzIGFwcGVhcnMgdW5ib3VuZGVkLgpAQCAtOTgzLDYgKzkyNiw4IEBACiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShpeCk7CiB9CiAKKyN1bmRlZiBET1VCTEVfSVNfT0REX0lOVEVHRVIKKwogc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X25lZyhQeUZsb2F0T2JqZWN0ICp2KQogewpAQCAtMTExMSw2ICsxMDU2LDIwMiBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbURvdWJsZSh4KTsKIH0KIAorLyogX1B5X2RvdWJsZV9yb3VuZDogcm91bmRzIGEgZmluaXRlIG5vbnplcm8gZG91YmxlIHRvIHRoZSBjbG9zZXN0IG11bHRpcGxlIG9mCisgICAxMCoqLW5kaWdpdHM7IGhlcmUgbmRpZ2l0cyBpcyB3aXRoaW4gcmVhc29uYWJsZSBib3VuZHMgKHR5cGljYWxseSwgLTMwOCA8PQorICAgbmRpZ2l0cyA8PSAzMjMpLiAgUmV0dXJucyBhIFB5dGhvbiBmbG9hdCwgb3Igc2V0cyBhIFB5dGhvbiBlcnJvciBhbmQKKyAgIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlIChPdmVyZmxvd0Vycm9yIGFuZCBtZW1vcnkgZXJyb3JzIGFyZSBwb3NzaWJsZSkuICovCisKKyNpZm5kZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorLyogdmVyc2lvbiBvZiBfUHlfZG91YmxlX3JvdW5kIHRoYXQgdXNlcyB0aGUgY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nPC0+ZG91YmxlCisgICBjb252ZXJzaW9ucyBmcm9tIFB5dGhvbi9kdG9hLmMgKi8KKworLyogRklWRV9QT1dfTElNSVQgaXMgdGhlIGxhcmdlc3QgayBzdWNoIHRoYXQgNSoqayBpcyBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMKKyAgIGEgZG91YmxlLiAgU2luY2Ugd2UncmUgdXNpbmcgdGhlIGNvZGUgaW4gUHl0aG9uL2R0b2EuYywgaXQgc2hvdWxkIGJlIHNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IEMgZG91YmxlcyBhcmUgSUVFRSA3NTQgYmluYXJ5NjQgZm9ybWF0LiAgVG8gYmUgb24gdGhlIHNhZmUKKyAgIHNpZGUsIHdlIGNoZWNrIHRoaXMuICovCisjaWYgREJMX01BTlRfRElHID09IDUzCisjZGVmaW5lIEZJVkVfUE9XX0xJTUlUIDIyCisjZWxzZQorI2Vycm9yICJDIGRvdWJsZXMgZG8gbm90IGFwcGVhciB0byBiZSBJRUVFIDc1NCBiaW5hcnk2NCBmb3JtYXQiCisjZW5kaWYKKworUHlPYmplY3QgKgorX1B5X2RvdWJsZV9yb3VuZChkb3VibGUgeCwgaW50IG5kaWdpdHMpIHsKKworICAgIGRvdWJsZSByb3VuZGVkLCBtOworICAgIFB5X3NzaXplX3QgYnVmbGVuLCBteWJ1Zmxlbj0xMDA7CisgICAgY2hhciAqYnVmLCAqYnVmX2VuZCwgc2hvcnRidWZbMTAwXSwgKm15YnVmPXNob3J0YnVmOworICAgIGludCBkZWNwdCwgc2lnbiwgdmFsLCBoYWxmd2F5X2Nhc2U7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisKKyAgICAvKiBUaGUgYmFzaWMgaWRlYSBpcyB2ZXJ5IHNpbXBsZTogY29udmVydCBhbmQgcm91bmQgdGhlIGRvdWJsZSB0byBhCisgICAgICAgZGVjaW1hbCBzdHJpbmcgdXNpbmcgX1B5X2RnX2R0b2EsIHRoZW4gY29udmVydCB0aGF0IGRlY2ltYWwgc3RyaW5nCisgICAgICAgYmFjayB0byBhIGRvdWJsZSB3aXRoIF9QeV9kZ19zdHJ0b2QuICBUaGVyZSdzIG9uZSBtaW5vciBkaWZmaWN1bHR5OgorICAgICAgIFB5dGhvbiAyLnggZXhwZWN0cyByb3VuZCB0byBkbyByb3VuZC1oYWxmLWF3YXktZnJvbS16ZXJvLCB3aGlsZQorICAgICAgIF9QeV9kZ19kdG9hIGRvZXMgcm91bmQtaGFsZi10by1ldmVuLiAgU28gd2UgbmVlZCBzb21lIHdheSB0byBkZXRlY3QKKyAgICAgICBhbmQgY29ycmVjdCB0aGUgaGFsZndheSBjYXNlcy4KKworICAgICAgIERldGVjdGlvbjogYSBoYWxmd2F5IHZhbHVlIGhhcyB0aGUgZm9ybSBrICogMC41ICogMTAqKi1uZGlnaXRzIGZvcgorICAgICAgIHNvbWUgb2RkIGludGVnZXIgay4gIE9yIGluIG90aGVyIHdvcmRzLCBhIHJhdGlvbmFsIG51bWJlciB4IGlzCisgICAgICAgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIG11bHRpcGxlcyBvZiAxMCoqLW5kaWdpdHMgaWYgaXRzCisgICAgICAgMi12YWx1YXRpb24gaXMgZXhhY3RseSAtbmRpZ2l0cy0xIGFuZCBpdHMgNS12YWx1YXRpb24gaXMgYXQgbGVhc3QKKyAgICAgICAtbmRpZ2l0cy4gIEZvciBuZGlnaXRzID49IDAgdGhlIGxhdHRlciBjb25kaXRpb24gaXMgYXV0b21hdGljYWxseQorICAgICAgIHNhdGlzZmllZCBmb3IgYSBiaW5hcnkgZmxvYXQgeCwgc2luY2UgYW55IHN1Y2ggZmxvYXQgaGFzCisgICAgICAgbm9ubmVnYXRpdmUgNS12YWx1YXRpb24uICBGb3IgMCA+IG5kaWdpdHMgPj0gLTIyLCB4IG5lZWRzIHRvIGJlIGFuCisgICAgICAgaW50ZWdyYWwgbXVsdGlwbGUgb2YgNSoqLW5kaWdpdHM7IHdlIGNhbiBjaGVjayB0aGlzIHVzaW5nIGZtb2QuCisgICAgICAgRm9yIC0yMiA+IG5kaWdpdHMsIHRoZXJlIGFyZSBubyBoYWxmd2F5IGNhc2VzOiA1KioyMyB0YWtlcyA1NCBiaXRzCisgICAgICAgdG8gcmVwcmVzZW50IGV4YWN0bHksIHNvIGFueSBvZGQgbXVsdGlwbGUgb2YgMC41ICogMTAqKm4gZm9yIG4gPj0KKyAgICAgICAyMyB0YWtlcyBhdCBsZWFzdCA1NCBiaXRzIG9mIHByZWNpc2lvbiB0byByZXByZXNlbnQgZXhhY3RseS4KKworICAgICAgIENvcnJlY3Rpb246IGEgc2ltcGxlIHN0cmF0ZWd5IGZvciBkZWFsaW5nIHdpdGggaGFsZndheSBjYXNlcyBpcyB0bworICAgICAgIChmb3IgdGhlIGhhbGZ3YXkgY2FzZXMgb25seSkgY2FsbCBfUHlfZGdfZHRvYSB3aXRoIGFuIGFyZ3VtZW50IG9mCisgICAgICAgbmRpZ2l0cysxIGluc3RlYWQgb2YgbmRpZ2l0cyAodGh1cyBkb2luZyBhbiBleGFjdCBjb252ZXJzaW9uIHRvCisgICAgICAgZGVjaW1hbCksIHJvdW5kIHRoZSByZXN1bHRpbmcgc3RyaW5nIG1hbnVhbGx5LCBhbmQgdGhlbiBjb252ZXJ0CisgICAgICAgYmFjayB1c2luZyBfUHlfZGdfc3RydG9kLgorICAgICovCisKKyAgICAvKiBuYW5zLCBpbmZpbml0aWVzIGFuZCB6ZXJvcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVhbHQKKyAgICAgICB3aXRoIGJ5IHRoZSBjYWxsZXIgKGluIHRoaXMgY2FzZSwgYnVpbHRpbl9yb3VuZCkgKi8KKyAgICBhc3NlcnQoUHlfSVNfRklOSVRFKHgpICYmIHggIT0gMC4wKTsKKworICAgIC8qIGZpbmQgMi12YWx1YXRpb24gdmFsIG9mIHggKi8KKyAgICBtID0gZnJleHAoeCwgJnZhbCk7CisgICAgd2hpbGUgKG0gIT0gZmxvb3IobSkpIHsKKyAgICAgICAgbSAqPSAyLjA7CisgICAgICAgIHZhbC0tOworICAgIH0KKworICAgIC8qIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBoYWxmd2F5IGNhc2UgKi8KKyAgICBpZiAodmFsID09IC1uZGlnaXRzLTEpIHsKKyAgICAgICAgaWYgKG5kaWdpdHMgPj0gMCkKKyAgICAgICAgICAgIGhhbGZ3YXlfY2FzZSA9IDE7CisgICAgICAgIGVsc2UgaWYgKG5kaWdpdHMgPj0gLUZJVkVfUE9XX0xJTUlUKSB7CisgICAgICAgICAgICBkb3VibGUgZml2ZV9wb3cgPSAxLjA7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgLW5kaWdpdHM7IGkrKykKKyAgICAgICAgICAgICAgICBmaXZlX3BvdyAqPSA1LjA7CisgICAgICAgICAgICBoYWxmd2F5X2Nhc2UgPSBmbW9kKHgsIGZpdmVfcG93KSA9PSAwLjA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFsZndheV9jYXNlID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBoYWxmd2F5X2Nhc2UgPSAwOworCisgICAgLyogcm91bmQgdG8gYSBkZWNpbWFsIHN0cmluZzsgdXNlIGFuIGV4dHJhIHBsYWNlIGZvciBoYWxmd2F5IGNhc2UgKi8KKyAgICBidWYgPSBfUHlfZGdfZHRvYSh4LCAzLCBuZGlnaXRzK2hhbGZ3YXlfY2FzZSwgJmRlY3B0LCAmc2lnbiwgJmJ1Zl9lbmQpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYnVmbGVuID0gYnVmX2VuZCAtIGJ1ZjsKKworICAgIC8qIGluIGhhbGZ3YXkgY2FzZSwgZG8gdGhlIHJvdW5kLWhhbGYtYXdheS1mcm9tLXplcm8gbWFudWFsbHkgKi8KKyAgICBpZiAoaGFsZndheV9jYXNlKSB7CisgICAgICAgIGludCBpLCBjYXJyeTsKKyAgICAgICAgLyogc2FuaXR5IGNoZWNrOiBfUHlfZGdfZHRvYSBzaG91bGQgbm90IGhhdmUgc3RyaXBwZWQKKyAgICAgICAgICAgYW55IHplcm9zIGZyb20gdGhlIHJlc3VsdDogdGhlcmUgc2hvdWxkIGJlIGV4YWN0bHkKKyAgICAgICAgICAgbmRpZ2l0cysxIHBsYWNlcyBmb2xsb3dpbmcgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZAorICAgICAgICAgICB0aGUgbGFzdCBkaWdpdCBpbiB0aGUgYnVmZmVyIHNob3VsZCBiZSBhICc1Jy4qLworICAgICAgICBhc3NlcnQoYnVmbGVuIC0gZGVjcHQgPT0gbmRpZ2l0cysxKTsKKyAgICAgICAgYXNzZXJ0KGJ1ZltidWZsZW4tMV0gPT0gJzUnKTsKKworICAgICAgICAvKiBpbmNyZW1lbnQgYW5kIHNoaWZ0IHJpZ2h0IGF0IHRoZSBzYW1lIHRpbWUuICovCisgICAgICAgIGRlY3B0ICs9IDE7CisgICAgICAgIGNhcnJ5ID0gMTsKKyAgICAgICAgZm9yIChpPWJ1Zmxlbi0xOyBpLS0gPiAwOykgeworICAgICAgICAgICAgY2FycnkgKz0gYnVmW2ldIC0gJzAnOworICAgICAgICAgICAgYnVmW2krMV0gPSBjYXJyeSAlIDEwICsgJzAnOworICAgICAgICAgICAgY2FycnkgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgYnVmWzBdID0gY2FycnkgKyAnMCc7CisgICAgfQorCisgICAgLyogR2V0IG5ldyBidWZmZXIgaWYgc2hvcnRidWYgaXMgdG9vIHNtYWxsLiAgU3BhY2UgbmVlZGVkIDw9IGJ1Zl9lbmQgLQorICAgICAgIGJ1ZiArIDg6ICgxIGV4dHJhIGZvciAnMCcsIDEgZm9yIHNpZ24sIDUgZm9yIGV4cCwgMSBmb3IgJ1wwJykuICovCisgICAgaWYgKGJ1ZmxlbiArIDggPiBteWJ1ZmxlbikgeworICAgICAgICBteWJ1ZmxlbiA9IGJ1Zmxlbis4OworICAgICAgICBteWJ1ZiA9IChjaGFyICopUHlNZW1fTWFsbG9jKG15YnVmbGVuKTsKKyAgICAgICAgaWYgKG15YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogY29weSBidWYgdG8gbXlidWYsIGFkZGluZyBleHBvbmVudCwgc2lnbiBhbmQgbGVhZGluZyAwICovCisgICAgUHlPU19zbnByaW50ZihteWJ1ZiwgbXlidWZsZW4sICIlczAlc2UlZCIsIChzaWduID8gIi0iIDogIiIpLAorICAgICAgICAgICAgICAgICAgYnVmLCBkZWNwdCAtIChpbnQpYnVmbGVuKTsKKworICAgIC8qIGFuZCBjb252ZXJ0IHRoZSByZXN1bHRpbmcgc3RyaW5nIGJhY2sgdG8gYSBkb3VibGUgKi8KKyAgICBlcnJubyA9IDA7CisgICAgcm91bmRlZCA9IF9QeV9kZ19zdHJ0b2QobXlidWYsIE5VTEwpOworICAgIGlmIChlcnJubyA9PSBFUkFOR0UgJiYgZmFicyhyb3VuZGVkKSA+PSAxLikKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicm91bmRlZCB2YWx1ZSB0b28gbGFyZ2UgdG8gcmVwcmVzZW50Iik7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBQeUZsb2F0X0Zyb21Eb3VibGUocm91bmRlZCk7CisKKyAgICAvKiBkb25lIGNvbXB1dGluZyB2YWx1ZTsgIG5vdyBjbGVhbiB1cCAqLworICAgIGlmIChteWJ1ZiAhPSBzaG9ydGJ1ZikKKyAgICAgICAgUHlNZW1fRnJlZShteWJ1Zik7CisgIGV4aXQ6CisgICAgX1B5X2RnX2ZyZWVkdG9hKGJ1Zik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI3VuZGVmIEZJVkVfUE9XX0xJTUlUCisKKyNlbHNlIC8qIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIgKi8KKworLyogZmFsbGJhY2sgdmVyc2lvbiwgdG8gYmUgdXNlZCB3aGVuIGNvcnJlY3RseSByb3VuZGVkIGJpbmFyeTwtPmRlY2ltYWwKKyAgIGNvbnZlcnNpb25zIGFyZW4ndCBhdmFpbGFibGUgKi8KKworUHlPYmplY3QgKgorX1B5X2RvdWJsZV9yb3VuZChkb3VibGUgeCwgaW50IG5kaWdpdHMpIHsKKyAgICBkb3VibGUgcG93MSwgcG93MiwgeSwgejsKKyAgICBpZiAobmRpZ2l0cyA+PSAwKSB7CisgICAgICAgIGlmIChuZGlnaXRzID4gMjIpIHsKKyAgICAgICAgICAgIC8qIHBvdzEgYW5kIHBvdzIgYXJlIGVhY2ggc2FmZSBmcm9tIG92ZXJmbG93LCBidXQKKyAgICAgICAgICAgICAgIHBvdzEqcG93MiB+PSBwb3coMTAuMCwgbmRpZ2l0cykgbWlnaHQgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgIHBvdzEgPSBwb3coMTAuMCwgKGRvdWJsZSkobmRpZ2l0cy0yMikpOworICAgICAgICAgICAgcG93MiA9IDFlMjI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwb3cxID0gcG93KDEwLjAsIChkb3VibGUpbmRpZ2l0cyk7CisgICAgICAgICAgICBwb3cyID0gMS4wOworICAgICAgICB9CisgICAgICAgIHkgPSAoeCpwb3cxKSpwb3cyOworICAgICAgICAvKiBpZiB5IG92ZXJmbG93cywgdGhlbiByb3VuZGVkIHZhbHVlIGlzIGV4YWN0bHkgeCAqLworICAgICAgICBpZiAoIVB5X0lTX0ZJTklURSh5KSkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwb3cxID0gcG93KDEwLjAsIChkb3VibGUpLW5kaWdpdHMpOworICAgICAgICBwb3cyID0gMS4wOyAvKiB1bnVzZWQ7IHNpbGVuY2VzIGEgZ2NjIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAgICAgeSA9IHggLyBwb3cxOworICAgIH0KKworICAgIHogPSByb3VuZCh5KTsKKyAgICBpZiAoZmFicyh5LXopID09IDAuNSkKKyAgICAgICAgLyogaGFsZndheSBiZXR3ZWVuIHR3byBpbnRlZ2VyczsgdXNlIHJvdW5kLWF3YXktZnJvbS16ZXJvICovCisgICAgICAgIHogPSB5ICsgY29weXNpZ24oMC41LCB5KTsKKworICAgIGlmIChuZGlnaXRzID49IDApCisgICAgICAgIHogPSAoeiAvIHBvdzIpIC8gcG93MTsKKyAgICBlbHNlCisgICAgICAgIHogKj0gcG93MTsKKworICAgIC8qIGlmIGNvbXB1dGF0aW9uIHJlc3VsdGVkIGluIG92ZXJmbG93LCByYWlzZSBPdmVyZmxvd0Vycm9yICovCisgICAgaWYgKCFQeV9JU19GSU5JVEUoeikpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcmZsb3cgb2NjdXJyZWQgZHVyaW5nIHJvdW5kIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoeik7Cit9CisKKyNlbmRpZiAvKiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmbG9hdF9mbG9hdChQeU9iamVjdCAqdikKIHsKQEAgLTEyNjMsMTQgKzE0MDQsMTQgQEAKID4+PiAzLjE0MTU5LmhleCgpXG5cCiAnMHgxLjkyMWY5ZjAxYjg2NmVwKzEnIik7CiAKLS8qIENhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIG1hdGNoIHVzZWQgZm9yIG5hbiBhbmQgaW5mIGRldGVjdGlvbi4gdCBzaG91bGQgYmUKLSAgIGxvd2VyLWNhc2UgYW5kIG51bGwtdGVybWluYXRlZC4gIFJldHVybiBhIG5vbnplcm8gcmVzdWx0IGlmIHRoZSBmaXJzdAotICAgc3RybGVuKHQpIGNoYXJhY3RlcnMgb2YgcyBtYXRjaCB0IGFuZCAwIG90aGVyd2lzZS4gKi8KKy8qIENhc2UtaW5zZW5zaXRpdmUgbG9jYWxlLWluZGVwZW5kZW50IHN0cmluZyBtYXRjaCB1c2VkIGZvciBuYW4gYW5kIGluZgorICAgZGV0ZWN0aW9uLiB0IHNob3VsZCBiZSBsb3dlci1jYXNlIGFuZCBudWxsLXRlcm1pbmF0ZWQuICBSZXR1cm4gYSBub256ZXJvCisgICByZXN1bHQgaWYgdGhlIGZpcnN0IHN0cmxlbih0KSBjaGFyYWN0ZXJzIG9mIHMgbWF0Y2ggdCBhbmQgMCBvdGhlcndpc2UuICovCiAKIHN0YXRpYyBpbnQKIGNhc2VfaW5zZW5zaXRpdmVfbWF0Y2goY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKIHsKLSAgICB3aGlsZSgqdCAmJiB0b2xvd2VyKCpzKSA9PSAqdCkgeworICAgIHdoaWxlKCp0ICYmIFB5X1RPTE9XRVIoKnMpID09ICp0KSB7CiAgICAgICAgIHMrKzsKICAgICAgICAgdCsrOwogICAgIH0KQEAgLTEzNDMsNyArMTQ4NCw3IEBACiAgICAgICoqKioqKioqKioqKioqKioqKioqLwogCiAgICAgLyogbGVhZGluZyB3aGl0ZXNwYWNlIGFuZCBvcHRpb25hbCBzaWduICovCi0gICAgd2hpbGUgKCpzICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkKKyAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCiAgICAgICAgIHMrKzsKICAgICBpZiAoKnMgPT0gJy0nKSB7CiAgICAgICAgIHMrKzsKQEAgLTEzNzQsNyArMTUxNSw3IEBACiAgICAgc19zdG9yZSA9IHM7CiAgICAgaWYgKCpzID09ICcwJykgewogICAgICAgICBzKys7Ci0gICAgICAgIGlmICh0b2xvd2VyKCpzKSA9PSAoaW50KSd4JykKKyAgICAgICAgaWYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpCiAgICAgICAgICAgICBzKys7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHMgPSBzX3N0b3JlOwpAQCAtMTQwNCw3ICsxNTQ1LDcgQEAKICAgICAgICAgZ290byBpbnNhbmVfbGVuZ3RoX2Vycm9yOwogCiAgICAgLyogW3AgPGV4cG9uZW50Pl0gKi8KLSAgICBpZiAodG9sb3dlcigqcykgPT0gKGludCkncCcpIHsKKyAgICBpZiAoKnMgPT0gJ3AnIHx8ICpzID09ICdQJykgewogICAgICAgICBzKys7CiAgICAgICAgIGV4cF9zdGFydCA9IHM7CiAgICAgICAgIGlmICgqcyA9PSAnLScgfHwgKnMgPT0gJysnKQpAQCAtMTUwMSw3ICsxNjQyLDcgQEAKIAogICBmaW5pc2hlZDoKICAgICAvKiBvcHRpb25hbCB0cmFpbGluZyB3aGl0ZXNwYWNlIGxlYWRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nICovCi0gICAgd2hpbGUgKCpzICYmIGlzc3BhY2UoUHlfQ0hBUk1BU0soKnMpKSkKKyAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCiAgICAgICAgIHMrKzsKICAgICBpZiAocyAhPSBzX2VuZCkKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKQEAgLTIxMTYsMTUgKzIyNTcsMjEgQEAKICAgICAgICAgICAgICAgICAgaSsrLCBwKyspIHsKICAgICAgICAgICAgICAgICBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KHApICYmCiAgICAgICAgICAgICAgICAgICAgIFB5X1JFRkNOVChwKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgYnVmWzEwMF07Ci0gICAgICAgICAgICAgICAgICAgIFB5RmxvYXRfQXNTdHJpbmcoYnVmLCBwKTsKLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKHR3b3V0ZXJzKSBjYXN0IHJlZmNvdW50IHRvCi0gICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdW50aWwgJXpkIGlzIHVuaXZlcnNhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZQotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RmxvYXRfQVNfRE9VQkxFKHApLCAncicsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZikgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYKHR3b3V0ZXJzKSBjYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZjb3VudCB0byBsb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbCAlemQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbGx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgIiMgICA8ZmxvYXQgYXQgJXAsIHJlZmNudD0lbGQsIHZhbD0lcz5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAobG9uZylQeV9SRUZDTlQocCksIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwpAQCAtMjM0MSw3ICsyNDg4LDcgQEAKIAogICAgICAgICAvKiBFaWdodGggYnl0ZSAqLwogICAgICAgICAqcCA9IGZsbyAmIDB4RkY7Ci0gICAgICAgIHAgKz0gaW5jcjsKKyAgICAgICAgLyogcCArPSBpbmNyOyBVbm5lZWRlZCAoZm9yIG5vdykgKi8KIAogICAgICAgICAvKiBEb25lICovCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCmluZGV4IDExMjExMGMuLmEzNDc2Y2YgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnJhbWVvYmplY3QuYworKysgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKQEAgLTIwLDEyICsyMCwzOCBAQAogICAgIHsiZl9idWlsdGlucyIsICAgICAgVF9PQkpFQ1QsICAgICAgIE9GRihmX2J1aWx0aW5zKSxST30sCiAgICAgeyJmX2dsb2JhbHMiLCAgICAgICBUX09CSkVDVCwgICAgICAgT0ZGKGZfZ2xvYmFscyksIFJPfSwKICAgICB7ImZfbGFzdGkiLCAgICAgICAgIFRfSU5ULCAgICAgICAgICBPRkYoZl9sYXN0aSksICAgUk99LAotICAgIHsiZl9leGNfdHlwZSIsICAgICAgVF9PQkpFQ1QsICAgICAgIE9GRihmX2V4Y190eXBlKX0sCi0gICAgeyJmX2V4Y192YWx1ZSIsICAgICBUX09CSkVDVCwgICAgICAgT0ZGKGZfZXhjX3ZhbHVlKX0sCi0gICAgeyJmX2V4Y190cmFjZWJhY2siLCBUX09CSkVDVCwgICAgICAgT0ZGKGZfZXhjX3RyYWNlYmFjayl9LAogICAgIHtOVUxMfSAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCisjZGVmaW5lIFdBUk5fR0VUX1NFVChOQU1FKSBcCitzdGF0aWMgUHlPYmplY3QgKiBmcmFtZV9nZXRfICMjIE5BTUUoUHlGcmFtZU9iamVjdCAqZikgeyBcCisgICAgaWYgKFB5RXJyX1dhcm5QeTNrKCNOQU1FICIgaGFzIGJlZW4gcmVtb3ZlZCBpbiAzLngiLCAyKSA8IDApIFwKKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICBpZiAoZi0+TkFNRSkgeyBcCisgICAgICAgIFB5X0lOQ1JFRihmLT5OQU1FKTsgXAorICAgICAgICByZXR1cm4gZi0+TkFNRTsgXAorICAgIH0gXAorICAgIFB5X1JFVFVSTl9OT05FOyAgICAgXAorfSBcCitzdGF0aWMgaW50IGZyYW1lX3NldF8gIyMgTkFNRShQeUZyYW1lT2JqZWN0ICpmLCBQeU9iamVjdCAqbmV3KSB7IFwKKyAgICBpZiAoUHlFcnJfV2FyblB5M2soI05BTUUgIiBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIsIDIpIDwgMCkgXAorICAgICAgICByZXR1cm4gLTE7IFwKKyAgICBpZiAoZi0+TkFNRSkgeyBcCisgICAgICAgIFB5X0NMRUFSKGYtPk5BTUUpOyBcCisgICAgfSBcCisgICAgaWYgKG5ldyA9PSBQeV9Ob25lKSBcCisgICAgICAgIG5ldyA9IE5VTEw7IFwKKyAgICBQeV9YSU5DUkVGKG5ldyk7IFwKKyAgICBmLT5OQU1FID0gbmV3OyBcCisgICAgcmV0dXJuIDA7IFwKK30KKworCitXQVJOX0dFVF9TRVQoZl9leGNfdHJhY2ViYWNrKQorV0FSTl9HRVRfU0VUKGZfZXhjX3R5cGUpCitXQVJOX0dFVF9TRVQoZl9leGNfdmFsdWUpCisKKwogc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX2dldGxvY2FscyhQeUZyYW1lT2JqZWN0ICpmLCB2b2lkICpjbG9zdXJlKQogewpAQCAtMzQsMTcgKzYwLDE5IEBACiAgICAgcmV0dXJuIGYtPmZfbG9jYWxzOwogfQogCitpbnQKK1B5RnJhbWVfR2V0TGluZU51bWJlcihQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGlmIChmLT5mX3RyYWNlKQorICAgICAgICByZXR1cm4gZi0+Zl9saW5lbm87CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUHlDb2RlX0FkZHIyTGluZShmLT5mX2NvZGUsIGYtPmZfbGFzdGkpOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfZ2V0bGluZW5vKFB5RnJhbWVPYmplY3QgKmYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgaW50IGxpbmVubzsKLQotICAgIGlmIChmLT5mX3RyYWNlKQotICAgICAgICBsaW5lbm8gPSBmLT5mX2xpbmVubzsKLSAgICBlbHNlCi0gICAgICAgIGxpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKTsKLQotICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhsaW5lbm8pOworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhQeUZyYW1lX0dldExpbmVOdW1iZXIoZikpOwogfQogCiAvKiBTZXR0ZXIgZm9yIGZfbGluZW5vIC0geW91IGNhbiBzZXQgZl9saW5lbm8gZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbiBpbgpAQCAtODYsNyArMTE0LDYgQEAKICAgICBpbnQgaW5fZmluYWxseVtDT19NQVhCTE9DS1NdOyAgICAgICAvKiAoZGl0dG8pICovCiAgICAgaW50IGJsb2Nrc3RhY2tfdG9wID0gMDsgICAgICAgICAgICAgLyogKGRpdHRvKSAqLwogICAgIHVuc2lnbmVkIGNoYXIgc2V0dXBfb3AgPSAwOyAgICAgICAgIC8qIChkaXR0bykgKi8KLSAgICBjaGFyICp0bXA7CiAKICAgICAvKiBmX2xpbmVubyBtdXN0IGJlIGFuIGludGVnZXIuICovCiAgICAgaWYgKCFQeUludF9DaGVjayhwX25ld19saW5lbm8pKSB7CkBAIC0xMDAsNyArMTI3LDggQEAKICAgICBpZiAoIWYtPmZfdHJhY2UpCiAgICAgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJmX2xpbmVubyBjYW4gb25seSBiZSBzZXQgYnkgYSB0cmFjZSBmdW5jdGlvbiIpOworICAgICAgICAgICAgICAgICAgICAgImZfbGluZW5vIGNhbiBvbmx5IGJlIHNldCBieSBhIgorICAgICAgICAgICAgICAgICAgICAgIiBsaW5lIHRyYWNlIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTExMiwyMiArMTQwLDI4IEBACiAgICAgICAgICAgICAgICAgICAgICBuZXdfbGluZW5vKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQotICAgIC8qIEZpbmQgdGhlIGJ5dGVjb2RlIG9mZnNldCBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBsaW5lLCBvciB0aGUKLSAgICAgKiBmaXJzdCBjb2RlLW93bmluZyBsaW5lIGFmdGVyIGl0LiAqLwotICAgIFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShmLT5mX2NvZGUtPmNvX2xub3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCwgJmxub3RhYl9sZW4pOwotICAgIGxub3RhYiA9ICh1bnNpZ25lZCBjaGFyICopIHRtcDsKLSAgICBhZGRyID0gMDsKLSAgICBsaW5lID0gZi0+Zl9jb2RlLT5jb19maXJzdGxpbmVubzsKLSAgICBuZXdfbGFzdGkgPSAtMTsKLSAgICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxub3RhYl9sZW47IG9mZnNldCArPSAyKSB7Ci0gICAgICAgIGFkZHIgKz0gbG5vdGFiW29mZnNldF07Ci0gICAgICAgIGxpbmUgKz0gbG5vdGFiW29mZnNldCsxXTsKLSAgICAgICAgaWYgKGxpbmUgPj0gbmV3X2xpbmVubykgewotICAgICAgICAgICAgbmV3X2xhc3RpID0gYWRkcjsKLSAgICAgICAgICAgIG5ld19saW5lbm8gPSBsaW5lOwotICAgICAgICAgICAgYnJlYWs7CisgICAgZWxzZSBpZiAobmV3X2xpbmVubyA9PSBmLT5mX2NvZGUtPmNvX2ZpcnN0bGluZW5vKSB7CisgICAgICAgIG5ld19sYXN0aSA9IDA7CisgICAgICAgIG5ld19saW5lbm8gPSBmLT5mX2NvZGUtPmNvX2ZpcnN0bGluZW5vOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogRmluZCB0aGUgYnl0ZWNvZGUgb2Zmc2V0IGZvciB0aGUgc3RhcnQgb2YgdGhlIGdpdmVuCisgICAgICAgICAqIGxpbmUsIG9yIHRoZSBmaXJzdCBjb2RlLW93bmluZyBsaW5lIGFmdGVyIGl0LiAqLworICAgICAgICBjaGFyICp0bXA7CisgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZShmLT5mX2NvZGUtPmNvX2xub3RhYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXAsICZsbm90YWJfbGVuKTsKKyAgICAgICAgbG5vdGFiID0gKHVuc2lnbmVkIGNoYXIgKikgdG1wOworICAgICAgICBhZGRyID0gMDsKKyAgICAgICAgbGluZSA9IGYtPmZfY29kZS0+Y29fZmlyc3RsaW5lbm87CisgICAgICAgIG5ld19sYXN0aSA9IC0xOworICAgICAgICBmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGxub3RhYl9sZW47IG9mZnNldCArPSAyKSB7CisgICAgICAgICAgICBhZGRyICs9IGxub3RhYltvZmZzZXRdOworICAgICAgICAgICAgbGluZSArPSBsbm90YWJbb2Zmc2V0KzFdOworICAgICAgICAgICAgaWYgKGxpbmUgPj0gbmV3X2xpbmVubykgeworICAgICAgICAgICAgICAgIG5ld19sYXN0aSA9IGFkZHI7CisgICAgICAgICAgICAgICAgbmV3X2xpbmVubyA9IGxpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyOCwxNiArMzYyLDE0IEBACiBzdGF0aWMgaW50CiBmcmFtZV9zZXR0cmFjZShQeUZyYW1lT2JqZWN0ICpmLCBQeU9iamVjdCogdiwgdm9pZCAqY2xvc3VyZSkKIHsKKyAgICBQeU9iamVjdCogb2xkX3ZhbHVlOworCiAgICAgLyogV2UgcmVseSBvbiBmX2xpbmVubyBiZWluZyBhY2N1cmF0ZSB3aGVuIGZfdHJhY2UgaXMgc2V0LiAqLworICAgIGYtPmZfbGluZW5vID0gUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpOwogCi0gICAgUHlPYmplY3QqIG9sZF92YWx1ZSA9IGYtPmZfdHJhY2U7Ci0KKyAgICBvbGRfdmFsdWUgPSBmLT5mX3RyYWNlOwogICAgIFB5X1hJTkNSRUYodik7CiAgICAgZi0+Zl90cmFjZSA9IHY7Ci0KLSAgICBpZiAodiAhPSBOVUxMKQotICAgICAgICBmLT5mX2xpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKTsKLQogICAgIFB5X1hERUNSRUYob2xkX3ZhbHVlKTsKIAogICAgIHJldHVybiAwOwpAQCAtMzU1LDYgKzM4NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKWZyYW1lX3NldGxpbmVubywgTlVMTH0sCiAgICAgeyJmX3RyYWNlIiwgICAgICAgICAoZ2V0dGVyKWZyYW1lX2dldHRyYWNlLCAoc2V0dGVyKWZyYW1lX3NldHRyYWNlLCBOVUxMfSwKICAgICB7ImZfcmVzdHJpY3RlZCIsKGdldHRlcilmcmFtZV9nZXRyZXN0cmljdGVkLE5VTEwsIE5VTEx9LAorICAgIHsiZl9leGNfdHJhY2ViYWNrIiwgKGdldHRlcilmcmFtZV9nZXRfZl9leGNfdHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKWZyYW1lX3NldF9mX2V4Y190cmFjZWJhY2ssIE5VTEx9LAorICAgIHsiZl9leGNfdHlwZSIsICAoZ2V0dGVyKWZyYW1lX2dldF9mX2V4Y190eXBlLAorICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKWZyYW1lX3NldF9mX2V4Y190eXBlLCBOVUxMfSwKKyAgICB7ImZfZXhjX3ZhbHVlIiwgKGdldHRlcilmcmFtZV9nZXRfZl9leGNfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpZnJhbWVfc2V0X2ZfZXhjX3ZhbHVlLCBOVUxMfSwKICAgICB7MH0KIH07CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggN2Y2YjEyMy4uYWQwZjQyNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTQ4OSwxMyArNDg5LDE0IEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqYXJnZGVmczsKKyAgICBQeU9iamVjdCAqa3d0dXBsZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKipkLCAqKms7CiAgICAgUHlfc3NpemVfdCBuaywgbmQ7CiAKICAgICBhcmdkZWZzID0gUHlGdW5jdGlvbl9HRVRfREVGQVVMVFMoZnVuYyk7CiAgICAgaWYgKGFyZ2RlZnMgIT0gTlVMTCAmJiBQeVR1cGxlX0NoZWNrKGFyZ2RlZnMpKSB7CiAgICAgICAgIGQgPSAmUHlUdXBsZV9HRVRfSVRFTSgoUHlUdXBsZU9iamVjdCAqKWFyZ2RlZnMsIDApOwotICAgICAgICBuZCA9IFB5VHVwbGVfU2l6ZShhcmdkZWZzKTsKKyAgICAgICAgbmQgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ2RlZnMpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZCA9IE5VTEw7CkBAIC01MDUsMTYgKzUwNiwxNyBAQAogICAgIGlmIChrdyAhPSBOVUxMICYmIFB5RGljdF9DaGVjayhrdykpIHsKICAgICAgICAgUHlfc3NpemVfdCBwb3MsIGk7CiAgICAgICAgIG5rID0gUHlEaWN0X1NpemUoa3cpOwotICAgICAgICBrID0gUHlNZW1fTkVXKFB5T2JqZWN0ICosIDIqbmspOwotICAgICAgICBpZiAoayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBrd3R1cGxlID0gUHlUdXBsZV9OZXcoMipuayk7CisgICAgICAgIGlmIChrd3R1cGxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgICAgICBrID0gJlB5VHVwbGVfR0VUX0lURU0oa3d0dXBsZSwgMCk7CiAgICAgICAgIHBvcyA9IGkgPSAwOwotICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQoa3csICZwb3MsICZrW2ldLCAma1tpKzFdKSkKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGt3LCAmcG9zLCAma1tpXSwgJmtbaSsxXSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihrW2ldKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihrW2krMV0pOwogICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9CiAgICAgICAgIG5rID0gaS8yOwotICAgICAgICAvKiBYWFggVGhpcyBpcyBicm9rZW4gaWYgdGhlIGNhbGxlciBkZWxldGVzIGRpY3QgaXRlbXMhICovCiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBrID0gTlVMTDsKQEAgLTUyNCwxMiArNTI2LDExIEBACiAgICAgcmVzdWx0ID0gUHlFdmFsX0V2YWxDb2RlRXgoCiAgICAgICAgIChQeUNvZGVPYmplY3QgKilQeUZ1bmN0aW9uX0dFVF9DT0RFKGZ1bmMpLAogICAgICAgICBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpLCAoUHlPYmplY3QgKilOVUxMLAotICAgICAgICAmUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApLCBQeVR1cGxlX1NpemUoYXJnKSwKKyAgICAgICAgJlB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSwgUHlUdXBsZV9HRVRfU0laRShhcmcpLAogICAgICAgICBrLCBuaywgZCwgbmQsCiAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0NMT1NVUkUoZnVuYykpOwogCi0gICAgaWYgKGsgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fREVMKGspOworICAgIFB5X1hERUNSRUYoa3d0dXBsZSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjU4LDE3ICs2NTksMTYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoImNsYXNzbWV0aG9kIiwga3dkcykpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soY2FsbGFibGUpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICInJXMnIG9iamVjdCBpcyBub3QgY2FsbGFibGUiLAotICAgICAgICAgICAgIGNhbGxhYmxlLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQogICAgIFB5X0lOQ1JFRihjYWxsYWJsZSk7CiAgICAgY20tPmNtX2NhbGxhYmxlID0gY2FsbGFibGU7CiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU1lbWJlckRlZiBjbV9tZW1iZXJsaXN0W10gPSB7CisgICAgeyJfX2Z1bmNfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihjbGFzc21ldGhvZCwgY21fY2FsbGFibGUpLCBSRUFET05MWX0sCisgICAge05VTEx9ICAvKiBTZW50aW5lbCAqLworfTsKKwogUHlEb2NfU1RSVkFSKGNsYXNzbWV0aG9kX2RvYywKICJjbGFzc21ldGhvZChmdW5jdGlvbikgLT4gbWV0aG9kXG5cCiBcblwKQEAgLTcxOSw3ICs3MTksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBjbV9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCkBAIC04MTksNiArODE5LDExIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU1lbWJlckRlZiBzbV9tZW1iZXJsaXN0W10gPSB7CisgICAgeyJfX2Z1bmNfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihzdGF0aWNtZXRob2QsIHNtX2NhbGxhYmxlKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKIFB5RG9jX1NUUlZBUihzdGF0aWNtZXRob2RfZG9jLAogInN0YXRpY21ldGhvZChmdW5jdGlvbikgLT4gbWV0aG9kXG5cCiBcblwKQEAgLTg2Niw3ICs4NzEsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBzbV9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2ludG9iamVjdC5jIGIvT2JqZWN0cy9pbnRvYmplY3QuYwppbmRleCAwMjk4NTRmLi43ZDcwYmZiIDEwMDY0NAotLS0gYS9PYmplY3RzL2ludG9iamVjdC5jCisrKyBiL09iamVjdHMvaW50b2JqZWN0LmMKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAKIHN0YXRpYyBQeU9iamVjdCAqaW50X2ludChQeUludE9iamVjdCAqdik7CiAKQEAgLTc4LDcgKzc5LDggQEAKIHN0YXRpYyBQeUludE9iamVjdCAqc21hbGxfaW50c1tOU01BTExORUdJTlRTICsgTlNNQUxMUE9TSU5UU107CiAjZW5kaWYKICNpZmRlZiBDT1VOVF9BTExPQ1MKLWludCBxdWlja19pbnRfYWxsb2NzLCBxdWlja19uZWdfaW50X2FsbG9jczsKK1B5X3NzaXplX3QgcXVpY2tfaW50X2FsbG9jczsKK1B5X3NzaXplX3QgcXVpY2tfbmVnX2ludF9hbGxvY3M7CiAjZW5kaWYKIAogUHlPYmplY3QgKgpAQCAtMTc2LDcgKzE3OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbyk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYl9pbnQgc2hvdWxkIHJldHVybiBpbnQgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiX19pbnRfXyBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzQsNyArMjM2LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgUHlfREVDUkVGKGlvKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2ludF9fIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3OSw3ICsyODEsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmJfaW50IHNob3VsZCByZXR1cm4gaW50IG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgIl9faW50X18gbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlciIpOwogICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI0LDcgKzMyNiw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbyk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYl9pbnQgc2hvdWxkIHJldHVybiBpbnQgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiX19pbnRfXyBtZXRob2Qgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyIik7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIFBZX0xPTkdfTE9ORyktMTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzNCwxMiArNDM2LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWludF9yZXByKFB5SW50T2JqZWN0ICp2KQotewotICAgIHJldHVybiBfUHlJbnRfRm9ybWF0KHYsIDEwLCAwKTsKLX0KLQogc3RhdGljIGludAogaW50X2NvbXBhcmUoUHlJbnRPYmplY3QgKnYsIFB5SW50T2JqZWN0ICp3KQogewpAQCAtNjQ5LDE2ICs2NDUsMzUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWludF90cnVlX2RpdmlkZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCitpbnRfdHJ1ZV9kaXZpZGUoUHlJbnRPYmplY3QgKngsIFB5SW50T2JqZWN0ICp5KQogeworICAgIGxvbmcgeGksIHlpOwogICAgIC8qIElmIHRoZXkgYXJlbid0IGJvdGggaW50cywgZ2l2ZSBzb21lb25lIGVsc2UgYSBjaGFuY2UuICBJbgogICAgICAgIHBhcnRpY3VsYXIsIHRoaXMgbGV0cyBpbnQvbG9uZyBnZXQgaGFuZGxlZCBieSBsb25ncywgd2hpY2gKICAgICAgICB1bmRlcmZsb3dzIHRvIDAgZ3JhY2VmdWxseSBpZiB0aGUgbG9uZyBpcyB0b28gYmlnIHRvIGNvbnZlcnQKICAgICAgICB0byBmbG9hdC4gKi8KLSAgICBpZiAoUHlJbnRfQ2hlY2sodikgJiYgUHlJbnRfQ2hlY2sodykpCi0gICAgICAgIHJldHVybiBQeUZsb2F0X1R5cGUudHBfYXNfbnVtYmVyLT5uYl90cnVlX2RpdmlkZSh2LCB3KTsKLSAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwotICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKKyAgICBDT05WRVJUX1RPX0xPTkcoeCwgeGkpOworICAgIENPTlZFUlRfVE9fTE9ORyh5LCB5aSk7CisgICAgaWYgKHlpID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImRpdmlzaW9uIGJ5IHplcm8iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh4aSA9PSAwKQorICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHlpIDwgMCA/IC0wLjAgOiAwLjApOworCisjZGVmaW5lIFdJRFRIX09GX1VMT05HIChDSEFSX0JJVCpTSVpFT0ZfTE9ORykKKyNpZiBEQkxfTUFOVF9ESUcgPCBXSURUSF9PRl9VTE9ORworICAgIGlmICgoeGkgPj0gMCA/IDBVTCArIHhpIDogMFVMIC0geGkpID4+IERCTF9NQU5UX0RJRyB8fAorICAgICAgICAoeWkgPj0gMCA/IDBVTCArIHlpIDogMFVMIC0geWkpID4+IERCTF9NQU5UX0RJRykKKyAgICAgICAgLyogTGFyZ2UgeCBvciB5LiAgVXNlIGxvbmcgaW50ZWdlciBhcml0aG1ldGljLiAqLworICAgICAgICByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl90cnVlX2RpdmlkZSgKKyAgICAgICAgICAgIChQeU9iamVjdCAqKXgsIChQeU9iamVjdCAqKXkpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiBCb3RoIGludHMgY2FuIGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgZG91Ymxlcy4gIERvIGEKKyAgICAgICAgICAgZmxvYXRpbmctcG9pbnQgZGl2aXNpb24uICovCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoKGRvdWJsZSl4aSAvIChkb3VibGUpeWkpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtOTM5LDEyICs5NTQsNzggQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh2IC0+IG9iX2l2YWwpKTsKIH0KIAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQml0TGVuZ3RoVGFibGVbMzJdID0geworICAgIDAsIDEsIDIsIDIsIDMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNQorfTsKKworc3RhdGljIGludAorYml0c19pbl91bG9uZyh1bnNpZ25lZCBsb25nIGQpCit7CisgICAgaW50IGRfYml0cyA9IDA7CisgICAgd2hpbGUgKGQgPj0gMzIpIHsKKyAgICAgICAgZF9iaXRzICs9IDY7CisgICAgICAgIGQgPj49IDY7CisgICAgfQorICAgIGRfYml0cyArPSAoaW50KUJpdExlbmd0aFRhYmxlW2RdOworICAgIHJldHVybiBkX2JpdHM7Cit9CisKKyNpZiA4KlNJWkVPRl9MT05HLTEgPD0gREJMX01BTlRfRElHCisvKiBFdmVyeSBQeXRob24gaW50IGNhbiBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIGEgZmxvYXQuICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnRfZmxvYXQoUHlJbnRPYmplY3QgKnYpCiB7CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgoZG91YmxlKSh2IC0+IG9iX2l2YWwpKTsKIH0KIAorI2Vsc2UKKy8qIEhlcmUgbm90IGFsbCBQeXRob24gaW50cyBhcmUgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGZsb2F0cywgc28gd2UgbWF5CisgICBoYXZlIHRvIHJvdW5kLiAgV2UgZG8gdGhpcyBtYW51YWxseSwgc2luY2UgdGhlIEMgc3RhbmRhcmRzIGRvbid0IHNwZWNpZnkKKyAgIHdoZXRoZXIgY29udmVydGluZyBhbiBpbnRlZ2VyIHRvIGEgZmxvYXQgcm91bmRzIHVwIG9yIGRvd24gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2ludF9mbG9hdChQeUludE9iamVjdCAqdikKK3sKKyAgICB1bnNpZ25lZCBsb25nIGFic19pdmFsLCBsc2I7CisgICAgaW50IHJvdW5kX3VwOworCisgICAgaWYgKHYtPm9iX2l2YWwgPCAwKQorICAgICAgICBhYnNfaXZhbCA9IDBVLSh1bnNpZ25lZCBsb25nKXYtPm9iX2l2YWw7CisgICAgZWxzZQorICAgICAgICBhYnNfaXZhbCA9ICh1bnNpZ25lZCBsb25nKXYtPm9iX2l2YWw7CisgICAgaWYgKGFic19pdmFsIDwgKDFMIDw8IERCTF9NQU5UX0RJRykpCisgICAgICAgIC8qIHNtYWxsIGludGVnZXI7ICBubyBuZWVkIHRvIHJvdW5kICovCisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoKGRvdWJsZSl2LT5vYl9pdmFsKTsKKworICAgIC8qIFJvdW5kIGFic19pdmFsIHRvIE1BTlRfRElHIHNpZ25pZmljYW50IGJpdHMsIHVzaW5nIHRoZQorICAgICAgIHJvdW5kLWhhbGYtdG8tZXZlbiBydWxlLiAgYWJzX2l2YWwgJiBsc2IgcGlja3Mgb3V0IHRoZSAncm91bmRpbmcnCisgICAgICAgYml0OiB0aGUgZmlyc3QgYml0IGFmdGVyIHRoZSBtb3N0IHNpZ25pZmljYW50IE1BTlRfRElHIGJpdHMgb2YKKyAgICAgICBhYnNfaXZhbC4gIFdlIHJvdW5kIHVwIGlmIHRoaXMgYml0IGlzIHNldCwgcHJvdmlkZWQgdGhhdCBlaXRoZXI6CisKKyAgICAgICAgICgxKSBhYnNfaXZhbCBpc24ndCBleGFjdGx5IGhhbGZ3YXkgYmV0d2VlbiB0d28gZmxvYXRzLCBpbiB3aGljaAorICAgICAgICAgY2FzZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGJpdHMgZm9sbG93aW5nIHRoZSByb3VuZGluZyBiaXQgbXVzdCBiZQorICAgICAgICAgc2V0OyBpLmUuLCBhYnNfaXZhbCAmIGxzYi0xICE9IDAsIG9yOgorCisgICAgICAgICAoMikgdGhlIHJlc3VsdGluZyByb3VuZGVkIHZhbHVlIGhhcyBsZWFzdCBzaWduaWZpY2FudCBiaXQgMDsgb3IKKyAgICAgICAgIGluIG90aGVyIHdvcmRzIHRoZSBiaXQgYWJvdmUgdGhlIHJvdW5kaW5nIGJpdCBpcyBzZXQgKHRoaXMgaXMgdGhlCisgICAgICAgICAndG8tZXZlbicgYml0IG9mIHJvdW5kLWhhbGYtdG8tZXZlbik7IGkuZS4sIGFic19pdmFsICYgMipsc2IgIT0gMAorCisgICAgICAgVGhlIGNvbmRpdGlvbiAiKDEpIG9yICgyKSIgZXF1YXRlcyB0byBhYnNfaXZhbCAmIDMqbHNiLTEgIT0gMC4gKi8KKworICAgIGxzYiA9IDFMIDw8IChiaXRzX2luX3Vsb25nKGFic19pdmFsKS1EQkxfTUFOVF9ESUctMSk7CisgICAgcm91bmRfdXAgPSAoYWJzX2l2YWwgJiBsc2IpICYmIChhYnNfaXZhbCAmICgzKmxzYi0xKSk7CisgICAgYWJzX2l2YWwgJj0gLTIqbHNiOworICAgIGlmIChyb3VuZF91cCkKKyAgICAgICAgYWJzX2l2YWwgKz0gMipsc2I7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh2LT5vYl9pdmFsIDwgMCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKGRvdWJsZSlhYnNfaXZhbCA6CisgICAgICAgICAgICAgICAgICAoZG91YmxlKWFic19pdmFsKTsKK30KKworI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnRfb2N0KFB5SW50T2JqZWN0ICp2KQogewpAQCAtMTA0OCw4ICsxMTI5LDMzIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pbnRfZ2V0TihQeUludE9iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgewotICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygoUHlfaW50cHRyX3QpY29udGV4dCk7CitpbnRfZ2V0MChQeUludE9iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgeworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygwTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbnRfZ2V0MShQeUludE9iamVjdCAqdiwgdm9pZCAqY29udGV4dCkgeworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygxTCk7Cit9CisKKy8qIENvbnZlcnQgYW4gaW50ZWdlciB0byBhIGRlY2ltYWwgc3RyaW5nLiAgT24gbWFueSBwbGF0Zm9ybXMsIHRoaXMKKyAgIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgZ2VuZXJhbCBhcmJpdHJhcnktYmFzZQorICAgY29udmVyc2lvbiBtYWNoaW5lcnkgaW4gX1B5SW50X0Zvcm1hdCwgdGhhbmtzIHRvIG9wdGltaXphdGlvbgorICAgb3Bwb3J0dW5pdGllcyBvZmZlcmVkIGJ5IGRpdmlzaW9uIGJ5IGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiAqLworc3RhdGljIFB5T2JqZWN0ICoKK2ludF90b19kZWNpbWFsX3N0cmluZyhQeUludE9iamVjdCAqdikgeworICAgIGNoYXIgYnVmW3NpemVvZihsb25nKSpDSEFSX0JJVC8zKzZdLCAqcCwgKmJ1ZmVuZDsKKyAgICBsb25nIG4gPSB2LT5vYl9pdmFsOworICAgIHVuc2lnbmVkIGxvbmcgYWJzbjsKKyAgICBwID0gYnVmZW5kID0gYnVmICsgc2l6ZW9mKGJ1Zik7CisgICAgYWJzbiA9IG4gPCAwID8gMFVMIC0gbiA6IG47CisgICAgZG8geworICAgICAgICAqLS1wID0gJzAnICsgKGNoYXIpKGFic24gJSAxMCk7CisgICAgICAgIGFic24gLz0gMTA7CisgICAgfSB3aGlsZSAoYWJzbik7CisgICAgaWYgKG4gPCAwKQorICAgICAgICAqLS1wID0gJy0nOworICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShwLCBidWZlbmQgLSBwKTsKIH0KIAogLyogQ29udmVydCBhbiBpbnRlZ2VyIHRvIHRoZSBnaXZlbiBiYXNlLiAgUmV0dXJucyBhIHN0cmluZy4KQEAgLTEwNzYsNiArMTE4MiwxMCBAQAogCiAgICAgYXNzZXJ0KGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTsKIAorICAgIC8qIFNwZWNpYWwgY2FzZSBiYXNlIDEwLCBmb3Igc3BlZWQgKi8KKyAgICBpZiAoYmFzZSA9PSAxMCkKKyAgICAgICAgcmV0dXJuIGludF90b19kZWNpbWFsX3N0cmluZyh2KTsKKwogICAgIGRvIHsKICAgICAgICAgLyogSSdkIHVzZSBpX2Rpdm1vZCwgZXhjZXB0IGl0IGRvZXNuJ3QgcHJvZHVjZSB0aGUgcmVzdWx0cwogICAgICAgICAgICBJIHdhbnQgd2hlbiBuIGlzIG5lZ2F0aXZlLiAgU28ganVzdCBkdXBsaWNhdGUgdGhlIHNhbGllbnQKQEAgLTExMDgsNyArMTIxOCw3IEBACiAgICAgICAgICotLXAgPSAneCc7CiAgICAgICAgICotLXAgPSAnMCc7CiAgICAgfQotICAgIGVsc2UgaWYgKGJhc2UgIT0gMTApIHsKKyAgICBlbHNlIHsKICAgICAgICAgKi0tcCA9ICcjJzsKICAgICAgICAgKi0tcCA9ICcwJyArIGJhc2UlMTA7CiAgICAgICAgIGlmIChiYXNlID4gMTApCkBAIC0xMTUwLDYgKzEyNjAsMjkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2ludF9iaXRfbGVuZ3RoKFB5SW50T2JqZWN0ICp2KQoreworICAgIHVuc2lnbmVkIGxvbmcgbjsKKworICAgIGlmICh2LT5vYl9pdmFsIDwgMCkKKyAgICAgICAgLyogYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW91ciB3aGVuIHYtPm9iX2l2YWwgPT0gLUxPTkdfTUFYLTEgKi8KKyAgICAgICAgbiA9IDBVLSh1bnNpZ25lZCBsb25nKXYtPm9iX2l2YWw7CisgICAgZWxzZQorICAgICAgICBuID0gKHVuc2lnbmVkIGxvbmcpdi0+b2JfaXZhbDsKKworICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhiaXRzX2luX3Vsb25nKG4pKTsKK30KKworUHlEb2NfU1RSVkFSKGludF9iaXRfbGVuZ3RoX2RvYywKKyJpbnQuYml0X2xlbmd0aCgpIC0+IGludFxuXAorXG5cCitOdW1iZXIgb2YgYml0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHNlbGYgaW4gYmluYXJ5LlxuXAorPj4+IGJpbigzNylcblwKKycwYjEwMDEwMSdcblwKKz4+PiAoMzcpLmJpdF9sZW5ndGgoKVxuXAorNiIpOworCiAjaWYgMAogc3RhdGljIFB5T2JqZWN0ICoKIGludF9pc19maW5pdGUoUHlPYmplY3QgKnYpCkBAIC0xMTYxLDYgKzEyOTQsOCBAQAogc3RhdGljIFB5TWV0aG9kRGVmIGludF9tZXRob2RzW10gPSB7CiAgICAgeyJjb25qdWdhdGUiLCAgICAgICAoUHlDRnVuY3Rpb24paW50X2ludCwgICBNRVRIX05PQVJHUywKICAgICAgIlJldHVybnMgc2VsZiwgdGhlIGNvbXBsZXggY29uanVnYXRlIG9mIGFueSBpbnQuIn0sCisgICAgeyJiaXRfbGVuZ3RoIiwgKFB5Q0Z1bmN0aW9uKWludF9iaXRfbGVuZ3RoLCBNRVRIX05PQVJHUywKKyAgICAgaW50X2JpdF9sZW5ndGhfZG9jfSwKICNpZiAwCiAgICAgeyJpc19maW5pdGUiLCAgICAgICAoUHlDRnVuY3Rpb24paW50X2lzX2Zpbml0ZSwgICAgIE1FVEhfTk9BUkdTLAogICAgICAiUmV0dXJucyBhbHdheXMgVHJ1ZS4ifSwKQEAgLTExNzgsMTcgKzEzMTMsMTcgQEAKICAgICAgInRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciIsCiAgICAgIE5VTEx9LAogICAgIHsiaW1hZyIsCi0gICAgIChnZXR0ZXIpaW50X2dldE4sIChzZXR0ZXIpTlVMTCwKKyAgICAgKGdldHRlcilpbnRfZ2V0MCwgKHNldHRlcilOVUxMLAogICAgICAidGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIiLAotICAgICAodm9pZCopMH0sCisgICAgIE5VTEx9LAogICAgIHsibnVtZXJhdG9yIiwKICAgICAgKGdldHRlcilpbnRfaW50LCAoc2V0dGVyKU5VTEwsCiAgICAgICJ0aGUgbnVtZXJhdG9yIG9mIGEgcmF0aW9uYWwgbnVtYmVyIGluIGxvd2VzdCB0ZXJtcyIsCiAgICAgIE5VTEx9LAogICAgIHsiZGVub21pbmF0b3IiLAotICAgICAoZ2V0dGVyKWludF9nZXROLCAoc2V0dGVyKU5VTEwsCisgICAgIChnZXR0ZXIpaW50X2dldDEsIChzZXR0ZXIpTlVMTCwKICAgICAgInRoZSBkZW5vbWluYXRvciBvZiBhIHJhdGlvbmFsIG51bWJlciBpbiBsb3dlc3QgdGVybXMiLAotICAgICAodm9pZCopMX0sCisgICAgIE5VTEx9LAogICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTEyMzksNyArMTM3NCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfaW5wbGFjZV94b3IqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX2lucGxhY2Vfb3IqLwogICAgIChiaW5hcnlmdW5jKWludF9kaXYsICAgICAgICAvKiBuYl9mbG9vcl9kaXZpZGUgKi8KLSAgICBpbnRfdHJ1ZV9kaXZpZGUsICAgICAgICAgICAgLyogbmJfdHJ1ZV9kaXZpZGUgKi8KKyAgICAoYmluYXJ5ZnVuYylpbnRfdHJ1ZV9kaXZpZGUsIC8qIG5iX3RydWVfZGl2aWRlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfZmxvb3JfZGl2aWRlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGUgKi8KICAgICAodW5hcnlmdW5jKWludF9pbnQsICAgICAgICAgLyogbmJfaW5kZXggKi8KQEAgLTEyNTUsMTMgKzEzOTAsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAoY21wZnVuYylpbnRfY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KLSAgICAocmVwcmZ1bmMpaW50X3JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpaW50X3RvX2RlY2ltYWxfc3RyaW5nLCAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KICAgICAmaW50X2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KICAgICAoaGFzaGZ1bmMpaW50X2hhc2gsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KLSAgICAocmVwcmZ1bmMpaW50X3JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIChyZXByZnVuYylpbnRfdG9fZGVjaW1hbF9zdHJpbmcsICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9saXN0b2JqZWN0LmMgYi9PYmplY3RzL2xpc3RvYmplY3QuYwppbmRleCBhNWJhY2YzLi45NzA0ZDhkIDEwMDY0NAotLS0gYS9PYmplY3RzL2xpc3RvYmplY3QuYworKysgYi9PYmplY3RzL2xpc3RvYmplY3QuYwpAQCAtMTgzLDkgKzE4MywxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShvcCkpIHsKLSAgICAgICAgaWYgKGluZGV4ZXJyID09IE5VTEwpCisgICAgICAgIGlmIChpbmRleGVyciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpbmRleGVyciA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoCiAgICAgICAgICAgICAgICAgImxpc3QgaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBpZiAoaW5kZXhlcnIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfSW5kZXhFcnJvciwgaW5kZXhlcnIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00NDcsOSArNDUwLDEyIEBACiBsaXN0X2l0ZW0oUHlMaXN0T2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewotICAgICAgICBpZiAoaW5kZXhlcnIgPT0gTlVMTCkKKyAgICAgICAgaWYgKGluZGV4ZXJyID09IE5VTEwpIHsKICAgICAgICAgICAgIGluZGV4ZXJyID0gUHlTdHJpbmdfRnJvbVN0cmluZygKICAgICAgICAgICAgICAgICAibGlzdCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVyciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19JbmRleEVycm9yLCBpbmRleGVycik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTIyNzAsNyArMjI3Niw4IEBACiBsaXN0aW5kZXgoUHlMaXN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGksIHN0YXJ0PTAsIHN0b3A9UHlfU0laRShzZWxmKTsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdiwgKmZvcm1hdF90dXBsZSwgKmVycl9zdHJpbmc7CisgICAgc3RhdGljIFB5T2JqZWN0ICplcnJfZm9ybWF0ID0gTlVMTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPJk8mOmluZGV4IiwgJnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUV2YWxfU2xpY2VJbmRleCwgJnN0YXJ0LApAQCAtMjI5Myw3ICsyMzAwLDIwIEBACiAgICAgICAgIGVsc2UgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJsaXN0LmluZGV4KHgpOiB4IG5vdCBpbiBsaXN0Iik7CisgICAgaWYgKGVycl9mb3JtYXQgPT0gTlVMTCkgeworICAgICAgICBlcnJfZm9ybWF0ID0gUHlTdHJpbmdfRnJvbVN0cmluZygiJXIgaXMgbm90IGluIGxpc3QiKTsKKyAgICAgICAgaWYgKGVycl9mb3JtYXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3JtYXRfdHVwbGUgPSBQeVR1cGxlX1BhY2soMSwgdik7CisgICAgaWYgKGZvcm1hdF90dXBsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlcnJfc3RyaW5nID0gUHlTdHJpbmdfRm9ybWF0KGVycl9mb3JtYXQsIGZvcm1hdF90dXBsZSk7CisgICAgUHlfREVDUkVGKGZvcm1hdF90dXBsZSk7CisgICAgaWYgKGVycl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIGVycl9zdHJpbmcpOworICAgIFB5X0RFQ1JFRihlcnJfc3RyaW5nKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0IGIvT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDdlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL2xub3RhYl9ub3Rlcy50eHQKQEAgLTAsMCArMSwxMjQgQEAKK0FsbCBhYm91dCBjb19sbm90YWIsIHRoZSBsaW5lIG51bWJlciB0YWJsZS4KKworQ29kZSBvYmplY3RzIHN0b3JlIGEgZmllbGQgbmFtZWQgY29fbG5vdGFiLiAgVGhpcyBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBieXRlcworZGlzZ3Vpc2VkIGFzIGEgUHl0aG9uIHN0cmluZy4gIEl0IGlzIHVzZWQgdG8gbWFwIGJ5dGVjb2RlIG9mZnNldHMgdG8gc291cmNlIGNvZGUKK2xpbmUgI3MgZm9yIHRyYWNlYmFja3MgYW5kIHRvIGlkZW50aWZ5IGxpbmUgbnVtYmVyIGJvdW5kYXJpZXMgZm9yIGxpbmUgdHJhY2luZy4KKworVGhlIGFycmF5IGlzIGNvbmNlcHR1YWxseSBhIGNvbXByZXNzZWQgbGlzdCBvZgorICAgIChieXRlY29kZSBvZmZzZXQgaW5jcmVtZW50LCBsaW5lIG51bWJlciBpbmNyZW1lbnQpCitwYWlycy4gIFRoZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgYW5kIGRlbGljYXRlLCBiZXN0IGlsbHVzdHJhdGVkIGJ5IGV4YW1wbGU6CisKKyAgICBieXRlIGNvZGUgb2Zmc2V0ICAgIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIDAJCSAgICAxCisgICAgICAgIDYJCSAgICAyCisgICAgICAgNTAJCSAgICA3CisgICAgICAzNTAgICAgICAgICAgICAgICAgIDMwNworICAgICAgMzYxICAgICAgICAgICAgICAgICAzMDgKKworSW5zdGVhZCBvZiBzdG9yaW5nIHRoZXNlIG51bWJlcnMgbGl0ZXJhbGx5LCB3ZSBjb21wcmVzcyB0aGUgbGlzdCBieSBzdG9yaW5nIG9ubHkKK3RoZSBpbmNyZW1lbnRzIGZyb20gb25lIHJvdyB0byB0aGUgbmV4dC4gIENvbmNlcHR1YWxseSwgdGhlIHN0b3JlZCBsaXN0IG1pZ2h0Citsb29rIGxpa2U6CisKKyAgICAwLCAxLCAgNiwgMSwgIDQ0LCA1LCAgMzAwLCAzMDAsICAxMSwgMQorCitUaGUgYWJvdmUgZG9lc24ndCByZWFsbHkgd29yaywgYnV0IGl0J3MgYSBzdGFydC4gTm90ZSB0aGF0IGFuIHVuc2lnbmVkIGJ5dGUKK2Nhbid0IGhvbGQgbmVnYXRpdmUgdmFsdWVzLCBvciB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1LCBhbmQgdGhlIGFib3ZlIGV4YW1wbGUKK2NvbnRhaW5zIHR3byBzdWNoIHZhbHVlcy4gU28gd2UgbWFrZSB0d28gdHdlYWtzOgorCisgKGEpIHRoZXJlJ3MgYSBkZWVwIGFzc3VtcHRpb24gdGhhdCBieXRlIGNvZGUgb2Zmc2V0cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZworIGxpbmUgI3MgYm90aCBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LCBhbmQKKyAoYikgaWYgYXQgbGVhc3Qgb25lIGNvbHVtbiBqdW1wcyBieSBtb3JlIHRoYW4gMjU1IGZyb20gb25lIHJvdyB0byB0aGUgbmV4dCwKKyBtb3JlIHRoYW4gb25lIHBhaXIgaXMgd3JpdHRlbiB0byB0aGUgdGFibGUuIEluIGNhc2UgI2IsIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKKyBmcm9tIGxvb2tpbmcgYXQgdGhlIHRhYmxlIGxhdGVyIGhvdyBtYW55IHdlcmUgd3JpdHRlbi4gIFRoYXQncyB0aGUgZGVsaWNhdGUKKyBwYXJ0LiAgQSB1c2VyIG9mIGNvX2xub3RhYiBkZXNpcmluZyB0byBmaW5kIHRoZSBzb3VyY2UgbGluZSBudW1iZXIKKyBjb3JyZXNwb25kaW5nIHRvIGEgYnl0ZWNvZGUgYWRkcmVzcyBBIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzCisKKyAgICBsaW5lbm8gPSBhZGRyID0gMAorICAgIGZvciBhZGRyX2luY3IsIGxpbmVfaW5jciBpbiBjb19sbm90YWI6CisgICAgICAgIGFkZHIgKz0gYWRkcl9pbmNyCisgICAgICAgIGlmIGFkZHIgPiBBOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVubworICAgICAgICBsaW5lbm8gKz0gbGluZV9pbmNyCisKKyhJbiBDLCB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IFB5Q29kZV9BZGRyMkxpbmUoKS4pICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLAord2hlbiB0aGUgYWRkciBmaWVsZCBpbmNyZW1lbnRzIGJ5IG1vcmUgdGhhbiAyNTUsIHRoZSBsaW5lICMgaW5jcmVtZW50IGluIGVhY2gKK3BhaXIgZ2VuZXJhdGVkIG11c3QgYmUgMCB1bnRpbCB0aGUgcmVtYWluaW5nIGFkZHIgaW5jcmVtZW50IGlzIDwgMjU2LiAgU28sIGluCit0aGUgZXhhbXBsZSBhYm92ZSwgYXNzZW1ibGVfbG5vdGFiIGluIGNvbXBpbGUuYyBzaG91bGQgbm90IChhcyB3YXMgYWN0dWFsbHkgZG9uZQordW50aWwgMi4yKSBleHBhbmQgMzAwLCAzMDAgdG8KKyAgICAyNTUsIDI1NSwgNDUsIDQ1LAorYnV0IHRvCisgICAgMjU1LCAwLCA0NSwgMjU1LCAwLCA0NS4KKworVGhlIGFib3ZlIGlzIHN1ZmZpY2llbnQgdG8gcmVjb25zdHJ1Y3QgbGluZSBudW1iZXJzIGZvciB0cmFjZWJhY2tzLCBidXQgbm90IGZvcgorbGluZSB0cmFjaW5nLiAgVHJhY2luZyBpcyBoYW5kbGVkIGJ5IFB5Q29kZV9DaGVja0xpbmVOdW1iZXIoKSBpbiBjb2Rlb2JqZWN0LmMKK2FuZCBtYXliZV9jYWxsX2xpbmVfdHJhY2UoKSBpbiBjZXZhbC5jLgorCisqKiogVHJhY2luZyAqKioKKworVG8gYSBmaXJzdCBhcHByb3hpbWF0aW9uLCB3ZSB3YW50IHRvIGNhbGwgdGhlIHRyYWNpbmcgZnVuY3Rpb24gd2hlbiB0aGUgbGluZQorbnVtYmVyIG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGNoYW5nZXMuICBSZS1jb21wdXRpbmcgdGhlIGN1cnJlbnQgbGluZSBmb3IKK2V2ZXJ5IGluc3RydWN0aW9uIGlzIGEgbGl0dGxlIHNsb3csIHRob3VnaCwgc28gZWFjaCB0aW1lIHdlIGNvbXB1dGUgdGhlIGxpbmUKK251bWJlciB3ZSBzYXZlIHRoZSBieXRlY29kZSBpbmRpY2VzIHdoZXJlIGl0J3MgdmFsaWQ6CisKKyAgICAgKmluc3RyX2xiIDw9IGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX3ViCisKK2lzIHRydWUgc28gbG9uZyBhcyBleGVjdXRpb24gZG9lcyBub3QgY2hhbmdlIGxpbmVzLiAgVGhhdCBpcywgKmluc3RyX2xiIGhvbGRzCit0aGUgZmlyc3QgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgbGluZSwgYW5kICppbnN0cl91YiBob2xkcyB0aGUgZmlyc3QKK2J5dGVjb2RlIGluZGV4IG9mIHRoZSBuZXh0IGxpbmUuICBBcyBsb25nIGFzIHRoZSBhYm92ZSBleHByZXNzaW9uIGlzIHRydWUsCittYXliZV9jYWxsX2xpbmVfdHJhY2UoKSBkb2VzIG5vdCBuZWVkIHRvIGNhbGwgUHlDb2RlX0NoZWNrTGluZU51bWJlcigpLiAgTm90ZQordGhhdCB0aGUgc2FtZSBsaW5lIG1heSBhcHBlYXIgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGxub3RhYiwgZWl0aGVyIGJlY2F1c2UgdGhlCitieXRlY29kZSBqdW1wZWQgbW9yZSB0aGFuIDI1NSBpbmRpY2VzIGJldHdlZW4gbGluZSBudW1iZXIgY2hhbmdlcyBvciBiZWNhdXNlCit0aGUgY29tcGlsZXIgaW5zZXJ0ZWQgdGhlIHNhbWUgbGluZSB0d2ljZS4gIEV2ZW4gaW4gdGhhdCBjYXNlLCAqaW5zdHJfdWIgaG9sZHMKK3RoZSBmaXJzdCBpbmRleCBvZiB0aGUgbmV4dCBsaW5lLgorCitIb3dldmVyLCB3ZSBkb24ndCAqYWx3YXlzKiB3YW50IHRvIGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24gd2hlbiB0aGUgYWJvdmUKK3Rlc3QgZmFpbHMuCisKK0NvbnNpZGVyIHRoaXMgY29kZToKKworMTogZGVmIGYoYSk6CisyOiAgICB3aGlsZSBhOgorMzogICAgICAgcHJpbnQgMSwKKzQ6ICAgICAgIGJyZWFrCis1OiAgICBlbHNlOgorNjogICAgICAgcHJpbnQgMiwKKword2hpY2ggY29tcGlsZXMgdG8gdGhpczoKKworICAyICAgICAgICAgICAwIFNFVFVQX0xPT1AgICAgICAgICAgICAgIDE5ICh0byAyMikKKyAgICAgICAgPj4gICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoYSkKKyAgICAgICAgICAgICAgNiBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICAxNworCisgIDMgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgMTIgUFJJTlRfSVRFTSAgICAgICAgICAKKworICA0ICAgICAgICAgIDEzIEJSRUFLX0xPT1AgICAgICAgICAgCisgICAgICAgICAgICAgMTQgSlVNUF9BQlNPTFVURSAgICAgICAgICAgIDMKKyAgICAgICAgPj4gICAxNyBQT1BfQkxPQ0sgICAgICAgICAgIAorCisgIDYgICAgICAgICAgMTggTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDIpCisgICAgICAgICAgICAgMjEgUFJJTlRfSVRFTSAgICAgICAgICAKKyAgICAgICAgPj4gICAyMiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICAyNSBSRVRVUk5fVkFMVUUgICAgICAgIAorCitJZiAnYScgaXMgZmFsc2UsIGV4ZWN1dGlvbiB3aWxsIGp1bXAgdG8gdGhlIFBPUF9CTE9DSyBpbnN0cnVjdGlvbiBhdCBvZmZzZXQgMTcKK2FuZCB0aGUgY29fbG5vdGFiIHdpbGwgY2xhaW0gdGhhdCBleGVjdXRpb24gaGFzIG1vdmVkIHRvIGxpbmUgNCwgd2hpY2ggaXMgd3JvbmcuCitJbiB0aGlzIGNhc2UsIHdlIGNvdWxkIGluc3RlYWQgYXNzb2NpYXRlIHRoZSBQT1BfQkxPQ0sgd2l0aCBsaW5lIDUsIGJ1dCB0aGF0Cit3b3VsZCBicmVhayBqdW1wcyBhcm91bmQgbG9vcHMgd2l0aG91dCBlbHNlIGNsYXVzZXMuCisKK1dlIGZpeCB0aGlzIGJ5IG9ubHkgY2FsbGluZyB0aGUgbGluZSB0cmFjZSBmdW5jdGlvbiBmb3IgYSBmb3J3YXJkIGp1bXAgaWYgdGhlCitjb19sbm90YWIgaW5kaWNhdGVzIHdlIGhhdmUganVtcGVkIHRvIHRoZSAqc3RhcnQqIG9mIGEgbGluZSwgaS5lLiBpZiB0aGUgY3VycmVudAoraW5zdHJ1Y3Rpb24gb2Zmc2V0IG1hdGNoZXMgdGhlIG9mZnNldCBnaXZlbiBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSBieSB0aGUKK2NvX2xub3RhYi4gIEZvciBiYWNrd2FyZCBqdW1wcywgaG93ZXZlciwgd2UgYWx3YXlzIGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24sCit3aGljaCBsZXRzIGEgZGVidWdnZXIgc3RvcCBvbiBldmVyeSBldmFsdWF0aW9uIG9mIGEgbG9vcCBndWFyZCAod2hpY2ggdXN1YWxseQord29uJ3QgYmUgdGhlIGZpcnN0IG9wY29kZSBpbiBhIGxpbmUpLgorCitXaHkgZG8gd2Ugc2V0IGZfbGluZW5vIHdoZW4gdHJhY2luZywgYW5kIG9ubHkganVzdCBiZWZvcmUgY2FsbGluZyB0aGUgdHJhY2UKK2Z1bmN0aW9uPyAgV2VsbCwgY29uc2lkZXIgdGhlIGNvZGUgYWJvdmUgd2hlbiAnYScgaXMgdHJ1ZS4gIElmIHN0ZXBwaW5nIHRocm91Z2gKK3RoaXMgd2l0aCAnbicgaW4gcGRiLCB5b3Ugd291bGQgc3RvcCBhdCBsaW5lIDEgd2l0aCBhICJjYWxsIiB0eXBlIGV2ZW50LCB0aGVuCitsaW5lIGV2ZW50cyBvbiBsaW5lcyAyLCAzLCBhbmQgNCwgdGhlbiBhICJyZXR1cm4iIHR5cGUgZXZlbnQgLS0gYnV0IGJlY2F1c2UgdGhlCitjb2RlIGZvciB0aGUgcmV0dXJuIGFjdHVhbGx5IGZhbGxzIGluIHRoZSByYW5nZSBvZiB0aGUgImxpbmUgNiIgb3Bjb2RlcywgeW91Cit3b3VsZCBiZSBzaG93biBsaW5lIDYgZHVyaW5nIHRoaXMgZXZlbnQuICBUaGlzIGlzIGEgY2hhbmdlIGZyb20gdGhlIGJlaGF2aW91ciBpbgorMi4yIGFuZCBiZWZvcmUsIGFuZCBJJ3ZlIGZvdW5kIGl0IGNvbmZ1c2luZyBpbiBwcmFjdGljZS4gIEJ5IHNldHRpbmcgYW5kIHVzaW5nCitmX2xpbmVubyB3aGVuIHRyYWNpbmcsIG9uZSBjYW4gcmVwb3J0IGEgbGluZSBudW1iZXIgZGlmZmVyZW50IGZyb20gdGhhdAorc3VnZ2VzdGVkIGJ5IGZfbGFzdGkgb24gdGhpcyBvbmUgb2NjYXNpb24gd2hlcmUgaXQncyBkZXNpcmFibGUuCmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IGU2ZWRiNGYuLmZiZDE4YTIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC0xLDEzICsxLDE0IEBACi0KLQogLyogTG9uZyAoYXJiaXRyYXJ5IHByZWNpc2lvbikgaW50ZWdlciBvYmplY3QgaW1wbGVtZW50YXRpb24gKi8KIAogLyogWFhYIFRoZSBmdW5jdGlvbmFsIG9yZ2FuaXphdGlvbiBvZiB0aGlzIGZpbGUgaXMgdGVycmlibGUgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgImxvbmdpbnRyZXByLmgiCisjaW5jbHVkZSAic3RydWN0c2VxLmgiCiAKKyNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CiAKIC8qIEZvciBsb25nIG11bHRpcGxpY2F0aW9uLCB1c2UgdGhlIE8oTioqMikgc2Nob29sIGFsZ29yaXRobSB1bmxlc3MKICAqIGJvdGggb3BlcmFuZHMgY29udGFpbiBtb3JlIHRoYW4gS0FSQVRTVUJBX0NVVE9GRiBkaWdpdHMgKHRoaXMKQEAgLTMwLDE3ICszMSwxMyBAQAogI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKICNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPiAoeSkgPyAoeSkgOiAoeCkpCiAKLS8qIEZvcndhcmQgKi8KLXN0YXRpYyBQeUxvbmdPYmplY3QgKmxvbmdfbm9ybWFsaXplKFB5TG9uZ09iamVjdCAqKTsKLXN0YXRpYyBQeUxvbmdPYmplY3QgKm11bDEoUHlMb25nT2JqZWN0ICosIHdkaWdpdCk7Ci1zdGF0aWMgUHlMb25nT2JqZWN0ICptdWxhZGQxKFB5TG9uZ09iamVjdCAqLCB3ZGlnaXQsIHdkaWdpdCk7Ci1zdGF0aWMgUHlMb25nT2JqZWN0ICpkaXZyZW0xKFB5TG9uZ09iamVjdCAqLCBkaWdpdCwgZGlnaXQgKik7Ci0KLSNkZWZpbmUgU0lHQ0hFQ0soUHlUcnlCbG9jaykgXAotICAgIGlmICgtLV9QeV9UaWNrZXIgPCAwKSB7IFwKLSAgICAgICAgX1B5X1RpY2tlciA9IF9QeV9DaGVja0ludGVydmFsOyBcCi0gICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayBcCi0gICAgfQorI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKC0tX1B5X1RpY2tlciA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX1B5X1RpY2tlciA9IF9QeV9DaGVja0ludGVydmFsOyAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIFB5VHJ5QmxvY2sgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogLyogTm9ybWFsaXplIChyZW1vdmUgbGVhZGluZyB6ZXJvcyBmcm9tKSBhIGxvbmcgaW50IG9iamVjdC4KICAgIERvZXNuJ3QgYXR0ZW1wdCB0byBmcmVlIHRoZSBzdG9yYWdlLS1pbiBtb3N0IGNhc2VzLCBkdWUgdG8gdGhlIG5hdHVyZQpAQCAtNjIsMTYgKzU5LDIwIEBACiAvKiBBbGxvY2F0ZSBhIG5ldyBsb25nIGludCBvYmplY3Qgd2l0aCBzaXplIGRpZ2l0cy4KICAgIFJldHVybiBOVUxMIGFuZCBzZXQgZXhjZXB0aW9uIGlmIHdlIHJ1biBvdXQgb2YgbWVtb3J5LiAqLwogCisjZGVmaW5lIE1BWF9MT05HX0RJR0lUUyBcCisgICAgKChQWV9TU0laRV9UX01BWCAtIG9mZnNldG9mKFB5TG9uZ09iamVjdCwgb2JfZGlnaXQpKS9zaXplb2YoZGlnaXQpKQorCiBQeUxvbmdPYmplY3QgKgogX1B5TG9uZ19OZXcoUHlfc3NpemVfdCBzaXplKQogewotICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVgpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBpZiAoc2l6ZSA+IChQeV9zc2l6ZV90KU1BWF9MT05HX0RJR0lUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbWFueSBkaWdpdHMgaW4gaW50ZWdlciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogY292ZXJpdHlbYW1wZXJzYW5kX2luX3NpemVdICovCi0gICAgLyogWFhYKG5ub3J3aXR6KTogVGhpcyBjYW4gb3ZlcmZsb3cgLS0KLSAgICAgICBQeU9iamVjdF9ORVdfVkFSIC8gX1B5T2JqZWN0X1ZBUl9TSVpFIG5lZWQgdG8gZGV0ZWN0IG92ZXJmbG93ICovCisgICAgLyogWFhYKG5ub3J3aXR6KTogUHlPYmplY3RfTkVXX1ZBUiAvIF9QeU9iamVjdF9WQVJfU0laRSBuZWVkIHRvIGRldGVjdAorICAgICAgIG92ZXJmbG93ICovCiAgICAgcmV0dXJuIFB5T2JqZWN0X05FV19WQVIoUHlMb25nT2JqZWN0LCAmUHlMb25nX1R5cGUsIHNpemUpOwogfQogCkBAIC0xNzYsMTIgKzE3NywxMiBAQAogICAgIG5lZyA9IDA7CiAgICAgaWYgKFB5X0lTX0lORklOSVRZKGR2YWwpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGZsb2F0IGluZmluaXR5IHRvIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY29udmVydCBmbG9hdCBpbmZpbml0eSB0byBpbnRlZ2VyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoUHlfSVNfTkFOKGR2YWwpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGZsb2F0IE5hTiB0byBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgZmxvYXQgTmFOIHRvIGludGVnZXIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChkdmFsIDwgMC4wKSB7CkBAIC0xOTcsOCArMTk4LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZnJhYyA9IGxkZXhwKGZyYWMsIChleHBvLTEpICUgUHlMb25nX1NISUZUICsgMSk7CiAgICAgZm9yIChpID0gbmRpZzsgLS1pID49IDA7ICkgewotICAgICAgICBsb25nIGJpdHMgPSAobG9uZylmcmFjOwotICAgICAgICB2LT5vYl9kaWdpdFtpXSA9IChkaWdpdCkgYml0czsKKyAgICAgICAgZGlnaXQgYml0cyA9IChkaWdpdClmcmFjOworICAgICAgICB2LT5vYl9kaWdpdFtpXSA9IGJpdHM7CiAgICAgICAgIGZyYWMgPSBmcmFjIC0gKGRvdWJsZSliaXRzOwogICAgICAgICBmcmFjID0gbGRleHAoZnJhYywgUHlMb25nX1NISUZUKTsKICAgICB9CkBAIC0yMTksNTMgKzIyMCwxMjMgQEAKICNkZWZpbmUgUFlfQUJTX0xPTkdfTUlOICAgICAgICAgKDAtKHVuc2lnbmVkIGxvbmcpTE9OR19NSU4pCiAjZGVmaW5lIFBZX0FCU19TU0laRV9UX01JTiAgICAgICgwLShzaXplX3QpUFlfU1NJWkVfVF9NSU4pCiAKLS8qIEdldCBhIEMgbG9uZyBpbnQgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4KLSAgIFJldHVybnMgLTEgYW5kIHNldHMgYW4gZXJyb3IgY29uZGl0aW9uIGlmIG92ZXJmbG93IG9jY3Vycy4gKi8KKy8qIEdldCBhIEMgbG9uZyBpbnQgZnJvbSBhIFB5dGhvbiBsb25nIG9yIFB5dGhvbiBpbnQgb2JqZWN0LgorICAgT24gb3ZlcmZsb3csIHJldHVybnMgLTEgYW5kIHNldHMgKm92ZXJmbG93IHRvIDEgb3IgLTEgZGVwZW5kaW5nCisgICBvbiB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0LiAgT3RoZXJ3aXNlICpvdmVyZmxvdyBpcyAwLgorCisgICBGb3Igb3RoZXIgZXJyb3JzIChlLmcuLCB0eXBlIGVycm9yKSwgcmV0dXJucyAtMSBhbmQgc2V0cyBhbiBlcnJvcgorICAgY29uZGl0aW9uLgorKi8KIAogbG9uZwotUHlMb25nX0FzTG9uZyhQeU9iamVjdCAqdnYpCitQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnZ2LCBpbnQgKm92ZXJmbG93KQogewogICAgIC8qIFRoaXMgdmVyc2lvbiBieSBUaW0gUGV0ZXJzICovCiAgICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKKyAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CisgICAgaW50IGRvX2RlY3JlZiA9IDA7IC8qIGlmIG5iX2ludCB3YXMgY2FsbGVkICovCiAKLSAgICBpZiAodnYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHZ2KSkgewotICAgICAgICBpZiAodnYgIT0gTlVMTCAmJiBQeUludF9DaGVjayh2dikpCi0gICAgICAgICAgICByZXR1cm4gUHlJbnRfQXNMb25nKHZ2KTsKKyAgICAqb3ZlcmZsb3cgPSAwOworICAgIGlmICh2diA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHYgPSAoUHlMb25nT2JqZWN0ICopdnY7Ci0gICAgaSA9IHYtPm9iX3NpemU7Ci0gICAgc2lnbiA9IDE7Ci0gICAgeCA9IDA7Ci0gICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgIHNpZ24gPSAtMTsKLSAgICAgICAgaSA9IC0oaSk7Ci0gICAgfQotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICBwcmV2ID0geDsKLSAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKLSAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikKLSAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgfQotICAgIC8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gbG9uZyByZXF1aXJlcyBleHRyYSBjYXJlCi0gICAgICogKHNlZSBjb21tZW50IGFib3ZlKS4KLSAgICAgKi8KLSAgICBpZiAoeCA8PSAodW5zaWduZWQgbG9uZylMT05HX01BWCkgewotICAgICAgICByZXR1cm4gKGxvbmcpeCAqIHNpZ247Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpZ24gPCAwICYmIHggPT0gUFlfQUJTX0xPTkdfTUlOKSB7Ci0gICAgICAgIHJldHVybiBMT05HX01JTjsKLSAgICB9Ci0gICAgLyogZWxzZSBvdmVyZmxvdyAqLwogCi0gb3ZlcmZsb3c6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBpbnQiKTsKLSAgICByZXR1cm4gLTE7CisgICAgaWYoUHlJbnRfQ2hlY2sodnYpKQorICAgICAgICByZXR1cm4gUHlJbnRfQXNMb25nKHZ2KTsKKworICAgIGlmICghUHlMb25nX0NoZWNrKHZ2KSkgeworICAgICAgICBQeU51bWJlck1ldGhvZHMgKm5iOworICAgICAgICBuYiA9IHZ2LT5vYl90eXBlLT50cF9hc19udW1iZXI7CisgICAgICAgIGlmIChuYiA9PSBOVUxMIHx8IG5iLT5uYl9pbnQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHZ2ID0gKCpuYi0+bmJfaW50KSAodnYpOworICAgICAgICBpZiAodnYgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZG9fZGVjcmVmID0gMTsKKyAgICAgICAgaWYoUHlJbnRfQ2hlY2sodnYpKSB7CisgICAgICAgICAgICByZXMgPSBQeUludF9Bc0xvbmcodnYpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHZ2KSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHZ2KTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlcyA9IC0xOworICAgIHYgPSAoUHlMb25nT2JqZWN0ICopdnY7CisgICAgaSA9IFB5X1NJWkUodik7CisKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICByZXMgPSAtKHNkaWdpdCl2LT5vYl9kaWdpdFswXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICByZXMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHJlcyA9IHYtPm9iX2RpZ2l0WzBdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzaWduID0gMTsKKyAgICAgICAgeCA9IDA7CisgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgc2lnbiA9IC0xOworICAgICAgICAgICAgaSA9IC0oaSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgICAgICAgICBwcmV2ID0geDsKKyAgICAgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CisgICAgICAgICAgICAgICAgKm92ZXJmbG93ID0gc2lnbjsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgY2FzdGluZyB0byBsb25nIHJlcXVpcmVzIGV4dHJhCisgICAgICAgICAqIGNhcmUgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICAgICAgICovCisgICAgICAgIGlmICh4IDw9ICh1bnNpZ25lZCBsb25nKUxPTkdfTUFYKSB7CisgICAgICAgICAgICByZXMgPSAobG9uZyl4ICogc2lnbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaWduIDwgMCAmJiB4ID09IFBZX0FCU19MT05HX01JTikgeworICAgICAgICAgICAgcmVzID0gTE9OR19NSU47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAqb3ZlcmZsb3cgPSBzaWduOworICAgICAgICAgICAgLyogcmVzIGlzIGFscmVhZHkgc2V0IHRvIC0xICovCisgICAgICAgIH0KKyAgICB9CisgIGV4aXQ6CisgICAgaWYgKGRvX2RlY3JlZikgeworICAgICAgICBQeV9ERUNSRUYodnYpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisvKiBHZXQgYSBDIGxvbmcgaW50IGZyb20gYSBsb25nIGludCBvYmplY3QuCisgICBSZXR1cm5zIC0xIGFuZCBzZXRzIGFuIGVycm9yIGNvbmRpdGlvbiBpZiBvdmVyZmxvdyBvY2N1cnMuICovCisKK2xvbmcKK1B5TG9uZ19Bc0xvbmcoUHlPYmplY3QgKm9iaikKK3sKKyAgICBpbnQgb3ZlcmZsb3c7CisgICAgbG9uZyByZXN1bHQgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2JqLCAmb3ZlcmZsb3cpOworICAgIGlmIChvdmVyZmxvdykgeworICAgICAgICAvKiBYWFg6IGNvdWxkIGJlIGN1dGUgYW5kIGdpdmUgYSBkaWZmZXJlbnQKKyAgICAgICAgICAgbWVzc2FnZSBmb3Igb3ZlcmZsb3cgPT0gLTEgKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBDIGxvbmciKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogR2V0IGEgUHlfc3NpemVfdCBmcm9tIGEgbG9uZyBpbnQgb2JqZWN0LgpAQCAtMjkyLDcgKzM2Myw3IEBACiAgICAgfQogICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICAgICBwcmV2ID0geDsKLSAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKKyAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikKICAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CiAgICAgfQpAQCAtMzA3LDcgKzM3OCw3IEBACiAgICAgfQogICAgIC8qIGVsc2Ugb3ZlcmZsb3cgKi8KIAotIG92ZXJmbG93OgorICBvdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGludCIpOwogICAgIHJldHVybiAtMTsKQEAgLTMyOCw3ICszOTksOCBAQAogICAgICAgICAgICAgbG9uZyB2YWwgPSBQeUludF9Bc0xvbmcodnYpOwogICAgICAgICAgICAgaWYgKHZhbCA8IDApIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAiY2FuJ3QgY29udmVydCBuZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIHZhbHVlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHZhbDsKQEAgLTM0MSwxNSArNDEzLDE1IEBACiAgICAgeCA9IDA7CiAgICAgaWYgKGkgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIHZhbHVlIHRvIHVuc2lnbmVkIGxvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIHZhbHVlIHRvIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtMTsKICAgICB9CiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIHByZXYgPSB4OwotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAibG9uZyBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uZyBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQiKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODIsNyArNDU0LDcgQEAKICAgICAgICAgaSA9IC1pOwogICAgIH0KICAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKKyAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICB9CiAgICAgcmV0dXJuIHggKiBzaWduOwogfQpAQCAtNDI0LDcgKzQ5Niw3IEBACiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAKLU92ZXJmbG93OgorICBPdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgImxvbmcgaGFzIHRvbyBtYW55IGJpdHMgIgogICAgICAgICAgICAgICAgICAgICAidG8gZXhwcmVzcyBpbiBhIHBsYXRmb3JtIHNpemVfdCIpOwogICAgIHJldHVybiAoc2l6ZV90KS0xOwpAQCAtNDM0LDEzICs1MDYsMTMgQEAKIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcywgc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpdHRsZV9lbmRpYW4sIGludCBpc19zaWduZWQpCiB7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogcHN0YXJ0Ynl0ZTsvKiBMU0Igb2YgYnl0ZXMgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwc3RhcnRieXRlOyAgICAvKiBMU0Igb2YgYnl0ZXMgKi8KICAgICBpbnQgaW5jcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkaXJlY3Rpb24gdG8gbW92ZSBwc3RhcnRieXRlICovCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcGVuZGJ5dGU7ICAgICAgLyogTVNCIG9mIGJ5dGVzICovCiAgICAgc2l6ZV90IG51bXNpZ25pZmljYW50Ynl0ZXM7ICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF0dGVyICovCi0gICAgc2l6ZV90IG5kaWdpdHM7ICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIFB5dGhvbiBsb25nIGRpZ2l0cyAqLworICAgIFB5X3NzaXplX3QgbmRpZ2l0czsgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBQeXRob24gbG9uZyBkaWdpdHMgKi8KICAgICBQeUxvbmdPYmplY3QqIHY7ICAgICAgICAgICAgICAgICAgICAvKiByZXN1bHQgKi8KLSAgICBpbnQgaWRpZ2l0ID0gMDsgICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IGZyZWUgaW5kZXggaW4gdi0+b2JfZGlnaXQgKi8KKyAgICBQeV9zc2l6ZV90IGlkaWdpdCA9IDA7ICAgICAgICAgICAgICAvKiBuZXh0IGZyZWUgaW5kZXggaW4gdi0+b2JfZGlnaXQgKi8KIAogICAgIGlmIChuID09IDApCiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMEwpOwpAQCAtNDgzLDEyICs1NTUsMTYgQEAKICAgICB9CiAKICAgICAvKiBIb3cgbWFueSBQeXRob24gbG9uZyBkaWdpdHMgZG8gd2UgbmVlZD8gIFdlIGhhdmUKLSAgICAgICA4Km51bXNpZ25pZmljYW50Ynl0ZXMgYml0cywgYW5kIGVhY2ggUHl0aG9uIGxvbmcgZGlnaXQgaGFzIFB5TG9uZ19TSElGVAotICAgICAgIGJpdHMsIHNvIGl0J3MgdGhlIGNlaWxpbmcgb2YgdGhlIHF1b3RpZW50LiAqLworICAgICAgIDgqbnVtc2lnbmlmaWNhbnRieXRlcyBiaXRzLCBhbmQgZWFjaCBQeXRob24gbG9uZyBkaWdpdCBoYXMKKyAgICAgICBQeUxvbmdfU0hJRlQgYml0cywgc28gaXQncyB0aGUgY2VpbGluZyBvZiB0aGUgcXVvdGllbnQuICovCisgICAgLyogY2F0Y2ggb3ZlcmZsb3cgYmVmb3JlIGl0IGhhcHBlbnMgKi8KKyAgICBpZiAobnVtc2lnbmlmaWNhbnRieXRlcyA+IChQWV9TU0laRV9UX01BWCAtIFB5TG9uZ19TSElGVCkgLyA4KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGUgYXJyYXkgdG9vIGxvbmcgdG8gY29udmVydCB0byBpbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG5kaWdpdHMgPSAobnVtc2lnbmlmaWNhbnRieXRlcyAqIDggKyBQeUxvbmdfU0hJRlQgLSAxKSAvIFB5TG9uZ19TSElGVDsKLSAgICBpZiAobmRpZ2l0cyA+IChzaXplX3QpSU5UX01BWCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgdiA9IF9QeUxvbmdfTmV3KChpbnQpbmRpZ2l0cyk7CisgICAgdiA9IF9QeUxvbmdfTmV3KG5kaWdpdHMpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01MTcsNyArNTkzLDcgQEAKICAgICAgICAgICAgIGFjY3VtYml0cyArPSA4OwogICAgICAgICAgICAgaWYgKGFjY3VtYml0cyA+PSBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSdzIGVub3VnaCB0byBmaWxsIGEgUHl0aG9uIGRpZ2l0LiAqLwotICAgICAgICAgICAgICAgIGFzc2VydChpZGlnaXQgPCAoaW50KW5kaWdpdHMpOworICAgICAgICAgICAgICAgIGFzc2VydChpZGlnaXQgPCBuZGlnaXRzKTsKICAgICAgICAgICAgICAgICB2LT5vYl9kaWdpdFtpZGlnaXRdID0gKGRpZ2l0KShhY2N1bSAmIFB5TG9uZ19NQVNLKTsKICAgICAgICAgICAgICAgICArK2lkaWdpdDsKICAgICAgICAgICAgICAgICBhY2N1bSA+Pj0gUHlMb25nX1NISUZUOwpAQCAtNTI3LDcgKzYwMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgYXNzZXJ0KGFjY3VtYml0cyA8IFB5TG9uZ19TSElGVCk7CiAgICAgICAgIGlmIChhY2N1bWJpdHMpIHsKLSAgICAgICAgICAgIGFzc2VydChpZGlnaXQgPCAoaW50KW5kaWdpdHMpOworICAgICAgICAgICAgYXNzZXJ0KGlkaWdpdCA8IG5kaWdpdHMpOwogICAgICAgICAgICAgdi0+b2JfZGlnaXRbaWRpZ2l0XSA9IChkaWdpdClhY2N1bTsKICAgICAgICAgICAgICsraWRpZ2l0OwogICAgICAgICB9CkBAIC01NDMsOSArNjE5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaW50IGxpdHRsZV9lbmRpYW4sIGludCBpc19zaWduZWQpCiB7CiAgICAgUHlfc3NpemVfdCBpOyAgICAgICAgICAgICAgIC8qIGluZGV4IGludG8gdi0+b2JfZGlnaXQgKi8KLSAgICBQeV9zc2l6ZV90IG5kaWdpdHM7ICAgICAgICAgICAgICAgICAvKiB8di0+b2Jfc2l6ZXwgKi8KKyAgICBQeV9zc2l6ZV90IG5kaWdpdHM7ICAgICAgICAgLyogfHYtPm9iX3NpemV8ICovCiAgICAgdHdvZGlnaXRzIGFjY3VtOyAgICAgICAgICAgIC8qIHNsaWRpbmcgcmVnaXN0ZXIgKi8KLSAgICB1bnNpZ25lZCBpbnQgYWNjdW1iaXRzOyAvKiAjIGJpdHMgaW4gYWNjdW0gKi8KKyAgICB1bnNpZ25lZCBpbnQgYWNjdW1iaXRzOyAgICAgLyogIyBiaXRzIGluIGFjY3VtICovCiAgICAgaW50IGRvX3R3b3NfY29tcDsgICAgICAgICAgIC8qIHN0b3JlIDIncy1jb21wPyAgaXNfc2lnbmVkIGFuZCB2IDwgMCAqLwogICAgIGRpZ2l0IGNhcnJ5OyAgICAgICAgICAgICAgICAvKiBmb3IgY29tcHV0aW5nIDIncy1jb21wICovCiAgICAgc2l6ZV90IGo7ICAgICAgICAgICAgICAgICAgIC8qICMgYnl0ZXMgZmlsbGVkICovCkBAIC01NTcsOCArNjMzLDggQEAKICAgICBpZiAoUHlfU0laRSh2KSA8IDApIHsKICAgICAgICAgbmRpZ2l0cyA9IC0oUHlfU0laRSh2KSk7CiAgICAgICAgIGlmICghaXNfc2lnbmVkKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIGxvbmcgdG8gdW5zaWduZWQiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIGxvbmcgdG8gdW5zaWduZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBkb190d29zX2NvbXAgPSAxOwpAQCAtNjA0LDggKzY4MCw3IEBACiAgICAgICAgICAgICAvKiBDb3VudCAjIG9mIHNpZ24gYml0cyAtLSB0aGV5IG5lZWRuJ3QgYmUgc3RvcmVkLAogICAgICAgICAgICAgICogYWx0aG91Z2ggZm9yIHNpZ25lZCBjb252ZXJzaW9uIHdlIG5lZWQgbGF0ZXIgdG8KICAgICAgICAgICAgICAqIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgc2lnbiBiaXQgZ2V0cyBzdG9yZWQuICovCi0gICAgICAgICAgICBkaWdpdCBzID0gZG9fdHdvc19jb21wID8gdGhpc2RpZ2l0IF4gUHlMb25nX01BU0sgOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpc2RpZ2l0OworICAgICAgICAgICAgZGlnaXQgcyA9IGRvX3R3b3NfY29tcCA/IHRoaXNkaWdpdCBeIFB5TG9uZ19NQVNLIDogdGhpc2RpZ2l0OwogICAgICAgICAgICAgd2hpbGUgKHMgIT0gMCkgewogICAgICAgICAgICAgICAgIHMgPj49IDE7CiAgICAgICAgICAgICAgICAgYWNjdW1iaXRzKys7CkBAIC02NjUsOTcgKzc0MCwxMiBAQAogCiAgICAgcmV0dXJuIDA7CiAKLU92ZXJmbG93OgorICBPdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgImxvbmcgdG9vIGJpZyB0byBjb252ZXJ0Iik7CiAgICAgcmV0dXJuIC0xOwogCiB9CiAKLWRvdWJsZQotX1B5TG9uZ19Bc1NjYWxlZERvdWJsZShQeU9iamVjdCAqdnYsIGludCAqZXhwb25lbnQpCi17Ci0vKiBOQklUU19XQU5URUQgc2hvdWxkIGJlID4gdGhlIG51bWJlciBvZiBiaXRzIGluIGEgZG91YmxlJ3MgcHJlY2lzaW9uLAotICAgYnV0IHNtYWxsIGVub3VnaCBzbyB0aGF0IDIqKk5CSVRTX1dBTlRFRCBpcyB3aXRoaW4gdGhlIG5vcm1hbCBkb3VibGUKLSAgIHJhbmdlLiAgbmJpdHNuZWVkZWQgaXMgc2V0IHRvIDEgbGVzcyB0aGFuIHRoYXQgYmVjYXVzZSB0aGUgbW9zdC1zaWduaWZpY2FudAotICAgUHl0aG9uIGRpZ2l0IGNvbnRhaW5zIGF0IGxlYXN0IDEgc2lnbmlmaWNhbnQgYml0LCBidXQgd2UgZG9uJ3Qgd2FudCB0bwotICAgYm90aGVyIGNvdW50aW5nIHRoZW0gKGNhdGVyaW5nIHRvIHRoZSB3b3JzdCBjYXNlIGNoZWFwbHkpLgotCi0gICA1NyBpcyBvbmUgbW9yZSB0aGFuIFZBWC1EIGRvdWJsZSBwcmVjaXNpb247IEkgKFRpbSkgZG9uJ3Qga25vdyBvZiBhIGRvdWJsZQotICAgZm9ybWF0IHdpdGggbW9yZSBwcmVjaXNpb24gdGhhbiB0aGF0OyBpdCdzIDEgbGFyZ2VyIHNvIHRoYXQgd2UgYWRkIGluIGF0Ci0gICBsZWFzdCBvbmUgcm91bmQgYml0IHRvIHN0YW5kIGluIGZvciB0aGUgaWdub3JlZCBsZWFzdC1zaWduaWZpY2FudCBiaXRzLgotKi8KLSNkZWZpbmUgTkJJVFNfV0FOVEVEIDU3Ci0gICAgUHlMb25nT2JqZWN0ICp2OwotICAgIGRvdWJsZSB4OwotICAgIGNvbnN0IGRvdWJsZSBtdWx0aXBsaWVyID0gKGRvdWJsZSkoMUwgPDwgUHlMb25nX1NISUZUKTsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IHNpZ247Ci0gICAgaW50IG5iaXRzbmVlZGVkOwotCi0gICAgaWYgKHZ2ID09IE5VTEwgfHwgIVB5TG9uZ19DaGVjayh2dikpIHsKLSAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgdiA9IChQeUxvbmdPYmplY3QgKil2djsKLSAgICBpID0gUHlfU0laRSh2KTsKLSAgICBzaWduID0gMTsKLSAgICBpZiAoaSA8IDApIHsKLSAgICAgICAgc2lnbiA9IC0xOwotICAgICAgICBpID0gLShpKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICpleHBvbmVudCA9IDA7Ci0gICAgICAgIHJldHVybiAwLjA7Ci0gICAgfQotICAgIC0taTsKLSAgICB4ID0gKGRvdWJsZSl2LT5vYl9kaWdpdFtpXTsKLSAgICBuYml0c25lZWRlZCA9IE5CSVRTX1dBTlRFRCAtIDE7Ci0gICAgLyogSW52YXJpYW50OiAgaSBQeXRob24gZGlnaXRzIHJlbWFpbiB1bmFjY291bnRlZCBmb3IuICovCi0gICAgd2hpbGUgKGkgPiAwICYmIG5iaXRzbmVlZGVkID4gMCkgewotICAgICAgICAtLWk7Ci0gICAgICAgIHggPSB4ICogbXVsdGlwbGllciArIChkb3VibGUpdi0+b2JfZGlnaXRbaV07Ci0gICAgICAgIG5iaXRzbmVlZGVkIC09IFB5TG9uZ19TSElGVDsKLSAgICB9Ci0gICAgLyogVGhlcmUgYXJlIGkgZGlnaXRzIHdlIGRpZG4ndCBzaGlmdCBpbi4gIFByZXRlbmRpbmcgdGhleSdyZSBhbGwKLSAgICAgICB6ZXJvZXMsIHRoZSB0cnVlIHZhbHVlIGlzIHggKiAyKiooaSpQeUxvbmdfU0hJRlQpLiAqLwotICAgICpleHBvbmVudCA9IGk7Ci0gICAgYXNzZXJ0KHggPiAwLjApOwotICAgIHJldHVybiB4ICogc2lnbjsKLSN1bmRlZiBOQklUU19XQU5URUQKLX0KLQotLyogR2V0IGEgQyBkb3VibGUgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4gKi8KLQotZG91YmxlCi1QeUxvbmdfQXNEb3VibGUoUHlPYmplY3QgKnZ2KQotewotICAgIGludCBlID0gLTE7Ci0gICAgZG91YmxlIHg7Ci0KLSAgICBpZiAodnYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHZ2KSkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICB4ID0gX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSh2diwgJmUpOwotICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIC0xLjA7Ci0gICAgLyogJ2UnIGluaXRpYWxpemVkIHRvIC0xIHRvIHNpbGVuY2UgZ2NjLTQuMC54LCBidXQgaXQgc2hvdWxkIGJlCi0gICAgICAgc2V0IGNvcnJlY3RseSBhZnRlciBhIHN1Y2Nlc3NmdWwgX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSgpIGNhbGwgKi8KLSAgICBhc3NlcnQoZSA+PSAwKTsKLSAgICBpZiAoZSA+IElOVF9NQVggLyBQeUxvbmdfU0hJRlQpCi0gICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgZXJybm8gPSAwOwotICAgIHggPSBsZGV4cCh4LCBlICogUHlMb25nX1NISUZUKTsKLSAgICBpZiAoUHlfT1ZFUkZMT1dFRCh4KSkKLSAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICByZXR1cm4geDsKLQotb3ZlcmZsb3c6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOwotICAgIHJldHVybiAtMS4wOwotfQotCiAvKiBDcmVhdGUgYSBuZXcgbG9uZyAob3IgaW50KSBvYmplY3QgZnJvbSBhIEMgcG9pbnRlciAqLwogCiBQeU9iamVjdCAqCkBAIC04MzAsNiArODIwLDcgQEAKICAqLwogCiAjZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gKGludCkqKHVuc2lnbmVkIGNoYXIqKSZvbmUKKyNkZWZpbmUgUFlfQUJTX0xMT05HX01JTiAoMC0odW5zaWduZWQgUFlfTE9OR19MT05HKVBZX0xMT05HX01JTikKIAogLyogQ3JlYXRlIGEgbmV3IGxvbmcgaW50IG9iamVjdCBmcm9tIGEgQyBQWV9MT05HX0xPTkcgaW50LiAqLwogCkBAIC05MDgsOSArODk5LDggQEAKIHsKICAgICBQeV9zc2l6ZV90IGJ5dGVzID0gaXZhbDsKICAgICBpbnQgb25lID0gMTsKLSAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX1NJWkVfVCwgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgodW5zaWduZWQgY2hhciAqKSZieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9TSVpFX1QsIElTX0xJVFRMRV9FTkRJQU4sIDEpOwogfQogCiAvKiBDcmVhdGUgYSBuZXcgbG9uZyBpbnQgb2JqZWN0IGZyb20gYSBDIHNpemVfdC4gKi8KQEAgLTkyMCw5ICs5MTAsOCBAQAogewogICAgIHNpemVfdCBieXRlcyA9IGl2YWw7CiAgICAgaW50IG9uZSA9IDE7Ci0gICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgIFNJWkVPRl9TSVpFX1QsIElTX0xJVFRMRV9FTkRJQU4sIDApOworICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfU0laRV9ULCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKIH0KIAogLyogR2V0IGEgQyBQWV9MT05HX0xPTkcgaW50IGZyb20gYSBsb25nIGludCBvYmplY3QuCkBAIC05NjcsOSArOTU2LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoCi0gICAgICAgICAgICAgICAgICAgIChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDEpOworICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDEpOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC05OTMsOSArOTgxLDggQEAKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpLTE7CiAgICAgfQogCi0gICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTEwMjgsMTAgKzEwMTUsMTEzIEBACiAgICAgICAgIGkgPSAtaTsKICAgICB9CiAgICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpIHwgdi0+b2JfZGlnaXRbaV07CiAgICAgfQogICAgIHJldHVybiB4ICogc2lnbjsKIH0KKworLyogR2V0IGEgQyBsb25nIGxvbmcgaW50IGZyb20gYSBQeXRob24gbG9uZyBvciBQeXRob24gaW50IG9iamVjdC4KKyAgIE9uIG92ZXJmbG93LCByZXR1cm5zIC0xIGFuZCBzZXRzICpvdmVyZmxvdyB0byAxIG9yIC0xIGRlcGVuZGluZworICAgb24gdGhlIHNpZ24gb2YgdGhlIHJlc3VsdC4gIE90aGVyd2lzZSAqb3ZlcmZsb3cgaXMgMC4KKworICAgRm9yIG90aGVyIGVycm9ycyAoZS5nLiwgdHlwZSBlcnJvciksIHJldHVybnMgLTEgYW5kIHNldHMgYW4gZXJyb3IKKyAgIGNvbmRpdGlvbi4KKyovCisKK1BZX0xPTkdfTE9ORworUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCit7CisgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KKyAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHgsIHByZXY7CisgICAgUFlfTE9OR19MT05HIHJlczsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpZ247CisgICAgaW50IGRvX2RlY3JlZiA9IDA7IC8qIGlmIG5iX2ludCB3YXMgY2FsbGVkICovCisKKyAgICAqb3ZlcmZsb3cgPSAwOworICAgIGlmICh2diA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKFB5SW50X0NoZWNrKHZ2KSkKKyAgICAgICAgcmV0dXJuIFB5SW50X0FzTG9uZyh2dik7CisKKyAgICBpZiAoIVB5TG9uZ19DaGVjayh2dikpIHsKKyAgICAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKKyAgICAgICAgbmIgPSB2di0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOworICAgICAgICBpZiAobmIgPT0gTlVMTCB8fCBuYi0+bmJfaW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB2diA9ICgqbmItPm5iX2ludCkgKHZ2KTsKKyAgICAgICAgaWYgKHZ2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGRvX2RlY3JlZiA9IDE7CisgICAgICAgIGlmKFB5SW50X0NoZWNrKHZ2KSkgeworICAgICAgICAgICAgcmVzID0gUHlJbnRfQXNMb25nKHZ2KTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2dikpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2dik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYl9pbnQgc2hvdWxkIHJldHVybiBpbnQgb2JqZWN0Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXMgPSAtMTsKKyAgICB2ID0gKFB5TG9uZ09iamVjdCAqKXZ2OworICAgIGkgPSBQeV9TSVpFKHYpOworCisgICAgc3dpdGNoIChpKSB7CisgICAgY2FzZSAtMToKKyAgICAgICAgcmVzID0gLShzZGlnaXQpdi0+b2JfZGlnaXRbMF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgICAgcmVzID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICByZXMgPSB2LT5vYl9kaWdpdFswXTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc2lnbiA9IDE7CisgICAgICAgIHggPSAwOworICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgIHNpZ24gPSAtMTsKKyAgICAgICAgICAgIGkgPSAtKGkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgtLWkgPj0gMCkgeworICAgICAgICAgICAgcHJldiA9IHg7CisgICAgICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikgeworICAgICAgICAgICAgICAgICpvdmVyZmxvdyA9IHNpZ247CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gbG9uZyByZXF1aXJlcyBleHRyYQorICAgICAgICAgKiBjYXJlIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAgICAgICAqLworICAgICAgICBpZiAoeCA8PSAodW5zaWduZWQgUFlfTE9OR19MT05HKVBZX0xMT05HX01BWCkgeworICAgICAgICAgICAgcmVzID0gKFBZX0xPTkdfTE9ORyl4ICogc2lnbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaWduIDwgMCAmJiB4ID09IFBZX0FCU19MTE9OR19NSU4pIHsKKyAgICAgICAgICAgIHJlcyA9IFBZX0xMT05HX01JTjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICpvdmVyZmxvdyA9IHNpZ247CisgICAgICAgICAgICAvKiByZXMgaXMgYWxyZWFkeSBzZXQgdG8gLTEgKi8KKyAgICAgICAgfQorICAgIH0KKyAgZXhpdDoKKyAgICBpZiAoZG9fZGVjcmVmKSB7CisgICAgICAgIFB5X0RFQ1JFRih2dik7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKICN1bmRlZiBJU19MSVRUTEVfRU5ESUFOCiAKICNlbmRpZiAvKiBIQVZFX0xPTkdfTE9ORyAqLwpAQCAtMTA2MywxMSArMTE1MywzMyBAQAogICAgIHJldHVybiAxOwogfQogCi0jZGVmaW5lIENPTlZFUlRfQklOT1AodiwgdywgYSwgYikgXAotICAgIGlmICghY29udmVydF9iaW5vcCh2LCB3LCBhLCBiKSkgeyBcCi0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7IFwKLSAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOyBcCisjZGVmaW5lIENPTlZFUlRfQklOT1AodiwgdywgYSwgYikgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghY29udmVydF9iaW5vcCh2LCB3LCBhLCBiKSkgeyAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOyAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7ICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKy8qIGJpdHNfaW5fZGlnaXQoZCkgcmV0dXJucyB0aGUgdW5pcXVlIGludGVnZXIgayBzdWNoIHRoYXQgMioqKGstMSkgPD0gZCA8CisgICAyKiprIGlmIGQgaXMgbm9uemVybywgZWxzZSAwLiAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBCaXRMZW5ndGhUYWJsZVszMl0gPSB7CisgICAgMCwgMSwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1Cit9OworCitzdGF0aWMgaW50CitiaXRzX2luX2RpZ2l0KGRpZ2l0IGQpCit7CisgICAgaW50IGRfYml0cyA9IDA7CisgICAgd2hpbGUgKGQgPj0gMzIpIHsKKyAgICAgICAgZF9iaXRzICs9IDY7CisgICAgICAgIGQgPj49IDY7CiAgICAgfQorICAgIGRfYml0cyArPSAoaW50KUJpdExlbmd0aFRhYmxlW2RdOworICAgIHJldHVybiBkX2JpdHM7Cit9CiAKIC8qIHhbMDptXSBhbmQgeVswOm5dIGFyZSBkaWdpdCB2ZWN0b3JzLCBMU0QgZmlyc3QsIG0gPj0gbiByZXF1aXJlZC4gIHhbMDpuXQogICogaXMgbW9kaWZpZWQgaW4gcGxhY2UsIGJ5IGFkZGluZyB5IHRvIGl0LiAgQ2FycmllcyBhcmUgcHJvcGFnYXRlZCBhcyBmYXIgYXMKQEAgLTExMjEsMzMgKzEyMzMsNDEgQEAKICAgICByZXR1cm4gYm9ycm93OwogfQogCi0vKiBNdWx0aXBseSBieSBhIHNpbmdsZSBkaWdpdCwgaWdub3JpbmcgdGhlIHNpZ24uICovCi0KLXN0YXRpYyBQeUxvbmdPYmplY3QgKgotbXVsMShQeUxvbmdPYmplY3QgKmEsIHdkaWdpdCBuKQorLyogU2hpZnQgZGlnaXQgdmVjdG9yIGFbMDptXSBkIGJpdHMgbGVmdCwgd2l0aCAwIDw9IGQgPCBQeUxvbmdfU0hJRlQuICBQdXQKKyAqIHJlc3VsdCBpbiB6WzA6bV0sIGFuZCByZXR1cm4gdGhlIGQgYml0cyBzaGlmdGVkIG91dCBvZiB0aGUgdG9wLgorICovCitzdGF0aWMgZGlnaXQKK3ZfbHNoaWZ0KGRpZ2l0ICp6LCBkaWdpdCAqYSwgUHlfc3NpemVfdCBtLCBpbnQgZCkKIHsKLSAgICByZXR1cm4gbXVsYWRkMShhLCBuLCAoZGlnaXQpMCk7CisgICAgUHlfc3NpemVfdCBpOworICAgIGRpZ2l0IGNhcnJ5ID0gMDsKKworICAgIGFzc2VydCgwIDw9IGQgJiYgZCA8IFB5TG9uZ19TSElGVCk7CisgICAgZm9yIChpPTA7IGkgPCBtOyBpKyspIHsKKyAgICAgICAgdHdvZGlnaXRzIGFjYyA9ICh0d29kaWdpdHMpYVtpXSA8PCBkIHwgY2Fycnk7CisgICAgICAgIHpbaV0gPSAoZGlnaXQpYWNjICYgUHlMb25nX01BU0s7CisgICAgICAgIGNhcnJ5ID0gKGRpZ2l0KShhY2MgPj4gUHlMb25nX1NISUZUKTsKKyAgICB9CisgICAgcmV0dXJuIGNhcnJ5OwogfQogCi0vKiBNdWx0aXBseSBieSBhIHNpbmdsZSBkaWdpdCBhbmQgYWRkIGEgc2luZ2xlIGRpZ2l0LCBpZ25vcmluZyB0aGUgc2lnbi4gKi8KLQotc3RhdGljIFB5TG9uZ09iamVjdCAqCi1tdWxhZGQxKFB5TG9uZ09iamVjdCAqYSwgd2RpZ2l0IG4sIHdkaWdpdCBleHRyYSkKKy8qIFNoaWZ0IGRpZ2l0IHZlY3RvciBhWzA6bV0gZCBiaXRzIHJpZ2h0LCB3aXRoIDAgPD0gZCA8IFB5TG9uZ19TSElGVC4gIFB1dAorICogcmVzdWx0IGluIHpbMDptXSwgYW5kIHJldHVybiB0aGUgZCBiaXRzIHNoaWZ0ZWQgb3V0IG9mIHRoZSBib3R0b20uCisgKi8KK3N0YXRpYyBkaWdpdAordl9yc2hpZnQoZGlnaXQgKnosIGRpZ2l0ICphLCBQeV9zc2l6ZV90IG0sIGludCBkKQogewotICAgIFB5X3NzaXplX3Qgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOwotICAgIFB5TG9uZ09iamVjdCAqeiA9IF9QeUxvbmdfTmV3KHNpemVfYSsxKTsKLSAgICB0d29kaWdpdHMgY2FycnkgPSBleHRyYTsKICAgICBQeV9zc2l6ZV90IGk7CisgICAgZGlnaXQgY2FycnkgPSAwOworICAgIGRpZ2l0IG1hc2sgPSAoKGRpZ2l0KTEgPDwgZCkgLSAxVTsKIAotICAgIGlmICh6ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2E7ICsraSkgewotICAgICAgICBjYXJyeSArPSAodHdvZGlnaXRzKWEtPm9iX2RpZ2l0W2ldICogbjsKLSAgICAgICAgei0+b2JfZGlnaXRbaV0gPSAoZGlnaXQpIChjYXJyeSAmIFB5TG9uZ19NQVNLKTsKLSAgICAgICAgY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICBhc3NlcnQoMCA8PSBkICYmIGQgPCBQeUxvbmdfU0hJRlQpOworICAgIGZvciAoaT1tOyBpLS0gPiAwOykgeworICAgICAgICB0d29kaWdpdHMgYWNjID0gKHR3b2RpZ2l0cyljYXJyeSA8PCBQeUxvbmdfU0hJRlQgfCBhW2ldOworICAgICAgICBjYXJyeSA9IChkaWdpdClhY2MgJiBtYXNrOworICAgICAgICB6W2ldID0gKGRpZ2l0KShhY2MgPj4gZCk7CiAgICAgfQotICAgIHotPm9iX2RpZ2l0W2ldID0gKGRpZ2l0KSBjYXJyeTsKLSAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUoeik7CisgICAgcmV0dXJuIGNhcnJ5OwogfQogCiAvKiBEaXZpZGUgbG9uZyBwaW4sIHcvIHNpemUgZGlnaXRzLCBieSBub24temVybyBkaWdpdCBuLCBzdG9yaW5nIHF1b3RpZW50CkBAIC0xMTY2LDcgKzEyODYsNyBAQAogICAgIHBvdXQgKz0gc2l6ZTsKICAgICB3aGlsZSAoLS1zaXplID49IDApIHsKICAgICAgICAgZGlnaXQgaGk7Ci0gICAgICAgIHJlbSA9IChyZW0gPDwgUHlMb25nX1NISUZUKSArICotLXBpbjsKKyAgICAgICAgcmVtID0gKHJlbSA8PCBQeUxvbmdfU0hJRlQpIHwgKi0tcGluOwogICAgICAgICAqLS1wb3V0ID0gaGkgPSAoZGlnaXQpKHJlbSAvIG4pOwogICAgICAgICByZW0gLT0gKHR3b2RpZ2l0cyloaSAqIG47CiAgICAgfQpAQCAtMTE5MSw2ICsxMzExLDEyMyBAQAogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKIH0KIAorLyogQ29udmVydCBhIGxvbmcgaW50ZWdlciB0byBhIGJhc2UgMTAgc3RyaW5nLiAgUmV0dXJucyBhIG5ldyBub24tc2hhcmVkCisgICBzdHJpbmcuICAoUmV0dXJuIHZhbHVlIGlzIG5vbi1zaGFyZWQgc28gdGhhdCBjYWxsZXJzIGNhbiBtb2RpZnkgdGhlCisgICByZXR1cm5lZCB2YWx1ZSBpZiBuZWNlc3NhcnkuKSAqLworCitzdGF0aWMgUHlPYmplY3QgKgorbG9uZ190b19kZWNpbWFsX3N0cmluZyhQeU9iamVjdCAqYWEsIGludCBhZGRMKQoreworICAgIFB5TG9uZ09iamVjdCAqc2NyYXRjaCwgKmE7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBQeV9zc2l6ZV90IHNpemUsIHN0cmxlbiwgc2l6ZV9hLCBpLCBqOworICAgIGRpZ2l0ICpwb3V0LCAqcGluLCByZW0sIHRlbnBvdzsKKyAgICBjaGFyICpwOworICAgIGludCBuZWdhdGl2ZTsKKworICAgIGEgPSAoUHlMb25nT2JqZWN0ICopYWE7CisgICAgaWYgKGEgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKGEpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOworICAgIG5lZ2F0aXZlID0gUHlfU0laRShhKSA8IDA7CisKKyAgICAvKiBxdWljayBhbmQgZGlydHkgdXBwZXIgYm91bmQgZm9yIHRoZSBudW1iZXIgb2YgZGlnaXRzCisgICAgICAgcmVxdWlyZWQgdG8gZXhwcmVzcyBhIGluIGJhc2UgX1B5TG9uZ19ERUNJTUFMX0JBU0U6CisKKyAgICAgICAgICNkaWdpdHMgPSAxICsgZmxvb3IobG9nMihhKSAvIGxvZzIoX1B5TG9uZ19ERUNJTUFMX0JBU0UpKQorCisgICAgICAgQnV0IGxvZzIoYSkgPCBzaXplX2EgKiBQeUxvbmdfU0hJRlQsIGFuZAorICAgICAgIGxvZzIoX1B5TG9uZ19ERUNJTUFMX0JBU0UpID0gbG9nMigxMCkgKiBfUHlMb25nX0RFQ0lNQUxfU0hJRlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IDMgKiBfUHlMb25nX0RFQ0lNQUxfU0hJRlQKKyAgICAqLworICAgIGlmIChzaXplX2EgPiBQWV9TU0laRV9UX01BWCAvIFB5TG9uZ19TSElGVCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHRoZSBleHByZXNzaW9uIHNpemVfYSAqIFB5TG9uZ19TSElGVCBpcyBub3cgc2FmZSBmcm9tIG92ZXJmbG93ICovCisgICAgc2l6ZSA9IDEgKyBzaXplX2EgKiBQeUxvbmdfU0hJRlQgLyAoMyAqIF9QeUxvbmdfREVDSU1BTF9TSElGVCk7CisgICAgc2NyYXRjaCA9IF9QeUxvbmdfTmV3KHNpemUpOworICAgIGlmIChzY3JhdGNoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogY29udmVydCBhcnJheSBvZiBiYXNlIF9QeUxvbmdfQkFTRSBkaWdpdHMgaW4gcGluIHRvIGFuIGFycmF5IG9mCisgICAgICAgYmFzZSBfUHlMb25nX0RFQ0lNQUxfQkFTRSBkaWdpdHMgaW4gcG91dCwgZm9sbG93aW5nIEtudXRoIChUQU9DUCwKKyAgICAgICBWb2x1bWUgMiAoM3JkIGVkbiksIHNlY3Rpb24gNC40LCBNZXRob2QgMWIpLiAqLworICAgIHBpbiA9IGEtPm9iX2RpZ2l0OworICAgIHBvdXQgPSBzY3JhdGNoLT5vYl9kaWdpdDsKKyAgICBzaXplID0gMDsKKyAgICBmb3IgKGkgPSBzaXplX2E7IC0taSA+PSAwOyApIHsKKyAgICAgICAgZGlnaXQgaGkgPSBwaW5baV07CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBzaXplOyBqKyspIHsKKyAgICAgICAgICAgIHR3b2RpZ2l0cyB6ID0gKHR3b2RpZ2l0cylwb3V0W2pdIDw8IFB5TG9uZ19TSElGVCB8IGhpOworICAgICAgICAgICAgaGkgPSAoZGlnaXQpKHogLyBfUHlMb25nX0RFQ0lNQUxfQkFTRSk7CisgICAgICAgICAgICBwb3V0W2pdID0gKGRpZ2l0KSh6IC0gKHR3b2RpZ2l0cyloaSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlMb25nX0RFQ0lNQUxfQkFTRSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGhpKSB7CisgICAgICAgICAgICBwb3V0W3NpemUrK10gPSBoaSAlIF9QeUxvbmdfREVDSU1BTF9CQVNFOworICAgICAgICAgICAgaGkgLz0gX1B5TG9uZ19ERUNJTUFMX0JBU0U7CisgICAgICAgIH0KKyAgICAgICAgLyogY2hlY2sgZm9yIGtleWJvYXJkIGludGVycnVwdCAqLworICAgICAgICBTSUdDSEVDSyh7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNjcmF0Y2gpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIC8qIHBvdXQgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIGRpZ2l0LCBzbyB0aGF0IHRoZSBjYXNlIHdoZW4gYSA9IDAKKyAgICAgICB3b3JrcyBjb3JyZWN0bHkgKi8KKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBwb3V0W3NpemUrK10gPSAwOworCisgICAgLyogY2FsY3VsYXRlIGV4YWN0IGxlbmd0aCBvZiBvdXRwdXQgc3RyaW5nLCBhbmQgYWxsb2NhdGUgKi8KKyAgICBzdHJsZW4gPSAoYWRkTCAhPSAwKSArIG5lZ2F0aXZlICsKKyAgICAgICAgMSArIChzaXplIC0gMSkgKiBfUHlMb25nX0RFQ0lNQUxfU0hJRlQ7CisgICAgdGVucG93ID0gMTA7CisgICAgcmVtID0gcG91dFtzaXplLTFdOworICAgIHdoaWxlIChyZW0gPj0gdGVucG93KSB7CisgICAgICAgIHRlbnBvdyAqPSAxMDsKKyAgICAgICAgc3RybGVuKys7CisgICAgfQorICAgIHN0ciA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHN0cmxlbik7CisgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogZmlsbCB0aGUgc3RyaW5nIHJpZ2h0LXRvLWxlZnQgKi8KKyAgICBwID0gUHlTdHJpbmdfQVNfU1RSSU5HKHN0cikgKyBzdHJsZW47CisgICAgKnAgPSAnXDAnOworICAgIGlmIChhZGRMKQorICAgICAgICAqLS1wID0gJ0wnOworICAgIC8qIHBvdXRbMF0gdGhyb3VnaCBwb3V0W3NpemUtMl0gY29udHJpYnV0ZSBleGFjdGx5CisgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovCisgICAgZm9yIChpPTA7IGkgPCBzaXplIC0gMTsgaSsrKSB7CisgICAgICAgIHJlbSA9IHBvdXRbaV07CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBfUHlMb25nX0RFQ0lNQUxfU0hJRlQ7IGorKykgeworICAgICAgICAgICAgKi0tcCA9ICcwJyArIHJlbSAlIDEwOworICAgICAgICAgICAgcmVtIC89IDEwOworICAgICAgICB9CisgICAgfQorICAgIC8qIHBvdXRbc2l6ZS0xXTogYWx3YXlzIHByb2R1Y2UgYXQgbGVhc3Qgb25lIGRlY2ltYWwgZGlnaXQgKi8KKyAgICByZW0gPSBwb3V0W2ldOworICAgIGRvIHsKKyAgICAgICAgKi0tcCA9ICcwJyArIHJlbSAlIDEwOworICAgICAgICByZW0gLz0gMTA7CisgICAgfSB3aGlsZSAocmVtICE9IDApOworCisgICAgLyogYW5kIHNpZ24gKi8KKyAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICotLXAgPSAnLSc7CisKKyAgICAvKiBjaGVjayB3ZSd2ZSBjb3VudGVkIGNvcnJlY3RseSAqLworICAgIGFzc2VydChwID09IFB5U3RyaW5nX0FTX1NUUklORyhzdHIpKTsKKyAgICBQeV9ERUNSRUYoc2NyYXRjaCk7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXN0cjsKK30KKwogLyogQ29udmVydCB0aGUgbG9uZyB0byBhIHN0cmluZyBvYmplY3Qgd2l0aCBnaXZlbiBiYXNlLAogICAgYXBwZW5kaW5nIGEgYmFzZSBwcmVmaXggb2YgMFtib3hdIGlmIGJhc2UgaXMgMiwgOCBvciAxNi4KICAgIEFkZCBhIHRyYWlsaW5nICJMIiBpZiBhZGRMIGlzIG5vbi16ZXJvLgpAQCAtMTIwNyw2ICsxNDQ0LDkgQEAKICAgICBpbnQgYml0czsKICAgICBjaGFyIHNpZ24gPSAnXDAnOwogCisgICAgaWYgKGJhc2UgPT0gMTApCisgICAgICAgIHJldHVybiBsb25nX3RvX2RlY2ltYWxfc3RyaW5nKChQeU9iamVjdCAqKWEsIGFkZEwpOworCiAgICAgaWYgKGEgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKGEpKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyNjMsOCArMTUwMyw3IEBACiAgICAgICAgICAgICAgICAgKi0tcCA9IGNkaWdpdDsKICAgICAgICAgICAgICAgICBhY2N1bWJpdHMgLT0gYmFzZWJpdHM7CiAgICAgICAgICAgICAgICAgYWNjdW0gPj49IGJhc2ViaXRzOwotICAgICAgICAgICAgfSB3aGlsZSAoaSA8IHNpemVfYS0xID8gYWNjdW1iaXRzID49IGJhc2ViaXRzIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VtID4gMCk7CisgICAgICAgICAgICB9IHdoaWxlIChpIDwgc2l6ZV9hLTEgPyBhY2N1bWJpdHMgPj0gYmFzZWJpdHMgOiBhY2N1bSA+IDApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTI3OCw3ICsxNTE3LDcgQEAKICAgICAgICAgZGlnaXQgcG93YmFzZSA9IGJhc2U7ICAvKiBwb3diYXNlID09IGJhc2UgKiogcG93ZXIgKi8KICAgICAgICAgaW50IHBvd2VyID0gMTsKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXdwb3cgPSBwb3diYXNlICogKHVuc2lnbmVkIGxvbmcpYmFzZTsKKyAgICAgICAgICAgIHR3b2RpZ2l0cyBuZXdwb3cgPSBwb3diYXNlICogKHR3b2RpZ2l0cyliYXNlOwogICAgICAgICAgICAgaWYgKG5ld3BvdyA+PiBQeUxvbmdfU0hJRlQpCiAgICAgICAgICAgICAgICAgLyogZG9lc24ndCBmaXQgaW4gYSBkaWdpdCAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI5NywxNSArMTUzNiwxNSBAQAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbnQgbnRvc3RvcmUgPSBwb3dlcjsKICAgICAgICAgICAgIGRpZ2l0IHJlbSA9IGlucGxhY2VfZGl2cmVtMShzY3JhdGNoLT5vYl9kaWdpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGluLCBzaXplLCBwb3diYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW4sIHNpemUsIHBvd2Jhc2UpOwogICAgICAgICAgICAgcGluID0gc2NyYXRjaC0+b2JfZGlnaXQ7IC8qIG5vIG5lZWQgdG8gdXNlIGEgYWdhaW4gKi8KICAgICAgICAgICAgIGlmIChwaW5bc2l6ZSAtIDFdID09IDApCiAgICAgICAgICAgICAgICAgLS1zaXplOwogICAgICAgICAgICAgU0lHQ0hFQ0soewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvKiBCcmVhayByZW0gaW50byBkaWdpdHMuICovCiAgICAgICAgICAgICBhc3NlcnQobnRvc3RvcmUgPiAwKTsKQEAgLTE1MTksMTQgKzE3NTgsMTUgQEAKICAgICBQeUxvbmdfQkFTRSoqbiA+PSBCKipOICAgICAgW3Rha2luZyBsb2dzIHRvIGJhc2UgUHlMb25nX0JBU0VdCiAgICAgbiA+PSBsb2coQioqTikvbG9nKFB5TG9uZ19CQVNFKSA9IE4gKiBsb2coQikvbG9nKFB5TG9uZ19CQVNFKQogCi1UaGUgc3RhdGljIGFycmF5IGxvZ19iYXNlX1B5TG9uZ19CQVNFW2Jhc2VdID09IGxvZyhiYXNlKS9sb2coUHlMb25nX0JBU0UpIHNvIHdlIGNhbiBjb21wdXRlCi10aGlzIHF1aWNrbHkuICBBIFB5dGhvbiBsb25nIHdpdGggdGhhdCBtdWNoIHNwYWNlIGlzIHJlc2VydmVkIG5lYXIgdGhlIHN0YXJ0LAotYW5kIHRoZSByZXN1bHQgaXMgY29tcHV0ZWQgaW50byBpdC4KK1RoZSBzdGF0aWMgYXJyYXkgbG9nX2Jhc2VfUHlMb25nX0JBU0VbYmFzZV0gPT0gbG9nKGJhc2UpL2xvZyhQeUxvbmdfQkFTRSkgc28KK3dlIGNhbiBjb21wdXRlIHRoaXMgcXVpY2tseS4gIEEgUHl0aG9uIGxvbmcgd2l0aCB0aGF0IG11Y2ggc3BhY2UgaXMgcmVzZXJ2ZWQKK25lYXIgdGhlIHN0YXJ0LCBhbmQgdGhlIHJlc3VsdCBpcyBjb21wdXRlZCBpbnRvIGl0LgogCiBUaGUgaW5wdXQgc3RyaW5nIGlzIGFjdHVhbGx5IHRyZWF0ZWQgYXMgYmVpbmcgaW4gYmFzZSBiYXNlKippIChpLmUuLCBpIGRpZ2l0cwogYXJlIHByb2Nlc3NlZCBhdCBhIHRpbWUpLCB3aGVyZSB0d28gbW9yZSBzdGF0aWMgYXJyYXlzIGhvbGQ6CiAKLSAgICBjb252d2lkdGhfYmFzZVtiYXNlXSA9IHRoZSBsYXJnZXN0IGludGVnZXIgaSBzdWNoIHRoYXQgYmFzZSoqaSA8PSBQeUxvbmdfQkFTRQorICAgIGNvbnZ3aWR0aF9iYXNlW2Jhc2VdID0gdGhlIGxhcmdlc3QgaW50ZWdlciBpIHN1Y2ggdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSoqaSA8PSBQeUxvbmdfQkFTRQogICAgIGNvbnZtdWx0bWF4X2Jhc2VbYmFzZV0gPSBiYXNlICoqIGNvbnZ3aWR0aF9iYXNlW2Jhc2VdCiAKIFRoZSBmaXJzdCBvZiB0aGVzZSBpcyB0aGUgbGFyZ2VzdCBpIHN1Y2ggdGhhdCBpIGNvbnNlY3V0aXZlIGlucHV0IGRpZ2l0cwpAQCAtMTU1MCwzMyArMTc5MCwzNCBAQAogICAgIHNpemVfeiA9IChQeV9zc2l6ZV90KSgoc2NhbiAtIHN0cikgKiBsb2dfYmFzZV9QeUxvbmdfQkFTRVtiYXNlXSkgKyAxOwogCiBiZWxvdy4gIFR3byBudW1lcmljIGNvbmNlcm5zIGFyZSBob3cgbXVjaCBzcGFjZSB0aGlzIGNhbiB3YXN0ZSwgYW5kIHdoZXRoZXIKLXRoZSBjb21wdXRlZCByZXN1bHQgY2FuIGJlIHRvbyBzbWFsbC4gIFRvIGJlIGNvbmNyZXRlLCBhc3N1bWUgUHlMb25nX0JBU0UgPSAyKioxNSwKLXdoaWNoIGlzIHRoZSBkZWZhdWx0IChhbmQgaXQncyB1bmxpa2VseSBhbnlvbmUgY2hhbmdlcyB0aGF0KS4KK3RoZSBjb21wdXRlZCByZXN1bHQgY2FuIGJlIHRvbyBzbWFsbC4gIFRvIGJlIGNvbmNyZXRlLCBhc3N1bWUgUHlMb25nX0JBU0UgPQorMioqMTUsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IChhbmQgaXQncyB1bmxpa2VseSBhbnlvbmUgY2hhbmdlcyB0aGF0KS4KIAotV2FzdGUgaXNuJ3QgYSBwcm9ibGVtOiAgcHJvdmlkZWQgdGhlIGZpcnN0IGlucHV0IGRpZ2l0IGlzbid0IDAsIHRoZSBkaWZmZXJlbmNlCitXYXN0ZSBpc24ndCBhIHByb2JsZW06IHByb3ZpZGVkIHRoZSBmaXJzdCBpbnB1dCBkaWdpdCBpc24ndCAwLCB0aGUgZGlmZmVyZW5jZQogYmV0d2VlbiB0aGUgd29yc3QtY2FzZSBpbnB1dCB3aXRoIE4gZGlnaXRzIGFuZCB0aGUgc21hbGxlc3QgaW5wdXQgd2l0aCBOCi1kaWdpdHMgaXMgYWJvdXQgYSBmYWN0b3Igb2YgQiwgYnV0IEIgaXMgc21hbGwgY29tcGFyZWQgdG8gUHlMb25nX0JBU0Ugc28gYXQgbW9zdAotb25lIGFsbG9jYXRlZCBQeXRob24gZGlnaXQgY2FuIHJlbWFpbiB1bnVzZWQgb24gdGhhdCBjb3VudC4gIElmCi1OKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpIGlzIG1hdGhlbWF0aWNhbGx5IGFuIGV4YWN0IGludGVnZXIsIHRoZW4gdHJ1bmNhdGluZyB0aGF0Ci1hbmQgYWRkaW5nIDEgcmV0dXJucyBhIHJlc3VsdCAxIGxhcmdlciB0aGFuIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIHRoYXQgY2FuJ3QKLWhhcHBlbjogIHdoZW5ldmVyIEIgaXMgYSBwb3dlciBvZiAyLCBsb25nX2Zyb21fYmluYXJ5X2Jhc2UoKSBpcyBjYWxsZWQKLWluc3RlYWQsIGFuZCBpdCdzIGltcG9zc2libGUgZm9yIEIqKmkgdG8gYmUgYW4gaW50ZWdlciBwb3dlciBvZiAyKioxNSB3aGVuCi1CIGlzIG5vdCBhIHBvd2VyIG9mIDIgKGkuZS4sIGl0J3MgaW1wb3NzaWJsZSBmb3IgTipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSB0byBiZQorZGlnaXRzIGlzIGFib3V0IGEgZmFjdG9yIG9mIEIsIGJ1dCBCIGlzIHNtYWxsIGNvbXBhcmVkIHRvIFB5TG9uZ19CQVNFIHNvIGF0Cittb3N0IG9uZSBhbGxvY2F0ZWQgUHl0aG9uIGRpZ2l0IGNhbiByZW1haW4gdW51c2VkIG9uIHRoYXQgY291bnQuICBJZgorTipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSBpcyBtYXRoZW1hdGljYWxseSBhbiBleGFjdCBpbnRlZ2VyLCB0aGVuIHRydW5jYXRpbmcKK3RoYXQgYW5kIGFkZGluZyAxIHJldHVybnMgYSByZXN1bHQgMSBsYXJnZXIgdGhhbiBuZWNlc3NhcnkuICBIb3dldmVyLCB0aGF0CitjYW4ndCBoYXBwZW46IHdoZW5ldmVyIEIgaXMgYSBwb3dlciBvZiAyLCBsb25nX2Zyb21fYmluYXJ5X2Jhc2UoKSBpcyBjYWxsZWQKK2luc3RlYWQsIGFuZCBpdCdzIGltcG9zc2libGUgZm9yIEIqKmkgdG8gYmUgYW4gaW50ZWdlciBwb3dlciBvZiAyKioxNSB3aGVuIEIKK2lzIG5vdCBhIHBvd2VyIG9mIDIgKGkuZS4sIGl0J3MgaW1wb3NzaWJsZSBmb3IgTipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSB0byBiZQogYW4gZXhhY3QgaW50ZWdlciB3aGVuIEIgaXMgbm90IGEgcG93ZXIgb2YgMiwgc2luY2UgQioqaSBoYXMgYSBwcmltZSBmYWN0b3IKIG90aGVyIHRoYW4gMiBpbiB0aGF0IGNhc2UsIGJ1dCAoMioqMTUpKipqJ3Mgb25seSBwcmltZSBmYWN0b3IgaXMgMikuCiAKLVRoZSBjb21wdXRlZCByZXN1bHQgY2FuIGJlIHRvbyBzbWFsbCBpZiB0aGUgdHJ1ZSB2YWx1ZSBvZiBOKmxvZyhCKS9sb2coUHlMb25nX0JBU0UpCi1pcyBhIGxpdHRsZSBiaXQgbGFyZ2VyIHRoYW4gYW4gZXhhY3QgaW50ZWdlciwgYnV0IGR1ZSB0byByb3VuZG9mZiBlcnJvcnMgKGluCi1jb21wdXRpbmcgbG9nKEIpLCBsb2coUHlMb25nX0JBU0UpLCB0aGVpciBxdW90aWVudCwgYW5kL29yIG11bHRpcGx5aW5nIHRoYXQgYnkgTikKLXlpZWxkcyBhIG51bWVyaWMgcmVzdWx0IGEgbGl0dGxlIGxlc3MgdGhhbiB0aGF0IGludGVnZXIuICBVbmZvcnR1bmF0ZWx5LCAiaG93Ci1jbG9zZSBjYW4gYSB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbiBnZXQgdG8gYW4gaW50ZWdlciBvdmVyIHNvbWUgcmFuZ2U/IgotcXVlc3Rpb25zIGFyZSBnZW5lcmFsbHkgdGhlb3JldGljYWxseSBpbnRyYWN0YWJsZS4gIENvbXB1dGVyIGFuYWx5c2lzIHZpYQotY29udGludWVkIGZyYWN0aW9ucyBpcyBwcmFjdGljYWw6ICBleHBhbmQgbG9nKEIpL2xvZyhQeUxvbmdfQkFTRSkgdmlhIGNvbnRpbnVlZAotZnJhY3Rpb25zLCBnaXZpbmcgYSBzZXF1ZW5jZSBpL2ogb2YgInRoZSBiZXN0IiByYXRpb25hbCBhcHByb3hpbWF0aW9ucy4gIFRoZW4KLWoqbG9nKEIpL2xvZyhQeUxvbmdfQkFTRSkgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byAodGhlIGludGVnZXIpIGkuICBUaGlzIHNob3dzIHRoYXQKLXdlIGNhbiBnZXQgdmVyeSBjbG9zZSB0byBiZWluZyBpbiB0cm91YmxlLCBidXQgdmVyeSByYXJlbHkuICBGb3IgZXhhbXBsZSwKLTc2NTczIGlzIGEgZGVub21pbmF0b3IgaW4gb25lIG9mIHRoZSBjb250aW51ZWQtZnJhY3Rpb24gYXBwcm94aW1hdGlvbnMgdG8KLWxvZygxMCkvbG9nKDIqKjE1KSwgYW5kIGluZGVlZDoKK1RoZSBjb21wdXRlZCByZXN1bHQgY2FuIGJlIHRvbyBzbWFsbCBpZiB0aGUgdHJ1ZSB2YWx1ZSBvZgorTipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSBpcyBhIGxpdHRsZSBiaXQgbGFyZ2VyIHRoYW4gYW4gZXhhY3QgaW50ZWdlciwgYnV0CitkdWUgdG8gcm91bmRvZmYgZXJyb3JzIChpbiBjb21wdXRpbmcgbG9nKEIpLCBsb2coUHlMb25nX0JBU0UpLCB0aGVpciBxdW90aWVudCwKK2FuZC9vciBtdWx0aXBseWluZyB0aGF0IGJ5IE4pIHlpZWxkcyBhIG51bWVyaWMgcmVzdWx0IGEgbGl0dGxlIGxlc3MgdGhhbiB0aGF0CitpbnRlZ2VyLiAgVW5mb3J0dW5hdGVseSwgImhvdyBjbG9zZSBjYW4gYSB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbiBnZXQgdG8gYW4KK2ludGVnZXIgb3ZlciBzb21lIHJhbmdlPyIgIHF1ZXN0aW9ucyBhcmUgZ2VuZXJhbGx5IHRoZW9yZXRpY2FsbHkgaW50cmFjdGFibGUuCitDb21wdXRlciBhbmFseXNpcyB2aWEgY29udGludWVkIGZyYWN0aW9ucyBpcyBwcmFjdGljYWw6IGV4cGFuZAorbG9nKEIpL2xvZyhQeUxvbmdfQkFTRSkgdmlhIGNvbnRpbnVlZCBmcmFjdGlvbnMsIGdpdmluZyBhIHNlcXVlbmNlIGkvaiBvZiAidGhlCitiZXN0IiByYXRpb25hbCBhcHByb3hpbWF0aW9ucy4gIFRoZW4gaipsb2coQikvbG9nKFB5TG9uZ19CQVNFKSBpcworYXBwcm94aW1hdGVseSBlcXVhbCB0byAodGhlIGludGVnZXIpIGkuICBUaGlzIHNob3dzIHRoYXQgd2UgY2FuIGdldCB2ZXJ5IGNsb3NlCit0byBiZWluZyBpbiB0cm91YmxlLCBidXQgdmVyeSByYXJlbHkuICBGb3IgZXhhbXBsZSwgNzY1NzMgaXMgYSBkZW5vbWluYXRvciBpbgorb25lIG9mIHRoZSBjb250aW51ZWQtZnJhY3Rpb24gYXBwcm94aW1hdGlvbnMgdG8gbG9nKDEwKS9sb2coMioqMTUpLCBhbmQKK2luZGVlZDoKIAogICAgID4+PiBsb2coMTApL2xvZygyKioxNSkqNzY1NzMKICAgICAxNjk1OC4wMDAwMDA2NTQwMDMKQEAgLTE2MDcsOCArMTg0OCw4IEBACiAgICAgICAgICAgICB0d29kaWdpdHMgY29udm1heCA9IGJhc2U7CiAgICAgICAgICAgICBpbnQgaSA9IDE7CiAKLSAgICAgICAgICAgIGxvZ19iYXNlX1B5TG9uZ19CQVNFW2Jhc2VdID0gbG9nKChkb3VibGUpYmFzZSkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKChkb3VibGUpUHlMb25nX0JBU0UpOworICAgICAgICAgICAgbG9nX2Jhc2VfUHlMb25nX0JBU0VbYmFzZV0gPSAobG9nKChkb3VibGUpYmFzZSkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKChkb3VibGUpUHlMb25nX0JBU0UpKTsKICAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAgICB0d29kaWdpdHMgbmV4dCA9IGNvbnZtYXggKiBiYXNlOwogICAgICAgICAgICAgICAgIGlmIChuZXh0ID4gUHlMb25nX0JBU0UpCkBAIC0xNjUyLDcgKzE4OTMsNyBAQAogICAgICAgICAgICAgYyA9IChkaWdpdClfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnN0cisrKV07CiAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY29udndpZHRoICYmIHN0ciAhPSBzY2FuOyArK2ksICsrc3RyKSB7CiAgICAgICAgICAgICAgICAgYyA9ICh0d29kaWdpdHMpKGMgKiAgYmFzZSArCi0gICAgICAgICAgICAgICAgICAgIF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnN0cildKTsKICAgICAgICAgICAgICAgICBhc3NlcnQoYyA8IFB5TG9uZ19CQVNFKTsKICAgICAgICAgICAgIH0KIApAQCAtMTcxNyw3ICsxOTU4LDcgQEAKICAgICAgICAgKnBlbmQgPSBzdHI7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwogCi0gb25FcnJvcjoKKyAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKHopOwogICAgIHNsZW4gPSBzdHJsZW4ob3JpZ19zdHIpIDwgMjAwID8gc3RybGVuKG9yaWdfc3RyKSA6IDIwMDsKICAgICBzdHJvYmogPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShvcmlnX3N0ciwgc2xlbik7CkBAIC0xNzU4LDggKzE5OTksNiBAQAogc3RhdGljIFB5TG9uZ09iamVjdCAqeF9kaXZyZW0KICAgICAoUHlMb25nT2JqZWN0ICosIFB5TG9uZ09iamVjdCAqLCBQeUxvbmdPYmplY3QgKiopOwogc3RhdGljIFB5T2JqZWN0ICpsb25nX2xvbmcoUHlPYmplY3QgKnYpOwotc3RhdGljIGludCBsb25nX2RpdnJlbShQeUxvbmdPYmplY3QgKiwgUHlMb25nT2JqZWN0ICosCi0gICAgUHlMb25nT2JqZWN0ICoqLCBQeUxvbmdPYmplY3QgKiopOwogCiAvKiBMb25nIGRpdmlzaW9uIHdpdGggcmVtYWluZGVyLCB0b3AtbGV2ZWwgcm91dGluZSAqLwogCkBAIC0xODE0LDEwNCArMjA1MywyNzggQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogVW5zaWduZWQgbG9uZyBkaXZpc2lvbiB3aXRoIHJlbWFpbmRlciAtLSB0aGUgYWxnb3JpdGhtICovCisvKiBVbnNpZ25lZCBsb25nIGRpdmlzaW9uIHdpdGggcmVtYWluZGVyIC0tIHRoZSBhbGdvcml0aG0uICBUaGUgYXJndW1lbnRzIHYxCisgICBhbmQgdzEgc2hvdWxkIHNhdGlzZnkgMiA8PSBBQlMoUHlfU0laRSh3MSkpIDw9IEFCUyhQeV9TSVpFKHYxKSkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgogeF9kaXZyZW0oUHlMb25nT2JqZWN0ICp2MSwgUHlMb25nT2JqZWN0ICp3MSwgUHlMb25nT2JqZWN0ICoqcHJlbSkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemVfdiA9IEFCUyhQeV9TSVpFKHYxKSksIHNpemVfdyA9IEFCUyhQeV9TSVpFKHcxKSk7Ci0gICAgZGlnaXQgZCA9IChkaWdpdCkgKCh0d29kaWdpdHMpUHlMb25nX0JBU0UgLyAodzEtPm9iX2RpZ2l0W3NpemVfdy0xXSArIDEpKTsKLSAgICBQeUxvbmdPYmplY3QgKnYgPSBtdWwxKHYxLCBkKTsKLSAgICBQeUxvbmdPYmplY3QgKncgPSBtdWwxKHcxLCBkKTsKLSAgICBQeUxvbmdPYmplY3QgKmE7Ci0gICAgUHlfc3NpemVfdCBqLCBrOworICAgIFB5TG9uZ09iamVjdCAqdiwgKncsICphOworICAgIFB5X3NzaXplX3QgaSwgaywgc2l6ZV92LCBzaXplX3c7CisgICAgaW50IGQ7CisgICAgZGlnaXQgd20xLCB3bTIsIGNhcnJ5LCBxLCByLCB2dG9wLCAqdjAsICp2aywgKncwLCAqYWs7CisgICAgdHdvZGlnaXRzIHZ2OworICAgIHNkaWdpdCB6aGk7CisgICAgc3R3b2RpZ2l0cyB6OwogCi0gICAgaWYgKHYgPT0gTlVMTCB8fCB3ID09IE5VTEwpIHsKLSAgICAgICAgUHlfWERFQ1JFRih2KTsKLSAgICAgICAgUHlfWERFQ1JFRih3KTsKKyAgICAvKiBXZSBmb2xsb3cgS251dGggW1RoZSBBcnQgb2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmcsIFZvbC4gMiAoM3JkCisgICAgICAgZWRuLiksIHNlY3Rpb24gNC4zLjEsIEFsZ29yaXRobSBEXSwgZXhjZXB0IHRoYXQgd2UgZG9uJ3QgZXhwbGljaXRseQorICAgICAgIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIHdoZW4gdGhlIGluaXRpYWwgZXN0aW1hdGUgcSBmb3IgYSBxdW90aWVudAorICAgICAgIGRpZ2l0IGlzID49IFB5TG9uZ19CQVNFOiB0aGUgbWF4IHZhbHVlIGZvciBxIGlzIFB5TG9uZ19CQVNFKzEsIGFuZAorICAgICAgIHRoYXQgd29uJ3Qgb3ZlcmZsb3cgYSBkaWdpdC4gKi8KKworICAgIC8qIGFsbG9jYXRlIHNwYWNlOyB3IHdpbGwgYWxzbyBiZSB1c2VkIHRvIGhvbGQgdGhlIGZpbmFsIHJlbWFpbmRlciAqLworICAgIHNpemVfdiA9IEFCUyhQeV9TSVpFKHYxKSk7CisgICAgc2l6ZV93ID0gQUJTKFB5X1NJWkUodzEpKTsKKyAgICBhc3NlcnQoc2l6ZV92ID49IHNpemVfdyAmJiBzaXplX3cgPj0gMik7IC8qIEFzc2VydCBjaGVja3MgYnkgZGl2KCkgKi8KKyAgICB2ID0gX1B5TG9uZ19OZXcoc2l6ZV92KzEpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgKnByZW0gPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdyA9IF9QeUxvbmdfTmV3KHNpemVfdyk7CisgICAgaWYgKHcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICpwcmVtID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgYXNzZXJ0KHNpemVfdiA+PSBzaXplX3cgJiYgc2l6ZV93ID4gMSk7IC8qIEFzc2VydCBjaGVja3MgYnkgZGl2KCkgKi8KLSAgICBhc3NlcnQoUHlfUkVGQ05UKHYpID09IDEpOyAvKiBTaW5jZSB2IHdpbGwgYmUgdXNlZCBhcyBhY2N1bXVsYXRvciEgKi8KLSAgICBhc3NlcnQoc2l6ZV93ID09IEFCUyhQeV9TSVpFKHcpKSk7IC8qIFRoYXQncyBob3cgZCB3YXMgY2FsY3VsYXRlZCAqLworICAgIC8qIG5vcm1hbGl6ZTogc2hpZnQgdzEgbGVmdCBzbyB0aGF0IGl0cyB0b3AgZGlnaXQgaXMgPj0gUHlMb25nX0JBU0UvMi4KKyAgICAgICBzaGlmdCB2MSBsZWZ0IGJ5IHRoZSBzYW1lIGFtb3VudC4gIFJlc3VsdHMgZ28gaW50byB3IGFuZCB2LiAqLworICAgIGQgPSBQeUxvbmdfU0hJRlQgLSBiaXRzX2luX2RpZ2l0KHcxLT5vYl9kaWdpdFtzaXplX3ctMV0pOworICAgIGNhcnJ5ID0gdl9sc2hpZnQody0+b2JfZGlnaXQsIHcxLT5vYl9kaWdpdCwgc2l6ZV93LCBkKTsKKyAgICBhc3NlcnQoY2FycnkgPT0gMCk7CisgICAgY2FycnkgPSB2X2xzaGlmdCh2LT5vYl9kaWdpdCwgdjEtPm9iX2RpZ2l0LCBzaXplX3YsIGQpOworICAgIGlmIChjYXJyeSAhPSAwIHx8IHYtPm9iX2RpZ2l0W3NpemVfdi0xXSA+PSB3LT5vYl9kaWdpdFtzaXplX3ctMV0pIHsKKyAgICAgICAgdi0+b2JfZGlnaXRbc2l6ZV92XSA9IGNhcnJ5OworICAgICAgICBzaXplX3YrKzsKKyAgICB9CiAKLSAgICBzaXplX3YgPSBBQlMoUHlfU0laRSh2KSk7CisgICAgLyogTm93IHYtPm9iX2RpZ2l0W3NpemVfdi0xXSA8IHctPm9iX2RpZ2l0W3NpemVfdy0xXSwgc28gcXVvdGllbnQgaGFzCisgICAgICAgYXQgbW9zdCAoYW5kIHVzdWFsbHkgZXhhY3RseSkgayA9IHNpemVfdiAtIHNpemVfdyBkaWdpdHMuICovCiAgICAgayA9IHNpemVfdiAtIHNpemVfdzsKLSAgICBhID0gX1B5TG9uZ19OZXcoayArIDEpOwotCi0gICAgZm9yIChqID0gc2l6ZV92OyBhICE9IE5VTEwgJiYgayA+PSAwOyAtLWosIC0taykgewotICAgICAgICBkaWdpdCB2aiA9IChqID49IHNpemVfdikgPyAwIDogdi0+b2JfZGlnaXRbal07Ci0gICAgICAgIHR3b2RpZ2l0cyBxOwotICAgICAgICBzdHdvZGlnaXRzIGNhcnJ5ID0gMDsKLSAgICAgICAgUHlfc3NpemVfdCBpOworICAgIGFzc2VydChrID49IDApOworICAgIGEgPSBfUHlMb25nX05ldyhrKTsKKyAgICBpZiAoYSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAqcHJlbSA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB2MCA9IHYtPm9iX2RpZ2l0OworICAgIHcwID0gdy0+b2JfZGlnaXQ7CisgICAgd20xID0gdzBbc2l6ZV93LTFdOworICAgIHdtMiA9IHcwW3NpemVfdy0yXTsKKyAgICBmb3IgKHZrID0gdjAraywgYWsgPSBhLT5vYl9kaWdpdCArIGs7IHZrLS0gPiB2MDspIHsKKyAgICAgICAgLyogaW5uZXIgbG9vcDogZGl2aWRlIHZrWzA6c2l6ZV93KzFdIGJ5IHcwWzA6c2l6ZV93XSwgZ2l2aW5nCisgICAgICAgICAgIHNpbmdsZS1kaWdpdCBxdW90aWVudCBxLCByZW1haW5kZXIgaW4gdmtbMDpzaXplX3ddLiAqLwogCiAgICAgICAgIFNJR0NIRUNLKHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihhKTsKLSAgICAgICAgICAgIGEgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0pCi0gICAgICAgIGlmICh2aiA9PSB3LT5vYl9kaWdpdFtzaXplX3ctMV0pCi0gICAgICAgICAgICBxID0gUHlMb25nX01BU0s7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHEgPSAoKCh0d29kaWdpdHMpdmogPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2otMV0pIC8KLSAgICAgICAgICAgICAgICB3LT5vYl9kaWdpdFtzaXplX3ctMV07CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgKnByZW0gPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgd2hpbGUgKHctPm9iX2RpZ2l0W3NpemVfdy0yXSpxID4KLSAgICAgICAgICAgICAgICAgICAgICAgICgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodHdvZGlnaXRzKXZqIDw8IFB5TG9uZ19TSElGVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB2LT5vYl9kaWdpdFtqLTFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcSp3LT5vYl9kaWdpdFtzaXplX3ctMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8PCBQeUxvbmdfU0hJRlQpCi0gICAgICAgICAgICAgICAgICAgICAgICArIHYtPm9iX2RpZ2l0W2otMl0pCisgICAgICAgIC8qIGVzdGltYXRlIHF1b3RpZW50IGRpZ2l0IHE7IG1heSBvdmVyZXN0aW1hdGUgYnkgMSAocmFyZSkgKi8KKyAgICAgICAgdnRvcCA9IHZrW3NpemVfd107CisgICAgICAgIGFzc2VydCh2dG9wIDw9IHdtMSk7CisgICAgICAgIHZ2ID0gKCh0d29kaWdpdHMpdnRvcCA8PCBQeUxvbmdfU0hJRlQpIHwgdmtbc2l6ZV93LTFdOworICAgICAgICBxID0gKGRpZ2l0KSh2diAvIHdtMSk7CisgICAgICAgIHIgPSAoZGlnaXQpKHZ2IC0gKHR3b2RpZ2l0cyl3bTEgKiBxKTsgLyogciA9IHZ2ICUgd20xICovCisgICAgICAgIHdoaWxlICgodHdvZGlnaXRzKXdtMiAqIHEgPiAoKCh0d29kaWdpdHMpciA8PCBQeUxvbmdfU0hJRlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB2a1tzaXplX3ctMl0pKSB7CiAgICAgICAgICAgICAtLXE7CisgICAgICAgICAgICByICs9IHdtMTsKKyAgICAgICAgICAgIGlmIChyID49IFB5TG9uZ19CQVNFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFzc2VydChxIDw9IFB5TG9uZ19CQVNFKTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV93ICYmIGkrayA8IHNpemVfdjsgKytpKSB7Ci0gICAgICAgICAgICB0d29kaWdpdHMgeiA9IHctPm9iX2RpZ2l0W2ldICogcTsKLSAgICAgICAgICAgIGRpZ2l0IHp6ID0gKGRpZ2l0KSAoeiA+PiBQeUxvbmdfU0hJRlQpOwotICAgICAgICAgICAgY2FycnkgKz0gdi0+b2JfZGlnaXRbaStrXSAtIHoKLSAgICAgICAgICAgICAgICArICgodHdvZGlnaXRzKXp6IDw8IFB5TG9uZ19TSElGVCk7Ci0gICAgICAgICAgICB2LT5vYl9kaWdpdFtpK2tdID0gKGRpZ2l0KShjYXJyeSAmIFB5TG9uZ19NQVNLKTsKLSAgICAgICAgICAgIGNhcnJ5ID0gUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChCQVNFX1RXT0RJR0lUU19UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcnJ5LCBQeUxvbmdfU0hJRlQpOwotICAgICAgICAgICAgY2FycnkgLT0geno7CisgICAgICAgIC8qIHN1YnRyYWN0IHEqdzBbMDpzaXplX3ddIGZyb20gdmtbMDpzaXplX3crMV0gKi8KKyAgICAgICAgemhpID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfdzsgKytpKSB7CisgICAgICAgICAgICAvKiBpbnZhcmlhbnRzOiAtUHlMb25nX0JBU0UgPD0gLXEgPD0gemhpIDw9IDA7CisgICAgICAgICAgICAgICAtUHlMb25nX0JBU0UgKiBxIDw9IHogPCBQeUxvbmdfQkFTRSAqLworICAgICAgICAgICAgeiA9IChzZGlnaXQpdmtbaV0gKyB6aGkgLQorICAgICAgICAgICAgICAgIChzdHdvZGlnaXRzKXEgKiAoc3R3b2RpZ2l0cyl3MFtpXTsKKyAgICAgICAgICAgIHZrW2ldID0gKGRpZ2l0KXogJiBQeUxvbmdfTUFTSzsKKyAgICAgICAgICAgIHpoaSA9IChzZGlnaXQpUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChzdHdvZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHosIFB5TG9uZ19TSElGVCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaStrIDwgc2l6ZV92KSB7Ci0gICAgICAgICAgICBjYXJyeSArPSB2LT5vYl9kaWdpdFtpK2tdOwotICAgICAgICAgICAgdi0+b2JfZGlnaXRbaStrXSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2FycnkgPT0gMCkKLSAgICAgICAgICAgIGEtPm9iX2RpZ2l0W2tdID0gKGRpZ2l0KSBxOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydChjYXJyeSA9PSAtMSk7Ci0gICAgICAgICAgICBhLT5vYl9kaWdpdFtrXSA9IChkaWdpdCkgcS0xOworICAgICAgICAvKiBhZGQgdyBiYWNrIGlmIHEgd2FzIHRvbyBsYXJnZSAodGhpcyBicmFuY2ggdGFrZW4gcmFyZWx5KSAqLworICAgICAgICBhc3NlcnQoKHNkaWdpdCl2dG9wICsgemhpID09IC0xIHx8IChzZGlnaXQpdnRvcCArIHpoaSA9PSAwKTsKKyAgICAgICAgaWYgKChzZGlnaXQpdnRvcCArIHpoaSA8IDApIHsKICAgICAgICAgICAgIGNhcnJ5ID0gMDsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX3cgJiYgaStrIDwgc2l6ZV92OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjYXJyeSArPSB2LT5vYl9kaWdpdFtpK2tdICsgdy0+b2JfZGlnaXRbaV07Ci0gICAgICAgICAgICAgICAgdi0+b2JfZGlnaXRbaStrXSA9IChkaWdpdCkoY2FycnkgJiBQeUxvbmdfTUFTSyk7Ci0gICAgICAgICAgICAgICAgY2FycnkgPSBQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVNFX1RXT0RJR0lUU19UWVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJyeSwgUHlMb25nX1NISUZUKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX3c7ICsraSkgeworICAgICAgICAgICAgICAgIGNhcnJ5ICs9IHZrW2ldICsgdzBbaV07CisgICAgICAgICAgICAgICAgdmtbaV0gPSBjYXJyeSAmIFB5TG9uZ19NQVNLOworICAgICAgICAgICAgICAgIGNhcnJ5ID4+PSBQeUxvbmdfU0hJRlQ7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAtLXE7CiAgICAgICAgIH0KLSAgICB9IC8qIGZvciBqLCBrICovCiAKLSAgICBpZiAoYSA9PSBOVUxMKQotICAgICAgICAqcHJlbSA9IE5VTEw7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGEgPSBsb25nX25vcm1hbGl6ZShhKTsKLSAgICAgICAgKnByZW0gPSBkaXZyZW0xKHYsIGQsICZkKTsKLSAgICAgICAgLyogZCByZWNlaXZlcyB0aGUgKHVudXNlZCkgcmVtYWluZGVyICovCi0gICAgICAgIGlmICgqcHJlbSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoYSk7Ci0gICAgICAgICAgICBhID0gTlVMTDsKLSAgICAgICAgfQorICAgICAgICAvKiBzdG9yZSBxdW90aWVudCBkaWdpdCAqLworICAgICAgICBhc3NlcnQocSA8IFB5TG9uZ19CQVNFKTsKKyAgICAgICAgKi0tYWsgPSBxOwogICAgIH0KKworICAgIC8qIHVuc2hpZnQgcmVtYWluZGVyOyB3ZSByZXVzZSB3IHRvIHN0b3JlIHRoZSByZXN1bHQgKi8KKyAgICBjYXJyeSA9IHZfcnNoaWZ0KHcwLCB2MCwgc2l6ZV93LCBkKTsKKyAgICBhc3NlcnQoY2Fycnk9PTApOwogICAgIFB5X0RFQ1JFRih2KTsKLSAgICBQeV9ERUNSRUYodyk7Ci0gICAgcmV0dXJuIGE7CisKKyAgICAqcHJlbSA9IGxvbmdfbm9ybWFsaXplKHcpOworICAgIHJldHVybiBsb25nX25vcm1hbGl6ZShhKTsKK30KKworLyogRm9yIGEgbm9uemVybyBQeUxvbmcgYSwgZXhwcmVzcyBhIGluIHRoZSBmb3JtIHggKiAyKiplLCB3aXRoIDAuNSA8PQorICAgYWJzKHgpIDwgMS4wIGFuZCBlID49IDA7IHJldHVybiB4IGFuZCBwdXQgZSBpbiAqZS4gIEhlcmUgeCBpcworICAgcm91bmRlZCB0byBEQkxfTUFOVF9ESUcgc2lnbmlmaWNhbnQgYml0cyB1c2luZyByb3VuZC1oYWxmLXRvLWV2ZW4uCisgICBJZiBhID09IDAsIHJldHVybiAwLjAgYW5kIHNldCAqZSA9IDAuICBJZiB0aGUgcmVzdWx0aW5nIGV4cG9uZW50CisgICBlIGlzIGxhcmdlciB0aGFuIFBZX1NTSVpFX1RfTUFYLCByYWlzZSBPdmVyZmxvd0Vycm9yIGFuZCByZXR1cm4KKyAgIC0xLjAuICovCisKKy8qIGF0dGVtcHQgdG8gZGVmaW5lIDIuMCoqREJMX01BTlRfRElHIGFzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50ICovCisjaWYgREJMX01BTlRfRElHID09IDUzCisjZGVmaW5lIEVYUDJfREJMX01BTlRfRElHIDkwMDcxOTkyNTQ3NDA5OTIuMAorI2Vsc2UKKyNkZWZpbmUgRVhQMl9EQkxfTUFOVF9ESUcgKGxkZXhwKDEuMCwgREJMX01BTlRfRElHKSkKKyNlbmRpZgorCitkb3VibGUKK19QeUxvbmdfRnJleHAoUHlMb25nT2JqZWN0ICphLCBQeV9zc2l6ZV90ICplKQoreworICAgIFB5X3NzaXplX3QgYV9zaXplLCBhX2JpdHMsIHNoaWZ0X2RpZ2l0cywgc2hpZnRfYml0cywgeF9zaXplOworICAgIC8qIFNlZSBiZWxvdyBmb3Igd2h5IHhfZGlnaXRzIGlzIGFsd2F5cyBsYXJnZSBlbm91Z2guICovCisgICAgZGlnaXQgcmVtLCB4X2RpZ2l0c1syICsgKERCTF9NQU5UX0RJRyArIDEpIC8gUHlMb25nX1NISUZUXTsKKyAgICBkb3VibGUgZHg7CisgICAgLyogQ29ycmVjdGlvbiB0ZXJtIGZvciByb3VuZC1oYWxmLXRvLWV2ZW4gcm91bmRpbmcuICBGb3IgYSBkaWdpdCB4LAorICAgICAgICJ4ICsgaGFsZl9ldmVuX2NvcnJlY3Rpb25beCAmIDddIiBnaXZlcyB4IHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QKKyAgICAgICBtdWx0aXBsZSBvZiA0LCByb3VuZGluZyB0aWVzIHRvIGEgbXVsdGlwbGUgb2YgOC4gKi8KKyAgICBzdGF0aWMgY29uc3QgaW50IGhhbGZfZXZlbl9jb3JyZWN0aW9uWzhdID0gezAsIC0xLCAtMiwgMSwgMCwgLTEsIDIsIDF9OworCisgICAgYV9zaXplID0gQUJTKFB5X1NJWkUoYSkpOworICAgIGlmIChhX3NpemUgPT0gMCkgeworICAgICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIDA6IHNpZ25pZmljYW5kIDAuMCwgZXhwb25lbnQgMC4gKi8KKyAgICAgICAgKmUgPSAwOworICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKyAgICBhX2JpdHMgPSBiaXRzX2luX2RpZ2l0KGEtPm9iX2RpZ2l0W2Ffc2l6ZS0xXSk7CisgICAgLyogVGhlIGZvbGxvd2luZyBpcyBhbiBvdmVyZmxvdy1mcmVlIHZlcnNpb24gb2YgdGhlIGNoZWNrCisgICAgICAgImlmICgoYV9zaXplIC0gMSkgKiBQeUxvbmdfU0hJRlQgKyBhX2JpdHMgPiBQWV9TU0laRV9UX01BWCkgLi4uIiAqLworICAgIGlmIChhX3NpemUgPj0gKFBZX1NTSVpFX1RfTUFYIC0gMSkgLyBQeUxvbmdfU0hJRlQgKyAxICYmCisgICAgICAgIChhX3NpemUgPiAoUFlfU1NJWkVfVF9NQVggLSAxKSAvIFB5TG9uZ19TSElGVCArIDEgfHwKKyAgICAgICAgIGFfYml0cyA+IChQWV9TU0laRV9UX01BWCAtIDEpICUgUHlMb25nX1NISUZUICsgMSkpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgYV9iaXRzID0gKGFfc2l6ZSAtIDEpICogUHlMb25nX1NISUZUICsgYV9iaXRzOworCisgICAgLyogU2hpZnQgdGhlIGZpcnN0IERCTF9NQU5UX0RJRyArIDIgYml0cyBvZiBhIGludG8geF9kaWdpdHNbMDp4X3NpemVdCisgICAgICAgKHNoaWZ0aW5nIGxlZnQgaWYgYV9iaXRzIDw9IERCTF9NQU5UX0RJRyArIDIpLgorCisgICAgICAgTnVtYmVyIG9mIGRpZ2l0cyBuZWVkZWQgZm9yIHJlc3VsdDogd3JpdGUgLy8gZm9yIGZsb29yIGRpdmlzaW9uLgorICAgICAgIFRoZW4gaWYgc2hpZnRpbmcgbGVmdCwgd2UgZW5kIHVwIHVzaW5nCisKKyAgICAgICAgIDEgKyBhX3NpemUgKyAoREJMX01BTlRfRElHICsgMiAtIGFfYml0cykgLy8gUHlMb25nX1NISUZUCisKKyAgICAgICBkaWdpdHMuICBJZiBzaGlmdGluZyByaWdodCwgd2UgdXNlCisKKyAgICAgICAgIGFfc2l6ZSAtIChhX2JpdHMgLSBEQkxfTUFOVF9ESUcgLSAyKSAvLyBQeUxvbmdfU0hJRlQKKworICAgICAgIGRpZ2l0cy4gIFVzaW5nIGFfc2l6ZSA9IDEgKyAoYV9iaXRzIC0gMSkgLy8gUHlMb25nX1NISUZUIGFsb25nIHdpdGgKKyAgICAgICB0aGUgaW5lcXVhbGl0aWVzCisKKyAgICAgICAgIG0gLy8gUHlMb25nX1NISUZUICsgbiAvLyBQeUxvbmdfU0hJRlQgPD0gKG0gKyBuKSAvLyBQeUxvbmdfU0hJRlQKKyAgICAgICAgIG0gLy8gUHlMb25nX1NISUZUIC0gbiAvLyBQeUxvbmdfU0hJRlQgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyAobSAtIG4gLSAxKSAvLyBQeUxvbmdfU0hJRlQsCisKKyAgICAgICB2YWxpZCBmb3IgYW55IGludGVnZXJzIG0gYW5kIG4sIHdlIGZpbmQgdGhhdCB4X3NpemUgc2F0aXNmaWVzCisKKyAgICAgICAgIHhfc2l6ZSA8PSAyICsgKERCTF9NQU5UX0RJRyArIDEpIC8vIFB5TG9uZ19TSElGVAorCisgICAgICAgaW4gYm90aCBjYXNlcy4KKyAgICAqLworICAgIGlmIChhX2JpdHMgPD0gREJMX01BTlRfRElHICsgMikgeworICAgICAgICBzaGlmdF9kaWdpdHMgPSAoREJMX01BTlRfRElHICsgMiAtIGFfYml0cykgLyBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHNoaWZ0X2JpdHMgPSAoREJMX01BTlRfRElHICsgMiAtIGFfYml0cykgJSBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHhfc2l6ZSA9IDA7CisgICAgICAgIHdoaWxlICh4X3NpemUgPCBzaGlmdF9kaWdpdHMpCisgICAgICAgICAgICB4X2RpZ2l0c1t4X3NpemUrK10gPSAwOworICAgICAgICByZW0gPSB2X2xzaGlmdCh4X2RpZ2l0cyArIHhfc2l6ZSwgYS0+b2JfZGlnaXQsIGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGludClzaGlmdF9iaXRzKTsKKyAgICAgICAgeF9zaXplICs9IGFfc2l6ZTsKKyAgICAgICAgeF9kaWdpdHNbeF9zaXplKytdID0gcmVtOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2hpZnRfZGlnaXRzID0gKGFfYml0cyAtIERCTF9NQU5UX0RJRyAtIDIpIC8gUHlMb25nX1NISUZUOworICAgICAgICBzaGlmdF9iaXRzID0gKGFfYml0cyAtIERCTF9NQU5UX0RJRyAtIDIpICUgUHlMb25nX1NISUZUOworICAgICAgICByZW0gPSB2X3JzaGlmdCh4X2RpZ2l0cywgYS0+b2JfZGlnaXQgKyBzaGlmdF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGFfc2l6ZSAtIHNoaWZ0X2RpZ2l0cywgKGludClzaGlmdF9iaXRzKTsKKyAgICAgICAgeF9zaXplID0gYV9zaXplIC0gc2hpZnRfZGlnaXRzOworICAgICAgICAvKiBGb3IgY29ycmVjdCByb3VuZGluZyBiZWxvdywgd2UgbmVlZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAgICAgICAgICAgYml0IG9mIHggdG8gYmUgJ3N0aWNreScgZm9yIHRoaXMgc2hpZnQ6IGlmIGFueSBvZiB0aGUgYml0cworICAgICAgICAgICBzaGlmdGVkIG91dCB3YXMgbm9uemVybywgd2Ugc2V0IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKyAgICAgICAgICAgb2YgeC4gKi8KKyAgICAgICAgaWYgKHJlbSkKKyAgICAgICAgICAgIHhfZGlnaXRzWzBdIHw9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdoaWxlIChzaGlmdF9kaWdpdHMgPiAwKQorICAgICAgICAgICAgICAgIGlmIChhLT5vYl9kaWdpdFstLXNoaWZ0X2RpZ2l0c10pIHsKKyAgICAgICAgICAgICAgICAgICAgeF9kaWdpdHNbMF0gfD0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgIH0KKyAgICBhc3NlcnQoMSA8PSB4X3NpemUgJiYKKyAgICAgICAgICAgeF9zaXplIDw9IChQeV9zc2l6ZV90KShzaXplb2YoeF9kaWdpdHMpL3NpemVvZihkaWdpdCkpKTsKKworICAgIC8qIFJvdW5kLCBhbmQgY29udmVydCB0byBkb3VibGUuICovCisgICAgeF9kaWdpdHNbMF0gKz0gaGFsZl9ldmVuX2NvcnJlY3Rpb25beF9kaWdpdHNbMF0gJiA3XTsKKyAgICBkeCA9IHhfZGlnaXRzWy0teF9zaXplXTsKKyAgICB3aGlsZSAoeF9zaXplID4gMCkKKyAgICAgICAgZHggPSBkeCAqIFB5TG9uZ19CQVNFICsgeF9kaWdpdHNbLS14X3NpemVdOworCisgICAgLyogUmVzY2FsZTsgIG1ha2UgY29ycmVjdGlvbiBpZiByZXN1bHQgaXMgMS4wLiAqLworICAgIGR4IC89IDQuMCAqIEVYUDJfREJMX01BTlRfRElHOworICAgIGlmIChkeCA9PSAxLjApIHsKKyAgICAgICAgaWYgKGFfYml0cyA9PSBQWV9TU0laRV9UX01BWCkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgIGR4ID0gMC41OworICAgICAgICBhX2JpdHMgKz0gMTsKKyAgICB9CisKKyAgICAqZSA9IGFfYml0czsKKyAgICByZXR1cm4gUHlfU0laRShhKSA8IDAgPyAtZHggOiBkeDsKKworICBvdmVyZmxvdzoKKyAgICAvKiBleHBvbmVudCA+IFBZX1NTSVpFX1RfTUFYICovCisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJodWdlIGludGVnZXI6IG51bWJlciBvZiBiaXRzIG92ZXJmbG93cyBhIFB5X3NzaXplX3QiKTsKKyAgICAqZSA9IDA7CisgICAgcmV0dXJuIC0xLjA7Cit9CisKKy8qIEdldCBhIEMgZG91YmxlIGZyb20gYSBsb25nIGludCBvYmplY3QuICBSb3VuZHMgdG8gdGhlIG5lYXJlc3QgZG91YmxlLAorICAgdXNpbmcgdGhlIHJvdW5kLWhhbGYtdG8tZXZlbiBydWxlIGluIHRoZSBjYXNlIG9mIGEgdGllLiAqLworCitkb3VibGUKK1B5TG9uZ19Bc0RvdWJsZShQeU9iamVjdCAqdikKK3sKKyAgICBQeV9zc2l6ZV90IGV4cG9uZW50OworICAgIGRvdWJsZSB4OworCisgICAgaWYgKHYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTEuMDsKKyAgICB9CisgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKXYsICZleHBvbmVudCk7CisgICAgaWYgKCh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgZXhwb25lbnQgPiBEQkxfTUFYX0VYUCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOworICAgICAgICByZXR1cm4gLTEuMDsKKyAgICB9CisgICAgcmV0dXJuIGxkZXhwKHgsIChpbnQpZXhwb25lbnQpOwogfQogCiAvKiBNZXRob2RzICovCkBAIC0xOTQwLDEwICsyMzUzLDcgQEAKICAgICBQeV9zc2l6ZV90IHNpZ247CiAKICAgICBpZiAoUHlfU0laRShhKSAhPSBQeV9TSVpFKGIpKSB7Ci0gICAgICAgIGlmIChBQlMoUHlfU0laRShhKSkgPT0gMCAmJiBBQlMoUHlfU0laRShiKSkgPT0gMCkKLSAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaWduID0gUHlfU0laRShhKSAtIFB5X1NJWkUoYik7CisgICAgICAgIHNpZ24gPSBQeV9TSVpFKGEpIC0gUHlfU0laRShiKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X3NzaXplX3QgaSA9IEFCUyhQeV9TSVpFKGEpKTsKQEAgLTE5NTIsNyArMjM2Miw3IEBACiAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgIHNpZ24gPSAwOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpZ24gPSAoaW50KWEtPm9iX2RpZ2l0W2ldIC0gKGludCliLT5vYl9kaWdpdFtpXTsKKyAgICAgICAgICAgIHNpZ24gPSAoc2RpZ2l0KWEtPm9iX2RpZ2l0W2ldIC0gKHNkaWdpdCliLT5vYl9kaWdpdFtpXTsKICAgICAgICAgICAgIGlmIChQeV9TSVpFKGEpIDwgMCkKICAgICAgICAgICAgICAgICBzaWduID0gLXNpZ247CiAgICAgICAgIH0KQEAgLTE5NzcsMTQgKzIzODcsMTIgQEAKICAgICAgICAgc2lnbiA9IC0xOwogICAgICAgICBpID0gLShpKTsKICAgICB9Ci0jZGVmaW5lIExPTkdfQklUX1B5TG9uZ19TSElGVCAgICg4KnNpemVvZihsb25nKSAtIFB5TG9uZ19TSElGVCkKICAgICAvKiBUaGUgZm9sbG93aW5nIGxvb3AgcHJvZHVjZXMgYSBDIHVuc2lnbmVkIGxvbmcgeCBzdWNoIHRoYXQgeCBpcwogICAgICAgIGNvbmdydWVudCB0byB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdiBtb2R1bG8gVUxPTkdfTUFYLiAgVGhlCiAgICAgICAgcmVzdWx0aW5nIHggaXMgbm9uemVybyBpZiBhbmQgb25seSBpZiB2IGlzLiAqLwogICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICAgICAvKiBGb3JjZSBhIG5hdGl2ZSBsb25nICMtYml0cyAoMzIgb3IgNjQpIGNpcmN1bGFyIHNoaWZ0ICovCi0gICAgICAgIHggPSAoKHggPDwgUHlMb25nX1NISUZUKSAmIH5QeUxvbmdfTUFTSykgfAotICAgICAgICAgICAgKCh4ID4+IExPTkdfQklUX1B5TG9uZ19TSElGVCkgJiBQeUxvbmdfTUFTSyk7CisgICAgICAgIHggPSAoeCA+PiAoOCpTSVpFT0ZfTE9ORy1QeUxvbmdfU0hJRlQpKSB8ICh4IDw8IFB5TG9uZ19TSElGVCk7CiAgICAgICAgIHggKz0gdi0+b2JfZGlnaXRbaV07CiAgICAgICAgIC8qIElmIHRoZSBhZGRpdGlvbiBhYm92ZSBvdmVyZmxvd2VkIHdlIGNvbXBlbnNhdGUgYnkKICAgICAgICAgICAgaW5jcmVtZW50aW5nLiAgVGhpcyBwcmVzZXJ2ZXMgdGhlIHZhbHVlIG1vZHVsbwpAQCAtMTk5MiwxMSArMjQwMCwxMCBAQAogICAgICAgICBpZiAoeCA8IHYtPm9iX2RpZ2l0W2ldKQogICAgICAgICAgICAgeCsrOwogICAgIH0KLSN1bmRlZiBMT05HX0JJVF9QeUxvbmdfU0hJRlQKICAgICB4ID0geCAqIHNpZ247Ci0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKLSAgICByZXR1cm4geDsKKyAgICBpZiAoeCA9PSAodW5zaWduZWQgbG9uZyktMSkKKyAgICAgICAgeCA9ICh1bnNpZ25lZCBsb25nKS0yOworICAgIHJldHVybiAobG9uZyl4OwogfQogCiAKQEAgLTIwMTQsOCArMjQyMSw4IEBACiAgICAgaWYgKHNpemVfYSA8IHNpemVfYikgewogICAgICAgICB7IFB5TG9uZ09iamVjdCAqdGVtcCA9IGE7IGEgPSBiOyBiID0gdGVtcDsgfQogICAgICAgICB7IFB5X3NzaXplX3Qgc2l6ZV90ZW1wID0gc2l6ZV9hOwotICAgICAgICAgIHNpemVfYSA9IHNpemVfYjsKLSAgICAgICAgICBzaXplX2IgPSBzaXplX3RlbXA7IH0KKyAgICAgICAgICAgIHNpemVfYSA9IHNpemVfYjsKKyAgICAgICAgICAgIHNpemVfYiA9IHNpemVfdGVtcDsgfQogICAgIH0KICAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV9hKzEpOwogICAgIGlmICh6ID09IE5VTEwpCkBAIC0yMDUwLDggKzI0NTcsOCBAQAogICAgICAgICBzaWduID0gLTE7CiAgICAgICAgIHsgUHlMb25nT2JqZWN0ICp0ZW1wID0gYTsgYSA9IGI7IGIgPSB0ZW1wOyB9CiAgICAgICAgIHsgUHlfc3NpemVfdCBzaXplX3RlbXAgPSBzaXplX2E7Ci0gICAgICAgICAgc2l6ZV9hID0gc2l6ZV9iOwotICAgICAgICAgIHNpemVfYiA9IHNpemVfdGVtcDsgfQorICAgICAgICAgICAgc2l6ZV9hID0gc2l6ZV9iOworICAgICAgICAgICAgc2l6ZV9iID0gc2l6ZV90ZW1wOyB9CiAgICAgfQogICAgIGVsc2UgaWYgKHNpemVfYSA9PSBzaXplX2IpIHsKICAgICAgICAgLyogRmluZCBoaWdoZXN0IGRpZ2l0IHdoZXJlIGEgYW5kIGIgZGlmZmVyOiAqLwpAQCAtMjE3Myw5ICsyNTgwLDkgQEAKICAgICAgICAgICAgIGRpZ2l0ICpwYWVuZCA9IGEtPm9iX2RpZ2l0ICsgc2l6ZV9hOwogCiAgICAgICAgICAgICBTSUdDSEVDSyh7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHopOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgY2FycnkgPSAqcHogKyBmICogZjsKICAgICAgICAgICAgICpweisrID0gKGRpZ2l0KShjYXJyeSAmIFB5TG9uZ19NQVNLKTsKQEAgLTIyMTEsOSArMjYxOCw5IEBACiAgICAgICAgICAgICBkaWdpdCAqcGJlbmQgPSBiLT5vYl9kaWdpdCArIHNpemVfYjsKIAogICAgICAgICAgICAgU0lHQ0hFQ0soewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIHdoaWxlIChwYiA8IHBiZW5kKSB7CiAgICAgICAgICAgICAgICAgY2FycnkgKz0gKnB6ICsgKnBiKysgKiBmOwpAQCAtMjIzNyw3ICsyNjQ0LDEwIEBACiAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KICovCiBzdGF0aWMgaW50Ci1rbXVsX3NwbGl0KFB5TG9uZ09iamVjdCAqbiwgUHlfc3NpemVfdCBzaXplLCBQeUxvbmdPYmplY3QgKipoaWdoLCBQeUxvbmdPYmplY3QgKipsb3cpCitrbXVsX3NwbGl0KFB5TG9uZ09iamVjdCAqbiwKKyAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLAorICAgICAgICAgICBQeUxvbmdPYmplY3QgKipoaWdoLAorICAgICAgICAgICBQeUxvbmdPYmplY3QgKipsb3cpCiB7CiAgICAgUHlMb25nT2JqZWN0ICpoaSwgKmxvOwogICAgIFB5X3NzaXplX3Qgc2l6ZV9sbywgc2l6ZV9oaTsKQEAgLTI0MjYsNyArMjgzNiw3IEBACiAKICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUocmV0KTsKIAotIGZhaWw6CisgIGZhaWw6CiAgICAgUHlfWERFQ1JFRihyZXQpOwogICAgIFB5X1hERUNSRUYoYWgpOwogICAgIFB5X1hERUNSRUYoYWwpOwpAQCAtMjUzNiw3ICsyOTQ2LDcgQEAKICAgICBQeV9ERUNSRUYoYnNsaWNlKTsKICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUocmV0KTsKIAotIGZhaWw6CisgIGZhaWw6CiAgICAgUHlfREVDUkVGKHJldCk7CiAgICAgUHlfWERFQ1JFRihic2xpY2UpOwogICAgIHJldHVybiBOVUxMOwpAQCAtMjY1NSw1MCArMzA2NSwyNzEgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopZGl2OwogfQogCisvKiBQeUxvbmcvUHlMb25nIC0+IGZsb2F0LCB3aXRoIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdC4gKi8KKworI2RlZmluZSBNQU5UX0RJR19ESUdJVFMgKERCTF9NQU5UX0RJRyAvIFB5TG9uZ19TSElGVCkKKyNkZWZpbmUgTUFOVF9ESUdfQklUUyAoREJMX01BTlRfRElHICUgUHlMb25nX1NISUZUKQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ190cnVlX2RpdmlkZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7Ci0gICAgUHlMb25nT2JqZWN0ICphLCAqYjsKLSAgICBkb3VibGUgYWQsIGJkOwotICAgIGludCBmYWlsZWQsIGFleHAgPSAtMSwgYmV4cCA9IC0xOworICAgIFB5TG9uZ09iamVjdCAqYSwgKmIsICp4OworICAgIFB5X3NzaXplX3QgYV9zaXplLCBiX3NpemUsIHNoaWZ0LCBleHRyYV9iaXRzLCBkaWZmLCB4X3NpemUsIHhfYml0czsKKyAgICBkaWdpdCBtYXNrLCBsb3c7CisgICAgaW50IGluZXhhY3QsIG5lZ2F0ZSwgYV9pc19zbWFsbCwgYl9pc19zbWFsbDsKKyAgICBkb3VibGUgZHgsIHJlc3VsdDsKIAogICAgIENPTlZFUlRfQklOT1AodiwgdywgJmEsICZiKTsKLSAgICBhZCA9IF9QeUxvbmdfQXNTY2FsZWREb3VibGUoKFB5T2JqZWN0ICopYSwgJmFleHApOwotICAgIGJkID0gX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSgoUHlPYmplY3QgKiliLCAmYmV4cCk7Ci0gICAgZmFpbGVkID0gKGFkID09IC0xLjAgfHwgYmQgPT0gLTEuMCkgJiYgUHlFcnJfT2NjdXJyZWQoKTsKLSAgICBQeV9ERUNSRUYoYSk7Ci0gICAgUHlfREVDUkVGKGIpOwotICAgIGlmIChmYWlsZWQpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIC8qICdhZXhwJyBhbmQgJ2JleHAnIHdlcmUgaW5pdGlhbGl6ZWQgdG8gLTEgdG8gc2lsZW5jZSBnY2MtNC4wLngsCi0gICAgICAgYnV0IHNob3VsZCByZWFsbHkgYmUgc2V0IGNvcnJlY3RseSBhZnRlciBzdWNlc3NmdWwgY2FsbHMgdG8KLSAgICAgICBfUHlMb25nX0FzU2NhbGVkRG91YmxlKCkgKi8KLSAgICBhc3NlcnQoYWV4cCA+PSAwICYmIGJleHAgPj0gMCk7CiAKLSAgICBpZiAoYmQgPT0gMC4wKSB7CisgICAgLyoKKyAgICAgICBNZXRob2QgaW4gYSBudXRzaGVsbDoKKworICAgICAgICAgMC4gcmVkdWNlIHRvIGNhc2UgYSwgYiA+IDA7IGZpbHRlciBvdXQgb2J2aW91cyB1bmRlcmZsb3cvb3ZlcmZsb3cKKyAgICAgICAgIDEuIGNob29zZSBhIHN1aXRhYmxlIGludGVnZXIgJ3NoaWZ0JworICAgICAgICAgMi4gdXNlIGludGVnZXIgYXJpdGhtZXRpYyB0byBjb21wdXRlIHggPSBmbG9vcigyKiotc2hpZnQqYS9iKQorICAgICAgICAgMy4gYWRqdXN0IHggZm9yIGNvcnJlY3Qgcm91bmRpbmcKKyAgICAgICAgIDQuIGNvbnZlcnQgeCB0byBhIGRvdWJsZSBkeCB3aXRoIHRoZSBzYW1lIHZhbHVlCisgICAgICAgICA1LiByZXR1cm4gbGRleHAoZHgsIHNoaWZ0KS4KKworICAgICAgIEluIG1vcmUgZGV0YWlsOgorCisgICAgICAgMC4gRm9yIGFueSBhLCBhLzAgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yOyBmb3Igbm9uemVybyBiLCAwL2IKKyAgICAgICByZXR1cm5zIGVpdGhlciAwLjAgb3IgLTAuMCwgZGVwZW5kaW5nIG9uIHRoZSBzaWduIG9mIGIuICBGb3IgYSBhbmQKKyAgICAgICBiIGJvdGggbm9uemVybywgaWdub3JlIHNpZ25zIG9mIGEgYW5kIGIsIGFuZCBhZGQgdGhlIHNpZ24gYmFjayBpbgorICAgICAgIGF0IHRoZSBlbmQuICBOb3cgd3JpdGUgYV9iaXRzIGFuZCBiX2JpdHMgZm9yIHRoZSBiaXQgbGVuZ3RocyBvZiBhCisgICAgICAgYW5kIGIgcmVzcGVjdGl2ZWx5ICh0aGF0IGlzLCBhX2JpdHMgPSAxICsgZmxvb3IobG9nXzIoYSkpOyBsaWtld2lzZQorICAgICAgIGZvciBiKS4gIFRoZW4KKworICAgICAgICAgIDIqKihhX2JpdHMgLSBiX2JpdHMgLSAxKSA8IGEvYiA8IDIqKihhX2JpdHMgLSBiX2JpdHMgKyAxKS4KKworICAgICAgIFNvIGlmIGFfYml0cyAtIGJfYml0cyA+IERCTF9NQVhfRVhQIHRoZW4gYS9iID4gMioqREJMX01BWF9FWFAgYW5kCisgICAgICAgc28gb3ZlcmZsb3dzLiAgU2ltaWxhcmx5LCBpZiBhX2JpdHMgLSBiX2JpdHMgPCBEQkxfTUlOX0VYUCAtCisgICAgICAgREJMX01BTlRfRElHIC0gMSB0aGVuIGEvYiB1bmRlcmZsb3dzIHRvIDAuICBXaXRoIHRoZXNlIGNhc2VzIG91dCBvZgorICAgICAgIHRoZSB3YXksIHdlIGNhbiBhc3N1bWUgdGhhdAorCisgICAgICAgICAgREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxIDw9IGFfYml0cyAtIGJfYml0cyA8PSBEQkxfTUFYX0VYUC4KKworICAgICAgIDEuIFRoZSBpbnRlZ2VyICdzaGlmdCcgaXMgY2hvc2VuIHNvIHRoYXQgeCBoYXMgdGhlIHJpZ2h0IG51bWJlciBvZgorICAgICAgIGJpdHMgZm9yIGEgZG91YmxlLCBwbHVzIHR3byBvciB0aHJlZSBleHRyYSBiaXRzIHRoYXQgd2lsbCBiZSB1c2VkCisgICAgICAgaW4gdGhlIHJvdW5kaW5nIGRlY2lzaW9ucy4gIFdyaXRpbmcgYV9iaXRzIGFuZCBiX2JpdHMgZm9yIHRoZQorICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBiaXRzIGluIGEgYW5kIGIgcmVzcGVjdGl2ZWx5LCBhCisgICAgICAgc3RyYWlnaHRmb3J3YXJkIGZvcm11bGEgZm9yIHNoaWZ0IGlzOgorCisgICAgICAgICAgc2hpZnQgPSBhX2JpdHMgLSBiX2JpdHMgLSBEQkxfTUFOVF9ESUcgLSAyCisKKyAgICAgICBUaGlzIGlzIGZpbmUgaW4gdGhlIHVzdWFsIGNhc2UsIGJ1dCBpZiBhL2IgaXMgc21hbGxlciB0aGFuIHRoZQorICAgICAgIHNtYWxsZXN0IG5vcm1hbCBmbG9hdCB0aGVuIGl0IGNhbiBsZWFkIHRvIGRvdWJsZSByb3VuZGluZyBvbiBhbgorICAgICAgIElFRUUgNzU0IHBsYXRmb3JtLCBnaXZpbmcgaW5jb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzLiAgU28gd2UKKyAgICAgICBhZGp1c3QgdGhlIGZvcm11bGEgc2xpZ2h0bHkuICBUaGUgYWN0dWFsIGZvcm11bGEgdXNlZCBpczoKKworICAgICAgICAgICBzaGlmdCA9IE1BWChhX2JpdHMgLSBiX2JpdHMsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRyAtIDIKKworICAgICAgIDIuIFRoZSBxdWFudGl0eSB4IGlzIGNvbXB1dGVkIGJ5IGZpcnN0IHNoaWZ0aW5nIGEgKGxlZnQgLXNoaWZ0IGJpdHMKKyAgICAgICBpZiBzaGlmdCA8PSAwLCByaWdodCBzaGlmdCBiaXRzIGlmIHNoaWZ0ID4gMCkgYW5kIHRoZW4gZGl2aWRpbmcgYnkKKyAgICAgICBiLiAgRm9yIGJvdGggdGhlIHNoaWZ0IGFuZCB0aGUgZGl2aXNpb24sIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlcgorICAgICAgIHRoZSByZXN1bHQgaXMgaW5leGFjdCwgaW4gYSBmbGFnICdpbmV4YWN0JzsgdGhpcyBpbmZvcm1hdGlvbiBpcworICAgICAgIG5lZWRlZCBhdCB0aGUgcm91bmRpbmcgc3RhZ2UuCisKKyAgICAgICBXaXRoIHRoZSBjaG9pY2Ugb2Ygc2hpZnQgYWJvdmUsIHRvZ2V0aGVyIHdpdGggb3VyIGFzc3VtcHRpb24gdGhhdAorICAgICAgIGFfYml0cyAtIGJfYml0cyA+PSBEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIDEsIGl0IGZvbGxvd3MKKyAgICAgICB0aGF0IHggPj0gMS4KKworICAgICAgIDMuIE5vdyB4ICogMioqc2hpZnQgPD0gYS9iIDwgKHgrMSkgKiAyKipzaGlmdC4gIFdlIHdhbnQgdG8gcmVwbGFjZQorICAgICAgIHRoaXMgd2l0aCBhbiBleGFjdGx5IHJlcHJlc2VudGFibGUgZmxvYXQgb2YgdGhlIGZvcm0KKworICAgICAgICAgIHJvdW5kKHgvMioqZXh0cmFfYml0cykgKiAyKiooZXh0cmFfYml0cytzaGlmdCkuCisKKyAgICAgICBGb3IgZmxvYXQgcmVwcmVzZW50YWJpbGl0eSwgd2UgbmVlZCB4LzIqKmV4dHJhX2JpdHMgPAorICAgICAgIDIqKkRCTF9NQU5UX0RJRyBhbmQgZXh0cmFfYml0cyArIHNoaWZ0ID49IERCTF9NSU5fRVhQIC0KKyAgICAgICBEQkxfTUFOVF9ESUcuICBUaGlzIHRyYW5zbGF0ZXMgdG8gdGhlIGNvbmRpdGlvbjoKKworICAgICAgICAgIGV4dHJhX2JpdHMgPj0gTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUcKKworICAgICAgIFRvIHJvdW5kLCB3ZSBqdXN0IG1vZGlmeSB0aGUgYm90dG9tIGRpZ2l0IG9mIHggaW4tcGxhY2U7IHRoaXMgY2FuCisgICAgICAgZW5kIHVwIGdpdmluZyBhIGRpZ2l0IHdpdGggdmFsdWUgPiBQeUxPTkdfTUFTSywgYnV0IHRoYXQncyBub3QgYQorICAgICAgIHByb2JsZW0gc2luY2UgZGlnaXRzIGNhbiBob2xkIHZhbHVlcyB1cCB0byAyKlB5TE9OR19NQVNLKzEuCisKKyAgICAgICBXaXRoIHRoZSBvcmlnaW5hbCBjaG9pY2VzIGZvciBzaGlmdCBhYm92ZSwgZXh0cmFfYml0cyB3aWxsIGFsd2F5cworICAgICAgIGJlIDIgb3IgMy4gIFRoZW4gcm91bmRpbmcgdW5kZXIgdGhlIHJvdW5kLWhhbGYtdG8tZXZlbiBydWxlLCB3ZQorICAgICAgIHJvdW5kIHVwIGlmZiB0aGUgbW9zdCBzaWduaWZpY2FudCBvZiB0aGUgZXh0cmEgYml0cyBpcyAxLCBhbmQKKyAgICAgICBlaXRoZXI6IChhKSB0aGUgY29tcHV0YXRpb24gb2YgeCBpbiBzdGVwIDIgaGFkIGFuIGluZXhhY3QgcmVzdWx0LAorICAgICAgIG9yIChiKSBhdCBsZWFzdCBvbmUgb3RoZXIgb2YgdGhlIGV4dHJhIGJpdHMgaXMgMSwgb3IgKGMpIHRoZSBsZWFzdAorICAgICAgIHNpZ25pZmljYW50IGJpdCBvZiB4IChhYm92ZSB0aG9zZSB0byBiZSByb3VuZGVkKSBpcyAxLgorCisgICAgICAgNC4gQ29udmVyc2lvbiB0byBhIGRvdWJsZSBpcyBzdHJhaWdodGZvcndhcmQ7IGFsbCBmbG9hdGluZy1wb2ludAorICAgICAgIG9wZXJhdGlvbnMgaW52b2x2ZWQgaW4gdGhlIGNvbnZlcnNpb24gYXJlIGV4YWN0LCBzbyB0aGVyZSdzIG5vCisgICAgICAgZGFuZ2VyIG9mIHJvdW5kaW5nIGVycm9ycy4KKworICAgICAgIDUuIFVzZSBsZGV4cCh4LCBzaGlmdCkgdG8gY29tcHV0ZSB4KjIqKnNoaWZ0LCB0aGUgZmluYWwgcmVzdWx0LgorICAgICAgIFRoZSByZXN1bHQgd2lsbCBhbHdheXMgYmUgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGEgZG91YmxlLCBleGNlcHQKKyAgICAgICBpbiB0aGUgY2FzZSB0aGF0IGl0IG92ZXJmbG93cy4gIFRvIGF2b2lkIGRlcGVuZGVuY2Ugb24gdGhlIGV4YWN0CisgICAgICAgYmVoYXZpb3VyIG9mIGxkZXhwIG9uIG92ZXJmbG93LCB3ZSBjaGVjayBmb3Igb3ZlcmZsb3cgYmVmb3JlCisgICAgICAgYXBwbHlpbmcgbGRleHAuICBUaGUgcmVzdWx0IG9mIGxkZXhwIGlzIGFkanVzdGVkIGZvciBzaWduIGJlZm9yZQorICAgICAgIHJldHVybmluZy4KKyAgICAqLworCisgICAgLyogUmVkdWNlIHRvIGNhc2Ugd2hlcmUgYSBhbmQgYiBhcmUgYm90aCBwb3NpdGl2ZS4gKi8KKyAgICBhX3NpemUgPSBBQlMoUHlfU0laRShhKSk7CisgICAgYl9zaXplID0gQUJTKFB5X1NJWkUoYikpOworICAgIG5lZ2F0ZSA9IChQeV9TSVpFKGEpIDwgMCkgXiAoUHlfU0laRShiKSA8IDApOworICAgIGlmIChiX3NpemUgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsCi0gICAgICAgICAgICAibG9uZyBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXZpc2lvbiBieSB6ZXJvIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChhX3NpemUgPT0gMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKKworICAgIC8qIEZhc3QgcGF0aCBmb3IgYSBhbmQgYiBzbWFsbCAoZXhhY3RseSByZXByZXNlbnRhYmxlIGluIGEgZG91YmxlKS4KKyAgICAgICBSZWxpZXMgb24gZmxvYXRpbmctcG9pbnQgZGl2aXNpb24gYmVpbmcgY29ycmVjdGx5IHJvdW5kZWQ7IHJlc3VsdHMKKyAgICAgICBtYXkgYmUgc3ViamVjdCB0byBkb3VibGUgcm91bmRpbmcgb24geDg2IG1hY2hpbmVzIHRoYXQgb3BlcmF0ZSB3aXRoCisgICAgICAgdGhlIHg4NyBGUFUgc2V0IHRvIDY0LWJpdCBwcmVjaXNpb24uICovCisgICAgYV9pc19zbWFsbCA9IGFfc2l6ZSA8PSBNQU5UX0RJR19ESUdJVFMgfHwKKyAgICAgICAgKGFfc2l6ZSA9PSBNQU5UX0RJR19ESUdJVFMrMSAmJgorICAgICAgICAgYS0+b2JfZGlnaXRbTUFOVF9ESUdfRElHSVRTXSA+PiBNQU5UX0RJR19CSVRTID09IDApOworICAgIGJfaXNfc21hbGwgPSBiX3NpemUgPD0gTUFOVF9ESUdfRElHSVRTIHx8CisgICAgICAgIChiX3NpemUgPT0gTUFOVF9ESUdfRElHSVRTKzEgJiYKKyAgICAgICAgIGItPm9iX2RpZ2l0W01BTlRfRElHX0RJR0lUU10gPj4gTUFOVF9ESUdfQklUUyA9PSAwKTsKKyAgICBpZiAoYV9pc19zbWFsbCAmJiBiX2lzX3NtYWxsKSB7CisgICAgICAgIGRvdWJsZSBkYSwgZGI7CisgICAgICAgIGRhID0gYS0+b2JfZGlnaXRbLS1hX3NpemVdOworICAgICAgICB3aGlsZSAoYV9zaXplID4gMCkKKyAgICAgICAgICAgIGRhID0gZGEgKiBQeUxvbmdfQkFTRSArIGEtPm9iX2RpZ2l0Wy0tYV9zaXplXTsKKyAgICAgICAgZGIgPSBiLT5vYl9kaWdpdFstLWJfc2l6ZV07CisgICAgICAgIHdoaWxlIChiX3NpemUgPiAwKQorICAgICAgICAgICAgZGIgPSBkYiAqIFB5TG9uZ19CQVNFICsgYi0+b2JfZGlnaXRbLS1iX3NpemVdOworICAgICAgICByZXN1bHQgPSBkYSAvIGRiOworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQogCi0gICAgLyogVHJ1ZSB2YWx1ZSBpcyB2ZXJ5IGNsb3NlIHRvIGFkL2JkICogMioqKFB5TG9uZ19TSElGVCooYWV4cC1iZXhwKSkgKi8KLSAgICBhZCAvPSBiZDsgICAgICAgICAgIC8qIG92ZXJmbG93L3VuZGVyZmxvdyBpbXBvc3NpYmxlIGhlcmUgKi8KLSAgICBhZXhwIC09IGJleHA7Ci0gICAgaWYgKGFleHAgPiBJTlRfTUFYIC8gUHlMb25nX1NISUZUKQorICAgIC8qIENhdGNoIG9idmlvdXMgY2FzZXMgb2YgdW5kZXJmbG93IGFuZCBvdmVyZmxvdyAqLworICAgIGRpZmYgPSBhX3NpemUgLSBiX3NpemU7CisgICAgaWYgKGRpZmYgPiBQWV9TU0laRV9UX01BWC9QeUxvbmdfU0hJRlQgLSAxKQorICAgICAgICAvKiBFeHRyZW1lIG92ZXJmbG93ICovCiAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgZWxzZSBpZiAoYWV4cCA8IC0oSU5UX01BWCAvIFB5TG9uZ19TSElGVCkpCi0gICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKTsgICAgICAgICAvKiB1bmRlcmZsb3cgdG8gMCAqLwotICAgIGVycm5vID0gMDsKLSAgICBhZCA9IGxkZXhwKGFkLCBhZXhwICogUHlMb25nX1NISUZUKTsKLSAgICBpZiAoUHlfT1ZFUkZMT1dFRChhZCkpIC8qIGlnbm9yZSB1bmRlcmZsb3cgdG8gMC4wICovCisgICAgZWxzZSBpZiAoZGlmZiA8IDEgLSBQWV9TU0laRV9UX01BWC9QeUxvbmdfU0hJRlQpCisgICAgICAgIC8qIEV4dHJlbWUgdW5kZXJmbG93ICovCisgICAgICAgIGdvdG8gdW5kZXJmbG93X29yX3plcm87CisgICAgLyogTmV4dCBsaW5lIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3dpbmcgYSBQeV9zc2l6ZV90ICovCisgICAgZGlmZiA9IGRpZmYgKiBQeUxvbmdfU0hJRlQgKyBiaXRzX2luX2RpZ2l0KGEtPm9iX2RpZ2l0W2Ffc2l6ZSAtIDFdKSAtCisgICAgICAgIGJpdHNfaW5fZGlnaXQoYi0+b2JfZGlnaXRbYl9zaXplIC0gMV0pOworICAgIC8qIE5vdyBkaWZmID0gYV9iaXRzIC0gYl9iaXRzLiAqLworICAgIGlmIChkaWZmID4gREJMX01BWF9FWFApCiAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShhZCk7CisgICAgZWxzZSBpZiAoZGlmZiA8IERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gMSkKKyAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKIAotb3ZlcmZsb3c6CisgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCisgICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKworICAgIGluZXhhY3QgPSAwOworCisgICAgLyogeCA9IGFicyhhICogMioqLXNoaWZ0KSAqLworICAgIGlmIChzaGlmdCA8PSAwKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSwgc2hpZnRfZGlnaXRzID0gLXNoaWZ0IC8gUHlMb25nX1NISUZUOworICAgICAgICBkaWdpdCByZW07CisgICAgICAgIC8qIHggPSBhIDw8IC1zaGlmdCAqLworICAgICAgICBpZiAoYV9zaXplID49IFBZX1NTSVpFX1RfTUFYIC0gMSAtIHNoaWZ0X2RpZ2l0cykgeworICAgICAgICAgICAgLyogSW4gcHJhY3RpY2UsIGl0J3MgcHJvYmFibHkgaW1wb3NzaWJsZSB0byBlbmQgdXAKKyAgICAgICAgICAgICAgIGhlcmUuICBCb3RoIGEgYW5kIGIgd291bGQgaGF2ZSB0byBiZSBlbm9ybW91cywKKyAgICAgICAgICAgICAgIHVzaW5nIGNsb3NlIHRvIFNJWkVfVF9NQVggYnl0ZXMgb2YgbWVtb3J5IGVhY2guICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJtZWRpYXRlIG92ZXJmbG93IGR1cmluZyBkaXZpc2lvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICB4ID0gX1B5TG9uZ19OZXcoYV9zaXplICsgc2hpZnRfZGlnaXRzICsgMSk7CisgICAgICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2hpZnRfZGlnaXRzOyBpKyspCisgICAgICAgICAgICB4LT5vYl9kaWdpdFtpXSA9IDA7CisgICAgICAgIHJlbSA9IHZfbHNoaWZ0KHgtPm9iX2RpZ2l0ICsgc2hpZnRfZGlnaXRzLCBhLT5vYl9kaWdpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgYV9zaXplLCAtc2hpZnQgJSBQeUxvbmdfU0hJRlQpOworICAgICAgICB4LT5vYl9kaWdpdFthX3NpemUgKyBzaGlmdF9kaWdpdHNdID0gcmVtOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfc3NpemVfdCBzaGlmdF9kaWdpdHMgPSBzaGlmdCAvIFB5TG9uZ19TSElGVDsKKyAgICAgICAgZGlnaXQgcmVtOworICAgICAgICAvKiB4ID0gYSA+PiBzaGlmdCAqLworICAgICAgICBhc3NlcnQoYV9zaXplID49IHNoaWZ0X2RpZ2l0cyk7CisgICAgICAgIHggPSBfUHlMb25nX05ldyhhX3NpemUgLSBzaGlmdF9kaWdpdHMpOworICAgICAgICBpZiAoeCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVtID0gdl9yc2hpZnQoeC0+b2JfZGlnaXQsIGEtPm9iX2RpZ2l0ICsgc2hpZnRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICBhX3NpemUgLSBzaGlmdF9kaWdpdHMsIHNoaWZ0ICUgUHlMb25nX1NISUZUKTsKKyAgICAgICAgLyogc2V0IGluZXhhY3QgaWYgYW55IG9mIHRoZSBiaXRzIHNoaWZ0ZWQgb3V0IGlzIG5vbnplcm8gKi8KKyAgICAgICAgaWYgKHJlbSkKKyAgICAgICAgICAgIGluZXhhY3QgPSAxOworICAgICAgICB3aGlsZSAoIWluZXhhY3QgJiYgc2hpZnRfZGlnaXRzID4gMCkKKyAgICAgICAgICAgIGlmIChhLT5vYl9kaWdpdFstLXNoaWZ0X2RpZ2l0c10pCisgICAgICAgICAgICAgICAgaW5leGFjdCA9IDE7CisgICAgfQorICAgIGxvbmdfbm9ybWFsaXplKHgpOworICAgIHhfc2l6ZSA9IFB5X1NJWkUoeCk7CisKKyAgICAvKiB4IC8vPSBiLiBJZiB0aGUgcmVtYWluZGVyIGlzIG5vbnplcm8sIHNldCBpbmV4YWN0LiAgV2Ugb3duIHRoZSBvbmx5CisgICAgICAgcmVmZXJlbmNlIHRvIHgsIHNvIGl0J3Mgc2FmZSB0byBtb2RpZnkgaXQgaW4tcGxhY2UuICovCisgICAgaWYgKGJfc2l6ZSA9PSAxKSB7CisgICAgICAgIGRpZ2l0IHJlbSA9IGlucGxhY2VfZGl2cmVtMSh4LT5vYl9kaWdpdCwgeC0+b2JfZGlnaXQsIHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPm9iX2RpZ2l0WzBdKTsKKyAgICAgICAgbG9uZ19ub3JtYWxpemUoeCk7CisgICAgICAgIGlmIChyZW0pCisgICAgICAgICAgICBpbmV4YWN0ID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5TG9uZ09iamVjdCAqZGl2LCAqcmVtOworICAgICAgICBkaXYgPSB4X2RpdnJlbSh4LCBiLCAmcmVtKTsKKyAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICB4ID0gZGl2OworICAgICAgICBpZiAoeCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5X1NJWkUocmVtKSkKKyAgICAgICAgICAgIGluZXhhY3QgPSAxOworICAgICAgICBQeV9ERUNSRUYocmVtKTsKKyAgICB9CisgICAgeF9zaXplID0gQUJTKFB5X1NJWkUoeCkpOworICAgIGFzc2VydCh4X3NpemUgPiAwKTsgLyogcmVzdWx0IG9mIGRpdmlzaW9uIGlzIG5ldmVyIHplcm8gKi8KKyAgICB4X2JpdHMgPSAoeF9zaXplLTEpKlB5TG9uZ19TSElGVCtiaXRzX2luX2RpZ2l0KHgtPm9iX2RpZ2l0W3hfc2l6ZS0xXSk7CisKKyAgICAvKiBUaGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMgdGhhdCBoYXZlIHRvIGJlIHJvdW5kZWQgYXdheS4gKi8KKyAgICBleHRyYV9iaXRzID0gTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CisgICAgYXNzZXJ0KGV4dHJhX2JpdHMgPT0gMiB8fCBleHRyYV9iaXRzID09IDMpOworCisgICAgLyogUm91bmQgYnkgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBsb3cgZGlnaXQgb2YgeC4gKi8KKyAgICBtYXNrID0gKGRpZ2l0KTEgPDwgKGV4dHJhX2JpdHMgLSAxKTsKKyAgICBsb3cgPSB4LT5vYl9kaWdpdFswXSB8IGluZXhhY3Q7CisgICAgaWYgKGxvdyAmIG1hc2sgJiYgbG93ICYgKDMqbWFzay0xKSkKKyAgICAgICAgbG93ICs9IG1hc2s7CisgICAgeC0+b2JfZGlnaXRbMF0gPSBsb3cgJiB+KG1hc2stMVUpOworCisgICAgLyogQ29udmVydCB4IHRvIGEgZG91YmxlIGR4OyB0aGUgY29udmVyc2lvbiBpcyBleGFjdC4gKi8KKyAgICBkeCA9IHgtPm9iX2RpZ2l0Wy0teF9zaXplXTsKKyAgICB3aGlsZSAoeF9zaXplID4gMCkKKyAgICAgICAgZHggPSBkeCAqIFB5TG9uZ19CQVNFICsgeC0+b2JfZGlnaXRbLS14X3NpemVdOworICAgIFB5X0RFQ1JFRih4KTsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgbGRleHAgcmVzdWx0IHdpbGwgb3ZlcmZsb3cgYSBkb3VibGUuICovCisgICAgaWYgKHNoaWZ0ICsgeF9iaXRzID49IERCTF9NQVhfRVhQICYmCisgICAgICAgIChzaGlmdCArIHhfYml0cyA+IERCTF9NQVhfRVhQIHx8IGR4ID09IGxkZXhwKDEuMCwgKGludCl4X2JpdHMpKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXN1bHQgPSBsZGV4cChkeCwgKGludClzaGlmdCk7CisKKyAgc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoYSk7CisgICAgUHlfREVDUkVGKGIpOworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobmVnYXRlID8gLXJlc3VsdCA6IHJlc3VsdCk7CisKKyAgdW5kZXJmbG93X29yX3plcm86CisgICAgUHlfREVDUkVGKGEpOworICAgIFB5X0RFQ1JFRihiKTsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKG5lZ2F0ZSA/IC0wLjAgOiAwLjApOworCisgIG92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAibG9uZy9sb25nIHRvbyBsYXJnZSBmb3IgYSBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBkaXZpc2lvbiByZXN1bHQgdG9vIGxhcmdlIGZvciBhIGZsb2F0Iik7CisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihhKTsKKyAgICBQeV9ERUNSRUYoYik7CiAgICAgcmV0dXJuIE5VTEw7Ci0KIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3ODIsNyArMzQxMyw3IEBACiAgICAgaWYgKFB5X1NJWkUoYikgPCAwKSB7ICAvKiBpZiBleHBvbmVudCBpcyBuZWdhdGl2ZSAqLwogICAgICAgICBpZiAoYykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBvdygpIDJuZCBhcmd1bWVudCAiCi0gICAgICAgICAgICAgICAgImNhbm5vdCBiZSBuZWdhdGl2ZSB3aGVuIDNyZCBhcmd1bWVudCBzcGVjaWZpZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGJlIG5lZ2F0aXZlIHdoZW4gM3JkIGFyZ3VtZW50IHNwZWNpZmllZCIpOwogICAgICAgICAgICAgZ290byBFcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTI4NDgsMjYgKzM0NzksMjggQEAKICAgICAgKiBpcyBOVUxMLgogICAgICAqLwogI2RlZmluZSBSRURVQ0UoWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGMgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGxfZGl2bW9kKFgsIGMsIE5VTEwsICZ0ZW1wKSA8IDApICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBFcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X1hERUNSRUYoWCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgWCA9IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0ZW1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChsX2Rpdm1vZChYLCBjLCBOVUxMLCAmdGVtcCkgPCAwKSAgICAgICAgXAorICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9YREVDUkVGKFgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFggPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdGVtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCiAKICAgICAvKiBNdWx0aXBseSB0d28gdmFsdWVzLCB0aGVuIHJlZHVjZSB0aGUgcmVzdWx0OgogICAgICAgIHJlc3VsdCA9IFgqWSAlIGMuICBJZiBjIGlzIE5VTEwsIHNraXAgdGhlIG1vZC4gKi8KLSNkZWZpbmUgTVVMVChYLCBZLCByZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdGVtcCA9IChQeUxvbmdPYmplY3QgKilsb25nX211bChYLCBZKTsgICAgICAgICAgICAgIFwKLSAgICBpZiAodGVtcCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIEVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUHlfWERFQ1JFRihyZXN1bHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXN1bHQgPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVEVUNFKHJlc3VsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KKyNkZWZpbmUgTVVMVChYLCBZLCByZXN1bHQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVtcCA9IChQeUxvbmdPYmplY3QgKilsb25nX211bChYLCBZKTsgIFwKKyAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8gRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzdWx0ID0gdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVEVUNFKHJlc3VsdCk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCiAKICAgICBpZiAoUHlfU0laRShiKSA8PSBGSVZFQVJZX0NVVE9GRikgewogICAgICAgICAvKiBMZWZ0LXRvLXJpZ2h0IGJpbmFyeSBleHBvbmVudGlhdGlvbiAoSEFDIEFsZ29yaXRobSAxNC43OSkgKi8KQEAgLTI4NzUsMTAgKzM1MDgsMTAgQEAKICAgICAgICAgZm9yIChpID0gUHlfU0laRShiKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAgICBkaWdpdCBiaSA9IGItPm9iX2RpZ2l0W2ldOwogCi0gICAgICAgICAgICBmb3IgKGogPSAxIDw8IChQeUxvbmdfU0hJRlQtMSk7IGogIT0gMDsgaiA+Pj0gMSkgewotICAgICAgICAgICAgICAgIE1VTFQoeiwgeiwgeikKKyAgICAgICAgICAgIGZvciAoaiA9IChkaWdpdCkxIDw8IChQeUxvbmdfU0hJRlQtMSk7IGogIT0gMDsgaiA+Pj0gMSkgeworICAgICAgICAgICAgICAgIE1VTFQoeiwgeiwgeik7CiAgICAgICAgICAgICAgICAgaWYgKGJpICYgaikKLSAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCBhLCB6KQorICAgICAgICAgICAgICAgICAgICBNVUxUKHosIGEsIHopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjg4Nyw3ICszNTIwLDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHopOyAgICAgICAgICAgLyogc3RpbGwgaG9sZHMgMUwgKi8KICAgICAgICAgdGFibGVbMF0gPSB6OwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgMzI7ICsraSkKLSAgICAgICAgICAgIE1VTFQodGFibGVbaS0xXSwgYSwgdGFibGVbaV0pCisgICAgICAgICAgICBNVUxUKHRhYmxlW2ktMV0sIGEsIHRhYmxlW2ldKTsKIAogICAgICAgICBmb3IgKGkgPSBQeV9TSVpFKGIpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgIGNvbnN0IGRpZ2l0IGJpID0gYi0+b2JfZGlnaXRbaV07CkBAIC0yODk1LDkgKzM1MjgsOSBAQAogICAgICAgICAgICAgZm9yIChqID0gUHlMb25nX1NISUZUIC0gNTsgaiA+PSAwOyBqIC09IDUpIHsKICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaW5kZXggPSAoYmkgPj4gaikgJiAweDFmOwogICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA1OyArK2spCi0gICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgeiwgeikKKyAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgdGFibGVbaW5kZXhdLCB6KQorICAgICAgICAgICAgICAgICAgICBNVUxUKHosIHRhYmxlW2luZGV4XSwgeik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTEyLDEzICszNTQ1LDEzIEBACiAgICAgfQogICAgIGdvdG8gRG9uZTsKIAotIEVycm9yOgorICBFcnJvcjoKICAgICBpZiAoeiAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRih6KTsKICAgICAgICAgeiA9IE5VTEw7CiAgICAgfQogICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotIERvbmU6CisgIERvbmU6CiAgICAgaWYgKFB5X1NJWkUoYikgPiBGSVZFQVJZX0NVVE9GRikgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFibGVbaV0pOwpAQCAtMjk3NCw3ICszNjA3LDcgQEAKIHN0YXRpYyBpbnQKIGxvbmdfbm9uemVybyhQeUxvbmdPYmplY3QgKnYpCiB7Ci0gICAgcmV0dXJuIEFCUyhQeV9TSVpFKHYpKSAhPSAwOworICAgIHJldHVybiBQeV9TSVpFKHYpICE9IDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yOTgyLDggKzM2MTUsNyBAQAogewogICAgIFB5TG9uZ09iamVjdCAqYSwgKmI7CiAgICAgUHlMb25nT2JqZWN0ICp6ID0gTlVMTDsKLSAgICBsb25nIHNoaWZ0Ynk7Ci0gICAgUHlfc3NpemVfdCBuZXdzaXplLCB3b3Jkc2hpZnQsIGxvc2hpZnQsIGhpc2hpZnQsIGksIGo7CisgICAgUHlfc3NpemVfdCBzaGlmdGJ5LCBuZXdzaXplLCB3b3Jkc2hpZnQsIGxvc2hpZnQsIGhpc2hpZnQsIGksIGo7CiAgICAgZGlnaXQgbG9tYXNrLCBoaW1hc2s7CiAKICAgICBDT05WRVJUX0JJTk9QKChQeU9iamVjdCAqKXYsIChQeU9iamVjdCAqKXcsICZhLCAmYik7CkBAIC0zMDAyLDggKzM2MzQsNyBAQAogICAgICAgICBQeV9ERUNSRUYoYTIpOwogICAgIH0KICAgICBlbHNlIHsKLQotICAgICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzTG9uZygoUHlPYmplY3QgKiliKTsKKyAgICAgICAgc2hpZnRieSA9IFB5TG9uZ19Bc1NzaXplX3QoKFB5T2JqZWN0ICopYik7CiAgICAgICAgIGlmIChzaGlmdGJ5ID09IC0xTCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byByc2hpZnRfZXJyb3I7CiAgICAgICAgIGlmIChzaGlmdGJ5IDwgMCkgewpAQCAtMzAzMSwxMiArMzY2MiwxMSBAQAogICAgICAgICBmb3IgKGkgPSAwLCBqID0gd29yZHNoaWZ0OyBpIDwgbmV3c2l6ZTsgaSsrLCBqKyspIHsKICAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gKGEtPm9iX2RpZ2l0W2pdID4+IGxvc2hpZnQpICYgbG9tYXNrOwogICAgICAgICAgICAgaWYgKGkrMSA8IG5ld3NpemUpCi0gICAgICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gfD0KLSAgICAgICAgICAgICAgICAgIChhLT5vYl9kaWdpdFtqKzFdIDw8IGhpc2hpZnQpICYgaGltYXNrOworICAgICAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldIHw9IChhLT5vYl9kaWdpdFtqKzFdIDw8IGhpc2hpZnQpICYgaGltYXNrOwogICAgICAgICB9CiAgICAgICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKICAgICB9Ci1yc2hpZnRfZXJyb3I6CisgIHJzaGlmdF9lcnJvcjoKICAgICBQeV9ERUNSRUYoYSk7CiAgICAgUHlfREVDUkVGKGIpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgejsKQEAgLTMwNDksMjcgKzM2NzksMjEgQEAKICAgICAvKiBUaGlzIHZlcnNpb24gZHVlIHRvIFRpbSBQZXRlcnMgKi8KICAgICBQeUxvbmdPYmplY3QgKmEsICpiOwogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7Ci0gICAgbG9uZyBzaGlmdGJ5OwotICAgIFB5X3NzaXplX3Qgb2xkc2l6ZSwgbmV3c2l6ZSwgd29yZHNoaWZ0LCByZW1zaGlmdCwgaSwgajsKKyAgICBQeV9zc2l6ZV90IHNoaWZ0YnksIG9sZHNpemUsIG5ld3NpemUsIHdvcmRzaGlmdCwgcmVtc2hpZnQsIGksIGo7CiAgICAgdHdvZGlnaXRzIGFjY3VtOwogCiAgICAgQ09OVkVSVF9CSU5PUCh2LCB3LCAmYSwgJmIpOwogCi0gICAgc2hpZnRieSA9IFB5TG9uZ19Bc0xvbmcoKFB5T2JqZWN0ICopYik7CisgICAgc2hpZnRieSA9IFB5TG9uZ19Bc1NzaXplX3QoKFB5T2JqZWN0ICopYik7CiAgICAgaWYgKHNoaWZ0YnkgPT0gLTFMICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwogICAgIGlmIChzaGlmdGJ5IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNoaWZ0IGNvdW50Iik7CiAgICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwogICAgIH0KLSAgICBpZiAoKGxvbmcpKGludClzaGlmdGJ5ICE9IHNoaWZ0YnkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAib3V0cmFnZW91cyBsZWZ0IHNoaWZ0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwotICAgIH0KICAgICAvKiB3b3Jkc2hpZnQsIHJlbXNoaWZ0ID0gZGl2bW9kKHNoaWZ0YnksIFB5TG9uZ19TSElGVCkgKi8KLSAgICB3b3Jkc2hpZnQgPSAoaW50KXNoaWZ0YnkgLyBQeUxvbmdfU0hJRlQ7Ci0gICAgcmVtc2hpZnQgID0gKGludClzaGlmdGJ5IC0gd29yZHNoaWZ0ICogUHlMb25nX1NISUZUOworICAgIHdvcmRzaGlmdCA9IHNoaWZ0YnkgLyBQeUxvbmdfU0hJRlQ7CisgICAgcmVtc2hpZnQgID0gc2hpZnRieSAtIHdvcmRzaGlmdCAqIFB5TG9uZ19TSElGVDsKIAogICAgIG9sZHNpemUgPSBBQlMoYS0+b2Jfc2l6ZSk7CiAgICAgbmV3c2l6ZSA9IG9sZHNpemUgKyB3b3Jkc2hpZnQ7CkBAIC0zMDkzLDc1ICszNzE3LDc5IEBACiAgICAgZWxzZQogICAgICAgICBhc3NlcnQoIWFjY3VtKTsKICAgICB6ID0gbG9uZ19ub3JtYWxpemUoeik7Ci1sc2hpZnRfZXJyb3I6CisgIGxzaGlmdF9lcnJvcjoKICAgICBQeV9ERUNSRUYoYSk7CiAgICAgUHlfREVDUkVGKGIpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgejsKIH0KIAorLyogQ29tcHV0ZSB0d28ncyBjb21wbGVtZW50IG9mIGRpZ2l0IHZlY3RvciBhWzA6bV0sIHdyaXRpbmcgcmVzdWx0IHRvCisgICB6WzA6bV0uICBUaGUgZGlnaXQgdmVjdG9yIGEgbmVlZCBub3QgYmUgbm9ybWFsaXplZCwgYnV0IHNob3VsZCBub3QKKyAgIGJlIGVudGlyZWx5IHplcm8uICBhIGFuZCB6IG1heSBwb2ludCB0byB0aGUgc2FtZSBkaWdpdCB2ZWN0b3IuICovCisKK3N0YXRpYyB2b2lkCit2X2NvbXBsZW1lbnQoZGlnaXQgKnosIGRpZ2l0ICphLCBQeV9zc2l6ZV90IG0pCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIGRpZ2l0IGNhcnJ5ID0gMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbTsgKytpKSB7CisgICAgICAgIGNhcnJ5ICs9IGFbaV0gXiBQeUxvbmdfTUFTSzsKKyAgICAgICAgeltpXSA9IGNhcnJ5ICYgUHlMb25nX01BU0s7CisgICAgICAgIGNhcnJ5ID4+PSBQeUxvbmdfU0hJRlQ7CisgICAgfQorICAgIGFzc2VydChjYXJyeSA9PSAwKTsKK30KIAogLyogQml0d2lzZSBhbmQveG9yL29yIG9wZXJhdGlvbnMgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIGxvbmdfYml0d2lzZShQeUxvbmdPYmplY3QgKmEsCiAgICAgICAgICAgICAgaW50IG9wLCAgLyogJyYnLCAnfCcsICdeJyAqLwotICAgICAgICAgUHlMb25nT2JqZWN0ICpiKQorICAgICAgICAgICAgIFB5TG9uZ09iamVjdCAqYikKIHsKLSAgICBkaWdpdCBtYXNrYSwgbWFza2I7IC8qIDAgb3IgUHlMb25nX01BU0sgKi8KLSAgICBpbnQgbmVnejsKLSAgICBQeV9zc2l6ZV90IHNpemVfYSwgc2l6ZV9iLCBzaXplX3o7CisgICAgaW50IG5lZ2EsIG5lZ2IsIG5lZ3o7CisgICAgUHlfc3NpemVfdCBzaXplX2EsIHNpemVfYiwgc2l6ZV96LCBpOwogICAgIFB5TG9uZ09iamVjdCAqejsKLSAgICBpbnQgaTsKLSAgICBkaWdpdCBkaWdhLCBkaWdiOwotICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKFB5X1NJWkUoYSkgPCAwKSB7Ci0gICAgICAgIGEgPSAoUHlMb25nT2JqZWN0ICopIGxvbmdfaW52ZXJ0KGEpOwotICAgICAgICBpZiAoYSA9PSBOVUxMKQorICAgIC8qIEJpdHdpc2Ugb3BlcmF0aW9ucyBmb3IgbmVnYXRpdmUgbnVtYmVycyBvcGVyYXRlIGFzIHRob3VnaAorICAgICAgIG9uIGEgdHdvJ3MgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFNvIGNvbnZlcnQgYXJndW1lbnRzCisgICAgICAgZnJvbSBzaWduLW1hZ25pdHVkZSB0byB0d28ncyBjb21wbGVtZW50LCBhbmQgY29udmVydCB0aGUKKyAgICAgICByZXN1bHQgYmFjayB0byBzaWduLW1hZ25pdHVkZSBhdCB0aGUgZW5kLiAqLworCisgICAgLyogSWYgYSBpcyBuZWdhdGl2ZSwgcmVwbGFjZSBpdCBieSBpdHMgdHdvJ3MgY29tcGxlbWVudC4gKi8KKyAgICBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7CisgICAgbmVnYSA9IFB5X1NJWkUoYSkgPCAwOworICAgIGlmIChuZWdhKSB7CisgICAgICAgIHogPSBfUHlMb25nX05ldyhzaXplX2EpOworICAgICAgICBpZiAoeiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIG1hc2thID0gUHlMb25nX01BU0s7CisgICAgICAgIHZfY29tcGxlbWVudCh6LT5vYl9kaWdpdCwgYS0+b2JfZGlnaXQsIHNpemVfYSk7CisgICAgICAgIGEgPSB6OwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCisgICAgICAgIC8qIEtlZXAgcmVmZXJlbmNlIGNvdW50IGNvbnNpc3RlbnQuICovCiAgICAgICAgIFB5X0lOQ1JFRihhKTsKLSAgICAgICAgbWFza2EgPSAwOwotICAgIH0KLSAgICBpZiAoUHlfU0laRShiKSA8IDApIHsKLSAgICAgICAgYiA9IChQeUxvbmdPYmplY3QgKikgbG9uZ19pbnZlcnQoYik7Ci0gICAgICAgIGlmIChiID09IE5VTEwpIHsKKworICAgIC8qIFNhbWUgZm9yIGIuICovCisgICAgc2l6ZV9iID0gQUJTKFB5X1NJWkUoYikpOworICAgIG5lZ2IgPSBQeV9TSVpFKGIpIDwgMDsKKyAgICBpZiAobmVnYikgeworICAgICAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV9iKTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGEpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbWFza2IgPSBQeUxvbmdfTUFTSzsKKyAgICAgICAgdl9jb21wbGVtZW50KHotPm9iX2RpZ2l0LCBiLT5vYl9kaWdpdCwgc2l6ZV9iKTsKKyAgICAgICAgYiA9IHo7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKICAgICAgICAgUHlfSU5DUkVGKGIpOwotICAgICAgICBtYXNrYiA9IDA7Ci0gICAgfQogCi0gICAgbmVneiA9IDA7Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgJ14nOgotICAgICAgICBpZiAobWFza2EgIT0gbWFza2IpIHsKLSAgICAgICAgICAgIG1hc2thIF49IFB5TG9uZ19NQVNLOwotICAgICAgICAgICAgbmVneiA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJyYnOgotICAgICAgICBpZiAobWFza2EgJiYgbWFza2IpIHsKLSAgICAgICAgICAgIG9wID0gJ3wnOwotICAgICAgICAgICAgbWFza2EgXj0gUHlMb25nX01BU0s7Ci0gICAgICAgICAgICBtYXNrYiBePSBQeUxvbmdfTUFTSzsKLSAgICAgICAgICAgIG5lZ3ogPSAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlICd8JzoKLSAgICAgICAgaWYgKG1hc2thIHx8IG1hc2tiKSB7Ci0gICAgICAgICAgICBvcCA9ICcmJzsKLSAgICAgICAgICAgIG1hc2thIF49IFB5TG9uZ19NQVNLOwotICAgICAgICAgICAgbWFza2IgXj0gUHlMb25nX01BU0s7Ci0gICAgICAgICAgICBuZWd6ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLyogU3dhcCBhIGFuZCBiIGlmIG5lY2Vzc2FyeSB0byBlbnN1cmUgc2l6ZV9hID49IHNpemVfYi4gKi8KKyAgICBpZiAoc2l6ZV9hIDwgc2l6ZV9iKSB7CisgICAgICAgIHogPSBhOyBhID0gYjsgYiA9IHo7CisgICAgICAgIHNpemVfeiA9IHNpemVfYTsgc2l6ZV9hID0gc2l6ZV9iOyBzaXplX2IgPSBzaXplX3o7CisgICAgICAgIG5lZ3ogPSBuZWdhOyBuZWdhID0gbmVnYjsgbmVnYiA9IG5lZ3o7CiAgICAgfQogCiAgICAgLyogSlJIOiBUaGUgb3JpZ2luYWwgbG9naWMgaGVyZSB3YXMgdG8gYWxsb2NhdGUgdGhlIHJlc3VsdCB2YWx1ZSAoeikKQEAgLTMxNjksNDMgKzM3OTcsNzIgQEAKICAgICAgICB3aGVyZSB0aGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc2hvcnRlciB0aGFuIHRoYXQ6IEFORCBvZiB0d28KICAgICAgICBwb3NpdGl2ZXMsIE9SIG9mIHR3byBuZWdhdGl2ZXM6IHVzZSB0aGUgc2hvcnRlciBudW1iZXIuICBBTkQgd2l0aAogICAgICAgIG1peGVkIHNpZ25zOiB1c2UgdGhlIHBvc2l0aXZlIG51bWJlci4gIE9SIHdpdGggbWl4ZWQgc2lnbnM6IHVzZSB0aGUKLSAgICAgICBuZWdhdGl2ZSBudW1iZXIuICBBZnRlciB0aGUgdHJhbnNmb3JtYXRpb25zIGFib3ZlLCBvcCB3aWxsIGJlICcmJwotICAgICAgIGlmZiBvbmUgb2YgdGhlc2UgY2FzZXMgYXBwbGllcywgYW5kIG1hc2sgd2lsbCBiZSBub24tMCBmb3Igb3BlcmFuZHMKLSAgICAgICB3aG9zZSBsZW5ndGggc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgbmVnYXRpdmUgbnVtYmVyLgogICAgICovCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgJ14nOgorICAgICAgICBuZWd6ID0gbmVnYSBeIG5lZ2I7CisgICAgICAgIHNpemVfeiA9IHNpemVfYTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnJic6CisgICAgICAgIG5lZ3ogPSBuZWdhICYgbmVnYjsKKyAgICAgICAgc2l6ZV96ID0gbmVnYiA/IHNpemVfYSA6IHNpemVfYjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnfCc6CisgICAgICAgIG5lZ3ogPSBuZWdhIHwgbmVnYjsKKyAgICAgICAgc2l6ZV96ID0gbmVnYiA/IHNpemVfYiA6IHNpemVfYTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgc2l6ZV9hID0gUHlfU0laRShhKTsKLSAgICBzaXplX2IgPSBQeV9TSVpFKGIpOwotICAgIHNpemVfeiA9IG9wID09ICcmJwotICAgICAgICA/IChtYXNrYQotICAgICAgICAgICA/IHNpemVfYgotICAgICAgICAgICA6IChtYXNrYiA/IHNpemVfYSA6IE1JTihzaXplX2EsIHNpemVfYikpKQotICAgICAgICA6IE1BWChzaXplX2EsIHNpemVfYik7Ci0gICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfeik7CisgICAgLyogV2UgYWxsb3cgYW4gZXh0cmEgZGlnaXQgaWYgeiBpcyBuZWdhdGl2ZSwgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgICB0aGUgZmluYWwgdHdvJ3MgY29tcGxlbWVudCBvZiB6IGRvZXNuJ3Qgb3ZlcmZsb3cuICovCisgICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfeiArIG5lZ3opOwogICAgIGlmICh6ID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKGEpOwogICAgICAgICBQeV9ERUNSRUYoYik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX3o7ICsraSkgewotICAgICAgICBkaWdhID0gKGkgPCBzaXplX2EgPyBhLT5vYl9kaWdpdFtpXSA6IDApIF4gbWFza2E7Ci0gICAgICAgIGRpZ2IgPSAoaSA8IHNpemVfYiA/IGItPm9iX2RpZ2l0W2ldIDogMCkgXiBtYXNrYjsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlICcmJzogei0+b2JfZGlnaXRbaV0gPSBkaWdhICYgZGlnYjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3wnOiB6LT5vYl9kaWdpdFtpXSA9IGRpZ2EgfCBkaWdiOyBicmVhazsKLSAgICAgICAgY2FzZSAnXic6IHotPm9iX2RpZ2l0W2ldID0gZGlnYSBeIGRpZ2I7IGJyZWFrOwotICAgICAgICB9CisgICAgLyogQ29tcHV0ZSBkaWdpdHMgZm9yIG92ZXJsYXAgb2YgYSBhbmQgYi4gKi8KKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlICcmJzoKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfYjsgKytpKQorICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSBhLT5vYl9kaWdpdFtpXSAmIGItPm9iX2RpZ2l0W2ldOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd8JzoKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfYjsgKytpKQorICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSBhLT5vYl9kaWdpdFtpXSB8IGItPm9iX2RpZ2l0W2ldOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdeJzoKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVfYjsgKytpKQorICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSBhLT5vYl9kaWdpdFtpXSBeIGItPm9iX2RpZ2l0W2ldOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDb3B5IGFueSByZW1haW5pbmcgZGlnaXRzIG9mIGEsIGludmVydGluZyBpZiBuZWNlc3NhcnkuICovCisgICAgaWYgKG9wID09ICdeJyAmJiBuZWdiKQorICAgICAgICBmb3IgKDsgaSA8IHNpemVfejsgKytpKQorICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSBhLT5vYl9kaWdpdFtpXSBeIFB5TG9uZ19NQVNLOworICAgIGVsc2UgaWYgKGkgPCBzaXplX3opCisgICAgICAgIG1lbWNweSgmei0+b2JfZGlnaXRbaV0sICZhLT5vYl9kaWdpdFtpXSwKKyAgICAgICAgICAgICAgIChzaXplX3otaSkqc2l6ZW9mKGRpZ2l0KSk7CisKKyAgICAvKiBDb21wbGVtZW50IHJlc3VsdCBpZiBuZWdhdGl2ZS4gKi8KKyAgICBpZiAobmVneikgeworICAgICAgICBQeV9TSVpFKHopID0gLShQeV9TSVpFKHopKTsKKyAgICAgICAgei0+b2JfZGlnaXRbc2l6ZV96XSA9IFB5TG9uZ19NQVNLOworICAgICAgICB2X2NvbXBsZW1lbnQoei0+b2JfZGlnaXQsIHotPm9iX2RpZ2l0LCBzaXplX3orMSk7CiAgICAgfQogCiAgICAgUHlfREVDUkVGKGEpOwogICAgIFB5X0RFQ1JFRihiKTsKLSAgICB6ID0gbG9uZ19ub3JtYWxpemUoeik7Ci0gICAgaWYgKG5lZ3ogPT0gMCkKLSAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKSB6OwotICAgIHYgPSBsb25nX2ludmVydCh6KTsKLSAgICBQeV9ERUNSRUYoeik7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKWxvbmdfbm9ybWFsaXplKHopOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzI3OSwxMyArMzkzNiwxMyBAQAogICAgIHggPSBQeUxvbmdfQXNMb25nKHYpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfUHlMb25nX0NvcHkoKFB5TG9uZ09iamVjdCAqKXYpOworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gX1B5TG9uZ19Db3B5KChQeUxvbmdPYmplY3QgKil2KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzMzgsNyArMzk5NSw3IEBACiAgICAgICAgIC8qIFNpbmNlIFB5TG9uZ19Gcm9tU3RyaW5nIGRvZXNuJ3QgaGF2ZSBhIGxlbmd0aCBwYXJhbWV0ZXIsCiAgICAgICAgICAqIGNoZWNrIGhlcmUgZm9yIHBvc3NpYmxlIE5VTHMgaW4gdGhlIHN0cmluZy4gKi8KICAgICAgICAgY2hhciAqc3RyaW5nID0gUHlTdHJpbmdfQVNfU1RSSU5HKHgpOwotICAgICAgICBpZiAoc3RybGVuKHN0cmluZykgIT0gUHlTdHJpbmdfU2l6ZSh4KSkgeworICAgICAgICBpZiAoc3RybGVuKHN0cmluZykgIT0gKHNpemVfdClQeVN0cmluZ19TaXplKHgpKSB7CiAgICAgICAgICAgICAvKiBjcmVhdGUgYSByZXByKCkgb2YgdGhlIGlucHV0IHN0cmluZywKICAgICAgICAgICAgICAqIGp1c3QgbGlrZSBQeUxvbmdfRnJvbVN0cmluZyBkb2VzLiAqLwogICAgICAgICAgICAgUHlPYmplY3QgKnNyZXByOwpAQCAtMzM0Niw4ICs0MDAzLDggQEAKICAgICAgICAgICAgIGlmIChzcmVwciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGxvbmcoKSB3aXRoIGJhc2UgJWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgYmFzZSwgUHlTdHJpbmdfQVNfU1RSSU5HKHNyZXByKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgbG9uZygpIHdpdGggYmFzZSAlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIFB5U3RyaW5nX0FTX1NUUklORyhzcmVwcikpOwogICAgICAgICAgICAgUHlfREVDUkVGKHNyZXByKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0zMzYxLDcgKzQwMTgsNyBAQAogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAibG9uZygpIGNhbid0IGNvbnZlcnQgbm9uLXN0cmluZyB3aXRoIGV4cGxpY2l0IGJhc2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nKCkgY2FuJ3QgY29udmVydCBub24tc3RyaW5nIHdpdGggZXhwbGljaXQgYmFzZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CkBAIC0zNDA1LDggKzQwNjIsMTMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWxvbmdfZ2V0TihQeUxvbmdPYmplY3QgKnYsIHZvaWQgKmNvbnRleHQpIHsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChQeV9pbnRwdHJfdCljb250ZXh0KTsKK2xvbmdfZ2V0MChQeUxvbmdPYmplY3QgKnYsIHZvaWQgKmNvbnRleHQpIHsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDBMKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2xvbmdfZ2V0MShQeUxvbmdPYmplY3QgKnYsIHZvaWQgKmNvbnRleHQpIHsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDFMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0NDQsMTIgKzQxMDYsNzQgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHYtPm9iX3R5cGUtPnRwX2Jhc2ljc2l6ZTsKLSAgICBpZiAodi0+b2Jfc2l6ZSAhPSAwKQotICAgICAgICByZXMgKz0gYWJzKHYtPm9iX3NpemUpICogc2l6ZW9mKGRpZ2l0KTsKKyAgICByZXMgPSB2LT5vYl90eXBlLT50cF9iYXNpY3NpemUgKyBBQlMoUHlfU0laRSh2KSkqc2l6ZW9mKGRpZ2l0KTsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVzKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2xvbmdfYml0X2xlbmd0aChQeUxvbmdPYmplY3QgKnYpCit7CisgICAgUHlMb25nT2JqZWN0ICpyZXN1bHQsICp4LCAqeTsKKyAgICBQeV9zc2l6ZV90IG5kaWdpdHMsIG1zZF9iaXRzID0gMDsKKyAgICBkaWdpdCBtc2Q7CisKKyAgICBhc3NlcnQodiAhPSBOVUxMKTsKKyAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKKworICAgIG5kaWdpdHMgPSBBQlMoUHlfU0laRSh2KSk7CisgICAgaWYgKG5kaWdpdHMgPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKDApOworCisgICAgbXNkID0gdi0+b2JfZGlnaXRbbmRpZ2l0cy0xXTsKKyAgICB3aGlsZSAobXNkID49IDMyKSB7CisgICAgICAgIG1zZF9iaXRzICs9IDY7CisgICAgICAgIG1zZCA+Pj0gNjsKKyAgICB9CisgICAgbXNkX2JpdHMgKz0gKGxvbmcpKEJpdExlbmd0aFRhYmxlW21zZF0pOworCisgICAgaWYgKG5kaWdpdHMgPD0gUFlfU1NJWkVfVF9NQVgvUHlMb25nX1NISUZUKQorICAgICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QoKG5kaWdpdHMtMSkqUHlMb25nX1NISUZUICsgbXNkX2JpdHMpOworCisgICAgLyogZXhwcmVzc2lvbiBhYm92ZSBtYXkgb3ZlcmZsb3c7IHVzZSBQeXRob24gaW50ZWdlcnMgaW5zdGVhZCAqLworICAgIHJlc3VsdCA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbVNzaXplX3QobmRpZ2l0cyAtIDEpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgeCA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoUHlMb25nX1NISUZUKTsKKyAgICBpZiAoeCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHkgPSAoUHlMb25nT2JqZWN0ICopbG9uZ19tdWwocmVzdWx0LCB4KTsKKyAgICBQeV9ERUNSRUYoeCk7CisgICAgaWYgKHkgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICByZXN1bHQgPSB5OworCisgICAgeCA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoKGxvbmcpbXNkX2JpdHMpOworICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgeSA9IChQeUxvbmdPYmplY3QgKilsb25nX2FkZChyZXN1bHQsIHgpOworICAgIFB5X0RFQ1JFRih4KTsKKyAgICBpZiAoeSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJlc3VsdCA9IHk7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIobG9uZ19iaXRfbGVuZ3RoX2RvYywKKyJsb25nLmJpdF9sZW5ndGgoKSAtPiBpbnQgb3IgbG9uZ1xuXAorXG5cCitOdW1iZXIgb2YgYml0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHNlbGYgaW4gYmluYXJ5LlxuXAorPj4+IGJpbigzN0wpXG5cCisnMGIxMDAxMDEnXG5cCis+Pj4gKDM3TCkuYml0X2xlbmd0aCgpXG5cCis2Iik7CisKICNpZiAwCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19pc19maW5pdGUoUHlPYmplY3QgKnYpCkBAIC0zNDYxLDYgKzQxODUsOCBAQAogc3RhdGljIFB5TWV0aG9kRGVmIGxvbmdfbWV0aG9kc1tdID0gewogICAgIHsiY29uanVnYXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWxvbmdfbG9uZywgTUVUSF9OT0FSR1MsCiAgICAgICJSZXR1cm5zIHNlbGYsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhbnkgbG9uZy4ifSwKKyAgICB7ImJpdF9sZW5ndGgiLCAgICAgIChQeUNGdW5jdGlvbilsb25nX2JpdF9sZW5ndGgsIE1FVEhfTk9BUkdTLAorICAgICBsb25nX2JpdF9sZW5ndGhfZG9jfSwKICNpZiAwCiAgICAgeyJpc19maW5pdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pbG9uZ19pc19maW5pdGUsICAgIE1FVEhfTk9BUkdTLAogICAgICAiUmV0dXJucyBhbHdheXMgVHJ1ZS4ifSwKQEAgLTM0ODAsMTcgKzQyMDYsMTcgQEAKICAgICAgInRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciIsCiAgICAgIE5VTEx9LAogICAgIHsiaW1hZyIsCi0gICAgIChnZXR0ZXIpbG9uZ19nZXROLCAoc2V0dGVyKU5VTEwsCisgICAgIChnZXR0ZXIpbG9uZ19nZXQwLCAoc2V0dGVyKU5VTEwsCiAgICAgICJ0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciIsCi0gICAgICh2b2lkKikwfSwKKyAgICAgTlVMTH0sCiAgICAgeyJudW1lcmF0b3IiLAogICAgICAoZ2V0dGVyKWxvbmdfbG9uZywgKHNldHRlcilOVUxMLAogICAgICAidGhlIG51bWVyYXRvciBvZiBhIHJhdGlvbmFsIG51bWJlciBpbiBsb3dlc3QgdGVybXMiLAogICAgICBOVUxMfSwKICAgICB7ImRlbm9taW5hdG9yIiwKLSAgICAgKGdldHRlcilsb25nX2dldE4sIChzZXR0ZXIpTlVMTCwKKyAgICAgKGdldHRlcilsb25nX2dldDEsIChzZXR0ZXIpTlVMTCwKICAgICAgInRoZSBkZW5vbWluYXRvciBvZiBhIHJhdGlvbmFsIG51bWJlciBpbiBsb3dlc3QgdGVybXMiLAotICAgICAodm9pZCopMX0sCisgICAgIE5VTEx9LAogICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTM1MDQsNTIgKzQyMzAsNTIgQEAKIGNvbnZlcnRpbmcgYSBub24tc3RyaW5nLiIpOwogCiBzdGF0aWMgUHlOdW1iZXJNZXRob2RzIGxvbmdfYXNfbnVtYmVyID0gewotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19hZGQsICAgICAgIC8qbmJfYWRkKi8KLSAgICAoYmluYXJ5ZnVuYykgICAgICAgIGxvbmdfc3ViLCAgICAgICAvKm5iX3N1YnRyYWN0Ki8KLSAgICAoYmluYXJ5ZnVuYykgICAgICAgIGxvbmdfbXVsLCAgICAgICAvKm5iX211bHRpcGx5Ki8KLSAgICAgICAgICAgIGxvbmdfY2xhc3NpY19kaXYsIC8qbmJfZGl2aWRlKi8KLSAgICAgICAgICAgIGxvbmdfbW9kLCAgICAgICAgICAgICAgICAgICAvKm5iX3JlbWFpbmRlciovCi0gICAgICAgICAgICBsb25nX2Rpdm1vZCwgICAgICAgICAgICAgICAgLypuYl9kaXZtb2QqLwotICAgICAgICAgICAgbG9uZ19wb3csICAgICAgICAgICAgICAgICAgIC8qbmJfcG93ZXIqLwotICAgICh1bmFyeWZ1bmMpICAgICAgICAgbG9uZ19uZWcsICAgICAgIC8qbmJfbmVnYXRpdmUqLwotICAgICh1bmFyeWZ1bmMpICAgICAgICAgbG9uZ19sb25nLCAgICAgIC8qdHBfcG9zaXRpdmUqLwotICAgICh1bmFyeWZ1bmMpICAgICAgICAgbG9uZ19hYnMsICAgICAgIC8qdHBfYWJzb2x1dGUqLwotICAgIChpbnF1aXJ5KSAgICAgICAgICAgbG9uZ19ub256ZXJvLCAgIC8qdHBfbm9uemVybyovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX2ludmVydCwgICAgLypuYl9pbnZlcnQqLwotICAgICAgICAgICAgbG9uZ19sc2hpZnQsICAgICAgICAgICAgICAgIC8qbmJfbHNoaWZ0Ki8KLSAgICAoYmluYXJ5ZnVuYykgICAgICAgIGxvbmdfcnNoaWZ0LCAgICAvKm5iX3JzaGlmdCovCi0gICAgICAgICAgICBsb25nX2FuZCwgICAgICAgICAgICAgICAgICAgLypuYl9hbmQqLwotICAgICAgICAgICAgbG9uZ194b3IsICAgICAgICAgICAgICAgICAgIC8qbmJfeG9yKi8KLSAgICAgICAgICAgIGxvbmdfb3IsICAgICAgICAgICAgICAgICAgICAvKm5iX29yKi8KLSAgICAgICAgICAgIGxvbmdfY29lcmNlLCAgICAgICAgICAgICAgICAvKm5iX2NvZXJjZSovCi0gICAgICAgICAgICBsb25nX2ludCwgICAgICAgICAgICAgICAgICAgLypuYl9pbnQqLwotICAgICAgICAgICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgIC8qbmJfbG9uZyovCi0gICAgICAgICAgICBsb25nX2Zsb2F0LCAgICAgICAgICAgICAgICAgLypuYl9mbG9hdCovCi0gICAgICAgICAgICBsb25nX29jdCwgICAgICAgICAgICAgICAgICAgLypuYl9vY3QqLwotICAgICAgICAgICAgbG9uZ19oZXgsICAgICAgICAgICAgICAgICAgIC8qbmJfaGV4Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FkZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2Vfc3VidHJhY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX211bHRpcGx5ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9kaXZpZGUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3JlbWFpbmRlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcG93ZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2xzaGlmdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcnNoaWZ0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9hbmQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3hvciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2Vfb3IgKi8KLSAgICBsb25nX2RpdiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9mbG9vcl9kaXZpZGUgKi8KLSAgICBsb25nX3RydWVfZGl2aWRlLCAgICAgICAgICAgICAgICAgICAvKiBuYl90cnVlX2RpdmlkZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfZmxvb3JfZGl2aWRlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV90cnVlX2RpdmlkZSAqLwotICAgIGxvbmdfbG9uZywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2luZGV4ICovCisgICAgKGJpbmFyeWZ1bmMpbG9uZ19hZGQsICAgICAgIC8qbmJfYWRkKi8KKyAgICAoYmluYXJ5ZnVuYylsb25nX3N1YiwgICAgICAgLypuYl9zdWJ0cmFjdCovCisgICAgKGJpbmFyeWZ1bmMpbG9uZ19tdWwsICAgICAgIC8qbmJfbXVsdGlwbHkqLworICAgIGxvbmdfY2xhc3NpY19kaXYsICAgICAgICAgICAvKm5iX2RpdmlkZSovCisgICAgbG9uZ19tb2QsICAgICAgICAgICAgICAgICAgIC8qbmJfcmVtYWluZGVyKi8KKyAgICBsb25nX2Rpdm1vZCwgICAgICAgICAgICAgICAgLypuYl9kaXZtb2QqLworICAgIGxvbmdfcG93LCAgICAgICAgICAgICAgICAgICAvKm5iX3Bvd2VyKi8KKyAgICAodW5hcnlmdW5jKWxvbmdfbmVnLCAgICAgICAgLypuYl9uZWdhdGl2ZSovCisgICAgKHVuYXJ5ZnVuYylsb25nX2xvbmcsICAgICAgIC8qdHBfcG9zaXRpdmUqLworICAgICh1bmFyeWZ1bmMpbG9uZ19hYnMsICAgICAgICAvKnRwX2Fic29sdXRlKi8KKyAgICAoaW5xdWlyeSlsb25nX25vbnplcm8sICAgICAgLyp0cF9ub256ZXJvKi8KKyAgICAodW5hcnlmdW5jKWxvbmdfaW52ZXJ0LCAgICAgLypuYl9pbnZlcnQqLworICAgIGxvbmdfbHNoaWZ0LCAgICAgICAgICAgICAgICAvKm5iX2xzaGlmdCovCisgICAgKGJpbmFyeWZ1bmMpbG9uZ19yc2hpZnQsICAgIC8qbmJfcnNoaWZ0Ki8KKyAgICBsb25nX2FuZCwgICAgICAgICAgICAgICAgICAgLypuYl9hbmQqLworICAgIGxvbmdfeG9yLCAgICAgICAgICAgICAgICAgICAvKm5iX3hvciovCisgICAgbG9uZ19vciwgICAgICAgICAgICAgICAgICAgIC8qbmJfb3IqLworICAgIGxvbmdfY29lcmNlLCAgICAgICAgICAgICAgICAvKm5iX2NvZXJjZSovCisgICAgbG9uZ19pbnQsICAgICAgICAgICAgICAgICAgIC8qbmJfaW50Ki8KKyAgICBsb25nX2xvbmcsICAgICAgICAgICAgICAgICAgLypuYl9sb25nKi8KKyAgICBsb25nX2Zsb2F0LCAgICAgICAgICAgICAgICAgLypuYl9mbG9hdCovCisgICAgbG9uZ19vY3QsICAgICAgICAgICAgICAgICAgIC8qbmJfb2N0Ki8KKyAgICBsb25nX2hleCwgICAgICAgICAgICAgICAgICAgLypuYl9oZXgqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FkZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3N1YnRyYWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfbXVsdGlwbHkgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9kaXZpZGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9yZW1haW5kZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9wb3dlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2xzaGlmdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3JzaGlmdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FuZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3hvciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX29yICovCisgICAgbG9uZ19kaXYsICAgICAgICAgICAgICAgICAgIC8qIG5iX2Zsb29yX2RpdmlkZSAqLworICAgIGxvbmdfdHJ1ZV9kaXZpZGUsICAgICAgICAgICAvKiBuYl90cnVlX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2Zsb29yX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3RydWVfZGl2aWRlICovCisgICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgIC8qIG5iX2luZGV4ICovCiB9OwogCiBQeVR5cGVPYmplY3QgUHlMb25nX1R5cGUgPSB7CiAgICAgUHlPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSkKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9iX3NpemUgKi8KICAgICAibG9uZyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KLSAgICBzaXplb2YoUHlMb25nT2JqZWN0KSAtIHNpemVvZihkaWdpdCksICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIG9mZnNldG9mKFB5TG9uZ09iamVjdCwgb2JfZGlnaXQpLCAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCiAgICAgc2l6ZW9mKGRpZ2l0KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLwogICAgIGxvbmdfZGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KQEAgLTM1NjcsNyArNDI5Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19DSEVDS1RZUEVTIHwKLSAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUywgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTLCAvKiB0cF9mbGFncyAqLwogICAgIGxvbmdfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTM1ODYsNSArNDMxMiw1NCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBsb25nX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIFB5T2JqZWN0X0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IExvbmdfSW5mb1R5cGU7CisKK1B5RG9jX1NUUlZBUihsb25nX2luZm9fX2RvY19fLAorInN5cy5sb25nX2luZm9cblwKK1xuXAorQSBzdHJ1Y3Qgc2VxdWVuY2UgdGhhdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBQeXRob24nc1xuXAoraW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgaW50ZWdlcnMuICBUaGUgYXR0cmlidXRlcyBhcmUgcmVhZCBvbmx5LiIpOworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBsb25nX2luZm9fZmllbGRzW10gPSB7CisgICAgeyJiaXRzX3Blcl9kaWdpdCIsICJzaXplIG9mIGEgZGlnaXQgaW4gYml0cyJ9LAorICAgIHsic2l6ZW9mX2RpZ2l0IiwgInNpemUgaW4gYnl0ZXMgb2YgdGhlIEMgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCBhIGRpZ2l0In0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIGxvbmdfaW5mb19kZXNjID0geworICAgICJzeXMubG9uZ19pbmZvIiwgICAvKiBuYW1lICovCisgICAgbG9uZ19pbmZvX19kb2NfXywgIC8qIGRvYyAqLworICAgIGxvbmdfaW5mb19maWVsZHMsICAvKiBmaWVsZHMgKi8KKyAgICAyICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGZpZWxkcyAqLworfTsKKworUHlPYmplY3QgKgorUHlMb25nX0dldEluZm8odm9pZCkKK3sKKyAgICBQeU9iamVjdCogbG9uZ19pbmZvOworICAgIGludCBmaWVsZCA9IDA7CisgICAgbG9uZ19pbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJkxvbmdfSW5mb1R5cGUpOworICAgIGlmIChsb25nX2luZm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShsb25nX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZyhQeUxvbmdfU0hJRlQpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGxvbmdfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5SW50X0Zyb21Mb25nKHNpemVvZihkaWdpdCkpKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9DTEVBUihsb25nX2luZm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGxvbmdfaW5mbzsKK30KKworaW50CitfUHlMb25nX0luaXQodm9pZCkKK3sKKyAgICAvKiBpbml0aWFsaXplIGxvbmdfaW5mbyAqLworICAgIGlmIChMb25nX0luZm9UeXBlLnRwX25hbWUgPT0gMCkKKyAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmTG9uZ19JbmZvVHlwZSwgJmxvbmdfaW5mb19kZXNjKTsKKyAgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYWMyNjYKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCkBAIC0wLDAgKzEsODQyIEBACisKKy8qIE1lbW9yeXZpZXcgb2JqZWN0IGltcGxlbWVudGF0aW9uICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKworc3RhdGljIFB5X3NzaXplX3QKK2dldF9zaGFwZTAoUHlfYnVmZmVyICpidWYpCit7CisgICAgaWYgKGJ1Zi0+c2hhcGUgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGJ1Zi0+c2hhcGVbMF07CisgICAgaWYgKGJ1Zi0+bmRpbSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAiZXhwb3J0ZWQgYnVmZmVyIGRvZXMgbm90IGhhdmUgYW55IHNoYXBlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgIgorICAgICAgICAidG8gaXQiKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitkdXBfYnVmZmVyKFB5X2J1ZmZlciAqZGVzdCwgUHlfYnVmZmVyICpzcmMpCit7CisgICAgKmRlc3QgPSAqc3JjOworICAgIGlmIChzcmMtPm5kaW0gPT0gMSAmJiBzcmMtPnNoYXBlICE9IE5VTEwpIHsKKyAgICAgICAgZGVzdC0+c2hhcGUgPSAmKGRlc3QtPnNtYWxsdGFibGVbMF0pOworICAgICAgICBkZXN0LT5zaGFwZVswXSA9IGdldF9zaGFwZTAoc3JjKTsKKyAgICB9CisgICAgaWYgKHNyYy0+bmRpbSA9PSAxICYmIHNyYy0+c3RyaWRlcyAhPSBOVUxMKSB7CisgICAgICAgIGRlc3QtPnN0cmlkZXMgPSAmKGRlc3QtPnNtYWxsdGFibGVbMV0pOworICAgICAgICBkZXN0LT5zdHJpZGVzWzBdID0gc3JjLT5zdHJpZGVzWzBdOworICAgIH0KK30KKworc3RhdGljIGludAorbWVtb3J5X2dldGJ1ZihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQoreworICAgIGludCByZXMgPSAwOworICAgIGlmIChzZWxmLT52aWV3Lm9iaiAhPSBOVUxMKQorICAgICAgICByZXMgPSBQeU9iamVjdF9HZXRCdWZmZXIoc2VsZi0+dmlldy5vYmosIHZpZXcsIGZsYWdzKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgZHVwX2J1ZmZlcih2aWV3LCAmc2VsZi0+dmlldyk7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQKK21lbW9yeV9yZWxlYXNlYnVmKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlfYnVmZmVyICp2aWV3KQoreworICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Cit9CisKK1B5RG9jX1NUUlZBUihtZW1vcnlfZG9jLAorIm1lbW9yeXZpZXcob2JqZWN0KVxuXAorXG5cCitDcmVhdGUgYSBuZXcgbWVtb3J5dmlldyBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0aGUgZ2l2ZW4gb2JqZWN0LiIpOworCitQeU9iamVjdCAqCitQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcihQeV9idWZmZXIgKmluZm8pCit7CisgICAgUHlNZW1vcnlWaWV3T2JqZWN0ICptdmlldzsKKworICAgIG12aWV3ID0gKFB5TWVtb3J5Vmlld09iamVjdCAqKQorICAgICAgICBQeU9iamVjdF9HQ19OZXcoUHlNZW1vcnlWaWV3T2JqZWN0LCAmUHlNZW1vcnlWaWV3X1R5cGUpOworICAgIGlmIChtdmlldyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtdmlldy0+YmFzZSA9IE5VTEw7CisgICAgZHVwX2J1ZmZlcigmbXZpZXctPnZpZXcsIGluZm8pOworICAgIC8qIE5PVEU6IG12aWV3LT52aWV3Lm9iaiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVmJ2VkIGFzCisgICAgICAgcGFydCBvZiBQeUJ1ZmZlcl9GaWxsSW5mbygpLiAqLworICAgIF9QeU9iamVjdF9HQ19UUkFDSyhtdmlldyk7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW12aWV3OworfQorCitQeU9iamVjdCAqCitQeU1lbW9yeVZpZXdfRnJvbU9iamVjdChQeU9iamVjdCAqYmFzZSkKK3sKKyAgICBQeU1lbW9yeVZpZXdPYmplY3QgKm12aWV3OworICAgIFB5X2J1ZmZlciB2aWV3OworCisgICAgaWYgKCFQeU9iamVjdF9DaGVja0J1ZmZlcihiYXNlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImNhbm5vdCBtYWtlIG1lbW9yeSB2aWV3IGJlY2F1c2Ugb2JqZWN0IGRvZXMgIgorICAgICAgICAgICAgIm5vdCBoYXZlIHRoZSBidWZmZXIgaW50ZXJmYWNlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYmFzZSwgJnZpZXcsIFB5QlVGX0ZVTExfUk8pIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtdmlldyA9IChQeU1lbW9yeVZpZXdPYmplY3QgKilQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmdmlldyk7CisgICAgaWYgKG12aWV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG12aWV3LT5iYXNlID0gYmFzZTsKKyAgICBQeV9JTkNSRUYoYmFzZSk7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW12aWV3OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X25ldyhQeVR5cGVPYmplY3QgKnN1YnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgMH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTzptZW1vcnl2aWV3Iiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdChvYmopOworfQorCisKK3N0YXRpYyB2b2lkCitfc3RyaWRlZF9jb3B5X25kKGNoYXIgKmRlc3QsIGNoYXIgKnNyYywgaW50IG5kLCBQeV9zc2l6ZV90ICpzaGFwZSwKKyAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RyaWRlcywgUHlfc3NpemVfdCBpdGVtc2l6ZSwgY2hhciBmb3J0KQoreworICAgIGludCBrOworICAgIFB5X3NzaXplX3Qgb3V0c3RyaWRlOworCisgICAgaWYgKG5kPT0wKSB7CisgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIGl0ZW1zaXplKTsKKyAgICB9CisgICAgZWxzZSBpZiAobmQgPT0gMSkgeworICAgICAgICBmb3IgKGsgPSAwOyBrPHNoYXBlWzBdOyBrKyspIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIGl0ZW1zaXplKTsKKyAgICAgICAgICAgIGRlc3QgKz0gaXRlbXNpemU7CisgICAgICAgICAgICBzcmMgKz0gc3RyaWRlc1swXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGZvcnQgPT0gJ0YnKSB7CisgICAgICAgICAgICAvKiBDb3B5IGZpcnN0IGRpbWVuc2lvbiBmaXJzdCwKKyAgICAgICAgICAgICAgIHNlY29uZCBkaW1lbnNpb24gc2Vjb25kLCBldGMuLi4KKyAgICAgICAgICAgICAgIFNldCB1cCB0aGUgcmVjdXJzaXZlIGxvb3AgYmFja3dhcmRzIHNvIHRoYXQgZmluYWwKKyAgICAgICAgICAgICAgIGRpbWVuc2lvbiBpcyBhY3R1YWxseSBjb3BpZWQgbGFzdC4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvdXRzdHJpZGUgPSBpdGVtc2l6ZTsKKyAgICAgICAgICAgIGZvciAoaz0xOyBrPG5kLTE7aysrKSB7CisgICAgICAgICAgICAgICAgb3V0c3RyaWRlICo9IHNoYXBlW2tdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChrPTA7IGs8c2hhcGVbbmQtMV07IGsrKykgeworICAgICAgICAgICAgICAgIF9zdHJpZGVkX2NvcHlfbmQoZGVzdCwgc3JjLCBuZC0xLCBzaGFwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZXMsIGl0ZW1zaXplLCBmb3J0KTsKKyAgICAgICAgICAgICAgICBkZXN0ICs9IG91dHN0cmlkZTsKKyAgICAgICAgICAgICAgICBzcmMgKz0gc3RyaWRlc1tuZC0xXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogQ29weSBsYXN0IGRpbWVuc2lvbiBmaXJzdCwKKyAgICAgICAgICAgICAgIHNlY29uZC10by1sYXN0IGRpbWVuc2lvbiBzZWNvbmQsIGV0Yy4KKyAgICAgICAgICAgICAgIFNldCB1cCB0aGUgcmVjdXJzaW9uIHNvIHRoYXQgdGhlCisgICAgICAgICAgICAgICBmaXJzdCBkaW1lbnNpb24gaXMgY29waWVkIGxhc3QKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBvdXRzdHJpZGUgPSBpdGVtc2l6ZTsKKyAgICAgICAgICAgIGZvciAoaz0xOyBrIDwgbmQ7IGsrKykgeworICAgICAgICAgICAgICAgIG91dHN0cmlkZSAqPSBzaGFwZVtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaz0wOyBrPHNoYXBlWzBdOyBrKyspIHsKKyAgICAgICAgICAgICAgICBfc3RyaWRlZF9jb3B5X25kKGRlc3QsIHNyYywgbmQtMSwgc2hhcGUrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZXMrMSwgaXRlbXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J0KTsKKyAgICAgICAgICAgICAgICBkZXN0ICs9IG91dHN0cmlkZTsKKyAgICAgICAgICAgICAgICBzcmMgKz0gc3RyaWRlc1swXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK19pbmRpcmVjdF9jb3B5X25kKGNoYXIgKmRlc3QsIFB5X2J1ZmZlciAqdmlldywgY2hhciBmb3J0KQoreworICAgIFB5X3NzaXplX3QgKmluZGljZXM7CisgICAgaW50IGs7CisgICAgUHlfc3NpemVfdCBlbGVtZW50czsKKyAgICBjaGFyICpwdHI7CisgICAgdm9pZCAoKmZ1bmMpKGludCwgUHlfc3NpemVfdCAqLCBjb25zdCBQeV9zc2l6ZV90ICopOworCisgICAgaWYgKHZpZXctPm5kaW0gPiBQWV9TU0laRV9UX01BWCAvIHNpemVvZihQeV9zc2l6ZV90KSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaW5kaWNlcyA9IChQeV9zc2l6ZV90ICopUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSp2aWV3LT5uZGltKTsKKyAgICBpZiAoaW5kaWNlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChrPTA7IGs8dmlldy0+bmRpbTtrKyspIHsKKyAgICAgICAgaW5kaWNlc1trXSA9IDA7CisgICAgfQorCisgICAgZWxlbWVudHMgPSAxOworICAgIGZvciAoaz0wOyBrPHZpZXctPm5kaW07IGsrKykgeworICAgICAgICBlbGVtZW50cyAqPSB2aWV3LT5zaGFwZVtrXTsKKyAgICB9CisgICAgaWYgKGZvcnQgPT0gJ0YnKSB7CisgICAgICAgIGZ1bmMgPSBfUHlfYWRkX29uZV90b19pbmRleF9GOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZnVuYyA9IF9QeV9hZGRfb25lX3RvX2luZGV4X0M7CisgICAgfQorICAgIHdoaWxlIChlbGVtZW50cy0tKSB7CisgICAgICAgIGZ1bmModmlldy0+bmRpbSwgaW5kaWNlcywgdmlldy0+c2hhcGUpOworICAgICAgICBwdHIgPSBQeUJ1ZmZlcl9HZXRQb2ludGVyKHZpZXcsIGluZGljZXMpOworICAgICAgICBtZW1jcHkoZGVzdCwgcHRyLCB2aWV3LT5pdGVtc2l6ZSk7CisgICAgICAgIGRlc3QgKz0gdmlldy0+aXRlbXNpemU7CisgICAgfQorCisgICAgUHlNZW1fRnJlZShpbmRpY2VzKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAgIEdldCBhIHRoZSBkYXRhIGZyb20gYW4gb2JqZWN0IGFzIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKGluCisgICBlaXRoZXIgJ0MnIG9yICdGJ29ydHJhbiBvcmRlcikgZXZlbiBpZiBpdCBtZWFucyBjb3B5aW5nIGl0IGludG8gYQorICAgc2VwYXJhdGUgbWVtb3J5IGFyZWEuCisKKyAgIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIGEgTWVtb3J5IHZpZXcgb2JqZWN0LiAgSWYgbm8gY29weSBpcyBuZWVkZWQsCisgICB0aGUgbWVtb3J5IHZpZXcgb2JqZWN0IHBvaW50cyB0byB0aGUgb3JpZ2luYWwgbWVtb3J5IGFuZCBob2xkcyBhCisgICBsb2NrIG9uIHRoZSBvcmlnaW5hbC4gIElmIGEgY29weSBpcyBuZWVkZWQsIHRoZW4gdGhlIG1lbW9yeSB2aWV3IG9iamVjdAorICAgcG9pbnRzIHRvIGEgYnJhbmQtbmV3IEJ5dGVzIG9iamVjdCAoYW5kIGhvbGRzIGEgbWVtb3J5IGxvY2sgb24gaXQpLgorCisgICBidWZmZXJ0eXBlCisKKyAgIFB5QlVGX1JFQUQgIGJ1ZmZlciBvbmx5IG5lZWRzIHRvIGJlIHJlYWQtb25seQorICAgUHlCVUZfV1JJVEUgYnVmZmVyIG5lZWRzIHRvIGJlIHdyaXRhYmxlIChnaXZlIGVycm9yIGlmIG5vdCBjb250aWd1b3VzKQorICAgUHlCVUZfU0hBRE9XIGJ1ZmZlciBuZWVkcyB0byBiZSB3cml0YWJsZSBzbyBzaGFkb3cgaXQgd2l0aAorICAgICAgICAgICAgICAgIGEgY29udGlndW91cyBidWZmZXIgaWYgaXQgaXMgbm90LiBUaGUgdmlldyB3aWxsIHBvaW50IHRvCisgICAgICAgICAgICAgICAgdGhlIHNoYWRvdyBidWZmZXIgd2hpY2ggY2FuIGJlIHdyaXR0ZW4gdG8gYW5kIHRoZW4KKyAgICAgICAgICAgICAgICB3aWxsIGJlIGNvcGllZCBiYWNrIGludG8gdGhlIG90aGVyIGJ1ZmZlciB3aGVuIHRoZSBtZW1vcnkKKyAgICAgICAgICAgICAgICB2aWV3IGlzIGRlLWFsbG9jYXRlZC4gIFdoaWxlIHRoZSBzaGFkb3cgYnVmZmVyIGlzCisgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCwgaXQgd2lsbCBoYXZlIGFuIGV4Y2x1c2l2ZSB3cml0ZSBsb2NrIG9uCisgICAgICAgICAgICAgICAgdGhlIG9yaWdpbmFsIGJ1ZmZlci4KKyAqLworCitQeU9iamVjdCAqCitQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cyhQeU9iamVjdCAqb2JqLCBpbnQgYnVmZmVydHlwZSwgY2hhciBmb3J0KQoreworICAgIFB5TWVtb3J5Vmlld09iamVjdCAqbWVtOworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBQeV9idWZmZXIgKnZpZXc7CisgICAgaW50IGZsYWdzOworICAgIGNoYXIgKmRlc3Q7CisKKyAgICBpZiAoIVB5T2JqZWN0X0NoZWNrQnVmZmVyKG9iaikpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgaGF2ZSB0aGUgYnVmZmVyIGludGVyZmFjZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW0gPSBQeU9iamVjdF9HQ19OZXcoUHlNZW1vcnlWaWV3T2JqZWN0LCAmUHlNZW1vcnlWaWV3X1R5cGUpOworICAgIGlmIChtZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2aWV3ID0gJm1lbS0+dmlldzsKKyAgICBmbGFncyA9IFB5QlVGX0ZVTExfUk87CisgICAgc3dpdGNoKGJ1ZmZlcnR5cGUpIHsKKyAgICBjYXNlIFB5QlVGX1dSSVRFOgorICAgICAgICBmbGFncyA9IFB5QlVGX0ZVTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCB2aWV3LCBmbGFncykgIT0gMCkgeworICAgICAgICBQeV9ERUNSRUYobWVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKFB5QnVmZmVyX0lzQ29udGlndW91cyh2aWV3LCBmb3J0KSkgeworICAgICAgICAvKiBubyBjb3B5IG5lZWRlZCAqLworICAgICAgICBQeV9JTkNSRUYob2JqKTsKKyAgICAgICAgbWVtLT5iYXNlID0gb2JqOworICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0sobWVtKTsKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKW1lbTsKKyAgICB9CisgICAgLyogb3RoZXJ3aXNlIGEgY29weSBpcyBuZWVkZWQgKi8KKyAgICBpZiAoYnVmZmVydHlwZSA9PSBQeUJVRl9XUklURSkgeworICAgICAgICBQeV9ERUNSRUYobWVtKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRhYmxlIGNvbnRpZ3VvdXMgYnVmZmVyIHJlcXVlc3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGEgbm9uLWNvbnRpZ3VvdXNvYmplY3QuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy0+bGVuKTsKKyAgICBpZiAoYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobWVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGRlc3QgPSBQeUJ5dGVzX0FTX1NUUklORyhieXRlcyk7CisgICAgLyogZGlmZmVyZW50IGNvcHlpbmcgc3RyYXRlZ3kgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICAgICBvciBub3QgYW55IHBvaW50ZXIgZGUtcmVmZXJlbmNpbmcgaXMgbmVlZGVkCisgICAgKi8KKyAgICAvKiBzdHJpZGVkIG9yIGluLWRpcmVjdCBjb3B5ICovCisgICAgaWYgKHZpZXctPnN1Ym9mZnNldHM9PU5VTEwpIHsKKyAgICAgICAgX3N0cmlkZWRfY29weV9uZChkZXN0LCB2aWV3LT5idWYsIHZpZXctPm5kaW0sIHZpZXctPnNoYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXctPnN0cmlkZXMsIHZpZXctPml0ZW1zaXplLCBmb3J0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfaW5kaXJlY3RfY29weV9uZChkZXN0LCB2aWV3LCBmb3J0KSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgICAgICBQeV9ERUNSRUYobWVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGlmIChidWZmZXJ0eXBlID09IFB5QlVGX1NIQURPVykgeworICAgICAgICAvKiByZXR1cm4gYSBzaGFkb3dlZCBtZW1vcnktdmlldyBvYmplY3QgKi8KKyAgICAgICAgdmlldy0+YnVmID0gZGVzdDsKKyAgICAgICAgbWVtLT5iYXNlID0gUHlUdXBsZV9QYWNrKDIsIG9iaiwgYnl0ZXMpOworICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICBpZiAobWVtLT5iYXNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7ICAvKiBYWFggPyAqLworICAgICAgICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCisgICAgICAgIG1lbS0+YmFzZSA9IGJ5dGVzOworICAgIH0KKyAgICBfUHlPYmplY3RfR0NfVFJBQ0sobWVtKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbWVtOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfZm9ybWF0X2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoc2VsZi0+dmlldy5mb3JtYXQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X2l0ZW1zaXplX2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT52aWV3Lml0ZW1zaXplKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19JbnRUdXBsZUZyb21Tc2l6ZXQoaW50IGxlbiwgUHlfc3NpemVfdCAqdmFscykKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqbzsKKyAgICBQeU9iamVjdCAqaW50VHVwbGU7CisKKyAgICBpZiAodmFscyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorICAgIGludFR1cGxlID0gUHlUdXBsZV9OZXcobGVuKTsKKyAgICBpZiAoIWludFR1cGxlKSByZXR1cm4gTlVMTDsKKyAgICBmb3IoaT0wOyBpPGxlbjsgaSsrKSB7CisgICAgICAgIG8gPSBQeUxvbmdfRnJvbVNzaXplX3QodmFsc1tpXSk7CisgICAgICAgIGlmICghbykgeworICAgICAgICAgICAgUHlfREVDUkVGKGludFR1cGxlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oaW50VHVwbGUsIGksIG8pOworICAgIH0KKyAgICByZXR1cm4gaW50VHVwbGU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfc2hhcGVfZ2V0KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gX0ludFR1cGxlRnJvbVNzaXpldChzZWxmLT52aWV3Lm5kaW0sIHNlbGYtPnZpZXcuc2hhcGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3N0cmlkZXNfZ2V0KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gX0ludFR1cGxlRnJvbVNzaXpldChzZWxmLT52aWV3Lm5kaW0sIHNlbGYtPnZpZXcuc3RyaWRlcyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfc3Vib2Zmc2V0c19nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBfSW50VHVwbGVGcm9tU3NpemV0KHNlbGYtPnZpZXcubmRpbSwgc2VsZi0+dmlldy5zdWJvZmZzZXRzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9yZWFkb25seV9nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoc2VsZi0+dmlldy5yZWFkb25seSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfbmRpbV9nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+dmlldy5uZGltKTsKK30KKworc3RhdGljIFB5R2V0U2V0RGVmIG1lbW9yeV9nZXRzZXRsaXN0W10gPXsKKyAgICB7ImZvcm1hdCIsICAgICAgICAgIChnZXR0ZXIpbWVtb3J5X2Zvcm1hdF9nZXQsICAgICAgTlVMTCwgTlVMTH0sCisgICAgeyJpdGVtc2l6ZSIsICAgICAgICAoZ2V0dGVyKW1lbW9yeV9pdGVtc2l6ZV9nZXQsICAgIE5VTEwsIE5VTEx9LAorICAgIHsic2hhcGUiLCAgICAgICAgICAgKGdldHRlciltZW1vcnlfc2hhcGVfZ2V0LCAgICAgICBOVUxMLCBOVUxMfSwKKyAgICB7InN0cmlkZXMiLCAgICAgICAgIChnZXR0ZXIpbWVtb3J5X3N0cmlkZXNfZ2V0LCAgICAgTlVMTCwgTlVMTH0sCisgICAgeyJzdWJvZmZzZXRzIiwgICAgICAoZ2V0dGVyKW1lbW9yeV9zdWJvZmZzZXRzX2dldCwgIE5VTEwsIE5VTEx9LAorICAgIHsicmVhZG9ubHkiLCAgICAgICAgKGdldHRlciltZW1vcnlfcmVhZG9ubHlfZ2V0LCAgICBOVUxMLCBOVUxMfSwKKyAgICB7Im5kaW0iLCAgICAgICAgICAgIChnZXR0ZXIpbWVtb3J5X25kaW1fZ2V0LCAgICAgICAgTlVMTCwgTlVMTH0sCisgICAge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9LAorfTsKKworCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3RvYnl0ZXMoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKChQeU9iamVjdCAqKXNlbGYsICZ2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKTsKKyAgICBQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoUHlCeXRlc19BU19TVFJJTkcocmVzKSwgJnZpZXcsIHZpZXcubGVuLCAnQycpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXM7Cit9CisKKy8qIFRPRE86IHJld3JpdGUgdGhpcyBmdW5jdGlvbiB1c2luZyB0aGUgc3RydWN0IG1vZHVsZSB0byB1bnBhY2sKKyAgIGVhY2ggYnVmZmVyIGl0ZW0gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV90b2xpc3QoUHlNZW1vcnlWaWV3T2JqZWN0ICptZW0sIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgUHlfYnVmZmVyICp2aWV3ID0gJihtZW0tPnZpZXcpOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqcmVzLCAqaXRlbTsKKyAgICBjaGFyICpidWY7CisKKyAgICBpZiAoc3RyY21wKHZpZXctPmZvcm1hdCwgIkIiKSB8fCB2aWV3LT5pdGVtc2l6ZSAhPSAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAKKyAgICAgICAgICAgICAgICAidG9saXN0KCkgb25seSBzdXBwb3J0cyBieXRlIHZpZXdzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAodmlldy0+bmRpbSAhPSAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAKKyAgICAgICAgICAgICAgICAidG9saXN0KCkgb25seSBzdXBwb3J0cyBvbmUtZGltZW5zaW9uYWwgb2JqZWN0cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzID0gUHlMaXN0X05ldyh2aWV3LT5sZW4pOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmID0gdmlldy0+YnVmOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LT5sZW47IGkrKykgeworICAgICAgICBpdGVtID0gUHlJbnRfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpICpidWYpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShyZXMsIGksIGl0ZW0pOworICAgICAgICBidWYrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1lbW9yeV9tZXRob2RzW10gPSB7CisgICAgeyJ0b2J5dGVzIiwgKFB5Q0Z1bmN0aW9uKW1lbW9yeV90b2J5dGVzLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJ0b2xpc3QiLCAoUHlDRnVuY3Rpb24pbWVtb3J5X3RvbGlzdCwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKKworc3RhdGljIHZvaWQKK21lbW9yeV9kZWFsbG9jKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKK3sKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICBpZiAoc2VsZi0+dmlldy5vYmogIT0gTlVMTCkgeworICAgICAgICBpZiAoc2VsZi0+YmFzZSAmJiBQeVR1cGxlX0NoZWNrKHNlbGYtPmJhc2UpKSB7CisgICAgICAgICAgICAvKiBTcGVjaWFsIGNhc2Ugd2hlbiBmaXJzdCBlbGVtZW50IGlzIGdlbmVyaWMgb2JqZWN0CisgICAgICAgICAgICAgICB3aXRoIGJ1ZmZlciBpbnRlcmZhY2UgYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBpcyBhCisgICAgICAgICAgICAgICBjb250aWd1b3VzICJzaGFkb3ciIHRoYXQgbXVzdCBiZSBjb3BpZWQgYmFjayBpbnRvCisgICAgICAgICAgICAgICB0aGUgZGF0YSBhcmVheSBvZiB0aGUgZmlyc3QgdHVwbGUgZWxlbWVudCBiZWZvcmUKKyAgICAgICAgICAgICAgIHJlbGVhc2luZyB0aGUgYnVmZmVyIG9uIHRoZSBmaXJzdCBlbGVtZW50LgorICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgUHlPYmplY3RfQ29weURhdGEoUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5iYXNlLDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5iYXNlLDEpKTsKKworICAgICAgICAgICAgLyogVGhlIHZpZXcgbWVtYmVyIHNob3VsZCBoYXZlIHJlYWRvbmx5ID09IC0xIGluCisgICAgICAgICAgICAgICB0aGlzIGluc3RhbmNlIGluZGljYXRpbmcgdGhhdCB0aGUgbWVtb3J5IGNhbgorICAgICAgICAgICAgICAgYmUgImxvY2tlZCIgYW5kIHdhcyBsb2NrZWQgYW5kIHdpbGwgYmUgdW5sb2NrZWQKKyAgICAgICAgICAgICAgIGFnYWluIGFmdGVyIHRoaXMgY2FsbC4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCYoc2VsZi0+dmlldykpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmKHNlbGYtPnZpZXcpKTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihzZWxmLT5iYXNlKTsKKyAgICB9CisgICAgUHlPYmplY3RfR0NfRGVsKHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3JlcHIoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeVN0cmluZ19Gcm9tRm9ybWF0KCI8bWVtb3J5IGF0ICVwPiIsIHNlbGYpOworfQorCisvKiBTZXF1ZW5jZSBtZXRob2RzICovCitzdGF0aWMgUHlfc3NpemVfdAorbWVtb3J5X2xlbmd0aChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIGdldF9zaGFwZTAoJnNlbGYtPnZpZXcpOworfQorCisvKiBBbHRlcm5hdGUgdmVyc2lvbiBvZiBtZW1vcnlfc3ViY3JpcHQgdGhhdCBvbmx5IGFjY2VwdHMgaW5kaWNlcy4KKyAgIFVzZWQgYnkgUHlTZXFJdGVyX05ldygpLgorKi8KK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfaXRlbShQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgcmVzdWx0KQoreworICAgIFB5X2J1ZmZlciAqdmlldyA9ICYoc2VsZi0+dmlldyk7CisKKyAgICBpZiAodmlldy0+bmRpbSA9PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgaW5kZXhpbmcgb2YgMC1kaW0gbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAodmlldy0+bmRpbSA9PSAxKSB7CisgICAgICAgIC8qIFJldHVybiBhIGJ5dGVzIG9iamVjdCAqLworICAgICAgICBjaGFyICpwdHI7CisgICAgICAgIHB0ciA9IChjaGFyICopdmlldy0+YnVmOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgcmVzdWx0ICs9IGdldF9zaGFwZTAodmlldyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChyZXN1bHQgPCAwKSB8fCAocmVzdWx0ID49IGdldF9zaGFwZTAodmlldykpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4IG91dCBvZiBib3VuZHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICh2aWV3LT5zdHJpZGVzID09IE5VTEwpCisgICAgICAgICAgICBwdHIgKz0gdmlldy0+aXRlbXNpemUgKiByZXN1bHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHB0ciArPSB2aWV3LT5zdHJpZGVzWzBdICogcmVzdWx0OworICAgICAgICBpZiAodmlldy0+c3Vib2Zmc2V0cyAhPSBOVUxMICYmCisgICAgICAgICAgICB2aWV3LT5zdWJvZmZzZXRzWzBdID49IDApIHsKKyAgICAgICAgICAgIHB0ciA9ICooKGNoYXIgKiopcHRyKSArIHZpZXctPnN1Ym9mZnNldHNbMF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocHRyLCB2aWV3LT5pdGVtc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUmV0dXJuIGEgbmV3IG1lbW9yeS12aWV3IG9iamVjdCAqLworICAgICAgICBQeV9idWZmZXIgbmV3dmlldzsKKyAgICAgICAgbWVtc2V0KCZuZXd2aWV3LCAwLCBzaXplb2YobmV3dmlldykpOworICAgICAgICAvKiBYWFg6ICBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHNvIGl0IGFjdHVhbGx5IHJldHVybnMgYSBzdWItdmlldyAqLworICAgICAgICByZXR1cm4gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJm5ld3ZpZXcpOworICAgIH0KK30KKworLyoKKyAgbWVtW29ial0gcmV0dXJucyBhIGJ5dGVzIG9iamVjdCBob2xkaW5nIHRoZSBkYXRhIGZvciBvbmUgZWxlbWVudCBpZgorICAgICAgICAgICBvYmogZnVsbHkgaW5kZXhlcyB0aGUgbWVtb3J5IHZpZXcgb3IgYW5vdGhlciBtZW1vcnktdmlldyBvYmplY3QKKyAgICAgICAgICAgaWYgaXQgZG9lcyBub3QuCisKKyAgICAgICAgICAgMC1kIG1lbW9yeS12aWV3IG9iamVjdHMgY2FuIGJlIHJlZmVyZW5jZWQgdXNpbmcgLi4uIG9yICgpIGJ1dAorICAgICAgICAgICBub3Qgd2l0aCBhbnl0aGluZyBlbHNlLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X3N1YnNjcmlwdChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCit7CisgICAgUHlfYnVmZmVyICp2aWV3OworICAgIHZpZXcgPSAmKHNlbGYtPnZpZXcpOworICAgIAorICAgIGlmICh2aWV3LT5uZGltID09IDApIHsKKyAgICAgICAgaWYgKGtleSA9PSBQeV9FbGxpcHNpcyB8fAorICAgICAgICAgICAgKFB5VHVwbGVfQ2hlY2soa2V5KSAmJiBQeVR1cGxlX0dFVF9TSVpFKGtleSk9PTApKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBpbmRleGluZyBvZiAwLWRpbSBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeUluZGV4X0NoZWNrKGtleSkpIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0FzU3NpemVfdChrZXksIE5VTEwpOworICAgICAgICBpZiAocmVzdWx0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBtZW1vcnlfaXRlbShzZWxmLCByZXN1bHQpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGtleSkpIHsKKyAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW5ndGg7CisKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0KilrZXksIGdldF9zaGFwZTAodmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChzdGVwID09IDEgJiYgdmlldy0+bmRpbSA9PSAxKSB7CisgICAgICAgICAgICBQeV9idWZmZXIgbmV3dmlldzsKKyAgICAgICAgICAgIHZvaWQgKm5ld2J1ZiA9IChjaGFyICopIHZpZXctPmJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGFydCAqIHZpZXctPml0ZW1zaXplOworICAgICAgICAgICAgaW50IG5ld2ZsYWdzID0gdmlldy0+cmVhZG9ubHkKKyAgICAgICAgICAgICAgICAgICAgPyBQeUJVRl9DT05USUdfUk8gOiBQeUJVRl9DT05USUc7CisgICAgCisgICAgICAgICAgICAvKiBYWFggVGhlcmUgc2hvdWxkIGJlIGFuIEFQSSB0byBjcmVhdGUgYSBzdWJidWZmZXIgKi8KKyAgICAgICAgICAgIGlmICh2aWV3LT5vYmogIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodmlldy0+b2JqLCAmbmV3dmlldywgbmV3ZmxhZ3MpID09IC0xKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG5ld3ZpZXcgPSAqdmlldzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld3ZpZXcuYnVmID0gbmV3YnVmOworICAgICAgICAgICAgbmV3dmlldy5sZW4gPSBzbGljZWxlbmd0aCAqIG5ld3ZpZXcuaXRlbXNpemU7CisgICAgICAgICAgICBuZXd2aWV3LmZvcm1hdCA9IHZpZXctPmZvcm1hdDsKKyAgICAgICAgICAgIG5ld3ZpZXcuc2hhcGUgPSAmKG5ld3ZpZXcuc21hbGx0YWJsZVswXSk7CisgICAgICAgICAgICBuZXd2aWV3LnNoYXBlWzBdID0gc2xpY2VsZW5ndGg7CisgICAgICAgICAgICBuZXd2aWV3LnN0cmlkZXMgPSAmKG5ld3ZpZXcuaXRlbXNpemUpOworICAgICAgICAgICAgcmV0dXJuIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZuZXd2aWV3KTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgImNhbm5vdCBpbmRleCBtZW1vcnkgdXNpbmcgXCIlLjIwMHNcIiIsIAorICAgICAgICBrZXktPm9iX3R5cGUtPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCisKKy8qIE5lZWQgdG8gc3VwcG9ydCBhc3NpZ25pbmcgbWVtb3J5IGlmIHdlIGNhbiAqLworc3RhdGljIGludAorbWVtb3J5X2Fzc19zdWIoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCit7CisgICAgUHlfc3NpemVfdCBzdGFydCwgbGVuLCBieXRlbGVuOworICAgIFB5X2J1ZmZlciBzcmN2aWV3OworICAgIFB5X2J1ZmZlciAqdmlldyA9ICYoc2VsZi0+dmlldyk7CisgICAgY2hhciAqc3JjYnVmLCAqZGVzdGJ1ZjsKKworICAgIGlmICh2aWV3LT5yZWFkb25seSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImNhbm5vdCBtb2RpZnkgcmVhZC1vbmx5IG1lbW9yeSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGRlbGV0ZSBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAodmlldy0+bmRpbSAhPSAxKSB7CisgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKFB5SW5kZXhfQ2hlY2soa2V5KSkgeworICAgICAgICBzdGFydCA9IFB5TnVtYmVyX0FzU3NpemVfdChrZXksIE5VTEwpOworICAgICAgICBpZiAoc3RhcnQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgc3RhcnQgKz0gZ2V0X3NoYXBlMCh2aWV3KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKHN0YXJ0ID49IGdldF9zaGFwZTAodmlldykpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kZXggb3V0IG9mIGJvdW5kcyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGxlbiA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soa2V5KSkgeworICAgICAgICBQeV9zc2l6ZV90IHN0b3AsIHN0ZXA7CisKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0KilrZXksIGdldF9zaGFwZTAodmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZsZW4pIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChzdGVwICE9IDEpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY2Fubm90IGluZGV4IG1lbW9yeSB1c2luZyBcIiUuMjAwc1wiIiwgCisgICAgICAgICAgICBrZXktPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodmFsdWUsICZzcmN2aWV3LCBQeUJVRl9DT05USUdfUk8pID09IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgLyogWFhYIHNob3VsZCB3ZSBhbGxvdyBhc3NpZ25tZW50IG9mIGRpZmZlcmVudCBpdGVtIHNpemVzCisgICAgICAgYXMgbG9uZyBhcyB0aGUgYnl0ZSBsZW5ndGggaXMgdGhlIHNhbWU/CisgICAgICAgKGUuZy4gYXNzaWduIDIgc2hvcnRzIHRvIGEgNC1ieXRlIHNsaWNlKSAqLworICAgIGlmIChzcmN2aWV3Lml0ZW1zaXplICE9IHZpZXctPml0ZW1zaXplKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAibWlzbWF0Y2hpbmcgaXRlbSBzaXplcyBmb3IgXCIlLjIwMHNcIiBhbmQgXCIlLjIwMHNcIiIsIAorICAgICAgICAgICAgdmlldy0+b2JqLT5vYl90eXBlLT50cF9uYW1lLCBzcmN2aWV3Lm9iai0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gX2Vycm9yOworICAgIH0KKyAgICBieXRlbGVuID0gbGVuICogdmlldy0+aXRlbXNpemU7CisgICAgaWYgKGJ5dGVsZW4gIT0gc3Jjdmlldy5sZW4pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAiY2Fubm90IG1vZGlmeSBzaXplIG9mIG1lbW9yeXZpZXcgb2JqZWN0Iik7CisgICAgICAgIGdvdG8gX2Vycm9yOworICAgIH0KKyAgICAvKiBEbyB0aGUgYWN0dWFsIGNvcHkgKi8KKyAgICBkZXN0YnVmID0gKGNoYXIgKikgdmlldy0+YnVmICsgc3RhcnQgKiB2aWV3LT5pdGVtc2l6ZTsKKyAgICBzcmNidWYgPSAoY2hhciAqKSBzcmN2aWV3LmJ1ZjsKKyAgICBpZiAoZGVzdGJ1ZiArIGJ5dGVsZW4gPCBzcmNidWYgfHwgc3JjYnVmICsgYnl0ZWxlbiA8IGRlc3RidWYpCisgICAgICAgIC8qIE5vIG92ZXJsYXBwaW5nICovCisgICAgICAgIG1lbWNweShkZXN0YnVmLCBzcmNidWYsIGJ5dGVsZW4pOworICAgIGVsc2UKKyAgICAgICAgbWVtbW92ZShkZXN0YnVmLCBzcmNidWYsIGJ5dGVsZW4pOworCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc3Jjdmlldyk7CisgICAgcmV0dXJuIDA7CisKK19lcnJvcjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzcmN2aWV3KTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfcmljaGNvbXBhcmUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBpbnQgb3ApCit7CisgICAgUHlfYnVmZmVyIHZ2LCB3dzsKKyAgICBpbnQgZXF1YWwgPSAwOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICB2di5vYmogPSBOVUxMOworICAgIHd3Lm9iaiA9IE5VTEw7CisgICAgaWYgKG9wICE9IFB5X0VRICYmIG9wICE9IFB5X05FKQorICAgICAgICBnb3RvIF9ub3RpbXBsOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodiwgJnZ2LCBQeUJVRl9DT05USUdfUk8pID09IC0xKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGdvdG8gX25vdGltcGw7CisgICAgfQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodywgJnd3LCBQeUJVRl9DT05USUdfUk8pID09IC0xKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGdvdG8gX25vdGltcGw7CisgICAgfQorCisgICAgaWYgKHZ2Lml0ZW1zaXplICE9IHd3Lml0ZW1zaXplIHx8IHZ2LmxlbiAhPSB3dy5sZW4pCisgICAgICAgIGdvdG8gX2VuZDsKKworICAgIGVxdWFsID0gIW1lbWNtcCh2di5idWYsIHd3LmJ1ZiwgdnYubGVuKTsKKworX2VuZDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmd3cpOworICAgIGlmICgoZXF1YWwgJiYgb3AgPT0gUHlfRVEpIHx8ICghZXF1YWwgJiYgb3AgPT0gUHlfTkUpKQorICAgICAgICByZXMgPSBQeV9UcnVlOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gUHlfRmFsc2U7CisgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgcmV0dXJuIHJlczsKKworX25vdGltcGw6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnYpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnd3KTsKKyAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKK30KKworCitzdGF0aWMgaW50CittZW1vcnlfdHJhdmVyc2UoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBpZiAoc2VsZi0+YmFzZSAhPSBOVUxMKQorICAgICAgICBQeV9WSVNJVChzZWxmLT5iYXNlKTsKKyAgICBpZiAoc2VsZi0+dmlldy5vYmogIT0gTlVMTCkKKyAgICAgICAgUHlfVklTSVQoc2VsZi0+dmlldy5vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CittZW1vcnlfY2xlYXIoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQoreworICAgIFB5X0NMRUFSKHNlbGYtPmJhc2UpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPnZpZXcpOworICAgIHJldHVybiAwOworfQorCisKKy8qIEFzIG1hcHBpbmcgKi8KK3N0YXRpYyBQeU1hcHBpbmdNZXRob2RzIG1lbW9yeV9hc19tYXBwaW5nID0geworICAgIChsZW5mdW5jKW1lbW9yeV9sZW5ndGgsICAgICAgICAgICAgICAgLyogbXBfbGVuZ3RoICovCisgICAgKGJpbmFyeWZ1bmMpbWVtb3J5X3N1YnNjcmlwdCwgICAgICAgICAvKiBtcF9zdWJzY3JpcHQgKi8KKyAgICAob2Jqb2JqYXJncHJvYyltZW1vcnlfYXNzX3N1YiwgICAgICAgIC8qIG1wX2Fzc19zdWJzY3JpcHQgKi8KK307CisKK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBtZW1vcnlfYXNfc2VxdWVuY2UgPSB7CisJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCisJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCisJMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0ICovCisJKHNzaXplYXJnZnVuYyltZW1vcnlfaXRlbSwgICAgICAgICAgLyogc3FfaXRlbSAqLworfTsKKworLyogQnVmZmVyIG1ldGhvZHMgKi8KK3N0YXRpYyBQeUJ1ZmZlclByb2NzIG1lbW9yeV9hc19idWZmZXIgPSB7CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiZl9nZXRyZWFkYnVmZmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiZl9nZXR3cml0ZWJ1ZmZlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmZfZ2V0c2VnY291bnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJmX2dldGNoYXJidWZmZXIgKi8KKyAgICAoZ2V0YnVmZmVycHJvYyltZW1vcnlfZ2V0YnVmLCAgICAgICAgIC8qIGJmX2dldGJ1ZmZlciAqLworICAgIChyZWxlYXNlYnVmZmVycHJvYyltZW1vcnlfcmVsZWFzZWJ1ZiwgLyogYmZfcmVsZWFzZWJ1ZmZlciAqLworfTsKKworCitQeVR5cGVPYmplY3QgUHlNZW1vcnlWaWV3X1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAibWVtb3J5dmlldyIsCisgICAgc2l6ZW9mKFB5TWVtb3J5Vmlld09iamVjdCksCisgICAgMCwKKyAgICAoZGVzdHJ1Y3RvciltZW1vcnlfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAocmVwcmZ1bmMpbWVtb3J5X3JlcHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgJm1lbW9yeV9hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAmbWVtb3J5X2FzX21hcHBpbmcsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgJm1lbW9yeV9hc19idWZmZXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUiwgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIG1lbW9yeV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpbWVtb3J5X3RyYXZlcnNlLCAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpbWVtb3J5X2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICBtZW1vcnlfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgbWVtb3J5X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBtZW1vcnlfZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBtZW1vcnlfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CmRpZmYgLS1naXQgYS9PYmplY3RzL29iamVjdC5jIGIvT2JqZWN0cy9vYmplY3QuYwppbmRleCA0MjRmMzUzLi5iNmFkNWRlIDEwMDY0NAotLS0gYS9PYmplY3RzL29iamVjdC5jCisrKyBiL09iamVjdHMvb2JqZWN0LmMKQEAgLTgyLDI0ICs4MiwyOSBAQAogICAgZ2FyYmFnZSBpdHNlbGYuIElmIHVubGlzdF90eXBlc193aXRob3V0X29iamVjdHMKICAgIGlzIHNldCwgdGhleSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgdHlwZV9saXN0CiAgICBvbmNlIHRoZSBsYXN0IG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gKi8KLWludCB1bmxpc3RfdHlwZXNfd2l0aG91dF9vYmplY3RzOwotZXh0ZXJuIGludCB0dXBsZV96ZXJvX2FsbG9jcywgZmFzdF90dXBsZV9hbGxvY3M7Ci1leHRlcm4gaW50IHF1aWNrX2ludF9hbGxvY3MsIHF1aWNrX25lZ19pbnRfYWxsb2NzOwotZXh0ZXJuIGludCBudWxsX3N0cmluZ3MsIG9uZV9zdHJpbmdzOworc3RhdGljIGludCB1bmxpc3RfdHlwZXNfd2l0aG91dF9vYmplY3RzOworZXh0ZXJuIFB5X3NzaXplX3QgdHVwbGVfemVyb19hbGxvY3MsIGZhc3RfdHVwbGVfYWxsb2NzOworZXh0ZXJuIFB5X3NzaXplX3QgcXVpY2tfaW50X2FsbG9jcywgcXVpY2tfbmVnX2ludF9hbGxvY3M7CitleHRlcm4gUHlfc3NpemVfdCBudWxsX3N0cmluZ3MsIG9uZV9zdHJpbmdzOwogdm9pZAogZHVtcF9jb3VudHMoRklMRSogZikKIHsKICAgICBQeVR5cGVPYmplY3QgKnRwOwogCiAgICAgZm9yICh0cCA9IHR5cGVfbGlzdDsgdHA7IHRwID0gdHAtPnRwX25leHQpCi0gICAgICAgIGZwcmludGYoZiwgIiVzIGFsbG9jJ2Q6ICVkLCBmcmVlZDogJWQsIG1heCBpbiB1c2U6ICVkXG4iLAorICAgICAgICBmcHJpbnRmKGYsICIlcyBhbGxvYydkOiAlIiBQWV9GT1JNQVRfU0laRV9UICJkLCAiCisgICAgICAgICAgICAiZnJlZWQ6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQsICIKKyAgICAgICAgICAgICJtYXggaW4gdXNlOiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAogICAgICAgICAgICAgdHAtPnRwX25hbWUsIHRwLT50cF9hbGxvY3MsIHRwLT50cF9mcmVlcywKICAgICAgICAgICAgIHRwLT50cF9tYXhhbGxvYyk7Ci0gICAgZnByaW50ZihmLCAiZmFzdCB0dXBsZSBhbGxvY3M6ICVkLCBlbXB0eTogJWRcbiIsCisgICAgZnByaW50ZihmLCAiZmFzdCB0dXBsZSBhbGxvY3M6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQsICIKKyAgICAgICAgImVtcHR5OiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAogICAgICAgICBmYXN0X3R1cGxlX2FsbG9jcywgdHVwbGVfemVyb19hbGxvY3MpOwotICAgIGZwcmludGYoZiwgImZhc3QgaW50IGFsbG9jczogcG9zOiAlZCwgbmVnOiAlZFxuIiwKKyAgICBmcHJpbnRmKGYsICJmYXN0IGludCBhbGxvY3M6IHBvczogJSIgUFlfRk9STUFUX1NJWkVfVCAiZCwgIgorICAgICAgICAibmVnOiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAogICAgICAgICBxdWlja19pbnRfYWxsb2NzLCBxdWlja19uZWdfaW50X2FsbG9jcyk7Ci0gICAgZnByaW50ZihmLCAibnVsbCBzdHJpbmdzOiAlZCwgMS1zdHJpbmdzOiAlZFxuIiwKKyAgICBmcHJpbnRmKGYsICJudWxsIHN0cmluZ3M6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQsICIKKyAgICAgICAgIjEtc3RyaW5nczogJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKICAgICAgICAgbnVsbF9zdHJpbmdzLCBvbmVfc3RyaW5ncyk7CiB9CiAKQEAgLTQ4MywxMiArNDg4LDYgQEAKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgLyogVHJ5IHRoZSBfX3VuaWNvZGVfXyBtZXRob2QgKi8KLSAgICBpZiAodW5pY29kZXN0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHVuaWNvZGVzdHI9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fdW5pY29kZV9fIik7Ci0gICAgICAgIGlmICh1bmljb2Rlc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgaWYgKFB5SW5zdGFuY2VfQ2hlY2sodikpIHsKICAgICAgICAgLyogV2UncmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzc2ljIGNsYXNzICovCiAgICAgICAgIC8qIFRyeSBfX3VuaWNvZGVfXyBmcm9tIHRoZSBpbnN0YW5jZSAtLSBhbGFzIHdlIGhhdmUgbm8gdHlwZSAqLwpAQCAtNTAzLDE2ICs1MDIsMTUgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTm90IGEgY2xhc3NpYyBjbGFzcyBpbnN0YW5jZSwgdHJ5IF9fdW5pY29kZV9fIGZyb20gdHlwZSAqLwotICAgICAgICAvKiBfUHlUeXBlX0xvb2t1cCBkb2Vzbid0IGNyZWF0ZSBhIHJlZmVyZW5jZSAqLwotICAgICAgICBmdW5jID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRSh2KSwgdW5pY29kZXN0cik7CisgICAgICAgIC8qIE5vdCBhIGNsYXNzaWMgY2xhc3MgaW5zdGFuY2UsIHRyeSBfX3VuaWNvZGVfXy4gKi8KKyAgICAgICAgZnVuYyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHYsICJfX3VuaWNvZGVfXyIsICZ1bmljb2Rlc3RyKTsKICAgICAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICAgICAgdW5pY29kZV9tZXRob2RfZm91bmQgPSAxOwotICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCB2LCBOVUxMKTsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZnVuYywgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBEaWRuJ3QgZmluZCBfX3VuaWNvZGVfXyAqLwpAQCAtMTAyNywxNSArMTAyNSwxOCBAQAogICAgICAqIG9mIG1hcHBpbmcga2V5cyB3aWxsIHR1cm4gb3V0IHdlaXJkLgogICAgICAqLwogCisgICAgaWYgKCFQeV9JU19GSU5JVEUodikpIHsKKyAgICAgICAgaWYgKFB5X0lTX0lORklOSVRZKHYpKQorICAgICAgICAgICAgcmV0dXJuIHYgPCAwID8gLTI3MTgyOCA6IDMxNDE1OTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGZyYWN0cGFydCA9IG1vZGYodiwgJmludHBhcnQpOwogICAgIGlmIChmcmFjdHBhcnQgPT0gMC4wKSB7CiAgICAgICAgIC8qIFRoaXMgbXVzdCByZXR1cm4gdGhlIHNhbWUgaGFzaCBhcyBhbiBlcXVhbCBpbnQgb3IgbG9uZy4gKi8KICAgICAgICAgaWYgKGludHBhcnQgPiBMT05HX01BWC8yIHx8IC1pbnRwYXJ0ID4gTE9OR19NQVgvMikgewogICAgICAgICAgICAgLyogQ29udmVydCB0byBsb25nIGFuZCB1c2UgaXRzIGhhc2guICovCiAgICAgICAgICAgICBQeU9iamVjdCAqcGxvbmc7ICAgICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0ZWQgdG8gUHl0aG9uIGxvbmcgKi8KLSAgICAgICAgICAgIGlmIChQeV9JU19JTkZJTklUWShpbnRwYXJ0KSkKLSAgICAgICAgICAgICAgICAvKiBjYW4ndCBjb252ZXJ0IHRvIGxvbmcgaW50IC0tIGFyYml0cmFyeSAqLwotICAgICAgICAgICAgICAgIHYgPSB2IDwgMCA/IC0yNzE4MjguMCA6IDMxNDE1OS4wOwogICAgICAgICAgICAgcGxvbmcgPSBQeUxvbmdfRnJvbURvdWJsZSh2KTsKICAgICAgICAgICAgIGlmIChwbG9uZyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTEwNzQsMjMgKzEwNzUsMTUgQEAKIGxvbmcKIF9QeV9IYXNoUG9pbnRlcih2b2lkICpwKQogewotI2lmIFNJWkVPRl9MT05HID49IFNJWkVPRl9WT0lEX1AKLSAgICByZXR1cm4gKGxvbmcpcDsKLSNlbHNlCi0gICAgLyogY29udmVydCB0byBhIFB5dGhvbiBsb25nIGFuZCBoYXNoIHRoYXQgKi8KLSAgICBQeU9iamVjdCogbG9uZ29iajsKICAgICBsb25nIHg7Ci0KLSAgICBpZiAoKGxvbmdvYmogPSBQeUxvbmdfRnJvbVZvaWRQdHIocCkpID09IE5VTEwpIHsKLSAgICAgICAgeCA9IC0xOwotICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIHggPSBQeU9iamVjdF9IYXNoKGxvbmdvYmopOwotCi1maW5hbGx5OgotICAgIFB5X1hERUNSRUYobG9uZ29iaik7CisgICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7CisgICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAorICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCisgICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOworICAgIHggPSAobG9uZyl5OworICAgIGlmICh4ID09IC0xKQorICAgICAgICB4ID0gLTI7CiAgICAgcmV0dXJuIHg7Ci0jZW5kaWYKIH0KIAogbG9uZwpAQCAtMTMwNywxMCArMTMwMCwyNCBAQAogICAgIHJldHVybiBvYmo7CiB9CiAKKy8qIEhlbHBlciB1c2VkIHdoZW4gdGhlIF9fbmV4dF9fIG1ldGhvZCBpcyByZW1vdmVkIGZyb20gYSB0eXBlOgorICAgdHBfaXRlcm5leHQgaXMgbmV2ZXIgTlVMTCBhbmQgY2FuIGJlIHNhZmVseSBjYWxsZWQgd2l0aG91dCBjaGVja2luZworICAgb24gZXZlcnkgaXRlcmF0aW9uLgorICovCisKK1B5T2JqZWN0ICoKK19QeU9iamVjdF9OZXh0Tm90SW1wbGVtZW50ZWQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgIiclLjIwMHMnIG9iamVjdCBpcyBub3QgaXRlcmFibGUiLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwogLyogR2VuZXJpYyBHZXRBdHRyIGZ1bmN0aW9ucyAtIHB1dCB0aGVzZSBpbiB5b3VyIHRwX1tnc11ldGF0dHJvIHNsb3QgKi8KIAogUHlPYmplY3QgKgotUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpCitfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGljdChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmRpY3QpCiB7CiAgICAgUHlUeXBlT2JqZWN0ICp0cCA9IFB5X1RZUEUob2JqKTsKICAgICBQeU9iamVjdCAqZGVzY3IgPSBOVUxMOwpAQCAtMTM4OCwzNyArMTM5NSwzOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogSW5saW5lIF9QeU9iamVjdF9HZXREaWN0UHRyICovCi0gICAgZGljdG9mZnNldCA9IHRwLT50cF9kaWN0b2Zmc2V0OwotICAgIGlmIChkaWN0b2Zmc2V0ICE9IDApIHsKLSAgICAgICAgUHlPYmplY3QgKmRpY3Q7Ci0gICAgICAgIGlmIChkaWN0b2Zmc2V0IDwgMCkgewotICAgICAgICAgICAgUHlfc3NpemVfdCB0c2l6ZTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgLyogSW5saW5lIF9QeU9iamVjdF9HZXREaWN0UHRyICovCisgICAgICAgIGRpY3RvZmZzZXQgPSB0cC0+dHBfZGljdG9mZnNldDsKKyAgICAgICAgaWYgKGRpY3RvZmZzZXQgIT0gMCkgeworICAgICAgICAgICAgaWYgKGRpY3RvZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB0c2l6ZTsKKyAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKIAotICAgICAgICAgICAgdHNpemUgPSAoKFB5VmFyT2JqZWN0ICopb2JqKS0+b2Jfc2l6ZTsKLSAgICAgICAgICAgIGlmICh0c2l6ZSA8IDApCi0gICAgICAgICAgICAgICAgdHNpemUgPSAtdHNpemU7Ci0gICAgICAgICAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCB0c2l6ZSk7CisgICAgICAgICAgICAgICAgdHNpemUgPSAoKFB5VmFyT2JqZWN0ICopb2JqKS0+b2Jfc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAodHNpemUgPCAwKQorICAgICAgICAgICAgICAgICAgICB0c2l6ZSA9IC10c2l6ZTsKKyAgICAgICAgICAgICAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCB0c2l6ZSk7CiAKLSAgICAgICAgICAgIGRpY3RvZmZzZXQgKz0gKGxvbmcpc2l6ZTsKLSAgICAgICAgICAgIGFzc2VydChkaWN0b2Zmc2V0ID4gMCk7Ci0gICAgICAgICAgICBhc3NlcnQoZGljdG9mZnNldCAlIFNJWkVPRl9WT0lEX1AgPT0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGljdHB0ciA9IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgZGljdG9mZnNldCk7Ci0gICAgICAgIGRpY3QgPSAqZGljdHB0cjsKLSAgICAgICAgaWYgKGRpY3QgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwotICAgICAgICAgICAgcmVzID0gUHlEaWN0X0dldEl0ZW0oZGljdCwgbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYocmVzKTsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGRlc2NyKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7Ci0gICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIGRpY3RvZmZzZXQgKz0gKGxvbmcpc2l6ZTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZGljdG9mZnNldCA+IDApOworICAgICAgICAgICAgICAgIGFzc2VydChkaWN0b2Zmc2V0ICUgU0laRU9GX1ZPSURfUCA9PSAwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIGRpY3RwdHIgPSAoUHlPYmplY3QgKiopICgoY2hhciAqKW9iaiArIGRpY3RvZmZzZXQpOworICAgICAgICAgICAgZGljdCA9ICpkaWN0cHRyOwogICAgICAgICB9CiAgICAgfQorICAgIGlmIChkaWN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworICAgICAgICByZXMgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBuYW1lKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYocmVzKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoZGVzY3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICB9CiAKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHJlcyA9IGYoZGVzY3IsIG9iaiwgKFB5T2JqZWN0ICopUHlfVFlQRShvYmopKTsKQEAgLTE0NDAsOCArMTQ0OCwxNSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK1B5T2JqZWN0ICoKK1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKQoreworICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGljdChvYmosIG5hbWUsIE5VTEwpOworfQorCiBpbnQKLVB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdmFsdWUpCitfUHlPYmplY3RfR2VuZXJpY1NldEF0dHJXaXRoRGljdChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKmRpY3QpCiB7CiAgICAgUHlUeXBlT2JqZWN0ICp0cCA9IFB5X1RZUEUob2JqKTsKICAgICBQeU9iamVjdCAqZGVzY3I7CkBAIC0xNDg3LDI2ICsxNTAyLDI4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKLSAgICBpZiAoZGljdHB0ciAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpkaWN0ID0gKmRpY3RwdHI7Ci0gICAgICAgIGlmIChkaWN0ID09IE5VTEwgJiYgdmFsdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgZGljdCA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgKmRpY3RwdHIgPSBkaWN0OworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgZGljdHB0ciA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CisgICAgICAgIGlmIChkaWN0cHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGRpY3QgPSAqZGljdHB0cjsKKyAgICAgICAgICAgIGlmIChkaWN0ID09IE5VTEwgJiYgdmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICpkaWN0cHRyID0gZGljdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGljdCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXMgPSBQeURpY3RfRGVsSXRlbShkaWN0LCBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbShkaWN0LCBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9CisgICAgfQorICAgIGlmIChkaWN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtKGRpY3QsIG5hbWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbShkaWN0LCBuYW1lLCB2YWx1ZSk7CisgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBuYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCiAgICAgaWYgKGYgIT0gTlVMTCkgewpAQCAtMTUyOSw2ICsxNTQ2LDEzIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAoraW50CitQeU9iamVjdF9HZW5lcmljU2V0QXR0cihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQoreworICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY1NldEF0dHJXaXRoRGljdChvYmosIG5hbWUsIHZhbHVlLCBOVUxMKTsKK30KKworCiAvKiBUZXN0IGEgdmFsdWUgdXNlZCBhcyBjb25kaXRpb24sIGUuZy4sIGluIGEgZm9yIG9yIGlmIHN0YXRlbWVudC4KICAgIFJldHVybiAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCAqLwogCkBAIC0yMTA0LDYgKzIxMjgsOSBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5UHJvcGVydHlfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIHByb3BlcnR5IHR5cGUiKTsKIAorICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWVtb3J5Vmlld19UeXBlKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWVtb3J5dmlldyB0eXBlIik7CisKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVR1cGxlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB0dXBsZSB0eXBlIik7CiAKQEAgLTIxNTEsNiArMjE3OCw5IEBACiAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1lbWJlckRlc2NyX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtZW1iZXIgZGVzY3JpcHRvciB0eXBlIik7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbGVfVHlwZSkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZpbGUgdHlwZSIpOwogfQogCiAKQEAgLTIyNTksNiArMjI4OSwxMCBAQAogI2VuZGlmCiAKIAorLyogSGFjayB0byBmb3JjZSBsb2FkaW5nIG9mIGNhcHN1bGUubyAqLworUHlUeXBlT2JqZWN0ICpfUHlfY2Fwc3VsZV9oYWNrID0gJlB5Q2Fwc3VsZV9UeXBlOworCisKIC8qIEhhY2sgdG8gZm9yY2UgbG9hZGluZyBvZiBjb2JqZWN0Lm8gKi8KIFB5VHlwZU9iamVjdCAqX1B5X2NvYmplY3RfaGFjayA9ICZQeUNPYmplY3RfVHlwZTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGYzMjk3ZjIuLjQ4Mzg0N2MgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTIsNiArMiwyMSBAQAogCiAjaWZkZWYgV0lUSF9QWU1BTExPQwogCisjaWZkZWYgV0lUSF9WQUxHUklORAorI2luY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CisKKy8qIElmIHdlJ3JlIHVzaW5nIEdDQywgdXNlIF9fYnVpbHRpbl9leHBlY3QoKSB0byByZWR1Y2Ugb3ZlcmhlYWQgb2YKKyAgIHRoZSB2YWxncmluZCBjaGVja3MgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAyKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyMgIGRlZmluZSBVTkxJS0VMWSh2YWx1ZSkgX19idWlsdGluX2V4cGVjdCgodmFsdWUpLCAwKQorI2Vsc2UKKyMgIGRlZmluZSBVTkxJS0VMWSh2YWx1ZSkgKHZhbHVlKQorI2VuZGlmCisKKy8qIC0xIGluZGljYXRlcyB0aGF0IHdlIGhhdmVuJ3QgY2hlY2tlZCB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdmFsZ3JpbmQgeWV0LiAqLworc3RhdGljIGludCBydW5uaW5nX29uX3ZhbGdyaW5kID0gLTE7CisjZW5kaWYKKwogLyogQW4gb2JqZWN0IGFsbG9jYXRvciBmb3IgUHl0aG9uLgogCiAgICBIZXJlIGlzIGFuIGludHJvZHVjdGlvbiB0byB0aGUgbGF5ZXJzIG9mIHRoZSBQeXRob24gbWVtb3J5IGFyY2hpdGVjdHVyZSwKQEAgLTIzNCw3ICsyNDksNyBAQAogLyogUG9vbCBmb3Igc21hbGwgYmxvY2tzLiAqLwogc3RydWN0IHBvb2xfaGVhZGVyIHsKICAgICB1bmlvbiB7IGJsb2NrICpfcGFkZGluZzsKLSAgICAgICAgdWludCBjb3VudDsgfSByZWY7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgYWxsb2NhdGVkIGJsb2NrcyAgICAqLworICAgICAgICAgICAgdWludCBjb3VudDsgfSByZWY7ICAgICAgICAgIC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgYmxvY2tzICAgICovCiAgICAgYmxvY2sgKmZyZWVibG9jazsgICAgICAgICAgICAgICAgICAgLyogcG9vbCdzIGZyZWUgbGlzdCBoZWFkICAgICAgICAgKi8KICAgICBzdHJ1Y3QgcG9vbF9oZWFkZXIgKm5leHRwb29sOyAgICAgICAvKiBuZXh0IHBvb2wgb2YgdGhpcyBzaXplIGNsYXNzICAqLwogICAgIHN0cnVjdCBwb29sX2hlYWRlciAqcHJldnBvb2w7ICAgICAgIC8qIHByZXZpb3VzIHBvb2wgICAgICAgIiIgICAgICAgICovCkBAIC0zODksNyArNDA0LDcgQEAKIGltbWVkaWF0ZWx5IGZvbGxvdyBhIHBvb2xfaGVhZGVyJ3MgZmlyc3QgdHdvIG1lbWJlcnM6CiAKICAgICB1bmlvbiB7IGJsb2NrICpfcGFkZGluZzsKLSAgICAgICAgdWludCBjb3VudDsgfSByZWY7CisgICAgICAgICAgICB1aW50IGNvdW50OyB9IHJlZjsKICAgICBibG9jayAqZnJlZWJsb2NrOwogCiBlYWNoIG9mIHdoaWNoIGNvbnN1bWUgc2l6ZW9mKGJsb2NrICopIGJ5dGVzLiAgU28gd2hhdCB1c2VkcG9vbHNbaStpXSByZWFsbHkKQEAgLTY2NywxMSArNjgyLDE5IEBACiBvYm1hbGxvYyBpbiBhIHNtYWxsIGNvbnN0YW50IHRpbWUsIGluZGVwZW5kZW50IG9mIHRoZSBudW1iZXIgb2YgYXJlbmFzCiBvYm1hbGxvYyBjb250cm9scy4gIFNpbmNlIHRoaXMgdGVzdCBpcyBuZWVkZWQgYXQgZXZlcnkgZW50cnkgcG9pbnQsIGl0J3MKIGV4dHJlbWVseSBkZXNpcmFibGUgdGhhdCBpdCBiZSB0aGlzIGZhc3QuCisKK1NpbmNlIFB5X0FERFJFU1NfSU5fUkFOR0UgbWF5IGJlIHJlYWRpbmcgZnJvbSBtZW1vcnkgd2hpY2ggd2FzIG5vdCBhbGxvY2F0ZWQKK2J5IFB5dGhvbiwgaXQgaXMgaW1wb3J0YW50IHRoYXQgKFBPT0wpLT5hcmVuYWluZGV4IGlzIHJlYWQgb25seSBvbmNlLCBhcworYW5vdGhlciB0aHJlYWQgbWF5IGJlIGNvbmN1cnJlbnRseSBtb2RpZnlpbmcgdGhlIHZhbHVlIHdpdGhvdXQgaG9sZGluZyB0aGUKK0dJTC4gIFRvIGFjY29tcGxpc2ggdGhpcywgdGhlIGFyZW5haW5kZXhfdGVtcCB2YXJpYWJsZSBpcyB1c2VkIHRvIHN0b3JlCisoUE9PTCktPmFyZW5haW5kZXggZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgUHlfQUREUkVTU19JTl9SQU5HRSBtYWNybydzCitleGVjdXRpb24uICBUaGUgY2FsbGVyIG9mIHRoZSBtYWNybyBpcyByZXNwb25zaWJsZSBmb3IgZGVjbGFyaW5nIHRoaXMKK3ZhcmlhYmxlLgogKi8KICNkZWZpbmUgUHlfQUREUkVTU19JTl9SQU5HRShQLCBQT09MKSAgICAgICAgICAgICAgICAgICAgXAotICAgICgoUE9PTCktPmFyZW5haW5kZXggPCBtYXhhcmVuYXMgJiYgICAgICAgICAgICAgICAgICBcCi0gICAgICh1cHRyKShQKSAtIGFyZW5hc1soUE9PTCktPmFyZW5haW5kZXhdLmFkZHJlc3MgPCAodXB0cilBUkVOQV9TSVpFICYmIFwKLSAgICAgYXJlbmFzWyhQT09MKS0+YXJlbmFpbmRleF0uYWRkcmVzcyAhPSAwKQorICAgICgoYXJlbmFpbmRleF90ZW1wID0gKFBPT0wpLT5hcmVuYWluZGV4KSA8IG1heGFyZW5hcyAmJiAgICAgICAgICAgICAgXAorICAgICAodXB0cikoUCkgLSBhcmVuYXNbYXJlbmFpbmRleF90ZW1wXS5hZGRyZXNzIDwgKHVwdHIpQVJFTkFfU0laRSAmJiBcCisgICAgIGFyZW5hc1thcmVuYWluZGV4X3RlbXBdLmFkZHJlc3MgIT0gMCkKIAogCiAvKiBUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gcnVubmluZyBtZW1vcnkgZGVidWdnZXJzIHN1Y2ggYXMKQEAgLTY5NCw3ICs3MTcsNyBAQAogI3VuZGVmIFB5X0FERFJFU1NfSU5fUkFOR0UKIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDEpIHx8IFwKLSAgICAgICAgICAgICAgKF9fR05VQ19fID49IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoX19HTlVDX18gPj0gNCkpCiAjZGVmaW5lIFB5X05PX0lOTElORSBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQogI2Vsc2UKICNkZWZpbmUgUHlfTk9fSU5MSU5FCkBAIC03MjgsNiArNzUxLDEzIEBACiAgICAgcG9vbHAgbmV4dDsKICAgICB1aW50IHNpemU7CiAKKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECisgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEpKQorICAgICAgICBydW5uaW5nX29uX3ZhbGdyaW5kID0gUlVOTklOR19PTl9WQUxHUklORDsKKyAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCkpCisgICAgICAgIGdvdG8gcmVkaXJlY3Q7CisjZW5kaWYKKwogICAgIC8qCiAgICAgICogTGltaXQgb3Vyc2VsdmVzIHRvIFBZX1NTSVpFX1RfTUFYIGJ5dGVzIHRvIHByZXZlbnQgc2VjdXJpdHkgaG9sZXMuCiAgICAgICogTW9zdCBweXRob24gaW50ZXJuYWxzIGJsaW5kbHkgdXNlIGEgc2lnbmVkIFB5X3NzaXplX3QgdG8gdHJhY2sKQEAgLTkyMywxMCArOTUzLDE4IEBACiAgICAgYmxvY2sgKmxhc3RmcmVlOwogICAgIHBvb2xwIG5leHQsIHByZXY7CiAgICAgdWludCBzaXplOworI2lmbmRlZiBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIKKyAgICB1aW50IGFyZW5haW5kZXhfdGVtcDsKKyNlbmRpZgogCiAgICAgaWYgKHAgPT0gTlVMTCkgICAgICAvKiBmcmVlKE5VTEwpIGhhcyBubyBlZmZlY3QgKi8KICAgICAgICAgcmV0dXJuOwogCisjaWZkZWYgV0lUSF9WQUxHUklORAorICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kID4gMCkpCisgICAgICAgIGdvdG8gcmVkaXJlY3Q7CisjZW5kaWYKKwogICAgIHBvb2wgPSBQT09MX0FERFIocCk7CiAgICAgaWYgKFB5X0FERFJFU1NfSU5fUkFOR0UocCwgcG9vbCkpIHsKICAgICAgICAgLyogV2UgYWxsb2NhdGVkIHRoaXMgYWRkcmVzcy4gKi8KQEAgLTExMjEsNiArMTE1OSw5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECityZWRpcmVjdDoKKyNlbmRpZgogICAgIC8qIFdlIGRpZG4ndCBhbGxvY2F0ZSB0aGlzIGFkZHJlc3MuICovCiAgICAgZnJlZShwKTsKIH0KQEAgLTExMzcsNiArMTE3OCw5IEBACiAgICAgdm9pZCAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBzaXplX3Qgc2l6ZTsKKyNpZm5kZWYgUHlfVVNJTkdfTUVNT1JZX0RFQlVHR0VSCisgICAgdWludCBhcmVuYWluZGV4X3RlbXA7CisjZW5kaWYKIAogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9NYWxsb2MobmJ5dGVzKTsKQEAgLTExNTAsNiArMTE5NCwxMiBAQAogICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECisgICAgLyogVHJlYXQgcnVubmluZ19vbl92YWxncmluZCA9PSAtMSB0aGUgc2FtZSBhcyAwICovCisgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPiAwKSkKKyAgICAgICAgZ290byByZWRpcmVjdDsKKyNlbmRpZgorCiAgICAgcG9vbCA9IFBPT0xfQUREUihwKTsKICAgICBpZiAoUHlfQUREUkVTU19JTl9SQU5HRShwLCBwb29sKSkgewogICAgICAgICAvKiBXZSdyZSBpbiBjaGFyZ2Ugb2YgdGhpcyBibG9jayAqLwpAQCAtMTE3Nyw2ICsxMjI3LDkgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnA7CiAgICAgfQorI2lmZGVmIFdJVEhfVkFMR1JJTkQKKyByZWRpcmVjdDoKKyNlbmRpZgogICAgIC8qIFdlJ3JlIG5vdCBtYW5hZ2luZyB0aGlzIGJsb2NrLiAgSWYgbmJ5dGVzIDw9CiAgICAgICogU01BTExfUkVRVUVTVF9USFJFU0hPTEQsIGl0J3MgdGVtcHRpbmcgdG8gdHJ5IHRvIHRha2Ugb3ZlciB0aGlzCiAgICAgICogYmxvY2suICBIb3dldmVyLCBpZiB3ZSBkbywgd2UgbmVlZCB0byBjb3B5IHRoZSB2YWxpZCBkYXRhIGZyb20KQEAgLTEyNDEsNiArMTI5NCwxMCBAQAogI2RlZmluZSBERUFEQllURSAgICAgICAweERCICAgIC8qIGRlYWQgKG5ld2x5IGZyZWVkKSBtZW1vcnkgKi8KICNkZWZpbmUgRk9SQklEREVOQllURSAgMHhGQiAgICAvKiB1bnRvdWNoYWJsZSBieXRlcyBhdCBlYWNoIGVuZCBvZiBhIGJsb2NrICovCiAKKy8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLworI2RlZmluZSBfUFlNQUxMT0NfTUVNX0lEICdtJyAgIC8qIHRoZSBQeU1lbV9NYWxsb2MoKSBBUEkgKi8KKyNkZWZpbmUgX1BZTUFMTE9DX09CSl9JRCAnbycgICAvKiBUaGUgUHlPYmplY3RfTWFsbG9jKCkgQVBJICovCisKIHN0YXRpYyBzaXplX3Qgc2VyaWFsbm8gPSAwOyAgICAgLyogaW5jcmVtZW50ZWQgb24gZWFjaCBkZWJ1ZyB7bSxyZX1hbGxvYyAqLwogCiAvKiBzZXJpYWxubyBpcyBhbHdheXMgaW5jcmVtZW50ZWQgdmlhIGNhbGxpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHBvaW50IGlzCkBAIC0xMzMxLDkgKzEzODgsNTAgQEAKICAgICBpbnN0YW50IGF0IHdoaWNoIHRoaXMgYmxvY2sgd2FzIHBhc3NlZCBvdXQuCiAqLwogCisvKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU1lbV8qIG1lbW9yeSBBUEkgKi8KK3ZvaWQgKgorX1B5TWVtX0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBuYnl0ZXMpOworfQordm9pZCAqCitfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCwgbmJ5dGVzKTsKK30KK3ZvaWQKK19QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCkKK3sKKyAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19NRU1fSUQsIHApOworfQorCisvKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU9iamVjdF8qIG1lbW9yeSBBUEkgKi8KIHZvaWQgKgogX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCiB7CisgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBuYnl0ZXMpOworfQordm9pZCAqCitfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCwgbmJ5dGVzKTsKK30KK3ZvaWQKK19QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKK3sKKyAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOworfQordm9pZAorX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCit7CisgICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOworfQorCisKKy8qIGdlbmVyaWMgZGVidWcgbWVtb3J5IGFwaSwgd2l0aCBhbiAiaWQiIHRvIGlkZW50aWZ5IHRoZSBBUEkgaW4gdXNlICovCit2b2lkICoKK19QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGlkLCBzaXplX3QgbmJ5dGVzKQorewogICAgIHVjaGFyICpwOyAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIG1hbGxvYydlZCBibG9jayAqLwogICAgIHVjaGFyICp0YWlsOyAgICAgICAgLyogcCArIDIqU1NUICsgbmJ5dGVzID09IHBvaW50ZXIgdG8gdGFpbCBwYWQgYnl0ZXMgKi8KICAgICBzaXplX3QgdG90YWw7ICAgICAgIC8qIG5ieXRlcyArIDQqU1NUICovCkBAIC0xMzQ4LDEyICsxNDQ2LDE1IEBACiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICAvKiBhdCBwLCB3cml0ZSBzaXplIChTU1QgYnl0ZXMpLCBpZCAoMSBieXRlKSwgcGFkIChTU1QtMSBieXRlcykgKi8KICAgICB3cml0ZV9zaXplX3QocCwgbmJ5dGVzKTsKLSAgICBtZW1zZXQocCArIFNTVCwgRk9SQklEREVOQllURSwgU1NUKTsKKyAgICBwW1NTVF0gPSAodWNoYXIpaWQ7CisgICAgbWVtc2V0KHAgKyBTU1QgKyAxICwgRk9SQklEREVOQllURSwgU1NULTEpOwogCiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChwICsgMipTU1QsIENMRUFOQllURSwgbmJ5dGVzKTsKIAorICAgIC8qIGF0IHRhaWwsIHdyaXRlIHBhZCAoU1NUIGJ5dGVzKSBhbmQgc2VyaWFsbm8gKFNTVCBieXRlcykgKi8KICAgICB0YWlsID0gcCArIDIqU1NUICsgbmJ5dGVzOwogICAgIG1lbXNldCh0YWlsLCBGT1JCSURERU5CWVRFLCBTU1QpOwogICAgIHdyaXRlX3NpemVfdCh0YWlsICsgU1NULCBzZXJpYWxubyk7CkBAIC0xMzYyLDI3ICsxNDYzLDI4IEBACiB9CiAKIC8qIFRoZSBkZWJ1ZyBmcmVlIGZpcnN0IGNoZWNrcyB0aGUgMipTU1QgYnl0ZXMgb24gZWFjaCBlbmQgZm9yIHNhbml0eSAoaW4KLSAgIHBhcnRpY3VsYXIsIHRoYXQgdGhlIEZPUkJJRERFTkJZVEVzIGFyZSBzdGlsbCBpbnRhY3QpLgorICAgcGFydGljdWxhciwgdGhhdCB0aGUgRk9SQklEREVOQllURXMgd2l0aCB0aGUgYXBpIElEIGFyZSBzdGlsbCBpbnRhY3QpLgogICAgVGhlbiBmaWxscyB0aGUgb3JpZ2luYWwgYnl0ZXMgd2l0aCBERUFEQllURS4KICAgIFRoZW4gY2FsbHMgdGhlIHVuZGVybHlpbmcgZnJlZS4KICovCiB2b2lkCi1fUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApCitfUHlPYmplY3RfRGVidWdGcmVlQXBpKGNoYXIgYXBpLCB2b2lkICpwKQogewogICAgIHVjaGFyICpxID0gKHVjaGFyICopcCAtIDIqU1NUOyAgLyogYWRkcmVzcyByZXR1cm5lZCBmcm9tIG1hbGxvYyAqLwogICAgIHNpemVfdCBuYnl0ZXM7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKHApOworICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShhcGksIHApOwogICAgIG5ieXRlcyA9IHJlYWRfc2l6ZV90KHEpOworICAgIG5ieXRlcyArPSA0KlNTVDsKICAgICBpZiAobmJ5dGVzID4gMCkKICAgICAgICAgbWVtc2V0KHEsIERFQURCWVRFLCBuYnl0ZXMpOwogICAgIFB5T2JqZWN0X0ZyZWUocSk7CiB9CiAKIHZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXA7CiAgICAgdWNoYXIgKnRhaWw7CkBAIC0xMzkxLDkgKzE0OTMsOSBAQAogICAgIGludCBpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhuYnl0ZXMpOworICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGFwaSwgbmJ5dGVzKTsKIAotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhwKTsKKyAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKICAgICBidW1wc2VyaWFsbm8oKTsKICAgICBvcmlnaW5hbF9uYnl0ZXMgPSByZWFkX3NpemVfdChxIC0gMipTU1QpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7CkBAIC0xNDAzLDE2ICsxNTA1LDIwIEBACiAKICAgICBpZiAobmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7CiAgICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCi0gICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzKTsKKyAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMgKyAyKlNTVCk7CiAgICAgfQogCi0gICAgLyogUmVzaXplIGFuZCBhZGQgZGVjb3JhdGlvbnMuICovCisgICAgLyogUmVzaXplIGFuZCBhZGQgZGVjb3JhdGlvbnMuIFdlIG1heSBnZXQgYSBuZXcgcG9pbnRlciBoZXJlLCBpbiB3aGljaAorICAgICAqIGNhc2Ugd2UgZGlkbid0IGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgdGhlIG9sZCBtZW1vcnkgd2l0aCBERUFEQllURSwKKyAgICAgKiBidXQgd2UgbGl2ZSB3aXRoIHRoYXQuCisgICAgICovCiAgICAgcSA9ICh1Y2hhciAqKVB5T2JqZWN0X1JlYWxsb2MocSAtIDIqU1NULCB0b3RhbCk7CiAgICAgaWYgKHEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB3cml0ZV9zaXplX3QocSwgbmJ5dGVzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgU1NUOyArK2kpCisgICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpKTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgU1NUOyArK2kpCiAgICAgICAgIGFzc2VydChxW1NTVCArIGldID09IEZPUkJJRERFTkJZVEUpOwogICAgIHEgKz0gMipTU1Q7CiAgICAgdGFpbCA9IHEgKyBuYnl0ZXM7CkBAIC0xNDIyLDcgKzE1MjgsNyBAQAogICAgIGlmIChuYnl0ZXMgPiBvcmlnaW5hbF9uYnl0ZXMpIHsKICAgICAgICAgLyogZ3Jvd2luZzogIG1hcmsgbmV3IGV4dHJhIG1lbW9yeSBjbGVhbiAqLwogICAgICAgICBtZW1zZXQocSArIG9yaWdpbmFsX25ieXRlcywgQ0xFQU5CWVRFLAotICAgICAgICAgICAgbmJ5dGVzIC0gb3JpZ2luYWxfbmJ5dGVzKTsKKyAgICAgICAgICAgICAgIG5ieXRlcyAtIG9yaWdpbmFsX25ieXRlcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHE7CkBAIC0xNDMxLDI2ICsxNTM3LDM4IEBACiAvKiBDaGVjayB0aGUgZm9yYmlkZGVuIGJ5dGVzIG9uIGJvdGggZW5kcyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgcC4KICAqIElmIGFueXRoaW5nIGlzIHdyb25nLCBwcmludCBpbmZvIHRvIHN0ZGVyciB2aWEgX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MsCiAgKiBhbmQgY2FsbCBQeV9GYXRhbEVycm9yIHRvIGtpbGwgdGhlIHByb2dyYW0uCisgKiBUaGUgQVBJIGlkLCBpcyBhbHNvIGNoZWNrZWQuCiAgKi8KICB2b2lkCi1fUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCkKK19QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKIHsKICAgICBjb25zdCB1Y2hhciAqcSA9IChjb25zdCB1Y2hhciAqKXA7CisgICAgY2hhciBtc2didWZbNjRdOwogICAgIGNoYXIgKm1zZzsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGNvbnN0IHVjaGFyICp0YWlsOwogICAgIGludCBpOworICAgIGNoYXIgaWQ7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7CiAgICAgICAgIG1zZyA9ICJkaWRuJ3QgZXhwZWN0IGEgTlVMTCBwb2ludGVyIjsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICAvKiBDaGVjayB0aGUgQVBJIGlkICovCisgICAgaWQgPSAoY2hhcilxWy1TU1RdOworICAgIGlmIChpZCAhPSBhcGkpIHsKKyAgICAgICAgbXNnID0gbXNnYnVmOworICAgICAgICBzbnByaW50Zihtc2csIHNpemVvZihtc2didWYpLCAiYmFkIElEOiBBbGxvY2F0ZWQgdXNpbmcgQVBJICclYycsIHZlcmlmaWVkIHVzaW5nIEFQSSAnJWMnIiwgaWQsIGFwaSk7CisgICAgICAgIG1zZ2J1ZltzaXplb2YobXNnYnVmKS0xXSA9IDA7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCiAgICAgLyogQ2hlY2sgdGhlIHN0dWZmIGF0IHRoZSBzdGFydCBvZiBwIGZpcnN0OiAgaWYgdGhlcmUncyB1bmRlcndyaXRlCiAgICAgICogY29ycnVwdGlvbiwgdGhlIG51bWJlci1vZi1ieXRlcyBmaWVsZCBtYXkgYmUgbnV0cywgYW5kIGNoZWNraW5nCiAgICAgICogdGhlIHRhaWwgY291bGQgbGVhZCB0byBhIHNlZ2ZhdWx0IHRoZW4uCiAgICAgICovCi0gICAgZm9yIChpID0gU1NUOyBpID49IDE7IC0taSkgeworICAgIGZvciAoaSA9IFNTVC0xOyBpID49IDE7IC0taSkgewogICAgICAgICBpZiAoKihxLWkpICE9IEZPUkJJRERFTkJZVEUpIHsKICAgICAgICAgICAgIG1zZyA9ICJiYWQgbGVhZGluZyBwYWQgYnl0ZSI7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTQ4MiwxOSArMTYwMCwyNCBAQAogICAgIHNpemVfdCBuYnl0ZXMsIHNlcmlhbDsKICAgICBpbnQgaTsKICAgICBpbnQgb2s7CisgICAgY2hhciBpZDsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiRGVidWcgbWVtb3J5IGJsb2NrIGF0IGFkZHJlc3MgcD0lcDpcbiIsIHApOwotICAgIGlmIChwID09IE5VTEwpCisgICAgZnByaW50ZihzdGRlcnIsICJEZWJ1ZyBtZW1vcnkgYmxvY2sgYXQgYWRkcmVzcyBwPSVwOiIsIHApOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlkID0gKGNoYXIpcVstU1NUXTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiBBUEkgJyVjJ1xuIiwgaWQpOwogCiAgICAgbmJ5dGVzID0gcmVhZF9zaXplX3QocSAtIDIqU1NUKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAlIiBQWV9GT1JNQVRfU0laRV9UICJ1IGJ5dGVzIG9yaWdpbmFsbHkgIgogICAgICAgICAgICAgICAgICAgICAicmVxdWVzdGVkXG4iLCBuYnl0ZXMpOwogCiAgICAgLyogSW4gY2FzZSB0aGlzIGlzIG51dHMsIGNoZWNrIHRoZSBsZWFkaW5nIHBhZCBieXRlcyBmaXJzdC4gKi8KLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICBUaGUgJWQgcGFkIGJ5dGVzIGF0IHAtJWQgYXJlICIsIFNTVCwgU1NUKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICBUaGUgJWQgcGFkIGJ5dGVzIGF0IHAtJWQgYXJlICIsIFNTVC0xLCBTU1QtMSk7CiAgICAgb2sgPSAxOwotICAgIGZvciAoaSA9IDE7IGkgPD0gU1NUOyArK2kpIHsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IFNTVC0xOyArK2kpIHsKICAgICAgICAgaWYgKCoocS1pKSAhPSBGT1JCSURERU5CWVRFKSB7CiAgICAgICAgICAgICBvayA9IDA7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE1MDUsNyArMTYyOCw3IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm90IGFsbCBGT1JCSURERU5CWVRFICgweCUwMngpOlxuIiwKICAgICAgICAgICAgIEZPUkJJRERFTkJZVEUpOwotICAgICAgICBmb3IgKGkgPSBTU1Q7IGkgPj0gMTsgLS1pKSB7CisgICAgICAgIGZvciAoaSA9IFNTVC0xOyBpID49IDE7IC0taSkgewogICAgICAgICAgICAgY29uc3QgdWNoYXIgYnl0ZSA9ICoocS1pKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICBhdCBwLSVkOiAweCUwMngiLCBpLCBieXRlKTsKICAgICAgICAgICAgIGlmIChieXRlICE9IEZPUkJJRERFTkJZVEUpCkBAIC0xNTMyLDExICsxNjU1LDExIEBACiAgICAgICAgIGZwdXRzKCJGT1JCSURERU5CWVRFLCBhcyBleHBlY3RlZC5cbiIsIHN0ZGVycik7CiAgICAgZWxzZSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm90IGFsbCBGT1JCSURERU5CWVRFICgweCUwMngpOlxuIiwKLSAgICAgICAgICAgIEZPUkJJRERFTkJZVEUpOworICAgICAgICAgICAgICAgIEZPUkJJRERFTkJZVEUpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU1NUOyArK2kpIHsKICAgICAgICAgICAgIGNvbnN0IHVjaGFyIGJ5dGUgPSB0YWlsW2ldOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgICAgIGF0IHRhaWwrJWQ6IDB4JTAyeCIsCi0gICAgICAgICAgICAgICAgaSwgYnl0ZSk7CisgICAgICAgICAgICAgICAgICAgIGksIGJ5dGUpOwogICAgICAgICAgICAgaWYgKGJ5dGUgIT0gRk9SQklEREVOQllURSkKICAgICAgICAgICAgICAgICBmcHV0cygiICoqKiBPVUNIIiwgc3RkZXJyKTsKICAgICAgICAgICAgIGZwdXRjKCdcbicsIHN0ZGVycik7CkBAIC0xNjQyLDcgKzE3NjUsNyBAQAogICAgIGNoYXIgYnVmWzEyOF07CiAKICAgICBmcHJpbnRmKHN0ZGVyciwgIlNtYWxsIGJsb2NrIHRocmVzaG9sZCA9ICVkLCBpbiAldSBzaXplIGNsYXNzZXMuXG4iLAotICAgICAgICBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCwgbnVtY2xhc3Nlcyk7CisgICAgICAgICAgICBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCwgbnVtY2xhc3Nlcyk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtY2xhc3NlczsgKytpKQogICAgICAgICBudW1wb29sc1tpXSA9IG51bWJsb2Nrc1tpXSA9IG51bWZyZWVibG9ja3NbaV0gPSAwOwpAQCAtMTY1Miw3ICsxNzc1LDYgQEAKICAgICAgKiB3aWxsIGJlIGxpdmluZyBpbiBmdWxsIHBvb2xzIC0tIHdvdWxkIGJlIGEgc2hhbWUgdG8gbWlzcyB0aGVtLgogICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBtYXhhcmVuYXM7ICsraSkgewotICAgICAgICB1aW50IHBvb2xzaW5hcmVuYTsKICAgICAgICAgdWludCBqOwogICAgICAgICB1cHRyIGJhc2UgPSBhcmVuYXNbaV0uYWRkcmVzczsKIApAQCAtMTY2MSw3ICsxNzgzLDYgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBuYXJlbmFzICs9IDE7CiAKLSAgICAgICAgcG9vbHNpbmFyZW5hID0gYXJlbmFzW2ldLm50b3RhbHBvb2xzOwogICAgICAgICBudW1mcmVlcG9vbHMgKz0gYXJlbmFzW2ldLm5mcmVlcG9vbHM7CiAKICAgICAgICAgLyogcm91bmQgdXAgdG8gcG9vbCBhbGlnbm1lbnQgKi8KQEAgLTE3MDAsNyArMTgyMSw3IEBACiAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKICAgICBmcHV0cygiY2xhc3MgICBzaXplICAgbnVtIHBvb2xzICAgYmxvY2tzIGluIHVzZSAgYXZhaWwgYmxvY2tzXG4iCiAgICAgICAgICAgIi0tLS0tICAgLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLVxuIiwKLSAgICAgICAgc3RkZXJyKTsKKyAgICAgICAgICBzdGRlcnIpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bWNsYXNzZXM7ICsraSkgewogICAgICAgICBzaXplX3QgcCA9IG51bXBvb2xzW2ldOwpAQCAtMTcxNSw3ICsxODM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICIlMTEiIFBZX0ZPUk1BVF9TSVpFX1QgInUgIgogICAgICAgICAgICAgICAgICAgICAgICAgIiUxNSIgUFlfRk9STUFUX1NJWkVfVCAidSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiJTEzIiBQWV9GT1JNQVRfU0laRV9UICJ1XG4iLAotICAgICAgICAgICAgaSwgc2l6ZSwgcCwgYiwgZik7CisgICAgICAgICAgICAgICAgaSwgc2l6ZSwgcCwgYiwgZik7CiAgICAgICAgIGFsbG9jYXRlZF9ieXRlcyArPSBiICogc2l6ZTsKICAgICAgICAgYXZhaWxhYmxlX2J5dGVzICs9IGYgKiBzaXplOwogICAgICAgICBwb29sX2hlYWRlcl9ieXRlcyArPSBwICogUE9PTF9PVkVSSEVBRDsKQEAgLTE3NTgsOCArMTg3OSwxMCBAQAogaW50CiBQeV9BRERSRVNTX0lOX1JBTkdFKHZvaWQgKlAsIHBvb2xwIHBvb2wpCiB7Ci0gICAgcmV0dXJuIHBvb2wtPmFyZW5haW5kZXggPCBtYXhhcmVuYXMgJiYKLSAgICAgICAgICAgKHVwdHIpUCAtIGFyZW5hc1twb29sLT5hcmVuYWluZGV4XS5hZGRyZXNzIDwgKHVwdHIpQVJFTkFfU0laRSAmJgotICAgICAgICAgICBhcmVuYXNbcG9vbC0+YXJlbmFpbmRleF0uYWRkcmVzcyAhPSAwOworICAgIHVpbnQgYXJlbmFpbmRleF90ZW1wID0gcG9vbC0+YXJlbmFpbmRleDsKKworICAgIHJldHVybiBhcmVuYWluZGV4X3RlbXAgPCBtYXhhcmVuYXMgJiYKKyAgICAgICAgICAgKHVwdHIpUCAtIGFyZW5hc1thcmVuYWluZGV4X3RlbXBdLmFkZHJlc3MgPCAodXB0cilBUkVOQV9TSVpFICYmCisgICAgICAgICAgIGFyZW5hc1thcmVuYWluZGV4X3RlbXBdLmFkZHJlc3MgIT0gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zZXRvYmplY3QuYyBiL09iamVjdHMvc2V0b2JqZWN0LmMKaW5kZXggNmE2ZWIzYS4uMDBjYWJlNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zZXRvYmplY3QuYworKysgYi9PYmplY3RzL3NldG9iamVjdC5jCkBAIC0xODU1LDEyICsxODU1LDEwIEBACiAgICAgICAgIGlmICghUHlTZXRfQ2hlY2soa2V5KSB8fCAhUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB0bXBrZXkgPSBtYWtlX25ld19zZXQoJlB5RnJvemVuU2V0X1R5cGUsIE5VTEwpOworICAgICAgICB0bXBrZXkgPSBtYWtlX25ld19zZXQoJlB5RnJvemVuU2V0X1R5cGUsIGtleSk7CiAgICAgICAgIGlmICh0bXBrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc2V0X3N3YXBfYm9kaWVzKChQeVNldE9iamVjdCAqKXRtcGtleSwgKFB5U2V0T2JqZWN0ICopa2V5KTsKICAgICAgICAgcnYgPSBzZXRfY29udGFpbnMoc28sIHRtcGtleSk7Ci0gICAgICAgIHNldF9zd2FwX2JvZGllcygoUHlTZXRPYmplY3QgKil0bXBrZXksIChQeVNldE9iamVjdCAqKWtleSk7CiAgICAgICAgIFB5X0RFQ1JFRih0bXBrZXkpOwogICAgIH0KICAgICByZXR1cm4gcnY7CkBAIC0xODkwLDEyICsxODg4LDEwIEBACiAgICAgICAgIGlmICghUHlTZXRfQ2hlY2soa2V5KSB8fCAhUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwgTlVMTCk7CisgICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwga2V5KTsKICAgICAgICAgaWYgKHRtcGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHNldF9zd2FwX2JvZGllcygoUHlTZXRPYmplY3QgKil0bXBrZXksIChQeVNldE9iamVjdCAqKWtleSk7CiAgICAgICAgIHJ2ID0gc2V0X2Rpc2NhcmRfa2V5KHNvLCB0bXBrZXkpOwotICAgICAgICBzZXRfc3dhcF9ib2RpZXMoKFB5U2V0T2JqZWN0ICopdG1wa2V5LCAoUHlTZXRPYmplY3QgKilrZXkpOwogICAgICAgICBQeV9ERUNSRUYodG1wa2V5KTsKICAgICAgICAgaWYgKHJ2ID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTI0LDEyICsxOTIwLDEwIEBACiAgICAgICAgIGlmICghUHlTZXRfQ2hlY2soa2V5KSB8fCAhUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwgTlVMTCk7CisgICAgICAgIHRtcGtleSA9IG1ha2VfbmV3X3NldCgmUHlGcm96ZW5TZXRfVHlwZSwga2V5KTsKICAgICAgICAgaWYgKHRtcGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHNldF9zd2FwX2JvZGllcygoUHlTZXRPYmplY3QgKil0bXBrZXksIChQeVNldE9iamVjdCAqKWtleSk7CiAgICAgICAgIHJlc3VsdCA9IHNldF9kaXNjYXJkKHNvLCB0bXBrZXkpOwotICAgICAgICBzZXRfc3dhcF9ib2RpZXMoKFB5U2V0T2JqZWN0ICopdG1wa2V5LCAoUHlTZXRPYmplY3QgKilrZXkpOwogICAgICAgICBQeV9ERUNSRUYodG1wa2V5KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMzg5LDExICsyMzgzLDI1IEBACiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng7CiAgICAgUHlPYmplY3QgKm9iID0gKFB5T2JqZWN0ICopc287CisgICAgUHlPYmplY3QgKnN0cjsKIAotICAgIC8qIFZlcmlmeSBwcmVjb25kaXRpb25zIGFuZCBleGVyY2lzZSB0eXBlL3NpemUgY2hlY2tzICovCisgICAgLyogVmVyaWZ5IHByZWNvbmRpdGlvbnMgKi8KICAgICBhc3NlcnQoUHlBbnlTZXRfQ2hlY2sob2IpKTsKICAgICBhc3NlcnQoUHlBbnlTZXRfQ2hlY2tFeGFjdChvYikpOwogICAgIGFzc2VydCghUHlGcm96ZW5TZXRfQ2hlY2tFeGFjdChvYikpOworCisgICAgLyogc28uY2xlYXIoKTsgc28gfD0gc2V0KCJhYmMiKTsgKi8KKyAgICBzdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJhYmMiKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHNldF9jbGVhcl9pbnRlcm5hbChzbyk7CisgICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwoc28sIHN0cikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9ERUNSRUYoc3RyKTsKKworICAgIC8qIEV4ZXJjaXNlIHR5cGUvc2l6ZSBjaGVja3MgKi8KICAgICBhc3NlcnQoUHlTZXRfU2l6ZShvYikgPT0gMyk7CiAgICAgYXNzZXJ0KFB5U2V0X0dFVF9TSVpFKG9iKSA9PSAzKTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dCBiL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKaW5kZXggODJhODc3NC4uYWI1MDZkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CkBAIC0xMywxMSArMTMsOCBAQAogCiBTVFJJTkdMSUJfRU1QVFkKIAotICAgIGEgUHlPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBlbXB0eSBzdHJpbmcKLQotaW50IFNUUklOR0xJQl9DTVAoU1RSSU5HTElCX0NIQVIqLCBTVFJJTkdMSUJfQ0hBUiosIFB5X3NzaXplX3QpCi0KLSAgICBjb21wYXJlcyB0d28gc3RyaW5ncy4gcmV0dXJucyAwIGlmIHRoZXkgbWF0Y2gsIGFuZCBub24temVybyBpZiBub3QuCisgICAgYSBQeU9iamVjdCByZXByZXNlbnRpbmcgdGhlIGVtcHR5IHN0cmluZywgb25seSB0byBiZSB1c2VkIGlmCisgICAgU1RSSU5HTElCX01VVEFCTEUgaXMgMAogCiBQeV9zc2l6ZV90IFNUUklOR0xJQl9MRU4oUHlPYmplY3QqKQogCkBAIC0zMiwzICsyOSwxMiBAQAogCiAgICAgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGRhdGEgZm9yIHRoZSBnaXZlbiBzdHJpbmcKICAgICBvYmplY3QgKHdoaWNoIG11c3QgYmUgb2YgdGhlIHJpZ2h0IHR5cGUpCisKK2ludCBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QoUHlPYmplY3QgKikKKworICAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIG91ciB0eXBlLCBub3QgYSBzdWJjbGFzcworCitTVFJJTkdMSUJfTVVUQUJMRQorCisgICAgbXVzdCBiZSAwIG9yIDEgdG8gdGVsbCB0aGUgY3BwIG1hY3JvcyBpbiBzdHJpbmdsaWIgY29kZSBpZiB0aGUgb2JqZWN0CisgICAgYmVpbmcgb3BlcmF0ZWQgb24gaXMgbXV0YWJsZSBvciBub3QKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmggYi9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oCmluZGV4IGViYTM3ZTkuLmRlMzRmOTYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaApAQCAtOSwyOCArOSwyMiBAQAogCiBQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKIHN0cmluZ2xpYl9jb3VudChjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCi0gICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuKQorICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdWIsIFB5X3NzaXplX3Qgc3ViX2xlbiwKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewogICAgIFB5X3NzaXplX3QgY291bnQ7CiAKICAgICBpZiAoc3RyX2xlbiA8IDApCiAgICAgICAgIHJldHVybiAwOyAvKiBzdGFydCA+IGxlbihzdHIpICovCiAgICAgaWYgKHN1Yl9sZW4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHN0cl9sZW4gKyAxOworICAgICAgICByZXR1cm4gKHN0cl9sZW4gPCBtYXhjb3VudCkgPyBzdHJfbGVuICsgMSA6IG1heGNvdW50OwogCi0gICAgY291bnQgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc3ViLCBzdWJfbGVuLCBGQVNUX0NPVU5UKTsKKyAgICBjb3VudCA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzdWIsIHN1Yl9sZW4sIG1heGNvdW50LCBGQVNUX0NPVU5UKTsKIAogICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIGNvdW50ID0gMDsgLyogbm8gbWF0Y2ggKi8KKyAgICAgICAgcmV0dXJuIDA7IC8qIG5vIG1hdGNoICovCiAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKICNlbmRpZgotCi0vKgotTG9jYWwgdmFyaWFibGVzOgotYy1iYXNpYy1vZmZzZXQ6IDQKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmggYi9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oCmluZGV4IDg5NTEyNzYuLjczOWNmM2QgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaApAQCAtMTA3LDQgKzEwNywzIEBACiAgICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9MRU4oc2VsZikpOwogICAgIHJldHVybiBuZXdvYmo7CiB9Ci0KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAppbmRleCAyM2JjY2ZiLi5lMjMxYzU4IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCkBAIC01LDcgKzUsNyBAQAogCiAvKiBmYXN0IHNlYXJjaC9jb3VudCBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gYSBtaXggYmV0d2VlbiBib3llci0KICAgIG1vb3JlIGFuZCBob3JzcG9vbCwgd2l0aCBhIGZldyBtb3JlIGJlbGxzIGFuZCB3aGlzdGxlcyBvbiB0aGUgdG9wLgotICAgZm9yIHNvbWUgbW9yZSBiYWNrZ3JvdW5kLCBzZWU6IGh0dHA6Ly9lZmZib3Qub3JnL3N0cmluZ2xpYi5odG0gKi8KKyAgIGZvciBzb21lIG1vcmUgYmFja2dyb3VuZCwgc2VlOiBodHRwOi8vZWZmYm90Lm9yZy96b25lL3N0cmluZ2xpYi5odG0gKi8KIAogLyogbm90ZTogZmFzdHNlYXJjaCBtYXkgYWNjZXNzIHNbbl0sIHdoaWNoIGlzbid0IGEgcHJvYmxlbSB3aGVuIHVzaW5nCiAgICBQeXRob24ncyBvcmRpbmFyeSBzdHJpbmcgdHlwZXMsIGJ1dCBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgeW91J3JlCkBAIC0xNiwxOSArMTYsMzUgQEAKIAogI2RlZmluZSBGQVNUX0NPVU5UIDAKICNkZWZpbmUgRkFTVF9TRUFSQ0ggMQorI2RlZmluZSBGQVNUX1JTRUFSQ0ggMgorCisjaWYgTE9OR19CSVQgPj0gMTI4CisjZGVmaW5lIFNUUklOR0xJQl9CTE9PTV9XSURUSCAxMjgKKyNlbGlmIExPTkdfQklUID49IDY0CisjZGVmaW5lIFNUUklOR0xJQl9CTE9PTV9XSURUSCA2NAorI2VsaWYgTE9OR19CSVQgPj0gMzIKKyNkZWZpbmUgU1RSSU5HTElCX0JMT09NX1dJRFRIIDMyCisjZWxzZQorI2Vycm9yICJMT05HX0JJVCBpcyBzbWFsbGVyIHRoYW4gMzIiCisjZW5kaWYKKworI2RlZmluZSBTVFJJTkdMSUJfQkxPT01fQUREKG1hc2ssIGNoKSBcCisgICAgKChtYXNrIHw9ICgxVUwgPDwgKChjaCkgJiAoU1RSSU5HTElCX0JMT09NX1dJRFRIIC0xKSkpKSkKKyNkZWZpbmUgU1RSSU5HTElCX0JMT09NKG1hc2ssIGNoKSAgICAgXAorICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKFNUUklOR0xJQl9CTE9PTV9XSURUSCAtMSkpKSkpCiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogZmFzdHNlYXJjaChjb25zdCBTVFJJTkdMSUJfQ0hBUiogcywgUHlfc3NpemVfdCBuLAogICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogcCwgUHlfc3NpemVfdCBtLAotICAgICAgICAgICBpbnQgbW9kZSkKKyAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCwgaW50IG1vZGUpCiB7Ci0gICAgbG9uZyBtYXNrOworICAgIHVuc2lnbmVkIGxvbmcgbWFzazsKICAgICBQeV9zc2l6ZV90IHNraXAsIGNvdW50ID0gMDsKICAgICBQeV9zc2l6ZV90IGksIGosIG1sYXN0LCB3OwogCiAgICAgdyA9IG4gLSBtOwogCi0gICAgaWYgKHcgPCAwKQorICAgIGlmICh3IDwgMCB8fCAobW9kZSA9PSBGQVNUX0NPVU5UICYmIG1heGNvdW50ID09IDApKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBsb29rIGZvciBzcGVjaWFsIGNhc2VzICovCkBAIC0zOCw1NCArNTQsMTAxIEBACiAgICAgICAgIC8qIHVzZSBzcGVjaWFsIGNhc2UgZm9yIDEtY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICAgICAgaWYgKG1vZGUgPT0gRkFTVF9DT1VOVCkgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSBwWzBdKQorICAgICAgICAgICAgICAgIGlmIChzW2ldID09IHBbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IG1heGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heGNvdW50OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBjb3VudDsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEZBU1RfU0VBUkNIKSB7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgICAgIGlmIChzW2ldID09IHBbMF0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9IGVsc2UgeyAgICAvKiBGQVNUX1JTRUFSQ0ggKi8KKyAgICAgICAgICAgIGZvciAoaSA9IG4gLSAxOyBpID4gLTE7IGktLSkKKyAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSBwWzBdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgbWxhc3QgPSBtIC0gMTsKLQotICAgIC8qIGNyZWF0ZSBjb21wcmVzc2VkIGJveWVyLW1vb3JlIGRlbHRhIDEgdGFibGUgKi8KICAgICBza2lwID0gbWxhc3QgLSAxOwotICAgIC8qIHByb2Nlc3MgcGF0dGVybls6LTFdICovCi0gICAgZm9yIChtYXNrID0gaSA9IDA7IGkgPCBtbGFzdDsgaSsrKSB7Ci0gICAgICAgIG1hc2sgfD0gKDEgPDwgKHBbaV0gJiAweDFGKSk7Ci0gICAgICAgIGlmIChwW2ldID09IHBbbWxhc3RdKQotICAgICAgICAgICAgc2tpcCA9IG1sYXN0IC0gaSAtIDE7Ci0gICAgfQotICAgIC8qIHByb2Nlc3MgcGF0dGVyblstMV0gb3V0c2lkZSB0aGUgbG9vcCAqLwotICAgIG1hc2sgfD0gKDEgPDwgKHBbbWxhc3RdICYgMHgxRikpOworICAgIG1hc2sgPSAwOwogCi0gICAgZm9yIChpID0gMDsgaSA8PSB3OyBpKyspIHsKLSAgICAgICAgLyogbm90ZTogdXNpbmcgbWxhc3QgaW4gdGhlIHNraXAgcGF0aCBzbG93cyB0aGluZ3MgZG93biBvbiB4ODYgKi8KLSAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCi0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWxhc3Q7IGorKykKLSAgICAgICAgICAgICAgICBpZiAoc1tpK2pdICE9IHBbal0pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGogPT0gbWxhc3QpIHsKLSAgICAgICAgICAgICAgICAvKiBnb3QgYSBtYXRjaCEgKi8KLSAgICAgICAgICAgICAgICBpZiAobW9kZSAhPSBGQVNUX0NPVU5UKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGkgPSBpICsgbWxhc3Q7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgaWYgKG1vZGUgIT0gRkFTVF9SU0VBUkNIKSB7CisKKyAgICAgICAgLyogY3JlYXRlIGNvbXByZXNzZWQgYm95ZXItbW9vcmUgZGVsdGEgMSB0YWJsZSAqLworCisgICAgICAgIC8qIHByb2Nlc3MgcGF0dGVybls6LTFdICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtbGFzdDsgaSsrKSB7CisgICAgICAgICAgICBTVFJJTkdMSUJfQkxPT01fQUREKG1hc2ssIHBbaV0pOworICAgICAgICAgICAgaWYgKHBbaV0gPT0gcFttbGFzdF0pCisgICAgICAgICAgICAgICAgc2tpcCA9IG1sYXN0IC0gaSAtIDE7CisgICAgICAgIH0KKyAgICAgICAgLyogcHJvY2VzcyBwYXR0ZXJuWy0xXSBvdXRzaWRlIHRoZSBsb29wICovCisgICAgICAgIFNUUklOR0xJQl9CTE9PTV9BREQobWFzaywgcFttbGFzdF0pOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7CisgICAgICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLworICAgICAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgeworICAgICAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSBtYXRjaCAqLworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBtbGFzdDsgaisrKQorICAgICAgICAgICAgICAgICAgICBpZiAoc1tpK2pdICE9IHBbal0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSBtbGFzdCkgeworICAgICAgICAgICAgICAgICAgICAvKiBnb3QgYSBtYXRjaCEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgIT0gRkFTVF9DT1VOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gbWF4Y291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF4Y291bnQ7CisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbWxhc3Q7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIG1pc3M6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgaWYgKCEobWFzayAmICgxIDw8IChzW2krbV0gJiAweDFGKSkpKQotICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBza2lwOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgIGlmICghKG1hc2sgJiAoMSA8PCAoc1tpK21dICYgMHgxRikpKSkKLSAgICAgICAgICAgICAgICBpID0gaSArIG07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAgICAvKiBGQVNUX1JTRUFSQ0ggKi8KKworICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCisKKyAgICAgICAgLyogcHJvY2VzcyBwYXR0ZXJuWzBdIG91dHNpZGUgdGhlIGxvb3AgKi8KKyAgICAgICAgU1RSSU5HTElCX0JMT09NX0FERChtYXNrLCBwWzBdKTsKKyAgICAgICAgLyogcHJvY2VzcyBwYXR0ZXJuWzowOi0xXSAqLworICAgICAgICBmb3IgKGkgPSBtbGFzdDsgaSA+IDA7IGktLSkgeworICAgICAgICAgICAgU1RSSU5HTElCX0JMT09NX0FERChtYXNrLCBwW2ldKTsKKyAgICAgICAgICAgIGlmIChwW2ldID09IHBbMF0pCisgICAgICAgICAgICAgICAgc2tpcCA9IGkgLSAxOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gdzsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChzW2ldID09IHBbMF0pIHsKKyAgICAgICAgICAgICAgICAvKiBjYW5kaWRhdGUgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSBtbGFzdDsgaiA+IDA7IGotLSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNbaStqXSAhPSBwW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgLyogZ290IGEgbWF0Y2ghICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgIC8qIG1pc3M6IGNoZWNrIGlmIHByZXZpb3VzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2ktMV0pKQorICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG07CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpID0gaSAtIHNraXA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIHByZXZpb3VzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2ktMV0pKQorICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTk1LDEwICsxNTgsMyBAQAogfQogCiAjZW5kaWYKLQotLyoKLUxvY2FsIHZhcmlhYmxlczoKLWMtYmFzaWMtb2Zmc2V0OiA0Ci1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLSovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmgKaW5kZXggZmJlOTljNy4uZjkxNTI5NmMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBpZiAoc3ViX2xlbiA9PSAwKQogICAgICAgICByZXR1cm4gb2Zmc2V0OwogCi0gICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHN1Yiwgc3ViX2xlbiwgRkFTVF9TRUFSQ0gpOworICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzdWIsIHN1Yl9sZW4sIC0xLCBGQVNUX1NFQVJDSCk7CiAKICAgICBpZiAocG9zID49IDApCiAgICAgICAgIHBvcyArPSBvZmZzZXQ7CkBAIC0zMiw0MiArMzIsNDMgQEAKICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4sCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBvZmZzZXQpCiB7Ci0gICAgLyogWFhYIC0gY3JlYXRlIHJldmVyc2VmYXN0c2VhcmNoIGhlbHBlciEgKi8KLSAgICBpZiAoc3ViX2xlbiA9PSAwKSB7Ci0gICAgICAgIGlmIChzdHJfbGVuIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQlyZXR1cm4gc3RyX2xlbiArIG9mZnNldDsKLSAgICB9IGVsc2UgewotCVB5X3NzaXplX3QgaiwgcG9zID0gLTE7Ci0JZm9yIChqID0gc3RyX2xlbiAtIHN1Yl9sZW47IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgaWYgKFNUUklOR0xJQl9DTVAoc3RyK2osIHN1Yiwgc3ViX2xlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHBvcyA9IGogKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3M7Ci0gICAgfQorICAgIFB5X3NzaXplX3QgcG9zOworCisgICAgaWYgKHN0cl9sZW4gPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN1Yl9sZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIHN0cl9sZW4gKyBvZmZzZXQ7CisKKyAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc3ViLCBzdWJfbGVuLCAtMSwgRkFTVF9SU0VBUkNIKTsKKworICAgIGlmIChwb3MgPj0gMCkKKyAgICAgICAgcG9zICs9IG9mZnNldDsKKworICAgIHJldHVybiBwb3M7CiB9CiAKKy8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCisjZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCisgICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbmQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChzdGFydCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiBQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKIHN0cmluZ2xpYl9maW5kX3NsaWNlKGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdWIsIFB5X3NzaXplX3Qgc3ViX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQogewotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ICs9IHN0cl9sZW47Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAgIGlmIChlbmQgPiBzdHJfbGVuKQotICAgICAgICBlbmQgPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgKz0gc3RyX2xlbjsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLQotICAgIHJldHVybiBzdHJpbmdsaWJfZmluZCgKLSAgICAgICAgc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LAotICAgICAgICBzdWIsIHN1Yl9sZW4sIHN0YXJ0Ci0gICAgICAgICk7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc3RyX2xlbik7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9maW5kKHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViLCBzdWJfbGVuLCBzdGFydCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQpAQCAtNzUsMjEgKzc2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQogewotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ICs9IHN0cl9sZW47Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAgIGlmIChlbmQgPiBzdHJfbGVuKQotICAgICAgICBlbmQgPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgKz0gc3RyX2xlbjsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLQorICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIHN0cl9sZW4pOwogICAgIHJldHVybiBzdHJpbmdsaWJfcmZpbmQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWIsIHN1Yl9sZW4sIHN0YXJ0KTsKIH0KIAotI2lmIGRlZmluZWQoU1RSSU5HTElCX1NUUikgJiYgIWRlZmluZWQoRlJPTV9CWVRFQVJSQVkpCisjaWZkZWYgU1RSSU5HTElCX1dBTlRfQ09OVEFJTlNfT0JKCiAKIFB5X0xPQ0FMX0lOTElORShpbnQpCiBzdHJpbmdsaWJfY29udGFpbnNfb2JqKFB5T2JqZWN0KiBzdHIsIFB5T2JqZWN0KiBzdWIpCkBAIC0xMDAsOSArOTEsOSBAQAogICAgICAgICApICE9IC0xOwogfQogCi0jZW5kaWYgLyogU1RSSU5HTElCX1NUUiAqLworI2VuZGlmIC8qIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAqLwogCi0jaWZkZWYgRlJPTV9VTklDT0RFCisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKIAogLyoKIFRoaXMgZnVuY3Rpb24gaXMgYSBoZWxwZXIgZm9yIHRoZSAiZmluZCIgZmFtaWx5IChmaW5kLCByZmluZCwgaW5kZXgsCkBAIC0xNTAsMTMgKzE0MSw2IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLSNlbmRpZiAvKiBGUk9NX1VOSUNPREUgKi8KKyNlbmRpZiAvKiBTVFJJTkdMSUJfSVNfVU5JQ09ERSAqLwogCiAjZW5kaWYgLyogU1RSSU5HTElCX0ZJTkRfSCAqLwotCi0vKgotTG9jYWwgdmFyaWFibGVzOgotYy1iYXNpYy1vZmZzZXQ6IDQKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zvcm1hdHRlci5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgKaW5kZXggZTk0OTVjOS4uYzQ5YTEwNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgKQEAgLTEsNiArMSw4IEBACiAvKiBpbXBsZW1lbnRzIHRoZSBzdHJpbmcsIGxvbmcsIGFuZCBmbG9hdCBmb3JtYXR0ZXJzLiAgdGhhdCBpcywKICAgIHN0cmluZy5fX2Zvcm1hdF9fLCBldGMuICovCiAKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKwogLyogQmVmb3JlIGluY2x1ZGluZyB0aGlzLCB5b3UgbXVzdCBpbmNsdWRlIGVpdGhlcjoKICAgIHN0cmluZ2xpYi91bmljb2RlZGVmcy5oCiAgICBzdHJpbmdsaWIvc3RyaW5nZGVmcy5oCkBAIC05LDEyICsxMSwxMSBAQAogICAgRk9STUFUX1NUUklORwogICAgRk9STUFUX0xPTkcKICAgIEZPUk1BVF9GTE9BVAorICAgRk9STUFUX0NPTVBMRVgKICAgIHRvIGJlIHdoYXRldmVyIHlvdSB3YW50IHRoZSBwdWJsaWMgbmFtZXMgb2YgdGhlc2UgZnVuY3Rpb25zIHRvCiAgICBiZS4gIFRoZXNlIGFyZSB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUuCiAqLwogCi0jZGVmaW5lIEFMTE9XX1BBUkVOU19GT1JfU0lHTiAwCi0KIC8qIFJhaXNlcyBhbiBleGNlcHRpb24gYWJvdXQgYW4gdW5rbm93biBwcmVzZW50YXRpb24gdHlwZSBmb3IgdGhpcwogICogdHlwZS4gKi8KIApAQCAtNDMsNiArNDQsMjQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZAoraW52YWxpZF9jb21tYV90eXBlKFNUUklOR0xJQl9DSEFSIHByZXNlbnRhdGlvbl90eXBlKQoreworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgLyogU2VlIGNvbW1lbnQgaW4gdW5rbm93bl9wcmVzZW50YXRpb25fdHlwZSAqLworICAgIGlmIChwcmVzZW50YXRpb25fdHlwZSA+IDMyICYmIHByZXNlbnRhdGlvbl90eXBlIDwgMTI4KQorI2VuZGlmCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5ICcsJyB3aXRoICclYycuIiwKKyAgICAgICAgICAgICAgICAgICAgIChjaGFyKXByZXNlbnRhdGlvbl90eXBlKTsKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgIGVsc2UKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgJywnIHdpdGggJ1xceCV4Jy4iLAorICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClwcmVzZW50YXRpb25fdHlwZSk7CisjZW5kaWYKK30KKwogLyoKICAgICBnZXRfaW50ZWdlciBjb25zdW1lcyAwIG9yIG1vcmUgZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXJzIGZyb20gYW4KICAgICBpbnB1dCBzdHJpbmcsIHVwZGF0ZXMgKnJlc3VsdCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aXZlCkBAIC0xMDQsOSArMTIzLDYgQEAKIHsKICAgICBzd2l0Y2ggKGMpIHsKICAgICBjYXNlICcgJzogY2FzZSAnKyc6IGNhc2UgJy0nOgotI2lmIEFMTE9XX1BBUkVOU19GT1JfU0lHTgotICAgIGNhc2UgJygnOgotI2VuZGlmCiAgICAgICAgIHJldHVybiAxOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTIwLDEwICsxMzYsMzEgQEAKICAgICBpbnQgYWx0ZXJuYXRlOwogICAgIFNUUklOR0xJQl9DSEFSIHNpZ247CiAgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBpbnQgdGhvdXNhbmRzX3NlcGFyYXRvcnM7CiAgICAgUHlfc3NpemVfdCBwcmVjaXNpb247CiAgICAgU1RSSU5HTElCX0NIQVIgdHlwZTsKIH0gSW50ZXJuYWxGb3JtYXRTcGVjOwogCisKKyNpZiAwCisvKiBPY2Nhc3Npb25hbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nLiBTaG91bGQgbm9ybWFsbHkgYmUgY29tbWVudGVkIG91dC4gKi8KK3N0YXRpYyB2b2lkCitERUJVR19QUklOVF9GT1JNQVRfU1BFQyhJbnRlcm5hbEZvcm1hdFNwZWMgKmZvcm1hdCkKK3sKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiBmaWxsX2NoYXIgJWRcbiIsIGZvcm1hdC0+ZmlsbF9jaGFyKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiBhbGlnbiAlZFxuIiwgZm9ybWF0LT5hbGlnbik7CisgICAgcHJpbnRmKCJpbnRlcm5hbCBmb3JtYXQgc3BlYzogYWx0ZXJuYXRlICVkXG4iLCBmb3JtYXQtPmFsdGVybmF0ZSk7CisgICAgcHJpbnRmKCJpbnRlcm5hbCBmb3JtYXQgc3BlYzogc2lnbiAlZFxuIiwgZm9ybWF0LT5zaWduKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiB3aWR0aCAlemRcbiIsIGZvcm1hdC0+d2lkdGgpOworICAgIHByaW50ZigiaW50ZXJuYWwgZm9ybWF0IHNwZWM6IHRob3VzYW5kc19zZXBhcmF0b3JzICVkXG4iLAorICAgICAgICAgICBmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKTsKKyAgICBwcmludGYoImludGVybmFsIGZvcm1hdCBzcGVjOiBwcmVjaXNpb24gJXpkXG4iLCBmb3JtYXQtPnByZWNpc2lvbik7CisgICAgcHJpbnRmKCJpbnRlcm5hbCBmb3JtYXQgc3BlYzogdHlwZSAlY1xuIiwgZm9ybWF0LT50eXBlKTsKKyAgICBwcmludGYoIlxuIik7Cit9CisjZW5kaWYKKworCiAvKgogICBwdHIgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgZm9ybWF0X3NwZWMsIGVuZCBwb2ludHMganVzdCBwYXN0IGl0cyBlbmQuCiAgIGZpbGxzIGluIGZvcm1hdCB3aXRoIHRoZSBwYXJzZWQgaW5mb3JtYXRpb24uCkBAIC0xMzQsNyArMTcxLDggQEAKIHBhcnNlX2ludGVybmFsX3JlbmRlcl9mb3JtYXRfc3BlYyhTVFJJTkdMSUJfQ0hBUiAqZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBmb3JtYXRfc3BlY19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRTcGVjICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkZWZhdWx0X3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkZWZhdWx0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkZWZhdWx0X2FsaWduKQogewogICAgIFNUUklOR0xJQl9DSEFSICpwdHIgPSBmb3JtYXRfc3BlYzsKICAgICBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gZm9ybWF0X3NwZWMgKyBmb3JtYXRfc3BlY19sZW47CkBAIC0xNDIsMTMgKzE4MCwxNSBAQAogICAgIC8qIGVuZC1wdHIgaXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgY29kZSB0byBzcGVjaWZ5IHRoZSBsZW5ndGggb2YKICAgICAgICB0aGUgaW5wdXQgc3RyaW5nICovCiAKLSAgICBQeV9zc2l6ZV90IHNwZWNpZmllZF93aWR0aDsKKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOworICAgIGludCBhbGlnbl9zcGVjaWZpZWQgPSAwOwogCiAgICAgZm9ybWF0LT5maWxsX2NoYXIgPSAnXDAnOwotICAgIGZvcm1hdC0+YWxpZ24gPSAnXDAnOworICAgIGZvcm1hdC0+YWxpZ24gPSBkZWZhdWx0X2FsaWduOwogICAgIGZvcm1hdC0+YWx0ZXJuYXRlID0gMDsKICAgICBmb3JtYXQtPnNpZ24gPSAnXDAnOwogICAgIGZvcm1hdC0+d2lkdGggPSAtMTsKKyAgICBmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzID0gMDsKICAgICBmb3JtYXQtPnByZWNpc2lvbiA9IC0xOwogICAgIGZvcm1hdC0+dHlwZSA9IGRlZmF1bHRfdHlwZTsKIApAQCAtMTU3LDEwICsxOTcsMTIgQEAKICAgICBpZiAoZW5kLXB0ciA+PSAyICYmIGlzX2FsaWdubWVudF90b2tlbihwdHJbMV0pKSB7CiAgICAgICAgIGZvcm1hdC0+YWxpZ24gPSBwdHJbMV07CiAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gcHRyWzBdOworICAgICAgICBhbGlnbl9zcGVjaWZpZWQgPSAxOwogICAgICAgICBwdHIgKz0gMjsKICAgICB9CiAgICAgZWxzZSBpZiAoZW5kLXB0ciA+PSAxICYmIGlzX2FsaWdubWVudF90b2tlbihwdHJbMF0pKSB7CiAgICAgICAgIGZvcm1hdC0+YWxpZ24gPSBwdHJbMF07CisgICAgICAgIGFsaWduX3NwZWNpZmllZCA9IDE7CiAgICAgICAgICsrcHRyOwogICAgIH0KIApAQCAtMTY4LDExICsyMTAsNiBAQAogICAgIGlmIChlbmQtcHRyID49IDEgJiYgaXNfc2lnbl9lbGVtZW50KHB0clswXSkpIHsKICAgICAgICAgZm9ybWF0LT5zaWduID0gcHRyWzBdOwogICAgICAgICArK3B0cjsKLSNpZiBBTExPV19QQVJFTlNfRk9SX1NJR04KLSAgICAgICAgaWYgKGVuZC1wdHIgPj0gMSAmJiBwdHJbMF0gPT0gJyknKSB7Ci0gICAgICAgICAgICArK3B0cjsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogCiAgICAgLyogSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzICMsIHdlJ3JlIGluIGFsdGVybmF0ZSBtb2RlLiAgVGhpcyBvbmx5CkBAIC0xODUsMzEgKzIyMiw0MSBAQAogICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgZm9yIDAtcGFkZGluZyAoYmFja3dhcmRzIGNvbXBhdCkgKi8KICAgICBpZiAoZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyAmJiBlbmQtcHRyID49IDEgJiYgcHRyWzBdID09ICcwJykgewogICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9ICcwJzsKLSAgICAgICAgaWYgKGZvcm1hdC0+YWxpZ24gPT0gJ1wwJykgeworICAgICAgICBpZiAoIWFsaWduX3NwZWNpZmllZCkgewogICAgICAgICAgICAgZm9ybWF0LT5hbGlnbiA9ICc9JzsKICAgICAgICAgfQogICAgICAgICArK3B0cjsKICAgICB9CiAKLSAgICAvKiBYWFggYWRkIGVycm9yIGNoZWNraW5nICovCi0gICAgc3BlY2lmaWVkX3dpZHRoID0gZ2V0X2ludGVnZXIoJnB0ciwgZW5kLCAmZm9ybWF0LT53aWR0aCk7CisgICAgY29uc3VtZWQgPSBnZXRfaW50ZWdlcigmcHRyLCBlbmQsICZmb3JtYXQtPndpZHRoKTsKKyAgICBpZiAoY29uc3VtZWQgPT0gLTEpCisgICAgICAgIC8qIE92ZXJmbG93IGVycm9yLiBFeGNlcHRpb24gYWxyZWFkeSBzZXQuICovCisgICAgICAgIHJldHVybiAwOwogCi0gICAgLyogaWYgc3BlY2lmaWVkX3dpZHRoIGlzIDAsIHdlIGRpZG4ndCBjb25zdW1lIGFueSBjaGFyYWN0ZXJzIGZvcgotICAgICAgIHRoZSB3aWR0aC4gaW4gdGhhdCBjYXNlLCByZXNldCB0aGUgd2lkdGggdG8gLTEsIGJlY2F1c2UKLSAgICAgICBnZXRfaW50ZWdlcigpIHdpbGwgaGF2ZSBzZXQgaXQgdG8gemVybyAqLwotICAgIGlmIChzcGVjaWZpZWRfd2lkdGggPT0gMCkgeworICAgIC8qIElmIGNvbnN1bWVkIGlzIDAsIHdlIGRpZG4ndCBjb25zdW1lIGFueSBjaGFyYWN0ZXJzIGZvciB0aGUKKyAgICAgICB3aWR0aC4gSW4gdGhhdCBjYXNlLCByZXNldCB0aGUgd2lkdGggdG8gLTEsIGJlY2F1c2UKKyAgICAgICBnZXRfaW50ZWdlcigpIHdpbGwgaGF2ZSBzZXQgaXQgdG8gemVyby4gLTEgaXMgaG93IHdlIHJlY29yZAorICAgICAgIHRoYXQgdGhlIHdpZHRoIHdhc24ndCBzcGVjaWZpZWQuICovCisgICAgaWYgKGNvbnN1bWVkID09IDApCiAgICAgICAgIGZvcm1hdC0+d2lkdGggPSAtMTsKKworICAgIC8qIENvbW1hIHNpZ25pZmllcyBhZGQgdGhvdXNhbmRzIHNlcGFyYXRvcnMgKi8KKyAgICBpZiAoZW5kLXB0ciAmJiBwdHJbMF0gPT0gJywnKSB7CisgICAgICAgIGZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMgPSAxOworICAgICAgICArK3B0cjsKICAgICB9CiAKICAgICAvKiBQYXJzZSBmaWVsZCBwcmVjaXNpb24gKi8KICAgICBpZiAoZW5kLXB0ciAmJiBwdHJbMF0gPT0gJy4nKSB7CiAgICAgICAgICsrcHRyOwogCi0gICAgICAgIC8qIFhYWCBhZGQgZXJyb3IgY2hlY2tpbmcgKi8KLSAgICAgICAgc3BlY2lmaWVkX3dpZHRoID0gZ2V0X2ludGVnZXIoJnB0ciwgZW5kLCAmZm9ybWF0LT5wcmVjaXNpb24pOworICAgICAgICBjb25zdW1lZCA9IGdldF9pbnRlZ2VyKCZwdHIsIGVuZCwgJmZvcm1hdC0+cHJlY2lzaW9uKTsKKyAgICAgICAgaWYgKGNvbnN1bWVkID09IC0xKQorICAgICAgICAgICAgLyogT3ZlcmZsb3cgZXJyb3IuIEV4Y2VwdGlvbiBhbHJlYWR5IHNldC4gKi8KKyAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIC8qIG5vdCBoYXZpbmcgYSBwcmVjaXNpb24gYWZ0ZXIgYSBkb3QgaXMgYW4gZXJyb3IgKi8KLSAgICAgICAgaWYgKHNwZWNpZmllZF93aWR0aCA9PSAwKSB7CisgICAgICAgIC8qIE5vdCBoYXZpbmcgYSBwcmVjaXNpb24gYWZ0ZXIgYSBkb3QgaXMgYW4gZXJyb3IuICovCisgICAgICAgIGlmIChjb25zdW1lZCA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9ybWF0IHNwZWNpZmllciBtaXNzaW5nIHByZWNpc2lvbiIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTcsMTAgKzI2NCwxMCBAQAogCiAgICAgfQogCi0gICAgLyogRmluYWxseSwgcGFyc2UgdGhlIHR5cGUgZmllbGQgKi8KKyAgICAvKiBGaW5hbGx5LCBwYXJzZSB0aGUgdHlwZSBmaWVsZC4gKi8KIAogICAgIGlmIChlbmQtcHRyID4gMSkgewotICAgICAgICAvKiBpbnZhbGlkIGNvbnZlcnNpb24gc3BlYyAqLworICAgICAgICAvKiBNb3JlIHRoYW4gb25lIGNoYXIgcmVtYWluLCBpbnZhbGlkIGNvbnZlcnNpb24gc3BlYy4gKi8KICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yMzAsMTQgKzI3NywxMDMgQEAKICAgICAgICAgKytwdHI7CiAgICAgfQogCisgICAgLyogRG8gYXMgbXVjaCB2YWxpZGF0aW5nIGFzIHdlIGNhbiwganVzdCBieSBsb29raW5nIGF0IHRoZSBmb3JtYXQKKyAgICAgICBzcGVjaWZpZXIuICBEbyBub3QgdGFrZSBpbnRvIGFjY291bnQgd2hhdCB0eXBlIG9mIGZvcm1hdHRpbmcKKyAgICAgICB3ZSdyZSBkb2luZyAoaW50LCBmbG9hdCwgc3RyaW5nKS4gKi8KKworICAgIGlmIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0LT50eXBlKSB7CisgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgY2FzZSAnZic6CisgICAgICAgIGNhc2UgJ2cnOgorICAgICAgICBjYXNlICdFJzoKKyAgICAgICAgY2FzZSAnRyc6CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICBjYXNlICdGJzoKKyAgICAgICAgY2FzZSAnXDAnOgorICAgICAgICAgICAgLyogVGhlc2UgYXJlIGFsbG93ZWQuIFNlZSBQRVAgMzc4LiovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGludmFsaWRfY29tbWFfdHlwZShmb3JtYXQtPnR5cGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gMTsKIH0KIAotI2lmIGRlZmluZWQgRk9STUFUX0ZMT0FUIHx8IGRlZmluZWQgRk9STUFUX0xPTkcKKy8qIENhbGN1bGF0ZSB0aGUgcGFkZGluZyBuZWVkZWQuICovCitzdGF0aWMgdm9pZAorY2FsY19wYWRkaW5nKFB5X3NzaXplX3QgbmNoYXJzLCBQeV9zc2l6ZV90IHdpZHRoLCBTVFJJTkdMSUJfQ0hBUiBhbGlnbiwKKyAgICAgICAgICAgICBQeV9zc2l6ZV90ICpuX2xwYWRkaW5nLCBQeV9zc2l6ZV90ICpuX3JwYWRkaW5nLAorICAgICAgICAgICAgIFB5X3NzaXplX3QgKm5fdG90YWwpCit7CisgICAgaWYgKHdpZHRoID49IDApIHsKKyAgICAgICAgaWYgKG5jaGFycyA+IHdpZHRoKQorICAgICAgICAgICAgKm5fdG90YWwgPSBuY2hhcnM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpuX3RvdGFsID0gd2lkdGg7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBub3Qgc3BlY2lmaWVkLCB1c2UgYWxsIG9mIHRoZSBjaGFycyBhbmQgbm8gbW9yZSAqLworICAgICAgICAqbl90b3RhbCA9IG5jaGFyczsKKyAgICB9CisKKyAgICAvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIGxlYWRpbmcgc3BhY2Ugd2UgbmVlZCwgYmFzZWQgb24gdGhlCisgICAgICAgYWxpZ25pbmcgKi8KKyAgICBpZiAoYWxpZ24gPT0gJz4nKQorICAgICAgICAqbl9scGFkZGluZyA9ICpuX3RvdGFsIC0gbmNoYXJzOworICAgIGVsc2UgaWYgKGFsaWduID09ICdeJykKKyAgICAgICAgKm5fbHBhZGRpbmcgPSAoKm5fdG90YWwgLSBuY2hhcnMpIC8gMjsKKyAgICBlbHNlIGlmIChhbGlnbiA9PSAnPCcgfHwgYWxpZ24gPT0gJz0nKQorICAgICAgICAqbl9scGFkZGluZyA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIC8qIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIHVuc3BlY2lmaWVkIGFsaWdubWVudC4gKi8KKyAgICAgICAgKm5fbHBhZGRpbmcgPSAwOworICAgICAgICBhc3NlcnQoMCk7CisgICAgfQorCisgICAgKm5fcnBhZGRpbmcgPSAqbl90b3RhbCAtIG5jaGFycyAtICpuX2xwYWRkaW5nOworfQorCisvKiBEbyB0aGUgcGFkZGluZywgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGNhbGxlci1zdXBwbGllZAorICAgY29udGVudCBnb2VzLiAqLworc3RhdGljIFNUUklOR0xJQl9DSEFSICoKK2ZpbGxfcGFkZGluZyhTVFJJTkdMSUJfQ0hBUiAqcCwgUHlfc3NpemVfdCBuY2hhcnMsIFNUUklOR0xJQl9DSEFSIGZpbGxfY2hhciwKKyAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fbHBhZGRpbmcsIFB5X3NzaXplX3Qgbl9ycGFkZGluZykKK3sKKyAgICAvKiBQYWQgb24gbGVmdC4gKi8KKyAgICBpZiAobl9scGFkZGluZykKKyAgICAgICAgU1RSSU5HTElCX0ZJTEwocCwgZmlsbF9jaGFyLCBuX2xwYWRkaW5nKTsKKworICAgIC8qIFBhZCBvbiByaWdodC4gKi8KKyAgICBpZiAobl9ycGFkZGluZykKKyAgICAgICAgU1RSSU5HTElCX0ZJTEwocCArIG5jaGFycyArIG5fbHBhZGRpbmcsIGZpbGxfY2hhciwgbl9ycGFkZGluZyk7CisKKyAgICAvKiBQb2ludGVyIHRvIHRoZSB1c2VyIGNvbnRlbnQuICovCisgICAgcmV0dXJuIHAgKyBuX2xwYWRkaW5nOworfQorCisjaWYgZGVmaW5lZCBGT1JNQVRfRkxPQVQgfHwgZGVmaW5lZCBGT1JNQVRfTE9ORyB8fCBkZWZpbmVkIEZPUk1BVF9DT01QTEVYCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqIGNvbW1vbiByb3V0aW5lcyBmb3IgbnVtZXJpYyBmb3JtYXR0aW5nICoqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIExvY2FsZSB0eXBlIGNvZGVzLiAqLworI2RlZmluZSBMVF9DVVJSRU5UX0xPQ0FMRSAwCisjZGVmaW5lIExUX0RFRkFVTFRfTE9DQUxFIDEKKyNkZWZpbmUgTFRfTk9fTE9DQUxFIDIKKworLyogTG9jYWxlIGluZm8gbmVlZGVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzIGFuZCB0aGUgcGFydCBvZiBmbG9hdHMKKyAgIGJlZm9yZSBhbmQgaW5jbHVkaW5nIHRoZSBkZWNpbWFsLiBOb3RlIHRoYXQgbG9jYWxlcyBvbmx5IHN1cHBvcnQKKyAgIDgtYml0IGNoYXJzLCBub3QgdW5pY29kZS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjaGFyICpkZWNpbWFsX3BvaW50OworICAgIGNoYXIgKnRob3VzYW5kc19zZXA7CisgICAgY2hhciAqZ3JvdXBpbmc7Cit9IExvY2FsZUluZm87CisKIC8qIGRlc2NyaWJlcyB0aGUgbGF5b3V0IGZvciBhbiBpbnRlZ2VyLCBzZWUgdGhlIGNvbW1lbnQgaW4KICAgIGNhbGNfbnVtYmVyX3dpZHRocygpIGZvciBkZXRhaWxzICovCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0yNDUsMzggKzM4MSw4NSBAQAogICAgIFB5X3NzaXplX3Qgbl9wcmVmaXg7CiAgICAgUHlfc3NpemVfdCBuX3NwYWRkaW5nOwogICAgIFB5X3NzaXplX3Qgbl9ycGFkZGluZzsKLSAgICBjaGFyIGxzaWduOwotICAgIFB5X3NzaXplX3Qgbl9sc2lnbjsKLSAgICBjaGFyIHJzaWduOwotICAgIFB5X3NzaXplX3Qgbl9yc2lnbjsKLSAgICBQeV9zc2l6ZV90IG5fdG90YWw7IC8qIGp1c3QgYSBjb252ZW5pZW5jZSwgaXQncyBkZXJpdmFibGUgZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIGZpZWxkcyAqLworICAgIGNoYXIgc2lnbjsKKyAgICBQeV9zc2l6ZV90IG5fc2lnbjsgICAgICAvKiBudW1iZXIgb2YgZGlnaXRzIG5lZWRlZCBmb3Igc2lnbiAoMC8xKSAqLworICAgIFB5X3NzaXplX3Qgbl9ncm91cGVkX2RpZ2l0czsgLyogU3BhY2UgdGFrZW4gdXAgYnkgdGhlIGRpZ2l0cywgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgZ3JvdXBpbmcgY2hhcnMuICovCisgICAgUHlfc3NpemVfdCBuX2RlY2ltYWw7ICAgLyogMCBpZiBvbmx5IGFuIGludGVnZXIgKi8KKyAgICBQeV9zc2l6ZV90IG5fcmVtYWluZGVyOyAvKiBEaWdpdHMgaW4gZGVjaW1hbCBhbmQvb3IgZXhwb25lbnQgcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRpbmcgdGhlIGRlY2ltYWwgaXRzZWxmLCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQuICovCisKKyAgICAvKiBUaGVzZSAyIGFyZSBub3QgdGhlIHdpZHRocyBvZiBmaWVsZHMsIGJ1dCBhcmUgbmVlZGVkIGJ5CisgICAgICAgU1RSSU5HTElCX0dST1VQSU5HLiAqLworICAgIFB5X3NzaXplX3Qgbl9kaWdpdHM7ICAgIC8qIFRoZSBudW1iZXIgb2YgZGlnaXRzIGJlZm9yZSBhIGRlY2ltYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBleHBvbmVudC4gKi8KKyAgICBQeV9zc2l6ZV90IG5fbWluX3dpZHRoOyAvKiBUaGUgbWluX3dpZHRoIHdlIHVzZWQgd2hlbiB3ZSBjb21wdXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuX2dyb3VwZWRfZGlnaXRzIHdpZHRoLiAqLwogfSBOdW1iZXJGaWVsZFdpZHRoczsKIAorCisvKiBHaXZlbiBhIG51bWJlciBvZiB0aGUgZm9ybToKKyAgIGRpZ2l0c1tyZW1haW5kZXJdCisgICB3aGVyZSBwdHIgcG9pbnRzIHRvIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyB0byB0aGUgZW5kLCBmaW5kIHdoZXJlCisgICAgdGhlIGludGVnZXIgcGFydCBlbmRzLiBUaGlzIGNvdWxkIGJlIGEgZGVjaW1hbCwgYW4gZXhwb25lbnQsIGJvdGgsCisgICAgb3IgbmVpdGhlci4KKyAgIElmIGEgZGVjaW1hbCBwb2ludCBpcyBwcmVzZW50LCBzZXQgKmhhc19kZWNpbWFsIGFuZCBpbmNyZW1lbnQKKyAgICByZW1haW5kZXIgYmV5b25kIGl0LgorICAgUmVzdWx0cyBhcmUgdW5kZWZpbmVkIChidXQgc2hvdWxkbid0IGNyYXNoKSBmb3IgaW1wcm9wZXJseQorICAgIGZvcm1hdHRlZCBzdHJpbmdzLgorKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9udW1iZXIoU1RSSU5HTElCX0NIQVIgKnB0ciwgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgUHlfc3NpemVfdCAqbl9yZW1haW5kZXIsIGludCAqaGFzX2RlY2ltYWwpCit7CisgICAgU1RSSU5HTElCX0NIQVIgKmVuZCA9IHB0ciArIGxlbjsKKyAgICBTVFJJTkdMSUJfQ0hBUiAqcmVtYWluZGVyOworCisgICAgd2hpbGUgKHB0cjxlbmQgJiYgaXNkaWdpdCgqcHRyKSkKKyAgICAgICAgKytwdHI7CisgICAgcmVtYWluZGVyID0gcHRyOworCisgICAgLyogRG9lcyByZW1haW5kZXIgc3RhcnQgd2l0aCBhIGRlY2ltYWwgcG9pbnQ/ICovCisgICAgKmhhc19kZWNpbWFsID0gcHRyPGVuZCAmJiAqcmVtYWluZGVyID09ICcuJzsKKworICAgIC8qIFNraXAgdGhlIGRlY2ltYWwgcG9pbnQuICovCisgICAgaWYgKCpoYXNfZGVjaW1hbCkKKyAgICAgICAgcmVtYWluZGVyKys7CisKKyAgICAqbl9yZW1haW5kZXIgPSBlbmQgLSByZW1haW5kZXI7Cit9CisKIC8qIG5vdCBhbGwgZmllbGRzIG9mIGZvcm1hdCBhcmUgdXNlZC4gIGZvciBleGFtcGxlLCBwcmVjaXNpb24gaXMKICAgIHVudXNlZC4gIHNob3VsZCB0aGlzIHRha2UgZGlzY3JldGUgcGFyYW1zIGluIG9yZGVyIHRvIGJlIG1vcmUgY2xlYXIKICAgIGFib3V0IHdoYXQgaXQgZG9lcz8gIG9yIGlzIHBhc3NpbmcgYSBzaW5nbGUgZm9ybWF0IHBhcmFtZXRlciBlYXNpZXIKICAgIGFuZCBtb3JlIGVmZmljaWVudCBlbm91Z2ggdG8ganVzdGlmeSBhIGxpdHRsZSBvYmZ1c2NhdGlvbj8gKi8KLXN0YXRpYyB2b2lkCi1jYWxjX251bWJlcl93aWR0aHMoTnVtYmVyRmllbGRXaWR0aHMgKnNwZWMsIFNUUklOR0xJQl9DSEFSIGFjdHVhbF9zaWduLAotICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9wcmVmaXgsIFB5X3NzaXplX3Qgbl9kaWdpdHMsCitzdGF0aWMgUHlfc3NpemVfdAorY2FsY19udW1iZXJfd2lkdGhzKE51bWJlckZpZWxkV2lkdGhzICpzcGVjLCBQeV9zc2l6ZV90IG5fcHJlZml4LAorICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSIHNpZ25fY2hhciwgU1RSSU5HTElCX0NIQVIgKm51bWJlciwKKyAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fbnVtYmVyLCBQeV9zc2l6ZV90IG5fcmVtYWluZGVyLAorICAgICAgICAgICAgICAgICAgIGludCBoYXNfZGVjaW1hbCwgY29uc3QgTG9jYWxlSW5mbyAqbG9jYWxlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsRm9ybWF0U3BlYyAqZm9ybWF0KQogeworICAgIFB5X3NzaXplX3Qgbl9ub25fZGlnaXRfbm9uX3BhZGRpbmc7CisgICAgUHlfc3NpemVfdCBuX3BhZGRpbmc7CisKKyAgICBzcGVjLT5uX2RpZ2l0cyA9IG5fbnVtYmVyIC0gbl9yZW1haW5kZXIgLSAoaGFzX2RlY2ltYWw/MTowKTsKICAgICBzcGVjLT5uX2xwYWRkaW5nID0gMDsKLSAgICBzcGVjLT5uX3ByZWZpeCA9IDA7CisgICAgc3BlYy0+bl9wcmVmaXggPSBuX3ByZWZpeDsKKyAgICBzcGVjLT5uX2RlY2ltYWwgPSBoYXNfZGVjaW1hbCA/IHN0cmxlbihsb2NhbGUtPmRlY2ltYWxfcG9pbnQpIDogMDsKKyAgICBzcGVjLT5uX3JlbWFpbmRlciA9IG5fcmVtYWluZGVyOwogICAgIHNwZWMtPm5fc3BhZGRpbmcgPSAwOwogICAgIHNwZWMtPm5fcnBhZGRpbmcgPSAwOwotICAgIHNwZWMtPmxzaWduID0gJ1wwJzsKLSAgICBzcGVjLT5uX2xzaWduID0gMDsKLSAgICBzcGVjLT5yc2lnbiA9ICdcMCc7Ci0gICAgc3BlYy0+bl9yc2lnbiA9IDA7CisgICAgc3BlYy0+c2lnbiA9ICdcMCc7CisgICAgc3BlYy0+bl9zaWduID0gMDsKIAogICAgIC8qIHRoZSBvdXRwdXQgd2lsbCBsb29rIGxpa2U6Ci0gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgIHwgPGxwYWRkaW5nPiA8bHNpZ24+IDxwcmVmaXg+IDxzcGFkZGluZz4gPGRpZ2l0cz4gPHJzaWduPiA8cnBhZGRpbmc+IHwKLSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgIHwgPGxwYWRkaW5nPiA8c2lnbj4gPHByZWZpeD4gPHNwYWRkaW5nPiA8Z3JvdXBlZF9kaWdpdHM+IDxkZWNpbWFsPiA8cmVtYWluZGVyPiA8cnBhZGRpbmc+IHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAKLSAgICAgICBsc2lnbiBhbmQgcnNpZ24gYXJlIGNvbXB1dGVkIGZyb20gZm9ybWF0LT5zaWduIGFuZCB0aGUgYWN0dWFsCisgICAgICAgc2lnbiBpcyBjb21wdXRlZCBmcm9tIGZvcm1hdC0+c2lnbiBhbmQgdGhlIGFjdHVhbAogICAgICAgIHNpZ24gb2YgdGhlIG51bWJlcgogCiAgICAgICAgcHJlZml4IGlzIGdpdmVuIChpdCdzIGZvciB0aGUgJzB4JyBwcmVmaXgpCkBAIC0yOTEsMTA5ICs0NzQsMTk2IEBACiAgICAgKi8KIAogICAgIC8qIGNvbXB1dGUgdGhlIHZhcmlvdXMgcGFydHMgd2UncmUgZ29pbmcgdG8gd3JpdGUgKi8KLSAgICBpZiAoZm9ybWF0LT5zaWduID09ICcrJykgeworICAgIHN3aXRjaCAoZm9ybWF0LT5zaWduKSB7CisgICAgY2FzZSAnKyc6CiAgICAgICAgIC8qIGFsd2F5cyBwdXQgYSArIG9yIC0gKi8KLSAgICAgICAgc3BlYy0+bl9sc2lnbiA9IDE7Ci0gICAgICAgIHNwZWMtPmxzaWduID0gKGFjdHVhbF9zaWduID09ICctJyA/ICctJyA6ICcrJyk7Ci0gICAgfQotI2lmIEFMTE9XX1BBUkVOU19GT1JfU0lHTgotICAgIGVsc2UgaWYgKGZvcm1hdC0+c2lnbiA9PSAnKCcpIHsKLSAgICAgICAgaWYgKGFjdHVhbF9zaWduID09ICctJykgewotICAgICAgICAgICAgc3BlYy0+bl9sc2lnbiA9IDE7Ci0gICAgICAgICAgICBzcGVjLT5sc2lnbiA9ICcoJzsKLSAgICAgICAgICAgIHNwZWMtPm5fcnNpZ24gPSAxOwotICAgICAgICAgICAgc3BlYy0+cnNpZ24gPSAnKSc7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBlbHNlIGlmIChmb3JtYXQtPnNpZ24gPT0gJyAnKSB7Ci0gICAgICAgIHNwZWMtPm5fbHNpZ24gPSAxOwotICAgICAgICBzcGVjLT5sc2lnbiA9IChhY3R1YWxfc2lnbiA9PSAnLScgPyAnLScgOiAnICcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogbm9uIHNwZWNpZmllZCwgb3IgdGhlIGRlZmF1bHQgKC0pICovCi0gICAgICAgIGlmIChhY3R1YWxfc2lnbiA9PSAnLScpIHsKLSAgICAgICAgICAgIHNwZWMtPm5fbHNpZ24gPSAxOwotICAgICAgICAgICAgc3BlYy0+bHNpZ24gPSAnLSc7CisgICAgICAgIHNwZWMtPm5fc2lnbiA9IDE7CisgICAgICAgIHNwZWMtPnNpZ24gPSAoc2lnbl9jaGFyID09ICctJyA/ICctJyA6ICcrJyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJyAnOgorICAgICAgICBzcGVjLT5uX3NpZ24gPSAxOworICAgICAgICBzcGVjLT5zaWduID0gKHNpZ25fY2hhciA9PSAnLScgPyAnLScgOiAnICcpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiBOb3Qgc3BlY2lmaWVkLCBvciB0aGUgZGVmYXVsdCAoLSkgKi8KKyAgICAgICAgaWYgKHNpZ25fY2hhciA9PSAnLScpIHsKKyAgICAgICAgICAgIHNwZWMtPm5fc2lnbiA9IDE7CisgICAgICAgICAgICBzcGVjLT5zaWduID0gJy0nOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3BlYy0+bl9wcmVmaXggPSBuX3ByZWZpeDsKKyAgICAvKiBUaGUgbnVtYmVyIG9mIGNoYXJzIHVzZWQgZm9yIG5vbi1kaWdpdHMgYW5kIG5vbi1wYWRkaW5nLiAqLworICAgIG5fbm9uX2RpZ2l0X25vbl9wYWRkaW5nID0gc3BlYy0+bl9zaWduICsgc3BlYy0+bl9wcmVmaXggKyBzcGVjLT5uX2RlY2ltYWwgKworICAgICAgICBzcGVjLT5uX3JlbWFpbmRlcjsKIAotICAgIC8qIG5vdyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgY2hhcmFjdGVycyAqLwotICAgIGlmIChmb3JtYXQtPndpZHRoID09IC0xKSB7Ci0gICAgICAgIC8qIG5vIHBhZGRpbmcgYXQgYWxsLCBub3RoaW5nIHRvIGRvICovCi0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBzZWUgaWYgYW55IHBhZGRpbmcgaXMgbmVlZGVkICovCi0gICAgICAgIGlmIChzcGVjLT5uX2xzaWduICsgbl9kaWdpdHMgKyBzcGVjLT5uX3JzaWduICsKLSAgICAgICAgICAgICAgICBzcGVjLT5uX3ByZWZpeCA+PSBmb3JtYXQtPndpZHRoKSB7Ci0gICAgICAgICAgICAvKiBubyBwYWRkaW5nIG5lZWRlZCwgd2UncmUgYWxyZWFkeSBiaWdnZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICAgIHJlcXVlc3RlZCB3aWR0aCAqLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogZGV0ZXJtaW5lIHdoaWNoIG9mIGxlZnQsIHNwYWNlLCBvciByaWdodCBwYWRkaW5nIGlzCi0gICAgICAgICAgICAgICBuZWVkZWQgKi8KLSAgICAgICAgICAgIFB5X3NzaXplX3QgcGFkZGluZyA9IGZvcm1hdC0+d2lkdGggLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWMtPm5fbHNpZ24gKyBzcGVjLT5uX3ByZWZpeCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9kaWdpdHMgKyBzcGVjLT5uX3JzaWduKTsKLSAgICAgICAgICAgIGlmIChmb3JtYXQtPmFsaWduID09ICc8JykKLSAgICAgICAgICAgICAgICBzcGVjLT5uX3JwYWRkaW5nID0gcGFkZGluZzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdC0+YWxpZ24gPT0gJz4nKQotICAgICAgICAgICAgICAgIHNwZWMtPm5fbHBhZGRpbmcgPSBwYWRkaW5nOwotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnXicpIHsKLSAgICAgICAgICAgICAgICBzcGVjLT5uX2xwYWRkaW5nID0gcGFkZGluZyAvIDI7Ci0gICAgICAgICAgICAgICAgc3BlYy0+bl9ycGFkZGluZyA9IHBhZGRpbmcgLSBzcGVjLT5uX2xwYWRkaW5nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnPScpCi0gICAgICAgICAgICAgICAgc3BlYy0+bl9zcGFkZGluZyA9IHBhZGRpbmc7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3BlYy0+bl9scGFkZGluZyA9IHBhZGRpbmc7CisgICAgLyogbWluX3dpZHRoIGNhbiBnbyBuZWdhdGl2ZSwgdGhhdCdzIG9rYXkuIGZvcm1hdC0+d2lkdGggPT0gLTEgbWVhbnMKKyAgICAgICB3ZSBkb24ndCBjYXJlLiAqLworICAgIGlmIChmb3JtYXQtPmZpbGxfY2hhciA9PSAnMCcgJiYgZm9ybWF0LT5hbGlnbiA9PSAnPScpCisgICAgICAgIHNwZWMtPm5fbWluX3dpZHRoID0gZm9ybWF0LT53aWR0aCAtIG5fbm9uX2RpZ2l0X25vbl9wYWRkaW5nOworICAgIGVsc2UKKyAgICAgICAgc3BlYy0+bl9taW5fd2lkdGggPSAwOworCisgICAgaWYgKHNwZWMtPm5fZGlnaXRzID09IDApCisgICAgICAgIC8qIFRoaXMgY2FzZSBvbmx5IG9jY3VycyB3aGVuIHVzaW5nICdjJyBmb3JtYXR0aW5nLCB3ZSBuZWVkCisgICAgICAgICAgIHRvIHNwZWNpYWwgY2FzZSBpdCBiZWNhdXNlIHRoZSBncm91cGluZyBjb2RlIGFsd2F5cyB3YW50cworICAgICAgICAgICB0byBoYXZlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuICovCisgICAgICAgIHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHMgPSAwOworICAgIGVsc2UKKyAgICAgICAgc3BlYy0+bl9ncm91cGVkX2RpZ2l0cyA9IFNUUklOR0xJQl9HUk9VUElORyhOVUxMLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMtPm5fZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMtPm5fbWluX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS0+Z3JvdXBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT50aG91c2FuZHNfc2VwKTsKKworICAgIC8qIEdpdmVuIHRoZSBkZXNpcmVkIHdpZHRoIGFuZCB0aGUgdG90YWwgb2YgZGlnaXQgYW5kIG5vbi1kaWdpdAorICAgICAgIHNwYWNlIHdlIGNvbnN1bWUsIHNlZSBpZiB3ZSBuZWVkIGFueSBwYWRkaW5nLiBmb3JtYXQtPndpZHRoIGNhbgorICAgICAgIGJlIG5lZ2F0aXZlIChtZWFuaW5nIG5vIHBhZGRpbmcpLCBidXQgdGhpcyBjb2RlIHN0aWxsIHdvcmtzIGluCisgICAgICAgdGhhdCBjYXNlLiAqLworICAgIG5fcGFkZGluZyA9IGZvcm1hdC0+d2lkdGggLQorICAgICAgICAgICAgICAgICAgICAgICAgKG5fbm9uX2RpZ2l0X25vbl9wYWRkaW5nICsgc3BlYy0+bl9ncm91cGVkX2RpZ2l0cyk7CisgICAgaWYgKG5fcGFkZGluZyA+IDApIHsKKyAgICAgICAgLyogU29tZSBwYWRkaW5nIGlzIG5lZWRlZC4gRGV0ZXJtaW5lIGlmIGl0J3MgbGVmdCwgc3BhY2UsIG9yIHJpZ2h0LiAqLworICAgICAgICBzd2l0Y2ggKGZvcm1hdC0+YWxpZ24pIHsKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICBzcGVjLT5uX3JwYWRkaW5nID0gbl9wYWRkaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ14nOgorICAgICAgICAgICAgc3BlYy0+bl9scGFkZGluZyA9IG5fcGFkZGluZyAvIDI7CisgICAgICAgICAgICBzcGVjLT5uX3JwYWRkaW5nID0gbl9wYWRkaW5nIC0gc3BlYy0+bl9scGFkZGluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgIHNwZWMtPm5fc3BhZGRpbmcgPSBuX3BhZGRpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICBzcGVjLT5uX2xwYWRkaW5nID0gbl9wYWRkaW5nOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBTaG91bGRuJ3QgZ2V0IGhlcmUsIGJ1dCB0cmVhdCBpdCBhcyAnPicgKi8KKyAgICAgICAgICAgIHNwZWMtPm5fbHBhZGRpbmcgPSBuX3BhZGRpbmc7CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBzcGVjLT5uX3RvdGFsID0gc3BlYy0+bl9scGFkZGluZyArIHNwZWMtPm5fbHNpZ24gKyBzcGVjLT5uX3ByZWZpeCArCi0gICAgICAgICAgICBzcGVjLT5uX3NwYWRkaW5nICsgbl9kaWdpdHMgKyBzcGVjLT5uX3JzaWduICsgc3BlYy0+bl9ycGFkZGluZzsKKyAgICByZXR1cm4gc3BlYy0+bl9scGFkZGluZyArIHNwZWMtPm5fc2lnbiArIHNwZWMtPm5fcHJlZml4ICsKKyAgICAgICAgc3BlYy0+bl9zcGFkZGluZyArIHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHMgKyBzcGVjLT5uX2RlY2ltYWwgKworICAgICAgICBzcGVjLT5uX3JlbWFpbmRlciArIHNwZWMtPm5fcnBhZGRpbmc7CiB9CiAKLS8qIGZpbGwgaW4gdGhlIG5vbi1kaWdpdCBwYXJ0cyBvZiBhIG51bWJlcnMncyBzdHJpbmcgcmVwcmVzZW50YXRpb24sCi0gICBhcyBkZXRlcm1pbmVkIGluIGNhbGNfbnVtYmVyX3dpZHRocygpLiAgcmV0dXJucyB0aGUgcG9pbnRlciB0bwotICAgd2hlcmUgdGhlIGRpZ2l0cyBnby4gKi8KLXN0YXRpYyBTVFJJTkdMSUJfQ0hBUiAqCi1maWxsX25vbl9kaWdpdHMoU1RSSU5HTElCX0NIQVIgKnBfYnVmLCBjb25zdCBOdW1iZXJGaWVsZFdpZHRocyAqc3BlYywKLSAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqcHJlZml4LCBQeV9zc2l6ZV90IG5fZGlnaXRzLAotICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSIGZpbGxfY2hhcikKKy8qIEZpbGwgaW4gdGhlIGRpZ2l0IHBhcnRzIG9mIGEgbnVtYmVycydzIHN0cmluZyByZXByZXNlbnRhdGlvbiwKKyAgIGFzIGRldGVybWluZWQgaW4gY2FsY19udW1iZXJfd2lkdGhzKCkuCisgICBObyBlcnJvciBjaGVja2luZywgc2luY2Ugd2Uga25vdyB0aGUgYnVmZmVyIGlzIHRoZSBjb3JyZWN0IHNpemUuICovCitzdGF0aWMgdm9pZAorZmlsbF9udW1iZXIoU1RSSU5HTElCX0NIQVIgKmJ1ZiwgY29uc3QgTnVtYmVyRmllbGRXaWR0aHMgKnNwZWMsCisgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqZGlnaXRzLCBQeV9zc2l6ZV90IG5fZGlnaXRzLAorICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKnByZWZpeCwgU1RSSU5HTElCX0NIQVIgZmlsbF9jaGFyLAorICAgICAgICAgICAgTG9jYWxlSW5mbyAqbG9jYWxlLCBpbnQgdG91cHBlcikKIHsKLSAgICBTVFJJTkdMSUJfQ0hBUiAqcF9kaWdpdHM7CisgICAgLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGRpZ2l0cywgZGVjaW1hbCwgYW5kIHJlbWFpbmRlci4gKi8KKyAgICBTVFJJTkdMSUJfQ0hBUiAqcCA9IGRpZ2l0czsKKworI2lmbmRlZiBOREVCVUcKKyAgICBQeV9zc2l6ZV90IHI7CisjZW5kaWYKIAogICAgIGlmIChzcGVjLT5uX2xwYWRkaW5nKSB7Ci0gICAgICAgIFNUUklOR0xJQl9GSUxMKHBfYnVmLCBmaWxsX2NoYXIsIHNwZWMtPm5fbHBhZGRpbmcpOwotICAgICAgICBwX2J1ZiArPSBzcGVjLT5uX2xwYWRkaW5nOworICAgICAgICBTVFJJTkdMSUJfRklMTChidWYsIGZpbGxfY2hhciwgc3BlYy0+bl9scGFkZGluZyk7CisgICAgICAgIGJ1ZiArPSBzcGVjLT5uX2xwYWRkaW5nOwogICAgIH0KLSAgICBpZiAoc3BlYy0+bl9sc2lnbiA9PSAxKSB7Ci0gICAgICAgICpwX2J1ZisrID0gc3BlYy0+bHNpZ247CisgICAgaWYgKHNwZWMtPm5fc2lnbiA9PSAxKSB7CisgICAgICAgICpidWYrKyA9IHNwZWMtPnNpZ247CiAgICAgfQogICAgIGlmIChzcGVjLT5uX3ByZWZpeCkgewotICAgICAgICBtZW1tb3ZlKHBfYnVmLAorICAgICAgICBtZW1tb3ZlKGJ1ZiwKICAgICAgICAgICAgICAgICBwcmVmaXgsCiAgICAgICAgICAgICAgICAgc3BlYy0+bl9wcmVmaXggKiBzaXplb2YoU1RSSU5HTElCX0NIQVIpKTsKLSAgICAgICAgcF9idWYgKz0gc3BlYy0+bl9wcmVmaXg7CisgICAgICAgIGlmICh0b3VwcGVyKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHQ7CisgICAgICAgICAgICBmb3IgKHQgPSAwOyB0IDwgc3BlYy0+bl9wcmVmaXg7ICsrdCkKKyAgICAgICAgICAgICAgICBidWZbdF0gPSBTVFJJTkdMSUJfVE9VUFBFUihidWZbdF0pOworICAgICAgICB9CisgICAgICAgIGJ1ZiArPSBzcGVjLT5uX3ByZWZpeDsKICAgICB9CiAgICAgaWYgKHNwZWMtPm5fc3BhZGRpbmcpIHsKLSAgICAgICAgU1RSSU5HTElCX0ZJTEwocF9idWYsIGZpbGxfY2hhciwgc3BlYy0+bl9zcGFkZGluZyk7Ci0gICAgICAgIHBfYnVmICs9IHNwZWMtPm5fc3BhZGRpbmc7CisgICAgICAgIFNUUklOR0xJQl9GSUxMKGJ1ZiwgZmlsbF9jaGFyLCBzcGVjLT5uX3NwYWRkaW5nKTsKKyAgICAgICAgYnVmICs9IHNwZWMtPm5fc3BhZGRpbmc7CiAgICAgfQotICAgIHBfZGlnaXRzID0gcF9idWY7Ci0gICAgcF9idWYgKz0gbl9kaWdpdHM7Ci0gICAgaWYgKHNwZWMtPm5fcnNpZ24gPT0gMSkgewotICAgICAgICAqcF9idWYrKyA9IHNwZWMtPnJzaWduOworCisgICAgLyogT25seSBmb3IgdHlwZSAnYycgc3BlY2lhbCBjYXNlLCBpdCBoYXMgbm8gZGlnaXRzLiAqLworICAgIGlmIChzcGVjLT5uX2RpZ2l0cyAhPSAwKSB7CisgICAgICAgIC8qIEZpbGwgdGhlIGRpZ2l0cyB3aXRoIEluc2VydFRob3VzYW5kc0dyb3VwaW5nLiAqLworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgciA9CisjZW5kaWYKKyAgICAgICAgICAgIFNUUklOR0xJQl9HUk9VUElORyhidWYsIHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHMsIGRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjLT5uX2RpZ2l0cywgc3BlYy0+bl9taW5fd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5ncm91cGluZywgbG9jYWxlLT50aG91c2FuZHNfc2VwKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGFzc2VydChyID09IHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHMpOworI2VuZGlmCisgICAgICAgIHAgKz0gc3BlYy0+bl9kaWdpdHM7CiAgICAgfQorICAgIGlmICh0b3VwcGVyKSB7CisgICAgICAgIFB5X3NzaXplX3QgdDsKKyAgICAgICAgZm9yICh0ID0gMDsgdCA8IHNwZWMtPm5fZ3JvdXBlZF9kaWdpdHM7ICsrdCkKKyAgICAgICAgICAgIGJ1Zlt0XSA9IFNUUklOR0xJQl9UT1VQUEVSKGJ1Zlt0XSk7CisgICAgfQorICAgIGJ1ZiArPSBzcGVjLT5uX2dyb3VwZWRfZGlnaXRzOworCisgICAgaWYgKHNwZWMtPm5fZGVjaW1hbCkgeworICAgICAgICBQeV9zc2l6ZV90IHQ7CisgICAgICAgIGZvciAodCA9IDA7IHQgPCBzcGVjLT5uX2RlY2ltYWw7ICsrdCkKKyAgICAgICAgICAgIGJ1Zlt0XSA9IGxvY2FsZS0+ZGVjaW1hbF9wb2ludFt0XTsKKyAgICAgICAgYnVmICs9IHNwZWMtPm5fZGVjaW1hbDsKKyAgICAgICAgcCArPSAxOworICAgIH0KKworICAgIGlmIChzcGVjLT5uX3JlbWFpbmRlcikgeworICAgICAgICBtZW1jcHkoYnVmLCBwLCBzcGVjLT5uX3JlbWFpbmRlciAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOworICAgICAgICBidWYgKz0gc3BlYy0+bl9yZW1haW5kZXI7CisgICAgICAgIHAgKz0gc3BlYy0+bl9yZW1haW5kZXI7CisgICAgfQorCiAgICAgaWYgKHNwZWMtPm5fcnBhZGRpbmcpIHsKLSAgICAgICAgU1RSSU5HTElCX0ZJTEwocF9idWYsIGZpbGxfY2hhciwgc3BlYy0+bl9ycGFkZGluZyk7Ci0gICAgICAgIHBfYnVmICs9IHNwZWMtPm5fcnBhZGRpbmc7CisgICAgICAgIFNUUklOR0xJQl9GSUxMKGJ1ZiwgZmlsbF9jaGFyLCBzcGVjLT5uX3JwYWRkaW5nKTsKKyAgICAgICAgYnVmICs9IHNwZWMtPm5fcnBhZGRpbmc7CiAgICAgfQotICAgIHJldHVybiBwX2RpZ2l0czsKIH0KLSNlbmRpZiAvKiBGT1JNQVRfRkxPQVQgfHwgRk9STUFUX0xPTkcgKi8KKworc3RhdGljIGNoYXIgbm9fZ3JvdXBpbmdbMV0gPSB7Q0hBUl9NQVh9OworCisvKiBGaW5kIHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlcihzPyksIHRob3VzYW5kc19zZXBhcmF0b3Iocz8pLCBhbmQKKyAgIGdyb3VwaW5nIGRlc2NyaXB0aW9uLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IGxvY2FsZSBpZiB0eXBlIGlzCisgICBMVF9DVVJSRU5UX0xPQ0FMRSwgYSBoYXJkLWNvZGVkIGxvY2FsZSBpZiBMVF9ERUZBVUxUX0xPQ0FMRSwgb3IKKyAgIG5vbmUgaWYgTFRfTk9fTE9DQUxFLiAqLworc3RhdGljIHZvaWQKK2dldF9sb2NhbGVfaW5mbyhpbnQgdHlwZSwgTG9jYWxlSW5mbyAqbG9jYWxlX2luZm8pCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBMVF9DVVJSRU5UX0xPQ0FMRTogeworICAgICAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhID0gbG9jYWxlY29udigpOworICAgICAgICBsb2NhbGVfaW5mby0+ZGVjaW1hbF9wb2ludCA9IGxvY2FsZV9kYXRhLT5kZWNpbWFsX3BvaW50OworICAgICAgICBsb2NhbGVfaW5mby0+dGhvdXNhbmRzX3NlcCA9IGxvY2FsZV9kYXRhLT50aG91c2FuZHNfc2VwOworICAgICAgICBsb2NhbGVfaW5mby0+Z3JvdXBpbmcgPSBsb2NhbGVfZGF0YS0+Z3JvdXBpbmc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIExUX0RFRkFVTFRfTE9DQUxFOgorICAgICAgICBsb2NhbGVfaW5mby0+ZGVjaW1hbF9wb2ludCA9ICIuIjsKKyAgICAgICAgbG9jYWxlX2luZm8tPnRob3VzYW5kc19zZXAgPSAiLCI7CisgICAgICAgIGxvY2FsZV9pbmZvLT5ncm91cGluZyA9ICJcMyI7IC8qIEdyb3VwIGV2ZXJ5IDMgY2hhcmFjdGVycy4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1wbGljaXQpIHRyYWlsaW5nIDAgbWVhbnMgcmVwZWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZmluaXRlbHkuICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTFRfTk9fTE9DQUxFOgorICAgICAgICBsb2NhbGVfaW5mby0+ZGVjaW1hbF9wb2ludCA9ICIuIjsKKyAgICAgICAgbG9jYWxlX2luZm8tPnRob3VzYW5kc19zZXAgPSAiIjsKKyAgICAgICAgbG9jYWxlX2luZm8tPmdyb3VwaW5nID0gbm9fZ3JvdXBpbmc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBGT1JNQVRfRkxPQVQgfHwgRk9STUFUX0xPTkcgfHwgRk9STUFUX0NPTVBMRVggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKiBzdHJpbmcgZm9ybWF0dGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MDIsMTAgKzY3MiwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZvcm1hdF9zdHJpbmdfaW50ZXJuYWwoUHlPYmplY3QgKnZhbHVlLCBjb25zdCBJbnRlcm5hbEZvcm1hdFNwZWMgKmZvcm1hdCkKIHsKLSAgICBQeV9zc2l6ZV90IHdpZHRoOyAvKiB0b3RhbCBmaWVsZCB3aWR0aCAqLwogICAgIFB5X3NzaXplX3QgbHBhZDsKLSAgICBTVFJJTkdMSUJfQ0hBUiAqZHN0OwotICAgIFNUUklOR0xJQl9DSEFSICpzcmMgPSBTVFJJTkdMSUJfU1RSKHZhbHVlKTsKKyAgICBQeV9zc2l6ZV90IHJwYWQ7CisgICAgUHlfc3NpemVfdCB0b3RhbDsKKyAgICBTVFJJTkdMSUJfQ0hBUiAqcDsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFNUUklOR0xJQl9MRU4odmFsdWUpOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC00MzgsNTYgKzcwOCwyMCBAQAogICAgICAgICBsZW4gPSBmb3JtYXQtPnByZWNpc2lvbjsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0LT53aWR0aCA+PSAwKSB7Ci0gICAgICAgIHdpZHRoID0gZm9ybWF0LT53aWR0aDsKLQotICAgICAgICAvKiBidXQgdXNlIGF0IGxlYXN0IGxlbiBjaGFyYWN0ZXJzICovCi0gICAgICAgIGlmIChsZW4gPiB3aWR0aCkgewotICAgICAgICAgICAgd2lkdGggPSBsZW47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIG5vdCBzcGVjaWZpZWQsIHVzZSBhbGwgb2YgdGhlIGNoYXJzIGFuZCBubyBtb3JlICovCi0gICAgICAgIHdpZHRoID0gbGVuOwotICAgIH0KKyAgICBjYWxjX3BhZGRpbmcobGVuLCBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmFsaWduLCAmbHBhZCwgJnJwYWQsICZ0b3RhbCk7CiAKICAgICAvKiBhbGxvY2F0ZSB0aGUgcmVzdWx0aW5nIHN0cmluZyAqLwotICAgIHJlc3VsdCA9IFNUUklOR0xJQl9ORVcoTlVMTCwgd2lkdGgpOworICAgIHJlc3VsdCA9IFNUUklOR0xJQl9ORVcoTlVMTCwgdG90YWwpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgLyogbm93IHdyaXRlIGludG8gdGhhdCBzcGFjZSAqLwotICAgIGRzdCA9IFNUUklOR0xJQl9TVFIocmVzdWx0KTsKKyAgICAvKiBXcml0ZSBpbnRvIHRoYXQgc3BhY2UuIEZpcnN0IHRoZSBwYWRkaW5nLiAqLworICAgIHAgPSBmaWxsX3BhZGRpbmcoU1RSSU5HTElCX1NUUihyZXN1bHQpLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhcj09J1wwJz8nICc6Zm9ybWF0LT5maWxsX2NoYXIsCisgICAgICAgICAgICAgICAgICAgICBscGFkLCBycGFkKTsKIAotICAgIC8qIGZpZ3VyZSBvdXQgaG93IG11Y2ggbGVhZGluZyBzcGFjZSB3ZSBuZWVkLCBiYXNlZCBvbiB0aGUKLSAgICAgICBhbGlnbmluZyAqLwotICAgIGlmIChmb3JtYXQtPmFsaWduID09ICc+JykKLSAgICAgICAgbHBhZCA9IHdpZHRoIC0gbGVuOwotICAgIGVsc2UgaWYgKGZvcm1hdC0+YWxpZ24gPT0gJ14nKQotICAgICAgICBscGFkID0gKHdpZHRoIC0gbGVuKSAvIDI7Ci0gICAgZWxzZQotICAgICAgICBscGFkID0gMDsKLQotICAgIC8qIGlmIHJpZ2h0IGFsaWduaW5nLCBpbmNyZW1lbnQgdGhlIGRlc3RpbmF0aW9uIGFsbG93IHNwYWNlIG9uIHRoZQotICAgICAgIGxlZnQgKi8KLSAgICBtZW1jcHkoZHN0ICsgbHBhZCwgc3JjLCBsZW4gKiBzaXplb2YoU1RSSU5HTElCX0NIQVIpKTsKLQotICAgIC8qIGRvIGFueSBwYWRkaW5nICovCi0gICAgaWYgKHdpZHRoID4gbGVuKSB7Ci0gICAgICAgIFNUUklOR0xJQl9DSEFSIGZpbGxfY2hhciA9IGZvcm1hdC0+ZmlsbF9jaGFyOwotICAgICAgICBpZiAoZmlsbF9jaGFyID09ICdcMCcpIHsKLSAgICAgICAgICAgIC8qIHVzZSB0aGUgZGVmYXVsdCwgaWYgbm90IHNwZWNpZmllZCAqLwotICAgICAgICAgICAgZmlsbF9jaGFyID0gJyAnOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcGFkIG9uIGxlZnQgKi8KLSAgICAgICAgaWYgKGxwYWQpCi0gICAgICAgICAgICBTVFJJTkdMSUJfRklMTChkc3QsIGZpbGxfY2hhciwgbHBhZCk7Ci0KLSAgICAgICAgLyogcGFkIG9uIHJpZ2h0ICovCi0gICAgICAgIGlmICh3aWR0aCAtIGxlbiAtIGxwYWQpCi0gICAgICAgICAgICBTVFJJTkdMSUJfRklMTChkc3QgKyBsZW4gKyBscGFkLCBmaWxsX2NoYXIsIHdpZHRoIC0gbGVuIC0gbHBhZCk7Ci0gICAgfQorICAgIC8qIFRoZW4gdGhlIHNvdXJjZSBzdHJpbmcuICovCisgICAgbWVtY3B5KHAsIFNUUklOR0xJQl9TVFIodmFsdWUpLCBsZW4gKiBzaXplb2YoU1RSSU5HTElCX0NIQVIpKTsKIAogZG9uZToKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTEwLDE5ICs3NDQsMjEgQEAKICAgICBQeU9iamVjdCAqdG1wID0gTlVMTDsKICAgICBTVFJJTkdMSUJfQ0hBUiAqcG51bWVyaWNfY2hhcnM7CiAgICAgU1RSSU5HTElCX0NIQVIgbnVtZXJpY19jaGFyOwotICAgIFNUUklOR0xJQl9DSEFSIHNpZ24gPSAnXDAnOwotICAgIFNUUklOR0xJQl9DSEFSICpwOworICAgIFNUUklOR0xJQl9DSEFSIHNpZ25fY2hhciA9ICdcMCc7CiAgICAgUHlfc3NpemVfdCBuX2RpZ2l0czsgICAgICAgLyogY291bnQgb2YgZGlnaXRzIG5lZWQgZnJvbSB0aGUgY29tcHV0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKi8KLSAgICBQeV9zc2l6ZV90IG5fbGVhZGluZ19jaGFyczsKLSAgICBQeV9zc2l6ZV90IG5fZ3JvdXBpbmdfY2hhcnMgPSAwOyAvKiBDb3VudCBvZiBhZGRpdGlvbmFsIGNoYXJzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGUsIHVzZWQgZm9yICduJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmcuICovCisgICAgUHlfc3NpemVfdCBuX3JlbWFpbmRlciA9IDA7IC8qIFVzZWQgb25seSBmb3IgJ2MnIGZvcm1hdHRpbmcsIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VzIG5vbi1kaWdpdHMgKi8KICAgICBQeV9zc2l6ZV90IG5fcHJlZml4ID0gMDsgICAvKiBDb3VudCBvZiBwcmVmaXggY2hhcnMsIChlLmcuLCAnMHgnKSAqLworICAgIFB5X3NzaXplX3Qgbl90b3RhbDsKICAgICBTVFJJTkdMSUJfQ0hBUiAqcHJlZml4ID0gTlVMTDsKICAgICBOdW1iZXJGaWVsZFdpZHRocyBzcGVjOwogICAgIGxvbmcgeDsKIAorICAgIC8qIExvY2FsZSBzZXR0aW5ncywgZWl0aGVyIGZyb20gdGhlIGFjdHVhbCBsb2NhbGUgb3IKKyAgICAgICBmcm9tIGEgaGFyZC1jb2RlIHBzZXVkby1sb2NhbGUgKi8KKyAgICBMb2NhbGVJbmZvIGxvY2FsZTsKKwogICAgIC8qIG5vIHByZWNpc2lvbiBhbGxvd2VkIG9uIGludGVnZXJzICovCiAgICAgaWYgKGZvcm1hdC0+cHJlY2lzaW9uICE9IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtNTMwLDcgKzc2Niw2IEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLQogICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgY2hhcmFjdGVyIGZvcm1hdHRpbmcgKi8KICAgICBpZiAoZm9ybWF0LT50eXBlID09ICdjJykgewogICAgICAgICAvKiBlcnJvciB0byBzcGVjaWZ5IGEgc2lnbiAqLwpAQCAtNTQxLDYgKzc3NiwxNCBAQAogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAKKyAgICAgICAgLyogRXJyb3IgdG8gc3BlY2lmeSBhIGNvbW1hLiAqLworICAgICAgICBpZiAoZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycykgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRob3VzYW5kcyBzZXBhcmF0b3JzIG5vdCBhbGxvd2VkIHdpdGggaW50ZWdlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvcm1hdCBzcGVjaWZpZXIgJ2MnIik7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKwogICAgICAgICAvKiB0YWtlbiBmcm9tIHVuaWNvZGVvYmplY3QuYyBmb3JtYXRjaGFyKCkgKi8KICAgICAgICAgLyogSW50ZWdlciBpbnB1dCB0cnVuY2F0ZWQgdG8gYSBjaGFyYWN0ZXIgKi8KIC8qIFhYWDogd29uJ3Qgd29yayBmb3IgaW50ICovCkBAIC01NjUsNiArODA4LDEzIEBACiAgICAgICAgIG51bWVyaWNfY2hhciA9IChTVFJJTkdMSUJfQ0hBUil4OwogICAgICAgICBwbnVtZXJpY19jaGFycyA9ICZudW1lcmljX2NoYXI7CiAgICAgICAgIG5fZGlnaXRzID0gMTsKKworICAgICAgICAvKiBBcyBhIHNvcnQtb2YgaGFjaywgd2UgdGVsbCBjYWxjX251bWJlcl93aWR0aHMgdGhhdCB3ZSBvbmx5CisgICAgICAgICAgIGhhdmUgInJlbWFpbmRlciIgY2hhcmFjdGVycy4gY2FsY19udW1iZXJfd2lkdGhzIHRoaW5rcworICAgICAgICAgICB0aGVzZSBhcmUgY2hhcmFjdGVycyB0aGF0IGRvbid0IGdldCBmb3JtYXR0ZWQsIG9ubHkgY29waWVkCisgICAgICAgICAgIGludG8gdGhlIG91dHB1dCBzdHJpbmcuIFdlIGRvIHRoaXMgZm9yICdjJyBmb3JtYXR0aW5nLAorICAgICAgICAgICBiZWNhdXNlIHRoZSBjaGFyYWN0ZXJzIGFyZSBsaWtlbHkgdG8gYmUgbm9uLWRpZ2l0cy4gKi8KKyAgICAgICAgbl9yZW1haW5kZXIgPSAxOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaW50IGJhc2U7CkBAIC02MTYsOCArODY2LDggQEAKIAogICAgICAgICAvKiBJcyBhIHNpZ24gY2hhcmFjdGVyIHByZXNlbnQgaW4gdGhlIG91dHB1dD8gIElmIHNvLCByZW1lbWJlciBpdAogICAgICAgICAgICBhbmQgc2tpcCBpdCAqLwotICAgICAgICBzaWduID0gcG51bWVyaWNfY2hhcnNbMF07Ci0gICAgICAgIGlmIChzaWduID09ICctJykgeworICAgICAgICBpZiAocG51bWVyaWNfY2hhcnNbMF0gPT0gJy0nKSB7CisgICAgICAgICAgICBzaWduX2NoYXIgPSBwbnVtZXJpY19jaGFyc1swXTsKICAgICAgICAgICAgICsrcHJlZml4OwogICAgICAgICAgICAgKytsZWFkaW5nX2NoYXJzX3RvX3NraXA7CiAgICAgICAgIH0KQEAgLTYyNyw3MCArODc3LDI2IEBACiAgICAgICAgIHBudW1lcmljX2NoYXJzICs9IGxlYWRpbmdfY2hhcnNfdG9fc2tpcDsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0LT50eXBlID09ICduJykKLSAgICAgICAgICAgIC8qIENvbXB1dGUgaG93IG1hbnkgYWRkaXRpb25hbCBjaGFycyB3ZSBuZWVkIHRvIGFsbG9jYXRlCi0gICAgICAgICAgICAgICB0byBob2xkIHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcuICovCi0gICAgICAgICAgICBTVFJJTkdMSUJfR1JPVVBJTkcoTlVMTCwgbl9kaWdpdHMsIG5fZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZuX2dyb3VwaW5nX2NoYXJzLCAwKTsKKyAgICAvKiBEZXRlcm1pbmUgdGhlIGdyb3VwaW5nLCBzZXBhcmF0b3IsIGFuZCBkZWNpbWFsIHBvaW50LCBpZiBhbnkuICovCisgICAgZ2V0X2xvY2FsZV9pbmZvKGZvcm1hdC0+dHlwZSA9PSAnbicgPyBMVF9DVVJSRU5UX0xPQ0FMRSA6CisgICAgICAgICAgICAgICAgICAgIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzID8KKyAgICAgICAgICAgICAgICAgICAgIExUX0RFRkFVTFRfTE9DQUxFIDoKKyAgICAgICAgICAgICAgICAgICAgIExUX05PX0xPQ0FMRSksCisgICAgICAgICAgICAgICAgICAgICZsb2NhbGUpOwogCi0gICAgLyogQ2FsY3VsYXRlIHRoZSB3aWR0aHMgb2YgdGhlIHZhcmlvdXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGFydHMgKi8KLSAgICBjYWxjX251bWJlcl93aWR0aHMoJnNwZWMsIHNpZ24sIG5fcHJlZml4LCBuX2RpZ2l0cyArIG5fZ3JvdXBpbmdfY2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCk7CisgICAgLyogQ2FsY3VsYXRlIGhvdyBtdWNoIG1lbW9yeSB3ZSdsbCBuZWVkLiAqLworICAgIG5fdG90YWwgPSBjYWxjX251bWJlcl93aWR0aHMoJnNwZWMsIG5fcHJlZml4LCBzaWduX2NoYXIsIHBudW1lcmljX2NoYXJzLAorICAgICAgICAgICAgICAgICAgICAgICBuX2RpZ2l0cywgbl9yZW1haW5kZXIsIDAsICZsb2NhbGUsIGZvcm1hdCk7CiAKLSAgICAvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgdG8gaG9sZCB0aGUgcmVzdWx0ICovCi0gICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCBzcGVjLm5fdG90YWwpOworICAgIC8qIEFsbG9jYXRlIHRoZSBtZW1vcnkuICovCisgICAgcmVzdWx0ID0gU1RSSU5HTElCX05FVyhOVUxMLCBuX3RvdGFsKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgZ290byBkb25lOwotICAgIHAgPSBTVFJJTkdMSUJfU1RSKHJlc3VsdCk7CiAKLSAgICAvKiBYWFggVGhlcmUgaXMgdG9vIG11Y2ggbWFnaWMgaGVyZSByZWdhcmRpbmcgdGhlIGludGVybmFscyBvZgotICAgICAgIHNwZWMgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJlZml4IGFuZCBkaWdpdHMuICBJdCB3b3VsZCBiZQotICAgICAgIGJldHRlciBpZiBjYWxjX251bWJlcl93aWR0aHMgcmV0dXJuZWQgYSBudW1iZXIgb2YgbG9naWNhbAotICAgICAgIG9mZnNldHMgaW50byB0aGUgYnVmZmVyLCBhbmQgdGhvc2Ugd2VyZSB1c2VkLiAgTWF5YmUgaW4gYQotICAgICAgIGZ1dHVyZSBjb2RlIGNsZWFudXAuICovCi0KLSAgICAvKiBGaWxsIGluIHRoZSBkaWdpdCBwYXJ0cyAqLwotICAgIG5fbGVhZGluZ19jaGFycyA9IHNwZWMubl9scGFkZGluZyArIHNwZWMubl9sc2lnbiArCi0gICAgICAgICAgICBzcGVjLm5fcHJlZml4ICsgc3BlYy5uX3NwYWRkaW5nOwotICAgIG1lbW1vdmUocCArIG5fbGVhZGluZ19jaGFycywKLSAgICAgICAgICAgIHBudW1lcmljX2NoYXJzLAotICAgICAgICAgICAgbl9kaWdpdHMgKiBzaXplb2YoU1RSSU5HTElCX0NIQVIpKTsKLQotICAgIC8qIElmIHR5cGUgaXMgJ1gnLCBjb252ZXJ0IHRoZSBmaWxsZWQgaW4gZGlnaXRzIHRvIHVwcGVyY2FzZSAqLwotICAgIGlmIChmb3JtYXQtPnR5cGUgPT0gJ1gnKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgdDsKLSAgICAgICAgZm9yICh0ID0gMDsgdCA8IG5fZGlnaXRzOyArK3QpCi0gICAgICAgICAgICBwW3QgKyBuX2xlYWRpbmdfY2hhcnNdID0gU1RSSU5HTElCX1RPVVBQRVIocFt0ICsgbl9sZWFkaW5nX2NoYXJzXSk7Ci0gICAgfQotCi0gICAgLyogSW5zZXJ0IHRoZSBncm91cGluZywgaWYgYW55LCBhZnRlciB0aGUgdXBwZXJjYXNpbmcgb2YgdGhlIGRpZ2l0cywgc28KLSAgICAgICB3ZSBjYW4gZW5zdXJlIHRoYXQgZ3JvdXBpbmcgY2hhcnMgd29uJ3QgYmUgYWZmZWN0ZWQuICovCi0gICAgaWYgKG5fZ3JvdXBpbmdfY2hhcnMpIHsKLSAgICAgICAgICAgIC8qIFdlIGtub3cgdGhpcyBjYW4ndCBmYWlsLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5Ci0gICAgICAgICAgICAgICByZXNlcnZlZCBlbm91Z2ggc3BhY2UuICovCi0gICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqcHN0YXJ0ID0gcCArIG5fbGVhZGluZ19jaGFyczsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBpbnQgciA9Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBTVFJJTkdMSUJfR1JPVVBJTkcocHN0YXJ0LCBuX2RpZ2l0cywgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjLm5fdG90YWwrbl9ncm91cGluZ19jaGFycy1uX2xlYWRpbmdfY2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKLSAgICAgICAgICAgIGFzc2VydChyKTsKLSAgICB9Ci0KLSAgICAvKiBGaWxsIGluIHRoZSBub24tZGlnaXQgcGFydHMgKHBhZGRpbmcsIHNpZ24sIGV0Yy4pICovCi0gICAgZmlsbF9ub25fZGlnaXRzKHAsICZzcGVjLCBwcmVmaXgsIG5fZGlnaXRzICsgbl9ncm91cGluZ19jaGFycywKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyKTsKLQotICAgIC8qIElmIHR5cGUgaXMgJ1gnLCB1cHBlcmNhc2UgdGhlIHByZWZpeC4gIFRoaXMgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgdGhlCi0gICAgICAgcHJlZml4IGlzIGZpbGxlZCBpbiBieSBmaWxsX25vbl9kaWdpdHMgKi8KLSAgICBpZiAoZm9ybWF0LT50eXBlID09ICdYJykgewotICAgICAgICBQeV9zc2l6ZV90IHQ7Ci0gICAgICAgIGZvciAodCA9IDA7IHQgPCBuX3ByZWZpeDsgKyt0KQotICAgICAgICAgICAgcFt0ICsgc3BlYy5uX2xwYWRkaW5nICsgc3BlYy5uX2xzaWduXSA9Ci0gICAgICAgICAgICAgICAgICAgIFNUUklOR0xJQl9UT1VQUEVSKHBbdCArIHNwZWMubl9scGFkZGluZyArIHNwZWMubl9sc2lnbl0pOwotICAgIH0KLQorICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuICovCisgICAgZmlsbF9udW1iZXIoU1RSSU5HTElCX1NUUihyZXN1bHQpLCAmc3BlYywgcG51bWVyaWNfY2hhcnMsIG5fZGlnaXRzLAorICAgICAgICAgICAgICAgIHByZWZpeCwgZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLAorICAgICAgICAgICAgICAgICZsb2NhbGUsIGZvcm1hdC0+dHlwZSA9PSAnWCcpOwogCiBkb25lOgogICAgIFB5X1hERUNSRUYodG1wKTsKQEAgLTcwNCw2NCArOTEwLDQ2IEBACiAKICNpZmRlZiBGT1JNQVRfRkxPQVQKICNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQotLyogdGFrZW4gZnJvbSB1bmljb2Rlb2JqZWN0LmMgKi8KLXN0YXRpYyBQeV9zc2l6ZV90Ci1zdHJ0b3VuaWNvZGUoUHlfVU5JQ09ERSAqYnVmZmVyLCBjb25zdCBjaGFyICpjaGFyYnVmZmVyKQorc3RhdGljIHZvaWQKK3N0cnRvdW5pY29kZShQeV9VTklDT0RFICpidWZmZXIsIGNvbnN0IGNoYXIgKmNoYXJidWZmZXIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHN0cmxlbihjaGFyYnVmZmVyKTsKLSAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgYnVmZmVyW2ldID0gKFB5X1VOSUNPREUpIGNoYXJidWZmZXJbaV07Ci0KLSAgICByZXR1cm4gbGVuOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpCisgICAgICAgIGJ1ZmZlcltpXSA9IChQeV9VTklDT0RFKWNoYXJidWZmZXJbaV07CiB9CiAjZW5kaWYKIAotLyogc2VlIEZPUk1BVEJVRkxFTiBpbiB1bmljb2Rlb2JqZWN0LmMgKi8KLSNkZWZpbmUgRkxPQVRfRk9STUFUQlVGTEVOIDEyMAotCiAvKiBtdWNoIG9mIHRoaXMgaXMgdGFrZW4gZnJvbSB1bmljb2Rlb2JqZWN0LmMgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBmb3JtYXRfZmxvYXRfaW50ZXJuYWwoUHlPYmplY3QgKnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsRm9ybWF0U3BlYyAqZm9ybWF0KQogewotICAgIC8qIGZtdCA9ICclLicgKyBgcHJlY2AgKyBgdHlwZWAgKyAnJSUnCi0gICAgICAgd29yc3QgY2FzZSBsZW5ndGggPSAyICsgMTAgKGxlbiBvZiBJTlRfTUFYKSArIDEgKyAyID0gMTUgKHVzZSAyMCkqLwotICAgIGNoYXIgZm10WzIwXTsKLQotICAgIC8qIHRha2VuIGZyb20gdW5pY29kZW9iamVjdC5jICovCi0gICAgLyogV29yc3QgY2FzZSBsZW5ndGggY2FsYyB0byBlbnN1cmUgbm8gYnVmZmVyIG92ZXJydW46Ci0KLSAgICAgICAnZycgZm9ybWF0czoKLSAgICAgICAgIGZtdCA9ICUjLjxwcmVjPmcKLSAgICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnByZWMgKyAnLicgKyAnZSsnICsgKGxvbmdlc3QgZXhwCi0gICAgICAgICAgICBmb3IgYW55IGRvdWJsZSByZXAuKQotICAgICAgICAgbGVuID0gMSArIHByZWMgKyAxICsgMiArIDUgPSA5ICsgcHJlYwotCi0gICAgICAgJ2YnIGZvcm1hdHM6Ci0gICAgICAgICBidWYgPSAnLScgKyBbMC05XSp4ICsgJy4nICsgWzAtOV0qcHJlYyAod2l0aCB4IDwgNTApCi0gICAgICAgICBsZW4gPSAxICsgNTAgKyAxICsgcHJlYyA9IDUyICsgcHJlYwotCi0gICAgICAgSWYgcHJlYz0wIHRoZSBlZmZlY3RpdmUgcHJlY2lzaW9uIGlzIDEgKHRoZSBsZWFkaW5nIGRpZ2l0IGlzCi0gICAgICAgYWx3YXlzIGdpdmVuKSwgdGhlcmVmb3JlIGluY3JlYXNlIHRoZSBsZW5ndGggYnkgb25lLgotCi0gICAgKi8KLSAgICBjaGFyIGNoYXJidWZbRkxPQVRfRk9STUFUQlVGTEVOXTsKKyAgICBjaGFyICpidWYgPSBOVUxMOyAgICAgICAvKiBidWZmZXIgcmV0dXJuZWQgZnJvbSBQeU9TX2RvdWJsZV90b19zdHJpbmcgKi8KICAgICBQeV9zc2l6ZV90IG5fZGlnaXRzOwotICAgIGRvdWJsZSB4OworICAgIFB5X3NzaXplX3Qgbl9yZW1haW5kZXI7CisgICAgUHlfc3NpemVfdCBuX3RvdGFsOworICAgIGludCBoYXNfZGVjaW1hbDsKKyAgICBkb3VibGUgdmFsOwogICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uID0gZm9ybWF0LT5wcmVjaXNpb247Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgU1RSSU5HTElCX0NIQVIgc2lnbjsKLSAgICBjaGFyKiB0cmFpbGluZyA9ICIiOworICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIFNUUklOR0xJQl9DSEFSIHR5cGUgPSBmb3JtYXQtPnR5cGU7CisgICAgaW50IGFkZF9wY3QgPSAwOwogICAgIFNUUklOR0xJQl9DSEFSICpwOwogICAgIE51bWJlckZpZWxkV2lkdGhzIHNwZWM7Ci0gICAgU1RSSU5HTElCX0NIQVIgdHlwZSA9IGZvcm1hdC0+dHlwZTsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFNUUklOR0xJQl9DSEFSIHNpZ25fY2hhciA9ICdcMCc7CisgICAgaW50IGZsb2F0X3R5cGU7IC8qIFVzZWQgdG8gc2VlIGlmIHdlIGhhdmUgYSBuYW4sIGluZiwgb3IgcmVndWxhciBmbG9hdC4gKi8KIAogI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCi0gICAgUHlfVU5JQ09ERSB1bmljb2RlYnVmW0ZMT0FUX0ZPUk1BVEJVRkxFTl07CisgICAgUHlfVU5JQ09ERSAqdW5pY29kZV90bXAgPSBOVUxMOwogI2VuZGlmCiAKLSAgICAvKiBhbHRlcm5hdGUgaXMgbm90IGFsbG93ZWQgb24gZmxvYXRzLiAqLworICAgIC8qIExvY2FsZSBzZXR0aW5ncywgZWl0aGVyIGZyb20gdGhlIGFjdHVhbCBsb2NhbGUgb3IKKyAgICAgICBmcm9tIGEgaGFyZC1jb2RlIHBzZXVkby1sb2NhbGUgKi8KKyAgICBMb2NhbGVJbmZvIGxvY2FsZTsKKworICAgIC8qIEFsdGVybmF0ZSBpcyBub3QgYWxsb3dlZCBvbiBmbG9hdHMuICovCiAgICAgaWYgKGZvcm1hdC0+YWx0ZXJuYXRlKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkFsdGVybmF0ZSBmb3JtICgjKSBub3QgYWxsb3dlZCBpbiBmbG9hdCBmb3JtYXQgIgpAQCAtNzY5LDg5ICs5NTcsMzMzIEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICAvKiBmaXJzdCwgZG8gdGhlIGNvbnZlcnNpb24gYXMgOC1iaXQgY2hhcnMsIHVzaW5nIHRoZSBwbGF0Zm9ybSdzCi0gICAgICAgc25wcmludGYuICB0aGVuLCBpZiBuZWVkZWQsIGNvbnZlcnQgdG8gdW5pY29kZS4gKi8KKyAgICBpZiAodHlwZSA9PSAnXDAnKSB7CisgICAgICAgIC8qIE9taXR0ZWQgdHlwZSBzcGVjaWZpZXIuIFRoaXMgaXMgbGlrZSAnZycgYnV0IHdpdGggYXQgbGVhc3Qgb25lCisgICAgICAgICAgIGRpZ2l0IGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LCBhbmQgZGlmZmVyZW50IGRlZmF1bHQgcHJlY2lzaW9uLiovCisgICAgICAgIHR5cGUgPSAnZyc7CisgICAgICAgIGRlZmF1bHRfcHJlY2lzaW9uID0gUHlGbG9hdF9TVFJfUFJFQ0lTSU9OOworICAgICAgICBmbGFncyB8PSBQeV9EVFNGX0FERF9ET1RfMDsKKyAgICB9CiAKLSAgICAvKiAnRicgaXMgdGhlIHNhbWUgYXMgJ2YnLCBwZXIgdGhlIFBFUCAqLwotICAgIGlmICh0eXBlID09ICdGJykKLSAgICAgICAgdHlwZSA9ICdmJzsKKyAgICBpZiAodHlwZSA9PSAnbicpCisgICAgICAgIC8qICduJyBpcyB0aGUgc2FtZSBhcyAnZycsIGV4Y2VwdCBmb3IgdGhlIGxvY2FsZSB1c2VkIHRvCisgICAgICAgICAgIGZvcm1hdCB0aGUgcmVzdWx0LiBXZSB0YWtlIGNhcmUgb2YgdGhhdCBsYXRlci4gKi8KKyAgICAgICAgdHlwZSA9ICdnJzsKIAotICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHZhbHVlKTsKLQotICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICB2YWwgPSBQeUZsb2F0X0FzRG91YmxlKHZhbHVlKTsKKyAgICBpZiAodmFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBkb25lOwogCiAgICAgaWYgKHR5cGUgPT0gJyUnKSB7CiAgICAgICAgIHR5cGUgPSAnZic7Ci0gICAgICAgIHggKj0gMTAwOwotICAgICAgICB0cmFpbGluZyA9ICIlIjsKKyAgICAgICAgdmFsICo9IDEwMDsKKyAgICAgICAgYWRkX3BjdCA9IDE7CiAgICAgfQogCiAgICAgaWYgKHByZWNpc2lvbiA8IDApCi0gICAgICAgIHByZWNpc2lvbiA9IDY7Ci0gICAgaWYgKHR5cGUgPT0gJ2YnICYmIGZhYnMoeCkgPj0gMWU1MCkKLSAgICAgICAgdHlwZSA9ICdnJzsKKyAgICAgICAgcHJlY2lzaW9uID0gZGVmYXVsdF9wcmVjaXNpb247CiAKLSAgICAvKiBjYXN0ICJ0eXBlIiwgYmVjYXVzZSBpZiB3ZSdyZSBpbiB1bmljb2RlIHdlIG5lZWQgdG8gcGFzcyBhCi0gICAgICAgOC1iaXQgY2hhci4gIHRoaXMgaXMgc2FmZSwgYmVjYXVzZSB3ZSd2ZSByZXN0cmljdGVkIHdoYXQgInR5cGUiCi0gICAgICAgY2FuIGJlICovCi0gICAgUHlPU19zbnByaW50ZihmbXQsIHNpemVvZihmbXQpLCAiJSUuJSIgUFlfRk9STUFUX1NJWkVfVCAiZCVjIiwgcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgKGNoYXIpdHlwZSk7CisgICAgLyogQ2FzdCAidHlwZSIsIGJlY2F1c2UgaWYgd2UncmUgaW4gdW5pY29kZSB3ZSBuZWVkIHRvIHBhc3MgYQorICAgICAgIDgtYml0IGNoYXIuIFRoaXMgaXMgc2FmZSwgYmVjYXVzZSB3ZSd2ZSByZXN0cmljdGVkIHdoYXQgInR5cGUiCisgICAgICAgY2FuIGJlLiAqLworICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2YWwsIChjaGFyKXR5cGUsIHByZWNpc2lvbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbG9hdF90eXBlKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBuX2RpZ2l0cyA9IHN0cmxlbihidWYpOwogCi0gICAgLyogZG8gdGhlIGFjdHVhbCBmb3JtYXR0aW5nICovCi0gICAgUHlPU19hc2NpaV9mb3JtYXRkKGNoYXJidWYsIHNpemVvZihjaGFyYnVmKSwgZm10LCB4KTsKKyAgICBpZiAoYWRkX3BjdCkgeworICAgICAgICAvKiBXZSBrbm93IHRoYXQgYnVmIGhhcyBhIHRyYWlsaW5nIHplcm8gKHNpbmNlIHdlIGp1c3QgY2FsbGVkCisgICAgICAgICAgIHN0cmxlbigpIG9uIGl0KSwgYW5kIHdlIGRvbid0IHVzZSB0aGF0IGZhY3QgYW55IG1vcmUuIFNvIHdlCisgICAgICAgICAgIGNhbiBqdXN0IHdyaXRlIG92ZXIgdGhlIHRyYWlsaW5nIHplcm8uICovCisgICAgICAgIGJ1ZltuX2RpZ2l0c10gPSAnJSc7CisgICAgICAgIG5fZGlnaXRzICs9IDE7CisgICAgfQogCi0gICAgLyogYWRkaW5nIHRyYWlsaW5nIHRvIGZtdCB3aXRoIFB5T1Nfc25wcmludGYgZG9lc24ndCB3b3JrLCBub3QKLSAgICAgICBzdXJlIHdoeS4gIHdlJ2xsIGp1c3QgY29uY2F0ZW50YXRlIGl0IGhlcmUsIG5vIGhhcm0gZG9uZS4gIHdlCi0gICAgICAga25vdyB3ZSBjYW4ndCBoYXZlIGEgYnVmZmVyIG92ZXJmbG93IGZyb20gdGhlIGZtdCBzaXplCi0gICAgICAgYW5hbHlzaXMgKi8KLSAgICBzdHJjYXQoY2hhcmJ1ZiwgdHJhaWxpbmcpOwotCi0gICAgLyogcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSBjb2RlIGZvciBzbnByaW50ZiBmb3IgYm90aCB1bmljb2RlCi0gICAgICAgYW5kIDggYml0IHN0cmluZ3MsIHdlIGp1c3QgdXNlIHRoZSA4IGJpdCB2ZXJzaW9uIGFuZCB0aGVuCi0gICAgICAgY29udmVydCB0byB1bmljb2RlIGluIGEgc2VwYXJhdGUgY29kZSBwYXRoLiAgdGhhdCdzIHByb2JhYmx5Ci0gICAgICAgdGhlIGxlc3NlciBvZiAyIGV2aWxzLiAqLworICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCisgICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLwogI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCi0gICAgbl9kaWdpdHMgPSBzdHJ0b3VuaWNvZGUodW5pY29kZWJ1ZiwgY2hhcmJ1Zik7Ci0gICAgcCA9IHVuaWNvZGVidWY7CisgICAgdW5pY29kZV90bXAgPSAoUHlfVU5JQ09ERSopUHlNZW1fTWFsbG9jKChuX2RpZ2l0cykqc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICBpZiAodW5pY29kZV90bXAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHN0cnRvdW5pY29kZSh1bmljb2RlX3RtcCwgYnVmLCBuX2RpZ2l0cyk7CisgICAgcCA9IHVuaWNvZGVfdG1wOwogI2Vsc2UKLSAgICAvKiBjb21wdXRlIHRoZSBsZW5ndGguICBJIGJlbGlldmUgdGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlIHJldHVybgotICAgICAgIHZhbHVlIGZyb20gc25wcmludGYgYWJvdmUgaXMgdW5yZWxpYWJsZSAqLwotICAgIG5fZGlnaXRzID0gc3RybGVuKGNoYXJidWYpOwotICAgIHAgPSBjaGFyYnVmOworICAgIHAgPSBidWY7CiAjZW5kaWYKIAotICAgIC8qIGlzIGEgc2lnbiBjaGFyYWN0ZXIgcHJlc2VudCBpbiB0aGUgb3V0cHV0PyAgaWYgc28sIHJlbWVtYmVyIGl0CisgICAgLyogSXMgYSBzaWduIGNoYXJhY3RlciBwcmVzZW50IGluIHRoZSBvdXRwdXQ/ICBJZiBzbywgcmVtZW1iZXIgaXQKICAgICAgICBhbmQgc2tpcCBpdCAqLwotICAgIHNpZ24gPSBwWzBdOwotICAgIGlmIChzaWduID09ICctJykgeworICAgIGlmICgqcCA9PSAnLScpIHsKKyAgICAgICAgc2lnbl9jaGFyID0gKnA7CiAgICAgICAgICsrcDsKICAgICAgICAgLS1uX2RpZ2l0czsKICAgICB9CiAKLSAgICBjYWxjX251bWJlcl93aWR0aHMoJnNwZWMsIHNpZ24sIDAsIG5fZGlnaXRzLCBmb3JtYXQpOworICAgIC8qIERldGVybWluZSBpZiB3ZSBoYXZlIGFueSAicmVtYWluZGVyIiAoYWZ0ZXIgdGhlIGRpZ2l0cywgbWlnaHQgaW5jbHVkZQorICAgICAgIGRlY2ltYWwgb3IgZXhwb25lbnQgb3IgYm90aCAob3IgbmVpdGhlcikpICovCisgICAgcGFyc2VfbnVtYmVyKHAsIG5fZGlnaXRzLCAmbl9yZW1haW5kZXIsICZoYXNfZGVjaW1hbCk7CiAKLSAgICAvKiBhbGxvY2F0ZSBhIHN0cmluZyB3aXRoIGVub3VnaCBzcGFjZSAqLwotICAgIHJlc3VsdCA9IFNUUklOR0xJQl9ORVcoTlVMTCwgc3BlYy5uX3RvdGFsKTsKKyAgICAvKiBEZXRlcm1pbmUgdGhlIGdyb3VwaW5nLCBzZXBhcmF0b3IsIGFuZCBkZWNpbWFsIHBvaW50LCBpZiBhbnkuICovCisgICAgZ2V0X2xvY2FsZV9pbmZvKGZvcm1hdC0+dHlwZSA9PSAnbicgPyBMVF9DVVJSRU5UX0xPQ0FMRSA6CisgICAgICAgICAgICAgICAgICAgIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzID8KKyAgICAgICAgICAgICAgICAgICAgIExUX0RFRkFVTFRfTE9DQUxFIDoKKyAgICAgICAgICAgICAgICAgICAgIExUX05PX0xPQ0FMRSksCisgICAgICAgICAgICAgICAgICAgICZsb2NhbGUpOworCisgICAgLyogQ2FsY3VsYXRlIGhvdyBtdWNoIG1lbW9yeSB3ZSdsbCBuZWVkLiAqLworICAgIG5fdG90YWwgPSBjYWxjX251bWJlcl93aWR0aHMoJnNwZWMsIDAsIHNpZ25fY2hhciwgcCwgbl9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3JlbWFpbmRlciwgaGFzX2RlY2ltYWwsICZsb2NhbGUsIGZvcm1hdCk7CisKKyAgICAvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5LiAqLworICAgIHJlc3VsdCA9IFNUUklOR0xJQl9ORVcoTlVMTCwgbl90b3RhbCk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICAvKiBGaWxsIGluIHRoZSBub24tZGlnaXQgcGFydHMgKHBhZGRpbmcsIHNpZ24sIGV0Yy4pICovCi0gICAgZmlsbF9ub25fZGlnaXRzKFNUUklOR0xJQl9TVFIocmVzdWx0KSwgJnNwZWMsIE5VTEwsIG5fZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnID8gJyAnIDogZm9ybWF0LT5maWxsX2NoYXIpOwotCi0gICAgLyogZmlsbCBpbiB0aGUgZGlnaXQgcGFydHMgKi8KLSAgICBtZW1tb3ZlKFNUUklOR0xJQl9TVFIocmVzdWx0KSArCi0gICAgICAgICAgICAgICAoc3BlYy5uX2xwYWRkaW5nICsgc3BlYy5uX2xzaWduICsgc3BlYy5uX3NwYWRkaW5nKSwKLSAgICAgICAgICAgIHAsCi0gICAgICAgICAgICBuX2RpZ2l0cyAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOworICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuICovCisgICAgZmlsbF9udW1iZXIoU1RSSU5HTElCX1NUUihyZXN1bHQpLCAmc3BlYywgcCwgbl9kaWdpdHMsIE5VTEwsCisgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLCAmbG9jYWxlLAorICAgICAgICAgICAgICAgIDApOwogCiBkb25lOgorICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgIFB5TWVtX0ZyZWUodW5pY29kZV90bXApOworI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZiAvKiBGT1JNQVRfRkxPQVQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKiBjb21wbGV4IGZvcm1hdHRpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgRk9STUFUX0NPTVBMRVgKKworc3RhdGljIFB5T2JqZWN0ICoKK2Zvcm1hdF9jb21wbGV4X2ludGVybmFsKFB5T2JqZWN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsRm9ybWF0U3BlYyAqZm9ybWF0KQoreworICAgIGRvdWJsZSByZTsKKyAgICBkb3VibGUgaW07CisgICAgY2hhciAqcmVfYnVmID0gTlVMTDsgICAgICAgLyogYnVmZmVyIHJldHVybmVkIGZyb20gUHlPU19kb3VibGVfdG9fc3RyaW5nICovCisgICAgY2hhciAqaW1fYnVmID0gTlVMTDsgICAgICAgLyogYnVmZmVyIHJldHVybmVkIGZyb20gUHlPU19kb3VibGVfdG9fc3RyaW5nICovCisKKyAgICBJbnRlcm5hbEZvcm1hdFNwZWMgdG1wX2Zvcm1hdCA9ICpmb3JtYXQ7CisgICAgUHlfc3NpemVfdCBuX3JlX2RpZ2l0czsKKyAgICBQeV9zc2l6ZV90IG5faW1fZGlnaXRzOworICAgIFB5X3NzaXplX3Qgbl9yZV9yZW1haW5kZXI7CisgICAgUHlfc3NpemVfdCBuX2ltX3JlbWFpbmRlcjsKKyAgICBQeV9zc2l6ZV90IG5fcmVfdG90YWw7CisgICAgUHlfc3NpemVfdCBuX2ltX3RvdGFsOworICAgIGludCByZV9oYXNfZGVjaW1hbDsKKyAgICBpbnQgaW1faGFzX2RlY2ltYWw7CisgICAgUHlfc3NpemVfdCBwcmVjaXNpb24gPSBmb3JtYXQtPnByZWNpc2lvbjsKKyAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBTVFJJTkdMSUJfQ0hBUiB0eXBlID0gZm9ybWF0LT50eXBlOworICAgIFNUUklOR0xJQl9DSEFSICpwX3JlOworICAgIFNUUklOR0xJQl9DSEFSICpwX2ltOworICAgIE51bWJlckZpZWxkV2lkdGhzIHJlX3NwZWM7CisgICAgTnVtYmVyRmllbGRXaWR0aHMgaW1fc3BlYzsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFNUUklOR0xJQl9DSEFSICpwOworICAgIFNUUklOR0xJQl9DSEFSIHJlX3NpZ25fY2hhciA9ICdcMCc7CisgICAgU1RSSU5HTElCX0NIQVIgaW1fc2lnbl9jaGFyID0gJ1wwJzsKKyAgICBpbnQgcmVfZmxvYXRfdHlwZTsgLyogVXNlZCB0byBzZWUgaWYgd2UgaGF2ZSBhIG5hbiwgaW5mLCBvciByZWd1bGFyIGZsb2F0LiAqLworICAgIGludCBpbV9mbG9hdF90eXBlOworICAgIGludCBhZGRfcGFyZW5zID0gMDsKKyAgICBpbnQgc2tpcF9yZSA9IDA7CisgICAgUHlfc3NpemVfdCBscGFkOworICAgIFB5X3NzaXplX3QgcnBhZDsKKyAgICBQeV9zc2l6ZV90IHRvdGFsOworCisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKKyAgICBQeV9VTklDT0RFICpyZV91bmljb2RlX3RtcCA9IE5VTEw7CisgICAgUHlfVU5JQ09ERSAqaW1fdW5pY29kZV90bXAgPSBOVUxMOworI2VuZGlmCisKKyAgICAvKiBMb2NhbGUgc2V0dGluZ3MsIGVpdGhlciBmcm9tIHRoZSBhY3R1YWwgbG9jYWxlIG9yCisgICAgICAgZnJvbSBhIGhhcmQtY29kZSBwc2V1ZG8tbG9jYWxlICovCisgICAgTG9jYWxlSW5mbyBsb2NhbGU7CisKKyAgICAvKiBBbHRlcm5hdGUgaXMgbm90IGFsbG93ZWQgb24gY29tcGxleC4gKi8KKyAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQWx0ZXJuYXRlIGZvcm0gKCMpIG5vdCBhbGxvd2VkIGluIGNvbXBsZXggZm9ybWF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIC8qIE5laXRoZXIgaXMgemVybyBwYWRpbmcuICovCisgICAgaWYgKGZvcm1hdC0+ZmlsbF9jaGFyID09ICcwJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJaZXJvIHBhZGRpbmcgaXMgbm90IGFsbG93ZWQgaW4gY29tcGxleCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllciIpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgLyogTmVpdGhlciBpcyAnPScgYWxpZ25tZW50IC4gKi8KKyAgICBpZiAoZm9ybWF0LT5hbGlnbiA9PSAnPScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiJz0nIGFsaWdubWVudCBmbGFnIGlzIG5vdCBhbGxvd2VkIGluIGNvbXBsZXggZm9ybWF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIHJlID0gUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2YWx1ZSk7CisgICAgaWYgKHJlID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBkb25lOworICAgIGltID0gUHlDb21wbGV4X0ltYWdBc0RvdWJsZSh2YWx1ZSk7CisgICAgaWYgKGltID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgaWYgKHR5cGUgPT0gJ1wwJykgeworICAgICAgICAvKiBPbWl0dGVkIHR5cGUgc3BlY2lmaWVyLiBTaG91bGQgYmUgbGlrZSBzdHIoc2VsZikuICovCisgICAgICAgIHR5cGUgPSAnZyc7CisgICAgICAgIGRlZmF1bHRfcHJlY2lzaW9uID0gUHlGbG9hdF9TVFJfUFJFQ0lTSU9OOworICAgICAgICBpZiAocmUgPT0gMC4wICYmIGNvcHlzaWduKDEuMCwgcmUpID09IDEuMCkKKyAgICAgICAgICAgIHNraXBfcmUgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRfcGFyZW5zID0gMTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAnbicpCisgICAgICAgIC8qICduJyBpcyB0aGUgc2FtZSBhcyAnZycsIGV4Y2VwdCBmb3IgdGhlIGxvY2FsZSB1c2VkIHRvCisgICAgICAgICAgIGZvcm1hdCB0aGUgcmVzdWx0LiBXZSB0YWtlIGNhcmUgb2YgdGhhdCBsYXRlci4gKi8KKyAgICAgICAgdHlwZSA9ICdnJzsKKworICAgIGlmIChwcmVjaXNpb24gPCAwKQorICAgICAgICBwcmVjaXNpb24gPSBkZWZhdWx0X3ByZWNpc2lvbjsKKworICAgIC8qIENhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGEKKyAgICAgICA4LWJpdCBjaGFyLiBUaGlzIGlzIHNhZmUsIGJlY2F1c2Ugd2UndmUgcmVzdHJpY3RlZCB3aGF0ICJ0eXBlIgorICAgICAgIGNhbiBiZS4gKi8KKyAgICByZV9idWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcocmUsIChjaGFyKXR5cGUsIHByZWNpc2lvbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZV9mbG9hdF90eXBlKTsKKyAgICBpZiAocmVfYnVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBpbV9idWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoaW0sIChjaGFyKXR5cGUsIHByZWNpc2lvbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbV9mbG9hdF90eXBlKTsKKyAgICBpZiAoaW1fYnVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIG5fcmVfZGlnaXRzID0gc3RybGVuKHJlX2J1Zik7CisgICAgbl9pbV9kaWdpdHMgPSBzdHJsZW4oaW1fYnVmKTsKKworICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCisgICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgcmVfdW5pY29kZV90bXAgPSAoUHlfVU5JQ09ERSopUHlNZW1fTWFsbG9jKChuX3JlX2RpZ2l0cykqc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICBpZiAocmVfdW5pY29kZV90bXAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHN0cnRvdW5pY29kZShyZV91bmljb2RlX3RtcCwgcmVfYnVmLCBuX3JlX2RpZ2l0cyk7CisgICAgcF9yZSA9IHJlX3VuaWNvZGVfdG1wOworCisgICAgaW1fdW5pY29kZV90bXAgPSAoUHlfVU5JQ09ERSopUHlNZW1fTWFsbG9jKChuX2ltX2RpZ2l0cykqc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICBpZiAoaW1fdW5pY29kZV90bXAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIHN0cnRvdW5pY29kZShpbV91bmljb2RlX3RtcCwgaW1fYnVmLCBuX2ltX2RpZ2l0cyk7CisgICAgcF9pbSA9IGltX3VuaWNvZGVfdG1wOworI2Vsc2UKKyAgICBwX3JlID0gcmVfYnVmOworICAgIHBfaW0gPSBpbV9idWY7CisjZW5kaWYKKworICAgIC8qIElzIGEgc2lnbiBjaGFyYWN0ZXIgcHJlc2VudCBpbiB0aGUgb3V0cHV0PyAgSWYgc28sIHJlbWVtYmVyIGl0CisgICAgICAgYW5kIHNraXAgaXQgKi8KKyAgICBpZiAoKnBfcmUgPT0gJy0nKSB7CisgICAgICAgIHJlX3NpZ25fY2hhciA9ICpwX3JlOworICAgICAgICArK3BfcmU7CisgICAgICAgIC0tbl9yZV9kaWdpdHM7CisgICAgfQorICAgIGlmICgqcF9pbSA9PSAnLScpIHsKKyAgICAgICAgaW1fc2lnbl9jaGFyID0gKnBfaW07CisgICAgICAgICsrcF9pbTsKKyAgICAgICAgLS1uX2ltX2RpZ2l0czsKKyAgICB9CisKKyAgICAvKiBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhbnkgInJlbWFpbmRlciIgKGFmdGVyIHRoZSBkaWdpdHMsIG1pZ2h0IGluY2x1ZGUKKyAgICAgICBkZWNpbWFsIG9yIGV4cG9uZW50IG9yIGJvdGggKG9yIG5laXRoZXIpKSAqLworICAgIHBhcnNlX251bWJlcihwX3JlLCBuX3JlX2RpZ2l0cywgJm5fcmVfcmVtYWluZGVyLCAmcmVfaGFzX2RlY2ltYWwpOworICAgIHBhcnNlX251bWJlcihwX2ltLCBuX2ltX2RpZ2l0cywgJm5faW1fcmVtYWluZGVyLCAmaW1faGFzX2RlY2ltYWwpOworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBncm91cGluZywgc2VwYXJhdG9yLCBhbmQgZGVjaW1hbCBwb2ludCwgaWYgYW55LiAqLworICAgIGdldF9sb2NhbGVfaW5mbyhmb3JtYXQtPnR5cGUgPT0gJ24nID8gTFRfQ1VSUkVOVF9MT0NBTEUgOgorICAgICAgICAgICAgICAgICAgICAoZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycyA/CisgICAgICAgICAgICAgICAgICAgICBMVF9ERUZBVUxUX0xPQ0FMRSA6CisgICAgICAgICAgICAgICAgICAgICBMVF9OT19MT0NBTEUpLAorICAgICAgICAgICAgICAgICAgICAmbG9jYWxlKTsKKworICAgIC8qIFR1cm4gb2ZmIGFueSBwYWRkaW5nLiBXZSdsbCBkbyBpdCBsYXRlciBhZnRlciB3ZSd2ZSBjb21wb3NlZAorICAgICAgIHRoZSBudW1iZXJzIHdpdGhvdXQgcGFkZGluZy4gKi8KKyAgICB0bXBfZm9ybWF0LmZpbGxfY2hhciA9ICdcMCc7CisgICAgdG1wX2Zvcm1hdC5hbGlnbiA9ICc8JzsKKyAgICB0bXBfZm9ybWF0LndpZHRoID0gLTE7CisKKyAgICAvKiBDYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHdlJ2xsIG5lZWQuICovCisgICAgbl9yZV90b3RhbCA9IGNhbGNfbnVtYmVyX3dpZHRocygmcmVfc3BlYywgMCwgcmVfc2lnbl9jaGFyLCBwX3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9yZV9kaWdpdHMsIG5fcmVfcmVtYWluZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVfaGFzX2RlY2ltYWwsICZsb2NhbGUsICZ0bXBfZm9ybWF0KTsKKworICAgIC8qIFNhbWUgZm9ybWF0dGluZywgYnV0IGFsd2F5cyBpbmNsdWRlIGEgc2lnbiwgdW5sZXNzIHRoZSByZWFsIHBhcnQgaXMKKyAgICAgKiBnb2luZyB0byBiZSBvbWl0dGVkLCBpbiB3aGljaCBjYXNlIHdlIHVzZSB3aGF0ZXZlciBzaWduIGNvbnZlbnRpb24gd2FzCisgICAgICogcmVxdWVzdGVkIGJ5IHRoZSBvcmlnaW5hbCBmb3JtYXQuICovCisgICAgaWYgKCFza2lwX3JlKQorICAgICAgICB0bXBfZm9ybWF0LnNpZ24gPSAnKyc7CisgICAgbl9pbV90b3RhbCA9IGNhbGNfbnVtYmVyX3dpZHRocygmaW1fc3BlYywgMCwgaW1fc2lnbl9jaGFyLCBwX2ltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9pbV9kaWdpdHMsIG5faW1fcmVtYWluZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1faGFzX2RlY2ltYWwsICZsb2NhbGUsICZ0bXBfZm9ybWF0KTsKKworICAgIGlmIChza2lwX3JlKQorICAgICAgICBuX3JlX3RvdGFsID0gMDsKKworICAgIC8qIEFkZCAxIGZvciB0aGUgJ2onLCBhbmQgb3B0aW9uYWxseSAyIGZvciBwYXJlbnMuICovCisgICAgY2FsY19wYWRkaW5nKG5fcmVfdG90YWwgKyBuX2ltX3RvdGFsICsgMSArIGFkZF9wYXJlbnMgKiAyLAorICAgICAgICAgICAgICAgICBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmFsaWduLCAmbHBhZCwgJnJwYWQsICZ0b3RhbCk7CisKKyAgICByZXN1bHQgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHRvdGFsKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuIEZpcnN0LCB0aGUgcGFkZGluZy4gKi8KKyAgICBwID0gZmlsbF9wYWRkaW5nKFNUUklOR0xJQl9TVFIocmVzdWx0KSwKKyAgICAgICAgICAgICAgICAgICAgIG5fcmVfdG90YWwgKyBuX2ltX3RvdGFsICsgMSArIGFkZF9wYXJlbnMgKiAyLAorICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXI9PSdcMCcgPyAnICcgOiBmb3JtYXQtPmZpbGxfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgIGxwYWQsIHJwYWQpOworCisgICAgaWYgKGFkZF9wYXJlbnMpCisgICAgICAgICpwKysgPSAnKCc7CisKKyAgICBpZiAoIXNraXBfcmUpIHsKKyAgICAgICAgZmlsbF9udW1iZXIocCwgJnJlX3NwZWMsIHBfcmUsIG5fcmVfZGlnaXRzLCBOVUxMLCAwLCAmbG9jYWxlLCAwKTsKKyAgICAgICAgcCArPSBuX3JlX3RvdGFsOworICAgIH0KKyAgICBmaWxsX251bWJlcihwLCAmaW1fc3BlYywgcF9pbSwgbl9pbV9kaWdpdHMsIE5VTEwsIDAsICZsb2NhbGUsIDApOworICAgIHAgKz0gbl9pbV90b3RhbDsKKyAgICAqcCsrID0gJ2onOworCisgICAgaWYgKGFkZF9wYXJlbnMpCisgICAgICAgICpwKysgPSAnKSc7CisKK2RvbmU6CisgICAgUHlNZW1fRnJlZShyZV9idWYpOworICAgIFB5TWVtX0ZyZWUoaW1fYnVmKTsKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgIFB5TWVtX0ZyZWUocmVfdW5pY29kZV90bXApOworICAgIFB5TWVtX0ZyZWUoaW1fdW5pY29kZV90bXApOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiBGT1JNQVRfQ09NUExFWCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqIGJ1aWx0IGluIGZvcm1hdHRlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBQeU9iamVjdCAqCkBAIC04NzEsNyArMTMwMyw3IEBACiAKICAgICAvKiBwYXJzZSB0aGUgZm9ybWF0X3NwZWMgKi8KICAgICBpZiAoIXBhcnNlX2ludGVybmFsX3JlbmRlcl9mb3JtYXRfc3BlYyhmb3JtYXRfc3BlYywgZm9ybWF0X3NwZWNfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsICdzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ3MnLCAnPCcpKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAvKiB0eXBlIGNvbnZlcnNpb24/ICovCkBAIC05MTEsNyArMTM0Myw3IEBACiAgICAgLyogcGFyc2UgdGhlIGZvcm1hdF9zcGVjICovCiAgICAgaWYgKCFwYXJzZV9pbnRlcm5hbF9yZW5kZXJfZm9ybWF0X3NwZWMoZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsICdkJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJ2QnLCAnPicpKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAvKiB0eXBlIGNvbnZlcnNpb24/ICovCkBAIC0xMDIyLDE2ICsxNDU0LDEyIEBACiAgICAgLyogcGFyc2UgdGhlIGZvcm1hdF9zcGVjICovCiAgICAgaWYgKCFwYXJzZV9pbnRlcm5hbF9yZW5kZXJfZm9ybWF0X3NwZWMoZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsICdcMCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsICdcMCcsICc+JykpCiAgICAgICAgIGdvdG8gZG9uZTsKIAogICAgIC8qIHR5cGUgY29udmVyc2lvbj8gKi8KICAgICBzd2l0Y2ggKGZvcm1hdC50eXBlKSB7Ci0gICAgY2FzZSAnXDAnOgotICAgICAgICAvKiAnWicgbWVhbnMgbGlrZSAnZycsIGJ1dCB3aXRoIGF0IGxlYXN0IG9uZSBkZWNpbWFsLiAgU2VlCi0gICAgICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZCAqLwotICAgICAgICBmb3JtYXQudHlwZSA9ICdaJzsKLSAgICAgICAgLyogRGVsaWJlcmF0ZSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSBzdGF0ZW1lbnQgKi8KKyAgICBjYXNlICdcMCc6IC8qIE5vIGZvcm1hdCBjb2RlOiBsaWtlICdnJywgYnV0IHdpdGggYXQgbGVhc3Qgb25lIGRlY2ltYWwuICovCiAgICAgY2FzZSAnZSc6CiAgICAgY2FzZSAnRSc6CiAgICAgY2FzZSAnZic6CkBAIC0xMDU0LDMgKzE0ODIsNTAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8qIEZPUk1BVF9GTE9BVCAqLworCisjaWZkZWYgRk9STUFUX0NPTVBMRVgKK1B5T2JqZWN0ICoKK0ZPUk1BVF9DT01QTEVYKFB5T2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqZm9ybWF0X3NwZWMsCisgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBJbnRlcm5hbEZvcm1hdFNwZWMgZm9ybWF0OworCisgICAgLyogY2hlY2sgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugb2YgemVybyBsZW5ndGggZm9ybWF0IHNwZWMsIG1ha2UKKyAgICAgICBpdCBlcXVpdmFsZW50IHRvIHN0cihvYmopICovCisgICAgaWYgKGZvcm1hdF9zcGVjX2xlbiA9PSAwKSB7CisgICAgICAgIHJlc3VsdCA9IFNUUklOR0xJQl9UT1NUUihvYmopOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgLyogcGFyc2UgdGhlIGZvcm1hdF9zcGVjICovCisgICAgaWYgKCFwYXJzZV9pbnRlcm5hbF9yZW5kZXJfZm9ybWF0X3NwZWMoZm9ybWF0X3NwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXQsICdcMCcsICc+JykpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIC8qIHR5cGUgY29udmVyc2lvbj8gKi8KKyAgICBzd2l0Y2ggKGZvcm1hdC50eXBlKSB7CisgICAgY2FzZSAnXDAnOiAvKiBObyBmb3JtYXQgY29kZTogbGlrZSAnZycsIGJ1dCB3aXRoIGF0IGxlYXN0IG9uZSBkZWNpbWFsLiAqLworICAgIGNhc2UgJ2UnOgorICAgIGNhc2UgJ0UnOgorICAgIGNhc2UgJ2YnOgorICAgIGNhc2UgJ0YnOgorICAgIGNhc2UgJ2cnOgorICAgIGNhc2UgJ0cnOgorICAgIGNhc2UgJ24nOgorICAgICAgICAvKiBubyBjb252ZXJzaW9uLCBhbHJlYWR5IGEgY29tcGxleC4gIGRvIHRoZSBmb3JtYXR0aW5nICovCisgICAgICAgIHJlc3VsdCA9IGZvcm1hdF9jb21wbGV4X2ludGVybmFsKG9iaiwgJmZvcm1hdCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biAqLworICAgICAgICB1bmtub3duX3ByZXNlbnRhdGlvbl90eXBlKGZvcm1hdC50eXBlLCBvYmotPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCitkb25lOgorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYgLyogRk9STUFUX0NPTVBMRVggKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCBiL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaAppbmRleCA5NzMwYzY3Li5mNTQ4MTMzIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oCkBAIC01LDEyNiArNSwyMDggQEAKIAogI2luY2x1ZGUgPGxvY2FsZS5oPgogCisjZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQorI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nOworICAgIGNoYXIgcHJldmlvdXM7CisgICAgUHlfc3NpemVfdCBpOyAvKiBXaGVyZSB3ZSdyZSBjdXJyZW50bHkgcG9pbnRpbmcgaW4gZ3JvdXBpbmcuICovCit9IEdyb3VwR2VuZXJhdG9yOworCitzdGF0aWMgdm9pZAorX0dyb3VwR2VuZXJhdG9yX2luaXQoR3JvdXBHZW5lcmF0b3IgKnNlbGYsIGNvbnN0IGNoYXIgKmdyb3VwaW5nKQoreworICAgIHNlbGYtPmdyb3VwaW5nID0gZ3JvdXBpbmc7CisgICAgc2VsZi0+aSA9IDA7CisgICAgc2VsZi0+cHJldmlvdXMgPSAwOworfQorCisvKiBSZXR1cm5zIHRoZSBuZXh0IGdyb3VwaW5nLCBvciAwIHRvIHNpZ25pZnkgZW5kLiAqLworc3RhdGljIFB5X3NzaXplX3QKK19Hcm91cEdlbmVyYXRvcl9uZXh0KEdyb3VwR2VuZXJhdG9yICpzZWxmKQoreworICAgIC8qIE5vdGUgdGhhdCB3ZSBkb24ndCByZWFsbHkgZG8gbXVjaCBlcnJvciBjaGVja2luZyBoZXJlLiBJZiBhCisgICAgICAgZ3JvdXBpbmcgc3RyaW5nIGNvbnRhaW5zIGp1c3QgQ0hBUl9NQVgsIGZvciBleGFtcGxlLCB0aGVuIGp1c3QKKyAgICAgICB0ZXJtaW5hdGUgdGhlIGdlbmVyYXRvci4gVGhhdCBzaG91bGRuJ3QgaGFwcGVuLCBidXQgYXQgbGVhc3Qgd2UKKyAgICAgICBmYWlsIGdyYWNlZnVsbHkuICovCisgICAgc3dpdGNoIChzZWxmLT5ncm91cGluZ1tzZWxmLT5pXSkgeworICAgIGNhc2UgMDoKKyAgICAgICAgcmV0dXJuIHNlbGYtPnByZXZpb3VzOworICAgIGNhc2UgQ0hBUl9NQVg6CisgICAgICAgIC8qIFN0b3AgdGhlIGdlbmVyYXRvci4gKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgZGVmYXVsdDogeworICAgICAgICBjaGFyIGNoID0gc2VsZi0+Z3JvdXBpbmdbc2VsZi0+aV07CisgICAgICAgIHNlbGYtPnByZXZpb3VzID0gY2g7CisgICAgICAgIHNlbGYtPmkrKzsKKyAgICAgICAgcmV0dXJuIChQeV9zc2l6ZV90KWNoOworICAgIH0KKyAgICB9Cit9CisKKy8qIEZpbGwgaW4gc29tZSBkaWdpdHMsIGxlYWRpbmcgemVyb3MsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yLiBBbGwKKyAgIGFyZSBvcHRpb25hbCwgZGVwZW5kaW5nIG9uIHdoZW4gd2UncmUgY2FsbGVkLiAqLworc3RhdGljIHZvaWQKK2ZpbGwoU1RSSU5HTElCX0NIQVIgKipkaWdpdHNfZW5kLCBTVFJJTkdMSUJfQ0hBUiAqKmJ1ZmZlcl9lbmQsCisgICAgIFB5X3NzaXplX3Qgbl9jaGFycywgUHlfc3NpemVfdCBuX3plcm9zLCBjb25zdCBjaGFyKiB0aG91c2FuZHNfc2VwLAorICAgICBQeV9zc2l6ZV90IHRob3VzYW5kc19zZXBfbGVuKQoreworI2lmIFNUUklOR0xJQl9JU19VTklDT0RFCisgICAgUHlfc3NpemVfdCBpOworI2VuZGlmCisKKyAgICBpZiAodGhvdXNhbmRzX3NlcCkgeworICAgICAgICAqYnVmZmVyX2VuZCAtPSB0aG91c2FuZHNfc2VwX2xlbjsKKworICAgICAgICAvKiBDb3B5IHRoZSB0aG91c2FuZHNfc2VwIGNoYXJzIGludG8gdGhlIGJ1ZmZlci4gKi8KKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgICAgICAvKiBDb252ZXJ0IGZyb20gdGhlIGNoYXIncyBvZiB0aGUgdGhvdXNhbmRzX3NlcCBmcm9tCisgICAgICAgICAgIHRoZSBsb2NhbGUgaW50byB1bmljb2RlLiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhvdXNhbmRzX3NlcF9sZW47ICsraSkKKyAgICAgICAgICAgICgqYnVmZmVyX2VuZClbaV0gPSB0aG91c2FuZHNfc2VwW2ldOworI2Vsc2UKKyAgICAgICAgLyogTm8gY29udmVyc2lvbiwganVzdCBtZW1jcHkgdGhlIHRob3VzYW5kc19zZXAuICovCisgICAgICAgIG1lbWNweSgqYnVmZmVyX2VuZCwgdGhvdXNhbmRzX3NlcCwgdGhvdXNhbmRzX3NlcF9sZW4pOworI2VuZGlmCisgICAgfQorCisgICAgKmJ1ZmZlcl9lbmQgLT0gbl9jaGFyczsKKyAgICAqZGlnaXRzX2VuZCAtPSBuX2NoYXJzOworICAgIG1lbWNweSgqYnVmZmVyX2VuZCwgKmRpZ2l0c19lbmQsIG5fY2hhcnMgKiBzaXplb2YoU1RSSU5HTElCX0NIQVIpKTsKKworICAgICpidWZmZXJfZW5kIC09IG5femVyb3M7CisgICAgU1RSSU5HTElCX0ZJTEwoKmJ1ZmZlcl9lbmQsICcwJywgbl96ZXJvcyk7Cit9CisKIC8qKgogICogX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nOgogICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiBhIHN0cmluZy4KLSAqIEBuX2J1ZmZlcjogVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICogQG5fYnVmZmVyOiBOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBAYnVmZmVyLgorICogQGRpZ2l0czogQSBwb2ludGVyIHRvIHRoZSBkaWdpdHMgd2UncmUgcmVhZGluZyBmcm9tLiBJZiBjb3VudAorICogICAgICAgICAgaXMgbm9uLU5VTEwsIHRoaXMgaXMgdW51c2VkLgogICogQG5fZGlnaXRzOiBUaGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLCBpbiB3aGljaCB3ZSB3YW50CiAgKiAgICAgICAgICAgIHRvIHB1dCB0aGUgZ3JvdXBpbmcgY2hhcnMuCi0gKiBAYnVmX3NpemU6IFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IGJ1ZmZlci4KLSAqIEBjb3VudDogSWYgbm9uLU5VTEwsIHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgd2lsbCByZWNlaXZlIHRoZQotICogICAgICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyB3ZSBuZWVkIHRvIGluc2VydCAoYW5kIG5vIGZvcm1hdHRpbmcKLSAqICAgICAgICAgd2lsbCBhY3R1YWxseSBvY2N1cikuCi0gKiBAYXBwZW5kX3plcm9fY2hhcjogSWYgbm9uLXplcm8sIHB1dCBhIHRyYWlsaW5nIHplcm8gYXQgdGhlIGVuZCBvZgotICogICAgICAgICBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZywgaWYgYW5kIG9ubHkgaWYgd2UgbW9kaWZpZWQgdGhlCi0gKiAgICAgICAgIHN0cmluZy4KKyAqIEBtaW5fd2lkdGg6IFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBkaWdpdHMgaW4gdGhlIG91dHB1dCBzdHJpbmcuCisgKiAgICAgICAgICAgICBPdXRwdXQgd2lsbCBiZSB6ZXJvLXBhZGRlZCBvbiB0aGUgbGVmdCB0byBmaWxsLgorICogQGdyb3VwaW5nOiBzZWUgZGVmaW5pdGlvbiBpbiBsb2NhbGVjb252KCkuCisgKiBAdGhvdXNhbmRzX3NlcDogc2VlIGRlZmluaXRpb24gaW4gbG9jYWxlY29udigpLgogICoKLSAqIEluc2VydHMgdGhvdXNhbmQgZ3JvdXBpbmcgY2hhcmFjdGVycyAoYXMgZGVmaW5lZCBpbiB0aGUgY3VycmVudAotICogIGxvY2FsZSkgaW50byB0aGUgc3RyaW5nIGJldHdlZW4gYnVmZmVyIGFuZCBidWZmZXIrbl9kaWdpdHMuICBJZgotICogIGNvdW50IGlzIG5vbi1OVUxMLCBkb24ndCBkbyBhbnkgZm9ybWF0dGluZywganVzdCBjb3VudCB0aGUgbnVtYmVyCi0gKiAgb2YgY2hhcmFjdGVycyB0byBpbnNlcnQuICBUaGlzIGlzIHVzZWQgYnkgdGhlIGNhbGxlciB0bwotICogIGFwcHJvcHJpYXRlbHkgcmVzaXplIHRoZSBidWZmZXIsIGlmIG5lZWRlZC4gIElmIGNvdW50IGlzIG5vbi1OVUxMLAotICogIGJ1ZmZlciBjYW4gYmUgTlVMTCAoaXQgaXMgbm90IGRlcmVmZXJlbmNlZCBhdCBhbGwgaW4gdGhhdCBjYXNlKS4KKyAqIFRoZXJlIGFyZSAyIG1vZGVzOiBjb3VudGluZyBhbmQgZmlsbGluZy4gSWYgQGJ1ZmZlciBpcyBOVUxMLAorICogIHdlIGFyZSBpbiBjb3VudGluZyBtb2RlLCBlbHNlIGZpbGxpbmcgbW9kZS4KKyAqIElmIGNvdW50aW5nLCB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgaXMgcmV0dXJuZWQuCisgKiBJZiBmaWxsaW5nLCB3ZSBrbm93IHRoZSBidWZmZXIgd2lsbCBiZSBsYXJnZSBlbm91Z2gsIHNvIHdlIGRvbid0CisgKiAgbmVlZCB0byBwYXNzIGluIHRoZSBidWZmZXIgc2l6ZS4KKyAqIEluc2VydHMgdGhvdXNhbmQgZ3JvdXBpbmcgY2hhcmFjdGVycyAoYXMgZGVmaW5lZCBieSBncm91cGluZyBhbmQKKyAqICB0aG91c2FuZHNfc2VwKSBpbnRvIHRoZSBzdHJpbmcgYmV0d2VlbiBidWZmZXIgYW5kIGJ1ZmZlcituX2RpZ2l0cy4KICAqCiAgKiBSZXR1cm4gdmFsdWU6IDAgb24gZXJyb3IsIGVsc2UgMS4gIE5vdGUgdGhhdCBubyBlcnJvciBjYW4gb2NjdXIgaWYKICAqICBjb3VudCBpcyBub24tTlVMTC4KICAqCiAgKiBUaGlzIG5hbWUgd29uJ3QgYmUgdXNlZCwgdGhlIGluY2x1ZGVyIG9mIHRoaXMgZmlsZSBzaG91bGQgZGVmaW5lCiAgKiAgaXQgdG8gYmUgdGhlIGFjdHVhbCBmdW5jdGlvbiBuYW1lLCBiYXNlZCBvbiB1bmljb2RlIG9yIHN0cmluZy4KKyAqCisgKiBBcyBjbG9zZWx5IGFzIHBvc3NpYmxlLCB0aGlzIGNvZGUgbWltaWNzIHRoZSBsb2dpYyBpbiBkZWNpbWFsLnB5J3MKKyAgICBfaW5zZXJ0X3Rob3VzYW5kc19zZXAoKS4KICAqKi8KLWludAorUHlfc3NpemVfdAogX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nKFNUUklOR0xJQl9DSEFSICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqZGlnaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXBwZW5kX3plcm9fY2hhcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1pbl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpncm91cGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwKQogewotICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGEgPSBsb2NhbGVjb252KCk7Ci0gICAgY29uc3QgY2hhciAqZ3JvdXBpbmcgPSBsb2NhbGVfZGF0YS0+Z3JvdXBpbmc7Ci0gICAgY29uc3QgY2hhciAqdGhvdXNhbmRzX3NlcCA9IGxvY2FsZV9kYXRhLT50aG91c2FuZHNfc2VwOworICAgIFB5X3NzaXplX3QgY291bnQgPSAwOworICAgIFB5X3NzaXplX3Qgbl96ZXJvczsKKyAgICBpbnQgbG9vcF9icm9rZW4gPSAwOworICAgIGludCB1c2Vfc2VwYXJhdG9yID0gMDsgLyogRmlyc3QgdGltZSB0aHJvdWdoLCBkb24ndCBhcHBlbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3IuIFRoZXkgb25seSBnbyBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMuICovCisgICAgU1RSSU5HTElCX0NIQVIgKmJ1ZmZlcl9lbmQgPSBOVUxMOworICAgIFNUUklOR0xJQl9DSEFSICpkaWdpdHNfZW5kID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGw7CisgICAgUHlfc3NpemVfdCBuX2NoYXJzOwogICAgIFB5X3NzaXplX3QgdGhvdXNhbmRzX3NlcF9sZW4gPSBzdHJsZW4odGhvdXNhbmRzX3NlcCk7Ci0gICAgU1RSSU5HTElCX0NIQVIgKnBlbmQgPSBOVUxMOyAvKiBjdXJyZW50IGVuZCBvZiBidWZmZXIgKi8KLSAgICBTVFJJTkdMSUJfQ0hBUiAqcG1heCA9IE5VTEw7IC8qIG1heCBvZiBidWZmZXIgKi8KLSAgICBjaGFyIGN1cnJlbnRfZ3JvdXBpbmc7CiAgICAgUHlfc3NpemVfdCByZW1haW5pbmcgPSBuX2RpZ2l0czsgLyogTnVtYmVyIG9mIGNoYXJzIHJlbWFpbmluZyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGxvb2tlZCBhdCAqLworICAgIC8qIEEgZ2VuZXJhdG9yIHRoYXQgcmV0dXJucyBhbGwgb2YgdGhlIGdyb3VwaW5nIHdpZHRocywgdW50aWwgaXQKKyAgICAgICByZXR1cm5zIDAuICovCisgICAgR3JvdXBHZW5lcmF0b3IgZ3JvdXBnZW47CisgICAgX0dyb3VwR2VuZXJhdG9yX2luaXQoJmdyb3VwZ2VuLCBncm91cGluZyk7CiAKLSAgICAvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgY291bnQsIGlmIHdlJ3JlIGp1c3QgY291bnRpbmcuICovCi0gICAgaWYgKGNvdW50KQotICAgICAgICAqY291bnQgPSAwOwotICAgIGVsc2UgewotICAgICAgICAvKiBXZSdyZSBub3QganVzdCBjb3VudGluZywgd2UncmUgbW9kaWZ5aW5nIGJ1ZmZlciAqLwotICAgICAgICBwZW5kID0gYnVmZmVyICsgbl9idWZmZXI7Ci0gICAgICAgIHBtYXggPSBidWZmZXIgKyBidWZfc2l6ZTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlcl9lbmQgPSBidWZmZXIgKyBuX2J1ZmZlcjsKKyAgICAgICAgZGlnaXRzX2VuZCA9IGRpZ2l0cyArIG5fZGlnaXRzOwogICAgIH0KIAotICAgIC8qIFN0YXJ0aW5nIGF0IHRoZSBlbmQgYW5kIHdvcmtpbmcgcmlnaHQtdG8tbGVmdCwga2VlcCB0cmFjayBvZgotICAgICAgIHdoYXQgZ3JvdXBpbmcgbmVlZHMgdG8gYmUgYWRkZWQgYW5kIGluc2VydCB0aGF0LiAqLwotICAgIGN1cnJlbnRfZ3JvdXBpbmcgPSAqZ3JvdXBpbmcrKzsKKyAgICB3aGlsZSAoKGwgPSBfR3JvdXBHZW5lcmF0b3JfbmV4dCgmZ3JvdXBnZW4pKSA+IDApIHsKKyAgICAgICAgbCA9IE1JTihsLCBNQVgoTUFYKHJlbWFpbmluZywgbWluX3dpZHRoKSwgMSkpOworICAgICAgICBuX3plcm9zID0gTUFYKDAsIGwgLSByZW1haW5pbmcpOworICAgICAgICBuX2NoYXJzID0gTUFYKDAsIE1JTihyZW1haW5pbmcsIGwpKTsKIAotICAgIC8qIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgMCwgcGVyZm9ybSBubyBncm91cGluZyBhdCBhbGwuICovCi0gICAgaWYgKGN1cnJlbnRfZ3JvdXBpbmcgPT0gMCkKLSAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIC8qIFVzZSBuX3plcm8gemVybydzIGFuZCBuX2NoYXJzIGNoYXJzICovCiAKLSAgICB3aGlsZSAocmVtYWluaW5nID4gY3VycmVudF9ncm91cGluZykgewotICAgICAgICAvKiBBbHdheXMgbGVhdmUgYnVmZmVyIGFuZCBwZW5kIHZhbGlkIGF0IHRoZSBlbmQgb2YgdGhpcwotICAgICAgICAgICBsb29wLCBzaW5jZSB3ZSBtaWdodCBsZWF2ZSB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC4gKi8KKyAgICAgICAgLyogQ291bnQgb25seSwgZG9uJ3QgZG8gYW55dGhpbmcuICovCisgICAgICAgIGNvdW50ICs9ICh1c2Vfc2VwYXJhdG9yID8gdGhvdXNhbmRzX3NlcF9sZW4gOiAwKSArIG5femVyb3MgKyBuX2NoYXJzOwogCi0gICAgICAgIHJlbWFpbmluZyAtPSBjdXJyZW50X2dyb3VwaW5nOwotICAgICAgICBpZiAoY291bnQpIHsKLSAgICAgICAgICAgIC8qIFdlJ3JlIG9ubHkgY291bnRpbmcsIG5vdCB0b3VjaGluZyB0aGUgbWVtb3J5LiAqLwotICAgICAgICAgICAgKmNvdW50ICs9IHRob3VzYW5kc19zZXBfbGVuOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogRG8gdGhlIGZvcm1hdHRpbmcuICovCi0KLSAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpwbGFzdCA9IGJ1ZmZlciArIHJlbWFpbmluZzsKLQotICAgICAgICAgICAgLyogSXMgdGhlcmUgcm9vbSB0byBpbnNlcnQgdGhvdXNhbmRzX3NlcF9sZW4gY2hhcnM/ICovCi0gICAgICAgICAgICBpZiAocG1heCAtIHBlbmQgPCB0aG91c2FuZHNfc2VwX2xlbikKLSAgICAgICAgICAgICAgICAvKiBObyByb29tLiAqLwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAvKiBNb3ZlIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgZG93bi4gKi8KLSAgICAgICAgICAgIG1lbW1vdmUocGxhc3QgKyB0aG91c2FuZHNfc2VwX2xlbiwKLSAgICAgICAgICAgICAgICBwbGFzdCwKLSAgICAgICAgICAgICAgICAocGVuZCAtIHBsYXN0KSAqIHNpemVvZihTVFJJTkdMSUJfQ0hBUikpOwotICAgICAgICAgICAgLyogQ29weSB0aGUgdGhvdXNhbmRzX3NlcCBjaGFycyBpbnRvIHRoZSBidWZmZXIuICovCi0jaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKLSAgICAgICAgICAgIC8qIENvbnZlcnQgZnJvbSB0aGUgY2hhcidzIG9mIHRoZSB0aG91c2FuZHNfc2VwIGZyb20KLSAgICAgICAgICAgICAgIHRoZSBsb2NhbGUgaW50byB1bmljb2RlLiAqLwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhvdXNhbmRzX3NlcF9sZW47ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGxhc3RbaV0gPSB0aG91c2FuZHNfc2VwW2ldOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIC8qIE5vIGNvbnZlcnNpb24sIGp1c3QgbWVtY3B5IHRoZSB0aG91c2FuZHNfc2VwLiAqLwotICAgICAgICAgICAgbWVtY3B5KHBsYXN0LCB0aG91c2FuZHNfc2VwLCB0aG91c2FuZHNfc2VwX2xlbik7Ci0jZW5kaWYKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgLyogQ29weSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLiAqLworICAgICAgICAgICAgZmlsbCgmZGlnaXRzX2VuZCwgJmJ1ZmZlcl9lbmQsIG5fY2hhcnMsIG5femVyb3MsCisgICAgICAgICAgICAgICAgIHVzZV9zZXBhcmF0b3IgPyB0aG91c2FuZHNfc2VwIDogTlVMTCwgdGhvdXNhbmRzX3NlcF9sZW4pOwogICAgICAgICB9CiAKLSAgICAgICAgLyogQWRqdXN0IGVuZCBwb2ludGVyLiAqLwotICAgICAgICBwZW5kICs9IHRob3VzYW5kc19zZXBfbGVuOworICAgICAgICAvKiBVc2UgYSBzZXBhcmF0b3IgbmV4dCB0aW1lLiAqLworICAgICAgICB1c2Vfc2VwYXJhdG9yID0gMTsKIAotICAgICAgICAvKiBNb3ZlIHRvIHRoZSBuZXh0IGdyb3VwaW5nIGNoYXJhY3RlciwgdW5sZXNzIHdlJ3JlCi0gICAgICAgICAgIHJlcGVhdGluZyAod2hpY2ggaXMgZGVzaWduYXRlZCBieSBhIGdyb3VwaW5nIG9mIDApLiAqLwotICAgICAgICBpZiAoKmdyb3VwaW5nICE9IDApIHsKLSAgICAgICAgICAgIGN1cnJlbnRfZ3JvdXBpbmcgPSAqZ3JvdXBpbmcrKzsKLSAgICAgICAgICAgIGlmIChjdXJyZW50X2dyb3VwaW5nID09IENIQVJfTUFYKQotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUuICovCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJlbWFpbmluZyAtPSBuX2NoYXJzOworICAgICAgICBtaW5fd2lkdGggLT0gbDsKKworICAgICAgICBpZiAocmVtYWluaW5nIDw9IDAgJiYgbWluX3dpZHRoIDw9IDApIHsKKyAgICAgICAgICAgIGxvb3BfYnJva2VuID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1pbl93aWR0aCAtPSB0aG91c2FuZHNfc2VwX2xlbjsKKyAgICB9CisgICAgaWYgKCFsb29wX2Jyb2tlbikgeworICAgICAgICAvKiBXZSBsZWZ0IHRoZSBsb29wIHdpdGhvdXQgdXNpbmcgYSBicmVhayBzdGF0ZW1lbnQuICovCisKKyAgICAgICAgbCA9IE1BWChNQVgocmVtYWluaW5nLCBtaW5fd2lkdGgpLCAxKTsKKyAgICAgICAgbl96ZXJvcyA9IE1BWCgwLCBsIC0gcmVtYWluaW5nKTsKKyAgICAgICAgbl9jaGFycyA9IE1BWCgwLCBNSU4ocmVtYWluaW5nLCBsKSk7CisKKyAgICAgICAgLyogVXNlIG5femVybyB6ZXJvJ3MgYW5kIG5fY2hhcnMgY2hhcnMgKi8KKyAgICAgICAgY291bnQgKz0gKHVzZV9zZXBhcmF0b3IgPyB0aG91c2FuZHNfc2VwX2xlbiA6IDApICsgbl96ZXJvcyArIG5fY2hhcnM7CisgICAgICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgICAgIC8qIENvcHkgaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4gKi8KKyAgICAgICAgICAgIGZpbGwoJmRpZ2l0c19lbmQsICZidWZmZXJfZW5kLCBuX2NoYXJzLCBuX3plcm9zLAorICAgICAgICAgICAgICAgICB1c2Vfc2VwYXJhdG9yID8gdGhvdXNhbmRzX3NlcCA6IE5VTEwsIHRob3VzYW5kc19zZXBfbGVuKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoYXBwZW5kX3plcm9fY2hhcikgewotICAgICAgICAvKiBBcHBlbmQgYSB6ZXJvIGNoYXJhY3RlciB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIHN0cmluZywKLSAgICAgICAgICAgaWYgdGhlcmUncyByb29tLiAqLwotICAgICAgICBpZiAocGVuZCAtIChidWZmZXIgKyByZW1haW5pbmcpIDwgMSkKLSAgICAgICAgICAgIC8qIE5vIHJvb20sIGVycm9yLiAqLwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICpwZW5kID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZ0xvY2FsZToKKyAqIEBidWZmZXI6IEEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuCisgKiBAbl9kaWdpdHM6IFRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBzdHJpbmcsIGluIHdoaWNoIHdlIHdhbnQKKyAqICAgICAgICAgICAgdG8gcHV0IHRoZSBncm91cGluZyBjaGFycy4KKyAqCisgKiBSZWFkcyB0aGVlIGN1cnJlbnQgbG9jYWxlIGFuZCBjYWxscyBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcoKS4KKyAqKi8KK1B5X3NzaXplX3QKK19QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZ0xvY2FsZShTVFJJTkdMSUJfQ0hBUiAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKmRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoKQoreworICAgICAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhID0gbG9jYWxlY29udigpOworICAgICAgICBjb25zdCBjaGFyICpncm91cGluZyA9IGxvY2FsZV9kYXRhLT5ncm91cGluZzsKKyAgICAgICAgY29uc3QgY2hhciAqdGhvdXNhbmRzX3NlcCA9IGxvY2FsZV9kYXRhLT50aG91c2FuZHNfc2VwOworCisgICAgICAgIHJldHVybiBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcoYnVmZmVyLCBuX2J1ZmZlciwgZGlnaXRzLCBuX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fd2lkdGgsIGdyb3VwaW5nLCB0aG91c2FuZHNfc2VwKTsKIH0KICNlbmRpZiAvKiBTVFJJTkdMSUJfTE9DQUxFVVRJTF9IICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCmluZGV4IDIwYzc1MDcuLjAxNzBiZGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oCkBAIC04LDEwICs4LDEwIEBACiAjZW5kaWYKIAogUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0KikKLXN0cmluZ2xpYl9wYXJ0aXRpb24oCi0gICAgUHlPYmplY3QqIHN0cl9vYmosIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKLSAgICBQeU9iamVjdCogc2VwX29iaiwgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuCi0gICAgKQorc3RyaW5nbGliX3BhcnRpdGlvbihQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogc2VwX29iaiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuKQogewogICAgIFB5T2JqZWN0KiBvdXQ7CiAgICAgUHlfc3NpemVfdCBwb3M7CkBAIC0yNSwxNSArMjUsMjEgQEAKICAgICBpZiAoIW91dCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc2VwLCBzZXBfbGVuLCBGQVNUX1NFQVJDSCk7CisgICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHNlcCwgc2VwX2xlbiwgLTEsIEZBU1RfU0VBUkNIKTsKIAogICAgIGlmIChwb3MgPCAwKSB7CisjaWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0Kikgc3RyX29iaik7CiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgfQogCkBAIC01MiwxMyArNTgsMTMgQEAKIH0KIAogUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0KikKLXN0cmluZ2xpYl9ycGFydGl0aW9uKAotICAgIFB5T2JqZWN0KiBzdHJfb2JqLCBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCi0gICAgUHlPYmplY3QqIHNlcF9vYmosIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbgotICAgICkKK3N0cmluZ2xpYl9ycGFydGl0aW9uKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIHNlcF9vYmosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4pCiB7CiAgICAgUHlPYmplY3QqIG91dDsKLSAgICBQeV9zc2l6ZV90IHBvcywgajsKKyAgICBQeV9zc2l6ZV90IHBvczsKIAogICAgIGlmIChzZXBfbGVuID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKQEAgLTY5LDIxICs3NSwyMSBAQAogICAgIGlmICghb3V0KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIFhYWCAtIGNyZWF0ZSByZXZlcnNlZmFzdHNlYXJjaCBoZWxwZXIhICovCi0gICAgICAgIHBvcyA9IC0xOwotICAgICAgICBmb3IgKGogPSBzdHJfbGVuIC0gc2VwX2xlbjsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICBpZiAoU1RSSU5HTElCX0NNUChzdHIraiwgc2VwLCBzZXBfbGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcG9zID0gajsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc2VwLCBzZXBfbGVuLCAtMSwgRkFTVF9SU0VBUkNIKTsKIAogICAgIGlmIChwb3MgPCAwKSB7CisjaWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOworI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIChQeU9iamVjdCopIFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIChQeU9iamVjdCopIHN0cl9vYmopOworI2VuZGlmCiAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgfQogCkBAIC0xMDIsMTAgKzEwOCwzIEBACiB9CiAKICNlbmRpZgotCi0vKgotTG9jYWwgdmFyaWFibGVzOgotYy1iYXNpYy1vZmZzZXQ6IDQKLWluZGVudC10YWJzLW1vZGU6IG5pbAotRW5kOgotKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZTc3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCkBAIC0wLDAgKzEsMzk0IEBACisvKiBzdHJpbmdsaWI6IHNwbGl0IGltcGxlbWVudGF0aW9uICovCisKKyNpZm5kZWYgU1RSSU5HTElCX1NQTElUX0gKKyNkZWZpbmUgU1RSSU5HTElCX1NQTElUX0gKKworI2lmbmRlZiBTVFJJTkdMSUJfRkFTVFNFQVJDSF9ICisjZXJyb3IgbXVzdCBpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIiBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgbW9kdWxlCisjZW5kaWYKKworLyogT3ZlcmFsbG9jYXRlIHRoZSBpbml0aWFsIGxpc3QgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcmVhbGxvY3MgZm9yIHNtYWxsCisgICBzcGxpdCBzaXplcy4gIEVnLCAiQSBBIEEgQSBBIEEgQSBBIEEgQSIuc3BsaXQoKSAoMTAgZWxlbWVudHMpIGhhcyB0aHJlZQorICAgcmVzaXplcywgdG8gc2l6ZXMgNCwgOCwgdGhlbiAxNi4gIE1vc3Qgb2JzZXJ2ZWQgc3RyaW5nIHNwbGl0cyBhcmUgZm9yIGh1bWFuCisgICB0ZXh0IChyb3VnaGx5IDExIHdvcmRzIHBlciBsaW5lKSBhbmQgZmllbGQgZGVsaW1pdGVkIGRhdGEgKHVzdWFsbHkgMS0xMAorICAgZmllbGRzKS4gIEZvciBsYXJnZSBzdHJpbmdzIHRoZSBzcGxpdCBhbGdvcml0aG1zIGFyZSBiYW5kd2lkdGggbGltaXRlZAorICAgc28gaW5jcmVhc2luZyB0aGUgcHJlYWxsb2NhdGlvbiBsaWtlbHkgd2lsbCBub3QgaW1wcm92ZSB0aGluZ3MuKi8KKworI2RlZmluZSBNQVhfUFJFQUxMT0MgMTIKKworLyogNSBzcGxpdHMgZ2l2ZXMgNiBlbGVtZW50cyAqLworI2RlZmluZSBQUkVBTExPQ19TSVpFKG1heHNwbGl0KSBcCisgICAgKG1heHNwbGl0ID49IE1BWF9QUkVBTExPQyA/IE1BWF9QUkVBTExPQyA6IG1heHNwbGl0KzEpCisKKyNkZWZpbmUgU1BMSVRfQVBQRU5EKGRhdGEsIGxlZnQsIHJpZ2h0KSAgICAgICAgIFwKKyAgICBzdWIgPSBTVFJJTkdMSUJfTkVXKChkYXRhKSArIChsZWZ0KSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodCkgLSAobGVmdCkpOyAgICAgIFwKKyAgICBpZiAoc3ViID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdWIpKSB7ICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHN1Yik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHN1Yik7CisKKyNkZWZpbmUgU1BMSVRfQUREKGRhdGEsIGxlZnQsIHJpZ2h0KSB7ICAgICAgICAgIFwKKyAgICBzdWIgPSBTVFJJTkdMSUJfTkVXKChkYXRhKSArIChsZWZ0KSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodCkgLSAobGVmdCkpOyAgICAgIFwKKyAgICBpZiAoc3ViID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoY291bnQgPCBNQVhfUFJFQUxMT0MpIHsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGNvdW50LCBzdWIpOyAgICAgIFwKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3ViKSkgeyAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3VudCsrOyB9CisKKworLyogQWx3YXlzIGZvcmNlIHRoZSBsaXN0IHRvIHRoZSBleHBlY3RlZCBzaXplLiAqLworI2RlZmluZSBGSVhfUFJFQUxMT0NfU0laRShsaXN0KSBQeV9TSVpFKGxpc3QpID0gY291bnQKKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfc3BsaXRfd2hpdGVzcGFjZShQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgUHlPYmplY3QgKnN1YjsKKworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IGogPSAwOworICAgIHdoaWxlIChtYXhjb3VudC0tID4gMCkgeworICAgICAgICB3aGlsZSAoaSA8IHN0cl9sZW4gJiYgU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGkgPT0gc3RyX2xlbikgYnJlYWs7CisgICAgICAgIGogPSBpOyBpKys7CisgICAgICAgIHdoaWxlIChpIDwgc3RyX2xlbiAmJiAhU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGkrKzsKKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICAgICAgaWYgKGogPT0gMCAmJiBpID09IHN0cl9sZW4gJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgICAgICAvKiBObyB3aGl0ZXNwYWNlIGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIGl0IGFzIGxpc3RbMF0gKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIFNQTElUX0FERChzdHIsIGosIGkpOworICAgIH0KKworICAgIGlmIChpIDwgc3RyX2xlbikgeworICAgICAgICAvKiBPbmx5IG9jY3VycyB3aGVuIG1heGNvdW50IHdhcyByZWFjaGVkICovCisgICAgICAgIC8qIFNraXAgYW55IHJlbWFpbmluZyB3aGl0ZXNwYWNlIGFuZCBjb3B5IHRvIGVuZCBvZiBzdHJpbmcgKi8KKyAgICAgICAgd2hpbGUgKGkgPCBzdHJfbGVuICYmIFNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpKys7CisgICAgICAgIGlmIChpICE9IHN0cl9sZW4pCisgICAgICAgICAgICBTUExJVF9BREQoc3RyLCBpLCBzdHJfbGVuKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3NwbGl0X2NoYXIoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiBjaCwKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7CisgICAgUHlPYmplY3QgKnN1YjsKKworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IGogPSAwOworICAgIHdoaWxlICgoaiA8IHN0cl9sZW4pICYmIChtYXhjb3VudC0tID4gMCkpIHsKKyAgICAgICAgZm9yKDsgaiA8IHN0cl9sZW47IGorKykgeworICAgICAgICAgICAgLyogSSBmb3VuZCB0aGF0IHVzaW5nIG1lbWNociBtYWtlcyBubyBkaWZmZXJlbmNlICovCisgICAgICAgICAgICBpZiAoc3RyW2pdID09IGNoKSB7CisgICAgICAgICAgICAgICAgU1BMSVRfQUREKHN0ciwgaSwgaik7CisgICAgICAgICAgICAgICAgaSA9IGogPSBqICsgMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoY291bnQgPT0gMCAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgLyogY2ggbm90IGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIHN0cl9vYmogYXMgbGlzdFswXSAqLworICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIGlmIChpIDw9IHN0cl9sZW4pIHsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgaSwgc3RyX2xlbik7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9zcGxpdChQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuLAorICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBpLCBqLCBwb3MsIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QsICpzdWI7CisKKyAgICBpZiAoc2VwX2xlbiA9PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChzZXBfbGVuID09IDEpCisgICAgICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRfY2hhcihzdHJfb2JqLCBzdHIsIHN0cl9sZW4sIHNlcFswXSwgbWF4Y291bnQpOworCisgICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaSA9IGogPSAwOworICAgIHdoaWxlIChtYXhjb3VudC0tID4gMCkgeworICAgICAgICBwb3MgPSBmYXN0c2VhcmNoKHN0citpLCBzdHJfbGVuLWksIHNlcCwgc2VwX2xlbiwgLTEsIEZBU1RfU0VBUkNIKTsKKyAgICAgICAgaWYgKHBvcyA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaiA9IGkgKyBwb3M7CisgICAgICAgIFNQTElUX0FERChzdHIsIGksIGopOworICAgICAgICBpID0gaiArIHNlcF9sZW47CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChjb3VudCA9PSAwICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAvKiBObyBtYXRjaCBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCisgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICBjb3VudCsrOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBTUExJVF9BREQoc3RyLCBpLCBzdHJfbGVuKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIFB5T2JqZWN0ICpzdWI7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGkgPSBqID0gc3RyX2xlbiAtIDE7CisgICAgd2hpbGUgKG1heGNvdW50LS0gPiAwKSB7CisgICAgICAgIHdoaWxlIChpID49IDAgJiYgU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgaWYgKGkgPCAwKSBicmVhazsKKyAgICAgICAgaiA9IGk7IGktLTsKKyAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiAhU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGktLTsKKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICAgICAgaWYgKGogPT0gc3RyX2xlbiAtIDEgJiYgaSA8IDAgJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgICAgICAvKiBObyB3aGl0ZXNwYWNlIGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIGl0IGFzIGxpc3RbMF0gKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIFNQTElUX0FERChzdHIsIGkgKyAxLCBqICsgMSk7CisgICAgfQorCisgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAvKiBPbmx5IG9jY3VycyB3aGVuIG1heGNvdW50IHdhcyByZWFjaGVkICovCisgICAgICAgIC8qIFNraXAgYW55IHJlbWFpbmluZyB3aGl0ZXNwYWNlIGFuZCBjb3B5IHRvIGJlZ2lubmluZyBvZiBzdHJpbmcgKi8KKyAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaS0tOworICAgICAgICBpZiAoaSA+PSAwKQorICAgICAgICAgICAgU1BMSVRfQUREKHN0ciwgMCwgaSArIDEpOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3JzcGxpdF9jaGFyKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiBjaCwKKyAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIFB5T2JqZWN0ICpzdWI7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGkgPSBqID0gc3RyX2xlbiAtIDE7CisgICAgd2hpbGUgKChpID49IDApICYmIChtYXhjb3VudC0tID4gMCkpIHsKKyAgICAgICAgZm9yKDsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChzdHJbaV0gPT0gY2gpIHsKKyAgICAgICAgICAgICAgICBTUExJVF9BREQoc3RyLCBpICsgMSwgaiArIDEpOworICAgICAgICAgICAgICAgIGogPSBpID0gaSAtIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKGNvdW50ID09IDAgJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgIC8qIGNoIG5vdCBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBzdHJfb2JqIGFzIGxpc3RbMF0gKi8KKyAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgIGNvdW50Kys7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICBpZiAoaiA+PSAtMSkgeworICAgICAgICBTUExJVF9BREQoc3RyLCAwLCBqICsgMSk7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfcnNwbGl0KFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbiwKKyAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGosIHBvcywgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCwgKnN1YjsKKworICAgIGlmIChzZXBfbGVuID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHNlcF9sZW4gPT0gMSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXRfY2hhcihzdHJfb2JqLCBzdHIsIHN0cl9sZW4sIHNlcFswXSwgbWF4Y291bnQpOworCisgICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaiA9IHN0cl9sZW47CisgICAgd2hpbGUgKG1heGNvdW50LS0gPiAwKSB7CisgICAgICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBqLCBzZXAsIHNlcF9sZW4sIC0xLCBGQVNUX1JTRUFSQ0gpOworICAgICAgICBpZiAocG9zIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBTUExJVF9BREQoc3RyLCBwb3MgKyBzZXBfbGVuLCBqKTsKKyAgICAgICAgaiA9IHBvczsKKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKGNvdW50ID09IDAgJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgIC8qIE5vIG1hdGNoIGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIGl0IGFzIGxpc3RbMF0gKi8KKyAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgIGNvdW50Kys7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIFNQTElUX0FERChzdHIsIDAsIGopOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3NwbGl0bGluZXMoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQga2VlcGVuZHMpCit7CisgICAgLyogVGhpcyBkb2VzIG5vdCB1c2UgdGhlIHByZWFsbG9jYXRlZCBsaXN0IGJlY2F1c2Ugc3BsaXRsaW5lcyBpcworICAgICAgIHVzdWFsbHkgcnVuIHdpdGggaHVuZHJlZHMgb2YgbmV3bGluZXMuICBUaGUgb3ZlcmhlYWQgb2YKKyAgICAgICBzd2l0Y2hpbmcgYmV0d2VlbiBQeUxpc3RfU0VUX0lURU0gYW5kIGFwcGVuZCBjYXVzZXMgYWJvdXQgYQorICAgICAgIDItMyUgc2xvd2Rvd24gZm9yIHRoYXQgY29tbW9uIGNhc2UuICBBIHNtYXJ0ZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICBjb3VsZCBtb3ZlIHRoZSBpZiBjaGVjayBvdXQsIHNvIHRoZSBTRVRfSVRFTXMgYXJlIGRvbmUgZmlyc3QKKyAgICAgICBhbmQgdGhlIGFwcGVuZHMgb25seSBkb25lIHdoZW4gdGhlIHByZWFsbG9jIGJ1ZmZlciBpcyBmdWxsLgorICAgICAgIFRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBsaXR0bGUgZ2Fpbi4qLworCisgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlPYmplY3QgKnN1YjsKKworICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gaiA9IDA7IGkgPCBzdHJfbGVuOyApIHsKKyAgICAgICAgUHlfc3NpemVfdCBlb2w7CisKKyAgICAgICAgLyogRmluZCBhIGxpbmUgYW5kIGFwcGVuZCBpdCAqLworICAgICAgICB3aGlsZSAoaSA8IHN0cl9sZW4gJiYgIVNUUklOR0xJQl9JU0xJTkVCUkVBSyhzdHJbaV0pKQorICAgICAgICAgICAgaSsrOworCisgICAgICAgIC8qIFNraXAgdGhlIGxpbmUgYnJlYWsgcmVhZGluZyBDUkxGIGFzIG9uZSBsaW5lIGJyZWFrICovCisgICAgICAgIGVvbCA9IGk7CisgICAgICAgIGlmIChpIDwgc3RyX2xlbikgeworICAgICAgICAgICAgaWYgKHN0cltpXSA9PSAnXHInICYmIGkgKyAxIDwgc3RyX2xlbiAmJiBzdHJbaSsxXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBpZiAoa2VlcGVuZHMpCisgICAgICAgICAgICAgICAgZW9sID0gaTsKKyAgICAgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgICAgICBpZiAoaiA9PSAwICYmIGVvbCA9PSBzdHJfbGVuICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAgICAgLyogTm8gbGluZWJyZWFrIGluIHN0cl9vYmosIHNvIGp1c3QgdXNlIGl0IGFzIGxpc3RbMF0gKi8KKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN0cl9vYmopKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgU1BMSVRfQVBQRU5EKHN0ciwgaiwgZW9sKTsKKyAgICAgICAgaiA9IGk7CisgICAgfQorICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ19mb3JtYXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ19mb3JtYXQuaAppbmRleCA3MDQzODY2Li5lN2JmNzI0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oCkBAIC0zMSwxMCArMzEsMjMgQEAKIH0gU3ViU3RyaW5nOwogCiAKK3R5cGVkZWYgZW51bSB7CisgICAgQU5TX0lOSVQsCisgICAgQU5TX0FVVE8sCisgICAgQU5TX01BTlVBTAorfSBBdXRvTnVtYmVyU3RhdGU7ICAgLyogS2VlcCB0cmFjayBpZiB3ZSdyZSBhdXRvLW51bWJlcmluZyBmaWVsZHMgKi8KKworLyogS2VlcHMgdHJhY2sgb2Ygb3VyIGF1dG8tbnVtYmVyaW5nIHN0YXRlLCBhbmQgd2hpY2ggbnVtYmVyIGZpZWxkIHdlJ3JlIG9uICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQXV0b051bWJlclN0YXRlIGFuX3N0YXRlOworICAgIGludCBhbl9maWVsZF9udW1iZXI7Cit9IEF1dG9OdW1iZXI7CisKKwogLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgcmVjdXJzaW9uICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbGRfc3RyaW5nKFN1YlN0cmluZyAqaW5wdXQsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAotICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgpOworICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgsIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKTsKIAogCiAKQEAgLTQyLDYgKzU1LDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogIFV0aWxpdHkgIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQKK0F1dG9OdW1iZXJfSW5pdChBdXRvTnVtYmVyICphdXRvX251bWJlcikKK3sKKyAgICBhdXRvX251bWJlci0+YW5fc3RhdGUgPSBBTlNfSU5JVDsKKyAgICBhdXRvX251bWJlci0+YW5fZmllbGRfbnVtYmVyID0gMDsKK30KKwogLyogZmlsbCBpbiBhIFN1YlN0cmluZyBmcm9tIGEgcG9pbnRlciBhbmQgbGVuZ3RoICovCiBQeV9MT0NBTF9JTkxJTkUodm9pZCkKIFN1YlN0cmluZ19pbml0KFN1YlN0cmluZyAqc3RyLCBTVFJJTkdMSUJfQ0hBUiAqcCwgUHlfc3NpemVfdCBsZW4pCkBAIC03NCw2ICs5NCwzMiBAQAogICAgIHJldHVybiBTVFJJTkdMSUJfTkVXKHN0ci0+cHRyLCBzdHItPmVuZCAtIHN0ci0+cHRyKTsKIH0KIAorLyogUmV0dXJuIDEgaWYgYW4gZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQgc3dpdGNoaW5nIGJldHdlZW4gYXV0b21hdGljCisgICBmaWVsZCBudW1iZXJpbmcgYW5kIG1hbnVhbCBmaWVsZCBzcGVjaWZpY2F0aW9uLCBlbHNlIHJldHVybiAwLiBTZXQKKyAgIFZhbHVlRXJyb3Igb24gZXJyb3IuICovCitzdGF0aWMgaW50CithdXRvbnVtYmVyX3N0YXRlX2Vycm9yKEF1dG9OdW1iZXJTdGF0ZSBzdGF0ZSwgaW50IGZpZWxkX25hbWVfaXNfZW1wdHkpCit7CisgICAgaWYgKHN0YXRlID09IEFOU19NQU5VQUwpIHsKKyAgICAgICAgaWYgKGZpZWxkX25hbWVfaXNfZW1wdHkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY2Fubm90IHN3aXRjaCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFudWFsIGZpZWxkIHNwZWNpZmljYXRpb24gdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgZmllbGQgbnVtYmVyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFmaWVsZF9uYW1lX2lzX2VtcHR5KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImNhbm5vdCBzd2l0Y2ggZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBmaWVsZCBudW1iZXJpbmcgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYW51YWwgZmllbGQgc3BlY2lmaWNhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKiAgICBPdXRwdXQgc3RyaW5nIG1hbmFnZW1lbnQgZnVuY3Rpb25zICAgICAgICoqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzU1LDExICs0MDEsMTQgQEAKICovCiBzdGF0aWMgaW50CiBmaWVsZF9uYW1lX3NwbGl0KFNUUklOR0xJQl9DSEFSICpwdHIsIFB5X3NzaXplX3QgbGVuLCBTdWJTdHJpbmcgKmZpcnN0LAotICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpmaXJzdF9pZHgsIEZpZWxkTmFtZUl0ZXJhdG9yICpyZXN0KQorICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpmaXJzdF9pZHgsIEZpZWxkTmFtZUl0ZXJhdG9yICpyZXN0LAorICAgICAgICAgICAgICAgICBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBTVFJJTkdMSUJfQ0hBUiBjOwogICAgIFNUUklOR0xJQl9DSEFSICpwID0gcHRyOwogICAgIFNUUklOR0xJQl9DSEFSICplbmQgPSBwdHIgKyBsZW47CisgICAgaW50IGZpZWxkX25hbWVfaXNfZW1wdHk7CisgICAgaW50IHVzaW5nX251bWVyaWNfaW5kZXg7CiAKICAgICAvKiBmaW5kIHRoZSBwYXJ0IHVwIHVudGlsIHRoZSBmaXJzdCAnLicgb3IgJ1snICovCiAgICAgd2hpbGUgKHAgPCBlbmQpIHsKQEAgLTM4NSwxNSArNDM0LDQxIEBACiAgICAgaWYgKCpmaXJzdF9pZHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvKiB6ZXJvIGxlbmd0aCBzdHJpbmcgaXMgYW4gZXJyb3IgKi8KLSAgICBpZiAoZmlyc3QtPnB0ciA+PSBmaXJzdC0+ZW5kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgZmllbGQgbmFtZSIpOwotICAgICAgICBnb3RvIGVycm9yOworICAgIGZpZWxkX25hbWVfaXNfZW1wdHkgPSBmaXJzdC0+cHRyID49IGZpcnN0LT5lbmQ7CisKKyAgICAvKiBJZiB0aGUgZmllbGQgbmFtZSBpcyBvbWl0dGVkIG9yIGlmIHdlIGhhdmUgYSBudW1lcmljIGluZGV4CisgICAgICAgc3BlY2lmaWVkLCB0aGVuIHdlJ3JlIGRvaW5nIG51bWVyaWMgaW5kZXhpbmcgaW50byBhcmdzLiAqLworICAgIHVzaW5nX251bWVyaWNfaW5kZXggPSBmaWVsZF9uYW1lX2lzX2VtcHR5IHx8ICpmaXJzdF9pZHggIT0gLTE7CisKKyAgICAvKiBXZSBhbHdheXMgZ2V0IGhlcmUgZXhhY3RseSBvbmUgdGltZSBmb3IgZWFjaCBmaWVsZCB3ZSdyZQorICAgICAgIHByb2Nlc3NpbmcuIEFuZCB3ZSBnZXQgaGVyZSBpbiBmaWVsZCBvcmRlciAoY291bnRpbmcgYnkgbGVmdAorICAgICAgIGJyYWNlcykuIFNvIHRoaXMgaXMgdGhlIHBlcmZlY3QgcGxhY2UgdG8gaGFuZGxlIGF1dG9tYXRpYyBmaWVsZAorICAgICAgIG51bWJlcmluZyBpZiB0aGUgZmllbGQgbmFtZSBpcyBvbWl0dGVkLiAqLworCisgICAgLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyB0aGUgYXV0by1udW1iZXJpbmcuIEl0J3Mgbm90IG5lZWRlZCBpZgorICAgICAgIHdlJ3JlIGNhbGxlZCBmcm9tIHN0cmluZy5Gb3JtYXQgcm91dGluZXMsIGJlY2F1c2UgaXQncyBoYW5kbGVkCisgICAgICAgaW4gdGhhdCBjbGFzcyBieSBpdHNlbGYuICovCisgICAgaWYgKGF1dG9fbnVtYmVyKSB7CisgICAgICAgIC8qIEluaXRpYWxpemUgb3VyIGF1dG8gbnVtYmVyaW5nIHN0YXRlIGlmIHRoaXMgaXMgdGhlIGZpcnN0CisgICAgICAgICAgIHRpbWUgd2UncmUgZWl0aGVyIGF1dG8tbnVtYmVyaW5nIG9yIG1hbnVhbGx5IG51bWJlcmluZy4gKi8KKyAgICAgICAgaWYgKGF1dG9fbnVtYmVyLT5hbl9zdGF0ZSA9PSBBTlNfSU5JVCAmJiB1c2luZ19udW1lcmljX2luZGV4KQorICAgICAgICAgICAgYXV0b19udW1iZXItPmFuX3N0YXRlID0gZmllbGRfbmFtZV9pc19lbXB0eSA/CisgICAgICAgICAgICAgICAgQU5TX0FVVE8gOiBBTlNfTUFOVUFMOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSBvdXIgc3RhdGUgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgd2UncmUgZG9pbmcKKyAgICAgICAgICAgdGhpcyB0aW1lIHRocm91Z2guIE9ubHkgY2hlY2sgaWYgd2UncmUgdXNpbmcgYSBudW1lcmljCisgICAgICAgICAgIGluZGV4LiAqLworICAgICAgICBpZiAodXNpbmdfbnVtZXJpY19pbmRleCkKKyAgICAgICAgICAgIGlmIChhdXRvbnVtYmVyX3N0YXRlX2Vycm9yKGF1dG9fbnVtYmVyLT5hbl9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWVfaXNfZW1wdHkpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAvKiBaZXJvIGxlbmd0aCBmaWVsZCBtZWFucyB3ZSB3YW50IHRvIGRvIGF1dG8tbnVtYmVyaW5nIG9mIHRoZQorICAgICAgICAgICBmaWVsZHMuICovCisgICAgICAgIGlmIChmaWVsZF9uYW1lX2lzX2VtcHR5KQorICAgICAgICAgICAgKmZpcnN0X2lkeCA9IChhdXRvX251bWJlci0+YW5fZmllbGRfbnVtYmVyKSsrOwogICAgIH0KIAogICAgIHJldHVybiAxOwotZXJyb3I6Ci0gICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtNDAzLDcgKzQ3OCw4IEBACiAgICAgdGhlIGVudGlyZSBpbnB1dCBzdHJpbmcuCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWdldF9maWVsZF9vYmplY3QoU3ViU3RyaW5nICppbnB1dCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitnZXRfZmllbGRfb2JqZWN0KFN1YlN0cmluZyAqaW5wdXQsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAorICAgICAgICAgICAgICAgICBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBQeU9iamVjdCAqb2JqID0gTlVMTDsKICAgICBpbnQgb2s7CkBAIC00MTQsNyArNDkwLDcgQEAKICAgICBGaWVsZE5hbWVJdGVyYXRvciByZXN0OwogCiAgICAgaWYgKCFmaWVsZF9uYW1lX3NwbGl0KGlucHV0LT5wdHIsIGlucHV0LT5lbmQgLSBpbnB1dC0+cHRyLCAmZmlyc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZpbmRleCwgJnJlc3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmRleCwgJnJlc3QsIGF1dG9fbnVtYmVyKSkgewogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIApAQCAtNTYyLDE0ICs2MzgsMTggQEAKIHBhcnNlX2ZpZWxkKFN1YlN0cmluZyAqc3RyLCBTdWJTdHJpbmcgKmZpZWxkX25hbWUsIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqY29udmVyc2lvbikKIHsKKyAgICAvKiBOb3RlIHRoaXMgZnVuY3Rpb24gd29ya3MgaWYgdGhlIGZpZWxkIG5hbWUgaXMgemVybyBsZW5ndGgsCisgICAgICAgd2hpY2ggaXMgZ29vZC4gIFplcm8gbGVuZ3RoIGZpZWxkIG5hbWVzIGFyZSBoYW5kbGVkIGxhdGVyLCBpbgorICAgICAgIGZpZWxkX25hbWVfc3BsaXQuICovCisKICAgICBTVFJJTkdMSUJfQ0hBUiBjID0gMDsKIAogICAgIC8qIGluaXRpYWxpemUgdGhlc2UsIGFzIHRoZXkgbWF5IGJlIGVtcHR5ICovCiAgICAgKmNvbnZlcnNpb24gPSAnXDAnOwogICAgIFN1YlN0cmluZ19pbml0KGZvcm1hdF9zcGVjLCBOVUxMLCAwKTsKIAotICAgIC8qIHNlYXJjaCBmb3IgdGhlIGZpZWxkIG5hbWUuICBpdCdzIHRlcm1pbmF0ZWQgYnkgdGhlIGVuZCBvZiB0aGUKLSAgICAgICBzdHJpbmcsIG9yIGEgJzonIG9yICchJyAqLworICAgIC8qIFNlYXJjaCBmb3IgdGhlIGZpZWxkIG5hbWUuICBpdCdzIHRlcm1pbmF0ZWQgYnkgdGhlIGVuZCBvZgorICAgICAgIHRoZSBzdHJpbmcsIG9yIGEgJzonIG9yICchJyAqLwogICAgIGZpZWxkX25hbWUtPnB0ciA9IHN0ci0+cHRyOwogICAgIHdoaWxlIChzdHItPnB0ciA8IHN0ci0+ZW5kKSB7CiAgICAgICAgIHN3aXRjaCAoYyA9ICooc3RyLT5wdHIrKykpIHsKQEAgLTYxMiwxNSArNjkyLDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDE7Ci0KICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAgICAgICAvKiBlbmQgb2Ygc3RyaW5nLCB0aGVyZSdzIG5vIGZvcm1hdF9zcGVjIG9yIGNvbnZlcnNpb24gKi8KICAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5wdHI7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KKworICAgIHJldHVybiAxOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjQ3LDggKzcyNCw4IEBACiAgICBzdHJpbmcgKG9yIHNvbWV0aGluZyB0byBiZSBleHBhbmRlZCkgKi8KIHN0YXRpYyBpbnQKIE1hcmt1cEl0ZXJhdG9yX25leHQoTWFya3VwSXRlcmF0b3IgKnNlbGYsIFN1YlN0cmluZyAqbGl0ZXJhbCwKLSAgICAgICAgICAgICAgICAgICAgU3ViU3RyaW5nICpmaWVsZF9uYW1lLCBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqY29udmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICpmaWVsZF9wcmVzZW50LCBTdWJTdHJpbmcgKmZpZWxkX25hbWUsCisgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsIFNUUklOR0xJQl9DSEFSICpjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykKIHsKICAgICBpbnQgYXRfZW5kOwpAQCAtNjY0LDYgKzc0MSw3IEBACiAgICAgU3ViU3RyaW5nX2luaXQoZm9ybWF0X3NwZWMsIE5VTEwsIDApOwogICAgICpjb252ZXJzaW9uID0gJ1wwJzsKICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMDsKKyAgICAqZmllbGRfcHJlc2VudCA9IDA7CiAKICAgICAvKiBObyBtb3JlIGlucHV0LCBlbmQgb2YgaXRlcmF0b3IuICBUaGlzIGlzIHRoZSBub3JtYWwgZXhpdAogICAgICAgIHBhdGguICovCkBAIC03MjUsNiArODAzLDcgQEAKICAgICAvKiB0aGlzIGlzIG1hcmt1cCwgZmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgYnkgY291bnRpbmcgbmVzdGVkCiAgICAgICAgYnJhY2VzLiAgbm90ZSB0aGF0IHRoaXMgcHJvaGliaXRzIGVzY2FwZWQgYnJhY2VzLCBzbyB0aGF0CiAgICAgICAgZm9ybWF0X3NwZWNzIGNhbm5vdCBoYXZlIGJyYWNlcyBpbiB0aGVtLiAqLworICAgICpmaWVsZF9wcmVzZW50ID0gMTsKICAgICBjb3VudCA9IDE7CiAKICAgICBzdGFydCA9IHNlbGYtPnN0ci5wdHI7CkBAIC03NDksMTMgKzgyOCw2IEBACiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlX2ZpZWxkKCZzLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgY29udmVyc2lvbikgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgICAgICAvKiBhIHplcm8gbGVuZ3RoIGZpZWxkX25hbWUgaXMgYW4gZXJyb3IgKi8KLSAgICAgICAgICAgICAgICBpZiAoZmllbGRfbmFtZS0+cHRyID09IGZpZWxkX25hbWUtPmVuZCkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInplcm8gbGVuZ3RoIGZpZWxkIG5hbWUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGZvcm1hdCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgICB9CkBAIC04MDMsMTMgKzg3NSwxNyBAQAogICAgY29tcHV0ZSB0aGUgcmVzdWx0IGFuZCB3cml0ZSBpdCB0byBvdXRwdXQuCiAgICBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgaXMgYW4gb3B0aW1pemF0aW9uLiAgaWYgaXQncyBmYWxzZSwKICAgIGp1c3Qgb3V0cHV0IHRoZSBzdHJpbmcgZGlyZWN0bHksIG90aGVyd2lzZSByZWN1cnNpdmVseSBleHBhbmQgdGhlCi0gICBmb3JtYXRfc3BlYyBzdHJpbmcuICovCisgICBmb3JtYXRfc3BlYyBzdHJpbmcuCisKKyAgIGZpZWxkX25hbWUgaXMgYWxsb3dlZCB0byBiZSB6ZXJvIGxlbmd0aCwgaW4gd2hpY2ggY2FzZSB3ZQorICAgYXJlIGRvaW5nIGF1dG8gZmllbGQgbnVtYmVyaW5nLgorKi8KIAogc3RhdGljIGludAogb3V0cHV0X21hcmt1cChTdWJTdHJpbmcgKmZpZWxkX25hbWUsIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgIGludCBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcsIFNUUklOR0xJQl9DSEFSIGNvbnZlcnNpb24sCiAgICAgICAgICAgICAgIE91dHB1dFN0cmluZyAqb3V0cHV0LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncywKLSAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCkKKyAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmZpZWxkb2JqID0gTlVMTDsKQEAgLTgxOCw3ICs4OTQsNyBAQAogICAgIGludCByZXN1bHQgPSAwOwogCiAgICAgLyogY29udmVydCBmaWVsZF9uYW1lIHRvIGFuIG9iamVjdCAqLwotICAgIGZpZWxkb2JqID0gZ2V0X2ZpZWxkX29iamVjdChmaWVsZF9uYW1lLCBhcmdzLCBrd2FyZ3MpOworICAgIGZpZWxkb2JqID0gZ2V0X2ZpZWxkX29iamVjdChmaWVsZF9uYW1lLCBhcmdzLCBrd2FyZ3MsIGF1dG9fbnVtYmVyKTsKICAgICBpZiAoZmllbGRvYmogPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwogCkBAIC04MzUsNyArOTExLDggQEAKIAogICAgIC8qIGlmIG5lZWRlZCwgcmVjdXJpdmVseSBjb21wdXRlIHRoZSBmb3JtYXRfc3BlYyAqLwogICAgIGlmIChmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpIHsKLSAgICAgICAgdG1wID0gYnVpbGRfc3RyaW5nKGZvcm1hdF9zcGVjLCBhcmdzLCBrd2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aC0xKTsKKyAgICAgICAgdG1wID0gYnVpbGRfc3RyaW5nKGZvcm1hdF9zcGVjLCBhcmdzLCBrd2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b19udW1iZXIpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAKQEAgLTg2OSwyNiArOTQ2LDI4IEBACiAqLwogc3RhdGljIGludAogZG9fbWFya3VwKFN1YlN0cmluZyAqaW5wdXQsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAotICAgICAgICAgIE91dHB1dFN0cmluZyAqb3V0cHV0LCBpbnQgcmVjdXJzaW9uX2RlcHRoKQorICAgICAgICAgIE91dHB1dFN0cmluZyAqb3V0cHV0LCBpbnQgcmVjdXJzaW9uX2RlcHRoLCBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBNYXJrdXBJdGVyYXRvciBpdGVyOwogICAgIGludCBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmc7CiAgICAgaW50IHJlc3VsdDsKKyAgICBpbnQgZmllbGRfcHJlc2VudDsKICAgICBTdWJTdHJpbmcgbGl0ZXJhbDsKICAgICBTdWJTdHJpbmcgZmllbGRfbmFtZTsKICAgICBTdWJTdHJpbmcgZm9ybWF0X3NwZWM7CiAgICAgU1RSSU5HTElCX0NIQVIgY29udmVyc2lvbjsKIAogICAgIE1hcmt1cEl0ZXJhdG9yX2luaXQoJml0ZXIsIGlucHV0LT5wdHIsIGlucHV0LT5lbmQgLSBpbnB1dC0+cHRyKTsKLSAgICB3aGlsZSAoKHJlc3VsdCA9IE1hcmt1cEl0ZXJhdG9yX25leHQoJml0ZXIsICZsaXRlcmFsLCAmZmllbGRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjLCAmY29udmVyc2lvbiwKKyAgICB3aGlsZSAoKHJlc3VsdCA9IE1hcmt1cEl0ZXJhdG9yX25leHQoJml0ZXIsICZsaXRlcmFsLCAmZmllbGRfcHJlc2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX25hbWUsICZmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpKSA9PSAyKSB7CiAgICAgICAgIGlmICghb3V0cHV0X2RhdGEob3V0cHV0LCBsaXRlcmFsLnB0ciwgbGl0ZXJhbC5lbmQgLSBsaXRlcmFsLnB0cikpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGZpZWxkX25hbWUucHRyICE9IGZpZWxkX25hbWUuZW5kKQorICAgICAgICBpZiAoZmllbGRfcHJlc2VudCkKICAgICAgICAgICAgIGlmICghb3V0cHV0X21hcmt1cCgmZmllbGRfbmFtZSwgJmZvcm1hdF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgY29udmVyc2lvbiwgb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3YXJncywgcmVjdXJzaW9uX2RlcHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aCwgYXV0b19udW1iZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTAxLDcgKzk4MCw3IEBACiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWxkX3N0cmluZyhTdWJTdHJpbmcgKmlucHV0LCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncywKLSAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uX2RlcHRoKQorICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgsIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIE91dHB1dFN0cmluZyBvdXRwdXQ7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CkBAIC05MjMsNyArMTAwMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX1NJWkVfSU5DUkVNRU5UKSkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgaWYgKCFkb19tYXJrdXAoaW5wdXQsIGFyZ3MsIGt3YXJncywgJm91dHB1dCwgcmVjdXJzaW9uX2RlcHRoKSkgeworICAgIGlmICghZG9fbWFya3VwKGlucHV0LCBhcmdzLCBrd2FyZ3MsICZvdXRwdXQsIHJlY3Vyc2lvbl9kZXB0aCwKKyAgICAgICAgICAgICAgICAgICBhdXRvX251bWJlcikpIHsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KIApAQCAtOTU3LDggKzEwMzcsMTEgQEAKICAgICAqLwogICAgIGludCByZWN1cnNpb25fZGVwdGggPSAyOwogCisgICAgQXV0b051bWJlciBhdXRvX251bWJlcjsKKworICAgIEF1dG9OdW1iZXJfSW5pdCgmYXV0b19udW1iZXIpOwogICAgIFN1YlN0cmluZ19pbml0KCZpbnB1dCwgU1RSSU5HTElCX1NUUihzZWxmKSwgU1RSSU5HTElCX0xFTihzZWxmKSk7Ci0gICAgcmV0dXJuIGJ1aWxkX3N0cmluZygmaW5wdXQsIGFyZ3MsIGt3YXJncywgcmVjdXJzaW9uX2RlcHRoKTsKKyAgICByZXR1cm4gYnVpbGRfc3RyaW5nKCZpbnB1dCwgYXJncywga3dhcmdzLCByZWN1cnNpb25fZGVwdGgsICZhdXRvX251bWJlcik7CiB9CiAKIApAQCAtMTAwMyw4ICsxMDg2LDkgQEAKICAgICBTdWJTdHJpbmcgZm9ybWF0X3NwZWM7CiAgICAgU1RSSU5HTElCX0NIQVIgY29udmVyc2lvbjsKICAgICBpbnQgZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nOwotICAgIGludCByZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdC0+aXRfbWFya3VwLCAmbGl0ZXJhbCwgJmZpZWxkX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjLCAmY29udmVyc2lvbiwKKyAgICBpbnQgZmllbGRfcHJlc2VudDsKKyAgICBpbnQgcmVzdWx0ID0gTWFya3VwSXRlcmF0b3JfbmV4dCgmaXQtPml0X21hcmt1cCwgJmxpdGVyYWwsICZmaWVsZF9wcmVzZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsICZjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpOwogCiAgICAgLyogYWxsIG9mIHRoZSBTdWJTdHJpbmcgb2JqZWN0cyBwb2ludCBpbnRvIGl0LT5zdHIsIHNvIG5vCkBAIC0xMDE5LDcgKzExMDMsNiBAQAogICAgICAgICBQeU9iamVjdCAqZm9ybWF0X3NwZWNfc3RyID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKmNvbnZlcnNpb25fc3RyID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKnR1cGxlID0gTlVMTDsKLSAgICAgICAgaW50IGhhc19maWVsZCA9IGZpZWxkX25hbWUucHRyICE9IGZpZWxkX25hbWUuZW5kOwogCiAgICAgICAgIGxpdGVyYWxfc3RyID0gU3ViU3RyaW5nX25ld19vYmplY3QoJmxpdGVyYWwpOwogICAgICAgICBpZiAobGl0ZXJhbF9zdHIgPT0gTlVMTCkKQEAgLTEwMzEsNyArMTExNCw3IEBACiAKICAgICAgICAgLyogaWYgZmllbGRfbmFtZSBpcyBub24temVybyBsZW5ndGgsIHJldHVybiBhIHN0cmluZyBmb3IKICAgICAgICAgICAgZm9ybWF0X3NwZWMgKGV2ZW4gaWYgemVybyBsZW5ndGgpLCBlbHNlIHJldHVybiBOb25lICovCi0gICAgICAgIGZvcm1hdF9zcGVjX3N0ciA9IChoYXNfZmllbGQgPworICAgICAgICBmb3JtYXRfc3BlY19zdHIgPSAoZmllbGRfcHJlc2VudCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJTdHJpbmdfbmV3X29iamVjdF9vcl9lbXB0eSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJTdHJpbmdfbmV3X29iamVjdCkoJmZvcm1hdF9zcGVjKTsKICAgICAgICAgaWYgKGZvcm1hdF9zcGVjX3N0ciA9PSBOVUxMKQpAQCAtMTI1NSw5ICsxMzM4LDExIEBACiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIGl0LT5zdHIgPSBzZWxmOwogCisgICAgLyogUGFzcyBpbiBhdXRvX251bWJlciA9IE5VTEwuIFdlJ2xsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yCisgICAgICAgZmlyc3Rfb2JqIGluIHRoYXQgY2FzZS4gKi8KICAgICBpZiAoIWZpZWxkX25hbWVfc3BsaXQoU1RSSU5HTElCX1NUUihzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0xFTihzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpcnN0LCAmZmlyc3RfaWR4LCAmaXQtPml0X2ZpZWxkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpcnN0LCAmZmlyc3RfaWR4LCAmaXQtPml0X2ZpZWxkLCBOVUxMKSkKICAgICAgICAgZ290byBkb25lOwogCiAgICAgLyogZmlyc3QgYmVjb21lcyBhbiBpbnRlZ2VyLCBpZiBwb3NzaWJsZTsgZWxzZSBhIHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCmluZGV4IGRhYWEyZTIuLjg0ZTQ2MTYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKQEAgLTExLDE4ICsxMSwyMyBAQAogI2RlZmluZSBTVFJJTkdMSUJfVFlQRV9OQU1FICAgICAgInN0cmluZyIKICNkZWZpbmUgU1RSSU5HTElCX1BBUlNFX0NPREUgICAgICJTIgogI2RlZmluZSBTVFJJTkdMSUJfRU1QVFkgICAgICAgICAgbnVsbHN0cmluZworI2RlZmluZSBTVFJJTkdMSUJfSVNTUEFDRSAgICAgICAgUHlfSVNTUEFDRQorI2RlZmluZSBTVFJJTkdMSUJfSVNMSU5FQlJFQUsoeCkgKCh4ID09ICdcbicpIHx8ICh4ID09ICdccicpKQogI2RlZmluZSBTVFJJTkdMSUJfSVNERUNJTUFMKHgpICAgKCh4ID49ICcwJykgJiYgKHggPD0gJzknKSkKICNkZWZpbmUgU1RSSU5HTElCX1RPREVDSU1BTCh4KSAgIChTVFJJTkdMSUJfSVNERUNJTUFMKHgpID8gKHggLSAnMCcpIDogLTEpCi0jZGVmaW5lIFNUUklOR0xJQl9UT1VQUEVSICAgICAgICB0b3VwcGVyCi0jZGVmaW5lIFNUUklOR0xJQl9UT0xPV0VSICAgICAgICB0b2xvd2VyCisjZGVmaW5lIFNUUklOR0xJQl9UT1VQUEVSICAgICAgICBQeV9UT1VQUEVSCisjZGVmaW5lIFNUUklOR0xJQl9UT0xPV0VSICAgICAgICBQeV9UT0xPV0VSCiAjZGVmaW5lIFNUUklOR0xJQl9GSUxMICAgICAgICAgICBtZW1zZXQKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlTdHJpbmdfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplCiAjZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBfUHlTdHJpbmdfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVN0cmluZ19DaGVjawotI2RlZmluZSBTVFJJTkdMSUJfQ01QICAgICAgICAgICAgbWVtY21wCisjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVN0cmluZ19DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKICNkZWZpbmUgU1RSSU5HTElCX0dST1VQSU5HICAgICAgIF9QeVN0cmluZ19JbnNlcnRUaG91c2FuZHNHcm91cGluZworI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkdfTE9DQUxFIF9QeVN0cmluZ19JbnNlcnRUaG91c2FuZHNHcm91cGluZ0xvY2FsZQorCisjZGVmaW5lIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAxCiAKICNlbmRpZiAvKiAhU1RSSU5HTElCX1NUUklOR0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAppbmRleCA0MzkwZTIyLi4xZTEzMmU1IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaApAQCAtMSwxMyArMSw2IEBACiAvKiBOT1RFOiB0aGlzIEFQSSBpcyAtT05MWS0gZm9yIHVzZSB3aXRoIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzdHJpbmdzLiAqLwogLyogRG8gbm90IHVzZSBpdCB3aXRoIFVuaWNvZGUuICovCiAKLSNpbmNsdWRlICJieXRlc19tZXRob2RzLmgiCi0KLSNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKLSN3YXJuaW5nICJTVFJJTkdMSUJfTVVUQUJMRSBub3QgZGVmaW5lZCBiZWZvcmUgI2luY2x1ZGUsIGFzc3VtaW5nIDAiCi0jZGVmaW5lIFNUUklOR0xJQl9NVVRBQkxFIDAKLSNlbmRpZgotCiAvKiB0aGUgbW9yZSBjb21wbGljYXRlZCBtZXRob2RzLiAgcGFydHMgb2YgdGhlc2Ugc2hvdWxkIGJlIHB1bGxlZCBvdXQgaW50byB0aGUKICAgIHNoYXJlZCBjb2RlIGluIGJ5dGVzX21ldGhvZHMuYyB0byBjdXQgZG93biBvbiBkdXBsaWNhdGUgY29kZSBibG9hdC4gICovCiAKQEAgLTI1LDEwICsxOCwxMCBAQAogICAgIHNpemVfdCBpLCBqOwogICAgIFB5T2JqZWN0ICp1OwogICAgIGludCB0YWJzaXplID0gODsKLQorICAgIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICAKICAgICAvKiBGaXJzdCBwYXNzOiBkZXRlcm1pbmUgc2l6ZSBvZiBvdXRwdXQgc3RyaW5nICovCiAgICAgaSA9IGogPSAwOwogICAgIGUgPSBTVFJJTkdMSUJfU1RSKHNlbGYpICsgU1RSSU5HTElCX0xFTihzZWxmKTsKQEAgLTU1LDIwICs0OCwyMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotCisgICAgCiAgICAgaWYgKChpICsgaikgPiBQWV9TU0laRV9UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInJlc3VsdCBpcyB0b28gbG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KKyAgICAKICAgICAvKiBTZWNvbmQgcGFzczogY3JlYXRlIG91dHB1dCBzdHJpbmcgYW5kIGZpbGwgaXQgKi8KICAgICB1ID0gU1RSSU5HTElCX05FVyhOVUxMLCBpICsgaik7CiAgICAgaWYgKCF1KQogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIAogICAgIGogPSAwOwogICAgIHEgPSBTVFJJTkdMSUJfU1RSKHUpOwotCisgICAgCiAgICAgZm9yIChwID0gU1RSSU5HTElCX1NUUihzZWxmKTsgcCA8IGU7IHArKykKICAgICAgICAgaWYgKCpwID09ICdcdCcpIHsKICAgICAgICAgICAgIGlmICh0YWJzaXplID4gMCkgewpAQCAtODQsNyArNzcsNyBAQAogICAgICAgICAgICAgaWYgKCpwID09ICdcbicgfHwgKnAgPT0gJ1xyJykKICAgICAgICAgICAgICAgICBqID0gMDsKICAgICAgICAgfQotCisgICAgCiAgICAgcmV0dXJuIHU7CiB9CiAKQEAgLTExMCwxNiArMTAzLDE2IEBACiAgICAgfQogCiAgICAgdSA9IFNUUklOR0xJQl9ORVcoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIFNUUklOR0xJQl9MRU4oc2VsZikgKyByaWdodCk7CisJCQkJICAgbGVmdCArIFNUUklOR0xJQl9MRU4oc2VsZikgKyByaWdodCk7CiAgICAgaWYgKHUpIHsKICAgICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICBtZW1zZXQoU1RSSU5HTElCX1NUUih1KSwgZmlsbCwgbGVmdCk7CiAgICAgICAgIFB5X01FTUNQWShTVFJJTkdMSUJfU1RSKHUpICsgbGVmdCwKLSAgICAgICAgICAgICAgIFNUUklOR0xJQl9TVFIoc2VsZiksCi0gICAgICAgICAgICAgICBTVFJJTkdMSUJfTEVOKHNlbGYpKTsKKwkgICAgICAgU1RSSU5HTElCX1NUUihzZWxmKSwKKwkgICAgICAgU1RSSU5HTElCX0xFTihzZWxmKSk7CiAgICAgICAgIGlmIChyaWdodCkKICAgICAgICAgICAgIG1lbXNldChTVFJJTkdMSUJfU1RSKHUpICsgbGVmdCArIFNUUklOR0xJQl9MRU4oc2VsZiksCi0gICAgICAgICAgICAgICAgICAgZmlsbCwgcmlnaHQpOworCQkgICBmaWxsLCByaWdodCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHU7CkBAIC0yNjksODcgKzI2MiwzIEBACiAKICAgICByZXR1cm4gKFB5T2JqZWN0KikgczsKIH0KLQotCi0jZGVmaW5lIF9TVFJJTkdMSUJfU1BMSVRfQVBQRU5EKGRhdGEsIGxlZnQsIHJpZ2h0KSAgICAgICAgICAgICAgXAotICAgICAgICBzdHIgPSBTVFJJTkdMSUJfTkVXKChkYXRhKSArIChsZWZ0KSwgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICBcCi0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotCi1QeURvY19TVFJWQVIoc3BsaXRsaW5lc19fZG9jX18sCi0iQi5zcGxpdGxpbmVzKFtrZWVwZW5kc10pIC0+IGxpc3Qgb2YgbGluZXNcblwKLVxuXAotUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gQiwgYnJlYWtpbmcgYXQgbGluZSBib3VuZGFyaWVzLlxuXAotTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3QgdW5sZXNzIGtlZXBlbmRzXG5cCi1pcyBnaXZlbiBhbmQgdHJ1ZS4iKTsKLQotc3RhdGljIFB5T2JqZWN0Kgotc3RyaW5nbGliX3NwbGl0bGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IGtlZXBlbmRzID0gMDsKLSAgICBQeU9iamVjdCAqbGlzdDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIGNoYXIgKmRhdGE7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOnNwbGl0bGluZXMiLCAma2VlcGVuZHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGRhdGEgPSBTVFJJTkdMSUJfU1RSKHNlbGYpOwotICAgIGxlbiA9IFNUUklOR0xJQl9MRU4oc2VsZik7Ci0KLSAgICAvKiBUaGlzIGRvZXMgbm90IHVzZSB0aGUgcHJlYWxsb2NhdGVkIGxpc3QgYmVjYXVzZSBzcGxpdGxpbmVzIGlzCi0gICAgICAgdXN1YWxseSBydW4gd2l0aCBodW5kcmVkcyBvZiBuZXdsaW5lcy4gIFRoZSBvdmVyaGVhZCBvZgotICAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIFB5TGlzdF9TRVRfSVRFTSBhbmQgYXBwZW5kIGNhdXNlcyBhYm91dCBhCi0gICAgICAgMi0zJSBzbG93ZG93biBmb3IgdGhhdCBjb21tb24gY2FzZS4gIEEgc21hcnRlciBpbXBsZW1lbnRhdGlvbgotICAgICAgIGNvdWxkIG1vdmUgdGhlIGlmIGNoZWNrIG91dCwgc28gdGhlIFNFVF9JVEVNcyBhcmUgZG9uZSBmaXJzdAotICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCi0gICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCi0KLSAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDwgbGVuOyApIHsKLSAgICAgICAgUHlfc3NpemVfdCBlb2w7Ci0KLSAgICAgICAgLyogRmluZCBhIGxpbmUgYW5kIGFwcGVuZCBpdCAqLwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBkYXRhW2ldICE9ICdcbicgJiYgZGF0YVtpXSAhPSAnXHInKQotICAgICAgICAgICAgaSsrOwotCi0gICAgICAgIC8qIFNraXAgdGhlIGxpbmUgYnJlYWsgcmVhZGluZyBDUkxGIGFzIG9uZSBsaW5lIGJyZWFrICovCi0gICAgICAgIGVvbCA9IGk7Ci0gICAgICAgIGlmIChpIDwgbGVuKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSAnXHInICYmIGkgKyAxIDwgbGVuICYmCi0gICAgICAgICAgICAgICAgZGF0YVtpKzFdID09ICdcbicpCi0gICAgICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGlmIChrZWVwZW5kcykKLSAgICAgICAgICAgICAgICBlb2wgPSBpOwotICAgICAgICB9Ci0gICAgICAgIF9TVFJJTkdMSUJfU1BMSVRfQVBQRU5EKGRhdGEsIGosIGVvbCk7Ci0gICAgICAgIGogPSBpOwotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBfU1RSSU5HTElCX1NQTElUX0FQUEVORChkYXRhLCBqLCBsZW4pOwotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotCi0gb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0jdW5kZWYgX1NUUklOR0xJQl9TUExJVF9BUFBFTkQKLQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKaW5kZXggOGY4N2ZlMC4uZGQ4MTRmNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5lIFNUUklOR0xJQl9UWVBFX05BTUUgICAgICAidW5pY29kZSIKICNkZWZpbmUgU1RSSU5HTElCX1BBUlNFX0NPREUgICAgICJVIgogI2RlZmluZSBTVFJJTkdMSUJfRU1QVFkgICAgICAgICAgdW5pY29kZV9lbXB0eQorI2RlZmluZSBTVFJJTkdMSUJfSVNTUEFDRSAgICAgICAgUHlfVU5JQ09ERV9JU1NQQUNFCisjZGVmaW5lIFNUUklOR0xJQl9JU0xJTkVCUkVBSyAgICBCTE9PTV9MSU5FQlJFQUsKICNkZWZpbmUgU1RSSU5HTElCX0lTREVDSU1BTCAgICAgIFB5X1VOSUNPREVfSVNERUNJTUFMCiAjZGVmaW5lIFNUUklOR0xJQl9UT0RFQ0lNQUwgICAgICBQeV9VTklDT0RFX1RPREVDSU1BTAogI2RlZmluZSBTVFJJTkdMSUJfVE9VUFBFUiAgICAgICAgUHlfVU5JQ09ERV9UT1VQUEVSCkBAIC0yMSw2ICsyMyw3IEBACiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUKICNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIFB5VW5pY29kZV9SZXNpemUKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjaworI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX0dST1VQSU5HICAgICAgIF9QeVVuaWNvZGVfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKIAogI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAwMDAwMApAQCAtMzEsMjMgKzM0LDQgQEAKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCi0vKiBTVFJJTkdMSUJfQ01QIHdhcyBkZWZpbmVkIGFzOgotCi1QeV9MT0NBTF9JTkxJTkUoaW50KQotU1RSSU5HTElCX0NNUChjb25zdCBQeV9VTklDT0RFKiBzdHIsIGNvbnN0IFB5X1VOSUNPREUqIG90aGVyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoc3RyWzBdICE9IG90aGVyWzBdKQotICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gbWVtY21wKCh2b2lkKikgc3RyLCAodm9pZCopIG90aGVyLCBsZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpOwotfQotCi1idXQgdW5mb3J0dW5hdGVseSB0aGF0IGdpdmVzIGEgZXJyb3IgaWYgdGhlIGZ1bmN0aW9uIGlzbid0IHVzZWQgaW4gYSBmaWxlIHRoYXQKLWluY2x1ZGVzIHRoaXMgZmlsZS4gIFNvLCByZWx1Y3RhbnRseSBjb252ZXJ0IGl0IHRvIGEgbWFjcm8gaW5zdGVhZC4gKi8KLQotI2RlZmluZSBTVFJJTkdMSUJfQ01QKHN0ciwgb3RoZXIsIGxlbikgXAotICAgICgoKHN0cilbMF0gIT0gKG90aGVyKVswXSkgPyBcCi0gICAgIDEgOiBcCi0gICAgIG1lbWNtcCgodm9pZCopIChzdHIpLCAodm9pZCopIChvdGhlciksIChsZW4pICogc2l6ZW9mKFB5X1VOSUNPREUpKSkKLQotCiAjZW5kaWYgLyogIVNUUklOR0xJQl9VTklDT0RFREVGU19IICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ29iamVjdC5jIGIvT2JqZWN0cy9zdHJpbmdvYmplY3QuYwppbmRleCBlMzdiNTc5Li42ZDNjYThlIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ29iamVjdC5jCisrKyBiL09iamVjdHMvc3RyaW5nb2JqZWN0LmMKQEAgLTQsOSArNCwxMCBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KIAogI2lmZGVmIENPVU5UX0FMTE9DUwotaW50IG51bGxfc3RyaW5ncywgb25lX3N0cmluZ3M7CitQeV9zc2l6ZV90IG51bGxfc3RyaW5ncywgb25lX3N0cmluZ3M7CiAjZW5kaWYKIAogc3RhdGljIFB5U3RyaW5nT2JqZWN0ICpjaGFyYWN0ZXJzW1VDSEFSX01BWCArIDFdOwpAQCAtMjIsNiArMjMsMTQgQEAKICovCiBzdGF0aWMgUHlPYmplY3QgKmludGVybmVkOwogCisvKiBQeVN0cmluZ09iamVjdF9TSVpFIGdpdmVzIHRoZSBiYXNpYyBzaXplIG9mIGEgc3RyaW5nOyBhbnkgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZvciBhIHN0cmluZyBvZiBsZW5ndGggbiBzaG91bGQgcmVxdWVzdCBQeVN0cmluZ09iamVjdF9TSVpFICsgbiBieXRlcy4KKworICAgVXNpbmcgUHlTdHJpbmdPYmplY3RfU0laRSBpbnN0ZWFkIG9mIHNpemVvZihQeVN0cmluZ09iamVjdCkgc2F2ZXMKKyAgIDMgYnl0ZXMgcGVyIHN0cmluZyBhbGxvY2F0aW9uIG9uIGEgdHlwaWNhbCBzeXN0ZW0uCisqLworI2RlZmluZSBQeVN0cmluZ09iamVjdF9TSVpFIChvZmZzZXRvZihQeVN0cmluZ09iamVjdCwgb2Jfc3ZhbCkgKyAxKQorCiAvKgogICAgRm9yIGJvdGggUHlTdHJpbmdfRnJvbVN0cmluZygpIGFuZCBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgpLCB0aGUKICAgIHBhcmFtZXRlciBgc2l6ZScgZGVub3RlcyBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhbGxvY2F0ZSwgbm90IGNvdW50aW5nIGFueQpAQCAtNzQsMTMgKzgzLDEzIEBACiAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilvcDsKICAgICB9CiAKLSAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSkgeworICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSBQeVN0cmluZ09iamVjdF9TSVpFKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAic3RyaW5nIGlzIHRvbyBsYXJnZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBJbmxpbmUgUHlPYmplY3RfTmV3VmFyICovCi0gICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSArIHNpemUpOworICAgIG9wID0gKFB5U3RyaW5nT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5U3RyaW5nT2JqZWN0X1NJWkUgKyBzaXplKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeVN0cmluZ19UeXBlLCBzaXplKTsKQEAgLTExNCw3ICsxMjMsNyBAQAogCiAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKICAgICBzaXplID0gc3RybGVuKHN0cik7Ci0gICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCAtIHNpemVvZihQeVN0cmluZ09iamVjdCkpIHsKKyAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gUHlTdHJpbmdPYmplY3RfU0laRSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICJzdHJpbmcgaXMgdG9vIGxvbmcgZm9yIGEgUHl0aG9uIHN0cmluZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzNSw3ICsxNDQsNyBAQAogICAgIH0KIAogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXdWYXIgKi8KLSAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlTdHJpbmdPYmplY3QpICsgc2l6ZSk7CisgICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlTdHJpbmdPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5U3RyaW5nX1R5cGUsIHNpemUpOwpAQCAtMTgwLDYgKzE4OSw5IEBACiAgICAgLyogc3RlcCAxOiBmaWd1cmUgb3V0IGhvdyBsYXJnZSBhIGJ1ZmZlciB3ZSBuZWVkICovCiAgICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZyA9IDA7CisjZW5kaWYKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBmOwogICAgICAgICAgICAgd2hpbGUgKCorK2YgJiYgKmYgIT0gJyUnICYmICFpc2FscGhhKFB5X0NIQVJNQVNLKCpmKSkpCiAgICAgICAgICAgICAgICAgOwpAQCAtMTg3LDkgKzE5OSwyMSBAQAogICAgICAgICAgICAgLyogc2tpcCB0aGUgJ2wnIG9yICd6JyBpbiB7JWxkLCAlemQsICVsdSwgJXp1fSBzaW5jZQogICAgICAgICAgICAgICogdGhleSBkb24ndCBhZmZlY3QgdGhlIGFtb3VudCBvZiBzcGFjZSB3ZSByZXNlcnZlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoKCpmID09ICdsJyB8fCAqZiA9PSAneicpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnKSkKKyAgICAgICAgICAgIGlmICgqZiA9PSAnbCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpIHsKKyAgICAgICAgICAgICAgICAgICAgKytmOworICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZbMV0gPT0gJ2wnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZbMl0gPT0gJ2QnIHx8IGZbMl0gPT0gJ3UnKSkgeworICAgICAgICAgICAgICAgICAgICBsb25nbG9uZ2ZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICBmICs9IDI7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgqZiA9PSAneicgJiYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnKSkgewogICAgICAgICAgICAgICAgICsrZjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNoICgqZikgewogICAgICAgICAgICAgY2FzZSAnYyc6CkBAIC0yMDAsMTAgKzIyNCwyMSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnZCc6IGNhc2UgJ3UnOiBjYXNlICdpJzogY2FzZSAneCc6CiAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyhjb3VudCwgaW50KTsKLSAgICAgICAgICAgICAgICAvKiAyMCBieXRlcyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdAotICAgICAgICAgICAgICAgICAgIGludGVnZXIuICBEZWNpbWFsIHRha2VzIHRoZSBtb3N0IHNwYWNlLgotICAgICAgICAgICAgICAgICAgIFRoaXMgaXNuJ3QgZW5vdWdoIGZvciBvY3RhbC4gKi8KLSAgICAgICAgICAgICAgICBuICs9IDIwOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgLyogTmVlZCBhdCBtb3N0CisgICAgICAgICAgICAgICAgICAgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKKyAgICAgICAgICAgICAgICAgICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIKKyAgICAgICAgICAgICAgICAgICBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KKyAgICAgICAgICAgICAgICBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgICAgICBuICs9IDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAvKiAyMCBieXRlcyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdAorICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyLiAgRGVjaW1hbCB0YWtlcyB0aGUgbW9zdAorICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS4gIFRoaXMgaXNuJ3QgZW5vdWdoIGZvcgorICAgICAgICAgICAgICAgICAgICAgICBvY3RhbC4gKi8KKyAgICAgICAgICAgICAgICAgICAgbiArPSAyMDsKKwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgcyA9IHZhX2FyZyhjb3VudCwgY2hhciopOwpAQCAtMjQ2LDYgKzI4MSw5IEBACiAgICAgICAgICAgICBjb25zdCBjaGFyKiBwID0gZisrOwogICAgICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICAgICAgaW50IGxvbmdmbGFnID0gMDsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZyA9IDA7CisjZW5kaWYKICAgICAgICAgICAgIGludCBzaXplX3RmbGFnID0gMDsKICAgICAgICAgICAgIC8qIHBhcnNlIHRoZSB3aWR0aC5wcmVjaXNpb24gcGFydCAod2UncmUgb25seQogICAgICAgICAgICAgICAgaW50ZXJlc3RlZCBpbiB0aGUgcHJlY2lzaW9uIHZhbHVlLCBpZiBhbnkpICovCkBAIC0yNjAsMTQgKzI5OCwyMiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgd2hpbGUgKCpmICYmICpmICE9ICclJyAmJiAhaXNhbHBoYShQeV9DSEFSTUFTSygqZikpKQogICAgICAgICAgICAgICAgIGYrKzsKLSAgICAgICAgICAgIC8qIGhhbmRsZSB0aGUgbG9uZyBmbGFnLCBidXQgb25seSBmb3IgJWxkIGFuZCAlbHUuCi0gICAgICAgICAgICAgICBvdGhlcnMgY2FuIGJlIGFkZGVkIHdoZW4gbmVjZXNzYXJ5LiAqLwotICAgICAgICAgICAgaWYgKCpmID09ICdsJyAmJiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZ2ZsYWcgPSAxOwotICAgICAgICAgICAgICAgICsrZjsKKyAgICAgICAgICAgIC8qIEhhbmRsZSAlbGQsICVsdSwgJWxsZCBhbmQgJWxsdS4gKi8KKyAgICAgICAgICAgIGlmICgqZiA9PSAnbCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2ZsYWcgPSAxOworICAgICAgICAgICAgICAgICAgICArK2Y7CisgICAgICAgICAgICAgICAgfQorI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZlsxXSA9PSAnbCcgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZlsyXSA9PSAnZCcgfHwgZlsyXSA9PSAndScpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvbmdsb25nZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIGYgKz0gMjsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGhhbmRsZSB0aGUgc2l6ZV90IGZsYWcuICovCi0gICAgICAgICAgICBpZiAoKmYgPT0gJ3onICYmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKCpmID09ICd6JyAmJiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScpKSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90ZmxhZyA9IDE7CiAgICAgICAgICAgICAgICAgKytmOwogICAgICAgICAgICAgfQpAQCAtMjc5LDYgKzMyNSwxMSBAQAogICAgICAgICAgICAgY2FzZSAnZCc6CiAgICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQogICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHMsICIlbGQiLCB2YV9hcmcodmFyZ3MsIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzLCAiJSIgUFlfRk9STUFUX0xPTkdfTE9ORyAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzLCAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIFB5X3NzaXplX3QpKTsKQEAgLTI5MCw2ICszNDEsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICAgICAgICAgICAgIHNwcmludGYocywgIiVsdSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIHVuc2lnbmVkIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzLCAiJSIgUFlfRk9STUFUX0xPTkdfTE9ORyAidSIsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihzLCAiJSIgUFlfRk9STUFUX1NJWkVfVCAidSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIHNpemVfdCkpOwpAQCAtMzM5LDcgKzM5NSw4IEBACiAgICAgfQogCiAgZW5kOgotICAgIF9QeVN0cmluZ19SZXNpemUoJnN0cmluZywgcyAtIFB5U3RyaW5nX0FTX1NUUklORyhzdHJpbmcpKTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmc3RyaW5nLCBzIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHN0cmluZykpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gc3RyaW5nOwogfQogCkBAIC02OTEsOCArNzQ4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVRGLTggYnl0ZXMgbWF5IGZvbGxvdy4gKi8KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAocC1idWYgPCBuZXdsZW4pCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIHAgLSBidWYpOworICAgIGlmIChwLWJ1ZiA8IG5ld2xlbiAmJiBfUHlTdHJpbmdfUmVzaXplKCZ2LCBwIC0gYnVmKSkKKyAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgcmV0dXJuIHY7CiAgIGZhaWxlZDoKICAgICBQeV9ERUNSRUYodik7CkBAIC03ODUsNiArODQyLDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKIAogI2RlZmluZSBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcgX1B5U3RyaW5nX0luc2VydFRob3VzYW5kc0dyb3VwaW5nCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKQEAgLTkyMCw4ICs5NzgsOCBAQAogICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpKSA+PSAxKTsKICAgICAgICAgKnArKyA9IHF1b3RlOwogICAgICAgICAqcCA9ICdcMCc7Ci0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoCi0gICAgICAgICAgICAmdiwgKHAgLSBQeVN0cmluZ19BU19TVFJJTkcodikpKTsKKyAgICAgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnYsIChwIC0gUHlTdHJpbmdfQVNfU1RSSU5HKHYpKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogfQpAQCAtOTk0LDEyICsxMDUyLDEyIEBACiAgICAgfQogCiAgICAgLyogSW5saW5lIFB5T2JqZWN0X05ld1ZhciAqLwotICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSBzaXplb2YoUHlTdHJpbmdPYmplY3QpKSB7CisgICAgaWYgKHNpemUgPiBQWV9TU0laRV9UX01BWCAtIFB5U3RyaW5nT2JqZWN0X1NJWkUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5ncyBhcmUgdG9vIGxhcmdlIHRvIGNvbmNhdCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSArIHNpemUpOworICAgIG9wID0gKFB5U3RyaW5nT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5U3RyaW5nT2JqZWN0X1NJWkUgKyBzaXplKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeVN0cmluZ19UeXBlLCBzaXplKTsKQEAgLTEwMzYsMTMgKzEwOTQsMTIgQEAKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKWE7CiAgICAgfQogICAgIG5ieXRlcyA9IChzaXplX3Qpc2l6ZTsKLSAgICBpZiAobmJ5dGVzICsgc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSA8PSBuYnl0ZXMpIHsKKyAgICBpZiAobmJ5dGVzICsgUHlTdHJpbmdPYmplY3RfU0laRSA8PSBuYnl0ZXMpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAicmVwZWF0ZWQgc3RyaW5nIGlzIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBvcCA9IChQeVN0cmluZ09iamVjdCAqKQotICAgICAgICBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSArIG5ieXRlcyk7CisgICAgb3AgPSAoUHlTdHJpbmdPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlTdHJpbmdPYmplY3RfU0laRSArIG5ieXRlcyk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlTdHJpbmdfVHlwZSwgc2l6ZSk7CkBAIC0xMzcwLDE0NSArMTQyNyw2IEBACiAKICNkZWZpbmUgU1RSSVBOQU1FKGkpIChzdHJpcGZvcm1hdFtpXSszKQogCi0KLS8qIERvbid0IGNhbGwgaWYgbGVuZ3RoIDwgMiAqLwotI2RlZmluZSBQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBvZmZzZXQsIHBhdHRlcm4sIGxlbmd0aCkgICAgICAgIFwKLSAgKHRhcmdldFtvZmZzZXRdID09IHBhdHRlcm5bMF0gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB0YXJnZXRbb2Zmc2V0K2xlbmd0aC0xXSA9PSBwYXR0ZXJuW2xlbmd0aC0xXSAmJiAgICAgICAgICAgICAgXAotICAgIW1lbWNtcCh0YXJnZXQrb2Zmc2V0KzEsIHBhdHRlcm4rMSwgbGVuZ3RoLTIpICkKLQotCi0vKiBPdmVyYWxsb2NhdGUgdGhlIGluaXRpYWwgbGlzdCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZWFsbG9jcyBmb3Igc21hbGwKLSAgIHNwbGl0IHNpemVzLiAgRWcsICJBIEEgQSBBIEEgQSBBIEEgQSBBIi5zcGxpdCgpICgxMCBlbGVtZW50cykgaGFzIHRocmVlCi0gICByZXNpemVzLCB0byBzaXplcyA0LCA4LCB0aGVuIDE2LiAgTW9zdCBvYnNlcnZlZCBzdHJpbmcgc3BsaXRzIGFyZSBmb3IgaHVtYW4KLSAgIHRleHQgKHJvdWdobHkgMTEgd29yZHMgcGVyIGxpbmUpIGFuZCBmaWVsZCBkZWxpbWl0ZWQgZGF0YSAodXN1YWxseSAxLTEwCi0gICBmaWVsZHMpLiAgRm9yIGxhcmdlIHN0cmluZ3MgdGhlIHNwbGl0IGFsZ29yaXRobXMgYXJlIGJhbmR3aWR0aCBsaW1pdGVkCi0gICBzbyBpbmNyZWFzaW5nIHRoZSBwcmVhbGxvY2F0aW9uIGxpa2VseSB3aWxsIG5vdCBpbXByb3ZlIHRoaW5ncy4qLwotCi0jZGVmaW5lIE1BWF9QUkVBTExPQyAxMgotCi0vKiA1IHNwbGl0cyBnaXZlcyA2IGVsZW1lbnRzICovCi0jZGVmaW5lIFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpIFwKLSAgICAobWF4c3BsaXQgPj0gTUFYX1BSRUFMTE9DID8gTUFYX1BSRUFMTE9DIDogbWF4c3BsaXQrMSkKLQotI2RlZmluZSBTUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdHIgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSgoZGF0YSkgKyAobGVmdCksICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICAgICAgXAotICAgIGlmIChzdHIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0KLSNkZWZpbmUgU1BMSVRfQUREKGRhdGEsIGxlZnQsIHJpZ2h0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RyID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodCkgLSAobGVmdCkpOyAgICAgICAgIFwKLSAgICBpZiAoc3RyID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjb3VudCA8IE1BWF9QUkVBTExPQykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIGNvdW50LCBzdHIpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb3VudCsrOyB9Ci0KLS8qIEFsd2F5cyBmb3JjZSB0aGUgbGlzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZS4gKi8KLSNkZWZpbmUgRklYX1BSRUFMTE9DX1NJWkUobGlzdCkgUHlfU0laRShsaXN0KSA9IGNvdW50Ci0KLSNkZWZpbmUgU0tJUF9TUEFDRShzLCBpLCBsZW4pICAgIHsgd2hpbGUgKGk8bGVuICYmICBpc3NwYWNlKFB5X0NIQVJNQVNLKHNbaV0pKSkgaSsrOyB9Ci0jZGVmaW5lIFNLSVBfTk9OU1BBQ0UocywgaSwgbGVuKSB7IHdoaWxlIChpPGxlbiAmJiAhaXNzcGFjZShQeV9DSEFSTUFTSyhzW2ldKSkpIGkrKzsgfQotI2RlZmluZSBSU0tJUF9TUEFDRShzLCBpKSAgICAgICAgeyB3aGlsZSAoaT49MCAgJiYgIGlzc3BhY2UoUHlfQ0hBUk1BU0soc1tpXSkpKSBpLS07IH0KLSNkZWZpbmUgUlNLSVBfTk9OU1BBQ0UocywgaSkgICAgIHsgd2hpbGUgKGk+PTAgICYmICFpc3NwYWNlKFB5X0NIQVJNQVNLKHNbaV0pKSkgaS0tOyB9Ci0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotc3BsaXRfd2hpdGVzcGFjZShQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW4sIFB5X3NzaXplX3QgbWF4c3BsaXQpCi17Ci0gICAgY29uc3QgY2hhciAqcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKLSAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IDA7Ci0KLSAgICB3aGlsZSAobWF4c3BsaXQtLSA+IDApIHsKLSAgICAgICAgU0tJUF9TUEFDRShzLCBpLCBsZW4pOwotICAgICAgICBpZiAoaT09bGVuKSBicmVhazsKLSAgICAgICAgaiA9IGk7IGkrKzsKLSAgICAgICAgU0tJUF9OT05TUEFDRShzLCBpLCBsZW4pOwotICAgICAgICBpZiAoaiA9PSAwICYmIGkgPT0gbGVuICYmIFB5U3RyaW5nX0NoZWNrRXhhY3Qoc2VsZikpIHsKLSAgICAgICAgICAgIC8qIE5vIHdoaXRlc3BhY2UgaW4gc2VsZiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLwotICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwotICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXNlbGYpOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFNQTElUX0FERChzLCBqLCBpKTsKLSAgICB9Ci0KLSAgICBpZiAoaSA8IGxlbikgewotICAgICAgICAvKiBPbmx5IG9jY3VycyB3aGVuIG1heHNwbGl0IHdhcyByZWFjaGVkICovCi0gICAgICAgIC8qIFNraXAgYW55IHJlbWFpbmluZyB3aGl0ZXNwYWNlIGFuZCBjb3B5IHRvIGVuZCBvZiBzdHJpbmcgKi8KLSAgICAgICAgU0tJUF9TUEFDRShzLCBpLCBsZW4pOwotICAgICAgICBpZiAoaSAhPSBsZW4pCi0gICAgICAgICAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXNwbGl0X2NoYXIoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbGVuLCBjaGFyIGNoLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIGNvbnN0IGNoYXIgKnMgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZik7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaiA8IGxlbikgJiYgKG1heGNvdW50LS0gPiAwKSkgewotICAgICAgICBmb3IoOyBqPGxlbjsgaisrKSB7Ci0gICAgICAgICAgICAvKiBJIGZvdW5kIHRoYXQgdXNpbmcgbWVtY2hyIG1ha2VzIG5vIGRpZmZlcmVuY2UgKi8KLSAgICAgICAgICAgIGlmIChzW2pdID09IGNoKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGksIGopOwotICAgICAgICAgICAgICAgIGkgPSBqID0gaiArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPT0gMCAmJiBjb3VudCA9PSAwICYmIFB5U3RyaW5nX0NoZWNrRXhhY3Qoc2VsZikpIHsKLSAgICAgICAgLyogY2ggbm90IGluIHNlbGYsIHNvIGp1c3QgdXNlIHNlbGYgYXMgbGlzdFswXSAqLwotICAgICAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzZWxmKTsKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaSA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIGksIGxlbik7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCiBQeURvY19TVFJWQVIoc3BsaXRfX2RvY19fLAogIlMuc3BsaXQoW3NlcCBbLG1heHNwbGl0XV0pIC0+IGxpc3Qgb2Ygc3RyaW5nc1xuXAogXG5cCkBAIC0xNTIxLDIwICsxNDM5LDE3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3RyaW5nX3NwbGl0KFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpLCBuLCBpLCBqOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMSwgY291bnQ9MDsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpLCBuOworICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKICAgICBjb25zdCBjaGFyICpzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpLCAqc3ViOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqc3RyLCAqc3Vib2JqID0gUHlfTm9uZTsKLSNpZmRlZiBVU0VfRkFTVAotICAgIFB5X3NzaXplX3QgcG9zOwotI2VuZGlmCisgICAgUHlPYmplY3QgKnN1Ym9iaiA9IFB5X05vbmU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpzcGxpdCIsICZzdWJvYmosICZtYXhzcGxpdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChtYXhzcGxpdCA8IDApCiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQotICAgICAgICByZXR1cm4gc3BsaXRfd2hpdGVzcGFjZShzZWxmLCBsZW4sIG1heHNwbGl0KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogICAgIGlmIChQeVN0cmluZ19DaGVjayhzdWJvYmopKSB7CiAgICAgICAgIHN1YiA9IFB5U3RyaW5nX0FTX1NUUklORyhzdWJvYmopOwogICAgICAgICBuID0gUHlTdHJpbmdfR0VUX1NJWkUoc3Vib2JqKTsKQEAgLTE1NDYsNDYgKzE0NjEsNyBAQAogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihzdWJvYmosICZzdWIsICZuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmIChuID09IDEpCi0gICAgICAgIHJldHVybiBzcGxpdF9jaGFyKHNlbGYsIGxlbiwgc3ViWzBdLCBtYXhzcGxpdCk7Ci0KLSAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBVU0VfRkFTVAotICAgIGkgPSBqID0gMDsKLSAgICB3aGlsZSAobWF4c3BsaXQtLSA+IDApIHsKLSAgICAgICAgcG9zID0gZmFzdHNlYXJjaChzK2ksIGxlbi1pLCBzdWIsIG4sIEZBU1RfU0VBUkNIKTsKLSAgICAgICAgaWYgKHBvcyA8IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaiA9IGkrcG9zOwotICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgIGkgPSBqICsgbjsKLSAgICB9Ci0jZWxzZQotICAgIGkgPSBqID0gMDsKLSAgICB3aGlsZSAoKGorbiA8PSBsZW4pICYmIChtYXhzcGxpdC0tID4gMCkpIHsKLSAgICAgICAgZm9yICg7IGorbiA8PSBsZW47IGorKykgewotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSChzLCBqLCBzdWIsIG4pKSB7Ci0gICAgICAgICAgICAgICAgU1BMSVRfQUREKHMsIGksIGopOwotICAgICAgICAgICAgICAgIGkgPSBqID0gaiArIG47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICByZXR1cm4gbGlzdDsKLQotIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXQoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBzdWIsIG4sIG1heHNwbGl0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHBhcnRpdGlvbl9fZG9jX18sCkBAIC0xNjUwLDkwICsxNTI2LDYgQEAKICAgICAgICAgKTsKIH0KIAotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1yc3BsaXRfd2hpdGVzcGFjZShQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW4sIFB5X3NzaXplX3QgbWF4c3BsaXQpCi17Ci0gICAgY29uc3QgY2hhciAqcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKLSAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IGxlbi0xOwotCi0gICAgd2hpbGUgKG1heHNwbGl0LS0gPiAwKSB7Ci0gICAgICAgIFJTS0lQX1NQQUNFKHMsIGkpOwotICAgICAgICBpZiAoaTwwKSBicmVhazsKLSAgICAgICAgaiA9IGk7IGktLTsKLSAgICAgICAgUlNLSVBfTk9OU1BBQ0UocywgaSk7Ci0gICAgICAgIGlmIChqID09IGxlbi0xICYmIGkgPCAwICYmIFB5U3RyaW5nX0NoZWNrRXhhY3Qoc2VsZikpIHsKLSAgICAgICAgICAgIC8qIE5vIHdoaXRlc3BhY2UgaW4gc2VsZiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLwotICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwotICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXNlbGYpOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFNQTElUX0FERChzLCBpICsgMSwgaiArIDEpOwotICAgIH0KLSAgICBpZiAoaSA+PSAwKSB7Ci0gICAgICAgIC8qIE9ubHkgb2NjdXJzIHdoZW4gbWF4c3BsaXQgd2FzIHJlYWNoZWQgKi8KLSAgICAgICAgLyogU2tpcCBhbnkgcmVtYWluaW5nIHdoaXRlc3BhY2UgYW5kIGNvcHkgdG8gYmVnaW5uaW5nIG9mIHN0cmluZyAqLwotICAgICAgICBSU0tJUF9TUEFDRShzLCBpKTsKLSAgICAgICAgaWYgKGkgPj0gMCkKLSAgICAgICAgICAgIFNQTElUX0FERChzLCAwLCBpICsgMSk7Ci0KLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1yc3BsaXRfY2hhcihQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW4sIGNoYXIgY2gsIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgY29uc3QgY2hhciAqcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IGxlbiAtIDE7Ci0gICAgd2hpbGUgKChpID49IDApICYmIChtYXhjb3VudC0tID4gMCkpIHsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoc1tpXSA9PSBjaCkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgICAgIGogPSBpID0gaSAtIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPCAwICYmIGNvdW50ID09IDAgJiYgUHlTdHJpbmdfQ2hlY2tFeGFjdChzZWxmKSkgewotICAgICAgICAvKiBjaCBub3QgaW4gc2VsZiwgc28ganVzdCB1c2Ugc2VsZiBhcyBsaXN0WzBdICovCi0gICAgICAgIFB5X0lOQ1JFRihzZWxmKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXNlbGYpOwotICAgICAgICBjb3VudCsrOwotICAgIH0KLSAgICBlbHNlIGlmIChqID49IC0xKSB7Ci0gICAgICAgIFNQTElUX0FERChzLCAwLCBqICsgMSk7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICByZXR1cm4gbGlzdDsKLQotIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCiBQeURvY19TVFJWQVIocnNwbGl0X19kb2NfXywKICJTLnJzcGxpdChbc2VwIFssbWF4c3BsaXRdXSkgLT4gbGlzdCBvZiBzdHJpbmdzXG5cCiBcblwKQEAgLTE3NDYsMTcgKzE1MzgsMTcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJpbmdfcnNwbGl0KFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpLCBuLCBpLCBqOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMSwgY291bnQ9MDsKLSAgICBjb25zdCBjaGFyICpzLCAqc3ViOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqc3RyLCAqc3Vib2JqID0gUHlfTm9uZTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpLCBuOworICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKKyAgICBjb25zdCBjaGFyICpzID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpLCAqc3ViOworICAgIFB5T2JqZWN0ICpzdWJvYmogPSBQeV9Ob25lOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8T246cnNwbGl0IiwgJnN1Ym9iaiwgJm1heHNwbGl0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKG1heHNwbGl0IDwgMCkKICAgICAgICAgbWF4c3BsaXQgPSBQWV9TU0laRV9UX01BWDsKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCi0gICAgICAgIHJldHVybiByc3BsaXRfd2hpdGVzcGFjZShzZWxmLCBsZW4sIG1heHNwbGl0KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXRfd2hpdGVzcGFjZSgoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIG1heHNwbGl0KTsKICAgICBpZiAoUHlTdHJpbmdfQ2hlY2soc3Vib2JqKSkgewogICAgICAgICBzdWIgPSBQeVN0cmluZ19BU19TVFJJTkcoc3Vib2JqKTsKICAgICAgICAgbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHN1Ym9iaik7CkBAIC0xNzY4LDQwICsxNTYwLDcgQEAKICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoc3Vib2JqLCAmc3ViLCAmbikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobiA9PSAxKQotICAgICAgICByZXR1cm4gcnNwbGl0X2NoYXIoc2VsZiwgbGVuLCBzdWJbMF0sIG1heHNwbGl0KTsKLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGogPSBsZW47Ci0gICAgaSA9IGogLSBuOwotCi0gICAgcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKLSAgICB3aGlsZSAoIChpID49IDApICYmIChtYXhzcGxpdC0tID4gMCkgKSB7Ci0gICAgICAgIGZvciAoOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0gocywgaSwgc3ViLCBuKSkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgbiwgaik7Ci0gICAgICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgICAgICAgICAgaSAtPSBuOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIFNQTElUX0FERChzLCAwLCBqKTsKLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLW9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0KChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgc3ViLCBuLCBtYXhzcGxpdCk7CiB9CiAKIApAQCAtMTkxNiwyMCArMTY3NSwyMCBAQAogICAgIHJldHVybiBzdHJpbmdfam9pbigoUHlTdHJpbmdPYmplY3QgKilzZXAsIHgpOwogfQogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLXN0cmluZ19hZGp1c3RfaW5kaWNlcyhQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqZW5kLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoKmVuZCA+IGxlbikKLSAgICAgICAgKmVuZCA9IGxlbjsKLSAgICBlbHNlIGlmICgqZW5kIDwgMCkKLSAgICAgICAgKmVuZCArPSBsZW47Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gMDsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ICs9IGxlbjsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ID0gMDsKLX0KKy8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCisjZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCisgICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGVuZCA8IDApIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChzdGFydCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogc3RyaW5nX2ZpbmRfaW50ZXJuYWwoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBpbnQgZGlyKQpAQCAtMjM4MywxMCArMjE0MiwxMCBAQAogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihzdWJfb2JqLCAmc3ViLCAmc3ViX2xlbikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc3RyaW5nX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgUHlTdHJpbmdfR0VUX1NJWkUoc2VsZikpOworICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpKTsKIAogICAgIHJldHVybiBQeUludF9Gcm9tU3NpemVfdCgKLSAgICAgICAgc3RyaW5nbGliX2NvdW50KHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViLCBzdWJfbGVuKQorICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWIsIHN1Yl9sZW4sIFBZX1NTSVpFX1RfTUFYKQogICAgICAgICApOwogfQogCkBAIC0yNTQzLDE1ICsyMzAyLDEyIEBACiAgICAgICAgIHJldHVybiBpbnB1dF9vYmo7CiAgICAgfQogICAgIC8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyAqLwotICAgIGlmIChpbmxlbiA+IDApCi0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgb3V0cHV0IC0gb3V0cHV0X3N0YXJ0KTsKKyAgICBpZiAoaW5sZW4gPiAwICYmIF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgb3V0cHV0IC0gb3V0cHV0X3N0YXJ0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCi0jZGVmaW5lIEZPUldBUkQgMQotI2RlZmluZSBSRVZFUlNFIC0xCi0KIC8qIGZpbmQgYW5kIGNvdW50IGNoYXJhY3RlcnMgYW5kIHN1YnN0cmluZ3MgKi8KIAogI2RlZmluZSBmaW5kY2hhcih0YXJnZXQsIHRhcmdldF9sZW4sIGMpICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTI1ODcsOTMgKzIzNDMsNiBAQAogICAgIHJldHVybiBjb3VudDsKIH0KIAotUHlfTE9DQUwoUHlfc3NpemVfdCkKLWZpbmRzdHJpbmcoY29uc3QgY2hhciAqdGFyZ2V0LCBQeV9zc2l6ZV90IHRhcmdldF9sZW4sCi0gICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIFB5X3NzaXplX3QgcGF0dGVybl9sZW4sCi0gICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsCi0gICAgICAgICAgIFB5X3NzaXplX3QgZW5kLAotICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQotewotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgc3RhcnQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICB9Ci0gICAgaWYgKGVuZCA+IHRhcmdldF9sZW4pIHsKLSAgICAgICAgZW5kID0gdGFyZ2V0X2xlbjsKLSAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHsKLSAgICAgICAgZW5kICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChlbmQgPCAwKQotICAgICAgICAgICAgZW5kID0gMDsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIGFsd2F5cyBtYXRjaCBhdCB0aGUgZmlyc3QgYXR0ZW1wdCAqLwotICAgIGlmIChwYXR0ZXJuX2xlbiA9PSAwKQotICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiA+IDApID8gc3RhcnQgOiBlbmQ7Ci0KLSAgICBlbmQgLT0gcGF0dGVybl9sZW47Ci0KLSAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewotICAgICAgICBmb3IgKDsgZW5kID49IHN0YXJ0OyBlbmQtLSkKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBlbmQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZW5kOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8PSBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgc3RhcnQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCi1jb3VudHN0cmluZyhjb25zdCBjaGFyICp0YXJnZXQsIFB5X3NzaXplX3QgdGFyZ2V0X2xlbiwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIFB5X3NzaXplX3QgcGF0dGVybl9sZW4sCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LAotICAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsCi0gICAgICAgICAgICBpbnQgZGlyZWN0aW9uLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFB5X3NzaXplX3QgY291bnQ9MDsKLQotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgc3RhcnQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICB9Ci0gICAgaWYgKGVuZCA+IHRhcmdldF9sZW4pIHsKLSAgICAgICAgZW5kID0gdGFyZ2V0X2xlbjsKLSAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHsKLSAgICAgICAgZW5kICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChlbmQgPCAwKQotICAgICAgICAgICAgZW5kID0gMDsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIG1hdGNoIGV2ZXJ5d2hlcmUgKi8KLSAgICBpZiAocGF0dGVybl9sZW4gPT0gMCB8fCBtYXhjb3VudCA9PSAwKSB7Ci0gICAgICAgIGlmICh0YXJnZXRfbGVuKzEgPCBtYXhjb3VudCkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRfbGVuKzE7Ci0gICAgICAgIHJldHVybiBtYXhjb3VudDsKLSAgICB9Ci0KLSAgICBlbmQgLT0gcGF0dGVybl9sZW47Ci0gICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKLSAgICAgICAgZm9yICg7IChlbmQgPj0gc3RhcnQpOyBlbmQtLSkKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBlbmQsIHBhdHRlcm4sIHBhdHRlcm5fbGVuKSkgewotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgaWYgKC0tbWF4Y291bnQgPD0gMCkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5fbGVuLTE7Ci0gICAgICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICg7IChzdGFydCA8PSBlbmQpOyBzdGFydCsrKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIHN0YXJ0LCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDw9IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHN0YXJ0ICs9IHBhdHRlcm5fbGVuLTE7Ci0gICAgICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQogCiAvKiBBbGdvcml0aG1zIGZvciBkaWZmZXJlbnQgY2FzZXMgb2Ygc3RyaW5nIHJlcGxhY2VtZW50ICovCiAKQEAgLTI3OTQsMTAgKzI0NjMsOSBAQAogICAgIHNlbGZfbGVuID0gUHlTdHJpbmdfR0VUX1NJWkUoc2VsZik7CiAgICAgc2VsZl9zID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOworICAgIGNvdW50ID0gc3RyaW5nbGliX2NvdW50KHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CiAKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAvKiBubyBtYXRjaGVzICovCkBAIC0yODE2LDkgKzI0ODQsOSBAQAogICAgIHN0YXJ0ID0gc2VsZl9zOwogICAgIGVuZCA9IHNlbGZfcyArIHNlbGZfbGVuOwogICAgIHdoaWxlIChjb3VudC0tID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHN0YXJ0LCBlbmQtc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbmQtc3RhcnQsIEZPUldBUkQpOworICAgICAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzdGFydCwgZW5kLXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgaWYgKG9mZnNldCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0ID0gc3RhcnQgKyBvZmZzZXQ7CkBAIC0yODk0LDkgKzI1NjIsOSBAQAogICAgIHNlbGZfcyA9IFB5U3RyaW5nX0FTX1NUUklORyhzZWxmKTsKICAgICBzZWxmX2xlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpOwogCi0gICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJEKTsKKyAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzZWxmX3MsIHNlbGZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgaWYgKG9mZnNldCA9PSAtMSkgewogICAgICAgICAvKiBObyBtYXRjaGVzOyByZXR1cm4gdGhlIG9yaWdpbmFsIHN0cmluZyAqLwogICAgICAgICByZXR1cm4gcmV0dXJuX3NlbGYoc2VsZik7CkBAIC0yOTE2LDkgKzI1ODQsOSBAQAogICAgIGVuZCA9IHJlc3VsdF9zICsgc2VsZl9sZW47CiAKICAgICB3aGlsZSAoIC0tbWF4Y291bnQgPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0PT0tMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBQeV9NRU1DUFkoc3RhcnQrb2Zmc2V0LCB0b19zLCBmcm9tX2xlbik7CkBAIC0zMDEwLDkgKzI2NzgsMTAgQEAKICAgICBzZWxmX3MgPSBQeVN0cmluZ19BU19TVFJJTkcoc2VsZik7CiAgICAgc2VsZl9sZW4gPSBQeVN0cmluZ19HRVRfU0laRShzZWxmKTsKIAotICAgIGNvdW50ID0gY291bnRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgRk9SV0FSRCwgbWF4Y291bnQpOworICAgIGNvdW50ID0gc3RyaW5nbGliX2NvdW50KHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CisKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAvKiBubyBtYXRjaGVzLCByZXR1cm4gdW5jaGFuZ2VkICovCiAgICAgICAgIHJldHVybiByZXR1cm5fc2VsZihzZWxmKTsKQEAgLTMwMzksOSArMjcwOCw5IEBACiAgICAgc3RhcnQgPSBzZWxmX3M7CiAgICAgZW5kID0gc2VsZl9zICsgc2VsZl9sZW47CiAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHQgPSBzdGFydCtvZmZzZXQ7CkBAIC0zMjExLDcgKzI4ODAsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgc3RyaW5nX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgbGVuKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOwogCiAgICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKICAgICAgICAgLyogc3RhcnRzd2l0aCAqLwpAQCAtMzMyNCwxMyArMjk5MywxNSBAQAogY29kZWNzLnJlZ2lzdGVyX2Vycm9yIHRoYXQgaXMgYWJsZSB0byBoYW5kbGUgVW5pY29kZUVuY29kZUVycm9ycy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ19lbmNvZGUoUHlTdHJpbmdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RyaW5nX2VuY29kZShQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKICAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHNzOmVuY29kZSIsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmVuY29kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2ID0gUHlTdHJpbmdfQXNFbmNvZGVkT2JqZWN0KChQeU9iamVjdCAqKXNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh2ID09IE5VTEwpCkBAIC0zMzYxLDEzICszMDMyLDE1IEBACiBhYmxlIHRvIGhhbmRsZSBVbmljb2RlRGVjb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5nX2RlY29kZShQeVN0cmluZ09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdHJpbmdfZGVjb2RlKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZGVjb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QoKFB5T2JqZWN0ICopc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHYgPT0gTlVMTCkKQEAgLTM4NzUsNjIgKzM1NDgsMTUgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHN0cmluZ19zcGxpdGxpbmVzKFB5U3RyaW5nT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBrZWVwZW5kcyA9IDA7Ci0gICAgUHlPYmplY3QgKmxpc3Q7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBjaGFyICpkYXRhOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpzcGxpdGxpbmVzIiwgJmtlZXBlbmRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBkYXRhID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpOwotICAgIGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHNlbGYpOwotCi0gICAgLyogVGhpcyBkb2VzIG5vdCB1c2UgdGhlIHByZWFsbG9jYXRlZCBsaXN0IGJlY2F1c2Ugc3BsaXRsaW5lcyBpcwotICAgICAgIHVzdWFsbHkgcnVuIHdpdGggaHVuZHJlZHMgb2YgbmV3bGluZXMuICBUaGUgb3ZlcmhlYWQgb2YKLSAgICAgICBzd2l0Y2hpbmcgYmV0d2VlbiBQeUxpc3RfU0VUX0lURU0gYW5kIGFwcGVuZCBjYXVzZXMgYWJvdXQgYQotICAgICAgIDItMyUgc2xvd2Rvd24gZm9yIHRoYXQgY29tbW9uIGNhc2UuICBBIHNtYXJ0ZXIgaW1wbGVtZW50YXRpb24KLSAgICAgICBjb3VsZCBtb3ZlIHRoZSBpZiBjaGVjayBvdXQsIHNvIHRoZSBTRVRfSVRFTXMgYXJlIGRvbmUgZmlyc3QKLSAgICAgICBhbmQgdGhlIGFwcGVuZHMgb25seSBkb25lIHdoZW4gdGhlIHByZWFsbG9jIGJ1ZmZlciBpcyBmdWxsLgotICAgICAgIFRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBsaXR0bGUgZ2Fpbi4qLwotCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgZW9sOwotCi0gICAgICAgIC8qIEZpbmQgYSBsaW5lIGFuZCBhcHBlbmQgaXQgKi8KLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgZGF0YVtpXSAhPSAnXG4nICYmIGRhdGFbaV0gIT0gJ1xyJykKLSAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAvKiBTa2lwIHRoZSBsaW5lIGJyZWFrIHJlYWRpbmcgQ1JMRiBhcyBvbmUgbGluZSBicmVhayAqLwotICAgICAgICBlb2wgPSBpOwotICAgICAgICBpZiAoaSA8IGxlbikgewotICAgICAgICAgICAgaWYgKGRhdGFbaV0gPT0gJ1xyJyAmJiBpICsgMSA8IGxlbiAmJgotICAgICAgICAgICAgICAgIGRhdGFbaSsxXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBpZiAoa2VlcGVuZHMpCi0gICAgICAgICAgICAgICAgZW9sID0gaTsKLSAgICAgICAgfQotICAgICAgICBTUExJVF9BUFBFTkQoZGF0YSwgaiwgZW9sKTsKLSAgICAgICAgaiA9IGk7Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChkYXRhLCBqLCBsZW4pOwotICAgIH0KLQotICAgIHJldHVybiBsaXN0OwotCi0gb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRsaW5lcygKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgUHlTdHJpbmdfQVNfU1RSSU5HKHNlbGYpLCBQeVN0cmluZ19HRVRfU0laRShzZWxmKSwKKyAgICAgICAga2VlcGVuZHMKKyAgICApOwogfQogCiBQeURvY19TVFJWQVIoc2l6ZW9mX19kb2NfXywKQEAgLTM5NDAsMTUgKzM1NjYsMTAgQEAKIHN0cmluZ19zaXplb2YoUHlTdHJpbmdPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCByZXM7Ci0gICAgcmVzID0gc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSArIHYtPm9iX3NpemUgKiB2LT5vYl90eXBlLT50cF9pdGVtc2l6ZTsKKyAgICByZXMgPSBQeVN0cmluZ09iamVjdF9TSVpFICsgUHlTdHJpbmdfR0VUX1NJWkUodikgKiBQeV9UWVBFKHYpLT50cF9pdGVtc2l6ZTsKICAgICByZXR1cm4gUHlJbnRfRnJvbVNzaXplX3QocmVzKTsKIH0KIAotI3VuZGVmIFNQTElUX0FQUEVORAotI3VuZGVmIFNQTElUX0FERAotI3VuZGVmIE1BWF9QUkVBTExPQwotI3VuZGVmIFBSRUFMTE9DX1NJWkUKLQogc3RhdGljIFB5T2JqZWN0ICoKIHN0cmluZ19nZXRuZXdhcmdzKFB5U3RyaW5nT2JqZWN0ICp2KQogewpAQCAtMzk2MSw3ICszNTgyLDggQEAKIFB5RG9jX1NUUlZBUihmb3JtYXRfX2RvY19fLAogIlMuZm9ybWF0KCphcmdzLCAqKmt3YXJncykgLT4gc3RyaW5nXG5cCiBcblwKLSIpOworUmV0dXJuIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgUywgdXNpbmcgc3Vic3RpdHV0aW9ucyBmcm9tIGFyZ3MgYW5kIGt3YXJncy5cblwKK1RoZSBzdWJzdGl0dXRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGJyYWNlcyAoJ3snIGFuZCAnfScpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc3RyaW5nX19mb3JtYXRfXyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC0zOTk1LDcgKzM2MTcsNyBAQAogUHlEb2NfU1RSVkFSKHBfZm9ybWF0X19kb2NfXywKICJTLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpIC0+IHN0cmluZ1xuXAogXG5cCi0iKTsKK1JldHVybiBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIFMgYXMgZGVzY3JpYmVkIGJ5IGZvcm1hdF9zcGVjLiIpOwogCiAKIHN0YXRpYyBQeU1ldGhvZERlZgpAQCAtNDA0NSw4ICszNjY3LDggQEAKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHN0cmluZ19fZm9ybWF0X18sIE1FVEhfVkFSQVJHUywgcF9mb3JtYXRfX2RvY19ffSwKICAgICB7Il9mb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdCIsIChQeUNGdW5jdGlvbikgZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQsIE1FVEhfTk9BUkdTfSwKICAgICB7Il9mb3JtYXR0ZXJfcGFyc2VyIiwgKFB5Q0Z1bmN0aW9uKSBmb3JtYXR0ZXJfcGFyc2VyLCBNRVRIX05PQVJHU30sCi0gICAgeyJlbmNvZGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5nX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBlbmNvZGVfX2RvY19ffSwKLSAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilzdHJpbmdfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIGRlY29kZV9fZG9jX199LAorICAgIHsiZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ19lbmNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGVuY29kZV9fZG9jX199LAorICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ19kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9fZG9jX199LAogICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ19zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MsCkBAIC00MTc5LDcgKzM4MDEsNyBAQAogUHlUeXBlT2JqZWN0IFB5U3RyaW5nX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAic3RyIiwKLSAgICBzaXplb2YoUHlTdHJpbmdPYmplY3QpLAorICAgIFB5U3RyaW5nT2JqZWN0X1NJWkUsCiAgICAgc2l6ZW9mKGNoYXIpLAogICAgIHN0cmluZ19kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwogICAgIChwcmludGZ1bmMpc3RyaW5nX3ByaW50LCAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KQEAgLTQyNzUsNyArMzg5Nyw3IEBACiAgICAgX1B5X0RFQ19SRUZUT1RBTDsKICAgICBfUHlfRm9yZ2V0UmVmZXJlbmNlKHYpOwogICAgICpwdiA9IChQeU9iamVjdCAqKQotICAgICAgICBQeU9iamVjdF9SRUFMTE9DKChjaGFyICopdiwgc2l6ZW9mKFB5U3RyaW5nT2JqZWN0KSArIG5ld3NpemUpOworICAgICAgICBQeU9iamVjdF9SRUFMTE9DKChjaGFyICopdiwgUHlTdHJpbmdPYmplY3RfU0laRSArIG5ld3NpemUpOwogICAgIGlmICgqcHYgPT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdF9EZWwodik7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC00MzIwLDYzICszOTQyLDMzIEBACiAjZGVmaW5lIEZfQUxUICAgKDE8PDMpCiAjZGVmaW5lIEZfWkVSTyAgKDE8PDQpCiAKLVB5X0xPQ0FMX0lOTElORShpbnQpCi1mb3JtYXRmbG9hdChjaGFyICpidWYsIHNpemVfdCBidWZsZW4sIGludCBmbGFncywKLSAgICAgICAgICAgIGludCBwcmVjLCBpbnQgdHlwZSwgUHlPYmplY3QgKnYpCisvKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSB0byBhIFB5U3RyaW5nIG9iamVjdCwgb3IgTlVMTCBvbiBmYWlsdXJlLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQogewotICAgIC8qIGZtdCA9ICclIy4nICsgYHByZWNgICsgYHR5cGVgCi0gICAgICAgd29yc3QgY2FzZSBsZW5ndGggPSAzICsgMTAgKGxlbiBvZiBJTlRfTUFYKSArIDEgPSAxNCAodXNlIDIwKSovCi0gICAgY2hhciBmbXRbMjBdOworICAgIGNoYXIgKnA7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBkb3VibGUgeDsKKwogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZmxvYXQgYXJndW1lbnQgcmVxdWlyZWQsICIKICAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgaWYgKHByZWMgPCAwKQogICAgICAgICBwcmVjID0gNjsKLSNpZiBTSVpFT0ZfSU5UID4gNAotICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHByZWNpc2lvbiByZWFsbHkgZG9lcwotICAgICAgIG5lZWQgYXQgbW9zdCAxMCBkaWdpdHM6IHBsYXRmb3JtcyB3aXRoIHNpemVvZihpbnQpID09IDggZXhpc3QhICovCi0gICAgaWYgKHByZWMgPiAweDdmZmZmZmZmKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm91dHJhZ2VvdXNseSBsYXJnZSBwcmVjaXNpb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgImZvciBmb3JtYXR0ZWQgZmxvYXQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSNlbmRpZgogCi0gICAgaWYgKHR5cGUgPT0gJ2YnICYmIGZhYnMoeCkgPj0gMWU1MCkKLSAgICAgICAgdHlwZSA9ICdnJzsKLSAgICAvKiBXb3JzdCBjYXNlIGxlbmd0aCBjYWxjIHRvIGVuc3VyZSBubyBidWZmZXIgb3ZlcnJ1bjoKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIHR5cGUsIHByZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGX0FMVCkgPyBQeV9EVFNGX0FMVCA6IDAsIE5VTEwpOwogCi0gICAgICAgJ2cnIGZvcm1hdHM6Ci0gICAgICAgICBmbXQgPSAlIy48cHJlYz5nCi0gICAgICAgICBidWYgPSAnLScgKyBbMC05XSpwcmVjICsgJy4nICsgJ2UrJyArIChsb25nZXN0IGV4cAotICAgICAgICBmb3IgYW55IGRvdWJsZSByZXAuKQotICAgICAgICAgbGVuID0gMSArIHByZWMgKyAxICsgMiArIDUgPSA5ICsgcHJlYwotCi0gICAgICAgJ2YnIGZvcm1hdHM6Ci0gICAgICAgICBidWYgPSAnLScgKyBbMC05XSp4ICsgJy4nICsgWzAtOV0qcHJlYyAod2l0aCB4IDwgNTApCi0gICAgICAgICBsZW4gPSAxICsgNTAgKyAxICsgcHJlYyA9IDUyICsgcHJlYwotCi0gICAgICAgSWYgcHJlYz0wIHRoZSBlZmZlY3RpdmUgcHJlY2lzaW9uIGlzIDEgKHRoZSBsZWFkaW5nIGRpZ2l0IGlzCi0gICAgICAgYWx3YXlzIGdpdmVuKSwgdGhlcmVmb3JlIGluY3JlYXNlIHRoZSBsZW5ndGggYnkgb25lLgotCi0gICAgKi8KLSAgICBpZiAoKCh0eXBlID09ICdnJyB8fCB0eXBlID09ICdHJykgJiYKLSAgICAgICAgICBidWZsZW4gPD0gKHNpemVfdCkxMCArIChzaXplX3QpcHJlYykgfHwKLSAgICAgICAgKHR5cGUgPT0gJ2YnICYmIGJ1ZmxlbiA8PSAoc2l6ZV90KTUzICsgKHNpemVfdClwcmVjKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICJmb3JtYXR0ZWQgZmxvYXQgaXMgdG9vIGxvbmcgKHByZWNpc2lvbiB0b28gbGFyZ2U/KSIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5T1Nfc25wcmludGYoZm10LCBzaXplb2YoZm10KSwgIiUlJXMuJWQlYyIsCi0gICAgICAgICAgICAgICAgICAoZmxhZ3MmRl9BTFQpID8gIiMiIDogIiIsCi0gICAgICAgICAgICAgICAgICBwcmVjLCB0eXBlKTsKLSAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnVmLCBidWZsZW4sIGZtdCwgeCk7Ci0gICAgcmV0dXJuIChpbnQpc3RybGVuKGJ1Zik7CisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUocCwgc3RybGVuKHApKTsKKyAgICBQeU1lbV9GcmVlKHApOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIF9QeVN0cmluZ19Gb3JtYXRMb25nIGVtdWxhdGVzIHRoZSBmb3JtYXQgY29kZXMgZCwgdSwgbywgeCBhbmQgWCwgYW5kCkBAIC00NjE2LDcgKzQyMDgsNyBAQAogCiAvKiBmbXQlKHYxLHYyLC4uLikgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIHNwcmludGYoZm10LCB2MSwgdjIsIC4uLikKIAotICAgRk9STUFUQlVGTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiB3aGljaCB0aGUgZmxvYXRzLCBpbnRzLCAmCisgICBGT1JNQVRCVUZMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBpbnRzICYKICAgIGNoYXJzIGFyZSBmb3JtYXR0ZWQuIFhYWCBUaGlzIGlzIGEgbWFnaWMgbnVtYmVyLiBFYWNoIGZvcm1hdHRpbmcKICAgIHJvdXRpbmUgZG9lcyBib3VuZHMgY2hlY2tpbmcgdG8gZW5zdXJlIG5vIG92ZXJmbG93LCBidXQgYSBiZXR0ZXIKICAgIHNvbHV0aW9uIG1heSBiZSB0byBtYWxsb2MgYSBidWZmZXIgb2YgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgZWFjaApAQCAtNDY2NCw3ICs0MjU2LDcgQEAKICAgICAgICAgICAgIGlmICgtLXJlc2NudCA8IDApIHsKICAgICAgICAgICAgICAgICByZXNjbnQgPSBmbXRjbnQgKyAxMDA7CiAgICAgICAgICAgICAgICAgcmVzbGVuICs9IHJlc2NudDsKLSAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCByZXNsZW4pIDwgMCkKKyAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCByZXNsZW4pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICByZXMgPSBQeVN0cmluZ19BU19TVFJJTkcocmVzdWx0KQogICAgICAgICAgICAgICAgICAgICArIHJlc2xlbiAtIHJlc2NudDsKQEAgLTQ2ODYsNyArNDI3OCw3IEBACiAgICAgICAgICAgICBpbnQgc2lnbjsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogICAgICAgICAgICAgY2hhciBmb3JtYXRidWZbRk9STUFUQlVGTEVOXTsKLSAgICAgICAgICAgICAgICAgLyogRm9yIGZvcm1hdHtmbG9hdCxpbnQsY2hhcn0oKSAqLworICAgICAgICAgICAgICAgICAvKiBGb3IgZm9ybWF0e2ludCxjaGFyfSgpICovCiAjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQogICAgICAgICAgICAgY2hhciAqZm10X3N0YXJ0ID0gZm10OwogICAgICAgICAgICAgUHlfc3NpemVfdCBhcmdpZHhfc3RhcnQgPSBhcmdpZHg7CkBAIC00OTM3LDEzICs0NTI5LDExIEBACiAgICAgICAgICAgICBjYXNlICdGJzoKICAgICAgICAgICAgIGNhc2UgJ2cnOgogICAgICAgICAgICAgY2FzZSAnRyc6Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ0YnKQotICAgICAgICAgICAgICAgICAgICBjID0gJ2YnOwotICAgICAgICAgICAgICAgIHBidWYgPSBmb3JtYXRidWY7Ci0gICAgICAgICAgICAgICAgbGVuID0gZm9ybWF0ZmxvYXQocGJ1Ziwgc2l6ZW9mKGZvcm1hdGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHByZWMsIGMsIHYpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYyk7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBwYnVmID0gUHlTdHJpbmdfQVNfU1RSSU5HKHRlbXApOworICAgICAgICAgICAgICAgIGxlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHRlbXApOwogICAgICAgICAgICAgICAgIHNpZ24gPSAxOwogICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfWkVSTykKICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICcwJzsKQEAgLTQ5OTMsNyArNDU4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCByZXNsZW4pIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0ZW1wKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTA2MSw3ICs0NjUxLDggQEAKICAgICBpZiAoYXJnc19vd25lZCkgewogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgfQotICAgIF9QeVN0cmluZ19SZXNpemUoJnJlc3VsdCwgcmVzbGVuIC0gcmVzY250KTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmcmVzdWx0LCByZXNsZW4gLSByZXNjbnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gcmVzdWx0OwogCiAjaWZkZWYgUHlfVVNJTkdfVU5JQ09ERQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90dXBsZW9iamVjdC5jIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCmluZGV4IGJiYzc4ZjQuLjMyNDljY2MgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHVwbGVvYmplY3QuYworKysgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKQEAgLTE5LDEwICsxOSwzMiBAQAogc3RhdGljIGludCBudW1mcmVlW1B5VHVwbGVfTUFYU0FWRVNJWkVdOwogI2VuZGlmCiAjaWZkZWYgQ09VTlRfQUxMT0NTCi1pbnQgZmFzdF90dXBsZV9hbGxvY3M7Ci1pbnQgdHVwbGVfemVyb19hbGxvY3M7CitQeV9zc2l6ZV90IGZhc3RfdHVwbGVfYWxsb2NzOworUHlfc3NpemVfdCB0dXBsZV96ZXJvX2FsbG9jczsKICNlbmRpZgogCisvKiBEZWJ1ZyBzdGF0aXN0aWMgdG8gY291bnQgR0MgdHJhY2tpbmcgb2YgdHVwbGVzLgorICAgUGxlYXNlIG5vdGUgdGhhdCB0dXBsZXMgYXJlIG9ubHkgdW50cmFja2VkIHdoZW4gY29uc2lkZXJlZCBieSB0aGUgR0MsIGFuZAorICAgbWFueSBvZiB0aGVtIHdpbGwgYmUgZGVhZCBiZWZvcmUuIFRoZXJlZm9yZSwgYSB0cmFja2luZyByYXRlIGNsb3NlIHRvIDEwMCUKKyAgIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHByb3ZlIHRoYXQgdGhlIGhldXJpc3RpYyBpcyBpbmVmZmljaWVudC4KKyovCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorc3RhdGljIFB5X3NzaXplX3QgY291bnRfdW50cmFja2VkID0gMDsKK3N0YXRpYyBQeV9zc2l6ZV90IGNvdW50X3RyYWNrZWQgPSAwOworCitzdGF0aWMgdm9pZAorc2hvd190cmFjayh2b2lkKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVHVwbGVzIGNyZWF0ZWQ6ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgIGNvdW50X3RyYWNrZWQgKyBjb3VudF91bnRyYWNrZWQpOworICAgIGZwcmludGYoc3RkZXJyLCAiVHVwbGVzIHRyYWNrZWQgYnkgdGhlIEdDOiAlIiBQWV9GT1JNQVRfU0laRV9UCisgICAgICAgICJkXG4iLCBjb3VudF90cmFja2VkKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiUuMmYlJSB0dXBsZSB0cmFja2luZyByYXRlXG5cbiIsCisgICAgICAgICgxMDAuMCpjb3VudF90cmFja2VkLyhjb3VudF91bnRyYWNrZWQrY291bnRfdHJhY2tlZCkpKTsKK30KKyNlbmRpZgorCisKIFB5T2JqZWN0ICoKIFB5VHVwbGVfTmV3KHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZSkKIHsKQEAgLTY0LDcgKzg2LDYgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KLSAgICAgICAgbmJ5dGVzICs9IHNpemVvZihQeVR1cGxlT2JqZWN0KSAtIHNpemVvZihQeU9iamVjdCAqKTsKIAogICAgICAgICBvcCA9IFB5T2JqZWN0X0dDX05ld1ZhcihQeVR1cGxlT2JqZWN0LCAmUHlUdXBsZV9UeXBlLCBzaXplKTsKICAgICAgICAgaWYgKG9wID09IE5VTEwpCkBAIC03OSw2ICsxMDAsOSBAQAogICAgICAgICBQeV9JTkNSRUYob3ApOyAgICAgICAgICAvKiBleHRyYSBJTkNSRUYgc28gdGhhdCB0aGlzIGlzIG5ldmVyIGZyZWVkICovCiAgICAgfQogI2VuZGlmCisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgIGNvdW50X3RyYWNrZWQrKzsKKyNlbmRpZgogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhvcCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTEzMSw2ICsxNTUsMzIgQEAKICAgICByZXR1cm4gMDsKIH0KIAordm9pZAorX1B5VHVwbGVfTWF5YmVVbnRyYWNrKFB5T2JqZWN0ICpvcCkKK3sKKyAgICBQeVR1cGxlT2JqZWN0ICp0OworICAgIFB5X3NzaXplX3QgaSwgbjsKKworICAgIGlmICghUHlUdXBsZV9DaGVja0V4YWN0KG9wKSB8fCAhX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQob3ApKQorICAgICAgICByZXR1cm47CisgICAgdCA9IChQeVR1cGxlT2JqZWN0ICopIG9wOworICAgIG4gPSBQeV9TSVpFKHQpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKmVsdCA9IFB5VHVwbGVfR0VUX0lURU0odCwgaSk7CisgICAgICAgIC8qIFR1cGxlIHdpdGggTlVMTCBlbGVtZW50cyBhcmVuJ3QKKyAgICAgICAgICAgZnVsbHkgY29uc3RydWN0ZWQsIGRvbid0IHVudHJhY2sKKyAgICAgICAgICAgdGhlbSB5ZXQuICovCisgICAgICAgIGlmICghZWx0IHx8CisgICAgICAgICAgICBfUHlPYmplY3RfR0NfTUFZX0JFX1RSQUNLRUQoZWx0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisjaWZkZWYgU0hPV19UUkFDS19DT1VOVAorICAgIGNvdW50X3RyYWNrZWQtLTsKKyAgICBjb3VudF91bnRyYWNrZWQrKzsKKyNlbmRpZgorICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKG9wKTsKK30KKwogUHlPYmplY3QgKgogUHlUdXBsZV9QYWNrKFB5X3NzaXplX3QgbiwgLi4uKQogewpAQCAtNDgzLDcgKzUzMyw3IEBACiAgICAgICAgIGVsc2UgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0dXBsZS5pbmRleCh4KTogeCBub3QgaW4gbGlzdCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidHVwbGUuaW5kZXgoeCk6IHggbm90IGluIHR1cGxlIik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTgyNCw3ICs4NzQsOCBAQAogCiAgICAgLyogWFhYIFVOUkVGL05FV1JFRiBpbnRlcmZhY2Ugc2hvdWxkIGJlIG1vcmUgc3ltbWV0cmljYWwgKi8KICAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHYpOworICAgIGlmIChfUHlPYmplY3RfR0NfSVNfVFJBQ0tFRCh2KSkKKyAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodik7CiAgICAgX1B5X0ZvcmdldFJlZmVyZW5jZSgoUHlPYmplY3QgKikgdik7CiAgICAgLyogREVDUkVGIGl0ZW1zIGRlbGV0ZWQgYnkgc2hyaW5rYWdlICovCiAgICAgZm9yIChpID0gbmV3c2l6ZTsgaSA8IG9sZHNpemU7IGkrKykgewpAQCAtODgwLDYgKzkzMSw5IEBACiAKICAgICAodm9pZClQeVR1cGxlX0NsZWFyRnJlZUxpc3QoKTsKICNlbmRpZgorI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKKyAgICBzaG93X3RyYWNrKCk7CisjZW5kaWYKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqIFR1cGxlIEl0ZXJhdG9yICoqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90eXBlb2JqZWN0LmMgYi9PYmplY3RzL3R5cGVvYmplY3QuYwppbmRleCA0Yzk3MjY0Li42NmQ2ZGNhIDEwMDY0NAotLS0gYS9PYmplY3RzL3R5cGVvYmplY3QuYworKysgYi9PYmplY3RzL3R5cGVvYmplY3QuYwpAQCAtMTg4LDggKzE4OCw4IEBACiAKIAogc3RhdGljIFB5TWVtYmVyRGVmIHR5cGVfbWVtYmVyc1tdID0gewotICAgIHsiX19iYXNpY3NpemVfXyIsIFRfSU5ULCBvZmZzZXRvZihQeVR5cGVPYmplY3QsdHBfYmFzaWNzaXplKSxSRUFET05MWX0sCi0gICAgeyJfX2l0ZW1zaXplX18iLCBUX0lOVCwgb2Zmc2V0b2YoUHlUeXBlT2JqZWN0LCB0cF9pdGVtc2l6ZSksIFJFQURPTkxZfSwKKyAgICB7Il9fYmFzaWNzaXplX18iLCBUX1BZU1NJWkVULCBvZmZzZXRvZihQeVR5cGVPYmplY3QsdHBfYmFzaWNzaXplKSxSRUFET05MWX0sCisgICAgeyJfX2l0ZW1zaXplX18iLCBUX1BZU1NJWkVULCBvZmZzZXRvZihQeVR5cGVPYmplY3QsIHRwX2l0ZW1zaXplKSwgUkVBRE9OTFl9LAogICAgIHsiX19mbGFnc19fIiwgVF9MT05HLCBvZmZzZXRvZihQeVR5cGVPYmplY3QsIHRwX2ZsYWdzKSwgUkVBRE9OTFl9LAogICAgIHsiX193ZWFrcmVmb2Zmc2V0X18iLCBUX0xPTkcsCiAgICAgIG9mZnNldG9mKFB5VHlwZU9iamVjdCwgdHBfd2Vha2xpc3RvZmZzZXQpLCBSRUFET05MWX0sCkBAIC0zMDcsMTAgKzMwNywxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHR5cGVfYWJzdHJhY3RtZXRob2RzKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBQeU9iamVjdCAqbW9kID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICBQeU9iamVjdCAqbW9kID0gTlVMTDsKKyAgICAvKiB0eXBlIGl0c2VsZiBoYXMgYW4gX19hYnN0cmFjdG1ldGhvZHNfXyBkZXNjcmlwdG9yICh0aGlzKS4gRG9uJ3QgcmV0dXJuCisgICAgICAgdGhhdC4gKi8KKyAgICBpZiAodHlwZSAhPSAmUHlUeXBlX1R5cGUpCisgICAgICAgIG1vZCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CiAgICAgaWYgKCFtb2QpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9YSU5DUkVGKG1vZCk7CkBAIC0zMjQsOCArMzI3LDE3IEBACiAgICAgICAgYWJjLkFCQ01ldGEuX19uZXdfXywgc28gdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvIGFueXRoaW5nCiAgICAgICAgc3BlY2lhbCB0byB1cGRhdGUgc3ViY2xhc3Nlcy4KICAgICAqLwotICAgIGludCByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19hYnN0cmFjdG1ldGhvZHNfXyIsIHZhbHVlKTsKKyAgICBpbnQgcmVzOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIiwgdmFsdWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzID0gUHlEaWN0X0RlbEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgaWYgKHJlcyAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQogICAgIGlmIChyZXMgPT0gMCkgewogICAgICAgICBQeVR5cGVfTW9kaWZpZWQodHlwZSk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiBQeU9iamVjdF9Jc1RydWUodmFsdWUpKSB7CkBAIC01ODYsMTQgKzU5OCw2IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLXR5cGVfZ2V0X2luc3RhbmNlY2hlY2soUHlPYmplY3QgKnR5cGUsIHZvaWQgKmNvbnRleHQpCi17Ci0gICAgc3RhdGljIFB5TWV0aG9kRGVmIG1sID0geyJfX2luc3RhbmNlY2hlY2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfX19pbnN0YW5jZWNoZWNrX18sIE1FVEhfTyB9OwotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXcoJm1sLCB0eXBlKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHR5cGVfX19zdWJjbGFzc2NoZWNrX18oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppbnN0KQogewogICAgIHN3aXRjaCAoX1B5T2JqZWN0X1JlYWxJc1N1YmNsYXNzKGluc3QsIHR5cGUpKSB7CkBAIC02MDYsMTMgKzYxMCw2IEBACiAgICAgfQogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdHlwZV9nZXRfc3ViY2xhc3NjaGVjayhQeU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLSAgICBzdGF0aWMgUHlNZXRob2REZWYgbWwgPSB7Il9fc3ViY2xhc3NjaGVja19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9fX3N1YmNsYXNzY2hlY2tfXywgTUVUSF9PIH07Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldygmbWwsIHR5cGUpOwotfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgdHlwZV9nZXRzZXRzW10gPSB7CiAgICAgeyJfX25hbWVfXyIsIChnZXR0ZXIpdHlwZV9uYW1lLCAoc2V0dGVyKXR5cGVfc2V0X25hbWUsIE5VTEx9LApAQCAtNjIyLDggKzYxOSw2IEBACiAgICAgIChzZXR0ZXIpdHlwZV9zZXRfYWJzdHJhY3RtZXRob2RzLCBOVUxMfSwKICAgICB7Il9fZGljdF9fIiwgIChnZXR0ZXIpdHlwZV9kaWN0LCAgTlVMTCwgTlVMTH0sCiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil0eXBlX2dldF9kb2MsIE5VTEwsIE5VTEx9LAotICAgIHsiX19pbnN0YW5jZWNoZWNrX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X2luc3RhbmNlY2hlY2ssIE5VTEwsIE5VTEx9LAotICAgIHsiX19zdWJjbGFzc2NoZWNrX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X3N1YmNsYXNzY2hlY2ssIE5VTEwsIE5VTEx9LAogICAgIHswfQogfTsKIApAQCAtOTg4LDcgKzk4Myw3IEBACiAKICAgICAvKiAgQ2xlYXIgc2xvdHMgdXAgdG8gdGhlIG5lYXJlc3QgYmFzZSB3aXRoIGEgZGlmZmVyZW50IHRwX2RlYWxsb2MgKi8KICAgICBiYXNlID0gdHlwZTsKLSAgICB3aGlsZSAoKGJhc2VkZWFsbG9jID0gYmFzZS0+dHBfZGVhbGxvYykgPT0gc3VidHlwZV9kZWFsbG9jKSB7CisgICAgd2hpbGUgKGJhc2UtPnRwX2RlYWxsb2MgPT0gc3VidHlwZV9kZWFsbG9jKSB7CiAgICAgICAgIGlmIChQeV9TSVpFKGJhc2UpKQogICAgICAgICAgICAgY2xlYXJfc2xvdHMoYmFzZSwgc2VsZik7CiAgICAgICAgIGJhc2UgPSBiYXNlLT50cF9iYXNlOwpAQCAtMTE3NCw2ICsxMTY5LDggQEAKICAgICAgd2hlbiB0aGUgX1B5VHlwZV9Mb29rdXAoKSBjYWxsIGZhaWxzOwogCiAgICAtIGxvb2t1cF9tZXRob2QoKSBhbHdheXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiB1cG9uIGVycm9ycy4KKworICAgLSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbCgpIGV4cG9ydGVkIGZvciB0aGUgYmVuZWZpdCBvZiBvdGhlciBwbGFjZXMuCiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTIwNiw2ICsxMjAzLDEzIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorUHlPYmplY3QgKgorX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoUHlPYmplY3QgKnNlbGYsIGNoYXIgKmF0dHJzdHIsIFB5T2JqZWN0ICoqYXR0cm9iaikKK3sKKyAgICBhc3NlcnQoIVB5SW5zdGFuY2VfQ2hlY2soc2VsZikpOworICAgIHJldHVybiBsb29rdXBfbWF5YmUoc2VsZiwgYXR0cnN0ciwgYXR0cm9iaik7Cit9CisKIC8qIEEgdmFyaWF0aW9uIG9mIFB5T2JqZWN0X0NhbGxNZXRob2QgdGhhdCB1c2VzIGxvb2t1cF9tZXRob2QoKQogICAgaW5zdGVhZCBvZiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKCkuICBUaGlzIHVzZXMgdGhlIHNhbWUgY29udmVudGlvbgogICAgYXMgbG9va3VwX21ldGhvZCB0byBjYWNoZSB0aGUgaW50ZXJuZWQgbmFtZSBzdHJpbmcgb2JqZWN0LiAqLwpAQCAtMjMwNSw2ICsyMzA5LDggQEAKICAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRTsKICAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpCiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9HQzsKKyAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSKQorICAgICAgICB0eXBlLT50cF9mbGFncyB8PSBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSOwogCiAgICAgLyogSXQncyBhIG5ldy1zdHlsZSBudW1iZXIgdW5sZXNzIGl0IHNwZWNpZmljYWxseSBpbmhlcml0cyBhbnkKICAgICAgICBvbGQtc3R5bGUgbnVtZXJpYyBiZWhhdmlvciAqLwpAQCAtMjY1OCw2ICsyNjY0LDEwIEBACiAgICAgIFB5RG9jX1NUUigibXJvKCkgLT4gbGlzdFxucmV0dXJuIGEgdHlwZSdzIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIil9LAogICAgIHsiX19zdWJjbGFzc2VzX18iLCAoUHlDRnVuY3Rpb24pdHlwZV9zdWJjbGFzc2VzLCBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCJfX3N1YmNsYXNzZXNfXygpIC0+IGxpc3Qgb2YgaW1tZWRpYXRlIHN1YmNsYXNzZXMiKX0sCisgICAgeyJfX2luc3RhbmNlY2hlY2tfXyIsIHR5cGVfX19pbnN0YW5jZWNoZWNrX18sIE1FVEhfTywKKyAgICAgUHlEb2NfU1RSKCJfX2luc3RhbmNlY2hlY2tfXygpIC0+IGNoZWNrIGlmIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSIpfSwKKyAgICB7Il9fc3ViY2xhc3NjaGVja19fIiwgdHlwZV9fX3N1YmNsYXNzY2hlY2tfXywgTUVUSF9PLAorICAgICBQeURvY19TVFIoIl9fc3ViY2xhc3NjaGVja19fKCkgLT4gY2hlY2sgaWYgYSBjbGFzcyBpcyBhIHN1YmNsYXNzIil9LAogICAgIHswfQogfTsKIApAQCAtMzAwMSwxMCArMzAxMSw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5T2JqZWN0ICpzbG90c19hLCAqc2xvdHNfYjsKIAotICAgIGlmIChiYXNlICE9IGItPnRwX2Jhc2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChlcXVpdl9zdHJ1Y3RzKGEsIGJhc2UpICYmIGVxdWl2X3N0cnVjdHMoYiwgYmFzZSkpCi0gICAgICAgIHJldHVybiAxOworICAgIGFzc2VydChiYXNlID09IGItPnRwX2Jhc2UpOwogICAgIHNpemUgPSBiYXNlLT50cF9iYXNpY3NpemU7CiAgICAgaWYgKGEtPnRwX2RpY3RvZmZzZXQgPT0gc2l6ZSAmJiBiLT50cF9kaWN0b2Zmc2V0ID09IHNpemUpCiAgICAgICAgIHNpemUgKz0gc2l6ZW9mKFB5T2JqZWN0ICopOwpAQCAtMzQxNSwzMCArMzQyMiw0NiBAQAogICAgIFB5T2JqZWN0ICpmb3JtYXRfc3BlYzsKICAgICBQeU9iamVjdCAqc2VsZl9hc19zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmb3JtYXRfbWV0aCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBmb3JtYXRfbGVuOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhmb3JtYXRfc3BlYykpIHsKKyAgICAgICAgZm9ybWF0X2xlbiA9IFB5VW5pY29kZV9HRVRfU0laRShmb3JtYXRfc3BlYyk7CiAgICAgICAgIHNlbGZfYXNfc3RyID0gUHlPYmplY3RfVW5pY29kZShzZWxmKTsKICAgICB9IGVsc2UgaWYgKFB5U3RyaW5nX0NoZWNrKGZvcm1hdF9zcGVjKSkgeworI2Vsc2UKKyAgICBpZiAoUHlTdHJpbmdfQ2hlY2soZm9ybWF0X3NwZWMpKSB7CisjZW5kaWYKKyAgICAgICAgZm9ybWF0X2xlbiA9IFB5U3RyaW5nX0dFVF9TSVpFKGZvcm1hdF9zcGVjKTsKICAgICAgICAgc2VsZl9hc19zdHIgPSBQeU9iamVjdF9TdHIoc2VsZik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IHRvIF9fZm9ybWF0X18gbXVzdCBiZSB1bmljb2RlIG9yIHN0ciIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAiYXJndW1lbnQgdG8gX19mb3JtYXRfXyBtdXN0IGJlIHVuaWNvZGUgb3Igc3RyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChzZWxmX2FzX3N0ciAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIGZpbmQgdGhlIGZvcm1hdCBmdW5jdGlvbiAqLwotICAgICAgICBmb3JtYXRfbWV0aCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZl9hc19zdHIsICJfX2Zvcm1hdF9fIik7Ci0gICAgICAgIGlmIChmb3JtYXRfbWV0aCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAvKiBhbmQgY2FsbCBpdCAqLwotICAgICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmb3JtYXRfbWV0aCwgZm9ybWF0X3NwZWMsIE5VTEwpOworICAgICAgICAvKiBJc3N1ZSA3OTk0OiBJZiB3ZSdyZSBjb252ZXJ0aW5nIHRvIGEgc3RyaW5nLCB3ZQorICAgICAgICAgICBzaG91bGQgcmVqZWN0IGZvcm1hdCBzcGVjaWZpY2F0aW9ucyAqLworICAgICAgICBpZiAoZm9ybWF0X2xlbiA+IDApIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAib2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgIgorICAgICAgICAgICAgICJzdHJpbmcgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkgeworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvcjoKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAibm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgcGFzc2VkIHRvIG9iamVjdC5fX2Zvcm1hdF9fIik7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAqLwogICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0Zvcm1hdChzZWxmX2FzX3N0ciwgZm9ybWF0X3NwZWMpOwogICAgIH0KIAorZG9uZToKICAgICBQeV9YREVDUkVGKHNlbGZfYXNfc3RyKTsKLSAgICBQeV9YREVDUkVGKGZvcm1hdF9tZXRoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNTkzLDYgKzM2MTYsOCBAQAogICAgIHJldHVybiAwOwogfQogCisjZGVmaW5lIEJVRkZFUl9GTEFHUyAoUHlfVFBGTEFHU19IQVZFX0dFVENIQVJCVUZGRVIgfCBQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSKQorCiBzdGF0aWMgdm9pZAogaW5oZXJpdF9zcGVjaWFsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlUeXBlT2JqZWN0ICpiYXNlKQogewpAQCAtMzYwMCw5ICszNjI1LDkgQEAKIAogICAgIC8qIFNwZWNpYWwgZmxhZyBtYWdpYyAqLwogICAgIGlmICghdHlwZS0+dHBfYXNfYnVmZmVyICYmIGJhc2UtPnRwX2FzX2J1ZmZlcikgewotICAgICAgICB0eXBlLT50cF9mbGFncyAmPSB+UHlfVFBGTEFHU19IQVZFX0dFVENIQVJCVUZGRVI7CisgICAgICAgIHR5cGUtPnRwX2ZsYWdzICY9IH5CVUZGRVJfRkxBR1M7CiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9Ci0gICAgICAgICAgICBiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HRVRDSEFSQlVGRkVSOworICAgICAgICAgICAgYmFzZS0+dHBfZmxhZ3MgJiBCVUZGRVJfRkxBR1M7CiAgICAgfQogICAgIGlmICghdHlwZS0+dHBfYXNfc2VxdWVuY2UgJiYgYmFzZS0+dHBfYXNfc2VxdWVuY2UpIHsKICAgICAgICAgdHlwZS0+dHBfZmxhZ3MgJj0gflB5X1RQRkxBR1NfSEFWRV9TRVFVRU5DRV9JTjsKQEAgLTU5ODUsNyArNjAxMCw3IEBACiAgICAgICAgICAgIHdyYXBfZGVzY3JfZGVsZXRlLCAiZGVzY3IuX19kZWxldGVfXyhvYmopIiksCiAgICAgRkxTTE9UKCJfX2luaXRfXyIsIHRwX2luaXQsIHNsb3RfdHBfaW5pdCwgKHdyYXBwZXJmdW5jKXdyYXBfaW5pdCwKICAgICAgICAgICAgInguX19pbml0X18oLi4uKSBpbml0aWFsaXplcyB4OyAiCi0gICAgICAgICAgICJzZWUgeC5fX2NsYXNzX18uX19kb2NfXyBmb3Igc2lnbmF0dXJlIiwKKyAgICAgICAgICAgInNlZSBoZWxwKHR5cGUoeCkpIGZvciBzaWduYXR1cmUiLAogICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKICAgICBUUFNMT1QoIl9fbmV3X18iLCB0cF9uZXcsIHNsb3RfdHBfbmV3LCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZGVsLCBzbG90X3RwX2RlbCwgTlVMTCwgIiIpLApAQCAtNjA5NCw4ICs2MTE5LDEyIEBACiAgICAgfQogICAgIGRvIHsKICAgICAgICAgZGVzY3IgPSBfUHlUeXBlX0xvb2t1cCh0eXBlLCBwLT5uYW1lX3N0cm9iaik7Ci0gICAgICAgIGlmIChkZXNjciA9PSBOVUxMKQorICAgICAgICBpZiAoZGVzY3IgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHB0ciA9PSAodm9pZCoqKSZ0eXBlLT50cF9pdGVybmV4dCkgeworICAgICAgICAgICAgICAgIHNwZWNpZmljID0gX1B5T2JqZWN0X05leHROb3RJbXBsZW1lbnRlZDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAgIGlmIChQeV9UWVBFKGRlc2NyKSA9PSAmUHlXcmFwcGVyRGVzY3JfVHlwZSkgewogICAgICAgICAgICAgdm9pZCAqKnRwdHIgPSByZXNvbHZlX3Nsb3RkdXBzKHR5cGUsIHAtPm5hbWVfc3Ryb2JqKTsKICAgICAgICAgICAgIGlmICh0cHRyID09IE5VTEwgfHwgdHB0ciA9PSBwdHIpCkBAIC02MTE0LDcgKzYxNDMsNyBAQAogICAgICAgICBlbHNlIGlmIChQeV9UWVBFKGRlc2NyKSA9PSAmUHlDRnVuY3Rpb25fVHlwZSAmJgogICAgICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZGVzY3IpID09CiAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0cF9uZXdfd3JhcHBlciAmJgotICAgICAgICAgICAgICAgICBzdHJjbXAocC0+bmFtZSwgIl9fbmV3X18iKSA9PSAwKQorICAgICAgICAgICAgICAgICBwdHIgPT0gKHZvaWQqKikmdHlwZS0+dHBfbmV3KQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBUaGUgX19uZXdfXyB3cmFwcGVyIGlzIG5vdCBhIHdyYXBwZXIgZGVzY3JpcHRvciwKICAgICAgICAgICAgICAgIHNvIG11c3QgYmUgc3BlY2lhbC1jYXNlZCBkaWZmZXJlbnRseS4KQEAgLTYxMzQsNyArNjE2Myw3IEBACiAgICAgICAgICAgICAgICBwb2ludCBvdXQgYSBidWcgaW4gdGhpcyByZWFzb25pbmcgYSBiZWVyLiAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGRlc2NyID09IFB5X05vbmUgJiYKLSAgICAgICAgICAgICAgICAgc3RyY21wKHAtPm5hbWUsICJfX2hhc2hfXyIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgcHRyID09ICh2b2lkKiopJnR5cGUtPnRwX2hhc2gpIHsKICAgICAgICAgICAgIC8qIFdlIHNwZWNpZmljYWxseSBhbGxvdyBfX2hhc2hfXyB0byBiZSBzZXQgdG8gTm9uZQogICAgICAgICAgICAgICAgdG8gcHJldmVudCBpbmhlcml0YW5jZSBvZiB0aGUgZGVmYXVsdAogICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gZnJvbSBvYmplY3QuX19oYXNoX18gKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCmluZGV4IDc4YzQwYjUuLjljNDM5YTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMKKysrIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwpAQCAtMjAsNiArMjAsNyBAQAogI2RlZmluZSBUSVRMRV9NQVNLIDB4NDAKICNkZWZpbmUgVVBQRVJfTUFTSyAweDgwCiAjZGVmaW5lIE5PREVMVEFfTUFTSyAweDEwMAorI2RlZmluZSBOVU1FUklDX01BU0sgMHgyMDAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNvbnN0IFB5X1VOSUNPREUgdXBwZXI7CkBAIC0zOSwzNyArNDAsMTcgQEAKIAogI2lmZGVmIFB5X1VOSUNPREVfV0lERQogICAgIGlmIChjb2RlID49IDB4MTEwMDAwKQotICAgIGluZGV4ID0gMDsKKyAgICAgICAgaW5kZXggPSAwOwogICAgIGVsc2UKICNlbmRpZgogICAgIHsKLSAgICBpbmRleCA9IGluZGV4MVsoY29kZT4+U0hJRlQpXTsKLSAgICBpbmRleCA9IGluZGV4MlsoaW5kZXg8PFNISUZUKSsoY29kZSYoKDE8PFNISUZUKS0xKSldOworICAgICAgICBpbmRleCA9IGluZGV4MVsoY29kZT4+U0hJRlQpXTsKKyAgICAgICAgaW5kZXggPSBpbmRleDJbKGluZGV4PDxTSElGVCkrKGNvZGUmKCgxPDxTSElGVCktMSkpXTsKICAgICB9CiAKICAgICByZXR1cm4gJl9QeVVuaWNvZGVfVHlwZVJlY29yZHNbaW5kZXhdOwogfQogCi0vKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGNhdGVnb3J5ICdabCcsICdacCcgb3IKLSAgIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4gKi8KLQotaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSBjaCkKLXsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgY2FzZSAweDAwMEE6IC8qIExJTkUgRkVFRCAqLwotICAgIGNhc2UgMHgwMDBEOiAvKiBDQVJSSUFHRSBSRVRVUk4gKi8KLSAgICBjYXNlIDB4MDAxQzogLyogRklMRSBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDAxRDogLyogR1JPVVAgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDAwMUU6IC8qIFJFQ09SRCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDA4NTogLyogTkVYVCBMSU5FICovCi0gICAgY2FzZSAweDIwMjg6IC8qIExJTkUgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDIwMjk6IC8qIFBBUkFHUkFQSCBTRVBBUkFUT1IgKi8KLSAgICByZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogLyogUmV0dXJucyB0aGUgdGl0bGVjYXNlIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIGNoIG9yIGp1c3QKICAgIGNoIGlmIG5vIHRpdGxlY2FzZSBtYXBwaW5nIGlzIGtub3duLiAqLwogCkBAIC03OSwxMCArNjAsMTAgQEAKICAgICBpbnQgZGVsdGEgPSBjdHlwZS0+dGl0bGU7CiAKICAgICBpZiAoY3R5cGUtPmZsYWdzICYgTk9ERUxUQV9NQVNLKQotICAgIHJldHVybiBkZWx0YTsKKwlyZXR1cm4gZGVsdGE7CiAKICAgICBpZiAoZGVsdGEgPj0gMzI3NjgpCi0gICAgICAgIGRlbHRhIC09IDY1NTM2OworCSAgICBkZWx0YSAtPSA2NTUzNjsKIAogICAgIHJldHVybiBjaCArIGRlbHRhOwogfQpAQCAtMTEwLDcgKzkxLDcgQEAKIGludCBfUHlVbmljb2RlX0lzRGVjaW1hbERpZ2l0KFB5X1VOSUNPREUgY2gpCiB7CiAgICAgaWYgKF9QeVVuaWNvZGVfVG9EZWNpbWFsRGlnaXQoY2gpIDwgMCkKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTI3LDU3NSArMTA4LDIyIEBACiBpbnQgX1B5VW5pY29kZV9Jc0RpZ2l0KFB5X1VOSUNPREUgY2gpCiB7CiAgICAgaWYgKF9QeVVuaWNvZGVfVG9EaWdpdChjaCkgPCAwKQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiAxOwogfQogCiAvKiBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIGFzIGRvdWJsZSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZwogICAgdGhpcyBwcm9wZXJ0eSwgLTEuMCBvdGhlcndpc2UuICovCiAKLS8qIFRPRE86IHJlcGxhY2Ugd2l0aCB1bmljb2RldHlwZV9kYi5oIHRhYmxlICovCi0KLWRvdWJsZSBfUHlVbmljb2RlX1RvTnVtZXJpYyhQeV9VTklDT0RFIGNoKQotewotICAgIHN3aXRjaCAoY2gpIHsKLSAgICBjYXNlIDB4MEYzMzoKLSAgICByZXR1cm4gKGRvdWJsZSkgLTEgLyAyOwotICAgIGNhc2UgMHgxN0YwOgotICAgIGNhc2UgMHgzMDA3OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE4QToKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAwOwotICAgIGNhc2UgMHgwOUY0OgotICAgIGNhc2UgMHgxN0YxOgotICAgIGNhc2UgMHgyMTVGOgotICAgIGNhc2UgMHgyMTYwOgotICAgIGNhc2UgMHgyMTcwOgotICAgIGNhc2UgMHgzMDIxOgotICAgIGNhc2UgMHgzMTkyOgotICAgIGNhc2UgMHgzMjIwOgotICAgIGNhc2UgMHgzMjgwOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwNzoKLSAgICBjYXNlIDB4MTAxNDI6Ci0gICAgY2FzZSAweDEwMTU4OgotICAgIGNhc2UgMHgxMDE1OToKLSAgICBjYXNlIDB4MTAxNUE6Ci0gICAgY2FzZSAweDEwMzIwOgotICAgIGNhc2UgMHgxMDNEMToKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAxOwotICAgIGNhc2UgMHgwMEJEOgotICAgIGNhc2UgMHgwRjJBOgotICAgIGNhc2UgMHgyQ0ZEOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE0MToKLSAgICBjYXNlIDB4MTAxNzU6Ci0gICAgY2FzZSAweDEwMTc2OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDEgLyAyOwotICAgIGNhc2UgMHgyMTUzOgotICAgIHJldHVybiAoZG91YmxlKSAxIC8gMzsKLSAgICBjYXNlIDB4MDBCQzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxNDA6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDQ7Ci0gICAgY2FzZSAweDIxNTU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDEgLyA1OwotICAgIGNhc2UgMHgyMTU5OgotICAgIHJldHVybiAoZG91YmxlKSAxIC8gNjsKLSAgICBjYXNlIDB4MjE1QjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDg7Ci0gICAgY2FzZSAweDBCRjA6Ci0gICAgY2FzZSAweDEzNzI6Ci0gICAgY2FzZSAweDIxNjk6Ci0gICAgY2FzZSAweDIxNzk6Ci0gICAgY2FzZSAweDI0Njk6Ci0gICAgY2FzZSAweDI0N0Q6Ci0gICAgY2FzZSAweDI0OTE6Ci0gICAgY2FzZSAweDI0RkU6Ci0gICAgY2FzZSAweDI3N0Y6Ci0gICAgY2FzZSAweDI3ODk6Ci0gICAgY2FzZSAweDI3OTM6Ci0gICAgY2FzZSAweDMwMzg6Ci0gICAgY2FzZSAweDMyMjk6Ci0gICAgY2FzZSAweDMyODk6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTEwOgotICAgIGNhc2UgMHgxMDE0OToKLSAgICBjYXNlIDB4MTAxNTA6Ci0gICAgY2FzZSAweDEwMTU3OgotICAgIGNhc2UgMHgxMDE2MDoKLSAgICBjYXNlIDB4MTAxNjE6Ci0gICAgY2FzZSAweDEwMTYyOgotICAgIGNhc2UgMHgxMDE2MzoKLSAgICBjYXNlIDB4MTAxNjQ6Ci0gICAgY2FzZSAweDEwMzIyOgotICAgIGNhc2UgMHgxMDNEMzoKLSAgICBjYXNlIDB4MTBBNDQ6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMTA7Ci0gICAgY2FzZSAweDBCRjE6Ci0gICAgY2FzZSAweDEzN0I6Ci0gICAgY2FzZSAweDIxNkQ6Ci0gICAgY2FzZSAweDIxN0Q6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE5OgotICAgIGNhc2UgMHgxMDE0QjoKLSAgICBjYXNlIDB4MTAxNTI6Ci0gICAgY2FzZSAweDEwMTZBOgotICAgIGNhc2UgMHgxMDNENToKLSAgICBjYXNlIDB4MTBBNDY6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMTAwOwotICAgIGNhc2UgMHgwQkYyOgotICAgIGNhc2UgMHgyMTZGOgotICAgIGNhc2UgMHgyMTdGOgotICAgIGNhc2UgMHgyMTgwOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEyMjoKLSAgICBjYXNlIDB4MTAxNEQ6Ci0gICAgY2FzZSAweDEwMTU0OgotICAgIGNhc2UgMHgxMDE3MToKLSAgICBjYXNlIDB4MTBBNDc6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDsKLSAgICBjYXNlIDB4MTM3QzoKLSAgICBjYXNlIDB4MjE4MjoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMkI6Ci0gICAgY2FzZSAweDEwMTU1OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDEwMDAwOwotICAgIGNhc2UgMHgyMTZBOgotICAgIGNhc2UgMHgyMTdBOgotICAgIGNhc2UgMHgyNDZBOgotICAgIGNhc2UgMHgyNDdFOgotICAgIGNhc2UgMHgyNDkyOgotICAgIGNhc2UgMHgyNEVCOgotICAgIHJldHVybiAoZG91YmxlKSAxMTsKLSAgICBjYXNlIDB4MEYyRjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTEgLyAyOwotICAgIGNhc2UgMHgyMTZCOgotICAgIGNhc2UgMHgyMTdCOgotICAgIGNhc2UgMHgyNDZCOgotICAgIGNhc2UgMHgyNDdGOgotICAgIGNhc2UgMHgyNDkzOgotICAgIGNhc2UgMHgyNEVDOgotICAgIHJldHVybiAoZG91YmxlKSAxMjsKLSAgICBjYXNlIDB4MjQ2QzoKLSAgICBjYXNlIDB4MjQ4MDoKLSAgICBjYXNlIDB4MjQ5NDoKLSAgICBjYXNlIDB4MjRFRDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTM7Ci0gICAgY2FzZSAweDBGMzA6Ci0gICAgcmV0dXJuIChkb3VibGUpIDEzIC8gMjsKLSAgICBjYXNlIDB4MjQ2RDoKLSAgICBjYXNlIDB4MjQ4MToKLSAgICBjYXNlIDB4MjQ5NToKLSAgICBjYXNlIDB4MjRFRToKLSAgICByZXR1cm4gKGRvdWJsZSkgMTQ7Ci0gICAgY2FzZSAweDI0NkU6Ci0gICAgY2FzZSAweDI0ODI6Ci0gICAgY2FzZSAweDI0OTY6Ci0gICAgY2FzZSAweDI0RUY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDE1OwotICAgIGNhc2UgMHgwRjMxOgotICAgIHJldHVybiAoZG91YmxlKSAxNSAvIDI7Ci0gICAgY2FzZSAweDA5Rjk6Ci0gICAgY2FzZSAweDI0NkY6Ci0gICAgY2FzZSAweDI0ODM6Ci0gICAgY2FzZSAweDI0OTc6Ci0gICAgY2FzZSAweDI0RjA6Ci0gICAgcmV0dXJuIChkb3VibGUpIDE2OwotICAgIGNhc2UgMHgxNkVFOgotICAgIGNhc2UgMHgyNDcwOgotICAgIGNhc2UgMHgyNDg0OgotICAgIGNhc2UgMHgyNDk4OgotICAgIGNhc2UgMHgyNEYxOgotICAgIHJldHVybiAoZG91YmxlKSAxNzsKLSAgICBjYXNlIDB4MEYzMjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTcgLyAyOwotICAgIGNhc2UgMHgxNkVGOgotICAgIGNhc2UgMHgyNDcxOgotICAgIGNhc2UgMHgyNDg1OgotICAgIGNhc2UgMHgyNDk5OgotICAgIGNhc2UgMHgyNEYyOgotICAgIHJldHVybiAoZG91YmxlKSAxODsKLSAgICBjYXNlIDB4MTZGMDoKLSAgICBjYXNlIDB4MjQ3MjoKLSAgICBjYXNlIDB4MjQ4NjoKLSAgICBjYXNlIDB4MjQ5QToKLSAgICBjYXNlIDB4MjRGMzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMTk7Ci0gICAgY2FzZSAweDA5RjU6Ci0gICAgY2FzZSAweDE3RjI6Ci0gICAgY2FzZSAweDIxNjE6Ci0gICAgY2FzZSAweDIxNzE6Ci0gICAgY2FzZSAweDMwMjI6Ci0gICAgY2FzZSAweDMxOTM6Ci0gICAgY2FzZSAweDMyMjE6Ci0gICAgY2FzZSAweDMyODE6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTA4OgotICAgIGNhc2UgMHgxMDE1QjoKLSAgICBjYXNlIDB4MTAxNUM6Ci0gICAgY2FzZSAweDEwMTVEOgotICAgIGNhc2UgMHgxMDE1RToKLSAgICBjYXNlIDB4MTAzRDI6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMjsKLSAgICBjYXNlIDB4MjE1NDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxNzc6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMiAvIDM7Ci0gICAgY2FzZSAweDIxNTY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDIgLyA1OwotICAgIGNhc2UgMHgxMzczOgotICAgIGNhc2UgMHgyNDczOgotICAgIGNhc2UgMHgyNDg3OgotICAgIGNhc2UgMHgyNDlCOgotICAgIGNhc2UgMHgyNEY0OgotICAgIGNhc2UgMHgzMDM5OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMToKLSAgICBjYXNlIDB4MTAzRDQ6Ci0gICAgY2FzZSAweDEwQTQ1OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDIwOwotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExQToKLSAgICByZXR1cm4gKGRvdWJsZSkgMjAwOwotICAgIGNhc2UgMHgxMDEyMzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDsKLSAgICBjYXNlIDB4MTAxMkM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDIwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDMyNTE6Ci0gICAgcmV0dXJuIChkb3VibGUpIDIxOwotICAgIGNhc2UgMHgzMjUyOgotICAgIHJldHVybiAoZG91YmxlKSAyMjsKLSAgICBjYXNlIDB4MzI1MzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjM7Ci0gICAgY2FzZSAweDMyNTQ6Ci0gICAgcmV0dXJuIChkb3VibGUpIDI0OwotICAgIGNhc2UgMHgzMjU1OgotICAgIHJldHVybiAoZG91YmxlKSAyNTsKLSAgICBjYXNlIDB4MzI1NjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMjY7Ci0gICAgY2FzZSAweDMyNTc6Ci0gICAgcmV0dXJuIChkb3VibGUpIDI3OwotICAgIGNhc2UgMHgzMjU4OgotICAgIHJldHVybiAoZG91YmxlKSAyODsKLSAgICBjYXNlIDB4MzI1OToKLSAgICByZXR1cm4gKGRvdWJsZSkgMjk7Ci0gICAgY2FzZSAweDA5RjY6Ci0gICAgY2FzZSAweDE3RjM6Ci0gICAgY2FzZSAweDIxNjI6Ci0gICAgY2FzZSAweDIxNzI6Ci0gICAgY2FzZSAweDMwMjM6Ci0gICAgY2FzZSAweDMxOTQ6Ci0gICAgY2FzZSAweDMyMjI6Ci0gICAgY2FzZSAweDMyODI6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTA5OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDM7Ci0gICAgY2FzZSAweDBGMkI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDMgLyAyOwotICAgIGNhc2UgMHgwMEJFOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE3ODoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSAzIC8gNDsKLSAgICBjYXNlIDB4MjE1NzoKLSAgICByZXR1cm4gKGRvdWJsZSkgMyAvIDU7Ci0gICAgY2FzZSAweDIxNUM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDMgLyA4OwotICAgIGNhc2UgMHgxMzc0OgotICAgIGNhc2UgMHgzMDNBOgotICAgIGNhc2UgMHgzMjVBOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMjoKLSAgICBjYXNlIDB4MTAxNjU6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgMzA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFCOgotICAgIGNhc2UgMHgxMDE2QjoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzAwOwotICAgIGNhc2UgMHgxMDEyNDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzAwMDsKLSAgICBjYXNlIDB4MTAxMkQ6Ci0gICAgcmV0dXJuIChkb3VibGUpIDMwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDMyNUI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDMxOwotICAgIGNhc2UgMHgzMjVDOgotICAgIHJldHVybiAoZG91YmxlKSAzMjsKLSAgICBjYXNlIDB4MzI1RDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzM7Ci0gICAgY2FzZSAweDMyNUU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDM0OwotICAgIGNhc2UgMHgzMjVGOgotICAgIHJldHVybiAoZG91YmxlKSAzNTsKLSAgICBjYXNlIDB4MzJCMToKLSAgICByZXR1cm4gKGRvdWJsZSkgMzY7Ci0gICAgY2FzZSAweDMyQjI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDM3OwotICAgIGNhc2UgMHgzMkIzOgotICAgIHJldHVybiAoZG91YmxlKSAzODsKLSAgICBjYXNlIDB4MzJCNDoKLSAgICByZXR1cm4gKGRvdWJsZSkgMzk7Ci0gICAgY2FzZSAweDA5Rjc6Ci0gICAgY2FzZSAweDE3RjQ6Ci0gICAgY2FzZSAweDIxNjM6Ci0gICAgY2FzZSAweDIxNzM6Ci0gICAgY2FzZSAweDMwMjQ6Ci0gICAgY2FzZSAweDMxOTU6Ci0gICAgY2FzZSAweDMyMjM6Ci0gICAgY2FzZSAweDMyODM6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTBBOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDQ7Ci0gICAgY2FzZSAweDIxNTg6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQgLyA1OwotICAgIGNhc2UgMHgxMzc1OgotICAgIGNhc2UgMHgzMkI1OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMzoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA0MDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUM6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQwMDsKLSAgICBjYXNlIDB4MTAxMjU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQwMDA7Ci0gICAgY2FzZSAweDEwMTJFOgotICAgIHJldHVybiAoZG91YmxlKSA0MDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgzMkI2OgotICAgIHJldHVybiAoZG91YmxlKSA0MTsKLSAgICBjYXNlIDB4MzJCNzoKLSAgICByZXR1cm4gKGRvdWJsZSkgNDI7Ci0gICAgY2FzZSAweDMyQjg6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQzOwotICAgIGNhc2UgMHgzMkI5OgotICAgIHJldHVybiAoZG91YmxlKSA0NDsKLSAgICBjYXNlIDB4MzJCQToKLSAgICByZXR1cm4gKGRvdWJsZSkgNDU7Ci0gICAgY2FzZSAweDMyQkI6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQ2OwotICAgIGNhc2UgMHgzMkJDOgotICAgIHJldHVybiAoZG91YmxlKSA0NzsKLSAgICBjYXNlIDB4MzJCRDoKLSAgICByZXR1cm4gKGRvdWJsZSkgNDg7Ci0gICAgY2FzZSAweDMyQkU6Ci0gICAgcmV0dXJuIChkb3VibGUpIDQ5OwotICAgIGNhc2UgMHgxN0Y1OgotICAgIGNhc2UgMHgyMTY0OgotICAgIGNhc2UgMHgyMTc0OgotICAgIGNhc2UgMHgzMDI1OgotICAgIGNhc2UgMHgzMjI0OgotICAgIGNhc2UgMHgzMjg0OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwQjoKLSAgICBjYXNlIDB4MTAxNDM6Ci0gICAgY2FzZSAweDEwMTQ4OgotICAgIGNhc2UgMHgxMDE0RjoKLSAgICBjYXNlIDB4MTAxNUY6Ci0gICAgY2FzZSAweDEwMTczOgotICAgIGNhc2UgMHgxMDMyMToKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA1OwotICAgIGNhc2UgMHgwRjJDOgotICAgIHJldHVybiAoZG91YmxlKSA1IC8gMjsKLSAgICBjYXNlIDB4MjE1QToKLSAgICByZXR1cm4gKGRvdWJsZSkgNSAvIDY7Ci0gICAgY2FzZSAweDIxNUQ6Ci0gICAgcmV0dXJuIChkb3VibGUpIDUgLyA4OwotICAgIGNhc2UgMHgxMzc2OgotICAgIGNhc2UgMHgyMTZDOgotICAgIGNhc2UgMHgyMTdDOgotICAgIGNhc2UgMHgzMkJGOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExNDoKLSAgICBjYXNlIDB4MTAxNDQ6Ci0gICAgY2FzZSAweDEwMTRBOgotICAgIGNhc2UgMHgxMDE1MToKLSAgICBjYXNlIDB4MTAxNjY6Ci0gICAgY2FzZSAweDEwMTY3OgotICAgIGNhc2UgMHgxMDE2ODoKLSAgICBjYXNlIDB4MTAxNjk6Ci0gICAgY2FzZSAweDEwMTc0OgotICAgIGNhc2UgMHgxMDMyMzoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA1MDsKLSAgICBjYXNlIDB4MjE2RToKLSAgICBjYXNlIDB4MjE3RToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUQ6Ci0gICAgY2FzZSAweDEwMTQ1OgotICAgIGNhc2UgMHgxMDE0QzoKLSAgICBjYXNlIDB4MTAxNTM6Ci0gICAgY2FzZSAweDEwMTZDOgotICAgIGNhc2UgMHgxMDE2RDoKLSAgICBjYXNlIDB4MTAxNkU6Ci0gICAgY2FzZSAweDEwMTZGOgotICAgIGNhc2UgMHgxMDE3MDoKLSNlbmRpZgotICAgIHJldHVybiAoZG91YmxlKSA1MDA7Ci0gICAgY2FzZSAweDIxODE6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTI2OgotICAgIGNhc2UgMHgxMDE0NjoKLSAgICBjYXNlIDB4MTAxNEU6Ci0gICAgY2FzZSAweDEwMTcyOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDUwMDA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTJGOgotICAgIGNhc2UgMHgxMDE0NzoKLSAgICBjYXNlIDB4MTAxNTY6Ci0gICAgcmV0dXJuIChkb3VibGUpIDUwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDE3RjY6Ci0gICAgY2FzZSAweDIxNjU6Ci0gICAgY2FzZSAweDIxNzU6Ci0gICAgY2FzZSAweDMwMjY6Ci0gICAgY2FzZSAweDMyMjU6Ci0gICAgY2FzZSAweDMyODU6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTBDOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDY7Ci0gICAgY2FzZSAweDEzNzc6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE1OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDYwOwotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExRToKLSAgICByZXR1cm4gKGRvdWJsZSkgNjAwOwotICAgIGNhc2UgMHgxMDEyNzoKLSAgICByZXR1cm4gKGRvdWJsZSkgNjAwMDsKLSAgICBjYXNlIDB4MTAxMzA6Ci0gICAgcmV0dXJuIChkb3VibGUpIDYwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDE3Rjc6Ci0gICAgY2FzZSAweDIxNjY6Ci0gICAgY2FzZSAweDIxNzY6Ci0gICAgY2FzZSAweDMwMjc6Ci0gICAgY2FzZSAweDMyMjY6Ci0gICAgY2FzZSAweDMyODY6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTBEOgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDc7Ci0gICAgY2FzZSAweDBGMkQ6Ci0gICAgcmV0dXJuIChkb3VibGUpIDcgLyAyOwotICAgIGNhc2UgMHgyMTVFOgotICAgIHJldHVybiAoZG91YmxlKSA3IC8gODsKLSAgICBjYXNlIDB4MTM3ODoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTY6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgNzA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFGOgotICAgIHJldHVybiAoZG91YmxlKSA3MDA7Ci0gICAgY2FzZSAweDEwMTI4OgotICAgIHJldHVybiAoZG91YmxlKSA3MDAwOwotICAgIGNhc2UgMHgxMDEzMToKLSAgICByZXR1cm4gKGRvdWJsZSkgNzAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGODoKLSAgICBjYXNlIDB4MjE2NzoKLSAgICBjYXNlIDB4MjE3NzoKLSAgICBjYXNlIDB4MzAyODoKLSAgICBjYXNlIDB4MzIyNzoKLSAgICBjYXNlIDB4MzI4NzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEU6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgODsKLSAgICBjYXNlIDB4MTM3OToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTc6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgODA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTIwOgotICAgIHJldHVybiAoZG91YmxlKSA4MDA7Ci0gICAgY2FzZSAweDEwMTI5OgotICAgIHJldHVybiAoZG91YmxlKSA4MDAwOwotICAgIGNhc2UgMHgxMDEzMjoKLSAgICByZXR1cm4gKGRvdWJsZSkgODAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGOToKLSAgICBjYXNlIDB4MjE2ODoKLSAgICBjYXNlIDB4MjE3ODoKLSAgICBjYXNlIDB4MzAyOToKLSAgICBjYXNlIDB4MzIyODoKLSAgICBjYXNlIDB4MzI4ODoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEY6Ci0jZW5kaWYKLSAgICByZXR1cm4gKGRvdWJsZSkgOTsKLSAgICBjYXNlIDB4MEYyRToKLSAgICByZXR1cm4gKGRvdWJsZSkgOSAvIDI7Ci0gICAgY2FzZSAweDEzN0E6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE4OgotI2VuZGlmCi0gICAgcmV0dXJuIChkb3VibGUpIDkwOwotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEyMToKLSAgICBjYXNlIDB4MTAzNEE6Ci0gICAgcmV0dXJuIChkb3VibGUpIDkwMDsKLSAgICBjYXNlIDB4MTAxMkE6Ci0gICAgcmV0dXJuIChkb3VibGUpIDkwMDA7Ci0gICAgY2FzZSAweDEwMTMzOgotICAgIHJldHVybiAoZG91YmxlKSA5MDAwMDsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIChkb3VibGUpIF9QeVVuaWNvZGVfVG9EaWdpdChjaCk7Ci0gICAgfQotfQotCiBpbnQgX1B5VW5pY29kZV9Jc051bWVyaWMoUHlfVU5JQ09ERSBjaCkKIHsKLSAgICByZXR1cm4gX1B5VW5pY29kZV9Ub051bWVyaWMoY2gpICE9IC0xLjA7CisgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOworCisgICAgcmV0dXJuIChjdHlwZS0+ZmxhZ3MgJiBOVU1FUklDX01BU0spICE9IDA7CiB9CiAKICNpZm5kZWYgV0FOVF9XQ1RZUEVfRlVOQ1RJT05TCiAKLS8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbCB0eXBlCi0gICAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4gKi8KLQotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgY2gpCi17Ci0gICAgc3dpdGNoIChjaCkgewotICAgIGNhc2UgMHgwMDA5OiAvKiBIT1JJWk9OVEFMIFRBQlVMQVRJT04gKi8KLSAgICBjYXNlIDB4MDAwQTogLyogTElORSBGRUVEICovCi0gICAgY2FzZSAweDAwMEI6IC8qIFZFUlRJQ0FMIFRBQlVMQVRJT04gKi8KLSAgICBjYXNlIDB4MDAwQzogLyogRk9STSBGRUVEICovCi0gICAgY2FzZSAweDAwMEQ6IC8qIENBUlJJQUdFIFJFVFVSTiAqLwotICAgIGNhc2UgMHgwMDFDOiAvKiBGSUxFIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFEOiAvKiBHUk9VUCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDAxRTogLyogUkVDT1JEIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFGOiAvKiBVTklUIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDIwOiAvKiBTUEFDRSAqLwotICAgIGNhc2UgMHgwMDg1OiAvKiBORVhUIExJTkUgKi8KLSAgICBjYXNlIDB4MDBBMDogLyogTk8tQlJFQUsgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MTY4MDogLyogT0dIQU0gU1BBQ0UgTUFSSyAqLwotICAgIGNhc2UgMHgyMDAwOiAvKiBFTiBRVUFEICovCi0gICAgY2FzZSAweDIwMDE6IC8qIEVNIFFVQUQgKi8KLSAgICBjYXNlIDB4MjAwMjogLyogRU4gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwMzogLyogRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNDogLyogVEhSRUUtUEVSLUVNIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDU6IC8qIEZPVVItUEVSLUVNIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDY6IC8qIFNJWC1QRVItRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNzogLyogRklHVVJFIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDg6IC8qIFBVTkNUVUFUSU9OIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDk6IC8qIFRISU4gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwQTogLyogSEFJUiBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDBCOiAvKiBaRVJPIFdJRFRIIFNQQUNFICovCi0gICAgY2FzZSAweDIwMjg6IC8qIExJTkUgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDIwMjk6IC8qIFBBUkFHUkFQSCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MjAyRjogLyogTkFSUk9XIE5PLUJSRUFLIFNQQUNFICovCi0gICAgY2FzZSAweDIwNUY6IC8qIE1FRElVTSBNQVRIRU1BVElDQUwgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MzAwMDogLyogSURFT0dSQVBISUMgU1BBQ0UgKi8KLSAgICByZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBjYXRlZ29yeSAnTGwnLCAwCiAgICBvdGhlcndpc2UuICovCiAKQEAgLTcyNCw5ICsxNTIsOSBAQAogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKICAgICBpbnQgZGVsdGEgPSBjdHlwZS0+dXBwZXI7CiAgICAgaWYgKGN0eXBlLT5mbGFncyAmIE5PREVMVEFfTUFTSykKLSAgICByZXR1cm4gZGVsdGE7CisJcmV0dXJuIGRlbHRhOwogICAgIGlmIChkZWx0YSA+PSAzMjc2OCkKLSAgICAgICAgZGVsdGEgLT0gNjU1MzY7CisJICAgIGRlbHRhIC09IDY1NTM2OwogICAgIHJldHVybiBjaCArIGRlbHRhOwogfQogCkBAIC03MzgsOSArMTY2LDkgQEAKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAgICAgaW50IGRlbHRhID0gY3R5cGUtPmxvd2VyOwogICAgIGlmIChjdHlwZS0+ZmxhZ3MgJiBOT0RFTFRBX01BU0spCi0gICAgcmV0dXJuIGRlbHRhOworCXJldHVybiBkZWx0YTsKICAgICBpZiAoZGVsdGEgPj0gMzI3NjgpCi0gICAgICAgIGRlbHRhIC09IDY1NTM2OworCSAgICBkZWx0YSAtPSA2NTUzNjsKICAgICByZXR1cm4gY2ggKyBkZWx0YTsKIH0KIApAQCAtNzU5LDExICsxODcsNiBAQAogLyogRXhwb3J0IHRoZSBpbnRlcmZhY2VzIHVzaW5nIHRoZSB3Y2hhcl90IHR5cGUgZm9yIHBvcnRhYmlsaXR5CiAgICByZWFzb25zOiAgKi8KIAotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgcmV0dXJuIGlzd3NwYWNlKGNoKTsKLX0KLQogaW50IF9QeVVuaWNvZGVfSXNMb3dlcmNhc2UoUHlfVU5JQ09ERSBjaCkKIHsKICAgICByZXR1cm4gaXN3bG93ZXIoY2gpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwppbmRleCBkOGRhYjY3Li4xY2QzNjg4IDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYworKysgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwpAQCAtMTE1LDkgKzExNSw5IEBACiAvKiBGYXN0IGRldGVjdGlvbiBvZiB0aGUgbW9zdCBmcmVxdWVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKi8KIGNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2FzY2lpX3doaXRlc3BhY2VbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotLyogICAgIGNhc2UgMHgwMDA5OiAqIEhPUklaT05UQUwgVEFCVUxBVElPTiAqLworLyogICAgIGNhc2UgMHgwMDA5OiAqIENIQVJBQ1RFUiBUQUJVTEFUSU9OICovCiAvKiAgICAgY2FzZSAweDAwMEE6ICogTElORSBGRUVEICovCi0vKiAgICAgY2FzZSAweDAwMEI6ICogVkVSVElDQUwgVEFCVUxBVElPTiAqLworLyogICAgIGNhc2UgMHgwMDBCOiAqIExJTkUgVEFCVUxBVElPTiAqLwogLyogICAgIGNhc2UgMHgwMDBDOiAqIEZPUk0gRkVFRCAqLwogLyogICAgIGNhc2UgMHgwMDBEOiAqIENBUlJJQUdFIFJFVFVSTiAqLwogICAgIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsCkBAIC0xNDcsOCArMTQ3LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBhc2NpaV9saW5lYnJlYWtbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogLyogICAgICAgICAweDAwMEEsICogTElORSBGRUVEICovCisvKiAgICAgICAgIDB4MDAwQiwgKiBMSU5FIFRBQlVMQVRJT04gKi8KKy8qICAgICAgICAgMHgwMDBDLCAqIEZPUk0gRkVFRCAqLwogLyogICAgICAgICAweDAwMEQsICogQ0FSUklBR0UgUkVUVVJOICovCi0gICAgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwKKyAgICAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAvKiAgICAgICAgIDB4MDAxQywgKiBGSUxFIFNFUEFSQVRPUiAqLwogLyogICAgICAgICAweDAwMUQsICogR1JPVVAgU0VQQVJBVE9SICovCkBAIC0xOTAsMTEgKzE5MiwyMiBAQAogCiAvKiB0aGUgbGluZWJyZWFrIG1hc2sgaXMgc2V0IHVwIGJ5IFVuaWNvZGVfSW5pdCBiZWxvdyAqLwogCisjaWYgTE9OR19CSVQgPj0gMTI4CisjZGVmaW5lIEJMT09NX1dJRFRIIDEyOAorI2VsaWYgTE9OR19CSVQgPj0gNjQKKyNkZWZpbmUgQkxPT01fV0lEVEggNjQKKyNlbGlmIExPTkdfQklUID49IDMyCisjZGVmaW5lIEJMT09NX1dJRFRIIDMyCisjZWxzZQorI2Vycm9yICJMT05HX0JJVCBpcyBzbWFsbGVyIHRoYW4gMzIiCisjZW5kaWYKKwogI2RlZmluZSBCTE9PTV9NQVNLIHVuc2lnbmVkIGxvbmcKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrOwogCi0jZGVmaW5lIEJMT09NKG1hc2ssIGNoKSAoKG1hc2sgJiAoMSA8PCAoKGNoKSAmIDB4MUYpKSkpCisjZGVmaW5lIEJMT09NX0FERChtYXNrLCBjaCkgKChtYXNrIHw9ICgxVUwgPDwgKChjaCkgJiAoQkxPT01fV0lEVEggLSAxKSkpKSkKKyNkZWZpbmUgQkxPT00obWFzaywgY2gpICAgICAoKG1hc2sgJiAgKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogCiAjZGVmaW5lIEJMT09NX0xJTkVCUkVBSyhjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKChjaCkgPCAxMjhVID8gYXNjaWlfbGluZWJyZWFrWyhjaCldIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMDQsMTIgKzIxNywxMiBAQAogewogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCi0gICAgbG9uZyBtYXNrOworICAgIEJMT09NX01BU0sgbWFzazsKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBtYXNrID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIG1hc2sgfD0gKDEgPDwgKHB0cltpXSAmIDB4MUYpKTsKKyAgICAgICAgQkxPT01fQUREKG1hc2ssIHB0cltpXSk7CiAKICAgICByZXR1cm4gbWFzazsKIH0KQEAgLTI4MCw3ICsyOTMsNyBAQAogfQogCiAvKiBXZSBhbGxvY2F0ZSBvbmUgbW9yZSBieXRlIHRvIG1ha2Ugc3VyZSB0aGUgc3RyaW5nIGlzCi0gICBVeDAwMDAgdGVybWluYXRlZCAtLSBYWFggaXMgdGhpcyBuZWVkZWQgPworICAgVXgwMDAwIHRlcm1pbmF0ZWQ7IHNvbWUgY29kZSByZWxpZXMgb24gdGhhdC4KIAogICAgWFhYIFRoaXMgYWxsb2NhdG9yIGNvdWxkIGZ1cnRoZXIgYmUgZW5oYW5jZWQgYnkgYXNzdXJpbmcgdGhhdCB0aGUKICAgIGZyZWUgbGlzdCBuZXZlciByZWR1Y2VzIGl0cyBzaXplIGJlbG93IDEuCkBAIC01MjcsNiArNTQwLDYwIEBACiAKICNpZmRlZiBIQVZFX1dDSEFSX0gKIAorI2lmIChQeV9VTklDT0RFX1NJWkUgPT0gMikgJiYgZGVmaW5lZChTSVpFT0ZfV0NIQVJfVCkgJiYgKFNJWkVPRl9XQ0hBUl9UID09IDQpCisjIGRlZmluZSBDT05WRVJUX1dDSEFSX1RPX1NVUlJPR0FURVMKKyNlbmRpZgorCisjaWZkZWYgQ09OVkVSVF9XQ0hBUl9UT19TVVJST0dBVEVTCisKKy8qIEhlcmUgc2l6ZW9mKHdjaGFyX3QpIGlzIDQgYnV0IFB5X1VOSUNPREVfU0laRSA9PSAyLCBzbyB3ZSBuZWVkCisgICB0byBjb252ZXJ0IGZyb20gVVRGMzIgdG8gVVRGMTYuICovCisKK1B5T2JqZWN0ICpQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUpCit7CisgICAgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGFsbG9jOworICAgIGNvbnN0IHdjaGFyX3QgKm9yaWdfdzsKKworICAgIGlmICh3ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGFsbG9jID0gc2l6ZTsKKyAgICBvcmlnX3cgPSB3OworICAgIGZvciAoaSA9IHNpemU7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgaWYgKCp3ID4gMHhGRkZGKQorICAgICAgICAgICAgYWxsb2MrKzsKKyAgICAgICAgdysrOworICAgIH0KKyAgICB3ID0gb3JpZ193OworICAgIHVuaWNvZGUgPSBfUHlVbmljb2RlX05ldyhhbGxvYyk7CisgICAgaWYgKCF1bmljb2RlKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIENvcHkgdGhlIHdjaGFyX3QgZGF0YSBpbnRvIHRoZSBuZXcgb2JqZWN0ICovCisgICAgeworICAgICAgICByZWdpc3RlciBQeV9VTklDT0RFICp1OworICAgICAgICB1ID0gUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSk7CisgICAgICAgIGZvciAoaSA9IHNpemU7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICgqdyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgIHdjaGFyX3Qgb3JkaW5hbCA9ICp3Kys7CisgICAgICAgICAgICAgICAgb3JkaW5hbCAtPSAweDEwMDAwOworICAgICAgICAgICAgICAgICp1KysgPSAweEQ4MDAgfCAob3JkaW5hbCA+PiAxMCk7CisgICAgICAgICAgICAgICAgKnUrKyA9IDB4REMwMCB8IChvcmRpbmFsICYgMHgzRkYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICp1KysgPSAqdysrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QgKil1bmljb2RlOworfQorCisjZWxzZQorCiBQeU9iamVjdCAqUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihyZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplKQogewpAQCAtNTU3LDYgKzYyNCwxMCBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKil1bmljb2RlOwogfQogCisjZW5kaWYgLyogQ09OVkVSVF9XQ0hBUl9UT19TVVJST0dBVEVTICovCisKKyN1bmRlZiBDT05WRVJUX1dDSEFSX1RPX1NVUlJPR0FURVMKKwogc3RhdGljIHZvaWQKIG1ha2VmbXQoY2hhciAqZm10LCBpbnQgbG9uZ2ZsYWcsIGludCBzaXplX3RmbGFnLCBpbnQgemVyb3BhZCwgaW50IHdpZHRoLCBpbnQgcHJlY2lzaW9uLCBjaGFyIGMpCiB7CkBAIC02ODEsNyArNzUyLDcgQEAKICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8qIFVURi04ICovCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcyA9IHZhX2FyZyhjb3VudCwgdW5zaWduZWQgY2hhciopOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIqKTsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0RlY29kZVVURjgocywgc3RybGVuKHMpLCAicmVwbGFjZSIpOwogICAgICAgICAgICAgICAgIGlmICghc3RyKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CkBAIC0xNDA4LDY5ICsxNDc5LDgxIEBACiAKIC8qIC0tLSBVVEYtNyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBzZWUgUkZDMjE1MiBmb3IgZGV0YWlscyAqLworLyogU2VlIFJGQzIxNTIgZm9yIGRldGFpbHMuICBXZSBlbmNvZGUgY29uc2VydmF0aXZlbHkgYW5kIGRlY29kZSBsaWJlcmFsbHkuICovCisKKy8qIFRocmVlIHNpbXBsZSBtYWNyb3MgZGVmaW5pbmcgYmFzZS02NC4gKi8KKworLyogSXMgYyBhIGJhc2UtNjQgY2hhcmFjdGVyPyAqLworCisjZGVmaW5lIElTX0JBU0U2NChjKSBcCisgICAgKGlzYWxudW0oYykgfHwgKGMpID09ICcrJyB8fCAoYykgPT0gJy8nKQorCisvKiBnaXZlbiB0aGF0IGMgaXMgYSBiYXNlLTY0IGNoYXJhY3Rlciwgd2hhdCBpcyBpdHMgYmFzZS02NCB2YWx1ZT8gKi8KKworI2RlZmluZSBGUk9NX0JBU0U2NChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoKGMpID49ICdBJyAmJiAoYykgPD0gJ1onKSA/IChjKSAtICdBJyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKGMpID49ICdhJyAmJiAoYykgPD0gJ3onKSA/IChjKSAtICdhJyArIDI2IDogICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKSA/IChjKSAtICcwJyArIDUyIDogICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoYykgPT0gJysnID8gNjIgOiA2MykKKworLyogV2hhdCBpcyB0aGUgYmFzZS02NCBjaGFyYWN0ZXIgb2YgdGhlIGJvdHRvbSA2IGJpdHMgb2Ygbj8gKi8KKworI2RlZmluZSBUT19CQVNFNjQobikgIFwKKyAgICAoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iWyhuKSAmIDB4M2ZdKQorCisvKiBERUNPREVfRElSRUNUOiB0aGlzIGJ5dGUgZW5jb3VudGVyZWQgaW4gYSBVVEYtNyBzdHJpbmcgc2hvdWxkIGJlCisgKiBkZWNvZGVkIGFzIGl0c2VsZi4gIFdlIGFyZSBwZXJtaXNzaXZlIG9uIGRlY29kaW5nOyB0aGUgb25seSBBU0NJSQorICogYnl0ZSBub3QgZGVjb2RpbmcgdG8gaXRzZWxmIGlzIHRoZSArIHdoaWNoIGJlZ2lucyBhIGJhc2U2NAorICogc3RyaW5nLiAqLworCisjZGVmaW5lIERFQ09ERV9ESVJFQ1QoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKGMpIDw9IDEyNyAmJiAoYykgIT0gJysnKQorCisvKiBUaGUgVVRGLTcgZW5jb2RlciB0cmVhdHMgQVNDSUkgY2hhcmFjdGVycyBkaWZmZXJlbnRseSBhY2NvcmRpbmcgdG8KKyAqIHdoZXRoZXIgdGhleSBhcmUgU2V0IEQsIFNldCBPLCBXaGl0ZXNwYWNlLCBvciBzcGVjaWFsIChpLmUuIG5vbmUgb2YKKyAqIHRoZSBhYm92ZSkuICBTZWUgUkZDMjE1Mi4gIFRoaXMgYXJyYXkgaWRlbnRpZmllcyB0aGVzZSBkaWZmZXJlbnQKKyAqIHNldHM6CisgKiAwIDogIlNldCBEIgorICogICAgIGFscGhhbnVtZXJpYyBhbmQgJygpLC0uLzo/CisgKiAxIDogIlNldCBPIgorICogICAgICEiIyQlJio7PD0+QFtdXl9ge3x9CisgKiAyIDogIndoaXRlc3BhY2UiCisgKiAgICAgaHQgbmwgY3Igc3AKKyAqIDMgOiBzcGVjaWFsIChtdXN0IGJlIGJhc2U2NCBlbmNvZGVkKQorICogICAgIGV2ZXJ5dGhpbmcgZWxzZSAoaS5lLiArXH4gYW5kIG5vbi1wcmludGluZyBjb2RlcyAwLTggMTEtMTIgMTQtMzEgMTI3KQorICovCiAKIHN0YXRpYwotY2hhciB1dGY3X3NwZWNpYWxbMTI4XSA9IHsKLSAgICAvKiBpbmRpY2F0ZSB3aGV0aGVyIGEgVVRGLTcgY2hhcmFjdGVyIGlzIHNwZWNpYWwgaS5lLiBjYW5ub3QgYmUgZGlyZWN0bHkKLSAgICAgICBlbmNvZGVkOgotICAgICAgIDAgLSBub3Qgc3BlY2lhbAotICAgICAgIDEgLSBzcGVjaWFsCi0gICAgICAgMiAtIHdoaXRlc3BhY2UgKG9wdGlvbmFsKQotICAgICAgIDMgLSBSRkMyMTUyIFNldCBPIChvcHRpb25hbCkgKi8KLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAyLCAxLCAxLCAyLCAxLCAxLAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCi0gICAgMiwgMywgMywgMywgMywgMywgMywgMCwgMCwgMCwgMywgMSwgMCwgMCwgMCwgMSwKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAzLCAzLCAzLCAwLAotICAgIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMSwgMywgMywgMywKLSAgICAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDMsIDMsIDEsIDEsCi0KK2NoYXIgdXRmN19jYXRlZ29yeVsxMjhdID0geworLyogbnVsIHNvaCBzdHggZXR4IGVvdCBlbnEgYWNrIGJlbCBicyAgaHQgIG5sICB2dCAgbnAgIGNyICBzbyAgc2kgICovCisgICAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMiwgIDIsICAzLCAgMywgIDIsICAzLCAgMywKKy8qIGRsZSBkYzEgZGMyIGRjMyBkYzQgbmFrIHN5biBldGIgY2FuIGVtICBzdWIgZXNjIGZzICBncyAgcnMgIHVzICAqLworICAgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsCisvKiBzcCAgICEgICAiICAgIyAgICQgICAlICAgJiAgICcgICAoICAgKSAgICogICArICAgLCAgIC0gICAuICAgLyAgKi8KKyAgICAyLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMSwgIDMsICAwLCAgMCwgIDAsICAwLAorLyogIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgIDkgICA6ICAgOyAgIDwgICA9ICAgPiAgID8gICovCisgICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMCwKKy8qICBAICAgQSAgIEIgICBDICAgRCAgIEUgICBGICAgRyAgIEggICBJICAgSiAgIEsgICBMICAgTSAgIE4gICBPICAqLworICAgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisvKiAgUCAgIFEgICBSICAgUyAgIFQgICBVICAgViAgIFcgICBYICAgWSAgIFogICBbICAgXCAgIF0gICBeICAgXyAgKi8KKyAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAzLCAgMSwgIDEsICAxLAorLyogIGAgICBhICAgYiAgIGMgICBkICAgZSAgIGYgICBnICAgaCAgIGkgICBqICAgayAgIGwgICBtICAgbiAgIG8gICovCisgICAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKy8qICBwICAgcSAgIHIgICBzICAgdCAgIHUgICB2ICAgdyAgIHggICB5ICAgeiAgIHsgICB8ICAgfSAgIH4gIGRlbCAqLworICAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMywgIDMsCiB9OwogCi0vKiBOb3RlOiBUaGUgY29tcGFyaXNvbiAoYykgPD0gMCBpcyBhIHRyaWNrIHRvIHdvcmstYXJvdW5kIGdjYwotICAgd2FybmluZ3MgYWJvdXQgdGhlIGNvbXBhcmlzb24gYWx3YXlzIGJlaW5nIGZhbHNlOyBzaW5jZQotICAgdXRmN19zcGVjaWFsWzBdIGlzIDEsIHdlIGNhbiBzYWZlbHkgbWFrZSB0aGF0IG9uZSBjb21wYXJpc29uCi0gICB0cnVlICAqLworLyogRU5DT0RFX0RJUkVDVDogdGhpcyBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVuY29kZWQgYXMgaXRzZWxmLiAgVGhlCisgKiBhbnN3ZXIgZGVwZW5kcyBvbiB3aGV0aGVyIHdlIGFyZSBlbmNvZGluZyBzZXQgTyBhcyBpdHNlbGYsIGFuZCBhbHNvCisgKiBvbiB3aGV0aGVyIHdlIGFyZSBlbmNvZGluZyB3aGl0ZXNwYWNlIGFzIGl0c2VsZi4gIFJGQzIxNTIgbWFrZXMgaXQKKyAqIGNsZWFyIHRoYXQgdGhlIGFuc3dlcnMgdG8gdGhlc2UgcXVlc3Rpb25zIHZhcnkgYmV0d2VlbgorICogYXBwbGljYXRpb25zLCBzbyB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgZmxleGlibGUuICAqLwogCi0jZGVmaW5lIFNQRUNJQUwoYywgZW5jb2RlTywgZW5jb2RlV1MpICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKGMpID4gMTI3IHx8IChjKSA8PSAwIHx8IHV0Zjdfc3BlY2lhbFsoYyldID09IDEgfHwgXAotICAgICAoZW5jb2RlV1MgJiYgKHV0Zjdfc3BlY2lhbFsoYyldID09IDIpKSB8fCAgICAgICAgICBcCi0gICAgIChlbmNvZGVPICYmICh1dGY3X3NwZWNpYWxbKGMpXSA9PSAzKSkpCi0KLSNkZWZpbmUgQjY0KG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iWyhuKSAmIDB4M2ZdKQotI2RlZmluZSBCNjRDSEFSKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChpc2FsbnVtKGMpIHx8IChjKSA9PSAnKycgfHwgKGMpID09ICcvJykKLSNkZWZpbmUgVUI2NChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgoYykgPT0gJysnID8gNjIgOiAoYykgPT0gJy8nID8gNjMgOiAoYykgPj0gJ2EnID8gICBcCi0gICAgIChjKSAtIDcxIDogKGMpID49ICdBJyA/IChjKSAtIDY1IDogKGMpICsgNCApCi0KLSNkZWZpbmUgRU5DT0RFKG91dCwgY2gsIGJpdHMpICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoYml0cyA+PSA2KSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKm91dCsrID0gQjY0KGNoID4+IChiaXRzLTYpKTsgICAgICAgICAgIFwKLSAgICAgICAgYml0cyAtPSA2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgREVDT0RFKG91dCwgY2gsIGJpdHMsIHN1cnJvZ2F0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoYml0cyA+PSAxNikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfVU5JQ09ERSBvdXRDaCA9IChQeV9VTklDT0RFKSAoKGNoID4+IChiaXRzLTE2KSkgJiAweGZmZmYpOyAgIFwKLSAgICAgICAgYml0cyAtPSAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHN1cnJvZ2F0ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIC8qIFdlIGhhdmUgYWxyZWFkeSBnZW5lcmF0ZWQgYW4gZXJyb3IgZm9yIHRoZSBoaWdoIHN1cnJvZ2F0ZSBcCi0gICAgICAgICAgICAgICBzbyBsZXQncyBub3QgYm90aGVyIHNlZWluZyBpZiB0aGUgbG93IHN1cnJvZ2F0ZSBpcyBjb3JyZWN0IG9yIG5vdCAqLyBcCi0gICAgICAgICAgICBzdXJyb2dhdGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSBpZiAoMHhEQzAwIDw9IG91dENoICYmIG91dENoIDw9IDB4REZGRikgeyAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAvKiBUaGlzIGlzIGEgc3Vycm9nYXRlIHBhaXIuIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgcmVwcmVzZW50IFwKLSAgICAgICAgICAgICAgIGl0IGluIGEgMTYtYml0IGNoYXJhY3RlciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlIHBhaXJzIGFyZSBub3Qgc3VwcG9ydGVkIjsgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICpvdXQrKyA9IG91dENoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9CisjZGVmaW5lIEVOQ09ERV9ESVJFQ1QoYywgZGlyZWN0TywgZGlyZWN0V1MpICAgICAgICAgICAgIFwKKyAgICAoKGMpIDwgMTI4ICYmIChjKSA+IDAgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKHV0ZjdfY2F0ZWdvcnlbKGMpXSA9PSAwKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoZGlyZWN0V1MgJiYgKHV0ZjdfY2F0ZWdvcnlbKGMpXSA9PSAyKSkgfHwgICAgICAgIFwKKyAgICAgIChkaXJlY3RPICYmICh1dGY3X2NhdGVnb3J5WyhjKV0gPT0gMSkpKSkKIAogUHlPYmplY3QgKlB5VW5pY29kZV9EZWNvZGVVVEY3KGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLApAQCAtMTQ3OSw2ICsxNTYyLDEzIEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwocywgc2l6ZSwgZXJyb3JzLCBOVUxMKTsKIH0KIAorLyogVGhlIGRlY29kZXIuICBUaGUgb25seSBzdGF0ZSB3ZSBwcmVzZXJ2ZSBpcyBvdXIgcmVhZCBwb3NpdGlvbiwKKyAqIGkuZS4gaG93IG1hbnkgY2hhcmFjdGVycyB3ZSBoYXZlIGNvbnN1bWVkLiAgU28gaWYgd2UgZW5kIGluIHRoZQorICogbWlkZGxlIG9mIGEgc2hpZnQgc2VxdWVuY2Ugd2UgaGF2ZSB0byBiYWNrIG9mZiB0aGUgcmVhZCBwb3NpdGlvbgorICogYW5kIHRoZSBvdXRwdXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UsIG90aGVyd2lzZSB3ZSBsb3NlCisgKiBhbGwgdGhlIHNoaWZ0IHN0YXRlIChzZWVuIGJpdHMsIG51bWJlciBvZiBiaXRzIHNlZW4sIGhpZ2gKKyAqIHN1cnJvZ2F0ZSkuICovCisKIFB5T2JqZWN0ICpQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCkBAIC0xNDkzLDkgKzE1ODMsMTAgQEAKICAgICBQeV9VTklDT0RFICpwOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIGludCBpblNoaWZ0ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgYml0c2xlZnQgPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgY2hhcnNsZWZ0ID0gMDsKLSAgICBpbnQgc3Vycm9nYXRlID0gMDsKKyAgICBQeV9VTklDT0RFICpzaGlmdE91dFN0YXJ0OworICAgIHVuc2lnbmVkIGludCBiYXNlNjRiaXRzID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2U2NGJ1ZmZlciA9IDA7CisgICAgUHlfVU5JQ09ERSBzdXJyb2dhdGUgPSAwOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCkBAIC0xNTA5LDc5ICsxNjAwLDEwNyBAQAogICAgIH0KIAogICAgIHAgPSB1bmljb2RlLT5zdHI7CisgICAgc2hpZnRPdXRTdGFydCA9IHA7CiAgICAgZSA9IHMgKyBzaXplOwogCiAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgY2g7Ci0gICAgICByZXN0YXJ0OgotICAgICAgICBjaCA9ICh1bnNpZ25lZCBjaGFyKSAqczsKKyAgICAgICAgUHlfVU5JQ09ERSBjaCA9ICh1bnNpZ25lZCBjaGFyKSAqczsKIAotICAgICAgICBpZiAoaW5TaGlmdCkgewotICAgICAgICAgICAgaWYgKChjaCA9PSAnLScpIHx8ICFCNjRDSEFSKGNoKSkgeworICAgICAgICBpZiAoaW5TaGlmdCkgeyAvKiBpbiBhIGJhc2UtNjQgc2VjdGlvbiAqLworICAgICAgICAgICAgaWYgKElTX0JBU0U2NChjaCkpIHsgLyogY29uc3VtZSBhIGJhc2UtNjQgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCA2KSB8IEZST01fQkFTRTY0KGNoKTsKKyAgICAgICAgICAgICAgICBiYXNlNjRiaXRzICs9IDY7CisgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgIGlmIChiYXNlNjRiaXRzID49IDE2KSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgZW5vdWdoIGJpdHMgZm9yIGEgVVRGLTE2IHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgb3V0Q2ggPSAoUHlfVU5JQ09ERSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtMTYpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyAtPSAxNjsKKyAgICAgICAgICAgICAgICAgICAgYmFzZTY0YnVmZmVyICY9ICgxIDw8IGJhc2U2NGJpdHMpIC0gMTsgLyogY2xlYXIgaGlnaCBiaXRzICovCisgICAgICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRDaCA+PSAweERDMDAgJiYgb3V0Q2ggPD0gMHhERkZGKSB7CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnArKyA9ICgoKHN1cnJvZ2F0ZSAmIDB4M0ZGKTw8MTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChvdXRDaCAmIDB4M0ZGKSkgKyAweDEwMDAwOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gc3Vycm9nYXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBvdXRDaDsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJzZWNvbmQgc3Vycm9nYXRlIG1pc3NpbmciOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dENoID49IDB4RDgwMCAmJiBvdXRDaCA8PSAweERCRkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IHN1cnJvZ2F0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gb3V0Q2g7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0Q2ggPj0gMHhEQzAwICYmIG91dENoIDw9IDB4REZGRikgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gInVuZXhwZWN0ZWQgc2Vjb25kIHN1cnJvZ2F0ZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwKysgPSBvdXRDaDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeyAvKiBub3cgbGVhdmluZyBhIGJhc2UtNjQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICAgICAgICAgIHMrKzsKLQotICAgICAgICAgICAgICAgIC8qIHAsIGNoYXJzbGVmdCwgYml0c2xlZnQsIHN1cnJvZ2F0ZSA9ICovIERFQ09ERShwLCBjaGFyc2xlZnQsIGJpdHNsZWZ0LCBzdXJyb2dhdGUpOwotICAgICAgICAgICAgICAgIGlmIChiaXRzbGVmdCA+PSA2KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzaGlmdCBzZXF1ZW5jZSBoYXMgYSBwYXJ0aWFsIGNoYXJhY3RlciBpbiBpdC4gSWYKLSAgICAgICAgICAgICAgICAgICAgICAgYml0c2xlZnQgPCA2IHRoZW4gd2UgY291bGQganVzdCBjbGFzc2lmeSBpdCBhcyBwYWRkaW5nCi0gICAgICAgICAgICAgICAgICAgICAgIGJ1dCB0aGF0IGlzIG5vdCB0aGUgY2FzZSBoZXJlICovCi0KLSAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gInBhcnRpYWwgY2hhcmFjdGVyIGluIHNoaWZ0IHNlcXVlbmNlIjsKKyAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJzZWNvbmQgc3Vycm9nYXRlIG1pc3NpbmcgYXQgZW5kIG9mIHNoaWZ0IHNlcXVlbmNlIjsKICAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIEFjY29yZGluZyB0byBSRkMyMTUyIHRoZSByZW1haW5pbmcgYml0cyBzaG91bGQgYmUgemVyby4gV2UKLSAgICAgICAgICAgICAgICAgICBjaG9vc2UgdG8gc2lnbmFsIGFuIGVycm9yL2luc2VydCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgIGhlcmUgc28gaW5kaWNhdGUgdGhlIHBvdGVudGlhbCBvZiBhIG1pc2VuY29kZWQgY2hhcmFjdGVyLiAqLwotCi0gICAgICAgICAgICAgICAgLyogT24geDg2LCBhIDw8IGIgPT0gYSA8PCAoYiUzMikgc28gbWFrZSBzdXJlIHRoYXQgYml0c2xlZnQgIT0gMCAqLwotICAgICAgICAgICAgICAgIGlmIChiaXRzbGVmdCAmJiBjaGFyc2xlZnQgPDwgKHNpemVvZihjaGFyc2xlZnQpICogOCAtIGJpdHNsZWZ0KSkgewotICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAibm9uLXplcm8gcGFkZGluZyBiaXRzIGluIHNoaWZ0IHNlcXVlbmNlIjsKLSAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICctJykgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHMgPCBlKSAmJiAoKihzKSA9PSAnLScpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcCsrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMgPiAwKSB7IC8qIGxlZnQtb3ZlciBiaXRzICovCisgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlNjRiaXRzID49IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lIGJhc2UtNjQgY2hhcmFjdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAicGFydGlhbCBjaGFyYWN0ZXIgaW4gc2hpZnQgc2VxdWVuY2UiOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB1dGY3RXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNQRUNJQUwoY2gsMCwwKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAidW5leHBlY3RlZCBzcGVjaWFsIGNoYXJhY3RlciI7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOwotICAgICAgICAgICAgICAgIH0gZWxzZSAgeworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgYml0cyByZW1haW47IHRoZXkgc2hvdWxkIGJlIHplcm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlNjRidWZmZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJub24temVybyBwYWRkaW5nIGJpdHMgaW4gc2hpZnQgc2VxdWVuY2UiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdXRmN0Vycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogJy0nIGlzIGFic29yYmVkOyBvdGhlciB0ZXJtaW5hdGluZworICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFyZSBwcmVzZXJ2ZWQgKi8KICAgICAgICAgICAgICAgICAgICAgKnArKyA9IGNoOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2hhcnNsZWZ0ID0gKGNoYXJzbGVmdCA8PCA2KSB8IFVCNjQoY2gpOwotICAgICAgICAgICAgICAgIGJpdHNsZWZ0ICs9IDY7Ci0gICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIC8qIHAsIGNoYXJzbGVmdCwgYml0c2xlZnQsIHN1cnJvZ2F0ZSA9ICovIERFQ09ERShwLCBjaGFyc2xlZnQsIGJpdHNsZWZ0LCBzdXJyb2dhdGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCBjaCA9PSAnKycgKSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICBpZiAocyA8IGUgJiYgKnMgPT0gJy0nKSB7CisgICAgICAgICAgICBzKys7IC8qIGNvbnN1bWUgJysnICovCisgICAgICAgICAgICBpZiAocyA8IGUgJiYgKnMgPT0gJy0nKSB7IC8qICcrLScgZW5jb2RlcyAnKycgKi8KICAgICAgICAgICAgICAgICBzKys7CiAgICAgICAgICAgICAgICAgKnArKyA9ICcrJzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7IC8qIGJlZ2luIGJhc2U2NC1lbmNvZGVkIHNlY3Rpb24gKi8KICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMTsKLSAgICAgICAgICAgICAgICBiaXRzbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCA9IHA7CisgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoU1BFQ0lBTChjaCwwLDApKSB7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBlcnJtc2cgPSAidW5leHBlY3RlZCBzcGVjaWFsIGNoYXJhY3RlciI7Ci0gICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgZWxzZSBpZiAoREVDT0RFX0RJUkVDVChjaCkpIHsgLyogY2hhcmFjdGVyIGRlY29kZXMgYXMgaXRzZWxmICovCiAgICAgICAgICAgICAqcCsrID0gY2g7CiAgICAgICAgICAgICBzKys7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBlcnJtc2cgPSAidW5leHBlY3RlZCBzcGVjaWFsIGNoYXJhY3RlciI7CisgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjdFcnJvcjoKK3V0ZjdFcnJvcjoKICAgICAgICAgb3V0cG9zID0gcC1QeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmljb2RlKTsKICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKApAQCAtMTU5MiwyMyArMTcxMSwzMyBAQAogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChpblNoaWZ0ICYmICFjb25zdW1lZCkgewotICAgICAgICBvdXRwb3MgPSBwLVB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpOwotICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjciLCAidW50ZXJtaW5hdGVkIHNoaWZ0IHNlcXVlbmNlIiwKLSAgICAgICAgICAgICAgICBzdGFydHMsIHNpemUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zLCAmcCkpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGlmIChzIDwgZSkKLSAgICAgICAgICAgIGdvdG8gcmVzdGFydDsKKyAgICAvKiBlbmQgb2Ygc3RyaW5nICovCisKKyAgICBpZiAoaW5TaGlmdCAmJiAhY29uc3VtZWQpIHsgLyogaW4gc2hpZnQgc2VxdWVuY2UsIG5vIG1vcmUgdG8gZm9sbG93ICovCisgICAgICAgIC8qIGlmIHdlJ3JlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgdGhhdCdzIGFuIGVycm9yICovCisgICAgICAgIGlmIChzdXJyb2dhdGUgfHwKKyAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+PSA2KSB8fAorICAgICAgICAgICAgICAgIChiYXNlNjRiaXRzID4gMCAmJiBiYXNlNjRidWZmZXIgIT0gMCkpIHsKKyAgICAgICAgICAgIG91dHBvcyA9IHAtUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSk7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7CisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgInV0ZjciLCAidW50ZXJtaW5hdGVkIHNoaWZ0IHNlcXVlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRzLCBzaXplLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKKyAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MsICZwKSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KICAgICB9CisKKyAgICAvKiByZXR1cm4gc3RhdGUgKi8KICAgICBpZiAoY29uc3VtZWQpIHsKLSAgICAgICAgaWYoaW5TaGlmdCkKKyAgICAgICAgaWYgKGluU2hpZnQpIHsKKyAgICAgICAgICAgIHAgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KICAgICAgICAgICAgICpjb25zdW1lZCA9IHN0YXJ0aW5wb3M7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICpjb25zdW1lZCA9IHMtc3RhcnRzOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVzaXplKCZ1bmljb2RlLCBwIC0gUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSkpIDwgMCkKQEAgLTE2MjgsMjcgKzE3NTcsMjcgQEAKIAogUHlPYmplY3QgKlB5VW5pY29kZV9FbmNvZGVVVEY3KGNvbnN0IFB5X1VOSUNPREUgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmNvZGVTZXRPLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmNvZGVXaGl0ZVNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlNjRTZXRPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiYXNlNjRXaGl0ZVNwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICAvKiBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0aWdodGVuIHRoaXMgd29yc3QgY2FzZSAqLwotICAgIFB5X3NzaXplX3QgY2JBbGxvY2F0ZWQgPSA1ICogc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGFsbG9jYXRlZCA9IDggKiBzaXplOwogICAgIGludCBpblNoaWZ0ID0gMDsKICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgIHVuc2lnbmVkIGludCBiaXRzbGVmdCA9IDA7Ci0gICAgdW5zaWduZWQgbG9uZyBjaGFyc2xlZnQgPSAwOworICAgIHVuc2lnbmVkIGludCBiYXNlNjRiaXRzID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2U2NGJ1ZmZlciA9IDA7CiAgICAgY2hhciAqIG91dDsKICAgICBjaGFyICogc3RhcnQ7CiAKLSAgICBpZiAoY2JBbGxvY2F0ZWQgLyA1ICE9IHNpemUpCisgICAgaWYgKGFsbG9jYXRlZCAvIDggIT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKICAgICBpZiAoc2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKLSAgICB2ID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgY2JBbGxvY2F0ZWQpOworICAgIHYgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBhbGxvY2F0ZWQpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNjU2LDc4ICsxNzg1LDc3IEBACiAgICAgZm9yICg7aSA8IHNpemU7ICsraSkgewogICAgICAgICBQeV9VTklDT0RFIGNoID0gc1tpXTsKIAotICAgICAgICBpZiAoIWluU2hpZnQpIHsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKLSAgICAgICAgICAgICAgICAqb3V0KysgPSAnKyc7Ci0gICAgICAgICAgICAgICAgKm91dCsrID0gJy0nOwotICAgICAgICAgICAgfSBlbHNlIGlmIChTUEVDSUFMKGNoLCBlbmNvZGVTZXRPLCBlbmNvZGVXaGl0ZVNwYWNlKSkgewotICAgICAgICAgICAgICAgIGNoYXJzbGVmdCA9IGNoOwotICAgICAgICAgICAgICAgIGJpdHNsZWZ0ID0gMTY7Ci0gICAgICAgICAgICAgICAgKm91dCsrID0gJysnOwotICAgICAgICAgICAgICAgIC8qIG91dCwgY2hhcnNsZWZ0LCBiaXRzbGVmdCA9ICovIEVOQ09ERShvdXQsIGNoYXJzbGVmdCwgYml0c2xlZnQpOwotICAgICAgICAgICAgICAgIGluU2hpZnQgPSBiaXRzbGVmdCA+IDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICpvdXQrKyA9IChjaGFyKSBjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghU1BFQ0lBTChjaCwgZW5jb2RlU2V0TywgZW5jb2RlV2hpdGVTcGFjZSkpIHsKLSAgICAgICAgICAgICAgICAqb3V0KysgPSBCNjQoY2hhcnNsZWZ0IDw8ICg2LWJpdHNsZWZ0KSk7Ci0gICAgICAgICAgICAgICAgY2hhcnNsZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICBiaXRzbGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVycyBub3QgaW4gdGhlIEJBU0U2NCBzZXQgaW1wbGljaXRseSB1bnNoaWZ0IHRoZSBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgIHNvIG5vICctJyBpcyByZXF1aXJlZCwgZXhjZXB0IGlmIHRoZSBjaGFyYWN0ZXIgaXMgaXRzZWxmIGEgJy0nICovCi0gICAgICAgICAgICAgICAgaWYgKEI2NENIQVIoY2gpIHx8IGNoID09ICctJykgewotICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAnLSc7CisgICAgICAgIGlmIChpblNoaWZ0KSB7CisgICAgICAgICAgICBpZiAoRU5DT0RFX0RJUkVDVChjaCwgIWJhc2U2NFNldE8sICFiYXNlNjRXaGl0ZVNwYWNlKSkgeworICAgICAgICAgICAgICAgIC8qIHNoaWZ0aW5nIG91dCAqLworICAgICAgICAgICAgICAgIGlmIChiYXNlNjRiaXRzKSB7IC8qIG91dHB1dCByZW1haW5pbmcgYml0cyAqLworICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSBUT19CQVNFNjQoYmFzZTY0YnVmZmVyIDw8ICg2LWJhc2U2NGJpdHMpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwotICAgICAgICAgICAgICAgICpvdXQrKyA9IChjaGFyKSBjaDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYml0c2xlZnQgKz0gMTY7Ci0gICAgICAgICAgICAgICAgY2hhcnNsZWZ0ID0gKGNoYXJzbGVmdCA8PCAxNikgfCBjaDsKLSAgICAgICAgICAgICAgICAvKiBvdXQsIGNoYXJzbGVmdCwgYml0c2xlZnQgPSAqLyBFTkNPREUob3V0LCBjaGFyc2xlZnQsIGJpdHNsZWZ0KTsKLQotICAgICAgICAgICAgICAgIC8qIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBzcGVjaWFsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0ZXJtaW5hdGUKLSAgICAgICAgICAgICAgICAgICB0aGUgc2hpZnQgc2VxdWVuY2UuIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBub3QgYSBCQVNFNjQgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgICAgb3IgJy0nIHRoZW4gdGhlIHNoaWZ0IHNlcXVlbmNlIHdpbGwgYmUgdGVybWluYXRlZCBpbXBsaWNpdGx5IGFuZCB3ZQotICAgICAgICAgICAgICAgICAgIGRvbid0IGhhdmUgdG8gaW5zZXJ0IGEgJy0nLiAqLwotCi0gICAgICAgICAgICAgICAgaWYgKGJpdHNsZWZ0ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwgc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjaDIgPSBzW2krMV07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTUEVDSUFMKGNoMiwgZW5jb2RlU2V0TywgZW5jb2RlV2hpdGVTcGFjZSkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCNjRDSEFSKGNoMikgfHwgY2gyID09ICctJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICctJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TaGlmdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICctJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ2hhcmFjdGVycyBub3QgaW4gdGhlIEJBU0U2NCBzZXQgaW1wbGljaXRseSB1bnNoaWZ0IHRoZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgIHNvIG5vICctJyBpcyByZXF1aXJlZCwgZXhjZXB0IGlmIHRoZSBjaGFyYWN0ZXIgaXMgaXRzZWxmIGEgJy0nICovCisgICAgICAgICAgICAgICAgaWYgKElTX0JBU0U2NChjaCkgfHwgY2ggPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgICpvdXQrKyA9ICctJzsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKm91dCsrID0gKGNoYXIpIGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZ290byBlbmNvZGVfY2hhcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogbm90IGluIGEgc2hpZnQgc2VxdWVuY2UgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICAqb3V0KysgPSAnKyc7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3V0KysgPSAnLSc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChFTkNPREVfRElSRUNUKGNoLCAhYmFzZTY0U2V0TywgIWJhc2U2NFdoaXRlU3BhY2UpKSB7CisgICAgICAgICAgICAgICAgKm91dCsrID0gKGNoYXIpIGNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKm91dCsrID0gJysnOworICAgICAgICAgICAgICAgIGluU2hpZnQgPSAxOworICAgICAgICAgICAgICAgIGdvdG8gZW5jb2RlX2NoYXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7CitlbmNvZGVfY2hhcjoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICAgICAgaWYgKGNoID49IDB4MTAwMDApIHsKKyAgICAgICAgICAgIC8qIGNvZGUgZmlyc3Qgc3Vycm9nYXRlICovCisgICAgICAgICAgICBiYXNlNjRiaXRzICs9IDE2OworICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCAxNikgfCAweGQ4MDAgfCAoKGNoLTB4MTAwMDApID4+IDEwKTsKKyAgICAgICAgICAgIHdoaWxlIChiYXNlNjRiaXRzID49IDYpIHsKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBUT19CQVNFNjQoYmFzZTY0YnVmZmVyID4+IChiYXNlNjRiaXRzLTYpKTsKKyAgICAgICAgICAgICAgICBiYXNlNjRiaXRzIC09IDY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBwcmVwYXJlIHNlY29uZCBzdXJyb2dhdGUgKi8KKyAgICAgICAgICAgIGNoID0gIDB4REMwMCB8ICgoY2gtMHgxMDAwMCkgJiAweDNGRik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBiYXNlNjRiaXRzICs9IDE2OworICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IGNoOworICAgICAgICB3aGlsZSAoYmFzZTY0Yml0cyA+PSA2KSB7CisgICAgICAgICAgICAqb3V0KysgPSBUT19CQVNFNjQoYmFzZTY0YnVmZmVyID4+IChiYXNlNjRiaXRzLTYpKTsKKyAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAoYml0c2xlZnQpIHsKLSAgICAgICAgKm91dCsrPSBCNjQoY2hhcnNsZWZ0IDw8ICg2LWJpdHNsZWZ0KSApOworICAgIGlmIChiYXNlNjRiaXRzKQorICAgICAgICAqb3V0Kys9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPDwgKDYtYmFzZTY0Yml0cykgKTsKKyAgICBpZiAoaW5TaGlmdCkKICAgICAgICAgKm91dCsrID0gJy0nOwotICAgIH0KIAotICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIG91dCAtIHN0YXJ0KTsKKyAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgb3V0IC0gc3RhcnQpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gdjsKIH0KIAotI3VuZGVmIFNQRUNJQUwKLSN1bmRlZiBCNjQKLSN1bmRlZiBCNjRDSEFSCi0jdW5kZWYgVUI2NAotI3VuZGVmIEVOQ09ERQotI3VuZGVmIERFQ09ERQorI3VuZGVmIElTX0JBU0U2NAorI3VuZGVmIEZST01fQkFTRTY0CisjdW5kZWYgVE9fQkFTRTY0CisjdW5kZWYgREVDT0RFX0RJUkVDVAorI3VuZGVmIEVOQ09ERV9ESVJFQ1QKIAogLyogLS0tIFVURi04IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTIwMzMsNyArMjE2MSw4IEBACiAgICAgICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiAqLwogICAgICAgICBubmVlZGVkID0gcCAtIFB5U3RyaW5nX0FTX1NUUklORyh2KTsKICAgICAgICAgYXNzZXJ0KG5uZWVkZWQgPD0gbmFsbG9jYXRlZCk7Ci0gICAgICAgIF9QeVN0cmluZ19SZXNpemUoJnYsIG5uZWVkZWQpOworICAgICAgICBpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmdiwgbm5lZWRlZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHY7CiAKQEAgLTIwNzcsMTAgKzIyMDYsMTEgQEAKICAgICBQeV9VTklDT0RFICpwOwogI2lmbmRlZiBQeV9VTklDT0RFX1dJREUKICAgICBpbnQgcGFpcnMgPSAwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnFxOwogI2Vsc2UKICAgICBjb25zdCBpbnQgcGFpcnMgPSAwOwogI2VuZGlmCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSwgKmUsICpxcTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCkBAIC0yNzU3LDE2ICsyODg3LDcgQEAKICAgICAgICAgICAgIG1lc3NhZ2UgPSAibWFsZm9ybWVkIFxcTiBjaGFyYWN0ZXIgZXNjYXBlIjsKICAgICAgICAgICAgIGlmICh1Y25oYXNoX0NBUEkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIC8qIGxvYWQgdGhlIHVuaWNvZGUgZGF0YSBtb2R1bGUgKi8KLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbSwgKmFwaTsKLSAgICAgICAgICAgICAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygidW5pY29kZWRhdGEiKTsKLSAgICAgICAgICAgICAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHVjbmhhc2hFcnJvcjsKLSAgICAgICAgICAgICAgICBhcGkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG0sICJ1Y25oYXNoX0NBUEkiKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwaSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHVjbmhhc2hFcnJvcjsKLSAgICAgICAgICAgICAgICB1Y25oYXNoX0NBUEkgPSAoX1B5VW5pY29kZV9OYW1lX0NBUEkgKilQeUNPYmplY3RfQXNWb2lkUHRyKGFwaSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGFwaSk7CisgICAgICAgICAgICAgICAgdWNuaGFzaF9DQVBJID0gKF9QeVVuaWNvZGVfTmFtZV9DQVBJICopUHlDYXBzdWxlX0ltcG9ydChQeVVuaWNvZGVEYXRhX0NBUFNVTEVfTkFNRSwgMSk7CiAgICAgICAgICAgICAgICAgaWYgKHVjbmhhc2hfQ0FQSSA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBnb3RvIHVjbmhhc2hFcnJvcjsKICAgICAgICAgICAgIH0KQEAgLTMwMDQsNyArMzEyNSw4IEBACiAgICAgICAgICpwKysgPSBQeVN0cmluZ19BU19TVFJJTkcocmVwcilbMV07CiAKICAgICAqcCA9ICdcMCc7Ci0gICAgX1B5U3RyaW5nX1Jlc2l6ZSgmcmVwciwgcCAtIFB5U3RyaW5nX0FTX1NUUklORyhyZXByKSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJlcHIsIHAgLSBQeVN0cmluZ19BU19TVFJJTkcocmVwcikpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gcmVwcjsKIH0KIApAQCAtMzIyNSw3ICszMzQ3LDggQEAKICAgICAgICAgICAgICpwKysgPSAoY2hhcikgY2g7CiAgICAgfQogICAgICpwID0gJ1wwJzsKLSAgICBfUHlTdHJpbmdfUmVzaXplKCZyZXByLCBwIC0gcSk7CisgICAgaWYgKF9QeVN0cmluZ19SZXNpemUoJnJlcHIsIHAgLSBxKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHJlcHI7CiB9CiAKQEAgLTM1NjQsOSArMzY4Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxzdGFydC1zdGFydHAsIGNvbGxlbmQtc3RhcnRwLCAmbmV3cG9zKTsKICAgICAgICAgICAgICAgICBpZiAocmVwdW5pY29kZSA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCi0gICAgICAgICAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZywgc28KLSAgICAgICAgICAgICAgICAgICB3ZSB3b24ndCBoYXZlIHRvIGNoZWNrIHNwYWNlIGZvciBlbmNvZGFibGUgY2hhcmFjdGVycykgKi8KKyAgICAgICAgICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UgaGF2ZSt0aGUKKyAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLCBzbyB3ZSB3b24ndCBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgY2hlY2sgc3BhY2UgZm9yIGVuY29kYWJsZSBjaGFyYWN0ZXJzKSAqLwogICAgICAgICAgICAgICAgIHJlc3BvcyA9IHN0ci1QeVN0cmluZ19BU19TVFJJTkcocmVzKTsKICAgICAgICAgICAgICAgICByZXBzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHJlcHVuaWNvZGUpOwogICAgICAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IHJlc3BvcytyZXBzaXplKyhlbmRwLWNvbGxlbmQpOwpAQCAtNDIxNyw3ICs0MzQwLDcgQEAKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICBrZXkgPSB2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICB2YWx1ZSA9IE5VTEw7CiAgICAgICAgICAgICBrZXkgPSBQeUludF9Gcm9tTG9uZyhkZWNvZGVbaV0pOwogICAgICAgICAgICAgdmFsdWUgPSBQeUludF9Gcm9tTG9uZyhpKTsKICAgICAgICAgICAgIGlmICgha2V5IHx8ICF2YWx1ZSkKQEAgLTUxMjQsMjcgKzUyNDcsMjcgQEAKIC8qIC0tLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuaWNvZGVkZWZzLmgiCi0KLSNkZWZpbmUgRlJPTV9VTklDT0RFCi0KICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAKIC8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCi0jZGVmaW5lIEZJWF9TVEFSVF9FTkQob2JqKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXJ0ICs9IChvYmopLT5sZW5ndGg7ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGVuZCA+IChvYmopLT5sZW5ndGgpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVuZCA9IChvYmopLT5sZW5ndGg7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVuZCArPSAob2JqKS0+bGVuZ3RoOyAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVuZCA9IDA7CisjZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCisgICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbmQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChzdGFydCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiBQeV9zc2l6ZV90IFB5VW5pY29kZV9Db3VudChQeU9iamVjdCAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN1YnN0ciwKQEAgLTUxNjQsMTAgKzUyODcsMTAgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIEZJWF9TVEFSVF9FTkQoc3RyX29iaik7Ci0KKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzdHJfb2JqLT5sZW5ndGgpOwogICAgIHJlc3VsdCA9IHN0cmluZ2xpYl9jb3VudCgKLSAgICAgICAgc3RyX29iai0+c3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWJfb2JqLT5zdHIsIHN1Yl9vYmotPmxlbmd0aAorICAgICAgICBzdHJfb2JqLT5zdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yl9vYmotPnN0ciwgc3ViX29iai0+bGVuZ3RoLAorICAgICAgICBQWV9TU0laRV9UX01BWAogICAgICAgICApOwogCiAgICAgUHlfREVDUkVGKHN1Yl9vYmopOwpAQCAtNTIyMiw4ICs1MzQ1LDcgQEAKICAgICBpZiAoc3Vic3RyaW5nLT5sZW5ndGggPT0gMCkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBGSVhfU1RBUlRfRU5EKHNlbGYpOwotCisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc2VsZi0+bGVuZ3RoKTsKICAgICBlbmQgLT0gc3Vic3RyaW5nLT5sZW5ndGg7CiAgICAgaWYgKGVuZCA8IHN0YXJ0KQogICAgICAgICByZXR1cm4gMDsKQEAgLTU2MDAsMzA1ICs1NzIyLDQwIEBACiAgICAgcmV0dXJuIHU7CiB9CiAKLSNkZWZpbmUgU1BMSVRfQVBQRU5EKGRhdGEsIGxlZnQsIHJpZ2h0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoKGRhdGEpICsgKGxlZnQpLCAocmlnaHQpIC0gKGxlZnQpKTsgICAgIFwKLSAgICBpZiAoIXN0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0KLXN0YXRpYwotUHlPYmplY3QgKnNwbGl0X3doaXRlc3BhY2UoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQorUHlPYmplY3QgKlB5VW5pY29kZV9TcGxpdGxpbmVzKFB5T2JqZWN0ICpzdHJpbmcsIGludCBrZWVwZW5kcykKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuID0gc2VsZi0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSAqYnVmID0gc2VsZi0+c3RyOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICAvKiBmaW5kIGEgdG9rZW4gKi8KLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGJ1ZltpXSkpCi0gICAgICAgICAgICBpKys7Ci0gICAgICAgIGogPSBpOwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiAhUHlfVU5JQ09ERV9JU1NQQUNFKGJ1ZltpXSkpCi0gICAgICAgICAgICBpKys7Ci0gICAgICAgIGlmIChqIDwgaSkgewotICAgICAgICAgICAgaWYgKG1heGNvdW50LS0gPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNQTElUX0FQUEVORChidWYsIGosIGkpOwotICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGJ1ZltpXSkpCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGogPCBsZW4pIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgbGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLVB5T2JqZWN0ICpQeVVuaWNvZGVfU3BsaXRsaW5lcyhQeU9iamVjdCAqc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBrZWVwZW5kcykKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICpsaXN0OwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfVU5JQ09ERSAqZGF0YTsKIAogICAgIHN0cmluZyA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cmluZyk7CiAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkYXRhID0gUHlVbmljb2RlX0FTX1VOSUNPREUoc3RyaW5nKTsKLSAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUoc3RyaW5nKTsKIAotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICBQeV9zc2l6ZV90IGVvbDsKLQotICAgICAgICAvKiBGaW5kIGEgbGluZSBhbmQgYXBwZW5kIGl0ICovCi0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmICFCTE9PTV9MSU5FQlJFQUsoZGF0YVtpXSkpCi0gICAgICAgICAgICBpKys7Ci0KLSAgICAgICAgLyogU2tpcCB0aGUgbGluZSBicmVhayByZWFkaW5nIENSTEYgYXMgb25lIGxpbmUgYnJlYWsgKi8KLSAgICAgICAgZW9sID0gaTsKLSAgICAgICAgaWYgKGkgPCBsZW4pIHsKLSAgICAgICAgICAgIGlmIChkYXRhW2ldID09ICdccicgJiYgaSArIDEgPCBsZW4gJiYKLSAgICAgICAgICAgICAgICBkYXRhW2krMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaWYgKGtlZXBlbmRzKQotICAgICAgICAgICAgICAgIGVvbCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgU1BMSVRfQVBQRU5EKGRhdGEsIGosIGVvbCk7Ci0gICAgICAgIGogPSBpOwotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBTUExJVF9BUFBFTkQoZGF0YSwgaiwgbGVuKTsKLSAgICB9CisgICAgbGlzdCA9IHN0cmluZ2xpYl9zcGxpdGxpbmVzKAorICAgICAgICAoUHlPYmplY3QqKSBzdHJpbmcsIFB5VW5pY29kZV9BU19VTklDT0RFKHN0cmluZyksCisgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShzdHJpbmcpLCBrZWVwZW5kcyk7CiAKICAgICBQeV9ERUNSRUYoc3RyaW5nKTsKICAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYobGlzdCk7Ci0gICAgUHlfREVDUkVGKHN0cmluZyk7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYwotUHlPYmplY3QgKnNwbGl0X2NoYXIoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIGNoLAotICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuID0gc2VsZi0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSAqYnVmID0gc2VsZi0+c3RyOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICBpZiAoYnVmW2ldID09IGNoKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgaSk7Ci0gICAgICAgICAgICBpID0gaiA9IGkgKyAxOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGkrKzsKLSAgICB9Ci0gICAgaWYgKGogPD0gbGVuKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChidWYsIGosIGxlbik7Ci0gICAgfQotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMKLVB5T2JqZWN0ICpzcGxpdF9zdWJzdHJpbmcoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpzdWJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNlbGYtPmxlbmd0aDsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbiA9IHN1YnN0cmluZy0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8PSBsZW4gLSBzdWJsZW47ICkgewotICAgICAgICBpZiAoUHlfVU5JQ09ERV9NQVRDSChzZWxmLCBpLCBzdWJzdHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKHNlbGYtPnN0ciwgaiwgaSk7Ci0gICAgICAgICAgICBpID0gaiA9IGkgKyBzdWJsZW47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoaiA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKHNlbGYtPnN0ciwgaiwgbGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotUHlPYmplY3QgKnJzcGxpdF93aGl0ZXNwYWNlKFB5VW5pY29kZU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gbGVuIC0gMTsgaSA+PSAwOyApIHsKLSAgICAgICAgLyogZmluZCBhIHRva2VuICovCi0gICAgICAgIHdoaWxlIChpID49IDAgJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGJ1ZltpXSkpCi0gICAgICAgICAgICBpLS07Ci0gICAgICAgIGogPSBpOwotICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgaWYgKGogPiBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaSArIDEsIGogKyAxKTsKLSAgICAgICAgICAgIHdoaWxlIChpID49IDAgJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGJ1ZltpXSkpCi0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGogPj0gMCkgewotICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCAwLCBqICsgMSk7Ci0gICAgfQotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljCi1QeU9iamVjdCAqcnNwbGl0X2NoYXIoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgY2gsCi0gICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuID0gc2VsZi0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSAqYnVmID0gc2VsZi0+c3RyOwotCi0gICAgZm9yIChpID0gaiA9IGxlbiAtIDE7IGkgPj0gMDsgKSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gY2gpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgaiA9IGkgPSBpIC0gMTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpLS07Ci0gICAgfQotICAgIGlmIChqID49IC0xKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChidWYsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMKLVB5T2JqZWN0ICpyc3BsaXRfc3Vic3RyaW5nKFB5VW5pY29kZU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpzdWJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlfc3NpemVfdCBzdWJsZW4gPSBzdWJzdHJpbmctPmxlbmd0aDsKLSAgICBQeU9iamVjdCAqc3RyOwotCi0gICAgZm9yIChpID0gbGVuIC0gc3VibGVuLCBqID0gbGVuOyBpID49IDA7ICkgewotICAgICAgICBpZiAoUHlfVU5JQ09ERV9NQVRDSChzZWxmLCBpLCBzdWJzdHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKHNlbGYtPnN0ciwgaSArIHN1Ymxlbiwgaik7Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgICAgIGkgLT0gc3VibGVuOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGktLTsKLSAgICB9Ci0gICAgaWYgKGogPj0gMCkgewotICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCAwLCBqKTsKLSAgICB9Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0jdW5kZWYgU1BMSVRfQVBQRU5ECi0KLXN0YXRpYwogUHlPYmplY3QgKnNwbGl0KFB5VW5pY29kZU9iamVjdCAqc2VsZiwKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewotICAgIFB5T2JqZWN0ICpsaXN0OwotCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKIAotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoc3Vic3RyaW5nID09IE5VTEwpCi0gICAgICAgIHJldHVybiBzcGxpdF93aGl0ZXNwYWNlKHNlbGYsbGlzdCxtYXhjb3VudCk7CisgICAgICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRfd2hpdGVzcGFjZSgKKyAgICAgICAgICAgIChQeU9iamVjdCopIHNlbGYsICBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgbWF4Y291bnQKKyAgICAgICAgICAgICk7CiAKLSAgICBlbHNlIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gc3BsaXRfY2hhcihzZWxmLGxpc3Qsc3Vic3RyaW5nLT5zdHJbMF0sbWF4Y291bnQpOwotCi0gICAgZWxzZSBpZiAoc3Vic3RyaW5nLT5sZW5ndGggPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBzcGxpdF9zdWJzdHJpbmcoc2VsZixsaXN0LHN1YnN0cmluZyxtYXhjb3VudCk7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdCgKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLAorICAgICAgICBzdWJzdHJpbmctPnN0ciwgc3Vic3RyaW5nLT5sZW5ndGgsCisgICAgICAgIG1heGNvdW50CisgICAgICAgICk7CiB9CiAKIHN0YXRpYwpAQCAtNTkwNiwyOCArNTc2MywxOSBAQAogICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKIHsKLSAgICBQeU9iamVjdCAqbGlzdDsKLQogICAgIGlmIChtYXhjb3VudCA8IDApCiAgICAgICAgIG1heGNvdW50ID0gUFlfU1NJWkVfVF9NQVg7CiAKLSAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKHN1YnN0cmluZyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcnNwbGl0X3doaXRlc3BhY2Uoc2VsZixsaXN0LG1heGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXRfd2hpdGVzcGFjZSgKKyAgICAgICAgICAgIChQeU9iamVjdCopIHNlbGYsICBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgbWF4Y291bnQKKyAgICAgICAgICAgICk7CiAKLSAgICBlbHNlIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAxKQotICAgICAgICByZXR1cm4gcnNwbGl0X2NoYXIoc2VsZixsaXN0LHN1YnN0cmluZy0+c3RyWzBdLG1heGNvdW50KTsKLQotICAgIGVsc2UgaWYgKHN1YnN0cmluZy0+bGVuZ3RoID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gcnNwbGl0X3N1YnN0cmluZyhzZWxmLGxpc3Qsc3Vic3RyaW5nLG1heGNvdW50KTsKKyAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdCgKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLAorICAgICAgICBzdWJzdHJpbmctPnN0ciwgc3Vic3RyaW5nLT5sZW5ndGgsCisgICAgICAgIG1heGNvdW50CisgICAgICAgICk7CiB9CiAKIHN0YXRpYwpAQCAtNTk0MCwxMCArNTc4OCwxNCBAQAogCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKKyAgICBlbHNlIGlmIChtYXhjb3VudCA9PSAwIHx8IHNlbGYtPmxlbmd0aCA9PSAwKQorICAgICAgICBnb3RvIG5vdGhpbmc7CiAKICAgICBpZiAoc3RyMS0+bGVuZ3RoID09IHN0cjItPmxlbmd0aCkgewotICAgICAgICAvKiBzYW1lIGxlbmd0aCAqLwogICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIC8qIHNhbWUgbGVuZ3RoICovCisgICAgICAgIGlmIChzdHIxLT5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIGdvdG8gbm90aGluZzsKICAgICAgICAgaWYgKHN0cjEtPmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAvKiByZXBsYWNlIGNoYXJhY3RlcnMgKi8KICAgICAgICAgICAgIFB5X1VOSUNPREUgdTEsIHUyOwpAQCAtNTk2Miw4ICs1ODE0LDggQEAKICAgICAgICAgICAgICAgICAgICAgdS0+c3RyW2ldID0gdTI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaSA9IGZhc3RzZWFyY2goCi0gICAgICAgICAgICAgICAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLCBGQVNUX1NFQVJDSAorICAgICAgICAgICAgaSA9IHN0cmluZ2xpYl9maW5kKAorICAgICAgICAgICAgICAgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBzdHIxLT5zdHIsIHN0cjEtPmxlbmd0aCwgMAogICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBpZiAoaSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBub3RoaW5nOwpAQCAtNTk3MSwyNSArNTgyMywzMCBAQAogICAgICAgICAgICAgaWYgKCF1KQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHUtPnN0ciwgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgpOwotICAgICAgICAgICAgd2hpbGUgKGkgPD0gc2VsZi0+bGVuZ3RoIC0gc3RyMS0+bGVuZ3RoKQotICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGksIHN0cjEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX0NPUFkodS0+c3RyK2ksIHN0cjItPnN0ciwgc3RyMi0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzdHIxLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGkrKzsKKworICAgICAgICAgICAgLyogY2hhbmdlIGV2ZXJ5dGhpbmcgaW4tcGxhY2UsIHN0YXJ0aW5nIHdpdGggdGhpcyBvbmUgKi8KKyAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWSh1LT5zdHIraSwgc3RyMi0+c3RyLCBzdHIyLT5sZW5ndGgpOworICAgICAgICAgICAgaSArPSBzdHIxLT5sZW5ndGg7CisKKyAgICAgICAgICAgIHdoaWxlICggLS1tYXhjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICBpID0gc3RyaW5nbGliX2ZpbmQoc2VsZi0+c3RyK2ksIHNlbGYtPmxlbmd0aC1pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIxLT5zdHIsIHN0cjEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSk7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWSh1LT5zdHIraSwgc3RyMi0+c3RyLCBzdHIyLT5sZW5ndGgpOworICAgICAgICAgICAgICAgIGkgKz0gc3RyMS0+bGVuZ3RoOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKIAotICAgICAgICBQeV9zc2l6ZV90IG4sIGksIGosIGU7CisgICAgICAgIFB5X3NzaXplX3QgbiwgaSwgajsKICAgICAgICAgUHlfc3NpemVfdCBwcm9kdWN0LCBuZXdfc2l6ZSwgZGVsdGE7CiAgICAgICAgIFB5X1VOSUNPREUgKnA7CiAKICAgICAgICAgLyogcmVwbGFjZSBzdHJpbmdzICovCi0gICAgICAgIG4gPSBzdHJpbmdsaWJfY291bnQoc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoKTsKLSAgICAgICAgaWYgKG4gPiBtYXhjb3VudCkKLSAgICAgICAgICAgIG4gPSBtYXhjb3VudDsKKyAgICAgICAgbiA9IHN0cmluZ2xpYl9jb3VudChzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgc3RyMS0+c3RyLCBzdHIxLT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOwogICAgICAgICBpZiAobiA9PSAwKQogICAgICAgICAgICAgZ290byBub3RoaW5nOwogICAgICAgICAvKiBuZXdfc2l6ZSA9IHNlbGYtPmxlbmd0aCArIG4gKiAoc3RyMi0+bGVuZ3RoIC0gc3RyMS0+bGVuZ3RoKSk7ICovCkBAIC02MDE1LDE5ICs1ODcyLDE1IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaSA9IDA7CiAgICAgICAgIHAgPSB1LT5zdHI7Ci0gICAgICAgIGUgPSBzZWxmLT5sZW5ndGggLSBzdHIxLT5sZW5ndGg7CiAgICAgICAgIGlmIChzdHIxLT5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICB3aGlsZSAobi0tID4gMCkgewogICAgICAgICAgICAgICAgIC8qIGxvb2sgZm9yIG5leHQgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICBqID0gaTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaiA8PSBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGosIHN0cjEpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGogPiBpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqID4gZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGogPSBzdHJpbmdsaWJfZmluZChzZWxmLT5zdHIraSwgc2VsZi0+bGVuZ3RoLWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaiA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHsKICAgICAgICAgICAgICAgICAgICAgLyogY29weSB1bmNoYW5nZWQgcGFydCBbaTpqXSAqLwogICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX0NPUFkocCwgc2VsZi0+c3RyK2ksIGotaSk7CiAgICAgICAgICAgICAgICAgICAgIHAgKz0gaiAtIGk7CkBAIC02MDgzLDcgKzU5MzYsNyBAQAogICAgICAgICAgICAgICJTLmNhcGl0YWxpemUoKSAtPiB1bmljb2RlXG5cCiBcblwKIFJldHVybiBhIGNhcGl0YWxpemVkIHZlcnNpb24gb2YgUywgaS5lLiBtYWtlIHRoZSBmaXJzdCBjaGFyYWN0ZXJcblwKLWhhdmUgdXBwZXIgY2FzZS4iKTsKK2hhdmUgdXBwZXIgY2FzZSBhbmQgdGhlIHJlc3QgbG93ZXIgY2FzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0KgogdW5pY29kZV9jYXBpdGFsaXplKFB5VW5pY29kZU9iamVjdCAqc2VsZikKQEAgLTYzODEsOCArNjIzNCw2IEBACiAgICAgLyogQ29lcmNlIHRoZSB0d28gYXJndW1lbnRzICovCiAgICAgc3ViID0gUHlVbmljb2RlX0Zyb21PYmplY3QoZWxlbWVudCk7CiAgICAgaWYgKCFzdWIpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICInaW4gPHN0cmluZz4nIHJlcXVpcmVzIHN0cmluZyBhcyBsZWZ0IG9wZXJhbmQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNjQ2NiwxMSArNjMxNywxMSBAQAogICAgIGlmIChzdWJzdHJpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBGSVhfU1RBUlRfRU5EKHNlbGYpOwotCisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc2VsZi0+bGVuZ3RoKTsKICAgICByZXN1bHQgPSBQeUludF9Gcm9tU3NpemVfdCgKICAgICAgICAgc3RyaW5nbGliX2NvdW50KHNlbGYtPnN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKQogICAgICAgICApOwogCiAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CkBAIC02NDg5LDEzICs2MzQwLDE1IEBACiBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBjYW4gaGFuZGxlIFVuaWNvZGVFbmNvZGVFcnJvcnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlX2VuY29kZShQeVVuaWNvZGVPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZV9lbmNvZGUoUHlVbmljb2RlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZW5jb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZW5jb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0KChQeU9iamVjdCAqKXNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogICAgIGlmICh2ID09IE5VTEwpCkBAIC02NTI1LDEzICs2Mzc4LDE1IEBACiBhYmxlIHRvIGhhbmRsZSBVbmljb2RlRGVjb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZV9kZWNvZGUoUHlVbmljb2RlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVfZGVjb2RlKFB5VW5pY29kZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKICAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHNzOmRlY29kZSIsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2ID0gUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdCgoUHlPYmplY3QgKilzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKICAgICBpZiAodiA9PSBOVUxMKQpAQCAtNzg3Myw3ICs3NzI4LDggQEAKIFB5RG9jX1NUUlZBUihmb3JtYXRfX2RvY19fLAogICAgICAgICAgICAgICJTLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpIC0+IHVuaWNvZGVcblwKIFxuXAotIik7CitSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiBTLCB1c2luZyBzdWJzdGl0dXRpb25zIGZyb20gYXJncyBhbmQga3dhcmdzLlxuXAorVGhlIHN1YnN0aXR1dGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYnJhY2VzICgneycgYW5kICd9JykuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX19mb3JtYXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC03OTA3LDcgKzc3NjMsNyBAQAogUHlEb2NfU1RSVkFSKHBfZm9ybWF0X19kb2NfXywKICAgICAgICAgICAgICAiUy5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSAtPiB1bmljb2RlXG5cCiBcblwKLSIpOworUmV0dXJuIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgUyBhcyBkZXNjcmliZWQgYnkgZm9ybWF0X3NwZWMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX19zaXplb2ZfXyhQeVVuaWNvZGVPYmplY3QgKnYpCkBAIC03OTMzLDcgKzc3ODksNyBAQAogICAgIC8qIE9yZGVyIGlzIGFjY29yZGluZyB0byBjb21tb24gdXNhZ2U6IG9mdGVuIHVzZWQgbWV0aG9kcyBzaG91bGQKICAgICAgICBhcHBlYXIgZmlyc3QsIHNpbmNlIGxvb2t1cCBpcyBkb25lIHNlcXVlbnRpYWxseS4gKi8KIAotICAgIHsiZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBlbmNvZGVfX2RvY19ffSwKKyAgICB7ImVuY29kZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9lbmNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGVuY29kZV9fZG9jX199LAogICAgIHsicmVwbGFjZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yZXBsYWNlLCBNRVRIX1ZBUkFSR1MsIHJlcGxhY2VfX2RvY19ffSwKICAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0LCBNRVRIX1ZBUkFSR1MsIHNwbGl0X19kb2NfX30sCiAgICAgeyJyc3BsaXQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcnNwbGl0LCBNRVRIX1ZBUkFSR1MsIHJzcGxpdF9fZG9jX199LApAQCAtNzk0OSw3ICs3ODA1LDcgQEAKICAgICB7ImxqdXN0IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2xqdXN0LCBNRVRIX1ZBUkFSR1MsIGxqdXN0X19kb2NfX30sCiAgICAgeyJsb3dlciIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9sb3dlciwgTUVUSF9OT0FSR1MsIGxvd2VyX19kb2NfX30sCiAgICAgeyJsc3RyaXAiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbHN0cmlwLCBNRVRIX1ZBUkFSR1MsIGxzdHJpcF9fZG9jX199LAotICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBkZWNvZGVfX2RvY19ffSwKKyAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9fZG9jX199LAogLyogIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX21ha2V0cmFucywgTUVUSF9WQVJBUkdTLCBtYWtldHJhbnNfX2RvY19ffSwgKi8KICAgICB7InJmaW5kIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JmaW5kLCBNRVRIX1ZBUkFSR1MsIHJmaW5kX19kb2NfX30sCiAgICAgeyJyaW5kZXgiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmluZGV4LCBNRVRIX1ZBUkFSR1MsIHJpbmRleF9fZG9jX199LApAQCAtODE2NCwxNiArODAyMCw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvdWJsZXRvdW5pY29kZShQeV9VTklDT0RFICpidWZmZXIsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgZG91YmxlIHgpCi17Ci0gICAgUHlfc3NpemVfdCByZXN1bHQ7Ci0KLSAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoKGNoYXIgKilidWZmZXIsIGxlbiwgZm9ybWF0LCB4KTsKLSAgICByZXN1bHQgPSBzdHJ0b3VuaWNvZGUoYnVmZmVyLCAoY2hhciAqKWJ1ZmZlcik7Ci0gICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QocmVzdWx0LCBQeV9zc2l6ZV90LCBpbnQpOwotfQotCi1zdGF0aWMgaW50CiBsb25ndG91bmljb2RlKFB5X1VOSUNPREUgKmJ1ZmZlciwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqZm9ybWF0LCBsb25nIHgpCiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CkBAIC04MTg3LDY0ICs4MDMzLDI5IEBACiAgICBzaGFyZWQgd2l0aCBzdHJpbmdvYmplY3QuYywgY29udmVydGluZyBmcm9tIDgtYml0IHRvIFVuaWNvZGUgYWZ0ZXIgdGhlCiAgICBmb3JtYXR0aW5nIGlzIGRvbmUuICovCiAKLXN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5X1VOSUNPREUgKmJ1ZiwKLSAgICAgICAgICAgIHNpemVfdCBidWZsZW4sCi0gICAgICAgICAgICBpbnQgZmxhZ3MsCi0gICAgICAgICAgICBpbnQgcHJlYywKLSAgICAgICAgICAgIGludCB0eXBlLAotICAgICAgICAgICAgUHlPYmplY3QgKnYpCisvKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSB0byBhIFB5VW5pY29kZSBvYmplY3QsIG9yIE5VTEwgb24gZmFpbHVyZS4gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSkKIHsKLSAgICAvKiBmbXQgPSAnJSMuJyArIGBwcmVjYCArIGB0eXBlYAotICAgICAgIHdvcnN0IGNhc2UgbGVuZ3RoID0gMyArIDEwIChsZW4gb2YgSU5UX01BWCkgKyAxID0gMTQgKHVzZSAyMCkqLwotICAgIGNoYXIgZm10WzIwXTsKKyAgICBjaGFyICpwOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgZG91YmxlIHg7CiAKICAgICB4ID0gUHlGbG9hdF9Bc0RvdWJsZSh2KTsKICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwotI2lmIFNJWkVPRl9JTlQgPiA0Ci0gICAgLyogbWFrZSBzdXJlIHRoYXQgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgcHJlY2lzaW9uIHJlYWxseSBkb2VzCi0gICAgICAgbmVlZCBhdCBtb3N0IDEwIGRpZ2l0czogcGxhdGZvcm1zIHdpdGggc2l6ZW9mKGludCkgPT0gOCBleGlzdCEgKi8KLSAgICBpZiAocHJlYyA+IDB4N2ZmZmZmZmYpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAib3V0cmFnZW91c2x5IGxhcmdlIHByZWNpc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGZvcm1hdHRlZCBmbG9hdCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotI2VuZGlmCiAKLSAgICBpZiAodHlwZSA9PSAnZicgJiYgZmFicyh4KSA+PSAxZTUwKQotICAgICAgICB0eXBlID0gJ2cnOwotICAgIC8qIFdvcnN0IGNhc2UgbGVuZ3RoIGNhbGMgdG8gZW5zdXJlIG5vIGJ1ZmZlciBvdmVycnVuOgotCi0gICAgICAgJ2cnIGZvcm1hdHM6Ci0gICAgICAgZm10ID0gJSMuPHByZWM+ZwotICAgICAgIGJ1ZiA9ICctJyArIFswLTldKnByZWMgKyAnLicgKyAnZSsnICsgKGxvbmdlc3QgZXhwCi0gICAgICAgZm9yIGFueSBkb3VibGUgcmVwLikKLSAgICAgICBsZW4gPSAxICsgcHJlYyArIDEgKyAyICsgNSA9IDkgKyBwcmVjCi0KLSAgICAgICAnZicgZm9ybWF0czoKLSAgICAgICBidWYgPSAnLScgKyBbMC05XSp4ICsgJy4nICsgWzAtOV0qcHJlYyAod2l0aCB4IDwgNTApCi0gICAgICAgbGVuID0gMSArIDUwICsgMSArIHByZWMgPSA1MiArIHByZWMKLQotICAgICAgIElmIHByZWM9MCB0aGUgZWZmZWN0aXZlIHByZWNpc2lvbiBpcyAxICh0aGUgbGVhZGluZyBkaWdpdCBpcwotICAgICAgIGFsd2F5cyBnaXZlbiksIHRoZXJlZm9yZSBpbmNyZWFzZSB0aGUgbGVuZ3RoIGJ5IG9uZS4KLQotICAgICovCi0gICAgaWYgKCgodHlwZSA9PSAnZycgfHwgdHlwZSA9PSAnRycpICYmCi0gICAgICAgICBidWZsZW4gPD0gKHNpemVfdCkxMCArIChzaXplX3QpcHJlYykgfHwKLSAgICAgICAgKHR5cGUgPT0gJ2YnICYmIGJ1ZmxlbiA8PSAoc2l6ZV90KTUzICsgKHNpemVfdClwcmVjKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXR0ZWQgZmxvYXQgaXMgdG9vIGxvbmcgKHByZWNpc2lvbiB0b28gbGFyZ2U/KSIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5T1Nfc25wcmludGYoZm10LCBzaXplb2YoZm10KSwgIiUlJXMuJWQlYyIsCi0gICAgICAgICAgICAgICAgICAoZmxhZ3MmRl9BTFQpID8gIiMiIDogIiIsCi0gICAgICAgICAgICAgICAgICBwcmVjLCB0eXBlKTsKLSAgICByZXR1cm4gZG91YmxldG91bmljb2RlKGJ1ZiwgYnVmbGVuLCBmbXQsIHgpOworICAgIHAgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgdHlwZSwgcHJlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZfQUxUKSA/IFB5X0RUU0ZfQUxUIDogMCwgTlVMTCk7CisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHAsIHN0cmxlbihwKSk7CisgICAgUHlNZW1fRnJlZShwKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC04NDE0LDcgKzgyMjUsNyBAQAogCiAvKiBmbXQlKHYxLHYyLC4uLikgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIHNwcmludGYoZm10LCB2MSwgdjIsIC4uLikKIAotICAgRk9STUFUQlVGTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciBpbiB3aGljaCB0aGUgZmxvYXRzLCBpbnRzLCAmCisgICBGT1JNQVRCVUZMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBpbnRzICYKICAgIGNoYXJzIGFyZSBmb3JtYXR0ZWQuIFhYWCBUaGlzIGlzIGEgbWFnaWMgbnVtYmVyLiBFYWNoIGZvcm1hdHRpbmcKICAgIHJvdXRpbmUgZG9lcyBib3VuZHMgY2hlY2tpbmcgdG8gZW5zdXJlIG5vIG92ZXJmbG93LCBidXQgYSBiZXR0ZXIKICAgIHNvbHV0aW9uIG1heSBiZSB0byBtYWxsb2MgYSBidWZmZXIgb2YgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgZWFjaApAQCAtODQ4NSw3ICs4Mjk2LDcgQEAKICAgICAgICAgICAgIFB5X1VOSUNPREUgKnBidWY7CiAgICAgICAgICAgICBQeV9VTklDT0RFIHNpZ247CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgZm9ybWF0YnVmW0ZPUk1BVEJVRkxFTl07IC8qIEZvciBmb3JtYXR7ZmxvYXQsaW50LGNoYXJ9KCkgKi8KKyAgICAgICAgICAgIFB5X1VOSUNPREUgZm9ybWF0YnVmW0ZPUk1BVEJVRkxFTl07IC8qIEZvciBmb3JtYXR7aW50LGNoYXJ9KCkgKi8KIAogICAgICAgICAgICAgZm10Kys7CiAgICAgICAgICAgICBpZiAoKmZtdCA9PSAnKCcpIHsKQEAgLTg3NDYsMTMgKzg1NTcsMTEgQEAKICAgICAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnRicpCi0gICAgICAgICAgICAgICAgICAgIGMgPSAnZic7Ci0gICAgICAgICAgICAgICAgcGJ1ZiA9IGZvcm1hdGJ1ZjsKLSAgICAgICAgICAgICAgICBsZW4gPSBmb3JtYXRmbG9hdChwYnVmLCBzaXplb2YoZm9ybWF0YnVmKS9zaXplb2YoUHlfVU5JQ09ERSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIHByZWMsIGMsIHYpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYyk7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIHBidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0ZW1wKTsKKyAgICAgICAgICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUodGVtcCk7CiAgICAgICAgICAgICAgICAgc2lnbiA9IDE7CiAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQogICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwpAQCAtOTA3MywxMSArODg4MiwzIEBACiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgotCi0KLS8qCi0gIExvY2FsIHZhcmlhYmxlczoKLSAgYy1iYXNpYy1vZmZzZXQ6IDQKLSAgaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gIEVuZDoKLSovCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggMmU5YzAxYi4uZDJlYzQ2YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtNiwyMyArNiwyNCBAQAogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMzJ9LAogICAgIHswLCAwLCAwLCAwLCAwLCA0OH0sCi0gICAgezAsIDAsIDAsIDAsIDAsIDZ9LAotICAgIHswLCAwLCAwLCAxLCAxLCA2fSwKLSAgICB7MCwgMCwgMCwgMiwgMiwgNn0sCi0gICAgezAsIDAsIDAsIDMsIDMsIDZ9LAotICAgIHswLCAwLCAwLCA0LCA0LCA2fSwKLSAgICB7MCwgMCwgMCwgNSwgNSwgNn0sCi0gICAgezAsIDAsIDAsIDYsIDYsIDZ9LAotICAgIHswLCAwLCAwLCA3LCA3LCA2fSwKLSAgICB7MCwgMCwgMCwgOCwgOCwgNn0sCi0gICAgezAsIDAsIDAsIDksIDksIDZ9LAorICAgIHswLCAwLCAwLCAwLCAwLCA1MTh9LAorICAgIHswLCAwLCAwLCAxLCAxLCA1MTh9LAorICAgIHswLCAwLCAwLCAyLCAyLCA1MTh9LAorICAgIHswLCAwLCAwLCAzLCAzLCA1MTh9LAorICAgIHswLCAwLCAwLCA0LCA0LCA1MTh9LAorICAgIHswLCAwLCAwLCA1LCA1LCA1MTh9LAorICAgIHswLCAwLCAwLCA2LCA2LCA1MTh9LAorICAgIHswLCAwLCAwLCA3LCA3LCA1MTh9LAorICAgIHswLCAwLCAwLCA4LCA4LCA1MTh9LAorICAgIHswLCAwLCAwLCA5LCA5LCA1MTh9LAogICAgIHswLCAzMiwgMCwgMCwgMCwgMTI5fSwKICAgICB7NjU1MDQsIDAsIDY1NTA0LCAwLCAwLCA5fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgOX0sCi0gICAgezAsIDAsIDAsIDAsIDIsIDR9LAotICAgIHswLCAwLCAwLCAwLCAzLCA0fSwKKyAgICB7MCwgMCwgMCwgMCwgMiwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgMywgNTE2fSwKICAgICB7NzQzLCAwLCA3NDMsIDAsIDAsIDl9LAotICAgIHswLCAwLCAwLCAwLCAxLCA0fSwKKyAgICB7MCwgMCwgMCwgMCwgMSwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgNTEyfSwKICAgICB7MTIxLCAwLCAxMjEsIDAsIDAsIDl9LAogICAgIHswLCAxLCAwLCAwLCAwLCAxMjl9LAogICAgIHs2NTUzNSwgMCwgNjU1MzUsIDAsIDAsIDl9LApAQCAtNjAsMTEgKzYxLDEzIEBACiAgICAgezAsIDEwNzk1LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA2NTM3MywgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgMTA3OTIsIDAsIDAsIDAsIDEyOX0sCisgICAgezEwODE1LCAwLCAxMDgxNSwgMCwgMCwgOX0sCiAgICAgezAsIDY1MzQxLCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA2OSwgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgNzEsIDAsIDAsIDAsIDEyOX0sCiAgICAgezEwNzgzLCAwLCAxMDc4MywgMCwgMCwgOX0sCiAgICAgezEwNzgwLCAwLCAxMDc4MCwgMCwgMCwgOX0sCisgICAgezEwNzgyLCAwLCAxMDc4MiwgMCwgMCwgOX0sCiAgICAgezY1MzI2LCAwLCA2NTMyNiwgMCwgMCwgOX0sCiAgICAgezY1MzMwLCAwLCA2NTMzMCwgMCwgMCwgOX0sCiAgICAgezY1MzMxLCAwLCA2NTMzMSwgMCwgMCwgOX0sCkBAIC0xMTIsMTIgKzExNSwxMiBAQAogICAgIHswLCA0OCwgMCwgMCwgMCwgMTI5fSwKICAgICB7NjU0ODgsIDAsIDY1NDg4LCAwLCAwLCA5fSwKICAgICB7MCwgNzI2NCwgMCwgMCwgMCwgMTI5fSwKLSAgICB7MCwgMCwgMCwgMCwgNCwgNH0sCi0gICAgezAsIDAsIDAsIDAsIDUsIDR9LAotICAgIHswLCAwLCAwLCAwLCA2LCA0fSwKLSAgICB7MCwgMCwgMCwgMCwgNywgNH0sCi0gICAgezAsIDAsIDAsIDAsIDgsIDR9LAotICAgIHswLCAwLCAwLCAwLCA5LCA0fSwKKyAgICB7MCwgMCwgMCwgMCwgNCwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgNSwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgNiwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgNywgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgOCwgNTE2fSwKKyAgICB7MCwgMCwgMCwgMCwgOSwgNTE2fSwKICAgICB7NDI4NzcsIDc1NDUsIDQyODc3LCAwLCAwLCAyNjV9LAogICAgIHszODE0LCAwLCAzODE0LCAwLCAwLCA5fSwKICAgICB7NjU0NzcsIDAsIDY1NDc3LCAwLCAwLCA5fSwKQEAgLTE0MCwxNCArMTQzLDE0IEBACiAgICAgezAsIDY1NDI0LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA2NTQwOCwgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgNjU0MTAsIDAsIDAsIDAsIDEyOX0sCi0gICAgezAsIDAsIDAsIDAsIDAsIDR9LAorICAgIHswLCAwLCAwLCAwLCAwLCA1MTZ9LAogICAgIHswLCA1ODAxOSwgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgNTcxNTMsIDAsIDAsIDAsIDEyOX0sCiAgICAgezAsIDU3Mjc0LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCAyOCwgMCwgMCwgMCwgMTI5fSwKICAgICB7NjU1MDgsIDAsIDY1NTA4LCAwLCAwLCA5fSwKLSAgICB7MCwgMTYsIDAsIDAsIDAsIDB9LAotICAgIHs2NTUyMCwgMCwgNjU1MjAsIDAsIDAsIDB9LAorICAgIHswLCAxNiwgMCwgMCwgMCwgNTEyfSwKKyAgICB7NjU1MjAsIDAsIDY1NTIwLCAwLCAwLCA1MTJ9LAogICAgIHswLCAyNiwgMCwgMCwgMCwgMH0sCiAgICAgezY1NTEwLCAwLCA2NTUxMCwgMCwgMCwgMH0sCiAgICAgezAsIDU0NzkzLCAwLCAwLCAwLCAxMjl9LApAQCAtMTU4LDE4MSArMTYxLDg3IEBACiAgICAgezAsIDU0NzU2LCAwLCAwLCAwLCAxMjl9LAogICAgIHswLCA1NDc4NywgMCwgMCwgMCwgMTI5fSwKICAgICB7MCwgNTQ3NTMsIDAsIDAsIDAsIDEyOX0sCisgICAgezAsIDU0NzU0LCAwLCAwLCAwLCAxMjl9LAorICAgIHswLCA1NDcyMSwgMCwgMCwgMCwgMTI5fSwKICAgICB7NTgyNzIsIDAsIDU4MjcyLCAwLCAwLCA5fSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgNTEzfSwKICAgICB7NDI4NzcsIDc1NDUsIDQyODc3LCAwLCAwLCAzODV9LAogICAgIHswLCA0MCwgMCwgMCwgMCwgMTI5fSwKICAgICB7NjU0OTYsIDAsIDY1NDk2LCAwLCAwLCA5fSwKIH07CiAKIC8qIHR5cGUgaW5kZXhlcyAqLwotI2RlZmluZSBTSElGVCA4CisjZGVmaW5lIFNISUZUIDcKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZGV4MVtdID0gewogICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgCi0gICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM0LCAzNywgCi0gICAgMzgsIDM0LCAzNCwgMzQsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgMzQsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCA0NywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgNDgsIDIxLCAyMSwgMjEsIDIxLCA0OSwgCi0gICAgMjEsIDUwLCA1MSwgNTIsIDUzLCA1NCwgOCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDU1LCAzNCwgMzQsIDM0LCAKKyAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM0LCAzNSwgMzYsIDM3LCAKKyAgICAzOCwgMzksIDM0LCAzNCwgMzQsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NCwgNjQsIDY1LCA2NiwgNjcsIDY0LCAKKyAgICA2NCwgNjQsIDY4LCA2OSwgNzAsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDcxLCAxNywgNzIsIDczLCA3NCwgNzUsIDc2LCAKKyAgICA3NywgNjQsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA2NCwgNjQsIDg1LCA4NiwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgODcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgODgsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAyMSwgNTYsIDU3LCAyMSwgNTgsIDU5LCAKLSAgICA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA4LCA4LCA4LCA2NiwgNjcsIDY4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAyMSwgMjEsIDIxLCA2OSwgNzAsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDcxLCA3MiwgCi0gICAgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgNzksIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCA4MCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgMjEsIDIxLCA4MSwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgODIsIDgzLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDg5LCA5MCwgOTEsIDkyLCAzNCwgMzQsIDM0LCA5MywgMzQsIDM0LCAKKyAgICAzNCwgOTQsIDk1LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDk2LCAzNCwgMzQsIDM0LCA5NywgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDk4LCA5OSwgMTAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxMDEsIDEwMiwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxMDMsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMTA0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNSwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDEwMSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAxMDQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNiwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNywgMTA4LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwOSwgMTEwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDExMSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMTEyLCAzNCwgMzQsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIAorICAgIDEyMiwgMTcsIDEyMywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMTI0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIAorICAgIDEyOSwgMTMwLCAzNCwgMzQsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTcsIAorICAgIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNDYsIDE3LCAxNDcsIDE3LCAxNDgsIAorICAgIDE3LCAxNDksIDE3LCAxNTAsIDE3LCAxNywgMTcsIDE1MSwgMTcsIDE3LCAxNywgMTcsIDE1MiwgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTUzLCAxNywgMTU0LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTU1LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDY0LCAxNTYsIDE1NywgMTU4LCAxNTksIDE3LCAxNjAsIDE3LCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIAorICAgIDE2OCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTY5LCAxNzAsIDE3MSwgMTcyLCAKKyAgICAxNzMsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3NCwgMTc1LCAxNzYsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDg3LCAxNzcsIDM0LCAxNzgsIDE3OSwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTgwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDE4MSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDE4MiwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxODMsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKQEAgLTM0MCwzMiArMjQ5LDQxOSBAQAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAogICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDE4NCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCA4NCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgODQsIAorICAgIDE4NSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMzQsIDE4MCwgMzQsIDM0LCAxODYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE4NywgMTcsIDY0LCAxODgsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgMTg5LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIAorICAgIDY0LCA2NCwgNjQsIDY0LCA2NCwgMTg5LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZGV4MltdID0gewotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDMsIDIsIDIsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDMsIDMsIDMsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDMsIDMsIDMsIDIsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxNCwgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCkBAIC0zNzMsMTA1ICs2NjksMTA4IEBACiAgICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDE2LCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxNywgMTgsIDEsIDE5LCAxLCAxLCAxLCAyMCwgMTYsIDEsIDEsIDEsIDEsIDEsIDE0LCAxNCwgMTQsIAorICAgIDEsIDEsIDEsIDEsIDE3LCAxOCwgMSwgMTksIDEsIDEsIDEsIDIwLCAxNiwgMSwgMjEsIDIxLCAyMSwgMSwgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTYsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKICAgICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMSwgMTUsIAotICAgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDIxLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyNCwgMjUsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDE2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMTYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyNiwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjcsIDI4LCAyOSwgMjIsIDIzLCAyMiwgMjMsIDMwLCAyMiwgMjMsIAotICAgIDMxLCAzMSwgMjIsIDIzLCAxNiwgMzIsIDMzLCAzNCwgMjIsIDIzLCAzMSwgMzUsIDM2LCAzNywgMzgsIDIyLCAyMywgMzksIAotICAgIDE2LCAzNywgNDAsIDQxLCA0MiwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgNDMsIDIyLCAyMywgNDMsIDE2LCAxNiwgMjIsIAotICAgIDIzLCA0MywgMjIsIDIzLCA0NCwgNDQsIDIyLCAyMywgMjIsIDIzLCA0NSwgMjIsIDIzLCAxNiwgNDYsIDIyLCAyMywgMTYsIAotICAgIDQ3LCA0NiwgNDYsIDQ2LCA0NiwgNDgsIDQ5LCA1MCwgNDgsIDQ5LCA1MCwgNDgsIDQ5LCA1MCwgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDUxLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxNiwgNDgsIDQ5LCA1MCwgMjIsIAotICAgIDIzLCA1MiwgNTMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCA1NCwgMTYsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDU1LCAyMiwgMjMsIAotICAgIDU2LCA1NywgMTYsIDE2LCAyMiwgMjMsIDU4LCA1OSwgNjAsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCA2MSwgNjIsIDE2LCA2MywgNjQsIDE2LCA2NSwgNjUsIDE2LCA2NiwgMTYsIDY3LCAxNiwgMTYsIDE2LCAxNiwgNjUsIAotICAgIDE2LCAxNiwgNjgsIDE2LCAxNiwgMTYsIDE2LCA2OSwgNzAsIDE2LCA3MSwgMTYsIDE2LCAxNiwgNzAsIDE2LCA3MiwgNzMsIAotICAgIDE2LCAxNiwgNzQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA3NSwgMTYsIDE2LCA3NiwgMTYsIDE2LCA3NiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDc2LCA3NywgNzgsIDc4LCA3OSwgMTYsIDE2LCAxNiwgMTYsIDE2LCA4MCwgMTYsIDQ2LCAxNiwgMTYsIAorICAgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDIyLCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyNSwgMjYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDE2LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyNywgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjgsIDI5LCAzMCwgMjMsIDI0LCAyMywgMjQsIDMxLCAyMywgMjQsIAorICAgIDMyLCAzMiwgMjMsIDI0LCAxNiwgMzMsIDM0LCAzNSwgMjMsIDI0LCAzMiwgMzYsIDM3LCAzOCwgMzksIDIzLCAyNCwgNDAsIAorICAgIDE2LCAzOCwgNDEsIDQyLCA0MywgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgNDQsIDIzLCAyNCwgNDQsIDE2LCAxNiwgMjMsIAorICAgIDI0LCA0NCwgMjMsIDI0LCA0NSwgNDUsIDIzLCAyNCwgMjMsIDI0LCA0NiwgMjMsIDI0LCAxNiwgNDcsIDIzLCAyNCwgMTYsIAorICAgIDQ4LCA0NywgNDcsIDQ3LCA0NywgNDksIDUwLCA1MSwgNDksIDUwLCA1MSwgNDksIDUwLCA1MSwgMjMsIDI0LCAyMywgMjQsIAorICAgIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDUyLCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxNiwgNDksIDUwLCA1MSwgMjMsIAorICAgIDI0LCA1MywgNTQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCA1NSwgMTYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDU2LCAyMywgMjQsIAorICAgIDU3LCA1OCwgNTksIDU5LCAyMywgMjQsIDYwLCA2MSwgNjIsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCA2MywgNjQsIDY1LCA2NiwgNjcsIDE2LCA2OCwgNjgsIDE2LCA2OSwgMTYsIDcwLCAxNiwgMTYsIDE2LCAxNiwgNjgsIAorICAgIDE2LCAxNiwgNzEsIDE2LCAxNiwgMTYsIDE2LCA3MiwgNzMsIDE2LCA3NCwgMTYsIDE2LCAxNiwgNzMsIDE2LCA3NSwgNzYsIAorICAgIDE2LCAxNiwgNzcsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA3OCwgMTYsIDE2LCA3OSwgMTYsIDE2LCA3OSwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDc5LCA4MCwgODEsIDgxLCA4MiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA4MywgMTYsIDQ3LCAxNiwgMTYsIAogICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAxLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDEsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCA4MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDQ2LCAxLCAyMiwgMjMsIDAsIDAsIDQ2LCA0MSwgNDEsIDQxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCA4MiwgCi0gICAgMSwgODMsIDgzLCA4MywgMCwgODQsIDAsIDg1LCA4NSwgMTYsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIAorICAgIDEsIDEsIDg0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMywgMjQsIAorICAgIDIzLCAyNCwgNDcsIDEsIDIzLCAyNCwgMCwgMCwgNDcsIDQyLCA0MiwgNDIsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDg1LCAKKyAgICAxLCA4NiwgODYsIDg2LCAwLCA4NywgMCwgODgsIDg4LCAxNiwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAwLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKLSAgICA4NiwgODcsIDg3LCA4NywgMTYsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAKLSAgICAxNSwgMTUsIDE1LCAxNSwgODgsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDg5LCA5MCwgOTAsIDkxLCAKLSAgICA5MiwgOTMsIDk0LCA5NCwgOTQsIDk1LCA5NiwgOTcsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDk4LCA5OSwgMTAwLCAxNiwgCi0gICAgMTAxLCAxMDIsIDEsIDIyLCAyMywgMTAzLCAyMiwgMjMsIDE2LCA1NCwgNTQsIDU0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIAotICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDE0LCAxNCwgMTQsIAorICAgIDg5LCA5MCwgOTAsIDkwLCAxNiwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIAorICAgIDE1LCAxNSwgMTUsIDE1LCA5MSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgOTIsIDkzLCA5MywgOTQsIAorICAgIDk1LCA5NiwgOTcsIDk3LCA5NywgOTgsIDk5LCAxMDAsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAKKyAgICAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDEwMSwgMTAyLCAxMDMsIAorICAgIDE2LCAxMDQsIDEwNSwgMSwgMjMsIDI0LCAxMDYsIDIzLCAyNCwgMTYsIDU1LCA1NSwgNTUsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgCiAgICAgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCiAgICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCi0gICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgCi0gICAgOTksIDk5LCA5OSwgOTksIDk5LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMTA1LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDEwNiwgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxMDgsIDEwOCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAKLSAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgCi0gICAgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTYsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIAorICAgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxMDgsIDIzLCAyNCwgMjMsIDI0LCAKKyAgICAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMTA5LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMCwgMTEwLCAKKyAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCisgICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIAorICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAwLCAwLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCisgICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAorICAgIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKKyAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDE2LCAwLCAxLCAxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgCi0gICAgMSwgNDYsIDQ2LCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQsIDUsIDYsIAotICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgNDYsIDQ2LCAxLCAxLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMCwgMSwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgCi0gICAgNDYsIDEsIDEsIDEsIDEsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgCisgICAgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCA0NywgNDcsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NywgNDcsIDQ3LCAxLCAxLCA0NywgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgCisgICAgMTIsIDEzLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDEsIDEsIDEsIDEsIDQ3LCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMSwgMSwgMSwgMSwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCAxLCAxLCAxLCA0NywgMSwgMSwgMSwgCisgICAgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC00NzksMzgyICs3NzgsMzM5IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgMSwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDQ3LCAxLCAKKyAgICAxLCAxLCAxLCAxLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgNCwgCisgICAgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIAorICAgIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMSwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIAorICAgIDEsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDEsIAorICAgIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NywgNDcsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCA0NywgNDcsIDQ3LCAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgCisgICAgMSwgMCwgMSwgMSwgMSwgMCwgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAKKyAgICA0NywgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxLCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgCisgICAgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgNDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAKKyAgICAwLCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCAwLCA0NywgMCwgNDcsIDQ3LCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIAorICAgIDEsIDEsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgCisgICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAKKyAgICAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxLCAwLCAwLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMSwgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3LCAwLCA0NywgNDcsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAxLCAKKyAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxLCAxLCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDAsIDQ3LCAwLCAwLCA0NywgNDcsIDAsIDQ3LCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAwLCAKKyAgICA0NywgMCwgNDcsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMCwgMSwgMSwgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAorICAgIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAwLCAwLCA0NiwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCA0NiwgNDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMSwgMSwgMSwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMCwgNDYsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAxLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgCi0gICAgMCwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDQ2LCAKLSAgICA0NiwgMCwgNDYsIDQ2LCA0NiwgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ2LCA0NiwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDAsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAotICAgIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIAotICAgIDQ2LCA0NiwgNDYsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDQ2LCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAwLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKLSAgICAxMywgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDQ2LCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKLSAgICAxLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDEsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAKLSAgICAxMSwgMTIsIDEzLCAxLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgNDYsIAotICAgIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCA0NiwgNDYsIDAsIDQ2LCAwLCA0NiwgNDYsIDAsIDAsIDAsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgMCwgMCwgCi0gICAgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIAotICAgIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMCwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIAotICAgIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgMCwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAKLSAgICAxMCwgMTEsIDEyLCAxMywgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCi0gICAgMSwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAKLSAgICAwLCAwLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCAKLSAgICA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMCwgMSwgMSwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAxLCAwLCAKLSAgICAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCA0NiwgCi0gICAgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMSwgMSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAwLCA0NiwgMCwgMCwgNDYsIDQ2LCAwLCA0NiwgMCwgMCwgNDYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIAotICAgIDQ2LCA0NiwgMCwgNDYsIDAsIDQ2LCAwLCAwLCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAxLCA0NiwgNDYsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAwLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCi0gICAgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDEsIDEsIAorICAgIDAsIDAsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNCwgNSwgNiwgNywgOCwgCi0gICAgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCA0NiwgMSwgMSwgMSwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgCi0gICAgNDYsIDQ2LCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAotICAgIDEzLCAwLCAwLCAwLCAwLCAxLCAxLCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIAotICAgIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAKLSAgICAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMTA5LCAxMDksIDEwOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCAwLCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgMCwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAKLSAgICAxMTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMSwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAKLSAgICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAKLSAgICAxLCAxLCAxLCAxLCA0NiwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNCwgNSwgNiwgNywgOCwgCisgICAgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCA0NywgMSwgMSwgMSwgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgCisgICAgNDcsIDQ3LCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAorICAgIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAorICAgIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAKKyAgICAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgCisgICAgMTE2LCAxMTcsIDExOCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDIxLCAyMSwgMjEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDQ3LCA0NywgNDcsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIAotICAgIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCA0NywgMSwgMSwgMSwgMSwgNDcsIDEsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAorICAgIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMiwgMCwgNCwgNSwgNiwgNywgOCwgOSwgCisgICAgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAxLCA0LCA1LCA2LCAKKyAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCAKKyAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDQ2LCA0NiwgNCwgNSwgCi0gICAgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgCisgICAgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNDYsIDExNiwgMTYsIDE2LCAxNiwgMTE3LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAKLSAgICAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDExOCwgCi0gICAgMTYsIDE2LCAxMTksIDE2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIAotICAgIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKLSAgICAxMjAsIDEyMCwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCi0gICAgMTIwLCAxMjAsIDAsIDAsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDAsIDAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCi0gICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIwLCAxMjAsIAotICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKLSAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAwLCAwLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAwLCAwLCAKLSAgICAxNiwgMTIwLCAxNiwgMTIwLCAxNiwgMTIwLCAxNiwgMTIwLCAwLCAxMjEsIDAsIDEyMSwgMCwgMTIxLCAwLCAxMjEsIDEyMCwgCi0gICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAotICAgIDEyMSwgMTIyLCAxMjIsIDEyMywgMTIzLCAxMjMsIDEyMywgMTI0LCAxMjQsIDEyNSwgMTI1LCAxMjYsIDEyNiwgMTI3LCAKLSAgICAxMjcsIDAsIDAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyMCwgMTIwLCAxNiwgMTI5LCAxNiwgMCwgMTYsIDE2LCAKLSAgICAxMjEsIDEyMSwgMTMwLCAxMzAsIDEzMSwgMSwgMTMyLCAxLCAxLCAxLCAxNiwgMTI5LCAxNiwgMCwgMTYsIDE2LCAxMzMsIAotICAgIDEzMywgMTMzLCAxMzMsIDEzMSwgMSwgMSwgMSwgMTIwLCAxMjAsIDE2LCAxNiwgMCwgMCwgMTYsIDE2LCAxMjEsIDEyMSwgCi0gICAgMTM0LCAxMzQsIDAsIDEsIDEsIDEsIDEyMCwgMTIwLCAxNiwgMTYsIDE2LCAxMDAsIDE2LCAxNiwgMTIxLCAxMjEsIDEzNSwgCi0gICAgMTM1LCAxMDMsIDEsIDEsIDEsIDAsIDAsIDE2LCAxMjksIDE2LCAwLCAxNiwgMTYsIDEzNiwgMTM2LCAxMzcsIDEzNywgMTMxLCAKLSAgICAxLCAxLCAwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAzLCAzLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAyLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxMzgsIDE2LCAwLCAwLCAKLSAgICAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxLCAxLCAxLCAxLCAxLCAxNiwgMTM4LCAyMCwgMTcsIDE4LCAxMTAsIAotICAgIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxLCAxLCAxLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDk0LCAxLCAxLCAxLCAxLCA5NCwgMSwgMSwgMTYsIDk0LCA5NCwgOTQsIAotICAgIDE2LCAxNiwgOTQsIDk0LCA5NCwgMTYsIDEsIDk0LCAxLCAxLCAxLCA5NCwgOTQsIDk0LCA5NCwgOTQsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDk0LCAxLCAxMzksIDEsIDk0LCAxLCAxNDAsIDE0MSwgOTQsIDk0LCAxLCAxNiwgOTQsIDk0LCAxNDIsIDk0LCAxNiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDE2LCAxLCAxLCAxNiwgMTYsIDk0LCA5NCwgMSwgMSwgMSwgMSwgMSwgOTQsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxLCAxLCAxLCAxLCAxNDMsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCi0gICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxLCAxLCAxLCAyMiwgMjMsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgMSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgNDcsIDExOSwgMTYsIDE2LCAxNiwgMTIwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEyMSwgMTYsIDE2LCAxMjIsIDE2LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxMjMsIAorICAgIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKKyAgICAxMjQsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDAsIDAsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDAsIAorICAgIDAsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKKyAgICAxMjQsIDEyNCwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyNCwgMTI0LCAxMjQsIDEyNCwgCisgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAwLCAwLCAxMjQsIDEyNCwgMTI0LCAKKyAgICAxMjQsIDEyNCwgMTI0LCAwLCAwLCAxNiwgMTIzLCAxNiwgMTIzLCAxNiwgMTIzLCAxNiwgMTIzLCAwLCAxMjQsIDAsIDEyNCwgCisgICAgMCwgMTI0LCAwLCAxMjQsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjQsIDEyNCwgMTI0LCAKKyAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI1LCAxMjUsIDEyNiwgMTI2LCAxMjYsIDEyNiwgMTI3LCAxMjcsIDEyOCwgCisgICAgMTI4LCAxMjksIDEyOSwgMTMwLCAxMzAsIDAsIDAsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgCisgICAgMTIzLCAxMjMsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMjMsIDEyMywgMTIzLCAxMjMsIAorICAgIDEyMywgMTIzLCAxMjMsIDEyMywgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEyMywgMTIzLCAxNiwgCisgICAgMTMyLCAxNiwgMCwgMTYsIDE2LCAxMjQsIDEyNCwgMTMzLCAxMzMsIDEzNCwgMSwgMTM1LCAxLCAxLCAxLCAxNiwgMTMyLCAKKyAgICAxNiwgMCwgMTYsIDE2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNCwgMSwgMSwgMSwgMTIzLCAxMjMsIDE2LCAxNiwgMCwgMCwgCisgICAgMTYsIDE2LCAxMjQsIDEyNCwgMTM3LCAxMzcsIDAsIDEsIDEsIDEsIDEyMywgMTIzLCAxNiwgMTYsIDE2LCAxMDMsIDE2LCAKKyAgICAxNiwgMTI0LCAxMjQsIDEzOCwgMTM4LCAxMDYsIDEsIDEsIDEsIDAsIDAsIDE2LCAxMzIsIDE2LCAwLCAxNiwgMTYsIDEzOSwgCisgICAgMTM5LCAxNDAsIDE0MCwgMTM0LCAxLCAxLCAwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAzLCAzLCAxLCAxLCAxLCAxLCAxLCAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxNDEsIDQ3LCAwLCAwLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxLCAxLCAxLCAxLCAxLCA0NywgMTQxLCAKKyAgICAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxLCAxLCAxLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAKLSAgICAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAotICAgIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKLSAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCi0gICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTM4LCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMCwgMTcsIDE4LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxLCAxMzgsIDEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDk3LCAxLCAxLCAxLCAxLCA5NywgMSwgMSwgCisgICAgMTYsIDk3LCA5NywgOTcsIDE2LCAxNiwgOTcsIDk3LCA5NywgMTYsIDEsIDk3LCAxLCAxLCAxLCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDEsIDEsIDEsIDEsIDEsIDEsIDk3LCAxLCAxNDIsIDEsIDk3LCAxLCAxNDMsIDE0NCwgOTcsIDk3LCAxLCAxNiwgOTcsIAorICAgIDk3LCAxNDUsIDk3LCAxNiwgNDcsIDQ3LCA0NywgNDcsIDE2LCAxLCAxLCAxNiwgMTYsIDk3LCA5NywgMSwgMSwgMSwgMSwgMSwgCisgICAgOTcsIDE2LCAxNiwgMTYsIDE2LCAxLCAxLCAxLCAxLCAxNDYsIDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCisgICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMjEsIDIxLCAyMSwgMjMsIDI0LCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIAotICAgIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIAotICAgIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIAotICAgIDEsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgCi0gICAgMTE0LCAxMTUsIDEsIDIwLCAxNywgMTgsIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDIwLCAxNywgMTgsIAotICAgIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAxNywgMTgsIDExMywgCisgICAgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjAsIAorICAgIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMCwgMTcsIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgCisgICAgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIDE0OSwgMTQ5LCAxNDksIAorICAgIDE0OSwgMTQ5LCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAKKyAgICAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgMTUwLCAxNTAsIDE1MCwgCisgICAgMTQxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgCisgICAgMTE2LCAxMTcsIDExOCwgMjEsIDE0MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgCisgICAgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMSwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgMTE2LCAKKyAgICAxMTcsIDExOCwgMjEsIDIwLCAxNywgMTgsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDIxLCAyMCwgMTcsIDE4LCAKKyAgICAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAyMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMCwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCkBAIC04NjIsMzk4ICsxMTE4LDU3MyBAQAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAKLSAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgCi0gICAgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAKLSAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMCwgMjIsIDIzLCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMjIsIDIzLCAyMiwgCi0gICAgMjMsIDIyLCAyMywgMTUzLCAxNTQsIDE1NSwgMCwgMTYsIDIyLCAyMywgMTYsIDIyLCAyMywgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgNDYsIDAsIDAsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIAotICAgIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAxNiwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTU2LCAxNTYsIAotICAgIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAKLSAgICAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgCi0gICAgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAKKyAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCisgICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIAorICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDAsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKKyAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgCisgICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAorICAgIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAwLCAKKyAgICAyMywgMjQsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAxNTYsIDE1NywgMTU4LCAKKyAgICAxNTksIDE2LCAyMywgMjQsIDE2LCAyMywgMjQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDQ3LCAxNjAsIDE2MCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDE2LCAxLCAxLCAxLCAxLCAxLCAxLCAyMywgMjQsIDIzLCAyNCwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMjEsIDEsIDEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCisgICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIAorICAgIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKKyAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCA0NywgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMiwgMSwgMSwgMSwgMSwgNDcsIDQ3LCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAyMSwgMjEsIAorICAgIDIxLCA0NywgNDcsIDEsIDEsIDEsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgMCwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAyLCAxLCAxLCAxLCAxLCA0NiwgNDYsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMSwgMSwgMSwgMSwgMSwgNDYsIDQ2LCAxLCAxLCAxLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAxLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTYyLCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgMTYyLCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDE2MiwgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDE2MiwgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCAxNjIsIAorICAgIDE2MiwgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTYyLCAxNjIsIDE2MiwgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAxNjIsIDE2MiwgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQ3LCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMsIDI0LCAKKyAgICAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAKKyAgICAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAwLCAwLCAyMywgMjQsIDIzLCAyNCwgMjMsIAorICAgIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCA0NywgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgCisgICAgMSwgMSwgNDcsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAKKyAgICAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAxNiwgMTYsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAKKyAgICAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgNDcsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMjMsIDI0LCAyMywgMjQsIDE2MywgMjMsIDI0LCAyMywgMjQsIDIzLCAyNCwgMjMsIDI0LCAyMywgCisgICAgMjQsIDQ3LCAxLCAxLCAyMywgMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCAxLCA0NywgNDcsIDQ3LCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgCisgICAgMTEsIDEyLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgNDcsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMCwgNDcsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMSwgMSwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDEsIDEsIDEsIAorICAgIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMSwgNDcsIDEsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCAxLCAxLCAxLCA0NywgNDcsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMSwgMSwgNDcsIDEsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAorICAgIDAsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxNjIsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAwLCAwLCAwLCAwLCAwLCA0NywgMSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMSwgMSwgMCwgMCwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIAorICAgIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDEsIDEsIDEsIDEsIDEsIDEsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCisgICAgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgCisgICAgMTUsIDE1LCAxNSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIAorICAgIDQ3LCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgCisgICAgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgMCwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMjEsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0NiwgCi0gICAgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMCwgMCwgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgNDYsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIAotICAgIDEsIDEsIDQ2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgCi0gICAgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIAorICAgIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAKKyAgICAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NSwgCisgICAgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIAorICAgIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAKKyAgICAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMTYsIDE2LCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAKLSAgICAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDQ2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDIyLCAyMywgMjIsIDIzLCAxNTcsIDIyLCAyMywgMjIsIDIzLCAyMiwgMjMsIDIyLCAyMywgMjIsIDIzLCA0NiwgCi0gICAgMSwgMSwgMjIsIDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDAsIDAsIDAsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAKLSAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDEsIDEsIDEsIDAsIAorICAgIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAyMCwgCisgICAgMTcsIDE4LCAxMTMsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDIxLCAyMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCA0LCA1LCAKLSAgICA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDAsIDEsIDEsIDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMSwgMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAorICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDEsIDEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCisgICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NiwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAwLCAKLSAgICA0NiwgNDYsIDAsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgCi0gICAgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAxLCAwLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAKLSAgICAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIAotICAgIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMCwgMCwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgMCwgNDYsIDQ2LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDEsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgCi0gICAgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIAotICAgIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTgsIDE1OCwgMTU4LCAKLSAgICAxNTgsIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgCi0gICAgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIAotICAgIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDQ2LCAwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCA0NiwgMCwgMCwgMCwgNDYsIDAsIDAsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMSwgMSwgCi0gICAgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAwLCAwLCAwLCAwLCAwLCAxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NiwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgNDYsIDQ2LCA0NiwgNDYsIDAsIDQ2LCAKLSAgICA0NiwgNDYsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDEsIDIwLCAxNywgMTgsIDExMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCkBAIC0xMjYxLDE0MyArMTY5MiwxOTMgQEAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCAwLCA5NCwgOTQsIDAsIDAsIDk0LCAwLCAwLCA5NCwgOTQsIDAsIDAsIAotICAgIDk0LCA5NCwgOTQsIDk0LCAwLCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIDE2LCAwLCAxNiwgCi0gICAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCAKLSAgICA5NCwgMCwgOTQsIDk0LCA5NCwgOTQsIDAsIDAsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCAwLCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgMCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAwLCA5NCwgMCwgMCwgMCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAwLCAwLCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxLCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAKLSAgICA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDEsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgCi0gICAgOTQsIDk0LCA5NCwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIAotICAgIDk0LCA5NCwgOTQsIDk0LCA5NCwgOTQsIDk0LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMSwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgOTQsIDE2LCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNCwgNSwgNiwgCi0gICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCA0LCA1LCA2LCA3LCA4LCAKLSAgICA5LCAxMCwgMTEsIDEyLCAxMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCA5NywgMCwgOTcsIDk3LCAwLCAwLCA5NywgMCwgMCwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMCwgMTYsIDAsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIDAsIDk3LCA5NywgCisgICAgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMCwgMCwgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKKyAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAorICAgIDE2LCAxNiwgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCisgICAgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAorICAgIDk3LCA5NywgMSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDEsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDk3LCAKKyAgICAxNiwgMCwgMCwgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAorICAgIDEzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAorICAgIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDEsIDE0MSwgMjAsIDE3LCAxOCwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgCisgICAgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTYyLCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MiwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNjIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCkBAIC0xNDA1LDIwICsxODg2LDE0NTIgQEAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAwLCAwLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAKIH07CiAKKy8qIFJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgYXMgZG91YmxlIGZvciBVbmljb2RlIGNoYXJhY3RlcnMKKyAqIGhhdmluZyB0aGlzIHByb3BlcnR5LCAtMS4wIG90aGVyd2lzZS4KKyAqLworZG91YmxlIF9QeVVuaWNvZGVfVG9OdW1lcmljKFB5X1VOSUNPREUgY2gpCit7CisgICAgc3dpdGNoIChjaCkgeworICAgIGNhc2UgMHgwRjMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgLTEuMC8yLjA7CisgICAgY2FzZSAweDAwMzA6CisgICAgY2FzZSAweDA2NjA6CisgICAgY2FzZSAweDA2RjA6CisgICAgY2FzZSAweDA3QzA6CisgICAgY2FzZSAweDA5NjY6CisgICAgY2FzZSAweDA5RTY6CisgICAgY2FzZSAweDBBNjY6CisgICAgY2FzZSAweDBBRTY6CisgICAgY2FzZSAweDBCNjY6CisgICAgY2FzZSAweDBCRTY6CisgICAgY2FzZSAweDBDNjY6CisgICAgY2FzZSAweDBDNzg6CisgICAgY2FzZSAweDBDRTY6CisgICAgY2FzZSAweDBENjY6CisgICAgY2FzZSAweDBFNTA6CisgICAgY2FzZSAweDBFRDA6CisgICAgY2FzZSAweDBGMjA6CisgICAgY2FzZSAweDEwNDA6CisgICAgY2FzZSAweDEwOTA6CisgICAgY2FzZSAweDE3RTA6CisgICAgY2FzZSAweDE3RjA6CisgICAgY2FzZSAweDE4MTA6CisgICAgY2FzZSAweDE5NDY6CisgICAgY2FzZSAweDE5RDA6CisgICAgY2FzZSAweDFBODA6CisgICAgY2FzZSAweDFBOTA6CisgICAgY2FzZSAweDFCNTA6CisgICAgY2FzZSAweDFCQjA6CisgICAgY2FzZSAweDFDNDA6CisgICAgY2FzZSAweDFDNTA6CisgICAgY2FzZSAweDIwNzA6CisgICAgY2FzZSAweDIwODA6CisgICAgY2FzZSAweDIxODk6CisgICAgY2FzZSAweDI0RUE6CisgICAgY2FzZSAweDI0RkY6CisgICAgY2FzZSAweDMwMDc6CisgICAgY2FzZSAweDk2RjY6CisgICAgY2FzZSAweEE2MjA6CisgICAgY2FzZSAweEE2RUY6CisgICAgY2FzZSAweEE4RDA6CisgICAgY2FzZSAweEE5MDA6CisgICAgY2FzZSAweEE5RDA6CisgICAgY2FzZSAweEFBNTA6CisgICAgY2FzZSAweEFCRjA6CisgICAgY2FzZSAweEY5QjI6CisgICAgY2FzZSAweEZGMTA6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMThBOgorICAgIGNhc2UgMHgxMDRBMDoKKyAgICBjYXNlIDB4MUQ3Q0U6CisgICAgY2FzZSAweDFEN0Q4OgorICAgIGNhc2UgMHgxRDdFMjoKKyAgICBjYXNlIDB4MUQ3RUM6CisgICAgY2FzZSAweDFEN0Y2OgorICAgIGNhc2UgMHgxRjEwMDoKKyAgICBjYXNlIDB4MUYxMDE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDAuMDsKKyAgICBjYXNlIDB4MDAzMToKKyAgICBjYXNlIDB4MDBCOToKKyAgICBjYXNlIDB4MDY2MToKKyAgICBjYXNlIDB4MDZGMToKKyAgICBjYXNlIDB4MDdDMToKKyAgICBjYXNlIDB4MDk2NzoKKyAgICBjYXNlIDB4MDlFNzoKKyAgICBjYXNlIDB4MEE2NzoKKyAgICBjYXNlIDB4MEFFNzoKKyAgICBjYXNlIDB4MEI2NzoKKyAgICBjYXNlIDB4MEJFNzoKKyAgICBjYXNlIDB4MEM2NzoKKyAgICBjYXNlIDB4MEM3OToKKyAgICBjYXNlIDB4MEM3QzoKKyAgICBjYXNlIDB4MENFNzoKKyAgICBjYXNlIDB4MEQ2NzoKKyAgICBjYXNlIDB4MEU1MToKKyAgICBjYXNlIDB4MEVEMToKKyAgICBjYXNlIDB4MEYyMToKKyAgICBjYXNlIDB4MTA0MToKKyAgICBjYXNlIDB4MTA5MToKKyAgICBjYXNlIDB4MTM2OToKKyAgICBjYXNlIDB4MTdFMToKKyAgICBjYXNlIDB4MTdGMToKKyAgICBjYXNlIDB4MTgxMToKKyAgICBjYXNlIDB4MTk0NzoKKyAgICBjYXNlIDB4MTlEMToKKyAgICBjYXNlIDB4MTlEQToKKyAgICBjYXNlIDB4MUE4MToKKyAgICBjYXNlIDB4MUE5MToKKyAgICBjYXNlIDB4MUI1MToKKyAgICBjYXNlIDB4MUJCMToKKyAgICBjYXNlIDB4MUM0MToKKyAgICBjYXNlIDB4MUM1MToKKyAgICBjYXNlIDB4MjA4MToKKyAgICBjYXNlIDB4MjE1RjoKKyAgICBjYXNlIDB4MjE2MDoKKyAgICBjYXNlIDB4MjE3MDoKKyAgICBjYXNlIDB4MjQ2MDoKKyAgICBjYXNlIDB4MjQ3NDoKKyAgICBjYXNlIDB4MjQ4ODoKKyAgICBjYXNlIDB4MjRGNToKKyAgICBjYXNlIDB4Mjc3NjoKKyAgICBjYXNlIDB4Mjc4MDoKKyAgICBjYXNlIDB4Mjc4QToKKyAgICBjYXNlIDB4MzAyMToKKyAgICBjYXNlIDB4MzE5MjoKKyAgICBjYXNlIDB4MzIyMDoKKyAgICBjYXNlIDB4MzI4MDoKKyAgICBjYXNlIDB4NEUwMDoKKyAgICBjYXNlIDB4NThGMToKKyAgICBjYXNlIDB4NThGOToKKyAgICBjYXNlIDB4NUU3QToKKyAgICBjYXNlIDB4NUYwQzoKKyAgICBjYXNlIDB4QTYyMToKKyAgICBjYXNlIDB4QTZFNjoKKyAgICBjYXNlIDB4QThEMToKKyAgICBjYXNlIDB4QTkwMToKKyAgICBjYXNlIDB4QTlEMToKKyAgICBjYXNlIDB4QUE1MToKKyAgICBjYXNlIDB4QUJGMToKKyAgICBjYXNlIDB4RkYxMToKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMDc6CisgICAgY2FzZSAweDEwMTQyOgorICAgIGNhc2UgMHgxMDE1ODoKKyAgICBjYXNlIDB4MTAxNTk6CisgICAgY2FzZSAweDEwMTVBOgorICAgIGNhc2UgMHgxMDMyMDoKKyAgICBjYXNlIDB4MTAzRDE6CisgICAgY2FzZSAweDEwNEExOgorICAgIGNhc2UgMHgxMDg1ODoKKyAgICBjYXNlIDB4MTA5MTY6CisgICAgY2FzZSAweDEwQTQwOgorICAgIGNhc2UgMHgxMEE3RDoKKyAgICBjYXNlIDB4MTBCNTg6CisgICAgY2FzZSAweDEwQjc4OgorICAgIGNhc2UgMHgxMEU2MDoKKyAgICBjYXNlIDB4MTI0MTU6CisgICAgY2FzZSAweDEyNDFFOgorICAgIGNhc2UgMHgxMjQyQzoKKyAgICBjYXNlIDB4MTI0MzQ6CisgICAgY2FzZSAweDEyNDRGOgorICAgIGNhc2UgMHgxMjQ1ODoKKyAgICBjYXNlIDB4MUQzNjA6CisgICAgY2FzZSAweDFEN0NGOgorICAgIGNhc2UgMHgxRDdEOToKKyAgICBjYXNlIDB4MUQ3RTM6CisgICAgY2FzZSAweDFEN0VEOgorICAgIGNhc2UgMHgxRDdGNzoKKyAgICBjYXNlIDB4MUYxMDI6CisgICAgY2FzZSAweDIwOTJBOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjA7CisgICAgY2FzZSAweDIxNTI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMTAuMDsKKyAgICBjYXNlIDB4MDlGNDoKKyAgICBjYXNlIDB4QTgzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC8xNi4wOworICAgIGNhc2UgMHgwMEJEOgorICAgIGNhc2UgMHgwRDc0OgorICAgIGNhc2UgMHgwRjJBOgorICAgIGNhc2UgMHgyQ0ZEOgorICAgIGNhc2UgMHhBODMxOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDE0MToKKyAgICBjYXNlIDB4MTAxNzU6CisgICAgY2FzZSAweDEwMTc2OgorICAgIGNhc2UgMHgxMEU3QjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzIuMDsKKyAgICBjYXNlIDB4MjE1MzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTBFN0Q6CisgICAgY2FzZSAweDEyNDVBOgorICAgIGNhc2UgMHgxMjQ1RDoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzMuMDsKKyAgICBjYXNlIDB4MDBCQzoKKyAgICBjYXNlIDB4MDlGNzoKKyAgICBjYXNlIDB4MEQ3MzoKKyAgICBjYXNlIDB4QTgzMDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxNDA6CisgICAgY2FzZSAweDEwRTdDOgorICAgIGNhc2UgMHgxMjQ2MDoKKyAgICBjYXNlIDB4MTI0NjI6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC80LjA7CisgICAgY2FzZSAweDIxNTU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvNS4wOworICAgIGNhc2UgMHgyMTU5OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMjQ2MToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzYuMDsKKyAgICBjYXNlIDB4MjE1MDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC83LjA7CisgICAgY2FzZSAweDA5RjU6CisgICAgY2FzZSAweDIxNUI6CisgICAgY2FzZSAweEE4MzQ6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEyNDVGOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvOC4wOworICAgIGNhc2UgMHgyMTUxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzkuMDsKKyAgICBjYXNlIDB4MEJGMDoKKyAgICBjYXNlIDB4MEQ3MDoKKyAgICBjYXNlIDB4MTM3MjoKKyAgICBjYXNlIDB4MjE2OToKKyAgICBjYXNlIDB4MjE3OToKKyAgICBjYXNlIDB4MjQ2OToKKyAgICBjYXNlIDB4MjQ3RDoKKyAgICBjYXNlIDB4MjQ5MToKKyAgICBjYXNlIDB4MjRGRToKKyAgICBjYXNlIDB4Mjc3RjoKKyAgICBjYXNlIDB4Mjc4OToKKyAgICBjYXNlIDB4Mjc5MzoKKyAgICBjYXNlIDB4MzAzODoKKyAgICBjYXNlIDB4MzIyOToKKyAgICBjYXNlIDB4MzI4OToKKyAgICBjYXNlIDB4NEVDMDoKKyAgICBjYXNlIDB4NTM0MToKKyAgICBjYXNlIDB4NjJGRToKKyAgICBjYXNlIDB4Rjk3MzoKKyAgICBjYXNlIDB4RjlGRDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTA6CisgICAgY2FzZSAweDEwMTQ5OgorICAgIGNhc2UgMHgxMDE1MDoKKyAgICBjYXNlIDB4MTAxNTc6CisgICAgY2FzZSAweDEwMTYwOgorICAgIGNhc2UgMHgxMDE2MToKKyAgICBjYXNlIDB4MTAxNjI6CisgICAgY2FzZSAweDEwMTYzOgorICAgIGNhc2UgMHgxMDE2NDoKKyAgICBjYXNlIDB4MTAzMjI6CisgICAgY2FzZSAweDEwM0QzOgorICAgIGNhc2UgMHgxMDg1QjoKKyAgICBjYXNlIDB4MTA5MTc6CisgICAgY2FzZSAweDEwQTQ0OgorICAgIGNhc2UgMHgxMEI1QzoKKyAgICBjYXNlIDB4MTBCN0M6CisgICAgY2FzZSAweDEwRTY5OgorICAgIGNhc2UgMHgxRDM2OToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAuMDsKKyAgICBjYXNlIDB4MEJGMToKKyAgICBjYXNlIDB4MEQ3MToKKyAgICBjYXNlIDB4MTM3QjoKKyAgICBjYXNlIDB4MjE2RDoKKyAgICBjYXNlIDB4MjE3RDoKKyAgICBjYXNlIDB4NEY3MDoKKyAgICBjYXNlIDB4NzY3RToKKyAgICBjYXNlIDB4OTY0QzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTk6CisgICAgY2FzZSAweDEwMTRCOgorICAgIGNhc2UgMHgxMDE1MjoKKyAgICBjYXNlIDB4MTAxNkE6CisgICAgY2FzZSAweDEwM0Q1OgorICAgIGNhc2UgMHgxMDg1RDoKKyAgICBjYXNlIDB4MTA5MTk6CisgICAgY2FzZSAweDEwQTQ2OgorICAgIGNhc2UgMHgxMEI1RToKKyAgICBjYXNlIDB4MTBCN0U6CisgICAgY2FzZSAweDEwRTcyOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAuMDsKKyAgICBjYXNlIDB4MEJGMjoKKyAgICBjYXNlIDB4MEQ3MjoKKyAgICBjYXNlIDB4MjE2RjoKKyAgICBjYXNlIDB4MjE3RjoKKyAgICBjYXNlIDB4MjE4MDoKKyAgICBjYXNlIDB4NEVERjoKKyAgICBjYXNlIDB4NTM0MzoKKyAgICBjYXNlIDB4OTYyMToKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjI6CisgICAgY2FzZSAweDEwMTREOgorICAgIGNhc2UgMHgxMDE1NDoKKyAgICBjYXNlIDB4MTAxNzE6CisgICAgY2FzZSAweDEwODVFOgorICAgIGNhc2UgMHgxMEE0NzoKKyAgICBjYXNlIDB4MTBCNUY6CisgICAgY2FzZSAweDEwQjdGOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwLjA7CisgICAgY2FzZSAweDEzN0M6CisgICAgY2FzZSAweDIxODI6CisgICAgY2FzZSAweDRFMDc6CisgICAgY2FzZSAweDg0MkM6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTJCOgorICAgIGNhc2UgMHgxMDE1NToKKyAgICBjYXNlIDB4MTA4NUY6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAwLjA7CisgICAgY2FzZSAweDIxODg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAuMDsKKyAgICBjYXNlIDB4NEVCRjoKKyAgICBjYXNlIDB4NTEwNDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAwMDAwMC4wOworICAgIGNhc2UgMHg1MTQ2OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAwMDAwMDAwMC4wOworICAgIGNhc2UgMHgyMTZBOgorICAgIGNhc2UgMHgyMTdBOgorICAgIGNhc2UgMHgyNDZBOgorICAgIGNhc2UgMHgyNDdFOgorICAgIGNhc2UgMHgyNDkyOgorICAgIGNhc2UgMHgyNEVCOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTEuMDsKKyAgICBjYXNlIDB4MEYyRjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDExLjAvMi4wOworICAgIGNhc2UgMHgyMTZCOgorICAgIGNhc2UgMHgyMTdCOgorICAgIGNhc2UgMHgyNDZCOgorICAgIGNhc2UgMHgyNDdGOgorICAgIGNhc2UgMHgyNDkzOgorICAgIGNhc2UgMHgyNEVDOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTIuMDsKKyAgICBjYXNlIDB4MjQ2QzoKKyAgICBjYXNlIDB4MjQ4MDoKKyAgICBjYXNlIDB4MjQ5NDoKKyAgICBjYXNlIDB4MjRFRDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEzLjA7CisgICAgY2FzZSAweDBGMzA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMy4wLzIuMDsKKyAgICBjYXNlIDB4MjQ2RDoKKyAgICBjYXNlIDB4MjQ4MToKKyAgICBjYXNlIDB4MjQ5NToKKyAgICBjYXNlIDB4MjRFRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE0LjA7CisgICAgY2FzZSAweDI0NkU6CisgICAgY2FzZSAweDI0ODI6CisgICAgY2FzZSAweDI0OTY6CisgICAgY2FzZSAweDI0RUY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNS4wOworICAgIGNhc2UgMHgwRjMxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTUuMC8yLjA7CisgICAgY2FzZSAweDA5Rjk6CisgICAgY2FzZSAweDI0NkY6CisgICAgY2FzZSAweDI0ODM6CisgICAgY2FzZSAweDI0OTc6CisgICAgY2FzZSAweDI0RjA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNi4wOworICAgIGNhc2UgMHgxNkVFOgorICAgIGNhc2UgMHgyNDcwOgorICAgIGNhc2UgMHgyNDg0OgorICAgIGNhc2UgMHgyNDk4OgorICAgIGNhc2UgMHgyNEYxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTcuMDsKKyAgICBjYXNlIDB4MEYzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE3LjAvMi4wOworICAgIGNhc2UgMHgxNkVGOgorICAgIGNhc2UgMHgyNDcxOgorICAgIGNhc2UgMHgyNDg1OgorICAgIGNhc2UgMHgyNDk5OgorICAgIGNhc2UgMHgyNEYyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTguMDsKKyAgICBjYXNlIDB4MTZGMDoKKyAgICBjYXNlIDB4MjQ3MjoKKyAgICBjYXNlIDB4MjQ4NjoKKyAgICBjYXNlIDB4MjQ5QToKKyAgICBjYXNlIDB4MjRGMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE5LjA7CisgICAgY2FzZSAweDAwMzI6CisgICAgY2FzZSAweDAwQjI6CisgICAgY2FzZSAweDA2NjI6CisgICAgY2FzZSAweDA2RjI6CisgICAgY2FzZSAweDA3QzI6CisgICAgY2FzZSAweDA5Njg6CisgICAgY2FzZSAweDA5RTg6CisgICAgY2FzZSAweDBBNjg6CisgICAgY2FzZSAweDBBRTg6CisgICAgY2FzZSAweDBCNjg6CisgICAgY2FzZSAweDBCRTg6CisgICAgY2FzZSAweDBDNjg6CisgICAgY2FzZSAweDBDN0E6CisgICAgY2FzZSAweDBDN0Q6CisgICAgY2FzZSAweDBDRTg6CisgICAgY2FzZSAweDBENjg6CisgICAgY2FzZSAweDBFNTI6CisgICAgY2FzZSAweDBFRDI6CisgICAgY2FzZSAweDBGMjI6CisgICAgY2FzZSAweDEwNDI6CisgICAgY2FzZSAweDEwOTI6CisgICAgY2FzZSAweDEzNkE6CisgICAgY2FzZSAweDE3RTI6CisgICAgY2FzZSAweDE3RjI6CisgICAgY2FzZSAweDE4MTI6CisgICAgY2FzZSAweDE5NDg6CisgICAgY2FzZSAweDE5RDI6CisgICAgY2FzZSAweDFBODI6CisgICAgY2FzZSAweDFBOTI6CisgICAgY2FzZSAweDFCNTI6CisgICAgY2FzZSAweDFCQjI6CisgICAgY2FzZSAweDFDNDI6CisgICAgY2FzZSAweDFDNTI6CisgICAgY2FzZSAweDIwODI6CisgICAgY2FzZSAweDIxNjE6CisgICAgY2FzZSAweDIxNzE6CisgICAgY2FzZSAweDI0NjE6CisgICAgY2FzZSAweDI0NzU6CisgICAgY2FzZSAweDI0ODk6CisgICAgY2FzZSAweDI0RjY6CisgICAgY2FzZSAweDI3Nzc6CisgICAgY2FzZSAweDI3ODE6CisgICAgY2FzZSAweDI3OEI6CisgICAgY2FzZSAweDMwMjI6CisgICAgY2FzZSAweDMxOTM6CisgICAgY2FzZSAweDMyMjE6CisgICAgY2FzZSAweDMyODE6CisgICAgY2FzZSAweDM0ODM6CisgICAgY2FzZSAweDRFOEM6CisgICAgY2FzZSAweDUxNjk6CisgICAgY2FzZSAweDVGMEQ6CisgICAgY2FzZSAweDVGMTA6CisgICAgY2FzZSAweDhDQUU6CisgICAgY2FzZSAweDhDQjM6CisgICAgY2FzZSAweDhEMzA6CisgICAgY2FzZSAweEE2MjI6CisgICAgY2FzZSAweEE2RTc6CisgICAgY2FzZSAweEE4RDI6CisgICAgY2FzZSAweEE5MDI6CisgICAgY2FzZSAweEE5RDI6CisgICAgY2FzZSAweEFBNTI6CisgICAgY2FzZSAweEFCRjI6CisgICAgY2FzZSAweEY5Nzg6CisgICAgY2FzZSAweEZGMTI6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTA4OgorICAgIGNhc2UgMHgxMDE1QjoKKyAgICBjYXNlIDB4MTAxNUM6CisgICAgY2FzZSAweDEwMTVEOgorICAgIGNhc2UgMHgxMDE1RToKKyAgICBjYXNlIDB4MTAzRDI6CisgICAgY2FzZSAweDEwNEEyOgorICAgIGNhc2UgMHgxMDg1OToKKyAgICBjYXNlIDB4MTA5MUE6CisgICAgY2FzZSAweDEwQTQxOgorICAgIGNhc2UgMHgxMEI1OToKKyAgICBjYXNlIDB4MTBCNzk6CisgICAgY2FzZSAweDEwRTYxOgorICAgIGNhc2UgMHgxMjQwMDoKKyAgICBjYXNlIDB4MTI0MTY6CisgICAgY2FzZSAweDEyNDFGOgorICAgIGNhc2UgMHgxMjQyMzoKKyAgICBjYXNlIDB4MTI0MkQ6CisgICAgY2FzZSAweDEyNDM1OgorICAgIGNhc2UgMHgxMjQ0QToKKyAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU5OgorICAgIGNhc2UgMHgxRDM2MToKKyAgICBjYXNlIDB4MUQ3RDA6CisgICAgY2FzZSAweDFEN0RBOgorICAgIGNhc2UgMHgxRDdFNDoKKyAgICBjYXNlIDB4MUQ3RUU6CisgICAgY2FzZSAweDFEN0Y4OgorICAgIGNhc2UgMHgxRjEwMzoKKyAgICBjYXNlIDB4MjIzOTA6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIuMDsKKyAgICBjYXNlIDB4MjE1NDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxNzc6CisgICAgY2FzZSAweDEwRTdFOgorICAgIGNhc2UgMHgxMjQ1QjoKKyAgICBjYXNlIDB4MTI0NUU6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIuMC8zLjA7CisgICAgY2FzZSAweDIxNTY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyLjAvNS4wOworICAgIGNhc2UgMHgxMzczOgorICAgIGNhc2UgMHgyNDczOgorICAgIGNhc2UgMHgyNDg3OgorICAgIGNhc2UgMHgyNDlCOgorICAgIGNhc2UgMHgyNEY0OgorICAgIGNhc2UgMHgzMDM5OgorICAgIGNhc2UgMHg1MzQ0OgorICAgIGNhc2UgMHg1RUZGOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExMToKKyAgICBjYXNlIDB4MTAzRDQ6CisgICAgY2FzZSAweDEwODVDOgorICAgIGNhc2UgMHgxMDkxODoKKyAgICBjYXNlIDB4MTBBNDU6CisgICAgY2FzZSAweDEwQjVEOgorICAgIGNhc2UgMHgxMEI3RDoKKyAgICBjYXNlIDB4MTBFNkE6CisgICAgY2FzZSAweDFEMzZBOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExQToKKyAgICBjYXNlIDB4MTBFNzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyQzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MzI1MToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxLjA7CisgICAgY2FzZSAweDMyNTI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMi4wOworICAgIGNhc2UgMHgzMjUzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjMuMDsKKyAgICBjYXNlIDB4MzI1NDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI0LjA7CisgICAgY2FzZSAweDMyNTU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyNS4wOworICAgIGNhc2UgMHgzMjU2OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjYuMDsKKyAgICBjYXNlIDB4MzI1NzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI3LjA7CisgICAgY2FzZSAweDMyNTg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyOC4wOworICAgIGNhc2UgMHgzMjU5OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjkuMDsKKyAgICBjYXNlIDB4MDAzMzoKKyAgICBjYXNlIDB4MDBCMzoKKyAgICBjYXNlIDB4MDY2MzoKKyAgICBjYXNlIDB4MDZGMzoKKyAgICBjYXNlIDB4MDdDMzoKKyAgICBjYXNlIDB4MDk2OToKKyAgICBjYXNlIDB4MDlFOToKKyAgICBjYXNlIDB4MEE2OToKKyAgICBjYXNlIDB4MEFFOToKKyAgICBjYXNlIDB4MEI2OToKKyAgICBjYXNlIDB4MEJFOToKKyAgICBjYXNlIDB4MEM2OToKKyAgICBjYXNlIDB4MEM3QjoKKyAgICBjYXNlIDB4MEM3RToKKyAgICBjYXNlIDB4MENFOToKKyAgICBjYXNlIDB4MEQ2OToKKyAgICBjYXNlIDB4MEU1MzoKKyAgICBjYXNlIDB4MEVEMzoKKyAgICBjYXNlIDB4MEYyMzoKKyAgICBjYXNlIDB4MTA0MzoKKyAgICBjYXNlIDB4MTA5MzoKKyAgICBjYXNlIDB4MTM2QjoKKyAgICBjYXNlIDB4MTdFMzoKKyAgICBjYXNlIDB4MTdGMzoKKyAgICBjYXNlIDB4MTgxMzoKKyAgICBjYXNlIDB4MTk0OToKKyAgICBjYXNlIDB4MTlEMzoKKyAgICBjYXNlIDB4MUE4MzoKKyAgICBjYXNlIDB4MUE5MzoKKyAgICBjYXNlIDB4MUI1MzoKKyAgICBjYXNlIDB4MUJCMzoKKyAgICBjYXNlIDB4MUM0MzoKKyAgICBjYXNlIDB4MUM1MzoKKyAgICBjYXNlIDB4MjA4MzoKKyAgICBjYXNlIDB4MjE2MjoKKyAgICBjYXNlIDB4MjE3MjoKKyAgICBjYXNlIDB4MjQ2MjoKKyAgICBjYXNlIDB4MjQ3NjoKKyAgICBjYXNlIDB4MjQ4QToKKyAgICBjYXNlIDB4MjRGNzoKKyAgICBjYXNlIDB4Mjc3ODoKKyAgICBjYXNlIDB4Mjc4MjoKKyAgICBjYXNlIDB4Mjc4QzoKKyAgICBjYXNlIDB4MzAyMzoKKyAgICBjYXNlIDB4MzE5NDoKKyAgICBjYXNlIDB4MzIyMjoKKyAgICBjYXNlIDB4MzI4MjoKKyAgICBjYXNlIDB4NEUwOToKKyAgICBjYXNlIDB4NEVFODoKKyAgICBjYXNlIDB4NTNDMToKKyAgICBjYXNlIDB4NTNDMjoKKyAgICBjYXNlIDB4NTNDMzoKKyAgICBjYXNlIDB4NTNDNDoKKyAgICBjYXNlIDB4NUYwRToKKyAgICBjYXNlIDB4QTYyMzoKKyAgICBjYXNlIDB4QTZFODoKKyAgICBjYXNlIDB4QThEMzoKKyAgICBjYXNlIDB4QTkwMzoKKyAgICBjYXNlIDB4QTlEMzoKKyAgICBjYXNlIDB4QUE1MzoKKyAgICBjYXNlIDB4QUJGMzoKKyAgICBjYXNlIDB4Rjk2QjoKKyAgICBjYXNlIDB4RkYxMzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMDk6CisgICAgY2FzZSAweDEwNEEzOgorICAgIGNhc2UgMHgxMDg1QToKKyAgICBjYXNlIDB4MTA5MUI6CisgICAgY2FzZSAweDEwQTQyOgorICAgIGNhc2UgMHgxMEI1QToKKyAgICBjYXNlIDB4MTBCN0E6CisgICAgY2FzZSAweDEwRTYyOgorICAgIGNhc2UgMHgxMjQwMToKKyAgICBjYXNlIDB4MTI0MDg6CisgICAgY2FzZSAweDEyNDE3OgorICAgIGNhc2UgMHgxMjQyMDoKKyAgICBjYXNlIDB4MTI0MjQ6CisgICAgY2FzZSAweDEyNDI1OgorICAgIGNhc2UgMHgxMjQyRToKKyAgICBjYXNlIDB4MTI0MkY6CisgICAgY2FzZSAweDEyNDM2OgorICAgIGNhc2UgMHgxMjQzNzoKKyAgICBjYXNlIDB4MTI0M0E6CisgICAgY2FzZSAweDEyNDNCOgorICAgIGNhc2UgMHgxMjQ0QjoKKyAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDFEMzYyOgorICAgIGNhc2UgMHgxRDdEMToKKyAgICBjYXNlIDB4MUQ3REI6CisgICAgY2FzZSAweDFEN0U1OgorICAgIGNhc2UgMHgxRDdFRjoKKyAgICBjYXNlIDB4MUQ3Rjk6CisgICAgY2FzZSAweDFGMTA0OgorICAgIGNhc2UgMHgyMEFGRDoKKyAgICBjYXNlIDB4MjBCMTk6CisgICAgY2FzZSAweDIyOTk4OgorICAgIGNhc2UgMHgyM0IxQjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wOworICAgIGNhc2UgMHgwOUY2OgorICAgIGNhc2UgMHhBODM1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wLzE2LjA7CisgICAgY2FzZSAweDBGMkI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvMi4wOworICAgIGNhc2UgMHgwMEJFOgorICAgIGNhc2UgMHgwOUY4OgorICAgIGNhc2UgMHgwRDc1OgorICAgIGNhc2UgMHhBODMyOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDE3ODoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wLzQuMDsKKyAgICBjYXNlIDB4MjE1NzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMC81LjA7CisgICAgY2FzZSAweDIxNUM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvOC4wOworICAgIGNhc2UgMHgxMzc0OgorICAgIGNhc2UgMHgzMDNBOgorICAgIGNhc2UgMHgzMjVBOgorICAgIGNhc2UgMHg1MzQ1OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExMjoKKyAgICBjYXNlIDB4MTAxNjU6CisgICAgY2FzZSAweDEwRTZCOgorICAgIGNhc2UgMHgxRDM2QjoKKyAgICBjYXNlIDB4MjA5ODM6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwLjA7CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTFCOgorICAgIGNhc2UgMHgxMDE2QjoKKyAgICBjYXNlIDB4MTBFNzQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyNDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyRDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MzI1QjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMxLjA7CisgICAgY2FzZSAweDMyNUM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzMi4wOworICAgIGNhc2UgMHgzMjVEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzMuMDsKKyAgICBjYXNlIDB4MzI1RToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM0LjA7CisgICAgY2FzZSAweDMyNUY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzNS4wOworICAgIGNhc2UgMHgzMkIxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzYuMDsKKyAgICBjYXNlIDB4MzJCMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM3LjA7CisgICAgY2FzZSAweDMyQjM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzOC4wOworICAgIGNhc2UgMHgzMkI0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzkuMDsKKyAgICBjYXNlIDB4MDAzNDoKKyAgICBjYXNlIDB4MDY2NDoKKyAgICBjYXNlIDB4MDZGNDoKKyAgICBjYXNlIDB4MDdDNDoKKyAgICBjYXNlIDB4MDk2QToKKyAgICBjYXNlIDB4MDlFQToKKyAgICBjYXNlIDB4MEE2QToKKyAgICBjYXNlIDB4MEFFQToKKyAgICBjYXNlIDB4MEI2QToKKyAgICBjYXNlIDB4MEJFQToKKyAgICBjYXNlIDB4MEM2QToKKyAgICBjYXNlIDB4MENFQToKKyAgICBjYXNlIDB4MEQ2QToKKyAgICBjYXNlIDB4MEU1NDoKKyAgICBjYXNlIDB4MEVENDoKKyAgICBjYXNlIDB4MEYyNDoKKyAgICBjYXNlIDB4MTA0NDoKKyAgICBjYXNlIDB4MTA5NDoKKyAgICBjYXNlIDB4MTM2QzoKKyAgICBjYXNlIDB4MTdFNDoKKyAgICBjYXNlIDB4MTdGNDoKKyAgICBjYXNlIDB4MTgxNDoKKyAgICBjYXNlIDB4MTk0QToKKyAgICBjYXNlIDB4MTlENDoKKyAgICBjYXNlIDB4MUE4NDoKKyAgICBjYXNlIDB4MUE5NDoKKyAgICBjYXNlIDB4MUI1NDoKKyAgICBjYXNlIDB4MUJCNDoKKyAgICBjYXNlIDB4MUM0NDoKKyAgICBjYXNlIDB4MUM1NDoKKyAgICBjYXNlIDB4MjA3NDoKKyAgICBjYXNlIDB4MjA4NDoKKyAgICBjYXNlIDB4MjE2MzoKKyAgICBjYXNlIDB4MjE3MzoKKyAgICBjYXNlIDB4MjQ2MzoKKyAgICBjYXNlIDB4MjQ3NzoKKyAgICBjYXNlIDB4MjQ4QjoKKyAgICBjYXNlIDB4MjRGODoKKyAgICBjYXNlIDB4Mjc3OToKKyAgICBjYXNlIDB4Mjc4MzoKKyAgICBjYXNlIDB4Mjc4RDoKKyAgICBjYXNlIDB4MzAyNDoKKyAgICBjYXNlIDB4MzE5NToKKyAgICBjYXNlIDB4MzIyMzoKKyAgICBjYXNlIDB4MzI4MzoKKyAgICBjYXNlIDB4NEU5NjoKKyAgICBjYXNlIDB4NTZEQjoKKyAgICBjYXNlIDB4ODA4NjoKKyAgICBjYXNlIDB4QTYyNDoKKyAgICBjYXNlIDB4QTZFOToKKyAgICBjYXNlIDB4QThENDoKKyAgICBjYXNlIDB4QTkwNDoKKyAgICBjYXNlIDB4QTlENDoKKyAgICBjYXNlIDB4QUE1NDoKKyAgICBjYXNlIDB4QUJGNDoKKyAgICBjYXNlIDB4RkYxNDoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEE6CisgICAgY2FzZSAweDEwNEE0OgorICAgIGNhc2UgMHgxMEE0MzoKKyAgICBjYXNlIDB4MTBCNUI6CisgICAgY2FzZSAweDEwQjdCOgorICAgIGNhc2UgMHgxMEU2MzoKKyAgICBjYXNlIDB4MTI0MDI6CisgICAgY2FzZSAweDEyNDA5OgorICAgIGNhc2UgMHgxMjQwRjoKKyAgICBjYXNlIDB4MTI0MTg6CisgICAgY2FzZSAweDEyNDIxOgorICAgIGNhc2UgMHgxMjQyNjoKKyAgICBjYXNlIDB4MTI0MzA6CisgICAgY2FzZSAweDEyNDM4OgorICAgIGNhc2UgMHgxMjQzQzoKKyAgICBjYXNlIDB4MTI0M0Q6CisgICAgY2FzZSAweDEyNDNFOgorICAgIGNhc2UgMHgxMjQzRjoKKyAgICBjYXNlIDB4MTI0NEM6CisgICAgY2FzZSAweDEyNDUyOgorICAgIGNhc2UgMHgxMjQ1MzoKKyAgICBjYXNlIDB4MUQzNjM6CisgICAgY2FzZSAweDFEN0QyOgorICAgIGNhc2UgMHgxRDdEQzoKKyAgICBjYXNlIDB4MUQ3RTY6CisgICAgY2FzZSAweDFEN0YwOgorICAgIGNhc2UgMHgxRDdGQToKKyAgICBjYXNlIDB4MUYxMDU6CisgICAgY2FzZSAweDIwMDY0OgorICAgIGNhc2UgMHgyMDBFMjoKKyAgICBjYXNlIDB4MjYyNkQ6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQuMDsKKyAgICBjYXNlIDB4MjE1ODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQuMC81LjA7CisgICAgY2FzZSAweDEzNzU6CisgICAgY2FzZSAweDMyQjU6CisgICAgY2FzZSAweDUzNEM6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTEzOgorICAgIGNhc2UgMHgxMEU2QzoKKyAgICBjYXNlIDB4MUQzNkM6CisgICAgY2FzZSAweDIwOThDOgorICAgIGNhc2UgMHgyMDk5QzoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAuMDsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMUM6CisgICAgY2FzZSAweDEwRTc1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MDAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMkU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MDAwMC4wOworI2VuZGlmCisgICAgY2FzZSAweDMyQjY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MS4wOworICAgIGNhc2UgMHgzMkI3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDIuMDsKKyAgICBjYXNlIDB4MzJCODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzLjA7CisgICAgY2FzZSAweDMyQjk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0NC4wOworICAgIGNhc2UgMHgzMkJBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDUuMDsKKyAgICBjYXNlIDB4MzJCQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ2LjA7CisgICAgY2FzZSAweDMyQkM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0Ny4wOworICAgIGNhc2UgMHgzMkJEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDguMDsKKyAgICBjYXNlIDB4MzJCRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ5LjA7CisgICAgY2FzZSAweDAwMzU6CisgICAgY2FzZSAweDA2NjU6CisgICAgY2FzZSAweDA2RjU6CisgICAgY2FzZSAweDA3QzU6CisgICAgY2FzZSAweDA5NkI6CisgICAgY2FzZSAweDA5RUI6CisgICAgY2FzZSAweDBBNkI6CisgICAgY2FzZSAweDBBRUI6CisgICAgY2FzZSAweDBCNkI6CisgICAgY2FzZSAweDBCRUI6CisgICAgY2FzZSAweDBDNkI6CisgICAgY2FzZSAweDBDRUI6CisgICAgY2FzZSAweDBENkI6CisgICAgY2FzZSAweDBFNTU6CisgICAgY2FzZSAweDBFRDU6CisgICAgY2FzZSAweDBGMjU6CisgICAgY2FzZSAweDEwNDU6CisgICAgY2FzZSAweDEwOTU6CisgICAgY2FzZSAweDEzNkQ6CisgICAgY2FzZSAweDE3RTU6CisgICAgY2FzZSAweDE3RjU6CisgICAgY2FzZSAweDE4MTU6CisgICAgY2FzZSAweDE5NEI6CisgICAgY2FzZSAweDE5RDU6CisgICAgY2FzZSAweDFBODU6CisgICAgY2FzZSAweDFBOTU6CisgICAgY2FzZSAweDFCNTU6CisgICAgY2FzZSAweDFCQjU6CisgICAgY2FzZSAweDFDNDU6CisgICAgY2FzZSAweDFDNTU6CisgICAgY2FzZSAweDIwNzU6CisgICAgY2FzZSAweDIwODU6CisgICAgY2FzZSAweDIxNjQ6CisgICAgY2FzZSAweDIxNzQ6CisgICAgY2FzZSAweDI0NjQ6CisgICAgY2FzZSAweDI0Nzg6CisgICAgY2FzZSAweDI0OEM6CisgICAgY2FzZSAweDI0Rjk6CisgICAgY2FzZSAweDI3N0E6CisgICAgY2FzZSAweDI3ODQ6CisgICAgY2FzZSAweDI3OEU6CisgICAgY2FzZSAweDMwMjU6CisgICAgY2FzZSAweDMyMjQ6CisgICAgY2FzZSAweDMyODQ6CisgICAgY2FzZSAweDM0MDU6CisgICAgY2FzZSAweDM4MkE6CisgICAgY2FzZSAweDRFOTQ6CisgICAgY2FzZSAweDRGMEQ6CisgICAgY2FzZSAweEE2MjU6CisgICAgY2FzZSAweEE2RUE6CisgICAgY2FzZSAweEE4RDU6CisgICAgY2FzZSAweEE5MDU6CisgICAgY2FzZSAweEE5RDU6CisgICAgY2FzZSAweEFBNTU6CisgICAgY2FzZSAweEFCRjU6CisgICAgY2FzZSAweEZGMTU6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTBCOgorICAgIGNhc2UgMHgxMDE0MzoKKyAgICBjYXNlIDB4MTAxNDg6CisgICAgY2FzZSAweDEwMTRGOgorICAgIGNhc2UgMHgxMDE1RjoKKyAgICBjYXNlIDB4MTAxNzM6CisgICAgY2FzZSAweDEwMzIxOgorICAgIGNhc2UgMHgxMDRBNToKKyAgICBjYXNlIDB4MTBFNjQ6CisgICAgY2FzZSAweDEyNDAzOgorICAgIGNhc2UgMHgxMjQwQToKKyAgICBjYXNlIDB4MTI0MTA6CisgICAgY2FzZSAweDEyNDE5OgorICAgIGNhc2UgMHgxMjQyMjoKKyAgICBjYXNlIDB4MTI0Mjc6CisgICAgY2FzZSAweDEyNDMxOgorICAgIGNhc2UgMHgxMjQzOToKKyAgICBjYXNlIDB4MTI0NEQ6CisgICAgY2FzZSAweDEyNDU0OgorICAgIGNhc2UgMHgxMjQ1NToKKyAgICBjYXNlIDB4MUQzNjQ6CisgICAgY2FzZSAweDFEN0QzOgorICAgIGNhc2UgMHgxRDdERDoKKyAgICBjYXNlIDB4MUQ3RTc6CisgICAgY2FzZSAweDFEN0YxOgorICAgIGNhc2UgMHgxRDdGQjoKKyAgICBjYXNlIDB4MUYxMDY6CisgICAgY2FzZSAweDIwMTIxOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjA7CisgICAgY2FzZSAweDBGMkM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjAvMi4wOworICAgIGNhc2UgMHgyMTVBOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMjQ1QzoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNS4wLzYuMDsKKyAgICBjYXNlIDB4MjE1RDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUuMC84LjA7CisgICAgY2FzZSAweDEzNzY6CisgICAgY2FzZSAweDIxNkM6CisgICAgY2FzZSAweDIxN0M6CisgICAgY2FzZSAweDIxODY6CisgICAgY2FzZSAweDMyQkY6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTE0OgorICAgIGNhc2UgMHgxMDE0NDoKKyAgICBjYXNlIDB4MTAxNEE6CisgICAgY2FzZSAweDEwMTUxOgorICAgIGNhc2UgMHgxMDE2NjoKKyAgICBjYXNlIDB4MTAxNjc6CisgICAgY2FzZSAweDEwMTY4OgorICAgIGNhc2UgMHgxMDE2OToKKyAgICBjYXNlIDB4MTAxNzQ6CisgICAgY2FzZSAweDEwMzIzOgorICAgIGNhc2UgMHgxMEE3RToKKyAgICBjYXNlIDB4MTBFNkQ6CisgICAgY2FzZSAweDFEMzZEOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA1MC4wOworICAgIGNhc2UgMHgyMTZFOgorICAgIGNhc2UgMHgyMTdFOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExRDoKKyAgICBjYXNlIDB4MTAxNDU6CisgICAgY2FzZSAweDEwMTRDOgorICAgIGNhc2UgMHgxMDE1MzoKKyAgICBjYXNlIDB4MTAxNkM6CisgICAgY2FzZSAweDEwMTZEOgorICAgIGNhc2UgMHgxMDE2RToKKyAgICBjYXNlIDB4MTAxNkY6CisgICAgY2FzZSAweDEwMTcwOgorICAgIGNhc2UgMHgxMEU3NjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNTAwLjA7CisgICAgY2FzZSAweDIxODE6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTI2OgorICAgIGNhc2UgMHgxMDE0NjoKKyAgICBjYXNlIDB4MTAxNEU6CisgICAgY2FzZSAweDEwMTcyOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA1MDAwLjA7CisgICAgY2FzZSAweDIxODc6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTJGOgorICAgIGNhc2UgMHgxMDE0NzoKKyAgICBjYXNlIDB4MTAxNTY6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAwLjA7CisgICAgY2FzZSAweDAwMzY6CisgICAgY2FzZSAweDA2NjY6CisgICAgY2FzZSAweDA2RjY6CisgICAgY2FzZSAweDA3QzY6CisgICAgY2FzZSAweDA5NkM6CisgICAgY2FzZSAweDA5RUM6CisgICAgY2FzZSAweDBBNkM6CisgICAgY2FzZSAweDBBRUM6CisgICAgY2FzZSAweDBCNkM6CisgICAgY2FzZSAweDBCRUM6CisgICAgY2FzZSAweDBDNkM6CisgICAgY2FzZSAweDBDRUM6CisgICAgY2FzZSAweDBENkM6CisgICAgY2FzZSAweDBFNTY6CisgICAgY2FzZSAweDBFRDY6CisgICAgY2FzZSAweDBGMjY6CisgICAgY2FzZSAweDEwNDY6CisgICAgY2FzZSAweDEwOTY6CisgICAgY2FzZSAweDEzNkU6CisgICAgY2FzZSAweDE3RTY6CisgICAgY2FzZSAweDE3RjY6CisgICAgY2FzZSAweDE4MTY6CisgICAgY2FzZSAweDE5NEM6CisgICAgY2FzZSAweDE5RDY6CisgICAgY2FzZSAweDFBODY6CisgICAgY2FzZSAweDFBOTY6CisgICAgY2FzZSAweDFCNTY6CisgICAgY2FzZSAweDFCQjY6CisgICAgY2FzZSAweDFDNDY6CisgICAgY2FzZSAweDFDNTY6CisgICAgY2FzZSAweDIwNzY6CisgICAgY2FzZSAweDIwODY6CisgICAgY2FzZSAweDIxNjU6CisgICAgY2FzZSAweDIxNzU6CisgICAgY2FzZSAweDIxODU6CisgICAgY2FzZSAweDI0NjU6CisgICAgY2FzZSAweDI0Nzk6CisgICAgY2FzZSAweDI0OEQ6CisgICAgY2FzZSAweDI0RkE6CisgICAgY2FzZSAweDI3N0I6CisgICAgY2FzZSAweDI3ODU6CisgICAgY2FzZSAweDI3OEY6CisgICAgY2FzZSAweDMwMjY6CisgICAgY2FzZSAweDMyMjU6CisgICAgY2FzZSAweDMyODU6CisgICAgY2FzZSAweDUxNkQ6CisgICAgY2FzZSAweDk2NDY6CisgICAgY2FzZSAweDk2Nzg6CisgICAgY2FzZSAweEE2MjY6CisgICAgY2FzZSAweEE2RUI6CisgICAgY2FzZSAweEE4RDY6CisgICAgY2FzZSAweEE5MDY6CisgICAgY2FzZSAweEE5RDY6CisgICAgY2FzZSAweEFBNTY6CisgICAgY2FzZSAweEFCRjY6CisgICAgY2FzZSAweEY5RDE6CisgICAgY2FzZSAweEY5RDM6CisgICAgY2FzZSAweEZGMTY6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTBDOgorICAgIGNhc2UgMHgxMDRBNjoKKyAgICBjYXNlIDB4MTBFNjU6CisgICAgY2FzZSAweDEyNDA0OgorICAgIGNhc2UgMHgxMjQwQjoKKyAgICBjYXNlIDB4MTI0MTE6CisgICAgY2FzZSAweDEyNDFBOgorICAgIGNhc2UgMHgxMjQyODoKKyAgICBjYXNlIDB4MTI0NDA6CisgICAgY2FzZSAweDEyNDRFOgorICAgIGNhc2UgMHgxRDM2NToKKyAgICBjYXNlIDB4MUQ3RDQ6CisgICAgY2FzZSAweDFEN0RFOgorICAgIGNhc2UgMHgxRDdFODoKKyAgICBjYXNlIDB4MUQ3RjI6CisgICAgY2FzZSAweDFEN0ZDOgorICAgIGNhc2UgMHgxRjEwNzoKKyAgICBjYXNlIDB4MjBBRUE6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDYuMDsKKyAgICBjYXNlIDB4MTM3NzoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTU6CisgICAgY2FzZSAweDEwRTZFOgorICAgIGNhc2UgMHgxRDM2RToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAuMDsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMUU6CisgICAgY2FzZSAweDEwRTc3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMzA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAwMC4wOworI2VuZGlmCisgICAgY2FzZSAweDAwMzc6CisgICAgY2FzZSAweDA2Njc6CisgICAgY2FzZSAweDA2Rjc6CisgICAgY2FzZSAweDA3Qzc6CisgICAgY2FzZSAweDA5NkQ6CisgICAgY2FzZSAweDA5RUQ6CisgICAgY2FzZSAweDBBNkQ6CisgICAgY2FzZSAweDBBRUQ6CisgICAgY2FzZSAweDBCNkQ6CisgICAgY2FzZSAweDBCRUQ6CisgICAgY2FzZSAweDBDNkQ6CisgICAgY2FzZSAweDBDRUQ6CisgICAgY2FzZSAweDBENkQ6CisgICAgY2FzZSAweDBFNTc6CisgICAgY2FzZSAweDBFRDc6CisgICAgY2FzZSAweDBGMjc6CisgICAgY2FzZSAweDEwNDc6CisgICAgY2FzZSAweDEwOTc6CisgICAgY2FzZSAweDEzNkY6CisgICAgY2FzZSAweDE3RTc6CisgICAgY2FzZSAweDE3Rjc6CisgICAgY2FzZSAweDE4MTc6CisgICAgY2FzZSAweDE5NEQ6CisgICAgY2FzZSAweDE5RDc6CisgICAgY2FzZSAweDFBODc6CisgICAgY2FzZSAweDFBOTc6CisgICAgY2FzZSAweDFCNTc6CisgICAgY2FzZSAweDFCQjc6CisgICAgY2FzZSAweDFDNDc6CisgICAgY2FzZSAweDFDNTc6CisgICAgY2FzZSAweDIwNzc6CisgICAgY2FzZSAweDIwODc6CisgICAgY2FzZSAweDIxNjY6CisgICAgY2FzZSAweDIxNzY6CisgICAgY2FzZSAweDI0NjY6CisgICAgY2FzZSAweDI0N0E6CisgICAgY2FzZSAweDI0OEU6CisgICAgY2FzZSAweDI0RkI6CisgICAgY2FzZSAweDI3N0M6CisgICAgY2FzZSAweDI3ODY6CisgICAgY2FzZSAweDI3OTA6CisgICAgY2FzZSAweDMwMjc6CisgICAgY2FzZSAweDMyMjY6CisgICAgY2FzZSAweDMyODY6CisgICAgY2FzZSAweDNCNEQ6CisgICAgY2FzZSAweDRFMDM6CisgICAgY2FzZSAweDY3RDI6CisgICAgY2FzZSAweDZGMDY6CisgICAgY2FzZSAweEE2Mjc6CisgICAgY2FzZSAweEE2RUM6CisgICAgY2FzZSAweEE4RDc6CisgICAgY2FzZSAweEE5MDc6CisgICAgY2FzZSAweEE5RDc6CisgICAgY2FzZSAweEFBNTc6CisgICAgY2FzZSAweEFCRjc6CisgICAgY2FzZSAweEZGMTc6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTBEOgorICAgIGNhc2UgMHgxMDRBNzoKKyAgICBjYXNlIDB4MTBFNjY6CisgICAgY2FzZSAweDEyNDA1OgorICAgIGNhc2UgMHgxMjQwQzoKKyAgICBjYXNlIDB4MTI0MTI6CisgICAgY2FzZSAweDEyNDFCOgorICAgIGNhc2UgMHgxMjQyOToKKyAgICBjYXNlIDB4MTI0NDE6CisgICAgY2FzZSAweDEyNDQyOgorICAgIGNhc2UgMHgxMjQ0MzoKKyAgICBjYXNlIDB4MUQzNjY6CisgICAgY2FzZSAweDFEN0Q1OgorICAgIGNhc2UgMHgxRDdERjoKKyAgICBjYXNlIDB4MUQ3RTk6CisgICAgY2FzZSAweDFEN0YzOgorICAgIGNhc2UgMHgxRDdGRDoKKyAgICBjYXNlIDB4MUYxMDg6CisgICAgY2FzZSAweDIwMDAxOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjA7CisgICAgY2FzZSAweDBGMkQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjAvMi4wOworICAgIGNhc2UgMHgyMTVFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNy4wLzguMDsKKyAgICBjYXNlIDB4MTM3ODoKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMTY6CisgICAgY2FzZSAweDEwRTZGOgorICAgIGNhc2UgMHgxRDM2RjoKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzAuMDsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMUY6CisgICAgY2FzZSAweDEwRTc4OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3MDAwLjA7CisjZW5kaWYKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMzE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3MDAwMC4wOworI2VuZGlmCisgICAgY2FzZSAweDAwMzg6CisgICAgY2FzZSAweDA2Njg6CisgICAgY2FzZSAweDA2Rjg6CisgICAgY2FzZSAweDA3Qzg6CisgICAgY2FzZSAweDA5NkU6CisgICAgY2FzZSAweDA5RUU6CisgICAgY2FzZSAweDBBNkU6CisgICAgY2FzZSAweDBBRUU6CisgICAgY2FzZSAweDBCNkU6CisgICAgY2FzZSAweDBCRUU6CisgICAgY2FzZSAweDBDNkU6CisgICAgY2FzZSAweDBDRUU6CisgICAgY2FzZSAweDBENkU6CisgICAgY2FzZSAweDBFNTg6CisgICAgY2FzZSAweDBFRDg6CisgICAgY2FzZSAweDBGMjg6CisgICAgY2FzZSAweDEwNDg6CisgICAgY2FzZSAweDEwOTg6CisgICAgY2FzZSAweDEzNzA6CisgICAgY2FzZSAweDE3RTg6CisgICAgY2FzZSAweDE3Rjg6CisgICAgY2FzZSAweDE4MTg6CisgICAgY2FzZSAweDE5NEU6CisgICAgY2FzZSAweDE5RDg6CisgICAgY2FzZSAweDFBODg6CisgICAgY2FzZSAweDFBOTg6CisgICAgY2FzZSAweDFCNTg6CisgICAgY2FzZSAweDFCQjg6CisgICAgY2FzZSAweDFDNDg6CisgICAgY2FzZSAweDFDNTg6CisgICAgY2FzZSAweDIwNzg6CisgICAgY2FzZSAweDIwODg6CisgICAgY2FzZSAweDIxNjc6CisgICAgY2FzZSAweDIxNzc6CisgICAgY2FzZSAweDI0Njc6CisgICAgY2FzZSAweDI0N0I6CisgICAgY2FzZSAweDI0OEY6CisgICAgY2FzZSAweDI0RkM6CisgICAgY2FzZSAweDI3N0Q6CisgICAgY2FzZSAweDI3ODc6CisgICAgY2FzZSAweDI3OTE6CisgICAgY2FzZSAweDMwMjg6CisgICAgY2FzZSAweDMyMjc6CisgICAgY2FzZSAweDMyODc6CisgICAgY2FzZSAweDUxNkI6CisgICAgY2FzZSAweDYzNEM6CisgICAgY2FzZSAweEE2Mjg6CisgICAgY2FzZSAweEE2RUQ6CisgICAgY2FzZSAweEE4RDg6CisgICAgY2FzZSAweEE5MDg6CisgICAgY2FzZSAweEE5RDg6CisgICAgY2FzZSAweEFBNTg6CisgICAgY2FzZSAweEFCRjg6CisgICAgY2FzZSAweEZGMTg6CisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTBFOgorICAgIGNhc2UgMHgxMDRBODoKKyAgICBjYXNlIDB4MTBFNjc6CisgICAgY2FzZSAweDEyNDA2OgorICAgIGNhc2UgMHgxMjQwRDoKKyAgICBjYXNlIDB4MTI0MTM6CisgICAgY2FzZSAweDEyNDFDOgorICAgIGNhc2UgMHgxMjQyQToKKyAgICBjYXNlIDB4MTI0NDQ6CisgICAgY2FzZSAweDEyNDQ1OgorICAgIGNhc2UgMHgxRDM2NzoKKyAgICBjYXNlIDB4MUQ3RDY6CisgICAgY2FzZSAweDFEN0UwOgorICAgIGNhc2UgMHgxRDdFQToKKyAgICBjYXNlIDB4MUQ3RjQ6CisgICAgY2FzZSAweDFEN0ZFOgorICAgIGNhc2UgMHgxRjEwOToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOC4wOworICAgIGNhc2UgMHgxMzc5OgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExNzoKKyAgICBjYXNlIDB4MTBFNzA6CisgICAgY2FzZSAweDFEMzcwOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA4MC4wOworI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyMDoKKyAgICBjYXNlIDB4MTBFNzk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA4MDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEyOToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwMDAuMDsKKyNlbmRpZgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDEzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwMDAwLjA7CisjZW5kaWYKKyAgICBjYXNlIDB4MDAzOToKKyAgICBjYXNlIDB4MDY2OToKKyAgICBjYXNlIDB4MDZGOToKKyAgICBjYXNlIDB4MDdDOToKKyAgICBjYXNlIDB4MDk2RjoKKyAgICBjYXNlIDB4MDlFRjoKKyAgICBjYXNlIDB4MEE2RjoKKyAgICBjYXNlIDB4MEFFRjoKKyAgICBjYXNlIDB4MEI2RjoKKyAgICBjYXNlIDB4MEJFRjoKKyAgICBjYXNlIDB4MEM2RjoKKyAgICBjYXNlIDB4MENFRjoKKyAgICBjYXNlIDB4MEQ2RjoKKyAgICBjYXNlIDB4MEU1OToKKyAgICBjYXNlIDB4MEVEOToKKyAgICBjYXNlIDB4MEYyOToKKyAgICBjYXNlIDB4MTA0OToKKyAgICBjYXNlIDB4MTA5OToKKyAgICBjYXNlIDB4MTM3MToKKyAgICBjYXNlIDB4MTdFOToKKyAgICBjYXNlIDB4MTdGOToKKyAgICBjYXNlIDB4MTgxOToKKyAgICBjYXNlIDB4MTk0RjoKKyAgICBjYXNlIDB4MTlEOToKKyAgICBjYXNlIDB4MUE4OToKKyAgICBjYXNlIDB4MUE5OToKKyAgICBjYXNlIDB4MUI1OToKKyAgICBjYXNlIDB4MUJCOToKKyAgICBjYXNlIDB4MUM0OToKKyAgICBjYXNlIDB4MUM1OToKKyAgICBjYXNlIDB4MjA3OToKKyAgICBjYXNlIDB4MjA4OToKKyAgICBjYXNlIDB4MjE2ODoKKyAgICBjYXNlIDB4MjE3ODoKKyAgICBjYXNlIDB4MjQ2ODoKKyAgICBjYXNlIDB4MjQ3QzoKKyAgICBjYXNlIDB4MjQ5MDoKKyAgICBjYXNlIDB4MjRGRDoKKyAgICBjYXNlIDB4Mjc3RToKKyAgICBjYXNlIDB4Mjc4ODoKKyAgICBjYXNlIDB4Mjc5MjoKKyAgICBjYXNlIDB4MzAyOToKKyAgICBjYXNlIDB4MzIyODoKKyAgICBjYXNlIDB4MzI4ODoKKyAgICBjYXNlIDB4NEU1RDoKKyAgICBjYXNlIDB4NUVGRToKKyAgICBjYXNlIDB4NzM5NjoKKyAgICBjYXNlIDB4QTYyOToKKyAgICBjYXNlIDB4QTZFRToKKyAgICBjYXNlIDB4QThEOToKKyAgICBjYXNlIDB4QTkwOToKKyAgICBjYXNlIDB4QTlEOToKKyAgICBjYXNlIDB4QUE1OToKKyAgICBjYXNlIDB4QUJGOToKKyAgICBjYXNlIDB4RkYxOToKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMEY6CisgICAgY2FzZSAweDEwNEE5OgorICAgIGNhc2UgMHgxMEU2ODoKKyAgICBjYXNlIDB4MTI0MDc6CisgICAgY2FzZSAweDEyNDBFOgorICAgIGNhc2UgMHgxMjQxNDoKKyAgICBjYXNlIDB4MTI0MUQ6CisgICAgY2FzZSAweDEyNDJCOgorICAgIGNhc2UgMHgxMjQ0NjoKKyAgICBjYXNlIDB4MTI0NDc6CisgICAgY2FzZSAweDEyNDQ4OgorICAgIGNhc2UgMHgxMjQ0OToKKyAgICBjYXNlIDB4MUQzNjg6CisgICAgY2FzZSAweDFEN0Q3OgorICAgIGNhc2UgMHgxRDdFMToKKyAgICBjYXNlIDB4MUQ3RUI6CisgICAgY2FzZSAweDFEN0Y1OgorICAgIGNhc2UgMHgxRDdGRjoKKyAgICBjYXNlIDB4MUYxMEE6CisgICAgY2FzZSAweDJGODkwOgorI2VuZGlmCisgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjA7CisgICAgY2FzZSAweDBGMkU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjAvMi4wOworICAgIGNhc2UgMHgxMzdBOgorI2lmZGVmIFB5X1VOSUNPREVfV0lERQorICAgIGNhc2UgMHgxMDExODoKKyAgICBjYXNlIDB4MTAzNDE6CisgICAgY2FzZSAweDEwRTcxOgorICAgIGNhc2UgMHgxRDM3MToKKyNlbmRpZgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAuMDsKKyNpZmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICBjYXNlIDB4MTAxMjE6CisgICAgY2FzZSAweDEwMzRBOgorICAgIGNhc2UgMHgxMEU3QToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDkwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTJBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwMC4wOworI2VuZGlmCisjaWZkZWYgUHlfVU5JQ09ERV9XSURFCisgICAgY2FzZSAweDEwMTMzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwMDAuMDsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gLTEuMDsKK30KKworLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBiaWRpcmVjdGlvbmFsCisgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UocmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSBjaCkKK3sKKyNpZmRlZiBXQU5UX1dDVFlQRV9GVU5DVElPTlMKKyAgICByZXR1cm4gaXN3c3BhY2UoY2gpOworI2Vsc2UKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAweDAwMDk6CisgICAgY2FzZSAweDAwMEE6CisgICAgY2FzZSAweDAwMEI6CisgICAgY2FzZSAweDAwMEM6CisgICAgY2FzZSAweDAwMEQ6CisgICAgY2FzZSAweDAwMUM6CisgICAgY2FzZSAweDAwMUQ6CisgICAgY2FzZSAweDAwMUU6CisgICAgY2FzZSAweDAwMUY6CisgICAgY2FzZSAweDAwMjA6CisgICAgY2FzZSAweDAwODU6CisgICAgY2FzZSAweDAwQTA6CisgICAgY2FzZSAweDE2ODA6CisgICAgY2FzZSAweDE4MEU6CisgICAgY2FzZSAweDIwMDA6CisgICAgY2FzZSAweDIwMDE6CisgICAgY2FzZSAweDIwMDI6CisgICAgY2FzZSAweDIwMDM6CisgICAgY2FzZSAweDIwMDQ6CisgICAgY2FzZSAweDIwMDU6CisgICAgY2FzZSAweDIwMDY6CisgICAgY2FzZSAweDIwMDc6CisgICAgY2FzZSAweDIwMDg6CisgICAgY2FzZSAweDIwMDk6CisgICAgY2FzZSAweDIwMEE6CisgICAgY2FzZSAweDIwMjg6CisgICAgY2FzZSAweDIwMjk6CisgICAgY2FzZSAweDIwMkY6CisgICAgY2FzZSAweDIwNUY6CisgICAgY2FzZSAweDMwMDA6CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGxpbmUgYnJlYWsKKyAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbAorICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKQoreworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlIDB4MDAwQToKKyAgICBjYXNlIDB4MDAwQjoKKyAgICBjYXNlIDB4MDAwQzoKKyAgICBjYXNlIDB4MDAwRDoKKyAgICBjYXNlIDB4MDAxQzoKKyAgICBjYXNlIDB4MDAxRDoKKyAgICBjYXNlIDB4MDAxRToKKyAgICBjYXNlIDB4MDA4NToKKyAgICBjYXNlIDB4MjAyODoKKyAgICBjYXNlIDB4MjAyOToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9QQy9WQzYvX2JzZGRiLmRzcCBiL1BDL1ZDNi9fYnNkZGIuZHNwCmluZGV4IDE3NTZmZTcuLjgwOWZjMzkgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fYnNkZGIuZHNwCisrKyBiL1BDL1ZDNi9fYnNkZGIuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9ic2RkYiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fYnNkZGIgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfYnNkZGIubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9ic2RkYi5tYWsiIENGRz0iX2JzZGRiIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2JzZGRiIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9ic2RkYiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9ic2RkYiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfYnNkZGIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzXFJlbGVhc2VcbGliZGI0N3MubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2JzZGRiLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2JzZGRiIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9ic2RkYiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxkYi00LjcuMjVcYnVpbGRfd2luZG93cyIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAuLlwuLlwuLlxkYi00LjcuMjVcYnVpbGRfd2luZG93c1xSZWxlYXNlXGxpYmRiNDdzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnRkIiAvb3V0OiIuL19ic2RkYl9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2JzZGRiIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9ic2RkYiAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfYnNkZGIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2JzZGRiIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9ic2RkYiAtIFdpbjMyIFJlbGVhc2UKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2JzZGRiLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2JzZGRiLm1hayIgQ0ZHPSJfYnNkZGIgLSBXaW4zMiBSZWxlYXNlIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9ic2RkYiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl9ic2RkYiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfYnNkZGIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX2JzZGRiIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfYnNkZGIiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGRiLTQuNy4yNVxidWlsZF93aW5kb3dzIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAuLlwuLlwuLlxkYi00LjcuMjVcYnVpbGRfd2luZG93c1xSZWxlYXNlXGxpYmRiNDdzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19ic2RkYi5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9ic2RkYiAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9ic2RkYiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxkYi00LjcuMjVcYnVpbGRfd2luZG93cyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgLi5cLi5cLi5cZGItNC43LjI1XGJ1aWxkX3dpbmRvd3NcUmVsZWFzZVxsaWJkYjQ3cy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibXN2Y3J0ZCIgL291dDoiLi9fYnNkZGJfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX2JzZGRiIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX2JzZGRiIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9ic2RkYi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX2N0eXBlcy5kc3AgYi9QQy9WQzYvX2N0eXBlcy5kc3AKaW5kZXggZmRmMTg2YS4uOGFiODlmNiAxMDA2NDQKLS0tIGEvUEMvVkM2L19jdHlwZXMuZHNwCisrKyBiL1BDL1ZDNi9fY3R5cGVzLmRzcApAQCAtMSwxMzEgKzEsMTMxIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlcyAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzLm1hayIgQ0ZHPSJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXMiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX2N0eXBlcyIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fY3R5cGVzIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXMubWFrIiBDRkc9Il9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlcy5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxYTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc19kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX2N0eXBlcyAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AgYi9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcAppbmRleCA5NDJiMzBjLi43NWQyZDE0IDEwMDY0NAotLS0gYS9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcAorKysgYi9QQy9WQzYvX2N0eXBlc190ZXN0LmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzX3Rlc3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9jdHlwZXNfdGVzdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIgQ0ZHPSJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9jdHlwZXNfdGVzdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2N0eXBlc190ZXN0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIiBDRkc9Il9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzX3Rlc3QiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzX3Rlc3QiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX3Rlc3QucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcAppbmRleCA1YzlhMDhiLi44ZmYzZDI1IDEwMDY0NAotLS0gYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcAorKysgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcApAQCAtMSwxMTEgKzEsMTExIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9lbGVtZW50dHJlZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIiBDRkc9Il9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWUucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9lbGVtZW50dHJlZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfZWxlbWVudHRyZWUiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIgQ0ZHPSJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2VsZW1lbnR0cmVlIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWUucHlkIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfZWxlbWVudHRyZWUiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlhNTF9OUyIgL0QgIlhNTF9EVEQiIC9EICJCWVRFT1JERVI9MTIzNCIgL0QgIlhNTF9DT05URVhUX0JZVEVTPTEwMjQiIC9EICJVU0VfUFlFWFBBVF9DQVBJIiAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L19tc2kuZHNwIGIvUEMvVkM2L19tc2kuZHNwCmluZGV4IDM4ZTRhYzUuLmFhNmNjOGQgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fbXNpLmRzcAorKysgYi9QQy9WQzYvX21zaS5kc3AKQEAgLTEsOTkgKzEsOTkgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX21zaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXNpIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tc2kubWFrIiBDRkc9Il9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX21zaSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX21zaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2kucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2lfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX21zaSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUENcX21zaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXNpIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9tc2kgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfbXNpLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiIENGRz0iX21zaSAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfbXNpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9tc2kiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX21zaSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX21zaSAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tc2kiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9tc2kgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfbXNpIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQQ1xfbXNpLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcCBiL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcAppbmRleCAyZDNkNjM3Li4zMmZkYmQwIDEwMDY0NAotLS0gYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKKysrIGIvUEMvVkM2L19tdWx0aXByb2Nlc3NpbmcuZHNwCkBAIC0xLDExNSArMSwxMTUgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX211bHRpcHJvY2Vzc2luZyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIiBDRkc9Il9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFkMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdccGlwZV9jb25uZWN0aW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzb2NrZXRfY29ubmVjdGlvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX211bHRpcHJvY2Vzc2luZyIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9tdWx0aXByb2Nlc3NpbmcubWFrIiBDRkc9Il9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfbXVsdGlwcm9jZXNzaW5nIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9tdWx0aXByb2Nlc3NpbmciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXVsdGlwcm9jZXNzaW5nLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tdWx0aXByb2Nlc3NpbmciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMWQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tdWx0aXByb2Nlc3NpbmdfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xwaXBlX2Nvbm5lY3Rpb24uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzb2NrZXRfY29ubmVjdGlvbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHdpbjMyX2Z1bmN0aW9ucy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX3NvY2tldC5kc3AgYi9QQy9WQzYvX3NvY2tldC5kc3AKaW5kZXggNGU4NDA1NS4uNmRlOWNlNyAxMDA2NDQKLS0tIGEvUEMvVkM2L19zb2NrZXQuZHNwCisrKyBiL1BDL1ZDNi9fc29ja2V0LmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc29ja2V0IiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zb2NrZXQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiIENGRz0iX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc29ja2V0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NvY2tldCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1fc29ja2V0IC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3NvY2tldC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl9zb2NrZXQubWFrIiBDRkc9Il9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfc29ja2V0IgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0LnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUQwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zb2NrZXRfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AgYi9QQy9WQzYvX3NxbGl0ZTMuZHNwCmluZGV4IGE4ZjMzMjkuLjcxMTVhODIgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fc3FsaXRlMy5kc3AKKysrIGIvUEMvVkM2L19zcWxpdGUzLmRzcApAQCAtMSwxMzEgKzEsMTMxIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zcWxpdGUzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9zcWxpdGUzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiIENGRz0iX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfc3FsaXRlMyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTNfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zcWxpdGUzIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV9zcWxpdGUzIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfc3FsaXRlMy5tYWsiIENGRz0iX3NxbGl0ZTMgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgIl9zcWxpdGUzIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3FsaXRlMyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlMy5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NxbGl0ZTMiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE4MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc3FsaXRlM19kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl9zcWxpdGUzIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX3NzbC5kc3AgYi9QQy9WQzYvX3NzbC5kc3AKaW5kZXggZThiYjk5My4uYmQ1ZTY4YSAxMDA2NDQKLS0tIGEvUEMvVkM2L19zc2wuZHNwCisrKyBiL1BDL1ZDNi9fc3NsLmRzcApAQCAtMSw4OSArMSw4OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfc3NsIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiIDB4MDEwNg0KLQ0KLUNGRz1fc3NsIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zc2wubWFrIiBDRkc9Il9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IikNCi0hTUVTU0FHRSAiX3NzbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgQ21kX0xpbmUgIk5NQUtFIC9mIF9zc2wubWFrIg0KLSMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbC5leGUiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2wuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob24gYnVpbGRfc3NsLnB5Ig0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsLnB5ZCINCi0jIFBST1AgQnNjX05hbWUgIiINCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJBU0UgQnNjX05hbWUgIl9zc2xfZC5ic2MiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIENtZF9MaW5lICJweXRob25fZCAtdSBidWlsZF9zc2wucHkgLWQiDQotIyBQUk9QIFJlYnVpbGRfT3B0ICItYSINCi0jIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2xfZC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgRGVidWciDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3NsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zc2wiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IiAweDAxMDYKKworQ0ZHPV9zc2wgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3NzbC5tYWsiIENGRz0iX3NzbCAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpCishTUVTU0FHRSAiX3NzbCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIiIKKworIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayIKKyMgUFJPUCBCQVNFIFJlYnVpbGRfT3B0ICIvYSIKKyMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsLmV4ZSIKKyMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsLmJzYyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NzbCIKKyMgUFJPUCBDbWRfTGluZSAicHl0aG9uIGJ1aWxkX3NzbC5weSIKKyMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiCisjIFBST1AgVGFyZ2V0X0ZpbGUgIl9zc2wucHlkIgorIyBQUk9QIEJzY19OYW1lICIiCisjIFBST1AgVGFyZ2V0X0RpciAiIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiCisjIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiCisjIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiCisjIFBST1AgQkFTRSBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCIKKyMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsX2QuYnNjIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCIKKyMgUFJPUCBDbWRfTGluZSAicHl0aG9uX2QgLXUgYnVpbGRfc3NsLnB5IC1kIgorIyBQUk9QIFJlYnVpbGRfT3B0ICItYSIKKyMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbF9kLnB5ZCIKKyMgUFJPUCBCc2NfTmFtZSAiIgorIyBQUk9QIFRhcmdldF9EaXIgIiIKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJfc3NsIC0gV2luMzIgRGVidWciCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl9zc2wgLSBXaW4zMiBSZWxlYXNlIgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIgorCishRU5ESUYgCisKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NzbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvX3Rlc3RjYXBpLmRzcCBiL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCmluZGV4IDUyMTViNjMuLjc0NmEyYzAgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCisrKyBiL1BDL1ZDNi9fdGVzdGNhcGkuZHNwCkBAIC0xLDk5ICsxLDk5IEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90ZXN0Y2FwaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGVzdGNhcGkgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIiBDRkc9Il90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3Rlc3RjYXBpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfdGVzdGNhcGkiIC0gUGFja2FnZSBPd25lcj08ND4KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgKiogRE8gTk9UIEVESVQgKioKKworIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMgorCitDRkc9X3Rlc3RjYXBpIC0gV2luMzIgRGVidWcKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIgQ0ZHPSJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3Rlc3RjYXBpIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFGMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpLnB5ZCIKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3Rlc3RjYXBpIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMUYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3Rlc3RjYXBpX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L190a2ludGVyLmRzcCBiL1BDL1ZDNi9fdGtpbnRlci5kc3AKaW5kZXggOGNkYTgzYS4uNDk2YjZjMSAxMDA2NDQKLS0tIGEvUEMvVkM2L190a2ludGVyLmRzcAorKysgYi9QQy9WQzYvX3RraW50ZXIuZHNwCkBAIC0xLDEwMyArMSwxMDMgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3RraW50ZXIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIiBDRkc9Il90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGtpbnRlciINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5cLi5cLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NWcubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NWcubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODUubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NS5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlci5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGtpbnRlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90a2ludGVyIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPV90a2ludGVyIC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIl90a2ludGVyLm1hayIgQ0ZHPSJfdGtpbnRlciAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJfdGtpbnRlciIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlwuLlwuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF90a2ludGVyIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NWcubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NWcubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxOTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3RraW50ZXJfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90a2ludGVyIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlIiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiV0lUSF9BUFBJTklUIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODUubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NS5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZTE5MDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGtpbnRlci5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcdGthcHBpbml0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF9zc2wucHkgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CmluZGV4IDNlOTZhNWIuLjI5YTUxOTIgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9idWlsZF9zc2wucHkKKysrIGIvUEMvVkM2L2J1aWxkX3NzbC5weQpAQCAtMTMsNiArMTMsMTEgQEAKICMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBzc2wgUHl0aG9uIGV4dGVuc2lvbgogIyB3aXRob3V0IGludGVydmVudGlvbi4KIAorIyBNb2RpZmllZCBieSBDaHJpc3RpYW4gSGVpbWVzCisjIE5vdyB0aGlzIHNjcmlwdCBzdXBwb3J0cyBwcmUtZ2VuZXJhdGVkIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCisjIERldmVsb3BlcnMgZG9uJ3QgbmVlZCBhbiBpbnN0YWxsYXRpb24gb2YgUGVybCBhbnltb3JlIHRvIGJ1aWxkIFB5dGhvbi4gQSBzdm4KKyMgY2hlY2tvdXQgZnJvbSBvdXIgc3ZuIHJlcG9zaXRvcnkgaXMgZW5vdWdoLgorCiBpbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAogCiAjIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KQEAgLTM2LDcgKzQxLDcgQEAKICMgaXMgYXZhaWxhYmxlLgogZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKICAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbihwZXJsICsgJyAtZSAidXNlIFdpbjMyOyInKQorICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQogICAgICAgICBmaC5yZWFkKCkKICAgICAgICAgcmMgPSBmaC5jbG9zZSgpCiAgICAgICAgIGlmIHJjOgpAQCAtMTIwLDYgKzEyNSwyMiBAQAogICAgIHByaW50IGRvX3NjcmlwdAogICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCiAKK2RlZiBjbXAoZjEsIGYyKToKKyAgICBidWZzaXplID0gMTAyNCAqIDgKKyAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQorICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQorICAgICAgICAgICAgaWYgYjEgIT0gYjI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3QgYjE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNvcHkoc3JjLCBkc3QpOgorICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6CisgICAgICAgIHJldHVybgorICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQorCiBkZWYgbWFpbigpOgogICAgIGRlYnVnID0gIi1kIiBpbiBzeXMuYXJndgogICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKQEAgLTEyOSw2ICsxNTAsNyBAQAogICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCiAgICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgogICAgICAgICBtMzIgPSBtYWtlZmlsZQorICAgICAgICBkaXJzdWZmaXggPSAiMzIiCiAgICAgY29uZmlndXJlICs9ICIgbm8taWRlYSBuby1yYzUgbm8tbWRjMiIKICAgICBtYWtlX2ZsYWdzID0gIiIKICAgICBpZiBidWlsZF9hbGw6CkBAIC0xMzcsMTIgKzE1OSwxMiBAQAogICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwogICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKICAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybCBpcyBOb25lOgotICAgICAgICBwcmludCAiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIgotICAgIGVsc2U6CisgICAgaWYgcGVybDoKICAgICAgICAgcHJpbnQgIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKQorICAgIGVsc2U6CisgICAgICAgIHByaW50ICJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iCiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBwY2J1aWxkIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCisgICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WQzYgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KICAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQogICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTE3MywxMiArMTk1LDIxIEBACiAgICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCiAKICAgICAgICAgICAgIGZpeF9tYWtlZmlsZShtYWtlZmlsZSkKLSAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCi0gICAgICAgICAgICBzaHV0aWwuY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQorICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQorICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQorCisgICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCisgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgorICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKKyAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKIAogICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKKyAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQorICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCiAKICAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQogICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J6Mi5kc3AgYi9QQy9WQzYvYnoyLmRzcAppbmRleCA5MGM0ZGUyLi43YWExNjg2IDEwMDY0NAotLS0gYS9QQy9WQzYvYnoyLmRzcAorKysgYi9QQy9WQzYvYnoyLmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJiejIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9YnoyIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImJ6Mi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIgQ0ZHPSJiejIgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgImJ6MiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgImJ6MiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxiejIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC41IiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNVxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC41IiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNVxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9iejJfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYnoybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImJ6MiIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1iejIgLSBXaW4zMiBEZWJ1ZworIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIiBDRkc9ImJ6MiAtIFdpbjMyIERlYnVnIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgImJ6MiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgImJ6MiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJiejIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iCitDUFA9Y2wuZXhlCitNVEw9bWlkbC5leGUKK1JTQz1yYy5leGUKKworIUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxiejIiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC41IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjVcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL2J6Mi5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYgorCishRUxTRUlGICAiJChDRkcpIiA9PSAiYnoyIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcYnoyIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXGJ6aXAyLTEuMC41IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjVcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyX2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgImJ6MiAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgImJ6MiAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwIGIvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCmluZGV4IGE3MzVlMTIuLjc2NmFkZWYgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcAorKysgYi9QQy9WQzYvbWFrZV92ZXJzaW9uaW5mby5kc3AKQEAgLTEsMTA4ICsxLDEwOCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9bWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIiBDRkc9Im1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAibWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLSMgQmVnaW4gQ3VzdG9tIEJ1aWxkDQotSW5wdXRQYXRoPS5cbWFrZV92ZXJzaW9uaW5mby5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmMuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSA+Li5ccHl0aG9ubnRfcmMuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXG1ha2VfdmVyc2lvbmluZm8iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uXC4uXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlDQotU09VUkNFPSIkKElucHV0UGF0aCkiDQotDQotIi4uXHB5dGhvbm50X3JjX2QuaCIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIgIiQoT1VURElSKSINCi0JLlxtYWtlX3ZlcnNpb25pbmZvX2QuZXhlID4uLlxweXRob25udF9yY19kLmgNCi0NCi0jIEVuZCBDdXN0b20gQnVpbGQNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cbWFrZV92ZXJzaW9uaW5mby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMworCitDRkc9bWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIm1ha2VfdmVyc2lvbmluZm8ubWFrIiBDRkc9Im1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQorIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJtYWtlX3ZlcnNpb25pbmZvIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKyMgQmVnaW4gQ3VzdG9tIEJ1aWxkCitJbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvLmV4ZQorU09VUkNFPSIkKElucHV0UGF0aCkiCisKKyIuLlxweXRob25udF9yYy5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCS5cbWFrZV92ZXJzaW9uaW5mby5leGUgPi4uXHB5dGhvbm50X3JjLmgKKworIyBFbmQgQ3VzdG9tIEJ1aWxkCisKKyFFTFNFSUYgICIkKENGRykiID09ICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorIyBCZWdpbiBDdXN0b20gQnVpbGQKK0lucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm9fZC5leGUKK1NPVVJDRT0iJChJbnB1dFBhdGgpIgorCisiLi5ccHl0aG9ubnRfcmNfZC5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIgorCS5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSA+Li5ccHl0aG9ubnRfcmNfZC5oCisKKyMgRW5kIEN1c3RvbSBCdWlsZAorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXG1ha2VfdmVyc2lvbmluZm8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L3BjYnVpbGQuZHN3IGIvUEMvVkM2L3BjYnVpbGQuZHN3CmluZGV4IGMxMGM3OTQuLjYwNmY4MzggMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9wY2J1aWxkLmRzdworKysgYi9QQy9WQzYvcGNidWlsZC5kc3cKQEAgLTEsMzIwICsxLDMyMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAiX2JzZGRiIj0iLlxfYnNkZGIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXMiPSIuXF9jdHlwZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tc2kiPSIuXF9tc2kuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tdWx0aXByb2Nlc3NpbmciPSIuXF9tdWx0aXByb2Nlc3NpbmcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zcWxpdGUzIj0iLlxfc3FsaXRlMy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3NsIj0iLlxfc3NsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHc5eHBvcGVuDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGtpbnRlciI9Ii5cX3RraW50ZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImJ6MiI9Ii5cYnoyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPSIuXG1ha2VfdmVyc2lvbmluZm8uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHlleHBhdCI9Ii5ccHlleHBhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBtYWtlX3ZlcnNpb25pbmZvDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNlbGVjdCI9Ii5cc2VsZWN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInc5eHBvcGVuIj0iLlx3OXhwb3Blbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3aW5zb3VuZCI9Ii5cd2luc291bmQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQorTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogIl9ic2RkYiI9Ii5cX2JzZGRiLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfY3R5cGVzIj0iLlxfY3R5cGVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfY3R5cGVzX3Rlc3QiPSIuXF9jdHlwZXNfdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfZWxlbWVudHRyZWUiPSIuXF9lbGVtZW50dHJlZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfbXNpIj0iLlxfbXNpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfbXVsdGlwcm9jZXNzaW5nIj0iLlxfbXVsdGlwcm9jZXNzaW5nLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfc29ja2V0Ij0iLlxfc29ja2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfc3FsaXRlMyI9Ii5cX3NxbGl0ZTMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiX3NzbCI9Ii5cX3NzbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob24KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSB3OXhwb3BlbgorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJfdGVzdGNhcGkiPSIuXF90ZXN0Y2FwaS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAiX3RraW50ZXIiPSIuXF90a2ludGVyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJiejIiPSIuXGJ6Mi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJtYWtlX3ZlcnNpb25pbmZvIj0iLlxtYWtlX3ZlcnNpb25pbmZvLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInB5ZXhwYXQiPSIuXHB5ZXhwYXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7CisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5CisgICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQorfX19CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUHJvamVjdDogInB5dGhvbiI9Ii5ccHl0aG9uLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJweXRob25jb3JlIj0iLlxweXRob25jb3JlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgbWFrZV92ZXJzaW9uaW5mbworICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJweXRob253Ij0iLlxweXRob253LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJzZWxlY3QiPSIuXHNlbGVjdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDQ+Cit7e3sKKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kKKyAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUKKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAidW5pY29kZWRhdGEiPSIuXHVuaWNvZGVkYXRhLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1Byb2plY3Q6ICJ3OXhwb3BlbiI9Ii5cdzl4cG9wZW4uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+CisKK1BhY2thZ2U9PDU+Cit7e3sKK319fQorCitQYWNrYWdlPTw0Pgore3t7Cit9fX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQcm9qZWN0OiAid2luc291bmQiPSIuXHdpbnNvdW5kLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgorCitQYWNrYWdlPTw1Pgore3t7Cit9fX0KKworUGFja2FnZT08ND4KK3t7eworICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQorICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0dsb2JhbDoKKworUGFja2FnZT08NT4KK3t7eworfX19CisKK1BhY2thZ2U9PDM+Cit7e3sKK319fQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKZGlmZiAtLWdpdCBhL1BDL1ZDNi9weWV4cGF0LmRzcCBiL1BDL1ZDNi9weWV4cGF0LmRzcAppbmRleCA0MDM1YTU0Li4xNjM2NjI3IDEwMDY0NAotLS0gYS9QQy9WQzYvcHlleHBhdC5kc3AKKysrIGIvUEMvVkM2L3B5ZXhwYXQuZHNwCkBAIC0xLDExMSArMSwxMTEgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHlleHBhdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weWV4cGF0IC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiIENGRz0icHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5ZXhwYXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3B5ZXhwYXQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5ZXhwYXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xleHBhdCIgL0QgIl9ERUJVRyIgL0QgIkhBVkVfRVhQQVRfSCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHlleHBhdCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1weWV4cGF0IC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweWV4cGF0Lm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicHlleHBhdC5tYWsiIENGRz0icHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAicHlleHBhdCIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0IgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgQllURU9SREVSPTEyMzQgL0QgWE1MX0NPTlRFWFRfQllURVM9MTAyNCAvRCAiWE1MX1NUQVRJQyIgL0QgIkhBVkVfTUVNTU9WRSIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdC5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0IgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIkhBVkVfRVhQQVRfSCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weWV4cGF0X2QucHlkIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJweWV4cGF0IC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYworIyBFbmQgU291cmNlIEZpbGUKKyMgRW5kIFRhcmdldAorIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbi5kc3AgYi9QQy9WQzYvcHl0aG9uLmRzcAppbmRleCBmYThiNzcyLi5iNjRmNWMxIDEwMDY0NAotLS0gYS9QQy9WQzYvcHl0aG9uLmRzcAorKysgYi9QQy9WQzYvcHl0aG9uLmRzcApAQCAtMSwxMDAgKzEsMTAwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzDQotDQotQ0ZHPXB5dGhvbiAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIgQ0ZHPSJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJweXRob24gLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi4uLlxcSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdGFjazoweDIwMDAwMCAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob25fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5Y29uLmljbw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5dGhvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbiIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKKworQ0ZHPXB5dGhvbiAtIFdpbjMyIFJlbGVhc2UKKyFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwKKyFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uLm1hayIgQ0ZHPSJweXRob24gLSBXaW4zMiBSZWxlYXNlIgorIU1FU1NBR0UgCishTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uIgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIgorQ1BQPWNsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJweXRob24gLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob24iCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uLi5cXEluY2x1ZGUiIC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3RhY2s6MHgyMDAwMDAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9uX2QuZXhlIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInB5dGhvbiAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInB5dGhvbiAtIFdpbjMyIERlYnVnIgorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5ccHljb24uaWNvCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xweXRob24uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXHB5dGhvbl9leGUucmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob25jb3JlLmRzcCBiL1BDL1ZDNi9weXRob25jb3JlLmRzcAppbmRleCAwMzcxNjI3Li44OTM1NDJhIDEwMDY0NAotLS0gYS9QQy9WQzYvcHl0aG9uY29yZS5kc3AKKysrIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCkBAIC0xLDc2NSArMSw3OTcgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uY29yZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1weXRob25jb3JlIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiIENGRz0icHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInB5dGhvbmNvcmUiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJVU0VfRExfRVhQT1JUIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjI2LmRsbCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjI2X2QuZGxsIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2J5dGVzaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3N2LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZmlsZWlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9ob3RzaG90LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfanNvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9zdWJwcm9jZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXF93YXJuaW5ncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxfd2lucmVnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxhY2NlbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdWRpb29wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxiaXRzZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ1ZmZlcm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZWFycmF5b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNldmFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cY29kZWNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvbXBpbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxjb25maWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNQaWNrbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNTdHJpbmdJTy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZGF0ZXRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxkbF9udC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZW51bW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZXJyb3JzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xleGNlcHRpb25zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZm9ybWF0dGVyX3N0cmluZy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZnJvemVuLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZ1dHVyZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZnV0dXJlX2J1aWx0aW5zLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xnY21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGFyZ3MuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotIyBBREQgQ1BQIC9EIEJVSUxEPTQ2DQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb21waWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0bXRpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0b3B0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cZ2V0cGF0aHAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxncmFtaW5pdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxncmFtbWFyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIxLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGltYWdlb3AuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5caW1wb3J0X250LmMNCi0jIEFERCBDUFAgL0kgIi4uXC4uXFB5dGhvbiINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGltcG9ydGRsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xpbnRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxsaXN0bm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtYXJzaGFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1zdmNydG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzbnByaW50Zi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXN0cnRvdWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2V0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccGVlcGhvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5YXJlbmEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlmcGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHltYXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJjbXAuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJ0b2QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cUHl0aG9uXFB5dGhvbi1hc3QuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5ccHl0aG9uX250LnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRob25ydW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhMjU2bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzbGljZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcc3RyaW5nb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzdHJvcG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzdHJ1Y3RtZW1iZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxzeW10YWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc3ltdGFibGVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3lzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRocmVhZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcdGhyZWFkbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXHRva2VuaXplci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0cmFjZWJhY2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR1cGxlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x5dXZjb252ZXJ0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icHl0aG9uY29yZSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz1weXRob25jb3JlIC0gV2luMzIgUmVsZWFzZQorIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLAorIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuCishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweXRob25jb3JlLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAicHl0aG9uY29yZS5tYWsiIENGRz0icHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAKKworIyBCZWdpbiBQcm9qZWN0CisjIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMAorIyBQUk9QIFNjY19Qcm9qTmFtZSAicHl0aG9uY29yZSIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCitGOTA9ZGYuZXhlCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJVU0VfRExfRVhQT1JUIiAvWVggL0ZEIC9abTIwMCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiCisjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjcuZGxsIgorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9uY29yZSIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMjdfZC5kbGwiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAicHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9jc3YuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2hvdHNob3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfanNvbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9sc3Byb2YuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX21hdGguYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3JlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBDXF9zdWJwcm9jZXNzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cX3dhcm5pbmdzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxfd2lucmVnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGFic3RyYWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcYWNjZWxlci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxhc2RsLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cYXN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxiaXRzZXQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGJ1ZmZlcm9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xjYXBzdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxjZXZhbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xjbGFzc29iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjbWF0aG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cY29kZWNzLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxjb21waWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGNvbXBsZXhvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cY29uZmlnLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGNQaWNrbGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjU3RyaW5nSU8uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZGF0ZXRpbWVtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXGRsX250LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZHRvYS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxlcnJvcnMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxmaXJzdHNldHMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfc3RyaW5nLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZnJhbWVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxmcm96ZW4uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGZ1dHVyZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xmdXR1cmVfYnVpbHRpbnMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0YXJncy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYworIyBBREQgQ1BQIC9EIEJVSUxEPTQ2CisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0b3B0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxnZXRwYXRocC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGdldHBsYXRmb3JtLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cZ2V0dmVyc2lvbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGdyYW1pbml0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIxLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXGltYWdlb3AuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXGltcG9ydF9udC5jCisjIEFERCBDUFAgL0kgIi4uXC4uXFB5dGhvbiIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0ZGwuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xpbnRvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcaXRlcm9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxsaXN0bm9kZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xsaXN0b2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcbWFpbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXG1hcnNoYWwuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xtb2R1bGVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXG1zdmNydG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cbXlzbnByaW50Zi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXG15c3RydG91bC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXG5vZGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcb2JqZWN0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXG9wZXJhdG9yLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2VyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUGFyc2VyXHBhcnNldG9rLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccGVlcGhvbGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweWFyZW5hLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHljdHlwZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHB5ZnBlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHltYXRoLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHlzdGF0ZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHB5c3RyY21wLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25ccHlzdHJ0b2QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXHB5dGhvbl9udC5yYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxweXRob25ydW4uYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXHNldG9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzdHJvcG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXFB5dGhvblxzeW10YWJsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cUHl0aG9uXHN5c21vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cdGhyZWFkLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHRocmVhZG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxQeXRob25cdHJhY2ViYWNrLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcdHlwZW9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXHVuY29tcHIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxPYmplY3RzXHVuaWNvZGVvYmplY3QuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE9iamVjdHNcd2Vha3JlZm9iamVjdC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvcHl0aG9udy5kc3AgYi9QQy9WQzYvcHl0aG9udy5kc3AKaW5kZXggZTljMzI1Yy4uNWEwNzU3OSAxMDA2NDQKLS0tIGEvUEMvVkM2L3B5dGhvbncuZHNwCisrKyBiL1BDL1ZDNi9weXRob253LmRzcApAQCAtMSwxMDEgKzEsMTAxIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbnciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9cHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIiBDRkc9InB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob253Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob253X2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cV2luTWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob253IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDEKKworQ0ZHPXB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIi4KKyFNRVNTQUdFIAorIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UKKyFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6CishTUVTU0FHRSAKKyFNRVNTQUdFIE5NQUtFIC9mICJweXRob253Lm1hayIgQ0ZHPSJweXRob253IC0gV2luMzIgQWxwaGEgUmVsZWFzZSIKKyFNRVNTQUdFIAorIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6CishTUVTU0FHRSAKKyFNRVNTQUdFICJweXRob253IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpCishTUVTU0FHRSAicHl0aG9udyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJweXRob253IgorIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbnciCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob253IgorIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKKyMgUFJPUCBUYXJnZXRfRGlyICIiCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob253X2QuZXhlIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIgorIyBOYW1lICJweXRob253IC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlxweXRob25fZXhlLnJjCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Li5cV2luTWFpbi5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvcmVhZG1lLnR4dCBiL1BDL1ZDNi9yZWFkbWUudHh0CmluZGV4IDUzMzliYmIuLjAzZDIzMTggMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9yZWFkbWUudHh0CisrKyBiL1BDL1ZDNi9yZWFkbWUudHh0CkBAIC0xLDcgKzEsOCBAQAogQnVpbGRpbmcgUHl0aG9uIHVzaW5nIFZDKysgNi4wIG9yIDUuMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi0yMDAwIGFuZCBYUC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYueCBvciA1LnguCisyMDAwIGFuZCBYUC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYueCBvciA1LnggYW5kIFBsYXRmb3JtCitTREsgRmVicnVhcnkgMjAwMyBFZGl0aW9uIChDb3JlIFNESykuCiAoRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9yZWFkbWUudHh0LikKIAogQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5kc3ciIGluIE1TVkMrKywgc2VsZWN0CkBAIC0xMSw3ICsxMiw3IEBACiBUaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgogCiAxKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMjYue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCisgICAgICAgICAgICAgICBweXRob24yNy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKIAogMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKICAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCkBAIC0yMiw3ICsyMyw3IEBACiAgICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudDsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQogCiBXaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjI2X2QuZGxsLCBweXRob25fZC5leGUsIHB5ZXhwYXRfZC5weWQsIGFuZCBzbyBvbi4KK3RoZWlyIG5hbWU6ICBweXRob24yN19kLmRsbCwgcHl0aG9uX2QuZXhlLCBweWV4cGF0X2QucHlkLCBhbmQgc28gb24uCiAKIFNVQlBST0pFQ1RTCiAtLS0tLS0tLS0tLQpAQCAtMzksNyArNDAsNiBAQAogICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAogX21zaQogICAgIF9tc2kuYy4gWW91IG5lZWQgdG8gaW5zdGFsbCBXaW5kb3dzIEluc3RhbGxlciBTREsgdG8gYnVpbGQgdGhpcyBtb2R1bGUuCi0gICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL21zZG93bmxvYWQvcGxhdGZvcm1zZGsvc2RrdXBkYXRlL3BzZGstZnVsbC5odG0KIF9zb2NrZXQKICAgICBzb2NrZXRtb2R1bGUuYwogX3Rlc3RjYXBpCkBAIC0yMDIsMjEgKzIwMiwyNyBAQAogICAgIEdldCB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlIGZvciBPcGVuU1NMIGZyb20KICAgICAgICAgaHR0cDovL3d3dy5vcGVuc3NsLm9yZwogCi0gICAgWW91IChwcm9iYWJseSkgZG9uJ3Qgd2FudCB0aGUgImVuZ2luZSIgY29kZS4gIEZvciBleGFtcGxlLCBnZXQKLSAgICAgICAgb3BlbnNzbC0wLjkuOGcudGFyLmd6Ci0gICAgbm90Ci0gICAgICAgIG9wZW5zc2wtZW5naW5lLTAuOS44Zy50YXIuZ3oKKyAgICBZb3UgKHByb2JhYmx5KSBkb24ndCB3YW50IHRoZSAiZW5naW5lIiBjb2RlLiAgRm9yIGV4YW1wbGUsIGRvbid0IGdldAorICAgICAgICBvcGVuc3NsLWVuZ2luZS0wLjkuNmcudGFyLmd6CiAKICAgICBVbnBhY2sgaW50byB0aGUgImRpc3QiIGRpcmVjdG9yeSwgcmV0YWluaW5nIHRoZSBmb2xkZXIgbmFtZSBmcm9tCiAgICAgdGhlIGFyY2hpdmUgLSBmb3IgZXhhbXBsZSwgdGhlIGxhdGVzdCBzdGFibGUgT3BlblNTTCB3aWxsIGluc3RhbGwgYXMKLSAgICAgICAgZGlzdC9vcGVuc3NsLTAuOS44ZworICAgICAgICBkaXN0L29wZW5zc2wtMS4wLjBhCiAKICAgICBZb3UgY2FuICh0aGVvcmV0aWNhbGx5KSB1c2UgYW55IHZlcnNpb24gb2YgT3BlblNTTCB5b3UgbGlrZSAtIHRoZQogICAgIGJ1aWxkIHByb2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbGF0ZXN0IHZlcnNpb24uCiAKLSAgICBZb3UgbXVzdCBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCi0gICAgYXMgdGhpcyBpcyB1c2VkIGJ5IHRoZSBPcGVuU1NMIGJ1aWxkIHByb2Nlc3MuICBDb21wbGFpbiB0byB0aGVtIDx3aW5rPi4KKyAgICBZb3UgY2FuIGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIGZyb20KKyAgICAgICAgaHR0cDovL3d3dy5uYXNtLnVzLworICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc213LmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguCisgICAgTm90ZTogcmVjZW50IHJlbGVhc2VzIG9mIG5hc20gb25seSBoYXZlIG5hc20uZXhlLiBKdXN0IHJlbmFtZSBpdCB0byAKKyAgICBuYXNtdy5leGUuCisKKyAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KKyAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KKyAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbSAKKyAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKKyAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgogCiAgICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQy9WQzYvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KICAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTApkaWZmIC0tZ2l0IGEvUEMvVkM2L3NlbGVjdC5kc3AgYi9QQy9WQzYvc2VsZWN0LmRzcAppbmRleCBjNTM0NmMwLi5jMGM2ZTEyIDEwMDY0NAotLS0gYS9QQy9WQzYvc2VsZWN0LmRzcAorKysgYi9QQy9WQzYvc2VsZWN0LmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJzZWxlY3QiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9c2VsZWN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIgQ0ZHPSJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInNlbGVjdCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInNlbGVjdCINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNlbGVjdDExMyIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9zZWxlY3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNlbGVjdDExMyIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL25vZGVmYXVsdGxpYjoibXN2Y3J0IiAvb3V0OiIuL3NlbGVjdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KKyMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ic2VsZWN0IiAtIFBhY2thZ2UgT3duZXI9PDQ+CisjIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCisjICoqIERPIE5PVCBFRElUICoqCisKKyMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDIKKworQ0ZHPXNlbGVjdCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiLgorIU1FU1NBR0UgCishTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQorIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToKKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInNlbGVjdC5tYWsiIENGRz0ic2VsZWN0IC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpCishTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQorIU1FU1NBR0UgCisKKyMgQmVnaW4gUHJvamVjdAorIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKKyMgUFJPUCBTY2NfUHJvak5hbWUgInNlbGVjdCIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3MyXzMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3NlbGVjdC5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIERlYnVnIgorCisjIFBST1AgQkFTRSBVc2VfTUZDIDAKKyMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHNlbGVjdCIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorRjkwPWRmLmV4ZQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQKKyMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL291dDoiLi9zZWxlY3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRU5ESUYgCisKKyMgQmVnaW4gVGFyZ2V0CisKKyMgTmFtZSAic2VsZWN0IC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAic2VsZWN0IC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WQzYvdGNsODUyLnBhdGNoIGIvUEMvVkM2L3RjbDg1Mi5wYXRjaAppbmRleCAwYjZjNDY2Li5lZDY3ODBhIDEwMDY0NAotLS0gYS9QQy9WQzYvdGNsODUyLnBhdGNoCisrKyBiL1BDL1ZDNi90Y2w4NTIucGF0Y2gKQEAgLTksMTQgKzksMyBAQAogIHR5cGVkZWYgc3RydWN0IF9zdGF0aTY0CVRjbF9TdGF0QnVmOwogICMgICAgICAgICBlbHNlCiAgdHlwZWRlZiBzdHJ1Y3QgX3N0YXQ2NAlUY2xfU3RhdEJ1ZjsKLS0tLSB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCUZyaSBKdW4gMTMgMDM6MzU6MzkgMjAwOAotKysrIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJU3VuIEphbiAgNCAxNjo1MjozMCAyMDA5Ci1AQCAtMzY3LDcgKzM2Nyw3IEBACi0gdHlwZWRlZiBzdHJ1Y3Qgc3RhdGk2NCBUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZGVmaW5lIFRDTF9MTF9NT0RJRklFUgkiTCIKLSAjICAgICAgZWxzZSAvKiBfX0JPUkxBTkRDX18gKi8KLS0jICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwICYmICFkZWZpbmVkKF9NX0lYODYpCi0rIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAvKiYmICFkZWZpbmVkKF9NX0lYODYpKi8KLSB0eXBlZGVmIHN0cnVjdCBfc3RhdGk2NAlUY2xfU3RhdEJ1ZjsKLSAjICAgICAgICAgZWxzZQotIHR5cGVkZWYgc3RydWN0IF9zdGF0NjQJVGNsX1N0YXRCdWY7CmRpZmYgLS1naXQgYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwIGIvUEMvVkM2L3VuaWNvZGVkYXRhLmRzcAppbmRleCA4NTlmMzdiLi4zYjlhOGI3IDEwMDY0NAotLS0gYS9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCisrKyBiL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKQEAgLTEsOTkgKzEsOTkgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idW5pY29kZWRhdGEiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9dW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIgQ0ZHPSJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgInVuaWNvZGVkYXRhIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ1bmljb2RlZGF0YSIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz11bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAidW5pY29kZWRhdGEubWFrIiBDRkc9InVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJ1bmljb2RlZGF0YSIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciCisjIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYKKyMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTIwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YS5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdW5pY29kZWRhdGEiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi91bmljb2RlZGF0YV9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgInVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi93OXhwb3Blbi5kc3AgYi9QQy9WQzYvdzl4cG9wZW4uZHNwCmluZGV4IDg4NmEwZTUuLmVlNjNjYjkgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi93OXhwb3Blbi5kc3AKKysrIGIvUEMvVkM2L3c5eHBvcGVuLmRzcApAQCAtMSw5NyArMSw5NyBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3OXhwb3BlbiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz13OXhwb3BlbiAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3OXhwb3Blbi5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIiBDRkc9Inc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInc5eHBvcGVuIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHc5eHBvcGVuIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9tYWNoaW5lOkkzODYNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdzl4cG9wZW5fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3OXhwb3Blbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3OXhwb3BlbiIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIgMHgwMTAxCisKK0NGRz13OXhwb3BlbiAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIiBDRkc9Inc5eHBvcGVuIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICIiCisjIFBST1AgU2NjX0xvY2FsUGF0aCAiIgorQ1BQPWNsLmV4ZQorTVRMPW1pZGwuZXhlCitSU0M9cmMuZXhlCisKKyFJRiAgIiQoQ0ZHKSIgPT0gInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiCisjIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9tYWNoaW5lOkkzODYKKyMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQorCishRUxTRUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIKKworIyBQUk9QIEJBU0UgVXNlX01GQyAwCisjIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDEKKyMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciCisjIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiCisjIFBST1AgVXNlX01GQyAwCisjIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgT3V0cHV0X0RpciAiLiIKKyMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiIKKyMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCisjIFBST1AgVGFyZ2V0X0RpciAiIgorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MKKyMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jCisjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzIKKyMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciCisjIEFERCBSU0MgL2wgMHhjMDkgL2QgIl9ERUJVRyIKK0JTQzMyPWJzY21ha2UuZXhlCisjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28KKyMgQUREIEJTQzMyIC9ub2xvZ28KK0xJTkszMj1saW5rLmV4ZQorIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdAorIyBBREQgTElOSzMyIHVzZXIzMi5saWIgL25vbG9nbyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3c5eHBvcGVuX2QuZXhlIiAvcGRidHlwZTpzZXB0CisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVORElGIAorCisjIEJlZ2luIFRhcmdldAorCisjIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSIKKyMgTmFtZSAidzl4cG9wZW4gLSBXaW4zMiBEZWJ1ZyIKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPS4uXHc5eHBvcGVuLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEVuZCBUYXJnZXQKKyMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL1BDL1ZDNi93aW5zb3VuZC5kc3AgYi9QQy9WQzYvd2luc291bmQuZHNwCmluZGV4IDExODM2MDYuLjY4ZTgxNGMgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi93aW5zb3VuZC5kc3AKKysrIGIvUEMvVkM2L3dpbnNvdW5kLmRzcApAQCAtMSw5OSArMSw5OSBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3aW5zb3VuZCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz13aW5zb3VuZCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ3aW5zb3VuZC5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIiBDRkc9IndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIndpbnNvdW5kIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAid2luc291bmQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uXHBjIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgd2lubW0ubGliIHVzZXIzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDE2MDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmQucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3aW5zb3VuZCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIHdpbm1tLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5zb3VuZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJ3aW5zb3VuZCIgLSBQYWNrYWdlIE93bmVyPTw0PgorIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMAorIyAqKiBETyBOT1QgRURJVCAqKgorCisjIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyCisKK0NGRz13aW5zb3VuZCAtIFdpbjMyIERlYnVnCishTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsCishTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4KKyFNRVNTQUdFIAorIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIuCishTUVTU0FHRSAKKyFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFCishTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOgorIU1FU1NBR0UgCishTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIiBDRkc9IndpbnNvdW5kIC0gV2luMzIgRGVidWciCishTUVTU0FHRSAKKyFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOgorIU1FU1NBR0UgCishTUVTU0FHRSAid2luc291bmQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikKKyFNRVNTQUdFIAorCisjIEJlZ2luIFByb2plY3QKKyMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCisjIFBST1AgU2NjX1Byb2pOYW1lICJ3aW5zb3VuZCIKKyMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyIKK0NQUD1jbC5leGUKK01UTD1taWRsLmV4ZQorUlNDPXJjLmV4ZQorCishSUYgICIkKENGRykiID09ICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIgorIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSIKKyMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKKyMgUFJPUCBVc2VfTUZDIDAKKyMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKKyMgUFJPUCBPdXRwdXRfRGlyICIuIgorIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMgorIyBBREQgQkFTRSBSU0MgL2wgMHhjMDkgL2QgIk5ERUJVRyIKKyMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIgorQlNDMzI9YnNjbWFrZS5leGUKKyMgQUREIEJBU0UgQlNDMzIgL25vbG9nbworIyBBREQgQlNDMzIgL25vbG9nbworTElOSzMyPWxpbmsuZXhlCisjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9kbGwgL21hY2hpbmU6STM4NgorIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZC5weWQiCisjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUKKworIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgRGVidWciCisKKyMgUFJPUCBCQVNFIFVzZV9NRkMgMAorIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxCisjIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyIKKyMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIgorIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIgorIyBQUk9QIFVzZV9NRkMgMAorIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQorIyBQUk9QIE91dHB1dF9EaXIgIi4iCisjIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcd2luc291bmQiCisjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMAorIyBQUk9QIFRhcmdldF9EaXIgIiIKK0Y5MD1kZi5leGUKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYworIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyCisjIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIgorIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciCitCU0MzMj1ic2NtYWtlLmV4ZQorIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCisjIEFERCBCU0MzMiAvbm9sb2dvCitMSU5LMzI9bGluay5leGUKKyMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0CisjIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgd2lubW0ubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZF9kLnB5ZCIgL3BkYnR5cGU6c2VwdAorIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lCisKKyFFTkRJRiAKKworIyBCZWdpbiBUYXJnZXQKKworIyBOYW1lICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiCisjIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgRGVidWciCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0uLlx3aW5zb3VuZC5jCisjIEVuZCBTb3VyY2UgRmlsZQorIyBFbmQgVGFyZ2V0CisjIEVuZCBQcm9qZWN0CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fYnNkZGIudmNwcm9qIGIvUEMvVlM3LjEvX2JzZGRiLnZjcHJvagppbmRleCA0ZmI3OGRiLi5iNTM1ZTRjIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fYnNkZGIudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19ic2RkYi52Y3Byb2oKQEAgLTIxLDcgKzIxLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOyZxdW90Oy4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiZxdW90OyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtNzYsNyArNzYsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOyZxdW90Oy4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiZxdW90OyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOyZxdW90Oy4uXC4uXC4uXGRiLTQuNC4yMFxidWlsZF93aW4zMiZxdW90OyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsmcXVvdDsuLlwuLlwuLlxkYi00LjQuMjBcYnVpbGRfd2luMzImcXVvdDsiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagppbmRleCBiNGI5ZWQxLi43ZGFkM2UxIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagorKysgYi9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvagpAQCAtMjEsNyArMjEsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyIKIAkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgpAQCAtNzUsNyArNzUsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTkxLDcgKzE5MSw3IEBACiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagppbmRleCBmZDIzN2U1Li5iODViNWQyIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19jdHlwZXNfdGVzdC52Y3Byb2oKQEAgLTIwLDcgKzIwLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyIKIAkJCQlNaW5pbWFsUmVidWlsZD0iRkFMU0UiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgpAQCAtNzIsNyArNzIsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIgogCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKaW5kZXggZWRlNzAzZS4uZmUyMjEwMiAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgYi9QQy9WUzcuMS9fZWxlbWVudHRyZWUudmNwcm9qCkBAIC0yMiw3ICsyMiw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtNzUsNyArNzUsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX21zaS52Y3Byb2ogYi9QQy9WUzcuMS9fbXNpLnZjcHJvagppbmRleCBhZjI5NDUzLi5lY2JjYjg1IDEwMDY0NAotLS0gYS9QQy9WUzcuMS9fbXNpLnZjcHJvagorKysgYi9QQy9WUzcuMS9fbXNpLnZjcHJvagpAQCAtMjMsNyArMjMsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTCIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCkBAIC03OCw3ICs3OCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTMzLDcgKzEzMyw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE5Myw3ICsxOTMsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvaiBiL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCmluZGV4IGUzYTBjYzAuLjE1N2Q3ZDkgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCisrKyBiL1BDL1ZTNy4xL19zb2NrZXQudmNwcm9qCkBAIC0yMSw3ICsyMSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtNzUsNyArNzUsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCmluZGV4IDYyM2VjMzcuLmRlODZjNmYgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtNzcsNyArNzcsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTEzNSw3ICsxMzUsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsuLlwuLlxQQzsuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvaiBiL1BDL1ZTNy4xL190ZXN0Y2FwaS52Y3Byb2oKaW5kZXggNGIyZTI1Ny4uNTI2MTU5NyAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagorKysgYi9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCkBAIC0yMyw3ICsyMyw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qIGIvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCmluZGV4IGIxZmJhMDguLjA3ZmM2YzMgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL190a2ludGVyLnZjcHJvagorKysgYi9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCiAJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiCkBAIC03OCw3ICs3OCw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvYnoyLnZjcHJvaiBiL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKaW5kZXggNzkyYTJlOS4uYmRkMDg1ZCAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvYnoyLnZjcHJvagorKysgYi9QQy9WUzcuMS9iejIudmNwcm9qCkBAIC0yMiw3ICsyMiw3IEBACiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlwuLlxiemlwMi0xLjAuMyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtODAsNyArODAsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTQxLDcgKzE0MSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagppbmRleCBjODc1ZDNmLi43MWYwMDMyIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagorKysgYi9QQy9WUzcuMS9weWV4cGF0LnZjcHJvagpAQCAtMjEsNyArMjEsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIwIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCQkJV2FybmluZ0xldmVsPSIzIgpAQCAtNzQsNyArNzQsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xleHBhdCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagppbmRleCBhYTlmMjVkLi44MTRmOTFhIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagpAQCAtMjUsNyArMjUsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTM5LDE1ICszOSwxNSBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNi5kbGwiCisJCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNy5kbGwiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSIKLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjYucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24yNy5wZGIiCiAJCQkJU3ViU3lzdGVtPSIyIgogCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIgotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yNi5saWIiCisJCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI3LmxpYiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KQEAgLTg3LDcgKzg3LDcgQEAKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICIKIAkJCQlPcHRpbWl6YXRpb249IjAiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHO1VTRV9ETF9FWFBPUlQ7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztVU0VfRExfRVhQT1JUO1dJTjMyO19XSU5ET1dTIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgogCQkJCVdhcm5pbmdMZXZlbD0iMyIKQEAgLTk5LDE1ICs5OSwxNSBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob24yNl9kLmRsbCIKKwkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjI3X2QuZGxsIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI2X2QucGRiIgorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24yN19kLnBkYiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI2X2QubGliIgorCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yN19kLmxpYiIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4KQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1VTRV9ETF9FWFBPUlQiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xNjYsMTUgKzE2NiwxNSBAQAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjYuZGxsIgorCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjcuZGxsIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IkZBTFNFIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIgotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24yNi5wZGIiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI3LnBkYiIKIAkJCQlTdWJTeXN0ZW09IjIiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjI2LmxpYiIKKwkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjcubGliIgogCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIvPgpAQCAtMjE1LDcgKzIxNSw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTIzMywxNSArMjMzLDE1IEBACiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIgogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIgotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjYuZGxsIgorCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMjcuZGxsIgogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjI2LnBkYiIKKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMjcucGRiIgogCQkJCVN1YlN5c3RlbT0iMiIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCIKLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMjYubGliIgorCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24yNy5saWIiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMCIvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01JRExUb29sIi8+CkBAIC0zNjIsMTggKzM2MiwxMiBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2J5dGVzaW8uYyI+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Nzdi5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9maWxlaW8uYyI+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC0zODMsNiArMzc3LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaG90c2hvdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfanNvbi5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtMzkyLDYgKzM4OSw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNDQzLDE4ICs0NDMsMjcgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xib29sb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xidWZmZXJvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNTA5LDYgKzUxOCw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNTI0LDYgKzUzNiw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyI+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC01NjksOSArNTg0LDYgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0bXRpbWUuYyI+Ci0JCTwvRmlsZT4KLQkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQpAQCAtNjMyLDYgKzY0NCw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcaW50b2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTY2Miw2ICs2NzcsOSBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1kNW1vZHVsZS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTcyMiw2ICs3NDAsOSBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlhcmVuYS5jIj4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTc3MCw2ICs3OTEsOSBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3Ryb3Btb2R1bGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKQEAgLTc4OCw2ICs4MTIsOSBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIj4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiPgogCQk8L0ZpbGU+CiAJCTxGaWxlCkBAIC04MjEsOSArODQ4LDYgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyI+CiAJCTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x5dXZjb252ZXJ0LmMiPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiPgogCQk8L0ZpbGU+CiAJPC9GaWxlcz4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JlYWRtZS50eHQgYi9QQy9WUzcuMS9yZWFkbWUudHh0CmluZGV4IDliNzhlNmQuLmZkZDMwNTAgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3JlYWRtZS50eHQKKysrIGIvUEMvVlM3LjEvcmVhZG1lLnR4dApAQCAtMTIsNyArMTIsNyBAQAogVGhlIHByb3BlciBvcmRlciB0byBidWlsZCBzdWJwcm9qZWN0czoKIAogMSkgcHl0aG9uY29yZSAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIERMTCBhbmQgbGlicmFyeSBmaWxlcywKLSAgICAgICAgICAgICAgIHB5dGhvbjI2LntkbGwsIGxpYn0gaW4gUmVsZWFzZSBtb2RlKQorICAgICAgICAgICAgICAgcHl0aG9uMjcue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCiAgICAgICAgICAgICAgIE5PVEU6ICBpbiBwcmV2aW91cyByZWxlYXNlcywgdGhpcyBzdWJwcm9qZWN0IHdhcwogICAgICAgICAgICAgICBuYW1lZCBhZnRlciB0aGUgcmVsZWFzZSBudW1iZXIsIGUuZy4gcHl0aG9uMjAuCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgIHRlc3Qgc2xhdmU7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKIAogV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24yNl9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KK3RoZWlyIG5hbWU6ICBweXRob24yN19kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4KIAogU1VCUFJPSkVDVFMKIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qIGIvUEMvVlM3LjEvc2VsZWN0LnZjcHJvagppbmRleCA2YThhZjRlLi43OWMyNmYzIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCisrKyBiL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHO1dJTjMyO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTM1LDcgKzM1LDcgQEAKIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlPdXRwdXRGaWxlPSIuL3NlbGVjdC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKQEAgLTc4LDcgKzc4LDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCkBAIC04OSw3ICs4OSw3IEBACiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3RfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJCU9wdGltaXphdGlvbj0iMiIKIAkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7V0lOMzI7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCiAJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpAQCAtMTk2LDcgKzE5Niw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRztXSU4zMjtfV0lORE9XUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIgogCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qIGIvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCmluZGV4IDY4MmQwNmMuLmI2ZjI4MDggMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3VuaWNvZGVkYXRhLnZjcHJvagorKysgYi9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKQEAgLTIzLDcgKzIzLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSIKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiCiAJCQkJUnVudGltZUxpYnJhcnk9IjMiCiAJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCmRpZmYgLS1naXQgYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2ogYi9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKaW5kZXggNmJkOTI3My4uZWQxMzNmYiAxMDA2NDQKLS0tIGEvUEMvVlM3LjEvdzl4cG9wZW4udmNwcm9qCisrKyBiL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagpAQCAtMjEsNyArMjEsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiCiAJCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIgogCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIgpAQCAtNzEsNyArNzEsNyBAQAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qIGIvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCmluZGV4IDVlZTlhNDIuLjY2ZDI5YTMgMTAwNjQ0Ci0tLSBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagorKysgYi9QQy9WUzcuMS93aW5zb3VuZC52Y3Byb2oKQEAgLTIyLDcgKzIyLDcgQEAKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCU9wdGltaXphdGlvbj0iMCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyIKIAkJCQlSdW50aW1lTGlicmFyeT0iMyIKIAkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiIKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIgogCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIgpAQCAtMTMyLDcgKzEzMiw3IEBACiAJCQkJT3B0aW1pemF0aW9uPSIyIgogCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO1dJTlNPVU5EX0VYUE9SVFMiCiAJCQkJU3RyaW5nUG9vbGluZz0iVFJVRSIKIAkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiCiAJCQkJUnVudGltZUxpYnJhcnk9IjIiCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkJCQlPcHRpbWl6YXRpb249IjIiCiAJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyIKIAkJCQlTdHJpbmdQb29saW5nPSJUUlVFIgogCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCIKIAkJCQlSdW50aW1lTGlicmFyeT0iMiIKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKaW5kZXggZjNkMDU2NS4uZWU3NmFlYyAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKQEAgLTEsNTU3ICsxLDU1NyBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciDQotCVByb2plY3RHVUlEPSJ7OWU0OGIzMDAtMzdkMS0xMWRkLThjNDEtMDA1MDU2YzAwMDA4fSINCi0JUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xjb25uZWN0aW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHBpcGVfY29ubmVjdGlvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNvY2tldF9jb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvamVjdAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0iX211bHRpcHJvY2Vzc2luZyIKKwlQcm9qZWN0R1VJRD0iezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iCisJUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyIKKwlLZXl3b3JkPSJXaW4zMlByb2oiCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9Ing2NCIKKwkJLz4KKwk8L1BsYXRmb3Jtcz4KKwk8VG9vbEZpbGVzPgorCTwvVG9vbEZpbGVzPgorCTxDb25maWd1cmF0aW9ucz4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IkRlYnVnfHg2NCIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8eDY0IgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiIKKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0IgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJCVRhcmdldEVudmlyb25tZW50PSIzIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIgorCQkJCVRhcmdldE1hY2hpbmU9IjE3IgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIgorCQkJQ2hhcmFjdGVyU2V0PSIwIgorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwk8L0NvbmZpZ3VyYXRpb25zPgorCTxSZWZlcmVuY2VzPgorCTwvUmVmZXJlbmNlcz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IkhlYWRlciBGaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xjb25uZWN0aW9uLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwkJPEZpbHRlcgorCQkJTmFtZT0iU291cmNlIEZpbGVzIgorCQkJPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHBpcGVfY29ubmVjdGlvbi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzb2NrZXRfY29ubmVjdGlvbi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagppbmRleCBjYmQwMmNjLi5kOWU4OWM3IDEwMDY0NAotLS0gYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKKysrIGIvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCkBAIC00Miw3ICs0Miw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtMjI5LDcgKzIyOSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiCiAJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtNDE3LDcgKzQxNyw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgogCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiCiAJCQkvPgogCQkJPFRvb2wKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvaiBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCmluZGV4IGEwZGUwNGEuLjBiZDJlZTYgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCisrKyBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCkBAIC01NSw3ICs1NSw3IEBACiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiIKIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiCiAJCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSIKLQkJCQlSdW50aW1lTGlicmFyeT0iMiIKKwkJCQlSdW50aW1lTGlicmFyeT0iMCIKIAkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSIKIAkJCQlXYXJuaW5nTGV2ZWw9IjMiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKaW5kZXggY2I1YTc5Ny4uMjUzMWE1YiAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgYi9QQy9WUzguMC9idWlsZF9zc2wuYmF0CkBAIC0yLDEwICsyLDEwIEBACiBpZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCiAgIGlmICUxIEVRVSBEZWJ1ZyAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24yNl9kLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMjdfZC5kbGwgZXhpdCAxCiAgICkgRUxTRSAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMjYuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24yNy5kbGwgZXhpdCAxCiAgICkKICkKICVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKaW5kZXggYWI1ZmNlYS4uNjYzZTY1NSAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQpAQCAtOCw3ICs4LDcgQEAKICMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCiAjICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgogIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgorIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WUzguMCBkaXJlY3RvcnkuCiAjCiAjIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKICMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCkBAIC00Niw3ICs0Niw3IEBACiAjIGlzIGF2YWlsYWJsZS4KIGRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6CiAgICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4ocGVybCArICcgLWUgInVzZSBXaW4zMjsiJykKKyAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKICAgICAgICAgZmgucmVhZCgpCiAgICAgICAgIHJjID0gZmguY2xvc2UoKQogICAgICAgICBpZiByYzoKQEAgLTE3OCwxMiArMTc4LDEyIEBACiAgICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCiAgICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFsiXFxwZXJsXFxiaW4iLCAiQzpcXHBlcmxcXGJpbiJdKQogICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKLSAgICBpZiBwZXJsIGlzIE5vbmU6CisgICAgaWYgcGVybDoKKyAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKKyAgICBlbHNlOgogICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLQotICAgIHByaW50KCJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkpCiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgIyBMb29rIGZvciBTU0wgMiBsZXZlbHMgdXAgZnJvbSBwY2J1aWxkIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCisgICAgIyBMb29rIGZvciBTU0wgMyBsZXZlbHMgdXAgZnJvbSBQQy9WUzguMCAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgogICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCiAgICAgaWYgc3NsX2RpciBpcyBOb25lOgogICAgICAgICBzeXMuZXhpdCgxKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKaW5kZXggODM4MjgxOC4uZmVhZDY0MCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgYi9QQy9WUzguMC9iejIudmNwcm9qCkBAIC00Myw2ICs0Myw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNTIsMTIgKzUzLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyBta2RpciAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0xMDYsNiArMTA1LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0xMTUsMTIgKzExNSwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktRGVidWcgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktRGVidWdcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMTY5LDYgKzE2Nyw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMTc4LDEyICsxNzcsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0yMzMsNiArMjMwLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0yNDIsMTIgKzI0MCwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTI5Niw2ICsyOTIsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTMwNSwxMiArMzAyLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMzYwLDYgKzM1NSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMzY5LDEyICszNjUsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCkBAIC00MjQsNiArNDE4LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC00MzMsMTIgKzQyOCwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTQ4OCw2ICs0ODEsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTQ5NywxMiArNDkxLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtNTM5LDYgKzUzMSw1MCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9ImJ6aXAyIDEuMC41IEhlYWRlciBGaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliX3ByaXZhdGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJiemlwMiAxLjAuNSBTb3VyY2UgRmlsZXMiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNvbXByZXNzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcZGVjb21wcmVzcy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcaHVmZm1hbi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KIAk8L0ZpbGVzPgogCTxHbG9iYWxzPgogCTwvR2xvYmFscz4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMgYi9QQy9WUzguMC9kZWJ1Zy52c3Byb3BzCmluZGV4IGJjNjQzY2IuLjJiZTdmNzQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKKysrIGIvUEMvVlM4LjAvZGVidWcudnNwcm9wcwpAQCAtMSwxNSArMSwxNSBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImRlYnVnIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob25fZC5leGUiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9ImRlYnVnIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJLaWxsUHl0aG9uRXhlIgorCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCmluZGV4IDM4YzVmMTguLjkzYjk2ODcgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCkBAIC0xLDM0ICsxLDM0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icGdpbnN0cnVtZW50Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoT3V0RGlyUEdJKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLXBnaVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlGYXZvclNpemVPclNwZWVkPSIyIg0KLQkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiDQotCQlFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPSJmYWxzZSINCi0JCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0idHJ1ZSINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIg0KLQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCi0JCUxpbmtUaW1lQ29kZUdlbmVyYXRpb249IjIiDQotCQlQcm9maWxlR3VpZGVkRGF0YWJhc2U9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwkKFRhcmdldE5hbWUpLnBnZCINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iT3V0RGlyUEdJIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9InBnaW5zdHJ1bWVudCIKKwlPdXRwdXREaXJlY3Rvcnk9IiQoT3V0RGlyUEdJKSIKKwlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtcGdpXCQoUHJvamVjdE5hbWUpXCIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJT3B0aW1pemF0aW9uPSIyIgorCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSIKKwkJRmF2b3JTaXplT3JTcGVlZD0iMiIKKwkJT21pdEZyYW1lUG9pbnRlcnM9InRydWUiCisJCUVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM9ImZhbHNlIgorCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiCisJCVN0cmluZ1Bvb2xpbmc9InRydWUiCisJCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIgorCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJT3B0aW1pemVSZWZlcmVuY2VzPSIyIgorCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgorCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIgorCQlQcm9maWxlR3VpZGVkRGF0YWJhc2U9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnaVwkKFRhcmdldE5hbWUpLnBnZCIKKwkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJPdXREaXJQR0kiCisJCVZhbHVlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcIgorCS8+Cis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwppbmRleCAyNmNmYzJkLi43Y2U0YTNhIDEwMDY0NAotLS0gYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCisrKyBiL1BDL1ZTOC4wL3BndXBkYXRlLnZzcHJvcHMKQEAgLTEsMTQgKzEsMTQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ3VwZGF0ZSINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ29cIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChTb2x1dGlvbkRpcilccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcz0iIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iNCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0icGd1cGRhdGUiCisJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ29cIgorCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQlBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXM9IiIKKwkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iNCIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkLnZzcHJvcHMgYi9QQy9WUzguMC9weWQudnNwcm9wcwppbmRleCBiZmU2YmQ3Li5jZTAzOWViIDEwMDY0NAotLS0gYS9QQy9WUzguMC9weWQudnNwcm9wcworKysgYi9QQy9WUzguMC9weWQudnNwcm9wcwpAQCAtMSwyMyArMSwyOCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMiINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJweWQiCisJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiCisJPgorCTxUb29sCisJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRSIKKwkJUnVudGltZUxpYnJhcnk9IjIiCisJLz4KKwk8VG9vbAorCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiCisJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5wZGIiCisJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiIKKwkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiCisJLz4KKwk8VG9vbAorCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCIKKwkJRW1iZWRNYW5pZmVzdD0iZmFsc2UiCisJLz4KKwk8VG9vbAorCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJQ29tbWFuZExpbmU9IiIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZF9kLnZzcHJvcHMKaW5kZXggZjNhOTUxYy4uODUwODE1NiAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvcHlkX2QudnNwcm9wcworKysgYi9QQy9WUzguMC9weWRfZC52c3Byb3BzCkBAIC0xLDMxICsxLDM2IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlkX2QiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMCINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRSINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucHlkIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilweXRob25fZC5leGUiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9InB5ZF9kIgorCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJT3B0aW1pemF0aW9uPSIwIgorCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCIKKwkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIgorCQlSdW50aW1lTGlicmFyeT0iMyIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QucHlkIgorCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnBkYiIKKwkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIgorCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQlDb21tYW5kTGluZT0iIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJQeXRob25FeGUiCisJCVZhbHVlPSIkKFNvbHV0aW9uRGlyKXB5dGhvbl9kLmV4ZSIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcwppbmRleCA3MmI0NTllLi5mZmFlNDkwIDEwMDY0NAotLS0gYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcworKysgYi9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcwpAQCAtMSwxMTEgKzEsMTExIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHlwcm9qZWN0Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOyAuLlwuLlxQQyINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lOMzIiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJV2FybmluZ0xldmVsPSIzIg0KLQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCUNvbXBpbGVBcz0iMCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiQoT3V0RGlyKSINCi0JCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJU3ViU3lzdGVtPSIyIg0KLQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXEluY2x1ZGUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5RGxsTmFtZSINCi0JCVZhbHVlPSJweXRob24yNiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpXHB5dGhvbi5leGUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImV4dGVybmFsc0RpciINCi0JCVZhbHVlPSIuLlwuLlwuLiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnNkZGJEaXIiDQotCQlWYWx1ZT0iJChic2RkYjQ3RGlyKSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnNkZGJEZXBMaWJzIg0KLQkJVmFsdWU9IiQoYnNkZGI0N0RlcExpYnMpIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJic2RkYjQ0RGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxkYi00LjQuMjBcYnVpbGRfd2luMzIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJzZGRiNDREZXBMaWJzIg0KLQkJVmFsdWU9IiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnNkZGI0N0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcZGItNC43LjI1LjBcYnVpbGRfd2luZG93cyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnNkZGI0N0RlcExpYnMiDQotCQlWYWx1ZT0id3MyXzMyLmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNS45Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJiejJEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC41Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJvcGVuc3NsRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTAuOS44ZyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0RGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYiINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODUubGliICQodGNsdGtEaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGtMaWJEZWJ1ZyINCi0JCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0idGNsdGs2NExpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWIgJCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJweXByb2plY3QiCisJT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSIKKwlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlPcHRpbWl6YXRpb249IjIiCisJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7IC4uXC4uXFBDIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyIgorCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQlFeGNlcHRpb25IYW5kbGluZz0iMCIKKwkJUnVudGltZUxpYnJhcnk9IjAiCisJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQlXYXJuaW5nTGV2ZWw9IjMiCisJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCUNvbXBpbGVBcz0iMCIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJTGlua0luY3JlbWVudGFsPSIxIgorCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiCisJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChUYXJnZXROYW1lKS5wZGIiCisJCVN1YlN5c3RlbT0iMiIKKwkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIgorCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCIKKwkJVGFyZ2V0TWFjaGluZT0iMSIKKwkvPgorCTxUb29sCisJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXEluY2x1ZGUiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9IlB5RGxsTmFtZSIKKwkJVmFsdWU9InB5dGhvbjI3IgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJQeXRob25FeGUiCisJCVZhbHVlPSIkKFNvbHV0aW9uRGlyKVxweXRob24uZXhlIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJleHRlcm5hbHNEaXIiCisJCVZhbHVlPSIuLlwuLlwuLiIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iYnNkZGI0N0RpciIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxkYi00LjcuMjUuMFxidWlsZF93aW5kb3dzIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJic2RkYjQ3RGVwTGlicyIKKwkJVmFsdWU9IndzMl8zMi5saWIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImJzZGRiRGlyIgorCQlWYWx1ZT0iJChic2RkYjQ3RGlyKSIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iYnNkZGJEZXBMaWJzIgorCQlWYWx1ZT0iJChic2RkYjQ3RGVwTGlicykiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9ImJzZGRiNDREaXIiCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcZGItNC40LjIwXGJ1aWxkX3dpbjMyIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJic2RkYjQ0RGVwTGlicyIKKwkJVmFsdWU9IiIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0ic3FsaXRlM0RpciIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy42LjIxIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJiejJEaXIiCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjUiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9Im9wZW5zc2xEaXIiCisJCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0wLjkuOGwiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrRGlyIgorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJ0Y2x0azY0RGlyIgorCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrTGliIgorCQlWYWx1ZT0iJCh0Y2x0a0RpcilcbGliXHRjbDg1LmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NS5saWIiCisJLz4KKwk8VXNlck1hY3JvCisJCU5hbWU9InRjbHRrTGliRGVidWciCisJCVZhbHVlPSIkKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJ0Y2x0azY0TGliIgorCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciCisJCVZhbHVlPSIkKHRjbHRrNjREaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGs2NERpcilcbGliXHRrODVnLmxpYiIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagppbmRleCBiYTljMmVhLi4zOGY0MWRmIDEwMDY0NAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpAQCAtNzE1LDYgKzcxNSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR0b2EuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxlbnVtb2JqZWN0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtODUxLDYgKzg1NSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5Y3R5cGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtOTk1LDE0ICsxMDA3LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZmlsZWlvLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2J5dGVzaW8uYyIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTAyNyw2ICsxMDMxLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xMTcxLDE0ICsxMTgzLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x5dXYuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x5dXZjb252ZXJ0LmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTM1NCw2ICsxMzU4LDQyIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KKwkJCTxGaWx0ZXIKKwkJCQlOYW1lPSJfaW8iCisJCQkJPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ1ZmZlcmVkaW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGZpbGVpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xzdHJpbmdpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQk8L0ZpbHRlcj4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9Ik9iamVjdHMiCkBAIC0xMzc5LDcgKzE0MTksNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKQEAgLTE0NjcsNiArMTUwNywxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1ldGhvZG9iamVjdC5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE0OTksNiArMTU0MywxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ29iamVjdC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE2NTksNiArMTcxMSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNjk1LDEwICsxNzUxLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG10aW1lLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRvcHQuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNzUxLDYgKzE4MDMsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCmluZGV4IDA4ZGVmOTAuLjZkNjg0MmQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcworKysgYi9QQy9WUzguMC9yZWxlYXNlLnZzcHJvcHMKQEAgLTEsMTUgKzEsMTUgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+Cis8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgorCVZlcnNpb249IjguMDAiCisJTmFtZT0icmVsZWFzZSIKKwk+CisJPFRvb2wKKwkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkvPgorCTxVc2VyTWFjcm8KKwkJTmFtZT0iS2lsbFB5dGhvbkV4ZSIKKwkJVmFsdWU9IiQoT3V0RGlyKVxraWxsX3B5dGhvbi5leGUiCisJLz4JCis8L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qIGIvUEMvVlM4LjAvc2VsZWN0LnZjcHJvagppbmRleCBmYjI1YTU4Li40OWVjMmYwIDEwMDY0NAotLS0gYS9QQy9WUzguMC9zZWxlY3QudmNwcm9qCisrKyBiL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKQEAgLTU0LDcgKzU0LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMTE2LDcgKzExNiw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMzAzLDcgKzMwMyw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTM2Niw3ICszNjYsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKQEAgLTQyOSw3ICs0MjksNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC00OTIsNyArNDkyLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCmluZGV4IDA3MTU4OWEuLmU3ZTA3MjggMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCisrKyBiL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qCkBAIC0yMiw3ICsyMiw3IEBACiAJCTxDb25maWd1cmF0aW9uCiAJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKIAkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIgotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQk+CiAJCQk8VG9vbApAQCAtNDIsOCArNDIsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtODMsNyArODIsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iRGVidWd8eDY0IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQk+CiAJCQk8VG9vbApAQCAtMTA0LDggKzEwMyw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0xNDUsNyArMTQzLDcgQEAKIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzIgogCQkJQ2hhcmFjdGVyU2V0PSIwIgogCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIgogCQkJPgpAQCAtMTY2LDggKzE2NCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOSIKLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0yMDcsNyArMjA0LDcgQEAKIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlJlbGVhc2V8eDY0IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCiAJCQk+CkBAIC0yMjksOCArMjI2LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTI3MCw3ICsyNjYsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIgorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCiAJCQk+CkBAIC0yOTEsOCArMjg3LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDsuLlwuLlwuLlxzcWxpdGUtMy42LjIxJnF1b3Q7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0zMzIsNyArMzI3LDcgQEAKIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCiAJCQk+CkBAIC0zNTQsOCArMzQ5LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTM5NCw3ICszODgsNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiCiAJCQlDb25maWd1cmF0aW9uVHlwZT0iMiIKLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjAiCiAJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCiAJCQk+CkBAIC00MTUsOCArNDA5LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45IgotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTQ1Niw3ICs0NDksNyBAQAogCQk8Q29uZmlndXJhdGlvbgogCQkJTmFtZT0iUEdVcGRhdGV8eDY0IgogCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyIKIAkJCUNoYXJhY3RlclNldD0iMCIKIAkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKIAkJCT4KQEAgLTQ3OCw4ICs0NzEsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNTIzLDExICs1MTUsMTEgQEAKIAkJCU5hbWU9IkhlYWRlciBGaWxlcyIKIAkJCT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy41Ljlcc3FsaXRlMy5oIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOVxzcWxpdGUzZXh0LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTNleHQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgpAQCAtNTM1LDcgKzUyNyw3IEBACiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiCiAJCQk+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNS45XHNxbGl0ZTMuYyIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlMy5jIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMgYi9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3MTAyZAotLS0gL2Rldi9udWxsCisrKyBiL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcwpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJzcWxpdGUzIgorCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIgorCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iU1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCkiCisJCVdhcm5pbmdMZXZlbD0iMSIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAveDY0LnZzcHJvcHMgYi9QQy9WUzguMC94NjQudnNwcm9wcwppbmRleCA5Zjg4ZDQ0Li4wNzIwMDg0IDEwMDY0NAotLS0gYS9QQy9WUzguMC94NjQudnNwcm9wcworKysgYi9QQy9WUzguMC94NjQudnNwcm9wcwpAQCAtMSwyMiArMSwyMiBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9ImFtZDY0Ig0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpXGFtZDY0XCINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCUFkZGl0aW9uYWxPcHRpb25zPSIvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU42NDtfTV9YNjQiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoSE9TVF9QWVRIT04pIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOC4wMCIKKwlOYW1lPSJhbWQ2NCIKKwlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpXGFtZDY0XCIKKwlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIgorCT4KKwk8VG9vbAorCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1VTRUNMOk1TX09QVEVST04gL0dTLSIKKwkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU42NDtfTV9YNjQiCisJLz4KKwk8VG9vbAorCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCVRhcmdldE1hY2hpbmU9IjE3IgorCS8+CisJPFVzZXJNYWNybworCQlOYW1lPSJQeXRob25FeGUiCisJCVZhbHVlPSIkKEhPU1RfUFlUSE9OKSIKKwkvPgorPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0PgpkaWZmIC0tZ2l0IGEvUEMvX3N1YnByb2Nlc3MuYyBiL1BDL19zdWJwcm9jZXNzLmMKaW5kZXggNmIzNDE3NS4uNjc4MDM4MiAxMDA2NDQKLS0tIGEvUEMvX3N1YnByb2Nlc3MuYworKysgYi9QQy9fc3VicHJvY2Vzcy5jCkBAIC02NjksNCArNjY5LDUgQEAKICAgICBkZWZpbnQoZCwgIklORklOSVRFIiwgSU5GSU5JVEUpOwogICAgIGRlZmludChkLCAiV0FJVF9PQkpFQ1RfMCIsIFdBSVRfT0JKRUNUXzApOwogICAgIGRlZmludChkLCAiQ1JFQVRFX05FV19DT05TT0xFIiwgQ1JFQVRFX05FV19DT05TT0xFKTsKKyAgICBkZWZpbnQoZCwgIkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCIsIENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCk7CiB9CmRpZmYgLS1naXQgYS9QQy9fd2lucmVnLmMgYi9QQy9fd2lucmVnLmMKaW5kZXggMjkzZjFkZC4uNDQ1YzNlZCAxMDA2NDQKLS0tIGEvUEMvX3dpbnJlZy5jCisrKyBiL1BDL193aW5yZWcuYwpAQCAtODksNyArODksNyBAQAogImtleSBpcyB0aGUgcHJlZGVmaW5lZCBoYW5kbGUgdG8gY29ubmVjdCB0by5cbiIKICJcbiIKICJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCi0iSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOwogCiBQeURvY19TVFJWQVIoQ3JlYXRlS2V5X2RvYywKICJrZXkgPSBDcmVhdGVLZXkoa2V5LCBzdWJfa2V5KSAtIENyZWF0ZXMgb3Igb3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCkBAIC0xMDQsNiArMTA0LDIxIEBACiAiVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LlxuIgogIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKIAorUHlEb2NfU1RSVkFSKENyZWF0ZUtleUV4X2RvYywKKyJrZXkgPSBDcmVhdGVLZXlFeChrZXksIHN1Yl9rZXksIHJlcywgc2FtKSAtIENyZWF0ZXMgb3Igb3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCisiXG4iCisia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzXG4iCisic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBrZXkgdGhpcyBtZXRob2Qgb3BlbnMgb3IgY3JlYXRlcy5cbiIKKyJyZXMgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorInNhbSBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkXG4iCisiIElmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLFxuIgorIiB0aGUgaGFuZGxlIHJldHVybmVkIGlzIHRoZSBzYW1lIGtleSBoYW5kbGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbi5cbiIKKyJcbiIKKyJJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBleGlzdGluZyBrZXlcbiIKKyJcbiIKKyJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCisiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworCiBQeURvY19TVFJWQVIoRGVsZXRlS2V5X2RvYywKICJEZWxldGVLZXkoa2V5LCBzdWJfa2V5KSAtIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCiAiXG4iCkBAIC0xMTQsNyArMTI5LDIyIEBACiAiVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCiAiXG4iCiAiSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKLSJpcyByZW1vdmVkLiAgSWYgdGhlIG1ldGhvZCBmYWlscywgYW4gRW52aXJvbm1lbnRFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworImlzIHJlbW92ZWQuICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworCitQeURvY19TVFJWQVIoRGVsZXRlS2V5RXhfZG9jLAorIkRlbGV0ZUtleUV4KGtleSwgc3ViX2tleSwgc2FtLCByZXMpIC0gRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorInN1Yl9rZXkgaXMgYSBzdHJpbmcgdGhhdCBtdXN0IGJlIGEgc3Via2V5IG9mIHRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlci5cbiIKKyJyZXMgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorInNhbSBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkXG4iCisiIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgTm9uZSwgYW5kIHRoZSBrZXkgbWF5IG5vdCBoYXZlIHN1YmtleXMuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCisiXG4iCisiSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKKyJpcyByZW1vdmVkLiAgSWYgdGhlIG1ldGhvZCBmYWlscywgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbiIKKyJPbiB1bnN1cHBvcnRlZCBXaW5kb3dzIHZlcnNpb25zLCBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4iKTsKIAogUHlEb2NfU1RSVkFSKERlbGV0ZVZhbHVlX2RvYywKICJEZWxldGVWYWx1ZShrZXksIHZhbHVlKSAtIFJlbW92ZXMgYSBuYW1lZCB2YWx1ZSBmcm9tIGEgcmVnaXN0cnkga2V5LlxuIgpAQCAtMTI5LDcgKzE1OSw3IEBACiAiaW5kZXggaXMgYW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZSBrZXkgdG8gcmV0cmlldmUuXG4iCiAiXG4iCiAiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCi0iSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGFuIEVudmlyb25tZW50RXJyb3IgZXhjZXB0aW9uIGlzXG4iCisiSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGEgV2luZG93c0Vycm9yIGV4Y2VwdGlvbiBpc1xuIgogInJhaXNlZCwgaW5kaWNhdGluZyBubyBtb3JlIHZhbHVlcyBhcmUgYXZhaWxhYmxlLiIpOwogCiBQeURvY19TVFJWQVIoRW51bVZhbHVlX2RvYywKQEAgLTEzOCw3ICsxNjgsNyBAQAogImluZGV4IGlzIGFuIGludGVnZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4iCiAiXG4iCiAiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCi0iSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5LCB1bnRpbCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvblxuIgorIkl0IGlzIHR5cGljYWxseSBjYWxsZWQgcmVwZWF0ZWRseSwgdW50aWwgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uXG4iCiAiaXMgcmFpc2VkLCBpbmRpY2F0aW5nIG5vIG1vcmUgdmFsdWVzLlxuIgogIlxuIgogIlRoZSByZXN1bHQgaXMgYSB0dXBsZSBvZiAzIGl0ZW1zOlxuIgpAQCAtMTkyLDcgKzIyMiw3IEBACiAiIHNlY3VyaXR5IGFjY2VzcyBmb3IgdGhlIGtleS4gIERlZmF1bHQgaXMgS0VZX1JFQURcbiIKICJcbiIKICJUaGUgcmVzdWx0IGlzIGEgbmV3IGhhbmRsZSB0byB0aGUgc3BlY2lmaWVkIGtleVxuIgotIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gRW52aXJvbm1lbnRFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKIAogUHlEb2NfU1RSVkFSKE9wZW5LZXlFeF9kb2MsICJTZWUgT3BlbktleSgpIik7CiAKQEAgLTQxMSwxMCArNDQxLDggQEAKIFB5SEtFWV9wcmludEZ1bmMoUHlPYmplY3QgKm9iLCBGSUxFICpmcCwgaW50IGZsYWdzKQogewogICAgIFB5SEtFWU9iamVjdCAqcHloa2V5ID0gKFB5SEtFWU9iamVjdCAqKW9iOwotICAgIGNoYXIgcmVzQnVmWzE2MF07Ci0gICAgd3NwcmludGYocmVzQnVmLCAiPFB5SEtFWSBhdCAlcCAoJXApPiIsCi0gICAgICAgICAgICAgb2IsIHB5aGtleS0+aGtleSk7Ci0gICAgZnB1dHMocmVzQnVmLCBmcCk7CisgICAgZnByaW50ZihmcCwgIjxQeUhLRVkgYXQgJXAgKCVwKT4iLAorICAgICAgICBvYiwgcHloa2V5LT5oa2V5KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDIyLDkgKzQ1MCw3IEBACiBQeUhLRVlfc3RyRnVuYyhQeU9iamVjdCAqb2IpCiB7CiAgICAgUHlIS0VZT2JqZWN0ICpweWhrZXkgPSAoUHlIS0VZT2JqZWN0ICopb2I7Ci0gICAgY2hhciByZXNCdWZbMTYwXTsKLSAgICB3c3ByaW50ZihyZXNCdWYsICI8UHlIS0VZOiVwPiIsIHB5aGtleS0+aGtleSk7Ci0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVzQnVmKTsKKyAgICByZXR1cm4gUHlTdHJpbmdfRnJvbUZvcm1hdCgiPFB5SEtFWTolcD4iLCBweWhrZXktPmhrZXkpOwogfQogCiBzdGF0aWMgaW50CkBAIC00NzMsOSArNDk5LDIzIEBACiAgICAgUHlIS0VZX3VuYXJ5RmFpbHVyZUZ1bmMsICAgICAgICAgICAgLyogbmJfaGV4ICovCiB9OwogCitzdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9DbG9zZU1ldGhvZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOworc3RhdGljIFB5T2JqZWN0ICpQeUhLRVlfRGV0YWNoTWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitzdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9FbnRlcihQeU9iamVjdCAqc2VsZik7CitzdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9FeGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CiAKLS8qIGZ3ZCBkZWNsYXJlIF9fZ2V0YXR0cl9fICovCi1zdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9nZXRhdHRyKFB5T2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUHlIS0VZX21ldGhvZHNbXSA9IHsKKyAgICB7IkNsb3NlIiwgIFB5SEtFWV9DbG9zZU1ldGhvZCwgTUVUSF9WQVJBUkdTLCBQeUhLRVlfQ2xvc2VfZG9jfSwKKyAgICB7IkRldGFjaCIsIFB5SEtFWV9EZXRhY2hNZXRob2QsIE1FVEhfVkFSQVJHUywgUHlIS0VZX0RldGFjaF9kb2N9LAorICAgIHsiX19lbnRlcl9fIiwgKFB5Q0Z1bmN0aW9uKVB5SEtFWV9FbnRlciwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHsiX19leGl0X18iLCBQeUhLRVlfRXhpdCwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBQeUhLRVlfbWVtYmVybGlzdFtdID0geworICAgIHsiaGFuZGxlIiwgVF9QWVNTSVpFVCwgb2Zmc2V0b2YoUHlIS0VZT2JqZWN0LCBoa2V5KSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAgICAvKiBTZW50aW5lbCAqLworfTsKIAogLyogVGhlIHR5cGUgaXRzZWxmICovCiBQeVR5cGVPYmplY3QgUHlIS0VZX1R5cGUgPQpAQCAtNDg2LDcgKzUyNiw3IEBACiAgICAgMCwKICAgICBQeUhLRVlfZGVhbGxvY0Z1bmMsICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgUHlIS0VZX3ByaW50RnVuYywgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KLSAgICBQeUhLRVlfZ2V0YXR0ciwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICBQeUhLRVlfY29tcGFyZUZ1bmMsICAgICAgICAgICAgICAgICAvKiB0cF9jb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwpAQCAtNDk5LDE1ICs1MzksMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIFB5SEtFWV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotfTsKLQotI2RlZmluZSBPRkYoZSkgb2Zmc2V0b2YoUHlIS0VZT2JqZWN0LCBlKQotCi1zdGF0aWMgc3RydWN0IG1lbWJlcmxpc3QgUHlIS0VZX21lbWJlcmxpc3RbXSA9IHsKLSAgICB7ImhhbmRsZSIsICAgICAgVF9JTlQsICAgICAgT0ZGKGhrZXkpfSwKLSAgICB7TlVMTH0gICAgLyogU2VudGluZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIFB5SEtFWV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBQeUhLRVlfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NTQsMjggKzU5NSw2IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQeUhLRVlfbWV0aG9kc1tdID0gewotICAgIHsiQ2xvc2UiLCAgUHlIS0VZX0Nsb3NlTWV0aG9kLCBNRVRIX1ZBUkFSR1MsIFB5SEtFWV9DbG9zZV9kb2N9LAotICAgIHsiRGV0YWNoIiwgUHlIS0VZX0RldGFjaE1ldGhvZCwgTUVUSF9WQVJBUkdTLCBQeUhLRVlfRGV0YWNoX2RvY30sCi0gICAgeyJfX2VudGVyX18iLCAoUHlDRnVuY3Rpb24pUHlIS0VZX0VudGVyLCBNRVRIX05PQVJHUywgTlVMTH0sCi0gICAgeyJfX2V4aXRfXyIsIFB5SEtFWV9FeGl0LCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHtOVUxMfQotfTsKLQotLypzdGF0aWMqLyBQeU9iamVjdCAqCi1QeUhLRVlfZ2V0YXR0cihQeU9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqcmVzOwotCi0gICAgcmVzID0gUHlfRmluZE1ldGhvZChQeUhLRVlfbWV0aG9kcywgc2VsZiwgbmFtZSk7Ci0gICAgaWYgKHJlcyAhPSBOVUxMKQotICAgICAgICByZXR1cm4gcmVzOwotICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAiaGFuZGxlIikgPT0gMCkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cigoKFB5SEtFWU9iamVjdCAqKXNlbGYpLT5oa2V5KTsKLSAgICByZXR1cm4gUHlNZW1iZXJfR2V0KChjaGFyICopc2VsZiwgUHlIS0VZX21lbWJlcmxpc3QsIG5hbWUpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBUaGUgcHVibGljIFB5SEtFWSBBUEkgKHdlbGwsIG5vdCBwdWJsaWMgeWV0IDotKQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTAyNSw2ICsxMDQ0LDI5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitQeUNyZWF0ZUtleUV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIS0VZIGhLZXk7CisgICAgUHlPYmplY3QgKm9iS2V5OworICAgIGNoYXIgKnN1YktleTsKKyAgICBIS0VZIHJldEtleTsKKyAgICBpbnQgcmVzID0gMDsKKyAgICBSRUdTQU0gc2FtID0gS0VZX1dSSVRFOworICAgIGxvbmcgcmM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPenxpaTpDcmVhdGVLZXlFeCIsICZvYktleSwgJnN1YktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzLCAmc2FtKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJjID0gUmVnQ3JlYXRlS2V5RXgoaEtleSwgc3ViS2V5LCByZXMsIE5VTEwsIChEV09SRClOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW0sIE5VTEwsICZyZXRLZXksIE5VTEwpOworICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJDcmVhdGVLZXlFeCIpOworICAgIHJldHVybiBQeUhLRVlfRnJvbUhLRVkocmV0S2V5KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIFB5RGVsZXRlS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBIS0VZIGhLZXk7CkBAIC0xMDQzLDYgKzEwODUsNDYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK1B5RGVsZXRlS2V5RXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhLRVkgaEtleTsKKyAgICBQeU9iamVjdCAqb2JLZXk7CisgICAgSE1PRFVMRSBoTW9kOworICAgIHR5cGVkZWYgTE9ORyAoV0lOQVBJICpSREtFRnVuYykoSEtFWSwgY29uc3QgY2hhciosIFJFR1NBTSwgaW50KTsKKyAgICBSREtFRnVuYyBwZm4gPSBOVUxMOworICAgIGNoYXIgKnN1YktleTsKKyAgICBsb25nIHJjOworICAgIGludCByZXMgPSAwOworICAgIFJFR1NBTSBzYW0gPSBLRVlfV09XNjRfNjRLRVk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9zfGlpOkRlbGV0ZUtleUV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JLZXksICZzdWJLZXksICZzYW0sICZyZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKKyAgICAgICBkeW5hbWljYWxseS4gKi8KKyAgICBoTW9kID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKKyAgICBpZiAoaE1vZCkKKyAgICAgICAgcGZuID0gKFJES0VGdW5jKUdldFByb2NBZGRyZXNzKGhNb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZ0RlbGV0ZUtleUV4QSIpOworICAgIGlmICghcGZuKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJjID0gKCpwZm4pKGhLZXksIHN1YktleSwgc2FtLCByZXMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnRGVsZXRlS2V5RXgiKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBQeURlbGV0ZVZhbHVlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBIS0VZIGhLZXk7CkBAIC0xNTYwLDggKzE2NDIsOCBAQAogICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAotICAgIC8vIGR5bmFtaWNhbGx5LgorICAgIC8qIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0CisgICAgICAgZHluYW1pY2FsbHkuICovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7CiAgICAgaWYgKGhNb2QpCiAgICAgICAgIHBmbiA9IChSRFJLRnVuYylHZXRQcm9jQWRkcmVzcyhoTW9kLApAQCAtMTU5Niw4ICsxNjc4LDggQEAKICAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLy8gT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKLSAgICAvLyBkeW5hbWljYWxseS4KKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiAqLwogICAgIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGUoImFkdmFwaTMyLmRsbCIpOwogICAgIGlmIChoTW9kKQogICAgICAgICBwZm4gPSAoUkVSS0Z1bmMpR2V0UHJvY0FkZHJlc3MoaE1vZCwKQEAgLTE2MzMsOCArMTcxNSw4IEBACiAgICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8vIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0Ci0gICAgLy8gZHluYW1pY2FsbHkuCisgICAgLyogT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKKyAgICAgICBkeW5hbWljYWxseS4gKi8KICAgICBoTW9kID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKICAgICBpZiAoaE1vZCkKICAgICAgICAgcGZuID0gKFJRUktGdW5jKUdldFByb2NBZGRyZXNzKGhNb2QsCkBAIC0xNjUwLDE0ICsxNzMyLDE2IEBACiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdRdWVyeVJlZmxlY3Rpb25LZXkiKTsKLSAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJjKTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgd2lucmVnX21ldGhvZHNbXSA9IHsKICAgICB7IkNsb3NlS2V5IiwgICAgICAgICBQeUNsb3NlS2V5LCAgICAgICAgTUVUSF9WQVJBUkdTLCBDbG9zZUtleV9kb2N9LAogICAgIHsiQ29ubmVjdFJlZ2lzdHJ5IiwgIFB5Q29ubmVjdFJlZ2lzdHJ5LCBNRVRIX1ZBUkFSR1MsIENvbm5lY3RSZWdpc3RyeV9kb2N9LAogICAgIHsiQ3JlYXRlS2V5IiwgICAgICAgIFB5Q3JlYXRlS2V5LCAgICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUtleV9kb2N9LAorICAgIHsiQ3JlYXRlS2V5RXgiLCAgICAgIFB5Q3JlYXRlS2V5RXgsICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUtleUV4X2RvY30sCiAgICAgeyJEZWxldGVLZXkiLCAgICAgICAgUHlEZWxldGVLZXksICAgICAgIE1FVEhfVkFSQVJHUywgRGVsZXRlS2V5X2RvY30sCisgICAgeyJEZWxldGVLZXlFeCIsICAgICAgUHlEZWxldGVLZXlFeCwgICAgIE1FVEhfVkFSQVJHUywgRGVsZXRlS2V5RXhfZG9jfSwKICAgICB7IkRlbGV0ZVZhbHVlIiwgICAgICBQeURlbGV0ZVZhbHVlLCAgICAgTUVUSF9WQVJBUkdTLCBEZWxldGVWYWx1ZV9kb2N9LAogICAgIHsiRGlzYWJsZVJlZmxlY3Rpb25LZXkiLCBQeURpc2FibGVSZWZsZWN0aW9uS2V5LCBNRVRIX1ZBUkFSR1MsIERpc2FibGVSZWZsZWN0aW9uS2V5X2RvY30sCiAgICAgeyJFbmFibGVSZWZsZWN0aW9uS2V5IiwgIFB5RW5hYmxlUmVmbGVjdGlvbktleSwgIE1FVEhfVkFSQVJHUywgRW5hYmxlUmVmbGVjdGlvbktleV9kb2N9LApAQCAtMTcwOCw3ICsxNzkyLDggQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgUHlIS0VZX1R5cGUub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUhLRVlfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm47CiAgICAgUHlIS0VZX1R5cGUudHBfZG9jID0gUHlIS0VZX2RvYzsKICAgICBQeV9JTkNSRUYoJlB5SEtFWV9UeXBlKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkhLRVlUeXBlIiwKZGlmZiAtLWdpdCBhL1BDL2NvbmZpZy5jIGIvUEMvY29uZmlnLmMKaW5kZXggM2ZkOGRiNy4uMzVjNjYwOCAxMDA2NDQKLS0tIGEvUEMvY29uZmlnLmMKKysrIGIvUEMvY29uZmlnLmMKQEAgLTUyLDggKzUyLDYgQEAKIGV4dGVybiB2b2lkIGluaXRfd2lucmVnKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9zdHJ1Y3Qodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0ZGF0ZXRpbWUodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X2ZpbGVpbyh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfYnl0ZXNpbyh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfZnVuY3Rvb2xzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9qc29uKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdHpsaWIodm9pZCk7CkBAIC02OCw2ICs2Niw3IEBACiBleHRlcm4gdm9pZCBpbml0X3N1YnByb2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2xzcHJvZih2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfYXN0KHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CiAKIC8qIHRvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5IG1hcmtlciBmb3IgYWRkaXRpb25hbCAiZXh0ZXJuIiAqLwpAQCAtMTMyLDggKzEzMSw2IEBACiAgICAgeyJfd2lucmVnIiwgaW5pdF93aW5yZWd9LAogICAgIHsiX3N0cnVjdCIsIGluaXRfc3RydWN0fSwKICAgICB7ImRhdGV0aW1lIiwgaW5pdGRhdGV0aW1lfSwKLSAgICB7Il9maWxlaW8iLCBpbml0X2ZpbGVpb30sCi0gICAgeyJfYnl0ZXNpbyIsIGluaXRfYnl0ZXNpb30sCiAgICAgeyJfZnVuY3Rvb2xzIiwgaW5pdF9mdW5jdG9vbHN9LAogICAgIHsiX2pzb24iLCBpbml0X2pzb259LAogCkBAIC0xNjYsNiArMTYzLDggQEAKICAgICB7ImV4Y2VwdGlvbnMiLCBOVUxMfSwKICAgICB7Il93YXJuaW5ncyIsIF9QeVdhcm5pbmdzX0luaXR9LAogCisgICAgeyJfaW8iLCBpbml0X2lvfSwKKwogICAgIC8qIFNlbnRpbmVsICovCiAgICAgezAsIDB9CiB9OwpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvaiBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKaW5kZXggMTc3MTRlMy4uMDEyZjYzZSAxMDA2NDQKLS0tIGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagorKysgYi9QQy9leGFtcGxlX250L2V4YW1wbGUudmNwcm9qCkBAIC0zOSw3ICszOSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMjcubGliIgogCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCIKIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yNl9kLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24yN19kLmxpYiIKIAkJCQlPdXRwdXRGaWxlPSIuXERlYnVnL2V4YW1wbGVfZC5weWQiCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIgogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIKZGlmZiAtLWdpdCBhL1BDL21zdmNydG1vZHVsZS5jIGIvUEMvbXN2Y3J0bW9kdWxlLmMKaW5kZXggNDE4OTY1ZC4uMDU3OTAwZCAxMDA3NTUKLS0tIGEvUEMvbXN2Y3J0bW9kdWxlLmMKKysrIGIvUEMvbXN2Y3J0bW9kdWxlLmMKQEAgLTQzLDYgKzQzLDEyIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK1B5RG9jX1NUUlZBUihoZWFwbWluX2RvYywKKyJoZWFwbWluKCkgLT4gTm9uZVxuXAorXG5cCitGb3JjZSB0aGUgbWFsbG9jKCkgaGVhcCB0byBjbGVhbiBpdHNlbGYgdXAgYW5kIHJldHVybiB1bnVzZWQgYmxvY2tzXG5cCit0byB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gT24gZmFpbHVyZSwgdGhpcyByYWlzZXMgSU9FcnJvci4iKTsKKwogLy8gUGVyZm9ybSBsb2NraW5nIG9wZXJhdGlvbnMgb24gYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yLgogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9sb2NraW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTY1LDYgKzcxLDE3IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK1B5RG9jX1NUUlZBUihsb2NraW5nX2RvYywKKyJsb2NraW5nKGZkLCBtb2RlLCBuYnl0ZXMpIC0+IE5vbmVcblwKK1xuXAorTG9jayBwYXJ0IG9mIGEgZmlsZSBiYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQgZnJvbSB0aGUgQyBydW50aW1lLlxuXAorUmFpc2VzIElPRXJyb3Igb24gZmFpbHVyZS4gVGhlIGxvY2tlZCByZWdpb24gb2YgdGhlIGZpbGUgZXh0ZW5kcyBmcm9tXG5cCit0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGZvciBuYnl0ZXMgYnl0ZXMsIGFuZCBtYXkgY29udGludWUgYmV5b25kXG5cCit0aGUgZW5kIG9mIHRoZSBmaWxlLiBtb2RlIG11c3QgYmUgb25lIG9mIHRoZSBMS18qIGNvbnN0YW50cyBsaXN0ZWRcblwKK2JlbG93LiBNdWx0aXBsZSByZWdpb25zIGluIGEgZmlsZSBtYXkgYmUgbG9ja2VkIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dFxuXAorbWF5IG5vdCBvdmVybGFwLiBBZGphY2VudCByZWdpb25zIGFyZSBub3QgbWVyZ2VkOyB0aGV5IG11c3QgYmUgdW5sb2NrZWRcblwKK2luZGl2aWR1YWxseS4iKTsKKwogLy8gU2V0IHRoZSBmaWxlIHRyYW5zbGF0aW9uIG1vZGUgZm9yIGEgQyBydW50aW1lIGZpbGUgZGVzY3JpcHRvci4KIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfc2V0bW9kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC04MSw2ICs5OCwxMyBAQAogICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhmbGFncyk7CiB9CiAKK1B5RG9jX1NUUlZBUihzZXRtb2RlX2RvYywKKyJzZXRtb2RlKGZkLCBtb2RlKSAtPiBQcmV2aW91cyBtb2RlXG5cCitcblwKK1NldCB0aGUgbGluZS1lbmQgdHJhbnNsYXRpb24gbW9kZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gVG8gc2V0XG5cCitpdCB0byB0ZXh0IG1vZGUsIGZsYWdzIHNob3VsZCBiZSBvcy5PX1RFWFQ7IGZvciBiaW5hcnksIGl0IHNob3VsZCBiZVxuXAorb3MuT19CSU5BUlkuIik7CisKIC8vIENvbnZlcnQgYW4gT1MgZmlsZSBoYW5kbGUgdG8gYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yLgogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9vcGVuX29zZmhhbmRsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC05OSw2ICsxMjMsMTQgQEAKICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoZmQpOwogfQogCitQeURvY19TVFJWQVIob3Blbl9vc2ZoYW5kbGVfZG9jLAorIm9wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpIC0+IGZpbGUgZGVzY3JpcHRvclxuXAorXG5cCitDcmVhdGUgYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgaGFuZGxlIGhhbmRsZS4gVGhlXG5cCitmbGFncyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgYml0d2lzZSBPUiBvZiBvcy5PX0FQUEVORCwgb3MuT19SRE9OTFksXG5cCithbmQgb3MuT19URVhULiBUaGUgcmV0dXJuZWQgZmlsZSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyXG5cCit0byBvcy5mZG9wZW4oKSB0byBjcmVhdGUgYSBmaWxlIG9iamVjdC4iKTsKKwogLy8gQ29udmVydCBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IgdG8gYW4gT1MgZmlsZSBoYW5kbGUuCiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X2dldF9vc2ZoYW5kbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTA5LDYgKzE0MSw5IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk6Z2V0X29zZmhhbmRsZSIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworCiAgICAgaGFuZGxlID0gX2dldF9vc2ZoYW5kbGUoZmQpOwogICAgIGlmIChoYW5kbGUgPT0gLTEpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CkBAIC0xMTksNiArMTU0LDEyIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCopaGFuZGxlKTsKIH0KIAorUHlEb2NfU1RSVkFSKGdldF9vc2ZoYW5kbGVfZG9jLAorImdldF9vc2ZoYW5kbGUoZmQpIC0+IGZpbGUgaGFuZGxlXG5cCitcblwKK1JldHVybiB0aGUgZmlsZSBoYW5kbGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIFJhaXNlcyBJT0Vycm9yXG5cCitpZiBmZCBpcyBub3QgcmVjb2duaXplZC4iKTsKKwogLyogQ29uc29sZSBJL08gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEzMyw2ICsxNzQsMTEgQEAKICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcob2spOwogfQogCitQeURvY19TVFJWQVIoa2JoaXRfZG9jLAorImtiaGl0KCkgLT4gYm9vbFxuXAorXG5cCitSZXR1cm4gdHJ1ZSBpZiBhIGtleXByZXNzIGlzIHdhaXRpbmcgdG8gYmUgcmVhZC4iKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9nZXRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0xNDksNiArMTk1LDE2IEBACiAgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKHMsIDEpOwogfQogCitQeURvY19TVFJWQVIoZ2V0Y2hfZG9jLAorImdldGNoKCkgLT4ga2V5IGNoYXJhY3RlclxuXAorXG5cCitSZWFkIGEga2V5cHJlc3MgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGNoYXJhY3Rlci4gTm90aGluZyBpcyBlY2hvZWQgdG9cblwKK3RoZSBjb25zb2xlLiBUaGlzIGNhbGwgd2lsbCBibG9jayBpZiBhIGtleXByZXNzIGlzIG5vdCBhbHJlYWR5XG5cCithdmFpbGFibGUsIGJ1dCB3aWxsIG5vdCB3YWl0IGZvciBFbnRlciB0byBiZSBwcmVzc2VkLiBJZiB0aGUgcHJlc3NlZCBrZXlcblwKK3dhcyBhIHNwZWNpYWwgZnVuY3Rpb24ga2V5LCB0aGlzIHdpbGwgcmV0dXJuICdcXDAwMCcgb3IgJ1xceGUwJzsgdGhlIG5leHRcblwKK2NhbGwgd2lsbCByZXR1cm4gdGhlIGtleWNvZGUuIFRoZSBDb250cm9sLUMga2V5cHJlc3MgY2Fubm90IGJlIHJlYWQgd2l0aFxuXAordGhpcyBmdW5jdGlvbi4iKTsKKwogI2lmZGVmIF9XQ09OSU9fREVGSU5FRAogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9nZXR3Y2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTY1LDYgKzIyMSwxMSBAQAogICAgIHVbMF0gPSBjaDsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHUsIDEpOwogfQorCitQeURvY19TVFJWQVIoZ2V0d2NoX2RvYywKKyJnZXR3Y2goKSAtPiBVbmljb2RlIGtleSBjaGFyYWN0ZXJcblwKK1xuXAorV2lkZSBjaGFyIHZhcmlhbnQgb2YgZ2V0Y2goKSwgcmV0dXJuaW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKICNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTgzLDYgKzI0NCwxMiBAQAogICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShzLCAxKTsKIH0KIAorUHlEb2NfU1RSVkFSKGdldGNoZV9kb2MsCisiZ2V0Y2hlKCkgLT4ga2V5IGNoYXJhY3RlclxuXAorXG5cCitTaW1pbGFyIHRvIGdldGNoKCksIGJ1dCB0aGUga2V5cHJlc3Mgd2lsbCBiZSBlY2hvZWQgaWYgaXQgcmVwcmVzZW50c1xuXAorYSBwcmludGFibGUgY2hhcmFjdGVyLiIpOworCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X2dldHdjaGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTk5LDYgKzI2NiwxMSBAQAogICAgIHNbMF0gPSBjaDsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHMsIDEpOwogfQorCitQeURvY19TVFJWQVIoZ2V0d2NoZV9kb2MsCisiZ2V0d2NoZSgpIC0+IFVuaWNvZGUga2V5IGNoYXJhY3RlclxuXAorXG5cCitXaWRlIGNoYXIgdmFyaWFudCBvZiBnZXRjaGUoKSwgcmV0dXJuaW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKICNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjE0LDYgKzI4NiwxMSBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCitQeURvY19TVFJWQVIocHV0Y2hfZG9jLAorInB1dGNoKGNoYXIpIC0+IE5vbmVcblwKK1xuXAorUHJpbnQgdGhlIGNoYXJhY3RlciBjaGFyIHRvIHRoZSBjb25zb2xlIHdpdGhvdXQgYnVmZmVyaW5nLiIpOworCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgogbXN2Y3J0X3B1dHdjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0yMzMsNiArMzEwLDExIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIH0KKworUHlEb2NfU1RSVkFSKHB1dHdjaF9kb2MsCisicHV0d2NoKHVuaWNvZGVfY2hhcikgLT4gTm9uZVxuXAorXG5cCitXaWRlIGNoYXIgdmFyaWFudCBvZiBwdXRjaCgpLCBhY2NlcHRpbmcgYSBVbmljb2RlIHZhbHVlLiIpOwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDksNiArMzMxLDEyIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK1B5RG9jX1NUUlZBUih1bmdldGNoX2RvYywKKyJ1bmdldGNoKGNoYXIpIC0+IE5vbmVcblwKK1xuXAorQ2F1c2UgdGhlIGNoYXJhY3RlciBjaGFyIHRvIGJlIFwicHVzaGVkIGJhY2tcIiBpbnRvIHRoZSBjb25zb2xlIGJ1ZmZlcjtcblwKK2l0IHdpbGwgYmUgdGhlIG5leHQgY2hhcmFjdGVyIHJlYWQgYnkgZ2V0Y2goKSBvciBnZXRjaGUoKS4iKTsKKwogI2lmZGVmIF9XQ09OSU9fREVGSU5FRAogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF91bmdldHdjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0yNjMsNiArMzUxLDExIEBACiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQorCitQeURvY19TVFJWQVIodW5nZXR3Y2hfZG9jLAorInVuZ2V0d2NoKHVuaWNvZGVfY2hhcikgLT4gTm9uZVxuXAorXG5cCitXaWRlIGNoYXIgdmFyaWFudCBvZiB1bmdldGNoKCksIGFjY2VwdGluZyBhIFVuaWNvZGUgdmFsdWUuIik7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKQEAgLTI4MiwyMSArMzc1LDIxIEBACiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1zdmNydF9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImhlYXBtaW4iLCAgICAgICAgICAgICAgICAgbXN2Y3J0X2hlYXBtaW4sIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2NraW5nIiwgICAgICAgICAgICAgbXN2Y3J0X2xvY2tpbmcsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzZXRtb2RlIiwgICAgICAgICAgICAgICAgIG1zdmNydF9zZXRtb2RlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsib3Blbl9vc2ZoYW5kbGUiLCAgICAgICAgICBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnZXRfb3NmaGFuZGxlIiwgICAgICAgICAgIG1zdmNydF9nZXRfb3NmaGFuZGxlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsia2JoaXQiLCAgICAgICAgICAgICAgICAgICBtc3ZjcnRfa2JoaXQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnZXRjaCIsICAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXRjaCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldGNoZSIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldGNoZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InB1dGNoIiwgICAgICAgICAgICAgICAgICAgbXN2Y3J0X3B1dGNoLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsidW5nZXRjaCIsICAgICAgICAgICAgICAgICBtc3ZjcnRfdW5nZXRjaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImhlYXBtaW4iLCAgICAgICAgICAgICAgICAgbXN2Y3J0X2hlYXBtaW4sIE1FVEhfVkFSQVJHUywgaGVhcG1pbl9kb2N9LAorICAgIHsibG9ja2luZyIsICAgICAgICAgICAgIG1zdmNydF9sb2NraW5nLCBNRVRIX1ZBUkFSR1MsIGxvY2tpbmdfZG9jfSwKKyAgICB7InNldG1vZGUiLCAgICAgICAgICAgICAgICAgbXN2Y3J0X3NldG1vZGUsIE1FVEhfVkFSQVJHUywgc2V0bW9kZV9kb2N9LAorICAgIHsib3Blbl9vc2ZoYW5kbGUiLCAgICAgICAgICBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHUywgb3Blbl9vc2ZoYW5kbGVfZG9jfSwKKyAgICB7ImdldF9vc2ZoYW5kbGUiLCAgICAgICAgICAgbXN2Y3J0X2dldF9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHUywgZ2V0X29zZmhhbmRsZV9kb2N9LAorICAgIHsia2JoaXQiLCAgICAgICAgICAgICAgICAgICBtc3ZjcnRfa2JoaXQsIE1FVEhfVkFSQVJHUywga2JoaXRfZG9jfSwKKyAgICB7ImdldGNoIiwgICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldGNoLCBNRVRIX1ZBUkFSR1MsIGdldGNoX2RvY30sCisgICAgeyJnZXRjaGUiLCAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXRjaGUsIE1FVEhfVkFSQVJHUywgZ2V0Y2hlX2RvY30sCisgICAgeyJwdXRjaCIsICAgICAgICAgICAgICAgICAgIG1zdmNydF9wdXRjaCwgTUVUSF9WQVJBUkdTLCBwdXRjaF9kb2N9LAorICAgIHsidW5nZXRjaCIsICAgICAgICAgICAgICAgICBtc3ZjcnRfdW5nZXRjaCwgTUVUSF9WQVJBUkdTLCB1bmdldGNoX2RvY30sCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECi0gICAgeyJnZXR3Y2giLCAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2gsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnZXR3Y2hlIiwgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2hlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicHV0d2NoIiwgICAgICAgICAgICAgICAgICBtc3ZjcnRfcHV0d2NoLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsidW5nZXR3Y2giLCAgICAgICAgICAgICAgICBtc3ZjcnRfdW5nZXR3Y2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXR3Y2giLCAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2gsIE1FVEhfVkFSQVJHUywgZ2V0d2NoX2RvY30sCisgICAgeyJnZXR3Y2hlIiwgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2hlLCBNRVRIX1ZBUkFSR1MsIGdldHdjaGVfZG9jfSwKKyAgICB7InB1dHdjaCIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X3B1dHdjaCwgTUVUSF9WQVJBUkdTLCBwdXR3Y2hfZG9jfSwKKyAgICB7InVuZ2V0d2NoIiwgICAgICAgICAgICAgICAgbXN2Y3J0X3VuZ2V0d2NoLCBNRVRIX1ZBUkFSR1MsIHVuZ2V0d2NoX2RvY30sCiAjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICAgICAgTlVMTH0KIH07CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvTWFrZWZpbGUgYi9QQy9vczJlbXgvTWFrZWZpbGUKaW5kZXggZmYwNGY3Mi4uYmYyZTQ4NiAxMDA2NDQKLS0tIGEvUEMvb3MyZW14L01ha2VmaWxlCisrKyBiL1BDL29zMmVteC9NYWtlZmlsZQpAQCAtMjM3LDcgKzIzNyw3IEBACiAKICMgT3V0cHV0IGZpbGUgbmFtZXMKIFBZVEhPTl9WRVI9CTIuNgotUFlUSE9OX0xJQj0JcHl0aG9uMjYKK1BZVEhPTl9MSUI9CXB5dGhvbjI3CiBQWVRIT04uTElCPQkkKFBZVEhPTl9MSUIpX3MkQQogUFlUSE9OLklNUExJQj0JJChQWVRIT05fTElCKSRBCiBpZmVxICgkKEVYRU9NRikseWVzKQpAQCAtMzUxLDcgKzM1MSw2IEBACiAJCVB5dGhvbi9nZXRhcmdzLmMgXAogCQlQeXRob24vZ2V0Y29tcGlsZXIuYyBcCiAJCVB5dGhvbi9nZXRjb3B5cmlnaHQuYyBcCi0JCVB5dGhvbi9nZXRtdGltZS5jIFwKIAkJUHl0aG9uL2dldHBsYXRmb3JtLmMgXAogCQlQeXRob24vZ2V0dmVyc2lvbi5jIFwKIAkJUHl0aG9uL2dyYW1pbml0LmMgXApAQCAtMzYzLDYgKzM2Miw3IEBACiAJCVB5dGhvbi9teXN0cnRvdWwuYyBcCiAJCVB5dGhvbi9wZWVwaG9sZS5jIFwKIAkJUHl0aG9uL3B5YXJlbmEuYyBcCisJCVB5dGhvbi9weWN0eXBlLmMgXAogCQlQeXRob24vcHlmcGUuYyBcCiAJCVB5dGhvbi9weW1hdGguYyBcCiAJCVB5dGhvbi9weXN0YXRlLmMgXApAQCAtMzg0LDYgKzM4NCw3IEBACiAJCU9iamVjdHMvYnl0ZXNfbWV0aG9kcy5jIFwKIAkJT2JqZWN0cy9jZWxsb2JqZWN0LmMgXAogCQlPYmplY3RzL2NsYXNzb2JqZWN0LmMgXAorCQlPYmplY3RzL2NhcHN1bGUuYyBcCiAJCU9iamVjdHMvY29iamVjdC5jIFwKIAkJT2JqZWN0cy9jb2Rlb2JqZWN0LmMgXAogCQlPYmplY3RzL2NvbXBsZXhvYmplY3QuYyBcCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteCBiL1BDL29zMmVteC9SRUFETUUub3MyZW14CmluZGV4IGUxODY3OTAuLjA4OTRhNTAgMTAwNjQ0Ci0tLSBhL1BDL29zMmVteC9SRUFETUUub3MyZW14CisrKyBiL1BDL29zMmVteC9SRUFETUUub3MyZW14CkBAIC0zMDksNyArMzA5LDcgQEAKICAgIHRvIGJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSwgc2V0IAogICAgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSBFWEVfRElSIHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkuCiAKLTMuIElmIHlvdSB3aXNoIHRoZSBQeXRob24gY29yZSBETEwgKHB5dGhvbjI2LmRsbCkgdG8gYmUgaW5zdGFsbGVkIGluIGEgCiszLiBJZiB5b3Ugd2lzaCB0aGUgUHl0aG9uIGNvcmUgRExMIChweXRob24yNy5kbGwpIHRvIGJlIGluc3RhbGxlZCBpbiBhIAogICAgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgUHl0aG9uIGV4ZWN1dGFibGVzIGFyZSAKICAgIGluc3RhbGxlZCAoYnkgZGVmYXVsdCwgdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5KSwgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgCiAgICBNYWtlZmlsZSB2YXJpYWJsZSBETExfRElSIHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkuICBUaGlzIERMTCBtdXN0IApkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbjI2LmRlZiBiL1BDL29zMmVteC9weXRob24yNy5kZWYKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gUEMvb3MyZW14L3B5dGhvbjI2LmRlZgpyZW5hbWUgdG8gUEMvb3MyZW14L3B5dGhvbjI3LmRlZgppbmRleCAyNzk1MDUwLi41NDc3Y2QyIDEwMDY0NAotLS0gYS9QQy9vczJlbXgvcHl0aG9uMjYuZGVmCisrKyBiL1BDL29zMmVteC9weXRob24yNy5kZWYKQEAgLTEsNTQgKzEsNTQgQEAKLUxJQlJBUlkgcHl0aG9uMjYgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKK0xJQlJBUlkgcHl0aG9uMjcgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKIERFU0NSSVBUSU9OICJQeXRob24gMi42IENvcmUgRExMIiAKIFBST1RNT0RFIAogREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgCiBFWFBPUlRTIAogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY29uZmlnKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvbmZpZykKICAgIl9QeUltcG9ydF9Jbml0dGFiIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZGxmY24pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZGxmY24pCiA7ICAiZGxvcGVuIgogOyAgImRsc3ltIgogOyAgImRsY2xvc2UiCiA7ICAiZGxlcnJvciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldHBhdGhwKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGdldHBhdGhwKQogICAiUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoIgogICAiUHlfR2V0UHJlZml4IgogICAiUHlfR2V0RXhlY1ByZWZpeCIKICAgIlB5X0dldFBhdGgiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnZXRidWlsZGluZm8pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0YnVpbGRpbmZvKQogICAiUHlfR2V0QnVpbGRJbmZvIgogICAiX1B5X3N2bnZlcnNpb24iCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihtYWluKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1haW4pCiAgICJQeV9NYWluIgogICAiUHlfR2V0QXJnY0FyZ3YiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihhY2NlbGVyKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGFjY2VsZXIpCiAgICJQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzIgogICAiUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdyYW1tYXIxKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGdyYW1tYXIxKQogICAiUHlHcmFtbWFyX0ZpbmRERkEiCiAgICJQeUdyYW1tYXJfTGFiZWxSZXByIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobGlzdG5vZGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobGlzdG5vZGUpCiAgICJQeU5vZGVfTGlzdFRyZWUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihub2RlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG5vZGUpCiAgICJQeU5vZGVfTmV3IgogICAiUHlOb2RlX0FkZENoaWxkIgogICAiUHlOb2RlX0ZyZWUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihwYXJzZXIpCis7IEZyb20gcHl0aG9uMjdfcy5saWIocGFyc2VyKQogICAiUHlQYXJzZXJfQWRkVG9rZW4iCiAgICJQeVBhcnNlcl9OZXciCiAgICJQeVBhcnNlcl9EZWxldGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihwYXJzZXRvaykKKzsgRnJvbSBweXRob24yN19zLmxpYihwYXJzZXRvaykKICAgIlB5X1RhYmNoZWNrRmxhZyIKICAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nIgogICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgpAQCAtNTYsMTggKzU2LDE4IEBACiAgICJQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyIKICAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihiaXRzZXQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYml0c2V0KQogICAiX1B5X25ld2JpdHNldCIKICAgIl9QeV9kZWxiaXRzZXQiCiAgICJfUHlfYWRkYml0IgogICAiX1B5X3NhbWViaXRzZXQiCiAgICJfUHlfbWVyZ2ViaXRzZXQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihtZXRhZ3JhbW1hcikKKzsgRnJvbSBweXRob24yN19zLmxpYihtZXRhZ3JhbW1hcikKICAgIl9QeV9tZXRhX2dyYW1tYXIiCiAgICJQeV9tZXRhX2dyYW1tYXIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0b2tlbml6ZXIpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodG9rZW5pemVyKQogICAiUHlUb2tlbl9PbmVDaGFyIgogICAiUHlUb2tlbl9Ud29DaGFycyIKICAgIlB5VG9rZW5fVGhyZWVDaGFycyIKQEAgLTc3LDE0ICs3NywxNCBAQAogICAiUHlUb2tlbml6ZXJfR2V0IgogICAiX1B5UGFyc2VyX1Rva2VuTmFtZXMiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihteXJlYWRsaW5lKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG15cmVhZGxpbmUpCiAgICJfUHlPU19SZWFkbGluZVRTdGF0ZSIKICAgIlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIiCiAgICJQeU9TX1N0ZGlvUmVhZGxpbmUiCiAgICJQeU9TX1JlYWRsaW5lIgogICAiUHlPU19JbnB1dEhvb2siCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihhYnN0cmFjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihhYnN0cmFjdCkKICAgIl9QeU9iamVjdF9MZW5ndGhIaW50IgogICAiUHlNYXBwaW5nX1NpemUiCiAgICJQeU9iamVjdF9DYWxsTWV0aG9kIgpAQCAtMTc1LDEzICsxNzUsMTMgQEAKICAgIlB5T2JqZWN0X0lzSW5zdGFuY2UiCiAgICJQeU9iamVjdF9Jc1N1YmNsYXNzIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoYm9vbG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihib29sb2JqZWN0KQogICAiUHlCb29sX0Zyb21Mb25nIgogICAiUHlCb29sX1R5cGUiCiAgICJfUHlfWmVyb1N0cnVjdCIKICAgIl9QeV9UcnVlU3RydWN0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoYnVmZmVyb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGJ1ZmZlcm9iamVjdCkKICAgIlB5QnVmZmVyX0Zyb21PYmplY3QiCiAgICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IgogICAiUHlCdWZmZXJfRnJvbU1lbW9yeSIKQEAgLTE4OSwxMyArMTg5LDEzIEBACiAgICJQeUJ1ZmZlcl9OZXciCiAgICJQeUJ1ZmZlcl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY2VsbG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihjZWxsb2JqZWN0KQogICAiUHlDZWxsX05ldyIKICAgIlB5Q2VsbF9HZXQiCiAgICJQeUNlbGxfU2V0IgogICAiUHlDZWxsX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjbGFzc29iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihjbGFzc29iamVjdCkKICAgIlB5Q2xhc3NfTmV3IgogICAiUHlDbGFzc19Jc1N1YmNsYXNzIgogICAiUHlJbnN0YW5jZV9OZXciCkBAIC0yMTAsNyArMjEwLDIwIEBACiAgICJQeUluc3RhbmNlX1R5cGUiCiAgICJQeU1ldGhvZF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY29iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihjYXBzdWxlKQorICAiUHlDYXBzdWxlX0dldENvbnRleHQiCisgICJQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvciIKKyAgIlB5Q2Fwc3VsZV9HZXROYW1lIgorICAiUHlDYXBzdWxlX0dldFBvaW50ZXIiCisgICJQeUNhcHN1bGVfSW1wb3J0IgorICAiUHlDYXBzdWxlX0lzVmFsaWQiCisgICJQeUNhcHN1bGVfTmV3IgorICAiUHlDYXBzdWxlX1NldENvbnRleHQiCisgICJQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvciIKKyAgIlB5Q2Fwc3VsZV9TZXROYW1lIgorICAiUHlDYXBzdWxlX1NldFBvaW50ZXIiCisKKzsgRnJvbSBweXRob24yN19zLmxpYihjb2JqZWN0KQogICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyIgogICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYyIKICAgIlB5Q09iamVjdF9Bc1ZvaWRQdHIiCkBAIC0yMTksMTMgKzIzMiwxMyBAQAogICAiUHlDT2JqZWN0X1NldFZvaWRQdHIiCiAgICJQeUNPYmplY3RfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNvZGVvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoY29kZW9iamVjdCkKICAgIlB5Q29kZV9OZXciCiAgICJQeUNvZGVfQWRkcjJMaW5lIgogICAiUHlDb2RlX0NoZWNrTGluZU51bWJlciIKICAgIlB5Q29kZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY29tcGxleG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihjb21wbGV4b2JqZWN0KQogICAiX1B5X2NfcG93IgogICAiX1B5X2Nfc3VtIgogICAiX1B5X2NfZGlmZiIKQEAgLTIzOSw3ICsyNTIsNyBAQAogICAiUHlDb21wbGV4X0FzQ0NvbXBsZXgiCiAgICJQeUNvbXBsZXhfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGRlc2Nyb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGRlc2Nyb2JqZWN0KQogICAiUHlXcmFwcGVyX05ldyIKICAgIlB5RGVzY3JfTmV3TWV0aG9kIgogICAiUHlEZXNjcl9OZXdDbGFzc01ldGhvZCIKQEAgLTI1MCw3ICsyNjMsNyBAQAogICAiUHlXcmFwcGVyRGVzY3JfVHlwZSIKICAgIlB5UHJvcGVydHlfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGRpY3RvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZGljdG9iamVjdCkKICAgIlB5RGljdF9OZXciCiAgICJQeURpY3RfR2V0SXRlbSIKICAgIlB5RGljdF9TZXRJdGVtIgpAQCAtMjc0LDExICsyODcsMTEgQEAKICAgIlB5RGljdEl0ZXJWYWx1ZV9UeXBlIgogICAiUHlEaWN0SXRlckl0ZW1fVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGVudW1vYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZW51bW9iamVjdCkKICAgIlB5RW51bV9UeXBlIgogICAiUHlSZXZlcnNlZF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZmlsZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihmaWxlb2JqZWN0KQogICAiUHlGaWxlX0Zyb21TdHJpbmciCiAgICJQeV9Vbml2ZXJzYWxOZXdsaW5lRnJlYWQiCiAgICJQeUZpbGVfR2V0TGluZSIKQEAgLTI5NCw3ICszMDcsNyBAQAogICAiUHlGaWxlX05hbWUiCiAgICJQeUZpbGVfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZsb2F0b2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGZsb2F0b2JqZWN0KQogICAiUHlGbG9hdF9Gcm9tU3RyaW5nIgogICAiUHlGbG9hdF9Bc0RvdWJsZSIKICAgIlB5RmxvYXRfRmluaSIKQEAgLTMwNiwxMCArMzE5LDkgQEAKICAgIlB5RmxvYXRfQXNSZXByU3RyaW5nIgogICAiUHlGbG9hdF9Bc1N0cmluZyIKICAgIl9QeUZsb2F0X0luaXQiCi0gICJQeUZsb2F0X0FzU3RyaW5nRXgiCiAgICJQeUZsb2F0X1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihmcmFtZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihmcmFtZW9iamVjdCkKICAgIlB5RnJhbWVfTmV3IgogICAiUHlGcmFtZV9GYXN0VG9Mb2NhbHMiCiAgICJQeUZyYW1lX0xvY2Fsc1RvRmFzdCIKQEAgLTMxOSw3ICszMzEsNyBAQAogICAiUHlGcmFtZV9CbG9ja1BvcCIKICAgIlB5RnJhbWVfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZ1bmNvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZnVuY29iamVjdCkKICAgIlB5RnVuY3Rpb25fTmV3IgogICAiUHlGdW5jdGlvbl9HZXRDb2RlIgogICAiUHlGdW5jdGlvbl9HZXRHbG9iYWxzIgpAQCAtMzM0LDEyICszNDYsMTIgQEAKICAgIlB5Q2xhc3NNZXRob2RfVHlwZSIKICAgIlB5U3RhdGljTWV0aG9kX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnZW5vYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2Vub2JqZWN0KQogICAiUHlHZW5fTmV3IgogICAiUHlHZW5fTmVlZHNGaW5hbGl6aW5nIgogICAiUHlHZW5fVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGludG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihpbnRvYmplY3QpCiAgICJQeUludF9Bc0xvbmciCiAgICJQeUludF9Bc1Vuc2lnbmVkTG9uZ01hc2siCiAgICJQeUludF9Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrIgpAQCAtMzU0LDEzICszNjYsMTMgQEAKICAgIl9QeUludF9Jbml0IgogICAiUHlJbnRfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGl0ZXJvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoaXRlcm9iamVjdCkKICAgIlB5U2VxSXRlcl9OZXciCiAgICJQeUNhbGxJdGVyX05ldyIKICAgIlB5U2VxSXRlcl9UeXBlIgogICAiUHlDYWxsSXRlcl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobGlzdG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihsaXN0b2JqZWN0KQogICAiUHlMaXN0X05ldyIKICAgIlB5TGlzdF9BcHBlbmQiCiAgICJQeUxpc3RfU2l6ZSIKQEAgLTM3OCw3ICszOTAsNyBAQAogICAiUHlMaXN0SXRlcl9UeXBlIgogICAiUHlMaXN0UmV2SXRlcl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobG9uZ29iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihsb25nb2JqZWN0KQogICAiUHlMb25nX0Zyb21Eb3VibGUiCiAgICJQeUxvbmdfQXNMb25nIgogICAiX1B5TG9uZ19Bc1NzaXplX3QiCkBAIC00MDgsNyArNDIwLDcgQEAKICAgIlB5TG9uZ19UeXBlIgogICAiX1B5TG9uZ19EaWdpdFZhbHVlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobWV0aG9kb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1ldGhvZG9iamVjdCkKICAgIlB5Q0Z1bmN0aW9uX0NhbGwiCiAgICJQeV9GaW5kTWV0aG9kSW5DaGFpbiIKICAgIlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uIgpAQCAtNDIwLDcgKzQzMiw3IEBACiAgICJQeUNGdW5jdGlvbl9OZXciCiAgICJQeUNGdW5jdGlvbl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobW9kdWxlb2JqZWN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1vZHVsZW9iamVjdCkKICAgIlB5TW9kdWxlX05ldyIKICAgIl9QeU1vZHVsZV9DbGVhciIKICAgIlB5TW9kdWxlX0dldERpY3QiCkBAIC00MjgsNyArNDQwLDcgQEAKICAgIlB5TW9kdWxlX0dldEZpbGVuYW1lIgogICAiUHlNb2R1bGVfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihvYmplY3QpCiAgICJQeV9EaXZpc2lvbldhcm5pbmdGbGFnIgogICAiUHlPYmplY3RfU3RyIgogICAiUHlPYmplY3RfUmVwciIKQEAgLTQ4MSwxNSArNDkzLDE1IEBACiAgICJfUHlUcmFzaF9kZWxldGVfbmVzdGluZyIKICAgIl9QeVRyYXNoX2RlbGV0ZV9sYXRlciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG9ibWFsbG9jKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG9ibWFsbG9jKQogICAiUHlPYmplY3RfTWFsbG9jIgogICAiUHlPYmplY3RfRnJlZSIKICAgIlB5T2JqZWN0X1JlYWxsb2MiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihyYW5nZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihyYW5nZW9iamVjdCkKICAgIlB5UmFuZ2VfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHNldG9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihzZXRvYmplY3QpCiAgICJQeVNldF9Qb3AiCiAgICJQeVNldF9OZXciCiAgICJQeUZyb3plblNldF9OZXciCkBAIC01MDQsNyArNTE2LDcgQEAKICAgIlB5U2V0X1R5cGUiCiAgICJQeUZyb3plblNldF9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc2xpY2VvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc2xpY2VvYmplY3QpCiAgICJfUHlTbGljZV9Gcm9tSW5kaWNlcyIKICAgIlB5U2xpY2VfR2V0SW5kaWNlcyIKICAgIlB5U2xpY2VfR2V0SW5kaWNlc0V4IgpAQCAtNTEyLDcgKzUyNCw3IEBACiAgICJfUHlfRWxsaXBzaXNPYmplY3QiCiAgICJQeVNsaWNlX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzdHJpbmdvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc3RyaW5nb2JqZWN0KQogICAiUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUiCiAgICJQeVN0cmluZ19JbnRlcm5JblBsYWNlIgogICAiUHlTdHJpbmdfRnJvbVN0cmluZyIKQEAgLTU0MywxMiArNTU1LDEyIEBACiAgICJQeVN0cmluZ19UeXBlIgogICAiUHlCYXNlU3RyaW5nX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzdHJ1Y3RzZXEpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc3RydWN0c2VxKQogICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSIKICAgIlB5U3RydWN0U2VxdWVuY2VfTmV3IgogICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0dXBsZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYih0dXBsZW9iamVjdCkKICAgIlB5VHVwbGVfTmV3IgogICAiUHlUdXBsZV9QYWNrIgogICAiX1B5VHVwbGVfUmVzaXplIgpAQCAtNTYwLDcgKzU3Miw3IEBACiAgICJQeVR1cGxlX1R5cGUiCiAgICJQeVR1cGxlSXRlcl9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodHlwZW9iamVjdCkKKzsgRnJvbSBweXRob24yN19zLmxpYih0eXBlb2JqZWN0KQogICAiUHlUeXBlX0lzU3VidHlwZSIKICAgIl9QeVR5cGVfTG9va3VwIgogICAiUHlUeXBlX1JlYWR5IgpAQCAtNTcxLDcgKzU4Myw3IEBACiAgICJQeUJhc2VPYmplY3RfVHlwZSIKICAgIlB5U3VwZXJfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHVuaWNvZGVvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIodW5pY29kZW9iamVjdCkKICAgIlB5VW5pY29kZVVDUzJfUmVzaXplIgogICAiUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbCIKICAgIlB5VW5pY29kZVVDUzJfRnJvbU9iamVjdCIKQEAgLTYzNyw3ICs2NDksNyBAQAogICAiUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdCIKICAgIlB5VW5pY29kZV9UeXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodW5pY29kZWN0eXBlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHVuaWNvZGVjdHlwZSkKICAgIl9QeVVuaWNvZGVfVHlwZVJlY29yZHMiCiAgICJfUHlVbmljb2RlVUNTMl9Ub051bWVyaWMiCiAgICJfUHlVbmljb2RlVUNTMl9Jc0xvd2VyY2FzZSIKQEAgLTY1NSw3ICs2NjcsNyBAQAogICAiX1B5VW5pY29kZVVDUzJfSXNOdW1lcmljIgogICAiX1B5VW5pY29kZVVDUzJfSXNBbHBoYSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHdlYWtyZWZvYmplY3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIod2Vha3JlZm9iamVjdCkKICAgIlB5V2Vha3JlZl9OZXdSZWYiCiAgICJQeVdlYWtyZWZfTmV3UHJveHkiCiAgICJQeU9iamVjdF9DbGVhcldlYWtSZWZzIgpAQCAtNjY2LDcgKzY3OCw3IEBACiAgICJfUHlXZWFrcmVmX1Byb3h5VHlwZSIKICAgIl9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihQeXRob24tYXN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKFB5dGhvbi1hc3QpCiA7ICAiaW5pdF9hc3QiCiAgICJNb2R1bGUiCiAgICJJbnRlcmFjdGl2ZSIKQEAgLTcyNSwxOCArNzM3LDE4IEBACiAgICJhbGlhcyIKICAgIlB5QVNUX21vZDJvYmoiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihhc2RsKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGFzZGwpCiAgICJhc2RsX3NlcV9uZXciCiAgICJhc2RsX2ludF9zZXFfbmV3IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoYXN0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGFzdCkKICAgIlB5QVNUX0Zyb21Ob2RlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoYmx0aW5tb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYmx0aW5tb2R1bGUpCiAgICJfUHlCdWlsdGluX0luaXQiCiAgICJQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZXhjZXB0aW9ucykKKzsgRnJvbSBweXRob24yN19zLmxpYihleGNlcHRpb25zKQogICAiUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQiCiAgICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydCIKICAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZCIKQEAgLTgxMiw3ICs4MjQsNyBAQAogICAiUHlFeGNfSW1wb3J0V2FybmluZyIKICAgIlB5RXhjX01lbW9yeUVycm9ySW5zdCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNldmFsKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNldmFsKQogICAiUHlFdmFsX0V2YWxGcmFtZUV4IgogICAiUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMiCiAgICJQeUV2YWxfRXZhbENvZGVFeCIKQEAgLTg1MSwxMyArODYzLDEzIEBACiAgICJfUHlfQ2hlY2tJbnRlcnZhbCIKICAgIl9QeV9UaWNrZXIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb21waWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvbXBpbGUpCiAgICJfUHlfTWFuZ2xlIgogICAiUHlBU1RfQ29tcGlsZSIKICAgIlB5Tm9kZV9Db21waWxlIgogICAiUHlfT3B0aW1pemVGbGFnIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY29kZWNzKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGNvZGVjcykKICAgIl9QeUNvZGVjX0xvb2t1cCIKICAgIlB5Q29kZWNfRW5jb2RlIgogICAiUHlDb2RlY19EZWNvZGUiCkBAIC04NzYsNyArODg4LDcgQEAKICAgIlB5Q29kZWNfTG9va3VwRXJyb3IiCiAgICJQeUNvZGVjX1N0cmljdEVycm9ycyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGVycm9ycykKKzsgRnJvbSBweXRob24yN19zLmxpYihlcnJvcnMpCiAgICJQeUVycl9TZXROb25lIgogICAiUHlFcnJfU2V0U3RyaW5nIgogICAiUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzIgpAQCAtOTAyLDE2ICs5MTQsMTYgQEAKICAgIlB5RXJyX1dhcm4iCiAgICJQeUVycl9XYXJuRXhwbGljaXQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihmcm96ZW4pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZnJvemVuKQogICAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZyb3plbm1haW4pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZnJvemVubWFpbikKICAgIlB5X0Zyb3plbk1haW4iCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihmdXR1cmUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZnV0dXJlKQogICAiUHlGdXR1cmVfRnJvbUFTVCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldGFyZ3MpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0YXJncykKICAgIlB5QXJnX1BhcnNlIgogICAiX1B5QXJnX1BhcnNlX1NpemVUIgogICAiUHlBcmdfUGFyc2VUdXBsZSIKQEAgLTkyNSwyNSArOTM3LDIyIEBACiAgICJfUHlBcmdfVmFQYXJzZV9TaXplVCIKICAgIl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldGNvbXBpbGVyKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGdldGNvbXBpbGVyKQogICAiUHlfR2V0Q29tcGlsZXIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnZXRjb3B5cmlnaHQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0Y29weXJpZ2h0KQogICAiUHlfR2V0Q29weXJpZ2h0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0bXRpbWUpCi0gICJQeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lIgotCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2V0cGxhdGZvcm0pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0cGxhdGZvcm0pCiAgICJQeV9HZXRQbGF0Zm9ybSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGdldHZlcnNpb24pCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0dmVyc2lvbikKICAgIlB5X0dldFZlcnNpb24iCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihncmFtaW5pdCkKKzsgRnJvbSBweXRob24yN19zLmxpYihncmFtaW5pdCkKICAgIl9QeVBhcnNlcl9HcmFtbWFyIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoaW1wb3J0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGltcG9ydCkKICAgIl9QeUltcG9ydF9Jbml0IgogICAiX1B5SW1wb3J0SG9va3NfSW5pdCIKICAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZSIKQEAgLTk3MCwxMCArOTc5LDEwIEBACiAgICJQeUltcG9ydF9Jbml0dGFiIgogICAiX1B5SW1wb3J0X0ZpbGV0YWIiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihpbXBvcnRkbCkKKzsgRnJvbSBweXRob24yN19zLmxpYihpbXBvcnRkbCkKICAgIl9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1hcnNoYWwpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobWFyc2hhbCkKICAgIlB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlIgogICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmciCiAgICJQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlIgpAQCAtOTg0LDcgKzk5Myw3IEBACiAgICJQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmciCiAgICJQeU1hcnNoYWxfSW5pdCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1vZHN1cHBvcnQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobW9kc3VwcG9ydCkKICAgIlB5X0luaXRNb2R1bGU0IgogICAiUHlfQnVpbGRWYWx1ZSIKICAgIl9QeV9CdWlsZFZhbHVlX1NpemVUIgpAQCAtOTk3LDI0ICsxMDA2LDI0IEBACiAgICJQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCIKICAgIl9QeV9QYWNrYWdlQ29udGV4dCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG15c25wcmludGYpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobXlzbnByaW50ZikKICAgIlB5T1Nfc25wcmludGYiCiAgICJQeU9TX3ZzbnByaW50ZiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG15c3RydG91bCkKKzsgRnJvbSBweXRob24yN19zLmxpYihteXN0cnRvdWwpCiAgICJQeU9TX3N0cnRvdWwiCiAgICJQeU9TX3N0cnRvbCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHB5YXJlbmEpCis7IEZyb20gcHl0aG9uMjdfcy5saWIocHlhcmVuYSkKICAgIlB5QXJlbmFfTmV3IgogICAiUHlBcmVuYV9GcmVlIgogICAiUHlBcmVuYV9NYWxsb2MiCiAgICJQeUFyZW5hX0FkZFB5T2JqZWN0IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocHlmcGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIocHlmcGUpCiAgICJQeUZQRV9kdW1teSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHB5c3RhdGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIocHlzdGF0ZSkKICAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhciIKICAgIlB5VGhyZWFkU3RhdGVfQ2xlYXIiCiAgICJfUHlUaHJlYWRfQ3VycmVudEZyYW1lcyIKQEAgLTEwMzksMTIgKzEwNDgsMTIgQEAKICAgIl9QeVRocmVhZFN0YXRlX0N1cnJlbnQiCiAgICJfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHB5c3RydG9kKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHB5c3RydG9kKQogICAiUHlPU19hc2NpaV9zdHJ0b2QiCiAgICJQeU9TX2FzY2lpX2Zvcm1hdGQiCiAgICJQeU9TX2FzY2lpX2F0b2YiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihweXRob25ydW4pCis7IEZyb20gcHl0aG9uMjdfcy5saWIocHl0aG9ucnVuKQogICAiUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnIgogICAiUHlfRGVidWdGbGFnIgogICAiUHlfVmVyYm9zZUZsYWciCkBAIC0xMTA2LDIwICsxMTE1LDIwIEBACiAgICJQeV9Vbmljb2RlRmxhZyIKICAgIl9QeV9RbmV3RmxhZyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN0cnVjdG1lbWJlcikKKzsgRnJvbSBweXRob24yN19zLmxpYihzdHJ1Y3RtZW1iZXIpCiAgICJQeU1lbWJlcl9HZXQiCiAgICJQeU1lbWJlcl9HZXRPbmUiCiAgICJQeU1lbWJlcl9TZXRPbmUiCiAgICJQeU1lbWJlcl9TZXQiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzeW10YWJsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihzeW10YWJsZSkKICAgIlB5U3ltdGFibGVfQnVpbGQiCiAgICJQeVN5bXRhYmxlX0ZyZWUiCiAgICJQeVNUX0dldFNjb3BlIgogICAiUHlTeW10YWJsZV9Mb29rdXAiCiAgICJQeVNURW50cnlfVHlwZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN5c21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihzeXNtb2R1bGUpCiAgICJfUHlTeXNfSW5pdCIKICAgIlB5U3lzX1dyaXRlU3RkZXJyIgogICAiUHlTeXNfU2V0UGF0aCIKQEAgLTExMzMsMjIgKzExNDIsMjIgQEAKICAgIlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMiCiAgICJQeVN5c19BZGRXYXJuT3B0aW9uIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodHJhY2ViYWNrKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRyYWNlYmFjaykKICAgIlB5VHJhY2VCYWNrX0hlcmUiCiAgICJQeVRyYWNlQmFja19QcmludCIKICAgIlB5VHJhY2VCYWNrX1R5cGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihnZXRvcHQpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2V0b3B0KQogICAiX1B5T1NfR2V0T3B0IgogICAiX1B5T1Nfb3B0ZXJyIgogICAiX1B5T1Nfb3B0aW5kIgogICAiX1B5T1Nfb3B0YXJnIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZHlubG9hZF9zaGxpYikKKzsgRnJvbSBweXRob24yN19zLmxpYihkeW5sb2FkX3NobGliKQogICAiX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiIgogICAiX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodGhyZWFkKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRocmVhZCkKICAgIlB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUiCiAgICJQeVRocmVhZF9pbml0X3RocmVhZCIKICAgIlB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQiCkBAIC0xMTY0LDkgKzExNzMsOCBAQAogICAiUHlUaHJlYWRfZGVsZXRlX2tleSIKICAgIlB5VGhyZWFkX3NldF9rZXlfdmFsdWUiCiAgICJQeVRocmVhZF9nZXRfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfX2V4aXRfdGhyZWFkIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoZ2Ntb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoZ2Ntb2R1bGUpCiA7ICAiaW5pdGdjIgogICAiX1B5T2JqZWN0X0dDX05ldyIKICAgIl9QeU9iamVjdF9HQ19OZXdWYXIiCkBAIC0xMTgyLDcgKzExOTAsNyBAQAogICAiX1B5T2JqZWN0X0dDX0RlbCIKICAgIl9QeUdDX2dlbmVyYXRpb24wIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc2lnbmFsbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHNpZ25hbG1vZHVsZSkKIDsgICJpbml0c2lnbmFsIgogICAiUHlFcnJfQ2hlY2tTaWduYWxzIgogICAiUHlFcnJfU2V0SW50ZXJydXB0IgpAQCAtMTE5MSwxMjQgKzExOTksMTI0IEBACiAgICJQeU9TX0luaXRJbnRlcnJ1cHRzIgogICAiUHlPU19BZnRlckZvcmsiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihwb3NpeG1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihwb3NpeG1vZHVsZSkKIDsgICJpbml0b3MyIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodGhyZWFkbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRocmVhZG1vZHVsZSkKIDsgICJpbml0dGhyZWFkIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoYXJyYXltb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoYXJyYXltb2R1bGUpCiA7ICAiaW5pdGFycmF5IgogOyAgImFycmF5X21ldGhvZHMiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihiaW5hc2NpaSkKKzsgRnJvbSBweXRob24yN19zLmxpYihiaW5hc2NpaSkKIDsgICJpbml0YmluYXNjaWkiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjbWF0aG1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihjbWF0aG1vZHVsZSkKIDsgICJpbml0Y21hdGgiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihfY29kZWNzbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKF9jb2RlY3Ntb2R1bGUpCiA7ICAiaW5pdF9jb2RlY3MiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKIDsgICJpbml0Y29sbGVjdGlvbnMiCiAgICJkZXF1ZWl0ZXJfdHlwZSIKICAgImRlcXVlcmV2aXRlcl90eXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoY1BpY2tsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihjUGlja2xlKQogOyAgImluaXRjUGlja2xlIgogOyAgImZhc3Rfc2F2ZV9sZWF2ZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGNTdHJpbmdJTykKKzsgRnJvbSBweXRob24yN19zLmxpYihjU3RyaW5nSU8pCiA7ICAiaW5pdGNTdHJpbmdJTyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9jc3YpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX2NzdikKIDsgICJpbml0X2NzdiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGRhdGV0aW1lbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGRhdGV0aW1lbW9kdWxlKQogOyAgImluaXRkYXRldGltZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGRsbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGRsbW9kdWxlKQogOyAgImluaXRkbCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGVycm5vbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGVycm5vbW9kdWxlKQogOyAgImluaXRlcnJubyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGZjbnRsbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKGZjbnRsbW9kdWxlKQogOyAgImluaXRmY250bCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9mdW5jdG9vbHNtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKIDsgICJpbml0X2Z1bmN0b29scyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9oZWFwcW1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihfaGVhcHFtb2R1bGUpCiA7ICAiaW5pdF9oZWFwcSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGltYWdlb3ApCis7IEZyb20gcHl0aG9uMjdfcy5saWIoaW1hZ2VvcCkKIDsgICJpbml0aW1hZ2VvcCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKGl0ZXJ0b29sc21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihpdGVydG9vbHNtb2R1bGUpCiA7ICAiaW5pdGl0ZXJ0b29scyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9sb2NhbGVtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX2xvY2FsZW1vZHVsZSkKIDsgICJpbml0X2xvY2FsZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1hdGhtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIobWF0aG1vZHVsZSkKIDsgICJpbml0bWF0aCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG1kNSkKKzsgRnJvbSBweXRob24yN19zLmxpYihtZDUpCiAgICJtZDVfZmluaXNoIgogICAibWQ1X2luaXQiCiAgICJtZDVfYXBwZW5kIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIobWQ1bW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG1kNW1vZHVsZSkKIDsgICJpbml0X21kNSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKG9wZXJhdG9yKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKG9wZXJhdG9yKQogOyAgImluaXRvcGVyYXRvciIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9yYW5kb21tb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX3JhbmRvbW1vZHVsZSkKIDsgICJpbml0X3JhbmRvbSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHJnYmltZ21vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihyZ2JpbWdtb2R1bGUpCiA7ICAiaW5pdHJnYmltZyIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHNoYW1vZHVsZSkKKzsgRnJvbSBweXRob24yN19zLmxpYihzaGFtb2R1bGUpCiA7ICAiaW5pdF9zaGEiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYihzaGEyNTZtb2R1bGUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoc2hhMjU2bW9kdWxlKQogOyAgImluaXRfc2hhMjU2IgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoc2hhNTEybW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHNoYTUxMm1vZHVsZSkKIDsgICJpbml0X3NoYTUxMiIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9zcmUpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX3NyZSkKIDsgICJpbml0X3NyZSIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN0cm9wbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHN0cm9wbW9kdWxlKQogOyAgImluaXRzdHJvcCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKF9zdHJ1Y3QpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX3N0cnVjdCkKIDsgICJpbml0X3N0cnVjdCIKIAotOyBGcm9tIHB5dGhvbjI2X3MubGliKHN5bXRhYmxlbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHN5bXRhYmxlbW9kdWxlKQogOyAgImluaXRfc3ltdGFibGUiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0ZXJtaW9zKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRlcm1pb3MpCiA7ICAiaW5pdHRlcm1pb3MiCiAKLTsgRnJvbSBweXRob24yNl9zLmxpYih0aW1lbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRpbWVtb2R1bGUpCiA7ICAiaW5pdHRpbWUiCiAgICJfUHlUaW1lX0RvdWJsZVRvVGltZXQiCiA7ICAiaW5pdHRpbWV6b25lIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIodGltaW5nbW9kdWxlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHRpbWluZ21vZHVsZSkKIDsgICJpbml0dGltaW5nIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoX3dlYWtyZWYpCis7IEZyb20gcHl0aG9uMjdfcy5saWIoX3dlYWtyZWYpCiA7ICAiaW5pdF93ZWFrcmVmIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoeHhzdWJ0eXBlKQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHh4c3VidHlwZSkKIDsgICJpbml0eHhzdWJ0eXBlIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIoemlwaW1wb3J0KQorOyBGcm9tIHB5dGhvbjI3X3MubGliKHppcGltcG9ydCkKIDsgICJpbml0emlwaW1wb3J0IgpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvbWFrZWZpbGUgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZQppbmRleCBmMzQwNDdmLi4xNjA4OTYwIDEwMDY0NAotLS0gYS9QQy9vczJ2YWNwcC9tYWtlZmlsZQorKysgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZQpAQCAtMjAzLDggKzIwMyw3IEBACiAgICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cm9wTW9kdWxlLm9iaiAgIFwKICAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TW9kdWxlLm9iaiAgXAogICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcWVVWQ29udmVydC5vYmoKKyAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVGhyZWFkTW9kdWxlLm9iagogCiAjIFN0YW5kYWxvbmUgUGFyc2VyIEdlbmVyYXRvciBQcm9ncmFtIChTaGFyZXMgU29tZSBvZiBQeXRob24ncyBNb2R1bGVzKQogUEdFTiAgICAgICAgICAgID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTEzLDggKzExMTIsNyBAQAogCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKIAkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCiAJICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaCBcCi0JICQoUFlfTU9EVUxFUylceXV2LmgKKwkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAogCiBzeXNsb2dtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKIAkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKQEAgLTExOTgsOCArMTE5Niw2IEBACiAJICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKIAkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAogCi15dXZjb252ZXJ0Lm9iajogJChQWV9NT0RVTEVTKVx5dXYuaAotCiB6bGlibW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAogCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKIAkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKQEAgLTE2OTcsOCArMTY5Myw2IEBACiAJICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKIAkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCiAKLWdldG10aW1lLm9iajogcHljb25maWcuaAotCiBnZXRwbGF0Zm9ybS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAogCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAogCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL21ha2VmaWxlLm9tayBiL1BDL29zMnZhY3BwL21ha2VmaWxlLm9tawppbmRleCBiMDM3MjVhLi5jNGY2NDM4IDEwMDY0NAotLS0gYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKKysrIGIvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCkBAIC0xNjQsOCArMTY0LDcgQEAKICAgICAgICAgICAgICAgICAgIFN0cm9wTW9kdWxlLm9iaiAgIFwKICAgICAgICAgICAgICAgICAgIFN0cnVjdE1vZHVsZS5vYmogIFwKICAgICAgICAgICAgICAgICAgIFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFlVVkNvbnZlcnQub2JqCisgICAgICAgICAgICAgICAgICBUaHJlYWRNb2R1bGUub2JqCiAKICMgT21pdHRlZCBNb2R1bGVzIChhbmQgRGVzY3JpcHRpb24vUmVhc29uKToKICAgIwpAQCAtODAzLDggKzgwMiw3IEBACiAJIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKIAkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCiAJIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaCBcCi0JIHl1di5oCisJIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAogCiBzeXNsb2dtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAogCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXApAQCAtODU0LDggKzg1Miw2IEBACiAJIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCiAJIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKIAoteXV2Y29udmVydC5vYmo6IHl1di5oCi0KIHpsaWJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKIAkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKIAkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCkBAIC0xMTU5LDggKzExNTUsNiBAQAogCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKIAkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAogCi1nZXRtdGltZS5vYmo6IHB5Y29uZmlnLmgKLQogZ2V0cGxhdGZvcm0ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKIAkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKIAkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weXRob24uZGVmIGIvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgppbmRleCA3OWQwNWIwLi43NmQ1NmNkIDEwMDY0NAotLS0gYS9QQy9vczJ2YWNwcC9weXRob24uZGVmCisrKyBiL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKQEAgLTYsNiArNiw3IEBACiBFWFBPUlRTCiAgICAgICAgICAgICAgICA7IERhdGEKICAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX1R5cGUKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9UeXBlCiAgICAgICAgICAgICAgICBQeUNPYmplY3RfVHlwZQogICAgICAgICAgICAgICAgUHlDbGFzc19UeXBlCiAgICAgICAgICAgICAgICBQeUNvZGVfVHlwZQpAQCAtNzUsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgX1B5X1RydWVTdHJ1Y3QKICAgICAgICAgICAgICAgIF9QeV9aZXJvU3RydWN0CiAgICAgICAgICAgICAgICBfUHlfYWJzdHJhY3RfaGFjaworICAgICAgICAgICAgICAgX1B5X2NhcHN1bGVfaGFjawogICAgICAgICAgICAgICAgX1B5X2NvYmplY3RfaGFjawogICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheAogICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheF90YWJsZQpAQCAtODksNiArOTEsMTcgQEAKICAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCiAgICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRTZWxmCiAgICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9OZXcKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0CisgICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcgorICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldE5hbWUKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyCisgICAgICAgICAgICAgICBQeUNhcHN1bGVfSW1wb3J0CisgICAgICAgICAgICAgICBQeUNhcHN1bGVfSXNWYWxpZAorICAgICAgICAgICAgICAgUHlDYXBzdWxlX05ldworICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldENvbnRleHQKKyAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yCisgICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0TmFtZQorICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldFBvaW50ZXIKICAgICAgICAgICAgICAgIFB5Q09iamVjdF9Bc1ZvaWRQdHIKICAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MKICAgICAgICAgICAgICAgIFB5Q09iamVjdF9Gcm9tVm9pZFB0cgpAQCAtMjg0LDcgKzI5Nyw2IEBACiAgICAgICAgICAgICAgICBQeU51bWJlcl9Yb3IKICAgICAgICAgICAgICAgIFB5T1NfQWZ0ZXJGb3JrCiAgICAgICAgICAgICAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzCi0gICAgICAgICAgICAgICBQeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lCiAgICAgICAgICAgICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzCiAgICAgICAgICAgICAgICBQeU9TX0ludGVycnVwdE9jY3VycmVkCiAgICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lCkBAIC0zNjksNyArMzgxLDYgQEAKICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0RGljdAogICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9OZXcKICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfU3dhcAotICAgICAgICAgICAgICAgUHlUaHJlYWRfX2V4aXRfdGhyZWFkCiAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2sKICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sKICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FsbG9jYXRlX3NlbWEKZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IGI4MWY4ODMuLmM5Y2QyYzAgMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtOTUsMTIgKzk1LDYgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lOQ0UKLS8qIFB5dGhvbiB1c2VzIEdldFZlcnNpb24oKSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCi0gKiBXaW5kb3dzIE5UIGFuZCA5eC9NRSB3aGVyZSBPUyBVbmljb2RlIHN1cHBvcnQgaXMgY29uY2VybmVkLgotICogV2luZG93cyBDRSBzdXBwb3J0cyBVbmljb2RlIGluIHRoZSBzYW1lIHdheSBhcyBOVCBzbyB3ZQotICogZGVmaW5lIHRoZSBtaXNzaW5nIEdldFZlcnNpb24oKSBhY2NvcmRpbmdseS4KLSAqLwotI2RlZmluZSBHZXRWZXJzaW9uKCkgKDQpCiAvKiBXaW5kb3dzIENFIGRvZXMgbm90IHN1cHBvcnQgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCiAjZGVmaW5lIGdldGVudih2KSAoTlVMTCkKICNkZWZpbmUgZW52aXJvbiAoTlVMTCkKQEAgLTMyOSw5ICszMjMsOSBAQAogCQkJdGhlaXIgTWFrZWZpbGUgKG90aGVyIGNvbXBpbGVycyBhcmUgZ2VuZXJhbGx5CiAJCQl0YWtlbiBjYXJlIG9mIGJ5IGRpc3R1dGlscy4pICovCiAjCQkJaWZkZWYgX0RFQlVHCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMjZfZC5saWIiKQorIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjI3X2QubGliIikKICMJCQllbHNlCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMjYubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24yNy5saWIiKQogIwkJCWVuZGlmIC8qIF9ERUJVRyAqLwogIwkJZW5kaWYgLyogX01TQ19WRVIgKi8KICMJZW5kaWYgLyogUHlfQlVJTERfQ09SRSAqLwpAQCAtNDAwLDYgKzM5NCw0MiBAQAogCiAjZW5kaWYKIAorLyogZGVmaW5lIHNpZ25lZCBhbmQgdW5zaWduZWQgZXhhY3Qtd2lkdGggMzItYml0IGFuZCA2NC1iaXQgdHlwZXMsIHVzZWQgaW4gdGhlCisgICBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbG9uZyBpbnRlZ2Vycy4gKi8KKyNpZm5kZWYgUFlfVUlOVDMyX1QKKyNpZiBTSVpFT0ZfSU5UID09IDQKKyNkZWZpbmUgSEFWRV9VSU5UMzJfVCAxCisjZGVmaW5lIFBZX1VJTlQzMl9UIHVuc2lnbmVkIGludAorI2VsaWYgU0laRU9GX0xPTkcgPT0gNAorI2RlZmluZSBIQVZFX1VJTlQzMl9UIDEKKyNkZWZpbmUgUFlfVUlOVDMyX1QgdW5zaWduZWQgbG9uZworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBQWV9VSU5UNjRfVAorI2lmIFNJWkVPRl9MT05HX0xPTkcgPT0gOAorI2RlZmluZSBIQVZFX1VJTlQ2NF9UIDEKKyNkZWZpbmUgUFlfVUlOVDY0X1QgdW5zaWduZWQgUFlfTE9OR19MT05HCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBZX0lOVDMyX1QKKyNpZiBTSVpFT0ZfSU5UID09IDQKKyNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKyNkZWZpbmUgUFlfSU5UMzJfVCBpbnQKKyNlbGlmIFNJWkVPRl9MT05HID09IDQKKyNkZWZpbmUgSEFWRV9JTlQzMl9UIDEKKyNkZWZpbmUgUFlfSU5UMzJfVCBsb25nCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFBZX0lOVDY0X1QKKyNpZiBTSVpFT0ZfTE9OR19MT05HID09IDgKKyNkZWZpbmUgSEFWRV9JTlQ2NF9UIDEKKyNkZWZpbmUgUFlfSU5UNjRfVCBQWV9MT05HX0xPTkcKKyNlbmRpZgorI2VuZGlmCisKIC8qIEZhaXJseSBzdGFuZGFyZCBmcm9tIGhlcmUhICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY29weXNpZ24nIGZ1bmN0aW9uLiAqLwpAQCAtNTI5LDEwICs1NTksNiBAQAogLyogVGhpcyBpcyBlbm91Z2ggZm9yIHVuaWNvZGVvYmplY3QuaCB0byBkbyB0aGUgInJpZ2h0IHRoaW5nIiBvbiBXaW5kb3dzLiAqLwogI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgMgogCi0vKiBEZWZpbmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgUHl0aG9uIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gY2FuIGJlIHBhc3NlZAotICAgYXMtaXMgdG8gV2luMzIgV2lkZSBBUEkuICAqLwotI2RlZmluZSBQeV9XSU5fV0lERV9GSUxFTkFNRVMKLQogLyogVXNlIFB5dGhvbidzIG93biBzbWFsbC1ibG9jayBtZW1vcnktYWxsb2NhdG9yLiAqLwogI2RlZmluZSBXSVRIX1BZTUFMTE9DIDEKIApAQCAtNzIzLDQgKzc0OSw4IEBACiAgICBzb2NrZXQgaGFuZGxlcyBncmVhdGVyIHRoYW4gRkRfU0VUU0laRSAqLwogI2RlZmluZSBQeV9TT0NLRVRfRkRfQ0FOX0JFX0dFX0ZEX1NFVFNJWkUKIAorLyogRGVmaW5lIGlmIEMgZG91YmxlcyBhcmUgNjQtYml0IElFRUUgNzU0IGJpbmFyeSBmb3JtYXQsIHN0b3JlZCB3aXRoIHRoZQorICAgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAqLworI2RlZmluZSBET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0IDEKKwogI2VuZGlmIC8qICFQeV9DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uLm1rIGIvUEMvcHl0aG9uLm1rCmluZGV4IGE3NjUxMDYuLjVmNjZlYjkgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbi5taworKysgYi9QQy9weXRob24ubWsKQEAgLTEsNSArMSw1IEBACi1wcm9qZWN0IDogbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLmV4ZSBuOlxweXRob25ccHl0aG9uLTEuJg0KLTUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMNCi0NCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIubWsxDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQ0KK3Byb2plY3QgOiBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIuZXhlIG46XHB5dGhvblxweXRob24tMS4mCis1LjFccGNcd2F0X2Rvc1xweXRoX2Rvcy5leGUgLlNZTUJPTElDCisKKyFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5tazEKKyFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X2Rvc1xweXRoX2Rvcy5tazEKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbl9udC5yYyBiL1BDL3B5dGhvbl9udC5yYwppbmRleCBmNWZmZjg3Li5lMTMyODM3IDEwMDY0NAotLS0gYS9QQy9weXRob25fbnQucmMKKysrIGIvUEMvcHl0aG9uX250LnJjCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlB5dGhvbiBDb3JlXDAiCiAgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCBQWVRIT05fVkVSU0lPTgogICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJQeXRob24gRExMXDAiCi0gICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMjAwMS0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBDb3B5cmlnaHQgqSAyMDAwIEJlT3Blbi5jb20uIENvcHlyaWdodCCpIDE5OTUtMjAwMSBDTlJJLiBDb3B5cmlnaHQgqSAxOTkxLTE5OTUgU01DLlwwIgorICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMDEtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gQ29weXJpZ2h0IKkgMjAwMCBCZU9wZW4uY29tLiBDb3B5cmlnaHQgqSAxOTk1LTIwMDEgQ05SSS4gQ29weXJpZ2h0IKkgMTk5MS0xOTk1IFNNQy5cMCIKICAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgUFlUSE9OX0RMTF9OQU1FICJcMCIKICAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJQeXRob25cMCIKICAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCmRpZmYgLS1naXQgYS9QQ2J1aWxkL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUENidWlsZC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagppbmRleCA3M2FhODk5Li42YWExNDdlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qCisrKyBiL1BDYnVpbGQvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKQEAgLTMsNyArMyw3IEBACiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCiAJVmVyc2lvbj0iOSwwMCIKIAlOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIgotCVByb2plY3RHVUlEPSJ7OWU0OGIzMDAtMzdkMS0xMWRkLThjNDEtMDA1MDU2YzAwMDA4fSIKKwlQcm9qZWN0R1VJRD0iezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iCiAJUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyIKIAlLZXl3b3JkPSJXaW4zMlByb2oiCiAJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIgpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF9zc2wuYmF0IGIvUENidWlsZC9idWlsZF9zc2wuYmF0CmluZGV4IGNiNWE3OTcuLjI1MzFhNWIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfc3NsLmJhdAorKysgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKQEAgLTIsMTAgKzIsMTAgQEAKIGlmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgKICAgaWYgJTEgRVFVIERlYnVnICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlCi0gICAgaWYgbm90IGV4aXN0IHB5dGhvbjI2X2QuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24yN19kLmRsbCBleGl0IDEKICAgKSBFTFNFICgKICAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24yNi5kbGwgZXhpdCAxCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjI3LmRsbCBleGl0IDEKICAgKQogKQogJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfc3NsLnB5IGIvUENidWlsZC9idWlsZF9zc2wucHkKaW5kZXggZjI0YzkwNi4uZjgxZTBiYyAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wucHkKKysrIGIvUENidWlsZC9idWlsZF9zc2wucHkKQEAgLTEsMyArMSw0IEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50LCBwcmludF9mdW5jdGlvbgogIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIGFuZCBfaGFzaGxpYiBtb2R1bGVzIGZvciBXaW5kb3dzLgogIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5CiAjIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgpAQCAtNDYsNyArNDcsNyBAQAogIyBpcyBhdmFpbGFibGUuCiBkZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgogICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKHBlcmwgKyAnIC1lICJ1c2UgV2luMzI7IicpCisgICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCiAgICAgICAgIGZoLnJlYWQoKQogICAgICAgICByYyA9IGZoLmNsb3NlKCkKICAgICAgICAgaWYgcmM6CkBAIC0xMDIsMTEgKzEwMyw4IEBACiAgICAgIiIiCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG0zMik6CiAgICAgICAgIHJldHVybgotICAgICMgMi40IGNvbXBhdGliaWxpdHkKLSAgICBmaW4gPSBvcGVuKG0zMikKLSAgICBpZiAxOiAjIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKLSAgICAgICAgZm91dCA9IG9wZW4obWFrZWZpbGUsICd3JykKLSAgICAgICAgaWYgMTogIyB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKKyAgICB3aXRoIG9wZW4obTMyKSBhcyBmaW46CisgICAgICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj10bXAzMiIsICI9dG1wNjQiKQogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIj1vdXQzMiIsICI9b3V0NjQiKQpAQCAtMTg2LDEwICsxODQsMTAgQEAKICAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKICAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCiAgICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmwgaXMgTm9uZToKKyAgICBpZiBwZXJsOgorICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQorICAgIGVsc2U6CiAgICAgICAgIHByaW50KCJObyBQZXJsIGluc3RhbGxhdGlvbiB3YXMgZm91bmQuIEV4aXN0aW5nIE1ha2VmaWxlcyBhcmUgdXNlZC4iKQotCi0gICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KICAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi4iLCkpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKaW5kZXggMjFlODljYy4uMmQ1Nzk3ZiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQpAQCAtNTIsMTggKzUyLDE4IEBACiAgICAgaWYgMToKICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRLLCAid2luIikpCiAgICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgVENMRElSPXRjbGRpciwgTUFDSElORT1tYWNoaW5lKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIFRDTERJUj10Y2xkaXIsIElOU1RBTExESVI9ZGVzdCwgTUFDSElORT1tYWNoaW5lKQorICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgREVCVUc9MCwgVENMRElSPXRjbGRpcikKKyAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgREVCVUc9MCwgTUFDSElORT1tYWNoaW5lKQorICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIERFQlVHPTAsIElOU1RBTExESVI9ZGVzdCwgTUFDSElORT1tYWNoaW5lKQogCiAgICAgIyBUSVgKICAgICBpZiAxOgogICAgICAgICAjIHB5dGhvbjkubWFrIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcKICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRJWCwgIndpbiIpKQogICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJjbGVhbiIpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsIE1BQ0hJTkU9bWFjaGluZSwgSU5TVEFMTF9ESVI9ZGVzdCkKLSAgICAgICAgbm1ha2UoInB5dGhvbjkubWFrIiwgImluc3RhbGwiLCBJTlNUQUxMX0RJUj1kZXN0KQorICAgICAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLCAiY2xlYW4iKQorICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsIE1BQ0hJTkU9bWFjaGluZSwgSU5TVEFMTF9ESVI9ZGVzdCkKKyAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLCAiaW5zdGFsbCIsIElOU1RBTExfRElSPWRlc3QpCiAKIGRlZiBtYWluKCk6CiAgICAgaWYgbGVuKHN5cy5hcmd2KSA8IDIgb3Igc3lzLmFyZ3ZbMV0gbm90IGluICgiV2luMzIiLCAiQU1ENjQiKToKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnoyLnZjcHJvaiBiL1BDYnVpbGQvYnoyLnZjcHJvagppbmRleCAyYzE2ZWIwLi5hZmRhNTc4IDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J6Mi52Y3Byb2oKKysrIGIvUENidWlsZC9iejIudmNwcm9qCkBAIC00Myw2ICs0Myw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtNTIsMTIgKzUzLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLURlYnVnXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyBta2RpciAkKFBsYXRmb3JtTmFtZSktRGVidWcmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0xMDYsNiArMTA1LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0xMTUsMTIgKzExNSwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1EZWJ1Z1xsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktRGVidWcgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLURlYnVnJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1EZWJ1ZyYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktRGVidWdcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMTY5LDYgKzE2Nyw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMTc4LDEyICsxNzcsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCkBAIC0yMzMsNiArMjMwLDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC0yNDIsMTIgKzI0MCwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTI5Niw2ICsyOTIsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTMwNSwxMiArMzAyLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQUxpbmtUb29sIgpAQCAtMzYwLDYgKzM1NSw3IEBACiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCiAJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMzY5LDEyICszNjUsMTAgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgbGliYnoyIgotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKGJ6MkRpcikmI3gwRDsmI3gwQTtpZiBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIGV4aXQgMCYjeDBEOyYjeDBBO2lmIG5vdCBleGlzdCAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSBta2RpciAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGxpYiYjeDBEOyYjeDBBO2NvcHkgbGliYnoyLmxpYiAkKFBsYXRmb3JtTmFtZSktUmVsZWFzZSYjeDBEOyYjeDBBO25tYWtlIC9ub2xvZ28gL2YgbWFrZWZpbGUubXNjIGNsZWFuJiN4MEQ7JiN4MEE7IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoYnoyRGlyKVwkKFBsYXRmb3JtTmFtZSktUmVsZWFzZVxsaWJiejIubGliIgorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgogCQkJLz4KIAkJCTxUb29sCkBAIC00MjQsNiArNDE4LDcgQEAKIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0IgogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiCkBAIC00MzMsMTIgKzQyOCwxMCBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgotCQkJCURlc2NyaXB0aW9uPSJCdWlsZCBsaWJiejIiCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoYnoyRGlyKSYjeDBEOyYjeDBBO2lmIGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIgZXhpdCAwJiN4MEQ7JiN4MEE7aWYgbm90IGV4aXN0ICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlIG1rZGlyICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliJiN4MEQ7JiN4MEE7Y29weSBsaWJiejIubGliICQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlJiN4MEQ7JiN4MEE7bm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgY2xlYW4mI3gwRDsmI3gwQTsiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChiejJEaXIpXCQoUGxhdGZvcm1OYW1lKS1SZWxlYXNlXGxpYmJ6Mi5saWIiCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKQEAgLTQ4OCw2ICs0ODEsNyBAQAogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgogCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTQ5NywxMiArNDkxLDEwIEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIGxpYmJ6MiIKLQkJCQlDb21tYW5kTGluZT0iY2QgJChiejJEaXIpJiN4MEQ7JiN4MEE7aWYgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiBleGl0IDAmI3gwRDsmI3gwQTtpZiBub3QgZXhpc3QgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UgbWtkaXIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWImI3gwRDsmI3gwQTtjb3B5IGxpYmJ6Mi5saWIgJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2UmI3gwRDsmI3gwQTtubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBjbGVhbiYjeDBEOyYjeDBBOyIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGJ6MkRpcilcJChQbGF0Zm9ybU5hbWUpLVJlbGVhc2VcbGliYnoyLmxpYiIKKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKIAkJCS8+CiAJCQk8VG9vbApAQCAtNTM5LDYgKzUzMSw1MCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisJCTxGaWx0ZXIKKwkJCU5hbWU9ImJ6aXAyIDEuMC41IEhlYWRlciBGaWxlcyIKKwkJCT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliX3ByaXZhdGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCTwvRmlsdGVyPgorCQk8RmlsdGVyCisJCQlOYW1lPSJiemlwMiAxLjAuNSBTb3VyY2UgRmlsZXMiCisJCQk+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGNvbXByZXNzLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcZGVjb21wcmVzcy5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcaHVmZm1hbi5jIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQk8L0ZpbHRlcj4KIAk8L0ZpbGVzPgogCTxHbG9iYWxzPgogCTwvR2xvYmFscz4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHlkLnZzcHJvcHMgYi9QQ2J1aWxkL3B5ZC52c3Byb3BzCmluZGV4IGVlNzllN2YuLmNlMDM5ZWIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHlkLnZzcHJvcHMKKysrIGIvUENidWlsZC9weWQudnNwcm9wcwpAQCAtMSw0ICsxLDQgQEAKLQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+CiA8VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldAogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIgogCVZlcnNpb249IjguMDAiCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5cHJvamVjdC52c3Byb3BzIGIvUENidWlsZC9weXByb2plY3QudnNwcm9wcwppbmRleCBmZTkwYmQwLi4zM2MzNTc2IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC52c3Byb3BzCisrKyBiL1BDYnVpbGQvcHlwcm9qZWN0LnZzcHJvcHMKQEAgLTM4LDcgKzM4LDcgQEAKIAkvPgogCTxVc2VyTWFjcm8KIAkJTmFtZT0iUHlEbGxOYW1lIgotCQlWYWx1ZT0icHl0aG9uMjYiCisJCVZhbHVlPSJweXRob24yNyIKIAkvPgogCTxVc2VyTWFjcm8KIAkJTmFtZT0iUHl0aG9uRXhlIgpAQCAtNzQsNyArNzQsNyBAQAogCS8+CiAJPFVzZXJNYWNybwogCQlOYW1lPSJzcWxpdGUzRGlyIgotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjUuOSIKKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy42LjIxIgogCS8+CiAJPFVzZXJNYWNybwogCQlOYW1lPSJiejJEaXIiCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmNwcm9qIGIvUENidWlsZC9weXRob25jb3JlLnZjcHJvagppbmRleCA3MGQ4NzI0Li40ZjMxODViIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmNwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2oKQEAgLTcxNSw2ICs3MTUsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxkdG9hLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZW51bW9iamVjdC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTg1MSw2ICs4NTUsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweWNhcHN1bGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweWN0eXBlLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHlkZWJ1Zy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTk5NSwxNCArMTAwNyw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2ZpbGVpby5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9ieXRlc2lvLmMiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTEwMjcsNiArMTAzMSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9tYXRoLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX21hdGguaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTE3MSwxNCArMTE4Myw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNceXV2LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNceXV2Y29udmVydC5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXHppcGltcG9ydC5jIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTEzNTQsNiArMTM1OCw0MiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJPC9GaWx0ZXI+CisJCQk8RmlsdGVyCisJCQkJTmFtZT0iX2lvIgorCQkJCT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX2lvXHRleHRpby5jIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJPC9GaWx0ZXI+CiAJCTwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJPYmplY3RzIgpAQCAtMTM3OSw3ICsxNDE5LDcgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzdHJpbmdvYmplY3QuYyIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcY2Fwc3VsZS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkBAIC0xNDY3LDYgKzE1MDcsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNDk5LDYgKzE1NDMsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzdHJpbmdvYmplY3QuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYyIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xNjU5LDYgKzE3MTEsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGR0b2EuYyIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTY5NSwxMCArMTc1MSw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxnZXRtdGltZS5jIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZ2V0b3B0LmMiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtMTc1MSw2ICsxODAzLDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxweWN0eXBlLmMiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxweWZwZS5jIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCAxMWE5YmNlLi4zNjZmYzA3IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC01NSw3ICs1NSw3IEBACiAgICAgVmlzdWFsIEMrKyA2LjAKIFBDL1ZTNy4xLwogICAgIFZpc3VhbCBTdHVkaW8gMjAwMyAoNy4xKQotUENidWlsZDgvCitQQy9WUzguMC8KICAgICBWaXN1YWwgU3R1ZGlvIDIwMDUgKDguMCkKIAogCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICBXcmFwcyBCZXJrZWxleSBEQiA0LjcuMjUsIHdoaWNoIGlzIGN1cnJlbnRseSBidWlsdCBieSBfYnNkZGIudmNwcm9qLgogICAgIHByb2plY3QgKHNlZSBiZWxvdykuCiBfc3FsaXRlMwotICAgIFdyYXBzIFNRTGl0ZSAzLjUuOSwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IHNxbGl0ZTMudmNwcm9qIChzZWUgYmVsb3cpLgorICAgIFdyYXBzIFNRTGl0ZSAzLjYuMjEsIHdoaWNoIGlzIGN1cnJlbnRseSBidWlsdCBieSBzcWxpdGUzLnZjcHJvaiAoc2VlIGJlbG93KS4KIF90a2ludGVyCiAgICAgV3JhcHMgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBVbmxpa2UgX2JzZGRiIGFuZCBfc3FsaXRlMywgdGhlcmUncyBubwogICAgIGNvcnJlc3BvbmRpbmcgdGNsdGsudmNwcm9qLXR5cGUgcHJvamVjdCB0aGF0IGJ1aWxkcyBUY2wvVGsgZnJvbSB2Y3Byb2oncwpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgbmFzbXcuZXhlLgogCiAgICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCisgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCiAgICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20gCiAgICAgcHl0aG9uJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LiBUaGUgc3ZuIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWxkCiAgICAgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcnQuYmF0IGIvUENidWlsZC9ydC5iYXQKaW5kZXggNTgzZDRmMy4uZWUxNjYxYSAxMDA2NDQKLS0tIGEvUENidWlsZC9ydC5iYXQKKysrIGIvUENidWlsZC9ydC5iYXQKQEAgLTQwLDcgKzQwLDcgQEAKIAogUEFUSCAlUEFUSCU7Li5cLi5cJXRjbHRrJVxiaW4KIHNldCBleGU9JXByZWZpeCVccHl0aG9uJXN1ZmZpeCUKLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAtdHQgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK3NldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtV2QgLTMgLUUgLXR0IC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5CiBpZiBkZWZpbmVkIHFtb2RlIGdvdG8gUW1vZGUKIAogZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3NlbGVjdC52Y3Byb2ogYi9QQ2J1aWxkL3NlbGVjdC52Y3Byb2oKaW5kZXggYjk3Y2I0ZC4uYjA2N2FkMCAxMDA2NDQKLS0tIGEvUENidWlsZC9zZWxlY3QudmNwcm9qCisrKyBiL1BDYnVpbGQvc2VsZWN0LnZjcHJvagpAQCAtNTQsNyArNTQsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMTc4LDcgKzE3OCw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTI0MSw3ICsyNDEsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCS8+CkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIgogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiCiAJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiCiAJCQkvPgpAQCAtMzY2LDcgKzM2Niw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJCVRhcmdldE1hY2hpbmU9IjE3IgpAQCAtNDI5LDcgKzQyOSw3IEBACiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiIKIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIgogCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIgogCQkJLz4KQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJLz4KIAkJCTxUb29sCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyIKIAkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCIKIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyIKZGlmZiAtLWdpdCBhL1BDYnVpbGQvdnM5dG84LnB5IGIvUENidWlsZC92czl0bzgucHkKaW5kZXggMmRmYmQ1ZC4uYTRlNjgwMSAxMDA2NDQKLS0tIGEvUENidWlsZC92czl0bzgucHkKKysrIGIvUENidWlsZC92czl0bzgucHkKQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgICAgICAgICAgIyBCYWguIFZTOC4wIGRvZXMgbm90IGV4cGFuZCBtYWNyb3MgaW4gZmlsZSBuYW1lcy4KICAgICAgICAgICAgICMgUmVwbGFjZSB0aGVtIGhlcmUuCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJyQoc3FsaXRlM0RpciknLCAnLi5cXC4uXFwuLlxcc3FsaXRlLTMuNS45JykKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnJChzcWxpdGUzRGlyKScsICcuLlxcLi5cXC4uXFxzcWxpdGUtMy42LjIxJykKICAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnJChic2RkYkRpcilcXC4uXFwuLicsICcuLlxcLi5cXC4uXFxkYi00LjcuMjUuMFxcYnVpbGRfd2luZG93c1xcLi4nKQogICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCckKGJzZGRiRGlyKScsICcuLlxcLi5cXC4uXFxkYi00LjcuMjUuMFxcYnVpbGRfd2luZG93cycpCiAKZGlmZiAtLWdpdCBhL1BhcnNlci9QeXRob24uYXNkbCBiL1BhcnNlci9QeXRob24uYXNkbAppbmRleCBhNDM5NGM5Li45YTliOTMzIDEwMDY0NAotLS0gYS9QYXJzZXIvUHl0aG9uLmFzZGwKKysrIGIvUGFyc2VyL1B5dGhvbi5hc2RsCkBAIC0xMSw3ICsxMSw3IEBACiAKIAlzdG10ID0gRnVuY3Rpb25EZWYoaWRlbnRpZmllciBuYW1lLCBhcmd1bWVudHMgYXJncywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RtdCogYm9keSwgZXhwciogZGVjb3JhdG9yX2xpc3QpCi0JICAgICAgfCBDbGFzc0RlZihpZGVudGlmaWVyIG5hbWUsIGV4cHIqIGJhc2VzLCBzdG10KiBib2R5LCBleHByICpkZWNvcmF0b3JfbGlzdCkKKwkgICAgICB8IENsYXNzRGVmKGlkZW50aWZpZXIgbmFtZSwgZXhwciogYmFzZXMsIHN0bXQqIGJvZHksIGV4cHIqIGRlY29yYXRvcl9saXN0KQogCSAgICAgIHwgUmV0dXJuKGV4cHI/IHZhbHVlKQogCiAJICAgICAgfCBEZWxldGUoZXhwciogdGFyZ2V0cykKQEAgLTM0LDcgKzM0LDcgQEAKIAkgICAgICB8IEFzc2VydChleHByIHRlc3QsIGV4cHI/IG1zZykKIAogCSAgICAgIHwgSW1wb3J0KGFsaWFzKiBuYW1lcykKLQkgICAgICB8IEltcG9ydEZyb20oaWRlbnRpZmllciBtb2R1bGUsIGFsaWFzKiBuYW1lcywgaW50PyBsZXZlbCkKKwkgICAgICB8IEltcG9ydEZyb20oaWRlbnRpZmllcj8gbW9kdWxlLCBhbGlhcyogbmFtZXMsIGludD8gbGV2ZWwpCiAKIAkgICAgICAtLSBEb2Vzbid0IGNhcHR1cmUgcmVxdWlyZW1lbnQgdGhhdCBsb2NhbHMgbXVzdCBiZQogCSAgICAgIC0tIGRlZmluZWQgaWYgZ2xvYmFscyBpcwpAQCAtNTYsNyArNTYsMTAgQEAKIAkgICAgIHwgTGFtYmRhKGFyZ3VtZW50cyBhcmdzLCBleHByIGJvZHkpCiAJICAgICB8IElmRXhwKGV4cHIgdGVzdCwgZXhwciBib2R5LCBleHByIG9yZWxzZSkKIAkgICAgIHwgRGljdChleHByKiBrZXlzLCBleHByKiB2YWx1ZXMpCisJICAgICB8IFNldChleHByKiBlbHRzKQogCSAgICAgfCBMaXN0Q29tcChleHByIGVsdCwgY29tcHJlaGVuc2lvbiogZ2VuZXJhdG9ycykKKwkgICAgIHwgU2V0Q29tcChleHByIGVsdCwgY29tcHJlaGVuc2lvbiogZ2VuZXJhdG9ycykKKwkgICAgIHwgRGljdENvbXAoZXhwciBrZXksIGV4cHIgdmFsdWUsIGNvbXByZWhlbnNpb24qIGdlbmVyYXRvcnMpCiAJICAgICB8IEdlbmVyYXRvckV4cChleHByIGVsdCwgY29tcHJlaGVuc2lvbiogZ2VuZXJhdG9ycykKIAkgICAgIC0tIHRoZSBncmFtbWFyIGNvbnN0cmFpbnMgd2hlcmUgeWllbGQgZXhwcmVzc2lvbnMgY2FuIG9jY3VyCiAJICAgICB8IFlpZWxkKGV4cHI/IHZhbHVlKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGwucHkgYi9QYXJzZXIvYXNkbC5weQppbmRleCAwY2FkYTJiLi43ZjU4NTZiIDEwMDY0NAotLS0gYS9QYXJzZXIvYXNkbC5weQorKysgYi9QYXJzZXIvYXNkbC5weQpAQCAtMTAsMTQgKzEwLDEyIEBACiBDaGFuZ2VzIGZvciBQeXRob246IEFkZCBzdXBwb3J0IGZvciBtb2R1bGUgdmVyc2lvbnMKICIiIgogCi0jX19tZXRhY2xhc3NfXyA9IHR5cGUKLQogaW1wb3J0IG9zCiBpbXBvcnQgdHJhY2ViYWNrCiAKIGltcG9ydCBzcGFyawogCi1jbGFzcyBUb2tlbjoKK2NsYXNzIFRva2VuKG9iamVjdCk6CiAgICAgIyBzcGFyayBzZWVtcyB0byBkaXNwYXRjaCBpbiB0aGUgcGFyc2VyIGJhc2VkIG9uIGEgdG9rZW4ncwogICAgICMgdHlwZSBhdHRyaWJ1dGUKICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgbGluZW5vKToKQEAgLTQ1LDcgKzQzLDcgQEAKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCiAKLWNsYXNzIEFTRExTeW50YXhFcnJvcjoKK2NsYXNzIEFTRExTeW50YXhFcnJvcihFeGNlcHRpb24pOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVubywgdG9rZW49Tm9uZSwgbXNnPU5vbmUpOgogICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubwpAQCAtMjA2LDE5ICsyMDQsMTkgQEAKIAogICAgIGRlZiBwX2ZpZWxkXzIoc2VsZiwgKHR5cGUsIF8sIG5hbWUpKToKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgKiBJZCAiCi0gICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBuYW1lLCBzZXE9MSkKKyAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG5hbWUsIHNlcT1UcnVlKQogCiAgICAgZGVmIHBfZmllbGRfMyhzZWxmLCAodHlwZSwgXywgbmFtZSkpOgogICAgICAgICAiIGZpZWxkIDo6PSBJZCA/IElkICIKLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG5hbWUsIG9wdD0xKQorICAgICAgICByZXR1cm4gRmllbGQodHlwZSwgbmFtZSwgb3B0PVRydWUpCiAKICAgICBkZWYgcF9maWVsZF80KHNlbGYsICh0eXBlLCBfKSk6CiAgICAgICAgICIgZmllbGQgOjo9IElkICogIgotICAgICAgICByZXR1cm4gRmllbGQodHlwZSwgc2VxPTEpCisgICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBzZXE9VHJ1ZSkKIAogICAgIGRlZiBwX2ZpZWxkXzUoc2VsZiwgKHR5cGUsIF8pKToKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyAiCi0gICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBvcHQ9MSkKKyAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG9wdD1UcnVlKQogCiBidWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJpbnQiLCAiYm9vbCIsICJvYmplY3QiKQogCkBAIC0yMjYsNyArMjI0LDcgQEAKICMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCiAjIHBpZWNlbWVhbCBhcyB0aGV5IHNlZW0gaGVscGZ1bAogCi1jbGFzcyBBU1Q6CitjbGFzcyBBU1Qob2JqZWN0KToKICAgICBwYXNzICMgYSBtYXJrZXIgY2xhc3MKIAogY2xhc3MgTW9kdWxlKEFTVCk6CkBAIC0yNTgsNyArMjU2LDcgQEAKICAgICAgICAgcmV0dXJuICJDb25zdHJ1Y3RvciglcywgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuZmllbGRzKQogCiBjbGFzcyBGaWVsZChBU1QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBuYW1lPU5vbmUsIHNlcT0wLCBvcHQ9MCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIG5hbWU9Tm9uZSwgc2VxPUZhbHNlLCBvcHQ9RmFsc2UpOgogICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5zZXEgPSBzZXEKQEAgLTI2Niw5ICsyNjQsOSBAQAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnNlcToKLSAgICAgICAgICAgIGV4dHJhID0gIiwgc2VxPTEiCisgICAgICAgICAgICBleHRyYSA9ICIsIHNlcT1UcnVlIgogICAgICAgICBlbGlmIHNlbGYub3B0OgotICAgICAgICAgICAgZXh0cmEgPSAiLCBvcHQ9MSIKKyAgICAgICAgICAgIGV4dHJhID0gIiwgb3B0PVRydWUiCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBleHRyYSA9ICIiCiAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBOb25lOgpAQCAtMjk2LDcgKzI5NCw3IEBACiAKIGNsYXNzIFZpc2l0b3JCYXNlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcD0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2tpcD1GYWxzZSk6CiAgICAgICAgIHNlbGYuY2FjaGUgPSB7fQogICAgICAgICBzZWxmLnNraXAgPSBza2lwCiAKQEAgLTMzMSw3ICszMjksNyBAQAogY2xhc3MgQ2hlY2soVmlzaXRvckJhc2UpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzdXBlcihDaGVjaywgc2VsZikuX19pbml0X18oc2tpcD0xKQorICAgICAgICBzdXBlcihDaGVjaywgc2VsZikuX19pbml0X18oc2tpcD1UcnVlKQogICAgICAgICBzZWxmLmNvbnMgPSB7fQogICAgICAgICBzZWxmLmVycm9ycyA9IDAKICAgICAgICAgc2VsZi50eXBlcyA9IHt9CkBAIC0zNzMsNyArMzcxLDcgQEAKICAgICB2LnZpc2l0KG1vZCkKIAogICAgIGZvciB0IGluIHYudHlwZXM6Ci0gICAgICAgIGlmIG5vdCBtb2QudHlwZXMuaGFzX2tleSh0KSBhbmQgbm90IHQgaW4gYnVpbHRpbl90eXBlczoKKyAgICAgICAgaWYgdCBub3QgaW4gbW9kLnR5cGVzIGFuZCBub3QgdCBpbiBidWlsdGluX3R5cGVzOgogICAgICAgICAgICAgdi5lcnJvcnMgKz0gMQogICAgICAgICAgICAgdXNlcyA9ICIsICIuam9pbih2LnR5cGVzW3RdKQogICAgICAgICAgICAgcHJpbnQgIlVuZGVmaW5lZCB0eXBlICVzLCB1c2VkIGluICVzIiAlICh0LCB1c2VzKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGxfYy5weSBiL1BhcnNlci9hc2RsX2MucHkKaW5kZXggMzc3MmIxMi4uNjM0YWQyOSAxMDA3NTUKLS0tIGEvUGFyc2VyL2FzZGxfYy5weQorKysgYi9QYXJzZXIvYXNkbF9jLnB5CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKICAgICAgICAgc3VwZXIoRW1pdFZpc2l0b3IsIHNlbGYpLl9faW5pdF9fKCkKIAotICAgIGRlZiBlbWl0KHNlbGYsIHMsIGRlcHRoLCByZWZsb3c9MSk6CisgICAgZGVmIGVtaXQoc2VsZiwgcywgZGVwdGgsIHJlZmxvdz1UcnVlKToKICAgICAgICAgIyBYWFggcmVmbG93IGxvbmcgbGluZXM/CiAgICAgICAgIGlmIHJlZmxvdzoKICAgICAgICAgICAgIGxpbmVzID0gcmVmbG93X2xpbmVzKHMsIGRlcHRoKQpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgIGN0eXBlID0gZ2V0X2NfdHlwZSh0eXBlKQogICAgICAgICBzZWxmLmVtaXRfZnVuY3Rpb24oY29ucy5uYW1lLCBjdHlwZSwgYXJncywgYXR0cnMpCiAKLSAgICBkZWYgZW1pdF9mdW5jdGlvbihzZWxmLCBuYW1lLCBjdHlwZSwgYXJncywgYXR0cnMsIHVuaW9uPTEpOgorICAgIGRlZiBlbWl0X2Z1bmN0aW9uKHNlbGYsIG5hbWUsIGN0eXBlLCBhcmdzLCBhdHRycywgdW5pb249VHJ1ZSk6CiAgICAgICAgIGFyZ3MgPSBhcmdzICsgYXR0cnMKICAgICAgICAgaWYgYXJnczoKICAgICAgICAgICAgIGFyZ3N0ciA9ICIsICIuam9pbihbIiVzICVzIiAlIChhdHlwZSwgYW5hbWUpCkBAIC0yNjcsMTkgKzI2NywxOSBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYXJncykrMSk6CiAgICAgICAgICAgICBtYXJncyArPSAiLCBhJWQiICUgaQogICAgICAgICBzZWxmLmVtaXQoIiNkZWZpbmUgJXMoJXMpIF9QeV8lcyglcykiICUgKG5hbWUsIG1hcmdzLCBuYW1lLCBtYXJncyksIDAsCi0gICAgICAgICAgICAgICAgcmVmbG93ID0gMCkKLSAgICAgICAgc2VsZi5lbWl0KCIlcyBfUHlfJXMoJXMpOyIgJSAoY3R5cGUsIG5hbWUsIGFyZ3N0ciksIDApCisgICAgICAgICAgICAgICAgcmVmbG93PUZhbHNlKQorICAgICAgICBzZWxmLmVtaXQoIiVzIF9QeV8lcyglcyk7IiAlIChjdHlwZSwgbmFtZSwgYXJnc3RyKSwgRmFsc2UpCiAKICAgICBkZWYgdmlzaXRQcm9kdWN0KHNlbGYsIHByb2QsIG5hbWUpOgogICAgICAgICBzZWxmLmVtaXRfZnVuY3Rpb24obmFtZSwgZ2V0X2NfdHlwZShuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2FyZ3MocHJvZC5maWVsZHMpLCBbXSwgdW5pb249MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2FyZ3MocHJvZC5maWVsZHMpLCBbXSwgdW5pb249RmFsc2UpCiAKIAogY2xhc3MgRnVuY3Rpb25WaXNpdG9yKFByb3RvdHlwZVZpc2l0b3IpOgogICAgICIiIlZpc2l0b3IgdG8gZ2VuZXJhdGUgY29uc3RydWN0b3IgZnVuY3Rpb25zIGZvciBBU1QuIiIiCiAKLSAgICBkZWYgZW1pdF9mdW5jdGlvbihzZWxmLCBuYW1lLCBjdHlwZSwgYXJncywgYXR0cnMsIHVuaW9uPTEpOgotICAgICAgICBkZWYgZW1pdChzLCBkZXB0aD0wLCByZWZsb3c9MSk6CisgICAgZGVmIGVtaXRfZnVuY3Rpb24oc2VsZiwgbmFtZSwgY3R5cGUsIGFyZ3MsIGF0dHJzLCB1bmlvbj1UcnVlKToKKyAgICAgICAgZGVmIGVtaXQocywgZGVwdGg9MCwgcmVmbG93PVRydWUpOgogICAgICAgICAgICAgc2VsZi5lbWl0KHMsIGRlcHRoLCByZWZsb3cpCiAgICAgICAgIGFyZ3N0ciA9ICIsICIuam9pbihbIiVzICVzIiAlIChhdHlwZSwgYW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGF0eXBlLCBhbmFtZSwgb3B0IGluIGFyZ3MgKyBhdHRyc10pCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICAgICAgICAgICAgICBlbWl0KCJQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwiLCAyKQogICAgICAgICAgICAgICAgIG1zZyA9ICJmaWVsZCAlcyBpcyByZXF1aXJlZCBmb3IgJXMiICUgKGFyZ25hbWUsIG5hbWUpCiAgICAgICAgICAgICAgICAgZW1pdCgnICAgICAgICAgICAgICAgICIlcyIpOycgJSBtc2csCi0gICAgICAgICAgICAgICAgICAgICAyLCByZWZsb3c9MCkKKyAgICAgICAgICAgICAgICAgICAgIDIsIHJlZmxvdz1GYWxzZSkKICAgICAgICAgICAgICAgICBlbWl0KCdyZXR1cm4gTlVMTDsnLCAyKQogICAgICAgICAgICAgICAgIGVtaXQoJ30nLCAxKQogCkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICAgICAgZW1pdCgiIikKIAogICAgIGRlZiBlbWl0X2JvZHlfdW5pb24oc2VsZiwgbmFtZSwgYXJncywgYXR0cnMpOgotICAgICAgICBkZWYgZW1pdChzLCBkZXB0aD0wLCByZWZsb3c9MSk6CisgICAgICAgIGRlZiBlbWl0KHMsIGRlcHRoPTAsIHJlZmxvdz1UcnVlKToKICAgICAgICAgICAgIHNlbGYuZW1pdChzLCBkZXB0aCwgcmVmbG93KQogICAgICAgICBlbWl0KCJwLT5raW5kID0gJXNfa2luZDsiICUgbmFtZSwgMSkKICAgICAgICAgZm9yIGFyZ3R5cGUsIGFyZ25hbWUsIG9wdCBpbiBhcmdzOgpAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgICAgICAgICBlbWl0KCJwLT4lcyA9ICVzOyIgJSAoYXJnbmFtZSwgYXJnbmFtZSksIDEpCiAKICAgICBkZWYgZW1pdF9ib2R5X3N0cnVjdChzZWxmLCBuYW1lLCBhcmdzLCBhdHRycyk6Ci0gICAgICAgIGRlZiBlbWl0KHMsIGRlcHRoPTAsIHJlZmxvdz0xKToKKyAgICAgICAgZGVmIGVtaXQocywgZGVwdGg9MCwgcmVmbG93PVRydWUpOgogICAgICAgICAgICAgc2VsZi5lbWl0KHMsIGRlcHRoLCByZWZsb3cpCiAgICAgICAgIGZvciBhcmd0eXBlLCBhcmduYW1lLCBvcHQgaW4gYXJnczoKICAgICAgICAgICAgIGVtaXQoInAtPiVzID0gJXM7IiAlIChhcmduYW1lLCBhcmduYW1lKSwgMSkKQEAgLTczMyw4ICs3MzMsOSBAQAogewogICAgIGludCBpLCByZXN1bHQ7CiAgICAgUHlPYmplY3QgKnMsICpsID0gUHlUdXBsZV9OZXcobnVtX2ZpZWxkcyk7Ci0gICAgaWYgKCFsKSByZXR1cm4gMDsKLSAgICBmb3IoaSA9IDA7IGkgPCBudW1fZmllbGRzOyBpKyspIHsKKyAgICBpZiAoIWwpCisgICAgICAgIHJldHVybiAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmllbGRzOyBpKyspIHsKICAgICAgICAgcyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoYXR0cnNbaV0pOwogICAgICAgICBpZiAoIXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsKTsKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyLm1hayBiL1BhcnNlci9ncmFtbWFyLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmMDI4Zi4uMDAwMDAwMAotLS0gYS9QYXJzZXIvZ3JhbW1hci5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIFRoaXMgbWFuYWdlcyB0byByZWJ1aWxkIGdyYW1pbml0LntoLCBjfSB1bmRlciBNU1ZDIDYgKFdpbmRvd3MpLCB2aWEKLSMKLSMgICAgIG5tYWtlIC9mIGdyYW1tYXIubWFrCi0jCi0jIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGNvcHkgcHl0aG9uMjMuZGxsIGludG8gdGhpcyBkaXJlY3RvcnksIG9yIGdldAotIyBpdCBvbiB5b3VyIHNlYXJjaCBwYXRoLgotIwotIyBUaGUgaW50ZXJtZWRpYXRlIGZpbGVzIGNhbiBiZSBudWtlZCBhZnRlcndhcmRzOgotIwotIyAgICAgbm1ha2UgL2YgZ3JhbW1hci5tYWsgY2xlYW4KLSMKLSMgSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBtYXplIG9mIHByZXByb2Nlc3NvciAjZGVmaW5lJ3Mgb24gV2luZG93cywgYW5kCi0jIGFzIGEgcmVzdWx0IHRoaXMgcmVxdWlyZXMgbGlua2luZyB3aXRoIHB5dGhvbjIzLmxpYiwgc28gaXQncyBvZiBubyB1c2UKLSMgZm9yIGJvb3RzdHJhcHBpbmcgKHRoZSBjYXVzZSBhcHBlYXJzIHRvIGJlIGEgdXNlbGVzcy0tIGluIHRoaXMKLSMgcGFydGljdWxhciBjYXNlIC0tcHJhZ21hIGluIFBDXHB5Y29uZmlnLmgsIHdoaWNoIGRlbWFuZHMgdGhhdAotIyBweXRob24yMy5saWIgZ2V0IGxpbmtlZCBpbikuCi0KLUxJQlM9IC4uXFBDYnVpbGRccHl0aG9uMjUubGliCi0KLUNGTEFHUz0gL0kgLi5cSW5jbHVkZSAvSSAuLlxQQyAvRCBNU19OT19DT1JFRExMIC9EIFBHRU4gL01ECi0KLUdSQU1NQVJfSD0gLi5cSW5jbHVkZVxncmFtaW5pdC5oCi1HUkFNTUFSX0M9IC4uXFB5dGhvblxncmFtaW5pdC5jCi1HUkFNTUFSX0lOUFVUPSAuLlxHcmFtbWFyXEdyYW1tYXIKLQotUEdFTj0gcGdlbi5leGUKLQotUE9CSlM9IGFjY2VsZXIub2JqIGdyYW1tYXIxLm9iaiBsaXN0bm9kZS5vYmogbm9kZS5vYmogcGFyc2VyLm9iaiBcCi0gICAgICAgcGFyc2V0b2sub2JqIHRva2VuaXplci5vYmogYml0c2V0Lm9iaiBtZXRhZ3JhbW1hci5vYmoKLQotUEFSU0VSX09CSlM9ICQoUE9CSlMpIG15cmVhZGxpbmUub2JqCi0KLVBHT0JKUz0gZmlyc3RzZXRzLm9iaiBncmFtbWFyLm9iaiBwZ2VuLm9iaiBwcmludGdyYW1tYXIub2JqIHBnZW5tYWluLm9iagotCi1QR0VOT0JKUz0gJChQT0JKUykgJChQR09CSlMpCi0KLSQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQyk6ICQoUEdFTikgJChHUkFNTUFSX0lOUFVUKQotCQkkKFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQotCi0kKFBHRU4pOgkkKFBHRU5PQkpTKQotCQkkKENDKSAkKFBHRU5PQkpTKSAkKExJQlMpIC9GZSQoUEdFTikKLQotY2xlYW46Ci0gICAgICAgIGRlbCAqLm9iagotICAgICAgICBkZWwgJChQR0VOKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL215cmVhZGxpbmUuYyBiL1BhcnNlci9teXJlYWRsaW5lLmMKaW5kZXggMTIyZjg5Ni4uNmQ5MGQyMCAxMDA2NDQKLS0tIGEvUGFyc2VyL215cmVhZGxpbmUuYworKysgYi9QYXJzZXIvbXlyZWFkbGluZS5jCkBAIC00MCw2NiArNDAsNjMgQEAKIG15X2ZnZXRzKGNoYXIgKmJ1ZiwgaW50IGxlbiwgRklMRSAqZnApCiB7CiAgICAgY2hhciAqcDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChQeU9TX0lucHV0SG9vayAhPSBOVUxMKQotICAgICAgICAgICAgKHZvaWQpKFB5T1NfSW5wdXRIb29rKSgpOwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHAgPSBmZ2V0cyhidWYsIGxlbiwgZnApOwotICAgICAgICBpZiAocCAhPSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIDA7IC8qIE5vIGVycm9yICovCisgICAgaWYgKFB5T1NfSW5wdXRIb29rICE9IE5VTEwpCisgICAgICAgICh2b2lkKShQeU9TX0lucHV0SG9vaykoKTsKKyAgICBlcnJubyA9IDA7CisgICAgcCA9IGZnZXRzKGJ1ZiwgbGVuLCBmcCk7CisgICAgaWYgKHAgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7IC8qIE5vIGVycm9yICovCiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAvKiBJbiB0aGUgY2FzZSBvZiBhIEN0cmwrQyBvciBzb21lIG90aGVyIGV4dGVybmFsIGV2ZW50Ci0gICAgICAgICAgIGludGVycnVwdGluZyB0aGUgb3BlcmF0aW9uOgotICAgICAgICAgICBXaW4yay9OVDogRVJST1JfT1BFUkFUSU9OX0FCT1JURUQgaXMgdGhlIG1vc3QgcmVjZW50IFdpbjMyCi0gICAgICAgICAgIGVycm9yIGNvZGUgKGFuZCBmZW9mKCkgcmV0dXJucyBUUlVFKS4KLSAgICAgICAgICAgV2luOXg6IEN0cmwrQyBzZWVtcyB0byBoYXZlIG5vIGVmZmVjdCBvbiBmZ2V0cygpIHJldHVybmluZwotICAgICAgICAgICBlYXJseSAtIHRoZSBzaWduYWwgaGFuZGxlciBpcyBjYWxsZWQsIGJ1dCB0aGUgZmdldHMoKQotICAgICAgICAgICBvbmx5IHJldHVybnMgIm5vcm1hbGx5IiAoaWUsIHdoZW4gRW50ZXIgaGl0IG9yIGZlb2YoKSkKKyAgICAvKiBJbiB0aGUgY2FzZSBvZiBhIEN0cmwrQyBvciBzb21lIG90aGVyIGV4dGVybmFsIGV2ZW50CisgICAgICAgaW50ZXJydXB0aW5nIHRoZSBvcGVyYXRpb246CisgICAgICAgV2luMmsvTlQ6IEVSUk9SX09QRVJBVElPTl9BQk9SVEVEIGlzIHRoZSBtb3N0IHJlY2VudCBXaW4zMgorICAgICAgIGVycm9yIGNvZGUgKGFuZCBmZW9mKCkgcmV0dXJucyBUUlVFKS4KKyAgICAgICBXaW45eDogQ3RybCtDIHNlZW1zIHRvIGhhdmUgbm8gZWZmZWN0IG9uIGZnZXRzKCkgcmV0dXJuaW5nCisgICAgICAgZWFybHkgLSB0aGUgc2lnbmFsIGhhbmRsZXIgaXMgY2FsbGVkLCBidXQgdGhlIGZnZXRzKCkKKyAgICAgICBvbmx5IHJldHVybnMgIm5vcm1hbGx5IiAoaWUsIHdoZW4gRW50ZXIgaGl0IG9yIGZlb2YoKSkKKyAgICAqLworICAgIGlmIChHZXRMYXN0RXJyb3IoKT09RVJST1JfT1BFUkFUSU9OX0FCT1JURUQpIHsKKyAgICAgICAgLyogU2lnbmFscyBjb21lIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBzbGVlcCBhIGJyaWVmCisgICAgICAgICAgIG1vbWVudCBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIGhhbmRsZXIgaGFzIGJlZW4KKyAgICAgICAgICAgdHJpZ2dlcmVkICh3ZSBjYW50IGp1c3QgcmV0dXJuIDEgYmVmb3JlIHRoZQorICAgICAgICAgICBzaWduYWwgaGFuZGxlciBoYXMgYmVlbiBjYWxsZWQsIGFzIHRoZSBsYXRlcgorICAgICAgICAgICBzaWduYWwgbWF5IGJlIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQpLgogICAgICAgICAqLwotICAgICAgICBpZiAoR2V0TGFzdEVycm9yKCk9PUVSUk9SX09QRVJBVElPTl9BQk9SVEVEKSB7Ci0gICAgICAgICAgICAvKiBTaWduYWxzIGNvbWUgYXN5bmNocm9ub3VzbHksIHNvIHdlIHNsZWVwIGEgYnJpZWYKLSAgICAgICAgICAgICAgIG1vbWVudCBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIGhhbmRsZXIgaGFzIGJlZW4KLSAgICAgICAgICAgICAgIHRyaWdnZXJlZCAod2UgY2FudCBqdXN0IHJldHVybiAxIGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgIHNpZ25hbCBoYW5kbGVyIGhhcyBiZWVuIGNhbGxlZCwgYXMgdGhlIGxhdGVyCi0gICAgICAgICAgICAgICBzaWduYWwgbWF5IGJlIHRyZWF0ZWQgYXMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQpLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFNsZWVwKDEpOwotICAgICAgICAgICAgaWYgKFB5T1NfSW50ZXJydXB0T2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEVpdGhlciB0aGUgc2xlZXAgd2Fzbid0IGxvbmcgZW5vdWdoIChuZWVkIGEKLSAgICAgICAgICAgICAgIHNob3J0IGxvb3AgcmV0cnlpbmc/KSBvciBub3QgaW50ZXJydXB0ZWQgYXQgYWxsCi0gICAgICAgICAgICAgICAoaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgcmV2aXNpdCB0aGUgd2hvbGUgdGhpbmchKQotICAgICAgICAgICAgICAgTG9nZ2luZyBzb21lIHdhcm5pbmcgd291bGQgYmUgbmljZS4gIGFzc2VydCBpcyBub3QKLSAgICAgICAgICAgICAgIHZpYWJsZSBhcyB1bmRlciB0aGUgZGVidWdnZXIsIHRoZSB2YXJpb3VzIGRpYWxvZ3MKLSAgICAgICAgICAgICAgIG1lYW4gdGhlIGNvbmRpdGlvbiBpcyBub3QgdHJ1ZS4KLSAgICAgICAgICAgICovCi0gICAgICAgIH0KLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCi0gICAgICAgIGlmIChmZW9mKGZwKSkgewotICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBFT0YgKi8KLSAgICAgICAgfQotI2lmZGVmIEVJTlRSCi0gICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgewotICAgICAgICAgICAgaW50IHM7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKF9QeU9TX1JlYWRsaW5lVFN0YXRlKTsKLSNlbmRpZgotICAgICAgICAgICAgcyA9IFB5RXJyX0NoZWNrU2lnbmFscygpOwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgICAgICBQeUV2YWxfU2F2ZVRocmVhZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocyA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCisgICAgICAgIFNsZWVwKDEpOwogICAgICAgICBpZiAoUHlPU19JbnRlcnJ1cHRPY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gMTsgLyogSW50ZXJydXB0ICovCiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0yOyAvKiBFcnJvciAqLworICAgICAgICAvKiBFaXRoZXIgdGhlIHNsZWVwIHdhc24ndCBsb25nIGVub3VnaCAobmVlZCBhCisgICAgICAgICAgIHNob3J0IGxvb3AgcmV0cnlpbmc/KSBvciBub3QgaW50ZXJydXB0ZWQgYXQgYWxsCisgICAgICAgICAgIChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCByZXZpc2l0IHRoZSB3aG9sZSB0aGluZyEpCisgICAgICAgICAgIExvZ2dpbmcgc29tZSB3YXJuaW5nIHdvdWxkIGJlIG5pY2UuICBhc3NlcnQgaXMgbm90CisgICAgICAgICAgIHZpYWJsZSBhcyB1bmRlciB0aGUgZGVidWdnZXIsIHRoZSB2YXJpb3VzIGRpYWxvZ3MKKyAgICAgICAgICAgbWVhbiB0aGUgY29uZGl0aW9uIGlzIG5vdCB0cnVlLgorICAgICAgICAqLwogICAgIH0KLSAgICAvKiBOT1RSRUFDSEVEICovCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworICAgIGlmIChmZW9mKGZwKSkgeworICAgICAgICByZXR1cm4gLTE7IC8qIEVPRiAqLworICAgIH0KKyNpZmRlZiBFSU5UUgorICAgIGlmIChlcnJubyA9PSBFSU5UUikgeworICAgICAgICBpbnQgczsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZChfUHlPU19SZWFkbGluZVRTdGF0ZSk7CisjZW5kaWYKKyAgICAgICAgcyA9IFB5RXJyX0NoZWNrU2lnbmFscygpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkKCk7CisjZW5kaWYKKyAgICAgICAgaWYgKHMgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChQeU9TX0ludGVycnVwdE9jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIDE7IC8qIEludGVycnVwdCAqLworICAgIH0KKyAgICByZXR1cm4gLTI7IC8qIEVycm9yICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCBjYWQ3YTgwLi5lOGQzOTZhIDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgaW5pdGVycihlcnJfcmV0LCBmaWxlbmFtZSk7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21TdHJpbmcocykpID09IE5VTEwpIHsKKyAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21TdHJpbmcocywgc3RhcnQgPT0gZmlsZV9pbnB1dCkpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBQeUVycl9PY2N1cnJlZCgpID8gRV9ERUNPREUgOiBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDMsMTYgKzI0MywyNCBAQAogICAgICAgICAgICAgZXJyX3JldC0+dGV4dCA9IHRleHQ7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHRvay0+ZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAvKiAnbm9kZXMtPm5fc3RyJyB1c2VzIFB5T2JqZWN0XyosIHdoaWxlICd0b2stPmVuY29kaW5nJyB3YXMKKyAgICAgICAgICogYWxsb2NhdGVkIHVzaW5nIFB5TWVtXworICAgICAgICAgKi8KICAgICAgICAgbm9kZSogciA9IFB5Tm9kZV9OZXcoZW5jb2RpbmdfZGVjbCk7Ci0gICAgICAgIGlmICghcikgeworICAgICAgICBpZiAocikKKyAgICAgICAgICAgIHItPm5fc3RyID0gUHlPYmplY3RfTUFMTE9DKHN0cmxlbih0b2stPmVuY29kaW5nKSsxKTsKKyAgICAgICAgaWYgKCFyIHx8ICFyLT5uX3N0cikgewogICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOworICAgICAgICAgICAgaWYgKHIpCisgICAgICAgICAgICAgICAgUHlPYmplY3RfRlJFRShyKTsKICAgICAgICAgICAgIG4gPSBOVUxMOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9Ci0gICAgICAgIHItPm5fc3RyID0gdG9rLT5lbmNvZGluZzsKKyAgICAgICAgc3RyY3B5KHItPm5fc3RyLCB0b2stPmVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fRlJFRSh0b2stPmVuY29kaW5nKTsKKyAgICAgICAgdG9rLT5lbmNvZGluZyA9IE5VTEw7CiAgICAgICAgIHItPm5fbmNoaWxkcmVuID0gMTsKICAgICAgICAgci0+bl9jaGlsZCA9IG47Ci0gICAgICAgIHRvay0+ZW5jb2RpbmcgPSBOVUxMOwogICAgICAgICBuID0gcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCBhMDhmMTgzLi5lZTYzMTNiIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC05Miw3ICs5Miw2IEBACiAgICAgIjxOX1RPS0VOUz4iCiB9OwogCi0KIC8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyB0b2tfc3RhdGUgc3RydWN0dXJlICovCiAKIHN0YXRpYyBzdHJ1Y3QgdG9rX3N0YXRlICoKQEAgLTEwNSw2ICsxMDQsNyBAQAogICAgIHRvay0+YnVmID0gdG9rLT5jdXIgPSB0b2stPmVuZCA9IHRvay0+aW5wID0gdG9rLT5zdGFydCA9IE5VTEw7CiAgICAgdG9rLT5kb25lID0gRV9PSzsKICAgICB0b2stPmZwID0gTlVMTDsKKyAgICB0b2stPmlucHV0ID0gTlVMTDsKICAgICB0b2stPnRhYnNpemUgPSBUQUJTSVpFOwogICAgIHRvay0+aW5kZW50ID0gMDsKICAgICB0b2stPmluZHN0YWNrWzBdID0gMDsKQEAgLTEzMCw2ICsxMzAsMTcgQEAKICAgICByZXR1cm4gdG9rOwogfQogCitzdGF0aWMgY2hhciAqCituZXdfc3RyaW5nKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIGNoYXIqIHJlc3VsdCA9IChjaGFyICopUHlNZW1fTUFMTE9DKGxlbiArIDEpOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgeworICAgICAgICBtZW1jcHkocmVzdWx0LCBzLCBsZW4pOworICAgICAgICByZXN1bHRbbGVuXSA9ICdcMCc7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKICNpZmRlZiBQR0VOCiAKIHN0YXRpYyBjaGFyICoKQEAgLTE0NCwxMCArMTU1LDEwIEBACiAgICAgcmV0dXJuIGZlb2YodG9rLT5mcCk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICoKLWRlY29kZV9zdHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCitzdGF0aWMgY2hhciAqCitkZWNvZGVfc3RyKGNvbnN0IGNoYXIgKnN0ciwgaW50IGV4ZWNfaW5wdXQsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKLSAgICByZXR1cm4gc3RyOworICAgIHJldHVybiBuZXdfc3RyaW5nKHN0ciwgc3RybGVuKHN0cikpOwogfQogCiAjZWxzZSAvKiBQR0VOICovCkBAIC0xNjIsMTYgKzE3Myw2IEBACiAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGFzIGlmIGl0IHdlcmUgRU9GICovCiB9CiAKLXN0YXRpYyBjaGFyICoKLW5ld19zdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4pCi17Ci0gICAgY2hhciogcmVzdWx0ID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobGVuICsgMSk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIG1lbWNweShyZXN1bHQsIHMsIGxlbik7Ci0gICAgICAgIHJlc3VsdFtsZW5dID0gJ1wwJzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KIAogc3RhdGljIGNoYXIgKgogZ2V0X25vcm1hbF9uYW1lKGNoYXIgKnMpICAgICAgICAvKiBmb3IgdXRmLTggYW5kIGxhdGluLTEgKi8KQEAgLTE4MCwyMCArMTgxLDI2IEBACiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKICAgICAgICAgaW50IGMgPSBzW2ldOwotICAgICAgICBpZiAoYyA9PSAnXDAnKSBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAnXycpIGJ1ZltpXSA9ICctJzsKLSAgICAgICAgZWxzZSBidWZbaV0gPSB0b2xvd2VyKGMpOworICAgICAgICBpZiAoYyA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJ18nKQorICAgICAgICAgICAgYnVmW2ldID0gJy0nOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWZbaV0gPSB0b2xvd2VyKGMpOwogICAgIH0KICAgICBidWZbaV0gPSAnXDAnOwogICAgIGlmIChzdHJjbXAoYnVmLCAidXRmLTgiKSA9PSAwIHx8Ci0gICAgICAgIHN0cm5jbXAoYnVmLCAidXRmLTgtIiwgNikgPT0gMCkgcmV0dXJuICJ1dGYtOCI7CisgICAgICAgIHN0cm5jbXAoYnVmLCAidXRmLTgtIiwgNikgPT0gMCkKKyAgICAgICAgcmV0dXJuICJ1dGYtOCI7CiAgICAgZWxzZSBpZiAoc3RyY21wKGJ1ZiwgImxhdGluLTEiKSA9PSAwIHx8CiAgICAgICAgICAgICAgc3RyY21wKGJ1ZiwgImlzby04ODU5LTEiKSA9PSAwIHx8CiAgICAgICAgICAgICAgc3RyY21wKGJ1ZiwgImlzby1sYXRpbi0xIikgPT0gMCB8fAogICAgICAgICAgICAgIHN0cm5jbXAoYnVmLCAibGF0aW4tMS0iLCA4KSA9PSAwIHx8CiAgICAgICAgICAgICAgc3RybmNtcChidWYsICJpc28tODg1OS0xLSIsIDExKSA9PSAwIHx8Ci0gICAgICAgICAgICAgc3RybmNtcChidWYsICJpc28tbGF0aW4tMS0iLCAxMikgPT0gMCkgcmV0dXJuICJpc28tODg1OS0xIjsKLSAgICBlbHNlIHJldHVybiBzOworICAgICAgICAgICAgIHN0cm5jbXAoYnVmLCAiaXNvLWxhdGluLTEtIiwgMTIpID09IDApCisgICAgICAgIHJldHVybiAiaXNvLTg4NTktMSI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gczsKIH0KIAogLyogUmV0dXJuIHRoZSBjb2Rpbmcgc3BlYyBpbiBTLCBvciBOVUxMIGlmIG5vbmUgaXMgZm91bmQuICAqLwpAQCAtMjIyLDcgKzIyOSw3IEBACiAgICAgICAgICAgICB9IHdoaWxlICh0WzBdID09ICdceDIwJyB8fCB0WzBdID09ICdcdCcpOwogCiAgICAgICAgICAgICBiZWdpbiA9IHQ7Ci0gICAgICAgICAgICB3aGlsZSAoaXNhbG51bShQeV9DSEFSTUFTSyh0WzBdKSkgfHwKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0FMTlVNKHRbMF0pIHx8CiAgICAgICAgICAgICAgICAgICAgdFswXSA9PSAnLScgfHwgdFswXSA9PSAnXycgfHwgdFswXSA9PSAnLicpCiAgICAgICAgICAgICAgICAgdCsrOwogCkBAIC00MTcsNyArNDI0LDggQEAKICAgICBtZW1jcHkocywgc3RyLCB1dGY4bGVuKTsKICAgICBzW3V0ZjhsZW5dID0gJ1wwJzsKICAgICBQeV9ERUNSRUYodXRmOCk7Ci0gICAgaWYgKHV0ZjhsZW4gPT0gMCkgcmV0dXJuIE5VTEw7IC8qIEVPRiAqLworICAgIGlmICh1dGY4bGVuID09IDApCisgICAgICAgIHJldHVybiBOVUxMOyAvKiBFT0YgKi8KICAgICByZXR1cm4gczsKICNlbmRpZgogfQpAQCAtNTg5LDE3ICs1OTcsNjIgQEAKIH0KICNlbmRpZgogCisKK3N0YXRpYyBjaGFyICoKK3RyYW5zbGF0ZV9uZXdsaW5lcyhjb25zdCBjaGFyICpzLCBpbnQgZXhlY19pbnB1dCwgc3RydWN0IHRva19zdGF0ZSAqdG9rKSB7CisgICAgaW50IHNraXBfbmV4dF9sZiA9IDAsIG5lZWRlZF9sZW5ndGggPSBzdHJsZW4ocykgKyAyLCBmaW5hbF9sZW5ndGg7CisgICAgY2hhciAqYnVmLCAqY3VycmVudDsKKyAgICBjaGFyIGMgPSAnXDAnOworICAgIGJ1ZiA9IFB5TWVtX01BTExPQyhuZWVkZWRfbGVuZ3RoKTsKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgdG9rLT5kb25lID0gRV9OT01FTTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvciAoY3VycmVudCA9IGJ1ZjsgKnM7IHMrKywgY3VycmVudCsrKSB7CisgICAgICAgIGMgPSAqczsKKyAgICAgICAgaWYgKHNraXBfbmV4dF9sZikgeworICAgICAgICAgICAgc2tpcF9uZXh0X2xmID0gMDsKKyAgICAgICAgICAgIGlmIChjID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICBjID0gKisrczsKKyAgICAgICAgICAgICAgICBpZiAoIWMpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIHNraXBfbmV4dF9sZiA9IDE7CisgICAgICAgICAgICBjID0gJ1xuJzsKKyAgICAgICAgfQorICAgICAgICAqY3VycmVudCA9IGM7CisgICAgfQorICAgIC8qIElmIHRoaXMgaXMgZXhlYyBpbnB1dCwgYWRkIGEgbmV3bGluZSB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgaWYKKyAgICAgICB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4gKi8KKyAgICBpZiAoZXhlY19pbnB1dCAmJiBjICE9ICdcbicpIHsKKyAgICAgICAgKmN1cnJlbnQgPSAnXG4nOworICAgICAgICBjdXJyZW50Kys7CisgICAgfQorICAgICpjdXJyZW50ID0gJ1wwJzsKKyAgICBmaW5hbF9sZW5ndGggPSBjdXJyZW50IC0gYnVmICsgMTsKKyAgICBpZiAoZmluYWxfbGVuZ3RoIDwgbmVlZGVkX2xlbmd0aCAmJiBmaW5hbF9sZW5ndGgpCisgICAgICAgIC8qIHNob3VsZCBuZXZlciBmYWlsICovCisgICAgICAgIGJ1ZiA9IFB5TWVtX1JFQUxMT0MoYnVmLCBmaW5hbF9sZW5ndGgpOworICAgIHJldHVybiBidWY7Cit9CisKIC8qIERlY29kZSBhIGJ5dGUgc3RyaW5nIFNUUiBmb3IgdXNlIGFzIHRoZSBidWZmZXIgb2YgVE9LLgogICAgTG9vayBmb3IgZW5jb2RpbmcgZGVjbGFyYXRpb25zIGluc2lkZSBTVFIsIGFuZCByZWNvcmQgdGhlbQogICAgaW5zaWRlIFRPSy4gICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLWRlY29kZV9zdHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCitkZWNvZGVfc3RyKGNvbnN0IGNoYXIgKmlucHV0LCBpbnQgc2luZ2xlLCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCiB7CiAgICAgUHlPYmplY3QqIHV0ZjggPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICBjb25zdCBjaGFyICpzOwogICAgIGNvbnN0IGNoYXIgKm5ld2xbMl0gPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IGxpbmVubyA9IDA7CisgICAgdG9rLT5pbnB1dCA9IHN0ciA9IHRyYW5zbGF0ZV9uZXdsaW5lcyhpbnB1dCwgc2luZ2xlLCB0b2spOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdG9rLT5lbmMgPSBOVUxMOwogICAgIHRvay0+c3RyID0gc3RyOwogICAgIGlmICghY2hlY2tfYm9tKGJ1Zl9nZXRjLCBidWZfdW5nZXRjLCBidWZfc2V0cmVhZGwsIHRvaykpCkBAIC02MzksMTEgKzY5Miw4IEBACiAgICAgaWYgKHRvay0+ZW5jICE9IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KHV0ZjggPT0gTlVMTCk7CiAgICAgICAgIHV0ZjggPSB0cmFuc2xhdGVfaW50b191dGY4KHN0ciwgdG9rLT5lbmMpOwotICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCi0gICAgICAgICAgICAgICAgInVua25vd24gZW5jb2Rpbmc6ICVzIiwgdG9rLT5lbmMpOworICAgICAgICBpZiAodXRmOCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIGVycm9yX3JldCh0b2spOwotICAgICAgICB9CiAgICAgICAgIHN0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKHV0ZjgpOwogICAgIH0KICNlbmRpZgpAQCAtNjU3LDEyICs3MDcsMTIgQEAKIC8qIFNldCB1cCB0b2tlbml6ZXIgZm9yIHN0cmluZyAqLwogCiBzdHJ1Y3QgdG9rX3N0YXRlICoKLVB5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyKQorUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBleGVjX2lucHV0KQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvayA9IHRva19uZXcoKTsKICAgICBpZiAodG9rID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHN0ciA9IChjaGFyICopZGVjb2RlX3N0cihzdHIsIHRvayk7CisgICAgc3RyID0gKGNoYXIgKilkZWNvZGVfc3RyKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKICAgICBpZiAoc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcwOCw2ICs3NTgsOCBAQAogI2VuZGlmCiAgICAgaWYgKHRvay0+ZnAgIT0gTlVMTCAmJiB0b2stPmJ1ZiAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GUkVFKHRvay0+YnVmKTsKKyAgICBpZiAodG9rLT5pbnB1dCkKKyAgICAgICAgUHlNZW1fRlJFRSgoY2hhciAqKXRvay0+aW5wdXQpOwogICAgIFB5TWVtX0ZSRUUodG9rKTsKIH0KIApAQCAtOTUzLDcgKzEwMDUsNyBAQAogewogICAgIGlmIChjICE9IEVPRikgewogICAgICAgICBpZiAoLS10b2stPmN1ciA8IHRvay0+YnVmKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidG9rX2JhY2t1cDogYmVnaW4gb2YgYnVmZmVyIik7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJ0b2tfYmFja3VwOiBiZWdpbm5pbmcgb2YgYnVmZmVyIik7CiAgICAgICAgIGlmICgqdG9rLT5jdXIgIT0gYykKICAgICAgICAgICAgICp0b2stPmN1ciA9IGM7CiAgICAgfQpAQCAtMTEzMiw3ICsxMTg0LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotCiAvKiBHZXQgbmV4dCB0b2tlbiwgYWZ0ZXIgc3BhY2Ugc3RyaXBwaW5nIGV0Yy4gKi8KIAogc3RhdGljIGludApAQCAtMTI4OCw3ICsxMzM5LDcgQEAKICAgICB9CiAKICAgICAvKiBJZGVudGlmaWVyIChtb3N0IGZyZXF1ZW50IHRva2VuISkgKi8KLSAgICBpZiAoaXNhbHBoYShjKSB8fCBjID09ICdfJykgeworICAgIGlmIChQeV9JU0FMUEhBKGMpIHx8IGMgPT0gJ18nKSB7CiAgICAgICAgIC8qIFByb2Nlc3MgciIiLCB1IiIgYW5kIHVyIiIgKi8KICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgJ2InOgpAQCAtMTMxNCw3ICsxMzY1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGxldHRlcl9xdW90ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChpc2FsbnVtKGMpIHx8IGMgPT0gJ18nKSB7CisgICAgICAgIHdoaWxlIChjICE9IEVPRiAmJiAoUHlfSVNBTE5VTShjKSB8fCBjID09ICdfJykpIHsKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKICAgICAgICAgfQogICAgICAgICB0b2tfYmFja3VwKHRvaywgYyk7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmggYi9QYXJzZXIvdG9rZW5pemVyLmgKaW5kZXggMTlhYTcwMi4uZjE1ZTI1MiAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5oCisrKyBiL1BhcnNlci90b2tlbml6ZXIuaApAQCAtNTIsOSArNTIsMTAgQEAKICNlbmRpZgogICAgIGNvbnN0IGNoYXIqIGVuYzsKICAgICBjb25zdCBjaGFyKiBzdHI7CisgICAgY29uc3QgY2hhciogaW5wdXQ7IC8qIFRva2VuaXplcidzIG5ld2xpbmUgdHJhbnNsYXRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuICovCiB9OwogCi1leHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY2hhciAqLCBjaGFyICopOwogZXh0ZXJuIHZvaWQgUHlUb2tlbml6ZXJfRnJlZShzdHJ1Y3QgdG9rX3N0YXRlICopOwogZXh0ZXJuIGludCBQeVRva2VuaXplcl9HZXQoc3RydWN0IHRva19zdGF0ZSAqLCBjaGFyICoqLCBjaGFyICoqKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9QeXRob24tYXN0LmMgYi9QeXRob24vUHl0aG9uLWFzdC5jCmluZGV4IGJjNmNjYTAuLjcwMWFjNDggMTAwNjQ0Ci0tLSBhL1B5dGhvbi9QeXRob24tYXN0LmMKKysrIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwpAQCAtMiw3ICsyLDcgQEAKIAogCiAvKgotICAgX192ZXJzaW9uX18gNjIwNDcuCisgICBfX3ZlcnNpb25fXyA4MjE2MC4KIAogICAgVGhpcyBtb2R1bGUgbXVzdCBiZSBjb21taXR0ZWQgc2VwYXJhdGVseSBhZnRlciBlYWNoIEFTVCBncmFtbWFyIGNoYW5nZTsKICAgIFRoZSBfX3ZlcnNpb25fXyBudW1iZXIgaXMgc2V0IHRvIHRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGNvbW1pdApAQCAtMTg4LDExICsxODgsMjYgQEAKICAgICAgICAgImtleXMiLAogICAgICAgICAidmFsdWVzIiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpTZXRfdHlwZTsKK3N0YXRpYyBjaGFyICpTZXRfZmllbGRzW109eworICAgICAgICAiZWx0cyIsCit9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqTGlzdENvbXBfdHlwZTsKIHN0YXRpYyBjaGFyICpMaXN0Q29tcF9maWVsZHNbXT17CiAgICAgICAgICJlbHQiLAogICAgICAgICAiZ2VuZXJhdG9ycyIsCiB9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqU2V0Q29tcF90eXBlOworc3RhdGljIGNoYXIgKlNldENvbXBfZmllbGRzW109eworICAgICAgICAiZWx0IiwKKyAgICAgICAgImdlbmVyYXRvcnMiLAorfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKkRpY3RDb21wX3R5cGU7CitzdGF0aWMgY2hhciAqRGljdENvbXBfZmllbGRzW109eworICAgICAgICAia2V5IiwKKyAgICAgICAgInZhbHVlIiwKKyAgICAgICAgImdlbmVyYXRvcnMiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkdlbmVyYXRvckV4cF90eXBlOwogc3RhdGljIGNoYXIgKkdlbmVyYXRvckV4cF9maWVsZHNbXT17CiAgICAgICAgICJlbHQiLApAQCAtNTEyLDggKzUyNyw5IEBACiB7CiAgICAgaW50IGksIHJlc3VsdDsKICAgICBQeU9iamVjdCAqcywgKmwgPSBQeVR1cGxlX05ldyhudW1fZmllbGRzKTsKLSAgICBpZiAoIWwpIHJldHVybiAwOwotICAgIGZvcihpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykgeworICAgIGlmICghbCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykgewogICAgICAgICBzID0gUHlTdHJpbmdfRnJvbVN0cmluZyhhdHRyc1tpXSk7CiAgICAgICAgIGlmICghcykgewogICAgICAgICAgICAgUHlfREVDUkVGKGwpOwpAQCAtNzE4LDggKzczNCwxNCBAQAogICAgICAgICBpZiAoIUlmRXhwX3R5cGUpIHJldHVybiAwOwogICAgICAgICBEaWN0X3R5cGUgPSBtYWtlX3R5cGUoIkRpY3QiLCBleHByX3R5cGUsIERpY3RfZmllbGRzLCAyKTsKICAgICAgICAgaWYgKCFEaWN0X3R5cGUpIHJldHVybiAwOworICAgICAgICBTZXRfdHlwZSA9IG1ha2VfdHlwZSgiU2V0IiwgZXhwcl90eXBlLCBTZXRfZmllbGRzLCAxKTsKKyAgICAgICAgaWYgKCFTZXRfdHlwZSkgcmV0dXJuIDA7CiAgICAgICAgIExpc3RDb21wX3R5cGUgPSBtYWtlX3R5cGUoIkxpc3RDb21wIiwgZXhwcl90eXBlLCBMaXN0Q29tcF9maWVsZHMsIDIpOwogICAgICAgICBpZiAoIUxpc3RDb21wX3R5cGUpIHJldHVybiAwOworICAgICAgICBTZXRDb21wX3R5cGUgPSBtYWtlX3R5cGUoIlNldENvbXAiLCBleHByX3R5cGUsIFNldENvbXBfZmllbGRzLCAyKTsKKyAgICAgICAgaWYgKCFTZXRDb21wX3R5cGUpIHJldHVybiAwOworICAgICAgICBEaWN0Q29tcF90eXBlID0gbWFrZV90eXBlKCJEaWN0Q29tcCIsIGV4cHJfdHlwZSwgRGljdENvbXBfZmllbGRzLCAzKTsKKyAgICAgICAgaWYgKCFEaWN0Q29tcF90eXBlKSByZXR1cm4gMDsKICAgICAgICAgR2VuZXJhdG9yRXhwX3R5cGUgPSBtYWtlX3R5cGUoIkdlbmVyYXRvckV4cCIsIGV4cHJfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yRXhwX2ZpZWxkcywgMik7CiAgICAgICAgIGlmICghR2VuZXJhdG9yRXhwX3R5cGUpIHJldHVybiAwOwpAQCAtMTMzMCwxMSArMTM1Miw2IEBACiAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgICAgICBzdG10X3R5IHA7Ci0gICAgICAgIGlmICghbW9kdWxlKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIEltcG9ydEZyb20iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBwID0gKHN0bXRfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwogICAgICAgICBpZiAoIXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTk1LDYgKzE2MTIsMjAgQEAKIH0KIAogZXhwcl90eQorU2V0KGFzZGxfc2VxICogZWx0cywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQoreworICAgICAgICBleHByX3R5IHA7CisgICAgICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcC0+a2luZCA9IFNldF9raW5kOworICAgICAgICBwLT52LlNldC5lbHRzID0gZWx0czsKKyAgICAgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgICAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICAgICAgcmV0dXJuIHA7Cit9CisKK2V4cHJfdHkKIExpc3RDb21wKGV4cHJfdHkgZWx0LCBhc2RsX3NlcSAqIGdlbmVyYXRvcnMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LAogICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCiB7CkBAIC0xNjE2LDYgKzE2NDcsNTQgQEAKIH0KIAogZXhwcl90eQorU2V0Q29tcChleHByX3R5IGVsdCwgYXNkbF9zZXEgKiBnZW5lcmF0b3JzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQorICAgICAgICAqYXJlbmEpCit7CisgICAgICAgIGV4cHJfdHkgcDsKKyAgICAgICAgaWYgKCFlbHQpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIGVsdCBpcyByZXF1aXJlZCBmb3IgU2V0Q29tcCIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcC0+a2luZCA9IFNldENvbXBfa2luZDsKKyAgICAgICAgcC0+di5TZXRDb21wLmVsdCA9IGVsdDsKKyAgICAgICAgcC0+di5TZXRDb21wLmdlbmVyYXRvcnMgPSBnZW5lcmF0b3JzOworICAgICAgICBwLT5saW5lbm8gPSBsaW5lbm87CisgICAgICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgICAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQorRGljdENvbXAoZXhwcl90eSBrZXksIGV4cHJfdHkgdmFsdWUsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50CisgICAgICAgICBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICAgICAgZXhwcl90eSBwOworICAgICAgICBpZiAoIWtleSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQga2V5IGlzIHJlcXVpcmVkIGZvciBEaWN0Q29tcCIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBEaWN0Q29tcCIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcC0+a2luZCA9IERpY3RDb21wX2tpbmQ7CisgICAgICAgIHAtPnYuRGljdENvbXAua2V5ID0ga2V5OworICAgICAgICBwLT52LkRpY3RDb21wLnZhbHVlID0gdmFsdWU7CisgICAgICAgIHAtPnYuRGljdENvbXAuZ2VuZXJhdG9ycyA9IGdlbmVyYXRvcnM7CisgICAgICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICAgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CisgICAgICAgIHJldHVybiBwOworfQorCitleHByX3R5CiBHZW5lcmF0b3JFeHAoZXhwcl90eSBlbHQsIGFzZGxfc2VxICogZ2VuZXJhdG9ycywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsCiAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCiB7CkBAIC0yNTcxLDYgKzI2NTAsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0X2tpbmQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoU2V0X3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT52LlNldC5lbHRzLCBhc3Qyb2JqX2V4cHIpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHJlc3VsdCwgImVsdHMiLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExpc3RDb21wX2tpbmQ6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoTGlzdENvbXBfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOwpAQCAtMjU4Niw2ICsyNjc0LDQxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldENvbXBfa2luZDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhTZXRDb21wX3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52LlNldENvbXAuZWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhyZXN1bHQsICJlbHQiLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPnYuU2V0Q29tcC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzdDJvYmpfY29tcHJlaGVuc2lvbik7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcocmVzdWx0LCAiZ2VuZXJhdG9ycyIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGljdENvbXBfa2luZDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhEaWN0Q29tcF90eXBlLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5EaWN0Q29tcC5rZXkpOworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHJlc3VsdCwgImtleSIsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5EaWN0Q29tcC52YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcocmVzdWx0LCAidmFsdWUiLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPnYuRGljdENvbXAuZ2VuZXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Qyb2JqX2NvbXByZWhlbnNpb24pOworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHJlc3VsdCwgImdlbmVyYXRvcnMiLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdlbmVyYXRvckV4cF9raW5kOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KEdlbmVyYXRvckV4cF90eXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CkBAIC00MzU5LDggKzQ0ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gTlVMTDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibW9kdWxlXCIgbWlzc2luZyBmcm9tIEltcG9ydEZyb20iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcob2JqLCAibmFtZXMiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKQEAgLTQ4NjYsNiArNDk4OCw0MiBAQAogICAgICAgICAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilTZXRfdHlwZSk7CisgICAgICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzaW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcSogZWx0czsKKworICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG9iaiwgImVsdHMiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosICJlbHRzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiU2V0IGZpZWxkIFwiZWx0c1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChlbHRzLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJlbHRzXCIgbWlzc2luZyBmcm9tIFNldCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpvdXQgPSBTZXQoZWx0cywgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKUxpc3RDb21wX3R5cGUpOwogICAgICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgewogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtNDkxNSw2ICs1MDczLDExOCBAQAogICAgICAgICAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilTZXRDb21wX3R5cGUpOworICAgICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQ7CisgICAgICAgICAgICAgICAgYXNkbF9zZXEqIGdlbmVyYXRvcnM7CisKKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhvYmosICJlbHQiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCAiZWx0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJmVsdCwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImVsdFwiIG1pc3NpbmcgZnJvbSBTZXRDb21wIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcob2JqLCAiZ2VuZXJhdG9ycyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwgImdlbmVyYXRvcnMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJTZXRDb21wIGZpZWxkIFwiZ2VuZXJhdG9yc1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfY29tcHJlaGVuc2lvbihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChnZW5lcmF0b3JzLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJnZW5lcmF0b3JzXCIgbWlzc2luZyBmcm9tIFNldENvbXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqb3V0ID0gU2V0Q29tcChlbHQsIGdlbmVyYXRvcnMsIGxpbmVubywgY29sX29mZnNldCwgYXJlbmEpOworICAgICAgICAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilEaWN0Q29tcF90eXBlKTsKKyAgICAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICAgICAgICAgIGV4cHJfdHkga2V5OworICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CisgICAgICAgICAgICAgICAgYXNkbF9zZXEqIGdlbmVyYXRvcnM7CisKKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhvYmosICJrZXkiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCAia2V5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJmtleSwgYXJlbmEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImtleVwiIG1pc3NpbmcgZnJvbSBEaWN0Q29tcCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKG9iaiwgInZhbHVlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwgInZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gRGljdENvbXAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhvYmosICJnZW5lcmF0b3JzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCAiZ2VuZXJhdG9ycyIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkRpY3RDb21wIGZpZWxkIFwiZ2VuZXJhdG9yc1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfY29tcHJlaGVuc2lvbihQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChnZW5lcmF0b3JzLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJnZW5lcmF0b3JzXCIgbWlzc2luZyBmcm9tIERpY3RDb21wIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKm91dCA9IERpY3RDb21wKGtleSwgdmFsdWUsIGdlbmVyYXRvcnMsIGxpbmVubywgY29sX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlbmEpOworICAgICAgICAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilHZW5lcmF0b3JFeHBfdHlwZSk7CiAgICAgICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC02MzAwLDcgKzY1NzAsNyBAQAogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkFTVCIsIChQeU9iamVjdCopJkFTVF90eXBlKSA8IDApIHJldHVybjsKICAgICAgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUNGX09OTFlfQVNUIiwgUHlDRl9PTkxZX0FTVCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJfX3ZlcnNpb25fXyIsICI2MjA0NyIpIDwgMCkKKyAgICAgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJfX3ZlcnNpb25fXyIsICI4MjE2MCIpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAibW9kIiwgKFB5T2JqZWN0Kiltb2RfdHlwZSkgPCAwKSByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTW9kdWxlIiwgKFB5T2JqZWN0KilNb2R1bGVfdHlwZSkgPCAwKQpAQCAtNjM1Nyw4ICs2NjI3LDEzIEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSWZFeHAiLCAoUHlPYmplY3QqKUlmRXhwX3R5cGUpIDwgMCkgcmV0dXJuOwogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRpY3QiLCAoUHlPYmplY3QqKURpY3RfdHlwZSkgPCAwKSByZXR1cm47CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiU2V0IiwgKFB5T2JqZWN0KilTZXRfdHlwZSkgPCAwKSByZXR1cm47CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTGlzdENvbXAiLCAoUHlPYmplY3QqKUxpc3RDb21wX3R5cGUpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTZXRDb21wIiwgKFB5T2JqZWN0KilTZXRDb21wX3R5cGUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJEaWN0Q29tcCIsIChQeU9iamVjdCopRGljdENvbXBfdHlwZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkdlbmVyYXRvckV4cCIsCiAgICAgICAgICAgICAoUHlPYmplY3QqKUdlbmVyYXRvckV4cF90eXBlKSA8IDApIHJldHVybjsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJZaWVsZCIsIChQeU9iamVjdCopWWllbGRfdHlwZSkgPCAwKSByZXR1cm47CmRpZmYgLS1naXQgYS9QeXRob24vX3dhcm5pbmdzLmMgYi9QeXRob24vX3dhcm5pbmdzLmMKaW5kZXggMzMxM2M1OS4uMWRjMjUxMiAxMDA2NDQKLS0tIGEvUHl0aG9uL193YXJuaW5ncy5jCisrKyBiL1B5dGhvbi9fd2FybmluZ3MuYwpAQCAtMSw5ICsxLDcgQEAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJjb2RlLmgiICAvKiBGb3IgRGVwcmVjYXRpb25XYXJuaW5nIGFib3V0IGFkZGluZyAnbGluZScuICovCiAjaW5jbHVkZSAiZnJhbWVvYmplY3QuaCIKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAiX3dhcm5pbmdzIgotI2RlZmluZSBERUZBVUxUX0FDVElPTl9OQU1FICJkZWZhdWx0X2FjdGlvbiIKIAogUHlEb2NfU1RSVkFSKHdhcm5pbmdzX19kb2NfXywKIE1PRFVMRV9OQU1FICIgcHJvdmlkZXMgYmFzaWMgd2FybmluZyBmaWx0ZXJpbmcgc3VwcG9ydC5cbiIKQEAgLTEzLDYgKzExLDcgQEAKICAgIGdldF93YXJuaW5nc19hdHRyKCkgd2lsbCByZXNldCB0aGVzZSB2YXJpYWJsZXMgYWNjb3JkaW5nbHkuICovCiBzdGF0aWMgUHlPYmplY3QgKl9maWx0ZXJzOyAgLyogTGlzdCAqLwogc3RhdGljIFB5T2JqZWN0ICpfb25jZV9yZWdpc3RyeTsgIC8qIERpY3QgKi8KK3N0YXRpYyBQeU9iamVjdCAqX2RlZmF1bHRfYWN0aW9uOyAvKiBTdHJpbmcgKi8KIAogCiBzdGF0aWMgaW50CkBAIC0yMiwxMCArMjEsMTAgQEAKICAgICBpbnQgcmM7CiAKICAgICBpZiAob2JqID09IFB5X05vbmUpCi0gICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiAxOwogICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2Qob2JqLCAibWF0Y2giLCAiTyIsIGFyZyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUocmVzdWx0KTsKICAgICBQeV9ERUNSRUYocmVzdWx0KTsKQEAgLTQ1LDE5ICs0NCwxOSBAQAogICAgIGludCByZXN1bHQ7CiAKICAgICBpZiAod2FybmluZ3Nfc3RyID09IE5VTEwpIHsKLSAgICB3YXJuaW5nc19zdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJ3YXJuaW5ncyIpOwotICAgIGlmICh3YXJuaW5nc19zdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHdhcm5pbmdzX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIndhcm5pbmdzIik7CisgICAgICAgIGlmICh3YXJuaW5nc19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGFsbF9tb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOwogICAgIHJlc3VsdCA9IFB5RGljdF9Db250YWlucyhhbGxfbW9kdWxlcywgd2FybmluZ3Nfc3RyKTsKICAgICBpZiAocmVzdWx0ID09IC0xIHx8IHJlc3VsdCA9PSAwKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdhcm5pbmdzX21vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGFsbF9tb2R1bGVzLCB3YXJuaW5nc19zdHIpOwogICAgIGlmICghUHlPYmplY3RfSGFzQXR0clN0cmluZyh3YXJuaW5nc19tb2R1bGUsIGF0dHIpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHdhcm5pbmdzX21vZHVsZSwgYXR0cik7CiB9CiAKQEAgLTY5LDkgKzY4LDkgQEAKIAogICAgIHJlZ2lzdHJ5ID0gZ2V0X3dhcm5pbmdzX2F0dHIoIm9uY2VyZWdpc3RyeSIpOwogICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMKSB7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBfb25jZV9yZWdpc3RyeTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIF9vbmNlX3JlZ2lzdHJ5OwogICAgIH0KICAgICBQeV9ERUNSRUYoX29uY2VfcmVnaXN0cnkpOwogICAgIF9vbmNlX3JlZ2lzdHJ5ID0gcmVnaXN0cnk7CkBAIC03OSw5NyArNzgsMTExIEBACiB9CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK2dldF9kZWZhdWx0X2FjdGlvbih2b2lkKQoreworICAgIFB5T2JqZWN0ICpkZWZhdWx0X2FjdGlvbjsKKworICAgIGRlZmF1bHRfYWN0aW9uID0gZ2V0X3dhcm5pbmdzX2F0dHIoImRlZmF1bHRhY3Rpb24iKTsKKyAgICBpZiAoZGVmYXVsdF9hY3Rpb24gPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2FjdGlvbjsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYoX2RlZmF1bHRfYWN0aW9uKTsKKyAgICBfZGVmYXVsdF9hY3Rpb24gPSBkZWZhdWx0X2FjdGlvbjsKKyAgICByZXR1cm4gZGVmYXVsdF9hY3Rpb247Cit9CisKKwogLyogVGhlIGl0ZW0gaXMgYSBib3Jyb3dlZCByZWZlcmVuY2UuICovCiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZXRfZmlsdGVyKFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgbGluZW5vLAogICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqKml0ZW0pCiB7Ci0gICAgUHlPYmplY3QgKmFjdGlvbiwgKm0sICpkOworICAgIFB5T2JqZWN0ICphY3Rpb247CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICp3YXJuaW5nc19maWx0ZXJzOwogCiAgICAgd2FybmluZ3NfZmlsdGVycyA9IGdldF93YXJuaW5nc19hdHRyKCJmaWx0ZXJzIik7CiAgICAgaWYgKHdhcm5pbmdzX2ZpbHRlcnMgPT0gTlVMTCkgewotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgUHlfREVDUkVGKF9maWx0ZXJzKTsKLSAgICBfZmlsdGVycyA9IHdhcm5pbmdzX2ZpbHRlcnM7CisgICAgICAgIFB5X0RFQ1JFRihfZmlsdGVycyk7CisgICAgICAgIF9maWx0ZXJzID0gd2FybmluZ3NfZmlsdGVyczsKICAgICB9CiAKICAgICBpZiAoIVB5TGlzdF9DaGVjayhfZmlsdGVycykpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05BTUUgIi5maWx0ZXJzIG11c3QgYmUgYSBsaXN0Iik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFX05BTUUgIi5maWx0ZXJzIG11c3QgYmUgYSBsaXN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIF9maWx0ZXJzIGNvdWxkIGNoYW5nZSB3aGlsZSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgaXQuICovCiAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShfZmlsdGVycyk7IGkrKykgewotICAgIFB5T2JqZWN0ICp0bXBfaXRlbSwgKmFjdGlvbiwgKm1zZywgKmNhdCwgKm1vZCwgKmxuX29iajsKLSAgICBQeV9zc2l6ZV90IGxuOwotICAgIGludCBpc19zdWJjbGFzcywgZ29vZF9tc2csIGdvb2RfbW9kOworICAgICAgICBQeU9iamVjdCAqdG1wX2l0ZW0sICphY3Rpb24sICptc2csICpjYXQsICptb2QsICpsbl9vYmo7CisgICAgICAgIFB5X3NzaXplX3QgbG47CisgICAgICAgIGludCBpc19zdWJjbGFzcywgZ29vZF9tc2csIGdvb2RfbW9kOwogCi0gICAgdG1wX2l0ZW0gPSAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShfZmlsdGVycywgaSk7Ci0gICAgaWYgKFB5VHVwbGVfU2l6ZSh0bXBfaXRlbSkgIT0gNSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9OQU1FICIuZmlsdGVycyBpdGVtICV6ZCBpc24ndCBhIDUtdHVwbGUiLCBpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHRtcF9pdGVtID0gKml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oX2ZpbHRlcnMsIGkpOworICAgICAgICBpZiAoUHlUdXBsZV9TaXplKHRtcF9pdGVtKSAhPSA1KSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmZpbHRlcnMgaXRlbSAlemQgaXNuJ3QgYSA1LXR1cGxlIiwgaSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFB5dGhvbiBjb2RlOiBhY3Rpb24sIG1zZywgY2F0LCBtb2QsIGxuID0gaXRlbSAqLworICAgICAgICBhY3Rpb24gPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCAwKTsKKyAgICAgICAgbXNnID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgMSk7CisgICAgICAgIGNhdCA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDIpOworICAgICAgICBtb2QgPSBQeVR1cGxlX0dFVF9JVEVNKHRtcF9pdGVtLCAzKTsKKyAgICAgICAgbG5fb2JqID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgNCk7CisKKyAgICAgICAgZ29vZF9tc2cgPSBjaGVja19tYXRjaGVkKG1zZywgdGV4dCk7CisgICAgICAgIGdvb2RfbW9kID0gY2hlY2tfbWF0Y2hlZChtb2QsIG1vZHVsZSk7CisgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjYXRlZ29yeSwgY2F0KTsKKyAgICAgICAgbG4gPSBQeUludF9Bc1NzaXplX3QobG5fb2JqKTsKKyAgICAgICAgaWYgKGdvb2RfbXNnID09IC0xIHx8IGdvb2RfbW9kID09IC0xIHx8IGlzX3N1YmNsYXNzID09IC0xIHx8CisgICAgICAgICAgICAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAoZ29vZF9tc2cgJiYgaXNfc3ViY2xhc3MgJiYgZ29vZF9tb2QgJiYgKGxuID09IDAgfHwgbGluZW5vID09IGxuKSkKKyAgICAgICAgICAgIHJldHVybiBQeVN0cmluZ19Bc1N0cmluZyhhY3Rpb24pOwogICAgIH0KIAotICAgIC8qIFB5dGhvbiBjb2RlOiBhY3Rpb24sIG1zZywgY2F0LCBtb2QsIGxuID0gaXRlbSAqLwotICAgIGFjdGlvbiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDApOwotICAgIG1zZyA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDEpOwotICAgIGNhdCA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDIpOwotICAgIG1vZCA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDMpOwotICAgIGxuX29iaiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDQpOwotCi0gICAgZ29vZF9tc2cgPSBjaGVja19tYXRjaGVkKG1zZywgdGV4dCk7Ci0gICAgZ29vZF9tb2QgPSBjaGVja19tYXRjaGVkKG1vZCwgbW9kdWxlKTsKLSAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoY2F0ZWdvcnksIGNhdCk7Ci0gICAgbG4gPSBQeUludF9Bc1NzaXplX3QobG5fb2JqKTsKLSAgICBpZiAoZ29vZF9tc2cgPT0gLTEgfHwgZ29vZF9tb2QgPT0gLTEgfHwgaXNfc3ViY2xhc3MgPT0gLTEgfHwKLSAgICAgICAgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChnb29kX21zZyAmJiBpc19zdWJjbGFzcyAmJiBnb29kX21vZCAmJiAobG4gPT0gMCB8fCBsaW5lbm8gPT0gbG4pKQorICAgIGFjdGlvbiA9IGdldF9kZWZhdWx0X2FjdGlvbigpOworICAgIGlmIChhY3Rpb24gIT0gTlVMTCkgewogICAgICAgICByZXR1cm4gUHlTdHJpbmdfQXNTdHJpbmcoYWN0aW9uKTsKICAgICB9CiAKLSAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKE1PRFVMRV9OQU1FKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIFB5X0RFQ1JFRihtKTsKLSAgICBpZiAoZCA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwotICAgIGFjdGlvbiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsIERFRkFVTFRfQUNUSU9OX05BTUUpOwotICAgIGlmIChhY3Rpb24gIT0gTlVMTCkKLSAgICByZXR1cm4gUHlTdHJpbmdfQXNTdHJpbmcoYWN0aW9uKTsKLQogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLiIgREVGQVVMVF9BQ1RJT05fTkFNRSAiIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmRlZmF1bHRhY3Rpb24gbm90IGZvdW5kIik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKwogc3RhdGljIGludAogYWxyZWFkeV93YXJuZWQoUHlPYmplY3QgKnJlZ2lzdHJ5LCBQeU9iamVjdCAqa2V5LCBpbnQgc2hvdWxkX3NldCkKIHsKICAgICBQeU9iamVjdCAqYWxyZWFkeV93YXJuZWQ7CiAKICAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBhbHJlYWR5X3dhcm5lZCA9IFB5RGljdF9HZXRJdGVtKHJlZ2lzdHJ5LCBrZXkpOwogICAgIGlmIChhbHJlYWR5X3dhcm5lZCAhPSBOVUxMKSB7Ci0gICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGFscmVhZHlfd2FybmVkKTsKLSAgICBpZiAocmMgIT0gMCkKLSAgICAgICAgcmV0dXJuIHJjOworICAgICAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoYWxyZWFkeV93YXJuZWQpOworICAgICAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKICAgICAvKiBUaGlzIHdhcm5pbmcgd2Fzbid0IGZvdW5kIGluIHRoZSByZWdpc3RyeSwgc2V0IGl0LiAqLwogICAgIGlmIChzaG91bGRfc2V0KQotICAgIHJldHVybiBQeURpY3RfU2V0SXRlbShyZWdpc3RyeSwga2V5LCBQeV9UcnVlKTsKKyAgICAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xODMsMjMgKzE5NiwyMyBAQAogCiAgICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGZpbGVuYW1lKTsKICAgICBpZiAocmMgPT0gLTEpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGVsc2UgaWYgKHJjID09IDApCi0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOworICAgICAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZygiPHVua25vd24+Iik7CiAKICAgICBtb2Rfc3RyID0gUHlTdHJpbmdfQXNTdHJpbmcoZmlsZW5hbWUpOwogICAgIGlmIChtb2Rfc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGxlbiA9IFB5U3RyaW5nX1NpemUoZmlsZW5hbWUpOwogICAgIGlmIChsZW4gPCAwKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobGVuID49IDMgJiYKLSAgICBzdHJuY21wKG1vZF9zdHIgKyAobGVuIC0gMyksICIucHkiLCAzKSA9PSAwKSB7Ci0gICAgbW9kdWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUobW9kX3N0ciwgbGVuLTMpOworICAgICAgICAgICAgc3RybmNtcChtb2Rfc3RyICsgKGxlbiAtIDMpLCAiLnB5IiwgMykgPT0gMCkgeworICAgICAgICBtb2R1bGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShtb2Rfc3RyLCBsZW4tMyk7CiAgICAgfQogICAgIGVsc2UgewotICAgIG1vZHVsZSA9IGZpbGVuYW1lOwotICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBtb2R1bGUgPSBmaWxlbmFtZTsKKyAgICAgICAgUHlfSU5DUkVGKG1vZHVsZSk7CiAgICAgfQogICAgIHJldHVybiBtb2R1bGU7CiB9CkBAIC0yMTIsMTMgKzIyNSwxMyBAQAogICAgIGludCByYzsKIAogICAgIGlmIChhZGRfemVybykgewotICAgIHplcm8gPSBQeUludF9Gcm9tTG9uZygwKTsKLSAgICBpZiAoemVybyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgYWx0a2V5ID0gUHlUdXBsZV9QYWNrKDMsIHRleHQsIGNhdGVnb3J5LCB6ZXJvKTsKKyAgICAgICAgemVybyA9IFB5SW50X0Zyb21Mb25nKDApOworICAgICAgICBpZiAoemVybyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBhbHRrZXkgPSBQeVR1cGxlX1BhY2soMywgdGV4dCwgY2F0ZWdvcnksIHplcm8pOwogICAgIH0KICAgICBlbHNlCi0gICAgYWx0a2V5ID0gUHlUdXBsZV9QYWNrKDIsIHRleHQsIGNhdGVnb3J5KTsKKyAgICAgICAgYWx0a2V5ID0gUHlUdXBsZV9QYWNrKDIsIHRleHQsIGNhdGVnb3J5KTsKIAogICAgIHJjID0gYWxyZWFkeV93YXJuZWQocmVnaXN0cnksIGFsdGtleSwgMSk7CiAgICAgUHlfWERFQ1JFRih6ZXJvKTsKQEAgLTI0Miw5ICsyNTUsOSBAQAogCiAgICAgZl9zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwogICAgIGlmIChmX3N0ZGVyciA9PSBOVUxMKSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByZXR1cm47CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9zdCBzeXMuc3RkZXJyXG4iKTsKKyAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLyogUHJpbnQgImZpbGVuYW1lOmxpbmVubzogY2F0ZWdvcnk6IHRleHRcbiIgKi8KQEAgLTI1OCwxNyArMjcxLDE3IEBACiAKICAgICAvKiBQcmludCAiICBzb3VyY2VfbGluZVxuIiAqLwogICAgIGlmIChzb3VyY2VsaW5lKSB7Ci0gICAgY2hhciAqc291cmNlX2xpbmVfc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHNvdXJjZWxpbmUpOwotICAgIHdoaWxlICgqc291cmNlX2xpbmVfc3RyID09ICcgJyB8fCAqc291cmNlX2xpbmVfc3RyID09ICdcdCcgfHwKLSAgICAgICAgKnNvdXJjZV9saW5lX3N0ciA9PSAnXDAxNCcpCi0gICAgICAgIHNvdXJjZV9saW5lX3N0cisrOworICAgICAgICBjaGFyICpzb3VyY2VfbGluZV9zdHIgPSBQeVN0cmluZ19BU19TVFJJTkcoc291cmNlbGluZSk7CisgICAgICAgIHdoaWxlICgqc291cmNlX2xpbmVfc3RyID09ICcgJyB8fCAqc291cmNlX2xpbmVfc3RyID09ICdcdCcgfHwKKyAgICAgICAgICAgICAgICAqc291cmNlX2xpbmVfc3RyID09ICdcMDE0JykKKyAgICAgICAgICAgIHNvdXJjZV9saW5lX3N0cisrOwogCi0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKHNvdXJjZV9saW5lX3N0ciwgZl9zdGRlcnIpOwotICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycik7CisgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhzb3VyY2VfbGluZV9zdHIsIGZfc3RkZXJyKTsKKyAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKICAgICB9CiAgICAgZWxzZQotICAgIF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgUHlTdHJpbmdfQVNfU1RSSU5HKGZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCAyKTsKKyAgICAgICAgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBQeVN0cmluZ19BU19TVFJJTkcoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCAyKTsKICAgICBQeUVycl9DbGVhcigpOwogfQogCkBAIC0yODMsMTY0ICsyOTYsMTMzIEBACiAgICAgaW50IHJjOwogCiAgICAgaWYgKHJlZ2lzdHJ5ICYmICFQeURpY3RfQ2hlY2socmVnaXN0cnkpICYmIChyZWdpc3RyeSAhPSBQeV9Ob25lKSkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIE5vcm1hbGl6ZSBtb2R1bGUuICovCiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7Ci0gICAgbW9kdWxlID0gbm9ybWFsaXplX21vZHVsZShmaWxlbmFtZSk7Ci0gICAgaWYgKG1vZHVsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbW9kdWxlID0gbm9ybWFsaXplX21vZHVsZShmaWxlbmFtZSk7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlCi0gICAgUHlfSU5DUkVGKG1vZHVsZSk7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwogCiAgICAgLyogTm9ybWFsaXplIG1lc3NhZ2UuICovCiAgICAgUHlfSU5DUkVGKG1lc3NhZ2UpOyAgLyogREVDUkVGJ2VkIGluIGNsZWFudXAuICovCiAgICAgcmMgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG1lc3NhZ2UsIFB5RXhjX1dhcm5pbmcpOwogICAgIGlmIChyYyA9PSAtMSkgewotICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KICAgICBpZiAocmMgPT0gMSkgewotICAgIHRleHQgPSBQeU9iamVjdF9TdHIobWVzc2FnZSk7Ci0gICAgaWYgKHRleHQgPT0gTlVMTCkKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIGNhdGVnb3J5ID0gKFB5T2JqZWN0KiltZXNzYWdlLT5vYl90eXBlOworICAgICAgICB0ZXh0ID0gUHlPYmplY3RfU3RyKG1lc3NhZ2UpOworICAgICAgICBpZiAodGV4dCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICBjYXRlZ29yeSA9IChQeU9iamVjdCopbWVzc2FnZS0+b2JfdHlwZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgdGV4dCA9IG1lc3NhZ2U7Ci0gICAgbWVzc2FnZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjYXRlZ29yeSwgIk8iLCBtZXNzYWdlKTsKLSAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQotICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIHRleHQgPSBtZXNzYWdlOworICAgICAgICBtZXNzYWdlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNhdGVnb3J5LCAiTyIsIG1lc3NhZ2UpOworICAgICAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KIAogICAgIGxpbmVub19vYmogPSBQeUludF9Gcm9tTG9uZyhsaW5lbm8pOwogICAgIGlmIChsaW5lbm9fb2JqID09IE5VTEwpCi0gICAgZ290byBjbGVhbnVwOworICAgICAgICBnb3RvIGNsZWFudXA7CiAKICAgICAvKiBDcmVhdGUga2V5LiAqLwogICAgIGtleSA9IFB5VHVwbGVfUGFjaygzLCB0ZXh0LCBjYXRlZ29yeSwgbGluZW5vX29iaik7CiAgICAgaWYgKGtleSA9PSBOVUxMKQotICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgZ290byBjbGVhbnVwOwogCiAgICAgaWYgKChyZWdpc3RyeSAhPSBOVUxMKSAmJiAocmVnaXN0cnkgIT0gUHlfTm9uZSkpIHsKLSAgICByYyA9IGFscmVhZHlfd2FybmVkKHJlZ2lzdHJ5LCBrZXksIDApOwotICAgIGlmIChyYyA9PSAtMSkKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIGVsc2UgaWYgKHJjID09IDEpCi0gICAgICAgIGdvdG8gcmV0dXJuX25vbmU7Ci0gICAgLyogRWxzZSB0aGlzIHdhcm5pbmcgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIGJlZm9yZS4gKi8KKyAgICAgICAgcmMgPSBhbHJlYWR5X3dhcm5lZChyZWdpc3RyeSwga2V5LCAwKTsKKyAgICAgICAgaWYgKHJjID09IC0xKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICBlbHNlIGlmIChyYyA9PSAxKQorICAgICAgICAgICAgZ290byByZXR1cm5fbm9uZTsKKyAgICAgICAgLyogRWxzZSB0aGlzIHdhcm5pbmcgaGFzbid0IGJlZW4gZ2VuZXJhdGVkIGJlZm9yZS4gKi8KICAgICB9CiAKICAgICBhY3Rpb24gPSBnZXRfZmlsdGVyKGNhdGVnb3J5LCB0ZXh0LCBsaW5lbm8sIG1vZHVsZSwgJml0ZW0pOwogICAgIGlmIChhY3Rpb24gPT0gTlVMTCkKLSAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGdvdG8gY2xlYW51cDsKIAogICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiZXJyb3IiKSA9PSAwKSB7Ci0gICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKLSAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChjYXRlZ29yeSwgbWVzc2FnZSk7CisgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICB9CiAKICAgICAvKiBTdG9yZSBpbiB0aGUgcmVnaXN0cnkgdGhhdCB3ZSd2ZSBiZWVuIGhlcmUsICpleGNlcHQqIHdoZW4gdGhlIGFjdGlvbgogICAgICAgIGlzICJhbHdheXMiLiAqLwogICAgIHJjID0gMDsKICAgICBpZiAoc3RyY21wKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKLSAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lICYmCi0gICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQotICAgICAgICBnb3RvIHJldHVybl9ub25lOwotICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJvbmNlIikgPT0gMCkgewotICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCB8fCByZWdpc3RyeSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHJlZ2lzdHJ5ID0gZ2V0X29uY2VfcmVnaXN0cnkoKTsKLSAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCisgICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUgJiYKKyAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShyZWdpc3RyeSwga2V5LCBQeV9UcnVlKSA8IDApCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJpZ25vcmUiKSA9PSAwKQorICAgICAgICAgICAgZ290byByZXR1cm5fbm9uZTsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm9uY2UiKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCB8fCByZWdpc3RyeSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSBnZXRfb25jZV9yZWdpc3RyeSgpOworICAgICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBfb25jZV9yZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnkpXSA9IDEgKi8KKyAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKKyAgICAgICAgICAgIC8qIHJlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSwgMCldID0gMSAqLworICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvX3N0ciA9IFB5T2JqZWN0X1N0cihpdGVtKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKKworICAgICAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGVycl9zdHIgPSBQeVN0cmluZ19BU19TVFJJTkcodG9fc3RyKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJXMpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBlcnJfc3RyKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYodG9fc3RyKTsKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgICAgfQotICAgICAgICAvKiBfb25jZV9yZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnkpXSA9IDEgKi8KLSAgICAgICAgcmMgPSB1cGRhdGVfcmVnaXN0cnkocmVnaXN0cnksIHRleHQsIGNhdGVnb3J5LCAwKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKLSAgICAgICAgLyogcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5LCAwKV0gPSAxICovCi0gICAgICAgIGlmIChyZWdpc3RyeSAhPSBOVUxMICYmIHJlZ2lzdHJ5ICE9IFB5X05vbmUpCi0gICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewotICAgICAgICBQeU9iamVjdCAqdG9fc3RyID0gUHlPYmplY3RfU3RyKGl0ZW0pOwotICAgICAgICBjb25zdCBjaGFyICplcnJfc3RyID0gIj8/PyI7Ci0KLSAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKQotICAgICAgICBlcnJfc3RyID0gUHlTdHJpbmdfQVNfU1RSSU5HKHRvX3N0cik7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgZXJyX3N0cik7Ci0gICAgICAgIFB5X1hERUNSRUYodG9fc3RyKTsKLSAgICAgICAgZ290byBjbGVhbnVwOwotICAgIH0KICAgICB9CiAKICAgICBpZiAocmMgPT0gMSkgIC8qIEFscmVhZHkgd2FybmVkIGZvciB0aGlzIG1vZHVsZS4gKi8KLSAgICBnb3RvIHJldHVybl9ub25lOworICAgICAgICBnb3RvIHJldHVybl9ub25lOwogICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgUHlPYmplY3QgKnNob3dfZnhuID0gZ2V0X3dhcm5pbmdzX2F0dHIoInNob3d3YXJuaW5nIik7Ci0gICAgaWYgKHNob3dfZnhuID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgc2hvd193YXJuaW5nKGZpbGVuYW1lLCBsaW5lbm8sIHRleHQsIGNhdGVnb3J5LCBzb3VyY2VsaW5lKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9ICJmdW5jdGlvbnMgb3ZlcnJpZGluZyB3YXJuaW5ncy5zaG93d2FybmluZygpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBzdXBwb3J0IHRoZSAnbGluZScgYXJndW1lbnQiOwotICAgICAgICBjb25zdCBjaGFyICp0ZXh0X2NoYXIgPSBQeVN0cmluZ19BU19TVFJJTkcodGV4dCk7Ci0KLSAgICAgICAgaWYgKHN0cmNtcChtc2csIHRleHRfY2hhcikgPT0gMCkgewotICAgICAgICAvKiBQcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbiBieSB1c2luZyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbgotICAgICAgICAgICBvZiBzaG93d2FybmluZygpLiAqLwotICAgICAgICBzaG93X3dhcm5pbmcoZmlsZW5hbWUsIGxpbmVubywgdGV4dCwgY2F0ZWdvcnksIHNvdXJjZWxpbmUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqY2hlY2tfZnhuOwotICAgICAgICBQeU9iamVjdCAqZGVmYXVsdHM7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXM7Ci0KLSAgICAgICAgaWYgKFB5TWV0aG9kX0NoZWNrKHNob3dfZnhuKSkKLSAgICAgICAgICAgIGNoZWNrX2Z4biA9IFB5TWV0aG9kX0Z1bmN0aW9uKHNob3dfZnhuKTsKLSAgICAgICAgZWxzZSBpZiAoUHlGdW5jdGlvbl9DaGVjayhzaG93X2Z4bikpCi0gICAgICAgICAgICBjaGVja19meG4gPSBzaG93X2Z4bjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5ncy5zaG93d2FybmluZygpIG11c3QgYmUgc2V0IHRvIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiBvciBtZXRob2QiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzaG93X2Z4bik7Ci0gICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0cyA9IFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMoY2hlY2tfZnhuKTsKLSAgICAgICAgLyogQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gb2Ygd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBzaG91bGQKLSAgICAgICAgICAgIGhhdmUgYXQgbGVhc3QgdHdvIGRlZmF1bHQgYXJndW1lbnRzLiAqLwotICAgICAgICBpZiAoKGRlZmF1bHRzID09IE5VTEwpIHx8IChQeVR1cGxlX1NpemUoZGVmYXVsdHMpIDwgMikpIHsKLSAgICAgICAgICAgIFB5Q29kZU9iamVjdCAqY29kZSA9IChQeUNvZGVPYmplY3QgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldENvZGUoY2hlY2tfZnhuKTsKLSAgICAgICAgICAgIGlmICghKGNvZGUtPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBtc2csIDEpIDwKLSAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHNob3dfZnhuKTsKKyAgICAgICAgUHlPYmplY3QgKnNob3dfZnhuID0gZ2V0X3dhcm5pbmdzX2F0dHIoInNob3d3YXJuaW5nIik7CisgICAgICAgIGlmIChzaG93X2Z4biA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzaG93X3dhcm5pbmcoZmlsZW5hbWUsIGxpbmVubywgdGV4dCwgY2F0ZWdvcnksIHNvdXJjZWxpbmUpOwogICAgICAgICB9Ci0gICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc2hvd19meG4sIG1lc3NhZ2UsIGNhdGVnb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vX29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihzaG93X2Z4bik7Ci0gICAgICAgIFB5X1hERUNSRUYocmVzKTsKLSAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKworICAgICAgICAgICAgICBpZiAoIVB5TWV0aG9kX0NoZWNrKHNob3dfZnhuKSAmJiAhUHlGdW5jdGlvbl9DaGVjayhzaG93X2Z4bikpIHsKKyAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdzLnNob3d3YXJuaW5nKCkgbXVzdCBiZSBzZXQgdG8gYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uIG9yIG1ldGhvZCIpOworICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNob3dfZnhuKTsKKyAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Moc2hvd19meG4sIG1lc3NhZ2UsIGNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgIFB5X0RFQ1JFRihzaG93X2Z4bik7CisgICAgICAgICAgICAgIFB5X1hERUNSRUYocmVzKTsKKyAgICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwogICAgICAgICB9CiAgICAgfQotICAgIH0KICAgICBlbHNlIC8qIGlmIChyYyA9PSAtMSkgKi8KLSAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGdvdG8gY2xlYW51cDsKIAogIHJldHVybl9ub25lOgogICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC00NjYsMTUgKzQ0OCwxNSBAQAogICAgIC8qIFNldHVwIGdsb2JhbHMgYW5kIGxpbmVuby4gKi8KICAgICBQeUZyYW1lT2JqZWN0ICpmID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+ZnJhbWU7CiAgICAgd2hpbGUgKC0tc3RhY2tfbGV2ZWwgPiAwICYmIGYgIT0gTlVMTCkKLSAgICBmID0gZi0+Zl9iYWNrOworICAgICAgICBmID0gZi0+Zl9iYWNrOwogCiAgICAgaWYgKGYgPT0gTlVMTCkgewotICAgIGdsb2JhbHMgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnAtPnN5c2RpY3Q7Ci0gICAgKmxpbmVubyA9IDE7CisgICAgICAgIGdsb2JhbHMgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgICAgICpsaW5lbm8gPSAxOwogICAgIH0KICAgICBlbHNlIHsKLSAgICBnbG9iYWxzID0gZi0+Zl9nbG9iYWxzOwotICAgICpsaW5lbm8gPSBQeUNvZGVfQWRkcjJMaW5lKGYtPmZfY29kZSwgZi0+Zl9sYXN0aSk7CisgICAgICAgIGdsb2JhbHMgPSBmLT5mX2dsb2JhbHM7CisgICAgICAgICpsaW5lbm8gPSBQeUZyYW1lX0dldExpbmVOdW1iZXIoZik7CiAgICAgfQogCiAgICAgKm1vZHVsZSA9IE5VTEw7CkBAIC00ODQsODQgKzQ2Niw4NCBAQAogICAgIGFzc2VydChQeURpY3RfQ2hlY2soZ2xvYmFscykpOwogICAgICpyZWdpc3RyeSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX3dhcm5pbmdyZWdpc3RyeV9fIik7CiAgICAgaWYgKCpyZWdpc3RyeSA9PSBOVUxMKSB7Ci0gICAgaW50IHJjOworICAgICAgICBpbnQgcmM7CiAKLSAgICAqcmVnaXN0cnkgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCpyZWdpc3RyeSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgKnJlZ2lzdHJ5ID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoKnJlZ2lzdHJ5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICByYyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX3dhcm5pbmdyZWdpc3RyeV9fIiwgKnJlZ2lzdHJ5KTsKLSAgICAgaWYgKHJjIDwgMCkKLSAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICByYyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX3dhcm5pbmdyZWdpc3RyeV9fIiwgKnJlZ2lzdHJ5KTsKKyAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICB9CiAgICAgZWxzZQotICAgIFB5X0lOQ1JFRigqcmVnaXN0cnkpOworICAgICAgICBQeV9JTkNSRUYoKnJlZ2lzdHJ5KTsKIAogICAgIC8qIFNldHVwIG1vZHVsZS4gKi8KICAgICAqbW9kdWxlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fbmFtZV9fIik7CiAgICAgaWYgKCptb2R1bGUgPT0gTlVMTCkgewotICAgICptb2R1bGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOwotICAgIGlmICgqbW9kdWxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAqbW9kdWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZygiPHN0cmluZz4iKTsKKyAgICAgICAgaWYgKCptb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwogICAgIH0KICAgICBlbHNlCi0gICAgUHlfSU5DUkVGKCptb2R1bGUpOworICAgICAgICBQeV9JTkNSRUYoKm1vZHVsZSk7CiAKICAgICAvKiBTZXR1cCBmaWxlbmFtZS4gKi8KICAgICAqZmlsZW5hbWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19maWxlX18iKTsKICAgICBpZiAoKmZpbGVuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBQeVN0cmluZ19TaXplKCpmaWxlbmFtZSk7Ci0gICAgY29uc3QgY2hhciAqZmlsZV9zdHIgPSBQeVN0cmluZ19Bc1N0cmluZygqZmlsZW5hbWUpOwotICAgICAgICBpZiAoZmlsZV9zdHIgPT0gTlVMTCB8fCAobGVuIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSkKLSAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0KLSAgICAvKiBpZiBmaWxlbmFtZS5sb3dlcigpLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOiAqLwotICAgIGlmIChsZW4gPj0gNCAmJgotICAgICAgICBmaWxlX3N0cltsZW4tNF0gPT0gJy4nICYmCi0gICAgICAgIHRvbG93ZXIoZmlsZV9zdHJbbGVuLTNdKSA9PSAncCcgJiYKLSAgICAgICAgdG9sb3dlcihmaWxlX3N0cltsZW4tMl0pID09ICd5JyAmJgotICAgICAgICAodG9sb3dlcihmaWxlX3N0cltsZW4tMV0pID09ICdjJyB8fAotICAgICAgICB0b2xvd2VyKGZpbGVfc3RyW2xlbi0xXSkgPT0gJ28nKSkKLSAgICB7Ci0gICAgICAgICpmaWxlbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplKGZpbGVfc3RyLCBsZW4tMSk7Ci0gICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gUHlTdHJpbmdfU2l6ZSgqZmlsZW5hbWUpOworICAgICAgICBjb25zdCBjaGFyICpmaWxlX3N0ciA9IFB5U3RyaW5nX0FzU3RyaW5nKCpmaWxlbmFtZSk7CisgICAgICAgICAgICBpZiAoZmlsZV9zdHIgPT0gTlVMTCB8fCAobGVuIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSkKICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworCisgICAgICAgIC8qIGlmIGZpbGVuYW1lLmxvd2VyKCkuZW5kc3dpdGgoKCIucHljIiwgIi5weW8iKSk6ICovCisgICAgICAgIGlmIChsZW4gPj0gNCAmJgorICAgICAgICAgICAgZmlsZV9zdHJbbGVuLTRdID09ICcuJyAmJgorICAgICAgICAgICAgdG9sb3dlcihmaWxlX3N0cltsZW4tM10pID09ICdwJyAmJgorICAgICAgICAgICAgdG9sb3dlcihmaWxlX3N0cltsZW4tMl0pID09ICd5JyAmJgorICAgICAgICAgICAgKHRvbG93ZXIoZmlsZV9zdHJbbGVuLTFdKSA9PSAnYycgfHwKKyAgICAgICAgICAgICAgICB0b2xvd2VyKGZpbGVfc3RyW2xlbi0xXSkgPT0gJ28nKSkKKyAgICAgICAgeworICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoZmlsZV9zdHIsIGxlbi0xKTsKKyAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOworICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIgPSBQeVN0cmluZ19Bc1N0cmluZygqbW9kdWxlKTsKLSAgICBpZiAobW9kdWxlX3N0ciAmJiBzdHJjbXAobW9kdWxlX3N0ciwgIl9fbWFpbl9fIikgPT0gMCkgewotICAgICAgICBQeU9iamVjdCAqYXJndiA9IFB5U3lzX0dldE9iamVjdCgiYXJndiIpOwotICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgewotICAgICAgICBpbnQgaXNfdHJ1ZTsKLSAgICAgICAgKmZpbGVuYW1lID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7Ci0gICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwotICAgICAgICAvKiBJZiBzeXMuYXJndlswXSBpcyBmYWxzZSwgdGhlbiB1c2UgJ19fbWFpbl9fJy4gKi8KLSAgICAgICAgaXNfdHJ1ZSA9IFB5T2JqZWN0X0lzVHJ1ZSgqZmlsZW5hbWUpOwotICAgICAgICBpZiAoaXNfdHJ1ZSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRigqZmlsZW5hbWUpOwotICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIgPSBQeVN0cmluZ19Bc1N0cmluZygqbW9kdWxlKTsKKyAgICAgICAgaWYgKG1vZHVsZV9zdHIgJiYgc3RyY21wKG1vZHVsZV9zdHIsICJfX21haW5fXyIpID09IDApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7CisgICAgICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgeworICAgICAgICAgICAgICAgIGludCBpc190cnVlOworICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5TGlzdF9HZXRJdGVtKGFyZ3YsIDApOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIC8qIElmIHN5cy5hcmd2WzBdIGlzIGZhbHNlLCB0aGVuIHVzZSAnX19tYWluX18nLiAqLworICAgICAgICAgICAgICAgIGlzX3RydWUgPSBQeU9iamVjdF9Jc1RydWUoKmZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNfdHJ1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKCpmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNfdHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZygiX19tYWluX18iKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZW1iZWRkZWQgaW50ZXJwcmV0ZXJzIGRvbid0IGhhdmUgc3lzLmFyZ3YsIHNlZSBidWcgIzgzOTE1MSAqLworICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIl9fbWFpbl9fIik7CisgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICghaXNfdHJ1ZSkgewotICAgICAgICAgICAgUHlfREVDUkVGKCpmaWxlbmFtZSk7Ci0gICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgKmZpbGVuYW1lID0gKm1vZHVsZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIGVtYmVkZGVkIGludGVycHJldGVycyBkb24ndCBoYXZlIHN5cy5hcmd2LCBzZWUgYnVnICM4MzkxNTEgKi8KLSAgICAgICAgKmZpbGVuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICAqZmlsZW5hbWUgPSAqbW9kdWxlOwotICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKLSAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDE7CkBAIC01ODIsMjEgKzU2NCwyMSBAQAogICAgIC8qIEdldCBjYXRlZ29yeS4gKi8KICAgICByYyA9IFB5T2JqZWN0X0lzSW5zdGFuY2UobWVzc2FnZSwgUHlFeGNfV2FybmluZyk7CiAgICAgaWYgKHJjID09IC0xKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChyYyA9PSAxKQotICAgIGNhdGVnb3J5ID0gKFB5T2JqZWN0KiltZXNzYWdlLT5vYl90eXBlOworICAgICAgICBjYXRlZ29yeSA9IChQeU9iamVjdCopbWVzc2FnZS0+b2JfdHlwZTsKICAgICBlbHNlIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgIGNhdGVnb3J5ID0gUHlFeGNfVXNlcldhcm5pbmc7CisgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfVXNlcldhcm5pbmc7CiAKICAgICAvKiBWYWxpZGF0ZSBjYXRlZ29yeS4gKi8KICAgICByYyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoY2F0ZWdvcnksIFB5RXhjX1dhcm5pbmcpOwogICAgIGlmIChyYyA9PSAtMSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHJjID09IDApIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImNhdGVnb3J5IGlzIG5vdCBhIHN1YmNsYXNzIG9mIFdhcm5pbmciKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2F0ZWdvcnkgaXMgbm90IGEgc3ViY2xhc3Mgb2YgV2FybmluZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gY2F0ZWdvcnk7CkBAIC02MDksNyArNTkxLDcgQEAKICAgICBpbnQgbGluZW5vOwogCiAgICAgaWYgKCFzZXR1cF9jb250ZXh0KHN0YWNrX2xldmVsLCAmZmlsZW5hbWUsICZsaW5lbm8sICZtb2R1bGUsICZyZWdpc3RyeSkpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLCByZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwpAQCAtNjI4LDExICs2MTAsMTEgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9uOndhcm4iLCBrd19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZXNzYWdlLCAmY2F0ZWdvcnksICZzdGFja19sZXZlbCkpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgY2F0ZWdvcnkgPSBnZXRfY2F0ZWdvcnkobWVzc2FnZSwgY2F0ZWdvcnkpOwogICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gZG9fd2FybihtZXNzYWdlLCBjYXRlZ29yeSwgc3RhY2tfbGV2ZWwpOwogfQogCkBAIC02NTIsNjggKzYzNCw2OCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09pfE9PTzp3YXJuX2V4cGxpY2l0IiwKICAgICAgICAgICAgICAgICBrd2RfbGlzdCwgJm1lc3NhZ2UsICZjYXRlZ29yeSwgJmZpbGVuYW1lLCAmbGluZW5vLCAmbW9kdWxlLAogICAgICAgICAgICAgICAgICZyZWdpc3RyeSwgJm1vZHVsZV9nbG9iYWxzKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAobW9kdWxlX2dsb2JhbHMpIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmdldF9zb3VyY2VfbmFtZSA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzcGxpdGxpbmVzX25hbWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpsb2FkZXI7Ci0gICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwotICAgIFB5T2JqZWN0ICpzb3VyY2U7Ci0gICAgUHlPYmplY3QgKnNvdXJjZV9saXN0OwotICAgIFB5T2JqZWN0ICpzb3VyY2VfbGluZTsKLSAgICBQeU9iamVjdCAqcmV0dXJuZWQ7CisgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqZ2V0X3NvdXJjZV9uYW1lID0gTlVMTDsKKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpzcGxpdGxpbmVzX25hbWUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqbG9hZGVyOworICAgICAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpzb3VyY2U7CisgICAgICAgIFB5T2JqZWN0ICpzb3VyY2VfbGlzdDsKKyAgICAgICAgUHlPYmplY3QgKnNvdXJjZV9saW5lOworICAgICAgICBQeU9iamVjdCAqcmV0dXJuZWQ7CiAKLSAgICBpZiAoZ2V0X3NvdXJjZV9uYW1lID09IE5VTEwpIHsKLSAgICAgICAgZ2V0X3NvdXJjZV9uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZ2V0X3NvdXJjZSIpOwotICAgICAgICBpZiAoIWdldF9zb3VyY2VfbmFtZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChzcGxpdGxpbmVzX25hbWUgPT0gTlVMTCkgewotICAgICAgICBzcGxpdGxpbmVzX25hbWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJzcGxpdGxpbmVzIik7Ci0gICAgICAgIGlmICghc3BsaXRsaW5lc19uYW1lKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgICAgIGlmIChnZXRfc291cmNlX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZ2V0X3NvdXJjZV9uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZygiZ2V0X3NvdXJjZSIpOworICAgICAgICAgICAgaWYgKCFnZXRfc291cmNlX25hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNwbGl0bGluZXNfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzcGxpdGxpbmVzX25hbWUgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJzcGxpdGxpbmVzIik7CisgICAgICAgICAgICBpZiAoIXNwbGl0bGluZXNfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogCi0gICAgLyogQ2hlY2svZ2V0IHRoZSByZXF1aXNpdGUgcGllY2VzIG5lZWRlZCBmb3IgdGhlIGxvYWRlci4gKi8KLSAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVfZ2xvYmFscywgIl9fbG9hZGVyX18iKTsKLSAgICBtb2R1bGVfbmFtZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZV9nbG9iYWxzLCAiX19uYW1lX18iKTsKKyAgICAgICAgLyogQ2hlY2svZ2V0IHRoZSByZXF1aXNpdGUgcGllY2VzIG5lZWRlZCBmb3IgdGhlIGxvYWRlci4gKi8KKyAgICAgICAgbG9hZGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlX2dsb2JhbHMsICJfX2xvYWRlcl9fIik7CisgICAgICAgIG1vZHVsZV9uYW1lID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlX2dsb2JhbHMsICJfX25hbWVfXyIpOwogCi0gICAgaWYgKGxvYWRlciA9PSBOVUxMIHx8IG1vZHVsZV9uYW1lID09IE5VTEwpCi0gICAgICAgIGdvdG8gc3RhbmRhcmRfY2FsbDsKKyAgICAgICAgaWYgKGxvYWRlciA9PSBOVUxMIHx8IG1vZHVsZV9uYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIHN0YW5kYXJkX2NhbGw7CiAKLSAgICAvKiBNYWtlIHN1cmUgdGhlIGxvYWRlciBpbXBsZW1lbnRzIHRoZSBvcHRpb25hbCBnZXRfc291cmNlKCkgbWV0aG9kLiAqLwotICAgIGlmICghUHlPYmplY3RfSGFzQXR0clN0cmluZyhsb2FkZXIsICJnZXRfc291cmNlIikpCi0gICAgICAgIGdvdG8gc3RhbmRhcmRfY2FsbDsKLSAgICAvKiBDYWxsIGdldF9zb3VyY2UoKSB0byBnZXQgdGhlIHNvdXJjZSBjb2RlLiAqLwotICAgIHNvdXJjZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKGxvYWRlciwgZ2V0X3NvdXJjZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgTlVMTCk7Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UgaWYgKHNvdXJjZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgZ290byBzdGFuZGFyZF9jYWxsOwotICAgIH0KKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBsb2FkZXIgaW1wbGVtZW50cyB0aGUgb3B0aW9uYWwgZ2V0X3NvdXJjZSgpIG1ldGhvZC4gKi8KKyAgICAgICAgaWYgKCFQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGxvYWRlciwgImdldF9zb3VyY2UiKSkKKyAgICAgICAgICAgICAgICBnb3RvIHN0YW5kYXJkX2NhbGw7CisgICAgICAgIC8qIENhbGwgZ2V0X3NvdXJjZSgpIHRvIGdldCB0aGUgc291cmNlIGNvZGUuICovCisgICAgICAgIHNvdXJjZSA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKGxvYWRlciwgZ2V0X3NvdXJjZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIE5VTEwpOworICAgICAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBlbHNlIGlmIChzb3VyY2UgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKFB5X05vbmUpOworICAgICAgICAgICAgZ290byBzdGFuZGFyZF9jYWxsOworICAgICAgICB9CiAKLSAgICAvKiBTcGxpdCB0aGUgc291cmNlIGludG8gbGluZXMuICovCi0gICAgc291cmNlX2xpc3QgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzb3VyY2UsIHNwbGl0bGluZXNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIFB5X0RFQ1JFRihzb3VyY2UpOwotICAgIGlmICghc291cmNlX2xpc3QpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBTcGxpdCB0aGUgc291cmNlIGludG8gbGluZXMuICovCisgICAgICAgIHNvdXJjZV9saXN0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc291cmNlLCBzcGxpdGxpbmVzX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihzb3VyY2UpOworICAgICAgICBpZiAoIXNvdXJjZV9saXN0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBHZXQgdGhlIHNvdXJjZSBsaW5lLiAqLwotICAgIHNvdXJjZV9saW5lID0gUHlMaXN0X0dldEl0ZW0oc291cmNlX2xpc3QsIGxpbmVuby0xKTsKLSAgICBpZiAoIXNvdXJjZV9saW5lKSB7CisgICAgICAgIC8qIEdldCB0aGUgc291cmNlIGxpbmUuICovCisgICAgICAgIHNvdXJjZV9saW5lID0gUHlMaXN0X0dldEl0ZW0oc291cmNlX2xpc3QsIGxpbmVuby0xKTsKKyAgICAgICAgaWYgKCFzb3VyY2VfbGluZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNvdXJjZV9saXN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogSGFuZGxlIHRoZSB3YXJuaW5nLiAqLworICAgICAgICByZXR1cm5lZCA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOwogICAgICAgICBQeV9ERUNSRUYoc291cmNlX2xpc3QpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBIYW5kbGUgdGhlIHdhcm5pbmcuICovCi0gICAgcmV0dXJuZWQgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOwotICAgIFB5X0RFQ1JFRihzb3VyY2VfbGlzdCk7Ci0gICAgcmV0dXJuIHJldHVybmVkOworICAgICAgICByZXR1cm4gcmV0dXJuZWQ7CiAgICAgfQogCiAgc3RhbmRhcmRfY2FsbDoKQEAgLTcyOSwxNSArNzExLDE1IEBACiAgICAgUHlPYmplY3QgKnJlczsKICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcodGV4dCk7CiAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CisgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CiAKICAgICByZXMgPSBkb193YXJuKG1lc3NhZ2UsIGNhdGVnb3J5LCBzdGFja19sZXZlbCk7CiAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9ERUNSRUYocmVzKTsKIAogICAgIHJldHVybiAwOwpAQCAtNzY3LDE5ICs3NDksMTkgQEAKICAgICBpbnQgcmV0ID0gLTE7CiAKICAgICBpZiAobWVzc2FnZSA9PSBOVUxMIHx8IGZpbGVuYW1lID09IE5VTEwpCi0gICAgZ290byBleGl0OwotICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKLSAgICBtb2R1bGUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG1vZHVsZV9zdHIpOwotICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAobW9kdWxlX3N0ciAhPSBOVUxMKSB7CisgICAgICAgIG1vZHVsZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7CisgICAgICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CisgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CiAgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLCByZWdpc3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICBnb3RvIGV4aXQ7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICBQeV9ERUNSRUYocmVzKTsKICAgICByZXQgPSAwOwogCkBAIC03OTksMTIgKzc4MSwxMiBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYgd2FybmluZ3NfZnVuY3Rpb25zW10gPSB7CiAgICAgeyJ3YXJuIiwgKFB5Q0Z1bmN0aW9uKXdhcm5pbmdzX3dhcm4sIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgd2Fybl9kb2N9LAorICAgICAgICB3YXJuX2RvY30sCiAgICAgeyJ3YXJuX2V4cGxpY2l0IiwgKFB5Q0Z1bmN0aW9uKXdhcm5pbmdzX3dhcm5fZXhwbGljaXQsCi0gICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgd2Fybl9leHBsaWNpdF9kb2N9LAorICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCB3YXJuX2V4cGxpY2l0X2RvY30sCiAgICAgLyogWFhYKGJyZXR0LmNhbm5vbik6IGFkZCBzaG93d2FybmluZz8gKi8KICAgICAvKiBYWFgoYnJldHQuY2Fubm9uKTogUmVhc29uYWJsZSB0byBhZGQgZm9ybWF0d2FybmluZz8gKi8KLSAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICB7TlVMTCwgTlVMTH0JICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAogCkBAIC04MTgsMzcgKzgwMCwzNyBAQAogICAgIFB5T2JqZWN0ICpsaW5lbm8sICpyZXN1bHQ7CiAKICAgICBpZiAoIXN0cmNtcChhY3Rpb24sICJpZ25vcmUiKSkgewotICAgIGlmIChpZ25vcmVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgaWdub3JlX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImlnbm9yZSIpOwotICAgICAgICBpZiAoaWdub3JlX3N0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgYWN0aW9uX29iaiA9IGlnbm9yZV9zdHI7CisgICAgICAgIGlmIChpZ25vcmVfc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlnbm9yZV9zdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJpZ25vcmUiKTsKKyAgICAgICAgICAgIGlmIChpZ25vcmVfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYWN0aW9uX29iaiA9IGlnbm9yZV9zdHI7CiAgICAgfQogICAgIGVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLCAiZXJyb3IiKSkgewotICAgIGlmIChlcnJvcl9zdHIgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9zdHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJlcnJvciIpOwotICAgICAgICBpZiAoZXJyb3Jfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhY3Rpb25fb2JqID0gZXJyb3Jfc3RyOworICAgICAgICBpZiAoZXJyb3Jfc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm9yX3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImVycm9yIik7CisgICAgICAgICAgICBpZiAoZXJyb3Jfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYWN0aW9uX29iaiA9IGVycm9yX3N0cjsKICAgICB9CiAgICAgZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikpIHsKLSAgICBpZiAoZGVmYXVsdF9zdHIgPT0gTlVMTCkgewotICAgICAgICBkZWZhdWx0X3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImRlZmF1bHQiKTsKLSAgICAgICAgaWYgKGRlZmF1bHRfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhY3Rpb25fb2JqID0gZGVmYXVsdF9zdHI7CisgICAgICAgIGlmIChkZWZhdWx0X3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBkZWZhdWx0X3N0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoImRlZmF1bHQiKTsKKyAgICAgICAgICAgIGlmIChkZWZhdWx0X3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGFjdGlvbl9vYmogPSBkZWZhdWx0X3N0cjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgUHlfRmF0YWxFcnJvcigidW5rbm93biBhY3Rpb24iKTsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigidW5rbm93biBhY3Rpb24iKTsKICAgICB9CiAKICAgICAvKiBUaGlzIGFzc3VtZXMgdGhlIGxpbmUgbnVtYmVyIGlzIHplcm8gZm9yIG5vdy4gKi8KICAgICBsaW5lbm8gPSBQeUludF9Gcm9tTG9uZygwKTsKICAgICBpZiAobGluZW5vID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjayg1LCBhY3Rpb25fb2JqLCBQeV9Ob25lLCBjYXRlZ29yeSwgUHlfTm9uZSwgbGluZW5vKTsKICAgICBQeV9ERUNSRUYobGluZW5vKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODU3LDI4ICs4MzksMzkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbml0X2ZpbHRlcnModm9pZCkKIHsKLSAgICBQeU9iamVjdCAqZmlsdGVycyA9IFB5TGlzdF9OZXcoMyk7CisgICAgLyogRG9uJ3Qgc2lsZW5jZSBEZXByZWNhdGlvbldhcm5pbmcgaWYgLTMgb3IgLVEgd2VyZSB1c2VkLiAqLworICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlMaXN0X05ldyhQeV9QeTNrV2FybmluZ0ZsYWcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RpdmlzaW9uV2FybmluZ0ZsYWcgPyAzIDogNCk7CisgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7ICAvKiBQb3N0LWluY3JlbWVudGVkIGluIGVhY2ggdXNlLiAqLworICAgIHVuc2lnbmVkIGludCB4OwogICAgIGNvbnN0IGNoYXIgKmJ5dGVzX2FjdGlvbjsKLSAgICBpZiAoZmlsdGVycyA9PSBOVUxMKQotICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlMaXN0X1NFVF9JVEVNKGZpbHRlcnMsIDAsCisgICAgaWYgKGZpbHRlcnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBJZiBndWFyZCBjaGFuZ2VzLCBtYWtlIHN1cmUgdG8gdXBkYXRlICdmaWx0ZXJzJyBpbml0aWFsaXphdGlvbiBhYm92ZS4gKi8KKyAgICBpZiAoIVB5X1B5M2tXYXJuaW5nRmxhZyAmJiAhUHlfRGl2aXNpb25XYXJuaW5nRmxhZykgeworICAgICAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfZmlsdGVyKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgImlnbm9yZSIpKTsKKyAgICB9CisgICAgUHlMaXN0X1NFVF9JVEVNKGZpbHRlcnMsIHBvcysrLAogICAgICAgICAgICAgICAgICAgICBjcmVhdGVfZmlsdGVyKFB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICJpZ25vcmUiKSk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKGZpbHRlcnMsIDEsIGNyZWF0ZV9maWx0ZXIoUHlFeGNfSW1wb3J0V2FybmluZywgImlnbm9yZSIpKTsKKyAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9maWx0ZXIoUHlFeGNfSW1wb3J0V2FybmluZywgImlnbm9yZSIpKTsKICAgICBpZiAoUHlfQnl0ZXNXYXJuaW5nRmxhZyA+IDEpCi0gICAgYnl0ZXNfYWN0aW9uID0gImVycm9yIjsKKyAgICAgICAgYnl0ZXNfYWN0aW9uID0gImVycm9yIjsKICAgICBlbHNlIGlmIChQeV9CeXRlc1dhcm5pbmdGbGFnKQotICAgIGJ5dGVzX2FjdGlvbiA9ICJkZWZhdWx0IjsKKyAgICAgICAgYnl0ZXNfYWN0aW9uID0gImRlZmF1bHQiOwogICAgIGVsc2UKLSAgICBieXRlc19hY3Rpb24gPSAiaWdub3JlIjsKLSAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgMiwgY3JlYXRlX2ZpbHRlcihQeUV4Y19CeXRlc1dhcm5pbmcsCisgICAgICAgIGJ5dGVzX2FjdGlvbiA9ICJpZ25vcmUiOworICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCBwb3MrKywgY3JlYXRlX2ZpbHRlcihQeUV4Y19CeXRlc1dhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2FjdGlvbikpOwogCi0gICAgaWYgKFB5TGlzdF9HRVRfSVRFTShmaWx0ZXJzLCAwKSA9PSBOVUxMIHx8Ci0gICAgUHlMaXN0X0dFVF9JVEVNKGZpbHRlcnMsIDEpID09IE5VTEwgfHwKLSAgICBQeUxpc3RfR0VUX0lURU0oZmlsdGVycywgMikgPT0gTlVMTCkgewotICAgIFB5X0RFQ1JFRihmaWx0ZXJzKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKHggPSAwOyB4IDwgcG9zOyB4ICs9IDEpIHsKKyAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShmaWx0ZXJzLCB4KSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsdGVycyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmaWx0ZXJzOwpAQCAtODg4LDI5ICs4ODEsMjkgQEAKIFB5TU9ESU5JVF9GVU5DCiBfUHlXYXJuaW5nc19Jbml0KHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkZWZhdWx0X2FjdGlvbjsKKyAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeV9Jbml0TW9kdWxlMyhNT0RVTEVfTkFNRSwgd2FybmluZ3NfZnVuY3Rpb25zLCB3YXJuaW5nc19fZG9jX18pOwogICAgIGlmIChtID09IE5VTEwpCi0gICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAKICAgICBfZmlsdGVycyA9IGluaXRfZmlsdGVycygpOwogICAgIGlmIChfZmlsdGVycyA9PSBOVUxMKQotICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogICAgIFB5X0lOQ1JFRihfZmlsdGVycyk7CiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZmlsdGVycyIsIF9maWx0ZXJzKSA8IDApCi0gICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAKICAgICBfb25jZV9yZWdpc3RyeSA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoX29uY2VfcmVnaXN0cnkgPT0gTlVMTCkKLSAgICByZXR1cm47CisgICAgICAgIHJldHVybjsKICAgICBQeV9JTkNSRUYoX29uY2VfcmVnaXN0cnkpOwogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIm9uY2VfcmVnaXN0cnkiLCBfb25jZV9yZWdpc3RyeSkgPCAwKQotICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZGVmYXVsdF9hY3Rpb24gPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJkZWZhdWx0Iik7Ci0gICAgaWYgKGRlZmF1bHRfYWN0aW9uID09IE5VTEwpCi0gICAgcmV0dXJuOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgREVGQVVMVF9BQ1RJT05fTkFNRSwgZGVmYXVsdF9hY3Rpb24pIDwgMCkKLSAgICByZXR1cm47CisgICAgX2RlZmF1bHRfYWN0aW9uID0gUHlTdHJpbmdfRnJvbVN0cmluZygiZGVmYXVsdCIpOworICAgIGlmIChfZGVmYXVsdF9hY3Rpb24gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgImRlZmF1bHRfYWN0aW9uIiwgX2RlZmF1bHRfYWN0aW9uKSA8IDApCisgICAgICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCA1NzRhM2Q4Li44OGU0NzQ1IDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl9jb250ZXh0X3R5KTsKIHN0YXRpYyBleHByX3R5IGFzdF9mb3JfdGVzdGxpc3Qoc3RydWN0IGNvbXBpbGluZyAqLCBjb25zdCBub2RlICopOwogc3RhdGljIHN0bXRfdHkgYXN0X2Zvcl9jbGFzc2RlZihzdHJ1Y3QgY29tcGlsaW5nICosIGNvbnN0IG5vZGUgKiwgYXNkbF9zZXEgKik7Ci1zdGF0aWMgZXhwcl90eSBhc3RfZm9yX3Rlc3RsaXN0X2dleHAoc3RydWN0IGNvbXBpbGluZyAqLCBjb25zdCBub2RlICopOworc3RhdGljIGV4cHJfdHkgYXN0X2Zvcl90ZXN0bGlzdF9jb21wKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqKTsKIAogLyogTm90ZSBkaWZmZXJlbnQgc2lnbmF0dXJlIGZvciBhc3RfZm9yX2NhbGwgKi8KIHN0YXRpYyBleHByX3R5IGFzdF9mb3JfY2FsbChzdHJ1Y3QgY29tcGlsaW5nICosIGNvbnN0IG5vZGUgKiwgZXhwcl90eSk7CkBAIC00NCw2ICs0NCw5IEBACiAjZGVmaW5lIExJTkVOTyhuKSAgICAgICAoKG4pLT5uX2xpbmVubykKICNlbmRpZgogCisjZGVmaW5lIENPTVBfR0VORVhQIDAKKyNkZWZpbmUgQ09NUF9TRVRDT01QICAxCisKIHN0YXRpYyBpZGVudGlmaWVyCiBuZXdfaWRlbnRpZmllcihjb25zdCBjaGFyKiBuLCBQeUFyZW5hICphcmVuYSkgewogICAgIFB5T2JqZWN0KiBpZCA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcobik7CkBAIC0xMzEsMTAgKzEzNCwxNyBAQAogZm9yYmlkZGVuX2NoZWNrKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGNvbnN0IGNoYXIgKngpCiB7CiAgICAgaWYgKCFzdHJjbXAoeCwgIk5vbmUiKSkKLSAgICAgICAgcmV0dXJuIGFzdF9lcnJvcihuLCAiYXNzaWdubWVudCB0byBOb25lIik7Ci0gICAgaWYgKFB5X1B5M2tXYXJuaW5nRmxhZyAmJiAhKHN0cmNtcCh4LCAiVHJ1ZSIpICYmIHN0cmNtcCh4LCAiRmFsc2UiKSkgJiYKLSAgICAgICAgIWFzdF93YXJuKGMsIG4sICJhc3NpZ25tZW50IHRvIFRydWUgb3IgRmFsc2UgaXMgZm9yYmlkZGVuIGluIDMueCIpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFzdF9lcnJvcihuLCAiY2Fubm90IGFzc2lnbiB0byBOb25lIik7CisgICAgaWYgKCFzdHJjbXAoeCwgIl9fZGVidWdfXyIpKQorICAgICAgICByZXR1cm4gYXN0X2Vycm9yKG4sICJjYW5ub3QgYXNzaWduIHRvIF9fZGVidWdfXyIpOworICAgIGlmIChQeV9QeTNrV2FybmluZ0ZsYWcpIHsKKyAgICAgICAgaWYgKCEoc3RyY21wKHgsICJUcnVlIikgJiYgc3RyY21wKHgsICJGYWxzZSIpKSAmJgorICAgICAgICAgICAgIWFzdF93YXJuKGMsIG4sICJhc3NpZ25tZW50IHRvIFRydWUgb3IgRmFsc2UgaXMgZm9yYmlkZGVuIGluIDMueCIpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghc3RyY21wKHgsICJub25sb2NhbCIpICYmCisgICAgICAgICAgICAhYXN0X3dhcm4oYywgbiwgIm5vbmxvY2FsIGlzIGEga2V5d29yZCBpbiAzLngiKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTkwLDcgKzIwMCw3IEBACiAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07CiAKLSAgICAgICAgICAgIHNwcmludGYoYnVmLCAiTm9uLXN0YXRlbWVudCBmb3VuZDogJWQgJWRcbiIsCisgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIk5vbi1zdGF0ZW1lbnQgZm91bmQ6ICVkICVkIiwKICAgICAgICAgICAgICAgICAgICAgVFlQRShuKSwgTkNIKG4pKTsKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoYnVmKTsKICAgICAgICAgfQpAQCAtMjYxLDcgKzI3MSw3IEBACiAgICAgICAgIGNhc2UgZXZhbF9pbnB1dDogewogICAgICAgICAgICAgZXhwcl90eSB0ZXN0bGlzdF9hc3Q7CiAKLSAgICAgICAgICAgIC8qIFhYWCBXaHkgbm90IGdlbl9mb3IgaGVyZT8gKi8KKyAgICAgICAgICAgIC8qIFhYWCBXaHkgbm90IGNvbXBfZm9yIGhlcmU/ICovCiAgICAgICAgICAgICB0ZXN0bGlzdF9hc3QgPSBhc3RfZm9yX3Rlc3RsaXN0KCZjLCBDSElMRChuLCAwKSk7CiAgICAgICAgICAgICBpZiAoIXRlc3RsaXN0X2FzdCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzk1LDEwICs0MDUsMTMgQEAKICAgICAgICAgICAgIHMgPSBlLT52Lkxpc3QuZWx0czsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFR1cGxlX2tpbmQ6Ci0gICAgICAgICAgICBpZiAoYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cykgPT0gMCkgCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFzdF9lcnJvcihuLCAiY2FuJ3QgYXNzaWduIHRvICgpIik7Ci0gICAgICAgICAgICBlLT52LlR1cGxlLmN0eCA9IGN0eDsKLSAgICAgICAgICAgIHMgPSBlLT52LlR1cGxlLmVsdHM7CisgICAgICAgICAgICBpZiAoYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cykpICB7CisgICAgICAgICAgICAgICAgZS0+di5UdXBsZS5jdHggPSBjdHg7CisgICAgICAgICAgICAgICAgcyA9IGUtPnYuVHVwbGUuZWx0czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICIoKSI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMYW1iZGFfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsYW1iZGEiOwpAQCAtNDIwLDcgKzQzMywxNCBAQAogICAgICAgICBjYXNlIExpc3RDb21wX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAibGlzdCBjb21wcmVoZW5zaW9uIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldENvbXBfa2luZDoKKyAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJzZXQgY29tcHJlaGVuc2lvbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEaWN0Q29tcF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gImRpY3QgY29tcHJlaGVuc2lvbiI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEaWN0X2tpbmQ6CisgICAgICAgIGNhc2UgU2V0X2tpbmQ6CiAgICAgICAgIGNhc2UgTnVtX2tpbmQ6CiAgICAgICAgIGNhc2UgU3RyX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAibGl0ZXJhbCI7CkBAIC00MzUsOCArNDU1LDggQEAKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJjb25kaXRpb25hbCBleHByZXNzaW9uIjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBleHByZXNzaW9uIGluIGFzc2lnbm1lbnQgJWQgKGxpbmUgJWQpIiwgCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgZXhwcmVzc2lvbiBpbiBhc3NpZ25tZW50ICVkIChsaW5lICVkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+a2luZCwgZS0+bGluZW5vKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQ1MSw3ICs0NzEsNyBAQAogICAgIH0KIAogICAgIC8qIElmIHRoZSBMSFMgaXMgYSBsaXN0IG9yIHR1cGxlLCB3ZSBuZWVkIHRvIHNldCB0aGUgYXNzaWdubWVudAotICAgICAgIGNvbnRleHQgZm9yIGFsbCB0aGUgY29udGFpbmVkIGVsZW1lbnRzLiAgCisgICAgICAgY29udGV4dCBmb3IgYWxsIHRoZSBjb250YWluZWQgZWxlbWVudHMuCiAgICAgKi8KICAgICBpZiAocykgewogICAgICAgICBpbnQgaTsKQEAgLTU2Myw3ICs1ODMsNyBAQAogICAgIGludCBpOwogICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0IHx8CiAgICAgICAgICAgIFRZUEUobikgPT0gbGlzdG1ha2VyIHx8Ci0gICAgICAgICAgIFRZUEUobikgPT0gdGVzdGxpc3RfZ2V4cCB8fAorICAgICAgICAgICBUWVBFKG4pID09IHRlc3RsaXN0X2NvbXAgfHwKICAgICAgICAgICAgVFlQRShuKSA9PSB0ZXN0bGlzdF9zYWZlIHx8CiAgICAgICAgICAgIFRZUEUobikgPT0gdGVzdGxpc3QxKTsKIApAQCAtNjY4LDEwICs2ODgsMTAgQEAKICAgICB9CiAgICAgYXJncyA9IChuX2FyZ3MgPyBhc2RsX3NlcV9uZXcobl9hcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghYXJncyAmJiBuX2FyZ3MpCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBEb24ndCBuZWVkIHRvIGdvdG8gZXJyb3I7IG5vIG9iamVjdHMgYWxsb2NhdGVkICovCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGRlZmF1bHRzID0gKG5fZGVmYXVsdHMgPyBhc2RsX3NlcV9uZXcobl9kZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWRlZmF1bHRzICYmIG5fZGVmYXVsdHMpCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBEb24ndCBuZWVkIHRvIGdvdG8gZXJyb3I7IG5vIG9iamVjdHMgYWxsb2NhdGVkICovCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogZnBkZWY6IE5BTUUgfCAnKCcgZnBsaXN0ICcpJwogICAgICAgIGZwbGlzdDogZnBkZWYgKCcsJyBmcGRlZikqIFsnLCddCkBAIC02OTEsNyArNzExLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBOQ0gobikgJiYgVFlQRShDSElMRChuLCBpICsgMSkpID09IEVRVUFMKSB7CiAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpICsgMikpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlZmF1bHRzLCBqKyssIGV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgICBpICs9IDI7CkBAIC03MDIsMTEgKzcyMiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICBkZWYgZigoeCwgKHkpKSk6IHBhc3Mgd2lsbCBqdXN0IGluY3VyIHRoZSB0dXBsZSB1bnBhY2tpbmcgd2FybmluZy4gKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudGhlc2l6ZWQgJiYgIWNvbXBsZXhfYXJncykgewogICAgICAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKG4sICJwYXJlbnRoZXNpemVkIGFyZyB3aXRoIGRlZmF1bHQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IobiwgCisgICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLWRlZmF1bHQgYXJndW1lbnQgZm9sbG93cyBkZWZhdWx0IGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA9PSAzKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDEpOwpAQCAtNzE1LDExICs3MzUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgY29tcGxleCBhcmd1bWVudHMsIHNldHVwIGZvciB1bnBhY2tpbmcuICovCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlfUHkza1dhcm5pbmdGbGFnICYmICFhc3Rfd2FybihjLCBjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4X2FyZ3MgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIGsrKywgY29tcGlsZXJfY29tcGxleF9hcmdzKGMsIGNoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFzZGxfc2VxX0dFVChhcmdzLCBrLTEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZiBmb28oKHgpKTogc2V0dXAgZm9yIGNoZWNraW5nIE5BTUUgYmVsb3cuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb29wIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgcGFyZW5zIGFuZCB0dXBsZQpAQCAtNzM0LDU1ICs3NTQsNTAgQEAKICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlkOwogICAgICAgICAgICAgICAgICAgICBleHByX3R5IG5hbWU7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm9yYmlkZGVuX2NoZWNrKGMsIG4sIFNUUihDSElMRChjaCwgMCkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgaWQgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlkKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICBuYW1lID0gTmFtZShpZCwgUGFyYW0sIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhcmdzLCBrKyssIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpICs9IDI7IC8qIHRoZSBuYW1lIGFuZCB0aGUgY29tbWEgKi8KICAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXplZCAmJiBQeV9QeTNrV2FybmluZ0ZsYWcgJiYKICAgICAgICAgICAgICAgICAgICAgIWFzdF93YXJuKGMsIGNoLCAicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJlIGludmFsaWQgaW4gMy54IikpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNUQVI6CiAgICAgICAgICAgICAgICAgaWYgKCFmb3JiaWRkZW5fY2hlY2soYywgQ0hJTEQobiwgaSsxKSwgU1RSKENISUxEKG4sIGkrMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgdmFyYXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgaSsxKSk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmcpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9VQkxFU1RBUjoKICAgICAgICAgICAgICAgICBpZiAoIWZvcmJpZGRlbl9jaGVjayhjLCBDSElMRChuLCBpKzEpLCBTVFIoQ0hJTEQobiwgaSsxKSkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBrd2FyZyA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIGkrMSkpOwogICAgICAgICAgICAgICAgIGlmICgha3dhcmcpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBub2RlIGluIHZhcmFyZ3NsaXN0OiAlZCBAICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRShjaCksIGkpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dhcmcsIGRlZmF1bHRzLCBjLT5jX2FyZW5hKTsKLQotIGVycm9yOgotICAgIFB5X1hERUNSRUYodmFyYXJnKTsKLSAgICBQeV9YREVDUkVGKGt3YXJnKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGV4cHJfdHkKQEAgLTgyMywxNSArODM4LDE1IEBACiAgICAgLyogZGVjb3JhdG9yOiAnQCcgZG90dGVkX25hbWUgWyAnKCcgW2FyZ2xpc3RdICcpJyBdIE5FV0xJTkUgKi8KICAgICBleHByX3R5IGQgPSBOVUxMOwogICAgIGV4cHJfdHkgbmFtZV9leHByOwotICAgIAorCiAgICAgUkVRKG4sIGRlY29yYXRvcik7CiAgICAgUkVRKENISUxEKG4sIDApLCBBVCk7CiAgICAgUkVRKFJDSElMRChuLCAtMSksIE5FV0xJTkUpOwotICAgIAorCiAgICAgbmFtZV9leHByID0gYXN0X2Zvcl9kb3R0ZWRfbmFtZShjLCBDSElMRChuLCAxKSk7CiAgICAgaWYgKCFuYW1lX2V4cHIpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAKKwogICAgIGlmIChOQ0gobikgPT0gMykgeyAvKiBObyBhcmd1bWVudHMgKi8KICAgICAgICAgZCA9IG5hbWVfZXhwcjsKICAgICAgICAgbmFtZV9leHByID0gTlVMTDsKQEAgLTg1OSwxNyArODc0LDE3IEBACiAgICAgYXNkbF9zZXEqIGRlY29yYXRvcl9zZXE7CiAgICAgZXhwcl90eSBkOwogICAgIGludCBpOwotICAgIAorCiAgICAgUkVRKG4sIGRlY29yYXRvcnMpOwogICAgIGRlY29yYXRvcl9zZXEgPSBhc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWRlY29yYXRvcl9zZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAKKwogICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewogICAgICAgICBkID0gYXN0X2Zvcl9kZWNvcmF0b3IoYywgQ0hJTEQobiwgaSkpOwotICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlY29yYXRvcl9zZXEsIGksIGQpOworICAgICAgICBpZiAoIWQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYXNkbF9zZXFfU0VUKGRlY29yYXRvcl9zZXEsIGksIGQpOwogICAgIH0KICAgICByZXR1cm4gZGVjb3JhdG9yX3NlcTsKIH0KQEAgLTk2MSw3ICs5NzYsNyBAQAogc3RhdGljIGV4cHJfdHkKIGFzdF9mb3JfaWZleHByKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7Ci0gICAgLyogdGVzdDogb3JfdGVzdCAnaWYnIG9yX3Rlc3QgJ2Vsc2UnIHRlc3QgKi8gCisgICAgLyogdGVzdDogb3JfdGVzdCAnaWYnIG9yX3Rlc3QgJ2Vsc2UnIHRlc3QgKi8KICAgICBleHByX3R5IGV4cHJlc3Npb24sIGJvZHksIG9yZWxzZTsKIAogICAgIGFzc2VydChOQ0gobikgPT0gNSk7CkBAIC0xMDUyLDcgKzEwNjcsNyBAQAogICAgICAgIGxpc3RfaWY6ICdpZicgdGVzdCBbbGlzdF9pdGVyXQogICAgICAgIHRlc3RsaXN0X3NhZmU6IHRlc3QgWygnLCcgdGVzdCkrIFsnLCddXQogICAgICovCi0gICAgZXhwcl90eSBlbHQ7CisgICAgZXhwcl90eSBlbHQsIGZpcnN0OwogICAgIGFzZGxfc2VxICpsaXN0Y29tcHM7CiAgICAgaW50IGksIG5fZm9yczsKICAgICBub2RlICpjaDsKQEAgLTEwNzgsOSArMTA5Myw5IEBACiAgICAgICAgIGFzZGxfc2VxICp0OwogICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgIG5vZGUgKmZvcl9jaDsKLSAgICAgICAgCisKICAgICAgICAgUkVRKGNoLCBsaXN0X2Zvcik7Ci0gICAgICAgIAorCiAgICAgICAgIGZvcl9jaCA9IENISUxEKGNoLCAxKTsKICAgICAgICAgdCA9IGFzdF9mb3JfZXhwcmxpc3QoYywgZm9yX2NoLCBTdG9yZSk7CiAgICAgICAgIGlmICghdCkKQEAgLTEwODgsMTUgKzExMDMsMTUgQEAKICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgQ0hJTEQoY2gsIDMpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIAorCiAgICAgICAgIC8qIENoZWNrIHRoZSAjIG9mIGNoaWxkcmVuIHJhdGhlciB0aGFuIHRoZSBsZW5ndGggb2YgdCwgc2luY2UKICAgICAgICAgICAgW3ggZm9yIHgsIGluIC4uLiBdIGhhcyAxIGVsZW1lbnQgaW4gdCwgYnV0IHN0aWxsIHJlcXVpcmVzIGEgVHVwbGUuCiAgICAgICAgICovCisgICAgICAgIGZpcnN0ID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHQsIDApOwogICAgICAgICBpZiAoTkNIKGZvcl9jaCkgPT0gMSkKLSAgICAgICAgICAgIGxjID0gY29tcHJlaGVuc2lvbigoZXhwcl90eSlhc2RsX3NlcV9HRVQodCwgMCksIGV4cHJlc3Npb24sIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBsYyA9IGNvbXByZWhlbnNpb24oZmlyc3QsIGV4cHJlc3Npb24sIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsYyA9IGNvbXByZWhlbnNpb24oVHVwbGUodCwgU3RvcmUsIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsCisgICAgICAgICAgICBsYyA9IGNvbXByZWhlbnNpb24oVHVwbGUodCwgU3RvcmUsIGZpcnN0LT5saW5lbm8sIGZpcnN0LT5jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWxjKQpAQCAtMTEyMCwxMSArMTEzNSwxMSBAQAogICAgICAgICAgICAgICAgIFJFUShjaCwgbGlzdF9pdGVyKTsKICAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKICAgICAgICAgICAgICAgICBSRVEoY2gsIGxpc3RfaWYpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbGlzdF9mb3JfZXhwciA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMSkpOwogICAgICAgICAgICAgICAgIGlmICghbGlzdF9mb3JfZXhwcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoaWZzLCBqLCBsaXN0X2Zvcl9leHByKTsKICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA9PSAzKQogICAgICAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAyKTsKQEAgLTExNDAsNjAgKzExNTUsNjAgQEAKICAgICByZXR1cm4gTGlzdENvbXAoZWx0LCBsaXN0Y29tcHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIH0KIAotLyogQ291bnQgdGhlIG51bWJlciBvZiAnZm9yJyBsb29wcyBpbiBhIGdlbmVyYXRvciBleHByZXNzaW9uLgorLyoKKyAgIENvdW50IHRoZSBudW1iZXIgb2YgJ2ZvcicgbG9vcHMgaW4gYSBjb21wcmVoZW5zaW9uLgogCi0gICBIZWxwZXIgZm9yIGFzdF9mb3JfZ2VuZXhwKCkuCisgICBIZWxwZXIgZm9yIGFzdF9mb3JfY29tcHJlaGVuc2lvbigpLgogKi8KIAogc3RhdGljIGludAotY291bnRfZ2VuX2ZvcnMoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK2NvdW50X2NvbXBfZm9ycyhzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewogICAgIGludCBuX2ZvcnMgPSAwOwotICAgIG5vZGUgKmNoID0gQ0hJTEQobiwgMSk7CiAKLSBjb3VudF9nZW5fZm9yOgorICBjb3VudF9jb21wX2ZvcjoKICAgICBuX2ZvcnMrKzsKLSAgICBSRVEoY2gsIGdlbl9mb3IpOwotICAgIGlmIChOQ0goY2gpID09IDUpCi0gICAgICAgIGNoID0gQ0hJTEQoY2gsIDQpOworICAgIFJFUShuLCBjb21wX2Zvcik7CisgICAgaWYgKE5DSChuKSA9PSA1KQorICAgICAgICBuID0gQ0hJTEQobiwgNCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gbl9mb3JzOwotIGNvdW50X2dlbl9pdGVyOgotICAgIFJFUShjaCwgZ2VuX2l0ZXIpOwotICAgIGNoID0gQ0hJTEQoY2gsIDApOwotICAgIGlmIChUWVBFKGNoKSA9PSBnZW5fZm9yKQotICAgICAgICBnb3RvIGNvdW50X2dlbl9mb3I7Ci0gICAgZWxzZSBpZiAoVFlQRShjaCkgPT0gZ2VuX2lmKSB7Ci0gICAgICAgIGlmIChOQ0goY2gpID09IDMpIHsKLSAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDIpOwotICAgICAgICAgICAgZ290byBjb3VudF9nZW5faXRlcjsKKyAgY291bnRfY29tcF9pdGVyOgorICAgIFJFUShuLCBjb21wX2l0ZXIpOworICAgIG4gPSBDSElMRChuLCAwKTsKKyAgICBpZiAoVFlQRShuKSA9PSBjb21wX2ZvcikKKyAgICAgICAgZ290byBjb3VudF9jb21wX2ZvcjsKKyAgICBlbHNlIGlmIChUWVBFKG4pID09IGNvbXBfaWYpIHsKKyAgICAgICAgaWYgKE5DSChuKSA9PSAzKSB7CisgICAgICAgICAgICBuID0gQ0hJTEQobiwgMik7CisgICAgICAgICAgICBnb3RvIGNvdW50X2NvbXBfaXRlcjsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbl9mb3JzOwogICAgIH0KLSAgICAKKwogICAgIC8qIFNob3VsZCBuZXZlciBiZSByZWFjaGVkICovCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAibG9naWMgZXJyb3IgaW4gY291bnRfZ2VuX2ZvcnMiKTsKKyAgICAgICAgICAgICAgICAgICAgImxvZ2ljIGVycm9yIGluIGNvdW50X2NvbXBfZm9ycyIpOwogICAgIHJldHVybiAtMTsKIH0KIAotLyogQ291bnQgdGhlIG51bWJlciBvZiAnaWYnIHN0YXRlbWVudHMgaW4gYSBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KKy8qIENvdW50IHRoZSBudW1iZXIgb2YgJ2lmJyBzdGF0ZW1lbnRzIGluIGEgY29tcHJlaGVuc2lvbi4KIAotICAgSGVscGVyIGZvciBhc3RfZm9yX2dlbmV4cCgpLgorICAgSGVscGVyIGZvciBhc3RfZm9yX2NvbXByZWhlbnNpb24oKS4KICovCiAKIHN0YXRpYyBpbnQKLWNvdW50X2dlbl9pZnMoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK2NvdW50X2NvbXBfaWZzKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7CiAgICAgaW50IG5faWZzID0gMDsKIAogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIFJFUShuLCBnZW5faXRlcik7Ci0gICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBnZW5fZm9yKQorICAgICAgICBSRVEobiwgY29tcF9pdGVyKTsKKyAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IGNvbXBfZm9yKQogICAgICAgICAgICAgcmV0dXJuIG5faWZzOwogICAgICAgICBuID0gQ0hJTEQobiwgMCk7Ci0gICAgICAgIFJFUShuLCBnZW5faWYpOworICAgICAgICBSRVEobiwgY29tcF9pZik7CiAgICAgICAgIG5faWZzKys7CiAgICAgICAgIGlmIChOQ0gobikgPT0gMikKICAgICAgICAgICAgIHJldHVybiBuX2lmczsKQEAgLTEyMDEsNjggKzEyMTYsNTQgQEAKICAgICB9CiB9CiAKLS8qIFRPRE8oamh5bHRvbik6IENvbWJpbmUgd2l0aCBsaXN0IGNvbXByZWhlbnNpb24gY29kZT8gKi8KLXN0YXRpYyBleHByX3R5Ci1hc3RfZm9yX2dlbmV4cChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorc3RhdGljIGFzZGxfc2VxICoKK2FzdF9mb3JfY29tcHJlaGVuc2lvbihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewotICAgIC8qIHRlc3RsaXN0X2dleHA6IHRlc3QgKCBnZW5fZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKQotICAgICAgIGFyZ3VtZW50OiBbdGVzdCAnPSddIHRlc3QgW2dlbl9mb3JdICAgICAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdCAqLwotICAgIGV4cHJfdHkgZWx0OwotICAgIGFzZGxfc2VxICpnZW5leHBzOwogICAgIGludCBpLCBuX2ZvcnM7Ci0gICAgbm9kZSAqY2g7Ci0gICAgCi0gICAgYXNzZXJ0KFRZUEUobikgPT0gKHRlc3RsaXN0X2dleHApIHx8IFRZUEUobikgPT0gKGFyZ3VtZW50KSk7Ci0gICAgYXNzZXJ0KE5DSChuKSA+IDEpOwotICAgIAotICAgIGVsdCA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7Ci0gICAgaWYgKCFlbHQpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIAotICAgIG5fZm9ycyA9IGNvdW50X2dlbl9mb3JzKGMsIG4pOworICAgIGFzZGxfc2VxICpjb21wczsKKworICAgIG5fZm9ycyA9IGNvdW50X2NvbXBfZm9ycyhjLCBuKTsKICAgICBpZiAobl9mb3JzID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGdlbmV4cHMgPSBhc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKLSAgICBpZiAoIWdlbmV4cHMpCisgICAgY29tcHMgPSBhc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIWNvbXBzKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGNoID0gQ0hJTEQobiwgMSk7CiAgICAgZm9yIChpID0gMDsgaSA8IG5fZm9yczsgaSsrKSB7Ci0gICAgICAgIGNvbXByZWhlbnNpb25fdHkgZ2U7CisgICAgICAgIGNvbXByZWhlbnNpb25fdHkgY29tcDsKICAgICAgICAgYXNkbF9zZXEgKnQ7Ci0gICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKKyAgICAgICAgZXhwcl90eSBleHByZXNzaW9uLCBmaXJzdDsKICAgICAgICAgbm9kZSAqZm9yX2NoOwotICAgICAgICAKLSAgICAgICAgUkVRKGNoLCBnZW5fZm9yKTsKLSAgICAgICAgCi0gICAgICAgIGZvcl9jaCA9IENISUxEKGNoLCAxKTsKKworICAgICAgICBSRVEobiwgY29tcF9mb3IpOworCisgICAgICAgIGZvcl9jaCA9IENISUxEKG4sIDEpOwogICAgICAgICB0ID0gYXN0X2Zvcl9leHBybGlzdChjLCBmb3JfY2gsIFN0b3JlKTsKICAgICAgICAgaWYgKCF0KQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDMpKTsKKyAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAzKSk7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIC8qIENoZWNrIHRoZSAjIG9mIGNoaWxkcmVuIHJhdGhlciB0aGFuIHRoZSBsZW5ndGggb2YgdCwgc2luY2UKICAgICAgICAgICAgKHggZm9yIHgsIGluIC4uLikgaGFzIDEgZWxlbWVudCBpbiB0LCBidXQgc3RpbGwgcmVxdWlyZXMgYSBUdXBsZS4gKi8KKyAgICAgICAgZmlyc3QgPSAoZXhwcl90eSlhc2RsX3NlcV9HRVQodCwgMCk7CiAgICAgICAgIGlmIChOQ0goZm9yX2NoKSA9PSAxKQotICAgICAgICAgICAgZ2UgPSBjb21wcmVoZW5zaW9uKChleHByX3R5KWFzZGxfc2VxX0dFVCh0LCAwKSwgZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGNvbXAgPSBjb21wcmVoZW5zaW9uKGZpcnN0LCBleHByZXNzaW9uLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2UgPSBjb21wcmVoZW5zaW9uKFR1cGxlKHQsIFN0b3JlLCBMSU5FTk8oY2gpLCBjaC0+bl9jb2xfb2Zmc2V0LAorICAgICAgICAgICAgY29tcCA9IGNvbXByZWhlbnNpb24oVHVwbGUodCwgU3RvcmUsIGZpcnN0LT5saW5lbm8sIGZpcnN0LT5jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sIE5VTEwsIGMtPmNfYXJlbmEpOwotCi0gICAgICAgIGlmICghZ2UpCisgICAgICAgIGlmICghY29tcCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgIGlmIChOQ0goY2gpID09IDUpIHsKKyAgICAgICAgaWYgKE5DSChuKSA9PSA1KSB7CiAgICAgICAgICAgICBpbnQgaiwgbl9pZnM7CiAgICAgICAgICAgICBhc2RsX3NlcSAqaWZzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjaCA9IENISUxEKGNoLCA0KTsKLSAgICAgICAgICAgIG5faWZzID0gY291bnRfZ2VuX2lmcyhjLCBjaCk7CisKKyAgICAgICAgICAgIG4gPSBDSElMRChuLCA0KTsKKyAgICAgICAgICAgIG5faWZzID0gY291bnRfY29tcF9pZnMoYywgbik7CiAgICAgICAgICAgICBpZiAobl9pZnMgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEyNzEsMzYgKzEyNzIsOTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5faWZzOyBqKyspIHsKLSAgICAgICAgICAgICAgICBSRVEoY2gsIGdlbl9pdGVyKTsKLSAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKLSAgICAgICAgICAgICAgICBSRVEoY2gsIGdlbl9pZik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMSkpOworICAgICAgICAgICAgICAgIFJFUShuLCBjb21wX2l0ZXIpOworICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKKyAgICAgICAgICAgICAgICBSRVEobiwgY29tcF9pZik7CisKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKTsKICAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChpZnMsIGosIGV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIGNoID0gQ0hJTEQoY2gsIDIpOworICAgICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogb24gZXhpdCwgbXVzdCBndWFyYW50ZWUgdGhhdCBjaCBpcyBhIGdlbl9mb3IgKi8KLSAgICAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBnZW5faXRlcikKLSAgICAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKLSAgICAgICAgICAgIGdlLT5pZnMgPSBpZnM7CisgICAgICAgICAgICAvKiBvbiBleGl0LCBtdXN0IGd1YXJhbnRlZSB0aGF0IG4gaXMgYSBjb21wX2ZvciAqLworICAgICAgICAgICAgaWYgKFRZUEUobikgPT0gY29tcF9pdGVyKQorICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKKyAgICAgICAgICAgIGNvbXAtPmlmcyA9IGlmczsKICAgICAgICAgfQotICAgICAgICBhc2RsX3NlcV9TRVQoZ2VuZXhwcywgaSwgZ2UpOworICAgICAgICBhc2RsX3NlcV9TRVQoY29tcHMsIGksIGNvbXApOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gR2VuZXJhdG9yRXhwKGVsdCwgZ2VuZXhwcywgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgIHJldHVybiBjb21wczsKK30KKworc3RhdGljIGV4cHJfdHkKK2FzdF9mb3JfaXRlcmNvbXAoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgaW50IHR5cGUpCit7CisgICAgZXhwcl90eSBlbHQ7CisgICAgYXNkbF9zZXEgKmNvbXBzOworCisgICAgYXNzZXJ0KE5DSChuKSA+IDEpOworCisgICAgZWx0ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKKyAgICBpZiAoIWVsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjb21wcyA9IGFzdF9mb3JfY29tcHJlaGVuc2lvbihjLCBDSElMRChuLCAxKSk7CisgICAgaWYgKCFjb21wcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodHlwZSA9PSBDT01QX0dFTkVYUCkKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvckV4cChlbHQsIGNvbXBzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBDT01QX1NFVENPTVApCisgICAgICAgIHJldHVybiBTZXRDb21wKGVsdCwgY29tcHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICBlbHNlCisgICAgICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBleHByX3R5Cithc3RfZm9yX2RpY3Rjb21wKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCit7CisgICAgZXhwcl90eSBrZXksIHZhbHVlOworICAgIGFzZGxfc2VxICpjb21wczsKKworICAgIGFzc2VydChOQ0gobikgPiAzKTsKKyAgICBSRVEoQ0hJTEQobiwgMSksIENPTE9OKTsKKworICAgIGtleSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdmFsdWUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgY29tcHMgPSBhc3RfZm9yX2NvbXByZWhlbnNpb24oYywgQ0hJTEQobiwgMykpOworICAgIGlmICghY29tcHMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIERpY3RDb21wKGtleSwgdmFsdWUsIGNvbXBzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Cit9CisKK3N0YXRpYyBleHByX3R5Cithc3RfZm9yX2dlbmV4cChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQoreworICAgIGFzc2VydChUWVBFKG4pID09ICh0ZXN0bGlzdF9jb21wKSB8fCBUWVBFKG4pID09IChhcmd1bWVudCkpOworICAgIHJldHVybiBhc3RfZm9yX2l0ZXJjb21wKGMsIG4sIENPTVBfR0VORVhQKTsKK30KKworc3RhdGljIGV4cHJfdHkKK2FzdF9mb3Jfc2V0Y29tcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQoreworICAgIGFzc2VydChUWVBFKG4pID09IChkaWN0b3JzZXRtYWtlcikpOworICAgIHJldHVybiBhc3RfZm9yX2l0ZXJjb21wKGMsIG4sIENPTVBfU0VUQ09NUCk7CiB9CiAKIHN0YXRpYyBleHByX3R5CiBhc3RfZm9yX2F0b20oc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKLSAgICAvKiBhdG9tOiAnKCcgW3lpZWxkX2V4cHJ8dGVzdGxpc3RfZ2V4cF0gJyknIHwgJ1snIFtsaXN0bWFrZXJdICddJworICAgIC8qIGF0b206ICcoJyBbeWllbGRfZXhwcnx0ZXN0bGlzdF9jb21wXSAnKScgfCAnWycgW2xpc3RtYWtlcl0gJ10nCiAgICAgICAgfCAneycgW2RpY3RtYWtlcl0gJ30nIHwgJ2AnIHRlc3RsaXN0ICdgJyB8IE5BTUUgfCBOVU1CRVIgfCBTVFJJTkcrCiAgICAgKi8KICAgICBub2RlICpjaCA9IENISUxEKG4sIDApOwotICAgIAorCiAgICAgc3dpdGNoIChUWVBFKGNoKSkgewogICAgIGNhc2UgTkFNRTogewogICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlCkBAIC0xMzQ4LDIzICsxNDExLDIwIEBACiAgICAgfQogICAgIGNhc2UgTFBBUjogLyogc29tZSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zICovCiAgICAgICAgIGNoID0gQ0hJTEQobiwgMSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBSUEFSKQogICAgICAgICAgICAgcmV0dXJuIFR1cGxlKE5VTEwsIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFRZUEUoY2gpID09IHlpZWxkX2V4cHIpCiAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9leHByKGMsIGNoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoTkNIKGNoKSA+IDEpICYmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gZ2VuX2ZvcikpCi0gICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9nZW5leHAoYywgY2gpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFzdF9mb3JfdGVzdGxpc3RfZ2V4cChjLCBjaCk7CisKKyAgICAgICAgcmV0dXJuIGFzdF9mb3JfdGVzdGxpc3RfY29tcChjLCBjaCk7CiAgICAgY2FzZSBMU1FCOiAvKiBsaXN0IChvciBsaXN0IGNvbXByZWhlbnNpb24pICovCiAgICAgICAgIGNoID0gQ0hJTEQobiwgMSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBSU1FCKQogICAgICAgICAgICAgcmV0dXJuIExpc3QoTlVMTCwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwotICAgICAgICAKKwogICAgICAgICBSRVEoY2gsIGxpc3RtYWtlcik7CiAgICAgICAgIGlmIChOQ0goY2gpID09IDEgfHwgVFlQRShDSElMRChjaCwgMSkpID09IENPTU1BKSB7CiAgICAgICAgICAgICBhc2RsX3NlcSAqZWx0cyA9IHNlcV9mb3JfdGVzdGxpc3QoYywgY2gpOwpAQCAtMTM3NiwzNiArMTQzNiw2NSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9saXN0Y29tcChjLCBjaCk7CiAgICAgY2FzZSBMQlJBQ0U6IHsKLSAgICAgICAgLyogZGljdG1ha2VyOiB0ZXN0ICc6JyB0ZXN0ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddICovCisgICAgICAgIC8qIGRpY3RvcnNldG1ha2VyOgorICAgICAgICAgKiAgICAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKKyAgICAgICAgICogICAgKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKQorICAgICAgICAgKi8KICAgICAgICAgaW50IGksIHNpemU7CiAgICAgICAgIGFzZGxfc2VxICprZXlzLCAqdmFsdWVzOwotICAgICAgICAKKwogICAgICAgICBjaCA9IENISUxEKG4sIDEpOwotICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDQ7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KLSAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKLSAgICAgICAgaWYgKCFrZXlzKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIGlmICghdmFsdWVzKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSA0KSB7Ci0gICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIGkpKTsKLSAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgaWYgKFRZUEUoY2gpID09IFJCUkFDRSkgeworICAgICAgICAgICAgLyogaXQncyBhbiBlbXB0eSBkaWN0ICovCisgICAgICAgICAgICByZXR1cm4gRGljdChOVUxMLCBOVUxMLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0gZWxzZSBpZiAoTkNIKGNoKSA9PSAxIHx8IFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBDT01NQSkgeworICAgICAgICAgICAgLyogaXQncyBhIHNpbXBsZSBzZXQgKi8KKyAgICAgICAgICAgIGFzZGxfc2VxICplbHRzOworICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyAyOyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCisgICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFlbHRzKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChjaCk7IGkgKz0gMikgeworICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCBpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZWx0cywgaSAvIDIsIGV4cHJlc3Npb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFNldChlbHRzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0gZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGNvbXBfZm9yKSB7CisgICAgICAgICAgICAvKiBpdCdzIGEgc2V0IGNvbXByZWhlbnNpb24gKi8KKyAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX3NldGNvbXAoYywgY2gpOworICAgICAgICB9IGVsc2UgaWYgKE5DSChjaCkgPiAzICYmIFRZUEUoQ0hJTEQoY2gsIDMpKSA9PSBjb21wX2ZvcikgeworICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZGljdGNvbXAoYywgY2gpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogaXQncyBhIGRpY3QgKi8KKyAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gNDsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLworICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICgha2V5cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGtleXMsIGkgLyA0LCBleHByZXNzaW9uKTsKLQotICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSArIDIpKTsKLSAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHZhbHVlcyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBhc2RsX3NlcV9TRVQodmFsdWVzLCBpIC8gNCwgZXhwcmVzc2lvbik7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSA0KSB7CisgICAgICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOworCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSkpOworICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoa2V5cywgaSAvIDQsIGV4cHJlc3Npb24pOworCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSArIDIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHZhbHVlcywgaSAvIDQsIGV4cHJlc3Npb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIERpY3Qoa2V5cywgdmFsdWVzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIERpY3Qoa2V5cywgdmFsdWVzLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgQkFDS1FVT1RFOiB7IC8qIHJlcHIgKi8KICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOwpAQCAtMTQ0MywxMCArMTUzMiwxMCBAQAogICAgIGlmIChOQ0gobikgPT0gMSAmJiBUWVBFKGNoKSA9PSB0ZXN0KSB7CiAgICAgICAgIC8qICdzdGVwJyB2YXJpYWJsZSBob2xkIG5vIHNpZ25pZmljYW5jZSBpbiB0ZXJtcyBvZiBiZWluZyB1c2VkIG92ZXIKICAgICAgICAgICAgb3RoZXIgdmFycyAqLwotICAgICAgICBzdGVwID0gYXN0X2Zvcl9leHByKGMsIGNoKTsgCisgICAgICAgIHN0ZXAgPSBhc3RfZm9yX2V4cHIoYywgY2gpOwogICAgICAgICBpZiAoIXN0ZXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiBJbmRleChzdGVwLCBjLT5jX2FyZW5hKTsKICAgICB9CiAKQEAgLTE0ODAsMTAgKzE1NjksMTcgQEAKICAgICBjaCA9IENISUxEKG4sIE5DSChuKSAtIDEpOwogICAgIGlmIChUWVBFKGNoKSA9PSBzbGljZW9wKSB7CiAgICAgICAgIGlmIChOQ0goY2gpID09IDEpIHsKLSAgICAgICAgICAgIC8qIE5vIGV4cHJlc3Npb24sIHNvIHN0ZXAgaXMgTm9uZSAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgVGhpcyBpcyBhbiBleHRlbmRlZCBzbGljZSAoaWUgInhbOjpdIikgd2l0aCBubyBleHByZXNzaW9uIGluIHRoZQorICAgICAgICAgICAgICBzdGVwIGZpZWxkLiBXZSBzZXQgdGhpcyBsaXRlcmFsbHkgdG8gIk5vbmUiIGluIG9yZGVyIHRvCisgICAgICAgICAgICAgIGRpc2FtYmlndWF0ZSBpdCBmcm9tIHhbOl0uIChUaGUgaW50ZXJwcmV0ZXIgbWlnaHQgaGF2ZSB0byBjYWxsCisgICAgICAgICAgICAgIF9fZ2V0c2xpY2VfXyBmb3IgeFs6XSwgYnV0IGl0IG11c3QgY2FsbCBfX2dldGl0ZW1fXyBmb3IgeFs6Ol0uKQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlkZW50aWZpZXIgbm9uZSA9IG5ld19pZGVudGlmaWVyKCJOb25lIiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIW5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKLSAgICAgICAgICAgIHN0ZXAgPSBOYW1lKG5ld19pZGVudGlmaWVyKCJOb25lIiwgYy0+Y19hcmVuYSksIExvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8oY2gpLCBjaC0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHN0ZXAgPSBOYW1lKG5vbmUsIExvYWQsIExJTkVOTyhjaCksIGNoLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzdGVwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9IGVsc2UgewpAQCAtMTUwMyw3ICsxNTk5LDcgQEAKIGFzdF9mb3JfYmlub3Aoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICAgICAgLyogTXVzdCBhY2NvdW50IGZvciBhIHNlcXVlbmNlIG9mIGV4cHJlc3Npb25zLgotICAgICAgICAgICBIb3cgc2hvdWxkIEEgb3AgQiBvcCBDIGJ5IHJlcHJlc2VudGVkPyAgCisgICAgICAgICAgIEhvdyBzaG91bGQgQSBvcCBCIG9wIEMgYnkgcmVwcmVzZW50ZWQ/CiAgICAgICAgICAgIEJpbk9wKEJpbk9wKEEsIG9wLCBCKSwgb3AsIEMpLgogICAgICAgICAqLwogCkBAIC0xNTQxLDEwICsxNjM3LDEwIEBACiAgICAgICAgICAgICAgICAgaWYgKCF0bXApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICAgICAgdG1wX3Jlc3VsdCA9IEJpbk9wKHJlc3VsdCwgbmV3b3BlcmF0b3IsIHRtcCwgCisgICAgICAgICAgICAgICAgdG1wX3Jlc3VsdCA9IEJpbk9wKHJlc3VsdCwgbmV3b3BlcmF0b3IsIHRtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG5leHRfb3BlciksIG5leHRfb3Blci0+bl9jb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRtcF9yZXN1bHQpIAorICAgICAgICAgICAgICAgIGlmICghdG1wX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRtcF9yZXN1bHQ7CiAgICAgICAgIH0KQEAgLTE1NTQsNyArMTY1MCw3IEBACiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl90cmFpbGVyKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGV4cHJfdHkgbGVmdF9leHByKQogewotICAgIC8qIHRyYWlsZXI6ICcoJyBbYXJnbGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdGxpc3QgJ10nIHwgJy4nIE5BTUUgCisgICAgLyogdHJhaWxlcjogJygnIFthcmdsaXN0XSAnKScgfCAnWycgc3Vic2NyaXB0bGlzdCAnXScgfCAnLicgTkFNRQogICAgICAgIHN1YnNjcmlwdGxpc3Q6IHN1YnNjcmlwdCAoJywnIHN1YnNjcmlwdCkqIFsnLCddCiAgICAgICAgc3Vic2NyaXB0OiAnLicgJy4nICcuJyB8IHRlc3QgfCBbdGVzdF0gJzonIFt0ZXN0XSBbc2xpY2VvcF0KICAgICAgKi8KQEAgLTE1ODUsNyArMTY4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogVGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIGhlcmUuIFRoZSBhbWJpZ3VpdHkgaXMgcmVzb2x2ZWQgCisgICAgICAgICAgICAvKiBUaGUgZ3JhbW1hciBpcyBhbWJpZ3VvdXMgaGVyZS4gVGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZAogICAgICAgICAgICAgICAgYnkgdHJlYXRpbmcgdGhlIHNlcXVlbmNlIGFzIGEgdHVwbGUgbGl0ZXJhbCBpZiB0aGVyZSBhcmUKICAgICAgICAgICAgICAgIG5vIHNsaWNlIGZlYXR1cmVzLgogICAgICAgICAgICAgKi8KQEAgLTE3MjIsNyArMTgxOCw3IEBACiB7CiAgICAgLyogaGFuZGxlIHRoZSBmdWxsIHJhbmdlIG9mIHNpbXBsZSBleHByZXNzaW9ucwogICAgICAgIHRlc3Q6IG9yX3Rlc3QgWydpZicgb3JfdGVzdCAnZWxzZScgdGVzdF0gfCBsYW1iZGVmCi0gICAgICAgb3JfdGVzdDogYW5kX3Rlc3QgKCdvcicgYW5kX3Rlc3QpKiAKKyAgICAgICBvcl90ZXN0OiBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqCiAgICAgICAgYW5kX3Rlc3Q6IG5vdF90ZXN0ICgnYW5kJyBub3RfdGVzdCkqCiAgICAgICAgbm90X3Rlc3Q6ICdub3QnIG5vdF90ZXN0IHwgY29tcGFyaXNvbgogICAgICAgIGNvbXBhcmlzb246IGV4cHIgKGNvbXBfb3AgZXhwcikqCkBAIC0xNzM5LDcgKzE4MzUsNyBAQAogICAgICAgIHRvIGV4cGxpY2l0bHkgYWxsb3c6CiAgICAgICAgWyB4IGZvciB4IGluIGxhbWJkYTogMCwgbGFtYmRhOiAxIF0KICAgICAgICAod2hpY2ggd291bGQgYmUgYW1iaWd1b3VzIHdpdGhvdXQgdGhlc2UgZXh0cmEgcnVsZXMpCi0gICAgICAgCisKICAgICAgICBvbGRfdGVzdDogb3JfdGVzdCB8IG9sZF9sYW1iZGVmCiAgICAgICAgb2xkX2xhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdsaXN0XSAnOicgb2xkX3Rlc3QKIApAQCAtMTgxOSw3ICsxOTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKG9wcywgaSAvIDIsIG5ld29wZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGNtcHMsIGkgLyAyLCBleHByZXNzaW9uKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xODI3LDcgKzE5MjMsNyBAQAogICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUoZXhwcmVzc2lvbiwgb3BzLCBjbXBzLCBMSU5FTk8obiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIH0KQEAgLTE4NzksNyArMTk3NSw3IEBACiAgICAgLyoKICAgICAgIGFyZ2xpc3Q6IChhcmd1bWVudCAnLCcpKiAoYXJndW1lbnQgWycsJ118ICcqJyB0ZXN0IFsnLCcgJyoqJyB0ZXN0XQogICAgICAgICAgICAgICAgfCAnKionIHRlc3QpCi0gICAgICBhcmd1bWVudDogW3Rlc3QgJz0nXSB0ZXN0IFtnZW5fZm9yXSAgICAgICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0CisgICAgICBhcmd1bWVudDogW3Rlc3QgJz0nXSB0ZXN0IFtjb21wX2Zvcl0gICAgICAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAogICAgICovCiAKICAgICBpbnQgaSwgbmFyZ3MsIG5rZXl3b3JkcywgbmdlbnM7CkBAIC0xODk3LDcgKzE5OTMsNyBAQAogICAgICAgICBpZiAoVFlQRShjaCkgPT0gYXJndW1lbnQpIHsKICAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDEpCiAgICAgICAgICAgICAgICAgbmFyZ3MrKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBnZW5fZm9yKQorICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGNvbXBfZm9yKQogICAgICAgICAgICAgICAgIG5nZW5zKys7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbmtleXdvcmRzKys7CkBAIC0xOTQxLDggKzIwMzcsOCBAQAogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIG5hcmdzKyssIGUpOwotICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICBlbHNlIGlmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gZ2VuX2ZvcikgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMSkpID09IGNvbXBfZm9yKSB7CiAgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZ2VuZXhwKGMsIGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk1NCw3ICsyMDUwLDcgQEAKICAgICAgICAgICAgICAgICBpbnQgazsKICAgICAgICAgICAgICAgICBjaGFyICp0bXA7CiAKLSAgICAgICAgICAgICAgICAvKiBDSElMRChjaCwgMCkgaXMgdGVzdCwgYnV0IG11c3QgYmUgYW4gaWRlbnRpZmllcj8gKi8gCisgICAgICAgICAgICAgICAgLyogQ0hJTEQoY2gsIDApIGlzIHRlc3QsIGJ1dCBtdXN0IGJlIGFuIGlkZW50aWZpZXI/ICovCiAgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMCkpOwogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMDEyLDE0ICsyMTA4LDE0IEBACiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl90ZXN0bGlzdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlKiBuKQogewotICAgIC8qIHRlc3RsaXN0X2dleHA6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10gKi8KKyAgICAvKiB0ZXN0bGlzdF9jb21wOiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddICovCiAgICAgLyogdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10gKi8KICAgICAvKiB0ZXN0bGlzdF9zYWZlOiB0ZXN0ICgnLCcgdGVzdCkrIFsnLCddICovCiAgICAgLyogdGVzdGxpc3QxOiB0ZXN0ICgnLCcgdGVzdCkqICovCiAgICAgYXNzZXJ0KE5DSChuKSA+IDApOwotICAgIGlmIChUWVBFKG4pID09IHRlc3RsaXN0X2dleHApIHsKKyAgICBpZiAoVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKSB7CiAgICAgICAgIGlmIChOQ0gobikgPiAxKQotICAgICAgICAgICAgYXNzZXJ0KFRZUEUoQ0hJTEQobiwgMSkpICE9IGdlbl9mb3IpOworICAgICAgICAgICAgYXNzZXJ0KFRZUEUoQ0hJTEQobiwgMSkpICE9IGNvbXBfZm9yKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0IHx8CkBAIC0yMDM3LDEyICsyMTMzLDEyIEBACiB9CiAKIHN0YXRpYyBleHByX3R5Ci1hc3RfZm9yX3Rlc3RsaXN0X2dleHAoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSogbikKK2FzdF9mb3JfdGVzdGxpc3RfY29tcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlKiBuKQogewotICAgIC8qIHRlc3RsaXN0X2dleHA6IHRlc3QgKCBnZW5fZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10gKSAqLwotICAgIC8qIGFyZ3VtZW50OiB0ZXN0IFsgZ2VuX2ZvciBdICovCi0gICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3RfZ2V4cCB8fCBUWVBFKG4pID09IGFyZ3VtZW50KTsKLSAgICBpZiAoTkNIKG4pID4gMSAmJiBUWVBFKENISUxEKG4sIDEpKSA9PSBnZW5fZm9yKQorICAgIC8qIHRlc3RsaXN0X2NvbXA6IHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkgKi8KKyAgICAvKiBhcmd1bWVudDogdGVzdCBbIGNvbXBfZm9yIF0gKi8KKyAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wIHx8IFRZUEUobikgPT0gYXJndW1lbnQpOworICAgIGlmIChOQ0gobikgPiAxICYmIFRZUEUoQ0hJTEQobiwgMSkpID09IGNvbXBfZm9yKQogICAgICAgICByZXR1cm4gYXN0X2Zvcl9nZW5leHAoYywgbik7CiAgICAgcmV0dXJuIGFzdF9mb3JfdGVzdGxpc3QoYywgbik7CiB9CkBAIC0yMDczLDcgKzIxNjksNyBAQAogYXN0X2Zvcl9leHByX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBSRVEobiwgZXhwcl9zdG10KTsKLSAgICAvKiBleHByX3N0bXQ6IHRlc3RsaXN0IChhdWdhc3NpZ24gKHlpZWxkX2V4cHJ8dGVzdGxpc3QpIAorICAgIC8qIGV4cHJfc3RtdDogdGVzdGxpc3QgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkKICAgICAgICAgICAgICAgICB8ICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3QpKSopCiAgICAgICAgdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KICAgICAgICBhdWdhc3NpZ246ICcrPScgfCAnLT0nIHwgJyo9JyB8ICcvPScgfCAnJT0nIHwgJyY9JyB8ICd8PScgfCAnXj0nCkBAIC0yMDk2LDMzICsyMTkyLDIxIEBACiAgICAgICAgIGV4cHIxID0gYXN0X2Zvcl90ZXN0bGlzdChjLCBjaCk7CiAgICAgICAgIGlmICghZXhwcjEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogVE9ETyhuYXMpOiBSZW1vdmUgZHVwbGljYXRlZCBlcnJvciBjaGVja3MgKHNldF9jb250ZXh0IGRvZXMgaXQpICovCisgICAgICAgIGlmKCFzZXRfY29udGV4dChjLCBleHByMSwgU3RvcmUsIGNoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBzZXRfY29udGV4dCBjaGVja3MgdGhhdCBtb3N0IGV4cHJlc3Npb25zIGFyZSBub3QgdGhlIGxlZnQgc2lkZS4KKyAgICAgICAgICBBdWdtZW50ZWQgYXNzaWdubWVudHMgY2FuIG9ubHkgaGF2ZSBhIG5hbWUsIGEgc3Vic2NyaXB0LCBvciBhbgorICAgICAgICAgIGF0dHJpYnV0ZSBvbiB0aGUgbGVmdCwgdGhvdWdoLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgY2hlY2sgZm9yCisgICAgICAgICAgdGhvc2UuICovCiAgICAgICAgIHN3aXRjaCAoZXhwcjEtPmtpbmQpIHsKLSAgICAgICAgICAgIGNhc2UgR2VuZXJhdG9yRXhwX2tpbmQ6Ci0gICAgICAgICAgICAgICAgYXN0X2Vycm9yKGNoLCAiYXVnbWVudGVkIGFzc2lnbm1lbnQgdG8gZ2VuZXJhdG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cHJlc3Npb24gbm90IHBvc3NpYmxlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBjYXNlIFlpZWxkX2tpbmQ6Ci0gICAgICAgICAgICAgICAgYXN0X2Vycm9yKGNoLCAiYXVnbWVudGVkIGFzc2lnbm1lbnQgdG8geWllbGQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwcmVzc2lvbiBub3QgcG9zc2libGUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGNhc2UgTmFtZV9raW5kOiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFyX25hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhleHByMS0+di5OYW1lLmlkKTsKLSAgICAgICAgICAgICAgICBpZiAoKHZhcl9uYW1lWzBdID09ICdOJyB8fCB2YXJfbmFtZVswXSA9PSAnVCcgfHwgdmFyX25hbWVbMF0gPT0gJ0YnKSAmJgotICAgICAgICAgICAgICAgICAgICAhZm9yYmlkZGVuX2NoZWNrKGMsIGNoLCB2YXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgICAgICBjYXNlIEF0dHJpYnV0ZV9raW5kOgogICAgICAgICAgICAgY2FzZSBTdWJzY3JpcHRfa2luZDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXN0X2Vycm9yKGNoLCAiaWxsZWdhbCBleHByZXNzaW9uIGZvciBhdWdtZW50ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNzaWdubWVudCIpOworICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjaCwgImlsbGVnYWwgZXhwcmVzc2lvbiBmb3IgYXVnbWVudGVkIGFzc2lnbm1lbnQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZighc2V0X2NvbnRleHQoYywgZXhwcjEsIFN0b3JlLCBjaCkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBjaCA9IENISUxEKG4sIDIpOwogICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGVzdGxpc3QpCkBAIC0yMTU4LDExICsyMjQyLDEwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlID0gYXN0X2Zvcl90ZXN0bGlzdChjLCBjaCk7Ci0KLSAgICAgICAgICAgIC8qIHNldCBjb250ZXh0IHRvIGFzc2lnbiAqLwotICAgICAgICAgICAgaWYgKCFlKSAKKyAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgICAgICAgICAgLyogc2V0IGNvbnRleHQgdG8gYXNzaWduICovCiAgICAgICAgICAgICBpZiAoIXNldF9jb250ZXh0KGMsIGUsIFN0b3JlLCBDSElMRChuLCBpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIxODcsOSArMjI3MCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJz4+JyB0ZXN0IFsgKCcsJyB0ZXN0KSsgWycsJ10gXSApCiAgICAgICovCiAgICAgZXhwcl90eSBkZXN0ID0gTlVMTCwgZXhwcmVzc2lvbjsKLSAgICBhc2RsX3NlcSAqc2VxOworICAgIGFzZGxfc2VxICpzZXEgPSBOVUxMOwogICAgIGJvb2wgbmw7Ci0gICAgaW50IGksIGosIHN0YXJ0ID0gMTsKKyAgICBpbnQgaSwgaiwgdmFsdWVzX2NvdW50LCBzdGFydCA9IDE7CiAKICAgICBSRVEobiwgcHJpbnRfc3RtdCk7CiAgICAgaWYgKE5DSChuKSA+PSAyICYmIFRZUEUoQ0hJTEQobiwgMSkpID09IFJJR0hUU0hJRlQpIHsKQEAgLTIxOTgsMTQgKzIyODEsMTcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgc3RhcnQgPSA0OwogICAgIH0KLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEgLSBzdGFydCkgLyAyLCBjLT5jX2FyZW5hKTsKLSAgICBpZiAoIXNlcSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChpID0gc3RhcnQsIGogPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIsICsraikgewotICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIGkpKTsKLSAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgIHZhbHVlc19jb3VudCA9IChOQ0gobikgKyAxIC0gc3RhcnQpIC8gMjsKKyAgICBpZiAodmFsdWVzX2NvdW50KSB7CisgICAgICAgIHNlcSA9IGFzZGxfc2VxX25ldyh2YWx1ZXNfY291bnQsIGMtPmNfYXJlbmEpOworICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc2RsX3NlcV9TRVQoc2VxLCBqLCBleHByZXNzaW9uKTsKKyAgICAgICAgZm9yIChpID0gc3RhcnQsIGogPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIsICsraikgeworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKSk7CisgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc2VxLCBqLCBleHByZXNzaW9uKTsKKyAgICAgICAgfQogICAgIH0KICAgICBubCA9IChUWVBFKENISUxEKG4sIE5DSChuKSAtIDEpKSA9PSBDT01NQSkgPyBmYWxzZSA6IHRydWU7CiAgICAgcmV0dXJuIFByaW50KGRlc3QsIHNlcSwgbmwsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKQEAgLTIyMzgsNyArMjMyNCw3IEBACiBhc3RfZm9yX2RlbF9zdG10KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7CiAgICAgYXNkbF9zZXEgKmV4cHJfbGlzdDsKLSAgICAKKwogICAgIC8qIGRlbF9zdG10OiAnZGVsJyBleHBybGlzdCAqLwogICAgIFJFUShuLCBkZWxfc3RtdCk7CiAKQEAgLTIzMjIsNyArMjQwOCw3IEBACiAgICAgICAgICAgICAgICAgZXhwcjMgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDUpKTsKICAgICAgICAgICAgICAgICBpZiAoIWV4cHIzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICByZXR1cm4gUmFpc2UoZXhwcjEsIGV4cHIyLCBleHByMywgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQpAQCAtMjMzNyw3ICsyNDIzLDcgQEAKIH0KIAogc3RhdGljIGFsaWFzX3R5Ci1hbGlhc19mb3JfaW1wb3J0X25hbWUoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK2FsaWFzX2Zvcl9pbXBvcnRfbmFtZShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBpbnQgc3RvcmUpCiB7CiAgICAgLyoKICAgICAgIGltcG9ydF9hc19uYW1lOiBOQU1FIFsnYXMnIE5BTUVdCkBAIC0yMzQ4LDI4ICsyNDM0LDQwIEBACiAKICBsb29wOgogICAgIHN3aXRjaCAoVFlQRShuKSkgewotICAgICAgICBjYXNlIGltcG9ydF9hc19uYW1lOgorICAgICAgICAgY2FzZSBpbXBvcnRfYXNfbmFtZTogeworICAgICAgICAgICAgbm9kZSAqbmFtZV9ub2RlID0gQ0hJTEQobiwgMCk7CiAgICAgICAgICAgICBzdHIgPSBOVUxMOwogICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgc3RyID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMikpOworICAgICAgICAgICAgICAgIG5vZGUgKnN0cl9ub2RlID0gQ0hJTEQobiwgMik7CisgICAgICAgICAgICAgICAgaWYgKHN0b3JlICYmICFmb3JiaWRkZW5fY2hlY2soYywgc3RyX25vZGUsIFNUUihzdHJfbm9kZSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBzdHIgPSBORVdfSURFTlRJRklFUihzdHJfbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIDApKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghZm9yYmlkZGVuX2NoZWNrKGMsIG5hbWVfbm9kZSwgU1RSKG5hbWVfbm9kZSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWUgPSBORVdfSURFTlRJRklFUihuYW1lX25vZGUpOwogICAgICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKG5hbWUsIHN0ciwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBkb3R0ZWRfYXNfbmFtZToKICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMSkgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhbGlhc190eSBhID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIDApKTsKKyAgICAgICAgICAgICAgICBub2RlICphc25hbWVfbm9kZSA9IENISUxEKG4sIDIpOworICAgICAgICAgICAgICAgIGFsaWFzX3R5IGEgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgMCksIDApOwogICAgICAgICAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KCFhLT5hc25hbWUpOwotICAgICAgICAgICAgICAgIGEtPmFzbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIDIpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZvcmJpZGRlbl9jaGVjayhjLCBhc25hbWVfbm9kZSwgU1RSKGFzbmFtZV9ub2RlKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGEtPmFzbmFtZSA9IE5FV19JREVOVElGSUVSKGFzbmFtZV9ub2RlKTsKICAgICAgICAgICAgICAgICBpZiAoIWEtPmFzbmFtZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CkBAIC0yMzc3LDcgKzI0NzUsMTAgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGRvdHRlZF9uYW1lOgogICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIDApKTsKKyAgICAgICAgICAgICAgICBub2RlICpuYW1lX25vZGUgPSBDSElMRChuLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RvcmUgJiYgIWZvcmJpZGRlbl9jaGVjayhjLCBuYW1lX25vZGUsIFNUUihuYW1lX25vZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKG5hbWVfbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMobmFtZSwgTlVMTCwgYy0+Y19hcmVuYSk7CkBAIC0yNDUxLDcgKzI1NTIsNyBAQAogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7Ci0gICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaSkpOworICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpLCAxKTsKICAgICAgICAgICAgIGlmICghaW1wb3J0X2FsaWFzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFsaWFzZXMsIGkgLyAyLCBpbXBvcnRfYWxpYXMpOwpAQCAtMjQ2MiwxMyArMjU2MywxNSBAQAogICAgICAgICBpbnQgbl9jaGlsZHJlbjsKICAgICAgICAgaW50IGlkeCwgbmRvdHMgPSAwOwogICAgICAgICBhbGlhc190eSBtb2QgPSBOVUxMOwotICAgICAgICBpZGVudGlmaWVyIG1vZG5hbWU7Ci0gICAgICAgIAorICAgICAgICBpZGVudGlmaWVyIG1vZG5hbWUgPSBOVUxMOworCiAgICAgICAgLyogQ291bnQgdGhlIG51bWJlciBvZiBkb3RzIChmb3IgcmVsYXRpdmUgaW1wb3J0cykgYW5kIGNoZWNrIGZvciB0aGUKICAgICAgICAgICBvcHRpb25hbCBtb2R1bGUgbmFtZSAqLwogICAgICAgICBmb3IgKGlkeCA9IDE7IGlkeCA8IE5DSChuKTsgaWR4KyspIHsKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIGlkeCkpID09IGRvdHRlZF9uYW1lKSB7Ci0gICAgICAgICAgICAgICAgbW9kID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGlkeCkpOworICAgICAgICAgICAgICAgIG1vZCA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpZHgpLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1vZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaWR4Kys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgaWR4KSkgIT0gRE9UKSB7CkBAIC0yNTA5LDE0ICsyNjEyLDE0IEBACiAKICAgICAgICAgLyogaGFuZGxlICJmcm9tIC4uLiBpbXBvcnQgKiIgc3BlY2lhbCBiL2MgdGhlcmUncyBubyBjaGlsZHJlbiAqLwogICAgICAgICBpZiAoVFlQRShuKSA9PSBTVEFSKSB7Ci0gICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgbik7CisgICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgbiwgMSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydF9hbGlhcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYWxpYXNlcywgMCwgaW1wb3J0X2FsaWFzKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpKSk7CisgICAgICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpLCAxKTsKICAgICAgICAgICAgICAgICBpZiAoIWltcG9ydF9hbGlhcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCBpIC8gMiwgaW1wb3J0X2FsaWFzKTsKQEAgLTI1MjQsOCArMjYyNyw2IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1vZCAhPSBOVUxMKQogICAgICAgICAgICAgbW9kbmFtZSA9IG1vZC0+bmFtZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbW9kbmFtZSA9IG5ld19pZGVudGlmaWVyKCIiLCBjLT5jX2FyZW5hKTsKICAgICAgICAgcmV0dXJuIEltcG9ydEZyb20obW9kbmFtZSwgYWxpYXNlcywgbmRvdHMsIGxpbmVubywgY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSk7CiAgICAgfQpAQCAtMjYwOSw3ICsyNzEwLDcgQEAKICAgICAgICAgZXhwcjIgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMykpOwogICAgICAgICBpZiAoIWV4cHIyKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gQXNzZXJ0KGV4cHIxLCBleHByMiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0yNjM2LDcgKzI3MzcsNyBAQAogICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBzaW1wbGVfc3RtdCkgewogICAgICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgICAgIC8qIHNpbXBsZV9zdG10IGFsd2F5cyBlbmRzIHdpdGggYSBORVdMSU5FLAotICAgICAgICAgICBhbmQgbWF5IGhhdmUgYSB0cmFpbGluZyBTRU1JIAorICAgICAgICAgICBhbmQgbWF5IGhhdmUgYSB0cmFpbGluZyBTRU1JCiAgICAgICAgICovCiAgICAgICAgIGVuZCA9IE5DSChuKSAtIDE7CiAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIGVuZCAtIDEpKSA9PSBTRU1JKQpAQCAtMjcwMSwxMCArMjgwMiwxMCBAQAogICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDEpKTsKICAgICAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHN1aXRlX3NlcSA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgMykpOyAKKyAgICAgICAgc3VpdGVfc2VxID0gYXN0X2Zvcl9zdWl0ZShjLCBDSElMRChuLCAzKSk7CiAgICAgICAgIGlmICghc3VpdGVfc2VxKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gSWYoZXhwcmVzc2lvbiwgc3VpdGVfc2VxLCBOVUxMLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOwogICAgIH0KQEAgLTI3NjIsOCArMjg2Myw4IEBACiAgICAgICAgICAgICBpZiAoIXN1aXRlX3NlcTIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGFzZGxfc2VxX1NFVChvcmVsc2UsIDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgIElmKGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgc3VpdGVfc2VxMiwgCisgICAgICAgICAgICBhc2RsX3NlcV9TRVQob3JlbHNlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIElmKGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgc3VpdGVfc2VxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8oQ0hJTEQobiwgTkNIKG4pIC0gNikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENISUxEKG4sIE5DSChuKSAtIDYpLT5uX2NvbF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19hcmVuYSkpOwpAQCAtMjc4NCw3ICsyODg1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICAgICAgYXNkbF9zZXFfU0VUKG5ld29iaiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBJZihleHByZXNzaW9uLCBzdWl0ZV9zZXEsIG9yZWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYoZXhwcmVzc2lvbiwgc3VpdGVfc2VxLCBvcmVsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKENISUxEKG4sIG9mZikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENISUxEKG4sIG9mZiktPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSkpOwogICAgICAgICAgICAgb3JlbHNlID0gbmV3b2JqOwpAQCAtMjg1Miw3ICsyOTUzLDcgQEAKIHsKICAgICBhc2RsX3NlcSAqX3RhcmdldCwgKnNlcSA9IE5VTEwsICpzdWl0ZV9zZXE7CiAgICAgZXhwcl90eSBleHByZXNzaW9uOwotICAgIGV4cHJfdHkgdGFyZ2V0OworICAgIGV4cHJfdHkgdGFyZ2V0LCBmaXJzdDsKICAgICBjb25zdCBub2RlICpub2RlX3RhcmdldDsKICAgICAvKiBmb3Jfc3RtdDogJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0bGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdICovCiAgICAgUkVRKG4sIGZvcl9zdG10KTsKQEAgLTI4NjksMTAgKzI5NzAsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQ2hlY2sgdGhlICMgb2YgY2hpbGRyZW4gcmF0aGVyIHRoYW4gdGhlIGxlbmd0aCBvZiBfdGFyZ2V0LCBzaW5jZQogICAgICAgIGZvciB4LCBpbiAuLi4gaGFzIDEgZWxlbWVudCBpbiBfdGFyZ2V0LCBidXQgc3RpbGwgcmVxdWlyZXMgYSBUdXBsZS4gKi8KKyAgICBmaXJzdCA9IChleHByX3R5KWFzZGxfc2VxX0dFVChfdGFyZ2V0LCAwKTsKICAgICBpZiAoTkNIKG5vZGVfdGFyZ2V0KSA9PSAxKQotICAgICAgICB0YXJnZXQgPSAoZXhwcl90eSlhc2RsX3NlcV9HRVQoX3RhcmdldCwgMCk7CisgICAgICAgIHRhcmdldCA9IGZpcnN0OwogICAgIGVsc2UKLSAgICAgICAgdGFyZ2V0ID0gVHVwbGUoX3RhcmdldCwgU3RvcmUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgdGFyZ2V0ID0gVHVwbGUoX3RhcmdldCwgU3RvcmUsIGZpcnN0LT5saW5lbm8sIGZpcnN0LT5jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIAogICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX3Rlc3RsaXN0KGMsIENISUxEKG4sIDMpKTsKICAgICBpZiAoIWV4cHJlc3Npb24pCkBAIC0yOTgyLDcgKzMwODQsNyBAQAogICAgICAgICBhc3RfZXJyb3IobiwgIm1hbGZvcm1lZCAndHJ5JyBzdGF0ZW1lbnQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG5fZXhjZXB0ID4gMCkgewogICAgICAgICBpbnQgaTsKICAgICAgICAgc3RtdF90eSBleGNlcHRfc3Q7CkBAIC0zMDE3LDI3ICszMTE5LDE4IEBACiAgICAgcmV0dXJuIFRyeUZpbmFsbHkoYm9keSwgZmluYWxseSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogfQogCi1zdGF0aWMgZXhwcl90eQotYXN0X2Zvcl93aXRoX3ZhcihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQotewotICAgIFJFUShuLCB3aXRoX3Zhcik7Ci0gICAgcmV0dXJuIGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAxKSk7Ci19Ci0KLS8qIHdpdGhfc3RtdDogJ3dpdGgnIHRlc3QgWyB3aXRoX3ZhciBdICc6JyBzdWl0ZSAqLworLyogd2l0aF9pdGVtOiB0ZXN0IFsnYXMnIGV4cHJdICovCiBzdGF0aWMgc3RtdF90eQotYXN0X2Zvcl93aXRoX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK2FzdF9mb3Jfd2l0aF9pdGVtKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGFzZGxfc2VxICpjb250ZW50KQogewogICAgIGV4cHJfdHkgY29udGV4dF9leHByLCBvcHRpb25hbF92YXJzID0gTlVMTDsKLSAgICBpbnQgc3VpdGVfaW5kZXggPSAzOyAgICAvKiBza2lwICd3aXRoJywgdGVzdCwgYW5kICc6JyAqLwotICAgIGFzZGxfc2VxICpzdWl0ZV9zZXE7CiAKLSAgICBhc3NlcnQoVFlQRShuKSA9PSB3aXRoX3N0bXQpOwotICAgIGNvbnRleHRfZXhwciA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAxKSk7CisgICAgUkVRKG4sIHdpdGhfaXRlbSk7CisgICAgY29udGV4dF9leHByID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKICAgICBpZiAoIWNvbnRleHRfZXhwcikKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFRZUEUoQ0hJTEQobiwgMikpID09IHdpdGhfdmFyKSB7Ci0gICAgICAgIG9wdGlvbmFsX3ZhcnMgPSBhc3RfZm9yX3dpdGhfdmFyKGMsIENISUxEKG4sIDIpKTsKKyAgICBpZiAoTkNIKG4pID09IDMpIHsKKyAgICAgICAgb3B0aW9uYWxfdmFycyA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CiAKICAgICAgICAgaWYgKCFvcHRpb25hbF92YXJzKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMwNDUsMjQgKzMxMzgsNTQgQEAKICAgICAgICAgaWYgKCFzZXRfY29udGV4dChjLCBvcHRpb25hbF92YXJzLCBTdG9yZSwgbikpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHN1aXRlX2luZGV4ID0gNDsKICAgICB9CiAKLSAgICBzdWl0ZV9zZXEgPSBhc3RfZm9yX3N1aXRlKGMsIENISUxEKG4sIHN1aXRlX2luZGV4KSk7Ci0gICAgaWYgKCFzdWl0ZV9zZXEpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBXaXRoKGNvbnRleHRfZXhwciwgb3B0aW9uYWxfdmFycywgc3VpdGVfc2VxLCBMSU5FTk8obiksIAorICAgIHJldHVybiBXaXRoKGNvbnRleHRfZXhwciwgb3B0aW9uYWxfdmFycywgY29udGVudCwgTElORU5PKG4pLAogICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiB9CiAKKy8qIHdpdGhfc3RtdDogJ3dpdGgnIHdpdGhfaXRlbSAoJywnIHdpdGhfaXRlbSkqICc6JyBzdWl0ZSAqLworc3RhdGljIHN0bXRfdHkKK2FzdF9mb3Jfd2l0aF9zdG10KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCit7CisgICAgaW50IGk7CisgICAgc3RtdF90eSByZXQ7CisgICAgYXNkbF9zZXEgKmlubmVyOworCisgICAgUkVRKG4sIHdpdGhfc3RtdCk7CisKKyAgICAvKiBwcm9jZXNzIHRoZSB3aXRoIGl0ZW1zIGluc2lkZS1vdXQgKi8KKyAgICBpID0gTkNIKG4pIC0gMTsKKyAgICAvKiB0aGUgc3VpdGUgb2YgdGhlIGlubmVybW9zdCB3aXRoIGl0ZW0gaXMgdGhlIHN1aXRlIG9mIHRoZSB3aXRoIHN0bXQgKi8KKyAgICBpbm5lciA9IGFzdF9mb3Jfc3VpdGUoYywgQ0hJTEQobiwgaSkpOworICAgIGlmICghaW5uZXIpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yICg7OykgeworICAgICAgICBpIC09IDI7CisgICAgICAgIHJldCA9IGFzdF9mb3Jfd2l0aF9pdGVtKGMsIENISUxEKG4sIGkpLCBpbm5lcik7CisgICAgICAgIGlmICghcmV0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIHdhcyB0aGlzIHRoZSBsYXN0IGl0ZW0/ICovCisgICAgICAgIGlmIChpID09IDEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogaWYgbm90LCB3cmFwIHRoZSByZXN1bHQgc28gZmFyIGluIGEgbmV3IHNlcXVlbmNlICovCisgICAgICAgIGlubmVyID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICBpZiAoIWlubmVyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGFzZGxfc2VxX1NFVChpbm5lciwgMCwgcmV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RtdF90eQogYXN0X2Zvcl9jbGFzc2RlZihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBhc2RsX3NlcSAqZGVjb3JhdG9yX3NlcSkKIHsKICAgICAvKiBjbGFzc2RlZjogJ2NsYXNzJyBOQU1FIFsnKCcgdGVzdGxpc3QgJyknXSAnOicgc3VpdGUgKi8KICAgICBQeU9iamVjdCAqY2xhc3NuYW1lOwogICAgIGFzZGxfc2VxICpiYXNlcywgKnM7Ci0gICAgCisKICAgICBSRVEobiwgY2xhc3NkZWYpOwogCiAgICAgaWYgKCFmb3JiaWRkZW5fY2hlY2soYywgbiwgU1RSKENISUxEKG4sIDEpKSkpCkBAIC0zMTE3LDcgKzMyNDAsNiBAQAogICAgICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgfQogICAgIGlmIChUWVBFKG4pID09IHNtYWxsX3N0bXQpIHsKLSAgICAgICAgUkVRKG4sIHNtYWxsX3N0bXQpOwogICAgICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgICAgIC8qIHNtYWxsX3N0bXQ6IGV4cHJfc3RtdCB8IHByaW50X3N0bXQgIHwgZGVsX3N0bXQgfCBwYXNzX3N0bXQKICAgICAgICAgICAgICAgICAgICAgIHwgZmxvd19zdG10IHwgaW1wb3J0X3N0bXQgfCBnbG9iYWxfc3RtdCB8IGV4ZWNfc3RtdApAQCAtMzIxMCwxNyArMzMzMiwxNyBAQAogI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICAgICAgaWYgKGltZmxhZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXgucmVhbCA9IDAuOwotICAgICAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImF0b2YiLCByZXR1cm4gMCkKLSAgICAgICAgICAgICAgICBjb21wbGV4LmltYWcgPSBQeU9TX2FzY2lpX2F0b2Yocyk7Ci0gICAgICAgICAgICAgICAgUHlGUEVfRU5EX1BST1RFQ1QoY29tcGxleCkKKyAgICAgICAgICAgICAgICBjb21wbGV4LmltYWcgPSBQeU9TX3N0cmluZ190b19kb3VibGUocywgKGNoYXIgKiopJmVuZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXguaW1hZyA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjb21wbGV4KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImF0b2YiLCByZXR1cm4gMCkKLSAgICAgICAgICAgICAgICBkeCA9IFB5T1NfYXNjaWlfYXRvZihzKTsKLSAgICAgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChkeCkKKyAgICAgICAgICAgICAgICBkeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoZHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShkeCk7CiAgICAgICAgIH0KIH0KQEAgLTMyNTEsMTcgKzMzNzMsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdW5pY29kZShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuLCBpbnQgcmF3bW9kZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCiB7Ci0gICAgICAgIFB5T2JqZWN0ICp2LCAqdTsKKyAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgIFB5T2JqZWN0ICp1ID0gTlVMTDsKICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICBjaGFyICpwOwogICAgICAgICBjb25zdCBjaGFyICplbmQ7Ci0gICAgICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYnVmID0gKGNoYXIgKilzOwotICAgICAgICAgICAgICAgIHUgPSBOVUxMOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChlbmNvZGluZywgImlzby04ODU5LTEiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYnVmID0gKGNoYXIgKilzOwotICAgICAgICAgICAgICAgIHUgPSBOVUxMOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZW5jb2RpbmcgIT0gTlVMTCAmJiBzdHJjbXAoZW5jb2RpbmcsICJpc28tODg1OS0xIikpIHsKICAgICAgICAgICAgICAgICAvKiBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdyAqLwogICAgICAgICAgICAgICAgIGlmIChsZW4gPiBQWV9TSVpFX01BWCAvIDYpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzNTEsNyArMzQ2OCw3IEBACiAgICAgICAgIHMrKzsKICAgICAgICAgbGVuID0gc3RybGVuKHMpOwogICAgICAgICBpZiAobGVuID4gSU5UX01BWCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyB0byBwYXJzZSBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IDU3ZDlkZjguLjc2NGFlODcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgImV2YWwuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4gLyogZm9yIERCTF9NQU5UX0RJRyBhbmQgZnJpZW5kcyAqLwogCiAjaWZkZWYgUklTQ09TCiAjaW5jbHVkZSAidW5peHN0dWZmLmgiCkBAIC0xNDg5LDcgKzE0OTAsNyBAQAogIm9wZW4obmFtZVssIG1vZGVbLCBidWZmZXJpbmddXSkgLT4gZmlsZSBvYmplY3RcblwKIFxuXAogT3BlbiBhIGZpbGUgdXNpbmcgdGhlIGZpbGUoKSB0eXBlLCByZXR1cm5zIGEgZmlsZSBvYmplY3QuICBUaGlzIGlzIHRoZVxuXAotcHJlZmVycmVkIHdheSB0byBvcGVuIGEgZmlsZS4iKTsKK3ByZWZlcnJlZCB3YXkgdG8gb3BlbiBhIGZpbGUuICBTZWUgZmlsZS5fX2RvY19fIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNzk2LDcgKzE3OTcsNyBAQAogICAgIFB5T2JqZWN0ICpjdXJudW0gPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2ID0gTlVMTDsKICAgICBsb25nIGJpZ247Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIGludCBjbXBfcmVzdWx0OwogCiAgICAgUHlPYmplY3QgKnplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CkBAIC0xODY0LDcgKzE4NjUsNyBAQAogICAgICAgICBQeV9ERUNSRUYobmVnX3N0ZXApOwogICAgIH0KIAotICAgIG4gPSAoaW50KWJpZ247CisgICAgbiA9IChQeV9zc2l6ZV90KWJpZ247CiAgICAgaWYgKGJpZ24gPCAwIHx8IChsb25nKW4gIT0gYmlnbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5nZSgpIHJlc3VsdCBoYXMgdG9vIG1hbnkgaXRlbXMiKTsKQEAgLTE5NDQsNyArMTk0NSw3IEBACiB7CiAgICAgbG9uZyBpbG93ID0gMCwgaWhpZ2ggPSAwLCBpc3RlcCA9IDE7CiAgICAgbG9uZyBiaWduOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIFB5T2JqZWN0ICp2OwogCkBAIC0xOTczLDcgKzE5NzQsNyBAQAogICAgICAgICBiaWduID0gZ2V0X2xlbl9vZl9yYW5nZShpbG93LCBpaGlnaCwgaXN0ZXApOwogICAgIGVsc2UKICAgICAgICAgYmlnbiA9IGdldF9sZW5fb2ZfcmFuZ2UoaWhpZ2gsIGlsb3csIC1pc3RlcCk7Ci0gICAgbiA9IChpbnQpYmlnbjsKKyAgICBuID0gKFB5X3NzaXplX3QpYmlnbjsKICAgICBpZiAoYmlnbiA8IDAgfHwgKGxvbmcpbiAhPSBiaWduKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInJhbmdlKCkgcmVzdWx0IGhhcyB0b28gbWFueSBpdGVtcyIpOwpAQCAtMjE1MSwzNiArMjE1Miw0NyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fcm91bmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBkb3VibGUgbnVtYmVyLCBhYnNfbnVtYmVyLCBhYnNfcmVzdWx0OwotICAgIGRvdWJsZSBmOwotICAgIGludCBuZGlnaXRzID0gMDsKLSAgICBpbnQgaTsKKyAgICBkb3VibGUgeDsKKyAgICBQeU9iamVjdCAqb19uZGlnaXRzID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG5kaWdpdHM7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJudW1iZXIiLCAibmRpZ2l0cyIsIDB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImR8aTpyb3VuZCIsCi0gICAgICAgIGt3bGlzdCwgJm51bWJlciwgJm5kaWdpdHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJkfE86cm91bmQiLAorICAgICAgICBrd2xpc3QsICZ4LCAmb19uZGlnaXRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZiA9IDEuMDsKLSAgICBpID0gYWJzKG5kaWdpdHMpOwotICAgIHdoaWxlICAoLS1pID49IDApCi0gICAgICAgIGYgPSBmKjEwLjA7Ci0gICAgaWYgKG5kaWdpdHMgPCAwKQotICAgICAgICBudW1iZXIgLz0gZjsKLSAgICBlbHNlCi0gICAgICAgIG51bWJlciAqPSBmOwogCi0gICAgLyogcm91bmQgYG51bWJlcmAgdG8gbmVhcmVzdCBpbnRlZ2VyLCByb3VuZGluZyBoYWx2ZXMgYXdheSBmcm9tIHplcm8gKi8KLSAgICBhYnNfbnVtYmVyID0gZmFicyhudW1iZXIpOwotICAgIGFic19yZXN1bHQgPSBmbG9vcihhYnNfbnVtYmVyKTsKLSAgICBpZiAoYWJzX251bWJlciAtIGFic19yZXN1bHQgPj0gMC41KQotICAgICAgICBhYnNfcmVzdWx0ICs9IDEuMDsKLSAgICBudW1iZXIgPSBjb3B5c2lnbihhYnNfcmVzdWx0LCBudW1iZXIpOworICAgIGlmIChvX25kaWdpdHMgPT0gTlVMTCkgeworICAgICAgICAvKiBzZWNvbmQgYXJndW1lbnQgZGVmYXVsdHMgdG8gMCAqLworICAgICAgICBuZGlnaXRzID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIGludGVycHJldCAybmQgYXJndW1lbnQgYXMgYSBQeV9zc2l6ZV90OyBjbGlwIG9uIG92ZXJmbG93ICovCisgICAgICAgIG5kaWdpdHMgPSBQeU51bWJlcl9Bc1NzaXplX3Qob19uZGlnaXRzLCBOVUxMKTsKKyAgICAgICAgaWYgKG5kaWdpdHMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGlmIChuZGlnaXRzIDwgMCkKLSAgICAgICAgbnVtYmVyICo9IGY7CisgICAgLyogbmFucywgaW5maW5pdGllcyBhbmQgemVyb3Mgcm91bmQgdG8gdGhlbXNlbHZlcyAqLworICAgIGlmICghUHlfSVNfRklOSVRFKHgpIHx8IHggPT0gMC4wKQorICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOworCisgICAgLyogRGVhbCB3aXRoIGV4dHJlbWUgdmFsdWVzIGZvciBuZGlnaXRzLiBGb3IgbmRpZ2l0cyA+IE5ESUdJVFNfTUFYLCB4CisgICAgICAgYWx3YXlzIHJvdW5kcyB0byBpdHNlbGYuICBGb3IgbmRpZ2l0cyA8IE5ESUdJVFNfTUlOLCB4IGFsd2F5cworICAgICAgIHJvdW5kcyB0byArLTAuMC4gIEhlcmUgMC4zMDEwMyBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMikuICovCisjZGVmaW5lIE5ESUdJVFNfTUFYICgoaW50KSgoREJMX01BTlRfRElHLURCTF9NSU5fRVhQKSAqIDAuMzAxMDMpKQorI2RlZmluZSBORElHSVRTX01JTiAoLShpbnQpKChEQkxfTUFYX0VYUCArIDEpICogMC4zMDEwMykpCisgICAgaWYgKG5kaWdpdHMgPiBORElHSVRTX01BWCkKKyAgICAgICAgLyogcmV0dXJuIHggKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKyAgICBlbHNlIGlmIChuZGlnaXRzIDwgTkRJR0lUU19NSU4pCisgICAgICAgIC8qIHJldHVybiAwLjAsIGJ1dCB3aXRoIHNpZ24gb2YgeCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKDAuMCp4KTsKICAgICBlbHNlCi0gICAgICAgIG51bWJlciAvPSBmOwotICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobnVtYmVyKTsKKyAgICAgICAgLyogZmluaXRlIHgsIGFuZCBuZGlnaXRzIGlzIG5vdCB1bnJlYXNvbmFibHkgbGFyZ2UgKi8KKyAgICAgICAgLyogX1B5X2RvdWJsZV9yb3VuZCBpcyBkZWZpbmVkIGluIGZsb2F0b2JqZWN0LmMgKi8KKyAgICAgICAgcmV0dXJuIF9QeV9kb3VibGVfcm91bmQoeCwgKGludCluZGlnaXRzKTsKKyN1bmRlZiBORElHSVRTX01BWAorI3VuZGVmIE5ESUdJVFNfTUlOCiB9CiAKIFB5RG9jX1NUUlZBUihyb3VuZF9kb2MsCkBAIC0yMzg4LDYgKzI0MDAsMTUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIC8qIEl0J3MgdGVtcHRpbmcgdG8gdXNlIFB5TnVtYmVyX0luUGxhY2VBZGQgaW5zdGVhZCBvZgorICAgICAgICAgICBQeU51bWJlcl9BZGQgaGVyZSwgdG8gYXZvaWQgcXVhZHJhdGljIHJ1bm5pbmcgdGltZQorICAgICAgICAgICB3aGVuIGRvaW5nICdzdW0obGlzdF9vZl9saXN0cywgW10pJy4gIEhvd2V2ZXIsIHRoaXMKKyAgICAgICAgICAgd291bGQgcHJvZHVjZSBhIGNoYW5nZSBpbiBiZWhhdmlvdXI6IGEgc25pcHBldCBsaWtlCisKKyAgICAgICAgICAgICBlbXB0eSA9IFtdCisgICAgICAgICAgICAgc3VtKFtbeF0gZm9yIHggaW4gcmFuZ2UoMTApXSwgZW1wdHkpCisKKyAgICAgICAgICAgd291bGQgY2hhbmdlIHRoZSB2YWx1ZSBvZiBlbXB0eS4gKi8KICAgICAgICAgdGVtcCA9IFB5TnVtYmVyX0FkZChyZXN1bHQsIGl0ZW0pOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwpAQCAtMjQ3Nyw4ICsyNDk4LDEwIEBACiAgICAgbGVuID0gLTE7ICAgICAgICAgICAvKiB1bmtub3duICovCiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zaXplOyArK2kpIHsKICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkpOwotICAgICAgICBQeV9zc2l6ZV90IHRoaXNsZW4gPSBfUHlPYmplY3RfTGVuZ3RoSGludChpdGVtLCAtMSk7CisgICAgICAgIFB5X3NzaXplX3QgdGhpc2xlbiA9IF9QeU9iamVjdF9MZW5ndGhIaW50KGl0ZW0sIC0yKTsKICAgICAgICAgaWYgKHRoaXNsZW4gPCAwKSB7CisgICAgICAgICAgICBpZiAodGhpc2xlbiA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGxlbiA9IC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2NjQsNyArMjY4Nyw3IEBACiAgICAgU0VUQlVJTFRJTigiVHJ1ZSIsICAgICAgICAgICAgICAgICAgUHlfVHJ1ZSk7CiAgICAgU0VUQlVJTFRJTigiYmFzZXN0cmluZyIsICAgICAgICAgICAgJlB5QmFzZVN0cmluZ19UeXBlKTsKICAgICBTRVRCVUlMVElOKCJib29sIiwgICAgICAgICAgICAgICAgICAmUHlCb29sX1R5cGUpOwotICAgIC8qICAgICAgICAgIFNFVEJVSUxUSU4oIm1lbW9yeXZpZXciLCAgICAgICAgJlB5TWVtb3J5Vmlld19UeXBlKTsgKi8KKyAgICBTRVRCVUlMVElOKCJtZW1vcnl2aWV3IiwgICAgICAgICZQeU1lbW9yeVZpZXdfVHlwZSk7CiAgICAgU0VUQlVJTFRJTigiYnl0ZWFycmF5IiwgICAgICAgICAgICAgJlB5Qnl0ZUFycmF5X1R5cGUpOwogICAgIFNFVEJVSUxUSU4oImJ5dGVzIiwgICAgICAgICAgICAgICAgICZQeVN0cmluZ19UeXBlKTsKICAgICBTRVRCVUlMVElOKCJidWZmZXIiLCAgICAgICAgICAgICAgICAmUHlCdWZmZXJfVHlwZSk7CmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IDFlNDRiMWMuLjRjNmMwZWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0yNywxMCArMjcsMTEgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0OwogCi0jaWYgZGVmaW5lZChfX3BwY19fKSAvKiA8LSBEb24ndCBrbm93IGlmIHRoaXMgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sOyB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIHNob3VsZCB3b3JrIGZvciBHQ0Mgb24gYW55IFBvd2VyUEMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBpcnJlc3BlY3RpdmUgb2YgT1MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQT1dFUj8gIFdobyBrbm93cyA6LSkgKi8KKy8qIFBvd2VyUEMgc3VwcHBvcnQuCisgICAiX19wcGNfXyIgYXBwZWFycyB0byBiZSB0aGUgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gdG8gZGV0ZWN0IG9uIE9TIFgsIHdoZXJlYXMKKyAgICJfX3Bvd2VycGNfXyIgYXBwZWFycyB0byBiZSB0aGUgY29ycmVjdCBvbmUgZm9yIExpbnV4IHdpdGggR0NDCisqLworI2lmIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZCAoX19wb3dlcnBjX18pCiAKICNkZWZpbmUgUkVBRF9USU1FU1RBTVAodmFyKSBwcGNfZ2V0Y291bnRlcigmdmFyKQogCkBAIC0xNDYsNiArMTQ3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqIHN0cmluZ19jb25jYXRlbmF0ZShQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKiwgdW5zaWduZWQgY2hhciAqKTsKIHN0YXRpYyBQeU9iamVjdCAqIGt3ZF9hc19zdHJpbmcoUHlPYmplY3QgKik7CitzdGF0aWMgUHlPYmplY3QgKiBzcGVjaWFsX2xvb2t1cChQeU9iamVjdCAqLCBjaGFyICosIFB5T2JqZWN0ICoqKTsKIAogI2RlZmluZSBOQU1FX0VSUk9SX01TRyBcCiAgICAgIm5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCkBAIC0yMzIsNiArMjM0LDcgQEAKICNpbmNsdWRlICJweXRocmVhZC5oIgogCiBzdGF0aWMgUHlUaHJlYWRfdHlwZV9sb2NrIGludGVycHJldGVyX2xvY2sgPSAwOyAvKiBUaGlzIGlzIHRoZSBHSUwgKi8KK3N0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgcGVuZGluZ19sb2NrID0gMDsgLyogZm9yIHBlbmRpbmcgY2FsbHMgKi8KIHN0YXRpYyBsb25nIG1haW5fdGhyZWFkID0gMDsKIAogaW50CkBAIC0zMDMsNiArMzA2LDcgQEAKICAgICAgIGFkZGluZyBhIG5ldyBmdW5jdGlvbiB0byBlYWNoIHRocmVhZF8qLmguICBJbnN0ZWFkLCBqdXN0CiAgICAgICBjcmVhdGUgYSBuZXcgbG9jayBhbmQgd2FzdGUgYSBsaXR0bGUgYml0IG9mIG1lbW9yeSAqLwogICAgIGludGVycHJldGVyX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgcGVuZGluZ19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbnRlcnByZXRlcl9sb2NrLCAxKTsKICAgICBtYWluX3RocmVhZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKIApAQCAtMzc1LDE5ICszNzksMTQ1IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgIEFueSB0aHJlYWQgY2FuIHNjaGVkdWxlIHBlbmRpbmcgY2FsbHMsIGJ1dCBvbmx5IHRoZSBtYWluIHRocmVhZAogICAgd2lsbCBleGVjdXRlIHRoZW0uCisgICBUaGVyZSBpcyBubyBmYWNpbGl0eSB0byBzY2hlZHVsZSBjYWxscyB0byBhIHBhcnRpY3VsYXIgdGhyZWFkLCBidXQKKyAgIHRoYXQgc2hvdWxkIGJlIGVhc3kgdG8gY2hhbmdlLCBzaG91bGQgdGhhdCBldmVyIGJlIHJlcXVpcmVkLiAgSW4KKyAgIHRoYXQgY2FzZSwgdGhlIHN0YXRpYyB2YXJpYWJsZXMgaGVyZSBzaG91bGQgZ28gaW50byB0aGUgcHl0aG9uCisgICB0aHJlYWRzdGF0ZS4KICNlbmRpZgorKi8KIAotICAgWFhYIFdBUk5JTkchICBBU1lOQ0hST05PVVNMWSBFWEVDVVRJTkcgQ09ERSEKKyNpZmRlZiBXSVRIX1RIUkVBRAorCisvKiBUaGUgV0lUSF9USFJFQUQgaW1wbGVtZW50YXRpb24gaXMgdGhyZWFkLXNhZmUuICBJdCBhbGxvd3MKKyAgIHNjaGVkdWxpbmcgdG8gYmUgbWFkZSBmcm9tIGFueSB0aHJlYWQsIGFuZCBldmVuIGZyb20gYW4gZXhlY3V0aW5nCisgICBjYWxsYmFjay4KKyAqLworCisjZGVmaW5lIE5QRU5ESU5HQ0FMTFMgMzIKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGludCAoKmZ1bmMpKHZvaWQgKik7CisgICAgdm9pZCAqYXJnOworfSBwZW5kaW5nY2FsbHNbTlBFTkRJTkdDQUxMU107CitzdGF0aWMgaW50IHBlbmRpbmdmaXJzdCA9IDA7CitzdGF0aWMgaW50IHBlbmRpbmdsYXN0ID0gMDsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgcGVuZGluZ2NhbGxzX3RvX2RvID0gMTsgLyogdHJpZ2dlciBpbml0aWFsaXphdGlvbiBvZiBsb2NrICovCitzdGF0aWMgY2hhciBwZW5kaW5nYnVzeSA9IDA7CisKK2ludAorUHlfQWRkUGVuZGluZ0NhbGwoaW50ICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQoreworICAgIGludCBpLCBqLCByZXN1bHQ9MDsKKyAgICBQeVRocmVhZF90eXBlX2xvY2sgbG9jayA9IHBlbmRpbmdfbG9jazsKKworICAgIC8qIHRyeSBhIGZldyB0aW1lcyBmb3IgdGhlIGxvY2suICBTaW5jZSB0aGlzIG1lY2hhbmlzbSBpcyB1c2VkCisgICAgICogZm9yIHNpZ25hbCBoYW5kbGluZyAob24gdGhlIG1haW4gdGhyZWFkKSwgdGhlcmUgaXMgYSAoc2xpbSkKKyAgICAgKiBjaGFuY2UgdGhhdCBhIHNpZ25hbCBpcyBkZWxpdmVyZWQgb24gdGhlIHNhbWUgdGhyZWFkIHdoaWxlIHdlCisgICAgICogaG9sZCB0aGUgbG9jayBkdXJpbmcgdGhlIFB5X01ha2VQZW5kaW5nQ2FsbHMoKSBmdW5jdGlvbi4KKyAgICAgKiBUaGlzIGF2b2lkcyBhIGRlYWRsb2NrIGluIHRoYXQgY2FzZS4KKyAgICAgKiBOb3RlIHRoYXQgc2lnbmFscyBjYW4gYmUgZGVsaXZlcmVkIG9uIGFueSB0aHJlYWQuICBJbiBwYXJ0aWN1bGFyLAorICAgICAqIG9uIFdpbmRvd3MsIGEgU0lHSU5UIGlzIGRlbGl2ZXJlZCBvbiBhIHN5c3RlbS1jcmVhdGVkIHdvcmtlcgorICAgICAqIHRocmVhZC4KKyAgICAgKiBXZSBhbHNvIGNoZWNrIGZvciBsb2NrIGJlaW5nIE5VTEwsIGluIHRoZSB1bmxpa2VseSBjYXNlIHRoYXQKKyAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgYW55IGJ5dGVjb2RlIGV2YWx1YXRpb24gdGFrZXMgcGxhY2UuCisgICAgICovCisgICAgaWYgKGxvY2sgIT0gTlVMTCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpPDEwMDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGxvY2ssIE5PV0FJVF9MT0NLKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAxMDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaSA9IHBlbmRpbmdsYXN0OworICAgIGogPSAoaSArIDEpICUgTlBFTkRJTkdDQUxMUzsKKyAgICBpZiAoaiA9PSBwZW5kaW5nZmlyc3QpIHsKKyAgICAgICAgcmVzdWx0ID0gLTE7IC8qIFF1ZXVlIGZ1bGwgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBwZW5kaW5nY2FsbHNbaV0uZnVuYyA9IGZ1bmM7CisgICAgICAgIHBlbmRpbmdjYWxsc1tpXS5hcmcgPSBhcmc7CisgICAgICAgIHBlbmRpbmdsYXN0ID0gajsKKyAgICB9CisgICAgLyogc2lnbmFsIG1haW4gbG9vcCAqLworICAgIF9QeV9UaWNrZXIgPSAwOworICAgIHBlbmRpbmdjYWxsc190b19kbyA9IDE7CisgICAgaWYgKGxvY2sgIT0gTlVMTCkKKyAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGxvY2spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludAorUHlfTWFrZVBlbmRpbmdDYWxscyh2b2lkKQoreworICAgIGludCBpOworICAgIGludCByID0gMDsKKworICAgIGlmICghcGVuZGluZ19sb2NrKSB7CisgICAgICAgIC8qIGluaXRpYWwgYWxsb2NhdGlvbiBvZiB0aGUgbG9jayAqLworICAgICAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgICAgIGlmIChwZW5kaW5nX2xvY2sgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBvbmx5IHNlcnZpY2UgcGVuZGluZyBjYWxscyBvbiBtYWluIHRocmVhZCAqLworICAgIGlmIChtYWluX3RocmVhZCAmJiBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpCisgICAgICAgIHJldHVybiAwOworICAgIC8qIGRvbid0IHBlcmZvcm0gcmVjdXJzaXZlIHBlbmRpbmcgY2FsbHMgKi8KKyAgICBpZiAocGVuZGluZ2J1c3kpCisgICAgICAgIHJldHVybiAwOworICAgIHBlbmRpbmdidXN5ID0gMTsKKyAgICAvKiBwZXJmb3JtIGEgYm91bmRlZCBudW1iZXIgb2YgY2FsbHMsIGluIGNhc2Ugb2YgcmVjdXJzaW9uICovCisgICAgZm9yIChpPTA7IGk8TlBFTkRJTkdDQUxMUzsgaSsrKSB7CisgICAgICAgIGludCBqOworICAgICAgICBpbnQgKCpmdW5jKSh2b2lkICopOworICAgICAgICB2b2lkICphcmcgPSBOVUxMOworCisgICAgICAgIC8qIHBvcCBvbmUgaXRlbSBvZmYgdGhlIHF1ZXVlIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgKi8KKyAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHBlbmRpbmdfbG9jaywgV0FJVF9MT0NLKTsKKyAgICAgICAgaiA9IHBlbmRpbmdmaXJzdDsKKyAgICAgICAgaWYgKGogPT0gcGVuZGluZ2xhc3QpIHsKKyAgICAgICAgICAgIGZ1bmMgPSBOVUxMOyAvKiBRdWV1ZSBlbXB0eSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnVuYyA9IHBlbmRpbmdjYWxsc1tqXS5mdW5jOworICAgICAgICAgICAgYXJnID0gcGVuZGluZ2NhbGxzW2pdLmFyZzsKKyAgICAgICAgICAgIHBlbmRpbmdmaXJzdCA9IChqICsgMSkgJSBOUEVORElOR0NBTExTOworICAgICAgICB9CisgICAgICAgIHBlbmRpbmdjYWxsc190b19kbyA9IHBlbmRpbmdmaXJzdCAhPSBwZW5kaW5nbGFzdDsKKyAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHBlbmRpbmdfbG9jayk7CisgICAgICAgIC8qIGhhdmluZyByZWxlYXNlZCB0aGUgbG9jaywgcGVyZm9ybSB0aGUgY2FsbGJhY2sgKi8KKyAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByID0gZnVuYyhhcmcpOworICAgICAgICBpZiAocikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBwZW5kaW5nYnVzeSA9IDA7CisgICAgcmV0dXJuIHI7Cit9CisKKyNlbHNlIC8qIGlmICEgZGVmaW5lZCBXSVRIX1RIUkVBRCAqLworCisvKgorICAgV0FSTklORyEgIEFTWU5DSFJPTk9VU0xZIEVYRUNVVElORyBDT0RFIQorICAgVGhpcyBjb2RlIGlzIHVzZWQgZm9yIHNpZ25hbCBoYW5kbGluZyBpbiBweXRob24gdGhhdCBpc24ndCBidWlsdAorICAgd2l0aCBXSVRIX1RIUkVBRC4KKyAgIERvbid0IHVzZSB0aGlzIGltcGxlbWVudGF0aW9uIHdoZW4gUHlfQWRkUGVuZGluZ0NhbGxzKCkgY2FuIGhhcHBlbgorICAgb24gYSBkaWZmZXJlbnQgdGhyZWFkIQorCiAgICBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uczoKLSAgICgxKSBuZXN0ZWQgYXN5bmNocm9ub3VzIHJlZ2lzdHJ5IGNhbGxzOwotICAgKDIpIHJlZ2lzdHJ5IGNhbGxzIG1hZGUgd2hpbGUgcGVuZGluZyBjYWxscyBhcmUgYmVpbmcgcHJvY2Vzc2VkLgotICAgV2hpbGUgKDEpIGlzIHZlcnkgdW5saWtlbHksICgyKSBpcyBhIHJlYWwgcG9zc2liaWxpdHkuCisgICAoMSkgbmVzdGVkIGFzeW5jaHJvbm91cyBjYWxscyB0byBQeV9BZGRQZW5kaW5nQ2FsbCgpCisgICAoMikgQWRkUGVuZGluZ0NhbGwoKSBjYWxscyBtYWRlIHdoaWxlIHBlbmRpbmcgY2FsbHMgYXJlIGJlaW5nIHByb2Nlc3NlZC4KKworICAgKDEpIGlzIHZlcnkgdW5saWtlbHkgYmVjYXVzZSB0eXBpY2FsbHkgc2lnbmFsIGRlbGl2ZXJ5CisgICBpcyBibG9ja2VkIGR1cmluZyBzaWduYWwgaGFuZGxpbmcuICBTbyBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZS4KKyAgICgyKSBpcyBhIHJlYWwgcG9zc2liaWxpdHkuCiAgICBUaGUgY3VycmVudCBjb2RlIGlzIHNhZmUgYWdhaW5zdCAoMiksIGJ1dCBub3QgYWdhaW5zdCAoMSkuCiAgICBUaGUgc2FmZXR5IGFnYWluc3QgKDIpIGlzIGRlcml2ZWQgZnJvbSB0aGUgZmFjdCB0aGF0IG9ubHkgb25lCi0gICB0aHJlYWQgKHRoZSBtYWluIHRocmVhZCkgZXZlciB0YWtlcyB0aGluZ3Mgb3V0IG9mIHRoZSBxdWV1ZS4KLQotICAgWFhYIERhcm4hICBXaXRoIHRoZSBhZHZlbnQgb2YgdGhyZWFkIHN0YXRlLCB3ZSBzaG91bGQgaGF2ZSBhbiBhcnJheQotICAgb2YgcGVuZGluZyBjYWxscyBwZXIgdGhyZWFkIGluIHRoZSB0aHJlYWQgc3RhdGUhICBMYXRlci4uLgorICAgdGhyZWFkIGlzIHByZXNlbnQsIGludGVycnVwdGVkIGJ5IHNpZ25hbHMsIGFuZCB0aGF0IHRoZSBjcml0aWNhbAorICAgc2VjdGlvbiBpcyBwcm90ZWN0ZWQgd2l0aCB0aGUgImJ1c3kiIHZhcmlhYmxlLiAgT24gV2luZG93cywgd2hpY2gKKyAgIGRlbGl2ZXJzIFNJR0lOVCBvbiBhIHN5c3RlbSB0aHJlYWQsIHRoaXMgZG9lcyBub3QgaG9sZCBhbmQgdGhlcmVmb3JlCisgICBXaW5kb3dzIHJlYWxseSBzaG91bGRuJ3QgdXNlIHRoaXMgdmVyc2lvbi4KKyAgIFRoZSB0d28gdGhyZWFkcyBjb3VsZCB0aGVvcmV0aWNhbGx5IHdpZ2dsZSBhcm91bmQgdGhlICJidXN5IiB2YXJpYWJsZS4KICovCiAKICNkZWZpbmUgTlBFTkRJTkdDQUxMUyAzMgpAQCAtMzk3LDcgKzUyNyw3IEBACiB9IHBlbmRpbmdjYWxsc1tOUEVORElOR0NBTExTXTsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgcGVuZGluZ2ZpcnN0ID0gMDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgcGVuZGluZ2xhc3QgPSAwOwotc3RhdGljIHZvbGF0aWxlIGludCB0aGluZ3NfdG9fZG8gPSAwOworc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nY2FsbHNfdG9fZG8gPSAwOwogCiBpbnQKIFB5X0FkZFBlbmRpbmdDYWxsKGludCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKQEAgLTQwNSw4ICs1MzUsNiBAQAogICAgIHN0YXRpYyB2b2xhdGlsZSBpbnQgYnVzeSA9IDA7CiAgICAgaW50IGksIGo7CiAgICAgLyogWFhYIEJlZ2luIGNyaXRpY2FsIHNlY3Rpb24gKi8KLSAgICAvKiBYWFggSWYgeW91IHdhbnQgdGhpcyB0byBiZSBzYWZlIGFnYWluc3QgbmVzdGVkCi0gICAgICAgWFhYIGFzeW5jaHJvbm91cyBjYWxscywgeW91J2xsIGhhdmUgdG8gd29yayBoYXJkZXIhICovCiAgICAgaWYgKGJ1c3kpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBidXN5ID0gMTsKQEAgLTQyMSw3ICs1NDksNyBAQAogICAgIHBlbmRpbmdsYXN0ID0gajsKIAogICAgIF9QeV9UaWNrZXIgPSAwOwotICAgIHRoaW5nc190b19kbyA9IDE7IC8qIFNpZ25hbCBtYWluIGxvb3AgKi8KKyAgICBwZW5kaW5nY2FsbHNfdG9fZG8gPSAxOyAvKiBTaWduYWwgbWFpbiBsb29wICovCiAgICAgYnVzeSA9IDA7CiAgICAgLyogWFhYIEVuZCBjcml0aWNhbCBzZWN0aW9uICovCiAgICAgcmV0dXJuIDA7CkBAIC00MzEsMTQgKzU1OSwxMCBAQAogUHlfTWFrZVBlbmRpbmdDYWxscyh2b2lkKQogewogICAgIHN0YXRpYyBpbnQgYnVzeSA9IDA7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICBpZiAobWFpbl90aHJlYWQgJiYgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpICE9IG1haW5fdGhyZWFkKQotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZgogICAgIGlmIChidXN5KQogICAgICAgICByZXR1cm4gMDsKICAgICBidXN5ID0gMTsKLSAgICB0aGluZ3NfdG9fZG8gPSAwOworICAgIHBlbmRpbmdjYWxsc190b19kbyA9IDA7CiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgaTsKICAgICAgICAgaW50ICgqZnVuYykodm9pZCAqKTsKQEAgLTQ1MSw3ICs1NzUsNyBAQAogICAgICAgICBwZW5kaW5nZmlyc3QgPSAoaSArIDEpICUgTlBFTkRJTkdDQUxMUzsKICAgICAgICAgaWYgKGZ1bmMoYXJnKSA8IDApIHsKICAgICAgICAgICAgIGJ1c3kgPSAwOwotICAgICAgICAgICAgdGhpbmdzX3RvX2RvID0gMTsgLyogV2UncmUgbm90IGRvbmUgeWV0ICovCisgICAgICAgICAgICBwZW5kaW5nY2FsbHNfdG9fZG8gPSAxOyAvKiBXZSdyZSBub3QgZG9uZSB5ZXQgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ1OSw2ICs1ODMsOCBAQAogICAgIHJldHVybiAwOwogfQogCisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKwogCiAvKiBUaGUgaW50ZXJwcmV0ZXIncyByZWN1cnNpb24gbGltaXQgKi8KIApAQCAtNTMzLDcgKzY1OSw3IEBACiAvKiBmb3IgbWFuaXB1bGF0aW5nIHRoZSB0aHJlYWQgc3dpdGNoIGFuZCBwZXJpb2RpYyAic3R1ZmYiIC0gdXNlZCB0byBiZQogICAgcGVyIHRocmVhZCwgbm93IGp1c3QgYSBwYWlyIG8nIGdsb2JhbHMgKi8KIGludCBfUHlfQ2hlY2tJbnRlcnZhbCA9IDEwMDsKLXZvbGF0aWxlIGludCBfUHlfVGlja2VyID0gMTAwOwordm9sYXRpbGUgaW50IF9QeV9UaWNrZXIgPSAwOyAvKiBzbyB0aGF0IHdlIGhpdCBhICJ0aWNrIiBmaXJzdCB0aGluZyAqLwogCiBQeU9iamVjdCAqCiBQeUV2YWxfRXZhbENvZGUoUHlDb2RlT2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCkBAIC02NTgsOCArNzg0LDggQEAKIC8qIE9wQ29kZSBwcmVkaWN0aW9uIG1hY3JvcwogICAgIFNvbWUgb3Bjb2RlcyB0ZW5kIHRvIGNvbWUgaW4gcGFpcnMgdGh1cyBtYWtpbmcgaXQgcG9zc2libGUgdG8KICAgICBwcmVkaWN0IHRoZSBzZWNvbmQgY29kZSB3aGVuIHRoZSBmaXJzdCBpcyBydW4uICBGb3IgZXhhbXBsZSwKLSAgICBDT01QQVJFX09QIGlzIG9mdGVuIGZvbGxvd2VkIGJ5IEpVTVBfSUZfRkFMU0Ugb3IgSlVNUF9JRl9UUlVFLiAgQW5kLAotICAgIHRob3NlIG9wY29kZXMgYXJlIG9mdGVuIGZvbGxvd2VkIGJ5IGEgUE9QX1RPUC4KKyAgICBHRVRfSVRFUiBpcyBvZnRlbiBmb2xsb3dlZCBieSBGT1JfSVRFUi4gQW5kIEZPUl9JVEVSIGlzIG9mdGVuCisgICAgZm9sbG93ZWQgYnkgU1RPUkVfRkFTVCBvciBVTlBBQ0tfU0VRVUVOQ0UuCiAKICAgICBWZXJpZnlpbmcgdGhlIHByZWRpY3Rpb24gY29zdHMgYSBzaW5nbGUgaGlnaC1zcGVlZCB0ZXN0IG9mIGEgcmVnaXN0ZXIKICAgICB2YXJpYWJsZSBhZ2FpbnN0IGEgY29uc3RhbnQuICBJZiB0aGUgcGFpcmluZyB3YXMgZ29vZCwgdGhlbiB0aGUKQEAgLTY5NiwxMCArODIyLDEyIEBACiAjZGVmaW5lIFNFQ09ORCgpICAgICAgICAgIChzdGFja19wb2ludGVyWy0yXSkKICNkZWZpbmUgVEhJUkQoKSAgICAgICAgICAgKHN0YWNrX3BvaW50ZXJbLTNdKQogI2RlZmluZSBGT1VSVEgoKSAgICAgICAgICAoc3RhY2tfcG9pbnRlclstNF0pCisjZGVmaW5lIFBFRUsobikgICAgICAgICAgIChzdGFja19wb2ludGVyWy0obildKQogI2RlZmluZSBTRVRfVE9QKHYpICAgICAgICAoc3RhY2tfcG9pbnRlclstMV0gPSAodikpCiAjZGVmaW5lIFNFVF9TRUNPTkQodikgICAgIChzdGFja19wb2ludGVyWy0yXSA9ICh2KSkKICNkZWZpbmUgU0VUX1RISVJEKHYpICAgICAgKHN0YWNrX3BvaW50ZXJbLTNdID0gKHYpKQogI2RlZmluZSBTRVRfRk9VUlRIKHYpICAgICAoc3RhY2tfcG9pbnRlclstNF0gPSAodikpCisjZGVmaW5lIFNFVF9WQUxVRShuLCB2KSAgIChzdGFja19wb2ludGVyWy0obildID0gKHYpKQogI2RlZmluZSBCQVNJQ19TVEFDS0FESihuKSAoc3RhY2tfcG9pbnRlciArPSBuKQogI2RlZmluZSBCQVNJQ19QVVNIKHYpICAgICAoKnN0YWNrX3BvaW50ZXIrKyA9ICh2KSkKICNkZWZpbmUgQkFTSUNfUE9QKCkgICAgICAgKCotLXN0YWNrX3BvaW50ZXIpCkBAIC04NTEsNyArOTc5LDcgQEAKICAgICAgICAgLyogRG8gcGVyaW9kaWMgdGhpbmdzLiAgRG9pbmcgdGhpcyBldmVyeSB0aW1lIHRocm91Z2gKICAgICAgICAgICAgdGhlIGxvb3Agd291bGQgYWRkIHRvbyBtdWNoIG92ZXJoZWFkLCBzbyB3ZSBkbyBpdAogICAgICAgICAgICBvbmx5IGV2ZXJ5IE50aCBpbnN0cnVjdGlvbi4gIFdlIGFsc28gZG8gaXQgaWYKLSAgICAgICAgICAgYGB0aGluZ3NfdG9fZG8nJyBpcyBzZXQsIGkuZS4gd2hlbiBhbiBhc3luY2hyb25vdXMKKyAgICAgICAgICAgYGBwZW5kaW5nY2FsbHNfdG9fZG8nJyBpcyBzZXQsIGkuZS4gd2hlbiBhbiBhc3luY2hyb25vdXMKICAgICAgICAgICAgZXZlbnQgbmVlZHMgYXR0ZW50aW9uIChlLmcuIGEgc2lnbmFsIGhhbmRsZXIgb3IKICAgICAgICAgICAgYXN5bmMgSS9PIGhhbmRsZXIpOyBzZWUgUHlfQWRkUGVuZGluZ0NhbGwoKSBhbmQKICAgICAgICAgICAgUHlfTWFrZVBlbmRpbmdDYWxscygpIGFib3ZlLiAqLwpAQCAtODY3LDEyICs5OTUsMTIgQEAKICNpZmRlZiBXSVRIX1RTQwogICAgICAgICAgICAgdGlja2VkID0gMTsKICNlbmRpZgotICAgICAgICAgICAgaWYgKHRoaW5nc190b19kbykgeworICAgICAgICAgICAgaWYgKHBlbmRpbmdjYWxsc190b19kbykgewogICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGluZ3NfdG9fZG8pCisgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdjYWxsc190b19kbykKICAgICAgICAgICAgICAgICAgICAgLyogTWFrZVBlbmRpbmdDYWxscygpIGRpZG4ndCBzdWNjZWVkLgogICAgICAgICAgICAgICAgICAgICAgICBGb3JjZSBlYXJseSByZS1leGVjdXRpb24gb2YgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAicGVyaW9kaWMiIGNvZGUsIHBvc3NpYmx5IGFmdGVyCkBAIC0xMDA0LDcgKzExMzIsNiBAQAogICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHYpOwogICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogCi0gICAgICAgIFBSRURJQ1RFRChQT1BfVE9QKTsKICAgICAgICAgY2FzZSBQT1BfVE9QOgogICAgICAgICAgICAgdiA9IFBPUCgpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMTE3Nyw3ICsxMzA0LDEwIEBACiAgICAgICAgIGNhc2UgQklOQVJZX01PRFVMTzoKICAgICAgICAgICAgIHcgPSBQT1AoKTsKICAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9SZW1haW5kZXIodiwgdyk7CisgICAgICAgICAgICBpZiAoUHlTdHJpbmdfQ2hlY2tFeGFjdCh2KSkKKyAgICAgICAgICAgICAgICB4ID0gUHlTdHJpbmdfRm9ybWF0KHYsIHcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9SZW1haW5kZXIodiwgdyk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgICAgICBTRVRfVE9QKHgpOwpAQCAtMTMxNyw5ICsxNDQ3LDE5IEBACiAKICAgICAgICAgY2FzZSBMSVNUX0FQUEVORDoKICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKKyAgICAgICAgICAgIHYgPSBQRUVLKG9wYXJnKTsKICAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoZXJyID09IDApIHsKKyAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTRVRfQUREOgorICAgICAgICAgICAgdyA9IFBPUCgpOworICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKKyAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh2LCB3KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CkBAIC0xODQ4LDcgKzE5ODgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIG9wYXJnKSkgewotICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKz0gb3Bhcmc7CisgICAgICAgICAgICAgICAgU1RBQ0tBREoob3BhcmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiB1bnBhY2tfaXRlcmFibGUoKSByYWlzZWQgYW4gZXhjZXB0aW9uICovCiAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKQEAgLTIwNTgsNiArMjE5OCwyNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBCVUlMRF9TRVQ6CisgICAgICAgICAgICB4ID0gUHlTZXRfTmV3KE5VTEwpOworICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7CisgICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHgsIHcpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKwogICAgICAgICBjYXNlIEJVSUxEX01BUDoKICAgICAgICAgICAgIHggPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKICAgICAgICAgICAgIFBVU0goeCk7CkBAIC0yMDc2LDYgKzIyMzUsMjEgQEAKICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgY29udGludWU7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIE1BUF9BREQ6CisgICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KKyAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCisgICAgICAgICAgICBTVEFDS0FESigtMik7CisgICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLworICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCisgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoZXJyID09IDApIHsKKyAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBMT0FEX0FUVFI6CiAgICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwogICAgICAgICAgICAgdiA9IFRPUCgpOwpAQCAtMjExNiw4ICsyMjkwLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgICAgIFNFVF9UT1AoeCk7CiAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSBicmVhazsKLSAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9JRl9GQUxTRSk7Ci0gICAgICAgICAgICBQUkVESUNUKEpVTVBfSUZfVFJVRSk7CisgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX0ZBTFNFKTsKKyAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfVFJVRSk7CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBjYXNlIElNUE9SVF9OQU1FOgpAQCAtMjE5NCw0NCArMjM2OCw5NSBAQAogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKIAotICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoSlVNUF9JRl9GQUxTRSk7Ci0gICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRToKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKKyAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX0ZBTFNFKTsKKyAgICAgICAgY2FzZSBQT1BfSlVNUF9JRl9GQUxTRToKKyAgICAgICAgICAgIHcgPSBQT1AoKTsKICAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKFBPUF9UT1ApOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQotICAgICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhKVU1QX0lGX1RSVUUpOwotICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRToKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKKyAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX1RSVUUpOworICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX1RSVUU6CisgICAgICAgICAgICB3ID0gUE9QKCk7CiAgICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoUE9QX1RPUCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CisgICAgICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFX09SX1BPUDoKKyAgICAgICAgICAgIHcgPSBUT1AoKTsKKyAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBpZiAoZXJyID4gMCkgeworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQorICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRV9PUl9QT1A6CisgICAgICAgICAgICB3ID0gVE9QKCk7CisgICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CisgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQotICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjMxMyw2ICsyNTM4LDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqZXhpdCwgKmVudGVyOworICAgICAgICAgICAgdyA9IFRPUCgpOworICAgICAgICAgICAgeCA9IHNwZWNpYWxfbG9va3VwKHcsICJfX2V4aXRfXyIsICZleGl0KTsKKyAgICAgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFNFVF9UT1AoeCk7CisgICAgICAgICAgICB1ID0gc3BlY2lhbF9sb29rdXAodywgIl9fZW50ZXJfXyIsICZlbnRlcik7CisgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoIXUpIHsKKyAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHUsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogU2V0dXAgYSBmaW5hbGx5IGJsb2NrIChTRVRVUF9XSVRIIGFzIGEgYmxvY2sgaXMKKyAgICAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gU0VUVVBfRklOQUxMWSBleGNlcHQgaXQgbm9ybWFsaXplcworICAgICAgICAgICAgICAgdGhlIGV4Y2VwdGlvbikgYmVmb3JlIHB1c2hpbmcgdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgX19lbnRlcl9fIG9uIHRoZSBzdGFjay4gKi8KKyAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBTRVRVUF9XSVRILCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOworCisgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgewogICAgICAgICAgICAgLyogQXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgYXJlIDEtMyB2YWx1ZXMgaW5kaWNhdGluZwpAQCAtMjQ0NCw3ICsyNjk4LDYgQEAKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKnBmdW5jKTsKICAgICAgICAgICAgICAgICAqcGZ1bmMgPSBzZWxmOwogICAgICAgICAgICAgICAgIG5hKys7Ci0gICAgICAgICAgICAgICAgbisrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwpAQCAtMjU0NCw3ICsyNzk3LDcgQEAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJYWFggbGluZW5vOiAlZCwgb3Bjb2RlOiAlZFxuIiwKLSAgICAgICAgICAgICAgICBQeUNvZGVfQWRkcjJMaW5lKGYtPmZfY29kZSwgZi0+Zl9sYXN0aSksCisgICAgICAgICAgICAgICAgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpLAogICAgICAgICAgICAgICAgIG9wY29kZSk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJ1bmtub3duIG9wY29kZSIpOwogICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKQEAgLTI2MjIsMjAgKzI4NzUsMjAgQEAKIAogZmFzdF9ibG9ja19lbmQ6CiAgICAgICAgIHdoaWxlICh3aHkgIT0gV0hZX05PVCAmJiBmLT5mX2libG9jayA+IDApIHsKLSAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgLyogUGVlayBhdCB0aGUgY3VycmVudCBibG9jay4gKi8KKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSAmZi0+Zl9ibG9ja3N0YWNrW2YtPmZfaWJsb2NrIC0gMV07CiAKICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgPT0gU0VUVVBfTE9PUCAmJiB3aHkgPT0gV0hZX0NPTlRJTlVFKSB7Ci0gICAgICAgICAgICAgICAgLyogRm9yIGEgY29udGludWUgaW5zaWRlIGEgdHJ5IGJsb2NrLAotICAgICAgICAgICAgICAgICAgIGRvbid0IHBvcCB0aGUgYmxvY2sgZm9yIHRoZSBsb29wLiAqLwotICAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBiLT5iX3R5cGUsIGItPmJfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+Yl9sZXZlbCk7CiAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKICAgICAgICAgICAgICAgICBKVU1QVE8oUHlJbnRfQVNfTE9ORyhyZXR2YWwpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLyogTm93IHdlIGhhdmUgdG8gcG9wIHRoZSBibG9jay4gKi8KKyAgICAgICAgICAgIGYtPmZfaWJsb2NrLS07CisKICAgICAgICAgICAgIHdoaWxlIChTVEFDS19MRVZFTCgpID4gYi0+Yl9sZXZlbCkgewogICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsKICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHYpOwpAQCAtMjY0Nyw3ICsyOTAwLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgPT0gU0VUVVBfRklOQUxMWSB8fAogICAgICAgICAgICAgICAgIChiLT5iX3R5cGUgPT0gU0VUVVBfRVhDRVBUICYmCi0gICAgICAgICAgICAgICAgIHdoeSA9PSBXSFlfRVhDRVBUSU9OKSkgeworICAgICAgICAgICAgICAgICB3aHkgPT0gV0hZX0VYQ0VQVElPTikgfHwKKyAgICAgICAgICAgICAgICBiLT5iX3R5cGUgPT0gU0VUVVBfV0lUSCkgewogICAgICAgICAgICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikgewogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CkBAIC0yNjYwLDcgKzI5MTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBzbyBhIHByb2dyYW0gY2FuIGVtdWxhdGUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBtYWluIGxvb3AuICBEb24ndCBkbwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZvciAnZmluYWxseScuICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgPT0gU0VUVVBfRVhDRVBUKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgPT0gU0VUVVBfRVhDRVBUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBiLT5iX3R5cGUgPT0gU0VUVVBfV0lUSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGMsICZ2YWwsICZ0Yik7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfZXhjX2luZm8odHN0YXRlLApAQCAtMjgwMCwxMyArMzA1NSwxMiBAQAogICAgICAgICAgICAgaWYgKCEoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgJXMgJWQgIgotICAgICAgICAgICAgICAgICAgICAiJXNhcmd1bWVudCVzICglZCBnaXZlbikiLAorICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcoY28tPmNvX25hbWUpLAogICAgICAgICAgICAgICAgICAgICBkZWZjb3VudCA/ICJhdCBtb3N0IiA6ICJleGFjdGx5IiwKICAgICAgICAgICAgICAgICAgICAgY28tPmNvX2FyZ2NvdW50LAotICAgICAgICAgICAgICAgICAgICBrd2NvdW50ID8gIm5vbi1rZXl3b3JkICIgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgY28tPmNvX2FyZ2NvdW50ID09IDEgPyAiIiA6ICJzIiwKLSAgICAgICAgICAgICAgICAgICAgYXJnY291bnQpOworICAgICAgICAgICAgICAgICAgICBhcmdjb3VudCArIGt3Y291bnQpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBjby0+Y29fYXJnY291bnQ7CkBAIC0yODMyLDggKzMwODYsMTEgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXl3b3JkID0ga3dzWzIqaV07CiAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBrd3NbMippICsgMV07CiAgICAgICAgICAgICBpbnQgajsKLSAgICAgICAgICAgIGlmIChrZXl3b3JkID09IE5VTEwgfHwgIShQeVN0cmluZ19DaGVjayhrZXl3b3JkKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVjayhrZXl3b3JkKSkpIHsKKyAgICAgICAgICAgIGlmIChrZXl3b3JkID09IE5VTEwgfHwgIShQeVN0cmluZ19DaGVjayhrZXl3b3JkKQorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBQeVVuaWNvZGVfQ2hlY2soa2V5d29yZCkKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMoKSBrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiLAogICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSkpOwpAQCAtMjg0MSw3ICszMDk4LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIFNwZWVkIGhhY2s6IGRvIHJhdyBwb2ludGVyIGNvbXBhcmVzLiBBcyBuYW1lcyBhcmUKICAgICAgICAgICAgICAgIG5vcm1hbGx5IGludGVybmVkIHRoaXMgc2hvdWxkIGFsbW9zdCBhbHdheXMgaGl0LiAqLwotICAgICAgICAgICAgY29fdmFybmFtZXMgPSBQeVNlcXVlbmNlX0Zhc3RfSVRFTVMoY28tPmNvX3Zhcm5hbWVzKTsKKyAgICAgICAgICAgIGNvX3Zhcm5hbWVzID0gKChQeVR1cGxlT2JqZWN0ICopKGNvLT5jb192YXJuYW1lcykpLT5vYl9pdGVtOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvLT5jb19hcmdjb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5tID0gY29fdmFybmFtZXNbal07CiAgICAgICAgICAgICAgICAgaWYgKG5tID09IGtleXdvcmQpCkBAIC0yODU3LDI2ICszMTE0LDIxIEBACiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY21wIDwgMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ2hlY2sgZXJyb3JzIGZyb20gQ29tcGFyZSAqLwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgaWYgKGogPj0gY28tPmNvX2FyZ2NvdW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGt3ZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprd2Rfc3RyID0ga3dkX2FzX3N0cmluZyhrZXl3b3JkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGt3ZF9zdHIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudCAnJS40MDBzJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcoY28tPmNvX25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGt3ZF9zdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrd2Rfc3RyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBpZiAoa3dkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkX3N0ciA9IGt3ZF9hc19zdHJpbmcoa2V5d29yZCk7CisgICAgICAgICAgICAgICAgaWYgKGt3ZF9zdHIpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMoKSBnb3QgYW4gdW5leHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudCAnJS40MDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhrd2Rfc3RyKSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrd2Rfc3RyKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0oa3dkaWN0LCBrZXl3b3JkLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICAgICAgfQota3dfZm91bmQ6CisgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShrd2RpY3QsIGtleXdvcmQsIHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGt3X2ZvdW5kOgogICAgICAgICAgICAgaWYgKEdFVExPQ0FMKGopICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkX3N0ciA9IGt3ZF9hc19zdHJpbmcoa2V5d29yZCk7CiAgICAgICAgICAgICAgICAgaWYgKGt3ZF9zdHIpIHsKQEAgLTI4OTcsMTUgKzMxNDksMTggQEAKICAgICAgICAgICAgIGludCBtID0gY28tPmNvX2FyZ2NvdW50IC0gZGVmY291bnQ7CiAgICAgICAgICAgICBmb3IgKGkgPSBhcmdjb3VudDsgaSA8IG07IGkrKykgewogICAgICAgICAgICAgICAgIGlmIChHRVRMT0NBTChpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBqLCBnaXZlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjby0+Y29fYXJnY291bnQ7IGorKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHRVRMT0NBTChqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbisrOwogICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzICVzICVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIlc2FyZ3VtZW50JXMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGNvLT5jb19uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb3VudCkgPyAiYXQgbGVhc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImV4YWN0bHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgbSwga3djb3VudCA/ICJub24ta2V5d29yZCAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtID09IDEgPyAiIiA6ICJzIiwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtLCBtID09IDEgPyAiIiA6ICJzIiwgZ2l2ZW4pOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjkyMiwxNCArMzE3NywxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAoYXJnY291bnQgPiAwIHx8IGt3Y291bnQgPiAwKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCVkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcoY28tPmNvX25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ICsga3djb3VudCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KKyAgICBlbHNlIGlmIChhcmdjb3VudCA+IDAgfHwga3djb3VudCA+IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Bc1N0cmluZyhjby0+Y29fbmFtZSksCisgICAgICAgICAgICAgICAgICAgICBhcmdjb3VudCArIGt3Y291bnQpOworICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogICAgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHN0b3JhZ2UgZm9yIGNlbGwgdmFycywgYW5kIGNvcHkgZnJlZQogICAgICAgIHZhcnMgaW50byBmcmFtZS4gIFRoaXMgaXNuJ3QgdG9vIGVmZmljaWVudCByaWdodCBub3cuICovCkBAIC0zMDE1LDEzICszMjY4LDM3IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKK3NwZWNpYWxfbG9va3VwKFB5T2JqZWN0ICpvLCBjaGFyICptZXRoLCBQeU9iamVjdCAqKmNhY2hlKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaWYgKFB5SW5zdGFuY2VfQ2hlY2sobykpIHsKKyAgICAgICAgaWYgKCEqY2FjaGUpCisgICAgICAgICAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvLCBtZXRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0dldEF0dHIobywgKmNhY2hlKTsKKyAgICB9CisgICAgcmVzID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgbWV0aCwgY2FjaGUpOworICAgIGlmIChyZXMgPT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsICpjYWNoZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCiBrd2RfYXNfc3RyaW5nKFB5T2JqZWN0ICprd2QpIHsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgaWYgKFB5U3RyaW5nX0NoZWNrKGt3ZCkpIHsKKyNlbHNlCisgICAgICAgIGFzc2VydChQeVN0cmluZ19DaGVjayhrd2QpKTsKKyNlbmRpZgogICAgICAgICBQeV9JTkNSRUYoa3dkKTsKICAgICAgICAgcmV0dXJuIGt3ZDsKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyhrd2QsICJyZXBsYWNlIik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyhrd2QsICJyZXBsYWNlIik7CisjZW5kaWYKIH0KIAogCkBAIC0zNDI5LDMzICszNzA2LDMwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogU2VlIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdHJhY2luZyB3b3Jrcy4gKi8KIHN0YXRpYyBpbnQKIG1heWJlX2NhbGxfbGluZV90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSwgaW50ICppbnN0cl9sYiwgaW50ICppbnN0cl91YiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluc3RyX3ByZXYpCiB7CiAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaW50IGxpbmUgPSBmcmFtZS0+Zl9saW5lbm87CiAKICAgICAvKiBJZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBleGVjdXRlZCBpc24ndCBpbiB0aGUgY3VycmVudAotICAgICAgIGluc3RydWN0aW9uIHdpbmRvdywgcmVzZXQgdGhlIHdpbmRvdy4gIElmIHRoZSBsYXN0Ci0gICAgICAgaW5zdHJ1Y3Rpb24gaGFwcGVucyB0byBmYWxsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgb3IgaWYgaXQKLSAgICAgICByZXByZXNlbnRzIGEganVtcCBiYWNrd2FyZHMsIGNhbGwgdGhlIHRyYWNlIGZ1bmN0aW9uLgorICAgICAgIGluc3RydWN0aW9uIHdpbmRvdywgcmVzZXQgdGhlIHdpbmRvdy4KICAgICAqLwotICAgIGlmICgoZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfbGIgfHwgZnJhbWUtPmZfbGFzdGkgPj0gKmluc3RyX3ViKSkgewotICAgICAgICBpbnQgbGluZTsKKyAgICBpZiAoZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfbGIgfHwgZnJhbWUtPmZfbGFzdGkgPj0gKmluc3RyX3ViKSB7CiAgICAgICAgIFB5QWRkclBhaXIgYm91bmRzOwotCi0gICAgICAgIGxpbmUgPSBQeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKGZyYW1lLT5mX2NvZGUsIGZyYW1lLT5mX2xhc3RpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm91bmRzKTsKLSAgICAgICAgaWYgKGxpbmUgPj0gMCkgewotICAgICAgICAgICAgZnJhbWUtPmZfbGluZW5vID0gbGluZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9MSU5FLCBQeV9Ob25lKTsKLSAgICAgICAgfQorICAgICAgICBsaW5lID0gX1B5Q29kZV9DaGVja0xpbmVOdW1iZXIoZnJhbWUtPmZfY29kZSwgZnJhbWUtPmZfbGFzdGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm91bmRzKTsKICAgICAgICAgKmluc3RyX2xiID0gYm91bmRzLmFwX2xvd2VyOwogICAgICAgICAqaW5zdHJfdWIgPSBib3VuZHMuYXBfdXBwZXI7CiAgICAgfQotICAgIGVsc2UgaWYgKGZyYW1lLT5mX2xhc3RpIDw9ICppbnN0cl9wcmV2KSB7CisgICAgLyogSWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gZmFsbHMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSBvciBpZgorICAgICAgIGl0IHJlcHJlc2VudHMgYSBqdW1wIGJhY2t3YXJkcywgdXBkYXRlIHRoZSBmcmFtZSdzIGxpbmUKKyAgICAgICBudW1iZXIgYW5kIGNhbGwgdGhlIHRyYWNlIGZ1bmN0aW9uLiAqLworICAgIGlmIChmcmFtZS0+Zl9sYXN0aSA9PSAqaW5zdHJfbGIgfHwgZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfcHJldikgeworICAgICAgICBmcmFtZS0+Zl9saW5lbm8gPSBsaW5lOwogICAgICAgICByZXN1bHQgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7CiAgICAgfQogICAgICppbnN0cl9wcmV2ID0gZnJhbWUtPmZfbGFzdGk7CkBAIC0zNTc4LDE4ICszODUyLDcgQEAKIAogCiAvKiBFeHRlcm5hbCBpbnRlcmZhY2UgdG8gY2FsbCBhbnkgY2FsbGFibGUgb2JqZWN0LgotICAgVGhlIGFyZyBtdXN0IGJlIGEgdHVwbGUgb3IgTlVMTC4gKi8KLQotI3VuZGVmIFB5RXZhbF9DYWxsT2JqZWN0Ci0vKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogZXhwb3J0IHRoaXMgaW50ZXJmYWNlICovCi0KLVB5T2JqZWN0ICoKLVB5RXZhbF9DYWxsT2JqZWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIHJldHVybiBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyhmdW5jLCBhcmcsIChQeU9iamVjdCAqKU5VTEwpOwotfQotI2RlZmluZSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLGFyZykgXAotICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKGZ1bmMsIGFyZywgKFB5T2JqZWN0ICopTlVMTCkKKyAgIFRoZSBhcmcgbXVzdCBiZSBhIHR1cGxlIG9yIE5VTEwuICBUaGUga3cgbXVzdCBiZSBhIGRpY3Qgb3IgTlVMTC4gKi8KIAogUHlPYmplY3QgKgogUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKQEAgLTQ0MTcsNyArNDY4MCw5IEBACiAgICAgZWxzZSBpZiAobG9jYWxzID09IFB5X05vbmUpCiAgICAgICAgIGxvY2FscyA9IGdsb2JhbHM7CiAgICAgaWYgKCFQeVN0cmluZ19DaGVjayhwcm9nKSAmJgorI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhwcm9nKSAmJgorI2VuZGlmCiAgICAgICAgICFQeUNvZGVfQ2hlY2socHJvZykgJiYKICAgICAgICAgIVB5RmlsZV9DaGVjayhwcm9nKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggNjY1MDUwNC4uOTQ0MGNlYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC0zOSw2ICszOSwxMCBAQAogI2RlZmluZSBERUZBVUxUX0NPREVfU0laRSAxMjgKICNkZWZpbmUgREVGQVVMVF9MTk9UQUJfU0laRSAxNgogCisjZGVmaW5lIENPTVBfR0VORVhQICAgMAorI2RlZmluZSBDT01QX1NFVENPTVAgIDEKKyNkZWZpbmUgQ09NUF9ESUNUQ09NUCAyCisKIHN0cnVjdCBpbnN0ciB7CiAgICAgdW5zaWduZWQgaV9qYWJzIDogMTsKICAgICB1bnNpZ25lZCBpX2pyZWwgOiAxOwpAQCAtMTExLDcgKzExNSw2IEBACiAgICAgICAgbWVtYmVycywgeW91IGNhbiByZWFjaCBhbGwgZWFybHkgYWxsb2NhdGVkIGJsb2Nrcy4gKi8KICAgICBiYXNpY2Jsb2NrICp1X2Jsb2NrczsKICAgICBiYXNpY2Jsb2NrICp1X2N1cmJsb2NrOyAvKiBwb2ludGVyIHRvIGN1cnJlbnQgYmxvY2sgKi8KLSAgICBpbnQgdV90bXBuYW1lOyAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3IgbGlzdCBjb21wcyAqLwogCiAgICAgaW50IHVfbmZibG9ja3M7CiAgICAgc3RydWN0IGZibG9ja2luZm8gdV9mYmxvY2tbQ09fTUFYQkxPQ0tTXTsKQEAgLTE0MCw3ICsxNDMsNiBAQAogCiAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnU7IC8qIGNvbXBpbGVyIHN0YXRlIGZvciBjdXJyZW50IGJsb2NrICovCiAgICAgUHlPYmplY3QgKmNfc3RhY2s7ICAgICAgICAgICAvKiBQeXRob24gbGlzdCBob2xkaW5nIGNvbXBpbGVyX3VuaXQgcHRycyAqLwotICAgIGNoYXIgKmNfZW5jb2Rpbmc7ICAgICAgICAgICAgLyogc291cmNlIGVuY29kaW5nIChhIGJvcnJvd2VkIHJlZmVyZW5jZSkgKi8KICAgICBQeUFyZW5hICpjX2FyZW5hOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbWVtb3J5IGFsbG9jYXRpb24gYXJlbmEgKi8KIH07CiAKQEAgLTE3OSw2ICsxODEsOCBAQAogc3RhdGljIFB5Q29kZU9iamVjdCAqYXNzZW1ibGUoc3RydWN0IGNvbXBpbGVyICosIGludCBhZGROb25lKTsKIHN0YXRpYyBQeU9iamVjdCAqX19kb2NfXzsKIAorI2RlZmluZSBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCAiY29tcGlsZS5jIGNvbXBpbGVyIHVuaXQiCisKIFB5T2JqZWN0ICoKIF9QeV9NYW5nbGUoUHlPYmplY3QgKnByaXZhdGVvYmosIFB5T2JqZWN0ICppZGVudCkKIHsKQEAgLTI4Miw5ICsyODYsNiBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCi0gICAgLyogWFhYIGluaXRpYWxpemUgdG8gTlVMTCBmb3Igbm93LCBuZWVkIHRvIGhhbmRsZSAqLwotICAgIGMuY19lbmNvZGluZyA9IE5VTEw7Ci0KICAgICBjbyA9IGNvbXBpbGVyX21vZCgmYywgbW9kKTsKIAogIGZpbmFsbHk6CkBAIC00NzIsNyArNDczLDYgQEAKICAgICB9CiAKICAgICB1LT51X2Jsb2NrcyA9IE5VTEw7Ci0gICAgdS0+dV90bXBuYW1lID0gMDsKICAgICB1LT51X25mYmxvY2tzID0gMDsKICAgICB1LT51X2ZpcnN0bGluZW5vID0gbGluZW5vOwogICAgIHUtPnVfbGluZW5vID0gMDsKQEAgLTQ5MiwxMyArNDkyLDEzIEBACiAKICAgICAvKiBQdXNoIHRoZSBvbGQgY29tcGlsZXJfdW5pdCBvbiB0aGUgc3RhY2suICovCiAgICAgaWYgKGMtPnUpIHsKLSAgICAgICAgUHlPYmplY3QgKndyYXBwZXIgPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIoYy0+dSwgTlVMTCk7Ci0gICAgICAgIGlmICghd3JhcHBlciB8fCBQeUxpc3RfQXBwZW5kKGMtPmNfc3RhY2ssIHdyYXBwZXIpIDwgMCkgewotICAgICAgICAgICAgUHlfWERFQ1JFRih3cmFwcGVyKTsKKyAgICAgICAgUHlPYmplY3QgKmNhcHN1bGUgPSBQeUNhcHN1bGVfTmV3KGMtPnUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklULCBOVUxMKTsKKyAgICAgICAgaWYgKCFjYXBzdWxlIHx8IFB5TGlzdF9BcHBlbmQoYy0+Y19zdGFjaywgY2Fwc3VsZSkgPCAwKSB7CisgICAgICAgICAgICBQeV9YREVDUkVGKGNhcHN1bGUpOwogICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHdyYXBwZXIpOworICAgICAgICBQeV9ERUNSRUYoY2Fwc3VsZSk7CiAgICAgICAgIHUtPnVfcHJpdmF0ZSA9IGMtPnUtPnVfcHJpdmF0ZTsKICAgICAgICAgUHlfWElOQ1JFRih1LT51X3ByaXZhdGUpOwogICAgIH0KQEAgLTUxNSwxNSArNTE1LDE1IEBACiBjb21waWxlcl9leGl0X3Njb3BlKHN0cnVjdCBjb21waWxlciAqYykKIHsKICAgICBpbnQgbjsKLSAgICBQeU9iamVjdCAqd3JhcHBlcjsKKyAgICBQeU9iamVjdCAqY2Fwc3VsZTsKIAogICAgIGMtPmNfbmVzdGxldmVsLS07CiAgICAgY29tcGlsZXJfdW5pdF9mcmVlKGMtPnUpOwogICAgIC8qIFJlc3RvcmUgYy0+dSB0byB0aGUgcGFyZW50IHVuaXQuICovCiAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShjLT5jX3N0YWNrKSAtIDE7CiAgICAgaWYgKG4gPj0gMCkgewotICAgICAgICB3cmFwcGVyID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIG4pOwotICAgICAgICBjLT51ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDT2JqZWN0X0FzVm9pZFB0cih3cmFwcGVyKTsKKyAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBuKTsKKyAgICAgICAgYy0+dSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKICAgICAgICAgYXNzZXJ0KGMtPnUpOwogICAgICAgICAvKiB3ZSBhcmUgZGVsZXRpbmcgZnJvbSBhIGxpc3Qgc28gdGhpcyByZWFsbHkgc2hvdWxkbid0IGZhaWwgKi8KICAgICAgICAgaWYgKFB5U2VxdWVuY2VfRGVsSXRlbShjLT5jX3N0YWNrLCBuKSA8IDApCkBAIC01MzUsMTggKzUzNSw2IEBACiAKIH0KIAotLyogQWxsb2NhdGUgYSBuZXcgImFub255bW91cyIgbG9jYWwgdmFyaWFibGUuCi0gICBVc2VkIGJ5IGxpc3QgY29tcHJlaGVuc2lvbnMgYW5kIHdpdGggc3RhdGVtZW50cy4KLSovCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1jb21waWxlcl9uZXdfdG1wbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCi17Ci0gICAgY2hhciB0bXBuYW1lWzI1Nl07Ci0gICAgUHlPU19zbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICJfWyVkXSIsICsrYy0+dS0+dV90bXBuYW1lKTsKLSAgICByZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyh0bXBuYW1lKTsKLX0KLQogLyogQWxsb2NhdGUgYSBuZXcgYmxvY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuCiAgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCiAqLwpAQCAtNjkyLDcgKzY4MCwxMSBAQAogICAgICAgICBjYXNlIFVOQVJZX0lOVkVSVDoKICAgICAgICAgICAgIHJldHVybiAwOwogCisgICAgICAgIGNhc2UgU0VUX0FERDoKICAgICAgICAgY2FzZSBMSVNUX0FQUEVORDoKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBjYXNlIE1BUF9BREQ6CiAgICAgICAgICAgICByZXR1cm4gLTI7CiAKICAgICAgICAgY2FzZSBCSU5BUllfUE9XRVI6CkBAIC03MTAsMTMgKzcwMiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgIGNhc2UgU0xJQ0UrMDoKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgU0xJQ0UrMToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIFNMSUNFKzI6Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBTTElDRSszOgogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjYXNlIFNMSUNFKzI6CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgU0xJQ0UrMzoKKyAgICAgICAgICAgIHJldHVybiAtMjsKIAogICAgICAgICBjYXNlIFNUT1JFX1NMSUNFKzA6CiAgICAgICAgICAgICByZXR1cm4gLTI7CkBAIC03NzgsNiArNzcwLDggQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBCUkVBS19MT09QOgogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKKyAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCiAgICAgICAgIGNhc2UgTE9BRF9MT0NBTFM6CkBAIC03OTQsNyArNzg4LDggQEAKICAgICAgICAgY2FzZSBQT1BfQkxPQ0s6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBFTkRfRklOQUxMWToKLSAgICAgICAgICAgIHJldHVybiAtMTsgLyogb3IgLTIgb3IgLTMgaWYgZXhjZXB0aW9uIG9jY3VycmVkICovCisgICAgICAgICAgICByZXR1cm4gLTM7IC8qIG9yIC0xIG9yIC0yIGlmIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4vYnJlYWsvY29udGludWUgKi8KICAgICAgICAgY2FzZSBCVUlMRF9DTEFTUzoKICAgICAgICAgICAgIHJldHVybiAtMjsKIApAQCAtODA1LDcgKzgwMCw3IEBACiAgICAgICAgIGNhc2UgVU5QQUNLX1NFUVVFTkNFOgogICAgICAgICAgICAgcmV0dXJuIG9wYXJnLTE7CiAgICAgICAgIGNhc2UgRk9SX0lURVI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiBvciAtMSwgYXQgZW5kIG9mIGl0ZXJhdG9yICovCiAKICAgICAgICAgY2FzZSBTVE9SRV9BVFRSOgogICAgICAgICAgICAgcmV0dXJuIC0yOwpAQCAtODIzLDYgKzgxOCw3IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBCVUlMRF9UVVBMRToKICAgICAgICAgY2FzZSBCVUlMRF9MSVNUOgorICAgICAgICBjYXNlIEJVSUxEX1NFVDoKICAgICAgICAgICAgIHJldHVybiAxLW9wYXJnOwogICAgICAgICBjYXNlIEJVSUxEX01BUDoKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtODMxLDI2ICs4MjcsMjkgQEAKICAgICAgICAgY2FzZSBDT01QQVJFX09QOgogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIElNUE9SVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgSU1QT1JUX0ZST006CiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBjYXNlIEpVTVBfRk9SV0FSRDoKLSAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFOgotICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRToKKyAgICAgICAgY2FzZSBKVU1QX0lGX1RSVUVfT1JfUE9QOiAgLyogLTEgaWYganVtcCBub3QgdGFrZW4gKi8KKyAgICAgICAgY2FzZSBKVU1QX0lGX0ZBTFNFX09SX1BPUDogIC8qICAiIiAqLwogICAgICAgICBjYXNlIEpVTVBfQUJTT0xVVEU6CiAgICAgICAgICAgICByZXR1cm4gMDsKIAorICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX0ZBTFNFOgorICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX1RSVUU6CisgICAgICAgICAgICByZXR1cm4gLTE7CisKICAgICAgICAgY2FzZSBMT0FEX0dMT0JBTDoKICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGNhc2UgQ09OVElOVUVfTE9PUDoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIFNFVFVQX0xPT1A6Ci0gICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKLSAgICAgICAgICAgIHJldHVybiAzOyAvKiBhY3R1YWxseSBwdXNoZWQgYnkgYW4gZXhjZXB0aW9uICovCisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIExPQURfRkFTVDoKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtODc5LDcgKzg3OCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgIGNhc2UgTUFLRV9DTE9TVVJFOgotICAgICAgICAgICAgcmV0dXJuIC1vcGFyZzsKKyAgICAgICAgICAgIHJldHVybiAtb3BhcmctMTsKICAgICAgICAgY2FzZSBMT0FEX0NMT1NVUkU6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBMT0FEX0RFUkVGOgpAQCAtMTI0Niw3ICsxMjQ1LDcgQEAKICAgICAgICAgY2hhciBidWZbMzUwXTsKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLAogICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNjb3BlIGZvciAlLjEwMHMgaW4gJS4xMDBzKCVzKSBpbiAlc1xuIgotICAgICAgICAgICAgICAgICAgICAgICJzeW1ib2xzOiAlc1xubG9jYWxzOiAlc1xuZ2xvYmFsczogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0FTX1NUUklORyhjLT51LT51X25hbWUpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9zdGUtPnN0ZV9pZCksCkBAIC0xNDkxLDEyICsxNDkwLDEwIEBACiAgICAgaWYgKG5leHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgVklTSVQoYywgZXhwciwgZS0+di5JZkV4cC50ZXN0KTsKLSAgICBBRERPUF9KUkVMKGMsIEpVTVBfSUZfRkFMU0UsIG5leHQpOwotICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgIEFERE9QX0pBQlMoYywgUE9QX0pVTVBfSUZfRkFMU0UsIG5leHQpOwogICAgIFZJU0lUKGMsIGV4cHIsIGUtPnYuSWZFeHAuYm9keSk7CiAgICAgQURET1BfSlJFTChjLCBKVU1QX0ZPUldBUkQsIGVuZCk7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgbmV4dCk7Ci0gICAgQURET1AoYywgUE9QX1RPUCk7CiAgICAgVklTSVQoYywgZXhwciwgZS0+di5JZkV4cC5vcmVsc2UpOwogICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGVuZCk7CiAgICAgcmV0dXJuIDE7CkBAIC0xNTI0LDkgKzE1MjEsMTkgQEAKICAgICAvKiB1bnBhY2sgbmVzdGVkIGFyZ3VtZW50cyAqLwogICAgIGNvbXBpbGVyX2FyZ3VtZW50cyhjLCBhcmdzKTsKIAorICAgIC8qIE1ha2UgTm9uZSB0aGUgZmlyc3QgY29uc3RhbnQsIHNvIHRoZSBsYW1iZGEgY2FuJ3QgaGF2ZSBhCisgICAgICAgZG9jc3RyaW5nLiAqLworICAgIGlmIChjb21waWxlcl9hZGRfbyhjLCBjLT51LT51X2NvbnN0cywgUHlfTm9uZSkgPCAwKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIGMtPnUtPnVfYXJnY291bnQgPSBhc2RsX3NlcV9MRU4oYXJncy0+YXJncyk7CiAgICAgVklTSVRfSU5fU0NPUEUoYywgZXhwciwgZS0+di5MYW1iZGEuYm9keSk7Ci0gICAgQURET1BfSU5fU0NPUEUoYywgUkVUVVJOX1ZBTFVFKTsKKyAgICBpZiAoYy0+dS0+dV9zdGUtPnN0ZV9nZW5lcmF0b3IpIHsKKyAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUE9QX1RPUCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOworICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CiAgICAgaWYgKGNvID09IE5VTEwpCkBAIC0xNTg0LDkgKzE1OTEsNiBAQAogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBpZiAoZW5kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIG5leHQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7Ci0gICAgaWYgKG5leHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CiAKICAgICBjb25zdGFudCA9IGV4cHJfY29uc3RhbnQocy0+di5JZi50ZXN0KTsKICAgICAvKiBjb25zdGFudCA9IDA6ICJpZiAwIgpAQCAtMTU5OCwxNSArMTYwMiwyMSBAQAogICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgPT0gMSkgewogICAgICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5JZi5ib2R5KTsKICAgICB9IGVsc2UgeworICAgICAgICBpZiAocy0+di5JZi5vcmVsc2UpIHsKKyAgICAgICAgICAgIG5leHQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5leHQgPSBlbmQ7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuSWYudGVzdCk7Ci0gICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9GQUxTRSwgbmV4dCk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgICAgICBBRERPUF9KQUJTKGMsIFBPUF9KVU1QX0lGX0ZBTFNFLCBuZXh0KTsKICAgICAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuSWYuYm9keSk7CiAgICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9GT1JXQVJELCBlbmQpOwotICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBuZXh0KTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7Ci0gICAgICAgIGlmIChzLT52LklmLm9yZWxzZSkKKyAgICAgICAgaWYgKHMtPnYuSWYub3JlbHNlKSB7CisgICAgICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBuZXh0KTsKICAgICAgICAgICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LklmLm9yZWxzZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKICAgICByZXR1cm4gMTsKQEAgLTE2MjgsOSArMTYzOCw2IEBACiAgICAgVklTSVQoYywgZXhwciwgcy0+di5Gb3IuaXRlcik7CiAgICAgQURET1AoYywgR0VUX0lURVIpOwogICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIHN0YXJ0KTsKLSAgICAvKiBmb3IgZXhwcmVzc2lvbnMgbXVzdCBiZSB0cmFjZWQgb24gZWFjaCBpdGVyYXRpb24sCi0gICAgICAgc28gd2UgbmVlZCB0byBzZXQgYW4gZXh0cmEgbGluZSBudW1iZXIuICovCi0gICAgYy0+dS0+dV9saW5lbm9fc2V0ID0gZmFsc2U7CiAgICAgQURET1BfSlJFTChjLCBGT1JfSVRFUiwgY2xlYW51cCk7CiAgICAgVklTSVQoYywgZXhwciwgcy0+di5Gb3IudGFyZ2V0KTsKICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5Gb3IuYm9keSk7CkBAIC0xNjc2LDEyICsxNjgzLDggQEAKICAgICBpZiAoIWNvbXBpbGVyX3B1c2hfZmJsb2NrKGMsIExPT1AsIGxvb3ApKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoY29uc3RhbnQgPT0gLTEpIHsKLSAgICAgICAgLyogd2hpbGUgZXhwcmVzc2lvbnMgbXVzdCBiZSB0cmFjZWQgb24gZWFjaCBpdGVyYXRpb24sCi0gICAgICAgICAgIHNvIHdlIG5lZWQgdG8gc2V0IGFuIGV4dHJhIGxpbmUgbnVtYmVyLiAqLwotICAgICAgICBjLT51LT51X2xpbmVub19zZXQgPSBmYWxzZTsKICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5XaGlsZS50ZXN0KTsKLSAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0lGX0ZBTFNFLCBhbmNob3IpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICAgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgYW5jaG9yKTsKICAgICB9CiAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuV2hpbGUuYm9keSk7CiAgICAgQURET1BfSkFCUyhjLCBKVU1QX0FCU09MVVRFLCBsb29wKTsKQEAgLTE2OTIsNyArMTY5NSw2IEBACiAKICAgICBpZiAoY29uc3RhbnQgPT0gLTEpIHsKICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgYW5jaG9yKTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CiAgICAgICAgIEFERE9QKGMsIFBPUF9CTE9DSyk7CiAgICAgfQogICAgIGNvbXBpbGVyX3BvcF9mYmxvY2soYywgTE9PUCwgbG9vcCk7CkBAIC0xODEzLDIwICsxODE1LDE3IEBACiAgICBbdGIsIHZhbCwgZXhjXSAgICAgICBMMTogICAgIERVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgW3RiLCB2YWwsIGV4YywgZXhjXSAgICAgICAgICA8ZXZhbHVhdGUgRTE+ICAgICAgICAgICAgICAgICAgICkKICAgIFt0YiwgdmFsLCBleGMsIGV4YywgRTFdICAgICAgQ09NUEFSRV9PUCAgICAgIEVYQ19NQVRDSCAgICAgICApIG9ubHkgaWYgRTEKLSAgIFt0YiwgdmFsLCBleGMsIDEtb3ItMF0gICAgICAgSlVNUF9JRl9GQUxTRSAgIEwyICAgICAgICAgICAgICApCi0gICBbdGIsIHZhbCwgZXhjLCAxXSAgICAgICAgICAgIFBPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgW3RiLCB2YWwsIGV4YywgMS1vci0wXSAgICAgICBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICBMMiAgICAgICkKICAgIFt0YiwgdmFsLCBleGNdICAgICAgICAgICAgICAgUE9QCiAgICBbdGIsIHZhbF0gICAgICAgICAgICAgICAgICAgIDxhc3NpZ24gdG8gVjE+ICAob3IgUE9QIGlmIG5vIFYxKQogICAgW3RiXSAgICAgICAgICAgICAgICAgICAgICAgICBQT1AKICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgZm9yIFMxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVU1QX0ZPUldBUkQgICAgTDAKIAotICAgW3RiLCB2YWwsIGV4YywgMF0gICAgTDI6ICAgICBQT1AKLSAgIFt0YiwgdmFsLCBleGNdICAgICAgICAgICAgICAgRFVQCisgICBbdGIsIHZhbCwgZXhjXSAgICAgICBMMjogICAgIERVUAogICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5ldGMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi0gICBbdGIsIHZhbCwgZXhjLCAwXSAgICBMbisxOiAgIFBPUAotICAgW3RiLCB2YWwsIGV4Y10gICAgICAgICAgICAgICBFTkRfRklOQUxMWSAgICAgIyByZS1yYWlzZSBleGNlcHRpb24KKyAgIFt0YiwgdmFsLCBleGNdICAgICAgIExuKzE6ICAgRU5EX0ZJTkFMTFkgICAgICMgcmUtcmFpc2UgZXhjZXB0aW9uCiAKICAgIFtdICAgICAgICAgICAgICAgICAgIEwwOiAgICAgPG5leHQgc3RhdGVtZW50PgogCkBAIC0xODY4LDggKzE4NjcsNyBAQAogICAgICAgICAgICAgQURET1AoYywgRFVQX1RPUCk7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBoYW5kbGVyLT52LkV4Y2VwdEhhbmRsZXIudHlwZSk7CiAgICAgICAgICAgICBBRERPUF9JKGMsIENPTVBBUkVfT1AsIFB5Q21wX0VYQ19NQVRDSCk7Ci0gICAgICAgICAgICBBRERPUF9KUkVMKGMsIEpVTVBfSUZfRkFMU0UsIGV4Y2VwdCk7Ci0gICAgICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICAgICAgICAgIEFERE9QX0pBQlMoYywgUE9QX0pVTVBfSUZfRkFMU0UsIGV4Y2VwdCk7CiAgICAgICAgIH0KICAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CiAgICAgICAgIGlmIChoYW5kbGVyLT52LkV4Y2VwdEhhbmRsZXIubmFtZSkgewpAQCAtMTg4Miw4ICsxODgwLDYgQEAKICAgICAgICAgVklTSVRfU0VRKGMsIHN0bXQsIGhhbmRsZXItPnYuRXhjZXB0SGFuZGxlci5ib2R5KTsKICAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0ZPUldBUkQsIGVuZCk7CiAgICAgICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGV4Y2VwdCk7Ci0gICAgICAgIGlmIChoYW5kbGVyLT52LkV4Y2VwdEhhbmRsZXIudHlwZSkKLSAgICAgICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwogICAgIH0KICAgICBBRERPUChjLCBFTkRfRklOQUxMWSk7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgb3JlbHNlKTsKQEAgLTE5ODIsNiArMTk3OCwxMyBAQAogCiAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlUdXBsZV9OZXcobik7CiAgICAgUHlPYmplY3QgKmxldmVsOworICAgIHN0YXRpYyBQeU9iamVjdCAqZW1wdHlfc3RyaW5nOworCisgICAgaWYgKCFlbXB0eV9zdHJpbmcpIHsKKyAgICAgICAgZW1wdHlfc3RyaW5nID0gUHlTdHJpbmdfRnJvbVN0cmluZygiIik7CisgICAgICAgIGlmICghZW1wdHlfc3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgaWYgKCFuYW1lcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDA0LDIzICsyMDA3LDI0IEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0obmFtZXMsIGksIGFsaWFzLT5uYW1lKTsKICAgICB9CiAKLSAgICBpZiAocy0+bGluZW5vID4gYy0+Y19mdXR1cmUtPmZmX2xpbmVubykgewotICAgICAgICBpZiAoIXN0cmNtcChQeVN0cmluZ19BU19TVFJJTkcocy0+di5JbXBvcnRGcm9tLm1vZHVsZSksCi0gICAgICAgICAgICAgICAgICAgICJfX2Z1dHVyZV9fIikpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsZXZlbCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiKTsKLQotICAgICAgICB9CisgICAgaWYgKHMtPmxpbmVubyA+IGMtPmNfZnV0dXJlLT5mZl9saW5lbm8gJiYgcy0+di5JbXBvcnRGcm9tLm1vZHVsZSAmJgorICAgICAgICAhc3RyY21wKFB5U3RyaW5nX0FTX1NUUklORyhzLT52LkltcG9ydEZyb20ubW9kdWxlKSwgIl9fZnV0dXJlX18iKSkgeworICAgICAgICBQeV9ERUNSRUYobGV2ZWwpOworICAgICAgICBQeV9ERUNSRUYobmFtZXMpOworICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywgImZyb20gX19mdXR1cmVfXyBpbXBvcnRzIG11c3Qgb2NjdXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUiKTsKICAgICB9CiAKICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGxldmVsLCBjb25zdHMpOwogICAgIFB5X0RFQ1JFRihsZXZlbCk7CiAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBuYW1lcywgY29uc3RzKTsKICAgICBQeV9ERUNSRUYobmFtZXMpOwotICAgIEFERE9QX05BTUUoYywgSU1QT1JUX05BTUUsIHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUsIG5hbWVzKTsKKyAgICBpZiAocy0+di5JbXBvcnRGcm9tLm1vZHVsZSkgeworICAgICAgICBBRERPUF9OQU1FKGMsIElNUE9SVF9OQU1FLCBzLT52LkltcG9ydEZyb20ubW9kdWxlLCBuYW1lcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBBRERPUF9OQU1FKGMsIElNUE9SVF9OQU1FLCBlbXB0eV9zdHJpbmcsIG5hbWVzKTsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICBhbGlhc190eSBhbGlhcyA9IChhbGlhc190eSlhc2RsX3NlcV9HRVQocy0+di5JbXBvcnRGcm9tLm5hbWVzLCBpKTsKICAgICAgICAgaWRlbnRpZmllciBzdG9yZV9uYW1lOwpAQCAtMjA3MSw4ICsyMDc1LDcgQEAKICAgICBlbmQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgaWYgKGVuZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBBRERPUF9KUkVMKGMsIEpVTVBfSUZfVFJVRSwgZW5kKTsKLSAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICBBRERPUF9KQUJTKGMsIFBPUF9KVU1QX0lGX1RSVUUsIGVuZCk7CiAgICAgQURET1BfTyhjLCBMT0FEX0dMT0JBTCwgYXNzZXJ0aW9uX2Vycm9yLCBuYW1lcyk7CiAgICAgaWYgKHMtPnYuQXNzZXJ0Lm1zZykgewogICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LkFzc2VydC5tc2cpOwpAQCAtMjA4Miw3ICsyMDg1LDYgQEAKICAgICAgICAgQURET1BfSShjLCBSQUlTRV9WQVJBUkdTLCAxKTsKICAgICB9CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKLSAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMjMzNiwxMiArMjMzOCw2IEBACiAgICAgUHlPYmplY3QgKm1hbmdsZWQ7CiAgICAgLyogWFhYIEF1Z1N0b3JlIGlzbid0IHVzZWQgYW55d2hlcmUhICovCiAKLSAgICAvKiBGaXJzdCBjaGVjayBmb3IgYXNzaWdubWVudCB0byBfX2RlYnVnX18uIFBhcmFtPyAqLwotICAgIGlmICgoY3R4ID09IFN0b3JlIHx8IGN0eCA9PSBBdWdTdG9yZSB8fCBjdHggPT0gRGVsKQotICAgICAgICAmJiAhc3RyY21wKFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSwgIl9fZGVidWdfXyIpKSB7Ci0gICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLCAiY2FuIG5vdCBhc3NpZ24gdG8gX19kZWJ1Z19fIik7Ci0gICAgfQotCiAgICAgbWFuZ2xlZCA9IF9QeV9NYW5nbGUoYy0+dS0+dV9wcml2YXRlLCBuYW1lKTsKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjQ2Niw5ICsyNDYyLDkgQEAKIAogICAgIGFzc2VydChlLT5raW5kID09IEJvb2xPcF9raW5kKTsKICAgICBpZiAoZS0+di5Cb29sT3Aub3AgPT0gQW5kKQotICAgICAgICBqdW1waSA9IEpVTVBfSUZfRkFMU0U7CisgICAgICAgIGp1bXBpID0gSlVNUF9JRl9GQUxTRV9PUl9QT1A7CiAgICAgZWxzZQotICAgICAgICBqdW1waSA9IEpVTVBfSUZfVFJVRTsKKyAgICAgICAganVtcGkgPSBKVU1QX0lGX1RSVUVfT1JfUE9QOwogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBpZiAoZW5kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjQ3Nyw4ICsyNDczLDcgQEAKICAgICBhc3NlcnQobiA+PSAwKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIChleHByX3R5KWFzZGxfc2VxX0dFVChzLCBpKSk7Ci0gICAgICAgIEFERE9QX0pSRUwoYywganVtcGksIGVuZCk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApCisgICAgICAgIEFERE9QX0pBQlMoYywganVtcGksIGVuZCk7CiAgICAgfQogICAgIFZJU0lUKGMsIGV4cHIsIChleHByX3R5KWFzZGxfc2VxX0dFVChzLCBuKSk7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKQEAgLTI1MzYsOSArMjUzMSw4IEBACiAgICAgICAgIEFERE9QX0koYywgQ09NUEFSRV9PUCwKICAgICAgICAgICAgIGNtcG9wKChjbXBvcF90eSkoYXNkbF9zZXFfR0VUKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkNvbXBhcmUub3BzLCBpIC0gMSkpKSk7Ci0gICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9GQUxTRSwgY2xlYW51cCk7CisgICAgICAgIEFERE9QX0pBQlMoYywgSlVNUF9JRl9GQUxTRV9PUl9QT1AsIGNsZWFudXApOwogICAgICAgICBORVhUX0JMT0NLKGMpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICAgICAgaWYgKGkgPCAobiAtIDEpKQogICAgICAgICAgICAgVklTSVQoYywgZXhwciwKICAgICAgICAgICAgICAgICAoZXhwcl90eSlhc2RsX3NlcV9HRVQoZS0+di5Db21wYXJlLmNvbXBhcmF0b3JzLCBpKSk7CkBAIC0yNTk3LDkgKzI1OTEsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9saXN0Y29tcF9nZW5lcmF0b3Ioc3RydWN0IGNvbXBpbGVyICpjLCBQeU9iamVjdCAqdG1wbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9ycywgaW50IGdlbl9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGVsdCkKK2NvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGFzZGxfc2VxICpnZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnZW5faW5kZXgsIGV4cHJfdHkgZWx0KQogewogICAgIC8qIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBpdGVyYXRvciwgdGhlbiBlYWNoIG9mIHRoZSBpZnMsCiAgICAgICAgYW5kIHRoZW4gd3JpdGUgdG8gdGhlIGVsZW1lbnQgKi8KQEAgLTI2MzAsMzcgKzI2MjMsMjQgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgIGV4cHJfdHkgZSA9IChleHByX3R5KWFzZGxfc2VxX0dFVChsLT5pZnMsIGkpOwogICAgICAgICBWSVNJVChjLCBleHByLCBlKTsKLSAgICAgICAgQURET1BfSlJFTChjLCBKVU1QX0lGX0ZBTFNFLCBpZl9jbGVhbnVwKTsKKyAgICAgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgaWZfY2xlYW51cCk7CiAgICAgICAgIE5FWFRfQkxPQ0soYyk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwogICAgIH0KIAogICAgIGlmICgrK2dlbl9pbmRleCA8IGFzZGxfc2VxX0xFTihnZW5lcmF0b3JzKSkKLSAgICAgICAgaWYgKCFjb21waWxlcl9saXN0Y29tcF9nZW5lcmF0b3IoYywgdG1wbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ycywgZ2VuX2luZGV4LCBlbHQpKQorICAgICAgICBpZiAoIWNvbXBpbGVyX2xpc3Rjb21wX2dlbmVyYXRvcihjLCBnZW5lcmF0b3JzLCBnZW5faW5kZXgsIGVsdCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLyogb25seSBhcHBlbmQgYWZ0ZXIgdGhlIGxhc3QgZm9yIGdlbmVyYXRvciAqLwogICAgIGlmIChnZW5faW5kZXggPj0gYXNkbF9zZXFfTEVOKGdlbmVyYXRvcnMpKSB7Ci0gICAgICAgIGlmICghY29tcGlsZXJfbmFtZW9wKGMsIHRtcG5hbWUsIExvYWQpKQotICAgICAgICByZXR1cm4gMDsKICAgICAgICAgVklTSVQoYywgZXhwciwgZWx0KTsKLSAgICAgICAgQURET1AoYywgTElTVF9BUFBFTkQpOworICAgICAgICBBRERPUF9JKGMsIExJU1RfQVBQRU5ELCBnZW5faW5kZXgrMSk7CiAKICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgc2tpcCk7CiAgICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgQURET1BfSShjLCBKVU1QX0ZPUldBUkQsIDEpOwotICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgaWZfY2xlYW51cCk7Ci0gICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOwotICAgIH0KKyAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBpZl9jbGVhbnVwKTsKICAgICBBRERPUF9KQUJTKGMsIEpVTVBfQUJTT0xVVEUsIHN0YXJ0KTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhbmNob3IpOwotICAgIC8qIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGxpc3QgbmFtZSBhZGRlZCB0byBsb2NhbHMgKi8KLSAgICBpZiAoZ2VuX2luZGV4ID09IDEpCi0gICAgICAgIGlmICghY29tcGlsZXJfbmFtZW9wKGMsIHRtcG5hbWUsIERlbCkpCi0gICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIDE7CiB9CkBAIC0yNjY4LDQ5ICsyNjQ4LDQ5IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9saXN0Y29tcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpZGVudGlmaWVyIHRtcDsKLSAgICBpbnQgcmMgPSAwOwotICAgIGFzZGxfc2VxICpnZW5lcmF0b3JzID0gZS0+di5MaXN0Q29tcC5nZW5lcmF0b3JzOwotCiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gTGlzdENvbXBfa2luZCk7Ci0gICAgdG1wID0gY29tcGlsZXJfbmV3X3RtcG5hbWUoYyk7Ci0gICAgaWYgKCF0bXApCi0gICAgICAgIHJldHVybiAwOwogICAgIEFERE9QX0koYywgQlVJTERfTElTVCwgMCk7Ci0gICAgQURET1AoYywgRFVQX1RPUCk7Ci0gICAgaWYgKGNvbXBpbGVyX25hbWVvcChjLCB0bXAsIFN0b3JlKSkKLSAgICAgICAgcmMgPSBjb21waWxlcl9saXN0Y29tcF9nZW5lcmF0b3IoYywgdG1wLCBnZW5lcmF0b3JzLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52Lkxpc3RDb21wLmVsdCk7Ci0gICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgcmV0dXJuIHJjOworICAgIHJldHVybiBjb21waWxlcl9saXN0Y29tcF9nZW5lcmF0b3IoYywgZS0+di5MaXN0Q29tcC5nZW5lcmF0b3JzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5MaXN0Q29tcC5lbHQpOwogfQogCisvKiBEaWN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvciBleHByZXNzaW9ucyB3b3JrIGJ5IGNyZWF0aW5nIGEKKyAgIG5lc3RlZCBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgaXRlcmF0aW9uLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgICBpdGVyYXRpb24gdmFyaWFibGVzIGRvbid0IGxlYWsgaW50byB0aGUgY3VycmVudCBzY29wZS4KKyAgIFRoZSBkZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXRzIGRlZmluaXRpb24sIHdpdGggdGhlCisgICByZXN1bHQgb2YgdGhhdCBjYWxsIGJlaW5nIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24uCisgICBUaGUgTEMvU0MgdmVyc2lvbiByZXR1cm5zIHRoZSBwb3B1bGF0ZWQgY29udGFpbmVyLCB3aGlsZSB0aGUgR0UgdmVyc2lvbiBpcworICAgZmxhZ2dlZCBpbiBzeW10YWJsZS5jIGFzIGEgZ2VuZXJhdG9yLCBzbyBpdCByZXR1cm5zIHRoZSBnZW5lcmF0b3Igb2JqZWN0CisgICB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICBUaGlzIGNvZGUgKmtub3dzKiB0aGF0IHRoZSBsb29wIGNhbm5vdCBjb250YWluIGJyZWFrLCBjb250aW51ZSwgb3IgcmV0dXJuLAorICAgc28gaXQgY2hlYXRzIGFuZCBza2lwcyB0aGUgU0VUVVBfTE9PUC9QT1BfQkxPQ0sgc3RlcHMgdXNlZCBpbiBub3JtYWwgbG9vcHMuCisKKyAgIFBvc3NpYmxlIGNsZWFudXBzOgorICAgIC0gaXRlcmF0ZSBvdmVyIHRoZSBnZW5lcmF0b3Igc2VxdWVuY2UgaW5zdGVhZCBvZiB1c2luZyByZWN1cnNpb24KKyovCisKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX2dlbmV4cF9nZW5lcmF0b3Ioc3RydWN0IGNvbXBpbGVyICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9ycywgaW50IGdlbl9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBlbHQpCitjb21waWxlcl9jb21wcmVoZW5zaW9uX2dlbmVyYXRvcihzdHJ1Y3QgY29tcGlsZXIgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9ycywgaW50IGdlbl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgZWx0LCBleHByX3R5IHZhbCwgaW50IHR5cGUpCiB7CiAgICAgLyogZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGl0ZXJhdG9yLCB0aGVuIGVhY2ggb2YgdGhlIGlmcywKICAgICAgICBhbmQgdGhlbiB3cml0ZSB0byB0aGUgZWxlbWVudCAqLwogCi0gICAgY29tcHJlaGVuc2lvbl90eSBnZTsKLSAgICBiYXNpY2Jsb2NrICpzdGFydCwgKmFuY2hvciwgKnNraXAsICppZl9jbGVhbnVwLCAqZW5kOworICAgIGNvbXByZWhlbnNpb25fdHkgZ2VuOworICAgIGJhc2ljYmxvY2sgKnN0YXJ0LCAqYW5jaG9yLCAqc2tpcCwgKmlmX2NsZWFudXA7CiAgICAgaW50IGksIG47CiAKICAgICBzdGFydCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBza2lwID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGlmX2NsZWFudXAgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgYW5jaG9yID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwotICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKIAogICAgIGlmIChzdGFydCA9PSBOVUxMIHx8IHNraXAgPT0gTlVMTCB8fCBpZl9jbGVhbnVwID09IE5VTEwgfHwKLSAgICAgICAgYW5jaG9yID09IE5VTEwgfHwgZW5kID09IE5VTEwpCisgICAgICAgIGFuY2hvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGdlID0gKGNvbXByZWhlbnNpb25fdHkpYXNkbF9zZXFfR0VUKGdlbmVyYXRvcnMsIGdlbl9pbmRleCk7Ci0gICAgQURET1BfSlJFTChjLCBTRVRVUF9MT09QLCBlbmQpOwotICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgTE9PUCwgc3RhcnQpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBnZW4gPSAoY29tcHJlaGVuc2lvbl90eSlhc2RsX3NlcV9HRVQoZ2VuZXJhdG9ycywgZ2VuX2luZGV4KTsKIAogICAgIGlmIChnZW5faW5kZXggPT0gMCkgewogICAgICAgICAvKiBSZWNlaXZlIG91dGVybW9zdCBpdGVyIGFzIGFuIGltcGxpY2l0IGFyZ3VtZW50ICovCkBAIC0yNzE5LDg0ICsyNjk5LDE2NCBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogU3ViLWl0ZXIgLSBjYWxjdWxhdGUgb24gdGhlIGZseSAqLwotICAgICAgICBWSVNJVChjLCBleHByLCBnZS0+aXRlcik7CisgICAgICAgIFZJU0lUKGMsIGV4cHIsIGdlbi0+aXRlcik7CiAgICAgICAgIEFERE9QKGMsIEdFVF9JVEVSKTsKICAgICB9CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgc3RhcnQpOwogICAgIEFERE9QX0pSRUwoYywgRk9SX0lURVIsIGFuY2hvcik7CiAgICAgTkVYVF9CTE9DSyhjKTsKLSAgICBWSVNJVChjLCBleHByLCBnZS0+dGFyZ2V0KTsKKyAgICBWSVNJVChjLCBleHByLCBnZW4tPnRhcmdldCk7CiAKICAgICAvKiBYWFggdGhpcyBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLi4uYSBsb3QhICovCi0gICAgbiA9IGFzZGxfc2VxX0xFTihnZS0+aWZzKTsKKyAgICBuID0gYXNkbF9zZXFfTEVOKGdlbi0+aWZzKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIGV4cHJfdHkgZSA9IChleHByX3R5KWFzZGxfc2VxX0dFVChnZS0+aWZzLCBpKTsKKyAgICAgICAgZXhwcl90eSBlID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKGdlbi0+aWZzLCBpKTsKICAgICAgICAgVklTSVQoYywgZXhwciwgZSk7Ci0gICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9JRl9GQUxTRSwgaWZfY2xlYW51cCk7CisgICAgICAgIEFERE9QX0pBQlMoYywgUE9QX0pVTVBfSUZfRkFMU0UsIGlmX2NsZWFudXApOwogICAgICAgICBORVhUX0JMT0NLKGMpOwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKICAgICB9CiAKICAgICBpZiAoKytnZW5faW5kZXggPCBhc2RsX3NlcV9MRU4oZ2VuZXJhdG9ycykpCi0gICAgICAgIGlmICghY29tcGlsZXJfZ2VuZXhwX2dlbmVyYXRvcihjLCBnZW5lcmF0b3JzLCBnZW5faW5kZXgsIGVsdCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCFjb21waWxlcl9jb21wcmVoZW5zaW9uX2dlbmVyYXRvcihjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcnMsIGdlbl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHQsIHZhbCwgdHlwZSkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgLyogb25seSBhcHBlbmQgYWZ0ZXIgdGhlIGxhc3QgJ2ZvcicgZ2VuZXJhdG9yICovCisgICAgLyogb25seSBhcHBlbmQgYWZ0ZXIgdGhlIGxhc3QgZm9yIGdlbmVyYXRvciAqLwogICAgIGlmIChnZW5faW5kZXggPj0gYXNkbF9zZXFfTEVOKGdlbmVyYXRvcnMpKSB7Ci0gICAgICAgIFZJU0lUKGMsIGV4cHIsIGVsdCk7Ci0gICAgICAgIEFERE9QKGMsIFlJRUxEX1ZBTFVFKTsKLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgICAgIC8qIGNvbXByZWhlbnNpb24gc3BlY2lmaWMgY29kZSAqLworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDT01QX0dFTkVYUDoKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGVsdCk7CisgICAgICAgICAgICBBRERPUChjLCBZSUVMRF9WQUxVRSk7CisgICAgICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPTVBfU0VUQ09NUDoKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGVsdCk7CisgICAgICAgICAgICBBRERPUF9JKGMsIFNFVF9BREQsIGdlbl9pbmRleCArIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ09NUF9ESUNUQ09NUDoKKyAgICAgICAgICAgIC8qIFdpdGggJ2Rba10gPSB2JywgdiBpcyBldmFsdWF0ZWQgYmVmb3JlIGssIHNvIHdlIGRvCisgICAgICAgICAgICAgICB0aGUgc2FtZS4gKi8KKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHZhbCk7CisgICAgICAgICAgICBWSVNJVChjLCBleHByLCBlbHQpOworICAgICAgICAgICAgQURET1BfSShjLCBNQVBfQURELCBnZW5faW5kZXggKyAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KIAogICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBza2lwKTsKICAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBBRERPUF9JKGMsIEpVTVBfRk9SV0FSRCwgMSk7Ci0gICAgICAgIGlmIChpID09IDApCi0gICAgICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBpZl9jbGVhbnVwKTsKLQotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKLSAgICB9CisgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgaWZfY2xlYW51cCk7CiAgICAgQURET1BfSkFCUyhjLCBKVU1QX0FCU09MVVRFLCBzdGFydCk7CiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgYW5jaG9yKTsKLSAgICBBRERPUChjLCBQT1BfQkxPQ0spOwotICAgIGNvbXBpbGVyX3BvcF9mYmxvY2soYywgTE9PUCwgc3RhcnQpOwotICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGVuZCk7CiAKICAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGludAorY29tcGlsZXJfY29tcHJlaGVuc2lvbihzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSwgaW50IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmdlbmVyYXRvcnMsIGV4cHJfdHkgZWx0LCBleHByX3R5IHZhbCkKK3sKKyAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKKyAgICBleHByX3R5IG91dGVybW9zdF9pdGVyOworCisgICAgb3V0ZXJtb3N0X2l0ZXIgPSAoKGNvbXByZWhlbnNpb25fdHkpCisgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfR0VUKGdlbmVyYXRvcnMsIDApKS0+aXRlcjsKKworICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgKHZvaWQgKillLCBlLT5saW5lbm8pKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKHR5cGUgIT0gQ09NUF9HRU5FWFApIHsKKyAgICAgICAgaW50IG9wOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDT01QX1NFVENPTVA6CisgICAgICAgICAgICBvcCA9IEJVSUxEX1NFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPTVBfRElDVENPTVA6CisgICAgICAgICAgICBvcCA9IEJVSUxEX01BUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbXByZWhlbnNpb24gdHlwZSAlZCIsIHR5cGUpOworICAgICAgICAgICAgZ290byBlcnJvcl9pbl9zY29wZTsKKyAgICAgICAgfQorCisgICAgICAgIEFERE9QX0koYywgb3AsIDApOworICAgIH0KKworICAgIGlmICghY29tcGlsZXJfY29tcHJlaGVuc2lvbl9nZW5lcmF0b3IoYywgZ2VuZXJhdG9ycywgMCwgZWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCB0eXBlKSkKKyAgICAgICAgZ290byBlcnJvcl9pbl9zY29wZTsKKworICAgIGlmICh0eXBlICE9IENPTVBfR0VORVhQKSB7CisgICAgICAgIEFERE9QKGMsIFJFVFVSTl9WQUxVRSk7CisgICAgfQorCisgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKKyAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworICAgIGlmIChjbyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKCFjb21waWxlcl9tYWtlX2Nsb3N1cmUoYywgY28sIDApKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0RFQ1JFRihjbyk7CisKKyAgICBWSVNJVChjLCBleHByLCBvdXRlcm1vc3RfaXRlcik7CisgICAgQURET1AoYywgR0VUX0lURVIpOworICAgIEFERE9QX0koYywgQ0FMTF9GVU5DVElPTiwgMSk7CisgICAgcmV0dXJuIDE7CitlcnJvcl9pbl9zY29wZToKKyAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworZXJyb3I6CisgICAgUHlfWERFQ1JFRihjbyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGNvbXBpbGVyX2dlbmV4cChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKICAgICBzdGF0aWMgaWRlbnRpZmllciBuYW1lOwotICAgIFB5Q29kZU9iamVjdCAqY287Ci0gICAgZXhwcl90eSBvdXRlcm1vc3RfaXRlciA9ICgoY29tcHJlaGVuc2lvbl90eSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzZGxfc2VxX0dFVChlLT52LkdlbmVyYXRvckV4cC5nZW5lcmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKSktPml0ZXI7Ci0KICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgbmFtZSA9IFB5U3RyaW5nX0Zyb21TdHJpbmcoIjxnZW5leHByPiIpOwogICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgYXNzZXJ0KGUtPmtpbmQgPT0gR2VuZXJhdG9yRXhwX2tpbmQpOworICAgIHJldHVybiBjb21waWxlcl9jb21wcmVoZW5zaW9uKGMsIGUsIENPTVBfR0VORVhQLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5HZW5lcmF0b3JFeHAuZWx0LCBOVUxMKTsKK30KIAotICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgKHZvaWQgKillLCBlLT5saW5lbm8pKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb21waWxlcl9nZW5leHBfZ2VuZXJhdG9yKGMsIGUtPnYuR2VuZXJhdG9yRXhwLmdlbmVyYXRvcnMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkdlbmVyYXRvckV4cC5lbHQpOwotICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAoY28gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CitzdGF0aWMgaW50Citjb21waWxlcl9zZXRjb21wKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQoreworICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7CisgICAgaWYgKCFuYW1lKSB7CisgICAgICAgIG5hbWUgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCI8c2V0Y29tcD4iKTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGFzc2VydChlLT5raW5kID09IFNldENvbXBfa2luZCk7CisgICAgcmV0dXJuIGNvbXBpbGVyX2NvbXByZWhlbnNpb24oYywgZSwgQ09NUF9TRVRDT01QLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuU2V0Q29tcC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuU2V0Q29tcC5lbHQsIE5VTEwpOworfQogCi0gICAgY29tcGlsZXJfbWFrZV9jbG9zdXJlKGMsIGNvLCAwKTsKLSAgICBQeV9ERUNSRUYoY28pOwotCi0gICAgVklTSVQoYywgZXhwciwgb3V0ZXJtb3N0X2l0ZXIpOwotICAgIEFERE9QKGMsIEdFVF9JVEVSKTsKLSAgICBBRERPUF9JKGMsIENBTExfRlVOQ1RJT04sIDEpOwotCi0gICAgcmV0dXJuIDE7CitzdGF0aWMgaW50Citjb21waWxlcl9kaWN0Y29tcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKK3sKKyAgICBzdGF0aWMgaWRlbnRpZmllciBuYW1lOworICAgIGlmICghbmFtZSkgeworICAgICAgICBuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZygiPGRpY3Rjb21wPiIpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgYXNzZXJ0KGUtPmtpbmQgPT0gRGljdENvbXBfa2luZCk7CisgICAgcmV0dXJuIGNvbXBpbGVyX2NvbXByZWhlbnNpb24oYywgZSwgQ09NUF9ESUNUQ09NUCwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkRpY3RDb21wLmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5EaWN0Q29tcC5rZXksIGUtPnYuRGljdENvbXAudmFsdWUpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yODU5LDgxICsyOTE5LDM1IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl93aXRoKHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIHN0YXRpYyBpZGVudGlmaWVyIGVudGVyX2F0dHIsIGV4aXRfYXR0cjsKICAgICBiYXNpY2Jsb2NrICpibG9jaywgKmZpbmFsbHk7Ci0gICAgaWRlbnRpZmllciB0bXB2YWx1ZSA9IE5VTEw7CiAKICAgICBhc3NlcnQocy0+a2luZCA9PSBXaXRoX2tpbmQpOwogCi0gICAgaWYgKCFlbnRlcl9hdHRyKSB7Ci0gICAgICAgIGVudGVyX2F0dHIgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKCJfX2VudGVyX18iKTsKLSAgICAgICAgaWYgKCFlbnRlcl9hdHRyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghZXhpdF9hdHRyKSB7Ci0gICAgICAgIGV4aXRfYXR0ciA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fZXhpdF9fIik7Ci0gICAgICAgIGlmICghZXhpdF9hdHRyKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAgYmxvY2sgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgZmluYWxseSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBpZiAoIWJsb2NrIHx8ICFmaW5hbGx5KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChzLT52LldpdGgub3B0aW9uYWxfdmFycykgewotICAgICAgICAvKiBDcmVhdGUgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gaG9sZCBjb250ZXh0Ll9fZW50ZXJfXygpLgotICAgICAgICAgICBXZSBuZWVkIHRvIGRvIHRoaXMgcmF0aGVyIHRoYW4gcHJlc2VydmluZyBpdCBvbiB0aGUgc3RhY2sKLSAgICAgICAgICAgYmVjYXVzZSBTRVRVUF9GSU5BTExZIHJlbWVtYmVycyB0aGUgc3RhY2sgbGV2ZWwuCi0gICAgICAgICAgIFdlIG5lZWQgdG8gZG8gdGhlIGFzc2lnbm1lbnQgKmluc2lkZSogdGhlIHRyeS9maW5hbGx5Ci0gICAgICAgICAgIHNvIHRoYXQgY29udGV4dC5fX2V4aXRfXygpIGlzIGNhbGxlZCB3aGVuIHRoZSBhc3NpZ25tZW50Ci0gICAgICAgICAgIGZhaWxzLiAgQnV0IHdlIG5lZWQgdG8gY2FsbCBjb250ZXh0Ll9fZW50ZXJfXygpICpiZWZvcmUqCi0gICAgICAgICAgIHRoZSB0cnkvZmluYWxseSBzbyB0aGF0IGlmIGl0IGZhaWxzIHdlIHdvbid0IGNhbGwKLSAgICAgICAgICAgY29udGV4dC5fX2V4aXRfXygpLgotICAgICAgICAqLwotICAgICAgICB0bXB2YWx1ZSA9IGNvbXBpbGVyX25ld190bXBuYW1lKGMpOwotICAgICAgICBpZiAodG1wdmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHRtcHZhbHVlKTsKLSAgICB9Ci0KICAgICAvKiBFdmFsdWF0ZSBFWFBSICovCiAgICAgVklTSVQoYywgZXhwciwgcy0+di5XaXRoLmNvbnRleHRfZXhwcik7CisgICAgQURET1BfSlJFTChjLCBTRVRVUF9XSVRILCBmaW5hbGx5KTsKIAotICAgIC8qIFNxdWlycmVsIGF3YXkgY29udGV4dC5fX2V4aXRfXyBieSBzdHVmZmluZyBpdCB1bmRlciBjb250ZXh0ICovCi0gICAgQURET1AoYywgRFVQX1RPUCk7Ci0gICAgQURET1BfTyhjLCBMT0FEX0FUVFIsIGV4aXRfYXR0ciwgbmFtZXMpOwotICAgIEFERE9QKGMsIFJPVF9UV08pOwotCi0gICAgLyogQ2FsbCBjb250ZXh0Ll9fZW50ZXJfXygpICovCi0gICAgQURET1BfTyhjLCBMT0FEX0FUVFIsIGVudGVyX2F0dHIsIG5hbWVzKTsKLSAgICBBRERPUF9JKGMsIENBTExfRlVOQ1RJT04sIDApOwotCi0gICAgaWYgKHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKSB7Ci0gICAgICAgIC8qIFN0b3JlIGl0IGluIHRtcHZhbHVlICovCi0gICAgICAgIGlmICghY29tcGlsZXJfbmFtZW9wKGMsIHRtcHZhbHVlLCBTdG9yZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIERpc2NhcmQgcmVzdWx0IGZyb20gY29udGV4dC5fX2VudGVyX18oKSAqLwotICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKLSAgICB9Ci0KLSAgICAvKiBTdGFydCB0aGUgdHJ5IGJsb2NrICovCi0gICAgQURET1BfSlJFTChjLCBTRVRVUF9GSU5BTExZLCBmaW5hbGx5KTsKLQorICAgIC8qIFNFVFVQX1dJVEggcHVzaGVzIGEgZmluYWxseSBibG9jay4gKi8KICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBibG9jayk7CisgICAgLyogTm90ZSB0aGF0IHRoZSBibG9jayBpcyBhY3R1YWxseSBjYWxsZWQgU0VUVVBfV0lUSCBpbiBjZXZhbC5jLCBidXQKKyAgICAgICBmdW5jdGlvbnMgdGhlIHNhbWUgYXMgU0VUVVBfRklOQUxMWSBleGNlcHQgdGhhdCBleGNlcHRpb25zIGFyZQorICAgICAgIG5vcm1hbGl6ZWQuICovCiAgICAgaWYgKCFjb21waWxlcl9wdXNoX2ZibG9jayhjLCBGSU5BTExZX1RSWSwgYmxvY2spKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmIChzLT52LldpdGgub3B0aW9uYWxfdmFycykgewotICAgICAgICAvKiBCaW5kIHNhdmVkIHJlc3VsdCBvZiBjb250ZXh0Ll9fZW50ZXJfXygpIHRvIFZBUiAqLwotICAgICAgICBpZiAoIWNvbXBpbGVyX25hbWVvcChjLCB0bXB2YWx1ZSwgTG9hZCkgfHwKLSAgICAgICAgICAgICFjb21waWxlcl9uYW1lb3AoYywgdG1wdmFsdWUsIERlbCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpOwogICAgIH0KKyAgICBlbHNlIHsKKyAgICAvKiBEaXNjYXJkIHJlc3VsdCBmcm9tIGNvbnRleHQuX19lbnRlcl9fKCkgKi8KKyAgICAgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgfQogCiAgICAgLyogQkxPQ0sgY29kZSAqLwogICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LldpdGguYm9keSk7CkBAIC0yOTk3LDggKzMwMTEsMTcgQEAKICAgICAgICAgICAgIEFERE9QKGMsIFNUT1JFX01BUCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRfa2luZDoKKyAgICAgICAgbiA9IGFzZGxfc2VxX0xFTihlLT52LlNldC5lbHRzKTsKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGUtPnYuU2V0LmVsdHMpOworICAgICAgICBBRERPUF9JKGMsIEJVSUxEX1NFVCwgbik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGlzdENvbXBfa2luZDoKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2xpc3Rjb21wKGMsIGUpOworICAgIGNhc2UgU2V0Q29tcF9raW5kOgorICAgICAgICByZXR1cm4gY29tcGlsZXJfc2V0Y29tcChjLCBlKTsKKyAgICBjYXNlIERpY3RDb21wX2tpbmQ6CisgICAgICAgIHJldHVybiBjb21waWxlcl9kaWN0Y29tcChjLCBlKTsKICAgICBjYXNlIEdlbmVyYXRvckV4cF9raW5kOgogICAgICAgICByZXR1cm4gY29tcGlsZXJfZ2VuZXhwKGMsIGUpOwogICAgIGNhc2UgWWllbGRfa2luZDoKQEAgLTM0MjMsNyArMzQ0Niw3IEBACiBzdGF0aWMgaW50CiBzdGFja2RlcHRoX3dhbGsoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiLCBpbnQgZGVwdGgsIGludCBtYXhkZXB0aCkKIHsKLSAgICBpbnQgaTsKKyAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoOwogICAgIHN0cnVjdCBpbnN0ciAqaW5zdHI7CiAgICAgaWYgKGItPmJfc2VlbiB8fCBiLT5iX3N0YXJ0ZGVwdGggPj0gZGVwdGgpCiAgICAgICAgIHJldHVybiBtYXhkZXB0aDsKQEAgLTM0MzYsOCArMzQ1OSwxNyBAQAogICAgICAgICAgICAgbWF4ZGVwdGggPSBkZXB0aDsKICAgICAgICAgYXNzZXJ0KGRlcHRoID49IDApOyAvKiBpbnZhbGlkIGNvZGUgb3IgYnVnIGluIHN0YWNrZGVwdGgoKSAqLwogICAgICAgICBpZiAoaW5zdHItPmlfanJlbCB8fCBpbnN0ci0+aV9qYWJzKSB7CisgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aDsKKyAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gRk9SX0lURVIpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aC0yOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRklOQUxMWSB8fAorICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRVhDRVBUKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoID0gZGVwdGgrMzsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X2RlcHRoID4gbWF4ZGVwdGgpCisgICAgICAgICAgICAgICAgICAgIG1heGRlcHRoID0gdGFyZ2V0X2RlcHRoOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4ZGVwdGggPSBzdGFja2RlcHRoX3dhbGsoYywgaW5zdHItPmlfdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgsIG1heGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCwgbWF4ZGVwdGgpOwogICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wY29kZSA9PSBKVU1QX0FCU09MVVRFIHx8CiAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfRk9SV0FSRCkgewogICAgICAgICAgICAgICAgIGdvdG8gb3V0OyAvKiByZW1haW5pbmcgY29kZSBpcyBkZWFkICovCkBAIC0zNTI1LDUxICszNTU3LDkgQEAKICAgICByZXR1cm4gc2l6ZTsKIH0KIAotLyogQWxsIGFib3V0IGFfbG5vdGFiLgotCi1jX2xub3RhYiBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBieXRlcyBkaXNndWlzZWQgYXMgYSBQeXRob24gc3RyaW5nLgotSXQgaXMgdXNlZCB0byBtYXAgYnl0ZWNvZGUgb2Zmc2V0cyB0byBzb3VyY2UgY29kZSBsaW5lICNzICh3aGVuIG5lZWRlZAotZm9yIHRyYWNlYmFja3MpLgotCi1UaGUgYXJyYXkgaXMgY29uY2VwdHVhbGx5IGEgbGlzdCBvZgotICAgIChieXRlY29kZSBvZmZzZXQgaW5jcmVtZW50LCBsaW5lIG51bWJlciBpbmNyZW1lbnQpCi1wYWlycy4gIFRoZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgYW5kIGRlbGljYXRlLCBiZXN0IGlsbHVzdHJhdGVkIGJ5IGV4YW1wbGU6Ci0KLSAgICBieXRlIGNvZGUgb2Zmc2V0ICAgIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCi0gICAgMCAgICAgICAgICAgICAgICAgICAgICAgMQotICAgIDYgICAgICAgICAgICAgICAgICAgICAgIDIKLSAgICAgICA1MCAgICAgICAgICAgICAgICAgICA3Ci0gICAgICAzNTAgICAgICAgICAgICAgICAgIDMwNwotICAgICAgMzYxICAgICAgICAgICAgICAgICAzMDgKLQotVGhlIGZpcnN0IHRyaWNrIGlzIHRoYXQgdGhlc2UgbnVtYmVycyBhcmVuJ3Qgc3RvcmVkLCBvbmx5IHRoZSBpbmNyZW1lbnRzCi1mcm9tIG9uZSByb3cgdG8gdGhlIG5leHQgKHRoaXMgZG9lc24ndCByZWFsbHkgd29yaywgYnV0IGl0J3MgYSBzdGFydCk6Ci0KLSAgICAwLCAxLCAgNiwgMSwgIDQ0LCA1LCAgMzAwLCAzMDAsICAxMSwgMQotCi1UaGUgc2Vjb25kIHRyaWNrIGlzIHRoYXQgYW4gdW5zaWduZWQgYnl0ZSBjYW4ndCBob2xkIG5lZ2F0aXZlIHZhbHVlcywgb3IKLXZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIHNvIChhKSB0aGVyZSdzIGEgZGVlcCBhc3N1bXB0aW9uIHRoYXQgYnl0ZSBjb2RlCi1vZmZzZXRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGxpbmUgI3MgYm90aCBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LCBhbmQgKGIpCi1pZiBhdCBsZWFzdCBvbmUgY29sdW1uIGp1bXBzIGJ5IG1vcmUgdGhhbiAyNTUgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LCBtb3JlCi10aGFuIG9uZSBwYWlyIGlzIHdyaXR0ZW4gdG8gdGhlIHRhYmxlLiBJbiBjYXNlICNiLCB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci1mcm9tIGxvb2tpbmcgYXQgdGhlIHRhYmxlIGxhdGVyIGhvdyBtYW55IHdlcmUgd3JpdHRlbi4gIFRoYXQncyB0aGUgZGVsaWNhdGUKLXBhcnQuICBBIHVzZXIgb2YgY19sbm90YWIgZGVzaXJpbmcgdG8gZmluZCB0aGUgc291cmNlIGxpbmUgbnVtYmVyCi1jb3JyZXNwb25kaW5nIHRvIGEgYnl0ZWNvZGUgYWRkcmVzcyBBIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzCi0KLSAgICBsaW5lbm8gPSBhZGRyID0gMAotICAgIGZvciBhZGRyX2luY3IsIGxpbmVfaW5jciBpbiBjX2xub3RhYjoKLSAgICBhZGRyICs9IGFkZHJfaW5jcgotICAgIGlmIGFkZHIgPiBBOgotICAgICAgICByZXR1cm4gbGluZW5vCi0gICAgbGluZW5vICs9IGxpbmVfaW5jcgotCi1JbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3aGVuIHRoZSBhZGRyIGZpZWxkIGluY3JlbWVudHMgYnkgbW9yZSB0aGFuIDI1NSwKLXRoZSBsaW5lICMgaW5jcmVtZW50IGluIGVhY2ggcGFpciBnZW5lcmF0ZWQgbXVzdCBiZSAwIHVudGlsIHRoZSByZW1haW5pbmcgYWRkcgotaW5jcmVtZW50IGlzIDwgMjU2LiAgU28sIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhc3NlbWJsZV9sbm90YWIgKGl0IHVzZWQKLXRvIGJlIGNhbGxlZCBjb21fc2V0X2xpbmVubykgc2hvdWxkIG5vdCAoYXMgd2FzIGFjdHVhbGx5IGRvbmUgdW50aWwgMi4yKQotZXhwYW5kIDMwMCwgMzAwIHRvIDI1NSwgMjU1LCA0NSwgNDUsCi0gICAgICAgICAgICBidXQgdG8gMjU1LCAgIDAsIDQ1LCAyNTUsIDAsIDQ1LgotKi8KKy8qIEFwcGVuZHMgYSBwYWlyIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgbnVtYmVyIHRhYmxlLCBhX2xub3RhYiwgcmVwcmVzZW50aW5nCisgICB0aGUgaW5zdHJ1Y3Rpb24ncyBieXRlY29kZSBvZmZzZXQgYW5kIGxpbmUgbnVtYmVyLiAgU2VlCisgICBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGluZSBudW1iZXIgdGFibGUuICovCiAKIHN0YXRpYyBpbnQKIGFzc2VtYmxlX2xub3RhYihzdHJ1Y3QgYXNzZW1ibGVyICphLCBzdHJ1Y3QgaW5zdHIgKmkpCkBAIC0zNzExLDQ5ICszNzAxLDQ3IEBACiBhc3NlbWJsZV9qdW1wX29mZnNldHMoc3RydWN0IGFzc2VtYmxlciAqYSwgc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIGJhc2ljYmxvY2sgKmI7Ci0gICAgaW50IGJzaXplLCB0b3RzaXplLCBleHRlbmRlZF9hcmdfY291bnQsIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ID0gMDsKKyAgICBpbnQgYnNpemUsIHRvdHNpemUsIGV4dGVuZGVkX2FyZ19jb3VudCA9IDAsIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50OwogICAgIGludCBpOwogCiAgICAgLyogQ29tcHV0ZSB0aGUgc2l6ZSBvZiBlYWNoIGJsb2NrIGFuZCBmaXh1cCBqdW1wIGFyZ3MuCiAgICAgICAgUmVwbGFjZSBibG9jayBwb2ludGVyIHdpdGggcG9zaXRpb24gaW4gYnl0ZWNvZGUuICovCi1zdGFydDoKLSAgICB0b3RzaXplID0gMDsKLSAgICBmb3IgKGkgPSBhLT5hX25ibG9ja3MgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBiID0gYS0+YV9wb3N0b3JkZXJbaV07Ci0gICAgICAgIGJzaXplID0gYmxvY2tzaXplKGIpOwotICAgICAgICBiLT5iX29mZnNldCA9IHRvdHNpemU7Ci0gICAgICAgIHRvdHNpemUgKz0gYnNpemU7Ci0gICAgfQotICAgIGV4dGVuZGVkX2FyZ19jb3VudCA9IDA7Ci0gICAgZm9yIChiID0gYy0+dS0+dV9ibG9ja3M7IGIgIT0gTlVMTDsgYiA9IGItPmJfbGlzdCkgewotICAgICAgICBic2l6ZSA9IGItPmJfb2Zmc2V0OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYi0+Yl9pdXNlZDsgaSsrKSB7Ci0gICAgICAgICAgICBzdHJ1Y3QgaW5zdHIgKmluc3RyID0gJmItPmJfaW5zdHJbaV07Ci0gICAgICAgICAgICAvKiBSZWxhdGl2ZSBqdW1wcyBhcmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8KLSAgICAgICAgICAgICAgIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGFmdGVyIGZldGNoaW5nCi0gICAgICAgICAgICAgICB0aGUganVtcCBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBic2l6ZSArPSBpbnN0cnNpemUoaW5zdHIpOwotICAgICAgICAgICAgaWYgKGluc3RyLT5pX2phYnMpCi0gICAgICAgICAgICAgICAgaW5zdHItPmlfb3BhcmcgPSBpbnN0ci0+aV90YXJnZXQtPmJfb2Zmc2V0OwotICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHItPmlfanJlbCkgewotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGluc3RyLT5pX3RhcmdldC0+Yl9vZmZzZXQgLSBic2l6ZTsKLSAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGRlbHRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wYXJnID4gMHhmZmZmKQotICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZ19jb3VudCsrOworICAgIGRvIHsKKyAgICAgICAgdG90c2l6ZSA9IDA7CisgICAgICAgIGZvciAoaSA9IGEtPmFfbmJsb2NrcyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBiID0gYS0+YV9wb3N0b3JkZXJbaV07CisgICAgICAgICAgICBic2l6ZSA9IGJsb2Nrc2l6ZShiKTsKKyAgICAgICAgICAgIGItPmJfb2Zmc2V0ID0gdG90c2l6ZTsKKyAgICAgICAgICAgIHRvdHNpemUgKz0gYnNpemU7CiAgICAgICAgIH0KLSAgICB9CisgICAgICAgIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ID0gZXh0ZW5kZWRfYXJnX2NvdW50OworICAgICAgICBleHRlbmRlZF9hcmdfY291bnQgPSAwOworICAgICAgICBmb3IgKGIgPSBjLT51LT51X2Jsb2NrczsgYiAhPSBOVUxMOyBiID0gYi0+Yl9saXN0KSB7CisgICAgICAgICAgICBic2l6ZSA9IGItPmJfb2Zmc2V0OworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGItPmJfaXVzZWQ7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBpbnN0ciAqaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKKyAgICAgICAgICAgICAgICAvKiBSZWxhdGl2ZSBqdW1wcyBhcmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAgICB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBhZnRlciBmZXRjaGluZworICAgICAgICAgICAgICAgICAgIHRoZSBqdW1wIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnNpemUgKz0gaW5zdHJzaXplKGluc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdHItPmlfamFicykKKyAgICAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3BhcmcgPSBpbnN0ci0+aV90YXJnZXQtPmJfb2Zmc2V0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RyLT5pX2pyZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaW5zdHItPmlfdGFyZ2V0LT5iX29mZnNldCAtIGJzaXplOworICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGRlbHRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGFyZyA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnX2NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgIC8qIFhYWDogVGhpcyBpcyBhbiBhd2Z1bCBoYWNrIHRoYXQgY291bGQgaHVydCBwZXJmb3JtYW5jZSwgYnV0CiAgICAgICAgIG9uIHRoZSBicmlnaHQgc2lkZSBpdCBzaG91bGQgd29yayB1bnRpbCB3ZSBjb21lIHVwCiAgICAgICAgIHdpdGggYSBiZXR0ZXIgc29sdXRpb24uCiAKLSAgICAgICAgSW4gdGhlIG1lYW50aW1lLCBzaG91bGQgdGhlIGdvdG8gYmUgZHJvcHBlZCBpbiBmYXZvcgotICAgICAgICBvZiBhIGxvb3A/Ci0KICAgICAgICAgVGhlIGlzc3VlIGlzIHRoYXQgaW4gdGhlIGZpcnN0IGxvb3AgYmxvY2tzaXplKCkgaXMgY2FsbGVkCiAgICAgICAgIHdoaWNoIGNhbGxzIGluc3Ryc2l6ZSgpIHdoaWNoIHJlcXVpcmVzIGlfb3BhcmcgYmUgc2V0CiAgICAgICAgIGFwcHJvcHJpYXRlbHkuICAgICAgICAgIFRoZXJlIGlzIGEgYm9vdHN0cmFwIHByb2JsZW0gYmVjYXVzZQpAQCAtMzc2NCwxMCArMzc1Miw3IEBACiAgICAgICAgIG9uZXMgaW4ganVtcCBpbnN0cnVjdGlvbnMuICBTbyB0aGlzIHNob3VsZCBjb252ZXJnZQogICAgICAgICBmYWlybHkgcXVpY2tseS4KICAgICAqLwotICAgIGlmIChsYXN0X2V4dGVuZGVkX2FyZ19jb3VudCAhPSBleHRlbmRlZF9hcmdfY291bnQpIHsKLSAgICAgICAgbGFzdF9leHRlbmRlZF9hcmdfY291bnQgPSBleHRlbmRlZF9hcmdfY291bnQ7Ci0gICAgICAgIGdvdG8gc3RhcnQ7Ci0gICAgfQorICAgIH0gd2hpbGUgKGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ICE9IGV4dGVuZGVkX2FyZ19jb3VudCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNzgxLDYgKzM3NjYsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoZGljdCwgJnBvcywgJmssICZ2KSkgewogICAgICAgICBpID0gUHlJbnRfQVNfTE9ORyh2KTsKKyAgICAgICAgLyogVGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkgYXJlIHR1cGxlcy4gKHNlZSBjb21waWxlcl9hZGRfbykKKyAgICAgICAgICAgVGhlIG9iamVjdCB3ZSB3YW50IGlzIGFsd2F5cyBmaXJzdCwgdGhvdWdoLiAqLwogICAgICAgICBrID0gUHlUdXBsZV9HRVRfSVRFTShrLCAwKTsKICAgICAgICAgUHlfSU5DUkVGKGspOwogICAgICAgICBhc3NlcnQoKGkgLSBvZmZzZXQpIDwgc2l6ZSk7CkBAIC0zODA0LDEzICszNzkxLDExIEBACiAgICAgICAgICAgICBmbGFncyB8PSBDT19ORVNURUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9nZW5lcmF0b3IpCiAgICAgICAgICAgICBmbGFncyB8PSBDT19HRU5FUkFUT1I7CisgICAgICAgIGlmIChzdGUtPnN0ZV92YXJhcmdzKQorICAgICAgICAgICAgZmxhZ3MgfD0gQ09fVkFSQVJHUzsKKyAgICAgICAgaWYgKHN0ZS0+c3RlX3ZhcmtleXdvcmRzKQorICAgICAgICAgICAgZmxhZ3MgfD0gQ09fVkFSS0VZV09SRFM7CiAgICAgfQotICAgIGlmIChzdGUtPnN0ZV92YXJhcmdzKQotICAgICAgICBmbGFncyB8PSBDT19WQVJBUkdTOwotICAgIGlmIChzdGUtPnN0ZV92YXJrZXl3b3JkcykKLSAgICAgICAgZmxhZ3MgfD0gQ09fVkFSS0VZV09SRFM7Ci0gICAgaWYgKHN0ZS0+c3RlX2dlbmVyYXRvcikKLSAgICAgICAgZmxhZ3MgfD0gQ09fR0VORVJBVE9SOwogCiAgICAgLyogKE9ubHkpIGluaGVyaXQgY29tcGlsZXJmbGFncyBpbiBQeUNGX01BU0sgKi8KICAgICBmbGFncyB8PSAoYy0+Y19mbGFncy0+Y2ZfZmxhZ3MgJiBQeUNGX01BU0spOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R0b2EuYyBiL1B5dGhvbi9kdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkYzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9kdG9hLmMKQEAgLTAsMCArMSwyOTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTkxLCAyMDAwLCAyMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQorICogaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5CisgKiBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1IgTk9SIExVQ0VOVCBNQUtFUyBBTlkKKyAqIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQorICogT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBpcyBkdG9hLmMgYnkgRGF2aWQgTS4gR2F5LCBkb3dubG9hZGVkIGZyb20KKyAqIGh0dHA6Ly93d3cubmV0bGliLm9yZy9mcC9kdG9hLmMgb24gQXByaWwgMTUsIDIwMDkgYW5kIG1vZGlmaWVkIGZvcgorICogaW5jbHVzaW9uIGludG8gdGhlIFB5dGhvbiBjb3JlIGJ5IE1hcmsgRS4gVC4gRGlja2luc29uIGFuZCBFcmljIFYuIFNtaXRoLgorICoKKyAqIFBsZWFzZSByZW1lbWJlciB0byBjaGVjayBodHRwOi8vd3d3Lm5ldGxpYi5vcmcvZnAgcmVndWxhcmx5IChhbmQgZXNwZWNpYWxseQorICogYmVmb3JlIGFueSBQeXRob24gcmVsZWFzZSkgZm9yIGJ1Z2ZpeGVzIGFuZCB1cGRhdGVzLgorICoKKyAqIFRoZSBtYWpvciBtb2RpZmljYXRpb25zIGZyb20gR2F5J3Mgb3JpZ2luYWwgY29kZSBhcmUgYXMgZm9sbG93czoKKyAqCisgKiAgMC4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIGJlZW4gc3BlY2lhbGl6ZWQgdG8gUHl0aG9uJ3MgbmVlZHMgYnkgcmVtb3ZpbmcKKyAqICAgICBtYW55IG9mIHRoZSAjaWZkZWYnZCBzZWN0aW9ucy4gIEluIHBhcnRpY3VsYXIsIGNvZGUgdG8gc3VwcG9ydCBWQVggYW5kCisgKiAgICAgSUJNIGZsb2F0aW5nLXBvaW50IGZvcm1hdHMsIGhleCBOYU5zLCBoZXggZmxvYXRzLCBsb2NhbGUtYXdhcmUKKyAqICAgICB0cmVhdG1lbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBzZXR0aW5nIG9mIHRoZSBpbmV4YWN0IGZsYWcgaGF2ZQorICogICAgIGJlZW4gcmVtb3ZlZC4KKyAqCisgKiAgMS4gV2UgdXNlIFB5TWVtX01hbGxvYyBhbmQgUHlNZW1fRnJlZSBpbiBwbGFjZSBvZiBtYWxsb2MgYW5kIGZyZWUuCisgKgorICogIDIuIFRoZSBwdWJsaWMgZnVuY3Rpb25zIHN0cnRvZCwgZHRvYSBhbmQgZnJlZWR0b2EgYWxsIG5vdyBoYXZlCisgKiAgICAgYSBfUHlfZGdfIHByZWZpeC4KKyAqCisgKiAgMy4gSW5zdGVhZCBvZiBhc3N1bWluZyB0aGF0IFB5TWVtX01hbGxvYyBhbHdheXMgc3VjY2VlZHMsIHdlIHRocmVhZAorICogICAgIFB5TWVtX01hbGxvYyBmYWlsdXJlcyB0aHJvdWdoIHRoZSBjb2RlLiAgVGhlIGZ1bmN0aW9ucworICoKKyAqICAgICAgIEJhbGxvYywgbXVsdGFkZCwgczJiLCBpMmIsIG11bHQsIHBvdzVtdWx0LCBsc2hpZnQsIGRpZmYsIGQyYgorICoKKyAqICAgICBvZiByZXR1cm4gdHlwZSAqQmlnaW50IGFsbCByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSBhIG1hbGxvYyBmYWlsdXJlLgorICogICAgIFNpbWlsYXJseSwgcnZfYWxsb2MgYW5kIG5ydl9hbGxvYyAocmV0dXJuIHR5cGUgY2hhciAqKSByZXR1cm4gTlVMTCBvbgorICogICAgIGZhaWx1cmUuICBiaWdjb21wIG5vdyBoYXMgcmV0dXJuIHR5cGUgaW50IChpdCB1c2VkIHRvIGJlIHZvaWQpIGFuZAorICogICAgIHJldHVybnMgLTEgb24gZmFpbHVyZSBhbmQgMCBvdGhlcndpc2UuICBfUHlfZGdfZHRvYSByZXR1cm5zIE5VTEwKKyAqICAgICBvbiBmYWlsdXJlLiAgX1B5X2RnX3N0cnRvZCBpbmRpY2F0ZXMgZmFpbHVyZSBkdWUgdG8gbWFsbG9jIGZhaWx1cmUKKyAqICAgICBieSByZXR1cm5pbmcgLTEuMCwgc2V0dGluZyBlcnJubz1FTk9NRU0gYW5kICpzZSB0byBzMDAuCisgKgorICogIDQuIFRoZSBzdGF0aWMgdmFyaWFibGUgZHRvYV9yZXN1bHQgaGFzIGJlZW4gcmVtb3ZlZC4gIENhbGxlcnMgb2YKKyAqICAgICBfUHlfZGdfZHRvYSBhcmUgZXhwZWN0ZWQgdG8gY2FsbCBfUHlfZGdfZnJlZWR0b2EgdG8gZnJlZQorICogICAgIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IF9QeV9kZ19kdG9hLgorICoKKyAqICA1LiBUaGUgY29kZSBoYXMgYmVlbiByZWZvcm1hdHRlZCB0byBiZXR0ZXIgZml0IHdpdGggUHl0aG9uJ3MKKyAqICAgICBDIHN0eWxlIGd1aWRlIChQRVAgNykuCisgKgorICogIDYuIEEgYnVnIGluIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBoYXMgYmVlbiBmaXhlZDogdG8gYXZvaWQgRlJFRWluZyBtZW1vcnkKKyAqICAgICB0aGF0IGhhc24ndCBiZWVuIE1BTExPQydlZCwgcHJpdmF0ZV9tZW0gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGsgPD0KKyAqICAgICBLbWF4LgorICoKKyAqICA3LiBfUHlfZGdfc3RydG9kIGhhcyBiZWVuIG1vZGlmaWVkIHNvIHRoYXQgaXQgZG9lc24ndCBhY2NlcHQgc3RyaW5ncyB3aXRoCisgKiAgICAgbGVhZGluZyB3aGl0ZXNwYWNlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIGZvciB0aGUgb3JpZ2luYWwgZHRvYS5jIGNvZGUgdG8gRGF2aWQgTS4gR2F5IChkbWcKKyAqIGF0IGFjbSBkb3Qgb3JnLCB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCisgKiBQbGVhc2UgcmVwb3J0IGJ1Z3MgZm9yIHRoaXMgbW9kaWZpZWQgdmVyc2lvbiB1c2luZyB0aGUgUHl0aG9uIGlzc3VlIHRyYWNrZXIKKyAqIChodHRwOi8vYnVncy5weXRob24ub3JnKS4gKi8KKworLyogT24gYSBtYWNoaW5lIHdpdGggSUVFRSBleHRlbmRlZC1wcmVjaXNpb24gcmVnaXN0ZXJzLCBpdCBpcworICogbmVjZXNzYXJ5IHRvIHNwZWNpZnkgZG91YmxlLXByZWNpc2lvbiAoNTMtYml0KSByb3VuZGluZyBwcmVjaXNpb24KKyAqIGJlZm9yZSBpbnZva2luZyBzdHJ0b2Qgb3IgZHRvYS4gIElmIHRoZSBtYWNoaW5lIHVzZXMgKHRoZSBlcXVpdmFsZW50CisgKiBvZikgSW50ZWwgODB4ODcgYXJpdGhtZXRpYywgdGhlIGNhbGwKKyAqICAgICAgX2NvbnRyb2w4NyhQQ181MywgTUNXX1BDKTsKKyAqIGRvZXMgdGhpcyB3aXRoIG1hbnkgY29tcGlsZXJzLiAgV2hldGhlciB0aGlzIG9yIGFub3RoZXIgY2FsbCBpcworICogYXBwcm9wcmlhdGUgZGVwZW5kcyBvbiB0aGUgY29tcGlsZXI7IGZvciB0aGlzIHRvIHdvcmssIGl0IG1heSBiZQorICogbmVjZXNzYXJ5IHRvICNpbmNsdWRlICJmbG9hdC5oIiBvciBhbm90aGVyIHN5c3RlbS1kZXBlbmRlbnQgaGVhZGVyCisgKiBmaWxlLgorICovCisKKy8qIHN0cnRvZCBmb3IgSUVFRS0sIFZBWC0sIGFuZCBJQk0tYXJpdGhtZXRpYyBtYWNoaW5lcy4KKyAqCisgKiBUaGlzIHN0cnRvZCByZXR1cm5zIGEgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1hbAorICogc3RyaW5nIChvciBzZXRzIGVycm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGhtZXRpYywgdGllcyBhcmUKKyAqIGJyb2tlbiBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBPdGhlcndpc2UgdGllcyBhcmUgYnJva2VuIGJ5CisgKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxmIGFuZCBjaG9wKS4KKyAqCisgKiBJbnNwaXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdlcidzIHBhcGVyICJIb3cgdG8gUmVhZCBGbG9hdGluZworICogUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gOTItMTAxXS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoKKyAqICAgICAgMS4gV2Ugb25seSByZXF1aXJlIElFRUUsIElCTSwgb3IgVkFYIGRvdWJsZS1wcmVjaXNpb24KKyAqICAgICAgICAgICAgICBhcml0aG1ldGljIChub3QgSUVFRSBkb3VibGUtZXh0ZW5kZWQpLgorICogICAgICAyLiBXZSBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGluIGEgY2FzZSB0aGF0CisgKiAgICAgICAgICAgICAgQ2xpbmdlciBtaXNzZWQgLS0gd2hlbiB3ZSdyZSBjb21wdXRpbmcgZCAqIDEwXm4KKyAqICAgICAgICAgICAgICBmb3IgYSBzbWFsbCBpbnRlZ2VyIGQgYW5kIHRoZSBpbnRlZ2VyIG4gaXMgbm90IHRvbworICogICAgICAgICAgICAgIG11Y2ggbGFyZ2VyIHRoYW4gMjIgKHRoZSBtYXhpbXVtIGludGVnZXIgayBmb3Igd2hpY2gKKyAqICAgICAgICAgICAgICB3ZSBjYW4gcmVwcmVzZW50IDEwXmsgZXhhY3RseSksIHdlIG1heSBiZSBhYmxlIHRvCisgKiAgICAgICAgICAgICAgY29tcHV0ZSAoZCoxMF5rKSAqIDEwXihlLWspIHdpdGgganVzdCBvbmUgcm91bmRvZmYuCisgKiAgICAgIDMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBiaW5hcnkKKyAqICAgICAgICAgICAgICByZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50CisgKiAgICAgICAgICAgICAgYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCisgKiAgICAgICAgICAgICAgb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCisgKiAgICAgICAgICAgICAgY29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KKyAqICAgICAgNC4gQmVjYXVzZSBvZiAzLiwgd2UgZG9uJ3QgbmVlZCBhIGxhcmdlIHRhYmxlIG9mIHBvd2VycyBvZiAxMAorICogICAgICAgICAgICAgIGZvciB0ZW4tdG8tZSAoanVzdCBzb21lIHNtYWxsIHRhYmxlcywgZS5nLiBvZiAxMF5rCisgKiAgICAgICAgICAgICAgZm9yIDAgPD0gayA8PSAyMikuCisgKi8KKworLyogTGlua2luZyBvZiBQeXRob24ncyAjZGVmaW5lcyB0byBHYXkncyAjZGVmaW5lcyBzdGFydHMgaGVyZS4gKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorCisvKiBpZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSIGlzIGRlZmluZWQsIHRoZW4gZG9uJ3QgZXZlbiB0cnkgdG8gY29tcGlsZQorICAgdGhlIGZvbGxvd2luZyBjb2RlICovCisjaWZuZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKworI2luY2x1ZGUgImZsb2F0LmgiCisKKyNkZWZpbmUgTUFMTE9DIFB5TWVtX01hbGxvYworI2RlZmluZSBGUkVFIFB5TWVtX0ZyZWUKKworLyogVGhpcyBjb2RlIHNob3VsZCBhbHNvIHdvcmsgZm9yIEFSTSBtaXhlZC1lbmRpYW4gZm9ybWF0IG9uIGxpdHRsZS1lbmRpYW4KKyAgIG1hY2hpbmVzLCB3aGVyZSBkb3VibGVzIGhhdmUgYnl0ZSBvcmRlciA0NTY3MDEyMyAoaW4gaW5jcmVhc2luZyBhZGRyZXNzCisgICBvcmRlciwgMCBiZWluZyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSkuICovCisjaWZkZWYgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NAorIyAgZGVmaW5lIElFRUVfODA4NworI2VuZGlmCisjaWYgZGVmaW5lZChET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0KSB8fCAgXAorICBkZWZpbmVkKERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQpCisjICBkZWZpbmUgSUVFRV9NQzY4aworI2VuZGlmCisjaWYgZGVmaW5lZChJRUVFXzgwODcpICsgZGVmaW5lZChJRUVFX01DNjhrKSAhPSAxCisjZXJyb3IgIkV4YWN0bHkgb25lIG9mIElFRUVfODA4NyBvciBJRUVFX01DNjhrIHNob3VsZCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisvKiBUaGUgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgdGhlIGVuZGlhbm5lc3Mgb2YgaW50ZWdlcnMgbWF0Y2hlcyB0aGUKKyAgIGVuZGlhbm5lc3Mgb2YgdGhlIHR3byAzMi1iaXQgd29yZHMgb2YgYSBkb3VibGUuICBDaGVjayB0aGlzLiAqLworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKSAmJiAoZGVmaW5lZChET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKERPVUJMRV9JU19BUk1fTUlYRURfRU5ESUFOX0lFRUU3NTQpKQorI2Vycm9yICJkb3VibGVzIGFuZCBpbnRzIGhhdmUgaW5jb21wYXRpYmxlIGVuZGlhbm5lc3MiCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdPUkRTX0JJR0VORElBTikgJiYgZGVmaW5lZChET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0KQorI2Vycm9yICJkb3VibGVzIGFuZCBpbnRzIGhhdmUgaW5jb21wYXRpYmxlIGVuZGlhbm5lc3MiCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX1VJTlQzMl9UKSAmJiBkZWZpbmVkKEhBVkVfSU5UMzJfVCkKK3R5cGVkZWYgUFlfVUlOVDMyX1QgVUxvbmc7Cit0eXBlZGVmIFBZX0lOVDMyX1QgTG9uZzsKKyNlbHNlCisjZXJyb3IgIkZhaWxlZCB0byBmaW5kIGFuIGV4YWN0LXdpZHRoIDMyLWJpdCBpbnRlZ2VyIHR5cGUiCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9VSU5UNjRfVCkKKyNkZWZpbmUgVUxMb25nIFBZX1VJTlQ2NF9UCisjZWxzZQorI3VuZGVmIFVMTG9uZworI2VuZGlmCisKKyN1bmRlZiBERUJVRworI2lmZGVmIFB5X0RFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworLyogRW5kIFB5dGhvbiAjZGVmaW5lIGxpbmtpbmcgKi8KKworI2lmZGVmIERFQlVHCisjZGVmaW5lIEJ1Zyh4KSB7ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgeCk7IGV4aXQoMSk7fQorI2VuZGlmCisKKyNpZm5kZWYgUFJJVkFURV9NRU0KKyNkZWZpbmUgUFJJVkFURV9NRU0gMjMwNAorI2VuZGlmCisjZGVmaW5lIFBSSVZBVEVfbWVtICgoUFJJVkFURV9NRU0rc2l6ZW9mKGRvdWJsZSktMSkvc2l6ZW9mKGRvdWJsZSkpCitzdGF0aWMgZG91YmxlIHByaXZhdGVfbWVtW1BSSVZBVEVfbWVtXSwgKnBtZW1fbmV4dCA9IHByaXZhdGVfbWVtOworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdW5pb24geyBkb3VibGUgZDsgVUxvbmcgTFsyXTsgfSBVOworCisjaWZkZWYgSUVFRV84MDg3CisjZGVmaW5lIHdvcmQwKHgpICh4KS0+TFsxXQorI2RlZmluZSB3b3JkMSh4KSAoeCktPkxbMF0KKyNlbHNlCisjZGVmaW5lIHdvcmQwKHgpICh4KS0+TFswXQorI2RlZmluZSB3b3JkMSh4KSAoeCktPkxbMV0KKyNlbmRpZgorI2RlZmluZSBkdmFsKHgpICh4KS0+ZAorCisjaWZuZGVmIFNUUlRPRF9ESUdMSU0KKyNkZWZpbmUgU1RSVE9EX0RJR0xJTSA0MAorI2VuZGlmCisKKy8qIG1heGltdW0gcGVybWl0dGVkIGV4cG9uZW50IHZhbHVlIGZvciBzdHJ0b2Q7IGV4cG9uZW50cyBsYXJnZXIgdGhhbgorICAgTUFYX0FCU19FWFAgaW4gYWJzb2x1dGUgdmFsdWUgZ2V0IHRydW5jYXRlZCB0byArLU1BWF9BQlNfRVhQLiAgTUFYX0FCU19FWFAKKyAgIHNob3VsZCBmaXQgaW50byBhbiBpbnQuICovCisjaWZuZGVmIE1BWF9BQlNfRVhQCisjZGVmaW5lIE1BWF9BQlNfRVhQIDE5OTk5VQorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBvZiBTdG9yZWluYyBpcyBhcHByb3ByaWF0ZSBmb3IgTUlQUyBwcm9jZXNzb3JzLgorICogQW4gYWx0ZXJuYXRpdmUgdGhhdCBtaWdodCBiZSBiZXR0ZXIgb24gc29tZSBtYWNoaW5lcyBpcworICogI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCphKysgPSBiIDw8IDE2IHwgYyAmIDB4ZmZmZikKKyAqLworI2lmIGRlZmluZWQoSUVFRV84MDg3KQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVsxXSA9ICh1bnNpZ25lZCBzaG9ydCliLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCljLCBhKyspCisjZWxzZQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVswXSA9ICh1bnNpZ25lZCBzaG9ydCliLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQgKilhKVsxXSA9ICh1bnNpZ25lZCBzaG9ydCljLCBhKyspCisjZW5kaWYKKworLyogI2RlZmluZSBQIERCTF9NQU5UX0RJRyAqLworLyogVGVuX3BtYXggPSBmbG9vcihQKmxvZygyKS9sb2coNSkpICovCisvKiBCbGV0Y2ggPSAoaGlnaGVzdCBwb3dlciBvZiAyIDwgREJMX01BWF8xMF9FWFApIC8gMTYgKi8KKy8qIFF1aWNrX21heCA9IGZsb29yKChQLTEpKmxvZyhGTFRfUkFESVgpL2xvZygxMCkgLSAxKSAqLworLyogSW50X21heCA9IGZsb29yKFAqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCisKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyMAorI2RlZmluZSBFeHBfc2hpZnQxIDIwCisjZGVmaW5lIEV4cF9tc2sxICAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmZjAwMDAwCisjZGVmaW5lIFAgNTMKKyNkZWZpbmUgTmJpdHMgNTMKKyNkZWZpbmUgQmlhcyAxMDIzCisjZGVmaW5lIEVtYXggMTAyMworI2RlZmluZSBFbWluICgtMTAyMikKKyNkZWZpbmUgRXRpbnkgKC0xMDc0KSAgLyogc21hbGxlc3QgZGVub3JtYWwgaXMgMioqRXRpbnkgKi8KKyNkZWZpbmUgRXhwXzEgIDB4M2ZmMDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4M2ZmMDAwMDAKKyNkZWZpbmUgRWJpdHMgMTEKKyNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmCisjZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmZgorI2RlZmluZSBUZW5fcG1heCAyMgorI2RlZmluZSBCbGV0Y2ggMHgxMAorI2RlZmluZSBCbmRyeV9tYXNrICAweGZmZmZmCisjZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmYKKyNkZWZpbmUgU2lnbl9iaXQgMHg4MDAwMDAwMAorI2RlZmluZSBMb2cyUCAxCisjZGVmaW5lIFRpbnkwIDAKKyNkZWZpbmUgVGlueTEgMQorI2RlZmluZSBRdWlja19tYXggMTQKKyNkZWZpbmUgSW50X21heCAxNAorCisjaWZuZGVmIEZsdF9Sb3VuZHMKKyNpZmRlZiBGTFRfUk9VTkRTCisjZGVmaW5lIEZsdF9Sb3VuZHMgRkxUX1JPVU5EUworI2Vsc2UKKyNkZWZpbmUgRmx0X1JvdW5kcyAxCisjZW5kaWYKKyNlbmRpZiAvKkZsdF9Sb3VuZHMqLworCisjZGVmaW5lIFJvdW5kaW5nIEZsdF9Sb3VuZHMKKworI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpCisjZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgorCisvKiBzdHJ1Y3QgQkNpbmZvIGlzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIF9QeV9kZ19zdHJ0b2QgdG8gYmlnY29tcCAqLworCit0eXBlZGVmIHN0cnVjdCBCQ2luZm8gQkNpbmZvOworc3RydWN0CitCQ2luZm8geworICAgIGludCBlMCwgbmQsIG5kMCwgc2NhbGU7Cit9OworCisjZGVmaW5lIEZGRkZGRkZGIDB4ZmZmZmZmZmZVTAorCisjZGVmaW5lIEttYXggNworCisvKiBzdHJ1Y3QgQmlnaW50IGlzIHVzZWQgdG8gcmVwcmVzZW50IGFyYml0cmFyeS1wcmVjaXNpb24gaW50ZWdlcnMuICBUaGVzZQorICAgaW50ZWdlcnMgYXJlIHN0b3JlZCBpbiBzaWduLW1hZ25pdHVkZSBmb3JtYXQsIHdpdGggdGhlIG1hZ25pdHVkZSBzdG9yZWQgYXMKKyAgIGFuIGFycmF5IG9mIGJhc2UgMioqMzIgZGlnaXRzLiAgQmlnaW50cyBhcmUgYWx3YXlzIG5vcm1hbGl6ZWQ6IGlmIHggaXMgYQorICAgQmlnaW50IHRoZW4geC0+d2RzID49IDEsIGFuZCBlaXRoZXIgeC0+d2RzID09IDEgb3IgeFt3ZHMtMV0gaXMgbm9uemVyby4KKworICAgVGhlIEJpZ2ludCBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgLSBuZXh0IGlzIGEgaGVhZGVyIHVzZWQgYnkgQmFsbG9jIGFuZCBCZnJlZSB0byBrZWVwIHRyYWNrIG9mIGxpc3RzCisgICAgICAgICBvZiBmcmVlZCBCaWdpbnRzOyAgaXQncyBhbHNvIHVzZWQgZm9yIHRoZSBsaW5rZWQgbGlzdCBvZgorICAgICAgICAgcG93ZXJzIG9mIDUgb2YgdGhlIGZvcm0gNSoqMioqaSB1c2VkIGJ5IHBvdzVtdWx0LgorICAgICAtIGsgaW5kaWNhdGVzIHdoaWNoIHBvb2wgdGhpcyBCaWdpbnQgd2FzIGFsbG9jYXRlZCBmcm9tCisgICAgIC0gbWF4d2RzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JkcyBzcGFjZSB3YXMgYWxsb2NhdGVkIGZvcgorICAgICAgICh1c3VhbGx5IG1heHdkcyA9PSAyKiprKQorICAgICAtIHNpZ24gaXMgMSBmb3IgbmVnYXRpdmUgQmlnaW50cywgMCBmb3IgcG9zaXRpdmUuICBUaGUgc2lnbiBpcyB1bnVzZWQKKyAgICAgICAoaWdub3JlZCBvbiBpbnB1dHMsIHNldCB0byAwIG9uIG91dHB1dHMpIGluIGFsbW9zdCBhbGwgb3BlcmF0aW9ucworICAgICAgIGludm9sdmluZyBCaWdpbnRzOiBhIG5vdGFibGUgZXhjZXB0aW9uIGlzIHRoZSBkaWZmIGZ1bmN0aW9uLCB3aGljaAorICAgICAgIGlnbm9yZXMgc2lnbnMgb24gaW5wdXRzIGJ1dCBzZXRzIHRoZSBzaWduIG9mIHRoZSBvdXRwdXQgY29ycmVjdGx5LgorICAgICAtIHdkcyBpcyB0aGUgYWN0dWFsIG51bWJlciBvZiBzaWduaWZpY2FudCB3b3JkcworICAgICAtIHggY29udGFpbnMgdGhlIHZlY3RvciBvZiB3b3JkcyAoZGlnaXRzKSBmb3IgdGhpcyBCaWdpbnQsIGZyb20gbGVhc3QKKyAgICAgICBzaWduaWZpY2FudCAoeFswXSkgdG8gbW9zdCBzaWduaWZpY2FudCAoeFt3ZHMtMV0pLgorKi8KKworc3RydWN0CitCaWdpbnQgeworICAgIHN0cnVjdCBCaWdpbnQgKm5leHQ7CisgICAgaW50IGssIG1heHdkcywgc2lnbiwgd2RzOworICAgIFVMb25nIHhbMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBCaWdpbnQgQmlnaW50OworCisjaWZuZGVmIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUgorCisvKiBNZW1vcnkgbWFuYWdlbWVudDogbWVtb3J5IGlzIGFsbG9jYXRlZCBmcm9tLCBhbmQgcmV0dXJuZWQgdG8sIEttYXgrMSBwb29scworICAgb2YgbWVtb3J5LCB3aGVyZSBwb29sIGsgKDAgPD0gayA8PSBLbWF4KSBpcyBmb3IgQmlnaW50cyBiIHdpdGggYi0+bWF4d2RzID09CisgICAxIDw8IGsuICBUaGVzZSBwb29scyBhcmUgbWFpbnRhaW5lZCBhcyBsaW5rZWQgbGlzdHMsIHdpdGggZnJlZWxpc3Rba10KKyAgIHBvaW50aW5nIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGZvciBwb29sIGsuCisKKyAgIE9uIGFsbG9jYXRpb24sIGlmIHRoZXJlJ3Mgbm8gZnJlZSBzbG90IGluIHRoZSBhcHByb3ByaWF0ZSBwb29sLCBNQUxMT0MgaXMKKyAgIGNhbGxlZCB0byBnZXQgbW9yZSBtZW1vcnkuICBUaGlzIG1lbW9yeSBpcyBub3QgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbSB1bnRpbAorICAgUHl0aG9uIHF1aXRzLiAgVGhlcmUncyBhbHNvIGEgcHJpdmF0ZSBtZW1vcnkgcG9vbCB0aGF0J3MgYWxsb2NhdGVkIGZyb20KKyAgIGluIHByZWZlcmVuY2UgdG8gdXNpbmcgTUFMTE9DLgorCisgICBGb3IgQmlnaW50cyB3aXRoIG1vcmUgdGhhbiAoMSA8PCBLbWF4KSBkaWdpdHMgKHdoaWNoIGltcGxpZXMgYXQgbGVhc3QgMTIzMworICAgZGVjaW1hbCBkaWdpdHMpLCBtZW1vcnkgaXMgZGlyZWN0bHkgYWxsb2NhdGVkIHVzaW5nIE1BTExPQywgYW5kIGZyZWVkIHVzaW5nCisgICBGUkVFLgorCisgICBYWFg6IGl0IHdvdWxkIGJlIGVhc3kgdG8gYnlwYXNzIHRoaXMgbWVtb3J5LW1hbmFnZW1lbnQgc3lzdGVtIGFuZAorICAgdHJhbnNsYXRlIGVhY2ggY2FsbCB0byBCYWxsb2MgaW50byBhIGNhbGwgdG8gUHlNZW1fTWFsbG9jLCBhbmQgZWFjaAorICAgQmZyZWUgdG8gUHlNZW1fRnJlZS4gIEludmVzdGlnYXRlIHdoZXRoZXIgdGhpcyBoYXMgYW55IHNpZ25pZmljYW50CisgICBwZXJmb3JtYW5jZSBvbiBpbXBhY3QuICovCisKK3N0YXRpYyBCaWdpbnQgKmZyZWVsaXN0W0ttYXgrMV07CisKKy8qIEFsbG9jYXRlIHNwYWNlIGZvciBhIEJpZ2ludCB3aXRoIHVwIHRvIDE8PGsgZGlnaXRzICovCisKK3N0YXRpYyBCaWdpbnQgKgorQmFsbG9jKGludCBrKQoreworICAgIGludCB4OworICAgIEJpZ2ludCAqcnY7CisgICAgdW5zaWduZWQgaW50IGxlbjsKKworICAgIGlmIChrIDw9IEttYXggJiYgKHJ2ID0gZnJlZWxpc3Rba10pKQorICAgICAgICBmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OworICAgIGVsc2UgeworICAgICAgICB4ID0gMSA8PCBrOworICAgICAgICBsZW4gPSAoc2l6ZW9mKEJpZ2ludCkgKyAoeC0xKSpzaXplb2YoVUxvbmcpICsgc2l6ZW9mKGRvdWJsZSkgLSAxKQorICAgICAgICAgICAgL3NpemVvZihkb3VibGUpOworICAgICAgICBpZiAoayA8PSBLbWF4ICYmIHBtZW1fbmV4dCAtIHByaXZhdGVfbWVtICsgbGVuIDw9IFBSSVZBVEVfbWVtKSB7CisgICAgICAgICAgICBydiA9IChCaWdpbnQqKXBtZW1fbmV4dDsKKyAgICAgICAgICAgIHBtZW1fbmV4dCArPSBsZW47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBydiA9IChCaWdpbnQqKU1BTExPQyhsZW4qc2l6ZW9mKGRvdWJsZSkpOworICAgICAgICAgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcnYtPmsgPSBrOworICAgICAgICBydi0+bWF4d2RzID0geDsKKyAgICB9CisgICAgcnYtPnNpZ24gPSBydi0+d2RzID0gMDsKKyAgICByZXR1cm4gcnY7Cit9CisKKy8qIEZyZWUgYSBCaWdpbnQgYWxsb2NhdGVkIHdpdGggQmFsbG9jICovCisKK3N0YXRpYyB2b2lkCitCZnJlZShCaWdpbnQgKnYpCit7CisgICAgaWYgKHYpIHsKKyAgICAgICAgaWYgKHYtPmsgPiBLbWF4KQorICAgICAgICAgICAgRlJFRSgodm9pZCopdik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdi0+bmV4dCA9IGZyZWVsaXN0W3YtPmtdOworICAgICAgICAgICAgZnJlZWxpc3Rbdi0+a10gPSB2OworICAgICAgICB9CisgICAgfQorfQorCisjZWxzZQorCisvKiBBbHRlcm5hdGl2ZSB2ZXJzaW9ucyBvZiBCYWxsb2MgYW5kIEJmcmVlIHRoYXQgdXNlIFB5TWVtX01hbGxvYyBhbmQKKyAgIFB5TWVtX0ZyZWUgZGlyZWN0bHkgaW4gcGxhY2Ugb2YgdGhlIGN1c3RvbSBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUgYWJvdmUuCisgICBUaGVzZSBhcmUgcHJvdmlkZWQgZm9yIHRoZSBiZW5lZml0IG9mIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgbGlrZQorICAgVmFsZ3JpbmQuICovCisKKy8qIEFsbG9jYXRlIHNwYWNlIGZvciBhIEJpZ2ludCB3aXRoIHVwIHRvIDE8PGsgZGlnaXRzICovCisKK3N0YXRpYyBCaWdpbnQgKgorQmFsbG9jKGludCBrKQoreworICAgIGludCB4OworICAgIEJpZ2ludCAqcnY7CisgICAgdW5zaWduZWQgaW50IGxlbjsKKworICAgIHggPSAxIDw8IGs7CisgICAgbGVuID0gKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKFVMb25nKSArIHNpemVvZihkb3VibGUpIC0gMSkKKyAgICAgICAgL3NpemVvZihkb3VibGUpOworCisgICAgcnYgPSAoQmlnaW50KilNQUxMT0MobGVuKnNpemVvZihkb3VibGUpKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBydi0+ayA9IGs7CisgICAgcnYtPm1heHdkcyA9IHg7CisgICAgcnYtPnNpZ24gPSBydi0+d2RzID0gMDsKKyAgICByZXR1cm4gcnY7Cit9CisKKy8qIEZyZWUgYSBCaWdpbnQgYWxsb2NhdGVkIHdpdGggQmFsbG9jICovCisKK3N0YXRpYyB2b2lkCitCZnJlZShCaWdpbnQgKnYpCit7CisgICAgaWYgKHYpIHsKKyAgICAgICAgRlJFRSgodm9pZCopdik7CisgICAgfQorfQorCisjZW5kaWYgLyogUHlfVVNJTkdfTUVNT1JZX0RFQlVHR0VSICovCisKKyNkZWZpbmUgQmNvcHkoeCx5KSBtZW1jcHkoKGNoYXIgKikmeC0+c2lnbiwgKGNoYXIgKikmeS0+c2lnbiwgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHktPndkcypzaXplb2YoTG9uZykgKyAyKnNpemVvZihpbnQpKQorCisvKiBNdWx0aXBseSBhIEJpZ2ludCBiIGJ5IG0gYW5kIGFkZCBhLiAgRWl0aGVyIG1vZGlmaWVzIGIgaW4gcGxhY2UgYW5kIHJldHVybnMKKyAgIGEgcG9pbnRlciB0byB0aGUgbW9kaWZpZWQgYiwgb3IgQmZyZWVzIGIgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgY29weS4KKyAgIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMLiAgSW4gdGhpcyBjYXNlLCBiIHdpbGwgaGF2ZSBiZWVuIGFscmVhZHkgZnJlZWQuICovCisKK3N0YXRpYyBCaWdpbnQgKgorbXVsdGFkZChCaWdpbnQgKmIsIGludCBtLCBpbnQgYSkgICAgICAgLyogbXVsdGlwbHkgYnkgbSBhbmQgYWRkIGEgKi8KK3sKKyAgICBpbnQgaSwgd2RzOworI2lmZGVmIFVMTG9uZworICAgIFVMb25nICp4OworICAgIFVMTG9uZyBjYXJyeSwgeTsKKyNlbHNlCisgICAgVUxvbmcgY2FycnksICp4LCB5OworICAgIFVMb25nIHhpLCB6OworI2VuZGlmCisgICAgQmlnaW50ICpiMTsKKworICAgIHdkcyA9IGItPndkczsKKyAgICB4ID0gYi0+eDsKKyAgICBpID0gMDsKKyAgICBjYXJyeSA9IGE7CisgICAgZG8geworI2lmZGVmIFVMTG9uZworICAgICAgICB5ID0gKnggKiAoVUxMb25nKW0gKyBjYXJyeTsKKyAgICAgICAgY2FycnkgPSB5ID4+IDMyOworICAgICAgICAqeCsrID0gKFVMb25nKSh5ICYgRkZGRkZGRkYpOworI2Vsc2UKKyAgICAgICAgeGkgPSAqeDsKKyAgICAgICAgeSA9ICh4aSAmIDB4ZmZmZikgKiBtICsgY2Fycnk7CisgICAgICAgIHogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKKyAgICAgICAgY2FycnkgPSB6ID4+IDE2OworICAgICAgICAqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOworI2VuZGlmCisgICAgfQorICAgIHdoaWxlKCsraSA8IHdkcyk7CisgICAgaWYgKGNhcnJ5KSB7CisgICAgICAgIGlmICh3ZHMgPj0gYi0+bWF4d2RzKSB7CisgICAgICAgICAgICBiMSA9IEJhbGxvYyhiLT5rKzEpOworICAgICAgICAgICAgaWYgKGIxID09IE5VTEwpeworICAgICAgICAgICAgICAgIEJmcmVlKGIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQmNvcHkoYjEsIGIpOworICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICBiID0gYjE7CisgICAgICAgIH0KKyAgICAgICAgYi0+eFt3ZHMrK10gPSAoVUxvbmcpY2Fycnk7CisgICAgICAgIGItPndkcyA9IHdkczsKKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CisKKy8qIGNvbnZlcnQgYSBzdHJpbmcgcyBjb250YWluaW5nIG5kIGRlY2ltYWwgZGlnaXRzIChwb3NzaWJseSBjb250YWluaW5nIGEKKyAgIGRlY2ltYWwgc2VwYXJhdG9yIGF0IHBvc2l0aW9uIG5kMCwgd2hpY2ggaXMgaWdub3JlZCkgdG8gYSBCaWdpbnQuICBUaGlzCisgICBmdW5jdGlvbiBjYXJyaWVzIG9uIHdoZXJlIHRoZSBwYXJzaW5nIGNvZGUgaW4gX1B5X2RnX3N0cnRvZCBsZWF2ZXMgb2ZmOiBvbgorICAgZW50cnksIHk5IGNvbnRhaW5zIHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0aGUgZmlyc3QgOSBkaWdpdHMuICBSZXR1cm5zCisgICBOVUxMIG9uIGZhaWx1cmUuICovCisKK3N0YXRpYyBCaWdpbnQgKgorczJiKGNvbnN0IGNoYXIgKnMsIGludCBuZDAsIGludCBuZCwgVUxvbmcgeTkpCit7CisgICAgQmlnaW50ICpiOworICAgIGludCBpLCBrOworICAgIExvbmcgeCwgeTsKKworICAgIHggPSAobmQgKyA4KSAvIDk7CisgICAgZm9yKGsgPSAwLCB5ID0gMTsgeCA+IHk7IHkgPDw9IDEsIGsrKykgOworICAgIGIgPSBCYWxsb2Moayk7CisgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYi0+eFswXSA9IHk5OworICAgIGItPndkcyA9IDE7CisKKyAgICBpZiAobmQgPD0gOSkKKyAgICAgIHJldHVybiBiOworCisgICAgcyArPSA5OworICAgIGZvciAoaSA9IDk7IGkgPCBuZDA7IGkrKykgeworICAgICAgICBiID0gbXVsdGFkZChiLCAxMCwgKnMrKyAtICcwJyk7CisgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcysrOworICAgIGZvcig7IGkgPCBuZDsgaSsrKSB7CisgICAgICAgIGIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKKyAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworLyogY291bnQgbGVhZGluZyAwIGJpdHMgaW4gdGhlIDMyLWJpdCBpbnRlZ2VyIHguICovCisKK3N0YXRpYyBpbnQKK2hpMGJpdHMoVUxvbmcgeCkKK3sKKyAgICBpbnQgayA9IDA7CisKKyAgICBpZiAoISh4ICYgMHhmZmZmMDAwMCkpIHsKKyAgICAgICAgayA9IDE2OworICAgICAgICB4IDw8PSAxNjsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ZmYwMDAwMDApKSB7CisgICAgICAgIGsgKz0gODsKKyAgICAgICAgeCA8PD0gODsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ZjAwMDAwMDApKSB7CisgICAgICAgIGsgKz0gNDsKKyAgICAgICAgeCA8PD0gNDsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4YzAwMDAwMDApKSB7CisgICAgICAgIGsgKz0gMjsKKyAgICAgICAgeCA8PD0gMjsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4ODAwMDAwMDApKSB7CisgICAgICAgIGsrKzsKKyAgICAgICAgaWYgKCEoeCAmIDB4NDAwMDAwMDApKQorICAgICAgICAgICAgcmV0dXJuIDMyOworICAgIH0KKyAgICByZXR1cm4gazsKK30KKworLyogY291bnQgdHJhaWxpbmcgMCBiaXRzIGluIHRoZSAzMi1iaXQgaW50ZWdlciB5LCBhbmQgc2hpZnQgeSByaWdodCBieSB0aGF0CisgICBudW1iZXIgb2YgYml0cy4gKi8KKworc3RhdGljIGludAorbG8wYml0cyhVTG9uZyAqeSkKK3sKKyAgICBpbnQgazsKKyAgICBVTG9uZyB4ID0gKnk7CisKKyAgICBpZiAoeCAmIDcpIHsKKyAgICAgICAgaWYgKHggJiAxKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh4ICYgMikgeworICAgICAgICAgICAgKnkgPSB4ID4+IDE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqeSA9IHggPj4gMjsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgIGsgPSAwOworICAgIGlmICghKHggJiAweGZmZmYpKSB7CisgICAgICAgIGsgPSAxNjsKKyAgICAgICAgeCA+Pj0gMTY7CisgICAgfQorICAgIGlmICghKHggJiAweGZmKSkgeworICAgICAgICBrICs9IDg7CisgICAgICAgIHggPj49IDg7CisgICAgfQorICAgIGlmICghKHggJiAweGYpKSB7CisgICAgICAgIGsgKz0gNDsKKyAgICAgICAgeCA+Pj0gNDsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4MykpIHsKKyAgICAgICAgayArPSAyOworICAgICAgICB4ID4+PSAyOworICAgIH0KKyAgICBpZiAoISh4ICYgMSkpIHsKKyAgICAgICAgaysrOworICAgICAgICB4ID4+PSAxOworICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4gMzI7CisgICAgfQorICAgICp5ID0geDsKKyAgICByZXR1cm4gazsKK30KKworLyogY29udmVydCBhIHNtYWxsIG5vbm5lZ2F0aXZlIGludGVnZXIgdG8gYSBCaWdpbnQgKi8KKworc3RhdGljIEJpZ2ludCAqCitpMmIoaW50IGkpCit7CisgICAgQmlnaW50ICpiOworCisgICAgYiA9IEJhbGxvYygxKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBiLT54WzBdID0gaTsKKyAgICBiLT53ZHMgPSAxOworICAgIHJldHVybiBiOworfQorCisvKiBtdWx0aXBseSB0d28gQmlnaW50cy4gIFJldHVybnMgYSBuZXcgQmlnaW50LCBvciBOVUxMIG9uIGZhaWx1cmUuICBJZ25vcmVzCisgICB0aGUgc2lnbnMgb2YgYSBhbmQgYi4gKi8KKworc3RhdGljIEJpZ2ludCAqCittdWx0KEJpZ2ludCAqYSwgQmlnaW50ICpiKQoreworICAgIEJpZ2ludCAqYzsKKyAgICBpbnQgaywgd2EsIHdiLCB3YzsKKyAgICBVTG9uZyAqeCwgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YywgKnhjMDsKKyAgICBVTG9uZyB5OworI2lmZGVmIFVMTG9uZworICAgIFVMTG9uZyBjYXJyeSwgejsKKyNlbHNlCisgICAgVUxvbmcgY2FycnksIHo7CisgICAgVUxvbmcgejI7CisjZW5kaWYKKworICAgIGlmICgoIWEtPnhbMF0gJiYgYS0+d2RzID09IDEpIHx8ICghYi0+eFswXSAmJiBiLT53ZHMgPT0gMSkpIHsKKyAgICAgICAgYyA9IEJhbGxvYygwKTsKKyAgICAgICAgaWYgKGMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjLT53ZHMgPSAxOworICAgICAgICBjLT54WzBdID0gMDsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorCisgICAgaWYgKGEtPndkcyA8IGItPndkcykgeworICAgICAgICBjID0gYTsKKyAgICAgICAgYSA9IGI7CisgICAgICAgIGIgPSBjOworICAgIH0KKyAgICBrID0gYS0+azsKKyAgICB3YSA9IGEtPndkczsKKyAgICB3YiA9IGItPndkczsKKyAgICB3YyA9IHdhICsgd2I7CisgICAgaWYgKHdjID4gYS0+bWF4d2RzKQorICAgICAgICBrKys7CisgICAgYyA9IEJhbGxvYyhrKTsKKyAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IoeCA9IGMtPngsIHhhID0geCArIHdjOyB4IDwgeGE7IHgrKykKKyAgICAgICAgKnggPSAwOworICAgIHhhID0gYS0+eDsKKyAgICB4YWUgPSB4YSArIHdhOworICAgIHhiID0gYi0+eDsKKyAgICB4YmUgPSB4YiArIHdiOworICAgIHhjMCA9IGMtPng7CisjaWZkZWYgVUxMb25nCisgICAgZm9yKDsgeGIgPCB4YmU7IHhjMCsrKSB7CisgICAgICAgIGlmICgoeSA9ICp4YisrKSkgeworICAgICAgICAgICAgeCA9IHhhOworICAgICAgICAgICAgeGMgPSB4YzA7CisgICAgICAgICAgICBjYXJyeSA9IDA7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgeiA9ICp4KysgKiAoVUxMb25nKXkgKyAqeGMgKyBjYXJyeTsKKyAgICAgICAgICAgICAgICBjYXJyeSA9IHogPj4gMzI7CisgICAgICAgICAgICAgICAgKnhjKysgPSAoVUxvbmcpKHogJiBGRkZGRkZGRik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSh4IDwgeGFlKTsKKyAgICAgICAgICAgICp4YyA9IChVTG9uZyljYXJyeTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgZm9yKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7CisgICAgICAgIGlmICh5ID0gKnhiICYgMHhmZmZmKSB7CisgICAgICAgICAgICB4ID0geGE7CisgICAgICAgICAgICB4YyA9IHhjMDsKKyAgICAgICAgICAgIGNhcnJ5ID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OworICAgICAgICAgICAgICAgIGNhcnJ5ID0geiA+PiAxNjsKKyAgICAgICAgICAgICAgICB6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5OworICAgICAgICAgICAgICAgIGNhcnJ5ID0gejIgPj4gMTY7CisgICAgICAgICAgICAgICAgU3RvcmVpbmMoeGMsIHoyLCB6KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlKHggPCB4YWUpOworICAgICAgICAgICAgKnhjID0gY2Fycnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPSAqeGIgPj4gMTYpIHsKKyAgICAgICAgICAgIHggPSB4YTsKKyAgICAgICAgICAgIHhjID0geGMwOworICAgICAgICAgICAgY2FycnkgPSAwOworICAgICAgICAgICAgejIgPSAqeGM7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKyAgICAgICAgICAgICAgICBjYXJyeSA9IHogPj4gMTY7CisgICAgICAgICAgICAgICAgU3RvcmVpbmMoeGMsIHosIHoyKTsKKyAgICAgICAgICAgICAgICB6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OworICAgICAgICAgICAgICAgIGNhcnJ5ID0gejIgPj4gMTY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSh4IDwgeGFlKTsKKyAgICAgICAgICAgICp4YyA9IHoyOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgZm9yKHhjMCA9IGMtPngsIHhjID0geGMwICsgd2M7IHdjID4gMCAmJiAhKi0teGM7IC0td2MpIDsKKyAgICBjLT53ZHMgPSB3YzsKKyAgICByZXR1cm4gYzsKK30KKworI2lmbmRlZiBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIKKworLyogcDVzIGlzIGEgbGlua2VkIGxpc3Qgb2YgcG93ZXJzIG9mIDUgb2YgdGhlIGZvcm0gNSoqKDIqKmkpLCBpID49IDIgKi8KKworc3RhdGljIEJpZ2ludCAqcDVzOworCisvKiBtdWx0aXBseSB0aGUgQmlnaW50IGIgYnkgNSoqay4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSByZXN1bHQsIG9yIE5VTEwgb24KKyAgIGZhaWx1cmU7IGlmIHRoZSByZXR1cm5lZCBwb2ludGVyIGlzIGRpc3RpbmN0IGZyb20gYiB0aGVuIHRoZSBvcmlnaW5hbAorICAgQmlnaW50IGIgd2lsbCBoYXZlIGJlZW4gQmZyZWUnZC4gICBJZ25vcmVzIHRoZSBzaWduIG9mIGIuICovCisKK3N0YXRpYyBCaWdpbnQgKgorcG93NW11bHQoQmlnaW50ICpiLCBpbnQgaykKK3sKKyAgICBCaWdpbnQgKmIxLCAqcDUsICpwNTE7CisgICAgaW50IGk7CisgICAgc3RhdGljIGludCBwMDVbM10gPSB7IDUsIDI1LCAxMjUgfTsKKworICAgIGlmICgoaSA9IGsgJiAzKSkgeworICAgICAgICBiID0gbXVsdGFkZChiLCBwMDVbaS0xXSwgMCk7CisgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIShrID4+PSAyKSkKKyAgICAgICAgcmV0dXJuIGI7CisgICAgcDUgPSBwNXM7CisgICAgaWYgKCFwNSkgeworICAgICAgICAvKiBmaXJzdCB0aW1lICovCisgICAgICAgIHA1ID0gaTJiKDYyNSk7CisgICAgICAgIGlmIChwNSA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHA1cyA9IHA1OworICAgICAgICBwNS0+bmV4dCA9IDA7CisgICAgfQorICAgIGZvcig7OykgeworICAgICAgICBpZiAoayAmIDEpIHsKKyAgICAgICAgICAgIGIxID0gbXVsdChiLCBwNSk7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIGIgPSBiMTsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoayA+Pj0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcDUxID0gcDUtPm5leHQ7CisgICAgICAgIGlmICghcDUxKSB7CisgICAgICAgICAgICBwNTEgPSBtdWx0KHA1LHA1KTsKKyAgICAgICAgICAgIGlmIChwNTEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcDUxLT5uZXh0ID0gMDsKKyAgICAgICAgICAgIHA1LT5uZXh0ID0gcDUxOworICAgICAgICB9CisgICAgICAgIHA1ID0gcDUxOworICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworI2Vsc2UKKworLyogVmVyc2lvbiBvZiBwb3c1bXVsdCB0aGF0IGRvZXNuJ3QgY2FjaGUgcG93ZXJzIG9mIDUuIFByb3ZpZGVkIGZvcgorICAgdGhlIGJlbmVmaXQgb2YgbWVtb3J5IGRlYnVnZ2luZyB0b29scyBsaWtlIFZhbGdyaW5kLiAqLworCitzdGF0aWMgQmlnaW50ICoKK3BvdzVtdWx0KEJpZ2ludCAqYiwgaW50IGspCit7CisgICAgQmlnaW50ICpiMSwgKnA1LCAqcDUxOworICAgIGludCBpOworICAgIHN0YXRpYyBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07CisKKyAgICBpZiAoKGkgPSBrICYgMykpIHsKKyAgICAgICAgYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOworICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCEoayA+Pj0gMikpCisgICAgICAgIHJldHVybiBiOworICAgIHA1ID0gaTJiKDYyNSk7CisgICAgaWYgKHA1ID09IE5VTEwpIHsKKyAgICAgICAgQmZyZWUoYik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvcig7OykgeworICAgICAgICBpZiAoayAmIDEpIHsKKyAgICAgICAgICAgIGIxID0gbXVsdChiLCBwNSk7CisgICAgICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgICAgIGIgPSBiMTsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShwNSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoayA+Pj0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcDUxID0gbXVsdChwNSwgcDUpOworICAgICAgICBCZnJlZShwNSk7CisgICAgICAgIHA1ID0gcDUxOworICAgICAgICBpZiAocDUgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBCZnJlZShwNSk7CisgICAgcmV0dXJuIGI7Cit9CisKKyNlbmRpZiAvKiBQeV9VU0lOR19NRU1PUllfREVCVUdHRVIgKi8KKworLyogc2hpZnQgYSBCaWdpbnQgYiBsZWZ0IGJ5IGsgYml0cy4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHNoaWZ0ZWQgcmVzdWx0LAorICAgb3IgTlVMTCBvbiBmYWlsdXJlLiAgSWYgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMgZGlzdGluY3QgZnJvbSBiIHRoZW4gdGhlCisgICBvcmlnaW5hbCBiIHdpbGwgaGF2ZSBiZWVuIEJmcmVlJ2QuICAgSWdub3JlcyB0aGUgc2lnbiBvZiBiLiAqLworCitzdGF0aWMgQmlnaW50ICoKK2xzaGlmdChCaWdpbnQgKmIsIGludCBrKQoreworICAgIGludCBpLCBrMSwgbiwgbjE7CisgICAgQmlnaW50ICpiMTsKKyAgICBVTG9uZyAqeCwgKngxLCAqeGUsIHo7CisKKyAgICBpZiAoIWsgfHwgKCFiLT54WzBdICYmIGItPndkcyA9PSAxKSkKKyAgICAgICAgcmV0dXJuIGI7CisKKyAgICBuID0gayA+PiA1OworICAgIGsxID0gYi0+azsKKyAgICBuMSA9IG4gKyBiLT53ZHMgKyAxOworICAgIGZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEpCisgICAgICAgIGsxKys7CisgICAgYjEgPSBCYWxsb2MoazEpOworICAgIGlmIChiMSA9PSBOVUxMKSB7CisgICAgICAgIEJmcmVlKGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgeDEgPSBiMS0+eDsKKyAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICp4MSsrID0gMDsKKyAgICB4ID0gYi0+eDsKKyAgICB4ZSA9IHggKyBiLT53ZHM7CisgICAgaWYgKGsgJj0gMHgxZikgeworICAgICAgICBrMSA9IDMyIC0gazsKKyAgICAgICAgeiA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICp4MSsrID0gKnggPDwgayB8IHo7CisgICAgICAgICAgICB6ID0gKngrKyA+PiBrMTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSh4IDwgeGUpOworICAgICAgICBpZiAoKCp4MSA9IHopKQorICAgICAgICAgICAgKytuMTsKKyAgICB9CisgICAgZWxzZSBkbworICAgICAgICAgICAgICp4MSsrID0gKngrKzsKKyAgICAgICAgd2hpbGUoeCA8IHhlKTsKKyAgICBiMS0+d2RzID0gbjEgLSAxOworICAgIEJmcmVlKGIpOworICAgIHJldHVybiBiMTsKK30KKworLyogRG8gYSB0aHJlZS13YXkgY29tcGFyZSBvZiBhIGFuZCBiLCByZXR1cm5pbmcgLTEgaWYgYSA8IGIsIDAgaWYgYSA9PSBiIGFuZAorICAgMSBpZiBhID4gYi4gIElnbm9yZXMgc2lnbnMgb2YgYSBhbmQgYi4gKi8KKworc3RhdGljIGludAorY21wKEJpZ2ludCAqYSwgQmlnaW50ICpiKQoreworICAgIFVMb25nICp4YSwgKnhhMCwgKnhiLCAqeGIwOworICAgIGludCBpLCBqOworCisgICAgaSA9IGEtPndkczsKKyAgICBqID0gYi0+d2RzOworI2lmZGVmIERFQlVHCisgICAgaWYgKGkgPiAxICYmICFhLT54W2ktMV0pCisgICAgICAgIEJ1ZygiY21wIGNhbGxlZCB3aXRoIGEtPnhbYS0+d2RzLTFdID09IDAiKTsKKyAgICBpZiAoaiA+IDEgJiYgIWItPnhbai0xXSkKKyAgICAgICAgQnVnKCJjbXAgY2FsbGVkIHdpdGggYi0+eFtiLT53ZHMtMV0gPT0gMCIpOworI2VuZGlmCisgICAgaWYgKGkgLT0gaikKKyAgICAgICAgcmV0dXJuIGk7CisgICAgeGEwID0gYS0+eDsKKyAgICB4YSA9IHhhMCArIGo7CisgICAgeGIwID0gYi0+eDsKKyAgICB4YiA9IHhiMCArIGo7CisgICAgZm9yKDs7KSB7CisgICAgICAgIGlmICgqLS14YSAhPSAqLS14YikKKyAgICAgICAgICAgIHJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CisgICAgICAgIGlmICh4YSA8PSB4YTApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdGhlIGRpZmZlcmVuY2Ugb2YgQmlnaW50cyBhIGFuZCBiLCByZXR1cm5pbmcgYSBuZXcgQmlnaW50LiAgUmV0dXJucworICAgTlVMTCBvbiBmYWlsdXJlLiAgVGhlIHNpZ25zIG9mIGEgYW5kIGIgYXJlIGlnbm9yZWQsIGJ1dCB0aGUgc2lnbiBvZiB0aGUKKyAgIHJlc3VsdCBpcyBzZXQgYXBwcm9wcmlhdGVseS4gKi8KKworc3RhdGljIEJpZ2ludCAqCitkaWZmKEJpZ2ludCAqYSwgQmlnaW50ICpiKQoreworICAgIEJpZ2ludCAqYzsKKyAgICBpbnQgaSwgd2EsIHdiOworICAgIFVMb25nICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGM7CisjaWZkZWYgVUxMb25nCisgICAgVUxMb25nIGJvcnJvdywgeTsKKyNlbHNlCisgICAgVUxvbmcgYm9ycm93LCB5OworICAgIFVMb25nIHo7CisjZW5kaWYKKworICAgIGkgPSBjbXAoYSxiKTsKKyAgICBpZiAoIWkpIHsKKyAgICAgICAgYyA9IEJhbGxvYygwKTsKKyAgICAgICAgaWYgKGMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjLT53ZHMgPSAxOworICAgICAgICBjLT54WzBdID0gMDsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIGlmIChpIDwgMCkgeworICAgICAgICBjID0gYTsKKyAgICAgICAgYSA9IGI7CisgICAgICAgIGIgPSBjOworICAgICAgICBpID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBpID0gMDsKKyAgICBjID0gQmFsbG9jKGEtPmspOworICAgIGlmIChjID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGMtPnNpZ24gPSBpOworICAgIHdhID0gYS0+d2RzOworICAgIHhhID0gYS0+eDsKKyAgICB4YWUgPSB4YSArIHdhOworICAgIHdiID0gYi0+d2RzOworICAgIHhiID0gYi0+eDsKKyAgICB4YmUgPSB4YiArIHdiOworICAgIHhjID0gYy0+eDsKKyAgICBib3Jyb3cgPSAwOworI2lmZGVmIFVMTG9uZworICAgIGRvIHsKKyAgICAgICAgeSA9IChVTExvbmcpKnhhKysgLSAqeGIrKyAtIGJvcnJvdzsKKyAgICAgICAgYm9ycm93ID0geSA+PiAzMiAmIChVTG9uZykxOworICAgICAgICAqeGMrKyA9IChVTG9uZykoeSAmIEZGRkZGRkZGKTsKKyAgICB9CisgICAgd2hpbGUoeGIgPCB4YmUpOworICAgIHdoaWxlKHhhIDwgeGFlKSB7CisgICAgICAgIHkgPSAqeGErKyAtIGJvcnJvdzsKKyAgICAgICAgYm9ycm93ID0geSA+PiAzMiAmIChVTG9uZykxOworICAgICAgICAqeGMrKyA9IChVTG9uZykoeSAmIEZGRkZGRkZGKTsKKyAgICB9CisjZWxzZQorICAgIGRvIHsKKyAgICAgICAgeSA9ICgqeGEgJiAweGZmZmYpIC0gKCp4YiAmIDB4ZmZmZikgLSBib3Jyb3c7CisgICAgICAgIGJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisgICAgICAgIHogPSAoKnhhKysgPj4gMTYpIC0gKCp4YisrID4+IDE2KSAtIGJvcnJvdzsKKyAgICAgICAgYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKyAgICAgICAgU3RvcmVpbmMoeGMsIHosIHkpOworICAgIH0KKyAgICB3aGlsZSh4YiA8IHhiZSk7CisgICAgd2hpbGUoeGEgPCB4YWUpIHsKKyAgICAgICAgeSA9ICgqeGEgJiAweGZmZmYpIC0gYm9ycm93OworICAgICAgICBib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworICAgICAgICB6ID0gKCp4YSsrID4+IDE2KSAtIGJvcnJvdzsKKyAgICAgICAgYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKyAgICAgICAgU3RvcmVpbmMoeGMsIHosIHkpOworICAgIH0KKyNlbmRpZgorICAgIHdoaWxlKCEqLS14YykKKyAgICAgICAgd2EtLTsKKyAgICBjLT53ZHMgPSB3YTsKKyAgICByZXR1cm4gYzsKK30KKworLyogR2l2ZW4gYSBwb3NpdGl2ZSBub3JtYWwgZG91YmxlIHgsIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHRoZQorICAgbmV4dCBkb3VibGUgdXAuICBEb2Vzbid0IGdpdmUgY29ycmVjdCByZXN1bHRzIGZvciBzdWJub3JtYWxzLiAqLworCitzdGF0aWMgZG91YmxlCit1bHAoVSAqeCkKK3sKKyAgICBMb25nIEw7CisgICAgVSB1OworCisgICAgTCA9ICh3b3JkMCh4KSAmIEV4cF9tYXNrKSAtIChQLTEpKkV4cF9tc2sxOworICAgIHdvcmQwKCZ1KSA9IEw7CisgICAgd29yZDEoJnUpID0gMDsKKyAgICByZXR1cm4gZHZhbCgmdSk7Cit9CisKKy8qIENvbnZlcnQgYSBCaWdpbnQgdG8gYSBkb3VibGUgcGx1cyBhbiBleHBvbmVudCAqLworCitzdGF0aWMgZG91YmxlCitiMmQoQmlnaW50ICphLCBpbnQgKmUpCit7CisgICAgVUxvbmcgKnhhLCAqeGEwLCB3LCB5LCB6OworICAgIGludCBrOworICAgIFUgZDsKKworICAgIHhhMCA9IGEtPng7CisgICAgeGEgPSB4YTAgKyBhLT53ZHM7CisgICAgeSA9ICotLXhhOworI2lmZGVmIERFQlVHCisgICAgaWYgKCF5KSBCdWcoInplcm8geSBpbiBiMmQiKTsKKyNlbmRpZgorICAgIGsgPSBoaTBiaXRzKHkpOworICAgICplID0gMzIgLSBrOworICAgIGlmIChrIDwgRWJpdHMpIHsKKyAgICAgICAgd29yZDAoJmQpID0gRXhwXzEgfCB5ID4+IChFYml0cyAtIGspOworICAgICAgICB3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisgICAgICAgIHdvcmQxKCZkKSA9IHkgPDwgKCgzMi1FYml0cykgKyBrKSB8IHcgPj4gKEViaXRzIC0gayk7CisgICAgICAgIGdvdG8gcmV0X2Q7CisgICAgfQorICAgIHogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKyAgICBpZiAoayAtPSBFYml0cykgeworICAgICAgICB3b3JkMCgmZCkgPSBFeHBfMSB8IHkgPDwgayB8IHogPj4gKDMyIC0gayk7CisgICAgICAgIHkgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKyAgICAgICAgd29yZDEoJmQpID0geiA8PCBrIHwgeSA+PiAoMzIgLSBrKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdvcmQwKCZkKSA9IEV4cF8xIHwgeTsKKyAgICAgICAgd29yZDEoJmQpID0gejsKKyAgICB9CisgIHJldF9kOgorICAgIHJldHVybiBkdmFsKCZkKTsKK30KKworLyogQ29udmVydCBhIHNjYWxlZCBkb3VibGUgdG8gYSBCaWdpbnQgcGx1cyBhbiBleHBvbmVudC4gIFNpbWlsYXIgdG8gZDJiLAorICAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyB0aGUgc2NhbGUgcGFyYW1ldGVyIHVzZWQgaW4gX1B5X2RnX3N0cnRvZCAod2hpY2gKKyAgIHNob3VsZCBiZSBlaXRoZXIgMCBvciAyKlApLCBhbmQgdGhlIG5vcm1hbGl6YXRpb24gZm9yIHRoZSByZXR1cm4gdmFsdWUgaXMKKyAgIGRpZmZlcmVudCAoc2VlIGJlbG93KS4gIE9uIGlucHV0LCBkIHNob3VsZCBiZSBmaW5pdGUgYW5kIG5vbm5lZ2F0aXZlLCBhbmQgZAorICAgLyAyKipzY2FsZSBzaG91bGQgYmUgZXhhY3RseSByZXByZXNlbnRhYmxlIGFzIGFuIElFRUUgNzU0IGRvdWJsZS4KKworICAgUmV0dXJucyBhIEJpZ2ludCBiIGFuZCBhbiBpbnRlZ2VyIGUgc3VjaCB0aGF0CisKKyAgICAgZHZhbChkKSAvIDIqKnNjYWxlID0gYiAqIDIqKmUuCisKKyAgIFVubGlrZSBkMmIsIGIgaXMgbm90IG5lY2Vzc2FyaWx5IG9kZDogYiBhbmQgZSBhcmUgbm9ybWFsaXplZCBzbworICAgdGhhdCBlaXRoZXIgMioqKFAtMSkgPD0gYiA8IDIqKlAgYW5kIGUgPj0gRXRpbnksIG9yIGIgPCAyKipQCisgICBhbmQgZSA9PSBFdGlueS4gIFRoaXMgYXBwbGllcyBlcXVhbGx5IHRvIGFuIGlucHV0IG9mIDAuMDogaW4gdGhhdAorICAgY2FzZSB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgYiA9IDAgYW5kIGUgPSBFdGlueS4KKworICAgVGhlIGFib3ZlIG5vcm1hbGl6YXRpb24gZW5zdXJlcyB0aGF0IGZvciBhbGwgcG9zc2libGUgaW5wdXRzIGQsCisgICAyKiplIGdpdmVzIHVscChkLzIqKnNjYWxlKS4KKworICAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCisqLworCitzdGF0aWMgQmlnaW50ICoKK3NkMmIoVSAqZCwgaW50IHNjYWxlLCBpbnQgKmUpCit7CisgICAgQmlnaW50ICpiOworCisgICAgYiA9IEJhbGxvYygxKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICAvKiBGaXJzdCBjb25zdHJ1Y3QgYiBhbmQgZSBhc3N1bWluZyB0aGF0IHNjYWxlID09IDAuICovCisgICAgYi0+d2RzID0gMjsKKyAgICBiLT54WzBdID0gd29yZDEoZCk7CisgICAgYi0+eFsxXSA9IHdvcmQwKGQpICYgRnJhY19tYXNrOworICAgICplID0gRXRpbnkgLSAxICsgKGludCkoKHdvcmQwKGQpICYgRXhwX21hc2spID4+IEV4cF9zaGlmdCk7CisgICAgaWYgKCplIDwgRXRpbnkpCisgICAgICAgICplID0gRXRpbnk7CisgICAgZWxzZQorICAgICAgICBiLT54WzFdIHw9IEV4cF9tc2sxOworCisgICAgLyogTm93IGFkanVzdCBmb3Igc2NhbGUsIHByb3ZpZGVkIHRoYXQgYiAhPSAwLiAqLworICAgIGlmIChzY2FsZSAmJiAoYi0+eFswXSB8fCBiLT54WzFdKSkgeworICAgICAgICAqZSAtPSBzY2FsZTsKKyAgICAgICAgaWYgKCplIDwgRXRpbnkpIHsKKyAgICAgICAgICAgIHNjYWxlID0gRXRpbnkgLSAqZTsKKyAgICAgICAgICAgICplID0gRXRpbnk7CisgICAgICAgICAgICAvKiBXZSBjYW4ndCBzaGlmdCBtb3JlIHRoYW4gUC0xIGJpdHMgd2l0aG91dCBzaGlmdGluZyBvdXQgYSAxLiAqLworICAgICAgICAgICAgYXNzZXJ0KDAgPCBzY2FsZSAmJiBzY2FsZSA8PSBQIC0gMSk7CisgICAgICAgICAgICBpZiAoc2NhbGUgPj0gMzIpIHsKKyAgICAgICAgICAgICAgICAvKiBUaGUgYml0cyBzaGlmdGVkIG91dCBzaG91bGQgYWxsIGJlIHplcm8uICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KGItPnhbMF0gPT0gMCk7CisgICAgICAgICAgICAgICAgYi0+eFswXSA9IGItPnhbMV07CisgICAgICAgICAgICAgICAgYi0+eFsxXSA9IDA7CisgICAgICAgICAgICAgICAgc2NhbGUgLT0gMzI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2NhbGUpIHsKKyAgICAgICAgICAgICAgICAvKiBUaGUgYml0cyBzaGlmdGVkIG91dCBzaG91bGQgYWxsIGJlIHplcm8uICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KGItPnhbMF0gPDwgKDMyIC0gc2NhbGUpID09IDApOworICAgICAgICAgICAgICAgIGItPnhbMF0gPSAoYi0+eFswXSA+PiBzY2FsZSkgfCAoYi0+eFsxXSA8PCAoMzIgLSBzY2FsZSkpOworICAgICAgICAgICAgICAgIGItPnhbMV0gPj49IHNjYWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIEVuc3VyZSBiIGlzIG5vcm1hbGl6ZWQuICovCisgICAgaWYgKCFiLT54WzFdKQorICAgICAgICBiLT53ZHMgPSAxOworCisgICAgcmV0dXJuIGI7Cit9CisKKy8qIENvbnZlcnQgYSBkb3VibGUgdG8gYSBCaWdpbnQgcGx1cyBhbiBleHBvbmVudC4gIFJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisKKyAgIEdpdmVuIGEgZmluaXRlIG5vbnplcm8gZG91YmxlIGQsIHJldHVybiBhbiBvZGQgQmlnaW50IGIgYW5kIGV4cG9uZW50ICplCisgICBzdWNoIHRoYXQgZmFicyhkKSA9IGIgKiAyKiplLiAgT24gcmV0dXJuLCAqYmJpdHMgZ2l2ZXMgdGhlIG51bWJlciBvZgorICAgc2lnbmlmaWNhbnQgYml0cyBvZiBiOyB0aGF0IGlzLCAyKiooKmJiaXRzLTEpIDw9IGIgPCAyKiooKmJiaXRzKS4KKworICAgSWYgZCBpcyB6ZXJvLCB0aGVuIGIgPT0gMCwgKmUgPT0gLTEwMTAsICpiYml0cyA9IDAuCisgKi8KKworc3RhdGljIEJpZ2ludCAqCitkMmIoVSAqZCwgaW50ICplLCBpbnQgKmJpdHMpCit7CisgICAgQmlnaW50ICpiOworICAgIGludCBkZSwgazsKKyAgICBVTG9uZyAqeCwgeSwgejsKKyAgICBpbnQgaTsKKworICAgIGIgPSBCYWxsb2MoMSk7CisgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgeCA9IGItPng7CisKKyAgICB6ID0gd29yZDAoZCkgJiBGcmFjX21hc2s7CisgICAgd29yZDAoZCkgJj0gMHg3ZmZmZmZmZjsgICAvKiBjbGVhciBzaWduIGJpdCwgd2hpY2ggd2UgaWdub3JlICovCisgICAgaWYgKChkZSA9IChpbnQpKHdvcmQwKGQpID4+IEV4cF9zaGlmdCkpKQorICAgICAgICB6IHw9IEV4cF9tc2sxOworICAgIGlmICgoeSA9IHdvcmQxKGQpKSkgeworICAgICAgICBpZiAoKGsgPSBsbzBiaXRzKCZ5KSkpIHsKKyAgICAgICAgICAgIHhbMF0gPSB5IHwgeiA8PCAoMzIgLSBrKTsKKyAgICAgICAgICAgIHogPj49IGs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeFswXSA9IHk7CisgICAgICAgIGkgPQorICAgICAgICAgICAgYi0+d2RzID0gKHhbMV0gPSB6KSA/IDIgOiAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgayA9IGxvMGJpdHMoJnopOworICAgICAgICB4WzBdID0gejsKKyAgICAgICAgaSA9CisgICAgICAgICAgICBiLT53ZHMgPSAxOworICAgICAgICBrICs9IDMyOworICAgIH0KKyAgICBpZiAoZGUpIHsKKyAgICAgICAgKmUgPSBkZSAtIEJpYXMgLSAoUC0xKSArIGs7CisgICAgICAgICpiaXRzID0gUCAtIGs7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7CisgICAgICAgICpiaXRzID0gMzIqaSAtIGhpMGJpdHMoeFtpLTFdKTsKKyAgICB9CisgICAgcmV0dXJuIGI7Cit9CisKKy8qIENvbXB1dGUgdGhlIHJhdGlvIG9mIHR3byBCaWdpbnRzLCBhcyBhIGRvdWJsZS4gIFRoZSByZXN1bHQgbWF5IGhhdmUgYW4KKyAgIGVycm9yIG9mIHVwIHRvIDIuNSB1bHBzLiAqLworCitzdGF0aWMgZG91YmxlCityYXRpbyhCaWdpbnQgKmEsIEJpZ2ludCAqYikKK3sKKyAgICBVIGRhLCBkYjsKKyAgICBpbnQgaywga2EsIGtiOworCisgICAgZHZhbCgmZGEpID0gYjJkKGEsICZrYSk7CisgICAgZHZhbCgmZGIpID0gYjJkKGIsICZrYik7CisgICAgayA9IGthIC0ga2IgKyAzMiooYS0+d2RzIC0gYi0+d2RzKTsKKyAgICBpZiAoayA+IDApCisgICAgICAgIHdvcmQwKCZkYSkgKz0gaypFeHBfbXNrMTsKKyAgICBlbHNlIHsKKyAgICAgICAgayA9IC1rOworICAgICAgICB3b3JkMCgmZGIpICs9IGsqRXhwX21zazE7CisgICAgfQorICAgIHJldHVybiBkdmFsKCZkYSkgLyBkdmFsKCZkYik7Cit9CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3RlbnNbXSA9IHsKKyAgICAxZTAsIDFlMSwgMWUyLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksCisgICAgMWUxMCwgMWUxMSwgMWUxMiwgMWUxMywgMWUxNCwgMWUxNSwgMWUxNiwgMWUxNywgMWUxOCwgMWUxOSwKKyAgICAxZTIwLCAxZTIxLCAxZTIyCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQsIDFlMTI4LCAxZTI1NiB9Oworc3RhdGljIGNvbnN0IGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0LCAxZS0xMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMDcxOTkyNTQ3NDA5OTIuKjkwMDcxOTkyNTQ3NDA5OTIuZS0yNTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPSAyXjEwNiAqIDFlLTI1NiAqLworfTsKKy8qIFRoZSBmYWN0b3Igb2YgMl41MyBpbiB0aW55dGVuc1s0XSBoZWxwcyB1cyBhdm9pZCBzZXR0aW5nIHRoZSB1bmRlcmZsb3cgKi8KKy8qIGZsYWcgdW5uZWNlc3NhcmlseS4gIEl0IGxlYWRzIHRvIGEgc29uZyBhbmQgZGFuY2UgYXQgdGhlIGVuZCBvZiBzdHJ0b2QuICovCisjZGVmaW5lIFNjYWxlX0JpdCAweDEwCisjZGVmaW5lIG5fYmlndGVucyA1CisKKyNkZWZpbmUgVUxiaXRzIDMyCisjZGVmaW5lIGtzaGlmdCA1CisjZGVmaW5lIGttYXNrIDMxCisKKworc3RhdGljIGludAorZHNoaWZ0KEJpZ2ludCAqYiwgaW50IHAyKQoreworICAgIGludCBydiA9IGhpMGJpdHMoYi0+eFtiLT53ZHMtMV0pIC0gNDsKKyAgICBpZiAocDIgPiAwKQorICAgICAgICBydiAtPSBwMjsKKyAgICByZXR1cm4gcnYgJiBrbWFzazsKK30KKworLyogc3BlY2lhbCBjYXNlIG9mIEJpZ2ludCBkaXZpc2lvbi4gIFRoZSBxdW90aWVudCBpcyBhbHdheXMgaW4gdGhlIHJhbmdlIDAgPD0KKyAgIHF1b3RpZW50IDwgMTAsIGFuZCBvbiBlbnRyeSB0aGUgZGl2aXNvciBTIGlzIG5vcm1hbGl6ZWQgc28gdGhhdCBpdHMgdG9wIDQKKyAgIGJpdHMgKDI4LS0zMSkgYXJlIHplcm8gYW5kIGJpdCAyNyBpcyBzZXQuICovCisKK3N0YXRpYyBpbnQKK3F1b3JlbShCaWdpbnQgKmIsIEJpZ2ludCAqUykKK3sKKyAgICBpbnQgbjsKKyAgICBVTG9uZyAqYngsICpieGUsIHEsICpzeCwgKnN4ZTsKKyNpZmRlZiBVTExvbmcKKyAgICBVTExvbmcgYm9ycm93LCBjYXJyeSwgeSwgeXM7CisjZWxzZQorICAgIFVMb25nIGJvcnJvdywgY2FycnksIHksIHlzOworICAgIFVMb25nIHNpLCB6LCB6czsKKyNlbmRpZgorCisgICAgbiA9IFMtPndkczsKKyNpZmRlZiBERUJVRworICAgIC8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKKyAgICAgICAgLypkZWJ1ZyovICAgICAgIEJ1Zygib3ZlcnNpemUgYiBpbiBxdW9yZW0iKTsKKyNlbmRpZgorICAgIGlmIChiLT53ZHMgPCBuKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzeCA9IFMtPng7CisgICAgc3hlID0gc3ggKyAtLW47CisgICAgYnggPSBiLT54OworICAgIGJ4ZSA9IGJ4ICsgbjsKKyAgICBxID0gKmJ4ZSAvICgqc3hlICsgMSk7ICAgICAgLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAqLworI2lmZGVmIERFQlVHCisgICAgLypkZWJ1ZyovIGlmIChxID4gOSkKKyAgICAgICAgLypkZWJ1ZyovICAgICAgIEJ1Zygib3ZlcnNpemVkIHF1b3RpZW50IGluIHF1b3JlbSIpOworI2VuZGlmCisgICAgaWYgKHEpIHsKKyAgICAgICAgYm9ycm93ID0gMDsKKyAgICAgICAgY2FycnkgPSAwOworICAgICAgICBkbyB7CisjaWZkZWYgVUxMb25nCisgICAgICAgICAgICB5cyA9ICpzeCsrICogKFVMTG9uZylxICsgY2Fycnk7CisgICAgICAgICAgICBjYXJyeSA9IHlzID4+IDMyOworICAgICAgICAgICAgeSA9ICpieCAtICh5cyAmIEZGRkZGRkZGKSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJvcnJvdyA9IHkgPj4gMzIgJiAoVUxvbmcpMTsKKyAgICAgICAgICAgICpieCsrID0gKFVMb25nKSh5ICYgRkZGRkZGRkYpOworI2Vsc2UKKyAgICAgICAgICAgIHNpID0gKnN4Kys7CisgICAgICAgICAgICB5cyA9IChzaSAmIDB4ZmZmZikgKiBxICsgY2Fycnk7CisgICAgICAgICAgICB6cyA9IChzaSA+PiAxNikgKiBxICsgKHlzID4+IDE2KTsKKyAgICAgICAgICAgIGNhcnJ5ID0genMgPj4gMTY7CisgICAgICAgICAgICB5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworICAgICAgICAgICAgYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKyAgICAgICAgICAgIHogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisgICAgICAgICAgICBib3Jyb3cgPSAoeiAmIDB4MTAwMDApID4+IDE2OworICAgICAgICAgICAgU3RvcmVpbmMoYngsIHosIHkpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgd2hpbGUoc3ggPD0gc3hlKTsKKyAgICAgICAgaWYgKCEqYnhlKSB7CisgICAgICAgICAgICBieCA9IGItPng7CisgICAgICAgICAgICB3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQorICAgICAgICAgICAgICAgIC0tbjsKKyAgICAgICAgICAgIGItPndkcyA9IG47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNtcChiLCBTKSA+PSAwKSB7CisgICAgICAgIHErKzsKKyAgICAgICAgYm9ycm93ID0gMDsKKyAgICAgICAgY2FycnkgPSAwOworICAgICAgICBieCA9IGItPng7CisgICAgICAgIHN4ID0gUy0+eDsKKyAgICAgICAgZG8geworI2lmZGVmIFVMTG9uZworICAgICAgICAgICAgeXMgPSAqc3grKyArIGNhcnJ5OworICAgICAgICAgICAgY2FycnkgPSB5cyA+PiAzMjsKKyAgICAgICAgICAgIHkgPSAqYnggLSAoeXMgJiBGRkZGRkZGRikgLSBib3Jyb3c7CisgICAgICAgICAgICBib3Jyb3cgPSB5ID4+IDMyICYgKFVMb25nKTE7CisgICAgICAgICAgICAqYngrKyA9IChVTG9uZykoeSAmIEZGRkZGRkZGKTsKKyNlbHNlCisgICAgICAgICAgICBzaSA9ICpzeCsrOworICAgICAgICAgICAgeXMgPSAoc2kgJiAweGZmZmYpICsgY2Fycnk7CisgICAgICAgICAgICB6cyA9IChzaSA+PiAxNikgKyAoeXMgPj4gMTYpOworICAgICAgICAgICAgY2FycnkgPSB6cyA+PiAxNjsKKyAgICAgICAgICAgIHkgPSAoKmJ4ICYgMHhmZmZmKSAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisgICAgICAgICAgICBib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworICAgICAgICAgICAgeiA9ICgqYnggPj4gMTYpIC0gKHpzICYgMHhmZmZmKSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJvcnJvdyA9ICh6ICYgMHgxMDAwMCkgPj4gMTY7CisgICAgICAgICAgICBTdG9yZWluYyhieCwgeiwgeSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICB3aGlsZShzeCA8PSBzeGUpOworICAgICAgICBieCA9IGItPng7CisgICAgICAgIGJ4ZSA9IGJ4ICsgbjsKKyAgICAgICAgaWYgKCEqYnhlKSB7CisgICAgICAgICAgICB3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQorICAgICAgICAgICAgICAgIC0tbjsKKyAgICAgICAgICAgIGItPndkcyA9IG47CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHE7Cit9CisKKy8qIHN1bHAoeCkgaXMgYSB2ZXJzaW9uIG9mIHVscCh4KSB0aGF0IHRha2VzIGJjLnNjYWxlIGludG8gYWNjb3VudC4KKworICAgQXNzdW1pbmcgdGhhdCB4IGlzIGZpbml0ZSBhbmQgbm9ubmVnYXRpdmUgKHBvc2l0aXZlIHplcm8gaXMgZmluZQorICAgaGVyZSkgYW5kIHggLyAyXmJjLnNjYWxlIGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIGRvdWJsZSwKKyAgIHN1bHAoeCkgaXMgZXF1aXZhbGVudCB0byAyXmJjLnNjYWxlICogdWxwKHggLyAyXmJjLnNjYWxlKS4gKi8KKworc3RhdGljIGRvdWJsZQorc3VscChVICp4LCBCQ2luZm8gKmJjKQoreworICAgIFUgdTsKKworICAgIGlmIChiYy0+c2NhbGUgJiYgMipQICsgMSA+IChpbnQpKCh3b3JkMCh4KSAmIEV4cF9tYXNrKSA+PiBFeHBfc2hpZnQpKSB7CisgICAgICAgIC8qIHJ2LzJeYmMtPnNjYWxlIGlzIHN1Ym5vcm1hbCAqLworICAgICAgICB3b3JkMCgmdSkgPSAoUCsyKSpFeHBfbXNrMTsKKyAgICAgICAgd29yZDEoJnUpID0gMDsKKyAgICAgICAgcmV0dXJuIHUuZDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydCh3b3JkMCh4KSB8fCB3b3JkMSh4KSk7IC8qIHggIT0gMC4wICovCisgICAgICAgIHJldHVybiB1bHAoeCk7CisgICAgfQorfQorCisvKiBUaGUgYmlnY29tcCBmdW5jdGlvbiBoYW5kbGVzIHNvbWUgaGFyZCBjYXNlcyBmb3Igc3RydG9kLCBmb3IgaW5wdXRzCisgICB3aXRoIG1vcmUgdGhhbiBTVFJUT0RfRElHTElNIGRpZ2l0cy4gIEl0J3MgY2FsbGVkIG9uY2UgYW4gaW5pdGlhbAorICAgZXN0aW1hdGUgZm9yIHRoZSBkb3VibGUgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgc3RyaW5nIGhhcworICAgYWxyZWFkeSBiZWVuIG9idGFpbmVkIGJ5IHRoZSBjb2RlIGluIF9QeV9kZ19zdHJ0b2QuCisKKyAgIFRoZSBiaWdjb21wIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGFmdGVyIF9QeV9kZ19zdHJ0b2QgaGFzIGZvdW5kIGEKKyAgIGRvdWJsZSB2YWx1ZSBydiBzdWNoIHRoYXQgZWl0aGVyIHJ2IG9yIHJ2ICsgMXVscCByZXByZXNlbnRzIHRoZQorICAgY29ycmVjdGx5IHJvdW5kZWQgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgb3JpZ2luYWwgc3RyaW5nLiAgSXQKKyAgIGRldGVybWluZXMgd2hpY2ggb2YgdGhlc2UgdHdvIHZhbHVlcyBpcyB0aGUgY29ycmVjdCBvbmUgYnkKKyAgIGNvbXB1dGluZyB0aGUgZGVjaW1hbCBkaWdpdHMgb2YgcnYgKyAwLjV1bHAgYW5kIGNvbXBhcmluZyB0aGVtIHdpdGgKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGRpZ2l0cyBvZiBzMC4KKworICAgSW4gdGhlIGZvbGxvd2luZywgd3JpdGUgZHYgZm9yIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIHJlcHJlc2VudGVkCisgICBieSB0aGUgaW5wdXQgc3RyaW5nLgorCisgICBJbnB1dHM6CisKKyAgICAgczAgcG9pbnRzIHRvIHRoZSBmaXJzdCBzaWduaWZpY2FudCBkaWdpdCBvZiB0aGUgaW5wdXQgc3RyaW5nLgorCisgICAgIHJ2IGlzIGEgKHBvc3NpYmx5IHNjYWxlZCkgZXN0aW1hdGUgZm9yIHRoZSBjbG9zZXN0IGRvdWJsZSB2YWx1ZSB0byB0aGUKKyAgICAgICAgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIG9yaWdpbmFsIGlucHV0IHRvIF9QeV9kZ19zdHJ0b2QuICBJZgorICAgICAgICBiYy0+c2NhbGUgaXMgbm9uemVybywgdGhlbiBydi8yXihiYy0+c2NhbGUpIGlzIHRoZSBhcHByb3hpbWF0aW9uIHRvCisgICAgICAgIHRoZSBpbnB1dCB2YWx1ZS4KKworICAgICBiYyBpcyBhIHN0cnVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGdhdGhlcmVkIGR1cmluZyB0aGUgcGFyc2luZyBhbmQKKyAgICAgICAgZXN0aW1hdGlvbiBzdGVwcyBvZiBfUHlfZGdfc3RydG9kLiAgRGVzY3JpcHRpb24gb2YgZmllbGRzIGZvbGxvd3M6CisKKyAgICAgICAgYmMtPmUwIGdpdmVzIHRoZSBleHBvbmVudCBvZiB0aGUgaW5wdXQgdmFsdWUsIHN1Y2ggdGhhdCBkdiA9IChpbnRlZ2VyCisgICAgICAgICAgIGdpdmVuIGJ5IHRoZSBiZC0+bmQgZGlnaXRzIG9mIHMwKSAqIDEwKiplMAorCisgICAgICAgIGJjLT5uZCBnaXZlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiBzMC4gIEl0IHdpbGwKKyAgICAgICAgICAgYmUgYXQgbGVhc3QgMS4KKworICAgICAgICBiYy0+bmQwIGdpdmVzIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHMwIGJlZm9yZSB0aGUKKyAgICAgICAgICAgZGVjaW1hbCBzZXBhcmF0b3IuICBJZiB0aGVyZSdzIG5vIGRlY2ltYWwgc2VwYXJhdG9yLCBiYy0+bmQwID09CisgICAgICAgICAgIGJjLT5uZC4KKworICAgICAgICBiYy0+c2NhbGUgaXMgdGhlIHZhbHVlIHVzZWQgdG8gc2NhbGUgcnYgdG8gYXZvaWQgZG9pbmcgYXJpdGhtZXRpYyB3aXRoCisgICAgICAgICAgIHN1Ym5vcm1hbCB2YWx1ZXMuICBJdCdzIGVpdGhlciAwIG9yIDIqUCAoPTEwNikuCisKKyAgIE91dHB1dHM6CisKKyAgICAgT24gc3VjY2Vzc2Z1bCBleGl0LCBydi8yXihiYy0+c2NhbGUpIGlzIHRoZSBjbG9zZXN0IGRvdWJsZSB0byBkdi4KKworICAgICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZSAoZS5nLiwgZHVlIHRvIGEgZmFpbGVkIG1hbGxvYyBjYWxsKS4gKi8KKworc3RhdGljIGludAorYmlnY29tcChVICpydiwgY29uc3QgY2hhciAqczAsIEJDaW5mbyAqYmMpCit7CisgICAgQmlnaW50ICpiLCAqZDsKKyAgICBpbnQgYjIsIGQyLCBkZCwgaSwgbmQsIG5kMCwgb2RkLCBwMiwgcDU7CisKKyAgICBuZCA9IGJjLT5uZDsKKyAgICBuZDAgPSBiYy0+bmQwOworICAgIHA1ID0gbmQgKyBiYy0+ZTA7CisgICAgYiA9IHNkMmIocnYsIGJjLT5zY2FsZSwgJnAyKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiByZWNvcmQgd2hldGhlciB0aGUgbHNiIG9mIHJ2LzJeKGJjLT5zY2FsZSkgaXMgb2RkOiAgaW4gdGhlIGV4YWN0IGhhbGZ3YXkKKyAgICAgICBjYXNlLCB0aGlzIGlzIHVzZWQgZm9yIHJvdW5kIHRvIGV2ZW4uICovCisgICAgb2RkID0gYi0+eFswXSAmIDE7CisKKyAgICAvKiBsZWZ0IHNoaWZ0IGIgYnkgMSBiaXQgYW5kIG9yIGEgMSBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQ7CisgICAgICAgdGhpcyBnaXZlcyB1cyBiICogMioqcDIgPSBydi8yXihiYy0+c2NhbGUpICsgMC41IHVscC4gKi8KKyAgICBiID0gbHNoaWZ0KGIsIDEpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBiLT54WzBdIHw9IDE7CisgICAgcDItLTsKKworICAgIHAyIC09IHA1OworICAgIGQgPSBpMmIoMSk7CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICBCZnJlZShiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50czoKKyAgICAgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRpbmcgMCBiaXRzLgorICAgICAqLworICAgIGlmIChwNSA+IDApIHsKKyAgICAgICAgZCA9IHBvdzVtdWx0KGQsIHA1KTsKKyAgICAgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAocDUgPCAwKSB7CisgICAgICAgIGIgPSBwb3c1bXVsdChiLCAtcDUpOworICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocDIgPiAwKSB7CisgICAgICAgIGIyID0gcDI7CisgICAgICAgIGQyID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGIyID0gMDsKKyAgICAgICAgZDIgPSAtcDI7CisgICAgfQorICAgIGkgPSBkc2hpZnQoZCwgZDIpOworICAgIGlmICgoYjIgKz0gaSkgPiAwKSB7CisgICAgICAgIGIgPSBsc2hpZnQoYiwgYjIpOworICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKGQyICs9IGkpID4gMCkgeworICAgICAgICBkID0gbHNoaWZ0KGQsIGQyKTsKKyAgICAgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb21wYXJlIHMwIHdpdGggYi9kOiBzZXQgZGQgdG8gLTEsIDAsIG9yIDEgYWNjb3JkaW5nIGFzIHMwIDwgYi9kLCBzMCA9PQorICAgICAqIGIvZCwgb3IgczAgPiBiL2QuICBIZXJlIHRoZSBkaWdpdHMgb2YgczAgYXJlIHRob3VnaHQgb2YgYXMgcmVwcmVzZW50aW5nCisgICAgICogYSBudW1iZXIgaW4gdGhlIHJhbmdlIFswLjEsIDEpLiAqLworICAgIGlmIChjbXAoYiwgZCkgPj0gMCkKKyAgICAgICAgLyogYi9kID49IDEgKi8KKyAgICAgICAgZGQgPSAtMTsKKyAgICBlbHNlIHsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgYiA9IG11bHRhZGQoYiwgMTAsIDApOworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRkID0gczBbaSA8IG5kMCA/IGkgOiBpKzFdIC0gJzAnIC0gcXVvcmVtKGIsIGQpOworICAgICAgICAgICAgaSsrOworCisgICAgICAgICAgICBpZiAoZGQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWItPnhbMF0gJiYgYi0+d2RzID09IDEpIHsKKyAgICAgICAgICAgICAgICAvKiBiL2QgPT0gMCAqLworICAgICAgICAgICAgICAgIGRkID0gaSA8IG5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEoaSA8IG5kKSkgeworICAgICAgICAgICAgICAgIC8qIGIvZCAhPSAwLCBidXQgZGlnaXRzIG9mIHMwIGV4aGF1c3RlZCAqLworICAgICAgICAgICAgICAgIGRkID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQmZyZWUoYik7CisgICAgQmZyZWUoZCk7CisgICAgaWYgKGRkID4gMCB8fCAoZGQgPT0gMCAmJiBvZGQpKQorICAgICAgICBkdmFsKHJ2KSArPSBzdWxwKHJ2LCBiYyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZQorX1B5X2RnX3N0cnRvZChjb25zdCBjaGFyICpzMDAsIGNoYXIgKipzZSkKK3sKKyAgICBpbnQgYmIyLCBiYjUsIGJiZSwgYmQyLCBiZDUsIGJzMiwgYywgZHNpZ24sIGUsIGUxLCBlcnJvcjsKKyAgICBpbnQgZXNpZ24sIGksIGosIGssIGx6LCBuZCwgbmQwLCBvZGQsIHNpZ247CisgICAgY29uc3QgY2hhciAqcywgKnMwLCAqczE7CisgICAgZG91YmxlIGFhZGosIGFhZGoxOworICAgIFUgYWFkajIsIGFkaiwgcnYsIHJ2MDsKKyAgICBVTG9uZyB5LCB6LCBhYnNfZXhwOworICAgIExvbmcgTDsKKyAgICBCQ2luZm8gYmM7CisgICAgQmlnaW50ICpiYiwgKmJiMSwgKmJkLCAqYmQwLCAqYnMsICpkZWx0YTsKKworICAgIGR2YWwoJnJ2KSA9IDAuOworCisgICAgLyogU3RhcnQgcGFyc2luZy4gKi8KKyAgICBjID0gKihzID0gczAwKTsKKworICAgIC8qIFBhcnNlIG9wdGlvbmFsIHNpZ24sIGlmIHByZXNlbnQuICovCisgICAgc2lnbiA9IDA7CisgICAgc3dpdGNoIChjKSB7CisgICAgY2FzZSAnLSc6CisgICAgICAgIHNpZ24gPSAxOworICAgICAgICAvKiBubyBicmVhayAqLworICAgIGNhc2UgJysnOgorICAgICAgICBjID0gKisrczsKKyAgICB9CisKKyAgICAvKiBTa2lwIGxlYWRpbmcgemVyb3M6IGx6IGlzIHRydWUgaWZmIHRoZXJlIHdlcmUgbGVhZGluZyB6ZXJvcy4gKi8KKyAgICBzMSA9IHM7CisgICAgd2hpbGUgKGMgPT0gJzAnKQorICAgICAgICBjID0gKisrczsKKyAgICBseiA9IHMgIT0gczE7CisKKyAgICAvKiBQb2ludCBzMCBhdCB0aGUgZmlyc3Qgbm9uemVybyBkaWdpdCAoaWYgYW55KS4gIG5kMCB3aWxsIGJlIHRoZSBwb3NpdGlvbgorICAgICAgIG9mIHRoZSBwb2ludCByZWxhdGl2ZSB0byBzMC4gIG5kIHdpbGwgYmUgdGhlIHRvdGFsIG51bWJlciBvZiBkaWdpdHMKKyAgICAgICBpZ25vcmluZyBsZWFkaW5nIHplcm9zLiAqLworICAgIHMwID0gczEgPSBzOworICAgIHdoaWxlICgnMCcgPD0gYyAmJiBjIDw9ICc5JykKKyAgICAgICAgYyA9ICorK3M7CisgICAgbmQwID0gbmQgPSBzIC0gczE7CisKKyAgICAvKiBQYXJzZSBkZWNpbWFsIHBvaW50IGFuZCBmb2xsb3dpbmcgZGlnaXRzLiAqLworICAgIGlmIChjID09ICcuJykgeworICAgICAgICBjID0gKisrczsKKyAgICAgICAgaWYgKCFuZCkgeworICAgICAgICAgICAgczEgPSBzOworICAgICAgICAgICAgd2hpbGUgKGMgPT0gJzAnKQorICAgICAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICAgICAgbHogPSBseiB8fCBzICE9IHMxOworICAgICAgICAgICAgbmQwIC09IHMgLSBzMTsKKyAgICAgICAgICAgIHMwID0gczsKKyAgICAgICAgfQorICAgICAgICBzMSA9IHM7CisgICAgICAgIHdoaWxlICgnMCcgPD0gYyAmJiBjIDw9ICc5JykKKyAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICBuZCArPSBzIC0gczE7CisgICAgfQorCisgICAgLyogTm93IGx6IGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgd2VyZSBsZWFkaW5nIHplcm8gZGlnaXRzLCBhbmQgbmQKKyAgICAgICBnaXZlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGRpZ2l0cyBpZ25vcmluZyBsZWFkaW5nIHplcm9zLiAgQSB2YWxpZCBpbnB1dAorICAgICAgIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQuICovCisgICAgaWYgKCFuZCAmJiAhbHopIHsKKyAgICAgICAgaWYgKHNlKQorICAgICAgICAgICAgKnNlID0gKGNoYXIgKilzMDA7CisgICAgICAgIGdvdG8gcGFyc2VfZXJyb3I7CisgICAgfQorCisgICAgLyogUGFyc2UgZXhwb25lbnQuICovCisgICAgZSA9IDA7CisgICAgaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7CisgICAgICAgIHMwMCA9IHM7CisgICAgICAgIGMgPSAqKytzOworCisgICAgICAgIC8qIEV4cG9uZW50IHNpZ24uICovCisgICAgICAgIGVzaWduID0gMDsKKyAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgZXNpZ24gPSAxOworICAgICAgICAgICAgLyogbm8gYnJlYWsgKi8KKyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICBjID0gKisrczsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNraXAgemVyb3MuICBseiBpcyB0cnVlIGlmZiB0aGVyZSBhcmUgbGVhZGluZyB6ZXJvcy4gKi8KKyAgICAgICAgczEgPSBzOworICAgICAgICB3aGlsZSAoYyA9PSAnMCcpCisgICAgICAgICAgICBjID0gKisrczsKKyAgICAgICAgbHogPSBzICE9IHMxOworCisgICAgICAgIC8qIEdldCBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZXhwb25lbnQuICovCisgICAgICAgIHMxID0gczsKKyAgICAgICAgYWJzX2V4cCA9IDA7CisgICAgICAgIHdoaWxlICgnMCcgPD0gYyAmJiBjIDw9ICc5JykgeworICAgICAgICAgICAgYWJzX2V4cCA9IDEwKmFic19leHAgKyAoYyAtICcwJyk7CisgICAgICAgICAgICBjID0gKisrczsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFic19leHAgd2lsbCBiZSBjb3JyZWN0IG1vZHVsbyAyKiozMi4gIEJ1dCAxMCoqOSA8IDIqKjMyLCBzbyBpZgorICAgICAgICAgICB0aGVyZSBhcmUgYXQgbW9zdCA5IHNpZ25pZmljYW50IGV4cG9uZW50IGRpZ2l0cyB0aGVuIG92ZXJmbG93IGlzCisgICAgICAgICAgIGltcG9zc2libGUuICovCisgICAgICAgIGlmIChzIC0gczEgPiA5IHx8IGFic19leHAgPiBNQVhfQUJTX0VYUCkKKyAgICAgICAgICAgIGUgPSAoaW50KU1BWF9BQlNfRVhQOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlID0gKGludClhYnNfZXhwOworICAgICAgICBpZiAoZXNpZ24pCisgICAgICAgICAgICBlID0gLWU7CisKKyAgICAgICAgLyogQSB2YWxpZCBleHBvbmVudCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGRpZ2l0LiAqLworICAgICAgICBpZiAocyA9PSBzMSAmJiAhbHopCisgICAgICAgICAgICBzID0gczAwOworICAgIH0KKworICAgIC8qIEFkanVzdCBleHBvbmVudCB0byB0YWtlIGludG8gYWNjb3VudCBwb3NpdGlvbiBvZiB0aGUgcG9pbnQuICovCisgICAgZSAtPSBuZCAtIG5kMDsKKyAgICBpZiAobmQwIDw9IDApCisgICAgICAgIG5kMCA9IG5kOworCisgICAgLyogRmluaXNoZWQgcGFyc2luZy4gIFNldCBzZSB0byBpbmRpY2F0ZSBob3cgZmFyIHdlIHBhcnNlZCAqLworICAgIGlmIChzZSkKKyAgICAgICAgKnNlID0gKGNoYXIgKilzOworCisgICAgLyogSWYgYWxsIGRpZ2l0cyB3ZXJlIHplcm8sIGV4aXQgd2l0aCByZXR1cm4gdmFsdWUgKy0wLjAuICBPdGhlcndpc2UsCisgICAgICAgc3RyaXAgdHJhaWxpbmcgemVyb3M6IHNjYW4gYmFjayB1bnRpbCB3ZSBoaXQgYSBub256ZXJvIGRpZ2l0LiAqLworICAgIGlmICghbmQpCisgICAgICAgIGdvdG8gcmV0OworICAgIGZvciAoaSA9IG5kOyBpID4gMDsgKSB7CisgICAgICAgIC0taTsKKyAgICAgICAgaWYgKHMwW2kgPCBuZDAgPyBpIDogaSsxXSAhPSAnMCcpIHsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGUgKz0gbmQgLSBpOworICAgIG5kID0gaTsKKyAgICBpZiAobmQwID4gbmQpCisgICAgICAgIG5kMCA9IG5kOworCisgICAgLyogU3VtbWFyeSBvZiBwYXJzaW5nIHJlc3VsdHMuICBBZnRlciBwYXJzaW5nLCBhbmQgZGVhbGluZyB3aXRoIHplcm8KKyAgICAgKiBpbnB1dHMsIHdlIGhhdmUgdmFsdWVzIHMwLCBuZDAsIG5kLCBlLCBzaWduLCB3aGVyZToKKyAgICAgKgorICAgICAqICAtIHMwIHBvaW50cyB0byB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgdGhlIGlucHV0IHN0cmluZworICAgICAqCisgICAgICogIC0gbmQgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgKGhlcmUsIGFuZAorICAgICAqICAgIGJlbG93LCAnc2lnbmlmaWNhbnQgZGlnaXRzJyBtZWFucyB0aGUgc2V0IG9mIGRpZ2l0cyBvZiB0aGUKKyAgICAgKiAgICBzaWduaWZpY2FuZCBvZiB0aGUgaW5wdXQgdGhhdCByZW1haW4gYWZ0ZXIgaWdub3JpbmcgbGVhZGluZworICAgICAqICAgIGFuZCB0cmFpbGluZyB6ZXJvcykuCisgICAgICoKKyAgICAgKiAgLSBuZDAgaW5kaWNhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVjaW1hbCBwb2ludCwgaWYgcHJlc2VudDsgaXQKKyAgICAgKiAgICBzYXRpc2ZpZXMgMSA8PSBuZDAgPD0gbmQuICBUaGUgbmQgc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSBpbgorICAgICAqICAgIHMwWzA6bmQwXSBhbmQgczBbbmQwKzE6bmQrMV0gdXNpbmcgdGhlIHVzdWFsIFB5dGhvbiBoYWxmLW9wZW4gc2xpY2UKKyAgICAgKiAgICBub3RhdGlvbi4gIChJZiBuZDAgPCBuZCwgdGhlbiBzMFtuZDBdIGNvbnRhaW5zIGEgJy4nICBjaGFyYWN0ZXI7IGlmCisgICAgICogICAgbmQwID09IG5kLCB0aGVuIHMwW25kMF0gY291bGQgYmUgYW55IG5vbi1kaWdpdCBjaGFyYWN0ZXIuKQorICAgICAqCisgICAgICogIC0gZSBpcyB0aGUgYWRqdXN0ZWQgZXhwb25lbnQ6IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyCisgICAgICogICAgcmVwcmVzZW50ZWQgYnkgdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZyBpcyBuICogMTAqKmUsIHdoZXJlCisgICAgICogICAgbiBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aGUgY29uY2F0ZW5hdGlvbiBvZgorICAgICAqICAgIHMwWzA6bmQwXSBhbmQgczBbbmQwKzE6bmQrMV0KKyAgICAgKgorICAgICAqICAtIHNpZ24gZ2l2ZXMgdGhlIHNpZ24gb2YgdGhlIGlucHV0OiAgMSBmb3IgbmVnYXRpdmUsIDAgZm9yIHBvc2l0aXZlCisgICAgICoKKyAgICAgKiAgLSB0aGUgZmlyc3QgYW5kIGxhc3Qgc2lnbmlmaWNhbnQgZGlnaXRzIGFyZSBub256ZXJvCisgICAgICovCisKKyAgICAvKiBwdXQgZmlyc3QgREJMX0RJRysxIGRpZ2l0cyBpbnRvIGludGVnZXIgeSBhbmQgei4KKyAgICAgKgorICAgICAqICAtIHkgY29udGFpbnMgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBmaXJzdCBtaW4oOSwgbmQpCisgICAgICogICAgc2lnbmlmaWNhbnQgZGlnaXRzCisgICAgICoKKyAgICAgKiAgLSBpZiBuZCA+IDksIHogY29udGFpbnMgdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHNpZ25pZmljYW50IGRpZ2l0cworICAgICAqICAgIHdpdGggaW5kaWNlcyBpbiBbOSwgbWluKDE2LCBuZCkpLiAgU28geSAqIDEwKioobWluKDE2LCBuZCkgLSA5KSArIHoKKyAgICAgKiAgICBnaXZlcyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0IG1pbigxNiwgbmQpIHNpZy4gZGlnaXRzLgorICAgICAqLworCisgICAgYmMuZTAgPSBlMSA9IGU7CisgICAgeSA9IHogPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBuZDsgaSsrKSB7CisgICAgICAgIGlmIChpIDwgOSkKKyAgICAgICAgICAgIHkgPSAxMCp5ICsgczBbaSA8IG5kMCA/IGkgOiBpKzFdIC0gJzAnOworICAgICAgICBlbHNlIGlmIChpIDwgREJMX0RJRysxKQorICAgICAgICAgICAgeiA9IDEwKnogKyBzMFtpIDwgbmQwID8gaSA6IGkrMV0gLSAnMCc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGsgPSBuZCA8IERCTF9ESUcgKyAxID8gbmQgOiBEQkxfRElHICsgMTsKKyAgICBkdmFsKCZydikgPSB5OworICAgIGlmIChrID4gOSkgeworICAgICAgICBkdmFsKCZydikgPSB0ZW5zW2sgLSA5XSAqIGR2YWwoJnJ2KSArIHo7CisgICAgfQorICAgIGJkMCA9IDA7CisgICAgaWYgKG5kIDw9IERCTF9ESUcKKyAgICAgICAgJiYgRmx0X1JvdW5kcyA9PSAxCisgICAgICAgICkgeworICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgaWYgKGUgPiAwKSB7CisgICAgICAgICAgICBpZiAoZSA8PSBUZW5fcG1heCkgeworICAgICAgICAgICAgICAgIGR2YWwoJnJ2KSAqPSB0ZW5zW2VdOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IERCTF9ESUcgLSBuZDsKKyAgICAgICAgICAgIGlmIChlIDw9IFRlbl9wbWF4ICsgaSkgeworICAgICAgICAgICAgICAgIC8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KKyAgICAgICAgICAgICAgICAgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZSAtPSBpOworICAgICAgICAgICAgICAgIGR2YWwoJnJ2KSAqPSB0ZW5zW2ldOworICAgICAgICAgICAgICAgIGR2YWwoJnJ2KSAqPSB0ZW5zW2VdOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGUgPj0gLVRlbl9wbWF4KSB7CisgICAgICAgICAgICBkdmFsKCZydikgLz0gdGVuc1stZV07CisgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlMSArPSBuZCAtIGs7CisKKyAgICBiYy5zY2FsZSA9IDA7CisKKyAgICAvKiBHZXQgc3RhcnRpbmcgYXBwcm94aW1hdGlvbiA9IHJ2ICogMTAqKmUxICovCisKKyAgICBpZiAoZTEgPiAwKSB7CisgICAgICAgIGlmICgoaSA9IGUxICYgMTUpKQorICAgICAgICAgICAgZHZhbCgmcnYpICo9IHRlbnNbaV07CisgICAgICAgIGlmIChlMSAmPSB+MTUpIHsKKyAgICAgICAgICAgIGlmIChlMSA+IERCTF9NQVhfMTBfRVhQKQorICAgICAgICAgICAgICAgIGdvdG8gb3ZmbDsKKyAgICAgICAgICAgIGUxID4+PSA0OworICAgICAgICAgICAgZm9yKGogPSAwOyBlMSA+IDE7IGorKywgZTEgPj49IDEpCisgICAgICAgICAgICAgICAgaWYgKGUxICYgMSkKKyAgICAgICAgICAgICAgICAgICAgZHZhbCgmcnYpICo9IGJpZ3RlbnNbal07CisgICAgICAgICAgICAvKiBUaGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCBvdmVyZmxvdy4gKi8KKyAgICAgICAgICAgIHdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKyAgICAgICAgICAgIGR2YWwoJnJ2KSAqPSBiaWd0ZW5zW2pdOworICAgICAgICAgICAgaWYgKCh6ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorICAgICAgICAgICAgICAgID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpCisgICAgICAgICAgICAgICAgZ290byBvdmZsOworICAgICAgICAgICAgaWYgKHogPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xLVApKSB7CisgICAgICAgICAgICAgICAgLyogc2V0IHRvIGxhcmdlc3QgbnVtYmVyICovCisgICAgICAgICAgICAgICAgLyogKENhbid0IHRydXN0IERCTF9NQVgpICovCisgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSA9IEJpZzA7CisgICAgICAgICAgICAgICAgd29yZDEoJnJ2KSA9IEJpZzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGUxIDwgMCkgeworICAgICAgICAvKiBUaGUgaW5wdXQgZGVjaW1hbCB2YWx1ZSBsaWVzIGluIFsxMCoqZTEsIDEwKiooZTErMTYpKS4KKworICAgICAgICAgICBJZiBlMSA8PSAtNTEyLCB1bmRlcmZsb3cgaW1tZWRpYXRlbHkuCisgICAgICAgICAgIElmIGUxIDw9IC0yNTYsIHNldCBiYy5zY2FsZSB0byAyKlAuCisKKyAgICAgICAgICAgU28gZm9yIGlucHV0IHZhbHVlIDwgMWUtMjU2LCBiYy5zY2FsZSBpcyBhbHdheXMgc2V0OworICAgICAgICAgICBmb3IgaW5wdXQgdmFsdWUgPj0gMWUtMjQwLCBiYy5zY2FsZSBpcyBuZXZlciBzZXQuCisgICAgICAgICAgIEZvciBpbnB1dCB2YWx1ZXMgaW4gWzFlLTI1NiwgMWUtMjQwKSwgYmMuc2NhbGUgbWF5IG9yIG1heQorICAgICAgICAgICBub3QgYmUgc2V0LiAqLworCisgICAgICAgIGUxID0gLWUxOworICAgICAgICBpZiAoKGkgPSBlMSAmIDE1KSkKKyAgICAgICAgICAgIGR2YWwoJnJ2KSAvPSB0ZW5zW2ldOworICAgICAgICBpZiAoZTEgPj49IDQpIHsKKyAgICAgICAgICAgIGlmIChlMSA+PSAxIDw8IG5fYmlndGVucykKKyAgICAgICAgICAgICAgICBnb3RvIHVuZGZsOworICAgICAgICAgICAgaWYgKGUxICYgU2NhbGVfQml0KQorICAgICAgICAgICAgICAgIGJjLnNjYWxlID0gMipQOworICAgICAgICAgICAgZm9yKGogPSAwOyBlMSA+IDA7IGorKywgZTEgPj49IDEpCisgICAgICAgICAgICAgICAgaWYgKGUxICYgMSkKKyAgICAgICAgICAgICAgICAgICAgZHZhbCgmcnYpICo9IHRpbnl0ZW5zW2pdOworICAgICAgICAgICAgaWYgKGJjLnNjYWxlICYmIChqID0gMipQICsgMSAtICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiBFeHBfc2hpZnQpKSA+IDApIHsKKyAgICAgICAgICAgICAgICAvKiBzY2FsZWQgcnYgaXMgZGVub3JtYWw7IGNsZWFyIGogbG93IGJpdHMgKi8KKyAgICAgICAgICAgICAgICBpZiAoaiA+PSAzMikgeworICAgICAgICAgICAgICAgICAgICB3b3JkMSgmcnYpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gNTMpCisgICAgICAgICAgICAgICAgICAgICAgICB3b3JkMCgmcnYpID0gKFArMikqRXhwX21zazE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQwKCZydikgJj0gMHhmZmZmZmZmZiA8PCAoai0zMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgd29yZDEoJnJ2KSAmPSAweGZmZmZmZmZmIDw8IGo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWR2YWwoJnJ2KSkKKyAgICAgICAgICAgICAgICBnb3RvIHVuZGZsOworICAgICAgICB9CisgICAgfQorCisgICAgLyogTm93IHRoZSBoYXJkIHBhcnQgLS0gYWRqdXN0aW5nIHJ2IHRvIHRoZSBjb3JyZWN0IHZhbHVlLiovCisKKyAgICAvKiBQdXQgZGlnaXRzIGludG8gYmQ6IHRydWUgdmFsdWUgPSBiZCAqIDEwXmUgKi8KKworICAgIGJjLm5kID0gbmQ7CisgICAgYmMubmQwID0gbmQwOyAgICAgICAvKiBPbmx5IG5lZWRlZCBpZiBuZCA+IFNUUlRPRF9ESUdMSU0sIGJ1dCBkb25lIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvIHNpbGVuY2UgYW4gZXJyb25lb3VzIHdhcm5pbmcgYWJvdXQgYmMubmQwICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3NzaWJseSBub3QgYmVpbmcgaW5pdGlhbGl6ZWQuICovCisgICAgaWYgKG5kID4gU1RSVE9EX0RJR0xJTSkgeworICAgICAgICAvKiBBU1NFUlQoU1RSVE9EX0RJR0xJTSA+PSAxOCk7IDE4ID09IG9uZSBtb3JlIHRoYW4gdGhlICovCisgICAgICAgIC8qIG1pbmltdW0gbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzIHRvIGRpc3Rpbmd1aXNoIGRvdWJsZSB2YWx1ZXMgKi8KKyAgICAgICAgLyogaW4gSUVFRSBhcml0aG1ldGljLiAqLworCisgICAgICAgIC8qIFRydW5jYXRlIGlucHV0IHRvIDE4IHNpZ25pZmljYW50IGRpZ2l0cywgdGhlbiBkaXNjYXJkIGFueSB0cmFpbGluZworICAgICAgICAgICB6ZXJvcyBvbiB0aGUgcmVzdWx0IGJ5IHVwZGF0aW5nIG5kLCBuZDAsIGUgYW5kIHkgc3VpdGFibHkuIChUaGVyZSdzCisgICAgICAgICAgIG5vIG5lZWQgdG8gdXBkYXRlIHo7IGl0J3Mgbm90IHJldXNlZCBiZXlvbmQgdGhpcyBwb2ludC4pICovCisgICAgICAgIGZvciAoaSA9IDE4OyBpID4gMDsgKSB7CisgICAgICAgICAgICAvKiBzY2FuIGJhY2sgdW50aWwgd2UgaGl0IGEgbm9uemVybyBkaWdpdC4gIHNpZ25pZmljYW50IGRpZ2l0ICdpJworICAgICAgICAgICAgaXMgczBbaV0gaWYgaSA8IG5kMCwgczBbaSsxXSBpZiBpID49IG5kMC4gKi8KKyAgICAgICAgICAgIC0taTsKKyAgICAgICAgICAgIGlmIChzMFtpIDwgbmQwID8gaSA6IGkrMV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGUgKz0gbmQgLSBpOworICAgICAgICBuZCA9IGk7CisgICAgICAgIGlmIChuZDAgPiBuZCkKKyAgICAgICAgICAgIG5kMCA9IG5kOworICAgICAgICBpZiAobmQgPCA5KSB7IC8qIG11c3QgcmVjb21wdXRlIHkgKi8KKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbmQwOyArK2kpCisgICAgICAgICAgICAgICAgeSA9IDEwKnkgKyBzMFtpXSAtICcwJzsKKyAgICAgICAgICAgIGZvcig7IGkgPCBuZDsgKytpKQorICAgICAgICAgICAgICAgIHkgPSAxMCp5ICsgczBbaSsxXSAtICcwJzsKKyAgICAgICAgfQorICAgIH0KKyAgICBiZDAgPSBzMmIoczAsIG5kMCwgbmQsIHkpOworICAgIGlmIChiZDAgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworCisgICAgLyogTm90YXRpb24gZm9yIHRoZSBjb21tZW50cyBiZWxvdy4gIFdyaXRlOgorCisgICAgICAgICAtIGR2IGZvciB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciByZXByZXNlbnRlZCBieSB0aGUgb3JpZ2luYWwKKyAgICAgICAgICAgZGVjaW1hbCBpbnB1dCBzdHJpbmcuCisKKyAgICAgICAgIC0gaWYgd2UndmUgdHJ1bmNhdGVkIGR2LCB3cml0ZSB0ZHYgZm9yIHRoZSB0cnVuY2F0ZWQgdmFsdWUuCisgICAgICAgICAgIE90aGVyd2lzZSwgc2V0IHRkdiA9PSBkdi4KKworICAgICAgICAgLSBzcnYgZm9yIHRoZSBxdWFudGl0eSBydi8yXmJjLnNjYWxlOyBzbyBzcnYgaXMgdGhlIGN1cnJlbnQgYmluYXJ5CisgICAgICAgICAgIGFwcHJveGltYXRpb24gdG8gdGR2IChhbmQgZHYpLiAgSXQgc2hvdWxkIGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZQorICAgICAgICAgICBpbiBhbiBJRUVFIDc1NCBkb3VibGUuCisgICAgKi8KKworICAgIGZvcig7OykgeworCisgICAgICAgIC8qIFRoaXMgaXMgdGhlIG1haW4gY29ycmVjdGlvbiBsb29wIGZvciBfUHlfZGdfc3RydG9kLgorCisgICAgICAgICAgIFdlJ3ZlIGdvdCBhIGRlY2ltYWwgdmFsdWUgdGR2LCBhbmQgYSBmbG9hdGluZy1wb2ludCBhcHByb3hpbWF0aW9uCisgICAgICAgICAgIHNydj1ydi8yXmJjLnNjYWxlIHRvIHRkdi4gIFRoZSBhaW0gaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc3J2IGlzCisgICAgICAgICAgIGNsb3NlIGVub3VnaCAoaS5lLiwgd2l0aGluIDAuNSB1bHBzKSB0byB0ZHYsIGFuZCB0byBjb21wdXRlIGEgbmV3CisgICAgICAgICAgIGFwcHJveGltYXRpb24gaWYgbm90LgorCisgICAgICAgICAgIFRvIGRldGVybWluZSB3aGV0aGVyIHNydiBpcyBjbG9zZSBlbm91Z2ggdG8gdGR2LCBjb21wdXRlIGludGVnZXJzCisgICAgICAgICAgIGJkLCBiYiBhbmQgYnMgcHJvcG9ydGlvbmFsIHRvIHRkdiwgc3J2IGFuZCAwLjUgdWxwKHNydikKKyAgICAgICAgICAgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlbiB1c2UgaW50ZWdlciBhcml0aG1ldGljIHRvIGRldGVybWluZSB3aGV0aGVyCisgICAgICAgICAgIHx0ZHYgLSBzcnZ8IGlzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiAwLjUgdWxwKHNydikuCisgICAgICAgICovCisKKyAgICAgICAgYmQgPSBCYWxsb2MoYmQwLT5rKTsKKyAgICAgICAgaWYgKGJkID09IE5VTEwpIHsKKyAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgIH0KKyAgICAgICAgQmNvcHkoYmQsIGJkMCk7CisgICAgICAgIGJiID0gc2QyYigmcnYsIGJjLnNjYWxlLCAmYmJlKTsgICAvKiBzcnYgPSBiYiAqIDJeYmJlICovCisgICAgICAgIGlmIChiYiA9PSBOVUxMKSB7CisgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisgICAgICAgIC8qIFJlY29yZCB3aGV0aGVyIGxzYiBvZiBiYiBpcyBvZGQsIGluIGNhc2Ugd2UgbmVlZCB0aGlzCisgICAgICAgICAgIGZvciB0aGUgcm91bmQtdG8tZXZlbiBzdGVwIGxhdGVyLiAqLworICAgICAgICBvZGQgPSBiYi0+eFswXSAmIDE7CisKKyAgICAgICAgLyogdGR2ID0gYmQgKiAxMCoqZTsgIHNydiA9IGJiICogMioqYmJlICovCisgICAgICAgIGJzID0gaTJiKDEpOworICAgICAgICBpZiAoYnMgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgQmZyZWUoYmQpOworICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlID49IDApIHsKKyAgICAgICAgICAgIGJiMiA9IGJiNSA9IDA7CisgICAgICAgICAgICBiZDIgPSBiZDUgPSBlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYmIyID0gYmI1ID0gLWU7CisgICAgICAgICAgICBiZDIgPSBiZDUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChiYmUgPj0gMCkKKyAgICAgICAgICAgIGJiMiArPSBiYmU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJkMiAtPSBiYmU7CisgICAgICAgIGJzMiA9IGJiMjsKKyAgICAgICAgYmIyKys7CisgICAgICAgIGJkMisrOworCisgICAgICAgIC8qIEF0IHRoaXMgc3RhZ2UgYmQ1IC0gYmI1ID09IGUgPT0gYmQyIC0gYmIyICsgYmJlLCBiYjIgLSBiczIgPT0gMSwKKwkgICBhbmQgYnMgPT0gMSwgc286CisKKyAgICAgICAgICAgICAgdGR2ID09IGJkICogMTAqKmUgPSBiZCAqIDIqKihiYmUgLSBiYjIgKyBiZDIpICogNSoqKGJkNSAtIGJiNSkKKyAgICAgICAgICAgICAgc3J2ID09IGJiICogMioqYmJlID0gYmIgKiAyKiooYmJlIC0gYmIyICsgYmIyKQorCSAgICAgIDAuNSB1bHAoc3J2KSA9PSAyKiooYmJlLTEpID0gYnMgKiAyKiooYmJlIC0gYmIyICsgYnMyKQorCisJICAgSXQgZm9sbG93cyB0aGF0OgorCisgICAgICAgICAgICAgIE0gKiB0ZHYgPSBiZCAqIDIqKmJkMiAqIDUqKmJkNQorICAgICAgICAgICAgICBNICogc3J2ID0gYmIgKiAyKipiYjIgKiA1KipiYjUKKyAgICAgICAgICAgICAgTSAqIDAuNSB1bHAoc3J2KSA9IGJzICogMioqYnMyICogNSoqYmI1CisKKwkgICBmb3Igc29tZSBjb25zdGFudCBNLiAgKEFjdHVhbGx5LCBNID09IDIqKihiYjIgLSBiYmUpICogNSoqYmI1LCBidXQKKwkgICB0aGlzIGZhY3QgaXMgbm90IG5lZWRlZCBiZWxvdy4pCisgICAgICAgICovCisKKyAgICAgICAgLyogUmVtb3ZlIGZhY3RvciBvZiAyKippLCB3aGVyZSBpID0gbWluKGJiMiwgYmQyLCBiczIpLiAqLworICAgICAgICBpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOworICAgICAgICBpZiAoaSA+IGJzMikKKyAgICAgICAgICAgIGkgPSBiczI7CisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgYmIyIC09IGk7CisgICAgICAgICAgICBiZDIgLT0gaTsKKyAgICAgICAgICAgIGJzMiAtPSBpOworICAgICAgICB9CisKKyAgICAgICAgLyogU2NhbGUgYmIsIGJkLCBicyBieSB0aGUgYXBwcm9wcmlhdGUgcG93ZXJzIG9mIDIgYW5kIDUuICovCisgICAgICAgIGlmIChiYjUgPiAwKSB7CisgICAgICAgICAgICBicyA9IHBvdzVtdWx0KGJzLCBiYjUpOworICAgICAgICAgICAgaWYgKGJzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmIxID0gbXVsdChicywgYmIpOworICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgYmIgPSBiYjE7CisgICAgICAgICAgICBpZiAoYmIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJiMiA+IDApIHsKKyAgICAgICAgICAgIGJiID0gbHNoaWZ0KGJiLCBiYjIpOworICAgICAgICAgICAgaWYgKGJiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShicyk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiZDUgPiAwKSB7CisgICAgICAgICAgICBiZCA9IHBvdzVtdWx0KGJkLCBiZDUpOworICAgICAgICAgICAgaWYgKGJkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBCZnJlZShiYik7CisgICAgICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgICAgIEJmcmVlKGJkMCk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiZDIgPiAwKSB7CisgICAgICAgICAgICBiZCA9IGxzaGlmdChiZCwgYmQyKTsKKyAgICAgICAgICAgIGlmIChiZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZDApOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYnMyID4gMCkgeworICAgICAgICAgICAgYnMgPSBsc2hpZnQoYnMsIGJzMik7CisgICAgICAgICAgICBpZiAoYnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEJmcmVlKGJiKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBOb3cgYmQsIGJiIGFuZCBicyBhcmUgc2NhbGVkIHZlcnNpb25zIG9mIHRkdiwgc3J2IGFuZCAwLjUgdWxwKHNydiksCisgICAgICAgICAgIHJlc3BlY3RpdmVseS4gIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgfHRkdiAtIHNydnwsIGFuZCBjb21wYXJlCisgICAgICAgICAgIHdpdGggMC41IHVscChzcnYpLiAqLworCisgICAgICAgIGRlbHRhID0gZGlmZihiYiwgYmQpOworICAgICAgICBpZiAoZGVsdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgQmZyZWUoYnMpOworICAgICAgICAgICAgQmZyZWUoYmQpOworICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorICAgICAgICBkc2lnbiA9IGRlbHRhLT5zaWduOworICAgICAgICBkZWx0YS0+c2lnbiA9IDA7CisgICAgICAgIGkgPSBjbXAoZGVsdGEsIGJzKTsKKyAgICAgICAgaWYgKGJjLm5kID4gbmQgJiYgaSA8PSAwKSB7CisgICAgICAgICAgICBpZiAoZHNpZ24pCisgICAgICAgICAgICAgICAgYnJlYWs7ICAvKiBNdXN0IHVzZSBiaWdjb21wKCkuICovCisKKyAgICAgICAgICAgIC8qIEhlcmUgcnYgb3ZlcmVzdGltYXRlcyB0aGUgdHJ1bmNhdGVkIGRlY2ltYWwgdmFsdWUgYnkgYXQgbW9zdAorICAgICAgICAgICAgICAgMC41IHVscChydikuICBIZW5jZSBydiBlaXRoZXIgb3ZlcmVzdGltYXRlcyB0aGUgdHJ1ZSBkZWNpbWFsCisgICAgICAgICAgICAgICB2YWx1ZSBieSA8PSAwLjUgdWxwKHJ2KSwgb3IgdW5kZXJlc3RpbWF0ZXMgaXQgYnkgc29tZSBzbWFsbAorICAgICAgICAgICAgICAgYW1vdW50ICg8IDAuMSB1bHAocnYpKTsgZWl0aGVyIHdheSwgcnYgaXMgd2l0aGluIDAuNSB1bHBzIG9mCisgICAgICAgICAgICAgICB0aGUgdHJ1ZSBkZWNpbWFsIHZhbHVlLCBzbyBpdCdzIHBvc3NpYmxlIHRvIGV4aXQuCisKKyAgICAgICAgICAgICAgIEV4Y2VwdGlvbjogaWYgc2NhbGVkIHJ2IGlzIGEgbm9ybWFsIGV4YWN0IHBvd2VyIG9mIDIsIGJ1dCBub3QKKyAgICAgICAgICAgICAgIERCTF9NSU4sIHRoZW4gcnYgLSAwLjUgdWxwKHJ2KSB0YWtlcyB1cyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZQorICAgICAgICAgICAgICAgbmV4dCBkb3VibGUsIHNvIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQgaXMgZWl0aGVyIHJ2IC0gMC41CisgICAgICAgICAgICAgICB1bHAocnYpIG9yIHJ2OyBpbiB0aGlzIGNhc2UsIHVzZSBiaWdjb21wIHRvIGRpc3Rpbmd1aXNoLiAqLworCisgICAgICAgICAgICBpZiAoIXdvcmQxKCZydikgJiYgISh3b3JkMCgmcnYpICYgQm5kcnlfbWFzaykpIHsKKyAgICAgICAgICAgICAgICAvKiBydiBjYW4ndCBiZSAwLCBzaW5jZSBpdCdzIGFuIG92ZXJlc3RpbWF0ZSBmb3Igc29tZQorICAgICAgICAgICAgICAgICAgIG5vbnplcm8gdmFsdWUuICBTbyBydiBpcyBhIG5vcm1hbCBwb3dlciBvZiAyLiAqLworICAgICAgICAgICAgICAgIGogPSAoaW50KSh3b3JkMCgmcnYpICYgRXhwX21hc2spID4+IEV4cF9zaGlmdDsKKyAgICAgICAgICAgICAgICAvKiBydiAvIDJeYmMuc2NhbGUgPSAyXihqIC0gMTAyMyAtIGJjLnNjYWxlKTsgdXNlIGJpZ2NvbXAgaWYKKyAgICAgICAgICAgICAgICAgICBydiAvIDJeYmMuc2NhbGUgPj0gMl4tMTAyMS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaiAtIGJjLnNjYWxlID49IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgZHZhbCgmcnYpIC09IDAuNSAqIHN1bHAoJnJ2LCAmYmMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsgLyogVXNlIGJpZ2NvbXAuICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmMubmQgPSBuZDsKKyAgICAgICAgICAgICAgICBpID0gLTE7IC8qIERpc2NhcmRlZCBkaWdpdHMgbWFrZSBkZWx0YSBzbWFsbGVyLiAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICAvKiBFcnJvciBpcyBsZXNzIHRoYW4gaGFsZiBhbiB1bHAgLS0gY2hlY2sgZm9yCisgICAgICAgICAgICAgKiBzcGVjaWFsIGNhc2Ugb2YgbWFudGlzc2EgYSBwb3dlciBvZiB0d28uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChkc2lnbiB8fCB3b3JkMSgmcnYpIHx8IHdvcmQwKCZydikgJiBCbmRyeV9tYXNrCisgICAgICAgICAgICAgICAgfHwgKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gKDIqUCsxKSpFeHBfbXNrMQorICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFkZWx0YS0+eFswXSAmJiBkZWx0YS0+d2RzIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAvKiBleGFjdCByZXN1bHQgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbHRhID0gbHNoaWZ0KGRlbHRhLExvZzJQKTsKKyAgICAgICAgICAgIGlmIChkZWx0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY21wKGRlbHRhLCBicykgPiAwKQorICAgICAgICAgICAgICAgIGdvdG8gZHJvcF9kb3duOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgLyogZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuICovCisgICAgICAgICAgICBpZiAoZHNpZ24pIHsKKyAgICAgICAgICAgICAgICBpZiAoKHdvcmQwKCZydikgJiBCbmRyeV9tYXNrMSkgPT0gQm5kcnlfbWFzazEKKyAgICAgICAgICAgICAgICAgICAgJiYgIHdvcmQxKCZydikgPT0gKAorICAgICAgICAgICAgICAgICAgICAgICAgKGJjLnNjYWxlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKHkgPSB3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9IDIqUCpFeHBfbXNrMSkgPworICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZmZmZmZmZmYgJiAoMHhmZmZmZmZmZiA8PCAoMipQKzEtKHk+PkV4cF9zaGlmdCkpKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZikpIHsKKyAgICAgICAgICAgICAgICAgICAgLypib3VuZGFyeSBjYXNlIC0tIGluY3JlbWVudCBleHBvbmVudCovCisgICAgICAgICAgICAgICAgICAgIHdvcmQwKCZydikgPSAod29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgKyBFeHBfbXNrMQorICAgICAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgICAgICAgICB3b3JkMSgmcnYpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZHNpZ24gPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghKHdvcmQwKCZydikgJiBCbmRyeV9tYXNrKSAmJiAhd29yZDEoJnJ2KSkgeworICAgICAgICAgICAgICBkcm9wX2Rvd246CisgICAgICAgICAgICAgICAgLyogYm91bmRhcnkgY2FzZSAtLSBkZWNyZW1lbnQgZXhwb25lbnQgKi8KKyAgICAgICAgICAgICAgICBpZiAoYmMuc2NhbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTCA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEwgPD0gKDIqUCsxKSpFeHBfbXNrMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEwgPiAoUCsyKSpFeHBfbXNrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByb3VuZCBldmVuID09PiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFjY2VwdCBydiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgLyogcnYgPSBzbWFsbGVzdCBkZW5vcm1hbCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJjLm5kID4gbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVuZGZsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEwgPSAod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSAtIEV4cF9tc2sxOworICAgICAgICAgICAgICAgIHdvcmQwKCZydikgPSBMIHwgQm5kcnlfbWFzazE7CisgICAgICAgICAgICAgICAgd29yZDEoJnJ2KSA9IDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW9kZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChkc2lnbikKKyAgICAgICAgICAgICAgICBkdmFsKCZydikgKz0gc3VscCgmcnYsICZiYyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkdmFsKCZydikgLT0gc3VscCgmcnYsICZiYyk7CisgICAgICAgICAgICAgICAgaWYgKCFkdmFsKCZydikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJjLm5kID5uZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIHVuZGZsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRzaWduID0gMSAtIGRzaWduOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChhYWRqID0gcmF0aW8oZGVsdGEsIGJzKSkgPD0gMi4pIHsKKyAgICAgICAgICAgIGlmIChkc2lnbikKKyAgICAgICAgICAgICAgICBhYWRqID0gYWFkajEgPSAxLjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdvcmQxKCZydikgfHwgd29yZDAoJnJ2KSAmIEJuZHJ5X21hc2spIHsKKyAgICAgICAgICAgICAgICBpZiAod29yZDEoJnJ2KSA9PSBUaW55MSAmJiAhd29yZDAoJnJ2KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmMubmQgPm5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gdW5kZmw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFhZGogPSAxLjsKKyAgICAgICAgICAgICAgICBhYWRqMSA9IC0xLjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgY2FzZSAtLSBwb3dlciBvZiBGTFRfUkFESVggdG8gYmUgKi8KKyAgICAgICAgICAgICAgICAvKiByb3VuZGVkIGRvd24uLi4gKi8KKworICAgICAgICAgICAgICAgIGlmIChhYWRqIDwgMi4vRkxUX1JBRElYKQorICAgICAgICAgICAgICAgICAgICBhYWRqID0gMS4vRkxUX1JBRElYOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWFkaiAqPSAwLjU7CisgICAgICAgICAgICAgICAgYWFkajEgPSAtYWFkajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFhZGogKj0gMC41OworICAgICAgICAgICAgYWFkajEgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKKyAgICAgICAgICAgIGlmIChGbHRfUm91bmRzID09IDApCisgICAgICAgICAgICAgICAgYWFkajEgKz0gMC41OworICAgICAgICB9CisgICAgICAgIHkgPSB3b3JkMCgmcnYpICYgRXhwX21hc2s7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisKKyAgICAgICAgaWYgKHkgPT0gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpIHsKKyAgICAgICAgICAgIGR2YWwoJnJ2MCkgPSBkdmFsKCZydik7CisgICAgICAgICAgICB3b3JkMCgmcnYpIC09IFAqRXhwX21zazE7CisgICAgICAgICAgICBhZGouZCA9IGFhZGoxICogdWxwKCZydik7CisgICAgICAgICAgICBkdmFsKCZydikgKz0gYWRqLmQ7CisgICAgICAgICAgICBpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPj0KKyAgICAgICAgICAgICAgICBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy1QKSkgeworICAgICAgICAgICAgICAgIGlmICh3b3JkMCgmcnYwKSA9PSBCaWcwICYmIHdvcmQxKCZydjApID09IEJpZzEpIHsKKyAgICAgICAgICAgICAgICAgICAgQmZyZWUoYmIpOworICAgICAgICAgICAgICAgICAgICBCZnJlZShiZCk7CisgICAgICAgICAgICAgICAgICAgIEJmcmVlKGJzKTsKKyAgICAgICAgICAgICAgICAgICAgQmZyZWUoYmQwKTsKKyAgICAgICAgICAgICAgICAgICAgQmZyZWUoZGVsdGEpOworICAgICAgICAgICAgICAgICAgICBnb3RvIG92Zmw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdvcmQwKCZydikgPSBCaWcwOworICAgICAgICAgICAgICAgIHdvcmQxKCZydikgPSBCaWcxOworICAgICAgICAgICAgICAgIGdvdG8gY29udDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3b3JkMCgmcnYpICs9IFAqRXhwX21zazE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYmMuc2NhbGUgJiYgeSA8PSAyKlAqRXhwX21zazEpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWFkaiA8PSAweDdmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoeiA9IChVTG9uZylhYWRqKSA8PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeiA9IDE7CisgICAgICAgICAgICAgICAgICAgIGFhZGogPSB6OworICAgICAgICAgICAgICAgICAgICBhYWRqMSA9IGRzaWduID8gYWFkaiA6IC1hYWRqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkdmFsKCZhYWRqMikgPSBhYWRqMTsKKyAgICAgICAgICAgICAgICB3b3JkMCgmYWFkajIpICs9ICgyKlArMSkqRXhwX21zazEgLSB5OworICAgICAgICAgICAgICAgIGFhZGoxID0gZHZhbCgmYWFkajIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRqLmQgPSBhYWRqMSAqIHVscCgmcnYpOworICAgICAgICAgICAgZHZhbCgmcnYpICs9IGFkai5kOworICAgICAgICB9CisgICAgICAgIHogPSB3b3JkMCgmcnYpICYgRXhwX21hc2s7CisgICAgICAgIGlmIChiYy5uZCA9PSBuZCkgeworICAgICAgICAgICAgaWYgKCFiYy5zY2FsZSkKKyAgICAgICAgICAgICAgICBpZiAoeSA9PSB6KSB7CisgICAgICAgICAgICAgICAgICAgIC8qIENhbiB3ZSBzdG9wIG5vdz8gKi8KKyAgICAgICAgICAgICAgICAgICAgTCA9IChMb25nKWFhZGo7CisgICAgICAgICAgICAgICAgICAgIGFhZGogLT0gTDsKKyAgICAgICAgICAgICAgICAgICAgLyogVGhlIHRvbGVyYW5jZXMgYmVsb3cgYXJlIGNvbnNlcnZhdGl2ZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRzaWduIHx8IHdvcmQxKCZydikgfHwgd29yZDAoJnJ2KSAmIEJuZHJ5X21hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYWRqIDwgLjQ5OTk5OTkgfHwgYWFkaiA+IC41MDAwMDAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFhZGogPCAuNDk5OTk5OS9GTFRfUkFESVgpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGNvbnQ6CisgICAgICAgIEJmcmVlKGJiKTsKKyAgICAgICAgQmZyZWUoYmQpOworICAgICAgICBCZnJlZShicyk7CisgICAgICAgIEJmcmVlKGRlbHRhKTsKKyAgICB9CisgICAgQmZyZWUoYmIpOworICAgIEJmcmVlKGJkKTsKKyAgICBCZnJlZShicyk7CisgICAgQmZyZWUoYmQwKTsKKyAgICBCZnJlZShkZWx0YSk7CisgICAgaWYgKGJjLm5kID4gbmQpIHsKKyAgICAgICAgZXJyb3IgPSBiaWdjb21wKCZydiwgczAsICZiYyk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICB9CisKKyAgICBpZiAoYmMuc2NhbGUpIHsKKyAgICAgICAgd29yZDAoJnJ2MCkgPSBFeHBfMSAtIDIqUCpFeHBfbXNrMTsKKyAgICAgICAgd29yZDEoJnJ2MCkgPSAwOworICAgICAgICBkdmFsKCZydikgKj0gZHZhbCgmcnYwKTsKKyAgICB9CisKKyAgcmV0OgorICAgIHJldHVybiBzaWduID8gLWR2YWwoJnJ2KSA6IGR2YWwoJnJ2KTsKKworICBwYXJzZV9lcnJvcjoKKyAgICByZXR1cm4gMC4wOworCisgIGZhaWxlZF9tYWxsb2M6CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgcmV0dXJuIC0xLjA7CisKKyAgdW5kZmw6CisgICAgcmV0dXJuIHNpZ24gPyAtMC4wIDogMC4wOworCisgIG92Zmw6CisgICAgZXJybm8gPSBFUkFOR0U7CisgICAgLyogQ2FuJ3QgdHJ1c3QgSFVHRV9WQUwgKi8KKyAgICB3b3JkMCgmcnYpID0gRXhwX21hc2s7CisgICAgd29yZDEoJnJ2KSA9IDA7CisgICAgcmV0dXJuIHNpZ24gPyAtZHZhbCgmcnYpIDogZHZhbCgmcnYpOworCit9CisKK3N0YXRpYyBjaGFyICoKK3J2X2FsbG9jKGludCBpKQoreworICAgIGludCBqLCBrLCAqcjsKKworICAgIGogPSBzaXplb2YoVUxvbmcpOworICAgIGZvcihrID0gMDsKKyAgICAgICAgc2l6ZW9mKEJpZ2ludCkgLSBzaXplb2YoVUxvbmcpIC0gc2l6ZW9mKGludCkgKyBqIDw9ICh1bnNpZ25lZClpOworICAgICAgICBqIDw8PSAxKQorICAgICAgICBrKys7CisgICAgciA9IChpbnQqKUJhbGxvYyhrKTsKKyAgICBpZiAociA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAqciA9IGs7CisgICAgcmV0dXJuIChjaGFyICopKHIrMSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK25ydl9hbGxvYyhjaGFyICpzLCBjaGFyICoqcnZlLCBpbnQgbikKK3sKKyAgICBjaGFyICpydiwgKnQ7CisKKyAgICBydiA9IHJ2X2FsbG9jKG4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0ID0gcnY7CisgICAgd2hpbGUoKCp0ID0gKnMrKykpIHQrKzsKKyAgICBpZiAocnZlKQorICAgICAgICAqcnZlID0gdDsKKyAgICByZXR1cm4gcnY7Cit9CisKKy8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZhbHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKKyAqIGJ1dCBmb3IgY29uc2lzdGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCisgKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCisgKi8KKwordm9pZAorX1B5X2RnX2ZyZWVkdG9hKGNoYXIgKnMpCit7CisgICAgQmlnaW50ICpiID0gKEJpZ2ludCAqKSgoaW50ICopcyAtIDEpOworICAgIGItPm1heHdkcyA9IDEgPDwgKGItPmsgPSAqKGludCopYik7CisgICAgQmZyZWUoYik7Cit9CisKKy8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgorICoKKyAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQorICogR3V5IEwuIFN0ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0xMjZdLgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKiAgICAgIDEuIFJhdGhlciB0aGFuIGl0ZXJhdGluZywgd2UgdXNlIGEgc2ltcGxlIG51bWVyaWMgb3ZlcmVzdGltYXRlCisgKiAgICAgICAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqICAgICAgICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgorICogICAgICAyLiBGb3Igc29tZSBtb2RlcyA+IDIgKGNvcnJlc3BvbmRpbmcgdG8gZWN2dCBhbmQgZmN2dCksIHdlIGRvbid0CisgKiAgICAgICAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKiAgICAgICAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQorICogICAgICAgICB3aGVuIHJvdW5kaW5nIHRoZSBmaW5hbCBkaWdpdCB1cC4gIFRoaXMgaXMgb2Z0ZW4gZmFzdGVyLgorICogICAgICAzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICogICAgICAgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCisgKiAgICAgICAgIFRoYXQgaXMsIHdlIGFsbG93IGVxdWFsaXR5IGluIHN0b3BwaW5nIHRlc3RzIHdoZW4gdGhlCisgKiAgICAgICAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqICAgICAgICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0CisgKiAgICAgICAgIGluZXF1YWxpdHkuCisgKiAgICAgIDQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKiAgICAgICAgIHF1YW50aXRpZXMuCisgKiAgICAgIDUuIFdoZW4gY29udmVydGluZyBmbG9hdGluZy1wb2ludCBpbnRlZ2VycyBsZXNzIHRoYW4gMWUxNiwKKyAqICAgICAgICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKiAgICAgICAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KKyAqICAgICAgNi4gV2hlbiBhc2tlZCB0byBwcm9kdWNlIGZld2VyIHRoYW4gMTUgZGlnaXRzLCB3ZSBmaXJzdCB0cnkKKyAqICAgICAgICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKiAgICAgICAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKKyAqICAgICAgICAgZ3VhcmFudGVlIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9uIGhhcyBnaXZlbgorICogICAgICAgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqICAgICAgICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcworICogICAgICAgICBzb21ldGhpbmcgbGlrZSAxMF4oay0xNSkgdGhhdCB3ZSBtdXN0IHJlc29ydCB0byB0aGUgTG9uZworICogICAgICAgICBjYWxjdWxhdGlvbi4KKyAqLworCisvKiBBZGRpdGlvbmFsIG5vdGVzIChNRVREKTogKDEpIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlLiAgKDIpIHRvIGF2b2lkIG1lbW9yeQorICAgbGVha2FnZSwgYSBzdWNjZXNzZnVsIGNhbGwgdG8gX1B5X2RnX2R0b2Egc2hvdWxkIGFsd2F5cyBiZSBtYXRjaGVkIGJ5IGEKKyAgIGNhbGwgdG8gX1B5X2RnX2ZyZWVkdG9hLiAqLworCitjaGFyICoKK19QeV9kZ19kdG9hKGRvdWJsZSBkZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLAorICAgICAgICAgICAgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQoreworICAgIC8qICBBcmd1bWVudHMgbmRpZ2l0cywgZGVjcHQsIHNpZ24gYXJlIHNpbWlsYXIgdG8gdGhvc2UKKyAgICAgICAgb2YgZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorICAgICAgICB0aGUgcmV0dXJuZWQgc3RyaW5nLiAgSWYgbm90IG51bGwsICpydmUgaXMgc2V0IHRvIHBvaW50CisgICAgICAgIHRvIHRoZSBlbmQgb2YgdGhlIHJldHVybiB2YWx1ZS4gIElmIGQgaXMgKy1JbmZpbml0eSBvciBOYU4sCisgICAgICAgIHRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgorCisgICAgICAgIG1vZGU6CisgICAgICAgIDAgPT0+IHNob3J0ZXN0IHN0cmluZyB0aGF0IHlpZWxkcyBkIHdoZW4gcmVhZCBpbgorICAgICAgICBhbmQgcm91bmRlZCB0byBuZWFyZXN0LgorICAgICAgICAxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1bGU7CisgICAgICAgIGUuZy4gd2l0aCBJRUVFIFA3NTQgYXJpdGhtZXRpYyAsIG1vZGUgMCBnaXZlcworICAgICAgICAxZTIzIHdoZXJlYXMgbW9kZSAxIGdpdmVzIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICAgICAgICAyID09PiBtYXgoMSxuZGlnaXRzKSBzaWduaWZpY2FudCBkaWdpdHMuICBUaGlzIGdpdmVzIGEKKyAgICAgICAgcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKyAgICAgICAgdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZC4KKyAgICAgICAgMyA9PT4gdGhyb3VnaCBuZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuICBUaGlzCisgICAgICAgIGdpdmVzIGEgcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBmcm9tIGZjdnQsCisgICAgICAgIGV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLCBhbmQKKyAgICAgICAgbmRpZ2l0cyBjYW4gYmUgbmVnYXRpdmUuCisgICAgICAgIDQsNSA9PT4gc2ltaWxhciB0byAyIGFuZCAzLCByZXNwZWN0aXZlbHksIGJ1dCAoaW4KKyAgICAgICAgcm91bmQtbmVhcmVzdCBtb2RlKSB3aXRoIHRoZSB0ZXN0cyBvZiBtb2RlIDAgdG8KKyAgICAgICAgcG9zc2libHkgcmV0dXJuIGEgc2hvcnRlciBzdHJpbmcgdGhhdCByb3VuZHMgdG8gZC4KKyAgICAgICAgV2l0aCBJRUVFIGFyaXRobWV0aWMgYW5kIGNvbXBpbGF0aW9uIHdpdGgKKyAgICAgICAgLURIb25vcl9GTFRfUk9VTkRTLCBtb2RlcyA0IGFuZCA1IGJlaGF2ZSB0aGUgc2FtZQorICAgICAgICBhcyBtb2RlcyAyIGFuZCAzIHdoZW4gRkxUX1JPVU5EUyAhPSAxLgorICAgICAgICA2LTkgPT0+IERlYnVnZ2luZyBtb2RlcyBzaW1pbGFyIHRvIG1vZGUgLSA0OiAgZG9uJ3QgdHJ5CisgICAgICAgIGZhc3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUgKGlmIGFwcGxpY2FibGUpLgorCisgICAgICAgIFZhbHVlcyBvZiBtb2RlIG90aGVyIHRoYW4gMC05IGFyZSB0cmVhdGVkIGFzIG1vZGUgMC4KKworICAgICAgICBTdWZmaWNpZW50IHNwYWNlIGlzIGFsbG9jYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIHRvIGhvbGQgdGhlIHN1cHByZXNzZWQgdHJhaWxpbmcgemVyb3MuCisgICAgKi8KKworICAgIGludCBiYml0cywgYjIsIGI1LCBiZSwgZGlnLCBpLCBpZXBzLCBpbGltLCBpbGltMCwgaWxpbTEsCisgICAgICAgIGosIGoxLCBrLCBrMCwga19jaGVjaywgbGVmdHJpZ2h0LCBtMiwgbTUsIHMyLCBzNSwKKyAgICAgICAgc3BlY19jYXNlLCB0cnlfcXVpY2s7CisgICAgTG9uZyBMOworICAgIGludCBkZW5vcm07CisgICAgVUxvbmcgeDsKKyAgICBCaWdpbnQgKmIsICpiMSwgKmRlbHRhLCAqbWxvLCAqbWhpLCAqUzsKKyAgICBVIGQyLCBlcHMsIHU7CisgICAgZG91YmxlIGRzOworICAgIGNoYXIgKnMsICpzMDsKKworICAgIC8qIHNldCBwb2ludGVycyB0byBOVUxMLCB0byBzaWxlbmNlIGdjYyBjb21waWxlciB3YXJuaW5ncyBhbmQgbWFrZQorICAgICAgIGNsZWFudXAgZWFzaWVyIG9uIGVycm9yICovCisgICAgbWxvID0gbWhpID0gUyA9IDA7CisgICAgczAgPSAwOworCisgICAgdS5kID0gZGQ7CisgICAgaWYgKHdvcmQwKCZ1KSAmIFNpZ25fYml0KSB7CisgICAgICAgIC8qIHNldCBzaWduIGZvciBldmVyeXRoaW5nLCBpbmNsdWRpbmcgMCdzIGFuZCBOYU5zICovCisgICAgICAgICpzaWduID0gMTsKKyAgICAgICAgd29yZDAoJnUpICY9IH5TaWduX2JpdDsgLyogY2xlYXIgc2lnbiBiaXQgKi8KKyAgICB9CisgICAgZWxzZQorICAgICAgICAqc2lnbiA9IDA7CisKKyAgICAvKiBxdWljayByZXR1cm4gZm9yIEluZmluaXRpZXMsIE5hTnMgYW5kIHplcm9zICovCisgICAgaWYgKCh3b3JkMCgmdSkgJiBFeHBfbWFzaykgPT0gRXhwX21hc2spCisgICAgeworICAgICAgICAvKiBJbmZpbml0eSBvciBOYU4gKi8KKyAgICAgICAgKmRlY3B0ID0gOTk5OTsKKyAgICAgICAgaWYgKCF3b3JkMSgmdSkgJiYgISh3b3JkMCgmdSkgJiAweGZmZmZmKSkKKyAgICAgICAgICAgIHJldHVybiBucnZfYWxsb2MoIkluZmluaXR5IiwgcnZlLCA4KTsKKyAgICAgICAgcmV0dXJuIG5ydl9hbGxvYygiTmFOIiwgcnZlLCAzKTsKKyAgICB9CisgICAgaWYgKCFkdmFsKCZ1KSkgeworICAgICAgICAqZGVjcHQgPSAxOworICAgICAgICByZXR1cm4gbnJ2X2FsbG9jKCIwIiwgcnZlLCAxKTsKKyAgICB9CisKKyAgICAvKiBjb21wdXRlIGsgPSBmbG9vcihsb2cxMChkKSkuICBUaGUgY29tcHV0YXRpb24gbWF5IGxlYXZlIGsKKyAgICAgICBvbmUgdG9vIGxhcmdlLCBidXQgc2hvdWxkIG5ldmVyIGxlYXZlIGsgdG9vIHNtYWxsLiAqLworICAgIGIgPSBkMmIoJnUsICZiZSwgJmJiaXRzKTsKKyAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgaWYgKChpID0gKGludCkod29yZDAoJnUpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKSkpIHsKKyAgICAgICAgZHZhbCgmZDIpID0gZHZhbCgmdSk7CisgICAgICAgIHdvcmQwKCZkMikgJj0gRnJhY19tYXNrMTsKKyAgICAgICAgd29yZDAoJmQyKSB8PSBFeHBfMTE7CisKKyAgICAgICAgLyogbG9nKHgpICAgICAgIH49fiBsb2coMS41KSArICh4LTEuNSkvMS41CisgICAgICAgICAqIGxvZzEwKHgpICAgICAgPSAgbG9nKHgpIC8gbG9nKDEwKQorICAgICAgICAgKiAgICAgICAgICAgICAgfj1+IGxvZygxLjUpL2xvZygxMCkgKyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKKyAgICAgICAgICogbG9nMTAoZCkgPSAoaS1CaWFzKSpsb2coMikvbG9nKDEwKSArIGxvZzEwKGQyKQorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoZCkgYnkKKyAgICAgICAgICoKKyAgICAgICAgICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKKyAgICAgICAgICogICAgICArICggKGQyLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTY4MSApOworICAgICAgICAgKgorICAgICAgICAgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdlIHJhdGhlciB0aGFuIHRvbyBzbWFsbC4KKyAgICAgICAgICogVGhlIGVycm9yIGluIHRoZSBmaXJzdC1vcmRlciBUYXlsb3Igc2VyaWVzIGFwcHJveGltYXRpb24KKyAgICAgICAgICogaXMgaW4gb3VyIGZhdm9yLCBzbyB3ZSBqdXN0IHJvdW5kIHVwIHRoZSBjb25zdGFudCBlbm91Z2gKKyAgICAgICAgICogdG8gY29tcGVuc2F0ZSBmb3IgYW55IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgorICAgICAgICAgKiAoaSAtIEJpYXMpIGJ5IDAuMzAxMDI5OTk1NjYzOTgxOyBzaW5jZSB8aSAtIEJpYXN8IDw9IDEwNzcsCisgICAgICAgICAqIGFuZCAxMDc3ICogMC4zMDEwMyAqIDJeLTUyIH49fiA3LjJlLTE0LAorICAgICAgICAgKiBhZGRpbmcgMWUtMTMgdG8gdGhlIGNvbnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgorICAgICAgICAgKiBIZW5jZSB3ZSBhZGp1c3QgdGhlIGNvbnN0YW50IHRlcm0gdG8gMC4xNzYwOTEyNTkwNTU4LgorICAgICAgICAgKiAoV2UgY291bGQgZ2V0IGEgbW9yZSBhY2N1cmF0ZSBrIGJ5IGludm9raW5nIGxvZzEwLAorICAgICAgICAgKiAgYnV0IHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRod2hpbGUuKQorICAgICAgICAgKi8KKworICAgICAgICBpIC09IEJpYXM7CisgICAgICAgIGRlbm9ybSA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBkIGlzIGRlbm9ybWFsaXplZCAqLworCisgICAgICAgIGkgPSBiYml0cyArIGJlICsgKEJpYXMgKyAoUC0xKSAtIDEpOworICAgICAgICB4ID0gaSA+IDMyICA/IHdvcmQwKCZ1KSA8PCAoNjQgLSBpKSB8IHdvcmQxKCZ1KSA+PiAoaSAtIDMyKQorICAgICAgICAgICAgOiB3b3JkMSgmdSkgPDwgKDMyIC0gaSk7CisgICAgICAgIGR2YWwoJmQyKSA9IHg7CisgICAgICAgIHdvcmQwKCZkMikgLT0gMzEqRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLworICAgICAgICBpIC09IChCaWFzICsgKFAtMSkgLSAxKSArIDE7CisgICAgICAgIGRlbm9ybSA9IDE7CisgICAgfQorICAgIGRzID0gKGR2YWwoJmQyKS0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsKKyAgICAgICAgaSowLjMwMTAyOTk5NTY2Mzk4MTsKKyAgICBrID0gKGludClkczsKKyAgICBpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorICAgICAgICBrLS07ICAgIC8qIHdhbnQgayA9IGZsb29yKGRzKSAqLworICAgIGtfY2hlY2sgPSAxOworICAgIGlmIChrID49IDAgJiYgayA8PSBUZW5fcG1heCkgeworICAgICAgICBpZiAoZHZhbCgmdSkgPCB0ZW5zW2tdKQorICAgICAgICAgICAgay0tOworICAgICAgICBrX2NoZWNrID0gMDsKKyAgICB9CisgICAgaiA9IGJiaXRzIC0gaSAtIDE7CisgICAgaWYgKGogPj0gMCkgeworICAgICAgICBiMiA9IDA7CisgICAgICAgIHMyID0gajsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGIyID0gLWo7CisgICAgICAgIHMyID0gMDsKKyAgICB9CisgICAgaWYgKGsgPj0gMCkgeworICAgICAgICBiNSA9IDA7CisgICAgICAgIHM1ID0gazsKKyAgICAgICAgczIgKz0gazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGIyIC09IGs7CisgICAgICAgIGI1ID0gLWs7CisgICAgICAgIHM1ID0gMDsKKyAgICB9CisgICAgaWYgKG1vZGUgPCAwIHx8IG1vZGUgPiA5KQorICAgICAgICBtb2RlID0gMDsKKworICAgIHRyeV9xdWljayA9IDE7CisKKyAgICBpZiAobW9kZSA+IDUpIHsKKyAgICAgICAgbW9kZSAtPSA0OworICAgICAgICB0cnlfcXVpY2sgPSAwOworICAgIH0KKyAgICBsZWZ0cmlnaHQgPSAxOworICAgIGlsaW0gPSBpbGltMSA9IC0xOyAgLyogVmFsdWVzIGZvciBjYXNlcyAwIGFuZCAxOyBkb25lIGhlcmUgdG8gKi8KKyAgICAvKiBzaWxlbmNlIGVycm9uZW91cyAiZ2NjIC1XYWxsIiB3YXJuaW5nLiAqLworICAgIHN3aXRjaChtb2RlKSB7CisgICAgY2FzZSAwOgorICAgIGNhc2UgMToKKyAgICAgICAgaSA9IDE4OworICAgICAgICBuZGlnaXRzID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBsZWZ0cmlnaHQgPSAwOworICAgICAgICAvKiBubyBicmVhayAqLworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKG5kaWdpdHMgPD0gMCkKKyAgICAgICAgICAgIG5kaWdpdHMgPSAxOworICAgICAgICBpbGltID0gaWxpbTEgPSBpID0gbmRpZ2l0czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBsZWZ0cmlnaHQgPSAwOworICAgICAgICAvKiBubyBicmVhayAqLworICAgIGNhc2UgNToKKyAgICAgICAgaSA9IG5kaWdpdHMgKyBrICsgMTsKKyAgICAgICAgaWxpbSA9IGk7CisgICAgICAgIGlsaW0xID0gaSAtIDE7CisgICAgICAgIGlmIChpIDw9IDApCisgICAgICAgICAgICBpID0gMTsKKyAgICB9CisgICAgczAgPSBydl9hbGxvYyhpKTsKKyAgICBpZiAoczAgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIHMgPSBzMDsKKworCisgICAgaWYgKGlsaW0gPj0gMCAmJiBpbGltIDw9IFF1aWNrX21heCAmJiB0cnlfcXVpY2spIHsKKworICAgICAgICAvKiBUcnkgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworICAgICAgICBpID0gMDsKKyAgICAgICAgZHZhbCgmZDIpID0gZHZhbCgmdSk7CisgICAgICAgIGswID0gazsKKyAgICAgICAgaWxpbTAgPSBpbGltOworICAgICAgICBpZXBzID0gMjsgLyogY29uc2VydmF0aXZlICovCisgICAgICAgIGlmIChrID4gMCkgeworICAgICAgICAgICAgZHMgPSB0ZW5zW2smMHhmXTsKKyAgICAgICAgICAgIGogPSBrID4+IDQ7CisgICAgICAgICAgICBpZiAoaiAmIEJsZXRjaCkgeworICAgICAgICAgICAgICAgIC8qIHByZXZlbnQgb3ZlcmZsb3dzICovCisgICAgICAgICAgICAgICAgaiAmPSBCbGV0Y2ggLSAxOworICAgICAgICAgICAgICAgIGR2YWwoJnUpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zLTFdOworICAgICAgICAgICAgICAgIGllcHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcig7IGo7IGogPj49IDEsIGkrKykKKyAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWVwcysrOworICAgICAgICAgICAgICAgICAgICBkcyAqPSBiaWd0ZW5zW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR2YWwoJnUpIC89IGRzOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChqMSA9IC1rKSkgeworICAgICAgICAgICAgZHZhbCgmdSkgKj0gdGVuc1tqMSAmIDB4Zl07CisgICAgICAgICAgICBmb3IoaiA9IGoxID4+IDQ7IGo7IGogPj49IDEsIGkrKykKKyAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWVwcysrOworICAgICAgICAgICAgICAgICAgICBkdmFsKCZ1KSAqPSBiaWd0ZW5zW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoa19jaGVjayAmJiBkdmFsKCZ1KSA8IDEuICYmIGlsaW0gPiAwKSB7CisgICAgICAgICAgICBpZiAoaWxpbTEgPD0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfZmFpbGVkOworICAgICAgICAgICAgaWxpbSA9IGlsaW0xOworICAgICAgICAgICAgay0tOworICAgICAgICAgICAgZHZhbCgmdSkgKj0gMTAuOworICAgICAgICAgICAgaWVwcysrOworICAgICAgICB9CisgICAgICAgIGR2YWwoJmVwcykgPSBpZXBzKmR2YWwoJnUpICsgNy47CisgICAgICAgIHdvcmQwKCZlcHMpIC09IChQLTEpKkV4cF9tc2sxOworICAgICAgICBpZiAoaWxpbSA9PSAwKSB7CisgICAgICAgICAgICBTID0gbWhpID0gMDsKKyAgICAgICAgICAgIGR2YWwoJnUpIC09IDUuOworICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gZHZhbCgmZXBzKSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uZV9kaWdpdDsKKyAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA8IC1kdmFsKCZlcHMpKQorICAgICAgICAgICAgICAgIGdvdG8gbm9fZGlnaXRzOworICAgICAgICAgICAgZ290byBmYXN0X2ZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVmdHJpZ2h0KSB7CisgICAgICAgICAgICAvKiBVc2UgU3RlZWxlICYgV2hpdGUgbWV0aG9kIG9mIG9ubHkKKyAgICAgICAgICAgICAqIGdlbmVyYXRpbmcgZGlnaXRzIG5lZWRlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZHZhbCgmZXBzKSA9IDAuNS90ZW5zW2lsaW0tMV0gLSBkdmFsKCZlcHMpOworICAgICAgICAgICAgZm9yKGkgPSAwOzspIHsKKyAgICAgICAgICAgICAgICBMID0gKExvbmcpZHZhbCgmdSk7CisgICAgICAgICAgICAgICAgZHZhbCgmdSkgLT0gTDsKKyAgICAgICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOworICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0MTsKKyAgICAgICAgICAgICAgICBpZiAoMS4gLSBkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcF91cDsKKyAgICAgICAgICAgICAgICBpZiAoKytpID49IGlsaW0pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGR2YWwoJmVwcykgKj0gMTAuOworICAgICAgICAgICAgICAgIGR2YWwoJnUpICo9IDEwLjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisgICAgICAgICAgICBmb3IoaSA9IDE7OyBpKyssIGR2YWwoJnUpICo9IDEwLikgeworICAgICAgICAgICAgICAgIEwgPSAoTG9uZykoZHZhbCgmdSkpOworICAgICAgICAgICAgICAgIGlmICghKGR2YWwoJnUpIC09IEwpKQorICAgICAgICAgICAgICAgICAgICBpbGltID0gaTsKKyAgICAgICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOworICAgICAgICAgICAgICAgIGlmIChpID09IGlsaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gMC41ICsgZHZhbCgmZXBzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcF91cDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZHZhbCgmdSkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgqLS1zID09ICcwJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJldDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBmYXN0X2ZhaWxlZDoKKyAgICAgICAgcyA9IHMwOworICAgICAgICBkdmFsKCZ1KSA9IGR2YWwoJmQyKTsKKyAgICAgICAgayA9IGswOworICAgICAgICBpbGltID0gaWxpbTA7CisgICAgfQorCisgICAgLyogRG8gd2UgaGF2ZSBhICJzbWFsbCIgaW50ZWdlcj8gKi8KKworICAgIGlmIChiZSA+PSAwICYmIGsgPD0gSW50X21heCkgeworICAgICAgICAvKiBZZXMuICovCisgICAgICAgIGRzID0gdGVuc1trXTsKKyAgICAgICAgaWYgKG5kaWdpdHMgPCAwICYmIGlsaW0gPD0gMCkgeworICAgICAgICAgICAgUyA9IG1oaSA9IDA7CisgICAgICAgICAgICBpZiAoaWxpbSA8IDAgfHwgZHZhbCgmdSkgPD0gNSpkcykKKyAgICAgICAgICAgICAgICBnb3RvIG5vX2RpZ2l0czsKKyAgICAgICAgICAgIGdvdG8gb25lX2RpZ2l0OworICAgICAgICB9CisgICAgICAgIGZvcihpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7CisgICAgICAgICAgICBMID0gKExvbmcpKGR2YWwoJnUpIC8gZHMpOworICAgICAgICAgICAgZHZhbCgmdSkgLT0gTCpkczsKKyAgICAgICAgICAgICpzKysgPSAnMCcgKyAoaW50KUw7CisgICAgICAgICAgICBpZiAoIWR2YWwoJnUpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA9PSBpbGltKSB7CisgICAgICAgICAgICAgICAgZHZhbCgmdSkgKz0gZHZhbCgmdSk7CisgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gZHMgfHwgKGR2YWwoJnUpID09IGRzICYmIEwgJiAxKSkgeworICAgICAgICAgICAgICAgICAgYnVtcF91cDoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUoKi0tcyA9PSAnOScpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBzMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcyA9ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKysqcysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3RvIHJldDE7CisgICAgfQorCisgICAgbTIgPSBiMjsKKyAgICBtNSA9IGI1OworICAgIGlmIChsZWZ0cmlnaHQpIHsKKyAgICAgICAgaSA9CisgICAgICAgICAgICBkZW5vcm0gPyBiZSArIChCaWFzICsgKFAtMSkgLSAxICsgMSkgOgorICAgICAgICAgICAgMSArIFAgLSBiYml0czsKKyAgICAgICAgYjIgKz0gaTsKKyAgICAgICAgczIgKz0gaTsKKyAgICAgICAgbWhpID0gaTJiKDEpOworICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgfQorICAgIGlmIChtMiA+IDAgJiYgczIgPiAwKSB7CisgICAgICAgIGkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKyAgICAgICAgYjIgLT0gaTsKKyAgICAgICAgbTIgLT0gaTsKKyAgICAgICAgczIgLT0gaTsKKyAgICB9CisgICAgaWYgKGI1ID4gMCkgeworICAgICAgICBpZiAobGVmdHJpZ2h0KSB7CisgICAgICAgICAgICBpZiAobTUgPiAwKSB7CisgICAgICAgICAgICAgICAgbWhpID0gcG93NW11bHQobWhpLCBtNSk7CisgICAgICAgICAgICAgICAgaWYgKG1oaSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICAgICAgYjEgPSBtdWx0KG1oaSwgYik7CisgICAgICAgICAgICAgICAgQmZyZWUoYik7CisgICAgICAgICAgICAgICAgYiA9IGIxOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaiA9IGI1IC0gbTUpKSB7CisgICAgICAgICAgICAgICAgYiA9IHBvdzVtdWx0KGIsIGopOworICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGIgPSBwb3c1bXVsdChiLCBiNSk7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorICAgIH0KKyAgICBTID0gaTJiKDEpOworICAgIGlmIChTID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICBpZiAoczUgPiAwKSB7CisgICAgICAgIFMgPSBwb3c1bXVsdChTLCBzNSk7CisgICAgICAgIGlmIChTID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuICovCisKKyAgICBzcGVjX2Nhc2UgPSAwOworICAgIGlmICgobW9kZSA8IDIgfHwgbGVmdHJpZ2h0KQorICAgICAgICApIHsKKyAgICAgICAgaWYgKCF3b3JkMSgmdSkgJiYgISh3b3JkMCgmdSkgJiBCbmRyeV9tYXNrKQorICAgICAgICAgICAgJiYgd29yZDAoJnUpICYgKEV4cF9tYXNrICYgfkV4cF9tc2sxKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAvKiBUaGUgc3BlY2lhbCBjYXNlICovCisgICAgICAgICAgICBiMiArPSBMb2cyUDsKKyAgICAgICAgICAgIHMyICs9IExvZzJQOworICAgICAgICAgICAgc3BlY19jYXNlID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgorICAgICAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCisgICAgICoKKyAgICAgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRzIG9mIFMgb25jZQorICAgICAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAorICAgICAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCisgICAgICovCisjZGVmaW5lIGlJbmMgMjgKKyAgICBpID0gZHNoaWZ0KFMsIHMyKTsKKyAgICBiMiArPSBpOworICAgIG0yICs9IGk7CisgICAgczIgKz0gaTsKKyAgICBpZiAoYjIgPiAwKSB7CisgICAgICAgIGIgPSBsc2hpZnQoYiwgYjIpOworICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIH0KKyAgICBpZiAoczIgPiAwKSB7CisgICAgICAgIFMgPSBsc2hpZnQoUywgczIpOworICAgICAgICBpZiAoUyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgIH0KKyAgICBpZiAoa19jaGVjaykgeworICAgICAgICBpZiAoY21wKGIsUykgPCAwKSB7CisgICAgICAgICAgICBrLS07CisgICAgICAgICAgICBiID0gbXVsdGFkZChiLCAxMCwgMCk7ICAgICAgLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICBpZiAobGVmdHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlsaW0gPSBpbGltMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaWxpbSA8PSAwICYmIChtb2RlID09IDMgfHwgbW9kZSA9PSA1KSkgeworICAgICAgICBpZiAoaWxpbSA8IDApIHsKKyAgICAgICAgICAgIC8qIG5vIGRpZ2l0cywgZmN2dCBzdHlsZSAqLworICAgICAgICAgIG5vX2RpZ2l0czoKKyAgICAgICAgICAgIGsgPSAtMSAtIG5kaWdpdHM7CisgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFMgPSBtdWx0YWRkKFMsIDUsIDApOworICAgICAgICAgICAgaWYgKFMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICBpZiAoY21wKGIsIFMpIDw9IDApCisgICAgICAgICAgICAgICAgZ290byBub19kaWdpdHM7CisgICAgICAgIH0KKyAgICAgIG9uZV9kaWdpdDoKKyAgICAgICAgKnMrKyA9ICcxJzsKKyAgICAgICAgaysrOworICAgICAgICBnb3RvIHJldDsKKyAgICB9CisgICAgaWYgKGxlZnRyaWdodCkgeworICAgICAgICBpZiAobTIgPiAwKSB7CisgICAgICAgICAgICBtaGkgPSBsc2hpZnQobWhpLCBtMik7CisgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICB9CisKKyAgICAgICAgLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorICAgICAgICAgKiB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisgICAgICAgICAqLworCisgICAgICAgIG1sbyA9IG1oaTsKKyAgICAgICAgaWYgKHNwZWNfY2FzZSkgeworICAgICAgICAgICAgbWhpID0gQmFsbG9jKG1oaS0+ayk7CisgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgQmNvcHkobWhpLCBtbG8pOworICAgICAgICAgICAgbWhpID0gbHNoaWZ0KG1oaSwgTG9nMlApOworICAgICAgICAgICAgaWYgKG1oaSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpID0gMTs7aSsrKSB7CisgICAgICAgICAgICBkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKyAgICAgICAgICAgIC8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZworICAgICAgICAgICAgICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGogPSBjbXAoYiwgbWxvKTsKKyAgICAgICAgICAgIGRlbHRhID0gZGlmZihTLCBtaGkpOworICAgICAgICAgICAgaWYgKGRlbHRhID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsZWRfbWFsbG9jOworICAgICAgICAgICAgajEgPSBkZWx0YS0+c2lnbiA/IDEgOiBjbXAoYiwgZGVsdGEpOworICAgICAgICAgICAgQmZyZWUoZGVsdGEpOworICAgICAgICAgICAgaWYgKGoxID09IDAgJiYgbW9kZSAhPSAxICYmICEod29yZDEoJnUpICYgMSkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlnID09ICc5JykKKyAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZF85X3VwOworICAgICAgICAgICAgICAgIGlmIChqID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZGlnKys7CisgICAgICAgICAgICAgICAgKnMrKyA9IGRpZzsKKyAgICAgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChqIDwgMCB8fCAoaiA9PSAwICYmIG1vZGUgIT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHdvcmQxKCZ1KSAmIDEpCisgICAgICAgICAgICAgICAgICAgICkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWItPnhbMF0gJiYgYi0+d2RzIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBhY2NlcHRfZGlnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoajEgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGIgPSBsc2hpZnQoYiwgMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChiID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICAgICAgICAgIGoxID0gY21wKGIsIFMpOworICAgICAgICAgICAgICAgICAgICBpZiAoKGoxID4gMCB8fCAoajEgPT0gMCAmJiBkaWcgJiAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGRpZysrID09ICc5JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcm91bmRfOV91cDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGFjY2VwdF9kaWc6CisgICAgICAgICAgICAgICAgKnMrKyA9IGRpZzsKKyAgICAgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChqMSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09IDEgKi8KKyAgICAgICAgICAgICAgICAgIHJvdW5kXzlfdXA6CisgICAgICAgICAgICAgICAgICAgICpzKysgPSAnOSc7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcm91bmRvZmY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpzKysgPSBkaWcgKyAxOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnMrKyA9IGRpZzsKKyAgICAgICAgICAgIGlmIChpID09IGlsaW0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBiID0gbXVsdGFkZChiLCAxMCwgMCk7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIGlmIChtbG8gPT0gbWhpKSB7CisgICAgICAgICAgICAgICAgbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobWxvID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7CisgICAgICAgICAgICAgICAgaWYgKG1sbyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgICAgICAgICAgbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAobWhpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgICAgIGZvcihpID0gMTs7IGkrKykgeworICAgICAgICAgICAgKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworICAgICAgICAgICAgaWYgKCFiLT54WzBdICYmIGItPndkcyA8PSAxKSB7CisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA+PSBpbGltKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYiA9IG11bHRhZGQoYiwgMTAsIDApOworICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZF9tYWxsb2M7CisgICAgICAgIH0KKworICAgIC8qIFJvdW5kIG9mZiBsYXN0IGRpZ2l0ICovCisKKyAgICBiID0gbHNoaWZ0KGIsIDEpOworICAgIGlmIChiID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbGVkX21hbGxvYzsKKyAgICBqID0gY21wKGIsIFMpOworICAgIGlmIChqID4gMCB8fCAoaiA9PSAwICYmIGRpZyAmIDEpKSB7CisgICAgICByb3VuZG9mZjoKKyAgICAgICAgd2hpbGUoKi0tcyA9PSAnOScpCisgICAgICAgICAgICBpZiAocyA9PSBzMCkgeworICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgICAqcysrID0gJzEnOworICAgICAgICAgICAgICAgIGdvdG8gcmV0OworICAgICAgICAgICAgfQorICAgICAgICArKypzKys7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3aGlsZSgqLS1zID09ICcwJyk7CisgICAgICAgIHMrKzsKKyAgICB9CisgIHJldDoKKyAgICBCZnJlZShTKTsKKyAgICBpZiAobWhpKSB7CisgICAgICAgIGlmIChtbG8gJiYgbWxvICE9IG1oaSkKKyAgICAgICAgICAgIEJmcmVlKG1sbyk7CisgICAgICAgIEJmcmVlKG1oaSk7CisgICAgfQorICByZXQxOgorICAgIEJmcmVlKGIpOworICAgICpzID0gMDsKKyAgICAqZGVjcHQgPSBrICsgMTsKKyAgICBpZiAocnZlKQorICAgICAgICAqcnZlID0gczsKKyAgICByZXR1cm4gczA7CisgIGZhaWxlZF9tYWxsb2M6CisgICAgaWYgKFMpCisgICAgICAgIEJmcmVlKFMpOworICAgIGlmIChtbG8gJiYgbWxvICE9IG1oaSkKKyAgICAgICAgQmZyZWUobWxvKTsKKyAgICBpZiAobWhpKQorICAgICAgICBCZnJlZShtaGkpOworICAgIGlmIChiKQorICAgICAgICBCZnJlZShiKTsKKyAgICBpZiAoczApCisgICAgICAgIF9QeV9kZ19mcmVlZHRvYShzMCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9kdXAyLmMgYi9QeXRob24vZHVwMi5jCmluZGV4IGJhNzQxM2EuLjI1NzlhZmQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9kdXAyLmMKKysrIGIvUHl0aG9uL2R1cDIuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjZGVmaW5lIEJBREVYSVQgLTEKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMgYi9QeXRob24vZHlubG9hZF9haXguYwppbmRleCA4ZDU2ZDdkLi4xNDk5OTBkIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9haXguYworKysgYi9QeXRob24vZHlubG9hZF9haXguYwpAQCAtMTIsNyArMTIsNyBAQAogCiAKICNpZmRlZiBBSVhfR0VOVUlORV9DUExVU1BMVVMKLSNpbmNsdWRlICIvdXNyL2xwcC94bEMvaW5jbHVkZS9sb2FkLmgiCisjaW5jbHVkZSA8bG9hZC5oPgogI2RlZmluZSBhaXhfbG9hZCBsb2FkQW5kSW5pdAogI2Vsc2UKICNkZWZpbmUgYWl4X2xvYWQgbG9hZApkaWZmIC0tZ2l0IGEvUHl0aG9uL2Vycm9ycy5jIGIvUHl0aG9uL2Vycm9ycy5jCmluZGV4IGRhNGI0NjMuLjQyOTRmMmYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9lcnJvcnMuYworKysgYi9QeXRob24vZXJyb3JzLmMKQEAgLTEwNiwxMCArMTA2LDE2IEBACiAgICAgICAgIGVyciA9IFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2xhc3MoZXJyKTsKIAogICAgIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGVycikgJiYgUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGMpKSB7Ci0gICAgICAgIGludCByZXMgPSAwOworICAgICAgICBpbnQgcmVzID0gMCwgcmVjbGltaXQ7CiAgICAgICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOwogICAgICAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGJ1bXAgdGhlIHJlY3Vyc2lvbiBsaW1pdCwgc28gdGhhdCBpbiB0aGUgbW9zdAorICAgICAgICAgICBjb21tb24gY2FzZSBQeU9iamVjdF9Jc1N1YmNsYXNzIHdpbGwgbm90IHJhaXNlIGEgcmVjdXJzaW9uCisgICAgICAgICAgIGVycm9yIHdlIGhhdmUgdG8gaWdub3JlIGFueXdheS4gKi8KKyAgICAgICAgcmVjbGltaXQgPSBQeV9HZXRSZWN1cnNpb25MaW1pdCgpOworICAgICAgICBQeV9TZXRSZWN1cnNpb25MaW1pdChyZWNsaW1pdCArIDUpOwogICAgICAgICByZXMgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGVyciwgZXhjKTsKKyAgICAgICAgUHlfU2V0UmVjdXJzaW9uTGltaXQocmVjbGltaXQpOwogICAgICAgICAvKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGZhaWwsIHNvIHByaW50IHRoZSBlcnJvciBoZXJlICovCiAgICAgICAgIGlmIChyZXMgPT0gLTEpIHsKICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShlcnIpOwpAQCAtMzY1LDcgKzM3MSw3IEBACiAKIAogUHlPYmplY3QgKgotUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNoYXIgKmZpbGVuYW1lKQorUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVN0cmluZ19Gcm9tU3RyaW5nKGZpbGVuYW1lKSA6IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChleGMsIG5hbWUpOwpAQCAtMzczLDkgKzM3OSw5IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUworI2lmZGVmIE1TX1dJTkRPV1MKIFB5T2JqZWN0ICoKLVB5RXJyX1NldEZyb21FcnJub1dpdGhVbmljb2RlRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgUHlfVU5JQ09ERSAqZmlsZW5hbWUpCitQeUVycl9TZXRGcm9tRXJybm9XaXRoVW5pY29kZUZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IFB5X1VOSUNPREUgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CkBAIC0zODQsNyArMzkwLDcgQEAKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0jZW5kaWYgLyogUHlfV0lOX1dJREVfRklMRU5BTUVTICovCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBQeU9iamVjdCAqCiBQeUVycl9TZXRGcm9tRXJybm8oUHlPYmplY3QgKmV4YykKQEAgLTQ1NCw3ICs0NjAsNiBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBQeV9XSU5fV0lERV9GSUxFTkFNRVMKIFB5T2JqZWN0ICpQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhVbmljb2RlRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKmV4YywKICAgICBpbnQgaWVyciwKQEAgLTQ2OSw3ICs0NzQsNiBAQAogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KIAogUHlPYmplY3QgKlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5T2JqZWN0ICpleGMsIGludCBpZXJyKQogewpAQCAtNDkzLDcgKzQ5Nyw2IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmZGVmIFB5X1dJTl9XSURFX0ZJTEVOQU1FUwogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZSgKICAgICBpbnQgaWVyciwKICAgICBjb25zdCBQeV9VTklDT0RFICpmaWxlbmFtZSkKQEAgLTUwNyw3ICs1MTAsNiBAQAogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZiAvKiBQeV9XSU5fV0lERV9GSUxFTkFNRVMgKi8KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIHZvaWQKQEAgLTYwMiw2ICs2MDQsNDAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisKKy8qIENyZWF0ZSBhbiBleGNlcHRpb24gd2l0aCBkb2NzdHJpbmcgKi8KK1B5T2JqZWN0ICoKK1B5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoY2hhciAqbmFtZSwgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpCit7CisgICAgaW50IHJlc3VsdDsKKyAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbXlkaWN0ID0gTlVMTDsgLyogcG9pbnRzIHRvIHRoZSBkaWN0IG9ubHkgaWYgd2UgY3JlYXRlIGl0ICovCisgICAgUHlPYmplY3QgKmRvY29iajsKKworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgZGljdCA9IG15ZGljdCA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZG9jICE9IE5VTEwpIHsKKyAgICAgICAgZG9jb2JqID0gUHlTdHJpbmdfRnJvbVN0cmluZyhkb2MpOworICAgICAgICBpZiAoZG9jb2JqID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX2RvY19fIiwgZG9jb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGRvY29iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsdXJlOworICAgIH0KKworICAgIHJldCA9IFB5RXJyX05ld0V4Y2VwdGlvbihuYW1lLCBiYXNlLCBkaWN0KTsKKyAgZmFpbHVyZToKKyAgICBQeV9YREVDUkVGKG15ZGljdCk7CisgICAgcmV0dXJuIHJldDsKK30KKworCiAvKiBDYWxsIHdoZW4gYW4gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCBidXQgdGhlcmUgaXMgbm8gd2F5IGZvciBQeXRob24KICAgIHRvIGhhbmRsZSBpdC4gIEV4YW1wbGVzOiBleGNlcHRpb24gaW4gX19kZWxfXyBvciBkdXJpbmcgR0MuICovCiB2b2lkCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3N0cmluZy5jIGIvUHl0aG9uL2Zvcm1hdHRlcl9zdHJpbmcuYwppbmRleCBmMzNhZDcwLi4wNmEyZWY1IDEwMDY0NAotLS0gYS9QeXRob24vZm9ybWF0dGVyX3N0cmluZy5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfc3RyaW5nLmMKQEAgLTEsMTQgKzEsMTcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEltcGxlbWVudHMgdGhlIHN0cmluZyAoYXMgb3Bwb3NlZCB0byB1bmljb2RlKSB2ZXJzaW9uIG9mIHRoZQogICAgYnVpbHQtaW4gZm9ybWF0dGVycyBmb3Igc3RyaW5nLCBpbnQsIGZsb2F0LiAgVGhhdCBpcywgdGhlIHZlcnNpb25zCi0gICBvZiBpbnQuX19mbG9hdF9fLCBldGMuLCB0aGF0IHRha2UgYW5kIHJldHVybiBzdHJpbmcgb2JqZWN0cyAqLworICAgb2YgaW50Ll9fZm9ybWF0X18sIGV0Yy4sIHRoYXQgdGFrZSBhbmQgcmV0dXJuIHN0cmluZyBvYmplY3RzICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICIuLi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgiCiAKLSNkZWZpbmUgRk9STUFUX1NUUklORyBfUHlCeXRlc19Gb3JtYXRBZHZhbmNlZAotI2RlZmluZSBGT1JNQVRfTE9ORyAgIF9QeUxvbmdfRm9ybWF0QWR2YW5jZWQKLSNkZWZpbmUgRk9STUFUX0lOVCAgICBfUHlJbnRfRm9ybWF0QWR2YW5jZWQKLSNkZWZpbmUgRk9STUFUX0ZMT0FUICBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZAorI2RlZmluZSBGT1JNQVRfU1RSSU5HICBfUHlCeXRlc19Gb3JtYXRBZHZhbmNlZAorI2RlZmluZSBGT1JNQVRfTE9ORyAgICBfUHlMb25nX0Zvcm1hdEFkdmFuY2VkCisjZGVmaW5lIEZPUk1BVF9JTlQgICAgIF9QeUludF9Gb3JtYXRBZHZhbmNlZAorI2RlZmluZSBGT1JNQVRfRkxPQVQgICBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZAorI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKKyNkZWZpbmUgRk9STUFUX0NPTVBMRVggX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZAorI2VuZGlmCiAKICNpbmNsdWRlICIuLi9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaCIKZGlmZiAtLWdpdCBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKaW5kZXggNGYyZTUzZi4uNmUzNjg1ZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKKysrIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKQEAgLTIsMTIgKzIsMTcgQEAKICAgIGJ1aWx0LWluIGZvcm1hdHRlciBmb3IgdW5pY29kZS4gIFRoYXQgaXMsIHVuaWNvZGUuX19mb3JtYXRfXygpLiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBQeV9VU0lOR19VTklDT0RFCisKICNpbmNsdWRlICIuLi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIgogCiAjZGVmaW5lIEZPUk1BVF9TVFJJTkcgX1B5VW5pY29kZV9Gb3JtYXRBZHZhbmNlZAogCi0vKiBkb24ndCBkZWZpbmUgRk9STUFUX0xPTkcgYW5kIEZPUk1BVF9GTE9BVCwgc2luY2Ugd2UgY2FuIGxpdmUKLSAgIHdpdGggb25seSB0aGUgc3RyaW5nIHZlcnNpb25zIG9mIHRob3NlLiAgVGhlIGJ1aWx0aW4gZm9ybWF0KCkKLSAgIHdpbGwgY29udmVydCB0aGVtIHRvIHVuaWNvZGUuICovCisvKiBkb24ndCBkZWZpbmUgRk9STUFUX0xPTkcsIEZPUk1BVF9GTE9BVCwgYW5kIEZPUk1BVF9DT01QTEVYLCBzaW5jZQorICAgd2UgY2FuIGxpdmUgd2l0aCBvbmx5IHRoZSBzdHJpbmcgdmVyc2lvbnMgb2YgdGhvc2UuICBUaGUgYnVpbHRpbgorICAgZm9ybWF0KCkgd2lsbCBjb252ZXJ0IHRoZW0gdG8gdW5pY29kZS4gKi8KIAogI2luY2x1ZGUgIi4uL09iamVjdHMvc3RyaW5nbGliL2Zvcm1hdHRlci5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9mdXR1cmUuYyBiL1B5dGhvbi9mdXR1cmUuYwppbmRleCA5MTU4ZGY0Li45NmJlNzU3IDEwMDY0NAotLS0gYS9QeXRob24vZnV0dXJlLmMKKysrIGIvUHl0aG9uL2Z1dHVyZS5jCkBAIC04LDYgKzgsOCBAQAogI2luY2x1ZGUgInN5bXRhYmxlLmgiCiAKICNkZWZpbmUgVU5ERUZJTkVEX0ZVVFVSRV9GRUFUVVJFICJmdXR1cmUgZmVhdHVyZSAlLjEwMHMgaXMgbm90IGRlZmluZWQiCisjZGVmaW5lIEVSUl9MQVRFX0ZVVFVSRSBcCisiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIgogCiBzdGF0aWMgaW50CiBmdXR1cmVfY2hlY2tfZmVhdHVyZXMoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIHN0bXRfdHkgcywgY29uc3QgY2hhciAqZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0YXJncy5jIGIvUHl0aG9uL2dldGFyZ3MuYwppbmRleCBiMzllMDdlLi43YzNlOWZhIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0YXJncy5jCisrKyBiL1B5dGhvbi9nZXRhcmdzLmMKQEAgLTEzOSwyMiArMTM5LDMzIEBACiAKIC8qIEhhbmRsZSBjbGVhbnVwIG9mIGFsbG9jYXRlZCBtZW1vcnkgaW4gY2FzZSBvZiBleGNlcHRpb24gKi8KIAorI2RlZmluZSBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX1BUUiAiZ2V0YXJncy5jbGVhbnVwX3B0ciIKKyNkZWZpbmUgR0VUQVJHU19DQVBTVUxFX05BTUVfQ0xFQU5VUF9CVUZGRVIgImdldGFyZ3MuY2xlYW51cF9idWZmZXIiCisKIHN0YXRpYyB2b2lkCi1jbGVhbnVwX3B0cih2b2lkICpwdHIpCitjbGVhbnVwX3B0cihQeU9iamVjdCAqc2VsZikKIHsKLSAgICBQeU1lbV9GUkVFKHB0cik7CisgICAgdm9pZCAqcHRyID0gUHlDYXBzdWxlX0dldFBvaW50ZXIoc2VsZiwgR0VUQVJHU19DQVBTVUxFX05BTUVfQ0xFQU5VUF9QVFIpOworICAgIGlmIChwdHIpIHsKKyAgICAgIFB5TWVtX0ZSRUUocHRyKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCi1jbGVhbnVwX2J1ZmZlcih2b2lkICpwdHIpCitjbGVhbnVwX2J1ZmZlcihQeU9iamVjdCAqc2VsZikKIHsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKChQeV9idWZmZXIgKikgcHRyKTsKKyAgICBQeV9idWZmZXIgKnB0ciA9IChQeV9idWZmZXIgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihzZWxmLCBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX0JVRkZFUik7CisgICAgaWYgKHB0cikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKHB0cik7CisgICAgfQogfQogCiBzdGF0aWMgaW50Ci1hZGRjbGVhbnVwKHZvaWQgKnB0ciwgUHlPYmplY3QgKipmcmVlbGlzdCwgdm9pZCAoKmRlc3RyKSh2b2lkICopKQorYWRkY2xlYW51cCh2b2lkICpwdHIsIFB5T2JqZWN0ICoqZnJlZWxpc3QsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RyKQogewogICAgIFB5T2JqZWN0ICpjb2JqOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKICAgICBpZiAoISpmcmVlbGlzdCkgewogICAgICAgICAqZnJlZWxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAoISpmcmVlbGlzdCkgewpAQCAtMTYyLDcgKzE3MywxNSBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIGNvYmogPSBQeUNPYmplY3RfRnJvbVZvaWRQdHIocHRyLCBkZXN0cik7CisKKyAgICBpZiAoZGVzdHIgPT0gY2xlYW51cF9wdHIpIHsKKyAgICAgICAgbmFtZSA9IEdFVEFSR1NfQ0FQU1VMRV9OQU1FX0NMRUFOVVBfUFRSOworICAgIH0gZWxzZSBpZiAoZGVzdHIgPT0gY2xlYW51cF9idWZmZXIpIHsKKyAgICAgICAgbmFtZSA9IEdFVEFSR1NfQ0FQU1VMRV9OQU1FX0NMRUFOVVBfQlVGRkVSOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29iaiA9IFB5Q2Fwc3VsZV9OZXcocHRyLCBuYW1lLCBkZXN0cik7CiAgICAgaWYgKCFjb2JqKSB7CiAgICAgICAgIGRlc3RyKHB0cik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTE4Myw4ICsyMDIsNyBAQAogICAgICAgICAgICBkb24ndCBnZXQgY2FsbGVkLiAqLwogICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5TGlzdF9HRVRfU0laRShmcmVlbGlzdCksIGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgICAgICgoUHlDT2JqZWN0ICopIFB5TGlzdF9HRVRfSVRFTShmcmVlbGlzdCwgaSkpCi0gICAgICAgICAgICAgICAgLT5kZXN0cnVjdG9yID0gTlVMTDsKKyAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yKFB5TGlzdF9HRVRfSVRFTShmcmVlbGlzdCwgaSksIE5VTEwpOwogICAgIH0KICAgICBQeV9YREVDUkVGKGZyZWVsaXN0KTsKICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMzI4LDcgKzM0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBsZXZlbHMsIG1zZ2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1zZ2J1ZiksICZmcmVlbGlzdCk7CiAgICAgICAgIGlmIChtc2cpIHsKLSAgICAgICAgICAgIHNldGVycm9yKGkrMSwgbXNnLCBsZXZlbHMsIGZuYW1lLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIHNldGVycm9yKGkrMSwgbXNnLCBsZXZlbHMsIGZuYW1lLCBtc2cpOwogICAgICAgICAgICAgcmV0dXJuIGNsZWFucmV0dXJuKDAsIGZyZWVsaXN0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTUyNiw3ICs1NDQsNyBAQAogLyogZXhwbGljaXRseSBjaGVjayBmb3IgZmxvYXQgYXJndW1lbnRzIHdoZW4gaW50ZWdlcnMgYXJlIGV4cGVjdGVkLiAgRm9yIG5vdwogICogc2lnbmFsIGEgd2FybmluZy4gIFJldHVybnMgdHJ1ZSBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZC4gKi8KIHN0YXRpYyBpbnQKLWZsb2F0X2FyZ3VtZW50X2Vycm9yKFB5T2JqZWN0ICphcmcpCitmbG9hdF9hcmd1bWVudF93YXJuaW5nKFB5T2JqZWN0ICphcmcpCiB7CiAgICAgaWYgKFB5RmxvYXRfQ2hlY2soYXJnKSAmJgogICAgICAgICBQeUVycl9XYXJuKFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKQEAgLTUzNiw2ICs1NTQsMjAgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGZsb2F0IGFyZ3VtZW50cyB3aGVuIGludGVnZXJzIGFyZSBleHBlY3RlZC4gIFJhaXNlcworICAgVHlwZUVycm9yIGFuZCByZXR1cm5zIHRydWUgZm9yIGZsb2F0IGFyZ3VtZW50cy4gKi8KK3N0YXRpYyBpbnQKK2Zsb2F0X2FyZ3VtZW50X2Vycm9yKFB5T2JqZWN0ICphcmcpCit7CisgICAgaWYgKFB5RmxvYXRfQ2hlY2soYXJnKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwogLyogQ29udmVydCBhIG5vbi10dXBsZSBhcmd1bWVudC4gIFJldHVybiBOVUxMIGlmIGNvbnZlcnNpb24gd2VudCBPSywKICAgIG9yIGEgc3RyaW5nIHdpdGggYSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGZhaWx1cmUuICBUaGUgbWVzc2FnZSBpcwogICAgZm9ybWF0dGVkIGFzICJtdXN0IGJlIDxkZXNpcmVkIHR5cGU+LCBub3QgPGFjdHVhbCB0eXBlPiIuCkBAIC03MTksNyArNzUxLDEwIEBACiAjaWZkZWYgSEFWRV9MT05HX0xPTkcKICAgICBjYXNlICdMJzogey8qIFBZX0xPTkdfTE9ORyAqLwogICAgICAgICBQWV9MT05HX0xPTkcgKnAgPSB2YV9hcmcoICpwX3ZhLCBQWV9MT05HX0xPTkcgKiApOwotICAgICAgICBQWV9MT05HX0xPTkcgaXZhbCA9IFB5TG9uZ19Bc0xvbmdMb25nKCBhcmcgKTsKKyAgICAgICAgUFlfTE9OR19MT05HIGl2YWw7CisgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF93YXJuaW5nKGFyZykpCisgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigibG9uZzxMPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc0xvbmdMb25nKGFyZyk7CiAgICAgICAgIGlmIChpdmFsID09IChQWV9MT05HX0xPTkcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSApIHsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJsb25nPEw+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTczMiwxNiArMTc2Nyw2IEBACiAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZygqcF92YSwgUHlUeXBlT2JqZWN0Kik7CiAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZygqcF92YSwgUHlPYmplY3QgKiopOwogICAgICAgICAgICAgfQotI2lmIDAKLS8qIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgaXMgZm9yICovCi0gICAgICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICc/JykgewotICAgICAgICAgICAgICAgIGlucXVpcnkgcHJlZCA9IHZhX2FyZygqcF92YSwgaW5xdWlyeSk7Ci0gICAgICAgICAgICAgICAgZm9ybWF0Kys7Ci0gICAgICAgICAgICAgICAgaWYgKCgqcHJlZCkoYXJnKSkgewotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKCpwX3ZhLCBQeU9iamVjdCAqKik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICcmJykgewogICAgICAgICAgICAgICAgIHR5cGVkZWYgaW50ICgqY29udmVydGVyKShQeU9iamVjdCAqLCB2b2lkICopOwogICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcoKnBfdmEsIGNvbnZlcnRlcik7CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0Y29weXJpZ2h0LmMgYi9QeXRob24vZ2V0Y29weXJpZ2h0LmMKaW5kZXggYTVlN2ZhNi4uODI0YzdiMSAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGNvcHlyaWdodC5jCisrKyBiL1B5dGhvbi9nZXRjb3B5cmlnaHQuYwpAQCAtNCw3ICs0LDcgQEAKIAogc3RhdGljIGNoYXIgY3BydFtdID0gCiAiXAotQ29weXJpZ2h0IChjKSAyMDAxLTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uXG5cCitDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi5cblwKIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cCiBcblwKIENvcHlyaWdodCAoYykgMjAwMCBCZU9wZW4uY29tLlxuXApkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGN3ZC5jIGIvUHl0aG9uL2dldGN3ZC5jCmluZGV4IDRiZWRiZDEuLjQ0ZGM5ZTYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9nZXRjd2QuYworKysgYi9QeXRob24vZ2V0Y3dkLmMKQEAgLTU5LDE0ICs1OSwxMyBAQAogewogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgKnA7Ci0gICAgaW50IHN0czsKICAgICBpZiAoc2l6ZSA8PSAwKSB7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKChmcCA9IHBvcGVuKFBXRF9DTUQsICJyIikpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChmZ2V0cyhidWYsIHNpemUsIGZwKSA9PSBOVUxMIHx8IChzdHMgPSBwY2xvc2UoZnApKSAhPSAwKSB7CisgICAgaWYgKGZnZXRzKGJ1Ziwgc2l6ZSwgZnApID09IE5VTEwgfHwgcGNsb3NlKGZwKSAhPSAwKSB7CiAgICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0bXRpbWUuYyBiL1B5dGhvbi9nZXRtdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGVkYjUzLi4wMDAwMDAwCi0tLSBhL1B5dGhvbi9nZXRtdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotCi0vKiBTdWJyb3V0aW5lIHRvIGdldCB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgKi8KLQotLyogKEEgc2VwYXJhdGUgZmlsZSBiZWNhdXNlIHRoaXMgbWF5IGJlIE9TIGRlcGVuZGVudCkgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInB5Y29uZmlnLmgiCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotdGltZV90Ci1QeU9TX0dldExhc3RNb2RpZmljYXRpb25UaW1lKGNoYXIgKnBhdGgsIEZJTEUgKmZwKQotewotCXN0cnVjdCBzdGF0IHN0OwotCWlmIChmc3RhdChmaWxlbm8oZnApLCAmc3QpICE9IDApCi0JCXJldHVybiAtMTsKLQllbHNlCi0JCXJldHVybiBzdC5zdF9tdGltZTsKLX0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dyYW1pbml0LmMgYi9QeXRob24vZ3JhbWluaXQuYwppbmRleCBjOGNmMzVhLi41ZGI2YmI1IDEwMDY0NAotLS0gYS9QeXRob24vZ3JhbWluaXQuYworKysgYi9QeXRob24vZ3JhbWluaXQuYwpAQCAtOTAxLDQyICs5MDEsNDMgQEAKICAgICB7MTAwLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDFfMVsxXSA9IHsKLSAgICB7MjgsIDJ9LAorICAgIHsxMDEsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV8yWzJdID0gewotICAgIHsxMDEsIDN9LAotICAgIHsyMywgNH0sCisgICAgezI5LCAxfSwKKyAgICB7MjMsIDN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV8zWzFdID0gewotICAgIHsyMywgNH0sCisgICAgezI0LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDFfNFsxXSA9IHsKLSAgICB7MjQsIDV9LAorICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDFfNVsxXSA9IHsKLSAgICB7MCwgNX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc180MVs2XSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDFbNV0gPSB7CiAgICAgezEsIGFyY3NfNDFfMH0sCiAgICAgezEsIGFyY3NfNDFfMX0sCiAgICAgezIsIGFyY3NfNDFfMn0sCiAgICAgezEsIGFyY3NfNDFfM30sCiAgICAgezEsIGFyY3NfNDFfNH0sCi0gICAgezEsIGFyY3NfNDFfNX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQyXzBbMV0gPSB7Ci0gICAgezgwLCAxfSwKKyAgICB7MjgsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180Ml8xWzFdID0gewotICAgIHs4NCwgMn0sCitzdGF0aWMgYXJjIGFyY3NfNDJfMVsyXSA9IHsKKyAgICB7ODAsIDJ9LAorICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDJfMlsxXSA9IHsKLSAgICB7MCwgMn0sCisgICAgezg0LCAzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQyWzNdID0geworc3RhdGljIGFyYyBhcmNzXzQyXzNbMV0gPSB7CisgICAgezAsIDN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDJbNF0gPSB7CiAgICAgezEsIGFyY3NfNDJfMH0sCi0gICAgezEsIGFyY3NfNDJfMX0sCisgICAgezIsIGFyY3NfNDJfMX0sCiAgICAgezEsIGFyY3NfNDJfMn0sCisgICAgezEsIGFyY3NfNDJfM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQzXzBbMV0gPSB7CiAgICAgezEwMiwgMX0sCkBAIC0xNTI1LDI2ICsxNTI2LDU3IEBACiBzdGF0aWMgYXJjIGFyY3NfNzJfMFsxXSA9IHsKICAgICB7MjgsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183Ml8xWzFdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzFbNF0gPSB7CiAgICAgezIzLCAyfSwKKyAgICB7MTU3LCAzfSwKKyAgICB7MjksIDR9LAorICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzJfMlsxXSA9IHsKLSAgICB7MjgsIDN9LAorICAgIHsyOCwgNX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzNbMl0gPSB7Ci0gICAgezI5LCA0fSwKK3N0YXRpYyBhcmMgYXJjc183Ml8zWzFdID0gewogICAgIHswLCAzfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzJfNFsyXSA9IHsKLSAgICB7MjgsIDF9LAorICAgIHsyOCwgNn0sCiAgICAgezAsIDR9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzJbNV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzJfNVszXSA9IHsKKyAgICB7MTU3LCAzfSwKKyAgICB7MjksIDd9LAorICAgIHswLCA1fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzJfNlsyXSA9IHsKKyAgICB7MjksIDR9LAorICAgIHswLCA2fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzJfN1syXSA9IHsKKyAgICB7MjgsIDh9LAorICAgIHswLCA3fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzJfOFsxXSA9IHsKKyAgICB7MjMsIDl9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml85WzFdID0geworICAgIHsyOCwgMTB9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml8xMFsyXSA9IHsKKyAgICB7MjksIDd9LAorICAgIHswLCAxMH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183MlsxMV0gPSB7CiAgICAgezEsIGFyY3NfNzJfMH0sCi0gICAgezEsIGFyY3NfNzJfMX0sCisgICAgezQsIGFyY3NfNzJfMX0sCiAgICAgezEsIGFyY3NfNzJfMn0sCi0gICAgezIsIGFyY3NfNzJfM30sCisgICAgezEsIGFyY3NfNzJfM30sCiAgICAgezIsIGFyY3NfNzJfNH0sCisgICAgezMsIGFyY3NfNzJfNX0sCisgICAgezIsIGFyY3NfNzJfNn0sCisgICAgezIsIGFyY3NfNzJfN30sCisgICAgezEsIGFyY3NfNzJfOH0sCisgICAgezEsIGFyY3NfNzJfOX0sCisgICAgezIsIGFyY3NfNzJfMTB9LAogfTsKIHN0YXRpYyBhcmMgYXJjc183M18wWzFdID0gewogICAgIHsxNjEsIDF9LApAQCAtMTg3NywxMCArMTkwOSwxMCBAQAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAogICAgIHsyOTYsICJ0cnlfc3RtdCIsIDAsIDEzLCBzdGF0ZXNfNDAsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5NywgIndpdGhfc3RtdCIsIDAsIDYsIHN0YXRlc180MSwKKyAgICB7Mjk3LCAid2l0aF9zdG10IiwgMCwgNSwgc3RhdGVzXzQxLAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyOTgsICJ3aXRoX3ZhciIsIDAsIDMsIHN0YXRlc180MiwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjk4LCAid2l0aF9pdGVtIiwgMCwgNCwgc3RhdGVzXzQyLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LAogICAgIHsyOTksICJleGNlcHRfY2xhdXNlIiwgMCwgNSwgc3RhdGVzXzQzLAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAogICAgIHszMDAsICJzdWl0ZSIsIDAsIDUsIHN0YXRlc180NCwKQEAgLTE5MjMsNyArMTk1NSw3IEBACiAgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQ0XDAxNVwwMDBcMDAwIn0sCiAgICAgezMxOSwgImxpc3RtYWtlciIsIDAsIDUsIHN0YXRlc182MywKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAxMFwwMDBcMjAwXDA0MVwwNDRcMDE1XDAwMFwwMDAifSwKLSAgICB7MzIwLCAidGVzdGxpc3RfZ2V4cCIsIDAsIDUsIHN0YXRlc182NCwKKyAgICB7MzIwLCAidGVzdGxpc3RfY29tcCIsIDAsIDUsIHN0YXRlc182NCwKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAxMFwwMDBcMjAwXDA0MVwwNDRcMDE1XDAwMFwwMDAifSwKICAgICB7MzIxLCAibGFtYmRlZiIsIDAsIDUsIHN0YXRlc182NSwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKQEAgLTE5MzksNyArMTk3MSw3IEBACiAgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwNDFcMDQ0XDAxNVwwMDBcMDAwIn0sCiAgICAgezMyNywgInRlc3RsaXN0IiwgMCwgMywgc3RhdGVzXzcxLAogICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDEwXDAwMFwyMDBcMDQxXDA0NFwwMTVcMDAwXDAwMCJ9LAotICAgIHszMjgsICJkaWN0bWFrZXIiLCAwLCA1LCBzdGF0ZXNfNzIsCisgICAgezMyOCwgImRpY3RvcnNldG1ha2VyIiwgMCwgMTEsIHN0YXRlc183MiwKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAxMFwwMDBcMjAwXDA0MVwwNDRcMDE1XDAwMFwwMDAifSwKICAgICB7MzI5LCAiY2xhc3NkZWYiLCAwLCA4LCBzdGF0ZXNfNzMsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDJcMDAwIn0sCkBAIC0xOTUzLDExICsxOTg1LDExIEBACiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezMzNCwgImxpc3RfaWYiLCAwLCA0LCBzdGF0ZXNfNzgsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzNSwgImdlbl9pdGVyIiwgMCwgMiwgc3RhdGVzXzc5LAorICAgIHszMzUsICJjb21wX2l0ZXIiLCAwLCAyLCBzdGF0ZXNfNzksCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzNiwgImdlbl9mb3IiLCAwLCA2LCBzdGF0ZXNfODAsCisgICAgezMzNiwgImNvbXBfZm9yIiwgMCwgNiwgc3RhdGVzXzgwLAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMzcsICJnZW5faWYiLCAwLCA0LCBzdGF0ZXNfODEsCisgICAgezMzNywgImNvbXBfaWYiLCAwLCA0LCBzdGF0ZXNfODEsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezMzOCwgInRlc3RsaXN0MSIsIDAsIDIsIHN0YXRlc184MiwKICAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAxMFwwMDBcMjAwXDA0MVwwNDRcMDE1XDAwMFwwMDAifSwKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCAwN2Y1NzIwLi45OTBlZTUxIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC0yNyw4ICsyNyw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKICNlbmRpZgogCi1leHRlcm4gdGltZV90IFB5T1NfR2V0TGFzdE1vZGlmaWNhdGlvblRpbWUoY2hhciAqLCBGSUxFICopOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW4gZ2V0bXRpbWUuYyAqLwogCiAvKiBNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCiAgICBJdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgpAQCAtNzMsOSArNzEsMTUgQEAKICAgICAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCiAgICAgICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKICAgICAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQorICAgICAgIFB5dGhvbiAyLjdhMDogNjIxNzEgKG9wdGltaXplIGxpc3QgY29tcHJlaGVuc2lvbnMvY2hhbmdlIExJU1RfQVBQRU5EKQorICAgICAgIFB5dGhvbiAyLjdhMDogNjIxODEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorICAgICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyAgICAgICBQeXRob24gMi43YTAgIDYyMTkxIChpbnRyb2R1Y2UgU0VUVVBfV0lUSCkKKyAgICAgICBQeXRob24gMi43YTAgIDYyMjAxIChpbnRyb2R1Y2UgQlVJTERfU0VUKQorICAgICAgIFB5dGhvbiAyLjdhMCAgNjIyMTEgKGludHJvZHVjZSBNQVBfQUREIGFuZCBTRVRfQUREKQogLgogKi8KLSNkZWZpbmUgTUFHSUMgKDYyMTYxIHwgKChsb25nKSdccic8PDE2KSB8ICgobG9uZyknXG4nPDwyNCkpCisjZGVmaW5lIE1BR0lDICg2MjIxMSB8ICgobG9uZyknXHInPDwxNikgfCAoKGxvbmcpJ1xuJzw8MjQpKQogCiAvKiBNYWdpYyB3b3JkIGFzIGdsb2JhbDsgbm90ZSB0aGF0IF9QeUltcG9ydF9Jbml0KCkgY2FuIGNoYW5nZSB0aGUKICAgIHZhbHVlIG9mIHRoaXMgZ2xvYmFsIHRvIGFjY29tbW9kYXRlIGZvciBhbHRlcmF0aW9ucyBvZiBob3cgdGhlCkBAIC02MTksNyArNjIzLDcgQEAKIAogLyogUmVtb3ZlIG5hbWUgZnJvbSBzeXMubW9kdWxlcywgaWYgaXQncyB0aGVyZS4gKi8KIHN0YXRpYyB2b2lkCi1fUmVtb3ZlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCityZW1vdmVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7CiAgICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsIG5hbWUpID09IE5VTEwpCkBAIC02OTEsNyArNjk1LDcgQEAKICAgICByZXR1cm4gbTsKIAogICBlcnJvcjoKLSAgICBfUmVtb3ZlTW9kdWxlKG5hbWUpOworICAgIHJlbW92ZV9tb2R1bGUobmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE3OTcsNyArMTgwMSw3IEBACiAgICBpdHMgbW9kdWxlIG9iamVjdCBXSVRIIElOQ1JFTUVOVEVEIFJFRkVSRU5DRSBDT1VOVCAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbG9hZF9tb2R1bGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNoYXIgKmJ1ZiwgaW50IHR5cGUsIFB5T2JqZWN0ICpsb2FkZXIpCitsb2FkX21vZHVsZShjaGFyICpuYW1lLCBGSUxFICpmcCwgY2hhciAqcGF0aG5hbWUsIGludCB0eXBlLCBQeU9iamVjdCAqbG9hZGVyKQogewogICAgIFB5T2JqZWN0ICptb2R1bGVzOwogICAgIFB5T2JqZWN0ICptOwpAQCAtMTgxOCwyNyArMTgyMiwyNyBAQAogICAgIHN3aXRjaCAodHlwZSkgewogCiAgICAgY2FzZSBQWV9TT1VSQ0U6Ci0gICAgICAgIG0gPSBsb2FkX3NvdXJjZV9tb2R1bGUobmFtZSwgYnVmLCBmcCk7CisgICAgICAgIG0gPSBsb2FkX3NvdXJjZV9tb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFBZX0NPTVBJTEVEOgotICAgICAgICBtID0gbG9hZF9jb21waWxlZF9tb2R1bGUobmFtZSwgYnVmLCBmcCk7CisgICAgICAgIG0gPSBsb2FkX2NvbXBpbGVkX21vZHVsZShuYW1lLCBwYXRobmFtZSwgZnApOwogICAgICAgICBicmVhazsKIAogI2lmZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAgICAgY2FzZSBDX0VYVEVOU0lPTjoKLSAgICAgICAgbSA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBidWYsIGZwKTsKKyAgICAgICAgbSA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRobmFtZSwgZnApOwogICAgICAgICBicmVhazsKICNlbmRpZgogCiAgICAgY2FzZSBQS0dfRElSRUNUT1JZOgotICAgICAgICBtID0gbG9hZF9wYWNrYWdlKG5hbWUsIGJ1Zik7CisgICAgICAgIG0gPSBsb2FkX3BhY2thZ2UobmFtZSwgcGF0aG5hbWUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ19CVUlMVElOOgogICAgIGNhc2UgUFlfRlJPWkVOOgotICAgICAgICBpZiAoYnVmICE9IE5VTEwgJiYgYnVmWzBdICE9ICdcMCcpCi0gICAgICAgICAgICBuYW1lID0gYnVmOworICAgICAgICBpZiAocGF0aG5hbWUgIT0gTlVMTCAmJiBwYXRobmFtZVswXSAhPSAnXDAnKQorICAgICAgICAgICAgbmFtZSA9IHBhdGhuYW1lOwogICAgICAgICBpZiAodHlwZSA9PSBDX0JVSUxUSU4pCiAgICAgICAgICAgICBlcnIgPSBpbml0X2J1aWx0aW4obmFtZSk7CiAgICAgICAgIGVsc2UKQEAgLTMzNzUsMTMgKzMzNzksMTMgQEAKIC8qIFNob3J0aGFuZCB0byBhZGQgYSBzaW5nbGUgZW50cnkgZ2l2ZW4gYSBuYW1lIGFuZCBhIGZ1bmN0aW9uICovCiAKIGludAotUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKQorUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjb25zdCBjaGFyICpuYW1lLCB2b2lkICgqaW5pdGZ1bmMpKHZvaWQpKQogewogICAgIHN0cnVjdCBfaW5pdHRhYiBuZXd0YWJbMl07CiAKICAgICBtZW1zZXQobmV3dGFiLCAnXDAnLCBzaXplb2YgbmV3dGFiKTsKIAotICAgIG5ld3RhYlswXS5uYW1lID0gbmFtZTsKKyAgICBuZXd0YWJbMF0ubmFtZSA9IChjaGFyICopbmFtZTsKICAgICBuZXd0YWJbMF0uaW5pdGZ1bmMgPSBpbml0ZnVuYzsKIAogICAgIHJldHVybiBQeUltcG9ydF9FeHRlbmRJbml0dGFiKG5ld3RhYik7CmRpZmYgLS1naXQgYS9QeXRob24vbWFyc2hhbC5jIGIvUHl0aG9uL21hcnNoYWwuYwppbmRleCBiY2M4NjM2Li5mYWNhMDI3IDEwMDY0NAotLS0gYS9QeXRob24vbWFyc2hhbC5jCisrKyBiL1B5dGhvbi9tYXJzaGFsLmMKQEAgLTExLDYgKzExLDggQEAKICNpbmNsdWRlICJjb2RlLmgiCiAjaW5jbHVkZSAibWFyc2hhbC5oIgogCisjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCisKIC8qIEhpZ2ggd2F0ZXIgbWFyayB0byBkZXRlcm1pbmUgd2hlbiB0aGUgbWFyc2hhbGxlZCBvYmplY3QgaXMgZGFuZ2Vyb3VzbHkgZGVlcAogICogYW5kIHJpc2tzIGNvcmluZyB0aGUgaW50ZXJwcmV0ZXIuICBXaGVuIHRoZSBvYmplY3Qgc3RhY2sgZ2V0cyB0aGlzIGRlZXAsCiAgKiByYWlzZSBhbiBleGNlcHRpb24gaW5zdGVhZCBvZiBjb250aW51aW5nLgpAQCAtNDIsOSArNDQsMTQgQEAKICNkZWZpbmUgVFlQRV9TRVQgICAgICAgICAgICAgICAgJzwnCiAjZGVmaW5lIFRZUEVfRlJPWkVOU0VUICAgICAgICAgICc+JwogCisjZGVmaW5lIFdGRVJSX09LIDAKKyNkZWZpbmUgV0ZFUlJfVU5NQVJTSEFMTEFCTEUgMQorI2RlZmluZSBXRkVSUl9ORVNURURUT09ERUVQIDIKKyNkZWZpbmUgV0ZFUlJfTk9NRU1PUlkgMworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgRklMRSAqZnA7Ci0gICAgaW50IGVycm9yOworICAgIGludCBlcnJvcjsgIC8qIHNlZSBXRkVSUl8qIHZhbHVlcyAqLwogICAgIGludCBkZXB0aDsKICAgICAvKiBJZiBmcCA9PSBOVUxMLCB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZDogKi8KICAgICBQeU9iamVjdCAqc3RyOwpAQCAtMTE5LDYgKzEyNiw1NiBAQAogfQogI2VuZGlmCiAKKy8qIFdlIGFzc3VtZSB0aGF0IFB5dGhvbiBsb25ncyBhcmUgc3RvcmVkIGludGVybmFsbHkgaW4gYmFzZSBzb21lIHBvd2VyIG9mCisgICAyKioxNTsgZm9yIHRoZSBzYWtlIG9mIHBvcnRhYmlsaXR5IHdlJ2xsIGFsd2F5cyByZWFkIGFuZCB3cml0ZSB0aGVtIGluIGJhc2UKKyAgIGV4YWN0bHkgMioqMTUuICovCisKKyNkZWZpbmUgUHlMb25nX01BUlNIQUxfU0hJRlQgMTUKKyNkZWZpbmUgUHlMb25nX01BUlNIQUxfQkFTRSAoKHNob3J0KTEgPDwgUHlMb25nX01BUlNIQUxfU0hJRlQpCisjZGVmaW5lIFB5TG9uZ19NQVJTSEFMX01BU0sgKFB5TG9uZ19NQVJTSEFMX0JBU0UgLSAxKQorI2lmIFB5TG9uZ19TSElGVCAlIFB5TG9uZ19NQVJTSEFMX1NISUZUICE9IDAKKyNlcnJvciAiUHlMb25nX1NISUZUIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBQeUxvbmdfTUFSU0hBTF9TSElGVCIKKyNlbmRpZgorI2RlZmluZSBQeUxvbmdfTUFSU0hBTF9SQVRJTyAoUHlMb25nX1NISUZUIC8gUHlMb25nX01BUlNIQUxfU0hJRlQpCisKK3N0YXRpYyB2b2lkCit3X1B5TG9uZyhjb25zdCBQeUxvbmdPYmplY3QgKm9iLCBXRklMRSAqcCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIG4sIGw7CisgICAgZGlnaXQgZDsKKworICAgIHdfYnl0ZShUWVBFX0xPTkcsIHApOworICAgIGlmIChQeV9TSVpFKG9iKSA9PSAwKSB7CisgICAgICAgIHdfbG9uZygobG9uZykwLCBwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHNldCBsIHRvIG51bWJlciBvZiBiYXNlIFB5TG9uZ19NQVJTSEFMX0JBU0UgZGlnaXRzICovCisgICAgbiA9IEFCUyhQeV9TSVpFKG9iKSk7CisgICAgbCA9IChuLTEpICogUHlMb25nX01BUlNIQUxfUkFUSU87CisgICAgZCA9IG9iLT5vYl9kaWdpdFtuLTFdOworICAgIGFzc2VydChkICE9IDApOyAvKiBhIFB5TG9uZyBpcyBhbHdheXMgbm9ybWFsaXplZCAqLworICAgIGRvIHsKKyAgICAgICAgZCA+Pj0gUHlMb25nX01BUlNIQUxfU0hJRlQ7CisgICAgICAgIGwrKzsKKyAgICB9IHdoaWxlIChkICE9IDApOworICAgIHdfbG9uZygobG9uZykoUHlfU0laRShvYikgPiAwID8gbCA6IC1sKSwgcCk7CisKKyAgICBmb3IgKGk9MDsgaSA8IG4tMTsgaSsrKSB7CisgICAgICAgIGQgPSBvYi0+b2JfZGlnaXRbaV07CisgICAgICAgIGZvciAoaj0wOyBqIDwgUHlMb25nX01BUlNIQUxfUkFUSU87IGorKykgeworICAgICAgICAgICAgd19zaG9ydChkICYgUHlMb25nX01BUlNIQUxfTUFTSywgcCk7CisgICAgICAgICAgICBkID4+PSBQeUxvbmdfTUFSU0hBTF9TSElGVDsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQgKGQgPT0gMCk7CisgICAgfQorICAgIGQgPSBvYi0+b2JfZGlnaXRbbi0xXTsKKyAgICBkbyB7CisgICAgICAgIHdfc2hvcnQoZCAmIFB5TG9uZ19NQVJTSEFMX01BU0ssIHApOworICAgICAgICBkID4+PSBQeUxvbmdfTUFSU0hBTF9TSElGVDsKKyAgICB9IHdoaWxlIChkICE9IDApOworfQorCiBzdGF0aWMgdm9pZAogd19vYmplY3QoUHlPYmplY3QgKnYsIFdGSUxFICpwKQogewpAQCAtMTI3LDcgKzE4NCw3IEBACiAgICAgcC0+ZGVwdGgrKzsKIAogICAgIGlmIChwLT5kZXB0aCA+IE1BWF9NQVJTSEFMX1NUQUNLX0RFUFRIKSB7Ci0gICAgICAgIHAtPmVycm9yID0gMjsKKyAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9ORVNURURUT09ERUVQOwogICAgIH0KICAgICBlbHNlIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgd19ieXRlKFRZUEVfTlVMTCwgcCk7CkBAIC0xNjQsMzIgKzIyMSwzMSBAQAogICAgIH0KICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBQeUxvbmdPYmplY3QgKm9iID0gKFB5TG9uZ09iamVjdCAqKXY7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0xPTkcsIHApOwotICAgICAgICBuID0gb2ItPm9iX3NpemU7Ci0gICAgICAgIHdfbG9uZygobG9uZyluLCBwKTsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgbiA9IC1uOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotICAgICAgICAgICAgd19zaG9ydChvYi0+b2JfZGlnaXRbaV0sIHApOworICAgICAgICB3X1B5TG9uZyhvYiwgcCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBpZiAocC0+dmVyc2lvbiA+IDEpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOwogICAgICAgICAgICAgaWYgKF9QeUZsb2F0X1BhY2s4KFB5RmxvYXRfQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAxKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfRkxPQVQsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOyAvKiBQbGVudHkgdG8gZm9ybWF0IGFueSBkb3VibGUgKi8KLSAgICAgICAgICAgIFB5RmxvYXRfQXNSZXByU3RyaW5nKGJ1ZiwgKFB5RmxvYXRPYmplY3QgKil2KTsKKyAgICAgICAgICAgIGNoYXIgKmJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhQeUZsb2F0X0FTX0RPVUJMRSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIDE3LCAwLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9OT01FTU9SWTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBuID0gc3RybGVuKGJ1Zik7CiAgICAgICAgICAgICB3X2J5dGUoVFlQRV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X2J5dGUoKGludCluLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKGJ1ZiwgKGludCluLCBwKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgfQogICAgIH0KICNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCkBAIC0xOTgsNDQgKzI1NCw0MSBAQAogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewotICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0JJTkFSWV9DT01QTEVYLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICAgICAgaWYgKF9QeUZsb2F0X1BhY2s4KFB5Q29tcGxleF9JbWFnQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCAxKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07IC8qIFBsZW50eSB0byBmb3JtYXQgYW55IGRvdWJsZSAqLwotICAgICAgICAgICAgUHlGbG9hdE9iamVjdCAqdGVtcDsKKyAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0NPTVBMRVgsIHApOwotICAgICAgICAgICAgdGVtcCA9IChQeUZsb2F0T2JqZWN0KilQeUZsb2F0X0Zyb21Eb3VibGUoCi0gICAgICAgICAgICAgICAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSk7Ci0gICAgICAgICAgICBpZiAoIXRlbXApIHsKLSAgICAgICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIDE3LCAwLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9OT01FTU9SWTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUZsb2F0X0FzUmVwclN0cmluZyhidWYsIHRlbXApOwotICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgICAgICAgICAgbiA9IHN0cmxlbihidWYpOwogICAgICAgICAgICAgd19ieXRlKChpbnQpbiwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZyhidWYsIChpbnQpbiwgcCk7Ci0gICAgICAgICAgICB0ZW1wID0gKFB5RmxvYXRPYmplY3QqKVB5RmxvYXRfRnJvbURvdWJsZSgKLSAgICAgICAgICAgICAgICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHYpKTsKLSAgICAgICAgICAgIGlmICghdGVtcCkgewotICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICAgICAgICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyhQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnJywgMTcsIDAsIE5VTEwpOworICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX05PTUVNT1JZOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RmxvYXRfQXNSZXByU3RyaW5nKGJ1ZiwgdGVtcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgICAgICAgICBuID0gc3RybGVuKGJ1Zik7CiAgICAgICAgICAgICB3X2J5dGUoKGludCluLCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKGJ1ZiwgKGludCluLCBwKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMjU2LDcgKzMwOSw3IEBACiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihvKTsKICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CiAgICAgICAgICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB3X2J5dGUoVFlQRV9JTlRFUk5FRCwgcCk7CkBAIC0yNjksNyArMzIyLDcgQEAKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKSB7CiAgICAgICAgICAgICAvKiBodWdlIHN0cmluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHdfbG9uZygobG9uZyluLCBwKTsKQEAgLTI4MSwxNCArMzM0LDE0IEBACiAgICAgICAgIHV0ZjggPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHYpOwogICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB3X2J5dGUoVFlQRV9VTklDT0RFLCBwKTsKICAgICAgICAgbiA9IFB5U3RyaW5nX0dFVF9TSVpFKHV0ZjgpOwogICAgICAgICBpZiAobiA+IElOVF9NQVgpIHsKICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHdfbG9uZygobG9uZyluLCBwKTsKQEAgLTMzNCwxNCArMzg3LDE0IEBACiAgICAgICAgIG4gPSBQeU9iamVjdF9TaXplKHYpOwogICAgICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgd19sb25nKChsb25nKW4sIHApOwogICAgICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIodik7CiAgICAgICAgIGlmIChpdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoKHZhbHVlID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CkBAIC0zNTEsNyArNDA0LDcgQEAKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIHAtPmRlcHRoLS07Ci0gICAgICAgICAgICBwLT5lcnJvciA9IDE7CisgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzgxLDcgKzQzNCw3IEBACiAgICAgICAgIG4gPSAoKnBiLT5iZl9nZXRyZWFkYnVmZmVyKSh2LCAwLCAodm9pZCAqKikmcyk7CiAgICAgICAgIGlmIChuID4gSU5UX01BWCkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gMTsKKyAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgd19sb25nKChsb25nKW4sIHApOwpAQCAtMzg5LDcgKzQ0Miw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3X2J5dGUoVFlQRV9VTktOT1dOLCBwKTsKLSAgICAgICAgcC0+ZXJyb3IgPSAxOworICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgIH0KICAgIGV4aXQ6CiAgICAgcC0+ZGVwdGgtLTsKQEAgLTQwMSw3ICs0NTQsNyBAQAogewogICAgIFdGSUxFIHdmOwogICAgIHdmLmZwID0gZnA7Ci0gICAgd2YuZXJyb3IgPSAwOworICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnN0cmluZ3MgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwpAQCAtNDEzLDcgKzQ2Niw3IEBACiB7CiAgICAgV0ZJTEUgd2Y7CiAgICAgd2YuZnAgPSBmcDsKLSAgICB3Zi5lcnJvciA9IDA7CisgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CiAgICAgd2Yuc3RyaW5ncyA9ICh2ZXJzaW9uID4gMCkgPyBQeURpY3RfTmV3KCkgOiBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwpAQCAtNTA3LDYgKzU2MCw2NiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorcl9QeUxvbmcoUkZJTEUgKnApCit7CisgICAgUHlMb25nT2JqZWN0ICpvYjsKKyAgICBpbnQgc2l6ZSwgaSwgaiwgbWQsIHNob3J0c19pbl90b3BfZGlnaXQ7CisgICAgbG9uZyBuOworICAgIGRpZ2l0IGQ7CisKKyAgICBuID0gcl9sb25nKHApOworICAgIGlmIChuID09IDApCisgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilfUHlMb25nX05ldygwKTsKKyAgICBpZiAobiA8IC1JTlRfTUFYIHx8IG4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hcnNoYWwgZGF0YSAobG9uZyBzaXplIG91dCBvZiByYW5nZSkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IDEgKyAoQUJTKG4pIC0gMSkgLyBQeUxvbmdfTUFSU0hBTF9SQVRJTzsKKyAgICBzaG9ydHNfaW5fdG9wX2RpZ2l0ID0gMSArIChBQlMobikgLSAxKSAlIFB5TG9uZ19NQVJTSEFMX1JBVElPOworICAgIG9iID0gX1B5TG9uZ19OZXcoc2l6ZSk7CisgICAgaWYgKG9iID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1NJWkUob2IpID0gbiA+IDAgPyBzaXplIDogLXNpemU7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZS0xOyBpKyspIHsKKyAgICAgICAgZCA9IDA7CisgICAgICAgIGZvciAoaj0wOyBqIDwgUHlMb25nX01BUlNIQUxfUkFUSU87IGorKykgeworICAgICAgICAgICAgbWQgPSByX3Nob3J0KHApOworICAgICAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCisgICAgICAgICAgICAgICAgZ290byBiYWRfZGlnaXQ7CisgICAgICAgICAgICBkICs9IChkaWdpdCltZCA8PCBqKlB5TG9uZ19NQVJTSEFMX1NISUZUOworICAgICAgICB9CisgICAgICAgIG9iLT5vYl9kaWdpdFtpXSA9IGQ7CisgICAgfQorICAgIGQgPSAwOworICAgIGZvciAoaj0wOyBqIDwgc2hvcnRzX2luX3RvcF9kaWdpdDsgaisrKSB7CisgICAgICAgIG1kID0gcl9zaG9ydChwKTsKKyAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCisgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKKyAgICAgICAgLyogdG9wbW9zdCBtYXJzaGFsIGRpZ2l0IHNob3VsZCBiZSBub256ZXJvICovCisgICAgICAgIGlmIChtZCA9PSAwICYmIGogPT0gc2hvcnRzX2luX3RvcF9kaWdpdCAtIDEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiYmFkIG1hcnNoYWwgZGF0YSAodW5ub3JtYWxpemVkIGxvbmcgZGF0YSkiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGQgKz0gKGRpZ2l0KW1kIDw8IGoqUHlMb25nX01BUlNIQUxfU0hJRlQ7CisgICAgfQorICAgIC8qIHRvcCBkaWdpdCBzaG91bGQgYmUgbm9uemVybywgZWxzZSB0aGUgcmVzdWx0aW5nIFB5TG9uZyB3b24ndCBiZQorICAgICAgIG5vcm1hbGl6ZWQgKi8KKyAgICBvYi0+b2JfZGlnaXRbc2l6ZS0xXSA9IGQ7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW9iOworICBiYWRfZGlnaXQ6CisgICAgUHlfREVDUkVGKG9iKTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImJhZCBtYXJzaGFsIGRhdGEgKGRpZ2l0IG91dCBvZiByYW5nZSBpbiBsb25nKSIpOworICAgIHJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCiByX29iamVjdChSRklMRSAqcCkKIHsKICAgICAvKiBOVUxMIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlLCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFucyB0aGF0CkBAIC01NzAsMzkgKzY4Myw4IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX0xPTkc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpvYjsKLSAgICAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgICAgICBpZiAobiA8IC1JTlRfTUFYIHx8IG4gPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFyc2hhbCBkYXRhIik7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNpemUgPSBuPDAgPyAtbiA6IG47Ci0gICAgICAgICAgICBvYiA9IF9QeUxvbmdfTmV3KHNpemUpOwotICAgICAgICAgICAgaWYgKG9iID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb2ItPm9iX3NpemUgPSBuOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IHJfc2hvcnQocCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDwgMCB8fAotICAgICAgICAgICAgICAgICAgICAoZGlnaXQgPT0gMCAmJiBpID09IHNpemUtMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hcnNoYWwgZGF0YSIpOwotICAgICAgICAgICAgICAgICAgICBvYiA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob2IgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgb2ItPm9iX2RpZ2l0W2ldID0gZGlnaXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR2YWwgPSAoUHlPYmplY3QgKilvYjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IHJfUHlMb25nKHApOworICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9GTE9BVDoKICAgICAgICAgewpAQCAtNjE2LDEwICs2OTgsMTEgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiYXRvZiIsIGJyZWFrKQotICAgICAgICAgICAgZHggPSBQeU9TX2FzY2lpX2F0b2YoYnVmKTsKLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKGR4KQorICAgICAgICAgICAgZHggPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChkeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dmFsID0gUHlGbG9hdF9Gcm9tRG91YmxlKGR4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NTYsMTAgKzczOSwxMSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhdG9mIiwgYnJlYWs7KQotICAgICAgICAgICAgYy5yZWFsID0gUHlPU19hc2NpaV9hdG9mKGJ1Zik7Ci0gICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChjKQorICAgICAgICAgICAgYy5yZWFsID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBpZiAoYy5yZWFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBuID0gcl9ieXRlKHApOwogICAgICAgICAgICAgaWYgKG4gPT0gRU9GIHx8IHJfc3RyaW5nKGJ1ZiwgKGludCluLCBwKSAhPSBuKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLApAQCAtNjY4LDkgKzc1MiwxMSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKLSAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImF0b2YiLCBicmVhaykKLSAgICAgICAgICAgIGMuaW1hZyA9IFB5T1NfYXNjaWlfYXRvZihidWYpOwotICAgICAgICAgICAgUHlGUEVfRU5EX1BST1RFQ1QoYykKKyAgICAgICAgICAgIGMuaW1hZyA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKGMuaW1hZyA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dmFsID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03MTAsNyArNzk2LDcgQEAKICAgICBjYXNlIFRZUEVfU1RSSU5HOgogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzdHJpbmcgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7CiAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTczOSw3ICs4MjUsNyBAQAogICAgIGNhc2UgVFlQRV9TVFJJTkdSRUY6CiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID49IFB5TGlzdF9HRVRfU0laRShwLT5zdHJpbmdzKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyByZWYgb3V0IG9mIHJhbmdlKSIpOwogICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03NTUsNyArODQxLDcgQEAKIAogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmljb2RlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwogICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03ODEsNyArODY3LDcgQEAKICAgICBjYXNlIFRZUEVfVFVQTEU6CiAgICAgICAgIG4gPSByX2xvbmcocCk7CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHR1cGxlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwogICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03OTUsNyArODgxLDcgQEAKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIGZvciB0dXBsZSIpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgICAgICB2ID0gTlVMTDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTgwOCw3ICs4OTQsNyBAQAogICAgIGNhc2UgVFlQRV9MSVNUOgogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChsaXN0IHNpemUgb3V0IG9mIHJhbmdlKSIpOwogICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04MjIsNyArOTA4LDcgQEAKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIGZvciBsaXN0Iik7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgICAgIHYgPSBOVUxMOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODYwLDcgKzk0Niw3IEBACiAgICAgY2FzZSBUWVBFX0ZST1pFTlNFVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc2V0IHNpemUgb3V0IG9mIHJhbmdlKSIpOwogICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC04NzQsNyArOTYwLDcgQEAKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIGZvciBzZXQiKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICAgICAgdiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NzQsNyArMTA2MCw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogQm9ndXMgZGF0YSBnb3Qgd3JpdHRlbiwgd2hpY2ggaXNuJ3QgaWRlYWwuCiAgICAgICAgICAgIFRoaXMgd2lsbCBsZXQgeW91IGtlZXAgd29ya2luZyBhbmQgcmVjb3Zlci4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5rbm93biB0eXBlIGNvZGUpIik7CiAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgIGJyZWFrOwogCkBAIC05OTMsNyArMTA3OSw3IEBACiAgICAgfQogICAgIHYgPSByX29iamVjdChwKTsKICAgICBpZiAodiA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiTlVMTCBvYmplY3QgaW4gbWFyc2hhbCBkYXRhIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJOVUxMIG9iamVjdCBpbiBtYXJzaGFsIGRhdGEgZm9yIG9iamVjdCIpOwogICAgIHJldHVybiB2OwogfQogCkBAIC0xMDQwLDIzICsxMTI2LDEzIEBACiBQeU9iamVjdCAqCiBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShGSUxFICpmcCkKIHsKLS8qIDc1JSBvZiAyLjEncyAucHljIGZpbGVzIGNhbiBleHBsb2l0IFNNQUxMX0ZJTEVfTElNSVQuCi0gKiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgaXMgYnkgZGVmbiBzb21ldGhpbmcgYmlnIGVub3VnaCBmb3IgVGtpbnRlci5weWMuCi0gKi8KLSNkZWZpbmUgU01BTExfRklMRV9MSU1JVCAoMUwgPDwgMTQpCisvKiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgaXMgYnkgZGVmbiBzb21ldGhpbmcgYmlnIGVub3VnaCBmb3IgVGtpbnRlci5weWMuICovCiAjZGVmaW5lIFJFQVNPTkFCTEVfRklMRV9MSU1JVCAoMUwgPDwgMTgpCiAjaWZkZWYgSEFWRV9GU1RBVAogICAgIG9mZl90IGZpbGVzaXplOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9GU1RBVAogICAgIGZpbGVzaXplID0gZ2V0ZmlsZXNpemUoZnApOwotICAgIGlmIChmaWxlc2l6ZSA+IDApIHsKLSAgICAgICAgY2hhciBidWZbU01BTExfRklMRV9MSU1JVF07Ci0gICAgICAgIGNoYXIqIHBCdWYgPSBOVUxMOwotICAgICAgICBpZiAoZmlsZXNpemUgPD0gU01BTExfRklMRV9MSU1JVCkKLSAgICAgICAgICAgIHBCdWYgPSBidWY7Ci0gICAgICAgIGVsc2UgaWYgKGZpbGVzaXplIDw9IFJFQVNPTkFCTEVfRklMRV9MSU1JVCkKLSAgICAgICAgICAgIHBCdWYgPSAoY2hhciAqKVB5TWVtX01BTExPQyhmaWxlc2l6ZSk7CisgICAgaWYgKGZpbGVzaXplID4gMCAmJiBmaWxlc2l6ZSA8PSBSRUFTT05BQkxFX0ZJTEVfTElNSVQpIHsKKyAgICAgICAgY2hhciogcEJ1ZiA9IChjaGFyICopUHlNZW1fTUFMTE9DKGZpbGVzaXplKTsKICAgICAgICAgaWYgKHBCdWYgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlPYmplY3QqIHY7CiAgICAgICAgICAgICBzaXplX3QgbjsKQEAgLTEwNjQsOCArMTE0MCw3IEBACiAgICAgICAgICAgICAgICBpcyBzbWFsbGVyIHRoYW4gUkVBU09OQUJMRV9GSUxFX0xJTUlUICovCiAgICAgICAgICAgICBuID0gZnJlYWQocEJ1ZiwgMSwgKGludClmaWxlc2l6ZSwgZnApOwogICAgICAgICAgICAgdiA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhwQnVmLCBuKTsKLSAgICAgICAgICAgIGlmIChwQnVmICE9IGJ1ZikKLSAgICAgICAgICAgICAgICBQeU1lbV9GUkVFKHBCdWYpOworICAgICAgICAgICAgUHlNZW1fRlJFRShwQnVmKTsKICAgICAgICAgICAgIHJldHVybiB2OwogICAgICAgICB9CiAKQEAgLTEwNzYsNyArMTE1MSw2IEBACiAgICAgICovCiAgICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoZnApOwogCi0jdW5kZWYgU01BTExfRklMRV9MSU1JVAogI3VuZGVmIFJFQVNPTkFCTEVfRklMRV9MSU1JVAogfQogCkBAIC0xMTA5LDYgKzExODMsMjQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgdm9pZAorc2V0X2Vycm9yKGludCBlcnJvcikKK3sKKyAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgY2FzZSBXRkVSUl9OT01FTU9SWToKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRkVSUl9VTk1BUlNIQUxMQUJMRToKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bm1hcnNoYWxsYWJsZSBvYmplY3QiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRkVSUl9ORVNURURUT09ERUVQOgorICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgIm9iamVjdCB0b28gZGVlcGx5IG5lc3RlZCB0byBtYXJzaGFsIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogUHlPYmplY3QgKgogUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcoUHlPYmplY3QgKngsIGludCB2ZXJzaW9uKQogewpAQCAtMTExOSw3ICsxMjExLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgd2YucHRyID0gUHlTdHJpbmdfQVNfU1RSSU5HKChQeVN0cmluZ09iamVjdCAqKXdmLnN0cik7CiAgICAgd2YuZW5kID0gd2YucHRyICsgUHlTdHJpbmdfU2l6ZSh3Zi5zdHIpOwotICAgIHdmLmVycm9yID0gMDsKKyAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKICAgICB3Zi5zdHJpbmdzID0gKHZlcnNpb24gPiAwKSA/IFB5RGljdF9OZXcoKSA6IE5VTEw7CkBAIC0xMTMzLDEzICsxMjI1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtdWNoIG1hcnNoYWxsIGRhdGEgZm9yIGEgc3RyaW5nIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBfUHlTdHJpbmdfUmVzaXplKCZ3Zi5zdHIsIChQeV9zc2l6ZV90KSh3Zi5wdHIgLSBiYXNlKSk7CisgICAgICAgIGlmIChfUHlTdHJpbmdfUmVzaXplKCZ3Zi5zdHIsIChQeV9zc2l6ZV90KSh3Zi5wdHIgLSBiYXNlKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKHdmLmVycm9yKSB7CisgICAgaWYgKHdmLmVycm9yICE9IFdGRVJSX09LKSB7CiAgICAgICAgIFB5X1hERUNSRUYod2Yuc3RyKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAod2YuZXJyb3I9PTEpPyJ1bm1hcnNoYWxsYWJsZSBvYmplY3QiCi0gICAgICAgICAgICAgICAgICAgICAgICA6Im9iamVjdCB0b28gZGVlcGx5IG5lc3RlZCB0byBtYXJzaGFsIik7CisgICAgICAgIHNldF9lcnJvcih3Zi5lcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gd2Yuc3RyOwpAQCAtMTE2NCwxNiArMTI1NSwxNCBAQAogICAgIHdmLmZwID0gUHlGaWxlX0FzRmlsZShmKTsKICAgICB3Zi5zdHIgPSBOVUxMOwogICAgIHdmLnB0ciA9IHdmLmVuZCA9IE5VTEw7Ci0gICAgd2YuZXJyb3IgPSAwOworICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnN0cmluZ3MgPSAodmVyc2lvbiA+IDApID8gUHlEaWN0X05ldygpIDogMDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKICAgICB3X29iamVjdCh4LCAmd2YpOwogICAgIFB5X1hERUNSRUYod2Yuc3RyaW5ncyk7Ci0gICAgaWYgKHdmLmVycm9yKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgKHdmLmVycm9yPT0xKT8idW5tYXJzaGFsbGFibGUgb2JqZWN0IgotICAgICAgICAgICAgICAgICAgICAgICAgOiJvYmplY3QgdG9vIGRlZXBseSBuZXN0ZWQgdG8gbWFyc2hhbCIpOworICAgIGlmICh3Zi5lcnJvciAhPSBXRkVSUl9PSykgeworICAgICAgICBzZXRfZXJyb3Iod2YuZXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21vZHN1cHBvcnQuYyBiL1B5dGhvbi9tb2RzdXBwb3J0LmMKaW5kZXggNmVlNDhmMy4uOGJkZWM4YiAxMDA2NDQKLS0tIGEvUHl0aG9uL21vZHN1cHBvcnQuYworKysgYi9QeXRob24vbW9kc3VwcG9ydC5jCkBAIC0zNCw4ICszNCw5IEBACiB7CiAgICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKm47CiAgICAgUHlNZXRob2REZWYgKm1sOwotICAgIGlmICghUHlfSXNJbml0aWFsaXplZCgpKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJJbnRlcnByZXRlciBub3QgaW5pdGlhbGl6ZWQgKHZlcnNpb24gbWlzbWF0Y2g/KSIpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HZXQoKS0+aW50ZXJwOworICAgIGlmIChpbnRlcnAtPm1vZHVsZXMgPT0gTlVMTCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHl0aG9uIGltcG9ydCBtYWNoaW5lcnkgbm90IGluaXRpYWxpemVkIik7CiAgICAgaWYgKG1vZHVsZV9hcGlfdmVyc2lvbiAhPSBQWVRIT05fQVBJX1ZFUlNJT04pIHsKICAgICAgICAgY2hhciBtZXNzYWdlWzUxMl07CiAgICAgICAgIFB5T1Nfc25wcmludGYobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLApkaWZmIC0tZ2l0IGEvUHl0aG9uL3BlZXBob2xlLmMgYi9QeXRob24vcGVlcGhvbGUuYwppbmRleCA5NWNlOWQwLi4zMTNlYjQzIDEwMDY0NAotLS0gYS9QeXRob24vcGVlcGhvbGUuYworKysgYi9QeXRob24vcGVlcGhvbGUuYwpAQCAtMTMsNyArMTMsMTIgQEAKIAogI2RlZmluZSBHRVRBUkcoYXJyLCBpKSAoKGludCkoKGFycltpKzJdPDw4KSArIGFycltpKzFdKSkKICNkZWZpbmUgVU5DT05ESVRJT05BTF9KVU1QKG9wKSAgKG9wPT1KVU1QX0FCU09MVVRFIHx8IG9wPT1KVU1QX0ZPUldBUkQpCi0jZGVmaW5lIEFCU09MVVRFX0pVTVAob3ApIChvcD09SlVNUF9BQlNPTFVURSB8fCBvcD09Q09OVElOVUVfTE9PUCkKKyNkZWZpbmUgQ09ORElUSU9OQUxfSlVNUChvcCkgKG9wPT1QT1BfSlVNUF9JRl9GQUxTRSB8fCBvcD09UE9QX0pVTVBfSUZfVFJVRSBcCisgICAgfHwgb3A9PUpVTVBfSUZfRkFMU0VfT1JfUE9QIHx8IG9wPT1KVU1QX0lGX1RSVUVfT1JfUE9QKQorI2RlZmluZSBBQlNPTFVURV9KVU1QKG9wKSAob3A9PUpVTVBfQUJTT0xVVEUgfHwgb3A9PUNPTlRJTlVFX0xPT1AgXAorICAgIHx8IG9wPT1QT1BfSlVNUF9JRl9GQUxTRSB8fCBvcD09UE9QX0pVTVBfSUZfVFJVRSBcCisgICAgfHwgb3A9PUpVTVBfSUZfRkFMU0VfT1JfUE9QIHx8IG9wPT1KVU1QX0lGX1RSVUVfT1JfUE9QKQorI2RlZmluZSBKVU1QU19PTl9UUlVFKG9wKSAob3A9PVBPUF9KVU1QX0lGX1RSVUUgfHwgb3A9PUpVTVBfSUZfVFJVRV9PUl9QT1ApCiAjZGVmaW5lIEdFVEpVTVBUR1QoYXJyLCBpKSAoR0VUQVJHKGFycixpKSArIChBQlNPTFVURV9KVU1QKGFycltpXSkgPyAwIDogaSszKSkKICNkZWZpbmUgU0VUQVJHKGFyciwgaSwgdmFsKSBhcnJbaSsyXSA9IHZhbD4+ODsgYXJyW2krMV0gPSB2YWwgJiAyNTUKICNkZWZpbmUgQ09ERVNJWkUob3ApICAoSEFTX0FSRyhvcCkgPyAzIDogMSkKQEAgLTI0NSwxMyArMjUwLDE2IEBACiAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEZPUl9JVEVSOgogICAgICAgICAgICAgY2FzZSBKVU1QX0ZPUldBUkQ6Ci0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0U6Ci0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRToKKyAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRV9PUl9QT1A6CisgICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRV9PUl9QT1A6CisgICAgICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX0ZBTFNFOgorICAgICAgICAgICAgY2FzZSBQT1BfSlVNUF9JRl9UUlVFOgogICAgICAgICAgICAgY2FzZSBKVU1QX0FCU09MVVRFOgogICAgICAgICAgICAgY2FzZSBDT05USU5VRV9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CisgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CiAgICAgICAgICAgICAgICAgaiA9IEdFVEpVTVBUR1QoY29kZSwgaSk7CiAgICAgICAgICAgICAgICAgYmxvY2tzW2pdID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMzOCwyOSArMzQ2LDI0IEBACiAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhjb25zdHMpKTsKIAogICAgIGZvciAoaT0wIDsgaTxjb2RlbGVuIDsgaSArPSBDT0RFU0laRShjb2Rlc3RyW2ldKSkgeworICAgICAgcmVvcHRpbWl6ZV9jdXJyZW50OgogICAgICAgICBvcGNvZGUgPSBjb2Rlc3RyW2ldOwogCiAgICAgICAgIGxhc3RsYyA9IGN1bWxjOwogICAgICAgICBjdW1sYyA9IDA7CiAKICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKLQotICAgICAgICAgICAgLyogUmVwbGFjZSBVTkFSWV9OT1QgSlVNUF9JRl9GQUxTRSBQT1BfVE9QIHdpdGgKLSAgICAgICAgICAgICAgIHdpdGggICAgICAgICAgICAgICAgSlVNUF9JRl9UUlVFIFBPUF9UT1AgKi8KKyAgICAgICAgICAgIC8qIFJlcGxhY2UgVU5BUllfTk9UIFBPUF9KVU1QX0lGX0ZBTFNFCisgICAgICAgICAgICAgICB3aXRoICAgIFBPUF9KVU1QX0lGX1RSVUUgKi8KICAgICAgICAgICAgIGNhc2UgVU5BUllfTk9UOgotICAgICAgICAgICAgICAgIGlmIChjb2Rlc3RyW2krMV0gIT0gSlVNUF9JRl9GQUxTRSAgfHwKLSAgICAgICAgICAgICAgICAgICAgY29kZXN0cltpKzRdICE9IFBPUF9UT1AgIHx8Ci0gICAgICAgICAgICAgICAgICAgICFJU0JBU0lDQkxPQ0soYmxvY2tzLGksNSkpCisgICAgICAgICAgICAgICAgaWYgKGNvZGVzdHJbaSsxXSAhPSBQT1BfSlVNUF9JRl9GQUxTRQorICAgICAgICAgICAgICAgICAgICB8fCAhSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDQpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIChpKzEpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZXN0clt0Z3RdICE9IFBPUF9UT1ApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSsxKSArIDE7Ci0gICAgICAgICAgICAgICAgY29kZXN0cltpXSA9IEpVTVBfSUZfVFJVRTsKKyAgICAgICAgICAgICAgICBqID0gR0VUQVJHKGNvZGVzdHIsIGkrMSk7CisgICAgICAgICAgICAgICAgY29kZXN0cltpXSA9IFBPUF9KVU1QX0lGX1RSVUU7CiAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwotICAgICAgICAgICAgICAgIGNvZGVzdHJbaSszXSA9IFBPUF9UT1A7Ci0gICAgICAgICAgICAgICAgY29kZXN0cltpKzRdID0gTk9QOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNvZGVzdHJbaSszXSA9IE5PUDsKKyAgICAgICAgICAgICAgICBnb3RvIHJlb3B0aW1pemVfY3VycmVudDsKIAogICAgICAgICAgICAgICAgIC8qIG5vdCBhIGlzIGIgLS0+ICBhIGlzIG5vdCBiCiAgICAgICAgICAgICAgICAgICAgbm90IGEgaW4gYiAtLT4gIGEgbm90IGluIGIKQEAgLTQwMCwxNiArNDAzLDE2IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgTE9BRF9DT05TVCB0cnVlY29uc3QKLSAgICAgICAgICAgICAgICAgICBKVU1QX0lGX0ZBTFNFIHh4ICBQT1BfVE9QICovCisgICAgICAgICAgICAgICAgICAgUE9QX0pVTVBfSUZfRkFMU0UgeHguIFRoaXMgaW1wcm92ZXMKKyAgICAgICAgICAgICAgICAgICAid2hpbGUgMSIgcGVyZm9ybWFuY2UuICovCiAgICAgICAgICAgICBjYXNlIExPQURfQ09OU1Q6CiAgICAgICAgICAgICAgICAgY3VtbGMgPSBsYXN0bGMgKyAxOwogICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvZGVzdHJbaSszXSAhPSBKVU1QX0lGX0ZBTFNFICB8fAotICAgICAgICAgICAgICAgICAgICBjb2Rlc3RyW2krNl0gIT0gUE9QX1RPUCAgfHwKLSAgICAgICAgICAgICAgICAgICAgIUlTQkFTSUNCTE9DSyhibG9ja3MsaSw3KSAgfHwKKyAgICAgICAgICAgICAgICBpZiAoY29kZXN0cltpKzNdICE9IFBPUF9KVU1QX0lGX0ZBTFNFICB8fAorICAgICAgICAgICAgICAgICAgICAhSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDYpICB8fAogICAgICAgICAgICAgICAgICAgICAhUHlPYmplY3RfSXNUcnVlKFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGNvZGVzdHIraSwgTk9QLCA3KTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoY29kZXN0citpLCBOT1AsIDYpOwogICAgICAgICAgICAgICAgIGN1bWxjID0gMDsKICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNDk4LDI3ICs1MDEsNDkgQEAKICAgICAgICAgICAgICAgICAgICAiaWYgYSBvciBiOiIKICAgICAgICAgICAgICAgICAgICAiYSBhbmQgYiBvciBjIgogICAgICAgICAgICAgICAgICAgICIoYSBhbmQgYikgYW5kIGMiCi0gICAgICAgICAgICAgICAgICAgeDpKVU1QX0lGX0ZBTFNFIHkgICB5OkpVTVBfSUZfRkFMU0UgeiAgLS0+ICB4OkpVTVBfSUZfRkFMU0UgegotICAgICAgICAgICAgICAgICAgIHg6SlVNUF9JRl9GQUxTRSB5ICAgeTpKVU1QX0lGX1RSVUUgeiAgICAgICAgICAgICAgICAgIC0tPiAgeDpKVU1QX0lGX0ZBTFNFIHkrMworICAgICAgICAgICAgICAgICAgIHg6SlVNUF9JRl9GQUxTRV9PUl9QT1AgeSAgIHk6SlVNUF9JRl9GQUxTRV9PUl9QT1AgegorICAgICAgICAgICAgICAgICAgICAgIC0tPiAgeDpKVU1QX0lGX0ZBTFNFX09SX1BPUCB6CisgICAgICAgICAgICAgICAgICAgeDpKVU1QX0lGX0ZBTFNFX09SX1BPUCB5ICAgeTpKVU1QX0lGX1RSVUVfT1JfUE9QIHoKKyAgICAgICAgICAgICAgICAgICAgICAtLT4gIHg6UE9QX0pVTVBfSUZfRkFMU0UgeSszCiAgICAgICAgICAgICAgICAgICAgd2hlcmUgeSszIGlzIHRoZSBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgdGhlIHNlY29uZCB0ZXN0LgogICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0U6Ci0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRToKKyAgICAgICAgICAgIGNhc2UgSlVNUF9JRl9GQUxTRV9PUl9QT1A6CisgICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRV9PUl9QT1A6CiAgICAgICAgICAgICAgICAgdGd0ID0gR0VUSlVNUFRHVChjb2Rlc3RyLCBpKTsKICAgICAgICAgICAgICAgICBqID0gY29kZXN0clt0Z3RdOwotICAgICAgICAgICAgICAgIGlmIChqID09IEpVTVBfSUZfRkFMU0UgICAgICAgICAgICAgICAgICB8fCAgaiA9PSBKVU1QX0lGX1RSVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPT0gb3Bjb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0Z3R0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIHRndCkgLSBpIC0gMzsKKyAgICAgICAgICAgICAgICBpZiAoQ09ORElUSU9OQUxfSlVNUChqKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBOT1RFOiBhbGwgcG9zc2libGUganVtcHMgaGVyZSBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGUhICovCisgICAgICAgICAgICAgICAgICAgIGlmIChKVU1QU19PTl9UUlVFKGopID09IEpVTVBTX09OX1RSVUUob3Bjb2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHNlY29uZCBqdW1wIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VuIGlmZiB0aGUgZmlyc3QgaXMuICovCisgICAgICAgICAgICAgICAgICAgICAgICB0Z3R0Z3QgPSBHRVRKVU1QVEdUKGNvZGVzdHIsIHRndCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgY3VycmVudCBvcGNvZGUgaW5oZXJpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyB0YXJnZXQncyBzdGFjayBiZWhhdmlvdXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzdHJbaV0gPSBqOwogICAgICAgICAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIHRndHRndCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlb3B0aW1pemVfY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRndCAtPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIHRndCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc2Vjb25kIGp1bXAgaXMgbm90IHRha2VuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmlyc3QgaXMgKHNvIGp1bXAgcGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQpLCBhbmQgYWxsIGNvbmRpdGlvbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wcyBwb3AgdGhlaXIgYXJndW1lbnQgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhleSdyZSBub3QgdGFrZW4gKHNvIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IGp1bXAgdG8gcG9wIGl0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQgd2hlbiBpdCdzIHRha2VuKS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKVU1QU19PTl9UUlVFKG9wY29kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXN0cltpXSA9IFBPUF9KVU1QX0lGX1RSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXN0cltpXSA9IFBPUF9KVU1QX0lGX0ZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksICh0Z3QgKyAzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlb3B0aW1pemVfY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogSW50ZW50aW9uYWwgZmFsbHRocm91Z2ggKi8KIAogICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UganVtcHMgdG8gdW5jb25kaXRpb25hbCBqdW1wcyAqLworICAgICAgICAgICAgY2FzZSBQT1BfSlVNUF9JRl9GQUxTRToKKyAgICAgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfVFJVRToKICAgICAgICAgICAgIGNhc2UgRk9SX0lURVI6CiAgICAgICAgICAgICBjYXNlIEpVTVBfRk9SV0FSRDoKICAgICAgICAgICAgIGNhc2UgSlVNUF9BQlNPTFVURToKQEAgLTUyNiw2ICs1NTEsNyBAQAogICAgICAgICAgICAgY2FzZSBTRVRVUF9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CisgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CiAgICAgICAgICAgICAgICAgdGd0ID0gR0VUSlVNUFRHVChjb2Rlc3RyLCBpKTsKICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIEpVTVBfKiB0byBhIFJFVFVSTiBpbnRvIGp1c3QgYSBSRVRVUk4gKi8KICAgICAgICAgICAgICAgICBpZiAoVU5DT05ESVRJT05BTF9KVU1QKG9wY29kZSkgJiYKQEAgLTU5MSwxNyArNjE3LDIwIEBACiAKICAgICAgICAgICAgIGNhc2UgSlVNUF9BQlNPTFVURToKICAgICAgICAgICAgIGNhc2UgQ09OVElOVUVfTE9PUDoKKyAgICAgICAgICAgIGNhc2UgUE9QX0pVTVBfSUZfRkFMU0U6CisgICAgICAgICAgICBjYXNlIFBPUF9KVU1QX0lGX1RSVUU6CisgICAgICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0VfT1JfUE9QOgorICAgICAgICAgICAgY2FzZSBKVU1QX0lGX1RSVUVfT1JfUE9QOgogICAgICAgICAgICAgICAgIGogPSBhZGRybWFwW0dFVEFSRyhjb2Rlc3RyLCBpKV07CiAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEZPUl9JVEVSOgogICAgICAgICAgICAgY2FzZSBKVU1QX0ZPUldBUkQ6Ci0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfRkFMU0U6Ci0gICAgICAgICAgICBjYXNlIEpVTVBfSUZfVFJVRToKICAgICAgICAgICAgIGNhc2UgU0VUVVBfTE9PUDoKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRVhDRVBUOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9GSU5BTExZOgorICAgICAgICAgICAgY2FzZSBTRVRVUF9XSVRIOgogICAgICAgICAgICAgICAgIGogPSBhZGRybWFwW0dFVEFSRyhjb2Rlc3RyLCBpKSArIGkgKyAzXSAtIGFkZHJtYXBbaV0gLSAzOwogICAgICAgICAgICAgICAgIFNFVEFSRyhjb2Rlc3RyLCBpLCBqKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1B5dGhvbi9weWN0eXBlLmMgYi9QeXRob24vcHljdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMTE3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vcHljdHlwZS5jCkBAIC0wLDAgKzEsMjE0IEBACisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKy8qIE91ciBvd24gbG9jYWxlLWluZGVwZW5kZW50IGN0eXBlLmgtbGlrZSBtYWNyb3MgKi8KKworY29uc3QgdW5zaWduZWQgaW50IF9QeV9jdHlwZV90YWJsZVsyNTZdID0geworICAgIDAsIC8qIDB4MCAnXHgwMCcgKi8KKyAgICAwLCAvKiAweDEgJ1x4MDEnICovCisgICAgMCwgLyogMHgyICdceDAyJyAqLworICAgIDAsIC8qIDB4MyAnXHgwMycgKi8KKyAgICAwLCAvKiAweDQgJ1x4MDQnICovCisgICAgMCwgLyogMHg1ICdceDA1JyAqLworICAgIDAsIC8qIDB4NiAnXHgwNicgKi8KKyAgICAwLCAvKiAweDcgJ1x4MDcnICovCisgICAgMCwgLyogMHg4ICdceDA4JyAqLworICAgIFBZX0NURl9TUEFDRSwgLyogMHg5ICdcdCcgKi8KKyAgICBQWV9DVEZfU1BBQ0UsIC8qIDB4YSAnXG4nICovCisgICAgUFlfQ1RGX1NQQUNFLCAvKiAweGIgJ1x2JyAqLworICAgIFBZX0NURl9TUEFDRSwgLyogMHhjICdcZicgKi8KKyAgICBQWV9DVEZfU1BBQ0UsIC8qIDB4ZCAnXHInICovCisgICAgMCwgLyogMHhlICdceDBlJyAqLworICAgIDAsIC8qIDB4ZiAnXHgwZicgKi8KKyAgICAwLCAvKiAweDEwICdceDEwJyAqLworICAgIDAsIC8qIDB4MTEgJ1x4MTEnICovCisgICAgMCwgLyogMHgxMiAnXHgxMicgKi8KKyAgICAwLCAvKiAweDEzICdceDEzJyAqLworICAgIDAsIC8qIDB4MTQgJ1x4MTQnICovCisgICAgMCwgLyogMHgxNSAnXHgxNScgKi8KKyAgICAwLCAvKiAweDE2ICdceDE2JyAqLworICAgIDAsIC8qIDB4MTcgJ1x4MTcnICovCisgICAgMCwgLyogMHgxOCAnXHgxOCcgKi8KKyAgICAwLCAvKiAweDE5ICdceDE5JyAqLworICAgIDAsIC8qIDB4MWEgJ1x4MWEnICovCisgICAgMCwgLyogMHgxYiAnXHgxYicgKi8KKyAgICAwLCAvKiAweDFjICdceDFjJyAqLworICAgIDAsIC8qIDB4MWQgJ1x4MWQnICovCisgICAgMCwgLyogMHgxZSAnXHgxZScgKi8KKyAgICAwLCAvKiAweDFmICdceDFmJyAqLworICAgIFBZX0NURl9TUEFDRSwgLyogMHgyMCAnICcgKi8KKyAgICAwLCAvKiAweDIxICchJyAqLworICAgIDAsIC8qIDB4MjIgJyInICovCisgICAgMCwgLyogMHgyMyAnIycgKi8KKyAgICAwLCAvKiAweDI0ICckJyAqLworICAgIDAsIC8qIDB4MjUgJyUnICovCisgICAgMCwgLyogMHgyNiAnJicgKi8KKyAgICAwLCAvKiAweDI3ICInIiAqLworICAgIDAsIC8qIDB4MjggJygnICovCisgICAgMCwgLyogMHgyOSAnKScgKi8KKyAgICAwLCAvKiAweDJhICcqJyAqLworICAgIDAsIC8qIDB4MmIgJysnICovCisgICAgMCwgLyogMHgyYyAnLCcgKi8KKyAgICAwLCAvKiAweDJkICctJyAqLworICAgIDAsIC8qIDB4MmUgJy4nICovCisgICAgMCwgLyogMHgyZiAnLycgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzMCAnMCcgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzMSAnMScgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzMiAnMicgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzMyAnMycgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzNCAnNCcgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzNSAnNScgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzNiAnNicgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzNyAnNycgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzOCAnOCcgKi8KKyAgICBQWV9DVEZfRElHSVR8UFlfQ1RGX1hESUdJVCwgLyogMHgzOSAnOScgKi8KKyAgICAwLCAvKiAweDNhICc6JyAqLworICAgIDAsIC8qIDB4M2IgJzsnICovCisgICAgMCwgLyogMHgzYyAnPCcgKi8KKyAgICAwLCAvKiAweDNkICc9JyAqLworICAgIDAsIC8qIDB4M2UgJz4nICovCisgICAgMCwgLyogMHgzZiAnPycgKi8KKyAgICAwLCAvKiAweDQwICdAJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQxICdBJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQyICdCJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQzICdDJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQ0ICdEJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQ1ICdFJyAqLworICAgIFBZX0NURl9VUFBFUnxQWV9DVEZfWERJR0lULCAvKiAweDQ2ICdGJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0NyAnRycgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NDggJ0gnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDQ5ICdJJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0YSAnSicgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NGIgJ0snICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDRjICdMJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg0ZCAnTScgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NGUgJ04nICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDRmICdPJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1MCAnUCcgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTEgJ1EnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDUyICdSJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1MyAnUycgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTQgJ1QnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDU1ICdVJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1NiAnVicgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NTcgJ1cnICovCisgICAgUFlfQ1RGX1VQUEVSLCAvKiAweDU4ICdYJyAqLworICAgIFBZX0NURl9VUFBFUiwgLyogMHg1OSAnWScgKi8KKyAgICBQWV9DVEZfVVBQRVIsIC8qIDB4NWEgJ1onICovCisgICAgMCwgLyogMHg1YiAnWycgKi8KKyAgICAwLCAvKiAweDVjICdcXCcgKi8KKyAgICAwLCAvKiAweDVkICddJyAqLworICAgIDAsIC8qIDB4NWUgJ14nICovCisgICAgMCwgLyogMHg1ZiAnXycgKi8KKyAgICAwLCAvKiAweDYwICdgJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDYxICdhJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDYyICdiJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDYzICdjJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDY0ICdkJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDY1ICdlJyAqLworICAgIFBZX0NURl9MT1dFUnxQWV9DVEZfWERJR0lULCAvKiAweDY2ICdmJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2NyAnZycgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NjggJ2gnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDY5ICdpJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2YSAnaicgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NmIgJ2snICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDZjICdsJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg2ZCAnbScgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NmUgJ24nICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDZmICdvJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3MCAncCcgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzEgJ3EnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDcyICdyJyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3MyAncycgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzQgJ3QnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDc1ICd1JyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3NiAndicgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4NzcgJ3cnICovCisgICAgUFlfQ1RGX0xPV0VSLCAvKiAweDc4ICd4JyAqLworICAgIFBZX0NURl9MT1dFUiwgLyogMHg3OSAneScgKi8KKyAgICBQWV9DVEZfTE9XRVIsIC8qIDB4N2EgJ3onICovCisgICAgMCwgLyogMHg3YiAneycgKi8KKyAgICAwLCAvKiAweDdjICd8JyAqLworICAgIDAsIC8qIDB4N2QgJ30nICovCisgICAgMCwgLyogMHg3ZSAnficgKi8KKyAgICAwLCAvKiAweDdmICdceDdmJyAqLworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisKKworY29uc3QgdW5zaWduZWQgY2hhciBfUHlfY3R5cGVfdG9sb3dlclsyNTZdID0geworICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCisgICAgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywKKyAgICAweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCisgICAgMHgzOCwgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwKKyAgICAweDQwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAorICAgIDB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCisgICAgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywKKyAgICAweDc4LCAweDc5LCAweDdhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLAorICAgIDB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisgICAgMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKKyAgICAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAorICAgIDB4NzgsIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsCisgICAgMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKyAgICAweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorICAgIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisgICAgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAorICAgIDB4YTgsIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsCisgICAgMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywKKyAgICAweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAorICAgIDB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCisgICAgMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKyAgICAweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAorICAgIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCisgICAgMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywKKyAgICAweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLAorICAgIDB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCisgICAgMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZCwgMHhmZSwgMHhmZiwKK307CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2N0eXBlX3RvdXBwZXJbMjU2XSA9IHsKKyAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgIDB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCisgICAgMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKyAgICAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorICAgIDB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCisgICAgMHg0MCwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKKyAgICAweDQ4LCAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLAorICAgIDB4NTAsIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsCisgICAgMHg1OCwgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwKKyAgICAweDYwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LAorICAgIDB4NDgsIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsCisgICAgMHg1MCwgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywKKyAgICAweDU4LCAweDU5LCAweDVhLCAweDdiLCAweDdjLCAweDdkLCAweDdlLCAweDdmLAorICAgIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisgICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKyAgICAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorICAgIDB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYsCisgICAgMHhhMCwgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywKKyAgICAweGE4LCAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLAorICAgIDB4YjAsIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCisgICAgMHhiOCwgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwKKyAgICAweGMwLCAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LAorICAgIDB4YzgsIDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsCisgICAgMHhkMCwgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywKKyAgICAweGQ4LCAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLAorICAgIDB4ZTAsIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsCisgICAgMHhlOCwgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwKKyAgICAweGYwLCAweGYxLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LAorICAgIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4ZmIsIDB4ZmMsIDB4ZmQsIDB4ZmUsIDB4ZmYsCit9OworCmRpZmYgLS1naXQgYS9QeXRob24vcHltYXRoLmMgYi9QeXRob24vcHltYXRoLmMKaW5kZXggMWJhMmU2My4uODI3YTc3MyAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5bWF0aC5jCisrKyBiL1B5dGhvbi9weW1hdGguYwpAQCAtMTMsNiArMTMsMjQgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKKworLyogaW5saW5lIGFzc2VtYmx5IGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSAzODcgRlBVIGNvbnRyb2wgd29yZCBvbgorICAgZ2NjL3g4NiAqLworCit1bnNpZ25lZCBzaG9ydCBfUHlfZ2V0XzM4N2NvbnRyb2x3b3JkKHZvaWQpIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBjdzsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjdykpOworICAgIHJldHVybiBjdzsKK30KKwordm9pZCBfUHlfc2V0XzM4N2NvbnRyb2x3b3JkKHVuc2lnbmVkIHNob3J0IGN3KSB7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY3cpKTsKK30KKworI2VuZGlmCisKKwogI2lmbmRlZiBIQVZFX0hZUE9UCiBkb3VibGUgaHlwb3QoZG91YmxlIHgsIGRvdWJsZSB5KQogewpAQCAtNDcsMjAxICs2NSwxNSBAQAogfQogI2VuZGlmIC8qIEhBVkVfQ09QWVNJR04gKi8KIAotI2lmbmRlZiBIQVZFX0xPRzFQCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQorI2lmbmRlZiBIQVZFX1JPVU5ECiBkb3VibGUKLWxvZzFwKGRvdWJsZSB4KQorcm91bmQoZG91YmxlIHgpCiB7Ci0gICAgLyogRm9yIHggc21hbGwsIHdlIHVzZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoLiAgTGV0IHkgYmUgdGhlIG5lYXJlc3QKLSAgICAgICBmbG9hdCB0byAxK3gsIHRoZW4KLQotICAgICAgICAgMSt4ID0geSAqICgxIC0gKHktMS14KS95KQotCi0gICAgICAgc28gbG9nKDEreCkgPSBsb2coeSkgKyBsb2coMS0oeS0xLXgpL3kpLiAgU2luY2UgKHktMS14KS95IGlzIHRpbnksCi0gICAgICAgdGhlIHNlY29uZCB0ZXJtIGlzIHdlbGwgYXBwcm94aW1hdGVkIGJ5ICh5LTEteCkveS4gIElmIGFicyh4KSA+PQotICAgICAgIERCTF9FUFNJTE9OLzIgb3IgdGhlIHJvdW5kaW5nLW1vZGUgaXMgc29tZSBmb3JtIG9mIHJvdW5kLXRvLW5lYXJlc3QKLSAgICAgICB0aGVuIHktMS14IHdpbGwgYmUgZXhhY3RseSByZXByZXNlbnRhYmxlLCBhbmQgaXMgY29tcHV0ZWQgZXhhY3RseQotICAgICAgIGJ5ICh5LTEpLXguCi0KLSAgICAgICBJZiBhYnMoeCkgPCBEQkxfRVBTSUxPTi8yIGFuZCB0aGUgcm91bmRpbmcgbW9kZSBpcyBub3Qga25vd24gdG8gYmUKLSAgICAgICByb3VuZC10by1uZWFyZXN0IHRoZW4gdGhpcyBtZXRob2QgaXMgc2xpZ2h0bHkgZGFuZ2Vyb3VzOiAxK3ggY291bGQKLSAgICAgICBiZSByb3VuZGVkIHVwIHRvIDErREJMX0VQU0lMT04gaW5zdGVhZCBvZiBkb3duIHRvIDEsIGFuZCBpbiB0aGF0Ci0gICAgICAgY2FzZSB5LTEteCB3aWxsIG5vdCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUgYW55IG1vcmUgYW5kIHRoZQotICAgICAgIHJlc3VsdCBjYW4gYmUgb2ZmIGJ5IG1hbnkgdWxwcy4gIEJ1dCB0aGlzIGlzIGVhc2lseSBmaXhlZDogZm9yIGEKLSAgICAgICBmbG9hdGluZy1wb2ludCBudW1iZXIgfHh8IDwgREJMX0VQU0lMT04vMi4sIHRoZSBjbG9zZXN0Ci0gICAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGxvZygxK3gpIGlzIGV4YWN0bHkgeC4KLSAgICAqLwotCi0gICAgZG91YmxlIHk7Ci0gICAgaWYgKGZhYnMoeCkgPCBEQkxfRVBTSUxPTi8yLikgewotICAgICAgICByZXR1cm4geDsKLSAgICB9IGVsc2UgaWYgKC0wLjUgPD0geCAmJiB4IDw9IDEuKSB7Ci0gICAgICAgIC8qIFdBUk5JTkc6IGl0J3MgcG9zc2libGUgdGhhbiBhbiBvdmVyZWFnZXIgY29tcGlsZXIKLSAgICAgICAgICAgd2lsbCBpbmNvcnJlY3RseSBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcwotICAgICAgICAgICB0byB0aGUgZXF1aXZhbGVudCBvZiAicmV0dXJuIGxvZygxLit4KSIuIElmIHRoaXMKLSAgICAgICAgICAgaGFwcGVucywgdGhlbiByZXN1bHRzIGZyb20gbG9nMXAgd2lsbCBiZSBpbmFjY3VyYXRlCi0gICAgICAgICAgIGZvciBzbWFsbCB4LiAqLwotICAgICAgICB5ID0gMS4reDsKLSAgICAgICAgcmV0dXJuIGxvZyh5KS0oKHktMS4pLXgpL3k7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogTmFOcyBhbmQgaW5maW5pdGllcyBzaG91bGQgZW5kIHVwIGhlcmUgKi8KLSAgICAgICAgcmV0dXJuIGxvZygxLit4KTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogSEFWRV9MT0cxUCAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgbG4yID0gNi45MzE0NzE4MDU1OTk0NTI4NjIyN0UtMDE7Ci1zdGF0aWMgY29uc3QgZG91YmxlIHR3b19wb3dfbTI4ID0gMy43MjUyOTAyOTg0NjE5MTQxRS0wOTsgLyogMioqLTI4ICovCi1zdGF0aWMgY29uc3QgZG91YmxlIHR3b19wb3dfcDI4ID0gMjY4NDM1NDU2LjA7IC8qIDIqKjI4ICovCi1zdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLjA7Ci0KLS8qIGFzaW5oKHgpCi0gKiBNZXRob2QgOgotICogICAgICBCYXNlZCBvbgotICogICAgICAgICAgICAgIGFzaW5oKHgpID0gc2lnbih4KSAqIGxvZyBbIHx4fCArIHNxcnQoeCp4KzEpIF0KLSAqICAgICAgd2UgaGF2ZQotICogICAgICBhc2luaCh4KSA6PSB4ICBpZiAgMSt4Kng9MSwKLSAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSoobG9nKHgpK2xuMikpIGZvciBsYXJnZSB8eHwsIGVsc2UKLSAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSpsb2coMnx4fCsxLyh8eHwrc3FydCh4KngrMSkpKSBpZnx4fD4yLCBlbHNlCi0gKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqbG9nMXAofHh8ICsgeF4yLygxICsgc3FydCgxK3heMikpKQotICovCi0KLSNpZm5kZWYgSEFWRV9BU0lOSAotZG91YmxlCi1hc2luaChkb3VibGUgeCkKLXsKLSAgICBkb3VibGUgdzsKLSAgICBkb3VibGUgYWJzeCA9IGZhYnMoeCk7Ci0KLSAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IFB5X0lTX0lORklOSVRZKHgpKSB7Ci0gICAgICAgIHJldHVybiB4K3g7Ci0gICAgfQotICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLwotICAgICAgICByZXR1cm4geDsgICAgICAgICAgICAgICAvKiByZXR1cm4geCBpbmV4YWN0IGV4Y2VwdCAwICovCi0gICAgfQotICAgIGlmIChhYnN4ID4gdHdvX3Bvd19wMjgpIHsgICAgICAgICAgIC8qIHx4fCA+IDIqKjI4ICovCi0gICAgICAgIHcgPSBsb2coYWJzeCkrbG4yOwotICAgIH0KLSAgICBlbHNlIGlmIChhYnN4ID4gMi4wKSB7ICAgICAgICAgICAgICAvKiAyIDwgfHh8IDwgMioqMjggKi8KLSAgICAgICAgdyA9IGxvZygyLjAqYWJzeCArIDEuMCAvIChzcXJ0KHgqeCArIDEuMCkgKyBhYnN4KSk7Ci0gICAgfQotICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIqKi0yOCA8PSB8eHwgPCAyPSAqLwotICAgICAgICBkb3VibGUgdCA9IHgqeDsKLSAgICAgICAgdyA9IGxvZzFwKGFic3ggKyB0IC8gKDEuMCArIHNxcnQoMS4wICsgdCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvcHlzaWduKHcsIHgpOwotCi19Ci0jZW5kaWYgLyogSEFWRV9BU0lOSCAqLwotCi0vKiBhY29zaCh4KQotICogTWV0aG9kIDoKLSAqICAgICAgQmFzZWQgb24KLSAqICAgICAgICAgICAgYWNvc2goeCkgPSBsb2cgWyB4ICsgc3FydCh4KngtMSkgXQotICogICAgICB3ZSBoYXZlCi0gKiAgICAgICAgICAgIGFjb3NoKHgpIDo9IGxvZyh4KStsbjIsIGlmIHggaXMgbGFyZ2U7IGVsc2UKLSAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKDJ4LTEvKHNxcnQoeCp4LTEpK3gpKSBpZiB4PjI7IGVsc2UKLSAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nMXAodCtzcXJ0KDIuMCp0K3QqdCkpOyB3aGVyZSB0PXgtMS4KLSAqCi0gKiBTcGVjaWFsIGNhc2VzOgotICogICAgICBhY29zaCh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeDwxLgotICogICAgICBhY29zaChOYU4pIGlzIE5hTiB3aXRob3V0IHNpZ25hbC4KLSAqLwotCi0jaWZuZGVmIEhBVkVfQUNPU0gKLWRvdWJsZQotYWNvc2goZG91YmxlIHgpCi17Ci0gICAgaWYgKFB5X0lTX05BTih4KSkgewotICAgICAgICByZXR1cm4geCt4OwotICAgIH0KLSAgICBpZiAoeCA8IDEuKSB7ICAgICAgICAgICAgICAgICAgICAgICAvKiB4IDwgMTsgIHJldHVybiBhIHNpZ25hbGluZyBOYU4gKi8KLSAgICAgICAgZXJybm8gPSBFRE9NOwotI2lmZGVmIFB5X05BTgotICAgICAgICByZXR1cm4gUHlfTkFOOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuICh4LXgpLyh4LXgpOwotI2VuZGlmCi0gICAgfQotICAgIGVsc2UgaWYgKHggPj0gdHdvX3Bvd19wMjgpIHsgICAgICAgIC8qIHggPiAyKioyOCAqLwotICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkoeCkpIHsKLSAgICAgICAgICAgIHJldHVybiB4K3g7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbG9nKHgpK2xuMjsgICAgICAgICAgICAgICAgICAvKiBhY29zaChodWdlKT1sb2coMngpICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA9PSAxLikgewotICAgICAgICByZXR1cm4gMC4wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWNvc2goMSkgPSAwICovCi0gICAgfQotICAgIGVsc2UgaWYgKHggPiAyLikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiA8IHggPCAyKioyOCAqLwotICAgICAgICBkb3VibGUgdCA9IHgqeDsKLSAgICAgICAgcmV0dXJuIGxvZygyLjAqeCAtIDEuMCAvICh4ICsgc3FydCh0IC0gMS4wKSkpOwotICAgIH0KLSAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIDwgeCA8PSAyICovCi0gICAgICAgIGRvdWJsZSB0ID0geCAtIDEuMDsKLSAgICAgICAgcmV0dXJuIGxvZzFwKHQgKyBzcXJ0KDIuMCp0ICsgdCp0KSk7Ci0gICAgfQotfQotI2VuZGlmIC8qIEhBVkVfQUNPU0ggKi8KLQotLyogYXRhbmgoeCkKLSAqIE1ldGhvZCA6Ci0gKiAgICAxLlJlZHVjZWQgeCB0byBwb3NpdGl2ZSBieSBhdGFuaCgteCkgPSAtYXRhbmgoeCkKLSAqICAgIDIuRm9yIHg+PTAuNQotICogICAgICAgICAgICAgICAgMSAgICAgICAgICAgMnggICAgICAgICAgICAgICAgICAgICAgICAgIHgKLSAqICAgICAgYXRhbmgoeCkgPSAtLS0gKiBsb2coMSArIC0tLS0tLS0pID0gMC41ICogbG9nMXAoMiAqIC0tLS0tLS0tKQotICogICAgICAgICAgICAgICAgMiAgICAgICAgICAxIC0geCAgICAgICAgICAgICAgICAgICAgMSAtIHgKLSAqCi0gKiAgICAgIEZvciB4PDAuNQotICogICAgICBhdGFuaCh4KSA9IDAuNSpsb2cxcCgyeCsyeCp4LygxLXgpKQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIGF0YW5oKHgpIGlzIE5hTiBpZiB8eHwgPj0gMSB3aXRoIHNpZ25hbDsKLSAqICAgICAgYXRhbmgoTmFOKSBpcyB0aGF0IE5hTiB3aXRoIG5vIHNpZ25hbDsKLSAqCi0gKi8KLQotI2lmbmRlZiBIQVZFX0FUQU5ICi1kb3VibGUKLWF0YW5oKGRvdWJsZSB4KQotewotICAgIGRvdWJsZSBhYnN4OwotICAgIGRvdWJsZSB0OwotCi0gICAgaWYgKFB5X0lTX05BTih4KSkgewotICAgICAgICByZXR1cm4geCt4OwotICAgIH0KKyAgICBkb3VibGUgYWJzeCwgeTsKICAgICBhYnN4ID0gZmFicyh4KTsKLSAgICBpZiAoYWJzeCA+PSAxLikgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPj0gMSAqLwotICAgICAgICBlcnJubyA9IEVET007Ci0jaWZkZWYgUHlfTkFOCi0gICAgICAgIHJldHVybiBQeV9OQU47Ci0jZWxzZQotICAgICAgICByZXR1cm4geC96ZXJvOwotI2VuZGlmCi0gICAgfQotICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLwotICAgICAgICByZXR1cm4geDsKLSAgICB9Ci0gICAgaWYgKGFic3ggPCAwLjUpIHsgICAgICAgICAgICAgICAgICAgLyogfHh8IDwgMC41ICovCi0gICAgICAgIHQgPSBhYnN4K2Fic3g7Ci0gICAgICAgIHQgPSAwLjUgKiBsb2cxcCh0ICsgdCphYnN4IC8gKDEuMCAtIGFic3gpKTsKLSAgICB9Ci0gICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMC41IDw9IHx4fCA8PSAxLjAgKi8KLSAgICAgICAgdCA9IDAuNSAqIGxvZzFwKChhYnN4ICsgYWJzeCkgLyAoMS4wIC0gYWJzeCkpOwotICAgIH0KLSAgICByZXR1cm4gY29weXNpZ24odCwgeCk7CisgICAgeSA9IGZsb29yKGFic3gpOworICAgIGlmIChhYnN4IC0geSA+PSAwLjUpCisgICAgeSArPSAxLjA7CisgICAgcmV0dXJuIGNvcHlzaWduKHksIHgpOwogfQotI2VuZGlmIC8qIEhBVkVfQVRBTkggKi8KKyNlbmRpZiAvKiBIQVZFX1JPVU5EICovCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCA1YWZjMDFhLi5jMDEyN2JlIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogdHN0YXRlIGlzIHN0aWxsIGN1cnJlbnQiKTsKICAgICB0c3RhdGVfZGVsZXRlX2NvbW1vbih0c3RhdGUpOwogI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgaWYgKGF1dG9UTFNrZXkgJiYgUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSB0c3RhdGUpCisgICAgaWYgKGF1dG9JbnRlcnByZXRlclN0YXRlICYmIFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSkgPT0gdHN0YXRlKQogICAgICAgICBQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiB9CkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ6IG5vIGN1cnJlbnQgdHN0YXRlIik7CiAgICAgX1B5VGhyZWFkU3RhdGVfQ3VycmVudCA9IE5VTEw7CiAgICAgdHN0YXRlX2RlbGV0ZV9jb21tb24odHN0YXRlKTsKLSAgICBpZiAoYXV0b1RMU2tleSAmJiBQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpID09IHRzdGF0ZSkKKyAgICBpZiAoYXV0b0ludGVycHJldGVyU3RhdGUgJiYgUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSB0c3RhdGUpCiAgICAgICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUoYXV0b1RMU2tleSk7CiAgICAgUHlFdmFsX1JlbGVhc2VMb2NrKCk7CiB9CkBAIC01MzQsNyArNTM0LDYgQEAKIF9QeUdJTFN0YXRlX0Zpbmkodm9pZCkKIHsKICAgICBQeVRocmVhZF9kZWxldGVfa2V5KGF1dG9UTFNrZXkpOwotICAgIGF1dG9UTFNrZXkgPSAwOwogICAgIGF1dG9JbnRlcnByZXRlclN0YXRlID0gTlVMTDsKIH0KIApAQCAtNTQ2LDEwICs1NDUsMTAgQEAKIHN0YXRpYyB2b2lkCiBfUHlHSUxTdGF0ZV9Ob3RlVGhyZWFkU3RhdGUoUHlUaHJlYWRTdGF0ZSogdHN0YXRlKQogewotICAgIC8qIElmIGF1dG9UTFNrZXkgaXMgMCwgdGhpcyBtdXN0IGJlIHRoZSB2ZXJ5IGZpcnN0IHRocmVhZHN0YXRlIGNyZWF0ZWQKLSAgICAgICBpbiBQeV9Jbml0aWFsaXplKCkuICBEb24ndCBkbyBhbnl0aGluZyBmb3Igbm93ICh3ZSdsbCBiZSBiYWNrIGhlcmUKLSAgICAgICB3aGVuIF9QeUdJTFN0YXRlX0luaXQgaXMgY2FsbGVkKS4gKi8KLSAgICBpZiAoIWF1dG9UTFNrZXkpCisgICAgLyogSWYgYXV0b1RMU2tleSBpc24ndCBpbml0aWFsaXplZCwgdGhpcyBtdXN0IGJlIHRoZSB2ZXJ5IGZpcnN0CisgICAgICAgdGhyZWFkc3RhdGUgY3JlYXRlZCBpbiBQeV9Jbml0aWFsaXplKCkuICBEb24ndCBkbyBhbnl0aGluZyBmb3Igbm93CisgICAgICAgKHdlJ2xsIGJlIGJhY2sgaGVyZSB3aGVuIF9QeUdJTFN0YXRlX0luaXQgaXMgY2FsbGVkKS4gKi8KKyAgICBpZiAoIWF1dG9JbnRlcnByZXRlclN0YXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAvKiBTdGljayB0aGUgdGhyZWFkIHN0YXRlIGZvciB0aGlzIHRocmVhZCBpbiB0aHJlYWQgbG9jYWwgc3RvcmFnZS4KQEAgLTU3Nyw3ICs1NzYsNyBAQAogUHlUaHJlYWRTdGF0ZSAqCiBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSh2b2lkKQogewotICAgIGlmIChhdXRvSW50ZXJwcmV0ZXJTdGF0ZSA9PSBOVUxMIHx8IGF1dG9UTFNrZXkgPT0gMCkKKyAgICBpZiAoYXV0b0ludGVycHJldGVyU3RhdGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0cnRvZC5jIGIvUHl0aG9uL3B5c3RydG9kLmMKaW5kZXggOTAwNGNmNC4uODU5YWY0MyAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RydG9kLmMKKysrIGIvUHl0aG9uL3B5c3RydG9kLmMKQEAgLTMsMTEgKzMsNTkgQEAKICNpbmNsdWRlIDxQeXRob24uaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KIAotLyogYXNjaWkgY2hhcmFjdGVyIHRlc3RzIChhcyBvcHBvc2VkIHRvIGxvY2FsZSB0ZXN0cykgKi8KLSNkZWZpbmUgSVNTUEFDRShjKSAgKChjKSA9PSAnICcgfHwgKGMpID09ICdcZicgfHwgKGMpID09ICdcbicgfHwgXAotICAgICAgICAgICAgIChjKSA9PSAnXHInIHx8IChjKSA9PSAnXHQnIHx8IChjKSA9PSAnXHYnKQotI2RlZmluZSBJU0RJR0lUKGMpICAoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKQorLyogQ2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgbWF0Y2ggdXNlZCBmb3IgbmFuIGFuZCBpbmYgZGV0ZWN0aW9uOyB0IHNob3VsZCBiZQorICAgbG93ZXItY2FzZS4gIFJldHVybnMgMSBmb3IgYSBzdWNjZXNzZnVsIG1hdGNoLCAwIG90aGVyd2lzZS4gKi8KIAorc3RhdGljIGludAorY2FzZV9pbnNlbnNpdGl2ZV9tYXRjaChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KQoreworICAgIHdoaWxlKCp0ICYmIFB5X1RPTE9XRVIoKnMpID09ICp0KSB7CisgICAgICAgIHMrKzsKKyAgICAgICAgdCsrOworICAgIH0KKyAgICByZXR1cm4gKnQgPyAwIDogMTsKK30KKworLyogX1B5X3BhcnNlX2luZl9vcl9uYW46IEF0dGVtcHQgdG8gcGFyc2UgYSBzdHJpbmcgb2YgdGhlIGZvcm0gIm5hbiIsICJpbmYiIG9yCisgICAiaW5maW5pdHkiLCB3aXRoIGFuIG9wdGlvbmFsIGxlYWRpbmcgc2lnbiBvZiAiKyIgb3IgIi0iLiAgT24gc3VjY2VzcywKKyAgIHJldHVybiB0aGUgTmFOIG9yIEluZmluaXR5IGFzIGEgZG91YmxlIGFuZCBzZXQgKmVuZHB0ciB0byBwb2ludCBqdXN0IGJleW9uZAorICAgdGhlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgcG9ydGlvbiBvZiB0aGUgc3RyaW5nLiAgT24gZmFpbHVyZSwgcmV0dXJuIC0xLjAgYW5kCisgICBzZXQgKmVuZHB0ciB0byBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZy4gKi8KKworZG91YmxlCitfUHlfcGFyc2VfaW5mX29yX25hbihjb25zdCBjaGFyICpwLCBjaGFyICoqZW5kcHRyKQoreworICAgIGRvdWJsZSByZXR2YWw7CisgICAgY29uc3QgY2hhciAqczsKKyAgICBpbnQgbmVnYXRlID0gMDsKKworICAgIHMgPSBwOworICAgIGlmICgqcyA9PSAnLScpIHsKKyAgICAgICAgbmVnYXRlID0gMTsKKyAgICAgICAgcysrOworICAgIH0KKyAgICBlbHNlIGlmICgqcyA9PSAnKycpIHsKKyAgICAgICAgcysrOworICAgIH0KKyAgICBpZiAoY2FzZV9pbnNlbnNpdGl2ZV9tYXRjaChzLCAiaW5mIikpIHsKKyAgICAgICAgcyArPSAzOworICAgICAgICBpZiAoY2FzZV9pbnNlbnNpdGl2ZV9tYXRjaChzLCAiaW5pdHkiKSkKKyAgICAgICAgICAgIHMgKz0gNTsKKyAgICAgICAgcmV0dmFsID0gbmVnYXRlID8gLVB5X0hVR0VfVkFMIDogUHlfSFVHRV9WQUw7CisgICAgfQorI2lmZGVmIFB5X05BTgorICAgIGVsc2UgaWYgKGNhc2VfaW5zZW5zaXRpdmVfbWF0Y2gocywgIm5hbiIpKSB7CisgICAgICAgIHMgKz0gMzsKKyAgICAgICAgcmV0dmFsID0gbmVnYXRlID8gLVB5X05BTiA6IFB5X05BTjsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIHsKKyAgICAgICAgcyA9IHA7CisgICAgICAgIHJldHZhbCA9IC0xLjA7CisgICAgfQorICAgICplbmRwdHIgPSAoY2hhciAqKXM7CisgICAgcmV0dXJuIHJldHZhbDsKK30KIAogLyoqCiAgKiBQeU9TX2FzY2lpX3N0cnRvZDoKQEAgLTM3LDggKzg1LDQ0IEBACiAgKgogICogUmV0dXJuIHZhbHVlOiB0aGUgI2dkb3VibGUgdmFsdWUuCiAgKiovCisKKyNpZm5kZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorCiBkb3VibGUKLVB5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCitfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKK3sKKyAgICBkb3VibGUgcmVzdWx0OworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUjsKKworICAgIGFzc2VydChucHRyICE9IE5VTEwpOworICAgIC8qIFNldCBlcnJubyB0byB6ZXJvLCBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB6ZXJvIHJlc3VsdHMKKyAgICAgICBhbmQgdW5kZXJmbG93cyAqLworICAgIGVycm5vID0gMDsKKworICAgIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX1NUQVJUOworICAgIHJlc3VsdCA9IF9QeV9kZ19zdHJ0b2QobnB0ciwgZW5kcHRyKTsKKyAgICBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9FTkQ7CisKKyAgICBpZiAoKmVuZHB0ciA9PSBucHRyKQorICAgICAgICAvKiBzdHJpbmcgbWlnaHQgcmVwcmVzZW50IGFuIGluZiBvciBuYW4gKi8KKyAgICAgICAgcmVzdWx0ID0gX1B5X3BhcnNlX2luZl9vcl9uYW4obnB0ciwgZW5kcHRyKTsKKworICAgIHJldHVybiByZXN1bHQ7CisKK30KKworI2Vsc2UKKworLyoKKyAgIFVzZSBzeXN0ZW0gc3RydG9kOyAgc2luY2Ugc3RydG9kIGlzIGxvY2FsZSBhd2FyZSwgd2UgbWF5CisgICBoYXZlIHRvIGZpcnN0IGZpeCB0aGUgZGVjaW1hbCBzZXBhcmF0b3IuCisKKyAgIE5vdGUgdGhhdCB1bmxpa2UgX1B5X2RnX3N0cnRvZCwgdGhlIHN5c3RlbSBzdHJ0b2QgbWF5IG5vdCBhbHdheXMgZ2l2ZQorICAgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0cy4KKyovCisKK2RvdWJsZQorX1B5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCiB7CiAgICAgY2hhciAqZmFpbF9wb3M7CiAgICAgZG91YmxlIHZhbCA9IC0xLjA7CkBAIC02Miw4NSArMTQ2LDc5IEBACiAKICAgICBkZWNpbWFsX3BvaW50X3BvcyA9IE5VTEw7CiAKLSAgICAvKiBXZSBwcm9jZXNzIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHRoZSBvcHRpb25hbCBzaWduIG1hbnVhbGx5LAotICAgICAgIHRoZW4gcGFzcyB0aGUgcmVtYWluZGVyIHRvIHRoZSBzeXN0ZW0gc3RydG9kLiAgVGhpcyBlbnN1cmVzIHRoYXQKLSAgICAgICB0aGUgcmVzdWx0IG9mIGFuIHVuZGVyZmxvdyBoYXMgdGhlIGNvcnJlY3Qgc2lnbi4gKGJ1ZyAjMTcyNSkgICovCisgICAgLyogUGFyc2UgaW5maW5pdGllcyBhbmQgbmFucyAqLworICAgIHZhbCA9IF9QeV9wYXJzZV9pbmZfb3JfbmFuKG5wdHIsIGVuZHB0cik7CisgICAgaWYgKCplbmRwdHIgIT0gbnB0cikKKyAgICAgICAgcmV0dXJuIHZhbDsKIAorICAgIC8qIFNldCBlcnJubyB0byB6ZXJvLCBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB6ZXJvIHJlc3VsdHMKKyAgICAgICBhbmQgdW5kZXJmbG93cyAqLworICAgIGVycm5vID0gMDsKKworICAgIC8qIFdlIHByb2Nlc3MgdGhlIG9wdGlvbmFsIHNpZ24gbWFudWFsbHksIHRoZW4gcGFzcyB0aGUgcmVtYWluZGVyIHRvCisgICAgICAgdGhlIHN5c3RlbSBzdHJ0b2QuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0IG9mIGFuIHVuZGVyZmxvdworICAgICAgIGhhcyB0aGUgY29ycmVjdCBzaWduLiAoYnVnICMxNzI1KSAgKi8KICAgICBwID0gbnB0cjsKLSAgICAvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSAgICB3aGlsZSAoSVNTUEFDRSgqcCkpCi0gICAgICAgIHArKzsKLQogICAgIC8qIFByb2Nlc3MgbGVhZGluZyBzaWduLCBpZiBwcmVzZW50ICovCiAgICAgaWYgKCpwID09ICctJykgewogICAgICAgICBuZWdhdGUgPSAxOwogICAgICAgICBwKys7Ci0gICAgfSBlbHNlIGlmICgqcCA9PSAnKycpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoKnAgPT0gJysnKSB7CiAgICAgICAgIHArKzsKICAgICB9CiAKLSAgICAvKiBXaGF0J3MgbGVmdCBzaG91bGQgYmVnaW4gd2l0aCBhIGRpZ2l0LCBhIGRlY2ltYWwgcG9pbnQsIG9yIG9uZSBvZgotICAgICAgIHRoZSBsZXR0ZXJzIGksIEksIG4sIE4uIEl0IHNob3VsZCBub3QgYmVnaW4gd2l0aCAweCBvciAwWCAqLwotICAgIGlmICgoIUlTRElHSVQoKnApICYmCi0gICAgICAgICAqcCAhPSAnLicgJiYgKnAgIT0gJ2knICYmICpwICE9ICdJJyAmJiAqcCAhPSAnbicgJiYgKnAgIT0gJ04nKQotICAgICAgICB8fAotICAgICAgICAoKnAgPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykpKQotICAgIHsKLSAgICAgICAgaWYgKGVuZHB0cikKLSAgICAgICAgICAgICplbmRwdHIgPSAoY2hhciopbnB0cjsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiB2YWw7Ci0gICAgfQotICAgIGRpZ2l0c19wb3MgPSBwOworICAgIC8qIFNvbWUgcGxhdGZvcm0gc3RydG9kcyBhY2NlcHQgaGV4IGZsb2F0czsgUHl0aG9uIHNob3VsZG4ndCAoYXQgdGhlCisgICAgICAgbW9tZW50KSwgc28gd2UgY2hlY2sgZXhwbGljaXRseSBmb3Igc3RyaW5ncyBzdGFydGluZyB3aXRoICcweCcuICovCisgICAgaWYgKCpwID09ICcwJyAmJiAoKihwKzEpID09ICd4JyB8fCAqKHArMSkgPT0gJ1gnKSkKKyAgICAgICAgZ290byBpbnZhbGlkX3N0cmluZzsKIAorICAgIC8qIENoZWNrIHRoYXQgd2hhdCdzIGxlZnQgYmVnaW5zIHdpdGggYSBkaWdpdCBvciBkZWNpbWFsIHBvaW50ICovCisgICAgaWYgKCFQeV9JU0RJR0lUKCpwKSAmJiAqcCAhPSAnLicpCisgICAgICAgIGdvdG8gaW52YWxpZF9zdHJpbmc7CisKKyAgICBkaWdpdHNfcG9zID0gcDsKICAgICBpZiAoZGVjaW1hbF9wb2ludFswXSAhPSAnLicgfHwKICAgICAgICAgZGVjaW1hbF9wb2ludFsxXSAhPSAwKQogICAgIHsKLSAgICAgICAgd2hpbGUgKElTRElHSVQoKnApKQorICAgICAgICAvKiBMb29rIGZvciBhICcuJyBpbiB0aGUgaW5wdXQ7IGlmIHByZXNlbnQsIGl0J2xsIG5lZWQgdG8gYmUKKyAgICAgICAgICAgc3dhcHBlZCBmb3IgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgZGVjaW1hbCBwb2ludCBiZWZvcmUgd2UKKyAgICAgICAgICAgY2FsbCBzdHJ0b2QuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgZmluZCB0aGUgY3VycmVudAorICAgICAgICAgICBsb2NhbGUncyBkZWNpbWFsIHBvaW50IHRoZW4gdGhlIGlucHV0IGlzIGludmFsaWQuICovCisgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCpwKSkKICAgICAgICAgICAgIHArKzsKIAogICAgICAgICBpZiAoKnAgPT0gJy4nKQogICAgICAgICB7CiAgICAgICAgICAgICBkZWNpbWFsX3BvaW50X3BvcyA9IHArKzsKIAotICAgICAgICAgICAgd2hpbGUgKElTRElHSVQoKnApKQorICAgICAgICAgICAgLyogbG9jYXRlIGVuZCBvZiBudW1iZXIgKi8KKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCpwKSkKICAgICAgICAgICAgICAgICBwKys7CiAKICAgICAgICAgICAgIGlmICgqcCA9PSAnZScgfHwgKnAgPT0gJ0UnKQogICAgICAgICAgICAgICAgIHArKzsKICAgICAgICAgICAgIGlmICgqcCA9PSAnKycgfHwgKnAgPT0gJy0nKQogICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIHdoaWxlIChJU0RJR0lUKCpwKSkKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCpwKSkKICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICBlbmQgPSBwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAocCwgZGVjaW1hbF9wb2ludCwgZGVjaW1hbF9wb2ludF9sZW4pID09IDApCi0gICAgICAgIHsKICAgICAgICAgICAgIC8qIFB5dGhvbiBidWcgIzE0MTc2OTkgKi8KLSAgICAgICAgICAgIGlmIChlbmRwdHIpCi0gICAgICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyKilucHRyOwotICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICByZXR1cm4gdmFsOwotICAgICAgICB9CisgICAgICAgICAgICBnb3RvIGludmFsaWRfc3RyaW5nOwogICAgICAgICAvKiBGb3IgdGhlIG90aGVyIGNhc2VzLCB3ZSBuZWVkIG5vdCBjb252ZXJ0IHRoZSBkZWNpbWFsCiAgICAgICAgICAgIHBvaW50ICovCiAgICAgfQogCi0gICAgLyogU2V0IGVycm5vIHRvIHplcm8sIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHplcm8gcmVzdWx0cwotICAgICAgIGFuZCB1bmRlcmZsb3dzICovCi0gICAgZXJybm8gPSAwOwotCi0gICAgaWYgKGRlY2ltYWxfcG9pbnRfcG9zKQotICAgIHsKKyAgICBpZiAoZGVjaW1hbF9wb2ludF9wb3MpIHsKICAgICAgICAgY2hhciAqY29weSwgKmM7Ci0KLSAgICAgICAgLyogV2UgbmVlZCB0byBjb252ZXJ0IHRoZSAnLicgdG8gdGhlIGxvY2FsZSBzcGVjaWZpYyBkZWNpbWFsCi0gICAgICAgICAgIHBvaW50ICovCisgICAgICAgIC8qIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGlucHV0LCB3aXRoIHRoZSAnLicgY29udmVydGVkIHRvIHRoZQorICAgICAgICAgICBsb2NhbGUtc3BlY2lmaWMgZGVjaW1hbCBwb2ludCAqLwogICAgICAgICBjb3B5ID0gKGNoYXIgKilQeU1lbV9NQUxMT0MoZW5kIC0gZGlnaXRzX3BvcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICsgZGVjaW1hbF9wb2ludF9sZW4pOwogICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZW5kcHRyKQotICAgICAgICAgICAgICAgICplbmRwdHIgPSAoY2hhciAqKW5wdHI7CisgICAgICAgICAgICAqZW5kcHRyID0gKGNoYXIgKilucHRyOwogICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgICB9CkBAIC0xNzYsMTUgKzI1NCwxMTkgQEAKICAgICB9CiAKICAgICBpZiAoZmFpbF9wb3MgPT0gZGlnaXRzX3BvcykKLSAgICAgICAgZmFpbF9wb3MgPSAoY2hhciAqKW5wdHI7CisgICAgICAgIGdvdG8gaW52YWxpZF9zdHJpbmc7CiAKICAgICBpZiAobmVnYXRlICYmIGZhaWxfcG9zICE9IG5wdHIpCiAgICAgICAgIHZhbCA9IC12YWw7Ci0KLSAgICBpZiAoZW5kcHRyKQotICAgICAgICAqZW5kcHRyID0gZmFpbF9wb3M7CisgICAgKmVuZHB0ciA9IGZhaWxfcG9zOwogCiAgICAgcmV0dXJuIHZhbDsKKworICBpbnZhbGlkX3N0cmluZzoKKyAgICAqZW5kcHRyID0gKGNoYXIqKW5wdHI7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xLjA7Cit9CisKKyNlbmRpZgorCisvKiBQeU9TX2FzY2lpX3N0cnRvZCBpcyBERVBSRUNBVEVEIGluIFB5dGhvbiAyLjcgYW5kIDMuMSAqLworCitkb3VibGUKK1B5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCit7CisgICAgY2hhciAqZmFpbF9wb3M7CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBkb3VibGUgeDsKKworICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIlB5T1NfYXNjaWlfc3RydG9kIGFuZCBQeU9TX2FzY2lpX2F0b2YgYXJlICIKKyAgICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiAgVXNlIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAiaW5zdGVhZC4iLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMS4wOworCisgICAgLyogX1B5T1NfYXNjaWlfc3RydG9kIGFscmVhZHkgZG9lcyBldmVyeXRoaW5nIHRoYXQgd2Ugd2FudCwKKyAgICAgICBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IHBhcnNlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIHAgPSBucHRyOworICAgIHdoaWxlIChQeV9JU1NQQUNFKCpwKSkKKyAgICAgICAgcCsrOworICAgIHggPSBfUHlPU19hc2NpaV9zdHJ0b2QocCwgJmZhaWxfcG9zKTsKKyAgICBpZiAoZmFpbF9wb3MgPT0gcCkKKyAgICAgICAgZmFpbF9wb3MgPSAoY2hhciAqKW5wdHI7CisgICAgaWYgKGVuZHB0cikKKyAgICAgICAgKmVuZHB0ciA9IChjaGFyICopZmFpbF9wb3M7CisgICAgcmV0dXJuIHg7Cit9CisKKy8qIFB5T1NfYXNjaWlfc3RydG9kIGlzIERFUFJFQ0FURUQgaW4gUHl0aG9uIDIuNyBhbmQgMy4xICovCisKK2RvdWJsZQorUHlPU19hc2NpaV9hdG9mKGNvbnN0IGNoYXIgKm5wdHIpCit7CisgICAgcmV0dXJuIFB5T1NfYXNjaWlfc3RydG9kKG5wdHIsIE5VTEwpOworfQorCisvKiBQeU9TX3N0cmluZ190b19kb3VibGUgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvciB0aGUgZGVwcmVjYXRlZAorICAgUHlPU19hc2NpaV9zdHJ0b2QgYW5kIFB5T1NfYXNjaWlfYXRvZiBmdW5jdGlvbnMuICBJdCBjb252ZXJ0cyBhCisgICBudWxsLXRlcm1pbmF0ZWQgYnl0ZSBzdHJpbmcgcyAoaW50ZXJwcmV0ZWQgYXMgYSBzdHJpbmcgb2YgQVNDSUkgY2hhcmFjdGVycykKKyAgIHRvIGEgZmxvYXQuICBUaGUgc3RyaW5nIHNob3VsZCBub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgKGluCisgICBjb250cmFzdCwgUHlPU19hc2NpaV9zdHJ0b2QgYWxsb3dzIGxlYWRpbmcgd2hpdGVzcGFjZSBidXQgbm90IHRyYWlsaW5nCisgICB3aGl0ZXNwYWNlKS4gIFRoZSBjb252ZXJzaW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IGxvY2FsZS4KKworICAgSWYgZW5kcHRyIGlzIE5VTEwsIHRyeSB0byBjb252ZXJ0IHRoZSB3aG9sZSBzdHJpbmcuICBSYWlzZSBWYWx1ZUVycm9yIGFuZAorICAgcmV0dXJuIC0xLjAgaWYgdGhlIHN0cmluZyBpcyBub3QgYSB2YWxpZCByZXByZXNlbnRhdGlvbiBvZiBhIGZsb2F0aW5nLXBvaW50CisgICBudW1iZXIuCisKKyAgIElmIGVuZHB0ciBpcyBub24tTlVMTCwgdHJ5IHRvIGNvbnZlcnQgYXMgbXVjaCBvZiB0aGUgc3RyaW5nIGFzIHBvc3NpYmxlLgorICAgSWYgbm8gaW5pdGlhbCBzZWdtZW50IG9mIHRoZSBzdHJpbmcgaXMgdGhlIHZhbGlkIHJlcHJlc2VudGF0aW9uIG9mIGEKKyAgIGZsb2F0aW5nLXBvaW50IG51bWJlciB0aGVuICplbmRwdHIgaXMgc2V0IHRvIHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICBzdHJpbmcsIC0xLjAgaXMgcmV0dXJuZWQgYW5kIGFnYWluIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorCisgICBPbiBvdmVyZmxvdyAoZS5nLiwgd2hlbiB0cnlpbmcgdG8gY29udmVydCAnMWU1MDAnIG9uIGFuIElFRUUgNzU0IG1hY2hpbmUpLAorICAgaWYgb3ZlcmZsb3dfZXhjZXB0aW9uIGlzIE5VTEwgdGhlbiArLVB5X0hVR0VfVkFMIGlzIHJldHVybmVkLCBhbmQgbm8gUHl0aG9uCisgICBleGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCBvdmVyZmxvd19leGNlcHRpb24gc2hvdWxkIHBvaW50IHRvIGEKKyAgIGEgUHl0aG9uIGV4Y2VwdGlvbiwgdGhpcyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQsIC0xLjAgd2lsbCBiZSByZXR1cm5lZCwKKyAgIGFuZCAqZW5kcHRyIHdpbGwgcG9pbnQganVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbnZlcnRlZCB2YWx1ZS4KKworICAgSWYgYW55IG90aGVyIGZhaWx1cmUgb2NjdXJzIChmb3IgZXhhbXBsZSBsYWNrIG9mIG1lbW9yeSksIC0xLjAgaXMgcmV0dXJuZWQKKyAgIGFuZCB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIGV4Y2VwdGlvbiB3aWxsIGhhdmUgYmVlbiBzZXQuCisqLworCitkb3VibGUKK1B5T1Nfc3RyaW5nX3RvX2RvdWJsZShjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiplbmRwdHIsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm92ZXJmbG93X2V4Y2VwdGlvbikKK3sKKyAgICBkb3VibGUgeCwgcmVzdWx0PS0xLjA7CisgICAgY2hhciAqZmFpbF9wb3M7CisKKyAgICBlcnJubyA9IDA7CisgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiUHlPU19zdHJpbmdfdG9fZG91YmxlIiwgcmV0dXJuIC0xLjApCisgICAgeCA9IF9QeU9TX2FzY2lpX3N0cnRvZChzLCAmZmFpbF9wb3MpOworICAgIFB5RlBFX0VORF9QUk9URUNUKHgpCisKKyAgICBpZiAoZXJybm8gPT0gRU5PTUVNKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGZhaWxfcG9zID0gKGNoYXIgKilzOworICAgIH0KKyAgICBlbHNlIGlmICghZW5kcHRyICYmIChmYWlsX3BvcyA9PSBzIHx8ICpmYWlsX3BvcyAhPSAnXDAnKSkKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBmbG9hdDogIgorICAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMiLCBzKTsKKyAgICBlbHNlIGlmIChmYWlsX3BvcyA9PSBzKQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvbnZlcnQgc3RyaW5nIHRvIGZsb2F0OiAiCisgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyIsIHMpOworICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSAmJiBmYWJzKHgpID49IDEuMCAmJiBvdmVyZmxvd19leGNlcHRpb24pCisgICAgICAgIFB5RXJyX0Zvcm1hdChvdmVyZmxvd19leGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0OiAiCisgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyIsIHMpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0geDsKKworICAgIGlmIChlbmRwdHIgIT0gTlVMTCkKKyAgICAgICAgKmVuZHB0ciA9IGZhaWxfcG9zOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIEdpdmVuIGEgc3RyaW5nIHRoYXQgbWF5IGhhdmUgYSBkZWNpbWFsIHBvaW50IGluIHRoZSBjdXJyZW50CkBAIC0yMDEsNyArMzgzLDcgQEAKIAogICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnKycgfHwgKmJ1ZmZlciA9PSAnLScpCiAgICAgICAgICAgICBidWZmZXIrKzsKLSAgICAgICAgd2hpbGUgKGlzZGlnaXQoUHlfQ0hBUk1BU0soKmJ1ZmZlcikpKQorICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgqYnVmZmVyKSkKICAgICAgICAgICAgIGJ1ZmZlcisrOwogICAgICAgICBpZiAoc3RybmNtcChidWZmZXIsIGRlY2ltYWxfcG9pbnQsIGRlY2ltYWxfcG9pbnRfbGVuKSA9PSAwKSB7CiAgICAgICAgICAgICAqYnVmZmVyID0gJy4nOwpAQCAtMjQ0LDcgKzQyNiw3IEBACiAKICAgICAgICAgLyogRmluZCB0aGUgZW5kIG9mIHRoZSBleHBvbmVudCwga2VlcGluZyB0cmFjayBvZiBsZWFkaW5nCiAgICAgICAgICAgIHplcm9zLiAqLwotICAgICAgICB3aGlsZSAoKnAgJiYgaXNkaWdpdChQeV9DSEFSTUFTSygqcCkpKSB7CisgICAgICAgIHdoaWxlICgqcCAmJiBQeV9JU0RJR0lUKCpwKSkgewogICAgICAgICAgICAgaWYgKGluX2xlYWRpbmdfemVyb3MgJiYgKnAgPT0gJzAnKQogICAgICAgICAgICAgICAgICsrbGVhZGluZ196ZXJvX2NudDsKICAgICAgICAgICAgIGlmICgqcCAhPSAnMCcpCkBAIC0yOTIsMTMgKzQ3NCw2MSBAQAogICAgIH0KIH0KIAotLyogRW5zdXJlIHRoYXQgYnVmZmVyIGhhcyBhIGRlY2ltYWwgcG9pbnQgaW4gaXQuICBUaGUgZGVjaW1hbCBwb2ludAotICAgd2lsbCBub3QgYmUgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLCBpdCB3aWxsIGFsd2F5cyBiZSAnLicgKi8KKy8qIFJlbW92ZSB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmcm9tIGEgbnVtZXJpYyBzdHJpbmc7IGFsc28KKyAgIHJlbW92ZSB0aGUgZGVjaW1hbCBwb2ludCBpZiBhbGwgZGlnaXRzIGZvbGxvd2luZyBpdCBhcmUgemVyby4gIFRoZSBudW1lcmljCisgICBzdHJpbmcgbXVzdCBlbmQgaW4gJ1wwJywgYW5kIHNob3VsZCBub3QgaGF2ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZworICAgd2hpdGVzcGFjZS4gIEFzc3VtZXMgdGhhdCB0aGUgZGVjaW1hbCBwb2ludCBpcyAnLicuICovCiBQeV9MT0NBTF9JTkxJTkUodm9pZCkKLWVuc3VyZV9kZWNpbWFsX3BvaW50KGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1Zl9zaXplKQorcmVtb3ZlX3RyYWlsaW5nX3plcm9zKGNoYXIgKmJ1ZmZlcikKIHsKLSAgICBpbnQgaW5zZXJ0X2NvdW50ID0gMDsKLSAgICBjaGFyKiBjaGFyc190b19pbnNlcnQ7CisgICAgY2hhciAqb2xkX2ZyYWN0aW9uX2VuZCwgKm5ld19mcmFjdGlvbl9lbmQsICplbmQsICpwOworCisgICAgcCA9IGJ1ZmZlcjsKKyAgICBpZiAoKnAgPT0gJy0nIHx8ICpwID09ICcrJykKKyAgICAgICAgLyogU2tpcCBsZWFkaW5nIHNpZ24sIGlmIHByZXNlbnQgKi8KKyAgICAgICAgKytwOworICAgIHdoaWxlIChQeV9JU0RJR0lUKCpwKSkKKyAgICAgICAgKytwOworCisgICAgLyogaWYgdGhlcmUncyBubyBkZWNpbWFsIHBvaW50IHRoZXJlJ3Mgbm90aGluZyB0byBkbyAqLworICAgIGlmICgqcCsrICE9ICcuJykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc2NhbiBhbnkgZGlnaXRzIGFmdGVyIHRoZSBwb2ludCAqLworICAgIHdoaWxlIChQeV9JU0RJR0lUKCpwKSkKKyAgICAgICAgKytwOworICAgIG9sZF9mcmFjdGlvbl9lbmQgPSBwOworCisgICAgLyogc2NhbiB1cCB0byBlbmRpbmcgJ1wwJyAqLworICAgIHdoaWxlICgqcCAhPSAnXDAnKQorICAgICAgICBwKys7CisgICAgLyogKzEgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbW92ZSB0aGUgbnVsbCBieXRlIGFzIHdlbGwgKi8KKyAgICBlbmQgPSBwKzE7CisKKyAgICAvKiBzY2FuIGJhY2sgZnJvbSBmcmFjdGlvbl9lbmQsIGxvb2tpbmcgZm9yIHJlbW92YWJsZSB6ZXJvcyAqLworICAgIHAgPSBvbGRfZnJhY3Rpb25fZW5kOworICAgIHdoaWxlICgqKHAtMSkgPT0gJzAnKQorICAgICAgICAtLXA7CisgICAgLyogYW5kIHJlbW92ZSBwb2ludCBpZiB3ZSd2ZSBnb3QgdGhhdCBmYXIgKi8KKyAgICBpZiAoKihwLTEpID09ICcuJykKKyAgICAgICAgLS1wOworICAgIG5ld19mcmFjdGlvbl9lbmQgPSBwOworCisgICAgbWVtbW92ZShuZXdfZnJhY3Rpb25fZW5kLCBvbGRfZnJhY3Rpb25fZW5kLCBlbmQtb2xkX2ZyYWN0aW9uX2VuZCk7Cit9CisKKy8qIEVuc3VyZSB0aGF0IGJ1ZmZlciBoYXMgYSBkZWNpbWFsIHBvaW50IGluIGl0LiAgVGhlIGRlY2ltYWwgcG9pbnQgd2lsbCBub3QKKyAgIGJlIGluIHRoZSBjdXJyZW50IGxvY2FsZSwgaXQgd2lsbCBhbHdheXMgYmUgJy4nLiBEb24ndCBhZGQgYSBkZWNpbWFsIHBvaW50CisgICBpZiBhbiBleHBvbmVudCBpcyBwcmVzZW50LiAgQWxzbywgY29udmVydCB0byBleHBvbmVudGlhbCBub3RhdGlvbiB3aGVyZQorICAgYWRkaW5nIGEgJy4wJyB3b3VsZCBwcm9kdWNlIHRvbyBtYW55IHNpZ25pZmljYW50IGRpZ2l0cyAoc2VlIGlzc3VlIDU4NjQpLgorCisgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZml4ZWQgYnVmZmVyLCBvciBOVUxMIG9uIGZhaWx1cmUuCisqLworUHlfTE9DQUxfSU5MSU5FKGNoYXIgKikKK2Vuc3VyZV9kZWNpbWFsX3BvaW50KGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1Zl9zaXplLCBpbnQgcHJlY2lzaW9uKQoreworICAgIGludCBkaWdpdF9jb3VudCwgaW5zZXJ0X2NvdW50ID0gMCwgY29udmVydF90b19leHAgPSAwOworICAgIGNoYXIgKmNoYXJzX3RvX2luc2VydCwgKmRpZ2l0c19zdGFydDsKIAogICAgIC8qIHNlYXJjaCBmb3IgdGhlIGZpcnN0IG5vbi1kaWdpdCBjaGFyYWN0ZXIgKi8KICAgICBjaGFyICpwID0gYnVmZmVyOwpAQCAtMzA2LDI1ICs1MzYsNDQgQEAKICAgICAgICAgLyogU2tpcCBsZWFkaW5nIHNpZ24sIGlmIHByZXNlbnQuICBJIHRoaW5rIHRoaXMgY291bGQgb25seQogICAgICAgICAgICBldmVyIGJlICctJywgYnV0IGl0IGNhbid0IGh1cnQgdG8gY2hlY2sgZm9yIGJvdGguICovCiAgICAgICAgICsrcDsKLSAgICB3aGlsZSAoKnAgJiYgaXNkaWdpdChQeV9DSEFSTUFTSygqcCkpKQorICAgIGRpZ2l0c19zdGFydCA9IHA7CisgICAgd2hpbGUgKCpwICYmIFB5X0lTRElHSVQoKnApKQogICAgICAgICArK3A7CisgICAgZGlnaXRfY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKHAgLSBkaWdpdHNfc3RhcnQsIFB5X3NzaXplX3QsIGludCk7CiAKICAgICBpZiAoKnAgPT0gJy4nKSB7Ci0gICAgICAgIGlmIChpc2RpZ2l0KFB5X0NIQVJNQVNLKCoocCsxKSkpKSB7CisgICAgICAgIGlmIChQeV9JU0RJR0lUKCoocCsxKSkpIHsKICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8sIHdlIGFscmVhZHkgaGF2ZSBhIGRlY2ltYWwKICAgICAgICAgICAgICAgIHBvaW50IGFuZCBhIGRpZ2l0IGFmdGVyIGl0ICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBXZSBoYXZlIGEgZGVjaW1hbCBwb2ludCwgYnV0IG5vIGZvbGxvd2luZwogICAgICAgICAgICAgICAgZGlnaXQuICBJbnNlcnQgYSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsLiAqLworICAgICAgICAgICAgLyogY2FuJ3QgZXZlciBnZXQgaGVyZSB2aWEgUHlPU19kb3VibGVfdG9fc3RyaW5nICovCisgICAgICAgICAgICBhc3NlcnQocHJlY2lzaW9uID09IC0xKTsKICAgICAgICAgICAgICsrcDsKICAgICAgICAgICAgIGNoYXJzX3RvX2luc2VydCA9ICIwIjsKICAgICAgICAgICAgIGluc2VydF9jb3VudCA9IDE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXJzX3RvX2luc2VydCA9ICIuMCI7Ci0gICAgICAgIGluc2VydF9jb3VudCA9IDI7CisgICAgZWxzZSBpZiAoISgqcCA9PSAnZScgfHwgKnAgPT0gJ0UnKSkgeworICAgICAgICAvKiBEb24ndCBhZGQgIi4wIiBpZiB3ZSBoYXZlIGFuIGV4cG9uZW50LiAqLworICAgICAgICBpZiAoZGlnaXRfY291bnQgPT0gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICAvKiBpc3N1ZSA1ODY0OiBkb24ndCBhZGQgYSB0cmFpbGluZyAuMCBpbiB0aGUgY2FzZQorICAgICAgICAgICAgICAgd2hlcmUgdGhlICclZyctZm9ybWF0dGVkIHJlc3VsdCBhbHJlYWR5IGhhcyBhcyBtYW55CisgICAgICAgICAgICAgICBzaWduaWZpY2FudCBkaWdpdHMgYXMgd2VyZSByZXF1ZXN0ZWQuICBTd2l0Y2ggdG8KKyAgICAgICAgICAgICAgIGV4cG9uZW50aWFsIG5vdGF0aW9uIGluc3RlYWQuICovCisgICAgICAgICAgICBjb252ZXJ0X3RvX2V4cCA9IDE7CisgICAgICAgICAgICAvKiBubyBleHBvbmVudCwgbm8gcG9pbnQsIGFuZCB3ZSBzaG91bGRuJ3QgbGFuZCBoZXJlCisgICAgICAgICAgICAgICBmb3IgaW5mcyBhbmQgbmFucywgc28gd2UgbXVzdCBiZSBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICAgICAgICAgc3RyaW5nLiAqLworICAgICAgICAgICAgYXNzZXJ0KCpwID09ICdcMCcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHByZWNpc2lvbiA9PSAtMSB8fCBkaWdpdF9jb3VudCA8IHByZWNpc2lvbik7CisgICAgICAgICAgICBjaGFyc190b19pbnNlcnQgPSAiLjAiOworICAgICAgICAgICAgaW5zZXJ0X2NvdW50ID0gMjsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoaW5zZXJ0X2NvdW50KSB7CiAgICAgICAgIHNpemVfdCBidWZfbGVuID0gc3RybGVuKGJ1ZmZlcik7CkBAIC0zMzksMzcgKzU4OCwzMCBAQAogICAgICAgICAgICAgbWVtY3B5KHAsIGNoYXJzX3RvX2luc2VydCwgaW5zZXJ0X2NvdW50KTsKICAgICAgICAgfQogICAgIH0KLX0KLQotLyogQWRkIHRoZSBsb2NhbGUgc3BlY2lmaWMgZ3JvdXBpbmcgY2hhcmFjdGVycyB0byBidWZmZXIuICBOb3RlCi0gICB0aGF0IGFueSBkZWNpbWFsIHBvaW50IChpZiBpdCdzIHByZXNlbnQpIGluIGJ1ZmZlciBpcyBhbHJlYWR5Ci0gICBsb2NhbGUtc3BlY2lmaWMuICBSZXR1cm4gMCBvbiBlcnJvciwgZWxzZSAxLiAqLwotUHlfTE9DQUxfSU5MSU5FKGludCkKLWFkZF90aG91c2FuZHNfZ3JvdXBpbmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmX3NpemUpCi17Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzdHJsZW4oYnVmZmVyKTsKLSAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhID0gbG9jYWxlY29udigpOwotICAgIGNvbnN0IGNoYXIgKmRlY2ltYWxfcG9pbnQgPSBsb2NhbGVfZGF0YS0+ZGVjaW1hbF9wb2ludDsKLQotICAgIC8qIEZpbmQgdGhlIGRlY2ltYWwgcG9pbnQsIGlmIGFueS4gIFdlJ3JlIG9ubHkgY29uY2VybmVkCi0gICAgICAgYWJvdXQgdGhlIGNoYXJhY3RlcnMgdG8gdGhlIGxlZnQgb2YgdGhlIGRlY2ltYWwgd2hlbgotICAgICAgIGFkZGluZyBncm91cGluZy4gKi8KLSAgICBjaGFyICpwID0gc3Ryc3RyKGJ1ZmZlciwgZGVjaW1hbF9wb2ludCk7Ci0gICAgaWYgKCFwKSB7Ci0gICAgICAgIC8qIE5vIGRlY2ltYWwsIHVzZSB0aGUgZW50aXJlIHN0cmluZy4gKi8KLQotICAgICAgICAvKiBJZiBhbnkgZXhwb25lbnQsIGFkanVzdCBwLiAqLwotICAgICAgICBwID0gc3RycGJyayhidWZmZXIsICJlRSIpOwotICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICAvKiBObyBleHBvbmVudCBhbmQgbm8gZGVjaW1hbC4gIFVzZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICBzdHJpbmcuICovCi0gICAgICAgICAgICBwID0gYnVmZmVyICsgbGVuOworICAgIGlmIChjb252ZXJ0X3RvX2V4cCkgeworICAgICAgICBpbnQgd3JpdHRlbjsKKyAgICAgICAgc2l6ZV90IGJ1Zl9hdmFpbDsKKyAgICAgICAgcCA9IGRpZ2l0c19zdGFydDsKKyAgICAgICAgLyogaW5zZXJ0IGRlY2ltYWwgcG9pbnQgKi8KKyAgICAgICAgYXNzZXJ0KGRpZ2l0X2NvdW50ID49IDEpOworICAgICAgICBtZW1tb3ZlKHArMiwgcCsxLCBkaWdpdF9jb3VudCk7IC8qIHNhZmUsIGJ1dCBvdmVyd3JpdGVzIG51bCAqLworICAgICAgICBwWzFdID0gJy4nOworICAgICAgICBwICs9IGRpZ2l0X2NvdW50KzE7CisgICAgICAgIGFzc2VydChwIDw9IGJ1Zl9zaXplK2J1ZmZlcik7CisgICAgICAgIGJ1Zl9hdmFpbCA9IGJ1Zl9zaXplK2J1ZmZlci1wOworICAgICAgICBpZiAoYnVmX2F2YWlsID09IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogQWRkIGV4cG9uZW50LiAgSXQncyBva2F5IHRvIHVzZSBsb3dlciBjYXNlICdlJzogd2Ugb25seQorICAgICAgICAgICBhcnJpdmUgaGVyZSBhcyBhIHJlc3VsdCBvZiB1c2luZyB0aGUgZW1wdHkgZm9ybWF0IGNvZGUgb3IKKyAgICAgICAgICAgcmVwci9zdHIgYnVpbHRpbnMgYW5kIHRob3NlIG5ldmVyIHdhbnQgYW4gdXBwZXIgY2FzZSAnRScgKi8KKyAgICAgICAgd3JpdHRlbiA9IFB5T1Nfc25wcmludGYocCwgYnVmX2F2YWlsLCAiZSUrLjAyZCIsIGRpZ2l0X2NvdW50LTEpOworICAgICAgICBpZiAoISgwIDw9IHdyaXR0ZW4gJiYKKyAgICAgICAgICAgICAgd3JpdHRlbiA8IFB5X1NBRkVfRE9XTkNBU1QoYnVmX2F2YWlsLCBzaXplX3QsIGludCkpKQorICAgICAgICAgICAgLyogb3V0cHV0IHRydW5jYXRlZCwgb3Igc29tZXRoaW5nIGVsc2UgYmFkIGhhcHBlbmVkICovCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmVtb3ZlX3RyYWlsaW5nX3plcm9zKGJ1ZmZlcik7CiAgICAgfQotICAgIC8qIEF0IHRoaXMgcG9pbnQsIHAgcG9pbnRzIGp1c3QgcGFzdCB0aGUgcmlnaHQtbW9zdCBjaGFyYWN0ZXIgd2UKLSAgICAgICB3YW50IHRvIGZvcm1hdC4gIFdlIG5lZWQgdG8gYWRkIHRoZSBncm91cGluZyBzdHJpbmcgZm9yIHRoZQotICAgICAgIGNoYXJhY3RlcnMgYmV0d2VlbiBidWZmZXIgYW5kIHAuICovCi0gICAgcmV0dXJuIF9QeVN0cmluZ19JbnNlcnRUaG91c2FuZHNHcm91cGluZyhidWZmZXIsIGxlbiwgcC1idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfc2l6ZSwgTlVMTCwgMSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyogc2VlIEZPUk1BVEJVRkxFTiBpbiB1bmljb2Rlb2JqZWN0LmMgKi8KQEAgLTM4NiwyOCArNjI4LDI0IEBACiAgKiBDb252ZXJ0cyBhICNnZG91YmxlIHRvIGEgc3RyaW5nLCB1c2luZyB0aGUgJy4nIGFzCiAgKiBkZWNpbWFsIHBvaW50LiBUbyBmb3JtYXQgdGhlIG51bWJlciB5b3UgcGFzcyBpbgogICogYSBwcmludGYoKS1zdHlsZSBmb3JtYXQgc3RyaW5nLiBBbGxvd2VkIGNvbnZlcnNpb24KLSAqIHNwZWNpZmllcnMgYXJlICdlJywgJ0UnLCAnZicsICdGJywgJ2cnLCAnRycsIGFuZCAnbicuCisgKiBzcGVjaWZpZXJzIGFyZSAnZScsICdFJywgJ2YnLCAnRicsICdnJywgJ0cnLCBhbmQgJ1onLgogICoKLSAqICduJyBpcyB0aGUgc2FtZSBhcyAnZycsIGV4Y2VwdCBpdCB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZS4KICAqICdaJyBpcyB0aGUgc2FtZSBhcyAnZycsIGV4Y2VwdCBpdCBhbHdheXMgaGFzIGEgZGVjaW1hbCBhbmQKICAqICAgICBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhlIGRlY2ltYWwuCiAgKgogICogUmV0dXJuIHZhbHVlOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIHdpdGggdGhlIGNvbnZlcnRlZCBzdHJpbmcuCisgKiBPbiBmYWlsdXJlIHJldHVybnMgTlVMTCBidXQgZG9lcyBub3Qgc2V0IGFueSBQeXRob24gZXhjZXB0aW9uLgogICoqLwogY2hhciAqCi1QeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAgICAgICAqYnVmZmVyLAorX1B5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICAgICAgICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgYnVmX3NpemUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgIGRvdWJsZSAgICAgIGQpCisgICAgICAgICAgICAgICAgICAgZG91YmxlICAgICAgZCwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBwcmVjaXNpb24pCiB7CiAgICAgY2hhciBmb3JtYXRfY2hhcjsKICAgICBzaXplX3QgZm9ybWF0X2xlbiA9IHN0cmxlbihmb3JtYXQpOwogCi0gICAgLyogRm9yIHR5cGUgJ24nLCB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBiZWNhdXNlCi0gICAgICAgd2UncmUgZ29pbmcgdG8gbW9kaWZ5ICduJyAtPiAnZycsIGFuZCBmb3JtYXQgaXMgY29uc3QgY2hhciosIHNvIHdlCi0gICAgICAgY2FuJ3QgbW9kaWZ5IGl0IGRpcmVjdGx5LiAgRkxPQVRfRk9STUFUQlVGTEVOIHNob3VsZCBiZSBsb25nZXIgdGhhbgotICAgICAgIHdlIGV2ZXIgbmVlZCB0aGlzIHRvIGJlLiAgVGhlcmUncyBhbiB1cGNvbWluZyBjaGVjayB0byBlbnN1cmUgaXQncwotICAgICAgIGJpZyBlbm91Z2guICovCiAgICAgLyogSXNzdWUgMjI2NDogY29kZSAnWicgcmVxdWlyZXMgY29weWluZyB0aGUgZm9ybWF0LiAgJ1onIGlzICdnJywgYnV0CiAgICAgICAgYWxzbyB3aXRoIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgcGFzdCB0aGUgZGVjaW1hbC4gKi8KICAgICBjaGFyIHRtcF9mb3JtYXRbRkxPQVRfRk9STUFUQlVGTEVOXTsKQEAgLTQzMywxMiArNjcxLDEyIEBACiAgICAgaWYgKCEoZm9ybWF0X2NoYXIgPT0gJ2UnIHx8IGZvcm1hdF9jaGFyID09ICdFJyB8fAogICAgICAgICAgIGZvcm1hdF9jaGFyID09ICdmJyB8fCBmb3JtYXRfY2hhciA9PSAnRicgfHwKICAgICAgICAgICBmb3JtYXRfY2hhciA9PSAnZycgfHwgZm9ybWF0X2NoYXIgPT0gJ0cnIHx8Ci0gICAgICAgICAgZm9ybWF0X2NoYXIgPT0gJ24nIHx8IGZvcm1hdF9jaGFyID09ICdaJykpCisgICAgICAgICAgZm9ybWF0X2NoYXIgPT0gJ1onKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBNYXAgJ24nIG9yICdaJyBmb3JtYXRfY2hhciB0byAnZycsIGJ5IGNvcHlpbmcgdGhlIGZvcm1hdCBzdHJpbmcgYW5kCisgICAgLyogTWFwICdaJyBmb3JtYXRfY2hhciB0byAnZycsIGJ5IGNvcHlpbmcgdGhlIGZvcm1hdCBzdHJpbmcgYW5kCiAgICAgICAgcmVwbGFjaW5nIHRoZSBmaW5hbCBjaGFyIHdpdGggYSAnZycgKi8KLSAgICBpZiAoZm9ybWF0X2NoYXIgPT0gJ24nIHx8IGZvcm1hdF9jaGFyID09ICdaJykgeworICAgIGlmIChmb3JtYXRfY2hhciA9PSAnWicpIHsKICAgICAgICAgaWYgKGZvcm1hdF9sZW4gKyAxID49IHNpemVvZih0bXBfZm9ybWF0KSkgewogICAgICAgICAgICAgLyogVGhlIGZvcm1hdCB3b24ndCBmaXQgaW4gb3VyIGNvcHkuICBFcnJvciBvdXQuICBJbgogICAgICAgICAgICAgICAgcHJhY3RpY2UsIHRoaXMgd2lsbCBuZXZlciBoYXBwZW4gYW5kIHdpbGwgYmUKQEAgLTQ1NywxMSArNjk1LDggQEAKICAgICAvKiBEbyB2YXJpb3VzIGZpeHVwcyBvbiB0aGUgcmV0dXJuIHN0cmluZyAqLwogCiAgICAgLyogR2V0IHRoZSBjdXJyZW50IGxvY2FsZSwgYW5kIGZpbmQgdGhlIGRlY2ltYWwgcG9pbnQgc3RyaW5nLgotICAgICAgIENvbnZlcnQgdGhhdCBzdHJpbmcgYmFjayB0byBhIGRvdC4gIERvIG5vdCBkbyB0aGlzIGlmIHVzaW5nIHRoZQotICAgICAgICduJyAobnVtYmVyKSBmb3JtYXQgY29kZSwgc2luY2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBsb2NhbGl6ZWQKLSAgICAgICBkZWNpbWFsIHBvaW50IGluIHRoYXQgY2FzZS4gKi8KLSAgICBpZiAoZm9ybWF0X2NoYXIgIT0gJ24nKQotICAgICAgICBjaGFuZ2VfZGVjaW1hbF9mcm9tX2xvY2FsZV90b19kb3QoYnVmZmVyKTsKKyAgICAgICBDb252ZXJ0IHRoYXQgc3RyaW5nIGJhY2sgdG8gYSBkb3QuICovCisgICAgY2hhbmdlX2RlY2ltYWxfZnJvbV9sb2NhbGVfdG9fZG90KGJ1ZmZlcik7CiAKICAgICAvKiBJZiBhbiBleHBvbmVudCBleGlzdHMsIGVuc3VyZSB0aGF0IHRoZSBleHBvbmVudCBpcyBhdCBsZWFzdAogICAgICAgIE1JTl9FWFBPTkVOVF9ESUdJVFMgZGlnaXRzLCBwcm92aWRpbmcgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKQEAgLTQ3MSwyMCArNzA2LDU0NCBAQAogICAgIGVuc3VyZV9taW5pbXVtX2V4cG9uZW50X2xlbmd0aChidWZmZXIsIGJ1Zl9zaXplKTsKIAogICAgIC8qIElmIGZvcm1hdF9jaGFyIGlzICdaJywgbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3RlcgotICAgICAgIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IChhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYSBkZWNpbWFsIHBvaW50KS4gKi8KKyAgICAgICBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCAoYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZGVjaW1hbCBwb2ludCk7CisgICAgICAgYWxzbyBzd2l0Y2ggdG8gZXhwb25lbnRpYWwgbm90YXRpb24gaW4gc29tZSBlZGdlIGNhc2VzIHdoZXJlIHRoZQorICAgICAgIGV4dHJhIGNoYXJhY3RlciB3b3VsZCBwcm9kdWNlIG1vcmUgc2lnbmlmaWNhbnQgZGlnaXRzIHRoYXQgd2UKKyAgICAgICByZWFsbHkgd2FudC4gKi8KICAgICBpZiAoZm9ybWF0X2NoYXIgPT0gJ1onKQotICAgICAgICBlbnN1cmVfZGVjaW1hbF9wb2ludChidWZmZXIsIGJ1Zl9zaXplKTsKLQotICAgIC8qIElmIGZvcm1hdF9jaGFyIGlzICduJywgYWRkIHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcuICovCi0gICAgaWYgKGZvcm1hdF9jaGFyID09ICduJykKLSAgICAgICAgaWYgKCFhZGRfdGhvdXNhbmRzX2dyb3VwaW5nKGJ1ZmZlciwgYnVmX3NpemUpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJ1ZmZlciA9IGVuc3VyZV9kZWNpbWFsX3BvaW50KGJ1ZmZlciwgYnVmX3NpemUsIHByZWNpc2lvbik7CiAKICAgICByZXR1cm4gYnVmZmVyOwogfQogCi1kb3VibGUKLVB5T1NfYXNjaWlfYXRvZihjb25zdCBjaGFyICpucHRyKQorY2hhciAqCitQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAgICAgICAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgIGJ1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgICAgICBkKQogewotICAgIHJldHVybiBQeU9TX2FzY2lpX3N0cnRvZChucHRyLCBOVUxMKTsKKyAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICJQeU9TX2FzY2lpX2Zvcm1hdGQgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBQeU9TX2RvdWJsZV90b19zdHJpbmcgaW5zdGVhZCIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5T1NfYXNjaWlfZm9ybWF0ZChidWZmZXIsIGJ1Zl9zaXplLCBmb3JtYXQsIGQsIC0xKTsKIH0KKworI2lmZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKworLyogVGhlIGZhbGxiYWNrIGNvZGUgdG8gdXNlIGlmIF9QeV9kZ19kdG9hIGlzIG5vdCBhdmFpbGFibGUuICovCisKK1B5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2RvdWJsZV90b19zdHJpbmcoZG91YmxlIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBmb3JtYXRfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnR5cGUpCit7CisgICAgY2hhciBmb3JtYXRbMzJdOworICAgIFB5X3NzaXplX3QgYnVmc2l6ZTsKKyAgICBjaGFyICpidWY7CisgICAgaW50IHQsIGV4cDsKKyAgICBpbnQgdXBwZXIgPSAwOworCisgICAgLyogVmFsaWRhdGUgZm9ybWF0X2NvZGUsIGFuZCBtYXAgdXBwZXIgYW5kIGxvd2VyIGNhc2UgKi8KKyAgICBzd2l0Y2ggKGZvcm1hdF9jb2RlKSB7CisgICAgY2FzZSAnZSc6ICAgICAgICAgIC8qIGV4cG9uZW50ICovCisgICAgY2FzZSAnZic6ICAgICAgICAgIC8qIGZpeGVkICovCisgICAgY2FzZSAnZyc6ICAgICAgICAgIC8qIGdlbmVyYWwgKi8KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnRSc6CisgICAgICAgIHVwcGVyID0gMTsKKyAgICAgICAgZm9ybWF0X2NvZGUgPSAnZSc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0YnOgorICAgICAgICB1cHBlciA9IDE7CisgICAgICAgIGZvcm1hdF9jb2RlID0gJ2YnOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdHJzoKKyAgICAgICAgdXBwZXIgPSAxOworICAgICAgICBmb3JtYXRfY29kZSA9ICdnJzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6ICAgICAgICAgIC8qIHJlcHIgZm9ybWF0ICovCisgICAgICAgIC8qIFN1cHBsaWVkIHByZWNpc2lvbiBpcyB1bnVzZWQsIG11c3QgYmUgMC4gKi8KKyAgICAgICAgaWYgKHByZWNpc2lvbiAhPSAwKSB7CisgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIFRoZSByZXByKCkgcHJlY2lzaW9uICgxNyBzaWduaWZpY2FudCBkZWNpbWFsIGRpZ2l0cykgaXMgdGhlCisgICAgICAgICAgIG1pbmltYWwgbnVtYmVyIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGVub3VnaCBwcmVjaXNpb24KKyAgICAgICAgICAgc28gdGhhdCBpZiB0aGUgbnVtYmVyIGlzIHJlYWQgYmFjayBpbiB0aGUgZXhhY3Qgc2FtZSBiaW5hcnkKKyAgICAgICAgICAgdmFsdWUgaXMgcmVjcmVhdGVkLiAgVGhpcyBpcyB0cnVlIGZvciBJRUVFIGZsb2F0aW5nIHBvaW50CisgICAgICAgICAgIGJ5IGRlc2lnbiwgYW5kIGFsc28gaGFwcGVucyB0byB3b3JrIGZvciBhbGwgb3RoZXIgbW9kZXJuCisgICAgICAgICAgIGhhcmR3YXJlLiAqLworICAgICAgICBwcmVjaXNpb24gPSAxNzsKKyAgICAgICAgZm9ybWF0X2NvZGUgPSAnZyc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBIZXJlJ3MgYSBxdWljay1hbmQtZGlydHkgY2FsY3VsYXRpb24gdG8gZmlndXJlIG91dCBob3cgYmlnIGEgYnVmZmVyCisgICAgICAgd2UgbmVlZC4gIEluIGdlbmVyYWwsIGZvciBhIGZpbml0ZSBmbG9hdCB3ZSBuZWVkOgorCisgICAgICAgICAxIGJ5dGUgZm9yIGVhY2ggZGlnaXQgb2YgdGhlIGRlY2ltYWwgc2lnbmlmaWNhbmQsIGFuZAorCisgICAgICAgICAxIGZvciBhIHBvc3NpYmxlIHNpZ24KKyAgICAgICAgIDEgZm9yIGEgcG9zc2libGUgZGVjaW1hbCBwb2ludAorICAgICAgICAgMiBmb3IgYSBwb3NzaWJsZSBbZUVdWystXQorICAgICAgICAgMSBmb3IgZWFjaCBkaWdpdCBvZiB0aGUgZXhwb25lbnQ7ICBpZiB3ZSBhbGxvdyAxOSBkaWdpdHMKKyAgICAgICAgICAgdG90YWwgdGhlbiB3ZSdyZSBzYWZlIHVwIHRvIGV4cG9uZW50cyBvZiAyKio2My4KKyAgICAgICAgIDEgZm9yIHRoZSB0cmFpbGluZyBudWwgYnl0ZQorCisgICAgICAgVGhpcyBnaXZlcyBhIHRvdGFsIG9mIDI0ICsgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIHNpZ25pZmljYW5kLAorICAgICAgIGFuZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgc2lnbmlmaWNhbmQgaXM6CisKKyAgICAgICAgIGZvciAnZycgZm9ybWF0OiBhdCBtb3N0IHByZWNpc2lvbiwgZXhjZXB0IHBvc3NpYmx5CisgICAgICAgICAgIHdoZW4gcHJlY2lzaW9uID09IDAsIHdoZW4gaXQncyAxLgorICAgICAgICAgZm9yICdlJyBmb3JtYXQ6IHByZWNpc2lvbisxCisgICAgICAgICBmb3IgJ2YnIGZvcm1hdDogcHJlY2lzaW9uIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQsIGF0IGxlYXN0IDEKKyAgICAgICAgICAgYmVmb3JlLiAgVG8gZmlndXJlIG91dCBob3cgbWFueSBkaWdpdHMgYXBwZWFyIGJlZm9yZSB0aGUgcG9pbnQKKyAgICAgICAgICAgd2UgaGF2ZSB0byBleGFtaW5lIHRoZSBzaXplIG9mIHRoZSBudW1iZXIuICBJZiBmYWJzKHZhbCkgPCAxLjAKKyAgICAgICAgICAgdGhlbiB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGRpZ2l0IGJlZm9yZSB0aGUgcG9pbnQuICBJZgorICAgICAgICAgICBmYWJzKHZhbCkgPj0gMS4wLCB0aGVuIHRoZXJlIGFyZSBhdCBtb3N0CisKKyAgICAgICAgIDErZmxvb3IobG9nMTAoY2VpbGluZyhmYWJzKHZhbCkpKSkKKworICAgICAgICAgICBkaWdpdHMgYmVmb3JlIHRoZSBwb2ludCAod2hlcmUgdGhlICdjZWlsaW5nJyBhbGxvd3MgZm9yIHRoZQorICAgICAgICAgICBwb3NzaWJpbGl0eSB0aGF0IHRoZSByb3VuZGluZyByb3VuZHMgdGhlIGludGVnZXIgcGFydCBvZiB2YWwKKyAgICAgICAgICAgdXApLiAgQSBzYWZlIHVwcGVyIGJvdW5kIGZvciB0aGUgYWJvdmUgcXVhbnRpdHkgaXMKKyAgICAgICAgICAgMStmbG9vcihleHAvMyksIHdoZXJlIGV4cCBpcyB0aGUgdW5pcXVlIGludGVnZXIgc3VjaCB0aGF0IDAuNQorICAgICAgICAgICA8PSBmYWJzKHZhbCkvMioqZXhwIDwgMS4wLiAgVGhpcyBleHAgY2FuIGJlIG9idGFpbmVkIGZyb20KKyAgICAgICAgICAgZnJleHAuCisKKyAgICAgICBTbyB3ZSBhbGxvdyByb29tIGZvciBwcmVjaXNpb24rMSBkaWdpdHMgZm9yIGFsbCBmb3JtYXRzLCBwbHVzIGFuCisgICAgICAgZXh0cmEgZmxvb3IoZXhwLzMpIGRpZ2l0cyBmb3IgJ2YnIGZvcm1hdC4KKworICAgICovCisKKyAgICBpZiAoUHlfSVNfTkFOKHZhbCkgfHwgUHlfSVNfSU5GSU5JVFkodmFsKSkKKyAgICAgICAgLyogMyBmb3IgJ2luZicvJ25hbicsIDEgZm9yIHNpZ24sIDEgZm9yICdcMCcgKi8KKyAgICAgICAgYnVmc2l6ZSA9IDU7CisgICAgZWxzZSB7CisgICAgICAgIGJ1ZnNpemUgPSAyNSArIHByZWNpc2lvbjsKKyAgICAgICAgaWYgKGZvcm1hdF9jb2RlID09ICdmJyAmJiBmYWJzKHZhbCkgPj0gMS4wKSB7CisgICAgICAgICAgICBmcmV4cCh2YWwsICZleHApOworICAgICAgICAgICAgYnVmc2l6ZSArPSBleHAvMzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhidWZzaXplKTsKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogSGFuZGxlIG5hbiBhbmQgaW5mLiAqLworICAgIGlmIChQeV9JU19OQU4odmFsKSkgeworICAgICAgICBzdHJjcHkoYnVmLCAibmFuIik7CisgICAgICAgIHQgPSBQeV9EVFNUX05BTjsKKyAgICB9IGVsc2UgaWYgKFB5X0lTX0lORklOSVRZKHZhbCkpIHsKKyAgICAgICAgaWYgKGNvcHlzaWduKDEuLCB2YWwpID09IDEuKQorICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgImluZiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJjcHkoYnVmLCAiLWluZiIpOworICAgICAgICB0ID0gUHlfRFRTVF9JTkZJTklURTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ID0gUHlfRFRTVF9GSU5JVEU7CisgICAgICAgIGlmIChmbGFncyAmIFB5X0RUU0ZfQUREX0RPVF8wKQorICAgICAgICAgICAgZm9ybWF0X2NvZGUgPSAnWic7CisKKyAgICAgICAgUHlPU19zbnByaW50Zihmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAiJSUlcy4laSVjIiwKKyAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQeV9EVFNGX0FMVCA/ICIjIiA6ICIiKSwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9jb2RlKTsKKyAgICAgICAgX1B5T1NfYXNjaWlfZm9ybWF0ZChidWYsIGJ1ZnNpemUsIGZvcm1hdCwgdmFsLCBwcmVjaXNpb24pOworICAgIH0KKworICAgIC8qIEFkZCBzaWduIHdoZW4gcmVxdWVzdGVkLiAgSXQncyBjb252ZW5pZW50IChlc3AuIHdoZW4gZm9ybWF0dGluZworICAgICBjb21wbGV4IG51bWJlcnMpIHRvIGluY2x1ZGUgYSBzaWduIGV2ZW4gZm9yIGluZiBhbmQgbmFuLiAqLworICAgIGlmIChmbGFncyAmIFB5X0RUU0ZfU0lHTiAmJiBidWZbMF0gIT0gJy0nKSB7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgLyogdGhlIGJ1ZnNpemUgY2FsY3VsYXRpb25zIGFib3ZlIHNob3VsZCBlbnN1cmUgdGhhdCB3ZSd2ZSBnb3QKKyAgICAgICAgICAgc3BhY2UgdG8gYWRkIGEgc2lnbiAqLworICAgICAgICBhc3NlcnQoKHNpemVfdClidWZzaXplID49IGxlbisyKTsKKyAgICAgICAgbWVtbW92ZShidWYrMSwgYnVmLCBsZW4rMSk7CisgICAgICAgIGJ1ZlswXSA9ICcrJzsKKyAgICB9CisgICAgaWYgKHVwcGVyKSB7CisgICAgICAgIC8qIENvbnZlcnQgdG8gdXBwZXIgY2FzZS4gKi8KKyAgICAgICAgY2hhciAqcDE7CisgICAgICAgIGZvciAocDEgPSBidWY7ICpwMTsgcDErKykKKyAgICAgICAgICAgICpwMSA9IFB5X1RPVVBQRVIoKnAxKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSkKKyAgICAgICAgKnR5cGUgPSB0OworICAgIHJldHVybiBidWY7Cit9CisKKyNlbHNlCisKKy8qIF9QeV9kZ19kdG9hIGlzIGF2YWlsYWJsZS4gKi8KKworLyogSSdtIHVzaW5nIGEgbG9va3VwIHRhYmxlIGhlcmUgc28gdGhhdCBJIGRvbid0IGhhdmUgdG8gaW52ZW50IGEgbm9uLWxvY2FsZQorICAgc3BlY2lmaWMgd2F5IHRvIGNvbnZlcnQgdG8gdXBwZXJjYXNlICovCisjZGVmaW5lIE9GU19JTkYgMAorI2RlZmluZSBPRlNfTkFOIDEKKyNkZWZpbmUgT0ZTX0UgMgorCisvKiBUaGUgbGVuZ3RocyBvZiB0aGVzZSBhcmUga25vd24gdG8gdGhlIGNvZGUgYmVsb3csIHNvIGRvbid0IGNoYW5nZSB0aGVtICovCitzdGF0aWMgY2hhciAqbGNfZmxvYXRfc3RyaW5nc1tdID0geworICAgICJpbmYiLAorICAgICJuYW4iLAorICAgICJlIiwKK307CitzdGF0aWMgY2hhciAqdWNfZmxvYXRfc3RyaW5nc1tdID0geworICAgICJJTkYiLAorICAgICJOQU4iLAorICAgICJFIiwKK307CisKKworLyogQ29udmVydCBhIGRvdWJsZSBkIHRvIGEgc3RyaW5nLCBhbmQgcmV0dXJuIGEgUHlNZW1fTWFsbG9jJ2QgYmxvY2sgb2YKKyAgIG1lbW9yeSBjb250YWluIHRoZSByZXN1bHRpbmcgc3RyaW5nLgorCisgICBBcmd1bWVudHM6CisgICAgIGQgaXMgdGhlIGRvdWJsZSB0byBiZSBjb252ZXJ0ZWQKKyAgICAgZm9ybWF0X2NvZGUgaXMgb25lIG9mICdlJywgJ2YnLCAnZycsICdyJy4gICdlJywgJ2YnIGFuZCAnZycKKyAgICAgICBjb3JyZXNwb25kIHRvICclZScsICclZicgYW5kICclZyc7ICAncicgY29ycmVzcG9uZHMgdG8gcmVwci4KKyAgICAgbW9kZSBpcyBvbmUgb2YgJzAnLCAnMicgb3IgJzMnLCBhbmQgaXMgY29tcGxldGVseSBkZXRlcm1pbmVkIGJ5CisgICAgICAgZm9ybWF0X2NvZGU6ICdlJyBhbmQgJ2cnIHVzZSBtb2RlIDI7ICdmJyBtb2RlIDMsICdyJyBtb2RlIDAuCisgICAgIHByZWNpc2lvbiBpcyB0aGUgZGVzaXJlZCBwcmVjaXNpb24KKyAgICAgYWx3YXlzX2FkZF9zaWduIGlzIG5vbnplcm8gaWYgYSAnKycgc2lnbiBzaG91bGQgYmUgaW5jbHVkZWQgZm9yIHBvc2l0aXZlCisgICAgICAgbnVtYmVycworICAgICBhZGRfZG90XzBfaWZfaW50ZWdlciBpcyBub256ZXJvIGlmIGludGVnZXJzIGluIG5vbi1leHBvbmVudGlhbCBmb3JtCisgICAgICAgc2hvdWxkIGhhdmUgIi4wIiBhZGRlZC4gIE9ubHkgYXBwbGllcyB0byBmb3JtYXQgY29kZXMgJ3InIGFuZCAnZycuCisgICAgIHVzZV9hbHRfZm9ybWF0dGluZyBpcyBub256ZXJvIGlmIGFsdGVybmF0aXZlIGZvcm1hdHRpbmcgc2hvdWxkIGJlCisgICAgICAgdXNlZC4gIE9ubHkgYXBwbGllcyB0byBmb3JtYXQgY29kZXMgJ2UnLCAnZicgYW5kICdnJy4gIEZvciBjb2RlICdnJywKKyAgICAgICBhdCBtb3N0IG9uZSBvZiB1c2VfYWx0X2Zvcm1hdHRpbmcgYW5kIGFkZF9kb3RfMF9pZl9pbnRlZ2VyIHNob3VsZAorICAgICAgIGJlIG5vbnplcm8uCisgICAgIHR5cGUsIGlmIG5vbi1OVUxMLCB3aWxsIGJlIHNldCB0byBvbmUgb2YgdGhlc2UgY29uc3RhbnRzIHRvIGlkZW50aWZ5CisgICAgICAgdGhlIHR5cGUgb2YgdGhlICdkJyBhcmd1bWVudDoKKyAgICAgUHlfRFRTVF9GSU5JVEUKKyAgICAgUHlfRFRTVF9JTkZJTklURQorICAgICBQeV9EVFNUX05BTgorCisgICBSZXR1cm5zIGEgUHlNZW1fTWFsbG9jJ2QgYmxvY2sgb2YgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHJlc3VsdGluZyBzdHJpbmcsCisgICAgb3IgTlVMTCBvbiBlcnJvci4gSWYgTlVMTCBpcyByZXR1cm5lZCwgdGhlIFB5dGhvbiBlcnJvciBoYXMgYmVlbiBzZXQuCisgKi8KKworc3RhdGljIGNoYXIgKgorZm9ybWF0X2Zsb2F0X3Nob3J0KGRvdWJsZSBkLCBjaGFyIGZvcm1hdF9jb2RlLAorICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBQeV9zc2l6ZV90IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgYWx3YXlzX2FkZF9zaWduLCBpbnQgYWRkX2RvdF8wX2lmX2ludGVnZXIsCisgICAgICAgICAgICAgICAgICAgaW50IHVzZV9hbHRfZm9ybWF0dGluZywgY2hhciAqKmZsb2F0X3N0cmluZ3MsIGludCAqdHlwZSkKK3sKKyAgICBjaGFyICpidWYgPSBOVUxMOworICAgIGNoYXIgKnAgPSBOVUxMOworICAgIFB5X3NzaXplX3QgYnVmc2l6ZSA9IDA7CisgICAgY2hhciAqZGlnaXRzLCAqZGlnaXRzX2VuZDsKKyAgICBpbnQgZGVjcHRfYXNfaW50LCBzaWduLCBleHBfbGVuLCBleHAgPSAwLCB1c2VfZXhwID0gMDsKKyAgICBQeV9zc2l6ZV90IGRlY3B0LCBkaWdpdHNfbGVuLCB2ZGlnaXRzX3N0YXJ0LCB2ZGlnaXRzX2VuZDsKKyAgICBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9IRUFERVI7CisKKyAgICAvKiBfUHlfZGdfZHRvYSByZXR1cm5zIGEgZGlnaXQgc3RyaW5nIChubyBkZWNpbWFsIHBvaW50IG9yIGV4cG9uZW50KS4KKyAgICAgICBNdXN0IGJlIG1hdGNoZWQgYnkgYSBjYWxsIHRvIF9QeV9kZ19mcmVlZHRvYS4gKi8KKyAgICBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9TVEFSVDsKKyAgICBkaWdpdHMgPSBfUHlfZGdfZHRvYShkLCBtb2RlLCBwcmVjaXNpb24sICZkZWNwdF9hc19pbnQsICZzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICZkaWdpdHNfZW5kKTsKKyAgICBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9FTkQ7CisKKyAgICBkZWNwdCA9IChQeV9zc2l6ZV90KWRlY3B0X2FzX2ludDsKKyAgICBpZiAoZGlnaXRzID09IE5VTEwpIHsKKyAgICAgICAgLyogVGhlIG9ubHkgZmFpbHVyZSBtb2RlIGlzIG5vIG1lbW9yeS4gKi8KKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBhc3NlcnQoZGlnaXRzX2VuZCAhPSBOVUxMICYmIGRpZ2l0c19lbmQgPj0gZGlnaXRzKTsKKyAgICBkaWdpdHNfbGVuID0gZGlnaXRzX2VuZCAtIGRpZ2l0czsKKworICAgIGlmIChkaWdpdHNfbGVuICYmICFQeV9JU0RJR0lUKGRpZ2l0c1swXSkpIHsKKyAgICAgICAgLyogSW5maW5pdGllcyBhbmQgbmFucyBoZXJlOyBhZGFwdCBHYXkncyBvdXRwdXQsCisgICAgICAgICAgIHNvIGNvbnZlcnQgSW5maW5pdHkgdG8gaW5mIGFuZCBOYU4gdG8gbmFuLCBhbmQKKyAgICAgICAgICAgaWdub3JlIHNpZ24gb2YgbmFuLiBUaGVuIHJldHVybi4gKi8KKworICAgICAgICAvKiBpZ25vcmUgdGhlIGFjdHVhbCBzaWduIG9mIGEgbmFuICovCisgICAgICAgIGlmIChkaWdpdHNbMF0gPT0gJ24nIHx8IGRpZ2l0c1swXSA9PSAnTicpCisgICAgICAgICAgICBzaWduID0gMDsKKworICAgICAgICAvKiBXZSBvbmx5IG5lZWQgNSBieXRlcyB0byBob2xkIHRoZSByZXN1bHQgIitpbmZcMCIgLiAqLworICAgICAgICBidWZzaXplID0gNTsgLyogVXNlZCBsYXRlciBpbiBhbiBhc3NlcnQuICovCisgICAgICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fTWFsbG9jKGJ1ZnNpemUpOworICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgcCA9IGJ1ZjsKKworICAgICAgICBpZiAoc2lnbiA9PSAxKSB7CisgICAgICAgICAgICAqcCsrID0gJy0nOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFsd2F5c19hZGRfc2lnbikgeworICAgICAgICAgICAgKnArKyA9ICcrJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlnaXRzWzBdID09ICdpJyB8fCBkaWdpdHNbMF0gPT0gJ0knKSB7CisgICAgICAgICAgICBzdHJuY3B5KHAsIGZsb2F0X3N0cmluZ3NbT0ZTX0lORl0sIDMpOworICAgICAgICAgICAgcCArPSAzOworCisgICAgICAgICAgICBpZiAodHlwZSkKKyAgICAgICAgICAgICAgICAqdHlwZSA9IFB5X0RUU1RfSU5GSU5JVEU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGlnaXRzWzBdID09ICduJyB8fCBkaWdpdHNbMF0gPT0gJ04nKSB7CisgICAgICAgICAgICBzdHJuY3B5KHAsIGZsb2F0X3N0cmluZ3NbT0ZTX05BTl0sIDMpOworICAgICAgICAgICAgcCArPSAzOworCisgICAgICAgICAgICBpZiAodHlwZSkKKyAgICAgICAgICAgICAgICAqdHlwZSA9IFB5X0RUU1RfTkFOOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogc2hvdWxkbid0IGdldCBoZXJlOiBHYXkncyBjb2RlIHNob3VsZCBhbHdheXMgcmV0dXJuCisgICAgICAgICAgICAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBhIGRpZ2l0LCBhbiAnSScsICBvciAnTicgKi8KKyAgICAgICAgICAgIHN0cm5jcHkocCwgIkVSUiIsIDMpOworICAgICAgICAgICAgcCArPSAzOworICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICAvKiBUaGUgcmVzdWx0IG11c3QgYmUgZmluaXRlIChub3QgaW5mIG9yIG5hbikuICovCisgICAgaWYgKHR5cGUpCisgICAgICAgICp0eXBlID0gUHlfRFRTVF9GSU5JVEU7CisKKworICAgIC8qIFdlIGdvdCBkaWdpdHMgYmFjaywgZm9ybWF0IHRoZW0uICBXZSBtYXkgbmVlZCB0byBwYWQgJ2RpZ2l0cycKKyAgICAgICBlaXRoZXIgb24gdGhlIGxlZnQgb3IgcmlnaHQgKG9yIGJvdGgpIHdpdGggZXh0cmEgemVyb3MsIHNvIGluCisgICAgICAgZ2VuZXJhbCB0aGUgcmVzdWx0aW5nIHN0cmluZyBoYXMgdGhlIGZvcm0KKworICAgICAgICAgWzxzaWduPl08emVyb3M+PGRpZ2l0cz48emVyb3M+WzxleHBvbmVudD5dCisKKyAgICAgICB3aGVyZSBlaXRoZXIgb2YgdGhlIDx6ZXJvcz4gcGllY2VzIGNvdWxkIGJlIGVtcHR5LCBhbmQgdGhlcmUncyBhCisgICAgICAgZGVjaW1hbCBwb2ludCB0aGF0IGNvdWxkIGFwcGVhciBlaXRoZXIgaW4gPGRpZ2l0cz4gb3IgaW4gdGhlCisgICAgICAgbGVhZGluZyBvciB0cmFpbGluZyA8emVyb3M+LgorCisgICAgICAgSW1hZ2luZSBhbiBpbmZpbml0ZSAndmlydHVhbCcgc3RyaW5nIHZkaWdpdHMsIGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgICAgc3RyaW5nICdkaWdpdHMnIChzdGFydGluZyBhdCBpbmRleCAwKSBwYWRkZWQgb24gYm90aCB0aGUgbGVmdCBhbmQKKyAgICAgICByaWdodCB3aXRoIGluZmluaXRlIHN0cmluZ3Mgb2YgemVyb3MuICBXZSB3YW50IHRvIG91dHB1dCBhIHNsaWNlCisKKyAgICAgICAgIHZkaWdpdHNbdmRpZ2l0c19zdGFydCA6IHZkaWdpdHNfZW5kXQorCisgICAgICAgb2YgdGhpcyB2aXJ0dWFsIHN0cmluZy4gIFRodXMgaWYgdmRpZ2l0c19zdGFydCA8IDAgdGhlbiB3ZSdsbCBlbmQKKyAgICAgICB1cCBwcm9kdWNpbmcgc29tZSBsZWFkaW5nIHplcm9zOyBpZiB2ZGlnaXRzX2VuZCA+IGRpZ2l0c19sZW4gdGhlcmUKKyAgICAgICB3aWxsIGJlIHRyYWlsaW5nIHplcm9zIGluIHRoZSBvdXRwdXQuICBUaGUgbmV4dCBzZWN0aW9uIG9mIGNvZGUKKyAgICAgICBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIGFuIGV4cG9uZW50IG9yIG5vdCwgZmlndXJlcyBvdXQgdGhlCisgICAgICAgcG9zaXRpb24gJ2RlY3B0JyBvZiB0aGUgZGVjaW1hbCBwb2ludCwgYW5kIGNvbXB1dGVzICd2ZGlnaXRzX3N0YXJ0JworICAgICAgIGFuZCAndmRpZ2l0c19lbmQnLiAqLworICAgIHZkaWdpdHNfZW5kID0gZGlnaXRzX2xlbjsKKyAgICBzd2l0Y2ggKGZvcm1hdF9jb2RlKSB7CisgICAgY2FzZSAnZSc6CisgICAgICAgIHVzZV9leHAgPSAxOworICAgICAgICB2ZGlnaXRzX2VuZCA9IHByZWNpc2lvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnZic6CisgICAgICAgIHZkaWdpdHNfZW5kID0gZGVjcHQgKyBwcmVjaXNpb247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2cnOgorICAgICAgICBpZiAoZGVjcHQgPD0gLTQgfHwgZGVjcHQgPgorICAgICAgICAgICAgKGFkZF9kb3RfMF9pZl9pbnRlZ2VyID8gcHJlY2lzaW9uLTEgOiBwcmVjaXNpb24pKQorICAgICAgICAgICAgdXNlX2V4cCA9IDE7CisgICAgICAgIGlmICh1c2VfYWx0X2Zvcm1hdHRpbmcpCisgICAgICAgICAgICB2ZGlnaXRzX2VuZCA9IHByZWNpc2lvbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAncic6CisgICAgICAgIC8qIGNvbnZlcnQgdG8gZXhwb25lbnRpYWwgZm9ybWF0IGF0IDFlMTYuICBXZSB1c2VkIHRvIGNvbnZlcnQKKyAgICAgICAgICAgYXQgMWUxNywgYnV0IHRoYXQgZ2l2ZXMgb2RkLWxvb2tpbmcgcmVzdWx0cyBmb3Igc29tZSB2YWx1ZXMKKyAgICAgICAgICAgd2hlbiBhIDE2LWRpZ2l0ICdzaG9ydGVzdCcgcmVwciBpcyBwYWRkZWQgd2l0aCBib2d1cyB6ZXJvcy4KKyAgICAgICAgICAgRm9yIGV4YW1wbGUsIHJlcHIoMmUxNis4KSB3b3VsZCBnaXZlIDIwMDAwMDAwMDAwMDAwMDEwLjA7CisgICAgICAgICAgIHRoZSB0cnVlIHZhbHVlIGlzIDIwMDAwMDAwMDAwMDAwMDA4LjAuICovCisgICAgICAgIGlmIChkZWNwdCA8PSAtNCB8fCBkZWNwdCA+IDE2KQorICAgICAgICAgICAgdXNlX2V4cCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgLyogaWYgdXNpbmcgYW4gZXhwb25lbnQsIHJlc2V0IGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gdG8gMSBhbmQgYWRqdXN0CisgICAgICAgZXhwb25lbnQgYWNjb3JkaW5nbHkuKi8KKyAgICBpZiAodXNlX2V4cCkgeworICAgICAgICBleHAgPSBkZWNwdCAtIDE7CisgICAgICAgIGRlY3B0ID0gMTsKKyAgICB9CisgICAgLyogZW5zdXJlIHZkaWdpdHNfc3RhcnQgPCBkZWNwdCA8PSB2ZGlnaXRzX2VuZCwgb3IgdmRpZ2l0c19zdGFydCA8CisgICAgICAgZGVjcHQgPCB2ZGlnaXRzX2VuZCBpZiBhZGRfZG90XzBfaWZfaW50ZWdlciBhbmQgbm8gZXhwb25lbnQgKi8KKyAgICB2ZGlnaXRzX3N0YXJ0ID0gZGVjcHQgPD0gMCA/IGRlY3B0LTEgOiAwOworICAgIGlmICghdXNlX2V4cCAmJiBhZGRfZG90XzBfaWZfaW50ZWdlcikKKyAgICAgICAgdmRpZ2l0c19lbmQgPSB2ZGlnaXRzX2VuZCA+IGRlY3B0ID8gdmRpZ2l0c19lbmQgOiBkZWNwdCArIDE7CisgICAgZWxzZQorICAgICAgICB2ZGlnaXRzX2VuZCA9IHZkaWdpdHNfZW5kID4gZGVjcHQgPyB2ZGlnaXRzX2VuZCA6IGRlY3B0OworCisgICAgLyogZG91YmxlIGNoZWNrIGluZXF1YWxpdGllcyAqLworICAgIGFzc2VydCh2ZGlnaXRzX3N0YXJ0IDw9IDAgJiYKKyAgICAgICAgICAgMCA8PSBkaWdpdHNfbGVuICYmCisgICAgICAgICAgIGRpZ2l0c19sZW4gPD0gdmRpZ2l0c19lbmQpOworICAgIC8qIGRlY2ltYWwgcG9pbnQgc2hvdWxkIGJlIGluICh2ZGlnaXRzX3N0YXJ0LCB2ZGlnaXRzX2VuZF0gKi8KKyAgICBhc3NlcnQodmRpZ2l0c19zdGFydCA8IGRlY3B0ICYmIGRlY3B0IDw9IHZkaWdpdHNfZW5kKTsKKworICAgIC8qIENvbXB1dGUgYW4gdXBwZXIgYm91bmQgaG93IG11Y2ggbWVtb3J5IHdlIG5lZWQuIFRoaXMgbWlnaHQgYmUgYSBmZXcKKyAgICAgICBjaGFycyB0b28gbG9uZywgYnV0IG5vIGJpZyBkZWFsLiAqLworICAgIGJ1ZnNpemUgPQorICAgICAgICAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGFuZCB0cmFpbGluZyAwIGJ5dGUgKi8KKyAgICAgICAgMyArCisKKyAgICAgICAgLyogdG90YWwgZGlnaXQgY291bnQgKGluY2x1ZGluZyB6ZXJvIHBhZGRpbmcgb24gYm90aCBzaWRlcykgKi8KKyAgICAgICAgKHZkaWdpdHNfZW5kIC0gdmRpZ2l0c19zdGFydCkgKworCisgICAgICAgIC8qIGV4cG9uZW50ICJlKzEwMCIsIG1heCAzIG51bWVyaWNhbCBkaWdpdHMgKi8KKyAgICAgICAgKHVzZV9leHAgPyA1IDogMCk7CisKKyAgICAvKiBOb3cgYWxsb2NhdGUgdGhlIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBwIHRvIHBvaW50IHRvIHRoZSBzdGFydCBvZgorICAgICAgIGl0LiAqLworICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fTWFsbG9jKGJ1ZnNpemUpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHAgPSBidWY7CisKKyAgICAvKiBBZGQgYSBuZWdhdGl2ZSBzaWduIGlmIG5lZ2F0aXZlLCBhbmQgYSBwbHVzIHNpZ24gaWYgbm9uLW5lZ2F0aXZlCisgICAgICAgYW5kIGFsd2F5c19hZGRfc2lnbiBpcyB0cnVlLiAqLworICAgIGlmIChzaWduID09IDEpCisgICAgICAgICpwKysgPSAnLSc7CisgICAgZWxzZSBpZiAoYWx3YXlzX2FkZF9zaWduKQorICAgICAgICAqcCsrID0gJysnOworCisgICAgLyogbm90ZSB0aGF0IGV4YWN0bHkgb25lIG9mIHRoZSB0aHJlZSAnaWYnIGNvbmRpdGlvbnMgaXMgdHJ1ZSwKKyAgICAgICBzbyB3ZSBpbmNsdWRlIGV4YWN0bHkgb25lIGRlY2ltYWwgcG9pbnQgKi8KKyAgICAvKiBaZXJvIHBhZGRpbmcgb24gbGVmdCBvZiBkaWdpdCBzdHJpbmcgKi8KKyAgICBpZiAoZGVjcHQgPD0gMCkgeworICAgICAgICBtZW1zZXQocCwgJzAnLCBkZWNwdC12ZGlnaXRzX3N0YXJ0KTsKKyAgICAgICAgcCArPSBkZWNwdCAtIHZkaWdpdHNfc3RhcnQ7CisgICAgICAgICpwKysgPSAnLic7CisgICAgICAgIG1lbXNldChwLCAnMCcsIDAtZGVjcHQpOworICAgICAgICBwICs9IDAtZGVjcHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtZW1zZXQocCwgJzAnLCAwLXZkaWdpdHNfc3RhcnQpOworICAgICAgICBwICs9IDAgLSB2ZGlnaXRzX3N0YXJ0OworICAgIH0KKworICAgIC8qIERpZ2l0cywgd2l0aCBpbmNsdWRlZCBkZWNpbWFsIHBvaW50ICovCisgICAgaWYgKDAgPCBkZWNwdCAmJiBkZWNwdCA8PSBkaWdpdHNfbGVuKSB7CisgICAgICAgIHN0cm5jcHkocCwgZGlnaXRzLCBkZWNwdC0wKTsKKyAgICAgICAgcCArPSBkZWNwdC0wOworICAgICAgICAqcCsrID0gJy4nOworICAgICAgICBzdHJuY3B5KHAsIGRpZ2l0cytkZWNwdCwgZGlnaXRzX2xlbi1kZWNwdCk7CisgICAgICAgIHAgKz0gZGlnaXRzX2xlbi1kZWNwdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0cm5jcHkocCwgZGlnaXRzLCBkaWdpdHNfbGVuKTsKKyAgICAgICAgcCArPSBkaWdpdHNfbGVuOworICAgIH0KKworICAgIC8qIEFuZCB6ZXJvcyBvbiB0aGUgcmlnaHQgKi8KKyAgICBpZiAoZGlnaXRzX2xlbiA8IGRlY3B0KSB7CisgICAgICAgIG1lbXNldChwLCAnMCcsIGRlY3B0LWRpZ2l0c19sZW4pOworICAgICAgICBwICs9IGRlY3B0LWRpZ2l0c19sZW47CisgICAgICAgICpwKysgPSAnLic7CisgICAgICAgIG1lbXNldChwLCAnMCcsIHZkaWdpdHNfZW5kLWRlY3B0KTsKKyAgICAgICAgcCArPSB2ZGlnaXRzX2VuZC1kZWNwdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbXNldChwLCAnMCcsIHZkaWdpdHNfZW5kLWRpZ2l0c19sZW4pOworICAgICAgICBwICs9IHZkaWdpdHNfZW5kLWRpZ2l0c19sZW47CisgICAgfQorCisgICAgLyogRGVsZXRlIGEgdHJhaWxpbmcgZGVjaW1hbCBwdCB1bmxlc3MgdXNpbmcgYWx0ZXJuYXRpdmUgZm9ybWF0dGluZy4gKi8KKyAgICBpZiAocFstMV0gPT0gJy4nICYmICF1c2VfYWx0X2Zvcm1hdHRpbmcpCisgICAgICAgIHAtLTsKKworICAgIC8qIE5vdyB0aGF0IHdlJ3ZlIGRvbmUgemVybyBwYWRkaW5nLCBhZGQgYW4gZXhwb25lbnQgaWYgbmVlZGVkLiAqLworICAgIGlmICh1c2VfZXhwKSB7CisgICAgICAgICpwKysgPSBmbG9hdF9zdHJpbmdzW09GU19FXVswXTsKKyAgICAgICAgZXhwX2xlbiA9IHNwcmludGYocCwgIiUrLjAyZCIsIGV4cCk7CisgICAgICAgIHAgKz0gZXhwX2xlbjsKKyAgICB9CisgIGV4aXQ6CisgICAgaWYgKGJ1ZikgeworICAgICAgICAqcCA9ICdcMCc7CisgICAgICAgIC8qIEl0J3MgdG9vIGxhdGUgaWYgdGhpcyBmYWlscywgYXMgd2UndmUgYWxyZWFkeSBzdGVwcGVkIG9uCisgICAgICAgICAgIG1lbW9yeSB0aGF0IGlzbid0IG91cnMuIEJ1dCBpdCdzIGFuIG9rYXkgZGVidWdnaW5nIHRlc3QuICovCisgICAgICAgIGFzc2VydChwLWJ1ZiA8IGJ1ZnNpemUpOworICAgIH0KKyAgICBpZiAoZGlnaXRzKQorICAgICAgICBfUHlfZGdfZnJlZWR0b2EoZGlnaXRzKTsKKworICAgIHJldHVybiBidWY7Cit9CisKKworUHlBUElfRlVOQyhjaGFyICopIFB5T1NfZG91YmxlX3RvX3N0cmluZyhkb3VibGUgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGZvcm1hdF9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdHlwZSkKK3sKKyAgICBjaGFyICoqZmxvYXRfc3RyaW5ncyA9IGxjX2Zsb2F0X3N0cmluZ3M7CisgICAgaW50IG1vZGU7CisKKyAgICAvKiBWYWxpZGF0ZSBmb3JtYXRfY29kZSwgYW5kIG1hcCB1cHBlciBhbmQgbG93ZXIgY2FzZS4gQ29tcHV0ZSB0aGUKKyAgICAgICBtb2RlIGFuZCBtYWtlIGFueSBhZGp1c3RtZW50cyBhcyBuZWVkZWQuICovCisgICAgc3dpdGNoIChmb3JtYXRfY29kZSkgeworICAgIC8qIGV4cG9uZW50ICovCisgICAgY2FzZSAnRSc6CisgICAgICAgIGZsb2F0X3N0cmluZ3MgPSB1Y19mbG9hdF9zdHJpbmdzOworICAgICAgICBmb3JtYXRfY29kZSA9ICdlJzsKKyAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAqLworICAgIGNhc2UgJ2UnOgorICAgICAgICBtb2RlID0gMjsKKyAgICAgICAgcHJlY2lzaW9uKys7CisgICAgICAgIGJyZWFrOworCisgICAgLyogZml4ZWQgKi8KKyAgICBjYXNlICdGJzoKKyAgICAgICAgZmxvYXRfc3RyaW5ncyA9IHVjX2Zsb2F0X3N0cmluZ3M7CisgICAgICAgIGZvcm1hdF9jb2RlID0gJ2YnOworICAgICAgICAvKiBGYWxsIHRocm91Z2guICovCisgICAgY2FzZSAnZic6CisgICAgICAgIG1vZGUgPSAzOworICAgICAgICBicmVhazsKKworICAgIC8qIGdlbmVyYWwgKi8KKyAgICBjYXNlICdHJzoKKyAgICAgICAgZmxvYXRfc3RyaW5ncyA9IHVjX2Zsb2F0X3N0cmluZ3M7CisgICAgICAgIGZvcm1hdF9jb2RlID0gJ2cnOworICAgICAgICAvKiBGYWxsIHRocm91Z2guICovCisgICAgY2FzZSAnZyc6CisgICAgICAgIG1vZGUgPSAyOworICAgICAgICAvKiBwcmVjaXNpb24gMCBtYWtlcyBubyBzZW5zZSBmb3IgJ2cnIGZvcm1hdDsgaW50ZXJwcmV0IGFzIDEgKi8KKyAgICAgICAgaWYgKHByZWNpc2lvbiA9PSAwKQorICAgICAgICAgICAgcHJlY2lzaW9uID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiByZXByIGZvcm1hdCAqLworICAgIGNhc2UgJ3InOgorICAgICAgICBtb2RlID0gMDsKKyAgICAgICAgLyogU3VwcGxpZWQgcHJlY2lzaW9uIGlzIHVudXNlZCwgbXVzdCBiZSAwLiAqLworICAgICAgICBpZiAocHJlY2lzaW9uICE9IDApIHsKKyAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGZvcm1hdF9mbG9hdF9zaG9ydCh2YWwsIGZvcm1hdF9jb2RlLCBtb2RlLCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIFB5X0RUU0ZfU0lHTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgUHlfRFRTRl9BRERfRE9UXzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIFB5X0RUU0ZfQUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRfc3RyaW5ncywgdHlwZSk7Cit9CisjZW5kaWYgLyogaWZkZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUiAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGhvbnJ1bi5jIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCmluZGV4IDFhN2UwMWUuLjg3ZmZiMzkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRob25ydW4uYworKysgYi9QeXRob24vcHl0aG9ucnVuLmMKQEAgLTE4NCw2ICsxODQsOSBAQAogICAgIGlmICghX1B5SW50X0luaXQoKSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBpbnRzIik7CiAKKyAgICBpZiAoIV9QeUxvbmdfSW5pdCgpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGxvbmdzIik7CisKICAgICBpZiAoIVB5Qnl0ZUFycmF5X0luaXQoKSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBieXRlYXJyYXkiKTsKIApAQCAtNjk4LDcgKzcwMSw3IEBACiAgICAgICAgIGlmIChiaW1vZCA9PSBOVUxMIHx8CiAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19idWlsdGluc19fIiwgYmltb2QpICE9IDApCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBhZGQgX19idWlsdGluc19fIHRvIF9fbWFpbl9fIik7Ci0gICAgICAgIFB5X0RFQ1JFRihiaW1vZCk7CisgICAgICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIH0KIH0KIApAQCAtNzA3LDIwICs3MTAsMTIgQEAKIHN0YXRpYyB2b2lkCiBpbml0c2l0ZSh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZjsKKyAgICBQeU9iamVjdCAqbTsKICAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJzaXRlIik7CiAgICAgaWYgKG0gPT0gTlVMTCkgewotICAgICAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoCi0gICAgICAgICAgICAgICAgIidpbXBvcnQgc2l0ZScgZmFpbGVkOyB0cmFjZWJhY2s6XG4iLCBmKTsKLSAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoCi0gICAgICAgICAgICAgICInaW1wb3J0IHNpdGUnIGZhaWxlZDsgdXNlIC12IGZvciB0cmFjZWJhY2tcbiIsIGYpOwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgfQorICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICBQeV9GaW5hbGl6ZSgpOworICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwpAQCAtMTA1MCw3ICsxMDQ1LDcgQEAKIHsKICAgICBjaGFyICpubDsKICAgICBpZiAob2Zmc2V0ID49IDApIHsKLSAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID09IChpbnQpc3RybGVuKHRleHQpKQorICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKICAgICAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBubCA9IHN0cmNocih0ZXh0LCAnXG4nKTsKQEAgLTExNTQsNyArMTE0OSw3IEBACiAgICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90cmFjZWJhY2siLCB0Yik7CiAgICAgfQogICAgIGhvb2sgPSBQeVN5c19HZXRPYmplY3QoImV4Y2VwdGhvb2siKTsKLSAgICBpZiAoaG9vaykgeworICAgIGlmIChob29rICYmIGhvb2sgIT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfUGFjaygzLAogICAgICAgICAgICAgZXhjZXB0aW9uLCB2LCB0YiA/IHRiIDogUHlfTm9uZSk7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChob29rLCBhcmdzKTsKQEAgLTEyMDQsNyArMTE5OSw3IEBACiAgICAgaW50IGVyciA9IDA7CiAgICAgUHlPYmplY3QgKmYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwogICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgaWYgKGYgPT0gTlVMTCkKKyAgICBpZiAoZiA9PSBOVUxMIHx8IGYgPT0gUHlfTm9uZSkKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoUHlfRmx1c2hMaW5lKCkpCmRpZmYgLS1naXQgYS9QeXRob24vc3RydG9kLmMgYi9QeXRob24vc3RydG9kLmMKaW5kZXggNjc5OGVmYS4uZWU1NTg5OCAxMDA2NDQKLS0tIGEvUHl0aG9uL3N0cnRvZC5jCisrKyBiL1B5dGhvbi9zdHJ0b2QuYwpAQCAtMSwzICsxLDYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCiAjaW5jbHVkZSAicHljb25maWcuaCIKIAogLyogY29tcC5zb3VyY2VzLm1pc2Mgc3RydG9kKCksIGFzIHBvc3RlZCBpbiBjb21wLmxhbmcudGNsLApAQCAtNzcsNyArODAsNyBAQAogICAgIGRwID0gYnVmZmVyOwogICAgICpkcCsrID0gJzAnOyAqZHArKyA9ICcuJzsKICAgICBidWZvcmcgPSBkcCwgYnVmbGltID0gYnVmZmVyKzQ4OwotICAgIGZvciAoc2F2ZSA9IHNwOyBjID0gKnNwOyBzcCsrKQorICAgIGZvciAoc2F2ZSA9IHNwOyAoYyA9ICpzcCk7IHNwKyspCiAgICAgICAgIGlmIChjID09ICcuJykgewogICAgICAgICBpZiAoZG90c2VlbikgYnJlYWs7CiAgICAgICAgIGRvdHNlZW4rKzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBiL1B5dGhvbi9zdHJ1Y3RtZW1iZXIuYwppbmRleCA0Y2VmNDJmLi5lMzQ3YjUxIDEwMDY0NAotLS0gYS9QeXRob24vc3RydWN0bWVtYmVyLmMKKysrIGIvUHl0aG9uL3N0cnVjdG1lbWJlci5jCkBAIC0yNTcsMTIgKzI1NywxMyBAQAogICAgICAgICB9CiAgICAgY2FzZSBUX1VJTlQ6ewogICAgICAgICB1bnNpZ25lZCBsb25nIHVsb25nX3ZhbCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyh2KTsKLSAgICAgICAgaWYgKCh1bG9uZ192YWwgPT0gKHVuc2lnbmVkIGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoKHVsb25nX3ZhbCA9PSAodW5zaWduZWQgbG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgLyogWFhYOiBGb3IgY29tcGF0aWJpbGl0eSwgYWNjZXB0IG5lZ2F0aXZlIGludCB2YWx1ZXMKICAgICAgICAgICAgICAgIGFzIHdlbGwuICovCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgdWxvbmdfdmFsID0gUHlMb25nX0FzTG9uZyh2KTsKLSAgICAgICAgICAgIGlmICgodWxvbmdfdmFsID09ICh1bnNpZ25lZCBpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBpZiAoKHVsb25nX3ZhbCA9PSAodW5zaWduZWQgbG9uZyktMSkgJiYKKyAgICAgICAgICAgICAgICBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICoodW5zaWduZWQgaW50ICopYWRkciA9ICh1bnNpZ25lZCBpbnQpdWxvbmdfdmFsOwogICAgICAgICAgICAgV0FSTigiV3JpdGluZyBuZWdhdGl2ZSB2YWx1ZSBpbnRvIHVuc2lnbmVkIGZpZWxkIik7CkBAIC0yODYsNyArMjg3LDcgQEAKICAgICAgICAgICAgICAgIGFzIHdlbGwuICovCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nKilhZGRyID0gUHlMb25nX0FzTG9uZyh2KTsKLSAgICAgICAgICAgIGlmICgoKih1bnNpZ25lZCBsb25nKilhZGRyID09ICh1bnNpZ25lZCBpbnQpLTEpCisgICAgICAgICAgICBpZiAoKCoodW5zaWduZWQgbG9uZyopYWRkciA9PSAodW5zaWduZWQgbG9uZyktMSkKICAgICAgICAgICAgICAgICAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIFdBUk4oIldyaXRpbmcgbmVnYXRpdmUgdmFsdWUgaW50byB1bnNpZ25lZCBmaWVsZCIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5bXRhYmxlLmMgYi9QeXRob24vc3ltdGFibGUuYwppbmRleCBmMzBiYTBmLi41MWI1OWYwIDEwMDY0NAotLS0gYS9QeXRob24vc3ltdGFibGUuYworKysgYi9QeXRob24vc3ltdGFibGUuYwpAQCAtMzIsNyArMzIsNiBAQAogICAgICAgICBnb3RvIGZhaWw7CiAgICAgc3RlLT5zdGVfdGFibGUgPSBzdDsKICAgICBzdGUtPnN0ZV9pZCA9IGs7Ci0gICAgc3RlLT5zdGVfdG1wbmFtZSA9IDA7CiAKICAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKICAgICBQeV9JTkNSRUYobmFtZSk7CkBAIC0xNjgsNiArMTY3LDggQEAKIHN0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9leHByKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgcyk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2dlbmV4cChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBleHByX3R5IHMpOworc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9zZXRjb21wKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSk7CitzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2RpY3Rjb21wKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3Zpc2l0X2FyZ3VtZW50cyhzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBhcmd1bWVudHNfdHkpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9leGNlcHRoYW5kbGVyKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4Y2VwdGhhbmRsZXJfdHkpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9hbGlhcyhzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBhbGlhc190eSk7CkBAIC0xNzksNyArMTgwLDggQEAKIHN0YXRpYyBpbnQgc3ltdGFibGVfaW1wbGljaXRfYXJnKHN0cnVjdCBzeW10YWJsZSAqc3QsIGludCBwb3MpOwogCiAKLXN0YXRpYyBpZGVudGlmaWVyIHRvcCA9IE5VTEwsIGxhbWJkYSA9IE5VTEwsIGdlbmV4cHIgPSBOVUxMOworc3RhdGljIGlkZW50aWZpZXIgdG9wID0gTlVMTCwgbGFtYmRhID0gTlVMTCwgZ2VuZXhwciA9IE5VTEwsIHNldGNvbXAgPSBOVUxMLAorICAgIGRpY3Rjb21wID0gTlVMTDsKIAogI2RlZmluZSBHRVRfSURFTlRJRklFUihWQVIpIFwKICAgICAoKFZBUikgPyAoVkFSKSA6ICgoVkFSKSA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIyBWQVIpKSkKQEAgLTIwNCw3ICsyMDYsNiBAQAogICAgIGlmICgoc3QtPnN0X3N5bWJvbHMgPSBQeURpY3RfTmV3KCkpID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBzdC0+c3RfY3VyID0gTlVMTDsKLSAgICBzdC0+c3RfdG1wbmFtZSA9IDA7CiAgICAgc3QtPnN0X3ByaXZhdGUgPSBOVUxMOwogICAgIHJldHVybiBzdDsKICBmYWlsOgpAQCAtNDk1LDcgKzQ5Niw3IEBACiAgICAgY2FzZSBPUFRfSU1QT1JUX1NUQVI6CiAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0ICogaXMgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gJyUuMTAwcycgIgotICAgICAgICAgICAgICAgICAgICAgICJiZWNhdXNlIGl0IGlzICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAiYmVjYXVzZSBpdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfQVNfU1RSSU5HKHN0ZS0+c3RlX25hbWUpLCB0cmFpbGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPUFRfQkFSRV9FWEVDOgpAQCAtNzAyLDcgKzcwMyw4IEBACiAgICAgICAgICAgICBzdGUtPnN0ZV9jaGlsZF9mcmVlID0gMTsKICAgICB9CiAKLSAgICBQeURpY3RfVXBkYXRlKG5ld2ZyZWUsIGFsbGZyZWUpOworICAgIGlmIChQeURpY3RfVXBkYXRlKG5ld2ZyZWUsIGFsbGZyZWUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlLCBuZXdmcmVlKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIXVwZGF0ZV9zeW1ib2xzKHN0ZS0+c3RlX3N5bWJvbHMsIHNjb3BlLCBib3VuZCwgbmV3ZnJlZSwKQEAgLTg0Niw3ICs4NDgsNyBAQAogICAgIHN0LT5zdF9jdXIgPSBzdGVfbmV3KHN0LCBuYW1lLCBibG9jaywgYXN0LCBsaW5lbm8pOwogICAgIGlmIChzdC0+c3RfY3VyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChuYW1lID09IEdFVF9JREVOVElGSUVSKHRvcCkpCisgICAgaWYgKGJsb2NrID09IE1vZHVsZUJsb2NrKQogICAgICAgICBzdC0+c3RfZ2xvYmFsID0gc3QtPnN0X2N1ci0+c3RlX3N5bWJvbHM7CiAgICAgaWYgKHByZXYpIHsKICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocHJldi0+c3RlX2NoaWxkcmVuLApAQCAtOTk0LDIzICs5OTYsNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zeW10YWJsZV9uZXdfdG1wbmFtZShzdHJ1Y3Qgc3ltdGFibGUgKnN0KQotewotICAgIGNoYXIgdG1wbmFtZVsyNTZdOwotICAgIGlkZW50aWZpZXIgdG1wOwotCi0gICAgUHlPU19zbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICJfWyVkXSIsCi0gICAgICAgICAgICAgICAgICArK3N0LT5zdF9jdXItPnN0ZV90bXBuYW1lKTsKLSAgICB0bXAgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKHRtcG5hbWUpOwotICAgIGlmICghdG1wKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIHRtcCwgREVGX0xPQ0FMKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKIHN5bXRhYmxlX3Zpc2l0X3N0bXQoc3RydWN0IHN5bXRhYmxlICpzdCwgc3RtdF90eSBzKQogewogICAgIHN3aXRjaCAocy0+a2luZCkgewpAQCAtMTE4MywxMiArMTE2OCw4IEBACiAgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdpdGhfa2luZDoKLSAgICAgICAgaWYgKCFzeW10YWJsZV9uZXdfdG1wbmFtZShzdCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgVklTSVQoc3QsIGV4cHIsIHMtPnYuV2l0aC5jb250ZXh0X2V4cHIpOwogICAgICAgICBpZiAocy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpIHsKLSAgICAgICAgICAgIGlmICghc3ltdGFibGVfbmV3X3RtcG5hbWUoc3QpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgVklTSVQoc3QsIGV4cHIsIHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKTsKICAgICAgICAgfQogICAgICAgICBWSVNJVF9TRVEoc3QsIHN0bXQsIHMtPnYuV2l0aC5ib2R5KTsKQEAgLTEyMTIsOCArMTE5Myw3IEBACiAgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LlVuYXJ5T3Aub3BlcmFuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGFtYmRhX2tpbmQ6IHsKLSAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihsYW1iZGEpIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgbGFtYmRhLCBERUZfTE9DQUwpKQorICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKGxhbWJkYSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGUtPnYuTGFtYmRhLmFyZ3MtPmRlZmF1bHRzKQogICAgICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBlLT52LkxhbWJkYS5hcmdzLT5kZWZhdWx0cyk7CkBAIC0xMjM1LDkgKzEyMTUsMTAgQEAKICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBlLT52LkRpY3Qua2V5cyk7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgZS0+di5EaWN0LnZhbHVlcyk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0X2tpbmQ6CisgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgZS0+di5TZXQuZWx0cyk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGlzdENvbXBfa2luZDoKLSAgICAgICAgaWYgKCFzeW10YWJsZV9uZXdfdG1wbmFtZShzdCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgVklTSVQoc3QsIGV4cHIsIGUtPnYuTGlzdENvbXAuZWx0KTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBjb21wcmVoZW5zaW9uLCBlLT52Lkxpc3RDb21wLmdlbmVyYXRvcnMpOwogICAgICAgICBicmVhazsKQEAgLTEyNDUsNiArMTIyNiwxNCBAQAogICAgICAgICBpZiAoIXN5bXRhYmxlX3Zpc2l0X2dlbmV4cChzdCwgZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRDb21wX2tpbmQ6CisgICAgICAgIGlmICghc3ltdGFibGVfdmlzaXRfc2V0Y29tcChzdCwgZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEaWN0Q29tcF9raW5kOgorICAgICAgICBpZiAoIXN5bXRhYmxlX3Zpc2l0X2RpY3Rjb21wKHN0LCBlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBicmVhazsKICAgICBjYXNlIFlpZWxkX2tpbmQ6CiAgICAgICAgIGlmIChlLT52LllpZWxkLnZhbHVlKQogICAgICAgICAgICAgVklTSVQoc3QsIGV4cHIsIGUtPnYuWWllbGQudmFsdWUpOwpAQCAtMTQwNyw3ICsxMzk2LDcgQEAKIHN5bXRhYmxlX3Zpc2l0X2FsaWFzKHN0cnVjdCBzeW10YWJsZSAqc3QsIGFsaWFzX3R5IGEpCiB7CiAgICAgLyogQ29tcHV0ZSBzdG9yZV9uYW1lLCB0aGUgbmFtZSBhY3R1YWxseSBib3VuZCBieSB0aGUgaW1wb3J0Ci0gICAgICAgb3BlcmF0aW9uLiAgSXQgaXMgZGlmZXJlbnQgdGhhbiBhLT5uYW1lIHdoZW4gYS0+bmFtZSBpcyBhCisgICAgICAgb3BlcmF0aW9uLiAgSXQgaXMgZGlmZmVyZW50IHRoYW4gYS0+bmFtZSB3aGVuIGEtPm5hbWUgaXMgYQogICAgICAgIGRvdHRlZCBwYWNrYWdlIG5hbWUgKGUuZy4gc3BhbS5lZ2dzKQogICAgICovCiAgICAgUHlPYmplY3QgKnN0b3JlX25hbWU7CkBAIC0xNDg2LDI3ICsxNDc1LDgwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXN5bXRhYmxlX3Zpc2l0X2dlbmV4cChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBleHByX3R5IGUpCitzeW10YWJsZV9uZXdfdG1wbmFtZShzdHJ1Y3Qgc3ltdGFibGUgKnN0KQogeworICAgIGNoYXIgdG1wbmFtZVsyNTZdOworICAgIGlkZW50aWZpZXIgdG1wOworCisgICAgUHlPU19zbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICJfWyVkXSIsCisgICAgICAgICAgICAgICAgICArK3N0LT5zdF9jdXItPnN0ZV90bXBuYW1lKTsKKyAgICB0bXAgPSBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nKHRtcG5hbWUpOworICAgIGlmICghdG1wKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIHRtcCwgREVGX0xPQ0FMKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3N5bXRhYmxlX2hhbmRsZV9jb21wcmVoZW5zaW9uKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgc2NvcGVfbmFtZSwgYXNkbF9zZXEgKmdlbmVyYXRvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGVsdCwgZXhwcl90eSB2YWx1ZSkKK3sKKyAgICBpbnQgaXNfZ2VuZXJhdG9yID0gKGUtPmtpbmQgPT0gR2VuZXJhdG9yRXhwX2tpbmQpOworICAgIGludCBuZWVkc190bXAgPSAhaXNfZ2VuZXJhdG9yOwogICAgIGNvbXByZWhlbnNpb25fdHkgb3V0ZXJtb3N0ID0gKChjb21wcmVoZW5zaW9uX3R5KQotICAgICAgICAgICAgICAgICAgICAgKGFzZGxfc2VxX0dFVChlLT52LkdlbmVyYXRvckV4cC5nZW5lcmF0b3JzLCAwKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfR0VUKGdlbmVyYXRvcnMsIDApKTsKICAgICAvKiBPdXRlcm1vc3QgaXRlcmF0b3IgaXMgZXZhbHVhdGVkIGluIGN1cnJlbnQgc2NvcGUgKi8KICAgICBWSVNJVChzdCwgZXhwciwgb3V0ZXJtb3N0LT5pdGVyKTsKLSAgICAvKiBDcmVhdGUgZ2VuZXJhdG9yIHNjb3BlIGZvciB0aGUgcmVzdCAqLwotICAgIGlmICghR0VUX0lERU5USUZJRVIoZ2VuZXhwcikgfHwKLSAgICAgICAgIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBnZW5leHByLCBGdW5jdGlvbkJsb2NrLCAodm9pZCAqKWUsIGUtPmxpbmVubykpIHsKKyAgICAvKiBDcmVhdGUgY29tcHJlaGVuc2lvbiBzY29wZSBmb3IgdGhlIHJlc3QgKi8KKyAgICBpZiAoIXNjb3BlX25hbWUgfHwKKyAgICAgICAgIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzY29wZV9uYW1lLCBGdW5jdGlvbkJsb2NrLCAodm9pZCAqKWUsIDApKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBzdC0+c3RfY3VyLT5zdGVfZ2VuZXJhdG9yID0gMTsKKyAgICBzdC0+c3RfY3VyLT5zdGVfZ2VuZXJhdG9yID0gaXNfZ2VuZXJhdG9yOwogICAgIC8qIE91dGVybW9zdCBpdGVyIGlzIHJlY2VpdmVkIGFzIGFuIGFyZ3VtZW50ICovCiAgICAgaWYgKCFzeW10YWJsZV9pbXBsaWNpdF9hcmcoc3QsIDApKSB7CiAgICAgICAgIHN5bXRhYmxlX2V4aXRfYmxvY2soc3QsICh2b2lkICopZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICAvKiBBbGxvY2F0ZSB0ZW1wb3JhcnkgbmFtZSBpZiBuZWVkZWQgKi8KKyAgICBpZiAobmVlZHNfdG1wICYmICFzeW10YWJsZV9uZXdfdG1wbmFtZShzdCkpIHsKKyAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgKHZvaWQgKillKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIFZJU0lUX0lOX0JMT0NLKHN0LCBleHByLCBvdXRlcm1vc3QtPnRhcmdldCwgKHZvaWQqKWUpOwogICAgIFZJU0lUX1NFUV9JTl9CTE9DSyhzdCwgZXhwciwgb3V0ZXJtb3N0LT5pZnMsICh2b2lkKillKTsKICAgICBWSVNJVF9TRVFfVEFJTF9JTl9CTE9DSyhzdCwgY29tcHJlaGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkdlbmVyYXRvckV4cC5nZW5lcmF0b3JzLCAxLCAodm9pZCopZSk7Ci0gICAgVklTSVRfSU5fQkxPQ0soc3QsIGV4cHIsIGUtPnYuR2VuZXJhdG9yRXhwLmVsdCwgKHZvaWQqKWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcnMsIDEsICh2b2lkKillKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIFZJU0lUX0lOX0JMT0NLKHN0LCBleHByLCB2YWx1ZSwgKHZvaWQqKWUpOworICAgIFZJU0lUX0lOX0JMT0NLKHN0LCBleHByLCBlbHQsICh2b2lkKillKTsKICAgICByZXR1cm4gc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgKHZvaWQgKillKTsKIH0KKworc3RhdGljIGludAorc3ltdGFibGVfdmlzaXRfZ2VuZXhwKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSkKK3sKKyAgICByZXR1cm4gc3ltdGFibGVfaGFuZGxlX2NvbXByZWhlbnNpb24oc3QsIGUsIEdFVF9JREVOVElGSUVSKGdlbmV4cHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkdlbmVyYXRvckV4cC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkdlbmVyYXRvckV4cC5lbHQsIE5VTEwpOworfQorCitzdGF0aWMgaW50CitzeW10YWJsZV92aXNpdF9zZXRjb21wKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSkKK3sKKyAgICByZXR1cm4gc3ltdGFibGVfaGFuZGxlX2NvbXByZWhlbnNpb24oc3QsIGUsIEdFVF9JREVOVElGSUVSKHNldGNvbXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LlNldENvbXAuZ2VuZXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5TZXRDb21wLmVsdCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQKK3N5bXRhYmxlX3Zpc2l0X2RpY3Rjb21wKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgZSkKK3sKKyAgICByZXR1cm4gc3ltdGFibGVfaGFuZGxlX2NvbXByZWhlbnNpb24oc3QsIGUsIEdFVF9JREVOVElGSUVSKGRpY3Rjb21wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5EaWN0Q29tcC5nZW5lcmF0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkRpY3RDb21wLmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5EaWN0Q29tcC52YWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9QeXRob24vc3lzbW9kdWxlLmMgYi9QeXRob24vc3lzbW9kdWxlLmMKaW5kZXggOTFmZTIyNC4uOTdjZThjZCAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5c21vZHVsZS5jCisrKyBiL1B5dGhvbi9zeXNtb2R1bGUuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiBQeURvY19TVFJWQVIoZGlzcGxheWhvb2tfZG9jLAogImRpc3BsYXlob29rKG9iamVjdCkgLT4gTm9uZVxuIgogIlxuIgotIlByaW50IGFuIG9iamVjdCB0byBzeXMuc3Rkb3V0IGFuZCBhbHNvIHNhdmUgaXQgaW4gX19idWlsdGluX18uXG4iCisiUHJpbnQgYW4gb2JqZWN0IHRvIHN5cy5zdGRvdXQgYW5kIGFsc28gc2F2ZSBpdCBpbiBfX2J1aWx0aW5fXy5fXG4iCiApOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTU3LDI2ICs1NTcsNjUgQEAKIFB5RG9jX1NUUlZBUihnZXR3aW5kb3dzdmVyc2lvbl9kb2MsCiAiZ2V0d2luZG93c3ZlcnNpb24oKVxuXAogXG5cCi1SZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bm5pbmcgdmVyc2lvbiBvZiBXaW5kb3dzLlxuXAotVGhlIHJlc3VsdCBpcyBhIHR1cGxlIG9mIChtYWpvciwgbWlub3IsIGJ1aWxkLCBwbGF0Zm9ybSwgdGV4dClcblwKLUFsbCBlbGVtZW50cyBhcmUgbnVtYmVycywgZXhjZXB0IHRleHQgd2hpY2ggaXMgYSBzdHJpbmcuXG5cCi1QbGF0Zm9ybSBtYXkgYmUgMCBmb3Igd2luMzJzLCAxIGZvciBXaW5kb3dzIDl4L01FLCAyIGZvciBXaW5kb3dzIE5ULzIwMDAvWFBcblwKLSIKK1JldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIFdpbmRvd3MgYXMgYSBuYW1lZCB0dXBsZS5cblwKK1RoZSBtZW1iZXJzIGFyZSBuYW1lZDogbWFqb3IsIG1pbm9yLCBidWlsZCwgcGxhdGZvcm0sIHNlcnZpY2VfcGFjayxcblwKK3NlcnZpY2VfcGFja19tYWpvciwgc2VydmljZV9wYWNrX21pbm9yLCBzdWl0ZV9tYXNrLCBhbmQgcHJvZHVjdF90eXBlLiBGb3JcblwKK2JhY2t3YXJkIGNvbXBhdGliaWxpeSwgb25seSB0aGUgZmlyc3QgNSBpdGVtcyBhcmUgYXZhaWxhYmxlIGJ5IGluZGV4aW5nLlxuXAorQWxsIGVsZW1lbnRzIGFyZSBudW1iZXJzLCBleGNlcHQgc2VydmljZV9wYWNrIHdoaWNoIGlzIGEgc3RyaW5nLiBQbGF0Zm9ybVxuXAorbWF5IGJlIDAgZm9yIHdpbjMycywgMSBmb3IgV2luZG93cyA5eC9NRSwgMiBmb3IgV2luZG93cyBOVC8yMDAwL1hQL1Zpc3RhLzcsXG5cCiszIGZvciBXaW5kb3dzIENFLiBQcm9kdWN0X3R5cGUgbWF5IGJlIDEgZm9yIGEgd29ya3N0YXRpb24sIDIgZm9yIGEgZG9tYWluXG5cCitjb250cm9sbGVyLCAzIGZvciBhIHNlcnZlci4iCiApOwogCitzdGF0aWMgUHlUeXBlT2JqZWN0IFdpbmRvd3NWZXJzaW9uVHlwZSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKworc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgd2luZG93c192ZXJzaW9uX2ZpZWxkc1tdID0geworICAgIHsibWFqb3IiLCAiTWFqb3IgdmVyc2lvbiBudW1iZXIifSwKKyAgICB7Im1pbm9yIiwgIk1pbm9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJidWlsZCIsICJCdWlsZCBudW1iZXIifSwKKyAgICB7InBsYXRmb3JtIiwgIk9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0ifSwKKyAgICB7InNlcnZpY2VfcGFjayIsICJMYXRlc3QgU2VydmljZSBQYWNrIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIn0sCisgICAgeyJzZXJ2aWNlX3BhY2tfbWFqb3IiLCAiU2VydmljZSBQYWNrIG1ham9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJzZXJ2aWNlX3BhY2tfbWlub3IiLCAiU2VydmljZSBQYWNrIG1pbm9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJzdWl0ZV9tYXNrIiwgIkJpdCBtYXNrIGlkZW50aWZ5aW5nIGF2YWlsYWJsZSBwcm9kdWN0IHN1aXRlcyJ9LAorICAgIHsicHJvZHVjdF90eXBlIiwgIlN5c3RlbSBwcm9kdWN0IHR5cGUifSwKKyAgICB7MH0KK307CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgd2luZG93c192ZXJzaW9uX2Rlc2MgPSB7CisgICAgInN5cy5nZXR3aW5kb3dzdmVyc2lvbiIsICAvKiBuYW1lICovCisgICAgZ2V0d2luZG93c3ZlcnNpb25fZG9jLCAgICAvKiBkb2MgKi8KKyAgICB3aW5kb3dzX3ZlcnNpb25fZmllbGRzLCAgIC8qIGZpZWxkcyAqLworICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBmaXJzdCA1IGl0ZW1zIGFyZSBhY2Nlc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgaW5kZXhpbmcsIHRoZSByZXN0IGFyZSBuYW1lIG9ubHkgKi8KK307CisKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0d2luZG93c3ZlcnNpb24oUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgT1NWRVJTSU9OSU5GTyB2ZXI7CisgICAgUHlPYmplY3QgKnZlcnNpb247CisgICAgaW50IHBvcyA9IDA7CisgICAgT1NWRVJTSU9OSU5GT0VYIHZlcjsKICAgICB2ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXIpOwotICAgIGlmICghR2V0VmVyc2lvbkV4KCZ2ZXIpKQorICAgIGlmICghR2V0VmVyc2lvbkV4KChPU1ZFUlNJT05JTkZPKikgJnZlcikpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiSEhISHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZlci5kd01ham9yVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuZHdNaW5vclZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyLmR3QnVpbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyLmR3UGxhdGZvcm1JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuc3pDU0RWZXJzaW9uKTsKKworICAgIHZlcnNpb24gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmV2luZG93c1ZlcnNpb25UeXBlKTsKKyAgICBpZiAodmVyc2lvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci5kd01ham9yVmVyc2lvbikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci5kd01pbm9yVmVyc2lvbikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci5kd0J1aWxkTnVtYmVyKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLmR3UGxhdGZvcm1JZCkpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcodmVyLnN6Q1NEVmVyc2lvbikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci53U2VydmljZVBhY2tNYWpvcikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci53U2VydmljZVBhY2tNaW5vcikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5SW50X0Zyb21Mb25nKHZlci53U3VpdGVNYXNrKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlJbnRfRnJvbUxvbmcodmVyLndQcm9kdWN0VHlwZSkpOworCisgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCkBAIC01OTksMTIgKzYzOCwxNCBAQAogUHlEb2NfU1RSVkFSKHNldGRsb3BlbmZsYWdzX2RvYywKICJzZXRkbG9wZW5mbGFncyhuKSAtPiBOb25lXG5cCiBcblwKLVNldCB0aGUgZmxhZ3MgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGRsb3BlbigpIGNhbGxzLiBBbW9uZyBvdGhlclxuXAotdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZ1xuXAotYSBtb2R1bGUsIGlmIGNhbGxlZCBhcyBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClcblwKLVRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzXG5cCi1zeXMuc2V0ZGxvcGVuZmxhZ3MoZGwuUlRMRF9OT1d8ZGwuUlRMRF9HTE9CQUwpIgotKTsKK1NldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgZm9yIGRsb3BlbiBjYWxscywgc3VjaCBhcyB3aGVuIHRoZVxuXAoraW50ZXJwcmV0ZXIgbG9hZHMgZXh0ZW5zaW9uIG1vZHVsZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgd2lsbCBlbmFibGVcblwKK2EgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSwgaWYgY2FsbGVkIGFzXG5cCitzeXMuc2V0ZGxvcGVuZmxhZ3MoMCkuICBUbyBzaGFyZSBzeW1ib2xzIGFjcm9zcyBleHRlbnNpb24gbW9kdWxlcywgY2FsbCBhc1xuXAorc3lzLnNldGRsb3BlbmZsYWdzKGN0eXBlcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAorY2FuIGJlIGVpdGhlciBmb3VuZCBpbiB0aGUgY3R5cGVzIG1vZHVsZSwgb3IgaW4gdGhlIERMRkNOIG1vZHVsZS4gSWYgRExGQ05cblwKK2lzIG5vdCBhdmFpbGFibGUsIGl0IGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSAvdXNyL2luY2x1ZGUvZGxmY24uaCB1c2luZyB0aGVcblwKK2gycHkgc2NyaXB0LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX2dldGRsb3BlbmZsYWdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTYxOCwxMCArNjU5LDEwIEBACiBQeURvY19TVFJWQVIoZ2V0ZGxvcGVuZmxhZ3NfZG9jLAogImdldGRsb3BlbmZsYWdzKCkgLT4gaW50XG5cCiBcblwKLVJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgZGxvcGVuKClcblwKLWNhbGxzLiBUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGRsIG1vZHVsZS4iCi0pOwotI2VuZGlmCitSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIGRsb3BlbiBjYWxscy5cblwKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgY3R5cGVzIGFuZCBETEZDTiBtb2R1bGVzLiIpOworCisjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKICNpZmRlZiBVU0VfTUFMTE9QVAogLyogTGluayB3aXRoIC1sbWFsbG9jIChvciAtbG1wYykgb24gYW4gU0dJICovCkBAIC02NDMsNyArNjg0LDcgQEAKIHN5c19nZXRzaXplb2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnN0cl9fc2l6ZW9mX18sICpnY19oZWFkX3NpemUgPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqc3RyX19zaXplb2ZfXyA9IE5VTEwsICpnY19oZWFkX3NpemUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgImRlZmF1bHQiLCAwfTsKICAgICBQeU9iamVjdCAqbywgKmRmbHQgPSBOVUxMOwogCkBAIC02NTEsMTMgKzY5Miw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbywgJmRmbHQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlIG5lZWRlZCBieSBfUHlUeXBlX0xvb2t1cCAqLwotICAgIGlmIChzdHJfX3NpemVvZl9fID09IE5VTEwpIHsKLSAgICAgICAgc3RyX19zaXplb2ZfXyA9IFB5U3RyaW5nX0ludGVybkZyb21TdHJpbmcoIl9fc2l6ZW9mX18iKTsKLSAgICAgICAgaWYgKHN0cl9fc2l6ZW9mX18gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIC8qIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlIGZvciBHQyBoZWFkIHNpemUgKi8KICAgICBpZiAoZ2NfaGVhZF9zaXplID09IE5VTEwpIHsKICAgICAgICAgZ2NfaGVhZF9zaXplID0gUHlJbnRfRnJvbVNzaXplX3Qoc2l6ZW9mKFB5R0NfSGVhZCkpOwpAQCAtNjc0LDE0ICs3MDgsMTggQEAKICAgICAgICAgcmVzID0gUHlJbnRfRnJvbVNzaXplX3QoUHlJbnN0YW5jZV9UeXBlLnRwX2Jhc2ljc2l6ZSk7CiAgICAgLyogYWxsIG90aGVyIG9iamVjdHMgKi8KICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKm1ldGhvZCA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUobyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfX3NpemVvZl9fKTsKLSAgICAgICAgaWYgKG1ldGhvZCA9PSBOVUxMKQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19zaXplb2ZfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvKS0+dHBfbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWV0aG9kLCBvLCBOVUxMKTsKKyAgICAgICAgUHlPYmplY3QgKm1ldGhvZCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICJfX3NpemVvZl9fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJfX3NpemVvZl9fKTsKKyAgICAgICAgaWYgKG1ldGhvZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fc2l6ZW9mX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG8pLT50cF9uYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWV0aG9kLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZXRob2QpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogSGFzIGEgZGVmYXVsdCB2YWx1ZSBiZWVuIGdpdmVuPyAqLwpAQCAtMTA0MywxOCArMTA4MSwyMSBAQAogIlxuXAogU3RhdGljIG9iamVjdHM6XG5cCiBcblwKK2Zsb2F0X2luZm8gLS0gYSBkaWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsb2F0IGlucGxlbWVudGF0aW9uLlxuXAorbG9uZ19pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvbmcgaW1wbGVtZW50YXRpb24uXG5cCiBtYXhpbnQgLS0gdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIGludGVnZXIgKHRoZSBzbWFsbGVzdCBpcyAtbWF4aW50LTEpXG5cCiBtYXhzaXplIC0tIHRoZSBsYXJnZXN0IHN1cHBvcnRlZCBsZW5ndGggb2YgY29udGFpbmVycy5cblwKIG1heHVuaWNvZGUgLS0gdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIGNoYXJhY3RlclxuXAogYnVpbHRpbl9tb2R1bGVfbmFtZXMgLS0gdHVwbGUgb2YgbW9kdWxlIG5hbWVzIGJ1aWx0IGludG8gdGhpcyBpbnRlcnByZXRlclxuXAogdmVyc2lvbiAtLSB0aGUgdmVyc2lvbiBvZiB0aGlzIGludGVycHJldGVyIGFzIGEgc3RyaW5nXG5cCi12ZXJzaW9uX2luZm8gLS0gdmVyc2lvbiBpbmZvcm1hdGlvbiBhcyBhIHR1cGxlXG5cCit2ZXJzaW9uX2luZm8gLS0gdmVyc2lvbiBpbmZvcm1hdGlvbiBhcyBhIG5hbWVkIHR1cGxlXG5cCiBoZXh2ZXJzaW9uIC0tIHZlcnNpb24gaW5mb3JtYXRpb24gZW5jb2RlZCBhcyBhIHNpbmdsZSBpbnRlZ2VyXG5cCiBjb3B5cmlnaHQgLS0gY29weXJpZ2h0IG5vdGljZSBwZXJ0YWluaW5nIHRvIHRoaXMgaW50ZXJwcmV0ZXJcblwKIHBsYXRmb3JtIC0tIHBsYXRmb3JtIGlkZW50aWZpZXJcblwKIGV4ZWN1dGFibGUgLS0gcGF0aG5hbWUgb2YgdGhpcyBQeXRob24gaW50ZXJwcmV0ZXJcblwKIHByZWZpeCAtLSBwcmVmaXggdXNlZCB0byBmaW5kIHRoZSBQeXRob24gbGlicmFyeVxuXAogZXhlY19wcmVmaXggLS0gcHJlZml4IHVzZWQgdG8gZmluZCB0aGUgbWFjaGluZS1zcGVjaWZpYyBQeXRob24gbGlicmFyeVxuXAorZmxvYXRfcmVwcl9zdHlsZSAtLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgc3R5bGUgb2YgcmVwcigpIG91dHB1dCBmb3IgZmxvYXRzXG5cCiAiCiApCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMTI3OSw2ICsxMzIwLDc1IEBACiAgICAgcmV0dXJuIHNlcTsKIH0KIAorUHlEb2NfU1RSVkFSKHZlcnNpb25faW5mb19fZG9jX18sCisic3lzLnZlcnNpb25faW5mb1xuXAorXG5cCitWZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgbmFtZWQgdHVwbGUuIik7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgVmVyc2lvbkluZm9UeXBlID0gezAsIDAsIDAsIDAsIDAsIDB9OworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCB2ZXJzaW9uX2luZm9fZmllbGRzW10gPSB7CisgICAgeyJtYWpvciIsICJNYWpvciByZWxlYXNlIG51bWJlciJ9LAorICAgIHsibWlub3IiLCAiTWlub3IgcmVsZWFzZSBudW1iZXIifSwKKyAgICB7Im1pY3JvIiwgIlBhdGNoIHJlbGVhc2UgbnVtYmVyIn0sCisgICAgeyJyZWxlYXNlbGV2ZWwiLCAiJ2FscGhhJywgJ2JldGEnLCAnY2FuZGlkYXRlJywgb3IgJ3JlbGVhc2UnIn0sCisgICAgeyJzZXJpYWwiLCAiU2VyaWFsIHJlbGVhc2UgbnVtYmVyIn0sCisgICAgezB9Cit9OworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIHZlcnNpb25faW5mb19kZXNjID0geworICAgICJzeXMudmVyc2lvbl9pbmZvIiwgICAgIC8qIG5hbWUgKi8KKyAgICB2ZXJzaW9uX2luZm9fX2RvY19fLCAgICAvKiBkb2MgKi8KKyAgICB2ZXJzaW9uX2luZm9fZmllbGRzLCAgICAvKiBmaWVsZHMgKi8KKyAgICA1Cit9OworCitzdGF0aWMgUHlPYmplY3QgKgorbWFrZV92ZXJzaW9uX2luZm8odm9pZCkKK3sKKyAgICBQeU9iamVjdCAqdmVyc2lvbl9pbmZvOworICAgIGNoYXIgKnM7CisgICAgaW50IHBvcyA9IDA7CisKKyAgICB2ZXJzaW9uX2luZm8gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmVmVyc2lvbkluZm9UeXBlKTsKKyAgICBpZiAodmVyc2lvbl9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGVzZSByZWxlYXNlIGxldmVsIGNoZWNrcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCBjb3ZlcgorICAgICAqIHRoZSBmaWVsZCwgc28gZG9uJ3QgZ2V0IHRvbyBmYW5jeSB3aXRoIHRoZSBwcmUtcHJvY2Vzc29yIQorICAgICAqLworI2lmIFBZX1JFTEVBU0VfTEVWRUwgPT0gUFlfUkVMRUFTRV9MRVZFTF9BTFBIQQorICAgIHMgPSAiYWxwaGEiOworI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0JFVEEKKyAgICBzID0gImJldGEiOworI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0dBTU1BCisgICAgcyA9ICJjYW5kaWRhdGUiOworI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMCisgICAgcyA9ICJmaW5hbCI7CisjZW5kaWYKKworI2RlZmluZSBTZXRJbnRJdGVtKGZsYWcpIFwKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb25faW5mbywgcG9zKyssIFB5SW50X0Zyb21Mb25nKGZsYWcpKQorI2RlZmluZSBTZXRTdHJJdGVtKGZsYWcpIFwKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb25faW5mbywgcG9zKyssIFB5U3RyaW5nX0Zyb21TdHJpbmcoZmxhZykpCisKKyAgICBTZXRJbnRJdGVtKFBZX01BSk9SX1ZFUlNJT04pOworICAgIFNldEludEl0ZW0oUFlfTUlOT1JfVkVSU0lPTik7CisgICAgU2V0SW50SXRlbShQWV9NSUNST19WRVJTSU9OKTsKKyAgICBTZXRTdHJJdGVtKHMpOworICAgIFNldEludEl0ZW0oUFlfUkVMRUFTRV9TRVJJQUwpOworI3VuZGVmIFNldEludEl0ZW0KKyN1bmRlZiBTZXRTdHJJdGVtCisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9DTEVBUih2ZXJzaW9uX2luZm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHZlcnNpb25faW5mbzsKK30KKwogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKQEAgLTEzNTQsMjUgKzE0NjQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm5fcmV2aXNpb24pKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJkb250X3dyaXRlX2J5dGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJvb2xfRnJvbUxvbmcoUHlfRG9udFdyaXRlQnl0ZWNvZGVGbGFnKSk7Ci0gICAgLyoKLSAgICAgKiBUaGVzZSByZWxlYXNlIGxldmVsIGNoZWNrcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCBjb3ZlcgotICAgICAqIHRoZSBmaWVsZCwgc28gZG9uJ3QgZ2V0IHRvbyBmYW5jeSB3aXRoIHRoZSBwcmUtcHJvY2Vzc29yIQotICAgICAqLwotI2lmIFBZX1JFTEVBU0VfTEVWRUwgPT0gUFlfUkVMRUFTRV9MRVZFTF9BTFBIQQotICAgIHMgPSAiYWxwaGEiOwotI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0JFVEEKLSAgICBzID0gImJldGEiOwotI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0dBTU1BCi0gICAgcyA9ICJjYW5kaWRhdGUiOwotI2VsaWYgUFlfUkVMRUFTRV9MRVZFTCA9PSBQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMCi0gICAgcyA9ICJmaW5hbCI7Ci0jZW5kaWYKLQotICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb25faW5mbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlKCJpaWlzaSIsIFBZX01BSk9SX1ZFUlNJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTUlOT1JfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9NSUNST19WRVJTSU9OLCBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1JFTEVBU0VfU0VSSUFMKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYXBpX3ZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlJbnRfRnJvbUxvbmcoUFlUSE9OX0FQSV9WRVJTSU9OKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiY29weXJpZ2h0IiwKQEAgLTEzOTMsNiArMTQ4NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeUJvb2xfRnJvbUxvbmcoUHlfUHkza1dhcm5pbmdGbGFnKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZmxvYXRfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUZsb2F0X0dldEluZm8oKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklORygibG9uZ19pbmZvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19HZXRJbmZvKCkpOwogI2lmZGVmIFB5X1VTSU5HX1VOSUNPREUKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJtYXh1bmljb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5SW50X0Zyb21Mb25nKFB5VW5pY29kZV9HZXRNYXgoKSkpOwpAQCAtMTQyOSw2ICsxNTIyLDE1IEBACiAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKICAgICB9CiAKKyAgICAvKiB2ZXJzaW9uX2luZm8gKi8KKyAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gMCkKKyAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVmVyc2lvbkluZm9UeXBlLCAmdmVyc2lvbl9pbmZvX2Rlc2MpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb25faW5mbyIsIG1ha2VfdmVyc2lvbl9pbmZvKCkpOworICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KKyAgICBWZXJzaW9uSW5mb1R5cGUudHBfaW5pdCA9IE5VTEw7CisgICAgVmVyc2lvbkluZm9UeXBlLnRwX25ldyA9IE5VTEw7CisKKyAgICAvKiBmbGFncyAqLwogICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKQogICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbGFncyIsIG1ha2VfZmxhZ3MoKSk7CkBAIC0xNDM2LDYgKzE1MzgsMjUgQEAKICAgICBGbGFnc1R5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgRmxhZ3NUeXBlLnRwX25ldyA9IE5VTEw7CiAKKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAvKiBnZXR3aW5kb3dzdmVyc2lvbiAqLworICAgIGlmIChXaW5kb3dzVmVyc2lvblR5cGUudHBfbmFtZSA9PSAwKQorICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZXaW5kb3dzVmVyc2lvblR5cGUsICZ3aW5kb3dzX3ZlcnNpb25fZGVzYyk7CisgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLworICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9pbml0ID0gTlVMTDsKKyAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfbmV3ID0gTlVMTDsKKyNlbmRpZgorCisgICAgLyogZmxvYXQgcmVwciBzdHlsZTogMC4wMyAoc2hvcnQpIHZzIDAuMDI5OTk5OTk5OTk5OTk5OTk5IChsZWdhY3kpICovCisjaWZuZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbG9hdF9yZXByX3N0eWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoInNob3J0IikpOworI2Vsc2UKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbG9hdF9yZXByX3N0eWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcoImxlZ2FjeSIpKTsKKyNlbmRpZgorCiAjdW5kZWYgU0VUX1NZU19GUk9NX1NUUklORwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCAwOTdlNzJkLi4xNTc4ZjgyIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC0xMzcsMTAgKzEzNyw2IEBACiAjaW5jbHVkZSAidGhyZWFkX2Jlb3MuaCIKICNlbmRpZgogCi0jaWZkZWYgV0lOQ0VfVEhSRUFEUwotI2luY2x1ZGUgInRocmVhZF93aW5jZS5oIgotI2VuZGlmCi0KICNpZmRlZiBQTEFOOV9USFJFQURTCiAjaW5jbHVkZSAidGhyZWFkX3BsYW45LmgiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfYXRoZW9zLmggYi9QeXRob24vdGhyZWFkX2F0aGVvcy5oCmluZGV4IGMzOTBiNTcuLjIzMDU5NGYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfYXRoZW9zLmgKKysrIGIvUHl0aG9uL3RocmVhZF9hdGhlb3MuaApAQCAtMTI4LDE3ICsxMjgsMTQgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAKICAgICAvKiBUaHJlYWQtc2FmZSB3YXkgdG8gcmVhZCBhIHZhcmlhYmxlIHdpdGhvdXQgYSBtdXRleDogKi8KICAgICBpZiAoYXRvbWljX2FkZCgmdGhyZWFkX2NvdW50LCAwKSA9PSAwKSB7CiAgICAgICAgIC8qIE5vIHRocmVhZHMgYXJvdW5kLCBzbyBleGl0IG1haW4oKS4gKi8KLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBXZSdyZSBhIHRocmVhZCAqLwogICAgICAgICBleGl0X3RocmVhZCgwKTsKQEAgLTE0Niw0NCArMTQzLDYgQEAKIH0KIAogCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0KLSAgICAvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nLCB0aGUgdGhyZWFkcyBnZXQgdG9ybiBkb3duIGlmIG1haW4oKWV4aXRzLiAqLwotICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgZXhpdChzdGF0dXMpOwotfQotCi0KLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PX0VYSVRfUFJPRyAqLwotCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9iZW9zLmggYi9QeXRob24vdGhyZWFkX2Jlb3MuaAppbmRleCBlZGU0NGRmLi42NWRjNDcwIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX2Jlb3MuaAorKysgYi9QeXRob24vdGhyZWFkX2Jlb3MuaApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgcmV0dXJuICggdGlkICE9IEJfTkFNRV9OT1RfRk9VTkQgPyB0aWQgOiAtMSApOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZCggaW50IG5vX2NsZWFudXAgKQordm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCggdm9pZCApCiB7CiAgICAgaW50MzIgdGhyZWFkczsKIApAQCAtMTU1LDUyICsxNTUsMTMgQEAKIAogICAgIGlmKCB0aHJlYWRzID09IDAgKSB7CiAgICAgICAgIC8qIE5vIHRocmVhZHMgYXJvdW5kLCBzbyBleGl0IG1haW4oKS4gKi8KLSAgICAgICAgaWYoIG5vX2NsZWFudXAgKSB7Ci0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgZXhpdCgwKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBPaCwgd2UncmUgYSB0aHJlYWQsIGxldCdzIHRyeSB0byBleGl0IGdyYWNlZnVsbHkuLi4gKi8KICAgICAgICAgZXhpdF90aHJlYWQoIEJfTk9fRVJST1IgKTsKICAgICB9CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQoIHZvaWQgKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCggdm9pZCApCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coIGludCBzdGF0dXMsIGludCBub19jbGVhbnVwICkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotCi0gICAgLyogTm8gbmVlZCB0byBkbyBhbnl0aGluZywgdGhlIHRocmVhZHMgZ2V0IHRvcm4gZG93biBpZiBtYWluKCkgZXhpdHMuICovCi0KLSAgICBpZiAobm9fY2xlYW51cCkgewotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICB9Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKCBpbnQgc3RhdHVzICkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKCBpbnQgc3RhdHVzICkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX2N0aHJlYWQuaCBiL1B5dGhvbi90aHJlYWRfY3RocmVhZC5oCmluZGV4IDhjYjUwNDQuLjFiM2UzOTAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfY3RocmVhZC5oCisrKyBiL1B5dGhvbi90aHJlYWRfY3RocmVhZC5oCkBAIC01MCw1OSArNTAsMTUgQEAKICAgICByZXR1cm4gKGxvbmcpIGN0aHJlYWRfc2VsZigpOwogfQogCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0gICAgY3RocmVhZF9leGl0KDApOwotfQotCiB2b2lkCiBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYwotdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci0gICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgZWxzZQotICAgICAgICBleGl0KHN0YXR1cyk7CisgICAgICAgIGV4aXQoMCk7CisgICAgY3RocmVhZF9leGl0KDApOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX2Zvb2Jhci5oIGIvUHl0aG9uL3RocmVhZF9mb29iYXIuaAppbmRleCBjMmRmZmE2Li5kMmI3OGM1IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX2Zvb2Jhci5oCisrKyBiL1B5dGhvbi90aHJlYWRfZm9vYmFyLmgKQEAgLTI5LDU0ICsyOSwxNCBAQAogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogfQogCi1zdGF0aWMKLXZvaWQgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7Ci19Ci0KIHZvaWQKIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljCi12b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOworICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgZXhpdCgwKTsKIH0KIAotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9sd3AuaCBiL1B5dGhvbi90aHJlYWRfbHdwLmgKaW5kZXggNzUxOWNkNC4uYmE3YjM3YSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9sd3AuaAorKysgYi9QeXRob24vdGhyZWFkX2x3cC5oCkBAIC00Nyw1MCArNDcsMTQgQEAKICAgICByZXR1cm4gdGlkLnRocmVhZF9pZDsKIH0KIAotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCit2b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7CiAgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGV4aXQoMCk7CiAgICAgbHdwX2Rlc3Ryb3koU0VMRik7CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIHBvZF9leGl0KHN0YXR1cyk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX250LmggYi9QeXRob24vdGhyZWFkX250LmgKaW5kZXggNzUxMmM3My4uOTc5NmEzNCAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9udC5oCisrKyBiL1B5dGhvbi90aHJlYWRfbnQuaApAQCAtMTA0LDIwICsxMDQsMjEgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICB2b2lkICgqZnVuYykodm9pZCopOwogICAgIHZvaWQgKmFyZzsKLSAgICBsb25nIGlkOwotICAgIEhBTkRMRSBkb25lOwogfSBjYWxsb2JqOwogCi1zdGF0aWMgaW50CisvKiB0aHVua2VyIHRvIGNhbGwgYWRhcHQgYmV0d2VlbiB0aGUgZnVuY3Rpb24gdHlwZSB1c2VkIGJ5IHRoZSBzeXN0ZW0ncwordGhyZWFkIHN0YXJ0IGZ1bmN0aW9uIGFuZCB0aGUgaW50ZXJuYWxseSB1c2VkIG9uZS4gKi8KKyNpZiBkZWZpbmVkKE1TX1dJTkNFKQorc3RhdGljIERXT1JEIFdJTkFQSQorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwKKyNlbmRpZgogYm9vdHN0cmFwKHZvaWQgKmNhbGwpCiB7CiAgICAgY2FsbG9iaiAqb2JqID0gKGNhbGxvYmoqKWNhbGw7Ci0gICAgLyogY29weSBjYWxsb2JqIHNpbmNlIG90aGVyIHRocmVhZCBtaWdodCBmcmVlIGl0IGJlZm9yZSB3ZSdyZSBkb25lICovCiAgICAgdm9pZCAoKmZ1bmMpKHZvaWQqKSA9IG9iai0+ZnVuYzsKICAgICB2b2lkICphcmcgPSBvYmotPmFyZzsKLQotICAgIG9iai0+aWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7Ci0gICAgUmVsZWFzZVNlbWFwaG9yZShvYmotPmRvbmUsIDEsIE5VTEwpOworICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIG9iaik7CiAgICAgZnVuYyhhcmcpOwogICAgIHJldHVybiAwOwogfQpAQCAtMTI1LDQyICsxMjYsNTUgQEAKIGxvbmcKIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKIHsKLSAgICBQeV91aW50cHRyX3QgcnY7Ci0gICAgY2FsbG9iaiBvYmo7CisgICAgSEFORExFIGhUaHJlYWQ7CisgICAgdW5zaWduZWQgdGhyZWFkSUQ7CisgICAgY2FsbG9iaiAqb2JqOwogCiAgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCBjYWxsZWRcbiIsCiAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIAotICAgIG9iai5pZCA9IC0xOyAgICAgICAgLyogZ3VpbHR5IHVudGlsIHByb3ZlZCBpbm5vY2VudCAqLwotICAgIG9iai5mdW5jID0gZnVuYzsKLSAgICBvYmouYXJnID0gYXJnOwotICAgIG9iai5kb25lID0gQ3JlYXRlU2VtYXBob3JlKE5VTEwsIDAsIDEsIE5VTEwpOwotICAgIGlmIChvYmouZG9uZSA9PSBOVUxMKQorICAgIG9iaiA9IChjYWxsb2JqKilIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgc2l6ZW9mKCpvYmopKTsKKyAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcnYgPSBfYmVnaW50aHJlYWQoYm9vdHN0cmFwLAorICAgIG9iai0+ZnVuYyA9IGZ1bmM7CisgICAgb2JqLT5hcmcgPSBhcmc7CisjaWYgZGVmaW5lZChNU19XSU5DRSkKKyAgICBoVGhyZWFkID0gQ3JlYXRlVGhyZWFkKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKF9weXRocmVhZF9zdGFja3NpemUsIFB5X3NzaXplX3QsIFNJWkVfVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib290c3RyYXAsIG9iaiwgMCwgJnRocmVhZElEKTsKKyNlbHNlCisgICAgaFRocmVhZCA9IChIQU5ETEUpX2JlZ2ludGhyZWFkZXgoMCwKICAgICAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKF9weXRocmVhZF9zdGFja3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90LCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICZvYmopOwotICAgIGlmIChydiA9PSAoUHlfdWludHB0cl90KS0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAgIGJvb3RzdHJhcCwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgIDAsICZ0aHJlYWRJRCk7CisjZW5kaWYKKyAgICBpZiAoaFRocmVhZCA9PSAwKSB7CisjaWYgZGVmaW5lZChNU19XSU5DRSkKKyAgICAgICAgLyogU2F2ZSBlcnJvciBpbiB2YXJpYWJsZSwgdG8gcHJldmVudCBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50CisgICAgICAgICAgIGZyb20gY2xvYmJlcmluZyBpdC4gKi8KKyAgICAgICAgdW5zaWduZWQgZSA9IEdldExhc3RFcnJvcigpOworICAgICAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGZhaWxlZCwgd2luMzIgZXJyb3IgY29kZSAldVxuIiwKKyAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLCBlKSk7CisjZWxzZQogICAgICAgICAvKiBJJ3ZlIHNlZW4gZXJybm8gPT0gRUFHQUlOIGhlcmUsIHdoaWNoIG1lYW5zICJ0aGVyZSBhcmUKICAgICAgICAgICogdG9vIG1hbnkgdGhyZWFkcyIuCiAgICAgICAgICAqLwotICAgICAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGZhaWxlZDogJXAgZXJybm8gJWRcbiIsCi0gICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwgKHZvaWQqKXJ2LCBlcnJubykpOwotICAgICAgICBvYmouaWQgPSAtMTsKKyAgICAgICAgaW50IGUgPSBlcnJubzsKKyAgICAgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCBmYWlsZWQsIGVycm5vICVkXG4iLAorICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksIGUpKTsKKyNlbmRpZgorICAgICAgICB0aHJlYWRJRCA9ICh1bnNpZ25lZCktMTsKKyAgICAgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgb2JqKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgc3VjY2VlZGVkOiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLCAodm9pZCopcnYpKTsKLSAgICAgICAgLyogd2FpdCBmb3IgdGhyZWFkIHRvIGluaXRpYWxpemUsIHNvIHdlIGNhbiBnZXQgaXRzIGlkICovCi0gICAgICAgIFdhaXRGb3JTaW5nbGVPYmplY3Qob2JqLmRvbmUsIElORklOSVRFKTsKLSAgICAgICAgYXNzZXJ0KG9iai5pZCAhPSAtMSk7CisgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwgKHZvaWQqKWhUaHJlYWQpKTsKKyAgICAgICAgQ2xvc2VIYW5kbGUoaFRocmVhZCk7CiAgICAgfQotICAgIENsb3NlSGFuZGxlKChIQU5ETEUpb2JqLmRvbmUpOwotICAgIHJldHVybiBvYmouaWQ7CisgICAgcmV0dXJuIChsb25nKSB0aHJlYWRJRDsKIH0KIAogLyoKQEAgLTE3Niw1NSArMTkwLDE5IEBACiAgICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwogfQogCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLCBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLCBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgZXhpdCgwKTsKKyNpZiBkZWZpbmVkKE1TX1dJTkNFKQorICAgIEV4aXRUaHJlYWQoMCk7CisjZWxzZQorICAgIF9lbmR0aHJlYWRleCgwKTsKKyNlbmRpZgogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LiBJdCBoYXMgdG9vIGJlIGltcGxlbWVudGVkIGFzIHNlbWFwaG9yZXMuCiAgKiBJIFtEYWddIHRyaWVkIHRvIGltcGxlbWVudCBpdCB3aXRoIG11dGV4IGJ1dCBJIGNvdWxkIGZpbmQgYSB3YXkgdG8KQEAgLTMwOSwzICsyODcsNzMgQEAKIH0KIAogI2RlZmluZSBUSFJFQURfU0VUX1NUQUNLU0laRSh4KSBfcHl0aHJlYWRfbnRfc2V0X3N0YWNrc2l6ZSh4KQorCisKKy8qIHVzZSBuYXRpdmUgV2luZG93cyBUTFMgZnVuY3Rpb25zICovCisjZGVmaW5lIFB5X0hBVkVfTkFUSVZFX1RMUworCisjaWZkZWYgUHlfSEFWRV9OQVRJVkVfVExTCitpbnQKK1B5VGhyZWFkX2NyZWF0ZV9rZXkodm9pZCkKK3sKKyAgICByZXR1cm4gKGludCkgVGxzQWxsb2MoKTsKK30KKwordm9pZAorUHlUaHJlYWRfZGVsZXRlX2tleShpbnQga2V5KQoreworICAgIFRsc0ZyZWUoa2V5KTsKK30KKworLyogV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGVtdWxhdGUgdGhlIHN0cmFuZ2Ugc2VtYW50aWNzIGltcGxlbWVudGVkIGluIHRocmVhZC5jLAorICogd2hlcmUgdGhlIHZhbHVlIGlzIG9ubHkgc2V0IGlmIGl0IGhhc24ndCBiZWVuIHNldCBiZWZvcmUuCisgKi8KK2ludAorUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKK3sKKyAgICBCT09MIG9rOworICAgIHZvaWQgKm9sZHZhbHVlOworCisgICAgYXNzZXJ0KHZhbHVlICE9IE5VTEwpOworICAgIG9sZHZhbHVlID0gVGxzR2V0VmFsdWUoa2V5KTsKKyAgICBpZiAob2xkdmFsdWUgIT0gTlVMTCkKKyAgICAgICAgLyogaWdub3JlIHZhbHVlIGlmIGFscmVhZHkgc2V0ICovCisgICAgICAgIHJldHVybiAwOworICAgIG9rID0gVGxzU2V0VmFsdWUoa2V5LCB2YWx1ZSk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiAwOworfQorCit2b2lkICoKK1B5VGhyZWFkX2dldF9rZXlfdmFsdWUoaW50IGtleSkKK3sKKyAgICAvKiBiZWNhdXNlIFRMUyBpcyB1c2VkIGluIHRoZSBQeV9FTkRfQUxMT1dfVEhSRUFEIG1hY3JvLAorICAgICAqIGl0IGlzIG5lY2Vzc2FyeSB0byBwcmVzZXJ2ZSB0aGUgd2luZG93cyBlcnJvciBzdGF0ZSwgYmVjYXVzZQorICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gYmUgcHJlc2VydmVkIGFjcm9zcyB0aGUgY2FsbCB0byB0aGUgbWFjcm8uCisgICAgICogSWRlYWxseSwgdGhlIG1hY3JvIHNob3VsZCBiZSBmaXhlZCwgYnV0IGl0IGlzIHNpbXBsZXIgdG8KKyAgICAgKiBkbyBpdCBoZXJlLgorICAgICAqLworICAgIERXT1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgdm9pZCAqcmVzdWx0ID0gVGxzR2V0VmFsdWUoa2V5KTsKKyAgICBTZXRMYXN0RXJyb3IoZXJyb3IpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK1B5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUoaW50IGtleSkKK3sKKyAgICAvKiBOVUxMIGlzIHVzZWQgYXMgImtleSBtaXNzaW5nIiwgYW5kIGl0IGlzIGFsc28gdGhlIGRlZmF1bHQKKyAgICAgKiBnaXZlbiBieSBUbHNHZXRWYWx1ZSgpIGlmIG5vdGhpbmcgaGFzIGJlZW4gc2V0IHlldC4KKyAgICAgKi8KKyAgICBUbHNTZXRWYWx1ZShrZXksIE5VTEwpOworfQorCisvKiByZWluaXRpYWxpemF0aW9uIG9mIFRMUyBpcyBub3QgbmVjZXNzYXJ5IGFmdGVyIGZvcmsgd2hlbiB1c2luZworICogdGhlIG5hdGl2ZSBUTFMgZnVuY3Rpb25zLiAgQW5kIGZvcmtpbmcgaXNuJ3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZWl0aGVyLgorICovCit2b2lkCitQeVRocmVhZF9SZUluaXRUTFModm9pZCkKK3t9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9vczIuaCBiL1B5dGhvbi90aHJlYWRfb3MyLmgKaW5kZXggMjgyODRiYi4uMWIyNjRiNSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9vczIuaAorKysgYi9QeXRob24vdGhyZWFkX29zMi5oCkBAIC02OCw1NiArNjgsMTYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCit2b2lkCitQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewogICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIiwKICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOworICAgICAgICBleGl0KDApOwogICAgIF9lbmR0aHJlYWQoKTsKIH0KIAotdm9pZAotUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuICBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggYW4gZXZlbnQgc2VtYXBob3JlIGFuZCBjcml0aWNhbAogICogc2VjdGlvbnMgdG8gbWFrZSBpdCBiZWhhdmUgbW9yZSBsaWtlIGEgcG9zaXggbXV0ZXggdGhhbiBpdHMgT1MvMgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGguaCBiL1B5dGhvbi90aHJlYWRfcHRoLmgKaW5kZXggMWYxNjk0YS4uODJhMDBlNyAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGguaAorKysgYi9QeXRob24vdGhyZWFkX3B0aC5oCkBAIC03NCw0OSArNzQsMTQgQEAKICAgICByZXR1cm4gKGxvbmcpICoobG9uZyAqKSAmdGhyZWFkaWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQordm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewogICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGV4aXQoMCk7CiAgICAgfQogfQogCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKaW5kZXggMzJmZDJkMC4uZWY0OWEzMCAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKKysrIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKQEAgLTIyNSw1NSArMjI1LDE1IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQKLWRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0gICAgfQotfQotCiB2b2lkCiBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOworICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGV4aXQoMCk7CisgICAgfQogfQogCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogI2lmZGVmIFVTRV9TRU1BUEhPUkVTCiAKIC8qCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3NnaS5oIGIvUHl0aG9uL3RocmVhZF9zZ2kuaAppbmRleCA2NzlkMTEzLi43NzFhYjJjIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3NnaS5oCisrKyBiL1B5dGhvbi90aHJlYWRfc2dpLmgKQEAgLTE3LDkgKzE3LDYgQEAKIHN0YXRpYyBpbnQgd2FpdGluZ19mb3JfdGhyZWFkczsgLyogcHJvdGVjdGVkIGJ5IGNvdW50X2xvY2sgKi8KIHN0YXRpYyBpbnQgbnRocmVhZHM7ICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGNvdW50X2xvY2sgKi8KIHN0YXRpYyBpbnQgZXhpdF9zdGF0dXM7Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIGludCBkb19leGl0OyAgICAgICAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvZ3JhbSBpcyB0byBleGl0ICovCi0jZW5kaWYKIHN0YXRpYyBpbnQgZXhpdGluZzsgICAgICAgICAgICAgLyogd2UncmUgYWxyZWFkeSBleGl0aW5nIChmb3IgbWF5YmVfZXhpdCkgKi8KIHN0YXRpYyBwaWRfdCBteV9waWQ7ICAgICAgICAgICAgLyogUElEIG9mIG1haW4gdGhyZWFkICovCiBzdGF0aWMgc3RydWN0IHBpZGxpc3QgewpAQCAtMjcsNTMgKzI0LDExIEBACiAgICAgcGlkX3QgY2hpbGQ7CiB9IHBpZGxpc3RbTUFYUFJPQ107ICAgICAvKiBQSURzIG9mIG90aGVyIHRocmVhZHM7IHByb3RlY3RlZCBieSBjb3VudF9sb2NrICovCiBzdGF0aWMgaW50IG1heHBpZGluZGV4OyAgICAgICAgIC8qICMgb2YgUElEcyBpbiBwaWRsaXN0ICovCi0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhcyBhIHNpZ25hbCBoYW5kbGVyIHdoZW4gYW5vdGhlciB0aHJlYWQKLSAqIGV4aXRzLiAgV2hlbiB0aGF0IGhhcHBlbnMsIHdlIG11c3Qgc2VlIHdoZXRoZXIgd2UgaGF2ZSB0byBleGl0IGFzCi0gKiB3ZWxsIChiZWNhdXNlIG9mIGFuIFB5VGhyZWFkX2V4aXRfcHJvZygpKSBvciB3aGV0aGVyIHdlIHNob3VsZCBjb250aW51ZSBvbi4KLSAqLwotc3RhdGljIHZvaWQgZXhpdF9zaWcodm9pZCkKLXsKLSAgICBkMnByaW50ZigoImV4aXRfc2lnIGNhbGxlZFxuIikpOwotICAgIGlmIChleGl0aW5nICYmIGdldHBpZCgpID09IG15X3BpZCkgewotICAgICAgICBkMnByaW50ZigoImFscmVhZHkgZXhpdGluZ1xuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkb19leGl0KSB7Ci0gICAgICAgIGQycHJpbnRmKCgiZXhpdGluZyBpbiBleGl0X3NpZ1xuIikpOwotI2lmZGVmIFB5X0RFQlVHCi0gICAgICAgIGlmICgodGhyZWFkX2RlYnVnICYgOCkgPT0gMCkKLSAgICAgICAgICAgIHRocmVhZF9kZWJ1ZyAmPSB+MTsgLyogZG9uJ3QgcHJvZHVjZSBkZWJ1ZyBtZXNzYWdlcyAqLwotI2VuZGlmCi0gICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCk7Ci0gICAgfQotfQotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcHJvY2VzcyBjYWxscyBleGl0KCkuICBJZiB0aGF0IHdhc24ndAotICogZG9uZSBmcm9tIHRoZSBsaWJyYXJ5LCB3ZSBkbyBhcyBpZiBhbiBQeVRocmVhZF9leGl0X3Byb2coKSB3YXMgaW50ZW5kZWQuCi0gKi8KLXN0YXRpYyB2b2lkIG1heWJlX2V4aXQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgibWF5YmVfZXhpdCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoZXhpdGluZykgewotICAgICAgICBkcHJpbnRmKCgiYWxyZWFkeSBleGl0aW5nXG4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUHlUaHJlYWRfZXhpdF9wcm9nKDApOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogSW5pdGlhbGl6YXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQogewotI2lmbmRlZiBOT19FWElUX1BST0cKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHM7Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCiAjaWZkZWYgVVNFX0RMCiAgICAgbG9uZyBhZGRyLCBzaXplOwogI2VuZGlmIC8qIFVTRV9ETCAqLwpAQCAtOTMsMTYgKzQ4LDYgQEAKICAgICBpZiAodXNjb25maWcoQ09ORl9JTklUVVNFUlMsIDE2KSA8IDApCiAgICAgICAgIHBlcnJvcigidXNjb25maWcgLSBDT05GX0lOSVRVU0VSUyIpOwogICAgIG15X3BpZCA9IGdldHBpZCgpOyAgICAgICAgICAvKiBzbyB0aGF0IHdlIGtub3cgd2hpY2ggaXMgdGhlIG1haW4gdGhyZWFkICovCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgIGF0ZXhpdChtYXliZV9leGl0KTsKLSAgICBzLnNhX2hhbmRsZXIgPSBleGl0X3NpZzsKLSAgICBzaWdlbXB0eXNldCgmcy5zYV9tYXNrKTsKLSAgICAvKnNpZ2FkZHNldCgmcy5zYV9tYXNrLCBTSUdVU1IxKTsqLwotICAgIHMuc2FfZmxhZ3MgPSAwOwotICAgIHNpZ2FjdGlvbihTSUdVU1IxLCAmcywgMCk7Ci0gICAgaWYgKHByY3RsKFBSX1NFVEVYSVRTSUcsIFNJR1VTUjEpIDwgMCkKLSAgICAgICAgcGVycm9yKCJwcmN0bCAtIFBSX1NFVEVYSVRTSUciKTsKLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KICAgICBpZiAodXNjb25maWcoQ09ORl9BUkVOQVRZUEUsIFVTX1NIQVJFRE9OTFkpIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c2NvbmZpZyAtIENPTkZfQVJFTkFUWVBFIik7CiAgICAgdXNjb25maWcoQ09ORl9MT0NLVFlQRSwgVVNfREVCVUcpOyAvKiBYWFggKi8KQEAgLTIyNyw0NiArMTcyLDI0IEBACiAgICAgcmV0dXJuIGdldHBpZCgpOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICBpZiAodXNzZXRsb2NrKGNvdW50X2xvY2spIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c3NldGxvY2sgKGNvdW50X2xvY2spIik7CiAgICAgbnRocmVhZHMtLTsKICAgICBpZiAoZ2V0cGlkKCkgPT0gbXlfcGlkKSB7CiAgICAgICAgIC8qIG1haW4gdGhyZWFkOyB3YWl0IGZvciBvdGhlciB0aHJlYWRzIHRvIGV4aXQgKi8KICAgICAgICAgZXhpdGluZyA9IDE7Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgICAgICBpZiAoZG9fZXhpdCkgewotICAgICAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgICAgIC8qIG5vdGlmeSBvdGhlciB0aHJlYWRzICovCi0gICAgICAgICAgICBjbGVhbl90aHJlYWRzKCk7Ci0gICAgICAgICAgICBpZiAobnRocmVhZHMgPj0gMCkgewotICAgICAgICAgICAgICAgIGRwcmludGYoKCJraWxsIG90aGVyIHRocmVhZHNcbiIpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF4cGlkaW5kZXg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBpZGxpc3RbaV0uY2hpbGQgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGtpbGwocGlkbGlzdFtpXS5jaGlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJR0tJTEwpOwotICAgICAgICAgICAgICAgIF9leGl0KGV4aXRfc3RhdHVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwogICAgICAgICB3YWl0aW5nX2Zvcl90aHJlYWRzID0gMTsKICAgICAgICAgaWYgKHVzc2V0bG9jayh3YWl0X2xvY2spIDwgMCkKICAgICAgICAgICAgIHBlcnJvcigidXNzZXRsb2NrICh3YWl0X2xvY2spIik7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGlmIChudGhyZWFkcyA8IDApIHsKICAgICAgICAgICAgICAgICBkcHJpbnRmKCgicmVhbGx5IGV4aXQgKCVkKVxuIiwgZXhpdF9zdGF0dXMpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgICAgICAgICAgX2V4aXQoZXhpdF9zdGF0dXMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhpdChleGl0X3N0YXR1cyk7CisgICAgICAgICAgICAgICAgZXhpdChleGl0X3N0YXR1cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodXN1bnNldGxvY2soY291bnRfbG9jaykgPCAwKQogICAgICAgICAgICAgICAgIHBlcnJvcigidXN1bnNldGxvY2sgKGNvdW50X2xvY2spIik7CkBAIC0yODMsNTAgKzIwNiwxMSBAQAogICAgICAgICBpZiAodXN1bnNldGxvY2sod2FpdF9sb2NrKSA8IDApCiAgICAgICAgICAgICBwZXJyb3IoInVzdW5zZXRsb2NrICh3YWl0X2xvY2spIik7CiAgICAgfQotI2lmbmRlZiBOT19FWElUX1BST0cKLSAgICBlbHNlIGlmIChkb19leGl0KQotICAgICAgICAodm9pZCkga2lsbChteV9waWQsIFNJR1VTUjEpOwotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwogICAgIGlmICh1c3Vuc2V0bG9jayhjb3VudF9sb2NrKSA8IDApCiAgICAgICAgIHBlcnJvcigidXN1bnNldGxvY2sgKGNvdW50X2xvY2spIik7CiAgICAgX2V4aXQoMCk7CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIGRvX2V4aXQgPSAxOwotICAgIGV4aXRfc3RhdHVzID0gc3RhdHVzOwotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKG5vX2NsZWFudXApOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9zb2xhcmlzLmggYi9QeXRob24vdGhyZWFkX3NvbGFyaXMuaAppbmRleCA1NmFjOGFlLi4xY2UxY2ZjIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3NvbGFyaXMuaAorKysgYi9QeXRob24vdGhyZWFkX3NvbGFyaXMuaApAQCAtNjQsNTkgKzY0LDE1IEBACiAgICAgcmV0dXJuIHRocl9zZWxmKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICB0aHJfZXhpdCgwKTsKLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOworICAgIHRocl9leGl0KDApOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3dpbmNlLmggYi9QeXRob24vdGhyZWFkX3dpbmNlLmgKaW5kZXggMzNjZjVhNC4uNTFkZGMwMiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF93aW5jZS5oCisrKyBiL1B5dGhvbi90aHJlYWRfd2luY2UuaApAQCAtNTMsNDkgKzUzLDE0IEBACiAgICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiJWxkOiBkb19QeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgZXhpdCgwKTsgLyogWFhYIC0gd2FzIF9leGl0KCkhISAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KLQogdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLCBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgZXhpdCgwKTsKKyAgICBfZW5kdGhyZWFkKCk7CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LiBJdCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgdXNpbmcgTXV0ZXhlcywgYXMKICAqIENFIGRvZXNudCBzdXBwb3J0IHNlbWFwaG9yZXMuICBUaGVyZWZvcmUgd2UgdXNlIHNvbWUgaGFja3MgdG8KZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCBhNjBhMTgzLi5hZGZkNjZjIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC05Niw4ICs5Niw3IEBACiAgICAgICAgIFB5X1hJTkNSRUYoZnJhbWUpOwogICAgICAgICB0Yi0+dGJfZnJhbWUgPSBmcmFtZTsKICAgICAgICAgdGItPnRiX2xhc3RpID0gZnJhbWUtPmZfbGFzdGk7Ci0gICAgICAgIHRiLT50Yl9saW5lbm8gPSBQeUNvZGVfQWRkcjJMaW5lKGZyYW1lLT5mX2NvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5mX2xhc3RpKTsKKyAgICAgICAgdGItPnRiX2xpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihmcmFtZSk7CiAgICAgICAgIFB5T2JqZWN0X0dDX1RyYWNrKHRiKTsKICAgICB9CiAgICAgcmV0dXJuIHRiOwpAQCAtMTYyLDcgKzE2MSw2IEBACiAgICAgICAgICAgICAgICAgICAgIHN0cmNweShuYW1lYnVmK2xlbiwgdGFpbCk7CiAgICAgICAgICAgICAgICAgICAgIHhmcCA9IGZvcGVuKG5hbWVidWYsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHhmcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG5hbWVidWY7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA2ZGIxOWZhLi5kOWNkZmY5IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotVGhpcyBpcyBQeXRob24gdmVyc2lvbiAyLjYuNgorVGhpcyBpcyBQeXRob24gdmVyc2lvbiAyLjcuMQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKQEAgLTIyNSw3ICsyMjUsNyBAQAogVW5zdXBwb3J0ZWQgc3lzdGVtcwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BIG51bWJlciBvZiBzeXN0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIuNiBhbnltb3JlLiBTb21lCitBIG51bWJlciBvZiBzeXN0ZW1zIGFyZSBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbiAyLjcgYW55bW9yZS4gU29tZQogc3VwcG9ydCBjb2RlIGlzIHN0aWxsIHByZXNlbnQsIGJ1dCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgdmVyc2lvbnMuCiBJZiB5b3Ugc3RpbGwgbmVlZCB0byB1c2UgY3VycmVudCBQeXRob24gdmVyc2lvbnMgb24gdGhlc2Ugc3lzdGVtcywKIHBsZWFzZSBzZW5kIGEgbWVzc2FnZSB0byBweXRob24tZGV2QHB5dGhvbi5vcmcgaW5kaWNhdGluZyB0aGF0IHlvdQpAQCAtMjQ4LDI0ICsyNDgsOSBAQAogLSBTeXN0ZW1zIHVzaW5nIC0td2l0aC1kbC1kbGQKIC0gU3lzdGVtcyB1c2luZyAtLXdpdGhvdXQtdW5pdmVyc2FsLW5ld2xpbmVzCiAtIE1hY09TIDkKLQotVGhlIGZvbGxvd2luZyBzeXN0ZW1zIGFyZSBzdGlsbCBzdXBwb3J0ZWQgaW4gUHl0aG9uIDIuNSwgYnV0Ci1zdXBwb3J0IHdpbGwgYmUgZHJvcHBlZCBpbiAyLjY6CiAtIFN5c3RlbXMgdXNpbmcgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMKIC0gV2luOXgsIFdpbk1FCiAKLVdhcm5pbmcgb24gaW5zdGFsbCBpbiBXaW5kb3dzIDk4IGFuZCBXaW5kb3dzIE1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb2xsb3dpbmcgTWljcm9zb2Z0J3MgY2xvc2luZyBvZiBFeHRlbmRlZCBTdXBwb3J0IGZvcgotV2luZG93cyA5OC9NRSAoSnVseSAxMSwgMjAwNiksIFB5dGhvbiAyLjYgd2lsbCBzdG9wCi1zdXBwb3J0aW5nIHRoZXNlIHBsYXRmb3Jtcy4gUHl0aG9uIGRldmVsb3BtZW50IGFuZAotbWFpbnRhaW5hYmlsaXR5IGJlY29tZXMgZWFzaWVyIChhbmQgbW9yZSByZWxpYWJsZSkgd2hlbgotcGxhdGZvcm0gc3BlY2lmaWMgY29kZSB0YXJnZXRpbmcgT1NlcyB3aXRoIGZldyB1c2VycwotYW5kIG5vIGRlZGljYXRlZCBleHBlcnQgZGV2ZWxvcGVycyBpcyB0YWtlbiBvdXQuIFRoZQotdmVuZG9yIGFsc28gd2FybnMgdGhhdCB0aGUgT1MgdmVyc2lvbnMgbGlzdGVkIGFib3ZlCi0iY2FuIGV4cG9zZSBjdXN0b21lcnMgdG8gc2VjdXJpdHkgcmlza3MiIGFuZCByZWNvbW1lbmRzCi11cGdyYWRlLgogCiBQbGF0Zm9ybSBzcGVjaWZpYyBub3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0NywxNCArNTMyLDYgQEAKICAgICAgICAgYW5kIHR5cGUgTk1BS0UuICBUaHJlYWRpbmcgYW5kIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBieSBkZWZhdWx0CiAgICAgICAgIGluIHRoZSByZXN1bHRpbmcgYmluYXJpZXMgb2YgUFlUSE9OMTUuRExMIGFuZCBQWVRIT04uRVhFLgogCi1Nb250ZXJleSAoNjQtYml0IEFJWCk6IFRoZSBjdXJyZW50IE1vbnRlcmV5IEMgY29tcGlsZXIgKFZpc3VhbCBBZ2UpCi0gICAgICAgIHVzZXMgdGhlIE9CSkVDVF9NT0RFPXszMnw2NH0gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHRoZQotICAgICAgICBjb21waWxhdGlvbiBtb2RlIHRvIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0ICgzMi1iaXQgbW9kZSBpcwotICAgICAgICB0aGUgZGVmYXVsdCkuICBQcmVzdW1hYmx5IHlvdSB3YW50IDY0LWJpdCBjb21waWxhdGlvbiBtb2RlIGZvcgotICAgICAgICB0aGlzIDY0LWJpdCBPUy4gIEFzIGEgcmVzdWx0IHlvdSBtdXN0IGZpcnN0IHNldCBPQkpFQ1RfTU9ERT02NAotICAgICAgICBpbiB5b3VyIGVudmlyb25tZW50IGJlZm9yZSBjb25maWd1cmluZyAoLi9jb25maWd1cmUpIG9yCi0gICAgICAgIGJ1aWxkaW5nIChtYWtlKSBQeXRob24gb24gTW9udGVyZXkuCi0KIFJlbGlhbnQgVU5JWDogVGhlIHRocmVhZCBzdXBwb3J0IGRvZXMgbm90IGNvbXBpbGUgb24gUmVsaWFudCBVTklYLCBhbmQKICAgICAgICAgdGhlcmUgaXMgYSAobWlub3IpIHByb2JsZW0gaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIHRoYXQKICAgICAgICAgcGxhdGZvcm0gYXMgd2VsbC4gIFRoaXMgc2hvdWxkIGJlIHJlc29sdmVkIGluIHRpbWUgZm9yIGEKQEAgLTEwODMsNiArMTA2MCw5IEBACiAtLXdpdGgtc3lzdGVtLWZmaTogIEJ1aWxkIHRoZSBfY3R5cGVzIGV4dGVuc2lvbiBtb2R1bGUgdXNpbmcgYW4gZmZpCiAgICAgICAgIGxpYnJhcnkgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCiAKKy0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLjogIFNwZWNpZnkgdGhlIG9yZGVyIHRoYXQgYmFja2VuZHMgZm9yIHRoZQorCWRibSBleHRlbnNpb24gYXJlIGNoZWNrZWQuIFZhbGlkIHZhbHVlIGlzIGEgY29sb24gc2VwYXJhdGVkIHN0cmluZworCXdpdGggdGhlIGJhY2tlbmQgbmFtZXMgYG5kYm0nLCBgZ2RibScgYW5kIGBiZGInLgogCiBCdWlsZGluZyBmb3IgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAodXNpbmcgdGhlIFZQQVRIIGZlYXR1cmUpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTY3LDE2ICsxMTQ3LDEwIEBACiAtLS0tLS0tLS0tCiAKIFRoZXJlJ3MgYW4gZXhjZWxsZW50IEVtYWNzIGVkaXRpbmcgbW9kZSBmb3IgUHl0aG9uIGNvZGU7IHNlZSB0aGUgZmlsZQotTWlzYy9weXRob24tbW9kZS5lbC4gIE9yaWdpbmFsbHkgd3JpdHRlbiBieSB0aGUgZmFtb3VzIFRpbSBQZXRlcnMsIGl0Ci1pcyBub3cgbWFpbnRhaW5lZCBieSB0aGUgZXF1YWxseSBmYW1vdXMgQmFycnkgV2Fyc2F3IChpdCdzIG5vCi1jb2luY2lkZW5jZSB0aGF0IHRoZXkgbm93IGJvdGggd29yayBvbiB0aGUgc2FtZSB0ZWFtKS4gIFRoZSBsYXRlc3QKLXZlcnNpb24sIGFsb25nIHdpdGggdmFyaW91cyBvdGhlciBjb250cmlidXRlZCBQeXRob24tcmVsYXRlZCBFbWFjcwotZ29vZGllcywgaXMgb25saW5lIGF0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9lbWFjcy9weXRob24tbW9kZS8uICBBbmQKLWlmIHlvdSBhcmUgcGxhbm5pbmcgdG8gZWRpdCB0aGUgUHl0aG9uIEMgY29kZSwgcGxlYXNlIHBpY2sgdXAgdGhlCi1sYXRlc3QgdmVyc2lvbiBvZiBDQyBNb2RlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9lbWFjcy9jYy1tb2RlLzsgaXQKLWNvbnRhaW5zIGEgInB5dGhvbiIgc3R5bGUgdXNlZCB0aHJvdWdob3V0IG1vc3Qgb2YgdGhlIFB5dGhvbiBDIHNvdXJjZQotZmlsZXMuICAoTmV3ZXIgdmVyc2lvbnMgb2YgRW1hY3Mgb3IgWEVtYWNzIG1heSBhbHJlYWR5IGNvbWUgd2l0aCB0aGUKLWxhdGVzdCB2ZXJzaW9uIG9mIHB5dGhvbi1tb2RlLikKK01pc2MvcHl0aG9uLW1vZGUuZWwuICBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgdGhlIGZhbW91cyBUaW0gUGV0ZXJzLCBpdCBpcyBub3cKK21haW50YWluZWQgYnkgdGhlIGVxdWFsbHkgZmFtb3VzIEJhcnJ5IFdhcnNhdy4gIFRoZSBsYXRlc3QgdmVyc2lvbiwgYWxvbmcgd2l0aAordmFyaW91cyBvdGhlciBjb250cmlidXRlZCBQeXRob24tcmVsYXRlZCBFbWFjcyBnb29kaWVzLCBpcyBvbmxpbmUgYXQKK2h0dHA6Ly9sYXVuY2hwYWQubmV0L3B5dGhvbi1tb2RlLy4KIAogCiBUa2ludGVyCmRpZmYgLS1naXQgYS9SSVNDT1MvTWFrZWZpbGUgYi9SSVNDT1MvTWFrZWZpbGUKaW5kZXggMTc4OGI1Yy4uYmQ2M2UzOCAxMDA2NDQKLS0tIGEvUklTQ09TL01ha2VmaWxlCisrKyBiL1JJU0NPUy9NYWtlZmlsZQpAQCAtMTM1LDcgKzEzNSw2IEBACiBPQkpFQ1RTX1JJU0NPUyA9IFwKIAlALlB5dGhvbi5vLmR5bmxvYWRfcmlzY29zXAogCUAuUHl0aG9uLm8uZ2V0Y3dkX3Jpc2Nvc1wKLQlALlB5dGhvbi5vLmdldG10aW1lX3Jpc2Nvc1wKIAlALm8udW5peHN0dWZmCiAKIApkaWZmIC0tZ2l0IGEvUklTQ09TL1B5dGhvbi9nZXRtdGltZV9yaXNjb3MuYyBiL1JJU0NPUy9QeXRob24vZ2V0bXRpbWVfcmlzY29zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNTM2MzguLjAwMDAwMDAKLS0tIGEvUklTQ09TL1B5dGhvbi9nZXRtdGltZV9yaXNjb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jZGVmaW5lIF9fc3dpCi0jaW5jbHVkZSAib3NsaWIvb3NmaWxlLmgiCi0KLWxvbmcgUHlPU19HZXRMYXN0TW9kaWZpY2F0aW9uVGltZShjaGFyICpwYXRoLCBGSUxFICpmcCkKLXsKLSAgaW50IG9iajsKLSAgYml0cyBsb2FkLCBleGVjLCBmdHlwZTsKLQotICBpZiAoeG9zZmlsZV9yZWFkX3N0YW1wZWRfbm9fcGF0aChwYXRoLCAmb2JqLCAmbG9hZCwgJmV4ZWMsIDAsIDAsICZmdHlwZSkpIHJldHVybiAtMTsKLSAgaWYgKG9iaiAhPSBvc2ZpbGVfSVNfRklMRSkgcmV0dXJuIC0xOwotICBpZiAoZnR5cGUgPT0gb3NmaWxlX1RZUEVfVU5UWVBFRCkgcmV0dXJuIC0xOwotCi0gIGxvYWQgJj0gMHhGRjsKLSAgbG9hZCAtPSA1MTsKLSAgaWYgKGV4ZWMgPCAxODU1NTQ4MDA0VSkgbG9hZC0tOwotICBleGVjIC09IDE4NTU1NDgwMDRVOwotICByZXR1cm4gZXhlYy8xMDArNDI5NDk2NzIqbG9hZCsoOTUqbG9hZCkvMTAwOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUkVBRE1FIGIvVG9vbHMvUkVBRE1FCmluZGV4IDZlMDI3NmMuLjFmYjAxMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1JFQURNRQorKysgYi9Ub29scy9SRUFETUUKQEAgLTIwLDE5ICsyMCwyMCBAQAogCiBmcmVlemUJCUNyZWF0ZSBhIHN0YW5kLWFsb25lIGV4ZWN1dGFibGUgZnJvbSBhIFB5dGhvbiBwcm9ncmFtLgogCitnZGIgICAgICAgICAgICAgUHl0aG9uIGNvZGUgdG8gYmUgcnVuIGluc2lkZSBnZGIsIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgICAgICAgICAgICAgICAgZGVidWcgUHl0aG9uIGl0c2VsZiAoYnkgRGF2aWQgTWFsY29sbSkuCisKIGkxOG4JCVRvb2xzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4gcHlnZXR0ZXh0LnB5IAogCQlwYXJzZXMgUHl0aG9uIHNvdXJjZSBjb2RlIGFuZCBnZW5lcmF0ZXMgLnBvdCBmaWxlcywKIAkJYW5kIG1zZ2ZtdC5weSBnZW5lcmF0ZXMgYSBiaW5hcnkgbWVzc2FnZSBjYXRhbG9nIAogCQlmcm9tIGEgY2F0YWxvZyBpbiB0ZXh0IGZvcm1hdC4KIAotbW9kdWxhdG9yCUludGVyYWN0aXZlbHkgZ2VuZXJhdGUgYm9pbGVyIHBsYXRlIGZvciBhbiBleHRlbnNpb24KLQkJbW9kdWxlLgkgV29ya3MgZWFzaWVzdCBpZiB5b3UgaGF2ZSBUay4KLQogcHluY2hlCQlBIFRraW50ZXItYmFzZWQgY29sb3IgZWRpdG9yLgogCi1zY3JpcHRzCQlBIG51bWJlciBvZiB1c2VmdWwgc2luZ2xlLWZpbGUgcHJvZ3JhbXMsIGUuZy4gdGFibmFubnkucHkKLQkJKGJ5IFRpbSBQZXRlcnMpLCB3aGljaCBjaGVja3MgZm9yIGluY29uc2lzdGVudCBtaXhpbmcKLQkJb2YgdGFicyBhbmQgc3BhY2VzLgorc2NyaXB0cyAgICAgICAgIEEgbnVtYmVyIG9mIHVzZWZ1bCBzaW5nbGUtZmlsZSBwcm9ncmFtcywgZS5nLiB0YWJuYW5ueS5weQorICAgICAgICAgICAgICAgIGJ5IFRpbSBQZXRlcnMsIHdoaWNoIGNoZWNrcyBmb3IgaW5jb25zaXN0ZW50IG1peGluZyBvZgorICAgICAgICAgICAgICAgIHRhYnMgYW5kIHNwYWNlcywgYW5kIDJ0bzMsIHdoaWNoIGNvbnZlcnRzIFB5dGhvbiAyIGNvZGUKKyAgICAgICAgICAgICAgICB0byBQeXRob24gMyBjb2RlLgogCiB1bmljb2RlCQlUb29scyB1c2VkIHRvIGdlbmVyYXRlIHVuaWNvZGUgZGF0YWJhc2UgZmlsZXMgZm9yCiAJCVB5dGhvbiAyLjAgKGJ5IEZyZWRyaWsgTHVuZGgpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0IGIvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0CmluZGV4IDIzZjE1MzUuLmEwZjQzYTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQKQEAgLTExLDcgKzExLDcgQEAKIGJhc2guZXhlIC1jICdjZCBEb2M7bWFrZSBQWVRIT049cHl0aG9uMi41IHVwZGF0ZSBodG1saGVscCcKICIlUHJvZ3JhbUZpbGVzJVxIVE1MIEhlbHAgV29ya3Nob3BcaGhjLmV4ZSIgRG9jXGJ1aWxkXGh0bWxoZWxwXHB5dGhvbjI2YTMuaGhwCiAKLUByZW0gYnVvbGQgdGhlIE1TSSBmaWxlCitAcmVtIGJ1aWxkIHRoZSBNU0kgZmlsZQogY2QgUEMKIG5tYWtlIC9mIGljb25zLm1hawogY2QgLi5cVG9vbHNcbXNpCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdAppbmRleCBjNjdlZmRmLi44MzQ5MjBlIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKQEAgLTE2LDcgKzE2LDcgQEAKIEByZW0gaWYgZXhpc3QgZGItNC40LjIwIHJkIC9zL3EgZGItNC40LjIwCiBAcmVtIGlmIGV4aXN0IGRiLTQuNy4yNS4wIHJkIC9zL3EgZGItNC43LjI1LjAKIEByZW0gaWYgZXhpc3Qgb3BlbnNzbC0wLjkuOGwgcmQgL3MvcSBvcGVuc3NsLTAuOS44bAotQHJlbSBpZiBleGlzdCBzcWxpdGUtMy41LjkgcmQgL3MvcSBzcWxpdGUtMy41LjkgICAgCitAcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjYuMjEgcmQgL3MvcSBzcWxpdGUtMy42LjIxICAgIAogCiBAcmVtIGJ6aXAKIGlmIG5vdCBleGlzdCBiemlwMi0xLjAuNSAoCkBAIC0zOSw3ICszOSw3IEBACiBpZiBub3QgZXhpc3QgdGstOC41LjIuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMi4wCiAKIEByZW0gc3FsaXRlMwotaWYgbm90IGV4aXN0IHNxbGl0ZS0zLjUuOSAoCitpZiBub3QgZXhpc3Qgc3FsaXRlLTMuNi4yMSAoCiAgIHJkIC9zL3Egc3FsaXRlLXNvdXJjZS0zLjMuNAotICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy41LjkKKyAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLTMuNi4yMQogKQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAppbmRleCBjOGIxOTM3Li4zZWNjY2U4IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdApAQCAtMSwzICsxLDMgQEAKIEByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuCiBjZCBQQ2J1aWxkCi1jYWxsIHJ0LmJhdCAtZCAtcSAtdWFsbCAtcncKK2NhbGwgcnQuYmF0IC1kIC1xIC11YWxsIC1yd1cKZGlmZiAtLWdpdCBhL1Rvb2xzL2NjYmVuY2gvY2NiZW5jaC5weSBiL1Rvb2xzL2NjYmVuY2gvY2NiZW5jaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTc5ZGNiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2NiZW5jaC9jY2JlbmNoLnB5CkBAIC0wLDAgKzEsNjA5IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIGtlcHQgY29tcGF0aWJsZSB3aXRoIGJvdGggUHl0aG9uIDIuNiBhbmQgUHl0aG9uID49IDMuMC4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCisiIiIKK2NjYmVuY2gsIGEgUHl0aG9uIGNvbmN1cnJlbmN5IGJlbmNobWFyay4KKyIiIgorCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNvY2tldAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyLCBTVVBQUkVTU19IRUxQCitpbXBvcnQgcGxhdGZvcm0KKworIyBDb21wYXRpYmlsaXR5Cit0cnk6CisgICAgeHJhbmdlCitleGNlcHQgTmFtZUVycm9yOgorICAgIHhyYW5nZSA9IHJhbmdlCisKK3RyeToKKyAgICBtYXAgPSBpdGVydG9vbHMuaW1hcAorZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHBhc3MKKworCitUSFJPVUdIUFVUX0RVUkFUSU9OID0gMi4wCisKK0xBVEVOQ1lfUElOR19JTlRFUlZBTCA9IDAuMQorTEFURU5DWV9EVVJBVElPTiA9IDIuMAorCitCQU5EV0lEVEhfUEFDS0VUX1NJWkUgPSAxMDI0CitCQU5EV0lEVEhfRFVSQVRJT04gPSAyLjAKKworCitkZWYgdGFza19waWRpZ2l0cygpOgorICAgICIiIlBpIGNhbGN1bGF0aW9uIChQeXRob24pIiIiCisgICAgX21hcCA9IG1hcAorICAgIF9jb3VudCA9IGl0ZXJ0b29scy5jb3VudAorICAgIF9pc2xpY2UgPSBpdGVydG9vbHMuaXNsaWNlCisKKyAgICBkZWYgY2FsY19uZGlnaXRzKG4pOgorICAgICAgICAjIEZyb20gaHR0cDovL3Nob290b3V0LmFsaW90aC5kZWJpYW4ub3JnLworICAgICAgICBkZWYgZ2VuX3goKToKKyAgICAgICAgICAgIHJldHVybiBfbWFwKGxhbWJkYSBrOiAoaywgNCprICsgMiwgMCwgMiprICsgMSksIF9jb3VudCgxKSkKKworICAgICAgICBkZWYgY29tcG9zZShhLCBiKToKKyAgICAgICAgICAgIGFxLCBhciwgYXNfLCBhdCA9IGEKKyAgICAgICAgICAgIGJxLCBiciwgYnMsIGJ0ID0gYgorICAgICAgICAgICAgcmV0dXJuIChhcSAqIGJxLAorICAgICAgICAgICAgICAgICAgICBhcSAqIGJyICsgYXIgKiBidCwKKyAgICAgICAgICAgICAgICAgICAgYXNfICogYnEgKyBhdCAqIGJzLAorICAgICAgICAgICAgICAgICAgICBhc18gKiBiciArIGF0ICogYnQpCisKKyAgICAgICAgZGVmIGV4dHJhY3Qoeiwgaik6CisgICAgICAgICAgICBxLCByLCBzLCB0ID0gegorICAgICAgICAgICAgcmV0dXJuIChxKmogKyByKSAvLyAocypqICsgdCkKKworICAgICAgICBkZWYgcGlfZGlnaXRzKCk6CisgICAgICAgICAgICB6ID0gKDEsIDAsIDAsIDEpCisgICAgICAgICAgICB4ID0gZ2VuX3goKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB5ID0gZXh0cmFjdCh6LCAzKQorICAgICAgICAgICAgICAgIHdoaWxlIHkgIT0gZXh0cmFjdCh6LCA0KToKKyAgICAgICAgICAgICAgICAgICAgeiA9IGNvbXBvc2UoeiwgbmV4dCh4KSkKKyAgICAgICAgICAgICAgICAgICAgeSA9IGV4dHJhY3QoeiwgMykKKyAgICAgICAgICAgICAgICB6ID0gY29tcG9zZSgoMTAsIC0xMCp5LCAwLCAxKSwgeikKKyAgICAgICAgICAgICAgICB5aWVsZCB5CisKKyAgICAgICAgcmV0dXJuIGxpc3QoX2lzbGljZShwaV9kaWdpdHMoKSwgbikpCisKKyAgICByZXR1cm4gY2FsY19uZGlnaXRzLCAoNTAsICkKKworZGVmIHRhc2tfcmVnZXgoKToKKyAgICAiIiJyZWd1bGFyIGV4cHJlc3Npb24gKEMpIiIiCisgICAgIyBYWFggdGhpcyB0YXNrIGdpdmVzIGhvcnJlbmRvdXMgbGF0ZW5jeSByZXN1bHRzLgorICAgIGltcG9ydCByZQorICAgICMgVGFrZW4gZnJvbSB0aGUgYGluc3BlY3RgIG1vZHVsZQorICAgIHBhdCA9IHJlLmNvbXBpbGUocideKFxzKmRlZlxzKXwoLiooPzwhXHcpbGFtYmRhKDp8XHMpKXxeKFxzKkApJywgcmUuTVVMVElMSU5FKQorICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInIiKSBhcyBmOgorICAgICAgICBhcmcgPSBmLnJlYWQoMjAwMCkKKworICAgIGRlZiBmaW5kYWxsKHMpOgorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHBhdC5maW5kYWxsKHMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwcmludCh0aW1lLnRpbWUoKSAtIHQpCisgICAgcmV0dXJuIHBhdC5maW5kYWxsLCAoYXJnLCApCisKK2RlZiB0YXNrX3NvcnQoKToKKyAgICAiIiJsaXN0IHNvcnRpbmcgKEMpIiIiCisgICAgZGVmIGxpc3Rfc29ydChsKToKKyAgICAgICAgbCA9IGxbOjotMV0KKyAgICAgICAgbC5zb3J0KCkKKworICAgIHJldHVybiBsaXN0X3NvcnQsIChsaXN0KHJhbmdlKDEwMDApKSwgKQorCitkZWYgdGFza19jb21wcmVzc196bGliKCk6CisgICAgIiIiemxpYiBjb21wcmVzc2lvbiAoQykiIiIKKyAgICBpbXBvcnQgemxpYgorICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgYXJnID0gZi5yZWFkKDUwMDApICogMworCisgICAgZGVmIGNvbXByZXNzKHMpOgorICAgICAgICB6bGliLmRlY29tcHJlc3MoemxpYi5jb21wcmVzcyhzLCA1KSkKKyAgICByZXR1cm4gY29tcHJlc3MsIChhcmcsICkKKworZGVmIHRhc2tfY29tcHJlc3NfYnoyKCk6CisgICAgIiIiYnoyIGNvbXByZXNzaW9uIChDKSIiIgorICAgIGltcG9ydCBiejIKKyAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgIGFyZyA9IGYucmVhZCgzMDAwKSAqIDIKKworICAgIGRlZiBjb21wcmVzcyhzKToKKyAgICAgICAgYnoyLmNvbXByZXNzKHMpCisgICAgcmV0dXJuIGNvbXByZXNzLCAoYXJnLCApCisKK2RlZiB0YXNrX2hhc2hpbmcoKToKKyAgICAiIiJTSEExIGhhc2hpbmcgKEMpIiIiCisgICAgaW1wb3J0IGhhc2hsaWIKKyAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgIGFyZyA9IGYucmVhZCg1MDAwKSAqIDMwCisKKyAgICBkZWYgY29tcHV0ZShzKToKKyAgICAgICAgaGFzaGxpYi5zaGExKHMpLmRpZ2VzdCgpCisgICAgcmV0dXJuIGNvbXB1dGUsIChhcmcsICkKKworCit0aHJvdWdocHV0X3Rhc2tzID0gW3Rhc2tfcGlkaWdpdHMsIHRhc2tfcmVnZXhdCitmb3IgbW9kIGluICdiejInLCAnaGFzaGxpYic6CisgICAgdHJ5OgorICAgICAgICBnbG9iYWxzKClbbW9kXSA9IF9faW1wb3J0X18obW9kKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZ2xvYmFscygpW21vZF0gPSBOb25lCisKKyMgRm9yIHdoYXRldmVyIHJlYXNvbnMsIHpsaWIgZ2l2ZXMgaXJyZWd1bGFyIHJlc3VsdHMsIHNvIHdlIHByZWZlciBiejIgb3IKKyMgaGFzaGxpYiBpZiBhdmFpbGFibGUuCisjIChOT1RFOiBoYXNobGliIHJlbGVhc2VzIHRoZSBHSUwgZnJvbSAyLjcgYW5kIDMuMSBvbndhcmRzKQoraWYgYnoyIGlzIG5vdCBOb25lOgorICAgIHRocm91Z2hwdXRfdGFza3MuYXBwZW5kKHRhc2tfY29tcHJlc3NfYnoyKQorZWxpZiBoYXNobGliIGlzIG5vdCBOb25lOgorICAgIHRocm91Z2hwdXRfdGFza3MuYXBwZW5kKHRhc2tfaGFzaGluZykKK2Vsc2U6CisgICAgdGhyb3VnaHB1dF90YXNrcy5hcHBlbmQodGFza19jb21wcmVzc196bGliKQorCitsYXRlbmN5X3Rhc2tzID0gdGhyb3VnaHB1dF90YXNrcworYmFuZHdpZHRoX3Rhc2tzID0gW3Rhc2tfcGlkaWdpdHNdCisKKworY2xhc3MgVGltZWRMb29wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBhcmdzKToKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgc3RhcnRfdGltZSwgbWluX2R1cmF0aW9uLCBlbmRfZXZlbnQsIGRvX3lpZWxkPUZhbHNlKToKKyAgICAgICAgc3RlcCA9IDIwCisgICAgICAgIG5pdGVycyA9IDAKKyAgICAgICAgZHVyYXRpb24gPSAwLjAKKyAgICAgICAgX3RpbWUgPSB0aW1lLnRpbWUKKyAgICAgICAgX3NsZWVwID0gdGltZS5zbGVlcAorICAgICAgICBfZnVuYyA9IHNlbGYuZnVuYworICAgICAgICBfYXJncyA9IHNlbGYuYXJncworICAgICAgICB0MSA9IHN0YXJ0X3RpbWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHN0ZXApOgorICAgICAgICAgICAgICAgIF9mdW5jKCpfYXJncykKKyAgICAgICAgICAgIHQyID0gX3RpbWUoKQorICAgICAgICAgICAgIyBJZiBhbm90aGVyIHRocmVhZCB0ZXJtaW5hdGVkLCB0aGUgY3VycmVudCBtZWFzdXJlbWVudCBpcyBpbnZhbGlkCisgICAgICAgICAgICAjID0+IHJldHVybiB0aGUgcHJldmlvdXMgb25lLgorICAgICAgICAgICAgaWYgZW5kX2V2ZW50OgorICAgICAgICAgICAgICAgIHJldHVybiBuaXRlcnMsIGR1cmF0aW9uCisgICAgICAgICAgICBuaXRlcnMgKz0gc3RlcAorICAgICAgICAgICAgZHVyYXRpb24gPSB0MiAtIHN0YXJ0X3RpbWUKKyAgICAgICAgICAgIGlmIGR1cmF0aW9uID49IG1pbl9kdXJhdGlvbjoKKyAgICAgICAgICAgICAgICBlbmRfZXZlbnQuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pdGVycywgZHVyYXRpb24KKyAgICAgICAgICAgIGlmIHQyIC0gdDEgPCAwLjAxOgorICAgICAgICAgICAgICAgICMgTWluaW1pemUgaW50ZXJmZXJlbmNlIG9mIG1lYXN1cmVtZW50IG9uIG92ZXJhbGwgcnVudGltZQorICAgICAgICAgICAgICAgIHN0ZXAgPSBzdGVwICogMyAvLyAyCisgICAgICAgICAgICBlbGlmIGRvX3lpZWxkOgorICAgICAgICAgICAgICAgICMgT1Mgc2NoZWR1bGluZyBvZiBQeXRob24gdGhyZWFkcyBpcyBzb21ldGltZXMgc28gYmFkIHRoYXQgd2UKKyAgICAgICAgICAgICAgICAjIGhhdmUgdG8gZm9yY2UgdGhyZWFkIHN3aXRjaGluZyBvdXJzZWx2ZXMsIG90aGVyd2lzZSB3ZSBnZXQKKyAgICAgICAgICAgICAgICAjIGNvbXBsZXRlbHkgdXNlbGVzcyByZXN1bHRzLgorICAgICAgICAgICAgICAgIF9zbGVlcCgwLjAwMDEpCisgICAgICAgICAgICB0MSA9IHQyCisKKworZGVmIHJ1bl90aHJvdWdocHV0X3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpOgorICAgIGFzc2VydCBudGhyZWFkcyA+PSAxCisKKyAgICAjIFdhcm0gdXAKKyAgICBmdW5jKCphcmdzKQorCisgICAgcmVzdWx0cyA9IFtdCisgICAgbG9vcCA9IFRpbWVkTG9vcChmdW5jLCBhcmdzKQorICAgIGVuZF9ldmVudCA9IFtdCisKKyAgICBpZiBudGhyZWFkcyA9PSAxOgorICAgICAgICAjIFB1cmUgc2luZ2xlLXRocmVhZGVkIHBlcmZvcm1hbmNlLCB3aXRob3V0IGFueSBzd2l0Y2hpbmcgb3IKKyAgICAgICAgIyBzeW5jaHJvbml6YXRpb24gb3ZlcmhlYWQuCisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICByZXN1bHRzLmFwcGVuZChsb29wKHN0YXJ0X3RpbWUsIFRIUk9VR0hQVVRfRFVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2V2ZW50LCBkb195aWVsZD1GYWxzZSkpCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBzdGFydGVkID0gRmFsc2UKKyAgICByZWFkeV9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgc3RhcnRfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgIHJlYWR5ID0gW10KKworICAgIGRlZiBydW4oKToKKyAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgcmVhZHkuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICByZWFkeV9jb25kLm5vdGlmeSgpCisgICAgICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydGVkOgorICAgICAgICAgICAgICAgIHN0YXJ0X2NvbmQud2FpdCgpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKGxvb3Aoc3RhcnRfdGltZSwgVEhST1VHSFBVVF9EVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZXZlbnQsIGRvX3lpZWxkPVRydWUpKQorCisgICAgdGhyZWFkcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UobnRocmVhZHMpOgorICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pKQorICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHQuc3RhcnQoKQorICAgICMgV2UgZG9uJ3Qgd2FudCBtZWFzdXJlbWVudHMgdG8gaW5jbHVkZSB0aHJlYWQgc3RhcnR1cCBvdmVyaGVhZCwKKyAgICAjIHNvIHdlIGFycmFuZ2UgZm9yIHRpbWluZyB0byBzdGFydCBhZnRlciBhbGwgdGhyZWFkcyBhcmUgcmVhZHkuCisgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICB3aGlsZSBsZW4ocmVhZHkpIDwgbnRocmVhZHM6CisgICAgICAgICAgICByZWFkeV9jb25kLndhaXQoKQorICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCisgICAgICAgIHN0YXJ0X2NvbmQubm90aWZ5KG50aHJlYWRzKQorICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgIHQuam9pbigpCisKKyAgICByZXR1cm4gcmVzdWx0cworCitkZWYgcnVuX3Rocm91Z2hwdXRfdGVzdHMobWF4X3RocmVhZHMpOgorICAgIGZvciB0YXNrIGluIHRocm91Z2hwdXRfdGFza3M6CisgICAgICAgIHByaW50KHRhc2suX19kb2NfXykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBmdW5jLCBhcmdzID0gdGFzaygpCisgICAgICAgIG50aHJlYWRzID0gMQorICAgICAgICBiYXNlbGluZV9zcGVlZCA9IE5vbmUKKyAgICAgICAgd2hpbGUgbnRocmVhZHMgPD0gbWF4X3RocmVhZHM6CisgICAgICAgICAgICByZXN1bHRzID0gcnVuX3Rocm91Z2hwdXRfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcykKKyAgICAgICAgICAgICMgVGFraW5nIHRoZSBtYXggZHVyYXRpb24gcmF0aGVyIHRoYW4gYXZlcmFnZSBnaXZlcyBwZXNzaW1pc3RpYworICAgICAgICAgICAgIyByZXN1bHRzIHJhdGhlciB0aGFuIG9wdGltaXN0aWMuCisgICAgICAgICAgICBzcGVlZCA9IHN1bShyWzBdIGZvciByIGluIHJlc3VsdHMpIC8gbWF4KHJbMV0gZm9yIHIgaW4gcmVzdWx0cykKKyAgICAgICAgICAgIHByaW50KCJ0aHJlYWRzPSVkOiAlZCIgJSAobnRocmVhZHMsIHNwZWVkKSwgZW5kPSIiKQorICAgICAgICAgICAgaWYgYmFzZWxpbmVfc3BlZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCgiIGl0ZXJhdGlvbnMvcy4iKQorICAgICAgICAgICAgICAgIGJhc2VsaW5lX3NwZWVkID0gc3BlZWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIiAoICVkICUlKSIgJSAoc3BlZWQgLyBiYXNlbGluZV9zcGVlZCAqIDEwMCkpCisgICAgICAgICAgICBudGhyZWFkcyArPSAxCisgICAgICAgIHByaW50KCkKKworCitMQVRfRU5EID0gIkVORCIKKworZGVmIF9zZW5kdG8oc29jaywgcywgYWRkcik6CisgICAgc29jay5zZW5kdG8ocy5lbmNvZGUoJ2FzY2lpJyksIGFkZHIpCisKK2RlZiBfcmVjdihzb2NrLCBuKToKKyAgICByZXR1cm4gc29jay5yZWN2KG4pLmRlY29kZSgnYXNjaWknKQorCitkZWYgbGF0ZW5jeV9jbGllbnQoYWRkciwgbmJfcGluZ3MsIGludGVydmFsKToKKyAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgX3RpbWUgPSB0aW1lLnRpbWUKKyAgICBfc2xlZXAgPSB0aW1lLnNsZWVwCisgICAgZGVmIF9waW5nKCk6CisgICAgICAgIF9zZW5kdG8oc29jaywgIiVyXG4iICUgX3RpbWUoKSwgYWRkcikKKyAgICAjIFRoZSBmaXJzdCBwaW5nIHNpZ25hbHMgdGhlIHBhcmVudCBwcm9jZXNzIHRoYXQgd2UgYXJlIHJlYWR5LgorICAgIF9waW5nKCkKKyAgICAjIFdlIGdpdmUgdGhlIHBhcmVudCBhIGJpdCBvZiB0aW1lIHRvIG5vdGljZS4KKyAgICBfc2xlZXAoMS4wKQorICAgIGZvciBpIGluIHJhbmdlKG5iX3BpbmdzKToKKyAgICAgICAgX3NsZWVwKGludGVydmFsKQorICAgICAgICBfcGluZygpCisgICAgX3NlbmR0byhzb2NrLCBMQVRfRU5EICsgIlxuIiwgYWRkcikKKworZGVmIHJ1bl9sYXRlbmN5X2NsaWVudCgqKmt3YXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRScsIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXyldCisgICAgY21kX2xpbmUuZXh0ZW5kKFsnLS1sYXRjbGllbnQnLCByZXByKGt3YXJncyldKQorICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lKSAjLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIHJ1bl9sYXRlbmN5X3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpOgorICAgICMgQ3JlYXRlIGEgbGlzdGVuaW5nIHNvY2tldCB0byByZWNlaXZlIHRoZSBwaW5ncy4gV2UgdXNlIFVEUCB3aGljaCBzaG91bGQKKyAgICAjIGJlIHBhaW5sZXNzbHkgY3Jvc3MtcGxhdGZvcm0uCisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgIGFkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgIGludGVydmFsID0gTEFURU5DWV9QSU5HX0lOVEVSVkFMCisgICAgZHVyYXRpb24gPSBMQVRFTkNZX0RVUkFUSU9OCisgICAgbmJfcGluZ3MgPSBpbnQoZHVyYXRpb24gLyBpbnRlcnZhbCkKKworICAgIHJlc3VsdHMgPSBbXQorICAgIHRocmVhZHMgPSBbXQorICAgIGVuZF9ldmVudCA9IFtdCisgICAgc3RhcnRfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgIGlmIG50aHJlYWRzID4gMDoKKyAgICAgICAgIyBXYXJtIHVwCisgICAgICAgIGZ1bmMoKmFyZ3MpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvb3AgPSBUaW1lZExvb3AoZnVuYywgYXJncykKKyAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICByZWFkeV9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisKKyAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZChOb25lKQorICAgICAgICAgICAgICAgIHJlYWR5X2NvbmQubm90aWZ5KCkKKyAgICAgICAgICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29uZC53YWl0KCkKKyAgICAgICAgICAgIGxvb3Aoc3RhcnRfdGltZSwgZHVyYXRpb24gKiAxLjUsIGVuZF9ldmVudCwgZG9feWllbGQ9RmFsc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRocmVhZHMpOgorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKSkKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgIyBXYWl0IGZvciB0aHJlYWRzIHRvIGJlIHJlYWR5CisgICAgICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgICAgIHdoaWxlIGxlbihyZWFkeSkgPCBudGhyZWFkczoKKyAgICAgICAgICAgICAgICByZWFkeV9jb25kLndhaXQoKQorCisgICAgIyBSdW4gdGhlIGNsaWVudCBhbmQgd2FpdCBmb3IgdGhlIGZpcnN0IHBpbmcocykgdG8gYXJyaXZlIGJlZm9yZQorICAgICMgdW5ibG9ja2luZyB0aGUgYmFja2dyb3VuZCB0aHJlYWRzLgorICAgIGNodW5rcyA9IFtdCisgICAgcHJvY2VzcyA9IHJ1bl9sYXRlbmN5X2NsaWVudChhZGRyPXNvY2suZ2V0c29ja25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX3BpbmdzPW5iX3BpbmdzLCBpbnRlcnZhbD1pbnRlcnZhbCkKKyAgICBzID0gX3JlY3Yoc29jaywgNDA5NikKKyAgICBfdGltZSA9IHRpbWUudGltZQorCisgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICBzdGFydF90aW1lID0gX3RpbWUoKQorICAgICAgICBzdGFydGVkID0gVHJ1ZQorICAgICAgICBzdGFydF9jb25kLm5vdGlmeShudGhyZWFkcykKKworICAgIHdoaWxlIExBVF9FTkQgbm90IGluIHM6CisgICAgICAgIHMgPSBfcmVjdihzb2NrLCA0MDk2KQorICAgICAgICB0ID0gX3RpbWUoKQorICAgICAgICBjaHVua3MuYXBwZW5kKCh0LCBzKSkKKworICAgICMgVGVsbCB0aGUgYmFja2dyb3VuZCB0aHJlYWRzIHRvIHN0b3AuCisgICAgZW5kX2V2ZW50LmFwcGVuZChOb25lKQorICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgIHQuam9pbigpCisgICAgcHJvY2Vzcy53YWl0KCkKKworICAgIGZvciByZWN2X3RpbWUsIGNodW5rIGluIGNodW5rczoKKyAgICAgICAgIyBOT1RFOiBpdCBpcyBhc3N1bWVkIHRoYXQgYSBsaW5lIHNlbnQgYnkgYSBjbGllbnQgd2Fzbid0IHJlY2VpdmVkCisgICAgICAgICMgaW4gdHdvIGNodW5rcyBiZWNhdXNlIHRoZSBsaW5lcyBhcmUgdmVyeSBzbWFsbC4KKyAgICAgICAgZm9yIGxpbmUgaW4gY2h1bmsuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZSBhbmQgbGluZSAhPSBMQVRfRU5EOgorICAgICAgICAgICAgICAgIHNlbmRfdGltZSA9IGV2YWwobGluZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZW5kX3RpbWUsIGZsb2F0KQorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChzZW5kX3RpbWUsIHJlY3ZfdGltZSkpCisKKyAgICByZXR1cm4gcmVzdWx0cworCitkZWYgcnVuX2xhdGVuY3lfdGVzdHMobWF4X3RocmVhZHMpOgorICAgIGZvciB0YXNrIGluIGxhdGVuY3lfdGFza3M6CisgICAgICAgIHByaW50KCJCYWNrZ3JvdW5kIENQVSB0YXNrOiIsIHRhc2suX19kb2NfXykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBmdW5jLCBhcmdzID0gdGFzaygpCisgICAgICAgIG50aHJlYWRzID0gMAorICAgICAgICB3aGlsZSBudGhyZWFkcyA8PSBtYXhfdGhyZWFkczoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBydW5fbGF0ZW5jeV90ZXN0KGZ1bmMsIGFyZ3MsIG50aHJlYWRzKQorICAgICAgICAgICAgbiA9IGxlbihyZXN1bHRzKQorICAgICAgICAgICAgIyBXZSBwcmludCBvdXQgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICBsYXRzID0gWzEwMDAgKiAodDIgLSB0MSkgZm9yICh0MSwgdDIpIGluIHJlc3VsdHNdCisgICAgICAgICAgICAjcHJpbnQobGlzdChtYXAoaW50LCBsYXRzKSkpCisgICAgICAgICAgICBhdmcgPSBzdW0obGF0cykgLyBuCisgICAgICAgICAgICBkZXYgPSAoc3VtKCh4IC0gYXZnKSAqKiAyIGZvciB4IGluIGxhdHMpIC8gbikgKiogMC41CisgICAgICAgICAgICBwcmludCgiQ1BVIHRocmVhZHM9JWQ6ICVkIG1zLiAoc3RkIGRldjogJWQgbXMuKSIgJSAobnRocmVhZHMsIGF2ZywgZGV2KSwgZW5kPSIiKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgI3ByaW50KCIgICAgWy4uLiBmcm9tICVkIHNhbXBsZXNdIiAlIG4pCisgICAgICAgICAgICBudGhyZWFkcyArPSAxCisgICAgICAgIHByaW50KCkKKworCitCV19FTkQgPSAiRU5EIgorCitkZWYgYmFuZHdpZHRoX2NsaWVudChhZGRyLCBwYWNrZXRfc2l6ZSwgZHVyYXRpb24pOgorICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBzb2NrLmJpbmQoKCIxMjcuMC4wLjEiLCAwKSkKKyAgICBsb2NhbF9hZGRyID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgX3RpbWUgPSB0aW1lLnRpbWUKKyAgICBfc2xlZXAgPSB0aW1lLnNsZWVwCisgICAgZGVmIF9zZW5kX2NodW5rKG1zZyk6CisgICAgICAgIF9zZW5kdG8oc29jaywgKCIlciMlc1xuIiAlIChsb2NhbF9hZGRyLCBtc2cpKS5yanVzdChwYWNrZXRfc2l6ZSksIGFkZHIpCisgICAgIyBXZSBnaXZlIHRoZSBwYXJlbnQgc29tZSB0aW1lIHRvIGJlIHJlYWR5LgorICAgIF9zbGVlcCgxLjApCisgICAgdHJ5OgorICAgICAgICBzdGFydF90aW1lID0gX3RpbWUoKQorICAgICAgICBlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyBkdXJhdGlvbiAqIDIuMAorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBfdGltZSgpIDwgZW5kX3RpbWU6CisgICAgICAgICAgICBfc2VuZF9jaHVuayhzdHIoaSkpCisgICAgICAgICAgICBzID0gX3JlY3Yoc29jaywgcGFja2V0X3NpemUpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHMpID09IHBhY2tldF9zaXplCisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgX3NlbmRfY2h1bmsoQldfRU5EKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNvY2suY2xvc2UoKQorCitkZWYgcnVuX2JhbmR3aWR0aF9jbGllbnQoKiprd2FyZ3MpOgorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnLCBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pXQorICAgIGNtZF9saW5lLmV4dGVuZChbJy0tYndjbGllbnQnLCByZXByKGt3YXJncyldKQorICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lKSAjLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIHJ1bl9iYW5kd2lkdGhfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcyk6CisgICAgIyBDcmVhdGUgYSBsaXN0ZW5pbmcgc29ja2V0IHRvIHJlY2VpdmUgdGhlIHBhY2tldHMuIFdlIHVzZSBVRFAgd2hpY2ggc2hvdWxkCisgICAgIyBiZSBwYWlubGVzc2x5IGNyb3NzLXBsYXRmb3JtLgorICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICBzb2NrLmJpbmQoKCIxMjcuMC4wLjEiLCAwKSkKKyAgICBhZGRyID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICBkdXJhdGlvbiA9IEJBTkRXSURUSF9EVVJBVElPTgorICAgIHBhY2tldF9zaXplID0gQkFORFdJRFRIX1BBQ0tFVF9TSVpFCisKKyAgICByZXN1bHRzID0gW10KKyAgICB0aHJlYWRzID0gW10KKyAgICBlbmRfZXZlbnQgPSBbXQorICAgIHN0YXJ0X2NvbmQgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKyAgICBzdGFydGVkID0gRmFsc2UKKyAgICBpZiBudGhyZWFkcyA+IDA6CisgICAgICAgICMgV2FybSB1cAorICAgICAgICBmdW5jKCphcmdzKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBsb29wID0gVGltZWRMb29wKGZ1bmMsIGFyZ3MpCisgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgcmVhZHlfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorCisgICAgICAgIGRlZiBydW4oKToKKyAgICAgICAgICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICByZWFkeV9jb25kLm5vdGlmeSgpCisgICAgICAgICAgICB3aXRoIHN0YXJ0X2NvbmQ6CisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2NvbmQud2FpdCgpCisgICAgICAgICAgICBsb29wKHN0YXJ0X3RpbWUsIGR1cmF0aW9uICogMS41LCBlbmRfZXZlbnQsIGRvX3lpZWxkPUZhbHNlKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKG50aHJlYWRzKToKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bikpCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LnNldERhZW1vbihUcnVlKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICMgV2FpdCBmb3IgdGhyZWFkcyB0byBiZSByZWFkeQorICAgICAgICB3aXRoIHJlYWR5X2NvbmQ6CisgICAgICAgICAgICB3aGlsZSBsZW4ocmVhZHkpIDwgbnRocmVhZHM6CisgICAgICAgICAgICAgICAgcmVhZHlfY29uZC53YWl0KCkKKworICAgICMgUnVuIHRoZSBjbGllbnQgYW5kIHdhaXQgZm9yIHRoZSBmaXJzdCBwYWNrZXQgdG8gYXJyaXZlIGJlZm9yZQorICAgICMgdW5ibG9ja2luZyB0aGUgYmFja2dyb3VuZCB0aHJlYWRzLgorICAgIHByb2Nlc3MgPSBydW5fYmFuZHdpZHRoX2NsaWVudChhZGRyPWFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9zaXplPXBhY2tldF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbj1kdXJhdGlvbikKKyAgICBfdGltZSA9IHRpbWUudGltZQorICAgICMgVGhpcyB3aWxsIGFsc28gd2FpdCBmb3IgdGhlIHBhcmVudCB0byBiZSByZWFkeQorICAgIHMgPSBfcmVjdihzb2NrLCBwYWNrZXRfc2l6ZSkKKyAgICByZW1vdGVfYWRkciA9IGV2YWwocy5wYXJ0aXRpb24oJyMnKVswXSkKKworICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgc3RhcnRfdGltZSA9IF90aW1lKCkKKyAgICAgICAgc3RhcnRlZCA9IFRydWUKKyAgICAgICAgc3RhcnRfY29uZC5ub3RpZnkobnRocmVhZHMpCisKKyAgICBuID0gMAorICAgIGZpcnN0X3RpbWUgPSBOb25lCisgICAgd2hpbGUgbm90IGVuZF9ldmVudCBhbmQgQldfRU5EIG5vdCBpbiBzOgorICAgICAgICBfc2VuZHRvKHNvY2ssIHMsIHJlbW90ZV9hZGRyKQorICAgICAgICBzID0gX3JlY3Yoc29jaywgcGFja2V0X3NpemUpCisgICAgICAgIGlmIGZpcnN0X3RpbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpcnN0X3RpbWUgPSBfdGltZSgpCisgICAgICAgIG4gKz0gMQorICAgIGVuZF90aW1lID0gX3RpbWUoKQorCisgICAgZW5kX2V2ZW50LmFwcGVuZChOb25lKQorICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgIHQuam9pbigpCisgICAgcHJvY2Vzcy5raWxsKCkKKworICAgIHJldHVybiAobiAtIDEpIC8gKGVuZF90aW1lIC0gZmlyc3RfdGltZSkKKworZGVmIHJ1bl9iYW5kd2lkdGhfdGVzdHMobWF4X3RocmVhZHMpOgorICAgIGZvciB0YXNrIGluIGJhbmR3aWR0aF90YXNrczoKKyAgICAgICAgcHJpbnQoIkJhY2tncm91bmQgQ1BVIHRhc2s6IiwgdGFzay5fX2RvY19fKQorICAgICAgICBwcmludCgpCisgICAgICAgIGZ1bmMsIGFyZ3MgPSB0YXNrKCkKKyAgICAgICAgbnRocmVhZHMgPSAwCisgICAgICAgIGJhc2VsaW5lX3NwZWVkID0gTm9uZQorICAgICAgICB3aGlsZSBudGhyZWFkcyA8PSBtYXhfdGhyZWFkczoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBydW5fYmFuZHdpZHRoX3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpCisgICAgICAgICAgICBzcGVlZCA9IHJlc3VsdHMKKyAgICAgICAgICAgICNzcGVlZCA9IGxlbihyZXN1bHRzKSAqIDEuMCAvIHJlc3VsdHNbLTFdWzBdCisgICAgICAgICAgICBwcmludCgiQ1BVIHRocmVhZHM9JWQ6ICUuMWYiICUgKG50aHJlYWRzLCBzcGVlZCksIGVuZD0iIikKKyAgICAgICAgICAgIGlmIGJhc2VsaW5lX3NwZWVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcHJpbnQoIiBwYWNrZXRzL3MuIikKKyAgICAgICAgICAgICAgICBiYXNlbGluZV9zcGVlZCA9IHNwZWVkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCIgKCAlZCAlJSkiICUgKHNwZWVkIC8gYmFzZWxpbmVfc3BlZWQgKiAxMDApKQorICAgICAgICAgICAgbnRocmVhZHMgKz0gMQorICAgICAgICBwcmludCgpCisKKworZGVmIG1haW4oKToKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgWy1ofC0taGVscF0gW29wdGlvbnNdIgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10aHJvdWdocHV0IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ0aHJvdWdocHV0IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gdGhyb3VnaHB1dCB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbGF0ZW5jeSIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibGF0ZW5jeSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIGxhdGVuY3kgdGVzdHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsICItLWJhbmR3aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYmFuZHdpZHRoIiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gSS9PIGJhbmR3aWR0aCB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1pIiwgIi0taW50ZXJ2YWwiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLCBkZXN0PSJjaGVja19pbnRlcnZhbCIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzeXMuc2V0Y2hlY2tpbnRlcnZhbCgpIHZhbHVlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUkiLCAiLS1zd2l0Y2gtaW50ZXJ2YWwiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJmbG9hdCIsIGRlc3Q9InN3aXRjaF9pbnRlcnZhbCIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoKSB2YWx1ZSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tbnVtLXRocmVhZHMiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJpbnQiLCBkZXN0PSJudGhyZWFkcyIsIGRlZmF1bHQ9NCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJtYXggbnVtYmVyIG9mIHRocmVhZHMgaW4gdGVzdHMiKQorCisgICAgIyBIaWRkZW4gb3B0aW9uIHRvIHJ1biB0aGUgcGluZ2luZyBhbmQgYmFuZHdpZHRoIGNsaWVudHMKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tbGF0Y2xpZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0ibGF0Y2xpZW50IiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9U1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiIiwgIi0tYndjbGllbnQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJid2NsaWVudCIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPVNVUFBSRVNTX0hFTFApCisKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGFyZ3M6CisgICAgICAgIHBhcnNlci5lcnJvcigidW5leHBlY3RlZCBhcmd1bWVudHMiKQorCisgICAgaWYgb3B0aW9ucy5sYXRjbGllbnQ6CisgICAgICAgIGt3YXJncyA9IGV2YWwob3B0aW9ucy5sYXRjbGllbnQpCisgICAgICAgIGxhdGVuY3lfY2xpZW50KCoqa3dhcmdzKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG9wdGlvbnMuYndjbGllbnQ6CisgICAgICAgIGt3YXJncyA9IGV2YWwob3B0aW9ucy5id2NsaWVudCkKKyAgICAgICAgYmFuZHdpZHRoX2NsaWVudCgqKmt3YXJncykKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3Qgb3B0aW9ucy50aHJvdWdocHV0IGFuZCBub3Qgb3B0aW9ucy5sYXRlbmN5IGFuZCBub3Qgb3B0aW9ucy5iYW5kd2lkdGg6CisgICAgICAgIG9wdGlvbnMudGhyb3VnaHB1dCA9IG9wdGlvbnMubGF0ZW5jeSA9IG9wdGlvbnMuYmFuZHdpZHRoID0gVHJ1ZQorICAgIGlmIG9wdGlvbnMuY2hlY2tfaW50ZXJ2YWw6CisgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKG9wdGlvbnMuY2hlY2tfaW50ZXJ2YWwpCisgICAgaWYgb3B0aW9ucy5zd2l0Y2hfaW50ZXJ2YWw6CisgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbChvcHRpb25zLnN3aXRjaF9pbnRlcnZhbCkKKworICAgIHByaW50KCI9PSAlcyAlcyAoJXMpID09IiAlICgKKyAgICAgICAgcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksCisgICAgICAgIHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCksCisgICAgICAgIHBsYXRmb3JtLnB5dGhvbl9idWlsZCgpWzBdLAorICAgICkpCisgICAgIyBQcm9jZXNzb3IgaWRlbnRpZmljYXRpb24gb2Z0ZW4gaGFzIHJlcGVhdGVkIHNwYWNlcworICAgIGNwdSA9ICcgJy5qb2luKHBsYXRmb3JtLnByb2Nlc3NvcigpLnNwbGl0KCkpCisgICAgcHJpbnQoIj09ICVzICVzIG9uICclcycgPT0iICUgKAorICAgICAgICBwbGF0Zm9ybS5tYWNoaW5lKCksCisgICAgICAgIHBsYXRmb3JtLnN5c3RlbSgpLAorICAgICAgICBjcHUsCisgICAgKSkKKyAgICBwcmludCgpCisKKyAgICBpZiBvcHRpb25zLnRocm91Z2hwdXQ6CisgICAgICAgIHByaW50KCItLS0gVGhyb3VnaHB1dCAtLS0iKQorICAgICAgICBwcmludCgpCisgICAgICAgIHJ1bl90aHJvdWdocHV0X3Rlc3RzKG9wdGlvbnMubnRocmVhZHMpCisKKyAgICBpZiBvcHRpb25zLmxhdGVuY3k6CisgICAgICAgIHByaW50KCItLS0gTGF0ZW5jeSAtLS0iKQorICAgICAgICBwcmludCgpCisgICAgICAgIHJ1bl9sYXRlbmN5X3Rlc3RzKG9wdGlvbnMubnRocmVhZHMpCisKKyAgICBpZiBvcHRpb25zLmJhbmR3aWR0aDoKKyAgICAgICAgcHJpbnQoIi0tLSBJL08gYmFuZHdpZHRoIC0tLSIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcnVuX2JhbmR3aWR0aF90ZXN0cyhvcHRpb25zLm50aHJlYWRzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZmFxd2l6L2ZhcXcucHkgYi9Ub29scy9mYXF3aXovZmFxdy5weQppbmRleCBjNmMxYTZkLi5mZWE5OGVjIDEwMDc1NQotLS0gYS9Ub29scy9mYXF3aXovZmFxdy5weQorKysgYi9Ub29scy9mYXF3aXovZmFxdy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICIiIkZBUSB3aXphcmQgYm9vdHN0cmFwLiIiIgogCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CmluZGV4IDdjZDliNzguLjA2Y2JiNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CkBAIC0xLDkgKzEsOSBAQAogaW1wb3J0IHJlCi0KK2ltcG9ydCBzeXMKIAogIyBXcml0ZSB0aGUgY29uZmlnLmMgZmlsZQogCi1uZXZlciA9IFsnbWFyc2hhbCcsICdfX21haW5fXycsICdfX2J1aWx0aW5fXycsICdzeXMnLCAnZXhjZXB0aW9ucyddCituZXZlciA9IFsnbWFyc2hhbCcsICdfX21haW5fXycsICdfX2J1aWx0aW5fXycsICdzeXMnLCAnZXhjZXB0aW9ucycsICdfd2FybmluZ3MnXQogCiBkZWYgbWFrZWNvbmZpZyhpbmZwLCBvdXRmcCwgbW9kdWxlcywgd2l0aF9pZmRlZj0wKToKICAgICBtMSA9IHJlLmNvbXBpbGUoJy0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLScpCkBAIC0zOCw3ICszOCw2IEBACiAjIFRlc3QgcHJvZ3JhbS4KIAogZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzCiAgICAgaWYgbm90IHN5cy5hcmd2WzM6XToKICAgICAgICAgcHJpbnQgJ3VzYWdlOiBweXRob24gbWFrZWNvbmZpZy5weSBjb25maWcuYy5pbiBvdXRwdXRmaWxlJywKICAgICAgICAgcHJpbnQgJ21vZHVsZW5hbWUgLi4uJwpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL3dpbm1ha2VtYWtlZmlsZS5weSBiL1Rvb2xzL2ZyZWV6ZS93aW5tYWtlbWFrZWZpbGUucHkKaW5kZXggODU3MGYzZC4uMTk1MGQ2YiAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL3dpbm1ha2VtYWtlZmlsZS5weQorKysgYi9Ub29scy9mcmVlemUvd2lubWFrZW1ha2VmaWxlLnB5CkBAIC0xMzQsMTIgKzEzNCwxMyBAQAogICAgIHByaW50IDsgcHJpbnQKIAogICAgIHByaW50ICIkKHRhcmdldCkkKGRlYnVnX3N1ZmZpeCklczogJCh0ZW1wX2RpcikgJChPQkpTKSIgJSAodGFyZ2V0X2V4dCkKLSAgICBwcmludCAiXHRsaW5rIC1vdXQ6JCh0YXJnZXQpJChkZWJ1Z19zdWZmaXgpJXMgJXMiICUgKHRhcmdldF9leHQsIHRhcmdldF9saW5rX2ZsYWdzKSwKLSAgICBwcmludCAiXHQkKE9CSlMpIFxcIgotICAgIHByaW50ICJcdCQoTElCUykgXFwiCi0gICAgcHJpbnQgIlx0JChBREROX0xJTktfRklMRVMpIFxcIgotICAgIHByaW50ICJcdCQocHl0aG9ubGliKSAkKGxjdXN0b20pICQobF9kZWJ1ZylcXCIKKyAgICBwcmludCAiXHRsaW5rIC1vdXQ6JCh0YXJnZXQpJChkZWJ1Z19zdWZmaXgpJXMgJXMiICUgKHRhcmdldF9leHQsIHRhcmdldF9saW5rX2ZsYWdzKSwgIkA8PCIKKyAgICBwcmludCAiXHQkKE9CSlMpIgorICAgIHByaW50ICJcdCQoTElCUykiCisgICAgcHJpbnQgIlx0JChBREROX0xJTktfRklMRVMpIgorICAgIHByaW50ICJcdCQocHl0aG9ubGliKSAkKGxjdXN0b20pICQobF9kZWJ1ZykiCiAgICAgcHJpbnQgIlx0JChyZXNvdXJjZXMpIgorICAgIHByaW50ICI8PCIKICAgICBwcmludAogICAgIHByaW50ICJjbGVhbjoiCiAgICAgcHJpbnQgIlx0LXJtIC1mICoub2JqIgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weSBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlNzRkOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKQEAgLTAsMCArMSwxNDQ3IEBACisjIS91c3IvYmluL3B5dGhvbgorJycnCitGcm9tIGdkYiA3IG9ud2FyZHMsIGdkYidzIGJ1aWxkIGNhbiBiZSBjb25maWd1cmVkIC0td2l0aC1weXRob24sIGFsbG93aW5nIGdkYgordG8gYmUgZXh0ZW5kZWQgd2l0aCBQeXRob24gY29kZSBlLmcuIGZvciBsaWJyYXJ5LXNwZWNpZmljIGRhdGEgdmlzdWFsaXphdGlvbnMsCitzdWNoIGFzIGZvciB0aGUgQysrIFNUTCB0eXBlcy4gIERvY3VtZW50YXRpb24gb24gdGhpcyBBUEkgY2FuIGJlIHNlZW4gYXQ6CitodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2N1cnJlbnQvb25saW5lZG9jcy9nZGIvUHl0aG9uLUFQSS5odG1sCisKKworVGhpcyBweXRob24gbW9kdWxlIGRlYWxzIHdpdGggdGhlIGNhc2Ugd2hlbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZCAodGhlCisiaW5mZXJpb3IgcHJvY2VzcyIgaW4gZ2RiIHBhcmxhbmNlKSBpcyBpdHNlbGYgcHl0aG9uLCBvciBtb3JlIHNwZWNpZmljYWxseSwKK2xpbmtlZCBhZ2FpbnN0IGxpYnB5dGhvbi4gIEluIHRoaXMgc2l0dWF0aW9uLCBhbG1vc3QgZXZlcnkgaXRlbSBvZiBkYXRhIGlzIGEKKyhQeU9iamVjdCopLCBhbmQgaGF2aW5nIHRoZSBkZWJ1Z2dlciBtZXJlbHkgcHJpbnQgdGhlaXIgYWRkcmVzc2VzIGlzIG5vdCB2ZXJ5CitlbmxpZ2h0ZW5pbmcuCisKK1RoaXMgbW9kdWxlIGVtYmVkcyBrbm93bGVkZ2UgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgbGlicHl0aG9uIHNvCit0aGF0IHdlIGNhbiBlbWl0IHVzZWZ1bCB2aXN1YWxpemF0aW9ucyBlLmcuIGEgc3RyaW5nLCBhIGxpc3QsIGEgZGljdCwgYSBmcmFtZQorZ2l2aW5nIGZpbGUvbGluZSBpbmZvcm1hdGlvbiBhbmQgdGhlIHN0YXRlIG9mIGxvY2FsIHZhcmlhYmxlcworCitJbiBwYXJ0aWN1bGFyLCBnaXZlbiBhIGdkYi5WYWx1ZSBjb3JyZXNwb25kaW5nIHRvIGEgUHlPYmplY3QqIGluIHRoZSBpbmZlcmlvcgorcHJvY2Vzcywgd2UgY2FuIGdlbmVyYXRlIGEgInByb3h5IHZhbHVlIiB3aXRoaW4gdGhlIGdkYiBwcm9jZXNzLiAgRm9yIGV4YW1wbGUsCitnaXZlbiBhIFB5T2JqZWN0KiBpbiB0aGUgaW5mZXJpb3IgcHJvY2VzcyB0aGF0IGlzIGluIGZhY3QgYSBQeUxpc3RPYmplY3QqCitob2xkaW5nIHRocmVlIFB5T2JqZWN0KiB0aGF0IHR1cm4gb3V0IHRvIGJlIFB5U3RyaW5nT2JqZWN0KiBpbnN0YW5jZXMsIHdlIGNhbgorZ2VuZXJhdGUgYSBwcm94eSB2YWx1ZSB3aXRoaW4gdGhlIGdkYiBwcm9jZXNzIHRoYXQgaXMgYSBsaXN0IG9mIHN0cmluZ3M6CisgIFsiZm9vIiwgImJhciIsICJiYXoiXQorCitEb2luZyBzbyBjYW4gYmUgZXhwZW5zaXZlIGZvciBjb21wbGljYXRlZCBncmFwaHMgb2Ygb2JqZWN0cywgYW5kIGNvdWxkIHRha2UKK3NvbWUgdGltZSwgc28gd2UgYWxzbyBoYXZlIGEgIndyaXRlX3JlcHIiIG1ldGhvZCB0aGF0IHdyaXRlcyBhIHJlcHJlc2VudGF0aW9uCitvZiB0aGUgZGF0YSB0byBhIGZpbGUtbGlrZSBvYmplY3QuICBUaGlzIGFsbG93cyB1cyB0byBzdG9wIHRoZSB0cmF2ZXJzYWwgYnkKK2hhdmluZyB0aGUgZmlsZS1saWtlIG9iamVjdCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgZ2V0cyB0b28gbXVjaCBkYXRhLgorCitXaXRoIGJvdGggInByb3h5dmFsIiBhbmQgIndyaXRlX3JlcHIiIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHNldCBvZiBhbGwgYWRkcmVzc2VzCit2aXNpdGVkIHNvIGZhciBpbiB0aGUgdHJhdmVyc2FsLCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gZHVlIHRvIGN5Y2xlcyBpbgordGhlIGdyYXBoIG9mIG9iamVjdCByZWZlcmVuY2VzLgorCitXZSB0cnkgdG8gZGVmZXIgZ2RiLmxvb2t1cF90eXBlKCkgaW52b2NhdGlvbnMgZm9yIHB5dGhvbiB0eXBlcyB1bnRpbCBhcyBsYXRlIGFzCitwb3NzaWJsZTogZm9yIGEgZHluYW1pY2FsbHkgbGlua2VkIHB5dGhvbiBiaW5hcnksIHdoZW4gdGhlIHByb2Nlc3Mgc3RhcnRzIGluCit0aGUgZGVidWdnZXIsIHRoZSBsaWJweXRob24uc28gaGFzbid0IGJlZW4gZHluYW1pY2FsbHkgbG9hZGVkIHlldCwgc28gbm9uZSBvZgordGhlIHR5cGUgbmFtZXMgYXJlIGtub3duIHRvIHRoZSBkZWJ1Z2dlcgorCitUaGUgbW9kdWxlIGFsc28gZXh0ZW5kcyBnZGIgd2l0aCBzb21lIHB5dGhvbi1zcGVjaWZpYyBjb21tYW5kcy4KKycnJworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAoraW1wb3J0IGdkYgoraW1wb3J0IHN5cworCisjIExvb2sgdXAgdGhlIGdkYi5UeXBlIGZvciBzb21lIHN0YW5kYXJkIHR5cGVzOgorX3R5cGVfY2hhcl9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ2NoYXInKS5wb2ludGVyKCkgIyBjaGFyKgorX3R5cGVfdW5zaWduZWRfY2hhcl9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ3Vuc2lnbmVkIGNoYXInKS5wb2ludGVyKCkgIyB1bnNpZ25lZCBjaGFyKgorX3R5cGVfdm9pZF9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ3ZvaWQnKS5wb2ludGVyKCkgIyB2b2lkKgorX3R5cGVfc2l6ZV90ID0gZ2RiLmxvb2t1cF90eXBlKCdzaXplX3QnKQorCitTSVpFT0ZfVk9JRF9QID0gX3R5cGVfdm9pZF9wdHIuc2l6ZW9mCisKKworUHlfVFBGTEFHU19IRUFQVFlQRSA9ICgxTCA8PCA5KQorCitQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUyAgICAgID0gKDFMIDw8IDIzKQorUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICA9ICgxTCA8PCAyNCkKK1B5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgPSAoMUwgPDwgMjUpCitQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTICAgID0gKDFMIDw8IDI2KQorUHlfVFBGTEFHU19TVFJJTkdfU1VCQ0xBU1MgICA9ICgxTCA8PCAyNykKK1B5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgPSAoMUwgPDwgMjgpCitQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MgICAgID0gKDFMIDw8IDI5KQorUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyA9ICgxTCA8PCAzMCkKK1B5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgPSAoMUwgPDwgMzEpCisKKworTUFYX09VVFBVVF9MRU49MTAyNAorCitjbGFzcyBOdWxsUHlPYmplY3RQdHIoUnVudGltZUVycm9yKToKKyAgICBwYXNzCisKKworZGVmIHNhZmV0eV9saW1pdCh2YWwpOgorICAgICMgR2l2ZW4gYSBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQsIGxpbWl0IGl0IHRvIHNvbWUKKyAgICAjIHNhZmV0eSB0aHJlc2hvbGQgc28gdGhhdCBhcmJpdHJhcnkgYnJlYWthZ2Ugd2l0aGluIHNhaWQgcHJvY2VzcyBkb2Vzbid0CisgICAgIyBicmVhayB0aGUgZ2RiIHByb2Nlc3MgdG9vIG11Y2ggKGUuZy4gc2l6ZXMgb2YgaXRlcmF0aW9ucywgc2l6ZXMgb2YgbGlzdHMpCisgICAgcmV0dXJuIG1pbih2YWwsIDEwMDApCisKKworZGVmIHNhZmVfcmFuZ2UodmFsKToKKyAgICAjIEFzIHBlciByYW5nZSwgYnV0IGRvbid0IHRydXN0IHRoZSB2YWx1ZSB0b28gbXVjaDogY2FwIGl0IHRvIGEgc2FmZXR5CisgICAgIyB0aHJlc2hvbGQgaW4gY2FzZSB0aGUgZGF0YSB3YXMgY29ycnVwdGVkCisgICAgcmV0dXJuIHhyYW5nZShzYWZldHlfbGltaXQodmFsKSkKKworCitjbGFzcyBTdHJpbmdUcnVuY2F0ZWQoUnVudGltZUVycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFRydW5jYXRlZFN0cmluZ0lPKG9iamVjdCk6CisgICAgJycnU2ltaWxhciB0byBjU3RyaW5nSU8sIGJ1dCBjYW4gdHJ1bmNhdGUgdGhlIG91dHB1dCBieSByYWlzaW5nIGEKKyAgICBTdHJpbmdUcnVuY2F0ZWQgZXhjZXB0aW9uJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heGxlbj1Ob25lKToKKyAgICAgICAgc2VsZi5fdmFsID0gJycKKyAgICAgICAgc2VsZi5tYXhsZW4gPSBtYXhsZW4KKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5tYXhsZW46CisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgKyBsZW4oc2VsZi5fdmFsKSA+IHNlbGYubWF4bGVuOgorICAgICAgICAgICAgICAgICMgVHJ1bmNhdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLl92YWwgKz0gZGF0YVswOnNlbGYubWF4bGVuIC0gbGVuKHNlbGYuX3ZhbCldCisgICAgICAgICAgICAgICAgcmFpc2UgU3RyaW5nVHJ1bmNhdGVkKCkKKworICAgICAgICBzZWxmLl92YWwgKz0gZGF0YQorCisgICAgZGVmIGdldHZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsCisKK2NsYXNzIFB5T2JqZWN0UHRyKG9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgZWl0aGVyIGEgKFB5T2JqZWN0Kikgd2l0aGluIHRoZQorICAgIGluZmVyaW9yIHByb2Nlc3MsIG9yIHNvbWUgc3ViY2xhc3MgcG9pbnRlciBlLmcuIChQeVN0cmluZ09iamVjdCopCisKKyAgICBUaGVyZSB3aWxsIGJlIGEgc3ViY2xhc3MgZm9yIGV2ZXJ5IHJlZmluZWQgUHlPYmplY3QgdHlwZSB0aGF0IHdlIGNhcmUKKyAgICBhYm91dC4KKworICAgIE5vdGUgdGhhdCBhdCBldmVyeSBzdGFnZSB0aGUgdW5kZXJseWluZyBwb2ludGVyIGNvdWxkIGJlIE5VTEwsIHBvaW50CisgICAgdG8gY29ycnVwdCBkYXRhLCBldGM7IHRoaXMgaXMgdGhlIGRlYnVnZ2VyLCBhZnRlciBhbGwuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5T2JqZWN0JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdkYnZhbCwgY2FzdF90bz1Ob25lKToKKyAgICAgICAgaWYgY2FzdF90bzoKKyAgICAgICAgICAgIHNlbGYuX2dkYnZhbCA9IGdkYnZhbC5jYXN0KGNhc3RfdG8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9nZGJ2YWwgPSBnZGJ2YWwKKworICAgIGRlZiBmaWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCB0aGUgZ2RiLlZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgd2l0aGluIHRoZSBQeU9iamVjdCwgY29waW5nIHdpdGgKKyAgICAgICAgc29tZSBweXRob24gMiB2ZXJzdXMgcHl0aG9uIDMgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgVmFyaW91cyBsaWJweXRob24gdHlwZXMgYXJlIGRlZmluZWQgdXNpbmcgdGhlICJQeU9iamVjdF9IRUFEIiBhbmQKKyAgICAgICAgIlB5T2JqZWN0X1ZBUl9IRUFEIiBtYWNyb3MuCisKKyAgICAgICAgSW4gUHl0aG9uIDIsIHRoaXMgdGhlc2UgYXJlIGRlZmluZWQgc28gdGhhdCAib2JfdHlwZSIgYW5kIChmb3IgYSB2YXIKKyAgICAgICAgb2JqZWN0KSAib2Jfc2l6ZSIgYXJlIGZpZWxkcyBvZiB0aGUgdHlwZSBpbiBxdWVzdGlvbi4KKworICAgICAgICBJbiBQeXRob24gMywgdGhpcyBpcyBkZWZpbmVkIGFzIGFuIGVtYmVkZGVkIFB5VmFyT2JqZWN0IHR5cGUgdGh1czoKKyAgICAgICAgICAgUHlWYXJPYmplY3Qgb2JfYmFzZTsKKyAgICAgICAgc28gdGhhdCB0aGUgIm9iX3NpemUiIGZpZWxkIGlzIGxvY2F0ZWQgaW5zaXplIHRoZSAib2JfYmFzZSIgZmllbGQsIGFuZAorICAgICAgICB0aGUgIm9iX3R5cGUiIGlzIG1vc3QgZWFzaWx5IGFjY2Vzc2VkIGJ5IGNhc3RpbmcgYmFjayB0byBhIChQeU9iamVjdCopLgorICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19udWxsKCk6CisgICAgICAgICAgICByYWlzZSBOdWxsUHlPYmplY3RQdHIoc2VsZikKKworICAgICAgICBpZiBuYW1lID09ICdvYl90eXBlJzoKKyAgICAgICAgICAgIHB5b19wdHIgPSBzZWxmLl9nZGJ2YWwuY2FzdChQeU9iamVjdFB0ci5nZXRfZ2RiX3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBweW9fcHRyLmRlcmVmZXJlbmNlKClbbmFtZV0KKworICAgICAgICBpZiBuYW1lID09ICdvYl9zaXplJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgUHl0aG9uIDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5kZXJlZmVyZW5jZSgpW25hbWVdCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgICMgUHl0aG9uIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5kZXJlZmVyZW5jZSgpWydvYl9iYXNlJ11bbmFtZV0KKworICAgICAgICAjIEdlbmVyYWwgY2FzZTogbG9vayBpdCB1cCBpbnNpZGUgdGhlIG9iamVjdDoKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5kZXJlZmVyZW5jZSgpW25hbWVdCisKKyAgICBkZWYgcHlvcF9maWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCBhIFB5T2JqZWN0UHRyIGZvciB0aGUgZ2l2ZW4gUHlPYmplY3QqIGZpZWxkIHdpdGhpbiB0aGlzIFB5T2JqZWN0LAorICAgICAgICBjb3Bpbmcgd2l0aCBzb21lIHB5dGhvbiAyIHZlcnN1cyBweXRob24gMyBkaWZmZXJlbmNlcy4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmZpZWxkKG5hbWUpKQorCisgICAgZGVmIHdyaXRlX2ZpZWxkX3JlcHIoc2VsZiwgbmFtZSwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgJycnCisgICAgICAgIEV4dHJhY3QgdGhlIFB5T2JqZWN0KiBmaWVsZCBuYW1lZCAibmFtZSIsIGFuZCB3cml0ZSBpdHMgcmVwcmVzZW50YXRpb24KKyAgICAgICAgdG8gZmlsZS1saWtlIG9iamVjdCAib3V0IgorICAgICAgICAnJycKKyAgICAgICAgZmllbGRfb2JqID0gc2VsZi5weW9wX2ZpZWxkKG5hbWUpCisgICAgICAgIGZpZWxkX29iai53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKworICAgIGRlZiBnZXRfdHJ1bmNhdGVkX3JlcHIoc2VsZiwgbWF4bGVuKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCBhIHJlcHItbGlrZSBzdHJpbmcgZm9yIHRoZSBkYXRhLCBidXQgdHJ1bmNhdGUgaXQgYXQgIm1heGxlbiIgYnl0ZXMKKyAgICAgICAgKGVuZGluZyB0aGUgb2JqZWN0IGdyYXBoIHRyYXZlcnNhbCBhcyBzb29uIGFzIHlvdSBkbykKKyAgICAgICAgJycnCisgICAgICAgIG91dCA9IFRydW5jYXRlZFN0cmluZ0lPKG1heGxlbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi53cml0ZV9yZXByKG91dCwgc2V0KCkpCisgICAgICAgIGV4Y2VwdCBTdHJpbmdUcnVuY2F0ZWQ6CisgICAgICAgICAgICAjIFRydW5jYXRpb24gb2NjdXJyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkgKyAnLi4uKHRydW5jYXRlZCknCisKKyAgICAgICAgIyBObyB0cnVuY2F0aW9uIG9jY3VycmVkOgorICAgICAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKKworICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gUHlUeXBlT2JqZWN0UHRyKHNlbGYuZmllbGQoJ29iX3R5cGUnKSkKKworICAgIGRlZiBpc19udWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gMCA9PSBsb25nKHNlbGYuX2dkYnZhbCkKKworICAgIGRlZiBpc19vcHRpbWl6ZWRfb3V0KHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgSXMgdGhlIHZhbHVlIG9mIHRoZSB1bmRlcmx5aW5nIFB5T2JqZWN0KiB2aXNpYmxlIHRvIHRoZSBkZWJ1Z2dlcj8KKworICAgICAgICBUaGlzIGNhbiB2YXJ5IHdpdGggdGhlIHByZWNpc2UgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZAorICAgICAgICBQeXRob24sIGFuZCB0aGUgcHJlY2lzZSB2ZXJzaW9uIG9mIGdkYi4KKworICAgICAgICBTZWUgZS5nLiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTU1Njk3NSB3aXRoCisgICAgICAgIFB5RXZhbF9FdmFsRnJhbWVFeCdzICJmIgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5pc19vcHRpbWl6ZWRfb3V0CisKKyAgICBkZWYgc2FmZV90cF9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlKCkuZmllbGQoJ3RwX25hbWUnKS5zdHJpbmcoKQorICAgICAgICBleGNlcHQgTnVsbFB5T2JqZWN0UHRyOgorICAgICAgICAgICAgIyBOVUxMIHRwX25hbWU/CisgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24nCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIENhbid0IGV2ZW4gcmVhZCB0aGUgb2JqZWN0IGF0IGFsbD8KKyAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgJycnCisgICAgICAgIFNjcmFwZSBhIHZhbHVlIGZyb20gdGhlIGluZmVyaW9yIHByb2Nlc3MsIGFuZCB0cnkgdG8gcmVwcmVzZW50IGl0CisgICAgICAgIHdpdGhpbiB0aGUgZ2RiIHByb2Nlc3MsIHdoaWxzdCAoaG9wZWZ1bGx5KSBhdm9pZGluZyBjcmFzaGVzIHdoZW4KKyAgICAgICAgdGhlIHJlbW90ZSBkYXRhIGlzIGNvcnJ1cHQuCisKKyAgICAgICAgRGVyaXZlZCBjbGFzc2VzIHdpbGwgb3ZlcnJpZGUgdGhpcy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgYSBQeUludE9iamVjdCogd2l0aCBvYl9pdmFsIDQyIGluIHRoZSBpbmZlcmlvciBwcm9jZXNzCisgICAgICAgIHNob3VsZCByZXN1bHQgaW4gYW4gaW50KDQyKSBpbiB0aGlzIHByb2Nlc3MuCisKKyAgICAgICAgdmlzaXRlZDogYSBzZXQgb2YgYWxsIGdkYi5WYWx1ZSBweW9iamVjdCBwb2ludGVycyBhbHJlYWR5IHZpc2l0ZWQKKyAgICAgICAgd2hpbHN0IGdlbmVyYXRpbmcgdGhpcyB2YWx1ZSAodG8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24gd2hlbgorICAgICAgICB2aXNpdGluZyBvYmplY3QgZ3JhcGhzIHdpdGggbG9vcHMpLiAgQW5hbG9nb3VzIHRvIFB5X1JlcHJFbnRlciBhbmQKKyAgICAgICAgUHlfUmVwckxlYXZlCisgICAgICAgICcnJworCisgICAgICAgIGNsYXNzIEZha2VSZXByKG9iamVjdCk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENsYXNzIHJlcHJlc2VudGluZyBhIG5vbi1kZXNjcmlwdCBQeU9iamVjdCogdmFsdWUgaW4gdGhlIGluZmVyaW9yCisgICAgICAgICAgICBwcm9jZXNzIGZvciB3aGVuIHdlIGRvbid0IGhhdmUgYSBjdXN0b20gc2NyYXBlciwgaW50ZW5kZWQgdG8gaGF2ZQorICAgICAgICAgICAgYSBzYW5lIHJlcHIoKS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHBfbmFtZSwgYWRkcmVzcyk6CisgICAgICAgICAgICAgICAgc2VsZi50cF9uYW1lID0gdHBfbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKKworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgRm9yIHRoZSBOVUxMIHBvaW50ZXIsIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgYSB0eXBlLCBzbworICAgICAgICAgICAgICAgICMgc3BlY2lhbC1jYXNlIGl0IGFzIHBlcgorICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgwMzIjbXNnMTAwODgyCisgICAgICAgICAgICAgICAgaWYgc2VsZi5hZGRyZXNzID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnMHgwJworICAgICAgICAgICAgICAgIHJldHVybiAnPCVzIGF0IHJlbW90ZSAweCV4PicgJSAoc2VsZi50cF9uYW1lLCBzZWxmLmFkZHJlc3MpCisKKyAgICAgICAgcmV0dXJuIEZha2VSZXByKHNlbGYuc2FmZV90cF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb25nKHNlbGYuX2dkYnZhbCkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgV3JpdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIHNjcmFwZWQgZnJvbSB0aGUgaW5mZXJpb3IKKyAgICAgICAgcHJvY2VzcyB0byAib3V0IiwgYSBmaWxlLWxpa2Ugb2JqZWN0LgorICAgICAgICAnJycKKyAgICAgICAgIyBEZWZhdWx0IGltcGxlbWVudGF0aW9uOiBnZW5lcmF0ZSBhIHByb3h5IHZhbHVlIGFuZCB3cml0ZSBpdHMgcmVwcgorICAgICAgICAjIEhvd2V2ZXIsIHRoaXMgY291bGQgaW52b2x2ZSBhIGxvdCBvZiB3b3JrIGZvciBjb21wbGljYXRlZCBvYmplY3RzLAorICAgICAgICAjIHNvIGZvciBkZXJpdmVkIGNsYXNzZXMgd2Ugc3BlY2lhbGl6ZSB0aGlzCisgICAgICAgIHJldHVybiBvdXQud3JpdGUocmVwcihzZWxmLnByb3h5dmFsKHZpc2l0ZWQpKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJjbGFzc19mcm9tX3R5cGUoY2xzLCB0KToKKyAgICAgICAgJycnCisgICAgICAgIEdpdmVuIGEgUHlUeXBlT2JqZWN0UHRyIGluc3RhbmNlIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhCisgICAgICAgIChQeVR5cGVPYmplY3QqKSwgZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kaW5nIHN1YmNsYXNzIG9mIFB5T2JqZWN0UHRyCisgICAgICAgIHRvIHVzZQorCisgICAgICAgIElkZWFsbHksIHdlIHdvdWxkIGxvb2sgdXAgdGhlIHN5bWJvbHMgZm9yIHRoZSBnbG9iYWwgdHlwZXMsIGJ1dCB0aGF0CisgICAgICAgIGlzbid0IHdvcmtpbmcgeWV0OgorICAgICAgICAgIChnZGIpIHB5dGhvbiBwcmludCBnZGIubG9va3VwX3N5bWJvbCgnUHlMaXN0X1R5cGUnKVswXS52YWx1ZQorICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3I6IFN5bWJvbCB0eXBlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIFB5dGhvbiBzY3JpcHRzLgorICAgICAgICAgIEVycm9yIHdoaWxlIGV4ZWN1dGluZyBQeXRob24gY29kZS4KKworICAgICAgICBGb3Igbm93LCB3ZSB1c2UgdHBfZmxhZ3MsIGFmdGVyIGRvaW5nIHNvbWUgc3RyaW5nIGNvbXBhcmlzb25zIG9uIHRoZQorICAgICAgICB0cF9uYW1lIGZvciBzb21lIHNwZWNpYWwtY2FzZXMgdGhhdCBkb24ndCBzZWVtIHRvIGJlIHZpc2libGUgdGhyb3VnaAorICAgICAgICBmbGFncworICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHBfbmFtZSA9IHQuZmllbGQoJ3RwX25hbWUnKS5zdHJpbmcoKQorICAgICAgICAgICAgdHBfZmxhZ3MgPSBpbnQodC5maWVsZCgndHBfZmxhZ3MnKSkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGFueSBraW5kIG9mIGVycm9yIGUuZy4gTlVMTCBwdHJzIGJ5IHNpbXBseSB1c2luZyB0aGUgYmFzZQorICAgICAgICAgICAgIyBjbGFzcworICAgICAgICAgICAgcmV0dXJuIGNscworCisgICAgICAgICNwcmludCAndHBfZmxhZ3MgPSAweCUwOHgnICUgdHBfZmxhZ3MKKyAgICAgICAgI3ByaW50ICd0cF9uYW1lID0gJXInICUgdHBfbmFtZQorCisgICAgICAgIG5hbWVfbWFwID0geydib29sJzogUHlCb29sT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnY2xhc3NvYmonOiBQeUNsYXNzT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnaW5zdGFuY2UnOiBQeUluc3RhbmNlT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnTm9uZVR5cGUnOiBQeU5vbmVTdHJ1Y3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdmcmFtZSc6IFB5RnJhbWVPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdzZXQnIDogUHlTZXRPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdmcm96ZW5zZXQnIDogUHlTZXRPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdidWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZCcgOiBQeUNGdW5jdGlvbk9iamVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBpZiB0cF9uYW1lIGluIG5hbWVfbWFwOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVfbWFwW3RwX25hbWVdCisKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFOgorICAgICAgICAgICAgcmV0dXJuIEhlYXBUeXBlT2JqZWN0UHRyCisKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeUludE9iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlMaXN0T2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeVR1cGxlT2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19TVFJJTkdfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlTdHJpbmdPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlT2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTOgorICAgICAgICAgICAgcmV0dXJuIFB5RGljdE9iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlCYXNlRXhjZXB0aW9uT2JqZWN0UHRyCisgICAgICAgICNpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUzoKKyAgICAgICAgIyAgICByZXR1cm4gUHlUeXBlT2JqZWN0UHRyCisKKyAgICAgICAgIyBVc2UgdGhlIGJhc2UgY2xhc3M6CisgICAgICAgIHJldHVybiBjbHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tX3B5b2JqZWN0X3B0cihjbHMsIGdkYnZhbCk6CisgICAgICAgICcnJworICAgICAgICBUcnkgdG8gbG9jYXRlIHRoZSBhcHByb3ByaWF0ZSBkZXJpdmVkIGNsYXNzIGR5bmFtaWNhbGx5LCBhbmQgY2FzdAorICAgICAgICB0aGUgcG9pbnRlciBhY2NvcmRpbmdseS4KKyAgICAgICAgJycnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBQeU9iamVjdFB0cihnZGJ2YWwpCisgICAgICAgICAgICBjbHMgPSBjbHMuc3ViY2xhc3NfZnJvbV90eXBlKHAudHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGNscyhnZGJ2YWwsIGNhc3RfdG89Y2xzLmdldF9nZGJfdHlwZSgpKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBIYW5kbGUgYW55IGtpbmQgb2YgZXJyb3IgZS5nLiBOVUxMIHB0cnMgYnkgc2ltcGx5IHVzaW5nIHRoZSBiYXNlCisgICAgICAgICAgICAjIGNsYXNzCisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBjbHMoZ2RidmFsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9nZGJfdHlwZShjbHMpOgorICAgICAgICByZXR1cm4gZ2RiLmxvb2t1cF90eXBlKGNscy5fdHlwZW5hbWUpLnBvaW50ZXIoKQorCisgICAgZGVmIGFzX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHJldHVybiBsb25nKHNlbGYuX2dkYnZhbCkKKworCitjbGFzcyBQcm94eUFscmVhZHlWaXNpdGVkKG9iamVjdCk6CisgICAgJycnCisgICAgUGxhY2Vob2xkZXIgcHJveHkgdG8gdXNlIHdoZW4gcHJvdGVjdGluZyBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8KKyAgICBsb29wcyBpbiB0aGUgb2JqZWN0IGdyYXBoLgorCisgICAgQW5hbG9nb3VzIHRvIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgdXNlcnMgb2YgUHlfUmVwckVudGVyIGFuZCBQeV9SZXByTGVhdmUKKyAgICAnJycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwKToKKyAgICAgICAgc2VsZi5fcmVwID0gcmVwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXAKKworCitkZWYgX3dyaXRlX2luc3RhbmNlX3JlcHIob3V0LCB2aXNpdGVkLCBuYW1lLCBweW9wX2F0dHJkaWN0LCBhZGRyZXNzKToKKyAgICAnJydTaGFyZWQgY29kZSBmb3IgdXNlIGJ5IG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNsYXNzZXM6CisgICAgd3JpdGUgYSByZXByZXNlbnRhdGlvbiB0byBmaWxlLWxpa2Ugb2JqZWN0ICJvdXQiJycnCisgICAgb3V0LndyaXRlKCc8JykKKyAgICBvdXQud3JpdGUobmFtZSkKKworICAgICMgV3JpdGUgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgIGlmIGlzaW5zdGFuY2UocHlvcF9hdHRyZGljdCwgUHlEaWN0T2JqZWN0UHRyKToKKyAgICAgICAgb3V0LndyaXRlKCcoJykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX2FyZywgcHlvcF92YWwgaW4gcHlvcF9hdHRyZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIG91dC53cml0ZShweW9wX2FyZy5wcm94eXZhbCh2aXNpdGVkKSkKKyAgICAgICAgICAgIG91dC53cml0ZSgnPScpCisgICAgICAgICAgICBweW9wX3ZhbC53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgb3V0LndyaXRlKCcpJykKKyAgICBvdXQud3JpdGUoJyBhdCByZW1vdGUgMHgleD4nICUgYWRkcmVzcykKKworCitjbGFzcyBJbnN0YW5jZVByb3h5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xfbmFtZSwgYXR0cmRpY3QsIGFkZHJlc3MpOgorICAgICAgICBzZWxmLmNsX25hbWUgPSBjbF9uYW1lCisgICAgICAgIHNlbGYuYXR0cmRpY3QgPSBhdHRyZGljdAorICAgICAgICBzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5hdHRyZGljdCwgZGljdCk6CisgICAgICAgICAgICBrd2FyZ3MgPSAnLCAnLmpvaW4oWyIlcz0lciIgJSAoYXJnLCB2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcsIHZhbCBpbiBzZWxmLmF0dHJkaWN0Lml0ZXJpdGVtcygpXSkKKyAgICAgICAgICAgIHJldHVybiAnPCVzKCVzKSBhdCByZW1vdGUgMHgleD4nICUgKHNlbGYuY2xfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJncywgc2VsZi5hZGRyZXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgYXQgcmVtb3RlIDB4JXg+JyAlIChzZWxmLmNsX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcykKKworZGVmIF9QeU9iamVjdF9WQVJfU0laRSh0eXBlb2JqLCBuaXRlbXMpOgorICAgIHJldHVybiAoICggdHlwZW9iai5maWVsZCgndHBfYmFzaWNzaXplJykgKworICAgICAgICAgICAgICAgbml0ZW1zICogdHlwZW9iai5maWVsZCgndHBfaXRlbXNpemUnKSArCisgICAgICAgICAgICAgICAoU0laRU9GX1ZPSURfUCAtIDEpCisgICAgICAgICAgICAgKSAmIH4oU0laRU9GX1ZPSURfUCAtIDEpCisgICAgICAgICAgICkuY2FzdChfdHlwZV9zaXplX3QpCisKK2NsYXNzIEhlYXBUeXBlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlPYmplY3QnCisKKyAgICBkZWYgZ2V0X2F0dHJfZGljdChzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCB0aGUgUHlEaWN0T2JqZWN0IHB0ciByZXByZXNlbnRpbmcgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisgICAgICAgIChvciBOb25lIGlmIHRoZXJlJ3MgYSBwcm9ibGVtKQorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHlwZW9iaiA9IHNlbGYudHlwZSgpCisgICAgICAgICAgICBkaWN0b2Zmc2V0ID0gaW50X2Zyb21faW50KHR5cGVvYmouZmllbGQoJ3RwX2RpY3RvZmZzZXQnKSkKKyAgICAgICAgICAgIGlmIGRpY3RvZmZzZXQgIT0gMDoKKyAgICAgICAgICAgICAgICBpZiBkaWN0b2Zmc2V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9QeVZhck9iamVjdF9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ1B5VmFyT2JqZWN0JykucG9pbnRlcigpCisgICAgICAgICAgICAgICAgICAgIHRzaXplID0gaW50X2Zyb21faW50KHNlbGYuX2dkYnZhbC5jYXN0KHR5cGVfUHlWYXJPYmplY3RfcHRyKVsnb2Jfc2l6ZSddKQorICAgICAgICAgICAgICAgICAgICBpZiB0c2l6ZSA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB0c2l6ZSA9IC10c2l6ZQorICAgICAgICAgICAgICAgICAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHR5cGVvYmosIHRzaXplKQorICAgICAgICAgICAgICAgICAgICBkaWN0b2Zmc2V0ICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGRpY3RvZmZzZXQgPiAwCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBkaWN0b2Zmc2V0ICUgU0laRU9GX1ZPSURfUCA9PSAwCisKKyAgICAgICAgICAgICAgICBkaWN0cHRyID0gc2VsZi5fZ2RidmFsLmNhc3QoX3R5cGVfY2hhcl9wdHIpICsgZGljdG9mZnNldAorICAgICAgICAgICAgICAgIFB5T2JqZWN0UHRyUHRyID0gUHlPYmplY3RQdHIuZ2V0X2dkYl90eXBlKCkucG9pbnRlcigpCisgICAgICAgICAgICAgICAgZGljdHB0ciA9IGRpY3RwdHIuY2FzdChQeU9iamVjdFB0clB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZGljdHB0ci5kZXJlZmVyZW5jZSgpKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBDb3JydXB0IGRhdGEgc29tZXdoZXJlOyBmYWlsIHNhZmUKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIE5vdCBmb3VuZCwgb3Igc29tZSBraW5kIG9mIGVycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgU3VwcG9ydCBmb3IgbmV3LXN0eWxlIGNsYXNzZXMuCisKKyAgICAgICAgQ3VycmVudGx5IHdlIGp1c3QgbG9jYXRlIHRoZSBkaWN0aW9uYXJ5IHVzaW5nIGEgdHJhbnNsaXRlcmF0aW9uIHRvCisgICAgICAgIHB5dGhvbiBvZiBfUHlPYmplY3RfR2V0RGljdFB0ciwgaWdub3JpbmcgZGVzY3JpcHRvcnMKKyAgICAgICAgJycnCisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCc8Li4uPicpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHB5b3BfYXR0cl9kaWN0ID0gc2VsZi5nZXRfYXR0cl9kaWN0KCkKKyAgICAgICAgaWYgcHlvcF9hdHRyX2RpY3Q6CisgICAgICAgICAgICBhdHRyX2RpY3QgPSBweW9wX2F0dHJfZGljdC5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXR0cl9kaWN0ID0ge30KKyAgICAgICAgdHBfbmFtZSA9IHNlbGYuc2FmZV90cF9uYW1lKCkKKworICAgICAgICAjIE5ldy1zdHlsZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIEluc3RhbmNlUHJveHkodHBfbmFtZSwgYXR0cl9kaWN0LCBsb25nKHNlbGYuX2dkYnZhbCkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJzwuLi4+JykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBweW9wX2F0dHJkaWN0ID0gc2VsZi5nZXRfYXR0cl9kaWN0KCkKKyAgICAgICAgX3dyaXRlX2luc3RhbmNlX3JlcHIob3V0LCB2aXNpdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhZmVfdHBfbmFtZSgpLCBweW9wX2F0dHJkaWN0LCBzZWxmLmFzX2FkZHJlc3MoKSkKKworY2xhc3MgUHJveHlFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHBfbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYudHBfbmFtZSA9IHRwX25hbWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzJXInICUgKHNlbGYudHBfbmFtZSwgc2VsZi5hcmdzKQorCitjbGFzcyBQeUJhc2VFeGNlcHRpb25PYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5QmFzZUV4Y2VwdGlvbk9iamVjdCogaS5lLiBhbiBleGNlcHRpb24KKyAgICB3aXRoaW4gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5QmFzZUV4Y2VwdGlvbk9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyguLi4pJykKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisgICAgICAgIGFyZ19wcm94eSA9IHNlbGYucHlvcF9maWVsZCgnYXJncycpLnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgIHJldHVybiBQcm94eUV4Y2VwdGlvbihzZWxmLnNhZmVfdHBfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3Byb3h5KQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCcoLi4uKScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKHNlbGYuc2FmZV90cF9uYW1lKCkpCisgICAgICAgIHNlbGYud3JpdGVfZmllbGRfcmVwcignYXJncycsIG91dCwgdmlzaXRlZCkKKworY2xhc3MgUHlCb29sT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeUJvb2xPYmplY3QqIGkuZS4gb25lIG9mIHRoZSB0d28KKyAgICA8Ym9vbD4gaW5zdGFuY2VzIChQeV9UcnVlL1B5X0ZhbHNlKSB3aXRoaW4gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5Qm9vbE9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgaWYgaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ29iX2l2YWwnKSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgUHlDbGFzc09iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlDbGFzc09iamVjdCogaS5lLiBhIDxjbGFzc29iaj4KKyAgICBpbnN0YW5jZSB3aXRoaW4gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5Q2xhc3NPYmplY3QnCisKKworY2xhc3MgQnVpbHRJbkZ1bmN0aW9uUHJveHkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWxfbmFtZSk6CisgICAgICAgIHNlbGYubWxfbmFtZSA9IG1sX25hbWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8YnVpbHQtaW4gZnVuY3Rpb24gJXM+IiAlIHNlbGYubWxfbmFtZQorCitjbGFzcyBCdWlsdEluTWV0aG9kUHJveHkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWxfbmFtZSwgcHlvcF9tX3NlbGYpOgorICAgICAgICBzZWxmLm1sX25hbWUgPSBtbF9uYW1lCisgICAgICAgIHNlbGYucHlvcF9tX3NlbGYgPSBweW9wX21fc2VsZgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8YnVpbHQtaW4gbWV0aG9kICVzIG9mICVzIG9iamVjdCBhdCByZW1vdGUgMHgleD4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5tbF9uYW1lLAorICAgICAgICAgICAgICAgICAgIHNlbGYucHlvcF9tX3NlbGYuc2FmZV90cF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgc2VsZi5weW9wX21fc2VsZi5hc19hZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgKQorCitjbGFzcyBQeUNGdW5jdGlvbk9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlDRnVuY3Rpb25PYmplY3QqCisgICAgKHNlZSBJbmNsdWRlL21ldGhvZG9iamVjdC5oIGFuZCBPYmplY3RzL21ldGhvZG9iamVjdC5jKQorICAgICIiIgorICAgIF90eXBlbmFtZSA9ICdQeUNGdW5jdGlvbk9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgbV9tbCA9IHNlbGYuZmllbGQoJ21fbWwnKSAjIG1fbWwgaXMgYSAoUHlNZXRob2REZWYqKQorICAgICAgICBtbF9uYW1lID0gbV9tbFsnbWxfbmFtZSddLnN0cmluZygpCisKKyAgICAgICAgcHlvcF9tX3NlbGYgPSBzZWxmLnB5b3BfZmllbGQoJ21fc2VsZicpCisgICAgICAgIGlmIHB5b3BfbV9zZWxmLmlzX251bGwoKToKKyAgICAgICAgICAgIHJldHVybiBCdWlsdEluRnVuY3Rpb25Qcm94eShtbF9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5NZXRob2RQcm94eShtbF9uYW1lLCBweW9wX21fc2VsZikKKworCitjbGFzcyBQeUNvZGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5Q29kZU9iamVjdCogaS5lLiBhIDxjb2RlPiBpbnN0YW5jZQorICAgIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlDb2RlT2JqZWN0JworCisgICAgZGVmIGFkZHIybGluZShzZWxmLCBhZGRycSk6CisgICAgICAgICcnJworICAgICAgICBHZXQgdGhlIGxpbmUgbnVtYmVyIGZvciBhIGdpdmVuIGJ5dGVjb2RlIG9mZnNldAorCisgICAgICAgIEFuYWxvZ291cyB0byBQeUNvZGVfQWRkcjJMaW5lOyB0cmFuc2xhdGVkIGZyb20gcHNldWRvY29kZSBpbgorICAgICAgICBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQKKyAgICAgICAgJycnCisgICAgICAgIGNvX2xub3RhYiA9IHNlbGYucHlvcF9maWVsZCgnY29fbG5vdGFiJykucHJveHl2YWwoc2V0KCkpCisKKyAgICAgICAgIyBJbml0aWFsaXplIGxpbmVubyB0byBjb19maXJzdGxpbmVubyBhcyBwZXIgUHlDb2RlX0FkZHIyTGluZQorICAgICAgICAjIG5vdCAwLCBhcyBsbm90YWJfbm90ZXMudHh0IGhhcyBpdDoKKyAgICAgICAgbGluZW5vID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ2NvX2ZpcnN0bGluZW5vJykpCisKKyAgICAgICAgYWRkciA9IDAKKyAgICAgICAgZm9yIGFkZHJfaW5jciwgbGluZV9pbmNyIGluIHppcChjb19sbm90YWJbOjoyXSwgY29fbG5vdGFiWzE6OjJdKToKKyAgICAgICAgICAgIGFkZHIgKz0gb3JkKGFkZHJfaW5jcikKKyAgICAgICAgICAgIGlmIGFkZHIgPiBhZGRycToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZW5vCisgICAgICAgICAgICBsaW5lbm8gKz0gb3JkKGxpbmVfaW5jcikKKyAgICAgICAgcmV0dXJuIGxpbmVubworCisKK2NsYXNzIFB5RGljdE9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlEaWN0T2JqZWN0KiBpLmUuIGEgZGljdCBpbnN0YW5jZQorICAgIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlEaWN0T2JqZWN0JworCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIFlpZWxkcyBhIHNlcXVlbmNlIG9mIChQeU9iamVjdFB0ciBrZXksIFB5T2JqZWN0UHRyIHZhbHVlKSBwYWlycywKKyAgICAgICAgYW5hbGFnb3VzIHRvIGRpY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgJycnCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFfbWFzaycpICsgMSk6CisgICAgICAgICAgICBlcCA9IHNlbGYuZmllbGQoJ21hX3RhYmxlJykgKyBpCisgICAgICAgICAgICBweW9wX3ZhbHVlID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZXBbJ21lX3ZhbHVlJ10pCisgICAgICAgICAgICBpZiBub3QgcHlvcF92YWx1ZS5pc19udWxsKCk6CisgICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihlcFsnbWVfa2V5J10pCisgICAgICAgICAgICAgICAgeWllbGQgKHB5b3Bfa2V5LCBweW9wX3ZhbHVlKQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgney4uLn0nKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBmb3IgcHlvcF9rZXksIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHByb3h5X2tleSA9IHB5b3Bfa2V5LnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgICAgICBwcm94eV92YWx1ZSA9IHB5b3BfdmFsdWUucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgICAgIHJlc3VsdFtwcm94eV9rZXldID0gcHJveHlfdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCd7Li4ufScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKCd7JykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX2tleSwgcHlvcF92YWx1ZSBpbiBzZWxmLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgICAgICBvdXQud3JpdGUoJzogJykKKyAgICAgICAgICAgIHB5b3BfdmFsdWUud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIG91dC53cml0ZSgnfScpCisKK2NsYXNzIFB5SW5zdGFuY2VPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUluc3RhbmNlT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnPC4uLj4nKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICAjIEdldCBuYW1lIG9mIGNsYXNzOgorICAgICAgICBpbl9jbGFzcyA9IHNlbGYucHlvcF9maWVsZCgnaW5fY2xhc3MnKQorICAgICAgICBjbF9uYW1lID0gaW5fY2xhc3MucHlvcF9maWVsZCgnY2xfbmFtZScpLnByb3h5dmFsKHZpc2l0ZWQpCisKKyAgICAgICAgIyBHZXQgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgICAgICBpbl9kaWN0ID0gc2VsZi5weW9wX2ZpZWxkKCdpbl9kaWN0JykucHJveHl2YWwodmlzaXRlZCkKKworICAgICAgICAjIE9sZC1zdHlsZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIEluc3RhbmNlUHJveHkoY2xfbmFtZSwgaW5fZGljdCwgbG9uZyhzZWxmLl9nZGJ2YWwpKQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCc8Li4uPicpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgIyBPbGQtc3R5bGUgY2xhc3M6CisKKyAgICAgICAgIyBHZXQgbmFtZSBvZiBjbGFzczoKKyAgICAgICAgaW5fY2xhc3MgPSBzZWxmLnB5b3BfZmllbGQoJ2luX2NsYXNzJykKKyAgICAgICAgY2xfbmFtZSA9IGluX2NsYXNzLnB5b3BfZmllbGQoJ2NsX25hbWUnKS5wcm94eXZhbCh2aXNpdGVkKQorCisgICAgICAgICMgR2V0IGRpY3Rpb25hcnkgb2YgaW5zdGFuY2UgYXR0cmlidXRlczoKKyAgICAgICAgcHlvcF9pbl9kaWN0ID0gc2VsZi5weW9wX2ZpZWxkKCdpbl9kaWN0JykKKworICAgICAgICBfd3JpdGVfaW5zdGFuY2VfcmVwcihvdXQsIHZpc2l0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsX25hbWUsIHB5b3BfaW5fZGljdCwgc2VsZi5hc19hZGRyZXNzKCkpCisKK2NsYXNzIFB5SW50T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlJbnRPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgIHJlc3VsdCA9IGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9pdmFsJykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgUHlMaXN0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlMaXN0T2JqZWN0JworCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAjIEdldCB0aGUgZ2RiLlZhbHVlIGZvciB0aGUgKFB5T2JqZWN0Kikgd2l0aCB0aGUgZ2l2ZW4gaW5kZXg6CisgICAgICAgIGZpZWxkX29iX2l0ZW0gPSBzZWxmLmZpZWxkKCdvYl9pdGVtJykKKyAgICAgICAgcmV0dXJuIGZpZWxkX29iX2l0ZW1baV0KKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJ1suLi5dJykKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgcmVzdWx0ID0gW1B5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGZbaV0pLnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9zaXplJykpKV0KKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCdbLi4uXScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKCdbJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnb2Jfc2l6ZScpKSk6CisgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGVsZW1lbnQgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmW2ldKQorICAgICAgICAgICAgZWxlbWVudC53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgb3V0LndyaXRlKCddJykKKworY2xhc3MgUHlMb25nT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlMb25nT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgUHl0aG9uJ3MgSW5jbHVkZS9sb25nb2JqcmVwLmggaGFzIHRoaXMgZGVjbGFyYXRpb246CisgICAgICAgICAgIHN0cnVjdCBfbG9uZ29iamVjdCB7CisgICAgICAgICAgICAgICBQeU9iamVjdF9WQVJfSEVBRAorICAgICAgICAgICAgICAgZGlnaXQgb2JfZGlnaXRbMV07CisgICAgICAgICAgIH07CisKKyAgICAgICAgd2l0aCB0aGlzIGRlc2NyaXB0aW9uOgorICAgICAgICAgICAgVGhlIGFic29sdXRlIHZhbHVlIG9mIGEgbnVtYmVyIGlzIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgIFNVTShmb3IgaT0wIHRocm91Z2ggYWJzKG9iX3NpemUpLTEpIG9iX2RpZ2l0W2ldICogMioqKFNISUZUKmkpCisgICAgICAgICAgICBOZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCB3aXRoIG9iX3NpemUgPCAwOworICAgICAgICAgICAgemVybyBpcyByZXByZXNlbnRlZCBieSBvYl9zaXplID09IDAuCisKKyAgICAgICAgd2hlcmUgU0hJRlQgY2FuIGJlIGVpdGhlcjoKKyAgICAgICAgICAgICNkZWZpbmUgUHlMb25nX1NISUZUICAgICAgICAzMAorICAgICAgICAgICAgI2RlZmluZSBQeUxvbmdfU0hJRlQgICAgICAgIDE1CisgICAgICAgICcnJworICAgICAgICBvYl9zaXplID0gbG9uZyhzZWxmLmZpZWxkKCdvYl9zaXplJykpCisgICAgICAgIGlmIG9iX3NpemUgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAwTAorCisgICAgICAgIG9iX2RpZ2l0ID0gc2VsZi5maWVsZCgnb2JfZGlnaXQnKQorCisgICAgICAgIGlmIGdkYi5sb29rdXBfdHlwZSgnZGlnaXQnKS5zaXplb2YgPT0gMjoKKyAgICAgICAgICAgIFNISUZUID0gMTVMCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBTSElGVCA9IDMwTAorCisgICAgICAgIGRpZ2l0cyA9IFtsb25nKG9iX2RpZ2l0W2ldKSAqIDIqKihTSElGVCppKQorICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShhYnMob2Jfc2l6ZSkpXQorICAgICAgICByZXN1bHQgPSBzdW0oZGlnaXRzKQorICAgICAgICBpZiBvYl9zaXplIDwgMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IC1yZXN1bHQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKK2NsYXNzIFB5Tm9uZVN0cnVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlPYmplY3QqIHBvaW50aW5nIHRvIHRoZQorICAgIHNpbmdsZXRvbiAod2UgaG9wZSkgX1B5X05vbmVTdHJ1Y3Qgd2l0aCBvYl90eXBlIFB5Tm9uZV9UeXBlCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5T2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFB5RnJhbWVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUZyYW1lT2JqZWN0JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdkYnZhbCwgY2FzdF90byk6CisgICAgICAgIFB5T2JqZWN0UHRyLl9faW5pdF9fKHNlbGYsIGdkYnZhbCwgY2FzdF90bykKKworICAgICAgICBpZiBub3Qgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICBzZWxmLmNvID0gUHlDb2RlT2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGYuZmllbGQoJ2ZfY29kZScpKQorICAgICAgICAgICAgc2VsZi5jb19uYW1lID0gc2VsZi5jby5weW9wX2ZpZWxkKCdjb19uYW1lJykKKyAgICAgICAgICAgIHNlbGYuY29fZmlsZW5hbWUgPSBzZWxmLmNvLnB5b3BfZmllbGQoJ2NvX2ZpbGVuYW1lJykKKworICAgICAgICAgICAgc2VsZi5mX2xpbmVubyA9IGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdmX2xpbmVubycpKQorICAgICAgICAgICAgc2VsZi5mX2xhc3RpID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ2ZfbGFzdGknKSkKKyAgICAgICAgICAgIHNlbGYuY29fbmxvY2FscyA9IGludF9mcm9tX2ludChzZWxmLmNvLmZpZWxkKCdjb19ubG9jYWxzJykpCisgICAgICAgICAgICBzZWxmLmNvX3Zhcm5hbWVzID0gUHlUdXBsZU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmNvLmZpZWxkKCdjb192YXJuYW1lcycpKQorCisgICAgZGVmIGl0ZXJfbG9jYWxzKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGQgYSBzZXF1ZW5jZSBvZiAobmFtZSx2YWx1ZSkgcGFpcnMgb2YgUHlPYmplY3RQdHIgaW5zdGFuY2VzLCBmb3IKKyAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGlzIGZyYW1lCisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZfbG9jYWxzcGx1cyA9IHNlbGYuZmllbGQoJ2ZfbG9jYWxzcGx1cycpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5jb19ubG9jYWxzKToKKyAgICAgICAgICAgIHB5b3BfdmFsdWUgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihmX2xvY2Fsc3BsdXNbaV0pCisgICAgICAgICAgICBpZiBub3QgcHlvcF92YWx1ZS5pc19udWxsKCk6CisgICAgICAgICAgICAgICAgcHlvcF9uYW1lID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZi5jb192YXJuYW1lc1tpXSkKKyAgICAgICAgICAgICAgICB5aWVsZCAocHlvcF9uYW1lLCBweW9wX3ZhbHVlKQorCisgICAgZGVmIGl0ZXJfZ2xvYmFscyhzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIFlpZWxkIGEgc2VxdWVuY2Ugb2YgKG5hbWUsdmFsdWUpIHBhaXJzIG9mIFB5T2JqZWN0UHRyIGluc3RhbmNlcywgZm9yCisgICAgICAgIHRoZSBnbG9iYWwgdmFyaWFibGVzIG9mIHRoaXMgZnJhbWUKKyAgICAgICAgJycnCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHlvcF9nbG9iYWxzID0gc2VsZi5weW9wX2ZpZWxkKCdmX2dsb2JhbHMnKQorICAgICAgICByZXR1cm4gcHlvcF9nbG9iYWxzLml0ZXJpdGVtcygpCisKKyAgICBkZWYgaXRlcl9idWlsdGlucyhzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIFlpZWxkIGEgc2VxdWVuY2Ugb2YgKG5hbWUsdmFsdWUpIHBhaXJzIG9mIFB5T2JqZWN0UHRyIGluc3RhbmNlcywgZm9yCisgICAgICAgIHRoZSBidWlsdGluIHZhcmlhYmxlcworICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2J1aWx0aW5zID0gc2VsZi5weW9wX2ZpZWxkKCdmX2J1aWx0aW5zJykKKyAgICAgICAgcmV0dXJuIHB5b3BfYnVpbHRpbnMuaXRlcml0ZW1zKCkKKworICAgIGRlZiBnZXRfdmFyX2J5X25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJworICAgICAgICBMb29rIGZvciB0aGUgbmFtZWQgbG9jYWwgdmFyaWFibGUsIHJldHVybmluZyBhIChQeU9iamVjdFB0ciwgc2NvcGUpIHBhaXIKKyAgICAgICAgd2hlcmUgc2NvcGUgaXMgYSBzdHJpbmcgJ2xvY2FsJywgJ2dsb2JhbCcsICdidWlsdGluJworCisgICAgICAgIElmIG5vdCBmb3VuZCwgcmV0dXJuIChOb25lLCBOb25lKQorICAgICAgICAnJycKKyAgICAgICAgZm9yIHB5b3BfbmFtZSwgcHlvcF92YWx1ZSBpbiBzZWxmLml0ZXJfbG9jYWxzKCk6CisgICAgICAgICAgICBpZiBuYW1lID09IHB5b3BfbmFtZS5wcm94eXZhbChzZXQoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5b3BfdmFsdWUsICdsb2NhbCcKKyAgICAgICAgZm9yIHB5b3BfbmFtZSwgcHlvcF92YWx1ZSBpbiBzZWxmLml0ZXJfZ2xvYmFscygpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSBweW9wX25hbWUucHJveHl2YWwoc2V0KCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBweW9wX3ZhbHVlLCAnZ2xvYmFsJworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9idWlsdGlucygpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSBweW9wX25hbWUucHJveHl2YWwoc2V0KCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBweW9wX3ZhbHVlLCAnYnVpbHRpbicKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgIGRlZiBmaWxlbmFtZShzZWxmKToKKyAgICAgICAgJycnR2V0IHRoZSBwYXRoIG9mIHRoZSBjdXJyZW50IFB5dGhvbiBzb3VyY2UgZmlsZSwgYXMgYSBzdHJpbmcnJycKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICByZXR1cm4gJyhmcmFtZSBpbmZvcm1hdGlvbiBvcHRpbWl6ZWQgb3V0KScKKyAgICAgICAgcmV0dXJuIHNlbGYuY29fZmlsZW5hbWUucHJveHl2YWwoc2V0KCkpCisKKyAgICBkZWYgY3VycmVudF9saW5lX251bShzZWxmKToKKyAgICAgICAgJycnR2V0IGN1cnJlbnQgbGluZSBudW1iZXIgYXMgYW4gaW50ZWdlciAoMS1iYXNlZCkKKworICAgICAgICBUcmFuc2xhdGVkIGZyb20gUHlGcmFtZV9HZXRMaW5lTnVtYmVyIGFuZCBQeUNvZGVfQWRkcjJMaW5lCisKKyAgICAgICAgU2VlIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dAorICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmX3RyYWNlID0gc2VsZi5maWVsZCgnZl90cmFjZScpCisgICAgICAgIGlmIGxvbmcoZl90cmFjZSkgIT0gMDoKKyAgICAgICAgICAgICMgd2UgaGF2ZSBhIG5vbi1OVUxMIGZfdHJhY2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mX2xpbmVubworICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3RyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvLmFkZHIybGluZShzZWxmLmZfbGFzdGkpCisgICAgICAgICAgICAjZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjICAgIHJldHVybiBzZWxmLmZfbGluZW5vCisKKyAgICBkZWYgY3VycmVudF9saW5lKHNlbGYpOgorICAgICAgICAnJydHZXQgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnQgc291cmNlIGxpbmUgYXMgYSBzdHJpbmcsIHdpdGggYSB0cmFpbGluZworICAgICAgICBuZXdsaW5lIGNoYXJhY3RlcicnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybiAnKGZyYW1lIGluZm9ybWF0aW9uIG9wdGltaXplZCBvdXQpJworICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSgpLCAncicpIGFzIGY6CisgICAgICAgICAgICBhbGxfbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAjIENvbnZlcnQgZnJvbSAxLWJhc2VkIGN1cnJlbnRfbGluZV9udW0gdG8gMC1iYXNlZCBsaXN0IG9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiBhbGxfbGluZXNbc2VsZi5jdXJyZW50X2xpbmVfbnVtKCktMV0KKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgb3V0LndyaXRlKCcoZnJhbWUgaW5mb3JtYXRpb24gb3B0aW1pemVkIG91dCknKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG91dC53cml0ZSgnRnJhbWUgMHgleCwgZm9yIGZpbGUgJXMsIGxpbmUgJWksIGluICVzICgnCisgICAgICAgICAgICAgICAgICAlIChzZWxmLmFzX2FkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfbGluZV9udW0oKSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29fbmFtZSkpCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9sb2NhbHMoKToKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKworICAgICAgICAgICAgb3V0LndyaXRlKHB5b3BfbmFtZS5wcm94eXZhbCh2aXNpdGVkKSkKKyAgICAgICAgICAgIG91dC53cml0ZSgnPScpCisgICAgICAgICAgICBweW9wX3ZhbHVlLndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorCisgICAgICAgIG91dC53cml0ZSgnKScpCisKK2NsYXNzIFB5U2V0T2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlTZXRPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCclcyguLi4pJyAlIHNlbGYuc2FmZV90cF9uYW1lKCkpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIG1lbWJlcnMgPSBbXQorICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6CisgICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCisgICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KKyAgICAgICAgICAgIGlmIGtleSAhPSAwOgorICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKKyAgICAgICAgICAgICAgICAgICAgbWVtYmVycy5hcHBlbmQoa2V5X3Byb3h5KQorICAgICAgICBpZiBzZWxmLnNhZmVfdHBfbmFtZSgpID09ICdmcm96ZW5zZXQnOgorICAgICAgICAgICAgcmV0dXJuIGZyb3plbnNldChtZW1iZXJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNldChtZW1iZXJzKQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgb3V0LndyaXRlKHNlbGYuc2FmZV90cF9uYW1lKCkpCisKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCcoLi4uKScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKCcoWycpCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6CisgICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCisgICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KKyAgICAgICAgICAgIGlmIGtleSAhPSAwOgorICAgICAgICAgICAgICAgIHB5b3Bfa2V5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQorICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IHB5b3Bfa2V5LnByb3h5dmFsKHZpc2l0ZWQpICMgRklYTUUhCisgICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHB5b3Bfa2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBvdXQud3JpdGUoJ10pJykKKworCitjbGFzcyBQeVN0cmluZ09iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5U3RyaW5nT2JqZWN0JworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIGZpZWxkX29iX3NpemUgPSBzZWxmLmZpZWxkKCdvYl9zaXplJykKKyAgICAgICAgZmllbGRfb2Jfc3ZhbCA9IHNlbGYuZmllbGQoJ29iX3N2YWwnKQorICAgICAgICBjaGFyX3B0ciA9IGZpZWxkX29iX3N2YWwuYWRkcmVzcy5jYXN0KF90eXBlX3Vuc2lnbmVkX2NoYXJfcHRyKQorICAgICAgICByZXR1cm4gJycuam9pbihbY2hyKGNoYXJfcHRyW2ldKSBmb3IgaSBpbiBzYWZlX3JhbmdlKGZpZWxkX29iX3NpemUpXSkKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorCitjbGFzcyBQeVR1cGxlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlUdXBsZU9iamVjdCcKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgIyBHZXQgdGhlIGdkYi5WYWx1ZSBmb3IgdGhlIChQeU9iamVjdCopIHdpdGggdGhlIGdpdmVuIGluZGV4OgorICAgICAgICBmaWVsZF9vYl9pdGVtID0gc2VsZi5maWVsZCgnb2JfaXRlbScpCisgICAgICAgIHJldHVybiBmaWVsZF9vYl9pdGVtW2ldCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCcoLi4uKScpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHJlc3VsdCA9IHR1cGxlKFtQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmW2ldKS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnb2Jfc2l6ZScpKSldKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJyguLi4pJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoJygnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9zaXplJykpKToKKyAgICAgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxlbWVudCA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGZbaV0pCisgICAgICAgICAgICBlbGVtZW50LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBpZiBzZWxmLmZpZWxkKCdvYl9zaXplJykgPT0gMToKKyAgICAgICAgICAgIG91dC53cml0ZSgnLCknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0LndyaXRlKCcpJykKKworY2xhc3MgUHlUeXBlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlUeXBlT2JqZWN0JworCisKK2lmIHN5cy5tYXh1bmljb2RlID49IDB4MTAwMDA6CisgICAgX3VuaWNociA9IHVuaWNocgorZWxzZToKKyAgICAjIE5lZWRlZCBmb3IgcHJvcGVyIHN1cnJvZ2F0ZSBzdXBwb3J0IGlmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGluIGdkYgorICAgIGRlZiBfdW5pY2hyKHgpOgorICAgICAgICBpZiB4IDwgMHgxMDAwMDoKKyAgICAgICAgICAgIHJldHVybiB1bmljaHIoeCkKKyAgICAgICAgeCAtPSAweDEwMDAwCisgICAgICAgIGNoMSA9IDB4RDgwMCB8ICh4ID4+IDEwKQorICAgICAgICBjaDIgPSAweERDMDAgfCAoeCAmIDB4M0ZGKQorICAgICAgICByZXR1cm4gdW5pY2hyKGNoMSkgKyB1bmljaHIoY2gyKQorCitjbGFzcyBQeVVuaWNvZGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVVuaWNvZGVPYmplY3QnCisKKyAgICBkZWYgY2hhcl93aWR0aChzZWxmKToKKyAgICAgICAgX3R5cGVfUHlfVU5JQ09ERSA9IGdkYi5sb29rdXBfdHlwZSgnUHlfVU5JQ09ERScpCisgICAgICAgIHJldHVybiBfdHlwZV9QeV9VTklDT0RFLnNpemVvZgorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEZyb20gdW5pY29kZW9iamVjdC5oOgorICAgICAgICAjICAgICBQeV9zc2l6ZV90IGxlbmd0aDsgIC8qIExlbmd0aCBvZiByYXcgVW5pY29kZSBkYXRhIGluIGJ1ZmZlciAqLworICAgICAgICAjICAgICBQeV9VTklDT0RFICpzdHI7ICAgIC8qIFJhdyBVbmljb2RlIGJ1ZmZlciAqLworICAgICAgICBmaWVsZF9sZW5ndGggPSBsb25nKHNlbGYuZmllbGQoJ2xlbmd0aCcpKQorICAgICAgICBmaWVsZF9zdHIgPSBzZWxmLmZpZWxkKCdzdHInKQorCisgICAgICAgICMgR2F0aGVyIGEgbGlzdCBvZiBpbnRzIGZyb20gdGhlIFB5X1VOSUNPREUgYXJyYXk7IHRoZXNlIGFyZSBlaXRoZXIKKyAgICAgICAgIyBVQ1MtMiBvciBVQ1MtNCBjb2RlIHBvaW50czoKKyAgICAgICAgaWYgc2VsZi5jaGFyX3dpZHRoKCkgPiAyOgorICAgICAgICAgICAgUHlfVU5JQ09ERXMgPSBbaW50KGZpZWxkX3N0cltpXSkgZm9yIGkgaW4gc2FmZV9yYW5nZShmaWVsZF9sZW5ndGgpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBIG1vcmUgZWxhYm9yYXRlIHJvdXRpbmUgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaW4gdGhlCisgICAgICAgICAgICAjIGluZmVyaW9yIHByb2Nlc3M6IHdlIG11c3Qgam9pbiBzdXJyb2dhdGUgcGFpcnMuCisgICAgICAgICAgICBQeV9VTklDT0RFcyA9IFtdCisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgbGltaXQgPSBzYWZldHlfbGltaXQoZmllbGRfbGVuZ3RoKQorICAgICAgICAgICAgd2hpbGUgaSA8IGxpbWl0OgorICAgICAgICAgICAgICAgIHVjcyA9IGludChmaWVsZF9zdHJbaV0pCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgaWYgdWNzIDwgMHhEODAwIG9yIHVjcyA+PSAweERDMDAgb3IgaSA9PSBmaWVsZF9sZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVzLmFwcGVuZCh1Y3MpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGJlIGEgc3Vycm9nYXRlIHBhaXIuCisgICAgICAgICAgICAgICAgdWNzMiA9IGludChmaWVsZF9zdHJbaV0pCisgICAgICAgICAgICAgICAgaWYgdWNzMiA8IDB4REMwMCBvciB1Y3MyID4gMHhERkZGOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvZGUgPSAodWNzICYgMHgwM0ZGKSA8PCAxMAorICAgICAgICAgICAgICAgIGNvZGUgfD0gdWNzMiAmIDB4MDNGRgorICAgICAgICAgICAgICAgIGNvZGUgKz0gMHgwMDAxMDAwMAorICAgICAgICAgICAgICAgIFB5X1VOSUNPREVzLmFwcGVuZChjb2RlKQorICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgQ29udmVydCB0aGUgaW50IGNvZGUgcG9pbnRzIHRvIHVuaWNvZGUgY2hhcmFjdGVycywgYW5kIGdlbmVyYXRlIGEKKyAgICAgICAgIyBsb2NhbCB1bmljb2RlIGluc3RhbmNlLgorICAgICAgICAjIFRoaXMgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBoZXJlIChpbiBnZGIpLgorICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbX3VuaWNocih1Y3MpIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGludF9mcm9tX2ludChnZGJ2YWwpOgorICAgIHJldHVybiBpbnQoc3RyKGdkYnZhbCkpCisKKworZGVmIHN0cmluZ2lmeSh2YWwpOgorICAgICMgVE9ETzogcmVwcigpIHB1dHMgZXZlcnl0aGluZyBvbiBvbmUgbGluZTsgcGZvcm1hdCBjYW4gYmUgbmljZXIsIGJ1dAorICAgICMgY2FuIGxlYWQgdG8gdi5sb25nIHJlc3VsdHM7IHRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgdGhlIGNob2ljZQorICAgIGlmIFRydWU6CisgICAgICAgIHJldHVybiByZXByKHZhbCkKKyAgICBlbHNlOgorICAgICAgICBmcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAorICAgICAgICByZXR1cm4gcGZvcm1hdCh2YWwpCisKKworY2xhc3MgUHlPYmplY3RQdHJQcmludGVyOgorICAgICJQcmludHMgYSAoUHlPYmplY3QqKSIKKworICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgZ2RidmFsKToKKyAgICAgICAgc2VsZi5nZGJ2YWwgPSBnZGJ2YWwKKworICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgorICAgICAgICBweW9wID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZi5nZGJ2YWwpCisgICAgICAgIGlmIFRydWU6CisgICAgICAgICAgICByZXR1cm4gcHlvcC5nZXRfdHJ1bmNhdGVkX3JlcHIoTUFYX09VVFBVVF9MRU4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEdlbmVyYXRlIGZ1bGwgcHJveHkgdmFsdWUgdGhlbiBzdHJpbmdpZnkgaXQuCisgICAgICAgICAgICAjIERvaW5nIHNvIGNvdWxkIGJlIGV4cGVuc2l2ZQorICAgICAgICAgICAgcHJveHl2YWwgPSBweW9wLnByb3h5dmFsKHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ2lmeShwcm94eXZhbCkKKworZGVmIHByZXR0eV9wcmludGVyX2xvb2t1cChnZGJ2YWwpOgorICAgIHR5cGUgPSBnZGJ2YWwudHlwZS51bnF1YWxpZmllZCgpCisgICAgaWYgdHlwZS5jb2RlID09IGdkYi5UWVBFX0NPREVfUFRSOgorICAgICAgICB0eXBlID0gdHlwZS50YXJnZXQoKS51bnF1YWxpZmllZCgpCisgICAgICAgIHQgPSBzdHIodHlwZSkKKyAgICAgICAgaWYgdCBpbiAoIlB5T2JqZWN0IiwgIlB5RnJhbWVPYmplY3QiKToKKyAgICAgICAgICAgIHJldHVybiBQeU9iamVjdFB0clByaW50ZXIoZ2RidmFsKQorCisiIiIKK0R1cmluZyBkZXZlbG9wbWVudCwgSSd2ZSBiZWVuIG1hbnVhbGx5IGludm9raW5nIHRoZSBjb2RlIGluIHRoaXMgd2F5OgorKGdkYikgcHl0aG9uCisKK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmFwcGVuZCgnL2hvbWUvZGF2aWQvY29kaW5nL3B5dGhvbi1nZGInKQoraW1wb3J0IGxpYnB5dGhvbgorZW5kCisKK3RoZW4gcmVsb2FkaW5nIGl0IGFmdGVyIGVhY2ggZWRpdCBsaWtlIHRoaXM6CisoZ2RiKSBweXRob24gcmVsb2FkKGxpYnB5dGhvbikKKworVGhlIGZvbGxvd2luZyBjb2RlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgcHJldHR5cHJpbnRlciBpcyByZWdpc3RlcmVkCitpZiB0aGUgY29kZSBpcyBhdXRvbG9hZGVkIGJ5IGdkYiB3aGVuIHZpc2l0aW5nIGxpYnB5dGhvbi5zbywgcHJvdmlkZWQKK3RoYXQgdGhpcyBweXRob24gZmlsZSBpcyBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcGF0aCBhcyB0aGUgbGlicmFyeSAob3IgaXRzCisuZGVidWcgZmlsZSkgcGx1cyBhICItZ2RiLnB5IiBzdWZmaXgsIGUuZzoKKyAgL3Vzci9saWIvbGlicHl0aG9uMi42LnNvLjEuMC1nZGIucHkKKyAgL3Vzci9saWIvZGVidWcvdXNyL2xpYi9saWJweXRob24yLjYuc28uMS4wLmRlYnVnLWdkYi5weQorIiIiCitkZWYgcmVnaXN0ZXIgKG9iaik6CisgICAgaWYgb2JqID09IE5vbmU6CisgICAgICAgIG9iaiA9IGdkYgorCisgICAgIyBXaXJlIHVwIHRoZSBwcmV0dHktcHJpbnRlcgorICAgIG9iai5wcmV0dHlfcHJpbnRlcnMuYXBwZW5kKHByZXR0eV9wcmludGVyX2xvb2t1cCkKKworcmVnaXN0ZXIgKGdkYi5jdXJyZW50X29iamZpbGUgKCkpCisKKworCisjIFVuZm9ydHVuYXRlbHksIHRoZSBleGFjdCBBUEkgZXhwb3NlZCBieSB0aGUgZ2RiIG1vZHVsZSB2YXJpZXMgc29tZXdoYXQKKyMgZnJvbSBidWlsZCB0byBidWlsZAorIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgyNzk/I21zZzEwMjI3NgorCitjbGFzcyBGcmFtZShvYmplY3QpOgorICAgICcnJworICAgIFdyYXBwZXIgZm9yIGdkYi5GcmFtZSwgYWRkaW5nIHZhcmlvdXMgbWV0aG9kcworICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZGJmcmFtZSk6CisgICAgICAgIHNlbGYuX2dkYmZyYW1lID0gZ2RiZnJhbWUKKworICAgIGRlZiBvbGRlcihzZWxmKToKKyAgICAgICAgb2xkZXIgPSBzZWxmLl9nZGJmcmFtZS5vbGRlcigpCisgICAgICAgIGlmIG9sZGVyOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKG9sZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBuZXdlcihzZWxmKToKKyAgICAgICAgbmV3ZXIgPSBzZWxmLl9nZGJmcmFtZS5uZXdlcigpCisgICAgICAgIGlmIG5ld2VyOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKG5ld2VyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZWxlY3Qoc2VsZik6CisgICAgICAgICcnJ0lmIHN1cHBvcnRlZCwgc2VsZWN0IHRoaXMgZnJhbWUgYW5kIHJldHVybiBUcnVlOyByZXR1cm4gRmFsc2UgaWYgdW5zdXBwb3J0ZWQKKworICAgICAgICBOb3QgYWxsIGJ1aWxkcyBoYXZlIGEgZ2RiLkZyYW1lLnNlbGVjdCBtZXRob2Q7IHNlZW1zIHRvIGJlIHByZXNlbnQgb24gRmVkb3JhIDEyCisgICAgICAgIG9ud2FyZHMsIGJ1dCBhYnNlbnQgb24gVWJ1bnR1IGJ1aWxkYm90JycnCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX2dkYmZyYW1lLCAnc2VsZWN0Jyk6CisgICAgICAgICAgICBwcmludCAoJ1VuYWJsZSB0byBzZWxlY3QgZnJhbWU6ICcKKyAgICAgICAgICAgICAgICAgICAndGhpcyBidWlsZCBvZiBnZGIgZG9lcyBub3QgZXhwb3NlIGEgZ2RiLkZyYW1lLnNlbGVjdCBtZXRob2QnKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2dkYmZyYW1lLnNlbGVjdCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X2luZGV4KHNlbGYpOgorICAgICAgICAnJydDYWxjdWxhdGUgaW5kZXggb2YgZnJhbWUsIHN0YXJ0aW5nIGF0IDAgZm9yIHRoZSBuZXdlc3QgZnJhbWUgd2l0aGluCisgICAgICAgIHRoaXMgdGhyZWFkJycnCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICAjIEdvIGRvd24gdW50aWwgeW91IHJlYWNoIHRoZSBuZXdlc3QgZnJhbWU6CisgICAgICAgIGl0ZXJfZnJhbWUgPSBzZWxmCisgICAgICAgIHdoaWxlIGl0ZXJfZnJhbWUubmV3ZXIoKToKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgIGl0ZXJfZnJhbWUgPSBpdGVyX2ZyYW1lLm5ld2VyKCkKKyAgICAgICAgcmV0dXJuIGluZGV4CisKKyAgICBkZWYgaXNfZXZhbGZyYW1lZXgoc2VsZik6CisgICAgICAgICcnJ0lzIHRoaXMgYSBQeUV2YWxfRXZhbEZyYW1lRXggZnJhbWU/JycnCisgICAgICAgIGlmIHNlbGYuX2dkYmZyYW1lLm5hbWUoKSA9PSAnUHlFdmFsX0V2YWxGcmFtZUV4JzoKKyAgICAgICAgICAgICcnJworICAgICAgICAgICAgSSBiZWxpZXZlIHdlIGFsc28gbmVlZCB0byBmaWx0ZXIgb24gdGhlIGlubGluZQorICAgICAgICAgICAgc3RydWN0IGZyYW1lX2lkLmlubGluZV9kZXB0aCwgb25seSByZWdhcmRpbmcgZnJhbWVzIHdpdGgKKyAgICAgICAgICAgIGFuIGlubGluZSBkZXB0aCBvZiAwIGFzIGFjdHVhbGx5IGJlaW5nIHRoaXMgZnVuY3Rpb24KKworICAgICAgICAgICAgU28gd2UgcmVqZWN0IHRob3NlIHdpdGggdHlwZSBnZGIuSU5MSU5FX0ZSQU1FCisgICAgICAgICAgICAnJycKKyAgICAgICAgICAgIGlmIHNlbGYuX2dkYmZyYW1lLnR5cGUoKSA9PSBnZGIuTk9STUFMX0ZSQU1FOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIFB5RXZhbF9FdmFsRnJhbWVFeCBmcmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldF9weW9wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gc2VsZi5fZ2RiZnJhbWUucmVhZF92YXIoJ2YnKQorICAgICAgICAgICAgcmV0dXJuIFB5RnJhbWVPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9zZWxlY3RlZF9mcmFtZShjbHMpOgorICAgICAgICBfZ2RiZnJhbWUgPSBnZGIuc2VsZWN0ZWRfZnJhbWUoKQorICAgICAgICBpZiBfZ2RiZnJhbWU6CisgICAgICAgICAgICByZXR1cm4gRnJhbWUoX2dkYmZyYW1lKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoY2xzKToKKyAgICAgICAgJycnVHJ5IHRvIG9idGFpbiB0aGUgRnJhbWUgZm9yIHRoZSBweXRob24gY29kZSBpbiB0aGUgc2VsZWN0ZWQgZnJhbWUsCisgICAgICAgIG9yIE5vbmUnJycKKyAgICAgICAgZnJhbWUgPSBjbHMuZ2V0X3NlbGVjdGVkX2ZyYW1lKCkKKworICAgICAgICB3aGlsZSBmcmFtZToKKyAgICAgICAgICAgIGlmIGZyYW1lLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lCisgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLm9sZGVyKCkKKworICAgICAgICAjIE5vdCBmb3VuZDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwcmludF9zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICBweW9wID0gc2VsZi5nZXRfcHlvcCgpCisgICAgICAgICAgICBpZiBweW9wOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyMlaSAlc1xuJyAlIChzZWxmLmdldF9pbmRleCgpLCBweW9wLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikpKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHlvcC5jdXJyZW50X2xpbmUoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyVpICh1bmFibGUgdG8gcmVhZCBweXRob24gZnJhbWUgaW5mb3JtYXRpb24pXG4nICUgc2VsZi5nZXRfaW5kZXgoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyMlaVxuJyAlIHNlbGYuZ2V0X2luZGV4KCkpCisKK2NsYXNzIFB5TGlzdChnZGIuQ29tbWFuZCk6CisgICAgJycnTGlzdCB0aGUgY3VycmVudCBQeXRob24gc291cmNlIGNvZGUsIGlmIGFueQorCisgICAgVXNlCisgICAgICAgcHktbGlzdCBTVEFSVAorICAgIHRvIGxpc3QgYXQgYSBkaWZmZXJlbnQgbGluZSBudW1iZXIgd2l0aGluIHRoZSBweXRob24gc291cmNlLgorCisgICAgVXNlCisgICAgICAgcHktbGlzdCBTVEFSVCwgRU5ECisgICAgdG8gbGlzdCBhIHNwZWNpZmljIHJhbmdlIG9mIGxpbmVzIHdpdGhpbiB0aGUgcHl0aG9uIHNvdXJjZS4KKyAgICAnJycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgZ2RiLkNvbW1hbmQuX19pbml0X18gKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHktbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9GSUxFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01QTEVURV9OT05FKQorCisKKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZ3MsIGZyb21fdHR5KToKKyAgICAgICAgaW1wb3J0IHJlCisKKyAgICAgICAgc3RhcnQgPSBOb25lCisgICAgICAgIGVuZCA9IE5vbmUKKworICAgICAgICBtID0gcmUubWF0Y2gocidccyooXGQrKVxzKicsIGFyZ3MpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBzdGFydCA9IGludChtLmdyb3VwKDApKQorICAgICAgICAgICAgZW5kID0gc3RhcnQgKyAxMAorCisgICAgICAgIG0gPSByZS5tYXRjaChyJ1xzKihcZCspXHMqLFxzKihcZCspXHMqJywgYXJncykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHN0YXJ0LCBlbmQgPSBtYXAoaW50LCBtLmdyb3VwcygpKQorCisgICAgICAgIGZyYW1lID0gRnJhbWUuZ2V0X3NlbGVjdGVkX3B5dGhvbl9mcmFtZSgpCisgICAgICAgIGlmIG5vdCBmcmFtZToKKyAgICAgICAgICAgIHByaW50ICdVbmFibGUgdG8gbG9jYXRlIHB5dGhvbiBmcmFtZScKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHB5b3AgPSBmcmFtZS5nZXRfcHlvcCgpCisgICAgICAgIGlmIG5vdCBweW9wOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byByZWFkIGluZm9ybWF0aW9uIG9uIHB5dGhvbiBmcmFtZScKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZpbGVuYW1lID0gcHlvcC5maWxlbmFtZSgpCisgICAgICAgIGxpbmVubyA9IHB5b3AuY3VycmVudF9saW5lX251bSgpCisKKyAgICAgICAgaWYgc3RhcnQgaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0ID0gbGluZW5vIC0gNQorICAgICAgICAgICAgZW5kID0gbGluZW5vICsgNQorCisgICAgICAgIGlmIHN0YXJ0PDE6CisgICAgICAgICAgICBzdGFydCA9IDEKKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGFsbF9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICMgc3RhcnQgYW5kIGVuZCBhcmUgMS1iYXNlZCwgYWxsX2xpbmVzIGlzIDAtYmFzZWQ7CisgICAgICAgICAgICAjIHNvIFtzdGFydC0xOmVuZF0gYXMgYSBweXRob24gc2xpY2UgZ2l2ZXMgdXMgW3N0YXJ0LCBlbmRdIGFzIGEKKyAgICAgICAgICAgICMgY2xvc2VkIGludGVydmFsCisgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoYWxsX2xpbmVzW3N0YXJ0LTE6ZW5kXSk6CisgICAgICAgICAgICAgICAgbGluZXN0ciA9IHN0cihpK3N0YXJ0KQorICAgICAgICAgICAgICAgICMgSGlnaGxpZ2h0IGN1cnJlbnQgbGluZToKKyAgICAgICAgICAgICAgICBpZiBpICsgc3RhcnQgPT0gbGluZW5vOgorICAgICAgICAgICAgICAgICAgICBsaW5lc3RyID0gJz4nICsgbGluZXN0cgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyU0cyAgICAlcycgJSAobGluZXN0ciwgbGluZSkpCisKKworIyAuLi5hbmQgcmVnaXN0ZXIgdGhlIGNvbW1hbmQ6CitQeUxpc3QoKQorCitkZWYgbW92ZV9pbl9zdGFjayhtb3ZlX3VwKToKKyAgICAnJydNb3ZlIHVwIG9yIGRvd24gdGhlIHN0YWNrIChmb3IgdGhlIHB5LXVwL3B5LWRvd24gY29tbWFuZCknJycKKyAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgIHdoaWxlIGZyYW1lOgorICAgICAgICBpZiBtb3ZlX3VwOgorICAgICAgICAgICAgaXRlcl9mcmFtZSA9IGZyYW1lLm9sZGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZXJfZnJhbWUgPSBmcmFtZS5uZXdlcigpCisKKyAgICAgICAgaWYgbm90IGl0ZXJfZnJhbWU6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGl0ZXJfZnJhbWUuaXNfZXZhbGZyYW1lZXgoKToKKyAgICAgICAgICAgICMgUmVzdWx0OgorICAgICAgICAgICAgaWYgaXRlcl9mcmFtZS5zZWxlY3QoKToKKyAgICAgICAgICAgICAgICBpdGVyX2ZyYW1lLnByaW50X3N1bW1hcnkoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhbWUgPSBpdGVyX2ZyYW1lCisKKyAgICBpZiBtb3ZlX3VwOgorICAgICAgICBwcmludCAnVW5hYmxlIHRvIGZpbmQgYW4gb2xkZXIgcHl0aG9uIGZyYW1lJworICAgIGVsc2U6CisgICAgICAgIHByaW50ICdVbmFibGUgdG8gZmluZCBhIG5ld2VyIHB5dGhvbiBmcmFtZScKKworY2xhc3MgUHlVcChnZGIuQ29tbWFuZCk6CisgICAgJ1NlbGVjdCBhbmQgcHJpbnQgdGhlIHB5dGhvbiBzdGFjayBmcmFtZSB0aGF0IGNhbGxlZCB0aGlzIG9uZSAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LXVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBtb3ZlX2luX3N0YWNrKG1vdmVfdXA9VHJ1ZSkKKworY2xhc3MgUHlEb3duKGdkYi5Db21tYW5kKToKKyAgICAnU2VsZWN0IGFuZCBwcmludCB0aGUgcHl0aG9uIHN0YWNrIGZyYW1lIGNhbGxlZCBieSB0aGlzIG9uZSAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWRvd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1RBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG1vdmVfaW5fc3RhY2sobW92ZV91cD1GYWxzZSkKKworIyBOb3QgYWxsIGJ1aWxkcyBvZiBnZGIgaGF2ZSBnZGIuRnJhbWUuc2VsZWN0CitpZiBoYXNhdHRyKGdkYi5GcmFtZSwgJ3NlbGVjdCcpOgorICAgIFB5VXAoKQorICAgIFB5RG93bigpCisKK2NsYXNzIFB5QmFja3RyYWNlKGdkYi5Db21tYW5kKToKKyAgICAnRGlzcGxheSB0aGUgY3VycmVudCBweXRob24gZnJhbWUgYW5kIGFsbCB0aGUgZnJhbWVzIHdpdGhpbiBpdHMgY2FsbCBzdGFjayAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgICAgICB3aGlsZSBmcmFtZToKKyAgICAgICAgICAgIGlmIGZyYW1lLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICAgICAgZnJhbWUucHJpbnRfc3VtbWFyeSgpCisgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLm9sZGVyKCkKKworUHlCYWNrdHJhY2UoKQorCitjbGFzcyBQeVByaW50KGdkYi5Db21tYW5kKToKKyAgICAnTG9vayB1cCB0aGUgZ2l2ZW4gcHl0aG9uIHZhcmlhYmxlIG5hbWUsIGFuZCBwcmludCBpdCcKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LXByaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG5hbWUgPSBzdHIoYXJncykKKworICAgICAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgICAgICBpZiBub3QgZnJhbWU6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIGxvY2F0ZSBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2ZyYW1lID0gZnJhbWUuZ2V0X3B5b3AoKQorICAgICAgICBpZiBub3QgcHlvcF9mcmFtZToKKyAgICAgICAgICAgIHByaW50ICdVbmFibGUgdG8gcmVhZCBpbmZvcm1hdGlvbiBvbiBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX3Zhciwgc2NvcGUgPSBweW9wX2ZyYW1lLmdldF92YXJfYnlfbmFtZShuYW1lKQorCisgICAgICAgIGlmIHB5b3BfdmFyOgorICAgICAgICAgICAgcHJpbnQgKCclcyAlciA9ICVzJworICAgICAgICAgICAgICAgICAgICUgKHNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgcHlvcF92YXIuZ2V0X3RydW5jYXRlZF9yZXByKE1BWF9PVVRQVVRfTEVOKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnJXIgbm90IGZvdW5kJyAlIG5hbWUKKworUHlQcmludCgpCisKK2NsYXNzIFB5TG9jYWxzKGdkYi5Db21tYW5kKToKKyAgICAnTG9vayB1cCB0aGUgZ2l2ZW4gcHl0aG9uIHZhcmlhYmxlIG5hbWUsIGFuZCBwcmludCBpdCcKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWxvY2FscyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBuYW1lID0gc3RyKGFyZ3MpCisKKyAgICAgICAgZnJhbWUgPSBGcmFtZS5nZXRfc2VsZWN0ZWRfcHl0aG9uX2ZyYW1lKCkKKyAgICAgICAgaWYgbm90IGZyYW1lOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byBsb2NhdGUgcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHlvcF9mcmFtZSA9IGZyYW1lLmdldF9weW9wKCkKKyAgICAgICAgaWYgbm90IHB5b3BfZnJhbWU6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIHJlYWQgaW5mb3JtYXRpb24gb24gcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIHB5b3BfbmFtZSwgcHlvcF92YWx1ZSBpbiBweW9wX2ZyYW1lLml0ZXJfbG9jYWxzKCk6CisgICAgICAgICAgICBwcmludCAoJyVzID0gJXMnCisgICAgICAgICAgICAgICAgICAgJSAocHlvcF9uYW1lLnByb3h5dmFsKHNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBweW9wX3ZhbHVlLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikpKQorCitQeUxvY2FscygpCmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weSBiL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CmluZGV4IDQzZGYzNWEuLjViMzYzMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CisrKyBiL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CkBAIC05LDcgKzksNyBAQAogaW1wb3J0IGxvY2FsZQogCiAjIExvY2F0aW9uIG9mIHRoZSBhbGlhcyBmaWxlCi1MT0NBTEVfQUxJQVMgPSAnL3Vzci9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMnCitMT0NBTEVfQUxJQVMgPSAnL3Vzci9zaGFyZS9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcycKIAogZGVmIHBhcnNlKGZpbGVuYW1lKToKIApkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tc2dmbXQucHkgYi9Ub29scy9pMThuL21zZ2ZtdC5weQppbmRleCA2NDMzMTMxLi41ZGQ1NDMwIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21zZ2ZtdC5weQorKysgYi9Ub29scy9pMThuL21zZ2ZtdC5weQpAQCAtMTMzLDE2ICsxMzMsMzkgQEAKICAgICAgICAgaWYgbFswXSA9PSAnIyc6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAjIE5vdyB3ZSBhcmUgaW4gYSBtc2dpZCBzZWN0aW9uLCBvdXRwdXQgcHJldmlvdXMgc2VjdGlvbgotICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ21zZ2lkJyk6CisgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgnbXNnaWQnKSBhbmQgbm90IGwuc3RhcnRzd2l0aCgnbXNnaWRfcGx1cmFsJyk6CiAgICAgICAgICAgICBpZiBzZWN0aW9uID09IFNUUjoKICAgICAgICAgICAgICAgICBhZGQobXNnaWQsIG1zZ3N0ciwgZnV6enkpCiAgICAgICAgICAgICBzZWN0aW9uID0gSUQKICAgICAgICAgICAgIGwgPSBsWzU6XQogICAgICAgICAgICAgbXNnaWQgPSBtc2dzdHIgPSAnJworICAgICAgICAgICAgaXNfcGx1cmFsID0gRmFsc2UKKyAgICAgICAgIyBUaGlzIGlzIGEgbWVzc2FnZSB3aXRoIHBsdXJhbCBmb3JtcworICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgnbXNnaWRfcGx1cmFsJyk6CisgICAgICAgICAgICBpZiBzZWN0aW9uICE9IElEOgorICAgICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdtc2dpZF9wbHVyYWwgbm90IHByZWNlZWRlZCBieSBtc2dpZCBvbiAlczolZCcgJVwKKyAgICAgICAgICAgICAgICAgICAgKGluZmlsZSwgbG5vKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBsID0gbFsxMjpdCisgICAgICAgICAgICBtc2dpZCArPSAnXDAnICMgc2VwYXJhdG9yIG9mIHNpbmd1bGFyIGFuZCBwbHVyYWwKKyAgICAgICAgICAgIGlzX3BsdXJhbCA9IFRydWUKICAgICAgICAgIyBOb3cgd2UgYXJlIGluIGEgbXNnc3RyIHNlY3Rpb24KICAgICAgICAgZWxpZiBsLnN0YXJ0c3dpdGgoJ21zZ3N0cicpOgogICAgICAgICAgICAgc2VjdGlvbiA9IFNUUgotICAgICAgICAgICAgbCA9IGxbNjpdCisgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ21zZ3N0clsnKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfcGx1cmFsOgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAncGx1cmFsIHdpdGhvdXQgbXNnaWRfcGx1cmFsIG9uICVzOiVkJyAlXAorICAgICAgICAgICAgICAgICAgICAgICAgKGluZmlsZSwgbG5vKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGwgPSBsLnNwbGl0KCddJywgMSlbMV0KKyAgICAgICAgICAgICAgICBpZiBtc2dzdHI6CisgICAgICAgICAgICAgICAgICAgIG1zZ3N0ciArPSAnXDAnICMgU2VwYXJhdG9yIG9mIHRoZSB2YXJpb3VzIHBsdXJhbCBmb3JtcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wbHVyYWw6CisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdpbmRleGVkIG1zZ3N0ciByZXF1aXJlZCBmb3IgcGx1cmFsIG9uICAlczolZCcgJVwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbmZpbGUsIGxubykKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICBsID0gbFs2Ol0KICAgICAgICAgIyBTa2lwIGVtcHR5IGxpbmVzCiAgICAgICAgIGwgPSBsLnN0cmlwKCkKICAgICAgICAgaWYgbm90IGw6CmRpZmYgLS1naXQgYS9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNGZmYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQpAQCAtMCwwICsxLDUzOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMgVGhpcyBmaWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBib3RoIFB5dGhvbiAyLjYgYW5kIFB5dGhvbiA+PSAzLjAuCisKK2ltcG9ydCB0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpdGVydG9vbHMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorCitvdXQgPSBzeXMuc3Rkb3V0CisKK1RFWFRfRU5DT0RJTkcgPSAndXRmOCcKK05FV0xJTkVTID0gJ2xmJworCisjIENvbXBhdGliaWxpdHkKK3RyeToKKyAgICB4cmFuZ2UKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgeHJhbmdlID0gcmFuZ2UKKworZGVmIHRleHRfb3BlbihmbiwgbW9kZSwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSwgZW5jb2Rpbmc9ZW5jb2Rpbmcgb3IgVEVYVF9FTkNPRElORykKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSkKKworZGVmIGdldF9maWxlX3NpemVzKCk6CisgICAgZm9yIHMgaW4gWycyMCBLQicsICc0MDAgS0InLCAnMTAgTUInXToKKyAgICAgICAgc2l6ZSwgdW5pdCA9IHMuc3BsaXQoKQorICAgICAgICBzaXplID0gaW50KHNpemUpICogeydLQic6IDEwMjQsICdNQic6IDEwMjQgKiogMn1bdW5pdF0KKyAgICAgICAgeWllbGQgcy5yZXBsYWNlKCcgJywgJycpLCBzaXplCisKK2RlZiBnZXRfYmluYXJ5X2ZpbGVzKCk6CisgICAgcmV0dXJuICgobmFtZSArICIuYmluIiwgc2l6ZSkgZm9yIG5hbWUsIHNpemUgaW4gZ2V0X2ZpbGVfc2l6ZXMoKSkKKworZGVmIGdldF90ZXh0X2ZpbGVzKCk6CisgICAgcmV0dXJuICgoIiVzLSVzLSVzLnR4dCIgJSAobmFtZSwgVEVYVF9FTkNPRElORywgTkVXTElORVMpLCBzaXplKQorICAgICAgICBmb3IgbmFtZSwgc2l6ZSBpbiBnZXRfZmlsZV9zaXplcygpKQorCitkZWYgd2l0aF9vcGVuX21vZGUobW9kZSk6CisgICAgZGVmIGRlY29yYXRlKGYpOgorICAgICAgICBmLmZpbGVfb3Blbl9tb2RlID0gbW9kZQorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBkZWNvcmF0ZQorCitkZWYgd2l0aF9zaXplcygqc2l6ZXMpOgorICAgIGRlZiBkZWNvcmF0ZShmKToKKyAgICAgICAgZi5maWxlX3NpemVzID0gc2l6ZXMKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gZGVjb3JhdGUKKworCisjIEhlcmUgYmVnaW4gdGhlIHRlc3RzCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX2J5dGV3aXNlKGYpOgorICAgICIiIiByZWFkIG9uZSB1bml0IGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoMSk6CisgICAgICAgIHBhc3MKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfc21hbGxfY2h1bmtzKGYpOgorICAgICIiIiByZWFkIDIwIHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoMjApOgorICAgICAgICBwYXNzCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX2JpZ19jaHVua3MoZik6CisgICAgIiIiIHJlYWQgNDA5NiB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKDQwOTYpOgorICAgICAgICBwYXNzCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygic21hbGwiLCAibWVkaXVtIiwgImxhcmdlIikKK2RlZiByZWFkX3dob2xlX2ZpbGUoZik6CisgICAgIiIiIHJlYWQgd2hvbGUgY29udGVudHMgYXQgb25jZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoKToKKyAgICAgICAgcGFzcworCitAd2l0aF9vcGVuX21vZGUoInJ0IikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfbGluZXMoZik6CisgICAgIiIiIHJlYWQgb25lIGxpbmUgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgIHBhc3MKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHNlZWtfZm9yd2FyZF9ieXRld2lzZShmKToKKyAgICAiIiIgc2VlayBmb3J3YXJkIG9uZSB1bml0IGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCwgMikKKyAgICBzaXplID0gZi50ZWxsKCkKKyAgICBmLnNlZWsoMCwgMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgc2l6ZSAtIDEpOgorICAgICAgICBmLnNlZWsoaSwgMCkKKworQHdpdGhfb3Blbl9tb2RlKCJyIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHNlZWtfZm9yd2FyZF9ibG9ja3dpc2UoZik6CisgICAgIiIiIHNlZWsgZm9yd2FyZCAxMDAwIHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCwgMikKKyAgICBzaXplID0gZi50ZWxsKCkKKyAgICBmLnNlZWsoMCwgMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgc2l6ZSAtIDEsIDEwMDApOgorICAgICAgICBmLnNlZWsoaSwgMCkKKworQHdpdGhfb3Blbl9tb2RlKCJyYiIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX3NlZWtfYnl0ZXdpc2UoZik6CisgICAgIiIiIGFsdGVybmF0ZSByZWFkICYgc2VlayBvbmUgdW5pdCAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoMSk6CisgICAgICAgIGYuc2VlaygxLCAxKQorCitAd2l0aF9vcGVuX21vZGUoInJiIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfc2Vla19ibG9ja3dpc2UoZik6CisgICAgIiIiIGFsdGVybmF0ZSByZWFkICYgc2VlayAxMDAwIHVuaXRzICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCgxMDAwKToKKyAgICAgICAgZi5zZWVrKDEwMDAsIDEpCisKKworQHdpdGhfb3Blbl9tb2RlKCJ3IikKK0B3aXRoX3NpemVzKCJzbWFsbCIpCitkZWYgd3JpdGVfYnl0ZXdpc2UoZiwgc291cmNlKToKKyAgICAiIiIgd3JpdGUgb25lIHVuaXQgYXQgYSB0aW1lICIiIgorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsxXSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3IikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHdyaXRlX3NtYWxsX2NodW5rcyhmLCBzb3VyY2UpOgorICAgICIiIiB3cml0ZSAyMCB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyMCk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsyMF0pCisKK0B3aXRoX29wZW5fbW9kZSgidyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiB3cml0ZV9tZWRpdW1fY2h1bmtzKGYsIHNvdXJjZSk6CisgICAgIiIiIHdyaXRlIDQwOTYgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgNDA5Nik6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSs0MDk2XSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3IikKK0B3aXRoX3NpemVzKCJsYXJnZSIpCitkZWYgd3JpdGVfbGFyZ2VfY2h1bmtzKGYsIHNvdXJjZSk6CisgICAgIiIiIHdyaXRlIDFlNiB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAxMDAwMDAwKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzEwMDAwMDBdKQorCisKK0B3aXRoX29wZW5fbW9kZSgidysiKQorQHdpdGhfc2l6ZXMoInNtYWxsIikKK2RlZiBtb2RpZnlfYnl0ZXdpc2UoZiwgc291cmNlKToKKyAgICAiIiIgbW9kaWZ5IG9uZSB1bml0IGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSkpOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMV0pCisKK0B3aXRoX29wZW5fbW9kZSgidysiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgbW9kaWZ5X3NtYWxsX2NodW5rcyhmLCBzb3VyY2UpOgorICAgICIiIiBtb2RpZnkgMjAgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMjApOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMjBdKQorCitAd2l0aF9vcGVuX21vZGUoIncrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIG1vZGlmeV9tZWRpdW1fY2h1bmtzKGYsIHNvdXJjZSk6CisgICAgIiIiIG1vZGlmeSA0MDk2IHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDQwOTYpOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrNDA5Nl0pCisKK0B3aXRoX29wZW5fbW9kZSgid2IrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIG1vZGlmeV9zZWVrX2ZvcndhcmRfYnl0ZXdpc2UoZiwgc291cmNlKToKKyAgICAiIiIgYWx0ZXJuYXRlIHdyaXRlICYgc2VlayBvbmUgdW5pdCAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIpOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMV0pCisgICAgICAgIGYuc2VlayhpKzIpCisKK0B3aXRoX29wZW5fbW9kZSgid2IrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIG1vZGlmeV9zZWVrX2ZvcndhcmRfYmxvY2t3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIGFsdGVybmF0ZSB3cml0ZSAmIHNlZWsgMTAwMCB1bml0cyAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIwMDApOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMTAwMF0pCisgICAgICAgIGYuc2VlayhpKzIwMDApCisKKyMgWFhYIHRoZSAyIGZvbGxvd2luZyB0ZXN0cyBkb24ndCB3b3JrIHdpdGggcHkzaydzIHRleHQgSU8KK0B3aXRoX29wZW5fbW9kZSgid2IrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIHJlYWRfbW9kaWZ5X2J5dGV3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIGFsdGVybmF0ZSByZWFkICYgd3JpdGUgb25lIHVuaXQgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyKToKKyAgICAgICAgZi5yZWFkKDEpCisgICAgICAgIGYud3JpdGUoc291cmNlW2krMTppKzJdKQorCitAd2l0aF9vcGVuX21vZGUoIndiKyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX21vZGlmeV9ibG9ja3dpc2UoZiwgc291cmNlKToKKyAgICAiIiIgYWx0ZXJuYXRlIHJlYWQgJiB3cml0ZSAxMDAwIHVuaXRzICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMjAwMCk6CisgICAgICAgIGYucmVhZCgxMDAwKQorICAgICAgICBmLndyaXRlKHNvdXJjZVtpKzEwMDA6aSsyMDAwXSkKKworCityZWFkX3Rlc3RzID0gWworICAgIHJlYWRfYnl0ZXdpc2UsIHJlYWRfc21hbGxfY2h1bmtzLCByZWFkX2xpbmVzLCByZWFkX2JpZ19jaHVua3MsCisgICAgTm9uZSwgcmVhZF93aG9sZV9maWxlLCBOb25lLAorICAgIHNlZWtfZm9yd2FyZF9ieXRld2lzZSwgc2Vla19mb3J3YXJkX2Jsb2Nrd2lzZSwKKyAgICByZWFkX3NlZWtfYnl0ZXdpc2UsIHJlYWRfc2Vla19ibG9ja3dpc2UsCitdCisKK3dyaXRlX3Rlc3RzID0gWworICAgIHdyaXRlX2J5dGV3aXNlLCB3cml0ZV9zbWFsbF9jaHVua3MsIHdyaXRlX21lZGl1bV9jaHVua3MsIHdyaXRlX2xhcmdlX2NodW5rcywKK10KKworbW9kaWZ5X3Rlc3RzID0gWworICAgIG1vZGlmeV9ieXRld2lzZSwgbW9kaWZ5X3NtYWxsX2NodW5rcywgbW9kaWZ5X21lZGl1bV9jaHVua3MsCisgICAgTm9uZSwKKyAgICBtb2RpZnlfc2Vla19mb3J3YXJkX2J5dGV3aXNlLCBtb2RpZnlfc2Vla19mb3J3YXJkX2Jsb2Nrd2lzZSwKKyAgICByZWFkX21vZGlmeV9ieXRld2lzZSwgcmVhZF9tb2RpZnlfYmxvY2t3aXNlLAorXQorCitkZWYgcnVuX2R1cmluZyhkdXJhdGlvbiwgZnVuYyk6CisgICAgX3QgPSB0aW1lLnRpbWUKKyAgICBuID0gMAorICAgIHN0YXJ0ID0gb3MudGltZXMoKQorICAgIHN0YXJ0X3RpbWVzdGFtcCA9IF90KCkKKyAgICByZWFsX3N0YXJ0ID0gc3RhcnRbNF0gb3Igc3RhcnRfdGltZXN0YW1wCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgZnVuYygpCisgICAgICAgIG4gKz0gMQorICAgICAgICBpZiBfdCgpIC0gc3RhcnRfdGltZXN0YW1wID4gZHVyYXRpb246CisgICAgICAgICAgICBicmVhaworICAgIGVuZCA9IG9zLnRpbWVzKCkKKyAgICByZWFsID0gKGVuZFs0XSBpZiBzdGFydFs0XSBlbHNlIHRpbWUudGltZSgpKSAtIHJlYWxfc3RhcnQKKyAgICByZXR1cm4gbiwgcmVhbCwgc3VtKGVuZFswOjJdKSAtIHN1bShzdGFydFswOjJdKQorCitkZWYgd2FybV9jYWNoZShmaWxlbmFtZSk6CisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBmLnJlYWQoKQorCisKK2RlZiBydW5fYWxsX3Rlc3RzKG9wdGlvbnMpOgorICAgIGRlZiBwcmludF9sYWJlbChmaWxlbmFtZSwgZnVuYyk6CisgICAgICAgIG5hbWUgPSByZS5zcGxpdChyJ1stLl0nLCBmaWxlbmFtZSlbMF0KKyAgICAgICAgb3V0LndyaXRlKAorICAgICAgICAgICAgKCJbJXNdICVzLi4uICIKKyAgICAgICAgICAgICAgICAlIChuYW1lLmNlbnRlcig3KSwgZnVuYy5fX2RvY19fLnN0cmlwKCkpCisgICAgICAgICAgICApLmxqdXN0KDUyKSkKKyAgICAgICAgb3V0LmZsdXNoKCkKKworICAgIGRlZiBwcmludF9yZXN1bHRzKHNpemUsIG4sIHJlYWwsIGNwdSk6CisgICAgICAgIGJ3ID0gbiAqIGZsb2F0KHNpemUpIC8gMTAyNCAqKiAyIC8gcmVhbAorICAgICAgICBidyA9ICgiJTRkIE1CL3MiIGlmIGJ3ID4gMTAwIGVsc2UgIiUuM2cgTUIvcyIpICUgYncKKyAgICAgICAgb3V0LndyaXRlKGJ3LnJqdXN0KDEyKSArICJcbiIpCisgICAgICAgIGlmIGNwdSA8IDAuOTAgKiByZWFsOgorICAgICAgICAgICAgb3V0LndyaXRlKCIgICB3YXJuaW5nOiB0ZXN0IGFib3ZlIHVzZWQgb25seSAlZCUlIENQVSwgIgorICAgICAgICAgICAgICAgICJyZXN1bHQgbWF5IGJlIGZsYXdlZCFcbiIgJSAoMTAwLjAgKiBjcHUgLyByZWFsKSkKKworICAgIGRlZiBydW5fb25lX3Rlc3QobmFtZSwgc2l6ZSwgb3Blbl9mdW5jLCB0ZXN0X2Z1bmMsICphcmdzKToKKyAgICAgICAgbW9kZSA9IHRlc3RfZnVuYy5maWxlX29wZW5fbW9kZQorICAgICAgICBwcmludF9sYWJlbChuYW1lLCB0ZXN0X2Z1bmMpCisgICAgICAgIGlmICJ3IiBub3QgaW4gbW9kZSBvciAiKyIgaW4gbW9kZToKKyAgICAgICAgICAgIHdhcm1fY2FjaGUobmFtZSkKKyAgICAgICAgd2l0aCBvcGVuX2Z1bmMobmFtZSkgYXMgZjoKKyAgICAgICAgICAgIG4sIHJlYWwsIGNwdSA9IHJ1bl9kdXJpbmcoMS41LCBsYW1iZGE6IHRlc3RfZnVuYyhmLCAqYXJncykpCisgICAgICAgIHByaW50X3Jlc3VsdHMoc2l6ZSwgbiwgcmVhbCwgY3B1KQorCisgICAgZGVmIHJ1bl90ZXN0X2ZhbWlseSh0ZXN0cywgbW9kZV9maWx0ZXIsIGZpbGVzLCBvcGVuX2Z1bmMsICptYWtlX2FyZ3MpOgorICAgICAgICBmb3IgdGVzdF9mdW5jIGluIHRlc3RzOgorICAgICAgICAgICAgaWYgdGVzdF9mdW5jIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG1vZGVfZmlsdGVyIGluIHRlc3RfZnVuYy5maWxlX29wZW5fbW9kZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIHMgaW4gdGVzdF9mdW5jLmZpbGVfc2l6ZXM6CisgICAgICAgICAgICAgICAgbmFtZSwgc2l6ZSA9IGZpbGVzW3NpemVfbmFtZXNbc11dCisgICAgICAgICAgICAgICAgI25hbWUgKz0gZmlsZV9leHQKKyAgICAgICAgICAgICAgICBhcmdzID0gdHVwbGUoZihuYW1lLCBzaXplKSBmb3IgZiBpbiBtYWtlX2FyZ3MpCisgICAgICAgICAgICAgICAgcnVuX29uZV90ZXN0KG5hbWUsIHNpemUsCisgICAgICAgICAgICAgICAgICAgIG9wZW5fZnVuYywgdGVzdF9mdW5jLCAqYXJncykKKworICAgIHNpemVfbmFtZXMgPSB7CisgICAgICAgICJzbWFsbCI6IDAsCisgICAgICAgICJtZWRpdW0iOiAxLAorICAgICAgICAibGFyZ2UiOiAyLAorICAgIH0KKworICAgIGJpbmFyeV9maWxlcyA9IGxpc3QoZ2V0X2JpbmFyeV9maWxlcygpKQorICAgIHRleHRfZmlsZXMgPSBsaXN0KGdldF90ZXh0X2ZpbGVzKCkpCisgICAgaWYgImIiIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJCaW5hcnkgdW5pdCA9IG9uZSBieXRlIikKKyAgICBpZiAidCIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlRleHQgdW5pdCA9IG9uZSBjaGFyYWN0ZXIgKCVzLWRlY29kZWQpIiAlIFRFWFRfRU5DT0RJTkcpCisKKyAgICAjIEJpbmFyeSByZWFkcworICAgIGlmICJiIiBpbiBvcHRpb25zIGFuZCAiciIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogQmluYXJ5IGlucHV0ICoqXG4iKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkocmVhZF90ZXN0cywgInQiLCBiaW5hcnlfZmlsZXMsIGxhbWJkYSBmbjogb3BlbihmbiwgInJiIikpCisKKyAgICAjIFRleHQgcmVhZHMKKyAgICBpZiAidCIgaW4gb3B0aW9ucyBhbmQgInIiIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIFRleHQgaW5wdXQgKipcbiIpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseShyZWFkX3Rlc3RzLCAiYiIsIHRleHRfZmlsZXMsIGxhbWJkYSBmbjogdGV4dF9vcGVuKGZuLCAiciIpKQorCisgICAgIyBCaW5hcnkgd3JpdGVzCisgICAgaWYgImIiIGluIG9wdGlvbnMgYW5kICJ3IiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBCaW5hcnkgYXBwZW5kICoqXG4iKQorICAgICAgICBkZWYgbWFrZV90ZXN0X3NvdXJjZShuYW1lLCBzaXplKToKKyAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkod3JpdGVfdGVzdHMsICJ0IiwgYmluYXJ5X2ZpbGVzLAorICAgICAgICAgICAgbGFtYmRhIGZuOiBvcGVuKG9zLmRldm51bGwsICJ3YiIpLCBtYWtlX3Rlc3Rfc291cmNlKQorCisgICAgIyBUZXh0IHdyaXRlcworICAgIGlmICJ0IiBpbiBvcHRpb25zIGFuZCAidyIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogVGV4dCBhcHBlbmQgKipcbiIpCisgICAgICAgIGRlZiBtYWtlX3Rlc3Rfc291cmNlKG5hbWUsIHNpemUpOgorICAgICAgICAgICAgd2l0aCB0ZXh0X29wZW4obmFtZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkod3JpdGVfdGVzdHMsICJiIiwgdGV4dF9maWxlcywKKyAgICAgICAgICAgIGxhbWJkYSBmbjogdGV4dF9vcGVuKG9zLmRldm51bGwsICJ3IiksIG1ha2VfdGVzdF9zb3VyY2UpCisKKyAgICAjIEJpbmFyeSBvdmVyd3JpdGVzCisgICAgaWYgImIiIGluIG9wdGlvbnMgYW5kICJ3IiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBCaW5hcnkgb3ZlcndyaXRlICoqXG4iKQorICAgICAgICBkZWYgbWFrZV90ZXN0X3NvdXJjZShuYW1lLCBzaXplKToKKyAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkobW9kaWZ5X3Rlc3RzLCAidCIsIGJpbmFyeV9maWxlcywKKyAgICAgICAgICAgIGxhbWJkYSBmbjogb3BlbihmbiwgInIrYiIpLCBtYWtlX3Rlc3Rfc291cmNlKQorCisgICAgIyBUZXh0IG92ZXJ3cml0ZXMKKyAgICBpZiAidCIgaW4gb3B0aW9ucyBhbmQgInciIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIFRleHQgb3ZlcndyaXRlICoqXG4iKQorICAgICAgICBkZWYgbWFrZV90ZXN0X3NvdXJjZShuYW1lLCBzaXplKToKKyAgICAgICAgICAgIHdpdGggdGV4dF9vcGVuKG5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KG1vZGlmeV90ZXN0cywgImIiLCB0ZXh0X2ZpbGVzLAorICAgICAgICAgICAgbGFtYmRhIGZuOiBvcGVuKGZuLCAicisiKSwgbWFrZV90ZXN0X3NvdXJjZSkKKworCitkZWYgcHJlcGFyZV9maWxlcygpOgorICAgIHByaW50KCJQcmVwYXJpbmcgZmlsZXMuLi4iKQorICAgICMgQmluYXJ5IGZpbGVzCisgICAgZm9yIG5hbWUsIHNpemUgaW4gZ2V0X2JpbmFyeV9maWxlcygpOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShuYW1lKSBhbmQgb3MucGF0aC5nZXRzaXplKG5hbWUpID09IHNpemU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB3aXRoIG9wZW4obmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MudXJhbmRvbShzaXplKSkKKyAgICAjIFRleHQgZmlsZXMKKyAgICBjaHVuayA9IFtdCisgICAgd2l0aCB0ZXh0X29wZW4oX19maWxlX18sICJyVSIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4iKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGNodW5rIG1hcmtlciBpbiAlcyAhIiAlIF9fZmlsZV9fKQorICAgICAgICBpZiBORVdMSU5FUyA9PSAiYWxsIjoKKyAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLmN5Y2xlKFsiXG4iLCAiXHIiLCAiXHJcbiJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXQgPSBpdGVydG9vbHMucmVwZWF0KAorICAgICAgICAgICAgICAgIHsiY3IiOiAiXHIiLCAibGYiOiAiXG4iLCAiY3JsZiI6ICJcclxuIn1bTkVXTElORVNdKQorICAgICAgICBjaHVuayA9ICIiLmpvaW4obGluZS5yZXBsYWNlKCJcbiIsIG5leHQoaXQpKSBmb3IgbGluZSBpbiBmKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNodW5rLCBieXRlcyk6CisgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgndXRmOCcpCisgICAgICAgIGNodW5rID0gY2h1bmsuZW5jb2RlKFRFWFRfRU5DT0RJTkcpCisgICAgZm9yIG5hbWUsIHNpemUgaW4gZ2V0X3RleHRfZmlsZXMoKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobmFtZSkgYW5kIG9zLnBhdGguZ2V0c2l6ZShuYW1lKSA9PSBzaXplOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaGVhZCA9IGNodW5rICogKHNpemUgLy8gbGVuKGNodW5rKSkKKyAgICAgICAgdGFpbCA9IGNodW5rWzpzaXplICUgbGVuKGNodW5rKV0KKyAgICAgICAgIyBBZGp1c3QgdGFpbCB0byBlbmQgb24gYSBjaGFyYWN0ZXIgYm91bmRhcnkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YWlsLmRlY29kZShURVhUX0VOQ09ESU5HKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgICAgIHRhaWwgPSB0YWlsWzotMV0KKyAgICAgICAgd2l0aCBvcGVuKG5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGhlYWQpCisgICAgICAgICAgICBmLndyaXRlKHRhaWwpCisKK2RlZiBtYWluKCk6CisgICAgZ2xvYmFsIFRFWFRfRU5DT0RJTkcsIE5FV0xJTkVTCisKKyAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgWy1ofC0taGVscF0gW29wdGlvbnNdIgorICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT11c2FnZSkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWIiLCAiLS1iaW5hcnkiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImJpbmFyeSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIGJpbmFyeSBJL08gdGVzdHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRleHQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InRleHQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biB0ZXh0IEkvTyB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1yIiwgIi0tcmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icmVhZCIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIHJlYWQgdGVzdHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdyIsICItLXdyaXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ3cml0ZSIsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0icnVuIHdyaXRlICYgbW9kaWZ5IHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLUUiLCAiLS1lbmNvZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImVuY29kaW5nIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImVuY29kaW5nIGZvciB0ZXh0IHRlc3RzIChkZWZhdWx0OiAlcykiICUgVEVYVF9FTkNPRElORykKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLU4iLCAiLS1uZXdsaW5lcyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9Im5ld2xpbmVzIiwgZGVmYXVsdD0nbGYnLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImxpbmUgZW5kaW5ncyBmb3IgdGV4dCB0ZXN0cyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG9uZSBvZjoge2xmIChkZWZhdWx0KSwgY3IsIGNybGYsIGFsbH0pIikKKyAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGFyZ3M6CisgICAgICAgIHBhcnNlci5lcnJvcigidW5leHBlY3RlZCBhcmd1bWVudHMiKQorICAgIE5FV0xJTkVTID0gb3B0aW9ucy5uZXdsaW5lcy5sb3dlcigpCisgICAgaWYgTkVXTElORVMgbm90IGluICgnbGYnLCAnY3InLCAnY3JsZicsICdhbGwnKToKKyAgICAgICAgcGFyc2VyLmVycm9yKCJpbnZhbGlkICduZXdsaW5lcycgb3B0aW9uOiAlciIgJSBORVdMSU5FUykKKworICAgIHRlc3Rfb3B0aW9ucyA9ICIiCisgICAgaWYgb3B0aW9ucy5yZWFkOgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInIiCisgICAgaWYgb3B0aW9ucy53cml0ZToKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJ3IgorICAgIGVsaWYgbm90IG9wdGlvbnMucmVhZDoKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJydyIKKyAgICBpZiBvcHRpb25zLnRleHQ6CisgICAgICAgIHRlc3Rfb3B0aW9ucyArPSAidCIKKyAgICBpZiBvcHRpb25zLmJpbmFyeToKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJiIgorICAgIGVsaWYgbm90IG9wdGlvbnMudGV4dDoKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJ0YiIKKworICAgIGlmIG9wdGlvbnMuZW5jb2Rpbmc6CisgICAgICAgIFRFWFRfRU5DT0RJTkcgPSBvcHRpb25zLmVuY29kaW5nCisKKyAgICBwcmVwYXJlX2ZpbGVzKCkKKyAgICBydW5fYWxsX3Rlc3RzKHRlc3Rfb3B0aW9ucykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKKworCisjIC0tIFRoaXMgcGFydCB0byBleGVyY2lzZSB0ZXh0IHJlYWRpbmcuIERvbid0IGNoYW5nZSBhbnl0aGluZyEgLS0KKyMgPGlvYmVuY2ggdGV4dCBjaHVuayBtYXJrZXI+CisKKyIiIgorMS4KK0fDoXR0aXIgYWxsYXIsCivDocOwciBnYW5naSBmcmFtLAordW0gc2tvw7Bhc2sgc2t5bGksCit1bSBza3lnZ25hc3Qgc2t5bGksCivDvnbDrSBhdCDDs3bDrXN0IGVyIGF0IHZpdGEsCitodmFyIMOzdmluaXIKK3NpdGphIMOhIGZsZXRpIGZ5cmlyLgorCisyLgorR2VmZW5kciBoZWlsaXIhCitHZXN0ciBlciBpbm4ga29taW5uLAoraHZhciBza2FsIHNpdGphIHNqw6E/CitNasO2ayBlciBicsOhw7ByLAorc8OhIGVyIMOhIGJyw7ZuZHVtIHNrYWwKK3PDrW5zIG9mIGZyZWlzdGEgZnJhbWEuCisKKzMuCitFbGRzIGVyIMO+w7ZyZiwKK8O+ZWltcyBpbm4gZXIga29taW5uCitvayDDoSBrbsOpIGthbGlubjsKK21hdGFyIG9rIHbDocOwYQorZXIgbWFubmkgw77DtnJmLAorw75laW0gZXIgaGVmciB1bSBmamFsbCBmYXJpdC4KKworNC4KK1ZhdG5zIGVyIMO+w7ZyZiwKK8O+ZWltIGVyIHRpbCB2ZXLDsGFyIGtlbXIsCivDvmVycnUgb2sgw75qw7PDsGxhw7BhciwKK2fDs8OwcyBvZiDDpsOwaXMsCitlZiBzw6lyIGdldGEgbcOmdHRpLAorb3LDsHMgb2sgZW5kcsO+w7ZndS4KKworNS4KK1ZpdHMgZXIgw77DtnJmLAorw75laW0gZXIgdsOtw7BhIHJhdGFyOworZMOmbHQgZXIgaGVpbWEgaHZhdDsKK2F0IGF1Z2FicmFnw7BpIHZlcsOwciwKK3PDoSBlciBla2tpIGthbm4KK29rIG1lw7Agc25vdHJ1bSBzaXRyLgorCis2LgorQXQgaHlnZ2phbmRpIHNpbm5pCitza3lsaS10IG1hw7ByIGhyw6ZzaW5uIHZlcmEsCitoZWxkciBnw6Z0aW5uIGF0IGdlw7BpOworw77DoSBlciBob3Jza3Igb2sgw77Dtmd1bGwKK2tlbXIgaGVpbWlzZ2Fyw7BhIHRpbCwKK3NqYWxkYW4gdmVyw7ByIHbDrXRpIHbDtnJ1bSwKK8O+dsOtIGF0IMOzYnJpZ8OwcmEgdmluCitmw6ZyIG1hw7ByIGFsZHJlZ2kKK2VuIG1hbm52aXQgbWlraXQuCisKKzcuCitJbm4gdmFyaSBnZXN0ciwKK2VyIHRpbCB2ZXLDsGFyIGtlbXIsCivDvnVubnUgaGxqw7PDsGkgw75lZ2lyLAorZXlydW0gaGzDvcOwaXIsCitlbiBhdWd1bSBza2/DsGFyOworc3bDoSBuw71zaXNrIGZyw7PDsHJhIGh2ZXJyIGZ5cmlyLgorCis4LgorSGlubiBlciBzw6ZsbCwKK2VyIHPDqXIgb2YgZ2V0cgorbG9mIG9rIGzDrWtuc3RhZmk7CivDs2TDpmxsYSBlciB2acOwIMO+YXQsCitlciBtYcOwciBlaWdhIHNrYWwKK2FubmFycyBicmrDs3N0dW0gw60uCisiIiIKKworIiIiCitDJ2VzdCByZXZlbmlyIHRhcmQsIGplIGxlIHNlbnMsIHN1ciB1biBzdWpldCB0cm9wIHJlYmF0dHUgZXQgZMOpasOgIHByZXNxdWUgb3VibGnDqS4gTW9uIMOpdGF0LCBxdWkgbmUgbWUgcGVybWV0IHBsdXMgYXVjdW4gdHJhdmFpbCBzdWl2aSwgbW9uIGF2ZXJzaW9uIHBvdXIgbGUgZ2VucmUgcG9sw6ltaXF1ZSwgb250IGNhdXPDqSBtYSBsZW50ZXVyIMOgIMOpY3JpcmUgZXQgbWEgcsOpcHVnbmFuY2Ugw6AgcHVibGllci4gSidhdXJhaXMgbcOqbWUgdG91dCDDoCBmYWl0IHN1cHByaW3DqSBjZXMgTGV0dHJlcywgb3UgcGx1dMO0dCBqZSBsaWUgbGVzIGF1cmFpcyBwb2ludCDDqWNyaXRlcywgcydpbCBuJ2XDu3Qgw6l0w6kgcXVlc3Rpb24gcXVlIGRlIG1vaSA6IE1haXMgbWEgcGF0cmllIG5lIG0nZXN0IHBhcyB0ZWxsZW1lbnQgZGV2ZW51ZSDDqXRyYW5nw6hyZSBxdWUgamUgcHVpc3NlIHZvaXIgdHJhbnF1aWxsZW1lbnQgb3BwcmltZXIgc2VzIGNpdG95ZW5zLCBzdXJ0b3V0IGxvcnNxdSdpbHMgbidvbnQgY29tcHJvbWlzIGxldXJzIGRyb2l0cyBxdSdlbiBkw6lmZW5kYW50IG1hIGNhdXNlLiBKZSBzZXJhaXMgbGUgZGVybmllciBkZXMgaG9tbWVzIHNpIGRhbnMgdW5lIHRlbGxlIG9jY2FzaW9uIGonw6ljb3V0YWlzIHVuIHNlbnRpbWVudCBxdWkgbidlc3QgcGx1cyBuaSBkb3VjZXVyIG5pIHBhdGllbmNlLCBtYWlzIGZhaWJsZXNzZSBldCBsw6JjaGV0w6ksIGRhbnMgY2VsdWkgcXUnaWwgZW1ww6pjaGUgZGUgcmVtcGxpciBzb24gZGV2b2lyLgorUmllbiBkZSBtb2lucyBpbXBvcnRhbnQgcG91ciBsZSBwdWJsaWMsIGonZW4gY29udmllbnMsIHF1ZSBsYSBtYXRpw6hyZSBkZSBjZXMgbGV0dHJlcy4gTGEgY29uc3RpdHV0aW9uIGQndW5lIHBldGl0ZSBSw6lwdWJsaXF1ZSwgbGUgc29ydCBkJ3VuIHBldGl0IHBhcnRpY3VsaWVyLCBsJ2V4cG9zw6kgZGUgcXVlbHF1ZXMgaW5qdXN0aWNlcywgbGEgcsOpZnV0YXRpb24gZGUgcXVlbHF1ZXMgc29waGlzbWVzIDsgdG91dCBjZWxhIG4nYSByaWVuIGVuIHNvaSBkJ2Fzc2V6IGNvbnNpZMOpcmFibGUgcG91ciBtw6lyaXRlciBiZWF1Y291cCBkZSBsZWN0ZXVycyA6IG1haXMgc2kgbWVzIHN1amV0cyBzb250IHBldGl0cyBtZXMgb2JqZXRzIHNvbnQgZ3JhbmRzLCBldCBkaWduZXMgZGUgbCdhdHRlbnRpb24gZGUgdG91dCBob25uw6p0ZSBob21tZS4gTGFpc3NvbnMgR2Vuw6h2ZSDDoCBzYSBwbGFjZSwgZXQgUm91c3NlYXUgZGFucyBzYSBkw6lwcmVzc2lvbiA7IG1haXMgbGEgcmVsaWdpb24sIG1haXMgbGEgbGliZXJ0w6ksIGxhIGp1c3RpY2UgISB2b2lsw6AsIHF1aSBxdWUgdm91cyBzb3lleiwgY2UgcXVpIG4nZXN0IHBhcyBhdS1kZXNzb3VzIGRlIHZvdXMuCitRdSdvbiBuZSBjaGVyY2hlIHBhcyBtw6ptZSBpY2kgZGFucyBsZSBzdHlsZSBsZSBkw6lkb21tYWdlbWVudCBkZSBsJ2FyaWRpdMOpIGRlIGxhIG1hdGnDqHJlLiBDZXV4IHF1ZSBxdWVscXVlcyB0cmFpdHMgaGV1cmV1eCBkZSBtYSBwbHVtZSBvbnQgc2kgZm9ydCBpcnJpdMOpcyB0cm91dmVyb250IGRlIHF1b2kgcydhcGFpc2VyIGRhbnMgY2VzIGxldHRyZXMsIEwnaG9ubmV1ciBkZSBkw6lmZW5kcmUgdW4gb3Bwcmltw6kgZcO7dCBlbmZsYW1tw6kgbW9uIGNvZXVyIHNpIGonYXZhaXMgcGFybMOpIHBvdXIgdW4gYXV0cmUuIFLDqWR1aXQgYXUgdHJpc3RlIGVtcGxvaSBkZSBtZSBkw6lmZW5kcmUgbW9pLW3Dqm1lLCBqJ2FpIGTDuyBtZSBib3JuZXIgw6AgcmFpc29ubmVyIDsgbSfDqWNoYXVmZmVyIGXDu3Qgw6l0w6kgbSdhdmlsaXIuIEonYXVyYWkgZG9uYyB0cm91dsOpIGdyw6JjZSBlbiBjZSBwb2ludCBkZXZhbnQgY2V1eCBxdWkgcydpbWFnaW5lbnQgcXUnaWwgZXN0IGVzc2VudGllbCDDoCBsYSB2w6lyaXTDqSBkJ8OqdHJlIGRpdGUgZnJvaWRlbWVudCA7IG9waW5pb24gcXVlIHBvdXJ0YW50IGonYWkgcGVpbmUgw6AgY29tcHJlbmRyZS4gTG9yc3F1J3VuZSB2aXZlIHBlcnN1YXNpb24gbm91cyBhbmltZSwgbGUgbW95ZW4gZCdlbXBsb3llciB1biBsYW5nYWdlIGdsYWPDqSA/IFF1YW5kIEFyY2hpbcOoZGUgdG91dCB0cmFuc3BvcnTDqSBjb3VyYWl0IG51IGRhbnMgbGVzIHJ1ZXMgZGUgU3lyYWN1c2UsIGVuIGF2YWl0LWlsIG1vaW5zIHRyb3V2w6kgbGEgdsOpcml0w6kgcGFyY2UgcXUnaWwgc2UgcGFzc2lvbm5haXQgcG91ciBlbGxlID8gVG91dCBhdSBjb250cmFpcmUsIGNlbHVpIHF1aSBsYSBzZW50IG5lIHBldXQgcydhYnN0ZW5pciBkZSBsJ2Fkb3JlciA7IGNlbHVpIHF1aSBkZW1ldXJlIGZyb2lkIG5lIGwnYSBwYXMgdnVlLgorUXVvaSBxdSdpbCBlbiBzb2l0LCBqZSBwcmllIGxlcyBsZWN0ZXVycyBkZSB2b3Vsb2lyIGJpZW4gbWV0dHJlIMOgIHBhcnQgbW9uIGJlYXUgc3R5bGUsIGV0IGQnZXhhbWluZXIgc2V1bGVtZW50IHNpIGplIHJhaXNvbm5lIGJpZW4gb3UgbWFsIDsgY2FyIGVuZmluLCBkZSBjZWxhIHNldWwgcXUndW4gYXV0ZXVyIHMnZXhwcmltZSBlbiBib25zIHRlcm1lcywgamUgbmUgdm9pcyBwYXMgY29tbWVudCBpbCBwZXV0IHMnZW5zdWl2cmUgcXVlIGNldCBhdXRldXIgbmUgc2FpdCBjZSBxdSdpbCBkaXQuCisiIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9FWEFNUExFLnB5IGIvVG9vbHMvbW9kdWxhdG9yL0VYQU1QTEUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNmE1YTcuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL0VYQU1QTEUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0jCi0jIEV4YW1wbGUgaW5wdXQgZmlsZSBmb3IgbW9kdWxhdG9yIGlmIHlvdSBkb24ndCBoYXZlIHRrLgotIwotIyBZb3UgbWF5IGFsc28gaGF2ZSB0byBzdHJpcCBzb21lIGltcG9ydHMgb3V0IG9mIG1vZHVsYXRvciB0byBtYWtlCi0jIGl0IHdvcmsuCi0KLWltcG9ydCBnZW5tb2R1bGUKLQotIwotIyBHZW5lcmF0ZSBjb2RlIGZvciBhIHNpbXBsZSBvYmplY3Qgd2l0aCBhIG1ldGhvZCBjYWxsZWQgc2FtcGxlCi0KLW8gPSBnZW5tb2R1bGUub2JqZWN0KCkKLW8ubmFtZSA9ICdzaW1wbGUgb2JqZWN0Jwotby5hYmJyZXYgPSAnc2ltcCcKLW8ubWV0aG9kbGlzdCA9IFsnc2FtcGxlJ10KLW8uZnVuY2xpc3QgPSBbJ25ldyddCi0KLSMKLSMgR2VuZXJhdGUgY29kZSBmb3IgYW4gb2JqZWN0IHRoYXQgbG9va3MgbnVtYmVyaXNoCi0jCi1vMiA9IGdlbm1vZHVsZS5vYmplY3QoKQotbzIubmFtZSA9ICdudW1iZXItbGlrZSBvYmplY3QnCi1vMi5hYmJyZXYgPSAnbmwnCi1vMi50eXBlbGlzdCA9IFsndHBfYXNfbnVtYmVyJ10KLW8yLmZ1bmNsaXN0ID0gWyduZXcnLCAndHBfcmVwcicsICd0cF9jb21wYXJlJ10KLQotIwotIyBHZW5lcmF0ZSBjb2RlIGZvciBhIG1ldGhvZCB3aXRoIGEgZnVsbCBjb21wbGVtZW50IG9mIGZ1bmN0aW9ucywKLSMgc29tZSBtZXRob2RzLCBhY2Nlc3NpYmxlIGFzIHNlcXVlbmNlIGFuZCBhbGxvd2luZyBzdHJ1Y3RtZW1iZXIuYyB0eXBlCi0jIHN0cnVjdHVyZSBhY2Nlc3MgYXMgd2VsbC4KLSMKLW8zID0gZ2VubW9kdWxlLm9iamVjdCgpCi1vMy5uYW1lID0gJ292ZXItdGhlLXRvcCBvYmplY3QnCi1vMy5hYmJyZXYgPSAnb3QnCi1vMy5tZXRob2RsaXN0ID0gWydtZXRob2QxJywgJ21ldGhvZDInXQotbzMuZnVuY2xpc3QgPSBbJ25ldycsICd0cF9kZWFsbG9jJywgJ3RwX3ByaW50JywgJ3RwX2dldGF0dHInLCAndHBfc2V0YXR0cicsCi0gICAgICAgICAgICAndHBfY29tcGFyZScsICd0cF9yZXByJywgJ3RwX2hhc2gnXQotbzMudHlwZWxpc3QgPSBbJ3RwX2FzX3NlcXVlbmNlJywgJ3N0cnVjdHVyZSddCi0KLSMKLSMgTm93IGdlbmVyYXRlIGNvZGUgZm9yIGEgbW9kdWxlIHRoYXQgaW5jb3Jwb3JhdGVzIHRoZXNlIG9iamVjdCB0eXBlcy4KLSMgQWxzbyBhZGQgdGhlIGJvaWxlcnBsYXRlcyBmb3IgZnVuY3Rpb25zIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YgZWFjaAotIyB0eXBlLgotIwotbSA9IGdlbm1vZHVsZS5tb2R1bGUoKQotbS5uYW1lID0gJ3NhbXBsZScKLW0uYWJicmV2ID0gJ3NhbXBsZScKLW0ubWV0aG9kbGlzdCA9IFsnbmV3c2ltcGxlJywgJ25ld251bWJlcmlzaCcsICduZXdvdHQnXQotbS5vYmplY3RzID0gW28sIG8yLCBvM10KLQotZnAgPSBvcGVuKCdFWEFNUExFbW9kdWxlLmMnLCAndycpCi1nZW5tb2R1bGUud3JpdGUoZnAsIG0pCi1mcC5jbG9zZSgpCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvUkVBRE1FIGIvVG9vbHMvbW9kdWxhdG9yL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFlODZiNC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotVGhpcyBpcyByZWxlYXNlIDEuMiBvZiBtb2R1bGF0b3IsIGEgZ2VuZXJhdG9yIG9mIGJvaWxlcnBsYXRlIGNvZGUgZm9yCi1tb2R1bGVzIHRvIGJlIHdyaXR0ZW4gaW4gQy4KLQotRGlmZmVyZW5jZSBiZXR3ZWVuIDEuMiBhbmQgMS4xOiBfX2RvY19fIHRlbXBsYXRlcyBhcmUgbm93IGdlbmVyYXRlZAotKHRoYW5rcyB0byBKaW0gRnVsdG9uKS4KLQotRGlmZmVyZW5jZSBiZXR3ZWVuIDEuMSBhbmQgMS4wOiB0aGUgdGVtcGxhdGVzIG5vdyB1c2UgIm5ldy1zdHlsZSIKLW5hbWluZyBjb252ZW50aW9ucy4gTWFueSB0aGFua3MgdG8gQ2hhayBUYW4gPHRhbkBlZS5yb2NoZXN0ZXIuZWR1PiBmb3IKLXN1cHBseWluZyB0aGVtLgotCi1Vc2FnZSB3aGVuIHlvdSBoYXZlIHRrIGlzICpyZWFsbHkqIHNpbXBsZTogc3RhcnQgbW9kdWxhdG9yLCBmaWxsIG91dAotdGhlIGZvcm1zIHNwZWNpZnlpbmcgYWxsIHRoZSBvYmplY3RzIGFuZCBtZXRob2RzLCB0ZWxsIG1vZHVsYXRvcgotd2hldGhlciBvYmplY3RzIHNob3VsZCBhbHNvIGJlIGFjY2Vzc2libGUgYXMgc2VxdWVuY2VzLCBldGMgYW5kIHByZXNzCi0nZ2VuZXJhdGUgY29kZScuIEl0IHdpbGwgd3JpdGUgYSBjb21wbGV0ZSBza2VsZXRvbiBtb2R1bGUgZm9yIHlvdS4KLQotVXNhZ2Ugd2hlbiB5b3UgZG9uJ3QgaGF2ZSB0ayBpcyBzbGlnaHRseSBtb3JlIGRpZmZpY3VsdC4gTG9vayBhdAotRVhBTVBMRS5weSBmb3Igc29tZSBkZXRhaWxzICh0byBydW4sIHVzZSAicHl0aG9uIEVYQU1QTEUucHkiKS4gIERvbid0Ci1ib3RoZXIgd2l0aCBFWEFNUExFLnB5IGlmIHlvdSBoYXZlIFRraW50ZXIhISEKLQotT2ggeWVhaDogeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gY2hhbmdlIFRlbXBsYXRlcy9jb3B5cmlnaHQsIG9yIGFsbAoteW91ciBjb2RlIGVuZHMgdXAgYXMgYmVpbmcgY29weXJpZ2h0ZWQgdG8gQ1dJOi0pCi0KLUxldCBtZSBrbm93IHdoYXQgeW91IHRoaW5rLAotCQkJCUphY2sgSmFuc2VuLCBqYWNrQGN3aS5ubAotCQkJCQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1Njcm9sbGVkTGlzdGJveC5weSBiL1Rvb2xzL21vZHVsYXRvci9TY3JvbGxlZExpc3Rib3gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiYjU3MzguLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1Njcm9sbGVkTGlzdGJveC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgQSBTY3JvbGxlZExpc3Qgd2lkZ2V0IGZlZWxzIGxpa2UgYSBsaXN0IHdpZGdldCBidXQgYWxzbyBoYXMgYQotIyB2ZXJ0aWNhbCBzY3JvbGwgYmFyIG9uIGl0cyByaWdodC4gIChMYXRlciwgb3B0aW9ucyBtYXkgYmUgYWRkZWQgdG8KLSMgYWRkIGEgaG9yaXpvbnRhbCBiYXIgYXMgd2VsbCwgdG8gbWFrZSB0aGUgYmFycyBkaXNhcHBlYXIKLSMgYXV0b21hdGljYWxseSB3aGVuIG5vdCBuZWVkZWQsIHRvIG1vdmUgdGhlbSB0byB0aGUgb3RoZXIgc2lkZSBvZiB0aGUKLSMgd2luZG93LCBldGMuKQotIwotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHBhc3NlZCB0byB0aGUgTGlzdCB3aWRnZXQuCi0jIEEgRnJhbWUgd2lkZ2V0IGlzIGluc2VydGVkIGJldHdlZW4gdGhlIG1hc3RlciBhbmQgdGhlIGxpc3QsIHRvIGhvbGQKLSMgdGhlIFNjcm9sbGJhciB3aWRnZXQuCi0jIE1vc3QgbWV0aG9kcyBjYWxscyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIExpc3Qgd2lkZ2V0OyBQYWNrIG1ldGhvZHMKLSMgYXJlIHJlZGlyZWN0ZWQgdG8gdGhlIEZyYW1lIHdpZGdldCBob3dldmVyLgotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLWZyb20gVGtpbnRlciBpbXBvcnQgX2NuZm1lcmdlCi0KLWNsYXNzIFNjcm9sbGVkTGlzdGJveChMaXN0Ym94KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSk6Ci0gICAgICAgIGNuZiA9IF9jbmZtZXJnZShjbmYpCi0gICAgICAgIGZjbmYgPSB7fQotICAgICAgICB2Y25mID0geyduYW1lJzogJ3ZiYXInLAotICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ3JpZ2h0JywgJ2ZpbGwnOiAneSd9LH0KLSAgICAgICAgZm9yIGsgaW4gY25mLmtleXMoKToKLSAgICAgICAgICAgIGlmIHR5cGUoaykgPT0gQ2xhc3NUeXBlIG9yIGsgPT0gJ25hbWUnOgotICAgICAgICAgICAgICAgIGZjbmZba10gPSBjbmZba10KLSAgICAgICAgICAgICAgICBkZWwgY25mW2tdCi0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShtYXN0ZXIsIGZjbmYpCi0gICAgICAgIHNlbGYudmJhciA9IFNjcm9sbGJhcihzZWxmLmZyYW1lLCB2Y25mKQotICAgICAgICBjbmZbUGFja10gPSB7J3NpZGUnOiAnbGVmdCcsICdmaWxsJzogJ2JvdGgnLCAnZXhwYW5kJzogJ3llcyd9Ci0gICAgICAgIGNuZlsnbmFtZSddID0gJ2xpc3QnCi0gICAgICAgIExpc3Rib3guX19pbml0X18oc2VsZiwgc2VsZi5mcmFtZSwgY25mKQotICAgICAgICBzZWxmWyd5c2Nyb2xsY29tbWFuZCddID0gKHNlbGYudmJhciwgJ3NldCcpCi0gICAgICAgIHNlbGYudmJhclsnY29tbWFuZCddID0gKHNlbGYsICd5dmlldycpCi0KLSAgICAgICAgIyBDb3B5IFBhY2sgbWV0aG9kcyBvZiBzZWxmLmZyYW1lIC0tIGhhY2shCi0gICAgICAgIGZvciBtIGluIFBhY2suX19kaWN0X18ua2V5cygpOgotICAgICAgICAgICAgaWYgbVswXSAhPSAnXycgYW5kIG0gIT0gJ2NvbmZpZyc6Ci0gICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBtLCBnZXRhdHRyKHNlbGYuZnJhbWUsIG0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfaGVhZCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX2hlYWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMDAxMDkuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfaGVhZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLXN0YXRpYyBQeU9iamVjdCAqRXJyb3JPYmplY3Q7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9tZXRob2QgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9tZXRob2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNDhiMWYuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfbWV0aG9kCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCi1zdGF0aWMgY2hhciAkYWJicmV2JF8kbWV0aG9kJF9fZG9jX19bXSA9Ci0iIgotOwotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfJG1ldGhvZCQoUHlPYmplY3QgKnNlbGYgLyogTm90IHVzZWQgKi8sIFB5T2JqZWN0ICphcmdzKQotewotCi0JaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiKSkKLQkJcmV0dXJuIE5VTEw7Ci0JUHlfSU5DUkVGKFB5X05vbmUpOwotCXJldHVybiBQeV9Ob25lOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfdGFpbCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX3RhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Y2M1MGIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfdGFpbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLQotLyogTGlzdCBvZiBtZXRob2RzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwotCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmICRhYmJyZXYkX21ldGhvZHNbXSA9IHsKLQkkbWV0aG9kbGlzdCQKLQl7TlVMTCwJIChQeUNGdW5jdGlvbilOVUxMLCAwLCBOVUxMfQkJLyogc2VudGluZWwgKi8KLX07Ci0KLQotLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgaW5pdCRuYW1lJCkgKi8KLQotc3RhdGljIGNoYXIgJG5hbWUkX21vZHVsZV9kb2N1bWVudGF0aW9uW10gPSAKLSIiCi07Ci0KLXZvaWQKLWluaXQkbmFtZSQoKQotewotCVB5T2JqZWN0ICptLCAqZDsKLQotCS8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLwotCW0gPSBQeV9Jbml0TW9kdWxlNCgiJG5hbWUkIiwgJGFiYnJldiRfbWV0aG9kcywKLQkJJG5hbWUkX21vZHVsZV9kb2N1bWVudGF0aW9uLAotCQkoUHlPYmplY3QqKU5VTEwsUFlUSE9OX0FQSV9WRVJTSU9OKTsKLQotCS8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCi0JZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0JRXJyb3JPYmplY3QgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKCIkbmFtZSQuZXJyb3IiKTsKLQlQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiZXJyb3IiLCBFcnJvck9iamVjdCk7Ci0KLQkvKiBYWFhYIEFkZCBjb25zdGFudHMgaGVyZSAqLwotCQotCS8qIENoZWNrIGZvciBlcnJvcnMgKi8KLQlpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLQkJUHlfRmF0YWxFcnJvcigiY2FuJ3QgaW5pdGlhbGl6ZSBtb2R1bGUgJG5hbWUkIik7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X2hlYWQgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9oZWFkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2QxZjZhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X2hlYWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLS8qIERlY2xhcmF0aW9ucyBmb3Igb2JqZWN0cyBvZiB0eXBlICRuYW1lJCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JUHlPYmplY3RfSEVBRAotCS8qIFhYWFggQWRkIHlvdXIgb3duIHN0dWZmIGhlcmUgKi8KLX0gJGFiYnJldiRvYmplY3Q7Ci0KLXN0YXRpYyBQeVR5cGVPYmplY3QgJEFiYnJldiR0eXBlOwotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWV0aG9kIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWV0aG9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTUxNjJjLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21ldGhvZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLQotc3RhdGljIGNoYXIgJGFiYnJldiRfJG1ldGhvZCRfX2RvY19fW10gPSAKLSIiCi07Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF8kbWV0aG9kJCgkYWJicmV2JG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0JaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiKSkKLQkJcmV0dXJuIE5VTEw7Ci0JUHlfSU5DUkVGKFB5X05vbmUpOwotCXJldHVybiBQeV9Ob25lOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tbGlzdCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21saXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJhOWUxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21saXN0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgJGFiYnJldiRfbWV0aG9kc1tdID0gewotCSRtZXRob2RsaXN0JAotCXtOVUxMLAkJTlVMTH0JCS8qIHNlbnRpbmVsICovCi19OwotCi0vKiAtLS0tLS0tLS0tICovCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X25ldyBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X25ldwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjNWUzNi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9uZXcKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLXN0YXRpYyAkYWJicmV2JG9iamVjdCAqCi1uZXckYWJicmV2JG9iamVjdCgpCi17Ci0JJGFiYnJldiRvYmplY3QgKnNlbGY7Ci0JCi0Jc2VsZiA9IFB5T2JqZWN0X05FVygkYWJicmV2JG9iamVjdCwgJiRBYmJyZXYkdHlwZSk7Ci0JaWYgKHNlbGYgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JLyogWFhYWCBBZGQgeW91ciBvd24gaW5pdGlhbGl6ZXJzIGhlcmUgKi8KLQlyZXR1cm4gc2VsZjsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3Rfc3RydWN0dXJlIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3Rfc3RydWN0dXJlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzNhYzhkLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3N0cnVjdHVyZQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLQotLyogQ29kZSB0byBhY2Nlc3Mgc3RydWN0dXJlIG1lbWJlcnMgYnkgYWNjZXNzaW5nIGF0dHJpYnV0ZXMgKi8KLQotI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgotCi0jZGVmaW5lIE9GRih4KSBvZmZzZXRvZihYWFhYb2JqZWN0LCB4KQotCi1zdGF0aWMgc3RydWN0IG1lbWJlcmxpc3QgJGFiYnJldiRfbWVtYmVybGlzdFtdID0gewotCS8qIFhYWFggQWRkIGxpbmVzIGxpa2UgeyAiZm9vIiwgVF9JTlQsIE9GRihmb28pLCBSTyB9ICAqLwotCi0Je05VTEx9CS8qIFNlbnRpbmVsICovCi19OwotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfZ2V0YXR0cigkYWJicmV2JG9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKLXsKLQlQeU9iamVjdCAqcnY7Ci0JCi0JLyogWFhYWCBBZGQgeW91ciBvd24gZ2V0YXR0ciBjb2RlIGhlcmUgKi8KLQlydiA9IFB5TWVtYmVyX0dldCgoY2hhciAqKS8qWFhYWCovMCwgJGFiYnJldiRfbWVtYmVybGlzdCwgbmFtZSk7Ci0JaWYgKHJ2KQotCQlyZXR1cm4gcnY7Ci0JUHlFcnJfQ2xlYXIoKTsKLQlyZXR1cm4gUHlfRmluZE1ldGhvZCgkYWJicmV2JF9tZXRob2RzLCAoUHlPYmplY3QgKilzZWxmLCBuYW1lKTsKLX0KLQotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9zZXRhdHRyKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKLXsKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBzZXRhdHRyIGNvZGUgaGVyZSAqLwotCWlmICggdiA9PSBOVUxMICkgewotCQlQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJDYW5ub3QgZGVsZXRlIGF0dHJpYnV0ZSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBQeU1lbWJlcl9TZXQoKGNoYXIgKikvKlhYWFgqLzAsICRhYmJyZXYkX21lbWJlcmxpc3QsIG5hbWUsIHYpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdGFpbCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTMzNGMuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdGFpbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLQotc3RhdGljIGNoYXIgJEFiYnJldiR0eXBlX19kb2NfX1tdID0gCi0iIgotOwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0ICRBYmJyZXYkdHlwZSA9IHsKLQlQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQotCTAsCQkJCS8qb2Jfc2l6ZSovCi0JIiRuYW1lJCIsCQkJLyp0cF9uYW1lKi8KLQlzaXplb2YoJGFiYnJldiRvYmplY3QpLAkJLyp0cF9iYXNpY3NpemUqLwotCTAsCQkJCS8qdHBfaXRlbXNpemUqLwotCS8qIG1ldGhvZHMgKi8KLQkoZGVzdHJ1Y3RvcikkdHBfZGVhbGxvYyQsCS8qdHBfZGVhbGxvYyovCi0JKHByaW50ZnVuYykkdHBfcHJpbnQkLAkJLyp0cF9wcmludCovCi0JKGdldGF0dHJmdW5jKSR0cF9nZXRhdHRyJCwJLyp0cF9nZXRhdHRyKi8KLQkoc2V0YXR0cmZ1bmMpJHRwX3NldGF0dHIkLAkvKnRwX3NldGF0dHIqLwotCShjbXBmdW5jKSR0cF9jb21wYXJlJCwJCS8qdHBfY29tcGFyZSovCi0JKHJlcHJmdW5jKSR0cF9yZXByJCwJCS8qdHBfcmVwciovCi0JJHRwX2FzX251bWJlciQsCQkJLyp0cF9hc19udW1iZXIqLwotCSR0cF9hc19zZXF1ZW5jZSQsCQkvKnRwX2FzX3NlcXVlbmNlKi8KLQkkdHBfYXNfbWFwcGluZyQsCQkvKnRwX2FzX21hcHBpbmcqLwotCShoYXNoZnVuYykkdHBfaGFzaCQsCQkvKnRwX2hhc2gqLwotCSh0ZXJuYXJ5ZnVuYykkdHBfY2FsbCQsCQkvKnRwX2NhbGwqLwotCShyZXByZnVuYykkdHBfc3RyJCwJCS8qdHBfc3RyKi8KLQotCS8qIFNwYWNlIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCi0JMEwsMEwsMEwsMEwsCi0JJEFiYnJldiR0eXBlX19kb2NfXyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwotfTsKLQotLyogRW5kIG9mIGNvZGUgZm9yICRuYW1lJCBvYmplY3RzICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19tYXBwaW5nIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbWFwcGluZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTNiNy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19tYXBwaW5nCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotCi0vKiBDb2RlIHRvIGFjY2VzcyAkbmFtZSQgb2JqZWN0cyBhcyBtYXBwaW5ncyAqLwotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9sZW5ndGgoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3N1YnNjcmlwdCgkYWJicmV2JG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSkKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgaXRlbSBvZiBzZWxmIGluZGV4ZWQgYnkga2V5ICovCi19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2Fzc19zdWIoJGFiYnJldiRvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKLXsKLQkvKiBYWFhYIFB1dCB3IGluIHNlbGYgdW5kZXIga2V5IHYgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgJGFiYnJldiRfYXNfbWFwcGluZyA9IHsKLQkoaW5xdWlyeSkkYWJicmV2JF9sZW5ndGgsCQkvKm1wX2xlbmd0aCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfc3Vic2NyaXB0LAkJLyptcF9zdWJzY3JpcHQqLwotCShvYmpvYmphcmdwcm9jKSRhYmJyZXYkX2Fzc19zdWIsCS8qbXBfYXNzX3N1YnNjcmlwdCovCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbnVtYmVyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbnVtYmVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlhYTlhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX251bWJlcgorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0KLS8qIENvZGUgdG8gYWNjZXNzICRuYW1lJCBvYmplY3RzIGFzIG51bWJlcnMgKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2FkZCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCBBZGQgdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfc3ViKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIFN1YnRyYWN0IHRoZW0gKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX211bCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCBNdWx0aXBseSB0aGVtICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9kaXYoJGFiYnJldiRvYmplY3QgKngsICRhYmJyZXYkb2JqZWN0ICp5KQotewotCS8qIFhYWFggRGl2aWRlIHRoZW0gKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX21vZCgkYWJicmV2JG9iamVjdCAqeCwgJGFiYnJldiRvYmplY3QgKnkpCi17Ci0JLyogWFhYWCBNb2R1bG8gdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfZGl2bW9kKCRhYmJyZXYkb2JqZWN0ICp4LCAkYWJicmV2JG9iamVjdCAqeSkKLXsKLQkvKiBYWFhYIFJldHVybiAyLXR1cGxlIHdpdGggZGl2IGFuZCBtb2QgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3BvdygkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncsICRhYmJyZXYkb2JqZWN0ICp6KQotewotCS8qIFhYWFggKi8KLX0JCQkJCi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9uZWcoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcG9zKCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2FicygkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX25vbnplcm8oJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXR1cm4gMSBpZiBub24temVybyAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfaW52ZXJ0KCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2xzaGlmdCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcnNoaWZ0KCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9hbmQoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3hvcigkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfb3IoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfY29lcmNlKFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICoqcHcpCi17Ci0JLyogWFhYWCBJIGhhdmVuJ3QgYSBjbHVlLi4uICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9pbnQoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfbG9uZygkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9mbG9hdCgkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9vY3QoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXR1cm4gb2JqZWN0IGFzIG9jdGFsIHN0cmluZ29iamVjdCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfaGV4KCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggUmV0dXJuIG9iamVjdCBhcyBoZXggc3RyaW5nb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBQeU51bWJlck1ldGhvZHMgJGFiYnJldiRfYXNfbnVtYmVyID0gewotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2FkZCwJLypuYl9hZGQqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX3N1YiwJLypuYl9zdWJ0cmFjdCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfbXVsLAkvKm5iX211bHRpcGx5Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9kaXYsCS8qbmJfZGl2aWRlKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9tb2QsCS8qbmJfcmVtYWluZGVyKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9kaXZtb2QsCS8qbmJfZGl2bW9kKi8KLQkodGVybmFyeWZ1bmMpJGFiYnJldiRfcG93LAkvKm5iX3Bvd2VyKi8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX25lZywJLypuYl9uZWdhdGl2ZSovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9wb3MsCS8qbmJfcG9zaXRpdmUqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfYWJzLAkvKm5iX2Fic29sdXRlKi8KLQkoaW5xdWlyeSkkYWJicmV2JF9ub256ZXJvLAkvKm5iX25vbnplcm8qLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfaW52ZXJ0LAkvKm5iX2ludmVydCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfbHNoaWZ0LAkvKm5iX2xzaGlmdCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfcnNoaWZ0LAkvKm5iX3JzaGlmdCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfYW5kLAkvKm5iX2FuZCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfeG9yLAkvKm5iX3hvciovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfb3IsCS8qbmJfb3IqLwotCShjb2VyY2lvbikkYWJicmV2JF9jb2VyY2UsCS8qbmJfY29lcmNlKi8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX2ludCwJLypuYl9pbnQqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfbG9uZywJLypuYl9sb25nKi8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX2Zsb2F0LAkvKm5iX2Zsb2F0Ki8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX29jdCwJLypuYl9vY3QqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfaGV4LAkvKm5iX2hleCovCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19zZXF1ZW5jZSBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX3NlcXVlbmNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGMwYjkyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX3NlcXVlbmNlCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotCi0vKiBDb2RlIHRvIGhhbmRsZSBhY2Nlc3NpbmcgJG5hbWUkIG9iamVjdHMgYXMgc2VxdWVuY2Ugb2JqZWN0cyAqLwotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9sZW5ndGgoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG9iamVjdCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfY29uY2F0KCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYmIpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIGNvbmNhdGVuYXRpb24gb2Ygc2VsZiBhbmQgYmIgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3JlcGVhdCgkYWJicmV2JG9iamVjdCAqc2VsZiwgaW50IG4pCi17Ci0JLyogWFhYWCBSZXR1cm4gYSBuZXcgb2JqZWN0IHRoYXQgaXMgbiB0aW1lcyBzZWxmICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9pdGVtKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBpbnQgaSkKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgaS10aCBvYmplY3Qgb2Ygc2VsZiAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfc2xpY2UoJGFiYnJldiRvYmplY3QgKnNlbGYsIGludCBpbG93LCBpbnQgaWhpZ2gpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIGlsb3cuLmloaWdoIHNsaWNlIG9mIHNlbGYgaW4gYSBuZXcgb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2Fzc19pdGVtKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBpbnQgaSwgUHlPYmplY3QgKnYpCi17Ci0JLyogWFhYWCBBc3NpZ24gdG8gdGhlIGktdGggZWxlbWVudCBvZiBzZWxmICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2Fzc19zbGljZShQeUxpc3RPYmplY3QgKnNlbGYsIGludCBpbG93LCBpbnQgaWhpZ2gsIFB5T2JqZWN0ICp2KQotewotCS8qIFhYWFggUmVwbGFjZSBpbG93Li5paGlnaCBzbGljZSBvZiBzZWxmIHdpdGggdiAqLwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgJGFiYnJldiRfYXNfc2VxdWVuY2UgPSB7Ci0JKGlucXVpcnkpJGFiYnJldiRfbGVuZ3RoLAkJLypzcV9sZW5ndGgqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2NvbmNhdCwJCS8qc3FfY29uY2F0Ki8KLQkoaW50YXJnZnVuYykkYWJicmV2JF9yZXBlYXQsCQkvKnNxX3JlcGVhdCovCi0JKGludGFyZ2Z1bmMpJGFiYnJldiRfaXRlbSwJCS8qc3FfaXRlbSovCi0JKGludGludGFyZ2Z1bmMpJGFiYnJldiRfc2xpY2UsCQkvKnNxX3NsaWNlKi8KLQkoaW50b2JqYXJncHJvYykkYWJicmV2JF9hc3NfaXRlbSwJLypzcV9hc3NfaXRlbSovCi0JKGludGludG9iamFyZ3Byb2MpJGFiYnJldiRfYXNzX3NsaWNlLAkvKnNxX2Fzc19zbGljZSovCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY2FsbCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2NhbGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5M2YxN2YuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY2FsbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfY2FsbCgkYWJicmV2JG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHNlbGYgd2l0aCBhcmd1bWVudCBhcmdzICovCi19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2NvbXBhcmUgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9jb21wYXJlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTNiYWUwLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2NvbXBhcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotc3RhdGljIGludAotJGFiYnJldiRfY29tcGFyZSgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCBDb21wYXJlIG9iamVjdHMgYW5kIHJldHVybiAtMSwgMCBvciAxICovCi19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9kZWFsbG9jIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfZGVhbGxvYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwNDE5YS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9kZWFsbG9jCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyB2b2lkCi0kYWJicmV2JF9kZWFsbG9jKCRhYmJyZXYkb2JqZWN0ICpzZWxmKQotewotCS8qIFhYWFggQWRkIHlvdXIgb3duIGNsZWFudXAgY29kZSBoZXJlICovCi0JUHlNZW1fREVMKHNlbGYpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfZ2V0YXR0ciBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2dldGF0dHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMWIyZTguLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfZ2V0YXR0cgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfZ2V0YXR0cigkYWJicmV2JG9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSkKLXsKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBnZXRhdHRyIGNvZGUgaGVyZSAqLwotCXJldHVybiBQeV9GaW5kTWV0aG9kKCRhYmJyZXYkX21ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfaGFzaCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2hhc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkNjNmNmEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfaGFzaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi1zdGF0aWMgbG9uZwotJGFiYnJldiRfaGFzaCgkYWJicmV2JG9iamVjdCAqc2VsZikKLXsKLQkvKiBYWFhYIFJldHVybiBhIGhhc2ggb2Ygc2VsZiAob3IgLTEpICovCi19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9wcmludCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3ByaW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjQwOGQyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3ByaW50CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX3ByaW50KCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBGSUxFICpmcCwgaW50IGZsYWdzKQotewotCS8qIFhYWFggQWRkIGNvZGUgaGVyZSB0byBwcmludCBzZWxmIHRvIGZwICovCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9yZXByIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfcmVwcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEyMjIyNS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9yZXByCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9yZXByKCRhYmJyZXYkb2JqZWN0ICpzZWxmKQotewotCVB5T2JqZWN0ICpzOwotCi0JLyogWFhYWCBBZGQgY29kZSBoZXJlIHRvIHB1dCBzZWxmIGludG8gcyAqLwotCXJldHVybiBzOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfc2V0YXR0ciBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3NldGF0dHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZTRiYzguLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfc2V0YXR0cgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9zZXRhdHRyKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKLXsKLQkvKiBTZXQgYXR0cmlidXRlICduYW1lJyB0byB2YWx1ZSAndicuIHY9PU5VTEwgbWVhbnMgZGVsZXRlICovCi0JCi0JLyogWFhYWCBBZGQgeW91ciBvd24gc2V0YXR0ciBjb2RlIGhlcmUgKi8KLQlyZXR1cm4gLTE7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zdHIgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zdHIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMzY0OGUuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfc3RyCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfc3RyKCRhYmJyZXYkb2JqZWN0ICpzZWxmKQotewotCVB5T2JqZWN0ICpzOwotCi0JLyogWFhYWCBBZGQgY29kZSBoZXJlIHRvIHB1dCBzZWxmIGludG8gcyAqLwotCXJldHVybiBzOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGtleHRyYS5weSBiL1Rvb2xzL21vZHVsYXRvci9Ua2V4dHJhLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxMjI3MTA2Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9Ua2V4dHJhLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBBIFB5dGhvbiBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBkaWFsb2cgYm94ZXMgd2l0aCBhIHRleHQgbWVzc2FnZSwKLSMgb3B0aW9uYWwgYml0bWFwLCBhbmQgYW55IG51bWJlciBvZiBidXR0b25zLgotIyBDZi4gT3VzdGVyaG91dCwgVGNsIGFuZCB0aGUgVGsgVG9vbGtpdCwgRmlncy4gMjcuMi0zLCBwcC4gMjY5LTI3MC4KLQotZnJvbSBUa2ludGVyIGltcG9ydCAqCi0KLW1haW5XaWRnZXQgPSBOb25lCi0KLWRlZiBkaWFsb2cobWFzdGVyLCB0aXRsZSwgdGV4dCwgYml0bWFwLCBkZWZhdWx0LCAqYXJncyk6Ci0KLSAgICAjIDEuIENyZWF0ZSB0aGUgdG9wLWxldmVsIHdpbmRvdyBhbmQgZGl2aWRlIGl0IGludG8gdG9wCi0gICAgIyBhbmQgYm90dG9tIHBhcnRzLgotCi0gICAgdyA9IFRvcGxldmVsKG1hc3RlciwgeydjbGFzcyc6ICdEaWFsb2cnfSkKLSAgICB3LnRpdGxlKHRpdGxlKQotICAgIHcuaWNvbm5hbWUoJ0RpYWxvZycpCi0KLSAgICB0b3AgPSBGcmFtZSh3LCB7J3JlbGllZic6ICdyYWlzZWQnLCAnYmQnOiAxLAotICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAndG9wJywgJ2ZpbGwnOiAnYm90aCd9fSkKLSAgICBib3QgPSBGcmFtZSh3LCB7J3JlbGllZic6ICdyYWlzZWQnLCAnYmQnOiAxLAotICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnYm90dG9tJywgJ2ZpbGwnOiAnYm90aCd9fSkKLQotICAgICMgMi4gRmlsbCB0aGUgdG9wIHBhcnQgd2l0aCB0aGUgYml0bWFwIGFuZCBtZXNzYWdlLgotCi0gICAgbXNnID0gTWVzc2FnZSh0b3AsCi0gICAgICAgICAgICAgICAgICB7J3dpZHRoJzogJzNpJywKLSAgICAgICAgICAgICAgICAgICAndGV4dCc6IHRleHQsCi0gICAgICAgICAgICAgICAgICAgJ2ZvbnQnOiAnLUFkb2JlLVRpbWVzLU1lZGl1bS1SLU5vcm1hbC0qLTE4MC0qJywKLSAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAncmlnaHQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOiAnYm90aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0gICAgaWYgYml0bWFwOgotICAgICAgICBibSA9IExhYmVsKHRvcCwgeydiaXRtYXAnOiBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzNtJ319KQotCi0gICAgIyAzLiBDcmVhdGUgYSByb3cgb2YgYnV0dG9ucyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkaWFsb2cuCi0KLSAgICBidXR0b25zID0gW10KLSAgICBpID0gMAotICAgIGZvciBidXQgaW4gYXJnczoKLSAgICAgICAgYiA9IEJ1dHRvbihib3QsIHsndGV4dCc6IGJ1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6ICgnc2V0JywgJ2J1dHRvbicsIGkpfSkKLSAgICAgICAgYnV0dG9ucy5hcHBlbmQoYikKLSAgICAgICAgaWYgaSA9PSBkZWZhdWx0OgotICAgICAgICAgICAgYmQgPSBGcmFtZShib3QsIHsncmVsaWVmJzogJ3N1bmtlbicsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdsZWZ0JywgJ2V4cGFuZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzJtJ319KQotICAgICAgICAgICAgYi5saWZ0KCkKLSAgICAgICAgICAgIGIucGFjayAoeydpbic6IGJkLCAnc2lkZSc6ICdsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzJtJywgJ3BhZHknOiAnMm0nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR4JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiLnBhY2sgKHsnc2lkZSc6ICdsZWZ0JywgJ2V4cGFuZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzNtJywKLSAgICAgICAgICAgICAgICAgICAgICdpcGFkeSc6ICcybScsICdpcGFkeSc6ICcxbSd9KQotICAgICAgICBpID0gaSsxCi0KLSAgICAjIDQuIFNldCB1cCBhIGJpbmRpbmcgZm9yIDxSZXR1cm4+LCBpZiB0aGVyZSdzIGEgZGVmYXVsdCwKLSAgICAjIHNldCBhIGdyYWIsIGFuZCBjbGFpbSB0aGUgZm9jdXMgdG9vLgotCi0gICAgaWYgZGVmYXVsdCA+PSAwOgotICAgICAgICB3LmJpbmQoJzxSZXR1cm4+JywKLSAgICAgICAgICAgICAgIGxhbWJkYSBlLCBiPWJ1dHRvbnNbZGVmYXVsdF0sIGk9ZGVmYXVsdDoKLSAgICAgICAgICAgICAgIChiLmZsYXNoKCksCi0gICAgICAgICAgICAgICAgYi5zZXR2YXIoJ2J1dHRvbicsIGkpKSkKLQotICAgIG9sZEZvY3VzID0gdy50ay5jYWxsKCdmb2N1cycpICMgWFhYCi0gICAgdy5ncmFiX3NldCgpCi0gICAgdy5mb2N1cygpCi0KLSAgICAjIDUuIFdhaXQgZm9yIHRoZSB1c2VyIHRvIHJlc3BvbmQsIHRoZW4gcmVzdG9yZSB0aGUgZm9jdXMKLSAgICAjIGFuZCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBidXR0b24uCi0KLSAgICB3LndhaXR2YXIoJ2J1dHRvbicpCi0gICAgdy5kZXN0cm95KCkKLSAgICB3LnRrLmNhbGwoJ2ZvY3VzJywgb2xkRm9jdXMpICMgWFhYCi0gICAgcmV0dXJuIHcuZ2V0aW50KHcuZ2V0dmFyKCdidXR0b24nKSkKLQotZGVmIHN0cmRpYWxvZyhtYXN0ZXIsIHRpdGxlLCB0ZXh0LCBiaXRtYXAsIGRlZmF1bHQsICphcmdzKToKLQotICAgICMgMS4gQ3JlYXRlIHRoZSB0b3AtbGV2ZWwgd2luZG93IGFuZCBkaXZpZGUgaXQgaW50byB0b3AKLSAgICAjIGFuZCBib3R0b20gcGFydHMuCi0KLSAgICB3ID0gVG9wbGV2ZWwobWFzdGVyLCB7J2NsYXNzJzogJ0RpYWxvZyd9KQotICAgIHcudGl0bGUodGl0bGUpCi0gICAgdy5pY29ubmFtZSgnRGlhbG9nJykKLQotICAgIHRvcCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICd0b3AnLCAnZmlsbCc6ICdib3RoJ319KQotICAgIGlmIGFyZ3M6Ci0gICAgICAgIGJvdCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdib3R0b20nLCAnZmlsbCc6ICdib3RoJ319KQotCi0gICAgIyAyLiBGaWxsIHRoZSB0b3AgcGFydCB3aXRoIHRoZSBiaXRtYXAsIG1lc3NhZ2UgYW5kIGlucHV0IGZpZWxkLgotCi0gICAgaWYgYml0bWFwOgotICAgICAgICBibSA9IExhYmVsKHRvcCwgeydiaXRtYXAnOiBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzNtJ319KQotCi0gICAgbXNnID0gTWVzc2FnZSh0b3AsCi0gICAgICAgICAgICAgICAgICB7J3dpZHRoJzogJzNpJywKLSAgICAgICAgICAgICAgICAgICAndGV4dCc6IHRleHQsCi0gICAgICAgICAgICAgICAgICAgJ2ZvbnQnOiAnLUFkb2JlLVRpbWVzLU1lZGl1bS1SLU5vcm1hbC0qLTE4MC0qJywKLSAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzogJ2JvdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzNtJ319KQotCi0gICAgZmllbGQgPSBFbnRyeSh0b3AsCi0gICAgICAgICAgICAgICAgICB7J3JlbGllZic6J3N1bmtlbicsCi0gICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnOjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiczbScsICdwYWR5JzonM20nfX0pCi0gICAgIyAzLiBDcmVhdGUgYSByb3cgb2YgYnV0dG9ucyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkaWFsb2cuCi0KLSAgICBidXR0b25zID0gW10KLSAgICBpID0gMAotICAgIGZvciBidXQgaW4gYXJnczoKLSAgICAgICAgYiA9IEJ1dHRvbihib3QsIHsndGV4dCc6IGJ1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6ICgnc2V0JywgJ2J1dHRvbicsIGkpfSkKLSAgICAgICAgYnV0dG9ucy5hcHBlbmQoYikKLSAgICAgICAgaWYgaSA9PSBkZWZhdWx0OgotICAgICAgICAgICAgYmQgPSBGcmFtZShib3QsIHsncmVsaWVmJzogJ3N1bmtlbicsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdsZWZ0JywgJ2V4cGFuZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzJtJ319KQotICAgICAgICAgICAgYi5saWZ0KCkKLSAgICAgICAgICAgIGIucGFjayAoeydpbic6IGJkLCAnc2lkZSc6ICdsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzJtJywgJ3BhZHknOiAnMm0nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR4JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiLnBhY2sgKHsnc2lkZSc6ICdsZWZ0JywgJ2V4cGFuZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAncGFkeCc6ICczbScsICdwYWR5JzogJzNtJywKLSAgICAgICAgICAgICAgICAgICAgICdpcGFkeSc6ICcybScsICdpcGFkeSc6ICcxbSd9KQotICAgICAgICBpID0gaSsxCi0KLSAgICAjIDQuIFNldCB1cCBhIGJpbmRpbmcgZm9yIDxSZXR1cm4+LCBpZiB0aGVyZSdzIGEgZGVmYXVsdCwKLSAgICAjIHNldCBhIGdyYWIsIGFuZCBjbGFpbSB0aGUgZm9jdXMgdG9vLgotCi0gICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgIHcuYmluZCgnPFJldHVybj4nLCBsYW1iZGEgYXJnLCB0b3A9dG9wOiB0b3Auc2V0dmFyKCdidXR0b24nLCAwKSkKLSAgICAgICAgZmllbGQuYmluZCgnPFJldHVybj4nLCBsYW1iZGEgYXJnLCB0b3A9dG9wOiB0b3Auc2V0dmFyKCdidXR0b24nLCAwKSkKLSAgICBlbGlmIGRlZmF1bHQgPj0gMDoKLSAgICAgICAgdy5iaW5kKCc8UmV0dXJuPicsCi0gICAgICAgICAgICAgICBsYW1iZGEgZSwgYj1idXR0b25zW2RlZmF1bHRdLCBpPWRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAoYi5mbGFzaCgpLAotICAgICAgICAgICAgICAgIGIuc2V0dmFyKCdidXR0b24nLCBpKSkpCi0gICAgICAgIGZpZWxkLmJpbmQoJzxSZXR1cm4+JywKLSAgICAgICAgICAgICAgIGxhbWJkYSBlLCBiPWJ1dHRvbnNbZGVmYXVsdF0sIGk9ZGVmYXVsdDoKLSAgICAgICAgICAgICAgIChiLmZsYXNoKCksCi0gICAgICAgICAgICAgICAgYi5zZXR2YXIoJ2J1dHRvbicsIGkpKSkKLQotICAgIG9sZEZvY3VzID0gdy50ay5jYWxsKCdmb2N1cycpICMgWFhYCi0gICAgdy5ncmFiX3NldCgpCi0gICAgZmllbGQuZm9jdXMoKQotCi0gICAgIyA1LiBXYWl0IGZvciB0aGUgdXNlciB0byByZXNwb25kLCB0aGVuIHJlc3RvcmUgdGhlIGZvY3VzCi0gICAgIyBhbmQgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgYnV0dG9uLgotCi0gICAgdy53YWl0dmFyKCdidXR0b24nKQotICAgIHYgPSBmaWVsZC5nZXQoKQotICAgIHcuZGVzdHJveSgpCi0gICAgdy50ay5jYWxsKCdmb2N1cycsIG9sZEZvY3VzKSAjIFhYWAotICAgIGlmIGFyZ3M6Ci0gICAgICAgIHJldHVybiB2LCB3LmdldGludCh3LmdldHZhcignYnV0dG9uJykpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHYKLQotZGVmIG1lc3NhZ2Uoc3RyKToKLSAgICBpID0gZGlhbG9nKG1haW5XaWRnZXQsICdNZXNzYWdlJywgc3RyLCAnJywgMCwgJ09LJykKLQotZGVmIGFza3luKHN0cik6Ci0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LCAnUXVlc3Rpb24nLCBzdHIsICcnLCAwLCAnTm8nLCAnWWVzJykKLSAgICByZXR1cm4gaQotCi1kZWYgYXNreW5jKHN0cik6Ci0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LCAnUXVlc3Rpb24nLCBzdHIsICcnLCAwLCAnQ2FuY2VsJywgJ05vJywgJ1llcycpCi0gICAgcmV0dXJuIGktMQotCi1kZWYgYXNrc3RyKHN0cik6Ci0gICAgaSA9IHN0cmRpYWxvZyhtYWluV2lkZ2V0LCAnUXVlc3Rpb24nLCBzdHIsICcnLCAwKQotICAgIHJldHVybiBpCi0KLWRlZiBhc2tmaWxlKHN0cik6ICAgICAgICMgWFhYWCBGb3Igbm93Li4uCi0gICAgaSA9IHN0cmRpYWxvZyhtYWluV2lkZ2V0LCAnUXVlc3Rpb24nLCBzdHIsICcnLCAwKQotICAgIHJldHVybiBpCi0KLSMgVGhlIHJlc3QgaXMgdGhlIHRlc3QgcHJvZ3JhbS4KLQotZGVmIF9nbygpOgotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwKLSAgICAgICAgICAgICAgICdOb3QgUmVzcG9uZGluZycsCi0gICAgICAgICAgICAgICAiVGhlIGZpbGUgc2VydmVyIGlzbid0IHJlc3BvbmRpbmcgcmlnaHQgbm93OyAiCi0gICAgICAgICAgICAgICAiSSdsbCBrZWVwIHRyeWluZy4iLAotICAgICAgICAgICAgICAgJycsCi0gICAgICAgICAgICAgICAtMSwKLSAgICAgICAgICAgICAgICdPSycpCi0gICAgcHJpbnQgJ3ByZXNzZWQgYnV0dG9uJywgaQotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwKLSAgICAgICAgICAgICAgICdGaWxlIE1vZGlmaWVkJywKLSAgICAgICAgICAgICAgICdGaWxlICJ0Y2wuaCIgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgJwotICAgICAgICAgICAgICAgJ3RoZSBsYXN0IHRpbWUgaXQgd2FzIHNhdmVkLiAnCi0gICAgICAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2F2ZSBpdCBiZWZvcmUgZXhpdGluZyB0aGUgYXBwbGljYXRpb24/JywKLSAgICAgICAgICAgICAgICd3YXJuaW5nJywKLSAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAnU2F2ZSBGaWxlJywKLSAgICAgICAgICAgICAgICdEaXNjYXJkIENoYW5nZXMnLAotICAgICAgICAgICAgICAgJ1JldHVybiBUbyBFZGl0b3InKQotICAgIHByaW50ICdwcmVzc2VkIGJ1dHRvbicsIGkKLSAgICBwcmludCBtZXNzYWdlKCdUZXN0IG9mIG1lc3NhZ2UnKQotICAgIHByaW50IGFza3luKCdUZXN0IG9mIHllcy9ubycpCi0gICAgcHJpbnQgYXNreW5jKCdUZXN0IG9mIHllcy9uby9jYW5jZWwnKQotICAgIHByaW50IGFza3N0cignVHlwZSBhIHN0cmluZzonKQotICAgIHByaW50IHN0cmRpYWxvZyhtYWluV2lkZ2V0LCAnUXVlc3Rpb24nLCAnQW5vdGhlciBzdHJpbmc6JywgJycsCi0gICAgICAgICAgICAgICAgICAwLCAnU2F2ZScsICdTYXZlIGFzIHRleHQnKQotCi1kZWYgX3Rlc3QoKToKLSAgICBnbG9iYWwgbWFpbldpZGdldAotICAgIG1haW5XaWRnZXQgPSBGcmFtZSgpCi0gICAgUGFjay5jb25maWcobWFpbldpZGdldCkKLSAgICBzdGFydCA9IEJ1dHRvbihtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgICAgIHsndGV4dCc6ICdQcmVzcyBIZXJlIFRvIFN0YXJ0JywgJ2NvbW1hbmQnOiBfZ299KQotICAgIHN0YXJ0LnBhY2soKQotICAgIGVuZGl0ID0gQnV0dG9uKG1haW5XaWRnZXQsCi0gICAgICAgICAgICAgICAgICAgeyd0ZXh0JzogJ0V4aXQnLAotICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6ICdleGl0JywKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydmaWxsJyA6ICdib3RoJ319KQotICAgIG1haW5XaWRnZXQubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9nZW5tb2R1bGUucHkgYi9Ub29scy9tb2R1bGF0b3IvZ2VubW9kdWxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYTMwNjg0Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9nZW5tb2R1bGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIwotIyBHZW5tb2R1bGUgLSBBIHB5dGhvbiBwcm9ncmFtIHRvIGhlbHAgeW91IGJ1aWxkICh0ZW1wbGF0ZSkgbW9kdWxlcy4KLSMKLSMgVXNhZ2U6Ci0jCi0jIG8gPSBnZW5tb2R1bGUub2JqZWN0KCkKLSMgby5uYW1lID0gJ2R3YXJ2ZSBvYmplY3QnCi0jIG8uYWJicmV2ID0gJ2R3JwotIyBvLmZ1bmNsaXN0ID0gWyduZXcnLCAnZGVhbGxvYycsICdnZXRhdHRyJywgJ3NldGF0dHInXQotIyBvLm1ldGhvZGxpc3QgPSBbJ2RpZyddCi0jCi0jIG0gPSBnZW5tb2R1bGUubW9kdWxlKCkKLSMgbS5uYW1lID0gJ2JlaW5ncycKLSMgbS5hYmJyZXYgPSAnYmUnCi0jIG0ubWV0aG9kbGlzdCA9IFsnbmV3ZHdhcnZlJ10KLSMgbS5vYmplY3RzID0gW29dCi0jCi0jIGdlbm1vZHVsZS53cml0ZShzeXMuc3Rkb3V0LCBtKQotIwotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgdmFyc3Vic3QKLQotZXJyb3IgPSAnZ2VubW9kdWxlLmVycm9yJwotCi0jCi0jIE5hbWVzIG9mIGZ1bmN0aW9ucyBpbiB0aGUgb2JqZWN0LWRlc2NyaXB0aW9uIHN0cnVjdC4KLSMKLUZVTkNMSVNUID0gWyduZXcnLCAndHBfZGVhbGxvYycsICd0cF9wcmludCcsICd0cF9nZXRhdHRyJywgJ3RwX3NldGF0dHInLAotICAgICAgICAgICAgJ3RwX2NvbXBhcmUnLCAndHBfcmVwcicsICd0cF9oYXNoJywgJ3RwX2NhbGwnLCAndHBfc3RyJ10KLVRZUEVMSVNUID0gWyd0cF9hc19udW1iZXInLCAndHBfYXNfc2VxdWVuY2UnLCAndHBfYXNfbWFwcGluZycsICdzdHJ1Y3R1cmUnXQotCi0jCi0jIHdyaXRlciBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBvYmplY3QgYW5kIG1vZHVsZSBjbGFzc2VzCi0jIGl0IGNvbnRhaW5zIGNvZGUgY29tbW9uIHRvIGJvdGguCi0jCi1jbGFzcyB3cml0ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9zdWJzdCA9IE5vbmUKLQotICAgIGRlZiBtYWtlc3Vic3Qoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9zdWJzdDoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9fZGljdF9fLmhhc19rZXkoJ2FiYnJldicpOgotICAgICAgICAgICAgICAgIHNlbGYuYWJicmV2ID0gc2VsZi5uYW1lCi0gICAgICAgICAgICBzZWxmLkFiYnJldiA9IHNlbGYuYWJicmV2WzBdLnVwcGVyKCkrc2VsZi5hYmJyZXZbMTpdCi0gICAgICAgICAgICBzdWJzdCA9IHZhcnN1YnN0LlZhcnN1YnN0KHNlbGYuX19kaWN0X18pCi0gICAgICAgICAgICBzdWJzdC51c2VpbmRlbnQoMSkKLSAgICAgICAgICAgIHNlbGYuX3N1YnN0ID0gc3Vic3Quc3Vic3QKLQotICAgIGRlZiBhZGRjb2RlKHNlbGYsIG5hbWUsIGZwKToKLSAgICAgICAgaWZwID0gc2VsZi5vcGVudGVtcGxhdGUobmFtZSkKLSAgICAgICAgc2VsZi5tYWtlc3Vic3QoKQotICAgICAgICBkID0gaWZwLnJlYWQoKQotICAgICAgICBkID0gc2VsZi5fc3Vic3QoZCkKLSAgICAgICAgZnAud3JpdGUoZCkKLQotICAgIGRlZiBvcGVudGVtcGxhdGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZvciBwIGluIHN5cy5wYXRoOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocCwgbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlbihmbiwgJ3InKQotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocCwgJ1RlbXBsYXRlcycpCi0gICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihmbiwgbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlbihmbiwgJ3InKQotICAgICAgICByYWlzZSBlcnJvciwgJ1RlbXBsYXRlICcrbmFtZSsnIG5vdCBmb3VuZCBmb3IgJytzZWxmLl90eXBlKycgJysgXAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lCi0KLWNsYXNzIG1vZHVsZSh3cml0ZXIpOgotICAgIF90eXBlID0gJ21vZHVsZScKLQotICAgIGRlZiB3cml0ZWNvZGUoc2VsZiwgZnApOgotICAgICAgICBzZWxmLmFkZGNvZGUoJ2NvcHlyaWdodCcsIGZwKQotICAgICAgICBzZWxmLmFkZGNvZGUoJ21vZHVsZV9oZWFkJywgZnApCi0gICAgICAgIGZvciBvIGluIHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgIG8ud3JpdGVoZWFkKGZwKQotICAgICAgICBmb3IgbyBpbiBzZWxmLm9iamVjdHM6Ci0gICAgICAgICAgICBvLndyaXRlYm9keShmcCkKLSAgICAgICAgbmV3X21sID0gJycKLSAgICAgICAgZm9yIGZuIGluIHNlbGYubWV0aG9kbGlzdDoKLSAgICAgICAgICAgIHNlbGYubWV0aG9kID0gZm4KLSAgICAgICAgICAgIHNlbGYuYWRkY29kZSgnbW9kdWxlX21ldGhvZCcsIGZwKQotICAgICAgICAgICAgbmV3X21sID0gbmV3X21sICsgKAotICAgICAgICAgICAgICAgICAgICAgICd7IiVzIixcdChQeUNGdW5jdGlvbiklc18lcyxcdE1FVEhfVkFSQVJHUyxcdCVzXyVzX19kb2NfX30sXG4nCi0gICAgICAgICAgICAgICAgICAgICAgJShmbiwgc2VsZi5hYmJyZXYsIGZuLCBzZWxmLmFiYnJldiwgZm4pKQotICAgICAgICBzZWxmLm1ldGhvZGxpc3QgPSBuZXdfbWwKLSAgICAgICAgc2VsZi5hZGRjb2RlKCdtb2R1bGVfdGFpbCcsIGZwKQotCi1jbGFzcyBvYmplY3Qod3JpdGVyKToKLSAgICBfdHlwZSA9ICdvYmplY3QnCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnR5cGVsaXN0ID0gW10KLSAgICAgICAgc2VsZi5tZXRob2RsaXN0ID0gW10KLSAgICAgICAgc2VsZi5mdW5jbGlzdCA9IFsnbmV3J10KLSAgICAgICAgd3JpdGVyLl9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgd3JpdGVjb2RlKHNlbGYsIGZwKToKLSAgICAgICAgc2VsZi5hZGRjb2RlKCdjb3B5cmlnaHQnLCBmcCkKLSAgICAgICAgc2VsZi53cml0ZWhlYWQoZnApCi0gICAgICAgIHNlbGYud3JpdGVib2R5KGZwKQotCi0gICAgZGVmIHdyaXRlaGVhZChzZWxmLCBmcCk6Ci0gICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0X2hlYWQnLCBmcCkKLQotICAgIGRlZiB3cml0ZWJvZHkoc2VsZiwgZnApOgotICAgICAgICBuZXdfbWwgPSAnJwotICAgICAgICBmb3IgZm4gaW4gc2VsZi5tZXRob2RsaXN0OgotICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBmbgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfbWV0aG9kJywgZnApCi0gICAgICAgICAgICBuZXdfbWwgPSBuZXdfbWwgKyAoCi0gICAgICAgICAgICAgICAgICAgICAgJ3siJXMiLFx0KFB5Q0Z1bmN0aW9uKSVzXyVzLFx0TUVUSF9WQVJBUkdTLFx0JXNfJXNfX2RvY19ffSxcbicKLSAgICAgICAgICAgICAgICAgICAgICAlKGZuLCBzZWxmLmFiYnJldiwgZm4sIHNlbGYuYWJicmV2LCBmbikpCi0gICAgICAgIHNlbGYubWV0aG9kbGlzdCA9IG5ld19tbAotICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF9tbGlzdCcsIGZwKQotCi0gICAgICAgICMgQWRkIGdldGF0dHIgaWYgd2UgaGF2ZSBtZXRob2RzCi0gICAgICAgIGlmIHNlbGYubWV0aG9kbGlzdCBhbmQgbm90ICd0cF9nZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgc2VsZi5mdW5jbGlzdC5pbnNlcnQoMCwgJ3RwX2dldGF0dHInKQotCi0gICAgICAgIGZvciBmbiBpbiBGVU5DTElTVDoKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZm4sICcwJykKLQotICAgICAgICAjCi0gICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBzdHJ1Y3R1cmUtYWNjZXNzIG9iamVjdHM6IHB1dCBnZXRhdHRyIGluIHRoZQotICAgICAgICAjIGxpc3Qgb2YgZnVuY3Rpb25zIGJ1dCBkb24ndCBnZW5lcmF0ZSBjb2RlIGZvciBpdCBkaXJlY3RseSwKLSAgICAgICAgIyB0aGUgY29kZSBpcyBvYnRhaW5lZCBmcm9tIHRoZSBvYmplY3Rfc3RydWN0dXJlIHRlbXBsYXRlLgotICAgICAgICAjIFRoZSBzYW1lIGdvZXMgZm9yIHNldGF0dHIuCi0gICAgICAgICMKLSAgICAgICAgaWYgJ3N0cnVjdHVyZScgaW4gc2VsZi50eXBlbGlzdDoKLSAgICAgICAgICAgIGlmICd0cF9nZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgICAgIHNlbGYuZnVuY2xpc3QucmVtb3ZlKCd0cF9nZXRhdHRyJykKLSAgICAgICAgICAgIGlmICd0cF9zZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgICAgIHNlbGYuZnVuY2xpc3QucmVtb3ZlKCd0cF9zZXRhdHRyJykKLSAgICAgICAgICAgIHNlbGYudHBfZ2V0YXR0ciA9IHNlbGYuYWJicmV2ICsgJ19nZXRhdHRyJwotICAgICAgICAgICAgc2VsZi50cF9zZXRhdHRyID0gc2VsZi5hYmJyZXYgKyAnX3NldGF0dHInCi0gICAgICAgIGZvciBmbiBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfJytmbiwgZnApCi0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGZuLCAnJXNfJXMnJShzZWxmLmFiYnJldiwgZm5bMzpdKSkKLSAgICAgICAgZm9yIHRuIGluIFRZUEVMSVNUOgotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCB0biwgJzAnKQotICAgICAgICBmb3IgdG4gaW4gc2VsZi50eXBlbGlzdDoKLSAgICAgICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0XycrdG4sIGZwKQotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCB0biwgJyYlc18lcyclKHNlbGYuYWJicmV2LCB0blszOl0pKQotICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF90YWlsJywgZnApCi0KLWRlZiB3cml0ZShmcCwgb2JqKToKLSAgICBvYmoud3JpdGVjb2RlKGZwKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG8gPSBvYmplY3QoKQotICAgIG8ubmFtZSA9ICdkd2FydmUgb2JqZWN0JwotICAgIG8uYWJicmV2ID0gJ2R3JwotICAgIG8uZnVuY2xpc3QgPSBbJ25ldycsICd0cF9kZWFsbG9jJ10KLSAgICBvLm1ldGhvZGxpc3QgPSBbJ2RpZyddCi0gICAgbSA9IG1vZHVsZSgpCi0gICAgbS5uYW1lID0gJ2JlaW5ncycKLSAgICBtLmFiYnJldiA9ICdiZScKLSAgICBtLm1ldGhvZGxpc3QgPSBbJ25ld2R3YXJ2ZSddCi0gICAgbS5vYmplY3RzID0gW29dCi0gICAgd3JpdGUoc3lzLnN0ZG91dCwgbSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9tb2R1bGF0b3IucHkgYi9Ub29scy9tb2R1bGF0b3IvbW9kdWxhdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZTA2YmMyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9tb2R1bGF0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBNb2R1bGF0b3IgLSBHZW5lcmF0ZSBza2VsZXRvbiBtb2R1bGVzLgotIwotIyBUaGUgdXNlciBmaWxscyBvdXQgc29tZSBmb3JtcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIG1vZHVsZQotIyBzaG91bGQgc3VwcG9ydCAobWV0aG9kcywgb2JqZWN0cyksIG5hbWVzIG9mIHRoZXNlIHRoaW5ncywgcHJlZml4ZXMgdG8KLSMgdXNlIGZvciBDIGNvZGUsIHdoZXRoZXIgdGhlIG9iamVjdHMgc2hvdWxkIGFsc28gc3VwcG9ydCBhY2Nlc3MgYXMgbnVtYmVycywKLSMgZXRjIGV0YyBldGMuCi0jIFdoZW4gdGhlIHVzZXIgcHJlc3NlcyAnR2VuZXJhdGUgY29kZScgd2UgZ2VuZXJhdGUgYSBjb21wbGV0ZSBza2VsZXRvbgotIyBtb2R1bGUgaW4gQy4KLSMKLSMgQWx0ZXJuYXRpdmVseSwgdGhlIHNlbGVjdGlvbnMgbWFkZSBjYW4gYmUgc2F2ZSB0byBhIHB5dGhvbiBzb3VyY2VmaWxlIGFuZAotIyB0aGlzIHNvdXJjZWZpbGUgY2FuIGJlIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIChyZXN1bHRpbmcgaW4gdGhlIHNhbWUKLSMgc2tlbGV0b24gQyBjb2RlKS4KLSMKLSMgSmFjayBKYW5zZW4sIENXSSwgT2N0b2JlciAxOTk0LgotIwotCi1pbXBvcnQgc3lzLCBvcwotaWYgb3MubmFtZSA8PiAnbWFjJzoKLSAgICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0hPTUUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvcHl0aG9uL1Rvb2xzL21vZHVsYXRvcicpKQotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLWZyb20gVGtleHRyYSBpbXBvcnQgKgotZnJvbSBTY3JvbGxlZExpc3Rib3ggaW1wb3J0IFNjcm9sbGVkTGlzdGJveAotaW1wb3J0IHN5cwotaW1wb3J0IGdlbm1vZHVsZQotaW1wb3J0IHN0cmluZwotCi1vb3BzID0gJ29vcHMnCi0KLUlERU5UU1RBUlRDSEFSUyA9IHN0cmluZy5sZXR0ZXJzICsgJ18nCi1JREVOVENIQVJTID0gc3RyaW5nLmxldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgJ18nCi0KLSMgQ2hlY2sgdGhhdCBzdHJpbmcgaXMgYSBsZWdhbCBDIGlkZW50aWZpZXIKLWRlZiBjaGVja2lkKHN0cik6Ci0gICAgaWYgbm90IHN0cjogcmV0dXJuIDAKLSAgICBpZiBub3Qgc3RyWzBdIGluIElERU5UU1RBUlRDSEFSUzoKLSAgICAgICAgcmV0dXJuIDAKLSAgICBmb3IgYyBpbiBzdHJbMTpdOgotICAgICAgICBpZiBub3QgYyBpbiBJREVOVENIQVJTOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICByZXR1cm4gMQotCi1kZWYgZ2V0bGlzdGxpc3QobGlzdCk6Ci0gICAgcnYgPSBbXQotICAgIG4gPSBsaXN0LnNpemUoKQotICAgIGZvciBpIGluIHJhbmdlKG4pOgotICAgICAgICBydi5hcHBlbmQobGlzdC5nZXQoaSkpCi0gICAgcmV0dXJuIHJ2Ci0KLWNsYXNzIFVJOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5tYWluID0gRnJhbWUoKQotICAgICAgICBzZWxmLm1haW4ucGFjaygpCi0gICAgICAgIHNlbGYubWFpbi5tYXN0ZXIudGl0bGUoJ01vZHVsYXRvcjogTW9kdWxlIHZpZXcnKQotICAgICAgICBzZWxmLmNtZGZyYW1lID0gRnJhbWUoc2VsZi5tYWluLCB7J3JlbGllZic6J3JhaXNlZCcsICdiZCc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5vYmpmcmFtZSA9IEZyYW1lKHNlbGYubWFpbiwge1BhY2s6eydzaWRlJzondG9wJywgJ2ZpbGwnOid4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnOjF9fSkKLQotCi0gICAgICAgIHNlbGYuY2hlY2tfYnV0dG9uID0gQnV0dG9uKHNlbGYuY21kZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXh0JzonQ2hlY2snLCAnY29tbWFuZCc6c2VsZi5jYl9jaGVjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gQnV0dG9uKHNlbGYuY21kZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXh0JzonU2F2ZS4uLicsICdjb21tYW5kJzpzZWxmLmNiX3NhdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5jb2RlX2J1dHRvbiA9IEJ1dHRvbihzZWxmLmNtZGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndGV4dCc6J0dlbmVyYXRlIGNvZGUuLi4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9nZW5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYucXVpdF9idXR0b24gPSBCdXR0b24oc2VsZi5jbWRmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RleHQnOidRdWl0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOnNlbGYuY2JfcXVpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidyaWdodCcsICdwYWR4JzonMC41bSd9fSkKLQotICAgICAgICBzZWxmLm1vZHVsZSA9IFVJX21vZHVsZShzZWxmKQotICAgICAgICBzZWxmLm9iamVjdHMgPSBbXQotICAgICAgICBzZWxmLm1vZGlmaWVkID0gMAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5tYWluLm1haW5sb29wKCkKLQotICAgIGRlZiBjYl9xdWl0KHNlbGYsICphcmdzKToKLSAgICAgICAgaWYgc2VsZi5tb2RpZmllZDoKLSAgICAgICAgICAgIGlmIG5vdCBhc2t5bignWW91IGhhdmUgbm90IHNhdmVkXG5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcXVpdD8nKToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc3lzLmV4aXQoMCkKLQotICAgIGRlZiBjYl9jaGVjayhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLnN5bmNocm9uaXplKCkKLSAgICAgICAgICAgIGZvciBvIGluIHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgICAgICBvLnN5bmNocm9uaXplKCkKLSAgICAgICAgZXhjZXB0IG9vcHM6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgY2Jfc2F2ZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHB5Y29kZSA9IHNlbGYubW9kdWxlLmdlbmNvZGUoJ20nLCBzZWxmLm9iamVjdHMpCi0gICAgICAgIGV4Y2VwdCBvb3BzOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZm4gPSBhc2tmaWxlKCdQeXRob24gZmlsZSBuYW1lOiAnKQotICAgICAgICBpZiBub3QgZm46Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmcCA9IG9wZW4oZm4sICd3JykKLQotICAgICAgICBmcC53cml0ZShweWNvZGUpCi0gICAgICAgIGZwLmNsb3NlKCkKLQotICAgIGRlZiBjYl9nZW5jb2RlKHNlbGYsICphcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHljb2RlID0gc2VsZi5tb2R1bGUuZ2VuY29kZSgnbScsIHNlbGYub2JqZWN0cykKLSAgICAgICAgZXhjZXB0IG9vcHM6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZm4gPSBhc2tmaWxlKCdDIGZpbGUgbmFtZTogJykKLSAgICAgICAgaWYgbm90IGZuOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZnAgPSBvcGVuKGZuLCAndycpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYyBweWNvZGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgbWVzc2FnZSgnQW4gZXJyb3Igb2NjdXJyZWQ6LSknKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGdlbm1vZHVsZS53cml0ZShmcCwgbSkKLSAgICAgICAgZnAuY2xvc2UoKQotCi1jbGFzcyBVSV9tb2R1bGU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6Ci0gICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50Ci0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShwYXJlbnQub2JqZnJhbWUsIHsncmVsaWVmJzoncmFpc2VkJywgJ2JkJzonMC4ybScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3RvcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjEgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMiA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYzID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjQgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLQotICAgICAgICBzZWxmLmwxID0gTGFiZWwoc2VsZi5mMSwgeyd0ZXh0JzonTW9kdWxlOicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5uYW1lX2VudHJ5ID0gRW50cnkoc2VsZi5mMSwgeydyZWxpZWYnOidzdW5rZW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJywgJ2V4cGFuZCc6MX19KQotICAgICAgICBzZWxmLmwyID0gTGFiZWwoc2VsZi5mMSwgeyd0ZXh0JzonQWJicmV2OicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5hYmJyZXZfZW50cnkgPSBFbnRyeShzZWxmLmYxLCB7J3JlbGllZic6J3N1bmtlbicsICd3aWR0aCc6NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLQotICAgICAgICBzZWxmLmwzID0gTGFiZWwoc2VsZi5mMiwgeyd0ZXh0JzonTWV0aG9kczonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2xpc3QgPSBTY3JvbGxlZExpc3Rib3goc2VsZi5mMiwgeydyZWxpZWYnOidzdW5rZW4nLCdiZCc6MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ2V4cGFuZCc6MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJywgJ2ZpbGwnOidib3RoJ319KQotCi0gICAgICAgIHNlbGYubDQgPSBMYWJlbChzZWxmLmYzLCB7J3RleHQnOidBZGQgbWV0aG9kOicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkgPSBFbnRyeShzZWxmLmYzLCB7J3JlbGllZic6J3N1bmtlbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bScsICdleHBhbmQnOjF9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkuYmluZCgnPFJldHVybj4nLCBzZWxmLmNiX21ldGhvZCkKLSAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uID0gQnV0dG9uKHNlbGYuZjMsIHsndGV4dCc6J0RlbGV0ZSBtZXRob2QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzpzZWxmLmNiX2RlbG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLQotICAgICAgICBzZWxmLm5ld29ial9idXR0b24gPSBCdXR0b24oc2VsZi5mNCwgeyd0ZXh0JzonbmV3IG9iamVjdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOnNlbGYuY2JfbmV3b2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotCi0gICAgZGVmIGNiX2RlbG1ldGhvZChzZWxmLCAqYXJncyk6Ci0gICAgICAgIGxpc3QgPSBzZWxmLm1ldGhvZF9saXN0LmN1cnNlbGVjdGlvbigpCi0gICAgICAgIGZvciBpIGluIGxpc3Q6Ci0gICAgICAgICAgICBzZWxmLm1ldGhvZF9saXN0LmRlbGV0ZShpKQotCi0gICAgZGVmIGNiX25ld29iaihzZWxmLCAqYXJnKToKLSAgICAgICAgc2VsZi5wYXJlbnQub2JqZWN0cy5hcHBlbmQoVUlfb2JqZWN0KHNlbGYucGFyZW50KSkKLQotICAgIGRlZiBjYl9tZXRob2Qoc2VsZiwgKmFyZyk6Ci0gICAgICAgIG5hbWUgPSBzZWxmLm1ldGhvZF9lbnRyeS5nZXQoKQotICAgICAgICBpZiBub3QgbmFtZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeS5kZWxldGUoJzAnLCAnZW5kJykKLSAgICAgICAgc2VsZi5tZXRob2RfbGlzdC5pbnNlcnQoJ2VuZCcsIG5hbWUpCi0KLSAgICBkZWYgc3luY2hyb25pemUoc2VsZik6Ci0gICAgICAgIG4gPSBzZWxmLm5hbWVfZW50cnkuZ2V0KCkKLSAgICAgICAgaWYgbm90IG46Ci0gICAgICAgICAgICBtZXNzYWdlKCdNb2R1bGUgbmFtZSBub3Qgc2V0JykKLSAgICAgICAgICAgIHJhaXNlIG9vcHMKLSAgICAgICAgaWYgbm90IGNoZWNraWQobik6Ci0gICAgICAgICAgICBtZXNzYWdlKCdNb2R1bGUgbmFtZSBub3QgYW4gaWRlbnRpZmllcjpcbicrbikKLSAgICAgICAgICAgIHJhaXNlIG9vcHMKLSAgICAgICAgaWYgbm90IHNlbGYuYWJicmV2X2VudHJ5LmdldCgpOgotICAgICAgICAgICAgc2VsZi5hYmJyZXZfZW50cnkuaW5zZXJ0KCdlbmQnLCBuKQotICAgICAgICBtID0gZ2V0bGlzdGxpc3Qoc2VsZi5tZXRob2RfbGlzdCkKLSAgICAgICAgZm9yIG4gaW4gbToKLSAgICAgICAgICAgIGlmIG5vdCBjaGVja2lkKG4pOgotICAgICAgICAgICAgICAgIG1lc3NhZ2UoJ01ldGhvZCBuYW1lIG5vdCBhbiBpZGVudGlmaWVyOlxuJytuKQotICAgICAgICAgICAgICAgIHJhaXNlIG9vcHMKLQotICAgIGRlZiBnZW5jb2RlKHNlbGYsIG5hbWUsIG9iamVjdHMpOgotICAgICAgICBydiA9ICcnCi0gICAgICAgIHNlbGYuc3luY2hyb25pemUoKQotICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgotICAgICAgICAgICAgby5zeW5jaHJvbml6ZSgpCi0gICAgICAgIG9uYW1lcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihvYmplY3RzKSk6Ci0gICAgICAgICAgICBvbmFtZSA9ICdvJWQnICUgKGkrMSkKLSAgICAgICAgICAgIHJ2ID0gcnYgKyBvYmplY3RzW2ldLmdlbmNvZGUob25hbWUpCi0gICAgICAgICAgICBvbmFtZXMuYXBwZW5kKG9uYW1lKQotICAgICAgICBydiA9IHJ2ICsgJyVzID0gZ2VubW9kdWxlLm1vZHVsZSgpXG4nICUgKG5hbWUsKQotICAgICAgICBydiA9IHJ2ICsgJyVzLm5hbWUgPSAlclxuJyAlIChuYW1lLCBzZWxmLm5hbWVfZW50cnkuZ2V0KCkpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMuYWJicmV2ID0gJXJcbicgJSAobmFtZSwgc2VsZi5hYmJyZXZfZW50cnkuZ2V0KCkpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMubWV0aG9kbGlzdCA9ICVyXG4nICUgKG5hbWUsIGdldGxpc3RsaXN0KHNlbGYubWV0aG9kX2xpc3QpKQotICAgICAgICBydiA9IHJ2ICsgJyVzLm9iamVjdHMgPSBbJXNdXG4nICUgKG5hbWUsICcsJy5qb2luKG9uYW1lcykpCi0gICAgICAgIHJ2ID0gcnYgKyAnXG4nCi0gICAgICAgIHJldHVybiBydgotCi1vYmplY3RfbnVtYmVyID0gMAotCi1jbGFzcyBVSV9vYmplY3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6Ci0gICAgICAgIGdsb2JhbCBvYmplY3RfbnVtYmVyCi0KLSAgICAgICAgb2JqZWN0X251bWJlciA9IG9iamVjdF9udW1iZXIgKyAxCi0gICAgICAgIHNlbGYubnVtID0gb2JqZWN0X251bWJlcgotICAgICAgICBzZWxmLnZwcmVmID0gJ28lcl8nICUgc2VsZi5udW0KLSAgICAgICAgc2VsZi5mcmFtZSA9IFRvcGxldmVsKHBhcmVudC5vYmpmcmFtZSkKLSMgICAgICAgc2VsZi5mcmFtZS5wYWNrKCkKLSAgICAgICAgc2VsZi5mcmFtZS50aXRsZSgnTW9kdWxhdG9yOiBvYmplY3QgdmlldycpCi0jICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShwYXJlbnQub2JqZnJhbWUsIHsncmVsaWVmJzoncmFpc2VkJywgJ2JkJzonMC4ybScsCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3RvcCcsCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjEgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMiA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYzID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjQgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLQotCi0gICAgICAgIHNlbGYubDEgPSBMYWJlbChzZWxmLmYxLCB7J3RleHQnOidPYmplY3Q6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm5hbWVfZW50cnkgPSBFbnRyeShzZWxmLmYxLCB7J3JlbGllZic6J3N1bmtlbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nLCAnZXhwYW5kJzoxfX0pCi0gICAgICAgIHNlbGYubDIgPSBMYWJlbChzZWxmLmYxLCB7J3RleHQnOidBYmJyZXY6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLmFiYnJldl9lbnRyeSA9IEVudHJ5KHNlbGYuZjEsIHsncmVsaWVmJzonc3Vua2VuJywgJ3dpZHRoJzo1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotCi0gICAgICAgIHNlbGYubDMgPSBMYWJlbChzZWxmLmYyLCB7J3RleHQnOidNZXRob2RzOicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfbGlzdCA9IFNjcm9sbGVkTGlzdGJveChzZWxmLmYyLCB7J3JlbGllZic6J3N1bmtlbicsJ2JkJzoyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAnZXhwYW5kJzoxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nLCAnZmlsbCc6J2JvdGgnfX0pCi0KLSAgICAgICAgc2VsZi5sNCA9IExhYmVsKHNlbGYuZjMsIHsndGV4dCc6J0FkZCBtZXRob2Q6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeSA9IEVudHJ5KHNlbGYuZjMsIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJywgJ2V4cGFuZCc6MX19KQotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeS5iaW5kKCc8UmV0dXJuPicsIHNlbGYuY2JfbWV0aG9kKQotICAgICAgICBzZWxmLmRlbGV0ZV9idXR0b24gPSBCdXR0b24oc2VsZi5mMywgeyd0ZXh0JzonRGVsZXRlIG1ldGhvZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOnNlbGYuY2JfZGVsbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotCi0KLSAgICAgICAgc2VsZi5sNSA9IExhYmVsKHNlbGYuZjQsIHsndGV4dCc6J2Z1bmN0aW9uczonLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLmY1ID0gRnJhbWUoc2VsZi5mNCwge1BhY2s6eydzaWRlJzonbGVmdCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOidib3RoJ319KQotICAgICAgICBzZWxmLmw2ID0gTGFiZWwoc2VsZi5mNCwgeyd0ZXh0JzonVHlwZXM6JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYuZjYgPSBGcmFtZShzZWxmLmY0LCB7UGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZnVuY3MgPSB7fQotICAgICAgICBmb3IgaSBpbiBnZW5tb2R1bGUuRlVOQ0xJU1Q6Ci0gICAgICAgICAgICB2bmFtZSA9IHNlbGYudnByZWYraQotICAgICAgICAgICAgc2VsZi5mNS5zZXR2YXIodm5hbWUsIDApCi0gICAgICAgICAgICBiID0gQ2hlY2tidXR0b24oc2VsZi5mNSwgeyd2YXJpYWJsZSc6dm5hbWUsICd0ZXh0JzppLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmNob3InOid3JywnZXhwYW5kJzoxfX0pCi0gICAgICAgICAgICBzZWxmLmZ1bmNzW2ldID0gYgotICAgICAgICBzZWxmLmY1LnNldHZhcihzZWxmLnZwcmVmKyduZXcnLCAxKQotCi0gICAgICAgIHNlbGYudHlwZXMgPSB7fQotICAgICAgICBmb3IgaSBpbiBnZW5tb2R1bGUuVFlQRUxJU1Q6Ci0gICAgICAgICAgICB2bmFtZSA9IHNlbGYudnByZWYgKyBpCi0gICAgICAgICAgICBzZWxmLmY2LnNldHZhcih2bmFtZSwgMCkKLSAgICAgICAgICAgIGIgPSBDaGVja2J1dHRvbihzZWxmLmY2LCB7J3ZhcmlhYmxlJzp2bmFtZSwgJ3RleHQnOmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuY2hvcic6J3cnfX0pCi0gICAgICAgICAgICBzZWxmLnR5cGVzW2ldID0gYgotCi0gICAgZGVmIGNiX21ldGhvZChzZWxmLCAqYXJnKToKLSAgICAgICAgbmFtZSA9IHNlbGYubWV0aG9kX2VudHJ5LmdldCgpCi0gICAgICAgIGlmIG5vdCBuYW1lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5LmRlbGV0ZSgnMCcsICdlbmQnKQotICAgICAgICBzZWxmLm1ldGhvZF9saXN0Lmluc2VydCgnZW5kJywgbmFtZSkKLQotICAgIGRlZiBjYl9kZWxtZXRob2Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBsaXN0ID0gc2VsZi5tZXRob2RfbGlzdC5jdXJzZWxlY3Rpb24oKQotICAgICAgICBmb3IgaSBpbiBsaXN0OgotICAgICAgICAgICAgc2VsZi5tZXRob2RfbGlzdC5kZWxldGUoaSkKLQotICAgIGRlZiBzeW5jaHJvbml6ZShzZWxmKToKLSAgICAgICAgbiA9IHNlbGYubmFtZV9lbnRyeS5nZXQoKQotICAgICAgICBpZiBub3QgbjoKLSAgICAgICAgICAgIG1lc3NhZ2UoJ09iamVjdCBuYW1lIG5vdCBzZXQnKQotICAgICAgICAgICAgcmFpc2Ugb29wcwotICAgICAgICBpZiBub3Qgc2VsZi5hYmJyZXZfZW50cnkuZ2V0KCk6Ci0gICAgICAgICAgICBzZWxmLmFiYnJldl9lbnRyeS5pbnNlcnQoJ2VuZCcsIG4pCi0gICAgICAgIG4gPSBzZWxmLmFiYnJldl9lbnRyeS5nZXQoKQotICAgICAgICBpZiBub3QgY2hlY2tpZChuKToKLSAgICAgICAgICAgIG1lc3NhZ2UoJ0FiYnJldmlhdGlvbiBub3QgYW4gaWRlbnRpZmllcjpcbicrbikKLSAgICAgICAgICAgIHJhaXNlIG9vcHMKLSAgICAgICAgbSA9IGdldGxpc3RsaXN0KHNlbGYubWV0aG9kX2xpc3QpCi0gICAgICAgIGZvciBuIGluIG06Ci0gICAgICAgICAgICBpZiBub3QgY2hlY2tpZChuKToKLSAgICAgICAgICAgICAgICBtZXNzYWdlKCdNZXRob2QgbmFtZSBub3QgYW4gaWRlbnRpZmllcjpcbicrbikKLSAgICAgICAgICAgICAgICByYWlzZSBvb3BzCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgICBzZWxmLmY1LnNldHZhcihzZWxmLnZwcmVmKyd0cF9nZXRhdHRyJywgMSkKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGdlbmNvZGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJ2ID0gJycKLSAgICAgICAgcnYgPSBydiArICclcyA9IGdlbm1vZHVsZS5vYmplY3QoKVxuJyAlIChuYW1lLCkKLSAgICAgICAgcnYgPSBydiArICclcy5uYW1lID0gJXJcbicgJSAobmFtZSwgc2VsZi5uYW1lX2VudHJ5LmdldCgpKQotICAgICAgICBydiA9IHJ2ICsgJyVzLmFiYnJldiA9ICVyXG4nICUgKG5hbWUsIHNlbGYuYWJicmV2X2VudHJ5LmdldCgpKQotICAgICAgICBydiA9IHJ2ICsgJyVzLm1ldGhvZGxpc3QgPSAlclxuJyAlIChuYW1lLCBnZXRsaXN0bGlzdChzZWxmLm1ldGhvZF9saXN0KSkKLSAgICAgICAgZmwgPSBbXQotICAgICAgICBmb3IgZm4gaW4gZ2VubW9kdWxlLkZVTkNMSVNUOgotICAgICAgICAgICAgdm5hbWUgPSBzZWxmLnZwcmVmICsgZm4KLSAgICAgICAgICAgIGlmIHNlbGYuZjUuZ2V0dmFyKHZuYW1lKSA9PSAnMSc6Ci0gICAgICAgICAgICAgICAgZmwuYXBwZW5kKGZuKQotICAgICAgICBydiA9IHJ2ICsgJyVzLmZ1bmNsaXN0ID0gJXJcbicgJSAobmFtZSwgZmwpCi0KLSAgICAgICAgZmwgPSBbXQotICAgICAgICBmb3IgZm4gaW4gZ2VubW9kdWxlLlRZUEVMSVNUOgotICAgICAgICAgICAgdm5hbWUgPSBzZWxmLnZwcmVmICsgZm4KLSAgICAgICAgICAgIGlmIHNlbGYuZjUuZ2V0dmFyKHZuYW1lKSA9PSAnMSc6Ci0gICAgICAgICAgICAgICAgZmwuYXBwZW5kKGZuKQotCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMudHlwZWxpc3QgPSAlclxuJyAlIChuYW1lLCBmbCkKLQotICAgICAgICBydiA9IHJ2ICsgJ1xuJwotICAgICAgICByZXR1cm4gcnYKLQotCi1kZWYgbWFpbigpOgotICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgotICAgICAgICB1aSA9IFVJKCkKLSAgICAgICAgdWkucnVuKCkKLSAgICBlbGlmIGxlbihzeXMuYXJndikgPT0gMjoKLSAgICAgICAgZnAgPSBvcGVuKHN5cy5hcmd2WzFdKQotICAgICAgICBweWNvZGUgPSBmcC5yZWFkKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYyBweWNvZGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQW4gZXJyb3Igb2NjdXJyZWQ6LSlcbicpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgICAgICAjI2dlbm1vZHVsZS53cml0ZShzeXMuc3Rkb3V0LCBtKQotICAgIGVsc2U6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1VzYWdlOiBtb2R1bGF0b3IgW2ZpbGVdXG4nKQotICAgICAgICBzeXMuZXhpdCgxKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci92YXJzdWJzdC5weSBiL1Rvb2xzL21vZHVsYXRvci92YXJzdWJzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzMzk1MC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvdmFyc3Vic3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0jCi0jIFZhcmlhYmxlIHN1YnN0aXR1dGlvbi4gVmFyaWFibGVzIGFyZSAkZGVsaW1pdGVkJAotIwotaW1wb3J0IHJlCi0KLWVycm9yID0gJ3ZhcnN1YnN0LmVycm9yJwotCi1jbGFzcyBWYXJzdWJzdDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGljdCk6Ci0gICAgICAgIHNlbGYuZGljdCA9IGRpY3QKLSAgICAgICAgc2VsZi5wcm9nID0gcmUuY29tcGlsZSgnXCQoW2EtekEtWjAtOV9dKilcJCcpCi0gICAgICAgIHNlbGYuZG9fdXNlaW5kZW50ID0gMAotCi0gICAgZGVmIHVzZWluZGVudChzZWxmLCBvbm9mZik6Ci0gICAgICAgIHNlbGYuZG9fdXNlaW5kZW50ID0gb25vZmYKLQotICAgIGRlZiBzdWJzdChzZWxmLCBzKToKLSAgICAgICAgcnYgPSAnJwotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbSA9IHNlbGYucHJvZy5zZWFyY2gocykKLSAgICAgICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgICAgIHJldHVybiBydiArIHMKLSAgICAgICAgICAgIHJ2ID0gcnYgKyBzWzptLnN0YXJ0KCldCi0gICAgICAgICAgICBzID0gc1ttLmVuZCgpOl0KLSAgICAgICAgICAgIGlmIG0uZW5kKCkgLSBtLnN0YXJ0KCkgPT0gMjoKLSAgICAgICAgICAgICAgICAjIEVzY2FwZWQgZG9sbGFyCi0gICAgICAgICAgICAgICAgcnYgPSBydiArICckJwotICAgICAgICAgICAgICAgIHMgPSBzWzI6XQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuZGljdC5oYXNfa2V5KG5hbWUpOgotICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yLCAnTm8gc3VjaCB2YXJpYWJsZTogJytuYW1lCi0gICAgICAgICAgICB2YWx1ZSA9IHNlbGYuZGljdFtuYW1lXQotICAgICAgICAgICAgaWYgc2VsZi5kb191c2VpbmRlbnQgYW5kICdcbicgaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9tb2RpbmRlbnQodmFsdWUsIHJ2KQotICAgICAgICAgICAgcnYgPSBydiArIHZhbHVlCi0KLSAgICBkZWYgX21vZGluZGVudChzZWxmLCB2YWx1ZSwgb2xkKToKLSAgICAgICAgbGFzdG5sID0gb2xkLnJmaW5kKCdcbicsIDApICsgMQotICAgICAgICBsYXN0bmwgPSBsZW4ob2xkKSAtIGxhc3RubAotICAgICAgICBzdWIgPSAnXG4nICsgKCcgJypsYXN0bmwpCi0gICAgICAgIHJldHVybiByZS5zdWIoJ1xuJywgc3ViLCB2YWx1ZSkKLQotZGVmIF90ZXN0KCk6Ci0gICAgaW1wb3J0IHN5cwotICAgIGltcG9ydCBvcwotCi0gICAgc3lzLnN0ZGVyci53cml0ZSgnLS0gQ29weWluZyBzdGRpbiB0byBzdGRvdXQgd2l0aCBlbnZpcm9ubWVudCBtYXAgLS1cbicpCi0gICAgYyA9IFZhcnN1YnN0KG9zLmVudmlyb24pCi0gICAgYy51c2VpbmRlbnQoMSkKLSAgICBkID0gc3lzLnN0ZGluLnJlYWQoKQotICAgIHN5cy5zdGRvdXQud3JpdGUoYy5zdWJzdChkKSkKLSAgICBzeXMuZXhpdCgxKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tZXJnZS5weSBiL1Rvb2xzL21zaS9tZXJnZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkZTIwOS4uMDAwMDAwMAotLS0gYS9Ub29scy9tc2kvbWVyZ2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi1pbXBvcnQgbXNpbGliLG9zLHdpbjMyY29tLHRlbXBmaWxlLHN5cwotUENCVUlMRD0iUENCdWlsZCIKLWNlcnRuYW1lID0gTm9uZQotZnJvbSBjb25maWcgaW1wb3J0ICoKLQotV2luNjQgPSAiYW1kNjQiIGluIFBDQlVJTEQKLQotbW9kX2RpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJQcm9ncmFtRmlsZXMiXSwgIkNvbW1vbiBGaWxlcyIsICJNZXJnZSBNb2R1bGVzIikKLW1zaSA9IE5vbmUKLWlmIGxlbihzeXMuYXJndik9PTI6Ci0gICAgbXNpID0gc3lzLmFyZ3ZbMV0KLWlmIFdpbjY0OgotICAgIG1vZHVsZXMgPSBbIk1pY3Jvc29mdF9WQzkwX0NSVF94ODZfeDY0Lm1zbSIsICJwb2xpY3lfOV8wX01pY3Jvc29mdF9WQzkwX0NSVF94ODZfeDY0Lm1zbSJdCi0gICAgaWYgbm90IG1zaTogbXNpID0gInB5dGhvbi0lcy5hbWQ2NC5tc2kiICUgZnVsbF9jdXJyZW50X3ZlcnNpb24KLWVsc2U6Ci0gICAgbW9kdWxlcyA9IFsiTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Ni5tc20iLCJwb2xpY3lfOV8wX01pY3Jvc29mdF9WQzkwX0NSVF94ODYubXNtIl0KLSAgICBpZiBub3QgbXNpOiBtc2kgPSAicHl0aG9uLSVzLm1zaSIgJSBmdWxsX2N1cnJlbnRfdmVyc2lvbgotZm9yIGksIG4gaW4gZW51bWVyYXRlKG1vZHVsZXMpOgotICAgIG1vZHVsZXNbaV0gPSBvcy5wYXRoLmpvaW4obW9kX2RpciwgbikKLQotZGVmIG1lcmdlKG1zaSwgZmVhdHVyZSwgcm9vdGRpciwgbW9kdWxlcyk6Ci0gICAgY2FiX2FuZF9maWxlY291bnQgPSBbXQotICAgICMgU3RlcCAxOiBNZXJnZSBkYXRhYmFzZXMsIGV4dHJhY3QgY2FiZmlsZXMKLSAgICBtID0gbXNpbGliLk1ha2VNZXJnZTIoKQotICAgIG0uT3BlbkxvZygibWVyZ2UubG9nIikKLSAgICBwcmludCAiT3BlbmVkIExvZyIKLSAgICBtLk9wZW5EYXRhYmFzZShtc2kpCi0gICAgcHJpbnQgIk9wZW5lZCBEQiIKLSAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgICAgIHByaW50IG1vZHVsZQotICAgICAgICBtLk9wZW5Nb2R1bGUobW9kdWxlLDApCi0gICAgICAgIHByaW50ICJPcGVuZWQgTW9kdWxlIixtb2R1bGUKLSAgICAgICAgbS5NZXJnZShmZWF0dXJlLCByb290ZGlyKQotICAgICAgICBwcmludCAiRXJyb3JzOiIKLSAgICAgICAgZm9yIGUgaW4gbS5FcnJvcnM6Ci0gICAgICAgICAgICBwcmludCBlLlR5cGUsIGUuTW9kdWxlVGFibGUsIGUuRGF0YWJhc2VUYWJsZQotICAgICAgICAgICAgcHJpbnQgIiAgIE1vZGtleXM6IiwKLSAgICAgICAgICAgIGZvciBzIGluIGUuTW9kdWxlS2V5czogcHJpbnQgcywKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBwcmludCAiICAgREJLZXlzOiIsCi0gICAgICAgICAgICBmb3IgcyBpbiBlLkRhdGFiYXNlS2V5czogcHJpbnQgcywKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgIGNhYm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoc3VmZml4PSIuY2FiIikKLSAgICAgICAgbS5FeHRyYWN0Q0FCKGNhYm5hbWUpCi0gICAgICAgIGNhYl9hbmRfZmlsZWNvdW50LmFwcGVuZCgoY2FibmFtZSwgbGVuKG0uTW9kdWxlRmlsZXMpKSkKLSAgICAgICAgbS5DbG9zZU1vZHVsZSgpCi0gICAgbS5DbG9zZURhdGFiYXNlKFRydWUpCi0gICAgbS5DbG9zZUxvZygpCi0KLSAgICAjIFN0ZXAgMjogQWRkIENBQiBmaWxlcwotICAgIGkgPSBtc2lsaWIuTWFrZUluc3RhbGxlcigpCi0gICAgZGIgPSBpLk9wZW5EYXRhYmFzZShtc2ksIHdpbjMyY29tLmNsaWVudC5jb25zdGFudHMubXNpT3BlbkRhdGFiYXNlTW9kZVRyYW5zYWN0KQotCi0gICAgdiA9IGRiLk9wZW5WaWV3KCJTRUxFQ1QgTGFzdFNlcXVlbmNlIEZST00gTWVkaWEiKQotICAgIHYuRXhlY3V0ZShOb25lKQotICAgIG1heG1lZGlhID0gLTEKLSAgICB3aGlsZSAxOgotICAgICAgICByID0gdi5GZXRjaCgpCi0gICAgICAgIGlmIG5vdCByOiBicmVhawotICAgICAgICBzZXEgPSByLkludGVnZXJEYXRhKDEpCi0gICAgICAgIGlmIHNlcSA+IG1heG1lZGlhOgotICAgICAgICAgICAgbWF4bWVkaWEgPSBzZXEKLSAgICBwcmludCAiU3RhcnQgb2YgTWVkaWEiLCBtYXhtZWRpYQotCi0gICAgZm9yIGNhYm5hbWUsIGNvdW50IGluIGNhYl9hbmRfZmlsZWNvdW50OgotICAgICAgICBzdHJlYW0gPSAibWVyZ2VkJWQiICUgbWF4bWVkaWEKLSAgICAgICAgbXNpbGliLmFkZF9kYXRhKGRiLCAiTWVkaWEiLAotICAgICAgICAgICAgICAgIFsobWF4bWVkaWErMSwgbWF4bWVkaWErY291bnQsIE5vbmUsICIjIitzdHJlYW0sIE5vbmUsIE5vbmUpXSkKLSAgICAgICAgbXNpbGliLmFkZF9zdHJlYW0oZGIsIHN0cmVhbSwgIGNhYm5hbWUpCi0gICAgICAgIG9zLnVubGluayhjYWJuYW1lKQotICAgICAgICBtYXhtZWRpYSArPSBjb3VudAotICAgICMgVGhlIG1lcmdlIG1vZHVsZSBzZXRzIEFMTFVTRVJTIHRvIDEgaW4gdGhlIHByb3BlcnR5IHRhYmxlLiAKLSAgICAjIFRoaXMgaXMgdW5kZXNpcmVkOyBkZWxldGUgdGhhdAotICAgIHYgPSBkYi5PcGVuVmlldygiREVMRVRFIEZST00gUHJvcGVydHkgV0hFUkUgUHJvcGVydHk9J0FMTFVTRVJTJyIpCi0gICAgdi5FeGVjdXRlKE5vbmUpCi0gICAgdi5DbG9zZSgpCi0gICAgZGIuQ29tbWl0KCkKLQotbWVyZ2UobXNpLCAiU2hhcmVkQ1JUIiwgIlRBUkdFVERJUiIsIG1vZHVsZXMpCi0KLSMgY2VydG5hbWUgKGZyb20gY29uZmlnLnB5KSBzaG91bGQgYmUgKGEgc3Vic3RyaW5nIG9mKQotIyB0aGUgY2VydGlmaWNhdGUgc3ViamVjdCwgZS5nLiAiUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24iCi1pZiBjZXJ0bmFtZToKLSAgICBvcy5zeXN0ZW0oJ3NpZ250b29sIHNpZ24gL24gIiVzIiAvdCBodHRwOi8vdGltZXN0YW1wLnZlcmlzaWduLmNvbS9zY3JpcHRzL3RpbWVzdGFtcC5kbGwgJXMnICUgKGNlcnRuYW1lLCBtc2kpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21zaS5weSBiL1Rvb2xzL21zaS9tc2kucHkKaW5kZXggYzVlNjMwYi4uYTFmNjdiOCAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21zaS5weQorKysgYi9Ub29scy9tc2kvbXNpLnB5CkBAIC0xLDEyICsxLDEzIEBACiAjIFB5dGhvbiBNU0kgR2VuZXJhdG9yCiAjIChDKSAyMDAzIE1hcnRpbiB2LiBMb2V3aXMKICMgU2VlICJGT08iIGluIGNvbW1lbnRzIHJlZmVycyB0byBNU0ROIHNlY3Rpb25zIHdpdGggdGhlIHRpdGxlIEZPTy4KLWltcG9ydCBtc2lsaWIsIHNjaGVtYSwgc2VxdWVuY2UsIG9zLCBnbG9iLCB0aW1lLCByZSwgc2h1dGlsCitpbXBvcnQgbXNpbGliLCBzY2hlbWEsIHNlcXVlbmNlLCBvcywgZ2xvYiwgdGltZSwgcmUsIHNodXRpbCwgemlwZmlsZQogZnJvbSBtc2lsaWIgaW1wb3J0IEZlYXR1cmUsIENBQiwgRGlyZWN0b3J5LCBEaWFsb2csIEJpbmFyeSwgYWRkX2RhdGEKIGltcG9ydCB1aXNhbXBsZQogZnJvbSB3aW4zMmNvbS5jbGllbnQgaW1wb3J0IGNvbnN0YW50cwogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQogZnJvbSB1dWlkcyBpbXBvcnQgcHJvZHVjdF9jb2RlcworaW1wb3J0IHRlbXBmaWxlCiAKICMgU2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gaW4gY29uZmlnLnB5IGJlbG93CiAjIDAgZm9yIG9mZmljaWFsIHB5dGhvbi5vcmcgcmVsZWFzZXMKQEAgLTI4LDYgKzI5LDEwIEBACiBQQ0JVSUxEPSJQQ2J1aWxkIgogIyBtc3ZjcnQgdmVyc2lvbgogTVNWQ1IgPSAiOTAiCisjIE5hbWUgb2YgY2VydGlmaWNhdGUgaW4gZGVmYXVsdCBzdG9yZSB0byBzaWduIE1TSSB3aXRoCitjZXJ0bmFtZSA9IE5vbmUKKyMgTWFrZSBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIFBEQiBmaWxlcyBmb3IgdGhpcyBidWlsZD8KK3BkYnppcCA9IFRydWUKIAogdHJ5OgogICAgIGZyb20gY29uZmlnIGltcG9ydCAqCkBAIC0xMTEsMTQgKzExNiwxOCBAQAogICAgICIyNCI6Ins5QjgxRTYxOC0yMzAxLTQwMzUtQUM3Ny03NUQ5QUJFQjczMDF9IiwKICAgICAiMjUiOiJ7MmU0MWIxMTgtMzhiZC00YzFiLWE4NDAtNjk3N2VmZDFiOTExfSIsCiAgICAgIjI2IjoiezM0ZWJlY2FjLWYwNDYtNGUxYy1iMGUzLTliYWMzY2RhYWNmYX0iLAorICAgICIyNyI6Ins0ZmUyMWM3Ni0xNzYwLTQzN2ItYTJmMi05OTkwOTEzMGExNzV9IiwKICAgICB9IFttYWpvcittaW5vcl0KIAogIyBDb21wdXRlIHRoZSBuYW1lIHRoYXQgU3BoaW54IGdpdmVzIHRvIHRoZSBkb2NmaWxlCiBkb2NmaWxlID0gIiIKLWlmIG1pY3JvOgotICAgIGRvY2ZpbGUgPSBzdHIobWljcm8pCitpZiBpbnQobWljcm8pOgorICAgIGRvY2ZpbGUgPSBtaWNybwogaWYgbGV2ZWwgPCAweGY6Ci0gICAgZG9jZmlsZSArPSAnJXglcycgJSAobGV2ZWwsIHNlcmlhbCkKKyAgICBpZiBsZXZlbCA9PSAweEM6CisgICAgICAgIGRvY2ZpbGUgKz0gInJjJXMiICUgKHNlcmlhbCwpCisgICAgZWxzZToKKyAgICAgICAgZG9jZmlsZSArPSAnJXglcycgJSAobGV2ZWwsIHNlcmlhbCkKIGRvY2ZpbGUgPSAncHl0aG9uJXMlcyVzLmNobScgJSAobWFqb3IsIG1pbm9yLCBkb2NmaWxlKQogCiAjIEJ1aWxkIHRoZSBtaW5ndyBpbXBvcnQgbGlicmFyeSwgbGlicHl0aG9uWFkuYQpAQCAtMjE0LDcgKzIyMyw4IEBACiAgICAgIyBzY2hlbWEgcmVwcmVzZW50cyB0aGUgaW5zdGFsbGVyIDIuMCBkYXRhYmFzZSBzY2hlbWEuCiAgICAgIyBzZXF1ZW5jZSBpcyB0aGUgc2V0IG9mIHN0YW5kYXJkIHNlcXVlbmNlcwogICAgICMgKHVpL2V4ZWN1dGUsIGFkbWluL2FkdnQvaW5zdGFsbCkKLSAgICBkYiA9IG1zaWxpYi5pbml0X2RhdGFiYXNlKCJweXRob24tJXMlcy5tc2kiICUgKGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2lsaWIuYXJjaF9leHQpLAorICAgIG1zaW5hbWUgPSAicHl0aG9uLSVzJXMubXNpIiAlIChmdWxsX2N1cnJlbnRfdmVyc2lvbiwgbXNpbGliLmFyY2hfZXh0KQorICAgIGRiID0gbXNpbGliLmluaXRfZGF0YWJhc2UobXNpbmFtZSwKICAgICAgICAgICAgICAgICAgIHNjaGVtYSwgUHJvZHVjdE5hbWU9IlB5dGhvbiAiK2Z1bGxfY3VycmVudF92ZXJzaW9uK3Byb2R1Y3RzdWZmaXgsCiAgICAgICAgICAgICAgICAgICBQcm9kdWN0Q29kZT1wcm9kdWN0X2NvZGUsCiAgICAgICAgICAgICAgICAgICBQcm9kdWN0VmVyc2lvbj1jdXJyZW50X3ZlcnNpb24sCkBAIC0yMzcsNyArMjQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiUHJvZHVjdExpbmUiLCAiUHl0aG9uJXMlcyIgJSAobWFqb3IsIG1pbm9yKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgZGIuQ29tbWl0KCkKLSAgICByZXR1cm4gZGIKKyAgICByZXR1cm4gZGIsIG1zaW5hbWUKIAogZGVmIHJlbW92ZV9vbGRfdmVyc2lvbnMoZGIpOgogICAgICJGaWxsIHRoZSB1cGdyYWRlIHRhYmxlLiIKQEAgLTM5OCw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAoIlZlcmRhbmFSZWQ5IiwgIlZlcmRhbmEiLCA5LCAyNTUsIDApLAogICAgICAgICAgICAgIF0pCiAKLSAgICBjb21waWxlYXJncyA9IHInLVdpICJbVEFSR0VURElSXUxpYlxjb21waWxlYWxsLnB5IiAtZiAteCAiYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xweTNffHB5Ml90ZXN0X2dyYW1tYXIiICJbVEFSR0VURElSXUxpYiInCisgICAgY29tcGlsZWFyZ3MgPSByJy1XaSAiW1RBUkdFVERJUl1MaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkzXyIgIltUQVJHRVRESVJdTGliIicKICAgICBsaWIydG8zYXJncyA9IHInLWMgImltcG9ydCBsaWIydG8zLnB5Z3JhbSwgbGliMnRvMy5wYXRjb21wO2xpYjJ0bzMucGF0Y29tcC5QYXR0ZXJuQ29tcGlsZXIoKSInCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKQEAgLTQ5NSw5ICs1MDUsOSBAQAogICAgICAgIiAgICB3b3VsZCBzdGlsbCBiZSBQeXRob24gZm9yIERPUy4iKQogCiAgICAgYyA9IGV4aXRfZGlhbG9nLnRleHQoIndhcm5pbmciLCAxMzUsIDIwMCwgMjIwLCA0MCwgMHgzMDAwMywKLSAgICAgICAgICAgICJ7XFxWZXJkYW5hUmVkOX1XYXJuaW5nOiBQeXRob24gMi41LnggaXMgdGhlIGxhc3QgIgotICAgICAgICAgICAgIlB5dGhvbiByZWxlYXNlIGZvciBXaW5kb3dzIDl4LiIpCi0gICAgYy5jb25kaXRpb24oIkhpZGUiLCAiTk9UIFZlcnNpb245WCIpCisgICAgICAgICAgICAie1xcVmVyZGFuYVJlZDl9V2FybmluZzogUHl0aG9uIDIuNy54IGlzIHRoZSBsYXN0ICIKKyAgICAgICAgICAgICJQeXRob24gcmVsZWFzZSBmb3IgV2luZG93cyAyMDAwLiIpCisgICAgYy5jb25kaXRpb24oIkhpZGUiLCAiVmVyc2lvbk5UID4gNTAwIikKIAogICAgIGV4aXRfZGlhbG9nLnRleHQoIkRlc2NyaXB0aW9uIiwgMTM1LCAyMzUsIDIyMCwgMjAsIDB4MzAwMDMsCiAgICAgICAgICAgICAgICAiQ2xpY2sgdGhlIEZpbmlzaCBidXR0b24gdG8gZXhpdCB0aGUgSW5zdGFsbGVyLiIpCkBAIC0xMDAxLDggKzEwMTEsNiBAQAogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJhdWRpb3Rlc3QuYXUiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJjZmdwYXJzZXIuMSIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInNnbWxfaW5wdXQuaHRtbCIpCi0gICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3QueG1sIikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgidGVzdC54bWwub3V0IikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgidGVzdHRhci50YXIiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJjaGVja19zb3VuZGNhcmQudmJzIikKQEAgLTEwMTEsMTAgKzEwMTksMTQgQEAKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLnV1ZSIpCiAgICAgICAgICAgICBsaWIuZ2xvYigiKi5wZW0iKQogICAgICAgICAgICAgbGliLmdsb2IoIioucGNrIikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgicmVhZG1lLnR4dCIsIHNyYz0iUkVBRE1FIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiemlwZGlyLnppcCIpCisgICAgICAgIGlmIGRpcj09J3Rlc3RzJyBhbmQgcGFyZW50LnBoeXNpY2FsPT0nZGlzdHV0aWxzJzoKKyAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiU2V0dXAuc2FtcGxlIikKICAgICAgICAgaWYgZGlyPT0nZGVjaW1hbHRlc3RkYXRhJzoKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLmRlY1Rlc3QiKQorICAgICAgICBpZiBkaXI9PSd4bWx0ZXN0ZGF0YSc6CisgICAgICAgICAgICBsaWIuZ2xvYigiKi54bWwiKQorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0LnhtbC5vdXQiKQogICAgICAgICBpZiBkaXI9PSdvdXRwdXQnOgogICAgICAgICAgICAgbGliLmdsb2IoInRlc3RfKiIpCiAgICAgICAgIGlmIGRpcj09J2lkbGVsaWInOgpAQCAtMTE4NywxMCArMTE5OSwxMCBAQAogICAgIGlmIGhhdmVfdGNsOgogICAgICAgICB0Y2xfdmVyYnM9WwogICAgICAgICAgICAgICgicHkuSURMRSIsIC0xLCBwYXQgJSAodGVzdHByZWZpeCwgIiIsIGV3aSksICIiLAotICAgICAgICAgICAgICByJyJbVEFSR0VURElSXXB5dGhvbncuZXhlIiAiW1RBUkdFVERJUl1MaWJcaWRsZWxpYlxpZGxlLnB5dyIgLW4gLWUgIiUxIicsCisgICAgICAgICAgICAgIHInIltUQVJHRVRESVJdcHl0aG9udy5leGUiICJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IiAtZSAiJTEiJywKICAgICAgICAgICAgICAgIlJFR0lTVFJZLnRjbCIpLAogICAgICAgICAgICAgICgicHl3LklETEUiLCAtMSwgcGF0ICUgKHRlc3RwcmVmaXgsICJOb0NvbiIsIGV3aSksICIiLAotICAgICAgICAgICAgICByJyJbVEFSR0VURElSXXB5dGhvbncuZXhlIiAiW1RBUkdFVERJUl1MaWJcaWRsZWxpYlxpZGxlLnB5dyIgLW4gLWUgIiUxIicsCisgICAgICAgICAgICAgIHInIltUQVJHRVRESVJdcHl0aG9udy5leGUiICJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IiAtZSAiJTEiJywKICAgICAgICAgICAgICAgIlJFR0lTVFJZLnRjbCIpLAogICAgICAgICBdCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCkBAIC0xMjg5LDcgKzEzMDEsMTcgQEAKICAgICAgICAgICAgICAgXSkKICAgICBkYi5Db21taXQoKQogCi1kYiA9IGJ1aWxkX2RhdGFiYXNlKCkKK2RlZiBidWlsZF9wZGJ6aXAoKToKKyAgICBwZGJleGNsdWRlID0gWydraWxsX3B5dGhvbi5wZGInLCAnbWFrZV9idWlsZGluZm8ucGRiJywKKyAgICAgICAgICAgICAgICAgICdtYWtlX3ZlcnNpb25pbmZvLnBkYiddCisgICAgcGF0aCA9ICJweXRob24tJXMlcy1wZGIuemlwIiAlIChmdWxsX2N1cnJlbnRfdmVyc2lvbiwgbXNpbGliLmFyY2hfZXh0KQorICAgIHBkYnppcCA9IHppcGZpbGUuWmlwRmlsZShwYXRoLCAndycpCisgICAgZm9yIGYgaW4gZ2xvYi5nbG9iMShvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxEKSwgIioucGRiIik6CisgICAgICAgIGlmIGYgbm90IGluIHBkYmV4Y2x1ZGUgYW5kIG5vdCBmLmVuZHN3aXRoKCdfZC5wZGInKToKKyAgICAgICAgICAgIHBkYnppcC53cml0ZShvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxELCBmKSwgZikKKyAgICBwZGJ6aXAuY2xvc2UoKQorCitkYixtc2luYW1lID0gYnVpbGRfZGF0YWJhc2UoKQogdHJ5OgogICAgIGFkZF9mZWF0dXJlcyhkYikKICAgICBhZGRfdWkoZGIpCkBAIC0xMjk5LDMgKzEzMjEsNzggQEAKICAgICBkYi5Db21taXQoKQogZmluYWxseToKICAgICBkZWwgZGIKKworIyBNZXJnZSBDUlQgaW50byBNU0kgZmlsZS4gVGhpcyByZXF1aXJlcyB0aGUgZGF0YWJhc2UgdG8gYmUgY2xvc2VkLgorbW9kX2RpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJQcm9ncmFtRmlsZXMiXSwgIkNvbW1vbiBGaWxlcyIsICJNZXJnZSBNb2R1bGVzIikKK2lmIG1zaWxpYi5XaW42NDoKKyAgICBtb2R1bGVzID0gWyJNaWNyb3NvZnRfVkM5MF9DUlRfeDg2X3g2NC5tc20iLCAicG9saWN5XzlfMF9NaWNyb3NvZnRfVkM5MF9DUlRfeDg2X3g2NC5tc20iXQorZWxzZToKKyAgICBtb2R1bGVzID0gWyJNaWNyb3NvZnRfVkM5MF9DUlRfeDg2Lm1zbSIsInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Ni5tc20iXQorCitmb3IgaSwgbiBpbiBlbnVtZXJhdGUobW9kdWxlcyk6CisgICAgbW9kdWxlc1tpXSA9IG9zLnBhdGguam9pbihtb2RfZGlyLCBuKQorCitkZWYgbWVyZ2UobXNpLCBmZWF0dXJlLCByb290ZGlyLCBtb2R1bGVzKToKKyAgICBjYWJfYW5kX2ZpbGVjb3VudCA9IFtdCisgICAgIyBTdGVwIDE6IE1lcmdlIGRhdGFiYXNlcywgZXh0cmFjdCBjYWJmaWxlcworICAgIG0gPSBtc2lsaWIuTWFrZU1lcmdlMigpCisgICAgbS5PcGVuTG9nKCJtZXJnZS5sb2ciKQorICAgIG0uT3BlbkRhdGFiYXNlKG1zaSkKKyAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6CisgICAgICAgIHByaW50IG1vZHVsZQorICAgICAgICBtLk9wZW5Nb2R1bGUobW9kdWxlLDApCisgICAgICAgIG0uTWVyZ2UoZmVhdHVyZSwgcm9vdGRpcikKKyAgICAgICAgcHJpbnQgIkVycm9yczoiCisgICAgICAgIGZvciBlIGluIG0uRXJyb3JzOgorICAgICAgICAgICAgcHJpbnQgZS5UeXBlLCBlLk1vZHVsZVRhYmxlLCBlLkRhdGFiYXNlVGFibGUKKyAgICAgICAgICAgIHByaW50ICIgICBNb2RrZXlzOiIsCisgICAgICAgICAgICBmb3IgcyBpbiBlLk1vZHVsZUtleXM6IHByaW50IHMsCisgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQgIiAgIERCS2V5czoiLAorICAgICAgICAgICAgZm9yIHMgaW4gZS5EYXRhYmFzZUtleXM6IHByaW50IHMsCisgICAgICAgICAgICBwcmludAorICAgICAgICBjYWJuYW1lID0gdGVtcGZpbGUubWt0ZW1wKHN1ZmZpeD0iLmNhYiIpCisgICAgICAgIG0uRXh0cmFjdENBQihjYWJuYW1lKQorICAgICAgICBjYWJfYW5kX2ZpbGVjb3VudC5hcHBlbmQoKGNhYm5hbWUsIGxlbihtLk1vZHVsZUZpbGVzKSkpCisgICAgICAgIG0uQ2xvc2VNb2R1bGUoKQorICAgIG0uQ2xvc2VEYXRhYmFzZShUcnVlKQorICAgIG0uQ2xvc2VMb2coKQorCisgICAgIyBTdGVwIDI6IEFkZCBDQUIgZmlsZXMKKyAgICBpID0gbXNpbGliLk1ha2VJbnN0YWxsZXIoKQorICAgIGRiID0gaS5PcGVuRGF0YWJhc2UobXNpLCBjb25zdGFudHMubXNpT3BlbkRhdGFiYXNlTW9kZVRyYW5zYWN0KQorCisgICAgdiA9IGRiLk9wZW5WaWV3KCJTRUxFQ1QgTGFzdFNlcXVlbmNlIEZST00gTWVkaWEiKQorICAgIHYuRXhlY3V0ZShOb25lKQorICAgIG1heG1lZGlhID0gLTEKKyAgICB3aGlsZSAxOgorICAgICAgICByID0gdi5GZXRjaCgpCisgICAgICAgIGlmIG5vdCByOiBicmVhaworICAgICAgICBzZXEgPSByLkludGVnZXJEYXRhKDEpCisgICAgICAgIGlmIHNlcSA+IG1heG1lZGlhOgorICAgICAgICAgICAgbWF4bWVkaWEgPSBzZXEKKyAgICBwcmludCAiU3RhcnQgb2YgTWVkaWEiLCBtYXhtZWRpYQorCisgICAgZm9yIGNhYm5hbWUsIGNvdW50IGluIGNhYl9hbmRfZmlsZWNvdW50OgorICAgICAgICBzdHJlYW0gPSAibWVyZ2VkJWQiICUgbWF4bWVkaWEKKyAgICAgICAgbXNpbGliLmFkZF9kYXRhKGRiLCAiTWVkaWEiLAorICAgICAgICAgICAgICAgIFsobWF4bWVkaWErMSwgbWF4bWVkaWErY291bnQsIE5vbmUsICIjIitzdHJlYW0sIE5vbmUsIE5vbmUpXSkKKyAgICAgICAgbXNpbGliLmFkZF9zdHJlYW0oZGIsIHN0cmVhbSwgIGNhYm5hbWUpCisgICAgICAgIG9zLnVubGluayhjYWJuYW1lKQorICAgICAgICBtYXhtZWRpYSArPSBjb3VudAorICAgICMgVGhlIG1lcmdlIG1vZHVsZSBzZXRzIEFMTFVTRVJTIHRvIDEgaW4gdGhlIHByb3BlcnR5IHRhYmxlLgorICAgICMgVGhpcyBpcyB1bmRlc2lyZWQ7IGRlbGV0ZSB0aGF0CisgICAgdiA9IGRiLk9wZW5WaWV3KCJERUxFVEUgRlJPTSBQcm9wZXJ0eSBXSEVSRSBQcm9wZXJ0eT0nQUxMVVNFUlMnIikKKyAgICB2LkV4ZWN1dGUoTm9uZSkKKyAgICB2LkNsb3NlKCkKKyAgICBkYi5Db21taXQoKQorCittZXJnZShtc2luYW1lLCAiU2hhcmVkQ1JUIiwgIlRBUkdFVERJUiIsIG1vZHVsZXMpCisKKyMgY2VydG5hbWUgKGZyb20gY29uZmlnLnB5KSBzaG91bGQgYmUgKGEgc3Vic3RyaW5nIG9mKQorIyB0aGUgY2VydGlmaWNhdGUgc3ViamVjdCwgZS5nLiAiUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24iCitpZiBjZXJ0bmFtZToKKyAgICBvcy5zeXN0ZW0oJ3NpZ250b29sIHNpZ24gL24gIiVzIiAvdCBodHRwOi8vdGltZXN0YW1wLnZlcmlzaWduLmNvbS9zY3JpcHRzL3RpbWVzdGFtcC5kbGwgJXMnICUgKGNlcnRuYW1lLCBtc2luYW1lKSkKKworaWYgcGRiemlwOgorICAgIGJ1aWxkX3BkYnppcCgpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdXVpZHMucHkgYi9Ub29scy9tc2kvdXVpZHMucHkKaW5kZXggODk1NDk4Zi4uMTE2MjA0MCAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL3V1aWRzLnB5CisrKyBiL1Rvb2xzL21zaS91dWlkcy5weQpAQCAtNywyMyArNyw2IEBACiAjIGdlbmVyYXRlZC4gRm9yIG9mZmljaWFsIHJlbGVhc2VzLCB3ZSByZWNvcmQgdGhlIHByb2R1Y3QgY29kZXMsCiAjIHNvIHBlb3BsZSBjYW4gcmVmZXIgdG8gdGhlbS4KIHByb2R1Y3RfY29kZXMgPSB7Ci0gICAgJzIuNC4xMDEnOiAnezBlOWI0ZDhlLTZjZGEtNDQ2ZS1hMjA4LTdiOTJmM2RkZmZhMH0nLCAjIDIuNGExLCByZWxlYXNlZCBhcyBhIHNuYXBzaG90Ci0gICAgJzIuNC4xMDInOiAnezFiOTk4NzQ1LTQ5MDEtNGVkYi1iYzUyLTIxMzY4OWUxYjkyMn0nLCAjIDIuNGEyCi0gICAgJzIuNC4xMDMnOiAnezMzZmM4YmQyLTFlOGYtNGFkZC1hNDBhLWFkZTI3MjhkNTk0Mn0nLCAjIDIuNGEzCi0gICAgJzIuNC4xMTEnOiAnezUxYTdlMmE4LTIwMjUtNGVmMC04NmZmLWU2YWFiNzQyZDFmYX0nLCAjIDIuNGIxCi0gICAgJzIuNC4xMTInOiAnezRhNWU3YzFkLWM2NTktNGZlMy1iOGM5LTdjNjViZDljOTVhNX0nLCAjIDIuNGIyCi0gICAgJzIuNC4xMjEnOiAnezc1NTA4ODIxLWE4ZTktNDBhOC05NWJkLWRiZTYwMzNkZGJlYX0nLCAjIDIuNGMxCi0gICAgJzIuNC4xMjInOiAnezgzYTkxMThiLTRiZGQtNDczYi1hZmMzLWJjYjE0MmZlY2E5ZX0nLCAjIDIuNGMyCi0gICAgJzIuNC4xNTAnOiAnezgyZDkzMDJlLWYyMDktNDgwNS1iNTQ4LTUyMDg3MDQ3NDgzYX0nLCAjIDIuNC4wCi0gICAgJzIuNC4xMTIxJzone2JlMDI3NDExLThlNmItNDQ0MC1hMjliLWIwN2RmMDY5MDIzMH0nLCAjIDIuNC4xYzEKLSAgICAnMi40LjExMjInOid7MDI4MTg3NTItNDhiZi00MDc0LWEyODEtN2E0MTE0YzRmMWIxfScsICMgMi40LjFjMgotICAgICcyLjQuMTE1MCc6J3s0ZDRmNTM0Ni03ZTRhLTQwYjUtOTM4Ny1mZGI2MTgxMzU3ZmN9JywgIyAyLjQuMQotICAgICcyLjQuMjEyMSc6J3s1ZWY5ZDZiNi1kZjc4LTQ1ZDItYWIwOS0xNDc4NmEzYzVhOTl9JywgIyAyLjQuMmMxCi0gICAgJzIuNC4yMTUwJzone2IxOTFlNDljLWVhMjMtNDNiMi1iMjhhLTE0ZTA3ODQwNjliOH0nLCAjIDIuNC4yCi0gICAgJzIuNC4zMTIxJzone2Y2NjllZDRkLTFkY2UtNDFjNC05NjE3LWQ5ODUzOTcxODdhMX0nLCAjIDIuNC4zYzEKLSAgICAnMi40LjMxNTAnOid7NzVlNzFhZGQtMDQyYy00ZjMwLWJmYWMtYTllYzQyMzUxMzEzfScsICMgMi40LjMKLSAgICAnMi40LjQxMjEnOid7Y2QyODYyZGItMjJhNC00Njg4LTg3NzItODU0MDdlYTIxNTUwfScsICMgMi40LjRjMQotICAgICcyLjQuNDE1MCc6J3s2MGUyYzhjOS02Y2YzLTRiMWEtOTYxOC1lMzA0OTQ2Yzk0ZTZ9JywgIyAyLjQuNAogICAgICcyLjUuMTAxJzogJ3tiYzE0Y2UzZS01ZTcyLTRhNjQtYWMxZi1iZjU5YTU3MTg5OGN9JywgIyAyLjVhMQogICAgICcyLjUuMTAyJzogJ3s1ZWVkNTFjMS04ZTlkLTQwNzEtOTRjNS1iNDBkZTVkNDliYTV9JywgIyAyLjVhMgogICAgICcyLjUuMTAzJzogJ3s3M2RjZDk2Ni1mZmVjLTQxNWYtYmIzOS04MzQyYzFmNDcwMTd9JywgIyAyLjVhMwpAQCAtNTgsNiArNDEsMTYgQEAKICAgICAnMi42LjUxMjEnOid7ZTBlMjczZDctNzU5OC00NzAxLTgzMjUtYzkwYzA2OWZkNWZmfScsICMgMi42LjVjMQogICAgICcyLjYuNTEyMic6J3tmYTIyN2I3Ni0wNjcxLTRkYzYtYjgyNi1jMmZmMmE3MGRmZDV9JywgIyAyLjYuNWMyCiAgICAgJzIuNi41MTUwJzonezQ3MjNmMTk5LWZhNjQtNDIzMy04ZTZlLTlmY2NjOTVhMThlZX0nLCAjIDIuNi41Ci0gICAgJzIuNi42MTIxJzonezM5OWI3NTAyLTgxMTktNDQwMC05MjE4LTQ5MDYxOTRmZWRmNX0nLCAjIDIuNi42cmMxCi0gICAgJzIuNi42MTUwJzonezYxNTFjZjIwLTBiZDgtNDAyMy1hNGEwLTZhODZkY2ZlNThlNX0nLCAjIDIuNi42CisgICAgJzIuNy4xMDEnOiAne2VjYTFiYmVmLTQzMmMtNDlhZS1hNjY3LWMyMTNjYzdiYmYyMn0nLCAjIDIuN2ExCisgICAgJzIuNy4xMDInOiAnezIxY2UxNmVkLTczYzQtNDYwZC05YjExLTUyMmY0MTdiMjA5MH0nLCAjIDIuN2EyCisgICAgJzIuNy4xMDMnOiAnezZlN2RiZDU1LWJhNGEtNDhhYy1hNjg4LTZjNzVkYjRkNzUwMH0nLCAjIDIuN2EzCisgICAgJzIuNy4xMDQnOiAne2VlNzc0YmEzLTc0YTUtNDhkOS1iNDI1LWIzNWEyODcyNjBjOH0nLCAjIDIuN2E0CisgICAgJzIuNy4xMTEnOiAnezljZmQ5ZWM3LWE5YzctNDk4MC1hMWM2LTA1NGZjNjQ5M2ViM30nLCAjIDIuN2IxCisgICAgJzIuNy4xMTInOiAnezlhNzJmYWY2LWMzMDQtNDE2NS04NTk1LTkyOTFmZjMwY2FjNn0nLCAjIDIuN2IyCisgICAgJzIuNy4xMjEnOiAne2Y1MzBjOTRhLWRkNTMtNGRlOS05NDhlLWI2MzJiOWNiNDhkMn0nLCAjIDIuN2MxCisgICAgJzIuNy4xMjInOiAne2Y4MDkwNWQyLWRkOGQtNGI4ZS04YTQwLWMyM2M5M2RjYTA3ZH0nLCAjIDIuN2MyCisgICAgJzIuNy4xNTAnOiAnezIwYzMxNDM1LTJhMGEtNDU4MC1iZThiLWFjMDZmYzI0M2NhNH0nLCAjIDIuNy4wCisgICAgJzIuNy4xMTIxJzonezYwYTQwMzZhLTM3NGMtNGZkMi04NGI5LWJmYWU3ZGIwMzkzMX0nLCAjIDIuNy4xcmMxCisgICAgJzIuNy4xMTIyJzonezU5NjVlN2QxLTU1ODQtNGRlOS1iMTNhLTY5NGUwYjJlZTNhNn0nLCAjIDIuNy4xcmMyCisgICAgJzIuNy4xMTUwJzonezMyOTM5ODI3LWQ4ZTUtNDcwYS1iMTI2LTg3MGRiM2M2OWZkZn0nLCAjIDIuNy4xCiB9CmRpZmYgLS1naXQgYS9Ub29scy9weWJlbmNoL1NldHVwLnB5IGIvVG9vbHMvcHliZW5jaC9TZXR1cC5weQppbmRleCAyMWU2NTRhLi4zMDlmM2RiIDEwMDY0NAotLS0gYS9Ub29scy9weWJlbmNoL1NldHVwLnB5CisrKyBiL1Rvb2xzL3B5YmVuY2gvU2V0dXAucHkKQEAgLTEsNCArMSw0IEBACi0jIXB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICMgU2V0dXAgZmlsZSBmb3IgcHliZW5jaAogIwpkaWZmIC0tZ2l0IGEvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IGIvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5CmluZGV4IDgzYTYyMTcuLjlkZWU3MzEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weQorKysgYi9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2F0IGxlYXN0IG9uZSBjYWxpYnJhdGlvbiBydW4gaXMgcmVxdWlyZWQnKQogICAgICAgICAgICAgc2VsZi5jYWxpYnJhdGlvbl9ydW5zID0gY2FsaWJyYXRpb25fcnVucwogICAgICAgICBpZiB0aW1lciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVyID0gdGltZXIKKyAgICAgICAgICAgIHNlbGYudGltZXIgPSB0aW1lcgogCiAgICAgICAgICMgSW5pdCB2YXJpYWJsZXMKICAgICAgICAgc2VsZi50aW1lcyA9IFtdCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzLzJ0bzMgYi9Ub29scy9zY3JpcHRzLzJ0bzMKaW5kZXggMmE0NDdjZi4uZmJkNGFhNiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy8ydG8zCisrKyBiL1Rvb2xzL3NjcmlwdHMvMnRvMwpAQCAtMSw2ICsxLDUgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgotZnJvbSBsaWIydG8zLm1haW4gaW1wb3J0IG1haW4KIGltcG9ydCBzeXMKLWltcG9ydCBvcworZnJvbSBsaWIydG8zLm1haW4gaW1wb3J0IG1haW4KIAogc3lzLmV4aXQobWFpbigibGliMnRvMy5maXhlcyIpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9SRUFETUUgYi9Ub29scy9zY3JpcHRzL1JFQURNRQppbmRleCA5YzdiNDBlLi5lYWY5YWVlIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL1JFQURNRQorKysgYi9Ub29scy9zY3JpcHRzL1JFQURNRQpAQCAtNCw2ICs0LDcgQEAKIAogU2VlIGFsc28gdGhlIERlbW8vc2NyaXB0cyBkaXJlY3RvcnkhCiAKK2FuYWx5emVfZHhwLnB5CQlBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQogYnlleHQucHkJCVByaW50IGxpbmVzL3dvcmRzL2NoYXJzIHN0YXRzIG9mIGZpbGVzIGJ5IGV4dGVuc2lvbgogYnl0ZXllYXJzLnB5CQlQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQogY2hlY2thcHBlbmQucHkJCVNlYXJjaCBmb3IgbXVsdGktYXJndW1lbnQgLmFwcGVuZCgpIGNhbGxzCkBAIC0xOCw3ICsxOSw4IEBACiBkaWZmLnB5CQkJUHJpbnQgZmlsZSBkaWZmcyBpbiBjb250ZXh0LCB1bmlmaWVkLCBvciBuZGlmZiBmb3JtYXRzCiBkdXRyZWUucHkJCUZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCiBlcHRhZ3MucHkJCUNyZWF0ZSBFbWFjcyBUQUdTIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCi1maW5kZGl2LnB5CQlBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycy4KK2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgIEZpbmQgdGhlIG1heGltdW0gcmVjdXJzaW9uIGxpbWl0IG9uIHRoaXMgbWFjaGluZSAKK2ZpbmRkaXYucHkJCUEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzCiBmaW5kbGlua3N0by5weQkJUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CiBmaW5kbm9jb2RpbmcucHkJCUZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KIGZpeGNpZC5weQkJTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcwpAQCAtMjcsOCArMjksOCBAQAogZml4bm90aWNlLnB5CQlGaXggdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gc291cmNlIGZpbGVzCiBmaXhwcy5weQkJRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKIGZ0cG1pcnJvci5weQkJRlRQIG1pcnJvciBzY3JpcHQKLWdvb2dsZS5weQkJT3BlbiBhIHdlYmJyb3dzZXIgd2l0aCBHb29nbGUuCi1ncHJvZjJodG1sLnB5CQlUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwuCitnb29nbGUucHkJCU9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCitncHJvZjJodG1sLnB5CQlUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKIGgycHkucHkJCQlUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCiBob3RzaG90bWFpbi5weQkJTWFpbiBwcm9ncmFtIHRvIHJ1biBzY3JpcHQgdW5kZXIgY29udHJvbCBvZiBob3RzaG90CiBpZGxlCQkJTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKQEAgLTU1LDkgKzU3LDEwIEBACiByZWRlbW8ucHkJCUJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZW1vbnN0cmF0aW9uIGZhY2lsaXR5CiByZWluZGVudC5weQkJQ2hhbmdlIC5weSBmaWxlcyB0byB1c2UgNC1zcGFjZSBpbmRlbnRzLgogcmdyZXAucHkJCVJldmVyc2UgZ3JlcCB0aHJvdWdoIGEgZmlsZSAodXNlZnVsIGZvciBiaWcgbG9nZmlsZXMpCi1zZXR1cC5weQkJSW5zdGFsbCBhbGwgc2NyaXB0cyBsaXN0ZWQgaGVyZS4KK3NlcnZlLnB5CQlTbWFsbCB3c2dpcmVmLWJhc2VkIHdlYiBzZXJ2ZXIsIHVzZWQgaW4gbWFrZSBzZXJ2ZSBpbiBEb2MKK3NldHVwLnB5CQlJbnN0YWxsIGFsbCBzY3JpcHRzIGxpc3RlZCBoZXJlCiBzdWZmLnB5CQkJU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Ci1zdm5lb2wucHkJCVNldHMgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Lgorc3ZuZW9sLnB5CQlTZXRzIHN2bjplb2wtc3R5bGUgb24gYWxsIGZpbGVzIGluIGRpcmVjdG9yeQogdGV4Y2hlY2sucHkgICAgICAgICAgICAgVmFsaWRhdGUgUHl0aG9uIExhVGVYIGZvcm1hdHRpbmcgKFJheW1vbmQgSGV0dGluZ2VyKQogdGV4aTJodG1sLnB5CQlDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAogdHJlZXN5bmMucHkJCVN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGVvc3luY3JhdGljKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weSBiL1Rvb2xzL3NjcmlwdHMvYW5hbHl6ZV9keHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlOTMxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvYW5hbHl6ZV9keHAucHkKQEAgLTAsMCArMSwxMjkgQEAKKyIiIgorU29tZSBoZWxwZXIgZnVuY3Rpb25zIHRvIGFuYWx5emUgdGhlIG91dHB1dCBvZiBzeXMuZ2V0ZHhwKCkgKHdoaWNoIGlzCitvbmx5IGF2YWlsYWJsZSBpZiBQeXRob24gd2FzIGJ1aWx0IHdpdGggLUREWU5BTUlDX0VYRUNVVElPTl9QUk9GSUxFKS4KK1RoZXNlIHdpbGwgdGVsbCB5b3Ugd2hpY2ggb3Bjb2RlcyBoYXZlIGJlZW4gZXhlY3V0ZWQgbW9zdCBmcmVxdWVudGx5CitpbiB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQsIGlmIFB5dGhvbiB3YXMgYWxzbyBidWlsdCB3aXRoIC1ERFhQQUlSUywKK3dpbGwgdGVsbCB5b3Ugd2hpY2ggaW5zdHJ1Y3Rpb24gX3BhaXJzXyB3ZXJlIGV4ZWN1dGVkIG1vc3QgZnJlcXVlbnRseSwKK3doaWNoIG1heSBoZWxwIGluIGNob29zaW5nIG5ldyBpbnN0cnVjdGlvbnMuCisKK0lmIFB5dGhvbiB3YXMgYnVpbHQgd2l0aG91dCAtRERZTkFNSUNfRVhFQ1VUSU9OX1BST0ZJTEUsIGltcG9ydGluZwordGhpcyBtb2R1bGUgd2lsbCByYWlzZSBhIFJ1bnRpbWVFcnJvci4KKworSWYgeW91J3JlIHJ1bm5pbmcgYSBzY3JpcHQgeW91IHdhbnQgdG8gcHJvZmlsZSwgYSBzaW1wbGUgd2F5IHRvIGdldAordGhlIGNvbW1vbiBwYWlycyBpczoKKworJCBQWVRIT05QQVRIPSRQWVRIT05QQVRIOjxweXRob25fc3JjZGlyPi9Ub29scy9zY3JpcHRzIFwKKy4vcHl0aG9uIC1pIC1PIHRoZV9zY3JpcHQucHkgLS1hcmdzCisuLi4KKz4gZnJvbSBhbmFseXplX2R4cCBpbXBvcnQgKgorPiBzID0gcmVuZGVyX2NvbW1vbl9wYWlycygpCis+IG9wZW4oJy90bXAvc29tZV9maWxlJywgJ3cnKS53cml0ZShzKQorIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgb3Bjb2RlCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworaWYgbm90IGhhc2F0dHIoc3lzLCAiZ2V0ZHhwIik6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBpbXBvcnQgYW5hbHl6ZV9keHA6IFB5dGhvbiBidWlsdCB3aXRob3V0IgorICAgICAgICAgICAgICAgICAgICAgICAiIC1ERFlOQU1JQ19FWEVDVVRJT05fUFJPRklMRS4iKQorCisKK19wcm9maWxlX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQorX2N1bXVsYXRpdmVfcHJvZmlsZSA9IHN5cy5nZXRkeHAoKQorCisjIElmIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCAtRERYUEFJUlMsIHN5cy5nZXRkeHAoKSByZXR1cm5zIGEgbGlzdCBvZgorIyBsaXN0cyBvZiBpbnRzLiAgT3RoZXJ3aXNlIGl0IHJldHVybnMganVzdCBhIGxpc3Qgb2YgaW50cy4KK2RlZiBoYXNfcGFpcnMocHJvZmlsZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBQeXRob24gdGhhdCBwcm9kdWNlZCB0aGUgYXJndW1lbnQgcHJvZmlsZQorICAgIHdhcyBidWlsdCB3aXRoIC1ERFhQQUlSUy4iIiIKKworICAgIHJldHVybiBsZW4ocHJvZmlsZSkgPiAwIGFuZCBpc2luc3RhbmNlKHByb2ZpbGVbMF0sIGxpc3QpCisKKworZGVmIHJlc2V0X3Byb2ZpbGUoKToKKyAgICAiIiJGb3JnZXRzIGFueSBleGVjdXRpb24gcHJvZmlsZSB0aGF0IGhhcyBiZWVuIGdhdGhlcmVkIHNvIGZhci4iIiIKKyAgICB3aXRoIF9wcm9maWxlX2xvY2s6CisgICAgICAgIHN5cy5nZXRkeHAoKSAgIyBSZXNldHMgdGhlIGludGVybmFsIHByb2ZpbGUKKyAgICAgICAgZ2xvYmFsIF9jdW11bGF0aXZlX3Byb2ZpbGUKKyAgICAgICAgX2N1bXVsYXRpdmVfcHJvZmlsZSA9IHN5cy5nZXRkeHAoKSAgIyAwcyBvdXQgb3VyIGNvcHkuCisKKworZGVmIG1lcmdlX3Byb2ZpbGUoKToKKyAgICAiIiJSZWFkcyBzeXMuZ2V0ZHhwKCkgYW5kIG1lcmdlcyBpdCBpbnRvIHRoaXMgbW9kdWxlJ3MgY2FjaGVkIGNvcHkuCisKKyAgICBXZSBuZWVkIHRoaXMgYmVjYXVzZSBzeXMuZ2V0ZHhwKCkgMHMgaXRzZWxmIGV2ZXJ5IHRpbWUgaXQncyBjYWxsZWQuIiIiCisKKyAgICB3aXRoIF9wcm9maWxlX2xvY2s6CisgICAgICAgIG5ld19wcm9maWxlID0gc3lzLmdldGR4cCgpCisgICAgICAgIGlmIGhhc19wYWlycyhuZXdfcHJvZmlsZSk6CisgICAgICAgICAgICBmb3IgZmlyc3RfaW5zdCBpbiByYW5nZShsZW4oX2N1bXVsYXRpdmVfcHJvZmlsZSkpOgorICAgICAgICAgICAgICAgIGZvciBzZWNvbmRfaW5zdCBpbiByYW5nZShsZW4oX2N1bXVsYXRpdmVfcHJvZmlsZVtmaXJzdF9pbnN0XSkpOgorICAgICAgICAgICAgICAgICAgICBfY3VtdWxhdGl2ZV9wcm9maWxlW2ZpcnN0X2luc3RdW3NlY29uZF9pbnN0XSArPSAoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcHJvZmlsZVtmaXJzdF9pbnN0XVtzZWNvbmRfaW5zdF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgaW5zdCBpbiByYW5nZShsZW4oX2N1bXVsYXRpdmVfcHJvZmlsZSkpOgorICAgICAgICAgICAgICAgIF9jdW11bGF0aXZlX3Byb2ZpbGVbaW5zdF0gKz0gbmV3X3Byb2ZpbGVbaW5zdF0KKworCitkZWYgc25hcHNob3RfcHJvZmlsZSgpOgorICAgICIiIlJldHVybnMgdGhlIGN1bXVsYXRpdmUgZXhlY3V0aW9uIHByb2ZpbGUgdW50aWwgdGhpcyBjYWxsLiIiIgorICAgIHdpdGggX3Byb2ZpbGVfbG9jazoKKyAgICAgICAgbWVyZ2VfcHJvZmlsZSgpCisgICAgICAgIHJldHVybiBjb3B5LmRlZXBjb3B5KF9jdW11bGF0aXZlX3Byb2ZpbGUpCisKKworZGVmIGNvbW1vbl9pbnN0cnVjdGlvbnMocHJvZmlsZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbW9zdCBjb21tb24gb3Bjb2RlcyBpbiBvcmRlciBvZiBkZXNjZW5kaW5nIGZyZXF1ZW5jeS4KKworICAgIFRoZSByZXN1bHQgaXMgYSBsaXN0IG9mIHR1cGxlcyBvZiB0aGUgZm9ybQorICAgICAgKG9wY29kZSwgb3BuYW1lLCAjIG9mIG9jY3VycmVuY2VzKQorCisgICAgIiIiCisgICAgaWYgaGFzX3BhaXJzKHByb2ZpbGUpIGFuZCBwcm9maWxlOgorICAgICAgICBpbnN0X2xpc3QgPSBwcm9maWxlWy0xXQorICAgIGVsc2U6CisgICAgICAgIGluc3RfbGlzdCA9IHByb2ZpbGUKKyAgICByZXN1bHQgPSBbKG9wLCBvcGNvZGUub3BuYW1lW29wXSwgY291bnQpCisgICAgICAgICAgICAgIGZvciBvcCwgY291bnQgaW4gZW51bWVyYXRlKGluc3RfbGlzdCkKKyAgICAgICAgICAgICAgaWYgY291bnQgPiAwXQorICAgIHJlc3VsdC5zb3J0KGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDIpLCByZXZlcnNlPVRydWUpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBjb21tb25fcGFpcnMocHJvZmlsZSk6CisgICAgIiIiUmV0dXJucyB0aGUgbW9zdCBjb21tb24gb3Bjb2RlIHBhaXJzIGluIG9yZGVyIG9mIGRlc2NlbmRpbmcgZnJlcXVlbmN5LgorCisgICAgVGhlIHJlc3VsdCBpcyBhIGxpc3Qgb2YgdHVwbGVzIG9mIHRoZSBmb3JtCisgICAgICAoKDFzdCBvcGNvZGUsIDJuZCBvcGNvZGUpLAorICAgICAgICgxc3Qgb3BuYW1lLCAybmQgb3BuYW1lKSwKKyAgICAgICAjIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBwYWlyKQorCisgICAgIiIiCisgICAgaWYgbm90IGhhc19wYWlycyhwcm9maWxlKToKKyAgICAgICAgcmV0dXJuIFtdCisgICAgcmVzdWx0ID0gWygob3AxLCBvcDIpLCAob3Bjb2RlLm9wbmFtZVtvcDFdLCBvcGNvZGUub3BuYW1lW29wMl0pLCBjb3VudCkKKyAgICAgICAgICAgICAgIyBEcm9wIHRoZSByb3cgb2Ygc2luZ2xlLW9wIHByb2ZpbGVzIHdpdGggWzotMV0KKyAgICAgICAgICAgICAgZm9yIG9wMSwgb3AxcHJvZmlsZSBpbiBlbnVtZXJhdGUocHJvZmlsZVs6LTFdKQorICAgICAgICAgICAgICBmb3Igb3AyLCBjb3VudCBpbiBlbnVtZXJhdGUob3AxcHJvZmlsZSkKKyAgICAgICAgICAgICAgaWYgY291bnQgPiAwXQorICAgIHJlc3VsdC5zb3J0KGtleT1vcGVyYXRvci5pdGVtZ2V0dGVyKDIpLCByZXZlcnNlPVRydWUpCisgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiByZW5kZXJfY29tbW9uX3BhaXJzKHByb2ZpbGU9Tm9uZSk6CisgICAgIiIiUmVuZGVycyB0aGUgbW9zdCBjb21tb24gb3Bjb2RlIHBhaXJzIHRvIGEgc3RyaW5nIGluIG9yZGVyIG9mCisgICAgZGVzY2VuZGluZyBmcmVxdWVuY3kuCisKKyAgICBUaGUgcmVzdWx0IGlzIGEgc2VyaWVzIG9mIGxpbmVzIG9mIHRoZSBmb3JtOgorICAgICAgIyBvZiBvY2N1cnJlbmNlczogKCcxc3Qgb3BuYW1lJywgJzJuZCBvcG5hbWUnKQorCisgICAgIiIiCisgICAgaWYgcHJvZmlsZSBpcyBOb25lOgorICAgICAgICBwcm9maWxlID0gc25hcHNob3RfcHJvZmlsZSgpCisgICAgZGVmIHNlcSgpOgorICAgICAgICBmb3IgXywgb3BzLCBjb3VudCBpbiBjb21tb25fcGFpcnMocHJvZmlsZSk6CisgICAgICAgICAgICB5aWVsZCAiJXM6ICVzXG4iICUgKGNvdW50LCBvcHMpCisgICAgcmV0dXJuICcnLmpvaW4oc2VxKCkpCmRpZmYgLS1naXQgYS9NaXNjL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIE1pc2MvZmluZF9yZWN1cnNpb25saW1pdC5weQpyZW5hbWUgdG8gVG9vbHMvc2NyaXB0cy9maW5kX3JlY3Vyc2lvbmxpbWl0LnB5CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2gycHkucHkgYi9Ub29scy9zY3JpcHRzL2gycHkucHkKaW5kZXggNjNlNzMzNi4uYzY4MWUyMyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQpAQCAtOTUsNyArOTUsNyBAQAogICAgIGZvciBwIGluIGlnbm9yZXM6CiAgICAgICAgIGJvZHkgPSBwLnN1YignICcsIGJvZHkpCiAgICAgIyByZXBsYWNlIGNoYXIgbGl0ZXJhbHMgYnkgb3JkKC4uLikKLSAgICBib2R5ID0gcF9jaGFyLnN1Yignb3JkKFxcMCknLCBib2R5KQorICAgIGJvZHkgPSBwX2NoYXIuc3ViKCJvcmQoJ1xcMScpIiwgYm9keSkKICAgICAjIENvbXB1dGUgbmVnYXRpdmUgaGV4YWRlY2ltYWwgY29uc3RhbnRzCiAgICAgc3RhcnQgPSAwCiAgICAgVU1BWCA9IDIqKHN5cy5tYXhpbnQrMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbWFpbGVyZGFlbW9uLnB5IGIvVG9vbHMvc2NyaXB0cy9tYWlsZXJkYWVtb24ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wYXJzZWVudGl0aWVzLnB5IGIvVG9vbHMvc2NyaXB0cy9wYXJzZWVudGl0aWVzLnB5CmluZGV4IGNmNGUxN2MuLjRhNDRmYjQgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcGFyc2VlbnRpdGllcy5weQorKysgYi9Ub29scy9zY3JpcHRzL3BhcnNlZW50aXRpZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAiIiIgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucyBhdmFpbGFibGUgZnJvbToKIAogICAgICAgaHR0cDovL3d3dy53My5vcmcvIGFzIGUuZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weSBiL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQppbmRleCBlMTk0Yzk4Li5iYzhiYzc5IDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CkBAIC0xLDggKzEsMTYgQEAKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCiAKIGltcG9ydCByZWluZGVudAoraW1wb3J0IHVudGFiaWZ5CisKKworZGVmIG5fZmlsZXNfc3RyKGNvdW50KToKKyAgICAiIiJSZXR1cm4gJ04gZmlsZShzKScgd2l0aCB0aGUgcHJvcGVyIHBsdXJhbGl0eSBvbiAnZmlsZScuIiIiCisgICAgcmV0dXJuICJ7fSBmaWxle30iLmZvcm1hdChjb3VudCwgInMiIGlmIGNvdW50ICE9IDEgZWxzZSAiIikKIAogCiBkZWYgc3RhdHVzKG1lc3NhZ2UsIG1vZGFsPUZhbHNlLCBpbmZvPU5vbmUpOgpAQCAtMTcsNTMgKzI1LDEwNSBAQAogICAgICAgICAgICAgZWxpZiBpbmZvOgogICAgICAgICAgICAgICAgIHByaW50IGluZm8ocmVzdWx0KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICJ5ZXMiCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk5PIgorICAgICAgICAgICAgICAgIHByaW50ICJ5ZXMiIGlmIHJlc3VsdCBlbHNlICJOTyIKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgcmV0dXJuIGNhbGxfZnhuCiAgICAgcmV0dXJuIGRlY29yYXRlZF9meG4KIAotQHN0YXR1cygiR2V0dGluZyB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZC9jaGFuZ2VkIiwKLSAgICAgICAgICAgIGluZm89bGFtYmRhIHg6ICIlcyBmaWxlcyIgJSBsZW4oeCkpCi1kZWYgY2hhbmdlZF9maWxlcygpOgotICAgICIiIlJ1biBgYHN2biBzdGF0dXNgYCBhbmQgcmV0dXJuIGEgc2V0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuCi0gICAgY2hhbmdlZC9hZGRlZC4iIiIKLSAgICBjbWQgPSAnc3ZuIHN0YXR1cyAtLXF1aWV0IC0tbm9uLWludGVyYWN0aXZlIC0taWdub3JlLWV4dGVybmFscycKLSAgICBzdm5fc3QgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICBzdm5fc3Qud2FpdCgpCi0gICAgb3V0cHV0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBzdm5fc3Quc3Rkb3V0LnJlYWRsaW5lcygpXQotICAgIGZpbGVzID0gc2V0KCkKLSAgICBmb3IgbGluZSBpbiBvdXRwdXQ6Ci0gICAgICAgIGlmIG5vdCBsaW5lWzBdIGluICgnQScsICdNJyk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsaW5lX3BhcnRzID0gbGluZS5zcGxpdCgpCi0gICAgICAgIHBhdGggPSBsaW5lX3BhcnRzWy0xXQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICAgIGZpbGVzLmFkZChwYXRoKQotICAgIHJldHVybiBmaWxlcwogCi1Ac3RhdHVzKCJGaXhpbmcgd2hpdGVzcGFjZSIsIGluZm89bGFtYmRhIHg6ICIlcyBmaWxlcyIgJSB4KQorQHN0YXR1cygiR2V0dGluZyB0aGUgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZC9jaGFuZ2VkIiwKKyAgICAgICAgaW5mbz1sYW1iZGEgeDogbl9maWxlc19zdHIobGVuKHgpKSkKK2RlZiBjaGFuZ2VkX2ZpbGVzKCk6CisgICAgIiIiR2V0IHRoZSBsaXN0IG9mIGNoYW5nZWQgb3IgYWRkZWQgZmlsZXMgZnJvbSB0aGUgVkNTLiIiIgorICAgIGlmIG9zLnBhdGguaXNkaXIoJy5oZycpOgorICAgICAgICB2Y3MgPSAnaGcnCisgICAgICAgIGNtZCA9ICdoZyBzdGF0dXMgLS1hZGRlZCAtLW1vZGlmaWVkIC0tbm8tc3RhdHVzJworICAgIGVsaWYgb3MucGF0aC5pc2RpcignLnN2bicpOgorICAgICAgICB2Y3MgPSAnc3ZuJworICAgICAgICBjbWQgPSAnc3ZuIHN0YXR1cyAtLXF1aWV0IC0tbm9uLWludGVyYWN0aXZlIC0taWdub3JlLWV4dGVybmFscycKKyAgICBlbHNlOgorICAgICAgICBzeXMuZXhpdCgnbmVlZCBhIGNoZWNrb3V0IHRvIGdldCBtb2RpZmllZCBmaWxlcycpCisKKyAgICBzdCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLnNwbGl0KCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgdHJ5OgorICAgICAgICBzdC53YWl0KCkKKyAgICAgICAgaWYgdmNzID09ICdoZyc6CisgICAgICAgICAgICByZXR1cm4gW3guZGVjb2RlKCkucnN0cmlwKCkgZm9yIHggaW4gc3Quc3Rkb3V0XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0ID0gKHguZGVjb2RlKCkucnN0cmlwKCkucnNwbGl0KE5vbmUsIDEpWy0xXQorICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHN0LnN0ZG91dCBpZiB4WzBdIGluICdBTScpCisgICAgICAgIHJldHVybiBzZXQocGF0aCBmb3IgcGF0aCBpbiBvdXRwdXQgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCkpCisgICAgZmluYWxseToKKyAgICAgICAgc3Quc3Rkb3V0LmNsb3NlKCkKKworCitkZWYgcmVwb3J0X21vZGlmaWVkX2ZpbGVzKGZpbGVfcGF0aHMpOgorICAgIGNvdW50ID0gbGVuKGZpbGVfcGF0aHMpCisgICAgaWYgY291bnQgPT0gMDoKKyAgICAgICAgcmV0dXJuIG5fZmlsZXNfc3RyKGNvdW50KQorICAgIGVsc2U6CisgICAgICAgIGxpbmVzID0gWyJ7fToiLmZvcm1hdChuX2ZpbGVzX3N0cihjb3VudCkpXQorICAgICAgICBmb3IgcGF0aCBpbiBmaWxlX3BhdGhzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgIHt9Ii5mb3JtYXQocGF0aCkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKKworQHN0YXR1cygiRml4aW5nIHdoaXRlc3BhY2UiLCBpbmZvPXJlcG9ydF9tb2RpZmllZF9maWxlcykKIGRlZiBub3JtYWxpemVfd2hpdGVzcGFjZShmaWxlX3BhdGhzKToKICAgICAiIiJNYWtlIHN1cmUgdGhhdCB0aGUgd2hpdGVzcGFjZSBmb3IgLnB5IGZpbGVzIGhhdmUgYmVlbiBub3JtYWxpemVkLiIiIgogICAgIHJlaW5kZW50Lm1ha2ViYWNrdXAgPSBGYWxzZSAgIyBObyBuZWVkIHRvIGNyZWF0ZSBiYWNrdXBzLgotICAgIHJlc3VsdCA9IG1hcChyZWluZGVudC5jaGVjaywgKHggZm9yIHggaW4gZmlsZV9wYXRocyBpZiB4LmVuZHN3aXRoKCcucHknKSkpCi0gICAgcmV0dXJuIHN1bShyZXN1bHQpCisgICAgZml4ZWQgPSBbXQorICAgIGZvciBwYXRoIGluICh4IGZvciB4IGluIGZpbGVfcGF0aHMgaWYgeC5lbmRzd2l0aCgnLnB5JykpOgorICAgICAgICBpZiByZWluZGVudC5jaGVjayhwYXRoKToKKyAgICAgICAgICAgIGZpeGVkLmFwcGVuZChwYXRoKQorICAgIHJldHVybiBmaXhlZAorCisKK0BzdGF0dXMoIkZpeGluZyBDIGZpbGUgd2hpdGVzcGFjZSIsIGluZm89cmVwb3J0X21vZGlmaWVkX2ZpbGVzKQorZGVmIG5vcm1hbGl6ZV9jX3doaXRlc3BhY2UoZmlsZV9wYXRocyk6CisgICAgIiIiUmVwb3J0IGlmIGFueSBDIGZpbGVzICIiIgorICAgIGZpeGVkID0gW10KKyAgICBmb3IgcGF0aCBpbiBmaWxlX3BhdGhzOgorICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgaWYgJ1x0JyBub3QgaW4gZi5yZWFkKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdW50YWJpZnkucHJvY2VzcyhwYXRoLCA4LCB2ZXJib3NlPUZhbHNlKQorICAgICAgICBmaXhlZC5hcHBlbmQocGF0aCkKKyAgICByZXR1cm4gZml4ZWQKKworCit3c19yZSA9IHJlLmNvbXBpbGUoYnInXHMrKFxyP1xuKSQnKQorCitAc3RhdHVzKCJGaXhpbmcgZG9jcyB3aGl0ZXNwYWNlIiwgaW5mbz1yZXBvcnRfbW9kaWZpZWRfZmlsZXMpCitkZWYgbm9ybWFsaXplX2RvY3Nfd2hpdGVzcGFjZShmaWxlX3BhdGhzKToKKyAgICBmaXhlZCA9IFtdCisgICAgZm9yIHBhdGggaW4gZmlsZV9wYXRoczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICBuZXdfbGluZXMgPSBbd3NfcmUuc3ViKGJyJ1wxJywgbGluZSkgZm9yIGxpbmUgaW4gbGluZXNdCisgICAgICAgICAgICBpZiBuZXdfbGluZXMgIT0gbGluZXM6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHBhdGgsIHBhdGggKyAnLmJhaycpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdfbGluZXMpCisgICAgICAgICAgICAgICAgZml4ZWQuYXBwZW5kKHBhdGgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQgJ0Nhbm5vdCBmaXggJXM6ICVzJyAlIChwYXRoLCBlcnIpCisgICAgcmV0dXJuIGZpeGVkCisKIAogQHN0YXR1cygiRG9jcyBtb2RpZmllZCIsIG1vZGFsPVRydWUpCiBkZWYgZG9jc19tb2RpZmllZChmaWxlX3BhdGhzKToKLSAgICAiIiJSZXBvcnQgaWYgYW55IGZpbGVzIGluIHRoZSBEb2NzIGRpcmVjdG9yeS4iIiIKLSAgICBmb3IgcGF0aCBpbiBmaWxlX3BhdGhzOgotICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoIkRvYyIpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKKyAgICAiIiJSZXBvcnQgaWYgYW55IGZpbGUgaW4gdGhlIERvYyBkaXJlY3RvcnkgaGFzIGJlZW4gY2hhbmdlZC4iIiIKKyAgICByZXR1cm4gYm9vbChmaWxlX3BhdGhzKQorCiAKIEBzdGF0dXMoIk1pc2MvQUNLUyB1cGRhdGVkIiwgbW9kYWw9VHJ1ZSkKIGRlZiBjcmVkaXRfZ2l2ZW4oZmlsZV9wYXRocyk6CiAgICAgIiIiQ2hlY2sgaWYgTWlzYy9BQ0tTIGhhcyBiZWVuIGNoYW5nZWQuIiIiCiAgICAgcmV0dXJuICdNaXNjL0FDS1MnIGluIGZpbGVfcGF0aHMKIAorCiBAc3RhdHVzKCJNaXNjL05FV1MgdXBkYXRlZCIsIG1vZGFsPVRydWUpCiBkZWYgcmVwb3J0ZWRfbmV3cyhmaWxlX3BhdGhzKToKICAgICAiIiJDaGVjayBpZiBNaXNjL05FV1MgaGFzIGJlZW4gY2hhbmdlZC4iIiIKQEAgLTcyLDE0ICsxMzIsMjIgQEAKIAogZGVmIG1haW4oKToKICAgICBmaWxlX3BhdGhzID0gY2hhbmdlZF9maWxlcygpCi0gICAgIyBQRVAgNy84IHZlcmlmaWNhdGlvbi4KLSAgICBub3JtYWxpemVfd2hpdGVzcGFjZShmaWxlX3BhdGhzKQorICAgIHB5dGhvbl9maWxlcyA9IFtmbiBmb3IgZm4gaW4gZmlsZV9wYXRocyBpZiBmbi5lbmRzd2l0aCgnLnB5JyldCisgICAgY19maWxlcyA9IFtmbiBmb3IgZm4gaW4gZmlsZV9wYXRocyBpZiBmbi5lbmRzd2l0aCgoJy5jJywgJy5oJykpXQorICAgIGRvY19maWxlcyA9IFtmbiBmb3IgZm4gaW4gZmlsZV9wYXRocyBpZiBmbi5zdGFydHN3aXRoKCdEb2MnKV0KKyAgICBzcGVjaWFsX2ZpbGVzID0geydNaXNjL0FDS1MnLCAnTWlzYy9ORVdTJ30gJiBzZXQoZmlsZV9wYXRocykKKyAgICAjIFBFUCA4IHdoaXRlc3BhY2UgcnVsZXMgZW5mb3JjZW1lbnQuCisgICAgbm9ybWFsaXplX3doaXRlc3BhY2UocHl0aG9uX2ZpbGVzKQorICAgICMgQyBydWxlcyBlbmZvcmNlbWVudC4KKyAgICBub3JtYWxpemVfY193aGl0ZXNwYWNlKGNfZmlsZXMpCisgICAgIyBEb2Mgd2hpdGVzcGFjZSBlbmZvcmNlbWVudC4KKyAgICBub3JtYWxpemVfZG9jc193aGl0ZXNwYWNlKGRvY19maWxlcykKICAgICAjIERvY3MgdXBkYXRlZC4KLSAgICBkb2NzX21vZGlmaWVkKGZpbGVfcGF0aHMpCisgICAgZG9jc19tb2RpZmllZChkb2NfZmlsZXMpCiAgICAgIyBNaXNjL0FDS1MgY2hhbmdlZC4KLSAgICBjcmVkaXRfZ2l2ZW4oZmlsZV9wYXRocykKKyAgICBjcmVkaXRfZ2l2ZW4oc3BlY2lhbF9maWxlcykKICAgICAjIE1pc2MvTkVXUyBjaGFuZ2VkLgotICAgIHJlcG9ydGVkX25ld3MoZmlsZV9wYXRocykKKyAgICByZXBvcnRlZF9uZXdzKHNwZWNpYWxfZmlsZXMpCiAKICAgICAjIFRlc3Qgc3VpdGUgcnVuIGFuZCBwYXNzZWQuCiAgICAgcHJpbnQKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQtcnN0LnB5IGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC1yc3QucHkKaW5kZXggYmY0MzFkOS4uY2ViODRiZiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC1yc3QucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC1yc3QucHkKQEAgLTMsMjcgKzMsMTIgQEAKICMgTWFrZSBhIHJlU1QgZmlsZSBjb21wbGlhbnQgdG8gb3VyIHByZS1jb21taXQgaG9vay4KICMgQ3VycmVudGx5IGp1c3QgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLWltcG9ydCBzeXMsIHJlLCBzaHV0aWwKK2ltcG9ydCBzeXMKIAotd3NfcmUgPSByZS5jb21waWxlKHInXHMrKFxyP1xuKSQnKQoraW1wb3J0IHBhdGNoY2hlY2sKIAogZGVmIG1haW4oYXJndj1zeXMuYXJndik6Ci0gICAgcnYgPSAwCi0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3ZbMTpdOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6Ci0gICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICBuZXdfbGluZXMgPSBbd3NfcmUuc3ViKHInXDEnLCBsaW5lKSBmb3IgbGluZSBpbiBsaW5lc10KLSAgICAgICAgICAgIGlmIG5ld19saW5lcyAhPSBsaW5lczoKLSAgICAgICAgICAgICAgICBwcmludCAnRml4aW5nICVzLi4uJyAlIGZpbGVuYW1lCi0gICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJy5iYWsnKQotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgotICAgICAgICAgICAgICAgIGYud3JpdGVsaW5lcyhuZXdfbGluZXMpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKLSAgICAgICAgICAgIHByaW50ICdDYW5ub3QgZml4ICVzOiAlcycgJSAoZmlsZW5hbWUsIGVycikKLSAgICAgICAgICAgIHJ2ID0gMQotICAgIHJldHVybiBydgorICAgIHBhdGNoY2hlY2subm9ybWFsaXplX2RvY3Nfd2hpdGVzcGFjZShhcmd2WzE6XSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBzeXMuZXhpdChtYWluKCkpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3NlcnZlLnB5IGIvVG9vbHMvc2NyaXB0cy9zZXJ2ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MDA2MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9zZXJ2ZS5weQpAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKycnJworU21hbGwgd3NnaXJlZiBiYXNlZCB3ZWIgc2VydmVyLiBUYWtlcyBhIHBhdGggdG8gc2VydmUgZnJvbSBhbmQgYW4KK29wdGlvbmFsIHBvcnQgbnVtYmVyIChkZWZhdWx0cyB0byA4MDAwKSwgdGhlbiB0cmllcyB0byBzZXJ2ZSBmaWxlcy4KK01pbWUgdHlwZXMgYXJlIGd1ZXNzZWQgZnJvbSB0aGUgZmlsZSBuYW1lcywgNDA0IGVycm9ycyBhcmUgdGhyb3duCitpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQuIFVzZWQgZm9yIHRoZSBtYWtlIHNlcnZlIHRhcmdldCBpbiBEb2MuCisnJycKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG1pbWV0eXBlcworZnJvbSB3c2dpcmVmIGltcG9ydCBzaW1wbGVfc2VydmVyLCB1dGlsCisKK2RlZiBhcHAoZW52aXJvbiwgcmVzcG9uZCk6CisKKyAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBlbnZpcm9uWydQQVRIX0lORk8nXVsxOl0pCisgICAgaWYgJy4nIG5vdCBpbiBmbi5zcGxpdChvcy5wYXRoLnNlcClbLTFdOgorICAgICAgICBmbiA9IG9zLnBhdGguam9pbihmbiwgJ2luZGV4Lmh0bWwnKQorICAgIHR5cGUgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZShmbilbMF0KKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgcmVzcG9uZCgnMjAwIE9LJywgWygnQ29udGVudC1UeXBlJywgdHlwZSldKQorICAgICAgICByZXR1cm4gdXRpbC5GaWxlV3JhcHBlcihvcGVuKGZuKSkKKyAgICBlbHNlOgorICAgICAgICByZXNwb25kKCc0MDQgTm90IEZvdW5kJywgWygnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKV0pCisgICAgICAgIHJldHVybiBbJ25vdCBmb3VuZCddCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcGF0aCA9IHN5cy5hcmd2WzFdCisgICAgcG9ydCA9IGludChzeXMuYXJndlsyXSkgaWYgbGVuKHN5cy5hcmd2KSA+IDIgZWxzZSA4MDAwCisgICAgaHR0cGQgPSBzaW1wbGVfc2VydmVyLm1ha2Vfc2VydmVyKCcnLCBwb3J0LCBhcHApCisgICAgcHJpbnQgIlNlcnZpbmcgJXMgb24gcG9ydCAlcywgY29udHJvbC1DIHRvIHN0b3AiICUgKHBhdGgsIHBvcnQpCisgICAgdHJ5OgorICAgICAgICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHByaW50ICJcYlxiU2h1dHRpbmcgZG93bi4iCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5IGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQppbmRleCA5YmRmMjM1Li44M2U3M2RhIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKQEAgLTIzLDcgKzIzLDcgQEAKICAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKICAgICAgICAgcHJvY2VzcyhmaWxlbmFtZSwgdGFic2l6ZSkKIAotZGVmIHByb2Nlc3MoZmlsZW5hbWUsIHRhYnNpemUpOgorZGVmIHByb2Nlc3MoZmlsZW5hbWUsIHRhYnNpemUsIHZlcmJvc2U9VHJ1ZSk6CiAgICAgdHJ5OgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKICAgICAgICAgdGV4dCA9IGYucmVhZCgpCkBAIC00MywxMCArNDMsMTAgQEAKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCiAgICAgZXhjZXB0IG9zLmVycm9yOgogICAgICAgICBwYXNzCi0gICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICBmLndyaXRlKG5ld3RleHQpCi0gICAgZi5jbG9zZSgpCi0gICAgcHJpbnQgZmlsZW5hbWUKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKKyAgICAgICAgZi53cml0ZShuZXd0ZXh0KQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50IGZpbGVuYW1lCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQppbmRleCA0MzFhNzZkLi4xNjVjOTEzIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKQEAgLTQwLDggKzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAnXHMqJwogICAgICAgICAgICAgICAgICAgICcoIy4rKT8nKQogCi1kZWYgcGFyc2Vjb2Rlcyhjb2RlcywKLSAgICAgICAgICAgICAgIGxlbj1sZW4sIGZpbHRlcj1maWx0ZXIscmFuZ2U9cmFuZ2UpOgorZGVmIHBhcnNlY29kZXMoY29kZXMsIGxlbj1sZW4sIHJhbmdlPXJhbmdlKToKIAogICAgICIiIiBDb252ZXJ0cyBjb2RlIGNvbWJpbmF0aW9ucyB0byBlaXRoZXIgYSBzaW5nbGUgY29kZSBpbnRlZ2VyCiAgICAgICAgIG9yIGEgdHVwbGUgb2YgaW50ZWdlcnMuCkBAIC02Miw3ICs2MSw3IEBACiAgICAgICAgICAgICBsW2ldID0gaW50KGxbaV0sMTYpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgbFtpXSA9IE5vbmUKLSAgICBsID0gZmlsdGVyKGxhbWJkYSB4OiB4IGlzIG5vdCBOb25lLCBsKQorICAgIGwgPSBbeCBmb3IgeCBpbiBsIGlmIHggaXMgbm90IE5vbmVdCiAgICAgaWYgbGVuKGwpID09IDE6CiAgICAgICAgIHJldHVybiBsWzBdCiAgICAgZWxzZToKQEAgLTEzOCw3ICsxMzcsNyBAQAogCiAgICAgbCA9IFtdCiAgICAgYXBwZW5kID0gbC5hcHBlbmQKLSAgICBpZiBtYXAuaGFzX2tleSgiSURFTlRJVFkiKToKKyAgICBpZiAiSURFTlRJVFkiIGluIG1hcDoKICAgICAgICAgYXBwZW5kKCIlcyA9IGNvZGVjcy5tYWtlX2lkZW50aXR5X2RpY3QocmFuZ2UoJWQpKSIgJQogICAgICAgICAgICAgICAgKHZhcm5hbWUsIG1hcFsiSURFTlRJVFkiXSkpCiAgICAgICAgIGFwcGVuZCgiJXMudXBkYXRlKHsiICUgdmFybmFtZSkKQEAgLTE1MCw4ICsxNDksNyBAQAogICAgICAgICBzcGxpdHMgPSAwCiAgICAgICAgIGlkZW50aXR5ID0gMAogCi0gICAgbWFwcGluZ3MgPSBtYXAuaXRlbXMoKQotICAgIG1hcHBpbmdzLnNvcnQoKQorICAgIG1hcHBpbmdzID0gc29ydGVkKG1hcC5pdGVtcygpKQogICAgIGkgPSAwCiAgICAga2V5X3ByZWNpc2lvbiwgdmFsdWVfcHJlY2lzaW9uID0gcHJlY2lzaW9ucwogICAgIGZvciBtYXBrZXksIG1hcHZhbHVlIGluIG1hcHBpbmdzOgpAQCAtMTk5LDExICsxOTcsMTAgQEAKICAgICBhcHBlbmQoJyVzID0gKCcgJSB2YXJuYW1lKQogCiAgICAgIyBBbmFseXplIG1hcCBhbmQgY3JlYXRlIHRhYmxlIGRpY3QKLSAgICBtYXBwaW5ncyA9IG1hcC5pdGVtcygpCi0gICAgbWFwcGluZ3Muc29ydCgpCisgICAgbWFwcGluZ3MgPSBzb3J0ZWQobWFwLml0ZW1zKCkpCiAgICAgdGFibGUgPSB7fQogICAgIG1heGtleSA9IDAKLSAgICBpZiBtYXAuaGFzX2tleSgnSURFTlRJVFknKToKKyAgICBpZiAnSURFTlRJVFknIGluIG1hcDoKICAgICAgICAgZm9yIGtleSBpbiByYW5nZSgyNTYpOgogICAgICAgICAgICAgdGFibGVba2V5XSA9IChrZXksICcnKQogICAgICAgICBtYXhrZXkgPSAyNTUKQEAgLTQyMSw2ICs0MTgsNiBAQAogCiAgICAgaW1wb3J0IHN5cwogICAgIGlmIDE6Ci0gICAgICAgIGFwcGx5KGNvbnZlcnRkaXIsdHVwbGUoc3lzLmFyZ3ZbMTpdKSkKKyAgICAgICAgY29udmVydGRpcigqc3lzLmFyZ3ZbMTpdKQogICAgIGVsc2U6Ci0gICAgICAgIGFwcGx5KHJld3JpdGVweXRob25kaXIsdHVwbGUoc3lzLmFyZ3ZbMTpdKSkKKyAgICAgICAgcmV3cml0ZXB5dGhvbmRpcigqc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weSBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlNzIzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWMucHkKQEAgLTAsMCArMSw2MSBAQAorIiIiVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIGEgUHl0aG9uIGNvZGVjIG1vZHVsZSBmcm9tIGEgV2luZG93cyBDb2RlIFBhZ2UuCisKK0l0IHVzZXMgdGhlIGZ1bmN0aW9uIE11bHRpQnl0ZVRvV2lkZUNoYXIgdG8gZ2VuZXJhdGUgYSBkZWNvZGluZyB0YWJsZS4KKyIiIgorCitpbXBvcnQgY3R5cGVzCitmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKK2Zyb20gZ2VuY29kZWMgaW1wb3J0IGNvZGVnZW4KK2ltcG9ydCB1bmljb2RlZGF0YQorCitkZWYgZ2Vud2lubWFwKGNvZGVwYWdlKToKKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5NdWx0aUJ5dGVUb1dpZGVDaGFyCisgICAgTXVsdGlCeXRlVG9XaWRlQ2hhci5hcmd0eXBlcyA9IFt3aW50eXBlcy5VSU5ULCB3aW50eXBlcy5EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbnR5cGVzLkxQQ1NUUiwgY3R5cGVzLmNfaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuTFBXU1RSLCBjdHlwZXMuY19pbnRdCisgICAgTXVsdGlCeXRlVG9XaWRlQ2hhci5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisKKyAgICBlbmMydW5pID0ge30KKworICAgIGZvciBpIGluIHJhbmdlKDMyKSArIFsxMjddOgorICAgICAgICBlbmMydW5pW2ldID0gKGksICdDT05UUk9MIENIQVJBQ1RFUicpCisKKyAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgorICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDIpCisgICAgICAgIHJldCA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoCisgICAgICAgICAgICBjb2RlcGFnZSwgMCwKKyAgICAgICAgICAgIGNocihpKSwgMSwKKyAgICAgICAgICAgIGJ1ZiwgMikKKyAgICAgICAgYXNzZXJ0IHJldCA9PSAxLCAiaW52YWxpZCBjb2RlIHBhZ2UiCisgICAgICAgIGFzc2VydCBidWZbMV0gPT0gJ1x4MDAnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSB1bmljb2RlZGF0YS5uYW1lKGJ1ZlswXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVuYzJ1bmlbaV1bMV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycKKworICAgICAgICBlbmMydW5pW2ldID0gKG9yZChidWZbMF0pLCBuYW1lKQorCisgICAgcmV0dXJuIGVuYzJ1bmkKKworZGVmIGdlbndpbmNvZGVjKGNvZGVwYWdlKToKKyAgICBpbXBvcnQgcGxhdGZvcm0KKyAgICBtYXAgPSBnZW53aW5tYXAoY29kZXBhZ2UpCisgICAgZW5jb2RpbmduYW1lID0gJ2NwJWQnICUgY29kZXBhZ2UKKyAgICBjb2RlID0gY29kZWdlbigiIiwgbWFwLCBlbmNvZGluZ25hbWUpCisgICAgIyBSZXBsYWNlIGZpcnN0IGxpbmVzIHdpdGggb3VyIG93biBkb2NzdHJpbmcKKyAgICBjb2RlID0gJycnXAorIiIiUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjICVzIGdlbmVyYXRlZCBvbiBXaW5kb3dzOgorJXMgd2l0aCB0aGUgY29tbWFuZDoKKyAgcHl0aG9uIFRvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWMucHkgJXMKKyIiIiMiCisnJycgJSAoZW5jb2RpbmduYW1lLCAnICcuam9pbihwbGF0Zm9ybS53aW4zMl92ZXIoKSksIGNvZGVwYWdlCisgICAgICApICsgY29kZS5zcGxpdCgnIiIiIyInLCAxKVsxXQorCisgICAgcHJpbnQgY29kZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMKKyAgICBnZW53aW5jb2RlYyhpbnQoc3lzLmFyZ3ZbMV0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlY3MuYmF0IGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlY3MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjhkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjcy5iYXQKQEAgLTAsMCArMSw3IEBACitAcmVtIFJlY3JlYXRlIHNvbWUgcHl0aG9uIGNoYXJtYXAgY29kZWNzIGZyb20gdGhlIFdpbmRvd3MgZnVuY3Rpb24KK0ByZW0gTXVsdGlCeXRlVG9XaWRlQ2hhci4KKworQGNkIC9kICV+ZHAwCitAbWtkaXIgYnVpbGQKK0ByZW0gQXJhYmljIERPUyBjb2RlIHBhZ2UKK2M6XHB5dGhvbjI2XHB5dGhvbiBnZW53aW5jb2RlYy5weSA3MjAgPiBidWlsZC9jcDcyMC5weQpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQppbmRleCAzY2Q1YTFmLi4zZjVhZDUxIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQorKysgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQpAQCAtMzAsMTAgKzMwLDEzIEBACiBWRVJTSU9OID0gIjIuNiIKIAogIyBUaGUgVW5pY29kZSBEYXRhYmFzZQotVU5JREFUQV9WRVJTSU9OID0gIjUuMS4wIgorVU5JREFUQV9WRVJTSU9OID0gIjUuMi4wIgogVU5JQ09ERV9EQVRBID0gIlVuaWNvZGVEYXRhJXMudHh0IgogQ09NUE9TSVRJT05fRVhDTFVTSU9OUyA9ICJDb21wb3NpdGlvbkV4Y2x1c2lvbnMlcy50eHQiCiBFQVNUQVNJQU5fV0lEVEggPSAiRWFzdEFzaWFuV2lkdGglcy50eHQiCitVTklIQU4gPSAiVW5paGFuJXMudHh0IgorREVSSVZFRE5PUk1BTElaQVRJT05fUFJPUFMgPSAiRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcyVzLnR4dCIKK0xJTkVfQlJFQUsgPSAiTGluZUJyZWFrJXMudHh0IgogCiBvbGRfdmVyc2lvbnMgPSBbIjMuMi4wIl0KIApAQCAtNDgsNiArNTEsOCBAQAogCiBFQVNUQVNJQU5XSURUSF9OQU1FUyA9IFsgIkYiLCAiSCIsICJXIiwgIk5hIiwgIkEiLCAiTiIgXQogCitNQU5EQVRPUllfTElORV9CUkVBS1MgPSBbICJCSyIsICJDUiIsICJMRiIsICJOTCIgXQorCiAjIG5vdGU6IHNob3VsZCBtYXRjaCBkZWZpbml0aW9ucyBpbiBPYmplY3RzL3VuaWNvZGVjdHlwZS5jCiBBTFBIQV9NQVNLID0gMHgwMQogREVDSU1BTF9NQVNLID0gMHgwMgpAQCAtNTgsNiArNjMsNyBAQAogVElUTEVfTUFTSyA9IDB4NDAKIFVQUEVSX01BU0sgPSAweDgwCiBOT0RFTFRBX01BU0sgPSAweDEwMAorTlVNRVJJQ19NQVNLID0gMHgyMDAKIAogZGVmIG1ha2V0YWJsZXModHJhY2U9MCk6CiAKQEAgLTY2LDcgKzcyLDEwIEBACiAgICAgdmVyc2lvbiA9ICIiCiAgICAgdW5pY29kZSA9IFVuaWNvZGVEYXRhKFVOSUNPREVfREFUQSAlIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMgJSB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBFQVNUQVNJQU5fV0lEVEggJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICBFQVNUQVNJQU5fV0lEVEggJSB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBVTklIQU4gJSB2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBERVJJVkVETk9STUFMSVpBVElPTl9QUk9QUyAlIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVfQlJFQUsgJSB2ZXJzaW9uKQogCiAgICAgcHJpbnQgbGVuKGZpbHRlcihOb25lLCB1bmljb2RlLnRhYmxlKSksICJjaGFyYWN0ZXJzIgogCkBAIC03NCw3ICs4Myw4IEBACiAgICAgICAgIHByaW50ICItLS0gUmVhZGluZyIsIFVOSUNPREVfREFUQSAlICgiLSIrdmVyc2lvbiksICIuLi4iCiAgICAgICAgIG9sZF91bmljb2RlID0gVW5pY29kZURhdGEoVU5JQ09ERV9EQVRBICUgKCItIit2ZXJzaW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QT1NJVElPTl9FWENMVVNJT05TICUgKCItIit2ZXJzaW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQVNUQVNJQU5fV0lEVEggJSAoIi0iK3ZlcnNpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVBU1RBU0lBTl9XSURUSCAlICgiLSIrdmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JSEFOICUgKCItIit2ZXJzaW9uKSkKICAgICAgICAgcHJpbnQgbGVuKGZpbHRlcihOb25lLCBvbGRfdW5pY29kZS50YWJsZSkpLCAiY2hhcmFjdGVycyIKICAgICAgICAgbWVyZ2Vfb2xkX3ZlcnNpb24odmVyc2lvbiwgdW5pY29kZSwgb2xkX3VuaWNvZGUpCiAKQEAgLTg3LDcgKzk3LDcgQEAKIAogZGVmIG1ha2V1bmljb2RlZGF0YSh1bmljb2RlLCB0cmFjZSk6CiAKLSAgICBkdW1teSA9ICgwLCAwLCAwLCAwLCAwKQorICAgIGR1bW15ID0gKDAsIDAsIDAsIDAsIDAsIDApCiAgICAgdGFibGUgPSBbZHVtbXldCiAgICAgY2FjaGUgPSB7MDogZHVtbXl9CiAgICAgaW5kZXggPSBbMF0gKiBsZW4odW5pY29kZS5jaGFycykKQEAgLTEwNyw4ICsxMTcsMTAgQEAKICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWwgPSBCSURJUkVDVElPTkFMX05BTUVTLmluZGV4KHJlY29yZFs0XSkKICAgICAgICAgICAgIG1pcnJvcmVkID0gcmVjb3JkWzldID09ICJZIgogICAgICAgICAgICAgZWFzdGFzaWFud2lkdGggPSBFQVNUQVNJQU5XSURUSF9OQU1FUy5pbmRleChyZWNvcmRbMTVdKQorICAgICAgICAgICAgbm9ybWFsaXphdGlvbnF1aWNrY2hlY2sgPSByZWNvcmRbMTddCiAgICAgICAgICAgICBpdGVtID0gKAotICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBjb21iaW5pbmcsIGJpZGlyZWN0aW9uYWwsIG1pcnJvcmVkLCBlYXN0YXNpYW53aWR0aAorICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBjb21iaW5pbmcsIGJpZGlyZWN0aW9uYWwsIG1pcnJvcmVkLCBlYXN0YXNpYW53aWR0aCwKKyAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9ucXVpY2tjaGVjawogICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICMgYWRkIGVudHJ5IHRvIGluZGV4IGFuZCBpdGVtIHRhYmxlcwogICAgICAgICAgICAgaSA9IGNhY2hlLmdldChpdGVtKQpAQCAtMTQ4LDggKzE2MCw3IEBACiAgICAgICAgICAgICAgICAgcHJlZml4ID0gaQogICAgICAgICAgICAgICAgIGFzc2VydCBwcmVmaXggPCAyNTYKICAgICAgICAgICAgICAgICAjIGNvbnRlbnQKLSAgICAgICAgICAgICAgICBkZWNvbXAgPSBbcHJlZml4ICsgKGxlbihkZWNvbXApPDw4KV0gK1wKLSAgICAgICAgICAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHM6IGludChzLCAxNiksIGRlY29tcCkKKyAgICAgICAgICAgICAgICBkZWNvbXAgPSBbcHJlZml4ICsgKGxlbihkZWNvbXApPDw4KV0gKyBbaW50KHMsIDE2KSBmb3IgcyBpbiBkZWNvbXBdCiAgICAgICAgICAgICAgICAgIyBDb2xsZWN0IE5GQyBwYWlycwogICAgICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXggYW5kIGxlbihkZWNvbXApID09IDMgYW5kIFwKICAgICAgICAgICAgICAgICAgICBjaGFyIG5vdCBpbiB1bmljb2RlLmV4Y2x1c2lvbnMgYW5kIFwKQEAgLTIyMiw3ICsyMzMsNyBAQAogICAgIHByaW50ID4+ZnAsIFwKICAgICAgICAgICAiY29uc3QgX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZCBfUHlVbmljb2RlX0RhdGFiYXNlX1JlY29yZHNbXSA9IHsiCiAgICAgZm9yIGl0ZW0gaW4gdGFibGU6Ci0gICAgICAgIHByaW50ID4+ZnAsICIgICAgeyVkLCAlZCwgJWQsICVkLCAlZH0sIiAlIGl0ZW0KKyAgICAgICAgcHJpbnQgPj5mcCwgIiAgICB7JWQsICVkLCAlZCwgJWQsICVkLCAlZH0sIiAlIGl0ZW0KICAgICBwcmludCA+PmZwLCAifTsiCiAgICAgcHJpbnQgPj5mcAogCkBAIC0zNDgsNiArMzU5LDkgQEAKICAgICB0YWJsZSA9IFtkdW1teV0KICAgICBjYWNoZSA9IHswOiBkdW1teX0KICAgICBpbmRleCA9IFswXSAqIGxlbih1bmljb2RlLmNoYXJzKQorICAgIG51bWVyaWMgPSB7fQorICAgIHNwYWNlcyA9IFtdCisgICAgbGluZWJyZWFrcyA9IFtdCiAKICAgICBmb3IgY2hhciBpbiB1bmljb2RlLmNoYXJzOgogICAgICAgICByZWNvcmQgPSB1bmljb2RlLnRhYmxlW2NoYXJdCkBAIC0zNTUsMTYgKzM2OSwxOSBAQAogICAgICAgICAgICAgIyBleHRyYWN0IGRhdGFiYXNlIHByb3BlcnRpZXMKICAgICAgICAgICAgIGNhdGVnb3J5ID0gcmVjb3JkWzJdCiAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsID0gcmVjb3JkWzRdCisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcmVjb3JkWzE2XQogICAgICAgICAgICAgZmxhZ3MgPSAwCiAgICAgICAgICAgICBkZWx0YSA9IFRydWUKICAgICAgICAgICAgIGlmIGNhdGVnb3J5IGluIFsiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCAiTG8iXToKICAgICAgICAgICAgICAgICBmbGFncyB8PSBBTFBIQV9NQVNLCiAgICAgICAgICAgICBpZiBjYXRlZ29yeSA9PSAiTGwiOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IExPV0VSX01BU0sKLSAgICAgICAgICAgIGlmIGNhdGVnb3J5ID09ICJabCIgb3IgYmlkaXJlY3Rpb25hbCA9PSAiQiI6CisgICAgICAgICAgICBpZiAnTGluZV9CcmVhaycgaW4gcHJvcGVydGllcyBvciBiaWRpcmVjdGlvbmFsID09ICJCIjoKICAgICAgICAgICAgICAgICBmbGFncyB8PSBMSU5FQlJFQUtfTUFTSworICAgICAgICAgICAgICAgIGxpbmVicmVha3MuYXBwZW5kKGNoYXIpCiAgICAgICAgICAgICBpZiBjYXRlZ29yeSA9PSAiWnMiIG9yIGJpZGlyZWN0aW9uYWwgaW4gKCJXUyIsICJCIiwgIlMiKToKICAgICAgICAgICAgICAgICBmbGFncyB8PSBTUEFDRV9NQVNLCisgICAgICAgICAgICAgICAgc3BhY2VzLmFwcGVuZChjaGFyKQogICAgICAgICAgICAgaWYgY2F0ZWdvcnkgPT0gIkx0IjoKICAgICAgICAgICAgICAgICBmbGFncyB8PSBUSVRMRV9NQVNLCiAgICAgICAgICAgICBpZiBjYXRlZ29yeSA9PSAiTHUiOgpAQCAtNDA3LDYgKzQyNCw5IEBACiAgICAgICAgICAgICBpZiByZWNvcmRbN106CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRElHSVRfTUFTSwogICAgICAgICAgICAgICAgIGRpZ2l0ID0gaW50KHJlY29yZFs3XSkKKyAgICAgICAgICAgIGlmIHJlY29yZFs4XToKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBOVU1FUklDX01BU0sKKyAgICAgICAgICAgICAgICBudW1lcmljLnNldGRlZmF1bHQocmVjb3JkWzhdLCBbXSkuYXBwZW5kKGNoYXIpCiAgICAgICAgICAgICBpdGVtID0gKAogICAgICAgICAgICAgICAgIHVwcGVyLCBsb3dlciwgdGl0bGUsIGRlY2ltYWwsIGRpZ2l0LCBmbGFncwogICAgICAgICAgICAgICAgICkKQEAgLTQxOCw2ICs0MzgsOSBAQAogICAgICAgICAgICAgaW5kZXhbY2hhcl0gPSBpCiAKICAgICBwcmludCBsZW4odGFibGUpLCAidW5pcXVlIGNoYXJhY3RlciB0eXBlIGVudHJpZXMiCisgICAgcHJpbnQgc3VtKG1hcChsZW4sIG51bWVyaWMudmFsdWVzKCkpKSwgIm51bWVyaWMgY29kZSBwb2ludHMiCisgICAgcHJpbnQgbGVuKHNwYWNlcyksICJ3aGl0ZXNwYWNlIGNvZGUgcG9pbnRzIgorICAgIHByaW50IGxlbihsaW5lYnJlYWtzKSwgImxpbmVicmVhayBjb2RlIHBvaW50cyIKIAogICAgIHByaW50ICItLS0gV3JpdGluZyIsIEZJTEUsICIuLi4iCiAKQEAgLTQzOSw2ICs0NjIsMTAwIEBACiAgICAgQXJyYXkoImluZGV4MSIsIGluZGV4MSkuZHVtcChmcCwgdHJhY2UpCiAgICAgQXJyYXkoImluZGV4MiIsIGluZGV4MikuZHVtcChmcCwgdHJhY2UpCiAKKyAgICAjIEdlbmVyYXRlIGNvZGUgZm9yIF9QeVVuaWNvZGVfVG9OdW1lcmljKCkKKyAgICBudW1lcmljX2l0ZW1zID0gc29ydGVkKG51bWVyaWMuaXRlbXMoKSkKKyAgICBwcmludCA+PmZwLCAnLyogUmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBhcyBkb3VibGUgZm9yIFVuaWNvZGUgY2hhcmFjdGVycycKKyAgICBwcmludCA+PmZwLCAnICogaGF2aW5nIHRoaXMgcHJvcGVydHksIC0xLjAgb3RoZXJ3aXNlLicKKyAgICBwcmludCA+PmZwLCAnICovJworICAgIHByaW50ID4+ZnAsICdkb3VibGUgX1B5VW5pY29kZV9Ub051bWVyaWMoUHlfVU5JQ09ERSBjaCknCisgICAgcHJpbnQgPj5mcCwgJ3snCisgICAgcHJpbnQgPj5mcCwgJyAgICBzd2l0Y2ggKGNoKSB7JworICAgIGZvciB2YWx1ZSwgY29kZXBvaW50cyBpbiBudW1lcmljX2l0ZW1zOgorICAgICAgICAjIFR1cm4gdGV4dCBpbnRvIGZsb2F0IGxpdGVyYWxzCisgICAgICAgIHBhcnRzID0gdmFsdWUuc3BsaXQoJy8nKQorICAgICAgICBwYXJ0cyA9IFtyZXByKGZsb2F0KHBhcnQpKSBmb3IgcGFydCBpbiBwYXJ0c10KKyAgICAgICAgdmFsdWUgPSAnLycuam9pbihwYXJ0cykKKworICAgICAgICBoYXN3aWRlID0gRmFsc2UKKyAgICAgICAgaGFzbm9uZXdpZGUgPSBGYWxzZQorICAgICAgICBjb2RlcG9pbnRzLnNvcnQoKQorICAgICAgICBmb3IgY29kZXBvaW50IGluIGNvZGVwb2ludHM6CisgICAgICAgICAgICBpZiBjb2RlcG9pbnQgPCAweDEwMDAwOgorICAgICAgICAgICAgICAgIGhhc25vbmV3aWRlID0gVHJ1ZQorICAgICAgICAgICAgaWYgY29kZXBvaW50ID49IDB4MTAwMDAgYW5kIG5vdCBoYXN3aWRlOgorICAgICAgICAgICAgICAgIHByaW50ID4+ZnAsICcjaWZkZWYgUHlfVU5JQ09ERV9XSURFJworICAgICAgICAgICAgICAgIGhhc3dpZGUgPSBUcnVlCisgICAgICAgICAgICBwcmludCA+PmZwLCAnICAgIGNhc2UgMHglMDRYOicgJSAoY29kZXBvaW50LCkKKyAgICAgICAgaWYgaGFzd2lkZSBhbmQgaGFzbm9uZXdpZGU6CisgICAgICAgICAgICBwcmludCA+PmZwLCAnI2VuZGlmJworICAgICAgICBwcmludCA+PmZwLCAnICAgICAgICByZXR1cm4gKGRvdWJsZSkgJXM7JyAlICh2YWx1ZSwpCisgICAgICAgIGlmIGhhc3dpZGUgYW5kIG5vdCBoYXNub25ld2lkZToKKyAgICAgICAgICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisgICAgcHJpbnQgPj5mcCwnICAgIH0nCisgICAgcHJpbnQgPj5mcCwnICAgIHJldHVybiAtMS4wOycKKyAgICBwcmludCA+PmZwLCd9JworICAgIHByaW50ID4+ZnAKKworICAgICMgR2VuZXJhdGUgY29kZSBmb3IgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoKQorICAgIHByaW50ID4+ZnAsICIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiCisgICAgcHJpbnQgPj5mcCwgIiAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuIgorICAgIHByaW50ID4+ZnAsICIgKi8iCisgICAgcHJpbnQgPj5mcCwgJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKScKKyAgICBwcmludCA+PmZwLCAneycKKyAgICBwcmludCA+PmZwLCAnI2lmZGVmIFdBTlRfV0NUWVBFX0ZVTkNUSU9OUycKKyAgICBwcmludCA+PmZwLCAnICAgIHJldHVybiBpc3dzcGFjZShjaCk7JworICAgIHByaW50ID4+ZnAsICcjZWxzZScKKyAgICBwcmludCA+PmZwLCAnICAgIHN3aXRjaCAoY2gpIHsnCisKKyAgICBoYXN3aWRlID0gRmFsc2UKKyAgICBoYXNub25ld2lkZSA9IEZhbHNlCisgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQoc3BhY2VzKToKKyAgICAgICAgaWYgY29kZXBvaW50IDwgMHgxMDAwMDoKKyAgICAgICAgICAgIGhhc25vbmV3aWRlID0gVHJ1ZQorICAgICAgICBpZiBjb2RlcG9pbnQgPj0gMHgxMDAwMCBhbmQgbm90IGhhc3dpZGU6CisgICAgICAgICAgICBwcmludCA+PmZwLCAnI2lmZGVmIFB5X1VOSUNPREVfV0lERScKKyAgICAgICAgICAgIGhhc3dpZGUgPSBUcnVlCisgICAgICAgIHByaW50ID4+ZnAsICcgICAgY2FzZSAweCUwNFg6JyAlIChjb2RlcG9pbnQsKQorICAgIGlmIGhhc3dpZGUgYW5kIGhhc25vbmV3aWRlOgorICAgICAgICBwcmludCA+PmZwLCAnI2VuZGlmJworICAgIHByaW50ID4+ZnAsICcgICAgICAgIHJldHVybiAxOycKKyAgICBpZiBoYXN3aWRlIGFuZCBub3QgaGFzbm9uZXdpZGU6CisgICAgICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisKKyAgICBwcmludCA+PmZwLCcgICAgfScKKyAgICBwcmludCA+PmZwLCcgICAgcmV0dXJuIDA7JworICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisgICAgcHJpbnQgPj5mcCwnfScKKyAgICBwcmludCA+PmZwCisKKyAgICAjIEdlbmVyYXRlIGNvZGUgZm9yIF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoKQorICAgIHByaW50ID4+ZnAsICIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGxpbmUgYnJlYWsiCisgICAgcHJpbnQgPj5mcCwgIiAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbCIKKyAgICBwcmludCA+PmZwLCAiICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiIKKyAgICBwcmludCA+PmZwLCAiICovIgorICAgIHByaW50ID4+ZnAsICdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKScKKyAgICBwcmludCA+PmZwLCAneycKKyAgICBwcmludCA+PmZwLCAnICAgIHN3aXRjaCAoY2gpIHsnCisgICAgaGFzd2lkZSA9IEZhbHNlCisgICAgaGFzbm9uZXdpZGUgPSBGYWxzZQorICAgIGZvciBjb2RlcG9pbnQgaW4gc29ydGVkKGxpbmVicmVha3MpOgorICAgICAgICBpZiBjb2RlcG9pbnQgPCAweDEwMDAwOgorICAgICAgICAgICAgaGFzbm9uZXdpZGUgPSBUcnVlCisgICAgICAgIGlmIGNvZGVwb2ludCA+PSAweDEwMDAwIGFuZCBub3QgaGFzd2lkZToKKyAgICAgICAgICAgIHByaW50ID4+ZnAsICcjaWZkZWYgUHlfVU5JQ09ERV9XSURFJworICAgICAgICAgICAgaGFzd2lkZSA9IFRydWUKKyAgICAgICAgcHJpbnQgPj5mcCwgJyAgICBjYXNlIDB4JTA0WDonICUgKGNvZGVwb2ludCwpCisgICAgaWYgaGFzd2lkZSBhbmQgaGFzbm9uZXdpZGU6CisgICAgICAgIHByaW50ID4+ZnAsICcjZW5kaWYnCisgICAgcHJpbnQgPj5mcCwgJyAgICAgICAgcmV0dXJuIDE7JworICAgIGlmIGhhc3dpZGUgYW5kIG5vdCBoYXNub25ld2lkZToKKyAgICAgICAgcHJpbnQgPj5mcCwgJyNlbmRpZicKKworICAgIHByaW50ID4+ZnAsJyAgICB9JworICAgIHByaW50ID4+ZnAsJyAgICByZXR1cm4gMDsnCisgICAgcHJpbnQgPj5mcCwnfScKKyAgICBwcmludCA+PmZwCisKICAgICBmcC5jbG9zZSgpCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4NiwxMiArNjAzLDEwIEBACiAgICAgd29yZGxpc3QgPSB3b3Jkcy5pdGVtcygpCiAKICAgICAjIHNvcnQgb24gZmFsbGluZyBmcmVxdWVuY3ksIHRoZW4gYnkgbmFtZQotICAgIGRlZiBjbXB3b3JkcygoYXdvcmQsIGFsaXN0KSwoYndvcmQsIGJsaXN0KSk6Ci0gICAgICAgIHIgPSAtY21wKGxlbihhbGlzdCksbGVuKGJsaXN0KSkKLSAgICAgICAgaWYgcjoKLSAgICAgICAgICAgIHJldHVybiByCi0gICAgICAgIHJldHVybiBjbXAoYXdvcmQsIGJ3b3JkKQotICAgIHdvcmRsaXN0LnNvcnQoY21wd29yZHMpCisgICAgZGVmIHdvcmRfa2V5KGEpOgorICAgICAgICBhd29yZCwgYWxpc3QgPSBhCisgICAgICAgIHJldHVybiAtbGVuKGFsaXN0KSwgYXdvcmQKKyAgICB3b3JkbGlzdC5zb3J0KGtleT13b3JkX2tleSkKIAogICAgICMgZmlndXJlIG91dCBob3cgbWFueSBwaHJhc2Vib29rIGVzY2FwZXMgd2UgbmVlZAogICAgIGVzY2FwZXMgPSAwCkBAIC01MTUsNyArNjMwLDcgQEAKICAgICAjIGxlbmd0aCAodG8gbWF4aW1pemUgb3ZlcmxhcCkKIAogICAgIHdvcmRsaXN0LCB3b3JkdGFpbCA9IHdvcmRsaXN0WzpzaG9ydF0sIHdvcmRsaXN0W3Nob3J0Ol0KLSAgICB3b3JkdGFpbC5zb3J0KGxhbWJkYSBhLCBiOiBsZW4oYlswXSktbGVuKGFbMF0pKQorICAgIHdvcmR0YWlsLnNvcnQoa2V5PWxhbWJkYSBhOiBhWzBdLCByZXZlcnNlPVRydWUpCiAgICAgd29yZGxpc3QuZXh0ZW5kKHdvcmR0YWlsKQogCiAgICAgIyBnZW5lcmF0ZSBsZXhpY29uIGZyb20gd29yZHMKQEAgLTY1NiwxMiArNzcxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGVsaWYgayA9PSA4OgogICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAiTlVNRVJJQyIsaGV4KGkpLCBgb2xkLnRhYmxlW2ldW2tdYCwgbmV3LnRhYmxlW2ldW2tdCiAgICAgICAgICAgICAgICAgICAgICAgICAjIFNpbmNlIDAgZW5jb2RlcyAibm8gY2hhbmdlIiwgdGhlIG9sZCB2YWx1ZSBpcyBiZXR0ZXIgbm90IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCB2YWx1ZSAhPSAiMCIgYW5kIHZhbHVlICE9ICItMSIKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2NoYW5nZXNbaV0gPSAtMQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmUubWF0Y2goIl5bMC05XSskIiwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19jaGFuZ2VzW2ldID0gaW50KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfY2hhbmdlc1tpXSA9IGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBudW1lcmljX2NoYW5nZXNbaV0gbm90IGluICgwLCAtMSkKICAgICAgICAgICAgICAgICAgICAgZWxpZiBrID09IDk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA9PSAnWSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlycm9yZWRfY2hhbmdlc1tpXSA9ICcxJwpAQCAtNjc5LDYgKzc5Myw5IEBACiAgICAgICAgICAgICAgICAgICAgIGVsaWYgayA9PSAxNDoKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlIHRvIHNpbXBsZSB0aXRsZWNhc2UgbWFwcGluZzsgaWdub3JlCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsaWYgayA9PSAxNjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlIHRvIHByb3BlcnRpZXM7IG5vdCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIERpZmZlcmVuY2UoRXhjZXB0aW9uKTpwYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEaWZmZXJlbmNlLCAoaGV4KGkpLCBrLCBvbGQudGFibGVbaV0sIG5ldy50YWJsZVtpXSkKQEAgLTY5NCwxMSArODExLDE2IEBACiAKICMgbG9hZCBhIHVuaWNvZGUtZGF0YSBmaWxlIGZyb20gZGlzawogCi1pbXBvcnQgc3lzCi0KIGNsYXNzIFVuaWNvZGVEYXRhOgorICAgICMgUmVjb3JkIHN0cnVjdHVyZToKKyAgICAjIFtJRCwgbmFtZSwgY2F0ZWdvcnksIGNvbWJpbmluZywgYmlkaSwgZGVjb21wLCAgKDYpCisgICAgIyAgZGVjaW1hbCwgZGlnaXQsIG51bWVyaWMsIGJpZGktbWlycm9yZWQsIFVuaWNvZGUtMS1uYW1lLCAoMTEpCisgICAgIyAgSVNPLWNvbW1lbnQsIHVwcGVyY2FzZSwgbG93ZXJjYXNlLCB0aXRsZWNhc2UsIGVhLXdpZHRoLCAoMTYpCisgICAgIyAgcHJvcGVydGllc10gKDE3KQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBleGNsdXNpb25zLCBlYXN0YXNpYW53aWR0aCwgZXhwYW5kPTEpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgZXhjbHVzaW9ucywgZWFzdGFzaWFud2lkdGgsIHVuaWhhbiwKKyAgICAgICAgICAgICAgICAgZGVyaXZlZG5vcm1hbGl6YXRpb25wcm9wcz1Ob25lLCBsaW5lYnJlYWtwcm9wcz1Ob25lLAorICAgICAgICAgICAgICAgICBleHBhbmQ9MSk6CiAgICAgICAgIHNlbGYuY2hhbmdlZCA9IFtdCiAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGVuYW1lKQogICAgICAgICB0YWJsZSA9IFtOb25lXSAqIDB4MTEwMDAwCkBAIC03NjIsNiArODg0LDU4IEBACiAgICAgICAgICAgICBpZiB0YWJsZVtpXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB0YWJsZVtpXS5hcHBlbmQod2lkdGhzW2ldKQogCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDB4MTEwMDAwKToKKyAgICAgICAgICAgIGlmIHRhYmxlW2ldIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldLmFwcGVuZChzZXQoKSkKKyAgICAgICAgaWYgbGluZWJyZWFrcHJvcHM6CisgICAgICAgICAgICBmb3IgcyBpbiBvcGVuKGxpbmVicmVha3Byb3BzKToKKyAgICAgICAgICAgICAgICBzID0gcy5wYXJ0aXRpb24oJyMnKVswXQorICAgICAgICAgICAgICAgIHMgPSBbaS5zdHJpcCgpIGZvciBpIGluIHMuc3BsaXQoJzsnKV0KKyAgICAgICAgICAgICAgICBpZiBsZW4ocykgPCAyIG9yIHNbMV0gbm90IGluIE1BTkRBVE9SWV9MSU5FX0JSRUFLUzoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAnLi4nIG5vdCBpbiBzWzBdOgorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3QgPSBpbnQoc1swXSwgMTYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QsIGxhc3QgPSBbaW50KGMsIDE2KSBmb3IgYyBpbiBzWzBdLnNwbGl0KCcuLicpXQorICAgICAgICAgICAgICAgIGZvciBjaGFyIGluIHJhbmdlKGZpcnN0LCBsYXN0KzEpOgorICAgICAgICAgICAgICAgICAgICB0YWJsZVtjaGFyXVstMV0uYWRkKCdMaW5lX0JyZWFrJykKKworICAgICAgICBpZiBkZXJpdmVkbm9ybWFsaXphdGlvbnByb3BzOgorICAgICAgICAgICAgcXVpY2tjaGVja3MgPSBbMF0gKiAweDExMDAwMCAjIGRlZmF1bHQgaXMgWWVzCisgICAgICAgICAgICBxY19vcmRlciA9ICdORkRfUUMgTkZLRF9RQyBORkNfUUMgTkZLQ19RQycuc3BsaXQoKQorICAgICAgICAgICAgZm9yIHMgaW4gb3BlbihkZXJpdmVkbm9ybWFsaXphdGlvbnByb3BzKToKKyAgICAgICAgICAgICAgICBpZiAnIycgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNbOnMuaW5kZXgoJyMnKV0KKyAgICAgICAgICAgICAgICBzID0gW2kuc3RyaXAoKSBmb3IgaSBpbiBzLnNwbGl0KCc7JyldCisgICAgICAgICAgICAgICAgaWYgbGVuKHMpIDwgMiBvciBzWzFdIG5vdCBpbiBxY19vcmRlcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBxdWlja2NoZWNrID0gJ01OJy5pbmRleChzWzJdKSArIDEgIyBNYXliZSBvciBObworICAgICAgICAgICAgICAgIHF1aWNrY2hlY2tfc2hpZnQgPSBxY19vcmRlci5pbmRleChzWzFdKSoyCisgICAgICAgICAgICAgICAgcXVpY2tjaGVjayA8PD0gcXVpY2tjaGVja19zaGlmdAorICAgICAgICAgICAgICAgIGlmICcuLicgbm90IGluIHNbMF06CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gbGFzdCA9IGludChzWzBdLCAxNikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaXJzdCwgbGFzdCA9IFtpbnQoYywgMTYpIGZvciBjIGluIHNbMF0uc3BsaXQoJy4uJyldCisgICAgICAgICAgICAgICAgZm9yIGNoYXIgaW4gcmFuZ2UoZmlyc3QsIGxhc3QrMSk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3QgKHF1aWNrY2hlY2tzW2NoYXJdPj5xdWlja2NoZWNrX3NoaWZ0KSYzCisgICAgICAgICAgICAgICAgICAgIHF1aWNrY2hlY2tzW2NoYXJdIHw9IHF1aWNrY2hlY2sKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDB4MTEwMDAwKToKKyAgICAgICAgICAgICAgICBpZiB0YWJsZVtpXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdGFibGVbaV0uYXBwZW5kKHF1aWNrY2hlY2tzW2ldKQorCisgICAgICAgIGZvciBsaW5lIGluIG9wZW4odW5paGFuKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ1UrJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvZGUsIHRhZywgdmFsdWUgPSBsaW5lLnNwbGl0KE5vbmUsIDMpWzozXQorICAgICAgICAgICAgaWYgdGFnIG5vdCBpbiAoJ2tBY2NvdW50aW5nTnVtZXJpYycsICdrUHJpbWFyeU51bWVyaWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tPdGhlck51bWVyaWMnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdHJpcCgpLnJlcGxhY2UoJywnLCAnJykKKyAgICAgICAgICAgIGkgPSBpbnQoY29kZVsyOl0sIDE2KQorICAgICAgICAgICAgIyBQYXRjaCB0aGUgbnVtZXJpYyBmaWVsZAorICAgICAgICAgICAgaWYgdGFibGVbaV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGFibGVbaV1bOF0gPSB2YWx1ZQorCiAgICAgZGVmIHVzZWxhdGluMShzZWxmKToKICAgICAgICAgIyByZXN0cmljdCBjaGFyYWN0ZXIgcmFuZ2UgdG8gSVNPIExhdGluIDEKICAgICAgICAgc2VsZi5jaGFycyA9IHJhbmdlKDI1NikKQEAgLTkxMSw3ICsxMDg1LDYgQEAKICAgICB5b3UnbGwgZ2V0LgogICAgICIiIgogCi0gICAgaW1wb3J0IHN5cwogICAgIGlmIHRyYWNlOgogICAgICAgICBkZWYgZHVtcCh0MSwgdDIsIHNoaWZ0LCBieXRlcyk6CiAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICIlZCslZCBiaW5zIGF0IHNoaWZ0ICVkOyAlZCBieXRlcyIgJSAoCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL21rc3RyaW5ncHJlcC5weSBiL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5CmluZGV4IGI1Y2FjYjguLjk5ZmNhZTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCA9IGZpZWxkcwogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgIlVucGFja2luZyBwcm9ibGVtIiwgbAorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5wYWNraW5nIHByb2JsZW0iLCBsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RhcnQgPSBlbmQgPSBmaWVsZHNbMF0KICAgICAgICAgc3RhcnQgPSBpbnQoc3RhcnQsIDE2KQpAQCAtMTQ2LDggKzE0Niw3IEBACiBuYW1lLCB0YWJsZSA9IHRhYmxlc1swXQogZGVsIHRhYmxlc1swXQogYXNzZXJ0IG5hbWUgPT0gIkIuMSIKLXRhYmxlID0gdGFibGUua2V5cygpCi10YWJsZS5zb3J0KCkKK3RhYmxlID0gc29ydGVkKHRhYmxlLmtleXMoKSkKIHByaW50ICIiIgogYjFfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCiBkZWYgaW5fdGFibGVfYjEoY29kZSk6CkBAIC0xNzcsOCArMTc2LDcgQEAKICAgICBpZiBtYXAob3JkLCB1bmljaHIoaykubG93ZXIoKSkgIT0gdjoKICAgICAgICAgYjNfZXhjZXB0aW9uc1trXSA9IHUiIi5qb2luKG1hcCh1bmljaHIsdikpCiAKLWIzID0gYjNfZXhjZXB0aW9ucy5pdGVtcygpCi1iMy5zb3J0KCkKK2IzID0gc29ydGVkKGIzX2V4Y2VwdGlvbnMuaXRlbXMoKSkKIAogcHJpbnQgIiIiCiBiM19leGNlcHRpb25zID0geyIiIgpAQCAtMzUzLDggKzM1MSw3IEBACiBkZWwgdGFibGVzWzBdCiBhc3NlcnQgbmFtZSA9PSAiQy42IgogCi10YWJsZSA9IHRhYmxlLmtleXMoKQotdGFibGUuc29ydCgpCit0YWJsZSA9IHNvcnRlZCh0YWJsZS5rZXlzKCkpCiAKIHByaW50ICIiIgogYzZfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCkBAIC0zNjcsOCArMzY0LDcgQEAKIGRlbCB0YWJsZXNbMF0KIGFzc2VydCBuYW1lID09ICJDLjciCiAKLXRhYmxlID0gdGFibGUua2V5cygpCi10YWJsZS5zb3J0KCkKK3RhYmxlID0gc29ydGVkKHRhYmxlLmtleXMoKSkKIAogcHJpbnQgIiIiCiBjN19zZXQgPSAiIiIgKyBjb21wYWN0X3NldCh0YWJsZSkgKyAiIiIKQEAgLTM4MSw4ICszNzcsNyBAQAogZGVsIHRhYmxlc1swXQogYXNzZXJ0IG5hbWUgPT0gIkMuOCIKIAotdGFibGUgPSB0YWJsZS5rZXlzKCkKLXRhYmxlLnNvcnQoKQordGFibGUgPSBzb3J0ZWQodGFibGUua2V5cygpKQogCiBwcmludCAiIiIKIGM4X3NldCA9ICIiIiArIGNvbXBhY3Rfc2V0KHRhYmxlKSArICIiIgpAQCAtMzk1LDggKzM5MCw3IEBACiBkZWwgdGFibGVzWzBdCiBhc3NlcnQgbmFtZSA9PSAiQy45IgogCi10YWJsZSA9IHRhYmxlLmtleXMoKQotdGFibGUuc29ydCgpCit0YWJsZSA9IHNvcnRlZCh0YWJsZS5rZXlzKCkpCiAKIHByaW50ICIiIgogYzlfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCmRpZmYgLS1naXQgYS9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5IGIvVG9vbHMvd2ViY2hlY2tlci93Y2d1aS5weQppbmRleCBjZmM0MDk4Li5jZDUzMjYzIDEwMDc1NQotLS0gYS9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5CisrKyBiL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkKQEAgLTY0LDEyICs2NCw2IEBACiBpbXBvcnQgdGt0b29scwogaW1wb3J0IHdlYmNoZWNrZXIKIAotIyBPdmVycmlkZSBzb21lIGZvciBhIHdlYWtlciBwbGF0Zm9ybQotaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgIHdlYmNoZWNrZXIuREVGUk9PVCA9ICJodHRwOi8vZ3JhaWwuY25yaS5yZXN0b24udmEudXMvIgotICAgIHdlYmNoZWNrZXIuTUFYUEFHRSA9IDUwMDAwCi0gICAgd2ViY2hlY2tlci52ZXJib3NlID0gNAotCiBkZWYgbWFpbigpOgogICAgIHRyeToKICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAndDptOnF2YScpCmRpZmYgLS1naXQgYS9Ub29scy93ZWJjaGVja2VyL3dlYnN1Y2tlci5weSBiL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5CmluZGV4IGVmMmZhNDQuLmRmNGM4ZTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5CisrKyBiL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5CkBAIC05Nyw4ICs5Nyw2IEBACiAgICAgICAgICAgICBwYXRoID0gcGF0aCArICJpbmRleC5odG1sIgogICAgICAgICBpZiBvcy5zZXAgIT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9IG9zLnNlcC5qb2luKHBhdGguc3BsaXQoIi8iKSkKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm1hYyI6Ci0gICAgICAgICAgICAgICAgcGF0aCA9IG9zLnNlcCArIHBhdGgKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihob3N0LCBwYXRoKQogICAgICAgICByZXR1cm4gcGF0aAogCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggZDdjYTNhMC4uZWNmZGZjNDAyIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDE0ICsxLDE0IEBACiAjISAvYmluL3NoCi0jIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiA4MDcwMSAuCisjIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uOiA4ODU2OCAuCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSBmb3IgcHl0aG9uIDIuNi4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4IGZvciBweXRob24gMi43LgogIwotIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzPi4KKyMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4KICMKICMKICMgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLgorIyAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgogIwogIwogIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgpAQCAtOTIsNiArOTIsNyBAQAogSUZTPSIgIiIJJGFzX25sIgogCiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQogY2FzZSAkMCBpbiAjKCgKICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwogICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC0yMTcsMTEgKzIxOCwxOCBAQAogICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQogCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCiAJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCiAJQkFTSF9FTlY9L2Rldi9udWxsCiAJRU5WPS9kZXYvbnVsbAogCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgogCWV4cG9ydCBDT05GSUdfU0hFTEwKLQlleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CisJY2FzZSAkLSBpbiAjICgoKCgKKwkgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworCSAgKnYqICkgYXNfb3B0cz0tdiA7OworCSAgKngqICkgYXNfb3B0cz0teCA7OworCSAgKiApIGFzX29wdHM9IDs7CisJZXNhYworCWV4ZWMgIiRDT05GSUdfU0hFTEwiICRhc19vcHRzICIkYXNfbXlzZWxmIiAkezErIiRAIn0KIGZpCiAKICAgICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHhubzsgdGhlbiA6CkBAIC0yMzIsMTAgKzI0MCwxMCBAQAogICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKICAgZWxzZQogICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kCi0kMDogaHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzIGFib3V0IHlvdXIgc3lzdGVtLAotJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCi0kMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KLSQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorJDA6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvIGFib3V0IHlvdXIgc3lzdGVtLCBpbmNsdWRpbmcKKyQwOiBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzIG1lc3NhZ2UuIFRoZW4KKyQwOiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4gdGhlIHNjcmlwdAorJDA6IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgogICBmaQogICBleGl0IDEKIGZpCkBAIC0zMjAsNyArMzI4LDcgQEAKICAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCiAgICAgZG9uZQogICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKIAogCiB9ICMgYXNfZm5fbWtkaXJfcApAQCAtMzYwLDE5ICszNjgsMTkgQEAKIGZpICMgYXNfZm5fYXJpdGgKIAogCi0jIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQogIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIHN0YXR1cyAkPywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KIGFzX2ZuX2Vycm9yICgpCiB7Ci0gIGFzX3N0YXR1cz0kPzsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCi0gIGlmIHRlc3QgIiQzIjsgdGhlbgotICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDIifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDEiID4mJDMKKyAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDQiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAogICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDEiID4mMgorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgogICBhc19mbl9leGl0ICRhc19zdGF0dXMKIH0gIyBhc19mbl9lcnJvcgogCkBAIC01MzQsNyArNTQyLDcgQEAKIGV4ZWMgNj4mMQogCiAjIE5hbWUgb2YgdGhlIGhvc3QuCi0jIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgb2xkIEdOVS9MaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLAogIyBzbyB1bmFtZSBnZXRzIHJ1biB0b28uCiBhY19ob3N0bmFtZT1gKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKIApAQCAtNTUzLDkgKzU2MSw5IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzIuNicKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMi42JwotUEFDS0FHRV9CVUdSRVBPUlQ9J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9weXRob24tYnVncycKK1BBQ0tBR0VfVkVSU0lPTj0nMi43JworUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAyLjcnCitQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2J1Z3MucHl0aG9uLm9yZy8nCiBQQUNLQUdFX1VSTD0nJwogCiBhY191bmlxdWVfZmlsZT0iSW5jbHVkZS9vYmplY3QuaCIKQEAgLTYxNiwxMSArNjI0LDE0IEBACiBVU0VfVEhSRUFEX01PRFVMRQogU0lHTkFMX09CSlMKIFVTRV9TSUdOQUxfTU9EVUxFCitMSUJGRklfSU5DTFVERURJUgorUEtHX0NPTkZJRwogU0hMSUJTCiBDRkxBR1NGT1JTSEFSRUQKIExJTktGT1JTSEFSRUQKIENDU0hBUkVECiBCTERTSEFSRUQKK0xEQ1hYU0hBUkVECiBMRFNIQVJFRAogU08KIExJQlRPT0xfQ1JVRlQKQEAgLTYzMyw4ICs2NDQsMTAgQEAKIElOU1RBTExfU0NSSVBUCiBJTlNUQUxMX1BST0dSQU0KIFNWTlZFUlNJT04KK0FSRkxBR1MKIEFSCiBSQU5MSUIKK0dOVUxECiBMSU5LQ0MKIFJVTlNIQVJFRAogSU5TVFNPTkFNRQpAQCAtNjYyLDYgKzY3NSw3IEBACiBFWFRSQVBMQVRESVIKIFNHSV9BQkkKIE1BQ0hERVAKK0ZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYCiBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgKIEZSQU1FV09SS0FMVElOU1RBTExMQVNUCiBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QKQEAgLTY3Miw3ICs2ODYsNiBAQAogUFlUSE9ORlJBTUVXT1JLRElSCiBQWVRIT05GUkFNRVdPUktJREVOVElGSUVSCiBQWVRIT05GUkFNRVdPUksKLUxJUE9fNjRCSVRfRkxBR1MKIExJUE9fMzJCSVRfRkxBR1MKIEFSQ0hfUlVOXzMyQklUCiBVTklWRVJTQUxTREsKQEAgLTczMiw3ICs3NDUsOSBAQAogd2l0aF9weWRlYnVnCiBlbmFibGVfdG9vbGJveF9nbHVlCiB3aXRoX2xpYnMKK3dpdGhfc3lzdGVtX2V4cGF0CiB3aXRoX3N5c3RlbV9mZmkKK3dpdGhfZGJtbGlib3JkZXIKIHdpdGhfc2lnbmFsX21vZHVsZQogd2l0aF9kZWNfdGhyZWFkcwogd2l0aF90aHJlYWRzCkBAIC03NDIsMTAgKzc1NywxMiBAQAogd2l0aF9kb2Nfc3RyaW5ncwogd2l0aF90c2MKIHdpdGhfcHltYWxsb2MKK3dpdGhfdmFsZ3JpbmQKIHdpdGhfd2N0eXBlX2Z1bmN0aW9ucwogd2l0aF9mcGVjdGwKIHdpdGhfbGlibQogd2l0aF9saWJjCitlbmFibGVfYmlnX2RpZ2l0cwogZW5hYmxlX3VuaWNvZGUKICcKICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCkBAIC04MTksOCArODM2LDkgQEAKICAgZmkKIAogICBjYXNlICRhY19vcHRpb24gaW4KLSAgKj0qKQlhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OwotICAqKQlhY19vcHRhcmc9eWVzIDs7CisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OwogICBlc2FjCiAKICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KQEAgLTg2NSw3ICs4ODMsNyBAQAogICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgogICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCiAgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCkBAIC04OTEsNyArOTA5LDcgQEAKICAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgogICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCiAgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCkBAIC0xMDk1LDcgKzExMTMsNyBAQAogICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgogICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCiAgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCkBAIC0xMTExLDcgKzExMjksNyBAQAogICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgogICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKICAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKICAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCiAgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCkBAIC0xMTQxLDggKzExNTksOCBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgogICAgIDs7CiAKICAgKj0qKQpAQCAtMTE1MCw3ICsxMTY4LDcgQEAKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCiAgICAgY2FzZSAkYWNfZW52dmFyIGluICMoCiAgICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCi0gICAgICBhc19mbl9lcnJvciAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OworICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsKICAgICBlc2FjCiAgICAgZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnCiAgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKQEAgLTExNjAsNyArMTE3OCw3IEBACiAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCiAgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCiAgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCi0gICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDogIiR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259IgogICAgIDs7CiAKICAgZXNhYwpAQCAtMTE2OCwxMyArMTE4NiwxMyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KICAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICBhc19mbl9lcnJvciAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgorICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgogZmkKIAogaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgogICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCiAgICAgbm8pIDs7Ci0gICAgZmF0YWwpIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKICAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CiAgIGVzYWMKIGZpCkBAIC0xMTk3LDcgKzEyMTUsNyBAQAogICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CiAgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OwogICBlc2FjCi0gIGFzX2ZuX2Vycm9yICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgorICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKIGRvbmUKIAogIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JwpAQCAtMTIxMSw4ICsxMjI5LDggQEAKIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgogICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKLSAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgotICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZCIgPiYyCiAgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9eWVzCiAgIGZpCkBAIC0xMjI3LDkgKzEyNDUsOSBAQAogYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCiBhY19sc19kaT1gbHMgLWRpIC5gICYmCiBhY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKLSAgYXNfZm5fZXJyb3IgIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgorICBhc19mbl9lcnJvciAkPyAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCiB0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKLSAgYXNfZm5fZXJyb3IgInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKKyAgYXNfZm5fZXJyb3IgJD8gInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKIAogCiAjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCkBAIC0xMjY4LDExICsxMjg2LDExIEBACiBmaQogaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KICAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCi0gIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCiBmaQogYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgogYWNfYWJzX2NvbmZkaXI9YCgKLQljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICIkYWNfbXNnIgorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ciCiAJcHdkKWAKICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCiBpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCkBAIC0xMjk4LDcgKzEzMTYsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAyLjYgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDIuNyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xMzEyLDcgKzEzMzAsNyBAQAogICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCiAgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwogICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKICAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQogICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJwogICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcwpAQCAtMTM1OSw3ICsxMzc3LDcgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMi42OiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgcHl0aG9uIDIuNzoiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xMzc2LDYgKzEzOTQsOCBAQAogICAtLWVuYWJsZS10b29sYm94LWdsdWUgICBkaXNhYmxlL2VuYWJsZSBNYWNPU1ggZ2x1ZSBjb2RlIGZvciBleHRlbnNpb25zCiAgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgIEVuYWJsZSBpcHY2ICh3aXRoIGlwdjQpIHN1cHBvcnQKICAgLS1kaXNhYmxlLWlwdjYgICAgICAgICAgRGlzYWJsZSBpcHY2IHN1cHBvcnQKKyAgLS1lbmFibGUtYmlnLWRpZ2l0c1s9QklUU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIGJpZyBkaWdpdHMgZm9yIFB5dGhvbiBsb25ncyBbW0JJVFM9MzBdXQogICAtLWVuYWJsZS11bmljb2RlWz11Y3NbMjRdXQogICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgVW5pY29kZSBzdHJpbmdzIChkZWZhdWx0IGlzIHVjczIpCiAKQEAgLTEzOTUsNyArMTQxNSwxMyBAQAogICAtLXdpdGgtc3VmZml4PS5leGUgICAgICBzZXQgZXhlY3V0YWJsZSBzdWZmaXgKICAgLS13aXRoLXB5ZGVidWcgICAgICAgICAgYnVpbGQgd2l0aCBQeV9ERUJVRyBkZWZpbmVkCiAgIC0td2l0aC1saWJzPSdsaWIxIC4uLicgIGxpbmsgYWdhaW5zdCBhZGRpdGlvbmFsIGxpYnMKKyAgLS13aXRoLXN5c3RlbS1leHBhdCAgICAgYnVpbGQgcHlleHBhdCBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGV4cGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkKICAgLS13aXRoLXN5c3RlbS1mZmkgICAgICAgYnVpbGQgX2N0eXBlcyBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGZmaSBsaWJyYXJ5CisgIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciB0byBjaGVjayBkYiBiYWNrZW5kcyBmb3IgZGJtLiBWYWxpZCB2YWx1ZSBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9uIHNlcGFyYXRlZCBzdHJpbmcgd2l0aCB0aGUgYmFja2VuZCBuYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICBgbmRibScsIGBnZGJtJyBhbmQgYGJkYicuCiAgIC0td2l0aC1zaWduYWwtbW9kdWxlICAgIGRpc2FibGUvZW5hYmxlIHNpZ25hbCBtb2R1bGUKICAgLS13aXRoLWRlYy10aHJlYWRzICAgICAgdXNlIERFQyBBbHBoYS9PU0YxIHRocmVhZC1zYWZlIGxpYnJhcmllcwogICAtLXdpdGgob3V0KS10aHJlYWRzWz1ESVJFQ1RPUlldCkBAIC0xNDA2LDYgKzE0MzIsNyBAQAogICAtLXdpdGgob3V0KS1kb2Mtc3RyaW5ncyBkaXNhYmxlL2VuYWJsZSBkb2N1bWVudGF0aW9uIHN0cmluZ3MKICAgLS13aXRoKG91dCktdHNjICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdGltZXN0YW1wIGNvdW50ZXIgcHJvZmlsZQogICAtLXdpdGgob3V0KS1weW1hbGxvYyAgICBkaXNhYmxlL2VuYWJsZSBzcGVjaWFsaXplZCBtYWxsb2NzCisgIC0td2l0aC12YWxncmluZCAgICAgICAgIEVuYWJsZSBWYWxncmluZCBzdXBwb3J0CiAgIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zIHVzZSB3Y3R5cGUuaCBmdW5jdGlvbnMKICAgLS13aXRoLWZwZWN0bCAgICAgICAgICAgZW5hYmxlIFNJR0ZQRSBjYXRjaGluZwogICAtLXdpdGgtbGlibT1TVFJJTkcgICAgICBtYXRoIGxpYnJhcnkKQEAgLTE0MjQsNyArMTQ1MSw3IEBACiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgogCi1SZXBvcnQgYnVncyB0byA8aHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzPi4KK1JlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVncy5weXRob24ub3JnLz4uCiBfQUNFT0YKIGFjX3N0YXR1cz0kPwogZmkKQEAgLTE0ODcsMTAgKzE1MTQsMTAgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1weXRob24gY29uZmlndXJlIDIuNgotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1CitweXRob24gY29uZmlndXJlIDIuNworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4CiAKLUNvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCiBfQUNFT0YKQEAgLTE1MzQsNyArMTU2MSw3IEBACiAKIAlhY19yZXR2YWw9MQogZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAogCiB9ICMgYWNfZm5fY190cnlfY29tcGlsZQpAQCAtMTU2MCw3ICsxNTg3LDcgQEAKICAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCiAgIGZpCiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4vZGV2L251bGwgJiYgeworICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CiAJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CiAJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKICAgICAgICB9OyB0aGVuIDoKQEAgLTE1NzEsNyArMTU5OCw3IEBACiAKICAgICBhY19yZXR2YWw9MQogZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAogCiB9ICMgYWNfZm5fY190cnlfY3BwCkBAIC0xNTg0LDEwICsxNjExLDEwIEBACiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCiB7CiAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGZpCiBldmFsIGFjX3Jlcz1cJCQzCkBAIC0xNjIzLDcgKzE2NTAsNyBAQAogZWxzZQogICBhY19oZWFkZXJfcHJlcHJvYz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKICRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQogCkBAIC0xNjQ2LDE3ICsxNjczLDE1IEBACiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotKCBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9weXRob24tYnVncyAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vYnVncy5weXRob24ub3JnLyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgICkgfCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKICAgICA7OwogZXNhYwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKQEAgLTE2NjUsNyArMTY5MCw3IEBACiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KIGZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogCiB9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAogCkBAIC0xNzA2LDcgKzE3MzEsNyBAQAogICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCiBmaQogICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKIAogfSAjIGFjX2ZuX2NfdHJ5X3J1bgpAQCAtMTcyMCw3ICsxNzQ1LDcgQEAKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xNzM4LDcgKzE3NjMsNyBAQAogZXZhbCBhY19yZXM9XCQkMwogCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogCiB9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQogCkBAIC0xNzgzLDcgKzE4MDgsNyBAQAogICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcwogICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCiAgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAogCiB9ICMgYWNfZm5fY190cnlfbGluawpAQCAtMTc5Nyw3ICsxODIyLDcgQEAKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBldmFsICIkMz1ubyIKQEAgLTE4MzgsMTAgKzE4NjMsMTM3IEBACiBldmFsIGFjX3Jlcz1cJCQzCiAJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKICRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAKIH0gIyBhY19mbl9jX2NoZWNrX3R5cGUKIAorIyBhY19mbl9jX2ZpbmRfdWludFhfdCBMSU5FTk8gQklUUyBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmRzIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRoIEJJVFMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19maW5kX3VpbnRYX3QgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1aW50JDJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdWludCQyX3QuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisgICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCisgICAgIGZvciBhY190eXBlIGluIHVpbnQkMl90ICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorCSAndW5zaWduZWQgbG9uZyBsb25nIGludCcgJ3Vuc2lnbmVkIHNob3J0IGludCcgJ3Vuc2lnbmVkIGNoYXInOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgoJGFjX3R5cGUpIC0xID4+ICgkMiAvIDIgLSAxKSkgPj4gKCQyIC8gMiAtIDEpID09IDMpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2FzZSAkYWNfdHlwZSBpbiAjKAorICB1aW50JDJfdCkgOgorICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKyAgKikgOgorICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKK2VzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJDMiXCIgPSB4Im5vIjsgdGhlbiA6CisKK2Vsc2UKKyAgYnJlYWsKK2ZpCisgICAgIGRvbmUKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2ZpbmRfdWludFhfdAorCisjIGFjX2ZuX2NfZmluZF9pbnRYX3QgTElORU5PIEJJVFMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmRzIGEgc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRoIEJJVFMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19maW5kX2ludFhfdCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludCQyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludCQyX3QuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisgICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCisgICAgIGZvciBhY190eXBlIGluIGludCQyX3QgJ2ludCcgJ2xvbmcgaW50JyBcCisJICdsb25nIGxvbmcgaW50JyAnc2hvcnQgaW50JyAnc2lnbmVkIGNoYXInOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisJICAgICBlbnVtIHsgTiA9ICQyIC8gMiAtIDEgfTsKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoMCA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisJICAgICAgICBlbnVtIHsgTiA9ICQyIC8gMiAtIDEgfTsKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMSkKKwkJIDwgKCRhY190eXBlKSAoKCgoKCRhY190eXBlKSAxIDw8IE4pIDw8IE4pIC0gMSkgKiAyICsgMikpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBjYXNlICRhY190eXBlIGluICMoCisgIGludCQyX3QpIDoKKyAgICBldmFsICIkMz15ZXMiIDs7ICMoCisgICopIDoKKyAgICBldmFsICIkMz1cJGFjX3R5cGUiIDs7Citlc2FjCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiQzIlwiID0geCJubyI7IHRoZW4gOgorCitlbHNlCisgIGJyZWFrCitmaQorICAgICBkb25lCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19maW5kX2ludFhfdAorCiAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQgTElORU5PIEVYUFIgVkFSIElOQ0xVREVTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRyaWVzIHRvIGZpbmQgdGhlIGNvbXBpbGUtdGltZSB2YWx1ZSBvZiBFWFBSIGluIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzCkBAIC0yMDE1LDcgKzIxNjcsNyBAQAogcm0gLWYgY29uZnRlc3QudmFsCiAKICAgZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCiAgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAogCiB9ICMgYWNfZm5fY19jb21wdXRlX2ludApAQCAtMjAyOCw3ICsyMTgwLDcgQEAKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0yMDgzLDcgKzIyMzUsNyBAQAogZXZhbCBhY19yZXM9XCQkMwogCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogCiB9ICMgYWNfZm5fY19jaGVja19mdW5jCiAKQEAgLTIwOTYsNyArMjI0OCw3IEBACiAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIuJDMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLiQzLi4uICIgPiY2OyB9Ci1pZiB7IGFzX3Zhcj0kNDsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CitpZiBldmFsIFwkeyQ0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMjE0MCwxOSArMjI5MiwyMiBAQAogZXZhbCBhY19yZXM9XCQkNAogCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwogCiB9ICMgYWNfZm5fY19jaGVja19tZW1iZXIKIAotIyBhY19mbl9jX2NoZWNrX2RlY2wgTElORU5PIFNZTUJPTCBWQVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgU1lNQk9MIGlzIGRlY2xhcmVkLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCiBhY19mbl9jX2NoZWNrX2RlY2wgKCkKIHsKICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJDIgaXMgZGVjbGFyZWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkMiBpcyBkZWNsYXJlZC4uLiAiID4mNjsgfQotaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0yMTYxLDggKzIzMTYsMTIgQEAKIGludAogbWFpbiAoKQogewotI2lmbmRlZiAkMgotICAodm9pZCkgJDI7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKICNlbmRpZgogCiAgIDsKQEAgLTIxNzksMTUgKzIzMzgsMTUgQEAKIGV2YWwgYWNfcmVzPVwkJDMKIAkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQogJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KIAogfSAjIGFjX2ZuX2NfY2hlY2tfZGVjbAogY2F0ID5jb25maWcubG9nIDw8X0FDRU9GCiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAyLjYsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitJdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDIuNywgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACiAKQEAgLTIyOTcsMTEgKzI0NTYsOSBAQAogICB7CiAgICAgZWNobwogCi0gICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBDYWNoZSB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwogICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCiAoCkBAIC0yMzM1LDExICsyNDkyLDkgQEAKICkKICAgICBlY2hvCiAKLSAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgogICAgIGVjaG8KICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCiAgICAgZG8KQEAgLTIzNTIsMTEgKzI1MDcsOSBAQAogICAgIGVjaG8KIAogICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBGaWxlIHN1YnN0aXR1dGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgICBlY2hvCiAgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcwogICAgICAgZG8KQEAgLTIzNzAsMTEgKzI1MjMsOSBAQAogICAgIGZpCiAKICAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tICMjCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKICMjIGNvbmZkZWZzLmguICMjCi0jIyAtLS0tLS0tLS0tLSAjIwotX0FTQk9YCisjIyAtLS0tLS0tLS0tLSAjIyIKICAgICAgIGVjaG8KICAgICAgIGNhdCBjb25mZGVmcy5oCiAgICAgICBlY2hvCkBAIC0yNDI5LDcgKzI1ODAsMTIgQEAKIGFjX3NpdGVfZmlsZTE9Tk9ORQogYWNfc2l0ZV9maWxlMj1OT05FCiBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCi0gIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYwogZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KICAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCiAgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKQEAgLTI0NDQsNyArMjYwMCwxMSBAQAogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KICAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKLSAgICAuICIkYWNfc2l0ZV9maWxlIgorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgIGZpCiBkb25lCiAKQEAgLTI1MjAsNyArMjY4MCw3IEBACiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICBhc19mbl9lcnJvciAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUKKyAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCkBAIC0yNTM4LDYgKzI2OTgsMTEgQEAKIAogCiAKK2lmIHRlc3QgIiRwcmVmaXgiICE9ICIvIjsgdGhlbgorICAgIHByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgLWUgJ3MvXC8kLy9nJ2AKK2ZpCisKKwogCiAKICMgV2UgZG9uJ3QgdXNlIFBBQ0tBR0VfIHZhcmlhYmxlcywgYW5kIHRoZXkgY2F1c2UgY29uZmxpY3RzCkBAIC0yNTQ3LDcgKzI3MTIsNyBAQAogbXYgY29uZmRlZnMuaC5uZXcgY29uZmRlZnMuaAogCiAKLVZFUlNJT049Mi42CitWRVJTSU9OPTIuNwogCiAKIFNPVkVSU0lPTj0xLjAKQEAgLTI2MTUsNyArMjc4MCw3IEBACiAJCVVOSVZFUlNBTFNESz0kZW5hYmxldmFsCiAJCWlmIHRlc3QgISAtZCAiJHtVTklWRVJTQUxTREt9IgogCQl0aGVuCi0JCQlhc19mbl9lcnJvciAiLS1lbmFibGUtdW5pdmVyc2Fsc2RrIHNwZWNpZmllcyBub24tZXhpc3RpbmcgU0RLOiAke1VOSVZFUlNBTFNES30iICIkTElORU5PIiA1CisJCQlhc19mbl9lcnJvciAkPyAiLS1lbmFibGUtdW5pdmVyc2Fsc2RrIHNwZWNpZmllcyBub24tZXhpc3RpbmcgU0RLOiAke1VOSVZFUlNBTFNES30iICIkTElORU5PIiA1CiAJCWZpCiAJCTs7CiAJZXNhYwpAQCAtMjY0Miw3ICsyODA3LDYgQEAKIAogVU5JVkVSU0FMX0FSQ0hTPSIzMi1iaXQiCiAKLQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocy4uLiAiID4mNjsgfQogCkBAIC0yNjU1LDcgKzI4MTksNyBAQAogICAgICAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IiA7IHRoZW4KIAkJOgogCWVsc2UKLQkJYXNfZm5fZXJyb3IgIi0td2l0aC11bml2ZXJzYWwtYXJjaHMgd2l0aG91dCAtLWVuYWJsZS11bml2ZXJzYWxzZGsuIFNlZSBNYWMvUkVBRE1FIiAiJExJTkVOTyIgNQorCQlhc19mbl9lcnJvciAkPyAiLS13aXRoLXVuaXZlcnNhbC1hcmNocyB3aXRob3V0IC0tZW5hYmxlLXVuaXZlcnNhbHNkay4gU2VlIE1hYy9SRUFETUUiICIkTElORU5PIiA1CiAJZmkKIAogZWxzZQpAQCAtMjY3NSw3ICsyODM5LDcgQEAKICAgICBpZiB0ZXN0ICIke2VuYWJsZV9mcmFtZXdvcmt9IjsgdGhlbgogCSAgICA6CiAgICAgZWxzZQotCWFzX2ZuX2Vycm9yICItLXdpdGgtZnJhbWV3b3JrLW5hbWUgd2l0aG91dCAtLWVuYWJsZS1mcmFtZXdvcmsuIFNlZSBNYWMvUkVBRE1FIiAiJExJTkVOTyIgNQorCWFzX2ZuX2Vycm9yICQ/ICItLXdpdGgtZnJhbWV3b3JrLW5hbWUgd2l0aG91dCAtLWVuYWJsZS1mcmFtZXdvcmsuIFNlZSBNYWMvUkVBRE1FIiAiJExJTkVOTyIgNQogICAgIGZpCiAgICAgUFlUSE9ORlJBTUVXT1JLPSR7d2l0aHZhbH0KICAgICBQWVRIT05GUkFNRVdPUktESVI9JHt3aXRodmFsfS5mcmFtZXdvcmsKQEAgLTI3MTQsMjYgKzI4NzgsNTUgQEAKIAkJZW5hYmxlX2ZyYW1ld29yaz0KIAkJOzsKIAkqKQotCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9JGVuYWJsZXZhbAorCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9IiR7ZW5hYmxldmFsfSIKIAkJUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUj0kUFlUSE9ORlJBTUVXT1JLUFJFRklYLyRQWVRIT05GUkFNRVdPUktESVIKIAkJRlJBTUVXT1JLSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgYmluaW5zdGFsbCBtYW5pbnN0YWxsIgotCQljYXNlICIke1VOSVZFUlNBTF9BUkNIU30iIGluCi0JCWFsbHwzLXdheXxpbnRlbCkKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCTs7Ci0JCSopCi0JCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKLQkJCTs7Ci0JCWVzYWMKKwkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKKwogCQllbHNlCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7cHJlZml4fSIKIAkJZmkKKworCQljYXNlICIke2VuYWJsZXZhbH0iIGluCisJCS9TeXN0ZW0qKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiIDsgdGhlbgorCQkJCSMgU2VlIGJlbG93CisJCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIvdXNyIgorCQkJZmkKKwkJCTs7CisKKwkJL0xpYnJhcnkqKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQk7OworCisJCSovTGlicmFyeS9GcmFtZXdvcmtzKQorCQkJTURJUj0iYGRpcm5hbWUgIiR7ZW5hYmxldmFsfSJgIgorCQkJTURJUj0iYGRpcm5hbWUgIiR7TURJUn0iYCIKKwkJCUZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYPSIke01ESVJ9L0FwcGxpY2F0aW9ucyIKKworCQkJaWYgdGVzdCAiJHtwcmVmaXh9IiA9ICJOT05FIjsgdGhlbgorCQkJCSMgVXNlciBoYXNuJ3Qgc3BlY2lmaWVkIHRoZQorCQkJCSMgLS1wcmVmaXggb3B0aW9uLCBidXQgd2FudHMgdG8gaW5zdGFsbAorCQkJCSMgdGhlIGZyYW1ld29yayBpbiBhIG5vbi1kZWZhdWx0IGxvY2F0aW9uLAorCQkJCSMgZW5zdXJlIHRoYXQgdGhlIGNvbXBhdGliaWxpdHkgbGlua3MgZ2V0CisJCQkJIyBpbnN0YWxsZWQgcmVsYXRpdmUgdG8gdGhhdCBwcmVmaXggYXMgd2VsbAorCQkJCSMgaW5zdGVhZCBvZiBpbiAvdXNyL2xvY2FsLgorCQkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtNRElSfSIKKwkJCWZpCisJCQk7OworCisJCSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisJCWVzYWMKKwogCQlwcmVmaXg9JFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIvVmVyc2lvbnMvJFZFUlNJT04KIAogCQkjIEFkZCBmaWxlcyBmb3IgTWFjIHNwZWNpZmljIGNvZGUgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0CkBAIC0yNzY3LDExICsyOTYwLDYgQEAKIAlmaQogCWVuYWJsZV9mcmFtZXdvcms9CiAKLQlpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiCi0JdGhlbgotCQlGUkFNRVdPUktJTlNUQUxMTEFTVD11cGRhdGU0d2F5dW5pdmVyc2FsCi0JCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQlmaQogCiBmaQogCkBAIC0yNzg2LDkgKzI5NzQsMTAgQEAKIAogCiAKKwogIyNBQ19BUkdfV0lUSChkeWxkLAotIyMgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZHlsZCwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXIpKQorIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKICMjCiAjIFNldCBuYW1lIGZvciBtYWNoaW5lLWRlcGVuZGVudCBsaWJyYXJ5IGZpbGVzCiAKQEAgLTI3OTcsNyArMjk4Niw3IEBACiBpZiB0ZXN0IC16ICIkTUFDSERFUCIKIHRoZW4KIAlhY19zeXNfc3lzdGVtPWB1bmFtZSAtc2AKLQlpZiB0ZXN0ICIkYWNfc3lzX3N5c3RlbSIgPSAiQUlYIiAtbyAiJGFjX3N5c19zeXN0ZW0iID0gIk1vbnRlcmV5NjQiIFwKKwlpZiB0ZXN0ICIkYWNfc3lzX3N5c3RlbSIgPSAiQUlYIiBcCiAJLW8gIiRhY19zeXNfc3lzdGVtIiA9ICJVbml4V2FyZSIgLW8gIiRhY19zeXNfc3lzdGVtIiA9ICJPcGVuVU5JWCI7IHRoZW4KIAkJYWNfc3lzX3JlbGVhc2U9YHVuYW1lIC12YAogCWVsc2UKQEAgLTI4NTUsOSArMzA0NCwxMiBAQAogICAjIE1hcmMgUmVjaHQKICAgTmV0QlNELzEuNSB8IE5ldEJTRC8xLjUuKiB8IE5ldEJTRC8xLjYgfCBOZXRCU0QvMS42LiogfCBOZXRCU0QvMS42W0EtU10pCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7Ci0gICMgT24gU29sYXJpcyAyLjYsIHN5cy93YWl0LmggaXMgaW5jb25zaXN0ZW50IGluIHRoZSB1c2FnZQotICAjIG9mIHVuaW9uIF9fP3NpZ3ZhbC4gUmVwb3J0ZWQgYnkgU3R1YXJ0IEJpc2hvcC4KLSAgU3VuT1MvNS42KQorICAjIEZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIFNvbGFyaXMsIF9YT1BFTl9TT1VSQ0UgaXMgbm90IHNvIG11Y2ggYQorICAjIHJlcXVlc3QgdG8gZW5hYmxlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgc3RhbmRhcmQgYXMgYSByZXF1ZXN0CisgICMgdG8gZGlzYWJsZSBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZC4gIFRoZSBiZXN0IHdheQorICAjIGZvciBQeXRob24gdG8gdXNlIFNvbGFyaXMgaXMgc2ltcGx5IHRvIGxlYXZlIF9YT1BFTl9TT1VSQ0Ugb3V0CisgICMgZW50aXJlbHkgYW5kIGRlZmluZSBfX0VYVEVOU0lPTlNfXyBpbnN0ZWFkLgorICBTdW5PUy8qKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OwogICAjIE9uIFVuaXhXYXJlIDcsIHVfbG9uZyBpcyBuZXZlciBkZWZpbmVkIHdpdGggX1hPUEVOX1NPVVJDRSwKICAgIyBidXQgdXNlZCBpbiAvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaC4gUmVwb3J0ZWQgYnkgVGltIFJpY2UuCkBAIC0yOTAzLDM4ICszMDk1LDE3IEBACiAKIGlmIHRlc3QgJGRlZmluZV94b3Blbl9zb3VyY2UgPSB5ZXMKIHRoZW4KLSAgIyBPbiBTb2xhcmlzIHcvIGcrKyBpdCBhcHBlYXJzIHRoYXQgX1hPUEVOX1NPVVJDRSBoYXMgdG8gYmUKLSAgIyBkZWZpbmVkIHByZWNpc2VseSBhcyBnKysgZGVmaW5lcyBpdAotICAjIEZ1cnRoZXJtb3JlLCBvbiBTb2xhcmlzIDEwLCBYUEc2IHJlcXVpcmVzIHRoZSB1c2Ugb2YgYSBDOTkKLSAgIyBjb21waWxlcgotICBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICAgIFN1bk9TLzUuOHxTdW5PUy81Ljl8U3VuT1MvNS4xMCkKLQotJGFzX2VjaG8gIiNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAiID4+Y29uZmRlZnMuaAotCi0gICAgICA7OwotICAgICopCiAKICRhc19lY2hvICIjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwIiA+PmNvbmZkZWZzLmgKIAotICAgICAgOzsKLSAgZXNhYwogCiAgICMgT24gVHJ1NjQgVW5peCA0LjBGLCBkZWZpbmluZyBfWE9QRU5fU09VUkNFIGFsc28gcmVxdWlyZXMKICAgIyBkZWZpbml0aW9uIG9mIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgYW5kIF9QT1NJWF9DX1NPVVJDRSwgb3IgZWxzZQogICAjIHNldmVyYWwgQVBJcyBhcmUgbm90IGRlY2xhcmVkLiBTaW5jZSB0aGlzIGlzIGFsc28gbmVlZGVkIGluIHNvbWUKICAgIyBjYXNlcyBmb3IgSFAtVVgsIHdlIGRlZmluZSBpdCBnbG9iYWxseS4KLSAgIyBleGNlcHQgZm9yIFNvbGFyaXMgMTAsIHdoZXJlIGl0IG11c3Qgbm90IGJlIGRlZmluZWQsCi0gICMgYXMgaXQgaW1wbGllcyBYUEc0LjIKLSAgY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KLSAgICBTdW5PUy81LjEwKQotICAgICAgOzsKLSAgICAqKQogCiAkYXNfZWNobyAiI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEiID4+Y29uZmRlZnMuaAogCi0gICAgICA7OwotICBlc2FjCiAKIAogJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDExMkwiID4+Y29uZmRlZnMuaApAQCAtMzAyMyw3ICszMTk0LDcgQEAKIGVsc2UKIAogCWNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLQlBSVgqKSAgIENDPWNjX3IKKwlBSVgqKSAgIENDPSR7Q0M6LXhsY19yfQogCQl3aXRob3V0X2djYz07OwogCUJlT1MqKQogCQljYXNlICRCRV9IT1NUX0NQVSBpbgpAQCAtMzA0MCwxNSArMzIxMSwxMiBAQAogCQkJT1BUPSIkT1BUIC1PIgogCQkJOzsKIAkJKikKLQkJCWFzX2ZuX2Vycm9yICJVbmtub3duIEJlT1MgcGxhdGZvcm0gXCIkQkVfSE9TVF9DUFVcIiIgIiRMSU5FTk8iIDUKKwkJCWFzX2ZuX2Vycm9yICQ/ICJVbmtub3duIEJlT1MgcGxhdGZvcm0gXCIkQkVfSE9TVF9DUFVcIiIgIiRMSU5FTk8iIDUKIAkJCTs7CiAJCWVzYWMKIAkJQVI9IlwkKHNyY2RpcikvTW9kdWxlcy9hcl9iZW9zIgogCQlSQU5MSUI9OgogCQk7OwotICAgIE1vbnRlcmV5KikKLSAgICAgICAgUkFOTElCPToKLSAgICAgICAgd2l0aG91dF9nY2M9OzsKIAkqKQl3aXRob3V0X2djYz1ubzs7CiAJZXNhYwogZmkKQEAgLTMwNTksMTAgKzMyMjcsMTMgQEAKICMgSWYgdGhlIHVzZXIgc3dpdGNoZXMgY29tcGlsZXJzLCB3ZSBjYW4ndCBiZWxpZXZlIHRoZSBjYWNoZQogaWYgdGVzdCAhIC16ICIkYWNfY3ZfcHJvZ19DQyIgLWEgISAteiAiJENDIiAtYSAiJENDIiAhPSAiJGFjX2N2X3Byb2dfQ0MiCiB0aGVuCi0gIGFzX2ZuX2Vycm9yICJjYWNoZWQgQ0MgaXMgZGlmZmVyZW50IC0tIHRocm93IGF3YXkgJGNhY2hlX2ZpbGUKKyAgYXNfZm5fZXJyb3IgJD8gImNhY2hlZCBDQyBpcyBkaWZmZXJlbnQgLS0gdGhyb3cgYXdheSAkY2FjaGVfZmlsZQogKGl0IGlzIGFsc28gYSBnb29kIGlkZWEgdG8gZG8gJ21ha2UgY2xlYW4nIGJlZm9yZSBjb21waWxpbmcpIiAiJExJTkVOTyIgNQogZmkKIAorIyBJZiB0aGUgdXNlciBzZXQgQ0ZMQUdTLCB1c2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBhdXRvbWF0aWNhbGx5CisjIGRldGVybWluZWQgc2V0dGluZworcHJlc2V0X2NmbGFncz0iJENGTEFHUyIKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtMzA3Myw3ICszMjQ0LDcgQEAKIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgpAQCAtMzExMyw3ICszMjg0LDcgQEAKIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KQEAgLTMxNjYsNyArMzMzNyw3IEBACiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgpAQCAtMzIwNiw3ICszMzc3LDcgQEAKIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgpAQCAtMzI2NSw3ICszNDM2LDcgQEAKIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgpAQCAtMzMwOSw3ICszNDgwLDcgQEAKIHNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgpAQCAtMzM2Myw4ICszNTM0LDggQEAKIAogdGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogCiAjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKQEAgLTM0NzgsOSArMzY0OSw4IEBACiAKIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CkBAIC0zNTIyLDggKzM2OTIsOCBAQAogZWxzZQogICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKIHJtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQpAQCAtMzU4MCw5ICszNzUwLDkgQEAKICAgICBlbHNlCiAJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KIElmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgIGZpCiAgIGZpCiBmaQpAQCAtMzU5Myw3ICszNzYzLDcgQEAKIGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTM2MzMsOCArMzgwMyw4IEBACiAKIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KIGZpCiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCkBAIC0zNjQ0LDcgKzM4MTQsNyBAQAogYWNfb2JqZXh0PSRPQkpFWFQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMzY4MSw3ICszODUxLDcgQEAKIGFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwpAQCAtMzc1OSw3ICszOTI5LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jdl9wcm9nX2NjX2M4OT1ubwpAQCAtMzg1NCw2ICs0MDI0LDEwIEBACiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQogCitpZiB0ZXN0ICEgLXogIiRwcmVzZXRfY2ZsYWdzIgordGhlbgorCUNGTEFHUz0kcHJlc2V0X2NmbGFncworZmkKIAogCiAKQEAgLTM4OTQsNyArNDA2OCw3IEBACiBzZXQgZHVtbXkgZysrOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wYXRoX0NYWCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJENYWCBpbgpAQCAtMzkzNSw3ICs0MTA5LDcgQEAKIHNldCBkdW1teSBjKys7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0NYWCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3BhdGhfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkQ1hYIGluCkBAIC0zOTg2LDcgKzQxNjAsNyBAQAogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCkBAIC00MDU3LDcgKzQyMzEsNyBAQAogICBDUFA9CiBmaQogaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCkBAIC00MDg3LDcgKzQyNjEsNyBAQAogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KQEAgLTQxMDMsMTEgKzQyNzcsMTEgQEAKIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiBpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CiAgIGJyZWFrCiBmaQpAQCAtNDE0Niw3ICs0MzIwLDcgQEAKICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgogY29udGludWUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCkBAIC00MTYyLDE4ICs0MzM2LDE4IEBACiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgogCiBlbHNlCiAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9Cithc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogZmkKIAogYWNfZXh0PWMKQEAgLTQxODUsNyArNDM1OSw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KQEAgLTQyMzQsNyArNDQwOCw3IEBACiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKICAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKICAgZmkKIGVsc2UKICAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCkBAIC00MjQ4LDcgKzQ0MjIsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQpAQCAtNDMwMCw3ICs0NDc0LDcgQEAKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQogICBmaQogZWxzZQogICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUApAQCAtNDMxNSw3ICs0NDg5LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtNDQzMiw4ICs0NjA2LDcgQEAKICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKICIKLWV2YWwgYXNfdmFsPVwkJGFzX2FjX0hlYWRlcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKQEAgLTQ0NDUsNyArNDYxOCw3IEBACiAKIAogICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibWluaXgvY29uZmlnLmgiICJhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoKICAgTUlOSVg9eWVzCiBlbHNlCiAgIE1JTklYPQpAQCAtNDQ2Nyw3ICs0NjQwLDcgQEAKIAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtNDUwNSw3ICs0Njc4LDYgQEAKIAogCiAKLQogIyBDaGVjayBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtcwogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KIGF0aGVvcyp8TGludXgqLzEqKQpAQCAtNDU2NCwxMCArNDczNiw2IEBACiAgICAgY2FzZSAkQ0MgaW4KICAgICBjY3wqL2NjKSBDQz0iJENDIC1BZSI7OwogICAgIGVzYWM7OwotTW9udGVyZXkqKQotICAgIGNhc2UgJENDIGluCi0gICAgY2MpIENDPSIkQ0MgLVdsLC1CZXhwb3J0Ijs7Ci0gICAgZXNhYzs7CiBTdW5PUyopCiAgICAgIyBTb21lIGZ1bmN0aW9ucyBoYXZlIGEgcHJvdG90eXBlIG9ubHkgd2l0aCB0aGF0IGRlZmluZSwgZS5nLiBjb25mc3RyCiAKQEAgLTQ2MzMsOCArNDgwMSw2IEBACiAJICAgICAgIGV4cF9leHRyYT0iLiIKIAkgICBmaQogCSAgIExJTktDQz0iXCQoc3JjZGlyKS9Nb2R1bGVzL21ha2V4cF9haXggTW9kdWxlcy9weXRob24uZXhwICRleHBfZXh0cmEgXCQoTElCUkFSWSk7ICRMSU5LQ0MiOzsKLQlNb250ZXJleTY0KikKLQkgICBMSU5LQ0M9IiRMSU5LQ0MgLUwvdXNyL2xpYi9pYTY0bDY0Ijs7CiAJUU5YKikKIAkgICAjIHFjYyBtdXN0IGJlIHVzZWQgYmVjYXVzZSB0aGUgb3RoZXIgY29tcGlsZXJzIGRvIG5vdAogCSAgICMgc3VwcG9ydCAtTi4KQEAgLTQ2NDQsNiArNDgxMCwyNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSU5LQ0MiID4mNQogJGFzX2VjaG8gIiRMSU5LQ0MiID4mNjsgfQogCisjIEdOVUxEIGlzIHNldCB0byAieWVzIiBpZiB0aGUgR05VIGxpbmtlciBpcyB1c2VkLiAgSWYgdGhpcyBnb2VzIHdyb25nCisjIG1ha2Ugc3VyZSB3ZSBkZWZhdWx0IGhhdmluZyBpdCBzZXQgdG8gIm5vIjogdGhpcyBpcyB1c2VkIGJ5CisjIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIHRvIGtub3cgaWYgaXQgc2hvdWxkIGFkZCAtLWVuYWJsZS1uZXctZHRhZ3MKKyMgdG8gbGlua2VyIGNvbW1hbmQgbGluZXMsIGFuZCBmYWlsaW5nIHRvIGRldGVjdCBHTlUgbGQgc2ltcGx5IHJlc3VsdHMKKyMgaW4gdGhlIHNhbWUgYmFoYXZpb3VyIGFzIGJlZm9yZS4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgYWNfcHJvZz1gJENDIC1wcmludC1wcm9nLW5hbWU9bGRgCitmaQorY2FzZSBgIiRhY19wcm9nIiAtViAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSopCisgICAgICAgICAgR05VTEQ9eWVzOzsKKyAgICAgICopCisgICAgICAgICAgR05VTEQ9bm87OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHTlVMRCIgPiY1CiskYXNfZWNobyAiJEdOVUxEIiA+JjY7IH0KKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS1lbmFibGUtc2hhcmVkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLWVuYWJsZS1zaGFyZWQuLi4gIiA+JjY7IH0KICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgpAQCAtNDc3NCw2ICs0OTYxLDEwIEBACiAJQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChWRVJTSU9OKScKIAlSVU5TSEFSRUQ9J0RZTERfTElCUkFSWV9QQVRIPWBwd2RgOiR7RFlMRF9MSUJSQVJZX1BBVEh9JwogCTs7CisgICAgQUlYKikKKwlMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuc28nCisJUlVOU0hBUkVEPUxJQlBBVEg9YHB3ZGA6JHtMSUJQQVRIfQorCTs7CiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZApAQCAtNDc5Myw3ICs0OTg0LDcgQEAKIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgpAQCAtNDgzMyw3ICs1MDI0LDcgQEAKIHNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KQEAgLTQ4ODcsNyArNTA3OCw3IEBACiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KQEAgLTQ5MjUsMTIgKzUxMTYsMTkgQEAKIHRlc3QgLW4gIiRBUiIgfHwgQVI9ImFyIgogCiAKKyMgdHdlYWsgQVJGTEFHUyBvbmx5IGlmIHRoZSB1c2VyIGRpZG4ndCBzZXQgaXQgb24gdGhlIGNvbW1hbmQgbGluZQorCitpZiB0ZXN0IC16ICIkQVJGTEFHUyIKK3RoZW4KKyAgICAgICAgQVJGTEFHUz0icmMiCitmaQorCiAKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3ZudmVyc2lvbiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgc3ZudmVyc2lvbjsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1ZOVkVSU0lPTitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Byb2dfU1ZOVkVSU0lPTis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRTVk5WRVJTSU9OIjsgdGhlbgpAQCAtNDk4MSwxNiArNTE3OSwyMiBAQAogZXNhYwogYWNfYXV4X2Rpcj0KIGZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCi0gIGZvciBhY190IGluIGluc3RhbGwtc2ggaW5zdGFsbC5zaCBzaHRvb2w7IGRvCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfdCI7IHRoZW4KLSAgICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvJGFjX3QgLWMiCi0gICAgICBicmVhayAyCi0gICAgZmkKLSAgZG9uZQorICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCisgICAgYnJlYWsKKyAgZmkKIGRvbmUKIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICBhc19mbl9lcnJvciAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiAiJExJTkVOTyIgNQogZmkKIAogIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0ZWQsCkBAIC01MDE5LDcgKzUyMjMsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC01MTYzLDcgKzUzNjcsNyBAQAogCSAgICBpZiB0ZXN0ICIkUHlfREVCVUciID0gJ3RydWUnIDsgdGhlbgogCQkjIE9wdGltaXphdGlvbiBtZXNzZXMgdXAgZGVidWdnZXJzLCBzbyB0dXJuIGl0IG9mZiBmb3IKIAkJIyBkZWJ1ZyBidWlsZHMuCi0JCU9QVD0iLWcgLVdhbGwgJFNUUklDVF9QUk9UTyIKKwkJT1BUPSItZyAtTzAgLVdhbGwgJFNUUklDVF9QUk9UTyIKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtNTE4MiwxNSArNTM4Niw2IEBACiAJT1BUPSItTyIKIAk7OwogICAgIGVzYWMKLQotICAgICMgVGhlIGN1cnJlbnQgKGJldGEpIE1vbnRlcmV5IGNvbXBpbGVyIGRpZXMgd2l0aCBvcHRpbWl6YXRpb25zCi0gICAgIyBYWFggd2hhdCBpcyBNb250ZXJleT8gRG9lcyBpdCBzdGlsbCBkaWUgdy8gLU8/IENhbiB3ZSBnZXQgcmlkIG9mIHRoaXM/Ci0gICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCU1vbnRlcmV5KikKLQkgICAgT1BUPSIiCi0JICAgIDs7Ci0gICAgZXNhYwotCiBmaQogCiAKQEAgLTUyMDksMjAgKzU0MDQsMjYgQEAKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWZuby1zdHJpY3QtYWxpYXNpbmcuLi4gIiA+JjY7IH0KICAgICAgYWNfc2F2ZV9jYz0iJENDIgogICAgICBDQz0iJENDIC1mbm8tc3RyaWN0LWFsaWFzaW5nIgotICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaz1ubworICAgICBpZiAke2FjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBtYWluKCkgeyByZXR1cm4gMDsgfQorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPXllcwogZWxzZQogICBhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKICAgICAgQ0M9IiRhY19zYXZlX2NjIgpAQCAtNTI1MCw3ICs1NDUxLDYgQEAKIAlEYXJ3aW4qKQogCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAogCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLQogCSAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKIAkgICAgdGhlbgogCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKQEAgLTUyNjgsNDkgKzU0NjgsNiBAQAogJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiAJICAgIGZpCiAKLQotCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgotCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgotCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiAtZXh0cmFjdCBwcGM3NDAwIgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQgLWV4dHJhY3QgcHBjNjQiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgTElQT182NEJJVF9GTEFHUz0iLWV4dHJhY3QgeDg2XzY0IgotCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYgLWV4dHJhY3QgcHBjNzQwMCIKLQkJICAgTElQT182NEJJVF9GTEFHUz0iLWV4dHJhY3QgeDg2XzY0IgotCi0JCSBlbHNlCi0JICAgICAgICAgICBhc19mbl9lcnJvciAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheSIgIiRMSU5FTk8iIDUKLQotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KIAkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgogCSAgICAjCiAJICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKQEAgLTUzNTIsNiArNTUwOSw1MCBAQAogCSAgICBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAJICAgIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JycKIAorCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgorCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgorCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iIgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgorCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorCisJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKworCQkgZWxzZQorCSAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1CisKKwkJIGZpCisKKworCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9ICR7Q0ZMQUdTfSIKKwkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKwkJdGhlbgorCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisJCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisJCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorCQlmaQorCisJICAgIGZpCisKKwogCSAgICA7OwogCU9TRiopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1taWVlZSIKQEAgLTUzOTMsMjcgKzU1OTQsMjkgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PUFQ6T2xpbWl0PTAiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtT1BUOk9saW1pdD0wLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29wdF9vbGltaXRfb2src2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9vcHRfb2xpbWl0X29rKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtT1BUOk9saW1pdD0wIgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9vcHRfb2xpbWl0X29rPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBtYWluKCkgeyByZXR1cm4gMDsgfQorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3Zfb3B0X29saW1pdF9vaz15ZXMKIGVsc2UKICAgYWNfY3Zfb3B0X29saW1pdF9vaz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCiAKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIENDPSIkYWNfc2F2ZV9jYyIKIGZpCiAKQEAgLTU0MzMsMjcgKzU2MzYsMjkgQEAKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PbGltaXQgMTUwMCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PbGltaXQgMTUwMC4uLiAiID4mNjsgfQotICBpZiB0ZXN0ICIke2FjX2N2X29saW1pdF9vaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGlmICR7YWNfY3Zfb2xpbWl0X29rKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jYz0iJENDIgogICBDQz0iJENDIC1PbGltaXQgMTUwMCIKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9vbGltaXRfb2s9bm8KLWVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50IG1haW4oKSB7IHJldHVybiAwOyB9CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9vbGltaXRfb2s9eWVzCiBlbHNlCiAgIGFjX2N2X29saW1pdF9vaz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCiAKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgQ0M9IiRhY19zYXZlX2NjIgogZmkKIApAQCAtNTQ3NSw3ICs1NjgwLDYgQEAKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotCiBpbnQKIG1haW4gKCkKIHsKQEAgLTU0ODMsMTUgKzU2ODcsMTkgQEAKICAgOwogICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAKKwogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KKwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiAKIGZpCkBAIC01NTA2LDcgKzU3MTQsNyBAQAogIyBvcHRpb25zIGJlZm9yZSB3ZSBjYW4gY2hlY2sgd2hldGhlciAtS3B0aHJlYWQgaW1wcm92ZXMgYW55dGhpbmcuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IG9wdGlvbnMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgb3B0aW9ucy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CkBAIC01NTU5LDcgKzU3NjcsNyBAQAogIyBmdW5jdGlvbiBhdmFpbGFibGUuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLUtwdGhyZWFkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLUtwdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2twdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfa3B0aHJlYWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19zYXZlX2NjPSIkQ0MiCkBAIC01NjA4LDcgKzU4MTYsNyBAQAogIyBmdW5jdGlvbiBhdmFpbGFibGUuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLUt0aHJlYWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtS3RocmVhZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9rdGhyZWFkK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfa3RocmVhZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX3NhdmVfY2M9IiRDQyIKQEAgLTU2NTcsNyArNTg2NSw3IEBACiAjIGZ1bmN0aW9uIGF2YWlsYWJsZS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtcHRocmVhZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1wdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3RocmVhZCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3RocmVhZCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX3NhdmVfY2M9IiRDQyIKQEAgLTU3NDIsNyArNTk1MCw3IEBACiAjIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zdGRjK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC01ODYzLDEyICs2MDcxLDExIEBACiBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggbGlidXRpbC5oIFwKIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmgKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmgKIGRvIDoKICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1ldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKLSAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCkBAIC01ODgyLDcgKzYwODksNyBAQAogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIuLi4gIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgoraWYgZXZhbCBcJHskYXNfYWNfSGVhZGVyKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtNTkwOSw4ICs2MTE2LDcgQEAKIGV2YWwgYWNfcmVzPVwkJGFzX2FjX0hlYWRlcgogCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiAkYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci1ldmFsIGFzX3ZhbD1cJCRhc19hY19IZWFkZXIKLSAgIGlmIHRlc3QgIngkYXNfdmFsIiA9IHgiInllczsgdGhlbiA6CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZHIiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCkBAIC01OTIzLDcgKzYxMjksNyBAQAogaWYgdGVzdCAkYWNfaGVhZGVyX2RpcmVudCA9IGRpcmVudC5oOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCkBAIC01OTU3LDExICs2MTYzLDExIEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0Ci0gIGlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKICAgYnJlYWsKIGZpCiBkb25lCi1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrOn0gZmFsc2U7IHRoZW4gOgogCiBlbHNlCiAgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCkBAIC01OTgwLDcgKzYxODYsNyBAQAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpciIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUwpAQCAtNjAxNCwxMSArNjIyMCwxMSBAQAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotICBpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgaWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CiAgIGJyZWFrCiBmaQogZG9uZQotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfb3BlbmRpcitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKIAogZWxzZQogICBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubwpAQCAtNjAzOCw3ICs2MjQ0LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN5cy90eXBlcy5oIGRlZmluZXMgbWFrZWRldiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN5cy90eXBlcy5oIGRlZmluZXMgbWFrZWRldi4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRlditzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaF9tYWtlZGV2Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtNjA2Niw3ICs2MjcyLDcgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXYgPSBubzsgdGhlbgogYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9ta2Rldi5oIiAiYWNfY3ZfaGVhZGVyX3N5c19ta2Rldl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21rZGV2X2giID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIE1BSk9SX0lOX01LREVWIDEiID4+Y29uZmRlZnMuaAogCkBAIC02MDc2LDcgKzYyODIsNyBAQAogCiAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCA9IG5vOyB0aGVuCiAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9zeXNtYWNyb3MuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3lzbWFjcm9zX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zeXNtYWNyb3NfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3N5c21hY3Jvc19oIiA9IHh5ZXM7IHRoZW4gOgogCiAkYXNfZWNobyAiI2RlZmluZSBNQUpPUl9JTl9TWVNNQUNST1MgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTYwOTYsNyArNjMwMiw3IEBACiAjZW5kaWYKIAogIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl90ZXJtX2giID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9URVJNX0ggMQogX0FDRU9GCkBAIC02MTE4LDcgKzYzMjQsNyBAQAogI2VuZGlmCiAKICIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X25ldGxpbmtfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElOVVhfTkVUTElOS19IIDEKIF9BQ0VPRgpAQCAtNjI1Nyw2ICs2NDYzLDEzIEBACiBpZiB0ZXN0ICIkdXNlX2xmcyIgPSAieWVzIjsgdGhlbgogIyBUd28gZGVmaW5lcyBuZWVkZWQgdG8gZW5hYmxlIGxhcmdlZmlsZSBzdXBwb3J0IG9uIHZhcmlvdXMgcGxhdGZvcm1zCiAjIFRoZXNlIG1heSBhZmZlY3Qgc29tZSB0eXBlZGVmcworY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KK0FJWCopCisKKyRhc19lY2hvICIjZGVmaW5lIF9MQVJHRV9GSUxFUyAxIiA+PmNvbmZkZWZzLmgKKworICAgIDs7Citlc2FjCiAKICRhc19lY2hvICIjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEiID4+Y29uZmRlZnMuaAogCkBAIC02Mjc0LDcgKzY0ODcsNyBAQAogCiAjIFR5cGUgYXZhaWxhYmlsaXR5IGNoZWNrcwogYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAibW9kZV90IiAiYWNfY3ZfdHlwZV9tb2RlX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9tb2RlX3QiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9tb2RlX3QiID0geHllczsgdGhlbiA6CiAKIGVsc2UKIApAQCAtNjI4NSw3ICs2NDk4LDcgQEAKIGZpCiAKIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm9mZl90IiAiYWNfY3ZfdHlwZV9vZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX29mZl90IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfb2ZmX3QiID0geHllczsgdGhlbiA6CiAKIGVsc2UKIApAQCAtNjI5Niw3ICs2NTA5LDcgQEAKIGZpCiAKIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInBpZF90IiAiYWNfY3ZfdHlwZV9waWRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcGlkX3QiID0geHllczsgdGhlbiA6CiAKIGVsc2UKIApAQCAtNjMwNiw0MSArNjUxOSwxMyBAQAogCiBmaQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaWduYWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLWludAotbWFpbiAoKQotewotcmV0dXJuICooc2lnbmFsICgwLCAwKSkgKDApID09IDE7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfdHlwZV9zaWduYWw9aW50Ci1lbHNlCi0gIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfdHlwZV9zaWduYWwiID4mNjsgfQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFJFVFNJR1RZUEUgJGFjX2N2X3R5cGVfc2lnbmFsCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAogX0FDRU9GCiAKLQogYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAiYWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9zaXplX3QiID0geHllczsgdGhlbiA6CiAKIGVsc2UKIApAQCAtNjM1Miw3ICs2NTM3LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWlkX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl90eXBlX3VpZF90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtNjM4MCw4ICs2NTY1LDU4IEBACiAKIGZpCiAKK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX3VpbnQzMl90IgorY2FzZSAkYWNfY3ZfY191aW50MzJfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisKKyRhc19lY2hvICIjZGVmaW5lIF9VSU5UMzJfVCAxIiA+PmNvbmZkZWZzLmgKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHVpbnQzMl90ICRhY19jdl9jX3VpbnQzMl90CitfQUNFT0YKKzs7CisgIGVzYWMKKworYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfdWludDY0X3QiCitjYXNlICRhY19jdl9jX3VpbnQ2NF90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKKworJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ2NF9UIDEiID4+Y29uZmRlZnMuaAorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgdWludDY0X3QgJGFjX2N2X2NfdWludDY0X3QKK19BQ0VPRgorOzsKKyAgZXNhYworCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX2ludDMyX3QiCitjYXNlICRhY19jdl9jX2ludDMyX3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGludDMyX3QgJGFjX2N2X2NfaW50MzJfdAorX0FDRU9GCis7OworZXNhYworCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiNjQiICJhY19jdl9jX2ludDY0X3QiCitjYXNlICRhY19jdl9jX2ludDY0X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGludDY0X3QgJGFjX2N2X2NfaW50NjRfdAorX0FDRU9GCis7OworZXNhYworCiBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzc2l6ZV90IiAiYWNfY3ZfdHlwZV9zc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3NpemVfdCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1NJWkVfVCAxIiA+PmNvbmZkZWZzLmgKIApAQCAtNjM5Niw3ICs2NjMxLDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9pbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfaW50Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoaW50KSkiICJhY19jdl9zaXplb2ZfaW50IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NDA1LDkgKzY2NDAsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnQiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9pbnQ9MAogICAgZmkKQEAgLTY0MzAsNyArNjY2NCw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmciID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nKSkiICJhY19jdl9zaXplb2ZfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjQzOSw5ICs2NjczLDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZyIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfbG9uZz0wCiAgICBmaQpAQCAtNjQ2NCw3ICs2Njk3LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygdm9pZCAqIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygdm9pZCAqLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl92b2lkX3Arc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2Zfdm9pZF9wKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAodm9pZCAqKSkiICJhY19jdl9zaXplb2Zfdm9pZF9wIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NDczLDkgKzY3MDYsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV92b2lkX3AiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkICopCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKikKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl92b2lkX3A9MAogICAgZmkKQEAgLTY0OTgsNyArNjczMCw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHNob3J0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3Nob3J0K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3Nob3J0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2hvcnQpKSIgImFjX2N2X3NpemVvZl9zaG9ydCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjUwNyw5ICs2NzM5LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc2hvcnQiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2Zfc2hvcnQ9MAogICAgZmkKQEAgLTY1MzIsNyArNjc2Myw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGZsb2F0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgZmxvYXQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2Zsb2F0K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX2Zsb2F0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoZmxvYXQpKSIgImFjX2N2X3NpemVvZl9mbG9hdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjU0MSw5ICs2NzcyLDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZmxvYXQiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmbG9hdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfZmxvYXQ9MAogICAgZmkKQEAgLTY1NjYsNyArNjc5Niw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGRvdWJsZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGRvdWJsZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGRvdWJsZSkpIiAiYWNfY3Zfc2l6ZW9mX2RvdWJsZSIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjU3NSw5ICs2ODA1LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfZG91YmxlPTAKICAgIGZpCkBAIC02NjAwLDcgKzY4MjksNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBmcG9zX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBmcG9zX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2Zwb3NfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9mcG9zX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChmcG9zX3QpKSIgImFjX2N2X3NpemVvZl9mcG9zX3QiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY2MDksOSArNjgzOCw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2Zwb3NfdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZwb3NfdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX2Zwb3NfdD0wCiAgICBmaQpAQCAtNjYzNCw3ICs2ODYyLDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygc2l6ZV90IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygc2l6ZV90Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9zaXplX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2Zfc2l6ZV90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoc2l6ZV90KSkiICJhY19jdl9zaXplb2Zfc2l6ZV90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02NjQzLDkgKzY4NzEsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaXplX3QiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaXplX3QpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNpemVfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9zaXplX3Q9MAogICAgZmkKQEAgLTY2NjgsNyArNjg5NSw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHBpZF90IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgcGlkX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3BpZF90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3BpZF90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAocGlkX3QpKSIgImFjX2N2X3NpemVvZl9waWRfdCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjY3Nyw5ICs2OTA0LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfcGlkX3QiID0geWVzOyB0aGVuCiAgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQogJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQoteyBhc19mbl9zZXRfc3RhdHVzIDc3Ci1hc19mbl9lcnJvciAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChwaWRfdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAocGlkX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfcGlkX3Q9MAogICAgZmkKQEAgLTY3MjksNyArNjk1NSw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19sb25nK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcgbG9uZykpIiAiYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgpAQCAtNjczOCw5ICs2OTY0LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA9IHllczsgdGhlbgogICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLXsgYXNfZm5fc2V0X3N0YXR1cyA3NwotYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGxvbmcpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKICAgIGZpCkBAIC02NzY4LDcgKzY5OTMsNyBAQAogaW50CiBtYWluICgpCiB7Ci1sb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTAuOworbG9uZyBkb3VibGUgeDsgeCA9IChsb25nIGRvdWJsZSkwOwogICA7CiAgIHJldHVybiAwOwogfQpAQCAtNjc5MSw3ICs3MDE2LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpIiAiYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02ODAwLDkgKzcwMjUsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGRvdWJsZSkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0wCiAgICBmaQpAQCAtNjg1Myw3ICs3MDc3LDcgQEAKICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgX0Jvb2wiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBfQm9vbC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfX0Jvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfX0Jvb2wrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChfQm9vbCkpIiAiYWNfY3Zfc2l6ZW9mX19Cb29sIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CkBAIC02ODYyLDkgKzcwODYsOCBAQAogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9Cb29sKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfQm9vbCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9fQm9vbD0wCiAgICBmaQpAQCAtNjg4Niw4ICs3MTA5LDExIEBACiBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50cHRyX3QiICJhY19jdl90eXBlX3VpbnRwdHJfdCIgIiNpZmRlZiBIQVZFX1NURElOVF9ICiAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KICAgICAgICAgI2VuZGlmCisgICAgICAgICNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyAgICAgICAgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgICAgICAgICNlbmRpZgogIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1VJTlRQVFJfVCAxCkBAIC02ODk5LDcgKzcxMjUsNyBAQAogIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB1aW50cHRyX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB1aW50cHRyX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl91aW50cHRyX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh1aW50cHRyX3QpKSIgImFjX2N2X3NpemVvZl91aW50cHRyX3QiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKQEAgLTY5MDgsOSArNzEzNCw4IEBACiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfTsgfQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludHB0cl90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KICAgIGVsc2UKICAgICAgYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdD0wCiAgICBmaQpAQCAtNjkzMCw0OCArNzE1NSw0NSBAQAogZmkKIAogCi0KLSMgSG1waC4gQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDxzeXMvdHlwZXMuaD4uCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIG9mZl90IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2Ygb2ZmX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX29mZl90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX29mZl90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9zaXplb2Zfb2ZmX3Q9NAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAob2ZmX3QpKSIgImFjX2N2X3NpemVvZl9vZmZfdCIgICAgICAgICIKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci1tYWluKCkKLXsKLSAgRklMRSAqZj1mb3BlbigiY29uZnRlc3R2YWwiLCAidyIpOwotICBpZiAoIWYpIGV4aXQoMSk7Ci0gIGZwcmludGYoZiwgIiVkXG4iLCBzaXplb2Yob2ZmX3QpKTsKLSAgZXhpdCgwKTsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl9vZmZfdD1gY2F0IGNvbmZ0ZXN0dmFsYAorI2VuZGlmCisKKyI7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2N2X3NpemVvZl9vZmZfdD0wCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9vZmZfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9vZmZfdD0wCisgICBmaQogZmkKIAotCiBmaQotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X3NpemVvZl9vZmZfdCIgPiY2OyB9CiAKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9PRkZfVCAkYWNfY3Zfc2l6ZW9mX29mZl90CiBfQUNFT0YKIAogCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydC4uLiAiID4mNjsgfQogaWYgdGVzdCAiJGhhdmVfbG9uZ19sb25nIiA9IHllcwpAQCAtNjk5Miw0MiArNzIxNCw0MiBAQAogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSMgQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDx0aW1lLmg+LgorIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiB0aW1lX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB0aW1lX3QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3RpbWVfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl90aW1lX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl90aW1lX3Q9NAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAodGltZV90KSkiICJhY19jdl9zaXplb2ZfdGltZV90IiAgICAgICAgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVElNRV9ICiAjaW5jbHVkZSA8dGltZS5oPgotbWFpbigpCi17Ci0gIEZJTEUgKmY9Zm9wZW4oImNvbmZ0ZXN0dmFsIiwgInciKTsKLSAgaWYgKCFmKSBleGl0KDEpOwotICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6ZW9mKHRpbWVfdCkpOwotICBleGl0KDApOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX3RpbWVfdD1gY2F0IGNvbmZ0ZXN0dmFsYAorI2VuZGlmCisKKyI7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2N2X3NpemVvZl90aW1lX3Q9MAotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdGltZV90IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHRpbWVfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl90aW1lX3Q9MAorICAgZmkKIGZpCiAKLQogZmkKLQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfdGltZV90IiA+JjUKICRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3RpbWVfdCIgPiY2OyB9CiAKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9USU1FX1QgJGFjX2N2X3NpemVvZl90aW1lX3QKIF9BQ0VPRgpAQCAtNzA0OCw3ICs3MjcwLDggQEAKIGhhdmVfcHRocmVhZF90PW5vCiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8cHRocmVhZC5oPgorCisgICNpbmNsdWRlIDxwdGhyZWFkLmg+CiBpbnQKIG1haW4gKCkKIHsKQEAgLTcwNTYsNiArNzI3OSw3IEBACiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBoYXZlX3B0aHJlYWRfdD15ZXMKQEAgLTcwNjQsNDYgKzcyODgsNDQgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9wdGhyZWFkX3QiID4mNQogJGFzX2VjaG8gIiRoYXZlX3B0aHJlYWRfdCIgPiY2OyB9CiBpZiB0ZXN0ICIkaGF2ZV9wdGhyZWFkX3QiID0geWVzIDsgdGhlbgotICAjIEFDX0NIRUNLX1NJWkVPRigpIGRvZXNuJ3QgaW5jbHVkZSA8cHRocmVhZC5oPi4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHB0aHJlYWRfdCIgPiY1CisgICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgcHRocmVhZF90IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgcHRocmVhZF90Li4uICIgPiY2OyB9Ci0gIGlmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3NpemVvZl9wdGhyZWFkX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9NAotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAocHRocmVhZF90KSkiICJhY19jdl9zaXplb2ZfcHRocmVhZF90IiAgICAgICAgIgorI2lmZGVmIEhBVkVfUFRIUkVBRF9ICiAjaW5jbHVkZSA8cHRocmVhZC5oPgotICBtYWluKCkKLSAgewotICAgIEZJTEUgKmY9Zm9wZW4oImNvbmZ0ZXN0dmFsIiwgInciKTsKLSAgICBpZiAoIWYpIGV4aXQoMSk7Ci0gICAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZihwdGhyZWFkX3QpKTsKLSAgICBleGl0KDApOwotICB9Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zaXplb2ZfcHRocmVhZF90PWBjYXQgY29uZnRlc3R2YWxgCisjZW5kaWYKKworIjsgdGhlbiA6CisKIGVsc2UKLSAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD0wCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9wdGhyZWFkX3QiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAocHRocmVhZF90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD0wCisgICBmaQogZmkKIAotCiBmaQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCIgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QiID4mNQogJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfcHRocmVhZF90IiA+JjY7IH0KIAorCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX1BUSFJFQURfVCAkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdAogX0FDRU9GCiAKKwogZmkKIENDPSIkYWNfc2F2ZV9jYyIKIApAQCAtNzIwOCw3ICs3NDMwLDcgQEAKICAgICAJCU1BQ09TWF9ERUZBVUxUX0FSQ0g9InBwYyIKICAgICAJCTs7CiAgICAgCSopCi0gICAgCQlhc19mbl9lcnJvciAiVW5leHBlY3RlZCBvdXRwdXQgb2YgJ2FyY2gnIG9uIE9TWCIgIiRMSU5FTk8iIDUKKyAgICAJCWFzX2ZuX2Vycm9yICQ/ICJVbmV4cGVjdGVkIG91dHB1dCBvZiAnYXJjaCcgb24gT1NYIiAiJExJTkVOTyIgNQogICAgIAkJOzsKICAgICAJZXNhYwogICAgIGVsc2UKQEAgLTcyMjAsNyArNzQ0Miw3IEBACiAgICAgCQlNQUNPU1hfREVGQVVMVF9BUkNIPSJwcGM2NCIKICAgICAJCTs7CiAgICAgCSopCi0gICAgCQlhc19mbl9lcnJvciAiVW5leHBlY3RlZCBvdXRwdXQgb2YgJ2FyY2gnIG9uIE9TWCIgIiRMSU5FTk8iIDUKKyAgICAJCWFzX2ZuX2Vycm9yICQ/ICJVbmV4cGVjdGVkIG91dHB1dCBvZiAnYXJjaCcgb24gT1NYIiAiJExJTkVOTyIgNQogICAgIAkJOzsKICAgICAJZXNhYwogCkBAIC03MjQ2LDcgKzc0NjgsNyBAQAogJGFzX2VjaG8gInllcyIgPiY2OyB9CiAJaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiCiAJdGhlbgotCQlhc19mbl9lcnJvciAiU3BlY2lmeWluZyBib3RoIC0tZW5hYmxlLXNoYXJlZCBhbmQgLS1lbmFibGUtZnJhbWV3b3JrIGlzIG5vdCBzdXBwb3J0ZWQsIHVzZSBvbmx5IC0tZW5hYmxlLWZyYW1ld29yayBpbnN0ZWFkLiBTZWUgTWFjL1JFQURNRS4iICIkTElORU5PIiA1CisJCWFzX2ZuX2Vycm9yICQ/ICJTcGVjaWZ5aW5nIGJvdGggLS1lbmFibGUtc2hhcmVkIGFuZCAtLWVuYWJsZS1mcmFtZXdvcmsgaXMgbm90IHN1cHBvcnRlZCwgdXNlIG9ubHkgLS1lbmFibGUtZnJhbWV3b3JrIGluc3RlYWQuIFNlZSBNYWMvUkVBRE1FLiIgIiRMSU5FTk8iIDUKIAlmaQogZWxzZQogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC03Mjc1LDYgKzc0OTcsNyBAQAogCiAKIAorCiAjIFNPIGlzIHRoZSBleHRlbnNpb24gb2Ygc2hhcmVkIGxpYnJhcmllcyBgKGluY2x1ZGluZyB0aGUgZG90ISkKICMgLS0gdXN1YWxseSAuc28sIC5zbCBvbiBIUC1VWCwgLmRsbCBvbiBDeWd3aW4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgU08iID4mNQpAQCAtNzMyMSw3ICs3NTQ0LDcgQEAKIHRoZW4KIAljYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogCUFJWCopCi0JCUJMRFNIQVJFRD0iXCQoc3JjZGlyKS9Nb2R1bGVzL2xkX3NvX2FpeCBcJChDQykgLWJJOk1vZHVsZXMvcHl0aG9uLmV4cCIKKwkJQkxEU0hBUkVEPSJcJChzcmNkaXIpL01vZHVsZXMvbGRfc29fYWl4IFwkKENDKSAtYkk6XCQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5leHAiCiAJCUxEU0hBUkVEPSJcJChCSU5MSUJERVNUKS9jb25maWcvbGRfc29fYWl4IFwkKENDKSAtYkk6XCQoQklOTElCREVTVCkvY29uZmlnL3B5dGhvbi5leHAiCiAJCTs7CiAJQmVPUyopCkBAIC03MzMxLDM2ICs3NTU0LDQ3IEBACiAJSVJJWC81KikgTERTSEFSRUQ9ImxkIC1zaGFyZWQiOzsKIAlJUklYKi82KikgTERTSEFSRUQ9ImxkICR7U0dJX0FCSX0gLXNoYXJlZCAtYWxsIjs7CiAJU3VuT1MvNSopCi0JCWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLQkJdGhlbiBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKLQkJZWxzZSBMRFNIQVJFRD0nJChDQykgLUcnOworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSckKENDKSAtRycKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLUcnCiAJCWZpIDs7CiAJaHAqfEhQKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSdsZCAtYic7CisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9J2xkIC1iJwogCQlmaSA7OwogCU9TRiopIExEU0hBUkVEPSJsZCAtc2hhcmVkIC1leHBlY3RfdW5yZXNvbHZlZCBcIipcIiI7OwogCURhcndpbi8xLjMqKQotCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlJworCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCiAJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQllbHNlCiAJCQkjIE5vIGZyYW1ld29yay4gSWdub3JlIHVuZGVmaW5lZCBzeW1ib2xzLCBhc3N1bWluZyB0aGV5IGNvbWUgZnJvbSBQeXRob24KIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKIAkJZmkgOzsKIAlEYXJ3aW4vMS40KnxEYXJ3aW4vNS4qfERhcndpbi82LiopCi0JCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCWVsc2UKIAkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJVSUxEUFlUSE9OKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJZmkgOzsKIAlEYXJ3aW4vKikKIAkJIyBVc2UgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCB3aGVuZXZlciBwb3NzaWJsZSAoMTAuMyBhbmQgbGF0ZXIpLgpAQCAtNzM3MSw1OSArNzYwNSw4MSBAQAogCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KIAkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCiAJCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWVsc2UKLQkJCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJZWxzZQogCQkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCVUlMRFBZVEhPTiknCiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCiAJCWZpCiAJCTs7Ci0JTGludXgqfEdOVSp8UU5YKikgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnOzsKLQlCU0QvT1MqLzQqKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiOzsKKwlMaW51eCp8R05VKnxRTlgqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CisJQlNEL09TKi80KikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQiOzsKIAlGcmVlQlNEKikKIAkJaWYgWyAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBfX0VMRl9fYCIgIT0gIiIgXQogCQl0aGVuCi0JCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAke0xERkxBR1N9JworCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCiAJCWVsc2UKLQkJCUxEU0hBUkVEPSJsZCAtQnNoYXJlYWJsZSAke0xERkxBR1N9IgorCQkJTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlIgogCQlmaTs7CiAJT3BlbkJTRCopCiAJCWlmIFsgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF0KIAkJdGhlbgotCQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpICR7TERGTEFHU30nCisJCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCknCisJCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkICQoQ0NTSEFSRUQpJwogCQllbHNlCiAJCQkJY2FzZSBgdW5hbWUgLXJgIGluCiAJCQkJWzAxXS4qIHwgMi5bMC03XSB8IDIuWzAtN10uKikKIAkJCQkgICBMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUgJHtMREZMQUdTfSIKIAkJCQkgICA7OwogCQkJCSopCi0JCQkJICAgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCkgJHtMREZMQUdTfScKKwkJCQkgICBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKScKKwkJCQkgICBMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQgJChDQ1NIQVJFRCknCiAJCQkJICAgOzsKIAkJCQllc2FjCiAJCWZpOzsKLQlOZXRCU0QqfERyYWdvbkZseSopIExEU0hBUkVEPSJjYyAtc2hhcmVkICR7TERGTEFHU30iOzsKKwlOZXRCU0QqfERyYWdvbkZseSopCisJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnOzsKIAlPcGVuVU5JWCp8VW5peFdhcmUqKQotCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi0JCXRoZW4gTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCi0JCWVsc2UgTERTSEFSRUQ9JyQoQ0MpIC1HJworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSckKENDKSAtRycKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLUcnCiAJCWZpOzsKLQlTQ09fU1YqKSBMRFNIQVJFRD0nJChDQykgLVdsLC1HLC1CZXhwb3J0Jzs7Ci0JTW9udGVyZXkqKSBMRFNIQVJFRD0iY2MgLUcgLWR5IC1CZHluYW1pYyAtQmV4cG9ydCAtTC91c3IvbGliL2lhNjRsNjQiOzsKLQlDWUdXSU4qKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSI7OwotCWF0aGVvcyopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCI7OworCVNDT19TViopCisJCUxEU0hBUkVEPSckKENDKSAtV2wsLUcsLUJleHBvcnQnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLVdsLC1HLC1CZXhwb3J0Jzs7CisJQ1lHV0lOKikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiCisJCUxEQ1hYU0hBUkVEPSJnKysgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIjs7CisJYXRoZW9zKikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQiOzsKIAkqKQlMRFNIQVJFRD0ibGQiOzsKIAllc2FjCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRFNIQVJFRCIgPiY1CiAkYXNfZWNobyAiJExEU0hBUkVEIiA+JjY7IH0KK0xEQ1hYU0hBUkVEPSR7TERDWFhTSEFSRUQtJExEU0hBUkVEfQogQkxEU0hBUkVEPSR7QkxEU0hBUkVELSRMRFNIQVJFRH0KICMgQ0NTSEFSRUQgYXJlIHRoZSBDICpmbGFncyogdXNlZCB0byBjcmVhdGUgb2JqZWN0cyB0byBnbyBpbnRvIGEgc2hhcmVkCiAjIGxpYnJhcnkgKG1vZHVsZSkgLS0gdGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYSBmZXcgc3lzdGVtcwpAQCAtNzQ1NSw3ICs3NzExLDYgQEAKIAkJdGhlbiBDQ1NIQVJFRD0iLWZQSUMiCiAJCWVsc2UgQ0NTSEFSRUQ9Ii1LcGljIC1iZWxmIgogCQlmaTs7Ci0JTW9udGVyZXkqKSBDQ1NIQVJFRD0iLUciOzsKIAlJUklYKi82KikgIGNhc2UgJENDIGluCiAJCSAgICpnY2MqKSBDQ1NIQVJFRD0iLXNoYXJlZCI7OwogCQkgICAqKSBDQ1NIQVJFRD0iIjs7CkBAIC03NTY2LDcgKzc4MjEsNyBAQAogIyBjaGVja3MgZm9yIGxpYnJhcmllcwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtNzYwMCw3ICs3ODU1LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfTElCREwgMQogX0FDRU9GCkBAIC03NjExLDcgKzc4NjYsNyBAQAogCSMgRHluYW1pYyBsaW5raW5nIGZvciBTdW5PUy9Tb2xhcmlzIGFuZCBTWVNWCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC03NjQ1LDcgKzc5MDAsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJETEQgMQogX0FDRU9GCkBAIC03NjU5LDcgKzc5MTQsNyBAQAogaWYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiAtbyAteiAiJHdpdGhfdGhyZWFkcyI7IHRoZW4KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2VtX2luaXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzZW1faW5pdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc2VtX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zZWFyY2hfc2VtX2luaXQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKQEAgLTc2OTMsMTEgKzc5NDgsMTEgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQKLSAgaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc2VtX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBpZiAke2FjX2N2X3NlYXJjaF9zZW1faW5pdCs6fSBmYWxzZTsgdGhlbiA6CiAgIGJyZWFrCiBmaQogZG9uZQotaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc2VtX2luaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zZWFyY2hfc2VtX2luaXQrOn0gZmFsc2U7IHRoZW4gOgogCiBlbHNlCiAgIGFjX2N2X3NlYXJjaF9zZW1faW5pdD1ubwpAQCAtNzcyMCw3ICs3OTc1LDcgQEAKICMgY2hlY2sgaWYgd2UgbmVlZCBsaWJpbnRsIGZvciBsb2NhbGUgZnVuY3Rpb25zCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0ZXh0ZG9tYWluIGluIC1saW50bCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGV4dGRvbWFpbiBpbiAtbGludGwuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2ludGxfdGV4dGRvbWFpbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9pbnRsX3RleHRkb21haW4rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC03NzU0LDcgKzgwMDksNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2ludGxfdGV4dGRvbWFpbiIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9pbnRsX3RleHRkb21haW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfaW50bF90ZXh0ZG9tYWluIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pbnRsX3RleHRkb21haW4iID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIFdJVEhfTElCSU5UTCAxIiA+PmNvbmZkZWZzLmgKIApAQCAtNzc2Nyw3ICs4MDIyLDggQEAKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZW51aW5lIEFJWCBDKysgZXh0ZW5zaW9ucyBzdXBwb3J0Li4uICIgPiY2OyB9CiAJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlICIvdXNyL2xwcC94bEMvaW5jbHVkZS9sb2FkLmgiCisKKwkJICAjaW5jbHVkZSA8bG9hZC5oPgogaW50CiBtYWluICgpCiB7CkBAIC03Nzc1LDE2ICs4MDMxLDIxIEBACiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCisKICRhc19lY2hvICIjZGVmaW5lIEFJWF9HRU5VSU5FX0NQTFVTUExVUyAxIiA+PmNvbmZkZWZzLmgKIAotCQkJICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKwkJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisKKwkJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0OzsKQEAgLTc3OTUsNyArODA1Niw3IEBACiAjIEJlT1MnIHNvY2tldHMgYXJlIHN0YXNoZWQgaW4gbGlibmV0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX25zbF90X29wZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfbnNsX3Rfb3Blbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTc4MjksMTMgKzgwOTAsMTMgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfdF9vcGVuIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX25zbF90X29wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfbnNsX3Rfb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfbnNsX3Rfb3BlbiIgPSB4eWVzOyB0aGVuIDoKICAgTElCUz0iLWxuc2wgJExJQlMiCiBmaQogICMgU1ZSNAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxzb2NrZXQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3NvY2tldF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfc29ja2V0X3NvY2tldCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTc4NjksNyArODEzMCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc29ja2V0X3NvY2tldCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID0geHllczsgdGhlbiA6CiAgIExJQlM9Ii1sc29ja2V0ICRMSUJTIgogZmkKICAjIFNWUjQgc29ja2V0cwpAQCAtNzg3OCw3ICs4MTM5LDcgQEAKIEJlT1MqKQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc29ja2V0IGluIC1sbmV0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrZXQgaW4gLWxuZXQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX25ldF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfbmV0X3NvY2tldCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTc5MTIsNyArODE3Myw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbmV0X3NvY2tldCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9uZXRfc29ja2V0IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX25ldF9zb2NrZXQiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX25ldF9zb2NrZXQiID0geHllczsgdGhlbiA6CiAgIExJQlM9Ii1sbmV0ICRMSUJTIgogZmkKICAjIEJlT1MKQEAgLTc5MzUsNiArODE5NiwxMjAgQEAKIGZpCiAKIAoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworCisjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBleHBhdCBsaWJyYXJ5Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzdGVtX2V4cGF0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXN0ZW1fZXhwYXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3RlbV9leHBhdDsKK2Vsc2UKKyAgd2l0aF9zeXN0ZW1fZXhwYXQ9Im5vIgorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfc3lzdGVtX2V4cGF0IiA+JjUKKyRhc19lY2hvICIkd2l0aF9zeXN0ZW1fZXhwYXQiID4mNjsgfQorCiAjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBsaWJmZmkgbGlicmFyeQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLXN5c3RlbS1mZmkiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1zeXN0ZW0tZmZpLi4uICIgPiY2OyB9CkBAIC03OTQyLDEyICs4MzE3LDQ0IEBACiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXN5c3RlbV9mZmkgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX3N5c3RlbV9mZmkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX3N5c3RlbV9mZmk7CitlbHNlCisgIHdpdGhfc3lzdGVtX2ZmaT0ibm8iCitmaQorCisKK2lmIHRlc3QgIiR3aXRoX3N5c3RlbV9mZmkiID0gInllcyIgJiYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgTElCRkZJX0lOQ0xVREVESVI9ImAiJFBLR19DT05GSUciIGxpYmZmaSAtLWNmbGFncy1vbmx5LUkgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MvXi1JLy87cy8gKiQvLydgIgorZWxzZQorICAgIExJQkZGSV9JTkNMVURFRElSPSIiCiBmaQogCiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9zeXN0ZW1fZmZpIiA+JjUKICRhc19lY2hvICIkd2l0aF9zeXN0ZW1fZmZpIiA+JjY7IH0KIAorIyBDaGVjayBmb3IgLS13aXRoLWRibWxpYm9yZGVyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtZGJtbGlib3JkZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1kYm1saWJvcmRlci4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRibWxpYm9yZGVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kYm1saWJvcmRlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGJtbGlib3JkZXI7CitpZiB0ZXN0IHgkd2l0aF9kYm1saWJvcmRlciA9IHh5ZXMKK3RoZW4KK2FzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLWRibWxpYm9yZGVyPWRiMTpkYjI6Li4uIiAiJExJTkVOTyIgNQorZWxzZQorICBmb3IgZGIgaW4gYGVjaG8gJHdpdGhfZGJtbGlib3JkZXIgfCBzZWQgJ3MvOi8gL2cnYDsgZG8KKyAgICBpZiB0ZXN0IHgkZGIgIT0geG5kYm0gJiYgdGVzdCB4JGRiICE9IHhnZGJtICYmIHRlc3QgeCRkYiAhPSB4YmRiCisgICAgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtZGJtbGlib3JkZXI9ZGIxOmRiMjouLi4iICIkTElORU5PIiA1CisgICAgZmkKKyAgZG9uZQorZmkKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9kYm1saWJvcmRlciIgPiY1CiskYXNfZWNobyAiJHdpdGhfZGJtbGlib3JkZXIiID4mNjsgfQorCiAjIERldGVybWluZSBpZiBzaWduYWxtb2R1bGUgc2hvdWxkIGJlIHVzZWQuCiAKIApAQCAtODEwNSw3ICs4NTEyLDcgQEAKICAgICAkYXNfZWNobyAiI2RlZmluZSBfUkVFTlRSQU5UIDEiID4+Y29uZmRlZnMuaAogCiAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImN0aHJlYWRzLmgiICJhY19jdl9oZWFkZXJfY3RocmVhZHNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfY3RocmVhZHNfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfY3RocmVhZHNfaCIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCiAKICAgICAkYXNfZWNobyAiI2RlZmluZSBDX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCkBAIC04MTE4LDcgKzg1MjUsNyBAQAogZWxzZQogCiAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1hY2gvY3RocmVhZHMuaCIgImFjX2N2X2hlYWRlcl9tYWNoX2N0aHJlYWRzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX21hY2hfY3RocmVhZHNfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWFjaF9jdGhyZWFkc19oIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgICRhc19lY2hvICIjZGVmaW5lIENfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgKQEAgLTgxODAsNyArODU4Nyw3IEBACiAKICAgICBMSUJTPSRfbGlicwogICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInB0aHJlYWRfZGV0YWNoIiAiYWNfY3ZfZnVuY19wdGhyZWFkX2RldGFjaCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19wdGhyZWFkX2RldGFjaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3B0aHJlYWRfZGV0YWNoIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC04MTg4LDcgKzg1OTUsNyBAQAogZWxzZQogCiAgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImF0aGVvcy90aHJlYWRzLmgiICJhY19jdl9oZWFkZXJfYXRoZW9zX3RocmVhZHNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYXRoZW9zX3RocmVhZHNfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYXRoZW9zX3RocmVhZHNfaCIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCiAKIApAQCAtODE5OCw3ICs4NjA1LDcgQEAKIGVsc2UKIAogICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJrZXJuZWwvT1MuaCIgImFjX2N2X2hlYWRlcl9rZXJuZWxfT1NfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfa2VybmVsX09TX2giID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2tlcm5lbF9PU19oIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogCkBAIC04MjA5LDcgKzg2MTYsNyBAQAogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkcy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcHRocmVhZHNfcHRocmVhZF9jcmVhdGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfcHRocmVhZHNfcHRocmVhZF9jcmVhdGUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC04MjQzLDcgKzg2NTAsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkc19wdGhyZWFkX2NyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCiAKICAgICBwb3NpeF90aHJlYWRzPXllcwpAQCAtODI1Myw3ICs4NjYwLDcgQEAKIAogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1sY19yIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiAtbGNfci4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2NyZWF0ZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTgyODcsNyArODY5NCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY19yX3B0aHJlYWRfY3JlYXRlIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2NyZWF0ZSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jX3JfcHRocmVhZF9jcmVhdGUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2NyZWF0ZSIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCiAKICAgICBwb3NpeF90aHJlYWRzPXllcwpAQCAtODI5Nyw3ICs4NzA0LDcgQEAKIAogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fcHRocmVhZF9jcmVhdGVfc3lzdGVtIGluIC1scHRocmVhZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0gaW4gLWxwdGhyZWFkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9wdGhyZWFkX19fcHRocmVhZF9jcmVhdGVfc3lzdGVtK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC04MzMxLDcgKzg3MzgsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3B0aHJlYWRfX19wdGhyZWFkX2NyZWF0ZV9zeXN0ZW0iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcHRocmVhZF9fX3B0aHJlYWRfY3JlYXRlX3N5c3RlbSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX19fcHRocmVhZF9jcmVhdGVfc3lzdGVtIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX19fcHRocmVhZF9jcmVhdGVfc3lzdGVtIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC04MzQxLDcgKzg3NDgsNyBAQAogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxjbWEiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1sY21hLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9jbWFfcHRocmVhZF9jcmVhdGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfY21hX3B0aHJlYWRfY3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtODM3NSw3ICs4NzgyLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jbWFfcHRocmVhZF9jcmVhdGUiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfY21hX3B0aHJlYWRfY3JlYXRlIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2NtYV9wdGhyZWFkX2NyZWF0ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfY21hX3B0aHJlYWRfY3JlYXRlIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIHBvc2l4X3RocmVhZHM9eWVzCkBAIC04NDE1LDcgKzg4MjIsNyBAQAogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdXNjb25maWcgaW4gLWxtcGMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVzY29uZmlnIGluIC1sbXBjLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tcGNfdXNjb25maWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfbXBjX3VzY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtODQ0OSw3ICs4ODU2LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9tcGNfdXNjb25maWciID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfbXBjX3VzY29uZmlnIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX21wY191c2NvbmZpZyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfbXBjX3VzY29uZmlnIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBXSVRIX1RIUkVBRCAxIiA+PmNvbmZkZWZzLmgKIAogICAgIExJQlM9IiRMSUJTIC1sbXBjIgpAQCAtODQ2MSw3ICs4ODY4LDcgQEAKICAgICBpZiB0ZXN0ICIkcG9zaXhfdGhyZWFkcyIgIT0gInllcyI7IHRoZW4KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRocl9jcmVhdGUgaW4gLWx0aHJlYWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRocl9jcmVhdGUgaW4gLWx0aHJlYWQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3RocmVhZF90aHJfY3JlYXRlK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3RocmVhZF90aHJfY3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtODQ5NSw3ICs4OTAyLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl90aHJlYWRfdGhyX2NyZWF0ZSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl90aHJlYWRfdGhyX2NyZWF0ZSIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl90aHJlYWRfdGhyX2NyZWF0ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfdGhyZWFkX3Rocl9jcmVhdGUiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAogCiAgICAgICBMSUJTPSIkTElCUyAtbHRocmVhZCIKQEAgLTg1MzYsMTEgKzg5NDMsMTUgQEAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMgMSIgPj5jb25mZGVmcy5oCiAKIAkJICAgICAgIDs7CisgICAgICBBSVgvNikKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgZXNhYwogCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIFBUSFJFQURfU0NPUEVfU1lTVEVNIGlzIHN1cHBvcnRlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBpZiBQVEhSRUFEX1NDT1BFX1NZU1RFTSBpcyBzdXBwb3J0ZWQuLi4gIiA+JjY7IH0KLSAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgICAgIGlmICR7YWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgpAQCAtODU4Myw3ICs4OTk0LDcgQEAKICAgICAgIGZvciBhY19mdW5jIGluIHB0aHJlYWRfc2lnbWFzawogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwdGhyZWFkX3NpZ21hc2siICJhY19jdl9mdW5jX3B0aHJlYWRfc2lnbWFzayIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19wdGhyZWFkX3NpZ21hc2siID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19wdGhyZWFkX3NpZ21hc2siID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9QVEhSRUFEX1NJR01BU0sgMQogX0FDRU9GCkBAIC04NjIyLDYgKzkwMzMsNyBAQAogZWxzZQogCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgaXB2Nj1ubwpAQCAtODY0MiwxMyArOTA1NCwxNyBAQAogCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiAgIGlwdjY9eWVzCisKIGVsc2UKKwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgaXB2Nj1ubworCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dApAQCAtODY2MCwyNSArOTA3NiwzMSBAQAogJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgUkZDMjU1MyBBUEkgaXMgYXZhaWxhYmxlLi4uICIgPiY2OyB9CiAJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogaW50CiBtYWluICgpCiB7CiBzdHJ1Y3Qgc29ja2FkZHJfaW42IHg7Ci14LnNpbjZfc2NvcGVfaWQ7CisJCQkgICAgeC5zaW42X3Njb3BlX2lkOwogICA7CiAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCWlwdjY9eWVzCisJICBpcHY2PXllcworCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQotCQlpcHY2PW5vCisJICBpcHY2PW5vCisKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCkBAIC04NzYzLDcgKzkxODUsNyBAQAogCQkJOzsKIAkJc29sYXJpcykKIAkJCWlmIHRlc3QgLWYgL2V0Yy9uZXRjb25maWc7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgL3Vzci94cGc0L2Jpbi9ncmVwIC1xIHRjcDYgL2V0Yy9uZXRjb25maWc7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJEdSRVAgLXEgdGNwNiAvZXRjL25ldGNvbmZpZzsgdGhlbgogCQkJCWlwdjZ0eXBlPSRpCiAJCQkJaXB2NnRyeWxpYmM9eWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCkBAIC04ODUzLDcgKzkyNzUsOCBAQAogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE9TWCAxMC41IFNESyBvciBsYXRlci4uLiAiID4mNjsgfQogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KKworICAjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgogaW50CiBtYWluICgpCiB7CkBAIC04ODYxLDE0ICs5Mjg0LDE4IEBACiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCisKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfT1NYMTA1X1NESyAxIiA+PmNvbmZkZWZzLmgKIAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiBlbHNlCisKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiAKQEAgLTg5NDIsNiArOTM2OSwzMyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3B5bWFsbG9jIiA+JjUKICRhc19lY2hvICIkd2l0aF9weW1hbGxvYyIgPiY2OyB9CiAKKyMgQ2hlY2sgZm9yIFZhbGdyaW5kIHN1cHBvcnQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC12YWxncmluZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLXZhbGdyaW5kLi4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdmFsZ3JpbmQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3ZhbGdyaW5kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF92YWxncmluZDsKK2Vsc2UKKyAgd2l0aF92YWxncmluZD1ubworZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3ZhbGdyaW5kIiA+JjUKKyRhc19lY2hvICIkd2l0aF92YWxncmluZCIgPiY2OyB9CitpZiB0ZXN0ICIkd2l0aF92YWxncmluZCIgIT0gbm87IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidmFsZ3JpbmQvdmFsZ3JpbmQuaCIgImFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBXSVRIX1ZBTEdSSU5EIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJWYWxncmluZCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgaGVhZGVycyBub3QgYXZhaWxhYmxlIiAiJExJTkVOTyIgNQorCitmaQorCisKK2ZpCisKICMgQ2hlY2sgZm9yIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMuLi4gIiA+JjY7IH0KQEAgLTg5NzQsNyArOTQyOCw3IEBACiBmb3IgYWNfZnVuYyBpbiBkbG9wZW4KIGRvIDoKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfRExPUEVOIDEKIF9BQ0VPRgpAQCAtOTAzOSwyMCArOTQ5MywyMiBAQAogZm9yIGFjX2Z1bmMgaW4gYWxhcm0gc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCiAgY2xvY2sgY29uZnN0ciBjdGVybWlkIGV4ZWN2IGZjaG1vZCBmY2hvd24gZm9yayBmcGF0aGNvbmYgZnRpbWUgZnRydW5jYXRlIFwKICBnYWlfc3RyZXJyb3IgZ2V0Z3JvdXBzIGdldGxvZ2luIGdldGxvYWRhdmcgZ2V0cGVlcm5hbWUgZ2V0cGdpZCBnZXRwaWQgXAotIGdldHByaW9yaXR5IGdldHB3ZW50IGdldHNwbmFtIGdldHNwZW50IGdldHNpZCBnZXR3ZCBcCi0ga2lsbCBraWxscGcgbGNobW9kIGxjaG93biBsc3RhdCBta2ZpZm8gbWtub2QgbWt0aW1lIFwKKyBnZXRwcmlvcml0eSBnZXRyZXN1aWQgZ2V0cmVzZ2lkIGdldHB3ZW50IGdldHNwbmFtIGdldHNwZW50IGdldHNpZCBnZXR3ZCBcCisgaW5pdGdyb3VwcyBraWxsIGtpbGxwZyBsY2htb2QgbGNob3duIGxzdGF0IG1rZmlmbyBta25vZCBta3RpbWUgXAogIG1yZW1hcCBuaWNlIHBhdGhjb25mIHBhdXNlIHBsb2NrIHBvbGwgcHRocmVhZF9pbml0IFwKICBwdXRlbnYgcmVhZGxpbmsgcmVhbHBhdGggXAotIHNlbGVjdCBzZXRlZ2lkIHNldGV1aWQgc2V0Z2lkIFwKKyBzZWxlY3Qgc2VtX29wZW4gc2VtX3RpbWVkd2FpdCBzZW1fZ2V0dmFsdWUgc2VtX3VubGluayBzZXRlZ2lkIHNldGV1aWQgXAorIHNldGdpZCBcCiAgc2V0bG9jYWxlIHNldHJlZ2lkIHNldHJldWlkIHNldHNpZCBzZXRwZ2lkIHNldHBncnAgc2V0dWlkIHNldHZidWYgc25wcmludGYgXAorIHNldGxvY2FsZSBzZXRyZWdpZCBzZXRyZXVpZCBzZXRyZXN1aWQgc2V0cmVzZ2lkIFwKKyBzZXRzaWQgc2V0cGdpZCBzZXRwZ3JwIHNldHVpZCBzZXR2YnVmIHNucHJpbnRmIFwKICBzaWdhY3Rpb24gc2lnaW50ZXJydXB0IHNpZ3JlbHNlIHN0cmZ0aW1lIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVuc2V0ZW52IHV0aW1lcyB3YWl0cGlkIHdhaXQzIHdhaXQ0IHdjc2NvbGwgX2dldHB0eQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKLWV2YWwgYXNfdmFsPVwkJGFzX2FjX3ZhcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQogX0FDRU9GCkBAIC05MDgwLDcgKzk1MzYsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NIUk9PVCAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05MTA1LDcgKzk1NjEsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJTksgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTEzMCw3ICs5NTg2LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWU1MSU5LIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkxNTUsNyArOTYxMSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRkNIRElSIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkxODAsNyArOTYzNiw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRlNZTkMgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTIwNSw3ICs5NjYxLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTIzMCw3ICs5Njg2LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FUE9MTCAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05MjU4LDcgKzk3MTQsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0tRVUVVRSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05Mjc3LDcgKzk3MzMsNiBAQAogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCiBpbnQKQEAgLTkyOTIsNyArOTc0Nyw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1RFUk1JRF9SIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkzMDEsNDEgKzk3NTYsMTAwIEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZsb2NrIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBmbG9jay4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmxvY2sgZGVjbGFyYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZsb2NrIGRlY2xhcmF0aW9uLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2Zsb2NrX2RlY2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0KIGludAogbWFpbiAoKQogewogdm9pZCogcCA9IGZsb2NrCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZMT0NLIDEiID4+Y29uZmRlZnMuaAotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGFjX2N2X2Zsb2NrX2RlY2w9eWVzCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQorICBhY19jdl9mbG9ja19kZWNsPW5vCiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZmxvY2tfZGVjbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Zsb2NrX2RlY2wiID4mNjsgfQoraWYgdGVzdCAieCR7YWNfY3ZfZmxvY2tfZGVjbH0iID0geHllczsgdGhlbgorICBmb3IgYWNfZnVuYyBpbiBmbG9jaworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJmbG9jayIgImFjX2N2X2Z1bmNfZmxvY2siCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZmxvY2siID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9GTE9DSyAxCitfQUNFT0YKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmbG9jayBpbiAtbGJzZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxvY2sgaW4gLWxic2QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2JzZF9mbG9jays6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sYnNkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBmbG9jayAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGZsb2NrICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9ic2RfZmxvY2s9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9ic2RfZmxvY2s9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2JzZF9mbG9jayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9ic2RfZmxvY2siID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfYnNkX2Zsb2NrIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZMT0NLIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIEZMT0NLX05FRURTX0xJQkJTRCAxIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKK2ZpCitkb25lCisKK2ZpCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldHBhZ2VzaXplIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRwYWdlc2l6ZS4uLiAiID4mNjsgfQogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogaW50CkBAIC05MzUwLDcgKzk4NjQsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkzNjUsNyArOTg3OSw3IEBACiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX1RSVUUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9wcm9nX1RSVUUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkVFJVRSI7IHRoZW4KQEAgLTk0MDUsNyArOTkxOSw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbGMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbGMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NfaW5ldF9hdG9uK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2NfaW5ldF9hdG9uKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTQzOSwxMiArOTk1MywxMiBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2NfaW5ldF9hdG9uIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2NfaW5ldF9hdG9uIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2NfaW5ldF9hdG9uIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jX2luZXRfYXRvbiIgPSB4eWVzOyB0aGVuIDoKICAgJGFjX2N2X3Byb2dfVFJVRQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmV0X2F0b24gaW4gLWxyZXNvbHYiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGluZXRfYXRvbiBpbiAtbHJlc29sdi4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTQ3OCw3ICs5OTkyLDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZXNvbHZfaW5ldF9hdG9uIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX3Jlc29sdl9pbmV0X2F0b24iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbiIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfcmVzb2x2X2luZXRfYXRvbiIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQlJFU09MViAxCiBfQUNFT0YKQEAgLTk0OTUsNyArMTAwMDksNyBAQAogIyBleGl0IFB5dGhvbgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2hmbGFncyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgY2hmbGFncy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oYXZlX2NoZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oYXZlX2NoZmxhZ3MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CkBAIC05NTI5LDcgKzEwMDQzLDcgQEAKICRhc19lY2hvICIkYWNfY3ZfaGF2ZV9jaGZsYWdzIiA+JjY7IH0KIGlmIHRlc3QgIiRhY19jdl9oYXZlX2NoZmxhZ3MiID0gY3Jvc3MgOyB0aGVuCiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImNoZmxhZ3MiICJhY19jdl9mdW5jX2NoZmxhZ3MiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfY2hmbGFncyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2NoZmxhZ3MiID0geHllczsgdGhlbiA6CiAgIGFjX2N2X2hhdmVfY2hmbGFncz0ieWVzIgogZWxzZQogICBhY19jdl9oYXZlX2NoZmxhZ3M9Im5vIgpAQCAtOTU0NCw3ICsxMDA1OCw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxjaGZsYWdzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsY2hmbGFncy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oYXZlX2xjaGZsYWdzK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfaGF2ZV9sY2hmbGFncys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKQEAgLTk1NzgsNyArMTAwOTIsNyBAQAogJGFzX2VjaG8gIiRhY19jdl9oYXZlX2xjaGZsYWdzIiA+JjY7IH0KIGlmIHRlc3QgIiRhY19jdl9oYXZlX2xjaGZsYWdzIiA9IGNyb3NzIDsgdGhlbgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJsY2hmbGFncyIgImFjX2N2X2Z1bmNfbGNoZmxhZ3MiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbGNoZmxhZ3MiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19sY2hmbGFncyIgPSB4eWVzOyB0aGVuIDoKICAgYWNfY3ZfaGF2ZV9sY2hmbGFncz0ieWVzIgogZWxzZQogICBhY19jdl9oYXZlX2xjaGZsYWdzPSJubyIKQEAgLTk2MDIsNyArMTAxMTYsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmZsYXRlQ29weSBpbiAtbHoiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGluZmxhdGVDb3B5IGluIC1sei4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfel9pbmZsYXRlQ29weStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl96X2luZmxhdGVDb3B5Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTYzNiw3ICsxMDE1MCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfel9pbmZsYXRlQ29weSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl96X2luZmxhdGVDb3B5IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3pfaW5mbGF0ZUNvcHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3pfaW5mbGF0ZUNvcHkiID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfWkxJQl9DT1BZIDEiID4+Y29uZmRlZnMuaAogCkBAIC05NjU1LDcgKzEwMTY5LDYgQEAKIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAogaW50CkBAIC05NjcwLDcgKzEwMTgzLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9IU1RSRVJST1IgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTY4NSw3ICsxMDE5OCw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC05NzAzLDcgKzEwMjE1LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTcxOCw3ICsxMDIzMCw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC05NzM2LDcgKzEwMjQ3LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX1BUT04gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTc1MSw3ICsxMDI2Miw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2lmZGVmIEhBVkVfR1JQX0gKICNpbmNsdWRlIDxncnAuaD4KQEAgLTk3NjksNyArMTAyNzksNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NFVEdST1VQUyAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05NzgzLDcgKzEwMjkzLDcgQEAKIGZvciBhY19mdW5jIGluIG9wZW5wdHkKIGRvIDoKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAib3BlbnB0eSIgImFjX2N2X2Z1bmNfb3BlbnB0eSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19vcGVucHR5IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfb3BlbnB0eSIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX09QRU5QVFkgMQogX0FDRU9GCkBAIC05NzkxLDcgKzEwMzAxLDcgQEAKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb3BlbnB0eSBpbiAtbHV0aWwiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9wZW5wdHkgaW4gLWx1dGlsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl91dGlsX29wZW5wdHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfdXRpbF9vcGVucHR5Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTgyNSwxMyArMTAzMzUsMTMgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl91dGlsX29wZW5wdHkiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfdXRpbF9vcGVucHR5IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3V0aWxfb3BlbnB0eSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfdXRpbF9vcGVucHR5IiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX09QRU5QVFkgMSIgPj5jb25mZGVmcy5oCiAgTElCUz0iJExJQlMgLWx1dGlsIgogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvcGVucHR5IGluIC1sYnNkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBvcGVucHR5IGluIC1sYnNkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9ic2Rfb3BlbnB0eStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9ic2Rfb3BlbnB0eSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTk4NjUsNyArMTAzNzUsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2JzZF9vcGVucHR5IiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2JzZF9vcGVucHR5IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2JzZF9vcGVucHR5IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ic2Rfb3BlbnB0eSIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PUEVOUFRZIDEiID4+Y29uZmRlZnMuaAogIExJQlM9IiRMSUJTIC1sYnNkIgogZmkKQEAgLTk4ODAsNyArMTAzOTAsNyBAQAogZm9yIGFjX2Z1bmMgaW4gZm9ya3B0eQogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJmb3JrcHR5IiAiYWNfY3ZfZnVuY19mb3JrcHR5IgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmtwdHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrcHR5IiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfRk9SS1BUWSAxCiBfQUNFT0YKQEAgLTk4ODgsNyArMTAzOTgsNyBAQAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmb3JrcHR5IGluIC1sdXRpbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZm9ya3B0eSBpbiAtbHV0aWwuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3V0aWxfZm9ya3B0eStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl91dGlsX2ZvcmtwdHkrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC05OTIyLDEzICsxMDQzMiwxMyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3V0aWxfZm9ya3B0eSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl91dGlsX2ZvcmtwdHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfdXRpbF9mb3JrcHR5IiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dGlsX2ZvcmtwdHkiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRk9SS1BUWSAxIiA+PmNvbmZkZWZzLmgKICBMSUJTPSIkTElCUyAtbHV0aWwiCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZvcmtwdHkgaW4gLWxic2QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZvcmtwdHkgaW4gLWxic2QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2JzZF9mb3JrcHR5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX2JzZF9mb3JrcHR5Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtOTk2Miw3ICsxMDQ3Miw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYnNkX2ZvcmtwdHkiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfYnNkX2ZvcmtwdHkiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfYnNkX2ZvcmtwdHkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2JzZF9mb3JrcHR5IiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZPUktQVFkgMSIgPj5jb25mZGVmcy5oCiAgTElCUz0iJExJQlMgLWxic2QiCiBmaQpAQCAtOTk3OSw3ICsxMDQ4OSw3IEBACiBmb3IgYWNfZnVuYyBpbiBtZW1tb3ZlCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1lbW1vdmUiICJhY19jdl9mdW5jX21lbW1vdmUiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbWVtbW92ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21lbW1vdmUiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKIF9BQ0VPRgpAQCAtOTk5Myw4ICsxMDUwMyw3IEBACiBkbyA6CiAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCi0gICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKQEAgLTEwMDAzLDMxICsxMDUxMiw1MCBAQAogZG9uZQogCiAKLWZvciBhY19mdW5jIGluIGR1cDIgZ2V0Y3dkIHN0cmR1cAotZG8gOgotICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKLWV2YWwgYXNfdmFsPVwkJGFzX2FjX3ZhcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkdXAyIiAiYWNfY3ZfZnVuY19kdXAyIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2R1cDIiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRFVQMiAxIiA+PmNvbmZkZWZzLmgKIAogZWxzZQogICBjYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCIKKyAgKiIgZHVwMi4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgZHVwMi4kYWNfb2JqZXh0IgogIDs7CiBlc2FjCiAKIGZpCi1kb25lCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGN3ZCIgImFjX2N2X2Z1bmNfZ2V0Y3dkIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGN3ZCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRDV0QgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgZ2V0Y3dkLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRjd2QuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJkdXAiICJhY19jdl9mdW5jX3N0cmR1cCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJkdXAiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSRFVQIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cmR1cC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RyZHVwLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKIAogCiBmb3IgYWNfZnVuYyBpbiBnZXRwZ3JwCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHBncnAiICJhY19jdl9mdW5jX2dldHBncnAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGdycCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHBncnAiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9HRVRQR1JQIDEKIF9BQ0VPRgpAQCAtMTAwNDYsNyArMTA1NzQsNiBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBHRVRQR1JQX0hBVkVfQVJHIDEiID4+Y29uZmRlZnMuaAogCi0KIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTAwNTYsNyArMTA1ODMsNyBAQAogZm9yIGFjX2Z1bmMgaW4gc2V0cGdycAogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzZXRwZ3JwIiAiYWNfY3ZfZnVuY19zZXRwZ3JwIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3NldHBncnAiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zZXRwZ3JwIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU0VUUEdSUCAxCiBfQUNFT0YKQEAgLTEwMDc1LDcgKzEwNjAyLDYgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgU0VUUEdSUF9IQVZFX0FSRyAxIiA+PmNvbmZkZWZzLmgKIAotCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKQEAgLTEwMDg1LDcgKzEwNjExLDcgQEAKIGZvciBhY19mdW5jIGluIGdldHRpbWVvZmRheQogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXR0aW1lb2ZkYXkiICJhY19jdl9mdW5jX2dldHRpbWVvZmRheSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXR0aW1lb2ZkYXkiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQogX0FDRU9GCkBAIC0xMDE2OSwyMyArMTA2OTUsMjkgQEAKIGludAogbWFpbiAoKQogewotCiBnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGdldGFkZHJpbmZvIGJ1ZyIgPiY1CisgIGhhdmVfZ2V0YWRkcmluZm89eWVzCitlbHNlCisgIGhhdmVfZ2V0YWRkcmluZm89bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX2dldGFkZHJpbmZvIiA+JjUKKyRhc19lY2hvICIkaGF2ZV9nZXRhZGRyaW5mbyIgPiY2OyB9CitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0geWVzCit0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZ2V0YWRkcmluZm8gYnVnIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGdldGFkZHJpbmZvIGJ1Zy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYnVnZ3kiID4mNQotJGFzX2VjaG8gImJ1Z2d5IiA+JjY7IH0KLWJ1Z2d5Z2V0YWRkcmluZm89eWVzCisgIGlmICR7YWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPXllcwogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCkBAIC0xMDE5Niw3ICsxMDcyOCw3IEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KIAotbWFpbigpCitpbnQgbWFpbigpCiB7CiAgIGludCBwYXNzaXZlLCBnYWllcnIsIGluZXQ0ID0gMCwgaW5ldDYgPSAwOwogICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaSwgKmFpdG9wOwpAQCAtMTAyNjgsNDAgKzEwODAwLDM1IEBACiAKICAgaWYgKGFpdG9wKQogICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMCk7CisgIHJldHVybiAwOwogCiAgYmFkOgogICBpZiAoYWl0b3ApCiAgICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgxKTsKKyAgcmV0dXJuIDE7CiB9CiAKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBnb29kIiA+JjUKLSRhc19lY2hvICJnb29kIiA+JjY7IH0KLWJ1Z2d5Z2V0YWRkcmluZm89bm8KKyAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89bm8KIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGJ1Z2d5IiA+JjUKLSRhc19lY2hvICJidWdneSIgPiY2OyB9Ci1idWdneWdldGFkZHJpbmZvPXllcworICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz15ZXMKIGZpCiBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCiAgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi1lbHNlCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotYnVnZ3lnZXRhZGRyaW5mbz15ZXMKK2ZpCiAKIGZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCi1pZiB0ZXN0ICIkYnVnZ3lnZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbgotCWlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm8iID4mNjsgfQorCitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0gbm8gLW8gIiRhY19jdl9idWdneV9nZXRhZGRyaW5mbyIgPSB5ZXMKK3RoZW4KKwlpZiB0ZXN0ICRpcHY2ID0geWVzCisJdGhlbgogCQllY2hvICdGYXRhbDogWW91IG11c3QgZ2V0IHdvcmtpbmcgZ2V0YWRkcmluZm8oKSBmdW5jdGlvbi4nCiAJCWVjaG8gJyAgICAgICBvciB5b3UgY2FuIHNwZWNpZnkgIi0tZGlzYWJsZS1pcHY2IicuCiAJCWV4aXQgMQpAQCAtMTAzMTEsMTAgKzEwODM4LDExIEBACiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEiID4+Y29uZmRlZnMuaAogCiBmaQorCiBmb3IgYWNfZnVuYyBpbiBnZXRuYW1laW5mbwogZG8gOgogICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRuYW1laW5mbyIgImFjX2N2X2Z1bmNfZ2V0bmFtZWluZm8iCi1pZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0bmFtZWluZm8iID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRuYW1laW5mbyIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKIF9BQ0VPRgpAQCAtMTAzMjYsNyArMTA4NTQsNyBAQAogIyBjaGVja3MgZm9yIHN0cnVjdHVyZXMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oZWFkZXJfdGltZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwMzYxLDcgKzEwODg5LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cnVjdCB0bSBpcyBpbiBzeXMvdGltZS5oIG9yIHRpbWUuaCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cnVjdCB0bSBpcyBpbiBzeXMvdGltZS5oIG9yIHRpbWUuaC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zdHJ1Y3RfdG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zdHJ1Y3RfdG0rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMDM5OCw3ICsxMDkyNiw3IEBACiAjaW5jbHVkZSA8JGFjX2N2X3N0cnVjdF90bT4KIAogIgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lIiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMQpAQCAtMTA0MTQsNyArMTA5NDIsNyBAQAogZWxzZQogICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ0em5hbWUiICJhY19jdl9oYXZlX2RlY2xfdHpuYW1lIiAiI2luY2x1ZGUgPHRpbWUuaD4KICIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3R6bmFtZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdHpuYW1lIiA9IHh5ZXM7IHRoZW4gOgogICBhY19oYXZlX2RlY2w9MQogZWxzZQogICBhY19oYXZlX2RlY2w9MApAQCAtMTA0MjYsNyArMTA5NTQsNyBAQAogCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHR6bmFtZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdHpuYW1lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Zhcl90em5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl92YXJfdHpuYW1lKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTA0NjIsNyArMTA5OTAsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X3JkZXYiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfcmRldiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfcmRldiIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfcmRldiIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYgMQpAQCAtMTA0NzIsNyArMTEwMDAsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2Jsa3NpemUiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxrc2l6ZSIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxrc2l6ZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxrc2l6ZSIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMS1NJWkUgMQpAQCAtMTA0ODIsNyArMTEwMTAsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2ZsYWdzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2ZsYWdzIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9mbGFncyIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfZmxhZ3MiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9GTEFHUyAxCkBAIC0xMDQ5Miw3ICsxMTAyMCw3IEBACiBmaQogCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfZ2VuIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2dlbiIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfZ2VuIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9nZW4iID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9HRU4gMQpAQCAtMTA1MDIsNyArMTEwMzAsNyBAQAogZmkKIAogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2JpcnRodGltZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9iaXJ0aHRpbWUiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2JpcnRodGltZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1lIiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FIDEKQEAgLTEwNTEyLDcgKzExMDQwLDcgQEAKIGZpCiAKIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9ibG9ja3MiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxvY2tzIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibG9ja3MiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2NrcyIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMT0NLUyAxCkBAIC0xMDUzNCw5ICsxMTA2MiwxMCBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aW1lLmggdGhhdCBkZWZpbmVzIGFsdHpvbmUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWUuaCB0aGF0IGRlZmluZXMgYWx0em9uZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGltZV9hbHR6b25lK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCisKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHRpbWUuaD4KQEAgLTEwNTU0LDYgKzExMDgzLDcgQEAKICAgYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZT1ubwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiBmaQogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUiID4mNQpAQCAtMTA1OTYsMTMgKzExMTI2LDEyIEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFkZHJpbmZvIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBhZGRyaW5mby4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zdHJ1Y3RfYWRkcmluZm8rc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zdHJ1Y3RfYWRkcmluZm8rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSMJCWluY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KIGludAogbWFpbiAoKQogewpAQCAtMTA2MjksNyArMTExNTgsNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMDY2NSw3ICsxMTE5NCw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjaGFyIGlzIHVuc2lnbmVkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgY2hhciBpcyB1bnNpZ25lZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9jX2NoYXJfdW5zaWduZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9jX2NoYXJfdW5zaWduZWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMDY5Nyw3ICsxMTIyNiw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9jX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwODQ0LDExICsxMTM3Myw5IEBACiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAotCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1BST1RPVFlQRVMgMSIgPj5jb25mZGVmcy5oCiAKLSAgaGF2ZV9wcm90b3R5cGVzPXllcwotCisgICBoYXZlX3Byb3RvdHlwZXM9eWVzCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfcHJvdG90eXBlcyIgPiY1CkBAIC0xMDkxMSw3ICsxMTQzOCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU09DS0VUUEFJUiAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC0xMDk0NSw2ICsxMTQ3Miw3IEBACiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQorCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKQEAgLTEwOTg2LDcgKzExNTE0LDcgQEAKIAogCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0YnluYW1lX3IiICJhY19jdl9mdW5jX2dldGhvc3RieW5hbWVfciIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3IiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lX3IiID0geHllczsgdGhlbiA6CiAKICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTExMDM0LDQzICsxMTU2Miw2IEBACiAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jICAgICBpbmNsdWRlIDxuZXRkYi5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICAgICAgY2hhciAqbmFtZTsKLSAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7Ci0gICAgICBpbnQgaF9lcnJub3A7Ci0KLSAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0gICAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUiAxIiA+PmNvbmZkZWZzLmgKLQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAxIiA+PmNvbmZkZWZzLmgKLQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotZWxzZQotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGdldGhvc3RieW5hbWVfciB3aXRoIDMgYXJncy4uLiAiID4mNjsgfQotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCiAjICAgICAgIGluY2x1ZGUgPG5ldGRiLmg+CiAKIGludApAQCAtMTEwNzksOSArMTE1NzAsMTEgQEAKIAogICAgICAgICBjaGFyICpuYW1lOwogICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7Ci0gICAgICAgIHN0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKyAgICAgICAgY2hhciBidWZmZXJbMjA0OF07CisgICAgICAgIGludCBidWZsZW4gPSAyMDQ4OworICAgICAgICBpbnQgaF9lcnJub3A7CiAKLSAgICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgJmRhdGEpOworICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCBidWZmZXIsIGJ1ZmxlbiwgJmhfZXJybm9wKQogCiAgIDsKICAgcmV0dXJuIDA7CkBAIC0xMTA5Miw3ICsxMTU4NSw3IEBACiAgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEiID4+Y29uZmRlZnMuaAogCiAKLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHIDEiID4+Y29uZmRlZnMuaAorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcgMSIgPj5jb25mZGVmcy5oCiAKICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KQEAgLTExMTAxLDYgKzExNTk0LDQxIEBACiAKICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGdldGhvc3RieW5hbWVfciB3aXRoIDMgYXJncy4uLiAiID4mNjsgfQorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyMgICAgICAgICAgIGluY2x1ZGUgPG5ldGRiLmg+CisKK2ludAorbWFpbiAoKQoreworCisgICAgICAgICAgICBjaGFyICpuYW1lOworICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhlOworICAgICAgICAgICAgc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworCisgICAgICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCAmZGF0YSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUiAxIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRyAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworZWxzZQorCisgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CkBAIC0xMTExNyw3ICsxMTY0NSw3IEBACiAgIGZvciBhY19mdW5jIGluIGdldGhvc3RieW5hbWUKIGRvIDoKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0aG9zdGJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQogX0FDRU9GCkBAIC0xMTEzOSwxMiArMTE2NjcsMTIgQEAKIAogIyBMaW51eCByZXF1aXJlcyB0aGlzIGZvciBjb3JyZWN0IGYucC4gb3BlcmF0aW9ucwogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiX19mcHVfY29udHJvbCIgImFjX2N2X2Z1bmNfX19mcHVfY29udHJvbCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19fX2ZwdV9jb250cm9sIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfX19mcHVfY29udHJvbCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfX2ZwdV9jb250cm9sIGluIC1saWVlZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgX19mcHVfY29udHJvbCBpbiAtbGllZWUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2llZWVfX19mcHVfY29udHJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9pZWVlX19fZnB1X2NvbnRyb2wrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC0xMTE3OCw3ICsxMTcwNiw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfaWVlZV9fX2ZwdV9jb250cm9sIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2llZWVfX19mcHVfY29udHJvbCIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9pZWVlX19fZnB1X2NvbnRyb2wiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2llZWVfX19mcHVfY29udHJvbCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQklFRUUgMQogX0FDRU9GCkBAIC0xMTIzNSw3ICsxMTc2Myw3IEBACiB0aGVuIExJQk09JHdpdGh2YWwKICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHNldCBMSUJNPVwiJHdpdGh2YWxcIiIgPiY1CiAkYXNfZWNobyAic2V0IExJQk09XCIkd2l0aHZhbFwiIiA+JjY7IH0KLWVsc2UgYXNfZm5fZXJyb3IgInByb3BlciB1c2FnZSBpcyAtLXdpdGgtbGlibT1TVFJJTkciICIkTElORU5PIiA1CitlbHNlIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLWxpYm09U1RSSU5HIiAiJExJTkVOTyIgNQogZmkKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGRlZmF1bHQgTElCTT1cIiRMSUJNXCIiID4mNQpAQCAtMTEyNTksNyArMTE3ODcsNyBAQAogdGhlbiBMSUJDPSR3aXRodmFsCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBzZXQgTElCQz1cIiR3aXRodmFsXCIiID4mNQogJGFzX2VjaG8gInNldCBMSUJDPVwiJHdpdGh2YWxcIiIgPiY2OyB9Ci1lbHNlIGFzX2ZuX2Vycm9yICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLWxpYmM9U1RSSU5HIiAiJExJTkVOTyIgNQorZWxzZSBhc19mbl9lcnJvciAkPyAicHJvcGVyIHVzYWdlIGlzIC0td2l0aC1saWJjPVNUUklORyIgIiRMSU5FTk8iIDUKIGZpCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkZWZhdWx0IExJQkM9XCIkTElCQ1wiIiA+JjUKQEAgLTExMjY3LDEyICsxMTc5NSwxODEgQEAKIGZpCiAKIAotIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgKiBDaGVjayBmb3IgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyAqCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENoZWNrIGZvciB2YXJpb3VzIHByb3BlcnRpZXMgb2YgZmxvYXRpbmcgcG9pbnQgKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1MSUJTX1NBVkU9JExJQlMKLUxJQlM9IiRMSUJTICRMSUJNIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIEMgZG91YmxlcyBhcmUgbGl0dGxlLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIEMgZG91YmxlcyBhcmUgbGl0dGxlLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9bm8KK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CitpbnQgbWFpbigpIHsKKyAgICBkb3VibGUgeCA9IDkwMDYxMDQwNzE4MzI1ODEuMDsKKyAgICBpZiAobWVtY21wKCZ4LCAiXHgwNVx4MDRceDAzXHgwMlx4MDFceGZmXHgzZlx4NDMiLCA4KSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGUiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlIiA9IHllcwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0IDEiID4+Y29uZmRlZnMuaAorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgQyBkb3VibGVzIGFyZSBiaWctZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgQyBkb3VibGVzIGFyZSBiaWctZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2JpZ19lbmRpYW5fZG91YmxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9iaWdfZW5kaWFuX2RvdWJsZT1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKCkgeworICAgIGRvdWJsZSB4ID0gOTAwNjEwNDA3MTgzMjU4MS4wOworICAgIGlmIChtZW1jbXAoJngsICJceDQzXHgzZlx4ZmZceDAxXHgwMlx4MDNceDA0XHgwNSIsIDgpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlPXllcworZWxzZQorICBhY19jdl9iaWdfZW5kaWFuX2RvdWJsZT1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGUiID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIERPVUJMRV9JU19CSUdfRU5ESUFOX0lFRUU3NTQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgU29tZSBBUk0gcGxhdGZvcm1zIHVzZSBhIG1peGVkLWVuZGlhbiByZXByZXNlbnRhdGlvbiBmb3IgZG91Ymxlcy4KKyMgV2hpbGUgUHl0aG9uIGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgZnVsbCBzdXBwb3J0IGZvciB0aGVzZSBwbGF0Zm9ybXMKKyMgKHNlZSBlLmcuLCBpc3N1ZSAxNzYyNTYxKSwgd2UgY2FuIGF0IGxlYXN0IG1ha2Ugc3VyZSB0aGF0IGZsb2F0IDwtPiBzdHJpbmcKKyMgY29udmVyc2lvbnMgd29yay4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBDIGRvdWJsZXMgYXJlIEFSTSBtaXhlZC1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDIGRvdWJsZXMgYXJlIEFSTSBtaXhlZC1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT1ubworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKCkgeworICAgIGRvdWJsZSB4ID0gOTAwNjEwNDA3MTgzMjU4MS4wOworICAgIGlmIChtZW1jbXAoJngsICJceDAxXHhmZlx4M2ZceDQzXHgwNVx4MDRceDAzXHgwMiIsIDgpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9eWVzCitlbHNlCisgIGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlIiA9IHllcwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBET1VCTEVfSVNfQVJNX01JWEVEX0VORElBTl9JRUVFNzU0IDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIFRoZSBzaG9ydCBmbG9hdCByZXByIGludHJvZHVjZWQgaW4gUHl0aG9uIDMuMSByZXF1aXJlcyB0aGUKKyMgY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nIDwtPiBkb3VibGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZnJvbQorIyBQeXRob24vZHRvYS5jLCB3aGljaCBpbiB0dXJuIHJlcXVpcmUgdGhhdCB0aGUgRlBVIHVzZXMgNTMtYml0CisjIHJvdW5kaW5nOyB0aGlzIGlzIGEgcHJvYmxlbSBvbiB4ODYsIHdoZXJlIHRoZSB4ODcgRlBVIGhhcyBhIGRlZmF1bHQKKyMgcm91bmRpbmcgcHJlY2lzaW9uIG9mIDY0IGJpdHMuICBGb3IgZ2NjL3g4Niwgd2UgY2FuIGZpeCB0aGlzIGJ5CisjIHVzaW5nIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgdGhlIHg4NyBGUFUgY29udHJvbCB3b3JkLgorCisjIFRoaXMgaW5saW5lIGFzc2VtYmxlciBzeW50YXggbWF5IGFsc28gd29yayBmb3Igc3VuY2MgYW5kIGljYywKKyMgc28gd2UgdHJ5IGl0IG9uIGFsbCBwbGF0Zm9ybXMuCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgdW5zaWduZWQgc2hvcnQgY3c7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGN3KSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGN3KSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBoYXZlX2djY19hc21fZm9yX3g4Nz15ZXMKK2Vsc2UKKyAgaGF2ZV9nY2NfYXNtX2Zvcl94ODc9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID4mNQorJGFzX2VjaG8gIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPiY2OyB9CitpZiB0ZXN0ICIkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfWDg3IDEiID4+Y29uZmRlZnMuaAorCitmaQogCiAjIERldGVjdCB3aGV0aGVyIHN5c3RlbSBhcml0aG1ldGljIGlzIHN1YmplY3QgdG8geDg3LXN0eWxlIGRvdWJsZQogIyByb3VuZGluZyBpc3N1ZXMuICBUaGUgcmVzdWx0IG9mIHRoaXMgdGVzdCBoYXMgbGl0dGxlIG1lYW5pbmcgb24gbm9uCkBAIC0xMTI4MSwxMCArMTE5NzgsOSBAQAogIyAwIG90aGVyd2lzZS4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjkzNyBmb3IgbW9yZSBpbmZvLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgeDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgeDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl94ODdfZG91YmxlX3JvdW5kaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLQorIyAkQkFTRUNGTEFHUyBtYXkgYWZmZWN0IHRoZSByZXN1bHQKK2FjX3NhdmVfY2M9IiRDQyIKK0NDPSIkQ0MgJEJBU0VDRkxBR1MiCiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGFjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9bm8KIGVsc2UKQEAgLTExMzIwLDggKzEyMDE2LDcgQEAKICAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLWZpCi0KK0NDPSIkYWNfc2F2ZV9jYyIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZyIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X3g4N19kb3VibGVfcm91bmRpbmciID4mNjsgfQogaWYgdGVzdCAiJGFjX2N2X3g4N19kb3VibGVfcm91bmRpbmciID0geWVzCkBAIC0xMTMzMSwxMiArMTIwMjYsMTggQEAKIAogZmkKIAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDaGVjayBmb3IgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyAqCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitMSUJTX1NBVkU9JExJQlMKK0xJQlM9IiRMSUJTICRMSUJNIgogCiAjIE9uIEZyZWVCU0QgNi4yLCBpdCBhcHBlYXJzIHRoYXQgdGFuaCgtMC4pIHJldHVybnMgMC4gaW5zdGVhZCBvZgogIyAtMC4gb24gc29tZSBhcmNoaXRlY3R1cmVzLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRhbmggcHJlc2VydmVzIHRoZSBzaWduIG9mIHplcm8iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0YW5oIHByZXNlcnZlcyB0aGUgc2lnbiBvZiB6ZXJvLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbis6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKQEAgLTExMzc4LDEyICsxMjA3OSwyMyBAQAogCiBmaQogCi1mb3IgYWNfZnVuYyBpbiBhY29zaCBhc2luaCBhdGFuaCBjb3B5c2lnbiBleHBtMSBmaW5pdGUgaHlwb3QgbG9nMXAKK2ZvciBhY19mdW5jIGluIGFjb3NoIGFzaW5oIGF0YW5oIGNvcHlzaWduIGVyZiBlcmZjIGV4cG0xIGZpbml0ZSBnYW1tYQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKLWV2YWwgYXNfdmFsPVwkJGFzX2FjX3ZhcgotICAgaWYgdGVzdCAieCRhc192YWwiID0geCIieWVzOyB0aGVuIDoKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK2ZvciBhY19mdW5jIGluIGh5cG90IGxnYW1tYSBsb2cxcCByb3VuZCB0Z2FtbWEKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgpAQCAtMTEzOTMsNyArMTIxMDUsNyBAQAogCiBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJpc2luZiIgImFjX2N2X2hhdmVfZGVjbF9pc2luZiIgIiNpbmNsdWRlIDxtYXRoLmg+CiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc2luZiIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNpbmYiID0geHllczsgdGhlbiA6CiAgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCiAgIGFjX2hhdmVfZGVjbD0wCkBAIC0xMTQwNCw3ICsxMjExNiw3IEBACiBfQUNFT0YKIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImlzbmFuIiAiYWNfY3ZfaGF2ZV9kZWNsX2lzbmFuIiAiI2luY2x1ZGUgPG1hdGguaD4KICIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzbmFuIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc25hbiIgPSB4eWVzOyB0aGVuIDoKICAgYWNfaGF2ZV9kZWNsPTEKIGVsc2UKICAgYWNfaGF2ZV9kZWNsPTAKQEAgLTExNDE1LDcgKzEyMTI3LDcgQEAKIF9BQ0VPRgogYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXNmaW5pdGUiICJhY19jdl9oYXZlX2RlY2xfaXNmaW5pdGUiICIjaW5jbHVkZSA8bWF0aC5oPgogIgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNmaW5pdGUiID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzZmluaXRlIiA9IHh5ZXM7IHRoZW4gOgogICBhY19oYXZlX2RlY2w9MQogZWxzZQogICBhY19oYXZlX2RlY2w9MApAQCAtMTE0MjgsOSArMTIxNDAsMTQ4IEBACiAKIExJQlM9JExJQlNfU0FWRQogCisjIEZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLCBjaGVjayB0aGF0IHNlbV9vcGVuCisjIGFjdHVhbGx5IHdvcmtzLiAgRm9yIEZyZWVCU0QgdmVyc2lvbnMgPD0gNy4yLAorIyB0aGUga2VybmVsIG1vZHVsZSB0aGF0IHByb3ZpZGVzIFBPU0lYIHNlbWFwaG9yZXMKKyMgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQsIHNvIGFuIGF0dGVtcHQgdG8gY2FsbAorIyBzZW1fb3BlbiByZXN1bHRzIGluIGEgJ1NpZ25hbCAxMicgZXJyb3IuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgUE9TSVggc2VtYXBob3JlcyBhcmUgZW5hYmxlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFBPU0lYIHNlbWFwaG9yZXMgYXJlIGVuYWJsZWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQgbWFpbih2b2lkKSB7CisgIHNlbV90ICphID0gc2VtX29wZW4oIi9hdXRvY29uZiIsIE9fQ1JFQVQsIFNfSVJVU1J8U19JV1VTUiwgMCk7CisgIGlmIChhID09IFNFTV9GQUlMRUQpIHsKKyAgICBwZXJyb3IoInNlbV9vcGVuIik7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgc2VtX2Nsb3NlKGEpOworICBzZW1fdW5saW5rKCIvYXV0b2NvbmYiKTsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZD15ZXMKK2Vsc2UKKyAgYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQgPSBubwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVEIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIE11bHRpcHJvY2Vzc2luZyBjaGVjayBmb3IgYnJva2VuIHNlbV9nZXR2YWx1ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIHNlbV9nZXR2YWx1ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIHNlbV9nZXR2YWx1ZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9icm9rZW5fc2VtX2dldHZhbHVlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50IG1haW4odm9pZCl7CisgIHNlbV90ICphID0gc2VtX29wZW4oIi9hdXRvY2Z0dyIsIE9fQ1JFQVQsIFNfSVJVU1J8U19JV1VTUiwgMCk7CisgIGludCBjb3VudDsKKyAgaW50IHJlczsKKyAgaWYoYT09U0VNX0ZBSUxFRCl7CisgICAgcGVycm9yKCJzZW1fb3BlbiIpOworICAgIHJldHVybiAxOworCisgIH0KKyAgcmVzID0gc2VtX2dldHZhbHVlKGEsICZjb3VudCk7CisgIHNlbV9jbG9zZShhKTsKKyAgc2VtX3VubGluaygiL2F1dG9jZnR3Iik7CisgIHJldHVybiByZXM9PS0xID8gMSA6IDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWU9bm8KK2Vsc2UKKyAgYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWUiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSA9IHllcwordGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgZGV0ZXJtaW5lIHdoYXQgc2l6ZSBkaWdpdCB0byB1c2UgZm9yIFB5dGhvbidzIGxvbmdzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRpZ2l0IHNpemUgZm9yIFB5dGhvbidzIGxvbmdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRpZ2l0IHNpemUgZm9yIFB5dGhvbidzIGxvbmdzLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYmlnLWRpZ2l0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9iaWdfZGlnaXRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYmlnX2RpZ2l0czsgY2FzZSAkZW5hYmxlX2JpZ19kaWdpdHMgaW4KK3llcykKKyAgZW5hYmxlX2JpZ19kaWdpdHM9MzAgOzsKK25vKQorICBlbmFibGVfYmlnX2RpZ2l0cz0xNSA7OworMTV8MzApCisgIDs7CisqKQorICBhc19mbl9lcnJvciAkPyAiYmFkIHZhbHVlICRlbmFibGVfYmlnX2RpZ2l0cyBmb3IgLS1lbmFibGUtYmlnLWRpZ2l0czsgdmFsdWUgc2hvdWxkIGJlIDE1IG9yIDMwIiAiJExJTkVOTyIgNSA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfYmlnX2RpZ2l0cyIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9iaWdfZGlnaXRzIiA+JjY7IH0KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQWUxPTkdfQklUU19JTl9ESUdJVCAkZW5hYmxlX2JpZ19kaWdpdHMKK19BQ0VPRgorCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIHZhbHVlIHNwZWNpZmllZCIgPiY1CiskYXNfZWNobyAibm8gdmFsdWUgc3BlY2lmaWVkIiA+JjY7IH0KK2ZpCisKKwogIyBjaGVjayBmb3Igd2NoYXIuaAogYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIndjaGFyLmgiICJhY19jdl9oZWFkZXJfd2NoYXJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfd2NoYXJfaCIgPSB4eWVzOyB0aGVuIDoKIAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1dDSEFSX0ggMSIgPj5jb25mZGVmcy5oCkBAIC0xMTQ1Myw3ICsxMjMwNCw3IEBACiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHdjaGFyX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiB3Y2hhcl90Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl93Y2hhcl90K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3Zfc2l6ZW9mX3djaGFyX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mICh3Y2hhcl90KSkiICJhY19jdl9zaXplb2Zfd2NoYXJfdCIgICAgICAgICIjaW5jbHVkZSA8d2NoYXIuaD4KQEAgLTExNDYzLDkgKzEyMzE0LDggQEAKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfd2NoYXJfdCIgPSB5ZXM7IHRoZW4KICAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci17IGFzX2ZuX3NldF9zdGF0dXMgNzcKLWFzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHdjaGFyX3QpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH07IH0KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHdjaGFyX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQogICAgZWxzZQogICAgICBhY19jdl9zaXplb2Zfd2NoYXJfdD0wCiAgICBmaQpAQCAtMTE1MjAsNyArMTIzNzAsNyBAQAogICAjIGNoZWNrIHdoZXRoZXIgd2NoYXJfdCBpcyBzaWduZWQgb3Igbm90CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3Y2hhcl90IGlzIHNpZ25lZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdjaGFyX3QgaXMgc2lnbmVkLi4uICIgPiY2OyB9Ci0gIGlmIHRlc3QgIiR7YWNfY3Zfd2NoYXJfdF9zaWduZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBpZiAke2FjX2N2X3djaGFyX3Rfc2lnbmVkKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIApAQCAtMTE1ODQsNyArMTI0MzQsNyBAQAogICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfVU5JQ09ERV9TSVpFIDQiID4+Y29uZmRlZnMuaAogCiAgICAgICA7OwotKikgYXNfZm5fZXJyb3IgImludmFsaWQgdmFsdWUgZm9yIC0tZW5hYmxlLXVuaWNvZGUuIFVzZSBlaXRoZXIgdWNzMiBvciB1Y3M0IChsb3dlcmNhc2UpLiIgIiRMSU5FTk8iIDUgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIGZvciAtLWVuYWJsZS11bmljb2RlLiBVc2UgZWl0aGVyIHVjczIgb3IgdWNzNCAobG93ZXJjYXNlKS4iICIkTElORU5PIiA1IDs7CiBlc2FjCiAKIApAQCAtMTE2MzEsNyArMTI0ODEsNyBAQAogIyBjaGVjayBmb3IgZW5kaWFubmVzcwogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfYmlnZW5kaWFuK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfY19iaWdlbmRpYW4rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCkBAIC0xMTg0OSw3ICsxMjY5OSw3IEBACiAKICAgICAgOzsgIygKICAgICopCi0gICAgIGFzX2ZuX2Vycm9yICJ1bmtub3duIGVuZGlhbm5lc3MKKyAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gZW5kaWFubmVzcwogIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiAiJExJTkVOTyIgNSA7OwogIGVzYWMKIApAQCAtMTE4NTgsNyArMTI3MDgsNyBAQAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ24rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCkBAIC0xMTg5Nyw3ICsxMjc0Nyw3IEBACiAjIGNoZWNrIGZvciBnZXRjX3VubG9ja2VkIGFuZCByZWxhdGVkIGxvY2tpbmcgZnVuY3Rpb25zCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBnZXRjX3VubG9ja2VkKCkgYW5kIGZyaWVuZHMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdldGNfdW5sb2NrZWQoKSBhbmQgZnJpZW5kcy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oYXZlX2dldGNfdW5sb2NrZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9oYXZlX2dldGNfdW5sb2NrZWQrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCkBAIC0xMTk5NSw3ICsxMjg0NSw3IEBACiAjIGNoZWNrIGZvciByZWFkbGluZSAyLjEKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCBpbiAtbHJlYWRsaW5lIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBybF9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwgaW4gLWxyZWFkbGluZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKQEAgLTEyMDI5LDcgKzEyODc5LDcgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmxfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsIiA9IHh5ZXM7IHRoZW4gOgogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1JMX0NBTExCQUNLIDEiID4+Y29uZmRlZnMuaAogCkBAIC0xMjA0NSw4ICsxMjg5NSw5IEBACiAgIGhhdmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGhhdmVfcmVhZGxpbmU9bm8KKwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0ICRoYXZlX3JlYWRsaW5lID0geWVzCiB0aGVuCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEyMDgwLDcgKzEyOTMxLDcgQEAKICMgY2hlY2sgZm9yIHJlYWRsaW5lIDQuMAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmxfcHJlX2lucHV0X2hvb2sgaW4gLWxyZWFkbGluZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcmxfcHJlX2lucHV0X2hvb2sgaW4gLWxyZWFkbGluZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2src2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2srOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCkBAIC0xMjExNCw3ICsxMjk2NSw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2siID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2siID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmxfcHJlX2lucHV0X2hvb2siID0geCIieWVzOyB0aGVuIDoKK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX3ByZV9pbnB1dF9ob29rIiA9IHh5ZXM7IHRoZW4gOgogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1JMX1BSRV9JTlBVVF9IT09LIDEiID4+Y29uZmRlZnMuaAogCkBAIC0xMjEyNCw3ICsxMjk3NSw3IEBACiAjIGFsc28gaW4gNC4wCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIGluIC1scmVhZGxpbmUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgaW4gLWxyZWFkbGluZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtMTIxNTgsNyArMTMwMDksNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2siID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiA9IHh5ZXM7IHRoZW4gOgogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1JMX0NPTVBMRVRJT05fRElTUExBWV9NQVRDSEVTX0hPT0sgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTEyMTY4LDcgKzEzMDE5LDcgQEAKICMgY2hlY2sgZm9yIHJlYWRsaW5lIDQuMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmxfY29tcGxldGlvbl9tYXRjaGVzIGluIC1scmVhZGxpbmUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJsX2NvbXBsZXRpb25fbWF0Y2hlcyBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX21hdGNoZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9tYXRjaGVzKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwpAQCAtMTIyMDIsNyArMTMwNTMsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX2NvbXBsZXRpb25fbWF0Y2hlcyIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX21hdGNoZXMiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmxfY29tcGxldGlvbl9tYXRjaGVzIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9ybF9jb21wbGV0aW9uX21hdGNoZXMiID0geHllczsgdGhlbiA6CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUkxfQ09NUExFVElPTl9NQVRDSEVTIDEiID4+Y29uZmRlZnMuaAogCkBAIC0xMjIxOCw4ICsxMzA2OSw5IEBACiAgIGhhdmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGhhdmVfcmVhZGxpbmU9bm8KKwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0ICRoYXZlX3JlYWRsaW5lID0geWVzCiB0aGVuCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEyMjQyLDcgKzEzMDk0LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIG5pY2UoKSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIG5pY2UoKS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9icm9rZW5fbmljZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X2Jyb2tlbl9uaWNlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIApAQCAtMTIyODMsNyArMTMxMzUsMTAgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIHBvbGwoKSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIHBvbGwoKS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgoraWYgJHthY19jdl9icm9rZW5fcG9sbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfYnJva2VuX3BvbGw9bm8KIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTIyOTEsMjcgKzEzMTQ2LDIxIEBACiAKICNpbmNsdWRlIDxwb2xsLmg+CiAKLWludCBtYWluICh2b2lkKQotICAgIHsKK2ludCBtYWluKCkKK3sKICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxfc3RydWN0ID0geyA0MiwgUE9MTElOfFBPTExQUkl8UE9MTE9VVCwgMCB9OworICAgIGludCBwb2xsX3Rlc3Q7CiAKICAgICBjbG9zZSAoNDIpOwogCi0gICAgaW50IHBvbGxfdGVzdCA9IHBvbGwgKCZwb2xsX3N0cnVjdCwgMSwgMCk7Ci0KKyAgICBwb2xsX3Rlc3QgPSBwb2xsKCZwb2xsX3N0cnVjdCwgMSwgMCk7CiAgICAgaWYgKHBvbGxfdGVzdCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlIGlmIChwb2xsX3Rlc3QgPT0gMCAmJiBwb2xsX3N0cnVjdC5yZXZlbnRzICE9IFBPTExOVkFMKQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIHJldHVybiAxOworfQogCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgpAQCAtMTIzMjMsNiArMTMxNzIsOCBAQAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAorZmkKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9icm9rZW5fcG9sbCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2Jyb2tlbl9wb2xsIiA+JjY7IH0KIGlmIHRlc3QgIiRhY19jdl9icm9rZW5fcG9sbCIgPSB5ZXMKQEAgLTEyMzM5LDcgKzEzMTkwLDcgQEAKICNpbmNsdWRlIDwkYWNfY3Zfc3RydWN0X3RtPgogCiAiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdG1fdG1fem9uZSIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fWk9ORSAxCkBAIC0xMjM1NSw3ICsxMzIwNiw3IEBACiBlbHNlCiAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInR6bmFtZSIgImFjX2N2X2hhdmVfZGVjbF90em5hbWUiICIjaW5jbHVkZSA8dGltZS5oPgogIgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdHpuYW1lIiA9IHgiInllczsgdGhlbiA6CitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF90em5hbWUiID0geHllczsgdGhlbiA6CiAgIGFjX2hhdmVfZGVjbD0xCiBlbHNlCiAgIGFjX2hhdmVfZGVjbD0wCkBAIC0xMjM2Nyw3ICsxMzIxOCw3IEBACiAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHpuYW1lIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0em5hbWUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdmFyX3R6bmFtZStzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X3Zhcl90em5hbWUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjQwNiw3ICsxMzI1Nyw3IEBACiAjIGNoZWNrIHR6c2V0KDMpIGV4aXN0cyBhbmQgd29ya3MgbGlrZSB3ZSBleHBlY3QgaXQgdG8KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgdHpzZXQoKSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyB0enNldCgpLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3dvcmtpbmdfdHpzZXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl93b3JraW5nX3R6c2V0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIApAQCAtMTI1MDMsNyArMTMzNTQsNyBAQAogIyBMb29rIGZvciBzdWJzZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHZfbnNlYyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdHZfbnNlYyBpbiBzdHJ1Y3Qgc3RhdC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zdGF0X3R2X25zZWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zdGF0X3R2X25zZWMrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjU0MCw3ICsxMzM5MSw3IEBACiAjIExvb2sgZm9yIEJTRCBzdHlsZSBzdWJzZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHZfbnNlYzIgaW4gc3RydWN0IHN0YXQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR2X25zZWMyIGluIHN0cnVjdCBzdGF0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N0YXRfdHZfbnNlYzIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl9zdGF0X3R2X25zZWMyKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTI1NzcsNyArMTM0MjgsNyBAQAogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbitzZXR9IiA9IHNldDsgdGhlbiA6CitpZiAke2FjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24rOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CkBAIC0xMjYxNCw3ICsxMzQ2NSw3IEBACiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBXSU5ET1cgaGFzIF9mbGFncyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFdJTkRPVyBoYXMgX2ZsYWdzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3dpbmRvd19oYXNfZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgJHthY19jdl93aW5kb3dfaGFzX2ZsYWdzKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTI2NjcsNyArMTM1MTgsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtMTI2OTMsNyArMTM1NDQsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NVUlNFU19SRVNJWkVfVEVSTSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC0xMjcxOSw3ICsxMzU3MCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtMTI3NTgsMTYgKzEzNjA5LDkxIEBACiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KK2lmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMKK3RoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJWxsZCBhbmQgJWxsdSBwcmludGYoKSBmb3JtYXQgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJWxsZCBhbmQgJWxsdSBwcmludGYoKSBmb3JtYXQgc3VwcG9ydC4uLiAiID4mNjsgfQorICBpZiAke2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PW5vCiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjZW5kaWYKKworICBpbnQgbWFpbigpCisgIHsKKyAgICAgIGNoYXIgYnVmZmVyWzI1Nl07CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbGQiLCAobG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJWxsZCIsIChsb25nIGxvbmcpLTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICItMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgcmV0dXJuIDA7CisgIH0KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcworZWxzZQorICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQiID4mNjsgfQorZmkKKworaWYgdGVzdCAiJGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCIgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyBcImxsXCIiID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCit0aGVuCisJTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQ9ImNyb3NzIC0tIGFzc3VtaW5nIHllcyIKKworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTI4MDIsMjEgKzEzNzI4LDI1IEBACiAKICAgICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotJGFzX2VjaG8gIiNkZWZpbmUgUFlfRk9STUFUX1NJWkVfVCBcInpcIiIgPj5jb25mZGVmcy5oCi0KKyAgYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PXllcwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PW5vCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0IiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQiICE9IG5vIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBQWV9GT1JNQVRfU0laRV9UIFwielwiIiA+PmNvbmZkZWZzLmgKKworZmkKIAogYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic29ja2xlbl90IiAiYWNfY3ZfdHlwZV9zb2NrbGVuX3QiICIKICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICkBAIC0xMjgyNyw3ICsxMzc1Nyw3IEBACiAjZW5kaWYKIAogIgotaWYgdGVzdCAieCRhY19jdl90eXBlX3NvY2tsZW5fdCIgPSB4IiJ5ZXM7IHRoZW4gOgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NvY2tsZW5fdCIgPSB4eWVzOyB0aGVuIDoKIAogZWxzZQogCkBAIC0xMjgzNiw2ICsxMzc2NiwxNCBAQAogZmkKIAogCitjYXNlICRhY19zeXNfc3lzdGVtIGluCitBSVgqKQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JST0tFTl9QSVBFX0JVRiAxIiA+PmNvbmZkZWZzLmgKKyA7OworZXNhYworCisKIAogCiBmb3IgaCBpbiBgKGNkICRzcmNkaXI7ZWNobyBQeXRob24vdGhyZWFkXyouaClgCkBAIC0xMjg0MywxMyArMTM3ODEsNiBAQAogICBUSFJFQURIRUFERVJTPSIkVEhSRUFESEVBREVSUyBcJChzcmNkaXIpLyRoIgogZG9uZQogCi1pZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCi10aGVuCi0JTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLWZpCi0KLQotCiAKIFNSQ0RJUlM9IlBhcnNlciBHcmFtbWFyIE9iamVjdHMgUHl0aG9uIE1vZHVsZXMgTWFjIgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnVpbGQgZGlyZWN0b3JpZXMiID4mNQpAQCAtMTI4NjMsNyArMTM3OTQsOSBAQAogJGFzX2VjaG8gImRvbmUiID4mNjsgfQogCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwotYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyIKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCisKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNb2R1bGVzL2xkX3NvX2FpeCIKIAogY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCiAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKQEAgLTEyOTI5LDEwICsxMzg2MiwyMSBAQAogICAgICA6ZW5kJyA+PmNvbmZjYWNoZQogaWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQogICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJgorICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQotICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQogICBlbHNlCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KQEAgLTEyOTQ4LDYgKzEzODkyLDcgQEAKIAogYWNfbGlib2Jqcz0KIGFjX2x0bGlib2Jqcz0KK1U9CiBmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKICAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgogICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKQEAgLTEyOTY0LDcgKzEzOTA5LDcgQEAKIAogCiAKLTogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgogYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKQEAgLTEzMDY1LDYgKzE0MDEwLDcgQEAKIElGUz0iICIiCSRhc19ubCIKIAogIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KIGNhc2UgJDAgaW4gIygoCiAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgpAQCAtMTMxMTAsMTkgKzE0MDU2LDE5IEBACiAodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICiAKIAotIyBhc19mbl9lcnJvciBFUlJPUiBbTElORU5PIExPR19GRF0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKICMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQotIyBzY3JpcHQgd2l0aCBzdGF0dXMgJD8sIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCiBhc19mbl9lcnJvciAoKQogewotICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQotICBpZiB0ZXN0ICIkMyI7IHRoZW4KLSAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKICAgZmkKLSAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQxIiA+JjIKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKICAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCiB9ICMgYXNfZm5fZXJyb3IKIApAQCAtMTMzMTgsNyArMTQyNjQsNyBAQAogICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKICAgICBkb25lCiAgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgogCiAKIH0gIyBhc19mbl9ta2Rpcl9wCkBAIC0xMzM3MSw4ICsxNDMxNyw4IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDIuNiwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcHl0aG9uICRhc19tZSAyLjcsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwogICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKQEAgLTEzNDI3LDE3ICsxNDM3MywxNyBAQAogQ29uZmlndXJhdGlvbiBoZWFkZXJzOgogJGNvbmZpZ19oZWFkZXJzCiAKLVJlcG9ydCBidWdzIHRvIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHl0aG9uLWJ1Z3M+LiIKK1JlcG9ydCBidWdzIHRvIDxodHRwOi8vYnVncy5weXRob24ub3JnLz4uIgogCiBfQUNFT0YKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAyLjYKLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSwKK3B5dGhvbiBjb25maWcuc3RhdHVzIDIuNworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIAotQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgogCkBAIC0xMzQ1MywxMSArMTQzOTksMTYgQEAKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KICAgY2FzZSAkMSBpbgotICAtLSo9KikKKyAgLS0qPT8qKQogICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCiAgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAogICAgIGFjX3NoaWZ0PToKICAgICA7OworICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OwogICAqKQogICAgIGFjX29wdGlvbj0kMQogICAgIGFjX29wdGFyZz0kMgpAQCAtMTM0NzksNiArMTQ0MzAsNyBAQAogICAgICRhY19zaGlmdAogICAgIGNhc2UgJGFjX29wdGFyZyBpbgogICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CiAgICAgZXNhYwogICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CkBAIC0xMzQ5MSw3ICsxNDQ0Myw3IEBACiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGUgfCAtLWgpCiAgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKLSAgICBhc19mbl9lcnJvciAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKKyAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CiAgIC0taGVscCB8IC0taGVsIHwgLWggKQogICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7CkBAIC0xMzUwMCw3ICsxNDQ1Miw3IEBACiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSBhc19mbl9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKKyAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJwogVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CiAKICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCkBAIC0xMzU1Nyw4ICsxNDUwOSwxMCBAQAogICAgICJNYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QiIDs7CiAgICAgIk1ha2VmaWxlLnByZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZS5wcmUiIDs7CiAgICAgIk1vZHVsZXMvU2V0dXAuY29uZmlnIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvU2V0dXAuY29uZmlnIiA7OworICAgICJNaXNjL3B5dGhvbi5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi5wYyIgOzsKKyAgICAiTW9kdWxlcy9sZF9zb19haXgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTW9kdWxlcy9sZF9zb19haXgiIDs7CiAKLSAgKikgYXNfZm5fZXJyb3IgImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwogICBlc2FjCiBkb25lCiAKQEAgLTEzNTgwLDkgKzE0NTM0LDEwIEBACiAjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KICRkZWJ1ZyB8fAogewotICB0bXA9CisgIHRtcD0gYWNfdG1wPQogICB0cmFwICdleGl0X3N0YXR1cz0kPwotICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCiAnIDAKICAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKIH0KQEAgLTEzNTkwLDEyICsxNDU0NSwxMyBAQAogCiB7CiAgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgotICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorICB0ZXN0IC1kICIkdG1wIgogfSAgfHwKIHsKICAgdG1wPS4vY29uZiQkLSRSQU5ET00KICAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCi19IHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKK2FjX3RtcD0kdG1wCiAKICMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCkBAIC0xMzYxMiwxMiArMTQ1NjgsMTIgQEAKIGZpCiBhY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCiBpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgotICBhY19jc19hd2tfY3I9J1xyJworICBhY19jc19hd2tfY3I9J1xccicKIGVsc2UKICAgYWNfY3NfYXdrX2NyPSRhY19jcgogZmkKIAotZWNobyAnQkVHSU4geycgPiIkdG1wL3N1YnMxLmF3ayIgJiYKK2VjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5hd2siICYmCiBfQUNFT0YKIAogCkBAIC0xMzYyNiwxOCArMTQ1ODIsMTggQEAKICAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgogICBlY2hvICJfQUNFT0YiCiB9ID5jb25mJCRzdWJzLnNoIHx8Ci0gIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLWFjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnJCdgCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCiBhY19kZWxpbT0nJSFfISMgJwogZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCiAgIC4gLi9jb25mJCRzdWJzLnNoIHx8Ci0gICAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKIAogICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAogICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgogICAgIGJyZWFrCiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKICAgZWxzZQogICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCiAgIGZpCkBAIC0xMzY0NSw3ICsxNDYwMSw3IEBACiBybSAtZiBjb25mJCRzdWJzLnNoCiAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotY2F0ID4+IlwkdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJgogX0FDRU9GCiBzZWQgLW4gJwogaApAQCAtMTM2OTMsNyArMTQ2NDksNyBAQAogcm0gLWYgY29uZiQkc3Vicy5hd2sKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogX0FDQVdLCi1jYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYKICAgZm9yIChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDEKICAgRlMgPSAiByIKIApAQCAtMTM3MjUsMjEgKzE0NjgxLDI5IEBACiAgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCiBlbHNlCiAgIGNhdAotZmkgPCAiJHRtcC9zdWJzMS5hd2siID4gIiR0bXAvc3Vicy5hd2siIFwKLSAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQogX0FDRU9GCiAKLSMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAotIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgc29sZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCiAjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQogIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgogaWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KLSAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97Ci1zLzoqXCQoc3JjZGlyKToqLzovCi1zLzoqXCR7c3JjZGlyfToqLzovCi1zLzoqQHNyY2RpckA6Ki86Lwotcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLwogcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KIHMvXltePV0qPVsJIF0qJC8vCiB9JwogZmkKQEAgLTEzNzUxLDcgKzE0NzE1LDcgQEAKICMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KICMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgogaWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgotY2F0ID4iJHRtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitjYXQgPiIkYWNfdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKIEJFR0lOIHsKIF9BQ0VPRgogCkBAIC0xMzc2MywxMSArMTQ3MjcsMTEgQEAKICMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KIGFjX2RlbGltPSclIV8hIyAnCiBmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KLSAgYWNfdD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCi0gIGlmIHRlc3QgLXogIiRhY190IjsgdGhlbgorICBhY190dD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCisgIGlmIHRlc3QgLXogIiRhY190dCI7IHRoZW4KICAgICBicmVhawogICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiICIkTElORU5PIiA1CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKICAgZWxzZQogICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCiAgIGZpCkBAIC0xMzg1Miw3ICsxNDgxNiw3IEBACiBfQUNBV0sKIF9BQ0VPRgogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotICBhc19mbl9lcnJvciAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1CiBmaSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKIAogCkBAIC0xMzg2NSw3ICsxNDgyOSw3IEBACiAgIGVzYWMKICAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KICAgOltGSExdKjoqKTs7Ci0gIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKICAgOltGSF0tKSBhY190YWc9LTotOzsKICAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKICAgZXNhYwpAQCAtMTM4ODQsNyArMTQ4NDgsNyBAQAogICAgIGZvciBhY19mCiAgICAgZG8KICAgICAgIGNhc2UgJGFjX2YgaW4KLSAgICAgIC0pIGFjX2Y9IiR0bXAvc3RkaW4iOzsKKyAgICAgIC0pIGFjX2Y9IiRhY190bXAvc3RkaW4iOzsKICAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCiAJICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAogCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgpAQCAtMTM4OTMsNyArMTQ4NTcsNyBAQAogCSAgIFtcXC8kXSopIGZhbHNlOzsKIAkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CiAJICAgZXNhYyB8fAotCSAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CiAgICAgICBlc2FjCiAgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCiAgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgpAQCAtMTM5MTksOCArMTQ4ODMsOCBAQAogICAgIGVzYWMKIAogICAgIGNhc2UgJGFjX3RhZyBpbgotICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1IDs7CiAgICAgZXNhYwogICAgIDs7CiAgIGVzYWMKQEAgLTE0MDUwLDIzICsxNTAxNCwyNCBAQAogcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAogJGFjX2RhdGFyb290ZGlyX2hhY2sKICIKLWV2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8ICRBV0sgLWYgIiR0bXAvc3Vicy5hd2siID4kdG1wL291dCBcCi0gIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAKIHRlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCi0gIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCi0gIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnICIkdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKLXdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZC4iID4mNQord2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJwotd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiYyO30KK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KIAotICBybSAtZiAiJHRtcC9zdGRpbiIKKyAgcm0gLWYgIiRhY190bXAvc3RkaW4iCiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgLSkgY2F0ICIkdG1wL291dCIgJiYgcm0gLWYgIiR0bXAvb3V0Ijs7Ci0gICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgLSkgY2F0ICIkYWNfdG1wL291dCIgJiYgcm0gLWYgIiRhY190bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiRhY190bXAvb3V0IiAiJGFjX2ZpbGUiOzsKICAgZXNhYyBcCi0gIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICA7OwogICA6SCkKICAgIwpAQCAtMTQwNzUsMjcgKzE1MDQwLDMyIEBACiAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KICAgICB7CiAgICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKLSAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIgotICAgIH0gPiIkdG1wL2NvbmZpZy5oIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKLSAgICBpZiBkaWZmICIkYWNfZmlsZSIgIiR0bXAvY29uZmlnLmgiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CiAgICAgZWxzZQogICAgICAgcm0gLWYgIiRhY19maWxlIgotICAgICAgbXYgIiR0bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAotCXx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgICAgbXYgIiRhY190bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAorCXx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogICAgIGZpCiAgIGVsc2UKICAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKLSAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CiAgIGZpCiAgOzsKIAogCiAgIGVzYWMKIAorCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJNb2R1bGVzL2xkX3NvX2FpeCI6RikgY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXggOzsKKworICBlc2FjCiBkb25lICMgZm9yIGFjX3RhZwogCiAKQEAgLTE0MTA0LDcgKzE1MDc0LDcgQEAKIGFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCiAKIHRlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8Ci0gIGFzX2ZuX2Vycm9yICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKIAogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCkBAIC0xNDEyNSw3ICsxNTA5NSw3IEBACiAgIGV4ZWMgNT4+Y29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgYXNfZm5fZXhpdCAkPworICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKIGZpCiBpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmluZGV4IGYzZDM0ZjIuLmQwODIxOTEgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5pbgorKysgYi9jb25maWd1cmUuaW4KQEAgLTEsMTcgKzEsMjYgQEAKIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogZG5sICogUGxlYXNlIHJ1biBhdXRvcmVjb25mIHRvIHRlc3QgeW91ciBjaGFuZ2VzISAqCiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLWRubCBOT1RFOiBhdXRvY29uZiAyLjY0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrICh1c2UgMi42MSkuCiAKICMgU2V0IFZFUlNJT04gc28gd2Ugb25seSBuZWVkIHRvIGVkaXQgaW4gb25lIHBsYWNlIChpLmUuLCBoZXJlKQotbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAyLjYpCittNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDIuNykKKworQUNfUFJFUkVRKDIuNjUpCiAKIEFDX1JFVklTSU9OKCRSZXZpc2lvbiQpCi1BQ19QUkVSRVEoMi42MSkKLUFDX0lOSVQocHl0aG9uLCBQWVRIT05fVkVSU0lPTiwgaHR0cDovL3d3dy5weXRob24ub3JnL3B5dGhvbi1idWdzKQorQUNfSU5JVChweXRob24sIFBZVEhPTl9WRVJTSU9OLCBodHRwOi8vYnVncy5weXRob24ub3JnLykKIEFDX0NPTkZJR19TUkNESVIoW0luY2x1ZGUvb2JqZWN0LmhdKQogQUNfQ09ORklHX0hFQURFUihweWNvbmZpZy5oKQogCitkbmwgRW5zdXJlIHRoYXQgaWYgcHJlZml4IGlzIHNwZWNpZmllZCwgaXQgZG9lcyBub3QgZW5kIGluIGEgc2xhc2guIElmCitkbmwgaXQgZG9lcywgd2UgZ2V0IHBhdGggbmFtZXMgY29udGFpbmluZyAnLy8nIHdoaWNoIGlzIGJvdGggdWdseSBhbmQKK2RubCBjYW4gY2F1c2UgdHJvdWJsZS4KKworZG5sIExhc3Qgc2xhc2ggc2hvdWxkbid0IGJlIHN0cmlwcGVkIGlmIHByZWZpeD0vCitpZiB0ZXN0ICIkcHJlZml4IiAhPSAiLyI7IHRoZW4KKyAgICBwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkIC1lICdzL1wvJC8vZydgCitmaSAgICAKKwogZG5sIFRoaXMgaXMgZm9yIHN0dWZmIHRoYXQgYWJzb2x1dGVseSBtdXN0IGVuZCB1cCBpbiBweWNvbmZpZy5oLgogZG5sIFBsZWFzZSB1c2UgcHlwb3J0LmggaW5zdGVhZCwgaWYgcG9zc2libGUuCiBBSF9UT1AoWwpAQCAtNzEsNyArODAsNyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtLWVuYWJsZS11bml2ZXJzYWxzZGtdKQogQUNfQVJHX0VOQUJMRSh1bml2ZXJzYWxzZGssCi0JQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtdW5pdmVyc2Fsc2RrQDw6QD1TREtESVJAOj5ALCBCdWlsZCBhZ2FpbnN0IE1hYyBPUyBYIDEwLjR1IFNESyAocHBjL2kzODYpKSwKKwlBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdW5pdmVyc2Fsc2RrQDw6QD1TREtESVJAOj5AXSwgW0J1aWxkIGFnYWluc3QgTWFjIE9TIFggMTAuNHUgU0RLIChwcGMvaTM4NildKSwKIFsKIAljYXNlICRlbmFibGV2YWwgaW4KIAl5ZXMpCkBAIC0xMTIsMTAgKzEyMSw5IEBACiAKIFVOSVZFUlNBTF9BUkNIUz0iMzItYml0IgogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKLUFDX1NVQlNUKExJUE9fNjRCSVRfRkxBR1MpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC11bml2ZXJzYWwtYXJjaHMpCiBBQ19BUkdfV0lUSCh1bml2ZXJzYWwtYXJjaHMsCi0gICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNILCBzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKIFsKIAlBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQogCVVOSVZFUlNBTF9BUkNIUz0iJHdpdGh2YWwiCkBAIC0xMzIsOCArMTQwLDggQEAKIAogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLWZyYW1ld29yay1uYW1lPUZSQU1FV09SSywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdCB3aXRoIC0tZW5hYmxlLWZyYW1ld29yayksCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdCB3aXRoIC0tZW5hYmxlLWZyYW1ld29ya10pLAogWwogICAgIGlmIHRlc3QgIiR7ZW5hYmxlX2ZyYW1ld29ya30iOyB0aGVuCiAJICAgIDoKQEAgLTE1MCw3ICsxNTgsNyBAQAogXSkKIGRubCBxdWFkcmlncmFwaHMgIkA8OkAiIGFuZCAiQDo+QCIgcHJvZHVjZSAiWyIgYW5kICJdIiBpbiB0aGUgb3V0cHV0CiBBQ19BUkdfRU5BQkxFKGZyYW1ld29yaywKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtZnJhbWV3b3JrQDw6QD1JTlNUQUxMRElSQDo+QCwgQnVpbGQgKE1hY09TWHxEYXJ3aW4pIGZyYW1ld29yayksCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mcmFtZXdvcmtAPDpAPUlOU1RBTExESVJAOj5AXSwgW0J1aWxkIChNYWNPU1h8RGFyd2luKSBmcmFtZXdvcmtdKSwKIFsKIAljYXNlICRlbmFibGV2YWwgaW4KIAl5ZXMpIApAQCAtMTc0LDI2ICsxODIsNTUgQEAKIAkJZW5hYmxlX2ZyYW1ld29yaz0KIAkJOzsKIAkqKQotCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9JGVuYWJsZXZhbAorCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9IiR7ZW5hYmxldmFsfSIKIAkJUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUj0kUFlUSE9ORlJBTUVXT1JLUFJFRklYLyRQWVRIT05GUkFNRVdPUktESVIKIAkJRlJBTUVXT1JLSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgYmluaW5zdGFsbCBtYW5pbnN0YWxsIgotCQljYXNlICIke1VOSVZFUlNBTF9BUkNIU30iIGluCi0JCWFsbHwzLXdheXxpbnRlbCkKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCTs7Ci0JCSopCi0JCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKLQkJCTs7Ci0JCWVzYWMKKwkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKKwogCQllbHNlCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7cHJlZml4fSIKIAkJZmkKKworCQljYXNlICIke2VuYWJsZXZhbH0iIGluCisJCS9TeXN0ZW0qKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiIDsgdGhlbgorCQkJCSMgU2VlIGJlbG93CisJCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIvdXNyIgorCQkJZmkKKwkJCTs7CisKKwkJL0xpYnJhcnkqKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQk7OworCisJCSovTGlicmFyeS9GcmFtZXdvcmtzKQorCQkJTURJUj0iYGRpcm5hbWUgIiR7ZW5hYmxldmFsfSJgIgorCQkJTURJUj0iYGRpcm5hbWUgIiR7TURJUn0iYCIKKwkJCUZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYPSIke01ESVJ9L0FwcGxpY2F0aW9ucyIKKworCQkJaWYgdGVzdCAiJHtwcmVmaXh9IiA9ICJOT05FIjsgdGhlbgorCQkJCSMgVXNlciBoYXNuJ3Qgc3BlY2lmaWVkIHRoZSAKKwkJCQkjIC0tcHJlZml4IG9wdGlvbiwgYnV0IHdhbnRzIHRvIGluc3RhbGwKKwkJCQkjIHRoZSBmcmFtZXdvcmsgaW4gYSBub24tZGVmYXVsdCBsb2NhdGlvbiwKKwkJCQkjIGVuc3VyZSB0aGF0IHRoZSBjb21wYXRpYmlsaXR5IGxpbmtzIGdldAorCQkJCSMgaW5zdGFsbGVkIHJlbGF0aXZlIHRvIHRoYXQgcHJlZml4IGFzIHdlbGwKKwkJCQkjIGluc3RlYWQgb2YgaW4gL3Vzci9sb2NhbC4KKwkJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7TURJUn0iCisJCQlmaQorCQkJOzsKKworCQkqKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQk7OworCQllc2FjCisKIAkJcHJlZml4PSRQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSL1ZlcnNpb25zLyRWRVJTSU9OCiAKIAkJIyBBZGQgZmlsZXMgZm9yIE1hYyBzcGVjaWZpYyBjb2RlIHRvIHRoZSBsaXN0IG9mIG91dHB1dApAQCAtMjIwLDExICsyNTcsNiBAQAogCWZpCiAJZW5hYmxlX2ZyYW1ld29yaz0KIAotCWlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgCi0JdGhlbgotCQlGUkFNRVdPUktJTlNUQUxMTEFTVD11cGRhdGU0d2F5dW5pdmVyc2FsCi0JCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQlmaQogXSkKIEFDX1NVQlNUKFBZVEhPTkZSQU1FV09SSykKIEFDX1NVQlNUKFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVIpCkBAIC0yMzYsMTAgKzI2OCwxMSBAQAogQUNfU1VCU1QoRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUKQogQUNfU1VCU1QoRlJBTUVXT1JLQUxUSU5TVEFMTExBU1QpCiBBQ19TVUJTVChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpCitBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWCkKIAogIyNBQ19BUkdfV0lUSChkeWxkLAotIyMgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZHlsZCwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXIpKQorIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKICMjCiAjIFNldCBuYW1lIGZvciBtYWNoaW5lLWRlcGVuZGVudCBsaWJyYXJ5IGZpbGVzCiBBQ19TVUJTVChNQUNIREVQKQpAQCAtMjQ3LDcgKzI4MCw3IEBACiBpZiB0ZXN0IC16ICIkTUFDSERFUCIKIHRoZW4KIAlhY19zeXNfc3lzdGVtPWB1bmFtZSAtc2AKLQlpZiB0ZXN0ICIkYWNfc3lzX3N5c3RlbSIgPSAiQUlYIiAtbyAiJGFjX3N5c19zeXN0ZW0iID0gIk1vbnRlcmV5NjQiIFwKKwlpZiB0ZXN0ICIkYWNfc3lzX3N5c3RlbSIgPSAiQUlYIiBcCiAJLW8gIiRhY19zeXNfc3lzdGVtIiA9ICJVbml4V2FyZSIgLW8gIiRhY19zeXNfc3lzdGVtIiA9ICJPcGVuVU5JWCI7IHRoZW4KIAkJYWNfc3lzX3JlbGVhc2U9YHVuYW1lIC12YAogCWVsc2UKQEAgLTMwMiw5ICszMzUsMTIgQEAKICAgIyBNYXJjIFJlY2h0CiAgIE5ldEJTRC8xLjUgfCBOZXRCU0QvMS41LiogfCBOZXRCU0QvMS42IHwgTmV0QlNELzEuNi4qIHwgTmV0QlNELzEuNkA8OkBBLVNAOj5AKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OwotICAjIE9uIFNvbGFyaXMgMi42LCBzeXMvd2FpdC5oIGlzIGluY29uc2lzdGVudCBpbiB0aGUgdXNhZ2UKLSAgIyBvZiB1bmlvbiBfXz9zaWd2YWwuIFJlcG9ydGVkIGJ5IFN0dWFydCBCaXNob3AuCi0gIFN1bk9TLzUuNikKKyAgIyBGcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBTb2xhcmlzLCBfWE9QRU5fU09VUkNFIGlzIG5vdCBzbyBtdWNoIGEKKyAgIyByZXF1ZXN0IHRvIGVuYWJsZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIHN0YW5kYXJkIGFzIGEgcmVxdWVzdAorICAjIHRvIGRpc2FibGUgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc3RhbmRhcmQuICBUaGUgYmVzdCB3YXkKKyAgIyBmb3IgUHl0aG9uIHRvIHVzZSBTb2xhcmlzIGlzIHNpbXBseSB0byBsZWF2ZSBfWE9QRU5fU09VUkNFIG91dAorICAjIGVudGlyZWx5IGFuZCBkZWZpbmUgX19FWFRFTlNJT05TX18gaW5zdGVhZC4KKyAgU3VuT1MvKikKICAgICBkZWZpbmVfeG9wZW5fc291cmNlPW5vOzsKICAgIyBPbiBVbml4V2FyZSA3LCB1X2xvbmcgaXMgbmV2ZXIgZGVmaW5lZCB3aXRoIF9YT1BFTl9TT1VSQ0UsCiAgICMgYnV0IHVzZWQgaW4gL3Vzci9pbmNsdWRlL25ldGluZXQvdGNwLmguIFJlcG9ydGVkIGJ5IFRpbSBSaWNlLgpAQCAtMzUwLDM1ICszODYsMTUgQEAKIAogaWYgdGVzdCAkZGVmaW5lX3hvcGVuX3NvdXJjZSA9IHllcwogdGhlbgotICAjIE9uIFNvbGFyaXMgdy8gZysrIGl0IGFwcGVhcnMgdGhhdCBfWE9QRU5fU09VUkNFIGhhcyB0byBiZQotICAjIGRlZmluZWQgcHJlY2lzZWx5IGFzIGcrKyBkZWZpbmVzIGl0Ci0gICMgRnVydGhlcm1vcmUsIG9uIFNvbGFyaXMgMTAsIFhQRzYgcmVxdWlyZXMgdGhlIHVzZSBvZiBhIEM5OQotICAjIGNvbXBpbGVyCi0gIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi0gICAgU3VuT1MvNS44fFN1bk9TLzUuOXxTdW5PUy81LjEwKQotICAgICAgQUNfREVGSU5FKF9YT1BFTl9TT1VSQ0UsIDUwMCwgCi0gICAgICAgICAgICAgICAgRGVmaW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cykKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX0RFRklORShfWE9QRU5fU09VUkNFLCA2MDAsIAotICAgICAgICAgICAgICAgIERlZmluZSB0byB0aGUgbGV2ZWwgb2YgWC9PcGVuIHRoYXQgeW91ciBzeXN0ZW0gc3VwcG9ydHMpCi0gICAgICA7OwotICBlc2FjCisgIEFDX0RFRklORShfWE9QRU5fU09VUkNFLCA2MDAsIAorICAgICAgICAgICAgRGVmaW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cykKIAogICAjIE9uIFRydTY0IFVuaXggNC4wRiwgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRSBhbHNvIHJlcXVpcmVzCiAgICMgZGVmaW5pdGlvbiBvZiBfWE9QRU5fU09VUkNFX0VYVEVOREVEIGFuZCBfUE9TSVhfQ19TT1VSQ0UsIG9yIGVsc2UKICAgIyBzZXZlcmFsIEFQSXMgYXJlIG5vdCBkZWNsYXJlZC4gU2luY2UgdGhpcyBpcyBhbHNvIG5lZWRlZCBpbiBzb21lCiAgICMgY2FzZXMgZm9yIEhQLVVYLCB3ZSBkZWZpbmUgaXQgZ2xvYmFsbHkuCi0gICMgZXhjZXB0IGZvciBTb2xhcmlzIDEwLCB3aGVyZSBpdCBtdXN0IG5vdCBiZSBkZWZpbmVkLCAKLSAgIyBhcyBpdCBpbXBsaWVzIFhQRzQuMgotICBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICAgIFN1bk9TLzUuMTApCi0gICAgICA7OwotICAgICopCi0gICAgICBBQ19ERUZJTkUoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgMSwKLSAgICAgIAkJRGVmaW5lIHRvIGFjdGl2YXRlIFVuaXg5NS1hbmQtZWFybGllciBmZWF0dXJlcykKLSAgICAgIDs7Ci0gIGVzYWMKKyAgQUNfREVGSU5FKF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIDEsCisgICAJICAgIERlZmluZSB0byBhY3RpdmF0ZSBVbml4OTUtYW5kLWVhcmxpZXIgZmVhdHVyZXMpCiAKICAgQUNfREVGSU5FKF9QT1NJWF9DX1NPVVJDRSwgMjAwMTEyTCwgRGVmaW5lIHRvIGFjdGl2YXRlIGZlYXR1cmVzIGZyb20gSUVFRSBTdGRzIDEwMDMuMS0yMDAxKQogICAKQEAgLTQ0NSw3ICs0NjEsNyBAQAogIyBvbiB0aGF0IGZpZGRsZXMgd2l0aCBPUFQgYW5kIEJBU0VDRkxBR1M/CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aG91dC1nY2MpCiBBQ19BUkdfV0lUSChnY2MsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGhvdXQtZ2NjLG5ldmVyIHVzZSBnY2MpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1nY2NdLCBbbmV2ZXIgdXNlIGdjY10pLAogWwogCWNhc2UgJHdpdGh2YWwgaW4KIAlubykJQ0M9JHtDQzotY2N9CkBAIC00NTYsNyArNDcyLDcgQEAKIAkJd2l0aG91dF9nY2M9JHdpdGh2YWw7OwogCWVzYWNdLCBbCiAJY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCUFJWCopICAgQ0M9Y2NfcgorCUFJWCopICAgQ0M9JHtDQzoteGxjX3J9CiAJCXdpdGhvdXRfZ2NjPTs7CiAJQmVPUyopCiAJCWNhc2UgJEJFX0hPU1RfQ1BVIGluCkBAIC00NzksOSArNDk1LDYgQEAKIAkJQVI9IlwkKHNyY2RpcikvTW9kdWxlcy9hcl9iZW9zIgogCQlSQU5MSUI9OgogCQk7OwotICAgIE1vbnRlcmV5KikKLSAgICAgICAgUkFOTElCPToKLSAgICAgICAgd2l0aG91dF9nY2M9OzsKIAkqKQl3aXRob3V0X2djYz1ubzs7CiAJZXNhY10pCiBBQ19NU0dfUkVTVUxUKCR3aXRob3V0X2djYykKQEAgLTQ5MywxMyArNTA2LDIwIEBACiAoaXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBkbyAnbWFrZSBjbGVhbicgYmVmb3JlIGNvbXBpbGluZyldKQogZmkKIAorIyBJZiB0aGUgdXNlciBzZXQgQ0ZMQUdTLCB1c2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBhdXRvbWF0aWNhbGx5CisjIGRldGVybWluZWQgc2V0dGluZworcHJlc2V0X2NmbGFncz0iJENGTEFHUyIKIEFDX1BST0dfQ0MKK2lmIHRlc3QgISAteiAiJHByZXNldF9jZmxhZ3MiCit0aGVuCisJQ0ZMQUdTPSRwcmVzZXRfY2ZsYWdzCitmaQogCiBBQ19TVUJTVChDWFgpCiBBQ19TVUJTVChNQUlOQ0MpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1jeHgtbWFpbj08Y29tcGlsZXI+KQogQUNfQVJHX1dJVEgoY3h4X21haW4sCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWN4eC1tYWluPTxjb21waWxlcj5dLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1jeHgtbWFpbj08Y29tcGlsZXI+XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21waWxlIG1haW4oKSBhbmQgbGluayBweXRob24gZXhlY3V0YWJsZSB3aXRoIEMrKyBjb21waWxlcl0pLAogWwogCQpAQCAtNTUxLDcgKzU3MSw3IEBACiAKIAogIyBjaGVja3MgZm9yIFVOSVggdmFyaWFudHMgdGhhdCBzZXQgQyBwcmVwcm9jZXNzb3IgdmFyaWFibGVzCi1BQ19BSVgKK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUwogCiAjIENoZWNrIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW1zCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgpAQCAtNTY0LDcgKzU4NCw3IEBACiBBQ19FWEVFWFQKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXN1ZmZpeCkKIEFDX0FSR19XSVRIKHN1ZmZpeCwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1zdWZmaXg9LmV4ZSwgc2V0IGV4ZWN1dGFibGUgc3VmZml4KSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3VmZml4PS5leGVdLCBbc2V0IGV4ZWN1dGFibGUgc3VmZml4XSksCiBbCiAJY2FzZSAkd2l0aHZhbCBpbgogCW5vKQlFWEVFWFQ9OzsKQEAgLTYwMywxMCArNjIzLDYgQEAKICAgICBjYXNlICRDQyBpbgogICAgIGNjfCovY2MpIENDPSIkQ0MgLUFlIjs7CiAgICAgZXNhYzs7Ci1Nb250ZXJleSopCi0gICAgY2FzZSAkQ0MgaW4KLSAgICBjYykgQ0M9IiRDQyAtV2wsLUJleHBvcnQiOzsKLSAgICBlc2FjOzsKIFN1bk9TKikKICAgICAjIFNvbWUgZnVuY3Rpb25zIGhhdmUgYSBwcm90b3R5cGUgb25seSB3aXRoIHRoYXQgZGVmaW5lLCBlLmcuIGNvbmZzdHIKICAgICBBQ19ERUZJTkUoX19FWFRFTlNJT05TX18sIDEsIFtEZWZpbmVkIG9uIFNvbGFyaXMgdG8gc2VlIGFkZGl0aW9uYWwgZnVuY3Rpb24gcHJvdG90eXBlcy5dKQpAQCAtNjY3LDggKzY4Myw2IEBACiAJICAgICAgIGV4cF9leHRyYT0iLiIKIAkgICBmaQogCSAgIExJTktDQz0iXCQoc3JjZGlyKS9Nb2R1bGVzL21ha2V4cF9haXggTW9kdWxlcy9weXRob24uZXhwICRleHBfZXh0cmEgXCQoTElCUkFSWSk7ICRMSU5LQ0MiOzsKLQlNb250ZXJleTY0KikKLQkgICBMSU5LQ0M9IiRMSU5LQ0MgLUwvdXNyL2xpYi9pYTY0bDY0Ijs7CiAJUU5YKikKIAkgICAjIHFjYyBtdXN0IGJlIHVzZWQgYmVjYXVzZSB0aGUgb3RoZXIgY29tcGlsZXJzIGRvIG5vdAogCSAgICMgc3VwcG9ydCAtTi4KQEAgLTY3Nyw5ICs2OTEsMjggQEAKIGZpCiBBQ19NU0dfUkVTVUxUKCRMSU5LQ0MpCiAKKyMgR05VTEQgaXMgc2V0IHRvICJ5ZXMiIGlmIHRoZSBHTlUgbGlua2VyIGlzIHVzZWQuICBJZiB0aGlzIGdvZXMgd3JvbmcKKyMgbWFrZSBzdXJlIHdlIGRlZmF1bHQgaGF2aW5nIGl0IHNldCB0byAibm8iOiB0aGlzIGlzIHVzZWQgYnkKKyMgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgdG8ga25vdyBpZiBpdCBzaG91bGQgYWRkIC0tZW5hYmxlLW5ldy1kdGFncworIyB0byBsaW5rZXIgY29tbWFuZCBsaW5lcywgYW5kIGZhaWxpbmcgdG8gZGV0ZWN0IEdOVSBsZCBzaW1wbHkgcmVzdWx0cworIyBpbiB0aGUgc2FtZSBiYWhhdmlvdXIgYXMgYmVmb3JlLgorQUNfU1VCU1QoR05VTEQpCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdOVSBsZCkKK2FjX3Byb2c9bGQKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgYWNfcHJvZz1gJENDIC1wcmludC1wcm9nLW5hbWU9bGRgCitmaQorY2FzZSBgIiRhY19wcm9nIiAtViAyPiYxIDwgL2Rldi9udWxsYCBpbgorICAgICAgKkdOVSopCisgICAgICAgICAgR05VTEQ9eWVzOzsKKyAgICAgICopCisgICAgICAgICAgR05VTEQ9bm87OworZXNhYworQUNfTVNHX1JFU1VMVCgkR05VTEQpCisKIEFDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtc2hhcmVkKQogQUNfQVJHX0VOQUJMRShzaGFyZWQsCi0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0tZW5hYmxlLXNoYXJlZCwgZGlzYWJsZS9lbmFibGUgYnVpbGRpbmcgc2hhcmVkIHB5dGhvbiBsaWJyYXJ5KSkKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZF0sIFtkaXNhYmxlL2VuYWJsZSBidWlsZGluZyBzaGFyZWQgcHl0aG9uIGxpYnJhcnldKSkKIAogaWYgdGVzdCAteiAiJGVuYWJsZV9zaGFyZWQiCiB0aGVuIApAQCAtNjk0LDEzICs3MjcsMTMgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLWVuYWJsZS1wcm9maWxpbmcpCiBBQ19BUkdfRU5BQkxFKHByb2ZpbGluZywKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtcHJvZmlsaW5nLCBlbmFibGUgQy1sZXZlbCBjb2RlIHByb2ZpbGluZyksCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wcm9maWxpbmddLCBbZW5hYmxlIEMtbGV2ZWwgY29kZSBwcm9maWxpbmddKSwKIFthY19zYXZlX2NjPSIkQ0MiCiAgQ0M9IiRDQyAtcGciCi0gQUNfVFJZX1JVTihbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwKLSAgIGFjX2VuYWJsZV9wcm9maWxpbmc9InllcyIsCi0gICBhY19lbmFibGVfcHJvZmlsaW5nPSJubyIsCi0gICBhY19lbmFibGVfcHJvZmlsaW5nPSJubyIpCisgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH1dXSldLAorICAgW2FjX2VuYWJsZV9wcm9maWxpbmc9InllcyJdLAorICAgW2FjX2VuYWJsZV9wcm9maWxpbmc9Im5vIl0sCisgICBbYWNfZW5hYmxlX3Byb2ZpbGluZz0ibm8iXSkKICBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2VuYWJsZV9wcm9maWxpbmcpCiAKQEAgLTc4Myw2ICs4MTYsMTAgQEAKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKFZFUlNJT04pJwogCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtEWUxEX0xJQlJBUllfUEFUSH0nCiAJOzsKKyAgICBBSVgqKQorCUxETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKKwlSVU5TSEFSRUQ9TElCUEFUSD1gcHdkYDoke0xJQlBBVEh9CisJOzsKIAogICBlc2FjCiBlbHNlICMgc2hhcmVkIGlzIGRpc2FibGVkCkBAIC04MDAsNiArODM3LDEzIEBACiBBQ19TVUJTVChBUikKIEFDX0NIRUNLX1BST0dTKEFSLCBhciBhYWwsIGFyKQogCisjIHR3ZWFrIEFSRkxBR1Mgb25seSBpZiB0aGUgdXNlciBkaWRuJ3Qgc2V0IGl0IG9uIHRoZSBjb21tYW5kIGxpbmUKK0FDX1NVQlNUKEFSRkxBR1MpCitpZiB0ZXN0IC16ICIkQVJGTEFHUyIKK3RoZW4KKyAgICAgICAgQVJGTEFHUz0icmMiCitmaQorCiBBQ19TVUJTVChTVk5WRVJTSU9OKQogQUNfQ0hFQ0tfUFJPRyhTVk5WRVJTSU9OLCBzdm52ZXJzaW9uLCBmb3VuZCwgbm90LWZvdW5kKQogaWYgdGVzdCAkU1ZOVkVSU0lPTiA9IGZvdW5kCkBAIC04MzMsNyArODc3LDcgQEAKICMgQ2hlY2sgZm9yIC0td2l0aC1weWRlYnVnCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1weWRlYnVnKQogQUNfQVJHX1dJVEgocHlkZWJ1ZywgCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtcHlkZWJ1ZywgYnVpbGQgd2l0aCBQeV9ERUJVRyBkZWZpbmVkKSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcHlkZWJ1Z10sIFtidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWRdKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwogdGhlbiAKQEAgLTg3Nyw3ICs5MjEsNyBAQAogCSAgICBpZiB0ZXN0ICIkUHlfREVCVUciID0gJ3RydWUnIDsgdGhlbgogCQkjIE9wdGltaXphdGlvbiBtZXNzZXMgdXAgZGVidWdnZXJzLCBzbyB0dXJuIGl0IG9mZiBmb3IKIAkJIyBkZWJ1ZyBidWlsZHMuCi0JCU9QVD0iLWcgLVdhbGwgJFNUUklDVF9QUk9UTyIKKwkJT1BUPSItZyAtTzAgLVdhbGwgJFNUUklDVF9QUk9UTyIKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtODk2LDE1ICs5NDAsNiBAQAogCU9QVD0iLU8iCiAJOzsKICAgICBlc2FjCi0KLSAgICAjIFRoZSBjdXJyZW50IChiZXRhKSBNb250ZXJleSBjb21waWxlciBkaWVzIHdpdGggb3B0aW1pemF0aW9ucwotICAgICMgWFhYIHdoYXQgaXMgTW9udGVyZXk/IERvZXMgaXQgc3RpbGwgZGllIHcvIC1PPyBDYW4gd2UgZ2V0IHJpZCBvZiB0aGlzPwotICAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLQlNb250ZXJleSopCi0JICAgIE9QVD0iIgotCSAgICA7OwotICAgIGVzYWMKLQogZmkKIAogQUNfU1VCU1QoQkFTRUNGTEFHUykKQEAgLTkyMiwxMCArOTU3LDExIEBACiAgICAgQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgJENDIGFjY2VwdHMgLWZuby1zdHJpY3QtYWxpYXNpbmcpCiAgICAgIGFjX3NhdmVfY2M9IiRDQyIKICAgICAgQ0M9IiRDQyAtZm5vLXN0cmljdC1hbGlhc2luZyIKLSAgICAgQUNfVFJZX1JVTihbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwKLSAgICAgYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPXllcywKLSAgICAgYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPW5vLAotICAgICBhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2s9bm8pCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2ssCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pXSwKKwkgW2FjX2N2X25vX3N0cmljdF9hbGlhc2luZ19vaz15ZXNdLAorCSBbYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rPW5vXSkpCiAgICAgIENDPSIkYWNfc2F2ZV9jYyIKICAgICBBQ19NU0dfUkVTVUxUKCRhY19jdl9ub19zdHJpY3RfYWxpYXNpbmdfb2spCiAgICAgaWYgdGVzdCAkYWNfY3Zfbm9fc3RyaWN0X2FsaWFzaW5nX29rID0geWVzCkBAIC05NTAsNyArOTg2LDYgQEAKIAlEYXJ3aW4qKQogCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAogCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLQogCSAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKIAkgICAgdGhlbgogCQlBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQpCkBAIC05NjYsNDkgKzEwMDEsNiBAQAogCQlBQ19NU0dfUkVTVUxUKCRDQykKIAkgICAgZmkKIAotCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IC1leHRyYWN0IHBwYzc0MDAiCi0JCSAgIExJUE9fNjRCSVRfRkxBR1M9Ii1leHRyYWN0IHg4Nl82NCAtZXh0cmFjdCBwcGM2NCIKLQotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCi0KLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiAtZXh0cmFjdCBwcGM3NDAwIgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCi0KLQkJIGVsc2UKLQkgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCi0KLQkJIGZpCi0KLQotCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCiAJICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KIAkgICAgIwogCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bWzAtOV1dKlwpLiovXDEvJ2AKQEAgLTEwNTAsNiArMTA0Miw1MCBAQAogCSAgICBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAJICAgIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JycKIAorCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgorCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgorCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KKwkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorCQkgICBBUkNIX1JVTl8zMkJJVD0iIgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisKKwkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKworCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgorCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorCisJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCisJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKworCQkgZWxzZQorCSAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5XSkKKworCQkgZmkKKworCisJCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gJHtDRkxBR1N9IgorCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIiAKKwkJdGhlbgorCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisJCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCisJCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorCQlmaQorCisJICAgIGZpCisKKwogCSAgICA7OwogCU9TRiopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1taWVlZSIKQEAgLTEwOTMsMTAgKzExMjksMTEgQEAKIEFDX0NBQ0hFX1ZBTChhY19jdl9vcHRfb2xpbWl0X29rLAogW2FjX3NhdmVfY2M9IiRDQyIKIENDPSIkQ0MgLU9QVDpPbGltaXQ9MCIKLUFDX1RSWV9SVU4oW2ludCBtYWluKCkgeyByZXR1cm4gMDsgfV0sCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9eWVzLAotICBhY19jdl9vcHRfb2xpbWl0X29rPW5vLAotICBhY19jdl9vcHRfb2xpbWl0X29rPW5vKQorQUNfQ09NUElMRV9JRkVMU0UoCisgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLAorICBbYWNfY3Zfb3B0X29saW1pdF9vaz15ZXNdLAorICBbYWNfY3Zfb3B0X29saW1pdF9vaz1ub10KKyAgKQogQ0M9IiRhY19zYXZlX2NjIl0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9vcHRfb2xpbWl0X29rKQogaWYgdGVzdCAkYWNfY3Zfb3B0X29saW1pdF9vayA9IHllczsgdGhlbgpAQCAtMTExNSwxMCArMTE1MiwxMSBAQAogICBBQ19DQUNIRV9WQUwoYWNfY3Zfb2xpbWl0X29rLAogICBbYWNfc2F2ZV9jYz0iJENDIgogICBDQz0iJENDIC1PbGltaXQgMTUwMCIKLSAgQUNfVFJZX1JVTihbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwKLSAgICBhY19jdl9vbGltaXRfb2s9eWVzLAotICAgIGFjX2N2X29saW1pdF9vaz1ubywKLSAgICBhY19jdl9vbGltaXRfb2s9bm8pCisgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLAorICAgIFthY19jdl9vbGltaXRfb2s9eWVzXSwKKyAgICBbYWNfY3Zfb2xpbWl0X29rPW5vXQorICAgICkKICAgQ0M9IiRhY19zYXZlX2NjIl0pCiAgIEFDX01TR19SRVNVTFQoJGFjX2N2X29saW1pdF9vaykKICAgaWYgdGVzdCAkYWNfY3Zfb2xpbWl0X29rID0geWVzOyB0aGVuCkBAIC0xMTMyLDEzICsxMTcwLDE1IEBACiAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCiAgIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCi0gIEFDX1RSWV9DT01QSUxFKFsKLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLSAgXSwsCi0gIEFDX0RFRklORShIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRSwgMSwgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0gICkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbW3ZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpO11dLCBbW11dKQorICBdLFsKKyAgICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsCisgICAgICBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIF0sWworICAgIEFDX01TR19SRVNVTFQobm8pCisgIF0pCiAgIENGTEFHUz0kc2F2ZV9DRkxBR1MKIGZpCiAKQEAgLTExNDksNyArMTE4OSw3IEBACiAjIG9wdGlvbnMgYmVmb3JlIHdlIGNhbiBjaGVjayB3aGV0aGVyIC1LcHRocmVhZCBpbXByb3ZlcyBhbnl0aGluZy4KIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBvcHRpb25zKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdCwKLVtBQ19UUllfUlVOKFsKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogdm9pZCogcm91dGluZSh2b2lkKiBwKXtyZXR1cm4gTlVMTDt9CkBAIC0xMTYxLDE0ICsxMjAxLDExIEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi1bCitdXSldLFsKICAgYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PXllcwogICBhY19jdl9rdGhyZWFkPW5vCiAgIGFjX2N2X3B0aHJlYWQ9bm8KLV0sCi0gIGFjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdD1ubywKLSAgYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vKQorXSxbYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vXSxbYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vXSkKIF0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQpCiAKQEAgLTExODYsNyArMTIyMyw3IEBACiBBQ19DQUNIRV9WQUwoYWNfY3Zfa3B0aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtS3B0aHJlYWQiCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCiB2b2lkKiByb3V0aW5lKHZvaWQqIHApe3JldHVybiBOVUxMO30KQEAgLTExOTgsMTAgKzEyMzUsNyBAQAogICAodm9pZClwdGhyZWFkX2RldGFjaChwKTsKICAgcmV0dXJuIDA7CiB9Ci1dLAotICBhY19jdl9rcHRocmVhZD15ZXMsCi0gIGFjX2N2X2twdGhyZWFkPW5vLAotICBhY19jdl9rcHRocmVhZD1ubykKK11dKV0sW2FjX2N2X2twdGhyZWFkPXllc10sW2FjX2N2X2twdGhyZWFkPW5vXSxbYWNfY3Zfa3B0aHJlYWQ9bm9dKQogQ0M9IiRhY19zYXZlX2NjIl0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9rcHRocmVhZCkKIGZpCkBAIC0xMjE3LDcgKzEyNTEsNyBAQAogQUNfQ0FDSEVfVkFMKGFjX2N2X2t0aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtS3RocmVhZCIKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKIHZvaWQqIHJvdXRpbmUodm9pZCogcCl7cmV0dXJuIE5VTEw7fQpAQCAtMTIyOSwxMCArMTI2Myw3IEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi0gIGFjX2N2X2t0aHJlYWQ9eWVzLAotICBhY19jdl9rdGhyZWFkPW5vLAotICBhY19jdl9rdGhyZWFkPW5vKQorXV0pXSxbYWNfY3Zfa3RocmVhZD15ZXNdLFthY19jdl9rdGhyZWFkPW5vXSxbYWNfY3Zfa3RocmVhZD1ub10pCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X2t0aHJlYWQpCiBmaQpAQCAtMTI0OCw3ICsxMjc5LDcgQEAKIEFDX0NBQ0hFX1ZBTChhY19jdl90aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtcHRocmVhZCIKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKIHZvaWQqIHJvdXRpbmUodm9pZCogcCl7cmV0dXJuIE5VTEw7fQpAQCAtMTI2MCwxMCArMTI5MSw3IEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi0gIGFjX2N2X3B0aHJlYWQ9eWVzLAotICBhY19jdl9wdGhyZWFkPW5vLAotICBhY19jdl9wdGhyZWFkPW5vKQorXV0pXSxbYWNfY3ZfcHRocmVhZD15ZXNdLFthY19jdl9wdGhyZWFkPW5vXSxbYWNfY3ZfcHRocmVhZD1ub10pCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3B0aHJlYWQpCiBmaQpAQCAtMTMwOSwxMSArMTMzNywxMSBAQAogCiBkbmwgIyBjaGVjayBmb3IgQU5TSSBvciBLJlIgKCJ0cmFkaXRpb25hbCIpIHByZXByb2Nlc3NvcgogZG5sIEFDX01TR19DSEVDS0lORyhmb3IgQyBwcmVwcm9jZXNzb3IgdHlwZSkKLWRubCBBQ19UUllfQ09NUElMRShbCitkbmwgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogZG5sICNkZWZpbmUgc3BhbShuYW1lLCBkb2MpIHsjbmFtZSwgJm5hbWUsICNuYW1lICIoKSAtLSAiIGRvY30KIGRubCBpbnQgZm9vOwogZG5sIHN0cnVjdCB7Y2hhciAqbmFtZTsgaW50ICphZGRyOyBjaGFyICpkb2M7fSBkZXNjID0gc3BhbShmb28sICJzb21ldGhpbmciKTsKLWRubCBdLCBbO10sIGNwcF90eXBlPWFuc2ksIEFDX0RFRklORShIQVZFX09MRF9DUFApIGNwcF90eXBlPXRyYWRpdGlvbmFsKQorZG5sIF1dLCBbWztdXSldLFtjcHBfdHlwZT1hbnNpXSxbQUNfREVGSU5FKEhBVkVfT0xEX0NQUCkgY3BwX3R5cGU9dHJhZGl0aW9uYWxdKQogZG5sIEFDX01TR19SRVNVTFQoJGNwcF90eXBlKQogCiAjIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCkBAIC0xMzI5LDcgKzEzNTcsNyBAQAogc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIGxpYnV0aWwuaCBcCiBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oKQorYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCkKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgogCkBAIC0xMzYwLDI2ICsxMzg4LDI0IEBACiAKICMgQ2hlY2sgd2hldGhlciB1c2luZyBtYWtlZGV2IHJlcXVpcmVzIGRlZmluaW5nIF9PU0ZfU09VUkNFCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1ha2VkZXYpCi1BQ19UUllfTElOSyhbCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaWYgZGVmaW5lZChNQUpPUl9JTl9NS0RFVikKICNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KICNlbGlmIGRlZmluZWQoTUFKT1JfSU5fU1lTTUFDUk9TKQogI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYgXSwKLQkgICAgWyBtYWtlZGV2KDAsIDApIF0sCi0JICAgIGFjX2N2X2hhc19tYWtlZGV2PXllcywKLQkgICAgYWNfY3ZfaGFzX21ha2VkZXY9bm8pCisjZW5kaWYgXV0sIFtbIG1ha2VkZXYoMCwgMCkgXV0pXSwKK1thY19jdl9oYXNfbWFrZWRldj15ZXNdLAorW2FjX2N2X2hhc19tYWtlZGV2PW5vXSkKIGlmIHRlc3QgIiRhY19jdl9oYXNfbWFrZWRldiIgPSAibm8iOyB0aGVuCiAgICAgIyB3ZSBkaWRuJ3QgbGluaywgdHJ5IGlmIF9PU0ZfU09VUkNFIHdpbGwgYWxsb3cgdXMgdG8gbGluawotICAgIEFDX1RSWV9MSU5LKFsKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjZGVmaW5lIF9PU0ZfU09VUkNFIDEKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAgICBdLAotICAgIFsgbWFrZWRldigwLCAwKSBdLAotICAgIGFjX2N2X2hhc19tYWtlZGV2PXllcywKLSAgICBhY19jdl9oYXNfbWFrZWRldj1ubykKKyAgICBdXSwgW1sgbWFrZWRldigwLCAwKSBdXSldLAorW2FjX2N2X2hhc19tYWtlZGV2PXllc10sCitbYWNfY3ZfaGFzX21ha2VkZXY9bm9dKQogICAgIGlmIHRlc3QgIiRhY19jdl9oYXNfbWFrZWRldiIgPSAieWVzIjsgdGhlbgogICAgICAgICBBQ19ERUZJTkUoX09TRl9TT1VSQ0UsIDEsIFtEZWZpbmUgX09TRl9TT1VSQ0UgdG8gZ2V0IHRoZSBtYWtlZGV2IG1hY3JvLl0pCiAgICAgZmkKQEAgLTEzOTgsMTEgKzE0MjQsMTEgQEAKIAogdXNlX2xmcz15ZXMKIEFDX01TR19DSEVDS0lORyhTb2xhcmlzIExGUyBidWcpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLV0sc3RydWN0IHJsaW1pdCBmb287LHNvbF9sZnNfYnVnPW5vLHNvbF9sZnNfYnVnPXllcykKK11dLCBbW3N0cnVjdCBybGltaXQgZm9vO11dKV0sW3NvbF9sZnNfYnVnPW5vXSxbc29sX2xmc19idWc9eWVzXSkKIEFDX01TR19SRVNVTFQoJHNvbF9sZnNfYnVnKQogaWYgdGVzdCAiJHNvbF9sZnNfYnVnIiA9ICJ5ZXMiOyB0aGVuCiAgIHVzZV9sZnM9bm8KQEAgLTE0MTEsNiArMTQzNywxMiBAQAogaWYgdGVzdCAiJHVzZV9sZnMiID0gInllcyI7IHRoZW4KICMgVHdvIGRlZmluZXMgbmVlZGVkIHRvIGVuYWJsZSBsYXJnZWZpbGUgc3VwcG9ydCBvbiB2YXJpb3VzIHBsYXRmb3JtcwogIyBUaGVzZSBtYXkgYWZmZWN0IHNvbWUgdHlwZWRlZnMKK2Nhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCitBSVgqKQorICAgIEFDX0RFRklORShfTEFSR0VfRklMRVMsIDEsIAorICAgIFtUaGlzIG11c3QgYmUgZGVmaW5lZCBvbiBBSVggc3lzdGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0Ll0pCisgICAgOzsKK2VzYWMKIEFDX0RFRklORShfTEFSR0VGSUxFX1NPVVJDRSwgMSwgCiBbVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuXSkKIEFDX0RFRklORShfRklMRV9PRkZTRVRfQklUUywgNjQsCkBAIC0xNDI4LDExICsxNDYwLDE1IEBACiBBQ19UWVBFX01PREVfVAogQUNfVFlQRV9PRkZfVAogQUNfVFlQRV9QSURfVAotQUNfVFlQRV9TSUdOQUwKK0FDX0RFRklORV9VTlFVT1RFRChbUkVUU0lHVFlQRV0sW3ZvaWRdLFthc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWRdKQogQUNfVFlQRV9TSVpFX1QKIEFDX1RZUEVfVUlEX1QKK0FDX1RZUEVfVUlOVDMyX1QKK0FDX1RZUEVfVUlOVDY0X1QKK0FDX1RZUEVfSU5UMzJfVAorQUNfVFlQRV9JTlQ2NF9UCiBBQ19DSEVDS19UWVBFKHNzaXplX3QsCi0gIEFDX0RFRklORShIQVZFX1NTSVpFX1QsIDEsIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHByb3ZpZGVzIHNzaXplX3QpLCwpCisgIEFDX0RFRklORShIQVZFX1NTSVpFX1QsIDEsIFtEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBzc2l6ZV90XSksLCkKIAogIyBTaXplcyBvZiB2YXJpb3VzIGNvbW1vbiBiYXNpYyB0eXBlcwogIyBBTlNJIEMgcmVxdWlyZXMgc2l6ZW9mKGNoYXIpID09IDEsIHNvIG5vIG5lZWQgdG8gY2hlY2sgaXQKQEAgLTE0NDgsMTAgKzE0ODQsMTAgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBsb25nIGxvbmcgc3VwcG9ydCkKIGhhdmVfbG9uZ19sb25nPW5vCi1BQ19UUllfQ09NUElMRShbXSwgW2xvbmcgbG9uZyB4OyB4ID0gKGxvbmcgbG9uZykwO10sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tsb25nIGxvbmcgeDsgeCA9IChsb25nIGxvbmcpMDtdXSldLFsKICAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLl0pIAogICBoYXZlX2xvbmdfbG9uZz15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9sb25nX2xvbmcpCiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2xvbmciID0geWVzIDsgdGhlbgogQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZywgOCkKQEAgLTE0NTksMTAgKzE0OTUsMTAgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBsb25nIGRvdWJsZSBzdXBwb3J0KQogaGF2ZV9sb25nX2RvdWJsZT1ubwotQUNfVFJZX0NPTVBJTEUoW10sIFtsb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTAuO10sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tsb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTA7XV0pXSxbCiAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuXSkKICAgaGF2ZV9sb25nX2RvdWJsZT15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9sb25nX2RvdWJsZSkKIGlmIHRlc3QgIiRoYXZlX2xvbmdfZG91YmxlIiA9IHllcyA7IHRoZW4KIEFDX0NIRUNLX1NJWkVPRihsb25nIGRvdWJsZSwgMTIpCkBAIC0xNDcwLDEwICsxNTA2LDEwIEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgX0Jvb2wgc3VwcG9ydCkKIGhhdmVfYzk5X2Jvb2w9bm8KLUFDX1RSWV9DT01QSUxFKFtdLCBbX0Jvb2wgeDsgeCA9IChfQm9vbCkwO10sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfQm9vbCB4OyB4ID0gKF9Cb29sKTA7XV0pXSxbCiAgIEFDX0RFRklORShIQVZFX0M5OV9CT09MLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgX0Jvb2wuXSkgCiAgIGhhdmVfYzk5X2Jvb2w9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfYzk5X2Jvb2wpCiBpZiB0ZXN0ICIkaGF2ZV9jOTlfYm9vbCIgPSB5ZXMgOyB0aGVuCiBBQ19DSEVDS19TSVpFT0YoX0Jvb2wsIDEpCkBAIC0xNDgzLDI4ICsxNTE5LDE2IEBACiAgICBbQUNfQ0hFQ0tfU0laRU9GKHVpbnRwdHJfdCwgNCldLCAKICAgIFtdLCBbI2lmZGVmIEhBVkVfU1RESU5UX0gKICAgICAgICAgI2luY2x1ZGUgPHN0ZGludC5oPgorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorICAgICAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICAgICAgICAgI2VuZGlmXSkKIAotCi0jIEhtcGguIEFDX0NIRUNLX1NJWkVPRigpIGRvZXNuJ3QgaW5jbHVkZSA8c3lzL3R5cGVzLmg+LgotQUNfTVNHX0NIRUNLSU5HKHNpemUgb2Ygb2ZmX3QpCi1BQ19DQUNIRV9WQUwoYWNfY3Zfc2l6ZW9mX29mZl90LAotW0FDX1RSWV9SVU4oWyNpbmNsdWRlIDxzdGRpby5oPgorQUNfQ0hFQ0tfU0laRU9GKG9mZl90LCBbXSwgWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZihvZmZfdCkpOwotICBleGl0KDApOwotfV0sCi1hY19jdl9zaXplb2Zfb2ZmX3Q9YGNhdCBjb25mdGVzdHZhbGAsCi1hY19jdl9zaXplb2Zfb2ZmX3Q9MCwKLWFjX2N2X3NpemVvZl9vZmZfdD00KQorI2VuZGlmCiBdKQotQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc2l6ZW9mX29mZl90KQotQUNfREVGSU5FX1VOUVVPVEVEKFNJWkVPRl9PRkZfVCwgJGFjX2N2X3NpemVvZl9vZmZfdCwKLVtUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIG9mZl90Ll0pCiAKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQpCiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2xvbmciID0geWVzCkBAIC0xNTI0LDI2ICsxNTQ4LDE0IEBACiAgIEFDX01TR19SRVNVTFQobm8pCiBmaQogCi0jIEFDX0NIRUNLX1NJWkVPRigpIGRvZXNuJ3QgaW5jbHVkZSA8dGltZS5oPi4KLUFDX01TR19DSEVDS0lORyhzaXplIG9mIHRpbWVfdCkKLUFDX0NBQ0hFX1ZBTChhY19jdl9zaXplb2ZfdGltZV90LAotW0FDX1RSWV9SVU4oWyNpbmNsdWRlIDxzdGRpby5oPgorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCwgW10sIFsKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RJTUVfSAogI2luY2x1ZGUgPHRpbWUuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZih0aW1lX3QpKTsKLSAgZXhpdCgwKTsKLX1dLAotYWNfY3Zfc2l6ZW9mX3RpbWVfdD1gY2F0IGNvbmZ0ZXN0dmFsYCwKLWFjX2N2X3NpemVvZl90aW1lX3Q9MCwKLWFjX2N2X3NpemVvZl90aW1lX3Q9NCkKKyNlbmRpZgogXSkKLUFDX01TR19SRVNVTFQoJGFjX2N2X3NpemVvZl90aW1lX3QpCi1BQ19ERUZJTkVfVU5RVU9URUQoU0laRU9GX1RJTUVfVCwgJGFjX2N2X3NpemVvZl90aW1lX3QsIAotW1RoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB0aW1lX3QuXSkKLQogCiAjIGlmIGhhdmUgcHRocmVhZF90IHRoZW4gZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QKIGFjX3NhdmVfY2M9IiRDQyIKQEAgLTE1NTYsMzQgKzE1NjgsMjIgQEAKIGZpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHB0aHJlYWRfdCkKIGhhdmVfcHRocmVhZF90PW5vCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHB0aHJlYWQuaD5dLCBbcHRocmVhZF90IHg7IHggPSAqKHB0aHJlYWRfdCopMDtdLCBoYXZlX3B0aHJlYWRfdD15ZXMpCitBQ19DT01QSUxFX0lGRUxTRShbCisgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxwdGhyZWFkLmg+XV0sIFtbcHRocmVhZF90IHg7IHggPSAqKHB0aHJlYWRfdCopMDtdXSkKK10sW2hhdmVfcHRocmVhZF90PXllc10sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX3B0aHJlYWRfdCkKIGlmIHRlc3QgIiRoYXZlX3B0aHJlYWRfdCIgPSB5ZXMgOyB0aGVuCi0gICMgQUNfQ0hFQ0tfU0laRU9GKCkgZG9lc24ndCBpbmNsdWRlIDxwdGhyZWFkLmg+LgotICBBQ19NU0dfQ0hFQ0tJTkcoc2l6ZSBvZiBwdGhyZWFkX3QpCi0gIEFDX0NBQ0hFX1ZBTChhY19jdl9zaXplb2ZfcHRocmVhZF90LAotICBbQUNfVFJZX1JVTihbI2luY2x1ZGUgPHN0ZGlvLmg+CisgIEFDX0NIRUNLX1NJWkVPRihwdGhyZWFkX3QsIFtdLCBbCisjaWZkZWYgSEFWRV9QVEhSRUFEX0gKICNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0gIG1haW4oKQotICB7Ci0gICAgRklMRSAqZj1mb3BlbigiY29uZnRlc3R2YWwiLCAidyIpOwotICAgIGlmICghZikgZXhpdCgxKTsKLSAgICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6ZW9mKHB0aHJlYWRfdCkpOwotICAgIGV4aXQoMCk7Ci0gIH1dLAotICBhY19jdl9zaXplb2ZfcHRocmVhZF90PWBjYXQgY29uZnRlc3R2YWxgLAotICBhY19jdl9zaXplb2ZfcHRocmVhZF90PTAsCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9NCkKKyNlbmRpZgogICBdKQotICBBQ19NU0dfUkVTVUxUKCRhY19jdl9zaXplb2ZfcHRocmVhZF90KQotICBBQ19ERUZJTkVfVU5RVU9URUQoU0laRU9GX1BUSFJFQURfVCwgJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QsCi0gICBbVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHB0aHJlYWRfdC5dKQogZmkKIENDPSIkYWNfc2F2ZV9jYyIKIAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLWVuYWJsZS10b29sYm94LWdsdWUpCiBBQ19BUkdfRU5BQkxFKHRvb2xib3gtZ2x1ZSwKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtdG9vbGJveC1nbHVlLCBkaXNhYmxlL2VuYWJsZSBNYWNPU1ggZ2x1ZSBjb2RlIGZvciBleHRlbnNpb25zKSkKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRvb2xib3gtZ2x1ZV0sIFtkaXNhYmxlL2VuYWJsZSBNYWNPU1ggZ2x1ZSBjb2RlIGZvciBleHRlbnNpb25zXSkpCiAKIGlmIHRlc3QgLXogIiRlbmFibGVfdG9vbGJveF9nbHVlIgogdGhlbiAKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAgICAgICAgIGVsc2UgCiAgICAgICAgICAgICBMSUJUT09MX0NSVUZUPSIiCiAgICAgZmkKLSAgICBBQ19UUllfUlVOKFsKKyAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KICAgICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCiAgICAgewpAQCAtMTY1MCw5ICsxNjUwLDcgQEAKICAgICAgIAkgIHJldHVybiAxOwogICAgICAgfQogICAgIH0KLSAgICBdLCBhY19vc3hfMzJiaXQ9eWVzLAotICAgICAgIGFjX29zeF8zMmJpdD1ubywKLSAgICAgICBhY19vc3hfMzJiaXQ9eWVzKQorICAgIF1dKV0sW2FjX29zeF8zMmJpdD15ZXNdLFthY19vc3hfMzJiaXQ9bm9dLFthY19vc3hfMzJiaXQ9eWVzXSkKICAgICAKICAgICBpZiB0ZXN0ICIke2FjX29zeF8zMmJpdH0iID0gInllcyI7IHRoZW4KICAgICAJY2FzZSBgL3Vzci9iaW4vYXJjaGAgaW4KQEAgLTE3MjIsNiArMTcyMCw3IEBACiAjIFNldCBpbmZvIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMuCiBBQ19TVUJTVChTTykKIEFDX1NVQlNUKExEU0hBUkVEKQorQUNfU1VCU1QoTERDWFhTSEFSRUQpCiBBQ19TVUJTVChCTERTSEFSRUQpCiBBQ19TVUJTVChDQ1NIQVJFRCkKIEFDX1NVQlNUKExJTktGT1JTSEFSRUQpCkBAIC0xNzY0LDcgKzE3NjMsNyBAQAogdGhlbgogCWNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAJQUlYKikKLQkJQkxEU0hBUkVEPSJcJChzcmNkaXIpL01vZHVsZXMvbGRfc29fYWl4IFwkKENDKSAtYkk6TW9kdWxlcy9weXRob24uZXhwIgorCQlCTERTSEFSRUQ9IlwkKHNyY2RpcikvTW9kdWxlcy9sZF9zb19haXggXCQoQ0MpIC1iSTpcJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmV4cCIKIAkJTERTSEFSRUQ9IlwkKEJJTkxJQkRFU1QpL2NvbmZpZy9sZF9zb19haXggXCQoQ0MpIC1iSTpcJChCSU5MSUJERVNUKS9jb25maWcvcHl0aG9uLmV4cCIKIAkJOzsKIAlCZU9TKikKQEAgLTE3NzQsMzYgKzE3NzMsNDcgQEAKIAlJUklYLzUqKSBMRFNIQVJFRD0ibGQgLXNoYXJlZCI7OwogCUlSSVgqLzYqKSBMRFNIQVJFRD0ibGQgJHtTR0lfQUJJfSAtc2hhcmVkIC1hbGwiOzsKIAlTdW5PUy81KikgCi0JCWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLQkJdGhlbiBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKLQkJZWxzZSBMRFNIQVJFRD0nJChDQykgLUcnOworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSckKENDKSAtRycKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLUcnCiAJCWZpIDs7CiAJaHAqfEhQKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSdsZCAtYic7CisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9J2xkIC1iJwogCQlmaSA7OwogCU9TRiopIExEU0hBUkVEPSJsZCAtc2hhcmVkIC1leHBlY3RfdW5yZXNvbHZlZCBcIipcIiI7OwogCURhcndpbi8xLjMqKQotCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlJworCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCiAJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQllbHNlCiAJCQkjIE5vIGZyYW1ld29yay4gSWdub3JlIHVuZGVmaW5lZCBzeW1ib2xzLCBhc3N1bWluZyB0aGV5IGNvbWUgZnJvbSBQeXRob24KIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKIAkJZmkgOzsKIAlEYXJ3aW4vMS40KnxEYXJ3aW4vNS4qfERhcndpbi82LiopCi0JCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCWVsc2UKIAkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJVSUxEUFlUSE9OKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJZmkgOzsKIAlEYXJ3aW4vKikKIAkJIyBVc2UgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCB3aGVuZXZlciBwb3NzaWJsZSAoMTAuMyBhbmQgbGF0ZXIpLgpAQCAtMTgxNCw1OCArMTgyNCw4MCBAQAogCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KIAkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCiAJCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWVsc2UKLQkJCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJZWxzZQogCQkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCVUlMRFBZVEhPTiknCiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCiAJCWZpCiAJCTs7Ci0JTGludXgqfEdOVSp8UU5YKikgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnOzsKLQlCU0QvT1MqLzQqKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiOzsKKwlMaW51eCp8R05VKnxRTlgqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CisJQlNEL09TKi80KikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQiOzsKIAlGcmVlQlNEKikKIAkJaWYgW1sgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF1dCiAJCXRoZW4KLQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICR7TERGTEFHU30nCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKIAkJZWxzZQotCQkJTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCisJCQlMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUiCiAJCWZpOzsKIAlPcGVuQlNEKikKIAkJaWYgW1sgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF1dCiAJCXRoZW4KLQkJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKSAke0xERkxBR1N9JworCQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpJworCQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCAkKENDU0hBUkVEKScKIAkJZWxzZQogCQkJCWNhc2UgYHVuYW1lIC1yYCBpbgogCQkJCVtbMDFdXS4qIHwgMi5bWzAtN11dIHwgMi5bWzAtN11dLiopCiAJCQkJICAgTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCiAJCQkJICAgOzsKIAkJCQkqKQotCQkJCSAgIExEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpICR7TERGTEFHU30nCisJCQkJICAgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCknCisJCQkJICAgTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkICQoQ0NTSEFSRUQpJwogCQkJCSAgIDs7CiAJCQkJZXNhYwogCQlmaTs7Ci0JTmV0QlNEKnxEcmFnb25GbHkqKSBMRFNIQVJFRD0iY2MgLXNoYXJlZCAke0xERkxBR1N9Ijs7CisJTmV0QlNEKnxEcmFnb25GbHkqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CiAJT3BlblVOSVgqfFVuaXhXYXJlKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRycKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nJChDQykgLUcnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1HJwogCQlmaTs7Ci0JU0NPX1NWKikgTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCc7OwotCU1vbnRlcmV5KikgTERTSEFSRUQ9ImNjIC1HIC1keSAtQmR5bmFtaWMgLUJleHBvcnQgLUwvdXNyL2xpYi9pYTY0bDY0Ijs7Ci0JQ1lHV0lOKikgTERTSEFSRUQ9ImdjYyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiOzsKLQlhdGhlb3MqKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiOzsKKwlTQ09fU1YqKQorCQlMRFNIQVJFRD0nJChDQykgLVdsLC1HLC1CZXhwb3J0JworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1XbCwtRywtQmV4cG9ydCc7OworCUNZR1dJTiopCisJCUxEU0hBUkVEPSJnY2MgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSI7OworCWF0aGVvcyopCisJCUxEU0hBUkVEPSJnY2MgLXNoYXJlZCIKKwkJTERDWFhTSEFSRUQ9ImcrKyAtc2hhcmVkIjs7CiAJKikJTERTSEFSRUQ9ImxkIjs7CiAJZXNhYwogZmkKIEFDX01TR19SRVNVTFQoJExEU0hBUkVEKQorTERDWFhTSEFSRUQ9JHtMRENYWFNIQVJFRC0kTERTSEFSRUR9CiBCTERTSEFSRUQ9JHtCTERTSEFSRUQtJExEU0hBUkVEfQogIyBDQ1NIQVJFRCBhcmUgdGhlIEMgKmZsYWdzKiB1c2VkIHRvIGNyZWF0ZSBvYmplY3RzIHRvIGdvIGludG8gYSBzaGFyZWQKICMgbGlicmFyeSAobW9kdWxlKSAtLSB0aGlzIGlzIG9ubHkgbmVlZGVkIGZvciBhIGZldyBzeXN0ZW1zCkBAIC0xODk2LDcgKzE5MjgsNiBAQAogCQl0aGVuIENDU0hBUkVEPSItZlBJQyIKIAkJZWxzZSBDQ1NIQVJFRD0iLUtwaWMgLWJlbGYiCiAJCWZpOzsKLQlNb250ZXJleSopIENDU0hBUkVEPSItRyI7OwogCUlSSVgqLzYqKSAgY2FzZSAkQ0MgaW4KIAkJICAgKmdjYyopIENDU0hBUkVEPSItc2hhcmVkIjs7CiAJCSAgICopIENDU0hBUkVEPSIiOzsKQEAgLTIwMTYsMTMgKzIwNDcsMTcgQEAKICMgY2hlY2tzIGZvciBzeXN0ZW0gZGVwZW5kZW50IEMrKyBleHRlbnNpb25zIHN1cHBvcnQKIGNhc2UgIiRhY19zeXNfc3lzdGVtIiBpbgogCUFJWCopCUFDX01TR19DSEVDS0lORyhmb3IgZ2VudWluZSBBSVggQysrIGV4dGVuc2lvbnMgc3VwcG9ydCkKLQkJQUNfVFJZX0xJTksoWyNpbmNsdWRlICIvdXNyL2xwcC94bEMvaW5jbHVkZS9sb2FkLmgiXSwKLQkJCSAgICBbbG9hZEFuZEluaXQoIiIsIDAsICIiKV0sCi0JCQkgICAgW0FDX0RFRklORShBSVhfR0VOVUlORV9DUExVU1BMVVMsIDEsCisJCUFDX0xJTktfSUZFTFNFKFsKKwkJICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bG9hZC5oPl1dLAorCQkJCSAgW1tsb2FkQW5kSW5pdCgiIiwgMCwgIiIpXV0pCisJCV0sWworCQkgIEFDX0RFRklORShBSVhfR0VOVUlORV9DUExVU1BMVVMsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSBmb3IgQUlYIGlmIHlvdXIgY29tcGlsZXIgaXMgYSBnZW51aW5lIElCTSB4bEMveGxDX3IKICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB3YW50IHN1cHBvcnQgZm9yIEFJWCBDKysgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzLl0pCi0JCQkgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCi0JCQkgICAgW0FDX01TR19SRVNVTFQobm8pXSk7OworCQkgIEFDX01TR19SRVNVTFQoeWVzKQorCQldLFsKKwkJICBBQ19NU0dfUkVTVUxUKG5vKQorCQldKTs7CiAJKikgOzsKIGVzYWMKIApAQCAtMjAzOSwyNiArMjA3NCw2NCBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1saWJzKQogQUNfQVJHX1dJVEgobGlicywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1saWJzPSdsaWIxIC4uLicsIGxpbmsgYWdhaW5zdCBhZGRpdGlvbmFsIGxpYnMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJzPSdsaWIxIC4uLiddLCBbbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlic10pLAogWwogQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIExJQlM9IiR3aXRodmFsICRMSUJTIgogXSwKIFtBQ19NU0dfUkVTVUxUKG5vKV0pCiAKK0FDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKKworIyBDaGVjayBmb3IgdXNlIG9mIHRoZSBzeXN0ZW0gZXhwYXQgbGlicmFyeQorQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0KQorQUNfQVJHX1dJVEgoc3lzdGVtX2V4cGF0LAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXN0ZW0tZXhwYXRdLCBbYnVpbGQgcHlleHBhdCBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGV4cGF0IGxpYnJhcnldKSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW3dpdGhfc3lzdGVtX2V4cGF0PSJubyJdKQorCitBQ19NU0dfUkVTVUxUKCR3aXRoX3N5c3RlbV9leHBhdCkKKwogIyBDaGVjayBmb3IgdXNlIG9mIHRoZSBzeXN0ZW0gbGliZmZpIGxpYnJhcnkKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXN5c3RlbS1mZmkpCiBBQ19BUkdfV0lUSChzeXN0ZW1fZmZpLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXN5c3RlbS1mZmksIGJ1aWxkIF9jdHlwZXMgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBmZmkgbGlicmFyeSkpCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3RlbS1mZmldLCBbYnVpbGQgX2N0eXBlcyBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGZmaSBsaWJyYXJ5XSksCisgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgIFt3aXRoX3N5c3RlbV9mZmk9Im5vIl0pCisKK2lmIHRlc3QgIiR3aXRoX3N5c3RlbV9mZmkiID0gInllcyIgJiYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgTElCRkZJX0lOQ0xVREVESVI9ImAiJFBLR19DT05GSUciIGxpYmZmaSAtLWNmbGFncy1vbmx5LUkgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MvXi1JLy87cy8gKiQvLydgIgorZWxzZQorICAgIExJQkZGSV9JTkNMVURFRElSPSIiCitmaQorQUNfU1VCU1QoTElCRkZJX0lOQ0xVREVESVIpCiAKIEFDX01TR19SRVNVTFQoJHdpdGhfc3lzdGVtX2ZmaSkKIAorIyBDaGVjayBmb3IgLS13aXRoLWRibWxpYm9yZGVyCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1kYm1saWJvcmRlcikKK0FDX0FSR19XSVRIKGRibWxpYm9yZGVyLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLl0sIFtvcmRlciB0byBjaGVjayBkYiBiYWNrZW5kcyBmb3IgZGJtLiBWYWxpZCB2YWx1ZSBpcyBhIGNvbG9uIHNlcGFyYXRlZCBzdHJpbmcgd2l0aCB0aGUgYmFja2VuZCBuYW1lcyBgbmRibScsIGBnZGJtJyBhbmQgYGJkYicuXSksCitbCitpZiB0ZXN0IHgkd2l0aF9kYm1saWJvcmRlciA9IHh5ZXMKK3RoZW4KK0FDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLl0pCitlbHNlCisgIGZvciBkYiBpbiBgZWNobyAkd2l0aF9kYm1saWJvcmRlciB8IHNlZCAncy86LyAvZydgOyBkbworICAgIGlmIHRlc3QgeCRkYiAhPSB4bmRibSAmJiB0ZXN0IHgkZGIgIT0geGdkYm0gJiYgdGVzdCB4JGRiICE9IHhiZGIKKyAgICB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtZGJtbGlib3JkZXI9ZGIxOmRiMjouLi5dKQorICAgIGZpCisgIGRvbmUKK2ZpXSkKK0FDX01TR19SRVNVTFQoJHdpdGhfZGJtbGlib3JkZXIpCisKICMgRGV0ZXJtaW5lIGlmIHNpZ25hbG1vZHVsZSBzaG91bGQgYmUgdXNlZC4KIEFDX1NVQlNUKFVTRV9TSUdOQUxfTU9EVUxFKQogQUNfU1VCU1QoU0lHTkFMX09CSlMpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1zaWduYWwtbW9kdWxlKQogQUNfQVJHX1dJVEgoc2lnbmFsLW1vZHVsZSwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1zaWduYWwtbW9kdWxlLCBkaXNhYmxlL2VuYWJsZSBzaWduYWwgbW9kdWxlKSkKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtc2lnbmFsLW1vZHVsZV0sIFtkaXNhYmxlL2VuYWJsZSBzaWduYWwgbW9kdWxlXSkpCiAKIGlmIHRlc3QgLXogIiR3aXRoX3NpZ25hbF9tb2R1bGUiCiB0aGVuIHdpdGhfc2lnbmFsX21vZHVsZT0ieWVzIgpAQCAtMjA4MCw3ICsyMTUzLDcgQEAKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWRlYy10aHJlYWRzKQogQUNfU1VCU1QoTERMQVNUKQogQUNfQVJHX1dJVEgoZGVjLXRocmVhZHMsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZGVjLXRocmVhZHMsIHVzZSBERUMgQWxwaGEvT1NGMSB0aHJlYWQtc2FmZSBsaWJyYXJpZXMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kZWMtdGhyZWFkc10sIFt1c2UgREVDIEFscGhhL09TRjEgdGhyZWFkLXNhZmUgbGlicmFyaWVzXSksCiBbCiBBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQogTERMQVNUPS10aHJlYWRzCkBAIC0yMTAwLDEyICsyMTczLDEyIEBACiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC10aHJlYWRzKQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19XSVRIKHRocmVhZHMsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgob3V0KS10aHJlYWRzQDw6QD1ESVJFQ1RPUllAOj5ALCBkaXNhYmxlL2VuYWJsZSB0aHJlYWQgc3VwcG9ydCkpCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktdGhyZWFkc0A8OkA9RElSRUNUT1JZQDo+QF0sIFtkaXNhYmxlL2VuYWJsZSB0aHJlYWQgc3VwcG9ydF0pKQogCiAjIC0td2l0aC10aHJlYWQgaXMgZGVwcmVjYXRlZCwgYnV0IGNoZWNrIGZvciBpdCBhbnl3YXkKIGRubCBxdWFkcmlncmFwaHMgIkA8OkAiIGFuZCAiQDo+QCIgcHJvZHVjZSAiWyIgYW5kICJdIiBpbiB0aGUgb3V0cHV0CiBBQ19BUkdfV0lUSCh0aHJlYWQsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgob3V0KS10aHJlYWRAPDpAPURJUkVDVE9SWUA6PkAsIGRlcHJlY2F0ZWQ7IHVzZSAtLXdpdGgob3V0KS10aHJlYWRzKSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS10aHJlYWRAPDpAPURJUkVDVE9SWUA6PkBdLCBbZGVwcmVjYXRlZDsgdXNlIC0td2l0aChvdXQpLXRocmVhZHNdKSwKICAgICAgICAgICAgIFt3aXRoX3RocmVhZHM9JHdpdGhfdGhyZWFkXSkKIAogaWYgdGVzdCAteiAiJHdpdGhfdGhyZWFkcyIKQEAgLTIxODYsNyArMjI1OSw3IEBACiAgICAgVEhSRUFET0JKPSJQeXRob24vdGhyZWFkLm8iXSxbCiAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtcHRoKQogICAgIEFDX0FSR19XSVRIKFtwdGhdLAotICAgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1wdGgsIHVzZSBHTlUgcHRoIHRocmVhZGluZyBsaWJyYXJpZXMpLAorICAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcHRoXSwgW3VzZSBHTlUgcHRoIHRocmVhZGluZyBsaWJyYXJpZXNdKSwKICAgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShbV0lUSF9USFJFQURdKQogICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1BUSF0sIDEsCkBAIC0yMjAxLDEwICsyMjc0LDEwIEBACiAgICAgX2xpYnM9JExJQlMKICAgICBMSUJTPSIkTElCUyAtbHB0aHJlYWQiCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHRocmVhZF9jcmVhdGUgaW4gLWxwdGhyZWFkXSkKLSAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAotdm9pZCAqIHN0YXJ0X3JvdXRpbmUgKHZvaWQgKmFyZykgeyBleGl0ICgwKTsgfV0sIFsKLXB0aHJlYWRfY3JlYXRlIChOVUxMLCBOVUxMLCBzdGFydF9yb3V0aW5lLCBOVUxMKV0sIFsKK3ZvaWQgKiBzdGFydF9yb3V0aW5lICh2b2lkICphcmcpIHsgZXhpdCAoMCk7IH1dXSwgW1sKK3B0aHJlYWRfY3JlYXRlIChOVUxMLCBOVUxMLCBzdGFydF9yb3V0aW5lLCBOVUxMKV1dKV0sWwogICAgIEFDX01TR19SRVNVTFQoeWVzKQogICAgIEFDX0RFRklORShXSVRIX1RIUkVBRCkKICAgICBwb3NpeF90aHJlYWRzPXllcwpAQCAtMjI3MiwxOSArMjM0NSwyMiBAQAogICAgICAgIyBCdWcgNjYyNzg3OiBVc2luZyBzZW1hcGhvcmVzIGNhdXNlcyB1bmV4cGxpY2FibGUgaGFuZ3Mgb24gU29sYXJpcyA4LgogICAgICAgY2FzZSAgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIFN1bk9TLzUuNikgQUNfREVGSU5FKEhBVkVfUFRIUkVBRF9ERVNUUlVDVE9SLCAxLAotICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIGZvciBTb2xhcmlzIDIuNiBidWcgaW4gcHRocmVhZCBoZWFkZXIuKQorICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lZCBmb3IgU29sYXJpcyAyLjYgYnVnIGluIHB0aHJlYWQgaGVhZGVyLl0pCiAJCSAgICAgICA7OwogICAgICAgU3VuT1MvNS44KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKLQkJICAgICAgIERlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSkKKwkJICAgICAgIFtEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW1dKQogCQkgICAgICAgOzsKICAgICAgIEFJWC81KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKLQkJICAgICAgIERlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSkKKwkJICAgICAgIFtEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW1dKQogCQkgICAgICAgOzsKKyAgICAgIEFJWC82KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKKyAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW0pCisgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgIGVzYWMKIAogICAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIFBUSFJFQURfU0NPUEVfU1lTVEVNIGlzIHN1cHBvcnRlZCkKICAgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQsCi0gICAgICBbQUNfVFJZX1JVTihbI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgIFtBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWyNpbmNsdWRlIDxwdGhyZWFkLmg+CiAgICAgICB2b2lkICpmb28odm9pZCAqcGFybSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgIH0KQEAgLTIyOTUsMTAgKzIzNzEsMTAgQEAKICAgICAgICAgaWYgKHB0aHJlYWRfYXR0cl9zZXRzY29wZSgmYXR0ciwgUFRIUkVBRF9TQ09QRV9TWVNURU0pKSBleGl0KC0xKTsKICAgICAgICAgaWYgKHB0aHJlYWRfY3JlYXRlKCZpZCwgJmF0dHIsIGZvbywgTlVMTCkpIGV4aXQoLTEpOwogICAgICAgICBleGl0KDApOwotICAgICAgfV0sCi0gICAgICBhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9eWVzLAotICAgICAgYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkPW5vLAotICAgICAgYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkPW5vKQorICAgICAgfV1dKV0sCisgICAgICBbYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkPXllc10sCisgICAgICBbYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkPW5vXSwKKyAgICAgIFthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm9dKQogICAgICAgXSkKICAgICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZCkKICAgICAgIGlmIHRlc3QgIiRhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQiID0gInllcyI7IHRoZW4KQEAgLTIzMzMsNyArMjQwOSw3IEBACiAKIFsKIGRubCB0aGUgY2hlY2sgZG9lcyBub3Qgd29yayBvbiBjcm9zcyBjb21waWxhdGlvbiBjYXNlLi4uCi0gIEFDX1RSWV9SVU4oWyAvKiBBRl9JTkVUNiBhdmFpbGFibGUgY2hlY2sgKi8KKyAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sgLyogQUZfSU5FVDYgYXZhaWxhYmxlIGNoZWNrICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogbWFpbigpCkBAIC0yMzQzLDI1ICsyNDE5LDMxIEBACiAgZWxzZQogICAgZXhpdCgwKTsKIH0KLV0sCitdXSldLFsKICAgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIGlwdjY9eWVzLAotICBBQ19NU0dfUkVTVUxUKG5vKQotICBpcHY2PW5vLAorICBpcHY2PXllcworXSxbCiAgIEFDX01TR19SRVNVTFQobm8pCiAgIGlwdjY9bm8KLSkKK10sWworICBBQ19NU0dfUkVTVUxUKG5vKQorICBpcHY2PW5vCitdKQogCiBpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgogCUFDX01TR19DSEVDS0lORyhpZiBSRkMyNTUzIEFQSSBpcyBhdmFpbGFibGUpCi0JQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSwKLQlbc3RydWN0IHNvY2thZGRyX2luNiB4OwoteC5zaW42X3Njb3BlX2lkO10sCi0JCUFDX01TR19SRVNVTFQoeWVzKQotCQlpcHY2PXllcywKLQkJQUNfTVNHX1JFU1VMVChubywgSVB2NiBkaXNhYmxlZCkKLQkJaXB2Nj1ubykKKwlBQ19DT01QSUxFX0lGRUxTRShbCisJICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl1dLAorCQkJICBbW3N0cnVjdCBzb2NrYWRkcl9pbjYgeDsKKwkJCSAgICB4LnNpbjZfc2NvcGVfaWQ7XV0pCisJXSxbCisJICBBQ19NU0dfUkVTVUxUKHllcykKKwkgIGlwdjY9eWVzCisJXSxbCisJICBBQ19NU0dfUkVTVUxUKG5vLCBJUHY2IGRpc2FibGVkKQorCSAgaXB2Nj1ubworCV0pCiBmaQogCiBpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgpAQCAtMjQyMCw3ICsyNTAyLDcgQEAKIAkJCTs7CiAJCXNvbGFyaXMpCiAJCQlpZiB0ZXN0IC1mIC9ldGMvbmV0Y29uZmlnOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIC91c3IveHBnNC9iaW4vZ3JlcCAtcSB0Y3A2IC9ldGMvbmV0Y29uZmlnOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICRHUkVQIC1xIHRjcDYgL2V0Yy9uZXRjb25maWc7IHRoZW4KIAkJCQlpcHY2dHlwZT0kaQogCQkJCWlwdjZ0cnlsaWJjPXllcwogICAgICAgICAgICAgICAgICAgICAgICAgICBmaQpAQCAtMjQ4MiwxNiArMjU2NCwxOSBAQAogZmkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBPU1ggMTAuNSBTREsgb3IgbGF0ZXIpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD5dLCBGU0lPUmVmTnVtIGZSZWYgPSAwLAotICBBQ19ERUZJTkUoSEFWRV9PU1gxMDVfU0RLLCAxLCBEZWZpbmUgaWYgY29tcGlsaW5nIHVzaW5nIE1hY09TIFggMTAuNSBTREsgb3IgbGF0ZXIuKQotICBBQ19NU0dfUkVTVUxUKHllcyksCitBQ19DT01QSUxFX0lGRUxTRShbCisgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+XV0sIFtbRlNJT1JlZk51bSBmUmVmID0gMF1dKQorXSxbCisgIEFDX0RFRklORShIQVZFX09TWDEwNV9TREssIDEsIFtEZWZpbmUgaWYgY29tcGlsaW5nIHVzaW5nIE1hY09TIFggMTAuNSBTREsgb3IgbGF0ZXIuXSkKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitdLFsKICAgQUNfTVNHX1JFU1VMVChubykKLSkKK10pCiAKICMgQ2hlY2sgZm9yIC0td2l0aC1kb2Mtc3RyaW5ncwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtZG9jLXN0cmluZ3MpCiBBQ19BUkdfV0lUSChkb2Mtc3RyaW5ncywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aChvdXQpLWRvYy1zdHJpbmdzLCBkaXNhYmxlL2VuYWJsZSBkb2N1bWVudGF0aW9uIHN0cmluZ3MpKQorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLWRvYy1zdHJpbmdzXSwgW2Rpc2FibGUvZW5hYmxlIGRvY3VtZW50YXRpb24gc3RyaW5nc10pKQogCiBpZiB0ZXN0IC16ICIkd2l0aF9kb2Nfc3RyaW5ncyIKIHRoZW4gd2l0aF9kb2Nfc3RyaW5ncz0ieWVzIgpAQCAtMjUwNiw3ICsyNTkxLDcgQEAKICMgQ2hlY2sgZm9yIFB5dGhvbi1zcGVjaWZpYyBtYWxsb2Mgc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtdHNjKQogQUNfQVJHX1dJVEgodHNjLAotWyAgLS13aXRoKG91dCktdHNjICAgICAgICAgZW5hYmxlL2Rpc2FibGUgdGltZXN0YW1wIGNvdW50ZXIgcHJvZmlsZV0sIFsKKwkgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLXRzY10sW2VuYWJsZS9kaXNhYmxlIHRpbWVzdGFtcCBjb3VudGVyIHByb2ZpbGVdKSxbCiBpZiB0ZXN0ICIkd2l0aHZhbCIgIT0gbm8KIHRoZW4gCiAgIEFDX0RFRklORShXSVRIX1RTQywgMSwgCkBAIC0yNTE5LDcgKzI2MDQsNyBAQAogIyBDaGVjayBmb3IgUHl0aG9uLXNwZWNpZmljIG1hbGxvYyBzdXBwb3J0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1weW1hbGxvYykKIEFDX0FSR19XSVRIKHB5bWFsbG9jLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoKG91dCktcHltYWxsb2MsIGRpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3MpKQorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLXB5bWFsbG9jXSwgW2Rpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3NdKSkKIAogaWYgdGVzdCAteiAiJHdpdGhfcHltYWxsb2MiCiB0aGVuIHdpdGhfcHltYWxsb2M9InllcyIKQEAgLTI1MzEsMTAgKzI2MTYsMjMgQEAKIGZpCiBBQ19NU0dfUkVTVUxUKCR3aXRoX3B5bWFsbG9jKQogCisjIENoZWNrIGZvciBWYWxncmluZCBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtLXdpdGgtdmFsZ3JpbmRdKQorQUNfQVJHX1dJVEgoW3ZhbGdyaW5kXSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC12YWxncmluZF0sIFtFbmFibGUgVmFsZ3JpbmQgc3VwcG9ydF0pLCwKKyAgd2l0aF92YWxncmluZD1ubykKK0FDX01TR19SRVNVTFQoWyR3aXRoX3ZhbGdyaW5kXSkKK2lmIHRlc3QgIiR3aXRoX3ZhbGdyaW5kIiAhPSBubzsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUihbdmFsZ3JpbmQvdmFsZ3JpbmQuaF0sCisgICAgICBbQUNfREVGSU5FKFtXSVRIX1ZBTEdSSU5EXSwgMSwgW0RlZmluZSBpZiB5b3Ugd2FudCBweW1hbGxvYyB0byBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgdmFsZ3JpbmRdKV0sCisgICAgICBbQUNfTVNHX0VSUk9SKFtWYWxncmluZCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgaGVhZGVycyBub3QgYXZhaWxhYmxlXSldCisgICAgKQorZmkKKwogIyBDaGVjayBmb3IgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMpCiBBQ19BUkdfV0lUSCh3Y3R5cGUtZnVuY3Rpb25zLCAKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zLCB1c2Ugd2N0eXBlLmggZnVuY3Rpb25zKSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtd2N0eXBlLWZ1bmN0aW9uc10sIFt1c2Ugd2N0eXBlLmggZnVuY3Rpb25zXSksCiBbCiBpZiB0ZXN0ICIkd2l0aHZhbCIgIT0gbm8KIHRoZW4gCkBAIC0yNjA1LDEyICsyNzAzLDE1IEBACiBBQ19DSEVDS19GVU5DUyhhbGFybSBzZXRpdGltZXIgZ2V0aXRpbWVyIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGNob3duIFwKICBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZXhlY3YgZmNobW9kIGZjaG93biBmb3JrIGZwYXRoY29uZiBmdGltZSBmdHJ1bmNhdGUgXAogIGdhaV9zdHJlcnJvciBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCi0gZ2V0cHJpb3JpdHkgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKLSBraWxsIGtpbGxwZyBsY2htb2QgbGNob3duIGxzdGF0IG1rZmlmbyBta25vZCBta3RpbWUgXAorIGdldHByaW9yaXR5IGdldHJlc3VpZCBnZXRyZXNnaWQgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKKyBpbml0Z3JvdXBzIGtpbGwga2lsbHBnIGxjaG1vZCBsY2hvd24gbHN0YXQgbWtmaWZvIG1rbm9kIG1rdGltZSBcCiAgbXJlbWFwIG5pY2UgcGF0aGNvbmYgcGF1c2UgcGxvY2sgcG9sbCBwdGhyZWFkX2luaXQgXAogIHB1dGVudiByZWFkbGluayByZWFscGF0aCBcCi0gc2VsZWN0IHNldGVnaWQgc2V0ZXVpZCBzZXRnaWQgXAorIHNlbGVjdCBzZW1fb3BlbiBzZW1fdGltZWR3YWl0IHNlbV9nZXR2YWx1ZSBzZW1fdW5saW5rIHNldGVnaWQgc2V0ZXVpZCBcCisgc2V0Z2lkIFwKICBzZXRsb2NhbGUgc2V0cmVnaWQgc2V0cmV1aWQgc2V0c2lkIHNldHBnaWQgc2V0cGdycCBzZXR1aWQgc2V0dmJ1ZiBzbnByaW50ZiBcCisgc2V0bG9jYWxlIHNldHJlZ2lkIHNldHJldWlkIHNldHJlc3VpZCBzZXRyZXNnaWQgXAorIHNldHNpZCBzZXRwZ2lkIHNldHBncnAgc2V0dWlkIHNldHZidWYgc25wcmludGYgXAogIHNpZ2FjdGlvbiBzaWdpbnRlcnJ1cHQgc2lncmVsc2Ugc3RyZnRpbWUgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5zZXRlbnYgdXRpbWVzIHdhaXRwaWQgd2FpdDMgd2FpdDQgd2NzY29sbCBfZ2V0cHR5KQpAQCAtMjYxOCw1NiArMjcxOSw1NiBAQAogIyBGb3Igc29tZSBmdW5jdGlvbnMsIGhhdmluZyBhIGRlZmluaXRpb24gaXMgbm90IHN1ZmZpY2llbnQsIHNpbmNlCiAjIHdlIHdhbnQgdG8gdGFrZSB0aGVpciBhZGRyZXNzLgogQUNfTVNHX0NIRUNLSU5HKGZvciBjaHJvb3QpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIHZvaWQgKng9Y2hyb290LAotICBBQ19ERUZJTkUoSEFWRV9DSFJPT1QsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Nocm9vdCcgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3ZvaWQgKng9Y2hyb290XV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0NIUk9PVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnY2hyb290JyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpbmspCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIHZvaWQgKng9bGluaywKLSAgQUNfREVGSU5FKEhBVkVfTElOSywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnbGluaycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3ZvaWQgKng9bGlua11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsaW5rJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN5bWxpbmspCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIHZvaWQgKng9c3ltbGluaywKLSAgQUNfREVGSU5FKEhBVkVfU1lNTElOSywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc3ltbGluaycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3ZvaWQgKng9c3ltbGlua11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9TWU1MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGZjaGRpcikKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1mY2hkaXIsCi0gIEFDX0RFRklORShIQVZFX0ZDSERJUiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmNoZGlyJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1mY2hkaXJdXSldLAorICBbQUNfREVGSU5FKEhBVkVfRkNIRElSLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmY2hkaXInIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZnN5bmMpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIHZvaWQgKng9ZnN5bmMsCi0gIEFDX0RFRklORShIQVZFX0ZTWU5DLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmc3luYycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3ZvaWQgKng9ZnN5bmNdXSldLAorICBbQUNfREVGSU5FKEhBVkVfRlNZTkMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGZkYXRhc3luYykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1mZGF0YXN5bmMsCi0gIEFDX0RFRklORShIQVZFX0ZEQVRBU1lOQywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmRhdGFzeW5jJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1mZGF0YXN5bmNdXSldLAorICBbQUNfREVGSU5FKEhBVkVfRkRBVEFTWU5DLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmZGF0YXN5bmMnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZXBvbGwpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy9lcG9sbC5oPl0sIHZvaWQgKng9ZXBvbGxfY3JlYXRlLAotICBBQ19ERUZJTkUoSEFWRV9FUE9MTCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+XV0sIFtbdm9pZCAqeD1lcG9sbF9jcmVhdGVdXSldLAorICBbQUNfREVGSU5FKEhBVkVfRVBPTEwsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogQUNfTVNHX0NIRUNLSU5HKGZvciBrcXVldWUpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL2V2ZW50Lmg+Ci0gICAgXSwgaW50IHg9a3F1ZXVlKCksCi0gIEFDX0RFRklORShIQVZFX0tRVUVVRSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAna3F1ZXVlJyBmdW5jdGlvbnMuKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCisgICAgXV0sIFtbaW50IHg9a3F1ZXVlKCldXSldLAorICBbQUNfREVGSU5FKEhBVkVfS1FVRVVFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdrcXVldWUnIGZ1bmN0aW9ucy4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0yNjc1LDM0ICsyNzc2LDQxIEBACiAjIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgcHJvdG90eXBlcy4KIAogQUNfTVNHX0NIRUNLSU5HKGZvciBjdGVybWlkX3IpCi1BQ19UUllfQ09NUElMRShbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3RkaW8uaD4KLV0sIHZvaWQqIHAgPSBjdGVybWlkX3IsCi0gIEFDX0RFRklORShIQVZFX0NURVJNSURfUiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnY3Rlcm1pZF9yJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK11dLCBbW3ZvaWQqIHAgPSBjdGVybWlkX3JdXSldLAorICBbQUNfREVGSU5FKEhBVkVfQ1RFUk1JRF9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdjdGVybWlkX3InIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIAotQUNfTVNHX0NIRUNLSU5HKGZvciBmbG9jaykKLUFDX1RSWV9DT01QSUxFKFsKLSNpbmNsdWRlICJjb25mZGVmcy5oIiAKLSNpbmNsdWRlIDxzeXMvZmlsZS5oPgotXSwgdm9pZCogcCA9IGZsb2NrLAotICBBQ19ERUZJTkUoSEFWRV9GTE9DSywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmxvY2snIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBmbG9jayBkZWNsYXJhdGlvbl0sIFthY19jdl9mbG9ja19kZWNsXSwKKyAgW0FDX0NPTVBJTEVfSUZFTFNFKAorICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICBbI2luY2x1ZGUgPHN5cy9maWxlLmg+XSwKKyAgICAgIFt2b2lkKiBwID0gZmxvY2tdCisgICAgKV0sCisgICAgW2FjX2N2X2Zsb2NrX2RlY2w9eWVzXSwKKyAgICBbYWNfY3ZfZmxvY2tfZGVjbD1ub10KKyAgKQorXSkKK2lmIHRlc3QgIngke2FjX2N2X2Zsb2NrX2RlY2x9IiA9IHh5ZXM7IHRoZW4KKyAgQUNfQ0hFQ0tfRlVOQ1MoZmxvY2ssLAorICAgIEFDX0NIRUNLX0xJQihic2QsZmxvY2ssCisgICAgICBbQUNfREVGSU5FKEhBVkVfRkxPQ0spCisgICAgICAgQUNfREVGSU5FKEZMT0NLX05FRURTX0xJQkJTRCwgMSwgRGVmaW5lIGlmIGZsb2NrIG5lZWRzIHRvIGJlIGxpbmtlZCB3aXRoIGJzZCBsaWJyYXJ5LikKKyAgICBdKQorICApCitmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldHBhZ2VzaXplKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHVuaXN0ZC5oPgotXSwgdm9pZCogcCA9IGdldHBhZ2VzaXplLAotICBBQ19ERUZJTkUoSEFWRV9HRVRQQUdFU0laRSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGdldHBhZ2VzaXplXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0dFVFBBR0VTSVpFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdnZXRwYWdlc2l6ZScgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogCiBkbmwgY2hlY2sgZm9yIHRydWUKIEFDX0NIRUNLX1BST0dTKFRSVUUsIHRydWUsIC9iaW4vdHJ1ZSkKQEAgLTI3MTYsNyArMjgyNCw3IEBACiAjIE9uIFRydTY0LCBjaGZsYWdzIHNlZW1zIHRvIGJlIHByZXNlbnQsIGJ1dCBjYWxsaW5nIGl0IHdpbGwKICMgZXhpdCBQeXRob24KIEFDX0NBQ0hFX0NIRUNLKFtmb3IgY2hmbGFnc10sIFthY19jdl9oYXZlX2NoZmxhZ3NdLCBbZG5sCi1BQ19UUllfUlVOKFtbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQpAQCAtMjcyNSwxOSArMjgzMywyMCBAQAogICAgIHJldHVybiAxOwogICByZXR1cm4gMDsKIH0KLV1dLCBhY19jdl9oYXZlX2NoZmxhZ3M9eWVzLAotICAgYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vLAotICAgYWNfY3ZfaGF2ZV9jaGZsYWdzPWNyb3NzKQorXV1dKV0sCitbYWNfY3ZfaGF2ZV9jaGZsYWdzPXllc10sCitbYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vXSwKK1thY19jdl9oYXZlX2NoZmxhZ3M9Y3Jvc3NdKQogXSkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2NoZmxhZ3MiID0gY3Jvc3MgOyB0aGVuCiAgIEFDX0NIRUNLX0ZVTkMoW2NoZmxhZ3NdLCBbYWNfY3ZfaGF2ZV9jaGZsYWdzPSJ5ZXMiXSwgW2FjX2N2X2hhdmVfY2hmbGFncz0ibm8iXSkKIGZpCiBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9jaGZsYWdzIiA9IHllcyA7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfQ0hGTEFHUywgMSwgRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaGZsYWdzJyBmdW5jdGlvbi4pCisgIEFDX0RFRklORShIQVZFX0NIRkxBR1MsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNoZmxhZ3MnIGZ1bmN0aW9uLl0pCiBmaQogCiBBQ19DQUNIRV9DSEVDSyhbZm9yIGxjaGZsYWdzXSwgW2FjX2N2X2hhdmVfbGNoZmxhZ3NdLCBbZG5sCi1BQ19UUllfUlVOKFtbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQpAQCAtMjc0NiwxNSArMjg1NSwxMyBAQAogICAgIHJldHVybiAxOwogICByZXR1cm4gMDsKIH0KLV1dLCBhY19jdl9oYXZlX2xjaGZsYWdzPXllcywKLSAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8sCi0gICBhY19jdl9oYXZlX2xjaGZsYWdzPWNyb3NzKQorXV1dKV0sW2FjX2N2X2hhdmVfbGNoZmxhZ3M9eWVzXSxbYWNfY3ZfaGF2ZV9sY2hmbGFncz1ub10sW2FjX2N2X2hhdmVfbGNoZmxhZ3M9Y3Jvc3NdKQogXSkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2xjaGZsYWdzIiA9IGNyb3NzIDsgdGhlbgogICBBQ19DSEVDS19GVU5DKFtsY2hmbGFnc10sIFthY19jdl9oYXZlX2xjaGZsYWdzPSJ5ZXMiXSwgW2FjX2N2X2hhdmVfbGNoZmxhZ3M9Im5vIl0pCiBmaQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfbGNoZmxhZ3MiID0geWVzIDsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9MQ0hGTEFHUywgMSwgRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsY2hmbGFncycgZnVuY3Rpb24uKQorICBBQ19ERUZJTkUoSEFWRV9MQ0hGTEFHUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNoZmxhZ3MnIGZ1bmN0aW9uLl0pCiBmaQogCiBkbmwgQ2hlY2sgaWYgc3lzdGVtIHpsaWIgaGFzICpDb3B5KCkgZnVuY3Rpb25zCkBAIC0yNzc3LDcgKzI4ODQsNyBAQAogCTs7CiBlc2FjCiAKLUFDX0NIRUNLX0xJQih6LCBpbmZsYXRlQ29weSwgQUNfREVGSU5FKEhBVkVfWkxJQl9DT1BZLCAxLCBEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkpKQorQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVDb3B5LCBBQ19ERUZJTkUoSEFWRV9aTElCX0NPUFksIDEsIFtEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHldKSkKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KIERhcndpbi8qKSAKQEAgLTI3ODcsNTUgKzI4OTQsNTAgQEAKIGVzYWMKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBoc3RyZXJyb3IpCi1BQ19UUllfTElOSyhbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8bmV0ZGIuaD4KLV0sIHZvaWQqIHAgPSBoc3RyZXJyb3I7IGhzdHJlcnJvcigwKSwKLSAgQUNfREVGSU5FKEhBVkVfSFNUUkVSUk9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGhzdHJlcnJvcjsgaHN0cmVycm9yKDApXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0hTVFJFUlJPUiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaHN0cmVycm9yJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKIEFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9hdG9uKQotQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci1dLCB2b2lkKiBwID0gaW5ldF9hdG9uO2luZXRfYXRvbigwLDApLAotICBBQ19ERUZJTkUoSEFWRV9JTkVUX0FUT04sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfYXRvbicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gaW5ldF9hdG9uO2luZXRfYXRvbigwLDApXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0lORVRfQVRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKIEFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9wdG9uKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci1dLCB2b2lkKiBwID0gaW5ldF9wdG9uLAotICBBQ19ERUZJTkUoSEFWRV9JTkVUX1BUT04sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfcHRvbicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gaW5ldF9wdG9uXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0lORVRfUFRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9wdG9uJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKICMgT24gc29tZSBzeXN0ZW1zLCBzZXRncm91cHMgaXMgaW4gdW5pc3RkLmgsIG9uIG90aGVycywgaW4gZ3JwLmgKIEFDX01TR19DSEVDS0lORyhmb3Igc2V0Z3JvdXBzKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2lmZGVmIEhBVkVfR1JQX0gKICNpbmNsdWRlIDxncnAuaD4KICNlbmRpZgotXSwgCi12b2lkKiBwID0gc2V0Z3JvdXBzLAotICBBQ19ERUZJTkUoSEFWRV9TRVRHUk9VUFMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NldGdyb3VwcycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gc2V0Z3JvdXBzXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NFVEdST1VQUywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc2V0Z3JvdXBzJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKICMgY2hlY2sgZm9yIG9wZW5wdHkgYW5kIGZvcmtwdHkKIApAQCAtMjg2MCwzMCArMjk2MiwyNyBAQAogCiBBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgZ2V0Y3dkIHN0cmR1cCkKIEFDX0NIRUNLX0ZVTkNTKGdldHBncnAsIAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIAotICAgW2dldHBncnAoMCk7XSwgCi0gICBBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwKLSAgIFtEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuXSkKLSApCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAorICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCisgICAgW10pCiApCiBBQ19DSEVDS19GVU5DUyhzZXRwZ3JwLAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sCi0gICAgW3NldHBncnAoMCwwKTtdLAotICAgIEFDX0RFRklORShTRVRQR1JQX0hBVkVfQVJHLCAxLAotICAgIFtEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuXSkKLSAgKQorICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3NldHBncnAoMCwwKTtdXSldLAorICAgIFtBQ19ERUZJTkUoU0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBzZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgc2V0cGdycCgwLCAwKS5dKV0sCisgICAgW10pCiApCiBBQ19DSEVDS19GVU5DUyhnZXR0aW1lb2ZkYXksIAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90aW1lLmg+XSwgCi0gICAgW2dldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwqKTAsKHN0cnVjdCB0aW1lem9uZSopMCk7XSwgLAotICAgIEFDX0RFRklORShHRVRUSU1FT0ZEQVlfTk9fVFosIDEsCi0gICAgW0RlZmluZSBpZiBnZXR0aW1lb2ZkYXkoKSBkb2VzIG5vdCBoYXZlIHNlY29uZCAodGltZXpvbmUpIGFyZ3VtZW50Ci0gICAgIFRoaXMgaXMgdGhlIGNhc2Ugb24gTW90b3JvbGEgVjQgKFI0MFY0LjIpXSkKLSAgKQorICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90aW1lLmg+XV0sCisgIAkJCQkgICAgIFtbZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCopMCwoc3RydWN0IHRpbWV6b25lKikwKTtdXSldLAorICAgIFtdLAorICAgIFtBQ19ERUZJTkUoR0VUVElNRU9GREFZX05PX1RaLCAxLAorICAgICAgW0RlZmluZSBpZiBnZXR0aW1lb2ZkYXkoKSBkb2VzIG5vdCBoYXZlIHNlY29uZCAodGltZXpvbmUpIGFyZ3VtZW50CisgICAgICAgVGhpcyBpcyB0aGUgY2FzZSBvbiBNb3Rvcm9sYSBWNCAoUjQwVjQuMildKQorICAgIF0pCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgbWFqb3IsIG1pbm9yLCBhbmQgbWFrZWRldikKLUFDX1RSWV9MSU5LKFsKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpZiBkZWZpbmVkKE1BSk9SX0lOX01LREVWKQogI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgogI2VsaWYgZGVmaW5lZChNQUpPUl9JTl9TWVNNQUNST1MpCkBAIC0yODkxLDkgKzI5OTAsOSBAQAogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotXSxbCitdXSwgW1sKICAgbWFrZWRldihtYWpvcigwKSxtaW5vcigwKSk7Ci1dLFsKK11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9ERVZJQ0VfTUFDUk9TLCAxLAogCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRldmljZSBtYWNyb3MuXSkKICAgQUNfTVNHX1JFU1VMVCh5ZXMpCkBAIC0yOTA0LDI0ICszMDAzLDI3IEBACiAjIE9uIE9TRi8xIFY1LjEsIGdldGFkZHJpbmZvIGlzIGF2YWlsYWJsZSwgYnV0IGEgZGVmaW5lCiAjIGZvciBbbm9dZ2V0YWRkcmluZm8gaW4gbmV0ZGIuaC4gCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldGFkZHJpbmZvKQotQUNfVFJZX0xJTksoWworQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci1dLFsKLWdldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotXSwgWwotQUNfTVNHX1JFU1VMVCh5ZXMpCi1BQ19NU0dfQ0hFQ0tJTkcoZ2V0YWRkcmluZm8gYnVnKQotQUNfVFJZX1JVTihbCitdXSwgW1tnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTtdXSldLAorW2hhdmVfZ2V0YWRkcmluZm89eWVzXSwKK1toYXZlX2dldGFkZHJpbmZvPW5vXSkKK0FDX01TR19SRVNVTFQoJGhhdmVfZ2V0YWRkcmluZm8pCitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0geWVzCit0aGVuCisgIEFDX01TR19DSEVDS0lORyhnZXRhZGRyaW5mbyBidWcpCisgIEFDX0NBQ0hFX1ZBTChhY19jdl9idWdneV9nZXRhZGRyaW5mbywKKyAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogCi1tYWluKCkKK2ludCBtYWluKCkKIHsKICAgaW50IHBhc3NpdmUsIGdhaWVyciwgaW5ldDQgPSAwLCBpbmV0NiA9IDA7CiAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqYWl0b3A7CkBAIC0yOTkzLDI2ICszMDk1LDI1IEBACiAKICAgaWYgKGFpdG9wKQogICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMCk7CisgIHJldHVybiAwOwogCiAgYmFkOgogICBpZiAoYWl0b3ApCiAgICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgxKTsKKyAgcmV0dXJuIDE7CiB9Ci1dLAotQUNfTVNHX1JFU1VMVChnb29kKQotYnVnZ3lnZXRhZGRyaW5mbz1ubywKLUFDX01TR19SRVNVTFQoYnVnZ3kpCi1idWdneWdldGFkZHJpbmZvPXllcywKLUFDX01TR19SRVNVTFQoYnVnZ3kpCi1idWdneWdldGFkZHJpbmZvPXllcyldLCBbCi1BQ19NU0dfUkVTVUxUKG5vKQotYnVnZ3lnZXRhZGRyaW5mbz15ZXMKLV0pCitdXV0pXSwKK1thY19jdl9idWdneV9nZXRhZGRyaW5mbz1ub10sCitbYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89eWVzXSwKK1thY19jdl9idWdneV9nZXRhZGRyaW5mbz15ZXNdKSkKK2ZpCiAKLWlmIHRlc3QgIiRidWdneWdldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCi0JaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KK0FDX01TR19SRVNVTFQoJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvKQorCitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0gbm8gLW8gIiRhY19jdl9idWdneV9nZXRhZGRyaW5mbyIgPSB5ZXMKK3RoZW4KKwlpZiB0ZXN0ICRpcHY2ID0geWVzCisJdGhlbgogCQllY2hvICdGYXRhbDogWW91IG11c3QgZ2V0IHdvcmtpbmcgZ2V0YWRkcmluZm8oKSBmdW5jdGlvbi4nCiAJCWVjaG8gJyAgICAgICBvciB5b3UgY2FuIHNwZWNpZnkgIi0tZGlzYWJsZS1pcHY2IicuCiAJCWV4aXQgMQpAQCAtMzAyMCw2ICszMTIxLDcgQEAKIGVsc2UKIAlBQ19ERUZJTkUoSEFWRV9HRVRBRERSSU5GTywgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uXSkKIGZpCisKIEFDX0NIRUNLX0ZVTkNTKGdldG5hbWVpbmZvKQogCiAjIGNoZWNrcyBmb3Igc3RydWN0dXJlcwpAQCAtMzAzNCwxMCArMzEzNiwxMSBAQAogQUNfU1RSVUNUX1NUX0JMT0NLUwogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRpbWUuaCB0aGF0IGRlZmluZXMgYWx0em9uZSkKLUFDX0NBQ0hFX1ZBTChhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lLAotW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dGltZS5oPl0sIFtyZXR1cm4gYWx0em9uZTtdLAotICBhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPXllcywKLSAgYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZT1ubyldKQorQUNfQ0FDSEVfVkFMKGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUsWworICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHRpbWUuaD5dXSwgW1tyZXR1cm4gYWx0em9uZTtdXSldLAorICAgIFthY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPXllc10sCisgICAgW2FjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmU9bm9dKQorICBdKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSkKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUgPSB5ZXM7IHRoZW4KICAgQUNfREVGSU5FKEhBVkVfQUxUWk9ORSwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdXIgdGltZS5oIGRlZmluZXMgYWx0em9uZS5dKQpAQCAtMzA0NSwyNSArMzE0OCwyMyBAQAogCiB3YXNfaXRfZGVmaW5lZD1ubwogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgc3lzL3NlbGVjdC5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkKQotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgotXSwgWztdLCBbCitdXSwgW1s7XV0pXSxbCiAgIEFDX0RFRklORShTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUsIDEsCiAgIFtEZWZpbmUgaWYgIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+CiAgICAod2hpY2ggeW91IGNhbid0IG9uIFNDTyBPRFQgMy4wKS5dKSAKICAgd2FzX2l0X2RlZmluZWQ9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJHdhc19pdF9kZWZpbmVkKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFkZHJpbmZvKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0cnVjdF9hZGRyaW5mbywKLUFDX1RSWV9DT01QSUxFKFsKLSMJCWluY2x1ZGUgPG5ldGRiLmg+XSwKLQlbc3RydWN0IGFkZHJpbmZvIGFdLAotCWFjX2N2X3N0cnVjdF9hZGRyaW5mbz15ZXMsCi0JYWNfY3Zfc3RydWN0X2FkZHJpbmZvPW5vKSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bmV0ZGIuaD5dXSwgW1tzdHJ1Y3QgYWRkcmluZm8gYV1dKV0sCisgIFthY19jdl9zdHJ1Y3RfYWRkcmluZm89eWVzXSwKKyAgW2FjX2N2X3N0cnVjdF9hZGRyaW5mbz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RydWN0X2FkZHJpbmZvKQogaWYgdGVzdCAkYWNfY3Zfc3RydWN0X2FkZHJpbmZvID0geWVzOyB0aGVuCiAJQUNfREVGSU5FKEhBVkVfQUREUklORk8sIDEsIFtzdHJ1Y3QgYWRkcmluZm8gKG5ldGRiLmgpXSkKQEAgLTMwNzEsMTIgKzMxNzIsMTEgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBzb2NrYWRkcl9zdG9yYWdlKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlLAotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKLQlbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc10sCi0JYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzLAotCWFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPW5vKSkKKyMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzXV0pXSwKKyAgW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPXllc10sCisgIFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UpCiBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSA9IHllczsgdGhlbgogCUFDX0RFRklORShIQVZFX1NPQ0tBRERSX1NUT1JBR0UsIDEsIFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAoc3lzL3NvY2tldC5oKV0pCkBAIC0zMDg5LDMwICszMTg5LDMzIEBACiAKIHdvcmtzPW5vCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHdvcmtpbmcgdm9sYXRpbGUpCi1BQ19UUllfQ09NUElMRShbXSxbdm9sYXRpbGUgaW50IHg7IHggPSAwO10sIHdvcmtzPXllcywgCi0gIEFDX0RFRklORSh2b2xhdGlsZSwgW10sIFtEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIGtleXdvcmQgZG9lcyBub3Qgd29yay5dKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW3ZvbGF0aWxlIGludCB4OyB4ID0gMDtdXSldLAorICBbd29ya3M9eWVzXSwKKyAgW0FDX0RFRklORSh2b2xhdGlsZSwgLCBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuXSldCiApCiBBQ19NU0dfUkVTVUxUKCR3b3JrcykKIAogd29ya3M9bm8KIEFDX01TR19DSEVDS0lORyhmb3Igd29ya2luZyBzaWduZWQgY2hhcikKLUFDX1RSWV9DT01QSUxFKFtdLCBbc2lnbmVkIGNoYXIgYztdLCB3b3Jrcz15ZXMsIAotICBBQ19ERUZJTkUoc2lnbmVkLCBbXSwgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBkb2VzIG5vdCB3b3JrLl0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbc2lnbmVkIGNoYXIgYztdXSldLAorICBbd29ya3M9eWVzXSwKKyAgW0FDX0RFRklORShzaWduZWQsICwgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBkb2VzIG5vdCB3b3JrLl0pXQogKQogQUNfTVNHX1JFU1VMVCgkd29ya3MpCiAKIGhhdmVfcHJvdG90eXBlcz1ubwogQUNfTVNHX0NIRUNLSU5HKGZvciBwcm90b3R5cGVzKQotQUNfVFJZX0NPTVBJTEUoW2ludCBmb28oaW50IHgpIHsgcmV0dXJuIDA7IH1dLCBbcmV0dXJuIGZvbygxMCk7XSxbCi0gIEFDX0RFRklORShIQVZFX1BST1RPVFlQRVMsIDEsIAotICAgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZV0pIAotICBoYXZlX3Byb3RvdHlwZXM9eWVzCi1dKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW2ludCBmb28oaW50IHgpIHsgcmV0dXJuIDA7IH1dXSwgW1tyZXR1cm4gZm9vKDEwKTtdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJPVE9UWVBFUywgMSwgCisgICAgIFtEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGVdKSAKKyAgIGhhdmVfcHJvdG90eXBlcz15ZXNdLAorICBbXQorKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9wcm90b3R5cGVzKQogCiB3b3Jrcz1ubwogQUNfTVNHX0NIRUNLSU5HKGZvciB2YXJpYWJsZSBsZW5ndGggcHJvdG90eXBlcyBhbmQgc3RkYXJnLmgpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiBpbnQgZm9vKGludCB4LCAuLi4pIHsKIAl2YV9saXN0IHZhOwpAQCAtMzEyMiw0NCArMzIyNSw0NCBAQAogCXZhX2FyZyh2YSwgZG91YmxlKTsKIAlyZXR1cm4gMDsKIH0KLV0sIFtyZXR1cm4gZm9vKDEwLCAiIiwgMy4xNCk7XSwgWworXV0sIFtbcmV0dXJuIGZvbygxMCwgIiIsIDMuMTQpO11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9TVERBUkdfUFJPVE9UWVBFUywgMSwKICAgIFtEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGggZnVuY3Rpb24gcHJvdG90eXBlcwogICAgKGUuZy4gdm9pZCBmcHJpbnRmKEZJTEUgKiwgY2hhciAqLCAuLi4pOykgKmFuZCogPHN0ZGFyZy5oPl0pIAogICB3b3Jrcz15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkd29ya3MpCiAKICMgY2hlY2sgZm9yIHNvY2tldHBhaXIKIEFDX01TR19DSEVDS0lORyhmb3Igc29ja2V0cGFpcikKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci1dLCB2b2lkICp4PXNvY2tldHBhaXIsCi0gIEFDX0RFRklORShIQVZFX1NPQ0tFVFBBSVIsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NvY2tldHBhaXInIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQorXV0sIFtbdm9pZCAqeD1zb2NrZXRwYWlyXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NPQ0tFVFBBSVIsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzb2NrZXRwYWlyJyBmdW5jdGlvbi5dKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiAjIGNoZWNrIGlmIHNvY2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyCiBBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXIpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAotW3N0cnVjdCBzb2NrYWRkciB4OwoteC5zYV9sZW4gPSAwO10sCi0JQUNfTVNHX1JFU1VMVCh5ZXMpCi0JQUNfREVGSU5FKEhBVkVfU09DS0FERFJfU0FfTEVOLCAxLCBbRGVmaW5lIGlmIHNvY2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyXSksCi0JQUNfTVNHX1JFU1VMVChubykpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tzdHJ1Y3Qgc29ja2FkZHIgeDsKK3guc2FfbGVuID0gMDtdXSldLAorICBbQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBBQ19ERUZJTkUoSEFWRV9TT0NLQUREUl9TQV9MRU4sIDEsIFtEZWZpbmUgaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXJdKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKV0KKykKIAogdmFfbGlzdF9pc19hcnJheT1ubwogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdmFfbGlzdCBpcyBhbiBhcnJheSkKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjZWxzZQogI2luY2x1ZGUgPHZhcmFyZ3MuaD4KICNlbmRpZgotXSwgW3ZhX2xpc3QgbGlzdDEsIGxpc3QyOyBsaXN0MSA9IGxpc3QyO10sICwgWworXV0sIFtbdmFfbGlzdCBsaXN0MSwgbGlzdDI7IGxpc3QxID0gbGlzdDI7XV0pXSxbXSxbCiAgQUNfREVGSU5FKFZBX0xJU1RfSVNfQVJSQVksIDEsIFtEZWZpbmUgaWYgYSB2YV9saXN0IGlzIGFuIGFycmF5IG9mIHNvbWUga2luZF0pIAogIHZhX2xpc3RfaXNfYXJyYXk9eWVzCiBdKQpAQCAtMzE3NCw5ICszMjc3LDkgQEAKICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCA2IGFyZ3NdKQogICBPTERfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTICRNWV9DUFBGTEFHUyAkTVlfVEhSRUFEX0NQUEZMQUdTICRNWV9DRkxBR1MiCi0gIEFDX1RSWV9DT01QSUxFKFsKKyAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogIyAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0gIF0sIFsKKyAgXV0sIFtbCiAgICAgY2hhciAqbmFtZTsKICAgICBzdHJ1Y3QgaG9zdGVudCAqaGUsICpyZXM7CiAgICAgY2hhciBidWZmZXJbMjA0OF07CkBAIC0zMTg0LDQ4ICszMjg3LDUwIEBACiAgICAgaW50IGhfZXJybm9wOwogCiAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgYnVmZmVyLCBidWZsZW4sICZyZXMsICZoX2Vycm5vcCkKLSAgXSwgWworICBdXSldLFsKICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1IpCiAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzZfQVJHLCAxLAogICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNi1hcmcgdmVyc2lvbiBvZiBnZXRob3N0YnluYW1lX3IoKS5dKQogICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLCBbCisgIF0sWwogICAgIEFDX01TR19SRVNVTFQobm8pCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCA1IGFyZ3NdKQotICAgIEFDX1RSWV9DT01QSUxFKFsKLSMgICAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0gICAgXSwgWwotICAgICAgY2hhciAqbmFtZTsKLSAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7Ci0gICAgICBpbnQgaF9lcnJub3A7Ci0KLSAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCi0gICAgXSwgWwotICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQotICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfQVJHLCAxLAotICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSA1LWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCi0gICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICBdLCBbCi0gICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3NdKQotICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICMgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KLSAgICAgIF0sIFsKKyAgICAgIF1dLCBbWwogICAgICAgICBjaGFyICpuYW1lOwogICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7Ci0gICAgICAgIHN0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKyAgICAgICAgY2hhciBidWZmZXJbMjA0OF07CisgICAgICAgIGludCBidWZsZW4gPSAyMDQ4OworICAgICAgICBpbnQgaF9lcnJub3A7CiAKLSAgICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgJmRhdGEpOwotICAgICAgXSwgWworICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCBidWZmZXIsIGJ1ZmxlbiwgJmhfZXJybm9wKQorICAgICAgXV0pXSwKKyAgICAgIFsKICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQotICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfM19BUkcsIDEsCi0gICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0YnluYW1lX3IoKS5dKQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcsIDEsCisgICAgICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSA1LWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCiAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQogICAgICAgXSwgWwogICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgXSkKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3NdKQorICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjICAgICAgICAgICBpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgICAgIF1dLCBbWworICAgICAgICAgICAgY2hhciAqbmFtZTsKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKworICAgICAgICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgJmRhdGEpOworICAgICAgICAgIF1dKV0sCisgICAgICAgICAgWworICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIDMtYXJnIHZlcnNpb24gb2YgZ2V0aG9zdGJ5bmFtZV9yKCkuXSkKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgIF0sIFsKKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgXSkKICAgICBdKQogICBdKQogICBDRkxBR1M9JE9MRF9DRkxBR1MKQEAgLTMyNTAsNyArMzM1NSw3IEBACiAjIENoZWNrIGZvciAtLXdpdGgtZnBlY3RsCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1mcGVjdGwpCiBBQ19BUkdfV0lUSChmcGVjdGwsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZnBlY3RsLCBlbmFibGUgU0lHRlBFIGNhdGNoaW5nKSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnBlY3RsXSwgW2VuYWJsZSBTSUdGUEUgY2F0Y2hpbmddKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwogdGhlbiAKQEAgLTMyNzAsNyArMzM3NSw3IEBACiBlc2FjCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1saWJtPVNUUklORykKIEFDX0FSR19XSVRIKGxpYm0sCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtbGlibT1TVFJJTkcsIG1hdGggbGlicmFyeSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYm09U1RSSU5HXSwgW21hdGggbGlicmFyeV0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiID0gbm8KIHRoZW4gTElCTT0KQEAgLTMyODYsNyArMzM5MSw3IEBACiBBQ19TVUJTVChMSUJDKQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtbGliYz1TVFJJTkcpCiBBQ19BUkdfV0lUSChsaWJjLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLWxpYmM9U1RSSU5HLCBDIGxpYnJhcnkpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJjPVNUUklOR10sIFtDIGxpYnJhcnldKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiA9IG5vCiB0aGVuIExJQkM9CkBAIC0zMjk4LDEyICszNDAzLDEwNSBAQAogZmldLAogW0FDX01TR19SRVNVTFQoZGVmYXVsdCBMSUJDPSIkTElCQyIpXSkKIAotIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgKiBDaGVjayBmb3IgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyAqCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENoZWNrIGZvciB2YXJpb3VzIHByb3BlcnRpZXMgb2YgZmxvYXRpbmcgcG9pbnQgKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1MSUJTX1NBVkU9JExJQlMKLUxJQlM9IiRMSUJTICRMSUJNIgorQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgQyBkb3VibGVzIGFyZSBsaXR0bGUtZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0KQorQUNfQ0FDSEVfVkFMKGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlLCBbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CisgICAgaWYgKG1lbWNtcCgmeCwgIlx4MDVceDA0XHgwM1x4MDJceDAxXHhmZlx4M2ZceDQzIiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KK11dKV0sCitbYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9eWVzXSwKK1thY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ub10sCitbYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9bm9dKV0pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZSkKK2lmIHRlc3QgIiRhY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZSIgPSB5ZXMKK3RoZW4KKyAgQUNfREVGSU5FKERPVUJMRV9JU19MSVRUTEVfRU5ESUFOX0lFRUU3NTQsIDEsCisgIFtEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1iaXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkCisgICB3aXRoIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0XSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIEMgZG91YmxlcyBhcmUgYmlnLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NCkKK0FDX0NBQ0hFX1ZBTChhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSwgWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKCkgeworICAgIGRvdWJsZSB4ID0gOTAwNjEwNDA3MTgzMjU4MS4wOworICAgIGlmIChtZW1jbXAoJngsICJceDQzXHgzZlx4ZmZceDAxXHgwMlx4MDNceDA0XHgwNSIsIDgpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9CitdXSldLAorW2FjX2N2X2JpZ19lbmRpYW5fZG91YmxlPXllc10sCitbYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9bm9dLAorW2FjX2N2X2JpZ19lbmRpYW5fZG91YmxlPW5vXSldKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGUpCitpZiB0ZXN0ICIkYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGUiID0geWVzCit0aGVuCisgIEFDX0RFRklORShET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0LCAxLAorICBbRGVmaW5lIGlmIEMgZG91YmxlcyBhcmUgNjQtYml0IElFRUUgNzU0IGJpbmFyeSBmb3JtYXQsIHN0b3JlZAorICAgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIGZpcnN0XSkKK2ZpCisKKyMgU29tZSBBUk0gcGxhdGZvcm1zIHVzZSBhIG1peGVkLWVuZGlhbiByZXByZXNlbnRhdGlvbiBmb3IgZG91Ymxlcy4KKyMgV2hpbGUgUHl0aG9uIGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgZnVsbCBzdXBwb3J0IGZvciB0aGVzZSBwbGF0Zm9ybXMKKyMgKHNlZSBlLmcuLCBpc3N1ZSAxNzYyNTYxKSwgd2UgY2FuIGF0IGxlYXN0IG1ha2Ugc3VyZSB0aGF0IGZsb2F0IDwtPiBzdHJpbmcKKyMgY29udmVyc2lvbnMgd29yay4KK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIEMgZG91YmxlcyBhcmUgQVJNIG1peGVkLWVuZGlhbiBJRUVFIDc1NCBiaW5hcnk2NCkKK0FDX0NBQ0hFX1ZBTChhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlLCBbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0cmluZy5oPgoraW50IG1haW4oKSB7CisgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CisgICAgaWYgKG1lbWNtcCgmeCwgIlx4MDFceGZmXHgzZlx4NDNceDA1XHgwNFx4MDNceDAyIiwgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KK11dKV0sCitbYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZT15ZXNdLAorW2FjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9bm9dLAorW2FjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9bm9dKV0pCitBQ19NU0dfUkVTVUxUKCRhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlKQoraWYgdGVzdCAiJGFjX2N2X21peGVkX2VuZGlhbl9kb3VibGUiID0geWVzCit0aGVuCisgIEFDX0RFRklORShET1VCTEVfSVNfQVJNX01JWEVEX0VORElBTl9JRUVFNzU0LCAxLAorICBbRGVmaW5lIGlmIEMgZG91YmxlcyBhcmUgNjQtYml0IElFRUUgNzU0IGJpbmFyeSBmb3JtYXQsIHN0b3JlZAorICAgaW4gQVJNIG1peGVkLWVuZGlhbiBvcmRlciAoYnl0ZSBvcmRlciA0NTY3MDEyMyldKQorZmkKKworIyBUaGUgc2hvcnQgZmxvYXQgcmVwciBpbnRyb2R1Y2VkIGluIFB5dGhvbiAzLjEgcmVxdWlyZXMgdGhlCisjIGNvcnJlY3RseS1yb3VuZGVkIHN0cmluZyA8LT4gZG91YmxlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZyb20KKyMgUHl0aG9uL2R0b2EuYywgd2hpY2ggaW4gdHVybiByZXF1aXJlIHRoYXQgdGhlIEZQVSB1c2VzIDUzLWJpdAorIyByb3VuZGluZzsgdGhpcyBpcyBhIHByb2JsZW0gb24geDg2LCB3aGVyZSB0aGUgeDg3IEZQVSBoYXMgYSBkZWZhdWx0CisjIHJvdW5kaW5nIHByZWNpc2lvbiBvZiA2NCBiaXRzLiAgRm9yIGdjYy94ODYsIHdlIGNhbiBmaXggdGhpcyBieQorIyB1c2luZyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHRoZSB4ODcgRlBVIGNvbnRyb2wgd29yZC4KKworIyBUaGlzIGlubGluZSBhc3NlbWJsZXIgc3ludGF4IG1heSBhbHNvIHdvcmsgZm9yIHN1bmNjIGFuZCBpY2MsCisjIHNvIHdlIHRyeSBpdCBvbiBhbGwgcGxhdGZvcm1zLgorCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCisgIHVuc2lnbmVkIHNob3J0IGN3OworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjdykpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjdykpOworXV0pXSxbaGF2ZV9nY2NfYXNtX2Zvcl94ODc9eWVzXSxbaGF2ZV9nY2NfYXNtX2Zvcl94ODc9bm9dKQorQUNfTVNHX1JFU1VMVCgkaGF2ZV9nY2NfYXNtX2Zvcl94ODcpCitpZiB0ZXN0ICIkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID0geWVzCit0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfR0NDX0FTTV9GT1JfWDg3LCAxLAorICAgIFtEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkXSkKK2ZpCiAKICMgRGV0ZWN0IHdoZXRoZXIgc3lzdGVtIGFyaXRobWV0aWMgaXMgc3ViamVjdCB0byB4ODctc3R5bGUgZG91YmxlCiAjIHJvdW5kaW5nIGlzc3Vlcy4gIFRoZSByZXN1bHQgb2YgdGhpcyB0ZXN0IGhhcyBsaXR0bGUgbWVhbmluZyBvbiBub24KQEAgLTMzMTEsOCArMzUwOSwxMCBAQAogIyBtb2RlIGlzIHJvdW5kLXRvLW5lYXJlc3QgYW5kIGRvdWJsZSByb3VuZGluZyBpc3N1ZXMgYXJlIHByZXNlbnQsIGFuZAogIyAwIG90aGVyd2lzZS4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjkzNyBmb3IgbW9yZSBpbmZvLgogQUNfTVNHX0NIRUNLSU5HKGZvciB4ODctc3R5bGUgZG91YmxlIHJvdW5kaW5nKQotQUNfQ0FDSEVfVkFMKGFjX2N2X3g4N19kb3VibGVfcm91bmRpbmcsIFsKLUFDX1RSWV9SVU4oWworIyAkQkFTRUNGTEFHUyBtYXkgYWZmZWN0IHRoZSByZXN1bHQKK2FjX3NhdmVfY2M9IiRDQyIKK0NDPSIkQ0MgJEJBU0VDRkxBR1MiCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPG1hdGguaD4KIGludCBtYWluKCkgewpAQCAtMzMzMSwxMCArMzUzMSwxMSBAQAogICAgIC8qIGJvdGggdGVzdHMgc2hvdyBldmlkZW5jZSBvZiBkb3VibGUgcm91bmRpbmcgKi8KICAgICBleGl0KDEpOwogfQotXSwKLWFjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9bm8sCi1hY19jdl94ODdfZG91YmxlX3JvdW5kaW5nPXllcywKLWFjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9bm8pXSkKK11dKV0sCitbYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ub10sCitbYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz15ZXNdLAorW2FjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9bm9dKQorQ0M9IiRhY19zYXZlX2NjIgogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZykKIGlmIHRlc3QgIiRhY19jdl94ODdfZG91YmxlX3JvdW5kaW5nIiA9IHllcwogdGhlbgpAQCAtMzM0MiwxMiArMzU0MywxOCBAQAogICBbRGVmaW5lIGlmIGFyaXRobWV0aWMgaXMgc3ViamVjdCB0byB4ODctc3R5bGUgZG91YmxlIHJvdW5kaW5nIGlzc3VlXSkKIGZpCiAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ2hlY2sgZm9yIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgKgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworTElCU19TQVZFPSRMSUJTCitMSUJTPSIkTElCUyAkTElCTSIKIAogIyBPbiBGcmVlQlNEIDYuMiwgaXQgYXBwZWFycyB0aGF0IHRhbmgoLTAuKSByZXR1cm5zIDAuIGluc3RlYWQgb2YKICMgLTAuIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRhbmggcHJlc2VydmVzIHRoZSBzaWduIG9mIHplcm8pCiBBQ19DQUNIRV9WQUwoYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduLCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogaW50IG1haW4oKSB7CkBAIC0zMzU4LDEwICszNTY1LDEwIEBACiAgICAgICBhdGFuMih0YW5oKC0wLiksIC0xLikgPT0gYXRhbjIoLTAuLCAtMS4pKSBleGl0KDApOwogICBlbHNlIGV4aXQoMSk7CiB9Ci1dLAotYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPXllcywKLWFjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj1ubywKLWFjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj1ubyldKQorXV0pXSwKK1thY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ249eWVzXSwKK1thY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ249bm9dLAorW2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj1ub10pXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbikKIGlmIHRlc3QgIiRhY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ24iID0geWVzCiB0aGVuCkBAIC0zMzY5LDExICszNTc2LDEwMyBAQAogICBbRGVmaW5lIGlmIHRhbmgoLTAuKSBpcyAtMC4sIG9yIGlmIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBzaWduZWQgemVyb3NdKQogZmkKIAotQUNfQ0hFQ0tfRlVOQ1MoW2Fjb3NoIGFzaW5oIGF0YW5oIGNvcHlzaWduIGV4cG0xIGZpbml0ZSBoeXBvdCBsb2cxcF0pCitBQ19DSEVDS19GVU5DUyhbYWNvc2ggYXNpbmggYXRhbmggY29weXNpZ24gZXJmIGVyZmMgZXhwbTEgZmluaXRlIGdhbW1hXSkKK0FDX0NIRUNLX0ZVTkNTKFtoeXBvdCBsZ2FtbWEgbG9nMXAgcm91bmQgdGdhbW1hXSkKIEFDX0NIRUNLX0RFQ0xTKFtpc2luZiwgaXNuYW4sIGlzZmluaXRlXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxtYXRoLmg+XV0pCiAKIExJQlM9JExJQlNfU0FWRQogCisjIEZvciBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLCBjaGVjayB0aGF0IHNlbV9vcGVuCisjIGFjdHVhbGx5IHdvcmtzLiAgRm9yIEZyZWVCU0QgdmVyc2lvbnMgPD0gNy4yLAorIyB0aGUga2VybmVsIG1vZHVsZSB0aGF0IHByb3ZpZGVzIFBPU0lYIHNlbWFwaG9yZXMKKyMgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQsIHNvIGFuIGF0dGVtcHQgdG8gY2FsbAorIyBzZW1fb3BlbiByZXN1bHRzIGluIGEgJ1NpZ25hbCAxMicgZXJyb3IuCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBQT1NJWCBzZW1hcGhvcmVzIGFyZSBlbmFibGVkKQorQUNfQ0FDSEVfVkFMKGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2ludCBtYWluKHZvaWQpIHsKKyAgc2VtX3QgKmEgPSBzZW1fb3BlbigiL2F1dG9jb25mIiwgT19DUkVBVCwgU19JUlVTUnxTX0lXVVNSLCAwKTsKKyAgaWYgKGEgPT0gU0VNX0ZBSUxFRCkgeworICAgIHBlcnJvcigic2VtX29wZW4iKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBzZW1fY2xvc2UoYSk7CisgIHNlbV91bmxpbmsoIi9hdXRvY29uZiIpOworICByZXR1cm4gMDsKK30KK11dKV0sCitbYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPXllc10sCitbYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPW5vXSwKK1thY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9eWVzXSkKKykKK0FDX01TR19SRVNVTFQoJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCkKK2lmIHRlc3QgJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCA9IG5vCit0aGVuCisgIEFDX0RFRklORShQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVELCAxLAorICAgICAgICAgICAgW0RlZmluZSBpZiBQT1NJWCBzZW1hcGhvcmVzIGFyZW4ndCBlbmFibGVkIG9uIHlvdXIgc3lzdGVtXSkKK2ZpCisKKyMgTXVsdGlwcm9jZXNzaW5nIGNoZWNrIGZvciBicm9rZW4gc2VtX2dldHZhbHVlCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBzZW1fZ2V0dmFsdWUpCitBQ19DQUNIRV9WQUwoYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2ludCBtYWluKHZvaWQpeworICBzZW1fdCAqYSA9IHNlbV9vcGVuKCIvYXV0b2NmdHciLCBPX0NSRUFULCBTX0lSVVNSfFNfSVdVU1IsIDApOworICBpbnQgY291bnQ7CisgIGludCByZXM7CisgIGlmKGE9PVNFTV9GQUlMRUQpeworICAgIHBlcnJvcigic2VtX29wZW4iKTsKKyAgICByZXR1cm4gMTsKKworICB9CisgIHJlcyA9IHNlbV9nZXR2YWx1ZShhLCAmY291bnQpOworICBzZW1fY2xvc2UoYSk7CisgIHNlbV91bmxpbmsoIi9hdXRvY2Z0dyIpOworICByZXR1cm4gcmVzPT0tMSA/IDEgOiAwOworfQorXV0pXSwKK1thY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPW5vXSwKK1thY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllc10sCitbYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT15ZXNdKQorKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSkKK2lmIHRlc3QgJGFjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWUgPSB5ZXMKK3RoZW4KKyAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSwgMSwKKyAgW2RlZmluZSB0byAxIGlmIHlvdXIgc2VtX2dldHZhbHVlIGlzIGJyb2tlbi5dKQorZmkKKworIyBkZXRlcm1pbmUgd2hhdCBzaXplIGRpZ2l0IHRvIHVzZSBmb3IgUHl0aG9uJ3MgbG9uZ3MKK0FDX01TR19DSEVDS0lORyhbZGlnaXQgc2l6ZSBmb3IgUHl0aG9uJ3MgbG9uZ3NdKQorQUNfQVJHX0VOQUJMRShiaWctZGlnaXRzLAorQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWJpZy1kaWdpdHNAPDpAPUJJVFNAOj5AXSxbdXNlIGJpZyBkaWdpdHMgZm9yIFB5dGhvbiBsb25ncyBbW0JJVFM9MzBdXV0pLAorW2Nhc2UgJGVuYWJsZV9iaWdfZGlnaXRzIGluCit5ZXMpCisgIGVuYWJsZV9iaWdfZGlnaXRzPTMwIDs7CitubykKKyAgZW5hYmxlX2JpZ19kaWdpdHM9MTUgOzsKK1sxNXwzMF0pCisgIDs7CisqKQorICBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAkZW5hYmxlX2JpZ19kaWdpdHMgZm9yIC0tZW5hYmxlLWJpZy1kaWdpdHM7IHZhbHVlIHNob3VsZCBiZSAxNSBvciAzMF0pIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfYmlnX2RpZ2l0cykKK0FDX0RFRklORV9VTlFVT1RFRChQWUxPTkdfQklUU19JTl9ESUdJVCwgJGVuYWJsZV9iaWdfZGlnaXRzLCBbRGVmaW5lIGFzIHRoZSBwcmVmZXJyZWQgc2l6ZSBpbiBiaXRzIG9mIGxvbmcgZGlnaXRzXSkKK10sCitbQUNfTVNHX1JFU1VMVChubyB2YWx1ZSBzcGVjaWZpZWQpXSkKKwogIyBjaGVjayBmb3Igd2NoYXIuaAogQUNfQ0hFQ0tfSEVBREVSKHdjaGFyLmgsIFsKICAgQUNfREVGSU5FKEhBVkVfV0NIQVJfSCwgMSwgCkBAIC0zMzkxLDE0ICszNjkwLDE0IEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgVUNTLTQgdGNsKQogaGF2ZV91Y3M0X3RjbD1ubwotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHRjbC5oPgogI2lmIFRDTF9VVEZfTUFYICE9IDYKICMgZXJyb3IgIk5PVCBVQ1M0X1RDTCIKLSNlbmRpZl0sIFtdLCBbCisjZW5kaWZdXSwgW1tdXSldLFsKICAgQUNfREVGSU5FKEhBVkVfVUNTNF9UQ0wsIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0Y2wgYW5kIFRDTF9VVEZfTUFYPT02XSkKICAgaGF2ZV91Y3M0X3RjbD15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV91Y3M0X3RjbCkKIAogIyBjaGVjayB3aGV0aGVyIHdjaGFyX3QgaXMgc2lnbmVkIG9yIG5vdApAQCAtMzQwNywyNCArMzcwNiwyNCBAQAogICAjIGNoZWNrIHdoZXRoZXIgd2NoYXJfdCBpcyBzaWduZWQgb3Igbm90CiAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdjaGFyX3QgaXMgc2lnbmVkKQogICBBQ19DQUNIRV9WQUwoYWNfY3Zfd2NoYXJfdF9zaWduZWQsIFsKLSAgQUNfVFJZX1JVTihbCisgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAgICNpbmNsdWRlIDx3Y2hhci5oPgogICBpbnQgbWFpbigpCiAgIHsKIAkvKiBTdWNjZXNzOiBleGl0IGNvZGUgMCAqLwogICAgICAgICBleGl0KCgoKHdjaGFyX3QpIC0xKSA8ICgod2NoYXJfdCkgMCkpID8gMCA6IDEpOwogICB9Ci0gIF0sCi0gIGFjX2N2X3djaGFyX3Rfc2lnbmVkPXllcywKLSAgYWNfY3Zfd2NoYXJfdF9zaWduZWQ9bm8sCi0gIGFjX2N2X3djaGFyX3Rfc2lnbmVkPXllcyldKQorICBdXSldLAorICBbYWNfY3Zfd2NoYXJfdF9zaWduZWQ9eWVzXSwKKyAgW2FjX2N2X3djaGFyX3Rfc2lnbmVkPW5vXSwKKyAgW2FjX2N2X3djaGFyX3Rfc2lnbmVkPXllc10pXSkKICAgQUNfTVNHX1JFU1VMVCgkYWNfY3Zfd2NoYXJfdF9zaWduZWQpCiBmaQogICAKIEFDX01TR19DSEVDS0lORyh3aGF0IHR5cGUgdG8gdXNlIGZvciB1bmljb2RlKQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19FTkFCTEUodW5pY29kZSwgCi0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0tZW5hYmxlLXVuaWNvZGVAPDpAPXVjc0A8OkAyNEA6PkBAOj5ALCBFbmFibGUgVW5pY29kZSBzdHJpbmdzIChkZWZhdWx0IGlzIHVjczIpKSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVuaWNvZGVAPDpAPXVjc0A8OkAyNEA6PkBAOj5AXSwgW0VuYWJsZSBVbmljb2RlIHN0cmluZ3MgKGRlZmF1bHQgaXMgdWNzMildKSwKICAgICAgICAgICAgICAgW10sCiAgICAgICAgICAgICAgIFtlbmFibGVfdW5pY29kZT15ZXNdKQogCkBAIC0zNDk1LDE1ICszNzk0LDE1IEBACiAjIG9yIGZpbGxzIHdpdGggemVyb3MgKGxpa2UgdGhlIENyYXkgSjkwLCBhY2NvcmRpbmcgdG8gVGltIFBldGVycykuCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCkKIEFDX0NBQ0hFX1ZBTChhY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduLCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiBpbnQgbWFpbigpCiB7CiAJZXhpdCgoKC0xKT4+MyA9PSAtMSkgPyAwIDogMSk7CiB9Ci1dLAotYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXMsCi1hY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduPW5vLAotYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXMpXSkKK11dKV0sCitbYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXNdLAorW2FjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ249bm9dLAorW2FjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ249eWVzXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbikKIGlmIHRlc3QgIiRhY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduIiA9IG5vCiB0aGVuCkBAIC0zNTE1LDEyICszODE0LDEyIEBACiAjIGNoZWNrIGZvciBnZXRjX3VubG9ja2VkIGFuZCByZWxhdGVkIGxvY2tpbmcgZnVuY3Rpb25zCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldGNfdW5sb2NrZWQoKSBhbmQgZnJpZW5kcykKIEFDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQsIFsKLUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkaW8uaD5dLFsKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwgW1sKIAlGSUxFICpmID0gZm9wZW4oIi9kZXYvbnVsbCIsICJyIik7CiAJZmxvY2tmaWxlKGYpOwogCWdldGNfdW5sb2NrZWQoZik7CiAJZnVubG9ja2ZpbGUoZik7Ci1dLCBhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9eWVzLCBhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9bm8pXSkKK11dKV0sW2FjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD15ZXNdLFthY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9bm9dKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQpCiBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9nZXRjX3VubG9ja2VkIiA9IHllcwogdGhlbgpAQCAtMzU2Nyw4ICszODY2LDEwIEBACiAgICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgMi4xXSksICwkUkVBRExJTkVfTElCUykKIAogIyBjaGVjayBmb3IgcmVhZGxpbmUgMi4yCi1BQ19UUllfQ1BQKFsjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dLAotaGF2ZV9yZWFkbGluZT15ZXMsIGhhdmVfcmVhZGxpbmU9bm8pCitBQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dXSldLAorICBbaGF2ZV9yZWFkbGluZT15ZXNdLAorICBbaGF2ZV9yZWFkbGluZT1ub10KKykKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKIHRoZW4KICAgQUNfRUdSRVBfSEVBREVSKFtleHRlcm4gaW50IHJsX2NvbXBsZXRpb25fYXBwZW5kX2NoYXJhY3RlcjtdLApAQCAtMzU5Nyw4ICszODk4LDEwIEBACiAgICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4yXSksICwkUkVBRExJTkVfTElCUykKIAogIyBhbHNvIGluIHJlYWRsaW5lIDQuMgotQUNfVFJZX0NQUChbI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+XSwKLWhhdmVfcmVhZGxpbmU9eWVzLCBoYXZlX3JlYWRsaW5lPW5vKQorQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+XV0pXSwKKyAgW2hhdmVfcmVhZGxpbmU9eWVzXSwKKyAgW2hhdmVfcmVhZGxpbmU9bm9dCispCiBpZiB0ZXN0ICRoYXZlX3JlYWRsaW5lID0geWVzCiB0aGVuCiAgIEFDX0VHUkVQX0hFQURFUihbZXh0ZXJuIGludCBybF9jYXRjaF9zaWduYWxzO10sCkBAIC0zNjEyLDcgKzM5MTUsNyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBuaWNlKCkpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfYnJva2VuX25pY2UsIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKIGludCBtYWluKCkKIHsKIAlpbnQgdmFsMSA9IG5pY2UoMSk7CkBAIC0zNjIwLDEwICszOTIzLDEwIEBACiAJCWV4aXQoMCk7CiAJZXhpdCgxKTsKIH0KLV0sCi1hY19jdl9icm9rZW5fbmljZT15ZXMsCi1hY19jdl9icm9rZW5fbmljZT1ubywKLWFjX2N2X2Jyb2tlbl9uaWNlPW5vKV0pCitdXSldLAorW2FjX2N2X2Jyb2tlbl9uaWNlPXllc10sCitbYWNfY3ZfYnJva2VuX25pY2U9bm9dLAorW2FjX2N2X2Jyb2tlbl9uaWNlPW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnJva2VuX25pY2UpCiBpZiB0ZXN0ICIkYWNfY3ZfYnJva2VuX25pY2UiID0geWVzCiB0aGVuCkBAIC0zNjMyLDM0ICszOTM1LDI5IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBwb2xsKCkpCi1BQ19UUllfUlVOKFsKK0FDX0NBQ0hFX1ZBTChhY19jdl9icm9rZW5fcG9sbCwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8cG9sbC5oPgogCi1pbnQgbWFpbiAodm9pZCkKLSAgICB7CitpbnQgbWFpbigpCit7CiAgICAgc3RydWN0IHBvbGxmZCBwb2xsX3N0cnVjdCA9IHsgNDIsIFBPTExJTnxQT0xMUFJJfFBPTExPVVQsIDAgfTsKLSAgICAKKyAgICBpbnQgcG9sbF90ZXN0OworCiAgICAgY2xvc2UgKDQyKTsKIAotICAgIGludCBwb2xsX3Rlc3QgPSBwb2xsICgmcG9sbF9zdHJ1Y3QsIDEsIDApOwotCisgICAgcG9sbF90ZXN0ID0gcG9sbCgmcG9sbF9zdHJ1Y3QsIDEsIDApOwogICAgIGlmIChwb2xsX3Rlc3QgPCAwKQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZSBpZiAocG9sbF90ZXN0ID09IDAgJiYgcG9sbF9zdHJ1Y3QucmV2ZW50cyAhPSBQT0xMTlZBTCkKLSAgICAgICAgewotICAgICAgICBleGl0KDApOwotICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotXSwKLWFjX2N2X2Jyb2tlbl9wb2xsPXllcywKLWFjX2N2X2Jyb2tlbl9wb2xsPW5vLAotYWNfY3ZfYnJva2VuX3BvbGw9bm8pCisgICAgICAgIHJldHVybiAxOworfQorXV0pXSwKK1thY19jdl9icm9rZW5fcG9sbD15ZXNdLAorW2FjX2N2X2Jyb2tlbl9wb2xsPW5vXSwKK1thY19jdl9icm9rZW5fcG9sbD1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnJva2VuX3BvbGwpCiBpZiB0ZXN0ICIkYWNfY3ZfYnJva2VuX3BvbGwiID0geWVzCiB0aGVuCkBAIC0zNjc1LDcgKzM5NzMsNyBAQAogIyBjaGVjayB0enNldCgzKSBleGlzdHMgYW5kIHdvcmtzIGxpa2Ugd2UgZXhwZWN0IGl0IHRvCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHdvcmtpbmcgdHpzZXQoKSkKIEFDX0NBQ0hFX1ZBTChhY19jdl93b3JraW5nX3R6c2V0LCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzczOCwxMCArNDAzNiwxMCBAQAogCiAJZXhpdCgwKTsKIH0KLV0sCi1hY19jdl93b3JraW5nX3R6c2V0PXllcywKLWFjX2N2X3dvcmtpbmdfdHpzZXQ9bm8sCi1hY19jdl93b3JraW5nX3R6c2V0PW5vKV0pCitdXSldLAorW2FjX2N2X3dvcmtpbmdfdHpzZXQ9eWVzXSwKK1thY19jdl93b3JraW5nX3R6c2V0PW5vXSwKK1thY19jdl93b3JraW5nX3R6c2V0PW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfd29ya2luZ190enNldCkKIGlmIHRlc3QgIiRhY19jdl93b3JraW5nX3R6c2V0IiA9IHllcwogdGhlbgpAQCAtMzc1MiwxMyArNDA1MCwxMiBAQAogIyBMb29rIGZvciBzdWJzZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdAogQUNfTVNHX0NIRUNLSU5HKGZvciB0dl9uc2VjIGluIHN0cnVjdCBzdGF0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0YXRfdHZfbnNlYywKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XV0sIFtbCiBzdHJ1Y3Qgc3RhdCBzdDsKIHN0LnN0X210aW0udHZfbnNlYyA9IDE7Ci1dLAotYWNfY3Zfc3RhdF90dl9uc2VjPXllcywKLWFjX2N2X3N0YXRfdHZfbnNlYz1ubywKLWFjX2N2X3N0YXRfdHZfbnNlYz1ubykpCitdXSldLAorW2FjX2N2X3N0YXRfdHZfbnNlYz15ZXNdLAorW2FjX2N2X3N0YXRfdHZfbnNlYz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RhdF90dl9uc2VjKQogaWYgdGVzdCAiJGFjX2N2X3N0YXRfdHZfbnNlYyIgPSB5ZXMKIHRoZW4KQEAgLTM3NjksMTMgKzQwNjYsMTIgQEAKICMgTG9vayBmb3IgQlNEIHN0eWxlIHN1YnNlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR2X25zZWMyIGluIHN0cnVjdCBzdGF0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0YXRfdHZfbnNlYzIsCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc3RhdC5oPl1dLCBbWwogc3RydWN0IHN0YXQgc3Q7CiBzdC5zdF9tdGltZXNwZWMudHZfbnNlYyA9IDE7Ci1dLAotYWNfY3Zfc3RhdF90dl9uc2VjMj15ZXMsCi1hY19jdl9zdGF0X3R2X25zZWMyPW5vLAotYWNfY3Zfc3RhdF90dl9uc2VjMj1ubykpCitdXSldLAorW2FjX2N2X3N0YXRfdHZfbnNlYzI9eWVzXSwKK1thY19jdl9zdGF0X3R2X25zZWMyPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9zdGF0X3R2X25zZWMyKQogaWYgdGVzdCAiJGFjX2N2X3N0YXRfdHZfbnNlYzIiID0geWVzCiB0aGVuCkBAIC0zNzg2LDEyICs0MDgyLDEyIEBACiAjIE9uIEhQL1VYIDExLjAsIG12d2RlbGNoIGlzIGEgYmxvY2sgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24pCiBBQ19DQUNIRV9WQUwoYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbiwKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxjdXJzZXMuaD5dXSwgW1sKICAgaW50IHJ0bjsKICAgcnRuID0gbXZ3ZGVsY2goMCwwLDApOwotXSwgYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj15ZXMsCi0gICBhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPW5vLAotICAgYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj15ZXMpKQorXV0pXSwKK1thY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPXllc10sCitbYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbikKIAogaWYgdGVzdCAiJGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24iID0geWVzCkBAIC0zODAyLDEyICs0MDk4LDEyIEBACiAKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIFdJTkRPVyBoYXMgX2ZsYWdzKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3dpbmRvd19oYXNfZmxhZ3MsCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGN1cnNlcy5oPl0sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbCiAgIFdJTkRPVyAqdzsKICAgdy0+X2ZsYWdzID0gMDsKLV0sIGFjX2N2X3dpbmRvd19oYXNfZmxhZ3M9eWVzLAotICAgYWNfY3Zfd2luZG93X2hhc19mbGFncz1ubywKLSAgIGFjX2N2X3dpbmRvd19oYXNfZmxhZ3M9bm8pKQorXV0pXSwKK1thY19jdl93aW5kb3dfaGFzX2ZsYWdzPXllc10sCitbYWNfY3Zfd2luZG93X2hhc19mbGFncz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfd2luZG93X2hhc19mbGFncykKIAogCkBAIC0zODE4LDI0ICs0MTE0LDI0IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlzX3Rlcm1fcmVzaXplZCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgdm9pZCAqeD1pc190ZXJtX3Jlc2l6ZWQsCi0gIEFDX0RFRklORShIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2lzX3Rlcm1fcmVzaXplZCcgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGN1cnNlcy5oPl1dLCBbW3ZvaWQgKng9aXNfdGVybV9yZXNpemVkXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2lzX3Rlcm1fcmVzaXplZCcgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHJlc2l6ZV90ZXJtKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjdXJzZXMuaD5dLCB2b2lkICp4PXJlc2l6ZV90ZXJtLAotICBBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Jlc2l6ZV90ZXJtJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbdm9pZCAqeD1yZXNpemVfdGVybV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Jlc2l6ZV90ZXJtJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubyldCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgcmVzaXpldGVybSkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgdm9pZCAqeD1yZXNpemV0ZXJtLAotICBBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGN1cnNlcy5oPl1dLCBbW3ZvaWQgKng9cmVzaXpldGVybV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRteCkKQEAgLTM4NjAsOCArNDE1Niw2MyBAQAogICBBQ19NU0dfUkVTVUxUKG5vKQogZmkKIAotQUNfTVNHX0NIRUNLSU5HKGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQpCi1BQ19UUllfUlVOKFsjaW5jbHVkZSA8c3RkaW8uaD4KK2lmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMKK3RoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKGZvciAlbGxkIGFuZCAlbGx1IHByaW50ZigpIGZvcm1hdCBzdXBwb3J0KQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0LAorICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorCisgICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgI2VuZGlmCisKKyAgaW50IG1haW4oKQorICB7CisgICAgICBjaGFyIGJ1ZmZlclsyNTZdOworCisgICAgICBpZiAoc3ByaW50ZihidWZmZXIsICIlbGxkIiwgKGxvbmcgbG9uZykxMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbGQiLCAobG9uZyBsb25nKS0xMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiLTEyMyIpKQorICAgICAgICAgIHJldHVybiAxOworCisgICAgICBpZiAoc3ByaW50ZihidWZmZXIsICIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykxMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIHJldHVybiAwOworICB9CisgIF1dXSldLAorICBbYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllc10sCisgIFthY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm9dLAorICBbYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PW5vXSkKKyAgKQorICBBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQpCitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0IiA9IHllcwordGhlbgorICBBQ19ERUZJTkUoUFlfRk9STUFUX0xPTkdfTE9ORywgImxsIiwKKyAgW0RlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBsb25nIGxvbmcgdHlwZV0pCitmaQorCitpZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCit0aGVuCisJTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKK2ZpCisKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnRdLCBhY19jdl9oYXZlX3NpemVfdF9mb3JtYXQsIFtkbmwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIApAQCAtMzg5NCwxNCArNDI0NSwyMCBAQAogCXJldHVybiAxOwogCiAgICAgcmV0dXJuIDA7Ci19XSwKLVtBQ19NU0dfUkVTVUxUKHllcykKLSBBQ19ERUZJTkUoUFlfRk9STUFUX1NJWkVfVCwgInoiLCBbRGVmaW5lIHRvIHByaW50ZiBmb3JtYXQgbW9kaWZpZXIgZm9yIFB5X3NzaXplX3RdKV0sCi0gQUNfTVNHX1JFU1VMVChubykpCit9CitdXSldLAorW2FjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD15ZXNdLAorW2FjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD1ub10sCitbYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PSJjcm9zcyAtLSBhc3N1bWluZyB5ZXMiCitdKV0pCitpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0IiAhPSBubyA7IHRoZW4KKyAgQUNfREVGSU5FKFBZX0ZPUk1BVF9TSVpFX1QsICJ6IiwKKyAgW0RlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBQeV9zc2l6ZV90XSkKK2ZpCiAKIEFDX0NIRUNLX1RZUEUoc29ja2xlbl90LCwKICAgQUNfREVGSU5FKHNvY2tsZW5fdCxpbnQsCi0gICAgICAgICAgICBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy9zb2NrZXQuaD4gZG9lcyBub3QgZGVmaW5lLiksWworICAgICAgICAgICAgW0RlZmluZSB0byBgaW50JyBpZiA8c3lzL3NvY2tldC5oPiBkb2VzIG5vdCBkZWZpbmUuXSksWwogI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgpAQCAtMzkxMCw2ICs0MjY3LDEyIEBACiAjZW5kaWYKIF0pCiAKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KK0FJWCopCisgIEFDX0RFRklORShIQVZFX0JST0tFTl9QSVBFX0JVRiwgMSwgW0RlZmluZSBpZiB0aGUgc3lzdGVtIHJlcG9ydHMgYW4gaW52YWxpZCBQSVBFX0JVRiB2YWx1ZS5dKSA7OworZXNhYworCisKIEFDX1NVQlNUKFRIUkVBREhFQURFUlMpCiAKIGZvciBoIGluIGAoY2QgJHNyY2RpcjtlY2hvIFB5dGhvbi90aHJlYWRfKi5oKWAKQEAgLTM5MTcsMTMgKzQyODAsNiBAQAogICBUSFJFQURIRUFERVJTPSIkVEhSRUFESEVBREVSUyBcJChzcmNkaXIpLyRoIgogZG9uZQogCi1pZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCi10aGVuCi0JTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKLWZpCi0KLQotCiBBQ19TVUJTVChTUkNESVJTKQogU1JDRElSUz0iUGFyc2VyIEdyYW1tYXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNYWMiCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJ1aWxkIGRpcmVjdG9yaWVzKQpAQCAtMzkzNSw3ICs0MjkxLDggQEAKIEFDX01TR19SRVNVTFQoZG9uZSkKIAogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjKQorQUNfQ09ORklHX0ZJTEVTKFtNb2R1bGVzL2xkX3NvX2FpeF0sIFtjaG1vZCAreCBNb2R1bGVzL2xkX3NvX2FpeF0pCiBBQ19PVVRQVVQKIAogZWNobyAiY3JlYXRpbmcgTW9kdWxlcy9TZXR1cCIKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IGUwNWFiNGEuLjY1YWQ3YWMgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNSw2ICs1LDkgQEAKICNkZWZpbmUgUHlfUFlDT05GSUdfSAogCiAKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKwogLyogRGVmaW5lIGZvciBBSVggaWYgeW91ciBjb21waWxlciBpcyBhIGdlbnVpbmUgSUJNIHhsQy94bENfciBhbmQgeW91IHdhbnQKICAgIHN1cHBvcnQgZm9yIEFJWCBDKysgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzLiAqLwogI3VuZGVmIEFJWF9HRU5VSU5FX0NQTFVTUExVUwpAQCAtMTgsOSArMjEsMjQgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgTWFjaCBjdGhyZWFkcyBwYWNrYWdlICovCiAjdW5kZWYgQ19USFJFQURTCiAKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgaW4gQVJNCisgICBtaXhlZC1lbmRpYW4gb3JkZXIgKGJ5dGUgb3JkZXIgNDU2NzAxMjMpICovCisjdW5kZWYgRE9VQkxFX0lTX0FSTV9NSVhFRF9FTkRJQU5fSUVFRTc1NAorCisvKiBEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1iaXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KKyN1bmRlZiBET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0CisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgd2l0aCB0aGUKKyAgIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKi8KKyN1bmRlZiBET1VCTEVfSVNfTElUVExFX0VORElBTl9JRUVFNzU0CisKIC8qIERlZmluZSBpZiAtLWVuYWJsZS1pcHY2IGlzIHNwZWNpZmllZCAqLwogI3VuZGVmIEVOQUJMRV9JUFY2CiAKKy8qIERlZmluZSBpZiBmbG9jayBuZWVkcyB0byBiZSBsaW5rZWQgd2l0aCBic2QgbGlicmFyeS4gKi8KKyN1bmRlZiBGTE9DS19ORUVEU19MSUJCU0QKKwogLyogRGVmaW5lIGlmIGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLiAqLwogI3VuZGVmIEdFVFBHUlBfSEFWRV9BUkcKIApAQCAtNjQsNiArODIsOSBAQAogLyogRGVmaW5lIGlmIG5pY2UoKSByZXR1cm5zIHN1Y2Nlc3MvZmFpbHVyZSBpbnN0ZWFkIG9mIHRoZSBuZXcgcHJpb3JpdHkuICovCiAjdW5kZWYgSEFWRV9CUk9LRU5fTklDRQogCisvKiBEZWZpbmUgaWYgdGhlIHN5c3RlbSByZXBvcnRzIGFuIGludmFsaWQgUElQRV9CVUYgdmFsdWUuICovCisjdW5kZWYgSEFWRV9CUk9LRU5fUElQRV9CVUYKKwogLyogRGVmaW5lIGlmIHBvbGwoKSBzZXRzIGVycm5vIG9uIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycy4gKi8KICN1bmRlZiBIQVZFX0JST0tFTl9QT0xMCiAKQEAgLTczLDYgKzk0LDkgQEAKIC8qIERlZmluZSBpZiBwdGhyZWFkX3NpZ21hc2soKSBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtLiAqLwogI3VuZGVmIEhBVkVfQlJPS0VOX1BUSFJFQURfU0lHTUFTSwogCisvKiBkZWZpbmUgdG8gMSBpZiB5b3VyIHNlbV9nZXR2YWx1ZSBpcyBicm9rZW4uICovCisjdW5kZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZBTFVFCisKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIF9Cb29sLiAqLwogI3VuZGVmIEhBVkVfQzk5X0JPT0wKIApAQCAtMTYyLDYgKzE4NiwxMiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4gKi8KICN1bmRlZiBIQVZFX0VQT0xMCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXJmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VSRgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVyZmMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRVJGQworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRVJSTk9fSAogCkBAIC0xODksNyArMjE5LDcgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0ZJTklURQogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmbG9jaycgZnVuY3Rpb24uICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZsb2NrJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0ZMT0NLCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCkBAIC0yMjgsNiArMjU4LDEzIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdhaV9zdHJlcnJvcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HQUlfU1RSRVJST1IKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYW1tYScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HQU1NQQorCisvKiBEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkCisgICAqLworI3VuZGVmIEhBVkVfR0NDX0FTTV9GT1JfWDg3CisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTwogCkBAIC0yODgsNiArMzI1LDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3ZW50JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVFBXRU5UCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmVzZ2lkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJFU0dJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJlc3VpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRSRVNVSUQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRzaWQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUU0lECiAKQEAgLTMyMSw2ICszNjQsOSBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9wdG9uJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0lORVRfUFRPTgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluaXRncm91cHMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfSU5JVEdST1VQUworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAogCkBAIC0zNTQsNiArNDAwLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNob3duJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0xDSE9XTgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxnYW1tYScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MR0FNTUEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCiAjdW5kZWYgSEFWRV9MSUJETAogCkBAIC01MDQsOSArNTUzLDI0IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4wICovCiAjdW5kZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJvdW5kJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JPVU5ECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VsZWN0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NFTEVDVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRU1fR0VUVkFMVUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fb3BlbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRU1fT1BFTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV90aW1lZHdhaXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VNX1RJTUVEV0FJVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV91bmxpbmsnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VNX1VOTElOSworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGVnaWQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VURUdJRAogCkBAIC01MzQsNiArNTk4LDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlZ2lkJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NFVFJFR0lECiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzZ2lkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NFVFJFU0dJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlc3VpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRSRVNVSUQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXVpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TRVRSRVVJRAogCkBAIC01NzMsNiArNjQzLDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NvY2tldHBhaXInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU09DS0VUUEFJUgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNwYXduLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1BBV05fSAorCiAvKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBzc2l6ZV90ICovCiAjdW5kZWYgSEFWRV9TU0laRV9UCiAKQEAgLTYxMCwyNSArNjgzLDI1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TVFJPUFRTX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgYHN0X2JpcnRodGltZScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmlydGh0aW1lJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FCiAKLS8qIERlZmluZSB0byAxIGlmIGBzdF9ibGtzaXplJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBzdF9ibGtzaXplJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRQogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmxvY2tzJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBzdF9ibG9ja3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MKIAotLyogRGVmaW5lIHRvIDEgaWYgYHN0X2ZsYWdzJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBzdF9mbGFncycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTCiAKLS8qIERlZmluZSB0byAxIGlmIGBzdF9nZW4nIGlzIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2dlbicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0dFTgogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc3RfcmRldicgaXMgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfcmRldicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0Jy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYKIAotLyogRGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHRtJy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGB0bV96b25lJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHRtJy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9UTV9UTV9aT05FCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdXIgYHN0cnVjdCBzdGF0JyBoYXMgYHN0X2Jsb2NrcycuIERlcHJlY2F0ZWQsIHVzZQpAQCAtNzM2LDYgKzgwOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm0uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9URVJNX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0Z2FtbWEnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVEdBTU1BCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGhyZWFkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVEhSRUFEX0gKIApAQCAtNzg1LDYgKzg2MSw5IEBACiAgICBJbmNsdWRlL3VuaWNvZGVvYmplY3QuaCkuICovCiAjdW5kZWYgSEFWRV9VU0FCTEVfV0NIQVJfVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV0aWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVElMX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZXMnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfVVRJTUVTCiAKQEAgLTg0NSwxMiArOTI0LDI0IEBACiAvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCiAjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCiAKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKwogLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KICN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KIAorLyogRGVmaW5lIGlmIFBPU0lYIHNlbWFwaG9yZXMgYXJlbid0IGVuYWJsZWQgb24geW91ciBzeXN0ZW0gKi8KKyN1bmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVECisKIC8qIERlZmluZWQgaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gc3VwcG9ydGVkLiAqLwogI3VuZGVmIFBUSFJFQURfU1lTVEVNX1NDSEVEX1NVUFBPUlRFRAogCisvKiBEZWZpbmUgYXMgdGhlIHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHMgKi8KKyN1bmRlZiBQWUxPTkdfQklUU19JTl9ESUdJVAorCisvKiBEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgbG9uZyBsb25nIHR5cGUgKi8KKyN1bmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCisKIC8qIERlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBQeV9zc2l6ZV90ICovCiAjdW5kZWYgUFlfRk9STUFUX1NJWkVfVAogCkBAIC04NjksNyArOTYwLDcgQEAKIC8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBoYXZlIGEgVW5pY29kZSB0eXBlLiAqLwogI3VuZGVmIFB5X1VTSU5HX1VOSUNPREUKIAotLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisvKiBhc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWQgKi8KICN1bmRlZiBSRVRTSUdUWVBFCiAKIC8qIERlZmluZSBpZiBzZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgc2V0cGdycCgwLCAwKS4gKi8KQEAgLTkwMiwxMyArOTkzLDEzIEBACiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9MT05HX0xPTkcKIAotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiBvZmZfdC4gKi8KKy8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfT0ZGX1QKIAogLyogVGhlIHNpemUgb2YgYHBpZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9QSURfVAogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgcHRocmVhZF90LiAqLworLyogVGhlIHNpemUgb2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfUFRIUkVBRF9UCiAKIC8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KQEAgLTkxNyw3ICsxMDA4LDcgQEAKIC8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX1NJWkVfVAogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgdGltZV90LiAqLworLyogVGhlIHNpemUgb2YgYHRpbWVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfVElNRV9UCiAKIC8qIFRoZSBzaXplIG9mIGB1aW50cHRyX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCkBAIC05NDgsNiArMTAzOSwyOCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91ciA8c3lzL3RpbWUuaD4gZGVjbGFyZXMgYHN0cnVjdCB0bScuICovCiAjdW5kZWYgVE1fSU5fU1lTX1RJTUUKIAorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyB1bmRlZiBfQUxMX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIHVuZGVmIF9HTlVfU09VUkNFCisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5kZWYgX19FWFRFTlNJT05TX18KKyMgdW5kZWYgX19FWFRFTlNJT05TX18KKyNlbmRpZgorCisKIC8qIERlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgTWFjUHl0aG9uIG1vZHVsZXMgb24gTWFjT1NYIGluIHVuaXgtUHl0aG9uLiAqLwogI3VuZGVmIFVTRV9UT09MQk9YX09CSkVDVF9HTFVFCiAKQEAgLTk4OCwyMCArMTEwMSwyNCBAQAogLyogRGVmaW5lIHRvIHByb2ZpbGUgd2l0aCB0aGUgUGVudGl1bSB0aW1lc3RhbXAgY291bnRlciAqLwogI3VuZGVmIFdJVEhfVFNDCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKLSAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwotI3VuZGVmIFdPUkRTX0JJR0VORElBTgorLyogRGVmaW5lIGlmIHlvdSB3YW50IHB5bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCAqLworI3VuZGVmIFdJVEhfVkFMR1JJTkQKKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmCiAKIC8qIERlZmluZSBpZiBhcml0aG1ldGljIGlzIHN1YmplY3QgdG8geDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZyBpc3N1ZSAqLwogI3VuZGVmIFg4N19ET1VCTEVfUk9VTkRJTkcKIAotLyogRGVmaW5lIHRvIDEgaWYgb24gQUlYIDMuCi0gICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCi0gICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCi0jaWZuZGVmIF9BTExfU09VUkNFCi0jIHVuZGVmIF9BTExfU09VUkNFCi0jZW5kaWYKLQogLyogRGVmaW5lIG9uIE9wZW5CU0QgdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkgZmVhdHVyZXMgKi8KICN1bmRlZiBfQlNEX1NPVVJDRQogCkBAIC0xMDIwLDIxICsxMTM3LDQxIEBACiAvKiBUaGlzIG11c3QgYmUgZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydC4gKi8KICN1bmRlZiBfTEFSR0VGSUxFX1NPVVJDRQogCisvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8KKyN1bmRlZiBfTUlOSVgKKwogLyogRGVmaW5lIG9uIE5ldEJTRCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJlcyAqLwogI3VuZGVmIF9ORVRCU0RfU09VUkNFCiAKIC8qIERlZmluZSBfT1NGX1NPVVJDRSB0byBnZXQgdGhlIG1ha2VkZXYgbWFjcm8uICovCiAjdW5kZWYgX09TRl9TT1VSQ0UKIAorLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKyN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UKKwogLyogRGVmaW5lIHRvIGFjdGl2YXRlIGZlYXR1cmVzIGZyb20gSUVFRSBTdGRzIDEwMDMuMS0yMDAxICovCiAjdW5kZWYgX1BPU0lYX0NfU09VUkNFCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBuZWVkIHRvIGluIG9yZGVyIGZvciBgc3RhdCcgYW5kIG90aGVyIHRoaW5ncyB0byB3b3JrLiAqLworI3VuZGVmIF9QT1NJWF9TT1VSQ0UKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMsIGFuZCB5b3VyIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgdGhhdC4gKi8KICN1bmRlZiBfUE9TSVhfVEhSRUFEUwogCiAvKiBEZWZpbmUgdG8gZm9yY2UgdXNlIG9mIHRocmVhZC1zYWZlIGVycm5vLCBoX2Vycm5vLCBhbmQgb3RoZXIgZnVuY3Rpb25zICovCiAjdW5kZWYgX1JFRU5UUkFOVAogCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQzMl90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI3VuZGVmIF9VSU5UMzJfVAorCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQ2NF90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI3VuZGVmIF9VSU5UNjRfVAorCiAvKiBEZWZpbmUgdG8gdGhlIGxldmVsIG9mIFgvT3BlbiB0aGF0IHlvdXIgc3lzdGVtIHN1cHBvcnRzICovCiAjdW5kZWYgX1hPUEVOX1NPVVJDRQogCkBAIC0xMDYxLDYgKzExOTgsMTQgQEAKIC8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLwogI3VuZGVmIGdpZF90CiAKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludDMyX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50NjRfdAorCiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCiAjdW5kZWYgbW9kZV90CiAKQEAgLTEwODIsNiArMTIyNywxNCBAQAogLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCiAjdW5kZWYgdWlkX3QKIAorLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDMyIGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDMyX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDY0X3QKKwogLyogRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuICovCiAjdW5kZWYgdm9sYXRpbGUKIApkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQppbmRleCA0ZmUxZjQ1Li5mOTQ3NDc4IDEwMDY0NAotLS0gYS9zZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtNiw5ICs2LDkgQEAKIGltcG9ydCBzeXMsIG9zLCBpbXAsIHJlLCBvcHRwYXJzZQogZnJvbSBnbG9iIGltcG9ydCBnbG9iCiBmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lIGFzIHBsYXRmb3JtX21hY2hpbmUKK2ltcG9ydCBzeXNjb25maWcKIAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHRleHRfZmlsZQogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBFeHRlbnNpb24sIHNldHVwCkBAIC0xNyw2ICsxNyw5IEBACiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliIGltcG9ydCBpbnN0YWxsX2xpYgogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQogCisjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPworQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKKwogIyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBkaXNhYmxlZC4KIGRpc2FibGVkX21vZHVsZV9saXN0ID0gW10KIApAQCAtMTY0LDczICsxNjcsNjAgQEAKICAgICAgICAgaWYgbm90IHNyY2RpcjoKICAgICAgICAgICAgICMgTWF5YmUgcnVubmluZyBvbiBXaW5kb3dzIGJ1dCBub3QgdXNpbmcgQ1lHV0lOPwogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gc291cmNlIGRpcmVjdG9yeTsgY2Fubm90IHByb2NlZWQuIikKLQotICAgICAgICAjIEZpZ3VyZSBvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMKLSAgICAgICAgIyAoVGhpcyBsb2dpYyBpcyBjb3BpZWQgaW4gZGlzdHV0aWxzLnRlc3QudGVzdF9zeXNjb25maWcsCi0gICAgICAgICMgc28gYnVpbGRpbmcgaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkgZG9lcyBub3QgYnJlYWsgdGVzdF9kaXN0dXRpbHMuKQotICAgICAgICBtb2RkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnKQotICAgICAgICBtb2RkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKG1vZGRpcikKLSAgICAgICAgc3JjZGlyLCB0YWlsID0gb3MucGF0aC5zcGxpdChtb2RkaXIpCi0gICAgICAgIHNyY2RpciA9IG9zLnBhdGgubm9ybXBhdGgoc3JjZGlyKQotICAgICAgICBtb2RkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKG1vZGRpcikKLQotICAgICAgICBtb2RkaXJsaXN0ID0gW21vZGRpcl0KLSAgICAgICAgaW5jZGlybGlzdCA9IFsnLi9JbmNsdWRlJ10KKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKHNyY2RpcikKKyAgICAgICAgbW9kZGlybGlzdCA9IFtvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTW9kdWxlcycpXQogCiAgICAgICAgICMgUGxhdGZvcm0tZGVwZW5kZW50IG1vZHVsZSBzb3VyY2UgYW5kIGluY2x1ZGUgZGlyZWN0b3JpZXMKKyAgICAgICAgaW5jZGlybGlzdCA9IFtdCiAgICAgICAgIHBsYXRmb3JtID0gc2VsZi5nZXRfcGxhdGZvcm0oKQotICAgICAgICBpZiBwbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdtYWMnKSBhbmQgKCItLWRpc2FibGUtdG9vbGJveC1nbHVlIiBub3QgaW4KKyAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICgiLS1kaXNhYmxlLXRvb2xib3gtZ2x1ZSIgbm90IGluCiAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNPTkZJR19BUkdTIikpOgogICAgICAgICAgICAgIyBNYWMgT1MgWCBhbHNvIGluY2x1ZGVzIHNvbWUgbWFjLXNwZWNpZmljIG1vZHVsZXMKLSAgICAgICAgICAgIG1hY21vZGRpciA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTWFjL01vZHVsZXMnKQorICAgICAgICAgICAgbWFjbW9kZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ01hYy9Nb2R1bGVzJykKICAgICAgICAgICAgIG1vZGRpcmxpc3QuYXBwZW5kKG1hY21vZGRpcikKLSAgICAgICAgICAgIGluY2Rpcmxpc3QuYXBwZW5kKCcuL01hYy9JbmNsdWRlJykKLQotICAgICAgICBhbGxkaXJsaXN0ID0gbW9kZGlybGlzdCArIGluY2Rpcmxpc3QKKyAgICAgICAgICAgIGluY2Rpcmxpc3QuYXBwZW5kKG9zLnBhdGguam9pbihzcmNkaXIsICdNYWMvSW5jbHVkZScpKQogCiAgICAgICAgICMgRml4IHVwIHRoZSBwYXRocyBmb3Igc2NyaXB0cywgdG9vCiAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLnNjcmlwdHMgPSBbb3MucGF0aC5qb2luKHNyY2RpciwgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZGlzdHJpYnV0aW9uLnNjcmlwdHNdCiAKICAgICAgICAgIyBQeXRob24gaGVhZGVyIGZpbGVzCi0gICAgICAgIGhlYWRlcnMgPSBnbG9iKCJJbmNsdWRlLyouaCIpICsgWyJweWNvbmZpZy5oIl0KLQorICAgICAgICBoZWFkZXJzID0gW3N5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKV0KKyAgICAgICAgaGVhZGVycyArPSBnbG9iKG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJyksICIqLmgiKSkKICAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnNbOl06CiAgICAgICAgICAgICBleHQuc291cmNlcyA9IFsgZmluZF9tb2R1bGVfZmlsZShmaWxlbmFtZSwgbW9kZGlybGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZXh0LnNvdXJjZXMgXQogICAgICAgICAgICAgaWYgZXh0LmRlcGVuZHMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZXh0LmRlcGVuZHMgPSBbZmluZF9tb2R1bGVfZmlsZShmaWxlbmFtZSwgYWxsZGlybGlzdCkKKyAgICAgICAgICAgICAgICBleHQuZGVwZW5kcyA9IFtmaW5kX21vZHVsZV9maWxlKGZpbGVuYW1lLCBtb2RkaXJsaXN0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBleHQuZGVwZW5kc10KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZXh0LmRlcGVuZHMgPSBbXQogICAgICAgICAgICAgIyByZS1jb21waWxlIGV4dGVuc2lvbnMgaWYgYSBoZWFkZXIgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkCiAgICAgICAgICAgICBleHQuZGVwZW5kcy5leHRlbmQoaGVhZGVycykKIAotICAgICAgICAgICAgZXh0LmluY2x1ZGVfZGlycy5hcHBlbmQoICcuJyApICMgdG8gZ2V0IGNvbmZpZy5oCi0gICAgICAgICAgICBmb3IgaW5jZGlyIGluIGluY2Rpcmxpc3Q6Ci0gICAgICAgICAgICAgICAgZXh0LmluY2x1ZGVfZGlycy5hcHBlbmQoIG9zLnBhdGguam9pbihzcmNkaXIsIGluY2RpcikgKQorICAgICAgICAgICAgIyBwbGF0Zm9ybSBzcGVjaWZpYyBpbmNsdWRlIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmV4dGVuZChpbmNkaXJsaXN0KQogCiAgICAgICAgICAgICAjIElmIGEgbW9kdWxlIGhhcyBhbHJlYWR5IGJlZW4gYnVpbHQgc3RhdGljYWxseSwKICAgICAgICAgICAgICMgZG9uJ3QgYnVpbGQgaXQgaGVyZQogICAgICAgICAgICAgaWYgZXh0Lm5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5yZW1vdmUoZXh0KQogCi0gICAgICAgIGlmIHBsYXRmb3JtICE9ICdtYWMnOgotICAgICAgICAgICAgIyBQYXJzZSBNb2R1bGVzL1NldHVwIGFuZCBNb2R1bGVzL1NldHVwLmxvY2FsIHRvIGZpZ3VyZSBvdXQgd2hpY2gKLSAgICAgICAgICAgICMgbW9kdWxlcyBhcmUgdHVybmVkIG9uIGluIHRoZSBmaWxlLgotICAgICAgICAgICAgcmVtb3ZlX21vZHVsZXMgPSBbXQotICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluICgnTW9kdWxlcy9TZXR1cCcsICdNb2R1bGVzL1NldHVwLmxvY2FsJyk6Ci0gICAgICAgICAgICAgICAgaW5wdXQgPSB0ZXh0X2ZpbGUuVGV4dEZpbGUoZmlsZW5hbWUsIGpvaW5fbGluZXM9MSkKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVfbW9kdWxlcy5hcHBlbmQobGluZVswXSkKLSAgICAgICAgICAgICAgICBpbnB1dC5jbG9zZSgpCisgICAgICAgICMgUGFyc2UgTW9kdWxlcy9TZXR1cCBhbmQgTW9kdWxlcy9TZXR1cC5sb2NhbCB0byBmaWd1cmUgb3V0IHdoaWNoCisgICAgICAgICMgbW9kdWxlcyBhcmUgdHVybmVkIG9uIGluIHRoZSBmaWxlLgorICAgICAgICByZW1vdmVfbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiAoJ01vZHVsZXMvU2V0dXAnLCAnTW9kdWxlcy9TZXR1cC5sb2NhbCcpOgorICAgICAgICAgICAgaW5wdXQgPSB0ZXh0X2ZpbGUuVGV4dEZpbGUoZmlsZW5hbWUsIGpvaW5fbGluZXM9MSkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgbGluZSA9IGlucHV0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcmVtb3ZlX21vZHVsZXMuYXBwZW5kKGxpbmVbMF0pCisgICAgICAgICAgICBpbnB1dC5jbG9zZSgpCiAKLSAgICAgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zWzpdOgotICAgICAgICAgICAgICAgIGlmIGV4dC5uYW1lIGluIHJlbW92ZV9tb2R1bGVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnMucmVtb3ZlKGV4dCkKKyAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnNbOl06CisgICAgICAgICAgICBpZiBleHQubmFtZSBpbiByZW1vdmVfbW9kdWxlczoKKyAgICAgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnMucmVtb3ZlKGV4dCkKIAogICAgICAgICAjIFdoZW4geW91IHJ1biAibWFrZSBDQz1hbHRjYyIgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSByZWFsbHkgd2FudAogICAgICAgICAjIHRob3NlIGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgaW50byB0aGUgc2V0dXAucHkgcGhhc2UuICBIZXJlJ3MKQEAgLTI2MSw3ICsyNTEsOCBAQAogCiAgICAgICAgIGlmIG1pc3Npbmc6CiAgICAgICAgICAgICBwcmludAotICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBtb2R1bGVzOiIKKyAgICAgICAgICAgIHByaW50ICgiUHl0aG9uIGJ1aWxkIGZpbmlzaGVkLCBidXQgdGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkICIKKyAgICAgICAgICAgICAgICAgICAidGhlc2UgbW9kdWxlcyB3ZXJlIG5vdCBmb3VuZDoiKQogICAgICAgICAgICAgcHJpbnRfdGhyZWVfY29sdW1uKG1pc3NpbmcpCiAgICAgICAgICAgICBwcmludCAoIlRvIGZpbmQgdGhlIG5lY2Vzc2FyeSBiaXRzLCBsb29rIGluIHNldHVwLnB5IGluIgogICAgICAgICAgICAgICAgICAgICIgZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuIikKQEAgLTM5Myw3ICszODQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgogICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCiAKLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3Vzcic6CisgICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKyAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQogICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCiAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCkBAIC00MTksNyArNDE1LDcgQEAKICAgICAgICAgY29uZmlnX2hfdmFycyA9IHN5c2NvbmZpZy5wYXJzZV9jb25maWdfaChvcGVuKGNvbmZpZ19oKSkKIAogICAgICAgICBwbGF0Zm9ybSA9IHNlbGYuZ2V0X3BsYXRmb3JtKCkKLSAgICAgICAgKHNyY2RpciwpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnc3JjZGlyJykKKyAgICAgICAgc3JjZGlyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKQogCiAgICAgICAgICMgQ2hlY2sgZm9yIEF0aGVPUyB3aGljaCBoYXMgbGlicmFyaWVzIGluIG5vbi1zdGFuZGFyZCBsb2NhdGlvbnMKICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ2F0aGVvcyc6CkBAIC00NTEsNyArNDQ3LDcgQEAKIAogICAgICAgICAjIENoZWNrIGZvciBNYWNPUyBYLCB3aGljaCBkb2Vzbid0IG5lZWQgbGlibS5hIGF0IGFsbAogICAgICAgICBtYXRoX2xpYnMgPSBbJ20nXQotICAgICAgICBpZiBwbGF0Zm9ybSBpbiBbJ2RhcndpbicsICdiZW9zJywgJ21hYyddOgorICAgICAgICBpZiBwbGF0Zm9ybSBpbiBbJ2RhcndpbicsICdiZW9zJ106CiAgICAgICAgICAgICBtYXRoX2xpYnMgPSBbXQogCiAgICAgICAgICMgWFhYIE9taXR0ZWQgbW9kdWxlczogZ2wsIHB1cmUsIGRsLCBTR0ktc3BlY2lmaWMgbW9kdWxlcwpAQCAtNDYyLDE2ICs0NTgsMTcgQEAKICAgICAgICAgIwogCiAgICAgICAgICMgU29tZSBtb2R1bGVzIHRoYXQgYXJlIG5vcm1hbGx5IGFsd2F5cyBvbjoKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3dlYWtyZWYnLCBbJ193ZWFrcmVmLmMnXSkgKQorICAgICAgICAjZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3dlYWtyZWYnLCBbJ193ZWFrcmVmLmMnXSkgKQogCiAgICAgICAgICMgYXJyYXkgb2JqZWN0cwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhcnJheScsIFsnYXJyYXltb2R1bGUuYyddKSApCiAgICAgICAgICMgY29tcGxleCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NtYXRoJywgWydjbWF0aG1vZHVsZS5jJ10sCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NtYXRoJywgWydjbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1tYXRoX2xpYnMpICkKLQogICAgICAgICAjIG1hdGggbGlicmFyeSBmdW5jdGlvbnMsIGUuZy4gc2luKCkKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignbWF0aCcsICBbJ21hdGhtb2R1bGUuYyddLAorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtYXRoJywgIFsnbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1tYXRoX2xpYnMpICkKICAgICAgICAgIyBmYXN0IHN0cmluZyBvcGVyYXRpb25zIGltcGxlbWVudGVkIGluIEMKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3Ryb3AnLCBbJ3N0cm9wbW9kdWxlLmMnXSkgKQpAQCAtNDk1LDEwICs0OTIsMTEgQEAKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigiX2hlYXBxIiwgWyJfaGVhcHFtb2R1bGUuYyJdKSApCiAgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdvcGVyYXRvcicsIFsnb3BlcmF0b3IuYyddKSApCi0gICAgICAgICMgUHl0aG9uIDMuMCBfZmlsZWlvIG1vZHVsZQotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCJfZmlsZWlvIiwgWyJfZmlsZWlvLmMiXSkgKQotICAgICAgICAjIFB5dGhvbiAzLjAgX2J5dGVzaW8gbW9kdWxlCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9ieXRlc2lvIiwgWyJfYnl0ZXNpby5jIl0pICkKKyAgICAgICAgIyBQeXRob24gMy4xIF9pbyBsaWJyYXJ5CisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9pbyIsCisgICAgICAgICAgICBbIl9pby9idWZmZXJlZGlvLmMiLCAiX2lvL2J5dGVzaW8uYyIsICJfaW8vZmlsZWlvLmMiLAorICAgICAgICAgICAgICJfaW8vaW9iYXNlLmMiLCAiX2lvL19pb21vZHVsZS5jIiwgIl9pby9zdHJpbmdpby5jIiwgIl9pby90ZXh0aW8uYyJdLAorICAgICAgICAgICAgIGRlcGVuZHM9WyJfaW8vX2lvbW9kdWxlLmgiXSwgaW5jbHVkZV9kaXJzPVsiTW9kdWxlcy9faW8iXSkpCiAgICAgICAgICMgX2Z1bmN0b29scwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCJfZnVuY3Rvb2xzIiwgWyJfZnVuY3Rvb2xzbW9kdWxlLmMiXSkgKQogICAgICAgICAjIF9qc29uIHNwZWVkdXBzCkBAIC01MzYsMjAgKzUzNCwyMSBAQAogICAgICAgICAjIHN1cHBvcnRlZC4uLikKIAogICAgICAgICAjIGZjbnRsKDIpIGFuZCBpb2N0bCgyKQotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdmY250bCcsIFsnZmNudGxtb2R1bGUuYyddKSApCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ21hYyddOgotICAgICAgICAgICAgIyBwd2QoMykKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3B3ZCcsIFsncHdkbW9kdWxlLmMnXSkgKQotICAgICAgICAgICAgIyBncnAoMykKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2dycCcsIFsnZ3JwbW9kdWxlLmMnXSkgKQotICAgICAgICAgICAgIyBzcHdkLCBzaGFkb3cgcGFzc3dvcmRzCi0gICAgICAgICAgICBpZiAoY29uZmlnX2hfdmFycy5nZXQoJ0hBVkVfR0VUU1BOQU0nLCBGYWxzZSkgb3IKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX2hfdmFycy5nZXQoJ0hBVkVfR0VUU1BFTlQnLCBGYWxzZSkpOgotICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Nwd2QnLCBbJ3Nwd2Rtb2R1bGUuYyddKSApCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdzcHdkJykKKyAgICAgICAgbGlicyA9IFtdCisgICAgICAgIGlmIChjb25maWdfaF92YXJzLmdldCgnRkxPQ0tfTkVFRFNfTElCQlNEJywgRmFsc2UpKToKKyAgICAgICAgICAgICMgTWF5IGJlIG5lY2Vzc2FyeSBvbiBBSVggZm9yIGZsb2NrIGZ1bmN0aW9uCisgICAgICAgICAgICBsaWJzID0gWydic2QnXQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdmY250bCcsIFsnZmNudGxtb2R1bGUuYyddLCBsaWJyYXJpZXM9bGlicykgKQorICAgICAgICAjIHB3ZCgzKQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdwd2QnLCBbJ3B3ZG1vZHVsZS5jJ10pICkKKyAgICAgICAgIyBncnAoMykKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignZ3JwJywgWydncnBtb2R1bGUuYyddKSApCisgICAgICAgICMgc3B3ZCwgc2hhZG93IHBhc3N3b3JkcworICAgICAgICBpZiAoY29uZmlnX2hfdmFycy5nZXQoJ0hBVkVfR0VUU1BOQU0nLCBGYWxzZSkgb3IKKyAgICAgICAgICAgICAgICBjb25maWdfaF92YXJzLmdldCgnSEFWRV9HRVRTUEVOVCcsIEZhbHNlKSk6CisgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzcHdkJywgWydzcHdkbW9kdWxlLmMnXSkgKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWlzc2luZy5leHRlbmQoWydwd2QnLCAnZ3JwJywgJ3Nwd2QnXSkKKyAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdzcHdkJykKIAogICAgICAgICAjIHNlbGVjdCgyKTsgbm90IG9uIGFuY2llbnQgU3lzdGVtIFYKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc2VsZWN0JywgWydzZWxlY3Rtb2R1bGUuYyddKSApCkBAIC01NjIsMTcgKzU2MSwxNCBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdjUGlja2xlJywgWydjUGlja2xlLmMnXSkgKQogCiAgICAgICAgICMgTWVtb3J5LW1hcHBlZCBmaWxlcyAoYWxzbyB3b3JrcyBvbiBXaW4zMikuCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ2F0aGVvcycsICdtYWMnXToKKyAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnYXRoZW9zJ106CiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtbWFwJywgWydtbWFwbW9kdWxlLmMnXSkgKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ21tYXAnKQogCiAgICAgICAgICMgTGFuY2UgRWxsaW5naGF1cydzIHN5c2xvZyBtb2R1bGUKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJ106Ci0gICAgICAgICAgICAjIHN5c2xvZyBkYWVtb24gaW50ZXJmYWNlCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzeXNsb2cnLCBbJ3N5c2xvZ21vZHVsZS5jJ10pICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdzeXNsb2cnKQorICAgICAgICAjIHN5c2xvZyBkYWVtb24gaW50ZXJmYWNlCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3N5c2xvZycsIFsnc3lzbG9nbW9kdWxlLmMnXSkgKQogCiAgICAgICAgICMgR2VvcmdlIE5ldmlsbGUtTmVpbCdzIHRpbWluZyBtb2R1bGU6CiAgICAgICAgICMgRGVwcmVjYXRlZCBpbiBQRVAgNCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy9wZXAtMDAwNC5odG1sCkBAIC02MjEsMTMgKzYxNyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAjIElzc3VlIDczODQ6IElmIHJlYWRsaW5lIGlzIGFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzLAogICAgICAgICAjIHVzZSB0aGUgc2FtZSBsaWJyYXJ5IGZvciB0aGUgcmVhZGxpbmUgYW5kIGN1cnNlcyBtb2R1bGVzLgotICAgICAgICAjIERpc2FibGVkIHNpbmNlIGFwcGxpY2F0aW9ucyByZWx5aW5nIG9uIG5jdXJzZXN3IG1pZ2h0IGJyZWFrLgotICAgICAgICAjCi0gICAgICAgICMgaWYgJ2N1cnNlcycgaW4gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5OgotICAgICAgICAjICAgIGN1cnNlc19saWJyYXJ5ID0gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5Ci0gICAgICAgICMgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlc3cnKToKLSAgICAgICAgIyAoLi4uKQotICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlc3cnKToKKyAgICAgICAgaWYgJ2N1cnNlcycgaW4gcmVhZGxpbmVfdGVybWNhcF9saWJyYXJ5OgorICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkKKyAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlc3cnKToKICAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXN3JwogICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzJyk6CiAgICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICduY3Vyc2VzJwpAQCAtNjYyLDggKzY1NCw4IEBACiAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgogICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKGN1cnNlc19saWJyYXJ5KQogICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVybWNhcCcpOgogICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1bJy91c3IvbGliL3Rlcm1jYXAnXSwKQEAgLTY3MiwxNiArNjY0LDEzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgncmVhZGxpbmUnKQogCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ21hYyddOgotICAgICAgICAgICAgIyBjcnlwdCBtb2R1bGUuCisgICAgICAgICMgY3J5cHQgbW9kdWxlLgogCi0gICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnY3J5cHQnKToKLSAgICAgICAgICAgICAgICBsaWJzID0gWydjcnlwdCddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpYnMgPSBbXQotICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignY3J5cHQnLCBbJ2NyeXB0bW9kdWxlLmMnXSwgbGlicmFyaWVzPWxpYnMpICkKKyAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2NyeXB0Jyk6CisgICAgICAgICAgICBsaWJzID0gWydjcnlwdCddCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnY3J5cHQnKQorICAgICAgICAgICAgbGlicyA9IFtdCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NyeXB0JywgWydjcnlwdG1vZHVsZS5jJ10sIGxpYnJhcmllcz1saWJzKSApCiAKICAgICAgICAgIyBDU1YgZmlsZXMKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX2NzdicsIFsnX2Nzdi5jJ10pICkKQEAgLTczOSwxOSArNzI4LDI0IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgIklPRXJyb3Igd2hpbGUgcmVhZGluZyBvcGVuc3Nodi5oOiIsIG1zZwogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgICAgICBtaW5fb3BlbnNzbF92ZXIgPSAweDAwOTA3MDAwCisgICAgICAgIGhhdmVfYW55X29wZW5zc2wgPSBzc2xfaW5jcyBpcyBub3QgTm9uZSBhbmQgc3NsX2xpYnMgaXMgbm90IE5vbmUKKyAgICAgICAgaGF2ZV91c2FibGVfb3BlbnNzbCA9IChoYXZlX2FueV9vcGVuc3NsIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID49IG1pbl9vcGVuc3NsX3ZlcikKIAotICAgICAgICBpZiAoc3NsX2luY3MgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgICAgICBzc2xfbGlicyBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgIG9wZW5zc2xfdmVyID49IDB4MDA5MDcwMDApOgotICAgICAgICAgICAgIyBUaGUgX2hhc2hsaWIgbW9kdWxlIHdyYXBzIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMKLSAgICAgICAgICAgICMgb2YgaGFzaCBmdW5jdGlvbnMgZnJvbSB0aGUgT3BlblNTTCBsaWJyYXJ5LgotICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX2hhc2hsaWInLCBbJ19oYXNob3BlbnNzbC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IHNzbF9pbmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMgPSBzc2xfbGlicywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gWydzc2wnLCAnY3J5cHRvJ10pICkKLSAgICAgICAgICAgICMgdGhlc2UgYXJlbid0IHN0cmljdGx5IG1pc3Npbmcgc2luY2UgdGhleSBhcmUgdW5uZWVkZWQuCi0gICAgICAgICAgICAjbWlzc2luZy5leHRlbmQoWydfc2hhJywgJ19tZDUnXSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgaWYgaGF2ZV9hbnlfb3BlbnNzbDoKKyAgICAgICAgICAgIGlmIGhhdmVfdXNhYmxlX29wZW5zc2w6CisgICAgICAgICAgICAgICAgIyBUaGUgX2hhc2hsaWIgbW9kdWxlIHdyYXBzIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgICAgICAgICAjIG9mIGhhc2ggZnVuY3Rpb25zIGZyb20gdGhlIE9wZW5TU0wgbGlicmFyeS4KKyAgICAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfaGFzaGxpYicsIFsnX2hhc2hvcGVuc3NsLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IHNzbF9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzID0gc3NsX2xpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbJ3NzbCcsICdjcnlwdG8nXSkgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAoIndhcm5pbmc6IG9wZW5zc2wgMHglMDh4IGlzIHRvbyBvbGQgZm9yIF9oYXNobGliIiAlCisgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyKQorICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfaGFzaGxpYicpCisgICAgICAgIGlmIENPTVBJTEVEX1dJVEhfUFlERUJVRyBvciBub3QgaGF2ZV91c2FibGVfb3BlbnNzbDoKICAgICAgICAgICAgICMgVGhlIF9zaGEgbW9kdWxlIGltcGxlbWVudHMgdGhlIFNIQTEgaGFzaCBhbGdvcml0aG0uCiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhJywgWydzaGFtb2R1bGUuYyddKSApCiAgICAgICAgICAgICAjIFRoZSBfbWQ1IG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUKQEAgLTc2MCw5ICs3NTQsOSBAQAogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX21kNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IFsnbWQ1bW9kdWxlLmMnLCAnbWQ1LmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzID0gWydtZDUuaCddKSApCi0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX2hhc2hsaWInKQogCi0gICAgICAgIGlmIChvcGVuc3NsX3ZlciA8IDB4MDA5MDgwMDApOgorICAgICAgICBtaW5fc2hhMl9vcGVuc3NsX3ZlciA9IDB4MDA5MDgwMDAKKyAgICAgICAgaWYgQ09NUElMRURfV0lUSF9QWURFQlVHIG9yIG9wZW5zc2xfdmVyIDwgbWluX3NoYTJfb3BlbnNzbF92ZXI6CiAgICAgICAgICAgICAjIE9wZW5TU0wgZG9lc24ndCBkbyB0aGVzZSB1bnRpbCAwLjkuOCBzbyB3ZSdsbCBicmluZyBvdXIgb3duIGhhc2gKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zaGEyNTYnLCBbJ3NoYTI1Nm1vZHVsZS5jJ10pICkKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zaGE1MTInLCBbJ3NoYTUxMm1vZHVsZS5jJ10pICkKQEAgLTc4Miw4ICs3NzYsOCBAQAogICAgICAgICAjIGEgcmVsZWFzZS4gIE1vc3Qgb3BlbiBzb3VyY2UgT1NlcyBjb21lIHdpdGggb25lIG9yIG1vcmUKICAgICAgICAgIyB2ZXJzaW9ucyBvZiBCZXJrZWxleURCIGFscmVhZHkgaW5zdGFsbGVkLgogCi0gICAgICAgIG1heF9kYl92ZXIgPSAoNCwgNykKLSAgICAgICAgbWluX2RiX3ZlciA9ICgzLCAzKQorICAgICAgICBtYXhfZGJfdmVyID0gKDQsIDgpCisgICAgICAgIG1pbl9kYl92ZXIgPSAoNCwgMSkKICAgICAgICAgZGJfc2V0dXBfZGVidWcgPSBGYWxzZSAgICMgdmVyYm9zZSBkZWJ1ZyBwcmludHMgZnJvbSB0aGlzIHNjcmlwdD8KIAogICAgICAgICBkZWYgYWxsb3dfZGJfdmVyKGRiX3Zlcik6CkBAIC0xMDYxLDYgKzEwNTUsOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzcWxpdGVfZGVmaW5lcy5hcHBlbmQoKCdNT0RVTEVfTkFNRScsICdcXCJzcWxpdGUzXFwiJykpCiAKKyAgICAgICAgICAgICMgQ29tbWVudCB0aGlzIG91dCBpZiB5b3Ugd2FudCB0aGUgc3FsaXRlMyBtb2R1bGUgdG8gYmUgYWJsZSB0byBsb2FkIGV4dGVuc2lvbnMuCisgICAgICAgICAgICBzcWxpdGVfZGVmaW5lcy5hcHBlbmQoKCJTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTiIsICIxIikpCiAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgICAgICAjIEluIGV2ZXJ5IGRpcmVjdG9yeSBvbiB0aGUgc2VhcmNoIHBhdGggc2VhcmNoIGZvciBhIGR5bmFtaWMKQEAgLTExMjAsNTMgKzExMTYsODcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdic2RkYjE4NScpCiAKKyAgICAgICAgZGJtX29yZGVyID0gWydnZGJtJ10KICAgICAgICAgIyBUaGUgc3RhbmRhcmQgVW5peCBkYm0gbW9kdWxlOgogICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydjeWd3aW4nXToKLSAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgibmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAjIFNvbWUgc3lzdGVtcyBoYXZlIC1sbmRibSwgb3RoZXJzIGRvbid0Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25kYm0nKToKLSAgICAgICAgICAgICAgICAgICAgbmRibV9saWJzID0gWyduZGJtJ10KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBuZGJtX2xpYnMgPSBbXQotICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnSEFWRV9OREJNX0gnLE5vbmUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IG5kYm1fbGlicyApICkKLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2dkYm0nKToKLSAgICAgICAgICAgICAgICBnZGJtX2xpYnMgPSBbJ2dkYm0nXQotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdnZGJtX2NvbXBhdCcpOgotICAgICAgICAgICAgICAgICAgICBnZGJtX2xpYnMuYXBwZW5kKCdnZGJtX2NvbXBhdCcpCi0gICAgICAgICAgICAgICAgaWYgZmluZF9maWxlKCJnZGJtL25kYm0uaCIsIGluY19kaXJzLCBbXSkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAnZGJtJywgWydkYm1tb2R1bGUuYyddLAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdIQVZFX0dEQk1fTkRCTV9IJyxOb25lKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMgKSApCi0gICAgICAgICAgICAgICAgZWxpZiBmaW5kX2ZpbGUoImdkYm0tbmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ0hBVkVfR0RCTV9EQVNIX05EQk1fSCcsTm9uZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gZ2RibV9saWJzICkgKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdkYm0nKQotICAgICAgICAgICAgZWxpZiBkYl9pbmNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1kYmxpYl9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9ZGJfaW5jcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnSEFWRV9CRVJLREJfSCcsTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0RCX0RCTV9IU0VBUkNIJyxOb25lKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9ZGJsaWJzKSkKKyAgICAgICAgICAgIGNvbmZpZ19hcmdzID0gW2FyZy5zdHJpcCgiJyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ09ORklHX0FSR1MiKS5zcGxpdCgpXQorICAgICAgICAgICAgZGJtX2FyZ3MgPSBbYXJnIGZvciBhcmcgaW4gY29uZmlnX2FyZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZy5zdGFydHN3aXRoKCctLXdpdGgtZGJtbGlib3JkZXI9JyldCisgICAgICAgICAgICBpZiBkYm1fYXJnczoKKyAgICAgICAgICAgICAgICBkYm1fb3JkZXIgPSBbYXJnLnNwbGl0KCc9JylbLTFdIGZvciBhcmcgaW4gZGJtX2FyZ3NdWy0xXS5zcGxpdCgiOiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRibV9vcmRlciA9ICJuZGJtOmdkYm06YmRiIi5zcGxpdCgiOiIpCisgICAgICAgICAgICBkYm1leHQgPSBOb25lCisgICAgICAgICAgICBmb3IgY2FuZCBpbiBkYm1fb3JkZXI6CisgICAgICAgICAgICAgICAgaWYgY2FuZCA9PSAibmRibSI6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgibmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZSBzeXN0ZW1zIGhhdmUgLWxuZGJtLCBvdGhlcnMgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmRibScpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kYm1fbGlicyA9IFsnbmRibSddCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5kYm1fbGlicyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIG5kYm0iCisgICAgICAgICAgICAgICAgICAgICAgICBkYm1leHQgPSBFeHRlbnNpb24oJ2RibScsIFsnZGJtbW9kdWxlLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX05EQk1fSCcsTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPW5kYm1fbGlicykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImdkYm0iOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnZ2RibScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZ2RibV9saWJzID0gWydnZGJtJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RibV9jb21wYXQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJtX2xpYnMuYXBwZW5kKCdnZGJtX2NvbXBhdCcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaW5kX2ZpbGUoImdkYm0vbmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIGdkYm0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9HREJNX05EQk1fSCcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gZ2RibV9saWJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaW5kX2ZpbGUoImdkYm0tbmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIGdkYm0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9HREJNX0RBU0hfTkRCTV9IJywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImJkYiI6CisgICAgICAgICAgICAgICAgICAgIGlmIGRiX2luY3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnVpbGRpbmcgZGJtIHVzaW5nIGJkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRibWV4dCA9IEV4dGVuc2lvbignZGJtJywgWydkYm1tb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1kYl9pbmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0hBVkVfQkVSS0RCX0gnLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdEQl9EQk1fSFNFQVJDSCcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1kYmxpYnMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgZGJtZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKGRibWV4dCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2RibScpCiAKICAgICAgICAgIyBBbnRob255IEJheHRlcidzIGdkYm0gbW9kdWxlLiAgR05VIGRibSgzKSB3aWxsIHJlcXVpcmUgLWxnZGJtOgotICAgICAgICBpZiAoc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2dkYm0nKSk6CisgICAgICAgIGlmICgnZ2RibScgaW4gZGJtX29yZGVyIGFuZAorICAgICAgICAgICAgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2dkYm0nKSk6CiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdnZGJtJywgWydnZGJtbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzID0gWydnZGJtJ10gKSApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnZ2RibScpCiAKICAgICAgICAgIyBVbml4LW9ubHkgbW9kdWxlcwotICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydtYWMnLCAnd2luMzInXToKKyAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnd2luMzInXToKICAgICAgICAgICAgICMgU3RlZW4gTHVtaG9sdCdzIHRlcm1pb3MgbW9kdWxlCiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCd0ZXJtaW9zJywgWyd0ZXJtaW9zLmMnXSkgKQogICAgICAgICAgICAgIyBKZXJlbXkgSHlsdG9uJ3MgcmxpbWl0IGludGVyZmFjZQpAQCAtMTI5NSwyOCArMTMyNSwzNSBAQAogCiAgICAgICAgICMgSW50ZXJmYWNlIHRvIHRoZSBFeHBhdCBYTUwgcGFyc2VyCiAgICAgICAgICMKLSAgICAgICAgIyBFeHBhdCB3YXMgd3JpdHRlbiBieSBKYW1lcyBDbGFyayBhbmQgaXMgbm93IG1haW50YWluZWQgYnkgYQotICAgICAgICAjIGdyb3VwIG9mIGRldmVsb3BlcnMgb24gU291cmNlRm9yZ2U7IHNlZSB3d3cubGliZXhwYXQub3JnIGZvcgotICAgICAgICAjIG1vcmUgaW5mb3JtYXRpb24uICBUaGUgcHlleHBhdCBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgUGF1bAotICAgICAgICAjIFByZXNjb2QgYWZ0ZXIgYSBwcm90b3R5cGUgYnkgSmFjayBKYW5zZW4uICBUaGUgRXhwYXQgc291cmNlCi0gICAgICAgICMgaXMgaW5jbHVkZWQgaW4gTW9kdWxlcy9leHBhdC8uICBVc2FnZSBvZiBhIHN5c3RlbQotICAgICAgICAjIHNoYXJlZCBsaWJleHBhdC5zby9leHBhdC5kbGwgaXMgbm90IGFkdmlzZWQuCisgICAgICAgICMgRXhwYXQgd2FzIHdyaXR0ZW4gYnkgSmFtZXMgQ2xhcmsgYW5kIGlzIG5vdyBtYWludGFpbmVkIGJ5IGEgZ3JvdXAgb2YKKyAgICAgICAgIyBkZXZlbG9wZXJzIG9uIFNvdXJjZUZvcmdlOyBzZWUgd3d3LmxpYmV4cGF0Lm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgIyBUaGUgcHlleHBhdCBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgUGF1bCBQcmVzY29kIGFmdGVyIGEgcHJvdG90eXBlIGJ5CisgICAgICAgICMgSmFjayBKYW5zZW4uICBUaGUgRXhwYXQgc291cmNlIGlzIGluY2x1ZGVkIGluIE1vZHVsZXMvZXhwYXQvLiAgVXNhZ2UKKyAgICAgICAgIyBvZiBhIHN5c3RlbSBzaGFyZWQgbGliZXhwYXQuc28gaXMgcG9zc2libGUgd2l0aCAtLXdpdGgtc3lzdGVtLWV4cGF0CisgICAgICAgICMgY29uZmlndXJlIG9wdGlvbi4KICAgICAgICAgIwogICAgICAgICAjIE1vcmUgaW5mb3JtYXRpb24gb24gRXhwYXQgY2FuIGJlIGZvdW5kIGF0IHd3dy5saWJleHBhdC5vcmcuCiAgICAgICAgICMKLSAgICAgICAgZXhwYXRpbmMgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnLCAnZXhwYXQnKQotICAgICAgICBkZWZpbmVfbWFjcm9zID0gWwotICAgICAgICAgICAgKCdIQVZFX0VYUEFUX0NPTkZJR19IJywgJzEnKSwKLSAgICAgICAgXQorICAgICAgICBpZiAnLS13aXRoLXN5c3RlbS1leHBhdCcgaW4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDT05GSUdfQVJHUyIpOgorICAgICAgICAgICAgZXhwYXRfaW5jID0gW10KKyAgICAgICAgICAgIGRlZmluZV9tYWNyb3MgPSBbXQorICAgICAgICAgICAgZXhwYXRfbGliID0gWydleHBhdCddCisgICAgICAgICAgICBleHBhdF9zb3VyY2VzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGF0X2luYyA9IFtvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnLCAnZXhwYXQnKV0KKyAgICAgICAgICAgIGRlZmluZV9tYWNyb3MgPSBbCisgICAgICAgICAgICAgICAgKCdIQVZFX0VYUEFUX0NPTkZJR19IJywgJzEnKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGV4cGF0X2xpYiA9IFtdCisgICAgICAgICAgICBleHBhdF9zb3VyY2VzID0gWydleHBhdC94bWxwYXJzZS5jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHJvbGUuYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhdC94bWx0b2suYyddCiAKICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdweWV4cGF0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3MgPSBkZWZpbmVfbWFjcm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gW2V4cGF0aW5jXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgPSBbJ3B5ZXhwYXQuYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhdC94bWxwYXJzZS5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHJvbGUuYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhdC94bWx0b2suYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBleHBhdF9pbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBleHBhdF9saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gWydweWV4cGF0LmMnXSArIGV4cGF0X3NvdXJjZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCiAKICAgICAgICAgIyBGcmVkcmlrIEx1bmRoJ3MgY0VsZW1lbnRUcmVlIG1vZHVsZS4gIE5vdGUgdGhhdCB0aGlzIGFsc28KQEAgLTEzMjYsNyArMTM2Myw4IEBACiAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zLmFwcGVuZCgoJ1VTRV9QWUVYUEFUX0NBUEknLCBOb25lKSkKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX2VsZW1lbnR0cmVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zID0gZGVmaW5lX21hY3JvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBbZXhwYXRpbmNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IGV4cGF0X2luYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBleHBhdF9saWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IFsnX2VsZW1lbnR0cmVlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQogICAgICAgICBlbHNlOgpAQCAtMTM2NCw1NiArMTQwMiwyOSBAQAogICAgICAgICAgICAgbGlicmFyaWVzID0gWyd3czJfMzInXQogCiAgICAgICAgIGVsaWYgcGxhdGZvcm0gPT0gJ2Rhcndpbic6ICAgICAgICAgICMgTWFjIE9TWAotICAgICAgICAgICAgbWFjcm9zID0gZGljdCgKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9PUEVOPTEsCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fVElNRURXQUlUPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9GRF9UUkFOU0ZFUj0xLAotICAgICAgICAgICAgICAgIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRT0xCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQogCiAgICAgICAgIGVsaWYgcGxhdGZvcm0gPT0gJ2N5Z3dpbic6ICAgICAgICAgICMgQ3lnd2luCi0gICAgICAgICAgICBtYWNyb3MgPSBkaWN0KAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX09QRU49MSwKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9USU1FRFdBSVQ9MSwKLSAgICAgICAgICAgICAgICBIQVZFX0ZEX1RSQU5TRkVSPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9CUk9LRU5fU0VNX1VOTElOSz0xCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbWFjcm9zID0gZGljdCgpCiAgICAgICAgICAgICBsaWJyYXJpZXMgPSBbXQogCiAgICAgICAgIGVsaWYgcGxhdGZvcm0gaW4gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICdmcmVlYnNkNycsICdmcmVlYnNkOCcpOgogICAgICAgICAgICAgIyBGcmVlQlNEJ3MgUDEwMDMuMWIgc2VtYXBob3JlIHN1cHBvcnQgaXMgdmVyeSBleHBlcmltZW50YWwKICAgICAgICAgICAgICMgYW5kIGhhcyBtYW55IGtub3duIHByb2JsZW1zLiAoYXMgb2YgSnVuZSAyMDA4KQotICAgICAgICAgICAgbWFjcm9zID0gZGljdCggICAgICAgICAgICAgICAgICAjIEZyZWVCU0QKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9PUEVOPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fVElNRURXQUlUPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9GRF9UUkFOU0ZFUj0xLAotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoKQogICAgICAgICAgICAgbGlicmFyaWVzID0gW10KIAogICAgICAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29wZW5ic2QnKToKLSAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoICAgICAgICAgICAgICAgICAgIyBPcGVuQlNECi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fT1BFTj0wLCAgICAgICAgICAgICMgTm90IGltcGxlbWVudGVkCi0gICAgICAgICAgICAgICAgSEFWRV9TRU1fVElNRURXQUlUPTAsCi0gICAgICAgICAgICAgICAgSEFWRV9GRF9UUkFOU0ZFUj0xLAotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoKQogICAgICAgICAgICAgbGlicmFyaWVzID0gW10KIAogICAgICAgICBlbGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ25ldGJzZCcpOgotICAgICAgICAgICAgbWFjcm9zID0gZGljdCggICAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IE5ldEJTRCA1Ci0gICAgICAgICAgICAgICAgSEFWRV9TRU1fT1BFTj0xLAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX1RJTUVEV0FJVD0wLAotICAgICAgICAgICAgICAgIEhBVkVfRkRfVFJBTlNGRVI9MSwKLSAgICAgICAgICAgICAgICBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUU9MQotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1hY3JvcyA9IGRpY3QoKQogICAgICAgICAgICAgbGlicmFyaWVzID0gW10KIAogICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMaW51eCBhbmQgb3RoZXIgdW5pY2VzCi0gICAgICAgICAgICBtYWNyb3MgPSBkaWN0KAotICAgICAgICAgICAgICAgIEhBVkVfU0VNX09QRU49MSwKLSAgICAgICAgICAgICAgICBIQVZFX1NFTV9USU1FRFdBSVQ9MSwKLSAgICAgICAgICAgICAgICBIQVZFX0ZEX1RSQU5TRkVSPTEKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBtYWNyb3MgPSBkaWN0KCkKICAgICAgICAgICAgIGxpYnJhcmllcyA9IFsncnQnXQogCiAgICAgICAgIGlmIHBsYXRmb3JtID09ICd3aW4zMic6CkBAIC0xNDI4LDggKzE0MzksOCBAQAogICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nX3NyY3MgPSBbICdfbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX211bHRpcHJvY2Vzc2luZy9zb2NrZXRfY29ubmVjdGlvbi5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0KLSAgICAgICAgICAgIGlmIG1hY3Jvcy5nZXQoJ0hBVkVfU0VNX09QRU4nLCBGYWxzZSk6CisgICAgICAgICAgICBpZiAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIQVZFX1NFTV9PUEVOJykgYW5kIG5vdAorICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCcpKToKICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmdfc3Jjcy5hcHBlbmQoJ19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMnKQogCiAgICAgICAgIGlmIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignV0lUSF9USFJFQUQnKToKQEAgLTE0NDksOCArMTQ2MCw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnbGludXhhdWRpb2RldicpCiAKLSAgICAgICAgaWYgcGxhdGZvcm0gaW4gKCdsaW51eDInLCAnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWVic2Q3JywgJ2ZyZWVic2Q4Jyk6CisgICAgICAgIGlmIChwbGF0Zm9ybSBpbiAoJ2xpbnV4MicsICdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsCisgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZWJzZDcnLCAnZnJlZWJzZDgnKQorICAgICAgICAgICAgb3IgcGxhdGZvcm0uc3RhcnRzd2l0aCgiZ251a2ZyZWVic2QiKSk6CiAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdvc3NhdWRpb2RldicsIFsnb3NzYXVkaW9kZXYuYyddKSApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnb3NzYXVkaW9kZXYnKQpAQCAtMTY3NSwxMCArMTY4NywxMiBAQAogICAgICAgICAjIFRoZSB2ZXJzaW9ucyB3aXRoIGRvdHMgYXJlIHVzZWQgb24gVW5peCwgYW5kIHRoZSB2ZXJzaW9ucyB3aXRob3V0CiAgICAgICAgICMgZG90cyBvbiBXaW5kb3dzLCBmb3IgZGV0ZWN0aW9uIGJ5IGN5Z3dpbi4KICAgICAgICAgdGNsbGliID0gdGtsaWIgPSB0Y2xfaW5jbHVkZXMgPSB0a19pbmNsdWRlcyA9IE5vbmUKLSAgICAgICAgZm9yIHZlcnNpb24gaW4gWyc4LjUnLCAnODUnLCAnOC40JywgJzg0JywgJzguMycsICc4MycsICc4LjInLAotICAgICAgICAgICAgICAgICAgICAgICAgJzgyJywgJzguMScsICc4MScsICc4LjAnLCAnODAnXToKLSAgICAgICAgICAgIHRrbGliID0gc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ3RrJyArIHZlcnNpb24pCi0gICAgICAgICAgICB0Y2xsaWIgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAndGNsJyArIHZlcnNpb24pCisgICAgICAgIGZvciB2ZXJzaW9uIGluIFsnOC42JywgJzg2JywgJzguNScsICc4NScsICc4LjQnLCAnODQnLCAnOC4zJywgJzgzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICc4LjInLCAnODInLCAnOC4xJywgJzgxJywgJzguMCcsICc4MCddOgorICAgICAgICAgICAgdGtsaWIgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGsnICsgdmVyc2lvbikKKyAgICAgICAgICAgIHRjbGxpYiA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGNsJyArIHZlcnNpb24pCiAgICAgICAgICAgICBpZiB0a2xpYiBhbmQgdGNsbGliOgogICAgICAgICAgICAgICAgICMgRXhpdCB0aGUgbG9vcCB3aGVuIHdlJ3ZlIGZvdW5kIHRoZSBUY2wvVGsgbGlicmFyaWVzCiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTE3MzcsMTEgKzE3NTEsMTEgQEAKIAogICAgICAgICAjIENoZWNrIGZvciBCTFQgZXh0ZW5zaW9uCiAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKyBhZGRlZF9saWJfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkxUOC4wJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCTFQ4LjAnKToKICAgICAgICAgICAgIGRlZnMuYXBwZW5kKCAoJ1dJVEhfQkxUJywgMSkgKQogICAgICAgICAgICAgbGlicy5hcHBlbmQoJ0JMVDguMCcpCiAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycyArIGFkZGVkX2xpYl9kaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCTFQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCTFQnKToKICAgICAgICAgICAgIGRlZnMuYXBwZW5kKCAoJ1dJVEhfQkxUJywgMSkgKQogICAgICAgICAgICAgbGlicy5hcHBlbmQoJ0JMVCcpCiAKQEAgLTE3NzksNyArMTc5Myw3IEBACiAgICAgZGVmIGNvbmZpZ3VyZV9jdHlwZXNfZGFyd2luKHNlbGYsIGV4dCk6CiAgICAgICAgICMgRGFyd2luIChPUyBYKSB1c2VzIHByZWNvbmZpZ3VyZWQgZmlsZXMsIGluCiAgICAgICAgICMgdGhlIE1vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4IGRpcmVjdG9yeS4KLSAgICAgICAgKHNyY2RpciwpID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygnc3JjZGlyJykKKyAgICAgICAgc3JjZGlyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKQogICAgICAgICBmZmlfc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzcmNkaXIsICdNb2R1bGVzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19jdHlwZXMnLCAnbGliZmZpX29zeCcpKQogICAgICAgICBzb3VyY2VzID0gW29zLnBhdGguam9pbihmZmlfc3JjZGlyLCBwKQpAQCAtMTgwOCw3ICsxODIyLDcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25maWd1cmVfY3R5cGVzX2RhcndpbihleHQpCiAKLSAgICAgICAgICAgIChzcmNkaXIsKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ3NyY2RpcicpCisgICAgICAgICAgICBzcmNkaXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCiAgICAgICAgICAgICBmZmlfYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF90ZW1wLCAnbGliZmZpJykKICAgICAgICAgICAgIGZmaV9zcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY2RpciwgJ01vZHVsZXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2N0eXBlcycsICdsaWJmZmknKSkKQEAgLTE4MzYsNyArMTg1MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgICAgICBmZmljb25maWcgPSB7fQotICAgICAgICAgICAgZXhlYyBvcGVuKGZmaV9jb25maWdmaWxlKSBpbiBmZmljb25maWcKKyAgICAgICAgICAgIHdpdGggb3BlbihmZmlfY29uZmlnZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBleGVjIGYgaW4gZmZpY29uZmlnCiAKICAgICAgICAgICAgICMgQWRkIC5TIChwcmVwcm9jZXNzZWQgYXNzZW1ibHkpIHRvIEMgY29tcGlsZXIgc291cmNlIGV4dGVuc2lvbnMuCiAgICAgICAgICAgICBzZWxmLmNvbXBpbGVyLnNyY19leHRlbnNpb25zLmFwcGVuZCgnLlMnKQpAQCAtMTg2MSwxMSArMTg3NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NhbGxiYWNrcy5jJywKICAgICAgICAgICAgICAgICAgICAnX2N0eXBlcy9jYWxscHJvYy5jJywKICAgICAgICAgICAgICAgICAgICAnX2N0eXBlcy9zdGdkaWN0LmMnLAotICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NmaWVsZC5jJywKLSAgICAgICAgICAgICAgICAgICAnX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jJ10KKyAgICAgICAgICAgICAgICAgICAnX2N0eXBlcy9jZmllbGQuYyddCiAgICAgICAgIGRlcGVuZHMgPSBbJ19jdHlwZXMvY3R5cGVzLmgnXQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKCdfY3R5cGVzL21hbGxvY19jbG9zdXJlLmMnKQogICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoJ19jdHlwZXMvZGFyd2luL2RsZmNuX3NpbXBsZS5jJykKICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncy5hcHBlbmQoJy1ETUFDT1NYJykKICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJ19jdHlwZXMvZGFyd2luJykKQEAgLTE5MDUsNyArMTkyMCw5IEBACiAgICAgICAgICAgICAjIGluIC91c3IvaW5jbHVkZS9mZmkKICAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZCgnL3Vzci9pbmNsdWRlL2ZmaScpCiAKLSAgICAgICAgZmZpX2luYyA9IGZpbmRfZmlsZSgnZmZpLmgnLCBbXSwgaW5jX2RpcnMpCisgICAgICAgIGZmaV9pbmMgPSBbc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJGRklfSU5DTFVERURJUiIpXQorICAgICAgICBpZiBub3QgZmZpX2luYyBvciBmZmlfaW5jWzBdID09ICcnOgorICAgICAgICAgICAgZmZpX2luYyA9IGZpbmRfZmlsZSgnZmZpLmgnLCBbXSwgaW5jX2RpcnMpCiAgICAgICAgIGlmIGZmaV9pbmMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmZmlfaCA9IGZmaV9pbmNbMF0gKyAnL2ZmaS5oJwogICAgICAgICAgICAgZnAgPSBvcGVuKGZmaV9oKQo=